<?xml version="1.0" encoding="utf-8"?>
<posts>
  <row Id="1" PostTypeId="1" CreationDate="2016-04-19T20:11:37.597" Score="22" ViewCount="833" Body="&lt;p&gt;We are planning to &lt;a href=&quot;https://github.com/aap/pdp6&quot; rel=&quot;noreferrer&quot;&gt;build a reconstruction&lt;/a&gt; of the &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-6&quot; rel=&quot;noreferrer&quot;&gt;PDP-6&lt;/a&gt;. The project is making a lot of progress, but currently we have a critical lack of software. Does anybody know where we can find software to run on the reconstructed machine?&lt;/p&gt;&#xA;" OwnerUserId="24" LastEditorUserId="3324" LastEditDate="2017-01-24T15:28:41.537" LastActivityDate="2020-03-02T08:50:10.180" Title="Where can I find software for the PDP-6?" Tags="&lt;pdp-6&gt;&lt;software&gt;&lt;dec&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2" PostTypeId="1" AcceptedAnswerId="7" CreationDate="2016-04-19T20:13:08.790" Score="33" ViewCount="3664" Body="&lt;p&gt;I used to blow the dust out of the cartridges but I heard that can actually damage the cartridge or the system itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for the &lt;em&gt;proper way&lt;/em&gt; to clean old Nintendo game cartridges (such as NES and SNES).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is cleaning the edge contacts sufficient or is it necessary to open the cartridge and do anything inside?&lt;/p&gt;&#xA;" OwnerUserId="13" LastEditorUserId="621" LastEditDate="2016-05-19T16:37:44.763" LastActivityDate="2016-12-05T13:38:05.090" Title="Reconditioning and cleaning old Nintendo (and other) game cartridges" Tags="&lt;game-cartridge&gt;&lt;cleaning&gt;&lt;nintendo&gt;&lt;nes&gt;&lt;snes&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3" PostTypeId="1" AcceptedAnswerId="9" CreationDate="2016-04-19T20:20:24.960" Score="31" ViewCount="1605" Body="&lt;p&gt;Doing spring cleaning with family, I found some old C64 disks. These are really old and no one knows what to do with them. Archiving or dumping them seems to be options but we are unsure how to do so efficiently and safely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, how do you archive and dump old C64 disks efficiently and safely?&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="44" LastEditDate="2016-04-19T20:25:23.103" LastActivityDate="2017-05-15T14:25:54.923" Title="Dumping and archiving C64 disks" Tags="&lt;floppy-disk&gt;&lt;archival&gt;&lt;commodore-64&gt;" AnswerCount="6" CommentCount="3" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4" PostTypeId="1" CreationDate="2016-04-19T20:20:28.600" Score="9" ViewCount="242" Body="&lt;p&gt;The Radio Shack game &lt;em&gt;Wildcatting&lt;/em&gt; uses the wrong color set when being played on a Color Computer 3 with an RGB monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I choose the correct color set before this game automatically executes?&lt;/p&gt;&#xA;" OwnerUserId="29" LastEditorUserId="780" LastEditDate="2017-06-06T13:50:47.933" LastActivityDate="2017-06-06T13:50:47.933" Title="How do I change the CoCo 3 color palette before running a Color Computer ROM Pak?" Tags="&lt;color-computer&gt;&lt;program-pak&gt;&lt;coco&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5" PostTypeId="2" ParentId="4" CreationDate="2016-04-19T20:20:28.600" Score="11" Body="&lt;p&gt;If you have a Multi-Pak, put the Program Pak in Slot 1 and set the switch to slot 2. Turn on the Multi-Pak and then the Color Computer 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;type: &lt;code&gt;PALETTE RGB&lt;/code&gt; to set the proper color set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;type: &lt;code&gt;POKE 65407,0&lt;/code&gt; to switch the Multi-Pak to slot 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game will then automatically start with the proper colors.&lt;/p&gt;&#xA;" OwnerUserId="29" LastActivityDate="2016-04-19T20:20:28.600" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6" PostTypeId="2" ParentId="2" CreationDate="2016-04-19T20:25:04.930" Score="12" Body="&lt;p&gt;I used to use a clean rubber eraser to clean golden contacts in general, not only cartridges but that can also leave residues if you don't clean it properly after. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a comprehensive article on Arstechnica website that recommends using Q-Tips, Brass polish, high-concentrated alcohol, and lint-free cloths. Based on the instructions and the companion video, it seems very effective. It demands you to open the cartridge though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See here for detailed instructions: &lt;a href=&quot;http://arstechnica.com/gaming/2013/08/the-cheap-easy-way-to-make-those-old-game-cartridges-as-good-as-new/&quot;&gt;http://arstechnica.com/gaming/2013/08/the-cheap-easy-way-to-make-those-old-game-cartridges-as-good-as-new/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2016-04-19T20:25:04.930" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7" PostTypeId="2" ParentId="2" CreationDate="2016-04-19T20:25:35.183" Score="31" Body="&lt;p&gt;Cotton swabs and isopropyl (rubbing) alcohol should do the trick. Try to keep the alcohol from the plastics; use it sparingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also fancy contact cleaner used in the electronics industry that works quite nice and is very stable. For example, &quot;CRC QD Contact Cleaner&quot;. Make sure you &lt;strong&gt;don't&lt;/strong&gt; get the type used for lubricating potentiometers. We want the quick drying, stable variety that doesn't leave a residue. This stuff is made for cleaning sensitive electronics and metal connectors. When in doubt, read the datasheet for the product. It'll say things like:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Ideal for telephones, PCs, relays, &lt;strong&gt;edge connectors&lt;/strong&gt;, tape heads, buss&#xA;  bars, circuits, contacts, printed circuit boards, switches and circuit&#xA;  breakers&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Emphasis mine)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This solution is also good for cleaning out really crufty carts, where the circuit board may be dirty enough to cause an electrical problem. In this case, you can either disassemble the cartridge and clean it gently with rubbing alcohol, or (if the cart is hard to split without breaking it) you can use the contact cleaner to spray inside the cart, letting the liquid run and &quot;boil&quot; (it has a very low boiling point, which is why it works as it does) clear out the cracks in the cart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bonus: Good for cleaning keyboards, too. Especially older chiclet style keyboards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should be ok for paper labels, etc. to be wetted with contact cleaner, but try not to soak it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, unless you really have to, you probably &lt;strong&gt;don't&lt;/strong&gt; need to clean out the inside of the carts. Maybe if they have been moldering in basement for years and you want to get rid of unsightly splotches or visible dirt. Electrically, everything inside the cart has a good connection (or did at the factory) and cleaning will not help improve that. But, as I say earlier, if cruft is causing what might be an electrical short, causing dodgy behaviour, cleaning the circuit board carefully with the right stuff is fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The outsides of the cartridges should be treated the same way they told you in the original packaging material: at most use a damp cloth with regular water (and &lt;em&gt;maybe&lt;/em&gt; a little vinegar if you want to freshen them up) and allow to dry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Don't&lt;/em&gt; use a rubber eraser. This eventually removes the gold or copper cladding on the contact fingers. In a shop I worked at, you'd be read the riot act if you rubbed contacts with &lt;em&gt;anything&lt;/em&gt;. And I'll have to disagree with anyone who suggests that paste metal cleaners from the store are useful for anything but the grungiest, filthiest carts, and even then I wouldn't recommend it. These compounds often have gritty lapping material in them, which is all sorts of bad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also seen people recommend &lt;em&gt;sandpaper&lt;/em&gt; for stubborn oxide. This would be a mistake, and should not even be considered a last resort. Under few circumstances would oxide be so crufty that it needs grit to remove (and grit causes scratches, which &lt;em&gt;encourages&lt;/em&gt; and promotes further harder to handle oxide). If your carts are this fouled, you are already into Retrounaut Archeology, in which case you are sort of on your own. The rest of us should stick with non-destructive or minimally destructive techniques. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, yes: moist air from your mouth is not great for metals. I understand that blowing into the cart is part of our learned wisdom for getting these things to work, but it's really selection bias at work.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorDisplayName="user12" LastEditDate="2016-04-20T17:40:21.693" LastActivityDate="2016-04-20T17:40:21.693" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8" PostTypeId="1" AcceptedAnswerId="29" CreationDate="2016-04-19T20:29:03.827" Score="16" ViewCount="2337" Body="&lt;p&gt;I have also found a nice &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum&quot; rel=&quot;noreferrer&quot;&gt;ZX Spectrum&lt;/a&gt; laying around. It needs a power source of course to run but there seems to be none that can be used to power it. Google doesn't seem to help and I would love to be able to use a machine that can be used...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a modern power source that can be used to power up my ZX Spectrum?&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="278" LastEditDate="2016-05-12T18:38:06.100" LastActivityDate="2018-01-04T07:52:42.177" Title="Powering up my ZX Spectrum" Tags="&lt;zx-spectrum&gt;&lt;power&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9" PostTypeId="2" ParentId="3" CreationDate="2016-04-19T20:30:54.373" Score="26" Body="&lt;p&gt;The simplest method of archiving old C-64 disks would be to get a ZoomFloppy and a 1571 floppy drive from eBay.  I say 1571 because it's much less likely to have alignment problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZoomFloppy will allow you to control the 1571 from a Windows, Linux or MacOS computer.  You can convert the disks into .d64 images that are suitable for use with an emulator like VICE, or you can write them out to fresh media.&#xA;The ZoomFloppy can be had here: &lt;a href=&quot;http://store.go4retro.com/zoomfloppy/&quot;&gt;http://store.go4retro.com/zoomfloppy/&lt;/a&gt;  (It looks like the store is currently out of stock.)&lt;/p&gt;&#xA;" OwnerUserId="49" LastActivityDate="2016-04-19T20:30:54.373" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10" PostTypeId="1" AcceptedAnswerId="35" CreationDate="2016-04-19T20:33:24.703" Score="20" ViewCount="2306" Body="&lt;p&gt;I am writing a Spectrum emulator, however I am finding it difficult to find official or reliable information about the ULA, its functioning and its pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there official sources documenting its inner workings?&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2017-09-20T11:34:41.573" Title="Documentation for the ZX Spectrum ULA" Tags="&lt;zx-spectrum&gt;&lt;hardware&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11" PostTypeId="1" CreationDate="2016-04-19T20:34:57.407" Score="10" ViewCount="210" Body="&lt;p&gt;I am the owner of an &lt;a href=&quot;https://en.wikipedia.org/wiki/Epson_HX-20&quot;&gt;Epson HX-20&lt;/a&gt; laptop computer. It runs well except for the builtin cassette drive which doesn't seem to work reliably. After carefully disassembling it I found that the belt seems to be quite loose, possibly because of the age.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is a good replacement for the defective drive belt? How can I find out the dimensions of the belt so I can find a replacement? The maintenance manual is silent on the dimensions of the belt and I don't think that the original still has the same length it had when it came out of the factory.&lt;/p&gt;&#xA;" OwnerUserId="24" LastActivityDate="2016-04-19T23:59:24.187" Title="What to replace the belt in the cassette drive of an Epson HX-20 with?" Tags="&lt;cassette&gt;&lt;maintenance&gt;&lt;hx-20&gt;&lt;epson&gt;&lt;belt&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12" PostTypeId="2" ParentId="3" CreationDate="2016-04-19T20:38:21.477" Score="11" Body="&lt;p&gt;Unless you expect to be reading &quot;flippy&quot; diskettes (recorded by flipping disk over), the DeviceSide FC-5025 will let you image C-64 diskettes using any contemporary machine with a USB port:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.deviceside.com/fc5025.html&quot;&gt;http://www.deviceside.com/fc5025.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike the ZoomFloppy, this will not support writing to diskettes.  It's intended for image capture only.&lt;/p&gt;&#xA;" OwnerUserId="61" LastActivityDate="2016-04-19T20:38:21.477" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14" PostTypeId="5" CreationDate="2016-04-19T20:43:40.220" Score="0" Body="&lt;p&gt;The Spectrum was a Z80-based microcomputer introduced in 1982.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was the first product from Sinclair Research Ltd. to have a colour display.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="276" LastEditDate="2016-07-21T09:57:29.023" LastActivityDate="2016-07-21T09:57:29.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15" PostTypeId="4" CreationDate="2016-04-19T20:43:40.220" Score="0" Body="For questions about the different versions and products of the Sinclair ZX Spectrum computer" OwnerUserId="37" LastEditorUserId="276" LastEditDate="2016-07-21T09:57:29.023" LastActivityDate="2016-07-21T09:57:29.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="16" PostTypeId="5" CreationDate="2016-04-19T20:44:17.003" Score="0" Body="&lt;p&gt;The Commodore 64, commonly called C64, C=64 (after the graphic logo on the case) or occasionally CBM 64 (for Commodore Business Machines), or VIC-64, was an 8-bit home computer introduced in January 1982 by Commodore International.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore 64 compatible family of Computers includes C64C, SX64, C128, C64GS (Game System) Commodore MAX. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sample questions regarding The Commodore 64:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What is the memory map of Commodore 64?&lt;/li&gt;&#xA;&lt;li&gt;How to connect Commodore 64 to modern LCD monitor?&lt;/li&gt;&#xA;&lt;li&gt;My Commodore 64 powers on and works but without sound - why could this be?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="621" LastEditDate="2017-03-24T15:38:39.100" LastActivityDate="2017-03-24T15:38:39.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="17" PostTypeId="4" CreationDate="2016-04-19T20:44:17.003" Score="0" Body="For questions about the different versions and products of the Commodore 64" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2016-04-19T21:29:54.463" LastActivityDate="2016-04-19T21:29:54.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="18" PostTypeId="5" CreationDate="2016-04-19T20:45:37.940" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-19T20:45:37.940" LastActivityDate="2016-04-19T20:45:37.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="19" PostTypeId="4" CreationDate="2016-04-19T20:45:37.940" Score="0" Body="For questions about the different versions and products of the NES (Nintendo Entertainment System) " OwnerUserId="37" LastEditorUserId="37" LastEditDate="2016-04-19T21:29:45.997" LastActivityDate="2016-04-19T21:29:45.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="20" PostTypeId="5" CreationDate="2016-04-19T20:46:30.630" Score="0" Body="&lt;p&gt;Use this tag for questions regarding maintaining retro hardware and keeping it in working order, and about efficacy and safety of methods, techniques and tools for doing so. For questions about repairing non-functioning machines use the &lt;a href=&quot;/questions/tagged/repair&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;repair&amp;#39;&quot; rel=&quot;tag&quot;&gt;repair&lt;/a&gt; tag.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This tag's use is currently ambiguous, and similar to the use of &lt;a href=&quot;/questions/tagged/restoration&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;restoration&amp;#39;&quot; rel=&quot;tag&quot;&gt;restoration&lt;/a&gt; and &lt;a href=&quot;/questions/tagged/repair&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;repair&amp;#39;&quot; rel=&quot;tag&quot;&gt;repair&lt;/a&gt;. Please use the tag most relevant to your problem.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="278" LastEditDate="2017-01-04T21:29:43.633" LastActivityDate="2017-01-04T21:29:43.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="21" PostTypeId="4" CreationDate="2016-04-19T20:46:30.630" Score="0" Body="Methods, techniques and tools for the care and upkeep of working retro machinery. Use [repair] when asking about non-functional machines." OwnerUserId="37" LastEditorUserId="15334" LastEditDate="2021-02-08T17:29:20.877" LastActivityDate="2021-02-08T17:29:20.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22" PostTypeId="5" CreationDate="2016-04-19T20:48:11.160" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-19T20:48:11.160" LastActivityDate="2016-04-19T20:48:11.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="23" PostTypeId="4" CreationDate="2016-04-19T20:48:11.160" Score="0" Body="For questions about the products from the company, Epson" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2016-04-19T21:30:03.950" LastActivityDate="2016-04-19T21:30:03.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="24" PostTypeId="1" AcceptedAnswerId="28" CreationDate="2016-04-19T20:49:27.720" Score="17" ViewCount="1314" Body="&lt;p&gt;I opened up an Amiga 600 to install a hard drive, and after reconnecting the keyboard ribbon and powering the computer up, at least one column of keys no longer works.  What did I do wrong and what can I do to fix it?&lt;/p&gt;&#xA;" OwnerUserId="64" LastEditorUserId="11916" LastEditDate="2019-04-21T16:36:18.410" LastActivityDate="2019-04-21T16:36:18.410" Title="What should I do when some of the keys of my Amiga 600 have stopped working?" Tags="&lt;amiga&gt;&lt;amiga-600&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="25" PostTypeId="1" CreationDate="2016-04-19T20:50:42.697" Score="36" ViewCount="2207" Body="&lt;p&gt;Hitachi was a second source for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6809&quot;&gt;Motorola 6809&lt;/a&gt; Micro Processor. The 6309 had many secret features. What advantages does the HD6309 have over the MC6809?&lt;/p&gt;&#xA;" OwnerUserId="29" LastEditorUserId="29" LastEditDate="2016-04-19T21:57:02.220" LastActivityDate="2021-02-10T17:00:56.207" Title="Advantages of a Hitachi HD6309 versus a plain Motorola MC6809" Tags="&lt;6809&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="26" PostTypeId="2" ParentId="25" CreationDate="2016-04-19T20:50:42.697" Score="8" Body="&lt;ol&gt;&#xA;&lt;li&gt;Pin and software compatible.&lt;/li&gt;&#xA;&lt;li&gt;Two extra 8-bit accumulators.&lt;/li&gt;&#xA;&lt;li&gt;Instruction fetch pipeline.&lt;/li&gt;&#xA;&lt;li&gt;Division instruction.&lt;/li&gt;&#xA;&lt;li&gt;Lower power consumption.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="29" LastActivityDate="2016-04-19T20:50:42.697" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="28" PostTypeId="2" ParentId="24" CreationDate="2016-04-19T21:07:22.283" Score="16" Body="&lt;p&gt;The first hope is that this is merely the ribbon not sitting well in the socket - try to reseat it; check if a corner didn't fold up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's not the case, and you don't have a spare keyboard, you're in for a &quot;surgical&quot; fix. The paths on the ribbon are printed with a kind of carbon component, which is &lt;em&gt;brittle&lt;/em&gt;. In particular the fold just above the connector is a place of frequent faults. Inspect it for cracks. If you see any, you will need to obtain a graphite paste, or some other substance used in electronics to fix broken paths through application like paste. Strip the outer layer of the foil with a fine knife (the paths are actually sandwiched between them even if they seem exposed, the foil is really thin), and fix the path with the paste. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then inspect the paths for any more cracks which might have appeared in the process of fixing that broken path...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then fix them too...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then assembly everything before the paste dries up completely, hoping for the best, because it's far more brittle than the paths themselves. Which also means you'll likely have to repeat the procedure every time you open the cover. With the number of broken paths likely climbing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A total pain in the neck, but works... kinda. It's really better to get a broken A600 and just replace the keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regardless, avoid bending the ribbon at the fold before the connector at all cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;I recalled one more mode of failure - if the keyboard was plugged and unplugged relatively frequently, it's likely the carbon print has rubbed off right at where the socket pins connect. It should be visible when looking against a light (bulb etc) - the light will show through the pads.&#xA;In this case the best option is to trim about a millimeter of the ribbon off the end - the pads extend quite a bit above the point of connection, so there's quite a bit of spare room, and the connection will be made with fresh, unscratched part of the pads. Just use either scisors or x-acto knife (or similar), to shorten the ribbon by about a millimeter. Take care not to let the knife slide over the paths/tracks of the part that's not discarded. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;I had to deal with that stuff way more often than I should have... I'd take the disk from my A600 to work, where I could mount it under Linux and point to its mount point with UAE, running emulated Amiga at work and getting stuff from the net to the disk, then in the evening reinstall it in my Amiga and make use of the goodies obtained. Of course the wear on the keyboard ribbon took its toll.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="74" LastEditDate="2016-04-20T11:31:10.203" LastActivityDate="2016-04-20T11:31:10.203" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="29" PostTypeId="2" ParentId="8" CreationDate="2016-04-19T21:07:57.447" Score="17" Body="&lt;p&gt;&lt;a href=&quot;http://www.worldofspectrum.org/faq/reference/hardware.htm&quot;&gt;World Of Spectrum&lt;/a&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Input: 240V AC, 50Hz&lt;/li&gt;&#xA;&lt;li&gt;Output: 9V DC, 1.4A&lt;/li&gt;&#xA;&lt;li&gt;Centre Polarity: -ve (inner diameter is 2.5mm)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="29" LastActivityDate="2016-04-19T21:07:57.447" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="30" PostTypeId="1" AcceptedAnswerId="51" CreationDate="2016-04-19T21:13:01.830" Score="11" ViewCount="1018" Body="&lt;p&gt;I still have some tapes for my Atari 65XE and I'd like to play some of the old games I got.  But I don't have the Atari anymore. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a tape recorder of quality surpassing the Atari one by quite a bit though, and a PC with a good audio input capable of sampling the signal at well above the standard 600 baud of Atari tape storage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some way to dump these games to PC and convert them to ATR files - the emulator images?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="276" LastEditDate="2016-12-21T11:26:01.923" LastActivityDate="2019-10-06T00:54:44.617" Title="How to convert Atari (65XE) tapes to ATR?" Tags="&lt;atari&gt;&lt;emulation&gt;&lt;data-transfer&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="31" PostTypeId="1" AcceptedAnswerId="61" CreationDate="2016-04-19T21:13:21.580" Score="18" ViewCount="1335" Body="&lt;p&gt;I have also found a working 1978 Apple II. Now my dad wants me to transfer its data to another device without using fancy Apple II exclusive hardware and if possible, through a cassette port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, how else can I transfer the data from the Apple II to another device like my computer without using specially design hardware for the Apple II? If possible, let the method include using a cassette port.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="56" LastEditDate="2016-04-22T00:26:10.917" LastActivityDate="2016-04-22T00:26:10.917" Title="Transferring from Apple II" Tags="&lt;apple-ii&gt;&lt;data-transfer&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="33" PostTypeId="1" AcceptedAnswerId="70" CreationDate="2016-04-19T21:19:48.097" Score="23" ViewCount="3086" Body="&lt;p&gt;Going to the store is treacherous for me. So I prefer doing stuff at home, including cleaning up 5¼&quot; floppy disks with only home supplies. Unfortunately, I do not know how or which materials/chemicals to use. This is a dilemma for me because I might accidentally damage a disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I safely clean these floppy drives with only supplies usually found at home instead of a NOS cleaning kit?&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="7946" LastEditDate="2019-01-22T17:20:34.930" LastActivityDate="2021-04-23T14:24:40.617" Title="Cleaning 5¼&quot; floppy drives" Tags="&lt;floppy-disk&gt;&lt;maintenance&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="34" PostTypeId="1" AcceptedAnswerId="43" CreationDate="2016-04-19T21:23:15.263" Score="23" ViewCount="5009" Body="&lt;p&gt;Our demoscene group managed to release only one demo before it fell apart, but these being the early days of the Internet in my country, and me getting lucky with obtaining access to it and creating our own webpage, I published the demo on the net in the most common Amiga floppy archivisation system of the day - &lt;a href=&quot;https://en.wikipedia.org/wiki/Disk_Masher_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;Disk Mashing System, DMS&lt;/a&gt;, an Amiga shareware program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The amiga is long gone, the web host is long gone, but last I checked, the Internet Archive still holds the DMS image of our demo. I'd like to take a trip down the memory lane, except the DMS format is dead - currently ADF is the de facto standard of keeping Amiga floppies archived as files, and the emulators can handle that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I convert our demo from DMS to ADF without having an Amiga?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="3290" LastEditDate="2020-05-20T06:37:57.483" LastActivityDate="2021-01-25T02:43:15.833" Title="How to convert Amiga DMS to ADF?" Tags="&lt;amiga&gt;&lt;emulation&gt;&lt;file-format&gt;&lt;disk-image&gt;&lt;compression&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="35" PostTypeId="2" ParentId="10" CreationDate="2016-04-19T21:25:40.213" Score="28" Body="&lt;p&gt;Buy, and study carefully, &lt;a href=&quot;http://www.zxdesign.info/book/&quot;&gt;The ZX Spectrum ULA&lt;/a&gt;. The book is the result of opening the chip and reverse-engineering it down to the transistor level.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2016-04-19T21:25:40.213" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="36" PostTypeId="1" AcceptedAnswerId="66" CreationDate="2016-04-19T21:29:26.527" Score="15" ViewCount="3808" Body="&lt;p&gt;It's difficult to find a modern LCD monitor that can display a 15 kHz signal through VGA, so I'm wondering if S-Video is just as good when displaying 240p and 480i? I've looked at screenshot and video comparisons online, but I can't see a difference.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="278" LastEditDate="2016-05-18T20:46:16.860" LastActivityDate="2018-03-28T22:02:52.960" Title="With a 15 kHz video signal (240p or 480i), does VGA have any real-world advantage over S-Video?" Tags="&lt;video&gt;&lt;vga&gt;&lt;s-video&gt;&lt;color-display&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="37" PostTypeId="1" AcceptedAnswerId="38" CreationDate="2016-04-19T21:32:46.007" Score="30" ViewCount="1428" Body="&lt;p&gt;Some Apple II 5.25&quot; floppies used a special pattern of bytes that could not be automatically detected by disk copying software.  How could the pattern be invisible to disk copiers but detectable by the program itself?&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-05-09T23:13:35.647" Title="How does &quot;bit-slip&quot; copy protection work?" Tags="&lt;floppy-disk&gt;&lt;apple-ii&gt;&lt;copy-protection&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="38" PostTypeId="2" ParentId="37" CreationDate="2016-04-19T21:32:46.007" Score="29" Body="&lt;p&gt;The Apple II reads disk tracks as a continuous stream of bits.  To make sense of the data, it's necessary to figure out where individual bytes start.  This is done with self-sync bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Standard self-sync bytes are &lt;code&gt;FF&lt;/code&gt;, followed by two &quot;invisible&quot; zeroes:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; byte 0  **  byte 1  **  byte 2  **&#xA;11111111 00 11111111 00 11111111 00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Apple II will read bits from the bit stream, sliding them in from right to left, until a &lt;code&gt;1&lt;/code&gt; lands in the high bit of the 8-bit register.  If you start reading from a &lt;code&gt;1&lt;/code&gt;, you will read 7 more bits.  If you start reading from a &lt;code&gt;0&lt;/code&gt;, you will read 8 or 9 more bits, because the initial zeroes just slide off the left end of the register.  With just a few self-sync bytes, we can ensure that we fall into sync with the byte boundaries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, suppose you started reading at an offset of 4 bits into a self-sync pattern:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;....11110011111111001111111100&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The code would read &lt;code&gt;11110011&lt;/code&gt; for the first byte, &lt;code&gt;11111100&lt;/code&gt; for the second, and &lt;code&gt;11111111&lt;/code&gt; for the third -- synchronization achieved.  The extra zeroes are read, but just slide off the left end of the register, because we're waiting for a &lt;code&gt;1&lt;/code&gt; to appear in the high bit.  The only way to tell the difference between a self-sync &lt;code&gt;FF&lt;/code&gt;, and a regular &lt;code&gt;FF&lt;/code&gt;, is by how long it takes to read.  With one bit arriving every 4 CPU cycles, detecting the difference is tricky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trick exploited by the bit-slip technique is to follow the self-sync bytes with a pattern that includes additional zeroes between bytes.  For example, consider this stream:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;11100111011100111001110011111100111&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If we latch 8-bit bytes as usual, we'll read it like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; byte 0  *  byte 1  **  byte 2   byte 3&#xA;11100111 0 11100111 00 11100111 11100111&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Because the &quot;extra&quot; &lt;code&gt;0&lt;/code&gt; bits &quot;between&quot; bytes are ignored, this will be read as &lt;code&gt;E7 E7 E7 E7&lt;/code&gt;.  But what happens if we deliberately stall for 12 cycles, ignoring the first three bits?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;xxx **  byte 0  *  byte 1  **  byte 2  ...&#xA;111 00 11101110 0 11100111 00 11111100 111&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;We get a different pattern: &lt;code&gt;EE E7 FC&lt;/code&gt;.  By deliberately desynchronizing the stream, the program can detect the shifted pattern.  And because the pattern starts with zeroes, the delay doesn't have to be perfectly cycle-accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Copy programs can pretty reliably detect the difference between &quot;normal&quot; and &quot;long&quot; bytes with a carefully timed loop -- either the byte is ready after 32 cycles, or it isn't.  The pattern above uses both 9-bit and 10-bit bytes, so to reproduce it correctly you'd need to accurately detect the difference between a 32-cycle read, a 36-cycle read, and a 40-cycle read.  Very difficult to do on a 1MHz 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For additional details, see &lt;a href=&quot;http://mirrors.apple2.org.za/ftp.apple.asimov.net/images/games/action/Ikari%20Warriors%20%284am%20crack%29.txt&quot;&gt;this article&lt;/a&gt; and this &lt;a href=&quot;https://groups.google.com/forum/#!msg/comp.sys.apple2/3zdIhTxSqY4/IddZHUro20oJ&quot;&gt;comp.sys.apple2 posting&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-05-09T23:13:35.647" LastActivityDate="2016-05-09T23:13:35.647" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="39" PostTypeId="1" CreationDate="2016-04-19T21:33:18.533" Score="18" ViewCount="1235" Body="&lt;p&gt;On the local auction portal I have spotted ads for some &quot;supercharged&quot; 8-bit Ataris (800XL, 65XE etc) - modified to support 4 megabytes of RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The auctions were scarce in details, more concentrating on praising the product than providing any actual technical details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone tell me more about that mod? How does that work? How does that play with standard Atari software? How to access the extra memory and of what use could it be?&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2016-11-02T20:09:32.567" Title="How does the 4MB mod for 8-bit Atari work?" Tags="&lt;atari&gt;&lt;hardware-mods&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="40" PostTypeId="5" CreationDate="2016-04-19T21:33:37.120" Score="0" Body="&lt;p&gt;This tag is suited for general questions about Apple Computer and its products.  In many cases, such questions would not be appropriate for this site.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please use tags that are specific to the products, e.g.:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://retrocomputing.stackexchange.com/questions/tagged/apple-ii&quot;&gt;apple-ii&lt;/a&gt; for general Apple II topics&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://retrocomputing.stackexchange.com/questions/tagged/apple-iigs&quot;&gt;apple-iigs&lt;/a&gt; for subjects specific to the Apple IIgs&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://retrocomputing.stackexchange.com/questions/tagged/apple-lisa&quot;&gt;apple-lisa&lt;/a&gt; for the Apple Lisa&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://retrocomputing.stackexchange.com/questions/tagged/macintosh&quot;&gt;macintosh&lt;/a&gt; for the Apple Macintosh [should be apple-macintosh]&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-20T23:34:35.467" LastActivityDate="2016-04-20T23:34:35.467" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="41" PostTypeId="4" CreationDate="2016-04-19T21:33:37.120" Score="0" Body="For questions about products made by Apple" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2016-04-20T14:42:07.703" LastActivityDate="2016-04-20T14:42:07.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="42" PostTypeId="1" AcceptedAnswerId="65" CreationDate="2016-04-19T21:34:59.757" Score="25" ViewCount="4808" Body="&lt;p&gt;Is there a way, such a specific interface adapter, which would allow me to connect a PS/2 keyboard to an original ZX Spectrum?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I expect the keyboard to work similarly to the ZX Spectrum itself -- in other words, pressing P would trigger send the same interrupt to the CPU as the rubber keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should be doable since some joystick interfaces, such as the Sinclair Interface 2, did map joystick events to key presses.&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2017-09-26T12:34:57.413" Title="Adapting a &quot;modern&quot; keyboard to a ZX Spectrum" Tags="&lt;zx-spectrum&gt;&lt;hardware&gt;&lt;keyboards&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="43" PostTypeId="2" ParentId="34" CreationDate="2016-04-19T21:36:52.620" Score="17" Body="&lt;p&gt;From some quick research, &lt;a href=&quot;http://www.winuae.net/&quot;&gt;WinUAE&lt;/a&gt; (a popular Amiga emulator) supports reading a DMS file just like an ADF. So you could probably mount it and then save it back as ADF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, according to the &lt;a href=&quot;http://adfopus.sourceforge.net/&quot;&gt;ADF Opus tool&lt;/a&gt; site, they can read DMS also.&lt;/p&gt;&#xA;" OwnerUserId="81" LastActivityDate="2016-04-19T21:36:52.620" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="44" PostTypeId="1" AcceptedAnswerId="69" CreationDate="2016-04-19T21:42:46.023" Score="27" ViewCount="2255" Body="&lt;p&gt;The game &lt;a href=&quot;https://en.wikipedia.org/wiki/Universe_%281994_video_game%29&quot;&gt;Universe&lt;/a&gt; for Amiga boasted ability of use of  256 different Amiga colors available through the ECS chips, with only limitation of 64 colors in halfbrite palette (32 arbitrary + 32 at half brightness of the first 32) per scanline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was pretty much unachievable in common use, and while there were games or programs that would switch the palette at cost of one entirely black scanline (e.g. Personal Paint keeping the toolbox bar in its original palette while providing all 64 colors of halfbrite for painting) this was the only case I know about where a full palette switch could be achieved within each scanline.... or something around that, my memory may be sketchy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How was that possible? Was that used elsewhere?&#xA;Advanced answers, even with assembly code snippets are most welcome.&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2020-11-25T08:36:27.140" Title="How to obtain 256 arbitrary colors with limitation of 64 per line in Amiga (ECS)?" Tags="&lt;amiga&gt;&lt;graphics&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="45" PostTypeId="5" CreationDate="2016-04-19T21:45:23.553" Score="0" Body="&lt;p&gt;Atari Inc. was an American manufacturer of video games and home computers founded in 1972.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="276" LastEditDate="2016-06-24T11:36:24.377" LastActivityDate="2016-06-24T11:36:24.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="46" PostTypeId="4" CreationDate="2016-04-19T21:45:23.553" Score="0" Body="For questions about different versions of, and products for, Atari consoles and home computers." OwnerUserId="89" LastEditorUserId="89" LastEditDate="2016-04-20T14:44:44.340" LastActivityDate="2016-04-20T14:44:44.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="47" PostTypeId="5" CreationDate="2016-04-19T21:47:33.127" Score="0" Body="&lt;p&gt;Emulation is the process of imitating software or hardware (usually hardware) with a program in order to run other (usually older) programs that require the emulated software or hardware to function.&lt;/p&gt;&#xA;&lt;p&gt;No attempt is made here to distinguish between simulation, emulation and virtualisation: while some distinctions may be drawn between those based on implementation differences, functionally they are synonyms in practice.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Not every emulation question is on-topic.&lt;/strong&gt; Questions concerning the mere use and configuration of an emulator on a host platform are better asked elsewhere. Implementation of emulators is generally accepted as on-topic; fine-tuning and recommendations are more controversial. See &lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/questions/14/is-emulation-on-topic&quot;&gt;Is emulation on topic?&lt;/a&gt; for a meta discussion on the subject.&lt;/p&gt;&#xA;&lt;p&gt;Sample questions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Which Commodore 64 emulator offers better compatibility for game &lt;em&gt;&lt;/em&gt;?&lt;/li&gt;&#xA;&lt;li&gt;What platforms are supported by MAME?&lt;/li&gt;&#xA;&lt;li&gt;How does a &lt;em&gt;&lt;/em&gt; emulator handle 50Hz (PAL) games on a 60Hz (VGA) display?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="15334" LastEditDate="2021-04-12T07:53:22.640" LastActivityDate="2021-04-12T07:53:22.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="48" PostTypeId="4" CreationDate="2016-04-19T21:47:33.127" Score="0" Body="Processes and software for emulating retro hardware (e.g. MAME, QEMU). NOT EVERY EMULATION QUESTION IS ON-TOPIC; SEE TAG WIKI." OwnerUserId="89" LastEditorUserId="15334" LastEditDate="2021-04-12T07:53:22.640" LastActivityDate="2021-04-12T07:53:22.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="49" PostTypeId="5" CreationDate="2016-04-19T21:51:59.167" Score="0" Body="&lt;p&gt;The Apple II (stylised &lt;strong&gt;apple ][&lt;/strong&gt;) is an 8-bit home computer series designed by Apple's Steve Wozniak and Steve Jobs. The series was introduced in 1977 and produced until 1993. It was Apple's first mass-market product, and extremely successful, with sales growing exponentially for the first 5 years. When first introduced, its color support was noteworthy for such an inexpensive (at the time) computer.&lt;/p&gt;&#xA;&lt;p&gt;Software available for the Apple II includes games, BASIC and other interpreters, and a variety of business and practical programs, including VisiCalc, which introduced the idea of the &amp;quot;spreadsheet&amp;quot; to the microcomputing world.&lt;/p&gt;&#xA;&lt;p&gt;Peripherals include displays, tape and disk storage, modems, and a large variety of expansion cards, some of which contain additional processors to allow the Apple II to run software designed for architectures other than its own 6502.&lt;/p&gt;&#xA;&lt;p&gt;This tag should be used only for questions about the &lt;strong&gt;apple ][&lt;/strong&gt;, the &lt;strong&gt;apple ][+&lt;/strong&gt; (and Europlus and J-Plus), the &lt;strong&gt;apple&lt;/strong&gt; //&lt;strong&gt;e&lt;/strong&gt;,  the &lt;strong&gt;apple Ⅱc&lt;/strong&gt;, and the &lt;strong&gt;apple Ⅱc Plus&lt;/strong&gt;, and software and peripherals for these machines. For questions about the Apple Ⅱɢꜱ use the &lt;a href=&quot;/questions/tagged/apple-iigs&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;apple-iigs&amp;#39;&quot; rel=&quot;tag&quot;&gt;apple-iigs&lt;/a&gt; tag.&lt;/p&gt;&#xA;&lt;p&gt;For questions about Apple II assembly code, use the &lt;a href=&quot;/questions/tagged/6502&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;6502&amp;#39;&quot; rel=&quot;tag&quot;&gt;6502&lt;/a&gt; and &lt;a href=&quot;/questions/tagged/assembly&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;assembly&amp;#39;&quot; rel=&quot;tag&quot;&gt;assembly&lt;/a&gt; tags in addition to this tag.&lt;/p&gt;&#xA;" OwnerUserId="89" LastEditorUserId="56" LastEditDate="2020-07-06T18:39:35.680" LastActivityDate="2020-07-06T18:39:35.680" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="50" PostTypeId="4" CreationDate="2016-04-19T21:51:59.167" Score="0" Body="The Apple II series of personal computers and related software and hardware. Use [apple-iigs] for the Apple IIgs in particular, or [apple] for Apple hardware in general." OwnerUserId="89" LastEditorUserId="15334" LastEditDate="2021-02-06T09:48:09.807" LastActivityDate="2021-02-06T09:48:09.807" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="51" PostTypeId="2" ParentId="30" CreationDate="2016-04-19T21:53:45.113" Score="8" Body="&lt;p&gt;Actually, you're asking about two separate things here. The first is &quot;how to get my tapes to a PC&quot; and second is &quot;how to convert tape records into a disk file/image&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The former can be solved with &lt;a href=&quot;http://turgen.sourceforge.net&quot; rel=&quot;noreferrer&quot;&gt;http://turgen.sourceforge.net&lt;/a&gt;, the latter is a bit more complicated. There had been many native tools for this task but the conversion is not always possible -- for instance many tape games load to awfully low addresses in RAM (overwriting the DOS) or use a copy protection or load parts into RAM after some point in game etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you don't have anything special on those tapes (i.e. just classic games/programs), I'd suggest to google for them first, they might be available in ATR/XEX format already (&lt;a href=&quot;http://a8.fandal.cz&quot; rel=&quot;noreferrer&quot;&gt;http://a8.fandal.cz&lt;/a&gt; is a good start).&lt;/p&gt;&#xA;" OwnerUserId="90" LastActivityDate="2016-04-19T21:53:45.113" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="52" PostTypeId="1" AcceptedAnswerId="230" CreationDate="2016-04-19T22:04:18.050" Score="21" ViewCount="816" Body="&lt;p&gt;The Apple IIgs video memory is controlled by the 1MHz Mega II chip, so directly accessing the Super Hi-Res page in bank $E1 is slower than accessing other memory.  How can I render in &quot;fast&quot; memory, and then just copy the final result to &quot;slow&quot; memory?&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-05-04T03:02:02.383" Title="How do I use shadowed memory to render Super Hi-Res quickly?" Tags="&lt;apple-ii&gt;&lt;graphics&gt;&lt;apple-iigs&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="53" PostTypeId="2" ParentId="52" CreationDate="2016-04-19T22:04:18.050" Score="13" Body="&lt;p&gt;The memory shadowing feature copies writes from $01/2000-9FFF to the corresponding location in bank $E1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you want to do looks like this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Perform computation for the current frame.&lt;/li&gt;&#xA;&lt;li&gt;Disable shadowing ($E0/C035 &amp;amp;= $F7).&lt;/li&gt;&#xA;&lt;li&gt;Render the frame into bank $01.&lt;/li&gt;&#xA;&lt;li&gt;Enable shadowing ($E0/C035 |= $08).&lt;/li&gt;&#xA;&lt;li&gt;Wait for the scan beam to reach a point where tearing won't be visible.&lt;/li&gt;&#xA;&lt;li&gt;Copy the frame from $01 to $E1.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The fun trick is in step 6.  Using the extended-memory switches introduced on the 128K Apple //e ($E0/C003 and $E0/C005), you can map the memory from bank $01 into bank $00.  If you map the stack and direct page on top of the graphics screen, you can use the 65816 &lt;code&gt;PEI&lt;/code&gt; instruction to push a 16-bit value from the direct page to the stack, copying the data onto itself.  With shadowing enabled, the data will be shadow-copied into the same area of bank $E1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sure you have interrupts disabled while using the stack this way.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-19T22:50:11.750" LastActivityDate="2016-04-19T22:50:11.750" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="54" PostTypeId="1" AcceptedAnswerId="55" CreationDate="2016-04-19T22:06:00.410" Score="21" ViewCount="1908" Body="&lt;p&gt;There are some tape copiers, such as &lt;a href=&quot;https://archive.org/details/zx_Lerm_Tape_Copier_7_1985_Lerm_Software&quot; rel=&quot;nofollow noreferrer&quot;&gt;LERM&lt;/a&gt; that claim to be able to copy tapes which contain software that takes the full 48kbyte of RAM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this seems impossible on a Spectrum, when the whole 48kb is read from a single file on disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do they work?&lt;/p&gt;&#xA;" OwnerUserId="55" LastEditorUserId="3290" LastEditDate="2020-05-01T11:06:28.860" LastActivityDate="2020-05-01T11:06:28.860" Title="How did &quot;full memory&quot; Spectrum tape copiers work?" Tags="&lt;zx-spectrum&gt;&lt;software&gt;&lt;cassette-tape&gt;&lt;copy-protection&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="55" PostTypeId="2" ParentId="54" CreationDate="2016-04-19T22:06:00.410" Score="27" Body="&lt;p&gt;These programs usually had a mono-color background with very little text. By setting the color of the screen as &quot;black ink on black paper&quot; or &quot;white ink on white paper&quot;, it is possible to relocate the whole software in video RAM and hide it from view.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These programs were tiny asm utilities (they used 1 or 2 kilobytes or RAM) which copied themselves to videoram and used the rest of RAM as a buffer to copy the software they read from tape. Usually they discarded or corrupted the tiny bit of video memory they could not copy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, technically, they were not copying the whole 48k, but they did allow you to make a copy of a 48kbyte file, by discarding the video data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See for example &lt;a href=&quot;https://archive.org/details/zx_2_Speed_Copy_19xx_Ivan_Stich_cs&quot; rel=&quot;noreferrer&quot;&gt;Two Speed Copy&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VdsVP.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VdsVP.png&quot; alt=&quot;Screenshot - Two Speed Copy&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="55" LastEditorUserId="276" LastEditDate="2017-12-14T10:32:08.153" LastActivityDate="2017-12-14T10:32:08.153" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="56" PostTypeId="1" AcceptedAnswerId="63" CreationDate="2016-04-19T22:10:22.890" Score="28" ViewCount="2566" Body="&lt;p&gt;A lot of programs released for the Commodore 64 contained different software for the PAL or NTSC computer. Why did they have different versions of the hardware? Did the software have to be different too?&lt;/p&gt;&#xA;" OwnerUserId="81" LastEditorUserId="115" LastEditDate="2016-04-20T14:42:27.377" LastActivityDate="2017-04-20T13:17:12.613" Title="What are the differences between a PAL and NTSC C64?" Tags="&lt;hardware&gt;&lt;software&gt;&lt;commodore-64&gt;&lt;video&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="57" PostTypeId="2" ParentId="56" CreationDate="2016-04-19T22:13:27.593" Score="9" Body="&lt;p&gt;The timing of some programs - most notably games - is different due to the different frame rates of NTSC (60 Hz) and PAL (50 Hz). It may also affect the timing of the SID tunes if the SID registers are written during and synchronized to the vertical blanking of the frame.&lt;/p&gt;&#xA;" OwnerUserId="92" LastEditorUserId="92" LastEditDate="2016-04-19T22:13:49.957" LastActivityDate="2016-04-19T22:13:49.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="58" PostTypeId="5" CreationDate="2016-04-19T22:19:15.897" Score="0" Body="&lt;p&gt;The Apple IIgs was released by Apple Computer in September 1986.  The fifth model in the Apple II line, it featured a 16-bit CPU and significantly enhanced graphic and sound capabilities.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-20T14:44:16.650" LastActivityDate="2016-04-20T14:44:16.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="59" PostTypeId="4" CreationDate="2016-04-19T22:19:15.897" Score="0" Body="For questions related to the Apple IIgs computer." OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-20T14:53:58.023" LastActivityDate="2016-04-20T14:53:58.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="60" PostTypeId="2" ParentId="33" CreationDate="2016-04-19T22:22:06.960" Score="3" Body="&lt;p&gt;You can simply cut open the disk -in side where you hold the disk and insert it into the floppy drive- and let it soak a few min in water and liquid dishwash soap. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To dry them you need to wipe from center and out with a paper towel or a soft cloth, lay the disc on top of a papertowel or soft cloth rather than table while doing so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you can also do it the slow way, water/ipa and cottonstick.&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=01n8RgHgIwg&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=01n8RgHgIwg&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="77" LastActivityDate="2016-04-19T22:22:06.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="61" PostTypeId="2" ParentId="31" CreationDate="2016-04-19T22:40:10.070" Score="18" Body="&lt;p&gt;Assuming your data is on floppy disk and you have a functioning disk drive it is pretty easy to transfer files from an Apple II via cassette port. The program that I recommend using is called ADTPRO.&#xA;&lt;a href=&quot;http://adtpro.sourceforge.net/&quot;&gt;http://adtpro.sourceforge.net/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to first bootstrap ADTPRO using the following tutorial:&#xA;&lt;a href=&quot;http://adtpro.sourceforge.net/bootstrapaudio.html&quot;&gt;http://adtpro.sourceforge.net/bootstrapaudio.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the ADTPRO program has been loaded you will use it to send the disk images from the Apple II to your modern computer using the following tutorial:&#xA;&lt;a href=&quot;http://adtpro.sourceforge.net/sending.html&quot;&gt;http://adtpro.sourceforge.net/sending.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The files will stored on your computer in a DSK file format which you can open and in somecase manipulate files using an archive manager like CiderPress &lt;a href=&quot;https://sourceforge.net/projects/ciderpress/&quot;&gt;https://sourceforge.net/projects/ciderpress/&lt;/a&gt; or you can use them in most Apple II emulators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While you can transfer files from the Apple II using the cassette interface, it will be much easier and go much faster if you can use serial, but that would require a USB to serial adapter and a Super Serial Card (SSC) in your Apple II (which typical sells for $25-$40 on eBay).&lt;/p&gt;&#xA;" OwnerUserId="99" LastActivityDate="2016-04-19T22:40:10.070" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="62" PostTypeId="2" ParentId="3" CreationDate="2016-04-19T22:43:56.227" Score="10" Body="&lt;p&gt;The program &quot;Dumpers&quot; use is warpcopy, it does require some additional hardware, i.e. network cartridge for the C64, a full C64 setup and a diskettedrive (1541-II recommended as it is the easiest to access to clean the head), a PC and network cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;WarpCopy works as a client server, the C64 being the server and the pc the client, automatic file naming is also an awesome feature of WC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for using warpcopy is it's efficient way of handling errors.&#xA;d64copy with a X(a/e/m)1541 cable or ZoomFloppy can be quite troublesome when encountering errors, even though it does have retries.&#xA;I've made a script with parameters set so d64copy would mimic warpcopy. I quickly stopped using it as it didn't satisfy my needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kryoflux and a PC floppy drive can be a good option but isn't as fast as d64copy or warpcopy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not mentioning nibread (duh, just did) as that would just be pointless unless you're dumping originals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course depending on how the disks were stored, you might need to want to clean the disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Translate from Danish, there are some useful links &#xA;&lt;a href=&quot;http://blog.tomse.dk/2012/11/15/64nic-warpcopy/&quot;&gt;http://blog.tomse.dk/2012/11/15/64nic-warpcopy/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="77" LastActivityDate="2016-04-19T22:43:56.227" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="63" PostTypeId="2" ParentId="56" CreationDate="2016-04-19T22:59:08.727" Score="28" Body="&lt;p&gt;Hardware-wise, the Commodore 64, like most early computers, was synchronized to its graphics output: in the case of the C64, the CPU clock was derived from the timing crystal in the video hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a game-programming standpoint, the most important timing element is the vertical refresh rate: the 50 Hz (PAL) or 60 Hz (NTSC) rate at which the screen started drawing each frame.  A game coded for one frame rate would appear too fast or too slow on the other.  Given the limited CPU capabilities of the hardware (you've only got 19,700 or 17,050 CPU cycles per frame), a re-write of the software was often the only way to adapt while still being able to run fast enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C64 additionally had the ability to change the settings of the VIC-II graphics chip from code.  Normally this would be done during the vertical-blanking interval, when no signal was being output to the screen, but making the changes during the drawing interval permitted graphical effects (eg. number of colors) beyond the stated specs of the chip -- but this required cycle-perfect timing of the changes, and this timing was different for PAL and NTSC.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-04-19T22:59:08.727" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="64" PostTypeId="1" AcceptedAnswerId="157" CreationDate="2016-04-19T23:03:46.837" Score="11" ViewCount="602" Body="&lt;p&gt;My Compaq Presario CDS 633 outputs color in Windows 3.1, but not in DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I get color in DOS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried the &lt;code&gt;MODE&lt;/code&gt; setting, but it did not change anything.  &lt;code&gt;ANSI.SYS&lt;/code&gt; also has a &lt;code&gt;LOADHIGH&lt;/code&gt; line in &lt;code&gt;CONFIG.SYS&lt;/code&gt;.  Files of potential relevance are here: &lt;a href=&quot;http://www.jacobspctuneup.tk/SE/RetroComputing/&quot; rel=&quot;noreferrer&quot;&gt;http://www.jacobspctuneup.tk/SE/RetroComputing/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The computer was a floor model, and the monitor was bought with the computer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On the monitor connector, pins 9,12, and 15 are missing, and pin 11 is bent to the pin 12 position.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There is no hole for pin 9 on the VGA connector on the computer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="103" LastEditorUserId="278" LastEditDate="2016-05-19T00:56:34.437" LastActivityDate="2016-05-19T00:56:34.437" Title="My Compaq Presario CDS 633 outputs color in Windows 3.1 but not in DOS. How can I get color in DOS?" Tags="&lt;ms-dos&gt;&lt;color-display&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="65" PostTypeId="2" ParentId="42" CreationDate="2016-04-19T23:12:43.073" Score="26" Body="&lt;p&gt;I did such interface long time ago. It was(is) an internal interface designed to fit in a place near the right side of the board when using the Plus case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technical details here:&#xA;&lt;a href=&quot;http://www.zxprojects.com/index.php/ps2-adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.zxprojects.com/index.php/ps2-adapter&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the board&#xA;&lt;a href=&quot;https://i.stack.imgur.com/wPHIU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wPHIU.jpg&quot; alt=&quot;Interface circuit board&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Designed to fit here:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/v24rI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v24rI.jpg&quot; alt=&quot;Spectrum with interface fitted&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Schematic. Very simple. One microcontroller does all the work.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/lCWnh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lCWnh.png&quot; alt=&quot;Circuit Diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Upon booting, the uC resets the keyboard and checks for scan 3 capability. If it's not present, then default to scan 2 mode. After then, the uC sends a command to the keyboard to leave the NumLock led on. That means that the keyboard is ready to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Features new in the firmware version (v1.3b) or changed from previous releases:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Spanish and US-english keyboards supported (download and install the relevant update for your keyboard)&lt;/li&gt;&#xA;&lt;li&gt;All the Spectrum keystrokes are supported, even those that needs to switch to E-Mode for a while (Velesoft request).&lt;/li&gt;&#xA;&lt;li&gt;The Tab key has changed: now it maps to CAPS SHIFT+8, to help identing while working in GENS 3. Shift+Tab maps to CAPS SHIFT+5.&lt;/li&gt;&#xA;&lt;li&gt;Trigger key on Sinclair mode has changed to the left Alt key. The &quot;0&quot; key can also be used.&lt;/li&gt;&#xA;&lt;li&gt;The &quot;Application&quot; key toggles E-MODE on/off.&lt;/li&gt;&#xA;&lt;li&gt;The pound sign has been mapped to the key that shows the grave accent (both symbols have the same ASCII code).&lt;/li&gt;&#xA;&lt;li&gt;Spanish keyboard: the Ã‡ key is mapped to the (C) sign.&lt;/li&gt;&#xA;&lt;li&gt;Macros are stored in flash. They are not erased when the computer turns off. A update procedure doesn't erase the current stored macros.&lt;/li&gt;&#xA;&lt;li&gt;HOME and END keys also work as Begin Macro Recording (F3), and End Macro Recording (F4).&lt;/li&gt;&#xA;&lt;li&gt;The PAUSE key pauses a macro recording, so a key typed after PAUSE is not recorded. Recording is resumed pressing PAUSE again. While in macro playback mode, the PAUSE key toggles current macro playing on/off.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;ISSUES RESOLVED:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Phantom keys appearing while the user types another key, or key combination does not happen anymore (hopefully). This was causes by the old way to give keytrokes to the ULA. From version 1.3, this method has radically changed. Now, the microcontroller polls the Z80A for IO requests to the ULA port. If there's a IO read request, the microcontroller answer it with theright value. For this reason, a hardware change is needed for the PS/2 adapter, internal version, to work correctly with the newer firmware versions.&lt;/li&gt;&#xA;&lt;li&gt;A little issue with Ctrl-Alt-Del not working correctly on powerup has been fixed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Features present in the firmware version (v1.2):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All alphanumeric keys are mapped to the Spectrum, as well as symbol keys and their shifter forms.&lt;/li&gt;&#xA;&lt;li&gt;Shifted alphabetic keys give the upper case version, as expected. Shifted numbers give the corresponding symbol.&lt;/li&gt;&#xA;&lt;li&gt;Current keyboard mapping is for the spanish standard 101/102-keys layout keyboard.&lt;/li&gt;&#xA;&lt;li&gt;Cursor block maps to the Spectrum cursor keys (i.e. &quot;down&quot; key is mapped to CAPS SHIF+6)&lt;/li&gt;&#xA;&lt;li&gt;ESC is mapped to the BREAK Spectrum key (CAPS SHIFT+SPACE)&lt;/li&gt;&#xA;&lt;li&gt;Caps Lock key is mapped to CAPS SHIFT + 2&lt;/li&gt;&#xA;&lt;li&gt;AltGr key maps to CAPS SHIFT + 9&lt;/li&gt;&#xA;&lt;li&gt;The F2 key (which is used mainly to edit the current filename in Windows Explorer and some other applications) maps to the EDIT key (CAPS SHIFT + 1).&lt;/li&gt;&#xA;&lt;li&gt;The Tab key maps to the EXTMODE key (CAPS SHIFT + SYMBOL SHIFT).&lt;/li&gt;&#xA;&lt;li&gt;The Backspace key is mapped to DELETE key (CAPS SHIFT + 0).&lt;/li&gt;&#xA;&lt;li&gt;Left Control key is mapped to CAPS SHIFT, and right Control key, to SYMBOL SHIFT.&lt;/li&gt;&#xA;&lt;li&gt;The separate numeric block behaves as if NumLock were always on (in fact, it is).&lt;/li&gt;&#xA;&lt;li&gt;The ScrollLock key toggles the cursor key mapping between normal use (editing mode) and Sinclair joystick mode. The later is signaled with ScrollLock led on. In Sinclair joystick mode, cursor keys are mapped to the same keys used by the Sinclair port 2 joystick (6,7,8, and 9). Trigger (0 key) is mapped to both Control keys (recalling the standard MAME layout for controls).&lt;/li&gt;&#xA;&lt;li&gt;If the reset pin is connected from the keyboard adapter PCB to the Spectrum, everytime the user presses Crtl-Alt-Del, a low pulse is sent to the reset pin at the Z80, hence enabling the user to reset the machine with the classic three-finger-salute.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The adapter has a bult-in mechanism for helping the user to diagnose a malfunction. Upon booting, if Alt+F12 is pressed, a series of keys are &quot;typed-in&quot; automatically. Assuming the K-mode, the sequence typed is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;REM 12345qwertasdfgZXCV67890yuiophjkl*,.&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There's another, more sophisticated, built-in test, designed to test the compatibility of a specific keyboard. Some of them doesn't allow more than a number of keys being pressed at the same time, or even more than one. This is very important, for example if you want to use the Sinclair joystick mode feature and want to press UP+RIGHT for instance. The test is entered by pressing Alt+F1. Prior to do this, it's better to reset the Spectrum. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Starting with firmware version 1.1, there is a macro feature, which can be considered in beta state. The user can record up to 6 macros of 512 key strokes each one (a key depressed and released counts as two key strokes).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;F3 enters macro recording. After F3, the user has to press the F-key he wants to assign to the macro. Then, CapsLock led goes on, signaling that a macro is being recorded.&lt;/li&gt;&#xA;&lt;li&gt;From this moment, the user can type anything he wants. If he reaches the keystroke limit, the recording is automatically ended.&lt;/li&gt;&#xA;&lt;li&gt;To stop a macro recording, press F4. CapsLock led goes off.&lt;/li&gt;&#xA;&lt;li&gt;To play the macro, simply press the F-key assigned to it. Caps Lock led goes on to signal macro play. A macro cannot be stopped unless Ctrl-Alt-Del is pressed. If the user resets the Spectrum using the lateral switch, macro playing won't stop.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="105" LastEditorUserId="276" LastEditDate="2017-09-26T12:34:57.413" LastActivityDate="2017-09-26T12:34:57.413" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="66" PostTypeId="2" ParentId="36" CreationDate="2016-04-19T23:24:08.220" Score="19" Body="&lt;p&gt;S-Video relies on colour transformation from RGB to YUV, and then takes the U and V and modulates them using a colour subcarrier. The TV has to undo all these steps in order to get the original RGB signal. If the subcarrier frequency is not in phase with the pixel clock (as will be the case if using different crystals), then moving artifacts will show up in the final image. Those moving artifacts are of course not visible in a screenshot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are upscalers that can take a 15kHz RGB signal (as generated by the Commodore Amiga, for example) and convert it into HDMI along with the audio. There are similar converters that do the same from RGB to VGA. Look for &quot;arcade rgb to vga&quot;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="836" LastEditDate="2016-11-23T16:26:59.473" LastActivityDate="2016-11-23T16:26:59.473" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="67" PostTypeId="5" CreationDate="2016-04-19T23:24:30.987" Score="0" Body="&lt;p&gt;Regarding the transfer of data in any form from one device to another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be from one storage medium to another or one computer to another.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="276" LastEditDate="2016-08-18T13:48:02.940" LastActivityDate="2016-08-18T13:48:02.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="68" PostTypeId="4" CreationDate="2016-04-19T23:24:30.987" Score="0" Body="For questions about transferring data from one device to another " OwnerUserId="37" LastEditorUserId="37" LastEditDate="2016-04-20T14:43:09.253" LastActivityDate="2016-04-20T14:43:09.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="69" PostTypeId="2" ParentId="44" CreationDate="2016-04-19T23:38:28.627" Score="26" Body="&lt;p&gt;On a PAL Amiga, a full line sweep translates to about 454 virtual Lores (Low Resolution) pixels. (64 µs duration of a horizontal line, 7.093790 MHz pixel clock, which is about 140.968 ns per pixel: 64 µs / 140.968 ns ≈ 454).&lt;/p&gt;&#xA;&lt;p&gt;I say virtual pixels because not all of those pixels are actually usable as there is the horizontal sync period of about 4 µs and the back porch of about 8 µs, leaving about 52 µs or about 369 pixels. In practice, the number of used pixels was even lower (so it would fit into the visible non-distorted area of the CRT) - usually 320 pixels in Low Resolution.&lt;/p&gt;&#xA;&lt;p&gt;Therefore, the number of pixel-times where nothing is displayed is about 134. Copper lists allowed positioning (waiting) horizontally with 4 pixel granularity and a copper MOVE instruction took 8 pixels to complete. 134 / 8 are a little more than 16. So you can update about 14 to 16 color registers each line outside of the display data fetch when using copper lists.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;See here for a detailed analysis of PAL video timings: &lt;a href=&quot;http://martin.hinner.info/vga/pal.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://martin.hinner.info/vga/pal.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;How the copper timing is performed: &lt;a href=&quot;http://coppershade.org/articles/AMIGA/Agnus/Copper:_Exact_WAIT_Timing/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://coppershade.org/articles/AMIGA/Agnus/Copper:_Exact_WAIT_Timing/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So assuming we use 5 bitplanes (32 colors), we could use 16 colors for the background and prepare a copper list that changes those 16 colors (or most of them) each line, providing for a very colorful setting. The copper list could be prepared once when switching to a different scene and then not changed anymore while the scene is active, or it could be prepared once per frame during the vertical blanking area.&lt;/p&gt;&#xA;&lt;p&gt;We could then use the remaining 16 colors (which remain static) for blitting the animated character onto the background.&lt;/p&gt;&#xA;&lt;p&gt;Update:&lt;/p&gt;&#xA;&lt;p&gt;I checked the game for what it actually does and it pretty much matches:&lt;/p&gt;&#xA;&lt;p&gt;It loads &lt;code&gt;BPLCON0&lt;/code&gt; with &lt;code&gt;$6200&lt;/code&gt;, which means 6 bitplanes without HAM mode, i. e. EHB (Extra HalfBrite) mode (64 colors with 32 freely controllable palette entries and the remaining 32 colors roughly half as bright as the first 32), as you originally suggested.&lt;/p&gt;&#xA;&lt;p&gt;Apart from that it uses the technique I outlined above: In the Copper list it does a &lt;code&gt;WAIT $xxE1FFFC&lt;/code&gt; for each raster line and then changes a couple of colors (about 2 to 8 per line) out of the first 16 (leaving index 0 alone - as a consequence it also affects color indices 33 to 47 of the EHB image) and doesn't touch color indices 16 to 31 (consequentially, indices 48 to 63 of the EHB image also remain static).&lt;/p&gt;&#xA;" OwnerUserId="92" LastEditorUserId="15334" LastEditDate="2020-11-25T08:36:27.140" LastActivityDate="2020-11-25T08:36:27.140" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="70" PostTypeId="2" ParentId="33" CreationDate="2016-04-19T23:40:10.217" Score="16" Body="&lt;p&gt;Ideally you should clean the drive read/write head(s) with a cotton swab dipped in 90+% cleaning alcohol (e.g. isopropyl). The aim is to leave nothing on the head - dirt, cotton, nor cleaner residue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II drive head is quite hardy, and there are legends of people in a pinch cleaning it with a T-shirt - which I do not recommend unless your need is dire!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finding the Apple II drive head is reasonably easy: if the drive is placed in its normal orientation, the head presses up onto the bottom of an inserted disk. &lt;a href=&quot;https://www.youtube.com/watch?v=CMF3PL17kqg&quot;&gt;Here is an excellent video tutorial.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other drives might differ, but &lt;a href=&quot;https://www.youtube.com/watch?v=kCBLJMqTFng&quot;&gt;this PC 1.2MB drive&lt;/a&gt; also has the head on the bottom.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2016-04-20T00:08:29.570" LastActivityDate="2016-04-20T00:08:29.570" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="71" PostTypeId="5" CreationDate="2016-04-19T23:52:28.840" Score="0" Body="&lt;p&gt;Two aspects of copy protection are relevant to retro-computing:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Preservation of old software.  Physical media decays, so getting a working copy of the software often requires defeating copy protection.&lt;/li&gt;&#xA;&lt;li&gt;Insight into hardware.  Copy protection often takes advantage of edge cases and obscure knowledge, e.g. deliberately using a broken 6502 instruction to confuse people tracing through code.  Exploring specific examples can be very educational.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;These actions should not be used to violate copyright law.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the United States, the DMCA initially prevented research into copy protection techniques, but was later amended to allow research and circumvention for &quot;abandonware&quot; (cf. &lt;a href=&quot;https://en.wikipedia.org/wiki/Abandonware#DMCA&quot; rel=&quot;nofollow&quot;&gt;wikipedia&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-20T14:45:35.593" LastActivityDate="2016-04-20T14:45:35.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="72" PostTypeId="4" CreationDate="2016-04-19T23:52:28.840" Score="0" Body="For questions about copy protection techniques used on retro software." OwnerUserId="56" LastEditorUserId="278" LastEditDate="2016-09-10T18:15:14.907" LastActivityDate="2016-09-10T18:15:14.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="73" PostTypeId="2" ParentId="11" CreationDate="2016-04-19T23:59:24.187" Score="10" Body="&lt;p&gt;In my experience, just about any rubber band can be used, in a pinch, to replace a belt as long as you make it snug, but not too snug.  I'm talking about those centimeter or more wide rubber bands they use on newspapers and the like.  I repaired a VCR using the rubber band around a stalk of celery.  Again, these are for &quot;in a pinch,&quot; and you might be able to find a brand new belt online.  Lots of online electronics stores sell belts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for finding it's size, use a piece of string, or a length of dental floss (non-waxed, if you have it), and wrap it along the belt's guidepath.  That will give you the linear length of the belt.  If the beltwheels contain flanges, you can use those to gauge the thickness of the belt.  If the wheels have rounded impressions around their diameter, make sure to get a rounded belt!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, it would be best if you can get an equivalent belt from a &quot;for parts&quot; drive.  However, realize that those parts are ALSO as old as the original equipment, and are just as likely to fail as the original part.&lt;/p&gt;&#xA;" OwnerUserId="22" LastActivityDate="2016-04-19T23:59:24.187" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="74" PostTypeId="1" CreationDate="2016-04-20T00:12:51.970" Score="7" ViewCount="208" Body="&lt;p&gt;As the title states, the eMac has a clear section at the back of it's housing that forms a grill for the fan inside. This seems to be pretty good at catching dust that's impossible to get at simply by removing and washing the housing, is there a way to remove this part so I can actually get it clean?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2idxr.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2idxr.jpg&quot; alt=&quot;Back of an eMac&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2016-05-20T04:51:42.033" Title="How do you remove the clear section from the back of the eMac's housing?" Tags="&lt;emac&gt;&lt;restoration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="75" PostTypeId="5" CreationDate="2016-04-20T00:14:04.180" Score="0" Body="&lt;p&gt;The eMac, short for education Mac, is a Macintosh desktop computer made by Apple Inc. It was originally aimed at the education market, but was later made available as a cheaper mass market alternative to Apple's second-generation LCD display iMac G4. The eMac was pulled from retail on October 12, 2005 and was sold exclusively to educational institutions thereafter. It was discontinued by Apple on July 5, 2006 and replaced by a cheaper, low-end iMac that, like the eMac, was originally sold exclusively to educational institutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The eMac design closely resembles the first-generation iMac. Compared to the first iMac, eMacs feature a PowerPC G4 processor that is significantly faster than the previous generation G3 processors, as well as a 17-inch flat CRT display. Unlike the iMac G3, however, the eMac is not meant to be portable as it weighs 50 lb (23 kg) and lacks a carrying handle.&lt;/p&gt;&#xA;" OwnerUserId="107" LastEditorUserId="107" LastEditDate="2016-04-20T14:45:32.687" LastActivityDate="2016-04-20T14:45:32.687" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="76" PostTypeId="4" CreationDate="2016-04-20T00:14:04.180" Score="0" Body="For all questions relating specifically to Apple's eMac computers which were available between 2002 and 2006." OwnerUserId="107" LastEditorUserId="107" LastEditDate="2016-04-20T14:42:15.907" LastActivityDate="2016-04-20T14:42:15.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="77" PostTypeId="5" CreationDate="2016-04-20T00:15:09.437" Score="0" Body="&lt;p&gt;Use this tag for questions regarding the restoration of a mostly-functioning retrocomputer or retro device. For repairing very damaged computers, use the &lt;a href=&quot;/questions/tagged/repair&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;repair&amp;#39;&quot; rel=&quot;tag&quot;&gt;repair&lt;/a&gt; tag.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This tag's use is currently ambiguous, and similar to the use of &lt;a href=&quot;/questions/tagged/maintenance&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;maintenance&amp;#39;&quot; rel=&quot;tag&quot;&gt;maintenance&lt;/a&gt; and &lt;a href=&quot;/questions/tagged/repair&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;repair&amp;#39;&quot; rel=&quot;tag&quot;&gt;repair&lt;/a&gt;. Please use the tag most relevant to your problem.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="278" LastEditDate="2017-01-04T21:25:57.470" LastActivityDate="2017-01-04T21:25:57.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="78" PostTypeId="4" CreationDate="2016-04-20T00:15:09.437" Score="0" Body="For questions about the restoration of old machines: from cosmetic through to electronics such as capacitor replacement." OwnerUserId="107" LastEditorUserId="278" LastEditDate="2016-09-10T16:42:56.347" LastActivityDate="2016-09-10T16:42:56.347" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="79" PostTypeId="1" AcceptedAnswerId="80" CreationDate="2016-04-20T00:17:43.760" Score="9" ViewCount="394" Body="&lt;p&gt;eMacs have a 3.6V PRAM battery and some sources indicate that when the voltage starts to drop that they may have trouble booting. Will an eMac work without a battery?&lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2020-01-19T05:05:12.960" Title="Will an eMac boot without a PRAM battery installed?" Tags="&lt;emac&gt;&lt;restoration&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="80" PostTypeId="2" ParentId="79" CreationDate="2016-04-20T00:19:36.083" Score="8" Body="&lt;p&gt;No. I measured the voltage across the power pins before and after installing a new battery and observed a change from 0V to 3.6V. The three pins for the power switch are 3.6V, ground and ground, with this potential difference coming from the PRAM battery. Without a battery installed (or with a battery that's severely depleted) closing the switch does nothing and the machine will not power on or show any signs of life.&lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2016-04-20T00:19:36.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="81" PostTypeId="5" CreationDate="2016-04-20T00:21:29.717" Score="0" Body="&lt;p&gt;Floppy disks are a magnetic storage medium that enjoyed great popularity in the 80s and 90s. Common physical sizes for disks were 8&quot;, 5.25&quot; and 3.5&quot; with varying storage capacities.&lt;/p&gt;&#xA;" OwnerUserId="107" LastEditorUserId="107" LastEditDate="2016-04-20T14:43:04.393" LastActivityDate="2016-04-20T14:43:04.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="82" PostTypeId="4" CreationDate="2016-04-20T00:21:29.717" Score="0" Body="For questions related to the use, restoration and imaging of floppy disks." OwnerUserId="107" LastEditorUserId="278" LastEditDate="2016-09-10T15:52:31.267" LastActivityDate="2016-09-10T15:52:31.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="83" PostTypeId="5" CreationDate="2016-04-20T00:23:42.057" Score="0" Body="&lt;p&gt;The Commodore Amiga family of computers contain the Motorola 68000 series of CPUs and run AmigaOS by default. The first Amiga computer, the Amiga 1000, was released in 1985. The last models, the Amiga 1200, 4000, and CD32 console, were released in 1992-93.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sample questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How do I connect an Amiga 600 to the internet?&lt;/li&gt;&#xA;&lt;li&gt;How can I connect an Amiga to a modern LCD screen?&lt;/li&gt;&#xA;&lt;li&gt;How do you replace a broken Amiga 500 floppy drive?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="4335" LastEditDate="2017-05-07T04:39:06.953" LastActivityDate="2017-05-07T04:39:06.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="84" PostTypeId="4" CreationDate="2016-04-20T00:23:42.057" Score="0" Body="For questions related to the Commodore Amiga family of personal computers." OwnerUserId="107" LastEditorUserId="47" LastEditDate="2016-04-20T14:46:44.833" LastActivityDate="2016-04-20T14:46:44.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="85" PostTypeId="1" AcceptedAnswerId="86" CreationDate="2016-04-20T00:29:12.747" Score="12" ViewCount="642" Body="&lt;p&gt;Apple II emulators accept disk images in &quot;DOS order&quot; or &quot;ProDOS order&quot;.  What's the difference?  Why have two different formats?&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-04-20T00:29:12.747" Title="What's the difference between DOS-ordered and ProDOS-ordered disk images?" Tags="&lt;apple-ii&gt;&lt;disk-image&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="86" PostTypeId="2" ParentId="85" CreationDate="2016-04-20T00:29:12.747" Score="11" Body="&lt;p&gt;The reasons are partly technical and partly historical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic Apple II disk image formats are unadorned and unstructured.  The files just hold a copy of the disk data, from the first track to the last, as read by the operating system.  The way in which the data is read from the physical floppy determines the ordering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your disk imaging program runs under DOS 3.3, it will start at track 0 sector 0 (t0s0), reading 256 bytes.  It continues on that track through t0s15, then advances to the next track (t1s0).  It stops when it reaches t34s15.  If an emulator wants to read (say) track 10 sector 7, it seeks to file offset &lt;code&gt;(10 * 16 + 7) * 256 = 42752&lt;/code&gt; and reads 256 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your disk imaging program runs under ProDOS, it will start at block 0, reading 512 bytes, and continue through block 279.  If an emulator wants to read block 100, it seeks to offset &lt;code&gt;(100 * 512) = 51200&lt;/code&gt;, and reads 512 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trouble comes because the 512-byte ProDOS blocks don't map neatly on top of DOS 3.3 sectors.  While 5.25&quot; ProDOS disks still use the same 256-byte sector structure in the low-level disk format, the higher-level blocks are mapped across non-adjacent sectors.  ProDOS block 0 occupies sectors 0 and 2, not 0 and 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If an emulator wants to read track 0 sector 1 from a DOS-ordered disk, it can do trivial math (&lt;code&gt;(0 * 16 + 1) * 256&lt;/code&gt;) and seek to offset 256.  For a ProDOS ordered disk, that sector is actually the first half of block four, so the emulator would seek to offset &lt;code&gt;4 * 512 = 2048&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Various disk imaging programs are available, some written for DOS, some for ProDOS.  Because neither format was widely accepted as the One True Way, emulators have to cope with both.  In many cases the format can be auto-detected, but it's generally best to use file extensions to identify the format (&lt;code&gt;.po&lt;/code&gt; / &lt;code&gt;.do&lt;/code&gt;).  Fortunately the sector/block conversion can be managed with a simple lookup table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many emulators also support &quot;nibble&quot; images, which contain the raw bytes as read from the drive, one track at a time.  The track format contains sector numbers in the address header fields, so there is no ambiguity about the ordering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The order in which sectors physically appear on a track is irrelevant except for performance.  Tools like Bag of Tricks allowed one to &quot;skew&quot; the sectors in a way that made reads of consecutive sectors faster.  DOS 3.3 wasn't fast enough to read the track in a single revolution, so the idea was to interleave the data such that, at the point DOS had finished reading and processing sector N, sector N+1 was about to pass under the drive head.  Because the sectors were explicitly numbered in the address field, this was invisible to DOS and ProDOS, and has no effect on disk images.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-04-20T00:29:12.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="87" PostTypeId="5" CreationDate="2016-04-20T00:49:44.527" Score="0" Body="&lt;p&gt;Disk images are files the hold block-by-block copies of physical media.  Sources include floppy disks, hard drives, and optical media.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some formats are &quot;raw&quot;, i.e. they contain nothing but the blocks from the source.  Others include headers with meta-data, and may compress the data to reduce space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In retrocomputing, disk images are frequently used in conjunction with emulators.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-20T14:53:48.820" LastActivityDate="2016-04-20T14:53:48.820" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="88" PostTypeId="4" CreationDate="2016-04-20T00:49:44.527" Score="0" Body="For questions about the creation and use of disk images - raw data from a storage medium that has been extracted into a file." OwnerUserId="56" LastEditorUserId="278" LastEditDate="2016-09-10T18:04:14.260" LastActivityDate="2016-09-10T18:04:14.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="89" PostTypeId="1" AcceptedAnswerId="118" CreationDate="2016-04-20T01:25:28.607" Score="23" ViewCount="4537" Body="&lt;p&gt;I have been trying to work out how to open a Mac SE/30, in order to have a better look at its internal condition. I have the &lt;a href=&quot;http://www.apple-collection.com/CarPos/macse30.pdf&quot;&gt;repair manual&lt;/a&gt;, and in the &quot;Take Apart&quot; section it references a &quot;pull-apart tool&quot;. However, I cannot find any mention of this tool or where to buy one. Attempts to lever the case off using screwdrivers and similar implements have been unsuccessful. What is a pull-apart tool? Where can I get one, or what can I use instead?&lt;/p&gt;&#xA;" OwnerUserId="89" LastEditorUserId="56" LastEditDate="2016-04-22T00:25:43.793" LastActivityDate="2017-04-06T07:10:30.867" Title="How do you open an SE/30? (a.k.a. what is a &quot;pull-apart tool&quot;?)" Tags="&lt;hardware&gt;&lt;apple-macintosh&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="90" PostTypeId="2" ParentId="89" CreationDate="2016-04-20T01:39:47.257" Score="5" Body="&lt;p&gt;They are &lt;em&gt;probably&lt;/em&gt; referring to a &lt;a href=&quot;https://en.wikipedia.org/wiki/Spudger&quot; rel=&quot;noreferrer&quot;&gt;spudger&lt;/a&gt;, though it's hard to tell. If it is intended to safely lever apart plastic parts that are held together with friction in such a way that a screwdriver would damage the case, then this is probably what it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A number of different spudgers (sizes, stiffness, etc.) are handy tools for retrocomputing fans.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Actually, even if a spudger might work, it is probably not what was intended.  I found &lt;a href=&quot;http://www.jagshouse.com/classicrepair.html&quot; rel=&quot;noreferrer&quot;&gt;this reference&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One of my pull-apart tools is simply a spring clamp marked &quot;Pony 3201 Made in USA&quot;. I bought a Mac opener kit from APS long ago. This Mac opener kit consisted of ... a pull-apart tool ... The jaws (closed) of the clamp measure 3/4 inch (19 mm) wide and 1/16 inch (1.6 mm) thick. Just insert the jaws and squeeze. You can find a similar tool at any hardware or hobbyist shop or Home Depot or Office Depot. Instead of the pull-apart tool, you can use a medium to long flat-blade screwdriver to open the computer's case.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, a spudger or screwdriver might work, but it looks like the &quot;case-cracker&quot; intended for this job is a spring clamp of some kind.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorDisplayName="user12" LastEditDate="2016-04-20T01:55:10.850" LastActivityDate="2016-04-20T01:55:10.850" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="91" PostTypeId="1" AcceptedAnswerId="92" CreationDate="2016-04-20T01:40:27.290" Score="15" ViewCount="966" Body="&lt;p&gt;(question copied from SO (from the days before RC.SE existed): &lt;a href=&quot;http://stackoverflow.com/q/31877835/477476&quot;&gt;http://stackoverflow.com/q/31877835/477476&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zero-page memory maps of the PET that I've found claim that the zero page address range&lt;code&gt;$00C2..$00D9&lt;/code&gt; are used for static data, e.g. &lt;a href=&quot;http://www.classiccmp.org/dunfield/pet/petmem.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.classiccmp.org/dunfield/pet/petmem.txt&lt;/a&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; RIDATA 00C2        Cassette Temp (64#00AA) read flags: 0=scan,&#xA;                    1-15=count, $40=load, $80=end of tape marker&#xA; RIPRTY 00C3        Cassette Short Cnt (64#00AB): counter of seconds&#xA;                    before tape write / checksum&#xA; PNT    00C4-00C5   Pointer: Current Screen Line Address&#xA; PNTR   00C6        Cursor Column on Current Line&#xA; SAL    00C7-00C8   Pointer: Tape Buffer/ Screen Scrolling&#xA; EAL    00C9-00CA   Tape End Addresses/End of Program&#xA; CMP0   00CB-00CC   Tape Timing Constants&#xA; QTSW   00CD        Flag: Editor in Quote Mode, $00 = NO&#xA; BITTS  00CE        Cassette Temp (64#00B4): Tape read timer flag&#xA;                    =IRQ enabled for Timer 1&#xA;        00CF        End of tape read&#xA;        00D0        Read character error&#xA; FNLEN  00D1        Length of Current File Name&#xA; LA     00D2        Current Logical File Number&#xA; SA     00D3        Current Secondary Address&#xA; FA     00D4        Current Device Number&#xA; LNMX   00D5        Physical Screen Line Length&#xA;        00D5        4.80: right side of window&#xA; TAPE1  00D6-00D7   Pointer: Start of Tape Buffer&#xA; TBLX   00D8        Current Cursor Physical Line Number&#xA; DATAX  00D9        Current Character to Print&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, looking at the ROM disassembly, one can find places where the address &lt;code&gt;$00C2&lt;/code&gt; is jumped to, e.g. &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/firmware/computers/pet/d/rom-1.html#C70A&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.zimmers.net/anonftp/pub/cbm/firmware/computers/pet/d/rom-1.html#C70A&lt;/a&gt; :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; C70A  4C C2 00             JMP iC2       &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Looking at a disassembly starting at &lt;code&gt;$00C2&lt;/code&gt; after booting up a PET, I can see reasonable-looking code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.C:00c2  E6 C9       INC $C9&#xA;.C:00c4  D0 02       BNE $00C8&#xA;.C:00c6  E6 CA       INC $CA&#xA;.C:00c8  AD 00 04    LDA $0400&#xA;.C:00cb  C9 3A       CMP #$3A&#xA;.C:00cd  B0 0A       BCS $00D9&#xA;.C:00cf  C9 20       CMP #$20&#xA;.C:00d1  F0 EF       BEQ $00C2&#xA;.C:00d3  38          SEC&#xA;.C:00d4  E9 30       SBC #$30&#xA;.C:00d6  38          SEC&#xA;.C:00d7  E9 D0       SBC #$D0&#xA;.C:00d9  60          RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What is this area used for? Where is the code that assembles this program into this area? What's this code supposed to do? (It seems to be scanning the area starting at &lt;code&gt;$0400&lt;/code&gt; for &lt;code&gt;:&lt;/code&gt; and &lt;code&gt;&lt;/code&gt; characters?)&lt;/p&gt;&#xA;" OwnerUserId="115" LastEditorUserId="115" LastEditDate="2018-12-01T08:00:53.673" LastActivityDate="2018-12-01T08:00:53.673" Title="What is this code on the zero page that was put there by the BASIC ROM?" Tags="&lt;commodore-pet&gt;&lt;6502&gt;&lt;memory-layout&gt;&lt;firmware&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="92" PostTypeId="2" ParentId="91" CreationDate="2016-04-20T01:43:09.540" Score="13" Body="&lt;p&gt;It's part of the BASIC interpreter loop. It reads one byte of the tokenized BASIC program, setting zero flag if it's a colon or a zero byte and clearing the carry if it's a number. You can see it used in the main part of the interpreter loop at &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/firmware/computers/pet/d/rom-1.html#C6B5&quot;&gt;address &lt;code&gt;C6B5&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure why this routine was placed in zero page. It's a cycle (or rarely two) faster to use &lt;code&gt;LDA $0400&lt;/code&gt; over &lt;code&gt;LDA ($C9),Y&lt;/code&gt;, but I can't see it actually making much difference. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should also note that the ROM disassembly you're looking at appears to be for a BASIC 1.0 ROM, while the memory map you've referenced is for versions 2.0 and 4.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's what &lt;a href=&quot;http://unusedino.de/ec64/technical/project64/mapping_c64.html&quot;&gt;Mapping the Commodore 64&lt;/a&gt; by Sheldon Leemon says about the equivalent C64 routine:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;h3&gt;115-138 &amp;nbsp; $73-$8A  &amp;nbsp; &lt;code&gt;CHRGET&lt;/code&gt; &lt;br&gt; Subroutine: Get Next BASIC Text Character&lt;/h3&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;CHRGET&lt;/code&gt; is a crucial routine which BASIC uses to read text characters,&#xA;  such as the text of the BASIC program which is being interpreted. It&#xA;  is placed on zero page to make the routine run faster. Since it keeps&#xA;  track of the address of the character being read within the routine&#xA;  itself, the routine must be in RAM in order to update that pointer.&#xA;  The pointer to the address of the byte currently being read is really&#xA;  the operand of a &lt;code&gt;LDA&lt;/code&gt; instruction. When entered from &lt;code&gt;CHRGET&lt;/code&gt;, the&#xA;  routine increments the pointer by modifying the operand at &lt;code&gt;TXTPTR&lt;/code&gt;&#xA;  (122, &lt;code&gt;$7A&lt;/code&gt;), thus allowing the next character to be read.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Entry at &lt;code&gt;CHRGOT&lt;/code&gt; (121, &lt;code&gt;$79&lt;/code&gt;) allows the current character to be read&#xA;  again.  The &lt;code&gt;CHRGET&lt;/code&gt; routine skips spaces, sets the various flags or the&#xA;  status register (&lt;code&gt;.P&lt;/code&gt;) to indicate whether the character read was a&#xA;  digit, statement terminator, or other type of character, and returns&#xA;  with the retrieved character in the Accumulator (&lt;code&gt;.A&lt;/code&gt;).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;... &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;As this is such a central routine, a disassembly listing is given&#xA;  below to provide a better understanding of how it works.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;115 $73   CHRGET  INC TXTPTR   ; increment low byte of TXTPTR&#xA;117 $75           BNE CHRGOT   ; if low byte isn't 0, skip next&#xA;119 $77           INC TXTPTR+1 ; increment high byte of TXTPTR&#xA;121 $79   CHRGOT  LDA          ; load byte from where TXTPTR points&#xA;                               ; entry here does not update TXTPTR,&#xA;                               ; allowing you to readl the old byte again&#xA;122 $7A   TXTPTR  $0207        ; pointer is really the LDA operand&#xA;                               ; TXTPTR+1 points to 512-580 ($200-$250)&#xA;                               ; when reading from the input buffer&#xA;                               ; in direct mode&#xA;124 $7C   POINTB  CMP #$3A     ; carry flag set if &amp;gt; ASCII numeral 9&#xA;126 $7E           BCS EXIT     ; character is not a numeral--exit&#xA;128 $80           CMP #$20     ; if it is an ASCII space...&#xA;130 $82           BEQ CHRGET   ; ignore it and get next character&#xA;132 $84           SEC          ; prepare to subtract&#xA;133 $85           SBC #$30     ; ASCII 0-9 are between 48-57 ($30-$39)&#xA;135 $87           SEC          ; prepare to subtract again&#xA;136 $88           SBC #$D0     ; if &amp;lt; ASCII 0 (57, $39) then carry is set&#xA;138 $8A   EXIT    RTS          ; carry is clear only for numeral on return&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;The Accumulator (&lt;code&gt;.A&lt;/code&gt; register) holds the character that was read on&#xA;  exit from the routine.  Status register (&lt;code&gt;.P&lt;/code&gt;) bits which can be tested&#xA;  for on exit are:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Carry Clear if the character was an ASCII digit 0-9.   Carry Set,&#xA;  otherwise. Zero Set only if the character was a statement terminator&#xA;  0 or an ASCII colon, 58 (&lt;code&gt;$3A&lt;/code&gt;). Otherwise, Zero Clear.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="115" LastActivityDate="2016-04-20T01:43:09.540" CommentCount="3" CommunityOwnedDate="2016-04-20T01:43:09.540" ContentLicense="CC BY-SA 3.0" />
  <row Id="93" PostTypeId="5" CreationDate="2016-04-20T01:44:30.243" Score="0" Body="&lt;p&gt;This tag may be used for the MOS Technology 6502 and close derivatives, such as the 65C02. For questions about the chip's hardware (i.e. pins) also use the &lt;a href=&quot;/questions/tagged/hardware&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;hardware&amp;#39;&quot; rel=&quot;tag&quot;&gt;hardware&lt;/a&gt; tag.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="278" LastEditDate="2017-01-04T21:55:51.933" LastActivityDate="2017-01-04T21:55:51.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="94" PostTypeId="4" CreationDate="2016-04-20T01:44:30.243" Score="0" Body="For 6502 series of processors, including hardware and assembly language questions. Use with [hardware] for the hardware interface in particular." OwnerUserId="107" LastEditorUserId="6659" LastEditDate="2021-02-06T01:09:58.577" LastActivityDate="2021-02-06T01:09:58.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="95" PostTypeId="2" ParentId="74" CreationDate="2016-04-20T04:24:49.517" Score="3" Body="&lt;p&gt;There are take apart guides a Google search away (including the official Apple Service Source one), but from what I can see, you remove the two front feet with a #2 Phillips screwdriver while the eMac is face down on an ESD mat, then use a 2.5mm hex screwdriver to remove the three large-headed screws around the access plate on the bottom, then the six screws around the screen end of the rear housing (two each top, left and right).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gently lift approx 5cm only so you can (gently) disconnect the power button. The rear housing should then be able to lift off completely. I highly recommend reviewing the take apart guides befor starting!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've not found instructions for removing the grill/vent from the rear housing, but at least you should be able to clean it when the rear housing is removed without fear of wrecking the internals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;europlus&lt;/p&gt;&#xA;" OwnerUserId="123" LastActivityDate="2016-04-20T04:24:49.517" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="96" PostTypeId="2" ParentId="89" CreationDate="2016-04-20T04:41:51.337" Score="13" Body="&lt;p&gt;My &quot;pull apart tool&quot; of choice for toaster Macs is a pair of hands, utilising gravity and friction!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Place the Mac face down on a softish surface, top or bottom facing towards you. Remove the Torx screws (make sure you get them all!) and then place your hands almost on the sides of the Mac as if you're about to clap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, move your hands quickly towards each other to grip the rear casing and move them up immediately on touching the sides - you're not trying to lift the machine, but let gravity keep the main part of the machine down while your hands try to break the friction holding the rear casing to the front. You may need a few attempts. I find machines tend to be easier to open this way after they've already been opened, but I have been able to open previously unopened machines using this method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It takes some practice, but I've had good success with it. You might like to try on a dud machine to get the hang of it just in case your unpractised method lifts the whole machine too much. You won't damage the case as you would trying to use a screwdriver or ordinary spudger, and you won't have to look for the official tool or one that works as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="123" LastEditorUserId="133" LastEditDate="2016-04-20T14:44:09.633" LastActivityDate="2016-04-20T14:44:09.633" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="97" PostTypeId="1" AcceptedAnswerId="128" CreationDate="2016-04-20T06:28:43.543" Score="18" ViewCount="935" Body="&lt;p&gt;As far as I know, there is no register in the VIC-II, which would enable this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite that, in nearly all intros and in many cases even in old games, sprites on the border were visible. Actually, it was the only way to put meaningful pixel images to the border.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did it work?&lt;/p&gt;&#xA;" OwnerUserId="129" LastEditorUserId="278" LastEditDate="2016-05-20T16:55:17.307" LastActivityDate="2016-05-20T16:55:17.307" Title="How to move sprites to the border on c64?" Tags="&lt;commodore-64&gt;&lt;sprite&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="98" PostTypeId="1" AcceptedAnswerId="103" CreationDate="2016-04-20T06:37:33.467" Score="11" ViewCount="549" Body="&lt;p&gt;Although only 16 different colors were allowed on c64 (more exactly, in the VIC-II), which came from a fixed palette, the video output created an analogoue tv signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which means, somewhere in the final, D/A conversion phase of the vic signal generation, a palette should have existed, which defined the different rgb signal levels, indexed by the 4bit color code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is known from it? How many analogoue signal levels did it have?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Btw, in this 16-color palette, there were 5 greyscale colors. Thus, the number of analogoue signal levels should have been at least 5.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Extension, reacting @Mark's answer:&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ok, the TV output had a YIQ. But, somewhere in the VIC II, there should have been something with a color index 0-15 as input, and with an analogoue YIQ as output. I suspected it was some hardwired palette table and a D/A converter, but you say it wasn't. What was it then? How did the 4 color bit -&gt; 3 YIQ signal level work?&lt;/p&gt;&#xA;" OwnerUserId="129" LastEditorDisplayName="user12" LastEditDate="2016-04-22T22:52:37.800" LastActivityDate="2016-04-22T22:52:37.800" Title="How many analogue RGB signal levels did the VIC-II have?" Tags="&lt;commodore-64&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="99" PostTypeId="1" AcceptedAnswerId="100" CreationDate="2016-04-20T06:48:50.093" Score="19" ViewCount="1656" Body="&lt;p&gt;I just finished the Steve Jobs biography and I thought...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was the apple Lisa really the first commercially available Graphical interface?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is just out of interest but I'll be really interested to know!&lt;/p&gt;&#xA;" OwnerUserId="132" LastEditorUserId="4921" LastEditDate="2019-04-24T01:30:13.327" LastActivityDate="2019-05-14T16:18:58.877" Title="Were there any commercially available graphical interfaces before the apple Lisa?" Tags="&lt;apple&gt;&lt;graphics&gt;&lt;apple-lisa&gt;&lt;history&gt;" AnswerCount="9" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="100" PostTypeId="2" ParentId="99" CreationDate="2016-04-20T06:52:27.670" Score="23" Body="&lt;p&gt;&lt;strong&gt;Update April 2019&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks as though the Three River PERQ was the first commercial machine, &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8691/107&quot;&gt;as per @MrTelly's answer&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Original Answer&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hate to quote &lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Star&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia as a source of truth&lt;/a&gt;, but I had a feeling that a Xerox product would take the claim, and it looks as though I was right.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Star workstation, officially known as the Xerox 8010 Information System, was the first commercial system to incorporate various technologies that have since become standard in personal computers, including a bitmapped display, a window-based graphical user interface, icons, folders, mouse (two-button), Ethernet networking, file servers, print servers and e-mail.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Xeros PARC (Palo Alto Research Center) is famously known as being the birthplace of bitmap displays and windowing GUIs, I just wasn't sure if it was commercialised before I looked it up. &lt;/p&gt;&#xA;" OwnerUserId="107" LastEditorUserId="107" LastEditDate="2019-04-25T01:22:37.650" LastActivityDate="2019-04-25T01:22:37.650" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="101" PostTypeId="5" CreationDate="2016-04-20T07:13:19.960" Score="0" Body="&lt;p&gt;The Lisa was Apple's first personal computer with a Graphical User Interface (GUI).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based upon the 68000 CPU, it was launched by Apple Computer Inc. on 19 January 1983.&lt;/p&gt;&#xA;" OwnerUserId="132" LastEditorUserId="276" LastEditDate="2016-06-23T12:23:10.983" LastActivityDate="2016-06-23T12:23:10.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="102" PostTypeId="4" CreationDate="2016-04-20T07:13:19.960" Score="0" Body="For questions about the Lisa, introduced by Apple in 1983." OwnerUserId="-1" LastEditorUserId="276" LastEditDate="2016-06-23T12:23:10.983" LastActivityDate="2016-06-23T12:23:10.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="103" PostTypeId="2" ParentId="98" CreationDate="2016-04-20T07:22:33.493" Score="14" Body="&lt;p&gt;&quot;Output levels&quot; are a feature of digital-to-analog converters, particularly of the sort used with computer monitors with distinct red/green/blue signal channels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VIC-II doesn't do this, so it's not really meaningful to say it had output levels.  Instead, it creates a broadcast television signal directly (either &lt;a href=&quot;https://en.wikipedia.org/wiki/PAL&quot;&gt;PAL&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/NTSC&quot;&gt;NTSC&lt;/a&gt;), with each color mapped to a distinct luminance/chrominance (YIQ) combination (as noted in &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_VIC-II#Colors&quot;&gt;the Wikipedia article&lt;/a&gt;, they had complete freedom in selecting these combinations).  The presence of five shades of grey just means that five of those combinations had an I and Q of 0.&lt;/p&gt;&#xA;" OwnerUserId="4" LastEditorUserId="4" LastEditDate="2016-04-21T20:26:25.313" LastActivityDate="2016-04-21T20:26:25.313" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="104" PostTypeId="1" AcceptedAnswerId="108" CreationDate="2016-04-20T07:50:00.810" Score="34" ViewCount="9662" Body="&lt;p&gt;Around the end of the time of Amiga popularity, obtaining a replacement Amiga floppy drive was a nuisance, while PC drives were ubiquitous and cheap. One could install a PC drive in Amiga after applying a small, trivial hardware modification - a friend got one made as we waited, some 10 minutes of work or so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the modification? How to adapt a PC FDD for use with Amiga?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="3423" LastEditDate="2018-12-16T15:01:33.453" LastActivityDate="2018-12-16T15:01:33.453" Title="What modification is required from a PC floppy for use in Amiga?" Tags="&lt;amiga&gt;&lt;floppy-disk&gt;&lt;hardware-mods&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="105" PostTypeId="1" AcceptedAnswerId="107" CreationDate="2016-04-20T08:31:50.817" Score="12" ViewCount="1712" Body="&lt;p&gt;I've got an old Nintendo Game Boy, with a number of games for it. The problem is that most of these games don't load any more, and I suspect that's an issue with the contacts either in the unit, or in the game card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking into the contacts on the game cards, a number of them have metal oxide marking on them, especially where the gold plating has worn away. The contacts on the Game Boy itself aren't faring much better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anything I can or should do to rejuvenate the contacts so I can use it again?&lt;/p&gt;&#xA;" OwnerUserId="146" LastEditorUserId="7208" LastEditDate="2019-08-03T08:38:27.180" LastActivityDate="2019-08-03T08:38:27.180" Title="How can I rejuvenate Game Boy contacts?" Tags="&lt;nintendo&gt;&lt;game-cartridge&gt;&lt;maintenance&gt;&lt;game-boy&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2016-04-30T19:47:56.713" ContentLicense="CC BY-SA 3.0" />
  <row Id="106" PostTypeId="2" ParentId="1" CreationDate="2016-04-20T09:40:12.707" Score="6" Body="&lt;p&gt;Bitsavers has some PDFs of printouts of &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/dec/pdp6/tsExec1.4/&quot;&gt;tsExec1.4&lt;/a&gt;. Not sure if this is complete.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a lot of PDP-10 software e.g. at &lt;a href=&quot;http://pdp-10.trailing-edge.com/&quot;&gt;trailing-edge&lt;/a&gt;, I suppose at least some of that could be adapted to run on the PDP-6 (but you probably already thought of that).&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-04-20T09:40:12.707" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="107" PostTypeId="2" ParentId="105" CreationDate="2016-04-20T09:54:03.903" Score="9" Body="&lt;p&gt;Depending on how bad the corrosion is, various techniques can work. First, just try plain old water (or better yet, isopropyl alcohol) and a cotton bud - on the cartridges &lt;em&gt;and&lt;/em&gt; the Game Boy itself. Failing that, try the same technique with distilled (white) vinegar. If all else fails - &lt;strong&gt;very&lt;/strong&gt; carefully rubbing with a fine-grit sandpaper can help to remove stubborn coatings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the contacts aren't the problem, try some basic troubleshooting. Which cartridges don't work? Is it random, or always the same ones? If there's a pattern, then those cartridges are particularly suspect.&lt;/p&gt;&#xA;" OwnerUserId="89" LastActivityDate="2016-04-20T09:54:03.903" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="108" PostTypeId="2" ParentId="104" CreationDate="2016-04-20T10:01:50.827" Score="38" Body="&lt;p&gt;The differences between PC floppy drives and Amiga floppy drives are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PC floppy drives normally answer to drive select 1 (DS1), internal Amiga drives answer to DS0&lt;/li&gt;&#xA;&lt;li&gt;pin 34 on the connector is used for disk change on the PC, disk ready on the Amiga&lt;/li&gt;&#xA;&lt;li&gt;pin 2 on the connector is used for high-density detection on the PC, disk change on the Amiga&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So modifying a PC drive so it works inside an Amiga involves :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;switching the drive to DS0 (on some drives this is a jumper, but on most drives you'll need to desolder the DS1 pads and bridge the DS0 pads)&lt;/li&gt;&#xA;&lt;li&gt;re-routing pins 2 and 34&lt;/li&gt;&#xA;&lt;li&gt;grounding the HD detection signal&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You'll need a PC drive which exposes the disk ready signal somewhere on its PCB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many examples of this on Amiga forums; &lt;a href=&quot;http://www.amibay.com/showthread.php?18582-Modifying-PC-Floppy-Drive-for-Amiga-Use&quot;&gt;here's one&lt;/a&gt;, &lt;a href=&quot;http://eab.abime.net/showthread.php?t=30944&quot;&gt;here's another&lt;/a&gt;. Ian Stedman has an &lt;a href=&quot;http://www.ianstedman.co.uk/Amiga/designs/Floppy_Adaptor_V2/floppy_adaptor_v2.html&quot;&gt;add-on board&lt;/a&gt; which can be used instead of modifying the drives; it synthesises the disk ready signal using a couple of other signals.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-04-20T10:01:50.827" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="109" PostTypeId="5" CreationDate="2016-04-20T10:47:29.887" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-20T10:47:29.887" LastActivityDate="2016-04-20T10:47:29.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="110" PostTypeId="4" CreationDate="2016-04-20T10:47:29.887" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-20T10:47:29.887" LastActivityDate="2016-04-20T10:47:29.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="111" PostTypeId="5" CreationDate="2016-04-20T10:48:37.580" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-20T10:48:37.580" LastActivityDate="2016-04-20T10:48:37.580" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="112" PostTypeId="4" CreationDate="2016-04-20T10:48:37.580" Score="0" Body="S-Video should be used for all questions relating to the S-Video standard, a video signal system that separates chrominance and luma and thus provides a better quality image than composite video." OwnerUserId="107" LastEditorUserId="3748" LastEditDate="2018-08-15T17:22:46.567" LastActivityDate="2018-08-15T17:22:46.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="113" PostTypeId="1" AcceptedAnswerId="115" CreationDate="2016-04-20T10:54:14.743" Score="19" ViewCount="2313" Body="&lt;p&gt;I'm using Workbench 1.3 in Amiga 500.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I managed to change the Spanish keyboard in &quot;SetMap&quot;, as shown in the following figure:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QwJQJ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QwJQJ.png&quot; alt=&quot;Screenshot of Configuration&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And I can write text with special spanish characters (ñ,ç,ó,á,...) from regular application like NotePad:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bfGjh.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bfGjh.png&quot; alt=&quot;Screenshot with Spanish text&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when I try to use AmigaShell, keyboard layout is in USA key-map always, and its very difficult to write in Spanish Keyboard. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How I could change Amiga Shell Key Layout to Spanish Key Layout?&lt;/p&gt;&#xA;" OwnerUserId="69" LastEditorUserId="276" LastEditDate="2016-06-09T09:49:44.230" LastActivityDate="2016-06-09T09:49:44.230" Title="Change Amiga Shell keyboard layout in Workbench 1.3" Tags="&lt;amiga&gt;&lt;amiga-shell&gt;&lt;amiga-500&gt;&lt;amiga-workbench-1.3&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="114" PostTypeId="2" ParentId="39" CreationDate="2016-04-20T12:07:25.917" Score="11" Body="&lt;p&gt;Memory beyond 48 KB on 8-bit Ataris is all based on bank-switching, since the 6502 processor only has 16 address lines. The CPU can address 64 KB total, and that has to include ROM and memory-mapped I/O (0xD000-0xD7FF) as well as RAM. On XL/XE Ataris, PIA Port B, at address 0xD301, is used to swap parts of physical memory in and out of various banks, so different physical locations show up in the same address space:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;bit 0 enables or disables the OS ROM, from 0xC000 to 0xCFFF and 0xD800 to 0xFFFF; disabling it gives back 14 KB of RAM&lt;/li&gt;&#xA;&lt;li&gt;bit 1 enables or disables the BASIC ROM, from 0xA000 to 0xBFFF; disabling it gives back 8 KB of RAM&lt;/li&gt;&#xA;&lt;li&gt;bits 2 and 3 provide bank selection on 130XEs (since they have 128 KB of RAM)&lt;/li&gt;&#xA;&lt;li&gt;bits 4 and 5 control CPU/ANTIC access (the CPU and ANTIC can bank-switch independently, which makes sense since ANTIC has its own RAM ports)&lt;/li&gt;&#xA;&lt;li&gt;bit 6 enables or disables the Missile Command ROM on XEs, at the same locations as the BASIC ROM&lt;/li&gt;&#xA;&lt;li&gt;bit 7 enables or disables the self-test ROM, from 0x5000 to 0x57FF; disabling it gives back 2 KB of RAM&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(That PIA port was used for the third and fourth joystick ports on the Atari 400 and 800; memory expansion beyond 52KB on those involved other bank-switching schemes. See the FAQ, linked below, for details.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory expansion modifications typically involve adding a bank-switching chip and memory chips, and use more bits for bank selection. There were many different memory expansions sold back when 8-bit Ataris were current, and there are still a few varieties available now — &lt;em&gt;e.g.&lt;/em&gt; &lt;a href=&quot;http://lotharek.pl/product.php?pid=67&quot;&gt;the Ultimate 1MB&lt;/a&gt; (which isn’t just a memory expansion). 4 MB is the maximum possible, using 256 16 KB banks (with 8 selection bits).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;“Standard” software doesn’t know about it, but there is some software which does; any software which could benefit from a 130XE would know how to use bank switching. (This is mostly games and demos though.) There were various switching standards, and some modern boards support different approaches; you’ll find mentions such as “RAMbo 320KB”, “CompyShop 576KB” and “RAMbo 1088KB”. Expansions end up being most useful as RAM disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://atariage.com/forums/topic/249405-new-4mb-ram-expansion/&quot;&gt;Some expansions&lt;/a&gt; include a replacement 16-bit CPU, the 65816, which has a default 6502-compatible mode but has 24 address lines and can be used to access up to 16MB of RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;ftp://rtfm.mit.edu/pub/faqs/atari-8-bit/faq&quot;&gt;Atari 8-bit FAQ&lt;/a&gt; section 6.11 covers memory expansion boards. &lt;a href=&quot;http://a8.fandal.cz/search.php?search=130XE&amp;amp;butt_details_x=x&quot;&gt;a8.fandal.cz&lt;/a&gt; lists software which can use 130XE-style memory expansions.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2016-11-02T20:09:32.567" LastActivityDate="2016-11-02T20:09:32.567" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="115" PostTypeId="2" ParentId="113" CreationDate="2016-04-20T13:19:23.667" Score="16" Body="&lt;p&gt;Alright, you seem to already have the correct keymap file in &lt;code&gt;DEVS:keymaps/&lt;/code&gt;, as you seem to be able to use the Keymap in Workbench programs. That's good (otherwise you would have had to copy it from &lt;code&gt;&quot;Extras 1.3:Devs/keymaps&quot;&lt;/code&gt; to &lt;code&gt;DEVS:keymaps/&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now open your Workbench disk and start the &lt;code&gt;Shell&lt;/code&gt;. In the Shell, type:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ed S:Startup-Sequence&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This will bring up a text editor showing the Amiga startup script (similar in vein to MS-DOS' autoexec.bat). In there look for a line similar to this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SYS:System/SetMap usa1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Change the &lt;code&gt;usa1&lt;/code&gt; or whatever keymap it loads to &lt;code&gt;e&lt;/code&gt;. Make very sure that you don't change anything else or you might have a hard time to fix it next time you try to boot Workbench. Now press &lt;strong&gt;Esc&lt;/strong&gt;, which will bring you into command mode. You will see a lone &lt;code&gt;*&lt;/code&gt; at the beginning of the bottom line of the editor after which you can enter commands. Type &lt;code&gt;x&lt;/code&gt; and press the &lt;strong&gt;Enter&lt;/strong&gt; key, which will save the changed file and exit the editor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next time you boot up Workbench it should have changed the CLI and Shell keymap to Español.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case you don't find a line with &lt;code&gt;Setmap&lt;/code&gt; in the &lt;code&gt;Startup-Sequence&lt;/code&gt;, you will need to insert it there yourself. I would suggest somewhere before &lt;code&gt;LoadWB&lt;/code&gt;. Press Enter to create a new empty line and put the following command there:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SYS:System/SetMap e&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then perform the same saving as above (&lt;strong&gt;Esc&lt;/strong&gt;, then &lt;code&gt;x&lt;/code&gt;, then &lt;strong&gt;Enter&lt;/strong&gt;) and reboot.&lt;/p&gt;&#xA;" OwnerUserId="92" LastActivityDate="2016-04-20T13:19:23.667" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="118" PostTypeId="2" ParentId="89" CreationDate="2016-04-20T16:11:35.703" Score="21" Body="&lt;p&gt;There was, at one time, a custom tool for this job called the &quot;Mac Cracker&quot; and Apple provided their own to dealers and authorized repair shops. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/1rph2.jpg&quot; alt=&quot;Mac Cracker&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In essence, what you need is a long handled Torx T15 driver and a spudger or similar tool to pry the halves of the case apart without damaging the plastic. There are other examples of &quot;case crackers&quot; that do the same thing, applying even pressure to force apart tower cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.pcmag.com/encyclopedia/term/39316/case-cracker&quot; rel=&quot;noreferrer&quot;&gt;http://www.pcmag.com/encyclopedia/term/39316/case-cracker&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a flat screwdriver to loosen the case is possible, but not advised. The small area over which the force is applied tends to crack or scar the case. You can often see signs of this kind of distress on used Macs. Best to use one the aforementioned tools, or just a couple of good whacks and gravity.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="89" LastEditDate="2017-04-06T07:10:30.867" LastActivityDate="2017-04-06T07:10:30.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="119" PostTypeId="5" CreationDate="2016-04-20T16:12:04.063" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-20T16:12:04.063" LastActivityDate="2016-04-20T16:12:04.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="120" PostTypeId="4" CreationDate="2016-04-20T16:12:04.063" Score="0" Body="For questions about the different versions and products of the SNES (Super Nintendo Entertainment System)" OwnerUserId="13" LastEditorUserId="13" LastEditDate="2016-04-20T23:34:05.463" LastActivityDate="2016-04-20T23:34:05.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="121" PostTypeId="5" CreationDate="2016-04-20T16:14:43.937" Score="0" Body="&lt;p&gt;Nintendo is a Japanese electronics company.  A manufacturer of video games and consoles since the 1970s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related tags:&#xA;&lt;a href=&quot;/questions/tagged/nes&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;nes&amp;#39;&quot; rel=&quot;tag&quot;&gt;nes&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/snes&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;snes&amp;#39;&quot; rel=&quot;tag&quot;&gt;snes&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/game-boy&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;game-boy&amp;#39;&quot; rel=&quot;tag&quot;&gt;game-boy&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13" LastEditorUserId="276" LastEditDate="2016-06-24T11:39:03.390" LastActivityDate="2016-06-24T11:39:03.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="122" PostTypeId="4" CreationDate="2016-04-20T16:14:43.937" Score="0" Body="For questions about the different versions and products released by Nintendo" OwnerUserId="13" LastEditorUserId="13" LastEditDate="2016-04-20T23:34:09.150" LastActivityDate="2016-04-20T23:34:09.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="123" PostTypeId="1" AcceptedAnswerId="135" CreationDate="2016-04-20T16:55:03.693" Score="12" ViewCount="711" Body="&lt;p&gt;I have an old programmable Sharp calculator (&lt;a href=&quot;http://www.calculator.org/Pages/calculator.aspx?model=EL-9000&amp;amp;make=Sharp&quot; rel=&quot;noreferrer&quot;&gt;Sharp EL-9000 SUPER SCIENTIFIC&lt;/a&gt;) which I used extensively back in the day. I would like to dump all the software I wrote, and be able to share it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Heh72.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Heh72.jpg&quot; alt=&quot;Sharp EL-9000&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I vaguely remember its manual mentioning the existence of a serial cable, but I long lost the book. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an existing toolkit to do back up the software? Is there some specific format or site where I can upload my code to share it, or should I just use GitHub?&lt;/p&gt;&#xA;" OwnerUserId="55" LastEditorUserId="276" LastEditDate="2016-11-14T15:23:15.453" LastActivityDate="2016-11-14T15:23:15.453" Title="Dumping and sharing software for old Sharp calculator" Tags="&lt;hardware&gt;&lt;sharp-el9000&gt;&lt;dump&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="124" PostTypeId="1" AcceptedAnswerId="126" CreationDate="2016-04-20T17:07:09.800" Score="31" ViewCount="33281" Body="&lt;p&gt;I have a Nintendo GameBoy Color with some games that support saving your game status and also have a real-time clock, like Pokémon Red and Pokémon Silver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But recently the game does not save any more, the saved position is reset. Also the real-time clock stopped and time only goes one while the game is running instead of 24/7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do such old Nintendo GameBoy games store save files, what could cause this sudden failure and how could I fix this?&lt;/p&gt;&#xA;" OwnerUserId="128" LastEditorUserId="621" LastEditDate="2016-05-19T16:29:08.990" LastActivityDate="2019-12-05T23:50:27.657" Title="GameBoy Color games do not save any more" Tags="&lt;nintendo&gt;&lt;storage&gt;&lt;game-boy&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="125" PostTypeId="2" ParentId="91" CreationDate="2016-04-20T17:10:00.337" Score="6" Body="&lt;p&gt;In addition to the Community Wiki answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This routine with entries &lt;code&gt;CHRGET&lt;/code&gt; and &lt;code&gt;CHRGOT&lt;/code&gt; is not only part of the interpreter loop, it used in every statement and function which has to &quot;parse&quot; further data from the BASIC text (program), e.g. for parameters.&#xA;On some occasions the pointer &lt;code&gt;TXTPTR&lt;/code&gt; will be stacked, typically while executing a &lt;code&gt;DEFFN&lt;/code&gt;'d function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Especially on older versions of CBM BASIC (which PET uses) this routine is the place to extent (patch) the interpreter for additional commands (only with newer BASIC versions hooks where introduced to do it in a nicer way).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the placement of the routine in zero page: Even it uses self-modifying code, the &lt;code&gt;TXTPTR&lt;/code&gt; refers the LDA parameter, I don't think the speed issue was the cause for this. Maybe they wanted to keep the Y register untouched. Comparing to BASIC 7.0 on a C128 this routine is moved out of page 0 and contains additional bank switching stuff. On the other hand you may count on having Y=0 after a call to this routine which may be valuable, too.&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="115" LastEditDate="2016-04-21T18:11:35.523" LastActivityDate="2016-04-21T18:11:35.523" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="126" PostTypeId="2" ParentId="124" CreationDate="2016-04-20T17:13:58.743" Score="35" Body="&lt;p&gt;Gameboy games use a CR2025 battery which over the years eventually dies stopping games from saving and causing previously saved games to disappear. Note however while the game is powered you can still save, however once you power down the save will be gone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ptZWJ.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ptZWJ.jpg&quot; alt=&quot;Original battery&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to replace the battery you must open up the cartridge with a 3.8mm screwdriver security bit. Next you have to carefully pry the connectors loose from the existing battery since the original battery is actually soldered to the connectors. A common method on replacing the battery is to use an adhesive (preferably) electrical tape to hold the new battery in place. It's important to note you do &lt;em&gt;not&lt;/em&gt; want to remove or break the current connectors, if you do so you will need to buy a complete kit which requires you to solder new connectors in place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dqZR5.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dqZR5.jpg&quot; alt=&quot;Replaced Battery&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once replaced you can continue to save games again, however down the road in 10-20 years you will have to replace the battery again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To avoid losing your saves forever there are &lt;a href=&quot;http://stayornay.com/tech/?p=295&quot;&gt;some great resources&lt;/a&gt; on actually transferring your existing saves to your PC.&lt;/p&gt;&#xA;" OwnerUserId="180" LastEditorUserId="180" LastEditDate="2016-04-20T17:22:55.350" LastActivityDate="2016-04-20T17:22:55.350" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="127" PostTypeId="2" ParentId="124" CreationDate="2016-04-20T17:22:35.153" Score="17" Body="&lt;p&gt;Gameboy games use CR2025 battery, which will die and &lt;a href=&quot;https://gaming.stackexchange.com/a/178589/100298&quot;&gt;take all the data&lt;/a&gt; with it:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It's lost for good. Saved games back in those days were preserved through the use of a battery right in the game pack, not stored on the gaming device itself like it is today. And when that battery dies, so does the saves with it. It's not about corruption of the save or whatnot, there just simply isn't a charge to hold that save data between sessions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So you will need to get a new battery to keep on playing but your previous saved data is lost forever, as it is gone when the life of the battery is gone. You can replace the battery using the instructions of this &lt;a href=&quot;http://www.instructables.com/id/How-to-Change-Game-Boy-Cartridge-Battery/&quot; rel=&quot;noreferrer&quot;&gt;site&lt;/a&gt; then your Gameboy should be properly working brand-new... literally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you can also try this &lt;a href=&quot;http://stayornay.com/tech/?p=295&quot; rel=&quot;noreferrer&quot;&gt;site&lt;/a&gt; to store the data and prevent from being lost due to battery death.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:10:06.257" LastActivityDate="2016-04-20T17:22:35.153" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="128" PostTypeId="2" ParentId="97" CreationDate="2016-04-20T17:45:28.477" Score="11" Body="&lt;p&gt;You need an assembler to do this trick. This is an interrupt timing trick with some behind-the-scenes coding. The frame allows sprites to sneak towards the edge without the device stopping them. They are connected to scan lines displayed by the device. Of course, for top and bottom, it is easier to make this happen as you only need to interrupt once and only need one scan line per sprite.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Programm an interrupt, synced to start at a certain scan line, 7 pixel or sth like that before the lower border.&lt;/li&gt;&#xA;  &lt;li&gt;Set the register in VIC to make the border smaller. (There is a register that can do that.)&lt;/li&gt;&#xA;  &lt;li&gt;VIC now believes that the border already started and does not start to paint it.&lt;/li&gt;&#xA;  &lt;li&gt;-&gt; No border at the bottom.&lt;/li&gt;&#xA;  &lt;li&gt;Programm another interrupt after the real border to set it back to original.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But for left and right borders, you have to make sure you repeat the process (the interruptions) per scan line:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Programm an interrupt, synced to start at a certain scan line.&lt;/li&gt;&#xA;  &lt;li&gt;Then do some NOPs until you are 7 pixel before the right border.&lt;/li&gt;&#xA;  &lt;li&gt;Set the register in VIC to make the border smaller. &lt;/li&gt;&#xA;  &lt;li&gt;-&gt; No border at the right side.&lt;/li&gt;&#xA;  &lt;li&gt;Do some NOPs until you are after the real border and set the register back to original value.&lt;/li&gt;&#xA;  &lt;li&gt;Again do some NOPs until step 2.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This answer is based on this &lt;a href=&quot;https://stackoverflow.com/a/1477560/4052384&quot;&gt;StackOverflow answer&lt;/a&gt; and the code (plus more information) is shown in the linked answer.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-05-23T12:39:25.033" LastActivityDate="2016-04-20T17:45:28.477" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="129" PostTypeId="5" CreationDate="2016-04-20T17:57:13.483" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-20T17:57:13.483" LastActivityDate="2016-04-20T17:57:13.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="130" PostTypeId="4" CreationDate="2016-04-20T17:57:13.483" Score="0" Body="Nintendo Game Boy and Game Boy Color: use, maintenance, design, programming and emulation." OwnerUserId="37" LastEditorUserId="15334" LastEditDate="2021-04-11T06:24:07.063" LastActivityDate="2021-04-11T06:24:07.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="131" PostTypeId="5" CreationDate="2016-04-20T17:58:07.390" Score="0" Body="&lt;p&gt;The term &amp;quot;hardware&amp;quot; encompasses components on circuit boards, physical input devices, power supplies, displays, and other devices that contain or are components that are capable of interfacing electronically with other components or devices. It does not include plastic cases, passive mechanical components (e.g. a laptop's hinge) or non-computing parts of a system (e.g. the glass pane of a CRT display), but it does include electronic systems that have mechanical parts (e.g. a floppy diskette reader).&lt;/p&gt;&#xA;&lt;p&gt;This tag should be used for questions about hardware as defined in the previous paragraph. For enclosures and other cosmetic parts, use &lt;a href=&quot;/questions/tagged/case&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;case&amp;#39;&quot; rel=&quot;tag&quot;&gt;case&lt;/a&gt; instead, perhaps together with &lt;a href=&quot;/questions/tagged/restoration&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;restoration&amp;#39;&quot; rel=&quot;tag&quot;&gt;restoration&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="15334" LastEditDate="2021-02-23T12:29:07.173" LastActivityDate="2021-02-23T12:29:07.173" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="132" PostTypeId="4" CreationDate="2016-04-20T17:58:07.390" Score="0" Body="Retro hardware generally: boards, extension cards, power supplies, peripherals. Use more specific tags as appropriate; use [case] instead for enclosures." OwnerUserId="37" LastEditorUserId="15334" LastEditDate="2021-02-23T12:34:58.607" LastActivityDate="2021-02-23T12:34:58.607" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="134" PostTypeId="1" AcceptedAnswerId="138" CreationDate="2016-04-20T18:12:33.007" Score="21" ViewCount="3341" Body="&lt;p&gt;My Commodore 64 is running quite slow, and my friends want it to be faster, thus overclocking it. But no one knows exactly how to do that. With our current &quot;modern&quot; stuff, nothing seems to help my retro computer get any faster. Naturally I suggested changing the crystal that controls the timing, and of course I was greeted with a series of complaints of ruining the device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I get some more juice out of (overclocking) my Commodore 64?&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="105" LastEditDate="2016-05-16T07:49:51.460" LastActivityDate="2018-04-27T12:45:31.813" Title="How can I overclock my Commodore 64?" Tags="&lt;commodore-64&gt;&lt;overclocking&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="135" PostTypeId="2" ParentId="123" CreationDate="2016-04-20T18:34:59.633" Score="9" Body="&lt;p&gt;You need the &lt;a href=&quot;http://www.imslsoft.com/xlinkwin.htm#Cables&quot;&gt;Sharp CE-139T serial cable&lt;/a&gt; (included in the Sharp CE-490W and CE-491W packages) or equivalent. But this cable is hard to find.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A similar cable is the CE-136T (included in the CE-390 package) which is not quite so hard to find but it only works in DOS because it requires exact timing. Maybe you can rig something up with a Raspberry Pi or Arduino to transfer the data to Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or get the &lt;a href=&quot;http://sharppocketcomputers.com/index.htm#printers&quot;&gt;Sharp CE-50P printer &amp;amp; cassette port&lt;/a&gt; and print out your programs, then scan them in; or attach a digital recorder to the cassette interface and save your programs to uncompressed .wav. This assumes the EL-9000 can export programs through the serial port. I couldn't find the manual online. Maybe you could scan it in and post it to &lt;a href=&quot;https://archive.org/details/manuals&quot;&gt;Archive.org&lt;/a&gt;?&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-04-20T18:34:59.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="138" PostTypeId="2" ParentId="134" CreationDate="2016-04-20T20:21:53.813" Score="36" Body="&lt;p&gt;The basic principle behind overclocking is that if you speed up a clock, everything that runs from that clock will go faster.  But there are some parts of your computer that you don't want to speed up, and NTSC (or PAL) video output is one of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order for C64 output to be displayed correctly on an NTSC/PAL monitor, it needs to be sent to the monitor at a very specific rate (the rate at which your computer sends needs to match the rate your monitor expects to receive).  Speeding it up or slowing it down will make it difficult or impossible for your monitor to maintain sync.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This leads to a problem on the C64, because the same clock is used to drive both the CPU and the VIC video chip.  The end result is you can't speed up the CPU clock without also speeding up the VIC clock, and speeding up the VIC clock will affect your display.  So for practical purposes overclocking isn't really an option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is an option is to use a faster coprocessor, a completely separate processor that can access the same memory.  Such a processor would need to include a circuit that separates the internal CPU clock from the memory access clock, so that the CPU can go faster without affecting memory access time (which needs to stay the same to avoid colliding with VIC chip memory accesses).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern PCs are much more suited to overclocking because busses are designed to allow components running at different speeds to work together, via sets of 'request' and 'ready' lines.  It's expected in such busses that faster devices will need to wait for slower ones.  Overclocking is then simply a matter of taking hardware that runs at 'less different' speeds, and making it run at 'more different' speeds instead.  Since modern designs already make allowances for different speed devices to work together, this typically works fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C64 memory bus is designed to have only 2 participants, the CPU and the VIC chip and they must both run at exactly the same speed because the 'bus protocol' is very simply 'take turns'.  There are no allowances or features in the design to allow one to run faster than the other.  This reduced the cost to manufacture the computer, but also made it harder to mod.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2016-04-20T20:21:53.813" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="139" PostTypeId="2" ParentId="99" CreationDate="2016-04-20T20:44:33.450" Score="6" Body="&lt;p&gt;The Star was indeed the first commercially available. However, it wasn't something average people could even aspire to buying. The Lisa, while insanely overpriced, was technically available for everyday people to buy, and was certainly available for business users. The Star was very much a corporate beast at best.&lt;/p&gt;&#xA;" OwnerUserId="72" LastActivityDate="2016-04-20T20:44:33.450" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="140" PostTypeId="2" ParentId="31" CreationDate="2016-04-20T20:53:10.183" Score="5" Body="&lt;p&gt;There are also services that offer transfer of files from older media (just Google &quot;retro floppy&quot; and you'll find some, such as &lt;a href=&quot;http://www.retrofloppy.com/&quot; rel=&quot;noreferrer&quot;&gt;RetroFloppy&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also the &lt;a href=&quot;http://www.deviceside.com/fc5025.html&quot; rel=&quot;noreferrer&quot;&gt;Device Side Data FC5025 USB controller&lt;/a&gt; for IBM PC style 5.25&quot; floppy drives. It adapts these drives to allow their use over USB, but also allows them to read a ton of different disk formats, including Apple DOS 3.2 and DOS 3.3, ProDOS, Atari 810, Commodore 1541, Kaypro CP/M, MS-DOS, Tandy CoCo Disk BASIC, and TI-99/4A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The folks I know that have tried it were quite satisfied. I have one which I've not yet had time to try it for myself. The one drawback is that on many or most 5.25&quot; drives, it cannot read the back side of disks where each side was treated like a one-sided disk, unless there are index holes for both sides.&lt;/p&gt;&#xA;" OwnerUserId="72" LastActivityDate="2016-04-20T20:53:10.183" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="141" PostTypeId="2" ParentId="105" CreationDate="2016-04-20T20:59:57.080" Score="2" Body="&lt;p&gt;At least on old computer cards (you know, that go into slots, with edges basically the same as cartridges for classic game systems), I always used a standard pencil eraser to gently clean the contacts. A few gentle scrubs with a pencil's built-in eraser (gives you lots of control), done while being careful to keep the debris from falling down into the cartridge, may be enough to do the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just don't do it &lt;strong&gt;too&lt;/strong&gt; often; it can eventually wear away the gold and damage the connector. But if you only do it once in a very long while, it should be fine.&lt;/p&gt;&#xA;" OwnerUserId="72" LastActivityDate="2016-04-20T20:59:57.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="142" PostTypeId="1" CreationDate="2016-04-20T21:03:57.070" Score="9" ViewCount="174" Body="&lt;p&gt;I found my Game Boy Advance in a box a few days ago, and I'm already playing good old Mario games. The problem is that I usually don't have time to finish the whole level at the same time (or I might want to savescum).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there way to save (and load) the game state somehow, by using external parts?&lt;/p&gt;&#xA;" OwnerUserId="65" LastEditorUserId="621" LastEditDate="2016-05-25T19:08:47.770" LastActivityDate="2016-05-25T19:08:47.770" Title="Is there way to save the save state?" Tags="&lt;nintendo&gt;&lt;game-boy-advance&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="143" PostTypeId="1" AcceptedAnswerId="144" CreationDate="2016-04-20T21:29:46.320" Score="12" ViewCount="2089" Body="&lt;p&gt;Apple II computers initially used audio cassette tapes for storage.  How was the data stored?  What was the maximum bit rate?&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-05-11T15:34:22.237" Title="What format is used for Apple II cassette tapes?" Tags="&lt;apple-ii&gt;&lt;cassette-tape&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="144" PostTypeId="2" ParentId="143" CreationDate="2016-04-20T21:29:46.320" Score="16" Body="&lt;p&gt;The Apple II recorded data as a frequency-modulated sine wave.  A standard consumer cassette deck could be connected to the dedicated cassette port on the Apple ][, ][+, and //e.  The //c, ///, and IIgs did not have this port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A tape could hold one or more chunks of data, each of which had the following structure:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Entry tone: 10.6 seconds of 770Hz (8192 cycles at 1300 usec/cycle).  This let the human operator know that the start of data had been found.&lt;/li&gt;&#xA;&lt;li&gt;Tape-in edge: 1/2 cycle at 400 usec/cycle, followed by 1/2 cycle at 500 usec/cycle.  This &quot;short zero&quot; indicated the transition between header and data.&lt;/li&gt;&#xA;&lt;li&gt;Data: one cycle per bit, using 500 usec/cycle for &lt;code&gt;0&lt;/code&gt; and 1000 usec/cycle for &lt;code&gt;1&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There is no &quot;end of data&quot; indication, so it's up to the reader to specify the length of data.  The last byte of data is followed by an XOR checksum, initialized to $FF, that can be used to check for success.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For machine-language programs, the length is specified on the monitor command line, e.g. &lt;code&gt;800.1FFFR&lt;/code&gt; would read $1800 (6144) bytes.  For BASIC programs and data, the length is included in an initial header section:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Integer BASIC programs have a two-byte (little-endian) length.&lt;/li&gt;&#xA;&lt;li&gt;Applesoft BASIC has a two-byte length, followed by a &quot;run&quot; flag byte.&lt;/li&gt;&#xA;&lt;li&gt;Applesoft shape tables (loaded with &lt;code&gt;SHLOAD&lt;/code&gt;) have a two-byte length.&lt;/li&gt;&#xA;&lt;li&gt;Applesoft arrays (loaded with &lt;code&gt;RECALL&lt;/code&gt;) have a three-byte header.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note the header section is a full data area, complete with 10.6-second lead-in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The storage density varies from 2000bps for a file full of &lt;code&gt;0&lt;/code&gt; bits to 1000bps for a file full of &lt;code&gt;1&lt;/code&gt; bits.  Assuming an equal distribution of bits, you can expect to transfer about 187 bytes/second (ignoring the header).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An annotated 6502 assembly listing, as well as C++ code for deciphering cassette data in WAV files, can be found &lt;a href=&quot;https://github.com/fadden/ciderpress/blob/master/app/CassetteDialog.cpp&quot;&gt;here&lt;/a&gt;.  The code in the system monitor that reads and writes data is less then 200 bytes long.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-04-20T21:29:46.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="145" PostTypeId="1" CreationDate="2016-04-20T21:48:22.227" Score="28" ViewCount="2133" Body="&lt;p&gt;On the 6502 CPU, this instruction:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LDA $0380,Y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;takes either 4 or 5 cycles, depending on whether the indexing crosses a page boundary.  But this instruction:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;STA $0380,Y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;takes 5 cycles regardless of page boundaries.  Why is one fixed and the other variable?&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-21T18:38:23.810" LastActivityDate="2017-06-13T22:03:32.347" Title="Why does 6502 indexed LDA take an extra cycle at page boundaries?" Tags="&lt;6502&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="146" PostTypeId="2" ParentId="145" CreationDate="2016-04-20T21:48:22.227" Score="30" Body="&lt;p&gt;The 6502 had 16-bit addressing but only an 8-bit adder.  For an indexed load or store, the index register had to be added to the base address in two steps.  As an optimization, the 6502 will load from memory as soon as the first part of the add is complete.  If the add didn't cause a carry out, the loaded value is kept.  If it did cause a carry, the value is fetched again from the correct address, requiring an extra cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a write operation, speculatively storing data at the wrong address would be problematic, so the write is held until the address calculation is complete.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As noted in the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502#Bugs_and_quirks&quot;&gt;&quot;bugs &amp;amp; quirks&quot; section&lt;/a&gt; of the wikipedia 6502 page, this behavior could cause unexpected effects if used on a memory-mapped I/O area.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-04-20T21:48:22.227" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="147" PostTypeId="5" CreationDate="2016-04-20T22:01:51.170" Score="0" Body="&lt;p&gt;Regarding the efficacy and safety of methods, techniques and tools for cleaning and maintaining retro hardware.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="276" LastEditDate="2016-06-24T12:32:10.643" LastActivityDate="2016-06-24T12:32:10.643" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="148" PostTypeId="4" CreationDate="2016-04-20T22:01:51.170" Score="0" Body="For questions relating to methods, techniques and tools for cleaning and maintaining retro hardware." OwnerUserId="89" LastEditorUserId="278" LastEditDate="2016-09-10T18:00:08.400" LastActivityDate="2016-09-10T18:00:08.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="149" PostTypeId="1" AcceptedAnswerId="19920" CreationDate="2016-04-20T22:06:23.933" Score="7" ViewCount="292" Body="&lt;p&gt;I have a pair of connectors that mate with each other.  One is labeled BUS, the other TAG.  What are they for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IOPYl.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IOPYl.jpg&quot; alt=&quot;bus-tag connectors&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2021-05-21T15:00:42.520" Title="What are these bus/tag connectors for?" Tags="&lt;connector&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="150" PostTypeId="1" AcceptedAnswerId="153" CreationDate="2016-04-20T22:14:51.847" Score="15" ViewCount="503" Body="&lt;p&gt;Color Computer machines initially used audio cassette tapes for storage. How was the data stored? What was the maximum bit rate?&lt;/p&gt;&#xA;" OwnerUserId="29" LastActivityDate="2016-04-21T08:21:17.290" Title="What format is used for CoCo cassette tapes?" Tags="&lt;color-computer&gt;&lt;cassette-tape&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="151" PostTypeId="1" CreationDate="2016-04-20T23:08:30.637" Score="26" ViewCount="2961" Body="&lt;p&gt;While the Original Chip Set (OCS) and Enhanced Chip Set (ECS) Amiga computers had the 32 x 2 colour EHB (Extra Half-Brite) and 4096 colour HAM (Hold And Mofify) screen modes, where these ever used outside paint programs, for instance in games?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If so, was there any interactive animation/movement with these screen modes?&lt;/p&gt;&#xA;" OwnerUserId="141" LastActivityDate="2019-10-28T01:01:08.613" Title="Did any Amiga 500 games or programs (apart from paint programs) use more than 32 colours?" Tags="&lt;amiga&gt;&lt;graphics&gt;&lt;display&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="152" PostTypeId="1" CreationDate="2016-04-21T00:36:01.803" Score="12" ViewCount="455" Body="&lt;p&gt;The first two Apple II models (the ][ and ][+) were unable to display lower case on the text screen.  Some 3rd parties made lower-case adapters that replaced the character ROM (e.g. &lt;a href=&quot;http://www.applefritter.com/content/dan-paymar-lowercase-adaptor-interface&quot;&gt;Dan Paymar's popular device&lt;/a&gt;).  The device from Lazer Systems (a/k/a Lazer MicroSystems) was called the &quot;Lower Case Plus&quot;, &lt;a href=&quot;http://www.computerhistory.org/collections/catalog/102645984&quot;&gt;pictured here&lt;/a&gt;.  One of the interesting features was that you could use an EPROM programmer to replace the font with one of your own design.  You could also add on a &quot;Character Set Plus&quot; to have additional ROM fonts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lazer Systems had another product called the &quot;Graphics Plus&quot;, which allowed the font to be updated with software.  The idea was that you could use text characters as graphics tiles and create games that ran much faster than similar code that used the hi-res screen (the text screen being 1/8th the size).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did font selection and updating work?&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2017-01-16T14:12:53.243" Title="How did the Lazer Systems Graphics Plus board work?" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="153" PostTypeId="2" ParentId="150" CreationDate="2016-04-21T03:45:38.690" Score="14" Body="&lt;p&gt;Most of this info comes from the Color Computer 3 Service Manual (26-3334), except for the actual frequencies used on the cassette:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the tape, &lt;a href=&quot;http://caltronik.pagesperso-orange.fr/Pawel/TRS-80/pc_files/cas_rest/index.html&quot;&gt;frequency shift keying is used&lt;/a&gt;, with a zero bit encoded by a single 1200 Hz sine wave, and a one bit encoded by a single 2400 Hz sine wave. (Yes, this means some bytes play faster than others.) The service manual claims this results in 1500 baud, but obviously this will vary depending on the actual data being stored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The service manual follows by describing the actual data format in section 5.10:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each file saved on tape consists of six discrete items:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A leader, 128 bytes of 55H&lt;/li&gt;&#xA;&lt;li&gt;A Namefile block, containing the file name&lt;/li&gt;&#xA;&lt;li&gt;Approximately 0.5 seconds of blank space with no audio, which is meant to give the CoCo enough time to process the Namefile block&lt;/li&gt;&#xA;&lt;li&gt;Another leader, 128 bytes of 55H&lt;/li&gt;&#xA;&lt;li&gt;One or more data blocks&lt;/li&gt;&#xA;&lt;li&gt;An end of file block&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Data blocks, Namefile blocks and end of file blocks have a common format:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Leader byte 55H&lt;/li&gt;&#xA;&lt;li&gt;Sync byte 3CH&lt;/li&gt;&#xA;&lt;li&gt;A block type byte: 00H = Namefile block, 01H = data block, FFH = end of file block&lt;/li&gt;&#xA;&lt;li&gt;Block length byte&lt;/li&gt;&#xA;&lt;li&gt;Data (up to 255 bytes)&lt;/li&gt;&#xA;&lt;li&gt;Checksum: the sum of all data bytes plus block type and block length bytes&lt;/li&gt;&#xA;&lt;li&gt;Trailer byte 55H&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The data in the Namefile block is 15 bytes long, and consists of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Eight bytes for the file name&lt;/li&gt;&#xA;&lt;li&gt;A file type byte: 00H = BASIC program, 01H = data, 02H = Machine language program&lt;/li&gt;&#xA;&lt;li&gt;An ASCII flag: 00H = ASCII, FFH = binary&lt;/li&gt;&#xA;&lt;li&gt;A gap flag: 01H = continuous, FFH = gaps&lt;/li&gt;&#xA;&lt;li&gt;For machine language programs, the start address (two bytes)&lt;/li&gt;&#xA;&lt;li&gt;For machine language programs, the load address (two bytes)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The end of file block is a block with zero length.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original &lt;a href=&quot;http://www.colorcomputerarchive.com/coco/Documents/Manuals/Hardware/Color%20Computer%20Technical%20Reference%20Manual%20(Tandy).pdf&quot;&gt;Color Computer Technical Reference Manual&lt;/a&gt; (26-3193) has more detail on the hardware implementation of the cassette interface, if you find this necessary.&lt;/p&gt;&#xA;" OwnerUserId="6" LastEditorUserId="6" LastEditDate="2016-04-21T08:21:17.290" LastActivityDate="2016-04-21T08:21:17.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="154" PostTypeId="2" ParentId="89" CreationDate="2016-04-21T04:43:14.777" Score="13" Body="&lt;p&gt;All you need is a long reach Torx T15 &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/brYtm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/brYtm.jpg&quot; alt=&quot;Extra long Torx screwdriver&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to get at the screws and a large bull dog clip (1&quot;-2&quot;) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/i4cXJ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/i4cXJ.jpg&quot; alt=&quot;Bulldog clip&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to crack the case open. Nothing else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bulldog clip is the cheapest, and best approximation to the &quot;pull apart tool&quot; to which you are referring.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC, the clip, when closed, is placed in the mid point of the grove (where the front and back parts of the case meet) at the top of the SE/30, and then you slowly open the bulldog clip, to crack the case open. This is obviously done once the screws have been removed. The area to which I am referring is shown below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rsIKT.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rsIKT.jpg&quot; alt=&quot;Where to place the case cracker&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Top tip: once you have extricated the Torx screws, replace them with Philips/crosshead ( or Allen bolts), to make life simpler for you in the future, as long reach Torx screw drivers are &lt;em&gt;generally&lt;/em&gt; harder to find than other types.&lt;/p&gt;&#xA;" OwnerUserId="202" LastEditorUserId="202" LastEditDate="2016-04-26T04:05:02.687" LastActivityDate="2016-04-26T04:05:02.687" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="155" PostTypeId="5" CreationDate="2016-04-21T05:20:17.223" Score="0" Body="&lt;p&gt;Many 1970s-era personal computers used audio cassettes for data storage.  Some early software was sold and distributed on cassette.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-23T16:40:13.040" LastActivityDate="2016-04-23T16:40:13.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="156" PostTypeId="4" CreationDate="2016-04-21T05:20:17.223" Score="0" Body="For questions about audio cassette tape, as used for computer data storage." OwnerUserId="56" LastEditorUserId="278" LastEditDate="2016-09-10T16:01:36.320" LastActivityDate="2016-09-10T16:01:36.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="157" PostTypeId="2" ParentId="64" CreationDate="2016-04-21T06:58:11.687" Score="15" Body="&lt;p&gt;My guess is that your VGA monitor is reporting itself as a mono monitor to the VGA card. This may be caused by the monitor being too modern for your Compaq: The VGA card expects the monitor to report its capabilities using three pins from the VGA connector, but modern monitors use I2C to report EDID information on those pins. If the impedance at some of these pins is too low or too high, they may be read as N/C or GND.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quoting &lt;a href=&quot;http://pinouts.ru/Video/Vga15_pinout.shtml&quot;&gt;http://pinouts.ru/Video/Vga15_pinout.shtml&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ID pins set-up&#xA;&#xA;4    11   12&#xA;ID2  ID0  ID1&#xA;&#xA;n/c  n/c  n/c   no monitor&#xA;n/c  n/c  GND   Mono monitor which does not support 1024x768&#xA;n/c  GND  n/c   Color monitor which does not support 1024x768&#xA;GND  GND  n/c   Color monitor which supports 1024x768&#xA;&#xA;GND means connected to ground&#xA;n/c means that the pin is not connected anywhere&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If this is happening, the VGA BIOS will reprogram the internal palette to show gray shades instead of colors. To find out if this is so, you can test this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without starting Windows (that is, in &quot;pure&quot; DOS mode), execute debug&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C:\&amp;gt;debug&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And enter these commands at the &lt;code&gt;debug&lt;/code&gt; command prompt (a dash):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-o 3c7,0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is to select DAC palette registers for read. Now, repeat the following command three times to get the R,G and B information for each palette entry.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-i 3c9&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;After entering the i command, debug will return the byte at that I/O port address, as in this example.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-i 3c9&#xA;00&#xA;-i 3c9&#xA;00&#xA;-i 3c9&#xA;00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My first palette entry is therefore RGB(0,0,0). Do it a second time&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-i 3c9&#xA;00&#xA;-i 3c9&#xA;00&#xA;-i 3c9&#xA;2A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My second palette entry is RGB(0,0,2A), which gives me a dark blue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you continue doing this, you will get the RGB values associated to each palette entry. A VGA card programmed with a grayscale palette will show identical values in R,G and B for each non-black color. For example, the second palette entry may show like this in a B/W setup:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-i 3c9&#xA;05&#xA;-i 3c9&#xA;05&#xA;-i 3c9&#xA;05&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which is roughly the grayscale shade equivalent to the original dark blue color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To quit debug, just enter &lt;code&gt;q&lt;/code&gt; at the debug command prompt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If with this test you conclude that your monitor is reporting itself as a B/W monitor to your VGA, a solution would be to take a VGA extension cable and wire it so pins 4 and 11 at the VGA card side go to GND, and pin 12 is left unconnected. On the VGA monitor side, these pins may be unconnected.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-04-21T06:58:11.687" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="158" PostTypeId="2" ParentId="10" CreationDate="2016-04-21T07:05:56.643" Score="13" Body="&lt;p&gt;For your reference, this is the datapath I inferred after reading Chris book. It's the ULA datapath I've used in the ZX-UNO clone. Coloured blocks will help you differentiate what parts are from the original ULA, Timex additions, and ULAplus additions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IDFHP.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IDFHP.png&quot; alt=&quot;Datapath Flow Chart&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="276" LastEditDate="2016-11-15T12:22:54.073" LastActivityDate="2016-11-15T12:22:54.073" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="159" PostTypeId="1" AcceptedAnswerId="513" CreationDate="2016-04-21T08:25:15.243" Score="12" ViewCount="1472" Body="&lt;p&gt;There were some cassette copying programs for 8-bit Atari, that boasted saving the games in a way that would load it at up to 1800baud - versus the standard 600baud, which was a significant improvement, and without requiring hardware modifications of the cassette recorder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did they work? And why wasn't that the standard used everywhere?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(IIRC, the program &quot;Warp Copy&quot; was an example of this.)&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="56" LastEditDate="2016-04-21T15:53:45.467" LastActivityDate="2018-01-15T10:42:58.453" Title="How did Atari cassette &quot;turbo without hardware mods&quot; work?" Tags="&lt;atari&gt;&lt;software&gt;&lt;cassette-tape&gt;&lt;utilities&gt;" AnswerCount="3" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="160" PostTypeId="1" CreationDate="2016-04-21T08:32:54.420" Score="19" ViewCount="1408" Body="&lt;p&gt;&lt;sup&gt;Just wondering how history questions will fare here. They could be a good addition to our scope.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pretty much exactly as the title says. Some of the earliest computers were based on valve systems or mechanical arrangements. What was he earliest computer that was not based on either of these systems?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming this means a digital electronic computer, but I may be wrong if there's an earlier type!&lt;/p&gt;&#xA;" OwnerUserId="146" LastActivityDate="2018-05-02T20:44:11.120" Title="What was the earliest non-valve, non-mechanical computer?" Tags="&lt;history&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="161" PostTypeId="1" AcceptedAnswerId="608" CreationDate="2016-04-21T08:41:28.443" Score="14" ViewCount="654" Body="&lt;p&gt;Some small utilities, tools etc for Atari were distributed as BASIC programs that would consist of just one line, that looked something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 A=USR(ADR(&quot;p$PHHLéúÿÿÇEéúÿÿ@éüÿÿ2A$éòùÿÿE°U´è§øÿÿøÿÆûÿÿé`&quot;))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Sometimes they would be split into two lines, but rarely more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/S8mUr.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S8mUr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, the machine language program was encoded as a string (Atari could display all 256 characters of ATASCII even if typing some of them required some hoop-jumping), the string was wrapped into ADR (returning the address of the string) and USR (jumping to the address given).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't quite imagine anyone converting the binary generated by the assembler into ATASCII by hand, especially if the program was longer. There had to be some utility to do this - emit a fragment of memory as string, wrap it into the commands, save as BASIC program. Is it obtainable somehow?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="4222" LastEditDate="2020-07-14T16:52:35.043" LastActivityDate="2020-07-15T12:46:08.207" Title="How does one convert Atari assembly to A=USR(ADR(&quot;[garble]&quot;)) style BASIC wrapper?" Tags="&lt;software&gt;&lt;atari&gt;&lt;atari-basic&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="162" PostTypeId="1" AcceptedAnswerId="267" CreationDate="2016-04-21T08:53:39.513" Score="12" ViewCount="641" Body="&lt;p&gt;8-bit Atari Basic had three different formats of storing programs on tape.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;CLOAD&lt;/code&gt;/&lt;code&gt;CSAVE&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LOAD &quot;C:&quot;&lt;/code&gt;/&lt;code&gt;SAVE &quot;C:&quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ENTER &quot;C:&quot;&lt;/code&gt;/&lt;code&gt;LIST &quot;C:&quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I understand the specifics of the last one - it behaved as if the contents of the file were typed from keyboard; with some rather simple hack you could save something else than the program in memory; a common one was appending &lt;code&gt;RUN&lt;/code&gt; at the end of saved program making it autorun upon loading, as the command was executed as soon as the program was loaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand &lt;code&gt;LOAD&lt;/code&gt; could take other handlers, like &lt;code&gt;D:&lt;/code&gt; for disk. I've long and fruitfully used it with &lt;code&gt;T:&lt;/code&gt; for tape in Turbo mode provided by cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I completely fail to see the point behind &lt;code&gt;CLOAD&lt;/code&gt;. Did it provide anything &lt;code&gt;LOAD C:&lt;/code&gt; didn't? The two save methods were incompatible, you couldn't perform &lt;code&gt;CLOAD&lt;/code&gt; on what you saved with &lt;code&gt;SAVE C:&lt;/code&gt; so it wasn't just syntactic sugar. What was its purpose and difference &quot;behind the scenes&quot;? Saving typing &quot;C:&quot; seems pointless?&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2016-04-25T08:31:47.250" Title="What was the difference between CLOAD and LOAD &quot;C:&quot;?" Tags="&lt;atari&gt;&lt;atari-basic&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="163" PostTypeId="2" ParentId="151" CreationDate="2016-04-21T09:00:51.097" Score="13" Body="&lt;p&gt;Many OCS/ECS Amiga games use more than 32 colours. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some cases of games using Extra Half Bright (EHB) mode like Universe (see this thread for more info on that game: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/44/how-to-obtain-256-arbitrary-colors-with-limitation-of-64-per-line-in-amiga-ecs&quot;&gt;How to obtain 256 arbitrary colors with limitation of 64 per line in Amiga (ECS)?&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the most usual way of achieving more than 32 colours in a frame is using Copper tricks. The Copper is a coprocessor which runs in sync with the video beam, and can modify some of the custom chips registers. The programs executed by the Copper are made of 3 different instructions (wait, move, skip). Such programs are called copperlists. You can easily build a copperlist which waits for certain video beam positions and changes some colour palette registers. There are lots of well known games using this technique: Pang, Lionheart, Agony, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, you can animate graphic objects (BOBs or sprites) using any of this techniques.&lt;/p&gt;&#xA;" OwnerUserId="204" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-04-21T09:00:51.097" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="164" PostTypeId="2" ParentId="149" CreationDate="2016-04-21T09:04:32.953" Score="3" Body="&lt;p&gt;I guess (is that allowed as an answer?) that these are bus terminating resistors. High speed signals are usually passed along impedance matched transmission lines, the termination resistor mostly removes any reflections from an unused port.&lt;/p&gt;&#xA;" OwnerUserId="46" LastActivityDate="2016-04-21T09:04:32.953" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="165" PostTypeId="2" ParentId="160" CreationDate="2016-04-21T09:07:30.157" Score="15" Body="&lt;p&gt;Since vacuum tube computers are considered fully electronic, and electromechanical computers are evolutionarily a step backward from that, I'll remove them from consideration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This requires a computer based on the transistor, which was invented in 1947, and still forms the core of every modern CPU, though today they number in the billions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first computer to use transistors at all was an experimental &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_computers#Transistor_Computer&quot;&gt;Transistor Computer&lt;/a&gt; built at the University of Manchester in 1953, with a second version built in 1955. But this computer still had a few tubes left in it. This line of computers never got a proper name.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first fully transistorized computer, then, was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Harwell_CADET&quot;&gt;Harwell CADET&lt;/a&gt;, built by the UK's Atomic Energy Research Establishment; it first ran in 1955 but was only in use for four years before being put out to pasture. It ran numerical analysis jobs for nuclear physicists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At about the same time in 1955 IBM announced &lt;a href=&quot;http://www-03.ibm.com/ibm/history/exhibits/vintage/vintage_4506VV2214.html&quot;&gt;the 608 computer&lt;/a&gt;, but its claim to being the first is dubious as it does not appear to have actually been on the market until 1957.&lt;/p&gt;&#xA;" OwnerUserId="6" LastActivityDate="2016-04-21T09:07:30.157" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="166" PostTypeId="1" AcceptedAnswerId="192" CreationDate="2016-04-21T12:48:53.067" Score="8" ViewCount="417" Body="&lt;p&gt;I used to have an old Toshiba T2000SX laptop, but some day its HDD died. I found a newer laptop HDD that fit in and I could format it to appear to have a small enough capacity to get detected by the laptop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I could not boot from this disk, although reading and writing to it worked like a charm. Installing DOS and even Win 3.11 went well, I just had to always boot from a boot floppy disk that then loaded the system on the HDD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I tried to boot directly from the HDD, the screen filled with rows of &lt;code&gt;02&lt;/code&gt; sequences that then started to continuously move to the left (if I remember correctly) as soon as the screen was full. No reactions any more, need to hard-reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I guessed Toshiba has built some kind of protection into the chipset that prevents booting from non-Toshiba HDDs. I continued occasionally using it by booting from a floppy, but when the floppy drive later died as well, I abandoned the entire laptop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Out of pure curiosity, was this &quot;error &lt;code&gt;02&lt;/code&gt;&quot; really a protection against foreign HDDs or would it have had a different cause? Were such protection mechanisms common back in this laptop's time?&lt;/p&gt;&#xA;" OwnerUserId="128" LastActivityDate="2017-03-20T21:53:45.417" Title="Toshiba T2000SX can't boot from non-original HDD - &quot;02&quot; all over the screen" Tags="&lt;hard-disk&gt;&lt;boot&gt;&lt;toshiba&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="167" PostTypeId="1" CreationDate="2016-04-21T12:53:43.313" Score="11" ViewCount="1150" Body="&lt;p&gt;What is the most effective way to clean cases, keyboards, old calculators, etc. without harming or discoloring plastic finishes or printing/paint?&lt;/p&gt;&#xA;" OwnerUserId="168" LastEditorUserId="47" LastEditDate="2016-04-21T13:08:08.517" LastActivityDate="2016-04-21T16:30:10.760" Title="How should I clean the plastic exterior of my computers and parts?" Tags="&lt;maintenance&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="168" PostTypeId="1" AcceptedAnswerId="176" CreationDate="2016-04-21T12:58:14.197" Score="47" ViewCount="3563" Body="&lt;p&gt;&lt;em&gt;Why&lt;/em&gt; do plastic cases of old computers turn yellow? Is this yellowing a problem that has been solved in modern plastics?&lt;/p&gt;&#xA;" OwnerUserId="168" LastEditorUserId="278" LastEditDate="2016-05-22T19:35:10.030" LastActivityDate="2016-05-22T19:35:10.030" Title="Why do older computer cases turn yellow?" Tags="&lt;maintenance&gt;&lt;plastic&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="169" PostTypeId="2" ParentId="167" CreationDate="2016-04-21T13:10:51.250" Score="1" Body="&lt;p&gt;Use &lt;a href=&quot;https://en.wikipedia.org/wiki/Denatured_alcohol&quot; rel=&quot;nofollow&quot;&gt;methylated spirit&lt;/a&gt; (alcohol) and a soft cloth. The spirit evaporates quickly and doesn't leave stains.&lt;/p&gt;&#xA;" OwnerUserId="138" LastActivityDate="2016-04-21T13:10:51.250" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="170" PostTypeId="2" ParentId="167" CreationDate="2016-04-21T13:18:17.193" Score="3" Body="&lt;p&gt;Water and a soft cloth goes a long way. Rubbing alcohol is useful for more stubborn stains, and you can't beat a tooth brush or similar to get into cracks and seams.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With hardware that's particularly grubby and where the electronics can be completely removed I've washed the parts in the kitchen sink using dish washing liquid. It's never caused any problems to the plastics I've cleaned this way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the dirt turns out to be discolouration (yellowing) then you &lt;em&gt;may&lt;/em&gt; want to look into retr0bright, but it seems that the jury is still out with respect to it's long term effects and some people are happy with the 'aged' look.&lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2016-04-21T13:18:17.193" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="171" PostTypeId="1" AcceptedAnswerId="175" CreationDate="2016-04-21T13:34:50.207" Score="14" ViewCount="1661" Body="&lt;p&gt;I recently got a Apple &lt;a href=&quot;https://en.wikipedia.org/wiki/Power_Macintosh_6100&quot; rel=&quot;nofollow noreferrer&quot;&gt;Power Macintosh 6100&lt;/a&gt; for free. It powers up and seems to work, so I want to try it out and see what it's like. Unfortunately, the important ports and connectors are &quot;non-standard&quot;, which means I can't directly hook up the things I have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XUuy5.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XUuy5.jpg&quot; alt=&quot;Rear of PowerMac&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to connect a standard monitor (With VGA, S-Video, or something else which have), as well as a keyboard and mouse (I have some PS/2 keyboards an mice lying around). There seem to be adapters for &lt;a href=&quot;https://en.wikipedia.org/wiki/HDI-45_connector&quot; rel=&quot;nofollow noreferrer&quot;&gt;HDI-45&lt;/a&gt; to VGA, but I want to do this without buying any additional parts (i.e. free). I'm comfortable with soldering and making things, as well as electronics in general.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Is there a way to connect a more &quot;Standard&quot; display, keyboard, and mouse to this computer? and, if so, how do I do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anything else I should be aware of?&lt;/p&gt;&#xA;" OwnerUserId="152" LastEditorUserId="357" LastEditDate="2017-12-15T12:49:30.107" LastActivityDate="2017-12-15T12:49:30.107" Title="How do I connect a modern display, keyboard, and mouse to a Power Macintosh 6100?" Tags="&lt;hardware&gt;&lt;display&gt;&lt;new-hardware-adaptation&gt;&lt;power-macintosh&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="172" PostTypeId="1" AcceptedAnswerId="178" CreationDate="2016-04-21T14:13:08.660" Score="13" ViewCount="1017" Body="&lt;p&gt;The Color Computer has an expansion port. What is the pin out? What are the kinds of devices that can be used with it? How was the Multi-Pak involved?&lt;/p&gt;&#xA;" OwnerUserId="29" LastActivityDate="2019-01-08T10:48:11.353" Title="Expansion port on the Color Computer" Tags="&lt;color-computer&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="173" PostTypeId="2" ParentId="168" CreationDate="2016-04-21T14:14:27.963" Score="14" Body="&lt;p&gt;Assuming the yellowing isn't caused by nicotine, if you're a smoker, usually it's because of UV light interacting with flame retardants (usually bromine) in the plastic of the device's case. UV exposure can be from sun or fluorescent lights - the yellowing plastic isn't picky about the UV source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not aware of it being solved in modern plastics.&lt;/p&gt;&#xA;" OwnerUserId="173" LastActivityDate="2016-04-21T14:14:27.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="174" PostTypeId="2" ParentId="25" CreationDate="2016-04-21T14:29:50.037" Score="22" Body="&lt;p&gt;The basic improvements over the 6809: - 2 more 8bit accumulators; additional 8 &amp;amp; 16 bit registers - native and 6809 emulation modes - fewer execution cycles in native mode - improved instruction set - error trapping (illegal instruction &amp;amp; divide by zero) - roughly 10% speed increase in emulation mode/40% in native mode (both application dependant) - variants include 3Mhz parts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much more detailed information can be found in a memo written by Hirotsugu Kakugawa &lt;a href=&quot;http://fms.komkon.org/comp/CPUs/6309.txt&quot; rel=&quot;noreferrer&quot;&gt;link&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below are excepts from the link (this is NOT my writing, I'm reposting existing information):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The CPU 6309 by HITACHI has secret features which is not written in&#xA;  its manual.  The purpose of this memo is to introduce them.   The&#xA;  features was originally reported in a magazine,  Oh!FM (1988 Apr.),&#xA;  which was written in Japanese.  I did not tried all of the features&#xA;  reported in the article, but I report the features as far as I know. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;HITACHI says in the manual of 6309 that 6309 is compatible with 6809,&#xA;  but some OS-9 hackers found that it has secret features.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;It has following features:&#xA;   1. More registers (additional two 8 bit accumulators, 8 bit&#xA;       register, and a 16 bit register), &#xA;   2. Two modes (6809 emulation mode and native mode),&#xA;   3. Reduced execution cycles in native mode,&#xA;   4. More instructions (16 bit x 16 bit multiplication, 32 bit / 16 bit&#xA;      division, inter-registers operation, block transfer, bit&#xA;      manipulating operation which is compatible with 6801 has, etc)&#xA;   5. Error trap by illegal instruction, zero division.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The 6309 has some additional registers that 6809 does not.  &lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;&lt;p&gt;The E register, the F register &#xA;   These are 8 bit accumulators.  Like the D register is a pair of &#xA;   the A register and the B register, these two registers can be&#xA;   used as a 16 bit accumulator. The pair of the E and the F&#xA;   registers is called the W register.&#xA;   In addition to that, pair of two 16 bit registers, the D register&#xA;   and the W register, can be used as a 32 bit accumulator called the&#xA;   Q register.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;The V register&#xA;   This a 16 bit register can be used only by TFR, inter-register&#xA;   operation, etc.  But even if the chip is reseted, contents of&#xA;   this register does not change.  Some people  may use this&#xA;   register to keep constant value (V for value).&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;The MD register&#xA;   This is a 8 bit register to keep the mode and status of the chip.&#xA;   The meaning of each bit is as follow.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Read value&#xA;      bit 7  ---  1 is set if zero division happen.&#xA;      bit 6  ---  1 is set if illegal instruction is fetched.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Write value &#xA;      bit 1  ---  The mode for FIRQ interrupt.&#xA;                  0 -&gt; the the action for FIRQ is the same as that&#xA;                       of 6809.&#xA;                  1 -&gt; the the action for FIRQ is the same as IRQ.&#xA;      bit 0  ---  The execution mode of 6309.&#xA;                  0 -&gt; the emulation mode.&#xA;                  1 -&gt; the native mode.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;(When the chip is reseted, all bits are 0.) &lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;  &#xA;  &lt;p&gt;The 6309 has two modes, emulation mode and native mode, as described&#xA;  in the previous section.  When the chip is reseted, the initial mode&#xA;  of 6309 is the emulation mode. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;When the 6309 is in the emulation mode, the chip emulates the action&#xA;  of 6809.  But we can use extended registers and extended operations in&#xA;  this mode.  The 6309 executes instructions in the same cycles as 6809&#xA;  does.     When the 6309 is in the native mode, it executes&#xA;  instructions in less cycles. And when the chip is interrupted (IRQ,&#xA;  for example),  it pushes extended registers (PC, U, Y, X, DP, W, D,&#xA;  CC, in this order).  If you want to use the 6309, you must rewrite&#xA;  interrupt handling routine (for example, the entry of system call of&#xA;  OS9).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;NEW INSTRUCTIONS&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The Register Addressing Mode&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;To specify registers in TFR and EXG, the 6809 uses bit pattern of 4&#xA;  bits.  New registers of the 6309 are specified by bit patterns in TFR&#xA;  and EXG operations. In addition to that, the bit pattern is also used&#xA;  in instructions of inter-register operations.  We call this bit&#xA;  pattern used to specify register &quot;register addressing mode&quot;.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Bit patterns for new registres are as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;W  -&amp;gt;  0110,&#xA;V  -&amp;gt;  0111,&#xA;E  -&amp;gt;  1110,&#xA;F  -&amp;gt;  1111.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;NOTE: even if the 6309 is in a emulation mode, the action for TFR of&#xA;  6309  is different from that of the 6809 if new register is specified&#xA;  in operand.  Some hackers found this fact and they guessed that the&#xA;  6309 has secret registers. At last, they found many features.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Inter-Register Operations Operations of 6809 are operations between&#xA;  register and immediate value or between register and memory. &#xA;  Therefore, we had to store value of  register on memory if opetation&#xA;  between two registers is necessary.   But the 6309 has inter-register&#xA;  operation. Following operations are  provided:&#xA;      ADDR r0,r1  (ADD of two registers),&#xA;      ADCR r0,r1  (ADC of two registers),&#xA;      SUBR r0,r1  (SUB of two registers),&#xA;      SBCR r0,r1  (SBC of two registers),&#xA;      ANDR r0,r1  (AND of two registers),&#xA;      ORR  r0,r1  (OR of two registers),&#xA;      EORR r0,r1  (EOR of two registers),&#xA;      CMPR r0,r1  (CMP of two registers). The register addressing mode is used to specify two registers. (I do not remember exactrlly but the&#xA;  result is stored in r0, the register of the first operand. Please try&#xA;  and find the behavior of these instructions.)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Block Transfer Block transfer instructions are provided such as Z80&#xA;  has. The TFM instruction requires source address and destination&#xA;  address  and block size as its argument.  One or two 16 bit registers&#xA;  (X/Y/U/S) are used to specify source and destination addresses. Block&#xA;  size to be  transfered is specified by the W register.  Four style is&#xA;  provided:&#xA;      TFR r0+,r1+  (transfered in address is increasing order),&#xA;      TFR r0-,r1-  (transfered in address is decreasing order),&#xA;      TFR r0+,r1   (poured into the same address, I/O port for instance),&#xA;      TFR r0,r1+   (read from the same address, I/O port for instance). I tried this instructions but I do not remember exactly. Operand&#xA;  registers are pointers of source/destination addresses (,maybe).&#xA;  Please try and find the behavior of these instructions.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Multiplication And Division The 6309 has MULD instruction which&#xA;  performs a 16bit x 16bit multipli- cation. We can use various&#xA;  addressing modes (immediate, direct, indexed, extend)  The result is&#xA;  stored in the Q register.    Division instructions are also provided. &#xA;  The 6309 has two division instructions: 16bit / 8bit, 32bit / 16bit&#xA;  divisions.  Various addressing modes (immediate, direct, indexed,&#xA;  extend) can be  used.   (Note:I forget where its result is stored.  I&#xA;  tried these instructions.  I remember that modulo is also computed.&#xA;  The quotient and the modulo  are stored D and W resp., maybe. I'm not&#xA;  sure, sorry.)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Bit Manipulation / Bit Transfer The 6309 provides AIM, OIM, EIM, TIM&#xA;  instructions which are compatible  with instructions of the Hitachi&#xA;  6301 CPU.  Read the manual of the 6301 to understand thses&#xA;  instructions.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Instructions called BAND, BOR, BEOR, BIAND, BIOR, BIEOR, LDBT, STBT&#xA;  are provided.  Behavior of thses instructions is that a logical&#xA;  operation is performed for n-th bit of a data in a memory (only direct&#xA;  mode is allowed) and m-th bit of a register, then the result is stored&#xA;  in the register. The format of the object is :    $11, x, (post byte),&#xA;  (operand). The say that the post byte takes strange format.  I do not&#xA;  understand these instructions. Sorry, please try.  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;To change modes ofthe 6309, we have to set the 0th bit of the MD&#xA;  register.  To do this, the LDMD instruction is provided:&#xA;      LDMD #n     (where #n is a immediate n bit data) When trap is caused, it is necessary to examine the reason of the  trap. The BITMD&#xA;  instruction can be used for this purpose:&#xA;      BITMD #n    (where #n is a immediate n bit data) The contents of the MD register and #n is ANDed, and changes the CC  register (,maybe,&#xA;  I do not remember exactly). Once this instruction is executed, the 6th&#xA;  and the 7th bit of the  MD register is CLEARED.  Therefore, we can't&#xA;  examine the MD register.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Pushing and poping the W registers on/from stack:&#xA;      PSHSW     (Push the W register on the system stack),&#xA;      PULSW     (Pop the W register from the system stack),&#xA;      PSHUW     (Push the W register on the user stack),&#xA;      PULUW     (Pop the W register from the user stack).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="173" LastEditorUserId="278" LastEditDate="2017-04-01T18:10:40.127" LastActivityDate="2017-04-01T18:10:40.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="175" PostTypeId="2" ParentId="171" CreationDate="2016-04-21T14:34:39.903" Score="12" Body="&lt;p&gt;Maybe the most difficult task is to find a plug for the Apple AudioVision connector. Here is its pinout, taken from &lt;a href=&quot;http://pinouts.ru/Video/audiovision_pinout.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://pinouts.ru/Video/audiovision_pinout.shtml&lt;/a&gt; , in case you find a suitable connector and want to do the wiring by yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CVp8z.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CVp8z.gif&quot; alt=&quot;Pinout diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1   Analog audio ground&#xA;2   Audio input shield&#xA;3   Left channel audio input&#xA;4   Right channel audio input&#xA;5   Left channel audio output&#xA;6   Right channel audio output&#xA;7   Reserved&#xA;8   Monitor ID sense line 1&#xA;9   Monitor ID sense line 2&#xA;10  Green ground (shield)&#xA;11  Green video output (75 )&#xA;12  Video input power ground&#xA;13  Power for camera +5 V&#xA;14  Reserved&#xA;15  Reserved&#xA;16  Reserved&#xA;17  Reserved&#xA;18  Monitor ID sense line 3&#xA;19  S-video input shield&#xA;20  S-video input luminance (Y)&#xA;21  S-video input chroma (C)&#xA;22  Reserved&#xA;24  Reserved&#xA;25  Reserved&#xA;26  Red ground (shield)&#xA;27  Red video output (75 )&#xA;28  I2C data signal&#xA;29  I2C clock signal&#xA;30  Reserved&#xA;31  Monitor ID&#xA;32  Monitor ID&#xA;33  Vertical sync signal&#xA;34  Composite sync signal&#xA;35  ADB power +5 V&#xA;36  ADB ground&#xA;37  ADB data&#xA;38  Keyboard switch&#xA;39  Reserved&#xA;40  Reserved&#xA;41  Monitor ID&#xA;42  Horizontal sync signal&#xA;43  Video sync ground&#xA;44  Blue ground (shield)&#xA;45  Blue video output (75 )&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There seems to be some adapters that can adapt the Audiovision connector (aka HDI45) to DB15 standard Apple VGA connector, like this (taken from an eBay auction):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mfjeU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mfjeU.jpg&quot; alt=&quot;HDI45 to DB15 adaptor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Jvqda.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Jvqda.jpg&quot; alt=&quot;HDI45 Plug&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/i2rRM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/i2rRM.jpg&quot; alt=&quot;DB15 Socket&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to do it yourself, just take signals from pins 27,26 (red output and red grund), 11,10 (green output and ground), 45,44 (blue output and ground), 42 (HSYNC), 33 (VSYNC), and 43 (SYNC ground) and wire them accordingly to a VGA DE-D15 connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For keyboard and mouse support, you will need some sort of adapter, as the connectors, protocols and signal levels are not the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to visit kdblabel ( www.kdblabel.org ) as they have tons of info about different protocol and signalling conventions. Hopefully, ADB is among them and you will be able to use a PIC or something similar to perform the conversion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For mouse support, the people at GeeThree ( &lt;a href=&quot;http://www.geethree.com/adb/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.geethree.com/adb/index.html&lt;/a&gt; ) have a PS/2 to ADB mouse adapter&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7M1WU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7M1WU.jpg&quot; alt=&quot;PS/2 to ADB adaptor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="276" LastEditDate="2017-12-14T10:20:16.767" LastActivityDate="2017-12-14T10:20:16.767" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="176" PostTypeId="2" ParentId="168" CreationDate="2016-04-21T14:46:37.943" Score="37" Body="&lt;p&gt;In this &lt;a href=&quot;http://www.howtogeek.com/196687/ask-htg-why-do-old-computers-and-game-consoles-turn-yellow/&quot; rel=&quot;noreferrer&quot;&gt;article&lt;/a&gt;, it states:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In nearly every case it’s flame retardants. Although plastics can yellow in the absence of flame retardant chemicals, the chemicals accelerate the process when exposed to heat, oxygen, and ultraviolet rays.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The process of the plastic reacting with the heat, oxygen, and UV rays makes the plastic yellow. Flame retardants (very common in old computers) will only speed up the yellowing process. It could be any UV light, not just the ones from the Sun. Heat made from the device itself plus some poor choices can also make your plastic a nice yellow:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The plastics used in early Super Nintendo units, however, had a terrible flame retardant mixture that yellowed as a result of the oxidation caused by the heat of the machine itself (let alone any heat in the environment).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Using new formulas, the process can be slowed down, but not necessarily stopped completely. You can always try to remove the stains though, chemically or physically:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Some people use ultra fine sandpaper or melamine sponges to sand away the very surface of the plastic and remove the yellowing. This works for very light yellowing and plastic types where the yellowing hasn’t penetrated very deeply into the plastic. Unfortunately it only works by removing the actual yellowed plastic...&lt;/p&gt;&#xA;&lt;p&gt;The other method, chemical removal, relies on using bleaches to attack the yellowed molecules in the plastic and restore the color. This method is best for very old and very yellowed plastic as it gets right into the structure of the plastic and does a very thorough job.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-04-21T14:46:37.943" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="177" PostTypeId="2" ParentId="171" CreationDate="2016-04-21T14:48:52.243" Score="7" Body="&lt;p&gt;ADB keyboards and mice are readily available on &lt;a href=&quot;http://www.ebay.com/sch/i.html?_sacat=0&amp;amp;_nkw=macintosh+keyboard&amp;amp;_frs=1&quot; rel=&quot;noreferrer&quot;&gt;eBay&lt;/a&gt; for as little as $10. Apple used ADB from 1987-1999 for Macs and the Apple IIgs so there are a lot of devices around. The monitor adapter from Apple AudioVision to VGA is harder to get and I defer to @mcleod_ideafix.&lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2016-04-21T14:48:52.243" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="178" PostTypeId="2" ParentId="172" CreationDate="2016-04-21T14:54:42.000" Score="14" Body="&lt;p&gt;There are two variations of the cartridge port on the Color Computer lines. The attached image shows the pin out of the CoCo 2 &amp;amp; 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cihZ6.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cihZ6.png&quot; alt=&quot;CoCo 2/3 cartridge port&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CoCo 1 cartridge port is slightly different, in that it offers -12 volts DC on pin 1 and +12 volts DC on pin 2 (from the &lt;code&gt;Color Computer Technical Reference Manual (Tandy).pdf&lt;/code&gt; file available &lt;a href=&quot;http://www.colorcomputerarchive.com/coco/Documents/Manuals/Hardware/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7LwvD.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7LwvD.png&quot; alt=&quot;CoCo 1 cartridge port&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CoCo 2 &amp;amp; 3 do not produce 12 volts DC. Due to this, several devices listed below, i.e.: X-Pad, cannot be used on a CoCo 2 or 3 without a Multipak Interface, which does produce the 12 volts DC required. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Multipak Interface (MPI) was a device used for bus expansion on the Color Computers. It offered four slots for cartridge devices; either hardware or software selectable. Tandy made three basic models of the MPI, while other manufactures made their own versions as well. Below is a partial list:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A-Bus (Alpha Products)&lt;/li&gt;&#xA;&lt;li&gt;BT-1000/2000 (Basic Technology)&lt;/li&gt;&#xA;&lt;li&gt;CC-Bus (PBJ Inc)&lt;/li&gt;&#xA;&lt;li&gt;CX-P1 Color Computer Expansion Interface (General Automation)    cocoman3&lt;/li&gt;&#xA;&lt;li&gt;Slotpak III (Chris Hawks/Howard Medical)&lt;/li&gt;&#xA;&lt;li&gt;XPort (Orion Technologies)&lt;/li&gt;&#xA;&lt;li&gt;Computize Y-Box&lt;/li&gt;&#xA;&lt;li&gt;Spectrum Switcher&lt;/li&gt;&#xA;&lt;li&gt;Owl-Ware Super I/O&lt;/li&gt;&#xA;&lt;li&gt;Tandy Multipak (26-3024)&lt;/li&gt;&#xA;&lt;li&gt;Tandy Multipak (26-3124)&lt;/li&gt;&#xA;&lt;li&gt;Tandy Multipak (26-3214A)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Only the 26-3124A was ready to be used with a CoCo 3 due to the change in the CoCo 3's addressing. The other two models had to have a fairly simple mod done)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Solution (Frank Hogg Labs)&lt;/li&gt;&#xA;&lt;li&gt;USER-80C (J-NOR Industries)&lt;/li&gt;&#xA;&lt;li&gt;Y-Cable&lt;/li&gt;&#xA;&lt;li&gt;XPANDR1 CoCo Expander Card (Robotic Microsystems)&lt;/li&gt;&#xA;&lt;li&gt;XPANDR2 CoCo Expander Card (Robotic Microsystems)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Other type of devices are able to be used as well - MIDI devices; graphics tablets such as Radio Shack X-Pad; numerous types of disk storage, both floppy and hard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a mostly complete list of the devices and pictures of most of them, as well as other hardware devices for the Color Computer lines, this &lt;a href=&quot;http://tandycoco.com/hardware&quot; rel=&quot;noreferrer&quot;&gt;link&lt;/a&gt; provides much more information.&lt;/p&gt;&#xA;" OwnerUserId="173" LastEditorDisplayName="user6464" LastEditDate="2018-10-12T11:20:17.107" LastActivityDate="2018-10-12T11:20:17.107" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="180" PostTypeId="5" CreationDate="2016-04-21T15:14:22.083" Score="0" Body="&lt;p&gt;For question and discussion of Computing History.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;//retrocomputing.meta.stackexchange.com/q/16/278&quot; title=&quot;Is computing history inherently on-topic?&quot;&gt;this meta discussion&lt;/a&gt; for guidance on where to use this tag.&lt;/p&gt;&#xA;" OwnerUserId="837" LastEditorUserId="837" LastEditDate="2018-11-22T16:28:25.460" LastActivityDate="2018-11-22T16:28:25.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="181" PostTypeId="4" CreationDate="2016-04-21T15:14:22.083" Score="0" Body="History of computers, digital electronics, hardware manufacturers and software developers." OwnerUserId="37" LastEditorUserId="15334" LastEditDate="2021-02-02T17:50:56.420" LastActivityDate="2021-02-02T17:50:56.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="182" PostTypeId="5" CreationDate="2016-04-21T15:15:00.007" Score="0" Body="&lt;p&gt;Overclocking is the configuration of a computer hardware component to operate at a faster rate that was certified by the original manufacturer.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T15:22:28.137" LastActivityDate="2016-08-02T15:22:28.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="183" PostTypeId="4" CreationDate="2016-04-21T15:15:00.007" Score="0" Body="for questions on overclocking retrocomputing hardware components" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T15:23:29.437" LastActivityDate="2016-08-02T15:23:29.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="184" PostTypeId="2" ParentId="8" CreationDate="2016-04-21T15:38:04.390" Score="5" Body="&lt;p&gt;I've seen a lot of 9V power supplies available, but the crucial thing is that it needs to be centre negative. Sometimes you see units specifically mentioning the Spectrum on ebay, but a useful tip is that 9V centre negative is often still used to drive audio equipment, for example electric guitar effects. I would probably search for one of those power supplies intended to drive a number of electric guitar effects.&lt;/p&gt;&#xA;" OwnerUserId="26" LastActivityDate="2016-04-21T15:38:04.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="185" PostTypeId="1" AcceptedAnswerId="322" CreationDate="2016-04-21T15:44:08.597" Score="11" ViewCount="414" Body="&lt;p&gt;Coming from the TRS-80/TandyColor Computer lines, I had always heard of how slow some other systems disk storage were, regarding data transfer rates, etc... The CoCo lines disk storage was pretty fast - I never had any complaints other than the hurdles we had to jump thru to access double sides drives (either use flippies or modify the DOS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've got an Atari 800 system now with a 1050 disk drive, and am waiting to find some disk software to test the system (the 800 works great). Can some explain the reasons why the data transfer rates were so slow? I have heard that in many cases, the cassette was faster - is this true? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also heard and read about mods to the Atari drives to address this issue. Are any still available today? Are the SIO adapters available today prone to the same issues?&lt;/p&gt;&#xA;" OwnerUserId="173" LastEditorUserId="173" LastEditDate="2016-04-26T17:05:42.980" LastActivityDate="2016-04-27T13:09:18.383" Title="Differences in disk storage between systems" Tags="&lt;atari&gt;&lt;apple-ii&gt;&lt;commodore-64&gt;&lt;color-computer&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="186" PostTypeId="5" CreationDate="2016-04-21T15:45:21.357" Score="0" Body="&lt;p&gt;Retro hardware often uses unique or antiquated connectors between devices.  This can include cabling, like the Apple Desktop Bus (ADB), or edge connectors, like the peripheral slots in the Apple II.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-23T16:40:19.963" LastActivityDate="2016-04-23T16:40:19.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="187" PostTypeId="4" CreationDate="2016-04-21T15:45:21.357" Score="0" Body="Questions about connectors, particularly those used to connect computer peripherals." OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-23T16:37:36.730" LastActivityDate="2016-04-23T16:37:36.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="188" PostTypeId="1" AcceptedAnswerId="189" CreationDate="2016-04-21T15:51:46.097" Score="7" ViewCount="637" Body="&lt;p&gt;The Hitachi 6309E CPU is a direct replacement for the 6809E in the CoCo. What are the options to upgrade to this processor?&lt;/p&gt;&#xA;" OwnerUserId="173" LastActivityDate="2018-07-29T00:12:29.960" Title="What are the options for installing a 6309 in a TRS-80/Tandy Color Computer" Tags="&lt;color-computer&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="189" PostTypeId="2" ParentId="188" CreationDate="2016-04-21T16:00:23.223" Score="10" Body="&lt;p&gt;Your first option is to remove the 6809 from the CoCo. Some CoCo 1 and 2 models, all you have to do is remove the CPU from a socket and put a new one in. Other CoCo 1 and 2 models, and all CoCo 3 models have the CPU soldered directly to the PCB. You can use either destructive or non-destructive means to remove the existing CPU; that choice is up to you.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Destructive means clipping the legs of the CPU, removing the chip, then desoldering the legs and removing them&lt;/li&gt;&#xA;&lt;li&gt;Non-destructive means using a desoldering tool with a vacuum attachment, or other means, to remove the solder from the legs of the chip and PC board Sometimes this turns destructive, YMMV.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Once the chip is out, you have three options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Option one: Solder the new CPU directly in place in the CoCo&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Option two: Solder a socket in place in the CoCo&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Option 3: You can stack a 6309 on top of your computer’s existing 6809. Here’s how…&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Cut pin 39 (TSC) of the 6809, leaving a small piece sticking out of the&#xA;processor so you can solder to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a 40 pin IC socket. Cut off pins 5, 6, 33, 36, and 38. Bend out pin 39&#xA;so you can solder to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stack the 40-pin IC socket on top of the 6809. Solder all of the&#xA;corresponding pins together. DO NOT solder the pins 39 together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have two additional options:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Solder a wire from 6809 pin 39 to +5V, and another wire from socket pin 39&#xA;to ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Solder a 4.7K resistor between each pin 39 and +5V. Then take a SPDT&#xA;switch, connect the common contact to ground, and connect each end to a&#xA;separate pin 39.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In either case, finish up by plugging the 6309 into the socket. If you picked&#xA;option 1, you now have a 6309 system. If you picked option 2, your system is&#xA;now switchable between the 6809 and the 6309 (before power-up – not while&#xA;running!).&lt;/p&gt;&#xA;" OwnerUserId="173" LastActivityDate="2016-04-21T16:00:23.223" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="190" PostTypeId="2" ParentId="188" CreationDate="2016-04-21T16:03:51.070" Score="3" Body="&lt;p&gt;If your lucky enough to have a socketed Microprocessor from the factory, the process is removing the old chip and installing the new chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You do have to make sure your new 6309 is the E version, E for external clock. You also have to make sure your new part can handle the 1.8 mHz clock speed for a CoCo 3, or 0.89 mHz clock speed of the CoCo 1 and 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your CoCo does not already have a socket, you must carefully de-solder the microprocessor and install one.&lt;/p&gt;&#xA;" OwnerUserId="29" LastActivityDate="2016-04-21T16:03:51.070" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="191" PostTypeId="2" ParentId="167" CreationDate="2016-04-21T16:30:10.760" Score="4" Body="&lt;p&gt;Water. &lt;strong&gt;Only&lt;/strong&gt; water and &lt;em&gt;maybe&lt;/em&gt; a little mild soap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot recommend rubbing alcohol for plastic parts, as it can whiten some plastics and it can remove paint off other parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For keyboards, use contact cleaner as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7/12&quot;&gt;discussed in my answer for how to  clean system cartridges&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-04-21T16:30:10.760" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="192" PostTypeId="2" ParentId="166" CreationDate="2016-04-21T16:47:08.310" Score="9" Body="&lt;p&gt;Error 0x02 is &quot;Bad Address Mark&quot; (Don't ask me what this &lt;em&gt;actually&lt;/em&gt; means!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think Toshiba specifically forbid third-party drives, but it probably expects very specific IDE drives of specific geometry. According to the internet, there are three specific Conner drives this model could ship with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume you accessed the SETUP and made sure that the hard disk capacity was set properly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This sounds like the BIOS can't find the location to start booting because the drive geometry is unexpected.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastActivityDate="2016-04-21T16:47:08.310" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="193" PostTypeId="2" ParentId="168" CreationDate="2016-04-21T17:28:04.520" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Degradation may be initiated or accelerated by &lt;a href=&quot;http://web.archive.org/web/20150114095242/http://www.fishercontainer.com/yellowing-clear-plastic-film.html&quot; rel=&quot;noreferrer&quot;&gt;numerous factors&lt;/a&gt;&#xA;  including ultra-violet light, visible light, ozone, pollutants,&#xA;  manufacturing additives, oxygen, heat, or by carton storage without&#xA;  protective liners.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As mentioned in other answers, one of those &quot;manufacturing additives&quot; is flame retardants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, make sure the storage room is well ventilated, especially if it's in a &lt;a href=&quot;https://www.reddit.com/r/retrobattlestations/comments/4b42tf/the_worst_yellowing_ive_ever_seen_in_my_life_is/d15zavg&quot; rel=&quot;noreferrer&quot;&gt;basement&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-04-21T17:28:04.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="194" PostTypeId="1" AcceptedAnswerId="200" CreationDate="2016-04-21T17:37:32.423" Score="44" ViewCount="9032" Body="&lt;p&gt;A bit of a trivia question: What is the oldest hardware capable of running a modern Linux-based operating system, including user-space? (Not necessarily GNU userspace, but running a standard GNU/Linux distro would be most interesting.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By this I mean being capable of running a fairly recent Linux kernel, in some form. I've found out that the &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_1200&quot; rel=&quot;noreferrer&quot;&gt;Amiga 1200&lt;/a&gt;, launched in 1992 can run &lt;a href=&quot;https://www.youtube.com/watch?v=9DDoclvOAcA&quot; rel=&quot;noreferrer&quot;&gt;Debian (video)&lt;/a&gt;, but are there any older computers capable of this ?&lt;/p&gt;&#xA;" OwnerUserId="152" LastEditorUserId="3296" LastEditDate="2019-06-02T09:10:57.260" LastActivityDate="2019-06-02T09:10:57.260" Title="What is the oldest computer capable of running a modern version of GNU/Linux?" Tags="&lt;history&gt;&lt;linux&gt;" AnswerCount="11" CommentCount="14" FavoriteCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="195" PostTypeId="1" AcceptedAnswerId="199" CreationDate="2016-04-21T17:48:16.213" Score="22" ViewCount="5044" Body="&lt;p&gt;I was chatting with our neighbor and after some long talking, I found out that he has a Commodore 64. I'd love to test it, however I'm not sure how to power it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I power a C64?&lt;/p&gt;&#xA;" OwnerUserId="65" LastEditorUserId="6794" LastEditDate="2017-08-27T16:02:44.493" LastActivityDate="2019-02-04T17:08:32.550" Title="How can I power a C64?" Tags="&lt;commodore-64&gt;&lt;power&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="196" PostTypeId="2" ParentId="151" CreationDate="2016-04-21T18:04:45.100" Score="25" Body="&lt;h2&gt;EHB&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;For example, a game that uses EHB (Extra HalfBrite) mode during the game action (i. e. ingame) is &lt;em&gt;Pinball Dreams&lt;/em&gt;. In my example run of the &lt;em&gt;Beat Box&lt;/em&gt; table I can find the following in the copper list:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$00D6EA WAIT $4211FFFE&#xA;$00D6EE MOVE #$6200,BPLCON0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I. e. it waits for raster line $42 (66) and uses BPLCON0 to set the number of bitplanes to 6 without the HAM bit set, which means EHB mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Cannon Fodder&lt;/em&gt; uses EHB for some of its still pictures. I'm not sure if it uses it ingame, but I consider it unlikely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A newer game, &lt;em&gt;Nemac IV&lt;/em&gt;, presents you with a screen mode selection at the beginning, offering EHB mode as an option. It can then render its ingame 3D graphics to an EHB mode display. However, it requires a machine more powerful than a stock Amiga 500.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;HAM&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The way HAM (Hold And Modify) mode works makes it unsuitable for ingame animation in most cases. I used to be unaware of any game that uses it for gameplay. (&lt;strong&gt;Update&lt;/strong&gt;: There were at least 2 games using HAM for their animated action. See &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/393/92&quot;&gt;robc's answer&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Fury of the Furries&lt;/em&gt; uses HAM for its still images, for example the title image and the images that are displayed before entering a new world (each consisting of a set of levels).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason why it is unfeasible to use HAM for animated action is that you will either have to tolerate so-called color bleeding to the right of pixels or you will need to employ sophisticated algorithms to counteract the color bleeding, which timing constraints may forbid or which are just not worth it to come up with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In HAM mode you usually use 6 bitplanes (you can also use it with 5 bitplanes, but there's not much point to that). That's 64 possible values per pixel. Values 0 to 15 select a full RGB color from the 16 color palette, the same way other normal screen modes would. However, value sets 16 to 31 (modify blue component), 32 to 47 (modify red component) and 48 to 63 (modify green component), respectively, each just change one of the color components relative to the color of the previous pixel. The other two color components remain unchanged from the previous pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say you set the color to palette entry 8 in column 100. Say also that this palette entry is $0333, i. e. a very dark gray. So the pixel in column 100 will appear gray.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Then, lacking a matching color in the palette, you modify the red component in column 101 to $6 (using a pixel value of $26 = 38). The resulting pixel in column 101 will now have a color equivalent to $0633, which is a dark unsaturated red.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next, again lacking a matching color in the palette, you modify the green component in column 102 to $7 (using a pixel value of $37 = 55). The resulting pixel in column 102 will now have a color equivalent to $0673, which is a brown-greenish color.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Finally, lacking a matching color in the palette once more, you modify the blue component in column 103 to $6 (using a pixel value of $16 = 22). The resulting pixel in column 103 will now have a color equivalent to $0676, which is a dark gray with a very slight shimmer of green.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xGlsK.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xGlsK.png&quot; alt=&quot;HAM pixels before blitting&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;em&gt;note that each differently colored square represents 1 pixel&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So far so good, but say you now want to blit an animated character onto the bitmap. Say the rightmost pixel of that character ends up in column 100 and it is a bright white, palette value $0FFF. What this means is that the white will bleed into the next 2 pixels:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Due to modifying just the red component, the visible color in column 101 will be $06FF, a bright cyan.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Due to modifying just the green component, the visible color in column 102 will be $067F, a bright blue.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Only in column 103 will you have modified all three color components and the apparent pixel color will be the same $0676 as the original one before blitting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OTbAq.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OTbAq.png&quot; alt=&quot;HAM pixels after blitting&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;em&gt;note that each differently colored square represents 1 pixel&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Depending on how many and which color components you consecutively modify, the color bleeding can affect more or less pixels and depending on how different the colors are to the originally intended colors, the artifacts can be more or less visible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XzthK.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XzthK.gif&quot; alt=&quot;uncorrected HAM color bleeding when naively blitting&quot;&gt;&lt;/a&gt;&#xA; &lt;em&gt;note that I scaled the image by a factor of 2 to make the artifacts easier to see&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To counteract the bleeding, you would have to design a routine that figures out which pixels to the right of a blit to adjust and which pixel values are the optimal ones that let the apparent pixel colors match the original ones as closely as possible. You won't get completely rid of the artifacts, but they might now be unnoticeable unless you take a closer look.&lt;/p&gt;&#xA;" OwnerUserId="92" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-05-22T10:09:39.733" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="197" PostTypeId="1" AcceptedAnswerId="233" CreationDate="2016-04-21T18:04:51.710" Score="14" ViewCount="1069" Body="&lt;p&gt;Regarding the Atari 800...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the difference between the 6502A and the 'Sally'? Is it simply a revision, or do the changes improve performance?&lt;/p&gt;&#xA;" OwnerUserId="173" LastEditorUserId="56" LastEditDate="2016-04-23T14:47:24.590" LastActivityDate="2019-01-28T18:08:54.533" Title="Atari 800 CPU - 6502 vs. Sally" Tags="&lt;atari-800&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="198" PostTypeId="2" ParentId="134" CreationDate="2016-04-21T19:03:33.810" Score="12" Body="&lt;p&gt;To get a faster operation there are several &quot;extensions&quot; around, which are either connected to the extension slot or replacing the CPU on its socket working like a coprocessor. CMD's &lt;a href=&quot;https://en.wikipedia.org/wiki/SuperCPU&quot; rel=&quot;noreferrer&quot;&gt;SuperCPU&lt;/a&gt;, &lt;a href=&quot;https://www.c64-wiki.com/index.php/Ro%C3%9Fm%C3%B6ller_GmbH&quot; rel=&quot;noreferrer&quot;&gt;Flash 8&lt;/a&gt;, and one project from the &lt;a href=&quot;https://en.wikipedia.org/wiki/C&amp;#39;t&quot; rel=&quot;noreferrer&quot;&gt;c't&lt;/a&gt; computer magazine (a German one) reborn as follow-on project &lt;a href=&quot;http://klasek.at/c64/ltc64/&quot; rel=&quot;noreferrer&quot;&gt;LTC64&lt;/a&gt;. They have all in common using a WDC &lt;a href=&quot;https://en.wikipedia.org/wiki/WDC_65816/65802&quot; rel=&quot;noreferrer&quot;&gt;65C816&lt;/a&gt; CPU, a 16-bit expanded version of a &lt;a href=&quot;https://en.wikipedia.org/wiki/WDC_65C02&quot; rel=&quot;noreferrer&quot;&gt;65C02&lt;/a&gt;. With some luck a program or game runs even on such a plain 6502 (without any dirty &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6510&quot; rel=&quot;noreferrer&quot;&gt;6510&lt;/a&gt; opcodes) and can handle the faster timing. In hard cases you can switch back to the 6510-only mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above mentioned problem with &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_VIC-II&quot; rel=&quot;noreferrer&quot;&gt;VIC&lt;/a&gt; and I/O access is solved differently. However, they have to slow down the clock for access the &quot;lower&quot; address space (VIC accessed RAM). Some optimization with making this window smaller and using a pipelining method or caching is often implemented to minimize slow down phases. The 16-bit CPU with 4 to 20 MHz is running on its own memory with fast access. ROM/EPROM is usually copied into a shadow RAM area simulating a ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some other extensions, based on an &lt;a href=&quot;http://en.wikipedia.org/wiki/Field-programmable_gate_array&quot; rel=&quot;noreferrer&quot;&gt;FPGA&lt;/a&gt; architecture, replacing the whole C64 on an extension card (&lt;a href=&quot;https://www.c64-wiki.com/index.php/Turbo_Chameleon_64&quot; rel=&quot;noreferrer&quot;&gt;Turbo Chameleon 64&lt;/a&gt;) allowing to speed up the stuff into a 10 MHz region. Here you have all illegal opcode, too. The compatibility to existing software is much better.&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="181" LastEditDate="2016-05-17T18:04:34.243" LastActivityDate="2016-05-17T18:04:34.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="199" PostTypeId="2" ParentId="195" CreationDate="2016-04-21T19:53:10.600" Score="22" Body="&lt;p&gt;The Commodore 64 requires a power supply that provides both 9V AC and 5V DC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're interested in building your own, the power supply has a male circular 7 pin DIN connector.  Pins 1-3 are ground (pin 2 is the 5V ground), pin 4 is either unconnected or +5V, depending on the version, pin 5 is +5V, and pins 6 and 7 are 9VAC. (&lt;a href=&quot;http://www.allpinouts.org/index.php/Commodore_C64_Power_Supply&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-04-21T19:53:10.600" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="200" PostTypeId="2" ParentId="194" CreationDate="2016-04-21T20:08:37.133" Score="42" Body="&lt;p&gt;If you're looking to run a modern-&lt;em&gt;ish&lt;/em&gt; version of Linux, the oldest hardware is likely a &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80386&quot;&gt;Intel 80386&lt;/a&gt; from 1986, probably with some memory upgrades -- 640k isn't enough for everybody.  Note that &lt;a href=&quot;https://lwn.net/Articles/528893/&quot;&gt;support for the 386 was dropped&lt;/a&gt; with the 3.8 kernel, so you'll need 3.7 or older.  3.7 is new enough to run most current software, particularly the sort that you'd want to run on such a slow machine.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-04-21T20:08:37.133" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="201" PostTypeId="2" ParentId="195" CreationDate="2016-04-21T20:13:51.913" Score="22" Body="&lt;p&gt;Do not use an original Commodore 64 power supply, especially if it has not been tested.  They're prone to fail, and when they do, they'll take the C64 with it.  But if you do intend on using one of these power supplies, people have developed hardware that go between the Commodore 64 and power supply and can protect the C64 from power supply failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Commodore 128 power supply was better, but the connector is different so the cable will need modifications or an adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you find two wall-wart power supplies that provide the required currents, you can solder them to the correct DIN connector.&lt;/p&gt;&#xA;" OwnerUserId="64" LastEditorUserId="64" LastEditDate="2016-04-27T17:46:59.613" LastActivityDate="2016-04-27T17:46:59.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="202" PostTypeId="2" ParentId="194" CreationDate="2016-04-21T20:28:23.050" Score="9" Body="&lt;p&gt;Accoridng to this article &lt;a href=&quot;http://www.zdnet.com/article/good-bye-386-linux-to-drop-support-for-i386-chips-with-next-major-release/&quot;&gt;link&lt;/a&gt; Linux variants dropped support for the i386 processors in version 3.8. However, Distro Watch &lt;a href=&quot;https://distrowatch.com/search.php?architecture=i386&quot;&gt;link&lt;/a&gt; still has quite a few distros that support the i386 architecture. Some of them include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mint&lt;/li&gt;&#xA;&lt;li&gt;Debian&lt;/li&gt;&#xA;&lt;li&gt;Zorin &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And many others, I'm sure YMMV. I've not installed Linux on anything older than an original AMD Athlon. I've got an Athlon 2600+ running Bodhi, and it's a tad sluggish. Not like trying to run Windows 7 on it, but, still not overly responsive. I wouldn't want to run it on anything older than the Athlon.&lt;/p&gt;&#xA;" OwnerUserId="173" LastActivityDate="2016-04-21T20:28:23.050" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="203" PostTypeId="2" ParentId="194" CreationDate="2016-04-21T20:56:46.847" Score="12" Body="&lt;p&gt;Would &lt;a href=&quot;http://elks.sourceforge.net&quot;&gt;ELKS&lt;/a&gt; count as modern Linux? It can be run on even older hardware (original IBM PC).&lt;/p&gt;&#xA;" OwnerUserId="87" LastActivityDate="2016-04-21T20:56:46.847" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="204" PostTypeId="1" CreationDate="2016-04-22T00:20:15.120" Score="6" ViewCount="310" Body="&lt;p&gt;Older Macintoshes and the Apple IIgs used a custom character set for documents and filenames.  Each character was held in an 8-bit byte, using 0x00-0x7F for ASCII, and 0x80-0xFF for various symbols and Latin alphabet characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does this map to Unicode?&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-04-22T05:38:46.963" Title="How do I interpret the old Mac character set?" Tags="&lt;apple-iigs&gt;&lt;apple-macintosh&gt;&lt;unicode&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="205" PostTypeId="2" ParentId="204" CreationDate="2016-04-22T00:20:15.120" Score="11" Body="&lt;p&gt;The character set is known as &quot;Mac OS Roman&quot;.  The official mapping from Mac OS Roman to Unicode can be found on &lt;a href=&quot;http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/ROMAN.TXT&quot;&gt;unicode.org&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the character set is similar to Windows-1252 and ISO-8859-1, having many characters in common, it's not a direct match for either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of the characters are in the Basic Multilingual Plane (BMP).  It's worth noting, however, that the character at 0xF0 (&quot;Apple Logo&quot;) maps to code point 0xF8FF, which is in the BMP Private Use Area (informally, the Corporate Use Area).  This code point is used in &lt;a href=&quot;https://en.wikipedia.org/wiki/Private_Use_Areas#U.2BF8FF&quot;&gt;a variety of ways&lt;/a&gt;, so the glyph that appears may not be what you expect (and will often be the &quot;no glyph&quot; glyph).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A conversion table formatted as an array in C can be found &lt;a href=&quot;https://github.com/fadden/nulib2/blob/master/nufxlib/Charset.c&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-04-22T00:20:15.120" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="206" PostTypeId="1" CreationDate="2016-04-22T00:20:48.793" Score="19" ViewCount="1533" Body="&lt;p&gt;On the Amiga 500, 500+, 600, and 1200, what size screws were used to hold the chassis together? Is it the same size screw for all, different screws per machine, different screws front and rear, or were all the holes designed to work with more than one size screw depending on what the factory happened to have in stock?&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="15334" LastEditDate="2021-03-05T16:43:47.463" LastActivityDate="2021-03-05T16:43:47.463" Title="What size screws were used in the Amiga desktop cases?" Tags="&lt;amiga&gt;&lt;restoration&gt;&lt;case&gt;&lt;screw&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="207" PostTypeId="1" AcceptedAnswerId="210" CreationDate="2016-04-22T01:40:19.473" Score="17" ViewCount="746" Body="&lt;p&gt;I have an old 8bit Atari at my dad's house which would be fun to play with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has a keyboard, computer and screen, turn it on, and program BASIC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I'll possibly want to load the code from a modern computer. The reason being, saving/load from the original Atari floppy disks is going to be unreliable and slow. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could retype out the code each time I want to run it, but again that's going to be slow and annoying. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would ideally work, is to have some kind of keyboard interface that will simulate typing into the Atari. ie. it plugs in to the Atari, like a normal keyboard, and will type out all the code I have written in a modern computer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do such interfaces exists? If not, how plausible is it modify an original keyboard to allow this?&lt;/p&gt;&#xA;" OwnerUserId="221" LastActivityDate="2020-04-11T13:32:26.667" Title="How can I interface with an old Atari from a modern computer?" Tags="&lt;atari&gt;&lt;keyboards&gt;&lt;atari-basic&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="208" PostTypeId="1" CreationDate="2016-04-22T04:36:30.210" Score="25" ViewCount="2705" Body="&lt;p&gt;I'm currently using the absolutely ancient &quot;Fusion&quot; emulator to emulate a 68k Macintosh (specifically, a Quadra 700), but it only runs under MS-DOS, so I'm using a VirtualBox VM to emulate that.  I'd like to eliminate one layer of emulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Features that I'm looking for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Emulate a 68040-series Mac&lt;/li&gt;&#xA;&lt;li&gt;Runs under Linux&lt;/li&gt;&#xA;&lt;li&gt;Some way to transfer files to/from the host OS (shared folders, emulated network drive, FUSE filesystem module, whatever)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Nice to have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Support for Fusion hard-drive images&lt;/li&gt;&#xA;&lt;li&gt;Virtual CD-ROM drive supporting ISO images&lt;/li&gt;&#xA;&lt;li&gt;CD-ROM passthrough to access an actual CD-ROM drive&lt;/li&gt;&#xA;&lt;li&gt;Support for Ethernet networking&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It doesn't matter if it requires a ROM image or has a re-written ROM: I've got dumps from the aforementioned Quadra and a Performa 630 that I can use if needed.&lt;/p&gt;&#xA;" OwnerUserId="4" LastEditorUserId="4" LastEditDate="2016-05-07T08:50:17.410" LastActivityDate="2019-04-04T11:01:04.350" Title="Linux 68k Macintosh emulator" Tags="&lt;emulation&gt;&lt;apple-macintosh&gt;&lt;software-recommendation&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="209" PostTypeId="2" ParentId="204" CreationDate="2016-04-22T05:38:46.963" Score="10" Body="&lt;p&gt;From a more practical point of view, the program to convert between different character sets is called &lt;code&gt;iconv&lt;/code&gt;. It can be used on the command line from the OS X (Mac) terminal, as well as in most Linux distributions. The most popular implementation is &lt;a href=&quot;http://www.gnu.org/software/libiconv/&quot;&gt;GNU libiconv&lt;/a&gt;, providing support for hundreds of different encodings, including MacRoman and the other Mac encodings (see below). It can be used like so:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;iconv -f macroman -t utf-8 infile outfile&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;iconv can also convert to many specialty and legacy encodings, so it's a worthwhile element of your retrocomputing toolkit. Most programming languages provide similar functionality through an &lt;code&gt;iconv()&lt;/code&gt; function of some sort (e.g. &lt;a href=&quot;http://php.net/manual/en/function.iconv.php&quot;&gt;php&lt;/a&gt;, C).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also thought I'd add - MacRoman isn't the only Mac encoding, there was one for each region:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MAC MACINTOSH MACROMAN CSMACINTOSH&#xA;MACCENTRALEUROPE&#xA;MACICELAND&#xA;MACCROATIAN&#xA;MACROMANIA&#xA;MACCYRILLIC&#xA;MACUKRAINE&#xA;MACGREEK&#xA;MACTURKISH&#xA;MACHEBREW&#xA;MACARABIC&#xA;MACTHAI&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, from an English-speaking perspective, MacRoman is the only one commonly encountered nowadays.&lt;/p&gt;&#xA;" OwnerUserId="89" LastActivityDate="2016-04-22T05:38:46.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="210" PostTypeId="2" ParentId="207" CreationDate="2016-04-22T08:18:31.073" Score="17" Body="&lt;p&gt;If you're willing to spend some money, there are some nice options using the Atari's SIO port (the big trapezoidal plug on the side). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe the most flexible option is the SIO2PC adaptor, which lets you connect your Atari to a PC via serial or USB connection. This lets you do things like access a directory on your Mac or PC directly from the Atari, and even configure printers so that you can print from your Atari! I haven't actually tried this device myself, but many people swear by it. There are a variety of options to choose from at &lt;a href=&quot;http://www.atarimax.com/sio2pc/documentation/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.atarimax.com/sio2pc/documentation/index.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The option that I'm using is SIO2SD, which is basically an SD-card adaptor for the Atari. You just plug this into your Atari, and it sort of pretends to be a disk drive. The Atari boots up into a sort of disk image picker program installed on the SD card, and from there you can pick any of the disk images you put on there to boot from. You can also do things like create empty disk images that you can use from the Atari as if they were actual disks. That way you can do the things you're talking about, using BASIC or anything else and saving your work on these &quot;disks&quot;. This device works well for me since I am using my Atari solely for gaming, set up in the living room connected to a big new TV (living the dream!). With this device, I don't have to bother with having another computer connected. &lt;a href=&quot;https://lotharek.pl/productdetail.php?id=59&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://lotharek.pl/productdetail.php?id=59&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of these are actually available from a variety of sellers, as they all seem to be pretty much open source hardware that &quot;anyone&quot; could make. I've provided links to what I believe to be the most popular sources for these (I bought my SIO2SD from lotharek and have been very pleased with everything about it so far).&lt;/p&gt;&#xA;" OwnerUserId="145" LastEditorUserId="7347" LastEditDate="2020-04-11T13:32:26.667" LastActivityDate="2020-04-11T13:32:26.667" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="212" PostTypeId="1" AcceptedAnswerId="217" CreationDate="2016-04-22T09:20:43.900" Score="11" ViewCount="1623" Body="&lt;p&gt;What format is the (Timex) Sinclair ZX Spectrum SCREEN$/.SCR file and how is the fore/background and attribute data encoded within this format?&lt;/p&gt;&#xA;" OwnerUserId="133" LastEditorUserId="3290" LastEditDate="2020-04-26T13:00:35.127" LastActivityDate="2020-04-26T13:00:35.127" Title="What format is the (Timex) Sinclair ZX Spectrum SCREEN$/.SCR file" Tags="&lt;zx-spectrum&gt;&lt;file-format&gt;&lt;timex-sinclair&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="213" PostTypeId="5" CreationDate="2016-04-22T09:21:45.603" Score="0" Body="&lt;p&gt;For questions relating to the internal format of data files, including understanding the process of reading them and extracting information.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="276" LastEditDate="2016-08-02T10:53:32.040" LastActivityDate="2016-08-02T10:53:32.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="214" PostTypeId="4" CreationDate="2016-04-22T09:21:45.603" Score="0" Body="Relating to the encoding format of data within files.&#xD;&#xA;" OwnerUserId="133" LastEditorUserId="276" LastEditDate="2016-08-02T10:53:32.040" LastActivityDate="2016-08-02T10:53:32.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="215" PostTypeId="2" ParentId="208" CreationDate="2016-04-22T09:26:38.663" Score="19" Body="&lt;p&gt;&lt;a href=&quot;http://basilisk.cebix.net/&quot;&gt;Basilisk II&lt;/a&gt; works well on Linux (it's even &lt;a href=&quot;https://tracker.debian.org/basilisk2&quot;&gt;packaged for Debian&lt;/a&gt;) and provides most of the features you're looking for. I know I've used the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;68040 emulation;&lt;/li&gt;&#xA;&lt;li&gt;host filesystem access inside the emulator;&lt;/li&gt;&#xA;&lt;li&gt;pass-through networking.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I believe it also supports pass-through CD-ROM access, and possibly ISO-image-based CD-ROM emulation.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-04-22T09:26:38.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="216" PostTypeId="2" ParentId="208" CreationDate="2016-04-22T10:08:05.103" Score="22" Body="&lt;h2&gt;Preface&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As Stephen rightly points out in his &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/208/linux-68k-macintosh-emulator#comment-200&quot;&gt;comment&lt;/a&gt;, SheepShaver only emulates PowerPC, and so it is not a valid suggestion for your 68K-based question. From &lt;a href=&quot;http://sheepshaver.cebix.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SheepShaver's home page&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;However, you still need a copy of MacOS and a PowerMac ROM image to use SheepShaver. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you attempt to use a 68K based ROM, with SheepShaver, then you should get the error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Invalid ROM file size. SheepShaver requires a 4MB PCI PowerMac ROM.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;as shown in one of the dialogs in the screenshots below.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Answer&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sheepshaver.cebix.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SheepShaver&lt;/a&gt; and &lt;a href=&quot;http://basilisk.cebix.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;BasiliskII&lt;/a&gt; both work on Linux and should support your requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To quote the specifications of each emulator respectively:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Some of SheepShaver's features&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Runs MacOS 7.5.2 thru 9.0.4. MacOS X as a guest is not supported.&lt;/li&gt;&#xA;  &lt;li&gt;Color video display&lt;/li&gt;&#xA;  &lt;li&gt;CD quality sound output&lt;/li&gt;&#xA;  &lt;li&gt;Access to floppy disks, CD-ROMs and HFS(+) partitions on hard disks&lt;/li&gt;&#xA;  &lt;li&gt;Easy file exchange with the host OS via a &quot;Host Directory Tree&quot; icon on the Mac desktop&lt;/li&gt;&#xA;  &lt;li&gt;Internet and LAN networking via Ethernet&lt;/li&gt;&#xA;  &lt;li&gt;Serial drivers&lt;/li&gt;&#xA;  &lt;li&gt;SCSI Manager (old-style) emulation&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Some features of Basilisk II&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Emulates either a Mac Classic (which runs MacOS 0.x thru 7.5) or a Mac II series machine (which runs MacOS 7.x, 8.0 and 8.1), depending&#xA;  on the ROM being used&lt;/li&gt;&#xA;  &lt;li&gt;Color video display&lt;/li&gt;&#xA;  &lt;li&gt;CD quality sound output&lt;/li&gt;&#xA;  &lt;li&gt;Floppy disk driver (only 1.44MB disks supported)&lt;/li&gt;&#xA;  &lt;li&gt;Driver for HFS partitions and hardfiles&lt;/li&gt;&#xA;  &lt;li&gt;CD-ROM driver with basic audio functions&lt;/li&gt;&#xA;  &lt;li&gt;Easy file exchange with the host OS via a &quot;Host Directory Tree&quot; icon on the Mac desktop&lt;/li&gt;&#xA;  &lt;li&gt;Ethernet driver&lt;/li&gt;&#xA;  &lt;li&gt;Serial drivers&lt;/li&gt;&#xA;  &lt;li&gt;SCSI Manager (old-style) emulation&lt;/li&gt;&#xA;  &lt;li&gt;Emulates extended ADB keyboard and 3-button mouse&lt;/li&gt;&#xA;  &lt;li&gt;Uses UAE 68k emulation or (under AmigaOS and NetBSD/m68k) real 68k processor&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;As an aside&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I actually answered a &lt;a href=&quot;https://superuser.com/questions/936506/basiliskii-and-sheepshaver-cant-open-quadra650-rom/936536#936536&quot;&gt;Quadra 650 emulation related question&lt;/a&gt;, a while back, although it &lt;em&gt;was&lt;/em&gt; for Windows, on SuperUser. I have just spent the last hour trying to find/recover it, after the OP, who asked the question, has subsequently deleted the question.  I have reproduced the question and answer below - hopefully it could be useful, in case any stumbling blocks are encountered.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Original Question&lt;/h3&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;BasiliskII and SheepShaver can't open quadra650.rom&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;I was thinking I could run Mac OS 7.5.5 on vMac with color but no it&#xA;  won't work with color only OS can run. I thought it would work if I&#xA;  use BasiliskII but when I assemble the ROM, &lt;code&gt;SDL.dll&lt;/code&gt; and the other&#xA;  stuff, I got an error about the ROM: &quot;Cannot open ROM file.&quot; The same&#xA;  thing happened with SheepShaver.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This is very huge problem and I don't know how I can fix it. On forums&#xA;  it said &lt;code&gt;quadra650.rom&lt;/code&gt; will work but I tried and nothing special, I&#xA;  got the same error. I opened both BasiliskII and SheepShaver and I&#xA;  took a screenshot for you guys to know tell me what's going on?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LYScS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LYScS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;I got the disk image from youtube - &lt;a href=&quot;https://www.youtube.com/watch?v=0Qqplm9-PQo&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tour of Mac OS 7.5.5 with color +&#xA;  games (with download links)&lt;/a&gt;. Read the description for &lt;code&gt;.dsk&lt;/code&gt; file.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h3&gt;My Answer&lt;/h3&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Tackling Basilisk II and SheepShaver in turn...&lt;/p&gt;&#xA;  &#xA;  &lt;h2&gt;Basilisk II&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;I've managed to reproduce your error, using a &lt;a href=&quot;http://sheepshaver.cebix.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quadra 650 ROM file&lt;/a&gt;&#xA;  from a tutorial on &lt;a href=&quot;http://www.redundantrobot.com/sheepshaver-tutorial/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RedundantRobot&lt;/a&gt;.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The issue is that you need to specify to the emulator &lt;em&gt;where&lt;/em&gt; the ROM&#xA;  file is located. Just dropping it in the same directory is not&#xA;  sufficient.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;From the &lt;a href=&quot;http://basilisk.cebix.net/README&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASILISK II readme&lt;/a&gt;, the &lt;code&gt;rom&lt;/code&gt; preference is defined&#xA;  below:&lt;/p&gt;&#xA;  &#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;rom &lt;/p&gt;&#xA;    &#xA;    &lt;p&gt;This item specifies the file name of the Mac ROM file to be used by &#xA;    Basilisk II. If no &quot;rom&quot; line is given, the ROM file has to be named  &quot;ROM&quot; and put in the same directory as the Basilisk II executable.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &#xA;  &lt;p&gt;So the easiest option, without requiring you to modify the preferences&#xA;  file, in the Basilisk II directory, rename the ROM file, from&#xA;  &lt;code&gt;quadra650.rom&lt;/code&gt; to just &lt;code&gt;ROM&lt;/code&gt;.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/rP3kq.png&quot; alt=&quot;Rename file to ROM&quot;&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Or, you could edit the preferences file, by opening the file,&#xA;  &lt;code&gt;BasiliskII_prefs&lt;/code&gt;, in notepad (as here is no GUI preferences&#xA;  dialogue) and add&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rom C:\&amp;lt;your path&amp;gt;\quadra650.ROM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;for example,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rom C:\Users\davinci\Basilisk\BasiliskII_20-02-2015\quadra650.ROM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;If your disk is specified corectly then the virtual mac should now&#xA;  boot.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/VrpKw.png&quot; alt=&quot;Booted MacOS&quot;&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Otherwise, you would end up with this (and you may need to use Task&#xA;  Manager to end the Basilisk II &lt;em&gt;process&lt;/em&gt; as the window may refuse to&#xA;  close and kill the application):&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/fk6yp.png&quot; alt=&quot;No disk defined&quot;&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This is because the same path issue occurs with the disk image, and&#xA;  you may need to specify the path to the disk image in the preferences&#xA;  file. Again from the &lt;a href=&quot;http://basilisk.cebix.net/README&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASILISK II readme&lt;/a&gt;, the &lt;code&gt;disk&lt;/code&gt; preference is&#xA;  defined: &lt;/p&gt;&#xA;  &#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;disk &lt;/p&gt;&#xA;    &#xA;    &lt;p&gt;This item describes one MacOS volume to be mounted by Basilisk II.&lt;br&gt;&#xA;    There can be multiple &quot;disk&quot; lines in the preferences file. Basilisk&#xA;    II   can handle hardfiles (byte-per-byte images of HFS volumes in a&#xA;    file on   the host system), HFS partitions on hard disks etc., and&#xA;    MacOS-partitioned   disks (it can only access the first partition,&#xA;    though). The &quot;volume   description&quot; is either the pathname of a&#xA;    hardfile or a platform-dependant   description of an HFS partition or&#xA;    drive. If the volume description is   prefixed by an asterisk (&quot;*&quot;),&#xA;    the volume is write protected for MacOS.&lt;/p&gt;&#xA;    &#xA;    &lt;p&gt;Basilisk II can also handle some types of Mac &quot;disk image&quot; files&#xA;    directly,   as long as they are uncompressed and unencoded.&lt;/p&gt;&#xA;    &#xA;    &lt;p&gt;BeOS:&#xA;        To specify an HFS partition, simply specify its path (e.g.&#xA;        &quot;/dev/disk/scsi/0/1/0/0_3&quot;). If you don't specify any volumes, Basilisk II&#xA;        will search for and use all available HFS partitions.&lt;/p&gt;&#xA;    &#xA;    &lt;p&gt;Unix:&#xA;        To specify an HFS partition, simply specify its path (e.g. &quot;/dev/sda5&quot;).&#xA;        If you want to access a MacOS-partitioned hard disk or removable volume&#xA;        (Jaz, Zip etc.) and your operating system doesn't understand MacOS&#xA;        partition tables, you can specify the block device name (e.g. &quot;/dev/sda&quot;)&#xA;        to access the first HFS partition on the device. Under Linux, if you&#xA;        don't specify any volumes, Basilisk II will search /etc/fstab for&#xA;        unmounted HFS partitions and use these.&lt;/p&gt;&#xA;    &#xA;    &lt;p&gt;AmigaOS:&#xA;        Partitions/drives are specified in the following format:&#xA;          /dev/&amp;lt;device name&amp;gt;/&amp;lt;unit&amp;gt;/&amp;lt;open flags&amp;gt;/&amp;lt;start block&amp;gt;/&amp;lt;size&amp;gt;/&amp;lt;block size&amp;gt;&#xA;        &quot;start block&quot; and &quot;size&quot; are given in blocks, &quot;block size&quot; is given in&#xA;        bytes.&lt;/p&gt;&#xA;    &#xA;    &lt;p&gt;&lt;strong&gt;Windows:&#xA;        To define a logical volume (Windows NT only), specify its path (e.g. &quot;c:\&quot;).&#xA;        To define a physical volume (NT and 9x), additionally give the &quot;physical&quot;&#xA;        keyword (E.g. &quot;physical c:\&quot;). For safety reasons, volumes are mounted as&#xA;        read-only. This is due to the bugs in PC Exchange. If you don't specify&#xA;        any volume, the files *.hfv and *.dsk are searched from the current&#xA;        directory. Note that in this case, Basilisk II tries to boot from the first&#xA;        volume file found, which is random and may not be what you want.&lt;/strong&gt;&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &#xA;  &lt;p&gt;So add the line &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;disk C:\&amp;lt;path&amp;gt;\boot.dsk&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;for example,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;disk C:\Users\davinci\Basilisk\BasiliskII_20-02-2015\boot.dsk&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;to the preferences file, where &lt;code&gt;path&lt;/code&gt; is your path to the Basilisk&#xA;  directory, and rename the &lt;code&gt;System 7.5.5 Boot.dsk&lt;/code&gt; file to just&#xA;  &lt;code&gt;boot.dsk&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/M2a5Y.png&quot; alt=&quot;Rename disk image file&quot;&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The renaming of the file to something simpler is not be &lt;em&gt;strictly&lt;/em&gt;&#xA;  necessary but removing the spaces reduces the chance of the file not&#xA;  being recognised or found. The following line &lt;strong&gt;&lt;em&gt;does&lt;/em&gt;&lt;/strong&gt; work though,&#xA;  as Basilisk II handles the spaces in filenames without an issue:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;disk C:\Users\davinci\Basilisk\BasiliskII_20-02-2015\System 7.5.5 Boot.dsk &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;h2&gt;SheepShaver&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;I've managed to reproduce your error, using a &lt;a href=&quot;http://www.redundantrobot.com/macemulator/newworld86.rom.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;New World PPC ROM&#xA;  file&lt;/a&gt; from a tutorial on &lt;a href=&quot;http://www.redundantrobot.com/sheepshaver-tutorial/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RedundantRobot&lt;/a&gt;. [&lt;strong&gt;Edit: This is&#xA;  because SheepShaver does not support 68K Mac emulation&lt;/strong&gt;]. If you&#xA;  attempt to use the Quadra 650 ROM file, that you used for Basilisk II,&#xA;  then you will get the following error:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/OvZwB.png&quot; alt=&quot;Wrong ROM file - Quadra 650 ROM is incompatible&quot;&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Copying in the correct New World PPC ROM file is not sufficient, as&#xA;  you will get the following error:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2lcir.png&quot; alt=&quot;newworld86.rom file needs to be renamed to ROM&quot;&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If you rename the file to just &lt;code&gt;ROM&lt;/code&gt;, again without any file&#xA;  extension, then SheepShaver will run, as desired.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="202" LastEditorUserId="357" LastEditDate="2019-04-04T11:01:04.350" LastActivityDate="2019-04-04T11:01:04.350" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="217" PostTypeId="2" ParentId="212" CreationDate="2016-04-22T10:12:00.513" Score="23" Body="&lt;p&gt;For a standard screen, compatible with ZX Spectrum, a SCREEN$ file is 6912 bytes. It's just a dump of the screen memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first 6144 bytes store the screen bitmap: 256x192 pixels, 1 bit per pixel (on or off). The layout is not linear.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The screen bitmap is divided horizontally into three thirds: each one is 2048 bytes and store 8 text rows of 32 column each one (each character cell has 8 scans of 8 pixels each one).&lt;/li&gt;&#xA;&lt;li&gt;For each third, the first scan of each character cell is stored, left to right, top to bottom. Then, the second scan, then the third, until the last one, the eighth. After this, a new third is stored in the same fashion.&lt;/li&gt;&#xA;&lt;li&gt;Each byte stored has 8 pixels: the MSb belongs to the leftmost pixel as shown on the screen.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Following the bitmap region, the remaining 768 bytes store the attributes. There is 1 byte of attribute for each character cell. Stored left to right, top to bottom. Bits 2-0 store the foreground colour, or &quot;ink&quot; colour (colour assigned to &quot;on&quot; pixels). Bits 5-3 store the background colour or &quot;paper&quot; colour (colour assigned to &quot;off&quot; pixels). Bit 6 is bright. If set, both paper and ink colours are lighter. Bit 7 is flash. If set, the paper and ink colour swap every 640 ms to give a kind of flashing character.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To have a clue of how bitmap and attribute are stored, you can type this little BASIC program that will shows you the arrangement of pixels on the screen, by dumping part of the ROM to the screen (which will show up as random pixels and colours):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR n=0 TO 6911: POKE 16384+n,PEEK n: NEXT n&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A similar program gives this result:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IMijd.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IMijd.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For each paper or ink colour, the arrangement of the three bits encode a RGB value in this order: G R B. So, colour 6 (binary 110) is green + red = yellow. The complete table is this:&#xA;0: black, 1: blue, 2: red, 3:magenta, 4: green, 5:cyan, 6:yellow, 7: white&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With bright set, all these colours except black are intensified. This gives a total of 15 different colours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Timex 2048/2068 computers add two more screen modes, called HiColour and HiRes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HiColour mode is entered by setting bit 1 of port $FF. It differs a little from the standard mode, explained above. HiColour mode uses an attribute region which is not 768 bytes, but 6144 bytes in size, the same as the bitmap region. The attribute region does not start following the bitmap region, but there is a gap of 1280 bytes between the end of the bitmap and the start of the attribute region. The total screen size is 12288 bytes, not including this gap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The layout of this attribute region is the same as the bitmap region (3 thirds, the first scan is stored, then the second, etc). There is now 1 byte of attribute for each scan of 8 pixels. The format of the attribute byte is the same as in the standard mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On tape, some programs use two different blocks to load the bitmap region, then the attribute region (as they are not contiguous). Some others use a single block containing both regions along with 1280 byte gap between them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following program will show you the arrangement in this mode. It won't work on a regular Sinclair Spectrum, but in a Timex TC2048/2068.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 OUT 255,2: FOR n=0 TO 6143: POKE 16384+n,PEEK n:POKE 24576+n,PEEK n: NEXT n&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;HiRes is entered by setting bit 3 of port $FF. This mode shows a screen of 512x192 pixels, using two different bitmap regions. One region is the same as in the standard and HiColour mode, and the second one is located in the same place as the attribute region of the HiColour mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For each scan of 16 pixels, the left most 8 pixels are stored in the first bitmap region, and the rightmost 8 pixels are stored in the second bitmap region.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each bitmap region is arranged the same way as the other screen modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The foreground, background and border colour is set separately on bits 5-3 of port $FF. These three bits store the ink colour which will be applied to all &quot;on&quot; pixels. The 1-complement of this value will be used for both paper and border colours. In HiRes mode, the bright bit is always set and there is no flash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following program will show you how the HiRes mode is arranged:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 OUT 255,4: FOR n=0 TO 6143: POKE 16384+n,PEEK n:POKE 24576+n,PEEK n: NEXT n&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On tape, HiRes SCREEN$ are stored the same way as HiColour SCREEN$. I haven't seen that the global ink colour is stored too, so a separate BASIC program must provide it, along with the mode change command.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="576" LastEditDate="2018-12-04T12:26:07.053" LastActivityDate="2018-12-04T12:26:07.053" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="218" PostTypeId="2" ParentId="212" CreationDate="2016-04-22T10:13:27.270" Score="8" Body="&lt;p&gt;The SCR file format is effectively a raw data dump of the video memory area on the standard ZX Spectrum 48/128k.&lt;/p&gt;&#xA;&lt;p&gt;As such, the data is divided into three 2,048 byte sections, each of which describes the pixel data for a third of the screen, from top to bottom. This is then followed by 768 bytes of attribute data information - resulting in a total of 6,912 bytes.&lt;/p&gt;&#xA;&lt;h1&gt;Background&lt;/h1&gt;&#xA;&lt;p&gt;For those unfamiliar with the Spectrum's video architecture, on the standard Spectrums, the 256x192 display is treated as 768 8x8 pixel blocks, with each block being capable of displaying two colours. (i.e.: Each block is effectively a bitmap and associated ink and background colour combination.) By using this approach, it's possible to display the fill 256x192 resolution of screen using only 6,912 bytes.&lt;/p&gt;&#xA;&lt;p&gt;Additionally, the Spectrum palette consists of both normal and &amp;quot;bright&amp;quot; colours, with each block capable of being set as bright. (i.e.: You can't mix normal and bright colours within a single 8x8 pixel block.) The blocks can also be set to flash, but perhaps the less said about that the better.&lt;/p&gt;&#xA;&lt;p&gt;In more detail:&lt;/p&gt;&#xA;&lt;h1&gt;Screen thirds&lt;/h1&gt;&#xA;&lt;p&gt;Each of the screen thirds describes a slice of the screen - the first third being horizontal lines 0 thru 63, the second being 64 thru 127 and finally 128 thru 192, hence describing the 192 horizontal lines of the Spectrum's 256x192 display.&lt;/p&gt;&#xA;&lt;p&gt;However, rather than simply describe each row in a linear fashion (i.e.: 0 thru 63, then 64 thru 127, etc.), due to the nature of the Spectrum, the data within each third instead describes a full horizontal line across each of the 8x8 blocks in turn (i.e: horizontal line 0, 8, 16, etc.) before moving onto the next line in the row of blocks (i.e.: line 1, 9, etc.)&lt;/p&gt;&#xA;&lt;p&gt;This will make &lt;em&gt;way&lt;/em&gt; more sense if you've ever seen a ZX Spectrum loading screen data.&lt;/p&gt;&#xA;&lt;p&gt;In more detail, each of the 64 lines within each third is structured into a series of 32 byte blocks as follows, each block being a line of screen data.&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;  0 ..  31 - 256 bits of data for horizontal line 0&#xA; 32 ..  63 - 256 bits of data for horizontal line 8&#xA; 64 ..  95 - 256 bits of data for horizontal line 16&#xA; 96 .. 127 - 256 bits of data for horizontal line 24&#xA;128 .. 159 - 256 bits of data for horizontal line 32&#xA;160 .. 191 - 256 bits of data for horizontal line 40&#xA;192 .. 223 - 256 bits of data for horizontal line 48&#xA;224 .. 255 - 256 bits of data for horizontal line 56&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;This is then followed by...&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;  0 ..  31 - 256 bits of data for horizontal line 1&#xA; 32 ..  63 - 256 bits of data for horizontal line 9&#xA; 64 ..  95 - 256 bits of data for horizontal line 17&#xA; 96 .. 127 - 256 bits of data for horizontal line 25&#xA;128 .. 159 - 256 bits of data for horizontal line 33&#xA;160 .. 191 - 256 bits of data for horizontal line 41&#xA;192 .. 223 - 256 bits of data for horizontal line 49&#xA;224 .. 255 - 256 bits of data for horizontal line 57&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;h1&gt;Attribute data&lt;/h1&gt;&#xA;&lt;p&gt;Once each of the thirds has been completed, this is followed by the attribute data, which is simply another array of bytes detailing the ink and paper colours as well as whether or not bright or flash is set.&lt;/p&gt;&#xA;&lt;p&gt;Each of these bytes is constructed as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;0,1,2 - Ink colour&#xA;3,4,5 - Paper colour &#xA;6 - Whether or not the colours are bright or standard&#xA;7 - Whether or not the block should flash&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;For more information see &lt;a href=&quot;http://www.zx-modules.de/fileformats/scrformat.html&quot; rel=&quot;noreferrer&quot;&gt;Claus Jahn's ZX Spectrum page&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="133" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-04-22T10:13:27.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="219" PostTypeId="1" AcceptedAnswerId="6176" CreationDate="2016-04-22T14:10:31.367" Score="34" ViewCount="4507" Body="&lt;p&gt;It's been a while, but I've read in a system programming book that you could switch your Intel 80286 CPU from the normal &lt;strong&gt;real mode&lt;/strong&gt; to a more powerful &lt;strong&gt;protected mode&lt;/strong&gt;. I clearly remember that they said it was impossible to switch back though, unless you fully restarted the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was this (made?) impossible? Was it a bug, intention by the DOS developers or a hardware restriction of the CPU?&lt;/p&gt;&#xA;" OwnerUserId="128" LastEditorUserId="276" LastEditDate="2016-06-02T18:03:50.753" LastActivityDate="2018-04-13T03:41:21.840" Title="80286 can switch from real mode to protected mode - but why not back?" Tags="&lt;80286&gt;&lt;intel&gt;&lt;real-mode&gt;&lt;protected-mode&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="220" PostTypeId="2" ParentId="219" CreationDate="2016-04-22T14:51:00.257" Score="29" Body="&lt;p&gt;My guess is that it was merely a design decision based upon the assumption that once a protected mode OS is started, there is no need to go back. Most microprocessors at that time already booted in its most privileged mode and had at least two levels of protection. The 80286 had to boot in real mode to keep compatibility with DOS and I think they thought DOS would reduce itself to just a minimal procedure to boot the main OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that Intel engineers didn't realize that DOS was going to live for about ten years after launching the 286, and software engineers along with motherboard manufacturers would figure out a way to switch the CPU back to real mode in order to call DOS services from a protected mode program (who decided that the keyboard controller is a good place to put a register with a bit to reset the CPU and another one to enable CPU addresses beyond 1MB?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the time the 80386 was produced, they added the feature to switch the CPU back to real mode, and the dirty trick used with the 80286 -to reset it with a magic number at a certain memory location so the BIOS could read it and jump to some predefined code to resume operation- was not needed any more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, the &lt;a href=&quot;https://en.wikipedia.org/wiki/LOADALL&quot; rel=&quot;noreferrer&quot;&gt;undocumented LOADALL instruction&lt;/a&gt; was spoiled on the USNet, which could allow not only switching from and to real mode, but allow non standard CPU states, such as the so called &quot;unreal&quot; mode, which allowed a real mode DOS program to access memory beyond the 1MB barrier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;http://www.os2museum.com/wp/loadall-strikes-again/&quot; rel=&quot;noreferrer&quot;&gt;article from the OS/2 museum&lt;/a&gt; discuss the use of LOADALL to switch back from protected mode, and how Microsoft used it in HIMEM.SYS to allow fast above-1MB-memory copying without having to leave real mode.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="3551" LastEditDate="2016-11-02T21:04:09.333" LastActivityDate="2016-11-02T21:04:09.333" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="221" PostTypeId="5" CreationDate="2016-04-22T15:44:43.560" Score="0" Body="&lt;p&gt;Use this tag for retro-computing questions related to graphics.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be about the way the hardware worked or about software techniques specific to older computers.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="276" LastEditDate="2016-06-08T08:42:35.363" LastActivityDate="2016-06-08T08:42:35.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="222" PostTypeId="4" CreationDate="2016-04-22T15:44:43.560" Score="0" Body="For questions regarding graphical - as opposed to text - processing and display." OwnerUserId="-1" LastEditorUserId="276" LastEditDate="2016-06-08T08:40:43.447" LastActivityDate="2016-06-08T08:40:43.447" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="223" PostTypeId="1" AcceptedAnswerId="229" CreationDate="2016-04-22T16:03:07.723" Score="24" ViewCount="2094" Body="&lt;p&gt;I am self studying about compilers, and get hands on very good textbooks about the subject. I am thinking in develop a compiler using the almighty &lt;strong&gt;llvm infrastructure&lt;/strong&gt; to cross compile to old computers, initially MSX ones.&#xA;  The thing is, i can't get an impression on how much benefit one could get on using this approach, over what is already on old compilers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, the possibility to reuse code over different platforms is one, if a common compiler is to be developed, but the idea is getting the most of such processors, using modern optimization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that some obviously don't apply, like scheduling, but there is a lot of things that are done before code generation, and will be beneficial to every backend. The question i make is, how beneficial it will be to deliver such tool, compared to what is already on legacy compilers, and to modern ones too (sdcc and others). Also, how much this kind of effort could be beneficial to ease multi platform development (Uzix and the like) considering the severe restrictions on those platforms?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; I changed the subject of the question to reflect only MSX, to adjust the scope that was too broad.&lt;/p&gt;&#xA;" OwnerUserId="225" LastEditorUserId="225" LastEditDate="2016-04-22T18:26:48.113" LastActivityDate="2017-10-26T08:13:04.820" Title="How much benefit should be expected on a more advanced compiler for z80/r800 based computers?" Tags="&lt;msx&gt;&lt;compilers&gt;&lt;assembly&gt;&lt;z80&gt;&lt;r800&gt;" AnswerCount="5" CommentCount="10" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="224" PostTypeId="2" ParentId="223" CreationDate="2016-04-22T16:31:37.183" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;i can't get an impression on how much benefit one could get on using&#xA;  this approach, over what is already on old compilers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If that were true, then old games would be developed using those old compilers, instead of hand-coded assembly. Old compilers were, mostly, very naive in terms of code optimization due to they being executing in the very same system they are producing code for, thus suffering from severe lack of precious RAM that would be needed to implement more sophisticated optimization techniques.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-04-22T16:31:37.183" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="225" PostTypeId="5" CreationDate="2016-04-22T17:20:27.963" Score="0" Body="&lt;p&gt;This tag covers the entire Macintosh product line, from 1984 onwards.  Only the older models are appropriate subjects for this site; questions about more modern Macs should be asked on &lt;a href=&quot;//apple.stackexchange.com/&quot;&gt;Ask Different&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a simple guideline, Macs based on 68K or PPC CPUs are appropriate, while x86-based Macs probably aren't.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="278" LastEditDate="2016-09-10T16:00:10.893" LastActivityDate="2016-09-10T16:00:10.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="226" PostTypeId="4" CreationDate="2016-04-22T17:20:27.963" Score="0" Body="For questions about Apple's Macintosh line of computers." OwnerUserId="56" LastEditorUserId="278" LastEditDate="2016-09-10T16:00:10.893" LastActivityDate="2016-09-10T16:00:10.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="228" PostTypeId="1" AcceptedAnswerId="286" CreationDate="2016-04-22T20:48:35.057" Score="14" ViewCount="265" Body="&lt;p&gt;The answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/52/how-do-i-use-shadowed-memory-to-render-super-hi-res-quickly&quot;&gt;this question&lt;/a&gt; discussed a technique on the Apple IIgs for copying memory onto itself.  The motivation for the technique was to maximize use of &quot;fast&quot; (2.8MHz) RAM over &quot;slow&quot; (1MHz) RAM shared with the display hardware.  Writes to the &quot;fast&quot; memory were shadow-written to &quot;slow&quot; graphics memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I vaguely remember someone at the 1993 KansasFest using an oscilloscope to demonstrate that inserting &lt;code&gt;NOP&lt;/code&gt; (no operation) instructions would make things &lt;em&gt;faster&lt;/em&gt;.  I've found a couple of references (&lt;a href=&quot;https://groups.google.com/forum/#!msg/comp.sys.apple2/ebhNKGH53qg/x0QlJH83t5QJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;article1&lt;/a&gt;, &lt;a href=&quot;https://groups.google.com/forum/#!msg/comp.sys.apple2/SMQqh7mbJCI/UlfJWXBLuzMJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;article2&lt;/a&gt;) that indicate a &lt;code&gt;NOP&lt;/code&gt; should be placed between every 13 &lt;code&gt;PEI&lt;/code&gt; instructions.  This seems to have something to do with bus timing -- alignment would not make a difference here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does adding delays improve efficiency?&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-04-25T22:35:28.033" Title="Inserting NOPs to improve IIgs shadow copy performance" Tags="&lt;graphics&gt;&lt;apple-iigs&gt;&lt;65816&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="229" PostTypeId="2" ParentId="223" CreationDate="2016-04-22T22:03:24.260" Score="24" Body="&lt;p&gt;Places where LLVM will provide no benefit, and may reduce performance:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Z80 has no CPU cache, accessing memory directly instead.  Any optimizations based around increasing cache efficiency (eg. aligning sequentially-accessed data to fit in a single cache line, or re-ordering instructions to group common execution paths together) will have, at best, no effect.&lt;/li&gt;&#xA;&lt;li&gt;The Z80 is a strictly in-order CPU with just a single execution unit.  Optimizations such as instruction re-ordering to permit out-of-order or parallel execution will have no effect.&lt;/li&gt;&#xA;&lt;li&gt;The Z80 has a shallow-to-nonexistent pipeline and no speculative execution.  Optimizations based around branch prediction or preventing pipeline stalls will have no effect.&lt;/li&gt;&#xA;&lt;li&gt;The Z80 is often paired with a small amount of RAM.  Many optimizations (such as loop unrolling or function inlining) make the program larger, and can't be used if the program would no longer fit in RAM.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Places where LLVM will shine:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Anything based on abstract analysis of the code, such as constant folding or common-subexpression elimination.  Many of these techniques were developed long after the original Z80 compilers.&lt;/li&gt;&#xA;&lt;li&gt;Register allocation: The Z80 has approximately 17 registers (depending on how you count), with complex rules about how you can use them.  LLVM's design can draw on 30-40 years of research in this area that older compilers can't.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The improvement in abstract-analysis techniques in the past 40 years is huge.  Even in the absence of hardware-specific optimizations, I'd expect LLVM-generated code to be much faster than that from older compilers, and competitive with all but the best hand-optimized assembly.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-04-22T22:03:24.260" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="230" PostTypeId="2" ParentId="52" CreationDate="2016-04-22T22:04:26.960" Score="28" Body="&lt;h1&gt;Fast Screen Refresh With PEI Slamming&lt;/h1&gt;&#xA;&lt;h2&gt;(Or: Dirty Tricks With the Direct Page)&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;This article is based on my KansasFest 2004 presentation &amp;quot;Code Secrets of Wolf 3D.&amp;quot;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Introduction&lt;/h3&gt;&#xA;&lt;p&gt;Drawing super high-resolution (SHR) graphics on the Apple IIgs is slow. Unfortunately, the SHR screen's memory in bank $E1 is located in &amp;quot;slow RAM&amp;quot; — that is, memory controlled by the Mega II chip which emulates 1 MHz 8-bit Apple IIs. Access to this memory is gated to that 1 MHz speed instead of the 2.8 MHz of the rest of memory. This has plagued Apple IIgs graphics developers since the beginning.&lt;/p&gt;&#xA;&lt;p&gt;Fortunately, a number of hardware quirks of the Apple IIgs can be used in tandem to help ease the pain:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Shadowing allows bank $01 to be shadowed into bank $E1; that means that whatever is written into bank $01 is automatically mirrored into bank $E1 without slowing you down.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can use the main/auxmem toggle softswitches ($C003 and $C005) to use bank $01 instead of bank $00 for the direct page and stack.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The stack and direct page can both be moved around within the bank they're located in by changing the values of the stack pointer and direct register.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Let's see how this works!&lt;/p&gt;&#xA;&lt;h3&gt;Shadowing&lt;/h3&gt;&#xA;&lt;p&gt;You probably know that the Apple IIgs has a single super high-resolution graphics buffer, located in bank $E1 from $2000-$9FFF. This SHR buffer consists of the pixel data, a set of scanline control bytes (SCBs) which describe the mode of each row of pixels (including which palette to use and whether they're using 320 or 640 mode), and 16 palettes.&lt;/p&gt;&#xA;&lt;p&gt;That memory is slow. It's designed to support the 8-bit emulation of the Mega II chip, so writes into it are slowed down to 1 MHz whether you like it or not. There is a workaround, however. The clever people that designed the Apple IIgs included a technology called &lt;strong&gt;shadowing&lt;/strong&gt;; this is the ability to have the hardware mirror writes to bank $01 into bank $E1. The writes into bank $01 execute at the computer's regular 2.8 MHz speed, which is obviously much better.&lt;/p&gt;&#xA;&lt;p&gt;Shadowing of SHR memory in bank $01 into bank $E1 is controlled by bit 3 in the &lt;code&gt;SHADOW&lt;/code&gt; softswitch at $E0/C035. When 0, shadowing is enabled. When 1, it's disabled. Other bits in that softswitch control other aspects of shadowing, so be sure not to change those by mistake (use a read/modify/write operation sequence).&lt;/p&gt;&#xA;&lt;p&gt;So the first step is to allocate the bank $01 SHR buffer. It has to be located at $01/2000-$01/9FFF or it won't work, for obvious reasons — shadowing mirrors writes to the same address in bank $E1.&lt;/p&gt;&#xA;&lt;p&gt;Make sure you own the bank $01 SHR buffer! Either use &lt;code&gt;NewHandle&lt;/code&gt; to allocate it (be sure to set the flag that allows it to allocate special memory, since all of bank $01 is special) or, for GS/OS applications, set the auxtype bit which tells GS/OS to use shadowing so that GS/OS allocates it for you.&lt;/p&gt;&#xA;&lt;p&gt;Bytes already located in the bank $01 SHR buffer, however, do not get copied over automatically. You have to write any bytes you want to be copied after shadowing is turned on. That means you either need to track exactly what's changed and redraw those bytes, or redraw the all or most of the frame every refresh cycle. Which you do is up to you (and likely depends on how much you expect to change each refresh).&lt;/p&gt;&#xA;&lt;p&gt;You could of course use your typical &lt;code&gt;LDA&lt;/code&gt;/&lt;code&gt;STA&lt;/code&gt; loops or similar to do the refresh, but there's a much, much faster way.&lt;/p&gt;&#xA;&lt;h3&gt;Stacking the deck: Direct page tricks&lt;/h3&gt;&#xA;&lt;p&gt;On the 6502 and 65C02, the zero page and stack are fixed in memory; the zero page is always located at $0000-$00FF, and the stack is always in $0100-$01FF. The 65816 changes all that. The direct page (previously known as the zero page) can be moved to any location in bank $00 by changing the value in the Direct register. This can be done using instructions such as &lt;code&gt;TCD&lt;/code&gt; (Transfer aCcumulator to Direct register), like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;            lda #$2000&#xA;            tcd                   ; Set the direct page to $2000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Similarly, the 65816 allows you to move the stack by expanding the stack pointer register, previously an 8-bit offset from $0100, to be a 16-bit pointer within bank $00. You use instructions such as &lt;code&gt;TCS&lt;/code&gt; (Transfer aCcumulator to Stack pointer) to move the stack.&lt;/p&gt;&#xA;&lt;p&gt;The nice thing about stack and direct page operations is that you can use instructions which use fewer cycles to access them. In fact, it gets even better, as we'll see shortly.&lt;/p&gt;&#xA;&lt;p&gt;But how does this help us? The shadow SHR buffer is in bank $01, and the direct page and stack are trapped in bank $00. Right?&lt;/p&gt;&#xA;&lt;p&gt;Not so fast!&lt;/p&gt;&#xA;&lt;p&gt;The Apple IIgs was designed to be able to emulate an enhanced 8-bit Apple II; that is, an Apple II with at least 128K of memory. Because 8-bit Apple IIs can't access more than 64K directly, a mechanism called bank switching allowed you to select which 64K bank of memory you wanted to use by swapping them into the same 64K address space. This was done by using softswitches to toggle between main and &amp;quot;auxiliary&amp;quot; memory, often called &amp;quot;auxmem.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;There is a set of softswitches for selecting whether you wish to read from auxmem or main memory, and write to auxmem or main memory:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$E0C002     equ RDMAINRAM         ; Read from main memory&#xA;$E0C003     equ RDCARDRAM         ; Read from auxiliary memory&#xA;$E0C004     equ WRMAINRAM         ; Write to main memory&#xA;$E0C005     equ WRCARDRAM         ; Write to auxiliary memory&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The Apple IIgs emulates this mechanism by using bank $00 as main memory and bank $01 as auxmem; writing to &lt;code&gt;RDCARDRAM&lt;/code&gt; and &lt;code&gt;WRCARDRAM&lt;/code&gt; causes bank $01 to take bank $00's place, so that any accesses to bank $00 actually access bank $01.  Now things get interesting: by selecting auxiliary memory in this way, accesses to the stack and direct page actually access bank $01, which is where our SHR buffer is!&lt;/p&gt;&#xA;&lt;p&gt;Now we have a way to use higher-performance direct page and stack instructions to read and write the SHR buffer.&lt;/p&gt;&#xA;&lt;p&gt;Now we need to figure out the best way to use them.&lt;/p&gt;&#xA;&lt;h3&gt;Putting it together&lt;/h3&gt;&#xA;&lt;p&gt;The first thing you need to do is turn off shadowing. You don't want writes to the SHR buffer in bank $01 to be duplicated to bank $E1 until you're ready.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;          sep #$20&#xA;          lda &amp;gt;SHADOW             ; Get the current shadow register&#xA;          ora #$08                ; Turn on the &amp;quot;stop SHR shadowing&amp;quot; bit&#xA;          sta &amp;gt;SHADOW             ; Save the updated value&#xA;          rep #$20&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This code ensures shadowing is disabled while not changing the values of any of the other bits in the &lt;code&gt;SHADOW&lt;/code&gt; register (there are bits for controlling shadowing of various parts of bank $00; all we care about is the SHR buffer, though).&lt;/p&gt;&#xA;&lt;p&gt;Now you should draw your graphics into the SHR buffer in bank $01, starting at $2000. You can either redraw the whole thing or, preferably, update just the areas that need to change. This doesn't affect what's on the screen, so it can be done in pieces or in strange ways that would look weird if immediately reflected on the screen. However you like.&lt;/p&gt;&#xA;&lt;p&gt;This is the point where you decide when it's time to update the display. Maybe you do it immediately every time a screen update routine finishes running. Maybe you wait until the vertical scan has passed the first scan line you plan to refresh. Either way, the process is roughly the same. Wolfenstein 3D just draws, without worrying about the vertical scan, because it cares more about speed than about possible tearing effects caused by vertical refresh collisions.&lt;/p&gt;&#xA;&lt;p&gt;When the time comes to refresh the display, the first step is to turn shadowing back on so that writes to the bank $01 SHR buffer are mirrored to bank $E1:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;          sep #$20&#xA;          lda &amp;gt;SHADOW             ; Get the current shadow register&#xA;          and #$F7                ; Turn off the &amp;quot;stop SHR shadowing&amp;quot; bit&#xA;          sta &amp;gt;SHADOW             ; Save the updated value&#xA;          rep #$20&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now shadowing of the SHR buffer has been enabled. Our job now is to take the contents of the bank $01 buffer — at least the parts of it which have changed — and draw them right on top of themselves to update the bank $E1 buffer.&lt;/p&gt;&#xA;&lt;p&gt;Think about it for a moment. The contents of the bank $01 buffer are only shadowed to bank $E1 when changed, but it contains the image we want to display already. So we just need to read the changed data and write it right back on top of itself to mirror it to the displayed screen. It sounds a little crazy, but only until you think about it a bit.&lt;/p&gt;&#xA;&lt;p&gt;Since we're going to be fiddling with the stack and direct registers, we need to save those so we can restore them later. We also need to disable interrupts:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;          sei                     ; Disable interrupts&#xA;          tdc                     ; Copy direct register to accumulator&#xA;          sta savedDP             ; Save it locally&#xA;          tsc                     ; Copy stack pointer to accumulator&#xA;          sta savedStack          ; Save that too&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Why did we disable interrupts? Because if bank $01 is occupying the space normally used by bank $00 when an interrupt fires, the interrupt handler will almost certainly blow up.&lt;/p&gt;&#xA;&lt;p&gt;Imagine this scenario: AppleTalk is enabled, and the AppleTalk interrupt fires, causing AppleTalk code to get control of the system briefly. It restores its stack and direct page pointers so it can access the data it expects to access, but because bank $01 is now occupying the space normally taken by bank $00, it gets the wrong data (and writes over other programs' data), and things rapidly fall apart.&lt;/p&gt;&#xA;&lt;p&gt;Now we complete the preparations by swapping bank $01 to replace bank $00:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;          sep #$20&#xA;          sta &amp;gt;WRCARDRAM          ; Writes to bank $00 go to bank $01&#xA;          sta &amp;gt;RDCARDRAM          ; Reads from bank $00 to go bank $01&#xA;          rep #$20&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;From now on, all accesses to bank $00 actually access bank $01. We're going to use stack and direct page instructions exclusively, for maximum performance.&lt;/p&gt;&#xA;&lt;p&gt;It's time to start drawing. We're going to draw the entire screen each frame for this example. It's what Wolf 3D does, because it's pretty typical for most or all of the screen to change, or at least enough of it that trying to update only parts of it wasn't worth the effort. But you might find ways to do better.&lt;/p&gt;&#xA;&lt;p&gt;The first step is to set the Direct register to point to $2000, the first byte of the SHR buffer:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;          lda #$2000&#xA;          tcd&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now we can use direct page instructions (which typically use one cycle less than their absolute equivalents) to access the first page (256 bytes) of the buffer. That alone sounds like a win, and it is, but we can do better.&lt;/p&gt;&#xA;&lt;p&gt;The next step is to point the stack pointer at $20FF, which is the last byte in the first page of the SHR buffer:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;          clc&#xA;          adc #$00FF&#xA;          tcs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This takes the $2000 already in the accumulator, adds $FF, and stores the result ($20FF) into the stack pointer. We calculate the value because we'll be looping back up here later.&lt;/p&gt;&#xA;&lt;p&gt;Now it's time to copy a page of screen data on top of itself, so that that page of data is shadowed to the main SHR buffer in bank $E1. By default, you think that you'll need a loop of reading a word, then writing a word, over and over. But it turns out that with our direct page and stack configured the way we have them, there's a way to combine reading and writing into a single instruction!&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;PEI&lt;/code&gt; (Push Effective Indirect) instruction isn't used as often as it should be. It fetches a word from the direct page and pushes it onto the stack in one smooth operation.&lt;/p&gt;&#xA;&lt;p&gt;So consider this: our stack now starts at $20FF and works backward toward $2000 with each push. The direct page starts at $2000 and extends up to $20FF. That means they overlap, occupying exactly the same memory. So &lt;code&gt;PEI&lt;/code&gt; can be used to copy a value on top of itself in this space, if we use it just right. Here's how:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;          pei $FE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This one instruction takes the value located at offset $FE on the direct page (that is, at $01/20FE-20FF) and pushes it onto the stack. Since the stack pointer is at $20FF, the result is that the value is written on top of itself, using a two-byte, 6-cycle operation to refresh two bytes of the screen.&lt;/p&gt;&#xA;&lt;p&gt;So all we need to do to copy the entire page over is to have a series of 128 &lt;code&gt;PEI&lt;/code&gt;s in a row. We do this instead of using a loop because a loop just adds overhead, and every cycle counts when you're doing this — especially since interrupts are disabled, and we can only leave them disabled for so long. This code looks like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;          pei $FE&#xA;          pei $FC&#xA;          pei $FA&#xA;          pei $F8&#xA;          ...&#xA;          pei $06&#xA;          pei $04&#xA;          pei $02&#xA;          pei $00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Once you've finished copying the page, update the Direct register and Stack pointer (to $2100 and $21FF) and do it over and over, adding $0100 to each register every time a page finishes copying.&lt;/p&gt;&#xA;&lt;p&gt;There are two tricks.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Trick 1: Periodically enable interrupts&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;First, you need to periodically switch bank $00 back into place and re-enable interrupts so that MIDISynth, GS/OS, and other users of interrupts have an opportunity to be serviced. The operating system cannot keep functioning properly if you don't allow it to periodically handle interrupts, and music and sound effects will not play correctly if their interrupts aren't processed.&lt;/p&gt;&#xA;&lt;p&gt;Also, AppleTalk networks will be disconnected if interrupts are disabled for more than 104.167µsec — another reason to be careful with how long you leave interrupts disabled.&lt;/p&gt;&#xA;&lt;p&gt;Wolfenstein 3D re-enables interrupts after every seventh page is copied), like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;          sep #$20&#xA;          sta &amp;gt;RDMAINRAM          ; Read from bank $00&#xA;          sta &amp;gt;WRMAINRAM          ; Write to bank $00&#xA;          rep #$20&#xA;          lda entryStack          ; Retrieve the original stack pointer&#xA;          tcs                     ; Then restore the stack to there&#xA;          lda entryDP             ; Then do the same thing for the direct page&#xA;          tcd&#xA;          cli                     ; Enable interrupts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;As soon as that &lt;code&gt;CLI&lt;/code&gt; (CLear Interrupt disable) instruction is executed, any pending interrupts are processed before our code continues to execute. That means we can immediately disable interrupts again and restore our work environment to continue to copy the screen:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;          sei                     ; Disable interrupts&#xA;          sep #$20&#xA;          sta &amp;gt;RDCARDRAM          ; Read from bank $01&#xA;          sta &amp;gt;WRCARDRAM          ; Write to bank $01&#xA;          rep #$20&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now all you have to do is restore the stack and direct page to where you left off and pick up where you left off. Keep going until you reach $9D00 (or $A000 if you need to update the palettes and SCBs). You can of course also stop sooner if you only need to update certain rows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Trick 2: Insert NOPs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Due to the intricacies of how the 65816's cycle timing works, you can actually improve the performance of your PEI-slamming code by inserting a &lt;code&gt;NOP&lt;/code&gt; instruction after each 8th &lt;code&gt;PEI&lt;/code&gt;. &lt;em&gt;There are some sources that say to put it after every 13th &lt;code&gt;PEI&lt;/code&gt;. It's unclear which is correct; Wolfenstein 3D does it every 8th one, however.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;This technique takes some getting used to, and has a lot of ways you can mess it up (by failing to toggle a softswitch at the right point, usually, or by imbalance between the stack and direct page locations you're using). But once you get it down, it's among the fastest, if not the very fastest, ways to blit to the Apple IIgs screen using a back buffer.&lt;/p&gt;&#xA;" OwnerUserId="72" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-05-04T03:02:02.383" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="231" PostTypeId="5" CreationDate="2016-04-22T22:41:34.210" Score="0" Body="&lt;p&gt;The W65C816S, commonly referred to simply as the 65816, was developed by Western Design Center in 1983.  It's an enhanced version of the 65C02, featuring 16-bit registers and 24-bit memory addressing.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-23T16:39:34.663" LastActivityDate="2016-04-23T16:39:34.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="232" PostTypeId="4" CreationDate="2016-04-22T22:41:34.210" Score="0" Body="Discussions related to the 65816 CPU." OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-23T16:40:17.353" LastActivityDate="2016-04-23T16:40:17.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="233" PostTypeId="2" ParentId="197" CreationDate="2016-04-23T00:21:46.880" Score="15" Body="&lt;p&gt;It seems the 6502C &quot;Sally&quot; &lt;a href=&quot;http://sleepingelephant.com/ipw-web/bulletin/bb/viewtopic.php?t=4215#p51042&quot;&gt;added&lt;/a&gt; a HALT pin to allow Atari to &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_8-bit_family#Liz&quot;&gt;remove four support chips&lt;/a&gt; and thereby build cost-reduced versions of the Atari 400 and 800.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-04-23T00:21:46.880" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="234" PostTypeId="1" AcceptedAnswerId="238" CreationDate="2016-04-23T09:19:18.660" Score="31" ViewCount="4079" Body="&lt;p&gt;The capacity in Amiga Old File System format (OFS, OS version 1.x) was 840KB, with the Fast File System (&quot;FFS&quot; (!)) introduced for OS 2.x onwards able to store 880KB. The PC format stored 720KB on the same density disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amigas had the same 3.5&quot; disks and disk drives as PCs with Dual Density (DD) disk drives (or at least the same capability with respect to physical data density; see &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/104/what-modification-is-required-from-a-pc-floppy-for-use-in-amiga?rq=1&quot;&gt;this post&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Floppy_disk_variants#Commodore_Amiga&quot; rel=&quot;noreferrer&quot;&gt;this link&lt;/a&gt; for more details).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the capacity increase from OFS to FFS came from taking 24 bytes per 512 byte sector into use for data storage instead of redundancy/CRC/future use. I am guessing the difference between PC and Amiga formats is similarly down to differing amounts of disk space for housekeeping/error redundancy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(For example, PC drives were notably faster at listing directories, except when compared to the Directory Cache mode introduced for the Amiga (D)OS 3.x, which gave comparable listing speed at some storage cost.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know in more detail what the differences are?&lt;/p&gt;&#xA;" OwnerUserId="141" LastEditorUserId="11916" LastEditDate="2019-10-19T08:10:52.577" LastActivityDate="2020-01-28T20:44:02.407" Title="What were the differences in floppy disk formats between Amiga and IBM/PC compatible computers?" Tags="&lt;amiga&gt;&lt;ibm-pc&gt;&lt;floppy-disk&gt;&lt;file-format&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="235" PostTypeId="2" ParentId="223" CreationDate="2016-04-23T09:22:02.327" Score="7" Body="&lt;p&gt;regular user of the MSX-C compiler here. MSX-C is a rebranded version of the LSI-C 80 compiler bundled with an MSX-specific library. It comes with the same limitations and benefits:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;PRO: When calling functions, MSX-C passes arguments on the CPU registers instead of the stack (as SDCC or Hitech-C do). This results in a big performance improvement in programs that do a lot of function calling.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CON: The compiler doesn't do any memory switching during the compile process. This means that you run out of memory quickly when developing complex programs. This forces the developer to split the program in smaller units and compile/link per parts.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CON: MSX-C only understands K&amp;amp;R C. SDCC and Hitech-C support more modern dialects of C.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;PRO: MSX-C runs natively on the MSX. There's no need to waste time compiling under Linux/Windows and moving the binary to the MSX.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In my opinion, just writing a compiler for MSX able to use the memory mapper would be a huge improvement. Running out of memory is the biggest annoyance I've found so far.&lt;/p&gt;&#xA;" OwnerUserId="234" LastActivityDate="2016-04-23T09:22:02.327" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="236" PostTypeId="2" ParentId="168" CreationDate="2016-04-23T09:28:49.910" Score="10" Body="&lt;p&gt;As has been mentioned already, the most common reason is flame retardants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've found that the easiest way to restore the original color is hydrogen peroxyde + UV light (either from the Sun or from an UV lamp).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some time ago I restored an MSX turbo R and documented the process, including whitening the case and keyboard. &lt;a href=&quot;http://www.lavandeira.net/2015/05/restoration-and-whitening-of-a-panasonic-fs-a1st/&quot;&gt;Here's the link&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="234" LastActivityDate="2016-04-23T09:28:49.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="237" PostTypeId="1" AcceptedAnswerId="246" CreationDate="2016-04-23T10:00:05.657" Score="18" ViewCount="4670" Body="&lt;p&gt;During a recent move I lost the monitor for my Amstrad CPC464. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to adapt the output of this to work on a modern monitor or on television set?&lt;/p&gt;&#xA;" OwnerUserId="143" LastEditorUserId="276" LastEditDate="2016-12-22T13:18:30.050" LastActivityDate="2016-12-22T13:18:30.050" Title="Is it possible to use an Amstrad CPC464 with a modern monitor or TV" Tags="&lt;display&gt;&lt;cpc&gt;&lt;cpc464&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="238" PostTypeId="2" ParentId="234" CreationDate="2016-04-23T11:19:15.820" Score="30" Body="&lt;p&gt;The Amiga disk format stores 512 bytes per sector, 11 sectors per track (a track is one side of a cylinder), double sided (i. e. 2 tracks per cylinder) with 80 cylinders per disk, which makes 80 * 2 * 11 * 512 = 901120 bytes = 901.12 kB = 880 KiB raw block data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM-PC format also stores 512 bytes per sector, but only 9 sectors per track (on a Double Density (DD) disk, as opposed to a High Density (HD) disk), also double sided, also 80 cylinders per disk, which yields 80 * 2 * 9 * 512 = 737280 bytes = 737.28 kB = 720 KiB raw block data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neither of those formats is able to achieve that nominal amount when you sum the sizes of the files stored on disk. The more obvious reason is that you always need to store metadata such as filenames, dates, subdirectories, etc. as well. The other reason is that on those filesystems file data always occupies a multiple of some unit (a block on Amiga OFS/FFS and a cluster - consisting of multiple blocks - on MS-DOS FAT12) and if the file size doesn't exactly equal that multiple, some bytes of the last block or cluster are wasted where no useful data is stored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are right that the Amiga OFS format also stores housekeeping information on each data block (a block that is used for the contents of the file, as opposed to a block that is used for the file metadata or directory data), so only 488 bytes of each 512 byte block can be used for actual file data, while the Amiga FFS (Fast Filesystem) format uses all 512 bytes of a data block for file data and doesn't store redundant housekeeping information there, that's why you can in general put some more data onto FFS disks than on OFS disks (unless no file on the disk is larger than 488 bytes or your disk content consists only of directories and subdirectories, in which case you can store the same amount).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The speed difference when reading a directory likely comes from the vastly different way each filesystem (Amiga OFS/FFS vs. MS-DOS FAT12) stores directory information on the disk:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-DOS FAT12 groups several file metadata structures (that include filename, protection bits, change date, first cluster, etc.) into one block while Amiga OFS/FFS has one file metadata block per file (OFS/FFS directory blocks just store a pointer to the first file metadata block and a hash table for quickly finding a file/subdirectory if you access it directly by filename). That means to list a directory and the names of its contained items, you have to load fewer blocks from a FAT12 formatted disk than from an OFS/FFS disk.&lt;/p&gt;&#xA;" OwnerUserId="92" LastEditorUserId="92" LastEditDate="2016-04-23T11:54:07.437" LastActivityDate="2016-04-23T11:54:07.437" CommentCount="19" ContentLicense="CC BY-SA 3.0" />
  <row Id="239" PostTypeId="1" CreationDate="2016-04-23T13:49:15.370" Score="18" ViewCount="1076" Body="&lt;p&gt;Are there any automated test suites for MOS 6520, 6522 and 6526 chips? I am looking for test suites aimed at making sure datasheet-based independent reimplementations of the above chips (e.g. FPGAs or emulators) work exactly as the real chips.&lt;/p&gt;&#xA;" OwnerUserId="115" LastEditorUserId="115" LastEditDate="2016-05-30T01:35:15.370" LastActivityDate="2018-01-07T18:46:33.573" Title="Comprehensive test suites for MOS 6520 PIA / 6522 VIA / 6526 CIA" Tags="&lt;mos-6520&gt;&lt;mos-6522&gt;&lt;mos-6526&gt;&lt;testing&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="240" PostTypeId="5" CreationDate="2016-04-23T13:54:08.787" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-23T13:54:08.787" LastActivityDate="2016-04-23T13:54:08.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="241" PostTypeId="4" CreationDate="2016-04-23T13:54:08.787" Score="0" Body="Questions about the MOS 6520 PIA (Peripheral Interface Adapter) chip, used in e.g. the Commodore PET home computer" OwnerUserId="115" LastEditorUserId="115" LastEditDate="2016-04-23T16:40:00.493" LastActivityDate="2016-04-23T16:40:00.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="242" PostTypeId="5" CreationDate="2016-04-23T13:55:45.890" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-23T13:55:45.890" LastActivityDate="2016-04-23T13:55:45.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="243" PostTypeId="4" CreationDate="2016-04-23T13:55:45.890" Score="0" Body="Questions about the MOS 6522 VIA (Versatile Interface Adapter) chip, used in e.g. the Commodore PET and the BBC Micro home computers." OwnerUserId="115" LastEditorUserId="115" LastEditDate="2016-04-23T16:39:38.943" LastActivityDate="2016-04-23T16:39:38.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="244" PostTypeId="5" CreationDate="2016-04-23T13:56:54.317" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-23T13:56:54.317" LastActivityDate="2016-04-23T13:56:54.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="245" PostTypeId="4" CreationDate="2016-04-23T13:56:54.317" Score="0" Body="Questions about the MOS 6526 CIA (Complex Interface Adapter) chip, used in e.g. the Commodore 64 home computer and the Commodore 1570/1571 floppy drives. " OwnerUserId="115" LastEditorUserId="367" LastEditDate="2016-06-05T12:50:55.370" LastActivityDate="2016-06-05T12:50:55.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="246" PostTypeId="2" ParentId="237" CreationDate="2016-04-23T15:15:45.033" Score="20" Body="&lt;p&gt;Yes, it is possible. There are a number of ways:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If your TV has a SCART connector, you need a cable adapter from DIN 6 to SCART, wired like this (the audio is taken from the audio out using a standard stereo 3.5'' jack):&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(taken from CPCwiki)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FaXY9.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FaXY9.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If your TV does not have SCART, but composite video input, you must&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Either use a RGB to CVBS adapter (using for example an AD724 chip), or&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;if you don't mind having a B&amp;amp;W signal, you can make an easier adapter by taking pin 6 (LUMA) to the CVBS input.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For the first solution, we did a small batch of a little PCB that holds an AD724 and associated components to get a cheap RGB to CVBS/S-Video adapter. This is the schematic:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Vtn92.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Vtn92.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this is the board, almost finished:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Djk8E.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Djk8E.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If your TV has an HDMI input, then the solution is to wire a cable adapter as first explained, and then use a SCART-to-HDMI upscaler.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GVuhF.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GVuhF.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For a VGA monitor, use a RGB-to-VGA converter. They are very common and used in custom arcade cabinets.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eB1Ap.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eB1Ap.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have one of these, and this is how my CPC6128 looks in a TFT monitor :) (it looks darker but that is because of the short exposure of my camera)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/INEZD.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/INEZD.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-04-23T15:15:45.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="247" PostTypeId="5" CreationDate="2016-04-23T15:51:32.547" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-23T15:51:32.547" LastActivityDate="2016-04-23T15:51:32.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="248" PostTypeId="4" CreationDate="2016-04-23T15:51:32.547" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-23T15:51:32.547" LastActivityDate="2016-04-23T15:51:32.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="249" PostTypeId="1" CreationDate="2016-04-23T17:13:44.987" Score="15" ViewCount="1035" Body="&lt;p&gt;What information is encoded in Amiga's 22-digit barcodes?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example: 0103791363642010121234&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="4476" LastEditDate="2017-02-24T21:58:28.393" LastActivityDate="2018-08-31T13:57:51.177" Title="What information is encoded in the 22-digit barcodes on the Amiga's case?" Tags="&lt;amiga&gt;&lt;barcode&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="250" PostTypeId="2" ParentId="249" CreationDate="2016-04-23T17:13:44.987" Score="17" Body="&lt;p&gt;I couldn't find this information online, so I collected and compared some serial numbers. The first three digits appear to be the location of manufacture:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;010 is Hong Kong&lt;/li&gt;&#xA;&lt;li&gt;012 is China&lt;/li&gt;&#xA;&lt;li&gt;401 is U.K.&lt;/li&gt;&#xA;&lt;li&gt;851 is Philippines&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(However, I found some Post-Commodore Escom Amiga 1200's, all made in France, with country codes 260, 364, 464, and 564.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next two digits are the week number, followed by 2 digits for the year. For example, &quot;3791&quot; specifies September 1991. (This convention appears to have survived through the Escom era.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The remaining digits are the product ID or model number followed by the serial number, but I don't know exactly how many digits were used for each or even if it stayed consistent through the end of Commodore.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-04-23T17:13:44.987" CommentCount="0" CommunityOwnedDate="2016-04-23T17:13:44.987" ContentLicense="CC BY-SA 3.0" />
  <row Id="251" PostTypeId="1" AcceptedAnswerId="255" CreationDate="2016-04-23T17:41:19.280" Score="18" ViewCount="653" Body="&lt;p&gt;I remember that a LOT of games for my MSX (I live in Brazil) don't work without some modification. For example, several need some kind of tweak on the loader, like &lt;code&gt;poke -1,0&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know what are the causes that make those adjustments necessary: Some kind of hardware spec that don't follow the guidelines, or lack of knowledge on those guidelines by developers, or something else?  &lt;/p&gt;&#xA;" OwnerUserId="225" LastEditorDisplayName="user12" LastEditDate="2016-04-23T22:27:14.410" LastActivityDate="2016-04-26T19:14:23.800" Title="What are the common sources of incompatibility on different MSX computers?" Tags="&lt;msx&gt;&lt;compatibility&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="252" PostTypeId="2" ParentId="89" CreationDate="2016-04-23T20:31:23.403" Score="7" Body="&lt;p&gt;The other responses here are correct (except the spudger, IMO -- it might work but isn't really the tool being asked about here).  The ones I remember looked different, like in this picture which I'll include in case someone finds one and isn't sure what it does.  They worked like the bulldog clip... stick in the crack at the top of the classic-type Mac and wedge the case apart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/90oWB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/90oWB.jpg&quot; alt=&quot;Picture of rotating case cracker and long torx wrench, plus the bigger style wedge type.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11" LastActivityDate="2016-04-23T20:31:23.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="253" PostTypeId="1" CreationDate="2016-04-23T20:41:32.870" Score="3" ViewCount="635" Body="&lt;p&gt;I'm trying to complete the original Ultima I on an Apple //e.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://guides.gamercorner.net/ultimai/space/&quot; rel=&quot;nofollow noreferrer&quot;&gt;These instructions&lt;/a&gt; explain space flight, but I can't seem to destroy enemy ships in order to become a Space Ace, even when I should be able to.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="278" LastEditDate="2018-12-31T23:41:34.587" LastActivityDate="2018-12-31T23:41:34.587" Title="Why won't the game &quot;Ultima I&quot; work on my Apple IIe system?" Tags="&lt;apple-ii&gt;&lt;undocumented-opcodes&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2016-04-24T13:57:50.673" ContentLicense="CC BY-SA 4.0" />
  <row Id="254" PostTypeId="2" ParentId="253" CreationDate="2016-04-23T21:49:14.147" Score="12" Body="&lt;p&gt;Are you using an enhanced //e? If so you'll need to get a patched copy, or copy and &lt;a href=&quot;https://groups.google.com/forum/#!searchin/comp.sys.apple2/ultima$20space$20ace/comp.sys.apple2/rEwRhM5hsHI/Z7knStMvSvUJ&quot;&gt;patch yours&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original (non-remake) Apple II version uses an undocumented 6502 opcode in the space flight code. This makes it impossible to hit the alien ships when running on a 65C02.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fix is in file &quot;FGT3&quot;. Change the bytes at 74D1 to 46 43 45 43 (all hex).&lt;/p&gt;&#xA;" OwnerUserId="71" LastActivityDate="2016-04-23T21:49:14.147" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="255" PostTypeId="2" ParentId="251" CreationDate="2016-04-24T00:32:39.630" Score="15" Body="&lt;p&gt;Seemingly there is an &lt;a href=&quot;https://www.msx.org/wiki/MSX_compatibility_problems&quot;&gt;entire page&lt;/a&gt; dedicated to this (by the MSX wiki).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the time, programmers programmed code like how they usually did with the Commodore 64 and ZX-Spectrum and completely ignored the standards made by MSX computers at the time due to the brand new concept of &quot;home computer standard&quot;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The main reason why we see compatibility problems is that companies that produced software and games tried to program the MSX the way they were used to on ZX-spectrum, C64, and other platforms of that time. The whole concept of &quot;Home computer standard&quot; was a new thing to game coders, so they usually completely ignored the MSX standard definitions because on specific parts of the world there were only a few different MSX1 machines for sale. If the game worked on those few machines then they tough it was fine. It might have been that they were not even aware of MSX2, disk drive etc... or those kind of things just sounded like &quot;not interesting abnormal peculiarity in business means&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are lots of reasons why incompatibility finds its way(s) into MSX computers: assuming RAM would be present at a given slot, directly accessing I/O ports, bugs with subslot handling, ignoring MSX-DOS or MSX-Disk BIOS coding guidelines and assuming that only MSX-DOS1 would ever be possible, etc:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;The programmers assumed that the RAM would be present on a given slot, and hardcoded it into the program&lt;/li&gt;&#xA;  &lt;li&gt;Bugs on subslot handling: the game doesn't support subslots or has a bug for subslots on a specific slot. This also applies to believing that some resources couldn't ever be present on a specific slot (ram on slot 0-x, for example).&lt;/li&gt;&#xA;  &lt;li&gt;Directly accessing I/O ports, as this isn't allowed by the standard, or by doing hardcoded VDP I/O access. This causes problem on upgrades or allowed hardware variations, like the MSX2 upgrade cartridges. It also causes the program to fail to use alternate implementations of a given extension, like the RS-232 or the MSX-Music. It's a known troublemaker for games that do direct I/O on the MemoryMapper ports, making them incompatible with MSX-DOS2. On some machines, it's known to cause problems with certain joysticks.&lt;/li&gt;&#xA;  &lt;li&gt;Directly jumping into the BIOS routines, instead of using the default jump-table interface.&lt;/li&gt;&#xA;  &lt;li&gt;Incorrect CALLs for the SubROM on MSX&gt;=2 machines. It's difficult to call the SubROM from DOS, and programmers tried unofficial tricks that cause problems on many machines.&lt;/li&gt;&#xA;  &lt;li&gt;Assumption that the CPU would ever have 3.57MHz. This causes problems on turbo machines, which run such games too fast.&lt;/li&gt;&#xA;  &lt;li&gt;Assumption that the amount of free memory on BASIC would always be a given amount (like 28815 or 24972 bytes). But floppy-equipped models had less free RAM. This is often solved by holding [CTRL] key pressed while booting the MSX. That way only 1 drive is initialized, which frees up some memory. If that is not enough (like the case with many cassette games) the whole disk drive needs to be disabled. This can be done by holding [SHIFT] key pressed while booting the MSX.&lt;/li&gt;&#xA;  &lt;li&gt;Ignoring MSX-DOS or MSX-Disk BIOS coding guidelines and assuming that only MSX-DOS1 would ever be possible. This causes many programs to freeze when run on MSX-DOS2&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="37" LastEditorUserId="133" LastEditDate="2016-04-24T22:15:42.443" LastActivityDate="2016-04-24T22:15:42.443" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="256" PostTypeId="1" AcceptedAnswerId="258" CreationDate="2016-04-24T01:55:15.100" Score="16" ViewCount="3009" Body="&lt;p&gt;The Amiga computers such as the Amiga 1000 required a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kickstart_(Amiga)&quot;&gt;Kickstart floppy&lt;/a&gt; to be able to boot directly into a hard drive. I have a Amiga 1000 as well but missing the Kickstart floppy. I would like to access the hard drive for my personal use with the floppy without damaging any of the internals of the Amiga 1000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I safely and effectively boot directly to the hard drive with an Amiga 1000 without the necessary Kickstart floppy?&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="11916" LastEditDate="2019-04-07T22:09:07.327" LastActivityDate="2019-04-07T22:09:07.327" Title="Booting an Amiga 1000 directly to the hard drive without Kickstart floppy" Tags="&lt;amiga&gt;&lt;boot&gt;&lt;amiga-1000&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="257" PostTypeId="1" CreationDate="2016-04-24T02:01:01.433" Score="15" ViewCount="916" Body="&lt;p&gt;My friend has a Atari 800XL in mint condition. When the device was turned on, the only thing that appeared was a dark red screen. Another friend of mine figured that the memory chips were to blame, and he was nearly right: the memory chips were smoking hot. The memory chips were replaced with more advanced ones (Atari compatible of course) but the screen is still there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What can I do to determine and fix the cause of the red screen (you could consider it the blue screen of death...)?&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2016-04-24T13:20:43.230" LastActivityDate="2018-05-31T09:23:18.887" Title="Atari 800XL showing a red screen" Tags="&lt;atari&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="258" PostTypeId="2" ParentId="256" CreationDate="2016-04-24T03:33:44.250" Score="11" Body="&lt;p&gt;You need a Kickstart ROM adapter to eliminate the need for the Kickstart disk. There are a number of such adapters out there such as &lt;a href=&quot;http://www.amibay.com/showthread.php?59904-Automatic-Kickstart-Switcher-for-Amiga-1000-PERFECT-WORKING&quot;&gt;this one&lt;/a&gt; that's currently in production.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And to boot to a hard drive, you will need a Kickstart 1.3 (or greater) &lt;a href=&quot;http://amigakit.leamancomputing.com/catalog/product_info.php?products_id=672&quot;&gt;ROM&lt;/a&gt; (I think the linked one will work).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can boot to a SCSI hard drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should also mention the &lt;a href=&quot;http://wiki.icomp.de/wiki/ACA500&quot;&gt;ACA500&lt;/a&gt; accelerator which includes Kickstart 1.3 and 3.1 (no Kickstart adapter necessary) and two CompactFlash slots which replace a hard drive. &lt;a href=&quot;https://www.youtube.com/watch?v=vbeRvkjs1og&quot;&gt;Here&lt;/a&gt; is a video showing it connected to the Amiga 1000, with another accelerator plugged into it.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2016-04-24T03:46:32.537" LastActivityDate="2016-04-24T03:46:32.537" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="259" PostTypeId="1" CreationDate="2016-04-24T13:14:14.350" Score="22" ViewCount="1480" Body="&lt;p&gt;The Amiga computers would by default automatically detect a disk being inserted and respond by reading from it and displaying its icon.&#xA;Polling the drive(s) for a new disk would produce a clicking sound every 1-2s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If one had more than one drive or used the computer hard drive only with no disk(s) inserted, the drive checking sound would keep going.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Patches existed to stop this without loss of the auto-detection of inserted disks - how did these work?&lt;/p&gt;&#xA;" OwnerUserId="141" LastActivityDate="2020-12-28T12:19:38.637" Title="How did programs/patches stopping Amiga idle floppy drive noise work?" Tags="&lt;amiga&gt;&lt;disk-drive&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="260" PostTypeId="2" ParentId="259" CreationDate="2016-04-24T13:14:14.350" Score="21" Body="&lt;p&gt;The sound came from the fact that drives would only report on the presence of a disk if the heads were moved. Thus by default, the OS would move the heads back and forth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, the heads could be moved fully to one side and then asked to step further to that side (by default the heads would be centered to minimise seek time or read the central rootblock immediately).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most drives would then refuse to move the heads, but report on disk presence anyway. (Some older drives would not, therefore if a noise was still heard after trying the patch, it was time to reboot and not try again!)&lt;/p&gt;&#xA;" OwnerUserId="141" LastActivityDate="2016-04-24T13:14:14.350" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="261" PostTypeId="5" CreationDate="2016-04-24T13:49:04.020" Score="0" Body="&lt;p&gt;Questions about the actual media such as 5.25&quot; or 3.25&quot; disks or disk data formats should be tagged with &lt;a href=&quot;/questions/tagged/floppy-disk&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;floppy-disk&amp;#39;&quot; rel=&quot;tag&quot;&gt;floppy-disk&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;/questions/tagged/hard-disk&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;hard-disk&amp;#39;&quot; rel=&quot;tag&quot;&gt;hard-disk&lt;/a&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Questions about optical drives and media (e.g. &lt;a href=&quot;/questions/tagged/lvrom&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;lvrom&amp;#39;&quot; rel=&quot;tag&quot;&gt;lvrom&lt;/a&gt;) should be tagged separately.&lt;/p&gt;&#xA;" OwnerUserId="141" LastEditorUserId="278" LastEditDate="2017-01-03T18:47:08.820" LastActivityDate="2017-01-03T18:47:08.820" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="262" PostTypeId="4" CreationDate="2016-04-24T13:49:04.020" Score="0" Body="For questions about computer disk drives for removable magnetic storage media." OwnerUserId="141" LastEditorUserId="141" LastEditDate="2016-04-26T13:19:56.850" LastActivityDate="2016-04-26T13:19:56.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="263" PostTypeId="1" AcceptedAnswerId="268" CreationDate="2016-04-24T19:52:04.097" Score="20" ViewCount="714" Body="&lt;p&gt;...or for that matter, what didn't it do, so that you'd use the &quot;bootloader/main program&quot; separation instead of loading everything at once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally, when loading games or any non-BASIC software from tapes, you'd start the computer holding &lt;kbd&gt;START&lt;/kbd&gt;+&lt;kbd&gt;OPTION&lt;/kbd&gt; - it disabled BASIC ROM and started it in 'boot' mode. A characteristic deep beep sounded, you'd press 'play' on the cassette recorder, then Return on the keyboard. Some 8-10 seconds of high-pitched constant lead-in, then six (very rarely any other number) records of data from the tape, another deep beep, and another lead-in. At that point often the screen would change, to show some countdown, ads, welcome, or whatever extras the bootloader contained. The game proper would begin loading, and start when it finished loading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I never understood the waste: obviously the bootloader was a program, and often quite fancy one. Why couldn't the whole game be implemented as a bootloader? Why waste time on the two start-up procedures, two lead-ins, and a piece of software that was usually overwritten by the game when it finished loading? What were the shortcomings/restrictions of the bootloader so that it was universally implemented in such a minimal form, instead of just being the full application/game?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;Just to clarify:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;about the most common, generic bootloader didn't print anything or affect the screen in any way.&lt;/li&gt;&#xA;&lt;li&gt;you couldn't just fast forward past the bootloader and start from the game proper. It wouldn't load, generating a 'BOOT ERROR' message instead.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="74" LastEditorUserId="6659" LastEditDate="2017-12-01T11:53:25.400" LastActivityDate="2017-12-01T11:53:25.400" Title="What did the cassette bootloader in 8 Bit Ataris do?" Tags="&lt;atari&gt;&lt;atari-800&gt;&lt;boot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="265" PostTypeId="2" ParentId="257" CreationDate="2016-04-24T23:54:18.363" Score="9" Body="&lt;p&gt;Super hot chips are usually dead chips. That said, with the Atari one common culprit is a bad power supply — certain models are known to go bad in a way that results in excessive voltage at the socket, which can easily fry multiple ICs on the motherboard.&lt;/p&gt;&#xA;&lt;p&gt;So first step would be to verify the power supply is good (preferably by not connecting it to another machine!) Use a multimeter to check for steady 5V on the relevant pins. Note this diagram is viewing the socket, i.e. the &lt;em&gt;back&lt;/em&gt; of the plug.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/y53Xv.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y53Xv.gif&quot; alt=&quot;Atari 8-bit pinout, viewing from the back of the plug, or looking at the socket&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If the power supply is dead you can actually power these things from a USB wall wart if you put a cable together, I've even run one off the TV it was connected to!&lt;/p&gt;&#xA;&lt;p&gt;Once that's been verified as good you you need to work out what else might be wrong. An oscilloscope/logic analyser is one way to do it, but far easier (especially if it's a socketed machine) is to swap ICs with a known good machine.&lt;/p&gt;&#xA;&lt;p&gt;I had a machine that only showed dark red, and although this commonly seems to be the RAM or the GTIA, for me it just needed a replacement CPU which I managed to source easily enough online. Good luck!&lt;/p&gt;&#xA;" OwnerUserId="107" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-04-24T23:54:18.363" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="267" PostTypeId="2" ParentId="162" CreationDate="2016-04-25T08:31:47.250" Score="6" Body="&lt;p&gt;The three commands correspond to three different storage formats.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;CSAVE&lt;/code&gt; drives the cassette recorder directly, and stores tokenized files using short inter-record gaps. This is the fastest mode (both when writing and reading) since it uses a compact representation and doesn't need to wait for the tape.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SAVE &quot;C:&quot;&lt;/code&gt; uses the cassette tape driver, and stores tokenized files in the standard tape format with long inter-record gaps.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LIST &quot;C:&quot;&lt;/code&gt; again uses the cassette tape driver, but it stores text files containing the BASIC listing in ATASCII. This is the slowest mode since it uses a verbose representation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;LIST &quot;C:&quot;&lt;/code&gt; provides the best compatibility, since any program which can read text files can load the listing. It also avoids the &lt;a href=&quot;http://www.atarimagazines.com/compute/issue61/323_1_INSIGHT_Atari.php&quot; rel=&quot;noreferrer&quot;&gt;Rev. B BASIC bug&lt;/a&gt; which causes programs to grow by 16 bytes every time they're loaded.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-04-25T08:31:47.250" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="268" PostTypeId="2" ParentId="263" CreationDate="2016-04-25T08:43:22.540" Score="19" Body="&lt;p&gt;&lt;a href=&quot;http://www.atariarchives.org/dere/chaptC.php&quot; rel=&quot;noreferrer&quot;&gt;De Re Atari&lt;/a&gt; describes the cassette boot protocol, which helps understand why bootloaders were (nearly) always used. In cassette boot mode, the operating system reads a record from the tape recorder and loads the following information:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;byte 2 gives the number of records to load (up to 256 records, each containing 128 bytes, so 32 KB in theory)&lt;/li&gt;&#xA;&lt;li&gt;bytes 3 and 4 give the address at which the tape must be loaded&lt;/li&gt;&#xA;&lt;li&gt;bytes 5 and 6 give the address of the initialisation routine which must be called once the given number of records have been loaded and the first-stage initialisation has completed&lt;/li&gt;&#xA;&lt;li&gt;the remaining bytes contain code which is called (&lt;code&gt;JSR&lt;/code&gt;) once the given number of records have been loaded&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The operating system expects the code called at this point to return success or failure; if it indicates success, the initialisation routine pointed to by bytes 5 and 6 is called (&lt;code&gt;JSR&lt;/code&gt; again), and when that returns, control is transferred to &lt;code&gt;DOSVEC&lt;/code&gt; using a plain &lt;code&gt;JMP&lt;/code&gt;, so &lt;code&gt;DOSVEC&lt;/code&gt; must be set up too. Once the tape had been loaded, &lt;kbd&gt;RESET&lt;/kbd&gt; restarts the second-stage initialisation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the cassette boot protocol expects a three-stage boot in any case. Since the cassette boot loads the tape linearly, it makes sense to use a tape-specific boot loader: the vast majority of programs would have a non-linear memory layout, so dumping all of memory to tape would just result in even longer load times than strictly necessary. Having a boot program allows various records to be loaded from tape into the appropriate location, and it allows &lt;kbd&gt;RESET&lt;/kbd&gt; to be handled without reloading everything from tape. As pointed out by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/382/bjb&quot;&gt;bjb&lt;/a&gt;, it also allows requirements to be checked before spending lots of time loading the tape: a program requiring 48 KB can thus abort on a 16 KB system early on. Obviously for anything larger than 32 KB it's required anyway...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-12-01T10:00:48.323" LastActivityDate="2017-12-01T10:00:48.323" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="269" PostTypeId="1" AcceptedAnswerId="270" CreationDate="2016-04-25T09:31:44.043" Score="17" ViewCount="537" Body="&lt;p&gt;Some time ago, I benchmarked some 8-bit computers to find out the fastest BASIC interpreter. I ended up using the classic SAXPY benchmark, as I didn't want any I/O overhead to fool the measurement: printing on screen is slower for machines that doesn't have a real text mode and always operate in bitmap mode and it doesn't have to do with the BASIC interpreter itself. On the other hand, aritmetic routines play an important part in any BASIC program, so the benchmark does precisely that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to add some other machines to this list, so I need to know how to measure time in frames (or equivalent resolution). For other computers, as you can see, the TIME or TIMER function is usually present in most BASIC dialects. For the Spectrum and the SAM Coupé, I already knew about the FRAMES system variable to count frames, but for others, I have to dig into technical documentation, which is not always available or easy to find/read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the current listing. NOTE: (&quot;Tiempo en segundos&quot; is the spanish for &quot;Time in seconds&quot;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The title says &quot;Results of SAXPY benchmark applied to 80's classic computers&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oQNRO.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oQNRO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE: thanks to Stephen Kitt answer, I can finally place the Atari XL, and it happens to be between the SAM Coupé and the ZX Spectrum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Stephen suggests, I will ask separate questions for finding out how to measure time for other micros.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cC1Iy.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cC1Iy.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="79" LastEditDate="2016-05-01T22:00:14.683" LastActivityDate="2018-12-14T00:48:06.047" Title="How can you measure time using BASIC on Atari XL computers?" Tags="&lt;atari-basic&gt;&lt;benchmarking&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="270" PostTypeId="2" ParentId="269" CreationDate="2016-04-25T10:24:31.253" Score="14" Body="&lt;p&gt;On the Atari 8-bit machines, you'd use the real-time clock memory locations starting at offset 18; these are updated during every vertical blank:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;TIME = INT((PEEK(18) * 65536 + PEEK(19) * 256 + PEEK(20))/60)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(on an NTSC system; divide by 50 for PAL).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To measure your own time interval, the safest approach is to &lt;code&gt;POKE&lt;/code&gt; all three values to 0 at the start of whatever you wish to measure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://www.atariarchives.org/mapping/memorymap.php&quot;&gt;Mapping the Atari&lt;/a&gt; for more details and &quot;links&quot; to example programs.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-04-25T10:24:31.253" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="271" PostTypeId="1" AcceptedAnswerId="447" CreationDate="2016-04-25T12:23:28.830" Score="13" ViewCount="588" Body="&lt;p&gt;&lt;em&gt;Personal Paint&lt;/em&gt; was a gfx program for Amiga that introduced many novel concepts, some quite ingenious, some... controversial. Among all, it had a &quot;crash protection&quot; feature, that was meant to enable you to rescue your work in case of some bad crashes. The feature was activated by a very unorthodox key sequence: &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Eject&lt;/kbd&gt;. You had to have a floppy in the drive to be ejected to trigger it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember reading its original documentation which mentioned that the 'floppy ejected' is about the only unmaskable interrupt that is accessible to the user; hijacking the handler they could have their rescue routine started even if the system was completely unresponsive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's about the scope of what I remember. I'd like to refresh my memory - what interrupt was that? Was it all snake oil or did it work (at least in theory)? Was this or similar technique used anywhere else?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="2056" LastEditDate="2016-07-03T07:05:55.570" LastActivityDate="2016-07-03T07:05:55.570" Title="What does Personal Paint documentation actually refer to by &quot;unmaskable interrupt&quot; for its &quot;crash protection feature&quot;?" Tags="&lt;amiga&gt;&lt;software&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="272" PostTypeId="1" CreationDate="2016-04-25T13:03:11.767" Score="16" ViewCount="408" Body="&lt;p&gt;I would like to know which program can be seen as the first malware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To define the term &quot;malware&quot; in this question, I would suggest those criteria, but you may modify them if you feel the need:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;real program, not just fiction&lt;/li&gt;&#xA;&lt;li&gt;written intentionally and not by accident&lt;/li&gt;&#xA;&lt;li&gt;able to infect a computer without the user's permission&lt;/li&gt;&#xA;&lt;li&gt;running malicious code on the target machine (spying, destroying data or even just printing a joke)&lt;/li&gt;&#xA;&lt;li&gt;able to replicate itself and autonomously infect further computers&lt;/li&gt;&#xA;&lt;li&gt;managed to escape the environment it was created in and infected foreign devices&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Who wrote this first malware, when, why (if known), for what target computers/operating systems and how exactly did it work?&lt;/p&gt;&#xA;" OwnerUserId="128" LastActivityDate="2016-04-26T20:37:46.870" Title="What was the first intentional malware that got spread over multiple machines?" Tags="&lt;malware&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="273" PostTypeId="2" ParentId="272" CreationDate="2016-04-25T13:34:30.100" Score="11" Body="&lt;p&gt;The first computer worm is reckoned to be &lt;a href=&quot;https://en.wikipedia.org/wiki/Creeper_%28program%29&quot;&gt;Creeper&lt;/a&gt;, which was written by Bob Thomas in 1971 and extended by Ray Tomlinson. It targeted DEC PDP-10 computers running TENEX. It would print &quot;I'm the creeper: catch me if you can&quot; on infected computers. It started off as an &lt;a href=&quot;http://history-computer.com/Internet/Maturing/Thomas.html&quot;&gt;experiment&lt;/a&gt; to demonstrate the ability to run software remotely, and move software around to take advantage of lightly-loaded systems; it did this using TENEX's RSEXEC server, and as such relied on the general openness of systems back then rather than exploiting a security hole. There's an interesting &lt;a href=&quot;http://nerdology.org/2014/11/qa-with-ray-tomlinson-on-creeper/&quot;&gt;interview of Ray Tomlinson&lt;/a&gt; which covers this in a little more detail.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-04-25T13:34:30.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="274" PostTypeId="2" ParentId="272" CreationDate="2016-04-25T14:40:57.287" Score="9" Body="&lt;p&gt;One of the first viruses to gain widespread attention was &quot;The Brain.&quot;  Two brothers from Lahore, Pakistan had written a heart monitoring program, and realized it was being copied and distributed illegally.  So in 1986, they released a version of their software (as well as other pirated bootleg titles) that contained &quot;The Brain,&quot; kind of as an experiment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially it would copy the boot sector of the floppy (or hard drive) to another part of the disk, and mark is as &quot;bad.&quot;  It would then alter the disk label to &quot;©Brain&quot; and replace the boot sector with a copy of the virus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The boot sector also contained the following text:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Welcome to the Dungeon (c) 1986 Basie &amp;amp; Amends (pvt) Ltd VIRUS_SHOE RECORD V9.0 Dedicated &#xA;to the dynamic memories of millions of viruses who are no longer with us today - Thanks &#xA;GOODNESS!! BEWARE OF THE er..VIRUS : this program is catching program follows after these&#xA;messages....$#@%$@!!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Welcome to the Dungeon © 1986 Brain &amp;amp; Amjads (pvt). BRAIN COMPUTER SERVICES 730 IZANAMI&#xA;BLOCK ALLAMA IQBAL TOWN LAHORE-PAKISTAN PHONE: 430791,443248,280530.&#xA;Beware of this VIRUS....  Contact us for vaccination...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In addition to that, &quot;The Brain&quot; also caused hard disks to slow over time, and even led to data loss.  From &lt;a href=&quot;http://mentalfloss.com/article/12462/going-viral-how-two-pakistani-brothers-created-first-pc-virus&quot;&gt;Going Viral: How Two Pakistani Brothers Created the First PC Virus&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Shortly after the University of Delaware outbreak, Brain began popping up at other universities, and then at newspapers. The New York Times reported that a “rogue computer program” had hit the Providence Journal-Bulletin, though the “damage was limited to one reporter losing several months of work contained on a floppy disk.”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What's interesting about &quot;The Brain,&quot; was that it didn't infect other computers over the internet.  It relied on users to spread it inadvertently via floppy disks.  From the same article mentioned/quoted above, the brothers were quite shocked at the size of the response:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Basit and Amjad began receiving calls from all over the world. They were as surprised as anyone that their little experiment had traveled so far. After all, unlike today’s computer viruses, which spread at lightning speed, Brain had to transmit itself the old-fashioned way—through human carriers toting around 5.25-inch floppy discs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And as much as I hate referencing things on Wikipedia, here's a link to the Wikipedia article on &quot;The Brain&quot;: &lt;a href=&quot;https://en.wikipedia.org/wiki/Brain_(computer_virus)&quot;&gt;Brain (computer virus)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="125" LastActivityDate="2016-04-25T14:40:57.287" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="275" PostTypeId="5" CreationDate="2016-04-25T15:02:08.017" Score="0" Body="&lt;p&gt;This tag is intended for older, vintage Malware (malicious software), a type of program designed to access a computer system without the owner's informed consent, usually for reasons of data theft or other destructive purposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Malware can include (but is not limited to) computer viruses, worms, trojan horses, spyware, dishonest adware, scareware, crimeware, most rootkits, and other malicious programs.&lt;/p&gt;&#xA;" OwnerUserId="125" LastEditorUserId="125" LastEditDate="2016-04-26T13:19:43.607" LastActivityDate="2016-04-26T13:19:43.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="276" PostTypeId="4" CreationDate="2016-04-25T15:02:08.017" Score="0" Body="This tag is intended for older, vintage Malware (malicious software), a type of program designed to access a computer system without the owner's informed consent, usually for reasons of data theft or other destructive purposes." OwnerUserId="125" LastEditorUserId="125" LastEditDate="2016-04-26T13:20:10.087" LastActivityDate="2016-04-26T13:20:10.087" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="277" PostTypeId="1" AcceptedAnswerId="278" CreationDate="2016-04-25T16:02:18.213" Score="16" ViewCount="570" Body="&lt;p&gt;I recently picked up a pair of Atari 2600 paddle controllers for use with my Atari Flashback 6.  The Amazon store said in the product description that they had been &quot;tested.&quot;  However, they are barely responsive, and when they do respond control is quite jittery.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My plan is to open them up and see if there is anything obviously broken or dirty.  Has anyone encountered this before?  Is it possible to fix these?&lt;/p&gt;&#xA;" OwnerUserId="125" LastEditorUserId="125" LastEditDate="2016-04-25T16:15:47.373" LastActivityDate="2020-07-17T08:03:19.260" Title="Atari 2600 paddle controllers slow, jittery" Tags="&lt;atari-2600&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="278" PostTypeId="2" ParentId="277" CreationDate="2016-04-25T16:09:51.293" Score="17" Body="&lt;p&gt;So I loosely followed the instructions on this site: &lt;a href=&quot;http://www.vintagegamingandmore.com/atari-paddle-repair-cleaning/&quot;&gt;Atari Paddle Repair (Cleaning Jittery Paddles)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once I had disassembled the &quot;pot&quot; and exposed the metal ring, I could see that the contact points were caked in &lt;em&gt;35 years&lt;/em&gt; of black gunk.  Using a Q-tip and a light amount of rubbing alcohol, I was able to clean the contact points, being careful not to leave any fuzz from the Q-tip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During reassembly, I made sure that the contact points (prongs) were bent as close to their original angle as I could get them.  Once I had the &quot;pot&quot; back together, I also did a check for range of motion, and everything felt good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I completed reassembly, and they now work good as new!  Or, at least as close as I can remember what &quot;new&quot; paddle controllers felt like.  Breakout and Super Breakout are now playable!&lt;/p&gt;&#xA;" OwnerUserId="125" LastEditorUserId="125" LastEditDate="2016-04-25T16:16:04.843" LastActivityDate="2016-04-25T16:16:04.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="279" PostTypeId="5" CreationDate="2016-04-25T16:15:19.267" Score="0" Body="&lt;p&gt;The Atari 2600 is a 2nd generation home video game console by Atari, Inc. This tag should be used if the question is about the Atari 2600 hardware or cartridges.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Manufacturer: Atari, Inc.&lt;/li&gt;&#xA;&lt;li&gt;Released: 1977 (USA), 1978 (EU), October 1983 (Japan, as the Atari 2800)&lt;/li&gt;&#xA;&lt;li&gt;Game Media: Cartridge, Tape.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="125" LastEditorUserId="125" LastEditDate="2016-04-26T13:20:16.317" LastActivityDate="2016-04-26T13:20:16.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="280" PostTypeId="4" CreationDate="2016-04-25T16:15:19.267" Score="0" Body="The Atari 2600 is a 2nd generation home video game console by Atari, Inc. This tag should be used if the question is about the Atari 2600 hardware or cartridges." OwnerUserId="125" LastEditorUserId="125" LastEditDate="2016-04-28T23:05:18.250" LastActivityDate="2016-04-28T23:05:18.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="281" PostTypeId="1" AcceptedAnswerId="282" CreationDate="2016-04-25T20:00:00.423" Score="10" ViewCount="322" Body="&lt;p&gt;I've got an old SunBlade 100 workstation that I'm trying to install OpenBSD on.  The first step in the process is to bring up the OpenFirmware prompt to select the boot medium, which you do by pressing &lt;kbd&gt;STOP&lt;/kbd&gt;+&lt;kbd&gt;A&lt;/kbd&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer didn't have a keyboard when I bought it, but I found one that will work.  However, it doesn't have a &lt;kbd&gt;STOP&lt;/kbd&gt; key.  Is there another way of bringing up the prompt?&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-05-29T10:48:11.707" Title="How to bring up the firmware console on a SunBlade 100" Tags="&lt;sun-blade&gt;&lt;sparc64&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="282" PostTypeId="2" ParentId="281" CreationDate="2016-04-25T20:38:29.970" Score="6" Body="&lt;p&gt;I only know these a little from messing about with OpenFirmware, but I did run across &lt;a href=&quot;http://www.finnie.org/text/computers/sunblade100/&quot; rel=&quot;noreferrer&quot;&gt;this reference that says&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One glaring omission by Sun is that you cannot enter OBP from the OS&#xA;  using a regular USB keyboard. You can enter OBP from the serial&#xA;  console using Ctrl-Break, and Sun keyboards can do Stop-A, but there&#xA;  is no way to enter OBP from a non-Sun USB keyboard.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which is something I didn't know. I think this implies you are going to have to beg, borrow, or steal a keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or try to boot to the serial console.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I do not have a SunBlade around anymore to test, but I just ran across a hint that you can get to the OBP if you push the power button twice after the first beep. Apparently, this was an alternative for this exact situation.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorDisplayName="user12" LastEditDate="2016-04-27T19:21:48.390" LastActivityDate="2016-04-27T19:21:48.390" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="283" PostTypeId="2" ParentId="54" CreationDate="2016-04-25T21:13:19.607" Score="21" Body="&lt;p&gt;There are multiple techniques used by tape copy programs to be able to copy large blocks of data. By large we mean close to the whole RAM capacity (48 KiB) or even more!&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Using maximum of the available RAM&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;ZX Spectrum 48K (and ZX Spectrum+) has 48 KiB (&lt;strong&gt;49152 B&lt;/strong&gt;) of RAM from which 6 KiB (monochrome pixels) + 768 B (colour attributes) are being used for video RAM. A simple copier which uses the video RAM just for ordinary displaying will have about 41 KiB (~42000 B) of space for copying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A program can use not only portions of memory used by the BASIC interpreter but also the video RAM. For example &lt;a href=&quot;https://archive.org/details/zx_Tape_File_Copy_v6_1986_Arnost_Vecerka&quot;&gt;Tape-File Copy&lt;/a&gt; created in 1986 by Arnošt Večerka lets you select which portion of video RAM will be used for storing the data being copied this program allows capacity up to &lt;strong&gt;44288 B&lt;/strong&gt;. In the screenshot below the upper part showing the remaining capacity hides the pixels containing data by using the same colour for background and foreground. The lower part uses both the pixel and colour attribute part for visibly storing the data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/e617B.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/e617B.png&quot; alt=&quot;Tape-File Copy&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Limiting the program functions (special mode)&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/zx_BS_Copy_48F_2_1991_Busy_Software&quot;&gt;BS Copy 48F/2&lt;/a&gt; written in 1990 by Slavomír Lábsky is a little bit &quot;Spartan&quot;. It provides only load, save and clear functions, also it shows information only in a single line of the screen (hard to find on the screenshot below :) but it has incredible &lt;strong&gt;48082 B&lt;/strong&gt; of available RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JOE6u.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JOE6u.png&quot; alt=&quot;BS Copy 48F/2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also programs which go further. For example in special mode they can copy only a single block and they show no information on the screen but they occupy just a tiny space in RAM. One of them is &lt;a href=&quot;https://archive.org/details/zx_Iso_Copy_v1.8.7_1984_Individual_Software_Service&quot;&gt;Iso Copy 1&lt;/a&gt; which in Max. copy mode provides &lt;strong&gt;49122&lt;/strong&gt; available bytes.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Compressing the data in RAM&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The mentioned program BS Copy in addition to large free RAM compresses the loaded data in RAM. It uses just a simple compression of repeated bytes but in many cases this could save a lot of memory and in effect you can copy blocks larger than the physical RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure what &lt;a href=&quot;https://wos.meulie.net/pub/sinclair/games-info/l/LermTapeUtilityD.pdf&quot;&gt;LERM Tape Utility&lt;/a&gt; exactly does in the &quot;B&quot; mode which is said to be able to copy blocks larger than 48 KiB. But it seems that it either compresses the data or it somehow skips unimportant parts of the data.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Memory paging on ZX Spectrum models with additional RAM&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It is worth to mention that there are copiers which are able to use extended RAM in models like ZX Spectrum 128 or home-made extensions like ZX Spectrum 80k. Though the memory space is not continuous in these computers the load and save routines inside the copiers can switch the memory pages during operation and copy extremely large blocks.&lt;/p&gt;&#xA;" OwnerUserId="154" LastActivityDate="2016-04-25T21:13:19.607" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="284" PostTypeId="2" ParentId="272" CreationDate="2016-04-25T21:39:03.273" Score="8" Body="&lt;p&gt;One of the earliest -- if not &lt;em&gt;the&lt;/em&gt; earliest -- microcomputer virus is Elk Cloner, an Apple II virus created in the early 1980s as a practical joke.  An infected version of DOS would install itself into the boot tracks when a non-infected floppy was accessed, and then write a signature in the VTOC to avoid re-infecting disks.  After a certain number of operations, the virus would put a poem on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While not deliberately destructive, it overwrote the DOS image on floppies with little regard for caution, potentially overwriting data stored in tracks 1 and 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Elk_Cloner&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia has an entry&lt;/a&gt; on Elk Cloner, and apple2history.org has a long description of &lt;a href=&quot;http://apple2history.org/history/ah23/&quot; rel=&quot;noreferrer&quot;&gt;Apple II viruses&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(On a personal note, I was once given a disk with one of these DOS-stomping viruses, but this one was deliberately malignant.  The noisy nature of the old Disk ][ drives saved me though: after booting the infected disk, I inserted a different floppy, and asked for a catalog.  Normally that just seeks to track 17, but I heard the drive head move back to the start of the disk, seek twice to nearby tracks, and then seek back to track 17 before displaying the file list.  I knew something was off and scrubbed the DOS image on my floppy, then played with the infected disk until it erased itself.)&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-04-25T21:39:03.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="285" PostTypeId="2" ParentId="272" CreationDate="2016-04-25T22:34:24.980" Score="7" Body="&lt;p&gt;The first computer &lt;em&gt;virus&lt;/em&gt; (as opposed to a &lt;em&gt;worm&lt;/em&gt; that exploited network or boot code; though I make the distinction as a way to present this answer, &lt;strong&gt;not&lt;/strong&gt; as an example of pedantry) was probably created by &lt;a href=&quot;https://en.wikipedia.org/wiki/Fred_Cohen&quot; rel=&quot;noreferrer&quot;&gt;Fred Cohen&lt;/a&gt; as part of his research into into parasitic, self-replicating applications in 1983.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cohen does not give any of his early experiments names in his historical overview of the subject in &quot;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0471007684&quot; rel=&quot;noreferrer&quot;&gt;A Short Course on Computer Viruses&lt;/a&gt;&quot;, but there are plenty of details about the modes and environments they chose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cohen is considered the first to coin the term &quot;computer virus&quot; to describe the programs and the mechanisms by which they spread.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, none of this work was &quot;malicious&quot; in nature, as Cohen was interested in the computer science of parasitic programs and possible positive uses for them. So this answer may not satisfy the requirement that the payload be &quot;malicious.&quot; I present this to illustrate that early viruses actually &lt;em&gt;weren't&lt;/em&gt; interested in malicious payloads.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorDisplayName="user12" LastEditDate="2016-04-26T20:37:46.870" LastActivityDate="2016-04-26T20:37:46.870" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="286" PostTypeId="2" ParentId="228" CreationDate="2016-04-25T22:35:28.033" Score="10" Body="&lt;p&gt;Keep in mind that because the memory in banks $E0 and $E1 are used as the 128K of memory in 8-bit mode (yeah, it's counterintuitive), they are controlled by the MEGA II chip, which is in essence an Apple IIe on a single chip (aside from processor and a few other support circuits). Any time access happens within the MEGA II's domain, the system has to slow to 1 MHz. That's why shadowing and such is such a big win for graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So there are two main data buses in the Apple IIgs (ignoring the slot I/O bus, which doesn't matter for this context): the MEGA II data bus, which operates at 1 MHz to support 8-bit emulation (and the bank $E0 and $E1 memory space), and the FPI (Fast Processor Interface) bus, which handles the 16-bit realm and all the rest of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two sides of the system operate largely independently; in fact, they even have their own memory refresh cycles for the areas of memory they're responsible for (the FPI side's refresh cycle causes an 8% loss of performance, which is why you often hear a 2.6 MHz speed for the IIgs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of that independence, there's a need to synchronize between the two sides whenever data is transferred from one side to the other. Synchronization performs by the FPI basically stopping the FPI side's clock (thereby halting execution) and waiting until the MEGA II is in the right part of its cycle, then it starts running again, but synchronized to the MEGA II clock (and therefore temporarily running at 1 MHz for the duration of the operation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I presume that adding the &lt;code&gt;NOP&lt;/code&gt; at appropriate intervals reduces the length of time spent waiting for synchronization to occur. I have not had time to sit down and do that math and would prefer not to. :)&lt;/p&gt;&#xA;" OwnerUserId="72" LastActivityDate="2016-04-25T22:35:28.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="287" PostTypeId="1" AcceptedAnswerId="288" CreationDate="2016-04-25T23:21:37.893" Score="19" ViewCount="748" Body="&lt;p&gt;The XBAND Video Game Modem and Network allowed owners of Sega Genesis and Super Nintendo game systems to play head-to-head over a phone line in 1994, before &quot;twitch&quot; gaming over the Internet was feasible.  How was this accomplished?&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2019-05-14T15:16:09.703" Title="How did XBAND modems transmit game state?" Tags="&lt;xband&gt;&lt;modem&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="288" PostTypeId="2" ParentId="287" CreationDate="2016-04-25T23:21:37.893" Score="22" Body="&lt;p&gt;Many games played over the Internet today use a client-server model, where the server has a full copy of the game state, and distributes appropriate pieces to the connected clients.  Due to the technology available in 1994, XBAND couldn't work this way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the user wanted to play a game online, the modem called the server through a local dial-up point-of-presence, and requested a match for the currently-installed cartridge.  The server either told the modem to wait for a connection, at which point it would sit and wait for the phone to ring, or told it to dial the other player's phone number.  Once connected, the game consoles communicated directly, removing client-server communication latency from the equation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The games ran in lockstep on each console.  The cartridges had to be exactly the same, as any difference in logic could throw the systems out of sync.  (In a couple of cases, publishers quietly released an updated version of a cartridge.)  All game state, including the random number generator seed, had to be synchronized at the start.  Once game play began, the consoles simply exchanged controller reads.  At 2400bps, there was just enough time to send a bitmap of currently-pressed buttons and some error-correction redundancy at 30 fps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While faster modems were available at the time, the slower modems were less expensive, had sufficient throughput, and had better latency characteristics.  Features like data compression and error correction were disabled to avoid introducing additional latency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An attempt to reduce the latency even further was attempted but never shipped.  By changing video modes on the Genesis, the television's VSYNC phase could be altered, potentially allowing two independent televisions to be brought (temporarily) into sync with each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An hour-long documentary on Catapult and XBAND can be found &lt;a href=&quot;https://youtu.be/k_5M-z_RUKA&quot; rel=&quot;noreferrer&quot;&gt;on youtube&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2019-05-14T15:16:09.703" LastActivityDate="2019-05-14T15:16:09.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="289" PostTypeId="5" CreationDate="2016-04-26T00:36:55.670" Score="0" Body="&lt;p&gt;XBAND was an online gaming system for consoles, first sold in 1994.  Hardware was developed for the Sega Genesis and Super Nintendo Entertainment System (SNES) that allowed supported games to be played over a phone line.  An online service provided game matching and e-mail.  The system was later expanded to include the Sega Saturn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A description of the product and service can be found on &lt;a href=&quot;https://en.wikipedia.org/wiki/XBAND&quot; rel=&quot;nofollow&quot;&gt;wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-26T13:20:18.890" LastActivityDate="2016-04-26T13:20:18.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="290" PostTypeId="4" CreationDate="2016-04-26T00:36:55.670" Score="0" Body="Discussion of the XBAND Video Game Modem and Network." OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-26T13:19:22.417" LastActivityDate="2016-04-26T13:19:22.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="291" PostTypeId="5" CreationDate="2016-04-26T00:54:37.470" Score="0" Body="&lt;p&gt;A modem (modulator/demodulator) is used to transmit digital information via analog signals.  In retro-computing, this usually means sound waves over telephone lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Appropriate topics pertain to aspects of modems particular to retro-computing devices.  For example, while 300 baud signaling isn't popular anymore, it's not inherently retro, as modern devices typically support it (along with many other protocols).  Features tied to a certain era, like US Robotics' HST, are suitably retro.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-26T13:19:46.450" LastActivityDate="2016-04-26T13:19:46.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="292" PostTypeId="4" CreationDate="2016-04-26T00:54:37.470" Score="0" Body="Discussion of retrocomputing modems." OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-04-26T13:20:33.580" LastActivityDate="2016-04-26T13:20:33.580" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="293" PostTypeId="1" AcceptedAnswerId="7727" CreationDate="2016-04-26T01:11:08.890" Score="12" ViewCount="225" Body="&lt;p&gt;I use the Cecile driver for the Kingspec DOM (basically an IDE flash drive0 in my Atari Falcon. I've noticed on occasion that in file dialog boxes (save, open etc.) I sometimes see weird files, called things like &quot;AD&quot;, and &quot;AF&quot; or some other two character combination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These aren't visible in the GEM Desktop, and they don't seem to cause any issues, but it does make me a little concerned. Does anyone know if these are a sign of a bad filesystem or just some strange artefact from the driver?&lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2018-09-24T18:30:01.123" Title="Is my Atari Falcon's filesystem messed up?" Tags="&lt;atari-falcon&gt;&lt;driver&gt;&lt;tos&gt;" AnswerCount="1" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="294" PostTypeId="5" CreationDate="2016-04-26T01:11:35.343" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-26T01:11:35.343" LastActivityDate="2016-04-26T01:11:35.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="295" PostTypeId="4" CreationDate="2016-04-26T01:11:35.343" Score="0" Body="This tag is for questions relating to the Atari Falcon 030 - the last computer made by Atari." OwnerUserId="107" LastEditorUserId="107" LastEditDate="2016-04-28T23:05:40.690" LastActivityDate="2016-04-28T23:05:40.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="296" PostTypeId="5" CreationDate="2016-04-26T01:13:07.000" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-26T01:13:07.000" LastActivityDate="2016-04-26T01:13:07.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="297" PostTypeId="4" CreationDate="2016-04-26T01:13:07.000" Score="0" Body="For questions relating to the use and development of hardware drivers for a computer operating system." OwnerUserId="107" LastEditorUserId="107" LastEditDate="2016-04-26T13:20:40.223" LastActivityDate="2016-04-26T13:20:40.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="298" PostTypeId="5" CreationDate="2016-04-26T01:13:52.767" Score="0" Body="&lt;p&gt;TOS (The Operating System also Tramiel Operating System from Jack Tramiel, owner of Atari Inc. at the time) is the operating system of the Atari ST range of computers. This range includes the 520 and 1040ST, their STF/M/FM and STE variants and the Mega ST/STE. Later, 32-bit machines (TT, Falcon030) were developed using a new version of TOS, called MultiTOS, which allowed multitasking. More recently, users have further developed TOS into FreeMiNT.&lt;/p&gt;&#xA;" OwnerUserId="107" LastEditorUserId="107" LastEditDate="2016-04-26T13:20:13.343" LastActivityDate="2016-04-26T13:20:13.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="299" PostTypeId="4" CreationDate="2016-04-26T01:13:52.767" Score="0" Body="For questions related to the Atari TOS operating system which was used on the ST line of computers." OwnerUserId="107" LastEditorUserId="47" LastEditDate="2016-04-26T13:19:39.887" LastActivityDate="2016-04-26T13:19:39.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="300" PostTypeId="2" ParentId="54" CreationDate="2016-04-26T07:41:12.873" Score="7" Body="&lt;p&gt;Assuming a program consisting of a unique big block of &lt;code&gt;49152&lt;/code&gt; bytes (the whole RAM space). A routine that may be used for a copier to copy this block would sit at the top memory, say at address &lt;code&gt;64000&lt;/code&gt; along with the stack. Prior to that, the copier asks the user to start loading the big block, just to get the flag byte (which may be different than &lt;code&gt;255&lt;/code&gt;). This first load is very short, as the flag byte is the first byte present after the sync pulse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, the copier sets the computer to load a block starting at address &lt;code&gt;9472&lt;/code&gt;, with a length of &lt;code&gt;49152&lt;/code&gt; bytes and a flag as got in the first stage. That is: the block starts loading into ROM. Obviously, the first &lt;code&gt;6912&lt;/code&gt; bytes won't be actually copied, but this is just the screen, which may or may not be needed to run the program. The rest of the program is therefore loaded from address &lt;code&gt;16384&lt;/code&gt; to &lt;code&gt;58623&lt;/code&gt;, making a total length of &lt;code&gt;42240&lt;/code&gt; bytes. The screen will surely show garbage during the load process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The copier is still safe beginning at address &lt;code&gt;64000&lt;/code&gt;. It will craft a header block of type &lt;code&gt;3&lt;/code&gt; (Bytes), a file name, start address of &lt;code&gt;23296&lt;/code&gt; and length according to the number of bytes actually copied (worst case it's &lt;code&gt;42240&lt;/code&gt; bytes). It will save the header, then the block just loaded beginning from &lt;code&gt;16384&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To recover the original screen content (which might have code hidden in it, or used by the initialization routines to check for integrity as a copy countermeasure), the copier would ask the user to load the big block for a second time, but this time the loader would load only &lt;code&gt;6912&lt;/code&gt; bytes to address &lt;code&gt;16384&lt;/code&gt;, discarding the rest of the big block. The copier then, would make another header for the screen file, saving it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end we end up with two blocks: the first one is a big block of &lt;code&gt;42240&lt;/code&gt; bytes that will start at &lt;code&gt;23296&lt;/code&gt;, and the second one, smaller, containing the screen, that will start at &lt;code&gt;16384&lt;/code&gt; with the standard length for a screen of &lt;code&gt;6912&lt;/code&gt; bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a copier or by other means, the user would swap the blocks in tape so the screen block comes first, then the big block. A BASIC loader for the whole program would be something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 POKE 23729,111: LOAD &quot;&quot;SCREEN$: LOAD &quot;&quot;CODE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;POKE&lt;/code&gt; command modifies the address of the output routine for the &quot;S&quot; channel to point to an address in ROM in where a &lt;code&gt;RET&lt;/code&gt; instruction is stored. The effect of this is to silent any text output to the screen, which would corrupt the screen loaded when the second block loads its header and prints the &quot;&lt;code&gt;Bytes: ....&lt;/code&gt;&quot; text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This loader assumes that the stack pointer doesn't get changed from its default value at boot, which will be case for some programs. Others may need the user to get access to the original loader to see what number the &lt;code&gt;CLEAR&lt;/code&gt; statement has.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A example routine that performs the copy of the big block is now presented. It is from the spanish magazine &quot;Microhobby&quot; and belongs to a series of articles collectively called &quot;The Bible of the Hacker&quot;. The routine is featured in the XIV issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As presented here, the routine is meant to be used from plain &lt;code&gt;BASIC&lt;/code&gt;. It uses the &lt;code&gt;DEF FN&lt;/code&gt; method so one can run the routine with an argument, in this case, the flag needed for the big block. So, to use the routine you would set up a small &lt;code&gt;BASIC&lt;/code&gt; program as this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 DEF FN A(N) = USR 64000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, assuming the flag is &lt;code&gt;255&lt;/code&gt;, you would start the routine by typing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RANDOMIZE FN A(255)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yj8vF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yj8vF.jpg&quot; alt=&quot;Scanned code listing&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link to the scanned article (spanish): &#xA;&lt;a href=&quot;http://microhobby.speccy.cz/mhf/088/MH088_21.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://microhobby.speccy.cz/mhf/088/MH088_21.jpg&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="276" LastEditDate="2018-01-25T10:47:47.243" LastActivityDate="2018-01-25T10:47:47.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="301" PostTypeId="1" CreationDate="2016-04-26T08:14:34.183" Score="10" ViewCount="455" Body="&lt;p&gt;I have an Acorn Electron that came without tape recorder, so I'm using Audacity to record and replay programs which works fine. Now I also have some software as UEF (Universal Emulator Format) files. These can be converted to .WAV using the  'FreeUEF' software for Windows.&lt;br&gt;&#xA;The problem is that so far I only managed to load one program to my Electron this way. All others start out showing the name of the program and the first block number (00) but then immediatly show:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;DATA?&lt;br&gt;&#xA;REWIND TAPE&lt;br&gt;&#xA;Searching  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the .WAV file is still playing it soon finds the next block and continues loading. But when the loading is finished it looks like the computer does not detect the end and the program does not start.&lt;br&gt;&#xA;I've tried several differnt settings for the output volume, but that does not solve it. Also, when I record my own (Basic) programs and replay them it always works fine.&lt;br&gt;&#xA;My guess is that the converted .WAV file does not not contain a proper header or starting tone so the computer misses the first byte(s) but I could be wrong...   &lt;/p&gt;&#xA;" OwnerUserId="256" LastActivityDate="2019-01-19T09:20:22.927" Title="Acorn Electron fails to load .UEF files converted to .WAV" Tags="&lt;acorn&gt;&lt;electron&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="302" PostTypeId="1" CreationDate="2016-04-26T10:03:53.437" Score="12" ViewCount="586" Body="&lt;p&gt;...besides relabelling the disk to 'Lazarus' and helping the Saddam virus spread?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know it was supposed to 'fix' corrupted disks that were ejected during a write operation. I don't think I've seen a single case where it would actually succeed; usually it only made things worse by breaking the label by which the disk would identify. There were tools, like 'disk doctor', that would successfully repair the corruption, but the OS-provided disk-validator seemed to be a totally misguided effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, actually, what did it try to do, and why did it usually fail?&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2016-04-30T18:27:58.223" Title="What did disk-validator do?" Tags="&lt;amiga&gt;&lt;software&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="303" PostTypeId="2" ParentId="251" CreationDate="2016-04-26T11:47:54.027" Score="13" Body="&lt;p&gt;The famous &lt;code&gt;poke -1,x&lt;/code&gt; depends on each computer's slot configuration. The general formula is &lt;code&gt;poke -1,((peek(-1)xor&amp;amp;hff)and&amp;amp;hf0)*1.0625&lt;/code&gt;. This is copying the high nibble of the secondary slot selection register into the low nibble. And why is this necessary? Sit down and relax.&lt;/p&gt;&#xA;&lt;h2&gt;Slots in MSX1&lt;/h2&gt;&#xA;&lt;p&gt;The original 1983 specification of the MSX system allowed for four memory slots, each divided in 4x16K pages. You can switch any page of any slot into the page with the same number (same addresses range) of the Z80, thus making the slot contents visible.&lt;/p&gt;&#xA;&lt;p&gt;A MSX boots (let's ignore cartridge games and the disk system for now) in MSX-BASIC with the following slots configuration: BIOS ROM in page 0, BASIC interpreter in page 1, RAM in pages 2 and 3. Assuming a 64K RAM computer, a game that wants to use more RAM than the upper 32K must switch the RAM slot in page 0 and/or PAGE 1. The usual procedure for this (which works in &lt;em&gt;almost&lt;/em&gt; all the machines) is: check the slot switched in page 3, then switch the same slot in page 0/1. And, hey, it worked.&lt;/p&gt;&#xA;&lt;h2&gt;Slots in MSX2&lt;/h2&gt;&#xA;&lt;p&gt;Life was good for those cassette games but then the MSX2 standard appeared in 1985. Amongst other improvements, it introduced the concept of &lt;em&gt;expanded slots&lt;/em&gt;. This means that one or more of the four primary slots can be expanded, meaning that the slot actually consists of four &lt;em&gt;subslots&lt;/em&gt;. So in that case you no longer have e.g. slot 3, but slots 3-0, 3-1, 3-2, and 3-3.&lt;/p&gt;&#xA;&lt;p&gt;How does that work? To switch a expanded slot, let's say 3-2 in page 1, you first switch primary slot 3 in page 3. Then you write a value in the &lt;em&gt;secondary slot selection register&lt;/em&gt; for this slot, which is located at its address FFFFh. This register contains four two-bit fields, each indicating the secondary slot number that is visible at each page &lt;em&gt;when the slot is switched to that page&lt;/em&gt;. Whoa. So in our case the value would be &lt;code&gt;xxxx10xx &lt;/code&gt; (xx = the previous value).&lt;/p&gt;&#xA;&lt;h2&gt;The problem&lt;/h2&gt;&#xA;&lt;p&gt;So now let's say we are loading a game from a cassette tape in our shiny MSX2 computer. The game does the &amp;quot;let's check the page 3 slot and switch it in page 1&amp;quot; trick to get more RAM visible. But that does not work. Why?&lt;/p&gt;&#xA;&lt;p&gt;MSX2 computers have usually slot 3 expanded, and RAM is in one of these subslots. Let's say it's in 3-2 in our case. So the game sees that slot 3 is on page 3, so it switches it on page 1... but &lt;strong&gt;what secondary slot is visible&lt;/strong&gt;? Answer: we don't know, it could be anything! Chances are that it is not subslot 2 as we expect, so no RAM is actually visible and... booom.&lt;/p&gt;&#xA;&lt;h2&gt;The solution&lt;/h2&gt;&#xA;&lt;p&gt;The &amp;quot;magical poke&amp;quot; solves this by making sure that the values of the secondary slot selection register of the RAM slot for pages 0 and 1 are the same as for pages 2 and 3 (which are usually the same). You can poke directly from BASIC because the RAM slot is already visible in page 3 (-1 = &amp;amp;HFFFF in BASIC), then the non-expended-slots-aware game can happily switch just the primary slot, and tada! RAM is here happily waiting for us.&lt;/p&gt;&#xA;" OwnerUserId="130" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-04-26T19:14:23.800" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="304" PostTypeId="2" ParentId="302" CreationDate="2016-04-26T12:31:27.653" Score="9" Body="&lt;p&gt;It would work in simple cases where there was a crash during a write in such a way that it would simply not finish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would happen as part of a write was that the bitmap(s) indexing unused blocks (0 = used, 1 = unused) would be invalidated, the write would proceed, the bitmap updated with the information about newly used blocks and marked as valid again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a crash occurred while the bitmap was not marked as valid, then the disk would be read-only to the user and OS apart from the disk-validator. It would then go through the disk to rebuild the bitmap and mark it as valid, after which the disk would be read/write again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The unfinished file would have to be regenerated (or &quot;part-salvaged&quot; by the user).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, a less controlled crash/error (such as a power loss or accidental eject while writing?) might be more unpredictable and more likely to trash other data, perhaps including metadata about the directory layout; this would require more specialised repair programs to see &quot;invisible files&quot; etc., which I do not have under-the-hood knowledge of..&lt;/p&gt;&#xA;" OwnerUserId="141" LastActivityDate="2016-04-26T12:31:27.653" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="305" PostTypeId="2" ParentId="257" CreationDate="2016-04-26T17:34:06.117" Score="5" Body="&lt;p&gt;Several chips come to mind that can cause this on an 800XL.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CPU &lt;/li&gt;&#xA;&lt;li&gt;Antic &lt;/li&gt;&#xA;&lt;li&gt;OS &lt;/li&gt;&#xA;&lt;li&gt;ROM &lt;/li&gt;&#xA;&lt;li&gt;RAM Chips&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you don't have a logic analyzer, scope or logic probe, your only real option is to swap IC chips with known good ones. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have any of the equipment above, the Atari field service manuals or SAM's Computerfacts available at &lt;a href=&quot;http://www.atarimania.com/documents-atari-atari-400-800-xl-xe--technical-documents_3_8.html&quot; rel=&quot;nofollow&quot;&gt;Atari Mania&lt;/a&gt; will be of great service in your attempts to resurrect the XL.&lt;/p&gt;&#xA;" OwnerUserId="173" LastEditorUserId="173" LastEditDate="2016-04-27T00:27:25.890" LastActivityDate="2016-04-27T00:27:25.890" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="306" PostTypeId="1" AcceptedAnswerId="319" CreationDate="2016-04-26T17:43:52.203" Score="28" ViewCount="2538" Body="&lt;p&gt;On my systems that are running MS-DOS, I change the default &lt;strong&gt;command.com&lt;/strong&gt; to &lt;a href=&quot;http://www.4dos.info/&quot;&gt;4DOS&lt;/a&gt; for more features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How was the shell system designed and how did it with the operating system in MS-DOS that it enabled you to swap in a different one?&lt;/p&gt;&#xA;" OwnerUserId="81" LastActivityDate="2019-04-18T09:51:45.280" Title="How does the command.com shell work with MS-DOS?" Tags="&lt;ms-dos&gt;&lt;shell&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="308" PostTypeId="1" AcceptedAnswerId="328" CreationDate="2016-04-26T18:37:02.473" Score="5" ViewCount="113" Body="&lt;p&gt;How does the &lt;code&gt;TIMER&lt;/code&gt; function work in Extended Color BASIC? How does the number keep incrementing even when the computer appears to be doing nothing? &lt;/p&gt;&#xA;" OwnerUserId="29" LastEditorDisplayName="user12" LastEditDate="2016-04-30T01:07:05.270" LastActivityDate="2016-04-30T01:07:05.270" Title="Extended Color BASIC TIMER Function" Tags="&lt;color-computer&gt;&lt;color-basic&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="309" PostTypeId="1" AcceptedAnswerId="631" CreationDate="2016-04-26T18:38:11.733" Score="32" ViewCount="2632" Body="&lt;p&gt;Virtually every telephone modem in existence runs at a data rate that's a multiple of the Bell 103A's 300 bps.  Why was the base 300 bps chosen in the first place?&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2019-07-24T13:18:08.267" Title="Why did the Bell 103 modem use a data rate of 300 bps?" Tags="&lt;history&gt;&lt;modem&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="310" PostTypeId="2" ParentId="309" CreationDate="2016-04-26T19:04:48.053" Score="24" Body="&lt;p&gt;The signalling rate (baud) is constrained by a few things. Probably most important is the maximum signalling rate (roughly, how many changes a second) of the path the signal takes (i.e., POTS wires). How many bits can be represented by one signalling change gives us the bits per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the early Bell modems were 110 baud and used frequency-shift keying (FSK). This gives us one bit per signal change, or 110 bps. Similarly the Bell 103 had a signalling rate of 300 baud with FSK giving us 300 bps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;110 and 300 baud were chosen at the time primarily because both modems were intended to be used over copper wire and &quot;unconditioned&quot; telephone lines, with at least one part of the connection going through an acoustic coupler. The worst-case for acoustic couplers talking to carbon microphones is somewhere around 300 baud. Since this is a worst-case, this is what we get.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I recall 110 baud was related to reliable half-duplex teletype comms, but I might be wrong about that. @jameslarge points out that 110 baud/bps was the fixed, unbuffered rate common teletype terminals supported. 110 was &lt;em&gt;probably&lt;/em&gt; chosen for many of the same reasons discussed here. e.g., robustness and reliability on dodgy copper and carbon connections.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could theoretically be increased, but reliability suffers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A natural improvement is to increase the number of bits that can be transferred for each signalling rate, which is what newer modulation techniques like PSK, Trellis, etc. gave us. The baud rate can stay the same so that it is within safe parameters for unconditioned lines, and the bit-rate can be increased.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As phone lines improved and lines could be counted on to be conditioned (and we knew there wouldn't be a carbon-microphone step in there somewhere) and advances in modulation error correction and error detection, baud rates increased. This led to increases in bit-rate.  I think the last telephone modems had a baud rate of 8000, and modulations that allowed for 56/46 kbs as a result.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorDisplayName="user12" LastEditDate="2016-06-14T12:55:54.550" LastActivityDate="2016-06-14T12:55:54.550" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="311" PostTypeId="5" CreationDate="2016-04-26T19:20:52.130" Score="0" Body="&lt;p&gt;MSX is a standardised home computer architecture, first announced by Microsoft in 1983.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was adopted by a number of, mostly Japanese, companies in an attempt to promote interoperability of software and peripherals.&lt;/p&gt;&#xA;" OwnerUserId="130" LastEditorUserId="276" LastEditDate="2016-06-24T11:45:44.873" LastActivityDate="2016-06-24T11:45:44.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="312" PostTypeId="4" CreationDate="2016-04-26T19:20:52.130" Score="0" Body="For questions about the MSX standard or about computers, hardware or software conforming to the MSX standard." OwnerUserId="130" LastEditorUserId="130" LastEditDate="2016-04-26T19:20:52.130" LastActivityDate="2016-04-26T19:20:52.130" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="313" PostTypeId="5" CreationDate="2016-04-26T20:20:37.657" Score="0" Body="&lt;p&gt;While Unicode is not generally a retrocomputing topic, there are still a number of subjects that can be discussed under this tag:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Conversion between Unicode and other character sets.&lt;/li&gt;&#xA;&lt;li&gt;Retro systems based on early versions of Unicode.&lt;/li&gt;&#xA;&lt;li&gt;The history of the Unicode standard itself.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="56" LastEditorUserId="15334" LastEditDate="2021-04-12T07:48:14.000" LastActivityDate="2021-04-12T07:48:14.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="314" PostTypeId="4" CreationDate="2016-04-26T20:20:37.657" Score="0" Body="The Universal Character Set (Unicode, ISO 10646): standardisation history, early adopters and conversion between it and retro character sets." OwnerUserId="56" LastEditorUserId="15334" LastEditDate="2021-04-12T07:48:14.000" LastActivityDate="2021-04-12T07:48:14.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="315" PostTypeId="5" CreationDate="2016-04-26T20:42:41.340" Score="0" Body="&lt;p&gt;The TRS-80 Color Computers (aka CoCo) 1, 2, and 3 were a line of personal computers built by Tandy Radio Shack in the 1980's.  They were direct descendants of the TRS-80 model computers.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CoCo 1 (1980) -   4k to  32k RAM&lt;/li&gt;&#xA;&lt;li&gt;CoCo 2 (1983) -  16k to  64k RAM&lt;/li&gt;&#xA;&lt;li&gt;CoCo 3 (1986) - 128k to 512k RAM&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Graphics Interrupt Memory Enhancement (GIME) graphics adapter&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="125" LastEditorUserId="125" LastEditDate="2016-04-29T12:44:34.893" LastActivityDate="2016-04-29T12:44:34.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="316" PostTypeId="4" CreationDate="2016-04-26T20:42:41.340" Score="0" Body="For questions about hardware, peripherals and software specific to TRS-80 Color Computers." OwnerUserId="125" LastEditorUserId="278" LastEditDate="2016-09-10T15:51:43.840" LastActivityDate="2016-09-10T15:51:43.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="317" PostTypeId="1" AcceptedAnswerId="318" CreationDate="2016-04-26T22:15:49.507" Score="16" ViewCount="848" Body="&lt;p&gt;The Apple II hi-res screen sits on 8KB of memory, so it should be possible to erase it quickly.  The Applesoft &lt;code&gt;HGR&lt;/code&gt; command is slow enough that the &quot;Venetian blind&quot; erasure is clearly visible.  Clearing the screen to a color with &lt;code&gt;CALL 62454&lt;/code&gt; feels even slower.  Why is this?&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-05-09T21:17:56.827" Title="Why is the Apple II hi-res HGR command so slow?" Tags="&lt;apple-ii&gt;&lt;6502&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="318" PostTypeId="2" ParentId="317" CreationDate="2016-04-26T22:15:49.507" Score="24" Body="&lt;p&gt;If you look at the screen clear code in the Applesoft BASIC ROM, you'll find this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;f3f6    lda $e6        ;put base address of current hi-res page&#xA;        sta $1b        ; into $1a/1b (will be $2000 or $4000)&#xA;        ldy #$00&#xA;        sty $1a&#xA;f3fe    lda $1c        ;get color value&#xA;        sta ($1a),y    ;store it in frame buffer&#xA;        jsr $f47e      ;update color value&#xA;        iny            ;advance, looping...&#xA;        bne $f3fe&#xA;        inc $1b&#xA;        lda $1b&#xA;        and #$1f&#xA;        bne $f3fe      ;...until we get to $4000/$6000&#xA;        rts&#xA;&#xA;f47e    asl            ;lose the hi bit, now $00/$fe for black/white,&#xA;        cmp #$c0       ; or $54/$aa for green/purple/orange/blue&#xA;        bpl $f489      ;branch if black or white&#xA;        lda $1c&#xA;        eor #$7f       ;invert color bits for odd/even&#xA;        sta $1c&#xA;f489    rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is a ROM routine, so size is at a premium, and self-modifying code is not allowed.  It's optimized for space, not speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most significant impact of this optimization choice is the code at $f47e, which tests the color value and potentially updates it for every byte.  This code is necessary because of the rather strange hi-res graphics layout, which (among other oddities) represents an odd number of pixels with each byte.  So while a solid black line is &lt;code&gt;00 00 00 00 ...&lt;/code&gt;, a solid green line is &lt;code&gt;2a 55 2a 55 ...&lt;/code&gt;.  The high bit doesn't change, hence the exclusive-OR with $7f.  (The code at $f47e is shared with other routines, e.g. the line-drawing code, that must update the color when moving across the screen.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The total time required to erase the screen to black is 271,121 cycles.  Clearing to green would require 328,465 cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fastest possible screen clear would write a byte to 7680 addresses -- it's not 8192 because we don't need to overwrite the &quot;screen holes&quot;.  On a 6502, that requires 4 cycles per byte, or about 30720 cycles.  The code to do that would fill about half of available RAM on an Apple II though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 192-byte unrolled loop can do it in about 39480 cycles.  That's ~5x the code, for ~8x the speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While these approaches are faster, they still have the &quot;Venetian blind&quot; look.  While that's something of an Apple II hallmark, not everyone wants that, and it may not be possible to simply show page 2 while you're erasing page 1.  In a mere 127 bytes, for ~41,300 cycles you can erase the screen from right to left, using a &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.apple2/Jkb6V4v-65k/7Lqg6o7QCQAJ&quot;&gt;clever function written by John Brooks&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2016-05-05T13:53:10.717" LastActivityDate="2016-05-05T13:53:10.717" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="319" PostTypeId="2" ParentId="306" CreationDate="2016-04-27T06:59:29.843" Score="47" Body="&lt;p&gt;Traditionally, operating shells are relatively independent of the operating system’s function and the operating system can operate without a shell. Most shells have two modes of operation, interactive mode where they manage the command line and execute commands entered interactively, and batch mode where they run scripts. They’re “standard” programs which handle whatever the input and output system is, and provide their features with no extra special sauce.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In DOS, the “kernel” is provided by two files, typically &lt;code&gt;IO.SYS&lt;/code&gt; and &lt;code&gt;MSDOS.SYS&lt;/code&gt; (or &lt;code&gt;IBMBIO.COM&lt;/code&gt; and &lt;code&gt;IBMDOS.COM&lt;/code&gt;). These are loaded at boot-up; they read &lt;code&gt;CONFIG.SYS&lt;/code&gt; for configuration, and once all the device drivers have loaded and initialised, they load the shell and start running it. By default the shell is &lt;code&gt;COMMAND.COM&lt;/code&gt; on the boot disk, but this can be overridden by the &lt;code&gt;SHELL&lt;/code&gt; directive in &lt;code&gt;CONFIG.SYS&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In theory you’d expect the IO and DOS portions of the kernel to provide the “real” operating system, and then COMMAND.COM to follow the standard model of shell design on top of that, but in DOS the distinction between the three parts of the core operating system aren’t as well delineated as you might hope. Because of the way DOS works, with no protection between processes, and using fairly well-documented (or reverse-engineered) functions via the 0x21 interrupt, operating system functions could be implemented in various places, and extended by any number of programs, so the “kernel”, command interpreter and extension TSRs ended up constituting a closely-tied ecosystem... Over the course of its history, DOS ended up relying on COMMAND.COM for certain features, and some of the features DOS provided to COMMAND.COM ended up being extended in ways users expected to find; replacement DOS shells had to provide the former, and ideally respect the latter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some examples will hopefully help understand the kinds of issues involved better.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;COMMAND.COM uses a DOS function, &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/74/25.html&quot; rel=&quot;noreferrer&quot;&gt;0x210A (“Buffered Keyboard Input”)&lt;/a&gt;, to read command lines; as standard this provides basic command-line editing capabilities (move the cursor around, insert/delete handling, and &lt;kbd&gt;F3&lt;/kbd&gt; command recall), but many TSRs were available to extend this: CMDEDIT, DOS 5's own DOSKEY... As an added subtlety, starting with DOS 3.3, function 0x210A indirectly checked the passage of time to handle midnight — imagine you left a DOS computer sitting at the command prompt overnight; whose job is it to notice that the date has to change? Obviously it’s the operating system’s responsibility, but in single-tasking DOS this required the co-operation of whatever software was running. DOSKEY hooked 0x210A to provide its enhanced command-line handling (adding history), and re-implemented most of the time-related features — but it does not handle midnight, so a DOS 5 computer running DOSKEY can lose a day if it’s sitting at the command prompt at midnight.&lt;/li&gt;&#xA;&lt;li&gt;COMMAND.COM allows other programs to run its internal commands (in DOS, even commands such as &lt;code&gt;DIR&lt;/code&gt; and &lt;code&gt;COPY&lt;/code&gt; are implemented in the command processor); replacement shells ideally need to implement this too. Some third-party programs used this to call internal commands or even add new internal commands to DOS, so replacement shells need to support the same mechanism (interrupt &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/64/42.html&quot; rel=&quot;noreferrer&quot;&gt;0x2E&lt;/a&gt; — invoking this allows internal commands to be run from outside the shell, and hooking this allows internal commands to be added — and the installable command functions &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/ix/2F/AE.html&quot; rel=&quot;noreferrer&quot;&gt;0x2FAE&lt;/a&gt;¹).&lt;/li&gt;&#xA;&lt;li&gt;COMMAND.COM installs &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/25/41.html&quot; rel=&quot;noreferrer&quot;&gt;a &lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;C&lt;/kbd&gt;/&lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;Break&lt;/kbd&gt; handler&lt;/a&gt; and &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/27/41.html&quot; rel=&quot;noreferrer&quot;&gt;a critical error handler&lt;/a&gt;, and replacement shells should do this too.&lt;/li&gt;&#xA;&lt;li&gt;COMMAND.COM splits itself into multiple sections: one (small part) for the primary shell, which is always resident (and accessed via &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/13/49.html&quot; rel=&quot;noreferrer&quot;&gt;function 0x2F55&lt;/a&gt;), one containing initialisation code, and finally the so-called transient part which implements most of the functionality. The transient part isn’t needed during execution of other programs (unless they call interrupt 0x2E...), so to provide more memory for applications, it is designed so that it can remain in memory opportunistically without using any allocated memory. The way this works is that it is relocated to the top of memory (with hooks so the other parts of COMMAND.COM can find it), with some sort of signature. Programs which run without using much memory won’t overwrite any of this, and when COMMAND.COM regains control, it checks its transient portion and can then just reuse it without reloading anything. Programs which use enough memory will overwrite the transient portion; when COMMAND.COM regains control, it notices this and reloads its transient portion from disk (which may involve swapping floppies; the &lt;code&gt;COMSPEC&lt;/code&gt; variable was used to point COMMAND.COM to the right file).&lt;/li&gt;&#xA;&lt;li&gt;In MS-DOS 1.&lt;em&gt;x&lt;/em&gt;, program loading is implemented in COMMAND.COM, so anything related to that also lives in COMMAND.COM — for example, interrupt &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/36/41.html&quot; rel=&quot;noreferrer&quot;&gt;0x27&lt;/a&gt; (“Terminate and Stay Resident”)!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Most of this was documented at the time, and what wasn’t was quickly discovered. Nowadays you can read the source code for FreeCOM or 4DOS, or even &lt;a href=&quot;https://github.com/Microsoft/MS-DOS/blob/master/v2.0/source/COMMAND.ASM&quot; rel=&quot;noreferrer&quot;&gt;MS-DOS itself&lt;/a&gt;, if you’re curious to see exactly how a DOS shell works...&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹ See &lt;a href=&quot;https://books.google.com/books?id=fb-NRK57wIAC&amp;amp;pg=PT406&quot; rel=&quot;noreferrer&quot;&gt;this PC Magazine &lt;em&gt;Tutor&lt;/em&gt; article, “Replacing internal DOS commands”&lt;/a&gt;, for details.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-04-18T09:51:45.280" LastActivityDate="2019-04-18T09:51:45.280" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="320" PostTypeId="1" AcceptedAnswerId="321" CreationDate="2016-04-27T07:20:40.977" Score="8" ViewCount="857" Body="&lt;p&gt;My Commodore 64 has developed a fault with the keyboard. Some of the keys are working and some aren't. As far as I can see there is no pattern and they are randomly distributed across the keyboard. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have eliminated a fault with the keyboard itself by swapping it with another one and the fault remained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where else could I look for the fault?&lt;/p&gt;&#xA;" OwnerUserId="143" LastActivityDate="2016-04-27T07:53:43.803" Title="Commodore 64 with partly working keyboard" Tags="&lt;commodore-64&gt;&lt;keyboards&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="321" PostTypeId="2" ParentId="320" CreationDate="2016-04-27T07:53:43.803" Score="8" Body="&lt;p&gt;The C64 keyboard matrix is controlled by one of the two CIAs, namely, CIA1 (U1 in most schematics). If you have both CIAs socketed, try swapping them. If CIA1 was damaged, after swapping them, the damaged CIA, now in CIA2, may affect operation of other parts of the C64 (depending on what is damaged). If the damage is only present in the GPIOs, then the C64 may boot with a full working keyboard, but with issues in the IEC port. It might even prevent the C64 to boot properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, if you have another socketed full working C64, you may borrow one of its CIAs, put it in the place of CIA1 in the affected computer and put the damaged CIA in the donor computer to check if the issue is now present in the donor computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it happens that the CIA is not damaged, then the last thing to check is for bad soldering at the keyboard connector (resoldering it may help). Try reseating CIA1 in its socket, if socketed (take off CIA1, inspect and clean, if needed, both the socket and the pins of the chip, and put it again)&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-04-27T07:53:43.803" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="322" PostTypeId="2" ParentId="185" CreationDate="2016-04-27T13:09:18.383" Score="8" Body="&lt;p&gt;The major difference between drive speeds in classic computers is the philosophy and design of the drive and it's attachment mechanism.  Some computers, such as the TRS-80/CoCo and Apple II lines, used a bus-level connection that allows the drive's controller to dump data in a parallel fashion from the drive to the computer's RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other lines, such as Atari and Commodore, used a serial interface that could only transfer 1 or 2 bits of data at a time, though the drives were smart devices with their own processor which offloaded the control of the drive from the computer, which has its own advantages such as letting music and graphics operate as &quot;normal&quot; while data was being pulled from the drive.  Also, the serial mechanism allows for more devices to be attached.  I've had over 6 different IEC devices attached to a single Commodore 64 when running a BBS and there was never an issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the Commodore's serial out of the box was slow, it could be sped up considerably using fast-disk routines which re-wrote the code for the IEC bus in both the computer and the drive.  The most famous of these was JiffyDOS, which is quite good.  It requires that a new ROM be placed in both the drive and the computer to work, but the speed improvements are well worth it.  For example, JiffyDOS can see a 10x improvement when moving data around on fast devices such as the CMD Hard Drive or a modern device such as the uIEC (pronounced micro-IEC).&lt;/p&gt;&#xA;" OwnerUserId="260" LastActivityDate="2016-04-27T13:09:18.383" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="323" PostTypeId="1" AcceptedAnswerId="413" CreationDate="2016-04-27T16:21:28.100" Score="10" ViewCount="198" Body="&lt;p&gt;The program CoCo Max came with a cartridge. The cartridge had a mouse/joystick port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did the CoCo Max Analog to Digital cartridge work? Is it possible to use the device in my own software?&lt;/p&gt;&#xA;" OwnerUserId="29" LastActivityDate="2019-10-11T01:22:53.857" Title="CoCo Max Mouse Cartridge" Tags="&lt;color-computer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="324" PostTypeId="1" AcceptedAnswerId="326" CreationDate="2016-04-27T17:15:37.890" Score="18" ViewCount="929" Body="&lt;p&gt;I have both a beige VIC-20 styled VIC-1541 disk drive and the later brown C64 1541 drive. Is there a difference between them (besides how they look)?&lt;/p&gt;&#xA;" OwnerUserId="81" LastEditorUserId="11916" LastEditDate="2020-01-04T16:59:29.673" LastActivityDate="2020-01-04T16:59:29.673" Title="Any difference between a VIC-1541 and a C64-1541?" Tags="&lt;hardware&gt;&lt;commodore-64&gt;&lt;disk-drive&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="325" PostTypeId="1" AcceptedAnswerId="327" CreationDate="2016-04-27T17:52:11.467" Score="22" ViewCount="3574" Body="&lt;p&gt;The Commodore 64 did not have any hardware dedicated to digital audio playback, so how were some games and songs able to achieve this on an unmodified and unextended Commodore 64?  Did these techniques require specific hardware revisions?&lt;/p&gt;&#xA;" OwnerUserId="64" LastEditorUserId="105" LastEditDate="2016-04-28T23:03:28.060" LastActivityDate="2016-12-09T20:13:53.757" Title="How was digital sound playback achieved on the Commodore 64?" Tags="&lt;commodore-64&gt;&lt;digital-audio&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="326" PostTypeId="2" ParentId="324" CreationDate="2016-04-27T17:57:53.937" Score="18" Body="&lt;p&gt;Functionally there is no difference between the VIC-1541 and 1541.  Internally, there may be lots of differences due to production variation and component variation.  The thing to remember is that both drives have modes to directly support the VIC-20 and C64.  The VIC-20 is actually faster reading data when the drive is in 1540 mode instead of 1541 mode, but ANY 1541 drive supports 1540 mode.&lt;/p&gt;&#xA;" OwnerUserId="260" LastActivityDate="2016-04-27T17:57:53.937" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="327" PostTypeId="2" ParentId="325" CreationDate="2016-04-27T18:07:03.360" Score="24" Body="&lt;p&gt;No hardware revisions are necessary.  The digitization playback is achieved by bit-banging the volume register of the SID chip to simulate a digital playback device.  Essentially, the SID can be used as a 4-bit digital playback device.  What's amazing is that the thing sounds as good as it does playing back digital data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A great article about digis on the C64 can be found here: &lt;a href=&quot;http://sid.kubarth.com/articles/the_c64_digi.txt&quot;&gt;http://sid.kubarth.com/articles/the_c64_digi.txt&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="260" LastEditorUserId="260" LastEditDate="2016-05-29T21:56:13.913" LastActivityDate="2016-05-29T21:56:13.913" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="328" PostTypeId="2" ParentId="308" CreationDate="2016-04-27T19:07:05.760" Score="7" Body="&lt;p&gt;The CoCo has an interrupt called fast interrupt (FIRQ) which is connected to the video output horizontal sync pulse. The IRQ happens every 1/16 of a millisecond (62.5 microseconds). The extended basic command timer uses this interrupt to increment its counter. Remember that the IRQ happens independently of what you see on screen so this is why the number keeps increasing even if &quot;nothing&quot; is happening.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to this &lt;a href=&quot;http://download.springer.com/static/pdf/814/art%253A10.3758%252FBF03205614.pdf&quot;&gt;paper&lt;/a&gt; from 1987 written by Arthur J. Flexser, the TIMER command of the Extended CoCo BASIC counts &quot;horizontal synchronization pulses, which are approximately 1/16 of a millisecond. This count is multiplied by a constant to convert to milliseconds and is then rounded to the nearest integer.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The document also explains that holding a keyboard key down or keep the joystick button pressed will make the timer to halt, since the TIMER routine first check to see if both of them (key and joystick button) are in released state.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2016-04-27T19:07:05.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="329" PostTypeId="1" AcceptedAnswerId="331" CreationDate="2016-04-27T23:36:54.257" Score="17" ViewCount="798" Body="&lt;p&gt;The &lt;code&gt;RND()&lt;/code&gt; function for random numbers appears to give the same results each time the computer is reset. How do I seed the random number generator with a random number?&lt;/p&gt;&#xA;" OwnerUserId="29" LastEditorDisplayName="user12" LastEditDate="2016-06-11T02:55:56.477" LastActivityDate="2016-06-11T02:55:56.477" Title="Color BASIC RND function not so random" Tags="&lt;color-computer&gt;&lt;color-basic&gt;&lt;programming&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="331" PostTypeId="2" ParentId="329" CreationDate="2016-04-28T05:24:45.493" Score="13" Body="&lt;p&gt;&lt;a href=&quot;http://jimgerrie.blogspot.com/2016/01/january-2016-retrochallenge-7-new-10.html&quot; rel=&quot;noreferrer&quot;&gt;From here&lt;/a&gt; it looks like the official way is to use RND(N) to seed, where is N is a negative number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cocopedia.com/wiki/index.php/Undercolor/850103/Hints_Tips_and_Tricks/filler&quot; rel=&quot;noreferrer&quot;&gt;But according to this&lt;/a&gt; you can also just copy a byte from a timer to the RND seed with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;POKE 280,PEEK(275)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If your program shows a title screen with a loop checking for a user keypress, you could:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Do X=RND(0) in the loop. This will put you at a random place in the&#xA;sequence.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Set N to -1 then decrement it in the loop (maybe wrap somewhere to -1 to avoid overflow). Then X=RND(N) to seed. (You could put that in the loop but it would slightly reduce the range of N.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2016-04-30T01:40:45.470" LastActivityDate="2016-04-30T01:40:45.470" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="333" PostTypeId="1" CreationDate="2016-04-28T07:17:45.347" Score="9" ViewCount="328" Body="&lt;p&gt;Someone on reddit acquired a Sabre-ADS &lt;a href=&quot;https://imgur.com/a/6PEft&quot; rel=&quot;noreferrer&quot;&gt;terminal&lt;/a&gt;, Model 757. They were used for airline reservation and probably connected to an IBM mainframe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anything known about the pinout and workings of the interface connectors, so one can hook them up to other hardware like a PC, and replace the missing keyboard somehow? &lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-11-18T23:50:48.480" Title="Information about Sabre-ADS Model 757 terminal" Tags="&lt;terminal&gt;&lt;mainframe&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="334" PostTypeId="1" AcceptedAnswerId="335" CreationDate="2016-04-28T14:45:09.963" Score="7" ViewCount="160" Body="&lt;p&gt;A popular third party floppy disk controller for the Color Computer was the Super Controller II from Disto. It's main feature was a no-halt mode. Why was this desirable? How did the no-halt mode work?&lt;/p&gt;&#xA;" OwnerUserId="29" LastActivityDate="2016-04-28T16:33:54.367" Title="Disto Super Controller II" Tags="&lt;color-computer&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="335" PostTypeId="2" ParentId="334" CreationDate="2016-04-28T16:23:34.817" Score="6" Body="&lt;p&gt;While in normal mode, the SCII (and the Tandy and other manufacturers' controllers) would not buffer data. The CPU would wait as the drive would read and write data to and from the computer's memory. While data transfer for the CoCo was pretty quick for the day, this process would not allow the CPU to do any other work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SCII had a second mode which was buffered. With the proper drivers, the CPU would command the controller to switch into buffered mode, and the buffer circuit would take over the task of waiting for the drive to transfer data to and from it's own RAM. After the data transfer was complete, the controller would signal the CPU that it was done, and the CPU could handle the data in whatever fashion it needed to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was a very nice feature as it freed up the CPU for other tasks while the controller took care of the buffering the data from the disk drive.&lt;/p&gt;&#xA;" OwnerUserId="173" LastActivityDate="2016-04-28T16:23:34.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="336" PostTypeId="2" ParentId="334" CreationDate="2016-04-28T16:23:44.260" Score="6" Body="&lt;p&gt;According to this gem &lt;a href=&quot;http://www.roust-it.dk/coco/littlewonder.pdf&quot; rel=&quot;noreferrer&quot;&gt;Tandy's Little Wonder, The Color Computer 1979-1991&lt;/a&gt;, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When OS-9 came out a flaw was quickly discovered in the Tandy disk controller (and all others made at that time). Although OS-9 was a multi-user, multi-tasking true DOS, the CoCo disk controller was not! The controller used a simple design that interrupted the 6809 during disk access. This was the cheapest and easiest way to build the control- lers, but it prevented OS-9 from doing anything until disk access was completed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Essentially, the original CoCo disk controller would block the CPU during disk seeks.  This was problematic due to how (relatively) slow the disk technology of the time was.  After-market controllers like the DISTO SC II and Sardis Technologies &quot;no halt&quot; controller got around this problem by using a buffered mode that handles waiting for the floppy disk controller and writing the data into RAM (so the CPU didn't have to manage that process).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional reference: &lt;a href=&quot;http://www.colorcomputerarchive.com/coco/Documents/Manuals/Hardware/Disto%20Super%20Controller%20II%20(Disto%20Super%20Products).pdf&quot; rel=&quot;noreferrer&quot;&gt;Disto Super Controller II Instruction Manual&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="125" LastEditorUserId="125" LastEditDate="2016-04-28T16:33:54.367" LastActivityDate="2016-04-28T16:33:54.367" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="337" PostTypeId="1" CreationDate="2016-04-28T18:24:38.303" Score="16" ViewCount="1889" Body="&lt;p&gt;The &quot;Paula&quot; chip used for sound output in all Amiga computers had 4 8bit sound channels (arguably comparable to 9bit stereo). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were programs/libraries which could play 14bit stereo on the Amiga - how did these work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How much were they used?&lt;/p&gt;&#xA;" OwnerUserId="141" LastActivityDate="2016-04-28T18:24:38.303" Title="How could Amiga computers play 14 bit sound?" Tags="&lt;amiga&gt;&lt;audio&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="338" PostTypeId="2" ParentId="337" CreationDate="2016-04-28T18:24:38.303" Score="21" Body="&lt;p&gt;As the sound channels had independent linear 64-step volume control (6 bits + mute setting), by calibration and splitting sample bits for one 14bit waveform across two channels, two-channel 14bit (stereo) sound could in principle be improvised using all 4 channels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would be done by playing&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A coarse part of the waveform generated from the higher 8 bits at full volume on one channel.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A fine part of the waveform with the lower 6 bits at volume 1 on another channel on the same stereo &quot;side&quot;. (If trying to play a 16bit waveform, the lowest two bits would be discarded.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However, this would then require additional real-time mixing of waveforms by the CPU to play more than two independent logical &quot;channels&quot;, as opposed to much typical Amiga music using 4 physical channels and no real-time mixing - for example one channel for instrument, one for accompaniment with pre-mixed chords, one for bass and one for percussion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would also require mixing or at least scaling for volume changes on a 14bit &quot;channel&quot;, as the volume levels would be locked in to allow 14bit resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The A1200 had the 14MHz Motorola 68020 - at a sampling frequency of 28kHz, that would give ~500 clock cycles for each sampling point or ~1000 for 14KHz playback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 7MHz 68000 A1000, A500 and A600 models would have half that number of clock cycles for each sampling point, so ~250 for 28KHz and ~500 for 14KHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That gives scope for mixing, however, I only remember a simple 14bit playback program, which could handle PC Fasttracker formats and a composing program called DeliTracker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps one of the problems was that it would be difficult to do the normal pitch control by playing back waveforms with different sampling frequencies, as these would have to be interpolated into the mixing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, to play a waveform that needs 25KHz for a particular note and another waveform (or the same) that needs 9KHz for another (in that case lower) note, you would ideally mix at a much higher frequency, but if you are limited to 28KHz, you have to &quot;force&quot; the other waveforms to fit your sampling period the best you can as these numbers are not divisible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagine that with the typical sampling frequencies possible with the CPUs at hand that would have resulted in a loss of quality, which might have been the main limitation. Does anybody know whether that is correct?&lt;/p&gt;&#xA;" OwnerUserId="141" LastActivityDate="2016-04-28T18:24:38.303" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="339" PostTypeId="5" CreationDate="2016-04-28T18:26:11.970" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-28T18:26:11.970" LastActivityDate="2016-04-28T18:26:11.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="340" PostTypeId="4" CreationDate="2016-04-28T18:26:11.970" Score="0" Body="For questions about recording, processing, producing or working with audio or audio hardware." OwnerUserId="141" LastEditorUserId="278" LastEditDate="2016-09-10T17:42:06.083" LastActivityDate="2016-09-10T17:42:06.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="342" PostTypeId="2" ParentId="325" CreationDate="2016-04-29T03:44:27.667" Score="5" Body="&lt;p&gt;There were also some more recent creative alternatives taking advantage of filters and undocumented test bits as well.  Check out the Cubase64 demo by Mahoney: &lt;a href=&quot;http://www.livet.se/mahoney/cubase64&quot; rel=&quot;noreferrer&quot;&gt;http://www.livet.se/mahoney/cubase64&lt;/a&gt;  You can also find versions of it playing on the real thing on YouTube, naturally.  (spoiler alert: your face will melt -- it's that awesome.)&lt;/p&gt;&#xA;" OwnerUserId="280" LastActivityDate="2016-04-29T03:44:27.667" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="343" PostTypeId="1" AcceptedAnswerId="344" CreationDate="2016-04-29T09:09:55.977" Score="20" ViewCount="1050" Body="&lt;p&gt;&lt;a href=&quot;http://www.vgmpf.com/Wiki/index.php?title=Oktalyzer&quot;&gt;Oktalyzer&lt;/a&gt; was a Tracker style program for Amiga, that allowed composing and playing music with 8 channels instead of the &quot;hardware-natural&quot; 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I learned it achieved that by splitting the 4 8-bit channels into 8 4-bit ones. But I still don't understand how it was done from 'mathematics' point of view - it doesn't seem like you can split a DAC index into two halves and have two waveforms of comparable volume overlaid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One would range 0-16 in 1-bit increments and the other 0-256 in 16-bit increments, resulting in one being 16 times more quiet than the other. Or you could take every other bit, achieving 16-bit increments on both, but one would still be half as loud as the other, not having access to the most significant bit. How was it done in reality?&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2020-09-20T20:07:31.883" Title="How was 8-channel audio achieved on Amiga?" Tags="&lt;amiga&gt;&lt;audio&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="344" PostTypeId="2" ParentId="343" CreationDate="2016-04-29T09:21:47.420" Score="19" Body="&lt;p&gt;According to the very same link you provided:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To perform this feat, Oktalyzer loaded eight channels in memory, mixed&#xA;  them in real time down to four channels, and sent the result to the&#xA;  Amiga sound chip. This was a processor-intensive task which degraded&#xA;  sound quality, but was more than made up for with doubled channels.&#xA;  Oktalyzer could also be run in 4-channel mode to suit more&#xA;  processor-heavy programs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;which makes more sense to me that splitting each channel into two 4-bit channels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the process is quite straightforward. During the time between two VBlank interrupts (these occurs normally each 20 ms), the CPU has to take two sample buffers, mix them and write the result to a channel buffer that will be used to feed Paula.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is quite processor intensive, as for each sample in a 20 ms buffer, the CPU has to calculate what sample to fetch (depending upon the playing frequency), check if it reached the end of sample so it will start at repetition begin. With both samples gathered, each one has to be scaled according to its volume setting, then the CPU has to add them and possibly, apply some compression to avoid clipping while keeping the original dynamic range (adding both sample and then dividing into 2 would result in too quiet sound)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've just digged into the source code of an early release of Oktalyzer and found this macro: (comments of my own)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;GetSample:  macro&#xA;        move.b  (a0,d0.w),d4  ;get sample from buffer addressed by a0&#xA;        add.b   (a1,d1.w),d4  ;add sample from buffer addressed by a1&#xA;        eor.b   d5,d4         ;d5=-128. Fast way to add -128 to result&#xA;        move.b  d4,(a5)+      ;store result into output buffer&#xA;        swap    d0&#xA;        swap    d1&#xA;        add.l   d2,d0        ;calculate offset for next sample, buffer a0&#xA;        add.l   d3,d1        ;ditto for buffer a1&#xA;        swap    d0&#xA;        swap    d1&#xA;        endm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which pretty does much of what I've explained (minus the volume scaling operation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From this source code, I guess that initial buffers pointed by &lt;code&gt;a0&lt;/code&gt; and &lt;code&gt;a1&lt;/code&gt; already contain scaled samples, as there is no code in the macro to check for clipping. I also assume that these original samples are 7 bits unsigned samples. Adding them won't produce clipping, but we will end up with a 8-bit unsiged sample, which is not suitable for Paula, which expects 8-bit signed samples. To get that, we have to substract 128 from the sample value, that's to say, add -128. Adding -128 to a 8-bit number is just toggling its MSb, so d5 is preloaded with -128 and then it is XORed with the calculated sample.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-04-29T09:59:22.480" LastActivityDate="2016-04-29T09:59:22.480" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="345" PostTypeId="5" CreationDate="2016-04-29T14:31:47.197" Score="0" Body="&lt;p&gt;For questions regarding the products of Acorn Computers Ltd.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A British computer manufacturer founded in 1978.  The progenitor of the modern ARM processor manufacturer.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="276" LastEditDate="2016-06-02T18:05:01.743" LastActivityDate="2016-06-02T18:05:01.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="346" PostTypeId="4" CreationDate="2016-04-29T14:31:47.197" Score="0" Body="The products of Acorn Computers Ltd., a British computer manufacturer founded in 1978." OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-20T00:05:31.810" LastActivityDate="2021-02-20T00:05:31.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="347" PostTypeId="5" CreationDate="2016-04-29T14:32:51.373" Score="0" Body="&lt;p&gt;A budget computer made by Acorn and released in 1983.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A cut-down version of the Acorn BBC Micro. It ran at a slower speed than the BBC due to bus-sharing with the video ULA.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="276" LastEditDate="2016-06-03T12:46:30.193" LastActivityDate="2016-06-03T12:46:30.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="348" PostTypeId="4" CreationDate="2016-04-29T14:32:51.373" Score="0" Body="A budget computer made by Acorn and released in 1983.  A cut-down version of the Acorn BBC Micro." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-04-29T16:59:49.383" LastActivityDate="2016-04-29T16:59:49.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="349" PostTypeId="5" CreationDate="2016-04-29T18:10:43.690" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-04-29T18:10:43.690" LastActivityDate="2016-04-29T18:10:43.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="350" PostTypeId="4" CreationDate="2016-04-29T18:10:43.690" Score="0" Body="For questions regarding the hardware, software and peripheral products of DEC - The Digital Equipment Corporation.  " OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-04-29T23:26:14.273" LastActivityDate="2016-04-29T23:26:14.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="351" PostTypeId="1" AcceptedAnswerId="352" CreationDate="2016-04-29T20:07:00.797" Score="17" ViewCount="1747" Body="&lt;p&gt;Every NES emulator I've found runs off ROM dumps.  Would it be possible to run an emulator using the original cartridges directly?  It's probably not the most practical way of doing things, but the &quot;cool factor&quot; of plugging Super Mario Bros. into the front of your computer is definitely there.&lt;/p&gt;&#xA;" OwnerUserId="4" LastEditorUserId="175" LastEditDate="2019-02-12T16:27:08.713" LastActivityDate="2019-02-12T16:27:08.713" Title="Can I run a NES emulator off the original cartridges?" Tags="&lt;emulation&gt;&lt;nes&gt;&lt;game-cartridge&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="352" PostTypeId="2" ParentId="351" CreationDate="2016-04-29T20:22:57.460" Score="18" Body="&lt;p&gt;You can, provided that you have a cartridge reader that you can plug to the computer that runs the emulator. One such reader is &lt;a href=&quot;https://en.wikipedia.org/wiki/Retrode&quot;&gt;Retrode&lt;/a&gt;; if you google &quot;nes cartridge reader&quot; you will find references to more similar products, even DIY kits. &lt;/p&gt;&#xA;" OwnerUserId="130" LastEditorUserId="130" LastEditDate="2016-05-01T18:58:51.917" LastActivityDate="2016-05-01T18:58:51.917" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="353" PostTypeId="5" CreationDate="2016-04-29T23:28:47.853" Score="0" Body="&lt;p&gt;For questions about the Oric Atmos. A 6502 based computer produced by Oric Products International Ltd. in 1982&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-04-30T21:53:04.907" LastActivityDate="2016-04-30T21:53:04.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="354" PostTypeId="4" CreationDate="2016-04-29T23:28:47.853" Score="0" Body="For questions about the Oric Atmos. A computer produced by Oric Products International Ltd. in 1982" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-04-30T21:52:54.827" LastActivityDate="2016-04-30T21:52:54.827" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="355" PostTypeId="1" AcceptedAnswerId="359" CreationDate="2016-04-29T23:33:17.897" Score="17" ViewCount="1529" Body="&lt;p&gt;Why would adding a cart in your system suddenly speed up the C64 or the 1541 for loading games?&lt;/p&gt;&#xA;" OwnerUserId="81" LastActivityDate="2016-04-30T04:35:12.007" Title="How did the Epyx Fast Load cart work with a Commdore 64?" Tags="&lt;commodore-64&gt;&lt;hardware&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="356" PostTypeId="1" AcceptedAnswerId="365" CreationDate="2016-04-30T00:28:00.643" Score="8" ViewCount="552" Body="&lt;p&gt;I have a 3003b CoCo 1 (the white one) with the melty keyboard. A few of the keys do not work. On a few of them, there appears to be a slimy substance that I've cleaned from the surface. The badge on the top of the case is mushy, so I can only assume someone used a cleaner on it and it got down into the keyboard. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This keyboard used folded mylar sheets with a separator sheet. I'll be taking the keyboard apart next week to inspect it. What's the best cleaner to use on these types without damaging the mylar or the material the traces are made out of? &lt;/p&gt;&#xA;" OwnerUserId="173" LastEditorUserId="462" LastEditDate="2016-05-29T04:15:11.597" LastActivityDate="2016-05-29T04:15:11.597" Title="Cleaning membrane keyboards" Tags="&lt;color-computer&gt;&lt;maintenance&gt;&lt;keyboards&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="357" PostTypeId="1" AcceptedAnswerId="366" CreationDate="2016-04-30T02:09:03.747" Score="22" ViewCount="1104" Body="&lt;p&gt;There are minor and major differences between the many Apple II models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to detect whether my 8-bit assembly language program is running on a II, II+, IIe (enhanced or not), or ///, and which ROM version if on a //c or IIgs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, are there any ways (and reasons) to detect whether the code is running on a /// or ///+, or on a Mac Apple IIe Card emulator?&lt;/p&gt;&#xA;" OwnerUserId="71" LastActivityDate="2020-05-19T12:26:55.377" Title="How can I programmatically tell which version of Apple II my code is on?" Tags="&lt;apple-ii&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="358" PostTypeId="1" AcceptedAnswerId="361" CreationDate="2016-04-30T04:21:40.707" Score="11" ViewCount="911" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/CHIP-8&quot; rel=&quot;nofollow noreferrer&quot;&gt;CHIP-8&lt;/a&gt; has, among its instructions, &lt;a href=&quot;https://en.wikipedia.org/wiki/CHIP-8#Opcode_table&quot; rel=&quot;nofollow noreferrer&quot;&gt;the following ones&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;code&gt;Ex9E&lt;/code&gt;:  Skips the next instruction if the key stored in VX is pressed.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;code&gt;ExA1&lt;/code&gt;:  Skips the next instruction if the key stored in VX isn't pressed.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;code&gt;Fx0A&lt;/code&gt;:    A key press is awaited, and then stored in VX.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;How did these interact with held-down keys? Does &lt;code&gt;FX0A&lt;/code&gt; immediately return in that case, or would it wait for a new keypress? Does reading a key via &lt;code&gt;EX9E&lt;/code&gt;/&lt;code&gt;EXA1&lt;/code&gt; somehow &quot;clear&quot; it, or would it take the &quot;pressed&quot; branch as long as the given key is held?&lt;/p&gt;&#xA;" OwnerUserId="115" LastEditorUserId="382" LastEditDate="2016-12-07T17:58:11.747" LastActivityDate="2016-12-07T17:58:11.747" Title="How are held-down keys handled in CHIP-8?" Tags="&lt;keyboards&gt;&lt;chip-8&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="359" PostTypeId="2" ParentId="355" CreationDate="2016-04-30T04:35:12.007" Score="8" Body="&lt;p&gt;The VIC-20 and the C64 had horribly slow disk IO because everything was done by the CPU over a serial link, i.e. the CPU was reading in the data bit by bit. Both software and cartridge &quot;turbo loaders&quot; worked by replacing the protocol with something more efficient, for example by doing synchronization only once per byte instead of once per bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I read somewhere once that some also used the clock wire as a second data wire, but I'm not sure if this was something that could be done purely in software/cartridge or if that required a direct connection between the drive and something plugged into the user port of the C64.&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2016-04-30T04:35:12.007" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="360" PostTypeId="1" AcceptedAnswerId="362" CreationDate="2016-04-30T14:39:50.003" Score="12" ViewCount="455" Body="&lt;p&gt;I've got a motherboard with a Am386/DX processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also got an Intel 387 coprocessor.&#xA;Is it possible to use the Intel 387 that I've got together with the Am386 or do I need a coprocessor from AMD?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the Intel coprocessor physically fits in the slot for the Am387 but it is a bit smaller which causes a row of socket pinholes to be visible at each side of the coprocessor.&lt;/p&gt;&#xA;" OwnerUserId="2" LastEditorUserId="276" LastEditDate="2016-06-03T08:05:21.537" LastActivityDate="2019-07-31T18:24:44.643" Title="Pair Am386 with i387" Tags="&lt;hardware&gt;&lt;compatibility&gt;&lt;80386&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="361" PostTypeId="2" ParentId="358" CreationDate="2016-04-30T15:21:46.217" Score="14" Body="&lt;p&gt;I haven't found an official reference for how instructions should behave, so I've taken the disassembly of the original CHIP-8 interpreter for the COSMAC VIP as the reference implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fortunately, this is rather well documented, and available at &lt;a href=&quot;http://laurencescotford.co.uk/wp-content/uploads/2013/08/CHIP-8-Interpreter-Disassembly.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://laurencescotford.co.uk/wp-content/uploads/2013/08/CHIP-8-Interpreter-Disassembly.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;For &lt;code&gt;Fx0A&lt;/code&gt; instruction:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The decoding of &lt;code&gt;Fxxx&lt;/code&gt; instructions begin at program address &lt;code&gt;0105&lt;/code&gt;. More precisely, instruction &lt;code&gt;Fx0A&lt;/code&gt; is decoded and executed from address &lt;code&gt;010A&lt;/code&gt;. The execution of this instruction implies to call a ROM routine to read the keyboard:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;010A F8 81   FX0A: LDI 0x81    Instruction FX0A -&amp;gt; wait for a key press and&#xA;                               store it in VX&#xA;                               0x81 is the high-order byte of the address&#xA;                               of a routine in the COSMAC VIP ROM that&#xA;                               reads the keyboard&#xA;010C BC            PHI C       Store this in RC.1&#xA;010D F8 95         LDI 0x95    0x95 is the low-order byte of the address of&#xA;                               the keyboard routine&#xA;010F AC            PLO C       Put this in RC.0 - RC now contains the full&#xA;                               address 0x8195&#xA;0110 22            DEC 2       Decrement stack pointer - the ROM routine&#xA;                               uses the stack so we need to ensure the&#xA;                               stack pointer is pointing at the next empty&#xA;                               location before calling it&#xA;0111 DC            SEP C       Call the routine to read the keyboard&#xA;                               On return the value of the key pressed will&#xA;                               be in the accumulator D&#xA;0112 12            INC 2       Increment stack pointer&#xA;0113 56            STR 6       Store the result in VX&#xA;0114 D4            SEP 4       Return to the fetch and decode routine&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The behaviour of the keyboard ROM routine is documented by the same guy, Laurence Scotford. This is the flowchart taken from his web (the actual ROM code is also there)&#xA;&lt;a href=&quot;http://laurencescotford.co.uk/?p=347&quot; rel=&quot;noreferrer&quot;&gt;http://laurencescotford.co.uk/?p=347&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/77QWh.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/77QWh.gif&quot; alt=&quot;Keyboard routine flowchart&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, the keyboard ROM routine waits for any key to be pressed, and then, the routine waits until it has been released. Then it returns the key code that &lt;strong&gt;&lt;em&gt;was&lt;/em&gt;&lt;/strong&gt; pressed&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, according to this, if the Fx0A instruction is executed while a key has been already pressed, the instruction will wait until the key is released and then it will return the key code in register Vx.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;For instructions &lt;code&gt;Ex9E&lt;/code&gt; / &lt;code&gt;ExA1&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Decoding and execution of these instructions begin at address &lt;code&gt;0199&lt;/code&gt; of the interpreter code. A few instructions later, a direct keyboard reading is performed, isntead of calling a ROM routine.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;019A 62        OUT 2            This will take the value in VX and output it&#xA;                                to the keyboard latch. This causes external&#xA;                                flag 3 to be set if that key is currently &#xA;                                held down or reset if not&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So these instructions will react accordingly if a key was pressed before the isntruction was executed. Both will read the current state of that key the moment the Exxx instructions are executed. These two instructions don't use the ROM, so they don't interfere with any system variable that would have been modified in response to keys pressed or released.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words: if key '1' is pressed and hold, and &lt;code&gt;V1&lt;/code&gt; stores the key code for '1'...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LD V1,1     6101   ;store key code 1 into V1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...the following sequence of instructions will behave as this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SKP  V1     E19E   ;will skip the next instruction.&#xA;SKNP V1     E1A1   ;will not skip the next instruction.&#xA;&#xA;LD V2,K     F20A   ;will wait until the user releases the '1' key, &#xA;                   ;then it will store its keycode into &#xA;                   ;register V2.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="105" LastEditorUserId="276" LastEditDate="2016-12-06T15:11:28.403" LastActivityDate="2016-12-06T15:11:28.403" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="362" PostTypeId="2" ParentId="360" CreationDate="2016-04-30T15:38:35.197" Score="15" Body="&lt;p&gt;The Intel 387 should work fine with an AMD 386DX; the latter was a direct clone of the Intel 386. The extra rows of pins are perfectly normal — see &lt;a href=&quot;https://en.wikipedia.org/wiki/X87#/media/File:80386with387.JPG&quot;&gt;this photo&lt;/a&gt; for an example. (The extra pins were used for &lt;a href=&quot;http://www.cpu-world.com/CPUs/3167/&quot;&gt;Weitek 3167 co-processors&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure AMD ever produced their own 387; various on-line collections document the AMD 287, but not the 387. See &lt;a href=&quot;http://www.x86-guide.com/en/marques/AMD.html&quot;&gt;here&lt;/a&gt; or &lt;a href=&quot;http://www.cpu-info.com/index2.php?mainid=Copro&quot;&gt;here&lt;/a&gt; for example. AMD isn't listed in &lt;a href=&quot;http://www.cpu-world.com/CPUs/80387/index.html&quot;&gt;CPU World's list of 387 manufacturers&lt;/a&gt;...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2016-04-30T16:10:10.177" LastActivityDate="2016-04-30T16:10:10.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="363" PostTypeId="2" ParentId="360" CreationDate="2016-04-30T15:46:10.777" Score="7" Body="&lt;p&gt;AMD 80386 chips are die-identical to Intel's, as AMD cloned the Intel 386. So, putting an Intel 80387 (or ULSI 80387 or IIT-387) will do fine, as long as their speed is equal or faster than the main CPU..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The row of socket pinholes is, efectively, for the less standard Weitek 3167 coprocessor, which was not binary compatible with the 387.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-04-30T17:00:53.533" LastActivityDate="2016-04-30T17:00:53.533" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="364" PostTypeId="2" ParentId="302" CreationDate="2016-04-30T18:19:03.557" Score="7" Body="&lt;p&gt;From what I can tell, it succeeded more often than not. But when it succeeded, it did so silently (apart from audibly using the disk for some time) and you could just go on working as long as you didn't need to write to disk early. Very likely you either didn't notice or you forgot about those instances over the years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was only very vocal when you left the disk write protected or when it otherwise failed to complete its task and those are the instances that we remember the easiest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As already explained in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/304/92&quot;&gt;nsandersen's answer&lt;/a&gt;, its task was to get an invalid block allocation bitmap back into a valid state. In order to find out which blocks are in use, it scanned through all directories, starting from the file system root, taking note of all metadata blocks (including all extension blocks) and the locations of the file data blocks and marking all those as occupied while marking all other as free. (Which also explains why it would take longer on a disk with a more complicated directory structure and on (fragmented) file systems where the metadata blocks are spread out over a far distance.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it could only finish its task if it didn't find any invalid blocks or inconsistencies during the process. If it stumbled upon an inconsistency, it would stop, report its failure and leave the disk unchanged. You were then unable to write to the disk until you used a more sophisticated repair / salvage program on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example of those repair programs you mention &lt;em&gt;Disk Doctor&lt;/em&gt;. From my experience, it was often unable to successfully repair an invalid file system. Not seldom it even did changes to the disk that made the situation worse and you lost more data than necessary. Usually you were better off resorting to third party programs like &lt;em&gt;DiskSalv&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="92" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-04-30T18:27:58.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="365" PostTypeId="2" ParentId="356" CreationDate="2016-04-30T23:19:23.407" Score="8" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7/12&quot;&gt;The same stuff used to clean electronics mentioned in this answer&lt;/a&gt; (e.g., &quot;CRC QD Contact Cleaner&quot;) will also clean contacts in computer keyboards. As discussed there, do not get the type used to clean and &lt;em&gt;lubricate&lt;/em&gt; potentiometers, as this has a (surprise!) light lubricant in it. Still, an easy to make mistake.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The plain old contact cleaner found at hardware and electronic supply stores will do. Remove the keyboard from the case, and spray spaces between the keys liberally, letting the liquid run and boil out the various holes at the bottom and sides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've used this stuff to clean pop out of an original silver Color Computer in the 80s.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The OP used this stuff I recommended and it worked - mostly. He had to add a thin piece of felt under the keyboard mylar to get the keyboard fully working. Being as this was a common type of keyboard for the day, this addition might be helpful to others.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-05-12T20:34:50.220" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="366" PostTypeId="2" ParentId="357" CreationDate="2016-05-01T00:17:55.977" Score="25" Body="&lt;p&gt;The way to identify different Apple IIs is described in Apple II &lt;a href=&quot;http://www.1000bit.it/support/manuali/apple/technotes/misc/tn.misc.07.html&quot; rel=&quot;noreferrer&quot;&gt;Miscellaneous Tech Note #7&lt;/a&gt;.  Excerpting from that document:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To identify which computer of the Apple II family is executing your program, you must check the following identification bytes. These bytes are in the main bank of main ROM (shadowed on the Apple IIgs), and you should make sure that this bank is switched in before making decisions based on the contents of these locations.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Machine                    $FBB3    $FB1E    $FBC0    $FBDD    $FBBE    $FBBF&#xA;-----------------------------------------------------------------------------&#xA;Apple ][                    $38              [$60]                      [$2F]&#xA;Apple ][+                   $EA      $AD     [$EA]                      [$EA]&#xA;Apple ][ J-Plus             $C9     [$AD]    [$EA]                      [$EA]&#xA;Apple /// (emulation)       $EA      $8A&#xA;Apple IIe                   $06               $EA                       [$C1]&#xA;Apple IIe (enhanced)        $06               $E0                       [$00]&#xA;Apple IIe Option Card       $06               $E0      $02      $00&#xA;Apple IIc                   $06               $00                        $FF&#xA;Apple IIc (3.5 ROM)         $06               $00                        $00&#xA;Apple IIc (Org. Mem. Exp.)  $06               $00                        $03&#xA;Apple IIc (Rev. Mem. Exp.)  $06               $00                        $04 &#xA;Apple IIc Plus              $06               $00                        $05&#xA;Apple IIgs                  (see below)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;The Apple IIe Card for Macintosh LC uses the same identification bytes ($FBB3 and $FBC0) as an enhanced Apple IIe. Location $FBDD allows you to tell the difference between the Apple IIe Card and an enhanced Apple IIe because $FBDD will always contain the value $02 on the Apple IIe Card. Location $FBBE is the version byte for the Apple IIe Card (just as $FBBF is the version byte for the Apple IIc family) and is $00 for the first release of the Apple IIe Card.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The ID bytes for an Apple IIgs are not listed in the table since they match those of an enhanced Apple IIe. Future 16-bit Apple II products may match different Apple II identification bytes for compatibility reasons, so to identify a machine as a IIgs or other 16-bit Apple II, you must make the following ROM call:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SEC               ;Set carry bit (flag)&#xA;JSR $FE1F         ;Call to the monitor&#xA;BCS OLDMACHINE    ;If carry is still set, then old machine&#xA;BCC NEWMACHINE    ;If carry is clear, then new machine&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The IIgs ROM version information can be determined from the contents of the A/X/Y registers set by &lt;code&gt;$FE1F&lt;/code&gt; when the carry is clear.  (The ROM versions are described in &lt;a href=&quot;http://www.1000bit.it/support/manuali/apple/technotes/iigs/tn.iigs.026.html&quot; rel=&quot;noreferrer&quot;&gt;IIgs Tech Note #26&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;Bit      Accumulator                       X Register  Y Register&#xA;------------------------------------------------------------------------&#xA;Bit 15   Reserved                          Reserved    Machine ID Number &#xA;                                                       (0 = Apple IIgs)&#xA;Bit 14   Reserved                          Reserved    Machine ID Number&#xA;Bit 13   Reserved                          Reserved    Machine ID Number&#xA;Bit 12   Reserved                          Reserved    Machine ID Number &#xA;Bit 11   Reserved                          Reserved    Machine ID Number&#xA;Bit 10   Reserved                          Reserved    Machine ID Number&#xA;Bit 9    Reserved                          Reserved    Machine ID Number&#xA;Bit 8    Reserved                          Reserved    Machine ID Number&#xA;Bit 7    Reserved                          Reserved    ROM version number&#xA;Bit 6    1 if system has memory expansion slot&#xA;                                           Reserved    ROM version number&#xA;Bit 5    1 if system has IWM port          Reserved    ROM version number&#xA;Bit 4    1 if system has a built-in clock  Reserved    ROM version number&#xA;Bit 3    1 if system has desktop bus       Reserved    ROM version number&#xA;Bit 2    1 if system has SCC built-in      Reserved    ROM version number&#xA;Bit 1    1 if system has external slots    Reserved    ROM version number&#xA;Bit 0    1 if system has internal ports    Reserved    ROM version number&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;Note: In emulation or eight-bit mode, only the lower eight bits are returned.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The value in A will be slightly wrong if Y is zero (i.e. ROM 0), reporting $xx1F when it should be $xx7F.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code that does all of the checks, as well as identifying the memory configuration, can be found in &lt;a href=&quot;http://www.1000bit.it/support/manuali/apple/technotes/misc/tn.misc.02.html&quot; rel=&quot;noreferrer&quot;&gt;Miscellaneous Tech Note #2&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing not covered by the tech notes is how to tell the difference between a real Apple II and one of the not-quite-clones, such as the Franklin Ace.  Some versions of ProDOS had a sort of &lt;a href=&quot;http://umich.edu/~archive/apple2/misc/programmers/prodos.checksum.asm&quot; rel=&quot;noreferrer&quot;&gt;ROM checksum&lt;/a&gt;, and if the number came up wrong the OS would freeze during boot.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="71" LastEditDate="2020-05-19T12:26:55.377" LastActivityDate="2020-05-19T12:26:55.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="367" PostTypeId="1" CreationDate="2016-05-01T11:57:48.353" Score="7" ViewCount="99" Body="&lt;p&gt;Following in the line of this question&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/269/how-can-you-measure-time-using-basic-on-atari-xl-computers&quot;&gt;How can you measure time using BASIC on Atari XL computers?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to ask how can you do the same (measuring time, with a resolution of frames or better if possible, on an Oric Atmos 48K. There is no TIME or TIMER function as I can see, and I haven't had much luck finding a list of system variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I tried reading the Oric ROM disassmbly searching for clues (available here: &lt;a href=&quot;http://www.defence-force.org/ftp/oric/documentation/v1.1_rom_disassembly.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.defence-force.org/ftp/oric/documentation/v1.1_rom_disassembly.pdf&lt;/a&gt; ), and I've reached this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;EDFC 29 7F      AND #$7F      This section sets up the 6522&#xA;EDFE 09 40      ORA #$40      to generate interrupts from&#xA;EE00 8D 0B 03   STA $030B     timer 1 every 10mS (in its&#xA;EE03 A9 C0      LDA #$C0      free running mode).&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A while after, in a code section titled as &quot;IRQ handler&quot;, I've come to this code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;EE39 A0 00      LDY #$00      This section decrements each&#xA;EE3B B9 72 02   LDA $0272,Y   of the three 16 bit counters&#xA;EE3E 38         SEC           in page 2 by 1.&#xA;EE3F E9 01      SBC #$01&#xA;EE41 99 72 02   STA $0272,Y&#xA;EE44 C8         INY&#xA;EE45 B9 72 02   LDA $0272,Y&#xA;EE48 E9 00      SBC #$00&#xA;EE4A 99 72 02   STA $0272,Y&#xA;EE4D C8         INY&#xA;EE4E C0 06      CPY #$06&#xA;EE50 D0 E9      BNE $EE3B&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So I thought there was a 10ms free running timer which caused a 16-bit counter located at &lt;code&gt;$0272&lt;/code&gt; to decrement by 1. I tried to &lt;code&gt;PEEK&lt;/code&gt; that location (&lt;code&gt;626&lt;/code&gt; in decimal) to see if it changes, but it doesn't. It may be a hardware counter located in a CIA or something. I'm not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all this, I'm in the same point as I started, so... does anyone know how to measure time from BASIC in a Oric Atmos 48K? Thanks!&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-05-03T05:54:42.433" Title="How to measure time with frame resolution or better using BASIC in an Oric Atmos 48K" Tags="&lt;oric-atmos&gt;&lt;benchmarking&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="368" PostTypeId="1" AcceptedAnswerId="369" CreationDate="2016-05-01T20:10:17.750" Score="17" ViewCount="948" Body="&lt;p&gt;I've seen several mentions of a &quot;Stack Blasting&quot; technique for copying memory quickly on the 6809. What is it? How does it work?&lt;/p&gt;&#xA;" OwnerUserId="29" LastActivityDate="2016-05-02T16:28:12.407" Title="Motorola 6809 Stack Blasting" Tags="&lt;6809&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="369" PostTypeId="2" ParentId="368" CreationDate="2016-05-01T21:19:53.270" Score="23" Body="&lt;p&gt;The 6809 has a couple of instructions which provide very quick ways of pulling (popping) and pushing registers off and onto the stack, &lt;code&gt;PULS&lt;/code&gt;/&lt;code&gt;PULU&lt;/code&gt; and &lt;code&gt;PSHS&lt;/code&gt;/&lt;code&gt;PSHU&lt;/code&gt;. &lt;code&gt;PSHx&lt;/code&gt; only takes 5 cycles plus one per byte, which is much faster than other methods of writing to memory. So by pointing the stack registers (&lt;code&gt;U&lt;/code&gt; and/or &lt;code&gt;S&lt;/code&gt;) at the area of memory you want to read from and/or write to, you can quickly access memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This works particularly well for copying memory, at least in cases where the layout is amenable: read into as many registers as possible using &lt;code&gt;PULS&lt;/code&gt; or &lt;code&gt;PULU&lt;/code&gt; (you get to specify which registers are used, the CPU doesn't force you to push or pull all of them), and write using &lt;code&gt;PSHU&lt;/code&gt; or &lt;code&gt;PSHS&lt;/code&gt;. You'd set &lt;code&gt;S&lt;/code&gt; to point to the memory to be read, and &lt;code&gt;U&lt;/code&gt; to the address to write to, or vice versa; the pull and push instructions increment and decrement the stack registers as appropriate. The 6809 has three general-purpose 16-bit registers, &lt;code&gt;D&lt;/code&gt; (also known as &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt; combined), &lt;code&gt;X&lt;/code&gt; and &lt;code&gt;Y&lt;/code&gt;, and one register that can often be spared in these kinds of loops, &lt;code&gt;DP&lt;/code&gt;; using this technique you can copy 7 bytes in 24 cycles:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; point S at the memory to be read&#xA;; point U at the target&#xA;PULS D,X,Y,DP     ; read 7 bytes into D, X, Y, DP, and increment S&#xA;PSHU D,X,Y,DP     ; write D, X, Y, DP to memory and decrement U&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This compares to the basic memory copying technique, via the &lt;code&gt;U&lt;/code&gt; stack pointer, which takes 16 cycles per word (two bytes) — five cycles per load/store, and three cycles per index increment:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; point X at the memory to be read&#xA;; point Y at the target&#xA;LDU ,X++          ; read 2 bytes into U and increment X&#xA;STU ,Y++          ; write U to memory and increment Y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So stack blasting takes less than 4 cycles per byte, whereas &lt;code&gt;LDU&lt;/code&gt;/&lt;code&gt;STU&lt;/code&gt; takes 8 cycles per byte... Furthermore, since stack blasting copies more memory per instruction pair, there's less overhead involved with loops or loop unrolling!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are of course some caveats. In particular, any interrupts which occur during this stack blast will affect the values being copied, since the interrupt will use the &quot;stack&quot; that's been set up for the copy. And since this is stack-based, reads and writes move in opposite directions... These two factors mean that stack blasting is only really useful for writing graphics to the screen: the source material can be laid out appropriately in advance, and changes caused by interrupts would only result in temporary artifacts on screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tom Moertel has a &lt;a href=&quot;http://blog.moertel.com/posts/2013-12-14-great-old-timey-game-programming-hack.html&quot;&gt;great write-up&lt;/a&gt; of this technique, including more detailed comparisons with other memory-copying techniques (offset load/stores instead of incrementing load/stores for example). He shows how he went from 157 cycles to copy 14 bytes using a typical loop, to 120 cycles with an unrolled loop, to 98 cycles with an unrolled, fixed-offset copy, down to 56 cycles using stack blasting.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2016-05-02T16:28:12.407" LastActivityDate="2016-05-02T16:28:12.407" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="370" PostTypeId="2" ParentId="367" CreationDate="2016-05-01T22:32:14.233" Score="3" Body="&lt;p&gt;It turns out that the information about system variables were at the end of the disassembly document. This is an excerpt from it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$272,$273    Keyboard timer.&#xA;$274,$275    Cursor timer.&#xA;$276,$277    Spare counter — also used by WAIT (and printer in V1.0).&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And the argument for the &lt;code&gt;WAIT&lt;/code&gt; command is a multiple of &lt;code&gt;10 ms&lt;/code&gt;, so &lt;code&gt;WAIT 100&lt;/code&gt; waits for 1 second. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the resolution of the spare counter used by &lt;code&gt;WAIT&lt;/code&gt; is &lt;code&gt;10 ms&lt;/code&gt;. More than enough for me!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get the current value of this spare counter, which is a 16 bit number, I have to use the &lt;code&gt;DEEK&lt;/code&gt; function, a variant of &lt;code&gt;PEEK&lt;/code&gt; to retrieve a 16-bit number from memory, like this: &lt;code&gt;DEEK(#276)&lt;/code&gt; &lt;code&gt;#276&lt;/code&gt; is an hexadecimal number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Counters in the Oric Atmos computer count backwards, so the number retrieved when the measurement starts will be greater than the one retrieved when the measurement ends.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, this is the SAXPY benchmark applied to the Oric Atmos 48K:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/S0kjy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S0kjy.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-05-01T22:32:14.233" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="371" PostTypeId="1" CreationDate="2016-05-02T04:11:48.107" Score="4" ViewCount="154" Body="&lt;p&gt;My Zire 21 PDA's battery won't hold a charge for more than a few minutes.  How do I replace it?&lt;/p&gt;&#xA;" OwnerUserId="4" LastEditorUserId="175" LastEditDate="2016-05-02T19:33:03.800" LastActivityDate="2016-05-08T17:43:38.907" Title="How do I replace the battery on my Palm Zire 21?" Tags="&lt;battery&gt;&lt;pda&gt;&lt;palm-zire&gt;&lt;palm&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="372" PostTypeId="1" AcceptedAnswerId="388" CreationDate="2016-05-02T10:41:02.843" Score="25" ViewCount="1550" Body="&lt;p&gt;The Kickstart 1.3 ROM file that is supplied with Cloanto's Amiga Forever (&lt;code&gt;amiga-os-130.rom&lt;/code&gt;) is very slightly different to that which you'd get by dumping a real 1.3 ROM from an Amiga 500.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Byte at 0x0019d changes from 0x08 to 0x20 (this appears to be in exec.library)&lt;/li&gt;&#xA;&lt;li&gt;Byte at 0x2af9d changes from 0xb9 to 0xbc (this appears to be in trackdisk.device)&lt;/li&gt;&#xA;&lt;li&gt;The checksum at 0x3ffe8 is updated accordingly&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In both cases the ROM version is 34.5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the purpose of these changes?&lt;/p&gt;&#xA;" OwnerUserId="149" LastEditorUserId="149" LastEditDate="2018-06-01T11:52:50.137" LastActivityDate="2018-06-01T11:52:50.137" Title="Why are there two, different, Kickstart 1.3 ROMs with the same 34.5 version number?" Tags="&lt;amiga&gt;&lt;emulation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="373" PostTypeId="5" CreationDate="2016-05-02T15:25:54.477" Score="0" Body="&lt;p&gt;The 6809 was designed by Terry Ritter and Joel Boney at Motorola's Austin Texas facility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can be considered a second generation 8 bit microprocessor built by studying the short falls and programming experiences from the 6800 line of chips.&lt;/p&gt;&#xA;" OwnerUserId="29" LastEditorUserId="29" LastEditDate="2016-05-04T05:50:42.147" LastActivityDate="2016-05-04T05:50:42.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="374" PostTypeId="4" CreationDate="2016-05-02T15:25:54.477" Score="0" Body="For questions regarding the Motorola 6809 microprocessor." OwnerUserId="-1" LastEditorUserId="276" LastEditDate="2016-06-07T09:18:31.133" LastActivityDate="2016-06-07T09:18:31.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="375" PostTypeId="2" ParentId="25" CreationDate="2016-05-02T19:42:21.747" Score="8" Body="&lt;p&gt;&lt;a href=&quot;http://www.coco3.com/community/wp-content/uploads/2010/03/6x09_Instruction_Sets.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;This PDF&lt;/a&gt; (link stale; here's &lt;a href=&quot;https://web.archive.org/web/20200818113646if_/http://www.coco3.com/community/wp-content/uploads/2010/03/6x09_Instruction_Sets.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;an archive.org link&lt;/a&gt;) by Darren Atkinson gives you everything you want to know about programming differences between the two.&lt;/p&gt;&#xA;&lt;p&gt;It begins with a very thorough Leventhal-style instruction set reference, with everything 6309-specific clearly marked, then an in-depth article about the differences, then an opcode map, then a chart of undefined opcode behavior.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2021-02-10T17:00:56.207" LastActivityDate="2021-02-10T17:00:56.207" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="376" PostTypeId="1" AcceptedAnswerId="377" CreationDate="2016-05-02T20:31:30.920" Score="6" ViewCount="828" Body="&lt;p&gt;Currently about all of &quot;8-bit micro&quot; games that I know is either abandonware (which is a gray area) or free fan works. But is there some kind of shop, market, some place where you can purchase these games, or other software fully legally for money? Some kind of retro-shop, or such?&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2016-05-05T11:07:57.963" Title="Does a market/shop with fully legal 8-bit software/games exist?" Tags="&lt;software&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="2" ClosedDate="2016-05-06T07:23:49.673" ContentLicense="CC BY-SA 3.0" />
  <row Id="377" PostTypeId="2" ParentId="376" CreationDate="2016-05-02T20:43:31.493" Score="6" Body="&lt;p&gt;There are quite a few... On the homebrew front for example, the &lt;a href=&quot;https://www.atariage.com/store/&quot;&gt;AtariAge store&lt;/a&gt; sells packaged homebrew games for 8-bit Ataris (and now Intellivision), as does &lt;a href=&quot;https://proc-atari.de/en/software-boardgames&quot;&gt;pro(c)&lt;/a&gt; (along with its magazine). You can also find stores which still have &quot;old new&quot; stock of games, computers and accessories; for example &lt;a href=&quot;http://best-electronics-ca.com/text.htm&quot;&gt;Best Electronics&lt;/a&gt; for Atari computers and consoles. There are no doubt others for other platforms!&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-05-02T20:43:31.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="378" PostTypeId="2" ParentId="376" CreationDate="2016-05-02T21:12:30.407" Score="7" Body="&lt;p&gt;For the ZX Spectrum and MSX there is Matranet, which sells physical versions (e.g. tapes and cartridges) of recent releases.&#xA;&lt;a href=&quot;http://www.matranet.net/boutique/boutique.php&quot;&gt;http://www.matranet.net/boutique/boutique.php&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-05-02T21:12:30.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="379" PostTypeId="1" CreationDate="2016-05-02T21:33:53.267" Score="26" ViewCount="947" Body="&lt;p&gt;I have some old electronics with white plastic that's starting to turn yellow. I know it's caused by &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/168/why-do-older-computer-cases-turn-yellow&quot;&gt;flame retardants, UV rays, and so on&lt;/a&gt;. How can I restore my electronics to their former color?&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-05-11T16:28:36.773" Title="How to get rid of yellowing in plastics?" Tags="&lt;maintenance&gt;&lt;restoration&gt;&lt;plastic&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="380" PostTypeId="1" AcceptedAnswerId="383" CreationDate="2016-05-03T02:37:42.540" Score="11" ViewCount="2413" Body="&lt;p&gt;I have an Amiga that has the Kickstart 3.0 ROMs installed.  What advantages are there to replacing the Kickstart ROMs with 3.1?  Is there any software that requires Kickstart 3.1 to function?&lt;/p&gt;&#xA;" OwnerUserId="64" LastEditorUserId="357" LastEditDate="2016-08-13T14:24:18.837" LastActivityDate="2016-08-13T14:24:18.837" Title="What advantages are there to replacing Kickstart 3.0 with Kickstart 3.1?" Tags="&lt;amiga&gt;&lt;amiga-kickstart&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="382" PostTypeId="1" AcceptedAnswerId="404" CreationDate="2016-05-03T05:03:54.970" Score="18" ViewCount="803" Body="&lt;p&gt;I'm attempting to install &lt;em&gt;Sid Meyer's Colonization&lt;/em&gt; in DOSBox from the original floppies, and it gives me the error message &amp;quot;You have specified a drive that doesn't physically exist!&amp;quot; when I try to run &amp;quot;install.exe&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I'm running DOSBox 0.74 on 64-bit Gentoo Linux.  I've got the first floppy of the set mounted in Linux at &lt;code&gt;/mnt/floppy&lt;/code&gt;, and I've mounted that directory in DOSBox as drive &lt;code&gt;A:&lt;/code&gt;.  I've verified that the floppy disk isn't corrupted.&lt;/p&gt;&#xA;" OwnerUserId="4" LastEditorUserId="4" LastEditDate="2021-02-18T21:25:18.840" LastActivityDate="2021-02-18T21:25:18.840" Title="Unable to install Colonization in DOSBox" Tags="&lt;emulation&gt;&lt;dosbox&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="383" PostTypeId="2" ParentId="380" CreationDate="2016-05-03T07:23:44.200" Score="12" Body="&lt;p&gt;&lt;a href=&quot;http://wiki.icomp.de/wiki/ACA1232#Memory&quot;&gt;Kickstart 3.1 can detect some memory expansions automatically&lt;/a&gt; so that AddMem is not needed in your startup sequence, and it has &lt;a href=&quot;http://www.gregdonner.org/workbench/wb_31.html&quot;&gt;a few other improvements&lt;/a&gt; that are required for Workbench (AmigaOS) 3.5 and 3.9.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-05-03T07:23:44.200" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="384" PostTypeId="1" AcceptedAnswerId="395" CreationDate="2016-05-03T13:58:49.783" Score="16" ViewCount="1117" Body="&lt;p&gt;Apple did make some changes to AppleSoft BASIC over the years between the first version on the Apple II and the last version on the Enhanced IIe and IIe card. What are the differences between the versions of AppleSoft BASIC? &lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2019-02-09T18:24:54.130" Title="What are the differences between the versions of AppleSoft BASIC?" Tags="&lt;apple-ii&gt;&lt;apple&gt;&lt;applesoft-basic&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="385" PostTypeId="2" ParentId="379" CreationDate="2016-05-03T14:57:11.063" Score="3" Body="&lt;p&gt;In this video:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/SO4mjEasdTM&quot; rel=&quot;nofollow&quot;&gt;https://youtu.be/SO4mjEasdTM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The producer uses hydrogen peroxide and sunlight to de-yellow his plastics. The results look really good, but there is not much detail for his formula.&lt;/p&gt;&#xA;" OwnerUserId="29" LastActivityDate="2016-05-03T14:57:11.063" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="386" PostTypeId="5" CreationDate="2016-05-03T15:53:50.627" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://www.dosbox.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOSBox&lt;/a&gt; is an x86 emulator intended for use with DOS-era games.  It provides emulation of 386, 486, and Pentium CPUs. The emulator is widely used for older games that won't run (or run poorly) under modern versions of Windows. DOSBox is not the same as ‘DOS boxes’ built-in to Windows, implemented by NTVDM (in Windows NT) or the VMM (in Windows 3.x and 9x). For the former, use &lt;a href=&quot;/questions/tagged/ntvdm&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;ntvdm&amp;#39;&quot; rel=&quot;tag&quot;&gt;ntvdm&lt;/a&gt;; for the latter, you may use &lt;a href=&quot;/questions/tagged/windows-3.x&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;windows-3.x&amp;#39;&quot; rel=&quot;tag&quot;&gt;windows-3.x&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/windows-95&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;windows-95&amp;#39;&quot; rel=&quot;tag&quot;&gt;windows-95&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/windows-98&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;windows-98&amp;#39;&quot; rel=&quot;tag&quot;&gt;windows-98&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/windows-me&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;windows-me&amp;#39;&quot; rel=&quot;tag&quot;&gt;windows-me&lt;/a&gt; or simply &lt;a href=&quot;/questions/tagged/windows&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;windows&amp;#39;&quot; rel=&quot;tag&quot;&gt;windows&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You should not use this tag if you merely happen to be using DOSBox, but it is not otherwise relevant to the question (i.e. where you might as well have been running the software under a different emulator, or on bare metal).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Not every emulation question is on-topic!&lt;/strong&gt; Questions about installing DOSBox and configuring it for the host platform are better asked elsewhere. See tag wiki for the &lt;a href=&quot;/questions/tagged/emulation&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;emulation&amp;#39;&quot; rel=&quot;tag&quot;&gt;emulation&lt;/a&gt; tag for more information.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="15334" LastEditDate="2021-03-05T18:59:29.730" LastActivityDate="2021-03-05T18:59:29.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="387" PostTypeId="4" CreationDate="2016-05-03T15:53:50.627" Score="0" Body="Using retro software in the DOSBox emulator. Avoid this tag if DOSBox is not crucial to the question. See tag wiki for guidance." OwnerUserId="56" LastEditorUserId="15334" LastEditDate="2021-02-18T10:30:54.283" LastActivityDate="2021-02-18T10:30:54.283" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="388" PostTypeId="2" ParentId="372" CreationDate="2016-05-03T18:14:28.457" Score="29" Body="&lt;p&gt;The first change is to patch this code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00fc0196 266E003E                        movea.l         $3e(a6), a3&#xA;00fc019a B7FC00080000                    cmpa.l          #$80000, a3&#xA;00fc01a0 622C                            bhi.s           $fc01ce.l&#xA;00fc01a2 B7FC00040000                    cmpa.l          #$40000, a3&#xA;00fc01a8 6524                            bcs.s           $fc01ce.l&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This code reads the size of Chip RAM from execbase and checks that it is no greater than 512kiB ($80000) and no less than 256kiB ($40000). If the value is outside the expected range, a full reinitialisation occurs because it's assumed that execbase has become corrupted. This is the source of the bug where reset-proof RAM disks did not survive a reset on machines with more than 512kiB of Chip RAM. The patch changes the maximum expected size to 2MiB ($200000).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not familiar with the code patched in the second change, but it updates the &lt;em&gt;opcode&lt;/em&gt; of this instruction:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00feaf9c B0B900008000                    cmp.l           $8000.l, d0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;... from B0B9 to B0BC:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00feaf9c B0BC00008000                    cmp.l           #$8000.l, d0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is clearly fixing a bug where the wrong instruction was used because the value at location $8000 will be random and it makes much more sense to compare against a constant than a random number.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2016-05-03T18:14:28.457" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="389" PostTypeId="2" ParentId="379" CreationDate="2016-05-03T18:45:57.243" Score="13" Body="&lt;p&gt;Search the web for the term &quot;Retrobrite&quot; or &quot;Retr0bright&quot;. You will also find numerous sources (including YouTube) for recipes and how-to's using OxyClean and other sodium percarbonate-based products which yield hydrogen peroxide in solution or in a paste form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These techniques are very popular for whitening cases with the Apple ][ and Atari communities. You can expect to do some experimenting with solution concentrations and light exposure to get the best possible effect.  Good luck.&lt;/p&gt;&#xA;" OwnerUserId="300" LastEditorDisplayName="user12" LastEditDate="2016-05-03T19:04:29.100" LastActivityDate="2016-05-03T19:04:29.100" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="390" PostTypeId="2" ParentId="309" CreationDate="2016-05-03T19:25:22.250" Score="15" Body="&lt;p&gt;A &lt;em&gt;very good&lt;/em&gt; first answer however I would also like to note that any data rates above 300bps could not be acoustically coupled and were direct connect modems only.  And anything 33.6K and above basically demands at least one digital endpoint.  By that I mean that the modem access concentrator would connect to the Public Switched Telephone Network via data-grade T-1 or larger (see also AT&amp;amp;T T-Carrier) data trunks.  The DS-1 that rides the T-1 is channelized and the DS-0s are 64K clear channels and thus suitable for data rates up to 57.6K plus some protocol overhead and error correction.  The end user has significantly lower upload speeds because they're using analog (voice) lines.  This is also the genesis of today's asymmetric residential data model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it all comes back to baud rate.  Bit rate is a measure of the number of data bits transmitted in one second.  Baud rate is the number of times a signal in a communications channel &lt;em&gt;can change state&lt;/em&gt; in one second.  Regardless of the techniques used to encode bits in a carrier, the baud rate was always a limiting factor and was determined by the dynamic range of the signal processors available in the PSTN at the time.  110 Baud was safe.  300 Baud was pushing the limits of signal processing available in the 60s and 70s.  And from there we were able to stack new methods of line coding and framing on top of that 300 Baud to make it almost up to 64Kbps.  Amazing, huh?&lt;/p&gt;&#xA;" OwnerUserId="300" LastActivityDate="2016-05-03T19:25:22.250" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="391" PostTypeId="2" ParentId="384" CreationDate="2016-05-03T19:53:36.237" Score="5" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Applesoft_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;AppleSoft BASIC Wikipedia page&lt;/a&gt; has quite a bit of info on this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not really a feature, but the RAM footprint changed between the 1 &amp;amp; 2.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;AppleSoft I - 8.5 kb&lt;/li&gt;&#xA;&lt;li&gt;AppleSoft II - 10 kb&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;AppleSoft I&lt;/strong&gt; had these features over the &quot;Integer BASIC&quot; (which Woz had written):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Atomic strings: A string is no longer an array of characters (as in Integer BASIC and C); it is instead a garbage-collected object (as in&#xA;  Scheme and Java).  - This allows for string arrays; &lt;code&gt;DIM A$(10)&lt;/code&gt;&#xA;  resulted in a vector of eleven string variables numbered 0–10.&lt;/li&gt;&#xA;  &lt;li&gt;Multidimensional arrays (numbers or strings)&lt;/li&gt;&#xA;  &lt;li&gt;Single-precision floating point variables with an 8-bit exponent and a 31-bit significand and improved math capabilities, including&#xA;  trigonometry and logarithmic functions&lt;/li&gt;&#xA;  &lt;li&gt;&lt;code&gt;DATA&lt;/code&gt; statements, with &lt;code&gt;READ&lt;/code&gt; and &lt;code&gt;RESTORE&lt;/code&gt; commands, for representing numerical and string values in quantity&lt;/li&gt;&#xA;  &lt;li&gt;&lt;code&gt;CHR$&lt;/code&gt;, &lt;code&gt;STR$&lt;/code&gt;, and &lt;code&gt;VAL&lt;/code&gt; functions for converting between string and numeric types (both languages did have the &lt;code&gt;ASC&lt;/code&gt; function)&lt;/li&gt;&#xA;  &lt;li&gt;User-defined functions: simple one-line functions written in BASIC, with a single parameter&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Additionally, &lt;strong&gt;AppleSoft II&lt;/strong&gt; had these feature improvements over AppleSoft I:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;All commands supporting Apple's &quot;high resolution&quot; graphics (9 total)&lt;/li&gt;&#xA;  &lt;li&gt;Error-trapping with &lt;code&gt;ONERR...GOTO&lt;/code&gt; and &lt;code&gt;RESUME&lt;/code&gt;&lt;/li&gt;&#xA;  &lt;li&gt;Machine-routine shorthand call &lt;code&gt;&amp;amp;&lt;/code&gt;&lt;/li&gt;&#xA;  &lt;li&gt;Screen-clearing &lt;code&gt;HOME&lt;/code&gt; (a call to a system ROM routine)&lt;/li&gt;&#xA;  &lt;li&gt;Text-output control &lt;code&gt;NORMAL&lt;/code&gt;, &lt;code&gt;INVERSE&lt;/code&gt;, &lt;code&gt;FLASH&lt;/code&gt; and &lt;code&gt;SPEED=&lt;/code&gt;&lt;/li&gt;&#xA;  &lt;li&gt;The print-space function &lt;code&gt;SPC()&lt;/code&gt; is listed among reserved words in the Applesoft I manual, but is not otherwise documented (the &lt;code&gt;TAB()&lt;/code&gt; print-function &lt;em&gt;is&lt;/em&gt; documented in it)&lt;/li&gt;&#xA;  &lt;li&gt;Cassette tape storage of numerical arrays: &lt;code&gt;STORE&lt;/code&gt; and &lt;code&gt;RECALL&lt;/code&gt;&lt;/li&gt;&#xA;  &lt;li&gt;Device response: &lt;code&gt;WAIT&lt;/code&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Apple III Microsoft BASIC&lt;/strong&gt; added:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;code&gt;INPUT$()&lt;/code&gt; function to replace Applesoft's &lt;code&gt;GET&lt;/code&gt; command.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;code&gt;LINE INPUT&lt;/code&gt; statement to input an entire line of text, regardless of punctuation, into a single string variable.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;code&gt;LPRINT&lt;/code&gt; and &lt;code&gt;LPRINT USING&lt;/code&gt; statements to automatically direct output to paper.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;code&gt;LSET&lt;/code&gt; and &lt;code&gt;RSET&lt;/code&gt; statements to left- or right-justify a string expression within a given string variable's character length.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;code&gt;OCT$()&lt;/code&gt; function for output, and &lt;code&gt;&amp;amp;&lt;/code&gt;- or &lt;code&gt;&amp;amp;O&lt;/code&gt;-formatted expressions, for manipulating octal notation.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;code&gt;SPACE$()&lt;/code&gt; function for generating blank spaces outside of a &lt;code&gt;PRINT&lt;/code&gt; statement, and &lt;code&gt;STRING$()&lt;/code&gt; function to do likewise with any&#xA;  character.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;code&gt;WHILE&lt;/code&gt;...&lt;code&gt;WEND&lt;/code&gt; statements, for loop structures built on general Boolean conditions without an index variable.&lt;/li&gt;&#xA;  &lt;li&gt;Bitwise Boolean (16-bit) operations (&lt;code&gt;AND&lt;/code&gt;, &lt;code&gt;OR&lt;/code&gt;, &lt;code&gt;NOT&lt;/code&gt;), with additional operators &lt;code&gt;XOR&lt;/code&gt;, &lt;code&gt;EQV&lt;/code&gt;, &lt;code&gt;IMP&lt;/code&gt;.&lt;/li&gt;&#xA;  &lt;li&gt;Line number specification in the &lt;code&gt;RESTORE&lt;/code&gt; command.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;code&gt;RESUME&lt;/code&gt; options of &lt;code&gt;NEXT&lt;/code&gt; (to skip to the statement after that which caused the error) or a specified line number (which replaces the&#xA;  idea of exiting error-handling by &lt;code&gt;GOTO&lt;/code&gt;-line, thus avoiding Applesoft&#xA;  II's stack error problem).&lt;/li&gt;&#xA;  &lt;li&gt;Multiple parameters in user-defined (&lt;code&gt;DEF FN&lt;/code&gt;) functions.&lt;/li&gt;&#xA;  &lt;li&gt;A return to the old Applesoft One concept of having multiple &lt;code&gt;USR()&lt;/code&gt; functions at different addresses, by establishing ten&#xA;  different &lt;code&gt;USR&lt;/code&gt; functions, numbered &lt;code&gt;USR0&lt;/code&gt; to &lt;code&gt;USR9&lt;/code&gt;, with separate&#xA;  &lt;code&gt;DEF&lt;/code&gt; &lt;code&gt;USRx&lt;/code&gt; statements to define the address of each. The argument&#xA;  passed to a &lt;code&gt;USRx&lt;/code&gt; function can be of any specific type, including&#xA;  string. The returned value can also be of any type, by default the&#xA;  same type as the argument passed.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Apple Business BASIC&lt;/strong&gt; had big changes around direct memory access, and even removed &lt;code&gt;PEEK&lt;/code&gt; and &lt;code&gt;POKE&lt;/code&gt; from the language.  Their provided functionality was replaced with functions like:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;code&gt;BUTTON()&lt;/code&gt; function to read game-controller buttons.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;code&gt;WINDOW&lt;/code&gt; statement to define the active window of the text screen by its coordinates.&lt;/li&gt;&#xA;  &lt;li&gt;Use of the &lt;code&gt;KBD&lt;/code&gt;, &lt;code&gt;HPOS&lt;/code&gt;, and &lt;code&gt;VPOS&lt;/code&gt; system variables.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="125" LastEditorUserId="4959" LastEditDate="2017-04-28T08:07:36.200" LastActivityDate="2017-04-28T08:07:36.200" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="392" PostTypeId="2" ParentId="376" CreationDate="2016-05-03T20:07:06.183" Score="7" Body="&lt;p&gt;C64 wise, you have &lt;a href=&quot;http://rgcd.co.uk/&quot;&gt;RGCD&lt;/a&gt; who sell new cartridge releases, along with &lt;a href=&quot;http://psytronik.net&quot;&gt;Psytronik Software&lt;/a&gt; and &lt;a href=&quot;http://www.protovision-online.com&quot;&gt;Protovision&lt;/a&gt; who both have releases on disk, whilst Psytronik also offer tape copies as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the BBC Micro/Electron, there's &lt;a href=&quot;http://www.retrosoftware.co.uk&quot;&gt;Retro Software&lt;/a&gt;, who offer some as well.&lt;/p&gt;&#xA;" OwnerUserId="10" LastActivityDate="2016-05-03T20:07:06.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="393" PostTypeId="2" ParentId="151" CreationDate="2016-05-03T20:25:52.350" Score="5" Body="&lt;p&gt;I've not actually played it to confirm how well it does it, but &lt;a href=&quot;http://hol.abime.net/1068&quot; rel=&quot;noreferrer&quot;&gt;Pioneer Plague&lt;/a&gt; claims to run in HAM mode, but I've not actually given it a whirl to see how well it runs in comparison.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Someone has recorded some gameplay footage and put it up &lt;a href=&quot;https://www.youtube.com/watch?v=JSLcN6GBzO0&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; though, so you can get an idea - though I believe to be emulated, so YMMV :)&lt;/p&gt;&#xA;" OwnerUserId="10" LastActivityDate="2016-05-03T20:25:52.350" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="394" PostTypeId="2" ParentId="151" CreationDate="2016-05-03T22:43:11.370" Score="7" Body="&lt;p&gt;Shadow of the Beast uses dual play field mode (of 3 bitplanes each) and some crazy sprite reuse to get its color on the screen. Have a look at this breakdown:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.codetapper.com/amiga/sprite-tricks/shadow-of-the-beast/&quot;&gt;http://www.codetapper.com/amiga/sprite-tricks/shadow-of-the-beast/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="293" LastActivityDate="2016-05-03T22:43:11.370" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="395" PostTypeId="2" ParentId="384" CreationDate="2016-05-04T00:39:27.880" Score="14" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Applesoft_BASIC&quot;&gt;Wikipedia entry&lt;/a&gt; is a bit jumbled, ambiguous, and in some cases wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps it makes more sense to list changes by Apple II model, as documented by the fantastic &lt;a href=&quot;http://apple2history.org/history/ah16/&quot;&gt;Apple II History&lt;/a&gt; site. (The book has even more detail.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Apple II (1977)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;APPLESOFT I, based on Microsoft 6502 BASIC version 1.1&lt;/li&gt;&#xA;&lt;li&gt;Documented in the November 1977 &quot;Blue Book&quot;&lt;/li&gt;&#xA;&lt;li&gt;Available on tape&lt;/li&gt;&#xA;&lt;li&gt;Loaded into memory at $800-$29FF (8.5k)&lt;/li&gt;&#xA;&lt;li&gt;Program and variables at $2A00 up&lt;/li&gt;&#xA;&lt;li&gt;No built-in commands to manage hi-res graphics&lt;/li&gt;&#xA;&lt;li&gt;Option of allowing either LET and REM statements or the use of lo-res graphics&lt;/li&gt;&#xA;&lt;li&gt;Lo-res graphics commands: PLTG, TEX, PLTC, PLTP, PLTH, PLTV&lt;/li&gt;&#xA;&lt;li&gt;AND, OR and NOT perform bitwise operations&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Apple II Plus (1979)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;APPLESOFT II, based on Microsoft 6502 BASIC version 2&lt;/li&gt;&#xA;&lt;li&gt;Documented in the August 1978 &quot;Blue Book&quot;&lt;/li&gt;&#xA;&lt;li&gt;In mainboard ROM (also available on tape, disk, firware card ROM)&lt;/li&gt;&#xA;&lt;li&gt;Tape version loaded into memory at $800-$2FFF (10k)&lt;/li&gt;&#xA;&lt;li&gt;Tape version programs and variables at $3000 up&lt;/li&gt;&#xA;&lt;li&gt;ROM version in memory at $D000-$F7FF (10k)&lt;/li&gt;&#xA;&lt;li&gt;ROM version program and variables at $800 up&lt;/li&gt;&#xA;&lt;li&gt;Added commands for hi-res graphics: HGR, HPLOT ETC&lt;/li&gt;&#xA;&lt;li&gt;Lo-res graphics commands renamed to Integer BASIC keywords: GR, PLOT etc&lt;/li&gt;&#xA;&lt;li&gt;AND, OR and NOT perform boolean operations&lt;/li&gt;&#xA;&lt;li&gt;Many new commands:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Error-trapping: ONERR...GOTO and RESUME&lt;/li&gt;&#xA;&lt;li&gt;Machine-routine shorthand call: &amp;amp;&lt;/li&gt;&#xA;&lt;li&gt;Screen-clearing: HOME&lt;/li&gt;&#xA;&lt;li&gt;Text-output control: NORMAL, INVERSE, FLASH and SPEED=&lt;/li&gt;&#xA;&lt;li&gt;The print-space function: SPC()&lt;/li&gt;&#xA;&lt;li&gt;Cassette tape storage of numerical arrays: STORE and RECALL&lt;/li&gt;&#xA;&lt;li&gt;Device response: WAIT&lt;/li&gt;&#xA;&lt;li&gt;Program-line deletion: DEL&lt;/li&gt;&#xA;&lt;li&gt;Machine-routine access: CALL&lt;/li&gt;&#xA;&lt;li&gt;Peripheral device access: IN# and PR#&lt;/li&gt;&#xA;&lt;li&gt;Memory range control: HIMEM: and LOMEM:&lt;/li&gt;&#xA;&lt;li&gt;Execution tracking for debugging: TRACE and NOTRACE&lt;/li&gt;&#xA;&lt;li&gt;Screen-positioning: HTAB and VTAB&lt;/li&gt;&#xA;&lt;li&gt;Subroutine aborting: POP&lt;/li&gt;&#xA;&lt;li&gt;Read the analog controllers: PDL()&lt;/li&gt;&#xA;&lt;li&gt;Read the low-resolution graphics screen: SCRN()&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Apple //e (1983)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same as the Apple II Plus version&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Apple //e Enhanced (1985)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same as the Apple //e version, except:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Allowed entry of lowercase commands&lt;/li&gt;&#xA;&lt;li&gt;Screen output commands (PRINT, TAB, HTAB, etc.) more properly handle the 80-column screen&lt;/li&gt;&#xA;&lt;li&gt;Program listings were changed to begin in column 2, making screen editing easier&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Apple //c (1984) and //c Plus (1988)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same as the Apple //e enhanced version, except:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All of the cassette tape routines (LOAD, SAVE, SHLOAD, STORE, and RECALL) were removed&lt;/li&gt;&#xA;&lt;li&gt;The lo-res graphics commands (GR, HLIN, VLIN, PLOT, and SCRN) work with double lo-res&lt;/li&gt;&#xA;&lt;li&gt;PLOT had a destructive range bug&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Apple IIgs (1986)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same as the Apple //c version, except:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fixed the PLOT range bug&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="71" LastActivityDate="2016-05-04T00:39:27.880" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="396" PostTypeId="2" ParentId="376" CreationDate="2016-05-04T02:56:19.103" Score="4" Body="&lt;p&gt;For the Apple II, there aren't any one-stop shop type places for software, but if you go to the big sites like A2Central.com, you'll find links to companies still selling their software, and to shareware vendors still kicking (like myself).&lt;/p&gt;&#xA;" OwnerUserId="72" LastActivityDate="2016-05-04T02:56:19.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="397" PostTypeId="1" CreationDate="2016-05-04T05:20:39.267" Score="4" ViewCount="230" Body="&lt;p&gt;What is the max size for a cartridge based app on the Coco 3?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe the Coco 1 &amp;amp; 2 cartridge maxes at 16K, while the Coco 3 is 32K. However, I know there have been cart based games for the Coco 3 that exceed 32K and I'm unclear on how this is accomplished. Let's say I want to have a 256K cart, is that possible and how might it be accomplished?&lt;/p&gt;&#xA;" OwnerUserId="29" LastActivityDate="2016-05-04T19:09:36.137" Title="Breaking the CoCo 3 32K Cartridge Barrier" Tags="&lt;color-computer&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="398" PostTypeId="2" ParentId="397" CreationDate="2016-05-04T07:15:21.053" Score="2" Body="&lt;p&gt;This very topic is currently being debated on the Cocolist - the answer is 'a little less than 32K' on a Coco3, unless (as Cactus states above) you resort to bank switching:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://pairlist5.pair.net/pipermail/coco/2016-May/153680.html&quot; rel=&quot;nofollow&quot;&gt;https://pairlist5.pair.net/pipermail/coco/2016-May/153680.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="308" LastActivityDate="2016-05-04T07:15:21.053" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="399" PostTypeId="1" CreationDate="2016-05-04T11:17:02.053" Score="9" ViewCount="507" Body="&lt;p&gt;I recently acquired a &lt;a href=&quot;https://en.wikipedia.org/wiki/Thomson_TO7/70&quot; rel=&quot;noreferrer&quot;&gt;Thomson TO7/70&lt;/a&gt; home computer. It came without any MEMO7 cartridges (ROM cartridges) that are necessary to properly use it. I found &lt;a href=&quot;http://dcmoto.free.fr/programmes/_html/support_memo7.html&quot; rel=&quot;noreferrer&quot;&gt;images&lt;/a&gt; of the ROMS, and a &lt;a href=&quot;http://dcmoto.free.fr/documentation/schemas/to770.html&quot; rel=&quot;noreferrer&quot;&gt;schematic&lt;/a&gt;, so in principle it should be possible to make your own cartridge and program with the images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally I'd like something that can be easily programmed from a PC (maybe through serial or USB). One can still buy parallel EEPROMs, but I don't own an EEPROM programmer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone every done something similar before? Maybe for a different computer? Any suggestions, tips, recommendations for parts?&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-05-25T12:43:38.973" Title="Homemade ROM cartridge for Thomson TO7/70 home computer" Tags="&lt;thomson&gt;&lt;rom&gt;&lt;homemade&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="400" PostTypeId="2" ParentId="399" CreationDate="2016-05-04T11:58:11.983" Score="10" Body="&lt;p&gt;It's funny you should ask this now, Daniel (who runs the site you found the ROMs and schematic on) and Phil (another 8-bit enthusiast) recently produced an EEPROM-based PCB for exactly this purpose. You can find out more about it on &lt;a href=&quot;http://forum.system-cfg.com/viewtopic.php?f=10&amp;amp;t=7086&quot; rel=&quot;noreferrer&quot;&gt;the system.cfg forum&lt;/a&gt; (in French).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Daniel has many other &lt;a href=&quot;http://dcmoto.free.fr/bricolage/index.html&quot; rel=&quot;noreferrer&quot;&gt;Thomson hardware projects&lt;/a&gt;, including &lt;a href=&quot;http://dcmoto.free.fr/bricolage/sdmoto/index.html&quot; rel=&quot;noreferrer&quot;&gt;an SD card reader&lt;/a&gt; and &lt;a href=&quot;http://dcmoto.free.fr/bricolage/cs91-280/index.html&quot; rel=&quot;noreferrer&quot;&gt;associated controller&lt;/a&gt; (which would allow you to use any &lt;a href=&quot;http://dcmoto.free.fr/programmes/_html/support_to_fd.html&quot; rel=&quot;noreferrer&quot;&gt;floppy-based Thomson software&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find cartridge-based systems which meet your requirements on other platforms; the &lt;a href=&quot;http://www.atarimax.com/flashcart/documentation/&quot; rel=&quot;noreferrer&quot;&gt;Atarimax Maxflash cartridge&lt;/a&gt; is one example for 8-bit Ataris.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2016-05-04T13:44:45.647" LastActivityDate="2016-05-04T13:44:45.647" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="402" PostTypeId="2" ParentId="397" CreationDate="2016-05-04T19:09:36.137" Score="5" Body="&lt;p&gt;I would make the assumption that, in the CoCo 3's case, a 32k, 64k or 128k ROM can be created. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the discussion on the CoCo Mailing list, the normal size is a little less than 16k or 32k. Any carts that require larger ROMS need to have hardware MMU's to take advantage of a bank-switching scheme. There's a seller on eBay who sells a 512k cart with a control pad, to determine which bank on the ROM the CoCo will boot to. The same could be done with software to read the data from the different banks, in effect creating a larger game or application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, if you get to a point where you need a larger ROM, you could look at the content of the code; if there's a lot of graphics or constant data, you could compress the code, and decompress it in memory. Not much different than some disk games load the data and then decompress in memory (Sock Master's Donkey Kong for example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your fictitious 256k cart could be done with an add-on MMU (like Robocop used for it's 128k) to handle the bank switching. As one list member said, there doesn't appear to be any such hardware under development for this right now, but, it has been done.&lt;/p&gt;&#xA;" OwnerUserId="173" LastActivityDate="2016-05-04T19:09:36.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="404" PostTypeId="2" ParentId="382" CreationDate="2016-05-05T03:46:27.443" Score="15" Body="&lt;p&gt;Microprose tried to be clever in using BIOS calls to detect which disk is present in the floppy drive.  However, the information that &lt;code&gt;install.exe&lt;/code&gt; is looking for gets lost somewhere in the many filesystem layers between it and the actual disk.  This is not a problem unique to emulation; CD-ROM-based installation sometimes had trouble, as did some not-quite-IBM-compatible PCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two ways to work around this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, you can make images of the disks, and mount those images in DosBox.  You'll need to specify the disk geometry when mounting the image:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;imgmount -size 512,18,2,80 a: /path/to/your/disk/image&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is not the recommended method, as there's no easy way to switch out disk images during the installation process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, you can bypass the installer entirely: the &lt;code&gt;mpscopy.exe&lt;/code&gt; utility on the first disk does the actual work of installation, and all it cares about is that the files it's looking for are present.  You can copy the files from all three floppies into a single directory somewhere (the easy way) or switch out the floppies as-needed (the harder way).  Run it directly:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mpscopy -c a: c:\colonize&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you're switching out floppies, you may need to use &lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;F4&lt;/kbd&gt; to inform DosBox that you've done so.  Once the files are copied, run the configuration program to set up sound:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;c:&#xA;cd colonize&#xA;install&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;mpscopy.exe&lt;/code&gt; and the floppy-detection issues are not unique to &lt;em&gt;Colonization&lt;/em&gt;; the issue and its fixes may also apply to other DOS-based Microprose games.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-05-05T03:46:27.443" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="405" PostTypeId="2" ParentId="376" CreationDate="2016-05-05T11:07:57.963" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.relevovideogames.com/&quot; rel=&quot;nofollow&quot;&gt;Relevo&lt;/a&gt; is a Spanish company that develops videogames for both modern game consoles &lt;a href=&quot;http://www.relevovideogames.com/retrogames-2/&quot; rel=&quot;nofollow&quot;&gt;and 8 bit computers&lt;/a&gt; (especially MSX). Although they offer the games as free downloads, there is also the option to purchase them as physical cartridges from &lt;a href=&quot;http://www.matranet.net/boutique/buy.php&quot; rel=&quot;nofollow&quot;&gt;Matranet&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="130" LastActivityDate="2016-05-05T11:07:57.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="406" PostTypeId="1" AcceptedAnswerId="911" CreationDate="2016-05-05T16:00:26.993" Score="17" ViewCount="1007" Body="&lt;p&gt;Although it is widely known that the &lt;a href=&quot;https://en.wikipedia.org/wiki/Gate_array#History&quot; rel=&quot;noreferrer&quot;&gt;ZX Spectrum ULA&lt;/a&gt; answers to any request to an even I/O address, all documentation state that the official port number to use should be &lt;code&gt;$xxFE&lt;/code&gt; (where &lt;code&gt;xx&lt;/code&gt; is any 8 bit number).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm now updating my ULA core to add the Timex MMU memory manager, and this MMU uses I/O port &lt;code&gt;$F4&lt;/code&gt;, which would conflict with the current implemented ULA. So I'm thinking about performing a more restrictive decoding so that the ULA reacts only to I/O port &lt;code&gt;$FE&lt;/code&gt;, but I'm concerned about the possible consequences of this in existing games and applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do any of you know of a game, demoscene app, or actually, anything, that uses another even port than &lt;code&gt;$FE&lt;/code&gt; to access the ULA?&lt;/li&gt;&#xA;&lt;li&gt;Alternatively, is there any ZX Spectrum emulator which I could parametrize/customize in a way that I can run it from a shell script to execute a list of game snapshots, and log the first time it accesses an even addressed I/O port other than &lt;code&gt;$FE&lt;/code&gt;?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="105" LastEditorUserId="535" LastEditDate="2016-05-16T07:48:31.930" LastActivityDate="2018-02-07T09:09:36.947" Title="Are there any ZX Spectrum applications (mainly games or demoscene productions) that use a port other than $FE to access the ULA?" Tags="&lt;zx-spectrum&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="407" PostTypeId="2" ParentId="380" CreationDate="2016-05-06T06:05:25.527" Score="4" Body="&lt;p&gt;You need the 3.1 ROM if you want to use OS3.9, and more importantly OS3.9's support for the use of larger than 4GB of HDD space by the Amiga OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without 3.1 ROM and OS3.9 you can still use larger HDDs but the Amiga OS can only access the first 4GB (so you could use the rest for linux partitions, for example.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that even with the 3.1 ROM and OS3.9 there is still a max partition size limit of 8GB, but you can use however many partitions you like to map out the whole drive.  The boot partition however must be allocated entirely within the first 4GBs of space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional Note:  Some software that came with a utility to install it to a hard disk may refuse to install to partitions greater than 2GB (as that was the original partition size limit) after failing a free space check due to an insufficiently sized variable.&lt;/p&gt;&#xA;" OwnerUserId="320" LastEditorUserId="320" LastEditDate="2016-05-07T22:36:46.203" LastActivityDate="2016-05-07T22:36:46.203" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="408" PostTypeId="1" AcceptedAnswerId="415" CreationDate="2016-05-06T15:35:53.927" Score="9" ViewCount="272" Body="&lt;p&gt;Microware released the versions of the OS-9 DOS for the CoCo. A few years later, former employees (I believe) released NitrOS-9. Both appear to be multiuser/multi-tasking OS's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the advantages to using NitrOS-9 instead of OS-9? Does the documentation for OS-9 apply to NitrOS-9? &lt;/p&gt;&#xA;" OwnerUserId="173" LastEditorUserId="29" LastEditDate="2016-05-06T16:00:38.090" LastActivityDate="2016-05-07T16:43:57.723" Title="What are the advantages of NitrOS-9 over OS-9?" Tags="&lt;color-computer&gt;&lt;os-9&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="409" PostTypeId="1" AcceptedAnswerId="411" CreationDate="2016-05-07T05:21:11.640" Score="6" ViewCount="2731" Body="&lt;p&gt;I have an old IDE hard drive from a Windows 98 HP computer. It has some data on it but I do not know how to access it.&lt;/p&gt;&#xA;" OwnerUserId="254" LastEditorUserId="357" LastEditDate="2017-08-17T02:07:31.140" LastActivityDate="2017-08-17T02:07:31.140" Title="How to access old laptop IDE hard drive" Tags="&lt;hard-disk&gt;&lt;ide&gt;&lt;hp&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="410" PostTypeId="2" ParentId="409" CreationDate="2016-05-07T05:27:22.560" Score="4" Body="&lt;p&gt;I bought a IDE to USB converter from a local store.There were two extra pins on my hard drive so I had to do some fiddling and connect the AC power supply &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I connected the adapter to my Linux laptop (also works on Windows) and I could see the files stored on the FAT32 filesystem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disk is almost full (The thing is 4GB and has 100MB left , my laptop has 500GB :) has errors , noisy and slow. I copied all the files off the disk including 1GB of music from Napster&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also booted the disk from a virtual machine and it works perfectly (after installing driver and repairing system files).I am considering creating a full disk image using dd but will it fail if I try to copy from it too much?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also Kaspersky found a virus on it&lt;/p&gt;&#xA;" OwnerUserId="254" LastEditorUserId="254" LastEditDate="2016-06-13T08:31:00.330" LastActivityDate="2016-06-13T08:31:00.330" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="411" PostTypeId="2" ParentId="409" CreationDate="2016-05-07T05:58:04.163" Score="11" Body="&lt;p&gt;The easiest way is to get an external USB enclosure or USB-to-IDE adapter.  IDE-to-SATA adapters exist, but they require opening up your computer to install.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When selecting hardware, keep in mind that IDE (PATA) hard drives come in two common varieties: &quot;desktop&quot; (usually 3.5&quot; form factor, with a 40-pin data cable and a 4-pin power cable), and &quot;laptop&quot; (usually 2.5&quot; form factor, with a 44-pin combined power and data cable).  You'll need to make sure you get one compatible with your drive; &quot;universal&quot; adapters/enclosures are rare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IDE drives were designed to let two of them be attached to a single data cable, with one in the &quot;master&quot; role and the other in the &quot;slave&quot; role.  A jumper near the power and data connections is used to set the role; with just a single drive attached to an adapter, it should be set to &quot;master&quot; or &quot;cable select&quot; (CS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software-wise, a hard drive from a Windows 98 will be formatted in the &quot;FAT32&quot; format.  This is as close to a universal hard drive format as you can get, so virtually every modern computer can read it, regardless of operating system.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-05-07T05:58:04.163" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="412" PostTypeId="2" ParentId="3" CreationDate="2016-05-07T06:04:01.803" Score="7" Body="&lt;p&gt;Someone at a local Commodore Users Group might be able to help you archive them since you don't have access to a working floppy drive.  Many of the old user's groups still exist.  The Global Commodore User's Group would be a good place to ask if you're not sure if there is one in your area.  Their main purpose is to keep the local groups connected and help users find the closest group.  They maintain a presence on Facebook and Google+.&#xA;&lt;a href=&quot;https://www.facebook.com/groups/gcug1/&quot; rel=&quot;noreferrer&quot;&gt;Global Commodore User's Group Facebook&lt;/a&gt;&#xA;&lt;a href=&quot;https://plus.google.com/communities/104829882792024324416&quot; rel=&quot;noreferrer&quot;&gt;Global Commodore User's Group Google+&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2016-05-07T06:04:01.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="413" PostTypeId="2" ParentId="323" CreationDate="2016-05-07T16:08:48.043" Score="8" Body="&lt;p&gt;I found a lovely answer on page 54 of &lt;a href=&quot;https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf&quot; rel=&quot;noreferrer&quot;&gt;&quot;Color Computer 1/2/3 Hardware Programming&quot;&lt;/a&gt; by Chris Lormont.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The joystick and button values are found by reading addresses $FF60 - $FF63.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first time an address on the Color Computer 1/2/3 is accessed (read), it sets up an A/D conversion cycle for the channel as you specify above. THEN the next read is the value converted from the previous read access. By doing a read on the next channel, you set up the A/D conversion cycle for the channel read, but read the previous channel's data. Here's another way to look at it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If read in the following order:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;$FF60 Whatever channel was set up last. Initiate A2D for X Axis&lt;/li&gt;&#xA;&lt;li&gt;$FF61 Data from channel #0 (X pos). Initiate A2D for Y Axis.&lt;/li&gt;&#xA;&lt;li&gt;$FF62 Data from channel #1 (Y pos). Initiate A2D for Button 1.&lt;/li&gt;&#xA;&lt;li&gt;$FF63 Data from channel #2 (button #1). Initiate A2D for Button 2.&lt;/li&gt;&#xA;&lt;li&gt;$FF60 any Data from channel #3 (button #2). Initiate A2D for X Axis&lt;/li&gt;&#xA;&lt;li&gt;Etc.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="29" LastEditorUserId="7208" LastEditDate="2019-10-11T01:22:53.857" LastActivityDate="2019-10-11T01:22:53.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="414" PostTypeId="1" AcceptedAnswerId="417" CreationDate="2016-05-07T16:29:45.283" Score="11" ViewCount="298" Body="&lt;p&gt;I recently found an old Satellite 4015cds laptop that I wanted to play around with. I have cleaned all the plastic and it looks really good except for two places. The rubber touchpads and the rubber mouse pointer in the middle of the keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of these rubber pieces are extremely sticky for some reason. I have tried scrubbing them to no avail. I am not sure at this point whether there is something sticky on the rubber, or if the rubber itself has just degraded and become sticky or something. Does anyone know what has made these pieces so sticky? is there a way to restore or replace them?&lt;/p&gt;&#xA;" OwnerUserId="326" LastActivityDate="2016-05-07T22:11:58.727" Title="Rubber restoration or replacement?" Tags="&lt;cleaning&gt;&lt;rubber&gt;&lt;mouse&gt;&lt;touchpad&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="415" PostTypeId="2" ParentId="408" CreationDate="2016-05-07T16:43:57.723" Score="7" Body="&lt;p&gt;The documentation generally does apply correctly between OS-9 and NitrOS-9.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To understand the advantages over OS-9, it is good to look back that the different eras of the project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the beginning, Bill Nobel, Curtis Boyle, and Wes Gale decided to rewrite parts of the operating system to support to newly discovered features of the 6309 microprocessor. OS-9 is &lt;strong&gt;very&lt;/strong&gt; modular and this kind of updating is possible even without the original source code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then Alan Dekok added to the project to use better, smaller algorithms in other parts of the OS (speciffically: GrfDrv).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later still, Boisy Pitre bought the project online with source code control and added more features.&lt;/p&gt;&#xA;" OwnerUserId="29" LastActivityDate="2016-05-07T16:43:57.723" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="416" PostTypeId="2" ParentId="414" CreationDate="2016-05-07T21:13:26.287" Score="3" Body="&lt;p&gt;Many soft-touch rubberized plastics break down quickly with age (especially parts that come into contact with skin oils) and become gooey or sticky.  Unfortunately there's not much you can do to reverse the process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rubber &quot;mouse&quot; nipple is usually just a friction fit piece that can be wiggled loose, but try to find the service manual for your laptop to verify first.  If you're lucky, the shaft underneath will be the same diameter as the IBM / Lenovo nipples and you'll be able to get a brand new replacement easily and cheaply.  You'd be looking for &quot;Trackpoint&quot; replacement caps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The buttons might be more problematic.  If its just a thin coating over hard plastic you can remove the goo with denatured alcohol, however this obviously won't work if the entire piece is made of the same material.  In that case your only option would be to track down some replacement buttons, or possibly trying to seal the surface with something hard like a clear epoxy.&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2016-05-07T21:13:26.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="417" PostTypeId="2" ParentId="414" CreationDate="2016-05-07T22:11:58.727" Score="2" Body="&lt;p&gt;I'm not sure how efficient or safe this is in your case, so if you have a better method, go with it - but I found a good way to &quot;neutralize&quot; any permanently sticky surfaces is application of some kind of insoluble fine inorganic dust, e.g. chalk, fine sand, talc etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It just binds with whatever &quot;glue&quot; you deal with, forming either easy to remove crud, or just staying there permanently, soaking up the goo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course it will get dirty and look ugly really fast, and the dust - free or bound with the sticky substance - may cause problems with other parts around, plus you may need to reapply it periodically if the &quot;glue&quot; continues to perspire and saturates the current supply of dust - the method has many disadvantages. But hey, it works - the thing in question ceases to be sticky.&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2016-05-07T22:11:58.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="418" PostTypeId="1" AcceptedAnswerId="419" CreationDate="2016-05-08T02:44:59.470" Score="14" ViewCount="730" Body="&lt;p&gt;Is it possible (and if so, how) to tell if a drive has JiffyDOS installed without opening it and looking for the chip?&lt;/p&gt;&#xA;" OwnerUserId="81" LastActivityDate="2016-05-09T15:24:00.810" Title="How can you tell if JiffyDOS is installed on a drive without opening it?" Tags="&lt;commodore-64&gt;&lt;jiffydos&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="419" PostTypeId="2" ParentId="418" CreationDate="2016-05-08T03:51:38.057" Score="12" Body="&lt;p&gt;If a drive has JiffyDos installed, it will say so in the first message it&#xA;sends to the error channel on power-up.  You should be able to read the error channel to determine if JiffyDos is present.  Try running the following program in BASIC after powering the attached drive on to read the error channel.  (assumes drive is set to device 8)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 OPEN 15,8,15&#xA;20 INPUT# 15,A,B$,C,D &#xA;30 PRINT A,B$,C,D &#xA;40 CLOSE 15&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The output will be the Error #, Error Name, Track, and Block (sector).  You should see a message from JiffyDos in the Error Name if its installed.&lt;/p&gt;&#xA;" OwnerUserId="320" LastEditorUserId="320" LastEditDate="2016-05-08T04:07:15.857" LastActivityDate="2016-05-08T04:07:15.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="420" PostTypeId="1" AcceptedAnswerId="421" CreationDate="2016-05-08T05:08:36.917" Score="10" ViewCount="722" Body="&lt;p&gt;I have an old mouse from a old HP computer which I am using with one of those PS2-to-USB converter cables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that the mouse has changed its color a bit over the years and is now a bit yellowed. Also, the mouse's ball has also got dirty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the best way to clean up this old mouse?&lt;/p&gt;&#xA;" OwnerUserId="254" LastEditorUserId="278" LastEditDate="2016-06-07T16:16:40.153" LastActivityDate="2016-06-07T16:16:40.153" Title="How to clean an old computer ball-mouse" Tags="&lt;cleaning&gt;&lt;restoration&gt;&lt;mouse&gt;&lt;plastic&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="421" PostTypeId="2" ParentId="420" CreationDate="2016-05-08T06:23:30.753" Score="10" Body="&lt;p&gt;For the mouse ball, remove it and clean the rollers with some rubbing alcohol and a q-tip or if its really grungy, pick the crud off with your fingers first.  The ball itself can usually just be wiped off with a dry cloth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the yellowing of the casing that's normally a problem with the casing discolouring due to flame retardants oxidizing the plastic.  You'll want to try using a Retrobright treatment.  There's a question here where its described in full.  &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/379/how-to-get-rid-of-yellowing-in-plastics&quot;&gt;How to get rid of yellowing in plastics?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="320" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-05-08T06:23:30.753" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="424" PostTypeId="2" ParentId="371" CreationDate="2016-05-08T17:43:38.907" Score="4" Body="&lt;p&gt;iFixit has a (user-contributed) &lt;a href=&quot;https://www.ifixit.com/Guide/Palm+Zire+21+Battery+Replacement/30033&quot; rel=&quot;nofollow&quot;&gt;guide on this subject&lt;/a&gt;. The Zire battery appears to be a standard 3.7volt 600mAh Lithium-Ion unit, probably originating from cell phones. Amazon shows several non-OEM replacements available.&lt;/p&gt;&#xA;" OwnerUserId="327" LastActivityDate="2016-05-08T17:43:38.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="427" PostTypeId="1" AcceptedAnswerId="428" CreationDate="2016-05-08T20:33:36.493" Score="22" ViewCount="10261" Body="&lt;p&gt;Death of the Amiga platform predated introduction of optical mice of reasonable quality by a couple years. The Amiga mouse was a box of problems, with non-ergonomic shape, crud-accumulating rollers and buttons dying after some intense use. Comparing to modern mice it was simply awful. (but still better than, say, Sun's optical mouse of that time, which required a special mousepad to operate and if you rotated the pad it would get all wonky.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some mod or adapter or such, that would enable me to use/modify/convert a common USB or even PS/2 mouse with Amiga?&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2021-02-17T01:49:35.757" Title="How can I adapt a modern mouse for use with Amiga?" Tags="&lt;amiga&gt;&lt;mouse&gt;&lt;new-hardware-adaptation&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="428" PostTypeId="2" ParentId="427" CreationDate="2016-05-08T21:08:45.740" Score="18" Body="&lt;p&gt;Some of the most available adapters which allow to connect a &amp;quot;modern&amp;quot; mouse to an Amiga are:&lt;/p&gt;&#xA;&lt;p&gt;Real USB mouse and joystick:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;http://retro.7-bit.pl/?lang=en&amp;amp;go=projekty&amp;amp;name=rys_mkii&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ryś MK II&lt;/a&gt;. This is a very flexible device which supports not only USB mice (including but not limited to PS/2 ones) but also digital and analog USB joysticks. It is even capable of outputting joystick signals compatible with the Amiga CD32 joypad. It is actively supported and information about it can be found on &lt;a href=&quot;http://eab.abime.net/showthread.php?t=73410&quot; rel=&quot;nofollow noreferrer&quot;&gt;this English Amiga Board thread&lt;/a&gt; created by the designer of this adapter. It supports a very large array of devices (cf first link).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;PS/2 USB mouse:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;the &lt;a href=&quot;http://wiki.icomp.de/wiki/Micromys_V4&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micromys v4&lt;/a&gt; from Individual Computers, available via icomp shop (also available from &lt;a href=&quot;http://amigakit.leamancomputing.com/catalog/product_info.php?products_id=1092&quot; rel=&quot;nofollow noreferrer&quot;&gt;amigakit&lt;/a&gt;, &lt;a href=&quot;http://www.vesalia.de/e_micromysv4.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vesalia&lt;/a&gt; and elsewhere)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the &lt;a href=&quot;http://www.elbox.com/products/cocolino.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cocolino&lt;/a&gt; (available from the manufacturer and from various other stores, &lt;em&gt;e.g.&lt;/em&gt; &lt;a href=&quot;http://amigakit.leamancomputing.com/catalog/product_info.php?products_id=88&quot; rel=&quot;nofollow noreferrer&quot;&gt;amigakit&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As indicated, the latter two support PS/2 mice only (including PS/2-compatible USB mice, with the appropriate adapter). They both support wheel mice, and the Micromys is compatible with a number of other systems (Atari ST etc.).&lt;/p&gt;&#xA;&lt;p&gt;Google reveals some other possibilities, such as &lt;a href=&quot;http://retrocable.com/?page_id=16&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one from RETROCable&lt;/a&gt;; there are no doubt others.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="4335" LastEditDate="2021-02-17T01:49:35.757" LastActivityDate="2021-02-17T01:49:35.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="429" PostTypeId="1" CreationDate="2016-05-09T06:09:04.923" Score="11" ViewCount="730" Body="&lt;p&gt;I would like to learn a bit about the first games that were ever played on a computer-like device. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be a digital computer, a console, an embedded chip or micro-controller or even something semi-mechanical. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game itself has to be a software program and should not be hard-wired into the device. If the game program is fixed to a device, but existing in any kind of (at least once) writable memory (flash, [[E]E]PROM, ...) that would count as well.&lt;/p&gt;&#xA;" OwnerUserId="128" LastActivityDate="2016-05-24T14:01:28.433" Title="First computer/video game in history" Tags="&lt;gaming&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="430" PostTypeId="2" ParentId="429" CreationDate="2016-05-09T06:58:40.053" Score="12" Body="&lt;p&gt;Given your restrictions, the earliest computer game I can find is an implementation of checkers for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pilot_ACE&quot;&gt;Pilot ACE&lt;/a&gt;, written in 1951 and debugged to the point of working in 1952.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other candidates are checkers for the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_701&quot;&gt;IBM 701&lt;/a&gt; (1952 again), and &lt;a href=&quot;https://en.wikipedia.org/wiki/OXO&quot;&gt;OXO&lt;/a&gt; for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Electronic_delay_storage_automatic_calculator&quot;&gt;EDSAC&lt;/a&gt;, written in 1952 by Alexander Douglas as part of his thesis on human-computer interaction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anything earlier isn't likely to meet your &quot;not hard-wired&quot; requirement, since that's about the timeframe when computers were shifting from plugboard programming to stored-program soft-coding.  &lt;a href=&quot;https://en.wikipedia.org/wiki/Bertie_the_Brain&quot;&gt;Bertie the Brain&lt;/a&gt; (1950) and &lt;a href=&quot;https://en.wikipedia.org/wiki/Nimrod_(computing)&quot;&gt;Nimrod&lt;/a&gt; (1951), for example, were both hard-wired.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-05-09T06:58:40.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="432" PostTypeId="2" ParentId="418" CreationDate="2016-05-09T15:24:00.810" Score="5" Body="&lt;p&gt;If you have JiffyDOS installed on the host Commodore, you can read the error channel simply with&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Read the default device&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Read a specific device number (for example, device #9)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@&quot;&quot;,9&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="81" LastActivityDate="2016-05-09T15:24:00.810" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="433" PostTypeId="1" AcceptedAnswerId="434" CreationDate="2016-05-09T15:37:44.313" Score="21" ViewCount="4179" Body="&lt;p&gt;On the Amiga 500 there is an expansion port&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KIIOb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KIIOb.jpg&quot; alt=&quot;Amiga 500 Expansion port&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did the expansion port work?&lt;/p&gt;&#xA;" OwnerUserId="81" LastEditorUserId="81" LastEditDate="2018-02-08T22:43:41.537" LastActivityDate="2018-02-11T16:56:51.253" Title="How did the Amiga 500 left-side expansion port work?" Tags="&lt;amiga&gt;&lt;hardware&gt;&lt;amiga-500&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="434" PostTypeId="2" ParentId="433" CreationDate="2016-05-09T16:28:21.953" Score="24" Body="&lt;p&gt;That expansion port exposes all the signals from the 68000 CPU, plus some other Amiga specific signals, such as the color CLK, ROM and RAM select signals, along with voltage supply lines, etc. It is documented in the schematic, page F-9 of the User's Manual.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It worked by removing its trap door, and plugging in a compatible device with the Amiga switched off. When switched back on, the device starts operating and depending on whether it has a boot ROM, it may override the normal Amiga boot procedure, or simply sits there in the bus waiting for a driver that had to be loaded during the Amiga OS initialization process so it can answer requests from the OS and applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can put it any hardware device designed to work with the 68000 bus and the Amiga 500: from an IDE interface to a complex device. Or you can completely override the internal 68000 and provide your own CPU, as long as it is binary compatible with the 68000 and generates the same control signals (e.g. what an accelerator board does)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Common expansions for the A500 included: Action Replay, SCSI hard disks and CPU accelerators. The Amiga Hardware Database lists many expansion devices, many of them usable with the A500 through its expansion port (along with other devices that used the parallel port or the memory expansion port)&#xA;&lt;a href=&quot;http://amiga.resource.cx/expansion.html&quot;&gt;http://amiga.resource.cx/expansion.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-05-09T16:35:21.993" LastActivityDate="2016-05-09T16:35:21.993" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="435" PostTypeId="2" ParentId="427" CreationDate="2016-05-09T19:14:09.287" Score="6" Body="&lt;p&gt;&lt;a href=&quot;https://ftp.fau.de/aminet/docs/hard/mousehack.txt&quot; rel=&quot;nofollow&quot;&gt;Here is a guide&lt;/a&gt; on how to convert an old Microsoft serial mouse to work in the Amiga's mouse/joystick ports. Maybe the guide can be adapted for modern optical mice. (In fact, &lt;a href=&quot;http://www.amibay.com/showthread.php?82990-serial-and-other-amiga-mice&quot; rel=&quot;nofollow&quot;&gt;here is a thread&lt;/a&gt; about someone who seems to be claiming to do just that.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And &lt;a href=&quot;http://aminet.net/package/driver/input/SerMouse221&quot; rel=&quot;nofollow&quot;&gt;here is a serial mouse driver&lt;/a&gt; for Workbench, all it needs is a serial mouse and an ordinary 9-pin to 25-pin serial adapter. But it only works in Workbench and ties up your serial port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those of us who are not skilled in electronics, the Cocolino or Micromys adapter described in another answer in this thread is probably the best solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: And &lt;a href=&quot;http://www.vesalia.de/e_micromysv4bundle.htm&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; is a bundle containing a Micromys V4 and a wireless PS/2 optical mouse.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2016-06-30T00:18:05.883" LastActivityDate="2016-06-30T00:18:05.883" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="436" PostTypeId="1" CreationDate="2016-05-09T19:56:34.543" Score="17" ViewCount="1693" Body="&lt;p&gt;I have some Amigas that I would like to be able to transfer files to/from using my primary desktop machine, a PC running Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Amigas do have CrossDOS installed, but transferring things in 720K chunks is tedious, made more so by the fact that I don't have a floppy drive regularly connected to my Linux box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a copy of Amiga Forever that I purchased a few years ago, so I was thinking I could use the included Amiga Explorer tool. I installed the Amiga-side of this on my Amiga 1200 (using CrossDOS), but the official client is Windows-only. I found an open-source program called lxamiga that supposedly worked with an older version of Amiga Explorer, but it does not seem to work with recent versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any Linux compatible client software for Amiga Explorer? If not, is the protocol it uses documented anywhere?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, are there any other Linux-compatible tools for transferring files to and from Amigas? Something that works over a serial null modem or even a &lt;a href=&quot;https://en.wikipedia.org/wiki/LapLink_cable&quot;&gt;parallel null modem&lt;/a&gt; cable would be ideal. (I do not have ethernet on any of my Amigas, unfortunately.)&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-10-21T17:01:05.130" Title="Is there a Linux client for Amiga Explorer?" Tags="&lt;amiga&gt;&lt;linux&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="437" PostTypeId="2" ParentId="436" CreationDate="2016-05-09T20:05:35.293" Score="4" Body="&lt;p&gt;This doesn't answer your exact question, but you could try running the software you have under &lt;a href=&quot;https://www.winehq.org/&quot; rel=&quot;nofollow&quot;&gt;Wine&lt;/a&gt;. Sometimes you get lucky, and it just works. Most APIs are well supported, though once you start needing interesting driver support all bets are off.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastActivityDate="2016-05-09T20:05:35.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="440" PostTypeId="2" ParentId="436" CreationDate="2016-05-09T21:19:14.070" Score="12" Body="&lt;p&gt;I don't know of any Linux-hosted software which is compatible with Amiga Explorer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of other ways of transferring files to and from Amigas from Linux though. Over a null-modem cable, you can bootstrap file transfers using &lt;code&gt;type&lt;/code&gt; to copy &lt;a href=&quot;http://adfsender.stoeggl.com/adfsenderterminal/methods.html&quot;&gt;&lt;code&gt;transwarp&lt;/code&gt;&lt;/a&gt; across, then use that to copy files. In detail:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;on the Amiga, use &lt;code&gt;Serial&lt;/code&gt; to set the serial port up as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;baud rate: 9600&lt;/li&gt;&#xA;&lt;li&gt;buffer size: 512&lt;/li&gt;&#xA;&lt;li&gt;handshake/protocol: RTS/CTS&lt;/li&gt;&#xA;&lt;li&gt;parity: none&lt;/li&gt;&#xA;&lt;li&gt;bits: 8&lt;/li&gt;&#xA;&lt;li&gt;stop bits: 1&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;on the Linux system, use &lt;code&gt;stty&lt;/code&gt; to set the serial port up as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;stty 9600 -parenb cs8 crtscts -ixon -ixoff raw iutf8 -F /dev/ttyS0&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Your Amiga 1200 should have ARexx, so download &lt;a href=&quot;http://adfsender.stoeggl.com/utility/receive.zip&quot;&gt;&lt;code&gt;receive.zip&lt;/code&gt;&lt;/a&gt;, extract &lt;code&gt;receive.rexx&lt;/code&gt; and transfer it:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;on the Linux system:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cat receive.rexxlong &amp;gt; /dev/ttyS0&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;on the Amiga:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;type SER: &amp;gt; receive.rexx&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;because of the buffering on the Amiga side, pad the file out on the Linux side:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for i in {1..200}; do echo -n &quot; &quot;; done &amp;gt; /dev/ttyS0&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You should now be able to transfer files from Linux to the Amiga by &lt;code&gt;cat&lt;/code&gt;ing them to &lt;code&gt;/dev/ttyS0&lt;/code&gt; (or whichever serial port you're using) and running &lt;code&gt;rx receive&lt;/code&gt; on the Amiga side. That way you can transfer &lt;a href=&quot;http://adfsender.stoeggl.com/&quot;&gt;&lt;code&gt;transwarp&lt;/code&gt;&lt;/a&gt;; that will allow you to transfer files from the Amiga to your Linux system, and use higher speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://wiki.abime.net/file_transfer/hombre&quot;&gt;Hombre&lt;/a&gt; page has more details, and covers other transfer methods. You might find &lt;a href=&quot;http://www.boomerangsworld.de/cms/vc/amiga_transfer.html&quot;&gt;Amiga file transfer&lt;/a&gt; useful too.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-05-09T21:19:14.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="441" PostTypeId="1" CreationDate="2016-05-09T21:43:40.633" Score="13" ViewCount="5061" Body="&lt;p&gt;I've seen simulators for the 8085 (i.e., &lt;a href=&quot;http://www.homesoft.gen.tr/sim8085&quot; rel=&quot;noreferrer&quot;&gt;sim8085&lt;/a&gt;) but not the Zilog Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a similar sort of editor/assembler/compiler/debugger simulator for the Z80?&lt;/p&gt;&#xA;" OwnerUserId="341" LastEditorUserId="621" LastEditDate="2016-08-02T14:27:00.567" LastActivityDate="2016-08-04T13:00:33.957" Title="Looking for a Z80 simulator/emulator for Linux" Tags="&lt;emulation&gt;&lt;z80&gt;&lt;simulator&gt;" AnswerCount="5" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="442" PostTypeId="2" ParentId="441" CreationDate="2016-05-09T22:16:31.003" Score="8" Body="&lt;p&gt;You may have more success if looking for CP/M emulators for Linux, as CP/M ran in a 8080/Z80 environment. The very own CP/M environment can be your development environment. One could be &quot;YAZE-AG - Yet Another Z80 Emulator&quot;&#xA;&lt;a href=&quot;http://www.mathematik.uni-ulm.de/users/ag/yaze-ag/&quot;&gt;http://www.mathematik.uni-ulm.de/users/ag/yaze-ag/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you are looking for something more.... &quot;visual&quot;, I'd suggest to take a look at z80pack.&#xA;&lt;a href=&quot;http://www.autometer.de/unix4fun/z80pack/&quot;&gt;http://www.autometer.de/unix4fun/z80pack/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both run in Windows and UNIX systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Side note: I just love those front panels :) )&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-05-09T22:16:31.003" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="443" PostTypeId="1" AcceptedAnswerId="444" CreationDate="2016-05-09T22:21:09.583" Score="29" ViewCount="2284" Body="&lt;p&gt;The Amiga 1200 has a trapdoor expansion for CPU accelerators.  The Amiga 500 has a side expansion port and its CPU is socketed.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But Amiga 600's expansion port is  only useful for memory expansion and the 68000 is soldered to the motherboard.  So instead, A600 accelerators function by being placed on top of the CPU -- how does that work?&lt;/p&gt;&#xA;" OwnerUserId="64" LastEditorUserId="11916" LastEditDate="2019-04-21T16:36:21.103" LastActivityDate="2019-04-21T16:36:21.103" Title="How do Amiga 600 CPU accelerators work?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;amiga-600&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="444" PostTypeId="2" ParentId="443" CreationDate="2016-05-10T00:26:02.617" Score="35" Body="&lt;p&gt;Any accelerator for the Amiga work by disabling the CPU and taking over the complete bus system to become the bus master.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To accomplish this, a low level signal must be applied by the accelerator to pin &lt;code&gt;BR&lt;/code&gt; (Bus Request). The CPU will answer asserting pin &lt;code&gt;BG&lt;/code&gt; (Bus Grant). After the accelerator receives this signal, it acknoledges it by asserting &lt;code&gt;BGACK&lt;/code&gt;. When all of this happen, the original CPU electrically disconnects itself from the system bus, leaving the accelerator to take over it. The accelerator has a new CPU with its own clock circuitry, maybe some RAM mapped outside the normal address space of the 68000, and some glue logic to talk to a 16 bit data bus (accelerators usually are true 32-bit CPUs, so a way to serialize a 32-bit memory access to two sequential memory accesses is needed) so all custom chips think they are still talking with the 68000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;BR&lt;/code&gt; and &lt;code&gt;BGACK&lt;/code&gt; signals are wired-AND signals. This means that their default state is high (logic 1) but any logic 0 input applied to them makes the signal to go down, as if the output was driven by the AND logic operation of all wires connected to it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/O3OzP.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O3OzP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The adapter that plugs on the top of the 68000 in the Amiga 600 allows the accelerator to access to all CPU signals. One of them will be &lt;code&gt;BR&lt;/code&gt;, so when the accelerator wants to take over control, it simply put a logic 0 on it, starting the above mentioned bus relinquishment operation.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-05-10T06:05:32.373" LastActivityDate="2016-05-10T06:05:32.373" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="445" PostTypeId="2" ParentId="406" CreationDate="2016-05-10T08:03:56.187" Score="9" Body="&lt;p&gt;The Timex ULA is &lt;em&gt;not&lt;/em&gt; the same as the original ULA and fully decodes all 8 bits of the low byte - hence it will respond &lt;em&gt;only&lt;/em&gt; to $xxFE and not to $xxF4. If you're going to emulate the Timex, you probably need to do it properly rather than bodging it :-)&lt;/p&gt;&#xA;" OwnerUserId="360" LastActivityDate="2016-05-10T08:03:56.187" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="447" PostTypeId="2" ParentId="271" CreationDate="2016-05-10T12:03:29.697" Score="13" Body="&lt;p&gt;&lt;em&gt;This answer is a qualified guess, I don't know the inner workings of Personal Paint, and it is the first time I've heard of it.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Not unmaskable but...&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;They are probably right in that ejecting a floppy is the only &lt;em&gt;user accessible&lt;/em&gt; and &lt;em&gt;system friendly&lt;/em&gt; way to trigger an interrupt. It is, however, not as fool-proof as the real non-maskable interrupt, or even as reliable as a &quot;normal&quot; but externally triggered interrupt.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;...what they &lt;em&gt;really&lt;/em&gt; mean is:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Let's assume an unexpanded Amiga 500 as the base case. The only thing plugged in is a mouse, a monitor and a power supply. Switching off the power supply is obviously not going to save your precious drawing, and you can't do anything with the monitor, which leaves the mouse, keyboard, floppy, and the built-in ports. Unless you're MacGyver, you don't want to bend a paper clip and probe the random pins, taking these ports out of the equation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mouse and keyboard is handled by &lt;code&gt;input.device&lt;/code&gt;. You can add &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Devices_Manual_guide/node00D2.html&quot;&gt;input handlers&lt;/a&gt; to have whatever code you like run when you press a key. You could add your rescue code to an input.device handler and have it trigger on an unusual key. This will, however, run as a plain old task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The floppy is normally handled by &lt;code&gt;trackdisk.device&lt;/code&gt;. You can add an &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Devices_Manual_guide/node00F4.html&quot;&gt;interrupt handler&lt;/a&gt; that triggers on disk changes:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The trackdisk device lets you add a software interrupt handler that will&#xA;  be Cause()'ed when a disk insert or remove occurs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This sounds good. &lt;code&gt;Cause()&lt;/code&gt; refers to &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_2._guide/node033D.html&quot;&gt;exec.library/Cause()&lt;/a&gt; which will cause a &lt;em&gt;software interrupt&lt;/em&gt;. This is somewhat of a misnomer on the Amiga&lt;sup&gt;1&lt;/sup&gt;, it is really a software-initiated hardware interrupt of the lowest priority. This means that the code you add here will actually run as a genuine interrupt, interrupting any hung tasks.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Does it work?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Maybe, Not always, I don't know. Three accurate answers. Let's examine a statement from your question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...even if the system was completely &lt;em&gt;unresponsive&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If the system is completely frozen, but the dreaded guru has not yet shown his ugly face, there is a chance that this will indeed work. The big issue is that &lt;em&gt;something&lt;/em&gt; has to trigger the software interrupt! It can't trigger itself, like all the other interrupts. This &lt;em&gt;something&lt;/em&gt; would be either the &lt;code&gt;trackdisk.device&lt;/code&gt; task, or another interrupt handler. This is where my knowledge fails me, because I can't see a &lt;em&gt;direct&lt;/em&gt; way that a disk change could do this. The three hardware interrupts available to the disk subsystem should not be able to trigger on ejecting a disk, so someone must be polling the flags manually. That means that some sort of timer subsystem and parts of exec must be in working order, almost making the trouble of interrupt pointless.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1. Some platforms, for example the &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6800&quot;&gt;6800-series&lt;/a&gt; processor have a dedicated software interrupt which is different from a hardware interrupt.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="333" LastActivityDate="2016-05-10T12:03:29.697" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="448" PostTypeId="2" ParentId="239" CreationDate="2016-05-10T12:36:48.940" Score="8" Body="&lt;p&gt;Klaus Dorman's functional tests for the 6502 are fantastic: &lt;a href=&quot;https://github.com/Klaus2m5/6502_65C02_functional_tests&quot;&gt;https://github.com/Klaus2m5/6502_65C02_functional_tests&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="335" LastActivityDate="2016-05-10T12:36:48.940" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="449" PostTypeId="2" ParentId="429" CreationDate="2016-05-10T13:19:29.277" Score="5" Body="&lt;p&gt;Although Mark's post probably is the correct answer (first non-hardwired game) the first home video game console is the &lt;a href=&quot;http://www.magnavox-odyssey.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Magnavox Odyssey&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7gJLGm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7gJLGm.png&quot; alt=&quot;Magnavox Odyssey&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Magnavox Odyssey and the whole idea of playing a video game on a television set was invented by a man named Ralph H Baer. Mr Baer first thought of the idea of building an &quot; interactive game &quot; displayed on a TV in 1951 when he worked with designing and building television sets at Loral Electronics, but no one at Loral showed any interest in the idea and so, Mr Bear put the idea to rest for 15 years.&#xA;  ... &#xA;  Then on January 27th 1972 the videogame industry was born. On that date Magnavox begun the production of the &lt;a href=&quot;http://www.magnavox-odyssey.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Odyssey ITL 200&lt;/a&gt; and it was available for sale in May that same year. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There were at least 28 &lt;a href=&quot;http://www.magnavox-odyssey.com/Standard%20games.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;game cartridges&lt;/a&gt; of which 12 were shipped with the console.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit: as commented by @Jasen the cartridge were hard-wired (see &lt;a href=&quot;http://console5.com/wiki/File:Magnavox-Odyssey-1TL200BK12-Schematic.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;the scheme&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="153" LastEditorUserId="153" LastEditDate="2016-05-14T21:34:45.077" LastActivityDate="2016-05-14T21:34:45.077" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="450" PostTypeId="2" ParentId="441" CreationDate="2016-05-10T13:34:21.110" Score="7" Body="&lt;p&gt;I've been using &lt;a href=&quot;http://www.autometer.de/unix4fun/z80pack&quot; rel=&quot;noreferrer&quot;&gt;Z80Pack&lt;/a&gt; recently on a project, and it works pretty well. (I'm working on a bank-switcher and SD ROM loader for the RC2014 project.) &lt;/p&gt;&#xA;" OwnerUserId="369" LastEditorUserId="535" LastEditDate="2016-05-19T00:56:05.423" LastActivityDate="2016-05-19T00:56:05.423" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="451" PostTypeId="2" ParentId="379" CreationDate="2016-05-10T15:01:08.567" Score="6" Body="&lt;p&gt;I have used recipes from here with great success:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.retr0bright.com/make.html&quot;&gt;http://www.retr0bright.com/make.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used the second recipe with a high concentration hydrogen peroxide.  I was able to find the high concentration hydrogen peroxide at a local co-op store marked as &quot;food grade&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is that recipe:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Lorne's Variant Recipe&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Lorne at Vintage Computer Forums prefers to use stronger Hydrogen&#xA;  Peroxide and his variant recipe is below.&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;1/2 pint (200ml) Hydrogen Peroxide, 30% strength&lt;/li&gt;&#xA;  &lt;li&gt;2 level teaspoons of Xanthan Gum&lt;/li&gt;&#xA;  &lt;li&gt;1 level teaspoon of Glycerine&lt;/li&gt;&#xA;  &lt;li&gt;1/4 teaspoonful of Oxy laundry booster&lt;/li&gt;&#xA;  &lt;li&gt;1 teaspoonful hot (not boiling) water&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;In a very small ceramic or plastic bowl/dish, dissolve the Oxy in the&#xA;  hot water. Lorne found that the Oxy doesn't want to dissolve in the&#xA;  paste/gel very well - this premixture of the Oxy fixed that problem.&#xA;  While the Oxy is dissolving, mix the Hydrogen Peroxide and Xanthan gum&#xA;  in the blender for five seconds. Add the Glycerine to that mixture and&#xA;  blend for another five seconds. Let this mixture sit for five&#xA;  minutes.Blend for another five seconds.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Just before you apply the gel, thoroughly stir in by hand, the&#xA;  dissolved Oxy/water mix.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Be careful using strong hydrogen peroxide recipes as it is caustic to the skin and will need frequent attention to avoid it drying and streaking.  Check it often and reapply paste to prevent it from drying out.&lt;/p&gt;&#xA;" OwnerUserId="376" LastEditorUserId="376" LastEditDate="2016-05-11T15:50:07.953" LastActivityDate="2016-05-11T15:50:07.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="452" PostTypeId="1" AcceptedAnswerId="455" CreationDate="2016-05-10T16:17:57.047" Score="10" ViewCount="1834" Body="&lt;p&gt;I'm about to do some assembly coding for the C64 but for sanity I would like to do the actual coding on my Mac with an emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is; which is the most maintained/up-to-date emulator/assembler tool-chain for C64 development as of 2016?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What've come up with so far is an &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/crossplatform/emulators/VICE/vice-macosx-cocoa-i386%2Bx86_64-10.6-clang-2.4.dmg&quot;&gt;OSX-build&lt;/a&gt; of &lt;a href=&quot;http://vice-emu.sourceforge.net/&quot;&gt;VICE&lt;/a&gt; v2.4 from 2012 and &lt;a href=&quot;http://dasm-dillon.sourceforge.net/&quot;&gt;DASM&lt;/a&gt; v2.20.11 from 2014 which I managed to build &lt;a href=&quot;https://sourceforge.net/projects/dasm-dillon/files/dasm-dillon/2.20.11/dasm-2.20.11-2014.03.04-source.tar.gz/download&quot;&gt;from source&lt;/a&gt;. This setup actually works, but maybe there are more contemporary alternatives which is regarded as the defacto tools of use today?&lt;/p&gt;&#xA;" OwnerUserId="379" LastEditorUserId="4" LastEditDate="2016-05-11T04:23:13.683" LastActivityDate="2016-05-11T04:23:13.683" Title="What Commodore 64 emulator and assembler to use?" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;assembly&gt;&lt;programming&gt;&lt;software-recommendation&gt;" AnswerCount="3" CommentCount="2" ClosedDate="2016-05-12T17:31:47.917" ContentLicense="CC BY-SA 3.0" />
  <row Id="453" PostTypeId="2" ParentId="452" CreationDate="2016-05-10T17:27:27.880" Score="-4" Body="&lt;p&gt;Check out Rocco Di Leo's site, he's coding on a MAC and documented everything: &lt;a href=&quot;http://www.dustlayer.com&quot; rel=&quot;nofollow&quot;&gt;http://www.dustlayer.com&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="381" LastEditorUserId="79" LastEditDate="2016-05-10T17:28:08.397" LastActivityDate="2016-05-10T17:28:08.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="454" PostTypeId="2" ParentId="452" CreationDate="2016-05-10T20:26:56.440" Score="4" Body="&lt;p&gt;Based on looking at recent threads on C64 forums, VICE seems to be the most popular emulation option, and from glancing at its SVN repository, it is still under active development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For assemblers, I know of &lt;a href=&quot;http://cc65.github.io/cc65/&quot; rel=&quot;nofollow noreferrer&quot;&gt;cc65&lt;/a&gt; as an alternative, but development platform is going to be personal preference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, see &lt;a href=&quot;https://stackoverflow.com/questions/15834329/commodore-64-development-tools-for-mac-os-x&quot;&gt;this stack overflow thread&lt;/a&gt; that asks the same question.&lt;/p&gt;&#xA;" OwnerUserId="64" LastEditorUserId="-1" LastEditDate="2017-05-23T12:39:25.033" LastActivityDate="2016-05-10T20:26:56.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="455" PostTypeId="2" ParentId="452" CreationDate="2016-05-10T22:20:50.377" Score="7" Body="&lt;p&gt;Some people seem to favor VICE + KickAssembler, this is a page describing the setup procedure.&#xA;&lt;a href=&quot;https://goatpower.org/projects-releases/sublime-package-kick-assembler-c64/&quot;&gt;https://goatpower.org/projects-releases/sublime-package-kick-assembler-c64/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;KickAssembler has many (macro) extensions that make programming easier, is written in Java that helps with its portability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SublimeText is just an editor, the package provides for easy hooks and keyboard shortcuts for compilation and debugging (you could use any other editor of course).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for emulation, VICE has virtually no competition.&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-05-10T22:29:12.153" LastActivityDate="2016-05-10T22:29:12.153" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="457" PostTypeId="2" ParentId="441" CreationDate="2016-05-11T01:09:14.487" Score="4" Body="&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.z80.info/z80emu.htm&quot; rel=&quot;nofollow&quot;&gt;Z80.info&lt;/a&gt;&lt;/strong&gt; has a HUGE list of emulators for many platforms. Some links may be broken, though - because the website was moved or does not exist any more. Either way, googling with the name of the emulator itself will solve the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you should favorite this page (I did!). It has useful information regarding the subject.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Suggestions&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I like &lt;a href=&quot;http://nanochess.org/emulator.html&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;Toledo&lt;/strong&gt;&lt;/a&gt; - a CP/M emulator; it considers the Intel 8080, not the Z80. But I like it, and it won the &lt;a href=&quot;https://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest&quot; rel=&quot;nofollow&quot;&gt;IOCCC&lt;/a&gt;! You will need to compile it and maybe adjust something. But not much of what you want (simulates the system not the processor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also &lt;a href=&quot;http://www.natmac.net/zim/&quot; rel=&quot;nofollow&quot;&gt;ZIM&lt;/a&gt; which can be used in a Java Virtual Machine (JVM). It speeds the use of the tool, because it just needs the JVM installed, not requiring compiling or installation of other tools (Java is usually used by multiple applications for your PC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ZIM also works within the browser if the Java Web Start plugin is available to your browser (Firefox and Internet&amp;nbsp;Explorer; Chrome doesn't support Java any more). I think it's very handy! It will work on a wide variety of modern OSes and within the browser! :P&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ZIM &lt;strong&gt;&lt;em&gt;should be&lt;/em&gt;&lt;/strong&gt; something along &lt;em&gt;SIM8085&lt;/em&gt;. So I hope it helped!&lt;/p&gt;&#xA;" OwnerUserId="394" LastEditorDisplayName="user28" LastEditDate="2016-08-03T07:43:18.750" LastActivityDate="2016-08-03T07:43:18.750" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="458" PostTypeId="2" ParentId="433" CreationDate="2016-05-11T04:11:57.450" Score="3" Body="&lt;p&gt;In addition to mcleod_ideafix' answer above: Commodore also made a CD-ROM drive that plugged in the slot (unfortunately without a feed-through slot on the other side): the &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_A570&quot; rel=&quot;nofollow&quot;&gt;A570&lt;/a&gt; turned the Amiga 500 into a &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_CDTV&quot; rel=&quot;nofollow&quot;&gt;CDTV&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the A570 was released after the A500 was discontinued and replaced with the A600, it had a caddy (not a tray) and it ran at single-speed. So it wasn't very popular.&lt;/p&gt;&#xA;" OwnerUserId="179" LastActivityDate="2016-05-11T04:11:57.450" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="459" PostTypeId="1" AcceptedAnswerId="498" CreationDate="2016-05-11T07:19:24.937" Score="23" ViewCount="4644" Body="&lt;p&gt;It would be nice to break it down by model if possible.&lt;/p&gt;&#xA;" OwnerUserId="393" LastEditorUserId="4335" LastEditDate="2017-05-09T03:57:56.217" LastActivityDate="2018-04-19T03:48:48.517" Title="Over its lifetime, how many Apple II computers were sold?" Tags="&lt;apple-ii&gt;&lt;history&gt;" AnswerCount="5" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="460" PostTypeId="2" ParentId="459" CreationDate="2016-05-11T10:23:33.113" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II_series&quot; rel=&quot;nofollow&quot;&gt;According to Wikipedia&lt;/a&gt;, somewhere between 5 and 6 million Apple II series computers were sold between launch in 1977 and discontinuation in 1993. Apparently around 1.25 million of these were models of Apple IIGS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More information might be available in &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II_series#cite_note-autogenerated1-4&quot; rel=&quot;nofollow&quot;&gt;the referenced book&lt;/a&gt;, but I haven't got a copy.&lt;/p&gt;&#xA;" OwnerUserId="89" LastActivityDate="2016-05-11T10:23:33.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="461" PostTypeId="2" ParentId="379" CreationDate="2016-05-11T14:50:00.560" Score="7" Body="&lt;p&gt;I used the method outlined here by Javier Rivera on my Apple IIc Plus and it worked fine. Javier does a lot of RetroBrite projects and posts a number of results to the Apple II Enthusiasts Facebook group. He also gave a presentation on methods at KansasFest 2015 and did a live session with anyone who wanted to go through the process with him. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.callapple.org/vintage-apple-computers/apple-ii/shining-a-light-on-retrobrite/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.callapple.org/vintage-apple-computers/apple-ii/shining-a-light-on-retrobrite/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case the link dies, I'll explain my experience a bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went to Sally Beauty Supply. Not sure where you are, but that's a U.S. national chain. If you have a place that sells to consumer and/or professional hair-stylists and barbers, you can find a lot of the same supplies. I found the Peroxide 40 there. I also picked up the latex gloves and a couple of smaller items that are used to mix hair coloring agents. This consisted of a small plastic well with handle and a brush. This is what I used to mix everything up and paint the mixture onto the IIc Plus.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;From Javier's recipe:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;100 ml of liquid Peroxide 40, found in beauty supply shops&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;One teaspoon of Arrowroot powder&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;One teaspoon of OxyClean powder&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here's a picture from Javier's post. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/83I8j.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/83I8j.jpg&quot; alt=&quot;Picture from the recipe.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I actually found Arrowroot and OxyClean at a grocery store. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mixing everything together was a bit challenging. The Oxyclean had a tendency to clump in the arrowroot but I just kept mixing until I couldn't seem to make a difference with it any longer. Probably a good five minutes, honestly. I imagine a blender could be used for this, but I didn't try it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once done, I had a flat piece of wood that I covered with aluminum foil to try to point UV at sides and things that weren't actually facing the sky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I dismantled the IIc Plus, removing the mainboard, the floppy, the power supply, the keyboard. This is a lot easier on a IIc Plus than what you might find on other retrocomputers but I imagine you don't want vintage electronics out in the sun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I pushed out the multi-color Apple logo from the case and used masking tape to cover up the &quot;Apple IIc&quot; on the cover. I don't know that I really needed to cover that up, but I figured it couldn't hurt. Most recipes I've read mention that the procedure will damage the Apple logo so that's why I pushed it out. It was glued in place so it came out pretty easily and there was enough adhesive to re-stick it when I was done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the brush, I painted as smooth a coat as I could on the IIc Plus, the top and side surfaces. The mixture would foam up and every 45 minutes or so I would go back out and smooth out the covering again occasionally adding some more of the mixture. The IIc Plus is mostly large, flat pieces so I didn't have to do a lot of rotating. It was fairly challenging to cover it up well. The brush and arrowroot had a tendency to streak and I needed to keep working it until it was smooth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I did this for about four hours, maybe less. Once done, I literally took a garden hose and rinsed off the pieces. After that, I brought everything in and dried it all then left it out for an hour to so to dry further.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original color was definitely brought back on the surfaces that faced the sky. The sides are still a little darker but it doesn't bother me. I think if I had something that would bend the UV to more directly to hit the sides I probably would have had a better effect there. The option is always there to go back and do it again concentrating on the sides, but there is a measurable difference from before I started so I haven't worried about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would really like to do the keys, especially the spacebar which is more browned than anything else. I haven't done this myself. Here's what a member of the Apple II Enthusiasts group on Facebook posted:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Eduardo Correa Lima May 8 at 9:03pm · Vancouver, BC, Canada&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;First retrobrite attempt. Set of //c keys.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;3 teaspoons of Oxyclean, 3% Hydrogen Peroxide. Put all key caps in a&#xA;  glass jar with enough peroxide to cover the keys. Put in the Oxyclean,&#xA;  then agitate the jar.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Leave in sunlight for 3 hours, agitating every hour.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;His results are great!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aK2vA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aK2vA.jpg&quot; alt=&quot;IIc Keys&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="398" LastEditorUserId="398" LastEditDate="2016-05-11T16:28:36.773" LastActivityDate="2016-05-11T16:28:36.773" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="462" PostTypeId="2" ParentId="143" CreationDate="2016-05-11T15:34:22.237" Score="4" Body="&lt;p&gt;An excellent description of the cassette storage format, along with the monitor and ROM codes that store and retrieve data, are outlined in Apple II Monitors Peeled (start at page 81):&#xA;&lt;a href=&quot;ftp://ftp.apple.asimov.net/pub/apple_II/documentation/misc/Apple%20II%20Monitors%20Peeled.pdf&quot; rel=&quot;nofollow&quot;&gt;ftp://ftp.apple.asimov.net/pub/apple_II/documentation/misc/Apple%20II%20Monitors%20Peeled.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II Circuit Description (W. Gayler) has a great technical breakdown as well (page 92): &lt;a href=&quot;http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Books/W.%20Gayler%20-%20The%20Apple%20II%20Circuit%20Description.pdf&quot; rel=&quot;nofollow&quot;&gt;http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Books/W.%20Gayler%20-%20The%20Apple%20II%20Circuit%20Description.pdf&lt;/a&gt;, &lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2016-05-11T15:34:22.237" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="463" PostTypeId="1" AcceptedAnswerId="467" CreationDate="2016-05-11T20:20:20.267" Score="84" ViewCount="17595" Body="&lt;p&gt;There are a lot of retro-computers with BASIC as an integral part of the operating system. The IBM 5100 was one of the first computers with a separate memory space for BASIC, followed by the Commodore PET, Apple II and TRS-80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why was BASIC built into their operating systems, using memory? From &lt;a href=&quot;http://sta.c64.org/cbm64mem.html&quot;&gt;this memory map&lt;/a&gt;, the Commodore 64 had memory completely reserved for BASIC. There were computers, like the Altair 8800, that provided BASIC as software that could be loaded into memory when necessary, and these computers both worked and sold well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why was BASIC built into so many computers' operating systems?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2016-05-13T06:23:02.590" LastActivityDate="2017-06-22T16:25:13.903" Title="Why was BASIC built into so many operating systems?" Tags="&lt;operating-system&gt;&lt;basic&gt;" AnswerCount="18" CommentCount="13" FavoriteCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="464" PostTypeId="2" ParentId="463" CreationDate="2016-05-11T21:33:31.877" Score="22" Body="&lt;p&gt;As far as I know it was included because it was essentially the operating system interface. When you installed MS-DOS on a PC it provided you with commands and allowed you to run programs that executed machine code on the machine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC back then was similar. It provided you with a command prompt, operating system-level commands like reading/writing data to disk, a printer, tape, do simple things like print to the screen, and read in user input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way you had a general set of commands with an interpreter that could be ported to other CPUs and memory configurations with minimal changes. You just needed to setup which commands were available and what machine specific code was run for those command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially a portable, programmable, operating system.&lt;/p&gt;&#xA;" OwnerUserId="81" LastActivityDate="2016-05-11T21:33:31.877" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="465" PostTypeId="2" ParentId="463" CreationDate="2016-05-11T21:59:25.133" Score="45" Body="&lt;p&gt;Having BASIC available for the machine was a selling point so early adopters wouldn't have to wait for software to become available--they could write what they need themselves, and they wouldn't need to learn machine language to do it.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[Bill] Gates &lt;a href=&quot;https://en.wikipedia.org/wiki/Altair_BASIC#Origin_and_development&quot;&gt;believed&lt;/a&gt; that, by providing a BASIC interpreter for&#xA;  the new [MITS Altair] computer, they could make it more attractive to&#xA;  hobbyists.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-05-11T21:59:25.133" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="466" PostTypeId="2" ParentId="463" CreationDate="2016-05-11T22:17:35.973" Score="17" Body="&lt;p&gt;As it says in Wikipedia &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC&quot;&gt;BASIC&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The introduction of the first microcomputers in the mid-1970s was the start of explosive growth for BASIC. It had the advantage that it was fairly well known to the young designers and computer hobbyists who took an interest in microcomputers.&lt;br&gt;&#xA;  ... BASIC was one of the few languages that was both high-level enough to be usable by those without training and small enough to fit into the microcomputers of the day, making it the de facto standard programming language on early microcomputers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In other words, it was easy to learn even for those with no programming experience, and the interpreter memory footprint was small, which was important due to the cost of memory.&lt;br&gt;&#xA;(I don't exactly recall, but back in the 80s an 8k bit RAM chip in C64 cost several dollars.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The use of an interpreter was also important from an ease of use point. While other existing languages were similar and not so difficult to learn (for example FORTRAN), they had to be compiled.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that instead of getting instant results (or errors), you had to write the code, compile it (hopefully no errors otherwise you had to change the code again and compile again), and then run it. If any errors, back to square one you go.  &lt;/p&gt;&#xA;" OwnerUserId="111" LastEditorUserId="111" LastEditDate="2016-05-12T20:36:41.267" LastActivityDate="2016-05-12T20:36:41.267" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="467" PostTypeId="2" ParentId="463" CreationDate="2016-05-11T22:19:49.553" Score="69" Body="&lt;p&gt;Having a programming language built-in gave you a multi-purpose tool into your hands at the flick of a switch (power on).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to the choice of BASIC vs. other programming languages, microcomputer BASIC dialects are - despite some of their shortcomings - quite accessible to novice programmers. They are a bit like using English in an imperative style (&quot;PRINT this&quot;, &quot;DO that&quot;), so not hard to learn. There was a lot of BASIC literature around at that time and sufficiently general example programs could be ported to different systems without too much work. Many other languages are more cryptic to someone not used to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As they were usually included on the ROM chips, they didn't take away any RAM if you chose not to use BASIC.&lt;/p&gt;&#xA;" OwnerUserId="92" LastActivityDate="2016-05-11T22:19:49.553" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="468" PostTypeId="2" ParentId="463" CreationDate="2016-05-11T23:41:07.347" Score="13" Body="&lt;p&gt;Looking at other sources, it seems the BASIC for the C64 was burned into a D2364 ROM chip (8192 bytes). This 8k was mapped into the memory address region at 0xA000-0xBFFF.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was typical of machines at the time: processors like the 6502 and Z80 could only address a 64k range (addresses 0 to 0xFFFF), and within that memory map, some would be RAM, some ROM, some would be empty space, and perhaps some would refer to I/O ports on chips mapped into the memory space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In many cases the supplied RAM would be much less than 64k anyway (although this seems inconceivably small by modern standards), so if 8k of the mapped space was taken up a ROM, then this wouldn't necessarily cause any problem to the owner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to why BASIC was supplied with a lot of machines: firstly we should say BASICs, since the implementations were wildly incompatible in machines from different vendors, but they all shared some common characteristics that gave some familiarity: GOTO, GOSUB, IF, PRINT, INPUT and so on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time machines had limited memory space, and a language was needed that could fit in a small ROM, and that had a low overhead in RAM when executing programs. It needed to be an interpreter (rather than a compiler) due to limited RAM and typically no secondary storage (hard disk, floppy disk etc) that provided a file system. Also, it needed to be a simple language so that people could succeed in some basic programming tasks. There weren't anything like as many languages to choose from back then, and BASIC emerged as a soft-of standard that became a selling-point and perhaps even a requirement.&lt;/p&gt;&#xA;" OwnerUserId="26" LastActivityDate="2016-05-11T23:41:07.347" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="469" PostTypeId="2" ParentId="459" CreationDate="2016-05-11T23:52:03.877" Score="5" Body="&lt;p&gt;An attempt is being made by Antoine at &lt;a href=&quot;http://www.brutaldeluxe.fr&quot; rel=&quot;noreferrer&quot; title=&quot;Brutal Deluxe Software&quot;&gt;Brutal Deluxe Software&lt;/a&gt;  to estimate IIgs production figures based on serial numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This work is using the fact that the serial number encodes the machine's position within a week's production run at a particular factory. Decode for each factory and week, look for the maximum value reported and you have a method of estimating total production over the product's life cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Antoine is trying to cross-reference this with IIgs keyboard serial numbers (as the computers shipped with a keyboard), but the figures derived from IIgs vs keyboard serial numbers are currently (May '16) way out of sync (~2.6M IIgs's, ~0.9M keyboards).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ~2.6M figure seems higher than other estimates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't believe Apple ever released definitive numbers of all Apple II's sold, let alone by model.&lt;/p&gt;&#xA;" OwnerUserId="123" LastActivityDate="2016-05-11T23:52:03.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="470" PostTypeId="2" ParentId="463" CreationDate="2016-05-12T04:21:53.493" Score="38" Body="&lt;p&gt;Nobody so far has said the magic words, which is &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_BASIC&quot;&gt;Microsoft BASIC&lt;/a&gt;&lt;/strong&gt;. First developed for the Altair 8800 (the first commercially successful personal computer!), Microsoft spent a lot of energy making sure their BASIC would work on every personal computer in the 1970s and licensing it widely. It ran on &lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M&quot;&gt;CP/M&lt;/a&gt;, it ran on the &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80#BASIC&quot;&gt;TRS-80&lt;/a&gt;, and -- of course -- the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Personal_Computer&quot;&gt;IBM PC&lt;/a&gt;. Apple's &lt;a href=&quot;https://en.wikipedia.org/wiki/Applesoft_BASIC#Background&quot;&gt;AppleSoft BASIC&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_BASIC&quot;&gt;Commodore BASIC&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/AmigaBASIC&quot;&gt;Amiga BASIC&lt;/a&gt; were all originally licensed from Microsoft. This meant that if you were manufacturing a personal computer in the 1970s, the first question any customer would ask was whether their existing Microsoft BASIC programs would work on it -- essentially, the first standardized programming language/execution platform!&lt;/p&gt;&#xA;" OwnerUserId="417" LastActivityDate="2016-05-12T04:21:53.493" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="471" PostTypeId="2" ParentId="463" CreationDate="2016-05-12T07:38:49.427" Score="4" Body="&lt;p&gt;BASIC was first used at Dartmouth College in 1964.  It was the first readily available programming language on time-share systems (the predecessor of cloud computing).  In 1975 Microsoft released a version of Basic for the first consumer level microcomputer, the MITS Altair 8800.  Apple, Commodore, Tandy and then IBM PC (in 1981) followed suit with their microcomputers. By the time IBM released the PC, Apple had already acquired considerable marketshare in schools and thus acquired lots of young budding programmers who mostly only knew BASIC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In its day, BASIC was as indispensable as a web browser is today. &lt;/p&gt;&#xA;" OwnerUserId="424" LastActivityDate="2016-05-12T07:38:49.427" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="472" PostTypeId="2" ParentId="463" CreationDate="2016-05-12T08:16:37.767" Score="26" Body="&lt;p&gt;Thraka is right that BASIC served the role of operating system on many 8-bit micros. &lt;em&gt;Some&lt;/em&gt; OS was needed, that was beyond doubt. But at the time dedicated operating systems were either very limited (say, Atari DOS), overly complex, big and expensive for the tiny computers (Unix), or - for the middle ground, that was &quot;just right&quot; - in their infancy (CP/M).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC, on the other hand, was touted THE beginner's programming language. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time - 8-bit micros were primarily aimed at the kids and teens market. They were &quot;home computers&quot;, where the dad could write and print letters, mom could design crosstitch images, but 90% of the time kids would be playing games. But if the computer was to be more than a glorified gaming console with hardly-used extra functions, it needed a marketing point that would set it apart from the consoles: &lt;strong&gt;&quot;It Teaches Your Kids Programming&quot;&lt;/strong&gt; was the critical sales point. And so it needed a kid-friendly programming language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC had only one serious competitor for that position at the time: &lt;a href=&quot;https://en.wikipedia.org/wiki/Logo_%28programming_language%29&quot;&gt;Logo&lt;/a&gt;, and while Logo was generally considered a much better learning tool&lt;sup&gt;*&lt;/sup&gt; but it hardly yielded towards &quot;general use&quot; - you could do some quite fancy stuff easily (drawing a &lt;a href=&quot;https://en.wikipedia.org/wiki/Koch_snowflake&quot;&gt;Koch Snowflake&lt;/a&gt; was less than a screen long program; not a packed screen too) but didn't yield well towards &quot;common use&quot;, and was considerably slower. Other languages than the two either employed concepts too advanced for kids, or were too complex to implement on 8-bit micros (leaving enough memory for actual software too!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...also - Microsoft Basic was an important language for &quot;professional environment&quot;. Learning its simpler variants was considered (usually by clueless parents) an important building block towards building a career of using it professionally. Nobody ever wrote serious business software in Logo. Therefore the marketing appeal of Basic - despite its factual shortcomings - overshadowed Logo as THE language for learning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of that, implementing OS procedures as BASIC commands was simple, natural and took little effort, little memory and allowed to integrate or script them as BASIC programs easily. Logo didn't yield itself to that purpose nearly as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so, BASIC being simultaneously a comfortable OS environment, a scripting tool, a teaching tool, and - above all - an important marketing point - became the language of choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;* (e.g. providing recursion, which was between very difficult and impossible in Basic, lacking local variables, parametric function calls and rarely implementing easy to access arrays which could serve as a crutch for these). Also, the Turtle Graphics, which was excellent for teaching the concept of &quot;giving commands&quot;, and building a library of procedures, but made utilizing the gfx as &quot;pixel canvas&quot; difficult.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2016-05-12T08:16:37.767" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="473" PostTypeId="2" ParentId="463" CreationDate="2016-05-12T12:36:16.347" Score="13" Body="&lt;p&gt;Short answer: so you could actually DO something &lt;em&gt;useful&lt;/em&gt; with the machine out of the box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering when these machines arrived in the mid-to-late 1970's, they were not only expensive &quot;hobby toys&quot; but software was hard to come by and peripherals were costly. If you compare this to the Altair 8800, you paid a lot of money for a machine that when you plugged it in it really did &lt;em&gt;nothing&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though Microsoft BASIC had been popular because it was easier to use than machine language, I've read things over the years that suggested that people wanted to use BASIC because the learning curve was smaller and could fit in the small memory of these machines; MS wasn't quite creating the trend, but going along with it. Yes, they did port it to 808x/6502/etc. chips at the time, but note that the original Apple I and II shipped with Integer BASIC which was written by Woz, not Microsoft (and based on HP basic, not Dartmouth). Given the relative ease of BASIC, you could write your simple recipe or checking account balance program while the world waited for VisiCalc to appear in 1979.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-05-12T12:36:16.347" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="474" PostTypeId="1" AcceptedAnswerId="485" CreationDate="2016-05-12T13:17:08.353" Score="8" ViewCount="426" Body="&lt;p&gt;Is there a list somewhere? Might be nice to compile a list here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming mostly games but also music and educational software made use of it.&lt;/p&gt;&#xA;" OwnerUserId="393" LastActivityDate="2016-05-12T19:24:41.757" Title="What software supported the Mockingboard on the Apple II?" Tags="&lt;apple-ii&gt;&lt;hardware&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="475" PostTypeId="2" ParentId="463" CreationDate="2016-05-12T13:42:45.703" Score="13" Body="&lt;p&gt;Because at the time a personal computer without BASIC was a total non-starter. A personal computer without BASIC would seem as silly then as a computer without a web browser would seem today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We considered BASIC interpreters essential in the 1970's and early 1980's  because the modern concept of the personal computer as a machine on which one runs ready-made application programs was only beginning to emerge. BASIC was invented in 1964. Microsoft BASIC was released in 1975. Wordstar was released in 1978, Visicalc in 1979, Wordperfect in 1979, Microsoft Word in 1983, Lotus 123 in 1983. If you were a user then, you might have heard of some of these programs, you might be able to get a copy of one of them, and it might run on your computer (but probably would not).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making practical use of a computer without programming was still very much a new idea. BASIC was seen as a language which end users would use to solve problems. I learned it from the 1975 book &quot;Making BASIC Work For You&quot;. It is all about how to solve business accounting and record-keeping problems. The examples are things which today would be done using spreadsheets and other office applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer buyer was also different. The average person did not think that he ever would or ever could operate a computer and so had no desire to own a home computer. They were bought by hobbyists who valiantly tried to show their friends that the machines had some practical value (which was hard since most tasks took two or three times as long on a computer) and by parents who realized that microcomputers, even if useless now, were the wave of the future and wanted their children to &quot;learn programming&quot;. In both cases it was essential that the computer be programmable.&lt;/p&gt;&#xA;" OwnerUserId="433" LastEditorUserId="433" LastEditDate="2016-05-19T15:32:17.013" LastActivityDate="2016-05-19T15:32:17.013" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="476" PostTypeId="1" AcceptedAnswerId="478" CreationDate="2016-05-12T14:16:13.123" Score="31" ViewCount="2246" Body="&lt;p&gt;Most major computer manufacturers/distributors in the 70's and 80's included BASIC with their computers.  Some (as answers to this great question have detailed: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/463/why-was-basic-built-into-so-many-operating-systems&quot;&gt;Why was BASIC built into so many operating systems?&lt;/a&gt;) even dropped you into a BASIC prompt immediately upon turning the computer.  However, there were some slight differences between BASIC that was shipped with Atari, Apple, Commodore, and Tandy computers (for example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did these different dialects of BASIC evolve?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During that time, the underlying hardware for each model of personal computer did vary greatly.  But is it unreasonable to think that BASIC should have been able to abstract those differences?  Or was each version different for other reasons (hobbyist vs. business, etc.)?&lt;/p&gt;&#xA;" OwnerUserId="125" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2018-05-16T18:11:22.603" Title="Why were early versions of BASIC different?" Tags="&lt;programming&gt;&lt;basic&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="477" PostTypeId="1" CreationDate="2016-05-12T15:15:04.983" Score="14" ViewCount="1057" Body="&lt;p&gt;A popular, but, much maligned bus expansion device for the CoCo was the venerable MPI. There were several companies who made bus expasion devices for the CoCo, however, this question is related specifically to the Tandy version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were three model numbers listed for the MPI:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;26-3024 - in both grey and white colors; &lt;/li&gt;&#xA;&lt;li&gt;26-3124 - in white, released about the same time the restyled CoCo 2&#xA;was;&lt;/li&gt;&#xA;&lt;li&gt;26-3124A - in white, released about the same time as the CoCo 3 was;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's pretty well known that the second two devices (3124 &amp;amp; 3124A) were electronically identical with the original, but, used more circuit integration. However, there is a compatibility issue with the 3024 and 3124 when used with the CoCo 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What is the problem with using the 3024 and 3124 with the CoCo 3?&lt;/li&gt;&#xA;&lt;li&gt;Is there a method to fix the problem on either device?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="173" LastEditorUserId="173" LastEditDate="2016-05-13T15:03:38.400" LastActivityDate="2016-09-07T18:34:23.453" Title="The Tandy/TRS-80 Multipack Interface (MPI)" Tags="&lt;color-computer&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="478" PostTypeId="2" ParentId="476" CreationDate="2016-05-12T15:48:26.870" Score="34" Body="&lt;p&gt;There are multiple reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, there was no standards body publishing an official definition of the BASIC language (initially the closest thing to a standard was the Dartmouth version for mainframe computers, eventually the 'de-facto' standard became Microsoft's version simply due to market share).  This left people free to fill in perceived gaps in the language however they liked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, different computers had different I/O systems and capabilities and therefore required at least some adjustment to be made.  Because of the differences, and the fact that different people/groups were making the adjustments, you ended up with different commands being added (or the same command being added in different ways).  This was especially obvious in commands like LOAD and SAVE (e.g. CLOAD &quot;x&quot; versus LOAD &quot;x&quot;,1 to load from cassette) but could also be seen elsewhere, such as in graphics commands or record-based I/O features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third, different computers operated under different design constraints.  If you are trying to fit BASIC into a 4KB ROM you are going to have to leave some things out (like floating-point arithmetic).  If you have 8KB or 16KB available you can include more of the standard BASIC features and even have room left to add your own manufacturer-specific enhancements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many other reasons but these are among the more significant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding abstraction: it turns out to be very difficult to do unless you already know in advance what the future direction of the language will be and can plan for it.  When a language grows 'organically' (as BASIC did) you often discover too late that your initial approach wasn't the best, but for compatibility reasons you can't go back and change it.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2016-05-12T15:48:26.870" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="479" PostTypeId="2" ParentId="463" CreationDate="2016-05-12T16:12:51.540" Score="9" Body="&lt;p&gt;In addition to the answers above, something to keep in mind is that there wasn't a ton of commercial software available at the time compared to today and computers were not yet things that everyone needed or even found useful for their jobs. It's not like today where you could buy a computer, load it with Office and other software, use it to do your job, maybe even run your business and turn it into a multimillion dollar operation, and never touch a line of code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Meanwhile when I went to college in 1995 I had fellow freshmen who could barely get their PC turned on but they knew how to program in Pascal because the American school system at the time taught programming because they didn't know what else to do with these computer things everyone is buying, but they knew that it was going to be a &quot;thing&quot; in the future. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So one of the reasons a lot of these old toy computers came with BASIC built in was because, compared to today, they didn't do much else. And they also tended to not run the software from the previous generation or any other computers (if you think about it, Apple's never completely shaken this mindset - they have few qualms about breaking backwards compatibility for machines more than a few years old and they sell a computer that can't run the software from the competition's platforms). Notice how it wasn't until the DOS/Windows cycle started happening that backwards compatibility became a big thing and then sales of computer took off. There were other factors too, like price, but it inspired a lot of consumer confidence when you could be reasonably certain your stuff could come along for the ride.&lt;/p&gt;&#xA;" OwnerUserId="446" LastActivityDate="2016-05-12T16:12:51.540" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="480" PostTypeId="2" ParentId="477" CreationDate="2016-05-12T16:17:32.170" Score="10" Body="&lt;p&gt;From Marty Goodman, writing in &lt;a href=&quot;http://www.colorcomputerarchive.com/coco/Documents/Magazines/Rainbow,%20The%20(Searchable%20image)/The%20Rainbow%20Vol.%2006%20No.%2006%20-%20January%201987.pdf&quot; rel=&quot;noreferrer&quot;&gt;The Rainbow, January 1987&lt;/a&gt;, page 102:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The reason for the Multi-Pak fix for the CoCo 3 is at least twofold.&lt;/p&gt;&#xA;&lt;p&gt;First, the older PAL chips used to decode the software slot select port for the Multi-Pak “ghosted” from $FF7F to $FF9F. That is, when a value was written to $FF7F, it appeared at $FF9F also, and vice versa. This ghosting caused no problems with the CoCo 2, but it plays havoc with the CoCo 3, which occasionally wants to write to $FF9F when talking to its GIME chip. Similarly, any attempt at slot selection with a ghosting Multi-Pak will send spurious data to the GIME chip. Thus, the decoding of the software slot selection port had to be made more complete.&lt;/p&gt;&#xA;&lt;p&gt;Second, Tandy felt it necessary to lock out the $FF80 through $FF9F range ($FFA0 and up are already locked out by the programming of the old Multi-Pak PAL chips). This was to protect the GIME chip from conflicts with information from other external devices that might be addressed in that range.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The article goes on to explain the hardware upgrades necessary to fix the Multi-Paks:&lt;/p&gt;&#xA;&lt;p&gt;On the older Multi-Pak (26-3024) all that is necessary is to replace the PAL chip, U8, with updated PAL chip.&lt;/p&gt;&#xA;&lt;p&gt;On the newer Multi-Pak (26-3124), Marty makes the case to have the upgrade done by a professional:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you own one of the newer MPIs (Catalog No. 26-3124), I recommend you take your MPI to Tandy and have them upgrade it for you. This is because the upgrade involves cutting a trace on the circuit board, and then delicately soldering seven wires of the new satellite board to various integrated circuit chip pins on the board. If you feel totally comfortable with doing such work, what follows is a brief outline of the upgrade process.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="29" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-05-12T17:15:32.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="481" PostTypeId="1" AcceptedAnswerId="482" CreationDate="2016-05-12T16:41:57.447" Score="20" ViewCount="5449" Body="&lt;p&gt;I am looking for a emulator for MS-DOS for OS X to run old games on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any free emulators for MS-DOS that run on an Apple machine with OS X?&lt;/p&gt;&#xA;" OwnerDisplayName="user448" LastEditorDisplayName="user448" LastEditDate="2017-05-26T16:51:14.763" LastActivityDate="2019-11-24T10:01:15.450" Title="How can I emulate MS-DOS on OS X?" Tags="&lt;emulation&gt;&lt;software-recommendation&gt;&lt;ms-dos&gt;&lt;gaming&gt;" AnswerCount="6" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="482" PostTypeId="2" ParentId="481" CreationDate="2016-05-12T16:43:50.537" Score="31" Body="&lt;p&gt;The nicest DOS emulator for macOS is &lt;a href=&quot;http://boxerapp.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Boxer&lt;/a&gt;, which is a macOS-specific version of &lt;a href=&quot;http://www.dosbox.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOSBox&lt;/a&gt;. Not only is it free, it's free software (or open source if you prefer); its &lt;a href=&quot;https://github.com/alunbestor/Boxer&quot; rel=&quot;nofollow noreferrer&quot;&gt;source code&lt;/a&gt; is available and freely modifiable. There is currently no “official” 64-bit build, which means the distributed application won’t work on the latest versions of macOS, but &lt;a href=&quot;https://www.dosgameclub.com/forums/topic/boxer-app-64-bit/&quot; rel=&quot;nofollow noreferrer&quot;&gt;there are 64-bit builds&lt;/a&gt; available from the community.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Boxer or DOSBox are the best option nowadays for running old DOS games (it has pretty good hardware emulation for the kinds of peripherals used with games). If you want a full-blown, free, DOS experience, you could install &lt;a href=&quot;http://www.freedos.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;FreeDOS&lt;/a&gt; inside a &lt;a href=&quot;http://www.virtualbox.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;VirtualBox&lt;/a&gt; virtual machine, but that's more complicated to set up; in particular, VirtualBox's guest additions aren't available for DOS, so it's harder to transfer files from your macOS environment to your DOS environment than it is with Boxer. Instead of FreeDOS, inside VirtualBox, you could also try &lt;a href=&quot;http://drdos.net/download.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;DR-DOS&lt;/a&gt;, or MS-DOS if you have a license for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking to really experience what the operating system was like back when it was still in widespread use, you'll need to find an old PC and run DOS directly on it — a lot of the quirks of daily DOS use are related to the hardware of the time (IRQ handling, memory management...), and emulation environments, be they DOS emulators such as DOSBox or full-blown virtual machines such as VirtualBox, don't allow you to relive that to the same extent.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-11-24T10:01:15.450" LastActivityDate="2019-11-24T10:01:15.450" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="483" PostTypeId="2" ParentId="463" CreationDate="2016-05-12T17:10:35.573" Score="14" Body="&lt;p&gt;A lot of great information has been given.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One more thing to consider is what the machines were like. Most had no decent non-volatile storage - no hard drives, many didn't have diskette drives either. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even the original IBM-PC came with a cassette tape interface - they used a standard audio cassette recorder/player. Even when they had a diskette drive, the drive was often painfully slow. (Looking at you, Commodore 64.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having a programming language built in meant that you only needed to save/load the very small program, and it meant that every instance of a given computer (ie, C64, TRS-80 Model III, TI/99, etc) had the exact same language available on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This had value because computer magazines actually had programs printed in them, and the readers would laboriously type them in, debug the typos, and run them.&lt;/p&gt;&#xA;" OwnerUserId="451" LastActivityDate="2016-05-12T17:10:35.573" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="484" PostTypeId="2" ParentId="142" CreationDate="2016-05-12T17:25:01.770" Score="5" Body="&lt;p&gt;I would say no. I've never heard of anything like that ever. That would require dumping all of the memory of the actual Gameboy and the state of CPU, and then reading that information on startup. Highly unlikely anyone ever made anything like that as a device addon. &lt;/p&gt;&#xA;" OwnerUserId="81" LastActivityDate="2016-05-12T17:25:01.770" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="485" PostTypeId="2" ParentId="474" CreationDate="2016-05-12T17:43:52.310" Score="7" Body="&lt;p&gt;The &lt;a href=&quot;http://www.applevault.com&quot; rel=&quot;noreferrer&quot;&gt;Apple Vault&lt;/a&gt; has a fairly comprehensive &lt;a href=&quot;http://www.applevault.com/hardware/sweet_micro_systems/mockingboard/&quot; rel=&quot;noreferrer&quot;&gt;list of software titles which supported the Mockingboard&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do see several music programs in the list:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Bank Street Music Writer&#xA;Clarinet Master&#xA;Flute Master&#xA;GuitarMaster&#xA;Music Construction Set&#xA;Music Star&#xA;Saxophone Master&#xA;Trumpet Master&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And of course the list of games is quite long:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Adventure Construction Set&#xA;Airsim-3&#xA;Apple Cider Spider&#xA;At the Gates of Moscow 1941&#xA;Auto Gyro&#xA;Battle Cruiser SMS-2000&#xA;BerZap!&#xA;Bouncing Kamungas&#xA;Broadside&#xA;Crime Wave&#xA;Crowther and Woods Adventure&#xA;Crypt of Medea&#xA;GI-Joe&#xA;Lady Tut&#xA;Lancaster&#xA;Legionnaire&#xA;Lethal Labyrinth&#xA;Maze Craze&#xA;Microbe&#xA;Night Flight&#xA;One on One&#xA;Operation: Obliteration&#xA;Pitfall II&#xA;Popeye&#xA;Rescue Raiders&#xA;Silent Service&#xA;Singing Master&#xA;Skyfox&#xA;Spy Strikes Back&#xA;Tactical Armor Command&#xA;Thunderbombs&#xA;Ultima III&#xA;Ultima IV&#xA;Ultima V&#xA;Under Fire&#xA;Willy Byte&#xA;Window&#xA;Zaxxon&#xA;ZooKeeper &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Although based on &lt;a href=&quot;http://atariage.com/forums/topic/228710-games-with-mockingboard-support/&quot; rel=&quot;noreferrer&quot;&gt;this Atari Age discussion thread&lt;/a&gt;, some of these titles work better than others, and some of them (G.I. Joe, Lancaster) not at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 2005 ReactiveMicro.com re-introduced the Mockingboard.  Their &lt;a href=&quot;http://www.downloads.reactivemicro.com/Public/Apple%20II%20Items/Hardware/Mockingboard_v1/Mockingboard-v1a-Docs.pdf&quot; rel=&quot;noreferrer&quot;&gt;manual can be found here&lt;/a&gt;, and has a similar list of supported titles.&lt;/p&gt;&#xA;" OwnerUserId="125" LastEditorUserId="125" LastEditDate="2016-05-12T19:24:41.757" LastActivityDate="2016-05-12T19:24:41.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="486" PostTypeId="2" ParentId="463" CreationDate="2016-05-12T18:06:42.680" Score="6" Body="&lt;p&gt;In short, it was because computers in the early age such as Apple ][ didn't come with OS and the BASIC was the INTERFACE you control your computer. You could access (read/write) files in the cassette tape via BASIC command such as load/save. Later OSs were introduced with Floppy disk drive. &lt;/p&gt;&#xA;" OwnerUserId="452" LastActivityDate="2016-05-12T18:06:42.680" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="488" PostTypeId="2" ParentId="463" CreationDate="2016-05-12T20:37:22.587" Score="13" Body="&lt;p&gt;During the late 1970s and early 1980s, ROM was cheaper than RAM.  The amount of useful work that can be accomplished with a BASIC program that occupies a certain amount of RAM will be often greater than the amount that could be accomplished with the same quantity of machine code, so a computer with 16K of ROM and 8K of RAM could be more useful than one with 2K of ROM and 16K of RAM, even though the latter computer would cost more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, editing a BASIC program &quot;in place&quot; is much more efficient than trying to do likewise with a machine-language program.  In-place editing of machine code is possible, but for the most part generating efficient machine code requires creating a text file and passing it through an assembler.  This in turn generally entails a long slow process every time one wants to modify the code and test it again.  By contrast, in-place editing of a BASIC program is easy, and for many kinds of programs cutting the edit-build-test cycle from five minutes to five seconds is a huge benefit which vastly outweighs the difference in execution speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The need for BASIC largely disappeared when RAM got cheap enough that platforms like Turbo Pascal could allow the editor, compiler, source code, executable, and data to all be kept in memory simultaneously.  Basic's primary benefit was the ability to keep everything in RAM, and once such ability became available in a compiled language there was no longer a reason to tolerate the slowness or semantic limitations of interpreted BASIC.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-05-12T20:37:22.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="490" PostTypeId="2" ParentId="477" CreationDate="2016-05-13T11:37:09.757" Score="7" Body="&lt;p&gt;Tim's answer referencing Marty Goodman offers a good explanation, but not really any options for users today who might need to make this upgrade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 3024 model can be modified with a simple PAL upgrade, available from &lt;a href=&quot;http://www.frontiernet.net/~mmarlette/Cloud-9/Hardware/MPI%20PAL.html&quot; rel=&quot;noreferrer&quot;&gt;Cloud9&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have access to a programmer and the proper GAL, there's information on Coco3.com for another option:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you get a Gray or White Large MPI (both have catalog #26-3024), then the procedure is different – you simply replace the 14L4 PAL with a properly programmed 16V8. You can’t use the equations presented above for a 26-3024. Instead, use these:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Name 26-3024 M.P.I. Upgrade ;&#xA;PartNo GCC-3024.01 ;&#xA;Date 6/1/2010 ;&#xA;Revision 01 ;&#xA;Designer J&amp;amp;R ;&#xA;Company GIMEchip.com ;&#xA;Assembly 26-3024 M.P.I. Upgrade PAL for CoCo 3 ;&#xA;Location U6 ;&#xA;Device g16v8 ;&#xA;/* ***************** INPUT PINS *****************/&#xA;PIN 01 = !FFXX; /* LOW For Any Address Between $FF00-$FFFF */&#xA;PIN [2..9] = [A7..0]; /* CPU A7 – A0 */&#xA;PIN 11 = RW; /* READ = 1, WRITE = 0 */&#xA;PIN 12 = E; /* E-Clock */&#xA;PIN 13 = Q; /* Q-Clock */&#xA;PIN 18 = !CTS; /* Cartridge Select Signal. */&#xA;PIN 19 = !SLENB; /* Input To Disable Device Selection. */&#xA;/* ***************** OUTPUT PINS *****************/&#xA;PIN 14 = !DBEN; /* Enables The Multi-Pak Interface Data Buffer */&#xA;PIN 15 = !IOR; /* Read the Slot Select Latch. */&#xA;PIN 16 = !IOW; /* Write the Slot Select Latch */&#xA;/* ***************** LOGIC EQUATIONS &amp;amp; VARIABLE DEFINITIONS *****************/&#xA;FIELD ADDRESS = [A7..0]; /* */&#xA;LATCH = ADDRESS:[7F]; /* Slot Select Latch@$FF7F */&#xA;IOR = LATCH &amp;amp; FFXX &amp;amp; E &amp;amp; RW; /* Active on $FF7F and E=1 and RW=1 */&#xA;IOW = LATCH &amp;amp; FFXX &amp;amp; E &amp;amp; !RW &amp;amp; !Q; /* Active on $FF7F and E=1 and RW=0 and Q=0 */&#xA;DBEN = (ADDRESS:[40..7F] &amp;amp; FFXX) # SLENB # CTS;/* Active $FF40-$FF7F or SLENB or CTS */&#xA;/* *****************/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The 26-3124 model can be upgraded according to this image from coco3.com using a 74LS10 and some soldering skills:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9XYy3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9XYy3.png&quot; alt=&quot;Little John&amp;#39;s 74LS10 upgrade&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Standard CoCo 3 upgrade for the 26-3124 Multi-Pak Interface. The&#xA;  integrated circuit is a 74LS10 Tripple 3-Input NAND. The trace&#xA;  connecting pin 19 of IC1 to pin 52 of IC6 is severed. This circuit is&#xA;  assembled and connected as indicated in the schematic. This circuit&#xA;  restricts the address range of the M.P.I. data buffer to $FF40-$FF7F.&#xA;  The data buffer is aso enabled on SLENB* and CTS*. BA7 is buffered&#xA;  address line A7.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Once you make this upgrade, your MPI will only be address compatible with the CoCo 3.&lt;/p&gt;&#xA;" OwnerUserId="173" LastEditorUserId="29" LastEditDate="2016-05-15T13:44:14.450" LastActivityDate="2016-05-15T13:44:14.450" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="491" PostTypeId="2" ParentId="463" CreationDate="2016-05-13T13:16:29.223" Score="6" Body="&lt;p&gt;The &lt;em&gt;CPU&lt;/em&gt; companies had contracts with the designers of BASIC (Bill Gates).&#xA;For people designing computers it made sense to use the language they had already paid the license fee for (BASIC).  BASIC was good because it was small and predictable, exactly the thing for a ROM chip of the day.  Every computer needs start instructions, originally stored in ROM, at the lowest bootstrap addresses.&#xA;Since peripheral storage was VERY expensive, and ROM was cheap, it made good sense to use BASIC, for basic programs.&#xA; Also BASIC contained &quot;load&quot; and &quot;save&quot; commands, which could be used interactively by the user and the users permanent storage medium (tapes or drives).  This meant BASIC machines were very flexible, especially before WIMP technology became affordable.&#xA;  Why was it memory addressed? Because that was the cheapest way to do it.  Even simple chips cost a fortune, and were very sensitive to timing and current/heat issues.  The less chips, the &lt;em&gt;far&lt;/em&gt; less difficulty getting a working computer off the production line.  Since early PC's and home computers were going for office desk and home desk market cost was a massive concern.&lt;/p&gt;&#xA;" OwnerUserId="485" LastActivityDate="2016-05-13T13:16:29.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="492" PostTypeId="2" ParentId="8" CreationDate="2016-05-13T14:49:05.933" Score="6" Body="&lt;p&gt;I use this — &lt;strong&gt;though rewired for centre negative&lt;/strong&gt; — and it works well: &lt;a href=&quot;http://www.circuittest.com/rpr-092a2-p5-ac-dc-adapter-9vdc-2-2a.html&quot; rel=&quot;noreferrer&quot; title=&quot;AC/DC Adapter - 9VDC 2.2A&quot;&gt;AC/DC Adapter - 9VDC 2.2A&lt;/a&gt;. Circuit-Test make a &lt;a href=&quot;http://www.circuittest.com/rpr-091a5-n5-ac-dc-adapter-9vdc-1-5a.html&quot; rel=&quot;noreferrer&quot; title=&quot;9VDC 1.5A&quot;&gt;9VDC 1.5A centre negative&lt;/a&gt; unit that should work without rewiring. Maybe get a &lt;a href=&quot;https://www.sparkfun.com/products/11705&quot; rel=&quot;noreferrer&quot; title=&quot;Barrel Jack Power Switch&quot;&gt;Barrel Jack Power Switch&lt;/a&gt; while you're at it, since the Speccy has no power switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm in Canada, so while these units are 110-240 V AC input, the plugs won't work well in the UK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Guitar pedals, although 9V centre negative, are often only 0.25-0.5 A, so wouldn't be able to power a ZX Spectrum reliably.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2016-05-13T14:49:05.933" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="493" PostTypeId="2" ParentId="476" CreationDate="2016-05-13T15:15:50.267" Score="13" Body="&lt;p&gt;Although there were standards for BASIC available — &lt;a href=&quot;http://www.ecma-international.org/publications/files/ECMA-ST-WITHDRAWN/ECMA-55,%201st%20Edition,%20January%201978.pdf&quot;&gt;ECMA-55, January 1978&lt;/a&gt; [PDF], ANSI X3.60-1978 — development timelines were so short for home computers that manufacturers had to scramble for what they could get, but also tweak a few features so a BASIC demo could show off &lt;em&gt;some&lt;/em&gt; of the computer's new features in the showroom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore's BASICs were notoriously feature-free, as Jack Tramiel didn't want to keep paying Microsoft for updates. In the UK, the BBC's education requirements meant that the Acorn BBC micro had to have a really solid BASIC. Millions of computers were sold on the convenient fantasy of &quot;being educational&quot;, so a solid BASIC was important. International projects such as &lt;a href=&quot;https://en.wikipedia.org/wiki/BASICODE&quot;&gt;BASICODE&lt;/a&gt; attempted to standardize on top of all of the variants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only home computer (that wasn't sold as a game console) I know of that didn't use BASIC was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Jupiter_Ace&quot;&gt;Jupiter Ace&lt;/a&gt;. It used &lt;a href=&quot;http://www.forth.org/&quot;&gt;Forth&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2016-05-13T15:15:50.267" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="494" PostTypeId="1" CreationDate="2016-05-13T16:02:41.443" Score="21" ViewCount="1193" Body="&lt;p&gt;Programs written in Apple's Integer BASIC sometimes had bits of machine code embedded in them.  This was more convenient than loading the code separately, especially when the program was loaded from tape.&lt;/p&gt;&#xA;&lt;p&gt;When the program is first loaded, it looks garbled.  For example, the classic APPLE-VISION demo starts like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    0 LOMEM:1800&#xA;    1 HIMEM:8192: POKE 202,165: POKE 203,27:LOMEM:6144:CLR : GOTO 0&#xA; 8264, RUN LOMEM:*2664439008, ^ , RUN , ? ABS *2664439008, ^ , RUN ABS *266438288; RUN ^ , RUN 6164,=58882/42004#2112 24576*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The &lt;code&gt;LIST&lt;/code&gt; command would sometimes go into an infinite loop.  But after the program is first run, the listing looks more normal:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    0 REM  *** APPLE-VISION ***  WRITTEN BY R.J. BISHOP&#xA;   20 DIM A$(51)&#xA;   30 A$=&amp;quot;       BOB BISHOP PRESENTS . . . APPLE-VISION!       &amp;quot;&#xA;   40 CALL -936&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;How does this work, in terms of both the underlying mechanism and the mechanics of developing a program that hides code this way?  e.g. how does one combine the BASIC and machine code portions before saving to disk or tape?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update 1:&lt;/strong&gt; for the curious, a commented disassembly of APPLE-VISION can be found &lt;a href=&quot;https://6502disassembly.com/a2-applevision/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; another program by Bob Bishop, called Bomber, was written entirely in assembly language, but used an Integer BASIC wrapper.  As far as I can tell, this was done solely to make it easier to play the game from cassette tape: you could read it in with a &lt;code&gt;LOAD&lt;/code&gt; command from BASIC, instead of having to drop into the monitor and specify an address range.  Full disassembly of Bomber is &lt;a href=&quot;https://6502disassembly.com/a2-bomber/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2020-08-18T20:23:02.793" LastActivityDate="2021-04-22T02:57:10.970" Title="How were binary subroutines embedded in Integer BASIC programs?" Tags="&lt;apple-ii&gt;&lt;integer-basic&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="495" PostTypeId="1" AcceptedAnswerId="496" CreationDate="2016-05-13T18:16:21.693" Score="33" ViewCount="5901" Body="&lt;p&gt;Old keyboards like the one below seem to have contributed a lot to the design of modern keyboards. So, obviously, some of the keys are familiar because they are on my own average (modern Windows and Mac) keyboards, such as &lt;kbd&gt;space bar&lt;/kbd&gt;, &lt;kbd&gt;tab&lt;/kbd&gt;, &lt;kbd&gt;return&lt;/kbd&gt;, and so on. Assuming that they do the same thing as the keys on modern keyboards, I don't need them explained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what do all the other keys do? And how would you type the other symbols (like &lt;kbd&gt;≥&lt;/kbd&gt; and &lt;kbd&gt;¬&lt;/kbd&gt;) on the main section of keys?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ww3Ff.jpg&quot; alt=&quot;strange keys&quot;&gt;&#xA;&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Space-cadet_keyboard&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Space-cadet_keyboard&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/clupA.jpg&quot; alt=&quot;key fronts&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/c/cd/Space-cadet-closeup.jpg&quot; rel=&quot;noreferrer&quot;&gt;https://upload.wikimedia.org/wikipedia/commons/c/cd/Space-cadet-closeup.jpg&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2016-05-14T21:28:25.837" LastActivityDate="2019-04-05T08:47:38.490" Title="What do the keys on this Symbolics Space Cadet keyboard do?" Tags="&lt;keyboards&gt;&lt;symbolics&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="496" PostTypeId="2" ParentId="495" CreationDate="2016-05-13T21:50:33.813" Score="42" Body="&lt;p&gt;The Space Cadet is a keyboard designed for use with Symbolics' &lt;a href=&quot;https://en.wikipedia.org/wiki/Lisp_machine&quot; rel=&quot;noreferrer&quot;&gt;Lisp Machines&lt;/a&gt;, and many of the extra keys are specific to that use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting from the bottom row:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Hyper&lt;/kbd&gt;, &lt;kbd&gt;Super&lt;/kbd&gt;, &lt;kbd&gt;Meta&lt;/kbd&gt; and &lt;kbd&gt;Ctrl&lt;/kbd&gt; are modifier keys, known as bucky keys; they are equivalent in use to the &lt;kbd&gt;Ctrl&lt;/kbd&gt;, &lt;kbd&gt;Alt&lt;/kbd&gt; and &lt;kbd&gt;Alt Gr&lt;/kbd&gt; on modern keyboards (and to the Windows, context menu, Apple and Option keys). They allow shortcuts to be built using the main keys. You can see their heritage in Emacs, with its many shortcuts involving &lt;kbd&gt;Ctrl&lt;/kbd&gt; and &lt;kbd&gt;Meta&lt;/kbd&gt; (&lt;kbd&gt;Alt&lt;/kbd&gt; or &lt;kbd&gt;Esc&lt;/kbd&gt; on modern keyboards). Many Linux systems use the Windows key as &lt;kbd&gt;Super&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Top&lt;/kbd&gt;, &lt;kbd&gt;Greek&lt;/kbd&gt; (or &lt;kbd&gt;Front&lt;/kbd&gt;) and &lt;kbd&gt;Shift&lt;/kbd&gt; allow the various symbols on the keycaps to be produced. Thus &lt;kbd&gt;M&lt;/kbd&gt; on its own produces &quot;m&quot;, &lt;kbd&gt;Shift&lt;/kbd&gt;&lt;kbd&gt;M&lt;/kbd&gt; produces &quot;M&quot;, &lt;kbd&gt;Top&lt;/kbd&gt;&lt;kbd&gt;M&lt;/kbd&gt; produces &quot;≥&quot;, &lt;kbd&gt;Greek&lt;/kbd&gt;&lt;kbd&gt;M&lt;/kbd&gt; produces &quot;µ&quot; (as indicated on the front of the keycaps). &lt;kbd&gt;Repeat&lt;/kbd&gt; allows keys to be repeated — they didn't repeat by default.&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Mode Lock&lt;/kbd&gt; isn’t used. &lt;kbd&gt;Alt Mode&lt;/kbd&gt; was used on &lt;a href=&quot;https://en.wikipedia.org/wiki/Incompatible_Timesharing_System&quot; rel=&quot;noreferrer&quot;&gt;ITS&lt;/a&gt; and was considered obsolete even when the Space Cadet was designed; it is similar to &lt;kbd&gt;Esc&lt;/kbd&gt; on current systems, and echoed “◊” on SAIL terminals or “$” on ASCII terminals. &lt;kbd&gt;Rub Out&lt;/kbd&gt; is the ancestor of our &lt;kbd&gt;Backspace&lt;/kbd&gt; (erase left). &lt;kbd&gt;Help&lt;/kbd&gt; was supposed to be handled by applications for on-line help (but rarely was).&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;I&lt;/kbd&gt;, &lt;kbd&gt;II&lt;/kbd&gt;, &lt;kbd&gt;III&lt;/kbd&gt; and &lt;kbd&gt;IV&lt;/kbd&gt; were used for quick selection in menus.&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Network&lt;/kbd&gt;, &lt;kbd&gt;Terminal&lt;/kbd&gt; and &lt;kbd&gt;System&lt;/kbd&gt; send escapes to specify which part of the system (as a whole) the user wanted to interact with.&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Status&lt;/kbd&gt; was supposed to ask the system to provide status information for the currently process.&lt;/li&gt;&#xA;&lt;li&gt;The thumb and finger keys weren’t used much if at all; the thumb up and down keys may have been used to answer yes/no questions, but that’s not clear at all. &lt;a href=&quot;https://ml.cddddr.org/info-lispm/msg00302.html&quot; rel=&quot;noreferrer&quot;&gt;The &lt;code&gt;KMOUSE&lt;/code&gt; program&lt;/a&gt; allowed all four keys to be used to move the mouse pointer.&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Macro&lt;/kbd&gt; was intended to provide a keyboard-based macro system, but it saw little use in practice.&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Quote&lt;/kbd&gt; allows escaping other keys, so they can be sent rather than interpreted — a bit like the &lt;kbd&gt;Esc&lt;/kbd&gt; key on Atari 8-bit keyboards, or &lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;V&lt;/kbd&gt; in current shells.&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Over Strike&lt;/kbd&gt; moves the cursor left without erasing, allowing characters to be superimposed. &lt;kbd&gt;Line&lt;/kbd&gt; moved the cursor down a line (line feed).&lt;/li&gt;&#xA;&lt;li&gt;The two &lt;kbd&gt;Clear&lt;/kbd&gt; keys clear the current input field and the whole screen respectively.&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Hold Output&lt;/kbd&gt; and &lt;kbd&gt;Stop Output&lt;/kbd&gt; provide output flow control (similar to &lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;Q&lt;/kbd&gt; and &lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;S&lt;/kbd&gt;).&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Abort&lt;/kbd&gt;, &lt;kbd&gt;Break&lt;/kbd&gt;, &lt;kbd&gt;Resume&lt;/kbd&gt; and &lt;kbd&gt;Call&lt;/kbd&gt; provide process and function control; for example &lt;kbd&gt;Call&lt;/kbd&gt; suspends the current process on ITS, in a similar fashion to &lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;Z&lt;/kbd&gt; in job-capable shells.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With the &lt;kbd&gt;Greek&lt;/kbd&gt; key, these keyboards allow all of the &lt;a href=&quot;https://en.wikipedia.org/wiki/APL_%28programming_language%29&quot; rel=&quot;noreferrer&quot;&gt;APL&lt;/a&gt; character set to be entered easily. The modifier keys can be combined: &lt;kbd&gt;Greek&lt;/kbd&gt;&lt;kbd&gt;L&lt;/kbd&gt; produces &quot;λ&quot; as you'd expect, and &lt;kbd&gt;Shift&lt;/kbd&gt;&lt;kbd&gt;Greek&lt;/kbd&gt;&lt;kbd&gt;L&lt;/kbd&gt; produces &quot;Λ&quot;. Likewise the bucky keys can be combined, so &lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;Alt&lt;/kbd&gt;&lt;kbd&gt;A&lt;/kbd&gt; is meaningful — this is still the case on modern keyboards, the obvious example being &lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;Alt&lt;/kbd&gt;&lt;kbd&gt;Delete&lt;/kbd&gt;. The Greek-style behaviour lives on too; on my Linux systems with a French keyboard layout, &lt;kbd&gt;Alt Gr&lt;/kbd&gt;&lt;kbd&gt;L&lt;/kbd&gt; produces &quot;ŀ&quot;, and &lt;kbd&gt;Shift&lt;/kbd&gt;&lt;kbd&gt;Alt Gr&lt;/kbd&gt;&lt;kbd&gt;L&lt;/kbd&gt; produces &quot;Ŀ&quot;. On the Space Cadet, the modifier keys were specifically laid out so they could be chorded single-handedly using either hand: you could press &lt;kbd&gt;Ctrl&lt;/kbd&gt; and &lt;kbd&gt;Alt&lt;/kbd&gt; with your left hand, and &lt;kbd&gt;L&lt;/kbd&gt; with your right, or vice-versa &lt;em&gt;e.g.&lt;/em&gt; for &lt;kbd&gt;Q&lt;/kbd&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Holding down both &lt;kbd&gt;Ctrl&lt;/kbd&gt; keys and both &lt;kbd&gt;Meta&lt;/kbd&gt; keys allowed the system to be rebooted: with those four keys depressed, pressing &lt;kbd&gt;Return&lt;/kbd&gt; would warm-boot the system, and &lt;kbd&gt;Rubout&lt;/kbd&gt; would cold-boot it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll find more information on &lt;a href=&quot;https://web.archive.org/web/20150112030657/http://home.comcast.net/~mmcm/kbd/SpaceCadet.html&quot; rel=&quot;noreferrer&quot;&gt;Mike McMahon's page on the Space Cadet&lt;/a&gt; and in John Kulp's &lt;a href=&quot;https://web.archive.org/web/20150910154424/http://home.comcast.net/~mmcm/kbd/lmdoc_kbdpro.3.txt&quot; rel=&quot;noreferrer&quot;&gt;design notes&lt;/a&gt; for the keyboard, and in &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/symbolics/LM-2/Operating_the_Lisp_Machine.pdf&quot; rel=&quot;noreferrer&quot;&gt;the Lisp Machine’s operating manual&lt;/a&gt; (page 36). Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4/mark&quot;&gt;Mark&lt;/a&gt; and &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/320/mnem&quot;&gt;mnem&lt;/a&gt; for further information provided in the comments, to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/142/lars-brinkhoff&quot;&gt;Lars Brinkhoff&lt;/a&gt; for finding &lt;code&gt;KMOUSE&lt;/code&gt;, to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/12166/vxid&quot;&gt;vxid&lt;/a&gt; for finding the operating manual, and to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/12229/devon&quot;&gt;devon&lt;/a&gt; for correcting a number of misattributed keys!&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-04-05T08:47:38.490" LastActivityDate="2019-04-05T08:47:38.490" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="497" PostTypeId="2" ParentId="481" CreationDate="2016-05-14T06:25:10.677" Score="0" Body="&lt;p&gt;Doxbox for Mac would work. I have Dosbox for PC (Windows 10). I love it and use it run everything from 1980 or later. I have GW-Basic, Turbo Pascal, Old games like Wheel of Fortune and Jeopardy from the early 90's. You can run off a flash drive or hard drive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;DosBox 0.74&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing you try..Something my uber extreme computer geek of a son did. Partitioned the drive and installed windows 7 on one, and Linux on the other. Apparently it worked so don't quote me on it.&lt;/p&gt;&#xA;" OwnerDisplayName="user507" LastEditorDisplayName="user507" LastEditDate="2016-05-25T00:54:44.207" LastActivityDate="2016-05-25T00:54:44.207" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="498" PostTypeId="2" ParentId="459" CreationDate="2016-05-14T15:26:05.343" Score="19" Body="&lt;p&gt;Apple has not released sales figures for their early systems, so your question cannot be answered accurately. I will therefore do so inaccurately. ; - )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jeremy Reimer published &lt;a href=&quot;http://jeremyreimer.com/m-item.lsp?i=137&quot; rel=&quot;nofollow noreferrer&quot;&gt;historical computer sales data&lt;/a&gt; for &lt;a href=&quot;http://arstechnica.com/features/2005/12/total-share/&quot; rel=&quot;nofollow noreferrer&quot;&gt;an article he wrote&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting with that data and using tidbits from other (often conflicting) sources, I derived the following highly questionable figures which I've also &lt;a href=&quot;https://docs.google.com/spreadsheets/d/15XJi00e7uswygc_j6boZoR8C5hK6YoZwa8vBCxnwVFE/edit#gid=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;shared in Google Docs&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Apple II          64,700&#xA;Apple II Plus    545,500&#xA;Apple //e      4,250,000&#xA;Apple //c        450,000&#xA;Apple //c Plus   200,000&#xA;Apple IIGS       979,000&#xA;Total          6,489,200&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The total is more than the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia estimate&lt;/a&gt; of between 5 - 6 million units. Some notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Apple II/II Plus figures were calculated from Reimer's totals by naively assuming a 50/50 split for 1979 and 1980. This doesn't affect the combined totals, but gets the II total close to the highest serial found (see the &lt;a href=&quot;https://docs.google.com/spreadsheets/d/15XJi00e7uswygc_j6boZoR8C5hK6YoZwa8vBCxnwVFE/edit#gid=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Google Doc&lt;/a&gt;). Note that there is a well-known A2S1 serial number jump from the early 40,000s to the 60,000s.&lt;/li&gt;&#xA;&lt;li&gt;BYTE magazine states the II Plus sold &lt;a href=&quot;https://archive.org/stream/byte-magazine-1983-03-rescan/1983_03_BYTE_08-03_Mass_Storage_djvu.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;500,000 units&lt;/a&gt;, though 750,000 is given elsewhere.&lt;/li&gt;&#xA;&lt;li&gt;A few morsels of //e sales data were provided by the always excellent &lt;a href=&quot;http://www.filfre.net/2012/12/shiny-and-exciting-vs-dull-and-boring/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Digital Antiquarian&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The //c and //c Plus figures are perhaps the largest unknown. It's not clear if Reimer's data includes these systems. In particular 1990 and 1991 show no evidence of the //c Plus exit, so I've included them separately.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.oldcomputers.net/appleii.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Some&lt;/a&gt; &lt;a href=&quot;http://www.macmothership.com/timeline.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;sources&lt;/a&gt; say the //c sold 400,000 in its first year, whereas the &lt;a href=&quot;http://www.filfre.net/2013/07/a-computer-for-every-home/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Digital Antiquarian&lt;/a&gt; states it &quot;averaged just 100,000 sales per year over its four years&quot;. This matches the tone of the book &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/0615278841&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;West of Eden: The End of Innocence at Apple Computer&quot;&lt;/a&gt; which chronicles that in summer 1984 &quot;Panic was building over the IIc's performance ... it was dead in the water&quot;.&lt;/li&gt;&#xA;&lt;li&gt;I have no data on //c Plus sales so I've naively assumed it sold the same yearly as the //c.&lt;/li&gt;&#xA;&lt;li&gt;The IIGS data comes from &lt;a href=&quot;http://www.brutaldeluxe.fr/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Brutal Deluxe&lt;/a&gt;'s &lt;a href=&quot;https://docs.google.com/spreadsheets/d/1UB9TyF1h3mDyUXQgGm3Z7gxENAGOTFwL1fwLySoBRyU/edit#gid=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIgs Serial Number project&lt;/a&gt;. Although their estimated total is 2.8 million, a former manager of the Apple II division has stated categorically that &lt;a href=&quot;https://docs.google.com/spreadsheets/d/1UB9TyF1h3mDyUXQgGm3Z7gxENAGOTFwL1fwLySoBRyU/edit#gid=11&quot; rel=&quot;nofollow noreferrer&quot;&gt;no more than 1 million were sold&lt;/a&gt;. Their data is useful for a rough &lt;a href=&quot;https://docs.google.com/spreadsheets/d/1UB9TyF1h3mDyUXQgGm3Z7gxENAGOTFwL1fwLySoBRyU/edit#gid=8&quot; rel=&quot;nofollow noreferrer&quot;&gt;sales per year&lt;/a&gt; pattern if scaled down to total no more than 1 million - which I have done. The yearly values have also been rounded down. Although the figures aren't accurate, they confirm the next point:&lt;/li&gt;&#xA;&lt;li&gt;The IIGS is almost certainly not included in Reimer's data, as the estimated IIGS sales for 1988 exceed Reimer's total for that year.&lt;/li&gt;&#xA;&lt;li&gt;You didn't ask, but &quot;&lt;a href=&quot;http://apple2history.org/history/ah02/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Two hundred Apple-1 computers were manufactured&lt;/a&gt;, and all except twenty-five of them sold over a period of ten months.&quot; Only 66 are known to &lt;a href=&quot;http://www.willegal.net/appleii/apple1-originals.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;still exist&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Again not really relevant, but Apple III and III Plus sales estimates vary from &lt;a href=&quot;http://www.oldcomputers.net/appleii.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;65,000&lt;/a&gt; to &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/0615278841&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;85,000 units by April 1984&quot;&lt;/a&gt;. (The latter source is probably more credible.)&lt;/li&gt;&#xA;&lt;li&gt;Reimer's figures obviously do not include the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_IIe_Card&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIe Card&lt;/a&gt; because it was sold until 1995.&lt;/li&gt;&#xA;&lt;li&gt;An important corollary is that according to my collated data, the Apple II line propped up Apple during the the first 4 years of the Mac era from 1984-1987. Mac sales finally eclipsed Apple II sales in 1988 (not 1987 as suggested by Reimer's data).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2018-04-19T03:48:48.517" LastActivityDate="2018-04-19T03:48:48.517" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="499" PostTypeId="1" CreationDate="2016-05-14T16:04:32.897" Score="15" ViewCount="712" Body="&lt;p&gt;Many commonplace cassette recorders in the 1970s and 1980s were capable of reading or writing two tracks at once (stereo).  While that wasn't universal (portable cassette recorders were often monaural, and probably used a single-coil record/playback head) stereo recorders were hardly rare.  Further, at least one computer company (Atari) supplied a cassette recorder which used a stereo playback head.  Additionally, one of the primary limiting factors for cassette data rates is that the tape only moves at 1.875&quot;/second but the motor speed on many cassette drives could easily be increased merely by changing a resistor or other such component.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would seem, then, that cassette drives that were customized for, and sold by, computer manufacturers should easily have been capable of handling data much faster than would be possible recording a single track at 1.875&quot;/second, merely by adding some extra record/play electronics and by changing the value of a speed-control component.  I know the Coleco Adam used a rather fancy and sophisticated tape drive, but from what I understand that didn't use standard cassettes.  Were there any 1970s-1980s computers that used tape drives to record more than one data track, or record data at a speed faster than 1.875&quot;/second?&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-05-16T20:25:06.077" Title="Did any microcomputers back in the day accellerate standard-cassette performance" Tags="&lt;cassette-tape&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="6" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="500" PostTypeId="2" ParentId="159" CreationDate="2016-05-14T16:24:19.670" Score="5" Body="&lt;p&gt;If one doesn't need particularly high data rates, it's possible to implement data-to-audio and audio-to-data routines in a very small amount of code.  To store a &quot;1&quot;, generate 250us of high followed by 250us (e.g.) of low; to store a &quot;0&quot;, store 500us of high followed by 500us of low.  Note that some tape-drives' electronics, which are designed for analog signals, will try to adjust the signal try receive so that it's high about half the time and low about half the time, and the signal may get badly distorted (and thus become illegible) if the high and low times aren't close to being balanced, which is why tape formats seem to waste half the storage capacity writing each bit twice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If one is willing to use more complicated code for recording and playback, it's possible to use a mixture of different pulse lengths, encoded in such a fashion that the high and low times remain balanced.  Such approaches can allow more than twice as much information to be stored as the simple straightforward technique, but require more code to read or write data.  For a computer to include built-in support would have required that manufacturers devote hundreds of bytes of ROM to that purpose that could otherwise be used for other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For programs shipped on pre-recorded tapes, however, the size of the record/playback routines is not an issue.  The data can be written on the tape using specialized equipment, making the size of the record routines irrelevant [if the encoding is one that couldn't be written by a standard computer, that would actually be a bonus].  The size of playback code is also not much of an issue.  Even if playback code would take 1024 bytes, it could be used to load all but 1024 bytes of RAM; if it would be necessary to load even more than that, the last little bit could be loaded using a slower but smaller routine (or perhaps the built-in one).&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2016-05-14T21:51:32.290" LastActivityDate="2016-05-14T21:51:32.290" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="501" PostTypeId="1" AcceptedAnswerId="507" CreationDate="2016-05-14T16:55:53.870" Score="14" ViewCount="236" Body="&lt;p&gt;On a DEC VT102, suppose you have a line where all 80 characters (in particular, the rightmost character) are in reverse video. You then move the cursor to the start of that line and use DCH (ESC [ P) to erase one character, thereby opening up a space at the right hand end of the line. Is that space reverse video or not? Does it matter what the current character attributes are?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My reading of the VT102 user guide (&lt;a href=&quot;http://vt100.net/docs/vt102-ug/chapter5.html&quot;&gt;http://vt100.net/docs/vt102-ug/chapter5.html&lt;/a&gt;) suggests the space opened up at the right hand end of the line should be reverse video, as the guide says: &quot;This creates a space character at right margin. This character has same character attribute as the last character moved left.&quot; and surely the last character moved left is the character which was formerly in the rightmost column, which was reverse video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experiments show that xterm and gnome-terminal don't do this. What does a real VT102 do in this case?&lt;/p&gt;&#xA;" OwnerUserId="516" LastActivityDate="2016-05-14T20:56:40.117" Title="What happens on a VT102 when you use delete character on a reverse video line?" Tags="&lt;dec&gt;&lt;terminal&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="502" PostTypeId="2" ParentId="499" CreationDate="2016-05-14T17:03:26.093" Score="3" Body="&lt;p&gt;The Philips P2000's mini-cassette drives were &lt;a href=&quot;http://computermuseum.50megs.com/brands/p2000.htm&quot; rel=&quot;nofollow&quot;&gt;10x speed&lt;/a&gt;. Do mini-cassettes count?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, there were tape recorder mods like the &lt;a href=&quot;http://www.page6.org/archive/issue_24/page_30.htm&quot; rel=&quot;nofollow&quot;&gt;RamBIT&lt;/a&gt; for higher speeds. And on various computers you could POKE values or use special software to load and save at higher baud rates, usually up to 2400 baud (600 baud was standard), depending on the quality of the tape and what speed you've set your recorder to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And &lt;a href=&quot;http://web.archive.org/web/20071130010325/http://personal.auna.com/casariche/k7zx4/k7zx4.htm&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; is software that allows a Spectrum to load from the cassette port at up to 27,428 baud.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-05-14T17:03:26.093" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="503" PostTypeId="1" AcceptedAnswerId="664" CreationDate="2016-05-14T17:10:04.840" Score="29" ViewCount="1496" Body="&lt;p&gt;The Apple 2's disk drive controller and 5¼&quot; floppy disks have the following metrics:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The disks is spun at (roughly) 300 RPM (Revolutions per Minute), which means it takes = 1000 ms/sec / (300 RPM / 60 sec/min) = ~200 ms / revolution,&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Beneath Apple DOS&lt;/em&gt; (fourth printing) &lt;a href=&quot;https://archive.org/stream/Beneath_Apple_DOS_OCR#page/n13/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Figure 3.3&lt;/a&gt; states it takes 4 μs (microseconds) to read 2 consecutive bits off the disk. This &lt;a href=&quot;http://www.metafilter.com/114962/jmp-TRIGSPIKES#4301468&quot; rel=&quot;nofollow noreferrer&quot;&gt;metafilter discussion&lt;/a&gt; also mentions this.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Beneath Apple DOS&lt;/em&gt; Figure 3.1, shows track zero is the outermost, but sadly doesn't give any dimensions. Loose empirical measurements show:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Track  0 (roughly) has a radius of 5&quot;/2 = ~ 2.5&quot;&lt;/li&gt;&#xA;&lt;li&gt;Track 39 (roughly) has a radius of 1.5&quot;/2 = ~ 0.75&quot; (Center hole diameter measured at ~1½&quot;)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I've seen 6,250 nibbles given as the (theoretical) maximum number of nibbles on a track (encoded with 6+2) but never an explanation of where this number comes from. (Beneath Apple DOS on page 3-7 briefly mentions 50,000 bits but doesn't provide any details oh this number was calculated.) It is straight forward to see that a track has = 200 ms/revolution * 1000 μs/ms / 4 μs/bit = 50,000 bits / (8 bits/byte) = 6,250 nibbles/track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;However&lt;/strong&gt;, since the &lt;em&gt;radius&lt;/em&gt; (and therefore the circumference) of the outermost and innermost track differ, shouldn't track 0 be able to hold more bits then track 39?  The circumference (C = 2 * π * r) for tracks:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Track 0 = 2*π*2.625 = ~15.7&quot;&lt;/li&gt;&#xA;&lt;li&gt;Track 39 = 2*π*0.75 = ~4.7&quot; &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;shows track 0 has a &lt;em&gt;whole&lt;/em&gt; lot more &quot;space&quot; then track 39.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This naturally raises a few questions. Namely,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Does the Apple 2 disk utilize CLV (&lt;em&gt;Constant Linear Velocity&lt;/em&gt;) or CAV (&lt;em&gt;Constant Angular Velocity&lt;/em&gt;)? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Assuming the same 4  μs/bit but the &lt;em&gt;other&lt;/em&gt; speed type then what &lt;strong&gt;would be&lt;/strong&gt; the maximum number of nibbles stored on an Apple II disk for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Track 0, and&lt;/li&gt;&#xA;&lt;li&gt;Track 39&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;respectively?&lt;/p&gt;&#xA;" OwnerUserId="31" LastEditorUserId="3290" LastEditDate="2020-05-30T07:19:45.093" LastActivityDate="2021-03-19T06:27:12.807" Title="Absolute maximum number of nibbles on an Apple II floppy disk track?" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;&lt;floppy-drive&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="505" PostTypeId="2" ParentId="494" CreationDate="2016-05-14T19:06:58.517" Score="2" Body="&lt;p&gt;I can't speak directly to Apple Integer BASIC, but I know that TRS-80 BASIC programs could encode machine language in DATA statements (as in Leo Christopherson's &lt;a href=&quot;http://www.dnull.com/demon/&quot; rel=&quot;nofollow&quot;&gt;Android NIM&lt;/a&gt;) or even in literal strings. A string containing machine code would include lots of non-printing characters that would do things like moving the cursor backward or up, or clearing the screen, so the listing would look garbled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the program shows up normally after it's run, that probably indicates that it's self-modifying; again, the Android NIM page above mentions this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for how to do it: You &lt;em&gt;could&lt;/em&gt; write code in assembly language, run it through an assembler, and then insert the machine code into strings or data statements, but these machines were so small and simple that an ambitious programmer could compose machine code directly.&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2016-05-14T19:06:58.517" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="506" PostTypeId="2" ParentId="499" CreationDate="2016-05-14T20:31:08.640" Score="19" Body="&lt;p&gt;The Sprint cassette player/recorder, specially designed for the ZX Spectrum, allowed 4X load and save speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bAomF.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bAomF.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It works by speeding up the tape four times the standard playing speed. It is meant to load programs originally recorded at the Spectrum ROM standard speed (1500 bps). It provides a shadow ROM that pages in when the CPU starts executing a SAVE or LOAD routine. The shadow ROM mimics the behaviour of a LOAD or SAVE, but using their own routines. Many units had an after-market modification, that allowed the Sprint to be disconnected from the bus in order to improve compatibility with other peripherals, like the Interface 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't use the audio connectors (EAR/MIC), but it talks directly to the CPU through the expansion port. Therefore, the Sprint has to have electronics to clean and digitize the signal, making a volume control not neccesary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here you have the disassembly of the 512 byte Sprint ROM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.zxprojects.com/images/stories/sprint/rom_sprint.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.zxprojects.com/images/stories/sprint/rom_sprint.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To ease the disassembly process, I have assumed that the 512 byte block is present at address &lt;code&gt;0400h&lt;/code&gt; to &lt;code&gt;05FFh&lt;/code&gt;. This is because the starting points of the original &lt;code&gt;SAVE&lt;/code&gt; and &lt;code&gt;LOAD&lt;/code&gt; routines are at &lt;code&gt;04C2h&lt;/code&gt; and &lt;code&gt;0556h&lt;/code&gt; respectively, so they fall entirely into this 512-byte block (as expected).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a &lt;code&gt;JP 4&lt;/code&gt; instruction right at the beginning of the ROM (after an &lt;code&gt;EI&lt;/code&gt; instruction). As this block is also at &lt;code&gt;0000h&lt;/code&gt;, the &lt;code&gt;JP 4&lt;/code&gt; instruction merely jumps to the next instruction, which outputs a 0 into port &lt;code&gt;BFh&lt;/code&gt;. I think this unpages the Sprint ROM, and the next instruction executed, already from the main ROM, begins at &lt;code&gt;0008h&lt;/code&gt;, the ERROR restart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way: this ROM (and thus, the device) uses these ports:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;BFh&lt;/code&gt;. Write-only. The ROM only writes 00h here. I think it's for disabling the Sprint ROM&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;7Fh&lt;/code&gt;. Write-only. The ROM writes 00h or 80h here. It's the new &quot;MIC&quot; port, bit 7.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;FFh&lt;/code&gt;. Read-only. &quot;EAR&quot; port, bit 7. Decoded bit value, bit 0&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lSTjH.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lSTjH.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The internals of the Sprint seem to work according to patent number &lt;strong&gt;GB2164527A&lt;/strong&gt; or &quot;High speed cassette tape player&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The device actually decodes FSK, so the value at bit 7 of port &lt;code&gt;FFh&lt;/code&gt; is not the current state of the &quot;EAR&quot; input, as in normal loaders, but the actual bit of the current loading byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, as the patent states, there no need for tight loops, as the time measuring is performed by a monostable, which is reset to 0 on each positive edge of the incoming signal. The computer has to keep reading the monostable value while it waits until the next positive edge. A polarity correction circuit ensures that the edges are right regardless of the polarity the tape were recorded with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The monostable is configured so it turns to '1' after a specific period of time. Time that is roughly 3/4 times the period of a '1' bit in FSK (remember that the '1' bit lasts double the time than a '0' bit). So if a '1' is currently playing, the monostable will switch to '1' and that will be the value read by the computer, but if a '0' is playing, the next positive edge will happen long before the monostable switchs to '1', hence a '0' will be read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By analysing the source code, it is likely that port &lt;code&gt;FFh&lt;/code&gt; offers two things: the current state of the incoming signal, at bit 7, needed to track the pilot tone at the first part of the loading routine, and to detect edges in the second part. The current value of the monostable, that is, the bit after the FSK decoding process, seems to be at bit 0. The routine reads port FFh, stores bit 0 into the carry with a RRA instruction, some instructions after that, the routine retrieves the bit again into H using the instruction RL H.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ROM:0492 loc_492:&#xA;ROM:0492                 dec     l&#xA;ROM:0493                 jr      z, loc_4A8&#xA;ROM:0495                 in      a, (c)&#xA;ROM:0497                 jp      m, loc_492  &#xA;;loops while the pulse is high, so it exits &#xA;;just after a positive to negative edge has ocurred&#xA;&#xA;ROM:049A&#xA;ROM:049A loc_49A:&#xA;ROM:049A                 dec     l&#xA;ROM:049B                 jr      z, loc_4A8&#xA;ROM:049D                 rra&#xA;ROM:049E                 in      a, (c)&#xA;ROM:04A0                 jp      p, loc_49A  &#xA;;loops while the pulse is low, so it exists just after &#xA;;a negative to positive edge has ocurred. The carry&#xA;;bit holds the value of bit 0 read in the previous IN&#xA;;operation, as at the precise moment a falling edge&#xA;;happens, the monostable is reset to 0.&#xA;&#xA;ROM:04A3                 rl      h  ;load the bit into the H register.&#xA;ROM:04A5                 jr      nc, loc_482&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This explains why I have seen no tight loops, but some NOP's inside the saving and loading loop. The computer uses timming loops to detect the pilot tone, but the monostable for actual byte loading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;(the following parragraphs were written after a more careful read of the new &lt;code&gt;LOAD&lt;/code&gt; routine was made)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I'd like to give some details of what I think it's the very heart of the loading routine, and the code that shows all the magic that the SPRINT cassette offers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What this tape player implements is no more and no less than a converter from an asynchronous FSK coded signal to a synchronous 1-bit serial line. The &lt;code&gt;DATA&lt;/code&gt; bit is the monostable bit (bit 0 of port &lt;code&gt;FFh&lt;/code&gt;) and the &lt;code&gt;CLOCK&lt;/code&gt; bit is what we have previously called the &quot;signal&quot; bit (bit 7 of port FFh, which gives us the actual pulses present into the tape). As we stated, the conversion is performed in hardware, and &lt;code&gt;DATA&lt;/code&gt; is valid just before a negative to positive transition at &lt;code&gt;CLOCK&lt;/code&gt; happens. The byte loading routine that follows, just have to wait for this situation, taking into account that the signal flow might be interrupted at any time, so timeouts have to be provided to not to hang the computer into an endless loop because of an interrupted operation.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;Registers used:&#xA;;C = 0FFh (for the IN instruction)&#xA;;BC' = 1601h. C is xored with B at each loop. The result is &#xA;;outputted to FEh, so these two values provides visual&#xA;;and audio feedback of the loading process to the user.&#xA;;H = holds the byte that is being read from tape. First bit&#xA;;read is MSb.&#xA;;L = timeout value for waiting an edge.&#xA;&#xA;;On &quot;normal&quot; exit: H = byte loaded from tape. Carry set.&#xA;&#xA;ROM:0480 LoadOneByte:&#xA;ROM:0480                 ld      h, 1  ;Mark bit 0 with 1. When H is filled&#xA;                                       ;this '1' goes to the carry bit,&#xA;                                       ;signaling that the byte is completed.&#xA;ROM:0482 NextBit:&#xA;;--------------------------------------------------------------&#xA;; BREAK CHECKING&#xA;ROM:0482                 ld      a, 7Fh&#xA;ROM:0484                 in      a, (0FEh)  ;read SPACE.&#xA;ROM:0486                 rra&#xA;ROM:0487                 jr      nc, TotalExit  ;if pressed, early exit.&#xA;;--------------------------------------------------------------&#xA;; BORDER AND SPEAKER HANDLING&#xA;ROM:0489                 exx&#xA;ROM:048A                 ld      a, c&#xA;ROM:048B                 xor     b&#xA;ROM:048C                 ld      c, a&#xA;ROM:048D                 out     (0FEh), a&#xA;ROM:048F                 exx&#xA;&#xA;ROM:0490                 ld      l, 1Eh  ;timeout for waiting for an edge.&#xA;;--------------------------------------------------------------&#xA;; LOOP FOR WAITING A POSITIVE TO NEGATIVE EDGE.&#xA;ROM:0492 WaitFor0:&#xA;ROM:0492                 dec     l  ;update timeout value&#xA;ROM:0493                 jr      z, TotalExit  ;if timeout, early exit.&#xA;ROM:0495                 in      a, (c)  ;reads clock and monostable&#xA;ROM:0497                 jp      m, WaitFor0  ;loops while clock is '1'&#xA;;--------------------------------------------------------------&#xA;; LOOP FOR WAITING A NEGATIVE TO POSITIVE EDGE.&#xA;ROM:049A WaitFor1:&#xA;ROM:049A                 dec     l   &#xA;ROM:049B                 jr      z, TotalExit&#xA;ROM:049D                 rra   ;stores last monostable value read into carry.&#xA;ROM:049E                 in      a, (c)  ;reads clock and monostable&#xA;ROM:04A0                 jp      p, WaitFor1  ;loops while clock is '0'&#xA;;--------------------------------------------------------------&#xA;&#xA;ROM:04A3                 rl      h  ;load monostable value into H&#xA;ROM:04A5                 jr      nc, NextBit  ;if H is not full, go &#xA;                                              ;for the next bit.&#xA;ROM:04A7                 ret&#xA;&#xA;ROM:0535 TotalExit:&#xA;ROM:0535                 pop     hl  ;discard return value for this routine&#xA;ROM:0536                 xor     h  ;clears carry?&#xA;ROM:0537                 ret  ;return to the caller of the main load routine.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here you have a live demonstration of the Sprint, loading a copy of Jet Pac, previously recorded in a standard cassette at the ROM speed:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=ofBmvjuuIBg&quot; rel=&quot;noreferrer&quot;&gt;http://www.youtube.com/watch?v=ofBmvjuuIBg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(FINAL NOTE: this answer is a copy of an answer I gave at the WOS forums about 5 years ago. The pictures are from my own Sprint cassette. I've copied it for the sake of preservation, in case the forum vanishes or something. The link to my answer, along with comments from other fellow WOSers, is here: &lt;a href=&quot;http://www.worldofspectrum.org/forums/discussion/comment/554708/#Comment_554708&quot; rel=&quot;noreferrer&quot;&gt;http://www.worldofspectrum.org/forums/discussion/comment/554708/#Comment_554708&lt;/a&gt; )&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-05-14T21:08:29.113" LastActivityDate="2016-05-14T21:08:29.113" CommentCount="24" ContentLicense="CC BY-SA 3.0" />
  <row Id="507" PostTypeId="2" ParentId="501" CreationDate="2016-05-14T20:56:40.117" Score="9" Body="&lt;p&gt;I can only provide my memories of a dozen or so years of programming for these DEC terminals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 'new' character at the right hand end of the screen &lt;em&gt;is&lt;/em&gt; inverse video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I recall correctly, on the VT320 onwards there was a configuration setting to change this, such that it would appear not inverted. &lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-05-14T20:56:40.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="508" PostTypeId="2" ParentId="503" CreationDate="2016-05-14T21:10:31.860" Score="11" Body="&lt;p&gt;Apple ][ used an ordinary disk transport and fixed bit-rate in the controller. &#xA; In order to fit more bits on the outer track it would need to vary the spin rate of the disk so that the controller had time to put the extra bits on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CD drives use variable spin rate, but floppy disks (mostly) use a fixed spin rate (like gramophone records).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early Apple Macintosh's used a custom disk transport with variable spin rate, so it could fit more data on the outer tracks of the disk, getting 800K on a &quot;720K&quot; (3.5&quot; DSDD) floppy. &lt;/p&gt;&#xA;" OwnerUserId="520" LastEditorUserId="2081" LastEditDate="2017-08-07T17:34:52.590" LastActivityDate="2017-08-07T17:34:52.590" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="509" PostTypeId="2" ParentId="494" CreationDate="2016-05-14T21:22:27.353" Score="9" Body="&lt;p&gt;Generally, this involves some very careful work, where you overwrite part of the tokenized BASIC program with the binary data, or add the binary data to the tokenized BASIC code while carefully adjusting the counters showing where things are located in the code. It's a tricky process and I never thought it was worth the trouble, given how easy it is to mess up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It does make it harder to edit the BASIC code, since it becomes problematic for the BASIC interpreter to revise the code as you make changes when it can't understand the &quot;tokenized code&quot; which is actually binary data. That makes it a crude copy protection scheme both in terms of obfuscating the code and in terms of making it harder to change the code without damaging it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have the details on how to pull this off handy; it can be figured out by looking at the internal format of the tokenized BASIC code, though. Once you know how Integer BASIC (and Applesoft, for that matter) store their code, you can start to manipulate it to do pretty clever things. It takes patience and practice though.&lt;/p&gt;&#xA;" OwnerUserId="72" LastActivityDate="2016-05-14T21:22:27.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="510" PostTypeId="5" CreationDate="2016-05-14T21:36:56.600" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-14T21:36:56.600" LastActivityDate="2016-05-14T21:36:56.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="511" PostTypeId="4" CreationDate="2016-05-14T21:36:56.600" Score="0" Body="For questions about Symbolics, Inc. and its hardware or software products." OwnerUserId="462" LastEditorUserId="462" LastEditDate="2016-05-17T22:42:16.237" LastActivityDate="2016-05-17T22:42:16.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="512" PostTypeId="2" ParentId="463" CreationDate="2016-05-15T08:14:14.233" Score="5" Body="&lt;h1&gt;&amp;quot;Why was BASIC built into so many operating systems?&amp;quot;&lt;/h1&gt;&#xA;&lt;p&gt;Because it was the popular choice. It's not like the systems that didn't include &lt;code&gt;BASIC&lt;/code&gt; didn't have a &lt;code&gt;BASIC&lt;/code&gt;-alternative. Every operating system has functionality that is hard-coded into it (like the boot process) and parts that can be programmed by the user (like startup scripts and scheduled tasks). To execute code that isn't known at OS-compile-time you need some kind of system to parse and execute commands. When creating an OS you define a set of commands that the user can give, &lt;code&gt;BASIC&lt;/code&gt; is nothing more that a pre-defined set of commands. It was so popular because it was easy to learn, functioned well in many different environments and catered to the needs of most computer users at the time (and still).&lt;/p&gt;&#xA;&lt;p&gt;Think of &lt;code&gt;Bash&lt;/code&gt; (or &lt;code&gt;sh&lt;/code&gt;, it's predecessor), it basically fills the same role that &lt;code&gt;BASIC&lt;/code&gt; did for a lot of systems. You wouldn't wonder why so many *nix systems include &lt;code&gt;Bash&lt;/code&gt; into the OS, it's an integral part of it.&lt;/p&gt;&#xA;" OwnerUserId="525" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-05-15T08:14:14.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="513" PostTypeId="2" ParentId="159" CreationDate="2016-05-15T08:19:50.213" Score="4" Body="&lt;p&gt;Actually, in that case, no fancy algorithm changes were used - the tape recorder was literally &quot;overclocked&quot; - frequency of interrupts handling communication with the tape recorder changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found &lt;a href=&quot;http://tajemnice.atari8.info/1-2_93/1-2_93_brs.html&quot; rel=&quot;nofollow&quot;&gt;a program&lt;/a&gt; that allowed to override speed on the standard C: handler. It allows operation at up to 1400 baud, but as the author writes, the ability to use higher speed is &quot;an individual property of each tape recorder and requires high-quality tapes.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me translate the segment of the article that addresses how the program actually works.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For the curious: After being loaded, &quot;Selector&quot; searches hatabs for the address of the C: handler, and basing on it, it creates its own, with modified &quot;OPEN&quot; and CLOSE&quot; procedures. [note, read/write procedures are umodified! --SF.] New table address is attached to the standard handler, so it doesn't ocupy extra space. The speedup is based on modification of the serial bus interrupt vserini and corresponding setting of the POKEY work frequency registers for duration of the transmission. The interrupt change occurs only on opening the C: device and is restored after its closing in order to enable normal use of a disk drive. The control keys are passed from the keyboard interrupt. The program is immune to warm start of the computer. Good luck in turbo'ing!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="74" LastActivityDate="2016-05-15T08:19:50.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="514" PostTypeId="2" ParentId="499" CreationDate="2016-05-15T11:42:33.113" Score="4" Body="&lt;p&gt;Not really a cassette improvement, but audio anyway: the CD Games Collection from Codemasters came with an adapter that meant to be connected to the joystick port of the computer and the headphones out of a CD Player. The games were recorded with a custom loading scheme, much faster than standard loaders, thanks to the absence of background noise, wow and flutter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FqulN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FqulN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Theorically, the game would be recorded using both left and right tracks, as the audio plug is a stereo 3.5'' jack and the joystick connector seem to have two pins wired. A simple audio analysis shows that it isn't true, and both tracks carried the same signal. Besides, and according to Jose Leandro's research, the loader routine listened to only one pin from the joystick connector. He inferred how the inside circuit would look like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0Q0j7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0Q0j7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it seems that the recording and the loader routine were made after the cable was designed, and they were in a hurry to release this collection, so they couldn't debug it enough and decided to go with a mono signal version and a more reliable, although slower loader.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More about this in Jose Leandro's hardware page:&#xA;&lt;a href=&quot;http://trastero.speccy.org/cosas/JL/CableCD/CableCD.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://trastero.speccy.org/cosas/JL/CableCD/CableCD.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And speaking of loading through the joystick port. Long time ago I tried to do something similar (although I didn't hear about the CD Games Pack until years after). My approach is to use 5 pins from the joystick port to carry a parallel 4-bit digital signal (using the direction pins), and a clock (using the trigger pin). I could even make it DDR, i.e. accepting data on both the rising and the falling edge of the clock signal. With this approach, I achieved about 155kbps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Details about this experiment can be found on my website:&#xA;&lt;a href=&quot;http://www.zxprojects.com/index.php/external-ultra-high-loader-for-the-zx-spectrum/14-proof-of-concept-alchemist&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.zxprojects.com/index.php/external-ultra-high-loader-for-the-zx-spectrum/14-proof-of-concept-alchemist&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a demonstration of such technique. I use a microcontroller to store the program I want to load, along with the bit banging code that converts it into a series of nibbles to be sent over the joystick cable. The routine at the computer end merely needs to wait until a clock edge happens and then, read the data present in direction pins, store it and when the second half is read, assemble a byte and store in memory. I think the technique can be extrapolated to any computer that has a digital joystick port, and the microcontroller part can be changed for a PC with a FTDI chip with assist from software to do the bit-banging part, loading a program from USB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=i8Sv9riKVwg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=i8Sv9riKVwg&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-05-15T11:48:41.353" LastActivityDate="2016-05-15T11:48:41.353" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="515" PostTypeId="1" CreationDate="2016-05-15T21:44:09.080" Score="8" ViewCount="120" Body="&lt;p&gt;The DS-69 was a cartridge you could plug into the computer to digitize a composite video source. It fully supported writing images to floppy disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can the DS-69 (A or B) be used with Y-Cable?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The manual only mentions using the device with a Multi-Pak, or other &quot;active&quot; switcher.&lt;/p&gt;&#xA;" OwnerUserId="29" LastActivityDate="2016-05-21T00:02:27.080" Title="Digisector DS-69 video digitizer" Tags="&lt;color-computer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="516" PostTypeId="1" AcceptedAnswerId="519" CreationDate="2016-05-16T01:58:23.313" Score="18" ViewCount="629" Body="&lt;p&gt;DOS 3.3 was the most common before ProDOS. How did it differ to DOS 3.2 and what versions were there before that?&lt;/p&gt;&#xA;" OwnerUserId="393" LastEditorUserId="539" LastEditDate="2016-05-26T14:34:43.600" LastActivityDate="2016-05-26T14:34:43.600" Title="How many versions of DOS were there for the Apple II and what were the differences?" Tags="&lt;apple-ii&gt;&lt;apple-dos&gt;&lt;disk-ii&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="517" PostTypeId="1" AcceptedAnswerId="524" CreationDate="2016-05-16T12:50:08.577" Score="34" ViewCount="2429" Body="&lt;p&gt;Discussing 'non-standard byte sizes' with co-workers today, one mentioned hearing of soviet experiments with computers that used three-state bytes - and not just what is common today, 0, 1 and High Impedance meaning &quot;absent on the bus&quot;, but actual trinary system, where the bits could achieve three logical values. Unfortunately, he was unable to provide any more details - nothing beyond &quot;hearing about it.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone provide more detail? Was there a computer system that was based on the trinary system? What was it? How did it work?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="74" LastEditDate="2016-05-17T18:18:00.880" LastActivityDate="2016-05-17T18:18:00.880" Title="What soviet computer used trinary bits?" Tags="&lt;history&gt;&lt;ussr&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="518" PostTypeId="2" ParentId="499" CreationDate="2016-05-16T13:29:28.317" Score="1" Body="&lt;p&gt;The Commodore 64 had many different tape loaders.  Game publishers often included them, especially in Europe, as the C64 had on average more memory to fill and the standard tape routines weren't very fast.  The exact same tape routines exist in the PET, VIC20, C64, and C128 because when Chuck Peddle wrote them and he left Commodore, the secrets of the logic of the routines left with him.&lt;/p&gt;&#xA;" OwnerUserId="260" LastActivityDate="2016-05-16T13:29:28.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="519" PostTypeId="2" ParentId="516" CreationDate="2016-05-16T14:03:09.923" Score="15" Body="&lt;p&gt;There was no public release of DOS 1 or 2.  DOS 3.1 was actually the first release to the public.  It had a pretty significant bug in its MASTER CREATE program, and so the patched version DOS 3.2 was released.  DOS 3.1 dates back to about June 1978.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/56/fadden&quot;&gt;@fadden&lt;/a&gt; references the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_DOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page for Apple DOS&lt;/a&gt; which notes the existence of 3.2.1 which I had neglected to mention as a bugfix for 3.2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system master disk for DOS was able to operate on any machine regardless of how much memory it had.  Simply running &lt;code&gt;INIT HELLO&lt;/code&gt; (or whatever) generated a disk that put RWTS (the DOS code itself) in exactly the position of memory it was now.  A master disk would put it as high as it could on a 16, 32, or 48k machine.  So a bug in the code that made new disks that could do that was a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, DOS 3.1 and 3.2 used a 13 sector disk.  But it wasn't too much longer before Woz realized that 16 sectors was possible with a minor hardware change to the Disk II controller card.  DOS 3.3 came along with the necessary bits to fix that, and the DOS 3.3 System Master disk came with tools for moving files from 13 sector to 16 sector, and for booting the old disks from the System Master disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ProDOS came along later and worked completely differently.  It more or less came onto the scene around the time of the Apple //e.  It clearly was developed for and on the Apple ][+, but Apple did not release it until the Apple /// was pretty much completely obviously dead.  Then suddenly here comes the //e and this new ProDOS thing.  And Apple withdrew permission at that point for A2UGs to distribute DOS 3.3 and older anymore, intending to kill off the old stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It never really did die off.  ;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were other DOS releases made by Apple not explicitly referenced here.  Wikipedia's Apple DOS page (linked above) notes that bugfix versions were released for all versions of DOS, without changing the version number.  I do not doubt they did this because I have seen multiple builds of the same ProDOS version--though in the case of ProDOS, two versions may differ by as little as the build date on the splash screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also ProntoDOS, RDOS, and a whole bunch of mods to Apple's DOS, fundamentally all patches to the DOS RWTS to change the order things were written when the disk was INIT'd.  You'll discover more about that if you dig into &quot;DOS order&quot; and &quot;ProDOS order&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also patched versions of the RWTS to work with devices other than the Disk II such as UniDOS, which could work on a 400k 3.5&quot; disk.  The DOS RWTS could cope with a device up to 400k in size with the slightest patches, but it was only ever intended to work with the Disk II as Apple released it.  ProDOS has Disk II code included (since the Disk II is about as dumb an interface as you can get), but it also has stuff to handle a &quot;smart&quot; block device.  As far as ProDOS is concerned, all 3.5&quot; disks and hard drives are smart block devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope that's a good start for you.  If you're curious about the non-Apple DOS releases, others who know more about them can probably help you better.  The only alternative DOS I've ever used was UniDOS, and at the time I used it, I didn't know how it was changed from DOS 3.3.&lt;/p&gt;&#xA;" OwnerUserId="539" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-05-17T06:24:33.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="520" PostTypeId="1" AcceptedAnswerId="528" CreationDate="2016-05-16T15:01:02.777" Score="13" ViewCount="518" Body="&lt;p&gt;Apple supplied some, were there others that other people wrote? What is the complete list of FSTs available?&lt;/p&gt;&#xA;" OwnerUserId="393" LastEditorUserId="175" LastEditDate="2017-03-09T19:44:31.323" LastActivityDate="2017-03-09T19:44:31.323" Title="What FSTs (File System Translators) exist for the Apple IIGS?" Tags="&lt;data-transfer&gt;&lt;apple-iigs&gt;&lt;hfs&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="523" PostTypeId="2" ParentId="499" CreationDate="2016-05-16T17:45:12.470" Score="5" Body="&lt;p&gt;You could consider the Coleco ADAM as one of the machines that did such tricks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though it has been 25+ years since I owned one of these machines, I do remember a few things about them. For starters, it used custom cassettes rather than normal consumer bought audio tapes despite being the same form factor; I do seem to recall that there was an extra hole in the cassette to prevent you from using consumer audio tapes, though you could defeat that with some power tools. I believe it was more than just being a CrO2 or Metal cassette in that they were more durable given the high speeds the drive would push: 20 ips (inches per second) for read/write, 80 ips for cue/rewind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe the ADAM tapes were single-sided only, though I don't recall if the tape head was 2 or 4 tracks (I'll assume the latter because of the ease of getting parts). What was interesting about these tapes is that not only were they fast, but they had full seeking capabilities. In other words, just like how a floppy disk head will jump and sweep from track to track, the cassette would speed up to 80 ips to seek the tape and then drop down to 20 ips for read/write. Yes, the seek would go in either direction, though I think read/write ONLY went forwards. Assuming the 4-track configuration, I'd guess that one track was always position and the other three probably weren't that much different than typical disk sector data patterns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't remember much else about the drives, but they weren't as fast as an IBM / Apple II disk but certainly faster than normal cassettes.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-05-16T17:45:12.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="524" PostTypeId="2" ParentId="517" CreationDate="2016-05-16T18:40:09.097" Score="34" Body="&lt;p&gt;These were probably the &lt;a href=&quot;https://en.wikipedia.org/wiki/Setun&quot;&gt;Setun&lt;/a&gt; computers, built in the Soviet Union between 1959 and 1965.  It used &lt;a href=&quot;https://en.wikipedia.org/wiki/Balanced_ternary&quot;&gt;balanced ternary&lt;/a&gt; (with the digits 1, 0, and -1) for computations, and a &lt;a href=&quot;https://en.wikipedia.org/wiki/Three-valued_logic&quot;&gt;three-valued logic&lt;/a&gt; (I haven't been able to find which one) for operations.  Electrically, it almost certainly used &quot;ground&quot;, &quot;positive voltage&quot;, and &quot;negative voltage&quot; as its signaling levels.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-05-16T18:40:09.097" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="525" PostTypeId="2" ParentId="499" CreationDate="2016-05-16T20:25:06.077" Score="2" Body="&lt;p&gt;Digital Group offered a 5x-speed (as I recall) tape drive called Phi-Deck. This was around 1978. It was a poor man's floppy disk, because it supported a file system, and a primitive operating system, PhiMon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some details are here: &lt;a href=&quot;http://bytecollector.com/dg_phideck.htm&quot; rel=&quot;nofollow&quot;&gt;http://bytecollector.com/dg_phideck.htm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="550" LastActivityDate="2016-05-16T20:25:06.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="526" PostTypeId="2" ParentId="463" CreationDate="2016-05-16T20:53:07.647" Score="4" Body="&lt;p&gt;Because early hobbyists were a bit more technical about their computers, and did not just want to run applications on them.  Most were tinkerers.  BASIC on those machines literally was the operating system.  The user interfaced by issuing immediate-mode BASIC statements.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plus, back then you could get books of programs to type in. Even sophisticated programs could be &quot;poked&quot; into memory from the BASIC interpreter, and then executed by using a BASIC &lt;code&gt;SYS&lt;/code&gt; command referencing the starting address.&lt;/p&gt;&#xA;" OwnerUserId="553" LastEditorUserId="278" LastEditDate="2016-05-17T08:02:47.717" LastActivityDate="2016-05-17T08:02:47.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="527" PostTypeId="2" ParentId="329" CreationDate="2016-05-16T21:26:54.783" Score="2" Body="&lt;p&gt;Use a value derived from a CMOS clock for your seed, since those are never the same twice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On an older computer with no CMOS clock, there will still be a clock that starts from zero every time the computer is started. You can use this clock as well, as long as the program start time relies on human action which will introduce a random delay.  Manually starting the program should introduce enough error for a reliably unique seed. If you autostart the program with a zeroed-out clock on reboot, and without requiring any human input, then you are very likely to get repeating values for your seed.&lt;/p&gt;&#xA;" OwnerUserId="553" LastActivityDate="2016-05-16T21:26:54.783" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="528" PostTypeId="2" ParentId="520" CreationDate="2016-05-17T06:41:35.537" Score="13" Body="&lt;p&gt;The official ones, with GS/OS versions as indicated by the &lt;a href=&quot;http://apple2history.org/history/ah15/&quot;&gt;Apple II History site&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Filename        Purpose                                 In GS/OS Version&#xA;APPLESHARE.FST  For AppleTalk networks                  5.0&#xA;CHAR.FST        Keyboard, screen, printers, and modems  4.0&#xA;DOS3.3.FST      Apple II DOS 3.3 Disks (Read only)      6.0&#xA;HFS.FST         Mac OS HFS Disks (Read/Write)           6.0&#xA;HS.FST          High Sierra CD-ROMs                     4.0&#xA;MSDOS.FST       MS-DOS Disks (Read only)                6.0.1&#xA;PASCAL.FST      Apple II Pascal Disks (Read only)       6.0&#xA;PRO.FST         Apple II ProDOS Disks (Read/Write)      4.0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Apple didn't release documentation on writing FSTs, perhaps because they often involved changes to GS/OS internals. This is discussed at the Apple II History link above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the following unofficial ones were developed by &lt;a href=&quot;http://www.brutaldeluxe.fr/products/apple2gs/fsts.html&quot;&gt;Brutal Deluxe&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DOS3.2.FST      Apple II DOS 3.2 Disks&#xA;DOS3.3.FST      Apple II DOS 3.3 Disks (Improved)&#xA;RDOS3.3.FST     Apple II RDOS Disks (SSI games)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="71" LastActivityDate="2016-05-17T06:41:35.537" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="530" PostTypeId="5" CreationDate="2016-05-17T14:42:41.463" Score="0" Body="&lt;p&gt;The Amstrad CPC (short for Colour Personal Computer) is a series of 8-bit home computers produced by Amstrad between 1984 and 1990. It was designed to compete in the mid-1980s home computer market dominated by the Commodore 64 and the Sinclair ZX Spectrum, where it successfully established itself primarily in the United Kingdom, France, Spain, and the German-speaking parts of Europe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Amstrad_CPC&quot; rel=&quot;nofollow&quot;&gt;Amstrad CPC on Wikipedia&lt;/a&gt; -- the text above is extracted from that page&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.cpcwiki.eu/index.php/Main_Page&quot; rel=&quot;nofollow&quot;&gt;CPCWiki - THE Amstrad CPC encyclopedia!&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="574" LastEditorUserId="574" LastEditDate="2016-05-17T22:42:20.923" LastActivityDate="2016-05-17T22:42:20.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="531" PostTypeId="4" CreationDate="2016-05-17T14:42:41.463" Score="0" Body="For questions related to the Amstrad CPC series of 8-bit home computers." OwnerUserId="574" LastEditorUserId="278" LastEditDate="2016-09-10T17:43:06.790" LastActivityDate="2016-09-10T17:43:06.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="532" PostTypeId="1" AcceptedAnswerId="537" CreationDate="2016-05-17T15:10:45.650" Score="54" ViewCount="11848" Body="&lt;p&gt;I'm studying &lt;a href=&quot;https://en.wikibooks.org/wiki/Super_NES_Programming/65c816_reference&quot;&gt;the 65c816 assembly&lt;/a&gt; for the 1994 game, Super Metroid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A hobbyist studied the game in-depth and created &lt;a href=&quot;http://drewseph.zophar.net/Kejardon/RAMMap.txt&quot;&gt;a RAM map&lt;/a&gt;. From it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;7E:0B56 - 7E:0B57    Moves Samus this distance horizontally, in subpixels.&#xA;7E:0B58 - 7E:0B59    Moves Samus this distance horizontally, in pixels.&#xA;7E:0B5A - 7E:0B5B    Moves Samus this distance vertically, in subpixels.&#xA;7E:0B5C - 7E:0B5D    Moves Samus this distance vertically, in pixels.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm new to assembly, but as I understand it, the game stores Samus's movement in RAM, to be picked up later by some code that performs the actual moving (the &quot;function&quot;). But why do things this way? Why not simply push the above &quot;parameters&quot; onto the stack and pop them from within the &quot;function&quot;? Is storing the parameters in static addresses somehow more efficient? Is it to save space on the stack? Is it for better code organization?&lt;/p&gt;&#xA;" OwnerUserId="563" LastActivityDate="2016-05-20T10:18:20.983" Title="Why use static RAM addresses instead of the stack?" Tags="&lt;game-cartridge&gt;&lt;assembly&gt;&lt;snes&gt;" AnswerCount="7" CommentCount="12" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="533" PostTypeId="2" ParentId="516" CreationDate="2016-05-17T15:34:00.737" Score="2" Body="&lt;p&gt;There were also two other formats common on the Apple ][: Pascal and CP/M. Though the latter required a special Z80 CP/M card (such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Z-80_SoftCard&quot; rel=&quot;nofollow&quot;&gt;Microsoft Softcard&lt;/a&gt;), &#xA;the former was proprietary to the &lt;a href=&quot;https://en.wikipedia.org/wiki/UCSD_Pascal&quot; rel=&quot;nofollow&quot;&gt;UCSD Pascal system&lt;/a&gt; that was released in the late 1970s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe the idea was that since UCSD Pascal was a cross-platform p-Code environment, the format would be usable on other microcomputers at the time. However, I can't claim from personal experience ever seeing that in practice. As well, the only commercial software I recall using that was in the p-Code environment was Hayes Smartcom for the Micromodem ][.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, the Sider hard drive system for the Apple II series did support these two disk formats for partitions along with the standard DOS 3.3 and ProDOS volumes.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-05-17T15:34:00.737" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="534" PostTypeId="2" ParentId="532" CreationDate="2016-05-17T15:49:44.217" Score="48" Body="&lt;p&gt;Off the top of my head I can think of two reasons, there are probably more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first reason is that these variables may be set by a routine each frame, and then a lot of code uses them during the time of the whole frame. Every interrupt routine that fires during that frame may want to read out the current direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second reason is that, in a real-time embedded environment&lt;sup&gt;1&lt;/sup&gt; like a console game, it's important to know that you have enough resources to handle the worst-case conditions. One resource is &lt;em&gt;time&lt;/em&gt;; you want to make sure that everything you want to perform can be handled in one frame update. Another resource, and relevant in this case, is &lt;em&gt;memory&lt;/em&gt;. Whatever happens, you can't run out of memory&lt;sup&gt;2&lt;/sup&gt;. There's no swap space, you can't pop up a requester, or kill off something else. Add to this the fact that embedded platforms like this do not have any form of memory protection, so if you write too much on the stack &amp;mdash; &lt;em&gt;game over, man&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The combination of these two makes it reasonable to reserve RAM for variables like this.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1. These platforms still exist today, think control systems for robots, your fridge, basically every &quot;hidden&quot; microcontroller.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2. I've recently worked with an operating system designed for high reliability. It had every type of dynamic allocations removed. No malloc() for you.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="333" LastEditorUserId="44" LastEditDate="2016-05-20T10:18:20.983" LastActivityDate="2016-05-20T10:18:20.983" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="535" PostTypeId="2" ParentId="532" CreationDate="2016-05-17T17:27:02.997" Score="23" Body="&lt;p&gt;As mentioned previously the timing issue is the cause not to waste time in pushing up parameters, access them with cost-intensive addressing modes and pull them finally from stack. Too much action if this occurs in a tight, time-critical frame building routine. In a games of a certain size usually all could be handled with global variables. Some state of the game has to be held into globals anyway. It's a just a waste of time to copy the global state into local parameters all the time. There is no advantage or gain to use high-level language structures like parameter passing to functions or subroutines. Local variable protection, opaque variables, a common calling interface convention and so on are simply not necessary in a closed world of a game. &#xA;An important exception is the calling interface to a surrounding operating system, to attach a game to the system environment and using its resources or gain access to libraries with offers graphical or sound support and so on (3D engines, sound players, ...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Larger developments or projects tend to use a high-level language which implies the usage of such techniques. On assembler level you have only to bother with the high-level calling interface if you want to embed such routines for (mostly) time-critical reasons. It can simply seen as a connection of some assembly with the rest of the project in high-level.&lt;/p&gt;&#xA;" OwnerUserId="181" LastActivityDate="2016-05-17T17:27:02.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="536" PostTypeId="2" ParentId="532" CreationDate="2016-05-17T20:34:47.223" Score="10" Body="&lt;p&gt;Another example in the tightly constrained world of games - especially those with a real-time loop (e.g., for updating the display on a fixed schedule): there was no space for a &quot;task queue&quot; and/or no time for a &quot;rendezvous&quot; mechanism that would enable data to be passed from one thread to another in one of the &quot;structured&quot; methods that would be more common today.  Instead, the programmer passed data via global variables and was responsible for analyzing (and preventing or mitigating) data races and other concurrency hazards.  These solutions are fast and cheap at runtime, slow and expensive at coding time ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, when looking at older code for very resource-constrained systems you'll frequently find coding techniques that are generally shunned today - for good reason!  The most egregious would be self-modifying code which was much more common on earlier and/or smaller architectures with less choice of addressing modes, fewer registers, etc.  Look at those mechanisms and marvel how we were able to do so much with so little ... and in such a way that it nearly always worked!&lt;/p&gt;&#xA;" OwnerUserId="332" LastActivityDate="2016-05-17T20:34:47.223" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="537" PostTypeId="2" ParentId="532" CreationDate="2016-05-17T20:48:33.000" Score="55" Body="&lt;p&gt;The 8 bit 6502 family doesn't have any stack-relative addressing modes that would make it easy to use the stack for variable storage. One &lt;em&gt;can&lt;/em&gt; access values on the stack with a sequence such as &lt;code&gt;TSX; LDA &amp;amp;102, X&lt;/code&gt;, but that's slower, clobbers X, and uses more memory (both in code size and stack usage) than a global variable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 65C816 adds stack-relative instructions such as &lt;code&gt;LDA 2, S&lt;/code&gt;, so it is now plausible to use local variables on the stack. But global variables were idiomatic on the 6502 and old habits die hard…&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2016-05-17T20:48:33.000" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="538" PostTypeId="2" ParentId="532" CreationDate="2016-05-17T21:34:04.647" Score="14" Body="&lt;p&gt;It's also worth pointing out that the intricacies of maintaining variables on the stack can result in slower code. And of course there are limits to how big the stack can be; even with the more expansive stack on the 65816, you're still limited to a fraction of bank $00 (so 64K minus the direct page(s) minus any other stacks you have around minus any I/O space or ROM or the like you have. So preserving bank zero space for use by other code that actually &lt;em&gt;has&lt;/em&gt; to use it is pretty critical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As has been pointed out, the '816 does have stack relative addressing. But it's a little awkward and is very easy to screw up. If you make any changes to the configuration of the stack, you can mess up all kinds of stuff with things getting misaligned. Especially if you pass parameters on the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's just so much easier to not use the stack that way unless you're either (a) really sure of what you're doing or (b) really sure it will make a huge difference.&lt;/p&gt;&#xA;" OwnerUserId="72" LastActivityDate="2016-05-17T21:34:04.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="539" PostTypeId="2" ParentId="532" CreationDate="2016-05-18T11:54:40.447" Score="10" Body="&lt;p&gt;Code written in high-level languages do a lot of stack-relative operations, because compilers are good at keeping track of which stack offset refers to which variable in the current context.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In hand-written assembly code it was often more common to store things as 'globals' in well-known memory locations, just because it's easier for humans to think about memory layout in that way. If recursion or concurrent instances are not needed in a particular function, then global storage is a possible solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I worked on Z80 and 8086 assembly code software systems back in the day, and even though both of these processors have index registers that would allow stack-relative storage of variables, it was common practice to store variables as globals.&lt;/p&gt;&#xA;" OwnerUserId="26" LastActivityDate="2016-05-18T11:54:40.447" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="540" PostTypeId="1" AcceptedAnswerId="545" CreationDate="2016-05-18T13:31:16.770" Score="9" ViewCount="2174" Body="&lt;p&gt;I thought it was 4 Megabytes but I can see there are 8 Megabyte expansion cards. Is that the maximum? And is that an addressing/bank limit or a limit of the slot?&lt;/p&gt;&#xA;" OwnerUserId="393" LastEditorUserId="393" LastEditDate="2016-05-18T13:37:11.283" LastActivityDate="2018-01-10T19:59:00.533" Title="What is the maximum amount of memory that can be added to an Apple IIGS?" Tags="&lt;apple-iigs&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="543" PostTypeId="2" ParentId="540" CreationDate="2016-05-18T15:59:56.403" Score="6" Body="&lt;p&gt;According to the &lt;em&gt;Apple IIgs Hardware Reference, Second Edition&lt;/em&gt;, page 49: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The original Apple IIgs has 256K of RAM and 128K of ROM built in, and the 1 MB Apple IIgs has 1 MB RAM and 256K of ROM.  This memory can be expanded to a total of 5 MB of RAM (4 MB RAM on a memory expansion card), and 1MB total ROM (768K ROM on a memory expansion card). Memory expansion of up to 8MB of RAM is possible by using the memory expansion slot, but complications requiring memory support logic keep this expansion from being practical.  The ahrdware and firmware in the Apple IIgs are designed to support only a 5 MB maximum memory space.  Addresses above 8 MB are not available to applications programs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Further:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;While the memory expansion slot has sufficient address lines available to decode addresses up to 8 MB, memory expansion cards of greater than 4 MB are not recommended.  This is because memory expansion locations beyond 4 MB cannot be accessed via direct memory access (DMA), and also must provide on-board memory refresh support circuitry for the additional memory chips.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Since 8 MB expansion cards exist, it's clearly both possible and practical, but 8 MB does seem to be the upper limit due to the physical layout of the memory expansion slot.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-05-18T15:59:56.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="544" PostTypeId="2" ParentId="206" CreationDate="2016-05-18T16:28:09.137" Score="7" Body="&lt;p&gt;There is very little information online about this, so I have scraped around and put this together:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The screws on the Amiga 500 and 500+ were often Phillips (requiring a #2 Phillips head screwdriver&lt;sup&gt;&lt;a href=&quot;//web.archive.org/http://amiga.resource.cx/manual/AdIDE2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;), but hex-socket (Allen key) screws were also used&lt;sup&gt;&lt;a href=&quot;//web.archive.org/web/20160517204022/http://www.ebay.co.uk/itm/Amiga-500-500plus-Hex-type-case-fixing-kit-Screws-set-of-10-screws-/121962809701&quot; rel=&quot;nofollow noreferrer&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;//retrocomputing.stackexchange.com/users/75/traal&quot;&gt;trall&lt;/a&gt; measured the external case screws on an A500 case that appear to be original. They are Torx T9, the rear three (3) are 9.0mm long at the shank and 13 threads/inch. The front three (3) are 7.5mm long, and two (2) of those are 13 threads/inch and one (1) is 29 threads/inch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the screws for the 600 and 1200 are six millimetres long&lt;sup&gt;&lt;a href=&quot;//web.archive.org/web/20160328054249/http://amigakit.leamancomputing.com/catalog/product_info.php?products_id=992&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; and appear to be Phillips screws&lt;sup&gt;&lt;a href=&quot;//web.archive.org/web/20160422061416/http://amigakit.leamancomputing.com/catalog/images/case-screws.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; as well, however there are shorter screws for the lower front edge&lt;sup&gt;&lt;a href=&quot;//web.archive.org/web/20160517205017/http://www.ebay.co.uk/itm/Commodore-Amiga-600-and-1200-case-screws-6-Screw-Set-A600-A1200-/182115335561&quot; rel=&quot;nofollow noreferrer&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt; on these machines.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-02-09T08:15:54.283" LastActivityDate="2017-02-09T08:15:54.283" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="545" PostTypeId="2" ParentId="540" CreationDate="2016-05-18T16:51:14.637" Score="11" Body="&lt;p&gt;The largest amount of RAM supported by a real Apple IIgs is an 8MB expansion card, but that's somewhat misleading.  The original IIgs came with 256KiB and the ROM3 came with 1MiB.  A RAM expansion of 4MB will simply be added to these values.  But when you have a card larger than 6MiB (which exists as well), you're going to see a problem: The extra RAM beyond 8MB is wasted/unused.  It usually still needs to be there for the card to work properly, but your IIgs can't see it and can't use it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may have seen that IIgs emulators often allow you to have up to 14MiB of RAM, though doing so requires enabling an option for having more than 8MB.  This is a hack, as it turns out, because the limit of 8MiB of RAM is actually in the ROM.  As there are functionally two IIgs ROMs out there to worry about, the emulators simply patch them to accept more.  This breaks a few titles, and only recently has the Apple // retro hardware market produced a ROM adapter board to use commodity chips to replace the mask ROMs of ROM0 machines with a burned ROM01 so that you need not cannibalize ROM01 machines to upgrade.  (ROM0 is pain, you don't want it!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, a IIgs user will rarely need more than 4MiB of RAM.  The ROM01 machine does not have enough RAM to effectively use GS/OS 6.0.x with 1.25MiB, but a basic configuration should work with the Apple 1MiB expansion card on a ROM03.  (This is not my personal experience with an AppleTalk enabled system, however, I was getting $0201 errors--allocation failures--with the community 6.0.3 release on a 2MiB ROM3 system. A 4MiB card solved those problems.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure means to utilize the full 8MiB possible on a standard IIgs, but without using RAMdisks in an era of flash drive expansion in the same price category, it feels like having 8MiB is more about bragging rights than anything.  That's true in 2016 May, at least.  If it changes in the future because 8MiB cards become standard, someone will comment to that effect.  :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With ROM hacking beginning in earnest on the Apple // series, it's likely the option to have more than 8MiB may happen in the future.  If so, the hard limit would be 14MiB without bank switching as the upper 2MiB is used for ROM and the Mega II.&lt;/p&gt;&#xA;" OwnerUserId="539" LastActivityDate="2016-05-18T16:51:14.637" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="546" PostTypeId="1" AcceptedAnswerId="547" CreationDate="2016-05-18T17:21:10.543" Score="18" ViewCount="1523" Body="&lt;p&gt;I've heard mention many times of screen editing commands on the Apple // for fixing typos in BASIC programs (and patching code in the monitor?).  I did not learn these growing up, never having the original manuals available in computer labs in school.  What are the commands, and how do they work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are these built into the Apple // specifically, or do legal clones (e.g. Laser) have them as well?  What about other machines based on Microsoft 6502 BASIC like Commodore?&lt;/p&gt;&#xA;" OwnerUserId="539" LastActivityDate="2016-05-26T15:51:40.540" Title="Apple // screen editing" Tags="&lt;apple-ii&gt;&lt;applesoft-basic&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="547" PostTypeId="2" ParentId="546" CreationDate="2016-05-18T18:14:50.890" Score="19" Body="&lt;p&gt;The Apple II has an input buffer separate from the screen, with a maximum capacity of 256 characters.  Typing a printable character adds it to the buffer and the screen.  The left-arrow button removes a character from the input buffer and moves the cursor left.  The right arrow adds the character at the cursor position to the input buffer and moves the cursor right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hitting the escape key followed by I, J, K, or M will move the cursor up, left, right, or down, respectively, without affecting the input buffer.  On the Apple //e, escape followed by arrow keys will do likewise.  Press escape again to return to normal typing mode.  If one wishes to modify a line of a program, one can use LIST to display it, then use Escape-I and J to move the cursor to the start of the line, hit escape to return to normal typing mode, and then use the right-arrow key to re-enter data from the screen into the input buffer.  One can delete data by using escape-K to skip past it without moving it into the buffer, or in many cases one may simply space over it.  Because LIST spaces things widely and AppleSoft generally ignores spaces, one can insert a few characters here and there by replacing spaces; larger inserts can be handled by using escape-J to move the cursor left after having imported some text, and then typing the characters to be inserted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once upon a time, I write a utility to continuously display the last 40 characters of the input buffer at the top of the screen; I wouldn't be surprised if some such thing exists within the Internet-connected universe.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-05-18T18:14:50.890" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="548" PostTypeId="5" CreationDate="2016-05-18T18:22:04.893" Score="0" Body="&lt;p&gt;Use this tag for questions about the BASIC programming language.&lt;/p&gt;&#xA;&lt;p&gt;Questions with this tag should be about the language in general.  Dialect-specific questions should use the dialect-specific tags, e.g. &lt;a href=&quot;/questions/tagged/applesoft-basic&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;applesoft-basic&amp;#39;&quot; rel=&quot;tag&quot;&gt;applesoft-basic&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/atari-basic&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;atari-basic&amp;#39;&quot; rel=&quot;tag&quot;&gt;atari-basic&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/color-basic&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;color-basic&amp;#39;&quot; rel=&quot;tag&quot;&gt;color-basic&lt;/a&gt; and &lt;a href=&quot;/questions/tagged/integer-basic&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;integer-basic&amp;#39;&quot; rel=&quot;tag&quot;&gt;integer-basic&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="576" LastEditDate="2021-02-03T14:39:18.390" LastActivityDate="2021-02-03T14:39:18.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="549" PostTypeId="4" CreationDate="2016-05-18T18:22:04.893" Score="0" Body="BASIC: a high-level programming language favored in retro systems. For dialect-specific questions, use a tag such as [microsoft-basic], [applesoft-basic], etc." OwnerUserId="278" LastEditorUserId="15334" LastEditDate="2021-02-03T14:55:51.363" LastActivityDate="2021-02-03T14:55:51.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="550" PostTypeId="1" AcceptedAnswerId="632" CreationDate="2016-05-18T19:36:09.477" Score="13" ViewCount="2383" Body="&lt;p&gt;If you have Macintosh filesystem image of an 800k boot disk, but your physical Mac has a 1.44M SuperDrive, how can you produce a physical disk that can boot that Mac?&lt;/p&gt;&#xA;" OwnerUserId="539" LastEditorUserId="539" LastEditDate="2016-05-26T11:32:15.303" LastActivityDate="2016-06-06T14:25:23.673" Title="Writing 800k Mac floppy images for 1.44M-equipped Macs using Linux" Tags="&lt;floppy-disk&gt;&lt;apple-macintosh&gt;&lt;disk-drive&gt;&lt;disk-image&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="551" PostTypeId="1" CreationDate="2016-05-18T20:25:18.790" Score="23" ViewCount="2072" Body="&lt;p&gt;I have a wonderful Zenith SupersPORT 286 laptop (ZWE-0200-40) whose power circuitry seems faulty and it no longer powers up. I have useful material on the disk which I'd like to extract.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/dfGRum.jpg&quot; alt=&quot;Zenith 286 laptop&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;The disk (a Connor CP-343) interface is pre-IDE, and I can't seem to locate what type of interface it has.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/d761om.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/d761om.jpg&quot; alt=&quot;Product Label&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/GoQcxm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GoQcxm.jpg&quot; alt=&quot;Connector&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/jP6syt.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jP6syt.jpg&quot; alt=&quot;Ribbon cable termination&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Can anyone suggest how I might spin up the disk and image it? It's only about 40Mb, so less than a modern memory stick.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Update&lt;/h1&gt;&#xA;&lt;p&gt;Very helpful pointers from everyone. I'm almost at the point where I should probably spawn a new question rather than add more details. Anyway: yes, there is a daughter board with the disc controller:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rSCNR.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rSCNR.jpg&quot; alt=&quot;Connor disc controller board&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The board has a female IDE socket rather than a male IDE connector, and a power connector.&lt;/p&gt;&#xA;&lt;p&gt;I do have a male-to-male gender changer for IDE and an IDE-to-USB converter and a molex to floppy power connector. I checked the wiring as per the usenet postings linked by @mnem and I think they are right. However with a quick attempt I do not get disk power up, but get &lt;strong&gt;very hot&lt;/strong&gt; chips on the controller board. Sigh....&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ifw71m.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ifw71m.jpg&quot; alt=&quot;IDE and power&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;&lt;sub&gt;Yes: I realise I can cannibalise several scrap models, but at the moment I have found none on my continent at reasonable shipping prices or costs now they are museum pieces! I have a fair degree of experience at restoring older systems. Its just this form of disc interface is unknown to me.&lt;/sub&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="611" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-11-01T13:06:25.927" Title="How can I access an old pre-IDE disk?" Tags="&lt;disk-drive&gt;&lt;hard-disk&gt;&lt;80286&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="552" PostTypeId="2" ParentId="551" CreationDate="2016-05-18T20:53:31.240" Score="16" Body="&lt;p&gt;&lt;strike&gt;As far as I know, all of those models, either the 386 or 286 variants, all used &lt;a href=&quot;https://en.wikipedia.org/wiki/Enhanced_Small_Disk_Interface&quot; rel=&quot;noreferrer&quot;&gt;ESDI&lt;/a&gt; disks. I'd like my assertion to be proven by a photo of the drive connections, and (ideally) what it plugs into on the computer itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These drives have built-in controllers, but the adapters are quite special; I think you are looking at finding an Adaptec or Western Digital adapter (which will probably be ISA), and a compatible PC. As pointed out in the comments, some adapters might use the MCA bus, so this could complicate finding the right hardware match.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ESDI uses complicated daisy-chained cables with terminators, and each drive has to be addressed properly. Depending on what we find once we hook up the drive, we might have to worry about drive geometry and hard vs. soft sectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Older Windows might work to actually spin up and read the drive, but I suspect using BSD or Linux (both of which have ESDI support as a kernel default or compile option) might be more useful because there will be lots of tinkering.&lt;/strike&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also consider sending the drive off to a data recovery service.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ok, based on the pics I have to amend or delete my answer. This appears to be an ATA/IDE drive &lt;a href=&quot;http://theref.mfarris.com/hard_drives/conner_peripherals/conner_peripherals_cp-343.html&quot; rel=&quot;noreferrer&quot;&gt;made specifically for Zenith&lt;/a&gt; for this model of computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, it probably requires a custom XT/ATA 20-pin adapter of some sort, probably only from Zenith. The adapter will be on the laptop motherboard or perhaps &lt;a href=&quot;https://www.reddit.com/r/vintagecomputing/comments/30xssg/looking_for_a_zenith_supersport_286_hard_disk/&quot; rel=&quot;noreferrer&quot;&gt;underneath the keyboard&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on that last link, you &lt;em&gt;might&lt;/em&gt; be able to &lt;a href=&quot;https://imgur.com/wCMwPlF&quot; rel=&quot;noreferrer&quot;&gt;tear the special adapter out and use it to hook up a regular IDE adapter&lt;/a&gt; on any Linux box to the laptop drive.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorDisplayName="user12" LastEditDate="2016-05-20T13:40:53.023" LastActivityDate="2016-05-20T13:40:53.023" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="553" PostTypeId="1" AcceptedAnswerId="560" CreationDate="2016-05-19T00:21:33.357" Score="24" ViewCount="1479" Body="&lt;p&gt;Systems like the ZX Spectrum have simple audio hardware with just one channel.  But apparently it was possible to do polyphony on these systems.  How was that achieved?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The amazing thing with these systems is that the audio hardware seems to only be designed for playing a simple single tone, but people were able to transcend these limitations.&lt;/p&gt;&#xA;" OwnerUserId="64" LastEditorUserId="64" LastEditDate="2016-05-19T03:29:57.607" LastActivityDate="2016-06-24T12:55:40.413" Title="How was polyphony achieved on systems with only one audio channel?" Tags="&lt;zx-spectrum&gt;&lt;digital-audio&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="555" PostTypeId="2" ParentId="553" CreationDate="2016-05-19T07:42:50.450" Score="12" Body="&lt;p&gt;And these systems had not just a single audio channel, but a single-bit audio channel.  There are no doubt many techniques, but a simple approach is to rapidly interleave the output of two or more channels.  The low-pass filtering of the speaker will serve to effectively mix the channels together.  Not the greatest fidelity but better than nothing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example, consider the following pseudo-code to output a square wave:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;c0 = 0; f0 = 128;&#xA;loop:&#xA;   c0 = c0 + f0;&#xA;   if (c0 &amp;gt;= 128) audio_out = 1; else audio_out = 0;&#xA;   c0 = c0 % 256;&#xA;   goto loop;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With &lt;code&gt;f0 = 128&lt;/code&gt; as shown the output frequency will be the maximum possible which is 1 / time-to-execute.  Let's say that works out to 50,0000 Hz.  We can output notes of different frequency by choosing different values of &lt;code&gt;f0&lt;/code&gt;.  If &lt;code&gt;f0 = 1&lt;/code&gt; then we get a 50000/128 = 390 Hz tone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To output two square waves at once simply add the code for another square wave:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;loop:&#xA;   c0 = c0 + f0;&#xA;   if (c0 &amp;gt;= 128) audio_out = 1; else audio_out = 0;&#xA;   c0 = c0 % 256;&#xA;   goto waste;&#xA;waste:&#xA;   c1 = c1 + f1;&#xA;   if (c1 &amp;gt;= 128) audio_out = 1; else audio_out = 0;&#xA;   c1 = c1 % 256;&#xA;   goto loop;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The time to execute the loop has doubled so all our frequencies have dropped in half with the maximum now 25,000 Hz.  The higher level music player will have to adjust &lt;code&gt;f0&lt;/code&gt; and &lt;code&gt;f1&lt;/code&gt; values accordingly.  Also notice the &lt;code&gt;goto waste;&lt;/code&gt; statement I added.  That guarantees that the loop time exactly doubles and that the spacing between audio outputs is consistent.  It can be surprising how much these little things can matter when it comes to audio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Music players usually have &lt;code&gt;c0&lt;/code&gt; and &lt;code&gt;c1&lt;/code&gt; be fixed-point numbers that loop over waveform buffers to allow for output other than simple square waves.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2016-05-19T07:42:50.450" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="556" PostTypeId="2" ParentId="532" CreationDate="2016-05-19T12:29:43.517" Score="4" Body="&lt;p&gt;From your description, it sounds like a normal thing to do even today &amp;mdash; you just have the wrong model in your head.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The description sounds like there is a &quot;physics&quot; thread responsible for updating the state of the game world, and updates happen periodically (say... once per frame, just before rendering).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When some routine wishes to move Samus Aran, it doesn't do it &lt;em&gt;directly&lt;/em&gt;; instead it would invoke a method to queue up the change, and then the next time the physics thread runs, it executes all of the changes at once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This model makes it easier to ensure regular updates of the world state. Additionally, if multiple changes happen between frames, it is likely much more efficient to only have to calculate the effect of motion once per frame rather than doing so after each individual event.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The gameplay of Super Metroid appears to be so that the motion doesn't need to be broken into individual events, and so it doesn't need an actual queue; instead the changes in each direction simply get added up, and only the total change in each direction effected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(naturally, the method to queue up the change would be inlined, so you wouldn't see a function call at all)&lt;/p&gt;&#xA;" OwnerDisplayName="user627" LastActivityDate="2016-05-19T12:29:43.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="557" PostTypeId="2" ParentId="36" CreationDate="2016-05-19T12:45:04.523" Score="3" Body="&lt;p&gt;The answer will depend a lot on what application you have in mind.  There is a clarity difference, but how much it will matter will depend on how large of a display the output is going to as to how much you'll notice.  On a 20&quot; desktop monitor, you probably won't notice a huge difference, on a 50&quot; TV the difference will be more pronounced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other factor that may matter depending on what you are using it for, is displaying 80 column text.  You stated 240p or 480i, but you didn't specify horizontal resolution.  If you're using, for example, a 640 x 240p resolution and dealing with a lot of text display (say application use over gaming), the difference will matter more.  80 column text is certainly readable on S-Video but the clarity will be better on a 15khz VGA signal if that's going to be a primary use for it.&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2016-05-19T12:45:04.523" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="558" PostTypeId="2" ParentId="441" CreationDate="2016-05-19T13:10:04.267" Score="2" Body="&lt;p&gt;Although commercial, &lt;a href=&quot;https://www.hex-rays.com/products/ida/&quot; rel=&quot;nofollow&quot;&gt;IDA&lt;/a&gt; is an outstanding (dynamic) disassembler and debugger for the Z80.&lt;/p&gt;&#xA;" OwnerUserId="628" LastActivityDate="2016-05-19T13:10:04.267" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="559" PostTypeId="1" AcceptedAnswerId="575" CreationDate="2016-05-19T13:20:31.373" Score="13" ViewCount="538" Body="&lt;p&gt;I'm fooling around with Matthew Reed's TRS-80 Model 1/III/4 emulator for Windows (TRS32) and am have trouble using virtual cassettes.  I am using it to emulate a Model III with Level II BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have used the menu to insert the virtual cassette, and the emulator (as expected) creates a new, blank &lt;code&gt;.CAS&lt;/code&gt; file.  Then I &quot;press&quot; REC+PLAY on the virtual recorder and type &lt;code&gt;CSAVE &quot;FOO&quot;&lt;/code&gt;.  I see the counter advance and the &lt;code&gt;CSAVE&lt;/code&gt; completes without error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Semi off-topic note -- I had forgotten that &lt;code&gt;CSAVE&lt;/code&gt; and &lt;code&gt;CLOAD&lt;/code&gt; only pay attention to the first character of the filename you give it.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, I rewound back to the beginning of the &quot;tape&quot;, &quot;pressed&quot; PLAY, and typed &lt;code&gt;CLOAD&lt;/code&gt;.  I see the counter start moving and it advances through to the where it was at the end of the recorded program, but the &lt;code&gt;CLOAD&lt;/code&gt; doesn't find anything and just sits there (like it would do on a real system back in the day when it couldn't find a program on the tape).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's going wrong?&lt;/p&gt;&#xA;" OwnerUserId="218" LastEditorUserId="218" LastEditDate="2016-05-20T14:13:53.450" LastActivityDate="2016-05-20T14:13:53.450" Title="How to use virtual cassettes with Matthew Reed's TRS-80 Model III emulator? (TRS32)" Tags="&lt;emulation&gt;&lt;basic&gt;&lt;cassette&gt;&lt;trs-80-model-iii&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="560" PostTypeId="2" ParentId="553" CreationDate="2016-05-19T13:41:50.997" Score="20" Body="&lt;p&gt;I know of two ways of achieving polyphony in system with 1-bit audio systems:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The simple way: time-multiplex two or more frequencies. For example, if you want the system to produce a mix of two tones, which are pure square waves in origin like these: &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/e4d4M.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/e4d4M.png&quot; alt=&quot;Two square waves of different frequency&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you can simply render a period of first tone, followed by a period of second tone, and again, a period of first tone...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BVP08.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BVP08.png&quot; alt=&quot;Combined waveform&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This method limits your tones to be just pure frequencies, and if a very low frequency tone is to be mixed with a very high frequency one, the result is not very good. Nevertheless, this method works fine for simple tunes which may have some simple chords (such as the kind of tunes you can achieve using the PLAY command in a Spectrum 128K)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The PWM way: this uses a modulation technique called PWM, which allows a 1-bit output driver to generate any complex sound, by varying the duty cycle of a very high fixed frequency tone. The frequency of the PWM signal is then the sampling period of a digital signal, and the number of different values the duty cycle can have is the resolution of that digital signal. For example, a PWM signal with a frequency of 10kHz and with 16 possible levels for duty cycle can encode a 4-bit digital signal with a sampling frequency of 10kHz.&#xA;There is an implementation of PWM that allows for fast operation, called sigma-delta modulation. I wrote some PoC programs for the Spectrum to illustrate this method. &lt;a href=&quot;http://www.worldofspectrum.org/forums/discussion/comment/641855/#Comment_641855&quot; rel=&quot;noreferrer&quot;&gt;There is a thread in WOS discussing the matter&lt;/a&gt;, with some programs you can actually load and hear. One of them I provide it with full source code.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It works as follows: first, I take a raw PCM sound and use sigma-delta modulation to convert it into a stream of bits, each of them being the actual output to put in the speaker&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/*&#xA;Offline conversion of 8-bit sample files (RAW format, no header) to&#xA;1-bit sigma-delta encoded stream files.&#xA;&#xA;(C)2012 Miguel Angel Rodriguez Jodar (mcleod_ideafix)&#xA;Dept. Architecture and Computer Technology. University of Seville, Spain&#xA;Licensed under the terms of GPL.&#xA;&#xA;Change input and output files to suit your needs.&#xA;TO-DO: process input file in chunks, rather than completely load it in memory&#xA;*/&#xA;&#xA;#define INPUTFILE &quot;yeaaaah.raw&quot;&#xA;#define OUTPUTFILE &quot;yeahh4bit_sigma_delta.bin&quot;&#xA;&#xA;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &amp;lt;stdlib.h&amp;gt;&#xA;&#xA;void main (void)&#xA;{&#xA;    FILE *f;&#xA;    int leido;&#xA;    int i,sample,integrador,salida,filesize;&#xA;    unsigned char *buffer;    /* remove &quot;unsigned&quot; if using signed samples */&#xA;    unsigned char *buffout;&#xA;&#xA;    f=fopen (INPUTFILE, &quot;rb&quot;);&#xA;    fseek (f, 0, SEEK_END);&#xA;    filesize = ftell (f);&#xA;    fseek (f, 0, SEEK_SET);&#xA;    buffer=malloc(filesize);&#xA;    buffout=malloc(filesize/4);&#xA;    filesize = fread (buffer, 1, filesize, f);&#xA;    fclose(f);&#xA;&#xA;    integrador = 0;&#xA;    salida = 0;&#xA;    memset (buffout, 0, filesize/4);&#xA;&#xA;    for (i=0;i&amp;lt;filesize;i++)&#xA;    {&#xA;        sample = buffer[i]-128;  /* remove -128 if using signed samples */&#xA;        integrador += (sample-salida);&#xA;        if (integrador&amp;gt;0)&#xA;        {&#xA;            salida=127;&#xA;            buffout[i/4] = buffout[i/4] | (1&amp;lt;&amp;lt;(7-(i*2)%8));&#xA;        }&#xA;        else&#xA;        {&#xA;            salida=-128;&#xA;        }&#xA;&#xA;        /* repeat once (2x oversampling) */&#xA;        integrador += (sample-salida);&#xA;        if (integrador&amp;gt;0)&#xA;        {&#xA;            salida=127;&#xA;            buffout[i/4] = buffout[i/4] | (1&amp;lt;&amp;lt;(7-(i*2+1)%8));&#xA;        }&#xA;        else&#xA;        {&#xA;            salida=-128;&#xA;        }&#xA;    }&#xA;&#xA;    f=fopen (OUTPUTFILE, &quot;wb&quot;);&#xA;    fwrite (buffout, 1, filesize/4, f);&#xA;    fclose(f);&#xA;&#xA;    free(buffer);&#xA;    free(buffout);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, the stream of bits are simply played by a machine code routine.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; Simple player for 1-bit samples. See file 8tosigmadelta.c for sigma-delta&#xA;; offline conversion of 8-bit sample files to 1-bit sample files.&#xA;; (C)2012 Miguel Angel Rodriguez Jodar. (mcleod_ideafix)&#xA;; Dept. of Architecture and Computing Technology. University of Seville, Spain&#xA;; Licensed under the terms of GPL.&#xA;&#xA;; Assembled using PASMO.&#xA;&#xA;                org 49152&#xA;BORDERCOLOUR    equ 7&#xA;&#xA;DemoPlaySample  proc&#xA;                ld hl,Sample&#xA;                ld de,LenSample&#xA;                call PlaySample&#xA;                ret&#xA;                endp&#xA;&#xA;PlaySample      proc&#xA;                di&#xA;AnotherSample:  ld a,(hl)      ;Load 8 samples&#xA;                ld b,8&#xA;LoopSample:     ld c,a         ;Backup to C&#xA;                and 80h        ;Isolate high bit&#xA;                sra a&#xA;                sra a&#xA;                sra a          ;Shift it to SPK bit&#xA;                or BORDERCOLOUR   ;Apply desired border colour&#xA;                out (254),a     ;Output to spk&#xA;                ld a,c         ;Restore from C&#xA;                rla            ;Next sample is now in high bit&#xA;                nop            ;&#xA;                nop            ; Delay&#xA;                nop            ;&#xA;                nop            ;&#xA;                djnz LoopSample  ;Go to process next sample&#xA;                inc hl&#xA;                dec de&#xA;                ld a,d&#xA;                or e&#xA;                jp nz,AnotherSample    ;Go to process next 8 samples&#xA;                ei&#xA;                ret&#xA;                endp&#xA;&#xA;Sample:         equ $&#xA;                incbin &quot;yeahh4bit_sigma_delta.bin&quot;&#xA;LenSample       equ $-Sample&#xA;&#xA;                end DemoPlaySample&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I made some other PoC for several ways to achieve some kind of digital sound playing in a Spectrum. namely:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Using two bits (MIC and SPK) which gives me a (very rude and non linear) 2-bit DAC&lt;/li&gt;&#xA;&lt;li&gt;Using the AY chip to modulate a fixed signal with the volume control&lt;/li&gt;&#xA;&lt;li&gt;Using PWM&lt;/li&gt;&#xA;&lt;li&gt;Using an actual 8-bit DAC (SpecDrum)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Results can be loaded and executed, from here:&#xA;&lt;a href=&quot;http://www.atc.us.es/~rodriguj/prelude_spectrum.zip&quot; rel=&quot;noreferrer&quot;&gt;http://www.atc.us.es/~rodriguj/prelude_spectrum.zip&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original 4 channel MOD file is included. My demos use three channels (you may not notice that until the end, in where a chord is played)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The high pitch you hear in the PWM version is caused by the PWM frequency to be so low that it enters the audible spectrum. &quot;Serious&quot; PWM applications use a very high pitch PWM signal.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="276" LastEditDate="2016-06-24T12:55:40.413" LastActivityDate="2016-06-24T12:55:40.413" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="561" PostTypeId="2" ParentId="503" CreationDate="2016-05-19T14:31:09.570" Score="3" Body="&lt;p&gt;You might also find this discussion interesting: &lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.sys.apple2/7srpWGp1pCs&quot; rel=&quot;nofollow&quot;&gt;https://groups.google.com/forum/#!topic/comp.sys.apple2/7srpWGp1pCs&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the Apple II could only write at 4 cycles per bit, it can read faster: if you slow the drive down, you can write more densely.&lt;/p&gt;&#xA;" OwnerUserId="335" LastActivityDate="2016-05-19T14:31:09.570" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="562" PostTypeId="1" CreationDate="2016-05-19T15:15:36.447" Score="8" ViewCount="2227" Body="&lt;p&gt;I have a Sinclair ZX Spectrum 48k. I have source a suitable power supply, and applied the &lt;a href=&quot;http://womblesretrorepairshack.blogspot.ca/2008/11/zx-spectrum-composite-video-mod.html&quot;&gt;Composite Video Mod&lt;/a&gt; to bypass the PAL analogue modulator. Unfortunately, I can get no useful output, having tried:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Direct composite video into my LG television (c. 2009): oversize greyscale image, with about ¼ of the display visible;&lt;/li&gt;&#xA;&lt;li&gt;Direct composite video into a Dell multi-input LCD monitor: flickering for a few seconds, then NO SIGNAL;&lt;/li&gt;&#xA;&lt;li&gt;Composite video via a cheap USB-powered PAL to NTSC converter (sold under many brands — mine is labelled “KEEDOX® PAL/NTSC/SECAM to PAL/NTSC MINI Bi-directional TV Format System Converter”) into television composite: horribly distorted snowy display with very slow refresh.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Are there solutions known to work that might make the games of my youth playable again?&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2016-06-03T04:55:10.993" Title="ZX Spectrum PAL Composite Video to North American Monitor" Tags="&lt;zx-spectrum&gt;&lt;video&gt;&lt;ntsc&gt;&lt;pal&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="563" PostTypeId="5" CreationDate="2016-05-19T16:46:18.210" Score="0" Body="&lt;p&gt;For questions about the BASIC language, use the &lt;a href=&quot;/questions/tagged/basic&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;basic&amp;#39;&quot; rel=&quot;tag&quot;&gt;basic&lt;/a&gt; tag. Dialect-specific questions should use the dialect-specific tags &lt;a href=&quot;/questions/tagged/applesoft-basic&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;applesoft-basic&amp;#39;&quot; rel=&quot;tag&quot;&gt;applesoft-basic&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/atari-basic&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;atari-basic&amp;#39;&quot; rel=&quot;tag&quot;&gt;atari-basic&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/color-basic&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;color-basic&amp;#39;&quot; rel=&quot;tag&quot;&gt;color-basic&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/integer-basic&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;integer-basic&amp;#39;&quot; rel=&quot;tag&quot;&gt;integer-basic&lt;/a&gt;, etc.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2017-01-02T17:38:29.763" LastActivityDate="2017-01-02T17:38:29.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="564" PostTypeId="4" CreationDate="2016-05-19T16:46:18.210" Score="0" Body="Programming languages and constructs. Please check for language-specific tags first and use those instead, if applicable." OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2021-02-02T17:47:38.460" LastActivityDate="2021-02-02T17:47:38.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="565" PostTypeId="5" CreationDate="2016-05-19T16:58:13.003" Score="0" Body="&lt;p&gt;Use this tag for general questions about using and running software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For questions specific to the media used to load software, consider using the &lt;a href=&quot;/questions/tagged/floppy-disk&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;floppy-disk&amp;#39;&quot; rel=&quot;tag&quot;&gt;floppy-disk&lt;/a&gt; tag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For questions about software for specific hardware, consider using this tag in conjunction with a related hardware tag, such as &lt;a href=&quot;/questions/tagged/amiga&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;amiga&amp;#39;&quot; rel=&quot;tag&quot;&gt;amiga&lt;/a&gt; or &lt;a href=&quot;/questions/tagged/apple-ii&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;apple-ii&amp;#39;&quot; rel=&quot;tag&quot;&gt;apple-ii&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-24T18:22:16.010" LastActivityDate="2016-05-24T18:22:16.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="566" PostTypeId="4" CreationDate="2016-05-19T16:58:13.003" Score="0" Body="For questions about the applications and programs that can be run on retro devices (computers, etc.)" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-24T18:22:47.060" LastActivityDate="2016-05-24T18:22:47.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="567" PostTypeId="5" CreationDate="2016-05-19T17:00:37.093" Score="0" Body="&lt;p&gt;Atari BASIC is a BASIC interpreter that shipped with the Atari 8-bit family of 6502-based home computers.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-20T11:04:17.287" LastActivityDate="2016-05-20T11:04:17.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="568" PostTypeId="4" CreationDate="2016-05-19T17:00:37.093" Score="0" Body="For questions related to the Atari BASIC interpreter and language." OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-20T11:05:28.740" LastActivityDate="2016-05-20T11:05:28.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="569" PostTypeId="2" ParentId="546" CreationDate="2016-05-19T17:03:32.123" Score="8" Body="&lt;p&gt;Though supercat points out the built-in way of editing BASIC programs on the screen (well, machine language as well if you were doing it via the monitor and mini-assembler), there are better tools for this. Specifically, I was a big fan of GPLE from Beagle Bros. back in the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem that you run into with the screen editing method is that the listing of a BASIC program has certain indentations and sometimes in inconvenient places (e.g. in a quoted string). Though you can &lt;kbd&gt;ESC&lt;/kbd&gt; &lt;kbd&gt;I&lt;/kbd&gt;&lt;kbd&gt;J&lt;/kbd&gt;&lt;kbd&gt;K&lt;/kbd&gt;&lt;kbd&gt;M&lt;/kbd&gt;/&lt;kbd&gt;arrows&lt;/kbd&gt; to avoid this, it is still a bit of a hassle. As well, there is no insert/delete functions in the middle of the line, which GPLE handles for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another alternative is MD-BASIC from Morgan Davis. I never used it myself, but the idea is that you can write BASIC programs in an improved language from AppleSoft (e.g. labels instead of line numbers) and it will &quot;compile&quot; it down to tight AppleSoft.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2016-05-26T15:51:40.540" LastActivityDate="2016-05-26T15:51:40.540" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="570" PostTypeId="5" CreationDate="2016-05-19T17:03:35.920" Score="0" Body="&lt;p&gt;Applesoft BASIC (also known as FP BASIC) is a dialect of Microsoft BASIC that shipped with the Apple II series of computers.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-24T18:22:51.860" LastActivityDate="2016-05-24T18:22:51.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="571" PostTypeId="4" CreationDate="2016-05-19T17:03:35.920" Score="0" Body="For questions related to the Applesoft BASIC interpreter and language." OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-24T18:22:10.090" LastActivityDate="2016-05-24T18:22:10.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="572" PostTypeId="2" ParentId="551" CreationDate="2016-05-19T17:39:18.857" Score="5" Body="&lt;p&gt;One strategy is to find a similar, working laptop on your favorite auction site, plug the old hard drive in, then use a laplink cable (null-printer cable) to transfer the files to another computer using &lt;a href=&quot;http://www.pcxt-micro.com/dos-interlink.html&quot; rel=&quot;noreferrer&quot;&gt;Interlink&lt;/a&gt;, or a null modem cable to transfer them with your favorite terminal emulator (I used Telix and TeleMate).&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-05-19T17:39:18.857" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="573" PostTypeId="2" ParentId="494" CreationDate="2016-05-19T19:04:11.007" Score="10" Body="&lt;p&gt;In &lt;a href=&quot;http://www.easy68k.com/paulrsm/6502/INTLST.TXT&quot; rel=&quot;noreferrer&quot;&gt;this Integer BASIC disassembly&lt;/a&gt;, 202/203 ($CA/$CB) is &lt;code&gt;PP&lt;/code&gt; - &quot;ptr: start of program&quot;. It looks like they're changing the &quot;start of program&quot; location, then re-running it by doing a &lt;code&gt;GOTO 0&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is that there's a small BASIC program (the one you see at the start), then a chunk of assembly language that looks like junk when listed, then another small BASIC program (the one you see at the end).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'm not sure is why they don't just jump directly into the assembly routines… I might have to investigate further :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assembly language &lt;em&gt;was&lt;/em&gt; often included in BASIC programs though: although the &lt;a href=&quot;http://www.llx.com/~nparker/a2/shlam.html&quot; rel=&quot;noreferrer&quot;&gt;S. H. Lam Technique&lt;/a&gt; is for Applesoft BASIC, a slight variation works fine in Integer BASIC. It fills the keyboard buffer with keystrokes, then calls the monitor parse-and-process routine to execute the keystrokes as a monitor command.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 DIM H$(23):H$=&quot;300:AD 30 C0 60 N D9C6G&quot;&#xA;20 FOR X=1 TO LEN(H$): POKE 511+X, ASC(H$(X,X)): NEXT X&#xA;30 POKE 72,0: CALL -144&#xA;40 PRINT &quot;HELLO&quot;&#xA;50 END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Other programs found creative ways of embedding actual assembly code somehow into a BASIC program. Ivan Drucker's &lt;a href=&quot;https://youtu.be/QmRG-SVZHgc&quot; rel=&quot;noreferrer&quot;&gt;KansasFest talk&lt;/a&gt; on &lt;a href=&quot;http://ivanx.com/appleii/slammer/&quot; rel=&quot;noreferrer&quot;&gt;Slammer&lt;/a&gt; discusses a clever, modern variant of this technique.&lt;/p&gt;&#xA;" OwnerUserId="335" LastEditorUserId="335" LastEditDate="2016-05-20T19:41:43.893" LastActivityDate="2016-05-20T19:41:43.893" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="574" PostTypeId="1" AcceptedAnswerId="592" CreationDate="2016-05-19T19:15:21.230" Score="13" ViewCount="1363" Body="&lt;p&gt;This relates to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/97/how-to-move-sprites-to-the-border-on-c64&quot;&gt;another question&lt;/a&gt; about moving sprites to the border.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On my experience, sprites confuse the raster timings very badly. I found this especially problematic, if sprites were moved to the left and right border (because moving to top or bottom doesn't require so precise timings).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My impression were as if some, non-deterministic delay had been happen in the first pixel line of a sprite.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What exactly happened? How could it be compensated?&lt;/p&gt;&#xA;" OwnerUserId="129" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-05-20T18:01:10.803" Title="How to avoid sprites confusing the raster timings on C64?" Tags="&lt;commodore-64&gt;&lt;sprite&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="575" PostTypeId="2" ParentId="559" CreationDate="2016-05-19T19:24:37.790" Score="7" Body="&lt;p&gt;I got the same result -- it's a bug.  It does work at low-baud rate so you can use that as a workaround.  Type &lt;code&gt;L&lt;/code&gt; when the &lt;code&gt;Cass?&lt;/code&gt; prompt appears at startup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the output file the emulator is only saving the sync header of the saved program.  I tried this version 1.28, the most recent as of this writing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll send a bug report.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2016-05-19T19:24:37.790" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="576" PostTypeId="2" ParentId="562" CreationDate="2016-05-19T21:30:28.767" Score="1" Body="&lt;p&gt;I use a USD$35 generic &quot;HD Video Converter SCART/HDMI to HDMI 720P/1080P&quot; box (listed as &quot;HDV 8S&quot; on &lt;a href=&quot;http://retrogaming.hazard-city.de/&quot; rel=&quot;nofollow&quot;&gt;this page&lt;/a&gt;) which accepts composite through the SCART connector and supports both PAL and NTSC signals. Into that I've plugged a passive Composite-to-SCART adapter which also accepts L/R audio. This setup works with my French Amiga CD32.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://retrogaming.hazard-city.de/framemeister.html&quot; rel=&quot;nofollow&quot;&gt;XRGB-Mini scan doubler&lt;/a&gt; ($325+) is supposed to work better and add less lag, but the price!&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2016-05-20T07:02:42.110" LastActivityDate="2016-05-20T07:02:42.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="577" PostTypeId="1" AcceptedAnswerId="578" CreationDate="2016-05-19T21:36:13.930" Score="8" ViewCount="967" Body="&lt;p&gt;According to Intel's &lt;em&gt;8080-8085 Assembly Language Programming&lt;/em&gt; guide, the OP Code &lt;code&gt;20&lt;/code&gt; corresponds to the Read Interrupt Mask (RIM) instruction, and &lt;code&gt;30&lt;/code&gt; corresponds to the Set Interrupt Mask (SIM) instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zE5O7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zE5O7.png&quot; alt=&quot;RIM&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Em2ZP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Em2ZP.png&quot; alt=&quot;SIM&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/f2pC2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/f2pC2m.png&quot; alt=&quot;Instruction Set Guide&quot; title=&quot;click to enlarge&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But these interrupts were only available on the 8085. What did these instructions do on the earlier 8080 chipset? How do they work on the 8085?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T04:48:10.333" LastActivityDate="2016-08-09T17:37:05.907" Title="Intel 8080 Read/Set Interrupt Mask Instructions" Tags="&lt;assembly&gt;&lt;intel&gt;&lt;8080&gt;&lt;8085&gt;&lt;intel-8080&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="578" PostTypeId="2" ParentId="577" CreationDate="2016-05-19T21:36:13.930" Score="11" Body="&lt;p&gt;The 8085 added two new instruction functions: SIM and RIM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These instructions differ from the 8080 instructions in that each has multiple functions.  The SIM instruction sets the interrupt mask and optionally writes one bit of data to the serial interface.  The RIM instruction reads one bit from the serial interface (if one is present) and the interrupt mask into register A, the accumulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also differences with regard to signal processing signal processing.  The new RST5.5, RST6.5, and RST7.5 hardware interrupts take priority over the Interrupt line at pin 14, the only interrupt on the 8080.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These instructions are NOPs on the 8080.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-19T21:50:55.243" LastActivityDate="2016-05-19T21:50:55.243" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="579" PostTypeId="2" ParentId="577" CreationDate="2016-05-19T21:48:28.150" Score="6" Body="&lt;p&gt;To answer your specific question, the 0x20 and 0x30 opcodes on the 8080 were undefined.  In practice they were equivalent to NOP (0x00).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A handy table of 8080 instructions can be found here:&#xA;&lt;a href=&quot;http://pastraiser.com/cpu/i8080/i8080_opcodes.html&quot; rel=&quot;nofollow&quot;&gt;http://pastraiser.com/cpu/i8080/i8080_opcodes.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="621" LastEditDate="2016-08-09T17:37:05.907" LastActivityDate="2016-08-09T17:37:05.907" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="580" PostTypeId="2" ParentId="562" CreationDate="2016-05-19T22:59:19.817" Score="4" Body="&lt;p&gt;I can think of several options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The hardest one (because it is still WIP) is to remove the PAL ULA and get a NTSC ULA. NTSC ULA's existed for some clones intended for the American market. Today they are very rare chips.&#xA;However, there are some projects that aim to design a direct replacement ULA using programable logic. These projects may support NTSC output with no effort. Besides, you would need to change the 4.43 MHz crystal with a 3.57 MHz one, and possibly some passives that belong to the LM1889 circuit.&#xA;This option, once such replacement ULAs become available, has the advantage of having everything inside the case, with no extra equipment, so you end up with a true NTSC system, with 60 Hz vertical refresh. However, the main inconvenient is that games and demos expect vertical interrupt to occur every 20ms, or 69888 CPU clock cycles. Some of them rely on these timings to perform various multicolor effects, or achieve flicker-free sprite animation.&#xA;As of today, the only ULA replacement readily available is from &lt;a href=&quot;http://www.retroleum.co.uk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Retroleum&lt;/a&gt;, and it is called Nebula. According to their FAQ they don't have plans for NTSC support, though.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NX60b.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NX60b.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/O6t6m.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O6t6m.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It's a pity you don't have a SCART input in your TVs, as this tend to be very flexible with video timings, and as there is no modulation, but pure RGB, you actually get colour. In case you might have a TV with SCART inputs, &lt;a href=&quot;http://www.fruitcake.plus.com/Sinclair/Spectrum/Spectra/SpectraInterface.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Spectra interface&lt;/a&gt; is able to generate a clean RGB signal from a Spectrum 48K, no matter if it has the composite mod applied or not.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yAVt9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yAVt9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The remaining options are actually variations of the same idea: to convert the PAL composite video signal into a format understable by equipment available in America. AFAIK, American TVs understand composite video, YPrPb and HDMI, with some of them understanding VGA as well.&#xA;These devices perform a full frame upscaling. That is: there is a memory that serves as frame buffer, actually, with enough capacity to hold two frames. The premise is that while the image from the composite video input is being stored in one frame buffer, the other one is being read at the required speed for the output image to be rendered.&#xA;The advantage with this approach is that no matter the format or timings of the input image may have, the output image will have timings that will match your equipment. The disadvantage is that vertical refresh frequency won't be the same (specially if the input is PAL, which operates at 50 fields per second), so both frame producer and frame consumer won't be able to be in sync and sometimes, a frame that is being read by the frame consumer to produce the output will be rewritten in the middle of the operation by the frame producer, causing some &lt;a href=&quot;https://en.wikipedia.org/wiki/Screen_tearing&quot; rel=&quot;nofollow noreferrer&quot;&gt;tearing&lt;/a&gt; that may be visible if the screen features full screen animation such as full screen scrolling.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There is this device. It is small, and is able to convert a composite video signal, either NTSC or PAL, into VGA, with the user having several choices about what resolution and refresh the outputted image will have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ajpBk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ajpBk.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Y0YJ2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y0YJ2.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here you can see that I am feeding the converter with a PAL signal from a PAL C64, while the output signal is rated for 75 Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gJGPu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gJGPu.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this is the menu from which you can change the output resolution to better match your monitor's native resolution, if possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/I8F2z.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I8F2z.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Analogously, there are converters from composite video signal to YPbPr or HDMI. All of these are upscalers, and hence, will suffer from the tearing effect described above.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-05-19T22:59:19.817" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="581" PostTypeId="2" ParentId="562" CreationDate="2016-05-19T23:02:24.080" Score="1" Body="&lt;p&gt;I highly recommend the XRGB-Mini (it's often called &quot;framemeister&quot;) - got one for my Commodore's and it works flawlessly. I'm in Japan but all my computers are PAL versions (on purpose).&#xA;The device is expensive, but if you start buying various adapters for a test you're likely to waste a lot of time and money anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're using a regular TV - any HDMI converter box might work, but you need to ensure your TV has 4:3/16:9 aspect ratio selection as HDMI by default is 16:9 - I have one of such boxes and my PC monitor has no aspect ratio selection so I retired it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, modern TV-sets are multi system anyway, even if the manual doesn't mention it (the chips are almost always multi system), it turned out that my TV-set supports PAL flawlessly, and ironically the manual specifically mentions that it only supports NTSC.&lt;/p&gt;&#xA;" OwnerUserId="367" LastActivityDate="2016-05-19T23:02:24.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="582" PostTypeId="1" AcceptedAnswerId="583" CreationDate="2016-05-20T01:26:23.093" Score="11" ViewCount="1563" Body="&lt;p&gt;The SGI O2 has a standard VGA port, but when I connect it to a CRT computer monitor, I do not get a signal.  Do I need a specific kind of monitor in order to use the O2?&lt;/p&gt;&#xA;" OwnerUserId="64" LastActivityDate="2016-05-20T01:31:33.397" Title="What kind of computer monitor do I need for a SGI O2?" Tags="&lt;display&gt;&lt;sgi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="583" PostTypeId="2" ParentId="582" CreationDate="2016-05-20T01:31:33.397" Score="12" Body="&lt;p&gt;It needs to be sync-on-green capable (any good monitor should have this mentioned in the specs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But even then you may have issues, I have a few O2's and I have observed that sometimes one of my monitors (Dell U2410, SOG capable) really distorts the colors (towards green), replugging the cable solves the issue. I had no issues with an Octane with 13W3-&gt;VGA cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There &lt;em&gt;are&lt;/em&gt; devices on the market that can help, called sync stripper - such device could remove the sync signal from green channel and put it on the regular VGA sync line, but it might be cheaper to buy an old 15-17 inch monitor that supports SOG by default. (O2 won't do anything more than 1600x1200 without extreme tweaks anyway).&lt;/p&gt;&#xA;" OwnerUserId="367" LastActivityDate="2016-05-20T01:31:33.397" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="584" PostTypeId="5" CreationDate="2016-05-20T02:10:30.587" Score="0" Body="&lt;p&gt;Use this tag for questions related to programs loaded from read-only memory cartridges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related tags:&#xA;&lt;a href=&quot;/questions/tagged/rom&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;rom&amp;#39;&quot; rel=&quot;tag&quot;&gt;rom&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/floppy-disk&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;floppy-disk&amp;#39;&quot; rel=&quot;tag&quot;&gt;floppy-disk&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-24T18:21:10.820" LastActivityDate="2016-05-24T18:21:10.820" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="585" PostTypeId="4" CreationDate="2016-05-20T02:10:30.587" Score="0" Body="For questions related to cartridge-based games and applications" OwnerUserId="621" LastEditorUserId="7208" LastEditDate="2019-10-10T23:52:23.447" LastActivityDate="2019-10-10T23:52:23.447" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="586" PostTypeId="1" AcceptedAnswerId="590" CreationDate="2016-05-20T05:35:44.877" Score="17" ViewCount="971" Body="&lt;p&gt;I was browsing through tcrf.net, which specializes in displaying unused programming and content left in games by developers, and came across this page:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://tcrf.net/Tank&quot;&gt;https://tcrf.net/Tank&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, the following paragraph:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Tank is the first known arcade game to use solid-state ROM (in this case, a&#xA;tiny 2KB Mostek MK28000 chip) to store data. As such, it's the earliest&#xA;possible arcade game on this site and the oldest game on the site in general.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This gives me the impression that this is the first possible arcade game (possibly earliest game period) that can have unused programming because of its solid-state ROM, and by consequence a game cannot have unused content without solid-state ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, what is the justification for this assertion? What's special about solid-state ROM that allows it to store unused content on a machine where a machine without it could still function but be guaranteed to only store content that the player can access?&lt;/p&gt;&#xA;" OwnerUserId="644" LastEditorUserId="276" LastEditDate="2016-12-22T12:54:45.280" LastActivityDate="2016-12-22T12:54:45.280" Title="What is the relationship between solid-state ROM and inaccessible content in arcade games?" Tags="&lt;rom&gt;&lt;gaming&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="587" PostTypeId="1" AcceptedAnswerId="589" CreationDate="2016-05-20T06:59:45.393" Score="14" ViewCount="754" Body="&lt;p&gt;I was researching the BBC Micro when I found the Sideways address space: a 16KiB memory space allowing access to up to 16 16KiB external blocks of ROM (or RAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But 16 blocks of 16KiB is 256KiB, which is larger than the memory space itself! How did this work?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="276" LastEditDate="2016-05-24T15:36:00.233" LastActivityDate="2016-05-24T15:36:00.233" Title="How did the Sideways address space work?" Tags="&lt;memory-layout&gt;&lt;acorn&gt;&lt;bbc-micro&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="588" PostTypeId="2" ParentId="553" CreationDate="2016-05-20T08:33:46.640" Score="12" Body="&lt;p&gt;Just wanted to add a historical note (as this is  &lt;strong&gt;retro&lt;/strong&gt; computing). All Manchester computers from the earliest days generated sound by attaching a speaker to a single bit of a register (usually the accumulator).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This sound was used to  monitor the activity in the machine; because it if crashed or halted unexpectedly the sound would cease and if it was stuck in an infinite loop a characteristic whine would be produced which would alert the operators. From the Manchester Mark I through to MU5 the machine halls were alive with the sounds of the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most users became accustomed to the patterns of sound produced and could tell one kind of software from another by the sound patterns produced, the sound of a compile was different from the sound of a sort, for example. It was also clear very early on that although a single bit flip produced the sound that sophisticated sound patterns of a polyphonic nature could be perceived from it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It did not take long for the many musicians working with the computers to turn this to musical use, and from that time all Manchester computers could sing. The main technique used was time multiplexing as previously described by @mcleod_ideafix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A very &lt;a href=&quot;http://curation.cs.manchester.ac.uk/digital60/www.digital60.org/media/mark_one_digital_music/mark_one_digital_music.mp3&quot;&gt;early recording&lt;/a&gt; exists from 1951 of this, and the origins of early sound from Manchester Computers can be read &lt;a href=&quot;http://www.manchester.ac.uk/discover/news/article/?id=3754&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;&lt;sup&gt;BCT's Historical Sock Puppet Account&lt;/sup&gt;&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="651" LastActivityDate="2016-05-20T08:33:46.640" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="589" PostTypeId="2" ParentId="587" CreationDate="2016-05-20T09:16:49.450" Score="25" Body="&lt;p&gt;Sideways ROM (also RAM in later models) was paged into the processor's address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sideways memory sat in the address range from $8000 to $BFFF.  The BBC Model B had four slots on the motherboard into which EPROMs could be put to occupy this space.  One of the slots was reserved for BBC Basic.  Expansion boards could be purchased to expand this to 16 slots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A hardware register at address $FE30 (mirrored on Page 0 address $00F4) would switch one of the 16 EPROMs into the address space of the processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each of the 16 slots was allocated a section of non-paged memory in which it could keep its own status.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 16 blocks were used primarily for language ROMs.  As stated, one was the main BBC Basic ROM, others such as LISP, FORTH, etc were available.  The other use was for filing systems.  The Acorn DFS (Disk Filing System) for example would sit in one of these slots.  Only one language could be active at a time but there could be multiple filing systems active.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On boot, the OS would interrogate each of the slots to see if it was occupied and would call an initialisation routine within each slot.  A table of populated slots was set up at $02A1 - $02B0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To identify itself to this interrogation, the first few bytes of the ROM had to comply with a set format:  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00-02 - Language entry (initialisation)  &#xA;03-05 - Service entry  &#xA;06 - ROM Type (Language / Filing System / Second Processor)  &#xA;07 - Offset to copyright statement  &#xA;08 - Version number  &#xA;09-xx - Title&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Sideways ROMs could intercept software interrupts and post callback handlers.&lt;br&gt;&#xA;At initialisation, they could reserve a section of the main RAM for their own use.  This would be reserved for the ROM by the OS, starting at address $0E00. raising the OSHWM (Operating System High Water Mark) and reducing the working RAM available for the loading and operating of programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calls into the ROMs executed a jump to the Service Entry with an entry code in the Accumulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sideways memory concept enabled the 64k addressing capability of the 6502 processor to be greatly expanded.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-05-20T10:23:53.970" LastActivityDate="2016-05-20T10:23:53.970" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="590" PostTypeId="2" ParentId="586" CreationDate="2016-05-20T09:36:38.567" Score="30" Body="&lt;p&gt;Excess capacity.  ROM chips come in standard sizes based on powers of 2 and it is quite unlikely a particular size will be exactly what a game needs.  For example, suppose a game displays numbers that are 8 x 8 pixels in size.  It will need the digits from 0 to 9, each digit needs 64 bits so a ROM of 640 bits is required.  That could be accommodated with a 512 bit and 128 bit ROM, but in terms of support circuitry, assembly costs and so on it likely is cheaper to use a 1024 bit ROM and not use the extra 384 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nonetheless, it is possible to have excess capacity without using ROMs.  But such hand-rolled solutions will naturally avoid wasting components.  Consider the arcade game Space Race.  Here's a screenshot of it in action:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wEeKk.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wEeKk.png&quot; alt=&quot;Space Race with two little rockets&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game does not have a ROM.  Instead, it uses a grid of wires to represent the rocketship picture and connects them wherever there is to be a white dot.  You can see it this subset of the schematic:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eLaK5.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eLaK5.png&quot; alt=&quot;Wiring Schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Isn't that just wonderful?  Notice how not a dot is wasted.  They were even clever enough to lay down only half of the rocketship and use extra circuitry to display the mirror image of it to draw the right side of the ship.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might ask if the score digits are stored in a wire grid.  They are not.  In fact, they're done by using a special-purpose chip used in handheld calculators that converts a binary number from 0 to 9 into 7 output bits that control the 7 line segments that make up the number.  That binary number is sent to the chip using 4 wires which is actually 16 combinations.  The game will only send combinations 0 through 9, what would happen if 10 through 15 were sent?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What, indeed?  It depends on the chips used, but let's say for the sake of argument that the chip will do something useful with those numbers.  Maybe light up segments that look like the letters A through F.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aha!  In that case the game has unused content!  It's pretty boring unused content, but unused content nonetheless and not a ROM in sight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nonetheless, I think it is fair and reasonable to discount these cases.  And practical, too..  ROM chips have another advantage.  We can look at their contents and figure out within the context of the hardware and software what images, audio, etc. they represent.  We can do that with the chips on board, but they're all special cases requiring familiarity which each individual chip and how it is connected.  A much more difficult proposition and as I've mentioned before, very unlikely to yield much of interest.&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="276" LastEditDate="2016-12-21T10:54:48.023" LastActivityDate="2016-12-21T10:54:48.023" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="591" PostTypeId="2" ParentId="586" CreationDate="2016-05-20T09:38:29.847" Score="5" Body="&lt;p&gt;I'm not sure of what is exactly what you are asking, but I will try:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solid-state ROMs (and solid/state memories in general) are not built the size you desire, but they came always (afaik) with sizes that are powers of 2. This is because these memories are addressed using a binary number with N bits; with N bits you can represent 2^N memory cells, so the capacity is always a power of 2. Often, the physical layout of these memories is a square, so not every power of 2 is available. Often, the exponent of the power is required to be even. That is because it's very common to have 16k DRAMs, 64k DRAMs, and 256k DRAMs but it's much less common to find 32k or 128k DRAMs (which usually are built by recycling defective 64k and 256k DRAMs)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So although you (and the CPU) sees memory as a more or less large linear array of bytes, the actual layout is more a square, so every size is available. Only those that allow such physical layout to be designed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But your program size does not need to be a power of 2. In fact, it's very common that the size will be any number, so when you store the program into the ROM, there will be always some unused cells.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These cells, for masked and EPROM ROMs, are simply not &quot;programmed&quot; (or burned) and will likely have the value $FF (all 1's because to burn a bit is to blow some kind of fuse that turns a logic-1 connection into a 0-logic connection, so non burned bits will have all the value 1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For ROM containing boot code, OS entry points and so on, is very common to have &quot;gaps&quot; inside it. That is, regions with nothing more than $FF surrounded by regions with actual code and data. These gaps are the result of the OS needing to have specific code in specific addresses (like a NMI handler, jump tables, LUT tables at 256-byte boundaries to allow for fast translation, etc)&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-05-20T09:38:29.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="592" PostTypeId="2" ParentId="574" CreationDate="2016-05-20T10:41:38.223" Score="15" Body="&lt;p&gt;Here are some extraction from an article: &lt;code&gt;Missing Cycles&lt;/code&gt; by &lt;strong&gt;Pasi 'Albert' Ojala&lt;/strong&gt;. In short, &lt;code&gt;VIC&lt;/code&gt; needs to fetch the sprite data from memory. For each sprite it needs to fetch 3 bytes (one line of sprite shape) for each scanline.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If there are sprites on the screen, the VIC needs even more cycles to&#xA;  fetch all of the graphics data. Scan lines are time divided so that&#xA;  there is enough time for all action during one line. On each line, the&#xA;  sprite image pointers are fetched during phase 1. If the sprite is to&#xA;  be displayed on that line, the three bytes of image data are fetched&#xA;  right after that. Out of these three fetches, two take place during&#xA;  phase 2 of the clock, so the processor will lose these. On average,&#xA;  two clock cycles are lost for each sprite that is displayed on that&#xA;  line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The most interesting part is that it should take 24 cycles (8 sprites * 3 bytes), but in fact it takes only 16-19 cycles. This is caused by special case of sharing the &lt;code&gt;bus&lt;/code&gt; between &lt;code&gt;VIC&lt;/code&gt; and &lt;code&gt;CPU&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When the VIC wants to use the bus, the BA (Bus Available) signal goes&#xA;  inactive. This will happen three cycles before the bus must be&#xA;  released ! During these three cycles, the CPU must complete all memory&#xA;  accesses or delay them until it has the bus again.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The CPU either completes the current instruction in the remaining&#xA;  cycles or sits and waits for the bus to become available again. It&#xA;  can't execute a new instruction as long as it doesn't have the bus.&#xA;  This is why cycles seem to be lost (besides those stolen directly for&#xA;  the sprites). Usually, all 8 sprites take 17 cycles while one sprite&#xA;  takes three cycles. However, the CPU may continue to execute an&#xA;  instruction if it does not use the bus.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So &lt;code&gt;VIC&lt;/code&gt; is 'stealing' some cycles. Here are some examples:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Let's suppose that all the sprites are enabled and on the same scan&#xA;  line. Then, the VIC steals 16 cycles (2 cycles for each sprite) for&#xA;  the memory fetches and 3 cycles as overhead for the BA signal, for a&#xA;  total of 19 cycles. However, it will be usually less because the CPU&#xA;  will use some of the cycles when the bus request is pending.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If we now disable sprite 4, no cycles are released for the CPU's use.&#xA;  This is because during the previous sprite 4 data fetch, the VIC&#xA;  already signals that it needs the bus for the sprite 5 data fetch and&#xA;  BA stays low (Refer to the timing chart). Thus, the CPU never sees BA&#xA;  go high during sprite 4 and 2 cycles are still lost.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Accordingly, if we only turn off sprites 1, 3 and 5 we get no cycles&#xA;  back from the VIC. So in time-critical raster routines, always use&#xA;  sprites in order.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And the concluding timing table for missing cycles:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;012345678901234567890123456789012345678901234567890123456789012 cycles&#xA;&#xA;Normal scan line, 0 sprites&#xA;ggggggggggggggggggggggggggggggggggggggggrrrrr  p p p p p p p p  phi-1 VIC&#xA;                                                                phi-2 VIC&#xA;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx phi-2 6510&#xA;63 cycles available&#xA;&#xA;Normal scan line, 8 sprites&#xA;ggggggggggggggggggggggggggggggggggggggggrrrrr  pspspspspspspsps phi-1 VIC&#xA;                                               ssssssssssssssss phi-2 VIC&#xA;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXXX                 phi-2 6510&#xA;46-49 cycles available&#xA;&#xA;Normal scan line, 4 sprites&#xA;ggggggggggggggggggggggggggggggggggggggggrrrrr  psp psp psp psp  phi-1 VIC&#xA;                                               ss  ss  ss  ss   phi-2 VIC&#xA;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXXX              xx phi-2 6510&#xA;48-51 cycles available&#xA;&#xA;Bad scan line, 0 sprites&#xA;ggggggggggggggggggggggggggggggggggggggggrrrrr  p p p p p p p p  phi-1 VIC&#xA;cccccccccccccccccccccccccccccccccccccccc                        phi-2 VIC&#xA;                                        xxxxxxxxxxxxxxxxxxxxxxx phi-2 6510&#xA;23 cycles available&#xA;&#xA;Bad scan line, 8 sprites&#xA;ggggggggggggggggggggggggggggggggggggggggrrrrr  pspspspspspspsps phi-1 VIC&#xA;cccccccccccccccccccccccccccccccccccccccc       ssssssssssssssss phi-2 VIC&#xA;                                        xxxxXXX                 phi-2 6510&#xA;4-7 cycles available&#xA;&#xA;&#xA;g= grafix data fetch (character images or graphics data)&#xA;r= refresh&#xA;p= sprite image pointer fetch&#xA;c= character and color CODE fetch during a bad scan line&#xA;s= sprite data fetch&#xA;x= processor executing instructions&#xA;X= processor executing an instruction, bus request pending&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can use it to synchronize raster line using sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information (including demonstration program), please refer to the full article: &lt;a href=&quot;http://www.antimon.org/dl/c64/code/missing.txt&quot;&gt;&lt;strong&gt;&quot;Missing Cycles&quot; by Pasi 'Albert' Ojala&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="423" LastEditorUserId="423" LastEditDate="2016-05-20T18:01:10.803" LastActivityDate="2016-05-20T18:01:10.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="593" PostTypeId="2" ParentId="586" CreationDate="2016-05-20T15:38:50.090" Score="2" Body="&lt;p&gt;Another thought:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When most people refer to &quot;unused content&quot; in games, they're traditionally referring to UI changes.  But what about unused memory addresses or the values at that memory?  What about debugging information.  Ideally, most debugging symbols and information would be stripped for release, but this is not always the case.  Let's look at the &lt;a href=&quot;http://drewseph.zophar.net/Kejardon/RAMMap.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;Super Metroid memory map&lt;/a&gt; as an example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;7E:008D - 7E:008E    Controller 2 Input. ALL Controller 2 Unused (Debug mode)&#xA;# ...&#xA;7E:05D5 - 7E:05D6    Saved X-Scroll position ($0911). Unused (Debug mode)&#xA;7E:05D7 - 7E:05D8    Saved Y-Scroll position ($0915). Unused (Debug mode)&#xA;# ...&#xA;7E:0617 - 7E:0618    0 = allow Soft Reset via Start+Select+L+R. Unused (Debug mode)&#xA;# ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would say it is unlikely for a game like Space Race to include this type of information.  Games that use an array of diodes have their circuitry are constructed by hand, and for production the circuits are changed to remove any unused debug logic, if they ever had any.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Let's look at a memory map and crash in the production version of MechWarrior for the SNES:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0tSAt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0tSAtm.jpg&quot; alt=&quot;MechWarrior Memory Map&quot; title=&quot;click to enlarge&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally, this screen will never be shown in production under normal circumstances (without directly modifying the hardware and/or software), and could potentially be considered inaccessible content.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea of using/logging memory locations, or presenting this type of memory map to the user is a benefit of using ROM-based memory over diodes.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-21T11:51:15.293" LastActivityDate="2016-05-21T11:51:15.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="594" PostTypeId="5" CreationDate="2016-05-20T15:49:51.343" Score="0" Body="&lt;p&gt;Use this tag for specific questions about the TRS-80 Model III.  For other models or generic TRS-80 questions, use a more generic tag.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-24T18:23:22.360" LastActivityDate="2016-05-24T18:23:22.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="595" PostTypeId="4" CreationDate="2016-05-20T15:49:51.343" Score="0" Body="For questions regarding the TRS-80 Micro Computer System Model III computer sold by Tandy Corporation" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-24T18:21:18.850" LastActivityDate="2016-05-24T18:21:18.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="596" PostTypeId="1" CreationDate="2016-05-20T17:45:22.560" Score="1" ViewCount="184" Body="&lt;p&gt;&lt;strong&gt;(Note: I am referring to &lt;em&gt;software&lt;/em&gt; that would run on an &lt;em&gt;end-users'&lt;/em&gt; system, not special debugging computers)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Debuggers are programs that poke around at other programs' memory. In modern computers they rely on the ability for multiple programs to run at once, abundance of memory and, most importantly, dynamic allocation: an ordinary program only having access to memory it's reserved, which other programs can't simultaneously use for different purposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, retro-computers didn't have these features: except using interrupts (passing control back and forth), programs couldn't run simultaneously. Programs had access to all the memory: there was no way to tell what memory was and wasn't used, therefore knowing where to load the debugger. And even if there was a way to know that, many programs used most or all of the memory in a computer, leaving no place for the debugger to run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yet debugging software &lt;em&gt;did&lt;/em&gt; exist, such as the DDT series, the ODT series, OLIVER, SIMON, CA/EZTEST and much of the XPEDITER series. My question is: how did they work?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How did they load themselves into memory without conflict?&lt;/li&gt;&#xA;&lt;li&gt;How did they implement single-stepping?&lt;/li&gt;&#xA;&lt;li&gt;How did they ensure that they weren't overwritten?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2016-05-21T07:59:56.383" LastActivityDate="2016-05-21T07:59:56.383" Title="How did debuggers work?" Tags="&lt;debug&gt;" AnswerCount="0" CommentCount="13" FavoriteCount="0" ClosedDate="2016-05-20T21:23:30.297" ContentLicense="CC BY-SA 3.0" />
  <row Id="597" PostTypeId="2" ParentId="551" CreationDate="2016-05-20T18:31:11.783" Score="14" Body="&lt;p&gt;That Conner CP-343 drive appears to be a special snowflake, but it's not.  It's actually a standard IDE drive, with one exception.  That 20-pin interface you're looking at isn't the IDE connector; it's the connector between the drive mechanicals and the controller board that would normally be mounted to the bottom of the drive.  Why it's not affixed to the bottom of the drive as normal for IDE drives I can only guess. (Space saving considerations?  Reducing the weight of the drive assembly for shock resistance?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best information I've been able to find indicates that at the other end of that cable you should find the actual controller board for the drive, plugged into a standard 40-pin IDE socket on the motherboard.  You should be able to remove the controller from the IDE socket and plug it into a standard IDE cable in another machine to recover the data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the IDE connector on the Zenith SupersPORT 286 laptop is slightly non-standard, but that should only affect things if you're trying to get another drive working with the laptop itself and shouldn't make a difference for recovering data from the CP-343.  &lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.sys.zenith/ABBuMFnjRZ4&quot; rel=&quot;nofollow noreferrer&quot;&gt;Discussion of Zenith IDE interface.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; It looks like the CP-343 itself is slightly out of spec for IDE.  I found a reference to this in the document I linked before &quot;&lt;strong&gt;Pin 39 on the CP343 must be HIGH if BUSY&lt;/strong&gt;&quot; and checking the IDE spec, pin 39 is normally active-low.  I think an inverter might have to be added on that line to get this drive to work on a standard IDE interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something else to watch out for, although I think you have the SS286, not the 286e so you should be okay:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SuperSPORT-286 HARD DRIVE Power Connectors on Power Supply:&#xA;             SS286 Connector            SS-286e Connector  &#xA;                 +5v            Top       Ground            &#xA;               Ground            .        +12v              &#xA;               Ground            .        +5v                &#xA;                 +12v          Bottom                        &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="320" LastEditorUserId="7946" LastEditDate="2019-11-01T13:06:25.927" LastActivityDate="2019-11-01T13:06:25.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="598" PostTypeId="5" CreationDate="2016-05-20T20:02:25.713" Score="0" Body="&lt;p&gt;For questions specifically regarding the 8080 processor, manufactured by Intel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related tags and processors:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;/questions/tagged/intel-8080&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;intel-8080&amp;#39;&quot; rel=&quot;tag&quot;&gt;intel-8080&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/8008&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8008&amp;#39;&quot; rel=&quot;tag&quot;&gt;8008&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/8085&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8085&amp;#39;&quot; rel=&quot;tag&quot;&gt;8085&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/8086&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8086&amp;#39;&quot; rel=&quot;tag&quot;&gt;8086&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/8088&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8088&amp;#39;&quot; rel=&quot;tag&quot;&gt;8088&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-12-21T12:30:56.753" LastActivityDate="2016-12-21T12:30:56.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="599" PostTypeId="4" CreationDate="2016-05-20T20:02:25.713" Score="0" Body="For questions about the Intel 8080 8-bit microprocessor" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-12-21T12:30:56.753" LastActivityDate="2016-12-21T12:30:56.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="600" PostTypeId="5" CreationDate="2016-05-20T20:03:28.967" Score="0" Body="&lt;p&gt;Related tags and processors:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;/questions/tagged/intel-8080&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;intel-8080&amp;#39;&quot; rel=&quot;tag&quot;&gt;intel-8080&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/8008&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8008&amp;#39;&quot; rel=&quot;tag&quot;&gt;8008&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/8085&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8085&amp;#39;&quot; rel=&quot;tag&quot;&gt;8085&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/8086&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8086&amp;#39;&quot; rel=&quot;tag&quot;&gt;8086&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/8088&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8088&amp;#39;&quot; rel=&quot;tag&quot;&gt;8088&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-24T18:22:39.263" LastActivityDate="2016-05-24T18:22:39.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="601" PostTypeId="4" CreationDate="2016-05-20T20:03:28.967" Score="0" Body="For questions about the 8085 8-bit microprocessor" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-24T18:21:01.567" LastActivityDate="2016-05-24T18:21:01.567" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="602" PostTypeId="2" ParentId="515" CreationDate="2016-05-21T00:02:27.080" Score="4" Body="&lt;p&gt;The manual asks for a &quot;tee&quot; connector - that's a simple wire connection without any logic inside (and equivalent to monitor passthrough that's also supported).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can safely use an Y-cable instead.&lt;/p&gt;&#xA;" OwnerUserId="367" LastActivityDate="2016-05-21T00:02:27.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="603" PostTypeId="1" AcceptedAnswerId="604" CreationDate="2016-05-21T03:25:13.830" Score="8" ViewCount="317" Body="&lt;p&gt;Are there any trapdoor slot video cards for a non-tower Amiga 1200 ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(That excludes Zorro expansion cards, PCI mediator cards and BlizzardPPC+BVision - as all of those require tower case,&#xA;also excludes upcoming vampire for A1200, indivision and scandoublers )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not - then what would it take to make one ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is partially inspired by recently released video card for A2000 by mntmn.&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="11916" LastEditDate="2019-04-08T20:57:38.887" LastActivityDate="2019-04-08T20:57:38.887" Title="Are there any trapdoor slot video cards for a non-tower Amiga 1200?" Tags="&lt;amiga&gt;&lt;video&gt;&lt;amiga-1200&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="604" PostTypeId="2" ParentId="603" CreationDate="2016-05-21T03:52:27.927" Score="5" Body="&lt;p&gt;The Indivision AGA doesn't attach to the trapdoor slot, but it also doesn't need a tower case because it attaches to the Lisa chip. (In a way, this is better than a trapdoor video card because it leaves the trapdoor available for accelerators.) It gives you video modes up to 1280x1024x256 colors, but for me it glitches at that resolution so I use 1024x768 or 1280x720.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it has no 3-D support. Basically it's just a scan doubler with additional resolutions and DVI output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I change my answer: BlizzardVisionPPC + Blizzard603e/e+ + an upgraded power supply and maybe some extra vents in your desktop case. This has 24-bit color and 3D, and goes up to 1280x1024x24bpp or 1600x1200x16bpp.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2016-05-21T04:13:33.123" LastActivityDate="2016-05-21T04:13:33.123" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="605" PostTypeId="1" AcceptedAnswerId="2830" CreationDate="2016-05-21T13:30:41.540" Score="54" ViewCount="6949" Body="&lt;p&gt;I would quite like to resurrect my &lt;a href=&quot;https://github.com/mooli/openkick&quot; rel=&quot;noreferrer&quot;&gt;openkick&lt;/a&gt; project. As I note on that project's &lt;a href=&quot;https://github.com/mooli/openkick/blob/master/README.md&quot; rel=&quot;noreferrer&quot;&gt;README.md&lt;/a&gt;, it is stalled because GNU GCC is not fit for purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sadly, there do not seem to be any other modern compilers which still have (or ever had) m68k support. The LLVM backend appeared to be my best bet but the architecture-specific code-generator is woefully underdocumented and rather brittle and my attempts to add a m68k backend are not promising. There are already a handful of incomplete m68k backends on github (e.g. &lt;a href=&quot;https://github.com/kwaters/llvm-m68k&quot; rel=&quot;noreferrer&quot;&gt;kwaters/llvm-m68k&lt;/a&gt;, &lt;a href=&quot;https://github.com/SamuraiCrow/llvm-m68k&quot; rel=&quot;noreferrer&quot;&gt;SamuraiCrow/llvm-m68k&lt;/a&gt; and &lt;a href=&quot;https://github.com/PeyloW/llvm&quot; rel=&quot;noreferrer&quot;&gt;Peylow/llvm&lt;/a&gt;), but those can barely even process trivial straight-line code and are on a par with my own efforts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is there another solution that I've missed? There seem to be (at least) three options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Find a port of gcc that supports regparm on m68k &lt;em&gt;and&lt;/em&gt; actually pays attention to &lt;code&gt;-fomit-frame-pointer&lt;/code&gt; so that it doesn't interfere with the Amiga's standard library-calling convention;&lt;/li&gt;&#xA;&lt;li&gt;Find a more complete m68k backend for LLVM; or&lt;/li&gt;&#xA;&lt;li&gt;Find another compiler that has a decent m68k backend.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would strongly prefer that the compiler understand C++11, which both GCC and clang support, and can be made to run on MacOS. I can backport my code to C++98 if necessary, but booting up an emulator or VM to run some obscure ancient executables would foul up my workflow.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edit 2016-05-22 1314 CEST:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/64/rrrzx&quot;&gt;rrrzx&lt;/a&gt; pointed out &lt;a href=&quot;https://en.wikipedia.org/wiki/Vbcc&quot; rel=&quot;noreferrer&quot;&gt;vbcc&lt;/a&gt; in a comment, so I gave it a spin. The upside is that it supports register parameters and doesn't take A6 for its own purposes, so it &lt;em&gt;can&lt;/em&gt; be used to cross-compile Amiga binaries without having to fight the compiler as is the case with gcc. The downside is that it is C-only, and its optimiser and code generator are pretty dire.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edit 2018-08-18 1817 CEST:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My eventual solution was to bodge regparm support into gcc, and it has proven reliable enough for my purposes. You can find it in the &lt;a href=&quot;https://github.com/mooli/gcc-amiga/&quot; rel=&quot;noreferrer&quot;&gt;mooli/gcc-amiga&lt;/a&gt; repository on GitHub.&lt;/p&gt;&#xA;" OwnerUserId="80" LastEditorUserId="80" LastEditDate="2018-08-18T16:21:23.347" LastActivityDate="2019-04-25T10:38:04.837" Title="Are there any modern compilers that can generate Amiga/m68k executables?" Tags="&lt;amiga&gt;&lt;assembly&gt;&lt;m68k&gt;" AnswerCount="7" CommentCount="11" FavoriteCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="606" PostTypeId="1" AcceptedAnswerId="610" CreationDate="2016-05-22T03:10:41.200" Score="19" ViewCount="3598" Body="&lt;p&gt;There seems to be a lot of discussion online about the development hardware used to create Nintendo 64 titles: SGI Indy &quot;pizza box&quot; workstations, SGI's custom Ultra 64 development boards (aka &quot;DEVELOPMNET&quot; boards), and testing using a modified Sega Saturn controller before the N64 controller specs had been completed.  But I can't find too much information about the development software used on these machines.  Was it custom built by SGI?  Was it similar to tools like CodeWarrior or C++ Builder?&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-05-23T21:22:17.127" Title="What kind of software was used to develop Nintendo 64 titles?" Tags="&lt;software&gt;&lt;nintendo&gt;&lt;nintendo-64&gt;&lt;software-development-kit&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="608" PostTypeId="2" ParentId="161" CreationDate="2016-05-22T17:02:52.450" Score="12" Body="&lt;p&gt;One solution is to use the program published at COMPUTE! ISSUE 76 / SEPTEMBER 1986 / PAGE 100 :&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.atarimagazines.com/compute/issue76/AtariML.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.atarimagazines.com/compute/issue76/AtariML.php&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The program heavily utilizes the BASIC &amp;quot;self-programming trick&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;First, let's explain the trick. An example - dynamically allocating a string of variable length - is located starting with line 31570:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PH 31570 GRAPHICS 0:POSITION 2,4:PRINT &amp;quot;31750 DIM TEMP$(&amp;quot;;FILSIZ;&amp;quot;):RETURN&amp;quot;&#xA;FK 31580 PRINT &amp;quot;CONT&amp;quot;:POSITION 2,0:POKE 842,13:STOP&#xA;FK 31590 POKE 842,12:GOSUB 31750&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;31570:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;clear screen (&lt;code&gt;GRAPHICS 0&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;position the cursor leaving a little room above (&lt;code&gt;POSITION 2,4&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Output the text of the program line that is to be added/changed. In this case, that's creation (or on subsequent runs overwrite) of line 31750 which contains a subroutine, allocating space for a new variable, and returning.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;31580:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In the next line, output the command &lt;code&gt;CONT&lt;/code&gt; - this command makes sense only in immediate context - used in a program it would trigger 'already running' error.&lt;/li&gt;&#xA;&lt;li&gt;Position the cursor at the topmost line of the screen.&lt;/li&gt;&#xA;&lt;li&gt;Perform a &amp;quot;magical&amp;quot; &lt;code&gt;POKE 842,13&lt;/code&gt; - I'm not sure what's 'behind the scenes' - 842 is the ICAX1 register, but I only managed to find the meaning of its 2 and 3 (device open for read and write); not bit 0 which is toggled here.&lt;/li&gt;&#xA;&lt;li&gt;Perform 'STOP'. This is mostly equivalent to pressing BREAK - aborting the activity of the program, in a way that is resumable by the CONT instruction.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The moment the &amp;quot;Magical Poke&amp;quot; is executed Atari begins outputting the Return key repeatedly. The program is aborted before the cursor reaches the text on screen, so when it does, the computer is in immediate mode, but with &amp;quot;jammed Return&amp;quot;. Whatever lines the cursor rides through, are executed as if they were typed in. In that case, that's the line preceded by the number - which gets written into the program - and then, the line CONT, which resumes execution from the next command after STOP. Which happens to be...&lt;/p&gt;&#xA;&lt;p&gt;31590:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;POKE 842,12&lt;/code&gt; to cancel the cursor madness&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;GOSUB 31750&lt;/code&gt; - execute the newly entered line.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Now, what the program actually does:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;open the binary file for reading. (31540)&lt;/li&gt;&#xA;&lt;li&gt;obtain file size (31560)&lt;/li&gt;&#xA;&lt;li&gt;allocate a string of length corresponding to the binary length (using the self-programming trick) (31570)&lt;/li&gt;&#xA;&lt;li&gt;load the binary into the memory location of the allocated string (31600)&lt;/li&gt;&#xA;&lt;li&gt;output the contents of the string, wrapped in context of new program lines and variable assignments. (31610)&lt;/li&gt;&#xA;&lt;li&gt;Enter them using the self-programming trick (31720),&lt;/li&gt;&#xA;&lt;li&gt;Erase self from memory, using the self-programming trick. (31720)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It's up to the user to save the remaining program containing the gibberish strings of machine code.&lt;/p&gt;&#xA;" OwnerUserId="680" LastEditorUserId="74" LastEditDate="2020-07-15T12:46:08.207" LastActivityDate="2020-07-15T12:46:08.207" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="609" PostTypeId="1" AcceptedAnswerId="612" CreationDate="2016-05-23T03:15:32.800" Score="30" ViewCount="3492" Body="&lt;p&gt;I have read that the Amiga 1200 may need certain &quot;timing fixes&quot; to be applied to the motherboard in order to use CPU accelerators.  What are these timing fixes and why are they needed?  Is there one set of fixes that will fix all hardware stability issues with the Amiga 1200?  Do the timing fixes needed depend on the CPU accelerator used?&lt;/p&gt;&#xA;" OwnerUserId="64" LastEditorUserId="11916" LastEditDate="2019-04-08T20:57:11.807" LastActivityDate="2019-04-08T20:57:11.807" Title="What are the Amiga 1200 timing fixes?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;amiga-1200&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="610" PostTypeId="2" ParentId="606" CreationDate="2016-05-23T05:54:19.020" Score="14" Body="&lt;p&gt;It used the same C compiler that shipped with the Indy workstation.  See: &lt;a href=&quot;http://level42.ca/projects/ultra64/Documentation/man/pro-man/pro05/index5.6.html&quot;&gt;Nintendo 64 Development Manual: C Compiler Suite&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It required a few flags not normally used when building C programs for the Indy itself.  And there were utilities for downloading to the development boards and converting executables into ROM images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some IDE's were available for UNIX at the time, but Nintendo didn't provide anything beyond system libraries and starter makefiles for the venerable &quot;make&quot; build command.  I'd expect most developers built N64 games in the same way they did Unix programs.  Run &quot;make&quot; on the command line and correct any errors in a separate editor window.  Or possible run &quot;make&quot; on a command line inside the emacs text editor with macros to assist in locating errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nintendo provided &lt;code&gt;gvd&lt;/code&gt; for debugging programs that were downloaded using &lt;code&gt;gload&lt;/code&gt;.  &lt;a href=&quot;http://level42.ca/projects/ultra64/Documentation/man/pro-man/pro23/index23.5.html&quot;&gt;It appears that&lt;/a&gt; it was similar in function to typical Unix command line debuggers like &lt;code&gt;dbx&lt;/code&gt; and &lt;code&gt;gdb&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A comment mentions &lt;code&gt;libultra&lt;/code&gt;.  It is a C library of various utility functions ranging from common C library functions like &lt;code&gt;abs()&lt;/code&gt; to matrix math, hardware accessors, threading primitives and so on.  The documentation has a &lt;a href=&quot;http://level42.ca/projects/ultra64/Documentation/man/n64man/misc/search.html&quot;&gt;complete list of functions&lt;/a&gt;.  At the bottom of the page are links to functions grouped by category.&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2016-05-23T21:22:17.127" LastActivityDate="2016-05-23T21:22:17.127" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="611" PostTypeId="1" AcceptedAnswerId="615" CreationDate="2016-05-23T09:14:06.730" Score="14" ViewCount="801" Body="&lt;p&gt;In quite a few programs on Atari, I found the self-programming trick:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 GRAPHICS 0           : REM clear the screen, enter standard text mode&#xA;20 POSITION 2,4         : REM place cursor 4 lines from top of screen&#xA;30 PRINT &quot;1000 SOUND 0, 200, 10, 15      : REM Beep&quot;&#xA;40 PRINT &quot;1010 FOR I=0 TO 500 : NEXT I   : REM wait a bit&quot;&#xA;50 PRINT &quot;1020 SOUND 0, 0, 0, 0          : REM Silence&quot;&#xA;60 PRINT &quot;1030 RETURN&quot;&#xA;70 PRINT &quot;CONT&quot;&#xA;80 POSITION 2,0         : REM place cursor on top of screen&#xA;90 POKE 842,13          : REM The Magical POKE&#xA;100 STOP                : REM Abort program execution&#xA;110 POKE 842,12         : REM Program resumes from here. This stops the effect of the prior POKE&#xA;120 GOSUB 1000          : REM Emit the Beep&#xA;130 END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The above program appends to itself a subroutine that emits a beep, then executes it. The uses in practice were much more creative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key point is &lt;code&gt;POKE 842,13&lt;/code&gt; which causes effect similar to holding down the Return key - the cursor starts riding down the screen, executing whatever's printed out - including &lt;code&gt;CONT&lt;/code&gt; which resumes the program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found memory location 842 is &lt;a href=&quot;http://www.atarimax.com/freenet/freenet_material/12.AtariLibrary/2.MiscellaneousTextFiles/showarticle.php?30&quot; rel=&quot;noreferrer&quot;&gt;ICAX1&lt;/a&gt; not very informatively described as &lt;em&gt;The auxiliary information bytes are used to give CIO or the device any special information needed.&lt;/em&gt; Bits 2 and 3 are responsible for Read and Write flags when opening a file... but I didn't find anything about bit 0, plus no file is being accessed here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, 'from the guts side' what did that POKE do?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="301" LastEditDate="2016-05-24T08:05:02.507" LastActivityDate="2016-05-24T08:05:02.507" Title="What did POKE 842,13 on Atari do? (Jamming the Return key)" Tags="&lt;atari&gt;&lt;memory-layout&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="612" PostTypeId="2" ParentId="609" CreationDate="2016-05-23T09:19:26.313" Score="27" Body="&lt;p&gt;As far as I know, there's no authoritative source, and the information out there is probably not really accurate. I will answer this from an electrical engineering perspective, and because I have implemented some of these fixes myself. First a little note about &lt;em&gt;timing fixes&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The expression &lt;em&gt;timing fixes&lt;/em&gt; is not really accurate, but comes from the observation that an &lt;a href=&quot;https://en.wikipedia.org/wiki/Low-pass_filter#RC_filter&quot;&gt;RC filter&lt;/a&gt; (Resistor-Capacitor) will affect a digital step in a way that, after thresholding at an input of a digital circuit, looks like it has been delayed in time:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/d/d1/RC-RC-RC-RC_Delay.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Zheii.png&quot; alt=&quot;A simple time delay&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a pretty bad and unreliable way to delay a fast digital signal, and to my knowledge, this is not really what the fixes do.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Ringing. Overshoot. Impedance mismatch.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Designing large circuit boards with multiple clock signals is not easy. Signals actually &lt;em&gt;bounce&lt;/em&gt; when they reach junctions or connections, causing reflections and other impurities:&lt;a href=&quot;http://www.ni.com/cms/images/devzone/tut/a/2170dcae1750.gif&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nupuN.gif&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution is called &lt;em&gt;termination&lt;/em&gt;, and you may have seen it used in other settings, for example in SCSI cabling. &lt;a href=&quot;https://www.youtube.com/watch?v=DovunOxlY1k&quot;&gt;Here&lt;/a&gt; is a great video on the subject, from 1959.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a signal from point A to point B, the correct termination can be calculated, but for distributed signals like the Amiga clock signals, it's not that easy. Especially so if you want to allow everyone to just plug in random boards to the same signals. The (arguably) &lt;em&gt;correct&lt;/em&gt; solution is to use special circuits called &lt;em&gt;clock distribution&lt;/em&gt; circuits, but you can usually get away with cheaper solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The common way is to add &lt;em&gt;termination resistors&lt;/em&gt;. This works well, but only when you know about everything connected to the bus. This is where the problem lies: Adding an expansion board to the bus will change the electrical parameters on the network, invalidating the previously calculated resistances. This does not necessarily break things. The signals only have to be &quot;good enough&quot;. After all, that's why we are using digital signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also the question of electrical interference. A nice and clean clock signal will, counterproductively, cause a lot of &lt;a href=&quot;https://en.wikipedia.org/wiki/Unintentional_radiator&quot;&gt;electromagnetic interference&lt;/a&gt;. This can be mitigated by adding capacitors to smooth the sharp edges. Doing so is bad for the signal, and is preferably avoided, but can be a last resort fix to get the product out of the door.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ianstedman.co.uk/Amiga/amiga_hacks/A1200_Mobo_fix/a1200_mobo_fix.html&quot;&gt;Ian Stedman&lt;/a&gt; has collected some information about the various fixes proposed in the forums, and the main components are: &lt;strong&gt;E121&lt;/strong&gt;&lt;em&gt;x&lt;/em&gt;, &lt;strong&gt;E122&lt;/strong&gt;&lt;em&gt;x&lt;/em&gt;, &lt;strong&gt;E123&lt;/strong&gt;&lt;em&gt;x&lt;/em&gt;, &lt;strong&gt;E125&lt;/strong&gt;&lt;em&gt;x&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the &lt;a href=&quot;http://www.amigawiki.org/doku.php?id=en:service:schematics&quot;&gt;schematics&lt;/a&gt; for the Amiga 1200 we can locate these components, and they are all connected to the CPU clock signal. A note on the schematics say&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Note: Various components are for EMI Control and may be loaded with funny things...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;...and another one...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Note: Components designated as Exxx may be loaded with EMI fliters[sic], ferrite beads or resistors!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;We can also see that there is an asterisk near these components. What all this means is that the engineer(s) simply added the components to the schematic in case they found out that they are necessary. Some of these are not populated, and some are (This is &lt;em&gt;very&lt;/em&gt; common and you will see a lot of unpopulated components on almost every circuit board). It could very well be that they did not plan to populate the components, but wanted the option of doing so in case any unforeseen problems arose. Eventually, someone down the line either put components there by mistake, or after measuring the final product and observing that the components are necessary. Everyone working in consumer electronics manufacturing can probably tell a lot of stories about this.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Suggested answer&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there one set of fixes that will fix all hardware stability issues with the Amiga 1200?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Probably&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fixes consists of fitting or removing these components. Every Exxx component has two parts: A resistor and a capacitor. The resistor (&lt;em&gt;ExxxR&lt;/em&gt;) can either be left out, fitted, or replaced with a &lt;a href=&quot;https://en.wikipedia.org/wiki/Ferrite_bead&quot;&gt;ferrite bead&lt;/a&gt;. The capacitor (&lt;em&gt;ExxxC&lt;/em&gt;) can either be fitted or left out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;http://eab.abime.net/showthread.php?t=60387&quot;&gt;thread&lt;/a&gt; on the &lt;em&gt;English Amiga Board&lt;/em&gt; suggests these fixes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;E123R&lt;/strong&gt;, &lt;strong&gt;E125R&lt;/strong&gt; - Fit with the value indicated in the schematics&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;E121R&lt;/strong&gt;, &lt;strong&gt;E122R&lt;/strong&gt; - Fit or replace with a 60 Ω ferrite bead&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;E123C&lt;/strong&gt;, &lt;strong&gt;E125C&lt;/strong&gt; - Fit with the value indicated in the schematics&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;E121C&lt;/strong&gt;, &lt;strong&gt;E122C&lt;/strong&gt; - Replace with 27 pF capacitors&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In contrast to that advice, &lt;a href=&quot;http://wiki.icomp.de/wiki/ACA1232&quot;&gt;Individual Computer's wiki&lt;/a&gt; has an article about the capacitors and instead strongly recommend that they are to be removed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my opinion, removing the capacitors and leaving everything else as they are is the best advice. I have a feeling that doing this on every motherboard, no matter the revision, will fix any issues with accelerator boards. I have three reasons for recommending this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The capacitors are only added to pass an artificial test. Other than that, they do more harm than good to the signals.&lt;/li&gt;&#xA;&lt;li&gt;There is a technically sound reason for the resistors as designed.&lt;/li&gt;&#xA;&lt;li&gt;Any unnecessary rework has a chance of damaging the board or other components.&lt;/li&gt;&#xA;&lt;li&gt;No need to order new parts.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Do the timing fixes needed depend on the CPU accelerator used?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Probably not&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have not seen any good comparative data on this. People often mention Apollo boards to be extra problematic, but I have personally had to perform the modifications on an old Amiga 1200 for a Blizzard accelerator board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, as mentioned by Kuba Tyszko in a comment, if your accelerator board works, it is not necessary to risk damage by doing any of these mods. If, however, you experience unusual instability, it may be worth trying to remove the capacitors. I have nothing to back this up (yet), but I believe that this will improve the situation for every accelerator.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&lt;em&gt;Please leave a comment if you believe something here is wrong or unclear, and I will try to update the answer. It is an interesting topic, and it deserves to be researched.&lt;/em&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="333" LastEditorUserId="462" LastEditDate="2016-06-30T22:32:09.087" LastActivityDate="2016-06-30T22:32:09.087" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="613" PostTypeId="1" AcceptedAnswerId="614" CreationDate="2016-05-23T17:13:02.560" Score="16" ViewCount="3070" Body="&lt;p&gt;Many authors credit &lt;a href=&quot;https://en.wikipedia.org/wiki/Space_Invaders&quot; rel=&quot;noreferrer&quot;&gt;Space Invaders&lt;/a&gt; as the first blockbuster game to have been written with an onboard microprocessor (Taito used Intel's 8080 for game logic), but there is also references to Taito's &lt;a href=&quot;http://www.arcade-museum.com/game_detail.php?game_id=10420&quot; rel=&quot;noreferrer&quot;&gt;Western Gun&lt;/a&gt; as the first arcade game to use a microprocessor in Chris Kohler's book &lt;a href=&quot;http://amzn.com/0744004241&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Power-Up: How Japanese Video Games Gave the World an Extra Life&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is considered to be the first arcade game to use a microprocessor?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-27T21:14:21.690" LastActivityDate="2016-08-09T17:35:12.250" Title="What was the first arcade game to use a microprocessor instead of discrete logic?" Tags="&lt;8080&gt;&lt;intel-8080&gt;&lt;arcade&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="614" PostTypeId="2" ParentId="613" CreationDate="2016-05-23T17:13:02.560" Score="13" Body="&lt;p&gt;Midway's port of Western Gun, known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Gun_Fight&quot; rel=&quot;nofollow&quot;&gt;Gun Fight&lt;/a&gt; in the West is the first arcade game that used a microprocessor (the same Intel 8080 used with Space Invaders). The original Western Gun release in Japan used Taito's Transistor-Transistor Logic chip (possibly one in the 7400 chipset family, as used on many of Taito's boards). Dave Nutting made the decision to use the 8080 when Taito licensed the game to Midway for its North American release in November of 1975.&lt;sup&gt;&lt;a href=&quot;http://www.giantbomb.com/gun-fight/3030-32574/&quot; rel=&quot;nofollow&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-09T17:35:12.250" LastActivityDate="2016-08-09T17:35:12.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="615" PostTypeId="2" ParentId="611" CreationDate="2016-05-23T21:01:31.633" Score="12" Body="&lt;p&gt;If bit 0 of location 842 is set then the keyboard scanning routine immediately returns 0x9B which is the code indicating the ENTER key has been pressed.  In short, a surprisingly literal effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The keyboard scan is part of the &quot;OS&quot; ROM built into the machine.  There's a source listing I'll excerpt from: &lt;a href=&quot;https://atariwiki.org/wiki/Wiki.jsp?page=Atari%20800%20ROM%20OS%20Source%20Listing&quot;&gt;Atari 800 ROM OS Source Listing&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;ICAX1Z&lt;/code&gt; is a zero page location that is a temporary copy of location 842.  If you know 6502 assembly language you can quickly see that the keyboard scan routine returns 0x9B when bit 0 of &lt;code&gt;ICAX1Z&lt;/code&gt; is set:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; SYSTEM EOL (CARRIAGE RETURN)&#xA;CR      =    $9B&#xA;;...&#xA;KGETCH: LDA  ICAX1Z    ;TEST LSB OF AUX1 FOR SPECIAL EDITOR READ MO&#xA;        LSR   A&#xA;        BCS   GETOUT&#xA;;...&#xA;GETOUT: LDA   #CR      ;PUT CR IN ATACHR&#xA;        BNE   K8       ;(UNCONDITIONAL)&#xA;;....&#xA;K8:     STA   ATACHR&#xA;K4:     JMP   RETUR1   ;ALL DONE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Additionally there are some equates which give the purpose of each bit in &lt;code&gt;AUX1&lt;/code&gt; portion of the I/O Control Block of each device.  Most of the bits are generic (i.e., the mean the same to all devices), but &lt;code&gt;$1&lt;/code&gt; (bit 0) does seem to have a special meaning:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; AUX1 EQUATES&#xA;; () INDICATES WHICH DEVICES USE BIT&#xA;APPEND  =     $1          ;OPEN FOR WRITE APPEND (D), OR SCREEN READ (&#xA;DIRECT  =     $2          ;OPEN FOR DIRECTORY ACCESS (D)&#xA;OPNIN   =     $4          ;OPEN FOR INPUT (ALL DEVICES)&#xA;OPNOT   =     $8          ;OPEN FOR OUTPUT (ALL DEVICES)&#xA;OPNINO  =     OPNIN+OPNOT ;OPEN FOR INPUT AND OUTPUT (ALL DEVICES)&#xA;MXDMOD  =     $10         ;OPEN FOR MIXED MODE (E,S)&#xA;INSCLR  =     $20         ;OPEN WITHOUT CLEARING SCREEN (E,S)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The OS defines several devices including the keyboard, cassette, printer and disk each with a corresponding I/O Control Block (or IOCB).  You'll notice that the normal value for 842 is 12 which means &lt;code&gt;OPNIN&lt;/code&gt; and &lt;code&gt;OPNOT&lt;/code&gt; are both set.  The device is open for read and write access.  When you &lt;code&gt;POKE&lt;/code&gt; 13 into 842 the &lt;code&gt;APPEND&lt;/code&gt; bit is set.  For the cassette or disk that might mean you're adding to the end of a file.  For the keyboard device it has the special effect you're wondering about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that &lt;code&gt;POKE 842,4&lt;/code&gt; has no obvious effect - BASIC never tries to write to the keyboard so turning off &lt;code&gt;OPNOT&lt;/code&gt; does nothing.  But a &lt;code&gt;POKE 842,8&lt;/code&gt; is bad.  BASIC will spew an undending stream of &lt;code&gt;ERROR - 131&lt;/code&gt; messages as it tries to read input from the keyboard but is denied because read access has been turned off.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2016-05-23T21:01:31.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="616" PostTypeId="2" ParentId="481" CreationDate="2016-05-23T22:01:22.837" Score="3" Body="&lt;p&gt;Although I don't recommend this course of action except for educational purposes, it is possible to do a bare-metal boot of &lt;a href=&quot;https://en.wikipedia.org/wiki/FreeDOS&quot; rel=&quot;nofollow&quot;&gt;FreeDOS&lt;/a&gt; on some x86 Macs. The problem with actually &lt;em&gt;using&lt;/em&gt; it (as opposed to noodling around in wonder that it works at all) is that most interesting DOS software gets down and dirty with the hardware, and a modern Mac isn't exactly register-level compatible with a 1990s-era PC.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2016-05-23T22:01:22.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="617" PostTypeId="1" AcceptedAnswerId="622" CreationDate="2016-05-24T09:24:49.377" Score="13" ViewCount="688" Body="&lt;p&gt;In 1986, the 900th anniversary of the original Domesday Book, the BBC coordinated a project to document modern Britain.  This was claimed to be data to last for the next thousand years.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data was compiled from myriad nationwide school projects.  The results were published as the &lt;em&gt;Domesday Discs&lt;/em&gt;.  These were video disks in Laservision LVROM format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way of reading these disks on modern equipment?&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2018-07-31T15:49:20.013" Title="Reading the BBC Domesday Project" Tags="&lt;acorn&gt;&lt;bbc-micro&gt;&lt;lvrom&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="618" PostTypeId="5" CreationDate="2016-05-24T09:36:21.810" Score="0" Body="&lt;p&gt;6502-based microcomputer manufactured by Acorn Computers from 1982.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Used by the Computer Literacy Project of the British Broadcasting Corporation.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="278" LastEditDate="2017-07-10T19:54:20.950" LastActivityDate="2017-07-10T19:54:20.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="619" PostTypeId="4" CreationDate="2016-05-24T09:36:21.810" Score="0" Body="For questions about the BBC Micro, programs written for the BBC Micro or peripherals for the BBC Micro. " OwnerUserId="-1" LastEditorUserId="278" LastEditDate="2017-07-10T19:54:20.950" LastActivityDate="2017-07-10T19:54:20.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="620" PostTypeId="5" CreationDate="2016-05-24T09:38:53.620" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-24T09:38:53.620" LastActivityDate="2016-05-24T09:38:53.620" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="621" PostTypeId="4" CreationDate="2016-05-24T09:38:53.620" Score="0" Body="For questions regarding the LaserVision Read Only Memory format of video disks, originally produced by Philips." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-05-24T18:22:36.593" LastActivityDate="2016-05-24T18:22:36.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="622" PostTypeId="2" ParentId="617" CreationDate="2016-05-24T11:26:41.293" Score="18" Body="&lt;p&gt;Reading up on various preservation efforts, including &lt;a href=&quot;http://www.computinghistory.org.uk/pages/8792/BBC-Domesday-System-Preservation/&quot; rel=&quot;noreferrer&quot;&gt;the Center for Computing History's&lt;/a&gt;, and information collected on &lt;a href=&quot;http://www.atsf.co.uk/dottext/domesday.html#redux&quot; rel=&quot;noreferrer&quot;&gt;Andy Finney's&lt;/a&gt; and &lt;a href=&quot;http://www.binarydinosaurs.co.uk/Museum/Acorn/domesday/index.php&quot; rel=&quot;noreferrer&quot;&gt;Adrian Graham's&lt;/a&gt; sites, it appears that the most difficult part would be physically reading the disks — the required drives were built in limited quantities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have one of the drives, it might be possible to connect it to a SCSI HBA and read from it that way (although none of this counts as &quot;modern equipment&quot;). Previous preservation efforts used the original hardware though so I don't know how feasible this is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have the data from the drives, it is possible to extract the information contained therein. The Centre for Computing History did it, and the &lt;a href=&quot;http://web.archive.org/web/20090514022456/http://www.si.umich.edu/CAMILEON/domesday/domesday.html&quot; rel=&quot;noreferrer&quot;&gt;CAMiLEON project&lt;/a&gt; also wrote &lt;a href=&quot;http://web.archive.org/web/20090514022456/http://www.si.umich.edu/CAMILEON/domesday/pictures.html&quot; rel=&quot;noreferrer&quot;&gt;an emulator&lt;/a&gt; (&lt;a href=&quot;https://github.com/Domesday/BeebEm-AIV&quot; rel=&quot;noreferrer&quot;&gt;a descendant of which is now available&lt;/a&gt;). A recent &lt;a href=&quot;https://hackaday.com/2018/06/23/digitizing-domesday-disks/&quot; rel=&quot;noreferrer&quot;&gt;Hackaday article&lt;/a&gt; summarizes current efforts by &lt;a href=&quot;https://www.domesday86.com/&quot; rel=&quot;noreferrer&quot;&gt;the Domesday86.com project&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's probably easier to use &lt;a href=&quot;http://www.computinghistory.org.uk/domesday&quot; rel=&quot;noreferrer&quot;&gt;the Centre for Computing History's resources&lt;/a&gt; and &lt;a href=&quot;http://www.bbc.co.uk/history/domesday/using-domesday&quot; rel=&quot;noreferrer&quot;&gt;the BBC's Domesday Reloaded site&lt;/a&gt; (archived &lt;a href=&quot;https://web.archive.org/web/20180111200506/http://www.bbc.co.uk:80/history/domesday/using-domesday&quot; rel=&quot;noreferrer&quot;&gt;on the Internet Archives&lt;/a&gt;)!&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-07-31T15:49:20.013" LastActivityDate="2018-07-31T15:49:20.013" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="623" PostTypeId="2" ParentId="429" CreationDate="2016-05-24T14:01:28.433" Score="1" Body="&lt;p&gt;If you're thinking of interactive realtime games using some kind of visual representation (so, this is essentially excluding turn-based games), it's probably Spacewar! for the DEC PDP-1 (MIT, Steve Russell et al., 1961/62).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://www.masswerk.at/spacewar/&quot; rel=&quot;nofollow&quot;&gt;http://www.masswerk.at/spacewar/&lt;/a&gt; (online emulation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &quot;The Origin of Spacewar&quot; by J.M. Graetz: &lt;a href=&quot;http://www.masswerk.at/spacewar/SpacewarOrigin.html&quot; rel=&quot;nofollow&quot;&gt;http://www.masswerk.at/spacewar/SpacewarOrigin.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="694" LastActivityDate="2016-05-24T14:01:28.433" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="624" PostTypeId="5" CreationDate="2016-05-24T14:32:48.853" Score="0" Body="&lt;p&gt;Related tags:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;/questions/tagged/gaming&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;gaming&amp;#39;&quot; rel=&quot;tag&quot;&gt;gaming&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-29T15:35:39.517" LastActivityDate="2016-05-29T15:35:39.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="625" PostTypeId="4" CreationDate="2016-05-24T14:32:48.853" Score="0" Body="For questions regarding early arcade games and hardware. Not to be used for modern arcade machines capable of running early games, or for custom (e.g. home-made) machines that happen to be old." OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-07-31T19:29:35.450" LastActivityDate="2016-07-31T19:29:35.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="626" PostTypeId="5" CreationDate="2016-05-24T14:35:47.117" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/intel-8080&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;intel-8080&amp;#39;&quot; rel=&quot;tag&quot;&gt;intel-8080&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/8086&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8086&amp;#39;&quot; rel=&quot;tag&quot;&gt;8086&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/80286&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;80286&amp;#39;&quot; rel=&quot;tag&quot;&gt;80286&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/80386&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;80386&amp;#39;&quot; rel=&quot;tag&quot;&gt;80386&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/80486&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;80486&amp;#39;&quot; rel=&quot;tag&quot;&gt;80486&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2021-05-22T12:30:55.807" LastActivityDate="2021-05-22T12:30:55.807" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="627" PostTypeId="4" CreationDate="2016-05-24T14:35:47.117" Score="0" Body="Retrocomputing hardware and software created by Intel." OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2021-05-22T12:30:55.807" LastActivityDate="2021-05-22T12:30:55.807" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="628" PostTypeId="5" CreationDate="2016-05-24T14:37:21.877" Score="0" Body="&lt;p&gt;Related tags and processors:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;/questions/tagged/8008&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8008&amp;#39;&quot; rel=&quot;tag&quot;&gt;8008&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/8080&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8080&amp;#39;&quot; rel=&quot;tag&quot;&gt;8080&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/8085&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8085&amp;#39;&quot; rel=&quot;tag&quot;&gt;8085&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/8086&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8086&amp;#39;&quot; rel=&quot;tag&quot;&gt;8086&lt;/a&gt;&#xA;&lt;a href=&quot;/questions/tagged/8088&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;8088&amp;#39;&quot; rel=&quot;tag&quot;&gt;8088&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-24T18:22:32.107" LastActivityDate="2016-05-24T18:22:32.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="629" PostTypeId="4" CreationDate="2016-05-24T14:37:21.877" Score="0" Body="For questions about Intel's 8080 8-bit microprocessor" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-05-24T18:20:58.817" LastActivityDate="2016-05-24T18:20:58.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="630" PostTypeId="2" ParentId="613" CreationDate="2016-05-24T16:59:06.620" Score="7" Body="&lt;p&gt;Adding this as an additional answer, since it technically differs from my Gun Fight answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/320/mnem&quot;&gt;mnem&lt;/a&gt; mentioned the Fairchild F8 microprocessor in the comments of my question.  If we are indeed counting the Fairchild F8 as an 8-bit microprocessor then Gun Fight is technically not the first arcade game ever created using a microprocessor.  It is, however, the first commercially released game that used a microprocessor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Jerry_Lawson_(engineer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jerry Lawson&lt;/a&gt;, designer of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Fairchild_Channel_F&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fairchild Channel F&lt;/a&gt; video game console, allegedly created a top-down driving coin-op game using the Fairchild F8 in 1974/75.&lt;a href=&quot;http://mamedev.emulab.it/undumped/index.php?title=Demolition_Derby_(Lawson)&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://allincolorforaquarter.blogspot.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Golden Age Arcade Historian&lt;/a&gt; comments:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Sidebar - Was Demolition Derby the first coin-op game with a microprocessor?&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Some sources have suggested that Demolition Derby was the first game&#xA;  to use a microprocessor and even that the game was released not long&#xA;  after Pong, but is this true? Lawson claims he started working on the&#xA;  game in 1972 or 1973 and sold it to Major Manufacturers of San Mateo,&#xA;  CA. Some sources (including the Wikipedia article on Lawson) claim&#xA;  that the game &quot;debuted&quot; shortly after the release of Pong. The F-8,&#xA;  however, was not released until 1975 and Major Manufacturers was not&#xA;  incorporated until October of 1974. The October, 1975 issue of Play&#xA;  Meter announced that at the 1975 MOA show (the same show where Gun&#xA;  Fight was introduced), Major Manufacturers would be &quot;…. introducing&#xA;  two new upright games that use a microprocessor...instead of a logic&#xA;  board, as well as exhibiting their line of video games and a new&#xA;  designer cocktail table&quot;. The article does not name any of these&#xA;  games, nor do any other issues of Replay or Play Meter. It is not&#xA;  clear from the description if the microprocessor games were video&#xA;  games or not. The October, 1975 issue of Vending Times, however, does&#xA;  list two games that the company was to display at the MOA: Lunar&#xA;  Module and Fascination - but does not mention whether they use a&#xA;  microprocessor. The 1972/1973 date thus seems clearly too early, at&#xA;  least for a microprocessor version of Demolition Derby (though Lawson&#xA;  could have started with a non-microprocessor version). In addition,&#xA;  only one copy of Demolition Derby is thought to have been built and it&#xA;  never went past the field testing stage. On the other hand, while it&#xA;  seems unlikely that it was field tested prior to 1975, given that&#xA;  Major Manufacturers did plan to show microprocessor games at the 1975&#xA;  MOA, it (or one of Major's other games) may have been tested prior to&#xA;  the release of Gun Fight.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://allincolorforaquarter.blogspot.com/2013/07/dave-needle-and-jerry-lawon-two-early.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-05-24T16:59:06.620" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="631" PostTypeId="2" ParentId="309" CreationDate="2016-05-24T21:43:08.553" Score="15" Body="&lt;p&gt;10 CPS/110 Baud was the maximum rate these signals could be sent with acceptable sidebands using an all-mechanical system. 300 was 3 times the teletype speed, and that limit is set by the 4 kHz maximum bandwidth of a phone line and the allowable harmonics.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;300 baud is exactly 3 times 110 Baud, measured in characters.  The teletype standard was 110 bps with 1 start and 2 stop bits. That, plus 8 data bits (7 plus parity) equals 11 bits per character.   110/11 = 10 CPS.  300 Baud used 1 Start and 1 Stop, plus 8 data = 10 bits per character.    300/10 = 30, and 30 cps is 3 time 10 cps.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanical teletypes such as the ASR33 sent 10 CPS.  They had a rotary wheel that spins when a key was pressed.  It had 11 contacts.  The first was wired to break the current flow in the communications wire. This was a current loop, sent over a phone line back to the Central office, powered by a 48V DC battery. The last one or two contacts were wired so that the current was always on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2nd through the 8th contacts were wired to a 8 switches that were pushed by a matrix that encoded ASCII from the TTY key that was pressed.  Pressing a key released the motor clutch, the rotary contact wheel would revolve, and the make/break of the rotary switch would send the signal over miles of wire back to the central office at 110 Baud.  This yields exactly 10 CPS. This had a start bit, a stop bit, and either one or two extra stop bit(s), a spacer, to allow the system relay to re-energize when no more characters were being sent. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later FSK systems could run at 300 Baud, and not being mechanical, had no need for the 11th bit (the second stop bit).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;300 Baud systems were the first electronic systems, and could stop without an extra stop bit, which increased speed by nearly 10%.  The signals were modulated by FSK between two frequencies for transmit, and two for receive.  Switching signals between these frequencies generates harmonics, which have to be kept within the 4Khz bandwidth of the phone system to prevent crosstalk.&lt;br&gt;&#xA;The odd 11-bit 100 baud standard versus all other bauds being multiples of 10, (300, 1200, 2400) are caused by the differences in mechanical and electronic FSK/PSK systems that evolved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With PSK (Phase Shift Keying) the amplitude and phase were changed.  This fit within the same 4KHz signal bandwidth with the same sidebands.  Each additional amplitude or phase shift doubles the number of bits sent per Baud, thus we ended up with 300, 1200, 2400, 4800, 9600 and so on.  &lt;/p&gt;&#xA;" OwnerUserId="698" LastEditorUserId="3733" LastEditDate="2019-07-24T05:15:32.057" LastActivityDate="2019-07-24T05:15:32.057" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="632" PostTypeId="2" ParentId="550" CreationDate="2016-05-25T07:21:26.457" Score="5" Body="&lt;p&gt;Here's what I've been able to determine:  A short filesystem on a floppy should work fine, as long as the blocks are in the right order.  If the image you're using is a raw image (819200 bytes exactly, often used by emulators, that's easy.  Just &lt;code&gt;fdformat&lt;/code&gt; the floppy device for 1.44MiB as you would for any other DOS/Windows/Linux machine and write the image using a command like,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dd bs=512 if=floppy_image.img of=/dev/floppy&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, if the image you are using comes from Apple, it will not be raw.  It will be either a Disk Copy image (819284 bytes) or a &lt;code&gt;.sea&lt;/code&gt; self-extracting disk image, possibly with a BinHex (&lt;code&gt;.bin&lt;/code&gt;) wrapper.  We'll address that first since it's far more common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the image is wrapped in BinHex, we can use &lt;a href=&quot;http://unarchiver.c3.cx/&quot; rel=&quot;nofollow&quot;&gt;The Unarchiver's &lt;code&gt;unar&lt;/code&gt;/&lt;code&gt;lsar&lt;/code&gt;&lt;/a&gt; to unpack the file.  Note, you'd be wise to use &lt;code&gt;lsar&lt;/code&gt; on the file first as Macintosh files contain characters like spaces rather commonly and &lt;code&gt;unar&lt;/code&gt; does not provide an option to rename the output file during extraction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point I recommend renaming or copying the &lt;code&gt;.sea&lt;/code&gt; file to one ending in the &lt;code&gt;.dmg&lt;/code&gt; extension and running &lt;code&gt;truncate -s 819284 your_image.dmg&lt;/code&gt; to produce a Disk Copy image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to convert that to a raw image, you can use &lt;code&gt;dd&lt;/code&gt; to trim off the Disk Copy header:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dd bs=84 skip=1 if=disk_image.dmg of=disk_image.img&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This leaves you with a raw disk image suitable for use with emulators or writing to a floppy as above.  Note, any 800k image written to a floppy this way wastes space on the floppy disk, and the disk requires a 1.44M &quot;SuperDrive&quot; (a name Apple has reused time and again, but in this context refers to machines able to support the 1.44M floppy and equipped with such a drive.)  Similar tricks can be used for Apple // ProDOS and GS/OS disk images if the machine is equipped with a SuperDrive and controller or other PC-compatible 1.44MB drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There may be other common disk formats I am not aware of for the early Macintosh.  Hopefully they can be added to this answer if someone comes across one.&lt;/p&gt;&#xA;" OwnerUserId="539" LastEditorUserId="539" LastEditDate="2016-05-26T12:01:50.003" LastActivityDate="2016-05-26T12:01:50.003" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="633" PostTypeId="2" ParentId="550" CreationDate="2016-05-25T14:29:19.153" Score="2" Body="&lt;p&gt;&lt;s&gt;Real Mac/IIgs 800k floppy disks cannot be written from Linux because &lt;/s&gt;Apple used &lt;a href=&quot;https://en.wikipedia.org/wiki/Group_code_recording&quot; rel=&quot;nofollow&quot;&gt;GCR&lt;/a&gt; to get 800k on the disk instead of the 720k that the PC did. You need a &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_External_Disk_Drive&quot; rel=&quot;nofollow&quot;&gt;Superdrive&lt;/a&gt; to write Mac/IIgs format 800k disks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However as @Mark pointed out you can write 800k disk images to 1440k disks from a PC and a Mac with a Superdrive will read/boot them since the disk images are bits and not sectors. &lt;a href=&quot;http://macgui.com/downloads/?cat_id=340&quot; rel=&quot;nofollow&quot;&gt;Mac GUI&lt;/a&gt; has 800k and 1440k floppy disk images for System 6 and System 7.&lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="175" LastEditDate="2016-06-06T14:25:23.673" LastActivityDate="2016-06-06T14:25:23.673" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="634" PostTypeId="1" AcceptedAnswerId="635" CreationDate="2016-05-25T15:37:33.963" Score="28" ViewCount="4627" Body="&lt;p&gt;I have two 50-pin SCSI hard-drives that I need to image. However, after spending quite a while searching across the Internet, I cannot find any adapters to convert the 50-pin connector to something useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The make/model of the hard-drives is the Quantum Lightning ProDrive, and they hold 540MB each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I attach these to a more modern machine?&lt;/p&gt;&#xA;" OwnerUserId="702" LastEditorUserId="87" LastEditDate="2016-05-29T15:36:14.953" LastActivityDate="2016-05-29T15:36:14.953" Title="How can I take an image of a 50-pin SCSI hard-drive" Tags="&lt;hardware&gt;&lt;hard-disk&gt;&lt;scsi&gt;&lt;data-preservation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="635" PostTypeId="2" ParentId="634" CreationDate="2016-05-25T16:01:48.733" Score="18" Body="&lt;p&gt;If &quot;a more modern machine&quot; includes systems with ISA, PCI or PCI Express slots, it should be easy enough to retrieve the data from the drives. You'll need a SCSI adapter (known as a host bus adapter, HBA); you can find loads on auction sites, or &lt;a href=&quot;http://www.scsi4me.com/scsi_hba-controller-cards_ultra160-ultra3-u160.html&quot;&gt;SCSI4ME&lt;/a&gt; and other places (depending on which country you live in). Adaptec cards are very good and well-supported on most operating systems. You'll also need a 50-pin cable such as &lt;a href=&quot;http://cable-trader.co.uk/category.php?sc=&amp;amp;cat=218&quot;&gt;these ones&lt;/a&gt;; avoid long cables and cables with too many connectors, you may have termination issues with your drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've got all that, plug your adapter into your computer, connect the cable to the drive (the connectors are keyed so there shouldn't be any issue there), connect a power cable to the drive and you should be good to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can't use a PCI or PCI Express card, there are SCSI-to-USB converters, but they are usually designed for external SCSI devices so you'll need an additional SCSI converter to go from whatever SCSI port is on the SCSI-to-USB converter, to the 50-pin port on your hard drives. They also tend to be very expensive. Finally, you can also get PCMCIA SCSI HBAs for laptops, but the same issues apply, and they're even more expensive!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a couple of issues to keep an eye out for, but if you only connect one drive at a time they shouldn't cause any actual difficulties. The first is that SCSI drives have identifiers which can be changed, usually using jumpers; just make sure they're not set to 7 and you should be fine (7 is the SCSI HBA's identifier). The second is termination: SCSI buses need to be electrically terminated. Most HBAs from the last twenty years handle their end of things themselves, and the drives might well have built-in termination too (another jumper to look out for). As mentioned above though, if you're only connecting one drive at a time on a short enough cable, termination shouldn't be an issue.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2016-05-25T16:17:08.743" LastActivityDate="2016-05-25T16:17:08.743" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="636" PostTypeId="1" AcceptedAnswerId="11070" CreationDate="2016-05-25T19:40:52.897" Score="10" ViewCount="1265" Body="&lt;p&gt;In my research on 1970s-era arcade machines, I've noticed that both Midway and Taito created games which used Intel's 8080 microprocessor. However, each company had their own host boards which integrated with this processor. What are the main technical differences between Midway's and Taito's host boards?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only major difference that I know of was that the Midway board has a daughter board plugged into it at a 90 degree angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hfkTN.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hfkTN.jpg&quot; alt=&quot;Midway&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taito's boards are stacked vertically:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XDMNw.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XDMNw.jpg&quot; alt=&quot;Taito&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-09T22:34:18.240" LastActivityDate="2019-05-21T22:54:52.207" Title="What are the technical differences between the Midway 8080 and Taito 8080 hardware boards?" Tags="&lt;8080&gt;&lt;intel-8080&gt;&lt;arcade&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="638" PostTypeId="1" CreationDate="2016-05-26T07:27:03.670" Score="17" ViewCount="1314" Body="&lt;p&gt;Don't know if this is on-topic, but I will give it a chance to go. If you feel this is off-topic, act accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recently, a discussion has started about the feelings associated to the unboxing of your first computer. For me it's the smell of a ZX Spectrum rubber key model, wrapped in a plastic bag, placed in a polystyrene white box, inside a cardboard box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was in 1984. Then, I felt the same smell many years after that, while opening the box of a Spectrum +2A &quot;Police Pack&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both computers were designed with different materials but the smell was the same. I wonder where does it come from. Plastic case? Bag? Poly? Printed manuals?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;People are telling me that it is added perfume to cover the unpleasant odor from mass production. If this is so:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Does anyone know or remember where final assembly and packaging of ZX Spectrum took place (which factory)? Maybe that factory still exists and someone can find out what kind of perfume they used.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Did both models (48K and +2A) used the same factory to manufacture the case? Are both cases from the same plastic material?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strike&gt;Does anyone know about &quot;electronics perfume&quot; other than the &quot;new Apple electronics unboxing perfume&quot; you can buy? (by no means I want my Spectrum to smell like an Apple)&lt;/strike&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="105" LastEditorUserId="4025" LastEditDate="2017-05-05T16:27:45.653" LastActivityDate="2017-05-05T16:27:45.653" Title="The smell of a computer while unboxing it" Tags="&lt;hardware&gt;&lt;zx-spectrum&gt;" AnswerCount="3" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="639" PostTypeId="1" AcceptedAnswerId="642" CreationDate="2016-05-26T16:17:58.340" Score="52" ViewCount="18036" Body="&lt;p&gt;This was on CNN today:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cnn.com/2016/05/26/us/pentagon-floppy-disks-nuclear/index.html?sr=fbCNN052616pentagon-floppy-disks-nuclear0957AMStoryGalLink&amp;amp;linkId=24889589&quot;&gt;The U.S. is still using floppy disks to run its nuclear program&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which led me to read through this article:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.digitaltrends.com/computing/why-do-floppy-disks-still-exist-the-world-isnt-ready-to-move-on/#:oyVSMG3nZa_xlA&quot;&gt;Think the floppy disk is dead? Think again! Here’s why it still stands between us and a Nuclear Apocalypse&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, this excerpt got me thinking:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Last year, a broadcast of 60 Minutes surprised many viewers with the discovery that 8-inch floppy disks were still the preferred method of removable storage for the computers in a U.S. Air Force nuclear silo.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Even the newest 8&quot; floppy disks &lt;em&gt;must&lt;/em&gt; be around 25 years old (at least).  Honestly, I don't remember floppies being the most-stable storage media to begin with.  I can't imagine the old 8&quot; disks have a very good service life.  And I remember being able to only reformat a bad disk a few times before it was useless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I'm not exactly sure about the Air Force's use case, I'll pose a simple question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you take these disks off the shelf 30 years later and still expect to read their data?&lt;/p&gt;&#xA;" OwnerUserId="125" LastEditorUserId="87" LastEditDate="2016-05-29T10:26:24.207" LastActivityDate="2021-04-24T16:41:01.933" Title="How long will floppy disks maintain data integrity?" Tags="&lt;floppy-disk&gt;&lt;data-preservation&gt;" AnswerCount="8" CommentCount="14" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="641" PostTypeId="1" AcceptedAnswerId="650" CreationDate="2016-05-26T16:24:48.490" Score="11" ViewCount="1227" Body="&lt;p&gt;The Nintendo 64 shipped with a Memory Expansion Bay which contained a Jumper Pack.  Some games such as Donkey Kong 64 and The Legend of Zelda: Majora's Mask required additional RAM to run, and shipped with a 4MB Memory Expansion Pak which was installed via this Memory Expansion Bay.  Were there any other uses (licensed or unlicensed) for the Memory Expansion Bay?  I only see Memory Expansion Pak accessories online (both from Nintendo and third-party) for this slot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qpySW.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qpySW.gif&quot; alt=&quot;Memory Expansion Slot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2019-09-15T15:43:14.477" Title="Were there any other peripherals that used the Nintendo 64's Memory Expansion Bay besides the Expansion Pak?" Tags="&lt;nintendo&gt;&lt;nintendo-64&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="642" PostTypeId="2" ParentId="639" CreationDate="2016-05-26T17:50:54.603" Score="26" Body="&lt;p&gt;There are a few factors:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Quality of media.&lt;/li&gt;&#xA;&lt;li&gt;Storage environment (i.e. climate controlled versus humid attic).&lt;/li&gt;&#xA;&lt;li&gt;How many hours of use did the disk experience.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Assuming little-to-no use, it probably comes down mostly to quality of the floppy disk media which tends to vary across manufacturers and even production year. The formula wasn't always consistent for a brand; I've got old Maxell 5.25&quot; disks of the same model from 1983 which are a distinct mocha color versus a darker brown starting in 1985.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While 5.25&quot; disks seem to have held up over the years, I can say that 3.5&quot; disks were obviously cost reduced and of much lower quality. Some that I have in my collection that were sold as &quot;high quality&quot; back in the early 90's are questionable today at best while a repurposed America Online 3.5&quot; from the same period is almost certainly not going to still hold its original contents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, I think it is hard to come up with an answer for this since nobody really seemed to perform studies on this back in the day; probably because nobody assumed the technology would still be in use 30 years later. However, I will state that you can visibly see if a disk is &quot;dead&quot; physically by looking for small dark spots on the medium (not referring to mold but natural oxidation). If you see that, I'd say you've got time to image the disk before throwing it away and then perhaps cleaning your drive head.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-05-26T17:50:54.603" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="643" PostTypeId="2" ParentId="639" CreationDate="2016-05-26T19:50:15.813" Score="9" Body="&lt;p&gt;When recently imaging my old Amiga disks, dating from 1989 until about 1993, approximately 80% of them read first time without error, another 10% needed a few retries to get all the data off, 9% had unrecoverable sectors, and 1% appeared to be completely unformatted. (The latter were not virgin blank disks, since they were labelled with their contents.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is for 3.5&quot; DD disks. Other sizes and densities will of course vary, with 3.5&quot; HD disks being famously awful.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2016-05-26T19:50:15.813" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="644" PostTypeId="1" CreationDate="2016-05-26T20:19:02.113" Score="25" ViewCount="2529" Body="&lt;p&gt;At some point in the past, around the 1970's or so, programmers wrote their code on paper. Considering the fact that modern computers have replaced paper in so many ways, the whole idea seems a little backwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no first hand experience with these things. I have a vague idea how it worked, but I want more details. I assume that the process is similar to filling out regular paperwork, but the fact that these were programs that had to follow a complex syntax must complicate things a little.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, these programming forms couldn't be fed directly into the computer, so something had to be done to put it in machine readable format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What needed to be done to actually run a program written on a form? Was this an error-prone process? In this one book I have, the format on some of the programs is a little lax:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/enLSE.jpg&quot; alt=&quot;it&amp;#39;s a big image...&quot;&gt;&#xA;&lt;sub&gt;Photo mine. It's a COBOL book.&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Near the top, some lines are crossed out. But near the bottom of the page, some of the code is literally outside the lines: it's straddling two lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a full example of a form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/INzls.png&quot; alt=&quot;Coding form&quot;&gt;&#xA;&lt;sub&gt;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:FortranCodingForm.png&quot; rel=&quot;noreferrer&quot;&gt;https://commons.wikimedia.org/wiki/File:FortranCodingForm.png&lt;/a&gt;&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2016-06-01T00:26:17.090" Title="How did programs on coding forms get run?" Tags="&lt;programming&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="645" PostTypeId="2" ParentId="644" CreationDate="2016-05-26T20:47:10.873" Score="27" Body="&lt;p&gt;Coding forms such as your examples are basically just really fancy lined paper.  The fixed grid is there to help you organize your code and reduce errors when you (or a clerk) actually type in the code, but it still needs to be manually entered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your completed form would go to someone operating a punch card machine or interactive terminal so that all your time spent thinking and reworking the code didn't tie up the limited computer resources.  As for drawing outside the lines, this would just basically make the data entry a little more error prone if whoever doing the keying interpreted things incorrectly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the completed code form would be retained and serve as basic documentation for the program, since the final entered code wouldn't be human-readable.  Any reworks to the code you needed to do, you would refer back to the code form first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should probably also mention that even up until the mid-90s forms like these were still being used in the teaching of certain languages such as COBOL, despite the prevalence of adequate numbers of interactive terminals, in an effort to impress upon students good documentation habits and in case they happened to land a job at an organization that still required that level of formality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One other thing, the code form wouldn't be your first step in starting to write a program either.  You'd typically start by getting out your flow-charting stencil and drawing out a flowchart for the program logic before writing any code on a form to make sure you understood what the program needed to do and how it was going to do it.  Flow charting in this manner was definitely something still being taught in the mid 90's also. When I attended college in '95 one of my first year courses was a &quot;Programming Logic&quot; course for which the coursework consisted mostly of coming up with answers to programming questions in hand-drawn flowchart and then writing out the code from that in pseudo-code form without touching a computer for the entire semester in that class.&lt;/p&gt;&#xA;" OwnerUserId="320" LastEditorUserId="320" LastEditDate="2016-05-26T21:23:12.760" LastActivityDate="2016-05-26T21:23:12.760" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="646" PostTypeId="2" ParentId="639" CreationDate="2016-05-26T21:45:25.750" Score="15" Body="&lt;p&gt;The short answer is that they will retain data integrity as long as they do.  Floppy disks have a number of enemies: Moisture, corrosion, mildew, deformation of the physical media, degradation of adhesives and other materials, magnetic fields, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a floppy disk is treated like a precious document and stored in a UV-proof, temperature and humidity controlled environment, free from harmful magnetic fields, and if the bonding agent that keeps the magnetic material attached to the disk surface doesn't fail, the disks may last for decades yet to come even if they are 8&quot; floppies from the 1970s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I've seen floppy disks fail just a couple of months after opening the package.  It's a fragile media.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best advice is to preserve the contents of any floppy you come across if the data contained within is at all worth preservation.  Multiple redundant copies remains the surest way to keep data safe into the future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The US nuclear program has a problem in that the data on those 8&quot; floppies may not exist elsewhere, and we cannot know how long the media or the drives will last.  Moving parts eventually fail too, after all.  Theoretically the US government could commission new drives and new media at considerable expense.  You and I probably cannot do that.  But better it would be I think for them to prepare for a day when that fragile media no longer exists.&lt;/p&gt;&#xA;" OwnerUserId="539" LastActivityDate="2016-05-26T21:45:25.750" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="647" PostTypeId="1" AcceptedAnswerId="649" CreationDate="2016-05-26T22:06:02.137" Score="10" ViewCount="1245" Body="&lt;p&gt;How does one use joysticks in a program on the Apple //?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have three different joysticks here and I would like to visualize their state (pot and button values), maybe similar to the SDL joystick test, for anyone who's ever seen that.  That seems like it should be fairly easy to do in Applesoft and run real-time enough to see jitter or worn switches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the BASIC program is useful more as an exercise than a diagnostic, is there a better tool for testing joysticks?&lt;/p&gt;&#xA;" OwnerUserId="539" LastActivityDate="2021-04-10T18:34:47.620" Title="Testing/using a joystick in AppleSoft?" Tags="&lt;apple-ii&gt;&lt;hardware&gt;&lt;applesoft-basic&gt;&lt;joystick&gt;&lt;hardware-testing&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="648" PostTypeId="2" ParentId="644" CreationDate="2016-05-26T22:24:13.100" Score="10" Body="&lt;p&gt;Some computer languages had a very strict syntax. COBOL, which is the language featured in your pictures, is a good example of this. The language only allows code to be entered from column 8 or 12 (depending on if it is a division, or a section). Column 7 was used to mark the line as a comment (by using an asterisk, AFAIR), and so on. FORTRAN, which is the language the second form you feature is for, uses the character C (in a specific column if I remember well) to mark the line as a comment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why? Several reasons. Among them:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Simplifies the compiler and the compiling process: by forcing source code to follow strict indentation rules, the lexical analyzer is much more easy to write and thus needs less memory and executes faster. Remember that memory and computing power were scarce resouces back in the day.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Force the programmer to follow a programming style that may help him to quickly find bugs. Specifically, COBOL was designed to be understable for non-programmers (bankers are not very comfortable not knowing what a computing nerd is doing with his money, so they needed a computer language that they could understand)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Such forms were needed as a previous step, to later make punched cards from them. COBOL, for example, had more restrictions to suit punch cards, such as the maximum length allowed in a line (72 chars if I remember well). These restrictions were in part forced by the fact that each line in a COBOL programming form had to be encoded onto a punched card, each character into each column, and with a maximum of 72 columns (this is from memory). The special column to mark the whole line as a comment is a needed feature to speed up the process of entering the computer program from a punched card reader: the reader could just throw away the whole card if the special column is marked with the comment character.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="105" LastEditorUserId="-1" LastEditDate="2016-05-27T14:24:16.087" LastActivityDate="2016-05-27T14:24:16.087" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="649" PostTypeId="2" ParentId="647" CreationDate="2016-05-26T23:54:47.370" Score="10" Body="&lt;p&gt;The paddles and joysticks on the Apple work by charging a capacitor through a variable resistance (potentiometer). For the first joystick, the X-axis corresponds to paddle 0, and the Y-axis to paddle 1, and similarly for the second joystick.&lt;/p&gt;&#xA;&lt;p&gt;Accessing address $C070 discharges all capacitors, so they can now charge with a speed that is determined by the resistance. Addresses $C064 to $C067 can be read to check if the capacitor is fully charged (MSB set). BASIC is too slow to do that accurately, so you can use the inbuilt &lt;code&gt;PDL(x)&lt;/code&gt; commands, which call the monitor routine &lt;code&gt;PREAD&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The 3 buttons can be read by checking the MSB of addresses $C061 to $C063. In BASIC, you can use the following PEEK commands to get the values.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PEEK 49249 - PADDLE 0 BUTTON (&amp;gt;127 IF BUTTON PRESSED)&lt;/li&gt;&#xA;&lt;li&gt;PEEK 49250 - PADDLE 1 BUTTON (&amp;gt;127 IF BUTTON PRESSED)&lt;/li&gt;&#xA;&lt;li&gt;PEEK 49251 - PADDLE 2 BUTTON (&amp;gt;127 IF BUTTON PRESSED)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Here is a simple program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 LET X = PDL(0)&#xA;20 LET Y = PDL(1)&#xA;30 PRINT &amp;quot;X=&amp;quot;;X;&amp;quot; Y=&amp;quot;;Y&#xA;40 GOTO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I've just tested that in AppleWin using the mouse as the joystick and it works fine.&lt;/p&gt;&#xA;&lt;p&gt;More details about reading the paddles can be found in the appnote &lt;a href=&quot;http://www.1000bit.it/support/manuali/apple/technotes/aiie/tn.aiie.06.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, which explains some of the quirks you'll need to be aware of.&lt;/p&gt;&#xA;" OwnerUserId="393" LastEditorUserId="10678" LastEditDate="2021-04-10T18:34:47.620" LastActivityDate="2021-04-10T18:34:47.620" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="650" PostTypeId="2" ParentId="641" CreationDate="2016-05-27T00:17:19.797" Score="13" Body="&lt;p&gt;No, this is only for RAM. The jumper pack actually just terminates connection of the onboard RAM and adding the expansion pack works just as it sounds.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can even upgrade the capacity to even more RAM than is supplied by the expansion pack and the console will boot with it, but no games will take advantage of it.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://assemblergames.com/l/threads/possible-to-upgrade-n64-ram-internally.34414/&quot;&gt;http://assemblergames.com/l/threads/possible-to-upgrade-n64-ram-internally.34414/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="723" LastActivityDate="2016-05-27T00:17:19.797" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="651" PostTypeId="2" ParentId="641" CreationDate="2016-05-27T06:34:41.260" Score="0" Body="&lt;p&gt;I believe Nintendo had some plans to add some extensions to it but in the end it just was for RAM.  I always wondered that too.&lt;/p&gt;&#xA;" OwnerUserId="730" LastActivityDate="2016-05-27T06:34:41.260" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="652" PostTypeId="2" ParentId="639" CreationDate="2016-05-27T08:54:43.647" Score="10" Body="&lt;p&gt;From something I read just the other day on the news:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;We regularly read floppy disks from 40 years ago and they are as good as new,&quot; he said. [someone at The National Museum of Computing at Bletchley Park]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&quot;Magnetic tape has a real issue because when it is on the reels you&#xA;  have a lot of different layers so you have 'print through',&quot; he said.&#xA;  &quot;This involves the shadow of data on one section of tape being&#xA;  superimposed on the layer above and below. The interference means data&#xA;  quickly gets harder to read.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;http://www.bbc.co.uk/news/technology-36389711&quot;&gt;BBC article&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Certainly from my own experience, well stored 3.5 inch floppy disks are readable after 20 years, if not more.&lt;/p&gt;&#xA;" OwnerUserId="712" LastActivityDate="2016-05-27T08:54:43.647" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="653" PostTypeId="2" ParentId="644" CreationDate="2016-05-27T14:45:29.740" Score="6" Body="&lt;p&gt;I still have some of mine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer, for most large organzations was that you submitted them to the Data Entry Operators who would key them in to make punched cards for you (or for smaller organizations, or if you were a lowly intern, you keyed them in yourself).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you would take your program in the form of punched cards (called a &quot;Deck&quot;) over to the Operators who would load it and schedule it for execution.  Hours or days later, you would receive a fan-fold printout of your programs execution and output.&lt;/p&gt;&#xA;" OwnerUserId="494" LastEditorUserId="494" LastEditDate="2016-05-27T14:53:45.190" LastActivityDate="2016-05-27T14:53:45.190" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="654" PostTypeId="1" AcceptedAnswerId="657" CreationDate="2016-05-27T16:22:42.533" Score="29" ViewCount="2395" Body="&lt;p&gt;I know the LET statement was available in AppleSoft and other Microsoft 8-bit BASICs back in the day, but I can't think of a time where I actually used it. Frankly, I get the impression that it was supported to conform to the Dartmouth standard but the interpreter was smart enough to not require it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was the LET statement actually required anywhere? Were there revisions of Microsoft BASIC that actually used it? Further, if the statement &lt;em&gt;was&lt;/em&gt; used, did the interpreter spend any time pondering it or did it skip right past it?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-06-08T19:31:46.667" Title="Did the LET statement actually do anything in 8-bit Microsoft BASICs?" Tags="&lt;applesoft-basic&gt;&lt;basic&gt;&lt;microsoft-basic&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="656" PostTypeId="2" ParentId="654" CreationDate="2016-05-27T17:21:37.383" Score="18" Body="&lt;p&gt;I can only answer to the first question: the LET statement was actually used in 48K Sinclair BASIC, in which due to the way commands are entered, a keyword is needed before an identifier can be typed, so LET was needed in order to write a variable assignment (although there were unofficial patches to the ROM that eliminated that requirement).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, and while this is not a recommended practice, the use of the LET keyword allowed you to type things like this in Sinclair BASIC:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LET let=0&#xA;LET if i were you=2&#xA;LET i wouldnt treat me the way you do=3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;These examples, BTW, won't work in some MS BASIC interpreters. I have try them with MSX-1.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-05-27T17:29:25.987" LastActivityDate="2016-05-27T17:29:25.987" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="657" PostTypeId="2" ParentId="654" CreationDate="2016-05-27T17:36:04.930" Score="39" Body="&lt;p&gt;Except for the very earliest versions of basic, &lt;code&gt;LET&lt;/code&gt; was rarely used, but the &lt;code&gt;LET&lt;/code&gt; keyword was &lt;em&gt;not&lt;/em&gt; always optional. Early BASIC interpreters required it; however, for &lt;em&gt;most&lt;/em&gt; versions that came out for the PC (including Microsoft BASIC), the use of &lt;code&gt;LET&lt;/code&gt; &lt;em&gt;was&lt;/em&gt; optional.&lt;/p&gt;&#xA;&lt;p&gt;Later standards in BASIC often required that the keyword be supported, but since there was no syntactical ambiguity in leaving it out, it was included simply to ensure compatibility with previous versions of BASIC that require it.&lt;/p&gt;&#xA;&lt;p&gt;From MSDN » &lt;a href=&quot;https://msdn.microsoft.com/en-us/librar/aa243390%28v=vs.60%29.aspx&quot; rel=&quot;noreferrer&quot;&gt;Visual BASIC&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3&gt;Let Statement&lt;/h3&gt;&#xA;&lt;p&gt;Assigns the value of an expression to a variable or property.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;[&lt;strong&gt;Let&lt;/strong&gt;] &lt;em&gt;varname = expression&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Let statement syntax has these parts:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Let&lt;/code&gt; Optional. Explicit use of the Let keyword is a matter of style, but it is usually omitted.&lt;br /&gt;&#xA;…&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I've read and written quite a few BASIC interpreters way back, and the lexer definition of an  assignment statement usually looked something like this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;line-number&lt;/em&gt; [LET] &lt;em&gt;variable&lt;/em&gt; = &lt;em&gt;expression&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;sup&gt;(line numbers were later omitted)&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;That means the appearance of &lt;code&gt;LET&lt;/code&gt; is optional. The only time the interpreter spent in &lt;em&gt;pondering&lt;/em&gt; the &lt;code&gt;LET&lt;/code&gt; statement was in tokenizing the sequence of characters. But once it was parsed, the token was simply discarded. The use of &lt;code&gt;LET&lt;/code&gt; didn't actually add anything in the parsing or execution of code.&lt;/p&gt;&#xA;" OwnerUserId="47" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-05-27T18:50:25.637" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="658" PostTypeId="1" CreationDate="2016-05-28T18:16:28.390" Score="17" ViewCount="1721" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Regular_expression&quot;&gt;Wikipedia&lt;/a&gt;, Regular Expressions (AKA &lt;em&gt;regexes&lt;/em&gt;) have only been around since 1956:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Regular expressions originated in 1956, when mathematician Stephen Cole Kleene described regular languages... Other early implementations of pattern matching include the SNOBOL language, which did not use regular expressions, but instead its own pattern matching constructs.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Regular expressions entered popular use from 1968 in two uses: pattern matching in a text editor and lexical analysis in a compiler.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The description of SNOBOL's pattern matching abilities is vague: I'm not sure if they are actually able to match all regular languages. The article doesn't confirm if anything else came earlier either. I think that there must be something before regexes first became popular in 1968.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really want to know what was the earliest regex flavor. And how does its syntax compare to &quot;modern&quot; regex syntax (PCRE, for example)?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Just to be clear, a regex flavor must be able to do the following things (just not necessarily with this syntax):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Concatenation&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Match &quot;cat&quot; by stringing together three regexes: &lt;code&gt;c&lt;/code&gt; + &lt;code&gt;a&lt;/code&gt; + &lt;code&gt;t&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Union (AKA alternation)&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Match either &quot;c&quot; or &quot;d&quot;: &lt;code&gt;[cd]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Star (AKA repetitions)&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Match &quot;cccccc&quot;: &lt;code&gt;c*&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Any combination of the above&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Concatenation and Union&lt;br&gt;Match either &quot;cat&quot; or &quot;dog&quot;: &lt;code&gt;cat|dog&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Concatenation and Star&lt;br&gt;Match &quot;c&quot;s followed by &quot;d&quot;s: &lt;code&gt;c*d*&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Union and Star&lt;br&gt;Match any pattern of &quot;c&quot; and &quot;d&quot;: &lt;code&gt;[cd]*&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;All three&lt;br&gt;Match any pattern of &quot;cat&quot; and &quot;dog&quot;: &lt;code&gt;(cat|dog)*&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="462" LastActivityDate="2019-09-09T15:17:18.303" Title="What was the first language with regexes?" Tags="&lt;programming&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="659" PostTypeId="5" CreationDate="2016-05-28T18:30:26.093" Score="0" Body="&lt;p&gt;Good software recommendation requests have two components:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A &lt;strong&gt;purpose&lt;/strong&gt; — a task to accomplish&lt;/li&gt;&#xA;&lt;li&gt;Some &lt;strong&gt;objective requirements&lt;/strong&gt; — a minimum set of features&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;We request that answers demonstrate &lt;strong&gt;how&lt;/strong&gt; the recommended product meets the requirement and is suitable for the intended purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're asking for alternatives, be sure to describe the features you're using and why what you have isn't up for the task.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Don't ask about...&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Questions without concrete requirements — if some potential answer would lack a critical feature, we need to know.&lt;/li&gt;&#xA;&lt;li&gt;Hosting recommendations.&lt;/li&gt;&#xA;&lt;li&gt;Game recommendations, unless they solve a specific problem.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;Adapted from &lt;a href=&quot;https://softwarerecs.stackexchange.com/help/on-topic&quot;&gt;the rules&lt;/a&gt; at &lt;a href=&quot;http://softwarerecs.stackexchange.com/&quot;&gt;Software Recommendations&lt;/a&gt;.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="278" LastEditDate="2017-07-12T19:40:10.483" LastActivityDate="2017-07-12T19:40:10.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="660" PostTypeId="4" CreationDate="2016-05-28T18:30:26.093" Score="0" Body="For questions about which software could be or could have been used to accomplish a task." OwnerUserId="462" LastEditorUserId="278" LastEditDate="2017-07-12T19:40:10.483" LastActivityDate="2017-07-12T19:40:10.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="661" PostTypeId="5" CreationDate="2016-05-28T18:48:16.870" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-28T18:48:16.870" LastActivityDate="2016-05-28T18:48:16.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="662" PostTypeId="4" CreationDate="2016-05-28T18:48:16.870" Score="0" Body="For questions about Intel's 386 processor, alternatively known as the i386 or 80386." OwnerUserId="462" LastEditorUserId="462" LastEditDate="2016-05-29T16:04:36.703" LastActivityDate="2016-05-29T16:04:36.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="663" PostTypeId="1" CreationDate="2016-05-28T22:38:48.677" Score="5" ViewCount="274" Body="&lt;p&gt;What 'virtual tape' image format is most suited for data preservation i.e. can store metadata like density and media type of original tape, presence of data past EOT marker, parity/ECC bits etc.?&lt;/p&gt;&#xA;" OwnerUserId="87" LastEditorUserId="3290" LastEditDate="2020-05-01T10:23:35.567" LastActivityDate="2020-05-01T10:23:35.567" Title="Magnetic tape data preservation format" Tags="&lt;cassette-tape&gt;&lt;file-format&gt;&lt;data-preservation&gt;&lt;data-transfer&gt;&lt;magnetic-tape&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="664" PostTypeId="2" ParentId="503" CreationDate="2016-05-29T00:49:16.043" Score="23" Body="&lt;p&gt;The maximum is 8309 ($2075) nibbles for track 0. Well, according to a little experiment I did. ; - )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Disk II uses Constant Angular Velocity standardized by &lt;a href=&quot;https://archive.org/details/bitsavers_shugartSA478_3019449&quot; rel=&quot;noreferrer&quot;&gt;Shugart at 300 RPM&lt;/a&gt;. The earlier 8-inch drives were 360 RPM, and since the physical media was the same it's likely that 300 RPM was chosen to increase data density on the smaller disks, and perhaps reduce controller throughput for use on early computers that were less powerful and cheaper. (But I can't find a reference for this.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disk II spindle speed can be &lt;a href=&quot;https://archive.org/details/Apple_Disk_II_Technical_Procedures&quot; rel=&quot;noreferrer&quot;&gt;manually adjusted&lt;/a&gt; on Apple's analog controller board between approximately 190 and 320 RPM. Slower speed results in higher data density, but this will be limited by physical parameters such as magnetic (iron oxide) particle density and read/write head characteristics - e.g. weaker magnetically induced current in the read head at low speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Track capacity is affected by its contents: since MFM clock pulses aren't used, the data written must be carefully chosen in order to synchronize with and be reliably read by the Disk II controller. This includes restrictions on consecutive zeros, and nibbles with trailing zeroes called self-sync bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However in this experiment I didn't use sync bytes, instead relying on the controller sequencer's natural tendency to quickly sync to certain patterns. A simple nibble count measures the maximum theoretical capacity of the track, ignoring the required overheads of practical data storage. Here is the nibble count code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      ORG $8000&#xA;      LDA #$30    ;WRITE LEN&#xA;      STA $01&#xA;      LDX #$50    ;SLOT * $10&#xA;      LDA $C08D,X ;LOAD WP&#xA;      LDA $C08E,X ;READ WP&#xA;      BPL NOTWP&#xA;      RTS&#xA;NOTWP LDA #$D5    ;1ST NIBBLE&#xA;      STA $C08F,X ;WRITE MODE&#xA;      CMP $C08C,X ;4 - SHIFT&#xA;      BIT $FF     ;3&#xA;      LDY #$00    ;2&#xA;LOOP1 DEC $FF     ;5&#xA;      EOR #$7F    ;2 - D5^AA&#xA;LOOP2 DEC $FF     ;5&#xA;      CMP $FFFF   ;4&#xA;      NOP         ;2&#xA;      STA $C08D,X ;5 - LOAD&#xA;      CMP $C08C,X ;4 - SHIFT&#xA;      DEY         ;2&#xA;      BNE LOOP1   ;3 OR 2&#xA;      DEC $01     ;5&#xA;      BNE LOOP2   ;3 OR 2&#xA;      DEC $FF     ;5&#xA;      DEC $FF     ;5&#xA;MARK  LDA #$FF    ;2 - MARK&#xA;      STA $C08D,X ;5 - LOAD&#xA;      CMP $C08C,X ;4 - SHIFT&#xA;      JSR RTS     ;12&#xA;      LDA #$20    ;2 - ADDR&#xA;      STA STORE+2 ;4&#xA;      STA COUNT+2 ;4&#xA;      LDY $01     ;3&#xA;      STY $00     ;3&#xA;      LDA $C08E,X ;READ MODE&#xA;READ  LDA $C08C,X&#xA;      BPL READ&#xA;STORE STA $2000,Y&#xA;      INY&#xA;      BNE READ&#xA;      INC STORE+2&#xA;      BPL READ    ;TO $8000&#xA;      STA $C088,X ;MOTOR OFF&#xA;      LDX #$00&#xA;COUNT LDA $2000,X&#xA;      CMP MARK+1&#xA;      BNE NEXT&#xA;      LDA COUNT+2 ;PRINT ADDR&#xA;      JSR $FDDA&#xA;      TXA&#xA;      JSR $FDDA&#xA;      LDA #$A0&#xA;      JSR $FDED&#xA;      LDA $01     ;1ST MARK?&#xA;      BEQ COPY&#xA;      TXA         ;NO&#xA;      SEC         ;CALC LEN&#xA;      SBC $00&#xA;      PHA&#xA;      JSR $FE80   ;SETINV&#xA;      LDA COUNT+2&#xA;      SBC $01&#xA;      JSR $FDDA   ;PRINT LEN&#xA;      PLA&#xA;      JSR $FDDA&#xA;      JSR $FE84   ;SETNORM&#xA;      LDA #$8D&#xA;      JSR $FDED&#xA;COPY  LDA COUNT+2&#xA;      STA $01&#xA;      STX $00&#xA;NEXT  INX&#xA;      BNE COUNT&#xA;      INC COUNT+2&#xA;      BPL COUNT   ;TO $8000?&#xA;RTS   RTS         ;YES, DONE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Assembled at $8000, there are some defaults that can be optionally adjusted:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8001: The number of nibbles to write to the track in units of $100 (Default $30 = $3000 nibbles)&lt;/li&gt;&#xA;&lt;li&gt;8005: The drive slot number times $10 (Default $50 - safer than $60!)&lt;/li&gt;&#xA;&lt;li&gt;8010: The first nibble value; this gives a pair sequence via XOR with $7F (Default D5/AA)&lt;/li&gt;&#xA;&lt;li&gt;801E: The XOR value; bit 8 should be 0 (Default $7F)&lt;/li&gt;&#xA;&lt;li&gt;8037: The nibble count mark value (Default $FF)&lt;/li&gt;&#xA;&lt;li&gt;8042: The page to start storing track data when read back and nibble counted (Default $20)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The routine assumes the drive is on and up-to-speed, and that the head is already positioned on the desired track. The defaults as given will write $3000 nibbles of &quot;D5AA&quot; followed by one &quot;FF&quot; mark to the selected drive in slot 5. The track will then be read into memory at $2000-$7FFF and the data scanned for the mark value. Mark locations will be printed in normal text, and length between marks in inverse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an image of a sample run which uses boot 0 to seek track 0 of drive 1 in slot 6 in AppleWin:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cTamZ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cTamZ.png&quot; alt=&quot;Sample run of nibble count routine&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adjusting a real drive's speed (measured with Copy II Plus 8.4) I obtained the following results:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Speed (ms)  Speed (RPM)  Max length  Length (Hex)&#xA;188         319          6015        177F&#xA;200         300          6400        1900&#xA;210         286          6715        1A3B&#xA;220         273          7045        1B85&#xA;230         261          7360        1CC0&#xA;240         250          7680        1E00&#xA;250         240          8004        1F44&#xA;260         231          8309        2075&#xA;270         222          -           -&#xA;280         214          -           -&#xA;317         189          -           -&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;At 270ms and above the sequencer would not auto-sync to simple nibble patterns, though Copy II Plus could still measure drive speed. Its exclusive use of selected sync byte values would likely explain this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tracks written at one speed can be read at another speed that is +/-10ms. I didn't test how far this tolerance extends. Roland Gustafsson (who wrote the copy protection for many Brøderbund titles) says he tried slowing the drive speed but &quot;&lt;a href=&quot;http://boutillon.free.fr/Underground/Deplombage/Interviews/The_Wizard/Roland_Gustafsson.html#F02&quot; rel=&quot;noreferrer&quot;&gt;never used that technique due to compatibility problems. In fact, [he] wrote a speed calibrator that was used at Broderbund to keep the disk drives in spec&lt;/a&gt;&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When speculating about an alternative Constant Linear Velocity capacity you would need to specify the exact hardware being used, since that big a change would probably extend from the controlling software to the magnetic media - and everything in between. There is a good list of existing &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_floppy_disk_formats#Known_disk_logical_formats&quot; rel=&quot;noreferrer&quot;&gt;floppy disk formats on Wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2018-04-20T06:54:37.683" LastActivityDate="2018-04-20T06:54:37.683" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="665" PostTypeId="2" ParentId="281" CreationDate="2016-05-29T10:48:11.707" Score="2" Body="&lt;p&gt;If you need a custom USB keyboard, this ought to be possible with any microcontroller which implementes a full USB device, so long as you can find the relevant codes to generate - that would maybe be simpler than sourcing the right hardware.&lt;/p&gt;&#xA;" OwnerUserId="46" LastActivityDate="2016-05-29T10:48:11.707" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="666" PostTypeId="2" ParentId="658" CreationDate="2016-05-29T17:40:53.653" Score="15" Body="&lt;p&gt;I think I found it. It's called &lt;a href=&quot;https://en.wikipedia.org/wiki/COMIT&quot; rel=&quot;noreferrer&quot;&gt;COMIT&lt;/a&gt;, and it dates back to 1957, just &lt;em&gt;one year&lt;/em&gt; after Kleene's work was published. Wikipedia calls it the &quot;first string processing language&quot;, so it fits the bill very nicely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikipedia also says that its creation led to the creation of SNOBOL. After reading up on SNOBOL a bit, I realized it's actually pretty powerful too, capable of parsing Context-free grammars (CFGs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://babel.hathitrust.org/cgi/pt?id=mdp.39015040285333;view=1up;seq=13&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;An introduction to COMIT programming&lt;/em&gt;&lt;/a&gt; is the best reference for the grammar that I've found so far. Keep in mind, it's an ENTIRE programming language. I am sure it's possible to do all of the things I mentioned; the language is Turing-complete, but it &lt;a href=&quot;http://www.aclweb.org/anthology/T87-1009&quot; rel=&quot;noreferrer&quot;&gt;seems&lt;/a&gt; like it is geared towards non-recursive parsing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The syntaxes for the &quot;patterns&quot; and the &quot;strings&quot; are a little weird (but mutually similar), so I doubt that modern regex syntax was derived from it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The oldest regex flavor with syntax like modern regexes that I know of are Unix utilities, as dirkt mentioned: grep, ed, sed, awk. This could be an entirely different question to ask about.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Characters can be grouped together into arbitrary groups called &lt;em&gt;constituents&lt;/em&gt;, which are separated by plus signs. Ironically, my initial example of concatenation is &lt;em&gt;exactly&lt;/em&gt; how it looks:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C + A + T&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It can also be written as one constituent:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CAT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To include a space, the dash (&lt;code&gt;-&lt;/code&gt;) character is used:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;THE + -CAT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Or, as a single constituent:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;THE-CAT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Strings are stored in memory called the &lt;em&gt;workspace&lt;/em&gt;. &quot;Rules&quot; are matched against the workspace, and replacements can be made. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's pretty easy to do a replacement, actually. To change &lt;code&gt;THE-CAT&lt;/code&gt; into &lt;code&gt;THE-DOG&lt;/code&gt;, you could use this rule:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;* CAT = DOG *&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Deletion is easy too. To remove &lt;code&gt;THE-&lt;/code&gt; from &lt;code&gt;THE-DOG&lt;/code&gt;, you could use this rule:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;* THE- = 0 *&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you have &lt;code&gt;DOG&lt;/code&gt; and wanted to double the &lt;code&gt;G&lt;/code&gt;, you could use numbers. Numbers are meta characters, as my deletion example shows you. Ignoring &lt;code&gt;0&lt;/code&gt;, they have a similar meaning to modern capture groups, if you imagine each constituent as a capture group. For example, &lt;code&gt;G&lt;/code&gt; could be doubled by using the following rule:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;* G = 1 + 1 *&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(No, one plus one isn't two, it's &lt;code&gt;GG&lt;/code&gt;!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving onto more complex constructs, &lt;code&gt;$&lt;/code&gt; is essentially equivalent to the modern &lt;code&gt;.*&lt;/code&gt;. On the other hand, in order to do something similar to the modern &lt;code&gt;.{3}&lt;/code&gt; (three characters), you would use &lt;code&gt;$3&lt;/code&gt; in COMIT (assuming each constituent was a character, I think).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you had &lt;code&gt;THE-CAT + , + -WHO-WISHED + -IT-WAS + -A-DOG + , + -BARKED&lt;/code&gt; and you wanted to remove everything between the commas, you would use:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;* , + $ + , = 0 *&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Like I said, there's a whole lot more past this. It has some type of GOTO, but I don't have any experience with using GOTOs (I come from an era where GOTO is something to be avoided, not taught).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also might help me if I had a way to run this stuff. I guess I'll have to write up a flowchart instead or something &lt;code&gt;:)&lt;/code&gt; &lt;sup&gt;&lt;sub&gt;Edit: Just remembered &lt;a href=&quot;https://regexper.com/#%3C%5B%5E%3E%5D%2B%3E&quot; rel=&quot;noreferrer&quot;&gt;this site&lt;/a&gt; gives me flowcharts automatically from regexes... No paper needed&lt;/sub&gt;&lt;/sup&gt; .&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2016-05-30T04:49:32.770" LastActivityDate="2016-05-30T04:49:32.770" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="667" PostTypeId="1" AcceptedAnswerId="668" CreationDate="2016-05-30T00:26:42.610" Score="16" ViewCount="609" Body="&lt;p&gt;Each of the SID6581s I have tested sound different, particularly when it comes to filter cutoffs and distortion.  What are the causes of these variances?&lt;/p&gt;&#xA;" OwnerUserId="64" LastActivityDate="2016-05-30T01:33:40.210" Title="Why was the audio output of the SID6581 so variable between chips?" Tags="&lt;hardware&gt;&lt;commodore-64&gt;&lt;audio&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="668" PostTypeId="2" ParentId="667" CreationDate="2016-05-30T01:33:40.210" Score="16" Body="&lt;p&gt;SID6851 specification quotes: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Cut-off frequency variation may occur from chip to chip due to&#xA;  process variations, and power supply voltage. Capacitor values and&#xA;  voltage regulation can compensate for these variations&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;We're talking about a 30-some years old chips, the manufacturing process wasn't very consistent back then, and also MOS was known to have issues with some process steps such as passivation layer that was &quot;leaking&quot; and allowing external elements to &quot;age&quot; the chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, SID is in big part an analog chip, there are plenty of analog components there on a die (this is why it's so hard to reimplement say in FPGA), each and every one of those analog components can vary between chips slightly.&lt;/p&gt;&#xA;" OwnerUserId="367" LastActivityDate="2016-05-30T01:33:40.210" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="669" PostTypeId="2" ParentId="663" CreationDate="2016-05-31T06:15:51.590" Score="2" Body="&lt;p&gt;The 'virtual tape' (let's say .TAP files) format will strongly depend on the actual tapes you're trying to back-up. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, Commodore (64) only cares about tape signal crossing zero, so a tape &quot;emulator&quot; simply emits those signals at given intervals. Markers (EOT, ECC) and others are also encoded as the same signals.&#xA;This format simply determines binary 0 or 1 using &quot;spacing&quot; between those zero points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More advanced system may use edge detection (ideally for a square wave), where it might recognize rising and falling edge for a 0 or 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're trying to backup tapes from another platform it may entirely have different format (such as wave type, often sine or square, amplitude coding, signal modulation, multiple tracks etc).&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-06-01T11:52:49.280" LastActivityDate="2016-06-01T11:52:49.280" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="670" PostTypeId="1" AcceptedAnswerId="671" CreationDate="2016-05-31T15:53:07.237" Score="11" ViewCount="786" Body="&lt;p&gt;&lt;sub&gt;(This question was inspired by &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/239/621&quot;&gt;Comprehensive test suites for MOS 6520 PIA / 6522 VIA / 6526 CIA&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a comprehensive test suite for the Intel 808X series of processors?  Something that would test that the chip is operating properly, or an emulator has implemented all of the instructions properly.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-08-12T14:38:29.610" Title="8080/8085 Instruction Test Suite" Tags="&lt;assembly&gt;&lt;8080&gt;&lt;8085&gt;&lt;testing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="671" PostTypeId="2" ParentId="670" CreationDate="2016-05-31T15:53:07.237" Score="12" Body="&lt;p&gt;I've found three programs which together make up quite a comprehensive test suite.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8080/8085 CPU Diagnostic, version 1.0, by Microcosm Associates&lt;/li&gt;&#xA;&lt;li&gt;Diagnostics II, version 1.2, CPU test by Supersoft Associates&lt;/li&gt;&#xA;&lt;li&gt;8080/8085 CPU Exerciser by Ian Bartholomew and Frank Cringles&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The assembly of the Microcosm tests, and compiled &lt;code&gt;COM&lt;/code&gt; programs of the other two tests suites can be found in &lt;a href=&quot;https://github.com/begoon/i8080-core&quot;&gt;Alexander Demin's i8080-core repo&lt;/a&gt;, or on &lt;a href=&quot;https://github.com/JALsnipe/i8080-core&quot;&gt;my fork&lt;/a&gt; as a backup.  Unfortunately, it looks like the assembly is only available for Microcosm's test suite.&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-05-31T15:53:07.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="672" PostTypeId="5" CreationDate="2016-05-31T18:29:36.713" Score="0" Body="&lt;p&gt;Use this tag to ask specific questions about retrocomputing keyboard hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sample questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Why do some keyboards have just a few wires and others many more?&lt;/li&gt;&#xA;&lt;li&gt;Some PC keyboards allow for swapping the connector cable between DIN, PS/2 and even USB - how is that possible?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-06-23T06:03:02.180" LastActivityDate="2016-06-23T06:03:02.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="673" PostTypeId="4" CreationDate="2016-05-31T18:29:36.713" Score="0" Body="For questions about the maintenance, usage, or history of retro keyboards." OwnerUserId="462" LastEditorUserId="462" LastEditDate="2016-06-01T02:48:39.217" LastActivityDate="2016-06-01T02:48:39.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="674" PostTypeId="1" CreationDate="2016-05-31T19:05:52.283" Score="16" ViewCount="625" Body="&lt;p&gt;I recently learned about the existence of &lt;a href=&quot;https://en.wikipedia.org/wiki/COMIT&quot; rel=&quot;noreferrer&quot;&gt;COMIT&lt;/a&gt;, which was the first string processing language. It's very old (1957), but it was used a lot in the first 10 years it was around, mainly in academic research. Eventually, it fell into obscurity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems pretty cool, and I'd like to be able to play with it a bit more. It would help me improve &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/666&quot;&gt;my answer about COMIT&lt;/a&gt;, too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;Note that there are numerous things with the &lt;a href=&quot;https://github.com/imshyam/ComIt/blob/master/run.py&quot; rel=&quot;noreferrer&quot;&gt;same name&lt;/a&gt;, but these seem to be unrelated to the COMIT language.&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.mt-archive.info/IFIP-1959-Yngve.pdf&quot; rel=&quot;noreferrer&quot;&gt;This paper&lt;/a&gt; describes a bit about how COMIT programs were run:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The programming of the compiler-interpreter by the MIT Computation Center Staff is well underway and may be completed by the time of the meeting. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm looking for anything (namely software) that will allow me to run COMIT programs. At this point I don't have any other requirements, as I have found nothing so far and I don't want to limit my options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If no software is available, is there another way? I was thinking it could be fruitful to try the academic route. Most of what I've read about the language comes from research papers (none of which were written in the last 40 years, unfortunately). The authors obviously were able to run their COMIT programs, and it would be ideal for future researchers to have the ability to run COMIT programs too, even if for no other reason than to verify the original research.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2019-09-09T16:19:40.057" Title="How can I run COMIT code?" Tags="&lt;software-recommendation&gt;&lt;compilers&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="676" PostTypeId="2" ParentId="674" CreationDate="2016-06-01T01:22:17.253" Score="5" Body="&lt;p&gt;It might not be the easiest way to go about it, but you could possibly try emulating the original IBM 700 / 7000 series mainframe that the code was written for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an emulator for System/370, &lt;a href=&quot;http://www.hercules-390.org/&quot; rel=&quot;noreferrer&quot;&gt;The Hercules System/370, ESA/390, and z/Architecture Emulator&lt;/a&gt;, and System/370 has built in backwards compatibility for the 7000 series.  It might be a great deal of work to get that all set up properly though.&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2016-06-01T01:22:17.253" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="677" PostTypeId="2" ParentId="674" CreationDate="2016-06-01T10:36:08.907" Score="9" Body="&lt;p&gt;Here's a quick, dirty and probably buggy implementation of COMIT in Haskell. &#xA;The &lt;em&gt;COMIT programmers' reference manual&lt;/em&gt; seems to be paywalled (I'm looking at you, ACM!), so I used the description in &lt;em&gt;An introduction to COMIT programming&lt;/em&gt;. Numeral subscripts, shelves etc. are not implemented, and I don't know how to behave in corner cases (like &lt;code&gt;* A + $ + $ + B = 2 *&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's no parser (yet), so instead of &lt;code&gt;LABEL A + $1 + $ = 2 + B NEXT&lt;/code&gt;, you need to write &lt;code&gt;(&quot;LABEL&quot;, [LLit &quot;A&quot;, Repeat 1, Any], [Match 2, RLit &quot;B&quot;], &quot;NEXT&quot;)&lt;/code&gt; etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output is just a list of the workspace states. The workspace itself is a list of strings. Here are two examples from the manual:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ws1 = [&quot; BILL&quot;, &quot;,&quot;, &quot; THEY&quot;, &quot; SAY&quot;, &quot;,&quot;, &quot; IS&quot;, &quot; RETIRED&quot;]&#xA;ex1 = [(&quot;*&quot;, [LLit &quot;,&quot;, Any, LLit &quot;,&quot;], [], &quot;*&quot;)]&#xA;&#xA;*Main&amp;gt; run ex1 ws1&#xA;[[&quot; BILL&quot;,&quot; IS&quot;,&quot; RETIRED&quot;]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and a 3-line program using the marker technique:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ws2 = [&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;A&quot;, &quot;B&quot;]&#xA;ex2 = [(&quot;*&quot;, [Any], [RLit &quot;*Q&quot;, Match 1], &quot;*&quot;),&#xA;  (&quot;FIND&quot;, [LLit &quot;*Q&quot;, Any, LLit &quot;A&quot;], [Match 2, Match 3, Match 1], &quot;FIND&quot;),&#xA;  (&quot;*&quot;, [LLit &quot;A&quot;, LLit &quot;*Q&quot;], [], &quot;*&quot;)]&#xA;&#xA;*Main&amp;gt; run ex2 ws2&#xA;[[&quot;*Q&quot;,&quot;A&quot;,&quot;B&quot;,&quot;C&quot;,&quot;A&quot;,&quot;B&quot;],&#xA; [&quot;A&quot;,&quot;*Q&quot;,&quot;B&quot;,&quot;C&quot;,&quot;A&quot;,&quot;B&quot;],&#xA; [&quot;A&quot;,&quot;B&quot;,&quot;C&quot;,&quot;A&quot;,&quot;*Q&quot;,&quot;B&quot;],&#xA; [&quot;A&quot;,&quot;B&quot;,&quot;C&quot;,&quot;A&quot;,&quot;*Q&quot;,&quot;B&quot;],&#xA; [&quot;A&quot;,&quot;B&quot;,&quot;C&quot;,&quot;B&quot;]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;data LElem a = LLit a | Repeat Int | Any deriving (Show)&#xA;data RElem a = RLit a | Match Int deriving (Show)&#xA;&#xA;type Label = String&#xA;&#xA;type Workspace a = [a]&#xA;type Matching a = [[a]]&#xA;&#xA;type Rule a = (Label, [LElem a], [RElem a], Label)&#xA;&#xA;splits (x:xs) = ([], (x:xs)) : [(x:ys,zs) | (ys,zs) &amp;lt;- splits xs]&#xA;splits [] = [([],[])]&#xA;&#xA;-- if the lhs deosn't start with Any, the zeroeth match takes the part of the&#xA;-- workspace before the actual match. Otherwise, it's empty.&#xA;match :: (Show a, Eq a) =&amp;gt; [LElem a] -&amp;gt; Workspace a -&amp;gt; [Matching a]&#xA;match rs@(Any:_) ws = do { m &amp;lt;- match' rs ws; return ([]:m) }&#xA;match rs ws = matchShortest rs ws&#xA;&#xA;match' :: (Show a, Eq a) =&amp;gt; [LElem a] -&amp;gt; Workspace a -&amp;gt; [Matching a]&#xA;match' [] ws = [[ws]] -- keep end of workspace after match&#xA;match' (LLit l:rs) (w:ws)&#xA;  | l == w    = do { m &amp;lt;- match' rs ws; return ([w]:m) }&#xA;  | otherwise = []&#xA;match' (Repeat n:rs) ws&#xA;  | length ws &amp;gt;= n = do { m &amp;lt;- match' rs (drop n ws); return ((take n ws):m) }&#xA;  | otherwise      = []&#xA;match' [Any] ws = [[ws,[]]] -- $ at end matches everything &#xA;match' (Any:rs) ws = matchShortest rs ws&#xA;match' rs ws = [] -- fail&#xA;&#xA;matchShortest rs ws = take 1 [xs:m | (xs, ys) &amp;lt;- splits ws, m &amp;lt;- match' rs ys]&#xA;&#xA;-- keep first and last part of match, apply rhs to everything else&#xA;replace :: [RElem a] -&amp;gt; Matching a -&amp;gt; Workspace a&#xA;replace rs m = (head m) ++ concatMap f rs ++ (last m) where&#xA;  f (RLit w) = [w]&#xA;  f (Match k) = m !! k&#xA;&#xA;next :: Label -&amp;gt; [Rule a] -&amp;gt; [Rule a]&#xA;next _ [] = []&#xA;next n rss@((n',_,_,_):rss') &#xA;  | n == n'   = rss&#xA;  | otherwise = next n rss'&#xA;&#xA;exec :: (Show a, Eq a) =&amp;gt; [Rule a] -&amp;gt; [Rule a] -&amp;gt; Workspace a -&amp;gt; [Workspace a]&#xA;exec _ [] ws = []&#xA;exec rss css ws = ws' : exec rss css' ws' where&#xA;  (_, lhs, rhs, n):_ = css&#xA;  m = match lhs ws&#xA;  (ws', css') = case (m, n) of&#xA;    ([], _)  -&amp;gt; (ws,   tail css)   -- match failed&#xA;    (_, &quot;*&quot;) -&amp;gt; (ws'', tail css)   -- next line&#xA;    (_, _)   -&amp;gt; (ws'', next n rss) -- goto label&#xA;  ws'' = replace rhs (head m)&#xA;&#xA;run rss ws = exec rss rss ws&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;COMIT feels very similar to &lt;a href=&quot;https://en.wikipedia.org/wiki/Sed&quot; rel=&quot;noreferrer&quot;&gt;sed&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Awk&quot; rel=&quot;noreferrer&quot;&gt;awk&lt;/a&gt;, except that it works on list of words (&quot;constituents&quot;) instead of just a list of characters, and so is obviously geared to represent grammars and term rewriting systems.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-06-01T10:36:08.907" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="678" PostTypeId="1" AcceptedAnswerId="680" CreationDate="2016-06-01T12:11:22.690" Score="21" ViewCount="2473" Body="&lt;p&gt;Debuggers are carefully written programs that peek and poke other programs while they run. In retrocomputers, programs could use any part of the memory they could access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how did debuggers insert themselves into memory so they could be executed, without overwriting - or being overwritten by - the target program or its data?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="519" LastEditDate="2017-03-31T15:33:41.950" LastActivityDate="2017-03-31T18:54:47.267" Title="How did debugging software run without memory protection?" Tags="&lt;debugging&gt;" AnswerCount="5" CommentCount="12" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="679" PostTypeId="2" ParentId="678" CreationDate="2016-06-01T12:34:54.787" Score="19" Body="&lt;p&gt;A debugger that runs inside the debugged machine is a program, so it does need memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes the debugger is loaded as a ROM cartridge, usually with its own RAM, so it doesn't need to take any RAM from the running program. This is the case with, for example, the Action Replay modules for the Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes, it's a regular program that takes some RAM, but it can be reallocated at load time so if you know in advance that the program to examine won't use a certain block of RAM, you can load the debugger there. This is the case with, for example, the MONS 3 debugger for the ZX Spectrum&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes, the debugger cannot find any &quot;normal&quot; RAM to execute from, so there are debuggers that load themselves into the screen memory, like this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EjZrQ.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EjZrQ.gif&quot; alt=&quot;Gray display with black garbage in the top third&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, that's a program. You can try to dump this screen into a ZX Spectrum emulator screen and do a PRINT USR 16384 to execute it :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only kind of debuggers that don't really need any memory at all from the debugged machine are the so called ICE (In Circuit Emulators), which either take the place of the main CPU, emulating its behaviour and reporting data to a external machine, or are logic analyzers that can decode bus cycles and present you a disassembly dump of real instructions actually executed in real time by the machine being debugged.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="278" LastEditDate="2016-06-02T09:53:02.383" LastActivityDate="2016-06-02T09:53:02.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="680" PostTypeId="2" ParentId="678" CreationDate="2016-06-01T14:27:23.823" Score="28" Body="&lt;p&gt;Without hardware support, there is no way for a debugger to protect itself from the program being debugged. A debugger needs to protect its code and working state, as well as any hooks it's set up for its debugging (&lt;em&gt;e.g.&lt;/em&gt; single-stepping interrupts); but in typical &quot;retro&quot; systems (8-bit machines), a debugger would just insert itself into memory and hope for the best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Debuggers hosted on the same system as the code being debugged, and implemented entirely in software, would only be able to rely on the cooperation of the program being debugged and the person doing the debugging. Most debugging isn't adversarial: the code being debugged isn't actively taking measures against the debugger, so the debugger doesn't need to actively protect itself. (If a bug destroys the debugger as well as the program being debugged, well...) The debugger can offer configuration options to the end-user to facilitate things of course, but there will always be limitations that the end-user will have to live with (using a debugger leaves less RAM for the program being debugged, it might use some interrupts that the program would want for itself, etc.) — all told though the gain from having a hosted debugger makes it worthwhile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some early debuggers used extra hardware, without special CPU support, to reduce the level of compromise:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;hosting the debugger in a cartridge means the code can't be touched&lt;/li&gt;&#xA;&lt;li&gt;a cartridge can also provide extra RAM, which means the debugger's working state doesn't reduce the amount of memory available (at least, on systems with less RAM than their address space)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;but, without a MMU, all this still happens in the same address space (even if banking is involved) so it's only reliable in non-adversarial debugging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adversarial debugging, or any form of complex debugging really (kernel debugging etc.) requires hardware support. This can take a number of forms:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a MMU to provide memory and I/O protection&lt;/li&gt;&#xA;&lt;li&gt;CPU support for some level of virtualisation (&lt;em&gt;e.g.&lt;/em&gt; V86-mode on the 386)&lt;/li&gt;&#xA;&lt;li&gt;outside hardware, using a second computer for debugging — this was very common, in a variety of forms (a small debugging shim running on the host and communicating with the debugger via a serial port, the network etc.; ICEs clipped to the CPU, or replacing the CPU...)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Hosted debuggers, especially for adversarial debugging, only really took off with the arrival of MMUs and CPU-based protection; &lt;em&gt;e.g.&lt;/em&gt; Turbo Debugger 386, SoftICE... Multi-host debugging is still used in many cases, &lt;em&gt;e.g.&lt;/em&gt; embedded development, development on mobile phones (using emulators or real devices), kernel debugging...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were some systems where the whole operating environment was constantly debuggable, &lt;em&gt;e.g.&lt;/em&gt; Lisp Machines, but again that's non-adversarial debugging in most cases.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="632" LastEditDate="2017-03-29T12:58:56.257" LastActivityDate="2017-03-29T12:58:56.257" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="681" PostTypeId="2" ParentId="638" CreationDate="2016-06-01T15:42:03.657" Score="8" Body="&lt;p&gt;It's a mix of different smells.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of it is just stale air: some computers stay days on a shelf, even if it's a new model. If you have ever stepped into an old room or sat in a car which hasn't been opened for days, you'll know what that smells like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than the air, there's a lot of plastic in that box. Both the polyethylene packing and the casing are polymers, and if you leave it like that, it gives the box a distinctive smell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not a perfume; if it was they wouldn't use it, because that costs money.&lt;/p&gt;&#xA;" OwnerUserId="762" LastEditorUserId="762" LastEditDate="2016-06-01T16:51:10.533" LastActivityDate="2016-06-01T16:51:10.533" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="682" PostTypeId="2" ParentId="145" CreationDate="2016-06-01T19:35:15.387" Score="13" Body="&lt;p&gt;As noted, the 6502 has only single 8-bit adder, plus a special increment circuit for the top half of the program counter.  Having a full 16-bit adder would avoid the page-boundary penalty for branch instructions, but wouldn't help with indexed loads.  By the time the CPU fetches the upper byte of a base address, the 8-bit ALU will have already done everything it needs to do with the lower half of the address, and would be available to compute the upper half.  The reason the 6502 can't immediately issue the next access for a page-crossed address isn't that the ALU is too short, but rather that it's too slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each time the 6502 receives a byte of data it must &lt;em&gt;immediately&lt;/em&gt; turn around and supply the next address.  In cases where the upper or lower byte of the next address matches the fetched data verbatim, the data can be latched and ready for the next cycle, but in all other cases the 6502 must output the next address before it has had a chance to examine the newly-fetched byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare the execution of &lt;code&gt;ADC 12,X&lt;/code&gt; and &lt;code&gt;ADC $3456,X&lt;/code&gt;.  In either case, the&#xA;6502 will start by fetching the opcode (possibly while finishing up the&#xA;previous instruction).  Even while it's fetching the opcode, it knows&#xA;what it will do next cycle (fetch the following byte).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the CPU is fetching the byte following the opcode, it can look at&#xA;the first byte and determine that it's going to need to add the byte&#xA;that it's fetching to the value in x.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the third cycle of either instruction, the CPU will add the value&#xA;fetched in the second cycle to the value in X.  When using the &lt;code&gt;ADC $3456,X&lt;/code&gt;&#xA;instruction, the CPU will have something else useful it can do at&#xA;the same time: fetch the upper byte of the address.  When using the&#xA;&lt;code&gt;ADC $12,X&lt;/code&gt; instruction, however, there won't be anything useful&#xA;for the CPU to do while performing the address computation, so it will&#xA;just perform a dummy cycle with the last thing on the bus ($12).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In either case, the fourth cycle will use the newly-calculated address along with either $00 [for the ZP,X form] or the newly-fetched upper byte [for the ABS,X form].  During that cycle, the ABS,X instruction will also compute&#xA;the value of (upper byte + 1) in case that turns out to be needed, and will&#xA;figure out what should happen on the cycle after that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it turns out that there was no carry from the lower half, then instruction execution will be complete so the 6502 can fetch the next instruction while it actually adds the newly-fetched value to the accumulator.  Otherwise the 6502 will have to add another cycle to perform a fetch from the correct address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the 6502 to avoid a cycle penalty when an indexed load crosses a page boundary, it would have to have something useful it could do during that cycle.  Adding a little sequencing logic might make it possible for the 6502 to unconditionally fetch the first byte of the next opcode during the address computation stage, but the 6502 normally uses the first instruction-fetch cycle to perform &quot;cleanup&quot; from the previous instruction.  Pushing the cleanup to the second cycle of an instruction might be possible, but would require adding some additional internal registers and logic.  I don't think a 16-bit ALU would be needed, though:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ADC $1234,X&#xA;First byte was fetched during previous instruction&#xA;Fetch second byte while completing previous instruction&#xA;Fetch third byte while computing LSB of address&#xA;Fetch first byte of next instruction while computing MSB of address&#xA;Fetch byte from computed address&#xA;Fetch second byte of next instruction while performing ADC.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Reordering operations that way would eliminate the page-boundary cycle&#xA;penalty, but I don't know that the performance gain would be sufficient to&#xA;justify the cost [as well as the quirky behavior that would result when&#xA;switching banks while code is executing].&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="2126" LastEditDate="2017-06-13T22:03:32.347" LastActivityDate="2017-06-13T22:03:32.347" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="683" PostTypeId="1" AcceptedAnswerId="684" CreationDate="2016-06-01T23:40:22.113" Score="61" ViewCount="10092" Body="&lt;p&gt;In my perception, the most common color for monochrome computer monitors is green or white/grey, though I have seen orange monitors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this genuinely the case, and if so, is there a reason for it?&lt;/p&gt;&#xA;" OwnerUserId="221" LastActivityDate="2016-06-04T10:14:43.257" Title="Why are a lot of monochrome computer monitors green?" Tags="&lt;display&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="684" PostTypeId="2" ParentId="683" CreationDate="2016-06-01T23:49:51.853" Score="68" Body="&lt;p&gt;There were a few reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Old monitors had very low &lt;a href=&quot;https://books.google.co.jp/books?id=n_epgHWbpwkC&amp;amp;pg=PA305&amp;amp;lpg=PA305&amp;amp;dq=green%20phosphor%20refresh%20rate&amp;amp;source=bl&amp;amp;ots=3bJMmOrMOe&amp;amp;sig=RGPf3c6m-VZpSBNQ3os9tYkcd8U&amp;amp;hl=en&amp;amp;sa=X&amp;amp;redir_esc=y#v=onepage&amp;amp;q=green%20phosphor%20refresh%20rate&amp;amp;f=false&quot;&gt;refresh rates&lt;/a&gt; (driven by hardware prices), and green phosphor has the longest afterglow (remains on the screen for the longest time)&lt;/li&gt;&#xA;&lt;li&gt;Green phosphor was the first available for use in monitors (and some&#xA;sources also say that monitors of this type were physically lighter)&lt;/li&gt;&#xA;&lt;li&gt;It was the brightest type of phosphor&lt;/li&gt;&#xA;&lt;li&gt;Human eye responds to the &lt;a href=&quot;https://micro.magnet.fsu.edu/primer/lightandcolor/humanvisionintro.html&quot;&gt;green color the best&lt;/a&gt;, (&lt;a href=&quot;https://en.wikipedia.org/wiki/Primary_color&quot;&gt;it's right in the middle of the visible spectrum)&lt;/a&gt; (compared to red or&#xA;blue)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In short, green phosphor allowed to make cheaper monitors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Orange (or Amber which is the proper name) came later under demand from businesses, it was easier on the eyes to read but required faster refresh rate and therefore was more expensive to manufacture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a sidenote, many (if not all) monochrome (includes black and white) monitors only use green component (displayed as shades of grey obviously) from the color spectrum when connected to a color signal source, they don't even use other color components.&#xA;This is easy to observe by hooking up a b/w monitor to VGA output.&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-06-02T13:04:41.417" LastActivityDate="2016-06-02T13:04:41.417" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="685" PostTypeId="2" ParentId="683" CreationDate="2016-06-01T23:54:57.853" Score="5" Body="&lt;p&gt;Green was certainly the most common phosphor for a long time, the amber and grey monochrome monitors started to appear in the 1980s, I think.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two factors that I think contribute to the choice of colour. One is the stability of the particular phosphor in operation, the other is the related issue of manufacturing quality and absence of contamination, as well as other technical caracteristics of the tubes which maybe offset the cost of the phosphor component.&lt;/p&gt;&#xA;" OwnerUserId="46" LastEditorUserId="46" LastEditDate="2016-06-04T10:14:43.257" LastActivityDate="2016-06-04T10:14:43.257" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="687" PostTypeId="1" AcceptedAnswerId="704" CreationDate="2016-06-02T08:06:14.497" Score="43" ViewCount="7415" Body="&lt;p&gt;I'm curious, what was the first book, about programming for digital computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to google it, but it led me to multiple results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm mostly interested in the language it was about and the writer.&lt;/p&gt;&#xA;" OwnerUserId="762" LastEditorDisplayName="user11467" LastEditDate="2018-12-31T10:58:07.040" LastActivityDate="2018-12-31T10:58:07.040" Title="What was the first programming book" Tags="&lt;history&gt;&lt;programming&gt;&lt;documentation&gt;" AnswerCount="8" CommentCount="5" FavoriteCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="688" PostTypeId="1" AcceptedAnswerId="692" CreationDate="2016-06-02T08:49:35.093" Score="12" ViewCount="851" Body="&lt;p&gt;I have a ZX Spectrum 48k on which the keyboard membrane has cracked over the years and, while the Speccy itself is operational, has rendered the computer unusable. I am now in possession of a replacement membrane keyboard for the Spectrum, but I can find no guides as to how I should replace it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the correct way to replace the membrane keyboard on a ZX Spectrum (48k)?&lt;/p&gt;&#xA;" OwnerUserId="517" LastEditorUserId="462" LastEditDate="2016-06-11T04:59:27.853" LastActivityDate="2018-01-01T21:57:18.097" Title="How do I replace a ZX Spectrum 48k keyboard membrane?" Tags="&lt;zx-spectrum&gt;&lt;keyboards&gt;&lt;maintenance&gt;&lt;membrane-keyboard&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="689" PostTypeId="1" AcceptedAnswerId="694" CreationDate="2016-06-02T08:58:36.690" Score="1" ViewCount="234" Body="&lt;p&gt;In the past, a program could only use a specific part of the computer's memory. If multiple instances of the same program were open, they shared this one memory block. To prevent this, some developers closed their program automatically, if an instance of it was already opened.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did this exist? Was it bad for the computer, when a program took up multiple blocks from the memory?&lt;/p&gt;&#xA;" OwnerUserId="762" LastEditorUserId="621" LastEditDate="2016-06-02T12:34:14.987" LastActivityDate="2020-05-26T12:42:01.777" Title="Program memory limit" Tags="&lt;programming&gt;" AnswerCount="3" CommentCount="8" ClosedDate="2016-06-02T18:47:23.800" ContentLicense="CC BY-SA 3.0" />
  <row Id="690" PostTypeId="2" ParentId="689" CreationDate="2016-06-02T09:19:01.877" Score="1" Body="&lt;p&gt;If a computer system was capable of running multiple programs simultaneously, it had an OS that could partition memory appropriately.  Microcomputers usually couldn't have two programs running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a while in the 1970s - 1980s, RAM was the single most expensive component of a computer, and so was fitted sparingly.  Programmers had to be very aware of its use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you had two copies of the same program running, especially with both trying to access the same peripheral, it had a negative effect.  It both slowed the whole system down and would impact availability of the heap.  It was also possible, depending upon the program itself, for the two copies to affect each other.  Generally speaking, running two copies of a program was pointless and a bad idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was usually a simple check if the programme was already running (it still is) and so worth doing.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-02T09:49:26.657" LastActivityDate="2016-06-02T09:49:26.657" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="691" PostTypeId="2" ParentId="687" CreationDate="2016-06-02T09:26:04.763" Score="20" Body="&lt;ol start=&quot;1956&quot;&gt;&#xA;&lt;li&gt;FORTRAN for the IBM 704.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.fortran.com/FortranForTheIBM704.pdf&quot;&gt;Link to a PDF here.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My justification for this choice is that FORTRAN is the earliest &quot;proper&quot; language in widespread use that I can think of.&lt;/p&gt;&#xA;" OwnerUserId="712" LastActivityDate="2016-06-02T09:26:04.763" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="692" PostTypeId="2" ParentId="688" CreationDate="2016-06-02T10:11:36.527" Score="11" Body="&lt;p&gt;For the keyboard itself:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Undo the screws from the bottom of the case.&lt;/li&gt;&#xA;&lt;li&gt;Lift the top of the case gently off.&lt;/li&gt;&#xA;&lt;li&gt;Disconnect the ribbon cables from the keyboard (CAREFUL fragile)&lt;/li&gt;&#xA;&lt;li&gt;Slide out the keyboard.&lt;/li&gt;&#xA;&lt;li&gt;Insert the new one and attach the ribbon cables.&lt;/li&gt;&#xA;&lt;li&gt;Clip the case back together and do up the screws&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For the membrane:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Prise the top off the case - early models were clipped, later ones glued&lt;/li&gt;&#xA;&lt;li&gt;Gently pull the keyboard membrane and its support out of the case.&lt;/li&gt;&#xA;&lt;li&gt;Blow out the years of accumulated grot.&lt;/li&gt;&#xA;&lt;li&gt;Slide the new keyboard and membrane back in.&lt;/li&gt;&#xA;&lt;li&gt;Clip / tack the case back together.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There is a much longer guide &lt;a href=&quot;http://www.dataserve-retro.co.uk/contents/en-uk/d31.html&quot;&gt;here&lt;/a&gt; with pictures.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-02T10:24:02.743" LastActivityDate="2016-06-02T10:24:02.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="693" PostTypeId="2" ParentId="689" CreationDate="2016-06-02T12:01:15.643" Score="3" Body="&lt;p&gt;I believe you're referring to systems without memory management, and specifically, Operating Systems running on hardware without MMU (memory management unit) and without virtual memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programs are actually pretty fixed when it comes to memory, from the very start (program always starts from a particular address), through execution (memory jumps, branches), until the end (returning from the program).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Virtual memory and MMU allow a program to &quot;think&quot; that it's in a fixed memory space, but in reality the MMU and OS translate those addresses behind the scenes to actual hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Old computers simply didn't have any such hardware or even the need for it, especially when running one program at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I don't think that multiple instances can ever occupy the same memory (block), in a single-tasking system you simply can't run multiple programs, and in a multi-tasking there will always be some piece translating memory between program and hardware.&lt;/p&gt;&#xA;" OwnerUserId="367" LastActivityDate="2016-06-02T12:01:15.643" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="694" PostTypeId="2" ParentId="689" CreationDate="2016-06-02T12:43:47.137" Score="4" Body="&lt;p&gt;You've referred to Windows, and the question does only make sense on multitasking systems. I believe the reasoning comes not only from the need to save total memory usage but also beliefs at the time about how windowing systems should work: the MDI (multiple document interface) paradigm. So the user would open multiple documents all running within one instance of the program. It would also provide a means of getting back to the already running copy for inexperienced GUI users who'd task-switched away back to the launcher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Windows WinMain hPrevInstance there is this: &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20040615-00/?p=38873&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://devblogs.microsoft.com/oldnewthing/20040615-00/?p=38873&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="778" LastEditorUserId="79" LastEditDate="2020-05-26T12:42:01.777" LastActivityDate="2020-05-26T12:42:01.777" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="696" PostTypeId="1" CreationDate="2016-06-02T13:42:26.350" Score="16" ViewCount="1142" Body="&lt;p&gt;Building my own version of CP/M has always been a fascinating to-do project. Problem is that it seems that the source code is not in regular assembler, but some kind of macro-assembler like language Gary Kildall developed to ease CP/M maintenance, so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a toolchain and documented workflow that I can use to customize my own version of CP/M (both BIOS and BDOS)? Is the CP/M source code available in regular Z80 assembler (I'm most used to Z80 nmemonics than 8080's)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify things, I'm looking for something like: grab this well-commented ASM source code, modify it, assemble it with PASMO (or SjASM or any other available Z80 assembler) to have a pure binary file with BIOS/BDOS/whatever. And if possible, CP/M Plus. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: I'm aware that after getting my binary, I would need some custom tools to put it in the boot sector of whatever media I use to boot the machine, but I'm not asking for that part of the workflow.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="3290" LastEditDate="2020-07-25T11:12:58.083" LastActivityDate="2020-07-25T11:12:58.083" Title="Toolchain and workflow to build CP/M" Tags="&lt;assembly&gt;&lt;programming&gt;&lt;cp-m&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="697" PostTypeId="5" CreationDate="2016-06-02T14:11:47.563" Score="0" Body="&lt;p&gt;The CP/M operating system (acronym for &lt;strong&gt;C&lt;/strong&gt;ontrol &lt;strong&gt;P&lt;/strong&gt;rogram for &lt;strong&gt;M&lt;/strong&gt;icrocomputers) is an operating system developed by Gary Kildall at Digital Research for the 8080 microprocessor, although it can be used in Z80 environments, where it gained popularity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For questions related to a particular implementation of CP/M, please add the relevant tag indicating the target machine. For programming for CP/M, also use the &lt;a href=&quot;/questions/tagged/programming&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;programming&amp;#39;&quot; rel=&quot;tag&quot;&gt;programming&lt;/a&gt; tag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More information about CP/M:&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M&quot; rel=&quot;nofollow&quot;&gt;https://en.wikipedia.org/wiki/CP/M&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unofficial page devoted to the CP/M (with lots of information and source code):&#xA;&lt;a href=&quot;http://www.cpm.z80.de/&quot; rel=&quot;nofollow&quot;&gt;http://www.cpm.z80.de/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="278" LastEditDate="2016-09-10T18:20:19.313" LastActivityDate="2016-09-10T18:20:19.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="698" PostTypeId="4" CreationDate="2016-06-02T14:11:47.563" Score="0" Body="For questions related to the CP/M operating system by Gary Kildall." OwnerUserId="105" LastEditorUserId="278" LastEditDate="2016-09-10T18:20:19.313" LastActivityDate="2016-09-10T18:20:19.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="699" PostTypeId="2" ParentId="687" CreationDate="2016-06-02T14:43:32.190" Score="2" Body="&lt;p&gt;I remember in the mid 1980s there was a was a workbook around in UK schools for BBC Basic which mixed the programming language with basic mathematics concepts. I also remember around the same time there was a magazine for the Acorn Electron which, amongst other things, published various bits of code as plain text which you typed in yourself and could 'save' onto audio tape (in those days you really did need to save work regularly) &lt;/p&gt;&#xA;" OwnerUserId="789" LastActivityDate="2016-06-02T14:43:32.190" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="700" PostTypeId="2" ParentId="678" CreationDate="2016-06-02T16:39:41.540" Score="3" Body="&lt;p&gt;On 8-bit machines any debugging support would just be a normal program in memory, and the application could accidentally overwrite the debugger. To single step through a program involved replacing some code in the application with a call or software interrupt that returned control to the debugger. It was all too easy to get a breakpoint in the wrong place and completely lose control of the debugger and the application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later on (in the early PC era), this principle was still the same.  MS-DOS had a DEBUG application, and this would load in memory first, in turn loading the application on top of itself higher in memory. The 8088/8086 chips had no way to protect one segment of memory from another, so MS-DOS was not designed to manage memory to protect applications from each other. Consequently it was quite possible for the application under test to accidentally clobber the debugger and prevent it from working properly. Sometimes the machine just locked up and you just had to start back at the beginning.&lt;/p&gt;&#xA;" OwnerUserId="26" LastActivityDate="2016-06-02T16:39:41.540" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="701" PostTypeId="2" ParentId="687" CreationDate="2016-06-02T18:49:10.670" Score="12" Body="&lt;p&gt;I found something from 1949; it's a 4 page article that describes programming for the EDSAC. It's &lt;em&gt;like&lt;/em&gt; a book, but whether it counts as one for this question I leave open. In any case, I think it's worth mentioning in any case.&lt;/p&gt;&#xA;&lt;p&gt;There's one copy I found online, but it's behind a &lt;a href=&quot;http://iopscience.iop.org/article/10.1088/0950-7671/26/6/318/meta&quot; rel=&quot;noreferrer&quot;&gt;paywall&lt;/a&gt;. Fortunately, I get access through my university, so I was able to copy a little from it. (Tell me if you think I missed an OCR error.)&lt;/p&gt;&#xA;&lt;h1&gt;Programme Design for a High-speed Automatic Calculating Machine&lt;/h1&gt;&#xA;&lt;p&gt;By M. V. Wilkes, M.A., Ph.D., The Mathematical Laboratory, University of Cambridge&#xA;[MS. received 18 February 1949]&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A good deal has been written about the design and construction of high-speed automatic calculating machines, but little has been said about the detailed steps which are necessary to prepare a problem for a machine and to obtain a solution– a process which is usually referred to as 'programming'. Such aspects are, however, of primary interest to mathematical physicists and engineers who may be wondering what help they can expect from high-speed calculating machines in their own problems. It is intended in this article to supply some of this information; most of it will be well known to those engaged on calculating-machine development.&lt;/p&gt;&#xA;&lt;p&gt;As far as details go: reference will be made to a machine known as the&#xA;EDSAC (Electronic Delay Storage Automatic Calculator) which is at present being built in the University Mathematical Laboratory at Cambridge, although certain complications which are unimportant for the present purpose will be ignored. The same principles will be applicable to other machines of similar type.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also note that it makes specific mention of things being &lt;em&gt;digital&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The mathematical application of a digital machine can be&#xA;discussed quite apart from any consideration of its construction.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="462" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-06-03T14:40:05.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="702" PostTypeId="2" ParentId="687" CreationDate="2016-06-02T19:23:01.947" Score="19" Body="&lt;p&gt;If you insist on a book, try &lt;strong&gt;&lt;em&gt;The Preparation of Programs for an Electronic Digital Computer&lt;/em&gt;&lt;/strong&gt;, by Wilkes, Wheeler, and Gill, 1951.  Undoubtedly this book derives in large part from the article referenced by @Laurel.&lt;/p&gt;&#xA;" OwnerUserId="801" LastActivityDate="2016-06-02T19:23:01.947" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="703" PostTypeId="2" ParentId="654" CreationDate="2016-06-02T20:11:48.207" Score="0" Body="&lt;p&gt;When I started programming, there was only BASIC and GW BASIC followed. In those days you had to plan and reserve your memory, because there wasn't not much. LET and DIM did that trick. LET assigned memory to a variable and with DIM you had the option to define how much memory.&lt;/p&gt;&#xA;" OwnerUserId="805" LastActivityDate="2016-06-02T20:11:48.207" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="704" PostTypeId="2" ParentId="687" CreationDate="2016-06-02T21:35:24.767" Score="51" Body="&lt;p&gt;I would say one of the versions of the Menabrea paper, written in 1842 by Luigi F. Menabrea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ada Lovelace became involved in computing when she was asked to translate this paper from Italian to French. She did so, and unlike many translators, was knowledgeable enough about the subject matter that rather than introducing errors into the translation, she actually corrected quite a few errors. In addition, she expanded the paper, adding a great deal of explanation not only about the machine itself, but about how it would be used to solve real problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Babbage saw her translation in 1843, and was happy enough with it that he asked her to expand further. She added footnotes and more explanation--in fact, what she added was about twice the length of the original paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original was short enough that it might be open to argument whether it qualified as a book, but at least in my opinion, her edited version clearly did qualify.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, in case there should be any question, Babbage's analytical engines were digital computers, not analog. There were decimal, not binary, but still digital. Many early computers were analog in nature (e.g., slide rules of various sorts) but Babbage's was a mechanical, digital computer.&lt;/p&gt;&#xA;" OwnerUserId="808" LastActivityDate="2016-06-02T21:35:24.767" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="705" PostTypeId="1" CreationDate="2016-06-02T22:20:15.200" Score="11" ViewCount="793" Body="&lt;p&gt;I've recently purchased a &lt;a href=&quot;http://hxc2001.free.fr/floppy_drive_emulator/&quot; rel=&quot;noreferrer&quot;&gt;HxC/Lotharek SD Card floppy drive emulator&lt;/a&gt;. It's working well replacing DF0: but I'm seeing some odd behaviour with its emulation of DF1:.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the first boot after power-up, the Amiga detects both DF0: and DF1:. But after a reboot, DF1: disappears.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The HxC does seem to be jumpered correctly (DS0 connected to drive A, DS1 connected to drive B) and there are no other drives, internal or external, connected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What could be causing this problem?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: here is how I have configured the SD card.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Format as FAT32&lt;/li&gt;&#xA;&lt;li&gt;Download the &lt;code&gt;QuickInstall_FloppyDiskImages.zip&lt;/code&gt; file from the HxC website and unpack to a temporary location&lt;/li&gt;&#xA;&lt;li&gt;Unpack the &lt;code&gt;SDHxCFE_Amiga.zip&lt;/code&gt; file onto the SD card&lt;/li&gt;&#xA;&lt;li&gt;Start the &lt;code&gt;HxCFloppyEmulator&lt;/code&gt; app and go into the &quot;SD HxC Floppy Emulator Settings&quot; section&lt;/li&gt;&#xA;&lt;li&gt;Click &quot;Load config file&quot; and select the HXCSDFE.CFG file off the SD card&lt;/li&gt;&#xA;&lt;li&gt;Make these changes:&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Switch off &quot;Load last loaded floppy&quot; and &quot;Enable auto boot mode&quot; as I don't want these options at the moment&lt;/li&gt;&#xA;&lt;li&gt;Under &quot;HFE file interfacemode&quot;, switch off &quot;Auto&quot; and manually select &quot;Amiga&quot;&lt;/li&gt;&#xA;&lt;li&gt;Verify that the SD HxC Floppy Emulator Interface setting has both Drive A and Drive B set to Amiga, and &quot;2 drives emulation&quot; switched on&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;Click &quot;Save config file&quot;, and save to HXCSDFE.CFG on the SD card&lt;/li&gt;&#xA;&lt;li&gt;Quit the app&lt;/li&gt;&#xA;&lt;li&gt;Safely eject the SD card&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Worringly, if I then restart the app and load the same config back in, my changes in 6.1 have been preserved, but my changes in 6.2 have gone back to the default of auto. In fact, if I read the &lt;a href=&quot;http://hxc2001.com/download/floppy_drive_emulator/SDCard_HxC_Floppy_Emulator_HXCSDFE_CFG_file.pdf&quot; rel=&quot;noreferrer&quot;&gt;specification for the config file&lt;/a&gt;, it seems that these fields are not even part of the config file! So how can they be set?&lt;/p&gt;&#xA;" OwnerUserId="149" LastEditorUserId="11916" LastEditDate="2019-04-08T20:50:47.630" LastActivityDate="2019-04-08T20:50:47.630" Title="HxC floppy emulator on Amiga 1200, second virtual drive disappears after reboot" Tags="&lt;amiga&gt;&lt;floppy-disk&gt;&lt;amiga-1200&gt;&lt;hxc&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="706" PostTypeId="2" ParentId="705" CreationDate="2016-06-02T22:41:28.767" Score="6" Body="&lt;p&gt;!! EDITED to reflect settings that I have tried on my Amiga to verify.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need the following jumper settings to have HxC correctly emulate two drives&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MAKsd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MAKsd.jpg&quot; alt=&quot;Jumper settings&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a picture of my actual drive - it's the SD version in shape of regular floppy drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can clearly see that ID0A and ID1B are set to ON. Nothing else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also need to configure the SD card correctly using the tool, it will save a file HXCSDFE.CFG that needs to go to the root of the card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The image shows actual settings for two drives that I have just verified.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gUUJ5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gUUJ5.png&quot; alt=&quot;Dual drive settings for HXC2001&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have configured mine to use STARTUPA.HFE and STARTUPB.HFE images mapped to DF0 and DF1 respectively, simply renamed two of .HFE images I had on my SD card and booted the Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I actually haven't tried selecting images manually from the front panel - I don't know how to select image for DF1 - this is why I configured the startup HFE images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both drives work correctly with this configuration and lasted through several reboots with no issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use WB3.9 on A1200 with Apollo with 060 @ 80MHz&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-06-15T03:02:17.777" LastActivityDate="2016-06-15T03:02:17.777" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="707" PostTypeId="1" AcceptedAnswerId="2030" CreationDate="2016-06-02T23:08:38.247" Score="4" ViewCount="399" Body="&lt;p&gt;What kind of port did the iMac G3 use for its wireless AirPort card?  What kind of speeds were supported?  My G3 has an 802.11b 2.4GHz band card and I am wondering if I can upgrade to a faster card (if any were made) or if the machine itself can support faster speeds (on OS 9 or OS 10.0).&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2017-04-18T16:34:33.597" LastActivityDate="2017-04-18T16:34:33.597" Title="iMac G3 - AirPort Card Port" Tags="&lt;hardware&gt;&lt;apple-macintosh&gt;&lt;imac&gt;&lt;imac-g3&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="708" PostTypeId="2" ParentId="562" CreationDate="2016-06-03T04:55:10.993" Score="0" Body="&lt;p&gt;I can confirm that some cheap car DVD players can be used as a multi-standard composite monitor. The one I bought — a refurb &lt;a href=&quot;http://www.philips.ca/c-p/PD7016_37/portable-dvd-player&quot; rel=&quot;nofollow&quot; title=&quot;PD7016/37&quot;&gt;Philips PD7016/37&lt;/a&gt; — comes with two identical display/player units. If you use a 3½ mm TRRS to Composite cable, such as this &lt;a href=&quot;http://www.newegg.ca/Product/Product.aspx?Item=9SIA4FT48H3621&quot; rel=&quot;nofollow&quot; title=&quot;TechCraft 4&amp;#39; 3.5mm Stereo to Composite Video + Audio Cable (3 RCA)&quot;&gt;TechCraft 4' 3.5mm Stereo to Composite Video + Audio Cable (3 RCA)&lt;/a&gt;, you get a usable picture.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2016-06-03T04:55:10.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="709" PostTypeId="2" ParentId="687" CreationDate="2016-06-03T05:55:22.447" Score="10" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Z1_%28computer%29&quot;&gt;Zuse Z1&lt;/a&gt; was a binary electrical computer and finished in 1938. Zuse invented the programming language &lt;a href=&quot;https://en.wikipedia.org/wiki/Plankalk%C3%BCl&quot;&gt;Plankalkül&lt;/a&gt; for it between 1943 and 1945, however, the book that he wrote about Plankalkül wasn't published until &lt;a href=&quot;http://web.archive.org/web/20100304210031/http://www.epemag.com/zuse/Bgraphy.htm#ZUSE72&quot;&gt;1972&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does that count?&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-06-03T05:55:22.447" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="710" PostTypeId="2" ParentId="696" CreationDate="2016-06-03T06:45:12.773" Score="9" Body="&lt;p&gt;&lt;a href=&quot;http://www.cpm.z80.de/source.html&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; has quite a few variants of the source code, including compilers for &lt;a href=&quot;https://en.wikipedia.org/wiki/PL/M&quot; rel=&quot;noreferrer&quot;&gt;PL/M&lt;/a&gt;, including Z80 variants, and including source marked as copyrighted by Digital Research.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's no documented workflow to build your own system from that, and it probably needs quite a bit of fiddling, especially the PL/M part (if you manage to do it, a writeup would be nice). But at first glance, everything you need should be there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: &lt;a href=&quot;https://ciernioo.wordpress.com/&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; is an article that describes how to modify CP/M 2.2 to set it up for a new computer. It references two other writeups on the same subject, &lt;a href=&quot;http://cpuville.com/cpm_on_new_computer.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://searle.hostei.com/grant/cpm/index.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, and the latter uses a CP/M 2.2 source converted to Z80-style using an awk script.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setting CP/M up for a new computer doesn't require recompiling the PL/M utility programs, but maybe the Z80-style source and the writeups themselves are helpful.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2016-06-05T05:08:17.103" LastActivityDate="2016-06-05T05:08:17.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="711" PostTypeId="5" CreationDate="2016-06-03T09:37:53.507" Score="0" Body="&lt;p&gt;This is a meta-tag to be deleted.  Please use a tag specific to the CPU types of your question.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-03T09:37:53.507" LastActivityDate="2016-06-03T09:37:53.507" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="712" PostTypeId="4" CreationDate="2016-06-03T09:37:53.507" Score="0" Body="*This tag is deprecated*" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-03T09:37:53.507" LastActivityDate="2016-06-03T09:37:53.507" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="713" PostTypeId="1" AcceptedAnswerId="719" CreationDate="2016-06-03T11:15:03.083" Score="8" ViewCount="429" Body="&lt;p&gt;I have a number of items (among them, old (80s) Apple memorabilia and a nylon flag that's about 2m², featuring the &lt;a href=&quot;http://content.altfonts.com:88/img/C/U/Cupertino-Regulara.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cupertino font&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking of selling these (possibly in conjunction with some Apple-related anniversary), but I've no idea if they're worth $5 or $5000 &amp;mdash; and I'd hate to guess wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how do you determine a reasonable value for such items?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@RobertCartaino, @Chenmunka, thanks for the way you have moderated this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a picture of the flag: &lt;a href=&quot;https://i.stack.imgur.com/XP27B.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XP27B.jpg&quot; alt=&quot;Apple Personal Computers flag&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="832" LastEditorUserId="621" LastEditDate="2016-08-09T17:36:20.090" LastActivityDate="2016-08-09T17:36:20.090" Title="How do you determine the value of vintage computer equipment?" Tags="&lt;apple&gt;&lt;collectability&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="714" PostTypeId="5" CreationDate="2016-06-03T13:04:27.777" Score="0" Body="&lt;p&gt;For questions about the assembly language of a microprocessor or CPU.&lt;/p&gt;&#xA;&lt;p&gt;If specific to a particular processor, please also use the appropriate processor tag.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-03T14:58:07.167" LastActivityDate="2021-02-03T14:58:07.167" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="715" PostTypeId="4" CreationDate="2016-06-03T13:04:27.777" Score="0" Body="Assembly languages in general, of any architecture. Use with the particular processor’s tag as appropriate." OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-03T14:59:30.493" LastActivityDate="2021-02-03T14:59:30.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="716" PostTypeId="2" ParentId="687" CreationDate="2016-06-03T14:01:16.380" Score="7" Body="&lt;p&gt;Although older books have already been cited, I just reached across onto my bookshelf and found:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Ferranti Pegasus Computer, Programming Manual&quot;, Ferranti Ltd, Issue 1, September 1955.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have older ones, but at the moment I can't locate them!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure I have an early Cambridge EDSAC programming manual somewhere.&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2016-06-03T14:01:16.380" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="717" PostTypeId="2" ParentId="639" CreationDate="2016-06-03T14:50:40.067" Score="32" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Can you take these disks off the shelf 30 years later and still expect to read their data?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;Yes.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Although we all experienced floppies fragility, the magnetic media in fact is one of the longest-living we can practically manufacture. Typical streamer tapes are often guaranteed for 30 years. Of course, under very strict handling and storage conditions - but the point is that no other popular writable media can come even close to 30 years figure. Home and office floppies fail due to mishandling, physical damage, being put too close to speaker, getting dirty, etc - all those failure modes are well known and easily preventable with procedures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The usage of one of the oldest, 8&quot; floppies is also not surprising here. They have pretty small capacity compared to their size - the largest ever are barely 1.2MB. This gives them tremendous advantage in reliability, as with wide and sparse tracks there is huge margin for error.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Even the newest 8&quot; floppy disks must be around 25 years old (at least). &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Do not underestimate the power of a large, government organization. Eg in Poland one agency put on a tender for 130000 3.5&quot; floppies in... 2008. $40k budget. Brand-new ones, manufactured in same year, of course. It's expectable that Navy alone kept one factory afloat for all those years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And last but not least: You've assumed that they wrote those disk 30 years ago and never touched them since. I believe that's not reasonable assumption. In long-term data storage there are procedures to cyclically read and re-write data on new storage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;/edit: On a second thought, this is just another example of an old tech being continuously used in professional environment despite newer tech being widespread among consumers. NASA using magnetic-core memory in 80's, cars using relays instead of solid-state to control starter motor, Amtrak using rotary converters, etc, etc. The main point is not about absolute reliability, it's about better understanding of failure modes. When you have good understanding of failure modes, you can simply overengineer that particular aspect or put in procedures to circumvent the problem. Being able to predict it with good certainty is all that it takes to achieve the best possible reliability. &lt;/p&gt;&#xA;" OwnerUserId="843" LastEditorUserId="843" LastEditDate="2016-06-03T15:11:20.473" LastActivityDate="2016-06-03T15:11:20.473" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="718" PostTypeId="2" ParentId="713" CreationDate="2016-06-03T20:29:31.587" Score="1" Body="&lt;p&gt;Ask an expert has to be the most obvious answer, and maybe sensible for higher value or rarer items. An auction house should be able to help (for a fee), although they can equally get these things quite wrong.&lt;/p&gt;&#xA;" OwnerUserId="46" LastActivityDate="2016-06-03T20:29:31.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="719" PostTypeId="2" ParentId="713" CreationDate="2016-06-03T22:00:08.653" Score="7" Body="&lt;p&gt;Part of the value of any item is the demand for it.  If there's no demand, even if there was only one made, it's unlikely to sell for a high price.  You have a few options.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Scan eBay/Google Shopping/Craigslist for any equivalent equipment.  eBay has a great feature that lets you filter your search results by completed or sold listings (there is a difference).  Using those options you can see what people are listing items for vs what they're actually selling for.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Find an expert.  You might want to look on reddit or other specialized Apple forums for people who might know about these things, or would be interested in buying them.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Ask Apple.  This is more of a long-shot, but I've found that some companies actually value when people contact them about old promotional and collectable items.  Hell, Topps threw away most of their trading cards from their early days and even they don't have a complete set of their catalog.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Another thought (mostly related to Apple).  Have you ever heard of &lt;a href=&quot;http://redlightrunner.com/&quot; rel=&quot;nofollow&quot;&gt;RedLightRunner&lt;/a&gt;?  It's a site dedicated to Apple memorabilia.  They have some items for sale as well as a near-complete catalog of other items.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-07T22:14:20.203" LastActivityDate="2016-06-07T22:14:20.203" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="720" PostTypeId="2" ParentId="550" CreationDate="2016-06-03T23:24:26.243" Score="2" Body="&lt;p&gt;To create boot disks for a apple 512k macintosh I had to take a 1.44MB floppy, tape the hole to make it into a 720KB floppy, and then format the floppy as an APPLE floppy and not a PC floppy with a superdrive equipped old world g3 mac tower running osx 10.3. Then I could write the image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A linux install on an oldworld machine with a superdrive may work to write the image IF there is a way to set the drive to 800KB mode instead of 720KB mode. For slightly newer macs, it looks like you can actually boot from a floppy with a 1.44MB format just by skipping some blocks. &lt;a href=&quot;http://www.macfaq.org/software/macos.shtml#Q1.1.5&quot; rel=&quot;nofollow&quot;&gt;http://www.macfaq.org/software/macos.shtml#Q1.1.5&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="854" LastActivityDate="2016-06-03T23:24:26.243" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="721" PostTypeId="2" ParentId="678" CreationDate="2016-06-03T23:36:01.483" Score="7" Body="&lt;p&gt;I developed Logo for the Commodore 64, based on work we did at MIT for the Apple ][ and TI 99/4.  Apple debugging was done with the ROM, via assembled-in breakpoints.  For the C64, Andy Finkelstein at Commodore ordered me a 6510 CPU with an extra pin that signalled the I/D line, and a clamp-on connector that led to a Nicolet-Paratronics logic analyzer, connected to a PET with a disassembler in BASIC.  I was having trouble with usage of page zero registers, both by the ROM and by Logo, which deferenced Nil (empy list [] in Logo), but on the 6510 locations 0 and 1 were the parallel port to peripherals such as the 1541 disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I could set a breakpoint when dinner code wrote or even read an address.  What's even better is that I could set the breakpoint to start up to 255 bytes before the errant access occurred.  It was the only time I could set a breakpoint &lt;em&gt;in the past&lt;/em&gt; before an error occurred.  And yes, it was more miraculous that the Lisp Machine debugger!&lt;/p&gt;&#xA;" OwnerUserId="855" LastActivityDate="2016-06-03T23:36:01.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="722" PostTypeId="1" AcceptedAnswerId="723" CreationDate="2016-06-04T13:05:22.057" Score="6" ViewCount="2443" Body="&lt;p&gt;I have a 'perfect' set of ZX Spectrum games (in .ipf format) that I would like to use in EmulationStation (RetroPie) but the Fuse emulator doesn't recognize .ipf files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any tools that will convert .ipf files to a format that will work on said emulator?&lt;/p&gt;&#xA;" OwnerUserId="857" LastEditorUserId="3290" LastEditorDisplayName="user12" LastEditDate="2020-04-13T16:10:37.393" LastActivityDate="2020-04-13T16:10:37.393" Title="Converting ZX Spectrum .ipf files to .z80 or .tzx for use in Fuse on RetroPie?" Tags="&lt;emulation&gt;&lt;zx-spectrum&gt;&lt;file-format&gt;&lt;software-recommendation&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="723" PostTypeId="2" ParentId="722" CreationDate="2016-06-04T18:06:21.120" Score="4" Body="&lt;p&gt;Not currently. SPS's &lt;a href=&quot;http://www.softpres.org/download&quot; rel=&quot;nofollow&quot; title=&quot;IPF Support Library&quot;&gt;IPF Support Library&lt;/a&gt; is only distributed as a binary, and is not provided for ARM as used by Retropie.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IPF for ZX Spectrum +3 is supported by the commercial &lt;a href=&quot;http://www.spectaculator.com/&quot; rel=&quot;nofollow&quot; title=&quot;Spectaculator&quot;&gt;Spectaculator&lt;/a&gt; emulator for Windows.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2016-06-04T18:06:21.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="724" PostTypeId="1" AcceptedAnswerId="732" CreationDate="2016-06-05T07:20:03.417" Score="9" ViewCount="1128" Body="&lt;p&gt;I currently live in Japan and use PAL C64 from Europe, here the line voltage is 100V at 50Hz (Tokyo).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will be moving to the US in about 2 months.&#xA;The US uses 110-120V (power supplies are usually for 117V) at 60Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aside from PAL vs NTSC (which I have handled via XRGB-Mini Framemeister), will PAL C64 work on 60Hz ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is mostly a question on whether the line frequency matters at all - I think the 9VAC is rectified to 12V or 5V for SID, but is the actual sine signal used in any way in C64 ? (by other chips perhaps?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same question applies to C128 and conversely NTSC C64 in 50Hz side of the world.&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-06-05T08:24:42.387" LastActivityDate="2016-06-05T11:28:28.093" Title="PAL C64 in the US - 50Hz vs 60Hz AC Frequency, will that matter?" Tags="&lt;commodore-64&gt;&lt;power&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="725" PostTypeId="5" CreationDate="2016-06-05T08:12:21.367" Score="0" Body="&lt;p&gt;Examples of valid questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What voltages are required to power a C64?&lt;/li&gt;&#xA;&lt;li&gt;How to power an Amiga using PC ATX Power Supply?&lt;/li&gt;&#xA;&lt;li&gt;What power supply is required for ZX spectrum?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-05T08:43:56.667" LastActivityDate="2016-06-05T08:43:56.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="726" PostTypeId="4" CreationDate="2016-06-05T08:12:21.367" Score="0" Body="Questions and problems related to powering retro equipment." OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-06-05T08:44:01.730" LastActivityDate="2016-06-05T08:44:01.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="727" PostTypeId="5" CreationDate="2016-06-05T08:14:03.863" Score="0" Body="&lt;p&gt;Examples of valid questions include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Why does old white plastic become yellow over time?&lt;/li&gt;&#xA;&lt;li&gt;How to remove the yellowing from plastic?&lt;/li&gt;&#xA;&lt;li&gt;Will non-white plastic become yellow over time?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-05T08:43:06.807" LastActivityDate="2016-06-05T08:43:06.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="728" PostTypeId="4" CreationDate="2016-06-05T08:14:03.863" Score="0" Body="For questions about Plastics - computer cases, yellowing, care, preservation, restoration" OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-09-27T06:28:04.013" LastActivityDate="2016-09-27T06:28:04.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="729" PostTypeId="1" AcceptedAnswerId="931" CreationDate="2016-06-05T10:34:43.700" Score="7" ViewCount="450" Body="&lt;p&gt;I've been cleaning up an Atari 400 that had a bad RF cable, and cleaned the machine thoroughly so it's looking great. It's working well apart from the keyboard, where most of the keys aren't working: some columns on the far left work (&lt;kbd&gt;Q&lt;/kbd&gt;, &lt;kbd&gt;A&lt;/kbd&gt;, &lt;kbd&gt;Z&lt;/kbd&gt; and &lt;kbd&gt;W&lt;/kbd&gt;, &lt;kbd&gt;S&lt;/kbd&gt;, &lt;kbd&gt;X&lt;/kbd&gt;) but almost everything else doesn't, and backspace even acts like reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this likely to be an issue with the membrane or is it more likely that there's some cracked solder joints / faulty components on the main board? Is there a good way to test and diagnose the keyboard outside of the machine?&lt;/p&gt;&#xA;" OwnerUserId="107" LastEditorUserId="278" LastEditDate="2016-06-19T19:12:21.467" LastActivityDate="2018-04-21T16:52:18.507" Title="Atari 400 Faulty Keyboard - Some columns work, most do not" Tags="&lt;atari-400&gt;&lt;membrane-keyboard&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="730" PostTypeId="5" CreationDate="2016-06-05T11:15:16.120" Score="0" Body="&lt;p&gt;The Small Computer Systems Interface (SCSI) superseded the Shugart Associates Systems Interface (SASI) in 1981.&lt;br&gt;&#xA;Pronounced &lt;em&gt;scuzzy&lt;/em&gt; (American) or &lt;em&gt;sexy&lt;/em&gt; (British - to reference &lt;em&gt;sassy&lt;/em&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example questions may include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What is the difference between narrow, wide, and ultra-wide SCSI?&lt;/li&gt;&#xA;&lt;li&gt;Why does SCSI require termination and how to configure it?&lt;/li&gt;&#xA;&lt;li&gt;How to connect SCSI devices to an Amiga?&lt;/li&gt;&#xA;&lt;li&gt;What SCSI adapters are supported in SGI machines?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="276" LastEditDate="2016-06-23T14:21:34.000" LastActivityDate="2016-06-23T14:21:34.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="731" PostTypeId="4" CreationDate="2016-06-05T11:15:16.120" Score="0" Body="For questions related to the SCSI interface" OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-05T12:47:45.523" LastActivityDate="2016-06-05T12:47:45.523" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="732" PostTypeId="2" ParentId="724" CreationDate="2016-06-05T11:15:26.307" Score="9" Body="&lt;p&gt;Yes, your C64 will work with a 60Hz mains, but programs may behave differently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 9VAC supply is indeed used as a timebase. This is the part of the circuit that does the job:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UBMzJ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UBMzJ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;As you can see, it is used to clock the TOD (Time Of Day) realtime clock inside both CIAs (CIA2 depicted here). The CIA can be clocked with 50 or 60Hz and it has a bit inside a register (bit 7 of CONTROL TIMER A) to tell it whether the input frequency is set to 50 or 60Hz. This is used to keep some counters that track tenths of a second, seconds, minutes and hours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is the ROM which is different for PAL and NTSC systems, which actually set or reset this bit accordingly. C64s with a PAL ROM will set this bit. NTSC ROMs will reset it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you plug your PAL-aware C64 into a 60Hz mains, you will notice that applications that use the realtime clock will show the wrong time, updating it too fast. So any application that uses this to time events will trigger them at wrong intervals, which may or may not be problematic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This timer is not the same as the VBlank. VBlank will keep updating at the vertical sync frequency your VIC-II is designed for (that is, 50Hz PAL in your system) so I expect games and demos won't tell any difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.c64-wiki.com/index.php/TIME&quot; rel=&quot;noreferrer&quot;&gt;According to C64-Wiki&lt;/a&gt;, the TIME system variable doesn't depend on this TOD (???)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a &lt;a href=&quot;http://codebase64.org/doku.php?id=base:initialize_tod_clock_on_all_platforms&quot; rel=&quot;noreferrer&quot;&gt;great article at CODEBASE 64&lt;/a&gt; which explains how you can figure out if your TOD is running at 50 or 60Hz, and configure it the right way.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-06-05T11:28:28.093" LastActivityDate="2016-06-05T11:28:28.093" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="733" PostTypeId="5" CreationDate="2016-06-05T11:19:09.297" Score="0" Body="&lt;p&gt;Example questions may include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What is maximum CPU module (PIMM) supported by SGI Fuel?&lt;/li&gt;&#xA;&lt;li&gt;How to install IRIX on an Indy machine without CD-ROM drive?&lt;/li&gt;&#xA;&lt;li&gt;How to power a Fuel machine using PC ATX power supply?&lt;/li&gt;&#xA;&lt;li&gt;What monitor do I need for an SGI machine?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-05T12:50:45.993" LastActivityDate="2016-06-05T12:50:45.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="734" PostTypeId="4" CreationDate="2016-06-05T11:19:09.297" Score="0" Body="For questions related to Silicon Graphics (SGI) machines." OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-05T12:40:50.613" LastActivityDate="2016-06-05T12:40:50.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="735" PostTypeId="5" CreationDate="2016-06-05T11:23:14.590" Score="0" Body="&lt;p&gt;Example questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can I use an NTSC machine in Europe?&lt;/li&gt;&#xA;&lt;li&gt;Can I plan NTSC games on a PAL machine?&lt;/li&gt;&#xA;&lt;li&gt;Can I convert video in PAL to NTSC or vice versa?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-05T12:38:48.533" LastActivityDate="2016-06-05T12:38:48.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="736" PostTypeId="4" CreationDate="2016-06-05T11:23:14.590" Score="0" Body="Questions related to the NTSC video standard (commonly used in North America and Japan)." OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-05T12:41:28.270" LastActivityDate="2016-06-05T12:41:28.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="737" PostTypeId="5" CreationDate="2016-06-05T11:25:10.757" Score="0" Body="&lt;p&gt;Example questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can I use a text-only WYSE terminal with my UNIX server?&lt;/li&gt;&#xA;&lt;li&gt;Can I use a VT220 terminal on a VT100 only server?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-05T12:42:12.783" LastActivityDate="2016-06-05T12:42:12.783" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="738" PostTypeId="4" CreationDate="2016-06-05T11:25:10.757" Score="0" Body="For questions related to terminals such as WYSE, VT100 and Teletype." OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-05T12:45:29.397" LastActivityDate="2016-06-05T12:45:29.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="739" PostTypeId="5" CreationDate="2016-06-05T11:26:59.470" Score="0" Body="&lt;p&gt;Use this tag for questions that apply to processors in the m68k (otherwise known as 68xxx) range from Motorola.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For questions regarding a specific processor use an individual tag, e.g. &lt;a href=&quot;/questions/tagged/motorola-68000&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;motorola-68000&amp;#39;&quot; rel=&quot;tag&quot;&gt;motorola-68000&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="276" LastEditDate="2017-05-18T08:21:55.227" LastActivityDate="2017-05-18T08:21:55.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="740" PostTypeId="4" CreationDate="2016-06-05T11:26:59.470" Score="0" Body="For questions about processors in the Motorola 68k (68000 series) range. Commonly used in Amiga, Atari ST, Macintosh, Sinclair QL and Sharp X68000 computers." OwnerUserId="367" LastEditorUserId="276" LastEditDate="2017-05-18T08:21:55.227" LastActivityDate="2017-05-18T08:21:55.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="741" PostTypeId="5" CreationDate="2016-06-05T11:27:36.693" Score="0" Body="&lt;p&gt;The Phase Alternate Line (PAL) system for analogue colour CRT display was in common use in Europe – except in France, which used SÉCAM.&lt;/p&gt;&#xA;&lt;p&gt;Example questions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can I use an PAL machine in the USA?&lt;/li&gt;&#xA;&lt;li&gt;Can I play PAL games on a NTSC machine?&lt;/li&gt;&#xA;&lt;li&gt;Can I convert video in PAL to NTSC or vice versa?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="15334" LastEditDate="2021-02-21T15:24:29.903" LastActivityDate="2021-02-21T15:24:29.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="742" PostTypeId="4" CreationDate="2016-06-05T11:27:36.693" Score="0" Body="The PAL (Phase Alternate Line) analogue video standard, commonly used in Europe." OwnerUserId="367" LastEditorUserId="15334" LastEditDate="2021-02-21T15:24:29.903" LastActivityDate="2021-02-21T15:24:29.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="743" PostTypeId="5" CreationDate="2016-06-05T11:34:27.513" Score="0" Body="&lt;p&gt;Example questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How to connect my &lt;em&gt;model&lt;/em&gt; computer to a VGA monitor?&lt;/li&gt;&#xA;&lt;li&gt;How can I record video from VGA video card?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-05T12:50:06.650" LastActivityDate="2016-06-05T12:50:06.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="744" PostTypeId="4" CreationDate="2016-06-05T11:34:27.513" Score="0" Body="For questions related to VGA signals, sources or receivers" OwnerUserId="367" LastEditorUserId="3748" LastEditDate="2018-09-29T17:15:42.670" LastActivityDate="2018-09-29T17:15:42.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="745" PostTypeId="5" CreationDate="2016-06-05T11:43:28.630" Score="0" Body="&lt;p&gt;Sample questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What tapes are supported by Commodore 64's tape drive?&lt;/li&gt;&#xA;&lt;li&gt;How to copy a ZX spectrum tape into a .TAP file on a PC?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-05T12:40:02.673" LastActivityDate="2016-06-05T12:40:02.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="746" PostTypeId="4" CreationDate="2016-06-05T11:43:28.630" Score="0" Body="For questions related to data preservation, archiving, and backups." OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-05T12:42:48.597" LastActivityDate="2016-06-05T12:42:48.597" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="747" PostTypeId="1" CreationDate="2016-06-05T13:20:47.543" Score="10" ViewCount="954" Body="&lt;p&gt;I have two C64's, a C128, and as for drives: SD2IEC, 1541-U2, 1541-II and a 1581 - that makes for 4 devices.&#xA;Looking at the drives, those only allow 4 device ID settings (8,9,10,11), but according to IEC bus documentation, it seems that practical limit is about 8 devices (given 40mA current drain per device).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way to connect more than those 4 devices at once ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not trying to hook up whole 8 devices, but possibly a 1571 or/and CMD FD-2000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that devices seem to only have 4 ID settings - would my approach require hardware modifications to enable additional ID's ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I vaguely recall that some drives (aside from 1541-u2 and sd2iec) allow for software ID change, but even if that let me go beyond ID 11, I think that doesn't last through reboots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am aware of devices such as IEC switcher, which I do not have, I'm looking for a &quot;permanently connected&quot; solution with assigned addresses.&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-06-06T12:40:46.630" LastActivityDate="2017-07-15T12:42:35.873" Title="How many IEC devices can I connect to a C64 / C128?" Tags="&lt;commodore-64&gt;&lt;disk-drive&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="748" PostTypeId="2" ParentId="696" CreationDate="2016-06-05T16:23:35.163" Score="5" Body="&lt;p&gt;There are a few bios projects circling around the Z80 SBC homebrew scene that grew out of Andrew Lynch's N8___ computer project (name redacted as Andrew no longer wishes his radio call sign associated with the projects). I've found the developers to be exceptionally helpful when I was cluelessly building my &lt;a href=&quot;http://www.malinov.com/Home/sergeys-projects/zeta-sbc-v2&quot; rel=&quot;noreferrer&quot; title=&quot;Zeta SBC V2&quot;&gt;Zeta SBC V2&lt;/a&gt; (which, incidentally, has RAM banking galore, should you wish to build hardware).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BIOS/BDOS projects include the &lt;a href=&quot;https://www.retrobrewcomputers.org/doku.php?id=software:firmwareos:romwbw:start&quot; rel=&quot;noreferrer&quot; title=&quot;RomWBW Firmware&quot;&gt;RomWBW Firmware&lt;/a&gt; and &lt;a href=&quot;https://www.retrobrewcomputers.org/doku.php?id=software:firmwareos:una:start&quot; rel=&quot;noreferrer&quot; title=&quot;UNA BIOS&quot;&gt;UNA BIOS&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2016-06-05T16:23:35.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="750" PostTypeId="2" ParentId="42" CreationDate="2016-06-05T21:07:05.547" Score="5" Body="&lt;p&gt;In case you are looking for something that can be bought off-the-shelf:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if1Bis (&lt;a href=&quot;https://sites.google.com/site/interface1bis/&quot; rel=&quot;nofollow&quot;&gt;https://sites.google.com/site/interface1bis/&lt;/a&gt;) has, amongst numerous other goodies also a ps/2 port supporting keyboards and a mouse. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The device mimicks an IF/1 and supports USB connection to a PC as well as a nice IF/1 file system replica on SD card. I have one myself (don't use the PS/2 keyboard, though) and can thoroughly recommend it.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2016-06-08T10:43:44.253" LastActivityDate="2016-06-08T10:43:44.253" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="751" PostTypeId="2" ParentId="420" CreationDate="2016-06-06T05:19:32.333" Score="2" Body="&lt;p&gt;No tools or fluids method, takes about a minute or two all total:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unscrew or unclick the retaining plate on the bottom, remove the ball, then find the two or three rollers.  Scratch off the accretion on each  roller with your sideways fingernail, (so the roller cannot turn more than a few degrees), turning as needed to get all 360 degrees.  The lint-like stuff tends to come off in short strands.  (The ball is virtually never significantly dirty, leave it be.)  Shake the resulting detritus out of the mouse, then pop the ball back in and put on the plate.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Alcohol dries out rubber and plastic, and it's pointless to sterilize a mouse ball.  The mouse ball is like a tire, it picks up lint and moisture by design.)&lt;/p&gt;&#xA;" OwnerUserId="1867" LastEditorUserId="1867" LastEditDate="2016-06-06T05:40:25.517" LastActivityDate="2016-06-06T05:40:25.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="752" PostTypeId="2" ParentId="713" CreationDate="2016-06-06T08:12:45.423" Score="3" Body="&lt;p&gt;I would guess there is a much smaller market for memorabilia in retro computing as there is for hardware - Things you can use your flag for are somewhat limited - A piece of (working) hardware promises basically unlimited fun. On the other hand, non-hardware stuff has generally much earlier met the dustbin than real hardware, so it should be considerably more rare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Price for non-hardware stuff is definitely much more based on meeting the right buyer in the right buying mood at the right time. I, for example, have a quite decent retro collection, but have never thought (and don't think I ever will) of spending money on anything else but hardware. Just blatantly assuming everyone else might be like me, I'd say the typical retro computing guy will consider such memorabilia a nice side dish, but not the main course he would be spending considerable money on. You are searching for an Apple memorabilia collector, not a retro computing hobbyist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case you want to sell - I guess neither eBay nor auction houses would be the right place - Material like your example are too rare and too specialized for selling through generic channels IMHO (It definitively doesn't hurt looking, but don't have high hopes to get real guidance from there). Better try and ask in specialized Apple retro forums - a lot of them have &quot;for sale&quot; areas - whether someone would be interested to buy and what they would be willing to spend. I guess the proposal to try and contact the original manufacturer is a very useful one as well.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2016-06-06T09:04:31.697" LastActivityDate="2016-06-06T09:04:31.697" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="753" PostTypeId="5" CreationDate="2016-06-06T10:14:09.170" Score="0" Body="&lt;p&gt;Questions regarding all versions of MS-DOS: from the first release by Microsoft in 1981 to the versions underlying Windows 9x.&lt;/p&gt;&#xA;&lt;p&gt;Use &lt;a href=&quot;/questions/tagged/dos&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;dos&amp;#39;&quot; rel=&quot;tag&quot;&gt;dos&lt;/a&gt; in preference to this tag when asking about the DOS family of operating systems for x86-based systems in general.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-18T19:39:53.230" LastActivityDate="2021-02-18T19:39:53.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="754" PostTypeId="4" CreationDate="2016-06-06T10:14:09.170" Score="0" Body="MS-DOS, the Microsoft Disk Operating System, and its OEM-branded versions. Use [dos] instead for the x86 DOS family in general." OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-18T19:39:53.230" LastActivityDate="2021-02-18T19:39:53.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="755" PostTypeId="2" ParentId="420" CreationDate="2016-06-06T16:23:03.960" Score="4" Body="&lt;p&gt;The best thing I ever found for cleaning mouse balls is denim. The texture seems to be perfect. New denim might be an issue due to the fuzzy fibres getting on the ball.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't use anything sharp to clean the interior plastic rollers as the scratched plastic will collect dirt more quickly and extreme scratches could cause uneven rolling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Retr0brite will remove the yellowing of the exterior but it will yellow again if exposed to UV or heat. Of course you can also retr0brite it again if that happens.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2016-06-06T16:23:03.960" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="756" PostTypeId="1" AcceptedAnswerId="757" CreationDate="2016-06-06T18:06:52.023" Score="15" ViewCount="7746" Body="&lt;p&gt;Where can I find an external 8-inch floppy disk drive?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have some data I would like to retrieve from a really old 8-inch (200 mm) floppy disk, but have no working computer than has a drive to read it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are external drives for that size still sold? Where can I find one? Either Linux or Windows solutions are okay with me.&lt;/p&gt;&#xA;" OwnerUserId="1872" LastEditorDisplayName="user12" LastEditDate="2016-06-07T16:16:51.950" LastActivityDate="2019-08-16T11:43:38.277" Title="Where can I find an external 8-inch floppy disk drive?" Tags="&lt;floppy-disk&gt;&lt;disk-drive&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="757" PostTypeId="2" ParentId="756" CreationDate="2016-06-06T18:25:06.643" Score="18" Body="&lt;p&gt;As far as I'm aware there is no source of new 8&quot; drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do manage to find a working drive, there are a couple of options to connect it to a modern PC over USB:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;http://kryoflux.com/&quot;&gt;KryoFlux&lt;/a&gt; floppy controller, which has &lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?20970-Hooking-up-an-8-quot-floppy-to-a-modern-PC&quot;&gt;successfully been used to connect an 8&quot; drive&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;http://www.discferret.com/wiki/DiscFerret&quot;&gt;DiscFerret&lt;/a&gt;, which is also supposed to support 8&quot; drives, but is harder to find for purchase.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As well as the 8&quot; drive, you'll need adapter cables to connect it; these are the connectors you'd use to adapt it for use in an old PC (with a 5.25&quot; drive connector).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also use an old PC to read the floppies, or simply contact a recovery service. Herb Johnson has a &lt;a href=&quot;http://www.retrotechnology.com/herbs_stuff/s_drives_howto.html&quot;&gt;useful web page&lt;/a&gt; with lots more detail; the Archive Team also maintains a &lt;a href=&quot;http://archiveteam.org/index.php?title=Rescuing_Floppy_Disks&quot;&gt;page on rescuing floppy disks&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-06-06T18:25:06.643" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="758" PostTypeId="2" ParentId="747" CreationDate="2016-06-06T20:12:52.227" Score="7" Body="&lt;p&gt;Normally Commodore drives are device numbers 8, 9, 10, and 11, and drives 0 and 1, giving 8 drives, but some newer products support device numbers up to 31 (although 31 is reserved for UNTALK/UNLISTEN command), giving 23 devices with two drives each for a theoretical total of 46 drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the 7406 chip on the IEC bus can only handle 40 mA of load current (5 mA per device), limiting the bus to 8 devices. It may be possible to increase this using both drive numbers 0 and 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: An example of a device which could achieve this is the 64HDD.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2016-06-06T20:12:52.227" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="762" PostTypeId="2" ParentId="687" CreationDate="2016-06-06T23:01:59.243" Score="15" Body="&lt;p&gt;The 1946 Mark 1 (ASCC) manual by Howard Aiken, Grace Murray Hopper, et al, has to be the first one which:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Is a technical manual, for a digital machine, which was actually manufactured (only one ever was made, but that's more than the zero actually made of whatever machine the Lovelace/Menabrea paper(s) might have been useful on, a full mechanical computer capable of executing the ideas in the papers never fully existed.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Contains instructions for programmers, starting at page 98.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Pages before that have a lot of design information in the preface, and hardware data.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://chimera.roma1.infn.it/SP/COMMON/MarkI_operMan_1946.pdf&quot; rel=&quot;noreferrer&quot;&gt;PDF is online here.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1876" LastEditorUserId="1876" LastEditDate="2016-09-09T13:14:34.950" LastActivityDate="2016-09-09T13:14:34.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="763" PostTypeId="5" CreationDate="2016-06-07T02:43:02.023" Score="0" Body="&lt;p&gt;Related tags:  &lt;a href=&quot;/questions/tagged/atari-800&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;atari-800&amp;#39;&quot; rel=&quot;tag&quot;&gt;atari-800&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-07T07:37:25.753" LastActivityDate="2016-06-07T07:37:25.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="764" PostTypeId="4" CreationDate="2016-06-07T02:43:02.023" Score="0" Body="for questions relating to the Atari 400 8-bit computer" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-07T07:37:22.470" LastActivityDate="2016-06-07T07:37:22.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="765" PostTypeId="5" CreationDate="2016-06-07T02:43:41.653" Score="0" Body="&lt;p&gt;The Atari 800 is an 8-bit computer with up to 48KiB RAM. Its defining features are the two cartridge slots (later reduced to one) and modular, expansion card-based design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related tags:  &lt;a href=&quot;/questions/tagged/atari-400&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;atari-400&amp;#39;&quot; rel=&quot;tag&quot;&gt;atari-400&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2017-07-09T14:37:09.500" LastActivityDate="2017-07-09T14:37:09.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="766" PostTypeId="4" CreationDate="2016-06-07T02:43:41.653" Score="0" Body="For questions relating to the Atari 800 8-bit computer" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2017-07-09T14:37:09.500" LastActivityDate="2017-07-09T14:37:09.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="767" PostTypeId="2" ParentId="212" CreationDate="2016-06-07T08:28:23.480" Score="10" Body="&lt;p&gt;A couple of things seem a little odd about the way the Spectrum display memory was arranged until you understand why it was done the way it was. The first thing is the odd division into three blocks -- this was done so that if you have a pointer to a scan line of a character block stored in a register pair (e.g. HL) you can just increment the high order byte (e.g. with an inc h instruction) to get a pointer to the next scan line of the same character block. In order for this to work, there must be exactly 256 character blocks between successive scan lines so the bitmap must be divided into groups of 256/32 = 8 rows. This simplifies (and accelerates) the code for printing a character substantially. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other odd thing is something that I've seen commented on less frequently, and this is the unusual order of the colour components in the attributes. AFAICT the reason for this is that the designers wanted a system that would produce reasonable grayscale output if hooked up to a black &amp;amp; white TV. They therefore designed it so that each colour component was also associated with a brightness level, which were picked according to the human eye's sensitive for the colours, i.e. green brightest, then red, then blue.  Then, by putting the brightest in the most significant bit and the darkest in the least, they could have the colours appear in numeric order of brightness when viewed on a black and white output.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2016-06-07T08:28:23.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="768" PostTypeId="5" CreationDate="2016-06-07T09:19:27.573" Score="0" Body="&lt;p&gt;The Z80 8-bit microprocessor was introduced by Zilog in 1976.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its instruction set is a superset of the &lt;a href=&quot;/questions/tagged/intel-8080&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;intel-8080&amp;#39;&quot; rel=&quot;tag&quot;&gt;intel-8080&lt;/a&gt;, with several additional registers and a few backwards-incompatible modifications to instruction timing.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Useful resources&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.zilog.com/force_download.php?filepath=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTk2T0RBdlZVMHdNRGd3TG5Ca1pnPT0=&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z80 Reference Manual&lt;/a&gt; (PDF) from Zilog.&lt;/li&gt;&#xA;&lt;li&gt;Computer History Museum's &lt;a href=&quot;https://archive.computerhistory.org/resources/text/Oral_History/Zilog_Z80/102658073.05.01.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;oral history of the Z-80&lt;/a&gt; (PDF) featuring the main designers' detailed recollections of its creation.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.righto.com/2014/10/how-z80s-registers-are-implemented-down.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Down to the silicon: how the Z80's registers are implemented &lt;/a&gt; by Ken Shirriff.  There are other good &lt;a href=&quot;http://www.righto.com/search?q=z80&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z80 articles&lt;/a&gt; on the same blog site.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="276" LastEditorUserId="7946" LastEditDate="2019-03-27T11:40:23.687" LastActivityDate="2019-03-27T11:40:23.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="769" PostTypeId="4" CreationDate="2016-06-07T09:19:27.573" Score="0" Body="For questions regarding the Zilog Z80 microprocessor" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-07T09:19:27.573" LastActivityDate="2016-06-07T09:19:27.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="771" PostTypeId="5" CreationDate="2016-06-07T10:29:21.573" Score="0" Body="&lt;p&gt;Linux is an open-source Unix-based operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This tag is for questions regarding the installation, configuration or operation of any version of Linux on retrocomputers.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-12-21T13:09:01.010" LastActivityDate="2016-12-21T13:09:01.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="772" PostTypeId="4" CreationDate="2016-06-07T10:29:21.573" Score="0" Body="For questions regarding the operation of the Linux operating system on retrocomputers." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-07T10:29:21.573" LastActivityDate="2016-06-07T10:29:21.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="773" PostTypeId="1" AcceptedAnswerId="774" CreationDate="2016-06-07T14:53:34.353" Score="38" ViewCount="23411" Body="&lt;p&gt;My ZX Spectrum 48k seems very resistant to working with audio input. I no longer have any cassette players, so am relying on audio files from digital players. I have been able to save and verify a tiny BASIC program to a digital recorder, but getting the right volume to save files from playtzx or OTLA is eluding me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things I've tried:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=dk.rift.tzxdroid&amp;amp;hl=en&quot;&gt;TeeZiX - TZX/TAP player&lt;/a&gt; on my phone&lt;/li&gt;&#xA;&lt;li&gt;Many different audio cables, mono, stereo and TRRS&lt;/li&gt;&#xA;&lt;li&gt;Edirol R-1 digital recorder/player (this is the one I got the save and verify to work on, and it has good input/output volume control)&lt;/li&gt;&#xA;&lt;li&gt;a Sandisk Sansa player running Rockbox&lt;/li&gt;&#xA;&lt;li&gt;an 800 Hz square wave tone at 0 dB to see if I could trigger the record level and make the screen border flicker. (summary: nope)&lt;/li&gt;&#xA;&lt;li&gt;Audio files from tape2wav/&lt;a href=&quot;http://www.worldofspectrum.org/utilities.html&quot;&gt;PlayTZX&lt;/a&gt; and &lt;a href=&quot;https://code.google.com/archive/p/otla/&quot;&gt;otla&lt;/a&gt; (via wine).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What else should I try?&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2016-06-11T14:23:55.720" LastActivityDate="2020-04-11T14:25:14.240" Title="Loading ZX Spectrum tape audio in a post-cassette world" Tags="&lt;zx-spectrum&gt;&lt;cassette-tape&gt;&lt;audio&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="774" PostTypeId="2" ParentId="773" CreationDate="2016-06-07T15:22:09.240" Score="43" Body="&lt;p&gt;&lt;strong&gt;If (and only if) your audio player is battery powered&lt;/strong&gt;, and your Spectrum is the 48K or 128K toastrack model, try the following procedure, intended to boost the volume of your wave signal, as seen by the Spectrum EAR circuitry:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Get one of these audio cables. They are very common. And yes, they are stereo.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ICCz6.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ICCz6.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why do we need it to be stereo? The trick is that both channels from the 3.5'' stereo plug will make contact inside the Spectrum jack this way:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dSZz8.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dSZz8.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when you use it to load from a digital audio player, that will normally output the same level in both channels, you won't hear (or load) anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then what? Just invert one of the channels so the voltage level of one channel, reffered to the other channel, will appear to be double the value of any of both channel reffered to ground (which won't be connected at all in our setup)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the TAP/TZX conversion program allows this inversion, use it. If not, you can use an editor program like Audacity to perform the inversion. Here is how:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, load your generated WAV into Audacity. The generated WAV should be stereo, but if not, it doesn't matter. We can clone one channel to the other one to make it stereo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NPyzJ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NPyzJ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use the magnifier tool inside the wave window to amgnify it to the point you can clearly see both waves, that initially will look the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JTeVb.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JTeVb.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now click on the wav name tab and select &quot;Split stereo track&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dOiMk.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dOiMk.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we have the left and right channels in different tracks, so we can manipulate each one independently. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Change to the select tool (above the magnifier tool) and click the second track (the one below the other) as near as possible to the beginning of it. Press Home to bring the selection mark to the very beginning of the track. From the menu, select Edit -&gt; Select -&gt; Cursor to Track End so the whole track is selected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZkTyH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZkTyH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that selection active, select Effect -&gt; Invert&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MbDCq.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MbDCq.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we have two independent tracks, one of them with an inverted version of the sound of the other one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Hg4kq.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Hg4kq.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now select both tracks: press Shift and click on both tracks (the region where the properties of each track are displayed). Then, click on the name of any of them and select &quot;Make stereo track&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uXiqy.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uXiqy.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The final result should be a stereo track with one channel inverted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B69mX.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B69mX.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Save this wave as PCM stereo track by choosing File -&gt; Export&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/h6ljY.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/h6ljY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then, WAV&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/54eE5.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/54eE5.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Copy it to your digital audio player and use the stereo cable as described to play the resulting sound. Don't be surprised if you need to lower the volume in order to get it loaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, in order to load this Bruce Lee example with a Samsung Onyx, I had to do it using the MIC input on the Spectrum, as the EAR input was too loud to be usable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xx58r.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xx58r.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-06-07T16:10:02.913" LastActivityDate="2016-06-07T16:10:02.913" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="775" PostTypeId="1" AcceptedAnswerId="776" CreationDate="2016-06-07T15:37:21.373" Score="27" ViewCount="5997" Body="&lt;p&gt;I was installing the OEM version of Windows 95 on VirtualBox the other day for reminiscence sake, and for some reason I had two different product keys. I tested both of them to see which one mapped to the CD, and to my surprise both product keys work with the installation. I always thought the product key and CD were one-to-one, but is this not so with Windows 95?&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="15334" LastEditDate="2021-01-12T20:52:49.830" LastActivityDate="2021-01-12T20:52:49.830" Title="Why are Windows 95 installation disks not uniquely bound to a single product key?" Tags="&lt;ms-dos&gt;&lt;windows-95&gt;&lt;licensing&gt;" AnswerCount="5" CommentCount="10" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="776" PostTypeId="2" ParentId="775" CreationDate="2016-06-07T15:50:42.463" Score="30" Body="&lt;p&gt;The CD media for OSR (OEM Service Releases) are generally all the same; there is no unique code on the disc. Imagine what a problem this would be for commercial users with multiple machines to support - they wouldn't want to archive multiple copies of the media.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making the key unique to the disk doesn't add any protection if the disc image is easily writable (unless there is online checking to limit reuse of codes)&lt;/p&gt;&#xA;" OwnerUserId="46" LastEditorUserId="46" LastEditDate="2016-06-07T16:09:39.200" LastActivityDate="2016-06-07T16:09:39.200" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="777" PostTypeId="2" ParentId="481" CreationDate="2016-06-07T16:40:40.317" Score="4" Body="&lt;p&gt;I have had great success with the Qemu emulator! I have been able to run (emulate) DOS and MS-DOS on an Apple computer with it. Because some versions of DOS may require a different CPU architecture than what your Apple runs on, you can use Qemu to emulate another CPU architecture. Here is the homepage to help get you started: &lt;a href=&quot;http://wiki.qemu.org/Main_Page&quot; rel=&quot;nofollow&quot;&gt;http://wiki.qemu.org/Main_Page&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1880" LastActivityDate="2016-06-07T16:40:40.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="778" PostTypeId="1" AcceptedAnswerId="779" CreationDate="2016-06-07T18:25:39.303" Score="32" ViewCount="4670" Body="&lt;p&gt;Is it &lt;em&gt;generally&lt;/em&gt; legal to download older ROM images of &lt;em&gt;commercial&lt;/em&gt; software and games for non-commercial use in a retro computing system (emulated or otherwise)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note that this question implies no special knowledge of those ROMs where rightsholders have expressly provided distribution and non-commercial use of their intellectual property, freely or for a fee. The assumption is that if you are in possession of one of those, you already know what legal right to use or download it you have.)&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorDisplayName="user12" LastEditDate="2017-02-16T16:50:42.477" LastActivityDate="2017-03-13T19:40:03.890" Title="Is it legal to download ROM images from shared or internet archives?" Tags="&lt;rom&gt;&lt;licensing&gt;" AnswerCount="7" CommentCount="12" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="779" PostTypeId="2" ParentId="778" CreationDate="2016-06-07T18:25:39.303" Score="30" Body="&lt;p&gt;&lt;em&gt;This question has generated a lot of interest regarding whether or not we can talk about copyright in a general, international way. I argue that we can because copyright and IP law in general is based on international law. There are very few places in the world where the implicit copyright to creations is not granted, as has been the case since at least 1967. Even those countries that are not signatories to the Berne convention have other international agreements that follow similar patterns.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;That is, this question does not ask &quot;what is the extent of this law, and what are the penalties for breaking the law&quot; (which would then require inquiring into local statutes) but rather asks a much simpler question: &quot;is it, generally speaking, illegal to provide copies of this material, or come into possession of the material without express permission of the rightsholders?&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;It is an uncomfortable, unalterable fact that, globally speaking and at this moment, it is against international law to share or possess such material. How that law might be interpreted, and the specific legal risks and implications of that law where you live is certainly open to discussion, but is not actually part of this question or this answer. Answers that provide specific examples of how countries interpret international law are helpful background but we do not need to consult local law to answer the specific question at hand.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;TL;DR: sharing or downloading ROM images is almost certainly illegal, or at&#xA;  least legally complicated. However, most rightsholders are likely not&#xA;  interested in pursuing action against individuals.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I am not a lawyer. This is not legal advice. Intellectual property law at a local and global level is a complex subject most lawyers don't even fully understand. Trying to distill all of that into a single SE answer is a fool's errand.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, some general comments about the legalities of retro system ROM images can be made by this particular fool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Legalities will differ depending on your locale but, in general, downloading ROM images for any system (regardless of age) is strictly &lt;strong&gt;not&lt;/strong&gt; allowed by law. In fact, it &lt;em&gt;may&lt;/em&gt; even be considered &quot;software piracy&quot; to make images of ROMs you legally own. This is why emulation sites shy away from showing you where or how to get ROMs for their software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are locales, however, where it is legal to create and download copyrighted material for personal, non-commercial use. &lt;strong&gt;Check with an expert about your local statutes on the subject.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inverse is also true: &lt;strong&gt;there is no global, over-arching law that governs or specifically allows downloading ROM images&lt;/strong&gt;, especially those that make special claims regarding some specific number of hours that intellectual property can be in your possession.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And even if downloading an image &lt;em&gt;is&lt;/em&gt; legal where you are (or is not specifically &lt;em&gt;illegal&lt;/em&gt;, as the case may be), it's not like a particularly litigious rightsholder won't try to pursue legal recourse if they think they have a case. (Perhaps an unlikely situation, but words are small comfort if your ISP is suddenly pressured to disconnect you.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, there are many sites that offer ROM images of games and system firmware for download. These sites are almost certainly breaking the law (or are in a legal grey area), though in many cases the rightsholders may not have any interest in pursuing legal interests. Such sites may also be operating out of countries where it is legal to offer such services, or the legal recourse for rightsholders are limited.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I would be remiss if I did not link to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Abandonware#Law&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia article on the legal implications of abandonware&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether or not creating or downloading old or abandoned images is adhering to the spirit of the law is up to individuals.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorDisplayName="user12" LastEditDate="2017-03-13T15:25:05.340" LastActivityDate="2017-03-13T15:25:05.340" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="780" PostTypeId="2" ParentId="778" CreationDate="2016-06-07T18:53:24.823" Score="9" Body="&lt;p&gt;I think one reason that it is very prolific, is that JDV is right:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;in many cases the rightsholders may not have any interest in pursuing legal interests.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And in the case of very old games and companies (that may not exist any longer) that is probably true.  Nintendo however, has some very specific things to say about this on their &lt;a href=&quot;https://www.nintendo.com/corp/legal.jsp&quot; rel=&quot;nofollow noreferrer&quot;&gt;corporate legal page&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Can I Download a Nintendo ROM from the Internet if I Already Own the&#xA;  Authentic Game?&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;There is a good deal of misinformation on the Internet regarding the&#xA;  backup/archival copy exception. It is not a &quot;second copy&quot; rule and is&#xA;  often mistakenly cited for the proposition that if you have one lawful&#xA;  copy of a copyrighted work, you are entitled to have a second copy of&#xA;  the copyrighted work even if that second copy is an infringing copy.&#xA;  The backup/archival copy exception is a very narrow limitation&#xA;  relating to a copy being made by the rightful owner of an authentic&#xA;  game to ensure he or she has one in the event of damage or destruction&#xA;  of the authentic. Therefore, &lt;strong&gt;&lt;em&gt;whether you have an authentic game or&#xA;  not, or whether you have possession of a Nintendo ROM for a limited&#xA;  amount of time, i.e. 24 hours, it is illegal to download and play a&#xA;  Nintendo ROM from the Internet.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While other companies will vary in their willingness to pursue legal action, Nintendo's perspective on this topic seems to be pretty black-and-white.  Further documentation on that page also indicates that sites which provide links to ROM download pages may also be breaking the law.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it would seem that &quot;No&quot; it is not legal.  And prosecution of which can hinge on two aspects:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Whether or not the company which published/distributed the game is still a legal entity.&lt;/li&gt;&#xA;&lt;li&gt;How willing that company is to pursue legal action against those who download or make available images of retro game ROMs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit: 20170214&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ran across this article &quot;&lt;a href=&quot;http://www.howtogeek.com/262758/is-downloading-retro-video-game-roms-ever-legal/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Is Downloading Retro Video Game ROMs Ever Legal?&lt;/a&gt;&quot; on &lt;a href=&quot;http://www.howtogeek.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;HowToGeek.com&lt;/a&gt; that was posted a couple of months after our discussion here.  They talked to a law professor from the University of Arizona College of Law, and asked him some of these same questions.  Makes for a good read, but the bottom line:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If one thing is clear, though, it’s this: if you don’t own a legal&#xA;  copy of a game, you don’t have any right to download it (yes, even if&#xA;  you delete it after 24 hours, or other such nonsense).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="125" LastEditorUserId="125" LastEditDate="2017-02-14T14:38:54.190" LastActivityDate="2017-02-14T14:38:54.190" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="781" PostTypeId="2" ParentId="778" CreationDate="2016-06-07T18:57:11.367" Score="5" Body="&lt;p&gt;A very limited number of rights holders have retrospectively relaxed the license conditions (or re-released) their intelectual property, making it legal &lt;strong&gt;in specific situations&lt;/strong&gt; and &lt;strong&gt;for specific software&lt;/strong&gt;. In these cases rights such as redistribution or commercial use will vary, and it can be hard to track down the precise detail as ownership often changes over time - just because the owner is not easy to identify, you can't assume there is no owner.&lt;/p&gt;&#xA;" OwnerUserId="46" LastActivityDate="2016-06-07T18:57:11.367" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="782" PostTypeId="5" CreationDate="2016-06-07T19:37:20.097" Score="0" Body="&lt;p&gt;Regarding the terms of licences for the use of retro-software.&lt;br&gt;&#xA;Note that this site does not give legal advice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/floppy-disk&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;floppy-disk&amp;#39;&quot; rel=&quot;tag&quot;&gt;floppy-disk&lt;/a&gt; &lt;a href=&quot;/questions/tagged/software&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;software&amp;#39;&quot; rel=&quot;tag&quot;&gt;software&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-12-21T13:36:45.747" LastActivityDate="2016-12-21T13:36:45.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="783" PostTypeId="4" CreationDate="2016-06-07T19:37:20.097" Score="0" Body="For questions relating to the licensing of retrocomputing hardware and software" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-12-21T13:36:45.747" LastActivityDate="2016-12-21T13:36:45.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="784" PostTypeId="5" CreationDate="2016-06-07T19:39:10.807" Score="0" Body="&lt;p&gt;For questions about software that runs on Windows 95, use the &lt;a href=&quot;/questions/tagged/software&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;software&amp;#39;&quot; rel=&quot;tag&quot;&gt;software&lt;/a&gt; tag.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T07:47:35.967" LastActivityDate="2016-06-08T07:47:35.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="785" PostTypeId="4" CreationDate="2016-06-07T19:39:10.807" Score="0" Body="For questions about Microsoft's Windows 95 operating system" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-10T17:44:03.240" LastActivityDate="2016-09-10T17:44:03.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="786" PostTypeId="1" AcceptedAnswerId="790" CreationDate="2016-06-07T19:45:48.900" Score="1" ViewCount="399" Body="&lt;p&gt;I have played around with the QEMU emulator, as it can emulate OS's that VirtualBox cannot, especially older systems that cannot run on x86 or x64. With QEMU being quite slow because it has to translate to different CPU architectures, is it ever used commercially or in business applications?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&#xA;Does anyone know of any hardware or software that uses QEMU as a core element in the application?&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="1880" LastEditDate="2016-06-07T20:26:28.243" LastActivityDate="2016-06-07T23:20:55.347" Title="Is QEMU Used Commercially?" Tags="&lt;emulation&gt;" AnswerCount="2" CommentCount="9" ClosedDate="2016-06-08T07:02:43.573" ContentLicense="CC BY-SA 3.0" />
  <row Id="787" PostTypeId="2" ParentId="195" CreationDate="2016-06-07T20:27:33.657" Score="13" Body="&lt;p&gt;In Poland there was the &lt;code&gt;Commodore &amp;amp; Amiga&lt;/code&gt; magazine in 1992-1995. In it's 7th number (July '92, pages 22-23) there was an article on how to build your own power supply for C64 written by Jerzy Dudek. There is an archive of this magazine at &lt;a href=&quot;http://stare.e-gry.net/czasopisma/commodore-amiga&quot; rel=&quot;noreferrer&quot;&gt;http://stare.e-gry.net/czasopisma/commodore-amiga&lt;/a&gt;. It's in &lt;a href=&quot;http://djvu.org/&quot; rel=&quot;noreferrer&quot;&gt;DjVu&lt;/a&gt; format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the schema from this article:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Dt1my.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Dt1my.png&quot; alt=&quot;C64 power supply schema&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="423" LastActivityDate="2016-06-07T20:27:33.657" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="788" PostTypeId="2" ParentId="778" CreationDate="2016-06-07T21:03:34.493" Score="6" Body="&lt;p&gt;These ROM images are like all other software and are protected by copyright law.  Most are commercial software that do not permit copying and distributing.  Some copyright holders have allowed their games to be freely distributable, for example the Sega Mega Drive game, Zero Tolerance, and it's unfinished prototype sequel, Beyond Zero Tolerance.  There are also homebrew games and demos with permissive licenses available for most every gaming console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This question is, for example, why the Debian project was reluctant to include the at-the-time-recently-GPL'd ZSNES SNES emulator in its distribution.  What good would a Free emulator be if there was little to no Free or even free software available to use with it?&lt;/p&gt;&#xA;" OwnerUserId="64" LastActivityDate="2016-06-07T21:03:34.493" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="789" PostTypeId="2" ParentId="786" CreationDate="2016-06-07T21:05:25.177" Score="4" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.linaro.org/blog/core-dump/running-64bit-android-l-qemu/&quot; rel=&quot;nofollow&quot;&gt;this linaro page&lt;/a&gt; the Android emulator &lt;em&gt;was&lt;/em&gt; based on QEMU, and although its not too specific on performance, it is talking about running a full modern stack in emulation - specifically around the early adoption of a new architecture.&lt;/p&gt;&#xA;" OwnerUserId="46" LastActivityDate="2016-06-07T21:05:25.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="790" PostTypeId="2" ParentId="786" CreationDate="2016-06-07T23:10:25.093" Score="8" Body="&lt;p&gt;QEMU is used in malware/virus research extensively as it also can emulate the hardware. By emulating the hardware into full detail it is almost impossible for malware to detect that it is running in a virtual and controlled environment. This is because a lot of malware turns off when it detects when it is running in a virtual environment as it indicates a server where no user would ever logon and would give away its existence or an environment where its behaviour is going to be recorded and studied.&lt;/p&gt;&#xA;" OwnerUserId="1892" LastEditorUserId="1880" LastEditDate="2016-06-07T23:20:55.347" LastActivityDate="2016-06-07T23:20:55.347" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="791" PostTypeId="1" AcceptedAnswerId="796" CreationDate="2016-06-07T23:25:40.107" Score="81" ViewCount="13061" Body="&lt;p&gt;Windows in its earliest days was simply a shell that ran on top of MS-DOS, which means that Windows 3.1 itself was actually just a standard MS-DOS application like any other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet, MS-DOS is not a multitasking operating system, and at the same time, Windows applications were compiled native-code binaries that ran without any form of managed environment. So, how exactly was multitasking of Windows binaries achieved if Windows 3.1 was simply a regular old MS-DOS program itself? Are there any old technical documents still floating around that describe the early Windows architecture internally?&lt;/p&gt;&#xA;" OwnerUserId="1893" LastEditorUserId="11916" LastEditDate="2019-04-23T22:51:10.817" LastActivityDate="2020-09-27T11:22:12.700" Title="How did Windows 3.1 implement multitasking?" Tags="&lt;ms-dos&gt;&lt;windows-3.x&gt;&lt;multitasking&gt;" AnswerCount="2" CommentCount="20" FavoriteCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="792" PostTypeId="2" ParentId="775" CreationDate="2016-06-07T23:45:17.637" Score="29" Body="&lt;p&gt;CDs are made by pressing, having a new master made is expensive so the content of the disk would rarely be changed, certainly not for a single copy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes there are recordable CDs now but they were not common at the time windows 95 was released, cost more in bulk than pressing and generally have worse longevity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even for media that is not pressed making a load of identical copies is simpler than uniqely serialising disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess this was a large part of the motivation for having product keys in the first place, to allow a copy sold to be uniquely identified even though it was shipped on bulk-copied media.&lt;/p&gt;&#xA;" OwnerUserId="499" LastActivityDate="2016-06-07T23:45:17.637" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="793" PostTypeId="2" ParentId="791" CreationDate="2016-06-07T23:53:37.417" Score="42" Body="&lt;p&gt;Found a great answer on Super User that explains it really well!&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Windows 3.1 uses cooperative multi-tasking – meaning that each&#xA;  application that is in the process of running is instructed to&#xA;  periodically check a message queue to find out if any other&#xA;  application is asking for use of the CPU and, if so, to yield control&#xA;  to that application. However, many Windows 3.1 applications would&#xA;  check the message queue only infrequently, or not at all, and&#xA;  monopolize control of the CPU for as much time as they required. A&#xA;  pre-emptive multi-tasking system like Windows 95 will take CPU control&#xA;  away from a running application and distribute it to those that have a&#xA;  higher priority based on the system’s needs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://superuser.com/a/726367/541767&quot;&gt;https://superuser.com/a/726367/541767&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="1880" LastEditDate="2017-12-04T18:35:09.663" LastActivityDate="2017-12-04T18:35:09.663" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="794" PostTypeId="1" AcceptedAnswerId="883" CreationDate="2016-06-07T23:58:39.270" Score="10" ViewCount="269" Body="&lt;p&gt;I'm talking about true MSX computers, not MSX-ish, or partially compatible MSX computers (Spectravideo 318, I'm looking at you).&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-06-08T00:40:03.443" LastActivityDate="2016-06-10T18:40:43.600" Title="Which was the first true compatible MSX computer available in the market?" Tags="&lt;msx&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="795" PostTypeId="1" AcceptedAnswerId="7109" CreationDate="2016-06-08T00:52:08.887" Score="19" ViewCount="1445" Body="&lt;p&gt;I'm trying to replicate the Vectrex, but I don't want to deal with bare CRTs, death-level voltages and the like. So I need my Vectrex implementation to be able to be hooked to a regular CRT/LCD screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am well aware of the vector nature of the Vectrex hardware, but due to the Vectrex manipulates the beam deflection using discrete values stored in a register, then converted to an analog voltage using a D/A converter, I suspect that not every position in the CRT can be reached by the beam, but only discrete positions, as well as not every bright level is available, but only (64?) levels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, is this true? Can we place the beam only in certain positions? If so, which ones? If not, how can we place the beam wherever we like using discrete values for X and Y?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other way, the beam may not be placed in any position, but if we change from a position to another position and then to the previous one in a loop, does the beam traces a straight line from one point to the other one? Or will we see two points, each of them at each starting and ending positions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So at the end, my questions can be summarized as: which is the minimum resolution I would have to adopt in order to emulate the vector screen of a Vectrex?&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2018-07-27T02:28:04.190" Title="Which is the &quot;equivalent bit-map resolution&quot; of a Vectrex display?" Tags="&lt;vectrex&gt;" AnswerCount="6" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="796" PostTypeId="2" ParentId="791" CreationDate="2016-06-08T01:30:05.313" Score="80" Body="&lt;p&gt;For Win16 programs, Windows implemented co-operative multitasking. Its implementation was based upon the &amp;quot;message loop&amp;quot; architecture of every Windows program.&lt;/p&gt;&#xA;&lt;p&gt;The duty of every program was to endlessly run in a loop in which a call to the &lt;code&gt;GetMessage&lt;/code&gt; function was performed. This function call looks whether a message to this process is in the queue. If there is one, it is retrieved (&lt;code&gt;GetMessage&lt;/code&gt;), optionally translated (&lt;code&gt;TranslateMessage&lt;/code&gt;, done to convert keyboard shortcuts into menu actions) and finally, passed to the window procedure (&lt;code&gt;DispatchMessage&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;If there is no message available in the queue, Windows suspends the current task and gives the CPU to another task. This task will try to retrieve a message from its queue as well, yielding the CPU to another task if no message is present and so on.&lt;/p&gt;&#xA;&lt;p&gt;If a program needed to perform background tasks while there were no pending messages in its queue, it would call &lt;code&gt;PeekMessage&lt;/code&gt; instead of &lt;code&gt;GetMessage&lt;/code&gt;. This didn't make the task relinquish the CPU, as &lt;code&gt;PeekMessage&lt;/code&gt; would immediately return to the caller task to inform it whether a message is available or not. This was used to time-multiplex message processing with another time-consuming task (think of a 3D program rendering but letting the user cancel that render by pressing a &amp;quot;Cancel&amp;quot; button).&lt;/p&gt;&#xA;&lt;p&gt;If this time-consuming task was actually very time-consuming, a well-behaved program should call the &lt;code&gt;Yield&lt;/code&gt; function from time to time, to relinquish the CPU and let other tasks run.&lt;/p&gt;&#xA;&lt;p&gt;A badly-behaved program could easily hog the CPU by not retrieving messages too often or by spending too much time in a window procedure function.&lt;/p&gt;&#xA;&lt;p&gt;The situation was quite different for MS-DOS boxes. They ran using the V8086 mode of the 80386 (if Windows was running in enhanced mode). Windows-aware programs ran in the so-called System VM (Virtual Machine 1). DOS boxes ran from VM 2 upwards.&lt;/p&gt;&#xA;&lt;p&gt;DOS programs usually were badly-behaved programs, so Windows assigned each DOS box a different virtual machine. Virtual machines used pre-emptive multitasking in Windows 3.1, so each DOS box could run concurrently to others and to any Windows-aware program.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="15334" LastEditDate="2020-09-27T11:22:12.700" LastActivityDate="2020-09-27T11:22:12.700" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="797" PostTypeId="1" AcceptedAnswerId="813" CreationDate="2016-06-08T02:31:47.000" Score="17" ViewCount="12504" Body="&lt;p&gt;I'm sure a lot of us have come across WinWorldPC online. With the valuable resources that it has for obsolete systems, is it actually legal? For example, I could download almost any Windows system I wanted (theoretically) that came out earlier than Windows XP. If it is legal, I think it's a great site that preserves the history of computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&#xA;After taking a look at their ABOUT page, this is something they said: &quot;A consequence of heavy bandwidth usage and copyright issues, finding adequate hosting proved to be one of the most significant challenges in WinWorld's early years&quot; ...but I'm still not sure if it's legal.&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="15334" LastEditDate="2021-01-14T10:10:43.660" LastActivityDate="2021-01-14T10:10:43.660" Title="Is WinWorldPC legal?" Tags="&lt;ms-dos&gt;&lt;windows&gt;&lt;licensing&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="5" ClosedDate="2018-02-01T20:01:11.200" ContentLicense="CC BY-SA 3.0" />
  <row Id="799" PostTypeId="5" CreationDate="2016-06-08T04:19:30.330" Score="0" Body="&lt;p&gt;The Vectrex is a vector display-based home video game console that was developed by Western Technologies/Smith Engineering.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T07:40:14.210" LastActivityDate="2016-06-08T07:40:14.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="800" PostTypeId="4" CreationDate="2016-06-08T04:19:30.330" Score="0" Body="for questions about the Vectrex home video game console" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T07:47:44.140" LastActivityDate="2016-06-08T07:47:44.140" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="801" PostTypeId="5" CreationDate="2016-06-08T04:21:13.683" Score="0" Body="&lt;p&gt;Notable Questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://retrocomputing.stackexchange.com/q/713/621&quot;&gt;How do you determine the value of vintage computer equipment?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T07:47:51.890" LastActivityDate="2016-06-08T07:47:51.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="802" PostTypeId="4" CreationDate="2016-06-08T04:21:13.683" Score="0" Body="for questions about the worth or value of retrocomputing hardware and software" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T07:40:04.163" LastActivityDate="2016-06-08T07:40:04.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="803" PostTypeId="1" AcceptedAnswerId="3179" CreationDate="2016-06-08T04:34:19.757" Score="8" ViewCount="1005" Body="&lt;p&gt;&lt;a href=&quot;http://64dd.org/index.html&quot; rel=&quot;noreferrer&quot;&gt;64DD.org&lt;/a&gt; has some game dumps and information on how to play 64DD games in MAME or Project64.  Is there any way to play 64DD dumps on a Mac using &lt;a href=&quot;http://sixtyforce.com/&quot; rel=&quot;noreferrer&quot;&gt;sixtyforce&lt;/a&gt; (my version is registered)?  I was thinking about sending Gerrit Goossen an email about adding support as a feature request or asking to help with code the 64DD IPL support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not, what are my options?  Can I build the source of Project64 on Mac if sixtyforce does not support 64DD dumps?&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2018-10-23T09:13:56.373" Title="How can I play Nintendo 64DD Games with sixtyforce (on Mac)?" Tags="&lt;emulation&gt;&lt;nintendo&gt;&lt;nintendo-64&gt;&lt;nintendo-64dd&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="804" PostTypeId="5" CreationDate="2016-06-08T04:36:09.643" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/nintendo&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;nintendo&amp;#39;&quot; rel=&quot;tag&quot;&gt;nintendo&lt;/a&gt; &lt;a href=&quot;/questions/tagged/nintendo-64&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;nintendo-64&amp;#39;&quot; rel=&quot;tag&quot;&gt;nintendo-64&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T07:40:10.037" LastActivityDate="2016-06-08T07:40:10.037" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="805" PostTypeId="4" CreationDate="2016-06-08T04:36:09.643" Score="0" Body="for questions about the Nintendo 64 Disk Drive, a magnetic disk drive peripheral for the Nintendo 64" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T07:47:56.843" LastActivityDate="2016-06-08T07:47:56.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="806" PostTypeId="5" CreationDate="2016-06-08T04:36:55.363" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/nintendo&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;nintendo&amp;#39;&quot; rel=&quot;tag&quot;&gt;nintendo&lt;/a&gt; &lt;a href=&quot;/questions/tagged/nintendo-64dd&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;nintendo-64dd&amp;#39;&quot; rel=&quot;tag&quot;&gt;nintendo-64dd&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T07:47:46.967" LastActivityDate="2016-06-08T07:47:46.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="807" PostTypeId="4" CreationDate="2016-06-08T04:36:55.363" Score="0" Body="For questions about the Nintendo 64 home video console" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-10T16:58:21.770" LastActivityDate="2016-09-10T16:58:21.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="808" PostTypeId="5" CreationDate="2016-06-08T04:40:22.383" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/apple-macintosh&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;apple-macintosh&amp;#39;&quot; rel=&quot;tag&quot;&gt;apple-macintosh&lt;/a&gt; &lt;a href=&quot;/questions/tagged/imac-g3&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;imac-g3&amp;#39;&quot; rel=&quot;tag&quot;&gt;imac-g3&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T07:48:02.640" LastActivityDate="2016-06-08T07:48:02.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="809" PostTypeId="4" CreationDate="2016-06-08T04:40:22.383" Score="0" Body="For questions about Apple's iMac line of Macintosh desktop computers" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-10T18:13:11.593" LastActivityDate="2016-09-10T18:13:11.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="810" PostTypeId="5" CreationDate="2016-06-08T04:40:58.023" Score="0" Body="&lt;p&gt;The iMac G3 is a series of personal computers by Apple, and the successor to the &lt;a href=&quot;//en.wikipedia.org/wiki/Power_Macintosh_G3#All-In-One&quot; rel=&quot;nofollow noreferrer&quot;&gt;Power Macintosh All-in-one&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Developed following the return of Steve Jobs to Apple in the mid to late 90s, the iconic 'egg shell' all-in-one design proved popular and was a huge success for Apple, spawning imitators (such as the &lt;a href=&quot;//en.wikipedia.org/wiki/EMachines_eOne&quot; rel=&quot;nofollow noreferrer&quot;&gt;eMachines eOne&lt;/a&gt;), and influencing competitors' product designs for years to come.&lt;/p&gt;&#xA;&lt;p&gt;The iMac G3 was eventually superseded by the &lt;a href=&quot;//en.wikipedia.org/wiki/IMac_G4&quot; rel=&quot;nofollow noreferrer&quot;&gt;iMac G4&lt;/a&gt; and &lt;a href=&quot;//en.wikipedia.org/wiki/EMac&quot; rel=&quot;nofollow noreferrer&quot;&gt;eMac&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h1&gt;Revisions&lt;/h1&gt;&#xA;&#xA;&lt;h2&gt;Tray Loading&lt;/h2&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;&lt;strong&gt;Revision&lt;/strong&gt;:&lt;/th&gt;&#xA;&lt;th&gt;iMac&lt;/th&gt;&#xA;&lt;th&gt;iMac (Rev B)&lt;/th&gt;&#xA;&lt;th&gt;iMac (266 MHz)&lt;/th&gt;&#xA;&lt;th&gt;iMac (333 MHz)&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Released&lt;/strong&gt;:&lt;/td&gt;&#xA;&lt;td&gt;15th Aug, 1998&lt;/td&gt;&#xA;&lt;td&gt;4th Sep, 1998&lt;/td&gt;&#xA;&lt;td&gt;5th Jan, 1999&lt;/td&gt;&#xA;&lt;td&gt;15th Apr, 1999&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Processor&lt;/strong&gt;:&lt;/td&gt;&#xA;&lt;td&gt;233 MHz&lt;/td&gt;&#xA;&lt;td&gt;233 MHz&lt;/td&gt;&#xA;&lt;td&gt;266  MHz&lt;/td&gt;&#xA;&lt;td&gt;333 MHz&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;RAM&lt;/strong&gt;:&lt;/td&gt;&#xA;&lt;td&gt;32 MB (PC100 SDRAM)&lt;br&gt;Expandable to 512MB (128 supported by Apple)&lt;/td&gt;&#xA;&lt;td&gt;32 MB (PC100 SDRAM)&lt;br&gt;Expandable to 512MB (256 supported by Apple)&lt;/td&gt;&#xA;&lt;td&gt;32 MB (PC100 SDRAM)&lt;br&gt;Expandable to 512MB (256 supported by Apple)&lt;/td&gt;&#xA;&lt;td&gt;32 MB (PC100 SDRAM)&lt;br&gt;Expandable to 512MB (256 supported by Apple)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Colours&lt;/strong&gt;:&lt;/td&gt;&#xA;&lt;td&gt;Bondi Blue&lt;/td&gt;&#xA;&lt;td&gt;Bondi Blue&lt;/td&gt;&#xA;&lt;td&gt;Blueberry, Grape, Tangerine, Lime, Strawberry&lt;/td&gt;&#xA;&lt;td&gt;Blueberry, Grape,  Tangerine, Lime,  Strawberry&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Operating System (Release)&lt;/strong&gt;:&lt;/td&gt;&#xA;&lt;td&gt;Mac OS 8.1 (initial), 8.5 (further revisions)&lt;/td&gt;&#xA;&lt;td&gt;Mac OS 8.1 (initial), 8.5 (further revisions)&lt;/td&gt;&#xA;&lt;td&gt;Mac OS 8.5.1&lt;/td&gt;&#xA;&lt;td&gt;Mac OS 8.5.1&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Operating System (Final)&lt;/strong&gt;:&lt;/td&gt;&#xA;&lt;td&gt;- Mac OS X 10.3.9 &amp;quot;Panther&amp;quot;&lt;br&gt;- Mac OS 9.2.2&lt;/td&gt;&#xA;&lt;td&gt;- Mac OS X 10.3.9 &amp;quot;Panther&amp;quot;&lt;br&gt;- Mac OS 9.2.2&lt;/td&gt;&#xA;&lt;td&gt;- Mac OS X 10.3.9 &amp;quot;Panther&amp;quot;&lt;br&gt;- Mac OS 9.2.2&lt;/td&gt;&#xA;&lt;td&gt;- Mac OS X 10.3.9 &amp;quot;Panther&amp;quot;&lt;br&gt;- Mac OS 9.2.2&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Hard Drive:&lt;/strong&gt;&lt;/td&gt;&#xA;&lt;td&gt;4GB, 5400-rpm (128GB Supported)&lt;/td&gt;&#xA;&lt;td&gt;4GB, 5400-rpm (128GB Supported)&lt;/td&gt;&#xA;&lt;td&gt;4GB, 5400-rpm (128GB Supported)&lt;/td&gt;&#xA;&lt;td&gt;4GB, 5400-rpm (128GB Supported)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Optical Drive:&lt;/strong&gt;&lt;/td&gt;&#xA;&lt;td&gt;24x CD-ROM&lt;/td&gt;&#xA;&lt;td&gt;24x CD-ROM&lt;/td&gt;&#xA;&lt;td&gt;24x CD-ROM&lt;/td&gt;&#xA;&lt;td&gt;24x CD-ROM&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Graphics:&lt;/strong&gt;&lt;/td&gt;&#xA;&lt;td&gt;ATI Rage IIc (2MB SGRAM)&lt;/td&gt;&#xA;&lt;td&gt;ATI Rage Pro (6MB SGRAM)&lt;/td&gt;&#xA;&lt;td&gt;ATI Rage Pro (6MB SGRAM)&lt;/td&gt;&#xA;&lt;td&gt;ATI Rage Pro (6MB SGRAM)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&lt;h2&gt;Slot Loading&lt;/h2&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Revision:&lt;/th&gt;&#xA;&lt;th&gt;iMac (Fall 1999)&lt;/th&gt;&#xA;&lt;th&gt;iMac (Summer 2000)&lt;/th&gt;&#xA;&lt;th&gt;iMac (Winter 2001)&lt;/th&gt;&#xA;&lt;th&gt;iMac (Summer 2001)&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Released&lt;/strong&gt;:&lt;/td&gt;&#xA;&lt;td&gt;4th Oct, 1999&lt;/td&gt;&#xA;&lt;td&gt;19th Jul, 2000&lt;/td&gt;&#xA;&lt;td&gt;22nd Feb, 2001&lt;/td&gt;&#xA;&lt;td&gt;18th Jul, 2001&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Processor&lt;/strong&gt;:&lt;/td&gt;&#xA;&lt;td&gt;- 350 MHz (Blueberry only)&lt;br&gt;- 400 MHz (all colours)&lt;/td&gt;&#xA;&lt;td&gt;- 350 MHz (Indigo only)&lt;br&gt;- 400 MHz (Indigo, Ruby)&lt;br&gt;- 450 MHz (Indigo, Ruby, Sage)&lt;br&gt;- 500 MHz (Graphite, Snow)&lt;/td&gt;&#xA;&lt;td&gt;- 400 MHz (Indigo)&lt;br&gt;- 500 MHz (all exc. Graphite)&lt;br&gt;- 600 MHz (all exc Indigo)&lt;/td&gt;&#xA;&lt;td&gt;- 500 MHz (Indigo, Snow)&lt;br&gt;- 600 MHz (Graphite, Snow)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;RAM&lt;/strong&gt;:&lt;/td&gt;&#xA;&lt;td&gt;64MB or 128MB&lt;br&gt;&lt;br&gt;Expandable to 1GB (512 MB officially supported)&lt;/td&gt;&#xA;&lt;td&gt;64MB or 128MB&lt;br&gt;&lt;br&gt;Expandable to 1GB&lt;/td&gt;&#xA;&lt;td&gt;64MB or 128MB&lt;br&gt;&lt;br&gt;Expandable to 1GB&lt;/td&gt;&#xA;&lt;td&gt;64MB, 128MB, 256MB&lt;br&gt;&lt;br&gt;Expandable to 1GB&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Colours&lt;/strong&gt;:&lt;/td&gt;&#xA;&lt;td&gt;Blueberry, Grape, Tangerine, Lime, &lt;br&gt;Strawberry, Graphite&lt;/td&gt;&#xA;&lt;td&gt;Indigo, Ruby, Sage, Graphite, Snow&lt;/td&gt;&#xA;&lt;td&gt;Indigo, Graphite, Flower Power, &lt;br&gt;Blue Dalmatian&lt;/td&gt;&#xA;&lt;td&gt;Indigo, Graphite, Snow&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Operating System (Release)&lt;/strong&gt;:&lt;/td&gt;&#xA;&lt;td&gt;Mac OS 8.6&lt;/td&gt;&#xA;&lt;td&gt;Mac OS 9.0.4&lt;/td&gt;&#xA;&lt;td&gt;Mac OS 9.1&lt;/td&gt;&#xA;&lt;td&gt;Mac 0S 9.1&lt;br&gt;Mac OSX 10.0.4&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Operating System (Final)&lt;/strong&gt;:&lt;/td&gt;&#xA;&lt;td&gt;Mac OS X 10.3.9 &amp;quot;Panther&amp;quot; (350 MHz models)&lt;br&gt;Mac OS X 10.4.11 &amp;quot;Tiger&amp;quot;&lt;/td&gt;&#xA;&lt;td&gt;Mac OS X 10.3.9 &amp;quot;Panther&amp;quot; (350 MHz models)&lt;br&gt;Mac OS X 10.4.11 &amp;quot;Tiger&amp;quot;&lt;/td&gt;&#xA;&lt;td&gt;Mac OS X 10.4.11 &amp;quot;Tiger&amp;quot;&lt;/td&gt;&#xA;&lt;td&gt;Mac OS X 10.4.11 &amp;quot;Tiger&amp;quot;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Hard Drive:&lt;/strong&gt;&lt;/td&gt;&#xA;&lt;td&gt;6GB, 10GB, 13GB&lt;br&gt;(Up to 128GB supported)&lt;/td&gt;&#xA;&lt;td&gt;7GB, 10GB, 20GB, 30GB&lt;br&gt;(Up to 128GB supported)&lt;/td&gt;&#xA;&lt;td&gt;10GB, 20GB, 30GB, 40GB&lt;br&gt;(Up to 128GB supported)&lt;/td&gt;&#xA;&lt;td&gt;20GB, 40GB, 60GB&lt;br&gt;(Up to 128GB supported)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Optical Drive:&lt;/strong&gt;&lt;/td&gt;&#xA;&lt;td&gt;24x CD-ROM (Blueberry @350MHz)&lt;br&gt;4x DVD-ROM (All others)&lt;/td&gt;&#xA;&lt;td&gt;24x CD-ROM (Ruby @400MHz, Indigo @350/400 MHz)&lt;br&gt;4x DVD-ROM (All others)&lt;/td&gt;&#xA;&lt;td&gt;24x CD-ROM (Indigo @400MHz)&lt;br&gt;8x4x24x CD-RW (All others)&lt;/td&gt;&#xA;&lt;td&gt;8x4x24x CD-RW&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Graphics:&lt;/strong&gt;&lt;/td&gt;&#xA;&lt;td&gt;ATI Rage 128VR (8MB SDRAM)&lt;/td&gt;&#xA;&lt;td&gt;ATI Rage 128 Pro (8MB SDRAM)&lt;/td&gt;&#xA;&lt;td&gt;400MHz - ATI Rage 128 Pro (8MB SDRAM)&lt;br&gt;Others - ATI Rage 128 Ultra (16MB SDRAM)&lt;/td&gt;&#xA;&lt;td&gt;ATI Rage 128 Ultra (16MB SDRAM)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&lt;h1&gt;Related tags:&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&quot;/questions/tagged/apple-macintosh&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;apple-macintosh&amp;#39;&quot; rel=&quot;tag&quot;&gt;apple-macintosh&lt;/a&gt; &lt;a href=&quot;/questions/tagged/imac&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;imac&amp;#39;&quot; rel=&quot;tag&quot;&gt;imac&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1&gt;References:&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;//en.wikipedia.org/wiki/IMac_G3&quot; rel=&quot;nofollow noreferrer&quot;&gt;iMac G3 (Wikipedia)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="621" LastEditorUserId="3352" LastEditDate="2021-03-18T14:46:04.197" LastActivityDate="2021-03-18T14:46:04.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="811" PostTypeId="4" CreationDate="2016-06-08T04:40:58.023" Score="0" Body="For questions about Apple's iMac G3 line of personal computers, released between 1998 and 2001." OwnerUserId="621" LastEditorUserId="3352" LastEditDate="2021-03-18T14:45:51.990" LastActivityDate="2021-03-18T14:45:51.990" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="812" PostTypeId="2" ParentId="795" CreationDate="2016-06-08T04:49:53.747" Score="-1" Body="&lt;p&gt;&lt;a href=&quot;http://www.gamasutra.com/view/feature/3117/a_history_of_gaming_platforms_the_.php?print=1&quot; rel=&quot;nofollow&quot;&gt;This page on gamasutra&lt;/a&gt; says 330x410.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-06-08T04:49:53.747" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="813" PostTypeId="2" ParentId="797" CreationDate="2016-06-08T05:20:01.730" Score="16" Body="&lt;p&gt;The situation isn't nearly as cut and dried as Wikipedia might make it sound.&lt;/p&gt;&#xA;&lt;p&gt;For example, under US copyright law:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;§ 117 . Limitations on exclusive rights: Computer programs&lt;/p&gt;&#xA;&lt;p&gt;(a) Making of Additional Copy or Adaptation by Owner of Copy.—Notwithstanding the provisions of section 106, it is &lt;strong&gt;not an infringement&lt;/strong&gt; for the owner of a copy of a computer program to make or authorize the making of another copy or adaptation of that computer program provided:&lt;/p&gt;&#xA;&lt;p&gt;(1) that such a new copy or adaptation is created as an essential step in the utilization of the computer program in conjunction with a machine and that it is used in no other manner,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I doubt that this was the &lt;em&gt;intent&lt;/em&gt; of that bit of law, but this does give some wiggle room for the site owners to at least argue that what they/their users are doing is legal.&lt;/p&gt;&#xA;&lt;p&gt;Of course, copyright law does also vary (somewhat) with locale. Depending on where their servers are located, it's at least possible that the law there is somewhat less strict.&lt;/p&gt;&#xA;&lt;p&gt;There's another technicality that figures in here as well: most of copyright law is more or less aimed at a situation such as another publisher taking a work and selling the misappropriated work for their own profit. To do that, the person/group who's misappropriated the work normally has to make copies, then offer them for sale--and much of most copyright law is written to prevent that.&lt;/p&gt;&#xA;&lt;p&gt;In a case like this, where the site isn't actually making copies, but is merely placing the work in a situation where somebody else can make copies, many of those provisions sort of fall apart. So, the basic rights under US copyright law are:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;§ 106 . Exclusive rights in copyrighted works&lt;/p&gt;&#xA;&lt;p&gt;Subject to sections 107 through 122, the owner of copyright under this title has the exclusive rights to do and to authorize any of the following:&lt;/p&gt;&#xA;&lt;p&gt;(1) to reproduce the copyrighted work in copies or phonorecords;&lt;/p&gt;&#xA;&lt;p&gt;(2) to prepare derivative works based upon the copyrighted work;&lt;/p&gt;&#xA;&lt;p&gt;(3) to distribute copies or phonorecords of the copyrighted work to the public by sale or other transfer of ownership, or by rental, lease, or lending;&lt;/p&gt;&#xA;&lt;p&gt;(4) in the case of literary, musical, dramatic, and choreographic works, pantomimes, and motion pictures and other audiovisual works, to perform the copyrighted work publicly;&lt;/p&gt;&#xA;&lt;p&gt;(5) in the case of literary, musical, dramatic, and choreographic works, pantomimes, and pictorial, graphic, or sculptural works, including the individual images of a motion picture or other audiovisual work, to display the copyrighted work publicly; and&lt;/p&gt;&#xA;&lt;p&gt;(6) in the case of sound recordings, to perform the copyrighted work publicly by means of a digital audio transmission.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, let's consider these one at a time:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The site isn't really reproducing the copyrighted work, except to the degree that (for example) a web cache server held all or part of a copy of the work.&lt;/li&gt;&#xA;&lt;li&gt;It doesn't appear that they're preparing any derivative works.&lt;/li&gt;&#xA;&lt;li&gt;I don't see anything indicating that they're claiming to transfer ownership, lease, or lend the work (&amp;quot;lending&amp;quot; carries the specific idea of the item being returned, not being permanently transferred).&lt;/li&gt;&#xA;&lt;li&gt;through 6. clearly don't apply to an operating system (nor probably to any computer program).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There's another provision in §108, that says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(d) The rights of reproduction and distribution under this section apply to a copy, made from the collection of a library or archives where the user makes his or her request or from that of another library or archives, of no more than one article or other contribution to a copyrighted collection or periodical issue, or to a copy or phonorecord of a small part of any other copyrighted work, if—&lt;br&gt;&#xA;(1) the copy or phonorecord becomes the property of the user, and the library or archives has had no notice that the copy or phonorecord would be used for any purpose other than private study, scholarship, or research; and&lt;br&gt;&#xA;(2) the library or archives displays prominently, at the place where orders are accepted, and includes on its order form, a warning of copyright in accordance with requirements that the Register of Copyrights shall prescribe by regulation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This was originally intended to apply to things like a copying machine at a library. If I go to the library and make a copy of something on the copying machine, &lt;em&gt;I'm&lt;/em&gt; responsible, not the library. If (for example) I'm disabled, and ask one of their employees to make the copy, I'm still responsible for it, not them.&lt;/p&gt;&#xA;&lt;p&gt;The question in this case would be whether the web site qualifies as a library or archive. The fact that the site at least appears to be open to the general public seems to let it meet the legal requirements to qualify.&lt;/p&gt;&#xA;&lt;p&gt;This isn't just stretching a technicality to apply to the current situation either. The basic idea is fairly simple: a library or archive should be free to provide source material, and even provide copying equipment to their patrons. As long as they take the steps required by the law to tell/remind the patrons that wholesale copying may infringe a copyright, it's the patrons, not the library/archive, who are responsible for the copyright infringement. That seems to fit extremely well with what's happening here.&lt;/p&gt;&#xA;&lt;p&gt;That means just about any infringement that might occur would have to be on the part of the person doing the downloading, not the web site itself. Here (again) the first point brought up from §117 still (at least potentially) applies--it may still be legal. Of course, there's also the possibility that the downloader is simply somebody who (at some point in the past) actually bought a license to the program they're downloading/using. In that case, if that license hasn't ever been transferred to anybody else (and most contain provisions saying you &lt;em&gt;can't&lt;/em&gt; transfer them) then the user is &lt;em&gt;probably&lt;/em&gt; still authorized to install and use it (e.g., most older license agreements don't contain any limit on how long the license lasts).&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: as I originally said, the situation here isn't really cut and dried. If the site were to be sued and the case were being heard in a US court, I'd guess there would be better than even odds that the court would shut down the site--but honestly, only a &lt;em&gt;little&lt;/em&gt; better than even odds. I wouldn't come as a huge surprise to me at all if the site could successfully defend themselves as being a publicly available archive, and any copyright infringement was the responsibility of the users, not the archive itself.&lt;/p&gt;&#xA;&lt;p&gt;As far as other countries go: in theory, copyright law is fairly uniform between a large number of countries. There are quite a few international agreements (starting from the Berne convention of 1886) about copyrights and copyright law. In reality, however, there's still quite a bit of variation--but I'd say the US tends to favor copyright holders at least as much as almost any country, so if such a suit were brought in another country, the chances of the site being held responsible would be no greater, and in many cases would be much lower.&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-06-11T03:07:50.173" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="814" PostTypeId="2" ParentId="795" CreationDate="2016-06-08T05:54:10.370" Score="18" Body="&lt;p&gt;The limitations in the registers do not make a Vectrex display equivalent to any particular resolution of bitmap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The registers place limits on the resolution at which you can specify positions to move the beam to--that much is absolutely correct. For example, if you decided to draw a dot at each possible position on the screen, you would indeed be limited to specific, discrete positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's not the whole story though. Much of the reason for high resolution on a raster display is to keep lines from looking &quot;jaggy&quot;:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SMuuY.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SMuuY.png&quot; alt=&quot;Jagged diagonal line&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a raster display, the slanted line is made up of discrete pixels at specific positions. Especially with a line like this that's nearly horizontal (or nearly vertical) those discrete steps are quite visible (even on a display with fairly high resolution).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a vector display, you don't get that though. What happens is that you move the beam to a position, turn on the beam, then move it to some other position. The line that's drawn is essentially perfectly straight from the start point to the end point. You don't get a stair-step effect from one to the other at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern graphics hardware has a number of tricks (mostly anti-aliasing of various sorts) to minimize the visibility of these jagged artifacts--but they never really eliminate them like a vector display does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: from one perspective, the Vectrex display has quite low resolution--but from another perspective, its resolution is essentially infinite. It's different enough that there's no resolution of raster display that's really equivalent.&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="2081" LastEditDate="2017-04-05T12:14:58.973" LastActivityDate="2017-04-05T12:14:58.973" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="815" PostTypeId="2" ParentId="778" CreationDate="2016-06-08T07:11:17.943" Score="5" Body="&lt;p&gt;First to answer it: &lt;strong&gt;No, it's not legal.&lt;/strong&gt; Others have already pointed out why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an addition I'd like to point out the usual consequences:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;As for old software, in general ROMs are &lt;strong&gt;tolerated&lt;/strong&gt;, actually even Nintendo doesn't care about, I think, GCN and older.&lt;/li&gt;&#xA;&lt;li&gt;A ROM is &lt;strong&gt;less likely to be tolerated&lt;/strong&gt; if it has been &lt;strong&gt;remastered, or re-released as is, on a up-to-date console&lt;/strong&gt;. For example, now that the first Pokemon editions are available for Virtual Console, you should delete them from your PC.&lt;/li&gt;&#xA;&lt;li&gt;If you, however, &lt;strong&gt;load an emulator on another game engine&lt;/strong&gt;, e.g. the Wii GCN emulator Nintendont on your Wii or Wii U, your &lt;strong&gt;warranty might be voided&lt;/strong&gt; because it's an unauthorized modification.&lt;/li&gt;&#xA;&lt;li&gt;A &lt;strong&gt;modded ROM&lt;/strong&gt;, i.e. a ROM with a substantial difference from all original games existing, is even &lt;strong&gt;more likely to be tolerated&lt;/strong&gt;. As a few well-known examples, I'd like to mention Super Mario Star Road (modded SM64) and Kaizo Mario (modded SMW).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1903" LastActivityDate="2016-06-08T07:11:17.943" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="816" PostTypeId="5" CreationDate="2016-06-08T09:18:04.880" Score="0" Body="&lt;p&gt;For questions regarding the production of video output signals from retrocomputers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;/questions/tagged/display&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;display&amp;#39;&quot; rel=&quot;tag&quot;&gt;display&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-08T09:18:04.880" LastActivityDate="2016-06-08T09:18:04.880" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="817" PostTypeId="4" CreationDate="2016-06-08T09:18:04.880" Score="0" Body="For questions regarding hardware and drivers used for video output." OwnerUserId="276" LastEditorUserId="278" LastEditDate="2016-09-10T16:12:39.347" LastActivityDate="2016-09-10T16:12:39.347" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="818" PostTypeId="5" CreationDate="2016-06-08T10:26:56.677" Score="0" Body="&lt;p&gt;The display formats of retrocomputers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;/questions/tagged/video&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;video&amp;#39;&quot; rel=&quot;tag&quot;&gt;video&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-08T10:26:56.677" LastActivityDate="2016-06-08T10:26:56.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="819" PostTypeId="4" CreationDate="2016-06-08T10:26:56.677" Score="0" Body="For questions regarding the display formats of retrocomputers." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-08T10:26:56.677" LastActivityDate="2016-06-08T10:26:56.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="820" PostTypeId="2" ParentId="696" CreationDate="2016-06-08T11:10:44.970" Score="5" Body="&lt;p&gt;If you want to build CP/M Plus, the second and third links in the &quot;CP/M 3&quot; section at www.cpm.z80.de contain the CP/M 3 source tree and build scripts, for cross-compiling under DRDOS (second link) or UNIX (third link). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of the UNIX one in particular, it should just be a matter of installing &lt;a href=&quot;http://www.seasip.info/Unix/Zxcc/&quot; rel=&quot;noreferrer&quot;&gt;ZXCC&lt;/a&gt; and &lt;a href=&quot;http://www.seasip.info/Unix/Thames/index.html&quot; rel=&quot;noreferrer&quot;&gt;Thames&lt;/a&gt;, unpacking the source tree and typing 'make'.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2016-06-08T11:10:44.970" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="821" PostTypeId="5" CreationDate="2016-06-08T11:53:51.413" Score="0" Body="&lt;p&gt;Retrocomputing formats and configurations of hard disk drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Subjects may include the use of classic drives on either modern or classic computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related &lt;a href=&quot;/questions/tagged/floppy-disk&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;floppy-disk&amp;#39;&quot; rel=&quot;tag&quot;&gt;floppy-disk&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-08T11:53:51.413" LastActivityDate="2016-06-08T11:53:51.413" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="822" PostTypeId="4" CreationDate="2016-06-08T11:53:51.413" Score="0" Body="Hard disk drives: hardware, connection, low-level format and drivers." OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-05-24T10:05:35.170" LastActivityDate="2021-05-24T10:05:35.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="823" PostTypeId="5" CreationDate="2016-06-08T12:46:46.980" Score="0" Body="&lt;p&gt;A membrane keyboard is a computer keyboard whose &quot;keys&quot; are not separate, moving parts, as with the majority of other keyboards, but rather are pressure pads that have only outlines and symbols printed on a flat, flexible surface.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T12:53:24.547" LastActivityDate="2016-06-08T12:53:24.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="824" PostTypeId="4" CreationDate="2016-06-08T12:46:46.980" Score="0" Body="For questions about membrane keyboards as hardware devices." OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-10T18:12:23.850" LastActivityDate="2016-09-10T18:12:23.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="825" PostTypeId="5" CreationDate="2016-06-08T12:49:51.450" Score="0" Body="&lt;p&gt;Magnetic tape data storage is a system for storing digital information on magnetic tape using digital recording.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T12:53:10.640" LastActivityDate="2016-06-08T12:53:10.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="826" PostTypeId="4" CreationDate="2016-06-08T12:49:51.450" Score="0" Body="for questions about the magnetic tape storage format" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T12:53:33.563" LastActivityDate="2016-06-08T12:53:33.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="827" PostTypeId="5" CreationDate="2016-06-08T12:50:47.247" Score="0" Body="&lt;p&gt;The HxC Floppy Emulator software allows to create a virtual FAT12 (Atari ST/ MS DOS) floppy disk containing files present in a PC folder.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="3748" LastEditDate="2018-11-13T11:54:01.353" LastActivityDate="2018-11-13T11:54:01.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="828" PostTypeId="4" CreationDate="2016-06-08T12:50:47.247" Score="0" Body="for questions about HxC Floppy Emulator usage and hardware" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T12:53:29.517" LastActivityDate="2016-06-08T12:53:29.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="829" PostTypeId="5" CreationDate="2016-06-08T12:53:05.340" Score="0" Body="&lt;p&gt;Also known as the iAPX 286 or Intel 286, the 80286 was the first 8086 based CPU with separate, non-multiplexed, address and data buses and also the first with memory management and wide protection abilities.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T12:53:17.517" LastActivityDate="2016-06-08T12:53:17.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="830" PostTypeId="4" CreationDate="2016-06-08T12:53:05.340" Score="0" Body="For questions about the Intel 80286 16-bit microprocessor" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-23T18:05:09.453" LastActivityDate="2016-09-23T18:05:09.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="831" PostTypeId="5" CreationDate="2016-06-08T12:55:39.233" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/floppy-disk&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;floppy-disk&amp;#39;&quot; rel=&quot;tag&quot;&gt;floppy-disk&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T13:40:03.457" LastActivityDate="2016-06-08T13:40:03.457" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="832" PostTypeId="4" CreationDate="2016-06-08T12:55:39.233" Score="0" Body="for questions about Apple's Disk II Floppy Disk Subsystem" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T13:40:07.877" LastActivityDate="2016-06-08T13:40:07.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="833" PostTypeId="5" CreationDate="2016-06-08T12:57:05.360" Score="0" Body="&lt;p&gt;For general DOS questions, use the &lt;a href=&quot;/questions/tagged/ms-dos&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;ms-dos&amp;#39;&quot; rel=&quot;tag&quot;&gt;ms-dos&lt;/a&gt; tag.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T13:39:58.517" LastActivityDate="2016-06-08T13:39:58.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="834" PostTypeId="4" CreationDate="2016-06-08T12:57:05.360" Score="0" Body="for questions about the Apple DOS operating system used on the Apple II series of microcomputers" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-08T13:39:52.110" LastActivityDate="2016-06-08T13:39:52.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="835" PostTypeId="2" ParentId="773" CreationDate="2016-06-08T12:57:17.483" Score="18" Body="&lt;p&gt;I've confirmed that mcleod_ideafix's method is reliable for regular tape images. Here is a shell script to do (effectively) the same thing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/bin/bash&#xA;# wav2differential.sh - convert mono game tape audio to 2× stereo&#xA;# usage:   wav2differential.sh infile.wav&#xA;#          (creates  infile-differential.wav)&#xA;# scruss - 2016-06-07&#xA;# method by ‘mcleod_ideafix’; many thanks / greetz&#xA;#   — https://retrocomputing.stackexchange.com/a/774/439&#xA;&#xA;base=&quot;${1%.wav}&quot;&#xA;sox -q --norm=-3 &quot;$1&quot; -b 16 &quot;${base}-n.wav&quot;&#xA;sox -q  &quot;${base}-n.wav&quot; &quot;${base}-ni.wav&quot; vol -1.0&#xA;sox -q  --norm=-0.1 -M -c 1 &quot;${base}-n.wav&quot; -c 1 &quot;${base}-ni.wav&quot; &quot;${base}-differential.wav&quot;&#xA;rm -f  &quot;${base}-n.wav&quot; &quot;${base}-ni.wav&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Ultimately I'd like to encode these as MP3s, tag them properly, and add loading screens as cover art. But that can come later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What this script does&lt;/strong&gt; — for people who might want to port it to systems without the Bash shell. Assume the script has been called with an argument &lt;em&gt;game.wav&lt;/em&gt;, a mono audio file of the game loader:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;set the variable &lt;em&gt;base&lt;/em&gt; to the value &lt;em&gt;game&lt;/em&gt;; that is, the base name of the file argument, stripped of its file extension. I'll assume that the variable has been substituted from here on&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;create a temporary mono audio file &lt;em&gt;game-n.wav&lt;/em&gt; from &lt;em&gt;game.wav&lt;/em&gt; with the volume set to -3 dB (&lt;code&gt;--norm=-3&lt;/code&gt;) with 16-bit samples (&lt;code&gt;-b 16&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;create a temporary mono audio file &lt;em&gt;game-ni.wav&lt;/em&gt; from &lt;em&gt;game-n.wav&lt;/em&gt; with the samples inverted (&lt;code&gt;vol -1.0&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;merge (&lt;code&gt;-M&lt;/code&gt;) the two mono temporary files &lt;em&gt;game-n.wav&lt;/em&gt; and &lt;em&gt;game-ni.wav&lt;/em&gt; into a stereo output file &lt;em&gt;game-differential.wav&lt;/em&gt;, correcting the peak volume to be -0.1 dB, or just below clipping (&lt;code&gt;--norm=-0.1&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;remove the temporary files &lt;em&gt;game-n.wav&lt;/em&gt; and &lt;em&gt;game-ni.wav&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;-q&lt;/code&gt; sox option I used throughout is just to make sox quiet: it tends to create lots of text output that you don't really need.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2017-11-20T14:04:28.763" LastActivityDate="2017-11-20T14:04:28.763" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="836" PostTypeId="5" CreationDate="2016-06-08T15:06:07.610" Score="0" Body="&lt;p&gt;Regarding retrocomputing Operating Systems in general.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For questions regarding a specific OS, please use the tag appropriate for that OS.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-12-21T13:04:58.047" LastActivityDate="2016-12-21T13:04:58.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="837" PostTypeId="4" CreationDate="2016-06-08T15:06:07.610" Score="0" Body="For general questions regarding operating systems on retrocomputers." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-12-21T13:04:58.047" LastActivityDate="2016-12-21T13:04:58.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="838" PostTypeId="2" ParentId="775" CreationDate="2016-06-08T15:07:44.133" Score="6" Body="&lt;p&gt;MSDN always uses the key 335-XXXXXX6 for legacy software which works for old visual studio &amp;amp; windows 95/98 editions. I just checked and VB6 still has the same key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think I ever remember typing other key back at the time (and don't forget internet access was a very new thing) I don't remember if it even came with a SLIP/PPP driver at the time.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2016-06-08T15:07:44.133" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="839" PostTypeId="2" ParentId="638" CreationDate="2016-06-08T15:09:09.477" Score="3" Body="&lt;p&gt;Polymers and flame retardant, perhaps. Me too I'm skeptical about added perfumes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Europe since 2006 some chemicals, like PBB and PBDE retardants, are banned from electronics manufacturing (2002 &lt;a href=&quot;https://en.wikipedia.org/wiki/Restriction_of_Hazardous_Substances_Directive&quot; rel=&quot;nofollow&quot;&gt;ROHS&lt;/a&gt; directive) and electronics trade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Equipment manufactured in prior times - much more before the second half of the nineties - smells today (and smelled at the time) very &quot;different&quot; to me. Is this due to the power of suggestion?&lt;/p&gt;&#xA;" OwnerUserId="1923" LastEditorDisplayName="user12" LastEditDate="2016-06-08T15:45:08.943" LastActivityDate="2016-06-08T15:45:08.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="840" PostTypeId="2" ParentId="654" CreationDate="2016-06-08T19:31:46.667" Score="-1" Body="&lt;p&gt;I had an old TI Basic computer (Texas Instruments) and remember always using the LET statement.  I recall that I was mostly copying BASIC programs from a textbook and since the textbook used the LET statement I did too for consistency sake. &lt;/p&gt;&#xA;" OwnerUserId="1933" LastActivityDate="2016-06-08T19:31:46.667" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="842" PostTypeId="2" ParentId="476" CreationDate="2016-06-08T20:09:09.870" Score="3" Body="&lt;p&gt;My very first computer was a TI Basic (Texas Instruments).  Great little machine, came with cartridges you could plug in to play games.  When you first booted up you were in Basic.  I remember a few years later getting a Commodore 64 and that the instructions booklet that came with it had lots of different BASIC commands.  They also included a bunch of programs you could just type in and save.  These two machines were very different.  The Commodore had a 5&quot; floppy drive while the TI had a cassette tape player as a drive.  I think a lot of the differences in hardware probably drove the different versions of BASIC.  &lt;/p&gt;&#xA;" OwnerUserId="1933" LastActivityDate="2016-06-08T20:09:09.870" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="843" PostTypeId="2" ParentId="301" CreationDate="2016-06-08T20:29:50.913" Score="3" Body="&lt;p&gt;You might want to check this site out. It appears there are a bunch of utilities that help &quot;clean&quot; the sound, the fact that these exist probably mean that these UEF files are especially sensitive to signal/noise issues. &#xA;&lt;a href=&quot;http://www.retroisle.com/others/acornelectron/software.php&quot; rel=&quot;nofollow&quot;&gt;http://www.retroisle.com/others/acornelectron/software.php&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1933" LastActivityDate="2016-06-08T20:29:50.913" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="844" PostTypeId="1" CreationDate="2016-06-09T00:37:55.823" Score="10" ViewCount="403" Body="&lt;p&gt;Commodore 64 has a known bug which doesn't allow to use tape drive together with a 1581 drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, in C64 the SRQ (Serial ReQuest) line is connected between IEC bus, CIA chip and the tape drive, burst mode drives (such as 1581) hang when both device in question and tape drive are connected.&#xA;The bug does not affect older drives such as 1541 or 1571.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C128 has this bug fixed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any hardware fix that can resolve the problem in C64 ?&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-06-11T12:39:03.040" LastActivityDate="2016-06-11T12:39:03.040" Title="Is there any existing hardware mod for C64 to decouple tape drive from IEC (1581 drive collision)?" Tags="&lt;commodore-64&gt;&lt;cassette-tape&gt;&lt;disk-drive&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="845" PostTypeId="1" CreationDate="2016-06-09T04:00:07.153" Score="9" ViewCount="1509" Body="&lt;p&gt;I would like to save and load BASIC programs with my TI-99/4A.  The TI-99/4A can be connected to a cassette recorder for this purpose.  Buying a cassette recorder and cassette tapes seems unnecessary by modern means.  Is it possible to use the official TI Dual Cassette adapter to load and save data to a smartphone or other modern digital recorder/playback device?  &lt;/p&gt;&#xA;" OwnerUserId="1937" LastEditorUserId="276" LastEditDate="2018-09-13T15:39:55.583" LastActivityDate="2020-09-07T15:12:35.917" Title="Is it possible to use a TI-99/4A cassette cable with Digital Audio devices?" Tags="&lt;cassette-tape&gt;&lt;data-transfer&gt;&lt;digital-audio&gt;&lt;ti-99&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="846" PostTypeId="2" ParentId="844" CreationDate="2016-06-09T05:28:06.507" Score="6" Body="&lt;p&gt;From a quick search, it sounds like the quickest way to solve it is to update the 1581's ROM (see &lt;a href=&quot;http://www.lemon64.com/forum/viewtopic.php?p=558874&amp;amp;sid=cd5ea85b7ca51145c512b470a35091f4&quot;&gt;this thread&lt;/a&gt; on Lemon64) - either by buying JiffyDOS, or finding the newer version of Commodore's own firmware (such as from &lt;a href=&quot;ftp://www.zimmers.net/pub/cbm/firmware/drives/new/1581/index.html&quot;&gt;this page&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="10" LastActivityDate="2016-06-09T05:28:06.507" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="847" PostTypeId="5" CreationDate="2016-06-09T08:27:17.563" Score="0" Body="&lt;p&gt;This tag is for questions that are relevant to several or all microcomputers with 8-bit processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please use specific tags if your question is relevant to a specific machine.&lt;br&gt;&#xA;e.g. &lt;a href=&quot;/questions/tagged/apple-ii&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;apple-ii&amp;#39;&quot; rel=&quot;tag&quot;&gt;apple-ii&lt;/a&gt; , &lt;a href=&quot;/questions/tagged/bbc-micro&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;bbc-micro&amp;#39;&quot; rel=&quot;tag&quot;&gt;bbc-micro&lt;/a&gt; or &lt;a href=&quot;/questions/tagged/c64&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;c64&amp;#39;&quot; rel=&quot;tag&quot;&gt;c64&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-09T08:27:17.563" LastActivityDate="2016-06-09T08:27:17.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="848" PostTypeId="4" CreationDate="2016-06-09T08:27:17.563" Score="0" Body="For generic questions about 8-bit microcomputers.  For specific computers please use the appropriate specific tag." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-09T08:27:17.563" LastActivityDate="2016-06-09T08:27:17.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="849" PostTypeId="1" AcceptedAnswerId="2594" CreationDate="2016-06-09T10:35:45.953" Score="13" ViewCount="441" Body="&lt;p&gt;I acquired a Williams &quot;Earthshaker!&quot; pinball machine several years ago. It came with the version &lt;code&gt;L-1&lt;/code&gt; ROM installed. I noticed that sometimes balls would get stuck in the shelter kick-back-up mechanism for a bit (it seemed it didn't kick a first ball up fast enough if a second ball entered the shelter). This was fixed when I upgraded to ROM &lt;code&gt;L-3&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm now interested in changing to to ROM &lt;code&gt;F-1&lt;/code&gt; which removes a less-than-completely-family-friendly word so I can feel more comfortable tinkering with the machine with my kids. But I can't tell if &lt;code&gt;F-1&lt;/code&gt; is the same as &lt;code&gt;L-3&lt;/code&gt; with just a word removed, or if it is based on a prior version and has some of the older bugs. Is there a changelog available anywhere, or anybody with experience, who can let me know what the differences are between the &lt;code&gt;L-3&lt;/code&gt; version and the &lt;code&gt;F-1&lt;/code&gt; version? Or will I just need to buy the chip with the F-1 version and try it out?&lt;/p&gt;&#xA;" OwnerDisplayName="user616" LastActivityDate="2017-04-15T08:20:41.530" Title="What's the difference between Williams Earthshaker pinball ROMs L-3 and F-1?" Tags="&lt;rom&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="850" PostTypeId="5" CreationDate="2016-06-09T11:22:53.520" Score="0" Body="&lt;p&gt;&lt;strong&gt;Not every gaming question is on-topic.&lt;/strong&gt; Questions acceptable for this site include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Running and operating games that target retro platforms.&lt;/li&gt;&#xA;&lt;li&gt;Retro game development and programming techniques, including how games either overcame or adapted to platform limitations.&lt;/li&gt;&#xA;&lt;li&gt;Retro game bugs and glitches.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Questions about gameplay mechanics, plot, artwork or other ‘content’ of games are better asked at &lt;a href=&quot;https://gaming.stackexchange.com&quot;&gt;Arqade&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-03-12T11:31:04.730" LastActivityDate="2021-03-12T11:31:04.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="851" PostTypeId="4" CreationDate="2016-06-09T11:22:53.520" Score="0" Body="Retro games, both hardware and software-based. NOT EVERY GAMING QUESTION IS ON-TOPIC. See tag wiki for guidance." OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-18T11:00:47.650" LastActivityDate="2021-02-18T11:00:47.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="852" PostTypeId="1" AcceptedAnswerId="857" CreationDate="2016-06-09T13:21:59.153" Score="12" ViewCount="690" Body="&lt;p&gt;The +2A and the +3 versions of the ZX Spectrum, made by Amstrad, had a new banking mode, called &quot;special&quot;. This banking mode is entered by setting bit 0 of port &lt;code&gt;1FFD&lt;/code&gt;. When active, two bits from this port allows the programmer to choose one from four possible schemes (figure taken from &lt;a href=&quot;http://www.worldofspectrum.org/faq/reference/128kreference.htm#Plus3&quot;&gt;http://www.worldofspectrum.org/faq/reference/128kreference.htm#Plus3&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         Bit 2 =0    Bit 2 =0    Bit 2 =1    Bit 2 =1&#xA;         Bit 1 =0    Bit 1 =1    Bit 1 =0    Bit 1 =1&#xA; 0xffff +--------+  +--------+  +--------+  +--------+&#xA;        | Bank 3 |  | Bank 7 |  | Bank 3 |  | Bank 3 |&#xA;        |        |  |        |  |        |  |        |&#xA;        |        |  |        |  |        |  |        |&#xA;        |        |  | screen |  |        |  |        |&#xA; 0xc000 +--------+  +--------+  +--------+  +--------+&#xA;        | Bank 2 |  | Bank 6 |  | Bank 6 |  | Bank 6 |&#xA;        |        |  |        |  |        |  |        |&#xA;        |        |  |        |  |        |  |        |&#xA;        |        |  |        |  |        |  |        |&#xA; 0x8000 +--------+  +--------+  +--------+  +--------+&#xA;        | Bank 1 |  | Bank 5 |  | Bank 5 |  | Bank 7 |&#xA;        |        |  |        |  |        |  |        |&#xA;        |        |  |        |  |        |  |        |&#xA;        |        |  | screen |  | screen |  | screen |&#xA; 0x4000 +--------+  +--------+  +--------+  +--------+&#xA;        | Bank 0 |  | Bank 4 |  | Bank 4 |  | Bank 4 |&#xA;        |        |  |        |  |        |  |        |&#xA;        |        |  |        |  |        |  |        |&#xA;        |        |  |        |  |        |  |        |&#xA; 0x0000 +--------+  +--------+  +--------+  +--------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It is known that this banking scheem was added in order to support CP/M. I can see that the first scheme allows all the address space to be used by programs and data, leaving the screen out of the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the third and/or fourth scheme would allow CP/M (which I assume is resident at the top of the address space) to stay in place while updating the screen. I can see that this might be a bit difficult because once you enter a scheme other than first, you loose any pointer to memory from 0000h to BFFFh, making tasks like outputting a string to be more complex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How did they use this set of schemes to support CP/M?&lt;/li&gt;&#xA;&lt;li&gt;What was the purpose of second scheme?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="105" LastEditorUserId="3290" LastEditDate="2020-05-01T04:57:00.207" LastActivityDate="2020-05-01T04:57:00.207" Title="Why did Amstrad choose such bank combinations for its all-RAM mode in +2A and +3 Spectrum computers?" Tags="&lt;zx-spectrum&gt;&lt;memory-layout&gt;&lt;cp-m&gt;&lt;spectrum-plus-3&gt;&lt;spectrum-plus-2&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="853" PostTypeId="5" CreationDate="2016-06-09T14:18:02.213" Score="0" Body="&lt;p&gt;For questions regarding Read Only Memory as a storage mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Read Only Memory, or ROM, is a data storage mechanism for immutable data. In older machines it was often used to store code such as operating systems or language interpreters, and in later arcade machines was regularly used to store the code and graphics/sound data for games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This tag should be used for questions about decoding, recreating etc. ROM or its data.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="278" LastEditDate="2017-01-04T17:40:10.880" LastActivityDate="2017-01-04T17:40:10.880" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="854" PostTypeId="4" CreationDate="2016-06-09T14:18:02.213" Score="0" Body="For questions about Read Only Memory." OwnerUserId="276" LastEditorUserId="278" LastEditDate="2016-09-10T16:25:09.690" LastActivityDate="2016-09-10T16:25:09.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="855" PostTypeId="1" AcceptedAnswerId="856" CreationDate="2016-06-09T14:22:33.010" Score="15" ViewCount="10097" Body="&lt;p&gt;I have some disc images that run only on &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerPC&quot;&gt;PowerPC&lt;/a&gt;. I've heard a lot about PowerPC being popular back in the day, especially being used with older Apple computers. I don't hear much about them anymore, yet they are used in game consoles such as the Wii and Wii U.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are PowerPC processors still used in desktop/home computers, or has Intel processors taken over? If I wanted to get a PowerPC computer, is there a place I can still get them? Or is the only option to use QEMU emulation?&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorDisplayName="user12" LastEditDate="2016-06-09T14:44:42.790" LastActivityDate="2020-04-17T21:00:22.297" Title="Are PowerPC processors still manufactured and used in desktop computers?" Tags="&lt;restoration&gt;&lt;powerpc&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="856" PostTypeId="2" ParentId="855" CreationDate="2016-06-09T14:38:10.620" Score="17" Body="&lt;p&gt;PowerPC CPUs are still produced, mainly for embedded applications, &lt;em&gt;e.g.&lt;/em&gt; &lt;a href=&quot;http://www.nxp.com/products/microcontrollers-and-processors/power-architecture-processors/mpc5xxx-5xxx-32-bit-mcus/mpc55xx-mcus:MPC5500&quot; rel=&quot;noreferrer&quot;&gt;the Qorivva MPC55xx MCUs&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I'm aware, the only currently-produced (for some value of &quot;produced&quot;) desktop computers using PowerPC processors are Amiga replacements: &lt;a href=&quot;http://www.acube-systems.biz/index.php?page=hardware&amp;amp;pid=7&quot; rel=&quot;noreferrer&quot;&gt;ACube Systems' AmigaOne 500&lt;/a&gt; and &lt;a href=&quot;http://www.a-eon.com/?page=x5000&quot; rel=&quot;noreferrer&quot;&gt;A-EON Technology's AmigaOne X5000&lt;/a&gt;. Nowadays on the desktop it's pretty much all Intel/AMD, with a sprinkling of ARM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Power architecture lives on in IBM's &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_POWER_microprocessors&quot; rel=&quot;noreferrer&quot;&gt;POWER CPUs&lt;/a&gt;, the current iteration of which is the &lt;a href=&quot;https://en.wikipedia.org/wiki/POWER9&quot; rel=&quot;noreferrer&quot;&gt;POWER9&lt;/a&gt;; but they're only available in (expensive, but very, very fast) servers and workstations (such as the &lt;a href=&quot;https://www.raptorcs.com/TALOSII/&quot; rel=&quot;noreferrer&quot;&gt;Talos II&lt;/a&gt; and, of course, a number of IBM servers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should be able to find lots of PowerPC-based Apple computers second-hand, capable of running your discs (assuming the operating system is compatible).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your disc images are for Macintosh-style computers, you could try running them with &lt;a href=&quot;http://wiki.qemu.org/PowerPC&quot; rel=&quot;noreferrer&quot;&gt;QEMU's PowerPC emulator&lt;/a&gt;. For more direct Mac OS on PowerPC emulation, you could also try &lt;a href=&quot;http://pearpc.sf.net/&quot; rel=&quot;noreferrer&quot;&gt;PearPC&lt;/a&gt; or &lt;a href=&quot;http://sheepshaver.cebix.net/&quot; rel=&quot;noreferrer&quot;&gt;SheepShaver&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-04-17T21:00:22.297" LastActivityDate="2020-04-17T21:00:22.297" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="857" PostTypeId="2" ParentId="852" CreationDate="2016-06-09T15:34:34.760" Score="9" Body="&lt;p&gt;The first question is answered in the &lt;a href=&quot;http://www.worldofspectrum.org/Plus3CPMManual/appendix6.html&quot;&gt;+3 CP/M manual&lt;/a&gt; (search for 'Memory Map'): 4-5-6-3 for CP/M bank 0, 0-1-2-3 for CP/M bank 1, and 4-7-6-3 for CP/M bank 2. The arrangement (doubtless by design) is very similar to that used for PCW CP/M, where CP/M banks 2,3,4 etc. are the same as bank 0, except for the 4000-7FFF range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design of CP/M is that programs load at 0100h, and occupy memory up to the base of CP/M. Therefore CP/M (or, in CP/M Plus, at least the 'resident' portion of it) needs to live at the top of memory, and not page itself out when it switches to a different bank. The three configurations used by CP/M were no doubt chosen with this idea in mind: all three have bank 3 in the top 16k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other configuration (4-5-6-7) isn't used by CP/M. It may have been done for symmetry (0-1-2-3 is all uncontended, so 4-5-6-7 is a matching all-contended configuration). Or it may have been included in case there was a requirement for CP/M code or loadable drivers in bank 5 to access the second screen in bank 7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M does character I/O one byte at a time (each character is passed to the BIOS call CONOUT in the C register), so the screen update code doesn't need to access the running program. If areas of memory have to be transferred between banks, this is done in small chunks using a buffer at the top of RAM.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="1912" LastEditDate="2016-06-09T15:43:33.500" LastActivityDate="2016-06-09T15:43:33.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="858" PostTypeId="2" ParentId="852" CreationDate="2016-06-09T18:14:44.213" Score="5" Body="&lt;p&gt;I can't add much to the above answer, except that the additional modes would have been there either because they were a harmless side effect of the primary 64k CP/M mode that would have cost more to mask out than to leave, or they were there to mirror modes in other Amstrad Z80 boxes and help porting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Richard Altwasser may know for sure, but he's run away.&lt;/p&gt;&#xA;" OwnerUserId="1951" LastEditorDisplayName="user12" LastEditDate="2016-06-09T19:49:34.200" LastActivityDate="2016-06-09T19:49:34.200" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="859" PostTypeId="1" AcceptedAnswerId="865" CreationDate="2016-06-09T20:19:33.980" Score="23" ViewCount="10441" Body="&lt;p&gt;I was wondering if it is possible to run 8-bit applications within QEMU. I know that the x86 architecture can run 16-bit applications, but can it also run 8-bit applications?&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="3290" LastEditDate="2020-04-27T08:41:16.040" LastActivityDate="2020-04-27T12:10:42.150" Title="Can x86 processors run 8-bit applications?" Tags="&lt;emulation&gt;&lt;x86&gt;&lt;8-bit-microcomputers&gt;&lt;qemu&gt;" AnswerCount="6" CommentCount="11" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="860" PostTypeId="2" ParentId="855" CreationDate="2016-06-09T20:31:52.710" Score="5" Body="&lt;p&gt;You can run Rosetta (Apples PowerPC support on Intel platforms) on a Intel mac running Snow Leopard.  You can now run Snow Leopard in a VM. That's a lot of hoops to run through, but might be worth it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also &lt;a href=&quot;http://sheepshaver.cebix.net/&quot; rel=&quot;noreferrer&quot;&gt;http://sheepshaver.cebix.net/&lt;/a&gt; but I have no idea how well it works. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The short answer is that your either going to have to find an old mac or emulate.&lt;/p&gt;&#xA;" OwnerUserId="454" LastActivityDate="2016-06-09T20:31:52.710" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="861" PostTypeId="2" ParentId="859" CreationDate="2016-06-09T21:18:16.327" Score="30" Body="&lt;p&gt;The 8086 is source-code compatible with the 8080 (the other way around is not true). This means that most assembly code written for the 8080 can be assembled so that 8086 instructions are emitted. The only exceptions would be self-modifying code or code that relies on interrupts, which are handled differently on both processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, some assemblers, like PASMO, are able to &lt;a href=&quot;http://pasmo.speccy.org/pasmodoc.html#intro&quot;&gt;generate .COM programs for DOS&lt;/a&gt; or CP/M 86 from the same 8080 assembly code. Digital Research also had &lt;a href=&quot;http://www.s100computers.com/Software%20Folder/Assembler%20Collection/Digital%20Research%20XLT86%20Manual.pdf&quot;&gt;XLT86&lt;/a&gt;, a 8080 to 8086 translator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if they were not source code compatible, the x86 architecture has 8-bit registers, and can perform 8-bit loads and stores, and 8-bit ALU operations, so it is capable of running 8-bit applications (understanding that 8-bit applications are those applications that use 8 bit data types, 8 bit operations, and 16 bit addresses)&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-06-09T21:59:00.343" LastActivityDate="2016-06-09T21:59:00.343" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="862" PostTypeId="1" AcceptedAnswerId="875" CreationDate="2016-06-09T21:22:52.993" Score="9" ViewCount="1406" Body="&lt;p&gt;I am creating a black Amiga 500 casing for my retro pi unit. I have already bought the casing, a 1200 keyboard and keyrah unit to convert the keyboard to USB. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have some vinyl dye paint for the plastic, but I also have a quandary regarding the keys. If I dye them black, are there any professional-looking white character transfers/stickers for the a500 keyboard characters available?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or is there another solution to get black keys? I could get an old cd32 keyboard which was black, but the last time I checked eBay they were going for £100 and I'm not paying that much!&lt;/p&gt;&#xA;" OwnerUserId="857" LastEditorUserId="462" LastEditDate="2016-06-10T01:37:37.010" LastActivityDate="2018-09-20T06:26:40.223" Title="Black Amiga 500 Keys" Tags="&lt;amiga&gt;&lt;keyboards&gt;&lt;hardware-mods&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="863" PostTypeId="1" CreationDate="2016-06-09T21:46:54.827" Score="17" ViewCount="1965" Body="&lt;p&gt;I've had an Amiga on a shelf for a long time. Today I took it down and tried to use it but it's not working. There's some basic activity - the power LED illuminates, and there is a video signal - but the screen remains dark and the drives inactive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the most likely causes of failure in old Amigas?&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2016-10-31T10:04:44.317" Title="I've taken my Amiga computer out of storage after several years and it doesn't work. What's the likely cause?" Tags="&lt;amiga&gt;&lt;repair&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="864" PostTypeId="2" ParentId="863" CreationDate="2016-06-09T21:46:54.827" Score="19" Body="&lt;p&gt;First of all you should remove all unnecessary peripherals and cables from the Amiga, in case it is a faulty device that is preventing it from working. All you need is the power cable, display cable, and maybe a mouse. If the Amiga works in this state, then the fault is most likely to be one of the peripherals. But if it still doesn't work, then read on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amiga computers of all models have two particular weaknesses which often appear with age.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first is the capacitors tend to fail as they get old. This can manifest itself as the Amiga showing some signs of life (power LED and video signal) but not booting. I've also heard that poor-quality video and audio can be a symptom of failing capacitors. Amiga models that used SMT - 600, 1200, 4000 and CD32 - will almost certainly have capacitors that are at high risk of leaking given their age (and the not particularly high quality parts that Commodore used).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fix for this is straightforward - replace the capacitors! Those experienced at soldering can do this job themselves, and the replacement parts are relatively cheap. There are some specialist Amiga online stores who often stock capacitor packs for the different models of Amiga. If you have an SMT mainboard and you are not an expert at soldering or you do not have the correct equipment for SMT work, you would be strongly advised to find an Amiga specialist who provides a &quot;recapping&quot; service.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expired capacitors can leak a corrosive fluid which will need cleaning up and may cause damage to the mainboard, so you may find that further repair work is needed. Even if the capacitors haven't leaked and/or your Amiga is working well, if you have an SMT mainboard you would be strongly advised to get the capacitors replaced anyway as they are at high risk of leaking corrosive fluid. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second problem you're likely to see is a leaking battery. Not all Amigas have onboard batteries, but those that did used an NiCd rechargeable battery. When these get old they tend to leak, and this is more likely if it has not been actively used for a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A failing NiCd battery is &lt;strong&gt;bad&lt;/strong&gt; news. They leak a corrosive alkaline which can eat through the traces of the mainboard, and corrode metal parts. The alkaline can cover areas away from the battery, and the corrosion can spread even further - a leaking battery can cause extensive damage. If your Amiga has an NiCd battery you would be advised to remove it immediately! Even if it hasn't leaked &lt;em&gt;yet&lt;/em&gt; it is still a potential problem in the near future. Removing it is a simple as using snips to cut through the metal connections to the mainboard, or even just rocking the battery back-and-forth until the connections shear off. Remember that the battery has corrosive alkaline so protect your hands suitably.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the battery &lt;em&gt;has&lt;/em&gt; leaked, then you should immediately take steps to clean off the corrosive alkaline before the damage gets any worse. A web search for cleaning PCBs should provide some guides to this, but essentially you should use a brush to apply a weak acid (such as vinegar) to the corroded areas of the board (don't be surprised if it starts fizzing - this means that the acid is neutralising the alkaline) followed by rinsing with deionised water and leaving to dry thoroughly. Then you will need to carefully inspect and test for whatever damage the alkaline may have done. Repairing may take some advanced skills. Finally, if you still want to have a working RTC battery, then there are ways to attach a socket for a CR2032 button cell in place of the NiCd battery, which is a much safer alternative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fortunately not all Amigas had onboard batteries - only the &quot;big box&quot; Amigas and the A500+. The basic 500, 600 and 1200 do not have batteries. However RAM expansions such as the A501 may have NiCd batteries and therefore the same problem applies there too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Disclaimer: the above is guidance based on what I have read elsewhere and my own experiences, but it is not expert advice. Proceed with caution before making modifications to your computer.]&lt;/p&gt;&#xA;" OwnerUserId="149" LastEditorUserId="149" LastEditDate="2016-10-31T10:04:44.317" LastActivityDate="2016-10-31T10:04:44.317" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="865" PostTypeId="2" ParentId="859" CreationDate="2016-06-09T21:59:55.787" Score="48" Body="&lt;p&gt;There are several aspects to consider to answer your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;x86&lt;/em&gt; architecture is backwards-compatible with the first CPU of the line, the 8086 (and its sibling, the 8088). What this means is that, when a modern Intel (or AMD) processor boots up, it starts in a mode which is compatible with the 8086 — if the motherboard's BIOS support is good enough, you can still boot MS-DOS on a brand-new PC (albeit not from a floppy disk!). (Presumably you could also boot CP/M-86, but I haven't tried that. Other 16-bit operating systems, such as OS/2, Coherent or Xenix, are more demanding and tend not to work — &lt;a href=&quot;http://virtuallyfun.superglobalmegacorp.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fun with virtualization&lt;/a&gt; goes into the specifics). The 8086 and 8088 are 16-bit CPUs, inasmuch as they process data internally 16 bits at a time. As newer CPUs introduced wider internal data busses, new modes were added to support them, so you get 32-bit binaries and now 64-bit binaries, and it's even possible to mix and match. So a modern, 64-bit &lt;em&gt;x86&lt;/em&gt;-compatible CPU can still run 16-bit binary code, at least in some modes (64-bit mode, or &quot;long mode&quot;, doesn't support real-mode 16-bit code; &lt;a href=&quot;https://en.wikipedia.org/wiki/Virtual_8086_mode#64-bit_and_VMX_support&quot; rel=&quot;nofollow noreferrer&quot;&gt;it's possible to work around this using VT-x&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Running an application doesn't just require CPU support though, it also requires operating system support. So you can't just take a 16-bit DOS or Windows binary and run it on a Linux system, or even on a Windows 10 system — you need some sort of emulation layer, not for the CPU, but for the operating system services and virtualised hardware. This is where tools such as NTVDM, &lt;a href=&quot;http://www.dosbox.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOSBox&lt;/a&gt; or &lt;a href=&quot;http://www.winehq.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wine&lt;/a&gt; come in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would it mean to run an 8-bit binary on an &lt;em&gt;x86&lt;/em&gt; CPU? On the CPU side, the closest 8-bit CPU is the 8080, but the 8086/8088 is different enough that it's not binary-compatible with the 8080; so you can't directly run an 8080 binary on an 8086, let alone on a more modern &lt;em&gt;x86&lt;/em&gt; CPU. On the operating system side, the best you could hope for would be that your application was built for CP/M; so you'd need some sort of CP/M-compatible layer (or perhaps CP/M-86 or DOS which was somewhat backwards-compatible).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/105/mcleod-ideafix&quot;&gt;mcleod_ideafix&lt;/a&gt; points out, the &lt;em&gt;x86&lt;/em&gt; is source-code compatible with the 8080, &lt;em&gt;i.e.&lt;/em&gt; the 8086 supports all the features of the 8080 and the Intel assembler mnemonics for the 8080 can be (in most cases) mechanically converted to equivalent 8086 assembly. But you'd still need to adapt the application to the target operating system, as well as the new target CPU. (Stephen P. Morse's &lt;a href=&quot;http://stevemorse.org/8086history/8086history.doc&quot; rel=&quot;nofollow noreferrer&quot;&gt;8086 history&lt;/a&gt; covers this in more detail.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in summary, you can't take an 8-bit binary and run it directly on an &lt;em&gt;x86&lt;/em&gt; processor. If you're careful, you may be able to rebuild an 8-bit 8080 assembly language program for the 8086, and run it under CP/M-86 or DOS. Thanks to the &lt;em&gt;x86&lt;/em&gt; architecture's support for 8-bit operations, you can write an 8-bit style application (&lt;em&gt;i.e.&lt;/em&gt; using only 8-bit arithmetic and logical operations, but 16-bit pointers) and run it on a 16-bit operating system (the BIOS supports this rather well, as does DOS). But to me this isn't quite the same as the 16-bit and 32-bit support on modern 64-bit systems, because the 16-bit nature of the architecture leaks into its 8-bit support: for example, 8-bit &lt;code&gt;DIV&lt;/code&gt; always divides the 16-bit &lt;code&gt;AX&lt;/code&gt;, which means you can't simply pretend &lt;code&gt;AL&lt;/code&gt; and &lt;code&gt;AH&lt;/code&gt; are separate 8-bit registers unless you avoid &lt;code&gt;DIV&lt;/code&gt;, &lt;code&gt;MUL&lt;/code&gt; etc. entirely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;QEMU itself doesn't emulate any 8-bit CPUs. There are many 8-bit emulators for modern systems though, some including the operating environment — examples include &lt;a href=&quot;http://www.tramm.li/i8080/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stefan Tramm's 8080 CP/M emulator&lt;/a&gt;, the &lt;a href=&quot;http://www.nanochess.org/emulator.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Toledo 8080 emulator&lt;/a&gt;, &lt;a href=&quot;http://www.autometer.de/unix4fun/z80pack/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z80pack&lt;/a&gt;...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-04-27T12:10:42.150" LastActivityDate="2020-04-27T12:10:42.150" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="866" PostTypeId="2" ParentId="845" CreationDate="2016-06-09T22:02:46.120" Score="8" Body="&lt;p&gt;Any cassette tape system which can utilize a standard cassette tape recorder can be plugged into any audio device, with sufficient quality, and will work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can record saved files with any audio recording app and load it back in by playing it back. I know this is regularly done on the Apple II, Sinclair ZX Spectrum, and Tandy Color Computer systems, and surely many others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This cannot be done (at least easily) on Commodore or Atari 8-bit computer systems because the cassette tape recorder has special circuitry which makes it incompatible with standard cassette tape recorders or other audio devices.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2016-06-09T22:02:46.120" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="867" PostTypeId="2" ParentId="855" CreationDate="2016-06-09T22:38:10.907" Score="8" Body="&lt;p&gt;Not a desktop PC, but the &lt;a href=&quot;https://en.wikipedia.org/wiki/Wii_U&quot; rel=&quot;noreferrer&quot;&gt;Nintendo Wii U&lt;/a&gt; is still manufactured and contains a Power PC processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the recently discontinued Xbox 360 and Playstation 3 consoles ran on Power PC too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to get a Power PC computer to run Linux on, you could potentially find an older generation Playstation 3 with older firmware on eBay, and use the &lt;a href=&quot;https://en.wikipedia.org/wiki/OtherOS&quot; rel=&quot;noreferrer&quot;&gt;OtherOS&lt;/a&gt; functionality which was removed in subsequent firmware updates.&lt;/p&gt;&#xA;" OwnerUserId="1955" LastActivityDate="2016-06-09T22:38:10.907" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="868" PostTypeId="1" AcceptedAnswerId="871" CreationDate="2016-06-09T22:47:29.380" Score="7" ViewCount="370" Body="&lt;p&gt;I just replaced the idprom (AKA NVRAM + battery; I used an ST M48T08-100PC1) in my Sun SPARCstation 20. The original one was inside a rectangular holder with a tab on each short end; it had passthrough holes on the inside so the pins of the chip could connect to the motherboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was having trouble getting my system to boot (as far as I can tell, I just needed to wait for it to go through the lengthy POST, since the only output you get during that is keyboard LEDs and terminal output), so I tried inserting the new chip directly into the motherboard (without the enclosure), and I found that it worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is this thing called? And what is it used for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Pictured is the enclosure on the left and the chip on the right.&lt;/em&gt;&lt;a href=&quot;https://i.stack.imgur.com/EdWqt.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EdWqt.jpg&quot; alt=&quot;Mystery enclosure on left; chip on right&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1939" LastActivityDate="2016-06-10T00:44:33.493" Title="What is this (seemingly optional) box around my Sun's idprom chip?" Tags="&lt;hardware&gt;&lt;chip&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="869" PostTypeId="2" ParentId="859" CreationDate="2016-06-09T22:50:34.143" Score="22" Body="&lt;p&gt;A few 16-bit processors can run 8-bit code: the NEC V20 series. The V20 and V30 are the ones you might encounter in a PC. The V20 is a pin-compatible substitute for the 8088, and the V30 for the 8086. These processors have a BRKEM instruction (in Intel's notation it would most likely be 'INTEM') which  switches to the 8080 instruction set and jumps to an interrupt vector. A RETEM instruction would switch back. Some CP/M emulators, such as &lt;a href=&quot;http://cd.textfiles.com/230/EMULATOR/DIVERSE/CPM/22NICE/&quot;&gt;22NICE&lt;/a&gt; could use this mode to virtualise CP/M programs rather than emulating the CPU -- provided the CP/M program only used 8080 instructions, not any of the Z80 extensions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know QEMU does not emulate this aspect of the  V20 / V30, so it wouldn't be possible to run 8-bit programs within mainline QEMU. The QEMU wiki does mention a separate &lt;a href=&quot;http://wiki.qemu.org/Features/Z80&quot;&gt;Z80 fork&lt;/a&gt; that can run Spectrum programs.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2016-06-09T22:50:34.143" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="870" PostTypeId="2" ParentId="855" CreationDate="2016-06-09T22:58:00.883" Score="6" Body="&lt;p&gt;There are single board computers (&quot;SBCs&quot;) available with Power architecture processors that could possibly double as desktop machines, e.g. &lt;a href=&quot;https://www.curtisswrightds.com/products/cots-boards/processor-cards/6u-ppc-sbc/vpx6-185.html&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt; has USB and can apparently be configured with a PCI Express port, which could be used to run a graphics card (although I suspect you'll need a PCI Express 1x graphics card to make it work -- I'm aware that Matrox make one of those; not sure if anyone else does).  Price could be an issue too, as the primary customer of such things is apparently military/aerospace.  But perhaps if you shop around you can find something a little more reasonably priced that can do it as well?&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2016-06-09T22:58:00.883" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="871" PostTypeId="2" ParentId="868" CreationDate="2016-06-09T23:17:16.343" Score="7" Body="&lt;p&gt;Not sure what it is called, but as far as I know it is just a tool that helps in the removal of the chip by allowing you to pull up on the tabs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experience its just much easier to take a screwdriver to the chip socket, so I just removed it on my Sun Ultra 10. (Especially considering where it sits on the board.) Not easy to remove by hand with this installed. Also you could accidentally bend the pins removing it that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, this didn't matter when they were new because you were replacing the chips, but nowadays you will likely be modding the chip to take a CR2032 so that you don't have to find NOS expensive replacements.&lt;/p&gt;&#xA;" OwnerUserId="1957" LastEditorDisplayName="user12" LastEditDate="2016-06-10T00:44:33.493" LastActivityDate="2016-06-10T00:44:33.493" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="872" PostTypeId="1" AcceptedAnswerId="876" CreationDate="2016-06-10T04:04:16.610" Score="13" ViewCount="7499" Body="&lt;p&gt;Apple created a dynamic binary translator called &lt;a href=&quot;https://en.wikipedia.org/wiki/Rosetta_%28software%29&quot;&gt;Rosetta&lt;/a&gt; and bundled it into their OS X operating system.  As of OS 10.7, however, Rosetta was removed, and PowerPC applications are no longer supported on Intel-based boxes running the latest OS X software.  Is there a way to bring Rosetta back?  How can I run PowerPC applications on an Intel Mac?&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2017-08-22T20:46:12.500" Title="How do I run PowerPC Applications on an Intel Mac" Tags="&lt;apple-macintosh&gt;&lt;apple&gt;&lt;intel&gt;&lt;powerpc&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="873" PostTypeId="2" ParentId="795" CreationDate="2016-06-10T05:10:19.053" Score="6" Body="&lt;p&gt;A seldom-appreciated difficulty in emulating vector displays is that they don't necessarily have a well-defined frame rate, and time resolution can be just as important an issue as spacial resolution.  Consider, for example, the effect of drawing two 128-pointed stars--one with lines connecting every 17th point, and one with lines connecting every 15th point, drawing one line on each star millisecond.  Drawing each whole star would take 128ms, but the first star will look like a 15-pointed star redrawn once every 15ms, turning 1/128 rotation each time, while the second will appear as a 17-pointed star redrawn once every 17ms, likewise rotating 1/128 second each time.  On a vector display, both stars can appear to rotate smoothly, but a 60Hz raster display will have trouble capturing the motion nicely.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-06-10T05:10:19.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="874" PostTypeId="2" ParentId="872" CreationDate="2016-06-10T05:44:35.053" Score="3" Body="&lt;p&gt;As far as I know, there's no way to bring Rosetta back - so your only option (providing you have OS X install discs with PPC support), would be to set up &lt;a href=&quot;http://pearpc.sourceforge.net&quot; rel=&quot;nofollow&quot;&gt;PearPC&lt;/a&gt; - which emulates an entire system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, I don't know how well it runs - I only played with an 0.1 a very long time ago, and none of the more recent versions.&lt;/p&gt;&#xA;" OwnerUserId="10" LastActivityDate="2016-06-10T05:44:35.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="875" PostTypeId="2" ParentId="862" CreationDate="2016-06-10T05:47:40.100" Score="4" Body="&lt;p&gt;I may have found a possible solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.4keyboard.com/commodore/586-commodore-commodore-a500-a1200-a1200hd-non-transparent-keyboard-stickers-882798355421.html&quot; rel=&quot;nofollow&quot;&gt;http://www.4keyboard.com/commodore/586-commodore-commodore-a500-a1200-a1200hd-non-transparent-keyboard-stickers-882798355421.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The company above sell black stickers for A1200 keyboard caps. Anyone had any experience with these? &lt;/p&gt;&#xA;" OwnerUserId="857" LastActivityDate="2016-06-10T05:47:40.100" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="876" PostTypeId="2" ParentId="872" CreationDate="2016-06-10T07:43:03.560" Score="14" Body="&lt;p&gt;You can &quot;bring Rosetta back&quot; by installing an older version of Mac OS X which supports it — Tiger, Leopard or Snow Leopard (on the latter it's an optional component). Rosetta was removed from later version for licensing reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have an installation CD for PowerPC Mac OS X, you can use a full-system emulator to run it. Currently it seems your best bet is &lt;a href=&quot;http://wiki.qemu.org/PowerPC&quot;&gt;QEMU&lt;/a&gt;. If your application works on MacOS 9, and you have the appropriate installation media, you could also try &lt;a href=&quot;http://sheepshaver.cebix.net/&quot;&gt;SheepShaver&lt;/a&gt; (which emulates PowerPC Macs but doesn't support Mac OS X). &lt;a href=&quot;http://pearpc.sf.net&quot;&gt;PearPC&lt;/a&gt; is another PowerPC system emulator but I'm not sure how well it works (compared to QEMU).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-06-10T07:43:03.560" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="877" PostTypeId="5" CreationDate="2016-06-10T07:58:55.370" Score="0" Body="&lt;p&gt;Regarding the connection, use, &lt;a href=&quot;/questions/tagged/restoration&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;restoration&amp;#39;&quot; rel=&quot;tag&quot;&gt;restoration&lt;/a&gt; and &lt;a href=&quot;/questions/tagged/maintenance&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;maintenance&amp;#39;&quot; rel=&quot;tag&quot;&gt;maintenance&lt;/a&gt; of mouse peripherals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Includes the use of a modern mouse on old equipment. Use the &lt;a href=&quot;/questions/tagged/touchpad&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;touchpad&amp;#39;&quot; rel=&quot;tag&quot;&gt;touchpad&lt;/a&gt; tag for built-in or retro touchpad devices.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="278" LastEditDate="2017-01-04T18:54:04.837" LastActivityDate="2017-01-04T18:54:04.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="878" PostTypeId="4" CreationDate="2016-06-10T07:58:55.370" Score="0" Body="For questions about the use of a mouse on retrocomputers. For questions about touchpads use the &quot;touchpad&quot; tag instead." OwnerUserId="276" LastEditorUserId="278" LastEditDate="2017-01-04T18:54:04.837" LastActivityDate="2017-01-04T18:54:04.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="879" PostTypeId="2" ParentId="859" CreationDate="2016-06-10T08:43:09.823" Score="7" Body="&lt;p&gt;As mcleod_ideafix pointed out, the x86 architecture is source-compatible with the x80 architecture. This basically means that if you have the original assembly file of a program, you can rougly translate it to x86 bytecode. Of course, you still need some form of assembly file to compile it, but you might have a look at &lt;a href=&quot;https://en.wikipedia.org/wiki/Dynamic_recompilation&quot;&gt;Dynamic Recompilation&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, just executing code isn't everything for an emulated system. In fact, most 8-bit systems will use some form of Memory-mapped I/O or Port-mapped I/O. Of course, there is always the possibility to detect those, and then replace them with a call to a function defined by the emulator. The same goes, for example, for &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80&quot;&gt;Z-80&lt;/a&gt; opcodes, which are used a lot and which are basically incompatible with x86.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real matter, however, is the fact that you wont need recompilation. In fact, most of those systems from the 80's did have clock rates in the 1-5mHz rate. When you run this on a Gigahertz CPU, you would only need a really tiny fraction of the CPU time. Of course, this is a little different when implementing a later system, like some arcade systems, but those doesn't tend to use 8-bit CPU's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be honest, the complexity of using dynamic recompilation to catch all those cases isn't worth the try. Use a good, well tested x80/z80 emulation library, or write your own for the matter, it is much easier, saver, and makes your code also a little bit more portable, in case you would have to port it to a smartphone, for exemple.&lt;/p&gt;&#xA;" OwnerUserId="1965" LastActivityDate="2016-06-10T08:43:09.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="880" PostTypeId="2" ParentId="859" CreationDate="2016-06-10T10:33:20.033" Score="16" Body="&lt;p&gt;There is no such thing as an 8-bit application for the x86 architecture, because the x86 architecture has always been at least 16-bit right from the first generation of x86 processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The x86 does allow access to 8-bit registers, but the code is still 16-bit and the processor is still running as a 16-bit processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, if you're trying to run 8-bit applications for a different architecture (a lot of people use the term &quot;8-bit&quot; generically to refer to old games and applications made for e.g. the BBC Micro, Commodore 64, early Nintendo game systems, and many other classic retrocomputers) then you will need to find an emulator for that system. In that case, your x86 processor is not running the application directly, but is running the emulator application (just like any other application that you run on your x86 processor) which in turn is running the 8-bit application &quot;in software&quot;. You should take a look at MESS if this is what you want.&lt;/p&gt;&#xA;" OwnerUserId="1969" LastActivityDate="2016-06-10T10:33:20.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="881" PostTypeId="2" ParentId="797" CreationDate="2016-06-10T11:20:41.053" Score="5" Body="&lt;p&gt;This is the usual issue faced by abandonware sites. Technically the material hosted is illegal, but the sites usually get around this with a combination of a disclaimer saying &quot;we are not responsible for any of the content hosted on this site&quot; and relying on the fact that most companies aren't going to bother with enforcing the copyright on their old software, and neither are most law enforcement agencies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The latter part is particularly significant, as most companies are more likely to understand the viewpoint of people whose aim is to preserve and enjoy old software than to squeeze money out of people illegally copying software that isn't particularly usable in the modern world and which the company would make exactly zero dollars from as they aren't even selling it anymore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This isn't always the case though, as in some cases (particularly games) the original company (or a modern equivalent, as often the original companies have been bought by other companies or have sold the rights to their older products to another company) have started re-selling old software, sometimes bundled with emulation software to run it on a modern computing system. Some abandonware sites don't host software when this is done, but how the companies feel about illegal copying of the original versions of the software is difficult to assess and probably varies from company to company. This is particularly an issue among die-hard retrocomputing enthusiasts, as often the re-released version of the software is modified slightly (all sorts of reasons, ranging from censoring previously-accepted content to &quot;locking&quot; the software so that it will only run with the bundled emulation software and not on original hardware, or even just changing the title screen with a new copyright date) and some enthusiasts want a more authentic experience and still try to obtain the original version (usually illegally).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, WinWorldPC is most likely illegal but most people don't care what they do with old software and so neither themselves nor you are very likely to get into any trouble. Hosting companies, of course, might have a problem with a site such as WinWorldPC because they don't want to get involved in a legal situation and usually have blanket policies such as &quot;if it's illegal, we don't want it here&quot; and aren't going to be willing to say &quot;if it's illegal but nobody cares about it then we're OK with it&quot;, because if it's illegal then ultimately the responsibility falls on the host for hosting illegal content, should a legal investigator turn up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: WinWorldPC has actually stated on their front page that they will not be hosting Windows XP currently out of respect for Microsoft's position regarding it and its commercial value in today's market. This would go a long way in favour of WinWorldPC should they get involved in a legal case.&lt;/p&gt;&#xA;" OwnerUserId="1969" LastEditorUserId="1969" LastEditDate="2016-06-10T11:25:50.460" LastActivityDate="2016-06-10T11:25:50.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="882" PostTypeId="1" AcceptedAnswerId="934" CreationDate="2016-06-10T18:31:42.370" Score="8" ViewCount="793" Body="&lt;p&gt;Are there any advantages to installing a parallel port in a C1541-family drive and using a parallel cable to a PC to image disks, other than increased speed (i.e. since the standard IEC protocol is serial, one bit at a time)? I got the impression years ago that some nibblers (i.e. very low-level copiers, for things like copy-protected software) &lt;em&gt;only&lt;/em&gt; work with parallel, but I can't reason out why.&lt;/p&gt;&#xA;" OwnerUserId="1939" LastEditorUserId="1939" LastEditDate="2016-06-14T16:08:00.567" LastActivityDate="2016-06-18T10:03:12.653" Title="Advantages to installing a parallel port in a C1541-family drive other than speed" Tags="&lt;hardware&gt;&lt;commodore-64&gt;&lt;disk-drive&gt;&lt;copy-protection&gt;&lt;archival&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="883" PostTypeId="2" ParentId="794" CreationDate="2016-06-10T18:40:43.600" Score="12" Body="&lt;p&gt;The first MSX, the &lt;a href=&quot;https://www.msx.org/wiki/Mitsubishi_ML-8000&quot; rel=&quot;noreferrer&quot;&gt;Mitsubishi &quot;ML-8000&quot;&lt;/a&gt;, was released on October 21&lt;sup&gt;st&lt;/sup&gt;, 1983. Four days later, the second MSX, the Sanyo &quot;MPC-10&quot;, was released.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you mentioned, the earlier SpectreVideo &lt;em&gt;claimed&lt;/em&gt; to be MSX, &lt;a href=&quot;https://en.wikipedia.org/wiki/MSX#Similar_systems&quot; rel=&quot;noreferrer&quot;&gt;but wasn't&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The system most similar to the MSX was the Spectravideo SV-328 home computer (Spectravideo even claimed to be MSX compatible in advertisements before the actual launch of MSX systems, but it was in fact not completely compatible with the MSX).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I also feel it's worthwhile to include a picture of the first issue of MSX magazine (which for some reason features a cigar-smoking horse-man taking a bath in outer space):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/iWE8a.jpg&quot; alt=&quot;msx magazine&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;Source (Japanese): &lt;a href=&quot;http://weekly.ascii.jp/elem/000/000/179/179415/&quot; rel=&quot;noreferrer&quot;&gt;http://weekly.ascii.jp/elem/000/000/179/179415/&lt;/a&gt;&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2016-06-10T18:40:43.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="884" PostTypeId="5" CreationDate="2016-06-10T19:41:57.697" Score="0" Body="&lt;p&gt;Use this tag for retrocomputing questions about the PowerPC hardware or instruction set.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-11T08:55:20.750" LastActivityDate="2016-06-11T08:55:20.750" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="885" PostTypeId="4" CreationDate="2016-06-10T19:41:57.697" Score="0" Body="for questions about PowerPC processors" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-11T08:55:25.593" LastActivityDate="2016-06-11T08:55:25.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="888" PostTypeId="2" ParentId="882" CreationDate="2016-06-11T03:47:58.637" Score="2" Body="&lt;p&gt;For PC connectivity you win absolutely nothing.&#xA;Various devices that allow connecting a 1541 (and others) to PC will still talk IEC to the drive, regardless whether they use USB, serial or parallel to PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two devices that are praised for their data transfer abilities - ZoomFloppy and KryoFlux - the former uses IEC as well but has optional connectors for the drive (and you could use it with a 1541), the latter talks directly to the drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There exists a parallel interface for 1541 that connects to CIA chip in a C64 - that allows for much faster transfer because it bypasses the IEC bus completely.&#xA;But there are no devices on the market that would use such connection to a PC.&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-06-16T21:50:19.640" LastActivityDate="2016-06-16T21:50:19.640" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="889" PostTypeId="2" ParentId="859" CreationDate="2016-06-11T10:43:39.877" Score="7" Body="&lt;p&gt;Some supplemental things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Years ago, I used a program that emulated 8 bit CP/M on 16 bit DOS machines that were not the special NEC V20/V30 nor the dual-CPU AT&amp;amp;T design.  It worked quite well and was not that much slower than the real thing.  And since modern x86_64 CPUs can still run DOS, that program would still work if I could find it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;x86_64 CPUs can run 16 bit code and even virtual-86 code without resorting to the hardware-virtualization extensions.  It is just that due to some historical accidents, Microsoft Windows was written on the assumption that any CPU other than 32 bit x86 wouldn't have any of the PC features, so for no good reason 64 bit Windows lacks support for such things as hardware accelerated full screen command prompts, the fallback 640x480 VGA Driver and the subsystems that run 16 bit x86 programs.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The trick to run 16 bit x86 modes from a long mode x86_64 OS is that ever since the 386, switching the entire CPU to any of its other modes is quick and painless for any OS designer who understands the architecture (rather than just the &quot;suggested&quot; ways to use it).  So to run 16 bit code, a 64 bit OS would need duplicate copies of some of the smaller control tables (GDT, LDT, IDT, but not the page tables), plus mode switching glue code.  Then at any context switch, the OS can freely enter whichever mode supports the code being switched to.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you are looking for modern emulators for classic 8 bit CPUs, you may need to first decide if you are looking for a game focused emulator, a productivity/compatibility code emulator or a research cycle-counting emulator (slow).  Each will do its primary job to the detriment of its ability to do the others.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There are also modern 8 bit CPUs, such as the PIC and AVR CPUs from Microchip Inc.  Most of those have excellent emulation tools as part of their development packages.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1979" LastActivityDate="2016-06-11T10:43:39.877" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="890" PostTypeId="1" AcceptedAnswerId="904" CreationDate="2016-06-11T23:04:00.053" Score="6" ViewCount="1677" Body="&lt;p&gt;I've seen various posts online about Nintendo cartridge dumping.  Two popular posts which come to mind are Thijs Alkemade's &lt;a href=&quot;https://blog.thijsalkema.de/blog/2013/05/14/game-boy-cartridge-dumping-on-a-raspberry-pi-part-1/&quot; rel=&quot;noreferrer&quot;&gt;Game Boy cartridge dumping on a Raspberry Pi&lt;/a&gt; series and NintendoPlayer's &lt;a href=&quot;http://www.nintendoplayer.com/feature/n64/&quot; rel=&quot;noreferrer&quot;&gt;feature&lt;/a&gt; on preserving N64 prototype carts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;current&quot; process to dump an N64 game requires a GameShark Pro and older hardware (a box with a parallel port running Windows XP or below).  I put current in quotes because the guides I've been reading are at least 10 years old.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming I am using a MacBook Pro (or other modern system/microcontroller), what is the feasibility of dumping a Nintendo 64 game using a Raspberry Pi or other tool (possibly an 8 bit Saleae logic analyzer) without having to fall back on older hardware?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-12T01:17:01.803" LastActivityDate="2016-06-12T16:27:06.027" Title="Dumping Nintendo 64 cartridges without a backup device" Tags="&lt;nintendo&gt;&lt;rom&gt;&lt;nintendo-64&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="891" PostTypeId="5" CreationDate="2016-06-12T00:41:44.047" Score="0" Body="&lt;p&gt;QEMU is a generic and open source machine emulator and virtualizer.&lt;/p&gt;&#xA;&lt;p&gt;When used as a machine emulator, QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a different machine (e.g. your own PC). By using dynamic translation, it achieves very good performance.&lt;/p&gt;&#xA;&lt;p&gt;See the &lt;a href=&quot;/questions/tagged/emulation&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;emulation&amp;#39;&quot; rel=&quot;tag&quot;&gt;emulation&lt;/a&gt; tag wiki on guidance as to which emulation questions are on-topic.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2021-05-22T15:48:04.860" LastActivityDate="2021-05-22T15:48:04.860" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="892" PostTypeId="4" CreationDate="2016-06-12T00:41:44.047" Score="0" Body="Running retro software under QEMU, the open source machine emulator and virtualizer. See also the wiki page for the [emulation] tag." OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2021-05-22T15:48:04.860" LastActivityDate="2021-05-22T15:48:04.860" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="893" PostTypeId="5" CreationDate="2016-06-12T00:42:45.020" Score="0" Body="&lt;p&gt;Microsoft BASIC is the foundation product of the Microsoft company. It first appeared in 1975 as Altair BASIC, which was the first BASIC by Microsoft and the first high level programming language available for the Altair 8800 microcomputer.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-12T18:06:39.013" LastActivityDate="2016-06-12T18:06:39.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="894" PostTypeId="4" CreationDate="2016-06-12T00:42:45.020" Score="0" Body="for questions about the Microsoft BASIC interpreter" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-12T18:06:31.823" LastActivityDate="2016-06-12T18:06:31.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="895" PostTypeId="5" CreationDate="2016-06-12T00:44:24.370" Score="0" Body="&lt;p&gt;Digital audio is technology that can be used to record, store, generate, manipulate, and reproduce sound using audio signals that have been encoded in digital form.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-12T18:06:34.950" LastActivityDate="2016-06-12T18:06:34.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="896" PostTypeId="4" CreationDate="2016-06-12T00:44:24.370" Score="0" Body="For questions about digital audio hardware and software" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-10T18:17:20.287" LastActivityDate="2016-09-10T18:17:20.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="897" PostTypeId="5" CreationDate="2016-06-12T00:57:28.557" Score="0" Body="&lt;p&gt;Modifications to hardware traditionally used to push components above and beyond what they were originally designed to do.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-12T18:06:27.260" LastActivityDate="2016-06-12T18:06:27.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="898" PostTypeId="4" CreationDate="2016-06-12T00:57:28.557" Score="0" Body="For questions about modifications to retro hardware." OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-10T18:06:14.200" LastActivityDate="2016-09-10T18:06:14.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="899" PostTypeId="1" AcceptedAnswerId="900" CreationDate="2016-06-12T01:12:06.080" Score="6" ViewCount="1882" Body="&lt;p&gt;A colleague of mine mentioned that in college he wrote a slot machine program on an Intel 8080 using an LCD display.  What kind of display communication protocol existed on the Intel 8080?  How was information sent from the chip to the display?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The display in question was some sort of three 7-segmented LCDs.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="7208" LastEditDate="2019-09-06T04:29:37.907" LastActivityDate="2019-09-06T04:29:37.907" Title="LCD Displays with the Intel 8080" Tags="&lt;8080&gt;&lt;display&gt;&lt;intel&gt;&lt;lcd-display&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="900" PostTypeId="2" ParentId="899" CreationDate="2016-06-12T01:29:52.600" Score="19" Body="&lt;p&gt;The 8080 is not a microcontroller, but a microprocessor, so it had no special provision for LCD displays, as modern microcontroller may have, except maybe for the ability to use packed BCD numbers. It had no in-built host peripherals that would support protocols like RS232 or SPI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't mention what kind of LCD display your college used, so this is only an assumption (and your question may be put on hold precisely due to the lack of information about this) but for the most basic LCD display, a 7-segment display, the software may have used BCD for storing numbers. That way, a number could be easily output from the data bus (8-bit parallel) to a latch &quot;listening&quot; in a I/O port. The output of that latch could be feed a BCD-to-7 segment converter/driver, with in turn would be connected to the display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the protocol would have been 8-bit parallel (the 8080 data bus) with strobe (the signal generated by the address and bus cycle decoding , that is used to open the latch). This would have been work like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, the current machine cycle must be decoded in order to know whether it is a I/O operation, memory operation, stack, instruction fetch, etc. The 8080 didn't have special pins, like the Z80A, to inform the system about the nature of the machine cycle. Instead of that, the 8080 used the SYNC pin to signal the beginning of a machine cycle, whose type would be encoded in the data bus during the time SYNC is active. The 8080 chipset included a machine cycle decoder, the 8212 controller, that was connected to the 8080 as this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oYQtE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oYQtE.png&quot; alt=&quot;Circuit Diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the hardware designer would have to use a 8-bit latch whose enable input would be triggered by certain value present in the lower part of the address bus (or most frequenctly, triggered by having a certain value in some bit of the lower address bus), and the WR signal and the OUT signal from the 8212. This 8 bit value, if packed BCD coded, can feed two 7-segment displays to show two digits.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="276" LastEditDate="2016-06-22T12:21:59.193" LastActivityDate="2016-06-22T12:21:59.193" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="901" PostTypeId="1" AcceptedAnswerId="905" CreationDate="2016-06-12T04:12:01.707" Score="15" ViewCount="6488" Body="&lt;p&gt;As part of the MSDN subscription I just got, I can download MS-DOS 6.22 (wow indeed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3zAmm.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3zAmm.png&quot; alt=&quot;MSDN Screenshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to install it to a VirtualBox VM so I can try old games and viruses (due to viruses, I can't install it to DOSBox- some viruses would infect my actual files too), how can I do this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The file you can download is an .exe SFX file which outputs &lt;a href=&quot;https://gist.github.com/ardaozkal/cb3f5cf69379c3d1c245c65970e7da9f&quot; rel=&quot;noreferrer&quot;&gt;these files&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="65" LastEditorUserId="2056" LastEditDate="2016-07-03T07:06:27.307" LastActivityDate="2016-07-03T07:06:27.307" Title="How can MS-DOS be installed on VirtualBox?" Tags="&lt;emulation&gt;&lt;ms-dos&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="904" PostTypeId="2" ParentId="890" CreationDate="2016-06-12T05:30:07.630" Score="5" Body="&lt;p&gt;N64 uses cartridges pretty differently compared to other platforms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The console itself does not access the program on the cart but rather treats it as a storage device and all access is done via special chip called RCP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Carts also don't have the usual data+address signals available, but rather data and address lines are multiplexed - this means that every nth operation the line contains data and every other contains address of the data (in very simplified terms, in reality data can be read sequentially in batches).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This all means that cartridges actually pretty hard to read without proper hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if you could wire up a raspberryPi - you would need enough data and address lines and work out the communication protocol. Also, the GPIO in PI may not be fast enough to multiplex the data and address lines - you would then need extra hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using another tool such as logic analyser - it would require a lot of signals (I'm not sure how many lines an actual card uses), and then you would need a protocol decoder.&#xA;The biggest challenge here would be reconstructing the cart image file out of such captured data - if it's read in chunks you would need to know how to reorder them etc.&#xA;It's unlikely the cart will be read by N64 in sequence from start to end.&lt;/p&gt;&#xA;" OwnerUserId="367" LastActivityDate="2016-06-12T05:30:07.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="905" PostTypeId="2" ParentId="901" CreationDate="2016-06-12T05:59:19.607" Score="23" Body="&lt;pre&gt;&lt;code&gt;C:\msdos\DISKS\144UPG1.IMG&#xA;C:\msdos\DISKS\144UPG2.IMG&#xA;C:\msdos\DISKS\144UPG3.IMG&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From your listing, I believe these are 1.44 MB images of the installation floppies.  In that case, installation is simple:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Create the virtual machine you intend to install MS-DOS on.&lt;/li&gt;&#xA;&lt;li&gt;In the &quot;Settings&quot; dialog for the VM, select the &quot;Storage&quot; tab.  Click on the &quot;Empty&quot; line below the &quot;Controller: Floppy controller&quot; option.&lt;/li&gt;&#xA;&lt;li&gt;Click on the floppy-disk icon next to the &quot;Floppy Device 0&quot; dropdown menu and select &quot;Choose a virtual floppy disk file&quot; from the menu that appears.&lt;/li&gt;&#xA;&lt;li&gt;Select &lt;code&gt;144UPG1.IMG&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Boot the VM.  It should start up using the virtual floppy as the boot disk.&lt;/li&gt;&#xA;&lt;li&gt;Run the installer: &lt;code&gt;a:\setup&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Follow the prompts.  When you need to switch disks, right-click on the floppy-disk icon at the bottom of your VM window, select &quot;Choose a virtual floppy disk file&quot;, and select the image corresponding to the disk the installer is asking for.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-06-12T05:59:19.607" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="908" PostTypeId="2" ParentId="890" CreationDate="2016-06-12T16:27:06.027" Score="3" Body="&lt;p&gt;I'm not sure how feasible this would be with either a Raspberry Pi-style computer or a logic analyser like the one you mention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One approach I know works, without using old hardware, is to use a Retrode with the appropriate &lt;a href=&quot;https://www.retrode.com/plug-in-adapters/&quot; rel=&quot;nofollow&quot;&gt;adapter&lt;/a&gt;. With that you can even play Nintendo 64 games in an emulator with the original controllers!&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-06-12T16:27:06.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="910" PostTypeId="2" ParentId="901" CreationDate="2016-06-12T18:17:55.257" Score="7" Body="&lt;p&gt;I understand you asked about MS-DOS, but if FreeDOS would be acceptable, the following website has some handy pre-installed VDI images of FreeDOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.lazybrowndog.net/freedos/virtualbox/&quot;&gt;https://www.lazybrowndog.net/freedos/virtualbox/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2016-06-12T18:17:55.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="911" PostTypeId="2" ParentId="406" CreationDate="2016-06-12T20:58:36.607" Score="16" Body="&lt;p&gt;There are games that, through design or mischance, access the ULA using &lt;code&gt;IN 0&lt;/code&gt; -- this tends to cause a crash when run on machines with an Interface 1. For example, there's a bug in Jet Set Willy when it leaves the 'paused' state:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;L8B07:&#xA;        LD      HL,9A00h        ;Restore lowerscreen attributes&#xA;        LD      DE,5A00h&#xA;        LD      BC,100h&#xA;        LDIR                    ;After LDIR, C = 0&#xA;        LD      A,(80DEh)       ;Restore border&#xA;        OUT     (0FEH),A&#xA;L8B17:                          ;Entry point if game was not paused&#xA;        LD      A,(95D1h)       ;(C will equal 0FEh if entered here)&#xA;        CP      0FFH&#xA;        JP      Z,L8C01         ;Death?&#xA;        LD      B,0BFH&#xA;        LD      HL,85E2h&#xA;        IN      A,(C)           ;Oops!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2016-06-12T20:58:36.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="913" PostTypeId="2" ParentId="427" CreationDate="2016-06-13T13:34:28.870" Score="9" Body="&lt;p&gt;The &lt;a href=&quot;http://retro.7-bit.pl/?lang=en&amp;amp;go=projekty&amp;amp;name=rys_mkii&quot;&gt;Ryś MKII adapter&lt;/a&gt; by Retro 7-bit allows connecting USB mice and joysticks/gamepads to the 9-pin Amiga port. It's a true USB device so it's not restricted to PS/2-compatible USB mice like other devices mentioned here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's available from a number of Amiga specialist shops (there's a listing of resellers on the page linked above).&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2016-06-13T13:34:28.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="914" PostTypeId="1" AcceptedAnswerId="1723" CreationDate="2016-06-13T15:53:11.133" Score="12" ViewCount="1660" Body="&lt;p&gt;I can complete the installation of Windows95 (B version) in VirtualBox, but it has a problem installing some of the drivers (see image below). Even when the installation disk is mounted and I click 'OK', it can't seem to find it, and I have to continue the installation without these drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Installing this version of Windows in QEMU, it works just fine and it will install all the drivers, no problem. Also, this only happens with Windows 95B. Windows 95C has no problem with the drivers or installation. &lt;strong&gt;Is there a way I can successfully install the Windows 95B drivers successfully in VirtualBox?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VEpgn.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VEpgn.png&quot; alt=&quot;Screenshot: Error message&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="276" LastEditDate="2016-11-14T15:50:28.270" LastActivityDate="2016-11-22T10:32:25.533" Title="Why can't VirtualBox install drivers for windows 95B?" Tags="&lt;windows-95&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="915" PostTypeId="2" ParentId="914" CreationDate="2016-06-14T03:34:52.277" Score="0" Body="&lt;p&gt;I know what the issue is. It asks for multiple disks (Disk 1, 2, ...18, etc) which I apparently don't have. The reason why Windows 95C doesn't have this issue is because it's all packaged together on one disk, which in that case is the installation disk.&lt;/p&gt;&#xA;" OwnerUserId="1880" LastActivityDate="2016-06-14T03:34:52.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="916" PostTypeId="2" ParentId="901" CreationDate="2016-06-14T03:43:16.293" Score="2" Body="&lt;p&gt;I can't tell from your screenshot if you can download them as .img or .iso's, but if you have a .iso version of MS-DOS, you can create your virtual machine, then go to storage and select the CD icon. Find your .iso file and open/attach it. It should then boot-up when you hit &quot;start&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be necessary to &lt;strong&gt;un-check&lt;/strong&gt; the &quot;Enable VT-x/AMD-V&quot; checkbox under the &quot;System&quot; section in the &quot;Acceleration&quot; tab because you may get an error when running or installing DOS with acceleration. You don't need this option anyway because DOS should run pretty fast on your computer.&lt;/p&gt;&#xA;" OwnerUserId="1880" LastActivityDate="2016-06-14T03:43:16.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="917" PostTypeId="5" CreationDate="2016-06-14T12:46:46.867" Score="0" Body="&lt;p&gt;Microsoft Windows 3.0 was introduced in 1990. It was followed by 3.1 (released 1992) and 3.11 (1993), both also appearing as ‘Windows for Workgroups’ editions. In the Chinese market, version 3.2 was released as well.&lt;/p&gt;&#xA;&lt;p&gt;It provided a GUI front-end to DOS, as well as support for features (such as memory-protected drivers) not available in DOS.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="278" LastEditDate="2020-12-27T17:00:29.757" LastActivityDate="2020-12-27T17:00:29.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="918" PostTypeId="4" CreationDate="2016-06-14T12:46:46.867" Score="0" Body="Microsoft Windows 3.0, 3.10 and 3.11 (including for Workgroups). Use [windows] instead for Windows NT 3.x." OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-17T21:09:50.987" LastActivityDate="2021-02-17T21:09:50.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="919" PostTypeId="1" AcceptedAnswerId="4436" CreationDate="2016-06-14T14:31:32.990" Score="14" ViewCount="903" Body="&lt;p&gt;In the Amstrad CPC464 (and I guess it's the same for CPC664 and 6128), the CRTC and the gate array work together to build the display image: every microsecond, the CRTC puts a memory address and a byte is read, and the gate array receives that byte and converts it to pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following picture displays the CRTC -&gt; memory interface. A 4:1 mux chooses what address bits are seen by the DRAM memory at different times (RAS address from CRTC, CAS address from CRTC, RAS address from CPU, or CAS address from CPU). The control inputs for this mux are &lt;code&gt;CPU ADDR&lt;/code&gt; and &lt;code&gt;CAS ADDR&lt;/code&gt;. Note that one of the inputs to the mux is &lt;code&gt;CCLK&lt;/code&gt;, which is supposed to be a 1 MHz signal, that clocks the whole CRTC chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4v42K.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4v42K.png&quot; alt=&quot;CRTC Circuit Diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, the gate array stops the CPU using the &lt;code&gt;READY&lt;/code&gt; signal. Its data bus is isolated from the memory data bus by using IC114 (controls data flow from CPU to memory) and IC115 (ditto from memory to CPU)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/P89vE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/P89vE.png&quot; alt=&quot;Gate Array Circuit Diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is all I can infer from the CPC schematics, but I have some doubts about how does it all cooperate:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;code&gt;CCLK&lt;/code&gt; signal is surnamed &lt;code&gt;MA0&lt;/code&gt; (&lt;code&gt;CCLK/MA0&lt;/code&gt;) and goes to the mux, as if it were another address, while &lt;code&gt;MA0&lt;/code&gt; from the CRTC also goes to the mux. Which is the purpose of putting &lt;code&gt;CCLK&lt;/code&gt; as a bit address here? &lt;strong&gt;&lt;em&gt;NOTE:&lt;/strong&gt; as I write this question, I'm starting to suspect that the memory access rate could be 1 read every 500 ns, instead of 1 read every 1000 ns, so the gate array have 2 bytes (16 bits) every microsecond, and it is capable of building up to 16 pixels in that time. Am I on the right path about this?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;code&gt;CPU ADDR&lt;/code&gt; signal is also used (although not shown in these figures) as the AY-3-8910 clock signal, labelled &quot;1 MHz&quot;. Is it really a 1 MHz signal. Why didn't they use &lt;code&gt;CCLK&lt;/code&gt; instead, which is also a 1 MHz signal? Or put in in other words: why are there two 1 MHz signals?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How &lt;code&gt;CPU ADDR&lt;/code&gt;, &lt;code&gt;CAS ADDR&lt;/code&gt; &lt;code&gt;244EN&lt;/code&gt; and &lt;code&gt;READY&lt;/code&gt; evolve in time?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="105" LastEditorUserId="278" LastEditDate="2016-06-18T18:22:22.207" LastActivityDate="2017-08-05T02:26:02.690" Title="Memory sharing mechanism in the Amstrad CPC computer" Tags="&lt;cpc&gt;&lt;cpc464&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="920" PostTypeId="1" AcceptedAnswerId="921" CreationDate="2016-06-14T23:43:17.093" Score="16" ViewCount="990" Body="&lt;p&gt;I've seen some small utilities for the ZX Spectrum, such as &lt;a href=&quot;http://wizard.ae.krakow.pl/~jb/qaop/tests.html&quot; rel=&quot;noreferrer&quot;&gt;FUSETEST and MINFO&lt;/a&gt;, that report the number of T-states per frame. I can see these utilities don't rely on ROM checksums or anything like that to find out what machine they are running in (&lt;em&gt;I've tested that by using a FPGA reimplementation of the ZX Spectrum that allows me to dynamically change ULA timings without having to change the entire machine setup, so I can have a 48K Spectrum with a 128K timed ULA, or even a Pentagon timed ULA&lt;/em&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sources for both programs are available at the link provided, but the source code lacks appropiate comments that can explain what the routines do, so I'm lost even with them. I'd say the method may be related to measuring time between interrupts, but i'm not really sure about this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the question is: how do they measure the frame length (in CPU cycles) without resorting to a lookup table with known lengths per machine?&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-06-15T12:27:08.607" LastActivityDate="2017-03-02T00:50:14.793" Title="Measuring frame length on the ZX Spectrum" Tags="&lt;zx-spectrum&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="921" PostTypeId="2" ParentId="920" CreationDate="2016-06-15T04:30:57.837" Score="15" Body="&lt;p&gt;I took a look at how &lt;code&gt;fusetest&lt;/code&gt; does it, but first let me talk about the general theory.  The key is to write a Z-80 subroutine that will run for any given number of T-states (Z-80 parlance for cycles).  With that in hand a simple binary search can get an approximation of the number of T-states per frame.  Wait for the vblank interrupt to trigger.  Now set up the vblank interrupt handler to set a &quot;hit&quot; flag.  Clear the hit flag.  Call your the delay subroutine with some reasonable initial guess and then disable interrupts.  If the &quot;hit&quot; flag is clear then it takes longer than your guess.  Otherwise, your guess is longer than the frame.  Adjust the guess appropriately and try again.  By binary searching the guess you'll quickly get down to a value that is pretty close.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The routine in &lt;code&gt;fusetest&lt;/code&gt; to burns cycles is called &quot;delay&quot;.  I've written a similar routine myself which you can read about here:  &lt;a href=&quot;http://48k.ca/beamhack3.html&quot; rel=&quot;noreferrer&quot;&gt;http://48k.ca/beamhack3.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are simpler approaches if you have some idea how many T-states there can be a frame.  For example, it might be that the vblank can only be every 1/60th of a second (for NTSC displays) or 1/50th a second for PAL.   Getting to within 20 or 30 T-states of the actual number will be more than accurate enough to distinguish between the two which differ by thousands of T-states even at 1 Mhz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Getting the exact count down to a single T-state is more difficult because of jitter.  The fastest Z-80 instructions take 4 T-states.  Luckily, &lt;code&gt;HALT&lt;/code&gt; can be used to wait for an interrupt and it takes 4 T-states to run.  &lt;code&gt;HALT&lt;/code&gt; effectively puts the Z-80 into a tight loop where it will only continue to the next instruction when an interrupt occurs. But an interrupt can't be taken immediately -- it has to wait for the current instruction to finish.  So by the time the Z-80 gets to run we can only know that we're within 0 to 3 T-states of the actually interrupt start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next interrupt will take place during our timing routine which makes matters worse.  It could occur during any instruction in there which could be as many as 12 or 15 cycles depending on what the delay routine does.  The inaccuracy at both ends means a simple search will only get to within 20 or so T-states of the exact time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;fusetest&lt;/code&gt; doesn't completely solve the problem, but it is clever about reducing the jitter on receiving the interrupt to 4 cycles.  What it does first is get the frame time / 256 essentially by incrementing A register every 256 cycles.  When the interrupt comes along A has the count.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using that count it then delays for (A - 1) * 256 cycles and drops into a series of 63 &lt;code&gt;INC A&lt;/code&gt; instructions.  The interrupt will occur sometime during that &quot;ramp&quot; and since A is to to 0 it will give the (frame time % 256) / 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point it then assumes just assumes that the frame time is a multiple of 4 and reports the first count * 256 plus the second count * 4 as the number of T-states per frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Give or take.  If you look at &lt;code&gt;framelength.asm&lt;/code&gt; you'll see it actually reports the count - 0x8000.  This is because there are more than 0x10000 T-states per frame which would inconveniently overflow our 16 bit BC register.  And, now that I think about it, it also assumes there is at least 0x8000 T-states per frame.  There's also a fair bit of fiddling to account for the time taken by the interrupt servicing and the instructions leading up to calling the delays and so on.  Tricky and detailed, to be sure, but straightforward enough.&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2017-03-02T00:50:14.793" LastActivityDate="2017-03-02T00:50:14.793" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="923" PostTypeId="1" CreationDate="2016-06-15T07:53:37.603" Score="10" ViewCount="651" Body="&lt;h1&gt;Context&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The Amstrad CPC 464 has a very stable RGB video output.  By &quot;stable&quot; I mean that the image on the CRT monitor does not move, wiggle, shake in any way.  The electron beam draws every pixel with the same color and intensity on the same spot each time.  (Many other computers at the time (1984) had less pleasing display, sometimes because of noise, often because of composite video output, which causes patterns on alternating lines, sometimes moving.)&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Different context&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I always noticed that when the Amstrad CPC was reading from a cassette tape, the image on the monitor would very slightly wave, somehow like a flag, with a period about one second or a little smaller. The effect is subtle (the displacement may be a fraction of a line width) but real.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not an effect at the scale of one line or a couple of lines.  Rather the whole image appears to wave.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if the 464+ were affected.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;More precisely, how to reproduce&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Turn monitor and computer on (obviously a real one, not any sort of emulator or even hardware reimplementation).&lt;/li&gt;&#xA;&lt;li&gt;If it's a CPC 664 or 6128, issue '|TAPE' to select tape instead of disc.&lt;/li&gt;&#xA;&lt;li&gt;Issue command &lt;code&gt;LOAD&quot;&lt;/code&gt; or &lt;code&gt;CAT&lt;/code&gt; and press Enter.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As soon as the command is entered, a mechanical relay activates, allowing tape motor start and the effect on the display appears.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The effect disappears as soon as the relay deactivates, stopping motor, whatever the reason (program finished or aborted loading, &lt;code&gt;Esc&lt;/code&gt; pressed, whatever).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that the effect appears even if the motor is not actually turning (motor only starts if the user press mechanical &quot;play&quot; button on the tape drive, user can press &quot;stop&quot; at any time to stop the motor).  The relay being activated is enough for the effect to appear.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Considered experiments&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I'm considering the following experiments:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;reproduce in basic conditions (I have CPC464 and a green screen GT65).&lt;/li&gt;&#xA;&lt;li&gt;confirm if relay is enough by starting and stopping tape motor while relay is activated&lt;/li&gt;&#xA;&lt;li&gt;use MP1 SCART adapter plugged to a TV to see if the effect appears on the TV (alas since the effect is typically analog and I no longer have a CRT TV, no effect will probably happen on a digital TV).&lt;/li&gt;&#xA;&lt;li&gt;figure out how to activate the relay through a BASIC or assembly &lt;code&gt;OUT&lt;/code&gt; command, to see if the relay itself is enough, or if effect comes from something else that the ROM does when reading tape&lt;/li&gt;&#xA;&lt;li&gt;with a modern device, record a movie of the screen when stable and when weaving to show the effect&lt;/li&gt;&#xA;&lt;li&gt;(won't have time) process the movie to showcase and measure the effect&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h1&gt;Question: what causes this effect?&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What causes this effect?&lt;/strong&gt; Is it some kind of power distribution change in the computer or monitor when the relay is active? Something that affects signals going out from the computer, or the way the monitor displays them, like flakey sync signals? Is it some kind of hardware priority change to ensure computer stability or something like that? Why does this happen only when tape is active?&lt;/p&gt;&#xA;" OwnerUserId="574" LastEditorUserId="824" LastEditDate="2018-07-12T07:16:53.857" LastActivityDate="2018-07-12T07:16:53.857" Title="Why CPC464 display is less stable while reading from cassette?" Tags="&lt;cassette-tape&gt;&lt;video&gt;&lt;cpc464&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="924" PostTypeId="2" ParentId="923" CreationDate="2016-06-15T08:00:33.143" Score="7" Body="&lt;p&gt;This effect is typically caused by a conflict of interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experience of the CPC specifically is limited, but I've seen this on other machines from this era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most computers of this vintage used interrupts from the video controller chip to feed information to the display.  Analogue displays would provide an interrupt for frame start and often further interrupts for line start.  On interrupt, the CPU would copy a line of data into a buffer for the video controller to feed to the modulated output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the cassette was active, it too will be generating interrupts.  It was unusual for a separate processor to be provided to handle the cassette deck and so the main CPU did the work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cassette hardware would provide interrupts to indicate that buffered data was available to read.  The CPU had to handle this to ensure that data was not lost - the tape wasn't going to stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could mean that occasionally the screen interrupt would be missed and the display would flicker slightly.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-06-15T08:00:33.143" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="925" PostTypeId="5" CreationDate="2016-06-15T10:48:00.067" Score="0" Body="&lt;p&gt;A sprite is a component of a graphical display that intended to be moved about the display.  Usually, but not always, found in games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Questions regarding the application, usage and programming of sprites within graphical systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How does sprite collision detection actually work in a VIC chip?&lt;/li&gt;&#xA;&lt;li&gt;What is the sprite limit on a particular platform?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="276" LastEditorUserId="3748" LastEditDate="2018-11-09T21:17:00.850" LastActivityDate="2018-11-09T21:17:00.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="926" PostTypeId="4" CreationDate="2016-06-15T10:48:00.067" Score="0" Body="For questions regarding graphical techniques using sprites." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-15T10:48:00.067" LastActivityDate="2016-06-15T10:48:00.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="927" PostTypeId="5" CreationDate="2016-06-15T11:51:33.837" Score="0" Body="&lt;p&gt;The first version of the PET (A contrived acronym for Personal Electronic Transactor) was introduced in 1977.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PET used the 6502 processor and was equipped with a cassette recorder, built-in screen and a &quot;chiclet&quot; keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later versions had a more normal QWERTY keyboard layout.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-15T11:51:33.837" LastActivityDate="2016-06-15T11:51:33.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="928" PostTypeId="4" CreationDate="2016-06-15T11:51:33.837" Score="0" Body="Questions regarding the Commodore PET range of microcomputers." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-15T11:51:33.837" LastActivityDate="2016-06-15T11:51:33.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="929" PostTypeId="1" AcceptedAnswerId="930" CreationDate="2016-06-15T16:43:32.267" Score="19" ViewCount="762" Body="&lt;p&gt;I've got this Apple to VGA adapter. I cannot remember what model this is for: it has got a male DB-15 pin connector at one side, and female DE-15 connector at the other side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0ezV4.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0ezV4.jpg&quot; alt=&quot;Female end of adaptor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Hkew7.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Hkew7.jpg&quot; alt=&quot;Male end of adaptor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, it has got a row of 10 microswitches also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I lost the instructions for this adapter long ago, so I'd like to ask, if anyone of you has a similar adapter, what is the purpose of those microswitches and which Apple models this adapter can work with.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="276" LastEditDate="2016-06-21T14:03:48.847" LastActivityDate="2017-02-19T10:44:03.720" Title="Unknown Apple to VGA adapter" Tags="&lt;apple-macintosh&gt;&lt;apple&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="930" PostTypeId="2" ParentId="929" CreationDate="2016-06-15T17:26:58.730" Score="16" Body="&lt;p&gt;I think &lt;a href=&quot;http://www.schneider-electric.us/en/faqs/FA158599/&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; (&lt;a href=&quot;https://web.archive.org/web/20170219090843/http://www.schneider-electric.us/en/faqs/FA158599/&quot; rel=&quot;noreferrer&quot;&gt;on archive.org&lt;/a&gt;) is about that adapter, which it calls the &quot;AR5328 Apple to VGA monitor adapter.&quot; Other sources call it a &quot;Mac to VGA adapter.&quot; It works with the Mac LC &quot;pizza boxes,&quot; Performa, Quadra, etc. The switches are used to configure the adapter for the sync mode supported by the monitor (composite sync, sync on green, separate sync, etc.).&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="417" LastEditDate="2017-02-19T10:44:03.720" LastActivityDate="2017-02-19T10:44:03.720" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="931" PostTypeId="2" ParentId="729" CreationDate="2016-06-16T06:47:11.330" Score="6" Body="&lt;p&gt;Chip checking time! Pull, inspect, and re-seat the 4051s (two of em, the small chips near the center of the board) and the POKEY chip on the motherboard. Hopefully they are socketed and not soldered, I'm not sure how consistent Atari was with those.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that doesn't resolve anything, and since some of the keys &lt;em&gt;do&lt;/em&gt; work, try swapping the two 4051s and see if a whole new group of keys is not working (each controls half the board). If yes, bad ICs. Lucky thing is, they are cheap and CD4051 ICs can be found on ebay and the usual electronics shops. Socket the new chips if they aren't already.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the keyboard itself appears to be bad, &lt;a href=&quot;http://www.best-electronics-ca.com/&quot; rel=&quot;noreferrer&quot;&gt;Best Electronics&lt;/a&gt; and &lt;a href=&quot;http://www.myatari.com/&quot; rel=&quot;noreferrer&quot;&gt;B &amp;amp; C ComputerVisions&lt;/a&gt; sell replacements. &lt;/p&gt;&#xA;" OwnerUserId="1996" LastActivityDate="2016-06-16T06:47:11.330" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="932" PostTypeId="5" CreationDate="2016-06-16T10:24:15.083" Score="0" Body="&lt;p&gt;Use this tag for questions regarding the compilation of source code for retrocomputers: either compilers running on the retrocomputer itself or cross-compilers running on a modern machine.&lt;/p&gt;&#xA;&lt;p&gt;See &lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/questions/519/&quot;&gt;Are programming questions on-topic?&lt;/a&gt; for a related Meta discussion.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-05-24T10:11:09.810" LastActivityDate="2021-05-24T10:11:09.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="933" PostTypeId="4" CreationDate="2016-06-16T10:24:15.083" Score="0" Body="Historical compilers, or modern compilers targeting retro platforms." OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-05-24T10:11:09.810" LastActivityDate="2021-05-24T10:11:09.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="934" PostTypeId="2" ParentId="882" CreationDate="2016-06-17T00:43:20.473" Score="6" Body="&lt;p&gt;Nibblers that are utilizing opencbm on a PC need a faster-than-stock connection to read the GCR encoding in real time.  There are a couple of solutions, the most common of which requires a ZoomFloppy.  To nibble from a 1541 requires a parallel port.  1571 drives are much faster due to better hardware, allowing ZoonFloppy to nibble over serial.&lt;/p&gt;&#xA;" OwnerUserId="260" LastActivityDate="2016-06-17T00:43:20.473" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="935" PostTypeId="5" CreationDate="2016-06-17T09:29:09.080" Score="0" Body="&lt;p&gt;The CPC464 was a highly successful Z80-based microcomputer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It ran under the proprietary AMSDOS operating system but could run CP/M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was fitted with 3&quot; floppy disk drives, a format not widely adopted.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="2067" LastEditDate="2016-07-30T14:03:57.780" LastActivityDate="2016-07-30T14:03:57.780" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="936" PostTypeId="4" CreationDate="2016-06-17T09:29:09.080" Score="0" Body="For questions regarding the Amstrad CPC464 Z80-based microcomputer." OwnerUserId="276" LastEditorUserId="2067" LastEditDate="2016-07-30T14:03:25.560" LastActivityDate="2016-07-30T14:03:25.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="937" PostTypeId="5" CreationDate="2016-06-17T11:24:10.510" Score="0" Body="&lt;p&gt;OS-9 is a UNIX-like OS intended to make full use of the features incorporated in the 6809 processor that represented an advance over earlier processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later versions ran on later processors (e.g. OS-9/68k on the 68000 series and OS-9000 on 80386 and PowerPC.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-17T11:24:10.510" LastActivityDate="2016-06-17T11:24:10.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="938" PostTypeId="4" CreationDate="2016-06-17T11:24:10.510" Score="0" Body="For questions regarding the OS-9 Operating System released in 1979 for the Motorola 6809 processor." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-17T11:24:10.510" LastActivityDate="2016-06-17T11:24:10.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="939" PostTypeId="1" AcceptedAnswerId="940" CreationDate="2016-06-17T13:40:16.437" Score="15" ViewCount="1115" Body="&lt;p&gt;I remember that horrible racket coming from the floppy disk when I first used it after started my CoCo, and that it was called the &amp;quot;Head Banger bug&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I remember that it was due to a quick-n-nasty bit of code by the original designers – but what was the story again?&lt;/p&gt;&#xA;&lt;p&gt;I also remember that there was a &amp;quot;Head Banger bug fix&amp;quot; – but what was it?&lt;/p&gt;&#xA;" OwnerUserId="1980" LastEditorUserId="15334" LastEditDate="2021-01-19T10:11:41.367" LastActivityDate="2021-01-19T10:11:41.367" Title="What is the CoCo &quot;Head Banger bug&quot; and what is the &quot;fix&quot;?" Tags="&lt;color-computer&gt;&lt;bugs&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="940" PostTypeId="2" ParentId="939" CreationDate="2016-06-17T13:40:16.437" Score="14" Body="&lt;p&gt;I posted this question because I had those thoughts, and then spent ages going through multiple dead ends until I finally found it (my Google-fu is on the fritz). So that I don't have to go through that again...&lt;/p&gt;&#xA;&lt;p&gt;According to an article by Marty Goodman in the July 1983 issue of &lt;a href=&quot;http://sparksandflames.com/files/HotCoCo-1983-07.pdf#page=48&quot; rel=&quot;noreferrer&quot;&gt;Hot CoCo&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3&gt;The Head-Banger Bug&lt;/h3&gt;&#xA;&lt;p&gt;You may have noticed that just after power up or after a cold start, when you ask the disk to load a file, the drive will almost always make a very nasty rattling noise before loading the file. By an oversight in the Disk Basic, the software &amp;quot;thinks&amp;quot; that the head is at track 0 at power up. Actually, the head is usually not at track 0, but is wherever it was when you shut down the system. Often this is track 17 (directory track).&lt;/p&gt;&#xA;&lt;p&gt;Because of this, when the software tries to go to track 17 to search for the&#xA;file you asked the disk to load, it &amp;quot;thinks&amp;quot; it is starting at track 0 and&#xA;runs off into the inner edge of the drive. It does recover after banging itself&#xA;against a mechanical stop, but this banging is not good for the drive.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And later on in the article:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You can get around the head-banger bug by typing &amp;quot;EXEC &amp;amp;HDCCG&amp;quot; [sic] after power up and cold starts. This resets the head to track 0.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, it had the nonsense value of &lt;code&gt;&amp;amp;HDCCG&lt;/code&gt;. The mistake was later corrected in the &lt;a href=&quot;http://www.colorcomputerarchive.com/coco/Documents/Magazines/Hot%20CoCo%20(Searchable%20image)/Hot%20Coco%20Vol.%201%20No.%204%20-%20September%201983.pdf#page=12&quot; rel=&quot;noreferrer&quot;&gt;September 1983 issue of Hot CoCo, page 12&lt;/a&gt; to &lt;code&gt;&amp;amp;HD66C&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://roust-it.dk/coco/disk-basic-unravelled.pdf&quot; rel=&quot;noreferrer&quot;&gt;Disk Basic Unravelled&lt;/a&gt; says &lt;code&gt;$D66C&lt;/code&gt; is DSKCON in the 1.0 version of the ROM.  Presumably one would call &lt;code&gt;$D75F&lt;/code&gt; in the 1.1 version of the ROM if the head-banger bug is even in that version.&lt;/p&gt;&#xA;" OwnerUserId="1980" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-06-18T09:48:40.763" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="943" PostTypeId="2" ParentId="882" CreationDate="2016-06-18T10:03:12.653" Score="2" Body="&lt;p&gt;A parallel cable helps to copy special formatted disks with an original drive connected to a C64 or even a PC. The problem is the limited RAM (2 KB) on a 1541 that prevents to store a full track keeping all details of the format. With a parallel cabling it's possible to transfer on the fly of a full track. An example for such a picky format is GEOS with its original disk-set. The gaps between the well-ordered sectors are carrying special information to prove the disks are genuine (sorry, I have just a german reference &lt;a href=&quot;https://www.c64-wiki.de/index.php/GEOS-Kopierschutz&quot; rel=&quot;nofollow&quot;&gt;GEOS-Kopierschutz&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="181" LastActivityDate="2016-06-18T10:03:12.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="944" PostTypeId="1" CreationDate="2016-06-19T00:51:27.607" Score="11" ViewCount="819" Body="&lt;p&gt;I'm trying to run an old MS-DOS program that was written to use VT52 escape codes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some Microsoft knowledge base items (such as &lt;a href=&quot;https://support.microsoft.com/en-us/kb/101875&quot;&gt;Q101875&lt;/a&gt;) refer to a 'third-party console driver' called VT52.SYS. I'm guessing that this added support for VT-52 escape sequences to MS-DOS, in the same way that ANSI.SYS adds support for ANSI escape sequences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know where it could be obtained, or whether it's possible to get VT52 emulation in MS-DOS by other means?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Standalone terminal emulator programs wouldn't be suitable -- like ANSI.SYS, this needs to be a memory resident driver).&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2019-06-24T12:05:00.677" Title="VT52 emulation for MS-DOS?" Tags="&lt;ms-dos&gt;&lt;escape-codes&gt;&lt;vt52&gt;" AnswerCount="6" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="945" PostTypeId="2" ParentId="944" CreationDate="2016-06-19T01:00:23.727" Score="4" Body="&lt;p&gt;I found a copy at PCJS.org, inside an OS/2 development boot floppy: &lt;a href=&quot;http://www.pcjs.org/disks/pcx86/os2/misc/football/87058/&quot; rel=&quot;nofollow&quot;&gt;http://www.pcjs.org/disks/pcx86/os2/misc/football/87058/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2016-06-19T01:00:23.727" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="946" PostTypeId="2" ParentId="944" CreationDate="2016-06-19T12:21:38.890" Score="8" Body="&lt;p&gt;This post appears to contain original .ASM source code for a VT52.SYS (but it may not be the same VT52.SYS you've seen references to).  You would need an assembler (like MASM) to assemble it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20190624115445/http://www.delorie.com/opendos//archives/browse.cgi?p=opendos/2003/12/04/09:58:08&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://web.archive.org/web/20190624115445/http://www.delorie.com/opendos//archives/browse.cgi?p=opendos/2003/12/04/09:58:08&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="-1" LastEditDate="2019-06-24T12:05:00.677" LastActivityDate="2019-06-24T12:05:00.677" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="947" PostTypeId="5" CreationDate="2016-06-20T12:13:56.487" Score="0" Body="&lt;p&gt;For questions regarding how a retro system bootstraps to a startup state, including customisation of boot configuration utilities.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-23T12:33:28.780" LastActivityDate="2021-02-23T12:33:28.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="948" PostTypeId="4" CreationDate="2016-06-20T12:13:56.487" Score="0" Body="Bootstrapping (booting) process, utilities and customisation." OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-23T12:33:28.780" LastActivityDate="2021-02-23T12:33:28.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="949" PostTypeId="1" AcceptedAnswerId="950" CreationDate="2016-06-20T13:16:14.363" Score="13" ViewCount="1935" Body="&lt;p&gt;As a learning exercise, I'm writing an emulator for the 6809 CPU. I'd like to simulate the speed of the CPU. I know the Motorola 6809E runs at 0.895 MHz and 1.79 MHz on the Color Computer 3. How do I figure out how many milli/nano seconds a cycle takes, so know how long of a delay I need on my modern machine?&lt;/p&gt;&#xA;" OwnerUserId="176" LastActivityDate="2016-06-20T13:42:14.247" Title="Calculating the time for a CPU cycle" Tags="&lt;emulation&gt;&lt;color-computer&gt;&lt;6809&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="950" PostTypeId="2" ParentId="949" CreationDate="2016-06-20T13:26:15.177" Score="13" Body="&lt;p&gt;It's one divided by the clock. So for 0.895 MHz divide 1 by 895000 and the answer is 1.117318 micro seconds. for 1.79 Mhz it's 558.6592 nano seconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect however that the clock will be some multiple of NTSC timing (or PAL for European computers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikipedia gives NTSC timing as 3.579545Mhz which divided by four gives 0.89488625Mhz (i.e. nearly your 0.895) with a cycle time of 1.11746045 micro seconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that in practice the timing for all this will not be to anywhere near this sort of accuracy IQD data sheets show that ±10 to ±50ppm is typical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(edit) According to the wikipedia page the CoCo uses a 14.31818 MHz crystal so divide down by either 8 or 16 before calculating.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2016-06-20T13:42:14.247" LastActivityDate="2016-06-20T13:42:14.247" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="951" PostTypeId="5" CreationDate="2016-06-20T13:29:40.133" Score="0" Body="&lt;p&gt;Regarding any retrocomputer marketed as a PDA (Personal Digital Assistant).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A term applied to some handheld computers available during the late 1990s - early 2000s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;/questions/tagged/handheld&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;handheld&amp;#39;&quot; rel=&quot;tag&quot;&gt;handheld&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-20T13:29:40.133" LastActivityDate="2016-06-20T13:29:40.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="952" PostTypeId="4" CreationDate="2016-06-20T13:29:40.133" Score="0" Body="For questions regarding Personal Digital Assistants." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-20T13:29:40.133" LastActivityDate="2016-06-20T13:29:40.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="953" PostTypeId="1" AcceptedAnswerId="954" CreationDate="2016-06-20T17:15:25.907" Score="8" ViewCount="232" Body="&lt;p&gt;The &lt;a href=&quot;https://sourceforge.net/p/nitros9/wiki/Main_Page/&quot; rel=&quot;noreferrer&quot;&gt;NitrOS-9&lt;/a&gt; docs say it is a process based multitasking environment, and that it is a real time OS (RTOS). But I'm not sure if that means it's preemptive (OS takes control away from a program/process to give others time to run) or if the program needs to play nice and relinquish the CPU like you might see in Windows 3.1. &lt;/p&gt;&#xA;" OwnerUserId="176" LastActivityDate="2018-07-28T23:53:41.147" Title="Is NitrOS-9/OS-9 a preemptive multitasking environment?" Tags="&lt;color-computer&gt;&lt;os-9&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="954" PostTypeId="2" ParentId="953" CreationDate="2016-06-20T19:57:25.353" Score="13" Body="&lt;p&gt;Yes, it is pre-emptive.  See:  &lt;a href=&quot;https://sourceforge.net/p/nitros9/wiki/The_Kernel/#multiprogramming&quot;&gt;https://sourceforge.net/p/nitros9/wiki/The_Kernel/#multiprogramming&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, it uses the 60 Hz interrupt to switch between active processes with the same priority.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, some of the Color Computer I/O devices are CPU intensive (e.g., the bit-banger serial port and the floppy drive).  This makes the system rather unresponsive when those devices are in use.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2016-06-20T19:57:25.353" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="955" PostTypeId="1" AcceptedAnswerId="1129" CreationDate="2016-06-20T21:29:23.440" Score="28" ViewCount="2476" Body="&lt;p&gt;When the 3.5&quot; FDD was introduced for the IBM PC and compatibles (or possibly earlier), someone made a decision to make the data cable between the controller and drive unkeyed. This, of course, meant that you could plug it in the wrong way if you weren't paying close attention to which side pin 1 was on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you did plug the cable in the wrong way, two obvious user-observable things happened:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Neither the floppy disk drive nor the controller broke; if you realized the error of your ways in time, all you needed to do was flip the cable over and give it another try, and no harm came of it&lt;/li&gt;&#xA;&lt;li&gt;When the system was powered on, the disk drive's activity light would be continuously illuminated&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also, as I recall (though this has been argued against in response to this question), if you inserted any floppy disk, whether the read-only tab was in the read-only or read/write position, however briefly, while the drive was in this state, then that disk was trashed and basically only good as a coaster afterwards (due to their almost square form factor, floppy disks never made good frisbees).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What was actually going on inside that floppy disk drive, and why?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-02-27T07:58:59.593" LastActivityDate="2017-02-27T07:58:59.593" Title="Why did connecting the IBM PC 3.5&quot; FDD backwards cause the problems it did?" Tags="&lt;hardware&gt;&lt;floppy-disk&gt;&lt;ibm-pc&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="956" PostTypeId="2" ParentId="955" CreationDate="2016-06-20T22:51:12.790" Score="18" Body="&lt;p&gt;According to the standard pinout only even pins are used for actual signals, and all odd pins are used for ground. &#xA;(some floppy drives are actually missing every nth pin or more from the odd row - because there is no need for that many ground pins, this makes very easy to identify which row is ground).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reversing the cable simply grounds everything on the motherboard floppy interface - but since the interface is of &quot;Open Collector&quot; type - that causes no harm to signals coming out of the controller to the drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, digital signals that the floppy controller tries to read would all be seen as binary &quot;0&quot; - this is effectively what grounding them does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though signals are swapped with ground the drive still does get &quot;correct&quot; ground from the power connector - this is how it grounds all other signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Activity light would be illuminated because the drive still does get the power from the 4-pin cable - I'm not sure whether this was on purpose to indicate a problem, it might depend on a drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strike&gt;I've never heard of data corruption caused as a result of the cable - I'm sure the heads don't write anything.&#xA;Physical corruption can't happen either - the heads make contact as designed when the disk is inserted (the head's arm are lowered only then).&lt;/strike&gt; - Corrected as per feedback.&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-06-21T10:51:57.643" LastActivityDate="2016-06-21T10:51:57.643" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="957" PostTypeId="1" CreationDate="2016-06-21T06:32:38.657" Score="10" ViewCount="688" Body="&lt;p&gt;I own an Acorn RiscPC 600 which I picked up from Ebay years ago which apparently works but did not come with a monitor. I purchased a VGA to DVI connector to hook up the computer to my PC desktop monitor but sadly it appears that the RiscPC won't sync with the monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did read that the video sync settings can be changed on the Acorn but as I am not able to raise an image on the LCD monitor, I am kind of in a Catch-22 situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any suggestions on how I can restore video to this fascinating retro computer?&lt;/p&gt;&#xA;" OwnerUserId="2032" LastEditorUserId="276" LastEditDate="2016-12-21T10:38:28.813" LastActivityDate="2016-12-21T10:38:28.813" Title="How can I hook up my Acorn RISC PC 600 to a LCD monitor?" Tags="&lt;video&gt;&lt;acorn&gt;&lt;risc-pc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="958" PostTypeId="2" ParentId="957" CreationDate="2016-06-21T07:53:47.457" Score="11" Body="&lt;p&gt;The RiscPC was Acorn's first to use a separate RAM bank for the video.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was intended that the video drivers would auto-synch to the monitor.  However, there was often a failure to synch, leaving a blank screen.  From your description, this is what you are experiencing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest turning off the auto-synch.  This can be done with the screen blank if you type carefully.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Power the RiscPC on and let it enough time to come up to the command prompt.&lt;br&gt;&#xA;Type the following three commands:  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;*Configure Monitortype 4&lt;br&gt;&#xA;  *Configure Sync 0&lt;br&gt;&#xA;  *Configure Mode 40 &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This should reset the CMOS video settings to a basic VGA mode and give you a visible image on your monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that doesn't work, come back to us.  I may have another suggestion if I can dig my old manuals out the attic.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-06-21T07:53:47.457" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="959" PostTypeId="5" CreationDate="2016-06-21T09:38:02.640" Score="0" Body="&lt;p&gt;The Acorn RiscPC was introduced in 1994 to supersede the Acorn Archimides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RiscPC used the ARM RISC processor under the RiscOS operating system but with extensions to enable the running of IBM PC software.  This was achieved by emulating the Intel processor.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-21T09:38:02.640" LastActivityDate="2016-06-21T09:38:02.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="960" PostTypeId="4" CreationDate="2016-06-21T09:38:02.640" Score="0" Body="For questions regarding the RISC-PC products from Acorn Computers" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-21T09:38:02.640" LastActivityDate="2016-06-21T09:38:02.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="961" PostTypeId="5" CreationDate="2016-06-21T09:52:33.057" Score="0" Body="&lt;p&gt;Palm Computing was a manufacturer of &lt;a href=&quot;/questions/tagged/handheld&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;handheld&amp;#39;&quot; rel=&quot;tag&quot;&gt;handheld&lt;/a&gt; computers or &lt;a href=&quot;/questions/tagged/pda&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;pda&amp;#39;&quot; rel=&quot;tag&quot;&gt;pda&lt;/a&gt; Personal Digital Assistants from 1996.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The company was taken over by Hewlett Packard in 2010.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-21T09:52:33.057" LastActivityDate="2016-06-21T09:52:33.057" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="962" PostTypeId="4" CreationDate="2016-06-21T09:52:33.057" Score="0" Body="For questions regarding the products of Palm Computing." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-21T09:52:33.057" LastActivityDate="2016-06-21T09:52:33.057" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="963" PostTypeId="5" CreationDate="2016-06-21T12:49:33.887" Score="0" Body="&lt;p&gt;The Palm Zire was a low-cost &lt;a href=&quot;/questions/tagged/pda&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;pda&amp;#39;&quot; rel=&quot;tag&quot;&gt;pda&lt;/a&gt; from &lt;a href=&quot;/questions/tagged/palm&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;palm&amp;#39;&quot; rel=&quot;tag&quot;&gt;palm&lt;/a&gt; Palm Computing.  Released in 2002.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-21T12:49:33.887" LastActivityDate="2016-06-21T12:49:33.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="964" PostTypeId="4" CreationDate="2016-06-21T12:49:33.887" Score="0" Body="For questions regarding the Zire range of PDAs from Palm Computing." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-21T12:49:33.887" LastActivityDate="2016-06-21T12:49:33.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="965" PostTypeId="5" CreationDate="2016-06-21T13:45:51.350" Score="0" Body="&lt;p&gt;The memory layout covers the addressing and mapping of memory within a retrocomputer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tag applies to RAM, ROM and memory-mapped I/O.&lt;br&gt;&#xA;Also applicable to paging of memory.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-12-21T13:07:25.873" LastActivityDate="2016-12-21T13:07:25.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="966" PostTypeId="4" CreationDate="2016-06-21T13:45:51.350" Score="0" Body="For questions regarding the layout or mapping of memory in a retrocomputer." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-12-21T13:07:25.873" LastActivityDate="2016-12-21T13:07:25.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="967" PostTypeId="5" CreationDate="2016-06-22T08:11:47.033" Score="0" Body="&lt;p&gt;Regarding portable retrocomputers that can operated in the hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This includes, but is not restricted to, those marketed as a &lt;a href=&quot;/questions/tagged/pda&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;pda&amp;#39;&quot; rel=&quot;tag&quot;&gt;pda&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-22T08:11:47.033" LastActivityDate="2016-06-22T08:11:47.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="968" PostTypeId="4" CreationDate="2016-06-22T08:11:47.033" Score="0" Body="For questions regarding any form of hand held retrocomputer." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-22T08:11:47.033" LastActivityDate="2016-06-22T08:11:47.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="969" PostTypeId="5" CreationDate="2016-06-22T11:13:40.943" Score="0" Body="&lt;p&gt;Regarding the products of the Hewlett Packard corporation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Products including programmable calculators and computers.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-22T11:13:40.943" LastActivityDate="2016-06-22T11:13:40.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="970" PostTypeId="4" CreationDate="2016-06-22T11:13:40.943" Score="0" Body="For questions regarding products of Hewlett Packard." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-22T11:13:40.943" LastActivityDate="2016-06-22T11:13:40.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="972" PostTypeId="1" CreationDate="2016-06-22T11:59:29.600" Score="13" ViewCount="661" Body="&lt;p&gt;I still own my very first computer - a &lt;a href=&quot;http://messui.the-chronicles.org/comp/national.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Panasonic JB 3000&lt;/a&gt;.  The keyboard it came with now has many faulty keys.  It has reached the stage where I can no longer use the computer, because I can't type.  I would like to buy (or possibly even solder up) an adapter which will allow me to use a more modern keyboard with the computer.  Unfortunately the computer and its existing keyboard uses a 6 Pin DIN connector:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vnwzE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vnwzE.jpg&quot; alt=&quot;Panasonic JB-3000 keyboard&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/BNwhM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BNwhM.jpg&quot; alt=&quot;Panasonic JB-3000 Din-6 keyboard connector&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The JB-3000 was released around 1983 and was a PC clone.  However it seems that the IBM-PC it was based off used a 5 Pin DIN for its keyboards.  It also looks like the JB-3000's keyboard doesn't match the layout of the 84 model F keyboard in use with the original IBM-PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Does anyone know anything about these 6 Pin DIN keyboards?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Would it be electrically compatible with a any other type of keyboard, for example the Model F, or the Model M?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is there any way I can adapt another keyboard to run with my JB 3000?&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: This is a cross post from &lt;a href=&quot;https://superuser.com/q/1089935/606851&quot;&gt;SuperUser&lt;/a&gt;, it was suggested I ask here.&lt;/p&gt;&#xA;" OwnerUserId="2043" LastEditorUserId="357" LastEditDate="2017-12-04T11:05:15.430" LastActivityDate="2020-11-27T21:50:10.933" Title="How can I use a modern keyboard with the Panasonic JB 3000?" Tags="&lt;keyboards&gt;&lt;new-hardware-adaptation&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="973" PostTypeId="5" CreationDate="2016-06-22T21:34:02.627" Score="0" Body="&lt;p&gt;Sample questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can I use a JiffyDOS based drive on an unmodified C64/C128?&lt;/li&gt;&#xA;&lt;li&gt;How does the JiffyDOS achieve speed improvement without any actual hardware changes?&lt;/li&gt;&#xA;&lt;li&gt;Will I gain anything if only my computer OR drive (but not the other) has JiffyDOS?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-23T05:56:49.460" LastActivityDate="2016-06-23T05:56:49.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="974" PostTypeId="4" CreationDate="2016-06-22T21:34:02.627" Score="0" Body="JiffyDOS is an alternative DISK ROM for Commodore based computers and drives that aims to improve speed and reliability" OwnerUserId="367" LastEditorUserId="278" LastEditDate="2016-06-23T06:04:44.213" LastActivityDate="2016-06-23T06:04:44.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="975" PostTypeId="1" AcceptedAnswerId="976" CreationDate="2016-06-22T21:56:38.753" Score="16" ViewCount="1955" Body="&lt;p&gt;I used played Spectrum games as a child.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According &lt;a href=&quot;http://scanlines.hazard-city.de/&quot;&gt;http://scanlines.hazard-city.de/&lt;/a&gt; and &lt;a href=&quot;http://www.zxdesign.info/vidresearch.shtml&quot;&gt;http://www.zxdesign.info/vidresearch.shtml&lt;/a&gt;, the Spectrum 48K emitted 50Hz half-resolution full frames, instead of interlaced ones (also the 128K, though some reference hints it could do something sort-of-interlaced).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This suggests that the undrawn scanlines should have been visibly black or at least dimmer - but I don't remember that (blur and ghosting comes to mind rather).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe it was due to the crappy Soviet black/white TV, which might had excessive luminance bleed? What is the truth, did you observe scanlines on the 48K / 128K? If not, why not (regarding the above given technical spec)?&lt;/p&gt;&#xA;" OwnerUserId="2044" LastActivityDate="2020-07-10T20:26:57.983" Title="Did scanlines appear on the ZX Spectrum screen?" Tags="&lt;zx-spectrum&gt;&lt;video&gt;" AnswerCount="6" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="976" PostTypeId="2" ParentId="975" CreationDate="2016-06-23T00:00:36.987" Score="17" Body="&lt;p&gt;This may answer your question. This is my setup: a ZX Spectrum 48K and a 1084 CRT monitor. The Spectrum has been modded to output a composite signal instead of RF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wHMMG.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wHMMG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this is a close-up on the picture the monitor shows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/y4GQR.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y4GQR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yes, the Spectrum generated scanlines, but this effect depends largely on the TV set used. My memories are also of a completely pure white screen, without scanlines or other artifacts, but I think that is just because we used to hook the Spectrum to the family TV, and the distance you normally used that TV with was far enough to have the impression of a scanless white screen. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scanlines happen on CRT screens due to the electron beam actually tracing the scans, left to right, up to down. As the Spectrum had a (almost) progressive video signal, both fields were drawn on the same location and hence, black scans were shown between two lines. The 128K and +2A computers had an even worse (worse = out of norm) signal, which was almost progressive as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Curiously, I also have no memory of RF interference on the screen, when there was actually some of it, and that is just because we used to watch TV and that sort of interference was everywhere, so they passed unnoticed to us. It's many years later, with digital TV and noiseless Scart RGB connections when I have realised how crappy the original TV output was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About TVs averaging odd and even scanlines... well, this monitor doesn't seem to do that. You can clearly see what they call &quot;NTSC lines&quot; followed by &quot;PAL lines&quot;. That is: scans with correct phase (magenta), and below them, scans with opposite phase, which are shown as green (I believe).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iXT9e.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iXT9e.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Between each magenta scan and (green?) scan, you can barely see a small separation, which is the black scanline effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A modern (say LCD) screen doesn't do this anymore. It will show a pure magenta border (well, pure enough for a composite video signal)&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2016-06-23T00:19:56.123" LastActivityDate="2016-06-23T00:19:56.123" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="977" PostTypeId="1" AcceptedAnswerId="980" CreationDate="2016-06-23T05:52:37.280" Score="11" ViewCount="2303" Body="&lt;p&gt;The information I have states that the userport' serial speed is about 1200bps, but there are some carts going up to 9600bps.&#xA;I would imagine that the 1200 is the limit, so I'm wondering how is the 9600 achieved ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I know there are expansion port adapters capable of even higher speeds, even 115200, my question is specifically about user-port ones).&lt;/p&gt;&#xA;" OwnerUserId="367" LastActivityDate="2018-12-11T07:07:45.503" Title="How do serial (user port) adapters achieve speeds above 1200bps in C64?" Tags="&lt;commodore-64&gt;&lt;rs232&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="978" PostTypeId="5" CreationDate="2016-06-23T08:46:58.107" Score="0" Body="&lt;p&gt;Benchmarking is the process of evaluating the performance of a retrocomputer or one of its systems (e.g. Disk) for the purposes of comparison with other similar systems.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T08:46:58.107" LastActivityDate="2016-06-23T08:46:58.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="979" PostTypeId="4" CreationDate="2016-06-23T08:46:58.107" Score="0" Body="For questions regarding the measurement and comparison of performance of retrocomputers." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T08:46:58.107" LastActivityDate="2016-06-23T08:46:58.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="980" PostTypeId="2" ParentId="977" CreationDate="2016-06-23T09:41:23.990" Score="13" Body="&lt;p&gt;The RS232 routines in the ROM of the C64 use port B of the CIA (PB0-PB7 on the userport) to input/output all RS232 signals including Tx and Rx. So these routines don't actually use the shift register capabilities of the CIA, and have to do the shifting, parity calculation and bit-banging in software. That's the reason the speed is limited to about 1200 bps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you connect the Tx and Rx signal instead of port B to the serial port (SP) of each of the two CIAs (SP1 and SP2 on the userport), you can do the shifting etc. in hardware. The driver for this &quot;special&quot; wiring was called &quot;UP9600&quot;. The source for an adapted variant is e.g. &lt;a href=&quot;https://github.com/bozimmerman/Zimodem/blob/master/cbm8bit/src/up9600.asm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; (the original link at jamtronix seems to be dead). Then indeed, as the &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6526_cia.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;CIA datasheet&lt;/a&gt; says, &quot;the maximum usable baud rate is determined only by the line loading&quot;, and 9600 bps were possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the 9600 bps were achieved by using the full capabilities of the hardware that was already present (and probably should have been used by the routines in the ROM in the first place).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of a schematic that used jumpers to allow both kinds of wiring can be found e.g. for the &lt;a href=&quot;http://gglabs.us/node/680&quot; rel=&quot;nofollow noreferrer&quot;&gt;GLINK-LT&lt;/a&gt; User Port RS232 cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, many RS232-USB adapters use TTL levels anyway, so to connect to one of these, one even wouldn't need the level converters.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2018-12-11T07:07:45.503" LastActivityDate="2018-12-11T07:07:45.503" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="981" PostTypeId="5" CreationDate="2016-06-23T09:48:50.903" Score="0" Body="&lt;p&gt;For questions regarding displays specifically in colour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;/questions/tagged/display&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;display&amp;#39;&quot; rel=&quot;tag&quot;&gt;display&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T09:48:50.903" LastActivityDate="2016-06-23T09:48:50.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="982" PostTypeId="4" CreationDate="2016-06-23T09:48:50.903" Score="0" Body="For questions specifically regarding video displays in colour." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T09:48:50.903" LastActivityDate="2016-06-23T09:48:50.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="983" PostTypeId="5" CreationDate="2016-06-23T09:51:07.897" Score="0" Body="&lt;p&gt;For questions specifically regarding LCD flat panel displays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;/questions/tagged/display&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;display&amp;#39;&quot; rel=&quot;tag&quot;&gt;display&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T09:51:07.897" LastActivityDate="2016-06-23T09:51:07.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="984" PostTypeId="4" CreationDate="2016-06-23T09:51:07.897" Score="0" Body="For questions specifically regarding LCD (Liquid Crystal) Displays." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T09:51:07.897" LastActivityDate="2016-06-23T09:51:07.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="985" PostTypeId="5" CreationDate="2016-06-23T11:45:02.647" Score="0" Body="&lt;p&gt;The PDP-6 was a 36-bit computer using Core memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was introduced by the Digital Equipment Corporation &lt;a href=&quot;/questions/tagged/dec&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;dec&amp;#39;&quot; rel=&quot;tag&quot;&gt;dec&lt;/a&gt; in 1963.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T11:45:02.647" LastActivityDate="2016-06-23T11:45:02.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="986" PostTypeId="4" CreationDate="2016-06-23T11:45:02.647" Score="0" Body="For questions regarding the DEC PDP-6 Computer." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T11:45:02.647" LastActivityDate="2016-06-23T11:45:02.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="987" PostTypeId="5" CreationDate="2016-06-23T11:53:00.527" Score="0" Body="&lt;p&gt;Many video terminals, e.g. VT100, used a number of escape sequences in order to control the display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Escape sequences were used to clear the screen, move the cursor, change character highlighting etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later terminals used larger numbers of sequences as a larger number of facilities were provided.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use this tag for questions regarding the content of sequences and their compatability with specific models of terminal.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T11:53:00.527" LastActivityDate="2016-06-23T11:53:00.527" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="988" PostTypeId="4" CreationDate="2016-06-23T11:53:00.527" Score="0" Body="For questions regarding the use of Escape Code sequences to control video terminals." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T11:53:00.527" LastActivityDate="2016-06-23T11:53:00.527" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="989" PostTypeId="5" CreationDate="2016-06-23T11:59:41.077" Score="0" Body="&lt;p&gt;The Electronic Industry Association (EIA) defined the RS232 standard in 1962.  RS232-C, which predominates in computing, in 1969.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The standard has been used ever since to enable interoperability of computer systems and peripherals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use the tag for questions regarding how the standard works, either in general or on a specific retrocomputer or peripheral.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T11:59:41.077" LastActivityDate="2016-06-23T11:59:41.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="990" PostTypeId="4" CreationDate="2016-06-23T11:59:41.077" Score="0" Body="For questions regarding the RS232 serial interface standard - its control and usage." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T11:59:41.077" LastActivityDate="2016-06-23T11:59:41.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="991" PostTypeId="5" CreationDate="2016-06-23T12:30:00.370" Score="0" Body="&lt;p&gt;The VT52 was a CRT-based terminal introduced by the Digital Equipment Corporation &lt;a href=&quot;/questions/tagged/dec&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;dec&amp;#39;&quot; rel=&quot;tag&quot;&gt;dec&lt;/a&gt; in 1975.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It had a monochrome text &lt;a href=&quot;/questions/tagged/display&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;display&amp;#39;&quot; rel=&quot;tag&quot;&gt;display&lt;/a&gt; of 24 rows by 80 columns.&lt;br&gt;&#xA;Connected to a computer via the &lt;a href=&quot;/questions/tagged/rs232&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;rs232&amp;#39;&quot; rel=&quot;tag&quot;&gt;rs232&lt;/a&gt; serial interface, the display was controlled using &lt;a href=&quot;/questions/tagged/escape-codes&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;escape-codes&amp;#39;&quot; rel=&quot;tag&quot;&gt;escape-codes&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VT52 was superseded by the VT100 and other subsequent terminals.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T12:30:00.370" LastActivityDate="2016-06-23T12:30:00.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="992" PostTypeId="4" CreationDate="2016-06-23T12:30:00.370" Score="0" Body="For questions regarding the DEC VT52 Terminal." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T12:30:00.370" LastActivityDate="2016-06-23T12:30:00.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="993" PostTypeId="5" CreationDate="2016-06-23T12:45:12.553" Score="0" Body="&lt;p&gt;The Toshiba Corporation was created in 1938.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a Japanese conglomerate.  Use the tag for questions regarding the retrocomputing products of Toshiba.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T12:45:12.553" LastActivityDate="2016-06-23T12:45:12.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="994" PostTypeId="4" CreationDate="2016-06-23T12:45:12.553" Score="0" Body="For questions regarding the products of the Toshiba Corporation." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T12:45:12.553" LastActivityDate="2016-06-23T12:45:12.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="995" PostTypeId="5" CreationDate="2016-06-23T13:11:14.710" Score="0" Body="&lt;p&gt;The SPARC64 processor was introduced by Fujistu in 1995 and the SPARC64 II the following year.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The processors were designed by HAL Computer Systems.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T13:11:14.710" LastActivityDate="2016-06-23T13:11:14.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="996" PostTypeId="4" CreationDate="2016-06-23T13:11:14.710" Score="0" Body="For questions regarding the SPARC64 range of processors." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T13:11:14.710" LastActivityDate="2016-06-23T13:11:14.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="997" PostTypeId="5" CreationDate="2016-06-23T14:31:55.250" Score="0" Body="&lt;p&gt;For questions regarding whether retrocomputer components and/or peripherals wll work together.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T14:31:55.250" LastActivityDate="2016-06-23T14:31:55.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="998" PostTypeId="4" CreationDate="2016-06-23T14:31:55.250" Score="0" Body="For questions regarding compatibility of retrocomputers and peripherals." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T14:31:55.250" LastActivityDate="2016-06-23T14:31:55.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="999" PostTypeId="5" CreationDate="2016-06-23T14:35:51.270" Score="0" Body="&lt;p&gt;Debugging is the process of removing faults from software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For questions regarding the debugging of software on retrocomputers or debugging of software for retrocomputers on modern equipment.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T14:35:51.270" LastActivityDate="2016-06-23T14:35:51.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1000" PostTypeId="4" CreationDate="2016-06-23T14:35:51.270" Score="0" Body="For questions regarding the debugging of software on or for retrocomputers." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-23T14:35:51.270" LastActivityDate="2016-06-23T14:35:51.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1001" PostTypeId="1" CreationDate="2016-06-23T23:13:37.790" Score="37" ViewCount="3971" Body="&lt;p&gt;Showing my ignorance about hardware here - I noticed there is still a community developing Amiga accelerators cards.&#xA;Giving substantial boost from the original memory for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the processor frequency while faster, aren't significantly faster then the originals processors (nothing that comes close to modern clock-frequencies).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What prevents a 2ghz &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68060&quot; rel=&quot;noreferrer&quot;&gt;Motorola 68060&lt;/a&gt; from being created for example? &lt;strong&gt;*&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it a limitation of the architecture?&lt;br&gt;&#xA;Or is possible, just uneconomical?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;*&lt;/strong&gt; &lt;em&gt;of course speed isn't _just_ about clock frequency, nevertheless it's a factor.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Update: some of the answers focus on new CPU's for older hardware. Creating the new &amp;amp; faster version of an architecture may mean having new motherboard, ram, graphics bus... etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://firebee.org/fb-bin/index&quot; rel=&quot;noreferrer&quot;&gt;Firebee&lt;/a&gt; (entirely new Atari compatibles).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://apollo-accelerators.com&quot; rel=&quot;noreferrer&quot;&gt;Vampire&lt;/a&gt; (new CPU's for Amigas)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2048" LastEditorUserId="276" LastEditDate="2018-01-22T10:19:34.443" LastActivityDate="2020-08-14T07:03:21.253" Title="What prevents faster versions of old architectures from being created?" Tags="&lt;hardware-mods&gt;" AnswerCount="11" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1002" PostTypeId="2" ParentId="1001" CreationDate="2016-06-23T23:42:57.280" Score="19" Body="&lt;p&gt;Nothing stops anyone from creating faster accelerator cards (assuming amiga or Atari ST - the only two platforms allowing for &lt;em&gt;proper&lt;/em&gt; expansion cards), but there would be at least 3 major things to consider:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;CPU's - as far as I know, the fastest &quot;classic&quot; 68k CPU's are about&#xA;60MHz, with some revisions that can go as fast as 80 or even 100MHz.&#xA;For, say 2GHz CPU (or its equivalent in speed) one would have to create their own - most likely in FPGA or better yet - ASIC&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Bus speed and other devices outside of accelerator card, remember that computer's have many more components such as I/O controllers, Video chips and other custom chips (such as blitter) - at some point you would hit performance issues with them&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Timing issues, older computers heavily relied on proper timing on the bus, CPU and other components to ensure proper gameplay, going in with a very fast accelerator would almost certainly break compatibility with some of such products (mostly games)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Other platforms would have different limitations, on some the CPU's are actually &lt;em&gt;static&lt;/em&gt; - so in theory can run with any speed, but you may be limited by memory speed for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FPGA's capable of such high frequencies would be extremely expensive, but this is the way such accelerator cards now go in this direction, examples include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Vampire2, but even then it actually does NOT implement an actual m68k CPU, it has it's own architecture that is compatible with m68k. One reason being that Gunnar von Boehm already had the architecture &lt;em&gt;invented&lt;/em&gt; and designed, and another would be licensing terms from Freescale - if I'm not wrong they didn't even want to talk about giving their m68k implementation to the team.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Chameleon (for commodore 64) and MIST implement CPU in FPGA - the former is kind-of an accelerator card for C64, while the latter is a whole platform implemented in FPGA, capable of mimicking various machines (Amiga, ST, C64 and many others)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Another clone called Minimig may be a minor exception - it uses an actual Freescale CPU, clocked at 7 or 49 MHz (turbo mode), the CPU is static.&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-06-24T12:04:43.893" LastActivityDate="2016-06-24T12:04:43.893" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1003" PostTypeId="2" ParentId="219" CreationDate="2016-06-24T10:23:13.510" Score="5" Body="&lt;p&gt;Just speculating here, but it might have been a product decision to encourage writing code for protected mode. It's also possible it was a combination of technical difficulties and product priorities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU is put into protected mode by setting the PE bit in MSW using the LMSW or LOADALL instructions. Clearing the PE bit has no effect using either of those instructions, thus it is not possible to switch back to real mode. The fact that LOADALL allows undocumented behaviours like &quot;unreal mode&quot; (by loading values into descriptor caches to access memory outside of 1MB) and even allows you to put the CPU into an unusable state by loading nonsensical values, but disallows clearing the PE bit makes it likely it was a deliberate product decision. OTOH, LOADALL is undocumented, so maybe there really was a technical problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just like switching from real to protected mode, going back to real mode is a carefully choreographed dance that needs to make sure all memory accesses go to defined memory locations (especially instruction fetches). The documentation has a strange passage that says &quot;After executing LMSW instruction to set PE, the 80286 must immediately execute an intra-segment JMP instruction to clear the instruction queue of instructions decoded in real address mode&quot; hinting that there is more to it than just setting or clearing a bit somewhere. It probably wasn't completely trivial to implement (not very hard either, but it definitely would have had a cost if you're counting transistors or microcode ops. The 80286 had ~134,000 transistors, and using a couple 100 transistors to implement an unnecessary feature would probably have meant dropping other, deemed more important features). Since they didn't anticipate a need for it, maybe they weren't willing to pay the &quot;silicon tax&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are still ways to get back to real mode by resetting the CPU without restarting the computer. On the PC, this could be done by putting a magical value into a special memory location to prevent the BIOS from reinitializing the computer after a reset, and then causing a reset through the i8042 keyboard controller which would externally reset the CPU, or by generating a triple fault (faulting in a fault handler, usually by invalidating the IDTR and causing an interrupt).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the triple fault is usually much faster. Going through the keyboard controller can take almost a millisecond, the triple fault only a couple hundred microseconds. Even with the triple fault, the reset circuitry is still external, but it doesn't have to be processed by the very slow i8042 (some PCs of the time &quot;short-circuited&quot; the reset bit in the 8042 port to directly reset the CPU without going through the i8042, in that case, there's no noticeable difference).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reasons to switch back to real mode are all due to technical debt, you wouldn't need it in a clean system that's designed for protected mode from the ground up. In reality, people kept writing software for real mode and were unwilling (or unable) to quickly port stuff like device drivers to protected mode, and the 2 don't mix. Maybe Intel was trying to &quot;encourage&quot; people to port their drivers to protected mode by making it necessary, but as we know, this didn't work out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel didn't make that mistake again, and the 80386 fixed the glitch both by allowing mode switches in all directions, and by adding a virtual 8086 mode that was essentially a protected mode that looked like real mode to the application.&lt;/p&gt;&#xA;" OwnerUserId="2049" LastEditorUserId="2049" LastEditDate="2016-06-25T15:38:04.980" LastActivityDate="2016-06-25T15:38:04.980" CommentCount="60" ContentLicense="CC BY-SA 3.0" />
  <row Id="1004" PostTypeId="2" ParentId="208" CreationDate="2016-06-24T10:52:27.057" Score="6" Body="&lt;p&gt;There are some other emulators that might work better than Basilisk II depending on what exactly you need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/projects/cockatrice/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cockatrice&lt;/a&gt; is a fork of Basilisk II. It has better networking, sound, and support for SCSI disks, but is missing some other features (don't know which ones) because it's based on an old version of Basilisk II. Like Basilisk II it does not emulate most of the hardware, but relies on ROM patches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.hampa.ch/pce/pce-macplus.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCE&lt;/a&gt; can emulate a Mac 128K/512K/Plus/SE or Mac Classic, but not a Quadra.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.mess.org/mess/drivers/mac&quot; rel=&quot;nofollow noreferrer&quot;&gt;MESS&lt;/a&gt; can also emulate a various models (including Mac IIci and LCIII) but again not the Quadra.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://gryphel.com/c/minivmac/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mini vMac&lt;/a&gt; emulates a Mac Plus and Mac II. It emulates all hardware except for the floppy drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/pruten/Shoebill/wiki/Getting-Started&quot; rel=&quot;nofollow noreferrer&quot;&gt;Shoebill&lt;/a&gt; emulates enough of a Mac II to run A/UX (it does not run Mac OS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PCE, MESS, and Mini vMac have more faithful emulation than Basilisk or Cockatrice, but they don't emulate later models. Shoebill was specifically made to run A/UX and doesn't run anything else.&lt;/p&gt;&#xA;" OwnerUserId="2049" LastEditorUserId="2049" LastEditDate="2016-12-26T15:58:17.420" LastActivityDate="2016-12-26T15:58:17.420" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1005" PostTypeId="2" ParentId="1001" CreationDate="2016-06-24T12:54:48.513" Score="24" Body="&lt;p&gt;If you look into &lt;em&gt;real&lt;/em&gt; hardware (like a Motorola/Freescale/Rochester 68060, which is long out of mass production):&lt;/p&gt;&#xA;&lt;p&gt;Modern CPUs (mainly Intel) boosted to several GHz clock frequency have one main technical limit: how to get the heat away from the sensitive silicon. There is a lot of clever technological magic involved to do that: powering down parts of the chip not currently in use, thermal design which respect to distribute the heat around the chip evenly, low-power technologies everywhere... 'Old' stuff, like the 68k, just don't have this in their design and would need to be re-designed, possibly entirely, in order to cope with the frequencies.&lt;/p&gt;&#xA;&lt;p&gt;A 2 GHz 68000 is probably asking a bit much. As mcleod_ideafix points out, 100 MHz (or several 100 MHz, on a really very, very fast FPGA) might be possible.&lt;/p&gt;&#xA;&lt;p&gt;MiST, which runs a quite decent Altera Cyclone III, is able to push its Atari ST emulation to about the level of an Atari TT and the Amiga can be emulated to somewhere between the margins of an Amiga 2000 or 3000. An emulated ZX Spectrum can be boosted to a whopping 56 MHz instead of its original 3.5 MHz. Obviously, most of the computer's internal timing is derived from the system clock, and some of the hardware needs a re-design as well to further scale down the clock used, for example for video output.&lt;/p&gt;&#xA;&lt;p&gt;The question is: does this make sense? Old games used unchanged would become mostly unplayable due to the high speed, and there is not really that much software around to actually be able to use that power. Well, everything would be faster which is kind of comfortable.&lt;/p&gt;&#xA;&lt;p&gt;(I do admit I like playing &amp;quot;The Hobbit&amp;quot; on an emulated ZX Spectrum at 56 MHz, though :) )&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="11724" LastEditDate="2020-07-30T17:10:25.817" LastActivityDate="2020-07-30T17:10:25.817" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="1006" PostTypeId="1" CreationDate="2016-06-24T14:17:03.710" Score="57" ViewCount="5891" Body="&lt;p&gt;This undocumented instruction existed in the 80286 and, I believe, the 80386. I think it was added while debugging the chip, so the engineers could quickly put the processor into any state and test it from there without having to write tons of code to reach that state. Microsoft used it to accelerate HIMEM.SYS. IBM used it to allow DOS boxes inside OS/2 to access some memory beyond the 1MB barrier, but how did it work?&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="3290" LastEditDate="2020-05-01T07:23:49.590" LastActivityDate="2020-05-01T07:23:49.590" Title="How does the LOADALL instruction on the 80286 work?" Tags="&lt;instruction-set&gt;&lt;80286&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="1007" PostTypeId="2" ParentId="1006" CreationDate="2016-06-24T14:25:35.617" Score="5" Body="&lt;p&gt;There is some information about LOADALL on Wikipedia, and several OS-related sites, but the first time I (and I guess many others) knew about LOADALL is from this documented from Terrance E. Hodgins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't found any copy to this document online (well, a simple Google search with the words Terrance E. Hodgings or Hyper-Space Navigator's guide doesn't get any relevant results), so I've decided to keep a copy here, for future references, and because the document explains a lot of more than the Wikipedia article.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides, I haven't found the referenced book &quot;The Hyper-Spaec Navigator's Guide&quot;, nor the publisher &quot;Semi-Inteliigent Systems&quot;. It could be worth a reading, if such book actually existed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, this is the document where I learned about the &quot;magic&quot; and &quot;secret&quot; LOADALL instruction:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;PS: Stack Exchange answers seem to be limited to 30000 characters, so I have had to split this document into two answers.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                           THE LOW-DOWN ON LOADALL:&#xA;                            EXCERPTS FROM THE BOOK&#xA;&#xA;&#xA;                       THE HYPER-SPACE NAVIGATOR'S GUIDE&#xA;                                      by&#xA;                              Terrance E. Hodgins&#xA;&#xA;                  copyright (C) 1990 by Terrance E. Hodgins,&#xA;                             All rights reserved.&#xA;&#xA;&#xA;                           Semi-Intelligent Systems&#xA;                                 PO BOX 4492&#xA;                            ALBUQUERQUE, NM 87196&#xA;&#xA;                            Compuserve:  76416,553&#xA;                     Internet:  76416.553@compuserve.com&#xA;                 Internet: terry%scopes.unm.edu@ariel.unm.edu&#xA;&#xA;&#xA;        And now the boring legal stuff:&#xA;&#xA;&#xA;This document uses the following trademarks:&#xA;&#xA;AST is a registered trademark of AST Research, Inc.&#xA;&#xA;IBM, PC-DOS, PC/XT, and PC/AT are registered trademarks of International Busi-&#xA;ness Machines Corporation.&#xA;&#xA;Intel is a registered trademark of Intel Corporation.&#xA;&#xA;Lotus is a registered trademark of Lotus Development Corporation.&#xA;&#xA;Microsoft, MS-DOS, Windows '286, and OS/2 are registered trademarks of  Micro-&#xA;soft Corporation.&#xA;&#xA;Semi-Intelligent  Systems,  The Hyper-Space Library,  Get-High,  HI-DOS,  High&#xA;Code,  Xcode,  and  Mode Code are registered  trademarks  of  Semi-Intelligent&#xA;Systems.&#xA;&#xA;Unix is a registered trademark of AT&amp;amp;T, Inc.&#xA;&#xA;&#xA;&#xA;&#xA;                            Disclaimer of Warranty&#xA;&#xA;        TERRANCE E. HODGINS, AND SEMI-INTELLIGENT SYSTEMS, EXCLUDE ANY AND ALL&#xA;IMPLIED WARRANTIES, INCLUDING WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  A&#xA;PARTICULAR PURPOSE.&#xA;&#xA;        NEITHER  TERRANCE E. HODGINS, NOR SEMI-INTELLIGENT SYSTEMS,  MAKE  ANY&#xA;WARRANTY  OF REPRESENTATION, EITHER EXPRESS OR IMPLIED, WITH RESPECT TO  THESE&#xA;PROGRAMS,  THEIR QUALITY, PERFORMANCE, MERCHANTABILITY, OR FITNESS FOR A  PAR-&#xA;TICULAR PURPOSE.&#xA;&#xA;        NEITHER TERRANCE E. HODGINS, NOR SEMI-INTELLIGENT SYSTEMS, SHALL  HAVE&#xA;ANY LIABILITY FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF&#xA;OR RESULTING FROM THE USE OR MODIFICATION OF THESE PROGRAMS.&#xA;&#xA;        THE USE OF THE 80286 LOADALL INSTRUCTION IS INHERENTLY DANGEROUS,  AND&#xA;CAN RESULT IN PROGRAM CRASHES, OR RUN-AWAY PROGRAMS, WHICH CAN ALTER,  DAMAGE,&#xA;OR  DESTROY COMPUTER DATA, AND WHICH CAN DAMAGE OR DESTROY COMPUTER  HARDWARE.&#xA;USE ONLY AT YOUR OWN RISK.&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;                              Introduction&#xA;&#xA;&#xA;&#xA;        Yes,  there really is an unpublicized, almost secret,  instruction  in&#xA;the 80286, which has the ability to do several supposedly impossible things.&#xA;&#xA;        It is called Loadall.&#xA;&#xA;        What  Loadall does is completely load all the registers of  the  80286&#xA;from  a table starting at 80:0 in low memory.  I do mean ALL registers:  every&#xA;register  you ever heard of, and a few you haven't, and also  the  &quot;invisible&quot;&#xA;internal registers which are NOT OTHERWISE programmable.  Executing a  Loadall&#xA;nearly completely re-defines the CPU's state.&#xA;&#xA;        This  means  that  it is a great warp,  or  hyper-space,  instruction:&#xA;executing  a Loadall will jump you to someplace new, and leave you  with  your&#xA;choice  of  register contents, status and mode settings,  and  memory  segment&#xA;mappings,  allowing  you  to have your segments anywhere  in  the  16-megabyte&#xA;address  space  of the 80286.  Those of you who are familiar with Unix  and  C&#xA;programming  will be immediately reminded of the &quot;longjump&quot; routine.   Loadall&#xA;is the ultimate long-jump.&#xA;&#xA;        This  is possible in REAL mode.  You do NOT have to go into  protected&#xA;mode  to get at memory above 1 Megabyte on the AT.  Which also means that  you&#xA;don't have to then go through all kinds of odd-ball gyrations to get back  out&#xA;of  protected mode.  And better yet, this instruction will work in  both  REAL&#xA;and PROTECTED mode.&#xA;&#xA;        Intel  included the Loadall instruction in the 80286 for chip  testing&#xA;(they  can  throw the CPU into any state, and see if it then does what  it  is&#xA;supposed  to  do),  but there are much better uses for it  than  that  (in  my&#xA;not-so-humble opinion).&#xA;&#xA;        The power of being able to re-program ANY and ALL of the registers  of&#xA;the  CPU with one single instruction opens up a whole new world of  possibili-&#xA;ties.&#xA;&#xA;        Including, but not limited to:&#xA;&#xA;        getting  at  all  the memory in your machine at will, even  if  it  is&#xA;addressed above 1 megabyte, from real mode.&#xA;&#xA;        executing real-mode programs in ram above one megabyte.&#xA;&#xA;        installing a second operating-system-like program, or command  proces-&#xA;&#xA;sor,  or shell, in memory above 1 megabyte, and alternating between  that  and&#xA;DOS.&#xA;&#xA;        installing most of the guts of custom TSR's, shells, and  device-driv-&#xA;ers in ram above 1 megabyte (freeing up precious base memory), leaving in  low&#xA;memory only the stubs to call the code upstairs.&#xA;&#xA;        writing  very  large programs, which are &quot;split&quot;, and  have  half  the&#xA;program  residing  in  the low-down 640K, and the other half  up  in  extended&#xA;memory, and running in either real or protected mode.&#xA;&#xA;        installing  large  protected-mode programs in extended  memory,  where&#xA;they  will not conflict with, or crowd out DOS, and ping-ponging between  them&#xA;and DOS.&#xA;&#xA;        switching to protected mode.&#xA;&#xA;        emulating  real mode from protected mode (tough, and full of  gotchas,&#xA;but still worth mentioning).&#xA;&#xA;        this is really off-the-wall, but possible: building automata that  use&#xA;Loadall  to  warp from state to state, sort of like a computer game  of  Life,&#xA;played in the twilight zone.&#xA;&#xA;        ? use your imagination. The sky's the limit.&#xA;&#xA;        While the Loadall instruction only exists on the 80286 (to the best of&#xA;anyone's  knowledge at present -- anyone who will talk, that is...),  the  386&#xA;has other instructions which can accomplish much of the same functions.  Thus,&#xA;it  is  possible  to write code that detects the  processor  being  used,  and&#xA;switches  strategy accordingly, using subroutines with 386 op-codes to  accom-&#xA;plish  the same functions on a 386.  Microsoft is already doing that in  their&#xA;RamDrive.Sys and HiMem.Sys programs.  Thus you can have code which will run on&#xA;both the 286 or 386, and makes the best use of each.&#xA;&#xA;        This  instruction opens up so many possibilities (AND creates so  many&#xA;problems)  for things like alternate operating systems, and alternate  shells,&#xA;that live above 1 megabyte, in real mode or protected mode, that I foresee the&#xA;need  for  a community library of &quot;Hyper-Space&quot; subroutines, which  can  still&#xA;work properly even though some segments are in outer space, or the 80286 is in&#xA;protected  mode.  I would be happy to collect these, and pass on the  best  of&#xA;them with future distributions of this book and software.&#xA;&#xA;        Please forgive all the legalistic warning messages.  If used properly,&#xA;and  carefully, the Loadall instruction can be quite safe.  You  haven't  seen&#xA;Microsoft  Ramdrive.Sys  destroying any systems lately, have you?   It's  just&#xA;that  a  few bothersome people love to sue for anything, so you just  have  to&#xA;plaster those stupid warning messages all over everything.&#xA;&#xA;&#xA;&#xA;&#xA;                                   LOADALL&#xA;&#xA;&#xA;        Okay, so what IS the Loadall instruction?&#xA;&#xA;        Simple:&#xA;&#xA;        *** 0F 05 hex ***&#xA;&#xA;        So how does it work?  Well, I've already told you the gist of it:  all&#xA;CPU  registers  are loaded from a 51-word table of data that starts  at  80:0h&#xA;(absolute  24-bit  address 800h).  This address is one thing  that  cannot  be&#xA;changed or re-programmed. It's hard-wired into the chip, and that's that.  And&#xA;that's unfortunate, because all versions of anybody's DOS earlier than version&#xA;3.3 use that area for critical system code.&#xA;&#xA;        Loadall takes no operands, and is just a two-byte instruction. All the&#xA;&quot;operands&quot; for the instruction are obtained from the table at 80:0h.&#xA;&#xA;        Just put &quot;db 0Fh, 05&quot; in your code stream, and watch the fun. But  you&#xA;had better get that table right before you do, or else... (crash).&#xA;&#xA;&#xA;                ** THE LOAD TABLE **&#xA;&#xA;-----------------------------------------------------------&#xA;Address         Size            CPU register&#xA;                (words)&#xA;-----------------------------------------------------------&#xA;&#xA;800             3       unused  (?? I don't believe it.)&#xA;806             1       MSW (Machine Status Word)&#xA;808             7       unused  (?? I don't believe it.)&#xA;816             1       TR (Task Register)&#xA;818             1       Flag Word&#xA;81A             1       IP (Instruction Pointer)&#xA;81C             1       LDT (Local Descriptor Table)&#xA;&#xA;81E             1       DS (Data Segment, or DS Selector)&#xA;820             1       SS (Stack Segment, or SS Selector)&#xA;822             1       CS (Code Segment, or CS Selector)&#xA;824             1       ES (Extra Segment, or CS Selector)&#xA;&#xA;826             1       DI (Destination Index)&#xA;828             1       SI (Source Index)&#xA;82A             1       BP (Base Pointer)&#xA;82C             1       SP (Stack Pointer)&#xA;&#xA;82E             1       BX (Data Register BX)&#xA;830             1       DX (Data Register BX)&#xA;832             1       CX (Data Register BX)&#xA;834             1       AX (Data Register BX)&#xA;&#xA;836             3       ES Descriptor Cache&#xA;83C             3       CS Descriptor Cache&#xA;842             3       SS Descriptor Cache&#xA;848             3       DS Descriptor Cache&#xA;&#xA;84E             3       GDTR&#xA;                        (Global-Descriptor-Table Register)&#xA;&#xA;854             3       LDTDC&#xA;                        (Local-Descriptor-Table Descriptor Cache)&#xA;&#xA;85A             3       IDTR&#xA;                        (Interrupt-Descriptor-Table Register)&#xA;&#xA;860             3       TSSDC&#xA;                        (Task-State-Segment Descriptor Cache)&#xA;&#xA;total =         33h words == 102. bytes&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;                      THE DESCRIPTOR CACHE ENTRIES&#xA;&#xA;                      (DSDC, SSDC,CSDC, and ESDC)&#xA;&#xA;&#xA;&#xA;        Wait a minute, forward-referencing again!  What's a descriptor? You've&#xA;already used that word up above, and never defined it.&#xA;&#xA;        Well  okay. A segment descriptor is a four-word structure of  informa-&#xA;tion that describes a segment.  A descriptor gives a segment's size and 24-bit&#xA;starting  address, and has a byte of encoded information, called  the  &quot;access&#xA;byte&quot;, that describes the characteristics of the segment (like whether it is a&#xA;code segment or a data segment, writable or write-protected, and so on).   And&#xA;the  desciptor  also has a dummy zero word for upward compatibility  with  the&#xA;80386.  Segment Descriptors are used in protected mode, but not in real mode.&#xA;&#xA;        In  protected  mode,  when you want to use a segment  of  memory,  you&#xA;reference  the  segment descriptor.  The 80286 looks into a table  or  two  of&#xA;descriptors (which can be quite large, up to 16384 entries), to find the right&#xA;entry, and find out what the segment is. If you had to do this every time  you&#xA;referenced a memory variable, it would be terribly slow.  In order to  prevent&#xA;this  overhead, saving the descriptor information for the current segments  in&#xA;quickly-accessible CPU registers is a must.  That's what the descriptor caches&#xA;are for.&#xA;&#xA;        But you said they aren't used in real mode, right?  Right.  The  soft-&#xA;ware  descriptor tables aren't.  But the hardware descriptor caches are.   The&#xA;Intel  book on the 80286 seems mighty thin when it comes to telling  you  pre-&#xA;cisely  what the protected-mode hardware does while in real mode, but some  of&#xA;it  still works, and is very important (the descriptor caches in  particular).&#xA;The  descriptor  caches determine where your segments really are,  whether  in&#xA;real or protected mode.&#xA;&#xA;        In  real  mode, your segments are all normally 64 Kbytes in  size,  by&#xA;default,  and  are always located in the lowest megabyte of  the  80286's  16-&#xA;megabyte  address space.  When you want to access a segment, you just  load  a&#xA;number for the start of the segment into the appropriate segment register, and&#xA;then read or write that segment of memory.&#xA;&#xA;        The  segment number that you load is the address scaled down  by  four&#xA;bits,  so that it really addresses a memory address that is sixteen times  the&#xA;number  you  gave  it.  You can address anywhere inside  that  64  Kbyte-sized&#xA;window by using an offset.&#xA;&#xA;        Since the segment registers are 16 bits in size, and have been  scaled&#xA;by four bits, you have the equivalent of 20-bit addressing, and can address  a&#xA;1-megabyte sized area.  That's real mode.&#xA;&#xA;        Did it ever occur to you that that 1-megabyte sized area might  itself&#xA;just be appearing somewhere inside of an even larger area?&#xA;&#xA;        And that the 1-megabyte-sized real-mode area is made to start at  zero&#xA;when the 80286 chip is reset, but doesn't have to stay there forever?&#xA;&#xA;        I  mean, if in protected mode, the hardware is there to address a  16-&#xA;megabyte-sized  address space, well, that hardware doesn't just go  away  when&#xA;you are in real mode, does it?  Or all just get turned off?&#xA;&#xA;        No,  it doesn't.  As a matter of fact, it still works just  fine,  but&#xA;you  weren't given any instructions for doing anything with that part  of  the&#xA;hardware from real mode.  Or were you?&#xA;&#xA;        Oh yes you were.  It's called LOADALL.&#xA;&#xA;        So  how  do the hardware desciptor caches work?  Well, they  hold  the&#xA;information  that was read from a (software) descriptor in memory.  The  80286&#xA;discards  the unused zero word, and keeps the rest.  When you address  memory,&#xA;you  are actually using the segment addresses in the descriptor  cache  regis-&#xA;ters, not what is in the segment registers.&#xA;&#xA;        Perhaps you thought you were using the segment registers for  address-&#xA;ing:  it sure looks like you do, because if you load something into a  segment&#xA;register, you will then address the memory that the segment register is point-&#xA;ing to.  What is happening invisibly in the background is that the correspond-&#xA;ing  descriptor cache is being updated whenever you load a  segment  register,&#xA;and then the descriptor cache is being used for the actual addressing.&#xA;&#xA;        So  the segment descriptor caches, and not the segment registers,  are&#xA;what  actually  control what goes out on the address lines,  and  hence,  what&#xA;memory  you will really address. And the addresses in the  segment  descriptor&#xA;caches are 24-bit addresses.  Now isn't that special?&#xA;&#xA;        So if we can use Loadall to load anything we want to into the  segment&#xA;descriptor  caches,  then we can address anywhere in the  16-megabyte  address&#xA;space of the 80286, right?  Right.  You got it.&#xA;&#xA;&#xA;        The contents of the descriptor cache entries in a Loadall table are:&#xA;&#xA;         The  absolute 24-bit address for the start of the  segment,&#xA;                 in  the usual Intel  lowest-byte-first  byte-order.&#xA;                 That is, the bytes are: lowest, middle, highest.&#xA;&#xA;&#xA;         An  access byte, customarily set to 92h or 93h.  This  byte&#xA;                 is  encoded in the usual way that access bytes  are&#xA;                 encoded in Global Descriptor Table entries (see the&#xA;                 accompanying  charts).   This  byte  describes  the&#xA;                 characteristics of the segment, like whether it  is&#xA;                 code or data, and write-protected or not.&#xA;&#xA;         A  16-bit segment limit.  This is the segment  size,  minus&#xA;                 one.  FFFFh is equal to a full 64K.&#xA;&#xA;&#xA;        This  ordering is exactly backwards, word-order-wise, from  the  usual&#xA;layout  of the descriptors used in the protected-mode tables like  the  Global&#xA;Descriptor Table.  This is because the Loadall instruction is essentially just&#xA;a  giant  POP-ALL instruction.  The word order is backwards  (really,  &quot;Stack-&#xA;wards&quot;), but the byte order within words is not reversed.&#xA;&#xA;        The addresses loaded into the descriptor caches must be 24-bit  &quot;abso-&#xA;lute&quot;  or un-segmented &quot;flat-space&quot; versions of the segment  start  addresses.&#xA;IE: a segment address of 3456h becomes an absolute address of 034560h.  Remem-&#xA;ber  that segment addresses are ordinarily scaled down by 4 bits.  So we  have&#xA;to scale them back up to get the 24-bit flatland equivalent.&#xA;&#xA;        You will notice that there seems to be some duplication of information&#xA;here:  you have a CS register slot in the Loadall table, which is loaded  with&#xA;the  desired  code  segment start address, and you also have  a  Code  Segment&#xA;Descriptor  Cache  entry, with an address slot which is loaded with  much  the&#xA;same information.  The same is also true of DS, SS, and ES.&#xA;&#xA;        They can't always be the same, because one is 16 bits, and one 24, and&#xA;the 24-bit descriptor cache entry can specify the address down to the byte, in&#xA;the full 16-megabyte address space, while the 16-bit segment register can only&#xA;address on 16-byte boundaries, and can't address beyond 1 megabyte.&#xA;&#xA;        So  if  they are different, which ones win out?   The answer  is,  the&#xA;Descriptor Caches.  They have to, because only the Descriptor Caches have  the&#xA;whole  24-bit address necessary for addressing the entire 16-megabyte  address&#xA;space of the 80286.  Also because the Descriptor Caches are what are  actually&#xA;wired  to the address lines.  In protected mode, the segment  registers  don't&#xA;even get close to the address lines.&#xA;&#xA;        But  watch  out: this gets tricky.  For a  simple  rule-of-thumb,  the&#xA;&#xA;proper  programming practice to follow is: in real mode, always keep them  the&#xA;same.  That is, where the bits of the two overlap, keep them the same.  The CS&#xA;register  really holds the equivalent to bits A3 to A19 of the 24-bit  address&#xA;in the CS Descriptor Cache, so there is no way that you can &quot;keep them all the&#xA;same&quot;.  But you can keep those bits the same, and you will want to.&#xA;&#xA;        Why?  Because, in real mode, certain operations will update a Descrip-&#xA;tor Cache using the contents of the paired Segment Register.  Oh yeh?  Yeh.&#xA;&#xA;        Example:&#xA;&#xA;        Even  if the code segment entry &quot;CS&quot; in a Loadall table  is  blatantly&#xA;wrong,  but the value in the Code Segment Descriptor Cache &quot;CSDC&quot; is  correct,&#xA;and  the Instruction Pointer &quot;IP&quot; value is correct, and you do a Loadall,  the&#xA;Loadall will still work, and you WILL run the code that you intended to be run&#xA;after  the Loadall, but the program will crash at the first  jump  instruction&#xA;after  the  Loadall.  Calls to subroutines will likewise crash if  the  CS  is&#xA;wrong.&#xA;&#xA;        The  jump  or call instruction causes updating of  the  CS  Descriptor&#xA;Cache  contents, using the contents of the CS register, and the offset in  the&#xA;jump  or  call instruction.  So your CS descriptor cache goes  from  right  to&#xA;wrong,  without any further help from you.  That's why you have to &quot;keep  them&#xA;the same&quot;.&#xA;&#xA;        (This  is just a simple rule of thumb.  Like all simple  rules,  there&#xA;are exceptions, and the rules can be broken.  Breaking these rules doesn't buy&#xA;you  anything, but you might note that this is simply a rule of thumb,  not  a&#xA;Commandment From On High.)&#xA;&#xA;        The same is also true of the other Segment Registers, and their match-&#xA;ing Descriptor Caches, although the instructions that will cause updating will&#xA;differ.   The  commonest operation that causes updating  of  these  descriptor&#xA;caches is loading a new segment value into a segment register.&#xA;&#xA;        Now obviously, not all the bits of the address in the Descriptor Cache&#xA;will be updated by such operations.  The highest 4 bits cannot be updated from&#xA;the  segment register, because there are no corresponding bits.  So what  does&#xA;it do with them?  In real mode, the worst.  It clears them.  Try doing a  jump&#xA;while  executing real-mode code upstairs, above 1 Megabyte, and you will  come&#xA;crashing down out of the sky.  A simple jump in code located way upstairs will&#xA;turn  into  a very long jump to the lowest megabyte of memory.   Probably  not&#xA;what you had in mind, at all.  Far jumps and far calls are out of the question&#xA;for the same reason.&#xA;&#xA;        Curiously,  a  call will not cause you to fall out of the sky  in  the&#xA;same  way as a jump will, so we can do reversed jumps, or reversed  calls,  by&#xA;shoving  a return address, and then a destination address onto the stack,  and&#xA;then executing a return instruction, where a jump to precisely the same  place&#xA;will crash us.&#xA;&#xA;&#xA;        When  you are executing code in real mode, above 1 megabyte  (plus  64&#xA;K), your position is as precarious as that of Icarus flying towards the sun on&#xA;wings  held  together with wax.  (More on that &quot;plus 64 K&quot; note  later.)   You&#xA;must  keep  interrupts turned off because ANY interrupt will  yank  you  down-&#xA;stairs,  and you won't return upstairs again.  The interrupt  service  routine&#xA;will  change some segments or other, particulary the Code Segment,  and  those&#xA;segments'  descriptor  caches will have the highest  four  bits  irretrievably&#xA;cleared.&#xA;&#xA;        And  the  updating  of the  lowest four bits is an  open  question.  I&#xA;always  set  my segments on 16-byte boundaries so I don't  get  burned  there.&#xA;That  is, the four lowest bits of the 24-bit address are always  zero.   Thus,&#xA;the  16-bit  segment settings in the segment registers will always  match  the&#xA;values of the lowest 20 bits of the descriptor cache settings.&#xA;&#xA;        Here's what these descriptor cache entries look like, in source  code,&#xA;with a set of default values plugged in:&#xA;&#xA;newESDC         dw      0,      9200h,  0FFFFh&#xA;newCSDC         dw      0,      9200h,  0FFFFh&#xA;newSSDC         dw      0,      9200h,  0FFFFh&#xA;newDSDC         dw      0,      9200h,  0FFFFh&#xA;&#xA;        The running program will replace those zeroes in the first and  second&#xA;words of each entry with real addresses before doing the Loadall.&#xA;&#xA;        The &quot;92&quot;'s are the access bytes, and mean: &quot;this item is a  descriptor&#xA;of  a data segment, it is valid, it has the highest possible  privilege  level&#xA;(0), writing to it is okay, and it has not been accessed&quot; (really, written to.&#xA;A 'dirty' page, in virtual-memory-system parlance).&#xA;&#xA;        Those  &quot;FFFF&quot;'s set up segments 64K in size. There's no point in  set-&#xA;ting  them  any smaller, and a lot of grief to be gotten if you  do.  So  just&#xA;always set them to &quot;FFFF&quot; in real mode.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-06-24T14:25:35.617" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1008" PostTypeId="2" ParentId="1006" CreationDate="2016-06-24T14:27:43.980" Score="4" Body="&lt;p&gt;Continued from my previous answer. This is the rest of the document about LOADALL, by Terrance E. Hodgings:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                       THOSE OTHER BIG REGISTERS&#xA;&#xA;&#xA;        GDTR    Global Descriptor Table Register&#xA;        LDTDC   Local-Descriptor-Table Descriptor Cache&#xA;        IDTR    Interrupt Descriptor Table Register&#xA;        TSSDC   Task-State-Segment Descriptor Cache&#xA;&#xA;        These  registers do next to nothing while in real mode.  The  strategy&#xA;for dealing with these is: just set them up in an acceptable manner, and  then&#xA;forget them.  The Interrupt Descriptor Table Register is the most important of&#xA;these,  as  it  really does determine the starting address  of  the  interrupt&#xA;vector table.&#xA;&#xA;        The format of the data for these registers is just about identical  to&#xA;the  format  of the data in the Descriptor Caches, except for an  unused  byte&#xA;(there is no access byte):&#xA;&#xA;        an absolute 24-bit address for table start, in the&#xA;                usual Intel byte-order. That is, the bytes&#xA;                are: lowest, middle, highest.&#xA;&#xA;        an &quot;extra&quot;, or &quot;trash&quot;, or &quot;dummy&quot; byte (pick your&#xA;                favorite name.)  Set to either FFh or 0.&#xA;&#xA;        a 16-bit limit.  This is the table size, minus one.&#xA;                (FFFFh == a full 64K)&#xA;&#xA;&#xA;&#xA;       Set up the GDTR (Global Descriptor Table Register) and the IDTR (Inter-&#xA;rupt  Descriptor Table Register) using the instructions &quot;sgdt&quot; and  &quot;sidt&quot;  --&#xA;&quot;store  global  descriptor table register&quot;, and  &quot;store  interrupt  descriptor&#xA;table register&quot;. These two instructions work in both real and protected mode.&#xA;&#xA;       The  values that we get from them are somewhat goofy (especially  since&#xA;we  are getting data about non-existent tables), but we use those values  any-&#xA;way, just to keep the 80286 chip happy.  We will just stuff back into the chip&#xA;whatever is already in there.&#xA;&#xA;       The  LDTDC (Local-Descriptor-Table Descriptor Cache) is a real  nothing&#xA;in real mode.  In real mode, there is no Local-Descriptor-Table Descriptor  to&#xA;cache.  We just set the LDTDC with an acceptable size, same as the GDTR (88h),&#xA;and let it go at that.&#xA;&#xA;       The  TSSDC  (Task-State-Segment Descriptor Cache) is  likewise  a  null&#xA;&#xA;register in real mode.  There is no Task State Segment to point to. Again,  we&#xA;just  set  it up with a size that will keep the 80286 chip from  freaking  out&#xA;(thinking that the segment is impossibly small), and let it go at that.&#xA;&#xA;&#xA;&#xA;       Set up, just before doing a Loadall, these items will look like:&#xA;&#xA;newGDTR         dw      D8A0h,  0FF00h, 88h&#xA;newLDTDC        dw      0,      0FF0Eh, 88h&#xA;newIDTR         dw      0,      0FF00h, 0FFFFh&#xA;newTSSDC        dw      4000h,  0FF0Eh, 800h&#xA;&#xA;&#xA;        The addresses in the newLDTDC and the newTSSDC are E0000h and  E4000h,&#xA;respectively.   There is nothing at those addresses but stupid phantom  copies&#xA;of the BIOS Roms, wasting precious low-memory address space.  So what I do  is&#xA;put  the  non-existent tables on top of the non-existant ROMS,  and  let  them&#xA;fight  it out.  In truth, those addresses in those descriptor caches'  entries&#xA;will  never  really be used for anything, anyway, so they could  be  anywhere.&#xA;They just don't matter.  The starting address of the IDTR is the only one that&#xA;does matter.&#xA;&#xA;&#xA;&#xA;                  AND ALL THOSE OTHER LITTLE REGISTERS&#xA;&#xA;&#xA;        The  MSW  (Machine Status Word) is normally set to zero. On  the  286,&#xA;only  the  4 lowest bits are even used.  The one super-important bit  in  this&#xA;register  is  the mode bit.  Set it, and you warp into  protected  mode.   The&#xA;other three bits are invalid and irrelevant if you are not in protected  mode.&#xA;Zero this word, unless you really intend to go into unreal mode.  Heaven  help&#xA;your program if you set it, and have not set up all the descriptor tables, and&#xA;all the protected-mode registers, and cross-linked all the pointers to  every-&#xA;thing, correctly, first.  We will get into that can of worms later.&#xA;&#xA;        Just for reference, here's what the bits are:&#xA;&#xA;        D0      == PE Protected-Mode Enable  (yeh, this is IT.)&#xA;        D1      == MP Monitor Process&#xA;        D2      == EM Emulate Processor Extension&#xA;        D3      == TS Task Switched&#xA;&#xA;&#xA;        The  TR  (Task Register) is another register used  only  in  protected&#xA;mode. It is used for keeping track of which task is running.  Not our  problem&#xA;in real mode.  Zero it.&#xA;&#xA;        The  Flag Word is the same old flag word that we are already  familiar&#xA;with  from ordinary real-mode programming.  We just push the flags word  here,&#xA;and  we've done it.  Or we can zero it.  None of our programs are going to  do&#xA;anything as off-the-wall as a conditional jump right after a Loadall,  anyway,&#xA;right?  Uh, right?  Why do I see you grinning?  12-dimensional Life, huh?&#xA;&#xA;        The IP (Instruction Pointer) is critical.  This one really works.  The&#xA;address we put here will, in combination with the address in the Code  Segment&#xA;Descriptor Cache (CSDC), determine where we will start executing code  immedi-&#xA;ately after the Loadall.  So this acts like a jump vector.  We set this up  in&#xA;the  our programs, just before doing a Loadall, do determine where we will  go&#xA;next.  Better get this one right.&#xA;&#xA;        The  LDT  (Local Descriptor Table) is another null  register  in  real&#xA;mode.  Zero it.&#xA;&#xA;&#xA;        DS (Data Segment, or DS Selector)&#xA;        SS (Stack Segment, or SS Selector)&#xA;        CS (Code Segment, or CS Selector)&#xA;        ES (Extra Segment, or CS Selector)&#xA;        Set these up so that they contain the same number as bits A4 to A19 of&#xA;the  corresponding Segment Descriptor Cache.  These work in  conjunction  with&#xA;those.&#xA;&#xA;&#xA;&#xA;        All  of the following registers are very straight-forward:  just  load&#xA;them  with whatever you want the registers to have after the Loadall.  If  you&#xA;are  not trying to carry values in these registers, you can just default  most&#xA;all of them to zeroes.&#xA;&#xA;        The stack pointer requires some care, as the stack is one of the  best&#xA;ways to carry data into the beyond.  I generally stuff the stack just before a&#xA;Loadall,  and then write the current stack pointer to the SP slot in the  Loa-&#xA;dall table, so that I know that I have it right.&#xA;&#xA;        DI (Destination Index)&#xA;        SI (Source Index)&#xA;        BP (Base Pointer)&#xA;        SP (Stack Pointer)&#xA;&#xA;        BX (Data Register BX)&#xA;        DX (Data Register DX)&#xA;        CX (Data Register CX)&#xA;        AX (Accumulator AX)&#xA;&#xA;&#xA;        And then these little curiosities: the two &quot;dead&quot; spots in the table.&#xA;&#xA;800     3 words         unused   (?? I don't believe it.)&#xA;808     7 words         unused   (?? I don't believe it.)&#xA;&#xA;        Obviously, they are there for something.  They must load some  invisi-&#xA;ble register or other.  The registers might be some very transient  registers,&#xA;just for intermediate products, which may not be useful...&#xA;&#xA;        Then  again,  considering how much we haven't been told so  far,  they&#xA;might be good for something.  This is another area for future experimentation.&#xA;In the mean time, zero them.&#xA;&#xA;&#xA;                  AND A PRETTY-TOGETHER DEFAULT TABLE&#xA;&#xA;&#xA;        So  here's  what  a  default  Loadall  table  looks  like.  Note  that&#xA;&quot;new_Reg_Buf&quot; doesn't label any data item that we really use; it's the name of&#xA;the whole table.&#xA;&#xA;;    LOADALL Register Load Table for new values to be loaded&#xA;;    into registers by a Loadall.&#xA;&#xA;new_Reg_Buf     dw      3 dup (0)       ; unused space&#xA;newMSW          dw      0&#xA;newDead         dw      7 dup (0)       ; unused space&#xA;newTR           dw      0&#xA;newFlagWord     dw      0&#xA;newIP           dw      offset after_ldall      ; * may chng&#xA;newLDT          dw      0&#xA;&#xA;newDS           dw      0       ; *chng&#xA;newSS           dw      0       ; *chng&#xA;newCS           dw      0       ; *chng&#xA;newES           dw      0       ; *chng&#xA;&#xA;newDI           dw      0&#xA;newSI           dw      0&#xA;newBP           dw      0&#xA;newSP           dw      0       ; *chng&#xA;&#xA;newBX           dw      0&#xA;newDX           dw      0&#xA;newCX           dw      0&#xA;newAX           dw      0&#xA;&#xA;newESDC         dw      0,      9300h,  0FFFFh  ; *chng&#xA;newCSDC         dw      0,      9300h,  0FFFFh  ; *chng&#xA;newSSDC         dw      0,      9300h,  0FFFFh  ; *chng&#xA;newDSDC         dw      0,      9300h,  0FFFFh  ; *chng&#xA;&#xA;newGDTR         dw      D8A0h,  0FF00h, 88h     ; @ 0D8A:0 *n&#xA;newLDTDC        dw      0,      0FF0Eh, 88h     ; @ E000:0&#xA;newIDTR         dw      0,      0FF00h, 0FFFFh  ; @ 0000:0 *n&#xA;newTSSDC        dw      4000h,  0FF0Eh, 800h    ; @ E400:0&#xA;&#xA;&#xA;        Those  &quot;*chng&quot; comments mean that those items MUST be changed  by  the&#xA;running program before actually doing the Loadall. We cannot correctly default&#xA;them in the sources because the correct values can only be determined at  run-&#xA;time.&#xA;&#xA;&#xA;&#xA;        The &quot;*n&quot; means that those values are not really in the default  tables&#xA;in the sources: the running program uses the sgdt and sidt instructions to get&#xA;those values and then plugs them into those two entries.  Just letting you see&#xA;what they will look like. You could have anything in the original table there,&#xA;because  the running program will over-write those items with  correct  values&#xA;anyway.&#xA;&#xA;        The &quot;@ 0D8A:0&quot; comments are just noting the addresses in those  items,&#xA;in a more readable form.&#xA;&#xA;&#xA;&#xA;&#xA;                        GATE A20 : Door to the Beyond&#xA;&#xA;&#xA;        Before  we get heavy into the guts of actually using the  Loadall  in-&#xA;struction, we need to touch on this item: Gate A20.  Loadall is almost useless&#xA;without control of Gate A20.&#xA;&#xA;        Gate  A20  is the gate on the motherboard of the AT  that  enables  or&#xA;disables  the  4  highest  address  lines, A20 to A23.  In  order  to  be  PC-&#xA;compatible, they are ordinarily disabled on an AT.  The pathetic PC could only&#xA;address 1 megabyte of space, total, remember?  That's 20 bits.  If those lines&#xA;are disabled, then addressing wraps to zero above FFFF:0010.  But if they  are&#xA;enabled,  then addressing doesn't wrap, and you can address above 1  Megabyte.&#xA;This  has nothing to do with protected mode.  Even if the 80286 were  in  pro-&#xA;tected mode, it still couldn't address above 1 Megabyte without enabling  Gate&#xA;A20.&#xA;&#xA;        In  the part of the Hyper-Space Library freely distributed  with  this&#xA;document  and the View-XM program are routines called &quot;A20_on&quot; and  &quot;A20_off&quot;.&#xA;They  need no arguments.  You just call them, and they will enable or  disable&#xA;Gate A20.  Do not make a habit of turning Gate A20 on and just leaving it  on,&#xA;as  rumor has it that some barbaric programmers from the bad-old days  made  a&#xA;habit  of depending on address-wrapping, addressing something like  FFFF:0345h&#xA;to  get at 0:0335h.  Ugh!  These subroutines also check whether Gate  A20  was&#xA;already on before the call, and if so, leave it alone.&#xA;&#xA;        This  leads us to a very interesting twist in the game:  what  if  you&#xA;turn  on Gate A20, and load FFFFh into a segment register, like the DS  regis-&#xA;ter,  and then address something like DS:0300h?  The answer is, you  will  ad-&#xA;dress  beyond 1 megabyte, without either going into protected mode,  or  using&#xA;Loadall  tricks.  The  PC can only address 1 Megabyte total, but  the  AT  can&#xA;address 1 Megabyte, plus 64K, minus 16 bytes, in REAL mode, without Loadall.&#xA;&#xA;        This a big part of the XMS driver specification.  That's the  eXtended&#xA;Memory Specification (not to be confused with the &quot;EMS&quot; Expanded Memory Speci-&#xA;fication).  The XMS driver accesses memory addressed above 1 Megabyte on AT's.&#xA;&#xA;        You can write programs which use standardized calls to the XMS driver,&#xA;and  expect that the program will work with anyone's XMS  driver.   Microsoft,&#xA;Intel, Lotus, and AST Research (the authors) have put the XMS specification in&#xA;the  public domain (although they retain the copyright), and it  is  currently&#xA;supported  by them, and probably by many more companies that I don't know  of,&#xA;so we should be seeing plenty of good XMS device-drivers around, and, in turn,&#xA;programs using it.&#xA;&#xA;        Furthermore,  Microsoft  will give you a copy of the XMS  driver,  and&#xA;standard,  free,  if you write to them and ask for one.   Write  to  Microsoft&#xA;&#xA;Corporation,  16011  NE 36th Way, Box 97017, Redmond WA  98073,  and  politely&#xA;request  a  floppy copy of the XMS standard and driver.  The  same  files  are&#xA;available from many bulletin board systems, and anonymous FTP sites.&#xA;&#xA;        Since  you  want a nice, clean, non-colliding standard  way  for  your&#xA;programs to be able to get at more ram, using the EMS and XMS standards is the&#xA;only  good  way to go.  Throughout this book, we are going  to  support  those&#xA;standards, and others, too.&#xA;&#xA;        The  recommended  programming practice is to always  support  the  XMS&#xA;standard, and use requests to the XMS driver to get at extended memory, rather&#xA;than just brute-force doing it yourself, even though you can with Loadall,  so&#xA;that your programs will not conflict with others.&#xA;&#xA;        The PC world is already far too filled with gotchas and incompatibili-&#xA;ties,  and things that collide with other things, for us to be adding  to  the&#xA;misery.&#xA;&#xA;        The one thing that the XMS driver adds, that you will not have if  you&#xA;just  take  over and use an area of extended memory yourself, is any  kind  of&#xA;collision  prevention  or co-ordination between programs.  You won't  know  if&#xA;another  program is already using that area, but the XMS driver will, as  long&#xA;as the other program is also using the driver.  So everybody better be  adher-&#xA;ing to the standard!&#xA;&#xA;        On  the  other  hand, you would not be reading  this  book  about  the&#xA;&quot;secret&quot;  Loadall  instruction if you were all that committed  to  ONLY  using&#xA;&quot;normal&quot; standards, would you?  The trick is to support the standards, without&#xA;being  constrained  by them.  This requires great care and thought  about  the&#xA;consequences  of any use of Loadall for &quot;non-standard&quot; activities.   You  can,&#xA;for  instance, allocate some memory, using the XMS driver, and then  go  ahead&#xA;and use Loadall to do anything you want to with it, since you now own it.  You&#xA;have the best of both worlds.&#xA;&#xA;        And so what do the XMS drivers use to get at the extended memory above&#xA;the High-Memory Area?  Either going into protected mode, or Loadall.&#xA;&#xA;&#xA;&#xA;&#xA;                       THE PROCEDURE FOR USING LOADALL&#xA;                       (the ultra-safe, long procedure)&#xA;&#xA;&#xA;1.      Save  the  original machine state, so you have a state to  return  to.&#xA;This information can be saved in a Loadall table, which is the most convenient&#xA;form for later use.&#xA;&#xA;2.      Disable interrupts.  Just in case.  We want a clean copy of area 80.&#xA;&#xA;3.      Save  the 102-byte (33h words) block of data located at  80:0h.   Ver-&#xA;sions  of DOS (both PC- and MS-) earlier than 3.3 use this area  for  critical&#xA;system code, and as of DOS 3.3, RamDrive.Sys, and Himem.Sys use this area  for&#xA;their own Loadall tables.&#xA;&#xA;4.      Re-enable  interrupts.   Let the clock ticks,  or  whatever,  through,&#xA;while we do the following step.&#xA;&#xA;5.      Set  up  the new Loadall table (new_reg_buf), which  defines  the  new&#xA;state we want to warp to.&#xA;&#xA;6.      Disable Interrupts.&#xA;&#xA;7.      Copy the new Loadall table to 80:0h.&#xA;&#xA;8.      Execute a Loadall.&#xA;&#xA;9.      Do  something  or other with your new machine state.   Read  or  write&#xA;extended memory, run code upstairs, or whatever.&#xA;&#xA;10.     Copy the &quot;old&quot; Loadall table, containing the saved machine state, down&#xA;to 80:0.&#xA;&#xA;11.     Do  another Loadall (Un-Loadall.)  This restores the original  machine&#xA;state.&#xA;&#xA;12.     Copy the block of saved data back to 80:0h.&#xA;&#xA;13.     Re-enable interrupts.&#xA;&#xA;        And you have done it.&#xA;&#xA;&#xA;        This is the long, drawn-out method.  There are various short-cuts  and&#xA;speedups possible.&#xA;&#xA;        If all you have been doing is reading or writing extended memory,  for&#xA;instance,  then  you  don't have to do the second loadall.   Just  changing  a&#xA;segment register (loading a new value) will cause the corresponding Descriptor&#xA;Cache  to drop its four highest address bits, restoring addressing to the  low&#xA;megabyte.&#xA;&#xA;        Read the sources for the program &quot;View-XM&quot; for more details on this.&#xA;&#xA;        See the full text of The Hyper-Space Navigator's Guide for more.&#xA;&#xA;&#xA;&#xA;&#xA;        The  Hyper-Space Navigator's Guide, the book and software library,  is&#xA;available   from  Semi-Intelligent  Systems  for  $49.00  (students  get   20%&#xA;discount),  and comes with the floppy of source code.  With other  books,  you&#xA;have  to pay $10 or $20 more to get the floppy that should have come with  the&#xA;book  in  the  first place.  Here you don't.  It is available  on  any  common&#xA;floppy  format:  5.25&quot; 360K or 1.2MB, or 3.5&quot; 720K.  If you order  it,  please&#xA;state your floppy format preference.&#xA;&#xA;        FULL source code in assembly and C is provided.&#xA;&#xA;        The Hyper-Space Navigator's Guide gives the full low-down on  Loadall,&#xA;and other 286- and 386-compatable extended-memory tricks, too:  the good,  the&#xA;bad, and the ugly.&#xA;&#xA;        The  book comes with a library of subroutines designed  to  facilitate&#xA;the use of extended memory, and includes numberous demo programs which do just&#xA;about everything you can do with Loadall (or without), including:&#xA;&#xA;        reading and writing extended memory.&#xA;&#xA;        running code up there, in both real and protected mode.  Yes, you  can&#xA;use  Loadall  to  warp directly into protected mode.  Or you  can  do  it  the&#xA;&quot;normal&quot;  way, so that the code will be 386-compatable.  Both ways are  imple-&#xA;mented in the code.&#xA;&#xA;        going  into,  and running in, and then getting back out  of  protected&#xA;mode,  from within your own programs, on both the 286 and 386.   Getting  into&#xA;protected mode is relatively easy.  Try getting back out on a 286.  I'll  show&#xA;you how.&#xA;&#xA;        writing  &quot;split&quot;  programs,  with a low-memory half, and  a  high-  or&#xA;extended-memory  half,  with the second half in real or protected  mode.   The&#xA;cat's meow for image-processing programs which eat memory space like popcorn.&#xA;&#xA;        installing  either real- or protected-mode &quot;high code&quot; inside  an  ex-&#xA;tended-memory  ram-disk file, where it won't collide with anything or  anybody&#xA;else,  and then using a TSR to launch directly into running the code  from  in&#xA;there (thus turning a piece of the ram-disk back into ram).&#xA;&#xA;        Again,  full and complete source code, so that the demo programs  also&#xA;supply  you  with hackable skeletons for quickly building your  own  programs,&#xA;(without  the  many months of day-and-night hacking and  hair-tearing  I  went&#xA;through  to  figure out this stuff).  Just throw away the middle of  the  demo&#xA;main routine and plug your code in.&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-06-24T14:27:43.980" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1009" PostTypeId="5" CreationDate="2016-06-24T14:40:12.203" Score="0" Body="&lt;p&gt;The VIC-20 is an 8-bit home computer released by Commodore in 1980.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W10Z3m.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W10Z3m.jpg&quot; alt=&quot;logo&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-06-24T16:15:57.460" LastActivityDate="2016-06-24T16:15:57.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1010" PostTypeId="4" CreationDate="2016-06-24T14:40:12.203" Score="0" Body="For questions about the Commodore VIC-20" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-06-24T16:15:01.550" LastActivityDate="2016-06-24T16:15:01.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1011" PostTypeId="2" ParentId="1006" CreationDate="2016-06-24T15:12:13.300" Score="52" Body="&lt;p&gt;&lt;code&gt;LOADALL&lt;/code&gt; is an undocumented instruction available on the 80286, 80386 and some 486 clones. It provides a means to load all the CPU's registers in one operation, &lt;em&gt;including&lt;/em&gt; normally-inaccessible registers (descriptor caches).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its significance is that it allows extended memory to be accessed on a 286 without switching to protected mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a 8086, memory is accessed using a segment:offset system, where the segment is multiplied by 16 and the offset added to it; both values are 16 bits in length, so using this scheme allows access to the full 1MB address range of the 8086 on the one hand, while still allowing easy access to a &quot;decent&quot; amount of memory within a segment (64KB). On the 286, a level of indirection was added to segments, in order to allow access to the full 16MB address range (24 bits) and to provide memory protection features. This level of indirection is provided by segment descriptors: a segment value loaded in a register such as &lt;code&gt;CS&lt;/code&gt; or &lt;code&gt;DS&lt;/code&gt; is no longer a direct pointer to the corresponding 64KB block of memory (&lt;em&gt;i.e.&lt;/em&gt;, the value multiplied by 16), but is a handle pointing into a descriptor table, whose entries specify the segment's 24-bit physical base address, the access permissions, and the segment limit (so segments could be shorter than 64KB). Backwards-compatibility is provided in real-mode by specially handling register loads into the segment registers; these are backed by hidden descriptor caches which contain the segment descriptor values for the current segment descriptor, and in real mode these are simply the segment handle multiplied by 16, and a segment limit of 64KB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a 286 though, segment descriptors can officially only be changed in protected mode. Thanks to the 286's (very) poor support for switching back to real mode from protected mode, this effectively means that real mode is stuck with its 1MB limit (plus a little under 64KB using the A20 gate, but that's another topic). Or it would be, were it not for the &lt;code&gt;LOADALL&lt;/code&gt; instruction!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With &lt;code&gt;LOADALL&lt;/code&gt;, a 286 running in real mode can change the segment descriptors caches independently of the values actually loaded in the segment registers, and thus real-mode processes can access all 16MB of memory. This technique was apparently first used in &lt;code&gt;RAMDRIVE.SYS&lt;/code&gt;. &lt;code&gt;LOADALL&lt;/code&gt; on the 286 loads all the CPU's registers, including each segment register's descriptor cache (which allows quick changes to the descriptor without setting up a proper descriptor table), from memory starting at 0x000800. DOS 3.3 and 4.01 leave that memory range clear of data so that it can be used for &lt;code&gt;RAMDRIVE.SYS&lt;/code&gt;; on other versions (including DOS 5 and later), it's necessary to move data out of the way temporarily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accessing memory beyond 1MB using &lt;code&gt;LOADALL&lt;/code&gt; is relatively simple (at least, relative to switching to protected mode and somehow switching back). To copy a block of memory from extended memory, you'd copy the current CPU state to memory (after saving the initial contents of 0x000800 if necessary), and update the &lt;code&gt;DS&lt;/code&gt; descriptor cache so its base address points at the address in extended memory you want to read from; then &lt;code&gt;LOADALL&lt;/code&gt;, copy the memory (from &lt;code&gt;DS:SI&lt;/code&gt; to &lt;code&gt;ES:DI&lt;/code&gt; commonly), then &lt;code&gt;LOADALL&lt;/code&gt; again to restore the &lt;code&gt;DS&lt;/code&gt; descriptor cache to its usual real-mode setting. You'd typically do this with interrupts disabled, but since you're limited to copying 64KB at a time it's not much of an issue. Copying to extended memory is similar, using the &lt;code&gt;ES&lt;/code&gt; descriptor cache typically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A different version of &lt;code&gt;LOADALL&lt;/code&gt; is available on the 386, with a different opcode, but it's less useful there since switching to and from protected mode is much faster than on a 286 (and for non-protected-mode DOS software, &quot;unreal&quot; mode was much more useful for accessing extended memory). Most 386 BIOSs trap the 286 version of &lt;code&gt;LOADALL&lt;/code&gt; and emulate it (either using the 386 version of &lt;code&gt;LOADALL&lt;/code&gt;, or equivalent protected-mode operations), so that 286 software can still work on the 386. (Notably, &lt;code&gt;RAMDRIVE.SYS&lt;/code&gt; continued using the 286 version of &lt;code&gt;LOADALL&lt;/code&gt; for a long time, even on 386s.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Intel 80486 dropped support for &lt;code&gt;LOADALL&lt;/code&gt; entirely (although it can still be emulated using protected-mode operations). Some IBM and AMD clones implemented their own versions of &lt;code&gt;LOADALL&lt;/code&gt;, with extensions to the 386 version to support the added registers on these CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For lots more on all this, I recommend Geoff Chappell's &lt;em&gt;DOS Internals&lt;/em&gt; and Frank Van Gilluwe's &lt;em&gt;The Undocumented PC&lt;/em&gt;, in addition to the document preserved in &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/105/mcleod-ideafix&quot;&gt;mcleod_ideafix&lt;/a&gt;'s &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1007/79&quot;&gt;answers&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-06-24T15:12:13.300" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="1012" PostTypeId="2" ParentId="436" CreationDate="2016-06-24T21:28:35.903" Score="10" Body="&lt;p&gt;Technically, the answer to your question is:&#xA;&quot;No, there is no Linux client for Amiga explorer&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there are a few options to transfer files between modern computers and Amigas.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Parallel port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the most primitive solution and it requires that you have a computer with a parallel port, these can be quite rare. ;)&#xA;There is an eBay vendor which sells the required cable and provides the necessary bootable floppy for both PC and Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find more information about this on this English Amiga Board thread: &lt;a href=&quot;http://eab.abime.net/showthread.php?t=65213&quot; rel=&quot;nofollow&quot;&gt;http://eab.abime.net/showthread.php?t=65213&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compact Flash&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, you could get a Compact Flash Adapter for your Amiga.&#xA;Write files on the PC/Mac side, then plug the card on the Amiga side.&#xA;Still requires &quot;swapping&quot; as with floppies but at least you can transfer several GB of data each time rather than a meager 880KB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are available for purchase here: &lt;a href=&quot;http://amigakit.leamancomputing.com/catalog/product_info.php?products_id=440&quot; rel=&quot;nofollow&quot;&gt;http://amigakit.leamancomputing.com/catalog/product_info.php?products_id=440&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Real Ethernet connection&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;most practical solution&lt;/strong&gt; is to connect your Amiga to your computer's network. There are PCMCIA Ethernet cards for sale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you google for &quot;amiga 1200 network card&quot; your first result will be a link to a seller with a complete solution. Note: I have no affiliation whatsoever with Leaman Computing, they are just the first Google result. ;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There are more options, but some of them are still at the prototype stage so I won't be mentioning them here.&lt;/p&gt;&#xA;" OwnerUserId="2056" LastEditorUserId="2056" LastEditDate="2016-07-03T01:18:09.353" LastActivityDate="2016-07-03T01:18:09.353" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1013" PostTypeId="2" ParentId="44" CreationDate="2016-06-24T21:47:35.747" Score="5" Body="&lt;p&gt;Note that the limitation of 64 colors per scanline implies the use of the Extra Half Brite (EHB) mode of the Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the graphic mode capable of displaying the most colors per scanline without artifacts on ECS models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, answering with advanced detailed examples is asking quite a bit since the subject is quite complex and this information is available on the Internet already (cf link at the bottom). ;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simple answer is that the Copper processor is being used to switch colors while the display electron beam is blanked while it returns from the right border of the screen to the left one (this is called the horizontal blanking interval).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Almost all Amiga games used the Copper to increase the amount of colors on screen, even if this was just used to create a background/sky gradient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Copper can switch about 31 to 32 colours per scanline on a regular 320 x 256 display. But with the EHB mode, this also modifies the upper 32 colors of the palette (they are darker versions of the lower 32 ones).&#xA;This means that one can theoretically display 256 * 64 distinct colors on OCS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The screen is thus divided vertically in slices which each use a different palette. 256 colors are reached by using only four slices: 4 * 64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game Pang uses this technique, this is detailed in this great article from CodeTapper: &lt;a href=&quot;http://www.codetapper.com/amiga/maptapper/documentation/gfx/gfx-palette&quot; rel=&quot;noreferrer&quot;&gt;http://www.codetapper.com/amiga/maptapper/documentation/gfx/gfx-palette&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will find plenty of other examples of this kind on his website.&lt;/p&gt;&#xA;" OwnerUserId="2056" LastEditorUserId="2056" LastEditDate="2016-06-24T21:54:07.903" LastActivityDate="2016-06-24T21:54:07.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1014" PostTypeId="5" CreationDate="2016-06-25T09:55:26.593" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-06-25T09:55:26.593" LastActivityDate="2016-06-25T09:55:26.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1015" PostTypeId="4" CreationDate="2016-06-25T09:55:26.593" Score="0" Body="For questions about the early IBM PC, clones and compatible systems." OwnerUserId="357" LastEditorUserId="357" LastEditDate="2016-06-25T15:39:41.910" LastActivityDate="2016-06-25T15:39:41.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1016" PostTypeId="1" AcceptedAnswerId="1017" CreationDate="2016-06-25T18:38:05.090" Score="24" ViewCount="742" Body="&lt;p&gt;In 8086 architecture memory is addressed by &lt;code&gt;segment:offset&lt;/code&gt; scheme, where the 20-bit linear address is formed as &lt;code&gt;address=segment*16+offset&lt;/code&gt;. This looks needlessly complicated and doesn't allow to further extend physical address width without changing instruction set, despite the logical address having two 16-bit components (and &lt;code&gt;16+16&amp;gt;20&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A much simpler way seems to be &lt;code&gt;address=segment*65536+offset&lt;/code&gt;. Also, in this case it'd be trivial to extend physical address width — by simply giving meaning to higher bits beyond originally used (lower 4 bits of &lt;code&gt;segment&lt;/code&gt; and 16 bits of &lt;code&gt;offset&lt;/code&gt;). Also, in such a case the CPU wouldn't even have to perform any addition to form the physical address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was the actual address formation scheme chosen instead of the more straightforward one? Was it meant to say something like &quot;any extension must be radical&quot;, like a change to 80286 addressing model?&lt;/p&gt;&#xA;" OwnerUserId="1992" LastEditorUserId="3290" LastEditDate="2020-07-14T05:04:58.907" LastActivityDate="2020-07-14T05:04:58.907" Title="Why was segment register value scaled by such a small factor of 16 on i8086?" Tags="&lt;intel&gt;&lt;registers&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1017" PostTypeId="2" ParentId="1016" CreationDate="2016-06-25T21:51:25.803" Score="33" Body="&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Intel_8086#cite_ref-File_15-0&quot;&gt;Wikipedia&lt;/a&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;According to Morse et al.,.[5] the designers actually contemplated using an 8-bit shift (instead of 4-bit), in order to create a 16 MB physical address space. However, as this would have forced segments to begin on 256-byte boundaries, and 1 MB was considered very large for a microprocessor around 1976, the idea was dismissed. Also, there were not enough pins available on a low cost 40-pin package for the additional four address bus pins&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note the 8086 was a originally intended as Intel's rather quick shot at competitor's announced 16-Bit processors. So it had to re-use a lot of existing components. In addition to the reasons mentioned by Wikipedia, I guess the original segment architecture was intended as a sliding window of 64kB over the 1MByte address space. The segment register shift determined the granularity at which the window could be adjusted. So it was a trade-off between adjustable window granularity and addressable memory space - Given it was 1976, I guess 1MByte was considered an astronomically high amount of memory, and the amount of pins was a strong argument as well.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="79" LastEditDate="2016-06-26T07:54:30.710" LastActivityDate="2016-06-26T07:54:30.710" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1018" PostTypeId="1" CreationDate="2016-06-25T22:10:45.060" Score="11" ViewCount="1011" Body="&lt;p&gt;It is well known that some Z80A processors with non functioning M1 signals were assembled into many ZX Spectrums. As this signal is not used in the main board and not everyone bought interfaces that used it, this fault may pass unnoticed during the whole service life of the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now many of these M1-faulty Spectrums have started to show their condition, as retro users want to use DivIDE or DivMMC interfaces with them. These interfaces do need a working M1 signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the Z80A was second sourced by several brands (Mostek, Toshiba, Sharp, SGS and NEC, among others), I'd like to know which of these brands could be considered more reliable in terms of having a working M1 signal (is it there any statistics or anything?)&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="367" LastEditDate="2016-06-25T23:13:10.060" LastActivityDate="2017-08-24T11:52:38.177" Title="Faulty M1 line on the Z80A" Tags="&lt;z80&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1019" PostTypeId="1" CreationDate="2016-06-27T12:02:14.257" Score="4" ViewCount="561" Body="&lt;p&gt;I remember playing a game on the Amstrad 6128 in the '80s or early '90s. It was a space adventure with at least part of the action flying through space and shooting alien ships. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was an option to view the space-fight scenes in red-blue separated 3D and I think the game came with a pair of 3D glasses. The stars (or possibly just space dust!) were rendered as two separate dots, one red, one blue to simulate the 3D effect as well as the enemy ships. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;stars&quot; would zoom past your ship as you were flying. I seem to remember that it had full 3D movement, à la &lt;em&gt;Elite&lt;/em&gt;, although it might have been more limited than that. What's the name of this game?&lt;/p&gt;&#xA;" OwnerUserId="2067" LastEditorUserId="276" LastEditDate="2016-06-27T12:14:36.180" LastActivityDate="2016-12-07T23:16:40.210" Title="What's the name of this game on the Amstrad that had red-blue separated 3D?" Tags="&lt;cpc&gt;&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="1020" PostTypeId="5" CreationDate="2016-06-27T12:15:28.090" Score="0" Body="&lt;p&gt;If seeking to identify a game played on a retrocomputer, please give as much information as possible in order to help readers give an identification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Describe the machine(s) it ran on and the approximate date of release.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Give as much of the game play as possible.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-27T12:15:28.090" LastActivityDate="2016-06-27T12:15:28.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1021" PostTypeId="4" CreationDate="2016-06-27T12:15:28.090" Score="0" Body="For use when seeking identification of a game played on a retrocomputer." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-06-27T12:15:28.090" LastActivityDate="2016-06-27T12:15:28.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1022" PostTypeId="5" CreationDate="2016-06-27T18:50:30.333" Score="0" Body="&lt;p&gt;Use this tag for questions about repairing non-functioning retrocomputing hardware. For improving the condition of working hardware or working parts of a hardware device (which overall may be broken), use the &lt;a href=&quot;/questions/tagged/maintenance&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;maintenance&amp;#39;&quot; rel=&quot;tag&quot;&gt;maintenance&lt;/a&gt; tag.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This tag's use is currently ambiguous, and similar to the use of &lt;a href=&quot;/questions/tagged/maintenance&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;maintenance&amp;#39;&quot; rel=&quot;tag&quot;&gt;maintenance&lt;/a&gt; and &lt;a href=&quot;/questions/tagged/restoration&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;restoration&amp;#39;&quot; rel=&quot;tag&quot;&gt;restoration&lt;/a&gt;. Please use the tag most relevant to your problem.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2017-01-04T21:42:00.100" LastActivityDate="2017-01-04T21:42:00.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1023" PostTypeId="4" CreationDate="2016-06-27T18:50:30.333" Score="0" Body="Retro hardware repair. Use for non-functioning systems; for working systems use [maintenance]." OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2021-02-08T17:30:04.807" LastActivityDate="2021-02-08T17:30:04.807" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1024" PostTypeId="1" CreationDate="2016-06-27T20:20:40.423" Score="12" ViewCount="1627" Body="&lt;p&gt;The Amstrad CPC had three official screen modes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mode 0: 160x200, 16 colours, 4 bits per colour, 2 wide pixels per byte, bit-interleaved&lt;/li&gt;&#xA;&lt;li&gt;Mode 1: 320x200, 4 colours, 2 bits per colour, 4 square pixels per byte, bit-interleaved&lt;/li&gt;&#xA;&lt;li&gt;Mode 2: 640x200, 2 colours, 1 bit per colour, 8 narrow pixels per byte, non-bit-interleaved&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Each mode occupied 16kB of RAM, of which 16 000 bytes were displayed at any one time, with the remaining 384 bytes being off-screen. Scrolling was accomplished by moving the memory offset of the start of the screen instead of by physically moving the data around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was also an unofficial Mode 3 that combined the worst features of Modes 0 &amp;amp; 1: 160x200, 4 colours, 2 bits per colour, 2 wide pixels per byte, bit-interleaved, 4 bits unused per byte. The only way I know of switching to Mode 3 is to muck around with the alternate registers of the CPU directly since the current screen mode is permanently stored there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the bit patterns and considering that due to the limited memory available (16kB ROMs, etc.) you'd expect that Mode 3 would be a mixture of Modes 1 &amp;amp; 2. What was it actually doing under the hood to get such a weird mixture of features?&lt;/p&gt;&#xA;" OwnerUserId="2067" LastActivityDate="2016-09-18T10:12:33.733" Title="How did Mode 3 on the Amstrad CPC work?" Tags="&lt;hardware&gt;&lt;cpc&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1025" PostTypeId="1" CreationDate="2016-06-27T20:53:26.220" Score="13" ViewCount="1923" Body="&lt;p&gt;The Big Book of Amiga Hardware &lt;a href=&quot;http://www.bigbookofamigahardware.com/bboah/product.aspx?id=8&quot;&gt;lists&lt;/a&gt; three different versions of the Amiga 500 rev 5 motherboard which it names Type 1, Type 2, and Type 3. Were the changes made only to simplify manufacturing, or were there any real-life differences between the three that makes one of these better in some way than the others?&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-12-23T22:48:10.053" Title="Practical differences between the three Amiga 500 rev 5 motherboards?" Tags="&lt;amiga&gt;&lt;amiga-500&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1026" PostTypeId="1" AcceptedAnswerId="1031" CreationDate="2016-06-28T08:07:02.583" Score="8" ViewCount="892" Body="&lt;p&gt;I got my hands on an IBM PS/1 computer and it provides a 25-pin serial port connector. Whith the help of an adapter I can get a 9-pin serial port on COM1 and transfer data that way. I would like to know wether the PS/1 implements a secondary COM port on the 25-pin connector or if it is left unconnected.&lt;/p&gt;&#xA;" OwnerUserId="2077" LastActivityDate="2017-04-03T13:15:04.407" Title="Does the 25-pin IBM PS/1 serial port connector contain two serial ports?" Tags="&lt;rs232&gt;&lt;ibm-pc&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1027" PostTypeId="2" ParentId="1001" CreationDate="2016-06-28T08:46:07.320" Score="6" Body="&lt;p&gt;Many would agree that Motorola was in a much better position to develop their 68k into something fast and modern than Intel with their crufty x86 ;) But Motorola stopped and abandoned the 68k in favour the PowerPC (which today still is at the heart of IBM's 5+ GHz POWER CPUs). Most users of 68k CPUs switched to Intel or various RISC CPUs. Commodore and Atari stopped creating new machines altogether.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are of course faster versions of the 68k architecture (eg ColdFire which goes to about 300MHz, and the VAMPIRE2 FPGA core which is only limited by the speed of the FPGA). But just making the CPU faster without improving the rest of the system results in a badly balanced system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look at the original PC, it was (despite its general ugliness) a very well balanced design: the speed of the ISA bus, the bandwidth and the amount of memory, the graphics capabilities, and the disk of the IBM PC/XT roughly matched the capabilities of an 8088. While the CPU often was the bottleneck, every so often it wasn't. In a modern PC, the ratios are similar, and conversely there is very little left of the original XT's architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could of course build an adapter to put a modern Core i7 in an old XT to replace the 8088, and most people would agree that this is silly. There were in fact upgrades (&quot;powerups&quot;) that adapted new CPUs to old sockets (eg to put a 386 in a 286 system), but the result was generally quite disappointing even for such an adapter that skipped just one generation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this is basically what accelerator cards do, they try to shoehorn a faster CPU onto an old architecture while keeping central parts of the existing architecture. Some accelerator cards move more periphery (memory, disks, graphics etc.) onto the accelerator to take advantage of all that new processing power, but this usually comes at the cost of compatibility, and if it's incompatible, what's the point?&lt;/p&gt;&#xA;" OwnerUserId="2049" LastActivityDate="2016-06-28T08:46:07.320" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="1028" PostTypeId="2" ParentId="1001" CreationDate="2016-06-28T08:57:18.890" Score="7" Body="&lt;p&gt;I haven't looked at the architectures, but I suspect that one factor will be that the architecture sometimes will have implicit assumptions about the micro-architectural implementation. To achieve a GHz clock frequency, modern processors use maybe between 8 and 15 pipeline stages - with the expectation that typically all of the stages can be in use by a sqeuence of instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The older architectures are probably closer to 5 pipeline stages, which means more work can be done in a single stage. On modern processes, this scales up to maybe 200 MHz. Adding pipeline stages to get a higher frequency will (simplistically) increase the cycle-per-instruction penalty.&lt;/p&gt;&#xA;" OwnerUserId="46" LastActivityDate="2016-06-28T08:57:18.890" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1029" PostTypeId="2" ParentId="1026" CreationDate="2016-06-28T09:03:05.250" Score="6" Body="&lt;p&gt;DB25 in its very &lt;a href=&quot;http://www.camiresearch.com/Data_Com_Basics/RS232_standard.html#anchor341671&quot; rel=&quot;nofollow noreferrer&quot;&gt;early stage&lt;/a&gt; provided for a &lt;em&gt;secondary&lt;/em&gt; port on the same connector (using pins 12,13,14,16,19).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since then, those secondary and other additional signals became obsolete and even DB25 ports only use up to 9 signals - same as on in DB9 connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible that your motherboard provides another port and you would need to provide a cable for it, or you can install a PCI or ISA card with additional ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to verify would be to check if a system sees any port other than COM0 (or ttyS0), if it does - short pins 14 with 16 and see if you get echo of signals sent to that port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OR - check in the manual for your exact motherboard - it will give you definite answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zxmog.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zxmog.gif&quot; alt=&quot;Original RS232 pinout&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-06-29T02:16:49.597" LastActivityDate="2016-06-29T02:16:49.597" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1030" PostTypeId="1" CreationDate="2016-06-28T12:01:41.453" Score="8" ViewCount="319" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/RS-232&quot; rel=&quot;noreferrer&quot;&gt;RS-232 standard&lt;/a&gt; allows a &lt;a href=&quot;https://en.wikipedia.org/wiki/RS-232#Secondary_channel&quot; rel=&quot;noreferrer&quot;&gt;secondary channel&lt;/a&gt; on a 25-pin connector. Are there any examples where this secondary channel is actually used, in computers resp. devices connected via the serial port? Googling for it mainly turns up &quot;some modems, for administrative purposes, on a slower connection&quot;, but I couldn't find specifics, or examples for computers providing it.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorDisplayName="user12" LastEditDate="2016-06-30T15:28:17.960" LastActivityDate="2016-07-02T06:02:57.707" Title="Examples of usage of secondary channel on 25-pin RS232 serial port" Tags="&lt;rs232&gt;&lt;serial&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1031" PostTypeId="2" ParentId="1026" CreationDate="2016-06-28T12:18:38.093" Score="7" Body="&lt;p&gt;According to the IBM PS/1 Technical Reference Manual, the pin assignment of the serial port is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sB6zq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sB6zq.png&quot; alt=&quot;Technical Reference for PS1 Computer PN 57F1970, p. 9-22&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to answer your question: no, there is neither a second port nor a secondary channel for the first port. All the secondary lines are not connected.&lt;/p&gt;&#xA;" OwnerUserId="2049" LastEditorUserId="2049" LastEditDate="2016-07-01T14:18:31.587" LastActivityDate="2016-07-01T14:18:31.587" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1032" PostTypeId="2" ParentId="1030" CreationDate="2016-06-28T12:46:46.057" Score="3" Body="&lt;p&gt;The only information I found so far is about &lt;a href=&quot;https://en.wikipedia.org/wiki/Telebit&quot; rel=&quot;nofollow&quot;&gt;Telebit&lt;/a&gt; modems where the secondary channel was used to query modem status while the primary channel was busy with data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.verycomputer.com/19_11e08aa2d0aab209_1.htm&quot; rel=&quot;nofollow&quot;&gt;This link&lt;/a&gt; reports an email from Telebit staff on configuration guides and mentions several supported machines - although there is no mention of secondary channel it's likely that some of those machines could have had it provided.&lt;/p&gt;&#xA;" OwnerUserId="367" LastEditorUserId="367" LastEditDate="2016-06-28T13:39:58.503" LastActivityDate="2016-06-28T13:39:58.503" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1033" PostTypeId="2" ParentId="1030" CreationDate="2016-06-28T13:54:07.720" Score="6" Body="&lt;p&gt;You may not be seeing specific platform examples because the use of the secondary channel (like all Standard serial comms) is essentially platform agnostic. It would be found on systems where comms with the remote end, &lt;em&gt;usually&lt;/em&gt; a modem-type device, needed to have the baud rate reset or settings adjusted because of parity errors detected at either end (among others).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, you'd find this used in places where they had a pool of modems, or a critical modem connection to another network. It would also be used on specialty equipment related to things like telephony.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, the modem-type (DCE) equipment would implement this in firmware or hardware via a UART of some sort, and the control end (DTE) could be anything that understood serials comms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specs for these are rather obscure and just don't show up on casual web searches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought HP used this for their proprietary serial networking protocol, but I can't find any confirmation of this. It might have just been plain RS-422/485. (Though the secondary line could have been used there, too. I just can't find evidence that it was for any regular HP equipment from the late 80s.)&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorDisplayName="user12" LastEditDate="2016-06-28T14:00:03.103" LastActivityDate="2016-06-28T14:00:03.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1034" PostTypeId="1" AcceptedAnswerId="1035" CreationDate="2016-06-28T16:27:46.393" Score="14" ViewCount="1116" Body="&lt;p&gt;Double Hi-Res graphics (DHGR) was a nice addition to the Apple ][ line as it allowed for higher resolution 560x192 graphics with 16 colors in comparison to the traditional 280x192 with 6 colors. It first appeared on the Apple //e that came out in 1983. To use the DHGR mode, you needed an 80-column card which fit into the AUX slot and provided the extra RAM needed to support the mode. However, there was a jumper on the 80-column card which determined if the DHGR mode was available and it depended on whether you were using an early revision Apple //e or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the change to the //e motherboard which allowed for DHGR to work? Was it part of the original design or was it a post-production change? Was it not on the original revisions of the motherboard due to bugs or simply because it wasn't designed in?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2016-06-28T19:50:33.017" LastActivityDate="2016-08-01T17:43:23.780" Title="What was the change to the Apple //e motherboard that allowed for Double HiRes graphics?" Tags="&lt;apple-ii&gt;&lt;graphics&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1035" PostTypeId="2" ParentId="1034" CreationDate="2016-06-28T22:44:34.567" Score="16" Body="&lt;p&gt;Appendix G of Sather's excellent &lt;a href=&quot;https://archive.org/details/Understanding_the_Apple_IIe&quot;&gt;Understanding the Apple IIe&lt;/a&gt; has a summary of the changes:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The primary operational improvement of Revision B is the addition of&#xA;  the  DOUBLE-RES graphics capability. This was achieved by rewiring 1/3&#xA;  of the  C5 LS10 NAND gate so that pulling pin 55 of the auxiliary slot&#xA;  low  forces TEXT processing at the timing HAL instead of disabling &#xA;  motherboard ROM as it did in Revision A. [...] The nomenclature of pin&#xA;  55 was appropriately changed from ENFIRM to FRCTXT'. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Changes in the timing HAL and MMU were required to make the new&#xA;  FRCTXT'  wiring work. The Revision B timing HAL treats pin 12 as GR+2'&#xA;  whereas  the Revision A timing HAL treats pin 12 as GR+2. The MMU was&#xA;  changed so  that ROMEN1' and ROMEN2' are gated by INHIBIT', a&#xA;  necessity since the  ROM inhibiting function had been performed by the&#xA;  NAND gate which now  performs the forced text function. [...] &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Wiring and component changes were made to the video summing amplifier&#xA;  in  Revision B, and these would be necessary to realign COLOR&#xA;  REFERENCE to the PICTURE signal if video timing in the HAL were&#xA;  changed. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Another area of change in Revision B was in the functions of&#xA;  motherboard  configuration jumper pads. Two new jumpers were added (X3&#xA;  and X7), and  the functions of XI and X2 were changed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://apple2history.org/history/ah07/&quot;&gt;Apple II History&lt;/a&gt; the feature was designed after Revision A release:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Early Apple IIe motherboards were labelled as “Revision A”. Engineers&#xA;  determined soon after its introduction that if the same use of&#xA;  parallel memory was applied to the hi-res graphics display as was done&#xA;  with the text display, they could create higher density graphics.&#xA;  These graphics, which they called “double hi-res”, also had the&#xA;  capability of displaying a wider range of colors, similar to those&#xA;  available with the original Apple II lo-res graphics. The IIe&#xA;  motherboards with the necessary modifications to display these double&#xA;  hi-res graphics were labelled “Revision B”, and a softswitch was&#xA;  assigned to turn on and off the new graphics mode.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="71" LastActivityDate="2016-06-28T22:44:34.567" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1036" PostTypeId="1" AcceptedAnswerId="1039" CreationDate="2016-06-29T02:01:18.453" Score="6" ViewCount="426" Body="&lt;p&gt;Back in middle school I set up a Windows/DOS TI-83 calculator emulator for some of my teachers.  I can't for the life of me remember the name, but I'm looking for a Mac TI-83 emulator (or any TI-8x family of calculators, TI-83 Plus, TI-84, etc) for Mac.  Anyone know of any Mac or cross-platform solutions?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-29T15:35:26.163" LastActivityDate="2016-06-29T15:35:26.163" Title="TI-83 Series Graphing Calculator Emulator" Tags="&lt;emulation&gt;&lt;software&gt;&lt;ti-83&gt;&lt;calculator&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1037" PostTypeId="5" CreationDate="2016-06-29T02:04:30.643" Score="0" Body="&lt;p&gt;The TI-83 series of graphing calculators is manufactured by Texas Instruments.  Released in 1996, it was one of the most popular graphing calculators for students.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-29T07:56:13.363" LastActivityDate="2016-06-29T07:56:13.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1038" PostTypeId="4" CreationDate="2016-06-29T02:04:30.643" Score="0" Body="For questions about the TI-83 family of calculators." OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-27T06:31:18.020" LastActivityDate="2016-09-27T06:31:18.020" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1039" PostTypeId="2" ParentId="1036" CreationDate="2016-06-29T02:14:37.680" Score="7" Body="&lt;p&gt;&lt;a href=&quot;https://wabbit.codeplex.com&quot;&gt;Wabbitemu&lt;/a&gt; is a modern emulator supporting many TI platforms, it supports TI-73, TI-81, TI-82, TI-83, TI-83+(SE), TI-84+(SE), TI-84+CSE, TI-85, and TI-86&lt;/p&gt;&#xA;" OwnerUserId="367" LastActivityDate="2016-06-29T02:14:37.680" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1040" PostTypeId="1" AcceptedAnswerId="1050" CreationDate="2016-06-29T05:23:32.710" Score="8" ViewCount="348" Body="&lt;p&gt;I'd like to do a presentation using my Apple //e as the video generator. Is there any good &quot;slideshow&quot; or presentation software for the Apple //e other than writing a BASIC program to draw on the HGR screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Preferably I'd like to author the images and/or text on my PC, and the ADTPro a disk to the Apple //e to show off the slideshow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Understanding the limitations of disk size, I expect the slideshow to be mostly text slides, interspersed with graphics. I'm just curious if there's anything out there already for generating graphics and text slides, and displaying them in sequence controlled with the keyboard, or if I just need to brush off my Applesoft BASIC books.&lt;/p&gt;&#xA;" OwnerUserId="22" LastEditorUserId="621" LastEditDate="2016-06-29T14:25:17.560" LastActivityDate="2016-06-29T22:10:57.623" Title="Slideshow software for Apple II?" Tags="&lt;apple-ii&gt;&lt;graphics&gt;&lt;software-recommendation&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1041" PostTypeId="2" ParentId="1040" CreationDate="2016-06-29T06:08:51.877" Score="3" Body="&lt;p&gt;For the &quot;converting images&quot; part, there is &lt;a href=&quot;http://www.appleoldies.ca/bmp2dhr/&quot; rel=&quot;nofollow&quot;&gt;bmp2dhr&lt;/a&gt; to convert (and dither) images in &lt;a href=&quot;https://en.wikipedia.org/wiki/BMP_file_format&quot; rel=&quot;nofollow&quot;&gt;BMP format&lt;/a&gt; to the various Apple formats, including double hires on the IIe. Youtube recordings of such a slideshow loading from disk can be found &lt;a href=&quot;http://www.bytecellar.com/2015/02/07/bmp2dhr-the-best-apple-ii-graphics-youve-seen-this-week/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.bytecellar.com/2015/03/22/bmp2dhgr-revisited-a-slideshow-running-on-real-metal/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. I'm not sure what program he is running to load the images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd assume that each image takes a lot of disk space, so you'll be limited in the number of slides, and if you have a lot of slides with just text, that is maybe not what you are looking for.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-06-29T06:08:51.877" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1042" PostTypeId="2" ParentId="1040" CreationDate="2016-06-29T07:00:14.380" Score="4" Body="&lt;p&gt;You may be able to make use of these:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.appleoldies.ca/azgraphics33/applevu.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.appleoldies.ca/azgraphics33/applevu.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(You'll need to download the Aztec C compiler at the top of this page : &lt;a href=&quot;http://www.appleoldies.ca/azgraphics33/index.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.appleoldies.ca/azgraphics33/index.htm&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.applefritter.com/content/apple-ii-hi-res-pictures&quot; rel=&quot;nofollow&quot;&gt;http://www.applefritter.com/content/apple-ii-hi-res-pictures&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="393" LastActivityDate="2016-06-29T07:00:14.380" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1043" PostTypeId="5" CreationDate="2016-06-29T15:39:58.433" Score="0" Body="&lt;p&gt;Calculator enthusiasts can use this tag to ask hardware or software related questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/ti-83&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;ti-83&amp;#39;&quot; rel=&quot;tag&quot;&gt;ti-83&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-29T15:44:58.443" LastActivityDate="2016-06-29T15:44:58.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1044" PostTypeId="4" CreationDate="2016-06-29T15:39:58.433" Score="0" Body="for questions about retrocomputing calculator hardware and software" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-29T15:45:11.070" LastActivityDate="2016-06-29T15:45:11.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1045" PostTypeId="1" AcceptedAnswerId="1049" CreationDate="2016-06-29T15:45:02.317" Score="6" ViewCount="238" Body="&lt;p&gt;I've been trying to golf more in TI-BASIC and was wondering if there was an interpreter available for Mac.  Bonus points if it is still being actively maintained.&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-06-29T21:54:04.237" Title="TI-BASIC Interpreter for Mac" Tags="&lt;software-recommendation&gt;&lt;ti-83&gt;&lt;calculator&gt;&lt;ti-basic&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1046" PostTypeId="5" CreationDate="2016-06-29T15:46:42.013" Score="0" Body="&lt;p&gt;TI-BASIC can be used on the TI-83 series, TI-84 Plus series, TI-89 series, TI-92 series (including Voyage 200), TI-73, and TI-Nspire.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/ti-83&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;ti-83&amp;#39;&quot; rel=&quot;tag&quot;&gt;ti-83&lt;/a&gt; &lt;a href=&quot;/questions/tagged/calculator&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;calculator&amp;#39;&quot; rel=&quot;tag&quot;&gt;calculator&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-30T00:37:20.343" LastActivityDate="2016-06-30T00:37:20.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1047" PostTypeId="4" CreationDate="2016-06-29T15:46:42.013" Score="0" Body="for questions about Texas Instruments' BASIC-like language" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-30T00:37:13.857" LastActivityDate="2016-06-30T00:37:13.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1048" PostTypeId="2" ParentId="1045" CreationDate="2016-06-29T15:55:35.073" Score="1" Body="&lt;p&gt;&lt;strong&gt;(This is a work-in-progress answer I hope to expand on as I continue to evaluate options.)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've found two so far that I am currently evaluating:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/lunixbochs/pitybas&quot; rel=&quot;nofollow&quot;&gt;pitybas&lt;/a&gt;, which claims to be a faithful interpreter written in Python.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://tibasic.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;tibasic&lt;/a&gt;, written in C++. Windows binaries are provided, with a Mac/Linux version supposedly in development. There has been no news on this since 2012. This is not actually an interpreter, but rather claims to compile to a format &lt;a href=&quot;https://sourceforge.net/projects/tibasic/&quot; rel=&quot;nofollow&quot;&gt;suitable for direct TI-83/83+/84+ device development&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-06-29T16:11:42.557" LastActivityDate="2016-06-29T16:11:42.557" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1049" PostTypeId="2" ParentId="1045" CreationDate="2016-06-29T21:54:04.237" Score="4" Body="&lt;p&gt;&lt;a href=&quot;http://js99er.net/&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is a TI 99/4a emulator written in JavaScript that runs in a web browser. When it starts up, press any key to begin, then press 1 for TI BASIC. This brings you to the BASIC interpreter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://mamedev.org/release.html&quot; rel=&quot;nofollow&quot;&gt;MAME&lt;/a&gt; as of v0.162 contains a TI 99/4a emulator. Binaries are available for Windows, Mac, and Linux.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-06-29T21:54:04.237" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1050" PostTypeId="2" ParentId="1040" CreationDate="2016-06-29T22:10:57.623" Score="8" Body="&lt;p&gt;If you don't need ProDOS, &lt;a href=&quot;http://beagle.applearchives.com/the_software/vintage_beagle_bros_softwar/frame-up.html&quot;&gt;Frame-Up&lt;/a&gt; by Beagle Brothers might suit your needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The image there is a little hard to read, so here is the feature list:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;PROFESSIONAL PRESENTATIONS: Frame-Up lets you use your Apple to make displays of Hi-Res, Lo-Res and Text frames on large-screen or standard&#xA;  monitors.&lt;/li&gt;&#xA;  &lt;li&gt;HIGH SPEED: Frame-Up Is FAST, allowing you to display Hi-Res Images In 2 1/2 seconds, more than FOUR TIMES faster than normal.&lt;/li&gt;&#xA;  &lt;li&gt;FORWARD &amp;amp; REVERSE: Frame-Up allows you to move through a presentation in forward or REVERSE order (under keyboard or paddle&#xA;  control), to SKIP any frame, and to instantly RE-ARRANGE the order of&#xA;  images.&lt;/li&gt;&#xA;  &lt;li&gt;INCREASED DISK STORAGE: Store up to 17 Hi-Res or 136 Lo-Res/Text frames (or a combination of types) on a single disk. Frame-Up works&#xA;  equally-well with one or two drives.&lt;/li&gt;&#xA;  &lt;li&gt;UNLIMITED SHOW LENGTH: Frame-Up allows you to link any number of disks together without interrupting your presentation.&lt;/li&gt;&#xA;  &lt;li&gt;UNATTENDED OPERATION: Frame-Up lets you present shows that may be left unattended, with each image individually timed to remain on the&#xA;  screen from 1 TO 99 SECONDS. Frame-Up's professional design includes&#xA;  automatic recovery from power outages in Unattended Mode.&lt;/li&gt;&#xA;  &lt;li&gt;TEXT SCREEN EDITOR: Unlike other display utilities, Frame-Up lets you display TEXT IMAGES as well as Hi- and Lo-Res graphics. Frame-Up&#xA;  includes on EDITOR that allows you to create black-and-white text&#xA;  frames. You can even odd type &quot;live&quot; on the screen during&#xA;  presentatlons. (Frame-Up does not include software for creating HI- or&#xA;  Lo-Res graphics.)&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="71" LastActivityDate="2016-06-29T22:10:57.623" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1051" PostTypeId="2" ParentId="1030" CreationDate="2016-06-29T23:30:33.917" Score="4" Body="&lt;p&gt;In addition to things the other answers have mentioned, in the early days of data communication the main channel was sometimes half duplex because the electronics weren't up to more, but there was a secondary channel at a much slower data rate and this line in the RS232 cable was used to control it.  BTW, the kind of numbers I'm talking about are a high speed channel at 600 bps half duplex and a secondary channel with rates as low as 1 bps, in that case primarily used to send the one bit message &quot;stop sending, I urgently need to tell you something&quot;.&lt;/p&gt;&#xA;" OwnerUserId="1988" LastEditorUserId="1988" LastEditDate="2016-07-02T06:02:57.707" LastActivityDate="2016-07-02T06:02:57.707" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1053" PostTypeId="1" AcceptedAnswerId="1055" CreationDate="2016-06-30T14:39:49.777" Score="11" ViewCount="1571" Body="&lt;p&gt;I know the basic specs of a first-generation &lt;a href=&quot;https://en.wikipedia.org/wiki/MSX#MSX_.28first_generation.29&quot; rel=&quot;noreferrer&quot;&gt;MSX compliant computer&lt;/a&gt;.  What I'm looking for are some schematics on how to build one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something simple that, preferably, didn't use custom ICs that combined functions.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(For example, I think some manufacturers created custom ICs that combined the video/audio and even the CPU or glue logic.  But, hopefully, at least one was made with discreet components?  Well, that is, if you count the VDP and PSG as discreet.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many variations of the MSX but I'm only interested in a minimal configuration:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Z80&lt;/li&gt;&#xA;&lt;li&gt;TMS9918&lt;/li&gt;&#xA;&lt;li&gt;AY-3-8912&lt;/li&gt;&#xA;&lt;li&gt;32-64K RAM&lt;/li&gt;&#xA;&lt;li&gt;I/O&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Please, no references to FPGA or CPLD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps it's more complicated than I think?  If so, please explain why.  I do have basic electronic skills.  I have built other SBC's, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I'm not currently interested in any &lt;a href=&quot;https://en.wikipedia.org/wiki/MSX#MSX2&quot; rel=&quot;noreferrer&quot;&gt;MSX2 designs&lt;/a&gt;.  &lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorDisplayName="user12" LastEditDate="2016-06-30T15:27:20.223" LastActivityDate="2019-10-01T16:47:15.927" Title="Where can I find schematics for a simple first-generation MSX computer?" Tags="&lt;msx&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1054" PostTypeId="1" CreationDate="2016-06-30T15:41:22.370" Score="12" ViewCount="1108" Body="&lt;p&gt;My Amiga 3000 is starting to show its age, and recently one of the two internal floppy disk drives appears to have given up the ghost...  I'd like to replace the drive but the A3000 case doesn't have a standard 3.5&quot; rectangle for the drive's faceplate.  Instead, the A3000 case has a molded 'slot' for the floppy to fit through and for the 'eject-button' to fit through.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This brings me to two questions: first, is there a supplier of 'new' compatible floppy disk drives for vintage Amigas?  And second, what is the solution to the faceplate/button problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've done some light googling, and located a few overseas vendors selling drives, but they seem to always show drives with standard faceplates.  I don't doubt a drive designed to work with an Amiga 500/1200/2000/whatever would work electrically; it will probably even mount in the bay just fine, but the mechanics of the faceplate/button arrangement seems flaky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="6915" LastEditDate="2020-02-03T09:54:13.470" LastActivityDate="2020-02-03T09:54:13.470" Title="Replacing the floppy drives in my Amiga 3000" Tags="&lt;amiga&gt;&lt;floppy-disk&gt;&lt;repair&gt;&lt;amiga-3000&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1055" PostTypeId="2" ParentId="1053" CreationDate="2016-06-30T18:32:29.720" Score="16" Body="&lt;p&gt;The &lt;a href=&quot;http://www.zxprojects.com/images/stories/philipsvg802000sm.pdf&quot;&gt;Philips VG 8020 schematics&lt;/a&gt; suits your needs. It has no custom chips apart from 8255, AY-3-8912 and TMS9929. All the glue logic is composed of discrete TTL chips.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-06-30T18:32:29.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1056" PostTypeId="2" ParentId="696" CreationDate="2016-07-01T06:39:17.057" Score="6" Body="&lt;p&gt;Another option to build CP/M 2.2 is to build the sources inside a Z80 emulator as described on the &lt;a href=&quot;http://www.autometer.de/unix4fun/z80pack/doc_cpm22_src.html&quot; rel=&quot;noreferrer&quot;&gt;z80pack site&lt;/a&gt;. I tried this with &lt;a href=&quot;http://www.autometer.de/unix4fun/z80pack/ftp/z80pack-1.28.tgz&quot; rel=&quot;noreferrer&quot;&gt;z80pack version 1.28&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Install the &lt;a href=&quot;http://www.autometer.de/unix4fun/z80pack/ftp/cpm22src.tgz&quot; rel=&quot;noreferrer&quot;&gt;CP/M source disk images&lt;/a&gt; inside z80pack. Modify the &lt;code&gt;cpm22src&lt;/code&gt; shell script:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;change &lt;code&gt;.cpm&lt;/code&gt; to &lt;code&gt;.dsk&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;replace &lt;code&gt;./format c&lt;/code&gt; with &lt;code&gt;mkfs.cpm disks/drivec.dsk&lt;/code&gt;, same for &lt;code&gt;d&lt;/code&gt; (you need &lt;code&gt;cpmtools&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Build process:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ ./cpm22src&#xA;A&amp;gt;submit cmd1&#xA;A&amp;gt;submit cmd3&#xA;A&amp;gt;submit cmd4&#xA;A&amp;gt;submit cmd5&#xA;A&amp;gt;submit kernel-s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Running &lt;code&gt;movcpm&lt;/code&gt; directly fails, so you do the workaround:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A&amp;gt;ddt d:movcpm.com&#xA;DDT VERS 2.2&#xA;NEXT  PC&#xA;2700 0100&#xA;-s234&#xA;0234 C2 0&#xA;0235 5A 0&#xA;0236 02 0&#xA;0237 02 .&#xA;-s2cb&#xA;02CB C2 0&#xA;02CC 5A 0&#xA;02CD 02 0&#xA;02CE 23 .&#xA;-i64 *&#xA;-g&#xA;CONSTRUCTING 64k CP/M vers 2.2&#xA;READY FOR &quot;SYSGEN&quot; OR&#xA;&quot;SAVE 34 CPM64.COM&quot;&#xA;A&amp;gt;save 34 d:cpm64.sys&#xA;A&amp;gt;d:sysgen d:cpm64.sys&#xA;SYSGEN VER 2.0&#xA;DESTINATION DRIVE NAME (OR RETURN TO REBOOT)d&#xA;DESTINATION ON D, THEN TYPE RETURN&#xA;FUNCTION COMPLETE&#xA;DESTINATION DRIVE NAME (OR RETURN TO REBOOT)&#xA;&#xA;A&amp;gt;bye&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now move the disk image &lt;code&gt;d&lt;/code&gt; to &lt;code&gt;a&lt;/code&gt;, and boot again:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rm disks/drive[ab].dsk&#xA;$ mv disks/drived.dsk disks/drivea.dsk&#xA;$ ./cpmsim&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There were error messages in the build process, at least some of which appear to be benign. I haven't verified any functions in the new system except that it boots, so there may very well be some problems to fix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also tried the two versions of the &lt;a href=&quot;http://www.autometer.de/unix4fun/z80pack/index.html#download&quot; rel=&quot;noreferrer&quot;&gt;PL/M cross compiler&lt;/a&gt;. They compile fine under GNU Fortran, but fail on the PL/M sources for CP/M, so there appear to be some differences in the language variant used.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-07-01T06:39:17.057" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1057" PostTypeId="2" ParentId="1054" CreationDate="2016-07-01T07:23:23.540" Score="9" Body="&lt;p&gt;&lt;a href=&quot;http://jope.fi/drives/&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; and &lt;a href=&quot;http://jope.fi/drives/computolio/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; are lists of drives that work on Amigas either natively or that can be electrically modified to work on Amigas. Some of the drives are still in production. Those vendors you found selling drives for Amigas probably already made any necessary electrical modifications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, those drives are 1&quot; tall, so if the Amiga 3000 takes 1-1/4&quot; tall drives, you may need to add &lt;a href=&quot;http://jope.fi/amiga/a500drives/index.php?sfpg=KjE5MDcyMDA5MTg3LmpwZyoxN2RkNTI1OWY4OGRhYjk4MjdjYjg5ZDY4NDAxMDc4MDZmNzZmYTc1ZDc3NjUzZjExNTdlOWVmYTQyNDU5MjM3&quot; rel=&quot;noreferrer&quot;&gt;1/4&quot; spacers&lt;/a&gt; to the mounting holes on what looks like the bottom of the drive to get the drive to fit properly in the chassis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then for the Amiga 3000, I expect you will need to remove the faceplate from the new drive. If the old eject button doesn't fit properly on the new drive, you may need to fashion a new button like &lt;a href=&quot;http://amigastore.eu/en/415-internal-floppy-disk-drive-for-amiga-6001200.html&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt; for the A600 and A1200 and &lt;a href=&quot;http://amigastore.eu/en/476-internal-floppy-disk-drive-for-amiga-500.html&quot; rel=&quot;noreferrer&quot;&gt;this slightly different one&lt;/a&gt; for the A500. Have you done any 3-D design work or CNC milling/3D printing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have a definitive answer for you, but I hope this helps a little. Let us know what you discover.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2016-07-05T21:23:40.473" LastActivityDate="2016-07-05T21:23:40.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1058" PostTypeId="2" ParentId="3" CreationDate="2016-07-01T19:24:47.997" Score="7" Body="&lt;p&gt;Another solution, albeit somewhat out of date, is to connect an original 1541 disk drive to a PC via the parallel port using a special cable and software like &quot;The Star Commander&quot; by Joe Forster (available from &lt;a href=&quot;http://sta.c64.org/sc.html&quot; rel=&quot;noreferrer&quot;&gt;http://sta.c64.org/sc.html&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing it this way is more of a labor-of-love approach as you need to get your hands on an original 1541 disk drive, manufacture your own data cable, locate a PC with an appropriate OS and parallel port, and spend an evening tinkering to get everything going.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you get interested in going this route, full documentation, software, cable pin-outs and more can be found at the web site listed above. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been imaging my collection of C64 disks this way as a background task and it works perfectly acceptably, but it requires and investment in time and hardware (and patience!).&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2016-07-01T19:24:47.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1059" PostTypeId="5" CreationDate="2016-07-01T21:53:51.230" Score="0" Body="&lt;p&gt;In computing, a serial port is a serial communication interface through which information transfers in or out one bit at a time.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-02T04:25:00.040" LastActivityDate="2016-07-02T04:25:00.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1060" PostTypeId="4" CreationDate="2016-07-01T21:53:51.230" Score="0" Body="Serial communication: cables, protocols, ports and controllers like UARTs." OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2021-02-03T14:38:16.593" LastActivityDate="2021-02-03T14:38:16.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1061" PostTypeId="5" CreationDate="2016-07-01T21:59:12.980" Score="0" Body="&lt;p&gt;Use this tag to ask questions about joystick hardware or interfaces in a retrocomputing context.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-02T04:25:05.243" LastActivityDate="2016-07-02T04:25:05.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1062" PostTypeId="4" CreationDate="2016-07-01T21:59:12.980" Score="0" Body="for questions on joystick hardware and software" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-02T04:25:39.133" LastActivityDate="2016-07-02T04:25:39.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1063" PostTypeId="5" CreationDate="2016-07-01T22:01:38.763" Score="0" Body="&lt;p&gt;Use this tag to ask questions on hardware testing: connecting external devices over serial or parallel ports, etc.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-02T04:25:10.930" LastActivityDate="2016-07-02T04:25:10.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1064" PostTypeId="4" CreationDate="2016-07-01T22:01:38.763" Score="0" Body="for questions on hardware testing" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-02T04:25:22.417" LastActivityDate="2016-07-02T04:25:22.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1065" PostTypeId="5" CreationDate="2016-07-01T22:03:11.717" Score="0" Body="&lt;p&gt;Popular questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://retrocomputing.stackexchange.com/q/606/621&quot;&gt;What kind of software was used to develop Nintendo 64 titles?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-02T04:25:28.150" LastActivityDate="2016-07-02T04:25:28.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1066" PostTypeId="4" CreationDate="2016-07-01T22:03:11.717" Score="0" Body="For questions about Software Development Kits and their usage for retrocomputing hardware and software." OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-27T06:29:22.950" LastActivityDate="2016-09-27T06:29:22.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1069" PostTypeId="2" ParentId="1025" CreationDate="2016-07-03T01:12:36.680" Score="8" Body="&lt;p&gt;It is hard to find authoritative information about the differences between the various A500 PCB revisions but aside from what is already signalled in the Big Book of Amiga Hardware they essentially differ by the position and types of the jumpers which control how the expansion memory can be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These jumpers serve to specify whether the expansion memory should be used as slow RAM or chip RAM and their position change between boards revisions. For some models, in addition to modifying the jumpers it is also necessary to draw wires between various points of the board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alas, this information does not seem to be collected in a single place at the moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update (2017/12/23):&lt;/strong&gt;&#xA;An initiative to reverse engineer Amiga PCBs and visualize them in schematics form is currently ongoing and is visible at &lt;a href=&quot;http://amigapcb.org&quot; rel=&quot;noreferrer&quot;&gt;http://amigapcb.org&lt;/a&gt;. Their beta site covers one of the A500 revision so it might be of interest to you.&lt;/p&gt;&#xA;" OwnerUserId="2056" LastEditorUserId="2056" LastEditDate="2017-12-23T22:48:10.053" LastActivityDate="2017-12-23T22:48:10.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1070" PostTypeId="2" ParentId="151" CreationDate="2016-07-03T03:20:17.323" Score="5" Body="&lt;p&gt;Given that the present answers are all over the place and seem to completely miss the point here is an attempt to answer your questions properly:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[HAM and EHB] where these ever used outside paint programs, for instance in games?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HAM and EHB modes have been used many times, mostly for static images such as loading and story telling screens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Hall Of Light (HOL) site which lists most known Amiga games offers a method to list them by graphic mode: &lt;a href=&quot;http://hol.abime.net/hol_search.php?N_ref_genre_quickmatch=81&quot; rel=&quot;noreferrer&quot;&gt;HAM games&lt;/a&gt;, and &lt;a href=&quot;http://hol.abime.net/hol_search.php?N_ref_genre_quickmatch=80&quot; rel=&quot;noreferrer&quot;&gt;EHB games&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If so, was there any interactive animation/movement with these screen modes?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, definitely. ;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the games linked to above also used these modes during dynamic screens.&#xA;HAM games:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://hol.abime.net/1068&quot; rel=&quot;noreferrer&quot;&gt;Pioneer Plague&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://hol.abime.net/892&quot; rel=&quot;noreferrer&quot;&gt;Links, The Challenge of Golf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;EHB games:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://hol.abime.net/126&quot; rel=&quot;noreferrer&quot;&gt;BlackCrypt/Raven Software&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://hol.abime.net/530&quot; rel=&quot;noreferrer&quot;&gt;Fighting Spirit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2056" LastEditorUserId="2056" LastEditDate="2016-07-03T03:25:33.530" LastActivityDate="2016-07-03T03:25:33.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1071" PostTypeId="1" AcceptedAnswerId="1072" CreationDate="2016-07-03T06:40:10.693" Score="6" ViewCount="905" Body="&lt;p&gt;Is there a website where I can find the old games that where pre-installed in the Apple IIc ROM? When I could not get an OS disk, I could still have some fun with my Apple IIc by playing those arcade games from the ROM (space-invaders, &amp;hellip;) and there was a shortcut that gave me access to the source code, too. Also, is there any corresponding emulator for modern PC/Mac computers?&lt;/p&gt;&#xA;" OwnerUserId="2086" LastEditorUserId="47" LastEditDate="2016-07-03T17:37:11.977" LastActivityDate="2017-11-17T17:27:45.927" Title="Arcade games in Apple IIc's ROM" Tags="&lt;apple-ii&gt;&lt;rom&gt;&lt;gaming&gt;&lt;arcade&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1072" PostTypeId="2" ParentId="1071" CreationDate="2016-07-03T10:17:41.030" Score="8" Body="&lt;p&gt;I don't remember any embedded games, but I would highly recommend Virtual II (&lt;a href=&quot;http://www.virtualii.com/&quot;&gt;http://www.virtualii.com/&lt;/a&gt;) for Apple II emulation.  Its free if used in a limited fashion, otherwise you need to buy a license, but it does just about everything you could possibly think of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as a short-cut for access to the 'source code', the only thing I can think of is that you are asking for how to access the ROM monitor.  From the command prompt:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;]CALL -151&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This will drop you into the monitor, where you can query RAM address and disassemble whatever is in memory (RAM/ROM).  For example, after entering the ROM monitor you will get a * prompt.  You can type a memory address followed by the letter L (with no spaces) to list (disassemble) memory, like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*FF69L&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;More information regarding using the monitor can be found here: &lt;a href=&quot;http://www.classiccmp.org/cini/pdf/Apple/Apple%20II%20(Redbook)%20Reference%20Manual%2030th%20Anniversary.pdf&quot;&gt;http://www.classiccmp.org/cini/pdf/Apple/Apple%20II%20(Redbook)%20Reference%20Manual%2030th%20Anniversary.pdf&lt;/a&gt; starting around page 68 or so.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2016-07-03T10:17:41.030" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1073" PostTypeId="1" AcceptedAnswerId="1074" CreationDate="2016-07-04T09:55:02.720" Score="1" ViewCount="156" Body="&lt;p&gt;I'm trying to troubleshoot a memory-detection problem on an old Pentium MMX system with a 430VX chipset.  I've got the following memory timing options in the BIOS:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DRAM Precharge Wait State: 0, 1&#xA;DRAM Wait State: 0, 1&#xA;DRAM Read Burst (EDO/FP): x444/x444, x333/x444, x222/x333, x322/x333&#xA;DRAM Write Burst Timing: x444, x333, x222&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which options are the most conservative/have the widest compatibility?&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-07-04T13:30:48.587" Title="Memory timings for a 430VX mainboard" Tags="&lt;ibm-pc&gt;&lt;memory&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1074" PostTypeId="2" ParentId="1073" CreationDate="2016-07-04T13:30:48.587" Score="4" Body="&lt;p&gt;You haven't told us what your SDRAM modules specifications are (PC100? PC133?). That would be useful to narrow your choices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most conservative settings would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DRAM Precharge Wait State: 1&#xA;DRAM Wait State: 1&#xA;DRAM Read Burst (EDO/FP): x444/x444&#xA;DRAM Write Burst Timing: x444&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The first two insert a wait state to the processor. The remaining two uses 4 RAM clock cycles for each operation (open, read, precharge).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to try also &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DRAM Precharge Wait State: 1&#xA;DRAM Wait State: 1&#xA;DRAM Read Burst (EDO/FP): x322/x333&#xA;DRAM Write Burst Timing: x222&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In case the problem is that the CPU is too fast for this memory: these settings will slow the CPU a bit, while operating the RAM at its top speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is some setting to modify the base clock for the processor and/or the multiply factor, use them to give your CPU a slower clock.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-07-04T13:30:48.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1075" PostTypeId="1" CreationDate="2016-07-05T12:31:11.867" Score="11" ViewCount="3800" Body="&lt;p&gt;I maintain an older Pentium III running Windows 98 as part of my collection of vintage machines.  I named the box &quot;Bridgette&quot; because it basically is used to bridge my older machines into the modern world.  In addition to having all kinds of old/weird hardware installed, my Apple //, Commodore 64 and Amiga 3000 are all connected via a serial cable to an A/B/C/D box which is then connected via NULL modem to COM1 on Bridgette.  This makes it very convenient to download from the interwebs, copy the data to Bridgette, fire up HyperTerminal and use Zmodem to transfer the data to one of my older machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now what I would like to do, if possible, is install something like PUTTY on Bridgette (the Windows 98 box) to establish an outbound Telnet session, but pipe the IO of that session to COM1.   The idea being that from the terminal software of the older computer I should be able to 'telnet' to BBS over the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen this done using a Raspberry Pi because the GPIO on the PI can basically pipe the shell right to the TX/RX lines, and with a Max3232 in place you can easily drive an RS-232 connection.  But I already have Bridgette sitting there and wired up, and well, it seems like it should be so &lt;em&gt;easy&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to recap, I am looking for a solution, that would work under Windows 98 to allow an external 'dumb' terminal connected to COM1 to interact with an 'telnet session' to an external server (most likely on the internet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope I am making sense.  Thanks!&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="278" LastEditDate="2016-07-05T20:10:20.467" LastActivityDate="2016-07-09T18:00:25.900" Title="Creating a 'bridge' between a serial port and a Telnet session in Windows 98?" Tags="&lt;rs232&gt;&lt;serial&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1076" PostTypeId="2" ParentId="1075" CreationDate="2016-07-05T12:48:43.390" Score="3" Body="&lt;p&gt;You want TcpSerSharp.  This is a program that allows you to map a COM port to an outbound internet connection.  You can download it at:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/sharpninja/tcpsersharp/releases&quot; rel=&quot;nofollow&quot;&gt;https://github.com/sharpninja/tcpsersharp/releases&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The installer may error out due to not having windows services available.  If it does, let me know and I'll send you a binary you can run from Command Line to start the application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;** Full Disclosure **&#xA;I ported TcpSerSharp from Jim Brain's TCPSER4J.  Please do not contact Jim about this program.&lt;/p&gt;&#xA;" OwnerUserId="260" LastActivityDate="2016-07-05T12:48:43.390" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1077" PostTypeId="2" ParentId="1075" CreationDate="2016-07-06T04:05:27.293" Score="13" Body="&lt;p&gt;In DOS, I remember being able to start &lt;code&gt;COMMAND.COM&lt;/code&gt; on a COM port simply by doing this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;REM Set COM1 speed and settings&#xA;MODE COM1:38400,N,8,1&#xA;&#xA;REM Hand over control to COM1!&#xA;COMMAND COM1&#xA;&#xA;REM The remote typed &quot;exit&quot;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You could then use a remote terminal connected to COM1 to give DOS commands on that machine - and simply type &lt;code&gt;exit&lt;/code&gt; to return the machine back to the normal command line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used it so much that I don't remember whether I ever did it with Windows 95 or 98 though...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it did work, you could then use your old machines' terminals to tell the PC what to do (such as &lt;code&gt;dir&lt;/code&gt; or &lt;code&gt;copy X.txt Y.txt&lt;/code&gt;), including using the command-line &lt;code&gt;telnet.exe&lt;/code&gt; that came with Win98 rather than the &lt;code&gt;putty.exe&lt;/code&gt; GUI program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;telnet bbs.com&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3&gt;Edit&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;It turns out that &lt;code&gt;telnet.exe&lt;/code&gt; on Windows 98 isn't a true console application, so it doesn't redirect output. &lt;em&gt;Sigh!&lt;/em&gt; So I asked &quot;How hard could it be?&quot; - and wrote one. It is available here:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://github.com/JohnBurger/StdTel/blob/master/StdTel.zip&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/JohnBurger/StdTel/blob/master/StdTel.zip&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't claim it's the best program in the world - nor indeed that it works on Windows 98 (sorry, I couldn't test it on that). But I was able to connect over the Internet to some sites with it, and use redirected I/O to communicate. So: please tell me how it works?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To use it is easy: it doesn't require installation: just unZIP the &lt;code&gt;.exe&lt;/code&gt; somewhere and run it. It has a command line that you can get by simply typing its name:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;C:\&amp;gt;&lt;/code&gt;&lt;strong&gt;&lt;code&gt;StdTel&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Usage:&#xA;      StdTel &amp;lt;host&amp;gt; [&amp;lt;port&amp;gt;]&#xA;Communicate with &amp;lt;host&amp;gt; on &amp;lt;port&amp;gt; [default=23] over a network.&#xA;To exit, type &amp;lt;Ctrl&amp;gt;&amp;lt;]&amp;gt;&amp;lt;Enter&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;C:\&amp;gt;&lt;/code&gt;&lt;strong&gt;&lt;code&gt;StdTel www.google.com.au 80&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Connecting to www.google.com.au on port 80.&#xA;Trying 216.58.199.35... Success!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;GET /&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;HTTP/1.0 302 Found&#xA;Cache-Control: private&#xA;Content-Type: text/html; charset=UTF-8&#xA;Location: http://www.google.com.au/?gfe_rd=cr&amp;amp;ei=uy-BV7H9IqPM8gfo26OYBA&#xA;Content-Length: 262&#xA;Date: Sat, 09 Jul 2016 17:09:15 GMT&#xA;&#xA;&amp;lt;HTML&amp;gt;&amp;lt;HEAD&amp;gt;&amp;lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html;charset=utf-8&quot;&amp;gt;&#xA;&amp;lt;TITLE&amp;gt;302 Moved&amp;lt;/TITLE&amp;gt;&amp;lt;/HEAD&amp;gt;&amp;lt;BODY&amp;gt;&#xA;&amp;lt;H1&amp;gt;302 Moved&amp;lt;/H1&amp;gt;&#xA;The document has moved&#xA;&amp;lt;A HREF=&quot;http://www.google.com.au/?gfe_rd=cr&amp;amp;amp;ei=uy-BV7H9IqPM8gfo26OYBA&quot;&amp;gt;here&#xA;&amp;lt;/A&amp;gt;.&#xA;&amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...for what it's worth. Any suggestions as to improvements will be gratefully received.&lt;/p&gt;&#xA;" OwnerUserId="1980" LastEditorUserId="1980" LastEditDate="2016-07-09T18:00:25.900" LastActivityDate="2016-07-09T18:00:25.900" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="1078" PostTypeId="5" CreationDate="2016-07-08T23:32:01.353" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-07-08T23:32:01.353" LastActivityDate="2016-07-08T23:32:01.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1079" PostTypeId="4" CreationDate="2016-07-08T23:32:01.353" Score="0" Body="For questions about the Amiga 500 (A500) home and personal computer " OwnerUserId="37" LastEditorUserId="37" LastEditDate="2016-07-09T04:53:56.893" LastActivityDate="2016-07-09T04:53:56.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1080" PostTypeId="5" CreationDate="2016-07-08T23:32:47.543" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-07-08T23:32:47.543" LastActivityDate="2016-07-08T23:32:47.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1081" PostTypeId="4" CreationDate="2016-07-08T23:32:47.543" Score="0" Body="For questions about retro devices from the Soviet Union (USSR)" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2016-07-09T04:53:52.267" LastActivityDate="2016-07-09T04:53:52.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1083" PostTypeId="1" AcceptedAnswerId="1200" CreationDate="2016-07-10T19:09:49.917" Score="10" ViewCount="604" Body="&lt;p&gt;Xenix was the most popular Unix flavour of the 80's. However, it was designed before the POSIX standards came to be, and its final version was released shortly after the first POSIX specification was written.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many programs written for *nix-like operating systems since the 1980's conform to, and often rely on, POSIX specifications. So in order to work with Xenix, we need to know how it behaves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how compatible &lt;em&gt;is&lt;/em&gt; Xenix with modern POSIX standards?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-03-11T20:49:36.910" LastActivityDate="2017-03-11T20:49:36.910" Title="How POSIX-compliant is Xenix?" Tags="&lt;compatibility&gt;&lt;operating-system&gt;&lt;xenix&gt;&lt;unix&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1084" PostTypeId="1" AcceptedAnswerId="1085" CreationDate="2016-07-11T00:14:05.457" Score="12" ViewCount="1090" Body="&lt;p&gt;I am currently trying to mount a 3.5'' floppy disk drive in a modern computer.  What I did is that I bought a &lt;strong&gt;34-pin floppy drive connector to external USB adapter&lt;/strong&gt; so that I can connect it to my modern motherboard using a &lt;strong&gt;4 pins internal USB to external USB adapter&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The floppy drive works well, I can write and read floppy disks under Linux Mint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I tried to write a few OSes to floppies to try to boot on (the floppy drive can be booted on via the USB  adapter). Writing the OS images to the floppies works fine, and I can boot on them. But each time I boot on one of them, the OS doesn't seem to load. It usually prints out the OS name on screen, and then it locks, seemingly loading indefinitely. And while it's stuck, the floppy drive doesn't make a sound and its LED stays turned off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the OSes I tried:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Freedos; &lt;/li&gt;&#xA;&lt;li&gt;The All In One Boot Floppy (&lt;a href=&quot;http://schierlm.users.sourceforge.net/bootdisk/&quot; rel=&quot;noreferrer&quot;&gt;http://schierlm.users.sourceforge.net/bootdisk/&lt;/a&gt;); &lt;/li&gt;&#xA;&lt;li&gt;MS-DOS 6.22;&lt;/li&gt;&#xA;&lt;li&gt;fdlinux (&lt;a href=&quot;http://www.fdlinux.com/&quot; rel=&quot;noreferrer&quot;&gt;http://www.fdlinux.com/&lt;/a&gt;) (Got Err=1 Message).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here are my computer's specs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Motherboard: Asus P8Z77-V Pro/Thunderbolt&lt;/li&gt;&#xA;&lt;li&gt;Processor: Intel Core i5-3570K&lt;/li&gt;&#xA;&lt;li&gt;RAM: 8 Gb&lt;/li&gt;&#xA;&lt;li&gt;Operating System: Linux Mint 17.3 Cinnamon 64bit;&lt;/li&gt;&#xA;&lt;li&gt;Floppy Drive: Alps Electric Co., LTD. DF354H(121G) (Not sure if that's the model reference);&lt;/li&gt;&#xA;&lt;li&gt;Floppy Drive USB Adapter: TEAC USB UF000x (This is the how it's named in the BIOS/UEFI) (34pin floppy connector to USB adapter cable).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Has anyone already encountered this problem? Does it come from my floppy drive, the USB adapter or the OSes?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorDisplayName="user12" LastEditDate="2016-07-13T21:37:02.007" LastActivityDate="2018-06-15T08:18:26.137" Title="Bootable floppies lock up with floppy drive connected via USB adapter" Tags="&lt;floppy-disk&gt;&lt;disk-drive&gt;&lt;ms-dos&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1085" PostTypeId="2" ParentId="1084" CreationDate="2016-07-11T05:56:10.983" Score="14" Body="&lt;p&gt;In the first phase of the boot process, the &lt;a href=&quot;https://en.wikipedia.org/wiki/BIOS&quot;&gt;BIOS&lt;/a&gt; loads the first sector of the disk into memory and executes it. The code in this sector then uses the BIOS to load the code for the second phase, which in turn use their own drivers to load and initialize the remaining OS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BIOS knows how to access the USB floppy drive. But when you try to boot an OS that doesn't have drivers for floppy via USB, it gets to the second phase (where it will print the OS name etc.), but it can't load the remaining OS because it can't access the USB floppy as soon as it stops using the BIOS (it could access an internal floppy or harddisk).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you need to have an OS that includes the drivers to finish the boot from floppy via USB. You can make a &lt;a href=&quot;http://freedos.sourceforge.net/wiki/index.php/USB&quot;&gt;bootable USB stick&lt;/a&gt; for Freedos, but it looks like they use an additional bootloader (grub, syslinux) that has USB drivers, so this probably won't work for a USB floppy (the bootloaders may be too large to fit on the disk together with all the files you want to have on the disk).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just accessing USB storage devices (that includes floppies) from DOS seems to be somewhat involved (&lt;a href=&quot;http://www.bootdisk.com/usb.htm&quot;&gt;[1]&lt;/a&gt;, &lt;a href=&quot;http://www.freedos.org/technotes/newsitem/149.html&quot;&gt;[2]&lt;/a&gt;), you seem to need the &lt;code&gt;USBASPI&lt;/code&gt; driver and another driver to map ASPI drives to DOS drive letters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on what you want to accomplish, booting a FreeDOS system with the &lt;code&gt;USBASPI&lt;/code&gt; driver from an USB stick, or accessing the floppy drive from &lt;a href=&quot;http://www.dosemu.org/&quot;&gt;DOSEMU&lt;/a&gt; etc., or accessing the DOS files on the drive directly from Linux may be simpler.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2016-07-11T07:59:10.187" LastActivityDate="2016-07-11T07:59:10.187" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="1086" PostTypeId="1" AcceptedAnswerId="1163" CreationDate="2016-07-11T14:58:40.677" Score="4" ViewCount="133" Body="&lt;p&gt;We are using MEMAC system and this device is using 30 years old Tape Casettes. The company non-exist anymore but they sent me 8&quot; floppy disks so I can have chance to retrieve the files inside and make the tapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I extracted files from the floppy and download tools from Dave Pitts' site(&lt;a href=&quot;http://www.cozx.com/~dpitts/ti990.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.cozx.com/~dpitts/ti990.htm&lt;/a&gt;). Now I can able to see the contents of files however I can not convert to tape format or even can not run Memac.obj file and see if it is working or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may see &lt;a href=&quot;https://drive.google.com/folderview?id=0Bw_4SqwiPKv1ejZBQ0FVY192aUk&amp;amp;usp=sharing&quot; rel=&quot;nofollow&quot;&gt;files here&lt;/a&gt;. Mr Dave saved my life but know I stucked on creating Tape file or even I can not run this OBJ files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does any of you can help me to run this Memac program and help me to make tape file(does it mean compile?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yours faithfully,&#xA;Melic&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All files extracted from Images and Image files (Google Drive):&lt;/p&gt;&#xA;" OwnerUserId="2110" LastActivityDate="2020-09-12T09:52:41.257" Title="Memac Obj files for running and making Tape Format" Tags="&lt;cassette-tape&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1087" PostTypeId="1" AcceptedAnswerId="1088" CreationDate="2016-07-11T18:54:09.647" Score="20" ViewCount="2569" Body="&lt;p&gt;I'm interested in getting an Atari 8-bit (like I had 30 years ago), but have only LCD TVs (and computer monitors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I hook this Atari to a flat screen TV, or do I need an analog CRT?&lt;/p&gt;&#xA;" OwnerUserId="2111" LastEditorUserId="621" LastEditDate="2016-07-11T22:30:00.397" LastActivityDate="2016-07-11T22:30:00.397" Title="Can I hook up an Atari 8-bit computer to a flat-screen tv" Tags="&lt;atari&gt;&lt;video&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1088" PostTypeId="2" ParentId="1087" CreationDate="2016-07-11T20:19:52.327" Score="19" Body="&lt;p&gt;Most classic computers will work fine on a TV with proper composite inputs.  You want to make sure your TV has aspect ratio selection as many simply horizontally stretch the 4:3 image to 16:9.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for Atari's, it will depend on which model you have and what cabling you have.  I've very successfully run Atari 800XL and 1200XL systems with LCD TVs using the proper composite cable like this one: &lt;a href=&quot;http://www.ebay.com/itm/Color-Composite-Video-A-V-Monitor-Cable-DIN-to-RCA-for-Atari-800-XL-XE-6-New-/130888382784?hash=item1e798e3940:m:mEq5Xkccxwvlc7ClvaEIjWA&quot;&gt;http://www.ebay.com/itm/Color-Composite-Video-A-V-Monitor-Cable-DIN-to-RCA-for-Atari-800-XL-XE-6-New-/130888382784?hash=item1e798e3940:m:mEq5Xkccxwvlc7ClvaEIjWA&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is not my listing, I am only including it as reference.&lt;/p&gt;&#xA;" OwnerUserId="260" LastActivityDate="2016-07-11T20:19:52.327" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1089" PostTypeId="1" AcceptedAnswerId="1090" CreationDate="2016-07-11T22:04:57.963" Score="16" ViewCount="9646" Body="&lt;p&gt;I have installed MS-DOS, FreeDOS and Windows 98 in Oracle VirtualBox. I want to try Commodore 64. How do I install a Commodore 64 emulator in VirtualBox?&lt;/p&gt;&#xA;" OwnerUserId="2112" LastEditorUserId="357" LastEditDate="2017-01-27T16:38:42.113" LastActivityDate="2017-01-27T16:38:42.113" Title="Install Commodore 64 on VirtualBox" Tags="&lt;emulation&gt;&lt;commodore-64&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1090" PostTypeId="2" ParentId="1089" CreationDate="2016-07-11T22:45:38.580" Score="30" Body="&lt;p&gt;It's not possible.  VirtualBox only supports emulating IBM-compatible x86 and x86-64 systems.  The Commodore 64 uses a 6510 CPU and a wildly different architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to run Commodore 64 software, you need a dedicated C64 emulator such as &lt;a href=&quot;http://vice-emu.sourceforge.net/&quot;&gt;VICE&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-07-11T22:45:38.580" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1091" PostTypeId="2" ParentId="1089" CreationDate="2016-07-12T15:05:56.757" Score="5" Body="&lt;p&gt;Actually, if you really wanted to you could probably install MS-DOS 6.22 and then get VICE for DOS (&lt;a href=&quot;http://vice-emu.sourceforge.net/index.html#download&quot; rel=&quot;noreferrer&quot;&gt;http://vice-emu.sourceforge.net/index.html#download&lt;/a&gt;) working inside the VM.  I don't know how well this would actually work, but once you had your Config.sys and Autoexec.bat worked out the VM could auto-boot right into VICE.   I've thought about going this route as an experiment a few times, but I've never done it because VICE works so well right on my desktop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This page (&lt;a href=&quot;http://www.scampers.org/steve/vmware/&quot; rel=&quot;noreferrer&quot;&gt;http://www.scampers.org/steve/vmware/&lt;/a&gt;) has a driver pack for MS-DOS/Windows 3.x hosted in vmWare, and I am &lt;em&gt;assuming&lt;/em&gt; that some of the driver may also apply to VirtualBox, so I pass the link along in the hopes it may be helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you go down this path, I'd love to hear how it works out.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2016-07-12T15:05:56.757" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1092" PostTypeId="1" AcceptedAnswerId="1094" CreationDate="2016-07-12T19:21:25.353" Score="15" ViewCount="2154" Body="&lt;p&gt;So, the Commodore 64 has two special registers in locations $00 and $01. By writing to these registers, you can somehow turn on and off the ROMs and other things. The thing that I am not understanding is why there is a direction register at location $00.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you write a 1 or 0 to the first bit in location $01, somehow this controls whether you can read from Commodore BASIC ROM or from RAM at the same addresses (in the literature this is apparently known as the &lt;code&gt;LORAM&lt;/code&gt; signal). And I'm interested in knowing what happens if you write a particular value to the same bit in location $00. Does that mean that &lt;code&gt;LORAM&lt;/code&gt; is now an input? Can you use this to test if BASIC is on?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2016-07-12T22:35:08.900" Title="How does the Commodore 64 address more than 64 kilobytes of memory?" Tags="&lt;commodore-64&gt;&lt;memory-layout&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1093" PostTypeId="2" ParentId="1092" CreationDate="2016-07-12T20:04:47.447" Score="16" Body="&lt;p&gt;The C64 BASIC ROM lives at $A000, the KERNEL ROM lives at $E000, but these ROMs also have RAM wired in 'parallel'  Under normal operation this RAM is unused but you can use the LORAM/HIRAM bits to enable or disable the ROMS and switch in the equivalent RAM memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One fun trick is to write a quick basic program to PEEK all the addresses from $A000 to $FFFF and POKE them back into the same address.  You can't write to ROM, so what the 64 will do is basically copy the PEEKed value from ROM and put it into the same address in RAM.  You then flip the LORAM/HIRAM bits to 'turn off the ROM' and use the RAM exclusively and you have a C64 with 'modifiable' roms.  You can add new commands to the BASIC interpreter, or tweak your ROMs.  But the copy in RAM is volatile and will go away when the power gets turned off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use the LORAM bit to determine if the C64 is reading addresses $A000-$BFFF from ROM or from RAM, obviously if it reports ROM then BASIC is available.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many programs take over the entire C64 by turning off the ROMS and using the available RAM for their own program code (or resources).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dig up a copy of &lt;strong&gt;Mapping the C64 by Compute!&lt;/strong&gt; for EVERYTHING you ever wanted to know about the C64 memory map.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2016-07-12T20:04:47.447" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1094" PostTypeId="2" ParentId="1092" CreationDate="2016-07-12T22:35:08.900" Score="16" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6510&quot;&gt;6510 CPU&lt;/a&gt; used in the Commodore 64 has an additional built-in &lt;a href=&quot;https://en.wikipedia.org/wiki/General-purpose_input/output&quot;&gt;general purpose I/O port&lt;/a&gt; compared to the original &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502&quot;&gt;6502 CPU&lt;/a&gt;. Address $0000 controls the direction for each of the bits of this I/O port, address $0001 can be used to read the voltage level of the corresponding pin for inputs, or set the voltage level of this pin for output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Commodore 64, the pins for the lowest three bits of this port are connected to a &lt;a href=&quot;https://en.wikipedia.org/wiki/Programmable_logic_array&quot;&gt;PLA&lt;/a&gt;, where they control the address space layout. All three lines are also pulled up to +5V via resistors. So if you'd change the direction of any of these port bits from &lt;code&gt;output&lt;/code&gt; to &lt;code&gt;input&lt;/code&gt;, the line would just be held at +5V, you could read a &lt;code&gt;1&lt;/code&gt; in the corresponding position at address $0001, and the PLA would behave like a &lt;code&gt;1&lt;/code&gt; is output to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore this setting serves no purpose, it's the same as if you had kept the direction to &lt;code&gt;output&lt;/code&gt; and wrote a &lt;code&gt;1&lt;/code&gt; into the data register. In particular it can't be used to test anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I'll assume that this is your real question, and you are not asking about details how the Commodore 64 uses those 3 signals to control the address space layout, i.e. ROM/RAM. If you need those details, there's a table e.g. &lt;a href=&quot;https://www.c64-wiki.com/index.php/Bank_Switching&quot;&gt;here&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-07-12T22:35:08.900" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="1095" PostTypeId="1" AcceptedAnswerId="1127" CreationDate="2016-07-13T12:34:14.260" Score="9" ViewCount="2111" Body="&lt;p&gt;I'm learning about IDEs and software development on Mac OS Classic systems and recently discovered &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop&quot; rel=&quot;noreferrer&quot;&gt;Macintosh Programmer's Workshop&lt;/a&gt;.  Navigating to a cached version of the old &lt;a href=&quot;https://web.archive.org/web/20110514011858/http://developer.apple.com/tools/mpw-tools/&quot; rel=&quot;noreferrer&quot;&gt;MPW Tools page&lt;/a&gt; on Apple's dev site, this IDE appears to have been made available for free on Apple's FTP server after it was superseded by CodeWarrior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any resources or downloads available of MPW?  Or do I have to find an old Developer CD matching the Mac OS version I want to use MPW on.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="47" LastEditDate="2016-07-13T14:18:06.700" LastActivityDate="2017-11-01T16:01:14.877" Title="Resources for developing in Classic Mac OS MPW?" Tags="&lt;apple-macintosh&gt;&lt;apple&gt;&lt;mac-os-classic&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1096" PostTypeId="5" CreationDate="2016-07-13T12:35:22.263" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/apple-macintosh&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;apple-macintosh&amp;#39;&quot; rel=&quot;tag&quot;&gt;apple-macintosh&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T12:57:27.933" LastActivityDate="2016-07-13T12:57:27.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1097" PostTypeId="4" CreationDate="2016-07-13T12:35:22.263" Score="0" Body="The classic Apple Macintosh operating system family: System 1–7, Mac OS 8–9." OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2021-03-05T17:27:41.787" LastActivityDate="2021-03-05T17:27:41.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1098" PostTypeId="2" ParentId="707" CreationDate="2016-07-13T12:49:41.367" Score="3" Body="&lt;p&gt;From ThomasW's comment linking to Wikipedia, I've learned that the original AirPort card was &quot;a re-branded Lucent WaveLAN/Orinoco Gold PC card, in a modified housing that lacked the integrated antenna.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it theoretically might be possible to take a Wireless 802.11n PCMCIA card, remove the housing, and retrofit the card into the proprietary housing used by the  PowerPC G3, I wouldn't recommend it.  The OS would not support any other brand of cards on the hardware level, and the download speed would also be capped by the Mac OS Classic software settings.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T12:54:49.563" LastActivityDate="2016-07-13T12:54:49.563" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1099" PostTypeId="5" CreationDate="2016-07-13T13:09:12.773" Score="0" Body="&lt;p&gt;Color BASIC 1.0 was released with the original 4k TRS-80 Color Computer in 1980.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T13:50:35.800" LastActivityDate="2016-07-13T13:50:35.800" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1100" PostTypeId="4" CreationDate="2016-07-13T13:09:12.773" Score="0" Body="for questions about the implementation of Microsoft BASIC used on Tandy/Radio Shack TRS-80 Color Computers" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T13:50:32.300" LastActivityDate="2016-07-13T13:50:32.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1101" PostTypeId="5" CreationDate="2016-07-13T13:12:15.117" Score="0" Body="&lt;p&gt;This tag can be used to ask questions on how to dump and preserve software on floppy disks, ROM images, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also applicable to the recovery of archived information on retrotechnologies.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-12-21T13:16:43.700" LastActivityDate="2016-12-21T13:16:43.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1102" PostTypeId="4" CreationDate="2016-07-13T13:12:15.117" Score="0" Body="Questions on the archival or preservation of retrocomputing software and data." OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-12-21T13:16:43.700" LastActivityDate="2016-12-21T13:16:43.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1103" PostTypeId="5" CreationDate="2016-07-13T13:18:52.523" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://docs.oracle.com/cd/E19127-01/index.html&quot; rel=&quot;nofollow&quot;&gt;Oracle Legacy Product Documentation: Workstations&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T13:50:21.157" LastActivityDate="2016-07-13T13:50:21.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1104" PostTypeId="4" CreationDate="2016-07-13T13:18:52.523" Score="0" Body="for questions about the Sun Blade workstation line sold by Sun Microsystems" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T13:50:15.673" LastActivityDate="2016-07-13T13:50:15.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1105" PostTypeId="2" ParentId="1086" CreationDate="2016-07-13T13:19:18.903" Score="4" Body="&lt;p&gt;Partial answer: The file called &lt;code&gt;EXPLAIN&lt;/code&gt; on the floppy disk images contains Danish text with { = æ, | = ø, and } = å. Running it through Google Translate, and touching up the result, gives:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The purpose of this text is to explain how the software Memac,&#xA;Frederikshavn Shipyard 421-424, hangs together, and how to make a new tape.&lt;/p&gt;&#xA;&lt;p&gt;Memac software includes three tapes:&lt;/p&gt;&#xA;&lt;p&gt;Program Tape:&lt;/p&gt;&#xA;&lt;p&gt;With yellow labels, made from MEMAC.OBJ.OBJECT on disk or MEMAC/OBJ on&#xA;floppy. To start Memac up, put this tape to the machine first.&lt;/p&gt;&#xA;&lt;p&gt;The tape is marked with two yellow labels. On the top one is written PROGRAM&#xA;TAPE, on the bottom one MEMAC 870814.&lt;/p&gt;&#xA;&lt;p&gt;Data Tape:&lt;/p&gt;&#xA;&lt;p&gt;With red labels, containing the data that can be changed aboard ship or in&#xA;the yard. We save 2 tapes with the latest - as far as possible - version of Anna,&#xA;and also two tapes from HPL.&lt;/p&gt;&#xA;&lt;p&gt;Also keep a printout the content of Anna, as well as of HPL.&lt;/p&gt;&#xA;&lt;p&gt;New tapes are made as follows:&lt;/p&gt;&#xA;&lt;p&gt;First record on both sides a little initializing program,&#xA;MEMACSUP.DATAINIT.OBJ.OBJECT on disk or DATAINI/OBJ on floppy.&lt;/p&gt;&#xA;&lt;p&gt;Then record on a 256 kbyte IP2-110 with Tandberg TDV 2220 on&#xA;port J5, Config Tape (see below). In the main menu, select '6' - System&#xA;Functions. In the submenu select '1' - Get Data From Tape. Insert a&#xA;existing Data Tape and press 'G' - thus obtained a RAM copy.&lt;/p&gt;&#xA;&lt;p&gt;Data can now be stored on the new tape using the '2' - Store Data On&#xA;Tape. Repeat the operation on the other side. Verify then with '3'&#xA;on both sides. By mistake, boxes tape. Screen says TAPE&#xA;OPERATION DONE when all OK.&lt;/p&gt;&#xA;&lt;p&gt;The tape is marked with two red labels. On the top one ist written DATA TAPE,&#xA;on the bottom one MEMAC 870810.&lt;/p&gt;&#xA;&lt;p&gt;Config Tape:&lt;/p&gt;&#xA;&lt;p&gt;with green tags, contains the program that is used to correct&#xA;the Data Tape. New tapes are made from MEMACONF.OBJ.OBJECT on disk or&#xA;CONFIG/OBJ on floppy.&lt;/p&gt;&#xA;&lt;p&gt;The tape is marked with two green labels. On the top one it&#xA;says CONFIG TAPE, on the lower MEMAC 870401.&lt;/p&gt;&#xA;&lt;p&gt;These disks are available in a version for Anna and a version for HPL.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;All the &lt;code&gt;/OBJ&lt;/code&gt; files are in &lt;em&gt;Standard Object Code Format&lt;/em&gt; as described in the &lt;em&gt;Model 990 Computer Assembly Language Programmer's Guide&lt;/em&gt;, pp. 10-17 ff. That means you don't need to compile them, and in principle you must just copy them to tape, using whatever utilities your OS provides for this.&lt;/p&gt;&#xA;&lt;p&gt;I still don't know what type of OS or what type of tapes you use. The &lt;a href=&quot;http://terminals.classiccmp.org/wiki/index.php/Tandberg_TDV_2220&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tandverg TDV 2220&lt;/a&gt; is a video terminal, but I can't see any tape drive on the picture, so that's probably addition hardware. I can't find any information on what type of tape&#xA;&lt;em&gt;IP2-110&lt;/em&gt; is (if it's a kind of tape), either.&lt;/p&gt;&#xA;&lt;p&gt;I tried running or linking &lt;code&gt;MEMAC/OBJ&lt;/code&gt; on the simplest system provided for the simulator on &lt;a href=&quot;http://www.cozx.com/%7Edpitts/ti990.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dave Pitt's page&lt;/a&gt;, the &lt;code&gt;asr733sys.fpy&lt;/code&gt; image, but it doesn't load, probably because the &lt;code&gt;I&lt;/code&gt; tags at the end are not understood.&lt;/p&gt;&#xA;&lt;p&gt;So to try this out on the simulator, I need to have some idea about what OS it is for.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-09-12T09:52:41.257" LastActivityDate="2020-09-12T09:52:41.257" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="1106" PostTypeId="5" CreationDate="2016-07-13T13:20:35.690" Score="0" Body="&lt;p&gt;The Thomson TO 7 is the first micro computer conceived by Thomson and the first French micro-computer.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T13:50:24.517" LastActivityDate="2016-07-13T13:50:24.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1107" PostTypeId="4" CreationDate="2016-07-13T13:20:35.690" Score="0" Body="for questions about the Thomson line of home computers manufactured by Thomson SA" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T13:50:05.437" LastActivityDate="2016-07-13T13:50:05.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1108" PostTypeId="5" CreationDate="2016-07-13T14:02:21.347" Score="0" Body="&lt;p&gt;The Sharp EL-9000 SUPER SCIENTIFIC is a graphing calculator with 10 digits precision and formula input logic. It has an unknown number of functions, 90 keys and an LCD (liquid crystal) display. The power source is 3x3V cell. The calculator was manufactured in Japan. It was introduced in 1987 and discontinued in 1991.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T14:22:59.773" LastActivityDate="2016-07-13T14:22:59.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1109" PostTypeId="4" CreationDate="2016-07-13T14:02:21.347" Score="0" Body="for questions about the Sharp EL-9000 calculator" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T14:23:17.667" LastActivityDate="2016-07-13T14:23:17.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1110" PostTypeId="5" CreationDate="2016-07-13T14:03:22.147" Score="0" Body="&lt;p&gt;In computing, a shell is a user interface for access to an operating system's services.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T14:23:09.680" LastActivityDate="2016-07-13T14:23:09.680" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1111" PostTypeId="4" CreationDate="2016-07-13T14:03:22.147" Score="0" Body="for questions about shell interfaces on retrocomputers" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T14:23:36.607" LastActivityDate="2016-07-13T14:23:36.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1112" PostTypeId="5" CreationDate="2016-07-13T14:10:56.797" Score="0" Body="&lt;p&gt;The Amiga Shell, assigned to NEWCON:, is an alternate shell environment for AmigaDOS.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T14:23:14.433" LastActivityDate="2016-07-13T14:23:14.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1113" PostTypeId="4" CreationDate="2016-07-13T14:10:56.797" Score="0" Body="for questions on the Amiga Shell interface in AmigaOS" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T14:23:32.583" LastActivityDate="2016-07-13T14:23:32.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1114" PostTypeId="5" CreationDate="2016-07-13T14:16:19.103" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/game-boy&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;game-boy&amp;#39;&quot; rel=&quot;tag&quot;&gt;game-boy&lt;/a&gt; &lt;a href=&quot;/questions/tagged/nintendo&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;nintendo&amp;#39;&quot; rel=&quot;tag&quot;&gt;nintendo&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T14:23:23.617" LastActivityDate="2016-07-13T14:23:23.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1115" PostTypeId="4" CreationDate="2016-07-13T14:16:19.103" Score="0" Body="for questions on Nintendo's Game Boy Advance handheld video game console" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-13T14:23:27.663" LastActivityDate="2016-07-13T14:23:27.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1117" PostTypeId="1" AcceptedAnswerId="1118" CreationDate="2016-07-14T00:07:04.060" Score="9" ViewCount="547" Body="&lt;p&gt;I recently got my hands on an IBM 340 PC (100MHz Penitum, 16MB of RAM). I'm going to wipe the disk and start fresh, but I wanted to preserve the contents of the disk should I wish to restore it to it's previous state in the future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I removed the drive and connected it to another machine where I used a windows build of &lt;code&gt;dd&lt;/code&gt; to create an image like so:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dd if=\\.\Volume{aef46cf9-3e3d-11de-b8c6-806d6172696f} of=raw.img bs=1M&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've found a way to mount that image in my modern PC and can browse the content and it all looks great. Just to be sure things were as expected I tried converting that raw image to a &lt;code&gt;vhd&lt;/code&gt; format so that I could try and boot the drive in Virtualbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, Virtualbox comes up with the standard &quot;Invalid system disk&quot; message you get when a bootable partition isn't found, so my question is whether this is a limitation of Virtualbox with an image of an old FS (I'm assuming it's FAT16) or is it likely that there's something wrong with the image and I should try to create one again before I change anything on the old hard drive?&lt;/p&gt;&#xA;" OwnerUserId="107" LastEditorUserId="107" LastEditDate="2016-07-14T01:46:23.897" LastActivityDate="2016-07-14T02:03:21.633" Title="Disk Image From Windows 95 Machine Not Bootable" Tags="&lt;windows-95&gt;&lt;disk-image&gt;&lt;backup&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1118" PostTypeId="2" ParentId="1117" CreationDate="2016-07-14T02:03:21.633" Score="11" Body="&lt;p&gt;When you used &lt;code&gt;dd&lt;/code&gt;, did you capture it from the first physical sector? Or did you merely grab the volume of interest?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you did it on &lt;code&gt;\\.\Volume{$$$$$$$$-$$$$-....}&lt;/code&gt;, then you only got &lt;code&gt;C:&lt;/code&gt;, not the whole disk. You need to do it on &lt;code&gt;\\.\PhysicalDrive#&lt;/code&gt; (whatever &lt;code&gt;#&lt;/code&gt; it is) to get everything - including the Master Boot Record (MBR) which is in the first physical sector.&lt;/p&gt;&#xA;" OwnerUserId="1980" LastActivityDate="2016-07-14T02:03:21.633" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1119" PostTypeId="1" AcceptedAnswerId="1128" CreationDate="2016-07-14T03:46:55.520" Score="13" ViewCount="4497" Body="&lt;p&gt;For example, an Amiga 500+ has 1MiB of chip memory, but it can be expanded to 2MiB. What would be the advantage?&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="6659" LastEditDate="2019-04-09T10:08:23.193" LastActivityDate="2019-04-09T10:08:23.193" Title="What is the benefit of increasing Amiga chip memory?" Tags="&lt;hardware&gt;&lt;amiga&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1120" PostTypeId="2" ParentId="1119" CreationDate="2016-07-14T07:38:10.937" Score="3" Body="&lt;p&gt;As a start, more memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Benefits of having more of those programs that only reside in chipmem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can have higher resolutions/colours and still not run out of mem (Indivision or other scandoubler / ECS/AGA chipset might be needed to get a productive result).&lt;/p&gt;&#xA;" OwnerUserId="77" LastActivityDate="2016-07-14T07:38:10.937" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1121" PostTypeId="2" ParentId="1119" CreationDate="2016-07-14T07:39:28.687" Score="3" Body="&lt;p&gt;The more Chip RAM you have, the better. This is because it's the memory used by video and audio coprocessors. These access RAM without involving the CPU, on a completely separate bus that the CPU is not even (directly) connected to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means the coprocessors can access it quickly, which might increase the resolution, or colour depth, the number or size of the sprites, the sample frequency of the sound, or other things that the coprocessors can do by themselves.&#xA;&lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node0005.html&quot; rel=&quot;nofollow&quot; title=&quot;Amiga Hardware Reference Manual&quot;&gt;This page&lt;/a&gt; will explain more.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2016-07-14T07:39:28.687" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1122" PostTypeId="2" ParentId="1054" CreationDate="2016-07-14T07:46:30.060" Score="4" Body="&lt;p&gt;You might also try and look at modern solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://hxc2001.free.fr/floppy_drive_emulator/&quot; rel=&quot;nofollow&quot;&gt;HxC floppy emulator&lt;/a&gt; which can be pricy or you could go with a GOTEK drive, and modify the enclosure to fit in the A3000.&#xA;GOTEK drives have at the moment 2 firmwares, the &lt;a href=&quot;https://cortexamigafloppydrive.wordpress.com/&quot; rel=&quot;nofollow&quot;&gt;Free&lt;/a&gt; which isn't being developed anymore. And you can contact the guy with the HxC, whom also makes a firmware for this device. No more flaky disks with read errors.&lt;/p&gt;&#xA;" OwnerUserId="77" LastActivityDate="2016-07-14T07:46:30.060" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1123" PostTypeId="2" ParentId="605" CreationDate="2016-07-14T07:52:35.263" Score="-1" Body="&lt;p&gt;Try this one though it only runs in windows, unfortunately I don't know what backend it uses:&#xA;&lt;a href=&quot;http://amidevcpp.amiga-world.de/index.php?HR_LANG=english&quot; rel=&quot;nofollow&quot;&gt;http://amidevcpp.amiga-world.de/index.php?HR_LANG=english&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="77" LastActivityDate="2016-07-14T07:52:35.263" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1124" PostTypeId="1" CreationDate="2016-07-17T01:30:39.850" Score="12" ViewCount="867" Body="&lt;p&gt;Recently, an Apple //e has come in my possession, and I'm trying to get it to power up. I am looking for some troubleshooting advice. I've looked around online, but there seems to be very little on this sort of repair.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As of right now, I'm just trying to get the power light to light up when I turn on the computer. So far, this is what I've tested:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Cords&lt;/strong&gt; - I have confirmed that this isn't a problem with a power cord or something like that because when I plug it in and turn it on, I can hear the power supply softly humming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Power Supply&lt;/strong&gt; - I tested the voltage of the power supply with a voltmeter by disconnecting it from the motherboard and checking the output of each pin. I compared the values I measured with the ones I found &lt;a href=&quot;http://apple2.org.za/gswv/a2zine/faqs/Csa2POWER.html&quot;&gt;here&lt;/a&gt; and confirmed that they are close to the expected levels. I also read somewhere that the power supply is designed to shut itself off if it is not giving the correct outputs. So, it seems to me like this isn't the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Replacing Chips&lt;/strong&gt; - After testing the power supply, I found an old &lt;a href=&quot;http://www.1000bit.it/support/manuali/apple/repair2e/repair.htm&quot;&gt;repair guide&lt;/a&gt; that suggested I replace some of the components on the motherboard. In the guide, under start-up problems, it suggested that I replace the following chips if there is no power light: 74LS125, 74S109, and 74S02. However, after replacing all three I found that I still get no power light. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Power LED&lt;/strong&gt; - I've tested the power LED on the motherboard, and measured only 0.64 V across it with the power on. Furthermore, I don't hear a beep when the system is powered on, and I don't get a signal from the monitor (which works with other sources).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This computer also has multiple cards in the expansion slots (such as a modem controller and RAM expansion). Maybe one of these is faulty? What would be the bare necessities for a system boot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is anything else I can test that would cause such a fatal error as the power light not turning on, please let me know.&lt;/p&gt;&#xA;" OwnerUserId="2138" LastEditorUserId="71" LastEditDate="2018-03-14T22:06:16.223" LastActivityDate="2018-03-14T22:06:16.223" Title="How do I troubleshoot an Apple //e with no power light?" Tags="&lt;apple-ii&gt;&lt;repair&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1125" PostTypeId="2" ParentId="1124" CreationDate="2016-07-17T13:26:35.160" Score="11" Body="&lt;p&gt;Some of your general questions can be answered here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I said above, for an Apple //e remove all cards for troubleshooting - none are necessary for boot-up in a typical system. (As opposed to an Apple II or II+ where if there's a card in slot 0 it's likely a &quot;Language Card&quot; with RAM and/or ROM, so that should initially be left in, then perhaps be removed as part of troubleshooting.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Replacing specific components is warranted only for specific problems, but is unlikely to fix &quot;no power light&quot;. If you replace chips at random these new chips might get damaged or (if you're unlucky) even introduce a new problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No light means no power, and so nothing else on the board will work, hence no beep etc. The power supply should normally be tested under load (usually a motherboard, but otherwise something you don't care about if the supply is suspect). One likely fault on the motherboard is a short, causing the power supply to shut down. You can start by checking capacitors (usually you'll have to desolder one to confirm the short) especially those next to the power connector, but the short could be anywhere on the board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this ends up being a more general question of how to &lt;a href=&quot;http://electronics.stackexchange.com/questions/16398/find-short-location-on-pcb&quot;&gt;find a short on a PCB&lt;/a&gt;. Techniques range from checking temperature (a shorted chip might be hot) to &lt;a href=&quot;http://areksnotes.blogspot.co.nz/2012/09/how-to-find-short-circuit-on-your-pcb.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;using a multi-meter&lt;/a&gt;. You could try removing all socketed chips and see if the light comes on - then it would be a matter of substitution or replacement - but the //e has fewer socketed chips than its simpler predecessors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FYI there's another repair book, though it's unlikely to help: &lt;a href=&quot;http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Books/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sams ComputerFacts - Apple IIe&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your problem is probably best discussed in a forum with others experienced in hardware troubleshooting and repair, such as the Facebook group &lt;a href=&quot;https://www.facebook.com/groups/5251478676/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple II Enthusiasts&lt;/a&gt; or the Usenet group &lt;a href=&quot;https://groups.google.com/forum/#!forum/comp.sys.apple2&quot; rel=&quot;nofollow noreferrer&quot;&gt;comp.sys.apple2&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2018-03-14T22:04:39.433" LastActivityDate="2018-03-14T22:04:39.433" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1127" PostTypeId="2" ParentId="1095" CreationDate="2016-07-18T14:27:02.043" Score="5" Body="&lt;p&gt;Apple used &lt;a href=&quot;https://en.wikipedia.org/wiki/CodeWarrior&quot; rel=&quot;noreferrer&quot;&gt;Metrowerks CodeWarrior&lt;/a&gt; for a lot projects once the PowerPC came out, including later versions of the Finder and the early MacOS X versions of the Finder. As a result I don't think that the system requirements for MPW went up very much over time. The last version of MPW could run on MacOS 9 but I doubt that it required much more than a PowerPC Mac running System 7.5. A lot of other companies made plug-in compilers for MPW including Metrowerks (C/C++), Absoft (Fortran), and Symantec (C/C++). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used THINK Pascal for 68k Macs and Metrowerks CodeWarrior for 68k/PPC once it came out. Codewarrior has an integrated IDE with great Pascal/C/C++ support and PowerPlant if you want to use C++ frameworks. Older versions of CodeWarrior support Macs as low down as the LC running System 7.1 and as new the last PPC boxes running MacOS X 10.5. On really old Macs like the MacPlus, THINK Pascal has a great IDE with the first good integrated debugger, and even inline stop points in the source code. THINK Pascal requires only 1 MB and System 6, though debugging with a single floppy drive is a little slow.&lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2016-07-18T14:27:02.043" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1128" PostTypeId="2" ParentId="1119" CreationDate="2016-07-18T16:21:52.893" Score="16" Body="&lt;p&gt;There's two possible routes this answer can take - the first is &quot;what is the advantage in adding memory (that happens to be chip memory)&quot; and the second is &quot;what is the advantage in adding chip memory &lt;em&gt;as opposed to other types of memory&lt;/em&gt;&quot;. I'll try to answer both!&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;How much memory you need depends on what programs you want to run. When it comes to games, the vast majority of games will require either 512KiB (which is the basic amount of memory shipped with the Amiga 500) or 1MiB (which is what you get if you add a 512KiB expansion card to an Amiga 500 - this was a very popular configuration of Amiga). Games developed for the AGA chipset can expect a minimum of 2MiB (as there is no AGA-based machine with less than that). It's very rare for a game to need anything other than this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For productivity software there may be an advantage in adding more memory. Most software has the same requirements as games, but adding more memory means that you can do things like run multiple programs at once, have more documents open, use the RAM disk more, and so on. More advanced productivity software, such as video processing and 3D rendering, are more likely to have higher requirements than an unexpanded Amiga.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So, what about chip memory specifically? It's most commonly understood that the Amiga has two types of memory - &lt;strong&gt;chip&lt;/strong&gt; memory and &lt;strong&gt;fast&lt;/strong&gt; memory. The basic difference between these two types is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Chip&lt;/strong&gt; memory is the only type of memory that the custom chips can access. Therefore all data that the custom chips process must be stored in chip memory. This includes video and sound data. The CPU can access chip memory, but the custom chips are always given priority: the custom chips will lock the CPU out of chip memory if they need to access memory.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Fast&lt;/strong&gt; memory is available exclusively for use by the CPU. The custom chips cannot lock the CPU out of fast memory, therefore the CPU is able to operate without being delayed if its instructions and data are in fast memory.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, to answer your question, &quot;what's the advantage in adding more chip memory&quot; is that there is more space to store all types of data. Because it's accessible to the custom chips, it can mean that you can use more colours, or higher resolutions, or multiple screens, than perhaps you had access to before. The related question, &quot;what's the advantage in adding more &lt;em&gt;fast&lt;/em&gt; memory&quot; is that although the memory cannot be used for video and sound data (exception: see below), it could cause programs to run faster since the CPU isn't being held back from accessing memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore in the ideal world, you would have enough chip memory to hold all the graphics, sound and other custom chip data, and enough fast memory to hold all the instruction code and non-custom chip data. This means that the CPU is not unnecessarily accessing chip memory (which can slow down the CPU if it's locked out) and you have enough memory for everything you want to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I say &quot;most commonly understood&quot; because there is a complication that is often overlooked. Some Amiga models can have memory expansions installed that appears to be fast memory, but is actually on the same memory bus as the chip memory. This means that although the custom chips cannot access it, they will still lock the CPU out of it if they want to lock the chip memory. Since it's neither chip memory, nor does it have the speed advantage of fast memory, earned the nickname of &lt;strong&gt;slow&lt;/strong&gt; memory. (It's also occasionally referred to as &lt;strong&gt;ranger&lt;/strong&gt; memory but I don't know where this name came from.) This affected the Amiga 500 (not 500 Plus) with memory in the trapdoor slot. Possibly other configurations are also affected, but I'm not currently sure. Memory fitted to the side connector of an Amiga 500, or to a Zorro slot or CPU slot inside a big-box Amiga, is connected directly to the CPU bus and is true fast memory.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;About that exception: it's not true to say that fast memory can't store video and sound data - it can, but it just can't be displayed. If my memory serves me correctly, the Rombo Vidi Amiga product was said to be able to play longer videos than other products as it kept video data in fast memory, and copied the needed frames to chip memory just before they were needed to be displayed.&lt;/p&gt;&#xA;" OwnerUserId="149" LastEditorUserId="149" LastEditDate="2016-07-19T09:35:50.030" LastActivityDate="2016-07-19T09:35:50.030" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1129" PostTypeId="2" ParentId="955" CreationDate="2016-07-19T03:44:34.077" Score="31" Body="&lt;p&gt;One side of the cable is normally all ground. The other is all signals. This was done so a ribbon cable would have a ground wire between each signal wire, which helps prevent crosstalk. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flipping the cable swaps signals for grounds, grounding all signals. Since all the signals on a floppy disk are considered to be asserted when a zero (a logic 1 = ground) all the signals are activated.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cable has many signals, but these are the key ones that erase the disk.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;/MOTEA ( Motor enable) is asserted, which starts the motor spinning.&lt;/li&gt;&#xA;&lt;li&gt;/DRVSA (drive select) is enabled. It engages the head load solenoid which pushes the head against the floppy diskette.&lt;/li&gt;&#xA;&lt;li&gt;/WDATE (write data) is asserted low, so a logic 1 will be written to the floppy&lt;/li&gt;&#xA;&lt;li&gt;/WGATE (write gate) is asserted so the current to the head is turned on.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The floppy head is a small electromagnet, so the data on the track under the head is erased.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I learned to always power up and check the led before putting on a floppy.   Many years ago I erased a very valuable Unix partition on a hard disk by powering up the disk and then the controller. The exact same thing happened, because I had two power cords instead of one.&lt;/p&gt;&#xA;" OwnerUserId="698" LastEditorUserId="278" LastEditDate="2016-09-24T08:01:28.417" LastActivityDate="2016-09-24T08:01:28.417" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1130" PostTypeId="1" AcceptedAnswerId="1131" CreationDate="2016-07-19T17:19:52.373" Score="11" ViewCount="781" Body="&lt;p&gt;Inspired by &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1092/how-does-the-commodore-64-address-more-than-64-kilobytes-of-memory&quot;&gt;this question&lt;/a&gt; about the C64, I was curious if the Apple //e (and I suppose //c and IIgs, though not sure of ][+) somehow had a similar behavior. In short, we know that the Apple ROMs start at some location ($D000, I think) and are not modifiable. On the C64, you can flip a soft switch to bank out the ROMs and instead point to RAM mapped to the same location; this works because the C64 actually has 64KB of RAM despite the 8 or 16KB of ROM installed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was always under the impression that the //e shipped with 64KB on the motherboard. If you couldn't bank out the ROMs, this would mean that the upper 16KB effectively was wasted, no? Or is this functionality simply what the language card was doing to support Integer/AppleSoft BASIC switching?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-07-19T18:23:52.007" Title="Does an Apple //e actually have 64KB of RAM?" Tags="&lt;apple-ii&gt;&lt;rom&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1131" PostTypeId="2" ParentId="1130" CreationDate="2016-07-19T18:23:52.007" Score="13" Body="&lt;p&gt;The original Apple II has up to 48K of RAM from $0000 to $BFFF and 10K of ROM between $C000 and $FFFF except for a hole between $D800 and $DFFF. You can get a language card which puts 16K of RAM under the ROM space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple IIe has a full bank of 64K of RAM, just like the Apple II with the language card installed. The 128K models have an additional 64K bank of RAM called Aux RAM. This Aux RAM comes on the 80 column card because the way they expanded the Apple II from 40 columns to 80 columns (and hi-res from 260 pixels wide to 560) was to double the screen RAM by adding the bank of Aux RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This slide show has some diagrams of the Apple II, Apple II with the 16K language card, and of an Apple IIe with Aux RAM: &lt;a href=&quot;http://www.slideshare.net/mattjenkins355/a-trip-down-memory-lane&quot;&gt;http://www.slideshare.net/mattjenkins355/a-trip-down-memory-lane&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2016-07-19T18:23:52.007" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1132" PostTypeId="1" AcceptedAnswerId="1136" CreationDate="2016-07-20T09:48:19.970" Score="24" ViewCount="38536" Body="&lt;p&gt;I have a wonderful IBM Model M keyboard, which has the best key action of all keyboards I ever used. The problem is it has the big round 5-pin DIN connector used in AT PCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have some PS/2 to USB converters, and I know they are very 'moody', often only working with keyboards they were shipped with, and sometimes not even that. I do have DIN to PS/2 connector, but - expectably - the double conversion it doesn't work with these PS/2 to USB converters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I use my 'retro' keyboard with modern PCs without PS/2?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="74" LastEditDate="2017-06-20T14:02:59.287" LastActivityDate="2020-06-18T04:31:34.767" Title="How can I connect a DIN plug keyboard to USB?" Tags="&lt;keyboards&gt;&lt;ibm-pc&gt;&lt;old-hardware-adaptation&gt;" AnswerCount="4" CommentCount="10" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1133" PostTypeId="2" ParentId="1132" CreationDate="2016-07-20T11:00:22.897" Score="9" Body="&lt;p&gt;There are two aspects to this.  The cable for the physical connection and the driver for the communications protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect with adaptor upon adaptor you are either losing voltage and therefore connectivity or the protocol is getting confused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your core problem will lie in the communications protocols.  There is a defined USB &lt;a href=&quot;http://www.beyondlogic.org/usbnutshell/usb1.shtml&quot; rel=&quot;noreferrer&quot;&gt;protocol&lt;/a&gt; to which peripherals such as keyboards must comply.  The old IBM keyboard clearly doesn't.  The host computer will interrogate a USB device using a Setup Token Packet.  A USB keyboard will respond, the XT keyboard will not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS/2 to USB converters, and other USB converters, usually have a small embedded processor that handles the protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So:&lt;br&gt;&#xA;Writing a USB driver on your new PC to bypass the USB protocol is probably impossible as the USB ports are likely to be driven by a dedicated chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cutting the PS/2 connector off your USB-PS/2 adaptor and soldering the wires directly to the DIN plug - in the hope that the voltage loss is reduced and so the flakiness you describe goes away is very risky.  Also, the protocol chip may be in the PS/2 plug!&lt;br&gt;&#xA;Although the pinouts are not too bad.  The IBM DIN and PS/2 sockets have pins as below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Kn7gK.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Kn7gK.png&quot; alt=&quot;IBM AT-PS2 Pinout&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1: Clock&lt;br&gt;&#xA;2: Data&lt;br&gt;&#xA;3: Reserved (in practice, usually a reset line)&lt;br&gt;&#xA;4: Ground&lt;br&gt;&#xA;5: +5V  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest:  Use a USB-RS232 adaptor and wire the DIN plug to a DB25 or DB9 RS232.  The keyboard will then appear to the PC as being on a standard COM port.  You then write a keyboard driver for your new PC that converts the data stream from the old keyboard.  You may be able to then redirect COM1 to STDIN.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The protocol is summarised as (taken from &lt;a href=&quot;https://www.cs.cmu.edu/~jmcm/info/key2.txt&quot; rel=&quot;noreferrer&quot;&gt;this description&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Keyboard - PC&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the keyboard has a byte to send to the computer (a keystroke), it shifts 9 bits out to the data line (RxD) with nine clock pulses on the CLK line.&lt;br&gt;&#xA;The data format is 1 start bit, followed by 8 data bits.&lt;br&gt;&#xA;The baud rate is roughly 2000 bits per second.&lt;br&gt;&#xA;The byte sent represents the scan code of the pressed key or a response to a command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PC to Keyboard:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commands&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ED &amp;lt;byte&amp;gt; Set LEDs depending on byte&#xA;          bit 0 is Scroll lock&#xA;          bit 1 is Num lock&#xA;          bit 2 is Caps lock&#xA;&#xA;EE          Echo EE&#xA;F0 &amp;lt;mode&amp;gt;   Select mode 1, 2 or 3&#xA;F2          Send keyboard I.D.&#xA;F3 &amp;lt;byte&amp;gt;   Set repeat delay and rate&#xA;            byte is: 0ddbbaaa&#xA;                 delay is (dd+1)*250 msec&#xA;                 rate is (8+aaa)*2^bb*4 msec&#xA;&#xA;F4          Clear buffer&#xA;F5          Restore default settings and wait for enable&#xA;F6          Restore default settings&#xA;FA          Acknowledge&#xA;FE          Error- please retransmit&#xA;FF          Reset keyboard&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have heard of people trying to achieve this feat by putting a Raspberry Pi or Arduino between the keyboard and PC as a protocol converter.  But I don't know of any &quot;How To&quot; guide for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The upshot of this is that it isn't trivial.  Good luck.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-07-20T11:00:22.897" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1134" PostTypeId="1" CreationDate="2016-07-20T11:56:22.007" Score="12" ViewCount="833" Body="&lt;h2&gt;Hopefully, sufficient background&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Many years ago (40-45), I used to play &quot;Sea War&quot; on a good sized time-share system. It was a text/adventure war game between a couple remote players, played over a 100x100 &quot;board&quot; (ocean) via TTY (or later terminals eventually). Each player had five or six ships of different types and capabilities, and a &quot;Home Base&quot; at some coordinate point in the 'ocean'. The objective was to locate and destroy the opponent's Home Base, IIRC, by launching a nuke/missile from your nuke/missile/radar-ship to the proper coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This game was &lt;strong&gt;definitely not&lt;/strong&gt; the easily found 'SeaWar' (nor seawar2) game that is little more than an automated version of the common Battleship board game (&quot;You sunk my battleship!&quot;), nor any similar variant. This game allowed players to enter course/direction orders for each ship as well as give firing orders when an opponent ship was sighted. Firing orders had to be given with attention to the course the firing ship was moving since that determined where shells would land.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Different ships had more or less firing power with greater/lesser min/max ranges and different manpower, ammo and fuel supplies. After enough time out at sea, supplies would run low and ships needed to return home to resupply. Fuel is used simply by moving while ammo is used in combat. Manpower can be used by being hit by enemy shells. Structural damage can also need home-port repair.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, one thing that made it interesting was that you could only input orders when invited by the program. You had no way to know if your remote opponent was getting more 'invites' unless perhaps you kept getting status updates indicating that more and more shells were falling closer to one of your ships. But if you kept a good mental map of your heavy cruiser moving on a heading of 115° and you had reason to think that that last barrage came from 10 miles out due east of the ship, and got an invite, you could enter firing orders that would put your shells right on the probable originating coordinates... depending on whether or not the enemy ship was also moving and in what direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was very likely that enemy ships would all be moving because a weather front could pass by and damage, possibly swamp, a stationary ship.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You had to keep all your ships in mind because the boundaries of the 100x100 grid brought danger of running aground for any moving ship. The one-order-per-invite, with multiple ships needing orders and orders often being used to load another unit of fuel or food or ammo or to repair a unit of damage or get personnel back up to operating level or to try a radar sweep of some grid area with the single ship capable of doing it in hopes of finding where enemy ships might regularly be visiting, kept you busy for such a very simple interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you didn't dare keep a ship in port for long. Stationary ships seen on radar multiple times at the same coordinates was the prime clue about a home port location.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;TL,DR:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Anyway, maybe as late as 20 years ago, I had at least most of the BASIC programming for the game. I haven't actually dug through everything that I have, but I didn't find it in a couple places I thought it should be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sound familiar to anyone? Anyone have an idea if any early source is available?&lt;/p&gt;&#xA;" OwnerUserId="464" LastActivityDate="2017-02-10T08:36:09.553" Title="In search of.... SeaWar -- NOT Battleship!" Tags="&lt;software&gt;&lt;gaming&gt;&lt;basic&gt;&lt;identify-this-game&gt;" AnswerCount="0" CommentCount="14" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1135" PostTypeId="1" AcceptedAnswerId="1338" CreationDate="2016-07-20T16:01:53.720" Score="51" ViewCount="11621" Body="&lt;p&gt;&lt;sub&gt;(This question was inspired by my previous question &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/606/621&quot;&gt;What kind of software was used to develop Nintendo 64 titles?&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NES used a modified 6502 processor and most games were written in Assembly.  There are a number of &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/Tools&quot; rel=&quot;noreferrer&quot;&gt;open source tools&lt;/a&gt; available for writing, compiling, and decompiling NES executables, but what was Nintendo's official development environment like?  What was the process of writing the assembly, compiling it, testing (locally?), and building test cartridges?  What hardware was used for development?  Were dev kits and environments given to select third parties for development?  If not, what resources did third-party developers use?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-12-27T21:55:52.813" Title="What was Nintendo's Software Development Environment for NES Games?" Tags="&lt;software&gt;&lt;nintendo&gt;&lt;nes&gt;&lt;software-development-kit&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="1136" PostTypeId="2" ParentId="1132" CreationDate="2016-07-21T09:42:56.867" Score="17" Body="&lt;p&gt;If the IBM Model M keyboard is one of the ones that uses the AT protocol, you may be able to use a passive 5-pin to PS/2 adapter, chained with an active PS/2 to USB converter such as the Belkin F5U119.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it uses another protocol (such as XT or 3270 terminal) you will need a custom-made active converter -- &lt;a href=&quot;https://deskthority.net/wiki/Converter&quot;&gt;https://deskthority.net/wiki/Converter&lt;/a&gt; lists several, of which the best known is probably &quot;Soarer's&quot;.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2016-07-21T09:42:56.867" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1137" PostTypeId="2" ParentId="1016" CreationDate="2016-07-21T18:58:34.323" Score="10" Body="&lt;p&gt;Using a scale factor of 16 means makes it convenient to work with objects up to 65520 bytes located on any 16-byte boundary.  High-level languages don't support the concept very well, but when using machine language, rounding object sizes to 16-byte multiples makes it possible to use two bytes for object addresses rather than four.  If the scale factor were larger, one would either have to round objects up to multiples of 256 bytes (rather than 16) or use 4-byte pointers (which many languages end up requiring anyway).&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-07-21T18:58:34.323" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1138" PostTypeId="5" CreationDate="2016-07-21T19:30:06.460" Score="0" Body="&lt;p&gt;Use this tag to ask questions about using any types of retrocomputing hardware (keyboard, mouse, etc.) on modern systems.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-22T07:39:36.603" LastActivityDate="2016-07-22T07:39:36.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1139" PostTypeId="4" CreationDate="2016-07-21T19:30:06.460" Score="0" Body="For questions about adapting retrocompuing hardware on modern platforms" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-27T06:27:13.673" LastActivityDate="2016-09-27T06:27:13.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1140" PostTypeId="1" AcceptedAnswerId="1143" CreationDate="2016-07-22T16:04:18.480" Score="11" ViewCount="836" Body="&lt;p&gt;Most Amiga computers have Kickstart (the core of the operating system) on ROM. But the original Amiga 1000 instead loaded Kickstart from disk. It had boot ROM that would run some self tests and then load Kickstart from disk into a special memory area, the Write Controlled Store, or WCS. Then it was able to set the WCS to be read only, and proceed to boot Kickstart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The boot process on an Amiga with a ROM Kickstart (e.g. A500) is well known. The ROM is mapped to 0xF80000 in the address space. As the Amiga comes out of reset, a signal from one of the CIA chips to Gary makes Gary alter the address decoding so that the ROM is additionally mapped at memory address zero (hiding an area of RAM). The 68000 reads the initial PC from low memory and starts executing code; the code jumps to the &quot;real&quot; ROM location around 0xF80000, and switches the CIA-Gary signal so that the ROM mirror at location zero disappears and ordinary memory appears again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there seems to be very little information floating around about the early boot process for the Amiga 1000 and I'm curious to know how the boot ROM and WCS change things. In particular:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What does the memory map look like when an Amiga 1000 powers on? Where is the boot ROM and where is the WCS?&lt;/li&gt;&#xA;&lt;li&gt;What's the programmatic interface to the WCS? Does it appear as normal RAM in this early boot stage, meaning the CPU can simply copy the Kickstart data there, or is there a different way of loading it?&lt;/li&gt;&#xA;&lt;li&gt;How is the WCS switched to read-only mode, and what exactly happens when it does?&lt;/li&gt;&#xA;&lt;li&gt;Is it possible to access the boot ROM or WCS after Kickstart has booted?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="149" LastActivityDate="2016-07-22T19:26:37.747" Title="How did the Amiga 1000 WCS (write controlled store) for Kickstart work?" Tags="&lt;amiga&gt;&lt;amiga-1000&gt;&lt;amiga-kickstart&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1141" PostTypeId="1" AcceptedAnswerId="1144" CreationDate="2016-07-22T18:04:53.583" Score="6" ViewCount="427" Body="&lt;p&gt;I was looking at a memory map of the DMG-CPU-03 soundchip in the original Game Boy and noticed the memory at registers &lt;code&gt;FF27&lt;/code&gt; through &lt;code&gt;FF2F&lt;/code&gt; are unused:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Name Addr 7654 3210 Function&#xA;-----------------------------------------------------------------&#xA;       Square 1&#xA;NR10 FF10 -PPP NSSS Sweep period, negate, shift&#xA;NR11 FF11 DDLL LLLL Duty, Length load (64-L)&#xA;NR12 FF12 VVVV APPP Starting volume, Envelope add mode, period&#xA;NR13 FF13 FFFF FFFF Frequency LSB&#xA;NR14 FF14 TL-- -FFF Trigger, Length enable, Frequency MSB&#xA;&#xA;       Square 2&#xA;     FF15 ---- ---- Not used&#xA;NR21 FF16 DDLL LLLL Duty, Length load (64-L)&#xA;NR22 FF17 VVVV APPP Starting volume, Envelope add mode, period&#xA;NR23 FF18 FFFF FFFF Frequency LSB&#xA;NR24 FF19 TL-- -FFF Trigger, Length enable, Frequency MSB&#xA;&#xA;       Wave&#xA;NR30 FF1A E--- ---- DAC power&#xA;NR31 FF1B LLLL LLLL Length load (256-L)&#xA;NR32 FF1C -VV- ---- Volume code (00=0%, 01=100%, 10=50%, 11=25%)&#xA;NR33 FF1D FFFF FFFF Frequency LSB&#xA;NR34 FF1E TL-- -FFF Trigger, Length enable, Frequency MSB&#xA;&#xA;       Noise&#xA;     FF1F ---- ---- Not used&#xA;NR41 FF20 --LL LLLL Length load (64-L)&#xA;NR42 FF21 VVVV APPP Starting volume, Envelope add mode, period&#xA;NR43 FF22 SSSS WDDD Clock shift, Width mode of LFSR, Divisor code&#xA;NR44 FF23 TL-- ---- Trigger, Length enable&#xA;&#xA;       Control/Status&#xA;NR50 FF24 ALLL BRRR Vin L enable, Left vol, Vin R enable, Right vol&#xA;NR51 FF25 NW21 NW21 Left enables, Right enables&#xA;NR52 FF26 P--- NW21 Power control/status, Channel length statuses&#xA;&#xA;       Not used&#xA;     FF27 ---- ----&#xA;     .... ---- ----&#xA;     FF2F ---- ----&#xA;&#xA;       Wave Table&#xA;     FF30 0000 1111 Samples 0 and 1&#xA;     ....&#xA;     FF3F 0000 1111 Samples 30 and 31&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://gbdev.gg8.se/wiki/articles/Gameboy_sound_hardware&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are these memory locations used for if they are not holding samples?&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2019-07-24T15:14:04.870" Title="Game Boy Sound System Unused Memory Locations" Tags="&lt;game-boy&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1142" PostTypeId="1" CreationDate="2016-07-22T19:16:10.497" Score="10" ViewCount="993" Body="&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Apple II &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Basic Prompt &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using only the instructions provided, can you crash the Apple II?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm curious if this is even possible because I have only ever programmed the machines in an Emulator, and I thought it would be cool to see what was possible on the Apple II in real life, as I am under the impression the machine had no memory protections. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, with the PEEK command, I am under the impression that you could actually sweep it through the entire memory of the machine and not trigger a crash. &lt;/p&gt;&#xA;" OwnerUserId="2149" LastEditorUserId="2081" LastEditDate="2016-12-15T14:07:37.950" LastActivityDate="2019-05-14T20:50:13.977" Title="Is it possible to crash the Apple II using only the Apple II Basic REPL?" Tags="&lt;apple-ii&gt;&lt;basic&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1143" PostTypeId="2" ParentId="1140" CreationDate="2016-07-22T19:26:37.747" Score="8" Body="&lt;p&gt;I have disassembled the A1000 boot ROM to see how it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The boot ROM is linked to address 0xf80000, and the WCS appears as RAM at 0xfc0000 through 0xffffff. When the boot ROM is satisfied that there is a Kickstart present, it writes to 0xf80000, which presumably engages a write-protect latch, and then jumps to the Kickstart ROM.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2016-07-22T19:26:37.747" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1144" PostTypeId="2" ParentId="1141" CreationDate="2016-07-22T19:37:55.527" Score="6" Body="&lt;p&gt;According to &lt;a href=&quot;http://gbdev.gg8.se/wiki/articles/Gameboy_sound_hardware#Registers&quot; rel=&quot;noreferrer&quot;&gt;the source you linked&lt;/a&gt;:  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The value written to bits marked with '-' has no effect. Reference to the value in a register means the last value written to it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, it wouldn't surprise me if those registers are actually open bus -- instead of the last value written to &lt;em&gt;that&lt;/em&gt; register, it could be the last value written to &lt;em&gt;any&lt;/em&gt; register.&lt;/p&gt;&#xA;" OwnerUserId="409" LastActivityDate="2016-07-22T19:37:55.527" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1145" PostTypeId="1" AcceptedAnswerId="1146" CreationDate="2016-07-22T20:48:30.273" Score="21" ViewCount="6889" Body="&lt;p&gt;Sometimes, NES sprites flicker when there are a lot of them, like &lt;a href=&quot;https://youtu.be/yhelVhZI8Po?t=1m19s&quot;&gt;at 1:19 in this video of Super Mario Bros.&lt;/a&gt;  Why did they do this?&lt;/p&gt;&#xA;" OwnerUserId="409" LastActivityDate="2016-12-09T01:51:21.753" Title="Why do NES sprites flicker when there are a lot of them?" Tags="&lt;graphics&gt;&lt;nes&gt;&lt;sprite&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1146" PostTypeId="2" ParentId="1145" CreationDate="2016-07-22T20:48:30.273" Score="30" Body="&lt;p&gt;The Picture Processing Unit (PPU) in the NES can only draw 64 sprites per frame and 8 sprites per horizontal line (&lt;em&gt;scanline&lt;/em&gt;).  If the game tries to draw more than that, some of them will be invisible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could ruin the game if enemies became invisible because there were too many of them, so the developers programmed the games to change the order of sprites in the sprite list.  Instead of some sprites &lt;em&gt;always&lt;/em&gt; being invisible, the invisible sprites change every frame, causing the flicker effect.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The PPU stores the list of sprites in a a 256-byte area of memory called the &lt;a href=&quot;//wiki.nesdev.com&quot; rel=&quot;noreferrer&quot;&gt;Object Attribute Memory (OAM)&lt;/a&gt;.  Usually, games keep the sprite data in the program RAM and DMA it to OAM every frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PPU also has Secondary OAM, a 32-byte memory area where it stores OAM entries for sprites that will be visible on the &lt;em&gt;next&lt;/em&gt; horizontal line of the picture (&lt;em&gt;scanline&lt;/em&gt;) and eight internal registers that store bitmaps, positions, and attributes for sprites that are visible on the &lt;em&gt;current&lt;/em&gt; scanline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because primary OAM is 256 bytes, and each sprite takes 4 bytes, the PPU can only draw 64 sprites per frame.  Because secondary OAM is only 32 bytes and there are only 8 sprite registers, the PPU can only draw 8 sprites per scanline.  If there are more than eight sprites per scanline in OAM, only the first 8 will be drawn -- the rest will be invisible.&lt;/p&gt;&#xA;" OwnerUserId="409" LastEditorUserId="409" LastEditDate="2016-12-09T01:51:21.753" LastActivityDate="2016-12-09T01:51:21.753" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1147" PostTypeId="1" AcceptedAnswerId="1175" CreationDate="2016-07-22T23:57:31.470" Score="3" ViewCount="516" Body="&lt;p&gt;I am trying to install SheepShaver on Windows and when I try to open SheepShaverGUI.exe it gives me this error&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;The procedure entry point pango_font_map_create_context could not be located in the dynamic link library C:\Program Files (x86)\GtkSharp\2.12\bin\libpangocairo-1.0-0.dll&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is what I have in the folder:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qlL6o.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qlL6o.png&quot; alt=&quot;In folder SheepShaver: Folder CD-ROM drivers. Folder Ethernet drivers. Folder General documents. Folder HFVExplorer. File Basiliskll_keycodes, 7 KB. File Mac_OS_ROM, 1,901 KB. File Mac_OS_ROM_oldworld, 4,096 KB. Text Document READ_ME, 1 KB. Application extension SDL.dll, 314 KB. Application SheepShaver, 912 KB. File SheepShaver_prefs, 1 KB. Application SheepShaverGUI, 122 KB. Text Document stdout, 1 KB.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that I am running Windows 10 Pro x64, Build 10586&lt;/p&gt;&#xA;" OwnerUserId="2148" LastEditorUserId="621" LastEditDate="2016-07-25T22:15:12.470" LastActivityDate="2016-07-25T22:20:41.510" Title="SheepShaverGUI.exe on Windows Error" Tags="&lt;emulation&gt;&lt;mac-os-classic&gt;&lt;sheepshaver&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1148" PostTypeId="2" ParentId="1142" CreationDate="2016-07-23T01:01:22.767" Score="17" Body="&lt;p&gt;Applesoft is usually fairly well-behaved. For instance, this will give an OUT OF MEMORY error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 GOSUB 20&#xA;20 GOTO 10&#xA;RUN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, there are many Applesoft bugs, mostly benign. &lt;a href=&quot;https://en.wikipedia.org/wiki/Applesoft_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia mentions a couple&lt;/a&gt; that &quot;crash&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A deficiency in Applesoft's error-trapping with ONERR means that the system stack would not be reset if an error-handling routine did not invoke RESUME, potentially leading to a crash.&lt;/li&gt;&#xA;&lt;li&gt;Due to a short-cut in the programming of the overflow test when evaluating 16 bit numbers, entering any number from 437760 to 440319 for a new line number at the BASIC prompt will cause Applesoft to crash, usually to a monitor prompt.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;E.g. for the second one you can just type the following and press return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;437760&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Crash behaviour is unpredictable because (a) as you say, there is no memory protection - if the CPU starts executing arbitrary memory locations then &quot;anything&quot; can happen, and (b) I/O is memory-mapped - even just reading memory can cause problems. The following will usually hang the machine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PRINT PEEK(49280) : REM $C080 SWITCHES OUT ROM/SWITCHES IN LC BANK 2 RAM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Uninitialized RAM will be a mix of #$00 and #$FF. If the CPU executes #$00 (i.e. BRK) the break vector($FFFE/$FFFF) might point to $0000, which could be anything - leading to another BRK etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a NMOS 6502 (not 65C02) various opcodes actually hang the CPU:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;POKE 768,2: CALL 768: REM EXECUTE HLT OPCODE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you want to see what a BRK crash looks like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;POKE 768,0: CALL 768: REM EXECUTE BRK OPCODE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It will print the BRK address + 2, A/X/Y registers, P status register, and stack pointer. E.g:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0302-    A=03 X=9D Y=00 P=36 S=F2&#xA;*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2016-12-15T07:42:52.273" LastActivityDate="2016-12-15T07:42:52.273" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1149" PostTypeId="1" CreationDate="2016-07-23T15:02:36.960" Score="6" ViewCount="330" Body="&lt;p&gt;I'm trying to organize my ZX Spectrum game images on SD card for my Retroleum &lt;a href=&quot;http://www.retroleum.co.uk/smart-card-for-zx-spectrum/&quot;&gt;SMART Card&lt;/a&gt; adapter. Long file names are supported, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#VFAT&quot;&gt;VFAT Long File Names (LFNs)&lt;/a&gt; cause too many clashes if I run through the list automatically. Is there a generally accepted set of heuristics for shortening file names to 8.3 with as few collisions as possible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some examples:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Long file name                                               8.3&#xA;=========================================================    ============&#xA;Bomb Jack (1986)(Elite Systems).sna                       →  BOMBJACK.SNA&#xA;Cybernoid II - The Revenge (1988)(Hewson Consultants).sna →  CYBERND2.SNA&#xA;Football Manager 2 (1988)(Addictive Games).sna            →  FOOTMAN2.SNA&#xA;Manic Miner (1983)(Bug-Byte Software).sna                 →  MANICMIN.SNA&#xA;Pac-Mania (1988)(Grandslam Entertainments).sna            →  PACMANIA.SNA&#xA;Sentinel, The (1987)(Firebird Software).sna               →  SENTINEL.SNA&#xA;Spy vs Spy (1985)(Beyond Software).sna                    →  SPYVSSPY.SNA&#xA;Tapper (1985)(U.S. Gold).sna                              →  TAPPER.SNA&#xA;Technician Ted (1984)(Hewson Consultants).sna             →  TECHTED.SNA&#xA;Tetris (1988)(Mirrorsoft).sna                             →  TETRIS.SNA&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have access and knowledge of the typical Unix shell tools to rename the files.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="15334" LastEditDate="2021-01-19T14:58:13.067" LastActivityDate="2021-01-19T14:58:13.067" Title="Stemming long file names to 8.3 FAT" Tags="&lt;file-system&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1150" PostTypeId="2" ParentId="1149" CreationDate="2016-07-24T01:45:29.587" Score="6" Body="&lt;p&gt;You could use the Windows way: &lt;a href=&quot;https://archive.ph/2Zt7C&quot; rel=&quot;nofollow noreferrer&quot;&gt;How Windows Generates 8.3 File Names from Long File Names&lt;/a&gt;. In short:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Remove all invalid characters such as: &lt;code&gt;&amp;quot; / \ [ ] : ; = ,&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Remove all periods, &lt;code&gt;.&lt;/code&gt;, but the last one&lt;/li&gt;&#xA;&lt;li&gt;Truncate the file name (not including extension) to 6 characters&lt;/li&gt;&#xA;&lt;li&gt;Append a tilde, &lt;code&gt;~&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Append a &lt;code&gt;1&lt;/code&gt;. If the result corresponds to a file that already exists, change it to a &lt;code&gt;2&lt;/code&gt;. Or to a &lt;code&gt;3&lt;/code&gt;, etc.&lt;/li&gt;&#xA;&lt;li&gt;Truncate the extension to 3 characters&lt;/li&gt;&#xA;&lt;li&gt;Convert to uppercase&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;You can use this procedure or tweak it so that it is simpler. For example in step 1 you could just remove everything that is not a letter or a digit. Or you can ignore the &amp;quot;add tilde&amp;quot; step.&lt;/p&gt;&#xA;" OwnerUserId="130" LastEditorUserId="15334" LastEditDate="2021-01-19T10:26:50.543" LastActivityDate="2021-01-19T10:26:50.543" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="1151" PostTypeId="2" ParentId="1149" CreationDate="2016-07-24T09:04:15.480" Score="4" Body="&lt;p&gt;You apparently have a fixed set of names that need unique 8.3 names - That is maybe a bit easier to solve than needing to have a unique hashing that will always end up with the same SFN from an LFN like Windows does. And you can get away without the tilde char that doesn't carry any useful information anyhow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might need to use a short program though, as I can't seem to be doing this in a shell language easily. See a bit of pseudocode how I would try and tackle the problem:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for all names do&#xA;  remove articles (&quot;the&quot;, &quot;a&quot;)&#xA;  replace roman numbers with arabic numbers (optional step)&#xA;  pick first 8 non-space letter chars (removes &quot;.-+&quot;...)&#xA;  check uniqueness of names, if a duplicate&#xA;     replace last characters with a running duplicate number&#xA;  endif&#xA;endfor&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is not optimal, as it doesn't try and abbreviate word parts - In case you have a dictionary of abbreviations (maybe the internet has one), you could even use that as a step 3 &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your program would then offer you the short name, and long name with an option to edit the SFN, you could even fix non-optimal names manually as you go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it is always good practice to store the resulting translation table as a .txt file on the same medium that shows both long and short names for reference.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2016-07-24T09:13:07.760" LastActivityDate="2016-07-24T09:13:07.760" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1152" PostTypeId="1" CreationDate="2016-07-24T11:59:37.663" Score="11" ViewCount="602" Body="&lt;p&gt;I have a Windows 98 Second Edition laptop that is slowly degrading. It has not been used for a few years, and I would like to take a backup of the (2GB) drive before it fails. The CD-ROM drive is read-only, and I don't have a spare floppy. I was using a faulty 128MB USB 1.0 stick to move files until it failed, and have no other compatible USB flash drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way that I could use more modern USB devices with my Windows 98? If so, how does it work? If not, how would I go about making one?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2016-07-26T09:14:52.870" LastActivityDate="2016-08-13T14:41:33.400" Title="Modern USB devices on Windows 98 SE" Tags="&lt;windows-98&gt;&lt;usb&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="2" ClosedDate="2018-10-21T10:13:06.317" ContentLicense="CC BY-SA 3.0" />
  <row Id="1153" PostTypeId="5" CreationDate="2016-07-24T15:18:59.023" Score="0" Body="&lt;p&gt;Microsoft Windows 98 is a pre-NT 16/32-bit graphical operating system with a DOS boot stage. When the operating system is loaded, the behaviours of the processor and screen change significantly to allow for certain features of the operating system, such as multi-tasking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This tag should be used for questions about the operating system and programs that are &lt;em&gt;directly&lt;/em&gt; related to the operating system. Questions about software that &lt;em&gt;can&lt;/em&gt; run on Windows 98 should use the &lt;a href=&quot;/questions/tagged/software&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;software&amp;#39;&quot; rel=&quot;tag&quot;&gt;software&lt;/a&gt; tag instead.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2016-07-24T15:18:59.023" LastActivityDate="2016-07-24T15:18:59.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1154" PostTypeId="4" CreationDate="2016-07-24T15:18:59.023" Score="0" Body="For questions about Microsoft Windows 98" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2016-07-24T15:18:59.023" LastActivityDate="2016-07-24T15:18:59.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1156" PostTypeId="1" CreationDate="2016-07-24T18:40:10.040" Score="11" ViewCount="183" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68020&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia's article for MC68020&lt;/a&gt; sports this paragraph:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Addressing modes&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The new addressing modes added scaled indexing and another level of&#xA;  indirection to many of the pre-existing modes, and added quite a bit&#xA;  of flexibility to various indexing modes and operations. Though it was&#xA;  not intended, these new modes made the 68020 very suitable for page&#xA;  printing; most laser printers in the early '90s had a 68EC020 at their&#xA;  core.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What addressing mode was indeed the one that proved valuable for page printing? And, assuming it could be that it facilitated implementing PostScript, why exactly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: could it be that the very same addressing mode helped efficiently implement virtual table dispatch or equivalent constructs for stack-based languages like PostScript?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2016-08-05T14:45:05.213" LastActivityDate="2016-08-05T14:45:05.213" Title="68020 addressing mode suitable for page printing?" Tags="&lt;m68k&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1157" PostTypeId="2" ParentId="1156" CreationDate="2016-07-24T21:14:55.017" Score="14" Body="&lt;p&gt;The &lt;em&gt;memory indirect [pre|post]indexed&lt;/em&gt; addressing modes were basically direct support on CPU level for 2-dimensional arrays (which are inherently suitable to describe printed (pixelated) pages in various scalings).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The programmer builds a table of row addresses in memory, and the CPU can directly access data in such tables by instructions like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MOVE.L ([10, A4,d0.l * 4],16),d1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(fetch the longword that is pointed to by an address in memory at 10+a4+d0+16 into d1, - All in a single instruction). A4 would be used as a row, d0 as a column register. This allows the CPU to sweep large n-dimensional arrays of arbitrary sized elements very effectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether it really was this mode that made the CPU particularly suitable for laser printers, I don't know. It was very suitable for other applications as well. I guess it was more the capability to directly address huge amounts of memory without the additional Intel hassle of segmented memory.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2016-07-25T11:44:30.787" LastActivityDate="2016-07-25T11:44:30.787" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1158" PostTypeId="1" AcceptedAnswerId="1784" CreationDate="2016-07-25T09:16:12.547" Score="27" ViewCount="3105" Body="&lt;p&gt;When a 68000 CPU powers up, it reads a few words at memory location zero to get the initial stack pointer and program counter. That suggests to me that a computer system designer would put the system ROM at memory location zero, where the 68000 would read the initial SP and PC when coming out of reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the Amiga puts RAM at location zero, and the ROM at the very far end of the address space. It has a hardware switch which causes the system address decoding to place a second copy of the ROM at location zero, hiding the RAM. At reset, this hardware switch is &quot;on&quot;, so the 68000 reads the initial SP and PC from this mirrored copy of the ROM and starts executing. Then the ROM firmware switches the hardware switch &quot;off&quot; to remove the mirrored ROM and reveal the RAM again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seems to me like an overly complex solution. Why did the Amiga's designers decide to place the ROM where they did and add this extra addressing logic to make it work?&lt;/p&gt;&#xA;" OwnerUserId="149" LastEditorUserId="11916" LastEditDate="2019-04-07T22:07:51.903" LastActivityDate="2020-10-05T19:21:41.807" Title="Why is the Amiga ROM at a high memory location, and RAM in low memory?" Tags="&lt;amiga&gt;&lt;memory-layout&gt;&lt;motorola-68000&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1159" PostTypeId="2" ParentId="1152" CreationDate="2016-07-25T10:12:55.083" Score="7" Body="&lt;p&gt;Your best option is probably to skip Windows entirely.  A Linux livecd will be able to read your filesystem, and has the drivers to use your USB ports built-in.  My personal preference would be for &lt;a href=&quot;https://www.system-rescue-cd.org/Download&quot;&gt;System Rescue CD&lt;/a&gt; - it requires a Pentium or newer, but other than that, should support almost any hardware.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-07-25T10:12:55.083" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1160" PostTypeId="2" ParentId="1158" CreationDate="2016-07-25T11:15:03.757" Score="2" Body="&lt;p&gt;I don't believe there has ever been an official explanation to the &quot;ROM overlay&quot; behavior at power on, so the following is just my speculation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a matter of fact, Agnus/Agnes (the &lt;strong&gt;A&lt;/strong&gt;ddress &lt;strong&gt;G&lt;/strong&gt;e&lt;strong&gt;NE&lt;/strong&gt;rator) does not have any &quot;Chip RAM base address&quot; register, so even if the bus address decode external logic could have been made to have the Chip RAM appear (from the point of view of the 68000) at any address other than 0 (to leave space for ROMs at the beginning of the address space), the chips themselves would still have seen the Chip RAM as a block of RAM starting from address 0. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would have required all program to do admittedly trivial pointer arithmetic (basically subtract the Chip RAM start address to any pointer programmed in the chips' registers). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, in 1983/84/85, when all cycles counted and programming was in assembly, this was probably seen as adding inconvenient burden to developers. Since in any case in the A1000 the whole bus address decode / chip select / RAM access logic is made with external logic (*), adding the ROM overlay logic would not have added much in cost, so Commodore went for keeping Chip RAM at 0 and the ROM to somewhere else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later models of course kept the same memory map for compatibility reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(*) the original 48-DIP 8361/8367 Agnus/Agnes really has no bus arbitration logic; that was later added to the A500/A2000 &quot;Fat&quot; Agnus.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2016-07-25T11:22:54.740" LastActivityDate="2016-07-25T11:22:54.740" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1162" PostTypeId="2" ParentId="1158" CreationDate="2016-07-25T19:57:45.613" Score="0" Body="&lt;p&gt;I don't know the true answer, but it did seem to be the trend with the earlier microcomputers to have ROM all the way at the top of the memory map and RAM always starting from 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I can think of is that it is easier for hardware and software to always know that RAM starts at 0x0000 than it is to have to figure out what offset it begins at. (think: KickStart 1.3 was 256KB, 2.04+ was 512KB). Address lines for decoding ROM only need to exist in the higher region rather than needing to understand all 16/24/32 address lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think that it applies to the 68000 series, but at least on earlier 6502 based platforms the zero page (0x00-0xFF) and stack page (0x100-0x1FF) had special meaning and thus forced ROM to be high. Perhaps it was simply an old habit in that respect.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-07-25T19:57:45.613" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1163" PostTypeId="2" ParentId="1086" CreationDate="2016-07-25T20:06:46.230" Score="3" Body="&lt;p&gt;Answer to &quot;the tape is a Philips Mini Digital Cassette Recorder&quot;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Please, &lt;em&gt;please&lt;/em&gt; include such information when you are asking questions. You are the only one who has the hardware in front of you. We can't see what you have, what connectors it has, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;Philips Mini Digital Cassette Recorder&lt;/strong&gt; was used for several computers as data storage, e.g. the &lt;a href=&quot;https://en.wikipedia.org/wiki/Nascom&quot; rel=&quot;nofollow&quot;&gt;Nascom&lt;/a&gt;, the &lt;a href=&quot;https://en.wikipedia.org/wiki/DAI_Personal_Computer&quot; rel=&quot;nofollow&quot;&gt;DAI Personal Computer&lt;/a&gt; and the &lt;a href=&quot;http://www.tubedata.org/phunsy/&quot; rel=&quot;nofollow&quot;&gt;Phunsy&lt;/a&gt;, possibly with formats that are different from the one used in the IPS-110.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a &lt;a href=&quot;http://www.tubedata.org/phunsy/Philips-MDCR_Service-Manual.pdf&quot; rel=&quot;nofollow&quot;&gt;service manual&lt;/a&gt; and another, very similar &lt;a href=&quot;http://www.nascomhomepage.com/pdf/mdcr.pdf&quot; rel=&quot;nofollow&quot;&gt;manual&lt;/a&gt; available.&#xA;The recorder has a simple interface with 9V signal levels and a data transfer rate of 6 kBit/s, using a simple modulation (length of low part of data cycle). It's different from both the tape types available in Dave Pitts' simulator, so the simulator won't help in figuring out the format. Very likely the IP2-110 has its own hardware for the tape interface, and its own PROM to boot MEMACS from it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Options to write to tape:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Use a modern microcontroller and a few other chips (level converter) to make an interface to the tape you can connect to a PC (serial should be fast enough) That's a nice weekend project for someone who is familiar with microcontrollers and electronics; the manuals have all information that is needed. But you need a person near you who can work with the hardware you have. If there are electronics companies near you, maybe they can find such a person for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the interface works, you still have to figure out the tape format by reading an existing tape, but it's probably something simple like &quot;just the data in blocks&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the simplest option, provided you can find someone to do it for you. If it works, please have the person who did it post a summary and make the microcontroller code available on the internet, so other people can profit from it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Find something else to attach the tape to. It looks like the Tandberg TDV 2220 terminal mentioned in the instructions was meant to do this. One of the computers mentioned above would also do, but I suppose all of them are very difficult to find.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Try to find some method of communicating with the IP2-110 and use the hardware of the IP2-110 to write to the tape. For that (if it's possible at all), I'd still need information of what other connectors the IP2-110 has (some serial communications port), and one would need to attach a PC to these ports to find out if one can communicate with it. This is also better done by someone near you, and option (1) has a much better chance of success.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-07-25T20:06:46.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1164" PostTypeId="1" CreationDate="2016-07-25T20:17:49.763" Score="6" ViewCount="943" Body="&lt;p&gt;There are some sites online which contain information on unused content in video games (&lt;a href=&quot;https://tcrf.net/The_Cutting_Room_Floor&quot;&gt;The Cutting Room Floor&lt;/a&gt; being an example).  Many of these sites contain GameShark codes to enter to enable or expose this originally hidden content.  The Wikipedia page on the Nintendo 64 Game Shark Pro states that there was an in-game code search menu, I have not found any guides on how to use this code search menu to expose memory locations not accessible during normal gameplay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would I start searching for unused content in a game?  Do I need to use a GameShark device, or if I have a dumped ROM of a game can I run that through a HEX editor?&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2017-06-19T23:33:49.463" Title="How do I find unused content in a Nintendo 64 game?" Tags="&lt;nintendo&gt;&lt;nintendo-64&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1165" PostTypeId="5" CreationDate="2016-07-25T20:42:45.103" Score="0" Body="&lt;p&gt;The Motorola 68000 is a 16/32-bit CISC microprocessor designed and marketed by Motorola Semiconductor Products Sector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use this tag for the 68000 specifically.  If your question could relate to multiple processors in the 680x0 range, please consider using &lt;a href=&quot;/questions/tagged/m68k&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;m68k&amp;#39;&quot; rel=&quot;tag&quot;&gt;m68k&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2017-05-18T08:32:09.033" LastActivityDate="2017-05-18T08:32:09.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1166" PostTypeId="4" CreationDate="2016-07-25T20:42:45.103" Score="0" Body="for questions about the Motorola 68000 microprocessor" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-26T09:07:00.570" LastActivityDate="2016-07-26T09:07:00.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1167" PostTypeId="5" CreationDate="2016-07-25T20:43:49.297" Score="0" Body="&lt;p&gt;The Commodore Amiga 1000 is the first personal computer released by Commodore International in the Amiga line, taking advantage of the Motorola 68000 CPU.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-26T09:07:46.257" LastActivityDate="2016-07-26T09:07:46.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1168" PostTypeId="4" CreationDate="2016-07-25T20:43:49.297" Score="0" Body="for questions about the Commodore Amiga 1000 personal computer" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-26T09:07:03.553" LastActivityDate="2016-07-26T09:07:03.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1169" PostTypeId="5" CreationDate="2016-07-25T20:45:09.147" Score="0" Body="&lt;p&gt;Commodore's AmigaOS was formed of both the Kickstart firmware and a software component provided on disk (with the software portion often termed as Workbench).&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-26T09:07:14.210" LastActivityDate="2016-07-26T09:07:14.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1170" PostTypeId="4" CreationDate="2016-07-25T20:45:09.147" Score="0" Body="For questions about Kickstart, the bootstrap firmware of the Amiga" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-10T17:55:02.003" LastActivityDate="2016-09-10T17:55:02.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1171" PostTypeId="1" AcceptedAnswerId="1172" CreationDate="2016-07-25T21:43:45.707" Score="2" ViewCount="1947" Body="&lt;p&gt;I am using SheepShaver to emulate OS9 and I have got everything else working, except that when I run it it gives me the cdenable.sys is missing error. I have cdenable.sys in Windows/System32/drivers, and it doesn't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am on Windows 10 64-bit&lt;/p&gt;&#xA;" OwnerUserId="2148" LastEditorUserId="2148" LastEditDate="2016-07-26T10:07:08.640" LastActivityDate="2016-07-26T10:07:08.640" Title="SheepShaver - cdenable.sys on 64-bit" Tags="&lt;emulation&gt;&lt;mac-os-classic&gt;&lt;sheepshaver&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1172" PostTypeId="2" ParentId="1171" CreationDate="2016-07-25T22:10:47.200" Score="2" Body="&lt;p&gt;Are you using Basilisk II?  If so, it should be included in SheepShaver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Download &lt;code&gt;cdenable.sys&lt;/code&gt; from one of the SheepShaver links &lt;a href=&quot;http://www.emaculation.com/forum/viewtopic.php?t=5325&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.  Then copy the file from the &lt;code&gt;CD-ROM Drivers&lt;/code&gt; directory to &lt;code&gt;..WINDOWS\system32\drivers&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.emaculation.com/doku.php/cdenable.sys&quot; rel=&quot;nofollow&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, from that article it looks like this driver is only supported on 32-bit versions of Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On 64-bit versions of Windows, put the driver in the &lt;code&gt;C:\Windows\SysWOW64\drivers&lt;/code&gt; directory.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-25T22:12:26.583" LastActivityDate="2016-07-25T22:12:26.583" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1173" PostTypeId="5" CreationDate="2016-07-25T22:13:50.370" Score="0" Body="&lt;p&gt;SheepShaver is a MacOS run-time environment for BeOS and Linux that allows you to run classic MacOS applications inside the BeOS/Linux multitasking environment.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-26T09:07:38.757" LastActivityDate="2016-07-26T09:07:38.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1174" PostTypeId="4" CreationDate="2016-07-25T22:13:50.370" Score="0" Body="For questions about the MacOS Classic emulator" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-07-26T09:07:28.037" LastActivityDate="2016-07-26T09:07:28.037" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1175" PostTypeId="2" ParentId="1147" CreationDate="2016-07-25T22:20:41.510" Score="3" Body="&lt;p&gt;Uninstall GTK +2 if you already have it. Go to &lt;a href=&quot;http://emaculation.com/doku.php/sheepshaver_setup&quot; rel=&quot;nofollow&quot;&gt;Emaculation&lt;/a&gt; and download the GTK +2 Runtime from there. Set it up and SheepShaverGui.exe should work. If not, restart your computer.&lt;/p&gt;&#xA;" OwnerUserId="2148" LastActivityDate="2016-07-25T22:20:41.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1176" PostTypeId="2" ParentId="1158" CreationDate="2016-07-25T22:47:54.057" Score="24" Body="&lt;p&gt;All of the 68k-based computers (Amiga, Atari ST and Sinclair QL, as well as the classic Macintosh) went to market in a rush. And all of them went to market before the OS (and, thus, the ROMs) were really &amp;quot;finished&amp;quot;. The QL initially had an outboard ROM extension that later on had to be replaced with the &amp;quot;final&amp;quot; ROMs (so, the computer had to be sent back to the factory for an upgrade), Amiga and Atari used a minimum loader that loaded the OS from floppy disk into low RAM (which was obviously much easier to upgrade).&lt;/p&gt;&#xA;&lt;p&gt;In order to be able to use the vector tables in the first 1k of memory, those loadable OSs needed RAM there (otherwise, all TRAP and interrupt handlers would have had to be compiled into fixed places in later versions of the operating systems which would have been a severe hassle...)&lt;/p&gt;&#xA;&lt;p&gt;An additional advantage of having RAM at lower addresses was that TRAPs and interrupt vectors could easily be re-directed to user-defined OS extension routines. Any piece of add-on hardware that used interrupts needed that feature. The Sinclair QL with ROM there had to use secondary vector tables in RAM for that purpose, effectively diverting trap and interrupt vectors through writable memory, adding additional complexity and latency.&lt;/p&gt;&#xA;&lt;p&gt;Motorola realized this inconvenience and added a vector base register (VBR) to later versions of the 68k series, allowing the programmer to put the vector table anywhere in addressable memory. That meant that boot loader ROMs could be placed at $0 (or rather, anywhere), thus in a much more flexible way in 68010 and greater systems without hard-coding the vector addresses.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2020-10-05T19:21:41.807" LastActivityDate="2020-10-05T19:21:41.807" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="1178" PostTypeId="1" AcceptedAnswerId="1197" CreationDate="2016-07-26T14:55:04.703" Score="13" ViewCount="2931" Body="&lt;p&gt;Here is a basic memory map of the Game Boy's 16bit address bus:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0000-3FFF 16KB ROM Bank 00 (in cartridge, fixed at bank 00)&#xA;4000-7FFF 16KB ROM Bank 01..NN (in cartridge, switchable bank number)&#xA;8000-9FFF 8KB Video RAM (VRAM) (switchable bank 0-1 in CGB Mode)&#xA;A000-BFFF 8KB External RAM (in cartridge, switchable bank, if any)&#xA;C000-CFFF 4KB Work RAM Bank 0 (WRAM)&#xA;D000-DFFF 4KB Work RAM Bank 1 (WRAM) (switchable bank 1-7 in CGB Mode)&#xA;E000-FDFF Same as C000-DDFF (ECHO) (typically not used) &#xA;FE00-FE9F Sprite Attribute Table (OAM)&#xA;FEA0-FEFF Not Usable&#xA;FF00-FF7F I/O Ports&#xA;FF80-FFFE High RAM (HRAM)&#xA;FFFF Interrupt Enable Register &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The memory at registers &lt;code&gt;FEA0&lt;/code&gt; to &lt;code&gt;FEFF&lt;/code&gt; is labeled frequently as &quot;not usable,&quot; &quot;unused,&quot; or &quot;empty but unusable for I/O.&quot;  &lt;a href=&quot;http://gameboy.mongenel.com/dmg/asmmemmap.html&quot;&gt;One page&lt;/a&gt; cryptically says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;$FEA0-$FEFF - Unused&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;And it'd be smart to leave it that way. =)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What is this memory range used for and why shouldn't developers touch it?&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-07-27T10:24:08.107" Title="What is this unused memory range in the Game Boy's memory map?" Tags="&lt;nintendo&gt;&lt;memory-layout&gt;&lt;game-boy&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1179" PostTypeId="5" CreationDate="2016-07-26T17:09:01.583" Score="0" Body="&lt;p&gt;For questions regarding the usage, testing or restoration of memory within a retrocomputer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/memory-layout&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;memory-layout&amp;#39;&quot; rel=&quot;tag&quot;&gt;memory-layout&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-12-21T13:03:34.023" LastActivityDate="2016-12-21T13:03:34.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1180" PostTypeId="4" CreationDate="2016-07-26T17:09:01.583" Score="0" Body="For questions about computer memory in a retrocomputing context" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-12-21T13:03:34.023" LastActivityDate="2016-12-21T13:03:34.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1181" PostTypeId="5" CreationDate="2016-07-26T17:12:39.680" Score="0" Body="&lt;p&gt;USB was designed to standardize the connection of computer peripherals to personal computers, both to communicate and to supply electric power.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-26T18:09:26.463" LastActivityDate="2016-07-26T18:09:26.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1182" PostTypeId="4" CreationDate="2016-07-26T17:12:39.680" Score="0" Body="For questions on Universal Serial Bus cables, connections, and communication protocols related to retrocomputing hardware and software" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-07-26T18:09:17.277" LastActivityDate="2016-07-26T18:09:17.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1183" PostTypeId="5" CreationDate="2016-07-26T17:15:12.863" Score="0" Body="&lt;p&gt;Related tags:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;/questions/tagged/archival&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;archival&amp;#39;&quot; rel=&quot;tag&quot;&gt;archival&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-26T18:08:35.370" LastActivityDate="2016-07-26T18:08:35.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1184" PostTypeId="4" CreationDate="2016-07-26T17:15:12.863" Score="0" Body="For questions on backing up and restoring hardware and software in a retrocomputing context" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-07-26T18:09:01.357" LastActivityDate="2016-07-26T18:09:01.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1185" PostTypeId="5" CreationDate="2016-07-26T17:18:03.973" Score="0" Body="&lt;p&gt;Workbench is the graphical file manager of AmigaOS developed by Commodore International for their Amiga line of computers.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-26T18:09:21.200" LastActivityDate="2016-07-26T18:09:21.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1186" PostTypeId="4" CreationDate="2016-07-26T17:18:03.973" Score="0" Body="For questions about the Amiga Workbench version 1.3 File Manager" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-07-26T18:08:29.167" LastActivityDate="2016-07-26T18:08:29.167" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1187" PostTypeId="5" CreationDate="2016-07-26T20:18:48.810" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/cassette-tape&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;cassette-tape&amp;#39;&quot; rel=&quot;tag&quot;&gt;cassette-tape&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-27T08:00:10.237" LastActivityDate="2016-07-27T08:00:10.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1188" PostTypeId="4" CreationDate="2016-07-26T20:18:48.810" Score="0" Body="For questions regarding the cassette tape storage medium" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-07-27T08:00:21.050" LastActivityDate="2016-07-27T08:00:21.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1189" PostTypeId="5" CreationDate="2016-07-26T20:22:55.283" Score="0" Body="&lt;p&gt;Regarding chips in general.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Chip&quot; can refer to any integrated circuit, monolithic integrated circuit, or microchip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many specific processors or controllers have their own tags, please use those specific tags when they exist in preference to this tag.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="3290" LastEditDate="2020-06-04T15:26:37.803" LastActivityDate="2020-06-04T15:26:37.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1190" PostTypeId="4" CreationDate="2016-07-26T20:22:55.283" Score="0" Body="General questions about computer chips and chipsets in retro hardware. Use a specific chip’s tag instead if available." OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2021-02-08T17:31:46.017" LastActivityDate="2021-02-08T17:31:46.017" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1191" PostTypeId="1" AcceptedAnswerId="1195" CreationDate="2016-07-26T22:19:13.073" Score="27" ViewCount="11343" Body="&lt;p&gt;Emulators such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Higan_(emulator)&quot;&gt;Higan&lt;/a&gt; are cycle-accurate and thus have full compatibility with all existing software. In a 2011 Ars Technica &lt;a href=&quot;http://arstechnica.com/gaming/2011/08/accuracy-takes-power-one-mans-3ghz-quest-to-build-a-perfect-snes-emulator/&quot;&gt;article&lt;/a&gt;, much was said about cycle accuracy and how it preserves games by allowing them to run flawlessly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the interest of performance, emulators often implement the processor's instruction set directly. This means instructions are executed instantly, as if they were atomic operations. In fact, &lt;a href=&quot;https://en.wikipedia.org/wiki/Cycles_per_instruction&quot;&gt;they are executed over many cycles&lt;/a&gt;. This breaks software that takes advantage of this fact in some creative way. So, by emulating a processor cycle-by-cycle instead of instruction-by-instruction, accuracy increases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I don't understand is how an &lt;em&gt;entire&lt;/em&gt; emulator can be cycle-accurate. What do people mean when they say that? There are multiple components in the system and they're all running at different &lt;a href=&quot;https://en.wikipedia.org/wiki/Clock_signal&quot;&gt;clock&lt;/a&gt; rates, so I'm not sure what exactly &lt;em&gt;cycle&lt;/em&gt; is referring to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does an emulator have to do in order to be classified as cycle-accurate?&lt;/p&gt;&#xA;" OwnerUserId="2162" LastEditorUserId="15334" LastEditDate="2021-02-06T20:42:30.003" LastActivityDate="2021-02-06T20:42:30.003" Title="What exactly is a cycle-accurate emulator?" Tags="&lt;emulation&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1192" PostTypeId="1" AcceptedAnswerId="1193" CreationDate="2016-07-26T22:21:12.153" Score="13" ViewCount="6690" Body="&lt;p&gt;I have a couple of old Game Boy Advance SP systems around somewhere, and I was wondering if it's possible to get an old version of Linux running on one. I'm just doing it for fun, and thought that it might be cool to do if it is possible.&lt;/p&gt;&#xA;" OwnerUserId="2148" LastEditorUserId="621" LastEditDate="2016-11-02T21:39:18.917" LastActivityDate="2017-02-11T16:24:31.583" Title="Is it possible to run Linux on a GBA SP?" Tags="&lt;linux&gt;&lt;game-boy-advance&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1193" PostTypeId="2" ParentId="1192" CreationDate="2016-07-26T22:30:48.470" Score="14" Body="&lt;p&gt;Not Linux, but I know you can run UNIX 5 with a tool called gbaunix.  You can read about the process in Amit Singh's &lt;a href=&quot;http://www.kernelthread.com/publications/gbaunix/&quot;&gt;paper&lt;/a&gt; on kernelthread and you can browse through the source on &lt;a href=&quot;https://github.com/JALsnipe/gbaunix-0.0&quot;&gt;my unofficial fork on GitHub&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need a a copy of the RK05 disk image to use gbaunix.  If you don't want to recompile the binary, you can &lt;code&gt;cat&lt;/code&gt; the disk image with the precompiled binary provided in the paper.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ cat unixv5.tmp disks/unixv5.dsk &amp;gt; unixv5.gba&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-07-26T22:43:40.767" LastActivityDate="2016-07-26T22:43:40.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1194" PostTypeId="2" ParentId="1191" CreationDate="2016-07-26T23:33:03.020" Score="1" Body="&lt;p&gt;I'm not an expert in emulators, but a cycle obviously refers to a clock cycle.  So if a 6502 takes 3 cycles to perform a specific operation and it is being clocked at 1Mhz (1 million cycles per second) then that operation should take 3 millionth of a second to execute.  This was pretty important back in the day as it was the only way of accurately timing anything.  If you took a game written with the assumption the the main clock was running at 1MHz and then ran it on a machine (or emulator) running at 2Mhz, everything would suddenly be running twice as fast (which is cool for spreadsheets, but not cool for space invaders).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would further extrapolate that a cycle-accurate emulator would be sensitive not only to spending the right amount of time performing each operation, but also to what happens during each cycle.  For example, an opcode might fetch on the first cycle, update memory on the second cycle and set status registers and increment the program counter on the third cycle (so the emulator would try to do exactly the same thing).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can further apply this to support hardware, co-processors, synthesizer chips, etc.  Everything being emulated could be emulated cycle-accurately.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2016-07-26T23:33:03.020" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1195" PostTypeId="2" ParentId="1191" CreationDate="2016-07-26T23:48:06.020" Score="28" Body="&lt;p&gt;For an emulator to be &quot;cycle accurate&quot; means the interactions between the components are timed accurately enough so that the emulation behaves the same way as the original machine for any given input.  I mean &quot;input&quot; in the general sense -- both external inputs such as keyboards, joysticks, buttons, etc. and the program (or programs) being run, the data available on devices and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early (late 1970s to early 1980s) game consoles and home computers almost always ran off a single base clock frequency that was divided down by various factors to run the main CPU, graphics, sound and other systems.  In those cases a cycle would refer to the highest clock frequency which is typically that provided to the graphics system.  So, for example, there was often an exact number of CPU cycles per video frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you point out, for systems with multiple clocks the notion of a cycle doesn't make any real sense.  But each subsystem driven by a clock will operate in fixed steps so we stretch the term &quot;cycle accurate&quot; to mean that each part of the system will perform its operations in the same amount of real time as the original and the interactions between each subsystem are such that they will seem the others running at the same relative speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For most of an emulator's operation timing accuracy is not a concern.  If the CPU stores 7 into a memory location it doesn't matter exactly when it happens because the change cannot be noticed by anything else in the system.  But if the processor changes a video memory location then timing may make the difference between the video output changing or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other side of cycle accuracy is duration.  If the emulated CPU runs faster than a real CPU (perhaps because it takes few cycles for some or all instructions) then a game may be seen to run too quickly.  For the most part such timing is easy to get right and is usually made inaccurate by not modelling interactions with RAM or devices.  Sometimes the CPU is slowed down a little bit when it reads/writes memory.  That can be difficult to emulate correctly but without that bit of accuracy games or other applications will run too quickly.  Not generally a problem for a word processor, but for games or more highly interactive applications it will be noticable to the experienced user.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Component Interactions&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Except for RAM, interaction between the CPU and supporting subsystems is mostly one way.  ROM only returns values as asked.  Sound systems only change their output based on what the CPU tells them.  Joysticks and keyboards only report user input to the CPU.  Graphics only change when the CPU sends new data.  BUT, only mostly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Graphics systems can tell the CPU when a new frame has started.  Sound systems might report when they have finished playing a bit of audio.  Any time a component can give feedback to the CPU there may be a need for timing accuracy.  But how much accuracy is required really depends on the particular device and the program's use of that device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, in a simple game the positions of various sprites (player and enemies) on screen might be updated once per frame.  In that case cycle-level accuracy isn't needed.  All you need is for the &quot;start frame&quot; indication to come by at a frequency that is close enough to the original for a human to think it exact and the CPU runs fast enough to make the change before the frame drawing begins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More complex games might change sprite positions while the graphics display is drawing them.  Typically the graphics processor will help out by giving an indication of when each line starts.  Now cycle accuracy is more important.  If the CPU runs a bit slower than it should the sprites will be updated too late causing them to flicker or briefly appear distorted.  There isn't an intrinsic difference between this and the &quot;once per frame technique&quot; from an emulator perspective.  It's just that the times involved are smaller and thus small timing inaccuracies can make a big difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at that you might think that running the CPU a bit more quickly than usual might be fine.  Indeed, it might.  But then you run into a program which gets the &quot;new line&quot; signal an intentionally delays before changing the sprites.  This works because the the hardware only looks at new sprite values at the start of the line.  If the changes happen while the line is drawing the changes won't show up until the next line which is what the program expects.  Unless you want to program your emulator to have special cases for each game (a viable but time consuming strategy) you learn that your best bet is to be &quot;cycle accurate&quot; so that these different things all work properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And there can be even more extreme cases.  Some graphics hardware only gives the &quot;new frame&quot; indication.  But sprites can be changed on a per-line basis.  Very clever programmers will use the &quot;new frame&quot; signal then go into a CPU delay loop precisely timed to wait until, say, half-way down the screen where they'll update the sprites.  That's only going to work if the relative timing of the CPU and graphics is exact &lt;em&gt;and&lt;/em&gt; the count of cycles per instruction is perfect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point being that component interactions can happen because of explicit feedback (e.g., the graphics saying a new line has started) or because of implicit knowledge (e.g., the CPU knows exactly what portion of the display is being shown because it can mark time).&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2016-07-27T23:09:53.220" LastActivityDate="2016-07-27T23:09:53.220" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1196" PostTypeId="1" AcceptedAnswerId="1204" CreationDate="2016-07-27T10:05:44.287" Score="1" ViewCount="625" Body="&lt;p&gt;I am using SheepShaver on Windows 10. I had everything working, so  I went to download Stuffit Expander 2011 to extract some software to use with SheepShaver. When the installation process was done I had to restart my computer. After the restart, I attempted to open SheepShaver, which did not work. There was no error message. It just did not start.&lt;/p&gt;&#xA;" OwnerUserId="2148" LastActivityDate="2016-07-28T17:13:14.533" Title="SheepShaver won't open after reboot" Tags="&lt;emulation&gt;&lt;mac-os-classic&gt;&lt;sheepshaver&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1197" PostTypeId="2" ParentId="1178" CreationDate="2016-07-27T10:24:08.107" Score="10" Body="&lt;p&gt;Calling it a &quot;memory range&quot; is incorrect - and possibly what is leading you astray. The entire range &lt;code&gt;0000&lt;/code&gt;-&lt;code&gt;FFFF&lt;/code&gt; is called the &quot;address range&quot; of the CPU - you can write a CPU instruction (or three) that can access a bit, byte or word at any of those addresses. What the hardware &lt;em&gt;does&lt;/em&gt; with that access depends on what hardware is &quot;at&quot; that address.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The first 16K addresses into ROM Bank 0. There's an EPROM that will &quot;read out&quot; a byte if there's an access there - you can call that memory.&lt;/li&gt;&#xA;&lt;li&gt;The second 16K addresses into one of a number of ROM Banks, depending on whichever one is switched in via an I/O Port (see below). There's also an EPROM here (possibly the same one...) - you can call that memory too.&lt;/li&gt;&#xA;&lt;li&gt;The next 8K is Video RAM - write a value here and the screen may be changed (depending on whether that byte is on-screen at the moment or not). Definitely memory!&lt;/li&gt;&#xA;&lt;li&gt;The next 8K is true RAM - if it exists in the cartridge. Note that there's &lt;em&gt;probably&lt;/em&gt; hardware to respond to an access at this address even if there's no RAM there (this hints at my final point below). But yes, that's memory - if it exists.&lt;/li&gt;&#xA;&lt;li&gt;The next 4K addresses real RAM inside the GameBoy - memory!&lt;/li&gt;&#xA;&lt;li&gt;The next 4K addresses more real RAM - which bank (of 7) depends on an I/O Port (see below). Memory!&lt;/li&gt;&#xA;&lt;li&gt;The next 7.5K are an &quot;echo&quot; of the previous two RAM windows. Accessing these (as is described) actually access that RAM - so there's accessible memory there, albeit not unique.&lt;/li&gt;&#xA;&lt;li&gt;The final 0.5K is, quite simply, not memory - except the 127 bytes of HRAM at &lt;code&gt;FF80&lt;/code&gt;-&lt;code&gt;FFFE&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What's in most of those bytes (not including the range you're talking about) are hardware registers that do various things when you read or write to the various bits. You could quite easily store a $A5 there, but get a $43 if you read it. Each of the bits mean something on the write, and the read may mean the same thing, or a completely different thing, for each bit. The point is, it's hardware dependent on a byte-by-byte basis as to the hardware that's &quot;at&quot; each memory location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's the point about the &quot;empty&quot; range, and the caution there. If there's physically no hardware mapped to that address, then the low-level CPU access &lt;em&gt;to&lt;/em&gt; that address goes... nowhere. And if the CPU does the read and then waits for an acknowledgement - there may not be hardware to provide the acknowledge. You &lt;em&gt;could&lt;/em&gt; hang the CPU, in hardware, that only a reset or power cycle can fix.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;That's what could happen in a more sophisticated CPU, with Bus transactions and multi-master arrangements. A Bus error is not a good situation there! But the CPU in the GameBoy doesn't have that, so it would simply read the &quot;floating Bus&quot; as a random byte - perhaps the last byte accessed? Who knows.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's what I meant about the External RAM earlier. It'd be easy to imagine a program trying to access RAM that's not there, so the hardware should cater for that and respond anyway - but theoretically it'll be the cartridge program that's accessing it, and the cartridge should know how much RAM it has to give. So maybe not...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the piddly 96 bytes in that range? Would the rest of the hardware &quot;know&quot; that there's no hardware there and generate the acknowledge? Obviously not! Hence the caution - it's just bad practice to access addresses that don't have hardware &quot;at&quot; them.&lt;/p&gt;&#xA;" OwnerUserId="1980" LastActivityDate="2016-07-27T10:24:08.107" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1198" PostTypeId="2" ParentId="1192" CreationDate="2016-07-27T12:37:08.863" Score="10" Body="&lt;p&gt;Linux itself will not run on the GBA SP. The reason for this is that the CPUs (one ARM7TDMI and one Z80) do not have a way to protect and manage memory. The component to do that is the MMU, which needs to be present on all computers that can run Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But a variant called uCLinux (short for microcontroller Linux) has some things stripped out and could theoretically run on the Gameboy Advance SP. But I do not know if 288 KB is enough memory for this ...&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2016-07-27T15:33:25.697" LastActivityDate="2016-07-27T15:33:25.697" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="1199" PostTypeId="2" ParentId="1191" CreationDate="2016-07-27T17:24:01.270" Score="5" Body="&lt;p&gt;For &quot;cycle accurate&quot; emulation, an emulator needs to make sure that software using delay loops (or carefully timed assembly instructions) gets a reaction after the same number of cycles as on a real system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In many (especially old) systems, peripherals are clocked by the main CPU, e.g. the old ISA bus traditionally just used whatever frequency the CPU had (until CPUs got too fast and an indirection had to be introduced). This establishes a pretty good baseline clock for emulation (for device register access etc.), but that's actually the easy part. Most peripherals are timed by external, physical, elements such as rotating platters, or incoming bits on a wire. In most cases, an emulator would not physically model those, but instead do anything from completely ignoring the problem, adding fixed delays, to precise CPU cycle counting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that context, &quot;cycle accurate&quot; just means that the emulator has a mechanism in place that matches the speed of the emulated peripheral to the emulated CPU so that software running on the emulated CPU can't tell the difference.&lt;/p&gt;&#xA;" OwnerUserId="2049" LastActivityDate="2016-07-27T17:24:01.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1200" PostTypeId="2" ParentId="1083" CreationDate="2016-07-27T17:56:04.847" Score="14" Body="&lt;p&gt;In short: not very.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Older versions of Xenix are based on V7 or System III (which are very similar to each other). They had the bourne shell, and large parts of the standard library were already available, e.g. stdio, malloc, alarm, lseek, getenv, but they were lacking many things you'd take for granted: there was no networking beyond serial ports, no threads, no shared memory, no TCP, no named pipes, no shared libraries, no X11 or other graphics/multimedia support. Many of the &quot;standard&quot; header files didn't exist or had different names.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feasibility of running modern software: low. Autoconf wouldn't work, and any software using threads, interprocess communication, networking, or large amounts of memory wouldn't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The latest versions of Xenix are based on System V R2, which was standardized as the &quot;SVID&quot; (System V Interface Definition) which formed the basis for IEEE Std 1003.1-1988 (POSIX). The final version of Xenix was actually released in 1991, three years after POSIX was finalized, and it had many features you'd expect from a &quot;modern&quot; UNIX such as shared memory, named pipes, as well as a few features that were backported from SVR3 such as networking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feasibility of running modern software: arduous, but technically possible. There were no shared libraries, no native pthreads, but most of the building blocks to &quot;emulate&quot; a modern system: enough of a shell to run autoconf, interprocess communication such as named pipes, networking (TLS and BSD sockets), shared memory, semaphores. These features were not necessarily in the &quot;format&quot; that modern software expects, but could be adapted with wrappers. Missing header files and missing type definitions can be substituted, and in fact complex software such as pthreads and X11 was ported. Your biggest problem would be the lack of a modern compiler and toolchain (could technically be ported) and a mountain of dependencies that haven't been ported (yet).&lt;/p&gt;&#xA;" OwnerUserId="2049" LastActivityDate="2016-07-27T17:56:04.847" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1201" PostTypeId="2" ParentId="1191" CreationDate="2016-07-27T21:41:14.397" Score="6" Body="&lt;p&gt;Video game systems are generally designed to be connected to a CRT display whose beam will scan from top to bottom 50 (PAL) or roughly 60 (NTSC) times per second, and left to right 15,650 (PAL) or roughly 15,750 (NTSC) times/second.  During each instruction cycle, the beam will move a certain distance, and the effects of certain operations may be affected by the location of the beam when they are performed.  What is important with a cycle-accurate emulator is typically not that things are performed in real time on a microsecond-by-microsecond basis, but rather that the effects of various operations done by the code are consistent with what would have happened on a real system if the operations were performed with the beam at the position it would have on a real system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible that emulators that allow real hardware to be plugged into them will require real-time cycle-by-cycle emulation, but meeting that requirement on any platform that isn't 100% devoted to emulation while it's running is apt to be difficult.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-07-27T21:41:14.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1202" PostTypeId="1" AcceptedAnswerId="1222" CreationDate="2016-07-27T23:58:44.130" Score="8" ViewCount="317" Body="&lt;p&gt;I recently got hold of an old Pentium based machine (IBM 340) and started with a blank slate by formatting the disk. I also added a Soundblaster AWE32 which is a value model, specifically the CT3910.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was having an issue where running Creative's DIAGNOSE.EXE would throw an error when trying to scan for the MIDI address, 0x330 (which is what's configured) and the other option (0x320?) would both fail and I'd get no further. If I ran DIAGNOSE.EXE with the switch &lt;code&gt;/DPMU&lt;/code&gt; which I think stands for Disable MPU then it'd work fine, and all the sound tests (samples &amp;amp; MIDI) would work. Following this I could play games with sound, but even when I let it modify the system startup files I'd have to run through the process again after rebooting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that the MPU should be enabled according to the jumpers I removed and added the jumper again to test for a bad connection. Now DIAGNOSE.EXE no longer fails and doesn't need the &lt;code&gt;/DMPU&lt;/code&gt; switch, but I still don't get MIDI music in games until I run it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can only assume that the program is doing some initialisation on the card that's making it subsequently work; even with the correct settings and calls (including &lt;code&gt;DIAGNOSE /S&lt;/code&gt;) in my autoexec.bat I can't get music in games until I run the program manually and in full.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MIDI In Windows 3.1 &lt;em&gt;does&lt;/em&gt; work without running it, and I believe this is because it's using Creative drivers. Does anyone know what I need to do to have this card initialised correctly on startup?&lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2016-07-30T00:57:22.183" Title="Configuring MIDI on an AWE 32 in DOS 6.22" Tags="&lt;ms-dos&gt;&lt;awe32&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1204" PostTypeId="2" ParentId="1196" CreationDate="2016-07-28T17:13:14.533" Score="0" Body="&lt;p&gt;If you're not getting anything back, start it from the command line as JDV suggested in a comment. Try the regular &lt;code&gt;SheepShaver.exe&lt;/code&gt; file first, not the &lt;code&gt;SheepShaverGUI.exe&lt;/code&gt; one if that exists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't see anything come up, there are two files you can look for in the SheepShaver directory: &lt;code&gt;stdout.txt&lt;/code&gt; and &lt;code&gt;stderr.txt&lt;/code&gt;. These are the &quot;console output&quot; files from the SheepShaver process and take a look. Normally, the &lt;code&gt;stderr.txt&lt;/code&gt; file will be removed automatically if empty, so it might not appear after the program shuts down. However, the &lt;code&gt;stdout.txt&lt;/code&gt; should remain and have at least some diagnostic messages if anything. From one of these files it should indicate what failed (missing DLL? missing ROM? etc.). If you're having trouble, update your question with the output of (or a link to) these files.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-07-28T17:13:14.533" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1206" PostTypeId="1" AcceptedAnswerId="1397" CreationDate="2016-07-28T18:53:16.137" Score="6" ViewCount="574" Body="&lt;p&gt;I am trying to install Classilla, an open-source browser for Mac OS9, on SheepShaver for Windows. In SheepShaverGui.exe, I have the &lt;code&gt;Enable &quot;My Computer&quot; icon&lt;/code&gt; checked.&lt;a href=&quot;https://i.stack.imgur.com/1HcAh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1HcAh.png&quot; alt=&quot;enable my computer&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I open up SheepShaver and go to the directory where I have the Classilla folder, and when I try to open it, I get this error.&lt;a href=&quot;https://i.stack.imgur.com/x9dyL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/x9dyL.png&quot; alt=&quot;SheepShaver window&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2148" LastEditorUserId="175" LastEditDate="2017-03-09T21:25:30.310" LastActivityDate="2017-03-09T21:25:30.310" Title="Classilla on SheepShaver for Windows" Tags="&lt;emulation&gt;&lt;mac-os-classic&gt;&lt;sheepshaver&gt;&lt;hfs&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1207" PostTypeId="1" AcceptedAnswerId="1209" CreationDate="2016-07-28T20:35:49.267" Score="8" ViewCount="1178" Body="&lt;p&gt;I've recently found a number of my own programs (very old!) on Spectrum +3 discs, and I'm about to get hold of a working +3. Assuming the discs are readable, I'd like to transfer the programs (mostly basic, some machine code) into something I can back-up and play with - ideally .TAP etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I presume I could load them into the +3 file by file and save them to real tape, and then audio-grab the tape and turn into .TAP via an emulator or utility - but it seems a bit long winded. Is there an easier way that I'm completely overlooking?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference, there are at best 4 sides full of data, so can't really be more than about 680Kb maximum spread over perhaps 50 or 60 files. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Edit:outcome]&#xA;I got a 3.5&quot; floppy working, with a doctored IDE-type cable, and I used SpeccyTape on the iPhone to transfer Garry Lancaster's various disk utilities down onto a +3 disk. From there I was able to format some +3-format and MSDOS format disks and transfer/backup and otherwise just 'use' my disks. Great stuff. Happy to help anyone else who wanders this way, although there is plenty of help already out there.&lt;/p&gt;&#xA;" OwnerUserId="2169" LastEditorUserId="3290" LastEditDate="2020-05-01T07:24:21.317" LastActivityDate="2020-05-01T07:24:21.317" Title="Transferring data from Spectrum +3 disk to tape/.TAP etc" Tags="&lt;floppy-disk&gt;&lt;zx-spectrum&gt;&lt;spectrum-plus-3&gt;&lt;tape-image&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1208" PostTypeId="1" AcceptedAnswerId="1307" CreationDate="2016-07-28T21:26:13.883" Score="13" ViewCount="3346" Body="&lt;p&gt;Continuing my &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/372/why-is-the-amigaforever-kickstart-1-3-rom-slightly-different-to-a-real-1-3-rom&quot;&gt;series&lt;/a&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1140/how-did-the-amiga-1000-wcs-write-controlled-store-for-kickstart-work&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1158/why-is-the-amiga-rom-at-a-high-memory-location-and-ram-in-low-memory&quot;&gt;questions&lt;/a&gt; about Amiga ROMs :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Commodore CDTV contained a normal Kickstart 1.3 ROM, plus an &quot;extended ROM&quot;. From &lt;a href=&quot;http://www.l8r.net/technical/cdtv-technical.html&quot;&gt;http://www.l8r.net/technical/cdtv-technical.html&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The CDTV uses a standard 16-bit Kickstart 1.3 ROM in socket U13, exactly the same as the ROM in a 2000 or 500, with an additional pair of 8-bit EPROMs in sockets U34 and U35 containing the CDTV-specific code such as the audio player and the CD-ROM filesystem.&#xA;  The CDTV-specific code wedges into the Kickstart 1.3 ROMs and executes on startup.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Amiga CD32 also had an extended ROM, although I have heard (unconfirmed) that in practice it may have been two logically distinct ROMs put onto the same physical ROM IC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are about how these extended ROMs work.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Where do these ROMs appear in the memory map?&lt;/li&gt;&#xA;&lt;li&gt;Is the ROM overlay different on the CDTV/CD32? (On normal Amigas, the ROM overlay is active at power-on/reset and causes the 0xF80000 ROM to also appear at address 0)&lt;/li&gt;&#xA;&lt;li&gt;How do these ROMs &quot;wedge&quot; into the regular Kickstart ROM and cause some of its functionality to change? For example, both replace the &quot;insert disk&quot; screen with an animated CD screen, and of course integrate drivers for the CD-ROM drive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="149" LastActivityDate="2019-02-07T12:00:27.577" Title="Extended ROMs on the Amiga CD32 and CDTV" Tags="&lt;amiga&gt;&lt;rom&gt;&lt;amiga-kickstart&gt;&lt;amiga-cd32&gt;&lt;amiga-cdtv&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1209" PostTypeId="2" ParentId="1207" CreationDate="2016-07-28T23:15:26.637" Score="6" Body="&lt;p&gt;I once wrote a program for this sort of situation: &lt;a href=&quot;http://www.seasip.info/dskread.zip&quot; rel=&quot;nofollow&quot;&gt;DSKREAD&lt;/a&gt;. It runs on a +3 and archives entire disks to tape. You could record the audio, convert to a .TAP file, and then load the .TAP in a +3 emulator to recreate .DSK images containing the original files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, no-one's tested DSKREAD on a real +3, so I've no idea whether it would actually work. It certainly can't handle any form of copy protection, and I think bad sectors might give it trouble.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your PC has a real floppy controller (ie, a 34-way floppy connector on the motherboard, not a USB drive), you could also try either:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Connect the Spectrum's 3&quot; drive to the PC's floppy controller, &lt;a href=&quot;http://www.fvempel.nl/3pc.html&quot; rel=&quot;nofollow&quot;&gt;using&#xA;a handwired cable&lt;/a&gt;. Then use a tool like &lt;a href=&quot;http://simonowen.com/samdisk/&quot; rel=&quot;nofollow&quot;&gt;SamDisk&lt;/a&gt; to image the&#xA;discs directly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://randomkak.blogspot.co.uk/2013/06/35-inch-drive-on-your-spectrum.html&quot; rel=&quot;nofollow&quot;&gt;Connect a 3.5&quot; drive to the +3's external drive socket&lt;/a&gt; (You may need to short the READY pin to ground, if the 3.5&quot; drive doesn't produce a READY signal). Use the COPY command on the +3 to copy all the files to the 3.5&quot; drive. Then put the 3.5&quot; drive in the PC and do the same imaging process.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="1912" LastEditDate="2016-07-29T18:39:03.227" LastActivityDate="2016-07-29T18:39:03.227" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1211" PostTypeId="2" ParentId="1207" CreationDate="2016-07-29T07:33:54.560" Score="3" Body="&lt;p&gt;One solution is to &lt;a href=&quot;http://torlus.com/floppy/forum/viewtopic.php?f=20&amp;amp;t=403&quot; rel=&quot;nofollow&quot;&gt;plug&lt;/a&gt; an &lt;a href=&quot;http://hxc2001.free.fr/floppy_drive_emulator/&quot; rel=&quot;nofollow&quot;&gt;HxC floppy emulator&lt;/a&gt; into the external floppy port and do a simple disk copy to an image on the SD card.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-07-29T07:33:54.560" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1212" PostTypeId="1" CreationDate="2016-07-29T11:12:00.540" Score="4" ViewCount="554" Body="&lt;p&gt;Wikipedia &lt;a href=&quot;https://en.wikipedia.org/wiki/Memory_controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;page&lt;/a&gt; for memory controller states that memory controllers are either part of the northbridge, or in more recent cases, integrated into the processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But AFAIK, neither IBM 5150 nor Altair 8800 had a northbridge. So, how did these computers access memory? Where was the memory controller for these machines?&lt;/p&gt;&#xA;" OwnerUserId="2171" LastEditorUserId="4147" LastEditDate="2018-04-21T04:28:54.920" LastActivityDate="2018-04-21T04:28:54.920" Title="Where are the memory controllers for IBM 5150 or Altair 8800?" Tags="&lt;memory&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1213" PostTypeId="2" ParentId="1206" CreationDate="2016-07-29T11:37:25.253" Score="3" Body="&lt;p&gt;It looks like the Classilla folder opened OK and that you're opening a document which you don't have the original app which created it. Try opening an editor or wordprocessing app and then open the file from within that app. If it opens and looks like garbage data, try opening it in a hex editor instead.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2016-07-29T11:37:25.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1214" PostTypeId="1" CreationDate="2016-07-29T11:39:08.217" Score="3" ViewCount="471" Body="&lt;p&gt;I am using SheepShaver on Windows 10, and I enabled the option that allows SheepShaver to put a My PC icon so I could access files from my actual PC. However, when I try to drag files from My PC to the SheepShaver desktop, I can't because it says the folder is write protected. How can I make it not write protected?&lt;/p&gt;&#xA;" OwnerUserId="2148" LastActivityDate="2017-09-07T05:49:07.827" Title="Desktop folder locked in SheepShaver" Tags="&lt;emulation&gt;&lt;mac-os-classic&gt;&lt;sheepshaver&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1215" PostTypeId="2" ParentId="1212" CreationDate="2016-07-29T13:58:25.020" Score="6" Body="&lt;p&gt;The memory controller is (theoretically) not an essential part of a computer system, but it's present on modern-day desktops because it provides very convenient mechanisms for security, multiprocessing and other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the computers you mentioned, and in early microcomputers generally, the memory controller is not there because the CPU simply accesses the memory and I/O directly. In such systems, everything that needs to use the bus is connected to the bus, and there is a single bus connecting the CPU, the memory, I/O devices, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something that may be relevant is that DRAM needs a refresh signal, and a memory controller may provide this. Some CPUs, such as the Z80 which could be installed in the Altair, provides this signal. Otherwise, it may be generated by a simple electronic circuit. &lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2016-07-29T13:58:25.020" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1216" PostTypeId="1" CreationDate="2016-07-29T16:06:37.867" Score="15" ViewCount="6653" Body="&lt;p&gt;I would like to add a CD-ROM drive to an Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have not tried this for several years and I remember things failing to work without giving any useful errors, multiple choices of device and filesystem drivers, nagware popping up requesters on every boot, and general frustration, and inability to read a CD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So let's say I want to attach an off-the-shelf IDE CD-ROM/DVD-ROM to an Amiga 1200, but bonus points for answers that provide information that is applicable to other interface types and other Amiga models.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can such a drive be attached directly to the onboard IDE port or is other hardware required?&lt;/li&gt;&#xA;&lt;li&gt;Is the built-in &lt;code&gt;scsi.device&lt;/code&gt; suitable for talking to an IDE CD-ROM or is extra device driver software required?&lt;/li&gt;&#xA;&lt;li&gt;What are the options for a filesystem driver that supports at least common ISO9660 CD-ROM filesystems, and ideally the UDF filesystem used on DVD-ROMs?&lt;/li&gt;&#xA;&lt;li&gt;What Mountlist should be used?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;More bonus points if this can be done using freely-available software, but I'm also happy to pay a reasonable amount for software, if it's still being sold and supported.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even more bonus points if there's a way to boot from CD-ROM like the CDTV/CD32 can!&lt;/p&gt;&#xA;" OwnerUserId="149" LastEditorUserId="621" LastEditDate="2016-08-01T16:25:56.957" LastActivityDate="2017-08-23T21:35:13.637" Title="How do I attach and use a CD-ROM drive to an Amiga?" Tags="&lt;amiga&gt;&lt;cd-rom&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1217" PostTypeId="1" AcceptedAnswerId="1233" CreationDate="2016-07-29T16:16:38.827" Score="15" ViewCount="374" Body="&lt;p&gt;I have half a dozen or more &quot;desktop&quot; games from the early 80's, which are single-title LED based battery powered games from Tomy and CGL. I've got Frogger, Caveman, PacMan and others:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dXr3K.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dXr3K.png&quot; alt=&quot;Caveman Game&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/FQlEN.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FQlEN.png&quot; alt=&quot;Frogger Game&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(stock images, not my own :) )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They're currently stored in a box in the back of my garage: not the ideal environment, but it's relatively dry and the games themselves are wrapped in bubble wrap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They haven't been powered on for probably 30+ years. They've no great monetary value, but I'd like to &quot;boot them up&quot; again just for nostalgia. I have a voltage-selectable PSU (most of the games are 6v or 9v): are there any precautions I should take to avoid damaging them before powering them up? Or will three decades of inactivity likely have rendered them unplayable anyway?&lt;/p&gt;&#xA;" OwnerUserId="17" LastEditorUserId="276" LastEditDate="2016-08-01T08:20:02.137" LastActivityDate="2016-08-01T10:18:27.713" Title="Powering up old desktop games" Tags="&lt;handheld&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1218" PostTypeId="1" CreationDate="2016-07-29T18:52:29.207" Score="13" ViewCount="432" Body="&lt;p&gt;Many songs use a SID6581 design &quot;flaw&quot;, distortion, as an effect.  I tried experimenting with the filter and resonance registers, but was unable to reproduce the sound.  What conditions are necessary for the distortion to occur and is the distortion easily demonstrable in a simple BASIC program?&lt;/p&gt;&#xA;" OwnerUserId="64" LastActivityDate="2016-08-03T09:50:45.647" Title="Is there a simple BASIC program that demonstrates SID6581 distortion?" Tags="&lt;commodore-64&gt;&lt;audio&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1219" PostTypeId="1" CreationDate="2016-07-29T22:14:02.087" Score="3" ViewCount="2762" Body="&lt;p&gt;I am running Mac OS 9 through SheepShaver on Windows 10, and I can't get sound to work. I am using an Old World ROM because the New World ROM doesn't work, it causes SheepShaver to crash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to select the Built-in option in the sound control panel in SheepShaver, but there are no output options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a bunch of ROMs from archive.org, and I'm not sure which one to use IF the ROM is the problem&lt;/p&gt;&#xA;" OwnerUserId="2148" LastActivityDate="2018-01-04T14:59:57.677" Title="No sound on SheepShaver for Windows 10" Tags="&lt;emulation&gt;&lt;mac-os-classic&gt;&lt;sheepshaver&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1220" PostTypeId="2" ParentId="1219" CreationDate="2016-07-29T22:23:58.953" Score="4" Body="&lt;p&gt;You need to delete the Apple Audio Extension.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Open your Mac OS 9 HD.&lt;/li&gt;&#xA;&lt;li&gt;Go to System Folder&lt;/li&gt;&#xA;&lt;li&gt;Go to Extensions&lt;/li&gt;&#xA;&lt;li&gt;Move Apple Audio Extension into Trash and empty your trash.&lt;/li&gt;&#xA;&lt;li&gt;Restart SheepShaver&lt;/li&gt;&#xA;&lt;li&gt;Open Sound Panel.&lt;/li&gt;&#xA;&lt;li&gt;Select Built-In.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="2148" LastActivityDate="2016-07-29T22:23:58.953" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1221" PostTypeId="2" ParentId="1216" CreationDate="2016-07-30T00:12:47.437" Score="1" Body="&lt;p&gt;This is only a partial answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can get SCSI&amp;lt;&gt;IDE adapters on eBay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga 4000 and 1200 have IDE controllers built in. Earlier Amigas have SCSI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will also need CD drivers.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2016-07-30T00:12:47.437" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1222" PostTypeId="2" ParentId="1202" CreationDate="2016-07-30T00:57:22.183" Score="3" Body="&lt;p&gt;So hunted around some more online, and it seems as though Chenmuka was correct in that it was related to the tools I was using to configure and manage the card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I replaced AWEUTIL.EXE with a newer version (1.20 to be exact), which is one of the tools used to initialise the card from autoexec.bat. This newer version initialises the card properly and now all my games have MIDI audio from boot. &lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2016-07-30T00:57:22.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1223" PostTypeId="1" CreationDate="2016-07-30T01:03:39.330" Score="9" ViewCount="245" Body="&lt;p&gt;This was originally going to be an &lt;a href=&quot;/questions/tagged/identify-this-game&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;identify-this-game&amp;#39;&quot; rel=&quot;tag&quot;&gt;identify-this-game&lt;/a&gt; question but I found the game I was looking for!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I played Tau Ceti when I was a kid and I remember being amazed by how it would accept spelling mistakes in the typed commands. For example, if you type &lt;code&gt;LUNCH&lt;/code&gt; it launches the skimmer. If a word was too different from any keywords it would say &lt;code&gt;NOT UNDERSTOOD&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What method does it use to spell-check the user's commands? Is it the Levenshtein Distance or something else?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gMTJo.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gMTJo.png&quot; alt=&quot;Tau Ceti screenshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not a Soundex because &lt;code&gt;LOOD&lt;/code&gt; and &lt;code&gt;LOAK&lt;/code&gt; both do &lt;code&gt;LOOK&lt;/code&gt;, and &lt;code&gt;LAD&lt;/code&gt; does &lt;code&gt;PAD&lt;/code&gt;. Swapping two letters in a four letter command always results in &lt;code&gt;NOT UNDERSTOOD&lt;/code&gt;, but any one missing letter or an extra letter still allows the command to be understood. &lt;code&gt;NEWPANDA&lt;/code&gt; does &lt;code&gt;NEWPAD&lt;/code&gt; but &lt;code&gt;NEWTPANDA&lt;/code&gt; is too different and is &lt;code&gt;NOT UNDERSTOOD&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cpc-power.com/index.php?page=detail&amp;amp;onglet=notices&amp;amp;num=2180&quot; rel=&quot;noreferrer&quot;&gt;Scan of original manual (cassette tape cover)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2067" LastEditorUserId="2067" LastEditDate="2016-08-01T08:11:07.943" LastActivityDate="2016-08-01T08:11:07.943" Title="What method does the game Tau Ceti use to spell-check its commands?" Tags="&lt;cpc&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1225" PostTypeId="2" ParentId="1216" CreationDate="2016-07-30T04:55:16.600" Score="10" Body="&lt;p&gt;Hardware-wise, you can get HiSoft's &lt;em&gt;Surf Squirrel&lt;/em&gt; PCMCIA-to-SCSI adapter and attach an external SCSI CD-ROM drive. For this, you don't need to open up the A1200, but then you can't use the PCMCIA for a network card at the same time. Note the following caveat: &lt;em&gt;&lt;a href=&quot;http://www.bigbookofamigahardware.com/bboah/product.aspx?id=1202&quot; rel=&quot;noreferrer&quot;&gt;The surf squirrel does not support auto-booting from a cold boot (power cycle) however drivers can be made resident by booting from another HD, resetting and then the HD attached to the surf squirrel can be booted.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you can get a trapdoor SCSI controller (or accelerator with a SCSI interface) and connect the pigtail to the unused port on the back of the Amiga. Into that you would plug the external SCSI CD-ROM drive. Some or all such controllers support auto-booting from a cold boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the above two solutions, you can get a SCSI-to-IDE adapter and use an IDE CD-ROM drive in place of the SCSI one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you can get a short 3.5&quot; to 2.5&quot; IDE adapter to connect an IDE CD-ROM drive to the IDE connector on the A1200 motherboard. But the IDE controller in the Amiga 1200 is unbuffered and can be picky about what you connect to it and how long the cable can be. Also, you have to figure out how to route the cable out of the Amiga 1200 case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you can add a buffered IDE controller like the Elbox FastATA or 4xEIDE'99 and plug in probably any IDE CD-ROM drive, with longer cables if desired.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also there's &lt;a href=&quot;http://www.vesalia.de/e_amigaslimcddrive.htm&quot; rel=&quot;noreferrer&quot;&gt;this slimline CD-ROM drive&lt;/a&gt; with 2.5&quot; cable designed for the Amiga 1200, but I don't know how well it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe the IDE-only solutions above have the same auto-boot caveat as the Surf Squirrel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there's the Rapid Road USB controller for the Amiga 1200. Maybe it will support a USB CD-ROM drive, but it has no autoboot support. For that, you would need a  &lt;a href=&quot;http://amiga.resource.cx/exp/deneb&quot; rel=&quot;noreferrer&quot;&gt;Deneb USB interface&lt;/a&gt; plugged into something like a &lt;a href=&quot;http://amiga.resource.cx/exp/micronik1200z1&quot; rel=&quot;noreferrer&quot;&gt;Mikronik Zorro-2 board&lt;/a&gt;, but I don't know if it will boot a CD-ROM drive directly or if it needs a &lt;a href=&quot;http://www.amibay.com/showthread.php?11935-Guide-How-to-burn-a-Custom-Kickstart-3-9-%28incl-1MB-ROM%29&quot; rel=&quot;noreferrer&quot;&gt;custom Kickstart&lt;/a&gt; with CDFS support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you can convert an Amiga CD32 to an Amiga 1200 with the &lt;a href=&quot;http://www.bigbookofamigahardware.com/bboah/product.aspx?id=1891&quot; rel=&quot;noreferrer&quot;&gt;DCE SX32&lt;/a&gt; or &lt;a href=&quot;http://amiga.resource.cx/exp/sx32pro&quot; rel=&quot;noreferrer&quot;&gt;SX32 Pro&lt;/a&gt;, but the CD32 and especially the SX32 are hard to find. Similarly, you can use a &lt;a href=&quot;http://amiga.resource.cx/exp/communicator&quot; rel=&quot;noreferrer&quot;&gt;Eureka Communicator&lt;/a&gt; to attach the CD32 as a CD-ROM drive to the serial port of an Amiga 1200, but the A1200's built-in serial port is only reliable up to 76,800 baud (about 7.7 KiB/s) whereas a 1x CD-ROM drive is 150 KiB/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you can copy the contents of the CD-ROM to a CompactFlash drive and use an IDE adapter to attach it to the IDE port inside the A1200, or use a PCMCIA adapter and EasyADF software. Or you can use WINUAE to install the software from CD-ROM onto your hard drive image. (This is how I &lt;a href=&quot;https://www.youtube.com/watch?v=Zd42RsKHm5Y&quot; rel=&quot;noreferrer&quot;&gt;installed ClassicWB&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best options for booting from CD are probably the trapdoor controller or the converted CD32. Otherwise you may need to first boot from an emergency boot disk, do the warm boot workaround described above, or build your own Kickstart ROM as described above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, there isn't any one perfect solution, but I've listed all the hardware options I can think of.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2016-08-04T18:08:19.793" LastActivityDate="2016-08-04T18:08:19.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1226" PostTypeId="1" AcceptedAnswerId="1227" CreationDate="2016-07-30T11:41:21.357" Score="34" ViewCount="2347" Body="&lt;p&gt;The Commodore 128 has two CPUs. One is some variant of the 6502, and the other is a Z80.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One CPU is there for compatibility with the Commodore 64 and the other is there presumably to give basic compatibility with the CP/M titles that were available at that time.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is whether those two CPUs can run at the same time, both accessing memory and the graphics and sound subsystems, or if one has to be disabled or halted while the other runs?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="3290" LastEditDate="2020-04-14T06:11:50.953" LastActivityDate="2020-04-14T06:11:50.953" Title="Can the two CPUs in a Commodore 128 run at the same time?" Tags="&lt;z80&gt;&lt;6502&gt;&lt;cpu&gt;&lt;commodore-128&gt;&lt;microprocessor&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1227" PostTypeId="2" ParentId="1226" CreationDate="2016-07-30T12:36:26.723" Score="31" Body="&lt;p&gt;No, they cannot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;They share both the data and the address bus of the C128, so they can only run exclusively at any one point in time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The address bus is apparently directly connected, the data bus of the Z80 through a set of latches to the data bus of the rest of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In CP/M mode, the 8502 is handling keyboard, screen and printer and serial ports, while the Z80 &quot;runs the programs&quot;. While one CPU is running, the other one needs to be HALTed.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2016-07-30T12:42:02.220" LastActivityDate="2016-07-30T12:42:02.220" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1228" PostTypeId="2" ParentId="1226" CreationDate="2016-07-30T14:01:42.500" Score="12" Body="&lt;p&gt;The 8502 CPU was also there for C128 mode, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8502 and Z80 cannot be used at the same time. There are however other options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C128D has a third CPU, a 6502, in the floppy drive. Any drives connected to the IEC bus port of a C128 or C128D also have a 6502 in them. These CPUs could be used in parallel. A 1541 or 1571 has only 2KB of RAM but a 1581 has 8KB of RAM. The less common 8050 and SFD-1001 have 4 KB of RAM.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2016-07-30T14:01:42.500" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1229" PostTypeId="2" ParentId="1223" CreationDate="2016-07-31T10:08:18.103" Score="3" Body="&lt;p&gt;Without having the source code, it is obviously a bit hard to judge, but let's have a shot at it. There are various possibilities to &quot;guess what the player meant&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Levenshtein distance, as you said - Possible, but probably a bit heavy for an 8-bit micro and (only) a command line interpreter - Also maybe a bit oversize for a fixed set of strings to match against&lt;/li&gt;&#xA;&lt;li&gt;Soundex algorithm - That is way simpler because it is purely table-driven and the soundex table is typically very small - Look  it up, I guess that is how it's done (especially because it ignores vocals completely as in your examples). You can check it &lt;a href=&quot;http://www.eogn.com/soundex/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; against the keywords understood by the game (Note some soundex algorithms ignore the first letter of the word, some - as the one on the website- don't)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2016-07-31T10:13:18.630" LastActivityDate="2016-07-31T10:13:18.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1230" PostTypeId="1" AcceptedAnswerId="1231" CreationDate="2016-07-31T10:52:49.453" Score="12" ViewCount="2055" Body="&lt;p&gt;I have a Game Boy DMG with a broken screen that I want to turn into a small arcade machine, so I need to display the Game Boy screen on a bigger (computer) screen. I tried doing so with an Arduino. I feel the code was alright but the Arduino and the com communication with processing couldn't keep up with the Game Boy's framerate. So I tried connecting the Game Boy ribbon directly to a VGA cable because while searching the web I noticed a VGA cable has a few similar pins to the Game Boy. This is how I connected them:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;VGA                                            Game Boy&#xA;pin 1,2,3 (RGB pins)                           pin 21 (GND)&#xA;pin 5,6,7,8,10(rgb returns, h+vsync gnd)       pin 15,16 (DataOut 0 &amp;amp; 1)&#xA;pin 13 (Hsync)                                 pin 17 (HSync)&#xA;pin 14 (Vsync)                                 pin 12 (VSync)&#xA;pin 15 (Clock)                                 pin 14 (Clock)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I got the pin information from &lt;a href=&quot;//en.wikipedia.org/wiki/VGA_connector&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YFOjF.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YFOjF.png&quot; alt=&quot;Photograph showing where the pins are on the Arduino. Pins 12, 14 through 17 are 5 volts, see table above for details.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wasn't able to get anything on the screen. However, when I connected the clocks together the monitor went from 'check signal' to 'power saving mode': the same as when the computer would go to sleep.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There isn't much information on this on the internet, only people showing off their build, not really telling us how they did it. I have no experience whatsoever in electronics so it could be something stupid I missed, a misplaced or missing pin, the Game Boy not giving enough current, digital-analog signals,...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope someone can help me with this, if something isn't clear, please do ask!&lt;/p&gt;&#xA;" OwnerUserId="2177" LastEditorUserId="278" LastEditDate="2016-07-31T19:18:14.717" LastActivityDate="2016-07-31T19:18:14.717" Title="Game Boy DMG to VGA" Tags="&lt;game-boy&gt;&lt;vga&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1231" PostTypeId="2" ParentId="1230" CreationDate="2016-07-31T11:18:45.123" Score="11" Body="&lt;p&gt;A direct connection is not going to work - The Gameboy's pixel clock is much too low to drive a VGA screen:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                 GameBoy        VGA&#xA;Pixel clock      4 MHz          25 MHz&#xA;V-Sync           60 Hz          70 Hz&#xA;H-Sync           9 kHz          31 kHz&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, in a nutshell, this will not work without a significant investment into capturing the GBA video into some added screen memory and re-generating a VGA signal from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://longhornengineer.com/category/projects/hardware/gameboy-dmg-01-vga/&quot;&gt;Here&lt;/a&gt; is a link to a page describing how someone has done that.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2016-07-31T11:18:45.123" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1232" PostTypeId="2" ParentId="1223" CreationDate="2016-07-31T20:30:15.490" Score="6" Body="&lt;p&gt;There's another version I found &lt;a href=&quot;http://www.myabandonware.com/game/tau-ceti-dh/play-dh&quot; rel=&quot;noreferrer&quot;&gt;online&lt;/a&gt;, but it's the DOS version. In that version, it only used the first three letters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typing &lt;code&gt;JOYOUS CELEBRATION&lt;/code&gt; would be understood as &lt;code&gt;JOYSTICK&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DOS version, however, is different than the CPC version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the source needs to be analyzed to get the actual algorithm (I think they rolled their own), it is possible to analyze the behaviors to get a better understanding. (Clicking the pause button in the lower left brings up something. I haven't been able to actually get anything meaningful from it however.)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[A]ny one missing letter or an extra letter still allows the command to be understood&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This isn't 100% true. When the command is five letters or less, it will refuse to recognize the command when the first letter is replaced with the second. In other words, &lt;code&gt;QQUIP&lt;/code&gt; fails to be recognized as &lt;code&gt;EQUIP&lt;/code&gt;. The command would still be recognized if any other character is substituted instead. If the command is six letters or longer, it will recognize the command either way (&lt;code&gt;AAUNCH&lt;/code&gt; is recognized as &lt;code&gt;LAUNCH&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This strange behavior can be triggered in longer words if there is another mistake. For example &lt;code&gt;XTATU&lt;/code&gt; is fine, but &lt;code&gt;TTATU&lt;/code&gt; fails.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A similar thing happens with the last and second to last characters. When the second to last character is substituted with the last character, the command fails. &lt;code&gt;PDD&lt;/code&gt; and &lt;code&gt;HEPP&lt;/code&gt; are not recognized, but &lt;code&gt;POD&lt;/code&gt; and &lt;code&gt;HEMP&lt;/code&gt; are fine. Interestingly enough, this does not affect 5 letter words, since &lt;code&gt;EQUPP&lt;/code&gt; is accepted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I suspect these two anomalies are bugs, but they do give insight into how it works.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Longer words can usually be recognized even when more than one character is wrong, but only in some circumstances. &lt;code&gt;IIGHTS OND&lt;/code&gt; is recognized, but &lt;code&gt;GTHS ON&lt;/code&gt; fails. &lt;code&gt;SSIGHTSOND&lt;/code&gt; is recognized too. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Working from your image, I found that &lt;code&gt;PUSS&lt;/code&gt;, and &lt;code&gt;PUS&lt;/code&gt; pause the game. It seems that it is possible to omit two characters from a word of 5 or more letters if no extra characters are added, and each letter is no more than 1 place away from its original position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, the behavior of longer words shows that letters that are slightly misplaced are more often understood than random letters. For example, &lt;code&gt;E=ACTOR&lt;/code&gt; is understood, but &lt;code&gt;MMACTOR&lt;/code&gt; is not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another strange fact is that &lt;em&gt;leading&lt;/em&gt; spaces are ignored, but &lt;em&gt;trailing&lt;/em&gt; (and inter-word) spaces are not. When they are not ignored, they are counted as any other wrong character is. That means &lt;code&gt;␠␠␠␠␠␠␠PAD&lt;/code&gt; is recognized, but &lt;code&gt;PAD␠␠&lt;/code&gt; and &lt;code&gt;P␠A␠D&lt;/code&gt;  are not. Like &lt;code&gt;POD&lt;/code&gt;, &lt;code&gt;P␠D&lt;/code&gt; will pass. Omitting a space (in &lt;code&gt;SIGHTS ON&lt;/code&gt; or &lt;code&gt;SIGHTS OFF&lt;/code&gt;) counts as a wrong character.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is interesting to note that &lt;code&gt;SIGHTS&lt;/code&gt; and &lt;code&gt;SIGHTS␠&lt;/code&gt; are accepted, but &lt;code&gt;SIGHTS␠␠&lt;/code&gt; is not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Periods are strange; &lt;code&gt;.&lt;/code&gt; is understood as &lt;code&gt;HELP&lt;/code&gt;, &lt;code&gt;L.&lt;/code&gt; is understood as &lt;code&gt;LAUNCH&lt;/code&gt;. I think &lt;code&gt;.&lt;/code&gt; is like a wildcard, and the list seems to be scanned left to right top to bottom (&lt;code&gt;RODS&lt;/code&gt; before &lt;code&gt;REACTOR&lt;/code&gt;). Note that it ignores anything after the first &lt;code&gt;.&lt;/code&gt;; &lt;code&gt;.MAP&lt;/code&gt; is the same as &lt;code&gt;HELP&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another interesting thing I noticed is that &lt;code&gt;SIGHTS ONF&lt;/code&gt;,&lt;code&gt;SIGHTS O&lt;/code&gt;, and &lt;code&gt;SIGHTS OF&lt;/code&gt; are accepted as commands. I think they all may map to &lt;code&gt;SIGHTS ON&lt;/code&gt;, but I have no clue how to check that.&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2016-07-31T20:30:15.490" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1233" PostTypeId="2" ParentId="1217" CreationDate="2016-07-31T22:17:18.287" Score="16" Body="&lt;p&gt;Old games like these don't have much that can go wrong with them just from powering them up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest problem with old electronics in general is that any electrolytic capacitors will dry out in storage, then explode when re-powered.  However, electrolytics are usually only used for power-handling circuitry, and your games had external power supplies, so that risk is pretty much gone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming your power supply is a switch-mode supply (most modern power supplies are; distinguishing characteristic: it feels lighter than it should), you should check the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Make sure you've got the voltage correct.&lt;/li&gt;&#xA;&lt;li&gt;Make sure you've got the polarity (center-positive or center-negative) correct.&lt;/li&gt;&#xA;&lt;li&gt;Make sure the power supply has a wattage rating at least as high as the game calls for.  Going too low won't damage the &lt;em&gt;game&lt;/em&gt;, but it can cause the power supply to burn out, sometimes in spectacular fashion.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Additionally, if your power supply is of the older transformer+rectifier construction (distinguishing characteristic: it feels like you're holding a solid block of metal), check the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Make sure the power supply's wattage rating isn't much higher than what the game calls for.  Unregulated power supplies like this only provide their design voltage near full load; at a partial load, they'll deliver a higher voltage.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-07-31T22:17:18.287" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1234" PostTypeId="2" ParentId="1208" CreationDate="2016-07-31T22:18:54.297" Score="9" Body="&lt;p&gt;There are a number of ways that an extension ROM can add to or replace Kickstart functionality:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Within the first few instructions, Kickstart checks for the magic value 0x1111 at 0xf00000, and will transfer control to any ROM there which passes muster. This is mainly useful for debug cards and other things that completely replace Kickstart.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Kickstart is organised as a collection of &quot;modules&quot;, i.e. libraries, devices, and the like. Each module has a ROMTag which is effectively a magic number and checksum plus some other metadata that identifies the module. As part of the startup process, Kickstart scans for ROMTags not only in itself, but also in the range 0xf00000-0xf80000, and will add any modules found there. Module names are de-duplicated, with the version number and module priority being used as a tie-breaker, which allows one to completely replace a Kickstart module. This is how autobooting hard disk controllers tended to work on Kickstart 1.2 even though it did not have &lt;code&gt;expansion.library&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The ROM can be on an AUTOCONFIG board which indicates that it has an onboard ROM. &lt;code&gt;expansion.library&lt;/code&gt; identifies such ROMs and calls various initialisation hooks. This is the preferred way to add drivers for add-in cards, but only works on Kickstart 1.3 onwards.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I believe that the CDTV uses scheme 2 to add the various CD-ROM driver components and the replacement boot prompt.&lt;/p&gt;&#xA;" OwnerUserId="80" LastEditorUserId="80" LastEditDate="2019-02-07T12:00:27.577" LastActivityDate="2019-02-07T12:00:27.577" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1235" PostTypeId="2" ParentId="1217" CreationDate="2016-08-01T10:18:27.713" Score="4" Body="&lt;p&gt;As already answered by Mark, your first checks should be the PSU.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To add another note:  If the device hasn't been used for a while, you may find dust or minor corrosion has got into the case which will mean the buttons and joysticks will be temperamental.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that you've had them well protected, this too should be a minor issue.  It will not cause damage unless something is causing a short circuit.  It is worth giving these a check.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-08-01T10:18:27.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1236" PostTypeId="5" CreationDate="2016-08-01T16:25:31.187" Score="0" Body="&lt;p&gt;The Commodore 128 is the last 8-bit home computer that was commercially released by Commodore Business Machines.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:54:27.173" LastActivityDate="2016-08-01T16:54:27.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1237" PostTypeId="4" CreationDate="2016-08-01T16:25:31.187" Score="0" Body="for questions about the Commodore 128 home computer" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:53:48.533" LastActivityDate="2016-08-01T16:53:48.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1238" PostTypeId="5" CreationDate="2016-08-01T16:27:00.913" Score="0" Body="&lt;p&gt;Use this tag for questions about Compact Disc Read-Only Memory standards, discs, and hardware.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:54:50.703" LastActivityDate="2016-08-01T16:54:50.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1239" PostTypeId="4" CreationDate="2016-08-01T16:27:00.913" Score="0" Body="for questions about CD-ROM discs and drives" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:55:22.313" LastActivityDate="2016-08-01T16:55:22.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1240" PostTypeId="5" CreationDate="2016-08-01T16:27:45.760" Score="0" Body="&lt;p&gt;Xenix is a discontinued version of the Unix operating system for various microcomputer platforms, licensed by Microsoft from AT&amp;amp;T Corporation in the late 1970s.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:54:20.580" LastActivityDate="2016-08-01T16:54:20.580" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1241" PostTypeId="4" CreationDate="2016-08-01T16:27:45.760" Score="0" Body="for questions about the Xenix operating system" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:53:42.860" LastActivityDate="2016-08-01T16:53:42.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1242" PostTypeId="5" CreationDate="2016-08-01T16:28:40.813" Score="0" Body="&lt;p&gt;Initially intended for use inside the Bell System, AT&amp;amp;T licensed Unix to outside parties from the late 1970s, leading to a variety of both academic and commercial variants of Unix from vendors such as the University of California, Berkeley (BSD), Microsoft (Xenix), IBM (AIX) and Sun Microsystems (Solaris).&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:55:36.547" LastActivityDate="2016-08-01T16:55:36.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1243" PostTypeId="4" CreationDate="2016-08-01T16:28:40.813" Score="0" Body="For questions about the Unix operating system." OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-27T06:28:43.247" LastActivityDate="2016-09-27T06:28:43.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1244" PostTypeId="5" CreationDate="2016-08-01T16:33:22.947" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/amiga-cdtv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;amiga-cdtv&amp;#39;&quot; rel=&quot;tag&quot;&gt;amiga-cdtv&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:55:16.030" LastActivityDate="2016-08-01T16:55:16.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1245" PostTypeId="4" CreationDate="2016-08-01T16:33:22.947" Score="0" Body="for questions about the Amiga CD32 home video game console" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:54:37.983" LastActivityDate="2016-08-01T16:54:37.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1246" PostTypeId="5" CreationDate="2016-08-01T16:34:55.550" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/amiga-cd32&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;amiga-cd32&amp;#39;&quot; rel=&quot;tag&quot;&gt;amiga-cd32&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:55:06.687" LastActivityDate="2016-08-01T16:55:06.687" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1247" PostTypeId="4" CreationDate="2016-08-01T16:34:55.550" Score="0" Body="for questions about the Commodore Amiga CDTV home computer" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:54:11.673" LastActivityDate="2016-08-01T16:54:11.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1248" PostTypeId="5" CreationDate="2016-08-01T16:35:28.207" Score="0" Body="&lt;p&gt;The Sound Blaster AWE32 is an ISA sound card from Creative Technology. It is an expansion board for PCs and is part of the Sound Blaster family of products.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:53:32.580" LastActivityDate="2016-08-01T16:53:32.580" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1249" PostTypeId="4" CreationDate="2016-08-01T16:35:28.207" Score="0" Body="for questions about the Sound Blaster AWE32 sound card" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T16:53:54.627" LastActivityDate="2016-08-01T16:53:54.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1250" PostTypeId="5" CreationDate="2016-08-01T16:58:19.477" Score="0" Body="&lt;p&gt;Firmware is a type of software that provides control, monitoring and data manipulation of engineered products and systems.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T18:34:41.907" LastActivityDate="2016-08-01T18:34:41.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1251" PostTypeId="4" CreationDate="2016-08-01T16:58:19.477" Score="0" Body="for questions about firmware on retrocomputing hardware" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T18:34:31.737" LastActivityDate="2016-08-01T18:34:31.737" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1253" PostTypeId="5" CreationDate="2016-08-01T18:39:33.557" Score="0" Body="&lt;p&gt;A barcode is an optical, machine-readable, representation of data; the data usually describes something about the object that carries the barcode. &lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T18:44:33.487" LastActivityDate="2016-08-01T18:44:33.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1254" PostTypeId="4" CreationDate="2016-08-01T18:39:33.557" Score="0" Body="for questions about barcodes on retrocomputing hardware and software" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T18:44:53.860" LastActivityDate="2016-08-01T18:44:53.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1255" PostTypeId="5" CreationDate="2016-08-01T18:41:01.377" Score="0" Body="&lt;p&gt;For questions regarding the use or replacement of batteries used in portable hardware, BIOS, etc.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-12-21T13:18:32.177" LastActivityDate="2016-12-21T13:18:32.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1256" PostTypeId="4" CreationDate="2016-08-01T18:41:01.377" Score="0" Body="For questions on batteries and battery technology in retrocomputing hardware" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-12-21T13:18:32.177" LastActivityDate="2016-12-21T13:18:32.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1257" PostTypeId="5" CreationDate="2016-08-01T18:43:00.827" Score="0" Body="&lt;p&gt;A belt is a loop of flexible material used to link two or more rotating shafts mechanically, most often parallel.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T18:44:25.267" LastActivityDate="2016-08-01T18:44:25.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1258" PostTypeId="4" CreationDate="2016-08-01T18:43:00.827" Score="0" Body="for questions about replacing rubber drive belts on cassette and other retrocomputing hardware." OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-01T18:44:37.517" LastActivityDate="2016-08-01T18:44:37.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1259" PostTypeId="5" CreationDate="2016-08-01T18:46:15.233" Score="0" Body="&lt;p&gt;The Epson HX-20 (HC-20) is generally regarded as the first laptop computer, announced in November 1981, although first sold widely in 1983.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T07:40:56.597" LastActivityDate="2016-08-02T07:40:56.597" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1260" PostTypeId="4" CreationDate="2016-08-01T18:46:15.233" Score="0" Body="for questions about the Epson HX-20 laptop computer" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T07:40:59.737" LastActivityDate="2016-08-02T07:40:59.737" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1261" PostTypeId="1" CreationDate="2016-08-02T03:22:03.770" Score="20" ViewCount="854" Body="&lt;p&gt;I was in the Computer History Museum in Silicon Valley last week, and I saw &lt;a href=&quot;http://www.computerhistory.org/collections/catalog/102645147&quot; rel=&quot;noreferrer&quot;&gt;this badge&lt;/a&gt;. I know I've seen that logo somewhere before, but I can't remember where! Does anyone know where it's from?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jg0PP.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jg0PP.jpg&quot; alt=&quot;Logo of a bow tie guy with a spoon&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2185" LastEditorUserId="278" LastEditDate="2017-09-13T17:36:37.003" LastActivityDate="2017-09-13T17:36:37.003" Title="Logo of a bow tie guy with a spoon" Tags="&lt;ms-dos&gt;&lt;history&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1263" PostTypeId="5" CreationDate="2016-08-02T14:31:17.890" Score="0" Body="&lt;p&gt;A case is normally used to protect hardware from dust, light, or environmental damage.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:45:22.893" LastActivityDate="2016-08-02T14:45:22.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1264" PostTypeId="4" CreationDate="2016-08-02T14:31:17.890" Score="0" Body="for questions about retrocomputing hardware cases and enclosures" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:45:19.207" LastActivityDate="2016-08-02T14:45:19.207" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1265" PostTypeId="5" CreationDate="2016-08-02T14:31:50.840" Score="0" Body="&lt;p&gt;Use this tag only for questions about computer chassis: repair, preservation, or hardware protection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/case&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;case&amp;#39;&quot; rel=&quot;tag&quot;&gt;case&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:44:58.893" LastActivityDate="2016-08-02T14:44:58.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1266" PostTypeId="4" CreationDate="2016-08-02T14:31:50.840" Score="0" Body="for questions about computer chassis, also known as computer cases" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:54:09.327" LastActivityDate="2016-08-02T14:54:09.327" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1267" PostTypeId="5" CreationDate="2016-08-02T14:32:24.563" Score="0" Body="&lt;p&gt;CHIP-8 is an interpreted programming language, developed by Joseph Weisbecker.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:45:03.737" LastActivityDate="2016-08-02T14:45:03.737" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1268" PostTypeId="4" CreationDate="2016-08-02T14:32:24.563" Score="0" Body="for questions about the CHIP-8 programming langauge" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:45:32.067" LastActivityDate="2016-08-02T14:45:32.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1269" PostTypeId="5" CreationDate="2016-08-02T14:32:56.253" Score="0" Body="&lt;p&gt;The TRS-80 Color Computer (also known as CoCo) is a line of home computers based on the Motorola 6809 processor.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:46:10.693" LastActivityDate="2016-08-02T14:46:10.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1270" PostTypeId="4" CreationDate="2016-08-02T14:32:56.253" Score="0" Body="For questions about the TRS-80 Color Computer, including peripherals and software." OwnerUserId="621" LastEditorDisplayName="user6464" LastEditDate="2018-10-09T06:49:50.800" LastActivityDate="2018-10-09T06:49:50.800" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1271" PostTypeId="5" CreationDate="2016-08-02T14:33:29.413" Score="0" Body="&lt;p&gt;Related tags: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;/questions/tagged/backup&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;backup&amp;#39;&quot; rel=&quot;tag&quot;&gt;backup&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:53:13.043" LastActivityDate="2016-08-02T14:53:13.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1272" PostTypeId="4" CreationDate="2016-08-02T14:33:29.413" Score="0" Body="for questions about dumping or backing up information from physical media" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:53:23.200" LastActivityDate="2016-08-02T14:53:23.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1273" PostTypeId="5" CreationDate="2016-08-02T14:34:04.010" Score="0" Body="&lt;p&gt;Use this tag for questions specifically related to building in-house hardware and software for retrocomputing platforms.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:45:27.660" LastActivityDate="2016-08-02T14:45:27.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1274" PostTypeId="4" CreationDate="2016-08-02T14:34:04.010" Score="0" Body="for questions about homemade or homebrew retrocomputing hardware and software" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:46:07.053" LastActivityDate="2016-08-02T14:46:07.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1275" PostTypeId="5" CreationDate="2016-08-02T14:34:39.870" Score="0" Body="&lt;p&gt;Integrated Drive Electronics is a standard electronic interface used between a computer motherboard's data paths or bus and the computer's disk storage devices. A major difference compared to other storage interfaces of the time, such as ST-506 or ESDI, was moving the drive controller from the host adapter onto the drive itself. This relieved the host system of the responsibility of stepping the read/write arm, signal modulation, and so on, allowing many such tasks to be handled internally by the drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IDE is also sometimes referred to as &lt;em&gt;Parallel ATA&lt;/em&gt;, &lt;em&gt;PATA&lt;/em&gt; or by its original standardized name &lt;em&gt;AT Attachment&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IDE became a standard in the second half of the 1980s and remained reasonably common throughout the first decade of the 2000s. It has since been replaced in most applications by SATA (Serial ATA), which was introduced in 2003.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="357" LastEditDate="2017-08-16T21:33:37.647" LastActivityDate="2017-08-16T21:33:37.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1276" PostTypeId="4" CreationDate="2016-08-02T14:34:39.870" Score="0" Body="IDE storage devices, cables, and drivers; also known as PATA or Parallel ATA." OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2021-02-25T11:15:23.567" LastActivityDate="2021-02-25T11:15:23.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1277" PostTypeId="5" CreationDate="2016-08-02T14:35:16.373" Score="0" Body="&lt;p&gt;Integer BASIC is the BASIC interpreter of the Apple I and original Apple II computers.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:45:13.660" LastActivityDate="2016-08-02T14:45:13.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1278" PostTypeId="4" CreationDate="2016-08-02T14:35:16.373" Score="0" Body="for questions about the Integer BASIC interpreter" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:45:08.517" LastActivityDate="2016-08-02T14:45:08.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1279" PostTypeId="5" CreationDate="2016-08-02T14:35:47.830" Score="0" Body="&lt;p&gt;Mainframes are large computers generally used for bulk data processing.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-08-02T14:46:03.913" LastActivityDate="2016-08-02T14:46:03.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1280" PostTypeId="4" CreationDate="2016-08-02T14:35:47.830" Score="0" Body="for questions about retrocomputing mainframes or clusters" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:44:53.390" LastActivityDate="2016-08-02T14:44:53.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1281" PostTypeId="5" CreationDate="2016-08-02T14:36:35.943" Score="0" Body="&lt;p&gt;Related tags: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;/questions/tagged/homemade&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;homemade&amp;#39;&quot; rel=&quot;tag&quot;&gt;homemade&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:53:16.433" LastActivityDate="2016-08-02T14:53:16.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1282" PostTypeId="4" CreationDate="2016-08-02T14:36:35.943" Score="0" Body="for questions about retrofitting modern hardware for use with retrocomputing devices" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T14:52:37.303" LastActivityDate="2016-08-02T14:52:37.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1283" PostTypeId="5" CreationDate="2016-08-02T15:00:03.763" Score="0" Body="&lt;p&gt;Power Macintosh is a line of Apple Macintosh workstation-class personal computers.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T15:23:41.157" LastActivityDate="2016-08-02T15:23:41.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1284" PostTypeId="4" CreationDate="2016-08-02T15:00:03.763" Score="0" Body="for questions on the Power Macintosh line of personal computers from Apple" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T15:23:53.313" LastActivityDate="2016-08-02T15:23:53.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1285" PostTypeId="5" CreationDate="2016-08-02T15:02:33.277" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://www.colorcomputerarchive.com/coco/Documents/Manuals/Hardware/Multi-Pak%20Interface%20Owners%20Manual%20(Tandy).pdf&quot; rel=&quot;nofollow&quot;&gt;Multi-Pak Interface Owners Manual (Tandy) - TRS-80 Color Computer&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T15:22:32.247" LastActivityDate="2016-08-02T15:22:32.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1286" PostTypeId="4" CreationDate="2016-08-02T15:02:33.277" Score="0" Body="for questions on Program Pak and Multi Pak hardware for the TRS-80" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T15:23:20.187" LastActivityDate="2016-08-02T15:23:20.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1287" PostTypeId="5" CreationDate="2016-08-02T15:03:51.737" Score="0" Body="&lt;p&gt;Protected mode is an operational mode of x86-compatible CPUs.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T15:23:17.343" LastActivityDate="2016-08-02T15:23:17.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1288" PostTypeId="4" CreationDate="2016-08-02T15:03:51.737" Score="0" Body="for questions about switching hardware into protected virtual address mode" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T15:22:24.230" LastActivityDate="2016-08-02T15:22:24.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1289" PostTypeId="5" CreationDate="2016-08-02T15:10:37.330" Score="0" Body="&lt;p&gt;The R800 is the CPU used in the MSX Turbo-R home computer.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T15:23:45.377" LastActivityDate="2016-08-02T15:23:45.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1290" PostTypeId="4" CreationDate="2016-08-02T15:10:37.330" Score="0" Body="for questions about the R800 CPU" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T15:23:56.533" LastActivityDate="2016-08-02T15:23:56.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1291" PostTypeId="5" CreationDate="2016-08-02T15:22:31.750" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/protected-mode&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;protected-mode&amp;#39;&quot; rel=&quot;tag&quot;&gt;protected-mode&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T15:23:36.580" LastActivityDate="2016-08-02T15:23:36.580" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1292" PostTypeId="4" CreationDate="2016-08-02T15:22:31.750" Score="0" Body="For questions about switching hardware into real address mode" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-08-03T15:15:11.743" LastActivityDate="2016-08-03T15:15:11.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1293" PostTypeId="5" CreationDate="2016-08-02T15:23:12.847" Score="0" Body="&lt;p&gt;Use this tag to ask questions about rubber repair, replacement, and alternatives on retrocomputing hardware.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T15:23:50.283" LastActivityDate="2016-08-02T15:23:50.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1294" PostTypeId="4" CreationDate="2016-08-02T15:23:12.847" Score="0" Body="For questions on rubber components of retrocomputers" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-08-03T15:15:43.023" LastActivityDate="2016-08-03T15:15:43.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1295" PostTypeId="5" CreationDate="2016-08-02T15:24:27.993" Score="0" Body="&lt;p&gt;Use this tag to ask questions about screw repair and replacement with retrocomputing hardware.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T18:16:49.160" LastActivityDate="2016-08-02T18:16:49.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1296" PostTypeId="4" CreationDate="2016-08-02T15:24:27.993" Score="0" Body="for questions on screws used with retrocomputing hardware" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T18:18:18.767" LastActivityDate="2016-08-02T18:18:18.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1297" PostTypeId="5" CreationDate="2016-08-02T15:25:10.293" Score="0" Body="&lt;p&gt;Related tags: &#xA;&lt;a href=&quot;/questions/tagged/emulation&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;emulation&amp;#39;&quot; rel=&quot;tag&quot;&gt;emulation&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T18:18:23.563" LastActivityDate="2016-08-02T18:18:23.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1298" PostTypeId="4" CreationDate="2016-08-02T15:25:10.293" Score="0" Body="for questions about simulating retrocomputing hardware and / or software on modern equipment." OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-08-02T18:17:59.940" LastActivityDate="2016-08-02T18:17:59.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1299" PostTypeId="5" CreationDate="2016-08-02T15:26:10.453" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/floppy-disk&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;floppy-disk&amp;#39;&quot; rel=&quot;tag&quot;&gt;floppy-disk&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T18:17:00.563" LastActivityDate="2016-08-02T18:17:00.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1300" PostTypeId="4" CreationDate="2016-08-02T15:26:10.453" Score="0" Body="For questions on information storage on retrocomputing platforms." OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-27T06:30:36.733" LastActivityDate="2016-09-27T06:30:36.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1301" PostTypeId="5" CreationDate="2016-08-02T15:32:32.797" Score="0" Body="&lt;p&gt;Use this tag for questions about automated test suites, instruction and functional tests, etc.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T18:16:53.393" LastActivityDate="2016-08-02T18:16:53.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1302" PostTypeId="4" CreationDate="2016-08-02T15:32:32.797" Score="0" Body="For questions on testing retrocomputing hardware and software." OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-27T06:33:40.110" LastActivityDate="2016-09-27T06:33:40.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1303" PostTypeId="5" CreationDate="2016-08-02T15:34:17.150" Score="0" Body="&lt;p&gt;Touchpads are a common feature of laptop computers as an alternative to a mouse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For questions about computer mice that aren't touchpads, use the &lt;a href=&quot;/questions/tagged/mouse&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;mouse&amp;#39;&quot; rel=&quot;tag&quot;&gt;mouse&lt;/a&gt; tag instead.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2017-01-04T18:59:23.237" LastActivityDate="2017-01-04T18:59:23.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1304" PostTypeId="4" CreationDate="2016-08-02T15:34:17.150" Score="0" Body="For questions about retro touchpads or touchpads on retrocomputing hardware. For computer mice use the &quot;mouse&quot; tag instead." OwnerUserId="621" LastEditorUserId="278" LastEditDate="2017-01-04T18:59:23.237" LastActivityDate="2017-01-04T18:59:23.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1305" PostTypeId="5" CreationDate="2016-08-02T15:35:34.170" Score="0" Body="&lt;p&gt;Related tags: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;/questions/tagged/software&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;software&amp;#39;&quot; rel=&quot;tag&quot;&gt;software&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-02T18:17:12.940" LastActivityDate="2016-08-02T18:17:12.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1306" PostTypeId="4" CreationDate="2016-08-02T15:35:34.170" Score="0" Body="For questions about retrocomputing hardware and software utilities." OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-27T06:32:21.473" LastActivityDate="2016-09-27T06:32:21.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1307" PostTypeId="2" ParentId="1208" CreationDate="2016-08-02T22:06:02.630" Score="10" Body="&lt;p&gt;With the information in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1234/149&quot;&gt;pndc's answer to this question&lt;/a&gt; I've been able to examine the various ROMs and I think I have the definitive answer. Firstly it seems that CDTV and CD32 do things slightly differently so I'll examine them separately.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Background&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://wandel.ca/homepage/execdis/&quot; rel=&quot;noreferrer&quot;&gt;commented disassembly of Exec by Markus Wandel&lt;/a&gt; provides some very useful information. In particular, it confirms points 1 and 2 in pndc's answer:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;exec, normally mapped at 0xf80000, will very early in the process see if there's another ROM at 0xf00000, and jump to it if it appears to be valid&lt;/li&gt;&#xA;&lt;li&gt;the entire area from 0xf00000 to 0xffffff is scanned for ROMTags.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(Footnote: interestingly, the code for these two items has been in Kickstart since version 1.2 if not earlier, and seems to be in as late as 3.1 - meaning that if there's a way to get a ROM with the right magic number to appear at 0xf00000, just about any Amiga will run it!)&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;The CDTV extended ROM&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I inspected the hex dump of the first few bytes of the CDTV ROM. All normal Amiga ROMs start with the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a two-byte magic number 0x1111 (for 256KiB ROMs which were normal at this time in the Amiga's history; later ROMs were 512KiB and have a magic number of 0x1114)&lt;/li&gt;&#xA;&lt;li&gt;a two-byte &lt;code&gt;jmp&lt;/code&gt; opcode, 0x4ef9&lt;/li&gt;&#xA;&lt;li&gt;a four-byte absolute address of the start of exec's instruction code&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The CDTV follows this pattern, and the pointer to the instruction code is at 0xf000d6. This confirms that the CDTV extended ROM must appear at 0xf00000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the initial ROM data, the CDTV extended ROM contains the exec code, just like the real ROM does, although in this case the CDTV extended ROM contains a different version of exec, version 34.1001, instead of 34.2 in Kickstart 1.3. The remainder of the CDTV extended ROM is more ROMTags for the CDTV specific code. As pndc notes, the entire area of both the extended and standard ROMs is searched for ROMTags, so all modules from both ROMs (after deduping - this would remove the exec module from the standard ROM as it is a lower version number) are linked in to the running system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Footnote: it's not certain whether it's the normal ROM or the extended ROM which appears at location zero when the &quot;ROM overlay&quot; is on after a reset - on other Amiga models it would be the normal ROM at 0xf80000, but OTOH the CDTV designers may have made its ROM appear there instead. It doesn't really matter anyway - the standard ROM will jump to the extended ROM if it's present so it doesn't matter if the extended ROM is first executed or not.)&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;A500 with A570 fitted&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;At mnem's suggestion (in a comment on the question) I've also looked at the A500+A570 combo. The A570 was a CD-ROM drive and controller which attached to the side expansion bus of the Amiga 500 and 500Plus. It seems that the A570 included the same or similar extension ROM as the CDTV, to the point where an A500+A570 would display the CDTV boot logo. The CDTV has Kickstart 1.3 and its extended ROM is compatible only with 1.3 - a newer version of the extended ROM is needed to be compatible with Kickstart 2.04 that was in A500Pluses, so it seems that the A570's extended ROM was actually a newer version that was compatible. I'm not sure if there are any A570s with the original, 1.3-only ROM.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;CD32&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The CD32 does things a bit differently. I've &lt;a href=&quot;http://eab.abime.net/showpost.php?p=913039&amp;amp;postcount=18&quot; rel=&quot;noreferrer&quot;&gt;read forum posts&lt;/a&gt; that say that if an Amiga 1200 is fitted with a 1MiB ROM (instead of the 512KiB that is usual with Kickstart 2.0 onwards), the first half of the ROM appears at 0xe00000 and the second half at 0xf80000 as normally expected. Unusually, when the ROM overlay is active, it's actually the 0xe00000 part of the ROM which appears at address zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I examined a hex dump of the CD32 extended ROM looking for ROMTags. A ROMTag starts with the magic number 0x4afc, followed by a longword which is a pointer back to the magic number. Examining that longword pointer allows us to determine the base address that the ROM is expecting to appear at. Sure enough, the first ROM tag appears 16 bytes in, and the pointer is 0xe00010. So we can conclude that the CD32 extended ROM is compiled with an expected base address of 0xe00000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also examined the very first part of the ROM:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Magic number 0x1114 (indicating a 512KiB ROM)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;jmp&lt;/code&gt; opcode 0x4ef9&lt;/li&gt;&#xA;&lt;li&gt;0x00f8002, the address of the &lt;code&gt;jmp&lt;/code&gt; opcode near the start of the regular Kickstart ROM location&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is evidence that the 0xe00000 ROM is the one which appears at location zero when the ROM overlay is on after a reset. These early bytes reference the 0xf80000 ROM instead of itself, and would cause the CPU to jump to the 0xf80000 ROM immediately after reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CD32 extended ROM does not contain an exec replacement like the CDTV ROM does. After the 16-byte initial code, it goes straight into ROMTags for the CD32 functionality. So how do these ROMTags get linked in to the running system? Recall that for the CDTV, exec's search for ROMTags covered the address space 0xf00000 up to 0xffffff. I tried to find the same tables in the hex dump of later ROMs. In Kickstart 3.1, revision 40.60 as used on the CDTV, I found this table:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0x00f80000 - 0x01000000 (regular Kickstart area)&lt;/li&gt;&#xA;&lt;li&gt;0x00e00000 - 0x00e80000 (CD32 extended ROM)&lt;/li&gt;&#xA;&lt;li&gt;0x00a80000 - 0x00b80000 (additional ROM area)&lt;/li&gt;&#xA;&lt;li&gt;0x00f00000 - 0x00f80000 (additional ROM area, as used to be used by CDTV extended ROM)&lt;/li&gt;&#xA;&lt;li&gt;0xffffffff (end of list marker)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This new table appeared in revision 40.60, which as far as I can tell is the first public release of Kickstart 3.1, and was made for the CD32. Revision 40.55, a beta version for the Amiga 3000, has the old table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the case for the CD32 is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The extended ROM is mapped at 0xe00000&lt;/li&gt;&#xA;&lt;li&gt;It's the ROM that appears at location zero when the ROM overlay is switched on at reset, but it immediately jumps to the regular Kickstart ROM at 0xf80000&lt;/li&gt;&#xA;&lt;li&gt;Kickstart 3.1, as used on the CD32, has additional entries in the ROMTag scanning table, to make it scan the CD32 extended ROM at 0xe00000. From hereonwards, it's the same process as on the CD32.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Footnote: the Amiga 1200 schematics show that it can actually accept 2MiB of ROM [consisting of two 16x512Mbit ROMs in parallel]. It's a good guess based on the ROMTag scanning table that the additional 1MiB of ROM is appearing at 0xa80000. &lt;a href=&quot;http://eab.abime.net/showpost.php?p=913039&amp;amp;postcount=18&quot; rel=&quot;noreferrer&quot;&gt;A forum post&lt;/a&gt; appears to back up this guess.) If this is true, it would appear that the Amiga 1200 hardware supported this extra ROM space well before Kickstart knew about it.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Footnote: I was wondering why the CD32 extended ROM didn't appear at 0xf00000 like the CDTV ROM did. According to the Amiga 1200 memory map &lt;a href=&quot;http://eab.abime.net/showpost.php?p=913039&amp;amp;postcount=17&quot; rel=&quot;noreferrer&quot;&gt;as appearing in the same forum post yet again&lt;/a&gt;), this area is used for something else: Flash ROM. A flash ROM component does appear on the Amiga 1200 schematic, but as far as I can see, it never made it to the PCB, not even as a vacant footprint. Google does not say much about this part of the A1200. It sounds like it would be a handy way of making &lt;code&gt;SetPatch&lt;/code&gt; redundant!&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2016-08-02T22:06:02.630" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1308" PostTypeId="1" CreationDate="2016-08-03T04:53:23.227" Score="4" ViewCount="183" Body="&lt;p&gt;I have an LC III that I had recapped, both the power supply and logic board were recapped and cleaned, on receiving it back everything worked with flying colors, but now (only a week later) the internal speaker isn't working. I've tried zapping the PRAM and booting from a different hard drive to rule out software issues, also the headphone jack in the back works if I plug in some ear buds. What do I need to go over next?&lt;/p&gt;&#xA;" OwnerUserId="2187" LastActivityDate="2016-12-10T21:08:00.357" Title="Macintosh LC III Internal Speaker not working" Tags="&lt;hardware&gt;&lt;apple-macintosh&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1311" PostTypeId="2" ParentId="1308" CreationDate="2016-08-03T14:02:53.897" Score="2" Body="&lt;p&gt;The simplest thing to do with your LC III is plug in external speakers and not worry too much about it. The LC III supports stereo sound so external speakers will sound better than the internal speaker anyways. Once I damaged the headphone jack of a PowerBook and the tech at Tekserve noted that I could either replace the motherboard for a few hundred dollars, or plug in a USB headphone adapter for twenty bucks, good advice then, and still good advice.&lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2016-08-03T14:02:53.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1312" PostTypeId="1" AcceptedAnswerId="1314" CreationDate="2016-08-03T16:47:07.453" Score="22" ViewCount="2216" Body="&lt;p&gt;In the Apple II, there are three unique slots (depending on model):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Slot 0 (on the ][ / ][+) which is typically used for language cards.&lt;/li&gt;&#xA;&lt;li&gt;&quot;Aux&quot; slots in the //e and IIgs, typically used for memory expansion.&lt;/li&gt;&#xA;&lt;li&gt;Slot 7 on all of them.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Slot 0 was primarily used for language cards and its uniqueness (from what I understand) is because the addressable space of that card overlaps with many motherboard functions (e.g. slots tend to get $Cx00-$CxFF for I/O, but things such as the toggle are mapped to $C030).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Aux&quot; slots probably deserve a separate question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Leaving us with Slot 7, besides it being the first scanned during a cold boot, I believe I've read that it has signals that don't appear on any of the other slots such as a video line. If that is the case, I can't recall ever seeing any slot 7 specific cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is slot 7 unique electrically? If so, is there anything that has ever taken advantage of this?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2020-02-15T18:15:45.963" Title="What makes slot 7 of the Apple ][ unique from 1-6 and how was this used?" Tags="&lt;apple-ii&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1313" PostTypeId="2" ParentId="1312" CreationDate="2016-08-03T17:42:05.217" Score="16" Body="&lt;p&gt;Yes, slot 7 is unique electrically. Pin 19 (SYNC) and pin 35 (COLOR REF) are only connected for slot 7. These signals where needed by the &lt;a href=&quot;http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Video/Apple%20PAL%20Encoder%20Card/Photos/&quot; rel=&quot;noreferrer&quot;&gt;PAL encoder card&lt;/a&gt;, which is why this card only worked in slot 7. I don't know of any other card that used these signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: You asked in another question why the signals in slot 7 weren't taken advantage of by other cards. There's not really a lot you can do with them, except cater for some different TV encoding system. The color burst reference signal only applies to the TV color encoding, and the (horizontal) sync signal by itself is not enough to do anything interesting with it, you'd also at least need the vertical sync signal, or better, access to the horizontal and vertical counters, to do anything interesting video related.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: I found another card that had to be installed in Slot 7, the &lt;a href=&quot;http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Video/Synetix%20SuperSprite/&quot; rel=&quot;noreferrer&quot;&gt;Synetix Super Sprite Board&lt;/a&gt;, which can overlay the video output with sprites like other homecomputers could.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2016-08-18T17:19:08.063" LastActivityDate="2016-08-18T17:19:08.063" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1314" PostTypeId="2" ParentId="1312" CreationDate="2016-08-03T18:39:06.547" Score="20" Body="&lt;p&gt;When the Apple ][ launched, it was marketed first in the USA. It was one of the first microcomputers to have built-in video circuitry for direct connection to a television monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The television encoding was, as you might expect, the US NTSC standard (Incidentally, NTSC was mocked in Europe where it was said to stand for &lt;em&gt;Never Twice the Same Colour&lt;/em&gt;).  This meant that the machine could not connect directly to a European television.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before Apple officially launched in the UK, ITT marketed a licensed copy - the ITT2020.  This had a separate PAL (Phase Alternate Line) encoder card in slot 7.  This card provided the UHF output for the television.  Unfortunately this also had the side effect of altering the memory configuration and preventing some software running.  PAL is 625 lines while NTSC is 525 lines, so extra memory was required for the graphics.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple shortly afterwards launched the Apple ][ model in Europe, including the UK.  This &lt;em&gt;official&lt;/em&gt; version had a different PAL encoder in slot 7 which altered the memory layout less, allowing more software to run correctly.  I understand that a SECAM encoder was similarly provided for the French market, although I never saw one of these.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, I recall dumping my ITT2020 and getting an Apple ][ so that I could run VisiCalc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Slot 7 was reserved for video cards.  As @dirkt has already answered, it was unique in providing the video SYNC (pin 19) and COLORREF (pin 35) signals.  SYNC was vital to provide the flyback pulse of the TV signal.  If these signals had been daisy chained onto other slots, the degradation in their waveform would have resulted in a poorer quality picture.  Any weakening of sync would have introduced jitter, or worse, into the viewed image.  Also, at the time, the thought of wanting to drive anything other than one single TV was not considered viable so no effort was spent maintaining these signals onto other cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In time, third party suppliers did develop higher resolution video cards for slot 7.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-08-03T18:39:06.547" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1315" PostTypeId="1" AcceptedAnswerId="1316" CreationDate="2016-08-03T21:54:36.387" Score="15" ViewCount="6113" Body="&lt;p&gt;I recently bought a Super Famicom on my trip to Japan. However, the console is region locked so you can't play American SNES games. It seems to be that the plastic cartridge doesn't fit in the console housing, so I am assuming it's just a hardware compatibility issue and nothing with the software (other than the obvious language barrier). Is there any way to get around this region lock?&lt;/p&gt;&#xA;" OwnerUserId="2192" LastEditorUserId="621" LastEditDate="2017-02-07T18:50:10.770" LastActivityDate="2018-11-05T21:12:20.970" Title="How does one bypass the region lock on Japanese Super Famicom?" Tags="&lt;nintendo&gt;&lt;snes&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1316" PostTypeId="2" ParentId="1315" CreationDate="2016-08-03T22:04:16.603" Score="10" Body="&lt;p&gt;There is a tool called the &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B007O3MWVG&quot; rel=&quot;nofollow noreferrer&quot;&gt;Super UFO Pro 8&lt;/a&gt; which claims to bypass the region lock, among other things.  Unsure if it is only for North American consoles...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also use a Game Genie or &lt;a href=&quot;http://www.tototek.com/store/index.php?main_page=product_info&amp;amp;cPath=1_8_11&amp;amp;products_id=40&quot; rel=&quot;nofollow noreferrer&quot;&gt;T-Connector&lt;/a&gt; in passthrough mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was recently researching a similar tool for the Famicom called the &lt;a href=&quot;http://web.archive.org/web/20140509153146/http://www.chrismcovell.com/fcrocky.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;FC Pro Action Rocky&lt;/a&gt; which can bypass the region lock on the original Famicom.  I wonder if there was a Super Famicom version created.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2018-11-05T21:12:20.970" LastActivityDate="2018-11-05T21:12:20.970" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1317" PostTypeId="1" AcceptedAnswerId="1318" CreationDate="2016-08-04T09:06:30.677" Score="9" ViewCount="602" Body="&lt;p&gt;Following on from this question about Apple ][ graphics:&lt;br&gt;&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1312/what-makes-slot-7-of-the-apple-unique-from-1-6-and-how-was-this-used&quot;&gt;What makes slot 7 of the Apple ][ unique from 1-6 and how was this used?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original Apple ][ microcomputer was released for the US market and provided analogue video output in the NTSC format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ITT manufactured under licence, a variant of the Apple ][, called the ITT2020.  This was marketed in Europe with a modified video output using the European PAL standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What impact did this have on the ability to run ‘standard’ Apple software?&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-08-04T09:11:53.380" Title="How did the ITT 2020 graphics differ from the Apple ][?" Tags="&lt;apple-ii&gt;&lt;graphics&gt;&lt;itt-2020&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1318" PostTypeId="2" ParentId="1317" CreationDate="2016-08-04T09:11:53.380" Score="7" Body="&lt;p&gt;The ITT2020 was sold in Europe from 1979 with the PAL format video display.  It was withdrawn from sale once Apple launched the Apple ][ Europlus a couple of years later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The higher scan rate of a PAL display meant that the Hi-Res graphics resolution was increased from the Apple’s 280 to the 2020’s 360 pixels per line.  Vertical resolution was kept the same.  This change to the aspect ratio meant that drawn circles were no longer circular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to meet the increased video frequency, the number of bits provided to the video shift register was increased to 9 per memory location.  This in turn required an extra RAM chip on the motherboard.  The Hi-Res memory pages $2000 to $5FFF were thus 9-bit bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Access to this altered memory layout required changes to the Applesoft Basic Interpreter.  The ITT2020 had PALSOFT.  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The graphics routines were larger, as code was included to manipulate the 9th bit which meant that something had to be removed due to the fixed size of the&#xA;ROM.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Apple Basic HPLOT command was reduced in scope.  The PALSOFT HPLOT would only accept a single parameter.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Attempts to read and write directly to video memory, for example to manipulate sprites, failed as they would move 8 bytes per memory location, not 9.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Another consequence of the ROM changes was that entry points of some&#xA;ROM routines changed.  Software that made direct ROM calls, a common&#xA;trick in microcomputers of that era, would fail as the call went to&#xA;the wrong location.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The upshot of this is that several software packages written for the Apple ][ would not run on the ITT2020.  Some that did run had unintended graphical anomalies.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-08-04T09:11:53.380" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1319" PostTypeId="5" CreationDate="2016-08-04T09:14:08.497" Score="0" Body="&lt;p&gt;For questions specifically for the ITT2020.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was a clone of the Apple ][ with a modified analogue video output for the PAL standard.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-08-04T09:14:08.497" LastActivityDate="2016-08-04T09:14:08.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1320" PostTypeId="4" CreationDate="2016-08-04T09:14:08.497" Score="0" Body="Licenced clone of the Apple ][ sold in Europe." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-08-04T09:14:08.497" LastActivityDate="2016-08-04T09:14:08.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1321" PostTypeId="1" AcceptedAnswerId="1324" CreationDate="2016-08-04T12:35:11.407" Score="13" ViewCount="833" Body="&lt;p&gt;Based on a &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1314/382&quot;&gt;previous question&lt;/a&gt; about how slot 7 on the II / II+ was unique as it had two video signals on it that other slots lacked, I am curious why the slot wasn't taken more advantage of. But that aside, I used a few 80-column cards for the earlier machines and seem to recall that they were installed in slot 3 instead of 7.&lt;/p&gt;&#xA;&lt;p&gt;It makes sense that slot 3 would be used given that it became the standard for the IIe, IIc and IIgs that followed, but the cards were designed before those machines came out and for the Apples that were from the late 1970s. But that being said, why would they have resided in that slot instead of #7 which had video signals available?&lt;/p&gt;&#xA;&lt;p&gt;As a side note, I seem to recall that the Videx (?) card wouldn't clear the screen with a 'HOME' command and instead you'd have to pass the &lt;kbd&gt;Control&lt;/kbd&gt;+&lt;kbd&gt;L&lt;/kbd&gt; character instead. Then again, my mind is fuzzy 30+ years later :-)&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="15334" LastEditDate="2020-11-11T07:49:06.743" LastActivityDate="2020-11-11T07:49:06.743" Title="Why didn't Apple II / II+ 80-column cards use slot 7?" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1322" PostTypeId="2" ParentId="441" CreationDate="2016-08-04T13:00:33.957" Score="4" Body="&lt;p&gt;I use z80asm to assemble/compile, and z80dasm to dissasemble to source. Both are usually found in your package manager.&#xA;I can load compiled code into the fuse emulator (spectrum) and run it succesfully.&lt;/p&gt;&#xA;" OwnerUserId="3195" LastActivityDate="2016-08-04T13:00:33.957" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1323" PostTypeId="2" ParentId="256" CreationDate="2016-08-04T13:39:01.097" Score="3" Body="&lt;p&gt;The previous answer is definitely the correct one, however, &lt;em&gt;theoretically&lt;/em&gt; and with enough time, the A1000's boot ROM could be reworked to pilot your hard drive controller, interpret the Rigid Disk Block structure on the HD and eventually load a Kickstart either from a file with a filesystem (that would also require a small read-only OFS/FFS driver) or from a special partition. Then you would enable the Write Control Store and reset to the loaded Kickstart. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;AFAIK, the original A1000 ROM code is a 8KB but the ROM chips themselves are two 8bit x 32K locations, so there is 64KB of space available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not aware of anyone that ever tried this way, however, not even back in the days when Commodore was alive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further expanding what I wrote, as it may be a bit more complicate that &quot;just&quot; talking to the chip and reading data from disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A potential hurdle could be bringing the HDD controller to life... investigation would be needed to see if the AutoConfig protocol can be activated on the controller in such an early environment (to be sure the controller card initializes itself so that the controller chip can be acted upon) and still end in a state where the next reset would reinitialize it. &#xA;Indeed, assuming A1000 hard drive cards even had AutoConfig! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be easier if the controller did not use AutoConfig, but then more investigation would be needed to understand where the controller maps itself in the address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case code in the eventual controller's ROM would probably not be useful as it would assume Exec running and if an autobooting one, that it is called via AmigaDOS's boot protocol. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2016-08-05T12:41:00.733" LastActivityDate="2016-08-05T12:41:00.733" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1324" PostTypeId="2" ParentId="1321" CreationDate="2016-08-04T15:30:58.010" Score="9" Body="&lt;p&gt;The signals available at slot 7 wouldn't be of any use for an 80-column card. On the one hand, a TV didn't have enough resolution to properly display 80 columns, so the TV color burst reference signal couldn't be used. On the other hand, on the Apple II and II plus, an 80-column card needed to use its own video RAM (using the mainboard video RAM would have interfered with the hardwired video output/RAM refresh). This is also the reason why the &lt;code&gt;HOME&lt;/code&gt; command didn't work: it clears the mainboard video RAM, not the video RAM on the 80-column card. So some other way was needed to clear the 80-column screen, and an ASCII &lt;code&gt;form feed&lt;/code&gt; character (Control-L) was an obvious choice, since the &lt;code&gt;COUT&lt;/code&gt; (character out) routine pointed to the 80-column firmware ROM, anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure how slot 3 became the &quot;standard&quot; for 80-column card. Maybe the parallel printer card (slot 1) and the serial interface card (slot 2) where brought to market in that order, so the next free slot was slot 3. But I really don't know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &quot;standard&quot; was definitely established before the Apple //e, and when software like UCSD Pascal and CP/M started to use it, the //e had to take that into account.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="2081" LastEditDate="2017-01-03T18:22:16.250" LastActivityDate="2017-01-03T18:22:16.250" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1325" PostTypeId="2" ParentId="1212" CreationDate="2016-08-04T22:56:05.523" Score="8" Body="&lt;p&gt;&quot;Northbridge&quot; is a rather modern and PC specific term and is used to denote the bridge chip that connects the CPU to fast peripherals such as PCI buses and memory and that (usually) contains a memory controller. So for machines that don't have a northbridge, the answer is &quot;somewhere else&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Altair 8088 can use either DRAM or SRAM boards. Each DRAM board has its own memory controller, and the SRAM boards conveniently don't need anything beyond some chip select logic (but SRAM is expensive). If there is more than one memory board installed, there will be several independent memory controllers in the system. This setup is quite common for modular, backplane based computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of the 5150, there is no dedicated &quot;memory controller&quot; chip. There are just a bunch of simple 74xx chips hanging off the (only) CPU bus that generate the chip select signals for the memory, and the 8237 DMA controller and the 8253 timer that generate the refresh signals (amongst other things).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Less stingy designs used dedicated memory controller chips like the AM2964 or DP84322 which combine address multiplexer, refresh counter, row and column address logic etc. in a single chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even back in the day, some CPUs such as the Z80 included memory refresh logic directly in the CPU to reduce chip count. Many modern CPUs include the memory controller directly in the CPU because it's faster. Examples for this are AMDs Athlon and Opteron, IBMs Power5, and Intels i5 and i7 CPUs.&lt;/p&gt;&#xA;" OwnerUserId="2049" LastEditorUserId="2049" LastEditDate="2016-08-22T11:22:02.730" LastActivityDate="2016-08-22T11:22:02.730" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1326" PostTypeId="1" AcceptedAnswerId="1327" CreationDate="2016-08-05T06:26:37.170" Score="7" ViewCount="386" Body="&lt;p&gt;I'm trying to compile a hello world object using mpw...&#xA;I've created a file called hello.c on my desktop, contents are as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;int main(void){&#xA;  printf(&quot;hello world!\n&quot;);&#xA;  return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've got MPW shell open and I'm attempting the command &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mrc /Desktop/hello.c&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I assume it has something to do with how I'm expressing the path...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Error message is:&#xA;&lt;code&gt;Command line error: unable to open input file '/Desktop/hello.c'&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Im using a Macintosh IIfx running 7.5.5&lt;/p&gt;&#xA;" OwnerUserId="2187" LastEditorUserId="2187" LastEditDate="2016-08-05T07:36:34.737" LastActivityDate="2017-02-16T00:05:44.140" Title="Building hello world on a Macintosh IIfx with mpw" Tags="&lt;apple-macintosh&gt;&lt;mac-os-classic&gt;&lt;programming&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1327" PostTypeId="2" ParentId="1326" CreationDate="2016-08-05T13:37:02.277" Score="3" Body="&lt;p&gt;I figured it out. I needed to go to the directory pull down menu and select Desktop as my working directory, and then type &lt;code&gt;mrc hello.c&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="2187" LastActivityDate="2016-08-05T13:37:02.277" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1328" PostTypeId="2" ParentId="259" CreationDate="2016-08-05T14:41:06.573" Score="14" Body="&lt;p&gt;Since at least Kickstart 2.0, the OS has built-in code that allows for drive checking without making the click noise. To enable it, just set the &lt;code&gt;TDPB_NOCLICK&lt;/code&gt; flag in the &lt;code&gt;tdu_PubFlags&lt;/code&gt; of &lt;code&gt;trackdisk.device&lt;/code&gt;'s unit structure (of type &lt;code&gt;struct TDU_PublicUnit&lt;/code&gt;) for the drive you want to silence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't know about earlier. I guess &lt;code&gt;trackdisk.device&lt;/code&gt; was patched with custom code, as it may be that some of the internal functions of the device appear - undocumented - in the LVO table.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2016-08-05T14:41:06.573" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1329" PostTypeId="1" AcceptedAnswerId="1335" CreationDate="2016-08-08T09:36:09.360" Score="17" ViewCount="16523" Body="&lt;p&gt;In Japan, Nintendo's first home console was sold as the Family Computer (Famicom), while in the US it was later sold as the Nintendo Entertainment System (NES).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than the region lock out for game cartridges and the slight naming variation, what are the key differences between the Famicom and the NES?&lt;/p&gt;&#xA;" OwnerUserId="2192" LastEditorUserId="621" LastEditDate="2016-08-08T16:47:30.473" LastActivityDate="2016-11-19T08:02:06.700" Title="What are the differences between the Japanese Famicom and American NES?" Tags="&lt;nintendo&gt;&lt;nes&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1330" PostTypeId="1" CreationDate="2016-08-08T11:10:39.447" Score="5" ViewCount="886" Body="&lt;p&gt;Is it possible to dual boot Windows 98 or Windows 95 on an iMac G3 running Mac OS 9.2?&lt;/p&gt;&#xA;" OwnerUserId="2148" LastEditorUserId="278" LastEditDate="2017-02-04T14:23:42.917" LastActivityDate="2017-02-04T14:23:42.917" Title="Dual-booting Windows 98 on an iMac G3" Tags="&lt;mac-os-classic&gt;&lt;windows-98&gt;&lt;imac&gt;&lt;imac-g3&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1331" PostTypeId="2" ParentId="1330" CreationDate="2016-08-08T11:16:20.807" Score="9" Body="&lt;p&gt;Windows 95 and 98 require an x86-type CPU (and more generally, a PC, with BIOS, etc.), so they can't run on PowerPC G3-based computers without an emulation layer of some sort.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-08-08T11:16:20.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1332" PostTypeId="2" ParentId="1216" CreationDate="2016-08-08T12:51:55.423" Score="1" Body="&lt;p&gt;I was successfully using a generic IDE CD-ROM with Amiga for many years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You connect it to the same IDE ribbon you use for a hard disk from the motherboard - the only fancy hardware is the 2.5&quot; to 3.5&quot; connector you need for the harddisk anyway - and some power for your CD-ROM, e.g. an external PSU. You still use scsi.device with that setup (regardless of it being IDE).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course the logistics may be tricky - making a gap in the cover to pass the ribbon or such.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;unfortunately I can't help you much with software... it's been too many years.&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2016-08-08T12:51:55.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1333" PostTypeId="2" ParentId="1330" CreationDate="2016-08-08T16:36:46.733" Score="6" Body="&lt;p&gt;Not dual-boot, but you could track down an old copy of Virtual PC for the Mac by Microsoft. VPC was an x86 emulator for the Mac OS X PowerPC line of computers and supported Windows 98 out of the box. I can't recall if it supported '95 as well since it has been several years since I've used it, but I know that it did work reasonably well with '98.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now as far as how &lt;em&gt;fast&lt;/em&gt; it would run that Windows 98 installation ... I don't know about that on a G3. It worked reasonably well on a 1.8GHz G5 and 1.2GHz G4, so I can't speak to a ??? MHz G3.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-08-08T16:36:46.733" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1334" PostTypeId="2" ParentId="1329" CreationDate="2016-08-08T16:46:44.330" Score="8" Body="&lt;p&gt;Besides the obvious hardware case and cartridge size differences, here are two differences I can think of off the top of my head:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The Famicom HVC-001 only had RF/coax video output while the NES has composite video out (and mono audio out) with an RF adapter accessory.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With the launch of the NES in North America and Europe came the 10NES lockout chip which effectively region locked the console and stopped most bootleg carts from even booting properly.  This gave Nintendo more explicit control over which titles were released on the platform outside of Japan.  You're probably familiar with the &quot;Nintendo Seal of Quality&quot; that appeared on virtually all NES games at the time.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-08T22:05:15.840" LastActivityDate="2016-08-08T22:05:15.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1335" PostTypeId="2" ParentId="1329" CreationDate="2016-08-08T17:13:48.117" Score="16" Body="&lt;p&gt;I'm sure someone would be able to expand upon this further, but from what I understand there were four things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Different case and physical layout (e.g. controllers have storage slots on the sides of the main unit).&lt;/li&gt;&#xA;&lt;li&gt;Cartridge slot has fewer pins as it didn't support the &quot;10NES&quot; lockout chip.&lt;/li&gt;&#xA;&lt;li&gt;One of the controllers had a microphone on it for voice activated gaming.&lt;/li&gt;&#xA;&lt;li&gt;The expansion port on the bottom of the NES versus the DB15 port on the Famicom.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The first one is obvious cosmetically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For #2, all the signals of the Famicom cartridge slot were available on the NES and as such there were &lt;a href=&quot;http://famicomworld.com/workshop/articles/nes-cart-converters/&quot; rel=&quot;nofollow noreferrer&quot;&gt;adapters available&lt;/a&gt; which would allow you to use a Famicom cartridge on a NES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The third one is the most intriguing since it is one feature which didn't appear at all on the NES. There were only a &lt;a href=&quot;http://www.famicomworld.com/forum/index.php?topic=2355.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;few games&lt;/a&gt; ever made that utilized the microphone, though it isn't clear how advanced the use really was. For example, Super Pitfall II had a special microphone power-up that you could collect and then if you shouted something into the microphone it would activate the power-up. Other games reportedly seemed more sophisticated, but given the computational power and chipset of the Famicom, I would imagine it isn't anything more than detecting that a noise hit the microphone and even then &lt;em&gt;perhaps&lt;/em&gt; being able to tell if it is a high/low/hiss/boom type sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the Famicom had a &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/Famicom_expansion_port_pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;DB15 expansion port&lt;/a&gt; connector while the NES had an &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/NES_expansion_port_pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;expansion connector&lt;/a&gt; on the bottom of the unit. The Famicom port was more of an extended controller port and thus we saw adapters (I think there was an adapter to allow NES controllers to connect to the unit via this port) and even a keyboard for Famicom BASIC that connected to this. Saving/loading of programs were via cassette audio in/out ports on the keyboard (perhaps related to the microphone's existence?). I believe the keyboard was the only way to get a cassette player hooked up to the Famicom, but despite that extra cost you can see even in the American release of Excitebike! the load/save function for custom built tracks - a feature that required the Famicom's cassette system to operate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the NES connector, I don't believe anything was ever released for it. From the pinouts, it would look like it is a connection to the CPU bus and thus that would validate some rumors of various expansions that could have been available, but none that I've ever known about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, there was a disk drive and a modem available for the Famicom as well, but those connected either via the cartridge slot (disk) or DB15 port. I did see a disk drive unit in the USA back in the day so can confirm that it did work with the American NES as my friend demonstrated how he could load a NES cartridge from floppy disk.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="3601" LastEditDate="2016-11-19T08:02:06.700" LastActivityDate="2016-11-19T08:02:06.700" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1336" PostTypeId="1" AcceptedAnswerId="1340" CreationDate="2016-08-08T21:56:00.050" Score="10" ViewCount="1542" Body="&lt;p&gt;The NES Picture Processing Unit has eight memory-mapped registers to the CPU in registers &lt;code&gt;$2000&lt;/code&gt; to &lt;code&gt;$2007&lt;/code&gt;.  The are incompletely decoded, so they are mirrored  every 8 bytes from register &lt;code&gt;$2008&lt;/code&gt; to &lt;code&gt;$3FFF&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does it mean that the memory is &quot;incompletely decoded?&quot;  What is the purpose of nametable mirroring in the PPU?&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-08-10T11:43:22.737" Title="Why are the PPU registers on the NES mirrored?" Tags="&lt;nintendo&gt;&lt;nes&gt;&lt;memory-layout&gt;&lt;memory&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1337" PostTypeId="1" AcceptedAnswerId="1368" CreationDate="2016-08-08T22:08:56.153" Score="18" ViewCount="4153" Body="&lt;p&gt;One of the &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/1329/621&quot;&gt;differences&lt;/a&gt; between the Japanese Famicom and the NES released outside of Japan is that the NES shipped with a lockout chip which prevented bootleg and imported games from working on the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did this chip work?  What kind of tactics did third-party developers such as Tengen and Camerica/Codemaster?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-08-12T19:39:16.493" Title="How Did the 10NES lockout chip work?" Tags="&lt;nintendo&gt;&lt;nes&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1338" PostTypeId="2" ParentId="1135" CreationDate="2016-08-08T22:35:36.170" Score="30" Body="&lt;p&gt;&lt;a href=&quot;http://www.chrismcovell.com/secret/weekly/Stars_of_the_Family_Computer_p2.html&quot;&gt;This&lt;/a&gt; website might help. A guy (Chris Covell) picked up a children's picture book in Japan which shows kids how NES games were made. (Mostly focussing on Super Mario Bros. 3)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chris actually scanned the whole book and translated it so you can read it on the website!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The book shows many things such as designing (with Shigeru Miyamoto smoking), programming, testing of the games, some of the warehouses, and much more. The book is 39 pages, (or at least that is all on the website) but it gives a pretty nice look into the development of the NES (known as the Famicom in Japan) and the development of Super Mario Bros. 3.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Source(s): &lt;/strong&gt; &lt;a href=&quot;http://nintendoage.com/forum/messageview.cfm?catid=31&amp;amp;threadid=70322&quot;&gt;NintendoAge&lt;/a&gt; and &lt;a href=&quot;http://www.chrismcovell.com/secret/weekly/Stars_of_the_Family_Computer.html&quot;&gt;chrismcovell.com&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="2148" LastEditorUserId="2148" LastEditDate="2016-08-08T22:45:21.800" LastActivityDate="2016-08-08T22:45:21.800" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1339" PostTypeId="2" ParentId="1336" CreationDate="2016-08-08T23:51:58.727" Score="12" Body="&lt;p&gt;&quot;Incomplete decoding&quot; means that the address decoder only pays attention to a few of the address lines: the high bits indicating the PPU chip and the three low bits selecting a register on that chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The purpose of doing this is to simplify things: by ignoring most of the address lines, the PPU chip needs fewer pins, while a three-bit address decoder is a much simpler circuit than a 16-bit decoder.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-08-08T23:51:58.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1340" PostTypeId="2" ParentId="1336" CreationDate="2016-08-09T09:31:11.227" Score="11" Body="&lt;p&gt;Just to expand a bit, a cheap address decoder might not take all the address bits and decode them. For a 8 bit processor a simple address decoding scheme might use a 74LS138 to decode the high address bits (A15..A13) into 8K chunks of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative might be to use the high bit (A15) as an enable signal (connected to E1 on the 138) and wired to the CE pin on a 32K ram chip, allowing decoding of the top 32K into 4K chunks by wiring address pins A14..A12 to the 138 with 32K of ram from $0000-$8000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally as a super cheap decode mechanism (used in various Sinclair computers for IO mapped devices) it's possible to use the address bus pins directly as chip enables i.e. 11110111 ($f7) where the single low bit selects which device. This allows 8 partially decoded devices without needing any decoding logic (although the spectrum only uses $fe so all IO ports on additional hardware need to be odd). This tended to be used more on processors with a separate IO space, otherwise using the rest of memory gets to be seriously complicated (particularly with DRAMs and refresh logic).&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="2126" LastEditDate="2016-08-09T18:05:22.860" LastActivityDate="2016-08-09T18:05:22.860" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1341" PostTypeId="1" AcceptedAnswerId="1344" CreationDate="2016-08-09T17:52:48.703" Score="13" ViewCount="1419" Body="&lt;p&gt;I was reading about undocumented opcodes for the 650x family of processors and discovered &lt;code&gt;JAM&lt;/code&gt;, an instruction &quot;which simply causes the CPU to freeze, requiring a hardware reset or power cycle to restart.&quot;&lt;sup&gt;&lt;a href=&quot;http://www.cpushack.com/CPU/cpu1.html&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was this instruction ever used in practice/production software?  What is a use case for this instruction?  Could it be used to lock the hardware on an invalid instruction or if an invalid program was loaded?&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2019-06-12T10:05:47.493" Title="What is a use case for the JAM instruction on the MOS Technology 650x family of processors?" Tags="&lt;mos-650x&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1342" PostTypeId="5" CreationDate="2016-08-09T17:54:03.147" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/mos-6520&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;mos-6520&amp;#39;&quot; rel=&quot;tag&quot;&gt;mos-6520&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/mos-6522&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;mos-6522&amp;#39;&quot; rel=&quot;tag&quot;&gt;mos-6522&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/mos-6526&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;mos-6526&amp;#39;&quot; rel=&quot;tag&quot;&gt;mos-6526&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-10T08:53:35.567" LastActivityDate="2016-08-10T08:53:35.567" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1343" PostTypeId="4" CreationDate="2016-08-09T17:54:03.147" Score="0" Body="For questions on the MOS Technology 650x family of processors. For questions about the 6502 use the &quot;6502&quot; tag." OwnerUserId="621" LastEditorUserId="278" LastEditDate="2017-01-05T07:32:06.777" LastActivityDate="2017-01-05T07:32:06.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1344" PostTypeId="2" ParentId="1341" CreationDate="2016-08-09T18:43:02.400" Score="31" Body="&lt;p&gt;It's a bit misleading to call them &quot;undocumented opcodes&quot;.  &quot;Accidental opcodes&quot; would be more accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of using microcode, the 6502 family used a &lt;a href=&quot;https://en.wikipedia.org/wiki/Programmable_logic_array&quot;&gt;programmable logic array&lt;/a&gt; as a lookup table to break an instruction down into a series of simpler steps.  At each step of executing an instruction, the CPU would form a bit pattern from the instruction and instruction clock and feed it into the PLA.  The PLA would then activate one of its output lines based on that bit pattern, and the CPU would execute the corresponding micro-operation.  This process repeats until the instruction finishes and the instruction clock gets reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many opcodes share micro-operations (for example, every branch instruction shares a &quot;modify the program counter&quot; micro-op), and the CPU designers took full advantage of this to reduce the size of the PLA.  Because of this sharing of micro-operations, bit patterns that aren't a documented instruction can still trigger a sequence of micro-operations.  The &lt;code&gt;JAM&lt;/code&gt; instruction (also documented as &lt;code&gt;KIL&lt;/code&gt; or &lt;code&gt;HLT&lt;/code&gt;) is one where the sequence of accidentally-triggered micro-operations never resets the instruction clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the effects of these instructions are an accidental side-effect of the layout of the PLA, they can change from chip to chip as developers try to optimize things.  The &lt;code&gt;KIL&lt;/code&gt; family are particularly vulnerable to changing because they require that none of the accidentally-triggered micro-operations include a &quot;reset the instruction counter&quot; step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vulnerability to changing is why &lt;code&gt;KIL&lt;/code&gt; would not be used in production code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;http://www.pagetable.com/?p=39&quot;&gt;http://www.pagetable.com/?p=39&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;List of opcodes showing some of the model-to-model variation: &lt;a href=&quot;http://bbc.nvg.org/doc/6502OpList.txt&quot;&gt;http://bbc.nvg.org/doc/6502OpList.txt&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4" LastEditorUserId="4" LastEditDate="2016-08-09T18:49:29.523" LastActivityDate="2016-08-09T18:49:29.523" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1345" PostTypeId="1" AcceptedAnswerId="1354" CreationDate="2016-08-10T08:36:02.410" Score="6" ViewCount="1199" Body="&lt;p&gt;Over the years and with the large variety of hardware I've dealt with I've used quite a few of different video inputs and outputs. While I usually have no issue just plugging cables into devices, I really started to wonder how video cables differed from each other. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Older home computers might have used RGB or composite video connections, or connected to an antenna input of a TV. The IBM PC (and compatibles) had a number of different connectors, then settled on VGA cables for a long time. But then things changed again, and we got DVI, DisplayPort, HDMI, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone describe the difference between these different connectors and cables? Why do these cables keep evolving; what does an hdmi cable offer that a composite cable does not, for example?&lt;/p&gt;&#xA;" OwnerUserId="2192" LastEditorUserId="10566" LastEditDate="2019-07-22T18:49:18.597" LastActivityDate="2019-07-22T18:49:18.597" Title="Why have computers used so many different video connectors?" Tags="&lt;hardware&gt;&lt;video&gt;&lt;s-video&gt;" AnswerCount="2" CommentCount="6" ClosedDate="2016-08-15T08:52:06.953" ContentLicense="CC BY-SA 4.0" />
  <row Id="1348" PostTypeId="2" ParentId="1336" CreationDate="2016-08-10T11:43:22.737" Score="2" Body="&lt;p&gt;In modern parlance, we would refer to the registers being &lt;code&gt;aliased&lt;/code&gt; every 8 bytes. As the other answers have identified, its something which costs logic resources to avoid.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reasons to spend the gates and avoid aliasing would come down to considerations like reducing the validation space, which might be more important for security or safety critical applications (retro designs were simpler, and with more significant hardware cost).&lt;/p&gt;&#xA;" OwnerUserId="46" LastActivityDate="2016-08-10T11:43:22.737" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1349" PostTypeId="1" AcceptedAnswerId="1366" CreationDate="2016-08-10T12:22:32.730" Score="19" ViewCount="1303" Body="&lt;p&gt;&lt;sub&gt;This is a test question based on &lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/q/185/621&quot;&gt;this meta post&lt;/a&gt;.  If the question can be reworded to be more on-topic, please feel free to suggest improvements.  This is an open ended question about software development on any &lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/q/2/621&quot;&gt;retrocomputing platform&lt;/a&gt;.&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm curious to know how the software development process has changed since the dawn of the first personal computers. As a current software engineer, I use tools such as Jira and Pivotal Tracker, and we have methodologies like Agile and Scrum, but how were software projects managed for applications on retrocomputing platforms?  &lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2020-10-04T18:04:24.793" LastActivityDate="2020-11-13T21:21:43.617" Title="Retrocomputing Software Development Process/Methodologies" Tags="&lt;history&gt;&lt;software-development&gt;" AnswerCount="7" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1350" PostTypeId="5" CreationDate="2016-08-10T12:24:18.153" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/software-development-kit&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;software-development-kit&amp;#39;&quot; rel=&quot;tag&quot;&gt;software-development-kit&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-10T13:56:58.587" LastActivityDate="2016-08-10T13:56:58.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1351" PostTypeId="4" CreationDate="2016-08-10T12:24:18.153" Score="0" Body="For questions about the software development process on retrocomputing platforms" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-12-27T11:41:53.440" LastActivityDate="2016-12-27T11:41:53.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1352" PostTypeId="1" AcceptedAnswerId="1353" CreationDate="2016-08-10T13:19:33.090" Score="5" ViewCount="2266" Body="&lt;p&gt;I'd like to build a DOS/Win95/98 computer in order to play old PC games I have without emulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are a few games I'd like to run:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Teranova: Strike Force Centauri;&lt;/li&gt;&#xA;&lt;li&gt;System Shock 1 and 2;&lt;/li&gt;&#xA;&lt;li&gt;Half-Life;&lt;/li&gt;&#xA;&lt;li&gt;Baldur's Gate;&lt;/li&gt;&#xA;&lt;li&gt;Myst;&lt;/li&gt;&#xA;&lt;li&gt;Syndicate and Syndicate Wars;&lt;/li&gt;&#xA;&lt;li&gt;Shogo;&lt;/li&gt;&#xA;&lt;li&gt;Command and Conquer: Red Alert...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The problem is that good documentation on old components seems rare. So I have a few question:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Should I build a Win95 or Win98 computer in order to also play DOS games (System Shock, Teranova...)? I know some DOS games plays too fast on systems that are too powefull, should I just build a DOS only computer?&lt;/li&gt;&#xA;&lt;li&gt;Should I seek an AT or an ATX motherboard, and which models and specs are the best?&lt;/li&gt;&#xA;&lt;li&gt;What processors specs should I aim for?&lt;/li&gt;&#xA;&lt;li&gt;What graphics card specs should I look out for (I know the Voodoo series is great, but they are way too much expensive);&lt;/li&gt;&#xA;&lt;li&gt;What sound cards specs should I aim for (I've allways heard that the Soundblasters cards would be the best)?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Can anyone help me with tihs please?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone knows any detailled documentation on the required the required specs for this era of PC gaming, please tell me.&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="824" LastEditDate="2018-07-12T07:17:29.990" LastActivityDate="2018-07-12T07:17:29.990" Title="Building a DOS/Win95/98 computer from scratch" Tags="&lt;ms-dos&gt;&lt;gaming&gt;&lt;windows-95&gt;&lt;windows-98&gt;" AnswerCount="1" CommentCount="15" FavoriteCount="1" ClosedDate="2016-08-20T10:50:28.157" ContentLicense="CC BY-SA 4.0" />
  <row Id="1353" PostTypeId="2" ParentId="1352" CreationDate="2016-08-10T14:15:24.547" Score="7" Body="&lt;p&gt;This is a rather broad question, but the answers are inter-related so here goes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Should I build a Win95 or Win98 computer in order to also play DOS games (System Shock, Teranova...)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This was common in the late 90s: PCs mostly ran Windows 95 or 98 then, but still ran DOS games too.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I know some DOS games plays too fast on systems that are too powefull, should I just build a DOS only computer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's true of older DOS games, but the games you've listed work well on faster computers. In fact the later DOS games (published after Windows 95 was released) tend to be quite CPU-hungry...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Should I seek an AT or an ATX motherboard, and which models and specs are the best?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is related to the CPU and graphics card you end up choosing. If you're getting a Pentium II, Athlon or later CPU, you'll find more ATX motherboards than AT motherboards. If you're aiming for a classic Pentium or Pentium MMX (socket 7), you'll find more AT motherboards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, if you can get an ATX motherboard, it will be easier to build a working system nowadays: AT power-supplies are harder to find, AT keyboards too...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What processors specs should I aim for?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I would aim for something typical for the very end of the 90s, &lt;em&gt;e.g.&lt;/em&gt; a Pentium II around 500MHz. (In 2000 I had a 750MHz Athlon running Windows 98.) For a pure DOS system I prefer classic Pentiums, but Windows 95/98 games tend to need faster processors.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What graphics card specs should I look out for (I know the Voodoo series is great, but they are way too much expensive);&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The ideal combination for DOS games is an S3 card of some sort (S3 Trio64 for example) along with a Voodoo 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Windows 95/98 you really want a card that can run DirectX well; early GeForce cards were very good. Their VBE support under DOS is good too, so you could use that for DOS games as well. Using a GeForce means getting a motherboard with good AGP support, which pretty much means a 440BX board and a Pentium II or III. (Just make sure the board has ISA slots too, for the sound card.)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What sound cards specs should I aim for (I've always heard that the Soundblasters cards would be the best)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For DOS, get an &lt;strong&gt;ISA&lt;/strong&gt; Soundblaster. Soundblaster 16 cards are cheap and plentiful, and the plug-and-play models are easy to set up. These will also work well in Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PCI sound cards work fine in Windows but tend to cause problems with DOS games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Picking a sound card is probably the hardest part in all this; check out &lt;a href=&quot;https://www.youtube.com/watch?v=YXFYWJ7dbz0&quot;&gt;the Doom E1M1 comparison&lt;/a&gt; (and &lt;a href=&quot;https://www.youtube.com/watch?v=_TsL0HyVq4g&quot;&gt;part 2&lt;/a&gt;), &lt;a href=&quot;https://www.youtube.com/watch?v=a324ykKV-7Y&quot;&gt;LGR's evolution of PC audio&lt;/a&gt;, or &lt;a href=&quot;https://twitter.com/dosnostalgic&quot;&gt;Anatoly Shashkin's tweets which often touch on this&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-08-10T14:15:24.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1354" PostTypeId="2" ParentId="1345" CreationDate="2016-08-10T15:25:56.090" Score="10" Body="&lt;p&gt;To stay on-topic for the RetroComputing SE, I'll only answer for the video connectors commonly seen on retro systems:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing to keep in mind is that you cannot always rely on the connector shape alone to know what it is carrying.  The best example of this is the venerable RCA connector, which is used for all kinds of different signals.  Sometimes (but not always) you can tell what an RCA connector (or set of connectors) is for based on color coding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Systems that were designed with the intention to be connected to your television often had a &quot;TV out&quot; or &quot;RF out&quot;.  This was usually done via an RCA connector (the connector used for composite and component video, and also commonly used for audio) which would attach to your TV via a switch box.  The switch box usually had either a 300-ohm antenna output (2 screw terminals) or a 75-ohm antenna output (F-connector, commmonly used for cable TV).  You could tell that a system had &quot;TV out&quot; or &quot;RF out&quot; because it often had a channel selector switch that let you change what TV channel was used (2/3 or 3/4 were common options in the USA).  An RF TV signal was basically a composite video signal transmitted on a radio-frequency carrier wave, in a very similar fashion to how audio is transmitted by radio stations.  the RF signal was able to carry both video &lt;em&gt;and&lt;/em&gt; audio (which allows TV programs to have sound, albeit mono because at that time only 1 audio channel was used).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The composite video signal carried by RF was a standard signal, following the NTSC standard in the USA, the PAL standard in much of Europe, etc.  The NTSC standard defined the refresh rate and it also defined the number of visible lines (483, split into 2 frames due to interlacing).  Video chips at that time often generated composite video signals directly, then used an &quot;RF modulator&quot; to convert the signal to RF, which the TV would then convert back to composite again.  the RF conversion step would introduce some distortion, so you could get better picture quality by skipping it and sending the composite signal directly, but this required you to have a &quot;monitor&quot; with a composite input because TV's at the time only had RF inputs.  about the time VCRs were getting popular, it became common for TV manufacturers to include composite inputs in their TVs, so you no longer needed a special monitor.  Composite video commonly used the RCA connector, but to avoid confusion a convention was adopted to color the video connector yellow and the audio connector white (eventually white and red when stereo audio became common in TVs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A composite video signal was called &quot;composite&quot; because it was made up of 2 signals, a 'brightness' signal (luminance) and a 'color' signal (chrominance).  On a black-and-white TV or a monochrome monitor, only the brightness signal was relevant (this allowed the same composite signal to work on both color and black-and-white sets).  Just like you could eliminate distortion due to RF modulation by skipping the RF step and sending composite video directly, you could avoid distortion due to the 'composite' conversion by sending luminance and chrominance signals on 2 separate wires.  This is exactly what S-Video did (and also what Commodore did on the C64 and the 1702 monitor).  Commodore used RCA connectors on the 1702 monitor, while the S-Video standard defined a new connector which probably has a technical name but we just call it the S-Video connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chrominance signal in S-Video is itself made of 2 sub-signals that are combined into 1, and you can get a slight improvement in color quality by sending them on separate wires instead of combining them.  That's what component video does, but it goes back to using RCA connectors for each signal instead of inventing something new (like S-Video did).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each of these standards was related to the previous one and a common theme in all of them was to make 'luminance' or 'brightness' a separate signal to support monochrome / black-and-white monitors.  but color TVs don't actually use luminance and the 2 chrominance sub-signals directly, they use RGB (red/green/blue) to display colors.  So if you're generating RGB from your video chip you can avoid the entire process of converting to and from component by just sending RGB directly (there's another 2 signals called horizontal sync and vertical sync which are used to control screen refresh, so RGB will often have 5 connectors, or 4 if H-Sync and V-Sync are combined on 1 wire, or 3 if they are both combined with the green signal).  VGA is a common example of RGB (analog), but EGA and CGA qualify as RGB signals as well (albeit digital RGB).  It is also common to see RGB using BNC connectors (these are similar to the F connector used by cable TV, but only require a quarter-turn to secure instead of threading a nut onto a bolt like the F-connector does).  Modern TVs that have component inputs will sometimes allow you to reconfigure them as RGB inputs via a setup screen, which means that you will sometimes see RGB using RCA connectors also.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2016-08-10T15:25:56.090" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1355" PostTypeId="2" ParentId="1345" CreationDate="2016-08-10T17:44:28.203" Score="6" Body="&lt;p&gt;Here are the practical differences in the context of retrocomputing:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the lowest end is RF. The picture is pretty noisy and requires a TV with antenna screw terminals or coax, or a modulator to convert the signal to composite + audio. Audio and video is sent as a single signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next step up is composite which provides a much clearer picture by passing only video through the 1 signal channel. Audio goes through separate cable(s). Unfortunately, the picture quality improvement makes some color fringing more obvious.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next is S-Video which eliminates that color fringing by passing luma and chroma through 2 separate signal channels. (The more signal channels, the better quality.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next is component (3 signals), SCART (1-4 signals + audio), or VGA (usually 5 signals&lt;sup&gt;1&lt;/sup&gt;). These connectors (especially component and VGA) all support progressive scan to eliminate flicker (depending on the source signal), and component and VGA support higher resolutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The remaining connectors you listed are digital&lt;sup&gt;2&lt;/sup&gt;, which eliminates any remaining noise, jitter, and other analog artifacts. HDMI and DisplayPort both carry audio, while DVI does not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;The Playstation 2's optional VGA adapter uses only 3 signals in the VGA cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt;Depending on the connector, DVI cables can also carry analog signals.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2016-08-10T21:36:19.523" LastActivityDate="2016-08-10T21:36:19.523" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1356" PostTypeId="1" AcceptedAnswerId="1357" CreationDate="2016-08-10T19:54:26.687" Score="9" ViewCount="911" Body="&lt;p&gt;Saving the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/212/what-format-is-the-timex-sinclair-zx-spectrum-screen-scr-file/217#217&quot; title=&quot;screen&quot;&gt;screen&lt;/a&gt; on a Spectrum will typically get part of it obscured with the message “&lt;strong&gt;Start tape, then press any key.&lt;/strong&gt;”:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/dqte4.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dqte4.png&quot; alt=&quot;Screen with annoying tape prompt&quot;&gt;&lt;/a&gt;&#xA;How might one save the screen image from Sinclair BASIC &lt;em&gt;without&lt;/em&gt; it being corrupted in this way?&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2016-08-10T20:28:10.323" LastActivityDate="2018-01-04T11:53:56.590" Title="Saving the screen on a ZX Spectrum without the prompt" Tags="&lt;zx-spectrum&gt;&lt;screen&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1357" PostTypeId="2" ParentId="1356" CreationDate="2016-08-10T20:35:32.553" Score="16" Body="&lt;p&gt;One simple answer is to copy the screen to a buffer elsewhere in memory and save it from there.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 CLEAR 58455&#xA;... generate the screen image here ...&#xA;900 FOR n=0 TO 6911&#xA;910 POKE 58456+n, PEEK (16384+n)&#xA;920 NEXT n&#xA;930 SAVE &quot;image&quot; CODE 58456,6912&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's also possible to disable the prompt immediately before the SAVE, by changing the input / output functions for the &quot;K&quot; device: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;900 POKE 23734,111: REM suppress prompt&#xA;910 POKE 23736,20: REM don't wait for keypress&#xA;920 SAVE &quot;image&quot; SCREEN$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="1912" LastEditDate="2016-08-11T13:43:26.120" LastActivityDate="2016-08-11T13:43:26.120" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1358" PostTypeId="2" ParentId="1349" CreationDate="2016-08-10T22:59:47.067" Score="11" Body="&lt;p&gt;In the early micro-computer days, most software was made by one person who may not have had much of a development process and probably no formal training in programming. Hackers by Steven Levy discusses such things. I'm thinking particularly of the chapter(s) on On-line Systems founded by Ken and Roberta Williams.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2016-08-10T22:59:47.067" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1359" PostTypeId="1" AcceptedAnswerId="1363" CreationDate="2016-08-11T08:50:03.367" Score="13" ViewCount="1016" Body="&lt;p&gt;This is somewhat of a speculative question...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amiga's 1985 Original Chip Set is inherently a 16bit architecture (the data bus is 16bit, registers are 16bit, the blitter itself is 16 state machines running in parallel, and sees the memory as 16bit words). This architecture could have been trivially extended to 32bit, which would have given twice the bandwidth without touching the overall design of a machine running synchronously to the video color clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 32bit architecure arrived rather late in the form of the AA chipset (which also has a memory controller that do 2 cycles &quot;fast page&quot; RAM access, thus working, along with the 32 bit bus, at 4X of OCS's bandwidth).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a technical reason I can't see of why Commodore did not go immediately for such a trivial improvement? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[I'm interested in technical reasons, rather than strategic (e.g. lack of retro-compatibility) or considerations on Commodore's &quot;management&quot;. ] &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="11916" LastEditDate="2019-10-08T15:20:30.897" LastActivityDate="2019-10-08T15:20:30.897" Title="Why did Commodore not upgrade OCS straightforwardly to 32-bit architecture?" Tags="&lt;amiga&gt;&lt;chip&gt;&lt;architecture&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1360" PostTypeId="1" CreationDate="2016-08-11T09:30:27.927" Score="13" ViewCount="1632" Body="&lt;p&gt;The only very known difference is that Kickstart 1.3 fixes the silly bug that prevented Kickstart 1.2 to boot from a hard disk (a routine in the boot code uses A6 loaded with an incorrect library base, thus ending up being a NOOP and skipping AutoConfig'ed DOSNode's). However, are there other changes?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This question is only about Kickstart, not about differences on Workbench disks, which were bigger)&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="621" LastEditDate="2016-08-11T13:33:02.380" LastActivityDate="2018-12-22T00:15:03.357" Title="What exactly are the differences between Kickstart 1.2 and 1.3?" Tags="&lt;amiga&gt;&lt;amiga-kickstart&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1361" PostTypeId="2" ParentId="1360" CreationDate="2016-08-11T13:32:40.313" Score="4" Body="&lt;p&gt;Kickstart 1.3 changed the file system to avoid extra disk space waste &quot;due to the fact it could store only 488 bytes in any block of 512 bytes keeping 24 bytes for checksums.&quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/AmigaOS_versions#Kickstart.2FWorkbench_1.0.2C_1.1.2C_1.2.2C_1.3&quot; rel=&quot;nofollow&quot;&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.3 also added a new archive flag to the &lt;code&gt;protect&lt;/code&gt; command, a &lt;code&gt;PASSKEY&lt;/code&gt; parameter to the &lt;code&gt;LOCK DRIVE&lt;/code&gt; command, and the &lt;code&gt;Hidden (H), Script (S), Pure (P)&lt;/code&gt; parameters to the &lt;code&gt;PROTECT FILE&lt;/code&gt; command.&lt;a href=&quot;https://archive.org/stream/1991-kerkloh-tornsdorf-zoller-amigados-inside-and-out/1991-kerkloh-tornsdorf-zoller-amigados-inside-and-out_djvu.txt&quot; rel=&quot;nofollow&quot;&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those are the only main differences I can find between Kickstart 1.2 and 1.3.  There might be a few more but I doubt there was anything more substantial than the hard disk boot bugfix.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-11T16:09:47.380" LastActivityDate="2016-08-11T16:09:47.380" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1362" PostTypeId="2" ParentId="380" CreationDate="2016-08-11T16:56:16.923" Score="4" Body="&lt;p&gt;OS-wise, Kickstart 3.1 should have more optimized &lt;code&gt;graphics.library&lt;/code&gt; routines (rewritten to assembler), and some more tags for &lt;code&gt;VideoControl()&lt;/code&gt; to speed up remaking the display in some cases (eg. do not reload the palette for a screen, but use the previous' screen one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They probably were meant to convince developers to use OS functionality for games and multimedia titles for the CD32 (that debuted the new Kickstart), along with &lt;code&gt;lowlevel.library&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, Workbech (Execute, Information) is now font sensitive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A full list of Kickstart 3.1 changes is in the archive here: &lt;a href=&quot;http://www.gregdonner.org/workbench/wb_31chg.lha&quot; rel=&quot;nofollow&quot;&gt;http://www.gregdonner.org/workbench/wb_31chg.lha&lt;/a&gt; . The file lists many fixes for non-AA chipsets, with 39.x module version numbers... later versions than the ones in 3.0 maybe? (I cannot easily check module versions in 3.0)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Indeed, now that I think about it, I remember that Kickstart 3.1 may have been described back in the days as an improved 3.0, finally suitable for all machines (i.e. OCS and ECS too) as opposed to 3.0 which was never released for A500/A2000/A3000 and was never supported on non-AA machines.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2016-08-13T08:02:19.393" LastActivityDate="2016-08-13T08:02:19.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1363" PostTypeId="2" ParentId="1359" CreationDate="2016-08-11T19:27:17.737" Score="18" Body="&lt;p&gt;One could just as easily ask why it was not extended to 64 bits, or even wider. Well, if you ignore backwards-compatibility and cost, yes, it could have been.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll pretend we can ignore backwards-compatibility and concentrate on cost first. Making the data pathways 32 bit would immediately double the number of transistors, with a corresponding doubling of the die size and cost to manufacture. However, it's worse than that, because the blitter contains a barrel-shifter (so that it can blit to pixel rather than word boundaries) which scales with the &lt;em&gt;square&lt;/em&gt; of the number of bits, so that becomes four times bigger. There would also be the temptation to extend the video DAC from 4 bits per channel to 8, and the audio DAC from 8 bits to 16, which adds further cost. At least another 16 pins would also need to be added to the chip for the extra data lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In reality, increasing the die size and pin count makes the chip disproportionately more difficult and expensive to produce. The 68000 was a state of the art engineering marvel in that it was a huge DIP chip with 64 pins. Just reducing the pin count saved enough money that it was worth it for Motorola to make and sell the 68008 and other restricted-width chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Backwards-compatibility is however also important even though you dismiss it. The OCS chipset permits everything to be word-aligned, and so a replacement with a wider bus would have to handle misaligned accesses or stick to accessing in word-sized quantities. Intel x86 CPUs take the former approach, and pay for it in having a lot more transistors in its instruction decoder. AGA takes the latter approach and generally performs no better than OCS, except that there are some special high-bandwidth display modes that only work if the alignment is just right.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2016-08-11T19:27:17.737" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1364" PostTypeId="1" AcceptedAnswerId="1365" CreationDate="2016-08-11T20:01:40.270" Score="29" ViewCount="11702" Body="&lt;p&gt;In order to emulate some home consoles (Playstation 1/2, Sega Saturn/CD/32x, etc.) a dump of the system's BIOS is required to emulate the console.  Out of the Nintendo 64 emulators I have found online, none require the BIOS for ROM playback.  How can N64 emulators work without the system BIOS?  Is this because of the way the Nintendo 64 system was architected, or choices made by the author of the emulator?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, I should note that &lt;a href=&quot;http://www.cen64.com/&quot;&gt;CEN64&lt;/a&gt; emulator requires the &lt;code&gt;pifdata.bin&lt;/code&gt; BIOS file, but this is the first that I've ever heard of something like this.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-11T20:08:25.227" LastActivityDate="2016-08-12T07:16:08.073" Title="Why is a BIOS dump not required to emulate Nintendo 64 games in most modern emulators?" Tags="&lt;emulation&gt;&lt;nintendo&gt;&lt;nintendo-64&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1365" PostTypeId="2" ParentId="1364" CreationDate="2016-08-11T21:08:58.067" Score="31" Body="&lt;p&gt;The Nintendo 64 ROM is only 2KB in size and &lt;a href=&quot;http://ngemu.com/threads/does-n64-have-a-bios.120508/&quot;&gt;apparently easy to emulate&lt;/a&gt;. It seems to only &lt;a href=&quot;http://forums.cen64.com/viewtopic.php?f=12&amp;amp;t=10#p77&quot;&gt;check the validity of the inserted cartridge's ROM&lt;/a&gt; and set up a limited environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nintendo 64 cartridges are self-sufficient; they don't need any services provided by a common “BIOS”. In fact they even contain &lt;a href=&quot;https://en.wikipedia.org/wiki/Nintendo_64_programming_characteristics#Microcode&quot;&gt;the code&lt;/a&gt; used to drive the audio and graphics co-processors! Because the games are provided as ROMs on the cartridges, the console needs very little initialisation code — in the same way as its cartridge-based predecessors, and unlike CD or DVD based systems which need a system ROM to load the games off the medium (with a filesystem, encryption etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CEN64's use of the system ROM is in keeping with its accuracy: it aims to emulate all aspects of the hardware, down to the use of the original ROM instead of a high-level emulation.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2016-08-12T07:16:08.073" LastActivityDate="2016-08-12T07:16:08.073" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1366" PostTypeId="2" ParentId="1349" CreationDate="2016-08-12T00:47:28.760" Score="21" Body="&lt;p&gt;From a UK/Z80-based perspective:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;More than a few games were published using little more than a ZX Spectrum, a tape recorder, a copy of &lt;a href=&quot;http://freestuff.grok.co.uk/rom-dis/&quot;&gt;The Complete Spectrum ROM Disassembly&lt;/a&gt; borrowed from the public library and a taped copy of &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=0008091&quot;&gt;HiSoft Devpac&lt;/a&gt;. These, along with binders of handwritten notes and squared paper for graphics, and more cassette tapes than you can imagine made up the basic development system.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A few years later, the slightly more affluent solo developer might splurge on a &lt;a href=&quot;http://www.tatungeinstein.co.uk/&quot;&gt;Tatung Einstein&lt;/a&gt; or Amstrad PCW and develop using HiSoft Devpac 80 (or Kuma's Zen, or Arnor's Maxam II) under CP/M. This allowed far faster assembly from disc, access to proper printers, and including assembly module files. The Einstein, though a dismal commercial flop, had a spectacularly good &lt;a href=&quot;http://www.computinghistory.org.uk/articles/31.htm&quot;&gt;keyboard&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;em&gt;really&lt;/em&gt; well-off developer might have one of &lt;a href=&quot;http://www.glaister.com/History/Andy/Andy%20History.htm&quot;&gt;Andy Glaister&lt;/a&gt;'s &lt;a href=&quot;http://www.cpcwiki.eu/index.php/PDS_development_system&quot;&gt;Programmers Development System&lt;/a&gt;s. These were fast PCs or near-compatibles with parallel interface boards to each target computer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Revision control? Regression analysis? Nah …&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2016-08-12T00:47:28.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1367" PostTypeId="1" AcceptedAnswerId="1378" CreationDate="2016-08-12T18:30:17.057" Score="15" ViewCount="1617" Body="&lt;p&gt;An infamous &quot;feature&quot; of the 6502 is that the &lt;code&gt;JMP(abs)&lt;/code&gt; opcode will fetch the lower byte of the jump target from the address in the instruction, and fetch the upper byte of the jump target from the address whose lower byte is one higher than the address in the instruction, wrapping after FF.  Thus, &lt;code&gt;JMP ($10FF)&lt;/code&gt; will fetch the target address from $10FF and $1000 (rather than $10FF and $1100).  From my understanding, the 65C02 unconditionally inserts a cycle in which the ALU either increments or doesn't increment the upper byte of the address to fetch the PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that there is no other instruction that allows any kind of indirect memory operation from an absolute address, and given that the old program counter value will not be needed once the third byte of the instruction has been fetched, I'm curious how much circuitry was used to provide the instruction's unique operation sequence, and how that would compare with having &lt;code&gt;JMP(abs)&lt;/code&gt; sequenced like &lt;code&gt;JMP abs&lt;/code&gt; except that after the third cycle it would perform two more cycles which were just like the second and third (the second and fourth cycles would fetch a byte at PC, copy the bus to the data latch, and increment the PC; the third and fifth would fetch a byte at PC, and load PC from the data latch and the bus).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the 6502 and 65C02 manage to leverage other existing hardware in an interesting way so that their implementations of the instruction end up being surprisingly cheap, or is there something about the design of the 6502 and 65C02 that would make it impractical to change the PC mid-instruction (without e.g. risking having an incorrect PC value stored if an interrupt occurs at an inopportune moment).&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-10-16T21:49:51.847" Title="How are 6502 and 65C02 JMP(abs) processed internally" Tags="&lt;6502&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1368" PostTypeId="2" ParentId="1337" CreationDate="2016-08-12T19:39:16.493" Score="19" Body="&lt;p&gt;If you read &lt;a href=&quot;https://hackmii.com/2010/01/the-weird-and-wonderful-cic/&quot;&gt;this&lt;/a&gt;, you'll find that the CIC chip is actually a primitive 4-bit CPU with a small bit of ROM.  The chip in the NES and the chip in the cartridge attempt to communicate, if expected communication does not happen the CIC resets the system.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There is one chip inside the console, and one in every cartridge; the code inside the chip decides what to do based on a pin strap (the console one will be the “lock”, and the cartridge one will be the “key”). &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The two chips run off the same clock, and they run the same code, so&#xA;  they run in lockstep (sometimes they execute different codepaths, but&#xA;  the code is careful to take the same number of cycles on both paths in&#xA;  these cases).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The chips communicate over two wires, one from key to&#xA;  lock, one from lock to key. Both chips calculate what bits they will&#xA;  send, and what the other guy should send; if what they receive is not&#xA;  the same as what they should have received, they panic, and the lock&#xA;  chip resets the console.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;By cutting the correct pin on the NES console CIC chip (a well known trick), I think what happens is that it changes the CIC from &quot;lock&quot; mode to &quot;key&quot; mode, and the &quot;key&quot; mode doesn't issue any reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some unlicensed carts had another cartridge slot on the game itself and you were required to plug in a second game into the actual game cartridge, I suppose this just passed through the CIC from the second cartridge to the console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the &lt;a href=&quot;https://en.wikipedia.org/wiki/CIC_(Nintendo)&quot;&gt;Wikipedia article&lt;/a&gt; on this, the hardware in some unlicensed games sent a voltage spike to the CIC, stopping it from working, as well as the above pass-through method.  Tengen developed a chip to duplicate this functionality called the Rabbit Chip, and was sued by Nintendo.&lt;/p&gt;&#xA;" OwnerUserId="746" LastActivityDate="2016-08-12T19:39:16.493" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1369" PostTypeId="1" AcceptedAnswerId="1370" CreationDate="2016-08-12T19:48:59.303" Score="28" ViewCount="3666" Body="&lt;p&gt;Modern motion detection video game systems (Wii/Wii U, Xbox Kinect, PS Move, etc.) need sensors to read for motion and user input. However, when you play Duck Hunt (and some other games) on the NES, the light gun has no sensor. How does the game know where you are aiming, and if it doesn't need a sensor to track motion, why do modern game systems need them?&lt;/p&gt;&#xA;" OwnerUserId="2192" LastEditorUserId="621" LastEditDate="2016-08-12T19:57:20.863" LastActivityDate="2016-08-12T21:53:10.117" Title="How does the NES Light Gun work?" Tags="&lt;hardware&gt;&lt;nintendo&gt;&lt;nes&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1370" PostTypeId="2" ParentId="1369" CreationDate="2016-08-12T19:56:57.923" Score="32" Body="&lt;p&gt;The Zapper worked by receiving light through the photodiode at the front of the gun in the barrel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://mentalfloss.com/article/26875/how-did-duck-hunt-gun-work&quot; rel=&quot;noreferrer&quot;&gt;mental_floss&lt;/a&gt; has a really great description of what happens:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When you point at a duck and pull the trigger, the computer in the NES&#xA;  blacks out the screen and the Zapper diode begins reception. Then, the&#xA;  computer flashes a solid white block around the targets you’re&#xA;  supposed to be shooting at. The photodiode in the Zapper detects the&#xA;  change in light intensity and tells the computer that it’s pointed at&#xA;  a lit target block — in others words, you should get a point because&#xA;  you hit a target. In the event of multiple targets, a white block is&#xA;  drawn around each potential target one at a time. The diode’s&#xA;  reception of light combined with the sequence of the drawing of the&#xA;  targets lets the computer know that you hit a target and which one it&#xA;  was. Of course, when you’re playing the game, you don’t notice the&#xA;  blackout and the targets flashing because it all happens in a fraction&#xA;  of a second.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here's an image from Nintendo's &lt;a href=&quot;https://www.google.com/patents/US4813682&quot; rel=&quot;noreferrer&quot;&gt;Video target control and sensing circuit for photosensitive gun patent&lt;/a&gt; on how the hardware works:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4nwfo.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4nwfo.png&quot; alt=&quot;Zapper Patent Page 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More images on the entire process flow are also available in that patent link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is why if you pointed the Zapper at a white light you would automatically hit any target with perfect accuracy, at least in Duck Hunt.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-12T20:59:29.573" LastActivityDate="2016-08-12T20:59:29.573" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1372" PostTypeId="2" ParentId="1369" CreationDate="2016-08-12T21:53:10.117" Score="10" Body="&lt;p&gt;Quality light guns rely upon the fact that television sets not only used to draw the picture top to bottom, left to right, but they did so with timing controlled by the video source.  On black and white television sets, the electron beam would switch on and off almost instantly in response to changes in the input video signal; color sets needed to add a little delay for color processing, but depending upon the color encoding used (which varies between PAL, NTSC, SECAM, and other video formats) the delay would either be less than 1/100 of a scan line, very close to one scan line exactly, or very close to two scan lines exactly.  A quality light gun which saw a pulse of light could infer that the beam must have just passed the spot upon which the gun was focused; since it knew where the beam was at any moment, that would tell it where the gun was pointed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A limitation of this approach is that it only works well for parts of the screen that are fairly bright; the light gun won't be able to see parts of the screen that are dark.  Games with a light gun must ensure that any portion of the screen for which the gun needs to register a position will be bright enough to be detected.  Some games flash the entire screen white for that purpose; I'm not positive whether the NES flashes the ducks (versus the whole screen) because flashing a smaller area is less annoying than flashing a large one, or because it can't sense timing well enough to determine beam position and is simply looking for a bright flash, but some other light guns were capable of sensing where on the screen the gun was pointed.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-08-12T21:53:10.117" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1373" PostTypeId="1" AcceptedAnswerId="13167" CreationDate="2016-08-12T22:51:23.613" Score="7" ViewCount="407" Body="&lt;p&gt;In 1981, the &quot;&lt;a href=&quot;http://www.mocagh.org/loadpage.php?getgame=nemesis&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nemesis&lt;/a&gt;&quot; game was released for CP/M-based machines by Super Soft Inc., with the author attribution of Michael A. Pagels and Michael Q Hiller, and artist attribution of Diana J. Bush. According to the included documentation, a second version &quot;Nemesis II&quot; was created in 1982, the notable new feature being LAN multi-player support. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those not familiar, Nemesis is a text-based CRPG dungeon-crawler rogue-like, based on of the works of Tolkien in general, and D&amp;amp;D specifically; there was also a level editor called &quot;Dungeon Master&quot; though most releases of the game did not include the &quot;Dungeon Master&quot; component. This game was unique for it's real-time game play and full-screen map exploration characteristics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for a means of acquiring a verified working copy of Nemesis II. &lt;/p&gt;&#xA;" OwnerUserId="3237" LastEditorDisplayName="user6464" LastEditDate="2018-12-01T07:53:03.930" LastActivityDate="2019-12-25T04:50:08.630" Title="Where can I find &quot;Nemesis II&quot;, the sequel to &quot;Nemesis&quot;, an old CP/M game?" Tags="&lt;software&gt;&lt;cp-m&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1374" PostTypeId="2" ParentId="459" CreationDate="2016-08-13T04:19:03.410" Score="2" Body="&lt;p&gt;Your Apple ][ production number is low, mine is first half of 1979 production and is A2S1-22365.  I have seen A2S1 serials as high as 65,515, with a mid (week 20) 1980 production motherboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple continued to sell the Apple ][ while making the plus, they didn't stop ][ production until early 1981.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Highest A2S2 serial number I've found A2S2-588366, week 5 1983 production (that's after the introduction of the //e in January, 1983), and that doesn't include A2S3 systems (Belll &amp;amp; Howell ][plus).&lt;/p&gt;&#xA;" OwnerUserId="3244" LastEditorUserId="3244" LastEditDate="2016-08-13T04:24:33.297" LastActivityDate="2016-08-13T04:24:33.297" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1376" PostTypeId="2" ParentId="1152" CreationDate="2016-08-13T14:41:33.400" Score="3" Body="&lt;p&gt;Have you considered a self contained Boot program called &quot;Active@&quot;?&#xA;I use this.  It will install as it's own OS on a flashdrive so long as the motherboard can see the USB flashdrive.  A cut down version of Windows comes up and you can make images of any internal drives from there.  It's a great comfort when things go awry.. You simply rewrite the drive and you're back with everything still intact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might need a friend's computer to write the flashdrive for you to begin with.&lt;/p&gt;&#xA;" OwnerUserId="3252" LastActivityDate="2016-08-13T14:41:33.400" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1377" PostTypeId="1" CreationDate="2016-08-14T05:49:00.903" Score="4" ViewCount="1823" Body="&lt;p&gt;I have an Atari 2600 that does not appear turn on at all. I bought it from some guy in a garage sale. I believe he said it stopped working after a storm. I bought a new power supply in case the console had messed up the power supply (I thought the volt readings were off a volt or two).There is no picture or sound with and without a game on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cracked the atari open to look at the electronics. The main board/ motherboard (revision B) seems fine while the controller board seems suspicious. The electrolytic capacitors look fine in comparison to a juicy looking (what I believe to be) a voltage regulator. I found a link for it &lt;a href=&quot;https://www.fairchildsemi.com/datasheets/LM/LM7805.pdf&quot; rel=&quot;nofollow&quot;&gt;here.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am confused about the power circuity layout though. You have power from the power supply, going into the motherboard while going up to the controller board. I guess this means the motherboard is always on when power is applied? Anyways, I think everything on the controller board is grounded to regulator. Thanks for your time!&lt;/p&gt;&#xA;" OwnerUserId="3255" LastEditorUserId="3255" LastEditDate="2016-08-16T06:12:05.807" LastActivityDate="2016-08-16T20:49:25.843" Title="Atari 2600 shows no signs of life when power is applied?" Tags="&lt;atari&gt;&lt;atari-2600&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1378" PostTypeId="2" ParentId="1367" CreationDate="2016-08-14T07:40:45.300" Score="14" Body="&lt;p&gt;I can't answer the question &quot;why doesn't the 6502/65C02 use the PC to do the indirection to execute &lt;code&gt;JMP (abs)&lt;/code&gt;&quot;, but I can answer some of the other points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://visual6502.org/&quot; rel=&quot;noreferrer&quot;&gt;Visual6502&lt;/a&gt; is the best site to find out about the inner workings of the 6502. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll be using the &quot;Random Control Logic&quot; &lt;a href=&quot;http://visual6502.org/wiki/index.php?title=6502_datapath&quot; rel=&quot;noreferrer&quot;&gt;signal names&lt;/a&gt; as used in the simulator, which are the same names used in &lt;a href=&quot;http://visual6502.org/wiki/index.php?title=Hanson%27s_Block_Diagram&quot; rel=&quot;noreferrer&quot;&gt;Hanson's block diagram&lt;/a&gt;. If you rotate the diagram by 90 degrees, it roughly corresponds to the silicon (actual size used on silicon is different, so take it with a grain of salt). The block diagram is sufficient to understand what is going on, and easier to read than the silicon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the ROM decoder, I'll use the simulator names, which are different from the &lt;a href=&quot;http://visual6502.org/wiki/index.php?title=6507_Decode_ROM&quot; rel=&quot;noreferrer&quot;&gt;6507 mnemonics&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can follow both types of signals by adding a &lt;code&gt;loglevel&lt;/code&gt; of at least 6 to the &lt;a href=&quot;http://www.visual6502.org/JSSim/expert.html?graphics=f&amp;amp;loglevel=6&quot; rel=&quot;noreferrer&quot;&gt;simulator URL&lt;/a&gt;, or by pressing &lt;code&gt;Trace more&lt;/code&gt; often enough in the expert simulator mode. Decoding has &quot;don't care&quot; values, so some of the signals may be accidental.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How do &lt;code&gt;JMP abs&lt;/code&gt; and &lt;code&gt;JMP (abs)&lt;/code&gt; work internally?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(What circuitry is used? Is the implementation cheap?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, instructions are executed through several &lt;a href=&quot;http://www.visual6502.org/wiki/index.php?title=6502_State_Machine&quot; rel=&quot;noreferrer&quot;&gt;states&lt;/a&gt;  (numbered &lt;code&gt;T0&lt;/code&gt; to &lt;code&gt;T6&lt;/code&gt;). The 6502 has a kind of two-stage pipeline, where the next instruction is already fetched and decoded while the last stage(s) of the previous instruction still executes. In &lt;code&gt;T0&lt;/code&gt;, the next opcoded is prepared to be fetched, and in &lt;code&gt;T1&lt;/code&gt;, the opcode is decoded, and the next byte after the opcode is prepared to be fetched. This is why every instruction execution ends with &lt;code&gt;T0&lt;/code&gt; and &lt;code&gt;T1&lt;/code&gt;, and starts with &lt;code&gt;T2&lt;/code&gt; if more than two cycles are needed. (I'd assume &lt;code&gt;T0&lt;/code&gt; is also the phase where the 6502 checks for interrupts, and replaces the opcode with a &lt;code&gt;BRK&lt;/code&gt; if it finds one, but I didn't verify this).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So beginning in the &lt;code&gt;T2&lt;/code&gt; cycle of &lt;code&gt;JMP abs&lt;/code&gt;, the low byte of the destination address is fetched. It is output on the DB bus (&lt;code&gt;DL/DB&lt;/code&gt;), then stored in the the B input register of the ALU (&lt;code&gt;DB/ADD&lt;/code&gt;), added to a zero (&lt;code&gt;SUMS&lt;/code&gt;, &lt;code&gt;0ADD&lt;/code&gt;) from the A input, and finally temporarily stored in the adder hold register. This is necessary because the &lt;code&gt;T0&lt;/code&gt; cycle already loads the high byte of the destination address onto the ADH bus, and both must be stored in PCL and PCH at the same time (&lt;code&gt;ADD/ADL&lt;/code&gt;, &lt;code&gt;ADL/PCL&lt;/code&gt; and &lt;code&gt;DL/ADH&lt;/code&gt;, &lt;code&gt;ADH/PCH&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For &lt;code&gt;JMP (abs)&lt;/code&gt;, the first cycles are very similar (the only different ROM signal is the absence of &lt;code&gt;T2‑jmp‑abs&lt;/code&gt;), but in &lt;code&gt;T3&lt;/code&gt;, the operand address is only output onto the address bus and not stored in the PC. The low byte of the final destination address that is fetched this way is eventually again stored in the B input register. But before that, the old value of the B input register is incremented by 1 using the carry, and this is used as the address of the high byte of the final destination address. Overflow for that is not handled, which explains the &quot;infamous wrapping effect&quot;. The final transfer to the PC works similarly as for &lt;code&gt;JMP abs&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So both jumps use the datapath circuitry just like every other instruction, it's neither particularly cheap nor expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How could one test a &lt;code&gt;JMP (abs)&lt;/code&gt; implementation using the PC?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Is there anything that would prevent it from working?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could modify the decode ROM and decode logic in the simulator. The simulator uses &lt;a href=&quot;http://visual6502.org/wiki/index.php?title=The_ChipSim_Simulator&quot; rel=&quot;noreferrer&quot;&gt;three files&lt;/a&gt; to store the silicon data in a simple format, which are available on &lt;a href=&quot;https://github.com/trebonian/visual6502&quot; rel=&quot;noreferrer&quot;&gt;github&lt;/a&gt;. There are already special signals &lt;code&gt;T3-jmp&lt;/code&gt; and &lt;code&gt;T4-jmp&lt;/code&gt; for the &quot;indirect&quot; phase, and you may need an additional signal (or re-use one of those two) to ensure loading of the PC in the &lt;code&gt;T2&lt;/code&gt; phase in absence of &lt;code&gt;T2-jmp-abs&lt;/code&gt;. And of course you need to rewire the &lt;code&gt;T3&lt;/code&gt; and &lt;code&gt;T4&lt;/code&gt; phase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll likely need some more space for transistors, so a tool to create horizontal or vertical space (increment all coordinates greater than some threshold) in the data files would be helpful.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2016-08-15T11:50:07.140" LastActivityDate="2016-08-15T11:50:07.140" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1379" PostTypeId="1" CreationDate="2016-08-15T05:59:57.377" Score="8" ViewCount="508" Body="&lt;p&gt;First off, I know CRTs are dangerous and I have opened and discharged multiple CRT displays before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've got an G50 monitor that shows a picture for a second or two and then goes blank. If you power cycle it you again get a picture for around 2 seconds before it disappears. To me this suggests that it's probably a bad old capacitor (though I'm no expert) so I'd like to get inside the thing to look for anything obvious.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's two screws in the bottom of the case that were easy to remove, but there seem to be some clips at the top, and there are two slots perhaps 10mm long in the top of the rear housing. I did read somewhere that there was some specialised tool to open this up, but I can't find much information about that. Does anybody have an idea of how to remove the rear housing? &lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2021-05-01T18:53:53.010" Title="How can I open an IBM G50 CRT monitor?" Tags="&lt;repair&gt;&lt;crt-monitor&gt;&lt;ibm&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1380" PostTypeId="1" AcceptedAnswerId="1392" CreationDate="2016-08-15T08:25:20.510" Score="4" ViewCount="769" Body="&lt;p&gt;While playing on my SNES, I almost yanked my controller out of my console due to the cable being so short. I went on Amazon to buy a &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B005WMIR4C&quot; rel=&quot;nofollow&quot;&gt;cable extender&lt;/a&gt;, and then started reading on different forums that increasing the length of your controller's cable can introduce a small amount of input lag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can this lag (in milliseconds) be modeled as a function of cable length (in meters)? If I have a cable that is &lt;em&gt;x&lt;/em&gt; meters long, can I predict with reasonable suspicion that the input lag will be &lt;em&gt;y&lt;/em&gt; milliseconds? If so, what is this equation/relationship?&lt;/p&gt;&#xA;" OwnerUserId="2192" LastActivityDate="2016-08-16T14:34:05.867" Title="Can input lag be modeled as a function of controller cable length for SNES?" Tags="&lt;snes&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1381" PostTypeId="2" ParentId="1380" CreationDate="2016-08-15T11:47:28.803" Score="0" Body="&lt;p&gt;There are too many variables to give an accurate model in a domestic setting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The time taken for a signal to pass through a copper wire is dependent upon the rate of propagation of electrons through the conduction band of the copper crystal structure.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This rate is affected by various factors including temperature and grain boundaries.  This actually changes (a very small amount) through dislocation generation caused by twisting and untwisting the cable (Copper has a Face-Centred Cubic structure).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes there will be a delay introduced by lengthening the cable, there are many real-world uses where cable lengths are deliberately adjusted to synchronize pulses.  e.g. Athletic event starting blocks and demolition explosive detonation.  However, the delay will be miniscule, probably undetectable in play and impossible to model.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-08-15T11:47:28.803" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1382" PostTypeId="5" CreationDate="2016-08-15T13:02:47.353" Score="0" Body="&lt;p&gt;For Cathode Ray Tube, as opposed to flat-screen, monitors and their use in computers&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-08-15T13:02:47.353" LastActivityDate="2016-08-15T13:02:47.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1383" PostTypeId="4" CreationDate="2016-08-15T13:02:47.353" Score="0" Body="For questions regarding Cathode Ray Tube monitors" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-08-15T13:02:47.353" LastActivityDate="2016-08-15T13:02:47.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1384" PostTypeId="5" CreationDate="2016-08-15T13:06:45.873" Score="0" Body="&lt;p&gt;IBM (International Business Machines) is a company founded in 1911 in the USA.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A manufacturer of computers, processors and peripherals from the earliest days of electronic computing.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-08-15T13:06:45.873" LastActivityDate="2016-08-15T13:06:45.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1385" PostTypeId="4" CreationDate="2016-08-15T13:06:45.873" Score="0" Body="For questions regarding the products of IBM, International Business Machines." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-08-15T13:06:45.873" LastActivityDate="2016-08-15T13:06:45.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1386" PostTypeId="2" ParentId="1380" CreationDate="2016-08-15T14:55:29.523" Score="3" Body="&lt;p&gt;An electrical signal travels through a wire at about 95% of the speed of light, and for most purposes you can approximate it as one nanosecond per foot.  So, a 10-foot extension will add 10 nanoseconds of delay (0.00000001 milliseconds).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wouldn't worry about it.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2016-08-15T14:55:29.523" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1387" PostTypeId="1" CreationDate="2016-08-15T16:59:27.273" Score="11" ViewCount="620" Body="&lt;p&gt;For an OCS Amiga (Workbench 1.2 or 1.3) I remember sometimes after a Guru Meditation/software failure reboot, Workbench would be restricted to NTSC size displays (200 non-interlaced vertical lines in stead of 256) until the next reboot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was an occasional thing, the only pattern I could see was that it was typically after some crash. Has anybody got an idea why that might be?&lt;/p&gt;&#xA;" OwnerUserId="141" LastActivityDate="2016-08-18T16:02:28.573" Title="Why would a PAL Amiga sometimes start up in NTSC display mode?" Tags="&lt;amiga&gt;&lt;amiga-workbench-1.3&gt;&lt;ntsc&gt;&lt;pal&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1388" PostTypeId="2" ParentId="1380" CreationDate="2016-08-15T17:36:27.733" Score="4" Body="&lt;p&gt;The way the NES and SNES controllers work is that the console sends a signal instructing the controller to remember the current state of the buttons. Then it reads the button values out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So increasing the delay in the cable would actually reduce the average input lag (up to the point where things break) by reading the buttons slightly later (and then processing the results at the same time). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference will be negligable though. Things are likely to stop working completely before you see any perceptable difference in input lag.&lt;/p&gt;&#xA;" OwnerUserId="499" LastActivityDate="2016-08-15T17:36:27.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1389" PostTypeId="1" AcceptedAnswerId="1390" CreationDate="2016-08-15T21:02:16.623" Score="8" ViewCount="758" Body="&lt;p&gt;I'm trying to build the recently released &lt;a href=&quot;https://github.com/infinity-gbc/infinity&quot;&gt;Infinity Game Boy Color source code&lt;/a&gt; on my macOS El Capitan box.  The original development environment was a Windows box, and I'm trying to modify the build scripts to work on Mac/Unix.  I'm having trouble finding the source or a Unix binary of one of the project's dependencies, TASM v3.2.  The link in the project's readme directs me to a &lt;a href=&quot;http://www.ticalc.org/archives/files/fileinfo/250/25051.html&quot;&gt;win32 binary&lt;/a&gt;, and I can't seem to find a Unix binary on ticalc.org.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was TASM ever available for Unix or macOS?  Is the source code or any Unix binaries still available?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="79" LastEditDate="2016-08-16T07:00:57.027" LastActivityDate="2017-01-19T00:22:37.617" Title="Was The Telemark Assembler available for the Unix or Mac Environments?" Tags="&lt;apple-macintosh&gt;&lt;assembly&gt;&lt;unix&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1390" PostTypeId="2" ParentId="1389" CreationDate="2016-08-15T21:35:19.050" Score="7" Body="&lt;p&gt;According to the release notes which accompany version 3.2, the Telemark Assembler was available for Linux starting with version 3.1. This included source code, which I'd imagine shouldn't be too hard to port to macOS. I get the impression this was only provided to registered users though, so obtaining it now may be rather difficult! (As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1389/was-the-telemark-assembler-available-for-the-unix-or-mac-environments/1390#comment2136_1390&quot;&gt;pointed out&lt;/a&gt; by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/621/jal&quot;&gt;JAL&lt;/a&gt;, the original download page explicitly mentions that &lt;a href=&quot;http://web.archive.org/web/20151002142848/http://home.comcast.net/~tasm/tasmdnl.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;the shareware version is for DOS&lt;/a&gt; — although version 3.2 no longer runs under DOS, it's a 32-bit Windows binary.) Contacting the author directly might be worth trying; as JAL found out though, the listed ACM address &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1389/was-the-telemark-assembler-available-for-the-unix-or-mac-environments/1390#comment2135_1390&quot;&gt;no longer works&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The binary included in release 3.2 runs fine with Wine, so that may be one option to get a build running on a Mac. The Infinity source code builds its own instruction set table (&lt;code&gt;99&lt;/code&gt;, see &lt;a href=&quot;https://github.com/infinity-gbc/infinity/blob/c6e30272549723780792e9f10fa708d8b7345029/resource/eve/tasm99.tab&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;tasm99.tab&lt;/code&gt;&lt;/a&gt; — I'm assuming the full file is generated during the build), so replacement assemblers such as &lt;a href=&quot;https://github.com/kyleedwardsny/bergen&quot; rel=&quot;nofollow noreferrer&quot;&gt;bergen&lt;/a&gt; (which claims to be a Telemark-compatible Z80 assembler) won't work unless they support the Telemark table format.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-08-16T07:10:18.870" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1391" PostTypeId="2" ParentId="1389" CreationDate="2016-08-16T08:37:13.137" Score="5" Body="&lt;p&gt;I found a port of version 3.2 for the Macintosh  (OS 10.6+, Intel, 1998 version for OS9 / Classic) called &lt;a href=&quot;http://www.hinton-instruments.co.uk/archive/macide.html&quot; rel=&quot;nofollow&quot;&gt;OrgAsm&lt;/a&gt;, binary only.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2016-08-16T13:18:52.410" LastActivityDate="2016-08-16T13:18:52.410" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1392" PostTypeId="2" ParentId="1380" CreationDate="2016-08-16T12:12:44.550" Score="7" Body="&lt;p&gt;The possible signal lag introduced due to pure cable length is definitely neglectible due to the signals travelling at (close to, for any practical purposes) the speed of light through the cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What can possibly happen though, and is a much more important practical problem on digital signal lines are problems due to&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Changed input impedance of the line leading to improper termination&lt;/li&gt;&#xA;&lt;li&gt;Signal reflection at the line ends leading to a partial cancellation of the signals with the reflected signal&lt;/li&gt;&#xA;&lt;li&gt;And the same (partial reflection / cancellation of the signals) can happen at the connection between the actual line and the cable extension. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Digital signal lines are normally (don't know if it's the case in the SNES controllers) terminated with a resistor that aligns with the cable impedance (which is mainly determined by the length of wire) to cancel out signal reflection. Playing around with the values of the line termination resistors or a slight change of the cable length can help a lot, should you experience problems.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2016-08-16T14:34:05.867" LastActivityDate="2016-08-16T14:34:05.867" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1393" PostTypeId="1" CreationDate="2016-08-16T14:04:52.307" Score="6" ViewCount="225" Body="&lt;p&gt;Has anyone out there managed to load a PLATO PHM 3122 cartridge by Control Data into the &lt;a href=&quot;http://js99er.net/&quot; rel=&quot;nofollow&quot;&gt;JS99'er&lt;/a&gt; emulator?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That way a user could place all of the PLATO Lesson Disks on a cloud location (e.g., OneDrive) and have access to one of the better home computer teaching &amp;amp; review applications that was ever available for a stand-alone home computer!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having access to a TI99/4A emulator through the internet may be a unique method of re-introducing the more than 3,000,000 original TI99/4A purchasers and users to a beloved retro home computer!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Discussing its availability on social media like Facebook could go a long way towards its revival.&lt;/p&gt;&#xA;" OwnerUserId="3260" LastEditorUserId="6576" LastEditorDisplayName="user12" LastEditDate="2021-02-28T13:01:42.537" LastActivityDate="2021-02-28T13:01:42.537" Title="PLATO &amp; JS99'er" Tags="&lt;programming&gt;&lt;plato&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1394" PostTypeId="1" CreationDate="2016-08-16T17:43:36.007" Score="13" ViewCount="1029" Body="&lt;p&gt;Continuing with my quest to build the Infinity Game Boy Color &lt;a href=&quot;https://github.com/infinity-gbc/infinity&quot; rel=&quot;noreferrer&quot;&gt;source code&lt;/a&gt;, I am trying to build the Unix source of &lt;a href=&quot;https://sourceforge.net/projects/gbdk/files/gbdk/2.1.5/&quot; rel=&quot;noreferrer&quot;&gt;GBDK 2.1.5&lt;/a&gt; on my macOS El Capitan machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trying to &lt;code&gt;make&lt;/code&gt; the files in the &lt;code&gt;lib&lt;/code&gt; directory gives me this error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;➜  lib git:(master) ✗ make&#xA;../bin/lcc -Wa-l -c -o floor.o floor.s&#xA;../bin/lcc: ../bin/lcc: cannot execute binary file&#xA;make: *** [floor.o] Error 126&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Running &lt;code&gt;file&lt;/code&gt; on the &lt;code&gt;lcc&lt;/code&gt; binary reveals that an ancient version of the lcc compiler was bundled with the 2.1.5 release:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;➜  lib git:(master) ✗ file ../bin/lcc&#xA;../bin/lcc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Ok, this won't work on my machine.  I'll attempt to fix this by switching all references to &lt;code&gt;lcc&lt;/code&gt; to &lt;code&gt;clang&lt;/code&gt; in the Makefile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next dependency is a tool called &lt;code&gt;maccer&lt;/code&gt;, Michael Hope's macro preprocessor.  This tool has the same issue as lcc:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;➜  lib git:(master) ✗ make&#xA;../bin/maccer -o floor.s floor.ms&#xA;../bin/maccer: ../bin/maccer: cannot execute binary file&#xA;make: *** [floor.s] Error 126&#xA;➜  lib git:(master) ✗ file ../bin/maccer&#xA;../bin/maccer: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I can't for the life of me find the source of this, but I did find a modified version called &lt;a href=&quot;http://gendev.spritesmind.net/page-macX.html&quot; rel=&quot;noreferrer&quot;&gt;MaccerX&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Question&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Is MaccerX a viable alternative to the original maccer?  Has anyone successfully built GBDK 2.1.5 on a modern platform with a modern compiler?  I expect to run into more of these issues as I attempt to use SDK tools from 15+ years ago.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well I found &lt;a href=&quot;https://sourceforge.net/projects/gbdk/files/maccer/0.25/&quot; rel=&quot;noreferrer&quot;&gt;maccer&lt;/a&gt;, it was in the same GBDK repo.  Looking to see if I can make a native build now.  I'm not sure the maccer source and be built without doc++ (whatever that is), so looking into that now.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-16T20:31:56.867" LastActivityDate="2017-05-11T14:33:21.920" Title="How can I build Gameboy Development Kit 2.1.5 on a modern Unix/Mac platform?" Tags="&lt;software&gt;&lt;apple-macintosh&gt;&lt;game-boy&gt;&lt;software-development-kit&gt;&lt;unix&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1395" PostTypeId="2" ParentId="1326" CreationDate="2016-08-16T18:36:58.643" Score="13" Body="&lt;p&gt;Classic MacOS uses &lt;code&gt;:&lt;/code&gt; as a directory separator.  &lt;code&gt;/&lt;/code&gt; doesn't have a special meaning and is a legal filename character. Additionally, a leading &lt;code&gt;:&lt;/code&gt; is a relative path, not an absolute path.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MacOS            Unix&#xA;-----            ----&#xA;file.c           file.c&#xA;Volume:          /Volume&#xA;Volume:file.c    /Volume/file.c&#xA;:folder:file.c   folder/file.c&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3261" LastActivityDate="2016-08-16T18:36:58.643" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1396" PostTypeId="2" ParentId="1377" CreationDate="2016-08-16T20:49:25.843" Score="5" Body="&lt;p&gt;If the power led doesn't turn on, your first suspect is the voltage regulator, as you have spotted. It's a very common one, 7805, easily found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For any repairment attempt, however, it is very advisable to have, at least, a multimeter. With it, you can see whether the 7805 receives voltage input (left pin), whether this voltage is enough for the regulator to work (must be greater than 7V), and whether the output pin generates a proper 5V power supply.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-08-16T20:49:25.843" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1397" PostTypeId="2" ParentId="1206" CreationDate="2016-08-17T17:14:01.727" Score="10" Body="&lt;p&gt;Usually when you see that message is because the metadata for the file isn't set correctly; this is typical if you're looking at MacOS Classic files that are not on a HFS filesystem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Brief Information on Classic MacOS Filesystems&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike Windows or UNIX or most other operating systems that I've used over the years, MacOS tends to pack quite a bit of data into a single apparent file; there is a separation from the actual application code from &quot;resources&quot; such as icons, sounds, etc. How this was achieved on MacOS was the HFS filesystem would split every file into resource (e.g. icons) and data forks (e.g. code). This detail is well hidden from users (as was the intent) and not readily visible as there was no official command line for the Mac and thus it was harder to poke around to find.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Along with the two forks, the MacOS also had a bit more intelligence about what files were and what application was needed to run them. This feature was achieved by every file indicating a &lt;code&gt;type&lt;/code&gt; and a &lt;code&gt;creator&lt;/code&gt;. The idea was that if you had a word processor document on a disk, the file could tell the computer that it needed (say) Microsoft Word to open/edit the file. As such, when you installed an application, it registered itself with the OS to indicate that it could handle files with a particular signature. While this would appear frustrating to more hardcode computer users, it did make things a bit easier for the novice. Windows achieved this with file extensions (e.g. &lt;code&gt;.doc&lt;/code&gt;, &lt;code&gt;.xls&lt;/code&gt;, etc.), but that was easier to fix since you could just rename the file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what about applications? Their type was &lt;code&gt;APPL&lt;/code&gt; which told the MacOS that it was an application and attempt to load and execute the file directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So How Do I Get This To Run?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully the resource fork is still preserved in your Classilla application (usually a hidden directory when MacOS was mounting a non-HFS filesystem). But ignoring that, it is probably just that somehow the &lt;code&gt;Type&lt;/code&gt; and &lt;code&gt;Creator&lt;/code&gt; of your application is corrupt or missing. It should be &lt;code&gt;APPL&lt;/code&gt; and &lt;code&gt;MOZZ&lt;/code&gt;, respectively. The only way that I'm aware of how to change these fields is to use &lt;a href=&quot;https://en.wikipedia.org/wiki/ResEdit&quot;&gt;ResEdit&lt;/a&gt; which was a tool from Apple to tweak all those hidden bits of HFS files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the fix should be:&#xA;1. Open ResEdit.&#xA;2. Open the Classilla file.&#xA;3. File-&gt;Get File Info.&#xA;4. Set the Type and Creator as noted above.&#xA;5. Save.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That should at least get it to be recognized as an application. Now if the resource fork is missing, it &lt;em&gt;may&lt;/em&gt; still work, but no guarantees. Re-download!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;good luck...&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-08-17T17:14:01.727" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1398" PostTypeId="1" AcceptedAnswerId="1574" CreationDate="2016-08-18T14:56:23.010" Score="15" ViewCount="536" Body="&lt;p&gt;I'm troubleshooting a dead Apple IIe enhanced, and I'm having trouble finding documentation on testing the 65C02 (as opposed to the 6502). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, I've found using a logic probe that pin 6 (NMI, active low) is not connected. It seems like that should be high during normal operation.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="3290" LastEditDate="2020-05-01T07:24:10.113" LastActivityDate="2020-05-01T07:24:10.113" Title="What are the normal signals on a 65C02 in an Apple IIe?" Tags="&lt;apple-ii&gt;&lt;6502&gt;&lt;apple&gt;&lt;65c02&gt;&lt;troubleshooting&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1400" PostTypeId="2" ParentId="1387" CreationDate="2016-08-18T16:02:28.573" Score="8" Body="&lt;p&gt;At startup, the Amiga used a timing routine to check the frequency of the AC power supply, and start in PAL (50 Hz AC) or NTSC (60 Hz AC) appropriately. Unfortunately, the detection was buggy, and sometimes 50 Hz was wrongly identified as 60.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many Europeans would have Declan McArdle's NoPALReset in their s:startup-sequence to avoid this. I think the problem went away with Fat Agnus-level hardware and later.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2016-08-18T16:02:28.573" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1401" PostTypeId="1" AcceptedAnswerId="2168" CreationDate="2016-08-19T09:20:41.367" Score="11" ViewCount="534" Body="&lt;p&gt;Was there ever an &lt;em&gt;official explanation&lt;/em&gt; on why AmigaOS 2.0 offered two similar GUI gadget toolkits, in the form of BOOPSI and GadTools? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, to put it in another way, why were not GadTools gadgets simply offered as BOOPSI classes?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2017-01-26T15:43:52.587" Title="Official explanation for offering both BOOPSI and GadTools?" Tags="&lt;amiga&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1402" PostTypeId="1" AcceptedAnswerId="16946" CreationDate="2016-08-20T18:53:40.763" Score="16" ViewCount="1938" Body="&lt;p&gt;I am a owner of Atari ST, and I would like to know software and tools used for the programmers for this computer to program mainly video games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;IDE used&lt;/li&gt;&#xA;&lt;li&gt;Language (I think it was Basic, but I am not sure)&lt;/li&gt;&#xA;&lt;li&gt;Websites of interest and running currently, because I have seen multiples dead links.&lt;/li&gt;&#xA;&lt;li&gt;Method to run these programs once has been developed (I am thinking in the own atari or in other plaftorm).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="3276" LastEditorUserId="824" LastEditDate="2018-07-12T07:17:18.047" LastActivityDate="2020-11-16T21:00:30.630" Title="Tool used to develop videogames with an Atari ST" Tags="&lt;atari&gt;&lt;software-development&gt;&lt;atari-basic&gt;&lt;software-development-kit&gt;" AnswerCount="6" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="1403" PostTypeId="1" AcceptedAnswerId="1408" CreationDate="2016-08-21T00:40:10.213" Score="6" ViewCount="733" Body="&lt;p&gt;In modern software development, it is a common practice to include some kind of analytics tracking software to see how customers are using your software, what a typical user flow of the application is, and if any issues with the software are encountered.  This luxury was not always available, especially for software on systems not connected to or predating the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How were analytics gathered on legacy applications?  Did software development companies use tools like registration and surveys to gather information from their customers in order to gather information on how to improve their software?&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-08-29T13:53:11.763" Title="How were analytics gathered on software built for retrocomputing platforms?" Tags="&lt;software&gt;&lt;software-development&gt;&lt;analytics&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1404" PostTypeId="5" CreationDate="2016-08-21T00:41:19.573" Score="0" Body="&lt;p&gt;Analytics is the collection and discovery of meaningful patterns in data.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-21T10:34:44.100" LastActivityDate="2016-08-21T10:34:44.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1405" PostTypeId="4" CreationDate="2016-08-21T00:41:19.573" Score="0" Body="for questions about analytics on in retrocomputing software" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-21T10:34:46.937" LastActivityDate="2016-08-21T10:34:46.937" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1406" PostTypeId="1" AcceptedAnswerId="1407" CreationDate="2016-08-21T06:32:20.190" Score="4" ViewCount="904" Body="&lt;p&gt;I have several LC PDS network cards for my older LC's and they all have a socket which I assume is for an FPU... Given that I might be able to obtain said FPU for a few bucks, does anyone know what kind of FPU these things take?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The card in question is an Asante Tech MCLC Rev. A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's similar to the one listed here: &lt;a href=&quot;http://www.recycledgoods.com/asante-mclc-nubus-ethernet-card-rev-6-with-fpu-socket-for-apple-computer.html&quot; rel=&quot;nofollow&quot;&gt;http://www.recycledgoods.com/asante-mclc-nubus-ethernet-card-rev-6-with-fpu-socket-for-apple-computer.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also what advantage would putting an FPU on a network card serve?&lt;/p&gt;&#xA;" OwnerUserId="2187" LastEditorUserId="2187" LastEditDate="2016-08-22T02:42:26.020" LastActivityDate="2016-08-30T21:07:15.930" Title="Why do mac LC network cards take an FPU?" Tags="&lt;hardware&gt;&lt;apple-macintosh&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1407" PostTypeId="2" ParentId="1406" CreationDate="2016-08-21T08:07:13.660" Score="7" Body="&lt;p&gt;The &lt;a href=&quot;http://www.asante.com/downloads/legacy/macconmlrb.pdf&quot;&gt;Asante Ethernet Card Installation guide&lt;/a&gt; states that the FPU could be only used on LC and LCII computers, and not on computers which already had a math co-processor or FPU (p. 2-9). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is only one PDS slot on the LC, so as &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_LC&quot;&gt;wikipedia confirms&lt;/a&gt;, the reason for the FPU socket on the network card was to allow both FPU and network upgrades at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, you should get an FPU that fits your Mac, if your Mac doesn't have one already. The FPU doesn't help the network card itself to operate.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-08-21T08:07:13.660" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1408" PostTypeId="2" ParentId="1403" CreationDate="2016-08-21T16:01:26.153" Score="13" Body="&lt;p&gt;When I was programming BtW (&quot;Before the WWW&quot; - the Internet was around, but not many companies used it for much other than FTP and email), my main development tools were Turbo Pascal, Borland Pascal, and Borland C++ - yes, we were a Borland house.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When we encountered a bug in the IDE (maybe it crashed, or misbehaved, or compiled incorrect code), we'd send an email off to Borland to inform them so that they could fix it. We were usually met with either silence, or worse, request for payment for &quot;assisted support&quot; - which we had to explain was not the reason for the email!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It got so bad that I turned to Windows Developers' Journal (WDJ), a programmers' magazine that ran a monthly column &quot;Bug++ of the Month&quot;. You told them of the issue, and if they could repeat it they'd contact Borland for you - oh, and printed an entry in that month's column! Needless to say, Borland was &lt;em&gt;much&lt;/em&gt; more responsive to them than us!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When we moved to Microsoft Visual C++, we encountered different bugs - but the same stonewall from Microsoft. So I just continued submitting bugs to WDJ. Sadly, that fine publication was subsumed into Dr Dobbs Journal - who luckily have some of the articles &lt;a href=&quot;http://www.drdobbs.com/bug-of-the-month/184416273&quot;&gt;archived&lt;/a&gt;!&lt;/p&gt;&#xA;" OwnerUserId="1980" LastActivityDate="2016-08-21T16:01:26.153" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1409" PostTypeId="1" AcceptedAnswerId="1412" CreationDate="2016-08-21T17:56:45.423" Score="13" ViewCount="479" Body="&lt;p&gt;I have an LC III that has been overclocked to 33.3 MHz. I'm not sure what speed FPU I should buy - do I match the clock speed, or the bus speed? What kind of FPU should I put in this one?&lt;/p&gt;&#xA;" OwnerUserId="2187" LastEditorUserId="202" LastEditDate="2016-12-24T06:23:20.163" LastActivityDate="2016-12-24T06:23:20.163" Title="Which FPU for my Mac?" Tags="&lt;hardware&gt;&lt;apple-macintosh&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1410" PostTypeId="2" ParentId="1402" CreationDate="2016-08-21T23:59:48.043" Score="17" Body="&lt;p&gt;I can only really answer from my own perspective, and I only wrote real code (other than simple BASIC programs) on an Atari over the last couple of years.&lt;/p&gt;&#xA;&lt;h2&gt;IDE Used&lt;/h2&gt;&#xA;&lt;p&gt;In terms of classic tools IDEs were relatively light compared to tools you get today. I worked using Devpac 3, which is a good assembler that includes some useful features and a debugger. STOS could be regarded as a BASIC IDE specifically for games, and GFA BASIC offers pretty much everything you need form a coding/debugging point of view in one place.&lt;/p&gt;&#xA;&lt;h2&gt;Languages&lt;/h2&gt;&#xA;&lt;p&gt;BASIC and/or 68k Assembly. I'm sure there were/are some games written in C, but most people seem to prefer the lower barrier of entry offered by BASIC, and from there tend to head full-on into assembly language.&lt;/p&gt;&#xA;&lt;h2&gt;Useful Resources Today&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.atari-wiki.com/index.php/Programming&quot; rel=&quot;noreferrer&quot;&gt;Atari Forum's WIKI has some useful documents and tutorials&lt;/a&gt;, and the #atariscne IRC channel on Freenode has some very smart people in it!&lt;/p&gt;&#xA;&lt;p&gt;Checkout the &lt;a href=&quot;http://dhs.nu/files.php?t=codingtool&quot; rel=&quot;noreferrer&quot;&gt;Dead Hackers Society's Coding files section&lt;/a&gt; for tools and libaries to get you started.&lt;/p&gt;&#xA;&lt;p&gt;DML (aka Douglas Little) recently published AGT (Atari Game Tools); a suite of graphics tools and a C based engine for quickly prototyping games on the Atari STE. &lt;a href=&quot;https://bitbucket.org/d_m_l/agtools/wiki/Home&quot; rel=&quot;noreferrer&quot;&gt;The wiki includes some tutorials and you'll have sprites on screen in no time.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Running The Programs&lt;/h2&gt;&#xA;&lt;p&gt;If you develop on the Atari then you'll be building an Atari executable file so you'll be able to simply launch it with a double click. I personally wrote some C and assembly on my Atari, but I ran into issues with screen mode switching and using the debugger for my game (I was working on a Falcon in 256 colour mode). Later on in my project I wrote the code in Devpac but running under the Hatari emulator, that meant I could use Hatari's debugger to work through issues.&lt;/p&gt;&#xA;" OwnerUserId="107" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-12-04T03:57:31.890" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1411" PostTypeId="2" ParentId="1406" CreationDate="2016-08-22T11:42:01.623" Score="12" Body="&lt;p&gt;The reason is simple: so you don't have to choose between an FPU and a network card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Mac LC series (LC stands for &quot;low cost&quot;) have no NuBus slots, but only a single PDS (&quot;Processor Direct Slot&quot;), and a 68020 or 68030 CPU which does not have an FPU. The PDS slot can be used to add one single extension card, usually an FPU or a network card. The Asante MCLC network card has a socket for an FPU so you can have both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The puzzling comment in the documentation relates to other models such as the Mac IIci which already has a socket for the FPU on the mainboard. If you have an FPU on the mainboard and you add a second FPU on your ethernet card, neither of them will work properly and most likely the machine will not even boot at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any 68882 in PLCC form factor should work (both the LC and LC II are 16MHz, I don't think you'll be able to find a 68882 rated less than 16MHz. Since the 68882 is a static design faster versions will work just fine at 16MHz).&lt;/p&gt;&#xA;" OwnerUserId="2049" LastEditorUserId="2049" LastEditDate="2016-08-30T21:07:15.930" LastActivityDate="2016-08-30T21:07:15.930" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1412" PostTypeId="2" ParentId="1409" CreationDate="2016-08-22T12:04:32.613" Score="13" Body="&lt;p&gt;Any 68882 in PLCC form factor should work if it's rated at least as fast as your main CPU (always use the effective CPU frequency, e.g. if you overclocked it). Since the 68882 is a static design, faster versions will work just fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually the last digit of the part number is the rated speed in MHz:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&#xA;MC68882FN16&#xA;^ ^    ^ ^&#xA;| |    | rated 16 MHz&#xA;| |    PLCC&#xA;| 68882&#xA;Manufactured by Motorola&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are some third party manufacturers, as well (e.g. Atmel), their naming works similarly: TS68882MRB/C25 is a mil-spec 25 MHz chip in a PGA package (i.e. it won't fit your LC III), but be aware that the designation for the package and spec is specific for the manufacturer. If in doubt, google the datasheet and make sure the values match.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could even use a 68881 (they're pin-compatible), but it will be about 60% slower.&lt;/p&gt;&#xA;" OwnerUserId="2049" LastEditorUserId="202" LastEditDate="2016-12-24T06:22:59.470" LastActivityDate="2016-12-24T06:22:59.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1413" PostTypeId="1" AcceptedAnswerId="1415" CreationDate="2016-08-22T22:08:16.633" Score="6" ViewCount="461" Body="&lt;p&gt;A while ago I've been told that some generic-brand PC, (yet packed on an IBM5150 case) had the ability to become a 80386 upon pressing Ctrl-Alt-Del (warm reboot) ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess there might have been (for sure) another processor in them but I've been unable to find details online about these mid-80's beasts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://books.google.fr/books?id=vcqI6sY2e-kC&amp;amp;pg=PA137&amp;amp;lpg=PA137&amp;amp;dq=reboot%208088%20ctrl%20alt%20del%20turbo%20mode&amp;amp;source=bl&amp;amp;ots=5Yh9FXtsI9&amp;amp;sig=unxCsvv9HvJxNwPPMrF7ElhnJyQ&amp;amp;hl=fr&amp;amp;sa=X&amp;amp;ved=0ahUKEwiKqoKPotjOAhVElxoKHcvJA9AQ6AEIPzAE#v=onepage&amp;amp;q=reboot%208088%20ctrl%20alt%20del%20turbo%20mode&amp;amp;f=false&quot; rel=&quot;nofollow&quot;&gt;Some information about a similar concept in a September '86 magazine&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://books.google.fr/books?id=EjwEAAAAMBAJ&amp;amp;pg=PA73&amp;amp;lpg=PA73&amp;amp;dq=reboot%208088%20ctrl%20alt%20del%20turbo%20mode&amp;amp;source=bl&amp;amp;ots=sdqNChlshQ&amp;amp;sig=Gv831_brOSSeCgdnBCCYuHBBW_k&amp;amp;hl=fr&amp;amp;sa=X&amp;amp;ved=0ahUKEwiKqoKPotjOAhVElxoKHcvJA9AQ6AEIITAA#v=onepage&amp;amp;q=reboot%208088%20ctrl%20alt%20del%20turbo%20mode&amp;amp;f=false&quot; rel=&quot;nofollow&quot;&gt;Another thing from April '87&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.tldp.org/HOWTO/Keyboard-and-Console-HOWTO-8.html&quot; rel=&quot;nofollow&quot;&gt;Some Linux stuff about &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;KP+&lt;/kbd&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Turbo_button&quot; rel=&quot;nofollow&quot;&gt;But as far as I remember it was &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;Del&lt;/kbd&gt; and there was no turbo button on the machine.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A guess is that it's what we used to call &lt;em&gt;IBM PC&lt;/em&gt; &lt;strong&gt;&lt;em&gt;and compatibles&lt;/em&gt;&lt;/strong&gt; back in the time (a clone) :)&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2016-08-23T19:51:55.087" LastActivityDate="2016-08-24T04:12:24.973" Title="What exactly were those 808X computers that would switch to 80386 upon Ctrl-Alt-Del?" Tags="&lt;8080&gt;&lt;80386&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1415" PostTypeId="2" ParentId="1413" CreationDate="2016-08-24T04:12:24.973" Score="12" Body="&lt;p&gt;What you describe sounds like the &lt;a href=&quot;https://books.google.com/books?id=Uj0EAAAAMBAJ&amp;amp;pg=PA128&amp;amp;lpg=PA128&amp;amp;dq=80386%20accelerator&amp;amp;source=bl&amp;amp;ots=EIq0io5WEY&amp;amp;sig=PVIJ9o5F0tAt9Q51MhzuLQEq9fU&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=0ahUKEwiTjNvPltnOAhVYwGMKHZHoBHMQ6AEIHjAA#v=onepage&amp;amp;q=80386%20accelerator&amp;amp;f=false&quot;&gt;PC Elevator&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The PC Elevator 386 is a coprocessor-type accelerator board. The system's native CPU remains available for any programs that are sensitive to speed or timing. Software commands (Up for the faster 386 mode and Down for the slower speed) make speed selection simple. Initial startup via the Up command requires system rebooting.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-08-24T04:12:24.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1416" PostTypeId="1" AcceptedAnswerId="1459" CreationDate="2016-08-26T07:34:36.613" Score="10" ViewCount="1183" Body="&lt;p&gt;I recently purchased a 1982 TI99/4a that has a defective keyboard. The keyboard is a Mitsumi with normal keys, but membrane type contacts.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AV5hr.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AV5hr.jpg&quot; alt=&quot;Keyboard circuit board&quot;&gt;&lt;/a&gt;When I press the contacts (gently) with a plastic stylus it seems to work fine, but the soft silicone core of the key itself does not seem to be able to activate the contacts. Does anybody know of a way to clean / re-activate the contacts ?&lt;/p&gt;&#xA;" OwnerUserId="256" LastEditorUserId="79" LastEditDate="2018-09-13T15:40:31.177" LastActivityDate="2018-09-13T15:40:31.177" Title="How to fix a TI99/4a membrane keyboard?" Tags="&lt;keyboards&gt;&lt;restoration&gt;&lt;membrane-keyboard&gt;&lt;ti-99&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1417" PostTypeId="5" CreationDate="2016-08-26T19:10:28.930" Score="0" Body="&lt;p&gt;The TI-99/4 and TI-99/4A were two computers released by Texas Instruments in 1979 and 1981 respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While neither computer was a huge success, the later model TI-99/4A managed to sell a respectable amount in its peak.  The TI-99/4A has established a loyal &quot;cult following&quot; with software and hardware still being produced for the computer in recent times.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="2081" LastEditDate="2017-02-03T09:27:38.917" LastActivityDate="2017-02-03T09:27:38.917" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1418" PostTypeId="4" CreationDate="2016-08-26T19:10:28.930" Score="0" Body="For questions about the TI-99/4 and TI-99/4A from Texas Instruments." OwnerUserId="621" LastEditorUserId="2081" LastEditDate="2017-02-03T09:27:31.490" LastActivityDate="2017-02-03T09:27:31.490" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1419" PostTypeId="2" ParentId="1403" CreationDate="2016-08-28T13:07:28.773" Score="6" Body="&lt;p&gt;As you point out, before the Internet was widely available, there was no easy way for software to “report back” on its use to the software publisher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Publishers had a variety of ways of finding out what their users wanted though...&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Most mainstream software packages included a registration card, and users were strongly encouraged to register. Incentives included promises of cheaper upgrades; in some cases “cheaper” even meant “for the cost of shipping” (the last upgrade to Lotus Improv was one such upgrade). One real benefit of registering was that publishers would sometimes send upgrade floppies (or tapes) to fix severe bugs. None of this gave publishers any feedback, but sometimes publishers would send their registered users surveys (that was rare) or invite those that lived close by to visit the publisher and give their feedback on upcoming releases.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The press had a huge role here. &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/1980/john-burger&quot;&gt;John Burger&lt;/a&gt;’s answer shows one example: users would write to magazines with their problems, and in some cases those made it back to the publishers’ ears. Journalists were also regularly invited to events to see upcoming releases, and give feedback. Reviews in magazines had a strong influence on the features available in software; this was heightened by the development of comparative articles (PC Magazine in particular used to compare large amounts of software and hardware, &lt;em&gt;e.g.&lt;/em&gt; all word processors). This wasn’t necessarily all good for users though: it led to increased effort spent on things journalists care about (hence word count features in word processors, and installers — many reviews described the installer at length, even though most users would see it very infrequently).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some publishers had their own magazines, which users would write to — examples include Atari’s &lt;em&gt;I/O&lt;/em&gt; in the UK, Borland’s &lt;em&gt;Turbo Technix&lt;/em&gt;, Microsoft’s &lt;em&gt;Systems Journal&lt;/em&gt;...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;User groups provided feedback to publishers too. Publishers paid attention at least to the larger user groups; many of these had their own newsletters or magazines which published users’ letters and problems, and of course users and publishers’ representatives would mingle at the groups’ meetings.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Users would also write or phone publishers, and not just for technical support. This was true for any size of software publishers, although I dare say a letter or phone call would have more of an impact with a smaller publisher!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Many publishers organised beta testing campaigns, which involved end users (as well as journalists, developers of related software...) — in fact they still do. John Gruber mentions the &lt;a href=&quot;http://daringfireball.net/linked/2016/08/27/on-beta-testing&quot; rel=&quot;nofollow noreferrer&quot;&gt;BBEdit&lt;/a&gt; beta-testing campaigns, prompted by Brent Simmons' mention of the &lt;a href=&quot;http://inessential.com/2016/08/27/on_beta_testing&quot; rel=&quot;nofollow noreferrer&quot;&gt;Frontier Aretha discussion groups&lt;/a&gt;; one very famous beta-testing campaign is &lt;a href=&quot;https://en.wikipedia.org/wiki/Development_of_Windows_95&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows 95's&lt;/a&gt; (code-named Chicago), which was quite wide-spread (admittedly that might be too recent to qualify as retro). Before the Internet became widely available, these would typically involve people testing pre-release software and filling in questionnaires.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As far as actual analytics goes, not having the Internet doesn’t mean they can’t be gathered. I worked on a large bespoke system once which stored analytics in its database; the analytics were dumped and returned to the publisher as part of the upgrade process. For home computers though, there wouldn’t have been much storage space to save analytics anyway...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-08-29T13:53:11.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1420" PostTypeId="2" ParentId="1018" CreationDate="2016-08-29T14:27:03.983" Score="4" Body="&lt;p&gt;Looking at Spectrum schematics the M1 is not used at all! It is brought out to the edge connector though, so expansion packs may have used it. As regards faulty Z80s, I've never heard of any and I used Z80s extensivly for years (started with Nascom 2 in 1979). I've used Z80 chips from Zilog, Mostek, Sharp and NEC and never noticed or heard of any problems. A lot of the systems I worked with would have required a working M1 as this was needed to get Zilog's Z80 peripherals to work correctly with the Z80 specific interrupt modes. A thought is that the issue may arise because the Speccy didnt bother buffering much and the signal may appear erratic when connected to external devices...&lt;/p&gt;&#xA;" OwnerUserId="1956" LastActivityDate="2016-08-29T14:27:03.983" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1421" PostTypeId="1" AcceptedAnswerId="1424" CreationDate="2016-08-30T07:40:58.063" Score="8" ViewCount="915" Body="&lt;p&gt;I am user a Atari ST computer and my original mouse has a very slow movements and little range for each movement, for this reason it is needed to move multiple times the mouse, I have tried to clean the ball and the inside of the mouse without improve the behavior..  Any suggestion to clean or to fix it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, I bought an adapter to include USB with PS2 protocol mouse but I do not know experiences about this adapter... Here the link: &lt;a href=&quot;http://i.ebayimg.com/images/i/172007077353-0-1/s-l1000.jpg&quot;&gt;Atari mouse adapter&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3276" LastActivityDate="2016-10-07T21:53:13.223" Title="Cleaning Atari ST mouse and experiences with the USB/PS2 adapter" Tags="&lt;atari&gt;&lt;mouse&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1422" PostTypeId="1" AcceptedAnswerId="1423" CreationDate="2016-08-30T08:27:37.203" Score="10" ViewCount="643" Body="&lt;p&gt;I have downloaded the STOS game creator from &lt;a href=&quot;//stos.atari.st/dload_stos.htm&quot; rel=&quot;nofollow&quot;&gt;the STOS download page&lt;/a&gt;. I'm trying to copy the software from my computer to a floppy disk formatted on an Atari ST, but I get an error message saying the floppy is full.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know how to copy software which is too large for one floppy disk?&lt;/p&gt;&#xA;" OwnerUserId="3276" LastEditorUserId="621" LastEditDate="2016-11-02T21:29:27.453" LastActivityDate="2016-11-02T21:29:27.453" Title="How can I copy software which is too large for one Atari ST floppy disk?" Tags="&lt;software&gt;&lt;atari&gt;&lt;floppy-disk&gt;" AnswerCount="3" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="1423" PostTypeId="2" ParentId="1422" CreationDate="2016-08-30T13:42:19.103" Score="10" Body="&lt;p&gt;There is a tool called &lt;a href=&quot;http://www.atari-wiki.com/?title=STZIP&quot;&gt;STZip&lt;/a&gt; which is a ZIP archive/unarchive utility for the Atari ST computer.  Why not zip up the STOS game creator into 300kb chunks on multiple floppies, and join the files on the ST itself?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is another tool called DC Xtract Plus that may work as well.  Both of these applications should fit onto a single floppy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also a tool called &lt;a href=&quot;http://www.atari-wiki.com/?title=Transferring_Files#Splitting_large_file&quot;&gt;Splitter&lt;/a&gt; which splits and joins large files.  I'm not sure this program supports ZIP files, so you will have to use an emulator to split and join the program.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-08-30T15:25:55.100" LastActivityDate="2016-08-30T15:25:55.100" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1424" PostTypeId="2" ParentId="1421" CreationDate="2016-08-30T16:58:54.320" Score="6" Body="&lt;p&gt;This is a common problem to retrocomputer mice.  It is mainly due to the low dpi resolution of the sensors in the mouse.  Each movement only translates to so many data points.  Early mice like the one that would originally ship with STs are typically in the 75dpi range, later aftermarket ones usually top out at ~300dpi.  You will see this same behaviour on other computers such as Amiga and early PC mice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may be able to set a &quot;mouse speed&quot; setting on your computer (I know you can on Amiga), but due to the limited dpi input, you quickly lose precision (it becomes more difficult to move the pointer by small amounts) unless you have upgraded to a higher dpi mouse, and even then it probably will not be as fast as you are used to on a modern computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some later versions of the various retro operating systems (Amiga OS 2 or higher, later PC mouse drivers) will offer an &quot;acceleration&quot; feature which helps alleviate this by providing proportional movement instead of linear, where the faster you move the mouse, the further the pointer will move on the screen allowing you to improve responsiveness without sacrificing precision when you move the mouse slowly.  You may be able to find similar 3rd party software to enable acceleration on your AtariST mouse if it doesn't support it in the version of the OS you have but I'm not familiar with that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: The PS2 adapter you have, if its well designed will give you the benefit of higher DPI, making it analogous to later mice for your system, but you'll probably still want to enable mouse acceleration on your OS somehow for the reasons discussed above.&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2016-08-30T16:58:54.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1425" PostTypeId="2" ParentId="1402" CreationDate="2016-08-30T23:36:31.697" Score="14" Body="&lt;p&gt;I used to program on the Atari about 20+ years ago, so I might be a bit rusty on the subject. Also I used to mainly write demo effects and music, so I wasn't working on core game development directly (other than writing music for some).&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;IDE is a more modern concept, so you probably won't find one on the platform itself, but there are some out there for cross development. For Basic there were a couple of editor/interpreter combos (aside from the original Atari Basic), most notably GFA Basic and Omikron Basic, the latter of which was made the official Atari Basic at some point later. For Assembler the two main tools in use were Devpac and TurboAss(embler), both of which integrated editors and debuggers. In the case of TurboAss the debugger was even reset safe, so in case your program did something weird (short of overwriting the debugger code) you could hit reset and find yourself back in the debugger. Pretty nifty!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Language for games development was mainly Motorola 68k assembly (out of necessity, since most higher level languages had too much overhead to perform well), and some C. I only learned C much later, so can't tell you more about those tools. I did Basic for a while and then straight to assembly! :)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A good place to start looking is &lt;a href=&quot;http://www.atari-forum.com&quot;&gt;http://www.atari-forum.com&lt;/a&gt;, which is where a lot of the active crowd is hanging out (both demoscene and hobby games devs).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Like @LaceySnr wrote, just double-click the executable, or start it directly from Devpac/Turboass. Turboass has the Alt-A shortcut to run. There seem to be some home-made link cables in use where people cross compile/assemble on PC and then transfer the binary into the real machine to run there. See post by &quot;Leonard&quot; here: &lt;a href=&quot;http://www.atari-forum.com/viewtopic.php?f=68&amp;amp;t=7152&quot;&gt;http://www.atari-forum.com/viewtopic.php?f=68&amp;amp;t=7152&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Hope that helps!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gunnar&lt;/p&gt;&#xA;" OwnerUserId="3292" LastActivityDate="2016-08-30T23:36:31.697" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1426" PostTypeId="1" AcceptedAnswerId="1427" CreationDate="2016-08-31T18:23:33.583" Score="11" ViewCount="1747" Body="&lt;p&gt;On the ZX Spectrum, you get an interrupt every frame. As I recall, the operating system uses this to periodically scan the keyboard and probably other things also, but you can have your own routine called instead/in addition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Commodore 64, you can somehow program the video chip to produce an interrupt on whichever scanline you choose, and this can somehow be directed to whatever the programmer chooses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know if this kind of facility is available on MS-DOS computers. If I write a program for MS-DOS, is there a way to command that the next time the interrupt fires, jump to this routine? Or is there a way to command that in 153 milliseconds, jump to that address?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2016-09-01T14:32:03.393" Title="Timing interrupts on MS-DOS" Tags="&lt;ms-dos&gt;&lt;interrupt&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1427" PostTypeId="2" ParentId="1426" CreationDate="2016-08-31T18:34:56.333" Score="11" Body="&lt;p&gt;The 8254 system timer calls &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/48/0.html&quot; rel=&quot;noreferrer&quot;&gt;interrupt 08&lt;/a&gt; at regular intervals (18.2 times per second by default), and the latter calls &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/53/24.html&quot; rel=&quot;noreferrer&quot;&gt;interrupt 1C&lt;/a&gt; which is the one you should hook into. You hook into this in the standard DOS way: store the current address at vector 1C, place your routine's address there, and make sure you chain to the previous address from your routine. You need to ensure your routine stays in memory as long as it's vectored in — so you need to either restore the previous vector when your program exits, or terminate and stay resident.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible to program the 8254 to fire the interrupt at other frequencies, but you then need to perform the necessary calculations and chain the interrupts yourself (so that the chain is called 18.2 times per second).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I'm aware there's no built-in way to program a call to a given routine in a certain amount of time, at least not with the kind of resolution you're asking for (some BIOSs support &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/91/22.html&quot; rel=&quot;noreferrer&quot;&gt;RTC alarms&lt;/a&gt;). The usual approach would be to hook into the timer interrupt for that too — for 153ms, you'd wait three ticks...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2016-09-01T14:32:03.393" LastActivityDate="2016-09-01T14:32:03.393" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1428" PostTypeId="1" AcceptedAnswerId="1430" CreationDate="2016-08-31T20:23:37.063" Score="16" ViewCount="1047" Body="&lt;p&gt;The Intel 8253/8254 timer, in its default configuration, triggers IRQ0 18.2 times per second.  Why this strange rate, and not something like 60 Hz (to match the most common video refresh rate) or 100 Hz (to give a round number)?&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2020-05-26T20:46:32.297" Title="Why is the 8254's default rate 18.2 Hz?" Tags="&lt;history&gt;&lt;intel&gt;&lt;8254&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1430" PostTypeId="2" ParentId="1428" CreationDate="2016-08-31T20:56:37.170" Score="26" Body="&lt;p&gt;The first CGA PCs used a single clock from which they derived all their timings. To allow for NTSC output, the main clock had to run at a multiple of the colour subcarrier frequency; the main clock ended up running at 14.31818 MHz, &lt;em&gt;i.e.&lt;/em&gt; four times the NTSC colour subcarrier frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This clock feeds the 8254, whose channel 0 ticks at 1.193 MHz (one twelfth of the main clock rate); a programmable counter is decremented every time this happens, and when it rolls over, IRQ0 fires. The standard PC setup uses the highest possible rollover value, 65536, resulting in the slowest possible IRQ0 firing rate; 1.193 ÷ 65536 is 18.2 Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.brokenthorn.com/Resources/OSDevPit.html&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; has lots of detail on the 8253 and 8254. &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8253#IBM_PC_programming_tips_and_hints&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt; covers the frequency selection to some extent. I think some of the blog posts on the 8088 MPH demo covered this too, but I haven't found the ones I'm thinking of just now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This explains the 4.77 MHz frequency of the first PC: that's 14.31818 ÷ 3. This value was chosen to save a little money: the 8088 has a 1/3 duty cycle, so &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8284&quot; rel=&quot;noreferrer&quot;&gt;the 8284 clock generator&lt;/a&gt; runs at three times the speed of the 8088, and using a 14.31818 provided the correct NTSC clock with a 1/4 divisor, and a clock close to the rates speed of 15MHz for the 8284 and 5MHz for the 8088. See &lt;a href=&quot;https://dosmandrivel.blogspot.com/2009/03/ibm-pc-design-antics.html&quot; rel=&quot;noreferrer&quot;&gt;Tim Paterson’s article on the topic&lt;/a&gt; for details.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-15T14:13:06.713" LastActivityDate="2020-05-15T14:13:06.713" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="1431" PostTypeId="5" CreationDate="2016-08-31T21:24:53.827" Score="0" Body="&lt;p&gt;The 8254 was primarily designed for the Intel 8080/8085-processors, but later used in x86-systems.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-01T07:44:39.170" LastActivityDate="2016-09-01T07:44:39.170" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1432" PostTypeId="4" CreationDate="2016-08-31T21:24:53.827" Score="0" Body="for questions about the Intel 8254 Programmable Interval Timer" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-01T07:45:03.577" LastActivityDate="2016-09-01T07:45:03.577" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1433" PostTypeId="5" CreationDate="2016-08-31T21:25:33.153" Score="0" Body="&lt;p&gt;In system programming, an interrupt is a signal to the processor emitted by hardware or software indicating an event that needs immediate attention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Questions regarding the source, meaning, handling or masking of interrupt signals are applicable.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-12-21T13:24:25.777" LastActivityDate="2016-12-21T13:24:25.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1434" PostTypeId="4" CreationDate="2016-08-31T21:25:33.153" Score="0" Body="For questions regarding processor interrupt signals on retrocomputing hardware" OwnerUserId="621" LastEditorUserId="276" LastEditDate="2016-12-21T13:24:25.777" LastActivityDate="2016-12-21T13:24:25.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1435" PostTypeId="5" CreationDate="2016-08-31T21:26:50.117" Score="0" Body="&lt;p&gt;The Western Design Center 65C02 microprocessor is an enhanced CMOS version of the NMOS-based MOS Technology 6502 8-bit microprocessor.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-01T07:44:36.013" LastActivityDate="2016-09-01T07:44:36.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1436" PostTypeId="4" CreationDate="2016-08-31T21:26:50.117" Score="0" Body="for questions about the 65c02 microprocessor" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-01T07:45:09.597" LastActivityDate="2016-09-01T07:45:09.597" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1437" PostTypeId="5" CreationDate="2016-08-31T21:27:44.860" Score="0" Body="&lt;p&gt;AppleTalk was released in 1985, and was the primary protocol used by Apple devices through the 1980s and 1990s.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-01T07:45:15.767" LastActivityDate="2016-09-01T07:45:15.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1438" PostTypeId="4" CreationDate="2016-08-31T21:27:44.860" Score="0" Body="for questions about the AppleTalk networking protocols by Apple" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-01T07:44:28.653" LastActivityDate="2016-09-01T07:44:28.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1439" PostTypeId="5" CreationDate="2016-08-31T21:30:26.640" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/crt-monitor&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;crt-monitor&amp;#39;&quot; rel=&quot;tag&quot;&gt;crt-monitor&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-01T07:45:06.910" LastActivityDate="2016-09-01T07:45:06.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1440" PostTypeId="4" CreationDate="2016-08-31T21:30:26.640" Score="0" Body="for questions about retrocomputing screens or terminals" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-01T07:44:24.487" LastActivityDate="2016-09-01T07:44:24.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1441" PostTypeId="1" AcceptedAnswerId="1442" CreationDate="2016-09-01T13:29:39.797" Score="6" ViewCount="1266" Body="&lt;p&gt;In high school I rescued an Apple external monitor from the garbage which looked like an iMac G3, only twice as big.  It was blue but I bet it came in different colors as well.  It might still be in my attic somewhere but I can't find it right now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only thing I remember is that it was a VGA monitor and was really heavy.  I can't seem to find any information on it by searching for &quot;iMac G3 external CRT monitor.&quot;  Does anyone remember this monitor?  What was its model number and specs?&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-09-01T13:36:16.723" Title="What was this Apple external CRT monitor that looked like an iMac G3?" Tags="&lt;apple&gt;&lt;imac&gt;&lt;imac-g3&gt;&lt;crt-monitor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1442" PostTypeId="2" ParentId="1441" CreationDate="2016-09-01T13:36:16.723" Score="5" Body="&lt;p&gt;Ah, I found it.  It was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_displays#Fourth_generation&quot; rel=&quot;noreferrer&quot;&gt;Apple Studio Display&lt;/a&gt;.  They were available as a 17&quot; Diamondtron and a 21&quot; Trinitron CRT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an image courtesy of &lt;a href=&quot;http://www.macworld.com/article/2912612/apple-studio-display-was-easy-on-the-eyes-hard-on-the-back.html&quot; rel=&quot;noreferrer&quot;&gt;MacWorld&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xfWRv.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xfWRv.jpg&quot; alt=&quot;Apple Studio Display 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The color calibration was the coolest part of this monitor.  It could color correct based on ambient light.&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-09-01T13:36:16.723" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1443" PostTypeId="1" AcceptedAnswerId="1444" CreationDate="2016-09-01T14:27:01.227" Score="10" ViewCount="1102" Body="&lt;p&gt;I have recently acquired an &lt;strong&gt;Atari 1040 STe&lt;/strong&gt; with 1MB of RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read that you can extend its RAM with &lt;strong&gt;30 pin SIMM&lt;/strong&gt; up to &lt;strong&gt;4MB&lt;/strong&gt;. But it can be done &lt;strong&gt;only&lt;/strong&gt; with &lt;strong&gt;256KB&lt;/strong&gt; or &lt;strong&gt;1MB&lt;/strong&gt; SIMM, and that &lt;strong&gt;2MB, 4MB, 8MB&lt;/strong&gt; and &lt;strong&gt;16MB&lt;/strong&gt; SIMM &lt;strong&gt;should not be used&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have 6 30 pin SIMM but there are no stickers on them that tell me their size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have 2 models:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;4 ones with &lt;strong&gt;9 vertical chips&lt;/strong&gt; marked &quot;&lt;strong&gt;&lt;em&gt;OKI Japan, M514100B-70SJ, 40222539A9Z&lt;/em&gt;&lt;/strong&gt;&quot;, and there is written on the back of the modules &quot;&lt;strong&gt;&lt;em&gt;MSC23409B-70DS9 4041001, JAPAN&lt;/em&gt;&lt;/strong&gt;&quot;;&lt;/li&gt;&#xA;&lt;li&gt;2 ones with &lt;strong&gt;3 horizontal chips&lt;/strong&gt; marked &quot;&lt;strong&gt;&lt;em&gt;JAPAN A014, 9236 65NT, HM514400AS7&lt;/em&gt;&lt;/strong&gt;&quot;, and there is written on the back of the modules &quot;&lt;strong&gt;&lt;em&gt;HB56G19B-7A, 9242 TT 13&lt;/em&gt;&lt;/strong&gt;&quot;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I don't want to damage my Atari 1040 STe by using modules with the wrong size, so how can I identify the size of 30 pin SIMM with those informations?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="824" LastEditDate="2018-07-12T06:36:48.147" LastActivityDate="2018-07-12T06:36:48.147" Title="How to identify size of a 30 pin SIMM (Atari 1040 STe)" Tags="&lt;atari&gt;&lt;memory&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1444" PostTypeId="2" ParentId="1443" CreationDate="2016-09-01T15:45:33.413" Score="10" Body="&lt;p&gt;To identify SIMM sizes based on chip IDs, search the Internet for the chip IDs to see what each chip is (chip datasheets are a good way to find this out), then multiply the chip capacity by the number of chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, an M514100D (D probably is a newer version but otherwise compatible with M514100B) is a 4Mbit x 1 fast page mode DRAM chip.  So if you have a module with 9, that is probably a 4Mbit x 9 FPM DRAM module (aka 4MByte with parity).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An HM514400 is a 1Mbit x 4 DRAM, so 3 chips would make 1Mbit x 12, so the module is probably 1MByte with parity (9 bits, leaving 3 bits unused/wasted).&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2016-09-01T15:45:33.413" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1445" PostTypeId="1" AcceptedAnswerId="1446" CreationDate="2016-09-04T15:40:40.360" Score="33" ViewCount="2219" Body="&lt;p&gt;In my &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1217/powering-up-old-desktop-games&quot;&gt;recent expeditions&lt;/a&gt; to the darkest corners of my garage, I've found a load (there's a pun in there somewhere) of old audio tapes containing Sinclair Spectrum code. These aren't commercial titles, they're record-your-own-code blank tapes from the early 80's: I'm certain they contain magazine type-ins and terrible games and graphics, authored by my 11-year-old self.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KDxsE.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KDxsE.jpg&quot; alt=&quot;C15 Compact Cassette&quot;&gt;&lt;/a&gt;&#xA;The tapes are mostly physically intact, having been kept in their own container (see the photo). However, listening to the audio (with the practised ear of someone who grew up listening to Spectrum games load), it's noticeably muffled, and there's a bit of &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Wow_and_flutter_measurement&quot; rel=&quot;noreferrer&quot;&gt;wow and flutter&lt;/a&gt;&quot; - wobbly pilot tones and the audio coming and going. I wasn't expecting miracles after 30-odd years, but I'm still hopeful that there's going to be some way to at least partially recover some of this data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've hooked up a tape deck to a Windows laptop and captured the audio into Audacity. I've wound the tapes end-to-end a couple of times (both to free up any stickiness and to hopefully counteract any &lt;a href=&quot;https://en.wikipedia.org/wiki/Print-through&quot; rel=&quot;noreferrer&quot;&gt;print through&lt;/a&gt;). Regardless, &lt;a href=&quot;http://ramsoft.bbk.org.omegahg.com/maketzx.html&quot; rel=&quot;noreferrer&quot;&gt;MakeTZX&lt;/a&gt; and &lt;a href=&quot;https://sourceforge.net/projects/fuse-emulator/files/fuse-utils/&quot; rel=&quot;noreferrer&quot;&gt;audio2tape&lt;/a&gt; fail to pick up anything useful in the files. I know there's a few Spectrum emulators that can play back WAVs; &lt;a href=&quot;http://www.spectaculator.com/&quot; rel=&quot;noreferrer&quot;&gt;Spectaculator&lt;/a&gt; shows signs of picking up the pilot tone in some of the files, but the audio seems to be just too degraded to load anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any post-processing I can do on the audio to clean it up enough to hopefully allow an emulator, or MakeTZX/audio2tape to extract the data? Does anyone have any other advice for enhancing the audio to least be able to identify what each block of code is? Are there any conversion utilities or emulators (for any platform) that are more forgiving of audio quality, or designed to help rescue degraded data?&lt;/p&gt;&#xA;" OwnerUserId="17" LastEditorUserId="276" LastEditDate="2017-12-14T10:21:56.590" LastActivityDate="2019-03-29T14:19:36.993" Title="Rescuing data from old audio cassettes" Tags="&lt;zx-spectrum&gt;&lt;cassette-tape&gt;&lt;data-preservation&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1446" PostTypeId="2" ParentId="1445" CreationDate="2016-09-05T09:58:29.307" Score="23" Body="&lt;p&gt;There's so much to go wrong in a cassette mechanism that it's amazing they worked at all.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;can you adjust tape head azimuth? Misalignment is responsible for a lot of sound problems.&lt;/li&gt;&#xA;&lt;li&gt;how clean are your tape player heads? Are the capstan and various drive rollers clean too?&lt;/li&gt;&#xA;&lt;li&gt;are the pressure pads behind the tape intact? Sometimes the little felt pads come unglued, and so the tape isn't held against the playback head securely.&lt;/li&gt;&#xA;&lt;li&gt;if you're noticing a lot of oxide shedding, last resort is tape baking. The oxide is bound to the tape with a glue that over the years picks up humidity and allows the oxide to wear off. &lt;em&gt;Very careful&lt;/em&gt; heating in a low oven can re-fix the oxide long enough to be playable again. I'm deliberately not quoting temperatures, times or links as I don't know how well these cassettes would stand up to this process.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I remember having stacks of these Computapes from John Menzies. They weren't the best back then, with occasional out-of-round tape spools and mechanisms that clicked on every rotation. Tape repair is a fairly low-tech process but is fiddly, and these tapes might not be worth the effort. But who am I to dissuade you from discovering that &lt;em&gt;Your Spectrum&lt;/em&gt; game you spent weeks getting ⅔ typed-in or your 11 year old self's SCREEN$ of a Lotus Esprit Turbo that looks more like a doorstop perched on duck eggs …&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2016-09-05T09:58:29.307" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1447" PostTypeId="1" AcceptedAnswerId="1448" CreationDate="2016-09-06T05:40:32.443" Score="10" ViewCount="336" Body="&lt;p&gt;I recently was given a Power Macintosh G3 300Mhz minitower (having a bit of trouble confirming that but I'm mostly certain that's what it is as the case is labeled from 1997) that had been outside for two years. The case is in very good condition and apart from some rust on the power supply and some of the metal frame (the metal on the side panel is quite rusted by the way) no parts of it look to be damaged. The logic board looks very clean and in good condition, but some of the metal on the ports looks like it might be a little corroded.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know much about desktops so this might be normal but there's a lot of loose cords and connectors inside of it that aren't plugged into anything. I see two hard drives and the floppy drive, and I think that's all it originally had, but is it ok for there to be so many loose cords inside?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It hasn't rained for several months so there shouldn't be any water inside of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is it safe to try to turn it on and use it without damaging it?&lt;/p&gt;&#xA;" OwnerUserId="3299" LastEditorUserId="11916" LastEditDate="2019-12-30T20:41:35.507" LastActivityDate="2019-12-30T20:41:35.507" Title="What should I do to clean up a Power Mac G3 that's been outside for two years?" Tags="&lt;apple&gt;&lt;maintenance&gt;&lt;power-macintosh&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="1448" PostTypeId="2" ParentId="1447" CreationDate="2016-09-06T09:13:23.677" Score="10" Body="&lt;p&gt;From your description, it sounds as though there is no fundamental reason why you shouldn't get this machine working again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main risk is something somewhere causing a short circuit.  So, don't just plug it in and turn it on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, give all the boards and plugs a good blow to dislodge all the dead insects and cobwebs.  Pay particular attention to the power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, wipe gently over every surface with a lint-free cloth (something like photographic lens cleaner cloth) moistened with a residue-free solvent (something like cigarette lighter fluid).  Take your time, be thorough and make sure you cover both sides of every board.&#xA;I would include unplugging every connector, jumper and on-board fuse and wiping the contacts.&lt;br&gt;&#xA;If there is obvious corrosion on a port, a light rub should dislodge it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Allow the fluid to evaporate completely and check again for any visible shorts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mention corrosion on the case itself.  Check if the case is connected to the power supply earth (ground).  If so, check that the corrosion hasn't broken electrical continuity of the earth.  You can do this while the circuit board is out of the case.&lt;br&gt;&#xA;You may also wish to try to remove or cover the rust on the case.  How you approach that would depend on how bad it is.  You would want to protect against rust flakes coming off in the future and falling onto the circuit boards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing I have done in the past is to disconnect the power supply from the circuit board before connecting it to the mains.  So, if there is something untoward, the circuit board is protected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plug it all back together and switch it on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to your question about loose cables:  It is common to use a standard wiring loom that has contacts for expansion units.  The production costs are lower.  If you bought an expansion drive later, you just plugged it in.  So I wouldn't worry about a couple of dangling leads provided they are clipped away safely.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-09-06T09:49:24.227" LastActivityDate="2016-09-06T09:49:24.227" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1449" PostTypeId="1" AcceptedAnswerId="5838" CreationDate="2016-09-07T09:47:10.740" Score="4" ViewCount="665" Body="&lt;p&gt;I'm trying to clone or take images of old SCSI hard disks. I use Clonezilla and at the last phase, it's written &quot;no input&quot;. This is for 68 pin SCSI HDD. In another case, I can't see the hard disk at start and when I try taking image of HDD, it's said &quot;...kernel is too old...&quot;.this is for 50 pin old SCSI HDD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I try with new SCSI disks, I have no problem, I can clone disks but with old SCSI disks, this doesn't work.&lt;/p&gt;&#xA;" OwnerUserId="3305" LastEditorUserId="621" LastEditDate="2016-09-07T12:40:25.733" LastActivityDate="2018-03-01T10:40:54.213" Title="Clonezilla SCSI HDD cloning problem" Tags="&lt;hardware&gt;&lt;hard-disk&gt;&lt;disk-image&gt;&lt;scsi&gt;&lt;old-hardware-adaptation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1450" PostTypeId="2" ParentId="1449" CreationDate="2016-09-07T12:47:48.797" Score="2" Body="&lt;p&gt;You may have some luck by selecting option 2 in Clonezilla: &quot;Use the same CPU level with that of this DRBL server.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/p/clonezilla/discussion/Clonezilla_server_edition/thread/38dd143e/&quot; rel=&quot;nofollow&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-09-07T12:47:48.797" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1452" PostTypeId="1" AcceptedAnswerId="1453" CreationDate="2016-09-07T22:34:41.490" Score="13" ViewCount="3070" Body="&lt;p&gt;I am trying to repurpose an old &lt;strong&gt;Acer Aspire M1641&lt;/strong&gt; to copy/format bulks of 3.5'' floppy disks. I think it's one of the last generations of computers to have a 34 pin floppy disk drive header as it also has SATA headers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two working 3.5'' floppy drives, a floppy drive 34 pin cable connector with three ends (one for the motherboard, and two for A: and B: drives) and the motherboard has a 34 pin header.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have connected the two drives to the motherboard's 34 pin header using the cable connector. I also connected the two drive's 4 pin power connectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I boot and check the BIOS, I only have option for &quot;Drive A:&quot;, there are no options for a &quot;Drive B:&quot;. Windows only shows one of the two floppy drives, even if the second one seems to work (It seems like the drive takes the disk and spins it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried changing the cable connector and changing the way it was connected but it was no use. I also tried other floppy drives and it did the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find any specifications sheet about the computer's motherboard that told that there where only support for one floppy drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I get both floppy disk drives to work? Does the Acer Aspire M1641 motherboard supports two floppy disk drives?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="824" LastEditDate="2018-07-12T07:17:26.403" LastActivityDate="2018-07-12T07:17:26.403" Title="Only &quot;Drive A:&quot; detected with two floppy disk drives" Tags="&lt;floppy-disk&gt;&lt;disk-drive&gt;&lt;ibm-pc&gt;&lt;connector&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1453" PostTypeId="2" ParentId="1452" CreationDate="2016-09-08T06:20:59.187" Score="14" Body="&lt;p&gt;Unfortunately, you can't connect two floppy drives to the motherboard header on that system. Like most motherboards since sometime around 2002–2003, it only supports one floppy drive, probably because its I/O is implemented using a low-pin-count SuperIO chip with too few pins to drive two floppy drives. The fact that your BIOS setup only mentions one floppy drive is a dead giveaway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you're copying 3.5&quot; floppies, you have a few possible solutions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if you're only copying standard DOS floppies, an external 3.5&quot; USB drive would work;&lt;/li&gt;&#xA;&lt;li&gt;if you're copying more complex floppies, you could use something like a &lt;a href=&quot;http://kryoflux.com/&quot;&gt;Kryoflux&lt;/a&gt; (with both drives connected to it).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-09-08T06:20:59.187" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1454" PostTypeId="2" ParentId="1452" CreationDate="2016-09-08T06:32:21.193" Score="9" Body="&lt;p&gt;On modern motherboards, the floppy is controlled by the Super I/O chip, and often this chip is only capable of controlling one floppy drive, because the additional drive select/moter pins are not present by design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a similar problem: My motherboard has a Nuvoton NCT6776F Super I/O chip, and that can work with one floppy only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am thinking of connecting some lines on the parallel port header to the missing lines in the floppy cable to be able to add a second drive (actually, while I'm at it, I could add a second cable and use 4 drives, 2x 5.25&quot; and 2x 3.5&quot; ...), but I haven't done so yet, so I don't know if it will work. I will also need to modify the drivers (easy on Linux, or even Freedos ...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To verify your Super I/O chip can only work with one drive,&#xA;please look at the motherboard and find out exactly what type it is. I tried to google for it, but apparently there are several models, and Acer uses different motherboards. Very likely it's MSI board. If you know the motherboard, you can try to look up which chips it uses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, on &lt;a href=&quot;http://i.ebayimg.com/t/Acer-Aspire-M1641-AM1641-Motherboard-N1996-MBSAK09007-/18/!B9IKfo!B2k~$%28KGrHqR,!h4EzL%28s1ibjBM45p-c3q!~~_45.JPG&quot;&gt;this&lt;/a&gt; picture of an Acer M1641 motherboard you can see the Super I/O chip on the top right. So you can try to find the datasheet for it directly using the number on it. With the datasheet, it's possible to find out exactly if it supports only one floppy, or several floppies.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2016-09-08T07:45:30.310" LastActivityDate="2016-09-08T07:45:30.310" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1455" PostTypeId="2" ParentId="1416" CreationDate="2016-09-08T18:30:45.073" Score="5" Body="&lt;p&gt;A pink pencil eraser is a reasonable contact cleaner for this sort of thing. Just scrub the black dots a bit and see if they will respond to softer pressure.&lt;/p&gt;&#xA;" OwnerUserId="854" LastActivityDate="2016-09-08T18:30:45.073" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1456" PostTypeId="2" ParentId="1422" CreationDate="2016-09-09T03:07:15.867" Score="1" Body="&lt;p&gt;There is an old utility called Zip Chunker Pro that splits larger zip files into multiple parts, of whatever size you chose.&lt;br&gt;&#xA;Then, on the destination system, you can reassemble them with the same utility. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure how this jives with your atari system, as this is a Win32 application, but it is something to consider. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://jibbensoftware.com/utilities.cfm&quot; rel=&quot;nofollow&quot;&gt;http://jibbensoftware.com/utilities.cfm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3309" LastActivityDate="2016-09-09T03:07:15.867" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1457" PostTypeId="1" AcceptedAnswerId="1458" CreationDate="2016-09-09T05:17:36.277" Score="5" ViewCount="1001" Body="&lt;p&gt;As the title states, can the RGB lines on the monitor port of the Atari ST be used with the RGB inputs on a Sony PVM CRT monitor?&lt;/p&gt;&#xA;" OwnerUserId="107" LastEditorUserId="276" LastEditDate="2017-04-11T11:52:17.490" LastActivityDate="2017-04-11T11:52:17.490" Title="Is it possible to use the RGB inputs on a Sony PVM with an Atari STE?" Tags="&lt;atari&gt;&lt;video&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1458" PostTypeId="2" ParentId="1457" CreationDate="2016-09-09T05:17:36.277" Score="5" Body="&lt;p&gt;Yes. The STE monitor output uses a 13 pin DIN plug/socket. This is looking at the &lt;strong&gt;front&lt;/strong&gt; of the &lt;strong&gt;plug&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1   2   3   4&#xA;5   6   7   8&#xA;9   10  11  12&#xA;      13&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;7 is red channel, 6 is the green, and 10 is blue, these go to the corresponding RGB inputs on the PVM. 2 is composite sync and this should be connected to the external sync of the PVM. All grounds go to pin 13.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I created a cable using this configuration and no extra resistors/capacitors and great picture — just be sure to enable the external sync using the button on the front of the PVM!&lt;/p&gt;&#xA;" OwnerUserId="107" LastEditorUserId="107" LastEditDate="2016-09-13T02:37:04.270" LastActivityDate="2016-09-13T02:37:04.270" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1459" PostTypeId="2" ParentId="1416" CreationDate="2016-09-09T07:01:42.387" Score="5" Body="&lt;p&gt;According to &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7/278&quot;&gt;jdv's answer to another question&lt;/a&gt;, cotton swabs and isopropyl (rubbing) alcohol will do the trick. Try to keep the alcohol away from plastics, use it sparingly and be gentle when you rub the dirt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;His answer also says that &quot;fancy contact cleaner&quot; will work:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, &quot;CRC QD Contact Cleaner&quot;. Make sure you don't get the type used for lubricating potentiometers. We want the quick drying, stable variety that doesn't leave a residue. [...]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Bonus: Good for cleaning keyboards, too.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(In &lt;a href=&quot;//retrocomputing.stackexchange.com/a/365/278&quot;&gt;this answer&lt;/a&gt;, he says that &quot;plain old contact cleaner&quot; will do for keyboards.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer also forbids using erasers, but only on electrical contacts (because it wears them down). Rubbers should be fine on membrane-type contacts, provided that they haven't become brittle and you press lightly with a soft eraser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If cleaning the keyboard doesn't fix it, it may be that the keys don't press on the little buttons. As suggested in &lt;a href=&quot;//retrocomputing.stackexchange.com/posts/comments/539/278&quot;&gt;this comment&lt;/a&gt;, if this is the case, placing a thin piece of felt underneath the keyboard mylar can allow them to &quot;push&quot; the buttons down far enough.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-09-09T16:50:01.183" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1460" PostTypeId="1" AcceptedAnswerId="1461" CreationDate="2016-09-09T08:38:40.027" Score="9" ViewCount="1526" Body="&lt;p&gt;The default configuration of an Amiga 2000 has a single internal floppy drive. Can I add a second internal floppy drive? Can I add a third or fourth drive too?&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2016-09-09T08:38:40.027" Title="How do I add multiple internal drives to an Amiga 2000?" Tags="&lt;amiga&gt;&lt;floppy-disk&gt;&lt;amiga-2000&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1461" PostTypeId="2" ParentId="1460" CreationDate="2016-09-09T08:38:40.027" Score="9" Body="&lt;p&gt;Yes, you can add two internal drives. However, although the Amiga supports up to four floppy drives, you cannot add a third or fourth drive internally - additional drives need to be connected to the external drive port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To use two internal drives, you need to have the correct cable. The cable will have three connectors on it, two for drives and one for the mainboard. The mainboard connector will be at one end of the cable and will have pin 3 blocked off as a key to make sure it is not inserted the wrong way round. At the other end of the cable are the drive connectors, and there will be a twist in the cable between the two drive connectors. The twist will cover pins 4, 5 and 6 (effectively swapping pins 4 and 6 on the last connector on the cable).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the Amiga internal floppy drive cable is different to the IBM PC floppy drive cable: the twist covers a different set of pins, making the cable incompatible with the Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also need to examine the jumpers on the drives. They will have jumpers to select &quot;DS0&quot; and &quot;DS1&quot; (and possibly others, but they are not relevant to the A2000). Set your &quot;DF0:&quot; drive to have the jumpers for DS0 closed. Set your &quot;DF1:&quot; drive to have the jumpers for DS1 closed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, plug the DF0: drive into the connector at the &lt;strong&gt;end&lt;/strong&gt; of the cable, after the twist. Plug the DF1: drive into the connector at the &lt;strong&gt;middle&lt;/strong&gt; of the cable, before the twist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, locate jumper J301 on the mainboard (it's close to the floppy connector). This jumper needs to be closed (i.e. a shorting block plugged into it).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To configure an A2000 with a single drive, leave the middle connector on the cable disconnected, and open jumper J301 (i.e. both pins exposed).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;It is a tempting idea to try and fit a HxC floppy emulator (which can emulate two drives) as well as a floppy drive, giving a total of three internal drives. Unfortunately the mainboard floppy connector only exposes the &quot;select&quot; signals for DF0: and DF1:, so it is impossible to use more than two drives from that connector.&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2016-09-09T08:38:40.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1462" PostTypeId="1" CreationDate="2016-09-11T05:38:07.543" Score="8" ViewCount="569" Body="&lt;p&gt;How can you configure the &lt;a href=&quot;http://mamedev.org/&quot;&gt;MAME emulator&lt;/a&gt; for different hardware (hardware cards) in the available slots of the emulated system? For example, how can you put in different cards in the emulated Apple card slots?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Background: I recently found out that MAME emulates the &lt;a href=&quot;https://en.wikipedia.org/wiki/Echo_2&quot;&gt;Echo II speed synthesizer card&lt;/a&gt;, but wasn't able to figure out how to make it work. I had to ask on the MAME IRC channel, because apparently this is documented nowhere, you need to ask, or you need to know ...)&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-09-12T14:17:40.607" Title="Configuring the slots in MAME for different hardware" Tags="&lt;emulation&gt;&lt;apple&gt;&lt;mame&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1463" PostTypeId="2" ParentId="1462" CreationDate="2016-09-11T05:38:07.543" Score="9" Body="&lt;p&gt;You can get information about command line options from the manpage, by using &lt;code&gt;-showusage&lt;/code&gt; or &lt;code&gt;-showconfig&lt;/code&gt; (which is explained to you after typing &lt;code&gt;mame -?&lt;/code&gt;, &lt;code&gt;mame -h&lt;/code&gt; or &lt;code&gt;mame -help&lt;/code&gt;), or from the &lt;a href=&quot;http://docs.mamedev.org/commandline/commandline-all.html&quot; rel=&quot;nofollow&quot;&gt;online documentation&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, from the commandline,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mame -listslots&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;shows the available slots per system, together with available options. What is not documented (yet) in any of the alternatives mentioned above is that every &lt;strong&gt;slot name&lt;/strong&gt; can also be used as a &lt;strong&gt;command line option&lt;/strong&gt;, so to configure MAME e.g. to use the Echo II card in Slot 1, type&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mame -sl1 echoii ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For the Apple, a few dozen cards are available.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2016-09-12T14:17:40.607" LastActivityDate="2016-09-12T14:17:40.607" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1464" PostTypeId="5" CreationDate="2016-09-11T23:11:32.690" Score="0" Body="&lt;p&gt;MAME originally stood for Multiple Arcade Machine Emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.mame.net/&quot; rel=&quot;nofollow&quot;&gt;Home Page&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-12T06:28:16.400" LastActivityDate="2016-09-12T06:28:16.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1465" PostTypeId="4" CreationDate="2016-09-11T23:11:32.690" Score="0" Body="for questions about emulation with MAME in a retrocomputing context" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-12T06:28:08.770" LastActivityDate="2016-09-12T06:28:08.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1466" PostTypeId="1" AcceptedAnswerId="1470" CreationDate="2016-09-12T03:42:11.883" Score="14" ViewCount="633" Body="&lt;p&gt;I bought a vintage Canon monitor off a friend which I'd like to interface with and use as a cool retro monitor.&lt;br&gt;&#xA;The problem is that I can't find anything useful about this monitor after days of searching on Google and my friend can't help me with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The monitor is a Canon v9521 which I suspect is a monochrome unit because of the low power that is needed.&lt;br&gt;&#xA;It also only has one cable coming out of it, a standard DB-9 male cable, with no evidence of a connector for power (it's probably powered from the DB-9).&lt;br&gt;&#xA;This monitor is for a Canon v3101a or v3102 electric typewriter(?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to know the pinout of the DB-9 cable so that I can power up the monitor and hook it up. I also need to know the protocol that this uses so that I can actually program an Arduino to interface with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iPAkR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iPAkR.jpg&quot; alt=&quot;back of monitor&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/8X5oc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8X5oc.jpg&quot; alt=&quot;monitor cable&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--- UPDATE ---&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ended up going with Ken Gober's suggestion of opening the monitor and tracing the pins.&lt;br&gt;&#xA;There were 2 circuit boards for power and signals like he suggested there might be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got the monitor powered up and played with signals using an Arduino.&lt;br&gt;&#xA;The monitor has a refresh rate of 60 Hz but it seemed to scan the whole screen without requiring input to the HS &amp;amp; VS pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the pin diagram that I extracted.&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/E7Xgp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/E7Xgp.png&quot; alt=&quot;pin diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The labels are from the board that the signal pins went to.&lt;br&gt;&#xA;So I'll assume the VS and HS are vertical and horizontal sync.&lt;br&gt;&#xA;VD is the video input, but no intensity, just on/off.&lt;br&gt;&#xA;I have no idea what HF might be.&lt;br&gt;&#xA;The - pin with the ? might be unconnected or part of the minus volt pins, it had a slightly higher resistance than the minus pins.&lt;/p&gt;&#xA;" OwnerUserId="3317" LastEditorUserId="3317" LastEditDate="2016-10-03T05:37:04.637" LastActivityDate="2016-10-03T05:37:04.637" Title="Interfacing with vintage Canon monitor" Tags="&lt;display&gt;&lt;terminal&gt;&lt;crt-monitor&gt;&lt;canon&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1467" PostTypeId="5" CreationDate="2016-09-12T03:57:38.347" Score="0" Body="&lt;p&gt;Canon is a Japanese imaging and optical products corporation.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-12T06:28:00.473" LastActivityDate="2016-09-12T06:28:00.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1468" PostTypeId="4" CreationDate="2016-09-12T03:57:38.347" Score="0" Body="for questions about retrocomputing hardware and software manufactured by Canon" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-12T06:28:21.953" LastActivityDate="2016-09-12T06:28:21.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1469" PostTypeId="2" ParentId="1466" CreationDate="2016-09-12T10:36:40.853" Score="2" Body="&lt;p&gt;The fact that it &lt;em&gt;doesn't&lt;/em&gt; have a power connector is bizarre. I use the word advisedly, because I didn't think that the DE-9 (I'm being pedantic - that's what they're &lt;em&gt;actually&lt;/em&gt; called) could handle the sort of amperage that such a display would need. There are (barely) sufficient &quot;reserved&quot; connectors to allow it though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the age, I would definitely presume either a &lt;a href=&quot;https://en.wikipedia.org/wiki/Color_Graphics_Adapter#Connector&quot; rel=&quot;nofollow&quot;&gt;CGA (Colour Graphics Adapter)&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Monochrome_Display_Adapter#Connector&quot; rel=&quot;nofollow&quot;&gt;MDA (Monochrome Display Adapter)&lt;/a&gt; pinout (and yes, they're deliberately similar) as a start. Where the power should go, though...&lt;/p&gt;&#xA;" OwnerUserId="1980" LastActivityDate="2016-09-12T10:36:40.853" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1470" PostTypeId="2" ParentId="1466" CreationDate="2016-09-12T12:29:31.050" Score="7" Body="&lt;p&gt;Without documentation, this is a non-trivial project and you are probably going to have to open the monitor up in order to figure out what's what. There are two basic things you need to find out first:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;What voltage does the monitor require, is it AC or DC, and how much current?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Which pin(s) are power, and which pin(s) are ground.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Standard warnings about opening CRTs apply. Always assume that there are potentially life-threatening voltages in a CRT regardless of how long it has been powered off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've got those answers, you can experiment to discover the other pin assignments. The sticker on the back says 24-40V DC 1.2A, which answers the first question. Figuring out the second one is what will probably require you to open the thing up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The individual wires in the cable will probably lead to one or two small circuit boards. If two, one board will probably be for data signals and the other board will probably be for power. If one, hopefully power and data are on distinct parts of the board. You may need to use a volt/ohm meter (preferably one with a continuity test feature) to identify which pins connect to which parts of the board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Sidebar:&lt;/strong&gt; If you have the thing open anyway, your best bet may be to reroute the power connections to a new jack that you install. Probably a barrel jack, but your exact choice should be dictated by what kind of replacement power supply you can come up with. A 24VDC 1.2A power supply shouldn't be hard to find, such things are commonly used to power laptops, consumer routers and various small electronics. The important thing is to find one that can supply 1.2A (finding something that can meet the 1.2A requirement will probably be harder than finding something that can meet the 24-40 VDC requirement). If you do this, and you are going to experiment to figure out the data pin assignments, then I advise disconnecting the +24V pins in the cable, so that you don't accidentally burn something out later, e.g. if by accident a pin carrying +24V touches one that's designed for only +5V (or even worse, one that's designed for 0.7V).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the &quot;interfacing&quot;, once you've got the power issue settled you will again need to do some experimenting to determine which pins do what, and what kinds of signals need to be sent. There are 3 kinds of signals I would try first:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;NTSC composite output from a CGA card or an old 8-bit computer like a C64,&lt;/li&gt;&#xA;&lt;li&gt;&quot;TTL&quot; output from a CGA card (use the green pin and leave red, blue, and intensity from the CGA card disconnected), or&lt;/li&gt;&#xA;&lt;li&gt;Analog output from a VGA card (again, using the green pin).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There will be a lot of trial-and-error here unless you are very good at figuring out what a circuit does by looking at a board (and if you're that good you don't need any advice from me).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've identified which wire carries the video signal the final step is to work out the scan frequency and refresh rate (and which pins are used for horizontal and vertical sync). Hopefully the monitor uses separate pins for HSYNC and VSYNC, and uses standard scan/refresh rates because if it's non-standard it can be very hard to work out what the 'design' rate is (and driving a monitor at the wrong rate for too long can damage it).&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="278" LastEditDate="2016-10-02T09:13:57.247" LastActivityDate="2016-10-02T09:13:57.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1471" PostTypeId="1" CreationDate="2016-09-12T12:42:42.930" Score="8" ViewCount="97" Body="&lt;p&gt;I have recently acquired a &lt;strong&gt;NEC MobilePro 790&lt;/strong&gt; PocketPc from 2001.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specifications says that the device has &lt;strong&gt;48MB memory&lt;/strong&gt;, including &lt;strong&gt;32MB of RAM&lt;/strong&gt; and &lt;strong&gt;16MB of flash storage&lt;/strong&gt;. It also has a ROM that stores the OS (I guess), that is Windows CE 3.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it has 16MB of flash storage, you would think that the PocketPC user's information would be stored on them, but they actually doesn't seem to be. If I remove the battery, my account informations (Name, address...) and settings (Date, time, touchscreen calibration...) are reset and the PocketPC will run the configuration wizard on boot as if it was first time is was used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also found a setting in the configuration panel that allows to split the RAM between &quot;Programs&quot; and &quot;Storage&quot;. By default, 16MB is allocated to each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, are the NEC MobilePro's settings really stored in RAM, and does it really have any PSA (Persistent Storage Area)? Also, do most PocketPCs work the same way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;PS&lt;/strong&gt;: I am sorry if PocketPCs don't fit in the RetroComputing Stack Exchange but I feel like they are obsolete and thus fit in retrocomputing.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="278" LastEditDate="2016-09-13T06:45:51.793" LastActivityDate="2016-09-13T17:59:46.297" Title="Is there any persistent storage in a NEC MobilePro PocketPC?" Tags="&lt;rom&gt;&lt;storage&gt;&lt;nec-mobilepro&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1472" PostTypeId="5" CreationDate="2016-09-12T16:45:22.060" Score="0" Body="&lt;p&gt;All of the models in the MobilePro range ran a version of Microsoft's Windows CE mobile operating system and could be navigated using a stylus and touchscreen.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-13T09:09:38.103" LastActivityDate="2016-09-13T09:09:38.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1473" PostTypeId="4" CreationDate="2016-09-12T16:45:22.060" Score="0" Body="for questions on the line of personal digital assistants manufactured by NEC" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-13T09:09:34.863" LastActivityDate="2016-09-13T09:09:34.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1474" PostTypeId="1" AcceptedAnswerId="1476" CreationDate="2016-09-13T09:28:28.453" Score="11" ViewCount="5903" Body="&lt;p&gt;I've got a sweet joystick that uses gameport, and I'd like to use it in my Kerbal Space Program. My modern PC lacks any ISA or PCI slots, so I can't use the cards I have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've noticed some gameport to USB adapters on the net - but they are somewhat expensive, and I wonder how well they perform; I've been burned by Parallel to USB adapters in the past already, so I'm wary of purchasing this kind of hardware without doing my research first. Or maybe there are other, better options? Like a PCIE card with gameport?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are my options, and your recommendations?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PC is running Windows 7, the joystick is &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_SideWinder#3D_Pro&quot;&gt;Microsoft Sidewinder 3D Pro.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="79" LastEditDate="2016-09-13T11:33:14.130" LastActivityDate="2020-07-20T09:49:14.413" Title="How can I use a SideWinder 3D Pro with a modern PC running Windows 7?" Tags="&lt;old-hardware-adaptation&gt;&lt;joystick&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1475" PostTypeId="2" ParentId="1471" CreationDate="2016-09-13T09:51:02.093" Score="2" Body="&lt;p&gt;Ah yes! The start of the &quot;instant-on&quot; revolution. According to &lt;a href=&quot;https://support.necam.com/Legacy/MobilePro/MobilePro790/MobilePro790_Datasheet.pdf&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; website, it has:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;16MB of internal ROM, with 14 MB available for storage; and&lt;/li&gt;&#xA;&lt;li&gt;a CompactFlash slot that you can stick a 16 MB card into.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm trying to remember if that range had an emergency coin cell battery to keep data while you changed the batteries - I can't see any reference to that however. I think the LiIon battery was supposed to keep the data, and you were supposed to recharge it before it ran out.&lt;/p&gt;&#xA;" OwnerUserId="1980" LastActivityDate="2016-09-13T09:51:02.093" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1476" PostTypeId="2" ParentId="1474" CreationDate="2016-09-13T09:58:09.840" Score="15" Body="&lt;p&gt;The SideWinder 3D Pro has its own protocol, which isn't supported by typical gameport-to-USB adapters. The best you can hope for with one of those is to find an adapter which supports the CH Flightstick Pro or Thrustmaster FCS protocols, and use the fallback mode on the SideWinder. (There's usually a switch on the USB adapter to choose the appropriate mode.) Earlier SideWinders came with a USB adapter (part 98427) but that doesn't work with the 3D Pro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The protocol has been reverse engineered though and it is possible to &lt;em&gt;build&lt;/em&gt; an adapter. The basic recipe is described &lt;a href=&quot;http://descentbb.net/viewtopic.php?t=15526&quot;&gt;on the Descent forums&lt;/a&gt; (another version of the post, with photos, is available &lt;a href=&quot;http://mwomercs.com/forums/topic/4767-ms-sidewinder-3d-pro-usb-conversion/&quot;&gt;on the Mechwarrior Online forums&lt;/a&gt;). The build documented there uses a Teensy board; it's also possible to use an Arduino board instead.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-09-13T09:58:09.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1477" PostTypeId="2" ParentId="1471" CreationDate="2016-09-13T17:59:46.297" Score="4" Body="&lt;p&gt;The RAM is the means of (relatively) persistent storage. Even when the device is &quot;turned off&quot;, the contents of RAM are maintained using battery power. Power to the RAM is provided by the main battery, and by a &quot;backup battery&quot; that's there specifically to keep your data safe when the main battery is dead, or while it's being removed. If the backup battery also dies, your data is gone. According to the manual, a fully-charged backup battery can hold the data in RAM for 7 days after the main battery is drained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general for a system like this, there are two keys to keeping your data safe:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Charge it regularly. Just like a cell phone, if you use it regularly, then you may as well make a habit of charging it nightly, like a cell phone. NEC suggests charging it for 10 hours continuously after leaving it with the batteries completely drained; in normal use it shouldn't take as long.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Sync it. The ActiveSync software is provided to sync data to a computer, and most things can be restored from the computer if they're lost, as long as they were synced recently. (Note: I have no idea how well this software works on modern machines).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Since this is a 15-year-old machine, an additional step, if you're up to it, is to disassemble it to find the backup battery, determine whether it holds a charge, and replace it if it doesn't. If you lose your data &lt;em&gt;immediately&lt;/em&gt; after removing the main battery pack, the backup battery is suspect and might need replacement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reference: &lt;a href=&quot;https://www.zygo-usa.com/usa/images/chatter/User-Guide_Polyana-2_MobilePro790.pdf&quot; rel=&quot;nofollow&quot;&gt;user manual&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2016-09-13T17:59:46.297" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1478" PostTypeId="2" ParentId="1398" CreationDate="2016-09-14T07:13:08.297" Score="7" Body="&lt;p&gt;65C02 is a CMOS version of 6502 (which was NMOS) chip. Judging from Wikipedia articles on these chips and few of the datasheets I found, it seems like it should work exactly the same way it did on 6502, i.e. held high during normal operation, pulled low to fire an interrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are you sure it is not connected to anything? I'm not too familiar with Apple devices, but  by these schematics it looks like NMI* is held high by 3.3kΩ resistor network and connected to pin 29 of connectors J1-J7: &lt;a href=&quot;http://www.downloads.reactivemicro.com/Public/Apple%20II%20Items/Hardware/IIe/Schematic/&quot;&gt;http://www.downloads.reactivemicro.com/Public/Apple%20II%20Items/Hardware/IIe/Schematic/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="156" LastEditorUserId="156" LastEditDate="2016-09-15T20:42:50.323" LastActivityDate="2016-09-15T20:42:50.323" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1479" PostTypeId="1" AcceptedAnswerId="1481" CreationDate="2016-09-14T22:25:37.760" Score="13" ViewCount="2294" Body="&lt;p&gt;All-in-one Amiga computers (500, 600, 1200) have metal shielding surrounding the mainboard. It is in two parts, one below the mainboard and one on top. The mainboard is physically linked to the lower part by the hex bolts that are either side of most of the rear I/O ports and the screws that attach the mainboard to the lower plastic outer case. Then the upper part of the shielding attaches to the lower part by bending small metal tabs to hold it in place (a bit like the metal tabs on the back of most types of picture frame).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the consequences of &lt;em&gt;not&lt;/em&gt; fitting and using the metal shielding? Either no shielding at all, or fitting just the lower shielding and removing the upper part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I expect that this means that it would probably fail some EMI emissions tests in some countries, meaning that the manufacturer would not get permission to sell the computer. Let's disregard this aspect since the manufacturer is no longer making and selling these computers. What are the practical aspects that I, as a user, would see?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Would the computer still operate normally with either or both parts of the shielding removed, or is the shielding necessary for operation? (e.g. by connecting electrical ground to different parts that require it)&lt;/li&gt;&#xA;&lt;li&gt;Would the computer still be reliable, or would EMI interference cause noticeable effects such as crashes?&lt;/li&gt;&#xA;&lt;li&gt;Would other nearby electrical devices be affected in any noticeable way by the Amiga's EMI emissions?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="149" LastActivityDate="2018-08-27T11:44:17.087" Title="Is the metal shielding required in all-in-one Amiga models?" Tags="&lt;amiga&gt;&lt;case&gt;&lt;shielding&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1480" PostTypeId="1" AcceptedAnswerId="8894" CreationDate="2016-09-15T03:54:40.643" Score="17" ViewCount="1994" Body="&lt;p&gt;The Modcomp II was a 16-bit minicomputer circa 1970.  As well as in FORTRAN IV, the Modcomp family could be programmed in assembly language, with syntax like this excerpt from &lt;a href=&quot;ftp://ftp.columbia.edu/pub/kermit/modcomp/modcmp.asm&quot;&gt;Kermit for Modcomp&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;          HZS,POSIT                      *&#xA;          STM,2       $+5               NO - ATTACHED FILE&#xA;          LDI,2       POSUFT            ASSIGN TO THE ATTACHED FILE&#xA;          REX,#A                         *&#xA;          DFC         $$                 *&#xA;POSIT     LDI,2       POSUFT            POSITION THE FILE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am unsure of the meaning of the symbols &lt;code&gt;$&lt;/code&gt; and &lt;code&gt;$$&lt;/code&gt; in this excerpt.  I think that &lt;code&gt;$&lt;/code&gt; most likely means &quot;address of the instruction being assembled&quot;; I will present my reasoning below.  However, other than that &lt;code&gt;$$&lt;/code&gt; is 16-bits (one word) long, I have no idea what it means.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Q: &lt;strong&gt;What are the meanings of the symbols &lt;code&gt;$&lt;/code&gt; and &lt;code&gt;$$&lt;/code&gt; in Modcomp assembly language, especially as used for the Modcomp II minicomputer?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Why I think that &lt;code&gt;$&lt;/code&gt; probably means &quot;Address of current instruction&quot;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      STM,2       $+5               NO - ATTACHED FILE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This two-word &lt;code&gt;STM&lt;/code&gt; instruction stores a register into a memory location that will be an argument to a system call.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      LDI,2       POSUFT            ASSIGN TO THE ATTACHED FILE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This two-word &lt;code&gt;LDI&lt;/code&gt; instruction loads a constant into a register.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      REX,#A                         *&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This one word instruction performs a system call.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      DFC         $$                 *&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This &quot;define constant(s)&quot; assembler directive reserves (and possibly initializes--I don't know) one word that I presume is used as an argument to the system call.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order for the &lt;code&gt;STM&lt;/code&gt; instruction to store a register into the word reserved by the DFC, &lt;code&gt;$&lt;/code&gt; would have to mean &quot;the address of the beginning of the &lt;code&gt;STM&lt;/code&gt; instruction, so that &lt;code&gt;$+5&lt;/code&gt; would refer to the address of the DFC itself.&lt;/p&gt;&#xA;" OwnerUserId="3324" LastEditorUserId="3324" LastEditDate="2016-09-15T11:30:16.210" LastActivityDate="2019-01-22T21:10:44.273" Title="Meaning of $ and $$ in Modcomp assembly language" Tags="&lt;assembly&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1481" PostTypeId="2" ParentId="1479" CreationDate="2016-09-15T08:27:17.223" Score="12" Body="&lt;p&gt;Amigas work fine without their metal shields, and even the big-box machines' innards can be taken out of their case and run open on the desk. I never noticed any instability on my old A500 with the shield removed, although I might have done were I a radio amateur running a powerful transmitter nearby.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to the Amiga's emissions, FCC rules forbade Commodore from selling into the American market without RF shielding. The UK had no such rules, and if you look at British machines of that era, they omitted shielding and the machines stomped all over the medium-wave and HF bands. An Amiga without shielding can be expected to do much the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days, the HF band is a toxic wasteland anyway due to Powerline kit and other cheap and nasty electronics, so you can't make it any worse by removing your Amiga's shield.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2016-09-15T08:27:17.223" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1482" PostTypeId="1" AcceptedAnswerId="1488" CreationDate="2016-09-15T19:59:56.653" Score="8" ViewCount="421" Body="&lt;p&gt;The Apple IIgs can have the usual seven cards an Apple II can have plus RAM which has an additional slot. Other devices can end up inside the IIgs such as an adapter for the Game I/O socket or the Ensoniq I/O expansion connector. How many cards can safely be put in a IIgs? I have a ROM 03 IIgs with the original power supply so heat could be a problem.&lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2020-03-09T17:58:48.280" Title="How many cards can safely be put in a IIgs?" Tags="&lt;apple-ii&gt;&lt;maintenance&gt;&lt;apple-iigs&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1483" PostTypeId="2" ParentId="1024" CreationDate="2016-09-16T07:51:16.577" Score="7" Body="&lt;p&gt;As stated, mode 3 is an unofficial mode and thus a side effect of hardware implementation, so the circuit is designed to handle only three modes (bit values 00, 01 and 10). This means that bit combination 11 is interpreted as some other combination of bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the list of modes' features it looks like there are three circuits that read video mode value: one responsible for display resolution and pixel format, one that works with color and one that controls interleaving. There are many ways to electrically implement what I am describing, but on logical level this is roughly what happens:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Resolution / pixels per byte&lt;/strong&gt;: it tests if the bits are not equal (01 or 10) and only then tests which of them is on. Otherwise (00 or 11) it defaults to 160x200.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In pseudocode it would look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if(bit0!=bit1)&#xA;   if(bit0==1) 320x200, 4 pixels/byte&#xA;   else        640x200, 8 pixels/byte&#xA;else           160x200, 2 pixels/byte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Color / bits per color&lt;/strong&gt;: if bit 0 is on (?1) it immediately assumes mode 1 and tests bit 1 only if bit 0 is zero (so further circuit always assumes it has ?0 value)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pseudocode:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if(bit0==1)      4  colors, 2 bits/pixel&#xA;else if(bit1==1) 2  colors, 1 bit/pixel&#xA;     else        16 colors, 4 bits/pixel&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Interleaved mode&lt;/strong&gt;: only mode 2 is not bit-interleaved, so this pattern (10) is the only value it tests for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pseudocode:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if(bit0==0&amp;amp;&amp;amp;bit1==1)      do not interleave&#xA;else                      interleave&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="156" LastEditorUserId="2067" LastEditDate="2016-09-18T10:12:33.733" LastActivityDate="2016-09-18T10:12:33.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1484" PostTypeId="2" ParentId="1024" CreationDate="2016-09-16T13:10:21.627" Score="12" Body="&lt;p&gt;As you can see from the &lt;a href=&quot;http://www.cpcwiki.eu/imgs/6/6d/Schaltplan_cpc_464.jpg&quot;&gt;schematic&lt;/a&gt;, the Armstrad uses a &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6845&quot;&gt;6845&lt;/a&gt; compatible display controller together with a custom-made &lt;a href=&quot;https://en.wikipedia.org/wiki/Gate_array&quot;&gt;Gate Array&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Application-specific_integrated_circuit&quot;&gt;ASIC&lt;/a&gt; for video output. The Gate Array also controls the screen modes using two bits of a register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We'll never know &lt;em&gt;exactly&lt;/em&gt; what happens until someone reverse engineers the Gate Array, and while it has been &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Gate_Array#Pictures&quot;&gt;decapped and photographed&lt;/a&gt; in April 2016, so far I don't know of any available schematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But to illustrate the principle, we can design our own gate array for Modes 0 to 2, and then see what happens if we switch to Mode 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To design a gate array, we need to write down &lt;a href=&quot;https://en.wikipedia.org/wiki/Boolean_algebra&quot;&gt;boolean equations&lt;/a&gt; for the part we are interested in and convert them to &lt;a href=&quot;https://en.wikipedia.org/wiki/Disjunctive_normal_form&quot;&gt;disjunctive&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Conjunctive_normal_form&quot;&gt;conjunctive&lt;/a&gt; normal form while at the same time simplifying them, ignoring inputs we don't care about. The simplified equations then form the basis for programming the gate array.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6845 produces the RAM address of each data byte &lt;code&gt;d&lt;/code&gt; we want to display in turn, and it's our task to convert this data into a pen-table index &lt;code&gt;p&lt;/code&gt;, depending on the mode &lt;code&gt;m&lt;/code&gt;. With max. 8 pixels per byte, let's use an internal 3-bit counter &lt;code&gt;b&lt;/code&gt; for the bit position in the byte. We'll just look at the first nibble, the second nibble works in the same way. Here are tables for our 3 modes:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Counter      Mode 0        Mode 1        Mode 2  &#xA;b2 b1 b0   p3 p2 p1 p0   p3 p2 p1 p0   p3 p2 p1 p0   &#xA;--------   -----------   -----------   -----------   &#xA; 0  0  0   d3 d2 d1 d0    0  0 d1 d0    0  0  0 d0   &#xA; 0  0  1   d3 d2 d1 d0    0  0 d1 d0    0  0  0 d1   &#xA; 0  1  0   d3 d2 d1 d0    0  0 d3 d2    0  0  0 d2   &#xA; 0  1  1   d3 d2 d1 d0    0  0 d3 d2    0  0  0 d3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So in Mode 0 we use always the same 4 bits for the pen index for a single wide pixel, while in Mode 2 we use each bit of the nibble in turn for four narrow pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Writing &lt;code&gt;/&lt;/code&gt; for &quot;not&quot;, &lt;code&gt;*&lt;/code&gt; for &quot;and&quot; and &lt;code&gt;+&lt;/code&gt; for &quot;or&quot;, we can read off the simplified equations in DNF:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;p3 = d3 *             /m0 * /m1   # d3 in mode 0&#xA;p2 = d2 *             /m0 * /m1   # d2 in mode 0&#xA;p1 = d1 * /b1             * /m1   # d1 for b=0,1 in mode 0 &amp;amp; 1&#xA;   + d1 *  b1       * /m0 * /m1   # d1 for b=2,3 in mode 0&#xA;   + d3 *  b1       *  m0         # d3 for b=2,3 in mode 1&#xA;p0 = d0 * /b1 * /b0               # d0 for b=0  &#xA;   + d0 *           * /m0 * /m1   # d0 for mode 0&#xA;   + d1 * /b1 *  b0 * /m0 *  m1   # d1 for b=1 in mode 2&#xA;   + d2 *  b1       *  m0 * /m1   # d2 for b=2,3 in mode 1&#xA;   + d2 *  b1 * /b0 * /m0 *  m1   # d2 for b=2 in mode 2&#xA;   + d3 *  b1 *  b0 * /m0 *  m1   # d3 for b=3 in mode 3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now let's set &lt;code&gt;m0=1&lt;/code&gt; and &lt;code&gt;m1=1&lt;/code&gt;, and see what happens in Mode 3:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Counter     Mode 3&#xA;b2 b1 b0   p3 p2 p1 p0&#xA;--------   -----------&#xA; 0  0  0    0  0  0 d0&#xA; 0  0  1    0  0  0 d0&#xA; 0  1  0    0  0 d3  0&#xA; 0  1  1    0  0 d3  0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So for our implementation, Mode 3 is 320x200 with 2 colors, using bits d0, d3, d4 and d7 to select the pen for the color. (I've probably made a mistake somewhere, but it still illustrates the principle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the real Gate Array uses a different design: Maybe a shift register instead of a counter, or CNF instead of DNF, or internally negated values, or ... But the effect is the same: Simplifying the boolean equations leads to an unintended mode that &quot;sort of, but not really&quot; does something useful. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(BTW, a similar thing happens for the &quot;undocumented&quot; opcodes of the 6502). &lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-09-16T13:10:21.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1485" PostTypeId="1" AcceptedAnswerId="1500" CreationDate="2016-09-17T12:13:11.340" Score="7" ViewCount="571" Body="&lt;p&gt;I ran into this question a few times and couldn't find any acceptable answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once I was trying to reverse engineer a card that had chips like Intel's 8255 PPI, 8226 bus drivers and some other ICs. I ended up redrawing the needed part of the schematic on a sheet of paper and later forgot about this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I am slowly working on my homebrew computer project using 8080 CPU and have some further plans for a board with 8086/8087 or 80188 in my head. Once again I can't find some of the components I want to use in any of the libraries on the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Knowing that retro computer builders and various tinkerers have to have some way to draw their schematics, I wonder whether I am bad at searching or does nobody use KiCad for this job?&lt;/p&gt;&#xA;" OwnerUserId="156" LastActivityDate="2016-09-24T10:58:11.797" Title="Is there a KiCad library with parts used in retrocomputers?" Tags="&lt;hardware&gt;&lt;utilities&gt;&lt;homemade&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1486" PostTypeId="1" AcceptedAnswerId="1792" CreationDate="2016-09-17T21:59:36.480" Score="8" ViewCount="3285" Body="&lt;p&gt;I have acquired an Amiga 500 that seems fully functional, but the floppy disk drive seems to have mechanical issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could get it to read a few floppy disks until the last one wouldn't pop out when pushing the release button of the floppy drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I disassembled the Amiga 500 and got the floppy drive out of its metal casing to diagnose the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently, the little plastic arm that is supposed to pull back the floppy disk's metal shutter and push the floppy disk out doesn't move when pushing the release button. Pushing it with a screwdriver unstucks it and makes it push the floppy disk out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There seems like there was lube on it at some point but it seems dried out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, when I fix it, it ends up with the same problem after inserting and popping out a floppy disk for a few times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What can I do to fix the Amiga 500 floppy disk drive? If I need to lube it, where should I and how should I do so? Or is it that the springs are too loose and old?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="11916" LastEditDate="2019-04-16T23:49:25.007" LastActivityDate="2019-04-16T23:49:25.007" Title="Repairing/Lubing/Fixing Amiga 500 floppy drive" Tags="&lt;amiga&gt;&lt;floppy-disk&gt;&lt;repair&gt;&lt;restoration&gt;&lt;amiga-500&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1487" PostTypeId="2" ParentId="1486" CreationDate="2016-09-19T09:04:43.293" Score="6" Body="&lt;p&gt;It is possible that the old lubrication on the sticking part has absorbed some fluff or grit and so is no longer working as a lubricant.  The build-up of muck could be around the point where the arm latches.  Your screwdriver trick could be freeing it enough to work for a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would clean the part as much as possible.  Use a residue-free solvent - I always use cigarette lighter fluid - dabbed gently on the part to lift the old lubricant and clean the parts.  Brush with an artist's paintbrush to flick off any debris.  Also use the same cleaning technique on the springs themselves.  Any muck that is may stick adjacent coils together will impair their function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the solvent has evaporated and you are happy that the part is clean then use a very light lubrication.  The best lubricants I have found for these purposes is Teflon-based, e.g. Triflon.  However, they are expensive and not always easy to find.  Watchmaker's Oil is a close runner up.  Put a needle into the bottle to pick up only a very small drop for transfer onto the mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That should give you a few more years of service.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-09-19T09:04:43.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1488" PostTypeId="2" ParentId="1482" CreationDate="2016-09-19T19:25:42.513" Score="11" Body="&lt;p&gt;In general, the IIgs was designed to have a full house in regards to expansion cards, just like every other member of the expansion slot Apple II family. There are guidelines for how much power a card can draw. However, there are not guidelines how how much heat a card can produce. Despite this, I'm not aware of any expansion cards from the era that produced excessive heat as the voltage and draw was much lower in those days; the &quot;cook your eggs&quot; measurements we see today with CPUs / GPUs more or less didn't really exist back then. I want to say that I've read in the past that the maximum draw per-card is around 300-500ma which doesn't translate to a heck of a lot of heat, but then again I'm not an expert on that topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, it was always considered a good idea to put a fan on the system and many people opted for the Kensington System Savers that had a small fan to draw air through the machine. When I ran a BBS back in the day with 7 cards and a RocketChip in my //e, I would never describe the temperature of the air coming out of the KSS fan as more than &quot;slightly warm&quot;. However, it was understood that having a fan would increase the life of the components in the machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately it seems that you're concerned about your power supply. The PSU in a IIgs was all you needed and I don't recall seeing aftermarket upgrades for higher wattage units like we do today. We simply don't have the same wattage .. err.. &quot;arms race&quot; with the 8-bit kit from the 80s. But if you are concerned about your PSU, there are two things you could do:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Get a new &lt;a href=&quot;https://www.reactivemicro.com/product-category/power_supply/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PSU&lt;/a&gt; or refurbish it (i.e. inspect, re-cap, re-solder, etc.).&lt;/li&gt;&#xA;&lt;li&gt;Get a Kensington Saver GS or some other fan for the unit.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Doing #1 will probably be the best route since you're guaranteeing the machine will not have power problems for at least a decade. While you're at it, make sure the battery is fresh (I think they were removable in the ROM 03) since that is the more likely cause of IIgs death!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE 2016-09-20:&lt;/strong&gt; Slight update. I stated that I didn't recall aftermarket PSUs for the II, but come to think of it there &lt;em&gt;was&lt;/em&gt; the &lt;a href=&quot;http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Hard%20Disk%20Drive%20Controllers/AE%20Vulcan/Photos/Vulcan%20-%20Ad%202.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vulcan hard disk&lt;/a&gt; from Applied Engineering which was effectively a replacement 70 watt PSU with hard drive built in (and accompanying controller card). If anything is going to be a draw on an Apple II besides the disk drives (which could only run one at a time anyway), a spinning HDD would be it and I'm assuming the Vulcan covered the bases.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2020-03-09T17:58:48.280" LastActivityDate="2020-03-09T17:58:48.280" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="1489" PostTypeId="1" CreationDate="2016-09-19T19:25:54.373" Score="12" ViewCount="3672" Body="&lt;p&gt;Modern computers use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Graphics_processing_unit&quot;&gt;graphics&amp;nbsp;processing&amp;nbsp;unit&lt;/a&gt; in order to provide hardware-accelerated graphical operations. Conceptually, I am used to thinking about graphics as a bidimensional array of pixels obeying a format such as &lt;code&gt;RGBA8&lt;/code&gt;. This data gets written to a display device at some fixed rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In comparison, it seems older hardware made use of different abstractions. For example, the&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Nintendo_Entertainment_System&quot;&gt;Nintendo&amp;nbsp;Entertainment&amp;nbsp;System&lt;/a&gt; made use of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Picture_Processing_Unit&quot;&gt;picture&amp;nbsp;processing&amp;nbsp;unit&lt;/a&gt; that apparently implemented the concepts of sprites, tiles, backgrounds and color palettes directly in hardware. Somehow, these concepts get merged into a complete picture and a signal is generated and sent to the TV. The article also mentions that collision detection registers were a common feature at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems graphics hardware used to be made with a specific domain in mind. Over time, they became more and more general-purpose. Now they can do &lt;a href=&quot;https://en.wikipedia.org/wiki/General-purpose_computing_on_graphics_processing_units&quot;&gt;general-purpose parallel computing&lt;/a&gt;, with many non-graphical applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can see why graphics hardware is evolving towards general parallel computing: the multi-core nature of modern GPUs makes it possible. Similarly, I would like to understand this shift from domain-specific to general-purpose graphics hardware.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How exactly do retro graphics hardware differ in relation to modern graphics cards? What did they do that modern hardware doesn't do anymore?&lt;/li&gt;&#xA;&lt;li&gt;What explains these differences? What properties of the technology of the time justified them?&lt;/li&gt;&#xA;&lt;li&gt;Why do we not use the notion of sprites and tiles anymore? There must have been advantages to implementing them in hardware. Why were these concepts thrown away?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2162" LastActivityDate="2016-09-21T07:59:49.263" Title="Computer graphics before the modern GPU" Tags="&lt;hardware&gt;&lt;graphics&gt;&lt;history&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="4" ClosedDate="2016-09-25T02:54:29.873" ContentLicense="CC BY-SA 3.0" />
  <row Id="1490" PostTypeId="2" ParentId="1489" CreationDate="2016-09-19T21:04:37.233" Score="17" Body="&lt;p&gt;The first notable system to use sprite graphics (Atari 2600) did so because its RAM was nowhere near large enough to hold the contents of an entire display in any kind of bitmap format.  Even though it only has 128 bytes of RAM, it can produce a display 160 pixels wide by approximately 200 pixels high (it can go all the way from parts of the screen that are above the top of the bezel, to the parts below the bottom) in 128 colors.  By contrast, the RCA Studio 2 has 512 bytes of RAM total, but producing even a 64x32 pixel black and white display gobbles half of that.  The Fairchild Channel F has 2Kbytes of DRAM for its display backing store, but even with that is limited to a 102x64 pixel display in 4 colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the 8-bit computer and Nintendo Entertainment System era, it was common for games' backgrounds to be generated using a &quot;tiled graphics&quot; (also sometimes called &quot;character graphics&quot;) system which partitioned the screen into 8x8 tiles; for each tile, the display controller would fetch a byte or two of memory and use the fetched values as an index into a collection of 8x8 bitmaps (personal computers would typically fetch one byte and use it to select one of 256 8x8 bitmaps).  On some cartridge-based systems, the bitmaps would be stored in a ROM separate from the main RAM; even on computers where they were stored in RAM, changing the contents of a tile by changing a single byte was much faster than having to rewrite the data for an 8x8 block of pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even after machines got a large enough backing store to handle an entire bitmap display, sprites remained useful because display memory bandwidth was generally rather limited, and about half was generally consumed with hardware-generated fetches to feed the video circuitry.  Given that read-modify-write operations required the processor to do some work between the read and the write, the amount of content that could be processed during a frame was limited to about 1/6 to 1/2 of a screen worth of content.  By contrast, updating the location registers for a sprite would take almost no &#xA;time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the succeeding years, display memory bandwidth has improved to the point that it's possible to perform multiple full-screen read-modify-write operations in a single frame.  There is thus no longer much benefit to having a sprite-based video system merge data from multiple sources on the fly while outputting a video image to the display.  In earlier years, however, on-the-fly merging was hugely advantageous.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2016-09-20T20:47:37.723" LastActivityDate="2016-09-20T20:47:37.723" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1491" PostTypeId="5" CreationDate="2016-09-20T10:20:30.177" Score="0" Body="&lt;p&gt;Shielding of components may be for electromagnetic and / or physical protection.&lt;br&gt;&#xA;Use this tag for questions regarding the use or repair of shielding.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-09-20T10:20:30.177" LastActivityDate="2016-09-20T10:20:30.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1492" PostTypeId="4" CreationDate="2016-09-20T10:20:30.177" Score="0" Body="For questions regarding shielding incorporated within retrocomputers" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-09-20T10:20:30.177" LastActivityDate="2016-09-20T10:20:30.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1493" PostTypeId="1" AcceptedAnswerId="1499" CreationDate="2016-09-20T15:45:13.983" Score="13" ViewCount="1501" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_Model_100&quot;&gt;TRS-80 Model 100&lt;/a&gt; portable officially allowed for RAM expansion to 32k and an external acoustic coupler for the model. What other upgrades and peripherals exist for the Model 100? I had one of these second hand, and they have great battery life and true portability (about 3 lb) unlike most of the 80s &lt;em&gt;portables&lt;/em&gt; which &lt;a href=&quot;http://lowendmac.com/1989/mac-portable/&quot;&gt;weighed 16&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Compaq_Portable&quot;&gt;even 28 lb&lt;/a&gt;!&lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="7208" LastEditDate="2019-09-13T01:53:49.877" LastActivityDate="2019-09-13T01:53:49.877" Title="Upgrades for the TRS-80 Model 100 portable" Tags="&lt;hardware&gt;&lt;hardware-mods&gt;&lt;trs-80-model-100&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1494" PostTypeId="1" AcceptedAnswerId="1496" CreationDate="2016-09-20T19:22:32.103" Score="24" ViewCount="1685" Body="&lt;p&gt;(Note: a &lt;a href=&quot;https://retrocomputing.stackexchange.com/revisions/1494/1&quot;&gt;previous version&lt;/a&gt; of this question asked about the &lt;em&gt;CAS&lt;/em&gt; instruction, that was added by Motorola from the MC68020; the original one is the &lt;em&gt;TAS&lt;/em&gt; instruction).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TAS is the acronym for &lt;strong&gt;T&lt;/strong&gt;est &lt;strong&gt;A&lt;/strong&gt;nd &lt;strong&gt;S&lt;/strong&gt;et, an instruction that is used to create multiprocessor-safe shared data structure. The MC680x0 instruction set reference describes its operation as:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Tests and sets the byte operand addressed by the effective address&#xA;  field. The instruction tests the current value of the operand and sets&#xA;  the N and Z condition bits appropriately. TAS also sets the high-order&#xA;  bit of the operand. The operation uses a locked or read-modify-write&#xA;  transfer sequence. This instruction supports use of a flag or&#xA;  semaphore to coordinate several processors.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The atomicity is realized via a special bus cycle that external peripherals must not break. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The official Amiga programming guidelines state that TAS must not be used on an Amiga as it can lock the machine. As far as I remember, the reason is that Agnus can't deal with this special cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Was this later fixed in one of the latter Agnus revisions (Fat Agnus, Super Agnus) and/or AA's Alice?&lt;/li&gt;&#xA;&lt;li&gt;Is is really only Agnus (or Denise/Lisa and Paula too) the culprit or are the &quot;glue logic&quot; chips (Gary, Fat Gary, Gayle, Buster, Super Buster, Bridgette, Ramsey...) responsible for it too?&lt;/li&gt;&#xA;&lt;li&gt;Does it affect all of the 24 bit original address space or just Chip RAM access (e.g., does it work in &quot;Slow Fast&quot; RAM? Does it work in the Zorro II address space?)&lt;/li&gt;&#xA;&lt;li&gt;Is the address space above the 16MB marker free of the problem?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="276" LastEditDate="2017-05-18T08:24:43.537" LastActivityDate="2019-10-28T00:14:41.843" Title="Was the MC680x0's TAS instruction forbidden on Amiga systems only when operating in CHIP memory?" Tags="&lt;amiga&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1495" PostTypeId="2" ParentId="1489" CreationDate="2016-09-21T07:59:49.263" Score="4" Body="&lt;p&gt;Actually, most of the retro computers I am working with didn't have any fancy extensions to the graphics hardware - They just had simple, plain frame buffer hardware. Dedicated graphics hardware to do fancy things like sprites was expensive, and it had to be custom chips that were even more expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Sinclair range of computers had a frame buffer and nothing else, and the Atari ST as well (it did get the Blitter chip later on, but that is a rather straightforward memory-move chip with no sprite support whatsoever), and the Acorn and Amstrad computers had pretty straightforward graphics hardware as well AFAIK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore was in a comfortable situation that they had their own chip factory - Thus it was quite obvious for them to create the VIC as a special graphics chip.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2016-09-21T07:59:49.263" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1496" PostTypeId="2" ParentId="1494" CreationDate="2016-09-22T09:00:31.420" Score="14" Body="&lt;p&gt;In order to detect whether the bus is &quot;free&quot; to access and it is safe to halt the CPU, take over the bus and access memory and peripherals, the Agnus and later DMA chips monitor the control bus for a CPU access. The first part of the TAS cycle &quot;looks&quot; to the Agnus like every normal memory read cycle, and once the read part of the cycle is done, Agnus will assume it can halt the CPU. This was an omission of this specific bus condition in the Agnus design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &quot;normal&quot; cycles, the 68k would then just stop and put its bus output into tri-state, effectively releasing the bus for access from external devices. While a TAS cycle is happening, it will, however &lt;strong&gt;not&lt;/strong&gt; do that, but keep on running and driving the bus until its TAS write part of the cycle is finished, even if /HALT is asserted by Agnus. Now we have two devices driving the bus and basically everything from nothing (because Agnus doesn't &quot;need&quot; the bus at the moment) to bad (Agnus writing to memory concurrently with the CPU) to disaster (bus lock because of undefined control bus states) can happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pretty much anything you can do with a TAS instruction on an Amiga (if you could) can also be achieved with a BTST.B instruction - TAS is partially redundant and easy to avoid. Thus, I don't think Agnus or its descendants have ever been updated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the TAS issue is not in any way related to &lt;em&gt;addresses&lt;/em&gt;, but rather bus sharing (Agnus thinks it owns the bus but doesn't), my guess is it would happen in &lt;em&gt;any&lt;/em&gt; address range - For the problem to occur, it is actually totally irrelevant afaik what's on the address bus.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="278" LastEditDate="2016-09-22T10:31:47.653" LastActivityDate="2016-09-22T10:31:47.653" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="1497" PostTypeId="5" CreationDate="2016-09-22T15:24:02.563" Score="0" Body="&lt;p&gt;The Motorola 68000 (also known as the m68k or Motorola 68k) is a 32-bit CISC microprocessor with a 16-bit external data bus, designed and marketed by Motorola Semiconductor Products Sector.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-22T18:46:42.123" LastActivityDate="2016-09-22T18:46:42.123" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1498" PostTypeId="4" CreationDate="2016-09-22T15:24:02.563" Score="0" Body="For questions about the Motorola 68000 microprocessor" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2016-09-22T18:46:34.263" LastActivityDate="2016-09-22T18:46:34.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1499" PostTypeId="2" ParentId="1493" CreationDate="2016-09-22T16:47:58.593" Score="7" Body="&lt;p&gt;As you mentioned, you could upgrade TRS-80 Model 100's RAM to 32k.  You can also get a &lt;a href=&quot;http://bitchin100.com/wiki/index.php?title=REX&quot; rel=&quot;nofollow noreferrer&quot;&gt;REX&lt;/a&gt; chip, which uses the ROM expansion slot to provide additional flash memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TRS-80 Model 100 had several peripherals available (in addition to the acoustic coupler) including a cassette recorder, an external drive, a barcode reader, printers, and even a &quot;Disk/Video Interface&quot; that allowed you to connect up to two 184k disk drives and a TV or video monitor...&#xA;&lt;a href=&quot;https://i.stack.imgur.com/W63Xi.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W63Xi.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could even use a &quot;null modem&quot; to connect the 100 to other TRS-80 computers to transfer files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a &lt;a href=&quot;ftp://ftp.whtech.com/club100/doc/TRS80-M100-User-Guide.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;link to the user manual&lt;/a&gt;.  The peripheral connection guidelines are in Appendix A.&lt;/p&gt;&#xA;" OwnerUserId="125" LastEditorUserId="125" LastEditDate="2016-09-26T16:25:47.483" LastActivityDate="2016-09-26T16:25:47.483" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1500" PostTypeId="2" ParentId="1485" CreationDate="2016-09-24T10:58:11.797" Score="5" Body="&lt;p&gt;People &lt;em&gt;do&lt;/em&gt; use KiCad for this job! The S100 Computers group have created many, many boards using KiCad (included in the list &lt;a href=&quot;//s100computers.com/My%20System%20Index%20Page.htm#My_System_Index_Table&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;) and provide the KiCad files used to create each of them. Including the relevant libraries. These will be in 2013 format, but you can convert them to a later format if neccesary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 8086 components, &lt;a href=&quot;//s100computers.com/My%20System%20Pages/8086%20Board/8086%20CPU%20Board.htm&quot; rel=&quot;noreferrer&quot;&gt;S100 Computers - 8086 CPU Board&lt;/a&gt; offers &lt;a href=&quot;//s100computers.com/My%20System%20Pages/8086%20Board/V1%20S100%208086.zip&quot; rel=&quot;noreferrer&quot;&gt;these KiCad files&lt;/a&gt;. I can't see any 8087 or 80118 boards on the list, but many of the components will be the same (I assume).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find much else online, save a few tutorials on how to create your own components. If you know enough about the components you need, you could try creating them yourself.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2016-09-24T10:58:11.797" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1501" PostTypeId="1" CreationDate="2016-09-24T20:34:46.637" Score="14" ViewCount="2821" Body="&lt;p&gt;I have acquired an old motherboard with a socket 462 and a &lt;strong&gt;AMD Duron&lt;/strong&gt; (I think its a &quot;&lt;strong&gt;Spitfire&lt;/strong&gt;&quot; model 3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The copyright on the CPU is from &lt;strong&gt;1999&lt;/strong&gt; and it apparently doesn't require a dedicated CPU fan as the motherboard only came with a heatsink.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a quick search, I found that it is a &lt;strong&gt;600 to 950 MHz&lt;/strong&gt; CPU, I also read that it was a &quot;low-end&quot; CPU at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I plan on building a retro DOS/Windows 98 gaming rig with an &lt;strong&gt;ISA SoundBlaster 16&lt;/strong&gt; sound card and a &lt;strong&gt;Voodoo 2&lt;/strong&gt; graphics card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I run Windows 98, games from the era (&lt;em&gt;1998 Half-Life, 2000 Sacrifice...&lt;/em&gt;) and older MS-DOS ones (&lt;em&gt;1993 Syndicate, 1993 Protostar, 1994 Myst...&lt;/em&gt;) efficiently on this processor?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorDisplayName="user12" LastEditDate="2017-02-02T19:56:33.047" LastActivityDate="2017-02-12T22:51:53.157" Title="Can I run Windows 98 and games from the same era on an AMD Duron CPU?" Tags="&lt;hardware&gt;&lt;ms-dos&gt;&lt;gaming&gt;&lt;windows-98&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1502" PostTypeId="2" ParentId="1501" CreationDate="2016-09-24T20:41:32.663" Score="4" Body="&lt;p&gt;Depending on the heatsink quality, I'd be hesitant to run the Duron fanless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would be equivalent to a low-end PentiumIII - I'd expect W98 to run ok and run period games ok.  &lt;/p&gt;&#xA;" OwnerUserId="599" LastActivityDate="2016-09-24T20:41:32.663" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1503" PostTypeId="1" AcceptedAnswerId="1504" CreationDate="2016-09-25T00:49:29.863" Score="7" ViewCount="403" Body="&lt;p&gt;I have acquired a &lt;strong&gt;Sony MSX HB-501&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;F&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;F stands for France, it only defines the keyboard's layout&lt;/em&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is fully functionnal, I can play games from cartridges on it and it displays MSX-BASIC if no cartridges are inserted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that I got it without its original manual, and so I have a hard time figuring out how some features work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it was a high-end personal computer at the time, I read that it has a few office programs in ROM, such as an address book and an agenda.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that if its in the computer's ROM, the settings must be saved to a data cartridge (there were 4KB data cartridges) or cassette tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My only problem being that I don't know how to run those programs from the ROM. Moreover, I'm not even sure there are any program in ROM as I couldn't find any relevant documentation on how to run them, I could only find mentions of their existence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, is there really any program stored in ROM on an Sony MSX HB-501 apart from MSX-BASIC? If so, how can I run them?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastActivityDate="2018-04-07T03:31:27.880" Title="ROM programs on the Sony MSX HitBit HB-501" Tags="&lt;rom&gt;&lt;msx&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1504" PostTypeId="2" ParentId="1503" CreationDate="2016-09-25T01:21:05.393" Score="5" Body="&lt;p&gt;The 501 series only came with the bundled productivity software on tape, unlike earlier models like the HB-101P and HB-201P that had it in firmware.  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The provided English software on tape is the same as the built-in&#xA;  firmware on HB-101P and HB-201P. &lt;a href=&quot;https://www.msx.org/wiki/Sony_HB-501F&quot;&gt;HB-501F&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you look at this description for the 101 series, for example, it states that&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The firmware is launched automatically when you boot the machine. It's&#xA;  an English version of the original Japanese software ... from MSX-BASIC, you can go back to the Personal Databank with CALL HITBIT or _ HITBIT. &lt;a href=&quot;https://www.msx.org/wiki/Sony_HB-101P&quot;&gt;HB-101P&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Its a menu you're presented with immediately that you have to exit out of to get to actually drop down to BASIC.&lt;/p&gt;&#xA;" OwnerUserId="320" LastEditorUserId="320" LastEditDate="2016-09-25T01:31:51.987" LastActivityDate="2016-09-25T01:31:51.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1505" PostTypeId="1" CreationDate="2016-09-25T02:29:38.250" Score="9" ViewCount="340" Body="&lt;p&gt;I have a pretty decent collection of retro computers, but I have always been a Commodore and Apple guy.  I recently picked up an Atari 800XL and a 1050 disk drive, so I am investigating the methodology for imaging Atari disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have extensive experience with the ADT (Apple Disk Transfer) tool and StarCommander (C64 disk transfer).  Both connect to a PC via the serial or parallel port, and I was able to get both working using nothing more than some homebrew cables (and the hard work of the authors of those fantastic programs).  I also already had working disks from high school, so I had access to terminal software, DOS, etc...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is a similar technique for Atari disk imaging available (ie. whip up a cable and download some nifty utility and off you go)?  And will my lack of any existing disks impede my attempts?  For example, to display my ignorance, did Atari boot DOS from disk? Would I need a bootable disk to get started? Or terminal software and a null modem? Etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize I have grouped a few discrete questions together here, but what I am driving for is a general overview of the methodology and requirements for imaging Atari disks, including pros/cons and possible &quot;gotchas&quot;.  Any kick in the right direction is most appreciated.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="2081" LastEditDate="2017-02-02T15:02:17.420" LastActivityDate="2017-02-02T15:02:17.420" Title="Methodology for imaging Atari disks" Tags="&lt;disk-image&gt;&lt;atari-800&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1506" PostTypeId="2" ParentId="1501" CreationDate="2016-09-25T06:14:01.440" Score="20" Body="&lt;p&gt;A Duron of this era is a cut-down version of a Thunderbird Athlon, and is broadly comparable to a Coppermine (Pentium III) Celeron. Paired with the right audio/video hardware, it's absolutely capable of playing most 1990s DOS games, although a few (and an even larger number of 1980s games) may have trouble with it running too fast. It will also run Windows just fine (probably Windows 3 through Windows 2000, perhaps XP), Linux, and OS/2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would definitely not suggest running a Duron fanless; they have TDPs from 30 to 40 watts depending on speed (about 10 watts higher than contemporary Pentium IIIs), and it would take a rather substantial heatsink to keep it cool without forced airflow. I know that some manufacturers back then were still just strapping on a tiny heatsink and no fan in budget machines, but I also remember those machines being very crash-prone, and &quot;repairing&quot; a number of them just by adding a modest HSF.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2016-09-25T06:14:01.440" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1507" PostTypeId="1" CreationDate="2016-09-25T13:08:13.143" Score="6" ViewCount="1456" Body="&lt;p&gt;SyQuest made portable hard drive diskettes. I believe they have been out of business going on a couple of decades. At any rate I have some disks and the hardware, but I am unable to find drivers. I would really like to get at the data I have on these disks (Some old pictures). Unfortunately I keep hitting dead ends trying to find drivers. &#xA;So were can I find drivers for a modern windows OS, or what could be other alternatives?&lt;/p&gt;&#xA;" OwnerUserId="370" LastActivityDate="2017-10-15T15:18:19.783" Title="Where can I find windows 10 driver for old Syquest Drives?" Tags="&lt;hard-disk&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="1508" PostTypeId="2" ParentId="1505" CreationDate="2016-09-25T14:02:45.297" Score="8" Body="&lt;p&gt;Well, after spending some time googling last night I have discovered something called SIO2PC.  This is probably old news to the Atari fans out there, but in case anyone is having the same initial questions I was, I thought I would answer my own question with what I have learned.  Please feel free to correct me if I get this wrong, or add more information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically SIO2PC is a small hardware adapter that converts the 0v/+5v TTL signals on the Atari SIO (which I assume stands for serial I/O) port into +/-12v RS232 signals for a PC serial adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scrounging around the authors web site it appears his solution is to use an 232-max IC and some supporting circuitry.  If you have any inclination towards do-it-yourself electronics, this would not be a difficult project.  I think the hardest part is going to be figuring out where to source an Atari SIO connector to cannibalize.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, you simply load up the software on the PC side, connect the cable/adapter between the Atari SIO and the PC, and the Atari will apparently think it has a disk drive attached.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, from what I can gather, this project must have come early enough that it set the de-facto standard for Atari disk images, which are files with a .ATR extension.  It looks like most desktop Atari emulators support the .ATR file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't put any of this to the test (yet) so YMMV.  But you can find SIO2PC at this address: &lt;a href=&quot;http://pages.suddenlink.net/wa5bdu/sio2pc.htm&quot;&gt;http://pages.suddenlink.net/wa5bdu/sio2pc.htm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2016-09-25T14:02:45.297" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1509" PostTypeId="1" CreationDate="2016-09-25T16:17:04.737" Score="4" ViewCount="215" Body="&lt;p&gt;I have acquired a &lt;strong&gt;Zenith SupersPort 286e&lt;/strong&gt; without its battery but with its (&lt;em&gt;seemingly working&lt;/em&gt;) power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sadly, the computer doesn't boot at all, nothing happens when I flick the On/Off switch. The power supply seems to work as it does a small white noise when plugged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have disassemblied it and everything seems intact, no rusted or corroded parts, everything looks ok.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only thing that seems missing is a chip under the computer that is accessible via a small screwless trap. There is a 40 pin socket (2 rows of 20 pins) that measures 1.8 × 5 cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the only thing missing, and I think its only an extension as it can be accessed without disassemblying the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What could be the cause the this Zenith SupersPort 286e not booting at all? What component could be dead (motherboard, CPu, hard drive...) that could cause the computer to not do anything when turning on the computer?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="621" LastEditDate="2016-09-25T18:06:36.007" LastActivityDate="2016-09-27T20:12:47.080" Title="Zenith SupersPort 286e doesn't boot at all" Tags="&lt;hardware&gt;&lt;restoration&gt;&lt;repair&gt;&lt;boot&gt;&lt;zenith-supersport&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1510" PostTypeId="5" CreationDate="2016-09-25T18:07:32.700" Score="0" Body="&lt;p&gt;Zenith Data Systems introduced the SupersPORT SX portable computer in 1989. It featured 16 MHz 80386SX processor, 40 MB hard drive, 1.44 MB floppy drive, 1 MB RAM, 10-inch monochrome VGA LCD screen, MS-DOS 3.3.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-26T09:19:10.237" LastActivityDate="2016-09-26T09:19:10.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1511" PostTypeId="4" CreationDate="2016-09-25T18:07:32.700" Score="0" Body="For questions about the Zenith SupersPORT line of portable computers" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-26T09:19:13.593" LastActivityDate="2016-09-26T09:19:13.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1512" PostTypeId="1" AcceptedAnswerId="1519" CreationDate="2016-09-25T15:52:02.213" Score="8" ViewCount="2643" Body="&lt;p&gt;I have been hunting around to find a replacement flat panel monitor to replace the honking CRT in a 1980's Atari centipede machine. The existing monitor supports 15 kHz RGB which is not really component video or VGA.  I have seen several converters for CGA to VGA, but I am not 100% certain that the CGA has anything to do with RGB.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone have a recommendation for sourcing the right monitor or converters specifically for going from the Atari 80's RGB to VGA?  Really hoping that folks with experience doing this conversion on that vintage of arcade machine respond.&lt;/p&gt;&#xA;" OwnerUserId="3349" OwnerDisplayName="Rich Maes" LastEditorUserId="15334" LastEditDate="2020-12-27T17:18:02.877" LastActivityDate="2020-12-27T17:18:02.877" Title="Converting from 15 kHz RGB to VGA for an 80's Atari Centipede arcade machine?" Tags="&lt;arcade&gt;&lt;color-display&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1513" PostTypeId="2" ParentId="1512" CreationDate="2016-09-26T13:20:33.580" Score="2" Body="&lt;p&gt;I bought a 15&quot; LCD TV two years ago which has RGB inputs, although checking the maker's website just now, I don't think their current models handle it.  I would suggest searching for TVs sold to the Caravan / Motorhome or Boating markets.  These tend to support multiple input types as they are intended for use in a different location every night - possibly taking different signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is certainly possible to convert RGB to VGA - or HDMI if you wish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of electronics shops that sell converter boxes.  You will be able to find one near you.&lt;br&gt;&#xA;Things to check for are whether the box upscales includes synch (RGBSync) or includes audio.  Check too (obviously) that it supports your input frequency.  15kHz RGB is not that uncommon.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-09-26T13:20:33.580" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1514" PostTypeId="1" AcceptedAnswerId="1529" CreationDate="2016-09-26T13:38:28.773" Score="62" ViewCount="29113" Body="&lt;p&gt;The cartridge of Sonic &amp;amp; Knuckles is a little special:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IQWtz.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IQWtz.jpg&quot; alt=&quot;S&amp;amp;K Cartridge&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It flips open to allow you to connect another Sega Mega Drive (Genesis in US) cartridge to the top of it like so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pRngC.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pRngC.jpg&quot; alt=&quot;Sonic 3 connected to S&amp;amp;K&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know &lt;em&gt;why&lt;/em&gt; the Sega developers did this: the time constraints of developing Sonic 3 coupled with the large size of the game files meant that they chose to split 'Sonic 3' into the two separate game parts (Sonic 3, and Sonic &amp;amp; Knuckles). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, they also wanted the full game to be playable as one complete package: Sonic 3 &amp;amp; Knuckles, so they invented what they called 'Lock-On Technology' to allow the games to connect. (There's also the ability to connect to Sonic 2 (to play as Knuckles), as well as a hidden section of minigames if you connect with Sonic 1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, &lt;strong&gt;how&lt;/strong&gt; exactly does the Lock-On Technology work? Are the game ROMs merged in some way when connected? How does the Sonic &amp;amp; Knuckles cart detect another cartridge?&lt;/p&gt;&#xA;" OwnerUserId="3352" LastEditorUserId="621" LastEditDate="2016-09-26T14:15:48.257" LastActivityDate="2020-10-16T17:59:34.953" Title="How exactly does Sonic &amp; Knuckles' 'Lock-On Technology' work?" Tags="&lt;gaming&gt;&lt;game-cartridge&gt;&lt;sega-genesis&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="1515" PostTypeId="2" ParentId="1501" CreationDate="2016-09-26T14:07:47.263" Score="7" Body="&lt;p&gt;I had one of these for quite a while (better part of a decade) running in a box that I used as a household print/file server.  I had it running Fedora Linux (started with Core 5, upgraded to 9 later on) without issues.  It did have a (small) CPU fan.  I got the machine second-hand from a garage sale, so I probably added the fan myself (it's been a while, can't remember exactly).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did play a few games on it (before it was relegated to server status), mostly older Linux-based titles (like &lt;a href=&quot;https://en.wikipedia.org/wiki/Armagetron_Advanced&quot;&gt;Armagetron&lt;/a&gt;), as well as some of the older Sierra adventure games (&lt;a href=&quot;https://en.wikipedia.org/wiki/Space_Quest_I&quot;&gt;Space Quest&lt;/a&gt; 1-3, &lt;a href=&quot;https://en.wikipedia.org/wiki/Police_Quest:_In_Pursuit_of_the_Death_Angel&quot;&gt;Police Quest&lt;/a&gt; 1-2) with &lt;a href=&quot;https://en.wikipedia.org/wiki/DOSBox&quot;&gt;DOSBox&lt;/a&gt;.  But at one point I did get it to run &lt;a href=&quot;https://en.wikipedia.org/wiki/Unreal_Tournament&quot;&gt;Unreal Tournament&lt;/a&gt; (via &lt;a href=&quot;https://en.wikipedia.org/wiki/Wine_(software)&quot;&gt;WINE&lt;/a&gt;), just to see if it could do it (it could, but not well).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yes, I think it should run Windows 98 and early/mid 90's games just fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: It should go without saying, but I'd be &lt;em&gt;really&lt;/em&gt; careful these days going on the internet with Windows 98.  Might be a good idea to see if it'll run a newer version of Firefox, just in case you need to go and download something.&lt;/p&gt;&#xA;" OwnerUserId="125" LastActivityDate="2016-09-26T14:07:47.263" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1516" PostTypeId="5" CreationDate="2016-09-26T14:17:57.130" Score="0" Body="&lt;p&gt;A 16-bit home video game console which was developed and sold by Sega.  Released in Japan on October 29, 1988.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-27T09:42:10.273" LastActivityDate="2016-09-27T09:42:10.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1517" PostTypeId="4" CreationDate="2016-09-26T14:17:57.130" Score="0" Body="For questions on Sega's Genesis (Mega Drive) home video game console" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-09-27T09:42:15.933" LastActivityDate="2016-09-27T09:42:15.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1519" PostTypeId="2" ParentId="1512" CreationDate="2016-09-26T23:55:11.830" Score="8" Body="&lt;p&gt;The GBS8220 seems to be the standard way to use modern VGA monitors on old arcade machines. Do you know for sure if your Centipede machine outputs CGA/EGA (digital RGBI), or is it 15 kHz VGA (analog RGBHV)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://15khz.wikidot.com/&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is a list of flat panel monitors that support 15 kHz analog RGBHV signals. But they often come with caveats, such as you have to fiddle to get the image centered and sized to fill the screen every time you turn it on. Also, the viewing angle may be narrow, depending on the LCD technology used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And &lt;a href=&quot;http://retrogaming.hazard-city.de/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; is a list of video processors that can convert various 15 kHz signals (RGBHV, RGsB, RGBS, etc.) to modern VGA (31 kHz) and HDMI/DVI signals. Some cost as little as USD$30, but if playability is important, look for a video processor that adds as little lag as possible.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2016-09-27T21:05:46.363" LastActivityDate="2016-09-27T21:05:46.363" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1520" PostTypeId="2" ParentId="1512" CreationDate="2016-09-27T00:07:06.017" Score="1" Body="&lt;p&gt;Some VGA monitors may sync down to 15.75KHz; if you can find one that will handle that rate, that will be the easiest approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also some converters that will attempt to convert 15.75Khz video to VGA by doubling every scan line.  The result doesn't quite match normal VGA spec, but it's close.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't looked at the Centipede schematic, but I would expect that it might be possible to use a small ARM chip to perform the appropriate conversion if you could get the timing right.  Using the FlexIO modules of something like a Freescale KL27, the ARM would need to accept about 250,000 pairs of 32-bit words per second worth of pixel data from the game, and output about 500,000 pairs of words.  That should be within the realm of feasibility if the ARM code didn't have to do anything else.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-09-27T00:07:06.017" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1521" PostTypeId="1" CreationDate="2016-09-27T17:23:09.740" Score="3" ViewCount="367" Body="&lt;p&gt;I have acquired a &lt;strong&gt;Zenith SupersPort 286e&lt;/strong&gt; portable computer without its battery and the external power supply unit seems dead (corrosion and/or leaking capacitors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that the power suppy is &lt;strong&gt;16.5 Volts&lt;/strong&gt; (DC) and &lt;strong&gt;2 Amps&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find any new 16.5 Volts external power supply as it isn't a standard anymore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went to a specialist (the owner of a shop specialized in batteries and power supplies) and he told me that I could try a &lt;strong&gt;16 Volts&lt;/strong&gt; power supply with &lt;strong&gt;2.2 Amps&lt;/strong&gt; to compensate for the missing 0.5 Volts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find any precise documentation on the power supply for this computer. The only other thing I found out is that &lt;strong&gt;the battery was 12 Volts&lt;/strong&gt; (I couldn't find how many Amps it had).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how can I choose the right power supply? Should I listen to the specialist (a 33€ power supply that goes from 9 to 24 Volts with 2.2 Amps), should I go for a 12 Volts power supply (like the battery was, but still, I don't know how many Amps it was)? Or am I completly wrong and I should go for something else completly?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastActivityDate="2016-09-27T19:39:39.497" Title="External power supply for 16.5V portable computer (Zenith SupersPort 286e)" Tags="&lt;hardware&gt;&lt;power&gt;&lt;new-hardware-adaptation&gt;&lt;zenith-supersport&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1522" PostTypeId="2" ParentId="1521" CreationDate="2016-09-27T19:17:43.843" Score="4" Body="&lt;p&gt;The first thing to do is check the label on the computer to find out what its power input requirements are (it might be different from what the label on the power supply itself says).  Many devices will operate on a range of voltages and currents, and any power supply that falls in that range will work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, a Soekris net6501 can be purchased from the manufacturer with a 12V power supply, but if the power supply goes bad I don't actually need an exact replacement.  In fact, that system itself just requires 30 watts of power at any DC voltage between 6V and 25V.  I happened to have a Lenovo T42/T43 laptop power supply that produces 72 watts at 16V and it works just fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if the computer doesn't list a range of input voltages, it is likely that a reasonably close voltage will be good enough.  16V is only about 3% away from being correct so I think it's worth giving it a try.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The battery being rated at 12V is not by itself a good reason to assume that a 12V power supply will work (but it is a good reason to &lt;em&gt;suspect&lt;/em&gt; that a 12V power supply &lt;em&gt;may&lt;/em&gt; work, although I'd try the 16V one first).  Whether it would work or not depends on the system design.  I have no idea what the actual design is, but it is entirely plausible that the computer will actually run on any voltage from 10V through 24V, but any voltage 12V or lower won't allow the battery to charge, while any voltage higher than 18V will damage the battery (assuming you have one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also entirely plausible that any voltage higher than 14V would damage the battery.  This is of course unlikely if the original power supply was 16.5V, but are you sure the power supply you have is the one this computer originally came with?  Maybe the original power supply stopped working and a previous owner decided to use a 16.5V one as a replacement?  Remember, just because the power supply says Zenith doesn't mean it's the correct one for a Zenith SupersPort 286e.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2016-09-27T19:17:43.843" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1523" PostTypeId="2" ParentId="1521" CreationDate="2016-09-27T19:39:39.497" Score="4" Body="&lt;p&gt;Any power supply within about 5% of the rated voltage should work, so a 16V supply (or a 17V one) should work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're getting a modern switch-mode supply, you want the amperage rating to be at least as large as the one you're replacing, if not larger: I'd go for 2.5A or higher.  If you're getting an older transformer+rectifier supply, on the other hand, you want to match the rating as closely as possible without going under.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The adjustable power supply is probably your best bet, but make sure it can deliver the full 2.2 amps at 16 volts: some adjustable supplies give their amperage rating for a certain output voltage, and deliver more amps at lower voltages, and fewer at higher voltages.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-09-27T19:39:39.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1524" PostTypeId="2" ParentId="1509" CreationDate="2016-09-27T20:12:47.080" Score="2" Body="&lt;p&gt;After further inspection of the internal components of the computer, it seems like the internal &quot;power managing&quot; component where the electricity input is is dead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a fuse that is blown and some capacitors are leaking a brownish liquid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for the computer not booting seems pretty obvious now. I'm not sure I'll be able to repair it as I've never disoldered electronic components and replaced them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll see what I can do and I'll keep this question updated if I succesfully repair it.&lt;/p&gt;&#xA;" OwnerUserId="2109" LastActivityDate="2016-09-27T20:12:47.080" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1525" PostTypeId="1" CreationDate="2016-09-28T00:39:06.917" Score="15" ViewCount="444" Body="&lt;p&gt;The AmigaOS file protection bits allows for &lt;strong&gt;R&lt;/strong&gt;ead, &lt;strong&gt;W&lt;/strong&gt;rite, e&lt;strong&gt;X&lt;/strong&gt;ecute, &lt;strong&gt;D&lt;/strong&gt;elete permissions on files, similarly to Unix (save for the Delete permission). Additional bits are &lt;strong&gt;A&lt;/strong&gt;rchive (reset when a file is written), &lt;strong&gt;P&lt;/strong&gt;ure (signals that the program code is reentrant, thus it can be kept in memory to reduce disk swapping via the &lt;code&gt;RESIDENT&lt;/code&gt; command), &lt;strong&gt;S&lt;/strong&gt;cript (file is a shell script that can be run without using the &lt;code&gt;RUN&lt;/code&gt; command). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also an &lt;strong&gt;H&lt;/strong&gt; bit that however has two different historically accounted interpretations for its meaning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first interpretation is that it means &lt;strong&gt;H&lt;/strong&gt;idden; supposedly its effect is to hide the file in a directory listing issued in the shell; the idea was that it would be applied to &lt;code&gt;#?.info&lt;/code&gt; files (Workbench icon files) since they're uninteresting for the user. However, this looks unimplemented as neither the &lt;code&gt;DIR&lt;/code&gt; nor the &lt;code&gt;LIST&lt;/code&gt; command have options to optionally &quot;unhide&quot; hidden files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second interpretation is that it means &lt;strong&gt;H&lt;/strong&gt;old. Supposedly an executable that is both &lt;strong&gt;P&lt;/strong&gt;ure and &lt;strong&gt;H&lt;/strong&gt;old would automatically become resident after the first time it is executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which of the two interpretations is correct?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="79" LastEditDate="2020-01-05T15:40:14.480" LastActivityDate="2020-01-05T15:40:14.480" Title="What does the H protection bit mean under classic AmigaOS?" Tags="&lt;amiga&gt;&lt;operating-system&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1526" PostTypeId="1" AcceptedAnswerId="1530" CreationDate="2016-09-28T03:37:08.290" Score="10" ViewCount="1371" Body="&lt;p&gt;So I ordered the GBS-8200 (It's a v4.0) and tried to use it to convert the 15KHz RGBHV monitor output to VGA.  I did a direct connect to P11 with Red, Green, Blue and Hsync and Vsync and Video return into GND. It didn't work. What I then noticed was that only the CGA spec goes down to 15KHz.  I didn't read the original spec close enough.  My Bad.  The unit seems pretty flexible, but apparently hooking up to the RGBHV with a 15KHz video signal doesn't seem to work.  Anyone have any more thoughts on getting that video signal converted? &lt;a href=&quot;https://i.stack.imgur.com/dO962.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dO962.jpg&quot; alt=&quot;GBS-8200 format specs&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3349" LastActivityDate="2018-11-27T01:07:04.907" Title="Atari Centipede Video and the GBS-8200 didn't seem to work - looking for ideas" Tags="&lt;atari&gt;&lt;video&gt;&lt;arcade&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1527" PostTypeId="2" ParentId="1526" CreationDate="2016-09-28T04:49:50.487" Score="2" Body="&lt;p&gt;Normally the easiest way to get analog 15KHz RGBHV to something modern is to convert it to YCbCr/YPbPr (component video) since you only need a relatively simple circuit to shift the levels and combine the sync (if separate H and V). From the stat box it looks like your device might support it since it says it supports 480i which is 15KHz.  If you want to test to make sure plug in a composite input from a classic game console (standard yellow RCA) to the green (Y) line of the YPbPr input.  If you get a mono picture in all green, it should do 240p/480i (aka 15KHz) over the component port.&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2016-09-28T04:49:50.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1528" PostTypeId="2" ParentId="1525" CreationDate="2016-09-28T05:07:24.600" Score="12" Body="&lt;p&gt;The &lt;strong&gt;Hold&lt;/strong&gt; interpretation is the correct one for AmigaOS.  In the OFS and FFS file systems, if the H,P, E, and R bits are all set then a reentrant command will automatically become resident the first time its executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The confusion comes from the later SFS (Smart File System) which does use it as a &quot;hide&quot; bit despite that not being part of the original standard.  If this bit is set on an SFS file system the file will indeed be hidden, but since this wasn't the original intended function there is no switch for the dir or list commands to reveal hidden files meaning you have to remember or infer their presence to access them.&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2016-09-28T05:07:24.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1529" PostTypeId="2" ParentId="1514" CreationDate="2016-09-28T08:25:16.983" Score="86" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How does the Sonic &amp;amp; Knuckles cart detect another cartridge?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It checks the serial numbers of games; they can be found in the ROM's header. It probably detects all preceding Sonic the Hedgehog games since they all result in specific effects when locked-on.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Are the game ROMs merged in some way when connected?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It seems both games are simply mapped onto memory. This way, the executing game code gets access to the contents of both games.&lt;/p&gt;&#xA;&lt;p&gt;To better understand what this means, imagine a Sonic &amp;amp; Knuckles ROM with the complete contents of the Sonic the Hedgehog 3 ROM concatenated onto it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://docs.google.com/drawings/d/1bYEZHBCZCIMGC-uvZuWg4jOaeyv7ZETZQe9PU88uJno/pub?w=1137&amp;amp;h=573&quot; alt=&quot;Sonic &amp;amp; Knuckles and Sonic the Hedgehog 3&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;The address space represents memory the game code can access. The contents of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Read-only_memory&quot; rel=&quot;noreferrer&quot;&gt;read-only memory&lt;/a&gt; chips get &lt;em&gt;mapped&lt;/em&gt; onto the Mega Drive's 68k processor's 24-bit address space. The Mega Drive just sees two games, one after another. Incidentally, that's what a good dump of Sonic 3 &amp;amp; Knuckles looks like. This explains why the game works even in emulators that don't support any of the custom hardware inside the Sonic &amp;amp; Knuckles cartridge.&lt;/p&gt;&#xA;&lt;p&gt;Any game locked onto Sonic &amp;amp; Knuckles will probably have its ROM mapped onto the game's address space the same way. This means game's data is &lt;em&gt;made available&lt;/em&gt; for use by the Sonic &amp;amp; Knuckles game code; it does &lt;em&gt;not&lt;/em&gt; necessarily mean the data will be &lt;em&gt;used&lt;/em&gt;. Since Sonic &amp;amp; Knuckles was programmed to work with Sonic the Hedgehog 3, it makes extensive use of the data in the locked-on cartridge. Its handling of other games is far less sophisticated; apparently, it just uses the metadata found in the ROM's header to generate a unique Blue Spheres stage. If it detects that it's the first Sonic the Hedgehog game, it simply unlocks the full version of the bonus game.&lt;/p&gt;&#xA;&lt;p&gt;The connection to Sonic the Hedgehog 2 works similarly:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vQeNKgjPpKN-m24msxznacQ-BTYkJQB62DQD0yopX6N0D0fO7CpZQstL5maNbfuASLW5TG8wtDWhMoy/pub?w=1137&amp;amp;h=573&quot; alt=&quot;Sonic &amp;amp; Knuckles and Sonic the Hedgehog 3&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are two ROM chips in the Sonic &amp;amp; Knuckles cartridge: one has the main game and the other has a patch for Sonic the Hedgehog 2. The patch ROM contains the complete Knuckles the Echidna in Sonic the Hedgehog 2 game code; this is the full code for the original game but modified with the necessary game mechanics for Knuckles: lower speed, lower jump height, flight, wall climbing, etc. The ROM also contains new graphics data for Knuckles as well as new map data with places and items for Knuckles to reach with his abilities.&lt;/p&gt;&#xA;&lt;p&gt;When Sonic &amp;amp; Knuckles detects that Sonic the Hedgehog 2 is locked on, it passes control of the processor to the code inside the patch ROM, thereby launching Knuckles the Echidna in Sonic the Hedgehog 2. The new game can reuse much of the data from the original game: level graphics, enemy data, bosses, etc. The only code from the locked-on cartridge that executes is the sound driver.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My question is, &lt;strong&gt;how&lt;/strong&gt; exactly does the Lock-On Technology work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Let's delve into the details.&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://www.emulationzone.org/projects/s&amp;amp;k/references.htm&quot; rel=&quot;noreferrer&quot;&gt;Lock-on Technology Hacking Guide&lt;/a&gt;, there are some chips on the Sonic &amp;amp; Knuckles cartridge:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://i2c2p.twibright.com/datasheet/74HC_HCT74_3.pdf&quot; rel=&quot;noreferrer&quot;&gt;74HC74 Dual D-type Flip-Flop&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.solarbotics.net/library/datasheets/74AC139.pdf&quot; rel=&quot;noreferrer&quot;&gt;74AC139 1-of-4 decoder/demultiplexer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.fairchildsemi.com/datasheets/74/74AC08.pdf&quot; rel=&quot;noreferrer&quot;&gt;74AC08 Quad 2-input AND Gate&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Along with the two ROM chips and the cartridge slot, they implement the Lock-On functionality.&lt;/p&gt;&#xA;&lt;p&gt;Rizzo's photographs show what the cartridge's printed circuit board looks like:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fFdzL.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fFdzL.jpg&quot; alt=&quot;Sonic &amp;amp; Knuckles cartridge printed circuit board, front&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Z7wso.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z7wso.jpg&quot; alt=&quot;Sonic &amp;amp; Knuckles cartridge printed circuit board, front&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Mega Drive's cartridge I/O is meant for only one cartridge. However, a cartridge locked onto Sonic &amp;amp; Knuckles forms a system that contains three ROM chips:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sonic &amp;amp; Knuckles cartridge&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sonic &amp;amp; Knuckles ROM &lt;sub&gt;2 MB&lt;/sub&gt;&lt;/li&gt;&#xA;&lt;li&gt;Sonic the Hedgehog 2 patch ROM &lt;sub&gt;512 kB&lt;/sub&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Responsible for &lt;a href=&quot;http://info.sonicretro.org/Knuckles_the_Echidna_in_Sonic_the_Hedgehog_2&quot; rel=&quot;noreferrer&quot;&gt;Knuckles the Echidna in Sonic the Hedgehog 2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Locked-on cartridge&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Game ROM&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Apparently, the key functionality behind Lock-On Technology is choosing one of those ROM chips and connecting it to the appropriate addressing lines of the Mega Drive which is none the wiser.&lt;/p&gt;&#xA;&lt;p&gt;This memory bank switching is apparently achieved via the chip enable lines. They are active when logically &lt;code&gt;0&lt;/code&gt; and if inactive will cause all memory addressing operations to be ignored and nothing to be returned on the data bus, effectively &amp;quot;disabling&amp;quot; the chip. If one of the ROMs is disabled, the other will be mapped in its place. The Mega Drive just sees a big cartridge with a big address space.&lt;/p&gt;&#xA;&lt;p&gt;Rizzo also made a schematic of the electronics:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ESaiS.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ESaiS.gif&quot; alt=&quot;Sonic &amp;amp; Knuckles Lock-On schematics, full&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Even though I'm not an electronics expert, I was able to figure some things out by studying the schematics and reading the notes on the website. Here's what I learned.&lt;/p&gt;&#xA;&lt;h1&gt;The 74HC74 Flip-Flop&lt;/h1&gt;&#xA;&lt;p&gt;The purpose of this chip is to hold a single bit of information: is Sonic the Hedgehog 2 locked on? Much of the circuit's operation depends on this single bit. It is denoted by the red node on the schematic, corresponding to the 74HC74's &lt;code&gt;Q&lt;/code&gt; output.&lt;/p&gt;&#xA;&lt;p&gt;When Sonic &amp;amp; Knuckles boots, it checks its cartridge slot. If there is a game locked on, it tests if its serial number matches that of earlier Sonic games. If it detects Sonic the Hedgehog 2, a signal is generated on the ROM's &lt;code&gt;D0&lt;/code&gt; line, setting the &lt;code&gt;Q&lt;/code&gt; bit of the 74HC74.&lt;/p&gt;&#xA;&lt;h1&gt;The 74AC139 decoder/demultiplexer&lt;/h1&gt;&#xA;&lt;p&gt;There are two independent decoders &lt;code&gt;M&lt;/code&gt; and &lt;code&gt;N&lt;/code&gt;, each with three inputs &lt;code&gt;E̅&lt;/code&gt;, &lt;code&gt;SA&lt;/code&gt; and &lt;code&gt;SB&lt;/code&gt; as well as four outputs &lt;code&gt;Y0&lt;/code&gt;, &lt;code&gt;Y1&lt;/code&gt;, &lt;code&gt;Y2&lt;/code&gt; and &lt;code&gt;Y3&lt;/code&gt;. If &lt;code&gt;E̅&lt;/code&gt; is &lt;code&gt;1&lt;/code&gt;, all outputs are also forced to &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;Y&lt;/code&gt; outputs obey the following truth table:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;E̅ SA SB Y0 Y1 Y2 Y3&#xA;1 -- --  1  1  1  1&#xA;0  0  0  0  1  1  1&#xA;0  1  0  1  0  1  1&#xA;0  0  1  1  1  0  1&#xA;0  1  1  1  1  1  0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3&gt;The I/O arrangement of each decoder&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;M&lt;/code&gt; is connected to to address line 20 and the output of the 74HC74 through &lt;code&gt;SA&lt;/code&gt; and &lt;code&gt;SB&lt;/code&gt; respectively; &lt;code&gt;E̅&lt;/code&gt; is connected to the &lt;code&gt;Y3&lt;/code&gt; output of &lt;code&gt;N&lt;/code&gt;. The chip enable line of the Sonic the Hedgehog 2 patch ROM is connected to &lt;code&gt;Y3&lt;/code&gt;, while &lt;code&gt;Y0&lt;/code&gt;, &lt;code&gt;Y1&lt;/code&gt; and &lt;code&gt;Y2&lt;/code&gt; are all inputs to the 74AC08.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;N&lt;/code&gt; is connected to address line 21 through both &lt;code&gt;SA&lt;/code&gt; and &lt;code&gt;SB&lt;/code&gt;. The chip enable signal from Mega Drive is connected to &lt;code&gt;E̅&lt;/code&gt;. The chip enable line of the Sonic &amp;amp; Knuckles ROM is connected to &lt;code&gt;Y0&lt;/code&gt; but &lt;code&gt;Y1&lt;/code&gt; and &lt;code&gt;Y2&lt;/code&gt; are not connected to anything at all. &lt;code&gt;Y3&lt;/code&gt; is connected to &lt;code&gt;M&lt;/code&gt;'s &lt;code&gt;E̅&lt;/code&gt; input.&lt;/p&gt;&#xA;&lt;h3&gt;Putting it all together&lt;/h3&gt;&#xA;&lt;p&gt;Decoder &lt;code&gt;M&lt;/code&gt; controls the activation of both the Sonic the Hedgehog 2 patch ROM and the locked-on cartridge's ROM. Decoder &lt;code&gt;N&lt;/code&gt; controls the activation of the Sonic &amp;amp; Knuckles ROM.&lt;/p&gt;&#xA;&lt;p&gt;The A21 line addresses memory that is beyond the bounds of the game's 2 megabytes ROM. If this memory is accessed, the result is that the Sonic &amp;amp; Knuckles ROM is disabled. Otherwise, it is enabled and &lt;code&gt;M&lt;/code&gt;'s &lt;code&gt;E̅&lt;/code&gt; is set.&lt;/p&gt;&#xA;&lt;p&gt;The A20 line addresses memory that is within bounds; if that memory is accessed and the 74HC74 is also set, the Sonic the Hedgehog 2 patch ROM is enabled and the outputs to the 74AC08 are all &lt;code&gt;1&lt;/code&gt;. If &lt;code&gt;M&lt;/code&gt;'s &lt;code&gt;E̅&lt;/code&gt; is set, the 74AC08 also receives all &lt;code&gt;1&lt;/code&gt;s, but the patch ROM is not enabled.&lt;/p&gt;&#xA;&lt;h1&gt;The 74AC08 AND Gates&lt;/h1&gt;&#xA;&lt;p&gt;The 74AC08 has three inputs &lt;code&gt;Y0&lt;/code&gt;, &lt;code&gt;Y1&lt;/code&gt; and &lt;code&gt;Y2&lt;/code&gt; as well as a single output that equals &lt;code&gt;Y0 ∧ Y1 ∧ Y2&lt;/code&gt; and is connected to the locked-on cartridge's chip enable line. Therefore, the second cartridge's ROM will only be mapped when all its inputs are &lt;code&gt;1&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Locked-on cartridge is Sonic the Hedgehog 2&lt;/li&gt;&#xA;&lt;li&gt;Sonic &amp;amp; Knuckles ROM is enabled&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;M&lt;/code&gt;'s &lt;code&gt;E̅&lt;/code&gt; is set&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2162" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-02-05T10:51:50.407" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1530" PostTypeId="2" ParentId="1526" CreationDate="2016-09-28T14:18:08.593" Score="10" Body="&lt;p&gt;For posterity, here is the solution that allows you to convert the video output of an Atari Centipede arcade game to VGA output.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Aquire the GBS-8200&lt;/li&gt;&#xA;&lt;li&gt;You need to add an additional wire to the video wiring loom for composite sync.  This composite sync signal is already generated on the Atari centipede motherboard and is brought to the video connector, but there is no wire to bring the monitor.  The Composite sync is on pin 12 of the connector.&lt;/li&gt;&#xA;&lt;li&gt;Hook the R,G and B, signals to R, G and B, of the P11 on the GBS-8200&lt;/li&gt;&#xA;&lt;li&gt;Hook the new composite sync signal to the S pin of P11 on the GBS-8200&lt;/li&gt;&#xA;&lt;li&gt;Start the GBS-8200 wait about 5 seconds.  If the picture doesn't come up automatically, hit SW until RGBS appears on the screen and wait a few seconds.  If that doesn't work, hold the Auto/Down button down for 8 second and then release.  This should bring up the monitor.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="3349" LastActivityDate="2016-09-28T14:18:08.593" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1531" PostTypeId="1" AcceptedAnswerId="1535" CreationDate="2016-09-30T23:41:31.723" Score="18" ViewCount="731" Body="&lt;p&gt;A two part question:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Did an agreed upon convention for end of line (EOL) within text files exist on the 8-bit Commodores? &lt;/li&gt;&#xA;&lt;li&gt;If there was a convention, what was it?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="3382" LastEditorUserId="11916" LastEditDate="2019-10-17T06:16:33.437" LastActivityDate="2019-10-17T06:16:33.437" Title="What was the end of line convention for text files on the 8-bit Commodores" Tags="&lt;commodore-64&gt;&lt;commodore-pet&gt;&lt;file-format&gt;&lt;vic-20&gt;&lt;commodore-128&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1532" PostTypeId="1" CreationDate="2016-10-01T00:55:35.617" Score="12" ViewCount="1275" Body="&lt;p&gt;Question inspired by this answer's last paragraph: &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1307/2155&quot;&gt;https://retrocomputing.stackexchange.com/a/1307/2155&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.amigawiki.de/dnl/schematics/A1200_R1.pdf&quot; rel=&quot;noreferrer&quot;&gt;Revision 1 A1200 schematics&lt;/a&gt; show that the system originally had support for a two internal 8bit x 256K Flash memory chips (for a total of 512KB), selected by a combination of the /FLASH and other signals coming from &lt;em&gt;Gayle&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the days I never heard of this detail. What was this memory for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bonus question: how much ROM can a Gayle-based system actually address?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2019-02-07T09:36:36.197" Title="What was the A1200 Flash ROM support meant for?" Tags="&lt;amiga&gt;&lt;hardware&gt;&lt;amiga-1200&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1533" PostTypeId="2" ParentId="1532" CreationDate="2016-10-01T00:55:35.617" Score="11" Body="&lt;p&gt;An hypotesis can be made by reading &lt;em&gt;Gayle&lt;/em&gt;'s original datasheet (you can find it linked &lt;a href=&quot;http://eab.abime.net/showthread.php?t=35282&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Hardware&lt;/h1&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;3.0 FLASH ROM &#xA;  There is provision for an optional flash ROM device. The intent is that this is a possible replacement for a floppy disk drive&#xA;  in an extremely low end variant of the A300. The enable for the flash&#xA;  rom is called -FLASH-CE, and is active in the address range from&#xA;  $0xA00000 to $0xA7FFFF. This output is enabled when the proper data&#xA;  strobe is asserted, and the address is in range.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(3.0 in the first line is the chapter number, not a reference to AmigaOS 3.0)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later the memory map confirms that and also shows a 1MB Workbench ROM area:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;0xA00000 to 0xA7FFFF 512KB Flash ROM&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;0xA80000 to 0xB7FFFF 1MB System ROM selected (optional workbench ROM)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;About the 1MB System ROM area, the datasheet says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2.0 SYSTEM ROM &#xA;  The onboard ROMs are selected in the address range from 0xA80000 to 0xB7FFFF, 0xE00000 to 0xE7FFFF, and 0xF80000 to 0xFFFFFF.&#xA;  The ROMs are also selected in the range from 0x000000 to 0x1FFFFF when&#xA;  the internal overlay signal (OVL) is high (this allows the RESET&#xA;  vectors to be contained in the ROMs). The internal OVL signal becomes&#xA;  asserted at reset, and negates on the first write to CIA1 (address&#xA;  range of 0xBFD000 to 0xBFDFFF.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note that the total addressable ROM space described above is 2MB; we know from  Richard Downer's excellent &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1307/2155&quot;&gt;answer&lt;/a&gt; that the 512KB extended CD32 ROMs appear at 0xE00000 to 0xE7FFFF. Subtracting the standard 512KB Kickstart area, this leaves exactly 1MB usable to address another 1MB of ROMs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is in &lt;strong&gt;addition&lt;/strong&gt; to the Flash RAM from 0xA00000 to 0xA7FFFF.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Software&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;As per software support, it should be noted that the leaked AmigaOS 3.1+ source code sports a &lt;em&gt;ROM Disk&lt;/em&gt; DOS handler (DOS name &lt;strong&gt;ROM:&lt;/strong&gt;) in the &lt;code&gt;/os-source/v40_src/kickstart/romdisk&lt;/code&gt; directory, that appears to be a copy of the standard RAM Disk DOS handler with write support disabled with data coming from a disk image created with the included &lt;code&gt;makeromimage&lt;/code&gt; command line utility. &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Hypotesis&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;So by Gayle's datasheet and the R1 schematics, it looks like the idea could have been to both put Workbench resident modules in the additional 1MB ROM (Kickstart 3.1 scans the 0xA80000 - 0xB7FFFF area too) and also have a 512KB Flash RAM area for the user to add additional resident modules in LIBS: and DEVS: and configuration files (by means of the 2.0+ multi-target &lt;code&gt;ASSIGN&lt;/code&gt; feature, and the &lt;em&gt;ROM disk&lt;/em&gt;?).&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;R2 A1200 Schematics&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Note that the Gayle datasheet describes a prerelease version, so things may have changed in the true chip. Indeed, in the &lt;a href=&quot;http://www.amigawiki.de/dnl/schematics/A1200_R2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;R2 A1200&lt;/a&gt; schematics, the Flash RAM is 1MB, which would have provided for space to keep a whole rewritable minimal Workbench installation (a far better idea). It would be nice to try if the existing Gayle can drive the /FLASH line and for what addresses.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Postscript&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;So it looks like the idea was not for the Flash RAM to be used to store an upgradable Kickstart (the most sensible choice of all, although handling an incorrectly programmed Flash Kickstart would have been tricky).&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-10-01T00:55:35.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1534" PostTypeId="2" ParentId="1531" CreationDate="2016-10-01T04:36:46.927" Score="3" Body="&lt;p&gt;I remember downloading a lot of dox files off BBS's back in the day, and given that most files were ascii from other platforms, I think the standard CrLf or Cr or Lf end of line was common.  But I also remember word processors like Bank Street Writer and Speedscript being proprietary file formats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it was probably dealers choice; no official standard, and it was up to the operator to pair the data files with appropriate software capable of properly viewing them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also remember moving data from speedscript via null modem to apple so I could print on the ImageWriter at school used to give me no end of trouble...  grr...  :-)&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2016-10-01T04:36:46.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1535" PostTypeId="2" ParentId="1531" CreationDate="2016-10-01T12:27:42.947" Score="21" Body="&lt;p&gt;C64 Basic used a CR as EOL for disk files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(source: &lt;a href=&quot;https://archive.org/details/Commodore_SX-64_Users_Guide_1983_Commodore&quot;&gt;Commodore SX-64 User's Guide&lt;/a&gt;, page 22: “&lt;em&gt;CR stands for the CHR$ code 13, the carriage return, which is automatically PRINTed at the end of ever PRINT or PRINT# statement&lt;/em&gt; …&#xA;”, and verified by hex dump of disk image showing 0x0d at line end.)&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2016-10-01T12:27:42.947" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1536" PostTypeId="1" AcceptedAnswerId="1539" CreationDate="2016-10-01T15:37:12.870" Score="15" ViewCount="839" Body="&lt;p&gt;The &lt;a href=&quot;http://www.thule.no/haynie/research/a3000p/docs/a3000p.pdf&quot;&gt;Amiga 3000+ DevCon&lt;/a&gt; 1991 notes says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;On the A3000+, these resources include the Amiga &quot;Pandora&quot; chip set&#xA;  (Alice, Lisa, &lt;strong&gt;Kelly&lt;/strong&gt;, and Paula),&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, a Kelly chip is not part of the official released AA chipset (Pandora being the development codename for AA). What is it?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="11916" LastEditDate="2019-04-07T21:40:13.417" LastActivityDate="2019-04-07T21:40:13.417" Title="What is the Kelly chip?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;chip&gt;&lt;amiga-3000&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1537" PostTypeId="1" AcceptedAnswerId="1542" CreationDate="2016-10-01T15:57:47.070" Score="10" ViewCount="382" Body="&lt;p&gt;I always though it was an awesome idea, but no one ever copied it. Even if more complicated than a standard eject mechanism, I guess it should not have been so outrageously expensive not to be considered by anyone else except Apple?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, as people pointed out in the comments, the very idea of automatic ejection could not have been patented, only actual implementations. However, could have it instead been that what was patented was the software implementation/idea that by locking a floppy disk in the drive data integrity can be more easily enforced (let's ignore software bugs in the OS) without requiring the filesystem to do journaling or employ other performance-killing data integrity techniques?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="71" LastEditDate="2016-10-04T21:37:19.160" LastActivityDate="2016-10-05T20:06:10.397" Title="Was Apple's automatic disk ejection mechanism patented?" Tags="&lt;apple-macintosh&gt;&lt;apple&gt;&lt;disk-drive&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="1539" PostTypeId="2" ParentId="1536" CreationDate="2016-10-02T10:19:48.687" Score="20" Body="&lt;p&gt;The question should rather be: &quot;What could it have been?&quot; - It never made it into an existing machine. According to some Internet lore, Kelly would have been the A3000+'s/AA3000's RAMDAC (digital video memory to analog RGB converter chip) that Commodore was initially planning to develop themselves. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the same lore, during the development of Kelly, Commodore encountered a jungle of already existing patented technology that they would have had to navigate that it was decided to use an already existing 3PP (Analog Devices ADV7120KP30) off-the-shelf circuit instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a reference: &lt;a href=&quot;http://obligement.free.fr/articles/chipsetamiga.php#kelly&quot;&gt;http://obligement.free.fr/articles/chipsetamiga.php#kelly&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2016-10-02T10:24:52.717" LastActivityDate="2016-10-02T10:24:52.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1540" PostTypeId="1" AcceptedAnswerId="1541" CreationDate="2016-10-04T18:32:23.803" Score="14" ViewCount="1006" Body="&lt;p&gt;After removing the Intel DX 486 card from my RiscPC (running RiscOS 3.6), the computer doesn't start up properly. Instead, it displays the text &lt;code&gt;POST&lt;/code&gt; in red.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does this error message mean?&lt;/p&gt;&#xA;" OwnerUserId="3390" LastEditorUserId="320" LastEditDate="2016-10-08T01:20:35.363" LastActivityDate="2020-07-25T13:02:54.820" Title="Why does my Acorn RiscPC display the POST boot error?" Tags="&lt;acorn&gt;&lt;boot&gt;&lt;risc-pc&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1541" PostTypeId="2" ParentId="1540" CreationDate="2016-10-04T20:16:05.873" Score="12" Body="&lt;h2&gt;What does &amp;quot;POST&amp;quot; mean?&lt;/h2&gt;&#xA;&lt;p&gt;On the RiscPC, &amp;quot;POST&amp;quot; stands for Power On Self Test. The POST sequence is performed on computers running RiscOS 3, and ensures that the computer is working properly before it starts up. If the computer fails this test, an error message will be displayed on the screen, informing you that there was a POST error.&lt;/p&gt;&#xA;&lt;h2&gt;How do I know what the problem is?&lt;/h2&gt;&#xA;&lt;p&gt;You may notice your floppy-drive light flashing. After a POST error is detected, the floppy-drive light will output a sequence of flashes a little like Morse Code. The error code is a 32-bit binary number, where a long flash represents &lt;code&gt;1&lt;/code&gt; and a short flash represents &lt;code&gt;0&lt;/code&gt;. Here are some common fatal error codes and their causes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;//www.retro-kit.co.uk/page.cfm/content/RISC-OS-POST-simulator/?PostError=00109&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;View simulation&quot;&gt;&lt;code&gt;0000 0000 0001 0000 1001&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;//www.retro-kit.co.uk/page.cfm/content/RISC-OS-POST-simulator/?PostError=00119&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;View simulation&quot;&gt;&lt;code&gt;0000 0000 0001 0001 1001&lt;/code&gt;&lt;/a&gt;&lt;br /&gt;&#xA;The CMOS checksum is invalid. This can be fixed by resetting the CMOS data (see below). This error is often caused by a flat CMOS battery, so if the error persists after resetting the CMOS data, you might need to replace the battery.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;//www.retro-kit.co.uk/page.cfm/content/RISC-OS-POST-simulator/?PostError=10049&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;View simulation&quot;&gt;&lt;code&gt;0001 0000 0000 0100 1001&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;//www.retro-kit.co.uk/page.cfm/content/RISC-OS-POST-simulator/?PostError=10059&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;View simulation&quot;&gt;&lt;code&gt;0001 0000 0000 0101 1001&lt;/code&gt;&lt;/a&gt;&lt;br /&gt;&#xA;The CMOS chip is unreadable. This probably means that your CMOS battery has leaked and damaged the CMOS chip itself. This is harder to fix, requiring not only a new battery but also a CMOS chip.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;//www.retro-kit.co.uk/page.cfm/content/RISC-OS-POST-simulator/?PostError=20141&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;View simulation&quot;&gt;&lt;code&gt;0010 0000 0001 0100 0001&lt;/code&gt;&lt;/a&gt;&lt;br /&gt;&#xA;The RAM Control line has failed. This is a really big problem. Most likely your CMOS battery has leaked and damaged the RAM Control line, rendering the RAM unusable. This is difficult, but not impossible to repair.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Note that these error codes all have &lt;code&gt;0&lt;/code&gt;s at the beginning. You don't need to count exactly how many there are of these, so long as you have the end part of the code.&lt;/p&gt;&#xA;&lt;h2&gt;How do I reset the CMOS data?&lt;/h2&gt;&#xA;&lt;p&gt;To reset the CMOS data to its default values, follow these instructions:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Turn off the computer if it is on.&lt;/li&gt;&#xA;&lt;li&gt;Press and hold the &lt;kbd&gt;DEL&lt;/kbd&gt; key.&lt;/li&gt;&#xA;&lt;li&gt;Turn the computer back on.&lt;/li&gt;&#xA;&lt;li&gt;Keep holding the &lt;kbd&gt;DEL&lt;/kbd&gt; key until you see a black screen with a red border.&lt;/li&gt;&#xA;&lt;li&gt;Release the &lt;kbd&gt;DEL&lt;/kbd&gt; key. The CMOS data is now reset to sane defaults.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2&gt;What if I have a different error code?&lt;/h2&gt;&#xA;&lt;p&gt;The error codes are designed so that each binary digit corresponds to a specific fault code. Some of the fault codes aren't errors; these are just informative. If a code is an error the text will be &lt;strong&gt;bold&lt;/strong&gt;. The bits are numbered from right to left, where bit 0 is the right-most digit (the &lt;code&gt;1&lt;/code&gt; in &lt;code&gt;0000 0000 0000 0000 0001&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;0&lt;/code&gt;: Self-test due to power-on. This is normal.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;1&lt;/code&gt;: Self-test due to interface hardware. This shows that the POST test wasn't started directly from the boot sequence.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;2&lt;/code&gt;: Self-test due to test link. This means that you manually triggered the POST test (I think!)&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;3&lt;/code&gt;: Long memory test performed. This just tells you that nothing went wrong before the long memory test.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;4&lt;/code&gt;: ARM3 fitted / ARM ID read and not ARM2. This gives information about the hardware. If you have an ARM2 installed and this shows up, there might be a problem, but likely not a major one.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;5&lt;/code&gt;: Long memory test disabled. This is not a problem; it just means that the long memory isn't tested.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;6&lt;/code&gt;: PC-style IO world detected.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;7&lt;/code&gt;: VRAM detected.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;8&lt;/code&gt;: &lt;strong&gt;CMOS RAM checksum error&lt;/strong&gt;. The CMOS checksum is invalid, which means that the CMOS memory is corrupt. This can be fixed by resetting the CMOS data (see above). This error is often caused by a flat CMOS battery, so if the error persists after resetting the CMOS data, you might need to replace the battery.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;9&lt;/code&gt;: &lt;strong&gt;ROM failed checksum test&lt;/strong&gt;. This means that your ROM is corrupt. This might not be significant enough to cause much of a problem, but expect erratic behaviour and the occasional crash.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;10&lt;/code&gt;: &lt;strong&gt;MEMC CAM mapping failed&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;11&lt;/code&gt;: &lt;strong&gt;MEMC protection failed&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;12&lt;/code&gt;: &lt;strong&gt;IOC register test failed&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;13&lt;/code&gt;: Reserved code &lt;em&gt;(RISC PC)&lt;/em&gt;. This code should never appear. If it does, please ask a question about it!&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;14&lt;/code&gt;: &lt;strong&gt;VIDC Virq &lt;em&gt;(Video Interrupt)&lt;/em&gt; timing failed&lt;/strong&gt;. This means that things probably won't display properly on the screen, because the &amp;quot;draw screen content&amp;quot; timing doesn't line up with the actual screen refresh.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;15&lt;/code&gt;: &lt;strong&gt;VIDC Sirq &lt;em&gt;(Sound Interrupt)&lt;/em&gt; timing failed&lt;/strong&gt;. This is similar to the Virq failure, but for sound. Audio might sound stuttery, or play in segments that are the wrong way around (e.g. 2143658709 instead of 1234567890).&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;16&lt;/code&gt;: &lt;strong&gt;CMOS unreadable&lt;/strong&gt;. This probably means that your CMOS battery has leaked and damaged the CMOS chip itself, or the PCB traces providing the power / data lines to it. This is harder to fix, requiring not only a new battery but also a CMOS chip / PCB repair job.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;17&lt;/code&gt;: &lt;strong&gt;RAM control line failure&lt;/strong&gt;. This means that the RAM control line is probably damaged, which is difficult to repair.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;18&lt;/code&gt;: &lt;strong&gt;Long RAM Test failure&lt;/strong&gt;. The long memory test from bits &lt;code&gt;3&lt;/code&gt; and &lt;code&gt;5&lt;/code&gt; has failed.&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;19&lt;/code&gt;: Reserved code &lt;em&gt;(RISC PC)&lt;/em&gt;. This code should never appear. If it does, please ask a question about it!&lt;/li&gt;&#xA;&lt;li&gt;Bits &lt;code&gt;20&lt;/code&gt;-&lt;code&gt;32&lt;/code&gt;: Unused codes. These should all be &lt;code&gt;0&lt;/code&gt;, if they are shown at all.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2020-07-25T13:02:54.820" LastActivityDate="2020-07-25T13:02:54.820" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1542" PostTypeId="2" ParentId="1537" CreationDate="2016-10-04T21:43:19.167" Score="8" Body="&lt;p&gt;Yes, the mechanical mechanism was patented. I can't find any evidence for a software patent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks to be US patent &lt;a href=&quot;https://www.google.com/patents/US4466033&quot;&gt;4466033&lt;/a&gt; which was originally developed for the &lt;a href=&quot;https://www.scribd.com/document/48544933/The-Legacy-of-the-Apple-Lisa-Personal-Computer-An-Outsider-s-View&quot;&gt;Lisa's Twiggy drive&lt;/a&gt; but adapted for use in the &lt;a href=&quot;http://ieeemilestones.ethw.org/Milestone-Proposal:Introduction_of_the_Apple_Macintosh_Computer,_1984&quot;&gt;original Mac&lt;/a&gt; drive. Here is a quote from the second link:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Sony 3.5” micro-floppy was uniquely enhanced for the Macintosh by&#xA;  incorporating performance, capacity and data integrity improvements &#xA;  which had been prototyped with a 5.25&quot; floppy by way of five &#xA;  innovations [...] Fifth, the software-controlled floppy clamping and &#xA;  eject mechanism [Ref-3: '033 patent] - a signature characteristic of &#xA;  the Macintosh - insured file system integrity upon ejection of the &#xA;  floppy disk. The one-chip controller in combination with these five &#xA;  innovations created a fast, high capacity, reliable and low-cost&#xA;  storage device that was unique to the Macintosh. The Macintosh&#xA;  micro-floppy is also discussed on pp. 32, 39-42, 54 and 66-68 of the&#xA;  February 1984 issue of Byte magazine&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here is a quote from the February 1984 issue of Byte magazine, page 39:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In addition to the change to 80 tpi,  Apple contracted Sony to modify&#xA;  the  drive in several other ways. Two  changes allow the Sony drive to&#xA;  mimic the behavior of the Lisa  &quot;twiggy&quot; drives (which were originally&#xA;  chosen for use in the Mac): disk  ejection under software control and &#xA;  variable disk-rotation speed. The first  change allows the Mac to&#xA;  ensure that  a disk is correctly updated before it  is surrendered to&#xA;  the user (that is,  you can't take a disk out of the drive  until the&#xA;  Mac software permits it).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Andy Hertzfeld also corroborates Apple working closely with Sony on the drive in &lt;a href=&quot;http://www.folklore.org/StoryView.py?story=Hide_Under_This_Desk.txt&quot;&gt;this story&lt;/a&gt;, and a later Sony patent filed in 1988 &lt;a href=&quot;https://www.google.com/patents/US4991044&quot;&gt;cites the original Apple patent&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2016-10-05T20:06:10.397" LastActivityDate="2016-10-05T20:06:10.397" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1543" PostTypeId="1" AcceptedAnswerId="1545" CreationDate="2016-10-05T14:12:57.073" Score="35" ViewCount="5263" Body="&lt;p&gt;On my answer to a previous question (&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1501/what-os-and-software-can-an-amd-duron-cpu-run/1515#1515&quot;&gt;Can I run Windows 98 and games from the same era on an AMD Duron CPU?&lt;/a&gt;) I finished with a warning about using Windows 98 on the Internet, which received the following comment:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Windows 98 it so &lt;em&gt;old&lt;/em&gt; that most attacks don't work, and most malware won't run.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That poses the question, &lt;strong&gt;are the 9x versions of Windows susceptible to modern Malware?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;I have my own thoughts on this question, but I thought I'd query the community first.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="125" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2017-12-14T10:17:45.170" Title="Are old versions of Windows at risk of modern malware attacks?" Tags="&lt;windows-95&gt;&lt;windows-98&gt;&lt;malware&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="1544" PostTypeId="2" ParentId="1543" CreationDate="2016-10-05T14:22:30.507" Score="12" Body="&lt;p&gt;&lt;sub&gt;(The question &lt;a href=&quot;https://security.stackexchange.com/q/123366&quot;&gt;How could one say that older operating systems are more vulnerable?&lt;/a&gt; on Security Stack Exchange (linked by Stephen Kitt in the comments) provides a more in-depth answer, but I will try to provide a high-level answer here as well.)&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes and no, mostly no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes in the sense Windows 9x is vulnerable to most of the exploits patched by the various Windows XP (and above) service packs and security updates.  The manufacturer has ended support for those OS versions and has no intention of providing any additional updates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No in the sense that any executables targeting a version of Windows higher than Windows 9x will (or uses some then unavailable WIN32 API) will refuse to run on your system.  See this example alert when trying to run a Skype executable designed for Windows XP and above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8EBvv.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8EBvv.gif&quot; alt=&quot;Error Starting Program&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="-1" LastEditDate="2017-03-17T13:14:45.740" LastActivityDate="2016-10-05T20:58:26.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1545" PostTypeId="2" ParentId="1543" CreationDate="2016-10-05T15:56:38.187" Score="20" Body="&lt;p&gt;The very first step of an attack is to &lt;strong&gt;probe the target for platform&lt;/strong&gt;. Pentesting applications such as &lt;a href=&quot;https://www.metasploit.com/&quot;&gt;metasploit&lt;/a&gt; have much more numerous and varied techniques to breach Windows 98 as opposed to the newer Windows versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By extension, most malware in the wild will also check for platform. In fact, much of that malware has its origins in Metasploit, especially those malware deployed by script kiddies.&lt;/p&gt;&#xA;" OwnerUserId="543" LastActivityDate="2016-10-05T15:56:38.187" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1546" PostTypeId="2" ParentId="1543" CreationDate="2016-10-05T17:35:17.713" Score="11" Body="&lt;p&gt;Mostly no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pre-XP versions of Windows are certainly vulnerable to targeted attacks, such as you'd see from Metasploit -- if you're the sort of high-value target that attracts such attacks, don't run Windows 98.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, most malware isn't that flexible.  Instead, it's programmed to run on popular versions of Windows (typically XP or newer) and nothing else: the return on investment from targeting older versions just isn't there.  For example, attempting to run what ClamAV calls &quot;Win.Trojan.Fraudload-3348&quot; on a Win98 system crashes with the following error:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QCqSy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QCqSy.png&quot; alt=&quot;Error message - Register dump&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other possible errors include missing DLLs&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7MAwT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7MAwT.png&quot; alt=&quot;Error message - Missing DLL&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DLLs that explicitly require a newer version of Windows (this one requires &quot;5.0 or newer&quot;),&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rYNuJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rYNuJ.png&quot; alt=&quot;Error message - incorrect version&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;errors that are just plain strange,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Mx3wd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Mx3wd.png&quot; alt=&quot;Error message - general failure&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and one I haven't been able to trigger to get a screenshot of, where a system library is missing an expected function.  The last is probably your greatest protection, in fact: most programmers will, deliberately or accidentally, target Unicode-based systems.  If you haven't installed the optional &lt;code&gt;unicow32.dll&lt;/code&gt; library on your Win9x system, Unicode-based programs can't run.&lt;/p&gt;&#xA;" OwnerUserId="4" LastEditorUserId="276" LastEditDate="2017-12-14T10:17:45.170" LastActivityDate="2017-12-14T10:17:45.170" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1547" PostTypeId="2" ParentId="1389" CreationDate="2016-10-05T21:24:27.793" Score="1" Body="&lt;p&gt;I've made a little more progress on this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to an &lt;a href=&quot;http://web.archive.org/web/20001001201847/http://www.halcyon.com/squakvly/tasmdnl.htm&quot; rel=&quot;nofollow&quot;&gt;archive of halcyon.com from 2000&lt;/a&gt;, I am able to see that there was in fact a shareware version of TASM for Linux released, at least of version 3.1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a mirror of &lt;code&gt;tasm31.taz&lt;/code&gt; on &lt;a href=&quot;http://www.filegate.net/pdnunix/&quot; rel=&quot;nofollow&quot;&gt;FileGate&lt;/a&gt;, but binary does not work on my architecture:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;➜  ~ tar -xzf tasm31.taz&#xA;➜  ~ ./tasm&#xA;zsh: exec format error: ./tasm&#xA;➜  ~ file tasm&#xA;tasm: Linux/i386 demand-paged executable (QMAGIC)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This should work on i386 machines, but not on any modern Mac platform.  Still investigating...&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-10-05T21:24:27.793" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1548" PostTypeId="2" ParentId="1501" CreationDate="2016-10-06T08:17:36.060" Score="4" Body="&lt;p&gt;&lt;strong&gt;Yes, you certainly can.&lt;/strong&gt; A typical Duron 800Mhz processor can run even Windows XP excellently, given you provide it more RAM than you would a system with Windows 98. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, such an option as you propose is the best possible one for MS-DOS era games and the first vectorial games ever created like Half-Life or Blood 2.&#xA;Try to stick 512 RAM on a Windows 98 with that Duron and the Voodoo and you'll have the perfect old era gaming rig.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &lt;strong&gt;do add a FAN to the CPU&lt;/strong&gt;. It is not designed to run without one and will end up overheating (and lock down if BIOS CPU overheat protection is active).&lt;/p&gt;&#xA;" OwnerUserId="3399" LastEditorUserId="2081" LastEditDate="2017-02-02T19:53:35.847" LastActivityDate="2017-02-02T19:53:35.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1549" PostTypeId="2" ParentId="1457" CreationDate="2016-10-06T14:12:19.543" Score="6" Body="&lt;p&gt;The Atari ST range should be able to work in 'hi res' mode, with any VGA monitor that supports the relevant resolution/frequency. These diagrams might make the pin numbering clearer, but I am afraid soldering these is difficult and not for the novice!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0BXTs.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0BXTs.gif&quot; alt=&quot;Wiring Diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w7Dwz.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w7Dwz.jpg&quot; alt=&quot;Pin Configuration&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3403" LastEditorUserId="276" LastEditDate="2016-10-06T14:17:30.260" LastActivityDate="2016-10-06T14:17:30.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1551" PostTypeId="1" CreationDate="2016-10-07T20:48:48.830" Score="5" ViewCount="219" Body="&lt;p&gt;I have an &lt;strong&gt;ZX Spectrum+&lt;/strong&gt; that came with a &lt;strong&gt;SCART interface&lt;/strong&gt; (unknown brand, all I know is that it's french and that the blue logo seems to spell &quot;IS&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It didn't came with its original power supply so I bought a &lt;strong&gt;9 Volts&lt;/strong&gt; and &lt;strong&gt;2.25 Amps&lt;/strong&gt; power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I plug the SCART and the power supply, nothing shows up on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think the computer is broken as the internal regulator gets hot (quite a lot) when the power supply is plugged (I read that it is normal for it to get really hot), and I can hear a small noise on my headsphones when plugging the power supply, as if electricity was running normally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also didn't notice any leaking capacitors or any corrosion on both the ZX Spectrum+ mainboard and the SCART interface printed circuit board. The only thing I did before trying to boot it was to dust off the mainbaord and keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem being that there is no LED (none on this model) or speaker sound that tell me that computer is booting. So I don't know if the problem comes from the computer or only the peritel interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The screen I currently use is an Atari SC 1425. Maybe the SCART interface is no compatible with this screen?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What could prevent my ZX Spectrum+ from showing anything on-screen? Is it that either the peritel interface or the ZX Spectrum+ are broken?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="2109" LastEditDate="2016-10-07T21:48:51.177" LastActivityDate="2016-10-29T09:43:37.127" Title="ZX Spectrum+ with SCART Interface doesn't display anything" Tags="&lt;zx-spectrum&gt;&lt;screen&gt;&lt;scart&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1552" PostTypeId="2" ParentId="1422" CreationDate="2016-10-07T21:40:24.630" Score="1" Body="&lt;p&gt;The package you've linked is designed to be copied and run from an ST hard disk. Unfortunately it's just too big to run from any floppy format the ST can handle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have an ST hard disk and want to copy the files across via floppy, you'll need to prepare a special 720KB disk format. There are also several better options for transferring files to the ST - including serial cable, Ethernet, and even SD card. You can find all of this explained &lt;a href=&quot;http://www.retrorabble.com/2015/12/26/transferring-files-from-pc-to-st.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to copy a single file larger than a floppy's capacity, &lt;a href=&quot;http://www.retrorabble.com/2016/01/31/using-arj-to-split-and-copy-large-files-to-your-atari-st-in-chunks.html&quot; rel=&quot;nofollow&quot;&gt;you can use ARJ/UnARJ to split it up and copy in smaller chunks&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have an ST hard disk at all, your best bet is to find an original copy of STOS. It firsst shipped on 3 separate floppy disks and could be run directly from them.&lt;/p&gt;&#xA;" OwnerUserId="272" LastEditorUserId="272" LastEditDate="2016-10-20T17:11:30.003" LastActivityDate="2016-10-20T17:11:30.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1553" PostTypeId="2" ParentId="1421" CreationDate="2016-10-07T21:53:13.223" Score="6" Body="&lt;p&gt;I can vouch for the USB mouse adapter. I have one myself along with &lt;a href=&quot;https://www.amazon.co.uk/gp/product/B0007OELU4/ref=pd_day0_147_4?ie=UTF8&amp;amp;psc=1&amp;amp;refRID=ZEJM2C7C3XPFR9AJHB55&quot;&gt;this Microsoft mouse&lt;/a&gt;. It's 100% ST compatible, much more responsive than the official ST mouse and does away with the ball altogether (optical technology). Highly recommended.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to stick with your original ST mouse, you can accelerate it using &lt;a href=&quot;http://www.atari-wiki.com/index.php/The_%22XControl.ACC%22_Control_panel_and_CPX_modules_explained#Mouse-accelerator_.28MACCEL.CPX.29&quot;&gt;XCONTROL along with the MACCEL module&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="272" LastActivityDate="2016-10-07T21:53:13.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1554" PostTypeId="2" ParentId="1402" CreationDate="2016-10-07T22:02:43.977" Score="3" Body="&lt;p&gt;I very much enjoyed &lt;a href=&quot;http://www.voidbred.com/blog/2014/09/programming-the-atari-st-20-years-later/&quot; rel=&quot;nofollow&quot;&gt;this blog post&lt;/a&gt; which discusses how to get started with 68k assembly and DevPac3. The learning curve with assembly is very steep, but it does offer you the best performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a gentler introduction to ST games programming, I can recommend &lt;a href=&quot;https://en.wikipedia.org/wiki/STOS_BASIC&quot; rel=&quot;nofollow&quot;&gt;STOS&lt;/a&gt;. It's a flavour of BASIC specifically designed for creating games. &lt;/p&gt;&#xA;" OwnerUserId="272" LastActivityDate="2016-10-07T22:02:43.977" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1555" PostTypeId="5" CreationDate="2016-10-07T22:34:08.797" Score="0" Body="&lt;p&gt;SCART (also known as Péritel) is a 21 pin standard connector, originating in 1977, that can handle stereo audio, composite and RBG video input/output. Later versions, manufactured from the 1980s onwards, also support the S-Video format.&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="278" LastEditDate="2016-10-08T09:52:34.373" LastActivityDate="2016-10-08T09:52:34.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1556" PostTypeId="4" CreationDate="2016-10-07T22:34:08.797" Score="0" Body="For questions about SCART video connector, also known as Péritel." OwnerUserId="2109" LastEditorUserId="278" LastEditDate="2016-10-08T09:52:34.373" LastActivityDate="2016-10-08T09:52:34.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1557" PostTypeId="1" CreationDate="2016-10-08T00:37:49.680" Score="13" ViewCount="2114" Body="&lt;p&gt;I have a &lt;strong&gt;ZX Spectrum+&lt;/strong&gt; and it didn't came with it original power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I bought a &lt;strong&gt;9 Volts&lt;/strong&gt; and &lt;strong&gt;2.25 Amps&lt;/strong&gt; power supply with switchable connectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a mistake and the &lt;strong&gt;polarity was inverted&lt;/strong&gt;, the barrel connector had positive in the center, but from what I read, it must be negative in the center.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I checked the ZX Spectrum+'s mainboard and nothing looks in bad shape, even after the polarity was reversed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that it didn't boot before and it still doesn't boot with the negative in the center. What happens in both cases is that the internal regulator starts to heat really quickly (I read that it was normal for it to get hot) and nothing shows up on screen (I user a SCART interface).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could the ZX Spectrum+ have been damaged by the reversed polarity, if yes, what components could have been damaged, and how can I fix it?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="2109" LastEditDate="2016-10-08T01:57:17.133" LastActivityDate="2016-10-08T21:52:43.167" Title="Can polarity inversion damage a ZX Spectrum?" Tags="&lt;zx-spectrum&gt;&lt;repair&gt;&lt;power&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1558" PostTypeId="1" AcceptedAnswerId="1567" CreationDate="2016-10-08T15:48:29.723" Score="12" ViewCount="1400" Body="&lt;p&gt;I recently purchased an old Atari 800XL off eBay.  The machine was untested/as-is and not guaranteed to work, but it was cosmetically in mint condition with original box, manuals, and even the original sales receipt!  The only thing missing was the original power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After receiving the unit and doing a little googling for 800XL pinouts, I was able to scrounge up a 5 pin DIN plug in my junk pile and wire up the +5v.  Now the original connector is 7 pin, with 3 pins tied to ground, 3 pins tied to +5v and 1 pin tied to shield.  I am only providing the +5 on 1 of the 3, and likewise the ground is only connected to 1 of the 3, but I can't see how this could be &lt;em&gt;remotely&lt;/em&gt; related to my actual problem.  The machine appears to work just fine, but I wanted to mention this in unlikely case it has any relevance on my actual problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After writing the obligatory &quot;hello world&quot; in basic, I noticed the letter A on the keyboard does not work.  I can print the letter A to the screen from basic with a &lt;code&gt;chr$(65)&lt;/code&gt;, so I know the computer/character generator/etc. are all seemingly groovy.  But pressing the &lt;kbd&gt;A&lt;/kbd&gt; key by itself, or with the &lt;kbd&gt;Shift&lt;/kbd&gt; or &lt;kbd&gt;Control&lt;/kbd&gt;, does not create any character input to the computer.  Further, every key on the keyboard makes that distinct ATARI 'click' on the audio except for the &lt;kbd&gt;A&lt;/kbd&gt; key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this thread &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/729/atari-400-faulty-keyboard-some-columns-work-most-do-not&quot;&gt;Atari 400 Faulty Keyboard - Some columns work, most do not&lt;/a&gt; and a few random newsgroup conversations which all suggest swapping U24 and U25, which are the 4051's used (I assume) in decoding the keyboard matrix.  But the symptoms described generally involve more than 1 key acting weird.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After taking the 800XL apart (wow, crazy shielding Atari!) I discovered the machine has a Rev D motherboard and the 4051's are soldered, so I cant do any  swaptronics troubleshooting to see how swapping the chips effects the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also read anecdotally that the flat keyboard membrane sometimes simply needs a good cleaning, but looking at the 18 screws in the keyboard, I'm a little gun shy about just ripping it open.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone advise me on how to proceed?  My soldering skills aren't horrible.  I could probably get the 4051's off the board and replace them with sockets, order some new ones (?) and go down that road...  Or I could dive into disassembling the keyboard and trying to clean the 'A' keys membrane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I welcome any experience or input.  My gut says (because it's a single key) that it's mechanical in the keyboard.  But I'd like to hear someone else come to the same conclusion...&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="11916" LastEditDate="2020-01-02T12:59:46.933" LastActivityDate="2020-01-02T12:59:46.933" Title="Troubleshooting and reparing an Atari 800XL with a single key not working" Tags="&lt;keyboards&gt;&lt;atari&gt;&lt;maintenance&gt;&lt;atari-800&gt;&lt;membrane-keyboard&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1559" PostTypeId="2" ParentId="1557" CreationDate="2016-10-08T21:52:43.167" Score="13" Body="&lt;p&gt;You have damaged your Spectrum for sure. The first casualty is the 7805 regulator. These normally explode and release a &quot;black smoke of the death&quot; clearly visible, but yours doesn't seem to be the case. It's curious that this component is designed to survive overvoltage and short circuit conditions, but it is very vulnerable to a polarity inversion. The second casualty is likely to be TR4 (the ZTX650 transistor that forms the DC-DC transformer inside the machine). TR5 might be damaged as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a little luck, no memory/logic/ULA/Z80 chips will be damaged and these two components will be the only ones to replace.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-10-08T21:52:43.167" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1560" PostTypeId="2" ParentId="1558" CreationDate="2016-10-09T19:15:08.450" Score="8" Body="&lt;p&gt;I've found that the old Atari keyboards can lose conductivity and that pressing they key repeatedly, not necessarily with a lot of pressure, can revive them. I've had Apple II keys start working again after pressing them a hundred or two times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming the above isn't the issue, if the rest of the keys, particularly in the same row and column work (not based on the geography of the keyboard, but of the circuit underneath) then the problem is most likely the mechanism of that one key. In theory you could try swapping the mechanism from another key to prove that fixes it but I'd probably just order a new mechanism.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2016-10-09T19:15:08.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1561" PostTypeId="1" CreationDate="2016-10-10T00:16:44.723" Score="12" ViewCount="5021" Body="&lt;p&gt;I have a few home-microcomputers that use &lt;strong&gt;SCART&lt;/strong&gt; to output both &lt;strong&gt;audio &amp;amp; video&lt;/strong&gt; to TV screens such as the &lt;strong&gt;Atari STE 1040&lt;/strong&gt; and the &lt;strong&gt;Sony MSX Hitbit 501&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have room to store old cathode-ray screens as they are really huge in comparision to modern-day LCD screens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know there are adapters to convert SCART into HDMI, but they are quite expensive (around 40-50€ for a good one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using this method I could convert SCART to HDMI/Jack and then convert HDMI to VGA. But this method doesn't seem like the most efficient one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an easier way to convert SCART video/audio ouput to VGA video and Jack audio?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastActivityDate="2016-10-20T17:09:52.913" Title="Converting SCART to VGA/Jack" Tags="&lt;display&gt;&lt;audio&gt;&lt;vga&gt;&lt;connector&gt;&lt;scart&gt;" AnswerCount="6" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1562" PostTypeId="2" ParentId="1561" CreationDate="2016-10-10T04:52:04.953" Score="5" Body="&lt;p&gt;SCART is a connector standard, not a video standard.  I think it can carry composite, s-videos (chroma/luma), analog RGB, audio and possible other formats depending on what is producing the signal.  So there isn't a one size fits all to 'convert' SCART to VGA.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, without checking, if memory serves, I think the 1040 produces analog RGB, so if the scan frequency is right, it should simply be a matter of wiring up a SCART to VGA adapter (red,green,blue,hsync,vsync)...&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2016-10-10T04:52:04.953" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1563" PostTypeId="2" ParentId="1561" CreationDate="2016-10-10T07:45:47.547" Score="7" Body="&lt;p&gt;You have three problems to overcome:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Separate sync from composite video or CSYNC into H and V to get an RGBHV output.&lt;/li&gt;&#xA;&lt;li&gt;Upscale/scan double from 15 kHz to the 31 kHz that most VGA monitors accept.&lt;/li&gt;&#xA;&lt;li&gt;Separate out the audio.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The $89 &lt;a href=&quot;http://www.ambery.com/rgbcgatovgac.html&quot; rel=&quot;nofollow&quot;&gt;Ambery 15Khz RGB CGA to VGA RGBHV Converter Scaler&lt;/a&gt; is a device that appears to do the first two, but I have no experience with it. You would still need to wire up adapters for your STE and MSX computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Robin Elvin's answer provides information about using a cheaper ($20-25) GBS-8200 or 8220. That's probably the way to go.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2016-10-10T18:09:58.663" LastActivityDate="2016-10-10T18:09:58.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1564" PostTypeId="2" ParentId="1561" CreationDate="2016-10-10T10:02:08.840" Score="9" Body="&lt;p&gt;Black-and-white hi-res from the 1040 STE on a VGA monitor should work with a direct connection and no tricky electronics at all (just the adapter cable)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Atari                                VGA&#xA;GND      13----X---- GND   ---------4 GND                      &#xA;Sense     4----+                      &#xA;                     +--------------2 green&#xA;                     X--------------1 red  &#xA;Monochr. 11----------X--------------3 blue&#xA;Hync      9-------------------------13 hsync&#xA;Vsync    12-------------------------14 vSync&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Connect &lt;em&gt;GND&lt;/em&gt; and &lt;em&gt;Sense&lt;/em&gt; on the Atari side to signal &quot;Monochrome&quot; to the Atari, and replicate &lt;em&gt;Monochrome&lt;/em&gt; to &lt;em&gt;red, green&lt;/em&gt; and &lt;em&gt;blue&lt;/em&gt; on the VGA side.)&#xA;In case you have a multi-sync monitor that will also be able to display mid- and low-res, a switch that goes into the &lt;em&gt;sense&lt;/em&gt; line is useful to be able to switch between color and B/W mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mid and low-res on the Atari cannot be displayed by a normal VGA monitor, you need to have a multi-sync monitor that can sync to a 15kHz video signal, or an external device like a scandoubler that re-creates a true VGA signal from the input signal with VGA frequency (31kHz). The same is true for an old MSX as well.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2016-10-10T11:21:51.083" LastActivityDate="2016-10-10T11:21:51.083" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1565" PostTypeId="2" ParentId="1561" CreationDate="2016-10-10T10:38:26.987" Score="8" Body="&lt;p&gt;The problem you have is that most home computers of that era output TV standard signals which VGA is not. As you've mentioned there needs to be some conversion from one standard to the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A popular solution that I happen to use is the Gonbes GBS-8200/GBS-8220 boards. They aren't perfect and some people hate them but they are reasonably cheap and I think they do an acceptable job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to create a SCART input connection as these boards come with cables ready to be connected to whatever you like (as they are designed for arcade boards)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's some info: &lt;a href=&quot;http://forum.arcadecontrols.com/index.php?topic=123399.0&quot;&gt;ArcadeControls.com&lt;/a&gt;&#xA;And a video: &lt;a href=&quot;https://youtu.be/uLvMoePH58E&quot;&gt;Atari ST and GBS-8220&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will probably need a resistor in the SCART cable for the SYNC signal. You can read about it &lt;a href=&quot;http://www.ianstedman.co.uk/Amiga/amiga_hacks/Amiga_SCART/amiga_scart.html&quot;&gt;here&lt;/a&gt; (don't worry that it is for the Amiga, it applies SCART in general)&#xA;Alternatively if you want to have a more comprehensive solution you can add a &lt;a href=&quot;http://arcadeforge.net/Scaler-and-Strike-Devices/Sync-Strike::15.html?language=en&quot;&gt;Sync Strike&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="708" LastActivityDate="2016-10-10T10:38:26.987" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1566" PostTypeId="2" ParentId="1561" CreationDate="2016-10-10T15:42:26.500" Score="4" Body="&lt;p&gt;Another possibility would be to use a cheap USB video capture device, such as &lt;a href=&quot;https://www.amazon.co.uk/CSL-software-compatible-processing-post-processing/dp/B00XHOHRPW/ref=sr_1_3?ie=UTF8&amp;amp;qid=1476113664&amp;amp;sr=8-3&amp;amp;keywords=usb+video+capture&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;. (You'll also need a SCART to composite video adapter, which you can &lt;a href=&quot;https://www.amazon.co.uk/Switchable-Scart-Phono-S-Video-Adaptor-Gold/dp/B0018DE4ZU/ref=pd_bxgy_147_img_2?ie=UTF8&amp;amp;psc=1&amp;amp;refRID=74C1XK7191AC6N9E0VA3&quot; rel=&quot;nofollow&quot;&gt;buy&lt;/a&gt; or wire up yourself).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Connect the video oputput of your Atari (or whatever you have) to the USB video capture device, the USB capture device to a modern PC, and then you can see the video output on whatever display you can connect to your computer, and you'll have the audio as well. (You may need to use a media player such as VLC if the software bundled with the capture device doesn't support e.g. fullscreen display of the input.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The benefit of this solution is that it's cheap (assuming you already have a computer), and you can also &quot;record&quot; the video output. Beware that depending on the device / computer, this may introduce some delay or lag.&lt;/p&gt;&#xA;" OwnerUserId="152" LastActivityDate="2016-10-10T15:42:26.500" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1567" PostTypeId="2" ParentId="1558" CreationDate="2016-10-10T20:23:16.933" Score="19" Body="&lt;p&gt;In the end, I decided that it had to be easier to take the keyboard apart than to de-solder the 4051's and so I carefully removed the 18 tiny screws from the back of the keyboard.  It wasn't nearly as bad as I expected (I was concerned that I was going to have springs everywhere).  After disassembly I fired up the Atari to try and see if I could get the &lt;kbd&gt;A&lt;/kbd&gt; key to work by pushing directly on the membrane, which did indeed work as expected.  So I turned off the machine, swabbed the membrane contacts with alcohol, let everything dry thoroughly and reassembled the keyboard.  The &lt;kbd&gt;A&lt;/kbd&gt; key is now working as expected.  The problem was obviously purely mechanical.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="6794" LastEditDate="2019-05-12T15:05:34.947" LastActivityDate="2019-05-12T15:05:34.947" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1568" PostTypeId="2" ParentId="1543" CreationDate="2016-10-11T13:34:10.157" Score="4" Body="&lt;p&gt;@Mark is on the right track with this when discussing targeted versus non-targeted attacks. To be more specific, this depends on the nature of the threat that you are trying to defend against.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are up against a hostile government, organized crime syndicate, or similar threat that is specifically targeting &lt;em&gt;you&lt;/em&gt; and is actively engaged in gathering intelligence on your operations and infrastructure, running older operating systems isn't going to provide a meaningful defense as the hackers will just target you with exploits for whatever OS you use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are defending against random opportunistic attackers who are looking for quick and easy victims, older operating systems will likely provide some defense as most opportunists are going to be targeting the most commonly used operating systems.&lt;/p&gt;&#xA;" OwnerUserId="3423" LastActivityDate="2016-10-11T13:34:10.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1569" PostTypeId="2" ParentId="756" CreationDate="2016-10-11T16:47:12.827" Score="2" Body="&lt;p&gt;As far as I've been able to tell, 8-inch floppies have never been supported or widely used on PC or Macintosh systems, but the &lt;a href=&quot;http://www-03.ibm.com/ibm/history/exhibits/pc/pc_8.html&quot; rel=&quot;nofollow&quot;&gt;IBM Displaywriter&lt;/a&gt; system &lt;a href=&quot;http://www.obsoletecomputermuseum.org/displayw/&quot; rel=&quot;nofollow&quot;&gt;uses 8-inch disks&lt;/a&gt;. It predates the actual IBM PC/Wintel architecture (x86, IBM BIOS, ISA, MS-DOS, etc.) by a year but it is an IBM product and also has an x86 processor so it might be worthwhile to investigate to what extent its drives and/or floppy interface could be converted to something a PC could use. Since it's x86, its floppy card might be able to be adapted to an 8-bit Industry Standard Architecture (ISA) card since ISA is based on the x86 bus.&lt;/p&gt;&#xA;" OwnerUserId="3423" LastEditorUserId="3423" LastEditDate="2016-10-11T16:54:52.067" LastActivityDate="2016-10-11T16:54:52.067" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1570" PostTypeId="1" AcceptedAnswerId="1571" CreationDate="2016-10-11T18:12:56.390" Score="5" ViewCount="265" Body="&lt;p&gt;I'm trying to revive an old travelMate 518tx and I'm currently in the process of searching for bottlenecks. I want to check if the RAM sticks are still functional or not, but they're both very old, and I'm unsure how I can test them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to either insert them into my computer or to see if they work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Picture of the RAM sticks (pencil for scale):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/6LyLy.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="762" LastEditorUserId="762" LastEditDate="2016-10-13T08:54:23.640" LastActivityDate="2016-10-13T08:54:23.640" Title="Checking if RAM is functional" Tags="&lt;hardware&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1571" PostTypeId="2" ParentId="1570" CreationDate="2016-10-11T19:43:51.567" Score="7" Body="&lt;p&gt;Those look like 144-pin &lt;a href=&quot;https://en.wikipedia.org/wiki/SO-DIMM&quot;&gt;SO-DIMM&lt;/a&gt; memory modules.  It's a very old memory technology.  If the computer you pulled them from isn't working, your best bet is to find a known-working laptop of about the same age that takes that type of memory, install the RAM sticks one at a time, and run &lt;a href=&quot;http://www.memtest.org/&quot;&gt;MemTest86+&lt;/a&gt; from a boot CD or floppy to check the memory.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-10-11T19:43:51.567" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1572" PostTypeId="2" ParentId="1349" CreationDate="2016-10-12T20:28:13.317" Score="13" Body="&lt;p&gt;From the perspective of an independent Apple II programmer back in the mid-80s, I used a mix of AppleSoft BASIC and 6502 assembly language. My primary tooth cut was BBS software. One thing I'll say is that I had notebooks filled for every project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Editing Code&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AppleSoft BASIC's program editor (i.e. the interactive one that you entered when you powered on the machine) was fine, but didn't make it easy to edit programs. Sure, you could move the cursor around but when LISTed there was formatting which introduced gaps; it was actually faster in many cases to just retype the line. I eventually adopted a program called GPLE (Global Program Line Editor) from Beagle Bros. which made editing far easier (e.g. insert mode VS the editor's standard overstrike behavior).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 6502 assembly, I used Merlin as an editor / assembler. It did a decent job and helped keep your tabs (as in column position of text) in order. Compile times were acceptable for the era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Source Control&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't hear of source control until the 1990's, but I had two main practices:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Periodically snapshot your code by copying it to a floppy disk and labeling it (e.g. BBS v1.3 Oct 10, 1986).&lt;/li&gt;&#xA;&lt;li&gt;If I was to make a change that I wasn't sure if I would keep, I would save a copy of the current state as another file so I could roll back if needed (e.g. LOGON.BAK)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I would imagine that source control was rare on the 8-bit home computers since in all honesty you really need a mass storage device to do such a thing; hard disks were very expensive back in those days (20MB Sider for the Apple II ran about $550 in 1986 or about $1200 in 2016 dollars).&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2016-10-13T12:05:52.763" LastActivityDate="2016-10-13T12:05:52.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1573" PostTypeId="2" ParentId="1349" CreationDate="2016-10-13T08:31:59.483" Score="8" Body="&lt;p&gt;In my early days on the Apple II (82-83) I used the mini-assembler in the integer basic roms to write an assembler of my own using AppleWriter 1 as the text editor. Source code backup was just straight copies of floppies. When ProDOS came out I moved over to the Apple Assembler that came with the SDK. I wrote a generic Zap the alien program, a half decent Asteriods clone and an implementation of Forth with that setup. Documentation was pretty good from Apple but a lot of the time I relied on references from Byte articles to find new books to borrow from the Library. The early Dr Dobbs got reprinted and bound and that was a gem to finally get from the Library. In the end I moved over to CP/M on the Apple with Turbo Pascal as my main environment eventually working for Borland in the UK doing technical support for a short period.&lt;/p&gt;&#xA;&lt;p&gt;I tended to write my own games on the Apple II as I only knew one other kid with one and once we'd got the ripped off games swapped over new ones were far too expensive (£30 each rather than the £5 a spectrum game would have cost) I think the only originals I had was Suspended, The prisoner and Zaxxon.&lt;/p&gt;&#xA;&lt;p&gt;Bigger outfits like Sinclair used a VAX for a shared development environment, I don't think there was much in the way of source control (VMS did have the ability to store earlier copies of files) I certainly know that some of the later spectrum ROM developers (I worked with some of them at a startup after Sinclair went bust) tended to use Ian Logans spectrum ROM book as it was better than the official source code.&lt;/p&gt;&#xA;&lt;p&gt;On the source control front, SCCS was available on Unix boxes and I was  excited to get a copy of RCS ported to MS-DOS by MKS sometime around 1987, I seem to remember using it on a BSD based Whitechapel MG-1 before that point.&lt;/p&gt;&#xA;&lt;p&gt;The early versions of CVS were basically shell scripts wrapped around RCS (1993?) SourceSafe appeared a little earlier and was bought by Microsoft (1994) fairly quickly, I remember using it at one job before the Microsoft purchase.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="15334" LastEditDate="2020-11-13T21:21:43.617" LastActivityDate="2020-11-13T21:21:43.617" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1574" PostTypeId="2" ParentId="1398" CreationDate="2016-10-13T10:05:59.233" Score="5" Body="&lt;p&gt;I've been meaning to get around to this for ages, sorry. Tonight I stumbled across SAMS COMPUTERFACTS for the Apple IIe which I had &lt;a href=&quot;https://archive.org/details/Sams_Computer_Facts_Apple_IIe&quot; rel=&quot;noreferrer&quot;&gt;downloaded from the Internet Archive&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the logic chart data for the CPU (IC UC4) from page 27. I've rearranged it for clarity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pin 6 should be high, as you say. (Note: I haven't verified this data on real hardware yet.)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;21 L  20 L&#xA;22 L  19 P&#xA;23 L  18 P&#xA;24 P  17 P&#xA;25 P  16 P&#xA;26 P  15 P&#xA;27 P  14 P&#xA;28 P  13 P&#xA;29 P  12 P&#xA;30 P  11 P&#xA;31 P  10 P&#xA;32 P  09 P&#xA;33 P  08 H&#xA;34 P  07 P&#xA;35 *  06 H&#xA;36 *  05 *&#xA;37 P  04 H&#xA;38 H  03 P&#xA;39 P  02 H&#xA;40 H  01 L&#xA;&#xA;L = Low&#xA;H = High&#xA;P = Pulse&#xA;* = Open (No light On)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;NOTE: Logic probe readings taken in Power Up mode, without Disk II&#xA;  Interface Board inserted&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="71" LastActivityDate="2016-10-13T10:05:59.233" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1575" PostTypeId="1" AcceptedAnswerId="1581" CreationDate="2016-10-13T16:50:04.280" Score="18" ViewCount="4399" Body="&lt;p&gt;What is a simple way to tell how much RAM an Apple IIe has? The main RAM is fixed, but Aux RAM can vary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like a solution that can be typed quickly from the keyboard: the context is that I'm asking a Craigslist seller about the machine they're offering.&lt;/p&gt;&#xA;" OwnerUserId="335" LastEditorUserId="2037" LastEditDate="2016-10-14T11:30:25.137" LastActivityDate="2016-10-15T09:41:13.350" Title="Quick way to tell how much RAM an Apple IIe has" Tags="&lt;apple-ii&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1576" PostTypeId="2" ParentId="1575" CreationDate="2016-10-13T19:21:34.877" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.virtualbasic.org/art-18-tit-Applesoft-Basic-commands&quot; rel=&quot;nofollow&quot;&gt;AppleSoft Basic&lt;/a&gt; has a function called &lt;code&gt;FRE&lt;/code&gt; which returns a value representing the free memory available.  According to the &lt;a href=&quot;http://apple2.info/wiki/index.php?title=Applesoft_BASIC#Memory_Management.2FUse:&quot; rel=&quot;nofollow&quot;&gt;AppleSoft wiki - Memory Management/Use&lt;/a&gt; if the system has more than 32K, that &lt;code&gt;FRE&lt;/code&gt; will return a negative number, and that you should then add 65536 to that value:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If the free memory is greater than 32K, it will be returned as a number less than zero; add 65536 to that to get the real number.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To verify, I tried this out on an &lt;a href=&quot;https://www.scullinsteel.com/apple2/&quot; rel=&quot;nofollow&quot;&gt;online Apple II emulator&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;]PRINT (FRE(0))&#xA;-18449&#xA;&#xA;]PRINT (FRE(0)+65536)&#xA;47094&#xA;&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now while this might not return the total system RAM, remember that the operating system has a memory footprint itself.  Another limitation here is that AppleSoft Basic can't see beyond the 64K RAM that it's designed to run on.  But you'll at least be able to see if the first 64K is good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you had more time and access to the system, you could use &lt;a href=&quot;http://www.atarimagazines.com/compute/issue1/UNIVERSAL_6502_MEMORY_TEST.php&quot; rel=&quot;nofollow&quot;&gt;Carl Moser's 6502 memory test&lt;/a&gt;.  But that's certainly &lt;em&gt;not&lt;/em&gt; a simple or quick approach. &lt;/p&gt;&#xA;" OwnerUserId="125" LastActivityDate="2016-10-13T19:21:34.877" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1577" PostTypeId="2" ParentId="1575" CreationDate="2016-10-13T19:50:23.460" Score="9" Body="&lt;p&gt;There is no easy way to do this from BASIC or another command since the 6502 only sees up to 64KB and the rest beyond that needs bank switching which varies depending on the memory expansion card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, I can think of one way that you could do this with ProDOS and BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, this is assuming that you have 64KB machine which for more recent versions of ProDOS required in the first place (ignoring the recently released 2.4.1). You are mentioning this is for a //e, so you would have base 64KB anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From BASIC, type &lt;code&gt;CATALOG /RAM&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look for the &quot;&lt;code&gt;TOTAL BLOCKS:  nnnnn&lt;/code&gt;&quot; bit and multiply 'nnnnn' number of blocks by 512 and add an additional 512. In other words, if you see &quot;TOTAL BLOCKS: 127&quot;, then:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory = (127 * 512) + 512  =&gt;  65536  (a.k.a. 64KB of aux RAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea here is that if ProDOS recognizes your aux RAM and is using it as a /RAM disk, then the total blocks (plus the missing 512 bytes for presumably hidden zero and stack pages?) would be the amount of AUX ram installed in your machine. So add the base 64KB plus the aux 64KB and you've identified it as 128KB. Note that the full-form &lt;code&gt;CATALOG&lt;/code&gt; is key here since short-form &lt;code&gt;CAT&lt;/code&gt; does not display that value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure if this helps your Craigslist seller, but if they have a bootable ProDOS image and can drop down to basic, you could at least ask them to tell you the total blocks number.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-10-13T19:50:23.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1578" PostTypeId="1" AcceptedAnswerId="1579" CreationDate="2016-10-13T20:48:36.440" Score="16" ViewCount="814" Body="&lt;p&gt;Sounds from the Atari 8-bit computer line came through the RF video cable into your television much like video game systems from the time. The original Atari 400/800 also had a built in speaker, though from what I can tell it only produced the keyboard &quot;click&quot; sounds and wasn't meant to do anything else. I don't think the internal speaker was included in the later XL and XE lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was the internal speaker of the original 400/800 usable for anything other than the keyboard click? That being said, how was it hooked up in the architecture? By this I mean was it tied to one of the POKEY channels (doubtful) or was there dedicated circuitry for the speaker?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-10-13T21:26:40.970" Title="Was the Atari 400/800 internal speaker of any use besides key click?" Tags="&lt;atari-800&gt;&lt;atari-400&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1579" PostTypeId="2" ParentId="1578" CreationDate="2016-10-13T21:26:40.970" Score="12" Body="&lt;p&gt;The speaker was known as the console speaker and is controlled using the byte at location &lt;a href=&quot;http://www.atariarchives.org/mapping/memorymap.php#53279&quot;&gt;53279&lt;/a&gt;; as indicated in &lt;em&gt;Mapping the Atari&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;POKEing any number from zero to&#xA;       eight will cause a click from the speaker.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The book also includes a program listing based on a COMPUTE! article, illustrating how to play different tones on the console speaker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.atarimania.com/documents/Atari_400_800_Field_Service_Manual_June_82.pdf&quot;&gt;Atari 400/800 service manual&lt;/a&gt; mentions specific circuitry on the motherboard, which&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Provides the driving circuitry for the Key-Press signal from the Central Processing Unit PCB to the Console speaker.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(page 1-12). Page 1-18 of the service manual shows the Atari 400 motherboard block diagram; the keyboard speaker is connected to the CPU board &lt;em&gt;via&lt;/em&gt; a connector jack (J106), and the circuit doesn't go through POKEY. Page 1-20 shows the same information for the Atari 800, with the same layout but a different number for the connector jack (J105).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The console speaker was removed in later systems; the key click was routed through the TV speaker and could be disabled (see the &lt;a href=&quot;http://www.atarimania.com/faq-atari-400-800-xl-xe-what-is-an-atari-8-bit-computer_3.html&quot;&gt;Atari 8-bit FAQ&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-10-13T21:26:40.970" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1580" PostTypeId="2" ParentId="1575" CreationDate="2016-10-13T21:30:48.907" Score="3" Body="&lt;p&gt;According to folks on IRC, the simplest method is to pop it open, and check the Aux card: apparently the &quot;64k&quot; is clearly stenciled on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the ProDOS approach won't work: a couple of the ebay sellers have what they think is a working IIe, but no disks.&lt;/p&gt;&#xA;" OwnerUserId="335" LastActivityDate="2016-10-13T21:30:48.907" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1581" PostTypeId="2" ParentId="1575" CreationDate="2016-10-13T23:55:05.340" Score="11" Body="&lt;p&gt;Nice answer from bjb. But here are some simple checks to do if the user can't boot ProDOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Power on with no disk (or drive) and hit reset. Then (Test #1) type:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PR#3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If it goes into 80-column mode they have an 80-column card installed. Now is it 1k or 64k? (Test #2)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;TEXT : REM This is to put the cursor at the bottom of the screen&#xA;HGR  : REM This clears the HIRES screen to black&#xA;CALL-151&#xA;C05E&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Vertical white bars in the HIRES area (above the text area) means it's 64k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example display after Test #2 from a real Apple //e with 64k RAM card:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/do3gG.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/do3gG.png&quot; alt=&quot;Vertical dashed stripes in DHIRES on Apple IIe with 64k RAM card&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the HIRES area is still black it's most probably 1k, but you could try the following: (Test #3)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C055:0 N 2000:FF N 2001&amp;lt;2000.3FF8M&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If this displays vertical white bars in the HIRES area then it's 64k, otherwise if it's all white it's 1k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Technical Notes&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Test #2 simply clears the HIRES screen in main ram and then tries to enable DHIRES mode by accessing $C05E. The 1k RAM card doesn't support DHIRES so the black HIRES screen will still be displayed, whereas a 64k (or more) RAM card will enable DHIRES. Since main HIRES is cleared, any data in aux HIRES will appear as vertical stripes in DHIRES. What data will be in aux HIRES?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple II RAM is not initialized by the firmware at power-on, but it does take on an initialization pattern determined by the physical characteristics of the hardware. There are several different patterns, but each one is a number of 00's followed by a number of FF's repeated throughout memory. The interaction between this memory pattern and the HIRES memory mapping results in either a checker-board or a horizontally or vertically striped initial HIRES image. (This is the origin of the &quot;venetian blind effect&quot; for the first HGR command after power-on.) Vertical stripes are seen in Test #2 when main HIRES is cleared, aux HIRES still has the pattern, and DHIRES is enabled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Test #3 will not usually be required on real hardware, but is necessary for testing in emulators that do not initialize Apple II memory with the usual patterns. It uses a few monitor tricks to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Combine multiple commands with the N (normal text) command.&lt;/li&gt;&#xA;&lt;li&gt;Write to $C055 to attempt to access aux HIRES. A read would be sufficient, but in this command combination a read would interfere by printing a value - the monitor routines use $C054 and $C055 to print 80-column text.&lt;/li&gt;&#xA;&lt;li&gt;Attempt to fill aux HIRES with FF's. This will only work as expected on a 64k RAM card.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2016-10-15T09:41:13.350" LastActivityDate="2016-10-15T09:41:13.350" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1582" PostTypeId="1" CreationDate="2016-10-15T17:43:21.087" Score="13" ViewCount="757" Body="&lt;p&gt;I am a sucker for 8 bit &lt;del&gt;junk&lt;/del&gt; components, and recently picked up a Sider hard disk for my Apple //e.  I was able to talk myself into the purchase by fondly remembering how I lusted after this piece of equipment back in the day, and how cool my Apple //e will be when it has a hard disk drive attached!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, I was only able to get the drive and I am beginning to realize that this is going to be a &lt;em&gt;long term&lt;/em&gt; project.  I do not have a controller card for the drive, nor did the prior owner, so other than knowing the drive will spin up when power is applied, I have no way of knowing what condition the unit is in.  For example, there is no way to tell if the heads were ever parked (and even if they were, the power on test probably un-parked them).  So I am (of course) worried about mechanical problems with a 30-ish year old hard disk drive and anxious to try and get it working again (and determine if I got suckered into buying a really sexy paperweight).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enough background, my question is what should I look for in a controller card?  I've read that the Sider was SASI (the forerunner of SCSI) and that the RamFAST card by Sequential Systems would be a good choice for a controller (assuming I can find one).  I've also read that Apple produced a SCSI controller for the //e and //gs but I am uncertain if that card would work with a SASI drive (assuming the drive &lt;em&gt;is&lt;/em&gt; SASI).  I have been scanning ebay and there are a few auctions for cards but no concrete information if they would work.  Also, they are not cheap and I would prefer to avoid throwing good money after bad if the drive is a dud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As always, any and all input is greatly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2019-12-05T01:02:59.083" Title="How to connect an Apple IIe to an external Sider hard disk drive" Tags="&lt;apple-ii&gt;&lt;scsi&gt;&lt;sasi&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1583" PostTypeId="2" ParentId="1582" CreationDate="2016-10-16T23:15:26.283" Score="5" Body="&lt;p&gt;I've never used these, but look around on &lt;a href=&quot;https://groups.google.com/forum/#!searchin/comp.sys.apple2/sider$20ramfast%7Csort:relevance/comp.sys.apple2/AGRHb2K2bIM/YbnCsRKOgzEJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;comp.sys.apple2&lt;/a&gt; for answers to your questions ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are rumours that some of the later Sider models were actually SCSI. Almost all were SASI, which need the original controller to be read if you want to keep what's on the drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only SCSI card that can use the Sider is the RamFAST/SCSI (because the card designers included support) but if the drive has a notice on the bottom about supplying termination power you must disable termination power on the RamFAST card or else magic smoke may be released! You will need to reformat the drive using the RamFAST utilities. The Sider utilities won't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other cards like the Apple SCSI card cannot be used. (Apple didn't care about Xebec.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RamFAST manuals including the helpful &quot;unofficial&quot; manual are &lt;a href=&quot;http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/SCSI%20Controllers/Sequential%20Systems%20RamFAST%20SCSI/&quot; rel=&quot;nofollow noreferrer&quot;&gt;online&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2019-12-05T01:02:59.083" LastActivityDate="2019-12-05T01:02:59.083" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1584" PostTypeId="2" ParentId="1582" CreationDate="2016-10-17T12:47:23.263" Score="4" Body="&lt;p&gt;If you want to access what is on the disk, most likely you'll need the Xebec SASI interface card (this is what came with the Sider). The ROM versions on the card could make a difference since there were a few revisions and even one aftermarket one that allowed the whole 20MB to be used instead of the standard 16MB limit of the stock ROMs. However, if you don't care about the contents, you're probably fine with the other suggested solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need a DB25 SASI (SCSI?) terminator plug. The device will not talk to the interface card without one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can power it up, great! However, be careful since the power supply is probably going to die soon. If you had a Sider back in the day, it was probably left on a lot (mine was for a BBS). I last powered it on in 2002, but attempting that several months ago resulted in the power supply making 2 popping noises and no spin-up. It is a standard 5.25&quot; half height drive inside, though the cable is ~50pin wide cable, but standard 4-pin molex for power. Note that the front &quot;door&quot; will break off (glued tabs), but I think you can avoid that when opening the rest of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I had the forethought years ago, I would have plugged it into a simple SCSI-1 interface to &lt;code&gt;dd&lt;/code&gt; dump out the contents. I've never read anything that said it would work, but I've seen enough to suggest that simple operations should work; I don't think there is any risk of electrical incompatibility (read: fry something), but don't take my word on that since I haven't done it myself nor have I read to suggest it won't fry anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2016-10-17T16:32:14.983" LastActivityDate="2016-10-17T16:32:14.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1585" PostTypeId="1" AcceptedAnswerId="1586" CreationDate="2016-10-18T11:03:22.700" Score="17" ViewCount="1304" Body="&lt;p&gt;I started this project ages ago and it's just been sitting on my bench for ever. I have this old MacIIci and I put a LAN card in it, maxed out the memory, has the turbo proc in it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next step I wanted to take was using this adapter that converts a modern SD card to 50-pin SCSI (I maybe wrong on specifics but, the hardware isn't the point). The adapter works great!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem I have ran into is that I cannot for the life of me figure out a way to format this 256MB SD card as HFS. I'm not really a mac guy but, I spent a considerable amount of time on this project and absolutely hit a wall with this ancient format. Everything that I can find only formats HFS+. If anybody has an old tool laying around, idea, anything; I would greatly appreciate some guidance on this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing I was considering was just creating a share on like Windows Server 2000 and moving files that way but, Apple Talk hasn't given me any luck either. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, is there a way to access terminal on an old school mac?&lt;/p&gt;&#xA;" OwnerUserId="3439" LastEditorDisplayName="user39" LastEditDate="2019-02-01T05:40:58.720" LastActivityDate="2019-02-01T05:40:58.720" Title="A good method for formatting a modern device in HFS (Not HFS+)" Tags="&lt;apple-macintosh&gt;&lt;mac-os-classic&gt;&lt;apple&gt;&lt;hfs&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1586" PostTypeId="2" ParentId="1585" CreationDate="2016-10-18T11:20:34.870" Score="16" Body="&lt;p&gt;If you have a system running on your IIci you could presumably use that to format your drive, but I'm guessing that's not the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To build a working image on the SD card, there are two things to get right: the partition map, and the HFS filesystem itself. The &lt;a href=&quot;http://www.codesrc.com/mediawiki/index.php?title=HFSFromScratch&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCSI2SD wiki&lt;/a&gt; has a page detailing the steps; the short version is&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;setup an old Mac system in an emulator (&lt;a href=&quot;http://minivmac.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mini vMac&lt;/a&gt; or &lt;a href=&quot;http://basilisk.cebix.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Basilisk II&lt;/a&gt;);&lt;/li&gt;&#xA;&lt;li&gt;install your system on a disk image which is slightly smaller than the target SD card;&lt;/li&gt;&#xA;&lt;li&gt;use &lt;a href=&quot;http://www.codesrc.com/gitweb/index.cgi?p=hfdisk.git;a=summary&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;hfsdisk&lt;/code&gt;&lt;/a&gt; to create the partition map;&lt;/li&gt;&#xA;&lt;li&gt;install a SCSI driver partition;&lt;/li&gt;&#xA;&lt;li&gt;copy your image to the target SD card.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As far as terminals on old Macs go, the system wasn't really designed for one; the &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Programmer&amp;#39;s_Workshop&quot; rel=&quot;nofollow noreferrer&quot;&gt;Macintosh Programmer's Workshop&lt;/a&gt; includes one that you can use if you really want to (look at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Programmer&amp;#39;s_Workshop#External_links&quot; rel=&quot;nofollow noreferrer&quot;&gt;external links&lt;/a&gt; for download mirrors).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-05-14T16:33:23.893" LastActivityDate="2017-05-14T16:33:23.893" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1587" PostTypeId="2" ParentId="1585" CreationDate="2016-10-18T12:51:08.230" Score="7" Body="&lt;p&gt;If you are making a share on Windows 2000 Server, make sure you are install the Services for Macintosh component (it's not installed by default).  Also you need to be running MacOS 8.5 or later to be able to access it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Old versions of MacOS didn't come with a terminal application built-in; I am not sure but I suspect this became a feature when the OS became Unix-based.  But you could certainly get terminal applications for old Macs, for example I used to use MacKermit (handy for both terminal emulation and file transfer).&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2016-10-18T12:51:08.230" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1588" PostTypeId="2" ParentId="1585" CreationDate="2016-10-18T18:17:49.560" Score="8" Body="&lt;p&gt;The &lt;a href=&quot;https://www.mars.org/home/rob/proj/hfs/&quot; rel=&quot;noreferrer&quot;&gt;HFS Utilities&lt;/a&gt; package looks like it will let you format the disk from a Linux system; modern Windows may also be supported (it says &quot;95/NT&quot;, which means you may run into permissions errors on Vista or newer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears to still work -- it'll format a disk image that the Linux HFS subsystem will recognize and mount.  I haven't tested it on an actual disk or with an actual Macintosh.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-10-18T18:17:49.560" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1589" PostTypeId="1" AcceptedAnswerId="1590" CreationDate="2016-10-19T17:58:04.513" Score="7" ViewCount="433" Body="&lt;p&gt;According to Wikipedia, &lt;a href=&quot;https://en.wikipedia.org/wiki/P%E2%80%B2%E2%80%B2&quot; rel=&quot;noreferrer&quot;&gt;P′′&lt;/a&gt; is a &quot;primitive computer programming language created by Corrado Böhm in 1964 to describe a family of Turing machines.&quot;  P′′ contains only four instructions has influenced languages such as Brainfuck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While a modern interpreter would not be too difficult to write (I'm debating tackling it as a weekend project myself), are there any modern P′′ interpreters?  What about references to the original source code/interpreter from the '60s?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="4025" LastEditDate="2017-11-09T19:56:07.883" LastActivityDate="2017-11-09T19:56:07.883" Title="P′′ Language Interpreter/Compiler Resources" Tags="&lt;programming&gt;&lt;software-recommendation&gt;&lt;compilers&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1590" PostTypeId="2" ParentId="1589" CreationDate="2016-10-20T09:40:42.290" Score="8" Body="&lt;p&gt;The original Böhm paper itself is hard to find (see for example &lt;a href=&quot;https://cs.stackexchange.com/questions/14983/how-to-prove-the-structured-program-theorem&quot;&gt;How to prove the structured program theorem?&lt;/a&gt;), let alone the original interpreter from the 60s...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the &lt;a href=&quot;https://esolangs.org/wiki/Main_Page&quot; rel=&quot;nofollow noreferrer&quot;&gt;esoteric programming languages wiki&lt;/a&gt; has an implementation of a P′′ interpreter in Haskell, on the &lt;a href=&quot;https://esolangs.org/wiki/P%E2%80%B2%E2%80%B2&quot; rel=&quot;nofollow noreferrer&quot;&gt;P′′ page&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2017-04-13T12:48:39.050" LastActivityDate="2016-10-20T12:50:36.330" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1591" PostTypeId="1" AcceptedAnswerId="1593" CreationDate="2016-10-20T10:23:10.183" Score="23" ViewCount="2945" Body="&lt;p&gt;I figure this is fitting for Retrocomputing.SE because CPUs like the 6502 and Z80 and the PDP-8, and probably others, have undocumented instructions and will happily execute them, in contrast with serious and modern CPUs which will trigger some sort of &quot;this can't continue&quot; state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/CPU_unofficial_opcodes&quot;&gt;nesdev wiki&lt;/a&gt; it talks about some games which use alternatives to the usual &lt;code&gt;NOP&lt;/code&gt;. It seems a though those games could have used the actual &lt;code&gt;NOP&lt;/code&gt; on the 6502 ($EA) or left that instruction entirely out of course. And some programs mentioned use the &lt;code&gt;LAX&lt;/code&gt; instruction, but those could have used &lt;code&gt;LDA&lt;/code&gt; and &lt;code&gt;TAX&lt;/code&gt; together for to get the same effect (even though it's a bit slower). Similarly, &lt;code&gt;SAX&lt;/code&gt; can probably be replaced by a (longer and slower) sequence involving &lt;code&gt;TAX&lt;/code&gt;, &lt;code&gt;AND&lt;/code&gt; and &lt;code&gt;STA&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is if there is a known use of an undocumented instruction, where a documented/official instruction would not have done?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-06-12T02:51:05.947" Title="Use of undocumented opcodes" Tags="&lt;z80&gt;&lt;mos-650x&gt;&lt;pdp-8&gt;" AnswerCount="4" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1592" PostTypeId="1" AcceptedAnswerId="1595" CreationDate="2016-10-20T10:52:44.497" Score="15" ViewCount="869" Body="&lt;p&gt;I am interested in the SKIP instructions on the PDP-8. These test the accumulator and Link bit, and they skip the next instruction if the condition holds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The instructions are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;OR GROUP&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;SMA&lt;/code&gt; - Skip if the Accumulator is less than zero.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SZA&lt;/code&gt; - Skip if the Accumulator is zero.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SNL&lt;/code&gt; - Skip if the Link bit is 1.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;AND GROUP&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;SPA&lt;/code&gt; - Skip if the Accumulator is zero or positive.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SNA&lt;/code&gt; - Skip if the Accumulator is unequal to zero.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SZL&lt;/code&gt; - Skip if the Link bit is 0.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And you can combine any of the three in each group into a single instruction. For example, if you wanted to skip the next instruction if the Accumulator is zero OR the Link bit is 1, then you may code &lt;code&gt;SZA SNL&lt;/code&gt; as a single instruction. The OR group also has a &quot;don't skip&quot;. The AND group also has a &quot;skip unconditionally&quot;. So as you can see, each group has the opposite conditions of the other group. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is quite different from the conditional branching on the PDP-11 and the 6502 computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why did they design the PDP-8 in this way? Is there some logic to associating &lt;code&gt;SPA&lt;/code&gt; &lt;code&gt;SNA&lt;/code&gt; &lt;code&gt;SZL&lt;/code&gt; with boolean AND, and &lt;code&gt;SMA&lt;/code&gt; &lt;code&gt;SZA&lt;/code&gt; &lt;code&gt;SNL&lt;/code&gt; with boolean OR? Or is it some artifact of the underlying electronics?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="7432" LastEditDate="2018-03-23T13:26:47.693" LastActivityDate="2020-03-11T14:41:27.963" Title="Conditional skip instructions of the PDP-8" Tags="&lt;dec&gt;&lt;pdp-8&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1593" PostTypeId="2" ParentId="1591" CreationDate="2016-10-20T11:55:22.653" Score="29" Body="&lt;p&gt;In some cases undocumented instructions may be useful as shortcuts to accomplish tasks that are &quot;difficult&quot; to achieve with the official instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going with the Z80, it is common practice amongst developers to make use of the undocumented instructions that allow to access index registers IX and IY as pairs of 8-bit registers (so IXh, IXl, IYh, IYl). For example, how do you load A with the upper half of IX? With the official instructions you are forced to do something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;push ix&#xA;pop af&#xA;&#xA;;But hey, I don't want to lose my flags!&#xA;push ix&#xA;pop hl&#xA;ld a,h&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However there's an undocumented instruction that does exactly that, so why not using it?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld a,ixh&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;By the way, a good resource for undocumented Z80 behavior information is the &lt;a href=&quot;http://www.z80.info/zip/z80-documented.pdf&quot;&gt;The Undocumented Z80 Documented&lt;/a&gt; document by Sean Young.&lt;/p&gt;&#xA;" OwnerUserId="130" LastActivityDate="2016-10-20T11:55:22.653" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1594" PostTypeId="2" ParentId="1592" CreationDate="2016-10-20T12:02:17.647" Score="4" Body="&lt;p&gt;It is an artifact of the underlying electronics.&lt;/p&gt;&#xA;&lt;p&gt;The PDP-8 had a very small instruction set of just 8 elementary instructions.&lt;br /&gt;&#xA;The PDP-8 used core memory, predating RAM.&lt;br /&gt;&#xA;Remember that the act of reading a location of core memory had the side effect of setting it to zero - something I suspect would give modern software writers kittens.&lt;/p&gt;&#xA;&lt;p&gt;The AND and OR groups you mention in your question are actually part of the OPERATE instruction.  As you say, a bitwise OR of SMA and SML created a new, single word, instruction.&lt;/p&gt;&#xA;&lt;p&gt;Software had to be written to optimise the use of the core.  If you zero your memory, you have to write something back.  The basic 8 instructions were designed with this optimisation in mind.&lt;/p&gt;&#xA;&lt;p&gt;The 8 instructions didn't include OR (or XOR).  To implement these in a program you had to construct them in code.  This was done with the OPERATE instruction as you have found.&lt;/p&gt;&#xA;&lt;p&gt;My memory of PDP-8s is a little rusty (I used the PDP-11 much more!), but I hope this gives some steer.&lt;br /&gt;&#xA;There is some good information on the PDP-8 at &lt;a href=&quot;https://www.grc.com/pdp-8/pdp-8.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;GRC&lt;/a&gt;.  To quote a relevant section:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But this also means that CHANGING the contents of a memory location can be done &amp;quot;for free&amp;quot; if its new value is known immediately, as is the case with incrementation, where the value just read from the location immediately determines its next value.&lt;/p&gt;&#xA;&lt;p&gt;The PDP-8 system cleverly used this characteristic in two places:&lt;/p&gt;&#xA;&lt;p&gt;The Increment and Skip of Zero (ISZ) instruction would read, increment, and re-write a value one greater than the specified memory word previously contained. Since the system's core memory system needed to perform a memory rewrite anyway, rewriting the memory with its incremented value was a zero-cost operation - it took no additional time than writing-back the same data would have.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Much of the information posted in various places has come from old users putting up manuals that they have for others to find.  It can be confusing to pull it all together.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-10-20T12:08:19.030" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1595" PostTypeId="2" ParentId="1592" CreationDate="2016-10-20T12:40:02.143" Score="15" Body="&lt;p&gt;If you compare the octal opcodes for the skip instructions, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                 a bcd  &#xA;                 | |||&#xA;7500 SMA = 111 101 000 000&#xA;7440 SZA = 111 100 100 000&#xA;7420 SNL = 111 100 010 000&#xA;                 | |||&#xA;7510 SPA = 111 101 001 000 &#xA;7450 SNA = 111 100 101 000 &#xA;7430 SZL = 111 100 011 000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;you see that in each group, there are three conditions that can be tested, each as a bit from &lt;em&gt;a&lt;/em&gt; to &lt;em&gt;c&lt;/em&gt;, and the bit &lt;em&gt;d&lt;/em&gt; complements the test result. If you remember &lt;a href=&quot;https://en.wikipedia.org/wiki/De_Morgan%27s_laws&quot; rel=&quot;nofollow noreferrer&quot;&gt;de Morgan's laws&lt;/a&gt;, complementing an or-term turns it into an and-term, and vice versa, and that's why you have an &lt;em&gt;and&lt;/em&gt;-group and an &lt;em&gt;or&lt;/em&gt;-group, and also why you can't combine instructions from different groups (there are only three bits for three conditions that can be set at maximum).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's an artifact of the very simple underlying electronics (an extra programmable inverter at the final output of the condition circuitry) that make up the CPU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But choosing these specific conditions is also &lt;em&gt;by design&lt;/em&gt;, because you can combine the conditions and get other useful conditions, e.g. &quot;skip on less or equal than zero&quot;, or &quot;skip on greater than zero&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the CPU was made of discrete gates, keeping everything simple (and therefore comparatively cheap) was very important for the PDP-8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The clear/complement instructions follow a similar scheme.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="4186" LastEditDate="2018-03-04T06:45:38.637" LastActivityDate="2018-03-04T06:45:38.637" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1596" PostTypeId="1" CreationDate="2016-10-20T13:52:47.373" Score="7" ViewCount="719" Body="&lt;p&gt;For the PDP-8 with its strange ISA, I've always wondered what the &quot;standard&quot; (i.e. fastest) way to do arithmetic operations (add, subtract, maybe multiply) on integers consisting of multiple words was. I've seen a bit of PDP-8 assembly, but never any that involved these operations. Anyone who has seen these? Or can come up with fast ones?&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-02-12T14:27:02.383" Title="Arithmetic operations on multiple words on the PDP-8" Tags="&lt;assembly&gt;&lt;pdp-8&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1597" PostTypeId="2" ParentId="1561" CreationDate="2016-10-20T17:09:52.913" Score="4" Body="&lt;p&gt;For my STE, I go straight from RGB to VGA using:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An ST RGB SCART cable (&lt;a href=&quot;http://www.retrocomputershack.com/PDF/Atari%20ST%20RGB%20Scart%20Lead.pdf&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;A sync stripper (&lt;a href=&quot;http://arcadeforge.net/Scaler-and-Strike-Devices/Sync-Strike::15.html&quot; rel=&quot;nofollow&quot;&gt;Sync Strike&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;An LCD monitor &lt;a href=&quot;http://www.atari-wiki.com/index.php/Flat_Panel_Displays&quot; rel=&quot;nofollow&quot;&gt;that accepts 15kHz VGA&lt;/a&gt; (&lt;a href=&quot;http://www.benq.co.uk/product/monitor/rl2455hm&quot; rel=&quot;nofollow&quot;&gt;BenQ RL2455HM&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is a clean solution without the need for scan convertors / line doublers and provides a razor sharp picture&lt;/p&gt;&#xA;" OwnerUserId="272" LastActivityDate="2016-10-20T17:09:52.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1598" PostTypeId="2" ParentId="1596" CreationDate="2016-10-20T19:20:23.120" Score="7" Body="&lt;p&gt;&lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/man/&quot; rel=&quot;nofollow&quot;&gt;Doug Jones' PDP-8 Programmer's Reference Manual&lt;/a&gt; is very helpful here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's pretty much just one way to do multi-word precision add and subtract.  Memory addressing complicates things so let's just consider adding two fixed 3 word little-endian numbers at address A and B with result into C.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   CLA CLL        ; clear accumulator and link (carry-ish) bit.&#xA;   TAD A          ; load first word of A into accumulator&#xA;   TAD B          ; add first word of B to A.&#xA;   DCA C          ; store result (and clears accumulator)&#xA;   RAL            ; 13 bit rotate of accumulator so accumulator = link, link = 0&#xA;   TAD A+1        ; carry + next word of A&#xA;   TAD B+1        ; add next word of B&#xA;   DCA C+1        ; store in result&#xA;   RAL            ; push carry into accumulator and clear link&#xA;   TAD A+2        ; carry + next word of A&#xA;   TAD B+2        ; add next word of B&#xA;   DCA C+2        ; store result&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With no built-in subtract instruction we must use the fact that &lt;code&gt;A - B&lt;/code&gt; is equivalent to &lt;code&gt;A + ~B + 1&lt;/code&gt; where &lt;code&gt;~&lt;/code&gt; is the one's complement.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   CLA CLL&#xA;   TAD B         ; load first word of B&#xA;   CMA IAC       ; compute ~B + 1&#xA;   TAD A         ; add in first word of A&#xA;   DCA C         ; store result&#xA;   TAD B+1       ; load second word of B&#xA;   CMA           ; compute ~B&#xA;   SZL           ; skip next instruction if no carry from previous TAD&#xA;   CLL IAC       ; clear previous carry and apply it to accumulator&#xA;   TAD A+1       ; add in second word of A&#xA;   DCA C+1       ; store result&#xA;   TAD B+2       ; get third word of B&#xA;   CMA           ; ~B&#xA;   SZL           ; if carry from previous TAD then&#xA;   CLL IAC       ;   clear previous carry; add 1 to accumulator&#xA;   TAD A+2       ; add third word of A&#xA;   DCA C+2       ; store result&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Those familiar with more modern architectures might worry that carry will be lost in some situations.  For instance, an &lt;code&gt;IAC&lt;/code&gt; might set the link bit and the following &lt;code&gt;TAD&lt;/code&gt; will clear it if not carry.  Not to worry, the link bit is handled more cleverly than that.  It complements the link bit when there is carry out of the add.  If there is no carry it leaves it alone.  The operation is similar to modern &quot;add with carry&quot; instructions but gives us the latitude we need to handle this case.  The PDP-8 designers clearly had some foresight. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice that multi-word addition uses &lt;code&gt;RAL&lt;/code&gt; to get the carry into the accumulator and clear the link bit.  I can't see how that trick can be applied to subtraction due to the need to complement the accumulator.  The &lt;code&gt;SZL : CLL IAC&lt;/code&gt; sequence can be replaced with &lt;code&gt;DCA C+1 : RAL&lt;/code&gt; but that's the same number of instructions and probably slower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multiply is a whole other can of worms.  For an answer to that and possibly better add and subtract routines I suggest looking at FORTRAN or other high-level language compiler output.&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2016-10-21T23:55:38.773" LastActivityDate="2016-10-21T23:55:38.773" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1599" PostTypeId="2" ParentId="1591" CreationDate="2016-10-20T21:31:07.207" Score="23" Body="&lt;p&gt;More “serious and modern” CPUs than the 6502, Z80 and PDP-8 have undocumented instructions too, and they don’t necessarily cause the CPU to stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Intel x86 line has quite a few instructions which were initially undocumented; one very famous instruction, which can not be replaced by documented instructions, is &lt;code&gt;LOADALL&lt;/code&gt;, which has been &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1011/79&quot;&gt;discussed here already&lt;/a&gt;. This was used in MS-DOS (&lt;code&gt;RAMDRIVE.SYS&lt;/code&gt; and &lt;code&gt;HIMEM.SYS&lt;/code&gt; at least), OS/2, and no doubt a few other places; this is a known use of an undocumented instruction with no documented replacement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other examples of undocumented x86 instructions include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;AAD&lt;/code&gt;, “ASCII Adjust before Division”, which takes an undocumented 8-bit immediate operand &lt;em&gt;n&lt;/em&gt; and calculates &lt;code&gt;AH&lt;/code&gt; × &lt;em&gt;n&lt;/em&gt; + &lt;code&gt;AL&lt;/code&gt;, placing the result in &lt;code&gt;AX&lt;/code&gt; (the documented form only mentions multiplication by 10, to convert a BCD value in &lt;code&gt;AX&lt;/code&gt; to its non-BCD form);&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;AAM&lt;/code&gt;, “ASCII Adjust after Multiply”, which takes an undocumented 8-bit immediate operand &lt;em&gt;n&lt;/em&gt; and calculates &lt;code&gt;AL&lt;/code&gt; ÷ &lt;em&gt;n&lt;/em&gt;, placing the quotient in &lt;code&gt;AH&lt;/code&gt; and the remainder in &lt;code&gt;AL&lt;/code&gt; (the documented form only mentions division by 10, to convert a non-BCD value in &lt;code&gt;AX&lt;/code&gt; to its BCD form);&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SALC&lt;/code&gt;, “Set &lt;code&gt;AL&lt;/code&gt; on Carry”, which sets &lt;code&gt;AL&lt;/code&gt; to FF if Carry is set, 0 otherwise.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The first two were well-known early on (for example, Robert L. Hummel’s &lt;em&gt;The Processor and Coprocessor&lt;/em&gt; documents them, although it gets &lt;code&gt;AAM&lt;/code&gt; slightly wrong), &lt;code&gt;SALC&lt;/code&gt; not so much. They stayed officially undocumented for a very long time, well into the mid-nineties. All three can be replicated using other instructions, but they are useful in their own right because they don't affect the flags in the same way as their official counterparts. The NEC V20 and V30 clones followed the documentation and ignore the operand to &lt;code&gt;AAD&lt;/code&gt; and &lt;code&gt;AAM&lt;/code&gt;, so code using the undocumented forms wouldn’t give the expected result on these CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Intel 8086 and 8088 also had some unintentional, undocumented instructions, probably corresponding to bits ignored by the instruction decoder. For example, the 0x60–0x6F opcodes map to 0x70–0x7F. These alias opcodes have since been re-purposed, so 8086 code relying on them doesn’t work on newer CPUs!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another 8086/8088-specific, undocumented instruction is &lt;code&gt;MOV CS, op&lt;/code&gt; which updates &lt;code&gt;CS&lt;/code&gt; from &lt;code&gt;op&lt;/code&gt; and causes an unconditional long jump (without changing the instruction pointer). This didn’t survive for long, even C-MOS 8086 and 8088 CPUs no longer support it. Unfortunately &lt;a href=&quot;https://twitter.com/dosnostalgic/status/795363924862443520&quot; rel=&quot;noreferrer&quot;&gt;some software relies on this&lt;/a&gt;: the PC booter game &lt;a href=&quot;https://www.mobygames.com/game/pc-booter/presidents-choice&quot; rel=&quot;noreferrer&quot;&gt;President’s Choice&lt;/a&gt; issues &lt;code&gt;MOV CS, AX&lt;/code&gt;, and fails on any CPU which doesn’t support the instruction; it has to be replaced by a far jump.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You’ll find lots more information on these and other instructions on Robert Collins’ old &lt;a href=&quot;http://www.rcollins.org/secrets/OpCodes.html&quot; rel=&quot;noreferrer&quot;&gt;Undocumented OpCodes site&lt;/a&gt;, in &lt;a href=&quot;http://textfiles.com/programming/86bugs.lst&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;86bugs.lst&lt;/code&gt;&lt;/a&gt;, and in the more recent &lt;a href=&quot;http://web.archive.org/web/20181110195203/http://www.os2museum.com/wp/undocumented-8086-opcodes/&quot; rel=&quot;noreferrer&quot;&gt;investigation&lt;/a&gt; conducted by Michal Necasek and Raúl Gutiérrez Sanz.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-06-11T11:58:40.303" LastActivityDate="2019-06-11T11:58:40.303" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="1600" PostTypeId="2" ParentId="1596" CreationDate="2016-10-21T06:15:41.773" Score="3" Body="&lt;p&gt;I think I found a faster method for subtraction, without the skip. The trick is to &lt;em&gt;not&lt;/em&gt; increment AC for the 2's complement, but do the increment before the 1's complement (so it becomes a decrement), and decrement by 2 (i.e increment the subtrahend by 1) if there's a borrow. In other words, initialize &lt;code&gt;AC&lt;/code&gt; to -2 if there's a borrow, and -1 otherwise.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    CLA CLL CML   / L := 1 (no borrow)&#xA;    TAD B&#xA;    CMA IAC       / 2's complement&#xA;    TAD A         / borrow: L := 0&#xA;    DCA C&#xA;    CMA RAL       / L=0: AC := -2, L=1: AC := -1; L := 1&#xA;    TAD B+1&#xA;    CMA           / 1's complement&#xA;    TAD A+1&#xA;    DCA C+1&#xA;    ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To make it more regular, one could also do a 1's complement for the lowest word, using &lt;code&gt;CLA CMA CLL CML&lt;/code&gt; as initialization. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But of course I've no idea if that was a standard method.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-10-21T06:15:41.773" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1602" PostTypeId="2" ParentId="1591" CreationDate="2016-10-21T16:08:48.560" Score="22" Body="&lt;p&gt;In many cases, undocumented opcodes were not deliberately created, but are merely the result of designers including the minimal circuitry necessary to create a specified set of opcodes.  On the 6502, for example, consider how one might go about creating the instructions LDA, LDY, and LDX.  Rather than handling the three instructions separately, it would make sense to have six bits of the opcode mean &quot;load something with address mode __&quot;, and then use the remaining bits to control the enables of the registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it would be possible to have each register-enable respond to one particular pattern of those last two bits, one can save a few transistors by saying that one register responds when bit 0 is high, one responds when bit 1 is high, and one responds when neither is high.  As it happens, that's exactly what the designers of the 6502 did.  The bit pattern 101mmmrr is the bit pattern for &quot;load something to the register specified by using memory mode m&quot; opcode.  If rr is 00, it loads the Y register; if the lower bit of rr is 1 it loads A, and if higher bit of rr is 1 it loads X.  Now for the undocumented part: If &lt;em&gt;both&lt;/em&gt; bits of rr are 1, it loads both A and X.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, because the designers of the chip never realized that loading two registers with one instruction might be useful, the decoding circuitry for some other instructions will also respond to bit pattern 10101011 which would be &quot;load immediate, enabling both A and X&quot;.  As a consequence, while the most useful memory-addressing mode for loading both A and X together would be immediate, there is no usable &quot;load A and X immediate&quot; instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would expect that the biggest reason many such opcodes were never documented is that the chip designers probably never gave any particular thought to the possibility that bit patterns to which they had never attached any particular meaning might actually serve some useful purpose.  What makes this particularly bizarre in the case of the 6502 is that there are a number of cases where instructions don't support an addressing mode, but an undocumented variation does.  Two of the most notable examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;LDX does not support the indirect, Y addressing mode, but LAX does.  As a consequence, it's sometimes useful to use LAX even in cases where the value in the accumulator afterward is irrelevant, since it's two cycles faster than doing an LDA followed by a TAX.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;DEC only supports absolute, abs+x, zero page, and zp+x addressing modes, but the bitwise OR of the DEC and CMP opcodes will act as a DEC that supports any addressing mode that CMP supports other than immediate, and which will set flags on the result in the same way that CMP would set flags based upon its operand.  Thus, code which needs to perform a DEC using some other addressing mode can use &quot;DCP&quot;, whether or not it needs the flags (though in many cases setting Z based upon whether the value was decremented to match the accumulator--rather than zero--can be a nice bonus).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;DCP brings up an interesting point: the 6502 documentation specifies that the maximum time required to execute any opcode is seven cycles, and some system designs might rely upon the worst-case interrupt response time that would imply.  The indirect-X and indirect-Y variations of DCP take eight cycles.  The 6502 executes them without difficulty, but some systems might have trouble if the interrupt line is sampled just before the interrupt line becomes active, and the next instruction is an eight-cycle DCP.  While it might be considered bizarre to design a system that has zero margin on interrupt response time, there were many cases where an interrupt source would be synchronous with the CPU clock, and where hardware to allow precisely as much time as the 6502 required for an interrupt response would be cheaper than hardware which could allow one more cycle.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-10-21T16:08:48.560" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1603" PostTypeId="2" ParentId="436" CreationDate="2016-10-21T17:01:05.130" Score="0" Body="&lt;p&gt;My solution was to simply wire an RS-232 null modem cable between my Amiga and my PC.  If I load JRComm on my Amiga and similar terminal software on the PC (I am using Hyperterminal in Windows 98) I can send files back and forth using the old ZModem protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize there may be slicker, newer, more efficient methods.  But this method works reliably and has a nice retro feel to it...   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have any experience with 'terminal' software under Linux, although I understand the shell can be redirected to the com port; so it may be as simple as finding a command line version of Zmodem (or Xmodem, or Ymodem, or Kermit).  But I can tell you from Windows Hyperterminal to Amiga JRComm over a null modem works perfectly at 19200.  I transfer stuff all the time...  good luck!&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2016-10-21T17:01:05.130" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1604" PostTypeId="1" AcceptedAnswerId="1606" CreationDate="2016-10-24T01:13:15.233" Score="12" ViewCount="728" Body="&lt;p&gt;Online references disagree on whether Applesoft programs were stored at 0x801 (2049) or 0x3001 (12289). A quick test on my OpenEmulator install with an Apple II Plus definitely puts it at 0x801.  However, &lt;a href=&quot;http://www.callapple.org/vintage-apple-computers/apple-ii/applesoft-ii-pointers-tokens/&quot; rel=&quot;nofollow&quot;&gt;Applesoft II Pointers &amp;amp; Tokens&lt;/a&gt; says otherwise:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Programs store startirlg [sic] at decimal location 12289 upward...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Is that article incorrect? I know you can change the address at $67/$68, but I'm interested in the default: Applesoft programs on disk do not store their starting memory address, but do refer to absolute memory locations to point to the following line, so there must be an agreed-upon default.&lt;/p&gt;&#xA;" OwnerUserId="335" LastEditorUserId="7208" LastEditDate="2019-07-26T04:47:41.330" LastActivityDate="2019-07-27T04:28:39.587" Title="At what address do Apple II Applesoft programs get stored?" Tags="&lt;apple-ii&gt;&lt;applesoft-basic&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1605" PostTypeId="2" ParentId="1604" CreationDate="2016-10-24T08:13:03.400" Score="0" Body="&lt;p&gt;Reading the linked article I think this is when AppleSoft (particularly as it talks about Versions 1 &amp;amp; 2) is loaded into main memory rather than into a language card on an original Apple ][. I'm guessing this is the &quot;tape&quot; version of AppleSoft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice $801 is normal.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2016-10-24T08:13:03.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1606" PostTypeId="2" ParentId="1604" CreationDate="2016-10-24T08:21:20.740" Score="15" Body="&lt;p&gt;The answers can be found in Apple's early &quot;Blue Books&quot;. For more info see my &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/384/what-are-the-differences-between-the-versions-of-applesoft-basic/395#395&quot;&gt;answer here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Applesoft I on tape used $2A00&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;APPLESOFT I, based on Microsoft 6502 BASIC version 1.1&lt;/li&gt;&#xA;&lt;li&gt;Documented in the November 1977 &quot;Blue Book&quot;&lt;/li&gt;&#xA;&lt;li&gt;Available on tape&lt;/li&gt;&#xA;&lt;li&gt;Loaded into memory at $800-$29FF (8.5k)&lt;/li&gt;&#xA;&lt;li&gt;Program and variables at $2A00 up (* See note below)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Applesoft II used $3000 for the tape version and $800 for all ROM versions&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;APPLESOFT II, based on Microsoft 6502 BASIC version 2&lt;/li&gt;&#xA;&lt;li&gt;Documented in the August 1978 &quot;Blue Book&quot;&lt;/li&gt;&#xA;&lt;li&gt;In mainboard ROM (also available on tape, disk, firware card ROM)&lt;/li&gt;&#xA;&lt;li&gt;Tape version loaded into memory at $800-$2FFF (10k)&lt;/li&gt;&#xA;&lt;li&gt;Tape version programs and variables at $3000 up&lt;/li&gt;&#xA;&lt;li&gt;ROM version in memory at $D000-$F7FF (10k) (* See note below)&lt;/li&gt;&#xA;&lt;li&gt;ROM version program and variables at $800 up (* See note below)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;* Note: Some sources say the program starts at $801 (etc) not $800 (etc), but the interpreter actually accesses $800 (etc) first. Try setting $800 (etc) to a non-zero value and you'll see some strange behaviour when trying to RUN the program.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2019-07-27T04:28:39.587" LastActivityDate="2019-07-27T04:28:39.587" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1607" PostTypeId="1" AcceptedAnswerId="1608" CreationDate="2016-10-24T11:26:33.190" Score="8" ViewCount="1885" Body="&lt;p&gt;I have an old US (NTSC) NES system which we found in the garage.  Sadly the power supply is missing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I now live in the UK, I was wondering if it is possible to use a UK NES power supply with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The power supply I was thinking of using is below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bD7iW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bD7iW.png&quot; alt=&quot;PSU Label&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3456" LastEditorUserId="276" LastEditDate="2017-05-04T12:11:46.647" LastActivityDate="2017-05-04T12:11:46.647" Title="Can I use a UK power adapter in NTSC NES" Tags="&lt;nintendo&gt;&lt;nes&gt;&lt;power&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1608" PostTypeId="2" ParentId="1607" CreationDate="2016-10-24T15:42:57.840" Score="10" Body="&lt;p&gt;It should work just fine -- the PPU times the &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/PPU_rendering&quot;&gt;rendering process&lt;/a&gt; based on the &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/Clock_rate&quot;&gt;clock&lt;/a&gt;.  The NES doesn't directly use the 9V AC from the power supply; the power supply circuit converts it to 5V DC with a rectifier and voltage regulator.  I'm using a DC adapter with my NES without problems.&lt;/p&gt;&#xA;" OwnerUserId="409" LastActivityDate="2016-10-24T15:42:57.840" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1609" PostTypeId="2" ParentId="1604" CreationDate="2016-10-24T20:35:27.477" Score="2" Body="&lt;p&gt;You can infer/prove/verify the start of Applesoft program memory by doing the following experiment...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First we can look at the memory beginning at $0800&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;] NEW&#xA;] CALL -151&#xA;* 0800L&#xA;0800- 00 BRK&#xA;0801- 00 BRK&#xA;0802- 00 BRK&#xA;0803 etc...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then we can enter a line of BASIC code and re-examine the same memory:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RESET&#xA;] 10 PRINT &quot;NEAT&quot;&#xA;] CALL -151&#xA;* 0800L&#xA;0800- 00 &#xA;0801- 0D 08 0A&#xA;0804- etc...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This seems to indicate $0801 is indeed the start of Applesoft Basic program memory (although I always thought it was $0800) :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interesting, the first 2 bytes of each &quot;line of basic&quot; always point to the memory address of the next encoded line.  In the example above, our line of code lives at $0801 with a pointer to the next line at $080D (in little-endian) which contains $0000 terminating the line listing..&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2016-10-24T20:35:27.477" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1610" PostTypeId="1" AcceptedAnswerId="1612" CreationDate="2016-10-25T18:15:46.527" Score="44" ViewCount="11085" Body="&lt;p&gt;The Zilog Z80 microprocessor, known for its use in the ZX Spectrum, was designed to be a backwards-compatible extension to the Intel 8080 processor. It introduced several new instructions to the 8080's instruction set, as well as adding or extending registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, as those of us who've used undocumented opcodes know, you can never add without taking. &lt;a href=&quot;//xkcd.com/1172/&quot;&gt;Every change breaks &lt;em&gt;someone's&lt;/em&gt; &lt;s&gt;workflow&lt;/s&gt;&lt;/a&gt; program. So what are the differences between the instruction sets of these two &quot;compatible&quot; chips?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="780" LastEditDate="2017-07-03T13:10:40.053" LastActivityDate="2017-07-11T23:15:06.577" Title="How did the Z80 instruction set differ from the 8080?" Tags="&lt;z80&gt;&lt;8080&gt;&lt;instruction-set&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="1611" PostTypeId="2" ParentId="1610" CreationDate="2016-10-25T20:32:45.760" Score="20" Body="&lt;p&gt;This document calls out some differences:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.msxarchive.nl/pub/msx/mirrors/hanso/datasheets/chipsz80leventhal3.pdf&quot;&gt;http://www.msxarchive.nl/pub/msx/mirrors/hanso/datasheets/chipsz80leventhal3.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Z80 uses P flag for 2's complement overflow, where 8080 does not&lt;/li&gt;&#xA;&lt;li&gt;DAA instruction corrects both subtraction as well as addition on Z80, but addition only on 8080.&lt;/li&gt;&#xA;&lt;li&gt;Z80 rotate instructions clear the A&lt;sub&gt;C&lt;/sub&gt; flag, but the 8080 does not.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Also, timings are different per-instruction.  &lt;/p&gt;&#xA;" OwnerUserId="599" LastActivityDate="2016-10-25T20:32:45.760" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1612" PostTypeId="2" ParentId="1610" CreationDate="2016-10-25T20:43:19.773" Score="52" Body="&lt;p&gt;For the most part the Z-80 extends the 8080 instruction set.  If we consider just the 8080 instructions themselves there are a few incompatibilities:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Overflow flag.  On the 8080 bit 2 of the flags register only reports the parity of the accumulator after an ALU operation.  On the Z-80 it reports parity for logical operations and overflow for arithmetic operations.&lt;/li&gt;&#xA;&lt;li&gt;Half carry.  &lt;code&gt;RLC&lt;/code&gt;, &lt;code&gt;RLCA&lt;/code&gt;, &lt;code&gt;RL&lt;/code&gt; and &lt;code&gt;RLA&lt;/code&gt; clear the half-carry flag on the Z-80 while the 8080 leaves it unchanged. &lt;/li&gt;&#xA;&lt;li&gt;Other flag bits.  The Z-80 adds the N flag which records whether the last arithmetic operation was an add or subtract (and is use by the &lt;code&gt;DAA&lt;/code&gt; instruction).  The Z-80 preserves all flag bits so the flags register can take on any value after a &lt;code&gt;POP AF&lt;/code&gt;.  The 8080 always sets unused flag bits to 1.&lt;/li&gt;&#xA;&lt;li&gt;Instruction timings.  Incrementing or decrementing a register pair takes 6 cycles on the Z-80, 5 on the 8080.  Inc/dec of a single register is 4 cycles on the Z-80, 5 on the 8080 (or for (HL) 11 versus 10).  &lt;code&gt;ADD HL,rp&lt;/code&gt; is 11 on the Z-80, 10 on the 8080.  Loading an 8 bit register from another is 4 on the Z-80, 5 on the 8080, but 8 bit load/store on (HL) is still 7 on both.  A conditional &lt;code&gt;CALL&lt;/code&gt; not-taken is 10 on the Z-80, 11 on the 8080.  &lt;code&gt;ex sp,(hl)&lt;/code&gt; is 19 on the Z-80, 18 on the 8080.  &lt;code&gt;jp (hl)&lt;/code&gt; is 4 on the Z-80, 5 on the 8080.  &lt;code&gt;ex de,hl&lt;/code&gt; is 4 on the Z-80, 5 on the 8080.  &lt;code&gt;ld sp,hl&lt;/code&gt; is 6 on the Z-80, 5 on the 8080.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;DAA&lt;/code&gt;.  On the 8080 this only works after addition (as it lacks the &lt;code&gt;N&lt;/code&gt; flag to tell the difference).  It may also differ when given unusual inputs.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Most of the additional Z-80 opcodes are prefixed by bytes &lt;code&gt;CB&lt;/code&gt;, &lt;code&gt;DD&lt;/code&gt;, &lt;code&gt;ED&lt;/code&gt; and &lt;code&gt;FD&lt;/code&gt; which the 8080 treats as aliases for other instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;CB&lt;/code&gt; series are shift, rotate and bit test instructions: &lt;code&gt;RLC&lt;/code&gt;, &lt;code&gt;RRC&lt;/code&gt;, &lt;code&gt;RL&lt;/code&gt;, &lt;code&gt;RR&lt;/code&gt;, &lt;code&gt;SLA&lt;/code&gt;, &lt;code&gt;SRA&lt;/code&gt;, &lt;code&gt;SRL&lt;/code&gt;, &lt;code&gt;BIT&lt;/code&gt;, &lt;code&gt;SET&lt;/code&gt;, &lt;code&gt;RES&lt;/code&gt; and the undocumented &lt;code&gt;SL1&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;DD&lt;/code&gt; and &lt;code&gt;FD&lt;/code&gt; series are used for any operations on the &lt;code&gt;IX&lt;/code&gt; and &lt;code&gt;IY&lt;/code&gt; registers respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;ED&lt;/code&gt; series are a mixed set of extensions prominently featuring the block move instructions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IN r,(C)&#xA;OUT (C),r&#xA;SBC HL,rp&#xA;ADC HL,rp&#xA;LD (nn),rp&#xA;LD rp,(nn)&#xA;NEG&#xA;RETN&#xA;IM 0/1/2&#xA;LD I,A&#xA;LD A,I&#xA;LD R,A&#xA;LD A,R&#xA;RETI&#xA;RRD&#xA;RLD&#xA;LDI&#xA;LDIR&#xA;LDD&#xA;LDDR&#xA;CPI&#xA;CPIR&#xA;CPD&#xA;CPDR&#xA;INI&#xA;INIR&#xA;IND&#xA;INDR&#xA;OUTI&#xA;OTIR&#xA;OUTD&#xA;OTDR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that &lt;code&gt;RLC&lt;/code&gt;, &lt;code&gt;RLCA&lt;/code&gt;, &lt;code&gt;RRC&lt;/code&gt;, &lt;code&gt;RRCA&lt;/code&gt; are single opcode instructions shared by both.  Similarly, both have a single opcode &lt;code&gt;LD HL,(nn)&lt;/code&gt; and &lt;code&gt;LD (nn),HL&lt;/code&gt; while only the Z-80 has the redundant &lt;code&gt;ED&lt;/code&gt; version of &lt;code&gt;LD HL,(nn)&lt;/code&gt; and &lt;code&gt;LD (nn),HL&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the Z-80 has several new single-byte opcodes:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;08   EX AF,AF'&#xA;10   DJNZ&#xA;18   JR off&#xA;20   JR NZ,off&#xA;28   JR Z,off&#xA;30   JR NC,off&#xA;38   JR C,off&#xA;D9   EXX&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Z-80 does not have a new &lt;code&gt;JP&lt;/code&gt; instruction that tests the overflow flag.  This remains the conditional jump based on parity but the &quot;parity&quot; bit is set based on overflow for arithmetic instructions.  It just looks that way because Z-80 assemblers accept both &lt;code&gt;JP PO&lt;/code&gt;,&lt;code&gt;JP PE&lt;/code&gt; and &lt;code&gt;JP V&lt;/code&gt;,&lt;code&gt;JP NV,&lt;/code&gt; to allow the programmer to express intent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8085 processor extends the 8080 instruction set with entirely different single-byte opcodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good handful of the new Z-80 instructions deal with new interrupt handling modes.  If you're looking to port Z-80 code to 8080 there is a relatively short list of things to watch out for:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Any use of &lt;code&gt;IX&lt;/code&gt;, &lt;code&gt;IY&lt;/code&gt;, &lt;code&gt;AF'&lt;/code&gt;, &lt;code&gt;BC'&lt;/code&gt;, &lt;code&gt;DE'&lt;/code&gt;, &lt;code&gt;HL'&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Auto-increment/decrement instructions like &lt;code&gt;LDI&lt;/code&gt;, &lt;code&gt;LDIR&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Relative jumps&lt;/li&gt;&#xA;&lt;li&gt;Bit test/set/reset and shifts.  Rotates on any register but &lt;code&gt;A&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;16 bit add with carry or subtract with carry.&lt;/li&gt;&#xA;&lt;li&gt;Use of overflow (generally uncommon)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2017-07-11T23:15:06.577" LastActivityDate="2017-07-11T23:15:06.577" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1613" PostTypeId="1" AcceptedAnswerId="1911" CreationDate="2016-10-26T09:32:06.910" Score="23" ViewCount="3712" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Game_%26_Watch&quot; rel=&quot;noreferrer&quot;&gt;Game and Watch&lt;/a&gt; was a series of single-title games consoles created by Nintendo from 1980 until 1991. Each machine contained a custom LCD screen (containing images related to the software), some sort of ROM (containing the two games and the clock) and... that's about all I could find.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because each Game and Watch title was different and I don't know to what extent, I'm only asking about the original Game and Watch: &quot;Ball&quot;. What was the hardware layout of the main board in this machine, and which components were used?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="357" LastEditDate="2016-12-28T16:14:29.270" LastActivityDate="2019-03-21T11:51:09.047" Title="Main board of the original Game &amp; Watch (Ball)" Tags="&lt;hardware&gt;&lt;nintendo&gt;&lt;game-and-watch&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1614" PostTypeId="2" ParentId="1613" CreationDate="2016-10-26T22:48:28.760" Score="9" Body="&lt;p&gt;It seems that they used the same circuitry (and processor) that were used for some calculators at the time. There was a limitation on the number of objects that could be displayed imposed by the hardware, that is related to the number of different digits that the original design could display (when used as a calculator).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to be also that G&amp;amp;W games started their life as prototypes, with screens made of lamps located under a painted paper or something in order to simulate the way an LCD screen works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was an &lt;a href=&quot;http://web.archive.org/web/20150209154618/http://iwataasks.nintendo.com/interview-club-nintendo.html#/game-and-watch-ball-reward/0/0&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Iwata Asks&quot; Q&amp;amp;A article discussing all this stuff&lt;/a&gt; (link goes to an archived version). That was linked from &lt;a href=&quot;http://kotaku.com/5756672/the-origins-of-nintendos-game--watch/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Kotaku article&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="115" LastEditDate="2016-11-02T10:46:56.640" LastActivityDate="2016-11-02T10:46:56.640" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1615" PostTypeId="1" AcceptedAnswerId="1618" CreationDate="2016-10-27T16:55:13.687" Score="12" ViewCount="297" Body="&lt;p&gt;The Atari 800 had 4 user accessible slots for adding RAM and a ROM card. Normally, your machine came with at least two cards from what I understand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is, if I removed all the cards from the machine, would it power up at all? Could you run a cartridge without the ROM card perhaps? As well, would it work without any RAM cards installed? What would the machine do if nothing was in there?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm asking this question since I need to diagnose an 800 which recently stopped working and displays only a dark gray screen. Since one of the diagnostic steps is to remove the cards to see if they're at fault, I'm curious if I can remove them all to determine some state.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-10-28T21:16:07.157" Title="Will the Atari 800 work without any expansion cards installed?" Tags="&lt;atari-800&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1616" PostTypeId="1" CreationDate="2016-10-27T20:02:34.200" Score="33" ViewCount="3458" Body="&lt;p&gt;Elite, an Acornsoft game for the BBC Micro, is a game set in space.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Space is big. Really big. You just won't believe how vastly, hugely, mind-bogglingly big it is.&lt;br /&gt;&#xA;    — Douglas Adams&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There are a vast number of planets, resources, other ships... Elite, however, is small (in terms of program size). With so many planets that remain the same, and a detailed description about each, the data must be compressed &lt;em&gt;somehow&lt;/em&gt;. How were resources compressed in Elite?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="15334" LastEditDate="2021-02-23T16:13:23.990" LastActivityDate="2021-02-24T13:34:26.187" Title="How did Elite (BBC Micro) compress resources?" Tags="&lt;software&gt;&lt;bbc-micro&gt;" AnswerCount="6" CommentCount="0" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="1617" PostTypeId="2" ParentId="1616" CreationDate="2016-10-27T21:23:53.267" Score="2" Body="&lt;p&gt;It wasn't compressed. The data was calculated using a Fibonacci Sequence. I don't know what seed numbers they used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new Elite Dangerous does the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Fibonacci_number&quot; rel=&quot;nofollow&quot;&gt;https://en.wikipedia.org/wiki/Fibonacci_number&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2016-10-27T21:23:53.267" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1618" PostTypeId="2" ParentId="1615" CreationDate="2016-10-27T21:34:04.817" Score="8" Body="&lt;p&gt;I just booted mine with the three 16KB RAM packs removed. At power up it displayed a green screen. With a Centipede cartridge, the 10K ROM pack, and no RAM packs, it just displayed two medium grey, inch-wide vertical lines on a black background.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then removed Centipede and the ROM pack (RAM still removed). It still displayed a green screen. I then installed the RAM packs without the ROM pack and it still displayed a green screen.&lt;/p&gt;&#xA;" OwnerUserId="637" LastEditorUserId="637" LastEditDate="2016-10-28T21:16:07.157" LastActivityDate="2016-10-28T21:16:07.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1619" PostTypeId="2" ParentId="1616" CreationDate="2016-10-27T23:48:13.623" Score="51" Body="&lt;p&gt;Elite used &lt;a href=&quot;https://en.wikipedia.org/wiki/Procedural_generation&quot; rel=&quot;noreferrer&quot;&gt;procedural generation&lt;/a&gt;. There's a good description of the algorithm on the &lt;a href=&quot;http://wiki.alioth.net/index.php/Random_number_generator&quot; rel=&quot;noreferrer&quot;&gt;Elite Wiki&lt;/a&gt; and although the &lt;a href=&quot;http://www.elitehomepage.org/archive/index.htm&quot; rel=&quot;noreferrer&quot;&gt;original 6502 source code archives&lt;/a&gt; are available on &lt;a href=&quot;http://www.iancgbell.clara.net/elite/&quot; rel=&quot;noreferrer&quot;&gt;Ian Bell's Elite site&lt;/a&gt; he also converted the procedural generation code into C for &lt;a href=&quot;http://www.iancgbell.clara.net/elite/text/index.htm&quot; rel=&quot;noreferrer&quot;&gt;&quot;Text Elite&quot;&lt;/a&gt;, so that's probably easier to read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.theguardian.com/books/2003/oct/18/features.weekend&quot; rel=&quot;noreferrer&quot;&gt;This extract&lt;/a&gt; from the book &quot;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0571214975&quot; rel=&quot;noreferrer&quot;&gt;Backroom Boys: The Secret Return Of The British Boffin&lt;/a&gt;&quot; (by Francis Spufford) has a nice summary of how the game came to be. Here's a relevant snippet:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Hence the [Fibonacci] sequence's value to Bell and Braben. They could&#xA;  encode all the information on a particular solar system in a&#xA;  relatively short row of digits. That number, it occurred to them,&#xA;  wouldn't have to be stored if it were an iteration in a Fibonacci&#xA;  sequence - or a Fibonacci-like sequence, anyway. All you would need&#xA;  would be a starting point, a rule for doing the iterations, and a&#xA;  mechanism for extracting the information from the number.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Some digits controlled the physical specs of the system: the size, the&#xA;  location, the number of planets. Some determined local politics.&#xA;  Others grew into brief flourishes of verbal description - which always&#xA;  read a little weirdly, put together as they were from stray adjectives&#xA;  and nouns. Since the adjective list contained &quot;carnivorous&quot; and the&#xA;  noun list contained &quot;arts graduates&quot;, it was possible to land on a&#xA;  planet where all the inhabitants were, yes, carnivorous arts&#xA;  graduates: a little swipe maybe at Cambridge - not random but&#xA;  pseudo-random. As the player entered the star system, then, it swelled&#xA;  into existence as if it had always been there.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;David Braben talks about the &quot;compression&quot; and many other programming tricks used &lt;a href=&quot;http://www.gdcvault.com/play/1014628/Classic-Game-Postmortem&quot; rel=&quot;noreferrer&quot;&gt;in this video&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2016-10-30T09:54:28.943" LastActivityDate="2016-10-30T09:54:28.943" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1620" PostTypeId="2" ParentId="1616" CreationDate="2016-10-28T11:59:17.443" Score="12" Body="&lt;p&gt;The descriptions are computed via the method &lt;code&gt;goat_soup&lt;/code&gt; which works recursively. The system description is set by &lt;code&gt;mySystem.description = goat_soup(&quot;\x8F is \x97.&quot;,&amp;amp;mySys);&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The description string contains two special characters, &lt;code&gt;\x8F&lt;/code&gt; and &lt;code&gt;\x97&lt;/code&gt;. Within &lt;code&gt;goat_soup&lt;/code&gt; the available set of words and sentences is stored as &lt;code&gt;desc_choice&lt;/code&gt;. The special characters are replaced via a random element in the list, for example &lt;code&gt;&quot;\x82 \x81 for \x8A&quot;&lt;/code&gt; is a replacement of &lt;code&gt;\x97&lt;/code&gt;. This is called recursively and now the new special characters are &lt;code&gt;\x82&lt;/code&gt;, &lt;code&gt;\x81&lt;/code&gt; and &lt;code&gt;\x8A&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example for these recursive fillings for &lt;code&gt;\x97&lt;/code&gt; can then be &lt;code&gt;very fabled and its \x83 \x84&lt;/code&gt; when always the first element is chosen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This continues until no special character remains in the string.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My example refers to a modified version of Text Elite I created for a project at university several years ago which is available here: &lt;a href=&quot;https://github.com/kappmeier/mElite/blob/bfff7375bc85670250015437ac25b8e55ea5c58f/src/txtelite.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/kappmeier/mElite/blob/bfff7375bc85670250015437ac25b8e55ea5c58f/src/txtelite.cpp&lt;/a&gt; I do not know to which version of text elite on Ian Bell's homepage this refers.&lt;/p&gt;&#xA;" OwnerUserId="3478" LastEditorUserId="10355" LastEditDate="2020-01-08T17:23:55.930" LastActivityDate="2020-01-08T17:23:55.930" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="1621" PostTypeId="1" AcceptedAnswerId="1624" CreationDate="2016-10-28T15:41:12.633" Score="25" ViewCount="3658" Body="&lt;p&gt;Prompted by this question querying the prevalence of byte-addressable memory on machines with 32 bit registers: &lt;a href=&quot;https://electronics.stackexchange.com/q/265886/104162&quot;&gt;Why is every address in a micro-controller only 8 bits in size?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm familiar with the concept that the mass-market microprocessors from the 1970's were quite resource constrained with typically 8 or 16 bit registers, and maybe before then computers were closer to one-off designs rather than based on standardised architectures. Was there any 'typical' register size for early electronic computers, and what were the extremes of this range?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming here that early computers did actually have identifiable general purpose registers as we recognise them today...&lt;/p&gt;&#xA;" OwnerUserId="46" LastEditorUserId="278" LastEditDate="2017-08-16T13:16:12.070" LastActivityDate="2018-09-07T03:31:20.563" Title="What register size did early computers use?" Tags="&lt;hardware&gt;&lt;history&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1622" PostTypeId="2" ParentId="1621" CreationDate="2016-10-28T16:46:50.050" Score="14" Body="&lt;p&gt;Early computers used a variety of register sizes, depending on the types/sizes of problems they were intended to solve.  For example, early Digital Equipment Corporation (DEC) computers were 12-bit, 18-bit and 36-bit.  The extremely popular PDP-11 was a 16-bit machine (byte-addressed), and eventually led to the 32-bit VAX computer (also byte-addressed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Larger registers allowed calculations to be done more quickly (more bits processed per clock cycle), but were also more expensive to build and operate.  Smaller word sizes allowed a computer to be cheaper to manufacture, and physically smaller as well, so that they could be used in environments where a larger computer was not possible or practical (e.g. in a laboratory).  Since computers at that time were still very expensive, it made sense to offer computers with multiple word sizes at multiple price points.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2016-10-28T16:46:50.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1623" PostTypeId="2" ParentId="1621" CreationDate="2016-10-28T19:00:22.233" Score="11" Body="&lt;p&gt;Typical register sizes varied wildly among the early computers.  For example, &lt;a href=&quot;https://en.wikipedia.org/wiki/ENIAC&quot;&gt;ENIAC&lt;/a&gt;'s early design had nothing &lt;em&gt;but&lt;/em&gt; registers, and these were ten decimal digits wide.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/Harvard_Mark_I&quot;&gt;Harvard Mark I&lt;/a&gt; was also decimal, with 23-digit registers.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/Z3_(computer)&quot;&gt;Zuse Z3&lt;/a&gt; used binary, with a 22-bit accumulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first computer with registers other than accumulators (the &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Mark_1&quot;&gt;Manchester Mark 1&lt;/a&gt;) used 40-bit registers, while its commercial variant, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ferranti_Mark_1&quot;&gt;Ferranti Mark 1&lt;/a&gt;, used a mix of 20-bit, 40-bit, and 80-bit registers.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-10-28T19:00:22.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1624" PostTypeId="2" ParentId="1621" CreationDate="2016-10-28T19:04:45.047" Score="38" Body="&lt;p&gt;It varied immensely, and many early computers have unique architectures that might make answering the question difficult. However the common practice in the earliest days seems to have been large word sizes, suiting their use as pure number crunchers, and their low clock speeds. Most of them were word-addressed, so you could say they had a &quot;byte&quot; equal to their word size. A smattering of examples of pre-1960 machines:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ENIAC&quot;&gt;ENIAC&lt;/a&gt; (1946): 20 decimal digits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://curation.cs.manchester.ac.uk/computer50/www.computer50.org/mark1/new.baby.html&quot;&gt;Manchester &quot;Baby&quot;&lt;/a&gt; (1948): 32 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://curation.cs.manchester.ac.uk/computer50/www.computer50.org/mark1/MM1.html&quot;&gt;Manchester Mark 1&lt;/a&gt; (1949): 40 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Electronic_delay_storage_automatic_calculator&quot;&gt;EDSAC&lt;/a&gt; (1949): 18-bit &quot;word size&quot;, but available registers were the accumulator (71 bits) and the multiplier (35 bits), and values in memory were either 17 or 35 bits (in all cases, one bit of the 1/2/4 word unit is unusable).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/EDVAC&quot;&gt;EDVAC&lt;/a&gt; (1949): 44 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pilot_ACE&quot;&gt;Pilot ACE&lt;/a&gt; (1950): 32 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_701&quot;&gt;IBM 701&lt;/a&gt; (1952): 36-bit words; 38-bit accumulator including overflow bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_I&quot;&gt;UNIVAC&lt;/a&gt; (1952): 11 decimal digits plus sign.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_650&quot;&gt;IBM 650&lt;/a&gt; (1953): 10 decimal digits plus sign.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-1&quot;&gt;PDP-1&lt;/a&gt; (1959): 18 bits.&lt;/p&gt;&#xA;" OwnerUserId="336" LastEditorUserId="336" LastEditDate="2016-10-28T20:10:19.513" LastActivityDate="2016-10-28T20:10:19.513" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1625" PostTypeId="1" AcceptedAnswerId="1724" CreationDate="2016-10-28T19:47:34.507" Score="16" ViewCount="770" Body="&lt;p&gt;From what I understand of ENIAC, it had a very large number of manually-operated rotary switches which behaved as ROM.  While programming ENIAC in the early days required a plugboard, the machine was eventually enhanced to allow it to be programmed entirely via the switches.  The speed at which the machine could change programs, however, was limited by the need to have operators manually set all the switches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that electronic information storage was bulky, hot, and power-hungry compared with mechanical switches, it would seem like it should have been possible to construct mechanically-set electronically-read storage elements which could be read electronically just as fast as the manually-operated switches, but whose state could be set via automated electromechanical means.  Did any machines ever actually do such a thing, or did magnetic core memory become available soon enough to make such an evolutionary step unnecessary?&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="10260" LastEditDate="2021-05-12T04:23:11.010" LastActivityDate="2021-05-12T13:42:05.350" Title="Did any computers use automatically-operated mechanical storage as electronically-read-addressable memory" Tags="&lt;memory&gt;&lt;eniac&gt;&lt;relay-computer&gt;&lt;edsac&gt;" AnswerCount="5" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1626" PostTypeId="1" CreationDate="2016-10-28T21:08:45.783" Score="24" ViewCount="5660" Body="&lt;p&gt;(This question also applies to other Game Boy games, but Pokémon seems to be one of the best-documented.)&lt;/p&gt;&#xA;&lt;p&gt;Pokémon Red &amp;amp; Blue (Red &amp;amp; Green in Japan) is a pair of Game Boy games about capturing &amp;quot;Pocket Monsters&amp;quot;, or &amp;quot;Pokémon&amp;quot;, by fighting them with other Pokémon. Since its release lots of bugs and glitches have been found&lt;a href=&quot;http://bulbapedia.bulbagarden.net/wiki/List_of_glitches_in_Generation_I#Red_and_Blue&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Bulbapedia article on List of glitches in Generation I, Red and Blue section&quot;&gt;&lt;sup&gt;[1]&lt;/sup&gt;&lt;/a&gt;, many of which are caused by overflow errors.&lt;/p&gt;&#xA;&lt;p&gt;The Game Boy contained a Sharp LR35902 CPU, a Z80 derivative that was something of an intermediate design between the Z80 and 8080:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This processor is similar to an Intel 8080 in that none of the registers introduced in the Z80 are present. However, some of the Z80's instruction set enhancements over the stock 8080, particularly bit manipulation, are present. Still other instructions are unique to this particular flavor of Z80 CPU.&lt;a href=&quot;https://en.wikipedia.org/wiki/Game_Boy#Technical_specifications&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Wikipedia article on Game Boy, Technical specifications section&quot;&gt;&lt;sup&gt;[2]&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Both the Intel 8080&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8080#Flags&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Wikipedia article on Intel 8080, Flags section&quot;&gt;&lt;sup&gt;[3]&lt;/sup&gt;&lt;/a&gt; and, by extension, the 8080-compatible Zilog Z80&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1612/278&quot; title=&quot;Answer to Retrocomputing Stack Exchange question &amp;quot;How did the Z80 instruction set differ from the Z80?&amp;quot; (by George Phillips) doesn't name this as an incompatibility.&quot;&gt;&lt;sup&gt;[4]&lt;/sup&gt;&lt;/a&gt; have a carry bit that is set on operations that overflow. A derivative of these chips would also have these; indeed this is not documented as a difference between the Z80 and the LR35902&lt;a href=&quot;https://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf#7&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Game Boy™ CPU Manual Version 1.01, section 2.4, page 7&quot;&gt;&lt;sup&gt;[5]&lt;/sup&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To the part that is confusing me: the LR35902 CPU had an overflow flag, and there are many exploitable glitches in Pokémon Red that are caused by overflows; there are glitches caused by overflows in most places that overflows can occur. There must be a reason that the developers didn't use this flag on so many occasions, but I can't work out what it is.&lt;/p&gt;&#xA;&lt;p&gt;Why are there so many overflow bugs in Pokémon Red?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="15334" LastEditDate="2021-01-19T09:45:01.117" LastActivityDate="2021-02-19T00:13:40.707" Title="Why did Pokémon Red have so many overflow bugs?" Tags="&lt;z80&gt;&lt;software&gt;&lt;8080&gt;&lt;game-boy&gt;&lt;bugs&gt;" AnswerCount="5" CommentCount="8" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="1627" PostTypeId="2" ParentId="1621" CreationDate="2016-10-29T08:13:49.230" Score="5" Body="&lt;p&gt;I'll keep my answer short, since there is an excellent &lt;a href=&quot;https://en.wikipedia.org/wiki/Word_(computer_architecture)#Table_of_word_sizes&quot; rel=&quot;noreferrer&quot;&gt;list of word sizes on Wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mention the 70's, and obviously by then most new chips were standardized on numbers of bits - typically powers of 2 - so 4, 8, 16, 32 and 64 were the most common. But some earlier machines used a length of digits insteads of words, and a few even had variable length words with a terminator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.quadibloc.com/comp/cp0305.htm&quot; rel=&quot;noreferrer&quot;&gt;Here are some notes&lt;/a&gt; on some older register architectures, but Wikipedia's list is hard to beat.&lt;/p&gt;&#xA;" OwnerUserId="71" LastActivityDate="2016-10-29T08:13:49.230" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1628" PostTypeId="2" ParentId="1551" CreationDate="2016-10-29T09:43:37.127" Score="3" Body="&lt;p&gt;As has been noted in comments, you have probably damaged your ZX Spectrum+'s hardware by reversing the polarity of the power supply. In &lt;a href=&quot;//retrocomputing.stackexchange.com/a/1559/278&quot;&gt;mcleod_ideafix's answer&lt;/a&gt; to the relevant question this is explained in more detail:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You have damaged your Spectrum for sure. [...] [The 7805 regulator] is designed to survive overvoltage and short circuit conditions, but it is very vulnerable to a polarity inversion.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="278" LastActivityDate="2016-10-29T09:43:37.127" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1629" PostTypeId="2" ParentId="1626" CreationDate="2016-10-29T13:38:56.203" Score="23" Body="&lt;p&gt;I cannot speak about Pokémon in particular, but as a programmer for ~30 years, I'll answer thus: either laziness, incorrect assumption, or surprise.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Laziness&lt;/strong&gt;&lt;br&gt;&#xA;After an operation that overflows, you need to write extra code to check for the overflow, and then decide what to do about it. That's extra time, and extra work.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Incorrect assumption&lt;/strong&gt;&lt;br&gt;&#xA;(Often characterised by &quot;That'll never happen!&quot;) Have you ever visited a website, or used a program, and an error box popped up with something like &quot;User won't see this&quot;? That's because the programmer may have considered the overflow case, but decided it wouldn't happen so didn't code for it (other than put in a debug statement &lt;em&gt;that they forgot to remove&lt;/em&gt;). Needless to say...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Surprise&lt;/strong&gt;&lt;br&gt;&#xA;For example, just say at a point early on in the game you can do something that trebles your points. Because it's early, the programmer doesn't even consider checking for overflow because the current score isn't that high yet. But if a high-scoring player works their way back to that point and triggers it &lt;em&gt;then&lt;/em&gt;, then it might overflow the score. The player surprised the programmer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are a couple of other, lesser reasons: maybe they ran out of code room on the ROM and had to strip out error handling code; or maybe they wanted those Easter Eggs to be found; but it's almost always one of the top three.&lt;/p&gt;&#xA;" OwnerUserId="1980" LastEditorUserId="1980" LastEditDate="2016-10-29T14:09:25.460" LastActivityDate="2016-10-29T14:09:25.460" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1630" PostTypeId="1" AcceptedAnswerId="1631" CreationDate="2016-10-29T21:13:34.080" Score="13" ViewCount="2106" Body="&lt;p&gt;The PDP-7 was a bookshelf-sized &quot;minicomputer&quot;, with keyboard, magnetic and paper tape and printer I/O. According to Wikipedia, the first version of UNIX (then named Unics) was programmed in assembly on the PDP-7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite this, I can't find much information about the PDP-7's assembly syntax nor instruction set. As only knowledge of the registers and instructions are required to write and interpret bytecode, this information is the most important for understanding PDP-7 code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What instruction set was used by PDP-7 minicomputers?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="4025" LastEditDate="2017-09-08T00:23:54.833" LastActivityDate="2020-06-30T15:20:46.463" Title="What is the instruction set of the PDP-7?" Tags="&lt;software&gt;&lt;instruction-set&gt;&lt;pdp-7&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1631" PostTypeId="2" ParentId="1630" CreationDate="2016-10-29T23:15:08.420" Score="16" Body="&lt;p&gt;BitSavers has a couple of PDP-7 manuals available.  In particular, you will be interested in the &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/dec/pdp7/F-75P_PDP7prelimUM_Dec64.pdf&quot; rel=&quot;noreferrer&quot;&gt;PDP-7 Reference Manual&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-7 has 16 basic instructions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;cal&lt;/code&gt; - Call subroutine  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dac&lt;/code&gt; - Deposit AC  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;jms&lt;/code&gt; - Jump to subroutine  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dzm&lt;/code&gt; - Deposit zero in memory  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;lac&lt;/code&gt; - Load AC  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;xor&lt;/code&gt; - Exclusive OR  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;add&lt;/code&gt; - Add (1's complement)  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;tad&lt;/code&gt; - Twos complement add  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;xct&lt;/code&gt; - Execute  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;isz&lt;/code&gt; - Index and skip if zero  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;and&lt;/code&gt; - AND  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;sad&lt;/code&gt; - Skip if AC is different  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;jmp&lt;/code&gt; - Jump  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;eae&lt;/code&gt; - Extended Arithmetic Element instruction  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;iot&lt;/code&gt; - Input/Output Transfer  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;opr&lt;/code&gt; - Operate&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The last three (&lt;code&gt;eae&lt;/code&gt;, &lt;code&gt;iot&lt;/code&gt; and &lt;code&gt;opr&lt;/code&gt;) are classes of instructions that use additional bits in the instruction word to specify the specific operation to be performed.  In particular, the opr instruction with no additional bits set does nothing (i.e. it is the &quot;no operation&quot; instruction).&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="115" LastEditDate="2016-10-31T09:08:36.520" LastActivityDate="2016-10-31T09:08:36.520" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1632" PostTypeId="5" CreationDate="2016-10-30T08:04:01.180" Score="0" Body="&lt;p&gt;This tag should be used for questions about the DEC PDP-7 minicomputer. It should not be used for questions about other computers in the PDP series; separate tags should be used for those.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DEC PDP-7 was an 18-bit minicomputer, first manufactured in 1965. It had a memory cycle time of  1.75 µs and add time of 4 µs. In total, 120 machines were manufactured and sold.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2016-10-30T08:49:55.627" LastActivityDate="2016-10-30T08:49:55.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1633" PostTypeId="4" CreationDate="2016-10-30T08:04:01.180" Score="0" Body="For questions about the DEC PDP-7 minicomputer." OwnerUserId="278" LastEditorUserId="278" LastEditDate="2016-10-30T08:04:01.180" LastActivityDate="2016-10-30T08:04:01.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1634" PostTypeId="1" CreationDate="2016-10-30T08:50:00.410" Score="28" ViewCount="12361" Body="&lt;p&gt;Is there any way of reading Amiga floppy disks to PC hard-drive? Can I use a standard Floppy drive with a firmware program that will translate it? Do I need an external drive or a working Amiga computer?&lt;/p&gt;&#xA;" OwnerUserId="277" LastActivityDate="2017-07-14T17:12:05.917" Title="Can I image Amiga Floppy Disks on a Modern computer?" Tags="&lt;amiga&gt;&lt;floppy-disk&gt;&lt;data-transfer&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1635" PostTypeId="2" ParentId="1634" CreationDate="2016-10-30T09:21:54.687" Score="20" Body="&lt;p&gt;Even though with a standard floppy drive there is no way to read it, there are several ways to do this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you have two floppy drives, you can use &lt;a href=&quot;http://www.amiga.org/forums/showthread.php?t=46829&quot;&gt;a program called Adfread&lt;/a&gt; (&lt;a href=&quot;http://www.winuae.net/files/stuff/adfread-1.1.zip&quot;&gt;download&lt;/a&gt;) to override the way Windows reads the second. This only works with Windows 2000 onwards, (but not Windows ME).&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;http://www.cbmstuff.com/&quot;&gt;SuperCard Pro&lt;/a&gt; or &lt;a href=&quot;http://www.kryoflux.com/&quot;&gt;Kyroflux&lt;/a&gt; controllers, that can be connected over USB.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;//icomp.de/shop-icomp/&quot;&gt;Catweasel&lt;/a&gt; floppy controller (PC version), that is available as a PCI or ISA board.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;//www.amigaforever.com/dataconversion/&quot;&gt;Cloanto offers a data-conversion service&lt;/a&gt;, for a few floppies if needed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;//www.amigaforever.com/kb/13-118&quot;&gt;Reading Amiga Floppy Disks on PC&lt;/a&gt; at Amiga Forever&lt;/p&gt;&#xA;" OwnerUserId="277" LastEditorUserId="366" LastEditDate="2016-10-30T17:30:48.840" LastActivityDate="2016-10-30T17:30:48.840" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1636" PostTypeId="2" ParentId="1626" CreationDate="2016-10-30T16:22:05.947" Score="22" Body="&lt;p&gt;Overflow doesn't mean what you think. That flag exposes the internal ALU carry from bit 6 -&gt; bit 7. It's needed when you are handling the most significant byte of a 2-complement number, because you can't use the carry for that purpose here: it's jumbled by the MSB sign bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you don't add or subtract 2-complement numbers (MSB isn't meant as sign bit but just another bit), it has no meaning. It's not set on increment or decrement instructions when they wrap around 255-&gt;0 or 0-&gt;255 either.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastEditorUserId="3459" LastEditDate="2016-10-30T16:34:46.060" LastActivityDate="2016-10-30T16:34:46.060" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1637" PostTypeId="1" AcceptedAnswerId="1638" CreationDate="2016-10-30T21:00:08.653" Score="28" ViewCount="3657" Body="&lt;p&gt;Kernels are programs that abstract the hardware of a computer to some extent, allowing other programs to use standardised system calls (e.g. &lt;code&gt;malloc&lt;/code&gt;) to perform hardware tasks (e.g. writing to memory, displaying text on a screen) without resorting to &quot;special memory values&quot; or machine-dependent hacks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many early operating systems functioned as kernels. But by 1985 and the release of AmigaOS, separate kernels existed (i.e. Exec). When was the first independent* kernel** created?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;* Where &quot;independent&quot; means &quot;able to function without, or separately from, (the rest of) an operating system&quot;.&lt;/sup&gt;&lt;br&gt;&#xA;&lt;sup&gt;** Where &quot;kernel&quot;, more specifically, means &quot;resident monitor that is callable by user programs&quot;. (&lt;a href=&quot;/posts/comments/2635&quot;&gt;Thanks Ken Gober&lt;/a&gt;!)&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2016-10-31T16:53:30.627" LastActivityDate="2018-05-03T02:21:12.353" Title="What was the first operating system to feature a separate kernel?" Tags="&lt;history&gt;&lt;operating-system&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1638" PostTypeId="2" ParentId="1637" CreationDate="2016-10-30T22:52:30.130" Score="29" Body="&lt;p&gt;Reading through Per Brinch Hansen's &lt;a href=&quot;http://brinch-hansen.net/papers/2001b.pdf&quot; rel=&quot;noreferrer&quot;&gt;The evolution of operating systems&lt;/a&gt; paper, I get the impression the two main candidates for operating systems with identifiably separate kernels are&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Dijkstra's &lt;a href=&quot;https://en.wikipedia.org/wiki/THE_multiprogramming_system&quot; rel=&quot;noreferrer&quot;&gt;THE multiprogramming system&lt;/a&gt;, started in 1965; it's a layered operating system — so you could view its layer 0 as a kernel, which is smaller than the whole operating system;&lt;/li&gt;&#xA;&lt;li&gt;Hansen's own &lt;a href=&quot;https://en.wikipedia.org/wiki/RC_4000_multiprogramming_system&quot; rel=&quot;noreferrer&quot;&gt;RC 4000 multiprogramming system&lt;/a&gt;, built in 1969; it's the first operating system designed as separate components communicating with each other (which led to what are now known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Microkernel&quot; rel=&quot;noreferrer&quot;&gt;microkernels&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To answer the revised question about callable monitors, the same paper indicates that&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Atlas was the first system to exploit &lt;em&gt;supervisor calls&lt;/em&gt; known as “extracodes”:&lt;/p&gt;&#xA;  &#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;Extracode routines form simple extensions of the basic order code, and&#xA;    also provide specific entry to supervisor routines.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Atlas_%28computer%29&quot; rel=&quot;noreferrer&quot;&gt;Atlas system&lt;/a&gt; here is a computer built at Manchester University in the early 1960s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hansen's excellent book, &lt;a href=&quot;http://www.springer.com/book/9780387951133&quot; rel=&quot;noreferrer&quot;&gt;Classic Operating Systems&lt;/a&gt;, reprints papers describing all these systems (and others) in detail. Regarding the Atlas supervisor:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It becomes activated in several different ways. Firstly, it can be entered as a direct result of obeying an object&#xA;  program. Thus, a problem being executed calls for the supervisor whenever&#xA;  it requests an action that is subject to control by the supervisor, such as&#xA;  a request for transfer to or from peripheral equipments or the initiation of&#xA;  transfers between core store and magnetic drums; the supervisor is also activated when an object program requires monitoring for any reason such as&#xA;  exponent or division overflow, or exceeding store or time allocation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2016-11-01T17:09:34.437" LastActivityDate="2016-11-01T17:09:34.437" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1640" PostTypeId="1" AcceptedAnswerId="1641" CreationDate="2016-10-31T22:05:26.787" Score="36" ViewCount="7172" Body="&lt;p&gt;Pac-man is a game where you navigate a small yellow circle around a maze, collecting dots and fruit whilst avoiding brightly-coloured monsters, or ghosts. As long as there was at least one 'man left, the game would play forever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except... it doesn't. After a few hundred levels, the level suddenly turns into this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B5OdT.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B5OdT.png&quot; alt=&quot;A big glitchy mess on the right-hand side of a Pac-man level&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why would such a dramatic glitch occur?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2016-11-01T08:08:39.943" LastActivityDate="2016-11-01T20:47:18.927" Title="Why does the kill-screen glitch occur in Pac-man?" Tags="&lt;software&gt;&lt;arcade&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1641" PostTypeId="2" ParentId="1640" CreationDate="2016-10-31T22:05:26.787" Score="51" Body="&lt;p&gt;There are only seven fruit in Pac-man. The way the game calculates the number of fruit to draw is as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;LD A,(#4E13)&lt;/code&gt;: Load the level number (at memory address &lt;code&gt;0x4E13&lt;/code&gt;) into &lt;code&gt;A&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;INC A&lt;/code&gt;: Increment &lt;code&gt;A&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CP #08&lt;/code&gt;: Is &lt;code&gt;A &amp;lt; 8&lt;/code&gt;?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;JP NC,#2C2E&lt;/code&gt;: If not, jump to large-number fruit handling code.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LD DE,#3B08&lt;/code&gt;: Load the address of the cherry into &lt;code&gt;DE&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Start the fruit-drawing loop.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(The assembly code is reproduced and explained in detail &lt;a href=&quot;//donhodges.com/how_high_can_you_get2.htm&quot;&gt;here&lt;/a&gt;, which also includes a patch to remove the glitch.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This code works fine if the level number is 1, 2, 3, 4... even if it's 0! But if the level number is 255, the implementation's main flaw is exposed:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;LD A,(#4E13)&lt;/code&gt;: Load &lt;code&gt;255&lt;/code&gt; into &lt;code&gt;A&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;INC A&lt;/code&gt;: Increment &lt;code&gt;255&lt;/code&gt; to &lt;code&gt;256&lt;/code&gt; - this overflows to &lt;code&gt;0&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CP #08&lt;/code&gt;: Is &lt;code&gt;0&lt;/code&gt; less than &lt;code&gt;8&lt;/code&gt;? Yes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;JP NC,#2C2E&lt;/code&gt;: Don't jump to large-number fruit handling code&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LD DE,#3B08&lt;/code&gt;: Load the address of the cherry into &lt;code&gt;DE&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Start the fruit-drawing loop&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The fruit-drawing loop will then proceed to draw a fruit, subtract from the counter, check if it's equal to 0... but subtracting anything from &lt;code&gt;0&lt;/code&gt; will cause it to underflow to 255. And 255 is not equal to 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The loop will dutifully draw fruit on the screen repeatedly until it has finished, by which time it will have drawn &quot;level number + 1&quot; fruit, which is fine when the level number is less than eight, but not when it is 255.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This attempt to draw 256 fruit on the screen, overwriting many other items - such as the precious Pac-dots required to complete the level - whilst doing so, is the cause of this dramatic glitch. No matter what the player does, the &quot;Pac-dots collected&quot; count will never be large enough, so the game cannot progress and ends here. This is why the kill-screen glitch occurs, and the final level of Pac-man will always be impossible to complete.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2016-11-01T20:47:18.927" LastActivityDate="2016-11-01T20:47:18.927" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="1642" PostTypeId="1" AcceptedAnswerId="1646" CreationDate="2016-10-31T22:45:33.603" Score="12" ViewCount="293" Body="&lt;p&gt;The original Atari 400 and Atari 800 machines each had four joystick ports, which was frankly ahead of their time and made for some amazing experiences. M.U.L.E. with four players was an absolute delight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is that hardware for dealing with 4 ports still available inside of the XL and XE machines, and could these machines have extra ports added with reasonable ease (positioning on the case aside).&lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2016-11-01T13:14:27.760" Title="Can Extra Joystick Ports be Added to the Atari XL/XE Series of Computers?" Tags="&lt;atari&gt;&lt;atari-800&gt;&lt;atari-xl&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1644" PostTypeId="1" AcceptedAnswerId="1647" CreationDate="2016-11-01T12:46:47.060" Score="20" ViewCount="5211" Body="&lt;p&gt;In the era of C64, Apple][ GS, and SNES, did the games use hardcoded memory locations, or did they let the assembler help them (like modern assemblers)? If yes, how did they manage the memory?&lt;/p&gt;&#xA;" OwnerUserId="3486" LastEditorUserId="3486" LastEditDate="2016-11-02T05:07:23.403" LastActivityDate="2019-06-24T11:56:44.880" Title="Did early assembly games use hardcoded memory locations?" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;memory&gt;" AnswerCount="12" CommentCount="10" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1645" PostTypeId="2" ParentId="1644" CreationDate="2016-11-01T13:13:09.187" Score="4" Body="&lt;p&gt;It really depended on which developer was creating the games.  Atari had a very sophisticated system that their developers used and they wrote proper assembler and compiled it on mainframes.  Independent developers often did not have such resources available to them and would hack away in a monitor, which is typically how hard-coded addresses wind up in games.&lt;/p&gt;&#xA;" OwnerUserId="260" LastActivityDate="2016-11-01T13:13:09.187" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1646" PostTypeId="2" ParentId="1642" CreationDate="2016-11-01T13:14:27.760" Score="11" Body="&lt;p&gt;No. At least not in a software compatible manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PIA which is used in the 800 to read joystick ports 3 and 4 was repurposed in the XL systems to control memory mapping (eg. disable OS ROM, disable BASIC ROM, etc.) and for other special XL functions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;http://www.atarimagazines.com/compute/issue57/feedback_atari_amnesia.html&quot;&gt;http://www.atarimagazines.com/compute/issue57/feedback_atari_amnesia.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2016-11-01T13:14:27.760" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1647" PostTypeId="2" ParentId="1644" CreationDate="2016-11-01T14:30:04.703" Score="18" Body="&lt;p&gt;On the C64, even hobbyist assemblers like HypraAss supported symbols, so no, I don't think anyone used hardcoded addresses if there was a way to use a symbol instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you had to be careful how you arrange your data in memory. For example, on the C64, it wasn't possible to put video or sprite data into RAM locations 0x1000..0x1fff and 0x9000..0x9fff because the VIC chip had a fixed mapping to read the character generator ROM when using these addresses. So programmers preferred these locations for program code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There had been other restrictions on the locations of video data, too. For example, the VIC could only address 16k of memory and the C64 had a bank-switching mechanism to make it access all the memory. But it had another bank-switching mechanism for the CPU, so memory addressing was quite a hassle, especially in the 0xd000..0xdfff area, where the I/O ports and the color RAM were mapped along the main RAM. So, these areas had to be spared from program code mostly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I general, you needed a lot of knowledge about the address layout of the machine, and let the assembler only help you to move code snippets around as needed without having to change all addresses by hand. It was very common to have a lot of &lt;em&gt;.origin&lt;/em&gt; statements in one's code.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2016-11-01T14:30:04.703" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="1648" PostTypeId="1" AcceptedAnswerId="1651" CreationDate="2016-11-01T15:41:45.140" Score="105" ViewCount="23270" Body="&lt;p&gt;When the N64 cartridge is tilted in Super Mario 64, it reliably produces glitches such as &lt;a href=&quot;https://www.youtube.com/watch?v=XS11HnEB9T0&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt;. Mario's limbs disappear, he rotates 90° and sinks into the floor, and the music gets messed up (usually it goes faster).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What surprises me about this glitch is two things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It's a very &lt;em&gt;specific&lt;/em&gt; and subtle kind of behavior. I would have thought that tilting a cartridge would produce glitches more like &quot;absolutely nothing works because everything's messed up, the game crashes&quot;, not &quot;this specific 3d model will be rotated by precisely 90°&quot;. I mean, what, is there a special &quot;rotate mario&quot; pin in the cartridge?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;This specific behavior can be reliably reproduced. These exact symptoms have been &lt;a href=&quot;http://www.mariowiki.com/List_of_Super_Mario_64_glitches#Cartridge_Tilting_glitches&quot; rel=&quot;noreferrer&quot;&gt;documented&lt;/a&gt; online. You can find videos on YouTube of this glitch happening to other people.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;How could it possibly be that something as &quot;brute force&quot; as tilting the cartridge could reliably produce such a specific result without just making the whole game crash? This seems to me like dropping a typewriter down a flight of stairs and finding that it's typed out a novel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not necessarily asking about this specific glitch, I'm just trying to get some kind of a reading on how it's possible for cartridge tilting to reliably produce symptoms like this. Ideally, assume that I have at most basic knowledge about computers, roughly equivalent to a 101 textbook on computer circuitry and some programming experience, although explanations at any level are welcome.&lt;/p&gt;&#xA;" OwnerUserId="3521" LastEditorUserId="3556" LastEditDate="2016-11-02T16:57:31.227" LastActivityDate="2018-06-20T06:39:57.040" Title="How can tilting a N64 cartridge cause such subtle glitches?" Tags="&lt;nintendo&gt;&lt;nintendo-64&gt;&lt;game-cartridge&gt;" AnswerCount="5" CommentCount="6" FavoriteCount="28" ContentLicense="CC BY-SA 3.0" />
  <row Id="1649" PostTypeId="2" ParentId="1648" CreationDate="2016-11-01T16:07:35.783" Score="50" Body="&lt;p&gt;I wouldn't say &quot;It's a very specific and subtle kind of behavior.&quot;  I really think this is the case of undefined behavior that has been reproduced so many times from N64 launch to now that users have seen repeat behavior.  In fact, sometimes cartridge tilting can actually delete your game save (Donkey Kong 64), and not just mess with the graphics (Goldeneye's &quot;Get Down&quot; glitch).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a high level, cartridge tilting limits or blocks data flow from the cartridge to the console.  Many &quot;How To&quot; guides state that to accomplish the tilt properly, keep the right side of the cartridge pushed down while slowly lifting up the left side.  This is because the power pins and ground are located on the right side of the cartridge, while the data stream (and some 64 DD) pins are on the left side.  Note that I think the cartridge would sit with the label facing the arrow/triangle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q1QvH.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q1QvHm.jpg&quot; alt=&quot;Pin Wiring&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Image courtesy of &lt;a href=&quot;http://bitfixgaming.boards.net/thread/99/bungles-pin-n64-wiring-guide&quot; rel=&quot;noreferrer&quot;&gt;Bungle's 27/28 pin N64 wiring guide&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find a full wiring diagram or explanation on what all of these wires do, nor am I an EE expert.  I would love it if someone could provide an in-depth analysis of the Nintendo 64's cartridge I/O.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Different games show different behavior due to different engines and programing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also argue against your claim that &quot;This specific behavior can be reliably reproduced.&quot;  Have &lt;em&gt;you&lt;/em&gt; ever tried to perform any of the cartridge tilting glitches listed online or shown in YouTube videos?  They are incredibly hard to reproduce, even in ideal environments.  After years of attempting I've only done this successfully one time on Mario Kart, and have lost save data and broken several cartridges.  We don't know how many attempts it took users who were recording to reproduce &quot;ideal&quot; tilt glitches.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="1989" LastEditDate="2018-06-20T06:39:57.040" LastActivityDate="2018-06-20T06:39:57.040" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="1650" PostTypeId="2" ParentId="1644" CreationDate="2016-11-01T17:18:50.193" Score="11" Body="&lt;p&gt;More than hardcoded addresses, I'd say hardcoded memory regions. For example, in the ZX Spectrum series, a developer should avoid the memory region between &lt;code&gt;$4000&lt;/code&gt; and &lt;code&gt;$7FFF&lt;/code&gt; if he wants to put time-sensitive code or data, as this region is under contention between the CPU and the ULA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OTOH, there are routines that benefits from putting data on certain boundaries, such as LUTs. A 256 entry LUT can provide an output in only a few machine cycles if the LUT base address is on a 256 byte boundary. That is, if its base address is in the form &lt;code&gt;$XX00&lt;/code&gt;. That way, the translation (Z80 code) is as fast as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LD H,$XX  ;high byte of base address&#xA;LD L,A    ;A is the value we want to translate from&#xA;LD A,(HL) ;A gets the value translated from the LUT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;IM 2 vector tables (for the Z80 CPU also) are also subject of address hardcoding. There are machines which may put a random value in the data bus during an INTA bus cycle, so the called vector is unknown. In these cases, the complete IM 2 vector table must be filled with the same value &lt;code&gt;$XY&lt;/code&gt; so the address of the IM 2 routine will be &lt;code&gt;$XYXY&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-11-01T17:18:50.193" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1651" PostTypeId="2" ParentId="1648" CreationDate="2016-11-01T19:45:43.013" Score="72" Body="&lt;p&gt;The main point to understand is that the console is limited.  RAM on the console itself is faster than memory on the cartridge (and the cartridge memory was usually read only, with a little non volatile for user data). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the game designers had to carefully consider how to use the precious, but faster, ram on the console, vs the slower rom on the cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The stuff put into RAM was usually the graphics routines - the programming code that decided what pixels went where - and the cartridge was relied on to provide data when needed - a map's boundaries, object orientations and locations, etc.  Things that consumed a small amount of space and so didn't take long to look up inside the cartridge while the console spent most of its time drawing on the screen using the code, textures, and other pieces needed much more frequently and quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what a cartridge tilt does is it damages or disables access to these lesser important, but still important, pieces of data that the game doesn't want to waste ram on. This results in humorous mistakes as the program tries to use bad data to act on the good data stored in ram.&lt;/p&gt;&#xA;" OwnerUserId="1961" LastActivityDate="2016-11-01T19:45:43.013" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1652" PostTypeId="1" CreationDate="2016-11-01T21:50:32.783" Score="18" ViewCount="2108" Body="&lt;p&gt;The objective of Dig Dug is to eliminate underground monsters by inflating them until they pop, or by squashing them with large rocks. Once all of the monsters have escaped or been defeated, the level progresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the level number reaches 256, however, a monster appears precisely on Dig Dug's spawn point, no tunnels appear, the rocks are arranged strangely and the player loses all of the remaining lives almost instantly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did the developers program an impossible level into the game?&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2019-02-17T00:54:30.870" Title="Why can you not move on the last level on Dig Dug?" Tags="&lt;software&gt;&lt;arcade&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1653" PostTypeId="2" ParentId="1644" CreationDate="2016-11-02T00:43:33.907" Score="14" Body="&lt;p&gt;The 6502 (the processor in many of the computers mentioned) had a special addressing mode for the 'zero page' (see Wikipedia article by the same name).  The zero page was faster to access and use.  A three cycle &lt;code&gt;LDA $0000&lt;/code&gt; could instead be written as a two cycle &lt;code&gt;LDA $00&lt;/code&gt; accessing the same location in memory.  Thus, the zero page was a location where significant amounts of convention was stored.  One could possibly work with an assembler that had labels and go through and label each of those 256 memory locations, but it was safer to work with them as hard coded values to make sure you were using the &lt;code&gt;LDA $00&lt;/code&gt; form of the instruction which translated to &lt;code&gt;A5 00&lt;/code&gt; rather than &lt;code&gt;AD 00 00&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The zero page map for the Apple ][+ can be seen at &lt;a href=&quot;http://www.kreativekorp.com/miscpages/a2info/zeropage.shtml&quot; rel=&quot;noreferrer&quot;&gt;Jon Relay's Apple II Info Archives - Zero Page Addresses&lt;/a&gt;.  If you wanted to get the horizontal location of the cursor, this was stored at &lt;code&gt;$24&lt;/code&gt;.  Thus, hard coded addresses were certainly used for accessing locations of things on the zero page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, page 1 on the 6502 was the stack.  &lt;code&gt;$0100&lt;/code&gt; - &lt;code&gt;$01FF&lt;/code&gt; was the stack - no way around that.  The instructions &lt;code&gt;TXS&lt;/code&gt;, &lt;code&gt;TSX&lt;/code&gt;, &lt;code&gt;PHA&lt;/code&gt;, &lt;code&gt;PLA&lt;/code&gt;, &lt;code&gt;PHP&lt;/code&gt;, and &lt;code&gt;PLP&lt;/code&gt; were working on the stack.  Along with &lt;code&gt;JSR&lt;/code&gt; for a subroutine which would push the return address on to the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hard coded locations in ROM were especially useful if there was a card necessary. The code on the card didn't know what slot it was loaded into (each of the slots had a different memory range), just that it was invoked. So jumping to a known &lt;code&gt;RTS&lt;/code&gt; memory instruction in ROM would push the return address onto the stack, and then pop it and return.  Then an examination of the stack pointer register and accessing one byte (little endian) just past the top of the stack would tell you the high byte of the memory you came from - and that would tell you what slot your code ran in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory management on the Apple ][+ within Applesoft, was largely handled by the zero page location &lt;code&gt;$6F&lt;/code&gt; which had the top of free memory and the ROM routine at &lt;code&gt;$E452&lt;/code&gt; (GETSPACE) which would do essentially a malloc of the accumulator bytes and store the location of that memory in the X and Y registers.  There was also a garbage collection routine at &lt;code&gt;$E484&lt;/code&gt; and a memory reorganization routine at &lt;code&gt;$E5E2&lt;/code&gt;.  And while there were symbolic names for these routines, and a sufficiently advanced assembler could use them (not the one at &lt;code&gt;$F666&lt;/code&gt;), they were well known and unchanging addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While a large download, the pdf &lt;a href=&quot;http://fd.fabiensanglard.net/prince_of_persia/Inside%20the%20Apple%20IIe.pdf&quot; rel=&quot;noreferrer&quot;&gt;Inside the Apple //e&lt;/a&gt; has a significant amount of information about the structure of the processor and programs that ran.&lt;/p&gt;&#xA;" OwnerUserId="3539" LastEditorUserId="2126" LastEditDate="2017-01-04T01:14:08.107" LastActivityDate="2017-01-04T01:14:08.107" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1654" PostTypeId="1" CreationDate="2016-11-02T08:03:28.053" Score="17" ViewCount="1366" Body="&lt;p&gt;For those of us that use an old computer daily, is it safer for the hardware if the machines are turned off every night, or should they be left on?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume that powering up is more stressful for the components, but I'm also concerned about continuous wear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the answer change when going from hardware with few moving parts (say, an Atari 8-bit) to something from the mid 90s with a fan or early hard drive?&lt;/p&gt;&#xA;" OwnerUserId="1996" LastActivityDate="2016-11-02T10:01:48.860" Title="Power cycling old hardware" Tags="&lt;hardware&gt;&lt;maintenance&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1655" PostTypeId="2" ParentId="1652" CreationDate="2016-11-02T08:07:47.230" Score="29" Body="&lt;p&gt;Dig Dug stores the positions of objects in tables in memory. There are two tables for this: an enemy table containing the positions of up to four Pookas and four Fygars, and a rock table containing the positions of up to six rocks. There is also a table containing tunnel data, but this is stored in a different way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game divides the playable area into this grid:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rJV0n.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rJV0n.gif&quot; alt=&quot;Dig Dug Memory Grid&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;sup&gt;Image sourced from &lt;a href=&quot;//donhodges.com/How_Deep_Can_You_Dig_Dug.htm&quot; rel=&quot;noreferrer&quot;&gt;DonHodges.com&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This image shows the mapping between on-screen positions and internal representations. These &quot;position numbers&quot; are stored in the enemy and rock tables to show where to place the enemies and rocks. For example, the enemy table for level 1 might look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;32 3C DA 00    00 B4 00 00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the rock table might look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00 45 AB C4 00 00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The enemy table is eight bytes long, but is divided into two sections of four bytes each, for the Pookas and Fygars respectively. The byte value &lt;code&gt;00&lt;/code&gt; is used for enemies that should not be placed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are fifteen different levels in Dig Dug. These are stored in sequential tables, like a C array. There is a piece of code designed to limit the level value to between &lt;code&gt;00&lt;/code&gt; and &lt;code&gt;0e&lt;/code&gt;, which is as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;LD A,($8627)&lt;/code&gt;: Load the round number into &lt;code&gt;A&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CP 16&lt;/code&gt;: Is &lt;code&gt;A &amp;lt; 16&lt;/code&gt;?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;JR C,$1BE9&lt;/code&gt;: If yes, go to instruction 6.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;AND #00000011&lt;/code&gt;: Mask &lt;code&gt;A&lt;/code&gt; with &lt;code&gt;00000011&lt;/code&gt;, performing modulo 4.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ADD A,12&lt;/code&gt;: Add &lt;code&gt;12&lt;/code&gt; to &lt;code&gt;A&lt;/code&gt;, bringing it to between &lt;code&gt;12&lt;/code&gt; and &lt;code&gt;15&lt;/code&gt; (inclusive).&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;DEC A&lt;/code&gt;: Subtract &lt;code&gt;1&lt;/code&gt; from &lt;code&gt;A&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;RET&lt;/code&gt;: Return.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This value is then used to calculate the offset of the current level's data. But what happens if we put &lt;code&gt;0&lt;/code&gt; into it?&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;LD A,($8627)&lt;/code&gt;: Load &lt;code&gt;0&lt;/code&gt; into &lt;code&gt;A&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CP 16&lt;/code&gt;: Is &lt;code&gt;A &amp;lt; 16&lt;/code&gt;?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;JR C,$1BE9&lt;/code&gt;: Yes, so go to instruction 6.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;(skipped because of jump)&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;(skipped because of jump)&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;DEC A&lt;/code&gt;: Subtract &lt;code&gt;1&lt;/code&gt; from &lt;code&gt;A&lt;/code&gt;, underflowing to &lt;code&gt;255&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;RET&lt;/code&gt;: Return.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;With an offset of &lt;code&gt;255&lt;/code&gt; the game vastly overshoots the tables, setting and using what is known as a &quot;garbage pointer&quot;. The game then interprets code and other memory values as a layout, which coincidently results in two enemies being placed on Dig Dug's starting position, rendering the level impossible.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="3748" LastEditDate="2019-02-17T00:54:30.870" LastActivityDate="2019-02-17T00:54:30.870" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="1656" PostTypeId="2" ParentId="1654" CreationDate="2016-11-02T09:52:45.910" Score="16" Body="&lt;p&gt;It's safer to turn them on and off from time to time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most problematic components are electrolytic capacitors, especially the aluminium types which have been used plentiful in old computers. These parts lose their &lt;em&gt;formation&lt;/em&gt; when not turned on from time to time, meaning the aluminium oxide between the contacted sheets gets thinner and thinner. This causes the fatal failure on turning on old hardware which was in the attic for dozens of years. It doesn't happen when you turn it on and off from time to time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why not running them all the time? Again, the aluminium electrolytic capacitors are the culprit. Their electrolyte dries up with the years, losing water to the aluminium sheets inside the capacitator. This happens faster when the part is heated. And unfortunately, when the part had lose some capacity, there is more ripple current in the circuit, so it's loaded more and heats up even more. This leads to a fatal failure when running a device 24/7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing I do with old hardware before turning it on is checking the Al caps. It was that way with grandpa's tube radio, with old tv sets and it's the same with old computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, turn your old computers on once in a year or so, then put them to sleep again if they are fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: In old military parts, you will also find tantalum capacitators with a liquid electrolyte. These ones fail extremly miserably when the electrolyte is gone. Twenty years ago, I was at an electronics disposal facility, and one day we got a load of scrapped radar equipment from the Bundeswehr which originated in GDR/Soviet Union. They used those parts in huge amounts. There was one FR4 board with a fist-sized hole blown into it. I eventually found another board of the same type which had a big liquid electrolyte tantalum cap at the place the hole was on the other board.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastEditorUserId="3459" LastEditDate="2016-11-02T10:01:48.860" LastActivityDate="2016-11-02T10:01:48.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1657" PostTypeId="2" ParentId="1654" CreationDate="2016-11-02T09:56:54.877" Score="6" Body="&lt;p&gt;For older hardware, leave it on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving parts can be fixed or replaced.  The problem comes from wear to non-moving parts: the circuits inside the microchips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This wear takes two forms: &lt;a href=&quot;https://en.wikipedia.org/wiki/Fatigue_(material)&quot; rel=&quot;noreferrer&quot;&gt;thermal fatigue&lt;/a&gt; causing irregularities at the edges of the chips to grow into cracks that will eventually cross something critical, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Electromigration&quot; rel=&quot;noreferrer&quot;&gt;electromigration&lt;/a&gt; of chip elements causing interconnects to thin and break.  Thermal fatigue occurs every time a chip changes temperature; for chips that pre-date modern power-saving techniques, this means it takes place mostly startup and shutdown.  Electromigration happens constantly, but old chips are made using such large components that it mostly isn't a concern.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-11-02T09:56:54.877" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1658" PostTypeId="2" ParentId="1648" CreationDate="2016-11-02T15:38:40.093" Score="6" Body="&lt;p&gt;First, if you go to &lt;a href=&quot;http://tcrf.net&quot; rel=&quot;noreferrer&quot;&gt;The Cutting Room Floor&lt;/a&gt; and browse awhile, you will discover that the binary images of many old ROM and cartridge based games have often have test code, unused code, debug code, partially overwritten code, and in some cases even messages and text-based source code.  Why this code is not deleted and instead &quot;skipped over&quot; is beyond me - it's most likely the programming of the final master EEPROM did not erase what was previously there.  It's really common in a lot of 70's, 80's and early 90's games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All CPUs have an &quot;Instruction Pointer&quot; or &quot;Program Counter&quot; that contains an address of the instruction it's currently &quot;working on.&quot;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A CPU in an endless loop reads the data in this cartridge (which is mapped in the CPU's address space) from this address, increments the program counter (sometimes more than once to get additional data needed by the instruction), executes the instruction, and repeats.  Certain instructions called &quot;jumps&quot; or &quot;branches&quot; can &quot;set&quot; this register to a different value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you partially remove a cartridge, you are interfering with the address and data pins of the cartridge.  This means the CPU is reading wrong data from the cartridge and will execute an unintended instruction, or an existing instruction with unintended operands or data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also possible that interfering with the communication between the cartridge and the computer in 16-bit and later systems causes bus errors which trigger CPU exceptions, which might activate debug or test code in the cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can cause the CPU to jump to spots in the binary image of the cartridge that it normally wouldn't, and if there is some unused test or old code that does something weird, it might get called and if conditions are right, it might actually work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You used to be able to &quot;fry&quot; Atari 2600 games fairly easily by rocking the power switch on and off quickly.  It would cause the CPU to not completely initialize and I always suspected that the Atari would start the cartridge at some point other than the beginning.  Many games had weird glitches, yet were still playable.  But there is not a lot of room in 2k or 4k byte Atari cartridges for unused code, so you usually didn't activate hidden functionality.&lt;/p&gt;&#xA;" OwnerUserId="746" LastActivityDate="2016-11-02T15:38:40.093" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1659" PostTypeId="2" ParentId="1648" CreationDate="2016-11-02T21:05:06.930" Score="29" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tu0Hx.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tu0Hx.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the pinout of a Nintendo 64 cartridge (from &lt;a href=&quot;http://n64.icequake.net/mirror/www.crazynation.org/N64/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;).  The Nintendo 64 used a multiplexed address/data bus with a three-stage access protocol: write the high word of the address you want to access, write the low word, then read the data, all going across the same 16 pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This indirect access method means that program code needs to be run from the console's RAM, but the high speed of access means that programmers generally treated the cartridge as additional data-only RAM, reading data on an as-needed basis (as opposed to disk-based systems, where programmers would try to preload as much data as possible).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you tilt the cartridge, you disconnect AD pins 0, 1, 2, 13, 14, and 15.  These disconnected lines take on default values based on the wiring techniques in use, restricting which parts of the cartridge ROM the console can access, and what values can be read from them.  Since most games read their code during startup rather than during gameplay, this doesn't (usually) cause crashes, but instead, highly-repeatable glitches.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-11-02T21:05:06.930" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1660" PostTypeId="1" CreationDate="2016-11-02T22:05:30.700" Score="18" ViewCount="2144" Body="&lt;p&gt;Ms. Pac-man is a game where you navigate a small yellow circle around a maze, collecting dots and fruit whilst avoiding brightly-coloured monsters, or ghosts. This time, however, the yellow dot has an eye, a red bow, some lipstick and a &quot;beauty spot&quot;. Apart from a few minor visual glitches, there was nothing really wrong with the game; at least until you got to level 130 or so. Then this happened:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/liCuP.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/liCuP.gif&quot; alt=&quot;The screen is upside down.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Surely this can't be a simple overflow glitch; it must have taken organised &lt;em&gt;sabotage&lt;/em&gt; to produce such an error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why, out of all things that could happen, would this occur?&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2019-02-18T10:12:58.250" Title="Why does Ms. Pac-man turn upside down?" Tags="&lt;software&gt;&lt;graphics&gt;&lt;arcade&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1661" PostTypeId="2" ParentId="1660" CreationDate="2016-11-02T22:05:30.700" Score="35" Body="&lt;p&gt;The reason for this glitch is rather obscure; it's not surprising that the developers didn't catch it. It all starts with the tunnels on the sides of the screen. These tunnels allow Ms. Pac-man and the ghosts to move from one side of the screen to the other. But, somewhere in development, somebody decided that the ghosts were moving too quickly through them. Their solution? Create &amp;quot;slow tiles&amp;quot; on the tunnel spaces.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/K2kqL.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K2kqL.gif&quot; alt=&quot;Level overlaid with grid&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this image, squares with black borders represent the &amp;quot;slow tiles&amp;quot;. These had the otherwise unused bit 6 of their bytes on the colour grid set, causing the ghosts to slow down slightly whilst moving going over them. This itself didn't cause the glitch; the main fault was elsewhere.&lt;/p&gt;&#xA;&lt;p&gt;To store the &amp;quot;slow tiles&amp;quot;, the game uses a very sophisticated compression algorithm; it stores the distance to the next &amp;quot;slow tile&amp;quot; as a single byte value, where a &lt;code&gt;00&lt;/code&gt; byte marks the end of the table. Although there are three layouts in the game, the first two have tunnels in the same places and so can use the same &amp;quot;slow tile&amp;quot; table. The algorithm the game uses to paint the &amp;quot;slow tiles&amp;quot; is as follows:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;LD A,(#4E13)&lt;/code&gt;: Load the current level number into &lt;code&gt;A&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CP #03&lt;/code&gt;: Is &lt;code&gt;A &amp;lt; 3&lt;/code&gt;?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;JP P,#2534&lt;/code&gt;: If not, jump elsewhere (return).&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LD HL,#95DF&lt;/code&gt;: Load the &amp;quot;show tiles&amp;quot; table address.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CALL #94BD&lt;/code&gt;: Loads a pointer to either the first or second table into &lt;code&gt;BC&lt;/code&gt; depending on level type.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LD HL,#4400&lt;/code&gt;: Loads the start of colour memory into &lt;code&gt;HL&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LD A,(BC)&lt;/code&gt;: Set &lt;code&gt;A&lt;/code&gt; to the memory value pointed to by &lt;code&gt;BC&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;INC BC&lt;/code&gt;: Increment &lt;code&gt;BC&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;AND A&lt;/code&gt;: Is &lt;code&gt;A == 0x00&lt;/code&gt;?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;JP Z,#2534&lt;/code&gt;: If so, jump elsewhere (return).&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;RST #10&lt;/code&gt;: Increment &lt;code&gt;HL&lt;/code&gt; by &lt;code&gt;A&lt;/code&gt; and set &lt;code&gt;A&lt;/code&gt; to the memory value pointed to by &lt;code&gt;HL + A&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SET 6,(HL)&lt;/code&gt;: Set bit 6 of the memory value pointed to by &lt;code&gt;HL&lt;/code&gt; - paint the &amp;quot;slow tile&amp;quot;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;JR #95D4&lt;/code&gt;: Jump back to instruction 7.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If you are observant you may have noticed some &amp;quot;slow tiles&amp;quot; along the outside of the top maze border. These are there because the maximum distance between two &amp;quot;slow tiles&amp;quot; is &lt;code&gt;0xFF&lt;/code&gt;, or 255, due to the way that their positions are compressed in memory. In order to reach from the right-hand side to the left-hand side of the screen, the pointer needs to span some &lt;code&gt;0x0300&lt;/code&gt; memory values. This number is clearly larger than &lt;code&gt;0xFF&lt;/code&gt;, so the developers bridged this gap in a series of &lt;code&gt;0xA0&lt;/code&gt;-sized jumps along the outside of the maze, where the &amp;quot;slow tiles&amp;quot; would not affect the ghosts.&lt;/p&gt;&#xA;&lt;p&gt;There is, however, a flaw in this algorithm. In the third instruction, the developers checked the &amp;quot;Positive&amp;quot; bit (&lt;code&gt;JP P,#2534&lt;/code&gt;) instead of the &amp;quot;Carry&amp;quot; bit (&lt;code&gt;JP NC,#2534&lt;/code&gt;) (note that it would have to check if the carry bit was &lt;em&gt;not&lt;/em&gt; set). This means that the value of &lt;code&gt;A&lt;/code&gt; is treated as a signed integer during the comparison, and so values &lt;code&gt;128&lt;/code&gt; and above are treated as if they are negative. Negative numbers are, indeed, less than three.&lt;/p&gt;&#xA;&lt;p&gt;As a result of this, an invalid, or &amp;quot;garbage&amp;quot;, pointer is loaded into the register in instruction 5. This in turn causes the following loop to process something that is not a table. For example: on level 134, this is the &amp;quot;table&amp;quot; read:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;7F 7F 7F 7F 7F 7F 7F 7F C9 C9 C9 C9 C9 C9 C9 C9&#xA;C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9&#xA;C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9&#xA;C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9&#xA;C9 C9 C9 C9 C9 C9 C9 C9 00 00 00 00 00 00 00 00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;As you might have guessed, this causes the pointer to go significantly past the colour memory, overwriting the sixth bit of every 201st memory value as it goes. Notably it writes to memory value &lt;code&gt;5D2B&lt;/code&gt;, which causes the majority of the screen to flip upside down.&lt;/p&gt;&#xA;&lt;p&gt;Eventually, enough arbitrary memory values are written to to cause the game to reset. It &lt;em&gt;is&lt;/em&gt; possible to fix this programming error, but that uncovers a whole other set of errors and it is not in the scope of this answer to explain those. For that, you will have to ask another question.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;I have made up the term &amp;quot;slow tiles&amp;quot; for this answer; I do not know what these are &lt;em&gt;actually&lt;/em&gt; called. A lot of information was sourced from &lt;a href=&quot;//donhodges.com/how_high_can_you_get3.htm&quot; rel=&quot;noreferrer&quot;&gt;donhodges.com&lt;/a&gt;.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-02-18T10:12:58.250" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="1663" PostTypeId="2" ParentId="1192" CreationDate="2016-11-03T16:18:33.360" Score="5" Body="&lt;p&gt;Thanks to this &lt;a href=&quot;https://tech.slashdot.org/story/04/09/08/1225208/running-ancient-unix-on-nintendo-gameboy&quot; rel=&quot;noreferrer&quot;&gt;Slashdot article&lt;/a&gt;, I also found a guide from 2004 with instructions on how to port Microcontroller Linux (uClinux) to the GBA.  The main site is long dead, but I found a &lt;a href=&quot;http://web.archive.org/web/20040401195431/http://wwwhsse.fh-hagenberg.at/Studierende/hse02006/uclgba/howto/index.html&quot; rel=&quot;noreferrer&quot;&gt;mirror via the WayBack Machine&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The uClinux cvs repo is long dead, but if you can find the September 9th, 2003 snapshot (&lt;code&gt;uClinux-dist-20030909.tar.gz&lt;/code&gt;), you should be able to apply the uclgba patch:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ tar xzf uClinux-dist-20030909.tar.gz&#xA;$ cd uClinux-dist&#xA;$ patch -p1 &amp;lt; uclgba_2004-03-14.patch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-11-03T16:18:33.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1664" PostTypeId="2" ParentId="1648" CreationDate="2016-11-04T01:21:32.487" Score="12" Body="&lt;h2&gt;The Gist&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Games on the N64 typically did not have a lot of memory to use. Instead of keeping all code and data loaded onto the cartridge at one time, it would typically keep some necessary game code loaded into memory, and would only load temporary game code or data when needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is seen with cartridge tilting on &quot;The Legend of Zelda: Ocarina of Time&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cartridge tilting on that game does not crash, since the code necessary to run is always loaded (in a file called &quot;code&quot;; it takes up about 1/3rd of memory at a time). However, the graphics appear very messed up. This is because the graphics for the game are loaded only when needed to save space, and interfering with the connection between the console and the cartridge loads garbage data instead of the actual data.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;How?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;How does the N64 interact with the cartridge? As an N64 hacker, this is my understanding;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Boot code from the beginning of the ROM is loaded into memory and executed&lt;/li&gt;&#xA;&lt;li&gt;The boot code sets up threading and loads some code to get the game &quot;running&quot;&lt;/li&gt;&#xA;&lt;li&gt;Any time the game needs data from the cartridge, it services the console's &quot;DMA read function&quot; by writing to &lt;code&gt;0xA4600000&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The DMA read function tells the console to load from the cartridge. When the console receives a write to the DMA read memory, it looks for the file that is wanted to be loaded. How does it know which file? It looks in the &quot;DMA Table&quot; of the cartridge, which points to where in ROM the file is located.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In response to LawrenceC&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sorry, but this is not correct.  The PC points to instructions specifically in RAM, not in ROM; However, when the N64 wants to execute code from the ROM it just services a DMA Read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope I could help.&lt;/p&gt;&#xA;" OwnerUserId="3580" LastActivityDate="2016-11-04T01:21:32.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1665" PostTypeId="2" ParentId="1398" CreationDate="2016-11-04T14:52:48.083" Score="1" Body="&lt;p&gt;Who made your 65C02?  Was it WDC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's WDC, then there are a few pins that should be held high with a 3.3k pull-up resistor.  Such as the &lt;code&gt;BE&lt;/code&gt; pin which is only on WDC versions.  &lt;code&gt;BE&lt;/code&gt; (Bus Enable) should be pulled up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some example taken from &lt;a href=&quot;http://wilsonminesco.com/6502primer/MysteryPins.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wilsonminesco.com/6502primer/MysteryPins.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;VPB (or VP):&#xA;With WDC's 65c02, leave it unconnected.  With anyone else's, ground it. &#xA;&#xA;BE:&#xA;...pull this up to +5V through a 3.3K resistor.  &#xA;You'll only find this pin on WDC's 65c02's anyway, not on those of other manufacturers.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Point is, 65C02 isn't always just a drop-in replacement.  You need to make sure all of the pins are grounded, pulled-up (or down), etc.  I don't have the A2 schematics in front of me...but make sure that all of the pins are taken care of even if there isn't a card in the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, this is another good reference on IRQ/NMI of the 65C02.  I highly recommend reading the entire &quot;primer&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wilsonminesco.com/6502primer/IRQconx.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wilsonminesco.com/6502primer/IRQconx.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2016-11-04T14:52:48.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1666" PostTypeId="1" CreationDate="2016-11-04T16:09:42.980" Score="16" ViewCount="3351" Body="&lt;p&gt;I am looking for a disassembler that supports Sega Genesis ROMs.  Ideally, any 68000 disassembler should be able to do this (IDA Pro supposedly does an amazing job but their demo version does not support the 68000).  Are there any dissemblers that specifically support Genesis games (take information from the ROM header, etc.)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm open to any suggestions, but bonus points if the program works on Mac OS.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2020-10-03T16:26:48.890" LastActivityDate="2021-05-17T10:10:10.750" Title="Sega Genesis/Mega Drive ROM Disassembler" Tags="&lt;motorola-68000&gt;&lt;sega-genesis&gt;&lt;software-recommendation&gt;&lt;disassembly&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1667" PostTypeId="1" AcceptedAnswerId="1678" CreationDate="2016-11-05T02:34:46.820" Score="9" ViewCount="1231" Body="&lt;p&gt;I have a &lt;code&gt;Macintosh SE/30&lt;/code&gt; that I'm trying to bring back to life.  When I power it on, I get the dreaded horizontal stripes.  Or, &lt;code&gt;zebra stripes&lt;/code&gt;.  Also called &lt;code&gt;Simasimac&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have re-seated all of the socketed chips.  Pulled the ROM SIMM out, cleaned it, etc.  Pulled the RAM out...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two standing issues that I can confirm.  One, the battery is dated 1989 and it only registers 1.0v.  It's normally a 3.6v battery.  So it's safe to assume it's just about dead.  :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, I believe most if not all of the capacitors have leaked.  There is a green &quot;fuzz&quot; all over the board.  I can provide pics if needed.  Just about every chip close to the surface mount caps are green and fuzzy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So at the very least I believe I will re-cap the board.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which brings me to my question.  According to some YouTube videos I've seen and this website (&lt;a href=&quot;http://lowendmac.com/brierley/09pb/simasimac.html&quot; rel=&quot;noreferrer&quot;&gt;http://lowendmac.com/brierley/09pb/simasimac.html&lt;/a&gt;), they suggest washing it with water.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That seems a little drastic but I have to admit, it sure would be faster.  I thought about even putting the board in the dishwasher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I seriously don't know if I could get a brush under each IC and clean off the fuzz.  And I really don't want to de-solder every chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I wash it?  If so, how?  Submerged into a hot bath of dish soap or should I put it in the dishwasher?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize that if I do wash it, I'm going to give it 7-10 DAYS before I attempt to power it on.  Plus, it would get a lot of outside air time so the breeze could help dry it out.  (been hot and dry around here).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suggestions appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2018-08-14T15:59:48.620" Title="To wash or not to wash a Mac SE/30" Tags="&lt;apple-macintosh&gt;&lt;restoration&gt;&lt;maintenance&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1668" PostTypeId="2" ParentId="1667" CreationDate="2016-11-05T04:50:39.230" Score="5" Body="&lt;p&gt;I recently cleaned my amiga 3000 main board using denatured alcohol and q-tips.  It took a few sessions over the course of a few days, but the board looks brand new.  Of course, you have to be careful around stickers or possible sharpie marker writing, or wax pencil marks...  but if you take your time the results can really be astounding.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2016-11-05T04:50:39.230" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1670" PostTypeId="1" AcceptedAnswerId="1675" CreationDate="2016-11-05T18:36:56.960" Score="14" ViewCount="1188" Body="&lt;p&gt;I remember reading an answer about a computer that, in the event of a power failure, would write the important parts of the memory to disk - using the momentum of the still-spinning drive to do so. This was an early form of hibernation and, if this worked how I am imagining, a far superior version to today's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I can't work out is how this could possibly work. Unless the drive contains a generator I see no way that the computer could have enough power to read the memory (unless it contained a backup battery, which I don't think was the case), although writing is still plausible if the drive's still running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can a computer hibernate &quot;using the momentum of the disk drive&quot;?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2016-11-06T14:20:11.813" LastActivityDate="2016-11-21T08:03:23.250" Title="How can a computer use the drive's momentum for emergency power?" Tags="&lt;hardware&gt;&lt;disk-drive&gt;&lt;power&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1671" PostTypeId="2" ParentId="1670" CreationDate="2016-11-05T19:30:31.990" Score="8" Body="&lt;p&gt;Any electrical motor can, with the right driver circuit, act as a generator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest case which does not need any outer circuit at all (it's all built in) is a shunted DC motor, it acts as a voltage source as long it is rotating. That one is called &lt;a href=&quot;https://en.wikipedia.org/wiki/Counter-electromotive_force&quot; rel=&quot;nofollow noreferrer&quot;&gt;Counter-Electromotive Force&lt;/a&gt;. How many volts depends on the motor characteristic and the speed. When the voltage applied from outside is higher than the internal voltage, it's working as a motor and it's torque in rotation direction is driving the load. When the outside voltage is smaller than the internal, it's working as a generator and the torque works in the opposite direction of the rotation direction – it's braking the load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At constant speed, there is an equilibirum between inside voltage and outside voltage and no current flows. (Of course, that only applies to a drive without losses.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a harddisk drive, things are more complicated as those usually are synchronous AC motors, but the principle stays the same.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2016-11-05T19:30:31.990" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="1672" PostTypeId="1" AcceptedAnswerId="1674" CreationDate="2016-11-06T19:31:09.187" Score="79" ViewCount="19279" Body="&lt;p&gt;In Super Mario Bros. for the NES and Famicom there exists a secret world, accessible by clipping through a wall to the first warp zone and entering the left-most pipe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This pipe will take you to level &quot; -1&quot;. In the NES release, this level is extremely similar to 7-2, except the pipe at the end will send you back to the beginning of the level. There is no way to escape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why does the Minus World exist, and why are all the level numbers negative?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.mariowiki.com/File:How2Get-1.gif&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/F3IIw.gif&quot; alt=&quot;In World 1-2 of Super Mario Bros., Fire Mario runs, lands on the front of the exit pipe, and quickly crouches and jumps to reach a peak where the exit pipe crosses the ceiling. At that moment, Mario stops crouching and is ejected through the wall to reach the warp zone and ducks into the pipe to the minus world. (Click for attribution of both the image and this alt-text.)&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.mariowiki.com/File:SMB_W36-1.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MY7nj.png&quot; alt=&quot;Level 1 of the Minus World.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2018-11-14T21:16:37.957" LastActivityDate="2020-02-14T00:10:20.820" Title="Why does the Minus World exist?" Tags="&lt;software&gt;&lt;nes&gt;&lt;glitches&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="1673" PostTypeId="2" ParentId="1672" CreationDate="2016-11-06T19:31:09.187" Score="51" Body="&lt;p&gt;Warp zones exist at the end of some levels. In order to access them, you have to break through blocks at the top of the level, then run along the top until a secret area becomes visible. In order to access the warp zone below you, you have to fall through a gap at the right-most side of the level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The loading of the right-most wall is what triggers the message to appear and the pipes to initialise. Before they initialise, they contain the data for the 4-2 standard warp zone, which has only one pipe (to level 5-1). The other pipes' warp data is filled in with the blank (air) tile, internally numbered with 36.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The initial &quot;uninitialised&quot; state of the pipes is not a problem; whenever you access the warp zone you have to walk far enough right to fall through the gap, and therefore load the right-most wall. That is, unless you clip through the wall. By doing this, you are preventing the pipe's warp location from changing from World 36 before you enter it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;World 36 was never programmed into the game. As a result the game tries to interpret &quot;garbage data&quot; when trying to load the level. For some reason, the data in question is mostly sections of other levels, so the level is still somewhat playable. However, as you have already found out, it is impossible to complete the first level in the NES version, as the pipe at the end simply leads back to the start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason the level number is displayed as &lt;code&gt;&amp;nbsp;-1&lt;/code&gt; at the top of the screen is due to the way tile data works. Tile 36 is the empty space, and so this is what the game draws instead of the world number, which is the reason for the appearance of &quot;no world&quot;. This is not coincidence; the very reason that the world you are warped to is World 36 is &lt;em&gt;because&lt;/em&gt; tile 36 is blank (see the second paragraph).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This effect is what causes the Minus World to appear to be &quot;negative&quot;. There isn't actually anything &quot;minus&quot; about it, but the absence of any visible world number makes the dash that separates the world number from the level number look like a negative sign.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Famicom Disk System version of the game, due to differences, level &lt;code&gt;&amp;nbsp;-1&lt;/code&gt; &lt;em&gt;is&lt;/em&gt; different (a 1-3 where you swim) and, importantly, completable. Level &lt;code&gt;&amp;nbsp;-2&lt;/code&gt; is identical to 7-3, and level &lt;code&gt;&amp;nbsp;-3&lt;/code&gt; is an underground-coloured version of 4-4 with neither Bowser nor a maze, and is full of flying bloopers. After completing the third and final level of the Minus World, you are taken back to the title screen.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="8293" LastEditDate="2018-03-25T08:21:51.007" LastActivityDate="2018-03-25T08:21:51.007" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="1674" PostTypeId="2" ParentId="1672" CreationDate="2016-11-07T04:05:44.943" Score="65" Body="&lt;p&gt;In Super Mario Bros, you can access &lt;a href=&quot;http://www.mariowiki.com/Warp_Zone&quot; rel=&quot;noreferrer&quot;&gt;warp zones&lt;/a&gt; in three areas of the game. There are two of these that are important for the minus world glitch: the one at the end of World 1-2 (following the exit pipe) and the one at the end of World 4-2 (also following the exit pipe).&lt;/p&gt;&#xA;&lt;p&gt;The first warp zone takes you normally to World 2, 3, and 4, while the second one only allows the player to World 5, however, the warp zones internally must have three locations.&lt;/p&gt;&#xA;&lt;p&gt;Internally, the game represents the second warp zone mentioned as World 36, World 5, and World 36 again. This can be verified by looking in a level editor, as shown here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UNJ0f.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UNJ0f.png&quot; alt=&quot;SMB Utility with an unedited copy of the Super Mario Bros ROM open to the 'Other Settings' screen showing the warp zone locations&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This was done, because the 36 (0x24)'s tile is a tile that takes the color of the current background (for all intents and purposes, transparent). The first nine represent the numerals 0 through 9, and the next 26 being capital letters (A-Z).&lt;/p&gt;&#xA;&lt;p&gt;This gives the appearance in World 4-2 of a warp zone with only one location, as shown in the screenshot below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nSFBS.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nSFBS.jpg&quot; alt=&quot;Screenshot of warp zone at the end of World 4-2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For unknown reasons, the World 4-2 warp zone is the &amp;quot;default&amp;quot; warp zone, and it's warp zone data is used if there is no other data loaded. Normally the game loads the data from the first warp zone when you walk to the end (scrolling the screen), but performing the wall glitch moves the character &lt;strong&gt;without&lt;/strong&gt; scrolling the screen. There is a &lt;em&gt;scroll stop&lt;/em&gt; tile which moving into the warp zone area activates, which refreshes the current warp zone data.&lt;/p&gt;&#xA;&lt;p&gt;Because when you perform the wall glitch, it moves the character without scrolling the screen, you never scroll far enough to activate the scroll stop which refreshes the warp zone data. Because of this, the default is then used, and because the pipe exists, you are free to swim in the never-ending ocean that is World 36-1.&lt;/p&gt;&#xA;&lt;p&gt;(It's worth noting that in the Famicom Disk System version of the game, you get an underwater version of 1-3/5-3 instead, followed by World 2-3/7-3, and then an underground version of 4-4.)&lt;/p&gt;&#xA;&lt;h1&gt;But aren't there only 8 worlds?&lt;/h1&gt;&#xA;&lt;p&gt;There are eight intentionally developed worlds, with four levels each. However, the game doesn't stop at World 8. In fact, theoretically there are a total of 256 valid worlds (0-255).&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Byte&quot; rel=&quot;noreferrer&quot;&gt;byte&lt;/a&gt; stores both the world counter and level counter. When a level is loaded, it &lt;a href=&quot;https://web.archive.org/web/20190325221426/http://1st.geocities.jp/bysonshome/smb1/index256a_2.html&quot; rel=&quot;noreferrer&quot;&gt;loads an area from an address&lt;/a&gt;. For worlds 0 and 9-255, it loads other data as the room offset. A Japanese fan site has documented &lt;a href=&quot;https://web.archive.org/web/20190329122403/http://1st.geocities.jp/bysonshome/smb1/index256w_2.html&quot; rel=&quot;noreferrer&quot;&gt;all of the worlds and levels&lt;/a&gt; and even describes &lt;a href=&quot;https://web.archive.org/web/20190325221429/http://1st.geocities.jp/bysonshome/smb1/index256w_1.html&quot; rel=&quot;noreferrer&quot;&gt;the mechanism on how Super Mario Bros. loads the levels&lt;/a&gt; (and why the worlds work they do).&lt;/p&gt;&#xA;&lt;p&gt;Worlds 2-2 and 7-2 are duplicates of each other, and it also happens to be World 36-1 in the NES version. Because no pipe data in ever loaded (it is loaded when 2-2 and 7-2 load I believe) it uses the default start position for the pipe which is the &lt;em&gt;beginning&lt;/em&gt; of the level.&lt;/p&gt;&#xA;&lt;h1&gt;Is there more to this?&lt;/h1&gt;&#xA;&lt;p&gt;Yes. In &lt;a href=&quot;https://www.youtube.com/watch?v=CeNjkBJSzig&quot; rel=&quot;noreferrer&quot;&gt;Season 3 Episode 35 of Pop Fiction&lt;/a&gt;, the team behind the internet show covered more of these &amp;quot;lost levels&amp;quot;, sourcing &lt;a href=&quot;http://legendsoflocalization.com/super-mario-bros/misc/#256-worlds&quot; rel=&quot;noreferrer&quot;&gt;Legends of Localization&lt;/a&gt;. They found that using cartridge hot swapping (and a form of memory corruption), one is able to access all 256 worlds.&lt;/p&gt;&#xA;&lt;p&gt;Most are unplayable and load garbage data, sometimes from RAM, but some are levels from the actual game, either with the correct tileset or not.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLhfRPU7iBncz3NS4uTvmdvixWFjENRRrT&quot; rel=&quot;noreferrer&quot;&gt;Videos of all 256 worlds can be found here.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Some Further Reading&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.mariowiki.com/Minus_World&quot; rel=&quot;noreferrer&quot;&gt;Minus World - Super Mario Wiki&lt;/a&gt;&lt;br /&gt;&#xA;&lt;a href=&quot;https://smcgamer.wordpress.com/2010/09/09/deconstructing-the-minus-world/&quot; rel=&quot;noreferrer&quot;&gt;Deconstructing the Minus World&lt;/a&gt;&lt;br /&gt;&#xA;&lt;a href=&quot;https://web.archive.org/web/20190325221439/http://1st.geocities.jp/bysonshome/smb1/index.html&quot; rel=&quot;noreferrer&quot;&gt;Marionaire&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3601" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-14T00:10:20.820" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="1675" PostTypeId="2" ParentId="1670" CreationDate="2016-11-07T10:09:23.033" Score="15" Body="&lt;p&gt;Any real attempt to use the momentum of the spinning disk to generate power would cause the disk to come to a halt very quickly.  In essence, this is the principle behing regenerative braking of electric vehicles.  Otherwise, you would have a perpetual motion machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there certainly were computers that used the momentum of a disk that was spinning to be able to write to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were various generations and configuations of the DEC PDP-11, both in terms of the CPU and the disk drives.  They had one common feature, that disk writes (and for that matter tape deck writes) were cached.  The disk controller held an amount of RAM, writes to the drive by the CPU went into this RAM buffer.  The buffer was written to the physical drive when it reached a defined threshold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The configuration of these drives and the threshold at which writing occured could be changed by the System Manager, or other privileged account.  In the process control uses, for which I used to use these computers, increasing the write frequency reduced the risk of data loss due to power failure at the expense of disk speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The drives also contained their own power supplies, with large capacitors.  If the power failed, an interrupt would cause the disk controller to write the contents of the RAM buffer to the drive before the drive span down and the memory was lost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is good information about the configuration of various generations of PDP-11 disks &lt;a href=&quot;http://www.pdp-11.nl/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was not a guaranteed fail-safe mechanism.  Sometimes data was lost.  However, the system did successfully prevent data loss most of the time.&lt;br&gt;&#xA;The later MicroVAX computers also had this system and would very rarely lose data on power loss - in my experience.&lt;br&gt;&#xA;(Of course, the VAX-FT could survive all sorts of failures - but that was a different animal.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system wasn't intended to hibernate the computer, in the way that a modern laptop can hibernate.  It just prevented the loss or corruption of open files, including the page file and swap file.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-11-07T10:09:23.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1676" PostTypeId="1" AcceptedAnswerId="1740" CreationDate="2016-11-07T22:31:15.417" Score="10" ViewCount="509" Body="&lt;p&gt;I have some old macs that I would like to remove their clock batteries so that I don't have to worry about them leaking and destroying logic boards. That being said I do want to operate them from time to time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been toying around with the idea of writing a system extension to address some of the issues that come from having no battery in a mac. In fact, I've already gotten started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to create a system extension that detects if the date is set to something prior to 2016, and pops up a dialog on startup asking for the time and date. I would install this on 68k machines from the SE onward. So I'm shooting for System 6 compatibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've purchased a copy of Inside Macintosh (volumes I through VI) on amazon and I've managed to write a program that opens a dialog asking for the time and date, which in turn sets the system clock and then quits. I could drop this in the startup folder but I REALLY want to do this as a system extension. I've managed to convert it to an INIT resource but when it runs on startup it just bombs and I have to disable it (bus error).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that a bus error happens when a pointer points to an address outside of the available memory. so this has something to do with the system environment during startup. Does anyone know what I should do to debug this?&lt;/p&gt;&#xA;" OwnerUserId="2187" LastEditorUserId="2187" LastEditDate="2016-11-08T02:23:29.343" LastActivityDate="2016-11-17T18:03:09.480" Title="Creating an System Extension (INIT) for classic mac os" Tags="&lt;apple-macintosh&gt;&lt;mac-os-classic&gt;&lt;programming&gt;&lt;operating-system&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1677" PostTypeId="2" ParentId="1676" CreationDate="2016-11-07T23:39:38.117" Score="3" Body="&lt;p&gt;The usual way to debug a program is with a debugger.  The usual low-level debugger for classic MacOS was &lt;a href=&quot;https://en.wikipedia.org/wiki/MacsBug&quot; rel=&quot;nofollow noreferrer&quot;&gt;MacsBug&lt;/a&gt;.  I've never tried using it to debug an extension during startup, but I see no reason why it wouldn't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the specific cause of your bug, I'm guessing you're trying to use the windowing system before it's been initialized.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-11-07T23:39:38.117" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1678" PostTypeId="2" ParentId="1667" CreationDate="2016-11-08T01:55:03.787" Score="6" Body="&lt;p&gt;Your capacitors are definitely bad, you should get that goo off of the board asap, however the damage may already be done. you might consider using a tooth brush while you're at it&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've washed boards and powered them up same day after drying them with a heat gun, but be careful, a heat gun will melt stuff if you leave it in one place for too long.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way to purge water from a board is to get a can of diethyl ether (starting fluid from an automotive store) and spray the board down with it, it will drive out the water and actually do some cleaning in the process, might be a candidate for getting under some of those chips. Be very careful with this though as ether is quite flammable, and can make you pass out if you breath it. I've also done this and powered up boards same-day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately if things are getting fuzzy it's been sitting there a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you desolder the old caps, I would suggest investing in some copper braid and some desoldering tools, the first (and only time) I attempted to recap a mac board I ripped a number of traces right off the board, when removing the caps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heres a reference on the capacitors that need replaced:&#xA;&lt;a href=&quot;http://maccaps.com/MacCaps/Capacitor_Reference/Entries/1989/1/19_Macintosh_SE_30.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://maccaps.com/MacCaps/Capacitor_Reference/Entries/1989/1/19_Macintosh_SE_30.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the guy that runs that website has reasonable rates for cleaning and new caps if you want to ship him your logic board.&lt;/p&gt;&#xA;" OwnerUserId="2187" LastEditorUserId="495" LastEditDate="2018-08-14T15:59:48.620" LastActivityDate="2018-08-14T15:59:48.620" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="1680" PostTypeId="2" ParentId="1670" CreationDate="2016-11-08T14:58:04.547" Score="9" Body="&lt;p&gt;The PDP-11 had a 'power fail' trap that would be invoked when a problem with AC power was detected by the power supply.  The system then had 2ms of runtime (powered by capacitors in the power supply, not disk momentum) to save volatile data.  Typically, this was limited to the contents of the CPU registers (including the program counter and stack pointer) and possibly certain device registers as well.  'Main' memory was not originally considered volatile because it used magnetic cores that would retain their content even without power, and in any event 2ms was not enough time to write more than a tiny fraction of main memory anywhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose it would also have been theoretically possible to write the CPU registers to a dedicated track on a drum memory device.  It could not have been a moving-head disk because head seeks take much longer than 2ms.  Also, an entire drum track would have been needed because 2ms is not even enough time to wait for the drum to rotate to a specific position; you would have required the ability to start writing at whatever position the drum happened to be in when the power fail trap occurred.  I do not know whether DEC produced any drum devices that had such a write-anywhere ability (or the ability to quickly determine where the drum was currently positioned, which is effectively the same thing).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any event, saving registers in core memory seems like a much better idea.  2ms is not a lot of time (I would guess fewer than 1000 instruction executions), and writing to core is much faster than writing to a drum.  Plus, you needed to have core memory anyway to make a power failure survivable, so there was little point in designing a solution that required you to have both core &lt;em&gt;and&lt;/em&gt; drum memory.  Far easier (and cheaper) to just allocate a few words of core to save your registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When power was restored, that same 'power fail' trap would be invoked again, and the power fail handler would then be able to re-initialize I/O devices, restore registers from wherever they had been saved, and resume normal operation.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2016-11-08T15:06:28.993" LastActivityDate="2016-11-08T15:06:28.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1681" PostTypeId="1" AcceptedAnswerId="1682" CreationDate="2016-11-08T15:25:43.763" Score="10" ViewCount="946" Body="&lt;p&gt;I am thinking about architectures like the 6502 (the stack is limited to 256 bytes -- hardly enough to evaluate any reasonably sized Lisp expression) or the PDP-7 and PDP-8, which stored the return address in the first word of the subroutine, so that subroutines could not call themselves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a well-known property of Lisp that it makes heavy use of recursive routines. For example in typical Lisps that I've seen, &lt;code&gt;eval&lt;/code&gt; calls &lt;code&gt;apply&lt;/code&gt;, which calls &lt;code&gt;eval&lt;/code&gt; again. It is easy to imagine how on a Z80 or x86 or something, a stack frame may contain all the pointers and other data you need. And each invocation of a function can have its own stack frame, as we all know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question how people used to implement Lisps on these old and unusual architectures.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-05-13T13:27:40.563" Title="How were Lisps usually implemented on architectures that has no stack or very small stacks?" Tags="&lt;lisp&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1682" PostTypeId="2" ParentId="1681" CreationDate="2016-11-08T16:12:26.203" Score="18" Body="&lt;p&gt;You are misinterpreting the nature of the Lisp stack.  The 256 byte hardware stack of the 6502 processor was not used for the large stacks required by Threaded Interpreted Languages (TILs) like Lisp and Forth.  As you say, 256 bytes is grossly inadequate for languages of this type.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The nature of Lisp is to act upon lists of data.  A function is merely data and itself sits in a list.  This Lisp stack lies within the main memory of the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the BBC Micro, where my experience of Lisp lies, each call to a function would result in a block of main memory being claimed.  This block would hold the return information necessary.  It could also hold variables (atoms and lists) declared within the function and could therefore vary in size.  The hardware stack was used internally by the language interpreter and the way in which it was used was not made accessible to the Lisp programmer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These blocks of memory were held in a linked list, which was interspersed with the definition of new functions, and of course, the lists of data upon which Lisp is based and which it is designed to manipulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, on the BBC Micro you would still run out of memory very quickly.  To have any sort of meaningful program you needed to have the optional second processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is some further information in related questions on SO:&lt;br&gt;&#xA;&lt;a href=&quot;https://stackoverflow.com/q/28128620/2870922&quot;&gt;https://stackoverflow.com/q/28128620/2870922&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://stackoverflow.com/q/6758308/2870922&quot;&gt;https://stackoverflow.com/q/6758308/2870922&lt;/a&gt;&lt;br&gt;&#xA;and further reading &lt;a href=&quot;https://xuanji.appspot.com/isicp/5-3-storage.html?_sm_au_=iVHD7v6vvq2N262k&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="-1" LastEditDate="2017-05-23T12:39:25.033" LastActivityDate="2016-11-09T09:39:10.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1683" PostTypeId="1" AcceptedAnswerId="16319" CreationDate="2016-11-08T19:55:08.343" Score="26" ViewCount="2414" Body="&lt;p&gt;If you've ever used an actual Atari 8-bit computer with either a cassette or disk drive, you would have noticed that it made a variety of &quot;beeping&quot; noises while accessing the devices. Specifically, loading a cassette made a &quot;cluuug&quot; sound repeatedly with small pauses and the disk drives made &quot;bee-dee-bee-dee-bee-dee&quot; type sounds while reading and &quot;plut-a-plut-a-plut-a&quot; type sounds while writing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it was good to have an audio indication as to what was going on, I never understood why the machine made the noise. It certainly wasn't the sound of the data coming off the device (since that'd presumably sound more like white noise), but the devices weren't as slow as (say) the Commodore 64 &amp;amp; 1541 where you could go have a cup of coffee in the other room and listen for when your game was finished loading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the reason?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think I've used an Atari emulator which reproduces these noises - I'd assume it is because the authors didn't see the need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, I seem to recall that different drive manufacturers (e.g. Atari VS Rana) may have had different sounds. Is my memory correct? If so, that would say something more about the sound being a product of the device rather than the Atari.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE 2017-01-18:&lt;/strong&gt; There are two answers to this question which suggest &quot;the sound of the data&quot; either leaking through or otherwise. I recently brought my Atari 410 deck back to life and have been loading converted CAS-to-WAV files via an iPod and a headphone jack-to-cassette adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My memory from years ago was that you only heard a mix of silence and the &quot;clooooooog&quot; sound when the tape was being loaded. I was a bit surprised that instead of silence I was hearing the high pitched screech of the cassette data while loading tapes with the iPod, but it dawned on me that its because these converted WAV files are being played in stereo. So instead of data on track 1 and a silent track 2, I'm hearing the data screech from the stereo conversion since the normally silent other track is passed through to the TV speakers (as it would have been used for loading music, instructions, etc). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what does this mean? You normally did NOT hear the data screech of a cassette, only the &quot;cluuuuug&quot; sound. When does that sound get made? If we assume the carrier signal (or '0') is 5327Hz and the &quot;mark&quot; (or '1') is 3995Hz, the sound only gets made when it detects a data stream (i.e. a mixture of 0's and 1's), though I suspect it is only making the sound when it detects a &quot;mark&quot; but perhaps rounded off a bit since it isn't as fine grained as I hear from the data stream.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that being said, it doesn't answer the disk drive noise side of the question. Perhaps it is just simply more of &quot;data packet being received over SIO&quot; indication sound?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2017-01-18T17:50:48.250" LastActivityDate="2021-02-01T08:08:47.917" Title="Why did the Atari 8-bit computers make beeping noises while accessing the disk and cassette drives?" Tags="&lt;atari&gt;&lt;disk-drive&gt;&lt;cassette-tape&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1684" PostTypeId="1" AcceptedAnswerId="1687" CreationDate="2016-11-08T21:42:02.797" Score="8" ViewCount="319" Body="&lt;p&gt;The Unibus was an innovative I/O system used by DEC PDP-11 machines. A device would choose some memory addresses to respond to, register an interrupt vector, then communicate with software that was compatible with it. This allowed the computer to be very flexible with what it could be used for, a little like USB today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I wanted to create a Unibus compatible device today (e.g. an Ethernet adapter that could &quot;talk&quot; to a web browser), I would need knowledge of the interface to create. According to &lt;a href=&quot;//en.wikipedia.org/wiki/PDP-11#No_dedicated_I.2FO_instructions&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;, DEC &quot;openly published the Unibus specification&quot;, so this information should still exist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What signals and data would a hardware driver need to send to register as a minimal Unibus device?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2016-11-09T07:33:28.957" LastActivityDate="2016-11-09T17:39:00.627" Title="How do I make a Unibus device?" Tags="&lt;driver&gt;&lt;pdp-11&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1685" PostTypeId="2" ParentId="1681" CreationDate="2016-11-09T06:43:22.843" Score="7" Body="&lt;p&gt;For the &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-1&lt;/a&gt;, a scanned and OCR'd (so you can cut &amp;amp; paste) &lt;a href=&quot;http://archive.computerhistory.org/resources/text/DEC/pdp-1/DEC.pdp_1.1964.102650371.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;listing&lt;/a&gt; of the LISP interpreter is available. This was actually the first LISP implementation, IIRC. The PDP-1 doesn't have any hardware stack; subroutine calls (&lt;a href=&quot;http://www.masswerk.at/rc2016/10/pdp1-instructions.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;jsp&lt;/a&gt;) store the return address in AC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the LISP call stack (&quot;push down list&quot;) is implemented in software, using the pointer &lt;code&gt;pdl&lt;/code&gt; and the routine &lt;code&gt;pdw&lt;/code&gt; to &quot;push down (a) word&quot;.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2019-05-13T13:27:40.563" LastActivityDate="2019-05-13T13:27:40.563" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="1686" PostTypeId="2" ParentId="1683" CreationDate="2016-11-09T11:38:59.240" Score="5" Body="&lt;p&gt;For the tape it's mostly leakage from the other stereo track. Data is recorded on one track (in blocks) and the other track is output to the TV audio. This was intended to allow software to have an audio track (think of educational tapes)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll check tonight to see how bad it is on some pre-recorded stuff on the Atari 400. I've got a set of &quot;learn french cassettes&quot; in an recent ebay purchase so I'll see if it's as obvious with the other track recorded onto.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2016-11-09T11:38:59.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1687" PostTypeId="2" ParentId="1684" CreationDate="2016-11-09T17:27:35.753" Score="8" Body="&lt;p&gt;The simplest Unibus card is the G727 Grant Continuity Card, which does nothing except forward certain daisy-chained bus signals from one slot to the next.  You can see a picture of one on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Unibus&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia Unibus page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But a Grant Continuity Card is arguably not really a &quot;device&quot;.  I think the simplest device would be a 1-word ROM.  Still pretty useless but at least it counts as a device.  It would be straightforward to extend that to a larger ROM size (something between 256 and 4096 16-bit words).  The smaller ROM size would be good for a bootstrap card containing instructions to boot from an external device (tape or disk), while the larger size might be good for something like a ROM-based operating system or resident monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A ROM device would need to respond to Data-In requests on the Unibus, but not much else.  It would not need to be a busmaster (i.e. it would not do DMA) so you wouldn't need to worry about bus grant lines (aside from forwarding them just like a grant continuity card would do).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way a Data-In request works is basically this:&lt;br&gt;&#xA;1. processor puts an address on the address lines of the Unibus, sets the C0 and C1 lines on the bus to 0, then asserts MSYN.&lt;br&gt;&#xA;2. when your device sees MSYN asserted with C0=0 and C1=0 it recognizes that this is a Data-In request.  if the address on the address line is one that this device should recognize, then it retrieves the requested word and puts it on the data lines of the bus.  the device then asserts SSYN.&lt;br&gt;&#xA;3. when the processor sees SSYN asserted, it reads the requested data from the bus.  when it has finished reading from the bus, it deasserts MSYN.&lt;br&gt;&#xA;4. when your device seems MSYN deasserted, it deasserts SSYN.  The Data-In bus cycle has now been completed and the bus is available for the next request.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2016-11-09T17:39:00.627" LastActivityDate="2016-11-09T17:39:00.627" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1689" PostTypeId="5" CreationDate="2016-11-10T10:33:53.217" Score="0" Body="&lt;p&gt;The PDP-8 minicomputer from the Digital Equipment Corporation (DEC) was a 12-bit machine introduced in 1965.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please use this tag specifically for the PDP-8.  Other machines in the range have their own tags.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T10:33:53.217" LastActivityDate="2016-11-10T10:33:53.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1690" PostTypeId="4" CreationDate="2016-11-10T10:33:53.217" Score="0" Body="For questions regarding the DEC PDP-8 minicomputer." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T10:33:53.217" LastActivityDate="2016-11-10T10:33:53.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1691" PostTypeId="5" CreationDate="2016-11-10T10:36:15.193" Score="0" Body="&lt;p&gt;The PDP-11 minicomputer from the Digital Equipment Corporation (DEC) was a 16-bit machine introduced in 1970 and produced, in various generations, until the 1990s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please use this tag specifically for the PDP-11.  Other machines in the range have their own tags.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T10:36:15.193" LastActivityDate="2016-11-10T10:36:15.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1692" PostTypeId="4" CreationDate="2016-11-10T10:36:15.193" Score="0" Body="For questions regarding the DEC PDP-11 minicomputer." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T10:36:15.193" LastActivityDate="2016-11-10T10:36:15.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1693" PostTypeId="5" CreationDate="2016-11-10T10:40:34.163" Score="0" Body="&lt;p&gt;The Lisp computer language was introduced in 1958.  Originally introduced on an IBM processor, some of the language's terminology retains the terminology of that processor (e.g. the CAR &amp;amp; CDR elements of a list)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lisp in various forms, and derivatives such as Clojure, is still in use today.  Use this tag for questions regarding Lisp on retrocomputers.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T10:40:34.163" LastActivityDate="2016-11-10T10:40:34.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1694" PostTypeId="4" CreationDate="2016-11-10T10:40:34.163" Score="0" Body="For questions regarding the LISP (List Processing) computer language, as implemented on retrocomputers." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T10:40:34.163" LastActivityDate="2016-11-10T10:40:34.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1695" PostTypeId="5" CreationDate="2016-11-10T10:46:26.250" Score="0" Body="&lt;p&gt;For questions regarding the process of disassembling raw machine code into readable assembly language, including the use of tools to perform the task.&lt;/p&gt;&#xA;&lt;p&gt;Consider also adding a tag for the relevant microprocessor(s).&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-21T15:20:05.940" LastActivityDate="2021-02-21T15:20:05.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1696" PostTypeId="4" CreationDate="2016-11-10T10:46:26.250" Score="0" Body="Conversion of machine code into human-readable assembly code. Use with the relevant processor’s tag as appropriate." OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-21T15:20:05.940" LastActivityDate="2021-02-21T15:20:05.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1697" PostTypeId="5" CreationDate="2016-11-10T10:54:43.993" Score="0" Body="&lt;p&gt;For questions regarding the ENIAC (Electronic Numerical Integrator and Computer) machine.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the first general purpose electronic computers, created in 1946.  ENIAC was developed by the United States military, initially for calculating artillery trajectories.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T10:54:43.993" LastActivityDate="2016-11-10T10:54:43.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1698" PostTypeId="4" CreationDate="2016-11-10T10:54:43.993" Score="0" Body="For questions regarding the ENIAC (Electronic Numerical Integrator and Computer) machine created in 1946." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T10:54:43.993" LastActivityDate="2016-11-10T10:54:43.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1699" PostTypeId="5" CreationDate="2016-11-10T11:01:03.303" Score="0" Body="&lt;p&gt;&quot;Game and Watch&quot; was a range of small hand-held video game units manufactured by Nintendo between 1980 and 1991.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each model ran one single game.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T11:01:03.303" LastActivityDate="2016-11-10T11:01:03.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1700" PostTypeId="4" CreationDate="2016-11-10T11:01:03.303" Score="0" Body="For questions regarding any of the Nintendo &quot;Game and Watch&quot; range of products." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T11:01:03.303" LastActivityDate="2016-11-10T11:01:03.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1701" PostTypeId="5" CreationDate="2016-11-10T11:05:58.173" Score="0" Body="&lt;p&gt;The Atari XL was an 8-bit, 64kb RAM microcomputer introduced in 1983.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please use this tag for questions specifically for the XL.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T11:05:58.173" LastActivityDate="2016-11-10T11:05:58.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1702" PostTypeId="4" CreationDate="2016-11-10T11:05:58.173" Score="0" Body="For questions regarding the XL 8-bit microcomputers from Atari." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T11:05:58.173" LastActivityDate="2016-11-10T11:05:58.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1703" PostTypeId="5" CreationDate="2016-11-10T11:10:59.547" Score="0" Body="&lt;p&gt;The Shugart Associates Systems Interface (SASI) (pronounced &lt;em&gt;sassy&lt;/em&gt;) was an 8-bit parallel interface standard primarily used to control disk drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interface was used in the Apple ][, amongst others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SASI was superseded by &lt;a href=&quot;/questions/tagged/scsi&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;scsi&amp;#39;&quot; rel=&quot;tag&quot;&gt;scsi&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T11:10:59.547" LastActivityDate="2016-11-10T11:10:59.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1704" PostTypeId="4" CreationDate="2016-11-10T11:10:59.547" Score="0" Body="For questions related to the SASI interface." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T11:10:59.547" LastActivityDate="2016-11-10T11:10:59.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1705" PostTypeId="5" CreationDate="2016-11-10T11:18:21.107" Score="0" Body="&lt;p&gt;The Amiga 1200 was a version of the Commodore Amiga range.  It used the Motorola 68000 processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 1200 was introduced in 1992.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please use this tag specifically for the Amiga 1200.  Other machines in the Amiga range have their own tags.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T11:18:21.107" LastActivityDate="2016-11-10T11:18:21.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1706" PostTypeId="4" CreationDate="2016-11-10T11:18:21.107" Score="0" Body="For questions regarding the Commodore Amiga 1200 microcomputer." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T11:18:21.107" LastActivityDate="2016-11-10T11:18:21.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1707" PostTypeId="5" CreationDate="2016-11-10T11:24:45.643" Score="0" Body="&lt;p&gt;The Amiga 2000 was a version of the Commodore Amiga range.  It used the Motorola 68000 processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2000 was introduced in 1987.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please use this tag specifically for the Amiga 2000.  Other machines in the Amiga range have their own tags.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T11:24:45.643" LastActivityDate="2016-11-10T11:24:45.643" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1708" PostTypeId="4" CreationDate="2016-11-10T11:24:45.643" Score="0" Body="For questions regarding the Commodore Amiga 2000 microcomputer." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-10T11:24:45.643" LastActivityDate="2016-11-10T11:24:45.643" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1709" PostTypeId="1" CreationDate="2016-11-12T02:13:54.400" Score="9" ViewCount="1199" Body="&lt;p&gt;I've never worked on a Atari 2600 before. The first time I did, I wasn't getting anything on my old box TV. Not being able to do much at the time, I decided to check the voltage. The output voltage is 9v DC, but I was getting 15v DC. Yesterday I got my hands on another Atari 2600, so I decided to check the voltage again... it's also 15v DC. Is this the actual voltage, or do both power supplies have a short (or something)?&lt;/p&gt;&#xA;" OwnerUserId="3646" LastEditorUserId="278" LastEditDate="2016-11-12T09:06:34.640" LastActivityDate="2016-11-13T03:00:39.090" Title="Atari 2600 high voltage output" Tags="&lt;atari-2600&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1710" PostTypeId="2" ParentId="1709" CreationDate="2016-11-12T02:46:52.790" Score="16" Body="&lt;p&gt;The Atari 2600 has an unregulated transformer.  Transformers of this type only produce their design voltage under load; if you're just connecting a voltmeter between the output wires, it's going to read significantly higher than the output rating.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-11-12T02:46:52.790" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1711" PostTypeId="1" AcceptedAnswerId="11627" CreationDate="2016-11-12T15:57:37.373" Score="31" ViewCount="1237" Body="&lt;p&gt;Some classic vector arcade games, such as Battlezone and Red Baron, were based on the 6502 CPU.  The processor wasn't fast enough to do the 3D computations, so a co-processor commonly known as the &quot;math box&quot; was used for vertex transformations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How was the Math Box programmed from the 6502?  What API did it provide?  What were the performance limitations?&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2020-05-15T19:54:28.740" Title="What API did the &quot;math box&quot; provide?" Tags="&lt;arcade&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1712" PostTypeId="2" ParentId="1711" CreationDate="2016-11-12T18:32:58.567" Score="19" Body="&lt;p&gt;The 6502 accesses the Atari Math Box, via a pre-defined memory map and address decoder,&lt;sup&gt;&lt;a href=&quot;http://www.eecs.ucf.edu/seniordesign/sp2011su2011/g03/Group%203%20Conference%20paper.pdf&quot; rel=&quot;noreferrer&quot; title=&quot;Vic Vector: FPGA Game Emulator based on *Tempest* by Atari (c)&quot;&gt;[1§I]&lt;/a&gt;&lt;/sup&gt; as a memory-mapped I/O device.&lt;sup&gt;&lt;a href=&quot;http://www.eecs.ucf.edu/seniordesign/sp2011su2011/g03/Group%203%20Conference%20paper.pdf&quot; rel=&quot;noreferrer&quot; title=&quot;Vic Vector: FPGA Game Emulator based on *Tempest* by Atari (c)&quot;&gt;[1§IV]&lt;/a&gt;&lt;/sup&gt; The top four bits of the External Address Bus are sent to the address decoder to determine whether to activate the high-score module, the POKEY module or the Math Box for a given operation.&lt;sup&gt;&lt;a href=&quot;http://www.eecs.ucf.edu/seniordesign/sp2011su2011/g03/Group%203%20Conference%20paper.pdf&quot; rel=&quot;noreferrer&quot; title=&quot;Vic Vector: FPGA Game Emulator based on *Tempest* by Atari (c)&quot;&gt;[1§IV]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bottom five bits of the External Address Bus are sent to ROM A1 in the Math Box, which calls one of 32 instructions accordingly.&lt;sup&gt;&lt;a href=&quot;http://www.eecs.ucf.edu/seniordesign/sp2011su2011/g03/Group%203%20Conference%20paper.pdf&quot; rel=&quot;noreferrer&quot; title=&quot;Vic Vector: FPGA Game Emulator based on *Tempest* by Atari (c)&quot;&gt;[1§IV.A]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#87-297]&lt;/a&gt;&lt;/sup&gt; The Math Box communicates on the bi-directional External Data Bus,&lt;sup&gt;&lt;a href=&quot;http://www.eecs.ucf.edu/seniordesign/sp2011su2011/g03/Group%203%20Conference%20paper.pdf&quot; rel=&quot;noreferrer&quot; title=&quot;Vic Vector: FPGA Game Emulator based on *Tempest* by Atari (c)&quot;&gt;[1§Fig. 4]&lt;/a&gt;&lt;/sup&gt; where the Math Box's four AM2091 chips' input and output lines are connected.&lt;sup&gt;&lt;a href=&quot;http://www.eecs.ucf.edu/seniordesign/sp2011su2011/g03/Group%203%20Conference%20paper.pdf&quot; rel=&quot;noreferrer&quot; title=&quot;Vic Vector: FPGA Game Emulator based on *Tempest* by Atari (c)&quot;&gt;[1§IV.B]&lt;/a&gt;&lt;/sup&gt; There are 16 registers,&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#14-29]&lt;/a&gt;&lt;/sup&gt; which are 16-bits each.&lt;sup&gt;[Inferred from &lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2]&lt;/a&gt;]&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Writing to memory addresses &lt;code&gt;6080&lt;/code&gt; -&lt;code&gt;609F&lt;/code&gt; (inclusive) starts the Math Box clock and runs the specified routine.&lt;sup&gt;&lt;a href=&quot;http://www.eecs.ucf.edu/seniordesign/sp2011su2011/g03/Group%203%20Conference%20paper.pdf&quot; rel=&quot;noreferrer&quot; title=&quot;Vic Vector: FPGA Game Emulator based on *Tempest* by Atari (c)&quot;&gt;[1§IV]&lt;/a&gt;&lt;/sup&gt; The lower five bits of the memory address will determine the lower five bits of the External Address Bus and thus the instruction that will be executed. This is the mapping between the five-bit instruction number and the instruction executed:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;0x00&lt;/code&gt;: Sets the low byte of register &lt;code&gt;0x00&lt;/code&gt; to input, then returns register &lt;code&gt;0x00&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#89]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x01&lt;/code&gt;: Sets the high byte of register &lt;code&gt;0x00&lt;/code&gt; to input, then returns register &lt;code&gt;0x00&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#90]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x02&lt;/code&gt;: Sets the low byte of register &lt;code&gt;0x01&lt;/code&gt; to input, then returns register &lt;code&gt;0x01&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#91]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x03&lt;/code&gt;: Sets the high byte of register &lt;code&gt;0x01&lt;/code&gt; to input, then returns register &lt;code&gt;0x01&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#92]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x04&lt;/code&gt;: Sets the low byte of register &lt;code&gt;0x02&lt;/code&gt; to input, then returns register &lt;code&gt;0x02&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#93]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x05&lt;/code&gt;: Sets the high byte of register &lt;code&gt;0x02&lt;/code&gt; to input, then returns register &lt;code&gt;0x02&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#94]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x06&lt;/code&gt;: Sets the low byte of register &lt;code&gt;0x03&lt;/code&gt; to input, then returns register &lt;code&gt;0x03&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#95]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x07&lt;/code&gt;: Sets the high byte of register &lt;code&gt;0x03&lt;/code&gt; to input, then returns register &lt;code&gt;0x03&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#96]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x08&lt;/code&gt;: Sets the low byte of register &lt;code&gt;0x04&lt;/code&gt; to input, then returns register &lt;code&gt;0x04&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#97]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x09&lt;/code&gt;: Sets the high byte of register &lt;code&gt;0x04&lt;/code&gt; to input, then returns register &lt;code&gt;0x04&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#98]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x0a&lt;/code&gt;: Sets the low byte of register &lt;code&gt;0x05&lt;/code&gt; to input, then returns register &lt;code&gt;0x05&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#100]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x0b&lt;/code&gt;: ?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x0c&lt;/code&gt;: Sets the low byte of register &lt;code&gt;0x06&lt;/code&gt; to input, then returns register &lt;code&gt;0x06&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#103]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x0d&lt;/code&gt;: Sets the low byte of register &lt;code&gt;0x0a&lt;/code&gt; to input, then returns register &lt;code&gt;0x0a&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#112]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x0e&lt;/code&gt;: Sets the high byte of register &lt;code&gt;0x0a&lt;/code&gt; to input, then returns register &lt;code&gt;0x0a&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#113]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x0f&lt;/code&gt;: Sets the low byte of register &lt;code&gt;0x0b&lt;/code&gt; to input, then returns register &lt;code&gt;0x0b&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#114]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x10&lt;/code&gt;: Sets the high byte of register &lt;code&gt;0x0b&lt;/code&gt; to input, then returns register &lt;code&gt;0x0b&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#115]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x11&lt;/code&gt;: ?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x12&lt;/code&gt;: ?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x13&lt;/code&gt;: ?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x14&lt;/code&gt;: ?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x15&lt;/code&gt;: Sets the low byte of register &lt;code&gt;0x07&lt;/code&gt; to input, then returns register &lt;code&gt;0x07&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#106]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x16&lt;/code&gt;: Sets the high byte of register &lt;code&gt;0x07&lt;/code&gt; to input, then returns register &lt;code&gt;0x07&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#107]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x17&lt;/code&gt;: Returns register &lt;code&gt;0x07&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#117]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x18&lt;/code&gt;: Returns register &lt;code&gt;0x09&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#119]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x19&lt;/code&gt;: Returns register &lt;code&gt;0x08&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#118]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x1a&lt;/code&gt;: Sets the low byte of register &lt;code&gt;0x08&lt;/code&gt; to input, then returns register &lt;code&gt;0x08&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#109]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x1b&lt;/code&gt;: Sets the high byte of register &lt;code&gt;0x08&lt;/code&gt; to input, then returns register &lt;code&gt;0x08&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#110]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x1c&lt;/code&gt;: Window test?&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#248-263]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x1d&lt;/code&gt;: ?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x1e&lt;/code&gt;: Set register &lt;code&gt;0x0d&lt;/code&gt; to max(register &lt;code&gt;0x02&lt;/code&gt;, register &lt;code&gt;0x03&lt;/code&gt;) and set register &lt;code&gt;0x0c&lt;/code&gt; to min(register &lt;code&gt;0x02&lt;/code&gt;, register &lt;code&gt;0x03&lt;/code&gt;), then increment register &lt;code&gt;0x0d&lt;/code&gt; by (&lt;code&gt;3/8&lt;/code&gt; times register &lt;code&gt;0x0c&lt;/code&gt;), then return register &lt;code&gt;0x0d&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#278-288]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;0x1f&lt;/code&gt;: Some sort of self-test or signature analysis?&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#290-294]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;No function loads the low byte of register &lt;code&gt;0x05&lt;/code&gt; without performing a computation.&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#101]&lt;/a&gt;&lt;/sup&gt; No function loads the high part of register &lt;code&gt;0x06&lt;/code&gt; &lt;em&gt;at all&lt;/em&gt;,&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2#104]&lt;/a&gt;&lt;/sup&gt; so it could be overwritten during certain functions. I assume that the input is one byte, because the MAME implementation's&lt;sup&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/ddb290d5f615019c33c42b8d94e5a5254cabcf33/src/mame/machine/mathbox.cpp&quot; rel=&quot;noreferrer&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; repeated bitshift-and-XOR makes more sense that way.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="576" LastEditDate="2019-07-10T12:54:30.433" LastActivityDate="2019-07-10T12:54:30.433" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1713" PostTypeId="1" CreationDate="2016-11-12T22:32:39.273" Score="6" ViewCount="203" Body="&lt;p&gt;I've an old 1999 Emachines Etower I want to restore. I have all the original parts except for the monitor. It just isn't a complete set without it. Does anybody know the specific model of that monitor. My computer is the much rarer beige color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I tried Emachines' website and I think it was an old Cathode Ray Tube Monitor.&lt;/p&gt;&#xA;" OwnerUserId="3647" LastEditorUserId="824" LastEditDate="2018-07-12T07:17:38.030" LastActivityDate="2018-07-12T07:17:38.030" Title="What is the model of the Emachines Etower 366i2's Monitor?" Tags="&lt;restoration&gt;&lt;crt-monitor&gt;" AnswerCount="0" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1714" PostTypeId="2" ParentId="1709" CreationDate="2016-11-13T03:00:39.090" Score="8" Body="&lt;p&gt;The design of the Atari 2600, and many other devices that use &quot;9-volt DC&quot; wall bricks, doesn't really care about receiving exactly 9 volts, subject to a few  constraints:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The voltage must be far enough about 5 volts to allow a cheap regulator circuit to convert it into 5 volts.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There is an upper limit which will cause essentially immediate damage--typically somewhere between 15-35 volts.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Heat dissipation in the regulator will be proportional to product of load current times the amount by which the input exceeds 5 volts.  A 13-volt supply will produce twice as much heat in the regulator as a 9-volt supply, but under conditions of light loading that won't be an issue.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The Atari 2600 draws a moderate amount of current itself, but cartridges draw additional current from the same supply, so total current draw may depend upon what cartridge is being used.  On the other hand, a typical unregulated &quot;9 volt&quot; supply will only produce voltages significantly above 9 volts under conditions of light loading when heat dissipation isn't likely to pose a problem. &lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-11-13T03:00:39.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1715" PostTypeId="2" ParentId="1625" CreationDate="2016-11-13T06:38:27.887" Score="3" Body="&lt;p&gt;I think &lt;a href=&quot;https://en.wikipedia.org/wiki/Magnetic-core_memory#Description&quot; rel=&quot;nofollow noreferrer&quot;&gt;core memory&lt;/a&gt; is what you are looking for. You may not think of it as a mechanical solution however it was. Core memory is electrically set and read, the read is destructive so part of the read initiated an automatic write if the bit was a 1. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Core retains its state after power loss through the mechanical position of the magnetic toroids. If at power up you didn't initialize the memory bank then the memory would still contain the last running state. If an application could run completely within core space, then after power restoration the application would continue operating, provided boot strapping of the system without initializing that portion of ram was possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen demonstrations of this phenomenon on PDP-8 systems where people built a best of everything system with large amounts of core memory, ran an application that displayed output on a screen and then removed power. If one particular switch on the primary chassis was not toggled, upon application of power the program would continue operation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the time of the power loss it is possible for to change the position of some of the bits with mechanical means so it wasn't completely fool proof. They could conceivably be set by hand when not powered, but you would have to paint the rings to tell the bit states apart.&lt;/p&gt;&#xA;" OwnerUserId="3648" LastEditorUserId="278" LastEditDate="2016-11-13T09:00:55.083" LastActivityDate="2016-11-13T09:00:55.083" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1716" PostTypeId="2" ParentId="1625" CreationDate="2016-11-13T09:05:20.937" Score="3" Body="&lt;p&gt;There are a number of possibilities, though most of them involve stretching the definition of &quot;computer&quot; somewhat:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Zuse &lt;a href=&quot;https://en.wikipedia.org/wiki/Z1_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z1&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Z2_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z2&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Z4_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z4&lt;/a&gt; computers used slotted metal strips as memory.  Of these, only the Z4 was Turing-complete.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Harvard_Mark_I&quot; rel=&quot;nofollow noreferrer&quot;&gt;Harvard Mark I&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Harvard_Mark_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mark II&lt;/a&gt;, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Z3_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zuse Z3&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/BARK&quot; rel=&quot;nofollow noreferrer&quot;&gt;BARK&lt;/a&gt; all used relays for storage, but only the Z3 was Turing-complete.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of these used read-only paper tape for storing their programs.  I've been unable to find examples of stored-program computers using mechanical means to store their programs, but if you stretch the definition of &quot;mechanical&quot; somewhat, &lt;a href=&quot;https://en.wikipedia.org/wiki/Delay_line_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;delay-line memory&lt;/a&gt; stored data as mechanical pulses in a medium, typically mercury, and was used in a number of stored-program computers.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-11-13T09:05:20.937" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1717" PostTypeId="1" CreationDate="2016-11-13T22:02:47.037" Score="5" ViewCount="665" Body="&lt;p&gt;I've got a Compaq Contura aero 4/33 laptop with original DOS system installed. As the HDD is old and dying, I've decided to copy the drive to a CF card on a CF/IDE adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After connecting the drive, according to diskutil and fdisk, I can see following partition table:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/dev/disk3 (external, physical):&#xA;   #:                       TYPE NAME                    SIZE       IDENTIFIER&#xA;   0:     FDisk_partition_scheme                        *256.5 MB   disk3&#xA;   1:                 DOS_FAT_16 NO NAME                 252.3 MB   disk3s1&#xA;   2:                       0x12                         3.2 MB     disk3s3&#xA;&#xA;sh-3.2# fdisk /dev/disk3&#xA;Disk: /dev/disk3    geometry: 994/8/63 [501073 sectors]&#xA;Signature: 0xAA55&#xA;     Starting       Ending &#xA;#: id  cyl  hd sec -  cyl  hd sec [     start -       size]&#xA;&#xA;*1: 06    9   0   1 -  719  10  63 [      6237 -     492723] DOS &amp;gt; 32MB  &#xA; 2: 00    0   0   0 -    0   0   0 [         0 -          0] unused      &#xA; 3: 12    0   1   1 -    8  10  63 [        63 -       6174] Compaq Diag.&#xA; 4: 00    0   0   0 -    0   0   0 [         0 -          0] unused    &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've made the image by dd'ing the entire drive and putting it straight on the CF disk (dd if=/dev/disk3 of=./image.bin; dd if=./image.bin of=/dev/disk4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fdisk'ing the CF card (1GB Kingston) shows a following partition table:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Disk: /dev/disk4    geometry: 967/32/63 [1949472 sectors]&#xA;Signature: 0xAA55&#xA;     Starting       Ending&#xA; #: id  cyl  hd sec -  cyl  hd sec [     start -       size]&#xA;*1: 06    9   0   1 -  719  10  63 [      6237 -     492723] DOS &amp;gt; 32MB  &#xA; 2: 00    0   0   0 -    0   0   0 [         0 -          0] unused      &#xA; 3: 12    0   1   1 -    8  10  63 [        63 -       6174] Compaq Diag.&#xA; 4: 00    0   0   0 -    0   0   0 [         0 -          0] unused    &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, laptop does not detect any operating system. When I start it, only a &quot;Missing operating system&quot; message is shown. &lt;a href=&quot;https://i.stack.imgur.com/nGghE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nGghE.jpg&quot; alt=&quot;Screenshot- Missing Operating System&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, when I press F10 during boot, it seems to boot up DOS with the Compaq Diagnostics tools &lt;a href=&quot;https://i.stack.imgur.com/XGI4F.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XGI4F.jpg&quot; alt=&quot;Screenshot- Compaq Diagnostics&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trying to change Cylinders/Heads/Sectors values in this diagnostics tools to the ones provided by fdisk (geometry: 967/32/63) changes nothing, still missing operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, how can I move entire os to a new drive?&lt;/p&gt;&#xA;" OwnerUserId="3651" LastEditorUserId="276" LastEditDate="2016-11-14T08:56:06.913" LastActivityDate="2016-11-14T19:28:50.637" Title="Compaq Contura Aero 4/33C - moving data to CF/IDE disk - No operating system detected" Tags="&lt;ms-dos&gt;&lt;disk-drive&gt;&lt;disk-image&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1718" PostTypeId="1" CreationDate="2016-11-13T23:18:03.267" Score="13" ViewCount="714" Body="&lt;p&gt;While early microcomputers were often 4- or 8-bit designs, with larger word sizes coming later, that pattern did not hold for their predecessors.  None of the earliest computers used a word size that was anywhere near that small.  Even computers which performed addition one bit at a time (e.g. Anastov's engine) still grouped bits into rather large words.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect part of the reason machines used to use such large words was that the word size used to impose an upper limit on the largest number a machine could process without a huge (greater than 4x) loss in efficiency.  On a machine with a 16-bit word size, adding together 1000 numbers which could each be anywhere from -32767 to +32767 would require a huge amount of work for each number.  If the machine didn't have an efficient right-shift operator, the computation would likely require 2-3 conditional branches&#xA;for each value to be added.  Hugely expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On microcomputers, however, there is usually a &quot;carry&quot; flag, and in many&#xA;cases there will also be &quot;add-with-carry&quot; instructions which are no more&#xA;expensive than &quot;ordinary&quot; add instructions [in some cases, including the&#xA;4004, addition without carry is more expensive than addition with].  Thus,&#xA;while a 32-bit computer would have been limited to performing 32-bit&#xA;math efficiently, an 8-bit microprocessor could perform math efficiently&#xA;on 8, 16, 24, 32 40, 48, etc. bit quantities with a cost proportional to&#xA;the integer width (for addition or subtraction) or the product of the&#xA;source operands' widths (for multiplication).  Since most operations won't&#xA;need 32-bit quantities, using a smaller word size reduces hardware&#xA;requirements without impacting efficiency of the dominant use cases, while still keeping the ability to perform longer operations when needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When did the carry flag originate?  The Wiki page on the carry flag indicates it was present on the 4004 (apparent from its instruction set), but that hardly implies it was the first machine to use one.  Did other kinds of computers start supporting multi-word arithmetic before the 4004?&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2019-03-06T22:27:24.647" LastActivityDate="2019-03-06T22:27:24.647" Title="What computer first facilitated multi-precision arithmetic" Tags="&lt;hardware&gt;" AnswerCount="5" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="1719" PostTypeId="2" ParentId="1718" CreationDate="2016-11-14T04:14:28.260" Score="13" Body="&lt;p&gt;Babbage's &lt;a href=&quot;http://www.fourmilab.ch/babbage/lpae.html#multiplePrecision&quot; rel=&quot;noreferrer&quot;&gt;analytic engine&lt;/a&gt; was designed to do arbitrary-precision aritmetic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For multiplication, two 50-digit inputs produced a 100-digit output, with the lower 50 digits on the Egress Axis and the upper 50 on the Primed Egress Axis (this is comparable to how integer multiplication is handled in modern computers).  Division, conversely, uses a 100-digit input on the Input Axis and Primed Input Axis to produce a quotient on the Primed Egress Axis and the remainder on the Egress Axis.  Addition and subtraction set the &quot;run-up lever&quot;, comparable to a combined carry and sign flag on modern computers, which could be used to control the conditional-branch instructions.  Babbage outlined how this functionality could be used to perform arbitrary-precision arithmetic.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-11-14T04:14:28.260" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1720" PostTypeId="2" ParentId="1717" CreationDate="2016-11-14T13:20:52.627" Score="2" Body="&lt;p&gt;Because these drives have different geometries and multiple partitions, you can't dd the whole thing in one pass and expect everything to work.  In particular, your DOS partitition which was located at cylinder 9, track/head 0, sector 1 on the old drive, is now located somewhere different on the new drive (which has 4 times as many tracks per cylinder as the old one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, dd does not copy cylinder x, track y, sector z to cylinder x, track/head y, sector z -- it copies logical block n to logical block n, and if n on one drive is a different CHS value than the same n on another drive, that's none of dd's business. (when I say dd here it's really the Linux kernel, but same outcome).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will have a better result if you do the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;see what partitions are on the old disk.&lt;/li&gt;&#xA;&lt;li&gt;make partitions on the new disk that match the old ones.&lt;/li&gt;&#xA;&lt;li&gt;dd each partition separately (e.g. &lt;code&gt;dd if=/dev/disk3s1 of=/dev/disk4s1&lt;/code&gt;, then &lt;code&gt;dd if=/dev/disk3s3 of=/dev/disk4s3&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Using a single dd pass &lt;em&gt;does&lt;/em&gt; work when your disk has only one partition which starts on the first track (or in the first cylinder, if both drives have the same number of sectors per track, e.g. 63).  It also works when both drives have the same number of tracks and sectors per cylinder.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="278" LastEditDate="2016-11-14T19:28:50.637" LastActivityDate="2016-11-14T19:28:50.637" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1721" PostTypeId="2" ParentId="605" CreationDate="2016-11-14T14:21:08.060" Score="4" Body="&lt;p&gt;You should try chairwpz, if you didn't already. It manifests as as a decent toolchain for linux/MacOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/cahirwpz/amigaos-cross-toolchain&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/cahirwpz/amigaos-cross-toolchain&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3422" LastActivityDate="2016-11-14T14:21:08.060" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1722" PostTypeId="2" ParentId="1717" CreationDate="2016-11-14T15:11:07.053" Score="1" Body="&lt;p&gt;Like Ken Gober said, you can't expect to clone drives with different geometries this easily :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also you should make sure the BIOS recognizes the drive properly. If it's an early revision it might be limited by the 504 MB barrier (1024/16/63). Your 1GB CF exceeds those (967/&lt;strong&gt;32&lt;/strong&gt;/63). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If in doubt you can use the latest BIOS (sp1992) which allows for drives up to 8.4GB without any software trick. I found this &lt;a href=&quot;http://h20565.www2.hp.com/hpsc/swd/public/detail?sp4ts.oid=91809&amp;amp;swItemId=PSG_I8062_21223&amp;amp;swEnvOid=139#tab1&quot; rel=&quot;nofollow noreferrer&quot;&gt;update at HP's website&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="271" LastActivityDate="2016-11-14T15:11:07.053" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1723" PostTypeId="2" ParentId="914" CreationDate="2016-11-14T15:19:41.733" Score="8" Body="&lt;p&gt;The Windows 95 installation happens in two phases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming you are installing from scratch the first phase runs under a stripped down version of Windows 3.x which runs under the DOS environment you (or the autoexec.bat on your boot media) launched the installer from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system then reboots and the second phase runs under the newly installed Windows 95 system.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;There are three main causes of failure to find files from the CD during the second phase of the install.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The CD was ejected prior to the first reboot and has not been re-inserted. In this case simply re-insert the CD.&lt;/li&gt;&#xA;&lt;li&gt;The drive letter for the CD drive has changed between the first and second installation phases. In this case you can simply edit the drive letter. Unfortunately you will have to guess what the new drive letter will be (&lt;code&gt;D:&lt;/code&gt; is very likely) and the change is not sticky, so you will have to edit it multiple times.&lt;/li&gt;&#xA;&lt;li&gt;The driver for the CD drive has not loaded. As far as I can tell there is no way to fix this from inside the installer. You could possibly deal with it by rebooting the system and modifying &lt;code&gt;config.sys&lt;/code&gt;/&lt;code&gt;autoexec.bat&lt;/code&gt; to load a real-mode driver for your CD drive.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;All of these problems can be avoided by copying the &lt;code&gt;WIN95&lt;/code&gt; directory from the CD to the C: drive and launching the installer from there rather than running it from the CD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ignore the disk numbers; that is a red herring. The &lt;code&gt;WIN95&lt;/code&gt; directory on the CD is equivalent to the full set of installation floppies.&lt;/p&gt;&#xA;" OwnerUserId="499" LastEditorUserId="357" LastEditDate="2016-11-22T10:32:25.533" LastActivityDate="2016-11-22T10:32:25.533" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1724" PostTypeId="2" ParentId="1625" CreationDate="2016-11-14T22:20:18.737" Score="8" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Plugboard&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Removable&lt;/em&gt; plugboards&lt;/a&gt; were a common form of read-only memory which I think fits the criteria.  ENIAC plugboards were not removable, but later computers used low cost removable ones.  They were adapted from the plugboards used for &lt;a href=&quot;https://en.wikipedia.org/wiki/Unit_record_equipment&quot; rel=&quot;noreferrer&quot;&gt;unit record equipment&lt;/a&gt;, which were simple frameworks for holding programming wires.  An installation would have many of them &quot;offline&quot;, each holding a program or part of a program.  For a particular program run, the appropriate board(s) would be slipped into the machine and clamped against an array of contacts of the machine.&lt;/p&gt;&#xA;" OwnerUserId="3644" LastActivityDate="2016-11-14T22:20:18.737" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1726" PostTypeId="1" CreationDate="2016-11-15T22:38:36.930" Score="7" ViewCount="1074" Body="&lt;p&gt;I am trying to install &quot;Kid Pix Deluxe 4&quot; on Mac OS 9 using SheepShaver on Ubuntu 16.04.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A problem I am having is that when I try to install it, I get an error saying that I don't have enough memory. So I made a hard disk file with 4.8 GB on it and added it to SheepShaver, but when I try to select it when I am installing Kid Pix, it gives me the same error, saying 'Not enough room on OS9 to install'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using the OS9 image and the New World PPC ROM from Redundant Robot.&lt;/p&gt;&#xA;" OwnerUserId="3659" LastEditorDisplayName="user12" LastEditDate="2017-01-17T16:53:21.777" LastActivityDate="2017-02-18T17:44:04.410" Title="SheepShaver failing to install application; Not Enough Memory" Tags="&lt;emulation&gt;&lt;mac-os-classic&gt;&lt;sheepshaver&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1727" PostTypeId="2" ParentId="1726" CreationDate="2016-11-16T02:23:05.040" Score="2" Body="&lt;p&gt;When it says, you've not enough memory, it is referring to RAM. For all of my virtual machines, I set the RAM to half of what is actually on my computer. I have a computer with 4GB of RAM. Even when I'm emulating Windows 3.1 and Tiny Core Linux, I use 2GB RAM for good measure. I suggest that if you use a computer for such, it should have at least 1GB of RAM.&lt;/p&gt;&#xA;" OwnerUserId="3647" LastEditorUserId="621" LastEditDate="2016-11-16T03:31:15.357" LastActivityDate="2016-11-16T03:31:15.357" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="1728" PostTypeId="1" AcceptedAnswerId="2329" CreationDate="2016-11-16T03:45:27.760" Score="10" ViewCount="6223" Body="&lt;p&gt;The Supercard is a flash cart for the Game Boy advance which can play ROMs and other files off of assorted flash memory.  I recently found my Supercard SD and Superkey for NDS, which acts as a Passcard/Nopass device (allow DS and ROMs to boot from the GBA slot).  I also remember that in order to run any ROMs from the Supercard on the DS itself, you needed to &quot;patch&quot; them with a special tool made by Supercard.  It looked something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/y5ROi.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y5ROi.jpg&quot; alt=&quot;Supercard Software v2.44&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This software is no longer supported by the manufacturer, and only worked on Windows.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;My Question&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;What exactly did this &quot;patching&quot; utility do to the GBA and DS ROM files?  Why was it necessary to &quot;patch&quot; the ROM images before running them on the actual hardware from the Supercard?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My end goal is to create a new Mac/Linux tools that does the patching for me so I don't need to run this software via Wine or VM.&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2017-02-17T20:52:19.140" Title="What did the Supercard &quot;patch&quot; program actually do to GBA and NDS ROMs to make them playable?" Tags="&lt;nintendo&gt;&lt;rom&gt;&lt;game-boy-advance&gt;&lt;nintendo-ds&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1729" PostTypeId="5" CreationDate="2016-11-16T03:47:16.143" Score="0" Body="&lt;p&gt;The Nintendo DS is a 32-bit dual-screen handheld game console developed and released by Nintendo in North America on November 21, 2004.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-11-16T09:58:05.650" LastActivityDate="2016-11-16T09:58:05.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1730" PostTypeId="4" CreationDate="2016-11-16T03:47:16.143" Score="0" Body="for questions about Nintendo's Dual Screen portable gaming system" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-11-16T09:57:58.273" LastActivityDate="2016-11-16T09:57:58.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1731" PostTypeId="1" AcceptedAnswerId="3120" CreationDate="2016-11-16T08:21:52.863" Score="12" ViewCount="2570" Body="&lt;p&gt;For a project I'm working on, I need to write some disks to test on my Amstrad CPC 6128.&lt;/p&gt;&#xA;&lt;p&gt;I've got some 3″ blank disks, and all my Amstrad computers (CPC and PCW) have 3″ disks, as well as my Spectrum +3. I don't own a PC with floppy controller, and I wouldn't want to spend money in hardware like Catweasel, Kryoflux, HxC or Gotek. I'd like to use what I already own, if possible.&lt;/p&gt;&#xA;&lt;p&gt;I wonder if there is a way to transfer a DSK image file to a blank 3″ disk (and viceversa) using my existing hardware:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Amstrad CPC 6128 with no expansion devices. Plain computer&lt;/li&gt;&#xA;&lt;li&gt;Amstrad PCW 8256 with serial port back module&lt;/li&gt;&#xA;&lt;li&gt;ZX Spectrum +3 with disk drive and ZXMMC (SD card usable with +3e ROMs)&lt;/li&gt;&#xA;&lt;li&gt;PC with Windows 7 x64, and no floppy controller&lt;/li&gt;&#xA;&lt;li&gt;Spare 3″ drives&lt;/li&gt;&#xA;&lt;li&gt;Arduino Uno board, and STM32 Nucleo board&lt;/li&gt;&#xA;&lt;li&gt;Various FPGA boards&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="105" LastEditorUserId="15334" LastEditDate="2020-11-16T20:46:16.800" LastActivityDate="2020-11-16T20:46:16.800" Title="Writting DSK images onto a 3″ floppy for Amstrad/Sinclair computers" Tags="&lt;floppy-disk&gt;&lt;disk-image&gt;&lt;cpc&gt;&lt;spectrum-plus-3&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1732" PostTypeId="2" ParentId="1728" CreationDate="2016-11-16T09:24:25.170" Score="2" Body="&lt;p&gt;I don't know if this applies to this card &lt;em&gt;in particular&lt;/em&gt;, but in all likelihood, one of the things the patch program does is to patch in custom &lt;em&gt;save game&lt;/em&gt; functionality so that the ROMs can write to the flashcard rather than expecting their own flash memory to be present. Later cards were sophisticated enough to do this patching on-the-fly. I'd recommend if you want specifics to compare the output of the patcher to the input in a hex editor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(My view is that the Nintendo DS is possibly not retro since you can still buy brand new games for it, albeit I don't believe they're actually being &lt;em&gt;made&lt;/em&gt; any more. The GBA certainly is retro though.)&lt;/p&gt;&#xA;" OwnerUserId="1931" LastActivityDate="2016-11-16T09:24:25.170" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1733" PostTypeId="2" ParentId="1731" CreationDate="2016-11-16T11:39:25.457" Score="3" Body="&lt;p&gt;(sorry, this is not really an answer, but I cannot post comments yet)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the constraints you have, it seems difficult. I do not know about the Spectrum side of it, but I did use a homemade parallel cable back in the days:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://cpctech.cpc-live.com/docs/mods/parallel.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://cpctech.cpc-live.com/docs/mods/parallel.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This being said, you would still need a parallel port on your PC, a DOS/FreeDOS boot disk, PCPara.exe on this disk and CPCPARA.BAS on your CPC. You can type the  CPCPARA.BAS listing like in the old days :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://benchmarko.de/cpcemu/cpcdoc/chapter/cpcdoc5_e.html#TRANS_PARALLEL&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://benchmarko.de/cpcemu/cpcdoc/chapter/cpcdoc5_e.html#TRANS_PARALLEL&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the tools at &lt;a href=&quot;http://benchmarko.de/download/index_e.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://benchmarko.de/download/index_e.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt this still works nowadays, those programs are almost 20 years old!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today I would rather use HxC or plug a 3.5&quot; drive to the CPC. You would still need an USB 3.5&quot; drive, a &quot;normal&quot; 3.5&quot; floppy drive and another homemade cable :-)&lt;/p&gt;&#xA;" OwnerUserId="271" LastActivityDate="2016-11-16T11:39:25.457" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1734" PostTypeId="1" AcceptedAnswerId="1735" CreationDate="2016-11-16T12:11:25.520" Score="16" ViewCount="1408" Body="&lt;p&gt;As a kid, I always had problems with the keyboard. Membrane was hard to come by and expensive. I did not have Kempston/Protec. So I had to play on the keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was using QAOPMN combination, and shortly it would wear off. Then I had to try to fix it manually, by putting wire and what not. Usually did not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, I always wondered why Sir Clive chose the membrane. I suspect it could be to cut down the production cost, but I am not sure.&lt;/p&gt;&#xA;" OwnerUserId="3642" LastEditorUserId="276" LastEditDate="2016-11-17T10:42:42.393" LastActivityDate="2018-01-01T21:28:54.063" Title="Why did the Sinclair ZX-Spectrum use a membrane keyboard?" Tags="&lt;zx-spectrum&gt;&lt;membrane-keyboard&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1735" PostTypeId="2" ParentId="1734" CreationDate="2016-11-16T13:14:45.637" Score="16" Body="&lt;p&gt;On the one hand it was clearly down to cost - being very much cheaper than a conventional keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, remember that the Spectrum was the replacement for the ZX81 and ZX80.  These had absolutely no tactile feedback in their capacitive keyboards and so the Spectrum could be marketed as a great leap forward in quality and user experience.  Although that claim was open to debate it did create sales.  A small increase in price gave a large increase in perceived quality and usability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the membrane keyboard enabled the Spectrum to differentiate itself from competitors that were beginning to appear in the ultra-cheap home computer market from the likes of Oric and Tangerine which had the ZX81-style of capacitive keyboard.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-16T13:35:12.387" LastActivityDate="2016-11-16T13:35:12.387" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1736" PostTypeId="2" ParentId="1731" CreationDate="2016-11-17T10:55:14.600" Score="9" Body="&lt;p&gt;I've written various programs that may help, if the DSK files don't make use of copy protection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can get files onto the +3 via the ZXMMC, you can use DU54 at &lt;a href=&quot;http://www.seasip.info/Cpm/software/amstrad.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.seasip.info/Cpm/software/amstrad.html&lt;/a&gt; to write unprotected disk images to disk (or vice versa). It may be easier to unpack DU54.PMA within a CP/M emulator and just transfer the +3 version to the +3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can't, the TAPTOOLS at &lt;a href=&quot;http://www.seasip.info/ZX/unix.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.seasip.info/ZX/unix.html&lt;/a&gt; include DSK2TAP, which converts an unprotected DSK file into a Spectrum tape image. You can then convert that to a real tape and play it into the +3 to recreate the DSK.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2016-11-17T10:55:14.600" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1737" PostTypeId="2" ParentId="1734" CreationDate="2016-11-17T15:36:03.723" Score="14" Body="&lt;p&gt;As simple as that: because it is the cheapest solution. Mechanical keys, separate circuit boards to hold the switches, etc, add costs to the final product. The ZX Spectrum case is slighly bigger than the circuit board itself, and thick enough to accomodate chips with sockets (there is no room even for a heatsinked socketed ULA).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to manufacturing costs, a &quot;proper&quot; keyboard would surely have caused the case to be bigger, so the polys and cardboard box would have been bigger too, adding more weight (both real weight and volumetric weight, which comes into importance when you have to transport many computers) so the smaller the computer, the smaller the costs associated with storing and delivering them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was all about cutting down costs, anyway.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-11-17T15:36:03.723" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1738" PostTypeId="1" AcceptedAnswerId="1739" CreationDate="2016-11-17T15:38:57.437" Score="10" ViewCount="1370" Body="&lt;p&gt;I can't seem to find where the video signals leave the digital board of my &lt;code&gt;Mac SE/30&lt;/code&gt; and travel to the analog board that is connected to the monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I even searched for pinouts online but I guess my searching skills are failing me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as cables are concerned, I can identify the power cables, the SCSI cable, the floppy cable and the audio cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My assumption is that it's buried in one of the power cable connections?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2016-11-17T18:24:19.330" Title="How does the Mac SE/30 send video to the analog board?" Tags="&lt;apple-macintosh&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1739" PostTypeId="2" ParentId="1738" CreationDate="2016-11-17T17:52:57.463" Score="14" Body="&lt;p&gt;The video signals are on the 14-pin Mini-Fit Jr. connection that goes between the logic board and the analog board. It's labeled J12 on the logic board. You can see it labeled in this image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wMsyQ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wMsyQm.png&quot; alt=&quot;Apple Board (Click to Enlarge)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find the schematics at &lt;a href=&quot;http://museum.dyne.org/gallery/apple/stuff/mac/andreas.kann/schemat.html&quot; rel=&quot;noreferrer&quot;&gt;museum.dyne.org&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="94" LastEditorUserId="621" LastEditDate="2016-11-17T18:24:19.330" LastActivityDate="2016-11-17T18:24:19.330" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1740" PostTypeId="2" ParentId="1676" CreationDate="2016-11-17T18:03:09.480" Score="6" Body="&lt;p&gt;Turns out the solution was to open ResEdit and lock the INIT resource within my compiled extension. Everything worked as expected after doing this.&lt;/p&gt;&#xA;" OwnerUserId="2187" LastActivityDate="2016-11-17T18:03:09.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1741" PostTypeId="1" CreationDate="2016-11-18T05:02:46.157" Score="3" ViewCount="291" Body="&lt;p&gt;I bought a PS/2 with the intent of robbing it's case for a restomod project, but since that is on the backburner right now I decided to see if it would work. When I flip the power switch, the PSU comes on and so do the disk drives. No video or audio is outputted from the machine, though. I checked the pins going to the disk drives with a multimeter and fount they are operating at a solid 5.5 volts DC. Motherboard cables are good as well. Any help would be appreciated!&lt;/p&gt;&#xA;" OwnerUserId="3661" LastActivityDate="2016-11-21T19:14:08.207" Title="IBM PS/2 Model 53 Not Powering On" Tags="&lt;ms-dos&gt;&lt;intel&gt;&lt;ibm-pc&gt;&lt;80386&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1742" PostTypeId="1" AcceptedAnswerId="1743" CreationDate="2016-11-20T19:16:20.453" Score="29" ViewCount="4738" Body="&lt;p&gt;The Sinclair computers are known for their low cost compared with other computers that were popular in the early 1980s. This is why they had membrane keyboards, or that rubber stuff in the case of the ZX Spectrum, and did not include a CRT as did the Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the 6502 was a good deal cheaper than the Z80, and comparably powerful. And though I don't know a great deal about hardware design, it seems that because the 6502 only uses the memory on every other cycle, the development team could have spend less effort contending part of the address space to get the display subsystem to work. &lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2016-11-21T16:07:56.717" Title="Why did Sinclair choose the Z80 for its range of home computers?" Tags="&lt;6502&gt;&lt;z80&gt;&lt;sinclair&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1743" PostTypeId="2" ParentId="1742" CreationDate="2016-11-20T20:21:18.240" Score="45" Body="&lt;p&gt;Sinclair didn't always use the Z80 for its computers. The MK14 computer, sold in kit form (like the ZX80 was), used a National Semiconductor INS8060.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX range of home computers have a video display hardware that is very closely tied to the architecture of the Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the two first models, ZX80 and ZX81, the video display hardware was kept to a minimum, yet allowing a decent resolution of 256x192 pixels and the ability to move the screen memory back and forward in the memory space, although it was not pixel addressable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To accomplish this, the Z80 played an important role as RAM address generator for the video hardware (resembling in some way what the Motorola 6845 CRTC chip does for other microcomputers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it is time to read a TV scanline from memory, the Z80 is directed to &quot;execute&quot; (i.e. fetch instructions) from the memory address where video data is stored. The Z80 does not actually execute the instruction read. Instead, the video hardware peeks the data bus and retrieves whatever data the memory put there for the Z80. Just after that, and before the second clock cycle of the fetch bus cycle is ended, the data bus is forced to 00000000 so the Z80 ends up reading a NOP instruction, which does nothing and goes for the next instruction at the next address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way, the video hardware doesn't have to implement an address counter, logic to access memory and logic to perform bus contention, as it is the Z80 which is actually taking part in the video generation process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX81 is just a ZX80 with all the video hardware encapsulated in a ULA chip, plus some other features such as the &quot;slow circuit&quot;, which was an improvement over the ZX80 video circuit, designed to avoid flickering while the user was inputting data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX Spectrum only shares some visual resemblance with the ZX81 video output, but it is actually a totally different beast. It could have been designed around a different CPU, but Sinclair had already a BASIC interpreter written for the Z80, and so the Spectrum ROM inherited much code from its ancestors, including some routines that shouldn't be in the Spectrum ROM because they made sense only in a ZX81.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Summarizing: the ZX80 and ZX81 relied on the Z80 way of performing a memory bus cycle to use it as a DMA engine. The Spectrum used a Z80 because it shared a lot of ROM code with previous models.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="276" LastEditDate="2016-11-21T14:39:51.880" LastActivityDate="2016-11-21T14:39:51.880" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="1744" PostTypeId="2" ParentId="1741" CreationDate="2016-11-21T05:47:32.120" Score="3" Body="&lt;p&gt;Remove any cards, floppy drives, etc. that are unnecessary for showing the power-on screen or hearing the POST beep, then try to power on. If that still doesn't work, inspect the motherboard for bulging or leaking capacitors, leaky battery, or other obvious damage. Clean out any dust, as it may cause short circuiting. Reseat any socketed chips and any connectors. Check connectors for corrosion. Power on and check if any chips get unusually hot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this fails, find a second identical but working IBM PS/2 Model 53, and swap parts until you narrow down the culprit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2016-11-21T19:02:32.530" LastActivityDate="2016-11-21T19:02:32.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1745" PostTypeId="2" ParentId="1585" CreationDate="2016-11-21T06:21:00.400" Score="2" Body="&lt;p&gt;Do you have a Boot floppy for the IIci? or some kind of system install media? In the old days Mac OS shipped with a Floppy Disk called 'Disk Tools' which was a bare bones system with tools for scanning and formatting/partitioning hard disks. you might be able to obtain a copy of it on ebay or ask someone you know who has an old mac to make you one. (maybe someone on here would make you one and mail it to you if you ask nicely) Alternatively, if you acquire an External SCSI cd rom drive, you could acquire a System 7.6 cd on ebay, which would have all the necessary tools for formatting your sd drive to HFS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thought might be to acquire a bridge machine, such as a Beige power macintosh G3, it was the last mac to have a floppy drive and the first mac to run OS X (you could install 10.2 on it and have Mac OS 9.2 in classic mode) With said machine you could generate a disk utilities floppy for the IIci as well as a set of System 7.5.3 Install floppies Once you've gotten this far you could share files between the IIci and the G3 over your network, removing the need for additional floppy disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said a power mac g3 would open up a number of doors as it was also the last mac to have SCSI, ADB, printer and modem ports, etc. so you could format and partition your drive directly on the g3.&lt;/p&gt;&#xA;" OwnerUserId="2187" LastEditorUserId="2187" LastEditDate="2016-11-21T22:10:37.317" LastActivityDate="2016-11-21T22:10:37.317" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1746" PostTypeId="2" ParentId="1670" CreationDate="2016-11-21T08:03:23.250" Score="4" Body="&lt;p&gt;From that I remember, the old type hard drives were very sensitive to the unexpected power loss - the machine I used (&lt;a href=&quot;https://en.wikipedia.org/wiki/SM-4&quot; rel=&quot;noreferrer&quot;&gt;SM-4&lt;/a&gt;) required to power them down manually before switching off the main power supply. The main problem was the need to move the heads into parking position before the drive comes to halt. Otherwise loss of the results of the currently running execution is just the smallest of the problems you have afterwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The drive momentum was used to provide the energy to move the heads into parking position. This did not help to save any data but in most of cases prevented drive and head damage during the unexpected power loss.&lt;/p&gt;&#xA;" OwnerUserId="496" LastActivityDate="2016-11-21T08:03:23.250" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1747" PostTypeId="2" ParentId="1480" CreationDate="2016-11-21T11:29:33.460" Score="5" Body="&lt;p&gt;According to the paper &lt;a href=&quot;http://ipnpr.jpl.nasa.gov/progress_report2/42-34/34H.PDF&quot; rel=&quot;noreferrer&quot;&gt;MODC2 Procedures for Assembly of MODCOMP-ll. Programs Using the Sigma 5 Assembler&lt;/a&gt;, from J.W. Layiand, special symbols $ and $$ refers to the values of the location couonters. The text uses the plural, inferring that there may be more than one location counter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, another paper, &lt;a href=&quot;http://ipnpr.jpl.nasa.gov/progress_report2/42-32/32T.PDF&quot; rel=&quot;noreferrer&quot;&gt;An INTEL 8080 cross assembler for the MODCOMP 2 minicomputer&lt;/a&gt; clarifies the role of $: it's the program counter. The text refers to &quot;program counter + 1&quot; but this is due to program counter being incremented during a macro expansion to allow 8080 nmemonics to be written in MODCOMP assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can assume that one of them ( $ ) may refer to the program counter, as we all know, and the other one ( $$ ) to the location counter, which doesn't have to be the same as the program counter. The location counter could be the address in memory where the program is first assembled. The GENS-3 assembler, for instance, allowed an assembler program to have an ORG directive that might collide with the assembler itself, or even ROM. All you had to do is to add assembler directives to store the generated machine code in the spare RAM area. In such circunstances, the final address for a instruction ( $ ) could be different from the address it is initially stored in ( $$ ). This makes sense for programs that allow relocation, so a part of them copies a block of code from the initially stored RAM area to its execution destination.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-11-21T11:29:33.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1748" PostTypeId="5" CreationDate="2016-11-21T14:02:00.853" Score="0" Body="&lt;p&gt;For questions regarding computers made by any of the companies founded by Clive Sinclair.  These include Sinclair Research, Sinclair Radionics and Science of Cambridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also the tags for the individual computers if your question is specific to just one of them: e.g &lt;a href=&quot;/questions/tagged/zx-spectrum&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;zx-spectrum&amp;#39;&quot; rel=&quot;tag&quot;&gt;zx-spectrum&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-21T14:02:00.853" LastActivityDate="2016-11-21T14:02:00.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1749" PostTypeId="4" CreationDate="2016-11-21T14:02:00.853" Score="0" Body="For questions regarding computers made by the Sinclair group of companies: Sinclair Research, Sinclair Radionics and Science of Cambridge." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-11-21T14:02:00.853" LastActivityDate="2016-11-21T14:02:00.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1750" PostTypeId="2" ParentId="1741" CreationDate="2016-11-21T14:11:43.763" Score="2" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1744/357&quot;&gt;traal's answer&lt;/a&gt; provides some good ideas. I'd like to add a few.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, the PS/2 (at least the one I had back in the day, first half of the 1990s some time) will beep and do a RAM check on power up during POST, then proceed to try to boot the operating system. If I recall correctly, it will do so in that order, but it should definitely try to beep at you during the BIOS POST or bootstrap process if things are good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the motherboard, find the connector for the internal speaker (or find the relevant locations on the speaker itself), and plug in some way to measure the voltage across those two pins. An oscilloscope with a long hold time would be great, but I suspect a simple multimeter (set to measure AC volts) or voltmeter could do in a pinch. &lt;strong&gt;See if there's a waveform there; if there is, then the computer is &lt;em&gt;trying&lt;/em&gt; to beep at you&lt;/strong&gt; but the speaker is somehow faulty; likely a good sign, because it should mean that the CPU is up and running. If you are measuring at the speaker, make sure the cables themselves are good by measuring their resistance with the computer powered off; the resistance should be very close to zero. If the computer is trying to beep at you, you should be seeing an AC waveform at a few hundred Hz and maybe a handful of volts peak-to-peak here for the duration of the beep, and zero volts otherwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, if it appears that the CPU is not powering on but there's DC present from the PSU to other peripherals (as your troubleshooting suggests), I would want to &lt;strong&gt;verify the &quot;power good&quot; signal&lt;/strong&gt; from the PSU. I can't readily locate anything on what motherboard form factor and particularly motherboard power connector the PS/2 used (I might try again later), but if it's the same power connector as AT or Baby AT, then it would &lt;em&gt;likely&lt;/em&gt; (but not certainly!) be &lt;a href=&quot;https://en.wikipedia.org/wiki/AT_(form_factor)#Power_connector&quot; rel=&quot;nofollow noreferrer&quot;&gt;pin 8.1 to pin 8.5 or 8.6 (power good to ground)&lt;/a&gt;. While applying a normal load, check the voltage between those pins to make sure it is decidedly non-zero DC and holding steady. The CPU won't power on before the PSU indicates that the power is &quot;good&quot;, but other peripherals might if they don't particularly care about the purity of the DC, such as drive motors, or even don't have direct access to the power good signal. If this is the problem, then it seems likely that the PSU is somehow at fault; either it is not providing good enough DC to be happy about itself, or it is but the &quot;power good&quot; detection circuitry is malfunctioning somehow. At that point, unless you can source a known good spare, you are probably looking at opening the PSU and poking around inside it.&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="357" LastEditDate="2016-11-21T19:14:08.207" LastActivityDate="2016-11-21T19:14:08.207" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1751" PostTypeId="2" ParentId="1742" CreationDate="2016-11-21T16:07:56.717" Score="0" Body="&lt;p&gt;I thought they chose the Z80 as a differentiator from the plethora of systems available at the time and, of course, cost.&#xA;I'm sure this is mentioned in the TV programme Micromen? (A good watch if you've not seen it).&lt;/p&gt;&#xA;" OwnerUserId="3675" LastActivityDate="2016-11-21T16:07:56.717" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1752" PostTypeId="1" AcceptedAnswerId="1844" CreationDate="2016-11-21T21:20:38.257" Score="16" ViewCount="870" Body="&lt;p&gt;I'm learning more and more on how the original Macintosh series worked.  I can't, however, find information in my research on how the Mac's video generator accessed the video RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My assumption is that it used some sort of DMA transfer in correlation with the CPU.  Much like the original Apple ][ did.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, I don't think that is &lt;code&gt;true&lt;/code&gt; DMA in the strictest term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, did the original Mac do something similar?  Did it halt the CPU while it fetched video data?  Or, did it have its own dedicated video RAM that the CPU passed information into?&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-01-02T11:57:03.510" Title="Did the Macintosh Classic series use DMA to display video?" Tags="&lt;hardware&gt;&lt;apple-macintosh&gt;&lt;mac-os-classic&gt;&lt;video&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1753" PostTypeId="2" ParentId="36" CreationDate="2016-11-21T23:46:27.787" Score="1" Body="&lt;p&gt;Component video would seem a better choice than SVGA.  I don't have any circuit designs handy, but using four video op amps and some resistors it should be possible to convert most forms of &quot;VGA&quot; video into a component video signal that should be usable on many kinds of LCD screen.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-11-21T23:46:27.787" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1754" PostTypeId="1" AcceptedAnswerId="1756" CreationDate="2016-11-22T18:10:49.513" Score="5" ViewCount="2799" Body="&lt;p&gt;I have 2 Atari 2600s.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got them both at a garage sale. I plugged them both in with a coaxial adapter. No sound, no video. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I opened them up, didn't see any shorts, the boards looked good. There was some corrosion on the RF module. (Or at least I think that's what it was) I'm at a complete loss with these Ataris. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Model numbers: &#xA;NO.637.99743&#xA;NO.CX-2600A&lt;/p&gt;&#xA;" OwnerUserId="3646" OwnerDisplayName="Justin" LastEditorUserId="2148" LastEditDate="2016-12-05T19:04:32.617" LastActivityDate="2016-12-05T19:04:32.617" Title="Atari 2600 has no sound, no video. Any advice?" Tags="&lt;repair&gt;&lt;atari-2600&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1755" PostTypeId="1" AcceptedAnswerId="1757" CreationDate="2016-11-23T18:40:20.713" Score="9" ViewCount="781" Body="&lt;p&gt;Despite owning several &lt;em&gt;Apple IIe&lt;/em&gt;'s, I've never gotten around to doing any major programming on them.  I hope to change that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, how did programmers actually use the expanded RAM seeing that a 6502 can only address 16 bits of address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know there are things called &lt;em&gt;soft switches&lt;/em&gt; but how did they work?&#xA;For example, how would you store data into the upper RAM?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, did programmers typically execute code from the expanded RAM or did they mostly use it for data storage?&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="278" LastEditDate="2016-11-26T11:17:25.580" LastActivityDate="2018-04-16T23:09:38.403" Title="How do I store data and/or code in AUX RAM on an Apple //e?" Tags="&lt;apple-ii&gt;&lt;programming&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1756" PostTypeId="2" ParentId="1754" CreationDate="2016-11-23T20:22:44.887" Score="3" Body="&lt;p&gt;The Atari 2600 needs to go through an RF modulator before it will display any video or play any audio on your TV.  You mentioned that you have an coaxial adapter.  Some of those adapters actually do a good job separating the audio/video signals.  Some, are just pass-throughs and aren't suited for real RF modulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have an old RF modulator box like from a NES or Coleco then that might help a little.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experiences, the Atari 2600 is very finicky with modern TV's.  Despite modern TV's still having coaxial inputs.  On CRT TV's, you could be very lenient on the NTSC specs and they still (mostly) worked.  But many modern TV's will just show a blue screen if the NTSC signal is out of spec...even by a small margin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My advice is to go to Goodwill and buy a $5 CRT TV.  Older the better.  One with  knobs for the channels are best for Atari.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, get a proper RF modulator.  Probably another $3 from Goodwill or eBay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, if you have the means and know-how, you can check the voltages inside the 2600 after you power it on.  Oh, I assume you have the right power supply?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had a Sega Master System that wouldn't power on and it turned out to be a bad 7805 voltage regulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Point is, try the Atari on an old TV if you can with a real RF modulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, if you buy a CRT and decide you don't want it any more...please don't discard or recycle it.  Take it back to Goodwill.  People like me buy them all the time to play retro consoles on.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2016-11-23T20:22:44.887" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1757" PostTypeId="2" ParentId="1755" CreationDate="2016-11-23T21:07:03.983" Score="6" Body="&lt;p&gt;I hate to give only a link but the brevity of the &lt;a href=&quot;http://www.applelogic.org/files/AIIETECHREF2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIe tech reference on this&lt;/a&gt; is hard to top. See page 12, table 4-6 and, specific for the auxiliary memory, page 17, table 4-7 of that PDF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The function is simple. You &lt;em&gt;read&lt;/em&gt; a data byte from a specific I/O location ($C000..$CFFF range), the circuit detects this and flips the soft switch, changing the chip select signals of the RAM chips until you flip it again by reading another I/O location. The value read has no purpose, it's only the address on the bus which selects a function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note: The following point is disputed, but I leave it for the author to correct.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note the 6502 is special as it cannot write a byte without reading it first. So writing a specific location will also work but gives a double trigger. It doesn't matter the way the Apple II is designed, so this is only a minor detail.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastEditorUserId="71" LastEditDate="2018-04-16T23:09:38.403" LastActivityDate="2018-04-16T23:09:38.403" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="1758" PostTypeId="1" AcceptedAnswerId="1760" CreationDate="2016-11-23T21:20:28.867" Score="7" ViewCount="439" Body="&lt;p&gt;I have a PowerMac G5 which I have recently succeeded in getting running with a Mac OS X 10.4. I was in for two big surprises: Firstly, the computer runs very fast, even with heavier software like an older version of Photoshop. The second surprise was when I opened the Activity Monitor. It would appear that this computer is either dual-cored or dual-threaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did Apple indeed make dual-core (or dual-thread) PowerMacs?&lt;/p&gt;&#xA;" OwnerUserId="3341" LastEditorUserId="621" LastEditDate="2016-11-23T23:12:30.910" LastActivityDate="2016-11-23T23:12:30.910" Title="Was there a dual-core PowerMac G5?" Tags="&lt;apple&gt;&lt;powerpc&gt;&lt;powermac-g5&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1759" PostTypeId="1" AcceptedAnswerId="1765" CreationDate="2016-11-23T21:26:46.800" Score="11" ViewCount="421" Body="&lt;p&gt;In &lt;a href=&quot;http://www.callapple.org/docs/ap2/special/integerbasic.pdf&quot;&gt;Paul Santa-Maria's disassembly of Integer BASIC&lt;/a&gt; (&lt;a href=&quot;http://www.easy68k.com/paulrsm/6502/INTLST.TXT&quot;&gt;text version&lt;/a&gt;), you can see the syntax table split into two parts, &lt;code&gt;SYNTABL&lt;/code&gt; and &lt;code&gt;SYNTABL2&lt;/code&gt;. I've seen references to the tokens being stored in reverse order, and indeed, the characters within a token are in reverse order, and the tokens themselves are counted down from the ends of the tables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the exact format of the syntax tables? There are a bunch of extra bytes littered around, I believe to store different versions of tokens (eg. PRINT, PRINT &amp;lt;string&amp;gt;, PRINT &amp;lt;expression&amp;gt;), and some of the tokens lack extra bytes: some of them use char+32 vs char-32 to signal the first character, but again, some don't. And some that do also have extra bytes. In addition, &lt;code&gt;SYNTABL2&lt;/code&gt; ends with some extra bytes (are they usually skipped?) and &lt;code&gt;SYNTABL&lt;/code&gt; starts with some apparently unused tokens, then some extra bytes of its own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a clear description somewhere?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Context: I started out looking at the code because I'm trying to follow the exact rules for adding whitespace when rendering Integer BASIC listings to text. But now I'm intrigued.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="335" LastEditorUserId="439" LastEditDate="2016-11-23T22:30:11.377" LastActivityDate="2016-11-24T13:20:11.733" Title="What is the format of the syntax tables in Apple II Integer BASIC?" Tags="&lt;apple-ii&gt;&lt;basic&gt;&lt;disassembly&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1760" PostTypeId="2" ParentId="1758" CreationDate="2016-11-23T21:30:08.653" Score="10" Body="&lt;p&gt;You should open the case, or check the &quot;About this Mac&quot; dialog in the Apple menu: there's a fair chance your G5 has two processors, as in two complete packages. All series of G5s were available in dual-socket variants; the very last series of G5s was available with a dual-core processor, resulting in up to four cores in total.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Power_Mac_G5#Product_revision_history&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia has the details&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;June 2003 series: single 1.6GHz or 1.8GHz single-core processor, or dual 1.8GHz or 2.0GHz single-core processors;&lt;/li&gt;&#xA;&lt;li&gt;June 2004 series: dual 1.8GHz, 2.0GHz or 2.5GHz single-core processors only;&lt;/li&gt;&#xA;&lt;li&gt;Late 2004 series: single 1.8GHz single-core processor;&lt;/li&gt;&#xA;&lt;li&gt;Early 2005 series: dual 2.0GHz, 2.3GHz or 2.7GHz single-core processors;&lt;/li&gt;&#xA;&lt;li&gt;Late 2005 series: single 2.0GHz or 2.3GHz dual-core processor, or dual 2.5GHz dual-core processors.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2016-11-23T21:33:03.537" LastActivityDate="2016-11-23T21:33:03.537" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1761" PostTypeId="5" CreationDate="2016-11-23T23:20:42.277" Score="0" Body="&lt;p&gt;Related tags: &lt;a href=&quot;/questions/tagged/apple-macintosh&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;apple-macintosh&amp;#39;&quot; rel=&quot;tag&quot;&gt;apple-macintosh&lt;/a&gt; &lt;a href=&quot;/questions/tagged/imac&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;imac&amp;#39;&quot; rel=&quot;tag&quot;&gt;imac&lt;/a&gt; &lt;a href=&quot;/questions/tagged/imac-g3&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;imac-g3&amp;#39;&quot; rel=&quot;tag&quot;&gt;imac-g3&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-11-24T01:50:45.333" LastActivityDate="2016-11-24T01:50:45.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1762" PostTypeId="4" CreationDate="2016-11-23T23:20:42.277" Score="0" Body="For questions about Apple's Power Macintosh G5 line of personal computers" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-11-24T01:50:40.193" LastActivityDate="2016-11-24T01:50:40.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1763" PostTypeId="1" AcceptedAnswerId="1769" CreationDate="2016-11-24T05:01:38.643" Score="10" ViewCount="654" Body="&lt;p&gt;So I got these two Ataris, just got them working. I was testing out the controllers and most of them have problems with the joystick not reacting. I opened them up, cleaned them, still have the problem. Than I pushed down on some of the contacts and realized they didn't have any tension. So can I bend them back or should I just suck it up and pay 25$ to buy 25 contacts off eBay?&lt;/p&gt;&#xA;" OwnerUserId="3646" LastEditorUserId="15334" LastEditDate="2021-04-30T15:06:00.633" LastActivityDate="2021-05-17T12:06:25.130" Title="Is it possible to bend tension back into Atari 2600 joystick contact domes?" Tags="&lt;repair&gt;&lt;atari-2600&gt;&lt;joystick&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1764" PostTypeId="2" ParentId="1763" CreationDate="2016-11-24T11:21:31.300" Score="1" Body="&lt;p&gt;Best Electronics have replacement PCBs with gold contacts. Might be worth a look at their web site.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2016-11-24T11:21:31.300" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1765" PostTypeId="2" ParentId="1759" CreationDate="2016-11-24T13:20:11.733" Score="8" Body="&lt;p&gt;There's an interesting thread here: &lt;a href=&quot;http://forum.6502.org/viewtopic.php?t=2037&quot;&gt;http://forum.6502.org/viewtopic.php?t=2037&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The syntax table is in reverse order, as you've already noticed. An&#xA;  underscore is stored at the end of the line by the line input routine.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;There are 32 categories (well, that's what I'm going to call them).&#xA;  Each category contains one or more rules.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The syntax tokens are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$00: return with syntax error&#xA;$01: return with no error&#xA;$02: parse a comment character (any non-control character, stops at the end of the line)&#xA;$03: parse a string literal character (stops at a closing quote)&#xA;$04-$1F: categories $04-$1F, next token is required&#xA;$20-$3F: categories $00-$1F, next token (and beyond) is optional&#xA;$40-$5F: categories $00-$1F, end of category&#xA;$60-$7D: categories $00-$1D, end of rule&#xA;$7E: branch &quot;backward&quot; 2 bytes&#xA;$7F: branch &quot;backward&quot; 1 byte&#xA;$80: parse letter A-Z, next token is required&#xA;$81: parse number 0-9, next token is required&#xA;$82-$BF: parse character &quot;-_ -- next token is required&#xA;$C0: parse letter A-Z, end of rule&#xA;$C1: parse number 0-9, end of rule&#xA;$C2-$FF: parse character &quot;-_ -- end of rule&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;The category table (SYNTABLNDX in the linked listing) is at $E197. To&#xA;  address 512 bytes with 8 bits, each category starts at an odd address.&#xA;  Each entry in the category table is:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;DB (ADDRESS_OF_START_OF_CATEGORY-1)/2&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Category $07 is a numeric expression. So HLIN $07 AT $07 , $67 means&#xA;  HLIN  AT  ,  and the $67 indicates the&#xA;  end of the HLIN rule.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Category $00 is an unsigned number (line number), so LIST $20 , $60&#xA;  (at $EC61) means the LIST  ,  with the comma&#xA;  and the second line number optional&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Category $19 is a numberic variable name, so NEXT $39 , $7E means NEXT&#xA;   ,  , ... i.e. NEXT A or NEXT A,B or NEXT A,B,C&#xA;  etc.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Sometimes keywords are duplicated to force a mismatch (and thus force&#xA;  the end of a category). For example, RNDX (at $ED69) can never be&#xA;  matched since it comes after RND (at $ED75) in the numeric function&#xA;  category (at $ED79). (The first three letters would match RND first.)&#xA;  Thus, RNDX matches nothing and effectively marks the end of the&#xA;  category.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If you're curious about the THEN TO STEP etc. keywords at $EC17, see&#xA;  this thread:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;viewtopic.php?t=726&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If you have further questions, feel free to ask.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="599" LastActivityDate="2016-11-24T13:20:11.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1766" PostTypeId="1" AcceptedAnswerId="1768" CreationDate="2016-11-25T10:14:22.190" Score="10" ViewCount="1085" Body="&lt;p&gt;The HP 85, the portable scientific computer from Hewlett Packard in the 1970s, didn't use an off-the-shelf CPU like a Z80 or 8088. Instead, HP designed a custom CPU and used that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was this CPU used in any other computer? What was its instruction set and register file like? &lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2016-11-25T10:33:55.677" Title="What CPU did the HP85 have?" Tags="&lt;hp&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1767" PostTypeId="2" ParentId="1766" CreationDate="2016-11-25T10:21:30.353" Score="3" Body="&lt;p&gt;From a quick Google, looks like it was shared by the HP 83. The instruction set can be found here: &lt;a href=&quot;http://www.series80.org/PDFs/HP85-Assembler.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.series80.org/PDFs/HP85-Assembler.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another link I found: &lt;a href=&quot;http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/archv013.cgi?read=47629&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/archv013.cgi?read=47629&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1931" LastActivityDate="2016-11-25T10:21:30.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1768" PostTypeId="2" ParentId="1766" CreationDate="2016-11-25T10:25:32.293" Score="9" Body="&lt;p&gt;The CPU in the 85 was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Capricorn_(microprocessor)&quot; rel=&quot;noreferrer&quot;&gt;Capricorn&lt;/a&gt;, which was used for the &lt;a href=&quot;http://www.series80.org/&quot; rel=&quot;noreferrer&quot;&gt;Series 80&lt;/a&gt; systems. The Wikipedia article linked there gives an overview of the CPU, and the &lt;a href=&quot;http://www.hpl.hp.com/hpjournal/pdfs/IssuePDFs/1980-07.pdf&quot; rel=&quot;noreferrer&quot;&gt;July 1980&lt;/a&gt; and &lt;a href=&quot;http://www.hpl.hp.com/hpjournal/pdfs/IssuePDFs/1980-08.pdf&quot; rel=&quot;noreferrer&quot;&gt;August 1980&lt;/a&gt; issues of HP Journal describe the HP-85 system in detail (including the LSI development process used for the chipset). The Series 80 web site has lots of information on the various systems, including lots of &lt;a href=&quot;http://www.series80.org/Manuals/index.html&quot; rel=&quot;noreferrer&quot;&gt;programming manuals&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Capricorn has 64 8-bit registers. The first 32 of these are byte- or word-addressable; the second 32 can be addressed as anything from 1- to 8-byte values. The size of each load and store was determined by the instructions used; &lt;a href=&quot;https://web.archive.org/web/20091214120841/http://www.vintagecomputers.freeserve.co.uk:80/hp85/processor.htm&quot; rel=&quot;noreferrer&quot;&gt;this archived Usenet post&lt;/a&gt; has more details.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2016-11-25T10:33:55.677" LastActivityDate="2016-11-25T10:33:55.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1769" PostTypeId="2" ParentId="1763" CreationDate="2016-11-25T12:15:34.877" Score="9" Body="&lt;p&gt;TLDR; Yes you can bend them, don't bend them too much and don't flatten the dimples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First be sure the contact disk is the issue. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the problem is intermittent, You can also remove power from the Atari and spray plastic safe contact cleaner into the controller socket and system pins and then insert and remove several times to clean up those connections. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next the board to cable connections should be re-flowed with new flux or remove and replace with some new flux and fresh solder to firm up those connections. Once you are sure of those connections you can check the discs by clipping an ohmmeter the board edge and testing the pads directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disc works by connecting the outer loop to the center pad and IR remotes of later eras used interlocking contact fingers and a conductive pad to do the same trick. Over time both types suffer from oxidation on the exposed contact area preventing electrical contact across the switch. That hard nonconducting layer will build up on the surface and then get transferred to the other surface which is also going though the same process though at a different rate because to the different metal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd consider the disc the issue if the symptom is constant activation. Although I guess if pressing the disc center causes the edge dimples to lift that could be a problem too. Lightly bending the disc will give a stronger response for a time. Try not to make a hard crease. They were pressed out of a mold to be formed but whatever you do don't flatten the any of the dimples. That would make contact area much less effective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your symptom is no response on one or two pads - they are not detecting and that is almost certainly oxidation. You can verify that is the problem with an ohmmeter on the pins at the edge of the board. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;***Note: I have not looked at these forever and don't recall for sure the contact area trace material on the board. If its carbon then you don't want to use any mechanical cleaning methods just want to use some carbon safe electrical contact cleaner. Carbon contacts are almost impossible to fix without luck and far more practice than you have if you are asking this question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Repair attempts vary, but it does not hurt to try if as the other poster mentioned there is a replacement PCB with gold contacts available. Cleaning is only going to solve the issue for a time. Eventually the contact area will oxidize again. How quickly depends on your environment. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clean use light short strokes in one direction with a soft pink art eraser on both contact surfaces and the disc. Prior to reassembly clean with a zero-residue contact solvent to clean up any oils from handling before immediately reassembling. If the eraser is getting dirty you move to a clean surface on the eraser or trim it with a knife otherwise you are just pushing dirt back onto the board. If the eraser is crumbling you may be pressing too hard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You absolutely do not want to use a hard (usually white) ink eraser which is far to abrasive for this task. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The eraser works by taking off the top oxide layer and if you rub too hard probably some of the base metal as well. Eventually after many cleaning cycles to you will remove enough metal to damage the trace. If you do this with gold plated contacts you can also abrade thought the plating negating its use. &lt;/p&gt;&#xA;" OwnerUserId="3648" LastEditorUserId="3648" LastEditDate="2016-11-25T17:10:15.310" LastActivityDate="2016-11-25T17:10:15.310" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1771" PostTypeId="2" ParentId="929" CreationDate="2016-11-25T19:06:08.610" Score="5" Body="&lt;p&gt;The switches are to tell the Macintosh Video Controller about the capabilities of the attached monitor when the monitor is NOT a Macintosh Proprietary Monitor. Macintosh Monitors individually perform the the position setting for their type so the controller knows what sync and resolution capabilities are on the other end of the wire, usually fixed for most Pre-G3 Macs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The adapters started appearing in the early-mid 90's when sVGA Monitors capabilities were beginning to exceed those of the legacy Macintosh displays. Especially the large 17&quot;-21&quot; Glass tubes with the finer screen pitches which the Publishing industry was gravitating to. Other monitor vendors also made their own adapters to perform a similar function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;sVGA Monitors are essentially MultiSync, though Macintosh Multisyncs only have a narrow range they would sync within for each defined resolution. Apple finally made the switch to HE-15 output with G3 models.&lt;/p&gt;&#xA;" OwnerUserId="3648" LastEditorUserId="3648" LastEditDate="2017-01-30T19:56:51.240" LastActivityDate="2017-01-30T19:56:51.240" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1772" PostTypeId="1" AcceptedAnswerId="1773" CreationDate="2016-11-25T20:40:16.933" Score="13" ViewCount="930" Body="&lt;p&gt;The Apple ][e had 2 HiRES video pages, HiRES animation involved switching between the 2 pages and redrawing the screen. A really early way to take an in game screenshot was to dump the computer with the programmers reset and then make a 2 separate calls one to each page and write the bytes out to the disk as files. You needed to do both as there was no way to tell which page had the currently displayed image and the other was partially overwritten for its next display write.&lt;/p&gt;&#xA;&lt;p&gt;I probably did this last in the late 80's and I can't remember how it was done. Though &lt;code&gt;PEEK&lt;/code&gt; &amp;amp; &lt;code&gt;POKE&lt;/code&gt; maybe?&lt;/p&gt;&#xA;&lt;p&gt;I think I read how in an issue of Nibble and my feeble memory has this as the pages:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Page 1 : 0x2000 - 0x3FFF&lt;/li&gt;&#xA;&lt;li&gt;Page 2 : 0x4000 - 0x5FFF&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Once you had the pages saved you had to reboot, but then you could &lt;code&gt;POKE&lt;/code&gt; the bytes back into a page or dump them straight into an ImageWriter to print them out.&lt;/p&gt;&#xA;" OwnerUserId="3648" LastEditorUserId="3648" LastEditDate="2020-12-04T23:09:32.607" LastActivityDate="2020-12-04T23:09:32.607" Title="Anyone remember how to write the Apple ][ HIRES pages to disk to make screenshots?" Tags="&lt;apple-ii&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1773" PostTypeId="2" ParentId="1772" CreationDate="2016-11-25T22:17:33.873" Score="12" Body="&lt;p&gt;Under both DOS3.3 and ProDOS, &lt;code&gt;BSAVE FILENAME,A$2000,L$1FF8&lt;/code&gt; would do the first graphics page, and &lt;code&gt;BSAVE FILENAME,A$4000,L$1FF8&lt;/code&gt; would do the second page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hat tip to Michaelangel007 for suggesting reducing the length by 8 to save a disk block.  I'd noticed screens took 34 blocks but hadn't known why.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2017-02-13T15:08:07.720" LastActivityDate="2017-02-13T15:08:07.720" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="1775" PostTypeId="2" ParentId="1772" CreationDate="2016-11-26T09:15:44.700" Score="11" Body="&lt;p&gt;There are two separate pages for text and graphics, and they can both hold separate data without overwriting each other if a program is not running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From BASIC or the Monitor ROM, you can toggle displaying each text or graphics page without affecting what is written to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Switching Apple II display modes is done via the softswitches in page $C000. You can PEEK/POKE or LDA/STA, LDX/STX, LDY/STY these. I believe an assembly read access is slightly faster if timing is critical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The negative BASIC values are from the old Integer BASIC which could only handle -32768 to 32767, but were supported on the newer Applesoft / Microsoft / Floating Point (FP) BASIC for compatibility. The negative values had staying power due to people who started out on Integer and later moved to Applesoft BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Switch from text to graphics mode. What you see depends on the low/hi-res mode and the mixed/full mode state:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;POKE -16304,0  &lt;/li&gt;&#xA;&lt;li&gt;POKE 49232,0&lt;/li&gt;&#xA;&lt;li&gt;STA $C050&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Switch to text mode:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;POKE -16303,0  &lt;/li&gt;&#xA;&lt;li&gt;POKE 49233,0&lt;/li&gt;&#xA;&lt;li&gt;STA $C051&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Switch from mixed graphics/text to full graphics:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;POKE -16302,0  &lt;/li&gt;&#xA;&lt;li&gt;POKE 49234,0&lt;/li&gt;&#xA;&lt;li&gt;STA $C052&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Switch from full graphics to mixed graphics/text:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;POKE -16301,0  &lt;/li&gt;&#xA;&lt;li&gt;POKE 49235,0&lt;/li&gt;&#xA;&lt;li&gt;STA $C053&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Display text/graphics page 1:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;POKE -16300,0  &lt;/li&gt;&#xA;&lt;li&gt;POKE 49236,0&lt;/li&gt;&#xA;&lt;li&gt;STA $C054&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Display text/graphics page 2:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;POKE -19299,0  &lt;/li&gt;&#xA;&lt;li&gt;POKE 49237,0&lt;/li&gt;&#xA;&lt;li&gt;STA $C055&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Switch to low-res graphics mode:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;POKE -16298,0  &lt;/li&gt;&#xA;&lt;li&gt;POKE 49238,0&lt;/li&gt;&#xA;&lt;li&gt;STA $C056&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Switch to hi-res graphics mode:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;POKE -16297,0  &lt;/li&gt;&#xA;&lt;li&gt;POKE 49239,0&lt;/li&gt;&#xA;&lt;li&gt;STA $C057&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Control - Open Apple - Reset&lt;/strong&gt; writes a couple bytes of garbage all across the memory pages when it forces a full reboot. I don't remember the reason for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What &lt;strong&gt;Control - Reset&lt;/strong&gt; did depended on the settings of the soft reset vector. Normally in BASIC this would dump you back to the BASIC prompt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if the soft reset vector is changed by games and programs that don't want to allow you to break out of it, &lt;strong&gt;Control - Reset&lt;/strong&gt; triggers a reboot. Many games would point the reset vector to run destructive code that writes garbage across all memory before resetting. Some would just point it at their program start so you can't get out of it with Control - Reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$3F2 - 3F3 is the two byte JMP location of what to do next when doing a soft reset.&#xA;$3F4 holds an exclusive-OR of location $3F3 with the value #$A5. If it doesn't match the system does a hard reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're running an emulator, you can switch to debug mode to change the reset vector to BF 9D 38 so you can get back to DOS 3.3, assuming the game didn't overwrite the BASIC file manager section of DOS when it loaded. (For hacking of older programs this is considered cheating. They have no defenses in an emulator.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Refs:&#xA;&lt;a href=&quot;http://mirrors.apple2.org.za/ground.icaen.uiowa.edu/MiscInfo/Programming/poweron.monitor&quot; rel=&quot;noreferrer&quot;&gt;http://mirrors.apple2.org.za/ground.icaen.uiowa.edu/MiscInfo/Programming/poweron.monitor&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ProDOS fully obliterates whatever was at $2000 -$5FFF when it boots. Checked this with:&#xA;&lt;a href=&quot;http://mirrors.apple2.org.za/ftp.apple.asimov.net/images/masters/prodos/Apple%20IIe%20ProDOS%20Users%20Disk%20(copied%203-12-85).dsk&quot; rel=&quot;noreferrer&quot;&gt;http://mirrors.apple2.org.za/ftp.apple.asimov.net/images/masters/prodos/Apple%20IIe%20ProDOS%20Users%20Disk%20(copied%203-12-85).dsk&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was no direct way to output high-res images to printers without some additional program. The image contains strips of horizontal dots, 7 per byte. The printer writes dots vertically along its printhead pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many printer cards included onboard ROMs to help make this easier. The Grappler series of printer cards used Control-I  or CHR$(9) to send commands to the card's onboard ROM. ...  PRINT CHR$(9)&quot;GDR&quot;  would print hires page 1, double size, rotated 90, so it would cover an entire Letter / A4 page.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="3687" LastEditDate="2016-11-26T12:10:41.453" LastActivityDate="2016-11-26T12:10:41.453" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1776" PostTypeId="2" ParentId="1755" CreationDate="2016-11-26T10:43:42.687" Score="7" Body="&lt;p&gt;You need to be very careful programming for this because switching read mode between main and aux banks affects everything the Apple II is doing, not just reading data for your program but also reading memory for &lt;strong&gt;running your program&lt;/strong&gt; as well as accessing the BASIC ROM and the Monitor ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fortunately Apple provided a solution for this using what's called AUXMOVE in the tech reference listed in Janka's answer. This can copy data from main to aux, aux to main, without itself crashing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also XFER, which transfers control of running programs between main and aux memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Running code in other memory banks is all the more complex because the zero page and stack areas are handled differently. Code running in aux memory can use the main ZP/stack or the aux ZP/stack, and this can crash programs due to things becoming inconsistent between them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you decide to use the alternate ZP/stack for your code running in aux banks, you need to remember to switch back to the main ZP/stack before transferring control back to code / ROMs in the main bank, or they will likely crash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also this question is more complex if you are talking about systems with more than 128k as there needs to be a way to choose which of the many different banks you want to access. One example is the Applied Engineering RamWorks. These other memory expansion systems will each have their own special way to access their additional memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applied Engineering RamWorks III advertisement: &lt;a href=&quot;http://apple2online.com/web_documents/AE%20RAMworks%20III%20Brochure.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://apple2online.com/web_documents/AE%20RAMworks%20III%20Brochure.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is potentially possible to try to detect what hardware is installed, what amount is available, and then use the appropriate memory access methods to match the installed hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this is made much simpler on the IIgs which provides a way to access more than 64k directly, with extended 24-bit addressing opcodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple example of the problems:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Boot Apple IIe, IIc, IIgs&lt;/li&gt;&#xA;&lt;li&gt;CALL -151&lt;/li&gt;&#xA;&lt;li&gt;300:8D 00 C0 8D 03 C0 8D 05 C0 8D 02 C0 8D 04 C0 60&lt;/li&gt;&#xA;&lt;li&gt;300G&lt;/li&gt;&#xA;&lt;li&gt;Crash!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 300: 8D 00 C0   STA $C000   ; Make sure 80STORE is off&#xA; 303: 8D 03 C0   STA $C003   ; Read from AUX&#xA; 306: 8D 05 C0   STA $C005   ; Write to AUX&#xA; 309: 8D 02 C0   STA $C002   ; Read from MAIN&#xA; 30C: 8D 04 C0   STA $C004   ; Write to MAIN&#xA; 30F: 60         RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This crashes immediately after writing to $C003 to enable reading from the AUX bank, because the program counter is now pointing at $306 in the AUX bank, it tries to read the next line of program code from there, which contains nothing (00 00....) and the program crashes. (The bank modes get reset to normal by the Monitor when the error line prints.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A really dumb and inefficient programming workaround that I discovered is to simply duplicate your code in the same memory locations in both the main and aux banks. So now you can freely toggle back and forth between reading or writing to the main and aux banks and your program won't crash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same code as before, but using AUXMOVE to copy $300 to $30F to the AUX bank before it runs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Boot Apple IIe&lt;/li&gt;&#xA;&lt;li&gt;CALL -151&lt;/li&gt;&#xA;&lt;li&gt;300:8D 00 C0 8D 03 C0 8D 05 C0 8D 02 C0 8D 04 C0 60&lt;/li&gt;&#xA;&lt;li&gt;310:A9 00 85 3C 85 42 A9 10 85 3E A9 03 85 3D 85 43 85 3F 38 20 11 C3 60&lt;/li&gt;&#xA;&lt;li&gt;310G&lt;/li&gt;&#xA;&lt;li&gt;300G&lt;/li&gt;&#xA;&lt;li&gt;Works! Exits with no errors.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;310: A9 00      LDA #$00&#xA;312: 85 3C      STA $3C&#xA;314: 85 42      STA $42&#xA;316: A9 10      LDA #$10&#xA;318: 85 3E      STA $3E&#xA;31A: A9 03      LDA #$03&#xA;31C: 85 3D      STA $3D&#xA;31E: 85 43      STA $43&#xA;320: 85 3F      STA $3F&#xA;322: 38         SEC&#xA;323: 20 11 C3   JSR $C311&#xA;326: 60         RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm sure there are much more elegant ways to do this, but if you are just starting out, and just want to get the job done, without being a super-brain expert at it, and saving bytes and all that, this does work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The &quot;elegant&quot; solution involves storing your program code above $CFFF because $200-BFFF is the region affected by $C003/$C005 $C002/$C004, but then you must deal with swapping out either the BASIC ROM or the Monitor ROM. Ugh.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just make sure that if you use this hack and you are hand-coding in the monitor, that you run AUXMOVE before running your code, or you will have two different programs that are interleaved together across the two memory banks, whenever it toggles back and forth between reading the MAIN or AUX bank.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Self modifying counting code is tricky due to swapping back and forth between reading and writing in MAIN or AUX. It would be better to use the zero page for counters, as it is not swapped out by $C003/$C005. Using memory above $CFFF for your program avoids these problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, before your program code exits, be sure to write to $C002 and $C004 to go back to read/write from the Main bank.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For completeness, I believe this is how this is done using the RAM located at $D000-FFFF to store you main/aux swapping code without it itself getting screwed up.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;300: AD 89 CA    LDA $C089 ; Double read: Read ROM, write RAM&#xA;303: AD 89 CA    LDA $C089 ; $D000-FFFF, use bank 1 $D000-DFFF&#xA;&#xA;306: A0 00       LDY #$00  ; ------&#xA;308: A9 00       LDA #$00  ; Use Monitor MemCopy to copy&#xA;30A: 85 3C       STA $3C   ; the Monitor ROM $F800-FFFF&#xA;30C: 85 42       STA $42   ; to RAM at $F800-FFFF in&#xA;30E: A9 FF       LDA #$FF  ; preparation to read/write&#xA;310: 85 3E       STA $3E   ; $D000-FFFF without it.&#xA;312: 85 3F       STA $3F   ;&#xA;314: A9 F8       LDA #$F8  ;&#xA;316: 85 3D       STA $3D   ;&#xA;318: 85 43       STA $43   ;&#xA;31A: 20 2C FE    JSR $FE2C ;-------&#xA;&#xA;31D: AD 8B C0    LDA $C08B ; Double read: Read/Write RAM&#xA;320: AD 8B C0    LDA $C08B ; $D000-$FFFF, use bank 1 $D000-DFFF&#xA;&#xA;323: A0 00       LDY #$00  ; ------&#xA;325: A9 43       LDA #$50  ;&#xA;327: 85 3C       STA $3C   ; This is running the copied&#xA;329: A9 03       LDA #$03  ; Monitor routines in RAM to&#xA;32B: 85 3D       STA $3D   ; use MemCopy again, this time&#xA;32D: A9 56       LDA #$60  ; to copy from $350-$35F to&#xA;32F: 85 3E       STA $3E   ; $D000 bank 1.&#xA;331: A9 03       LDA #$03  ;&#xA;333: 85 3F       STA $3F   ;&#xA;335: A9 00       LDA #$00  ;&#xA;337: 85 42       STA $42   ;&#xA;339: A9 D0       LDA #$D0  ;&#xA;33B: 85 43       STA $43   ;&#xA;33D: 20 2C FE    JSR $FE2C ; ------&#xA;&#xA;340: 4C 00 D0    JSR $D000 ; Run copied code at $D000&#xA;&#xA;                           ; When code above $D000 returns, do&#xA;343: AD 8A C0    LDA $C08A ; Read ROM, no write, $D000 bank 1&#xA;346: 60          RTS       ; to go back to normal&#xA;&#xA;350: 8D 00 C0    STA $C000 ; ------&#xA;353: 8D 03 C0    STA $C003 ; Same as before, switch to&#xA;356: 8D 05 C0    STA $C005 ; read/write aux memory, then&#xA;359: 8D 02 C0    STA $C002 ; switch back to main memory&#xA;35C: 8D 04 C0    STA $C004 ; -----&#xA;35F: 60          RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Whoops found a bug.... you can't switch back to reading from ROM while running code above $D000, that dun work.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the aux/main switching code is copied up to $D000, the memory area from $300-$35F can be overwritten and reused for something else. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the code has been loaded above $CFFF, if you are using BASIC, you only need a short stub to access it and the copied Monitor.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;6000: AD 8B C0    LDA $C08B ; Double read: Read/Write RAM&#xA;6003: AD 8B C0    LDA $C08B ; $D000-$FFFF, use bank 1 $D000-DFFF&#xA;6006: 20 00 D0    JSR $D000&#xA;6009: AD 8A C0    LDA $C08A ; Reactivate BASIC in ROM&#xA;600C: 60          RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also in this example I am copying the Monitor ROM to RAM, because I am hand-assembling and coding this directly without using a formal compiler. If an error occurs with $D000-FFFF as RAM and you didn't copy the Monitor ROM to RAM, the system will just simply freeze because the ROM routines needed to even display an error message are no longer present. It makes hand-debugging a real pain to not keep the ROM code available in RAM.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="3687" LastEditDate="2016-12-02T03:42:35.120" LastActivityDate="2016-12-02T03:42:35.120" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1777" PostTypeId="2" ParentId="1644" CreationDate="2016-11-26T11:43:20.553" Score="2" Body="&lt;p&gt;For the 6502 CPU, writing a machine code program to be relocatable and still work when loaded at different memory addresses is difficult because dynamic branching can't go up or down more than 128 bytes from the current program pointer position (BNE, BEQ, BMI, BPL).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to do an indirect jump using a lookup table &lt;strong&gt;JMP ($4000)&lt;/strong&gt; but calls to subroutines are fixed &lt;strong&gt;JSR $300&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making a program relocatable is possible, but requires keeping track of all the direct JMPs and JSRs, and doing a one-time initialization that figures out where the program was loaded into memory, and then go through the program code editing all the JMPs and JSRs with the offset from the default loading address, so they will work in the new location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond this, many program's read and write locations would also have to be tracked and manually adjusted, as it was common for programs to be self-modifying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather than using a pointer or zero page location to read or write data, the program would directly modify its own code. A typical simple memory copier that modifies itself:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;300: A9 04       LDA #$04     ; Source page $#04&#xA;302: 8D 0E 03    STA $030E    ; Modify read address&#xA;305: A9 08       LDA #$08     ; Destination page $#08&#xA;307: 8D 11 03    STA $0311    ; Modify write address&#xA;30A: A2 00       LDX #$00     ; Init X register at 0&#xA;30C: BD 00 04    LDA $0400,X  ; Read byte from page&#xA;30F: 9D 00 08    STA $0800,X  ; Write byte to page&#xA;312: E8          INX          ; increment X register&#xA;313: E0 00       CPX #$00     ; Check if it rolled over&#xA;315: D0 F5       BNE $030C    ; No? Do it some more&#xA;317: EE 0E 03    INC $030E    ; Add 1 to page number&#xA;31A: EE 11 03    INC $0311    ; Add 1 to page number&#xA;31D: AD 0E 03    LDA $030E    ; Get source page number&#xA;320: C9 08       CMP #$08     ; Is it at the ending value?&#xA;322: D0 E8       BNE $030C    ; No? Do it some more&#xA;324: 60          RTS          ; Exit&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Although there are no JMP or JSR here, the code modifies locations $30E and $311, and to be relocatable it is necessary to change the code so it modifies itself correctly, for the opcodes at $302, $307, $317, $31A, and $31D. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So relocatable code can be done but it is fiddly, and nothing in the hardware enables this directly, in a manner that the programmer doesn't have to directly and intimately be involved with making it work.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="3687" LastEditDate="2016-11-26T11:48:52.307" LastActivityDate="2016-11-26T11:48:52.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1778" PostTypeId="1" AcceptedAnswerId="1783" CreationDate="2016-11-26T13:34:45.893" Score="6" ViewCount="736" Body="&lt;p&gt;I have a 486 (also another 286 mainboard) with a Hercules card, the plug is the same as RS-232. Is it possible to connect the output with serial port USB adapter and simulate Hercules-compatible monochrome display on a modern PC?&lt;/p&gt;&#xA;" OwnerUserId="3688" LastEditorUserId="75" LastEditDate="2019-11-04T20:36:08.753" LastActivityDate="2019-11-04T20:36:08.753" Title="Hercules to COM&lt;-&gt;USB adapter - is it possible?" Tags="&lt;graphics&gt;&lt;serial&gt;&lt;rs232&gt;&lt;mda&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1779" PostTypeId="2" ParentId="1778" CreationDate="2016-11-26T14:27:06.537" Score="5" Body="&lt;p&gt;If you mean the &lt;a href=&quot;https://en.wikipedia.org/wiki/Hercules_Graphics_Card#Original_Hercules_Graphics_Card&quot; rel=&quot;noreferrer&quot;&gt;original Hercules graphics card&lt;/a&gt; (picture further up), it had a video port and a parallel printer port. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neither can be connected to a RS-232 serial port in a sensible way. And even if you could, there's no way you can simulate a graphics card over an RS-232 connection: The graphics card can be only controlled via the ISA bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to simulate a Hercules card on a modern PC, you can do this with emulator software like &lt;a href=&quot;https://www.dosbox.com/wiki/Configuration:DOSBox&quot; rel=&quot;noreferrer&quot;&gt;dosbox&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-11-26T14:27:06.537" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1780" PostTypeId="2" ParentId="1772" CreationDate="2016-11-27T11:42:18.537" Score="5" Body="&lt;p&gt;The hard part is usually breaking into the program - using perhaps what you refer to as a &quot;programmer's reset&quot; - so I'll add some notes about that below for posterity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To save the HIRES screens you want to be able to either reset to a command prompt first, or directly reboot to DOS 3.3 with HIRES memory intact. Then you can save HIRES page 1 or 2 with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;BSAVE HIRES1,A$2000,L$1FF8&lt;/code&gt; or &lt;code&gt;BSAVE HIRES2,A$4000,L$1FF8&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To load them back and view fullscreen:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;HGR2&#xA;BLOAD HIRES,A$4000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is a summary of the main ways to get to a command prompt with HIRES intact:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;On a II or II Plus, use the Old Monitor ROM (maybe in a &lt;a href=&quot;http://apple2history.org/history/ah13/#06&quot; rel=&quot;noreferrer&quot;&gt;Firmware&#xA;Card or Language Card&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On a II/II Plus or //e use a &lt;a href=&quot;http://planemo.org/retro/senior-prom-reverse-engineering/&quot; rel=&quot;noreferrer&quot;&gt;Senior Prom&lt;/a&gt; or &lt;a href=&quot;http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Debugging/CPS%20Wildcard/&quot; rel=&quot;noreferrer&quot;&gt;Wildcard&lt;/a&gt; (if the software doesn't check for a Wildcard)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On a IIgs use the &lt;a href=&quot;http://www.verycomputer.com/20_2d0b511b5ccb338e_1.htm&quot; rel=&quot;noreferrer&quot;&gt;Visit Monitor CDA&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Boot code trace the disk until the HIRES image is in memory, or hack the disk directly by searching for and modifying the code which sets the soft reset vector (not covered here)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Image the disk and use an emulator (the easiest option today - again, not covered here)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Reset Details &amp;amp; Miscellania&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reset on the Apple II, or Ctrl-Reset on the II Plus, //c and //e, causes the 6502 CPU to jump to the address stored in the reset vector at $FFFC/$FFFD. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the original (Old Monitor) Apple II ROM the reset vector points to a reset handler that falls through to the monitor entry point, so reset will enter the monitor and the HIRES pages will be intact for saving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In an Apple II or II Plus with an Autostart ROM the reset vector points to a reset handler which checks the &quot;soft&quot; reset vector at $3F2-$3F4. If $3F4 == $3F3 EOR #$A5 then it jumps to the address in $3F2/$3F3, otherwise it reboots. Software almost always used the soft reset vector to either prevent exit, or to clear memory and reboot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a Firmware Card is installed then you can use the switch on the back of the card to select the Integer Basic/Old Monitor ROM so reset will enter the monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a 16k RAM Language Card is installed, reset doesn't affect its state, so if high RAM ($D000-FFFF) is switched in when a reset occurs the reset vector is fetched from RAM. Software of that era often took advantage of this, switching in RAM and overwriting the reset vector, making it impossible to reboot the machine without turning of the power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the software doesn't overwrite the reset vector, you can use that trick yourself. From the monitor:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C081 C081       // write enable high RAM&#xA;F800&amp;lt;F800.FFFFM // copy the monitor from ROM to RAM&#xA;FFFC:59 FF      // point the reset vector to the Old Monitor ROM reset handler&#xA;C080            // read enable RAM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now boot the software and press Reset to enter the monitor, then boot DOS and save HIRES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the //e and //c Apple added the Ctrl-OpenApple-Reset feature (referred to as &quot;JIVE&quot; in the source code) to ensure that the user could always reboot the system. While this is exactly the behaviour we would want, it also runs a routine called &quot;BLAST&quot; which writes two bytes to each memory page from BF down to 02, making this feature useless to pirates cracking software - and to us for saving HIRES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reset in these machines also resets the emulated 16k RAM Language Card state to read main ROM so software can't hijack the hard reset vector and neither can we - so we can't use the trick above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the HIRES page you want to capture is mostly black, you could use Ctrl-OpenApple-Reset and then manually fix up HIRES. The following routine will zero out the bytes that BLAST wrote to HIRES1:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      ORG $0300&#xA;BL    EQU $3C&#xA;BH    EQU $3D&#xA;      LDY #$10&#xA;      LDX #$00&#xA;      STX BL&#xA;      LDA #$20&#xA;      CLC&#xA;BLOOP STA BH&#xA;      PHA&#xA;      TXA&#xA;      STA (BL),Y&#xA;      INY&#xA;      STA (BL),Y&#xA;      PLA&#xA;      ADC #1&#xA;      CMP #$40&#xA;      BNE BLOOP&#xA;      RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Other hacking options include &lt;a href=&quot;http://www.textfiles.com/apple/CRACKING/krckwczt.app&quot; rel=&quot;noreferrer&quot;&gt;boot-code tracing&lt;/a&gt; the software to get a HIRES title screen, or searching the disk for code that sets the soft reset vector and changing it to reset into the monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only remaining options are to use additional hardware. You can build or order a &lt;a href=&quot;http://planemo.org/retro/senior-prom-reverse-engineering/&quot; rel=&quot;noreferrer&quot;&gt;Senior Prom&lt;/a&gt; (or other hacking ROMs) for any machine, use a &lt;a href=&quot;http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Debugging/CPS%20Wildcard/&quot; rel=&quot;noreferrer&quot;&gt;Wildcard&lt;/a&gt; (or other copy card), or use an emulator.&lt;/p&gt;&#xA;" OwnerUserId="71" LastActivityDate="2016-11-27T11:42:18.537" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1781" PostTypeId="1" CreationDate="2016-11-27T20:04:39.717" Score="7" ViewCount="425" Body="&lt;p&gt;My aunt gave me her old nes, it was really dirty. I opened it up, cleaned it really good, cleaned the games too. I had to get a new power pack and av cables for it. I plugged everything into my TV  (had to plug it into a mini av to hdmi adaptor) every game I test it with gives me the red blinking light, than when I press reset a image pops up, but there's random white bars going down the screen. I've done some research and I think it's the 72 pin connector, but I've looked at it and none of the pins are connecting. I also have trouble with the nes loading without controllers, whitch is odd because the nes has to have a controller in it to load properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE &#xA;I put in a different 72 pin connector out of a old nes, I'm still having the same problem. I think both pins have been pushed down after games have been left to sit for too long. Would Boling fix that? Or should I just buy a new pair off amazon? &lt;/p&gt;&#xA;" OwnerUserId="3646" LastEditorUserId="3646" LastEditDate="2016-12-03T17:19:29.133" LastActivityDate="2016-12-03T17:19:29.133" Title="NES only works when I press reset" Tags="&lt;nes&gt;&lt;repair&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1782" PostTypeId="2" ParentId="1781" CreationDate="2016-11-27T23:54:27.617" Score="2" Body="&lt;p&gt;I've been working on it. Cleaned the pins and games another time. Plugged in the nes with the case opened, was still getting the lines. I pushed on the game a little and it all went away, worked perfectly fine. I think someone left a game in the nes for too long and it pushed the pins down, I have a spare at home I'll put in next weekend. &lt;/p&gt;&#xA;" OwnerUserId="3646" LastActivityDate="2016-11-27T23:54:27.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1783" PostTypeId="2" ParentId="1778" CreationDate="2016-11-28T13:08:33.160" Score="8" Body="&lt;p&gt;Unfortunately, Hercules plug, while being the same &lt;a href=&quot;https://en.wikipedia.org/wiki/D-subminiature&quot; rel=&quot;noreferrer&quot;&gt;DE-9&lt;/a&gt; plug/socket as &amp;quot;small&amp;quot; RS232, is completely electrically incompatible - other than using the same connector type, there is absolutely nothing in common between the two interfaces. You can damage the card, monitor or RS232 port/converter if you try connecting RS232 with the Hercules port.&lt;/p&gt;&#xA;&lt;p&gt;So, no, neither USB-to-RS232 converter, nor genuine RS232 is going to help you here.&lt;/p&gt;&#xA;&lt;p&gt;I don't know what you can do to create a display for your 486 (other than getting an ISA VGA card in place of your Hercules), but RS232 is definitely not the way to go about it.&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-11-28T13:08:33.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1784" PostTypeId="2" ParentId="1158" CreationDate="2016-11-28T14:12:38.023" Score="23" Body="&lt;p&gt;It was part of the 68000 system architecture in which all the interrupt vectors are low in the memory map.&lt;/p&gt;&#xA;&lt;p&gt;The first 1024 bytes are reserved for these vectors and if a program / os need to change these, hardcoding into ROM wouldn't work.&lt;/p&gt;&#xA;&lt;p&gt;The vendor (Motorola) had application notes in which on a cold boot or reset, the ROM was mapped low.  The idea came from the vendor not the implementation.&lt;/p&gt;&#xA;&lt;p&gt;Thus will RAM mapped low after reset, the OS can setup the vectors in ram and setup a warm-boot reset vector.&lt;/p&gt;&#xA;&lt;p&gt;This is analogous to how the hack on 286 was done to get out of protected mode.  The program saved data in a known area below 1 meg and triple-faulted which caused the processor to reset into real mode.  The OS checked the special location to determine if this was a cold boot or coming out of protected mode to continue to the right function.&lt;/p&gt;&#xA;" OwnerUserId="2018" LastEditorUserId="15334" LastEditDate="2020-10-03T16:25:39.257" LastActivityDate="2020-10-03T16:25:39.257" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1785" PostTypeId="2" ParentId="1755" CreationDate="2016-11-28T18:30:33.673" Score="3" Body="&lt;p&gt;The other answers discussing how to flip the soft switches to access the AUX RAM are absolutely correct. However, there is also a very easy way to make use of the AUX RAM without getting too crazy: just use the RAM disk in ProDOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What problem are you trying to solve that needs additional memory? If it is creating a cache, constructing large tables or otherwise having a lot of data on hand without hitting the disk, you could put it all into the /RAM drive. The advantage here is that you don't have to worry about the different mechanisms of accessing the other banks as it is taken care of for you by ProDOS. Also, you may not have to trash what is in /RAM by disconnecting the RAM disk (a pre-requisite for using AUX RAM) and as an added bonus IRQs work just fine when accessing /RAM unlike the 5.25&quot; driver which has to disable them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps not as fast as writing direct access 6502 code, but arguably a heck of a lot easier and can be done from BASIC without too much difficulty.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-11-28T18:30:33.673" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1786" PostTypeId="1" CreationDate="2016-11-29T08:59:59.500" Score="11" ViewCount="615" Body="&lt;p&gt;I have an old Tektronix Type 611 Storage Display sitting in storage, which I would some day like to get working again. I have the full repair manual on microfiche from Tek.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is essentially an electronic Etch-a-Sketch, and the screen is cleared by &quot;flashing&quot; it. There is also a screen-saver function to darken the screen but retain the stored image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is bi-level, so that a dim electron beam will not be stored, so it is possible to use it both as a normal CRT and as a storage tube at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it turns on, there is a pattern of six &quot;flood beam fields&quot; that appear which keep the written image active, along with burned-in areas from decades of prior use. When flashed for normal use the screen is completely black and writable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looked like this using the original drive control systems:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=YZsiR45tKKw&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=YZsiR45tKKw&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There's a &quot;simple&quot; version with only X/Y/Z BNC connectors for steering and turning the write beam on and off, and a more automated version with a DB-25 connector which also passes the screen-clearing and dimming control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on my own research it appears these were used as components of the Tektronix 4002, and the Type 611 looks pretty much exactly like this big green rectangular box in the top of the 4002 chassis:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://terminals-wiki.org/wiki/index.php/File:Tektronix_4002A_Rear_View_Case_Removed.jpg&quot; rel=&quot;noreferrer&quot;&gt;http://terminals-wiki.org/wiki/index.php/File:Tektronix_4002A_Rear_View_Case_Removed.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://terminals-wiki.org/wiki/index.php/File:Tektronix_4002A_Monitor_Circuit_Overview.jpg&quot; rel=&quot;noreferrer&quot;&gt;http://terminals-wiki.org/wiki/index.php/File:Tektronix_4002A_Monitor_Circuit_Overview.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did not get the 4002 guts to go with it, so the only way I know to make it work is for some electronics genius to build a new one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know of such a thing capable of driving a device like this?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="3687" LastEditDate="2016-11-29T09:09:03.867" LastActivityDate="2016-12-19T16:24:07.400" Title="Modern vector display driver?" Tags="&lt;graphics&gt;&lt;vector&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1787" PostTypeId="2" ParentId="1001" CreationDate="2016-11-29T11:08:37.047" Score="2" Body="&lt;p&gt;I am not an electronics expert so I cannot give a really good answer here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do know that one of the main limitations on far greater speed is going to be how quickly the memory can be accessed. Normal dynamic system memory needs to be refreshed, and is generally slow and needs time to become ready to access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cache RAM meanwhile is typically static RAM which does not need constant refreshing, but has also traditionally been ridiculously expensive so the amount available was tiny, possibly only a few kilobytes vs megabytes of main memory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The processor itself may contain some cache memory internally as part of its own chip logic, but this was also typically very expensive and so even smaller than the external static RAM cache.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at a modern chip like the Intel i7-3820, it has 10 megabytes of cache RAM, the costs of which for a 68000 would have been absolutely ridiculous back in the day, and the processor may not even have the wired electronic capability to directly address the memory space of a cache this large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much of the speed increase of modern systems comes from changes to the memory electronics, which for the older methods topped out at about 133 mhz before double data rate was developed, followed by DDR2, DDR3, and DDR4 today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can't just slap these newer technologies onto an old CPU and just expect it to work. The CPU and its support chips have been designed to work with specific memory architectures, and redesigning to support newer types is so complex that essentially an entirely new chip needs to be fabricated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also older processors generally had a fixed speed clock that ran at a steady rate continuously. If the memory was not ready, the clock continued anyway so the processor constantly used energy even when it was stuck waiting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Old processors were also generally slow enough that they operated fanless. The 68000 was generally installed as a bare chip without either a fan or heatsink.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the same manner, most computers had physical power switches and ran continuously until manually turned off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although mobile systems eventually developed sleep modes to save battery capacity, interest in power savings and processor idling didn't really begin on the desktop until about 1995-2000. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accelerating an old 68000 or 6502 to gigahertz speeds is therefore fraught with peril. Due to the steady clock rate no matter what it is doing, the CPU is going to be a fireball of heat production due to it lacking the ability to slow its clock or briefly sleep if necessary to prevent damaging overheating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And due to the design differences in memory architecture between modern DDR and how the older RAM worked, it may not be possible to make it function at all.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2016-11-29T11:08:37.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1788" PostTypeId="2" ParentId="1781" CreationDate="2016-11-29T13:42:57.880" Score="5" Body="&lt;p&gt;The most common failure of the NES is the 72-pin connector. In short, the pins get bent &quot;open&quot; from the cartridges in the slot after much use and stop making good contact. The blinking power light is the symptom you'd see. Many people felt that blowing in the cartridge would help, but it rarely did anything to help as it was more the re-insertion that would do the trick (but also had the downside of getting the cartridge contacts dirty from the moisture). Best way to help avoid this problem is to not leave games in the NES when you're not playing them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For what it's worth, the machine wasn't &quot;working&quot; when you pressed reset; you were just observing what the machine does when the reset line is pulled. However, it had some value in that it did demonstrate that the machine could display some kind of image since the bars is what you'd expect. But, I would feel that the blinking power light is more indicative of a somewhat healthy NES since it is a status indication of some sort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that you've come to the conclusion that the 72-pin connector is worn out, but instead of ripping it from another you could &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B000A3IA0Y&quot; rel=&quot;noreferrer&quot;&gt;buy a new one from Amazon&lt;/a&gt; instead. Good soldering skills will be required!&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-11-29T13:42:57.880" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1789" PostTypeId="1" AcceptedAnswerId="1793" CreationDate="2016-11-29T18:08:10.230" Score="12" ViewCount="2738" Body="&lt;p&gt;So, I found one of these:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/c7x23.jpg&quot; alt=&quot;IBM5291&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(It's as if it's new, it wasn't ever used, it sat on a bookshelf next to an old CRT monitor, it also has every part).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the front there's a small gray box with the text&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IBM&#xA;5291&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;on it. I tried googling it, but literally nothing useful came up, only pictures from shared folders. No one is writing about it, no one is asking about it on forums, heck, no one even sells one on e-bay or other online markets. The most useful link was from a newspaper archive with a newspaper from '82 mentioning this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's this machine and from when? How much is it worth?&lt;/p&gt;&#xA;" OwnerUserId="762" LastEditorUserId="276" LastEditDate="2017-12-14T10:21:08.390" LastActivityDate="2017-12-14T10:21:08.390" Title="Found an IBM 5291. What is it, from when, and how much is it worth?" Tags="&lt;ibm&gt;&lt;collectability&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1790" PostTypeId="1" CreationDate="2016-11-29T18:14:07.860" Score="7" ViewCount="1169" Body="&lt;p&gt;The game I can't remember the name of was like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You controlled a triangular space-ship which could fly from planet to planet and could land on it. The planets had gravity which made it not so easy to land on them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So its not like asteroid where you can fly only in a limited area, you could fly around.&lt;/p&gt;&#xA;" OwnerUserId="3694" LastEditorUserId="621" LastEditDate="2016-11-29T19:32:11.493" LastActivityDate="2016-12-15T22:12:54.483" Title="Looking for Win95 game with vector graphic" Tags="&lt;windows-95&gt;&lt;identify-this-game&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1792" PostTypeId="2" ParentId="1486" CreationDate="2016-11-29T22:31:48.940" Score="5" Body="&lt;p&gt;I managed to fix the floppy disk drive mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I completly disassemblied the floppy disk drive mechanical system and cleaned each part with lighter fluid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I applied a very light lubrication to the areas where the parts where in contact with one another. Only a really small amount of lubricant is needed (I used an unfolded paperclip to apply it). I couldn't afford teflon-based lubricant so I went for &quot;3-IN-1&quot; oil (cleans, protects from rust and lubricates).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first time I did that and put it back together, I forgot to clean and lubricate the metal piece on the bottom of the mechanism (the part that holds the eject button), so I had to disassembly it once more, clean and lubricate it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After reassembling the floppy disk drive and the Amiga 500, it works fine, even if the mechanism feels a little weak when it ejects the floppy disk (I don't know if that the case of every Amiga floppy disk drives as I only have this one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;P.S: If you do so to repair your Amiga floppy disk drive, be REALLY careful. The springs are easy to lose and some of the plastic parts can be broken easily (I broke a small piece of plastic that was supposed to fit on the bottom a the PCB, thankfully, this piece seems useless).&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="2109" LastActivityDate="2016-11-29T22:31:48.940" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1793" PostTypeId="2" ParentId="1789" CreationDate="2016-11-30T13:42:52.870" Score="14" Body="&lt;p&gt;The IBM5291 is one of the IBM5250 series of terminals.  It provides a user interface to an IBM minicomputer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interface will be by Synchronous Data Link Control (SDLC).  The hardware being paired co-ax wire system.  This enabled a number of these terminals to be daisy chained to a single port on the host minicomputer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of modern emulators around for these terminals, so that you can use, for example, a Windows PC to communicate with your old IBM mini.  However, they use virtual network connections as opposed to physical wired connections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going the other way - using your terminal to communicate with a modern computer - would require a hardware adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a manual for the 5291 available online &lt;a href=&quot;http://www.retrocomputing.eu/documents/5291_MaintenanceLibrary.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; that you may find useful.  It includes the keyboard pinouts, so you can set yourself a challege to repurpose the keyboard for something else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is it worth?  Depends if you can find someone with an AS/400 (or similar) who wants an SDLC compatible terminal for historical reasons.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-11-30T13:42:52.870" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1794" PostTypeId="2" ParentId="1790" CreationDate="2016-11-30T17:10:31.863" Score="2" Body="&lt;p&gt;I thinking that might be a game called Gravitar. It was similar to Lunar Lander, but with a little more to do. Here's the Wikipedia link --- &lt;a href=&quot;https://en.wikipedia.org/wiki/Gravitar&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Gravitar&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3696" LastActivityDate="2016-11-30T17:10:31.863" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1795" PostTypeId="2" ParentId="1630" CreationDate="2016-11-30T19:19:06.570" Score="3" Body="&lt;p&gt;The pdp-7 was in the same family as the pdp-1 and the pdp-4.  Many of the opcodes were carried forward from one computer to the next.  The main changes were the introduction of 2s complement arithmetic in place of the 1s complement arithmetic of the pdp-1, and the use of ASCII codes instead of Fio-Dec.  I'm not certain whether that last one resulted in any changes to the instruction set. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are fairly complete instruction manuals for the pdp-1 on the web.  You might use those as a starting place. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are a couple of links to PDP 1 documentation.&#xA; &lt;a href=&quot;http://www.masswerk.at/spacewar/inside/pdp1-instructions.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pdp 1 Instruction Set&lt;/a&gt; if you just want the instruction set&#xA;&lt;a href=&quot;http://research.microsoft.com/en-us/um/people/gbell/Digital/PDP%201%20Manual%201961.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pdp 1 Manual&lt;/a&gt; if you want the whole manual in pdf format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the other answer for links to PDP 7 docs. &lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2016-12-01T10:57:55.587" LastActivityDate="2016-12-01T10:57:55.587" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1796" PostTypeId="1" AcceptedAnswerId="1797" CreationDate="2016-11-30T23:54:12.170" Score="65" ViewCount="15110" Body="&lt;p&gt;I have heard that the reason the &lt;code&gt;i&lt;/code&gt; variable is used so much is because there was an old computer where each variable could only be a single letter and that reserved the variables &lt;code&gt;a&lt;/code&gt; through &lt;code&gt;h&lt;/code&gt; as internal variables, leaving &lt;code&gt;i&lt;/code&gt; as the first one available to the programmer. This seems believable, as there would be exactly 8 reserved variables which is a nice binary number. I haven't been able to confirm or deny this story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this true? If so, what system was the origin of this behaviour? If it's not true, why was &lt;code&gt;i&lt;/code&gt; used so much in the past?&lt;/p&gt;&#xA;" OwnerUserId="2067" LastActivityDate="2018-10-24T14:45:15.853" Title="Where did the popularity of the `i` variable come from?" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="7" CommentCount="9" FavoriteCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="1797" PostTypeId="2" ParentId="1796" CreationDate="2016-12-01T00:48:02.807" Score="88" Body="&lt;p&gt;FORTRAN made all variables starting with &lt;code&gt;I&lt;/code&gt;, &lt;code&gt;J&lt;/code&gt;, &lt;code&gt;K&lt;/code&gt;, &lt;code&gt;L&lt;/code&gt;, &lt;code&gt;M&lt;/code&gt; and &lt;code&gt;N&lt;/code&gt; integer by default.  So just &lt;code&gt;I&lt;/code&gt; by itself could be conveniently used as a loop variable.  I imagine that choice was made because &lt;code&gt;I&lt;/code&gt;, &lt;code&gt;J&lt;/code&gt;, &lt;code&gt;K&lt;/code&gt;, &lt;code&gt;M&lt;/code&gt; and &lt;code&gt;N&lt;/code&gt; are very commonly used as indices in mathematics.  e.g., a sum of a series will typically be expressed as summing the terms A(i) for i going from 1 to n.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where the practice originated in mathematics I have no idea.  Influential languages such a C followed suit in that the K&amp;amp;R book used &lt;code&gt;i&lt;/code&gt; as an index variable in examples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Final answer: math and inertia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't mention FORTRAN variables starting with &lt;code&gt;i&lt;/code&gt;, etc. because computers essentially did not have lower case back then.  I also intentionally left out &lt;code&gt;L&lt;/code&gt; in math as it tends to be avoided as an index due to confusion with &lt;code&gt;1&lt;/code&gt; and &lt;code&gt;I&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FORTRAN's connection to math is quite strong.  After all, it stands for FORmula TRANSlation with the main foreseen use converting science and engineering forumlas into something the computer can calculate.&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2016-12-01T02:04:56.420" LastActivityDate="2016-12-01T02:04:56.420" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="1798" PostTypeId="1" AcceptedAnswerId="1803" CreationDate="2016-12-01T02:53:55.220" Score="8" ViewCount="943" Body="&lt;p&gt;Advent made the rounds of PDP-10 computers in about 1975.  I once got ahold of the source code in FORTRAN and recoded it in, of all things, Turbo Pascal, but I never got around to thoroughly debugging it. There were just too many pathways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any completed or in-progress restorations of the game in existence?&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="79" LastEditDate="2018-07-04T11:54:30.430" LastActivityDate="2019-04-10T11:54:38.707" Title="Anybody restoring Adventure, an early interactive fiction game?" Tags="&lt;gaming&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1799" PostTypeId="1" AcceptedAnswerId="1800" CreationDate="2016-12-01T03:10:50.750" Score="12" ViewCount="567" Body="&lt;p&gt;When I save a file it has a 'Created At' and 'Updated At' Value saved as well. I would like to know HOW these values are saved? Are they saved as an integer representing a number of seconds since 1904? or are they saved as some kind of string data? Also Where are they saved? as part of the file itself or in the desktop file?&lt;/p&gt;&#xA;" OwnerUserId="2187" LastEditorUserId="175" LastEditDate="2017-03-09T19:35:19.057" LastActivityDate="2018-12-19T11:08:21.793" Title="How are File Timestamps recorded in classic Mac OS?" Tags="&lt;apple-macintosh&gt;&lt;mac-os-classic&gt;&lt;operating-system&gt;&lt;file-format&gt;&lt;hfs&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1800" PostTypeId="2" ParentId="1799" CreationDate="2016-12-01T03:32:45.677" Score="16" Body="&lt;p&gt;The HFS filesystem stores file metadata in a single large file called the &quot;catalog file&quot;, with one record for each file or directory.  Creation and modification times are stored as 32-bit unsigned integers representing a count of seconds since midnight, January 1, 1904.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Source: &lt;em&gt;Inside Macintosh: Files&lt;/em&gt;)&lt;/p&gt;&#xA;" OwnerUserId="4" LastEditorUserId="4946" LastEditDate="2018-12-19T11:08:21.793" LastActivityDate="2018-12-19T11:08:21.793" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="1801" PostTypeId="2" ParentId="1789" CreationDate="2016-12-01T04:40:40.187" Score="10" Body="&lt;p&gt;I tried to locate some Youtube videos that quickly demonstrate what a 5250 terminal screen looks like. This one is pretty good:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=tn9xz1SpuyE&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=tn9xz1SpuyE&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5250 is a block mode display system. The server sends out a blob of data to the terminal, which then by itself formats text in color in a pretty way at 80 columns by 25 lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The server also tells the terminal to create areas where the user can type things, typically displayed as an underlined area, and/or a list of function keys the user can press to send commands back to the server.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The user's terminal is pretty smart by itself, and handles all cursor movement and text entry without constant per-character hand-holding from the server as with a normal unix terminal session.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you send data back to the server, it only sends back what is inside the editable areas. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The terminal protocol is designed to be as efficient as possible so that the server is freed up for actual work, so common commands are assigned to single-press function keys, and the function numbering goes up to F24, so there can be a huge number of them available at any time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can insert and delete characters in the editable text fields but you can't go over the limit of the field length. Because the display of data is so tightly locked down to the 80x25 display area, it is common for commands and names of things to be &quot;smushed&quot; into some very short abbreviation to fit in the limited space available in each column of data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: An interesting side effect of 5250 and 3270 block mode terminal protocols is that they have a very similar modern equivalent... web pages with data entry fields.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to run a web server on an AS/400 that reformats 5250 / 3270 block mode directly into a web page, and reassigns function keys to clickable buttons on the page. With this, terminal hardware or a terminal program is no longer needed, but instead only a web browser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=h0jUbmeV5YU&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=h0jUbmeV5YU&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="3687" LastEditDate="2016-12-01T11:38:24.087" LastActivityDate="2016-12-01T11:38:24.087" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1802" PostTypeId="2" ParentId="2" CreationDate="2016-12-01T05:37:14.113" Score="4" Body="&lt;p&gt;Some game cartridges such as the NES and SNES Zelda included a way to save your game. This was typically done using a lithium button cell to power memory chips inside the cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The battery has a lifespan of about five years, but the battery can also leak which has the potential to spread down the battery leads and into the circuit board, eating away at the metal and destroying them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for these kinds of cartridges you need to be opening them up and replacing the battery, or you won't be able to save the games. It will look like everything is working and saving correctly, right up to the moment the system powers off, and then poof, the data is gone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The battery is most likely soldered onto the cartridge. To replace these kinds of cells you need to buy replacement batteries that have solder tabs already attached. Do not attempt to solder wires onto normal batteries. The heat of the solder gun directly touching the metal case will most likely damage or destroy the battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do a web search for &quot;button cell with solder tabs&quot; and find the same voltage of cell. These are not expensive. If you can't find the same exact type or the cell in the cartridge is not labeled clearly, do a web search on your system type and the game name, and you will likely find the battery that you need. The 3 volt CR2032 is very common for battery backups.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To remove the dead cell, buy some desoldering wick to pull the solder off the board around the battery terminal with a cheap hobbyist soldering iron.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the iron is hot, wipe the tip on a wet sponge to quickly clean the crud off of it before using it to heat the circuit board. Try to minimize the amount of time it touches the board, as too much heat can damage nearby components. Be careful, the tip of the iron will give you severe 3rd degree skin burns instantly on contact. Don't let it fall off the table on the floor, or it'll burn a hole in carpet or vinyl flooring before you can even reach down to pick it up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may need to use a pliers to flatten the battery tab after removing solder with the wick. After removing the cell, use more desoldering wick until the hole in the board is clean. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When attaching the new cell, make sure the polarity is oriented the same way. A reversed polarity cell could possibly damage the circuitry. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To reattach the new cell, use rosin-core solder. The smaller the diameter of the solder, the easier this process will be. Slightly bending the tips of the new battery terminals will keep the battery from falling off the board while you solder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you couldn't find an exact size/type replacement, just remember that the substitute cell should not touch the board anywhere except at the terminal points of the old cell, and the replacement should be near the same height as the original, or it may not fit inside when the cartridge is screwed closed.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2016-12-01T05:37:14.113" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1803" PostTypeId="2" ParentId="1798" CreationDate="2016-12-01T07:15:37.523" Score="22" Body="&lt;p&gt;&lt;a href=&quot;https://pypi.python.org/pypi/adventure/&quot; rel=&quot;noreferrer&quot;&gt;The &lt;code&gt;adventure&lt;/code&gt; module on PyPI&lt;/a&gt; is a faithful, modern re-implementation of the 1977 PDP-10 FORTRAN version of Adventure (aka the “350-point” version), which goes so far as to re-use the exact same &lt;code&gt;advent.dat&lt;/code&gt; file:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This is a faithful port of the “Adventure” game to Python 3 from the original 1977 FORTRAN code by Crowther and Woods (it is driven by the same &lt;code&gt;advent.dat&lt;/code&gt; file!) that lets you explore Colossal Cave, where others have found fortunes in treasure and gold, though it is rumored that some who enter are never seen again.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's available anywhere PyPI runs, and is packaged in particular for &lt;a href=&quot;https://tracker.debian.org/pkg/python-adventure&quot; rel=&quot;noreferrer&quot;&gt;Debian 9 and later&lt;/a&gt; and &lt;a href=&quot;https://launchpad.net/ubuntu/+source/python-adventure&quot; rel=&quot;noreferrer&quot;&gt;Ubuntu 16.10 and later&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4/mark&quot;&gt;Mark&lt;/a&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1798/anybody-restoring-adventure-an-early-interactive-fiction-game/1803#comment2985_1798&quot;&gt;pointed out&lt;/a&gt;, Adventure is available in many other &lt;a href=&quot;https://en.wikipedia.org/wiki/Colossal_Cave_Adventure#Later_versions&quot; rel=&quot;noreferrer&quot;&gt;ports and variants&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-12-01T07:15:37.523" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1804" PostTypeId="2" ParentId="1796" CreationDate="2016-12-01T09:48:54.500" Score="9" Body="&lt;p&gt;The Forth language (from 1970) also used I and J as fixed names for the innermost and second innermost loop counter, so there was precedence as early as then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the convention could be even older than FORTRAN though. Several math notations, such as for summation and tensors, use 'i' as an abbrevation for 'index'. FORTRAN's default types may have been chosen because scientists and mathematicians were already using i in this way.&lt;/p&gt;&#xA;" OwnerUserId="3704" LastActivityDate="2016-12-01T09:48:54.500" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1806" PostTypeId="2" ParentId="1796" CreationDate="2016-12-01T15:35:17.603" Score="8" Body="&lt;p&gt;It came from math, where it was commonly used as a subscript forever.  It was likely popular because of its small size, being legible when printed in a very small font.  &lt;/p&gt;&#xA;" OwnerUserId="3714" LastActivityDate="2016-12-01T15:35:17.603" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1807" PostTypeId="2" ParentId="1796" CreationDate="2016-12-01T16:10:07.013" Score="-2" Body="&lt;p&gt;I was always taught 'i' for iteration - because it is so commonly used in loops.&lt;/p&gt;&#xA;" OwnerUserId="3717" LastActivityDate="2016-12-01T16:10:07.013" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1808" PostTypeId="2" ParentId="1796" CreationDate="2016-12-01T17:10:37.300" Score="0" Body="&lt;p&gt;The practice originated with Fortran.  i-n are the first two letters of &quot;integer&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All other variables in Fortran default to floating point&lt;/p&gt;&#xA;" OwnerUserId="3720" LastActivityDate="2016-12-01T17:10:37.300" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1809" PostTypeId="2" ParentId="1778" CreationDate="2016-12-01T17:56:06.653" Score="1" Body="&lt;p&gt;The Hercules / MDA plug is indeed the same physical as the RS-232 serial port (although 25 pin serial was also used) but the signals are very different. It's absurdly expensive to use this signal for anything these days as the only usage left is industrial but &lt;a href=&quot;http://www.ebay.com/sch/i.html?_odkw=mda+converter&amp;amp;_osacat=0&amp;amp;_from=R40&amp;amp;_trksid=p2045573.m570.l1313.TR0.TRC0.H0.Xmda+vga+converter.TRS1&amp;amp;_nkw=mda+vga+converter&amp;amp;_sacat=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;converters&lt;/a&gt; and even &lt;a href=&quot;http://choiceprinters.com/video/TTL-LCD-touch.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;LCD monitors&lt;/a&gt; exist. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At one time, MDA to VGA/DVI boxes existed and I found a product called usb2isa which allowed plugging ISA cards into modern PCs via the USB bus but these seem to be not available any more.&lt;/p&gt;&#xA;" OwnerUserId="3722" LastEditorUserId="3722" LastEditDate="2016-12-01T18:03:50.657" LastActivityDate="2016-12-01T18:03:50.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1810" PostTypeId="2" ParentId="1778" CreationDate="2016-12-01T20:21:54.713" Score="0" Body="&lt;p&gt;A serial port (let's say 38,400 bits per second), besides being electrically incompatible with Hercules, is far too slow to handle the video bandwidth (720 bits x 348 bits x 50 frames per second = 12,528,000 bits per second).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hercules is &lt;a href=&quot;https://en.wikipedia.org/wiki/Hercules_Graphics_Card#Hercules&quot; rel=&quot;nofollow noreferrer&quot;&gt;essentially an MDA-compatible monochrome card&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Monochrome_Display_Adapter#Competing_adapters&quot; rel=&quot;nofollow noreferrer&quot;&gt;a GBS-8219 converts MDA to 800x600 VGA&lt;/a&gt;, so with that all you need is a USB video capture card that supports VGA input. But I think it will be cheaper to connect the GBS-8219 directly to a VGA monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or a Raspberry Pi supports &lt;a href=&quot;https://www.raspberrypi.org/forums/viewtopic.php?f=44&amp;amp;t=26907&quot; rel=&quot;nofollow noreferrer&quot;&gt;up to about 14-20 MHz&lt;/a&gt; on its GPIO pins, so maybe you can write something to read the Hercules signal and display it on screen, then connect to it from your PC with VNC. Which, by the way, you could do through a USB serial adapter by running a &lt;a href=&quot;https://en.wikipedia.org/wiki/Serial_Line_Internet_Protocol&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLIP&lt;/a&gt; server on your PC, but that would be silly.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2016-12-02T04:54:44.927" LastActivityDate="2016-12-02T04:54:44.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1811" PostTypeId="1" CreationDate="2016-12-01T20:22:46.397" Score="59" ViewCount="15784" Body="&lt;p&gt;Unfortunately Debian kicked out Pentium 1 (i586) CPU support from its 32-bit PC port (named &lt;code&gt;i386&lt;/code&gt; for historic circumstances) for its next stable release Debian 9 Stretch. (Then again they complain that there are no more devices validating the existence of this port in more or less the same breath…)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I wonder which other current and &lt;em&gt;active&lt;/em&gt; Linux or BSD distributions (not &lt;a href=&quot;http://elks.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;ELKS&lt;/a&gt; and not &lt;a href=&quot;http://www.fuzix.org/&quot; rel=&quot;noreferrer&quot;&gt;FUZIX&lt;/a&gt;) do still support 20 years old 32-bit PC hardware (I have e.g. two 760-series Thinkpads with Pentium 1: &lt;a href=&quot;http://www.thinkwiki.org/wiki/Category:760ED&quot; rel=&quot;noreferrer&quot;&gt;760ED&lt;/a&gt; and &lt;a href=&quot;http://www.thinkwiki.org/wiki/Category:760XD&quot; rel=&quot;noreferrer&quot;&gt;760XD&lt;/a&gt;) or current embedded devices like &lt;a href=&quot;https://en.wikipedia.org/wiki/Vortex86&quot; rel=&quot;noreferrer&quot;&gt;Vortex86&lt;/a&gt;-based devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I found:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://wiki.netbsd.org/ports/i386/&quot; rel=&quot;noreferrer&quot;&gt;NetBSD still supports i486 and above&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.freebsd.org/platforms/i386.html&quot; rel=&quot;noreferrer&quot;&gt;FreeBSD still supports i486 and above&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.mirbsd.org/&quot; rel=&quot;noreferrer&quot;&gt;MirBSD&lt;/a&gt; requires at least an i486 and an i486SX does not suffice. (Didn't find this information on their website, but asked on IRC.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I've also tried to figure out what's the minimum CPU requirement of &lt;a href=&quot;http://www.alpinelinux.org/&quot; rel=&quot;noreferrer&quot;&gt;Alpine Linux&lt;/a&gt; for x86 or for &lt;a href=&quot;https://wiki.gentoo.org/wiki/Project:X86&quot; rel=&quot;noreferrer&quot;&gt;Gentoo Linux&lt;/a&gt;, but failed so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://lwn.net/Articles/528893/&quot; rel=&quot;noreferrer&quot;&gt;The Linux kernel no more supports i386 CPUs anymore since version 3.8&lt;/a&gt;. I'm though not sure if Linux still supports i486SX CPUs like the &lt;a href=&quot;http://www.vortex86.com/?p=145&quot; rel=&quot;noreferrer&quot;&gt;Vortex86SX&lt;/a&gt; which have less instructions (IIRC no FPU) and range below a normal i486. Not sure if any current BSD still supports i386 or i486SX CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A related question is &quot;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/194/what-is-the-oldest-computer-capable-of-running-a-modern-version-of-linux&quot;&gt;What is the oldest computer capable of running a modern version of Linux?&lt;/a&gt;&quot;, but I'm not trying to focus on the oldest hardware but on the OS with the lowest CPU requirements to find an OS for given, old hardware. Hence the separate question.&lt;/p&gt;&#xA;" OwnerUserId="3719" LastEditorUserId="3719" LastEditDate="2016-12-01T22:39:05.897" LastActivityDate="2019-06-11T09:03:44.007" Title="Which Linux or BSD distributions do still support i386, i486 or i586 CPUs?" Tags="&lt;intel&gt;&lt;linux&gt;&lt;unix&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="1812" PostTypeId="2" ParentId="1796" CreationDate="2016-12-01T20:45:30.327" Score="-5" Body="&lt;p&gt;Usually we use &lt;code&gt;i&lt;/code&gt; in looping, and for looping we only need iteration. So, from the word 'iterator' came &lt;code&gt;i&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3724" LastEditorUserId="278" LastEditDate="2016-12-14T22:23:30.060" LastActivityDate="2016-12-14T22:23:30.060" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1813" PostTypeId="2" ParentId="1811" CreationDate="2016-12-01T21:35:40.117" Score="12" Body="&lt;p&gt;&lt;a href=&quot;https://www.openbsd.org/i386.html&quot; rel=&quot;noreferrer&quot;&gt;OpenBSD&lt;/a&gt; supports 80486DX and higher.  80486SX is not supported because it lacks floating point.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2016-12-01T21:35:40.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1814" PostTypeId="2" ParentId="1811" CreationDate="2016-12-01T22:02:41.180" Score="23" Body="&lt;p&gt;Linux still supports the 80486 SX: the SX was simply a DX without the FPU, and the FPU emulation code is still present (Processor type and features-&gt;Math emulation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finding a distro is a bit trickier.  Gentoo still supports the 486 in theory (when the installation instructions call for downloading a &quot;stage 3&quot; archive, simply download the &quot;i486&quot; version), but practice is a bit harder.  Gentoo is a source-based distribution, so all packages are compiled on your computer.  As you can imagine, this is a bit slow on a 486, and in my experience, requires at least 250 MB of combined RAM+swap, with at least 48 MB of that as RAM (something a bit rare on 486 systems).&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2016-12-01T22:02:41.180" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1815" PostTypeId="2" ParentId="1811" CreationDate="2016-12-01T22:02:55.490" Score="27" Body="&lt;p&gt;&lt;a href=&quot;http://www.slackware.com/install/sysreq.php&quot; rel=&quot;noreferrer&quot;&gt;Slackware&lt;/a&gt; still claims to support 486s:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Below is a list of minimum system requirements needed to install and run Slackware.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;486 processor&lt;/li&gt;&#xA;&lt;li&gt;64MB RAM (1GB+ suggested)&lt;/li&gt;&#xA;&lt;li&gt;About 5GB+ of hard disk space for a full install&lt;/li&gt;&#xA;&lt;li&gt;CD or DVD drive (if not bootable, then a bootable USB flash stick or PXE server/network card)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Knoppix also still &lt;a href=&quot;http://www.knopper.net/knoppix-info/index-en.html&quot; rel=&quot;noreferrer&quot;&gt;claims to support 486s&lt;/a&gt;, although given that it's based on a mixture of Debian releases I have reason to doubt that:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Intel/AMD-compatible CPU (i486 and up),&lt;/li&gt;&#xA;&lt;li&gt;RAM: at least 120 MB for the graphical desktop. Recommended for working with various office applications: 500MB RAM,&lt;/li&gt;&#xA;&lt;li&gt;a bootable CD-ROM/DVD drive (IDE/ATAPI/SATA, Firewire, USB), or USB flash disk,&lt;/li&gt;&#xA;&lt;li&gt;a standard SVGA-compatible graphics chipset,&lt;/li&gt;&#xA;&lt;li&gt;PS/2 or USB Mouse.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The current Linux kernel still supports &lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/x86/Kconfig.cpu?id=c9661c1e80b609cd038db7c908e061f0535804ef#n53&quot; rel=&quot;noreferrer&quot;&gt;486 CPUs&lt;/a&gt;, including FPU-less CPUs (it still has a &lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/x86/Kconfig?id=d396360acdf7e57edcd9e2d080343b0353d65d63#n1726&quot; rel=&quot;noreferrer&quot;&gt;FPU emulator&lt;/a&gt;). Vortex86SX CPUs are actually &lt;a href=&quot;https://en.wikipedia.org/wiki/Vortex86#Vortex86SX&quot; rel=&quot;noreferrer&quot;&gt;FPU-less i586-class CPUs&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-06-11T09:03:44.007" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1816" PostTypeId="2" ParentId="1798" CreationDate="2016-12-01T22:04:52.083" Score="6" Body="&lt;p&gt;The most complete list of Adventure variants I know of is at &lt;a href=&quot;http://advent.jenandcal.familyds.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://advent.jenandcal.familyds.org/&lt;/a&gt; -- that includes commercial ports as well as open-source versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(ETA: Page appears to be offline as of July 2018 - the &lt;a href=&quot;https://web.archive.org/web/20180324225245/http://advent.jenandcal.familyds.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;wayback machine&lt;/a&gt; has a recent copy).&lt;/p&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="1912" LastEditDate="2018-07-04T09:25:03.413" LastActivityDate="2018-07-04T09:25:03.413" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1817" PostTypeId="2" ParentId="406" CreationDate="2016-12-02T00:27:12.143" Score="8" Body="&lt;p&gt;I have found a technique used by demosceners that relies on accessing the ULA from a I/O port other than $FE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This technique is used to get full screen (including borders) graphics and animations. The technique works as follows: let's say you have graphics shown on the screen, the regular way, and you want to superimpose a scrolling text that goes from right to left, from the very right edge of the screen to the very left edge, that is, the text is shown sometimes over the border area, sometimes over the paper area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually, controlled changes in the border colour are accomplished by writing to port $FE at a very precise moment, and controlled changes in paper colour by writing a new attribute value to memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But having a text that scrolls over border and paper needs a way to do this as fastest as possible, so the code shouldn't have to test if the ULA is painting the border or the paper, so the code switches to writing to port $FE or writing to memory. That's too many wasted cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, this technique allows for changes to the screen regardless of whether border or paper is being scanned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trick uses the two screen buffers present on 128K models. The main screen with the graphic, and the shadow screen, which presents a solid colour filling the entire paper area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The scrolling text is written by writing to an I/O port at very precise times. For that, a port that triggers both the ULA and the paging hardware is used, such as $7FFC. Writing to this port writes to both the ULA and the 128K paging hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The value written to this port is 0001agrb where:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a is 0 if we want to show the background image or background border, and 1 if we want to show the scrolled text.&lt;/li&gt;&#xA;&lt;li&gt;rgb is the RGB code of the colour we want to show on the border: 000 is used for the background border and any other value corresponding to the colour of the scrolled text. For example, for a white text, it would be 111. The shadow screen is filled with this same colour.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To quickly change from background to scrolled text, the value 00011grb is stored in a register, and it is xored to the accumulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to start drawing the text, 00011grb is written to port $7FFC. If the ULA is scanning the paper area, this causes the shadow screen to be displayed, and a certain RAM bank to be paged in area $C000-$FFFF (which we won't care about). If the ULA is scanning the border area, this causes the border to be of this colour. The shadow screen will be selected as well, but as the ULA is not drawing the paper area, it won't matter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To stop drawing text and revert to the background image, 00001000 is written to port $7FFC, which causes the regular screen buffer to be displayed (if the ULA is scanning the paper area) and the border to be black (if it is scanning the border area).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This technique can be observed in the small demo Scroll 2017:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/mYm1a.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mYm1a.gif&quot; alt=&quot;Scrolling Text GIF&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="7946" LastEditDate="2018-02-07T09:09:36.947" LastActivityDate="2018-02-07T09:09:36.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1818" PostTypeId="1" AcceptedAnswerId="1822" CreationDate="2016-12-02T01:14:47.207" Score="18" ViewCount="2382" Body="&lt;p&gt;Take the Microsoft C 1.0 compiler for example.  It shipped on multiple 5.25&quot; 360K disks, and when it ran on machines without internal hard disk, so users had to switch floppies between the editor, compiler, and linker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there was a bug with the implementation of the editor or compiler itself, how could an end user report it?  How did big software companies (such as Microsoft or Borland) open up channels of communication over user-reported issues?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="79" LastEditDate="2020-03-11T07:57:04.920" LastActivityDate="2020-03-11T12:37:01.557" Title="How were bugs reported for compilers that were shipped on floppy disks?" Tags="&lt;history&gt;&lt;programming&gt;&lt;compilers&gt;&lt;debugging&gt;" AnswerCount="9" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1820" PostTypeId="1" AcceptedAnswerId="1821" CreationDate="2016-12-02T04:22:44.217" Score="10" ViewCount="397" Body="&lt;p&gt;While I was writing a program on an Apple IIe, I set up access the graphics page using softswitches, and then tried to draw on it, but the system crashed so hard I had to do a Control - Open Apple - Reset reboot to get out of it. What happened?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Boot DOS 3.3&#xA;&#xA;10 POKE -16304,0: POKE -16301,0: POKE -16297,0: POKE -16300,0&#xA;20 HCOLOR = 3&#xA;30 HPLOT 0,0 TO 279,159&#xA;&#xA;RUN&#xA;** CRASH to monitor **&#xA;Control-C to return to BASIC&#xA;&#xA;Each time RETURN is pressed, it says ?SYNTAX ERROR&#xA;&#xA;Press Control-Reset&#xA;Doesn't help, still says ?SYNTAX ERROR when RETURN is pressed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2016-12-02T04:22:44.217" Title="Apple II: HPLOT crashes system. Why?" Tags="&lt;apple-ii&gt;&lt;applesoft-basic&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1821" PostTypeId="2" ParentId="1820" CreationDate="2016-12-02T04:22:44.217" Score="11" Body="&lt;p&gt;In order for the drawing commands to work, they need to know what graphics page to use. Since HGR or HGR2 was not used, this setting (address $00E6) is left undefined, and is at the default boot-time value of zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when HPLOT is used in this manner, it draws on &quot;graphics page zero&quot; from $0000-1FFF, and writes a string of bytes across the zero page and the stack, which then totally corrupts the system state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use HPLOT like this without showing the hi-res graphics page 1, you will also see a slanted line of characters appear across the text screen, as it proceeds to corrupt everything in the first 8 kilobytes of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to draw on Hi-Res page 1 without clearing it first, use &lt;strong&gt;POKE 230, 32&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To draw on Hi-Res page 2 without clearing it first, use &lt;strong&gt;POKE 230, 64&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to use a hidden Hi-Res page 3 to store an image, at $6000-7FFF using &lt;strong&gt;POKE 230,96&lt;/strong&gt;  ... any higher than this is not usable since DOS 3.3 normally starts at $9600.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2016-12-02T04:22:44.217" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1822" PostTypeId="2" ParentId="1818" CreationDate="2016-12-02T07:55:38.737" Score="29" Body="&lt;p&gt;In the early PC days, letter-writing was still common, and that was at first the main channel of communication to report issues. When CompuServe took off that became the preferred forum, at least in the US. Phone support was also always an option!&lt;/p&gt;&#xA;&lt;p&gt;Here's a typical contact section from a manual, in this case the &lt;a href=&quot;https://archive.org/details/bitsavers_borlandtur1987_10489658&quot; rel=&quot;noreferrer&quot;&gt;1987 Turbo C manual&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;How to Contact Borland&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The best way to contact Borland is to log on to Borland's Forum on CompuServe: Type &lt;code&gt;GO BOR&lt;/code&gt; from the main CompuServe menu and select “Enter Language Products Forum” from the Borland main menu. Leave your questions or comments there for the support staff to process.&lt;/p&gt;&#xA;&lt;p&gt;If you prefer, write a letter detailing your comments and send it to:&lt;/p&gt;&#xA;&lt;p&gt;[...]&lt;/p&gt;&#xA;&lt;p&gt;As a last resort, if you cannot write to us for some reason, you can telephone our Technical Support department. Please have the following information handy before you call:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;product name and version number&lt;/li&gt;&#xA;&lt;li&gt;computer make and model number&lt;/li&gt;&#xA;&lt;li&gt;operating system and version number&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(the phone numbers were provided in a separate document in the box).&lt;/p&gt;&#xA;&lt;p&gt;As mentioned in the answers to &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/1403/79&quot;&gt;How were analytics gathered on software built for retrocomputing platforms?&lt;/a&gt;, when that stopped scaling, users wrote to magazines instead, in the hope that their problem would grab the magazine writers' attention and they would either solve it themselves, or use their contacts in the relevant company. Actually that's not quite accurate, users started writing to magazines with programming problems as soon as magazines existed!&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-12-02T08:56:32.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1823" PostTypeId="2" ParentId="1818" CreationDate="2016-12-02T13:14:04.453" Score="23" Body="&lt;p&gt;I worked for Borland in the UK doing support for Turbo C 1 to 1.5. Most contact was via mail or telephone in those days. Bugs were sent over to the US after we did some triage to check if they could be reproduced; I think it was all stored in Reflex (a Borland-produced database) and we got copies of the database periodically. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We had Compuserve, MCI mail, Bix &amp;amp; Cix accounts for online support, but most things were over the phone. We'd normally mail customers replacement floppies, or sometimes we would fax over instructions if the patch was small enough. IIRC there was a patch for the first version of Turbo C which did floating point constant-folding in the wrong order for division (a bit of a show-stopper given the first example in K&amp;amp;R).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used to phone my US colleagues in the late afternoon to find out what was happening to bugs or if they already knew about a new issue. We'd use MCI mail to communicate with the US over an X.25 Pad system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the support issues were solved by turning on all of the compiler warnings after the user sent over the source code (in the mail) and working through them. Lots of users of Turbo C were still writing pre-ANSI K&amp;amp;R style C with some fairly dodgy casts, so often the bugs were in their code. Sometimes it was things like double-to-single promotion with function prototypes where classic K&amp;amp;R declarations&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;extern float myfunc();  &#xA;&#xA;float myfunc(p)&#xA;float p&#xA;{}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;actually defines &lt;code&gt;p&lt;/code&gt; to be a &lt;code&gt;double&lt;/code&gt; due to type promotion (I've forgotten the exact details as it's nearly 30 years ago).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actual bugs were rare; the only other one I can remember is that code like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;outportb(0x3fe,inportb(0x3fe)&amp;amp;0x55)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;didn't work if you included the &lt;code&gt;&amp;lt;dos.h&amp;gt;&lt;/code&gt; header file which turned the function calls into inline x86 calls and the compiler threw away the result of the &lt;code&gt;inportb&lt;/code&gt; for some reason.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="7946" LastEditDate="2020-03-11T09:02:14.823" LastActivityDate="2020-03-11T09:02:14.823" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="1824" PostTypeId="5" CreationDate="2016-12-02T14:36:21.730" Score="0" Body="&lt;p&gt;Use this tag for questions related to the processing and display of vector graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;/questions/tagged/graphics&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;graphics&amp;#39;&quot; rel=&quot;tag&quot;&gt;graphics&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-12-02T14:36:21.730" LastActivityDate="2016-12-02T14:36:21.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1825" PostTypeId="4" CreationDate="2016-12-02T14:36:21.730" Score="0" Body="For questions related to vector graphics" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-12-02T14:36:21.730" LastActivityDate="2016-12-02T14:36:21.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1827" PostTypeId="2" ParentId="1818" CreationDate="2016-12-02T19:18:08.660" Score="5" Body="&lt;p&gt;You could easily say that having no proper forward channel to customers was the same problem as having no backwards channel to the software vendor. The internet has made a lot of things easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For games and cheap software, you had to mainly live with the bug, work around it, or be lucky to find a patch in a magazine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The User Registration Card that came with some more expensive software was a much more important thing than it is today (Do they still have it? I don't think so). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Major bugs in commercial software were, however, a much more crucial thing than it is today - Send a patch via e-Mail, or offer a fix as a download, and you're done. In the old days, disk-based software was often dubbed and shrink-wrapped by third party suppliers - most software houses didn't do that themselves. In case you found a bug, you had to throw away whole batches of software packages across the whole delivery chain and replace them with new versions - major catastrophe. Existing and registered users would maybe get a &quot;fix pack&quot; on some disks to make them happy - But the more important factor really was the packages not yet sold. You had to call them back from the shops and replace them with new, fixed packages (Or have the shopkeepers add the fix packages to the existing sets, wich was only just a tad easier)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That did, maybe, have some impact on quality control because that way a severe bug was much more expensive than it commonly is today (But you could also argue that software wasn't quite as complex back then, and you might probably be right).&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2016-12-02T19:18:08.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1828" PostTypeId="1" AcceptedAnswerId="1834" CreationDate="2016-12-02T20:22:48.270" Score="5" ViewCount="405" Body="&lt;p&gt;I'm not asking for opinions, recommendations or reviews.  I'm looking for professional, graphical music creation software for the classic line of Macintosh computers. I'm not looking for &lt;em&gt;mod&lt;/em&gt; or &lt;em&gt;tracker&lt;/em&gt; applications.  But applications where you can drag-n-drop musical notes on sheet music.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please include information such as the names of applications that were produced.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="278" LastEditDate="2016-12-04T09:05:18.013" LastActivityDate="2016-12-04T09:05:18.013" Title="What are some names of professional music software for the Macintosh Classic / SE?" Tags="&lt;software&gt;&lt;mac-os-classic&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1829" PostTypeId="2" ParentId="1818" CreationDate="2016-12-02T23:19:44.687" Score="6" Body="&lt;p&gt;Fax was another option. We were in contact with Borland in the early days of Object Vision. The poor thing wasn't able to do anything useful for us, and we exchanged issues and documentation with Borland via faxes. Software patches and some DLLs required to extend the functionality of the software were transfered via modem. This was on 1993.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2016-12-02T23:19:44.687" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1830" PostTypeId="1" CreationDate="2016-12-03T02:37:55.323" Score="5" ViewCount="351" Body="&lt;p&gt;I got this R.O.B (Robotic Operating Buddy for the NES), first time I turned him on his arms wouldn't close, so I took him apart and cleaned him. I put the gears back into place. After turning him on again and testing him he won't move up or down. His arms open and close now, but they are a little loose and don't line up straight (I don't have all the screws in the case so that's probably the problem) the gears look like they are all in the right place. Any ideas? (Also, why can't I upload a picture? It says &quot;error logged&quot; after it loads)&lt;/p&gt;&#xA;" OwnerUserId="3646" LastEditorUserId="1880" LastEditDate="2017-09-12T16:07:32.903" LastActivityDate="2017-09-12T16:07:32.903" Title="R.O.B can't move up or down" Tags="&lt;nes&gt;&lt;repair&gt;" AnswerCount="0" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="1831" PostTypeId="2" ParentId="1818" CreationDate="2016-12-03T03:12:13.613" Score="3" Body="&lt;p&gt;First note that the question implies that 5.25&quot; 360K disks was the beginning of computer programming and it was not. Before IBM designed the IBM PC, IBM had already designed and implemented many computer systems and operating systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sophisticated communications capabilities existed before the internet. IBM had SNA. IBM's PROFS even had an email system that existed before the IBM PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For IBM PC systems there was something called serial communications that could be used to transfer data over phone lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Prior to floppies there was tape, as in magnetic tape, that has existed for more than a half a century. Magnetic tapes were relatively inexpensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was totally possible to send a floppy in the mail.&lt;/p&gt;&#xA;" OwnerUserId="3756" LastEditorUserId="3756" LastEditDate="2017-07-11T06:09:39.040" LastActivityDate="2017-07-11T06:09:39.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1832" PostTypeId="2" ParentId="1402" CreationDate="2016-12-03T08:00:50.740" Score="3" Body="&lt;p&gt;I used, and still have, the Laser C compiler for Atari ST. It is the later version of what was first branded as the Megamax C compiler. It was/is actually a pretty good C dev environment. It has quite a few libraries for useful functions and relevant stuff for the hardware and OS.&lt;/p&gt;&#xA;" OwnerUserId="3758" LastActivityDate="2016-12-03T08:00:50.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1833" PostTypeId="2" ParentId="1683" CreationDate="2016-12-03T08:13:05.250" Score="0" Body="&lt;p&gt;Are you sure it isn't the sound of the data? I have listened to the tapes using an audio player, and it sounds about the same. It is useful because you get immediate information about what is or isn't going on, without needing some computer program to interpret and provide information to the user. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a tape, this is useful because you can tell if you started playing at the right point or not. It also lets you know if the data part of the tape is passed yet the computer had something go wrong and is failing to launch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a disk, this is useful because you learn what it sounds like when it's working properly or not working in various ways, and when it's doing something and when it's not. This is very handy for diagnosing problems such as slightly off plug connections or something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From experience using them for many years, I'd say the audio was really helpful and they would've been more frustrating without the audio hints and reassurance.&lt;/p&gt;&#xA;" OwnerUserId="3758" LastActivityDate="2016-12-03T08:13:05.250" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1834" PostTypeId="2" ParentId="1828" CreationDate="2016-12-03T19:21:35.847" Score="5" Body="&lt;p&gt;A great one was ConcertWare -- it included composition, playback, and even instrument creation by specifying waveform samples. (It still runs under Mini vMac.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the About box for Version 2.00 from 1985, the program was written by Chad Mitchell, Robert Gardner, and Boyd Edwards, and was published by Great Wave Software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a typical composition window:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/M4E4O.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/M4E4O.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3762" LastEditorUserId="3762" LastEditDate="2016-12-03T19:29:41.753" LastActivityDate="2016-12-03T19:29:41.753" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1835" PostTypeId="1" CreationDate="2016-12-03T22:58:40.807" Score="14" ViewCount="5892" Body="&lt;p&gt;I'd like to try to create software (and maybe simple games) for the MSX standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know I have two ways to do so, either I use MSX Basic or Z80 assembly. I think that Z80 assembly is more powerful than MSX Basic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already have experience with programming but I never did on old systems like the MSX.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to know if anyone has good ressources/tutorials/guides on how to develop programs for the MSX strandard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd also like to know if there are any ways to develop such programs on a modern day system (maybe via emulator). I'm currently running Linux Mint, is there any kind of &quot;IDE&quot; that would allow me to do so?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastActivityDate="2019-04-22T08:38:34.713" Title="MSX Assembly/Basic programming documentation" Tags="&lt;programming&gt;&lt;assembly&gt;&lt;basic&gt;&lt;msx&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1836" PostTypeId="2" ParentId="1835" CreationDate="2016-12-04T01:07:10.903" Score="5" Body="&lt;p&gt;I've found that the &lt;a href=&quot;http://map.grauw.nl/&quot; rel=&quot;noreferrer&quot;&gt;MSX Assembly Page&lt;/a&gt; has some great resources.  I think their &lt;a href=&quot;http://map.grauw.nl/resources/z80instr.php&quot; rel=&quot;noreferrer&quot;&gt;Z80 instruction set overview&lt;/a&gt; page and &lt;a href=&quot;http://map.grauw.nl/sources/&quot; rel=&quot;noreferrer&quot;&gt;code samples&lt;/a&gt; are just what you're looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.msx.org/forum/development/msx-development/vampiers-quest-assembly-hopefully-n00b-guide-assembly&quot; rel=&quot;noreferrer&quot;&gt;noob guide&lt;/a&gt; on MSX.org may also help you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I realize that this is pretty much a link-only answer.  If I can, I will try to elaborate on this answer and provide additional resources.)&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-12-04T01:07:10.903" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1837" PostTypeId="1" AcceptedAnswerId="1838" CreationDate="2016-12-04T04:04:53.940" Score="16" ViewCount="4421" Body="&lt;p&gt;On some cartridge-based video game systems (NES, Game Boy Color, etc.) it is possible to remove the cartridge while the game system is still powered on.  What kind of damage can this behavior do to the system hardware or game itself?&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2017-07-16T12:50:14.020" Title="Can removing a cartridge from an NES (or any other cartridge-based game system) damage the hardware or software?" Tags="&lt;hardware&gt;&lt;nintendo&gt;&lt;nes&gt;&lt;nintendo-64&gt;&lt;game-cartridge&gt;" AnswerCount="6" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1838" PostTypeId="2" ParentId="1837" CreationDate="2016-12-04T04:04:53.940" Score="13" Body="&lt;h3&gt;Hardware&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;No damage to the hardware should occur (unless by chance removing the cartridge physically damages the hardware contacts).  The reason for this is is that loading a cart basically completes a big circuit the the system hardware.  There is no internal storage (at least not on the NES/SNES/N64 and Game Boy), so there is no persistent memory to corrupt.  On the N64, removing a cartridge mid game will freeze any instructions and I/O, and the last frame before the disconnect will be displayed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some systems (such as the original Game Boy), lock the cartridge into place to prevent improper removal or hot-swapping.  I believe this was removed from the Game Boy Pocket onward, but it's also possible the Game Boy Color was the first version to no longer have this lock (I no longer have each system to check).  Instructions were added to gracefully shut down the system on improper cartridge removal to these systems.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Software&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;It is possible that with any improper removal, any game that uses internal memory to save player information (think The Legend of Zelda save files or Mario Kart track times) could become corrupted.  This can also occur by powering down the system while a save is in progress.  Many games have defensive programming to handle such issues.  The player is alerted that internal data has become corrupted, and will reset to some default values.  It is also possible that a poorly programmed cart could be rendered useless with corrupted data, rendering it unplayable.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Additional Notes&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Newer systems, such as the Nintendo DS and above have code in place to gracefully handle improper cartridge removal.  In fact, the original DS can actually run if a game is inserted improperly.  If the contacts are dirty or blocked somehow, the system menu will load, and a GBA game or PictoChat can run without issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Nintendo 64 game Banjo-Tooie, Rare originally planned to create a feature where the player would intentionally hot swap Banjo-Kazooie and Banjo-Tooie to transfer items between the two games (or, at least unlock new items in Banjo-Tooie from Banjo-Kazooie) called &quot;Stop 'n' Swop&quot;.  In development on the SGI Indy Workstations, the RAM lasted much longer, I think about seven seconds, from when the cartridge was removed to when the data would be purged.  The SGI boxes turned out to be more powerful than the actual retail hardware, and in production a player would have less than one second to perform a successful hot swap.  Thus, the feature was abandoned.&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-12-04T04:04:53.940" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1839" PostTypeId="1" AcceptedAnswerId="1843" CreationDate="2016-12-04T04:21:22.730" Score="93" ViewCount="27381" Body="&lt;p&gt;Reading the NESdev wiki page on &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/CPU_unofficial_opcodes&quot;&gt;CPU unofficial opcodes&lt;/a&gt;, I see a few games use an undocumented 2-byte NOP instuction in production: Puzznic, F-117A Stealth Fighter, and Infiltrator use &lt;code&gt;$89 #i&lt;/code&gt;.  Beauty and the Beast uses &lt;code&gt;$80 #i&lt;/code&gt;.  Additionally, Dynowarz uses the 1-byte NOPs &lt;code&gt;$DA&lt;/code&gt; and &lt;code&gt;$FA&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why would the devs do this?  What benefit do these instructions provide when developing for the 6502?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2016-12-05T18:43:11.097" LastActivityDate="2021-03-31T12:33:47.187" Title="Why would a NES game use an undocumented 1-byte or 2-byte NOP in production?" Tags="&lt;programming&gt;&lt;nes&gt;&lt;assembly&gt;&lt;6502&gt;&lt;software-development&gt;" AnswerCount="7" CommentCount="13" FavoriteCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="1840" PostTypeId="2" ParentId="1837" CreationDate="2016-12-04T05:09:17.367" Score="6" Body="&lt;p&gt;Technically, it &lt;strong&gt;could&lt;/strong&gt; damage the cart and/or the NES or other console.  It &lt;em&gt;probably&lt;/em&gt; won't, but it could.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Removing (or inserting) a cartridge on a live system is similar to de-bouncing issues with push buttons.  See, as the cart edge is being pulled from the edge connector, for a few microseconds, it could produce electric arcs back and forth from any of the pins such as the address bus, data bus, etc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because our human hands are so clumsy and slow, compared to the 5V (or whatever) traveling through the pins, the pins can physically &quot;bounce&quot; several times in a few microseconds.  Removing a cartridge would be the same.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, NES carts are actually pretty tough.  Again, it &lt;strong&gt;probably&lt;/strong&gt; won't damage it, but it certainly &lt;strong&gt;could&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is why I don't suggest it.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2016-12-04T05:09:17.367" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1841" PostTypeId="2" ParentId="1837" CreationDate="2016-12-04T06:38:41.130" Score="18" Body="&lt;p&gt;The NES can be damaged by &lt;em&gt;software&lt;/em&gt;, so removing the cartridge at just the wrong timing could theoretically damage the console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2CO2 PPU in the NES normally reads the background color from palette index 0, but this isn't hard-wired into the chip -- it actually reads the palette index of the background from four EXT pins.  These pins are grounded on the NES, forcing the palette index to 0, but an arcade board using the 2CO2 or a similar chip could connect these pins to another PPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bit 6 of &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/PPU_registers#Controller_.28.242000.29_.3E_write&quot; rel=&quot;noreferrer&quot;&gt;PPUCTRL&lt;/a&gt; selects whether the PPU should run in master or slave mode.  If the PPU is in master mode, it reads the palette index from the EXT pins as explained above, but in slave mode, &lt;em&gt;it outputs the palette indices it is currently drawing to the EXT pins.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way, the images from two PPUs can be layered.  The slave PPU draws one image, and the master draws another image on top of that and outputs the combined images.*&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NES didn't use that feature, but the hardware still exists in the PPU.  If the PPU is set to slave mode, it will attempt to output the background palette index to the EXT pins.  If it outputs a 1 to any of these pins, &lt;strong&gt;it will cause a short&lt;/strong&gt; from Vcc, through the PPU, and to ground (because the EXT pins are grounded).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose the game is writing to its memory, for example address &lt;code&gt;$200&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sta $0200&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If the cartridge is removed at just the wrong time and &lt;code&gt;D7&lt;/code&gt; floats high, that instruction could become &lt;code&gt;sta $2220&lt;/code&gt;, which is mirrored to &lt;code&gt;$2000&lt;/code&gt;.  If bit 6 of &lt;code&gt;A&lt;/code&gt; is set, the PPU will be set into slave mode and potentially damaged.  It's unlikely that  just the right bit will be flipped at just the right time, but it's possible.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;*: The image generated by the slave PPU can only use colors from the background palette of the main PPU because there are only 4 EXT pins, not 5.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="409" LastActivityDate="2016-12-04T06:38:41.130" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1842" PostTypeId="2" ParentId="1839" CreationDate="2016-12-04T07:53:42.410" Score="36" Body="&lt;p&gt;I'm just speculating here, but one possible reason for using a 2-byte NOP would be if you wanted to change an existing 2-byte instruction into a NOP (to fix a bug, for instance), without changing the byte count for the instruction.  (An undocumented 2-byte NOP might execute more quickly than two standard 1-byte NOPs in succession.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might do this to avoid changing the addresses of other instructions (maybe there's an already-prepared table with those addresses, or there's a JMP or a JSR that you can't change, or an indirect JMP where you compute an address and you don't want to have to change the computation, or there's some relative addressing that would be messed up by the change, etc.).  You might also want to just patch existing machine-language code without going through the assembler (or compiler) again.&lt;/p&gt;&#xA;" OwnerUserId="3762" LastActivityDate="2016-12-04T07:53:42.410" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1843" PostTypeId="2" ParentId="1839" CreationDate="2016-12-04T10:31:54.610" Score="119" Body="&lt;p&gt;One use is as a copyright mechanism. Many distributors would steal/copy programs and sell pirate or derivative copies, by changing the text strings inside the code and reordering the blocks, it was hard to prove the code had been stolen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Placing noops of different types you could put a signature sequence which was much easier to detect and hard to hide. A particular piece of working code could be argued as an &quot;accidental&quot; match, but the same argument was not possible for a sequence of noops. 32 noops spread through 4096 bytes of code makes the accidental argument, 4 billion times weaker using less than 1% of extra memory.&lt;/p&gt;&#xA;" OwnerUserId="3774" LastActivityDate="2016-12-04T10:31:54.610" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1844" PostTypeId="2" ParentId="1752" CreationDate="2016-12-04T10:32:15.597" Score="11" Body="&lt;p&gt;Access to the memory is toggled between the CPU and the video controller every four CPU cycles (the length of a word access&lt;sup&gt;&lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-02/1984_02_BYTE_09-02_Benchmarks#page/n33/mode/2up&quot; rel=&quot;noreferrer&quot; title=&quot;Page 33 of Byte Magazine, February 1984 issue&quot;&gt;[2#p32]&lt;/a&gt;&lt;/sup&gt;) during display of the frame buffer.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=Macintosh_128K&amp;amp;oldid=750186216#Processor_and_memory&quot; rel=&quot;noreferrer&quot; title=&quot;Processor and memory section of the Wikipedia article on the Macintosh 128K&quot;&gt;[1§2]&lt;/a&gt;&lt;/sup&gt; The processor is a Motorola 68000 @7.8836 MHz, meaning that this lock / unlock happens approximately every 0.5 microseconds. During blanking intervals, the CPU has exclusive access to the DRAM,&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=Macintosh_128K&amp;amp;oldid=750186216#Processor_and_memory&quot; rel=&quot;noreferrer&quot; title=&quot;Processor and memory section of the Wikipedia article on the Macintosh 128K&quot;&gt;[1§2]&lt;/a&gt;&lt;/sup&gt; except during the last word access where the sound generator has access.&lt;sup&gt;&lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-02/1984_02_BYTE_09-02_Benchmarks#page/n33/mode/2up&quot; rel=&quot;noreferrer&quot; title=&quot;Page 33 of Byte Magazine, February 1984 issue&quot;&gt;[2#p32]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Access to RAM is divided  into synchronous time slots, with the 68000 and video circuits sharing alternate word accesses during the live portion of the horizontal video-display line and the sound circuits using the video time slot during the last memory bus cycle of the  horizontal line.  Although the  access to RAM is divided three ways, the 68000's share is maximized by giving it access to unused cycles during horizontal and vertical blanking. This way, 68000 access to RAM averages to a speed of about 6 MHz.&lt;sup&gt;&lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-02/1984_02_BYTE_09-02_Benchmarks#page/n33/mode/2up&quot; rel=&quot;noreferrer&quot; title=&quot;Page 33 of Byte Magazine, February 1984 issue&quot;&gt;[2#p32]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From this information I conclude that the Macintosh Classic does in fact use a form DMA to display video: more specifically, &lt;a href=&quot;https://en.wikipedia.org/wiki/Direct_memory_access#Cycle_stealing_mode&quot; rel=&quot;noreferrer&quot;&gt;cycle-stealing mode&lt;/a&gt;. It is not clear that there is a DMA controller as such - there may only be the blanking interrupts and the assumption that the code's memory reads and writes will be spaced appropriately.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-01-02T11:57:03.510" LastActivityDate="2017-01-02T11:57:03.510" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1845" PostTypeId="2" ParentId="1634" CreationDate="2016-12-04T12:12:32.560" Score="1" Body="&lt;p&gt;The Amiga 880 Kbyte floppy drive was identical to the 720 Kbyte pc drive (raw storage about 1 Mbyte). Raw data was captured from the drive, stored in memory using DMA and then processed with the help of the Blitter. The hardware equivalent of less than a 100 lines of code. Physically the controller was much smaller than the PC controller, it was software which significantly increased its flexibility. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 1GHz Android Phone has over 100 times the performance of an Amiga, but I doubt it has more than 10 times the perceived performance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To interface you do not need an Amiga, a microchip PIC32 would be sufficient and could be programmed in C, and in his experience copy protected discs could be captured and used actively, and work on unaligned (old) drives. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: Stephen Craimer, who implemented and tested the original external drives 5.25 and 3.5, wrote this in front of me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;He also thought that a usb dongle equivalent Amiga would be cool but doubts that there is sufficient interest/funding to justify the $100k cost to produce a $50 Amiga which would double as a wrist watch/viewer.&lt;/p&gt;&#xA;" OwnerUserId="3774" LastActivityDate="2016-12-04T12:12:32.560" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1846" PostTypeId="2" ParentId="1494" CreationDate="2016-12-04T14:40:00.157" Score="3" Body="&lt;p&gt;This is a quick answer.&#xA;The TAS instruction is a Read Modify Write operation and the Write may not succeed because the TAS instruction is the only instruction 5 half-cycles long.&#xA;All other operations are an even number of cycles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simplified the CPU is never halted, or grants the bus it is only delayed. Half the accesses (odd) to the Chipmemory are dedicated to the chipset and invisible to the CPU. The other half (even) are only available to the CPU if the chipset did not use them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A TAS instruction attempts to write during the odd cycle and this is not permitted at the hardware level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can go into more detail if there is interest, or you can review the TAS timings at page  4-6 in the 68000 Users Manual at  &lt;a href=&quot;http://www.nxp.com/assets/documents/data/en/data-sheets/M68000UM.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.nxp.com/assets/documents/data/en/data-sheets/M68000UM.pdf&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="3774" LastActivityDate="2016-12-04T14:40:00.157" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1847" PostTypeId="2" ParentId="1479" CreationDate="2016-12-04T15:05:09.850" Score="3" Body="&lt;p&gt;Quote from Stephen Craimer who worked at Los Gatos before and after the Amiga Launch when he saw this question.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;I also worked with on the FCC issues, both for the Amiga and after.&#xA;  unless the law has changed, the interference you cause by removing a&#xA;  shield opens you up to a Law Suite in a residential context. The AMIGA&#xA;  was a noisy beast, it used high power TTL bus drivers on relatively&#xA;  long wires.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The UK boxes had the shield painted on the plastic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I do not recommend it, unless you build a Faraday shield, wrap it in grounded Aluminum Foil, or probably when operating the Amiga in a commercial context (office building) all at your own risk.&lt;/p&gt;&#xA;" OwnerUserId="3774" LastEditorUserId="621" LastEditDate="2016-12-04T22:56:42.850" LastActivityDate="2016-12-04T22:56:42.850" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1848" PostTypeId="2" ParentId="1839" CreationDate="2016-12-04T15:39:33.097" Score="16" Body="&lt;p&gt;On the 6502, it's pretty common for code to use the BIT instruction to skip over bits of code; the most common usage pattern is skipping over a 2-byte instruction using a 3-byte BIT, but the approach could also work skipping over a one-byte instruction with a 2-byte BIT.  For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;EnterWithCarrySet:&#xA;    sec&#xA;    db  $24   ; Bit ZP&#xA;EnterWithCarryClear:&#xA;    clc&#xA;MainEntry:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The only effects of the BIT instruction are to perform a read of the&#xA;indicated address and update the Z and V flags.  In most cases, setting&#xA;the flags will be harmless even if it's not particularly desirable.&#xA;The ABS and ZP forms of &quot;NOP&quot; are similar, except they can be used in&#xA;cases where it's desirable to leave the flags alone.  Additionally,&#xA;there is &quot;NOP immediate&quot; instruction which fetches the byte following&#xA;the opcode but does not perform a subsequent access to the location&#xA;indicated thereby, thus saving a cycle.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="2037" LastEditDate="2016-12-04T18:18:53.263" LastActivityDate="2016-12-04T18:18:53.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1849" PostTypeId="2" ParentId="1001" CreationDate="2016-12-04T16:36:24.667" Score="6" Body="&lt;p&gt;Many older architectures were designed so that the speed of internal operations would be well-balanced with the speed of memory technologies that were available at the time.  They were also designed to balance the cost of circuitry within a microprocessor or microcontroller with the cost of required support circuitry.  As technologies have changed, the ideal balances of performances and cost have shifted, so an architecture which was well balanced in the 1970s-1990s would be quite unbalanced today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, many systems that used older processors relied upon the precise performance characteristics thereof.  Code to generate video on an Atari 2600 or read an Apple II floppy disk would produce garbled results if instructions ran any slower &lt;em&gt;or faster&lt;/em&gt; than expected.  Making a faster processor useful on such systems would require that it include a mode which ran at exactly the same speed as on the old system and have a means of switching to and from that mode when required.  While some boards for a system like the Apple II may have been able to manage that in such a way as to work with most existing software (e.g. include some high-speed memory separate from memory on the board, use that memory instead of the motherboard memory for regions outside $0400-$0BFF and $2000-$5FFF, and double the CPU speed whenever accessing the fast memory and the floppy motor isn't running) but since the required logic would vary depending upon the target system it would be difficult to include the logic within a CPU chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is one 1970s architecture (the General Istruments PIC) for which speeds were pushed successfully in a third-party clone (the Parallax Scenix line).  I'm not sure why Microchip (the company that inherited the GI design) never came up with anything even close, and unfortunately Scenix clones have been out of production for years now.  I've never used one, but from what I understand a Scenix chip could read an I/O bit and conditionally update other bits 20ns later--a level of responsiveness which even modern controllers can't match.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-12-04T16:36:24.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1851" PostTypeId="1" AcceptedAnswerId="1853" CreationDate="2016-12-05T01:16:10.897" Score="9" ViewCount="2144" Body="&lt;p&gt;I was wondering if there existed a way to fix the difference in the running speeds of a PAL NES to run on TV's in the United States? Be it some converter or messing with the NES itself.&lt;/p&gt;&#xA;" OwnerUserId="3785" LastEditorUserId="276" LastEditDate="2016-12-22T12:53:01.677" LastActivityDate="2017-01-02T02:29:34.993" Title="PAL NES in USA, 50Hz vs 60Hz" Tags="&lt;hardware&gt;&lt;nes&gt;&lt;ntsc&gt;&lt;pal&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1852" PostTypeId="2" ParentId="1839" CreationDate="2016-12-05T01:20:23.127" Score="70" Body="&lt;p&gt;The NES was also from the era where some sound and graphics resources were also executable code.  (Typically, this worked the other way around.  Identify a needed sound and listen to chunks of the binary to find a reasonable candidate.)  Injecting NOPs can improve the look or sound derived from a section of executable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.2600connection.com/interviews/larry_martin/interview_larry_martin.html&quot; rel=&quot;noreferrer&quot;&gt;Example&lt;/a&gt;:  &quot;One of the more-challenging aspects of the development was searching the code for byte sequences that could also be reused as sound effects data.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This causes no end of difficulties for recompiling these executables to target modern CPUs since you can either have the original instructions (with correct sounds and graphics) or you can have working instructions (with garbled sound and graphics).&lt;/p&gt;&#xA;" OwnerUserId="3784" LastEditorUserId="3784" LastEditDate="2016-12-05T01:47:29.687" LastActivityDate="2016-12-05T01:47:29.687" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1853" PostTypeId="2" ParentId="1851" CreationDate="2016-12-05T06:18:08.567" Score="9" Body="&lt;p&gt;You'll have to get a PAL to NTSC converter.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;A modification to make a PAL NES to output NTSC video would be &lt;em&gt;extremely&lt;/em&gt; difficult because both the console and the games are designed for the video signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NES's &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/Clock_rate&quot; rel=&quot;noreferrer&quot;&gt;clock frequencies&lt;/a&gt; were chosen to match the timing of the video signal, so you'd have to replace the clock circuitry.  The PPU is hard-wired to generate either NTSC or PAL video, so you'd have replace that too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, games designed for NTSC consoles might work if you disabled the CIC, but PAL games won't run properly:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Games relying on precise timing (complex raster effects, for example) may have problems.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For some games, the shorter VBlank time on NTSC will cause &lt;em&gt;major&lt;/em&gt; graphical glitches (scrolling will be messed up and tiles will written to the wrong places).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Games will run sped up due to being run at 60 Hz instead of 50.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Audio won't sound right because audio generation is based on the clock.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="409" LastActivityDate="2016-12-05T06:18:08.567" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1855" PostTypeId="2" ParentId="1839" CreationDate="2016-12-05T14:45:42.683" Score="11" Body="&lt;p&gt;It's more than 30 years since I don't develop anything for a 8 bit computer, and specifically for a 6502 processor, but recompiling as we understand it nowadays it was not possible. You had to code right on the memory addresses, and moving blocks of code was a feature that only advanced tools had. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes I left 'gaps' between pieces of code filled with NOPs just in case you need to code something in the middle. The problem was when you did not have enough 'gaps' or because of performance restrictions several NOPs could impact in the overall performance of your game. Then I started to play with non documented instructions until I was able to adjust performance and 'gaps' for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe those guys had the same problem I had when I developed for Oric computers...&lt;/p&gt;&#xA;" OwnerUserId="3809" LastActivityDate="2016-12-05T14:45:42.683" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1856" PostTypeId="2" ParentId="1839" CreationDate="2016-12-05T17:25:27.423" Score="-2" Body="&lt;p&gt;NOPs are used for synchronization of IO in many 8-bit architectures that lack more sophisticated instructions and a capability to control the bus effectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples include a lack of wait states for memory or IO, serial communications, lack of direct memory transfer, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cartridge based systems are rife with NOPs, as are devices that have need of user input devices, such as a controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In x86 serial communications, a popular macro that included NOPs was called &quot;punt&quot;.&lt;/p&gt;&#xA;" OwnerUserId="3822" LastActivityDate="2016-12-05T17:25:27.423" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1857" PostTypeId="2" ParentId="1839" CreationDate="2016-12-05T17:55:48.030" Score="35" Body="&lt;h2&gt;A mistake?&lt;/h2&gt;&#xA;&lt;p&gt;The instruction &lt;code&gt;$89&lt;/code&gt; on the 6502 is a two-byte NOP. Based on adjacent instructions in the opcode matrix, especially &lt;code&gt;LDA #ii&lt;/code&gt; (&lt;code&gt;$A9 ii&lt;/code&gt;), it would have been &lt;code&gt;STA #ii&lt;/code&gt;, a store to an immediate value, which makes no sense. On the 65C02, this instruction is changed to &lt;code&gt;BIT #ii&lt;/code&gt;, which almost behaves as a two-byte &lt;code&gt;NOP&lt;/code&gt;. One hypothesis is that a programmer working on both NES projects and projects for some 65C02-based system forgot that the original 6502 lacked &lt;code&gt;BIT #ii&lt;/code&gt;, but because the instruction does so little anyway, the programmer didn't notice any difference.&lt;/p&gt;&#xA;&lt;h2&gt;Clockslide&lt;/h2&gt;&#xA;&lt;p&gt;A &lt;strong&gt;clockslide&lt;/strong&gt; is a is a sequence of instructions that wastes a small constant amount of cycles plus one cycle per executed byte, no matter whether it's entered on an odd or even address.&#xA;With official instructions, one can construct a clockslide from CMP instructions: &lt;code&gt;... C9 C9 C9 C9 C5 EA&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Disassemble from the start and you get &lt;code&gt;CMP #$C9 CMP #$C9 CMP $00EA&lt;/code&gt; (6 bytes, 7 cycles).&lt;/li&gt;&#xA;&lt;li&gt;Disassemble one byte in and you get &lt;code&gt;CMP #$C9 CMP #$C5 NOP&lt;/code&gt; (5 bytes, 6 cycles).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;A calculated start address into a clockslide can be used with indirect jumps (&lt;code&gt;JMP (aaaa)&lt;/code&gt; or &lt;code&gt;LDA highbyte PHA LDA lowbyte PHA RTS&lt;/code&gt;) to precisely control timing, such as when playing PCM audio or sending video register changes to the PPU in a raster effect.&#xA;It's even more important on the Atari 2600, where the &lt;em&gt;whole screen&lt;/em&gt; is a raster effect.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;CMP&lt;/code&gt; has a side effect of destroying most of the processor status flags, but unofficial instructions that skip one byte can be used to preserve them.&#xA;For example, replace &lt;code&gt;$C9&lt;/code&gt; (&lt;code&gt;CMP&lt;/code&gt;) with &lt;code&gt;$89&lt;/code&gt; or &lt;code&gt;$80&lt;/code&gt;, which skips one immediate byte, and replace &lt;code&gt;$C5&lt;/code&gt; with &lt;code&gt;$04&lt;/code&gt;, &lt;code&gt;$44&lt;/code&gt;, or &lt;code&gt;$64&lt;/code&gt;, which reads a byte from zero page and ignores it.&lt;/p&gt;&#xA;&lt;h2&gt;Watermarking&lt;/h2&gt;&#xA;&lt;p&gt;As LOIS 16192 mentioned, the official NOP instruction (&lt;code&gt;$EA&lt;/code&gt;) can be inserted at random places in a particular subroutine that isn't an inner loop. This can identify authorship of a piece of code in a way similar to &lt;a href=&quot;https://en.wikipedia.org/wiki/Trap_street&quot; rel=&quot;nofollow noreferrer&quot;&gt;trap streets&lt;/a&gt;. But it adds even more entropy to use unofficial NOPs (&lt;code&gt;$1A&lt;/code&gt;, &lt;code&gt;$3A&lt;/code&gt;, &lt;code&gt;$5A&lt;/code&gt;, &lt;code&gt;$7A&lt;/code&gt;, &lt;code&gt;$DA&lt;/code&gt;, or &lt;code&gt;$FA&lt;/code&gt;), two-byte NOPs (&lt;code&gt;$80 ii&lt;/code&gt;, &lt;code&gt;$82 ii&lt;/code&gt;, &lt;code&gt;$89 ii&lt;/code&gt;, &lt;code&gt;$C2 ii&lt;/code&gt;, &lt;code&gt;$E2 ii&lt;/code&gt;), or two-byte NOPs that read the zero page (&lt;code&gt;$04 dd&lt;/code&gt;, &lt;code&gt;$44 dd&lt;/code&gt;, or &lt;code&gt;$64 dd&lt;/code&gt;). And now that NES games are manufactured with flash memory instead of mask ROM, each cartridge can have a slightly different pattern of NOPs. This can help identify exactly which copy of a game was leaked to the warez scene.&lt;/p&gt;&#xA;&lt;p&gt;As with clockslide, watermarking can also be done without unofficial instructions. But because of the cost of copying a mask ROM, this sort of watermarking wasn't actually used in games during the original commercial era of the Famicom and NES (1983 to 1996). It may be in use in homebrew-era games (2010 and later).&lt;/p&gt;&#xA;&lt;h2&gt;Sources&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I originally wrote this answer for &amp;quot;&lt;a href=&quot;https://wiki.nesdev.com/w/index.php/Programming_with_unofficial_opcodes&quot; rel=&quot;nofollow noreferrer&quot;&gt;Programming with unofficial opcodes&lt;/a&gt;&amp;quot; in NESdev Wiki&lt;/li&gt;&#xA;&lt;li&gt;&amp;quot;&lt;a href=&quot;http://www.pagetable.com/?p=669&quot; rel=&quot;nofollow noreferrer&quot;&gt;Clockslide: How to waste an exact number of clock cycles on the 6502&lt;/a&gt;&amp;quot; by Sven Oliver Moll&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="586" LastEditorUserId="3290" LastEditDate="2020-07-03T05:14:12.050" LastActivityDate="2020-07-03T05:14:12.050" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="1858" PostTypeId="1" AcceptedAnswerId="1862" CreationDate="2016-12-05T19:30:59.723" Score="55" ViewCount="8585" Body="&lt;p&gt;The British ZX Spectrum computer had many clones in the Eastern Bloc. It seems many of them were built using Russian-made chips from the Angstrem factory in Zelenograd in/near Moscow. The Russian Wikipedia mentions the КР1858ВМ3 which is a Z80 clone, and the Т34ВГ1, which is the same thing as a ZX Spectrum ULA.&lt;/p&gt;&#xA;&lt;p&gt;How were these chips made? Could they have possibly taken a Western chip and taken it apart somehow, to manually build a netlist, as was recently done to the 6502? Or was someone able to procure the masks from Zilog's and Sinclair's engineers?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-04-13T17:36:21.117" LastActivityDate="2021-04-13T17:36:21.117" Title="How were Western computer chips reverse-engineered in USSR?" Tags="&lt;zx-spectrum&gt;&lt;z80&gt;&lt;pdp-11&gt;&lt;ussr&gt;&lt;reverse-engineering&gt;" AnswerCount="8" CommentCount="20" FavoriteCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="1859" PostTypeId="2" ParentId="1835" CreationDate="2016-12-05T20:08:01.247" Score="5" Body="&lt;p&gt;Here's a small &lt;em&gt;Hello, World!&lt;/em&gt; in Z80 Assembly, built entirely through cross-assembly and emulation:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ;; hello-msx.asm - hello world for msx - scruss&#xA;    org 40000&#xA;CHPUT:  equ $00A2&#xA;&#xA;    ld hl, msg&#xA;    call puts&#xA;    ret&#xA;    &#xA;puts:               ; print 0-terminated string in HL&#xA;    ld a,(hl)&#xA;    or a&#xA;    ret z&#xA;    call CHPUT      ; displays one character in A&#xA;    inc hl&#xA;    jr puts&#xA;    &#xA;msg:    defm &amp;quot;Hello, world!&amp;quot;,13,10,0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Compile it to a simple binary image with &lt;a href=&quot;https://savannah.nongnu.org/projects/z80asm&quot; rel=&quot;noreferrer&quot;&gt;z80asm&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;z80asm -o hello-msx.bin hello-msx.asm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Convert this to an MSX binary with header using &lt;a href=&quot;https://www.z88dk.org/wiki/doku.php&quot; rel=&quot;noreferrer&quot; title=&quot;z88dk&quot;&gt;z88dk&lt;/a&gt;'s appmake command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;appmake +msx -b hello-msx.bin -o hellomsx.msx&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This MSX binary can be copied to a disk image. MSX disks were 720 KB DSDD FAT images, so there are lots of ways of making these. I used &lt;a href=&quot;https://sites.google.com/site/slumpmax/development/msx-home-computer/msxdiskimage&quot; rel=&quot;noreferrer&quot; title=&quot;MSX Disk Image&quot;&gt;MSX Disk Image&lt;/a&gt;, mainly because remembering all the right commands for dd, mkfs and mount are too much for me to remember.&lt;/p&gt;&#xA;&lt;p&gt;With openmsx and suitable ROMs, you can run it from disk:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;openmsx -machine msx2 -diska msx1.dsk&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pL7f2.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pL7f2.png&quot; alt=&quot;openmsx showing output&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;z80asm is supposed to include some MSX-specific library files. As I only used one &lt;a href=&quot;http://map.grauw.nl/resources/msxbios.php&quot; rel=&quot;noreferrer&quot;&gt;BIOS call&lt;/a&gt;, including them was a bit much.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;z88dk &lt;em&gt;also&lt;/em&gt; has an assembler called z80asm, and it's not compatible with the one I used. z88dk has some MSX specific options: &lt;a href=&quot;https://www.z88dk.org/wiki/doku.php?id=platform:msx&quot; rel=&quot;noreferrer&quot; title=&quot;MSX hints &amp;amp; tools&quot;&gt;MSX hints &amp;amp; tools&lt;/a&gt; — though if you're using a packaged Linux distribution, it may not support all of the newer options.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Although shown running on an MSX2, this code is MSX 1 compatible. I only used MSX2 as it has obvious disk suport, and my version of z88dk didn't seem to support audio for making cassette images.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;z88dk can also develop from a Small C dialect, creating MSX binaries directly: &lt;code&gt;zcc +msx -create-app -o hello-c hello.c&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="439" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-12-05T20:08:01.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1860" PostTypeId="2" ParentId="1835" CreationDate="2016-12-05T20:53:09.223" Score="11" Body="&lt;p&gt;Here are some useful resources for MSX development (&lt;strong&gt;disclaimer&lt;/strong&gt;: all created by me)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Konamiman/msx2-Technical-Handbook&quot; rel=&quot;noreferrer&quot;&gt;MSX2 Technical Handbook:&lt;/a&gt; A must to learn how the internals of MSX computers work, and also a reference of MSX BIOS and MSX BASIC commands. &lt;em&gt;Originally published by ASCII Corporation in paper, I converted it to text files back in the 90s and then to a GitHub repository in 2019).&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you want to develop using C, a very good tool is &lt;a href=&quot;http://sdcc.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;SDCC&lt;/a&gt;. If you want to give it a try, take a look at &lt;a href=&quot;http://www.konamiman.com/msx/msx-e.html#sdcc&quot; rel=&quot;noreferrer&quot;&gt;the libraries I have developed&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you prefer assembly, take a look at &lt;a href=&quot;https://github.com/Konamiman/Sjasm&quot; rel=&quot;noreferrer&quot;&gt;Sjasm&lt;/a&gt;, a very nice assembler. &lt;em&gt;Originally developed by Sjoerd Mastijn and distributed as a ZIP file, I published it as a Git repository and added compatibility with the MSX assembler Compass.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Konamiman/MSX&quot; rel=&quot;noreferrer&quot;&gt;My MSX software repository&lt;/a&gt; can be useful if you like to learn by reading others' source code.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But enough of me! Other fine resources by other amazing MSX users are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.msx.org/wiki/&quot; rel=&quot;noreferrer&quot;&gt;The Wiki on the MSX Resource Center&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://msx.hansotten.com/&quot; rel=&quot;noreferrer&quot;&gt;MSX Info Pages&lt;/a&gt; by Hans Otten, especially &lt;a href=&quot;http://msx.hansotten.com/index.php?page=msxhw&quot; rel=&quot;noreferrer&quot;&gt;the Technical Info section&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://map.grauw.nl/&quot; rel=&quot;noreferrer&quot;&gt;MSX Assembly Page&lt;/a&gt; by Grauw has a ton of useful information&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Side note: if you need to learn (or refresh) Z80, did you know that Programming the Z80 by Rodnay Zaks &lt;a href=&quot;http://www.z80.info/zaks.html&quot; rel=&quot;noreferrer&quot;&gt;is available online?&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the IDE, I just use Visual Studio (since I use it for work anyway) as a simple text editor and build by running SDCC or Sjasm from the command line. Other people use different tools, adapting them to their needs; here is for example &lt;a href=&quot;http://andrear.altervista.org/home/sdcceclipse.php&quot; rel=&quot;noreferrer&quot;&gt;an article on how to use Eclipse to develop for SDCC&lt;/a&gt;. But I don't know of any IDE specifically built for MSX (or any other retro platform) development.&lt;/p&gt;&#xA;" OwnerUserId="130" LastEditorUserId="130" LastEditDate="2019-04-22T08:38:34.713" LastActivityDate="2019-04-22T08:38:34.713" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1861" PostTypeId="1" CreationDate="2016-12-05T21:10:21.697" Score="8" ViewCount="2052" Body="&lt;p&gt;My Sega Genesis/Mega Drive II get stuck (the image on the screen seems frozen) after some incidents that occurred to it. It doesn't matter when that is happened, which game did I play or even how hot is it gets. For instance, it happened when it bump from something, like from moving it the slightest with the cord (because it's really short).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But my major concern is when I leave it still, at some pause menu, for a while (because, you know, there weren't so many games for it with a save feature), let's say, for an hour.&#xA;I can fix it if I'll push the reset button, of course, but the temperature of the Mega Drive is still somewhat between 60°C-80°C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if it's a defect with the production, or is it only with mine. I suspect this is happening because of a loose connection between the controller nor the cartridge, because it happened even if staying at &quot;idle&quot; after a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that the reason is due the overheat of the component circled in this image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.imgur.com/5HIBoKE.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/5HIBoKE.jpg&quot; alt=&quot;A motherboard with a tall, silver electrical component circled.&quot;&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3824" LastEditorUserId="3824" LastEditDate="2016-12-05T22:55:38.220" LastActivityDate="2016-12-06T16:19:05.807" Title="Why is my Sega Genesis/Mega Drive II getting frozen?" Tags="&lt;repair&gt;&lt;sega-genesis&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1862" PostTypeId="2" ParentId="1858" CreationDate="2016-12-05T21:33:33.507" Score="41" Body="&lt;p&gt;Little is known about how these computers and chips were made, because their development was top secret in the Soviet Union. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, Soviet Western-compatible ICs were made by copying masks used in fabrication or by buying manufactured products under fake identities and smuggling them back into Socialist countries where they were reverse-engineered either at function, or silicon level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a quick sum-up of when I had a similar question, searched around Russian sites and asked older professors at my university. Some more data for comparison can be obtained by reverse-engineering the soviet chips and comparing them to decaps of their Western counterparts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a document somewhere with more stories, comparisons and links to some other decaps of Soviet chips, but I can't find it right away. I will update this answer with relevant information when (if) I find that document.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;КР1858ВМ1 and Т34ВМ1 (clones of Z80), &lt;a href=&quot;http://web.archive.org/web/20170317054159/https://zeptobars.com/ru/read/KR1858VM1-Z80-MME-Angstrem&quot; rel=&quot;noreferrer&quot;&gt;according to the Zeptobars company&lt;/a&gt;, were based on copied masks. Compare: &lt;a href=&quot;http://web.archive.org/web/20160702213821if_/http://s.zeptobars.com/KR1858VM1-HD.jpg&quot; rel=&quot;noreferrer&quot;&gt;die shot of КР1858ВМ1&lt;/a&gt; and &lt;a href=&quot;http://web.archive.org/web/20160528122713if_/http://s.zeptobars.com/Z80A-HD.jpg&quot; rel=&quot;noreferrer&quot;&gt;die shot of authentic Z80&lt;/a&gt;. Also: &lt;a href=&quot;http://web.archive.org/web/20160619215010if_/http://s.zeptobars.com/t34vm1-Z80-HD.jpg&quot; rel=&quot;noreferrer&quot;&gt;die shot of Т34ВМ1&lt;/a&gt; and &lt;a href=&quot;http://web.archive.org/web/20160528122922if_/http://s.zeptobars.com/z80-Z0840004PSC-HD.jpg&quot; rel=&quot;noreferrer&quot;&gt;die shot of Z0840004PSC&lt;/a&gt;. КР1858ВМ3 is an improved version of the same chip, however it is almost certain that little was changed from КР1858ВМ1. Another interesting thing is the U880/6 on the crystal of the chip. This is the name of German version of Z80, meaning that the masks they used originated in Germany. &lt;a href=&quot;http://web.archive.org/web/20160528123215/http://zeptobars.com/en/read/z80-cmos-KR1858VM3-transistor-integral-belarus&quot; rel=&quot;noreferrer&quot;&gt;The updated (CMOS) version КР1858ВМ3&lt;/a&gt; does not have this marking and looks quite different in general both from its predecessor and &lt;a href=&quot;http://visual6502.org/images/Z84C00/Z84C00_die_shot_20x_1b_7000w.jpg&quot; rel=&quot;noreferrer&quot;&gt;Z84C00&lt;/a&gt; (CMOS version of Z80).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Т34ВГ1 was not decapped as far as I know, however there are two theories on what's inside them (&lt;a href=&quot;http://web.archive.org/web/20170620131753/http://www.155la3.ru/t34vg1.htm&quot; rel=&quot;noreferrer&quot;&gt;Russian source&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Independently designed functionally compatible circuit;&lt;/li&gt;&#xA;&lt;li&gt;Gate-array programmed to imitate the original ULA.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="156" LastEditorUserId="717" LastEditDate="2017-11-07T17:21:37.520" LastActivityDate="2017-11-07T17:21:37.520" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1863" PostTypeId="2" ParentId="1858" CreationDate="2016-12-05T22:34:09.973" Score="19" Body="&lt;p&gt;You could reverse-engineer those early CPUs by grinding or etching away the top (plastic) layer of the chips down to the silicon die and examine the chip structures on an (optical) microscope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FqBTD.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FqBTD.jpg&quot; alt=&quot;Z80, microscopic view&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Picture of a real Z80 die, from Wikipedia, Von Pauli Rautakorpi - Eigenes Werk, CC BY 3.0, &lt;a href=&quot;https://commons.wikimedia.org/w/index.php?curid=30690133&quot; rel=&quot;noreferrer&quot;&gt;https://commons.wikimedia.org/w/index.php?curid=30690133&lt;/a&gt;) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 had, like all earlier CPUs up to maybe the 8086 such large structures that optical reverse-engineering was perfectly possible. A well-trained eye could easily recognize structures like flip-flops, registers, counters and latches.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2016-12-06T07:52:54.393" LastActivityDate="2016-12-06T07:52:54.393" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1864" PostTypeId="2" ParentId="1861" CreationDate="2016-12-06T13:40:43.297" Score="2" Body="&lt;p&gt;Heat could be a problem, and given the description, probably a factor. There could be a dodgy part working at the edge of its working parameters or at its useful life.  There could be a physical problem with a board connection that manifests when things get hot enough. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Really, besides looking for obvious loose connections and flexing the board gently to see if you can cause the problem on demand, the only way to really solve this is with a multimeter and an oscilloscope.  The idea is you work backwards and forwards through the circuit looking for where signals, levels, and clock lines seem to have a problem. Those edges are where the problem lies.  Then you have to know how different components react to generalize the problem to a loose or failing part. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can imagine, this takes a fair amount of experience debugging circuits. You may get lucky with your initial attempts, and you have to start somewhere. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is unlikely the power transistor you identified is fault, but there are ways of testing them to find out. You have to desolder one of the emitter or collector leads and treat them as two diodes to check that they are good. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be remiss if I did not point out that specific electronic debug questions might be better over on &lt;a href=&quot;https://electronics.stackexchange.com/&quot;&gt;EE.SE&lt;/a&gt;. If you keep the questions on topic you can leverage a lot of experience in these things over there. That is, getting a console to work is not strictly a retro thing at some point. &lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:11.130" LastActivityDate="2016-12-06T16:19:05.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1865" PostTypeId="1" AcceptedAnswerId="1867" CreationDate="2016-12-06T15:01:27.493" Score="9" ViewCount="748" Body="&lt;p&gt;I've recently bought an old Palm m515 PDA. It seems that the previous owner has removed some of the built-in applications like Calendar and Contacts from it, because when I want to start them it says that &quot;JackSprat&quot; has removed them. How can I restore the original state of the handheld? Can I get official ROM image somewhere? Which tools should I use?&lt;/p&gt;&#xA;" OwnerUserId="3846" LastEditorUserId="621" LastEditDate="2016-12-06T16:03:55.097" LastActivityDate="2016-12-06T18:11:16.473" Title="Restore original ROM on PalmOne m515" Tags="&lt;rom&gt;&lt;palm&gt;&lt;pda&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1867" PostTypeId="2" ParentId="1865" CreationDate="2016-12-06T16:21:08.467" Score="9" Body="&lt;p&gt;JackSprat was a tool produced by a company called Brayder, used to remove portions of the original ROM images. It used to produce a ROM backup along with a PRC which could be used to restore it; you can still find the original manual on the Internet Archive's copy of &lt;a href=&quot;http://web.archive.org/web/20041016013817/http://www.brayder.com/support/jacksprat/index.html&quot; rel=&quot;noreferrer&quot;&gt;Brayder's technical support page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without that ROM backup and the associated restore PRC, your legal options are rather limited. Palm used to have a developer program, but that's long dead, and even then as far as I remember the ROM images available through that program were debug images suitable for use in the emulator, not for flashing on devices. You'd also need a ROM installation tool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some devices had Palm OS upgrades available, and could be restored using that; but the m515 never got any upgrades so Palm never made the tool available. Some forums have posts by people who tried to use the m505 upgrade tool to restore an m515, but I get the impression &lt;a href=&quot;http://forum.brighthand.com/threads/please-help-me-again-m515-reflashing-process-failed-and-blue-screen.53688/&quot; rel=&quot;noreferrer&quot;&gt;that was rather unsuccessful&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are able to find a ROM image suitable for the device (again, ROM images used in emulators are probably &lt;em&gt;not&lt;/em&gt; suitable), then you might be able to get it on your device using &lt;a href=&quot;http://www.harbaum.org/till/palm/osflash/index.html&quot; rel=&quot;noreferrer&quot;&gt;osflash&lt;/a&gt;, but the m515 isn't officially supported so you'd be experimenting! If you can get a hold of another m515, extracting the ROM is easy enough using tools such as &lt;a href=&quot;http://www.pilot-link.org/&quot; rel=&quot;noreferrer&quot;&gt;pilot-link&lt;/a&gt;'s &lt;code&gt;getrom&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An added complication with all this is that even if you do get a hold of Palm's tools, most of them are Windows-based and don't work in recent versions of Windows.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-12-06T16:21:08.467" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1868" PostTypeId="1" AcceptedAnswerId="1869" CreationDate="2016-12-07T01:27:17.470" Score="4" ViewCount="672" Body="&lt;p&gt;I have a Macintosh SE.  It's the version that has a stock 68000, one floppy drive and one hard drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe the hard drive is dead.  It spins up but all I get is a flashing question mark in the middle of the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw a YouTube video where someone was able to boot a Macintosh Classic using &lt;code&gt;CMD OPTION X O&lt;/code&gt; and it would boot to a small OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried that on my SE but it did not work.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there something similar for the SE?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not have any other boot disks.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2016-12-07T01:43:11.113" Title="My Macintosh SE will not boot to hard drive. Can I boot from ROM?" Tags="&lt;mac-os-classic&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1869" PostTypeId="2" ParentId="1868" CreationDate="2016-12-07T01:43:11.113" Score="5" Body="&lt;p&gt;Unfortunately, no, the Mac SE doesn't have a ROM disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it a regular SE, an SE FDHD, or an SE Superdrive? If it is an FDHD or Superdrive, you could write a boot floppy using any USB floppy drive. If it's the original SE, you need an older Mac that can write 800k floppies.&lt;/p&gt;&#xA;" OwnerUserId="94" LastActivityDate="2016-12-07T01:43:11.113" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1870" PostTypeId="5" CreationDate="2016-12-07T13:18:28.720" Score="0" Body="&lt;p&gt;For questions concerning the analysis of hardware by observation and disassembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For questions regarding software, see &lt;a href=&quot;/questions/tagged/disassembly&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;disassembly&amp;#39;&quot; rel=&quot;tag&quot;&gt;disassembly&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-12-07T13:18:28.720" LastActivityDate="2016-12-07T13:18:28.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1871" PostTypeId="4" CreationDate="2016-12-07T13:18:28.720" Score="0" Body="The process of determining how a device was made.  Usually for the purposes of replication." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-12-07T13:18:28.720" LastActivityDate="2016-12-07T13:18:28.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1872" PostTypeId="1" AcceptedAnswerId="1873" CreationDate="2016-12-07T15:28:00.290" Score="6" ViewCount="2090" Body="&lt;p&gt;The Gotek floppy emulators are really popular in the retro scene. I have one modified (firmware update) to work with my Amiga 500.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can one be made to work with any of the classic line of Macintosh computers?&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="621" LastEditDate="2016-12-07T17:26:12.597" LastActivityDate="2016-12-07T17:26:36.547" Title="Can the Gotek floppy emulator be made to work with classic Macs?" Tags="&lt;hardware&gt;&lt;emulation&gt;&lt;apple-macintosh&gt;&lt;floppy-disk&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1873" PostTypeId="2" ParentId="1872" CreationDate="2016-12-07T17:07:02.960" Score="9" Body="&lt;p&gt;The Gotek floppy emulator appears to only support two firmwares: Cortex (Amiga only) and HcX (Amiga, Atari, Amstrad, and Spectrum).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is another floppy emulator, the &lt;a href=&quot;http://www.bigmessowires.com/floppy-emu/&quot; rel=&quot;noreferrer&quot;&gt;BMOW Floppy Emu&lt;/a&gt;, which supports classic Macintosh hardware (Macintosh, Apple II, and Lisa Floppy/Hard Disk).  There are firmware downloads on the linked page.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="94" LastEditDate="2016-12-07T17:26:36.547" LastActivityDate="2016-12-07T17:26:36.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1874" PostTypeId="1" AcceptedAnswerId="1875" CreationDate="2016-12-07T19:49:16.660" Score="48" ViewCount="6716" Body="&lt;p&gt;In the early 1980s my primary school was the proud owner of a Commodore PET 2001. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a commonly held belief among the young geek fraternity that there existed a BASIC command&amp;mdash;perhaps a POKE&amp;mdash;which would cause physical damage to the machine. I don't know where this story came from but I do remember hearing it from sources outside the school and that it specifically involved the PET. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does such a command exist, or was this just an urban myth?&lt;/p&gt;&#xA;" OwnerUserId="3480" LastEditorUserId="3480" LastEditDate="2016-12-09T09:12:30.947" LastActivityDate="2020-03-04T04:28:12.580" Title="Can a PET 2001 be physically damaged from BASIC?" Tags="&lt;basic&gt;&lt;commodore-pet&gt;" AnswerCount="6" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1875" PostTypeId="2" ParentId="1874" CreationDate="2016-12-07T20:38:38.220" Score="76" Body="&lt;p&gt;&lt;code&gt;POKE 59458,62&lt;/code&gt; was a trick, sometimes called &quot;Fast Print,&quot; used to increase screen refresh rates on older PETs. &lt;a href=&quot;http://oldcomputers.net/pet2001.html&quot;&gt;This page&lt;/a&gt; describes the trick succinctly:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;the system no longer waits for the video sync signal, thinking that it's always present, and updates the screen as fast as it can.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In later models this POKE could cause problems. The new video circuitry behaved differently, and the trick could cause the CRT's flyback circuitry to generate excessive voltages and possibly damage the monitor. A more detailed analysis of this is &lt;a href=&quot;http://www.6502.org/users/andre/petindex/poke/index.html&quot;&gt;here&lt;/a&gt;.&#xA;The PET 2001 seems to be one of the models that would &lt;em&gt;not&lt;/em&gt; be damaged by the Fast Print/Killer Poke, but later PETs might be (&lt;a href=&quot;http://www.zimmers.net/cbmpics/cbm/PETx/petfaq.html&quot;&gt;this FAQ&lt;/a&gt; seems to confirm this).&lt;/p&gt;&#xA;" OwnerUserId="3878" LastActivityDate="2016-12-07T20:38:38.220" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1876" PostTypeId="2" ParentId="1874" CreationDate="2016-12-07T22:37:51.870" Score="8" Body="&lt;p&gt;You can play with VSync on many systems and cause that situation, but it's unlikely to create damages; on most systems, from the Atari 2600 to PCs until the 486 era, you had ways to do this.&#xA;There was a French computer called the TO7 that had a module designed to make overlays on top of a composite video signal. This is the only computer I know of, from this era, where it was possible to create a physical damage (to the module), from improper programming. I haven't witnessed it, but I remember that it was explained in depth somewhere.&#xA;Edit as I forgot: the NES could also be damaged with improper programming of the PPU.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastEditorUserId="3884" LastEditDate="2016-12-07T23:18:16.513" LastActivityDate="2016-12-07T23:18:16.513" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1877" PostTypeId="2" ParentId="1634" CreationDate="2016-12-07T22:51:22.663" Score="10" Body="&lt;p&gt;The Amiga uses a standard floppy drive, but doesn't use a standard controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data on a magnetic media is essentially stored as flux changes over time where the controller will detect if the magnetic flux has changed over a certain period of time to make it a 0 or a 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that the read head will be less sensitive to a change if it exposed to a magnetic field that has been steady; for this reason, data bits are interleaved with synchronization marks whose only role is to reverse the flux to prevent this from happening.&#xA;In a typical format (MFM), roughly 50% of the magnetic surface on a track is used for this purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The floppy controller hides all of this from you and presents you a floppy where tracks are nicely partitioned in sectors, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Amiga, there is not such thing: the encoding / decoding of the track is done by the CPU and the blitter (to speed up bit operations) and the format itself is completely open. The Amiga can also not write a sector on a track, but needs to write the entire track back. The Amiga was very good machine to copy Atari ST protected floppies back in the day :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While there is an official format spec for the Amiga floppies, many games use more exotic systems to pack more data and the only way to truly make a copy of Amiga floppies is to read the entire track which a computer that has a regular controller will not let you do.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2016-12-07T22:51:22.663" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1878" PostTypeId="2" ParentId="1402" CreationDate="2016-12-07T22:58:11.470" Score="2" Body="&lt;p&gt;I used DevPac all along for assembler and GFABasic for the tools. I remember that the Omikron basic was very popular in Germany.&#xA;A lot of people starting had hopes with STOS, but I never got into it.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2016-12-07T22:58:11.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1879" PostTypeId="2" ParentId="1683" CreationDate="2016-12-07T23:04:06.400" Score="9" Body="&lt;p&gt;The loading code does it; you can see that the CPU writes to one of the audio registers during the load if you disassemble the ROM. The &quot;feature&quot; could be disabled through code although it was usually reassuring during tape load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as tapes go, the program was stored on one track and the second track was free for audio; I have only seen this feature used in educational products (learning languages, learning basic programming, etc).&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2016-12-07T23:04:06.400" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1880" PostTypeId="2" ParentId="1763" CreationDate="2016-12-07T23:07:22.240" Score="3" Body="&lt;p&gt;We used to replace the domes with half razor blades (split in half along the long side).&#xA;The blade can be attached in the center, below the metal ring, and right there you can put a little bit of paper to lift it up.&#xA;It was a lore more 'loose' than the original contact dome, but it was durable.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2016-12-07T23:07:22.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1881" PostTypeId="2" ParentId="1019" CreationDate="2016-12-07T23:16:40.210" Score="3" Body="&lt;p&gt;Wanderer 3D was not with glasses on the Amstrad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could it be Relief Action from Loriciel? (&lt;a href=&quot;http://cpcrulez.fr/GamesTest/relief_action.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://cpcrulez.fr/GamesTest/relief_action.htm&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2016-12-07T23:16:40.210" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1882" PostTypeId="2" ParentId="1644" CreationDate="2016-12-07T23:21:39.863" Score="0" Body="&lt;p&gt;All code I did on the 8bits started at the beginning of usable RAM (after OS data, etc); but the tools let us select where each block of code or data starts, so it was up to the user, knowing that some zones had OS uses and some may be mirrored on machines with less ram (16kb vs 64kb for example).&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2016-12-07T23:21:39.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1883" PostTypeId="2" ParentId="1053" CreationDate="2016-12-07T23:54:21.480" Score="2" Body="&lt;p&gt;Also, you can check the Colecovision; although marketed as a game console, it has the same electronics as a MSX computer.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2016-12-07T23:54:21.480" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1884" PostTypeId="2" ParentId="1135" CreationDate="2016-12-08T00:07:32.363" Score="24" Body="&lt;p&gt;I worked with one and it was a pain to use.&#xA;It was a cartridge made of static ram; the computer would write the contents to the cartridge and you would manually reset the console.&#xA;it was slow, the upload would sometimes fail and there was no way to communicate anything back to the computer.&#xA;We were using an assembler under MSDOS to make the games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the SNES they added a mechanism to pass back a few bytes of data to the PC once per frame.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2016-12-08T00:07:32.363" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1885" PostTypeId="2" ParentId="1145" CreationDate="2016-12-08T00:18:14.387" Score="8" Body="&lt;p&gt;There are a fixed amount of memory cycles for the PPU to read the sprite data on each scanline; once those are exhausted, no more sprite data will be fetched.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As NobodyNada said, programmers would rotate the order in the list to make sure that the user would see all the sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The technique was also used on other systems that didn't work the same way, but sprites were rotated to give the illusion of having more objects on screen. The Atari 2600 did that a lot (Joust is a perfect example of this where the birds constantly flicker). On the Intellivision, it was forbidden by Mattel since they wanted the Intellivision to showcase a better visual quality than the competition.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2016-12-08T00:18:14.387" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1886" PostTypeId="2" ParentId="795" CreationDate="2016-12-08T00:31:23.263" Score="3" Body="&lt;p&gt;It's a complex problem: the DACs are one aspect of it, but the CPU speed is another. If you pull the beam to a specific place but turn it off before the arrival, your endpoint position can be more precise than what the DACs offer you.&#xA;I have no idea how Gamasutra reached that 330x410 number.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2016-12-08T00:31:23.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1887" PostTypeId="1" AcceptedAnswerId="1889" CreationDate="2016-12-08T00:34:45.623" Score="176" ViewCount="42730" Body="&lt;p&gt;In the late 1980s to mid 1990s, most consumer-class video hardware was not capable of displaying greater than 16 colours at a time. To create the illusion of greater colour, software often &quot;blended&quot; solid colours by placing single pixels of two or more colours close together. On older CRT monitors from a distance, the dither pattern appeared as close to a solid colour as achievable. Note how patterns could either be 50-50 of two colours, or combinations of three or more solids:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3u3Wb.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3u3Wb.png&quot; alt=&quot;Windows 3.1 Dithering Sample&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am creating a retro-themed game and am seeking to reproduce this same dithering appearance Microsoft used in early versions of Windows. However, I cannot find any information/documentation on the algorithm or method they used to achieve this unique look. My end goal is to create a function that accepts RGB components, a box area size, and &lt;em&gt;N&lt;/em&gt; solid colours...and outputs a pattern creating a new dithered colour appearing as Windows 3.x would display it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, what algorithm did they use to combine Red, Green, and Blue components into these dithered patterns, all while assuming a base of &lt;em&gt;N&lt;/em&gt; solid colours (in this case, the 16 standard VGA colours)?&lt;/p&gt;&#xA;" OwnerUserId="1893" LastActivityDate="2021-04-11T19:20:13.170" Title="What algorithm did Microsoft use to dither colour in early versions of Windows?" Tags="&lt;windows-3.x&gt;&lt;dithering&gt;" AnswerCount="4" CommentCount="15" FavoriteCount="46" ContentLicense="CC BY-SA 3.0" />
  <row Id="1888" PostTypeId="2" ParentId="1874" CreationDate="2016-12-08T03:44:34.217" Score="10" Body="&lt;p&gt;This jogged me memory about a pretty well known problem with early PC video control hardware that could, if programmed with really incorrect video timing, result in damage to the flyback power supply in monochrome monitors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a link to a more detailed exchange on the subject of monochrome monitor damage from software: &lt;a href=&quot;http://www.verycomputer.com/31_eda16519f7132ece_1.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;How did this program burn out two monitors?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.verycomputer.com/31_eda16519f7132ece_1.htm#p2&quot; rel=&quot;nofollow noreferrer&quot;&gt;This post&lt;/a&gt; states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This is an old known bug.  You can burn out the IBM monochrome  monitor by stopping the horizontal sweep while keeping everything else&#xA;  running, and the Hercules card gives you enough control to do this &#xA;  under software control.  The video chip lets you select the horizontal&#xA;  and vertical sweep rates independently, and zero rates are possible. &#xA;  However, the horizontal sweep is used as the oscillator for a&#xA;  switching  power supply, as is typical in TV circuits, and with the&#xA;  sweep rate at  0, DC flows through a coil with high inductance but low&#xA;  resistance,  producing an excessive current that burns out the coil. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Part of the problem is that the IBM monochrome monitor is a design  lifted from an earlier, pre-PC product line, the IBM&#xA;  Displaywriter, and in  that product, there was no potential&#xA;  vulnerability of this type.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and &lt;a href=&quot;http://www.verycomputer.com/31_eda16519f7132ece_1.htm#p4&quot; rel=&quot;nofollow noreferrer&quot;&gt;this post&lt;/a&gt; states&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If you tinker with the registers in the 6845 CRT controller chip on &#xA;  the video board, you can program in a horizontal scan rate that  will&#xA;  overheat the power supply in the monitor.  The reason being  that a&#xA;  monochrome monitor is designed to only work within a very  narrow&#xA;  range of horizontal frequencies.  The problem seems to come  from&#xA;  accidentally programming a 6845 on a herc display with values  that&#xA;  are appropriate for a CGA monitor.  Such a mistake is pretty  easy to&#xA;  make whilst tinkering with graphics programming and  accidentally&#xA;  using the wrong setup from a library.  Doing herc  graphics with&#xA;  Borland's BGI system seems to be pretty safe, as I  still have my herc&#xA;  monitor intact. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Several people reported that a screen-saver program called  &quot;BURNOUT&quot;&#xA;  fried hercules &lt;em&gt;boards&lt;/em&gt;, rather than the monitor.  This  surpirses me,&#xA;  but several people were quite emphatic that it was  the board that&#xA;  went south.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="3891" LastEditorUserId="202" LastEditDate="2019-05-13T13:11:52.717" LastActivityDate="2019-05-13T13:11:52.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1889" PostTypeId="2" ParentId="1887" CreationDate="2016-12-08T04:00:52.623" Score="169" Body="&lt;p&gt;Basically, Windows used the basic 16-color CGA palette, which included 4 shades of monochrome, and 12 basic colors (two each of red, green, blue, yellow, purple, and teal), which later formed the basis of the &amp;quot;web safe palette&amp;quot; that became popular during the early days of the Internet.&lt;/p&gt;&#xA;&lt;p&gt;The algorithm used back then was known as the Bayer dithering technique, otherwise referred to as ordered dithering. The basic idea was to generate a grid of threshold values in a mathematical arrangement that favors nearly consistent values equal distances from each other, which is what produces the cross-hatch effect.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20180325055007/https://bisqwit.iki.fi/story/howto/dither/jy/&quot; rel=&quot;noreferrer&quot;&gt;This article&lt;/a&gt; basically describes the pseudocode algorithm:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Threshold = COLOR(256/4, 256/4, 256/4); /* Estimated precision of the palette */&#xA;For each pixel, Input, in the original picture:&#xA;Factor  = ThresholdMatrix[xcoordinate % X][ycoordinate % Y];&#xA;Attempt = Input + Factor * Threshold&#xA;Color = FindClosestColorFrom(Palette, Attempt)&#xA;Draw pixel using Color&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And they also included some example source code written in PHP:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?php&#xA;&#xA;/* Create a 8x8 threshold map */&#xA;$map = array_map(function($p) {&#xA;    $q = $p ^ ($p &amp;gt;&amp;gt; 3);&#xA;    return (&#xA;        (($p &amp;amp; 4) &amp;gt;&amp;gt; 2) | (($q &amp;amp; 4) &amp;gt;&amp;gt; 1) |&#xA;        (($p &amp;amp; 2) &amp;lt;&amp;lt; 1) | (($q &amp;amp; 2) &amp;lt;&amp;lt; 2) |&#xA;        (($p &amp;amp; 1) &amp;lt;&amp;lt; 4) | (($q &amp;amp; 1) &amp;lt;&amp;lt; 5)&#xA;    ) / 64.0;&#xA;}, range(0, 63));&#xA;&#xA;/* Define palette */&#xA;$pal = [&#xA;    0x080000, 0x201A0B, 0x432817, 0x492910,  &#xA;    0x234309, 0x5D4F1E, 0x9C6B20, 0xA9220F,&#xA;    0x2B347C, 0x2B7409, 0xD0CA40, 0xE8A077,&#xA;    0x6A94AB, 0xD5C4B3, 0xFCE76E, 0xFCFAE2&#xA;];&#xA;&#xA;/* Read input image */&#xA;$srcim = ImageCreateFromPng('scene.png');&#xA;$w = ImageSx($srcim);&#xA;$h = ImageSy($srcim);&#xA;&#xA;/* Create paletted image */&#xA;$im = ImageCreate($w,$h);&#xA;foreach ($pal as $c)&#xA;    ImageColorAllocate($im, $c &amp;gt;&amp;gt; 16, ($c &amp;gt;&amp;gt; 8) &amp;amp; 0xFF, $c &amp;amp; 0xFF);&#xA;&#xA;$thresholds = [256 / 4, 256 / 4, 256 / 4];&#xA;&#xA;/* Render the paletted image by converting each input pixel using the threshold map. */&#xA;for($y = 0; $y &amp;lt; $h; ++$y) {&#xA;    for($x = 0; $x &amp;lt; $w; ++$x) {&#xA;        $map_value = $map[($x &amp;amp; 7) + (($y &amp;amp; 7) &amp;lt;&amp;lt; 3)]; &#xA;        $color = ImageColorsForIndex($srcim, ImageColorAt($srcim, $x,$y));&#xA;        $r = (int)($color['red']   + $map_value * $thresholds[0]);&#xA;        $g = (int)($color['green'] + $map_value * $thresholds[1]);&#xA;        $b = (int)($color['blue']  + $map_value * $thresholds[2]);&#xA;        /* Plot using the palette index with color that is closest to this value */     &#xA;        ImageSetPixel($im, $x,$y, ImageColorClosest($im, $r,$g,$b));&#xA;    }&#xA;}&#xA;&#xA;ImagePng($im, 'scenebayer0.png');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Basically, the entire thing was dreamed up by Bayer, and this algorithm dominated the market during the 4-bit era of computer graphics.&lt;/p&gt;&#xA;&lt;p&gt;You can read more about ordered dithering from &lt;a href=&quot;https://web.archive.org/web/20190427110009/http://www.efg2.com/Lab/Library/ImageProcessing/DHALF.TXT&quot; rel=&quot;noreferrer&quot;&gt;DITHER.TXT&lt;/a&gt;, which basically explains different algorithms and sample implementations.&lt;/p&gt;&#xA;&lt;p&gt;Note that your source images should be in full 256 color or better, and your palette should consist of these colors:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#000000 #808080&#xA;#800000 #FF0000&#xA;#008000 #00FF00&#xA;#808000 #FFFF00&#xA;#000080 #0000FF&#xA;#800080 #FF00FF&#xA;#008080 #00FFFF&#xA;#C0C0C0 #FFFFFF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Always dither from a full-color image, otherwise it'll probably look even worse than you intended. Dithering in realtime is trivial for modern systems, as even classic 33mhz systems that ran Windows had no trouble implementing the Bayer dithering pattern.&lt;/p&gt;&#xA;" OwnerUserId="2059" LastEditorUserId="15334" LastEditDate="2020-12-27T18:45:17.460" LastActivityDate="2020-12-27T18:45:17.460" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1890" PostTypeId="2" ParentId="1874" CreationDate="2016-12-08T13:28:03.873" Score="6" Body="&lt;p&gt;Yes, also the later 4000 models. The POKE may have been different with those. It would mess up the Vsync and the screen would be all warped and distorted. Completely useless for playing AFO.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[In fact I even tried the poke on my 8296 with connected screen. As a&#xA;late model I assumed it has the fix, but kept my finger close to the&#xA;reset button, though. As far as I can see from the screen the CRT now&#xA;simply does not get any sync anymore, the screen just moves.][1]&lt;/p&gt;&#xA;&lt;p&gt;A fix incorporated into the 4000 and later series to correct a&#xA;problem with the 2000 series that drastically slowed down the PETs&#xA;when graphics were displayed.&lt;/p&gt;&#xA;&lt;p&gt;Early on type in patch was discovered for the early PETs. It seems that the video chip was able to be accelerated by poking a value&#xA;to a specific address. The problem came when the new fixed PETs&#xA;arrived, it seems that by poking the value to the same address in the&#xA;newer PETs would cause the video chip to accelerate to the point they&#xA;would overheat and destroy themselves. Thus the term 'killer poke'&#xA;soon became a well known legend in PET history.[2]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://6502.org/users/andre/petindex/poke/index.html&quot; rel=&quot;noreferrer&quot;&gt;1&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.myoldcomputers.com/museum/comp/commodore_pet_4016.htm&quot; rel=&quot;noreferrer&quot;&gt;2&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3903" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2016-12-08T16:03:14.897" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="1891" PostTypeId="1" AcceptedAnswerId="1893" CreationDate="2016-12-08T14:48:13.490" Score="13" ViewCount="1860" Body="&lt;p&gt;I'm wondering how modern batch files (.bat) are different from MS-DOS .bat files?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some commands that feel more &quot;modern&quot; and don't seem like something you'd see in an older system. How do the commands in modern batch files (winXP-win7, maybe win8/10) compare to DOS batch files?&lt;/p&gt;&#xA;" OwnerUserId="3872" LastEditorUserId="70" LastEditDate="2016-12-09T13:03:48.317" LastActivityDate="2016-12-09T13:03:48.317" Title="How do modern .bat files differ from old MS DOS .bat files?" Tags="&lt;ms-dos&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1892" PostTypeId="1" AcceptedAnswerId="1903" CreationDate="2016-12-08T14:59:58.667" Score="20" ViewCount="1669" Body="&lt;p&gt;I have seen some claims that Ada Lovelace was the first programmer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any actual code to back this up?&lt;/p&gt;&#xA;" OwnerUserId="548" LastEditorUserId="276" LastEditDate="2016-12-22T13:00:52.887" LastActivityDate="2016-12-22T13:00:52.887" Title="Actual code written by Ada Lovelace?" Tags="&lt;software&gt;&lt;history&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1893" PostTypeId="2" ParentId="1891" CreationDate="2016-12-08T15:51:23.103" Score="17" Body="&lt;p&gt;In MS-DOS and the variants of Windows that ran on top of it (3.x, 95, 98, Millenium) batch files would be interpreted by the 16-bit command line interpreter COMMAND.COM. In the NT kernel versions of Windows (NT, 2000, XP, Vista, 7, 8, 10 and server variants) they are interpreted by the 32-bit command line interpreter CMD.EXE. As it happens CMD.EXE supports the old MS-DOS internal commands (COPY, RENAME and so forth) and adds some new ones (POPD, PUSHD and others). So old MS-DOS batch files will by and large work today, modern ones would only work in MS-DOS if they use commands that existed in MS-DOS, don't use long filenames, don't use external programs like nslookup that didn't exist back then, and so forth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.lifewire.com/command-availability-microsoft-2618081&quot; rel=&quot;noreferrer&quot;&gt;Here's a table listing them and when they appeared, up to Windows 8.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3912" LastEditorUserId="3912" LastEditDate="2016-12-09T09:33:04.397" LastActivityDate="2016-12-09T09:33:04.397" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1894" PostTypeId="2" ParentId="1858" CreationDate="2016-12-08T20:04:27.587" Score="36" Body="&lt;p&gt;It seems to be pretty much accepted wisdom that the Soviets completely cloned the Western chips and did not simply develop reimplementations of the same instruction sets. Since at the time it was pretty important to have the impression of having own developments, the copying was obviously not admitted publicly so not much is known about how exactly the copying was done, but the prevailing opinion seems to be that they were delayered mechanically by shaving off thin layers of silicon from the top and chip layouts were copied from the microscope photos. Apparently at some point things got so bad that Digital had to add &lt;a href=&quot;http://micro.magnet.fsu.edu/creatures/pages/russians.html&quot; rel=&quot;noreferrer&quot;&gt;some bad Russian&lt;/a&gt; onto their die (I doubt it helped).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: due to cruder capabilities of the Soviet production lines (see below) the chips were apparently not always copied 1-to-1 but sometimes had to be adapted to the available process, which required some understanding of how they worked and re-doing the layout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some interesting discussions on the topic on the IXBT forum: &lt;a href=&quot;http://forum.ixbt.com/topic.cgi?id=64:2829&quot; rel=&quot;noreferrer&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;http://forum.ixbt.com/topic.cgi?id=64:3394&quot; rel=&quot;noreferrer&quot;&gt;2&lt;/a&gt;, &lt;a href=&quot;http://forum.ixbt.com/topic.cgi?id=36:93&quot; rel=&quot;noreferrer&quot;&gt;3&lt;/a&gt; (in Russian). Due to the nature of the forum you have to of course take everything said with a pinch of salt but there is still some useful information. For fun I translated &lt;a href=&quot;http://forum.ixbt.com/topic.cgi?id=64:2829:89#89&quot; rel=&quot;noreferrer&quot;&gt;a post&lt;/a&gt; by the user &lt;a href=&quot;http://forum.ixbt.com/users.cgi?id=info:Felid&quot; rel=&quot;noreferrer&quot;&gt;Felid&lt;/a&gt; who seems to be quite informed. Note that some of the text is replies to earlier posts in the thread and is not directly related to the topic of cloning. URLs are mostly dead since the post is from 2007 but some got saved by the Internet Archive.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Felid (08.09.2007 17:24)    &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In short: yes, we shamelessly ripped off everything except for the MIPS&#xA;  R3000 which was licensed and produced as Л1876ВМ1 etc. running at&#xA;  25Mhz (in reality &amp;lt;15) - officially licensed, with complete&#xA;  documentation for production. People tried to adapt it to Angstrem's&#xA;  production line, but until 2003 processor could not reach 40Mhz (to&#xA;  which the original could be overclocked because it used 1.2 µm and&#xA;  Angstrem only had 2µm (and 1.5 metal layers). Still, for the aviation&#xA;  industry (airplane navigation) it seems they managed to make a 100Mhz&#xA;  version (works at 80) - was announced a couple months ago (see&#xA;  Angstrem's site).  Looks believable especially if you read this:&#xA;  &lt;a href=&quot;http://www.terralab.ru/print/system/275141&quot; rel=&quot;noreferrer&quot;&gt;http://www.terralab.ru/print/system/275141&lt;/a&gt;.  In reality this is the&#xA;  sole more or less modern design which exists now but it's being&#xA;  squeezed dry.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Of our own single-chip microprocessors, not a single one reached mass&#xA;  production.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;There were only two options: a full clone or an improved/reworked&#xA;  copy.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Т34ВМ1 is not a Z80 but a single-chip PDP-11  CMOS version LSI-11/23. After entering  production, it got an added clock generator, simple power and interrupt controller, RAM selector and&#xA;  data bus multiplexer and got renamed into 1013ВМ1 - that's what inside the&#xA;  microcomputers Электроника МК-85(М,С). By the way, one of the best&#xA;  designs and a really successful model. I could have been used to&#xA;  create an amazing machine for its time. But...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We had no clones of  MС68xxx, except for 1843ВМ2(Integral's copy of&#xA;  MC68C881) but I don't know where it was used.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Regarding pipelines: the first time some kind of pipeline appeared was back in MOS 6502.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Among the strictly PC-range CPUs - in '86, where reading of the next&#xA;  instruction happened during execution of the current one.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;So which pipeline was &quot;first&quot; is a tricky question.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;1810вм89 is not a processor but the 8289 bus master.&lt;/p&gt;&#xA;  &#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;When you copy layer-by-layer you don't have to understand how it works. &#xA;    Important thing is to keep the scale(?) and to not scramble the order of layer shots&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &#xA;  &lt;p&gt;This works only up to the '286. Once you get to 134000 transistors -&#xA;  while turns out that it &lt;em&gt;can&lt;/em&gt; be copied (1847ВМ286, if you can&#xA;  imagine),  to achieve more than one percent yield for such a chip was&#xA;  nearly impossible. And USSR ended by that time so it was easier to buy&#xA;  the ready-made ones. So it didn't go anywhere.  Here's some reading&#xA;  for you: &lt;a href=&quot;http://www.electronics.ru/93.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.electronics.ru/93.html&lt;/a&gt;,&#xA;  &lt;a href=&quot;http://live.cnews.ru/forum/index.php?showtopic=29546&quot; rel=&quot;noreferrer&quot;&gt;http://live.cnews.ru/forum/index.php?showtopic=29546&lt;/a&gt; and especially&#xA;  &lt;a href=&quot;http://electronix.ru/forum/lofiversion/index.php/t30576.html&quot; rel=&quot;noreferrer&quot;&gt;http://electronix.ru/forum/lofiversion/index.php/t30576.html&lt;/a&gt;. &#xA;  After this the blind faith into the soviet/Russian electronics will fade by itself.&#xA;  Especially the bit about 580ВГ75 (CGA controller of the first PCs) and 1% yield after one year in production.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Regarding backdoors and self-destructing mechanisms - this ancient myth still doesn't want to die.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;There were no backdoors, it's all paranoia. You can't backdoor without it being visible undert microscope, and&#xA;  they would affect legitimate functions. Real cases of backdoors in IC chips were never discovered, but the myth lives on.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;About the trinary Setun and the &quot;ruined&quot; advanced performance - read here: &lt;a href=&quot;http://dirty.ru/comments/219957&quot; rel=&quot;noreferrer&quot;&gt;http://dirty.ru/comments/219957&lt;/a&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;added  08.09.2007 18:12:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;abc777&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Who and how copied:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;At first the top-secret &quot;boxes&quot; and numbered no-name research institutes.&#xA;  Afterwards even students started being involved. In Leningrad, at least.&#xA;  With the obvious productivity and results.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Documentation and samples were acquired who knows where, but closer to 80s were received from &#xA;  the Soviet diplomats in the West via missions (not directly of course but under strict and constant control of you know who).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Some even managed to get documentation for photolithography machines. Well, and also subscriptions for western magazines like&#xA;  Scientific American.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;As a rule, nothing was released until understood how it worked. About fixing errors I'm not sure but those that happened (tons...)&#xA;  were caused by production issues, since completely good and bugless chips did exist.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Western companies knew all about it but since USSR did not plan to complete in the same markets, kept their silence.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Although, I've heard this story about DEC experts who came to check if we really copied the PDP-11.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;And reportedly said, &quot;Fine, keep it up but don't try to sell to the West&quot;. &#xA;  Could be made-up though.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;By the way, electronics for cars in USSR/Russia existed and exists:&#xA;  it's called МСУАД(MSUAD): Micropocessor system for contolling the&#xA;  automobile engine Various controllers and stuff are being released for&#xA;  it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The closest &quot;public evidence&quot; of cloning would probably be the books like &quot;&lt;em&gt;Integrated circuits produced in USSR and &lt;strong&gt;their foreign analogs&lt;/em&gt;&lt;/strong&gt;(sic)&quot; which were published in the 90s and, for example, &lt;a href=&quot;http://www.inp.nsk.su/~kozak/adv/advh4.htm&quot; rel=&quot;noreferrer&quot;&gt;listed &quot;Z80&quot; for КР1858ВМ1&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for Т34ВГ1, according to &lt;a href=&quot;http://www.155la3.ru/t34vg1.htm&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; it was not a simple copy, but a custom chip developed for the Czechoslovakia's Spectrum clone &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Didaktik&quot; rel=&quot;noreferrer&quot;&gt;Didaktik Gama&lt;/a&gt;&quot;. In one version it replaced &quot;15 separate chips&quot;, and in another the official Ferranti ULA (possibly because it was too expensive). Apparently it was not completely compatible leading to issues with some games.&lt;/p&gt;&#xA;" OwnerUserId="3783" LastEditorUserId="3783" LastEditDate="2016-12-09T09:26:11.077" LastActivityDate="2016-12-09T09:26:11.077" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1895" PostTypeId="1" AcceptedAnswerId="1897" CreationDate="2016-12-08T22:27:05.987" Score="9" ViewCount="659" Body="&lt;p&gt;I have a whole bag of 30pin SIMMS so I thought I would see about upgrading the 1 MB of RAM in my Mac SE FDHD to 4 MB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original RAM had four sticks of &lt;code&gt;OKI M41256A&lt;/code&gt;.  These SIMMs have 8 chips each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my stash of RAM, I found a bunch of Panasonic &lt;code&gt;MN4A091MOS80 - 1MX9&lt;/code&gt; SIMMs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These have 9 chips each.  Which I &lt;strong&gt;THINK&lt;/strong&gt; that are parity RAM SIMMs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I switched the jumper on the motherboard to &quot;2/4MB&quot; when previously it was on &quot;1 MB&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I boot up the system, the Finder shows &lt;code&gt;2048K&lt;/code&gt;.  So, only half of what I was suspecting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My system OS is 6.0.8 and the Finder is 6.1.8 FWIW.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking one or both SIMMs are bad in either bank A or bank B.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a real pain pulling that board in/out to swap out RAM.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, before I keep randomly trying many combinations, does anyone know if the OS even supports more than 2 MB?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you think the parity RAM could be causing an issue?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2016-12-08T23:00:26.990" Title="Why does my Macintosh SE FDHD only see 2 of the 4 megabytes of RAM?" Tags="&lt;hardware&gt;&lt;mac-os-classic&gt;&lt;memory&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1896" PostTypeId="2" ParentId="1887" CreationDate="2016-12-08T22:48:36.637" Score="37" Body="&lt;p&gt;As @phyrfox mentions, it is ordered dithering using a Bayer matrix.&lt;/p&gt;&#xA;&lt;p&gt;I recently was trying to find a 16×16 Bayer matrix (256 discrete values) but all the ones I could find were 8×8 max, so I derived the algorithm. It's actually a pretty simple recursion: (Python)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def InitBayer(size, value=0, step=1):&#xA;    matrix = [[0 for _ in range(size)] for _ in range(size)]&#xA;    &#xA;    def recurse(x, y, size, value, step):&#xA;        if size == 1:&#xA;            matrix[x][y] = value&#xA;            return&#xA;        &#xA;        half = size // 2&#xA;        for (xd, yd) in ((0, 0), (half, half), (half, 0), (0, half)):&#xA;            recurse(x + xd, y + yd, half, value, step * 4)&#xA;            value += step&#xA;    &#xA;    recurse(0, 0, size, value, step)&#xA;    return matrix&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;PNG images for the threshold matrix are located here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/tromero/BayerMatrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/tromero/BayerMatrix&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3936" LastEditorUserId="15334" LastEditDate="2021-03-07T17:44:08.123" LastActivityDate="2021-03-07T17:44:08.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1897" PostTypeId="2" ParentId="1895" CreationDate="2016-12-08T23:00:26.990" Score="9" Body="&lt;p&gt;AH!  I found out what it was.  I'm stupid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently, I'm supposed to remove the jumper for the 4 MB config.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ccadams.org/se/ram.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.ccadams.org/se/ram.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this question helps someone else out.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2016-12-08T23:00:26.990" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1898" PostTypeId="1" AcceptedAnswerId="1899" CreationDate="2016-12-08T23:33:25.097" Score="30" ViewCount="4662" Body="&lt;p&gt;Games like Super Mario Bros. and Super Mario Bros. 3 were able to scroll the playfield but not the status bar:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Plbcg.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Plbcg.png&quot; alt=&quot;Super Mario Bros. -- the status bar is on the top&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3TcYa.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3TcYa.png&quot; alt=&quot;Super Mario Bros. 3 -- the status bar is on the bottom&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The status bars are clearly too big to be sprites, yet they don't scroll with the background.  How did they do this?  How can I do this in my own NES games?&lt;/p&gt;&#xA;" OwnerUserId="409" LastActivityDate="2016-12-09T19:25:51.783" Title="How can I create a split-scroll effect in an NES game?" Tags="&lt;nes&gt;&lt;graphics&gt;&lt;software-development&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="1899" PostTypeId="2" ParentId="1898" CreationDate="2016-12-08T23:33:25.097" Score="39" Body="&lt;p&gt;This is done by changing the scroll mid-screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what the nametables look like on scanline 30 in Super Mario Bros, with the scroll shown:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nU3BP.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nU3BP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The horizontal scroll is 0 (you can barely see the white line on the left side).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the same image on scanline 31:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gOwI9.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gOwI9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the horizontal scroll is at the left edge of the visible area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PPU draws the screen in the same order you read text on a page -- left-to-right and top-to-bottom.  Each horizontal line of the picture is called a &lt;em&gt;scanline&lt;/em&gt;, and the picture is 240 scanlines tall.  In between each frame is a short period of time called &lt;em&gt;vertical blanking&lt;/em&gt; (or VBlank) where the PPU is idle.  The PPU cannot be written to outside of VBlank because it is &lt;em&gt;very&lt;/em&gt; busy and trying to talk to it will mess it up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally, to scroll the background, you write the scroll position to the &lt;code&gt;PPUSCROLL&lt;/code&gt; register (&lt;code&gt;$2005&lt;/code&gt;):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;lda xScroll&#xA;sta $2005&#xA;lda yScroll&#xA;sta $2005&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The first write sets the X scroll, and the second write sets the Y scroll.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to create a split scroll, set the scroll value for the top section of the picture during VBlank, wait until the PPU is drawing the last scanline of the top section, and then change set scroll for the bottom section.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Waiting for the PPU to reach the split point&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;There are two commonly used ways to detect once the PPU has reached a specific part of the picture:&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Sprite 0 Hit&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The PPU sets bit 6 of &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/PPU_registers#Status_.28.242002.29_.3C_read&quot;&gt;&lt;code&gt;PPUSTATUS&lt;/code&gt;&lt;/a&gt; if an opaque pixel of the sprite at OAM index 0 intersects an opaque background pixel.  It sets this flag as soon as it draws the intersecting pixel, so by putting sprite 0 at a clever location, a game can detect when the PPU has drawn a part of the picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the image of Super Mario Bros., but with background rendering disabled (so only sprites are visible):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YHjrP.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YHjrP.png&quot; alt=&quot;Mario, a Goomba, and something at the bottom of the status bar.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See that, above and slightly to the left of Mario's head?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EpXI1.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EpXI1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's Sprite 0, and it overlaps the bottom of the coin icon in the status bar:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SgAld.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SgAld.png&quot; alt=&quot;The coin counter&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Super Mario Bros detects once the PPU has drawn the coin with this loop:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Sprite0Wait:&#xA; lda $2002&#xA; and #$40&#xA; beq Sprite0Wait&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'd use the following loop, as it's slightly smaller and more efficient, but it does the same thing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Sprite0Wait:&#xA;    bit $2002&#xA;    bvc Sprite0Wait&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note: The Sprite 0 Hit flag isn't cleared until the pre-render line, so if that loop runs during VBlank, it will immediately detect &lt;strong&gt;the previous frame's&lt;/strong&gt; sprite 0 hit.  To fix this, wait until the sprite 0 hit flag to be &lt;em&gt;cleared&lt;/em&gt;, then wait for it to be set:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Sprite0ClearWait:&#xA;    bit $2002&#xA;    bvs Sprite0ClearWait&#xA;&#xA;Sprite0Wait:&#xA;    bit $2002&#xA;    bvc Sprite0Wait&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3&gt;Mapper interrupts&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Sprite 0 Hit works well for a status bar on the top, but what about Super Mario Bros. 3, which has the status bar on the bottom?  The game can't waste 80% of the frame waiting for the PPU to reach the status bar -- it needs to  time to run the game logic!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some mappers, such as the &lt;a href=&quot;//wiki.nesdev.com/w/index.php/MMC3&quot;&gt;MMC3&lt;/a&gt;, can generate an interrupt once the PPU reaches a certain scanline.  This is the easiest way to tell when the PPU reaches a certain point of the screen, and it's also the most efficient because the CPU can do other things instead of polling the PPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's how to set up a scanline IRQ with the MMC3.  Other mappers are similar but not the same; check &lt;a href=&quot;//wiki.nesdev.com&quot;&gt;wiki.nesdev.com&lt;/a&gt; if you're using a different mapper.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;A is the number of scanlines from now you want the interrupt.&#xA;;If this is run during VBlank, A is just the Y-coordinate&#xA;;you would like the interrupt at.&#xA;&#xA;sta $C000   ;Set the counter reload value.&#xA;sta $C001   ;Trigger a reload at the end of this scanline.&#xA;sta $E001   ;Enable the interrupt.&#xA;cli         ;Enable IRQs.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Your IRQ handler will then run once the PPU draws the target scanline.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Setting the scroll&lt;/h1&gt;&#xA;&#xA;&lt;h3&gt;Horizontal scroll only&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Setting the horizontal scroll is easy -- just write to &lt;code&gt;PPUSCROLL&lt;/code&gt; like normal.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Vertical scroll&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Setting the vertical scroll during rendering is far more difficult and requires knowledge of the implementation details of scrolling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PPU contains &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/PPU_scrolling#PPU_registers&quot;&gt;four internal registers&lt;/a&gt; to store address/scroll-related data.  These registers are modified by &lt;code&gt;PPUSCROLL&lt;/code&gt; and &lt;code&gt;PPUADDR&lt;/code&gt; (and the nametable select bits of &lt;code&gt;PPUCTRL&lt;/code&gt;).  These registers are usually referred to as &lt;code&gt;v&lt;/code&gt;, &lt;code&gt;t&lt;/code&gt;, &lt;code&gt;x&lt;/code&gt;, and &lt;code&gt;w&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;v&lt;/code&gt; is a 15-bit register which stores the current VRAM address.  &lt;code&gt;t&lt;/code&gt; is the temporary VRAM address, also 15 bits.  &lt;code&gt;x&lt;/code&gt; is a 3-bit register which stores the fine X scroll, and &lt;code&gt;w&lt;/code&gt;, a 1-bit register, stores whether this is the first or second write to &lt;code&gt;PPUADDR&lt;/code&gt; or &lt;code&gt;PPUSCROLL&lt;/code&gt;.  A read from &lt;code&gt;PPUSTATUS&lt;/code&gt; will reset &lt;code&gt;w&lt;/code&gt; to 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;PPUADDR&lt;/code&gt; directly sets &lt;code&gt;t&lt;/code&gt; and &lt;code&gt;v&lt;/code&gt;, while &lt;code&gt;PPUSCROLL&lt;/code&gt; only sets &lt;code&gt;t&lt;/code&gt;.  When writing a byte to &lt;code&gt;PPUADDR&lt;/code&gt;, if &lt;code&gt;w&lt;/code&gt; is 0 (the first write), the byte will be written to the upper 7 bits of &lt;code&gt;t&lt;/code&gt; and &lt;code&gt;w&lt;/code&gt; will be set to 1.  If &lt;code&gt;w&lt;/code&gt; is 1 (the second write), the byte will be written to the lower 8 bits of &lt;code&gt;t&lt;/code&gt;, &lt;code&gt;t&lt;/code&gt; will be copied to &lt;code&gt;v&lt;/code&gt;, and &lt;code&gt;w&lt;/code&gt; will be reset to 0.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&lt;code&gt;t&lt;/code&gt; and &lt;code&gt;v&lt;/code&gt; and scrolling&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The PPU also uses &lt;code&gt;t&lt;/code&gt; and &lt;code&gt;v&lt;/code&gt; to store scrolling information.  Due to the nametable layout, 15-bit addresses of tiles in nametable are structured like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;010 NN YYYYY XXXXX&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;NN&lt;/code&gt; is the nametable select from &lt;code&gt;PPUCTRL&lt;/code&gt;, &lt;code&gt;YYYYY&lt;/code&gt; is the coarse Y scroll (the upper 5 bits), and &lt;code&gt;XXXXX&lt;/code&gt; is the coarse X scroll.  Because the upper 3 bits are constant, they're used to store the fine Y scroll.  The fine X scroll is stored in &lt;code&gt;x&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PPU stores in &lt;code&gt;v&lt;/code&gt; the address/scroll of the tile currently being fetched, and &lt;code&gt;t&lt;/code&gt; stores the address/scroll of the upper-left corner.  When the PPU finishes fetching a tile, it increments &lt;code&gt;v&lt;/code&gt; to move to the next tile, and at the end of each scanline, it increments the vertical scrolling bits and reloads the horizontal scrolling bits from &lt;code&gt;t&lt;/code&gt; to jump to the beginning of the next scanline.  It only loads the vertical bits from &lt;code&gt;t&lt;/code&gt; at the top of the picture, which is why we can't easily modify vertical scroll in the middle of the picture.  However, the second write to &lt;code&gt;PPUADDR&lt;/code&gt; will fully copy &lt;code&gt;t&lt;/code&gt; to &lt;code&gt;v&lt;/code&gt;, even in the middle of a picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To fully set the scroll, we'll have to write to &lt;em&gt;both&lt;/em&gt; &lt;code&gt;PPUSCROLL&lt;/code&gt; and &lt;code&gt;PPUADDR&lt;/code&gt;.  The most common pattern is to write &lt;code&gt;PPUADDR&lt;/code&gt;, &lt;code&gt;PPUSCROLL&lt;/code&gt;, &lt;code&gt;PPUSCROLL&lt;/code&gt;, and then &lt;code&gt;PPUADDR&lt;/code&gt;.  &lt;code&gt;PPUSCROLL&lt;/code&gt; and &lt;code&gt;PPUADDR&lt;/code&gt; share &lt;code&gt;w&lt;/code&gt;, the latch that keeps track of whether it's the first or the second write.  This means we can do the following to change the horizontal and vertical scroll mid-frame:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Write &lt;code&gt;nametable &amp;lt;&amp;lt; 2&lt;/code&gt; to &lt;code&gt;PPUADDR&lt;/code&gt;.  This will write to the top half of &lt;code&gt;t&lt;/code&gt;  (We don't need to write the Y scroll bits here because they will be overwritten by the next write).&lt;/li&gt;&#xA;&lt;li&gt;Write the Y scroll to &lt;code&gt;PPUSCROLL&lt;/code&gt;.  This will write to the vertical scroll bits of &lt;code&gt;t&lt;/code&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Write the X scroll to &lt;code&gt;PPUSCROLL&lt;/code&gt;.  This will write the coarse X to the horizontal scroll bits of &lt;code&gt;t&lt;/code&gt; and the fine X to &lt;code&gt;x&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Write &lt;code&gt;((y &amp;amp; 0xF8) &amp;lt;&amp;lt; 2) | (x &amp;gt;&amp;gt; 3)&lt;/code&gt; to PPUADDR.  This will write to the bottom half of &lt;code&gt;t&lt;/code&gt; and copy &lt;code&gt;t&lt;/code&gt; to &lt;code&gt;v&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The last write should occur during horizontal blanking (but &lt;em&gt;after&lt;/em&gt; the PPU increments the vertical position) to avoid the split happening mid-scanline and looking glitchy.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Example code&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Here is some code to perform a horizontal and vertical scroll split.  If you're using sprite 0 hit, run this code after the hit is detected; if you're using a scanline IRQ, run this in your IRQ handler.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ;Write nametable bits to t.&#xA;    lda splitNT&#xA;    asl&#xA;    asl&#xA;    sta PPUADDR&#xA;&#xA;    ;Write y bits to t.&#xA;    lda splitY&#xA;    sta PPUSCROLL&#xA;&#xA;    ;The last write needs to occur during horizontal blanking&#xA;    ;to avoid visual glitches.&#xA;    ;HBlank is very short, so calculate the value to write now, before HBlank.&#xA;&#xA;&#xA;    and #$F8&#xA;    asl&#xA;    asl&#xA;    sta tmp&#xA;&#xA;    lda splitX&#xA;    ;Write the X bits to t and x.&#xA;    sta PPUSCROLL       &#xA;&#xA;    ;Finish calculating the fourth write.&#xA;    lsr&#xA;    lsr&#xA;    lsr&#xA;    ora tmp&#xA;&#xA;&#xA;    ;Wait for HBlank.&#xA;    ldx #06     ;How long to wait. Play around with this value &#xA;                ;until you don't have a visual glitch.&#xA;loop:&#xA;    dex&#xA;    bne loop&#xA;&#xA;&#xA;    ;Write to t and copy t to v.&#xA;    sta PPUADDR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="409" LastEditorUserId="409" LastEditDate="2016-12-09T19:25:51.783" LastActivityDate="2016-12-09T19:25:51.783" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1900" PostTypeId="2" ParentId="1666" CreationDate="2016-12-09T02:42:09.230" Score="6" Body="&lt;p&gt;&lt;a href=&quot;http://dgen.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;DGEN emulator&lt;/a&gt; has a starscream 68k core with a builtin dissasembler and debugger . &lt;kbd&gt;`&lt;/kbd&gt; might be the key to break into it once rom is running. It's also easy to recompile with SDL as the gfx/audio interface so you brew your own debug focused emulator, slap on a Python interface or similar and you got yourself a stew!&lt;/p&gt;&#xA;" OwnerUserId="3955" LastEditorUserId="278" LastEditDate="2016-12-09T07:34:52.830" LastActivityDate="2016-12-09T07:34:52.830" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="1902" PostTypeId="2" ParentId="1891" CreationDate="2016-12-09T09:58:23.703" Score="8" Body="&lt;p&gt;As Alan B wrote, the .bat interpreter is completely different: command.com in MS-DOS, cmd.exe in modern Windows versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/148968/windows-batch-files-bat-vs-cmd&quot;&gt;A related question on Stack Overflow&lt;/a&gt; gives a good insight, especially &lt;a href=&quot;https://stackoverflow.com/a/149918/5810657&quot;&gt;this answer&lt;/a&gt;. I won't duplicate it here, just a snippet:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Here is a list of cmd.exe features that are not supported by command.com:  &lt;/p&gt;&#xA;  &#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;Long filenames (exceeding the 8.3 format)&lt;br&gt;&#xA;    Command history&lt;br&gt;&#xA;    Tab completion&lt;br&gt;&#xA;    Escape character: ^ (Use for: \ &amp;amp; | &gt; &amp;lt; ^)&lt;br&gt;&#xA;    Directory stack: PUSHD/POPD&lt;br&gt;&#xA;    Integer arithmetic: SET /A i+=1&lt;br&gt;&#xA;    Search/Replace/Substring: SET %varname:expression%&lt;br&gt;&#xA;    Command substitution: FOR /F (existed before, has been enhanced)&lt;br&gt;&#xA;    Functions: CALL :label  &lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'd add from personal experience the FOR command, which is essential to pretty much any batch file to process, well, batches :-) was introduced in MS-DOS 5.0 but was quite limited back then. Command extensions and substitution of variables came with CMD.EXE. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just for the fun: if you run &lt;code&gt;for /?&lt;/code&gt; in a windows 10 command prompt, the first lines of text are 100% identical to the ones in MS-DOS 5.0 (which was released in 1991). This is what I call backward compatibility!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are allowed batch commands in MS-DOS 6.22 (as taken directly from MS-DOS 6.22 HELP command). They still work as intended as of Windows 10:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Call    Calls one batch program from another without causing the first batch program to stop. &#xA;If      Performs conditional processing in batch programs. If the condition specified by an IF command is true, MS-DOS carries out the command that follows the condition. If the condition is false, MS-DOS ignores the command.&#xA;Choice  Permits the user to make a choice in a batch program. Displays a specified prompt and pauses for the user to choose from among a specified set of keys.&#xA;Pause   Suspends processing of a batch program and displays a message that prompts the user to press any key to continue.&#xA;Echo    Displays or hide the text in batch programs when the program is running. Also indicates whether the command-echoing feature is on or off. You can also use the echo command to display a message.&#xA;Rem     Enables you to include comments in a batch file.&#xA;For     Runs a specified command for each file in a set of files.&#xA;Shift   Changes the position of replaceable paramaters in a batch program.&#xA;Goto    Directs MS-DOS to a line in a batch program that is marked by a label you specify.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The following commands have command extensions in CMD.EXE (but remain backward compatible)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Call    CALL command now accepts labels as the target of the CALL.&#xA;If      IF [/I] string1 compare-op string2 command (compare-op can be EQU, NEQ, LSS, LEQ, GTR, GEQ)&#xA;        IF CMDEXTVERSION number command (not really sure what it does)&#xA;        IF DEFINED variable command (returns true if the environment variable is defined)&#xA;Choice  Adds a few switches such as &#xA;        /CS Enables case-sensitive choices to be selected.&#xA;            By default, the utility is case-insensitive.&#xA;        /D  Specifies the default choice after nnnn seconds.&#xA;        /M  Specifies the message to be displayed before the prompt. (in MS-DOS, no switch is required for this)&#xA;For     As stated above, this is a command that has been improved a lot. Too many extensions to print here :) Check http://ss64.com/nt/cmd.html &#xA;Goto    GOTO command now accepts a target label of :EOF which transfers control to the end of the current batch script file.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Compiled from running help  in a windows 10 command prompt)&lt;/p&gt;&#xA;" OwnerUserId="271" LastEditorUserId="-1" LastEditDate="2017-05-23T12:39:25.033" LastActivityDate="2016-12-09T11:31:44.387" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1903" PostTypeId="2" ParentId="1892" CreationDate="2016-12-09T09:59:30.760" Score="12" Body="&lt;p&gt;&lt;a href=&quot;http://www.biography.com/people/ada-lovelace-20825323#synopsis&quot;&gt;Ada Lovelace&lt;/a&gt; didn't write any code as such.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is largely because the Analytical Engine, being created by &lt;a href=&quot;http://www.charlesbabbage.net/&quot;&gt;Charles Babbage&lt;/a&gt; was never finished and so no code could be run.  Babbage designed the Analytical Engine to be a much more capable machine than the Difference Engine and to be capable of operating a program from punched cards - which he called &lt;em&gt;Operation Cards&lt;/em&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lovelace worked with Babbage to create a method of describing and encoding algorithms on these cards.  Essentially she invented computer language and programming. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;She foresaw the uses to which these calculating devices could be put.  However, none of her cards, if any were produced, have survived.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2016-12-09T09:59:30.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1904" PostTypeId="2" ParentId="1887" CreationDate="2016-12-09T10:48:47.110" Score="18" Body="&lt;p&gt;As I recall, the Windows code did have some special cases.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you asked for #C0C0C0 you would of course get solid #C0C0C0. This&#xA;was a special case; if you asked for #BFBFBF then you would get a&#xA;chequerboard dither using #808080 and #FFFFFF.&lt;/li&gt;&#xA;&lt;li&gt;The dither used an 8×8 matrix, so it would only approximate 18-bit colour.&lt;/li&gt;&#xA;&lt;li&gt;If all channels had a value of 128 or less then it would dither using a palette of the seven dark colours and #000000. (However, it was still only 18-bit colour, so it jumped two pixels at a time.)&lt;/li&gt;&#xA;&lt;li&gt;If at least one channel had a value greater than 128 then it would dither using a palette of the seven bright colours, plus #808080 and #000000.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3994" LastEditorUserId="15334" LastEditDate="2021-04-11T08:35:57.793" LastActivityDate="2021-04-11T08:35:57.793" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="1905" PostTypeId="2" ParentId="1892" CreationDate="2016-12-09T12:48:59.380" Score="6" Body="&lt;p&gt;This is not a direct answer to the question, but one of the best (and additionally entertaining) ways to learn more about Ada Lovelace, Babbage and the Analytical Machine is a graphical novel called &lt;a href=&quot;http://sydneypadua.com/2dgoggles/&quot; rel=&quot;noreferrer&quot;&gt;The Thrilling Adventures of Lovelace and Babbage&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It contains a ton of information (including original letters and graphics) in it's footnotes and appendices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also explains the the programming model behind the Analytical Machine.&lt;/p&gt;&#xA;" OwnerUserId="4000" LastActivityDate="2016-12-09T12:48:59.380" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1906" PostTypeId="2" ParentId="1208" CreationDate="2016-12-09T14:33:26.150" Score="6" Body="&lt;p&gt;Apart from other version-related changes, there is a notable functional difference between the CDTV extended ROM and the A570 extended ROM: for some reason, perhaps related to the fact that the A570 was expected to run in an Amiga 500 (which unlike the CDTV has a builtin floppy drive by default), the A570 version expects DF0: to be present, whereas the CDTV ROMs verifies whether DF0: exists or not. For this reason an A570 extended ROM used on a CDTV system (without floppy drive) will display a &quot;red screen&quot; error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, the A570 ROM is appealing for use on a CDTV because it is newer (2.30) than the original CDTV versions (e.g. 1.0, 2.7), and adds support for base ROMs newer than 1.3. For this reason, Cloanto released a ROM which combines the newer features of the A570 version, with the proper floppy check of the CDTV version. You can find it under A5A6ED15 at &lt;a href=&quot;https://cloanto.com/amiga/roms/&quot; rel=&quot;noreferrer&quot;&gt;cloanto.com/amiga/roms&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4005" LastActivityDate="2016-12-09T14:33:26.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1907" PostTypeId="2" ParentId="325" CreationDate="2016-12-09T19:19:12.707" Score="8" Body="&lt;p&gt;The best audio quality was obtained with &lt;code&gt;pulse width modulation&lt;/code&gt; using the square wave voice.  The oscillator was set to 0 and the pulse width was set by flipping the pulse width from 0 to maximum. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the CPU speed at 1mHz the fastest pulse switch rate achievable is around 15kHz, producing a sound wave of 7.5 kHz or less. Setting the low pass filter help smooth the sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vQ8PO.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vQ8PO.gif&quot; alt=&quot;Pulse width modulation to sound wave example&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://en.wikipedia.org/wiki/Pulse-width_modulation&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Pulse-width_modulation&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.c64-wiki.com/index.php/SID&quot; rel=&quot;noreferrer&quot;&gt;https://www.c64-wiki.com/index.php/SID&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2054" LastEditorUserId="2054" LastEditDate="2016-12-09T20:13:53.757" LastActivityDate="2016-12-09T20:13:53.757" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1908" PostTypeId="1" AcceptedAnswerId="9171" CreationDate="2016-12-09T19:30:25.867" Score="15" ViewCount="684" Body="&lt;p&gt;I'm working on an emulator for the Soviet mainframe BESM-6. Among a few games written for it there was a game called &quot;Inspector&quot; (or &quot;Detective&quot;). Its code didn't survive; the only mention of it I can find on the available disk images is that it was &quot;adapted and reworked&quot; without mentioning the source. The usual source for non-original computer games in the USSR in the early 80s were Western magazines, which means that there should likely be a BASIC language prototype for the game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game play was, IIRC, as follows: the player is a detective trying to solve a murder of a party host, that happened between 1am and 9am in one of the ~6 rooms of the house. The player can interrogate each of the ~5-6 guests asking questions like &quot;Which room were you in at N o'clock&quot; and &quot;When were you in such-and-such room?&quot; In their responses guests would mention who else was in the room with them, including the host if he was still alive, and could provide some additional information. The culprit could lie.&#xA;The guests could move from a room to an adjacent room between the hours, the host stayed in one room.&#xA;A good result was solving the murder in 4-5 questions. The program allowed up to 9 questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this ring a bell?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've reproduced the gameplay from memory as a C++ program. Here is a sample successful session:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;There was a murder in a country house between 1am and 9am&#xA;during a party. The party host has been murdered. You have to&#xA;interrogate five guests: Andrew, Bob, Charles, David and Evan.&#xA;The questions you may ask are ``At what time were you in a given room?''&#xA;and ``Where were you at a given hour?''.&#xA;The plan of the house is:&#xA;Bedroom - Study - Living room - Dining room - Kitchen - Greenhouse&#xA;The questions are entered as &amp;lt;letter&amp;gt;&amp;lt;letter&amp;gt; for the first question&#xA;using initial letters of the suspect name and the room, or&#xA;&amp;lt;letter&amp;gt;&amp;lt;digit&amp;gt; for the second question (the time is given as one digit 1-9).&#xA;The host had stayed in the same room both alive and dead;&#xA;the guests could move from a room to an adjacent room between the hours.&#xA;The innocent will answer truthfully, the culprit could lie.&#xA;An accusation can be entered as &amp;lt;letter&amp;gt;&amp;lt;digit&amp;gt;&amp;lt;letter&amp;gt;, mentioning the time&#xA;and the room.&#xA;&#xA;Question 1: a1&#xA;Andrew: At 1 o'clock I was in the Study.&#xA;        The host, still alive, was in one of the adjacent rooms.&#xA;        David was in the adjacent rooms.&#xA;Question 2: d1&#xA;David: At 1 o'clock I was in the Bedroom.&#xA;       The host, still alive, was also there.&#xA;       Andrew was in the adjacent rooms.&#xA;Question 3: db&#xA;David: I was in the Bedroom at 1 o'clock&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Oops, David never was in the bedroom after 1 o'clock. Let's ask Andrew again.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Question 4: ab&#xA;Andrew: I was in the Bedroom at 7, 9 o'clock&#xA;Question 5: a7&#xA;Andrew: At 7 o'clock I was in the Bedroom.&#xA;        Bob was in the same room.&#xA;        There were no guests in the adjacent rooms.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It is known that the guests never mention the dead body. This means that by 7 o'clock the host was already dead. Let's see what Bob says about an earlier hour. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Question 6: b5&#xA;Bob: At 5 o'clock I was in the Bedroom.&#xA;     The host, still alive, was also there.&#xA;     There were no guests in the adjacent rooms.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This means that the host was murdered at 6 o'clock, and as nobody could enter the bedroom between 5 and 6 o'clock, it was Bob who had murdered the host.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Question 7: b6b&#xA;With your help, the murderer was tried and convicted!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It was helpful that as the culprit was not asked about the exact time or the location of the murder, he answered truthfully.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="15407" LastEditDate="2019-12-20T01:57:51.570" LastActivityDate="2019-12-20T01:57:51.570" Title="Looking for an &quot;Inspector&quot; or &quot;Detective&quot; game (BASIC?)" Tags="&lt;identify-this-game&gt;&lt;ussr&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1909" PostTypeId="1" AcceptedAnswerId="2303" CreationDate="2016-12-09T20:19:42.720" Score="16" ViewCount="353" Body="&lt;p&gt;There were only a small number of games that supported any of the Apple II sound cards such as the &lt;code&gt;Mockingboard&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From those games that used the Mockingboard, did any of them utilize the on-board VIA's timers or interrupts for anything?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, were all of the games straight PORT A/B access from the CPU?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the schematics I've seen, the IRQ line is attached to one VIA and the NMI is attached to the other VIA.  But I have no idea if any games utilized them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="2081" LastEditDate="2016-12-12T13:57:46.507" LastActivityDate="2017-02-12T06:49:17.153" Title="Did any Mockingboard game use the VIA timers or interrupts?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;audio&gt;&lt;interrupt&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1910" PostTypeId="2" ParentId="1908" CreationDate="2016-12-09T20:36:10.523" Score="8" Body="&lt;p&gt;No sign of the actual game but found a mention of it in the &quot;besm6&quot; mailing list:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://groups.google.com/d/msg/besm6/qCfnrd8i0jQ/Ac1j6ik60akJ&quot; rel=&quot;noreferrer&quot;&gt;https://groups.google.com/d/msg/besm6/qCfnrd8i0jQ/Ac1j6ik60akJ&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It was based on a BASIC game, publishes in the '70s in a magazine such as BYTE (or Datamation).&#xA;  I my time I've read such magazines in ГПНТБ(Russian National Public Library for Science and Technology), and programmed plenty of similar games for СМ-1420 (SM1420), one of them had text equivalent to that of &quot;Inspector&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="3783" LastActivityDate="2016-12-09T20:36:10.523" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1911" PostTypeId="2" ParentId="1613" CreationDate="2016-12-09T23:11:17.037" Score="23" Body="&lt;p&gt;I was involved with hardware remakes / clones of a few machines and we did reverse engineer one G&amp;amp;W game; I think it was &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Game_%26_Watch_games#Green_House&quot; rel=&quot;noreferrer&quot;&gt;Green House&lt;/a&gt;, if I remember well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The games are build around a custom ASIC and the rest of the circuitry is essentially support for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, if you've ever opened a G&amp;amp;W game double screen game, you'll have noticed that the main chip is sitting 45° from the main board and this was done because at the time the boards were soldered through a wave soldering machine and it allows all the pins to be properly soldered without bridges between them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me tell you how they work but be prepared that it will totally kill the magic:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole game is essentially a polynomial generator and a few shift registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The polynomial unit will generate the same bit stream every single time it is started.&#xA;Its output is fed to a de-multiplexer and each output feeds a shift register. Each bit in these registers is tied to an element in the LCD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All motion done by the player is also mapped in a shift register and then a simple hardwired AND determines collisions. Possible actions in a given state are encoded in a matrix and the logic can swap bits at specific positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game gets faster and faster by just changing the clock (which is essentially gated by another shift register).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now with this information in mind, play the games again and you'll be able to see the logic at work where the player is essentially always on a long bit string and that when the objects become faster, so does the player input, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We didn't reverse other games, but I see no reason why they'd have a different hardware since only one small matrix on top of that system can make a different game; Zelda is different, but it came years after the rest and I have no clue how it is made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a bit more logic to it, but that's essentially it; some of the logic is to drive the screen; I don't remember the reason but I was explained that LCD screens from that era needed the segments to be toggled on / off to prevent some damage, apparently it's the same in watches; if anyone worked with that technology, I'd be happy to understand the details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware is tiny and could be re-implemented in a FPGA in an afternoon, but it was really clever since there is no CPU involved; It would be trivial to recreate the ASIC in software as well with very little code where each game is a different table.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastEditorUserId="202" LastEditDate="2016-12-26T01:22:42.503" LastActivityDate="2016-12-26T01:22:42.503" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1912" PostTypeId="2" ParentId="1308" CreationDate="2016-12-10T21:08:00.357" Score="2" Body="&lt;p&gt;If memory serves the LCIII uses a 2 pin 4ohm speaker. Is it possible you simply didn't reattach it the last time you had the board out?&lt;/p&gt;&#xA;" OwnerUserId="3648" LastActivityDate="2016-12-10T21:08:00.357" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1913" PostTypeId="2" ParentId="1837" CreationDate="2016-12-11T21:28:22.297" Score="4" Body="&lt;p&gt;Most chips do not like to have signals applied when they are not powered or lack a ground connection; how they react may depend upon a variety of factors.  Because cartridge card edges generally made no effort to ensure that power and ground would be connected before anything else, inserting or removing a cartridge to a live system could result in a chips having some pins connected and driven while power and ground aren't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's unlikely that inserting or removing an Atari 2600 cartridge while a console is powered on would cause such a perfect storm of coincidences as to cause damage to the console or cartridge, but it could certainly stress components momentarily beyond their ratings, and neither Atari nor any other manufacturer would want to guarantee that such stress would never cause failure.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2016-12-11T21:28:22.297" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1914" PostTypeId="2" ParentId="1837" CreationDate="2016-12-12T08:22:03.900" Score="1" Body="&lt;p&gt;It was indeed possible to damage a Commodore 64 by inserting a cartridge while the power was on - it could destroy the CIA chips, for example. &lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2016-12-12T08:22:03.900" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1916" PostTypeId="5" CreationDate="2016-12-12T09:37:45.237" Score="0" Body="&lt;p&gt;For questions regarding the practice of dithering, which is the use of noise to compensate for quantization error, often employed to represent images with more colours than the physical display is capable of displaying.  This includes alternating images on a display to fool the eye into seeing a third version of the image.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-20T06:35:02.330" LastActivityDate="2021-02-20T06:35:02.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1917" PostTypeId="4" CreationDate="2016-12-12T09:37:45.237" Score="0" Body="Dithering, the practice of using noise to compensate for quantization error." OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-20T06:35:02.330" LastActivityDate="2021-02-20T06:35:02.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1918" PostTypeId="1" AcceptedAnswerId="1947" CreationDate="2016-12-13T06:02:28.990" Score="13" ViewCount="616" Body="&lt;p&gt;Several decades ago, the Hungarian company &quot;Videoton&quot; manufactured a &lt;a href=&quot;https://www.google.com/search?q=videoton+340&amp;amp;tbm=isch&quot; rel=&quot;noreferrer&quot;&gt;videoterminal&lt;/a&gt; for which I couldn't find a Western prototype. It likely existed, as the device had been assigned a &quot;ES&quot; number, similar to the Easter Bloc clones of Western computer hardware. Please note that the VT-340 designation has no relation to DEC VT340.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distinguishing characteristics were: serial or byte-parallel interface, ASCII-like encoding (or rather KOI-7 for Cyrillic, where Cyrillic letters replaced the lowercase Latin letters) - as opposed to EBCDIC, thus likely no IBM heritage; all control codes were single-byte, no escape sequences; cursor left was ^H (same as backspace, there was no separate key for backspace), the remaining three directions were ^X-^Y-^Z. There also were insert/delete line/char control codes; the direct positioning code was ^A; the board implementing this feature was optional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linefeeds (^J) and most other ctrl-characters (of which most did nothing interesting) occupied a character position, displayed as a space by default. The CTRL BLINK mode key would switch between the default mode and the &quot;blinking controls&quot; mode.&#xA;It was possible to switch the terminal off-line, entering or editing the screen contents, ending with ^C (ETX), then moving the cursor to the beginning of the text to be sent and  pressing &quot;SEND&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is quite probable that the prototype would be from Europe rather than the U.S. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have asked that question a few times in various Russian fora over the last few years with no definitive answer. Nobody seems to remember what happened in the videoterminal world before DEC VT52.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2016-12-13T06:17:00.057" LastActivityDate="2016-12-20T00:33:50.343" Title="What is the prototype of the Eastern Bloc videoterminal Videoton 340?" Tags="&lt;hardware&gt;&lt;terminal&gt;&lt;mainframe&gt;" AnswerCount="1" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1919" PostTypeId="1" AcceptedAnswerId="1920" CreationDate="2016-12-14T14:15:24.500" Score="27" ViewCount="3039" Body="&lt;p&gt;I am trying to write an Applesoft / floating point BASIC program using high resolution graphics and some assembly language code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My BASIC program is quite large, and after running the program for a while it crashes for no apparent reason, or my machine code stops working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I'm using hi-res page 2, I see random garbage appearing on the screen, which disappears when the screen is cleared, but then the program crashes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I was working on a very long BASIC program, all was fine until I ran it, it cleared graphics page 1... and it crashed and the end of my program listing disappeared.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's going on?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2020-06-01T19:32:54.713" Title="Apple II: Applesoft BASIC memory management" Tags="&lt;apple-ii&gt;&lt;programming&gt;&lt;applesoft-basic&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1920" PostTypeId="2" ParentId="1919" CreationDate="2016-12-14T14:15:24.500" Score="33" Body="&lt;p&gt;Managing memory on an Apple II using Applesoft BASIC can be quite complicated, especially for large programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A general map of Apple II memory at power-up looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$E000-FFFF - Monitor ROM / Extended RAM     8 / 8 kB&#xA;$D000-DFFF - BASIC ROM / RAM bank 1 &amp;amp; 2     4 / 4 / 4 kB&#xA;$C800-CFFF - Shared slot ROM memory         2 kB&#xA;$C100-C7FF - Permanent Slot ROM memory      256 per slot&#xA;$C000-C0FF - Softswitches                   256 bytes&#xA;$6000-BFFF - Free memory                    24 kB &#xA;$4000-5FFF - Free memory / Hi-Res page 2    8 kB&#xA;$2000-3FFF - Free memory / Hi-Res page 1    8 kB&#xA;$0C00-1FFF - Free memory                    5 kB&#xA;$0800-0BFF - Free memory / Text page 2      1 kB&#xA;$0400-07FF - Text page 1                    1 kB&#xA;$03D0-03FF - Interrupt vectors              48 bytes&#xA;$0300-03CF - Free memory                    208 bytes&#xA;$0200-02FF - Input prompt character buffer  256 bytes&#xA;$0100-01FF - CPU stack                      256 bytes&#xA;$0000-00FF - Zero page                      256 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When DOS 3.3 boots, it loads itself as high as possible in memory, just below $C000, and normally occupies $9600 to $BFFF, with 3 file buffers each 595 bytes long.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$9600-BFFF - DOS 3.3 and 3 file buffers     10.5 kB&#xA;$6000-95FF - Free memory                    13.5 kB&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If the number of buffers is reduced to 1, using the DOS command &lt;strong&gt;MAXFILES 1&lt;/strong&gt; then DOS occupies $9AA6 to $BFFF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applesoft BASIC programs normally load starting at $801, overlapping text page 2. BASIC programs load linearly into memory, and they cannot &quot;jump over&quot; memory regions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a BASIC program grows past 6 kilobytes in length ($0800 to $1FFF), it starts to cross into hi-res graphics page 1 followed by hi-res page 2. If you do anything with hi-res page 1 in this situation, you will damage or delete the end of your program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a BASIC program runs, it normally uses variables to store numbers and strings. These are stored in two separate groups, with the number values being placed immediately after the end of the program and growing upward, and the strings placed high in memory below DOS and growing downward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, over time as a BASIC program runs, both graphics pages are at risk of being overwritten with variable data, from above and below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if you were to write an assembly language program and store it at $6000, it is also at risk of eventually being overwritten by variables as a BASIC program continues to run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally the variable and string use will grow indefinitely until the two come together. Then BASIC will perform what is called &lt;em&gt;garbage collection&lt;/em&gt;, scanning through variable memory and removing unused old values and recovering free space. Garbage collection can be quite slow, if left to happen on its own in one huge process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can force BASIC to do variable garbage collection immediately by using the command &lt;strong&gt;PRINT FRE(0)&lt;/strong&gt;, which both returns a value reporting free memory for variables, and also runs garbage collection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using this command frequently in large programs will keep variable usage from growing too large, as well as preventing garbage collection from becoming too slow when it does happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In ProDOS, there is a DOS command FRE which is much faster than the FRE(0) built into Applesoft BASIC. This is used with the command &lt;strong&gt;PRINT CHR$(4)&quot;FRE&quot;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to control where BASIC stores variables using the commands &lt;strong&gt;HIMEM:&lt;/strong&gt; and &lt;strong&gt;LOMEM:&lt;/strong&gt; ... these are odd commands in that the colon is part of the command name.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;LOMEM: is automatically adjusted by BASIC to point to the memory just after the end of a BASIC program. To obtain the current value, use: &lt;strong&gt;PRINT PEEK(74) + 256 * PEEK(75)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HIMEM: is automatically adjusted by DOS to point to just before the beginning of DOS. To obtain the current value, use: &lt;strong&gt;PRINT PEEK(76) + 256 * PEEK(77)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To change where variables are stored, these two commands are used as soon as possible in a program before any variables are created.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To push all variables above $6000 so that the graphics pages are never overwritten accidentally, use &lt;strong&gt;LOMEM: 24576&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To confine all variables to the graphics page 2 memory region, and protect $0800-$3FFF and $6000-$95FF, use &lt;strong&gt;LOMEM:16384 : HIMEM:24575&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An advanced memory management trick is to change where BASIC stores programs. This location is configured when BASIC first loads and can be changed when running programs, and is stored at $67-$68 or 103,104 decimal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example if you have a very large BASIC program that overlaps hi-res page 1, but you want to use text page 2, hi-res page 1, and hi-res page 2, you can tell DOS and BASIC to load and run programs starting at $6001.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The memory value directly before the start of a BASIC program must be zero, so $6000 is set to 0 before reloading.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 REM If BASIC program load address is $0801,&#xA;20 REM   then change to $6001 and reload this program.&#xA;30 IF PEEK(104) = 8 THEN POKE 104,96 : POKE 24576,0 :&#xA;      PRINT &quot;RELOADING&quot; : PRINT CHR$(4)&quot;RUN THIS-PROGRAM&quot;&#xA;&#xA;SAVE THIS-PROGRAM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This also automatically confines variables to above your program between $6000 and the start of DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need even more free memory than what DOS 3.3 provides, and you have a 64k or better Apple II, you can use the customized DOS 3.3 called &lt;strong&gt;DAVID-DOS&lt;/strong&gt;, which includes a command called &lt;strong&gt;HIDOS&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://mirrors.apple2.org.za/ftp.apple.asimov.net/images/masters/3rd_party_dos/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://mirrors.apple2.org.za/ftp.apple.asimov.net/images/masters/3rd_party_dos/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This command relocates most of DAVID-DOS into the bank-switched high memory area above $CFFF. Only a small 512 byte stub remains in the 48k memory space, at $BE00-$BFFF, so that it can access the rest of its program code that is sharing memory addresses with the BASIC and Monitor ROM.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$BE00-BFFF - DAVID-DOS bank-switcher        0.5 kB&#xA;$6000-BDFF - Free memory                    23.5 kB&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, if you have a very short assembly language program and you want to avoid all this complexity, it is very common to put short assembly programs in the area of $0300-$03CF as this area is normally not used for anything else and will not be overwritten by BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT June 1, 2020:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Part of the reasons for these complexities appears to be the high cost of memory when the Apple II was still very new.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to Wikipedia, the Apple II was first sold in 1977 with only 4 kB of memory installed for US$1298 or with 48 kB of memory for US$2638. This works out to $30.45 per kilobyte in 1977, or $128.83 per kilobyte in 2020, and $11,160 for the 48 kB Apple II in 2020 dollars.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reference: &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II_series#Apple_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Apple_II_series#Apple_II&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first 2 kilobytes enable pages $00 to $07, for the zero page, stack, input buffer, vectors, and text / lo-res page 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second 2 kilobytes enable pages $08 to $0F, providing free memory for BASIC or machine language programs, and loading and saving either of these using cassette tape. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$E000-FFFF - Monitor ROM                    8 kB&#xA;$D000-DFFF - BASIC ROM                      4 kB&#xA;$C800-CFFF - Shared slot ROM                2 kB&#xA;$C100-C7FF - Permanent Slot ROM             256 per slot&#xA;$C000-C0FF - Softswitches                   256 bytes&#xA;$1000-BFFF - Not usable                     44 kB&#xA;$0C00-0FFF - Free memory                    1 kB&#xA;$0800-0BFF - Free memory / Text page 2      1 kB&#xA;$0400-07FF - Text page 1                    1 kB&#xA;$03D0-03FF - Interrupt vectors              48 bytes&#xA;$0300-03CF - Free memory                    208 bytes&#xA;$0200-02FF - Input prompt character buffer  256 bytes&#xA;$0100-01FF - CPU stack                      256 bytes&#xA;$0000-00FF - Zero page                      256 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However memory was not required to be installed in contiguous regions across the entire memory address space. Unlike modern computers, there was no memory management circuitry, and the memory socket pins on the motherboard directly correspond to the address map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was possible to purchase 8 kB of memory (for about US$1000 in 2020 dollars) and socket it into only memory pages $2000-3FFF to enable high resolution graphics page 1, while leaving the 4 kB at pages $1000-1FFF unusable.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$E000-FFFF - Monitor ROM                    8 kB&#xA;$D000-DFFF - BASIC ROM                      4 kB&#xA;$C800-CFFF - Shared slot ROM                2 kB&#xA;$C100-C7FF - Permanent Slot ROM             256 per slot&#xA;$C000-C0FF - Softswitches                   256 bytes&#xA;$4000-BFFF - Not usable                     32 kB&#xA;$2000-3FFF - Hi-res page 1                  8 kB&#xA;$1000-1FFF - Not usable                     4 kB&#xA;$0C00-0FFF - Free memory                    1 kB&#xA;$0800-0BFF - Free memory / Text page 2      1 kB&#xA;$0400-07FF - Text page 1                    1 kB&#xA;$03D0-03FF - Interrupt vectors              48 bytes&#xA;$0300-03CF - Free memory                    208 bytes&#xA;$0200-02FF - Input prompt character buffer  256 bytes&#xA;$0100-01FF - CPU stack                      256 bytes&#xA;$0000-00FF - Zero page                      256 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="3687" LastEditDate="2020-06-01T19:32:54.713" LastActivityDate="2020-06-01T19:32:54.713" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="1921" PostTypeId="1" CreationDate="2016-12-14T14:45:12.777" Score="5" ViewCount="784" Body="&lt;p&gt;While typing immediate-mode commands in Apple II Applesoft / floating point BASIC, I discovered an odd situation where I will get other programming error messages before a syntax error. Why does it do this?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;]NEW&#xA;]sagdgg&#xA;?SYNTAX ERROR&#xA;&#xA;]sagdgg P(10)&#xA;?BAD SUBSCRIPT ERROR&#xA;&#xA;]P(10)&#xA;?BAD SUBSCRIPT ERROR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Immediate-mode dimensioning now changes this behavior.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;]DIM P(10)&#xA;]P(10)&#xA;?SYNTAX ERROR&#xA;&#xA;]P(11)&#xA;?BAD SUBSCRIPT ERROR&#xA;&#xA;]sagdgg P(10)&#xA;?SYNTAX ERROR&#xA;&#xA;]sagdgg P(11)&#xA;?BAD SUBSCRIPT ERROR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then there's this weirdness&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;]NEW&#xA;]P(P(P(P(P(P(P(P(P(P(P(P&#xA;?SYNTAX ERROR&#xA;&#xA;]P(P(P(P(P(P(P(P(P(P(P(P(P&#xA;?OUT OF MEMORY ERROR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2016-12-14T19:48:28.660" Title="Apple II: Applesoft variable syntax error weirdness" Tags="&lt;apple-ii&gt;&lt;programming&gt;&lt;applesoft-basic&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1922" PostTypeId="2" ParentId="1921" CreationDate="2016-12-14T15:58:15.517" Score="5" Body="&lt;p&gt;This is the result of the way AppleSoft &quot;parses&quot; programs.  From the behavior you described, I can infer that at a high level, AppleSoft executes commands in two steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Evaluate arguments to the command (if any)  &lt;/li&gt;&#xA;&lt;li&gt;Execute command&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&quot;sagdgg&quot; has no arguments so step 1 is skipped, then in step 2 AppleSoft discovers that there is no such command as &quot;sagdgg&quot; and gives you a syntax error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;sagdgg P(10)&quot; does have an argument so AppleSoft tries to evaluate it.  But while looking up the value in the P array, it finds that the array isn't that large and gives you a bad subscript error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;P(P(P(P(P(P(P(P(P(P(P(P(P&quot; is a deeply nested argument, and evaluating a nested argument requires use of a stack.  The basic reason for this can better be explained with a simpler expression: &quot;X(Y)&quot;.  To evaluate this you must evaluate Y before you can determine the value of X(Y).  Similarly: to evaluate &quot;P(P(P(P(P(P(P(P(P(P(P(P(P&quot;, you must first evaluate &quot;P(P(P(P(P(P(P(P(P(P(P(P&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To evaluate that, you must first evaluate &quot;P(P(P(P(P(P(P(P(P(P(P&quot;;&lt;br&gt;&#xA;To evaluate that, you must first evaluate &quot;P(P(P(P(P(P(P(P(P(P&quot;;&lt;br&gt;&#xA;To evaluate that, you must first evaluate &quot;P(P(P(P(P(P(P(P(P&quot;;&lt;br&gt;&#xA;And so on and so forth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But while doing all that nested evaluation, AppleSoft runs out of stack space, because each time it needs to evaluate a sub-expression it needs to save some information about where it was in the process of evaluating the outer expressions.  When the inner-most expression has finally been evaluated it will be able to 'backtrack' and resume evaluation of the next layer expression, and when that's done backtrack to the &lt;em&gt;next&lt;/em&gt; layer, etc., until finally the entire expression has been evaluated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case no backtracking happens because AppleSoft runs out of memory first, and gives an out of memory error.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2016-12-14T15:58:15.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1923" PostTypeId="1" CreationDate="2016-12-14T16:43:23.337" Score="10" ViewCount="1287" Body="&lt;p&gt;Is there a way in ProDOS 8, to directly run old DOS 3.3 binary games without loading BASIC.SYSTEM ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most games never access DOS 3.3 once the program was running, so even though these were never meant to run under ProDOS, it seems like they should be able to run directly from a ProDOS 8 launch menu without needing the BASIC language support of BASIC.SYSTEM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I expect the general method is to take an old DOS 3.3 game such as Mario Brothers or Dig Dug, and enclose it inside of some sort of simple ProDOS 8 loader module, and then save it as a *.SYSTEM file, type SYS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone ever found a way to do this?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2016-12-15T03:41:29.827" Title="Apple II / ProDOS: Run binary games without BASIC.SYSTEM?" Tags="&lt;apple-ii&gt;&lt;programming&gt;&lt;apple-dos&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1924" PostTypeId="2" ParentId="1921" CreationDate="2016-12-14T17:13:03.683" Score="8" Body="&lt;p&gt;In Applesoft BASIC, the parser recognizes reserved words greedily, but spaces outside tokens or reserved words are ignored.  Variable names may consist of any sequence of letters or numbers provided they start with a letter &lt;em&gt;and do not contain any reserved words&lt;/em&gt;.  Because the code for listing programs adds spaces before and after recognized tokens, typing a line into a program and then listing it can show how it was parsed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, given:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FA=123:BUN=4:F=9:O=3&#xA;20 GR&#xA;30 ? FAMILY&#xA;40 H LINO,FATBURGER&#xA;50 ? FATALIST&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The program would probably list as something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FA = 123 : BUN = 4: F = 9 : O = 3&#xA;20  GR&#xA;30  PRINT FAMILY&#xA;40  HLIN O,F AT BURGER&#xA;50  PRINT F AT A LIST&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In line 30, FAMILY will be a reference to variable FA, which has a value of 123.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In line 40, O will have a value of 3, F will have a value of 9, and BURGER will be treated as a reference to variable BU whose value is 4.  In line 50, I would expect that unexpected appearances of keywords AT and LIST will trigger a syntax error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If memory serves, it's possible to create code which uses reserved words as variable names if one breaks up the words using spaces when typing them.  Such spaces will not be preserved when the program is listed, however, so care must be taken when editing lines containing such names.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typing in:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 T OMA TO=23&#xA;2 PRINT T O&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would generate a program that would be listed out as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 TOMATO = 23&#xA;2  PRINT TO&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but typing in line 2 the way it appears in the listing would change it to&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;2  PRINT  TO&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which would yield a syntax error when run [note that tokens are shown both preceded and followed by a space, and in the latter case &quot;TO&quot; is a token but in the former case it isn't].&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2016-12-14T19:48:28.660" LastActivityDate="2016-12-14T19:48:28.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1925" PostTypeId="1" AcceptedAnswerId="2191" CreationDate="2016-12-14T17:39:10.543" Score="7" ViewCount="197" Body="&lt;p&gt;otx is a tool used to disassemble Mach-O binaries on OS X 10.0-10.4.  It is an enhancement on top of otool to add additional symbol information to its disassembled output.&lt;/p&gt;&#xA;&lt;p&gt;The main site and SVN repository (&lt;a href=&quot;http://otx.osxninja.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://otx.osxninja.com/&lt;/a&gt;) appears to be long dead.  Is there a new maintainer (official or unofficial) or someone hosting the code to disassemble Mach-O binaries on legacy macOS systems?&lt;/p&gt;&#xA;&lt;p&gt;I posted a similar question on Reverse Enginerring Stack Exchange (&lt;a href=&quot;https://reverseengineering.stackexchange.com/q/14038/17972&quot;&gt;Is there an up to date fork of otx?&lt;/a&gt;), but it did not generate any activity.  To keep this question in-scope, I will only focus on the older versions of OS X, but I am also interested in a version of otx that works on any OS X version.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="15334" LastEditDate="2021-01-23T17:52:14.210" LastActivityDate="2021-01-23T17:52:14.210" Title="Is otx (Object Tool Extended) still actively being maintained for reverse engineering legacy OS X binaries?" Tags="&lt;apple-macintosh&gt;&lt;disassembly&gt;&lt;reverse-engineering&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1926" PostTypeId="2" ParentId="1923" CreationDate="2016-12-14T18:07:29.613" Score="8" Body="&lt;p&gt;First off, the direct answer to your question is &quot;Yes&quot;, you can run some DOS 3.3 binary games without loading ProDOS &lt;code&gt;BASIC.SYSTEM&lt;/code&gt;. However, it isn't quite as simple as that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second point is that it isn't as trivial as wrapping the DOS 3.3 binary file as a &lt;code&gt;.SYSTEM&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a big assumption here that by 'DOS 3.3 games' you mean single file games, e.g.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SYSTEM VOLUME 254&#xA;&#xA; A 002 HELLO &#xA;*B 134 HARD HAT MACK&#xA;&#xA;]BRUN HARD HAT MACK&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On this, let me give you some more details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While you can copy a binary file over from DOS 3.3 to ProDOS, I don't believe it will run by itself. As well, you cannot simply rename it to &lt;code&gt;.SYSTEM&lt;/code&gt; or set the file type since I believe there is some ProDOS header/magic that needs to happen (e.g. has to load at $2000 for one, if I remember correctly). As such, you won't be able to use the &quot;bye&quot; tool to launch Hard Hat Mack (HHM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some time ago, however, there was a developer who created something called &lt;a href=&quot;http://apple2.org.za/gswv/a2zine/Docs/Dos33Launcher_Docs.txt&quot; rel=&quot;noreferrer&quot;&gt;DOS 3.3. Launcher&lt;/a&gt; which does the necessary tricks to get a DOS 3.3 binary like HHM to run under ProDOS. While it was intended for use under GS/OS, it does work fine under ProDOS 8 as well. It allows you to execute the &lt;code&gt;DOS3.3.LAUNCHER&lt;/code&gt; program with the full path to the &quot;converted&quot; HHM as an argument (through something called the startup protocol which is really just the full path with length/etc put in a particular memory location). It works well and is a key tool in many 8-bit games collections I've found these days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, I'm not aware of an easy way to run HHM with the launcher from &quot;bye&quot;, though presumably there are tools out there which could be configured to put HHM as the startup protocol argument.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what can you do? You could write a simple system file for HHM which simply executes the launcher with the appropriate argument, but now you've got 3 files for the one game. Of course, someone could craft something a bit more custom to handle multiple games as well :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So long story short, you can run DOS 3.3 binary games without loading BASIC.SYSTEM, but you need to use DOS 3.3 launcher which needs help from another program (which could be in BASIC). In the end, does it really matter if you have to load BASIC.SYSTEM to do this?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-12-14T18:07:29.613" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1927" PostTypeId="1" AcceptedAnswerId="5301" CreationDate="2016-12-15T00:55:27.233" Score="10" ViewCount="914" Body="&lt;p&gt;Even today there are companies that still make accelerators for the 68000-based Amigas, but I've never seen any such accelerator with more than 256 MiB of RAM. If the 68030+ can address 4 GiB, then why don't we ever see that configuration? Is it a limitation in Workbench, or compatibility issues with older software, or something else?&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-12-29T20:32:04.433" Title="What limits Amiga 68030/40/60 accelerators to 256 MiB of RAM?" Tags="&lt;amiga&gt;&lt;motorola-68000&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1928" PostTypeId="2" ParentId="1923" CreationDate="2016-12-15T03:17:28.380" Score="5" Body="&lt;p&gt;The correct answer is, of course, &quot;It depends&quot;. ; - )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the game loads lower than $800 or is multiple files or otherwise tries to use DOS, work is needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise use Bitsy Bye and MiniBas in &lt;a href=&quot;https://archive.org/details/ProDOS_2_4_1&quot; rel=&quot;noreferrer&quot;&gt;ProDOS 2.4.1&lt;/a&gt;. (See the &lt;a href=&quot;https://archive.org/details/ProDOS_2_4&quot; rel=&quot;noreferrer&quot;&gt;2.4 release page&lt;/a&gt; for docs.)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;New ‘Bitsy Bye’ program launcher is built into ProDOS 2.4 and allows&#xA;  users to run SYS, S16, BIN, BAS, and TXT files.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;MiniBas is just a shim layer to run programs, so is much smaller than BASIC.SYSTEM and uses much less memory. This is important if the game file is large and loads up to above $9200. (BASIC.SYSTEM uses down to $9200 and you would get a NO BUFFERS AVAILABLE error.)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;New MiniBas by Usotsuki – Great for compilation disks, this tiny&#xA;  program can be used instead of Basic.System: Requires only 1 block on&#xA;  disk vs 21 blocks for Basic.System&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Loads and runs Binary and Basic programs launched by Bitsy Bye.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This works for both games you mentioned (Mario Brothers and Dig Dug) but not Hard Hat Mack.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2016-12-15T03:41:29.827" LastActivityDate="2016-12-15T03:41:29.827" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1929" PostTypeId="2" ParentId="1927" CreationDate="2016-12-15T06:30:51.177" Score="4" Body="&lt;p&gt;It probably has more to do with practical use and physical constraints: are there any uses that would warrant adding more than 256MB of RAM?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Emulators &lt;a href=&quot;https://www.amigaforever.com/kb/13-111&quot; rel=&quot;nofollow noreferrer&quot;&gt;support up to 1.5GB of RAM&lt;/a&gt;, which indicates that the address space is available and that (at least some) software copes with it. The 68030 CPU has 32 physical address lines so there's certainly no limitation on that side (up to 4GB!).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2016-12-15T06:30:51.177" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1930" PostTypeId="2" ParentId="1927" CreationDate="2016-12-15T09:49:37.023" Score="10" Body="&lt;p&gt;&lt;code&gt;AllocEntry()&lt;/code&gt; sets bit 31 of the address to signal failure, so cannot indicate success for addresses beyond the 2GiB boundary. This limits AmigaOS to slightly less than 2GiB of general-purpose RAM due to ROM and I/O also sharing the space. Zorro III cards can (and do) use address space beyond 2GiB, even for RAM such as a frame buffer, so long as it's not linked into the system memory pool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not aware of any reason for a 256MiB limit, and so the lack of availability of larger boards is probably just because there's no commercial incentive to make them.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2016-12-15T09:49:37.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1931" PostTypeId="1" AcceptedAnswerId="1932" CreationDate="2016-12-15T11:58:32.507" Score="4" ViewCount="330" Body="&lt;p&gt;I've got a reasonably large collection of old computers that I've mostly picked up at such things as car boot sales, etc., before I went to University. Now that I'm working, I'm starting to look at some of the projects that I never finished back then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main project is the repair of the keyboard for the Apricot Xi. I stopped on this simply because I had no idea how to proceed (I unfortunately also managed to lose the bolt for the voltage regulator heatsink but I should be able to replace that without too much difficulty, and I think I still have all the important parts). The construction of the keyboard is not like I've seen in the past, and it's very proprietary and unusual so it's not something that could easily be replaced wholesale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PCB has pads for each key as you'd expect to find in a modern keyboard. However, instead of rubber dome switches, the bottom of each key has a piece of green sponge on it, many of which have lost their sponginess or become brittle with age. On the bottom of each sponge is a small plastic disc coated with some silvery conductive material. There are three problems:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Contacts on the PCB are dirty and corroded (easy to fix I assume with contact cleaner)&lt;/li&gt;&#xA;&lt;li&gt;Sponge is less spongy than it should be (perhaps cutting new pieces of sponge is feasible, if I can figure out how to attach them properly?)&lt;/li&gt;&#xA;&lt;li&gt;Conductive material has rubbed off many of the plastic discs&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It is #3 that I really don't know how to sort out. Can you buy conductive plastic discs which you can glue to sponge? Is it possible to &quot;repaint&quot; the discs with conductive paint of some sort?&lt;/p&gt;&#xA;" OwnerUserId="1931" LastEditorUserId="276" LastEditDate="2016-12-15T12:52:02.617" LastActivityDate="2016-12-15T12:56:16.553" Title="How to fix Apricot Xi keyboard" Tags="&lt;keyboards&gt;&lt;repair&gt;&lt;apricot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1932" PostTypeId="2" ParentId="1931" CreationDate="2016-12-15T12:56:16.553" Score="6" Body="&lt;p&gt;When I patched up my Xi keyboard, I used double-sided adhesive pads cut to the right size, with aluminium foil tape to replace any missing discs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days it's also possible to buy replacement foam pads -- disintegrating foam is a problem common in KeyTronic keyboards, and searching for 'KeyTronic foam' on eBay finds a seller of replacements.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2016-12-15T12:56:16.553" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1933" PostTypeId="1" CreationDate="2016-12-15T19:43:14.187" Score="9" ViewCount="326" Body="&lt;p&gt;For most of my life I have been assembling what has turned into a very nice collection of retro machines.  For many of my systems I am the original owner, and they are in near-mint condition, but I have just as many purchases from ebay or donations from friends that could use some TLC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am familiar with Retr0bright and can see it's application for things like my VIC-20, Apple //c or TRS-80 Model 100.  But what other tricks can be used to make your old equipment look new again?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, I have a TI-99/4A that has some scuffs in the (faux?) aluminum trim, could those be buffed out? and if so, using what?  And what about black plastics that have dulled with age?  Is there a safe oil or silicone (that won't ruin them) to bring back their luster?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the risk of asking an over-broad question; What products and techniques are collectors using to keep their systems looking cosmetically like new?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2016-12-16T16:29:51.643" Title="Cosmetically restoring vintage equipment" Tags="&lt;restoration&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ClosedDate="2016-12-18T12:07:50.687" ContentLicense="CC BY-SA 3.0" />
  <row Id="1934" PostTypeId="2" ParentId="1142" CreationDate="2016-12-15T20:41:17.550" Score="11" Body="&lt;p&gt;As mentioned by @NickWestgate, there's an error in processing line numbers in Applesoft BASIC that causes a crash for line numbers between 437760 and 440319 (a 16-bit number with high byte $AB, followed by a decimal digit 0-9).  This is supposed to cause a SYNTAX ERROR. Because the 6502 has a limited-range relative branch, the actual syntax-error routine is out of range. What's typically done is to find a nearby absolute JMP, and use a relative branch to that instead.  Unfortunately, there wasn't a nearby absolute JMP to the syntax error routine, and the developer took a shortcut: there happens to be a branch to the syntax error routine that's within range, but it's a CMP followed by a BNE which will only branch if the accumulator is not equal to #TOKEN.GOTO, which happens to be $AB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the relevant code section from &lt;a href=&quot;http://jamtronix.com/files/applesoft.html&quot; rel=&quot;noreferrer&quot;&gt;Jamtronix's Applesoft disassembly&lt;/a&gt;; as @NickWestgate pointed out, this is based on &lt;a href=&quot;http://www.txbobsc.com/scsc/scdocumentor/index.html&quot; rel=&quot;noreferrer&quot;&gt;Bob Sander-Cederlof's disassembly&lt;/a&gt;, consolidated into one convenient file. The routine to look at is LINGET at $DA0C. A branch to SYNERR is needed at $DA1E.  SYNERR.2 jumps to SYNERR; it's close but not quite close enough -- it's still out of range for a branch at $DA1E. So they branched instead to ON.1 (this is the shortcut), which only results in a branch to SYNERR.2 if the accumulator happens not to equal TOKEN.GOTO (which is $AB). The accumulator at that point is the high byte of the parsed prospective line number, not including the extra digit that you're trying to include (which is supposed to be invalid because it would make the line number too large). So if the high byte of the part of the line number that has been processed already is $AB and if there's at least one additional digit, the code doesn't branch on the BNE SYNERR.2; it just marches on instead of jumping to SYNERR.2, and it will take some completely unintended action.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;AB-             TOKEN.GOTO       .EQ $AB&#xA;.&#xA;.&#xA;.&#xA;D981- 4C C9 DE  SYNERR.2 JMP SYNERR&#xA;.&#xA;.&#xA;.&#xA;D9F4- C9 AB     ON.1   CMP #TOKEN.GOTO&#xA;D9F6- D0 89            BNE SYNERR.2&#xA;D9F8- C6 A1     ON.2   DEC FAC+4    COUNTED TO RIGHT ONE YET?&#xA;D9FA- D0 04            BNE .3       NO, KEEP LOOKING&#xA;D9FC- 68               PLA          YES, RETRIEVE CMD&#xA;D9FD- 4C 2A D8         JMP EXECUTE.STATEMENT.1   AND GO.&#xA;DA00- 20 B1 00  .3     JSR CHRGET   PRIME CONVERT SUBROUTINE&#xA;DA03- 20 0C DA         JSR LINGET   CONVERT LINE #&#xA;DA06- C9 2C            CMP #','     TERMINATE WITH COMMA?&#xA;DA08- F0 EE            BEQ ON.2     YES&#xA;DA0A- 68               PLA          NO, END OF LIST, SO IGNORE&#xA;DA0B- 60        RTS.7  RTS&#xA;                *--------------------------------&#xA;                *      CONVERT LINE NUMBER&#xA;                *--------------------------------&#xA;DA0C- A2 00     LINGET LDX #0       ASC # TO HEX ADDRESS&#xA;DA0E- 86 50            STX LINNUM   IN LINNUM.&#xA;DA10- 86 51            STX LINNUM+1&#xA;DA12- B0 F7     .1     BCS RTS.7    NOT A DIGIT&#xA;DA14- E9 2F            SBC #'0'-1   CONVERT DIGIT TO BINARY&#xA;DA16- 85 0D            STA CHARAC   SAVE THE DIGIT&#xA;DA18- A5 51            LDA LINNUM+1 CHECK RANGE&#xA;DA1A- 85 5E            STA INDEX&#xA;DA1C- C9 19            CMP /6400    LINE # TOO LARGE?&#xA;DA1E- B0 D4            BCS ON.1     YES, &amp;gt; 63999, GO INDIRECTLY TO &#xA;                *                   &quot;SYNTAX ERROR&quot;.&#xA;                *&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;DANGEROUS CODE&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&#xA;                *      NOTE THAT IF (A) = $AB ON THE LINE ABOVE,&#xA;                *      ON.1 WILL COMPARE = AND CAUSE A CATASTROPHIC&#xA;                *      JUMP TO $22D9 (FOR GOTO), OR OTHER LOCATIONS&#xA;                *      FOR OTHER CALLS TO LINGET.&#xA;                *&#xA;                *      YOU CAN SEE THIS IS YOU FIRST PUT &quot;BRK&quot; IN $22D9,&#xA;                *      THEN TYPE &quot;GO TO 437761&quot;.&#xA;                *&#xA;                *      ANY VALUE FROM 437760 THROUGH 440319 WILL CAUSE&#xA;                *      THE PROBLEM.  ($AB00 - $ABFF)&#xA;                *&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;DANGEROUS CODE&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&#xA;DA20- A5 50            LDA LINNUM   MULTIPLY BY TEN&#xA;DA22- 0A               ASL&#xA;DA23- 26 5E            ROL INDEX&#xA;DA25- 0A               ASL&#xA;DA26- 26 5E            ROL INDEX&#xA;DA28- 65 50            ADC LINNUM&#xA;DA2A- 85 50            STA LINNUM&#xA;DA2C- A5 5E            LDA INDEX&#xA;DA2E- 65 51            ADC LINNUM+1&#xA;DA30- 85 51            STA LINNUM+1&#xA;DA32- 06 50            ASL LINNUM&#xA;DA34- 26 51            ROL LINNUM+1&#xA;DA36- A5 50            LDA LINNUM&#xA;DA38- 65 0D            ADC CHARAC   ADD DIGIT&#xA;DA3A- 85 50            STA LINNUM&#xA;DA3C- 90 02            BCC .2&#xA;DA3E- E6 51            INC LINNUM+1&#xA;DA40- 20 B1 00  .2     JSR CHRGET   GET NEXT CHAR&#xA;DA43- 4C 12 DA         JMP .1       MORE CONVERTING&#xA;                *--------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3762" LastEditorUserId="3762" LastEditDate="2016-12-16T04:57:18.903" LastActivityDate="2016-12-16T04:57:18.903" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1935" PostTypeId="2" ParentId="1790" CreationDate="2016-12-15T21:26:33.197" Score="5" Body="&lt;p&gt;Gravity Well? It seems to meet all your criteria.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As described by the game's help files:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Gravity Well is a fast paced game of planetary conquest for Windows 95 or Windows NT. It is a strategic war game that is played like an arcade game. The game represents a simple interstellar economy that supports the discovery and conquest of new worlds. The player's role is to scout new planets and establish landing sites for the colonization ships that follow. Once a landing site is established, freighters will be dispatched to begin construction of a base and colony complex. Beware though, you are not alone. There are others with the same designs on this sector of space as you have. Be prepared to fight for every stinking dirtball.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/B07IA.png&quot; alt=&quot;Game screenshot: a freighter is transporting material to a recently claimed planet&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/HN2N5.png&quot; alt=&quot;Game screenshot: the blue player tries to damage a base owned by the red player&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a gameplay video: &lt;a href=&quot;https://www.youtube.com/watch?v=kPrAPJRMtIU&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=kPrAPJRMtIU&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4096" LastEditorUserId="4096" LastEditDate="2016-12-15T22:12:54.483" LastActivityDate="2016-12-15T22:12:54.483" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1936" PostTypeId="2" ParentId="1919" CreationDate="2016-12-15T22:30:15.970" Score="1" Body="&lt;p&gt;Summary of Dale's excellent response: Your Applesoft program has grown beyond memory location $4000, which puts it into the Hi-res page-2 memory area. Using the 'hgr2' command writes zeroes in that portion of memory, effectively stomping over part of your program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a wider note, old 8-bit machines (and beyond) tended to have rather complicated memory maps, especially those with RAM/ROM beyond the 64k address space, and the Apple2 series was notorious by even those standards. Eg, the 128k RAM of the //c was chopped into something like 10 separate memory &quot;banks&quot; mapped to its 64k address space (IIRC).&lt;/p&gt;&#xA;" OwnerUserId="4097" LastActivityDate="2016-12-15T22:30:15.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1937" PostTypeId="2" ParentId="1933" CreationDate="2016-12-16T06:58:29.747" Score="6" Body="&lt;ol&gt;&#xA;&lt;li&gt;Old plastic changing colors or damaged&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Plastics which have been exposed to the sun often fade because the ultraviolet light breaks down molecules in the surface layer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plastics can also age due to exposure to oxygen and other reactive gases in the air, which breaks down molecules in the plastic surface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of these conditions can sometimes be seen if you have very old adhesive labels on a device that were never removed, and the plastic under the label is now a different (original) color compared to the rest of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once molecular damage has been done, there is not really anything that will restore the damaged molecules to their original state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plastics often have a base color with additional coatings applied as paint, or chemically bonded-on plastics mating two types together into a composite.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The silver trim on plastics can be just a thin surface coating. The principle of buffing is to remove surface damage and reveal more material underneath. But there may be nothing underneath the silver trim except the plastic base color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bending or denting plastics often turns them white, and this whiteness condition is not reversible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may be able to remove fading with very light sanding to reveal undamaged plastic underneath, but if there is any textured surface finish you will remove it with the sanding. If the backside plastic is not the same color as the front, there is risk that the front side faded plastic layer is very thin, and sanding will reveal the other color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may have better luck just spray painting the plastic casing with colors that match the original, as this will preserve surface finish without removing material.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though for consistent appearance you will need to paint the entire surface, requiring you to mask off areas that should not be painted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the paint is unlikely to perfectly match the original color or appearance so you will need to paint all exposed surfaces on all plastic shell components so that their final appearance is the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Old flexible plastic becoming brittle&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Old flexible power cords have a tendency to become brittle and to crack as they age. There is really nothing that can be done to prevent this, and you will have to replace them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plastics such as vinyl or neoprene are very hard and brittle in their natural state. They become soft and flexible with the addition of &lt;em&gt;plasticizers&lt;/em&gt; generally known as &lt;em&gt;pthalates&lt;/em&gt; which are extremely thick and heavy oils that are mixed into the plastic during manufacturing. The plasticizers act like tiny straight coil springs embedded into the plastic and allow it to flex without breaking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However as the years go by, these springy molecules can work their way out of the vinyl and pop out, evaporating into the air. This is the smell of new plastics that fades over time as it ages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During manufacturing there are many plasticizer molecules that don't embed into the matrix, but just lay on the surface lightly wedged between other vinyl molecules. These wiggle out and evaporate more easily and are the cause of the strong odor of new plastics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more embedded plasticizer molecules stick around for years without an odor, but when they finally work their way out, the plastic becomes very rigid, and starts cracking when flexed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are products that claim they can restore old vinyl to &quot;like new&quot;, but they generally only apply plasticizers to the surface. The chemical in the bottle may not exactly match what was originally used and may not be entirely compatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Exposure to pure plasticizers in a restorative can be bad for you, as they have been shown to harm biological processes through biomimicry. Some plasticizers are misinterpreted by organisms as if it were estrogen, which can cause feminization, development of breasts on males, and disruption of sexual processes in young animals when released into the environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;‘Gender-bending’ chemicals found to ‘feminise’ boys - New Scientist, 27 May 2005&lt;/strong&gt;&#xA;&lt;a href=&quot;https://www.newscientist.com/article/dn7440-gender-bending-chemicals-found-to-feminise-boys/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.newscientist.com/article/dn7440-gender-bending-chemicals-found-to-feminise-boys/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A critical analysis of the biological impacts of plasticizers on wildlife&lt;/strong&gt;&#xA;&lt;a href=&quot;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2873012/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2873012/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are better off just replacing old plastic that has become brittle than trying to restore it. Once it has become brittle and cracks, it cannot be mended.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;Rubber that turns to sticky slime&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Some types of flexible rubber have a tendency to age differently, turning from a solid into a slimy liquid. You will often see these as the rubber feet on devices, becoming sticky, and then degrading into a very thick and disgusting runny slime that gets all over everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These should be removed as soon as possible when they start to become sticky, and replaced with new rubber. If you cannot find an exact replacement, you can sometimes either just leave it off and don't have them if the bottom of the device won't scratch tables, or substitute something completely different, such as stick-on felt pads used for furniture.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="3687" LastEditDate="2016-12-16T07:03:58.240" LastActivityDate="2016-12-16T07:03:58.240" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1938" PostTypeId="2" ParentId="1933" CreationDate="2016-12-16T16:29:51.643" Score="3" Body="&lt;p&gt;The web is full of many &quot;Retrobrite&quot; solutions.  Some are very complex and some are simple.  They both seem to provide the same results in the end (from what I've seen).  So, given the two, I choose simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I own nearly &lt;code&gt;70&lt;/code&gt; vintage computers and I'm the original owner of about 4 or 5 of them.  So it stands to reason that my collection has seen it all.  Everything from total destruction to nearly mint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, I have developed a pretty good solution that works for &lt;strong&gt;ME&lt;/strong&gt;.  Your results may vary.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First, I don't worry about restoring everything to absolute mint condition.  It's impossible anyway.  A few battle scars is OK.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I break the computer down as far as I can.  I remove the keys from the keyboard, I take the case apart, etc.  I try to gather all of the plastics in one pile that can be thrown in the dishwasher.  I just make sure the electronics and stickers are either off or covered.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That alone gets most of the gunk off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then perform my own Retrobrite technique.  I put all of the keys in a Ziploc bag and fill it with hydrogen peroxide.  I used to use the strong 40% stuff.  But it's too expensive.  I just use the cheap 3-4% stuff and it works fine.  I put the bag in direct sunlight and rotate it frequently for most of the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This usually gets rid of the most stubborn yellowing.  I will repeat the process for the few keys that didn't get a good treatment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For plastics that I cannot submerge in liquid, I use the stuff people use to bleach hair.  The &lt;code&gt;Top Salon 40%&lt;/code&gt; gel.  It looks like shampoo.  I rub that solution all over the plastic and let it bake in the sun for a few hours, rinse and repeat.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;IF YOU DO THIS, WEAR PROTECTIVE GLOVES AND KEEP IT OUT OF YOUR EYES!  THAT STUFF BURNS LIKE CRAZY...TRUST ME...I KNOW!  TAKE EXTRA CARE WHEN USING ANY HYDROGEN PEROXIDE OVER 3%&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the area to Retrobrite is large and flat, I will sometimes just paint it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That takes care of the outside.  For the motherboard, I remove any socketed chips and clean them with 91% IPA.  Especially the pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the motherboard is only dusty I will clean the rest of it with cotton swaps and 91% IPA.  If the mother board is filthy I will wash the board with water and soap. (Yes, you can do that...just make sure any batteries are out).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To wash the motherboard, I use a gallon of &lt;strong&gt;distilled&lt;/strong&gt; water.  Distilled because there is slightly less chance that it will dry and leave residue and deposits.  But I take a shallow baking pan, pour the water all over the board and then pour the dirty water down the sink.  I will then put the board in the pan and submerge it with the distilled water.  I then add a few drops of dish soap and scrub the board (GENTLY) with a toothbrush all over.  Both sides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When done, I drain the soapy water and then clean out the pan so there are no more bubbles or soap in the pan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, I submerge the board in distilled water again.  I lift the board up and down, side to side, etc. so that the water flows all over the board in each direction so that it gets a good rinse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I drain the pan and repeat a couple times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also make sure I directly pour the water into slots, under IC's, etc. to push out any soap residue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When clean, I take the board outside and gently swing it around (holding firmly) to remove any large deposits of water.  I might also take a paper towels to get rid of the obvious puddles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I run a hair dryer over the board with the speed set to high but the temp set to cold.  Cold air is better at evaporating water over a circuit board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After I have dried all of the obvious water with the hair dryer, I will sometimes put it outside for a few hours if the humidity is low and no chance of rain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wait at least 48 hours before I put power to the board.  By that time, it's bone dry and clean as a whistle.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your board has lots of corrosion from batteries or capacitors, that's a different cleaning process for a different question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then reassemble the board and it's like I got a new computer.  Makes me feel like it's 1983 again and computers were great and mysterious.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's how I do it.  I haven't found a way to take out scratches.  But, I haven't exactly looked either.  I don't mind some cosmetic imperfections.  I just make sure I actually play with my computers.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2016-12-16T16:29:51.643" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1940" PostTypeId="5" CreationDate="2016-12-19T11:08:03.093" Score="0" Body="&lt;p&gt;For questions regarding the products of Apricot Computers.  The company formerly known as ACT manufactured computers under the Apricot name from 1983 to 1999.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The company was taken over by Mitsubishi.  However, the brand still exists &lt;a href=&quot;http://apricotcomputers.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://apricotcomputers.com/&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-12-19T11:08:03.093" LastActivityDate="2016-12-19T11:08:03.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1941" PostTypeId="4" CreationDate="2016-12-19T11:08:03.093" Score="0" Body="Regarding the products of Apricot Computers.  A British manufacturer from 1983 to 1999." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2016-12-19T11:08:03.093" LastActivityDate="2016-12-19T11:08:03.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1942" PostTypeId="1" CreationDate="2016-12-19T13:30:49.837" Score="12" ViewCount="596" Body="&lt;p&gt;The POKEY module was used in many, many Atari arcade games, including most that contained &lt;a href=&quot;//retrocomputing.stackexchange.com/q/1711/278&quot;&gt;the Atari Math Box&lt;/a&gt;. It could be used to sample potentiometers, scan matrices of switches and, more famously, to generate distinctive tones, tunes and sound effects that the 6502 could not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What API did the POKEY module provide to allow it to be programmed from the main processor?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="780" LastEditDate="2017-04-05T13:22:07.713" LastActivityDate="2017-04-05T13:22:07.713" Title="What API did the POKEY module provide?" Tags="&lt;hardware&gt;&lt;software&gt;&lt;atari&gt;&lt;arcade&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1943" PostTypeId="2" ParentId="1942" CreationDate="2016-12-19T13:30:49.837" Score="12" Body="&lt;p&gt;The POKEY module has a random number generator, six scan lines, eight potentiometer ports, three timers, a serial port and four audio channels.&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#General%20Description&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Hardware&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The POKEY chip (C012294 (original), C012294-02 (dual-core) and C012294-04 (quad-core))&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Versions&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§2]&lt;/a&gt;&lt;/sup&gt; have 40 lines. These are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pin 1: &lt;em&gt;V&lt;sub&gt;ss&lt;/sub&gt;&lt;/em&gt;: Ground&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt; at 0V.&lt;/li&gt;&#xA;&lt;li&gt;Pins 2 - 6: &lt;em&gt;D3&lt;/em&gt;, &lt;em&gt;D4&lt;/em&gt;, &lt;em&gt;D5&lt;/em&gt;, &lt;em&gt;D6&lt;/em&gt;, &lt;em&gt;D7&lt;/em&gt;: Data Bus I/O.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 7: &lt;em&gt;Ø2&lt;/em&gt;: Phase 2 Clock Input.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 8 - 15: &lt;em&gt;P6&lt;/em&gt;, &lt;em&gt;P7&lt;/em&gt;, &lt;em&gt;P4&lt;/em&gt;, &lt;em&gt;P5&lt;/em&gt;, &lt;em&gt;P2&lt;/em&gt;, &lt;em&gt;P3&lt;/em&gt;, &lt;em&gt;P0&lt;/em&gt;, &lt;em&gt;P1&lt;/em&gt;: Potentiometer Scan.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 16: &lt;em&gt;KR2&lt;/em&gt;: Keyboard Row strobe Input.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 17: &lt;em&gt;V&lt;sub&gt;cc&lt;/sub&gt;&lt;/em&gt;: Power at 5V.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 18 - 23: &lt;em&gt;K5&lt;/em&gt;, &lt;em&gt;K4&lt;/em&gt;, &lt;em&gt;K3&lt;/em&gt;, &lt;em&gt;K2&lt;/em&gt;, &lt;em&gt;K1&lt;/em&gt;, &lt;em&gt;K0&lt;/em&gt;: Keyboard Scan Output&lt;/li&gt;&#xA;&lt;li&gt;Pin 24: &lt;em&gt;SID&lt;/em&gt;: Serial Input Data.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 25: &lt;em&gt;KR1&lt;/em&gt;: Keyboard Row strobe Input.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 26: &lt;em&gt;BCLK&lt;/em&gt;: Bi-directional Clock I/O.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 27: &lt;em&gt;ACLK&lt;/em&gt;: Serial Clock Output.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 28: &lt;em&gt;SOD&lt;/em&gt;: Serial Output Data.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 29: &lt;em&gt;IRQ&lt;/em&gt;: Interrupt Request Output.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 30 - 31: &lt;em&gt;CS0&lt;/em&gt;, &lt;em&gt;CS1&lt;/em&gt;: Chip Select.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 32: &lt;em&gt;R/W&lt;/em&gt;: Read / Write I/O Control.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 33 - 36: &lt;em&gt;A3&lt;/em&gt;, &lt;em&gt;A2&lt;/em&gt;, &lt;em&gt;A1&lt;/em&gt;, &lt;em&gt;A0&lt;/em&gt;: Memory Address Input.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 37: &lt;em&gt;AUD&lt;/em&gt;: Audio Output.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pin 38 - 40: &lt;em&gt;D0&lt;/em&gt;, &lt;em&gt;D1&lt;/em&gt;, &lt;em&gt;D2&lt;/em&gt;: Data Bus I/O.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Pinout&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Software&lt;/h2&gt;&#xA;&#xA;&lt;h3&gt;Registers&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The POKEY chip was accessible as a memory-mapped device. On Atari 8-bit computers it is mapped to the &lt;code&gt;D2xx&lt;/code&gt; page,&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Registers&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§4]&lt;/a&gt;&lt;/sup&gt; and on the Atari 5200 it is mapped to the &lt;code&gt;E8xx&lt;/code&gt; page.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Registers&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§4]&lt;/a&gt;&lt;/sup&gt;. There are 29 registers,&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Registers&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§4]&lt;/a&gt;&lt;/sup&gt; each with a different function depending on whether it was read from or written to.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Registers&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§4]&lt;/a&gt;&lt;/sup&gt; These are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Read &lt;code&gt;00&lt;/code&gt; - &lt;code&gt;07&lt;/code&gt;: &lt;em&gt;POT0&lt;/em&gt; - &lt;em&gt;POT7&lt;/em&gt;:&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Registers&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§4]&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;&#xA;The &quot;&lt;em&gt;POT&lt;/em&gt;&quot; (potentiometer) registers map to analog-to-digital converter ports.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Potentiometers&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§6]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Write &lt;code&gt;00&lt;/code&gt; - &lt;code&gt;07&lt;/code&gt;: (&lt;em&gt;AUDF1&lt;/em&gt;, &lt;em&gt;AUDC1&lt;/em&gt;) - (&lt;em&gt;AUDF4&lt;/em&gt;, &lt;em&gt;AUDC4&lt;/em&gt;):&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Registers&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§4]&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;&#xA;The &lt;em&gt;AUDFx&lt;/em&gt; registers are for controlling audio frequency, containing the interval (in clock cycles) between successive cycles as an 8-bit integer from 1 to 256.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Audio_Channel_Frequency&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.1]&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;&#xA;The &lt;em&gt;AUDCx&lt;/em&gt; registers are for controlling distortion and volume, or for playing PCM audio streams.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Audio_Channel_Control&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.2]&lt;/a&gt;&lt;/sup&gt; The bit-field is interpreted as follows:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bits &lt;code&gt;0&lt;/code&gt; - &lt;code&gt;3&lt;/code&gt;: Volume:&lt;br&gt;&#xA;A four bit integer representing the volume of the channel,&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Audio_Channel_Control&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.2]&lt;/a&gt;&lt;/sup&gt;, presumably used as a multiplicative factor from 0 to 15. &lt;sub&gt;&lt;sup&gt;&lt;strong&gt;&lt;em&gt;TODO: Test volume behaviour precisely.&lt;/em&gt;&lt;/strong&gt;&lt;/sup&gt;&lt;/sub&gt;&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;4&lt;/code&gt;: Volume only?:&#xA;A boolean flag that determines the use of the Volume value.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Audio_Channel_Control&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.2]&lt;/a&gt;&lt;/sup&gt; If this flag is &lt;code&gt;0&lt;/code&gt;, the Volume value will be used to modify the amplitude of the channel's waveform. If this flag is &lt;code&gt;1&lt;/code&gt;, the Volume value will be used as the channel output,&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Audio_Channel_Control&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.2]&lt;/a&gt;&lt;/sup&gt; which can be used to play PCM audio&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Audio_Channel_Control&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.2]&lt;/a&gt;&lt;/sup&gt; at a sample rate limited by the speed at which the register is updated.&lt;sub&gt;&lt;sup&gt;&lt;strong&gt;&lt;em&gt;TODO: Can this be tested?&lt;/em&gt;&lt;/strong&gt;&lt;/sup&gt;&lt;/sub&gt;&lt;/li&gt;&#xA;&lt;li&gt;Bit &lt;code&gt;5&lt;/code&gt; - &lt;code&gt;8&lt;/code&gt;: Noise:&#xA;Settings for noise and distortion. &lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Audio_Channel_Control&quot; rel=&quot;nofollow noreferrer&quot;&gt;According to Wikipedia&lt;/a&gt;, the settings are interpreted as follows:&lt;sub&gt;&lt;sup&gt;&lt;strong&gt;&lt;em&gt;TODO: Is this correct? Test +&gt; A0 &amp;amp; E0&lt;/em&gt;&lt;/strong&gt;&lt;/sup&gt;&lt;/sub&gt;  &#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;| Noise Value | Bits Value |          Description          |&#xA;| ----------- | ---------- | ----------------------------- |&#xA;|    0 0 0    |    $00     | 5-bit then 17-bit polynomials |&#xA;|    0 0 1    |    $20     | 5-bit poly only               |&#xA;|    0 1 0    |    $40     | 5-bit then 4-bit polys        |&#xA;|    0 1 1    |    $60     | 5-bit poly only               |&#xA;|    1 0 0    |    $80     | 17-bit poly only              |&#xA;|    1 0 1    |    $A0     | no poly (pure tone)           |&#xA;|    1 1 0    |    $C0     | 4-bit poly only               |&#xA;|    1 1 1    |    $E0     | no poly (pure tone)           |&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Read &lt;code&gt;08&lt;/code&gt;: &lt;em&gt;ALLPOT&lt;/em&gt;:&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Registers&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§4]&lt;/a&gt;&lt;/sup&gt; &#xA;A bit-field containing one bit per port. On &lt;em&gt;POTGO&lt;/em&gt;, all bits are set to &lt;code&gt;1&lt;/code&gt;; they are individually set to &lt;code&gt;0&lt;/code&gt; when scanning is complete and their registers are ready to be read.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#ALLPOT_.24D208_Read&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§6.9]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Write &lt;code&gt;08&lt;/code&gt;: &lt;em&gt;AUDCTL&lt;/em&gt;:&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Registers&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§4]&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;&#xA;A bit-field containing flags corresponding to the behaviour of the audio channels. The bit-field is interpreted as followed:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;0&lt;/code&gt;: Clock Base rate&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt; / Frequency Divider rate:&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;&#xA;Determines the base clock speed for the audio channels. A value of &lt;code&gt;0&lt;/code&gt; means 64kHz,&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt; and a value of &lt;code&gt;1&lt;/code&gt; means 15kHz.&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;1&lt;/code&gt;: High pass filter, channels 2 and 4?:&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;&#xA;If &lt;code&gt;1&lt;/code&gt;, filters channel 2 based on base frequency of channel 4,&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt; only allowing through frequencies higher than specified.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt; As explained by the &lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari Pokey Data Sheet&lt;/a&gt;:&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The high-pass filter consists of a D-type flip-flop and an exclusive-OR gate. The noise control circuit output is sampled by this flip flop at a rate set by the &quot;high-pass&quot; clock. The input and output of the flip-flop pass through the exclusive-OR gate. However, if it is lower than the clock rate, the flip-flop output will tend to follow the input and the two exclusive-OR gate inputs will mostly be identical (11 or 00) giving very little output. This gives the effect of a crude high-pass filter, passing only noise whose minimum frequency is set by the high-pass clock rate. Only channels 1 and 2 have such a high-pass filter. The high-pass clock for channel 1 comes from the channel 3 divider. The high-pass clock for channel 2 comes from the channel 4 divider.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;2&lt;/code&gt;: High pass filter, channels 1 and 3?:&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;&#xA;If &lt;code&gt;1&lt;/code&gt;, filters channel 1 based on base frequency of channel 3,&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt; only allowing through frequencies higher than specified.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt; See above for a detailed description of the behaviour.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;3&lt;/code&gt;: Connect channels 3 &amp;amp; 4?:&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;&#xA;If &lt;code&gt;1&lt;/code&gt;, use channel 3 as channel 4's clock;&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt; creates 16-bit channel.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt; &lt;sub&gt;&lt;sup&gt;&lt;strong&gt;&lt;em&gt;TODO: The base of channel 3 or the signal?&lt;/em&gt;&lt;/strong&gt;&lt;/sup&gt;&lt;/sub&gt;  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;4&lt;/code&gt;: Connect channels 1 &amp;amp; 2?:&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;&#xA;If &lt;code&gt;1&lt;/code&gt;, use channel 1 as channel 2's clock;&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt; creates 16-bit channel.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;5&lt;/code&gt;: Channel 3 clock&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt; frequency:&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;&#xA;&lt;sub&gt;&lt;sup&gt;&lt;strong&gt;&lt;em&gt;TODO: &lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;1§5.3&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;2#2.2&lt;/a&gt; contradict; test.&lt;/em&gt;&lt;/strong&gt;&lt;/sup&gt;&lt;/sub&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;6&lt;/code&gt;: Channel 3 clock&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt; frequency:&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;&#xA;&lt;sub&gt;&lt;sup&gt;&lt;strong&gt;&lt;em&gt;TODO: Ditto&lt;/em&gt;&lt;/strong&gt;&lt;/sup&gt;&lt;/sub&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;7&lt;/code&gt;: 17-bit / 9-bit poly?:&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;&#xA;Determines whether the internal 17-bit polynomial register is read as 9-bit.&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#AUDCTL&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#2.2]&lt;/a&gt;&lt;/sup&gt; If this flag is &lt;code&gt;0&lt;/code&gt;, the register is read as 17-bit; if it is &lt;code&gt;1&lt;/code&gt; the register is read as 9-bit.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#AUDCTL_.24D208_Write&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§5.3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Interrupts&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;There are eight interrupts,&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Eight_IRQ_interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§8]&lt;/a&gt;&lt;/sup&gt; numbered &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;7&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; These are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;0&lt;/code&gt;:&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; &lt;em&gt;T1&lt;/em&gt;: Audio divider 1 is 0.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Eight_IRQ_interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§8]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;1&lt;/code&gt;:&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; &lt;em&gt;T2&lt;/em&gt;: Audio divider 2 is 0.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Eight_IRQ_interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§8]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;2&lt;/code&gt;:&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; &lt;em&gt;T4&lt;/em&gt;: Audio divider 4 is 0.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Eight_IRQ_interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§8]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;3&lt;/code&gt;:&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; &lt;em&gt;XD&lt;/em&gt;: Serial data transmission end, output shift register is empty.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Eight_IRQ_interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§8]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;4&lt;/code&gt;:&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; &lt;em&gt;ODN&lt;/em&gt;: Serial output data needed, SEROUT is ready to be rewritten to by the processor.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Eight_IRQ_interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§8]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;5&lt;/code&gt;:&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; &lt;em&gt;SIR&lt;/em&gt;: Serial input data ready, stored in SERIN for processor.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;6&lt;/code&gt;:&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; &lt;em&gt;K&lt;/em&gt;: The interrupt caused by pressing a key other than the BREAK key.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Eight_IRQ_interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§8]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;7&lt;/code&gt;:&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; &lt;em&gt;BREAK&lt;/em&gt;: The interrupt caused by pressing the BREAK key.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=POKEY&amp;amp;oldid=717415245#Eight_IRQ_interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1§8]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Interrupts are managed using the &lt;em&gt;IRQEN&lt;/em&gt; register and read using &lt;em&gt;IRQST&lt;/em&gt;.&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; To enable an interrupt, set the relevant bit of &lt;em&gt;IRQEN&lt;/em&gt; to &lt;code&gt;1&lt;/code&gt;; to disable it set the bit to &lt;code&gt;0&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; This register isn't initialised by default; this must be done before enabling processor IRQ to avoid undesired behaviour.&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; The &lt;em&gt;IRQST&lt;/em&gt; register is initially full of &lt;code&gt;1&lt;/code&gt; bits, and goes to &lt;code&gt;0&lt;/code&gt; when the relevant interrupt is fired.&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; In order to reset a given bit of &lt;em&gt;IRQST&lt;/em&gt;, the relevant bit of &lt;em&gt;IRQEN&lt;/em&gt; must be (temporarily) set to &lt;code&gt;0&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm#IRQ%20interrupts&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2#8]&lt;/a&gt;&lt;/sup&gt; Note that this does not apply to bit &lt;code&gt;3&lt;/code&gt; (&lt;em&gt;XD&lt;/em&gt;); this bit of &lt;em&gt;IRQST&lt;/em&gt; will be &lt;code&gt;0&lt;/code&gt; when serial output is empty and &lt;code&gt;1&lt;/code&gt; when it is not regardless of whether bit &lt;code&gt;3&lt;/code&gt; of &lt;em&gt;IRQEN&lt;/em&gt; is reset.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="2081" LastEditDate="2017-04-04T17:04:56.270" LastActivityDate="2017-04-04T17:04:56.270" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1944" PostTypeId="1" CreationDate="2016-12-19T15:32:01.553" Score="9" ViewCount="298" Body="&lt;p&gt;I have a &lt;a href=&quot;http://lowendmac.com/1991/powerbook-140/&quot; title=&quot;PowerBook 140&quot;&gt;PowerBook 140&lt;/a&gt; that — apart from a dead screen requiring the inevitable capacitor replacement — seems to work well. It has no battery, though, and any available battery will likely have 25+ year old NiCd cells.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'd like to do is build a replacement battery pack with modern cells in a 3D printed case. I'm aware that the Apple originals had some kind of sensors in them, but they &lt;em&gt;look&lt;/em&gt; fairly simple. What I can't find, though, are dimensions so that a replacement pack will fit snugly into the battery bay. I guess I could spend some hours with digital calipers, a notepad and much swearing, but drawings and schematics would be ideal. Where might such documents be?&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-02-16T00:11:07.747" Title="Powerbook (140, 170) battery dimensions/components/specs for reverse engineering" Tags="&lt;apple-macintosh&gt;&lt;reverse-engineering&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1945" PostTypeId="2" ParentId="1786" CreationDate="2016-12-19T16:24:07.400" Score="1" Body="&lt;p&gt;Trammell Hudson's &lt;a href=&quot;https://trmm.net/V.st&quot; rel=&quot;nofollow noreferrer&quot;&gt;V.st&lt;/a&gt; implements a USB to vector display driver using a &lt;a href=&quot;https://www.pjrc.com/store/teensy32.html&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Teensy 3.2&quot;&gt;Teensy 3.2&lt;/a&gt; and some DACs. It looks like there are only available as single boards to build yourself.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2016-12-19T16:24:07.400" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1946" PostTypeId="1" AcceptedAnswerId="1952" CreationDate="2016-12-20T00:00:24.513" Score="4" ViewCount="200" Body="&lt;p&gt;When I try to open the BasiliskIIGUI.exe I get errors saying things like 'The program can't start because libglib 2.0-0.dll is missing from your computer'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the recommended GTK installed and I have everything required in the setup guide. I am on Windows 10 x64&lt;/p&gt;&#xA;" OwnerUserId="4106" LastActivityDate="2016-12-20T17:23:13.423" Title="Basilisk II error" Tags="&lt;emulation&gt;&lt;apple-macintosh&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1947" PostTypeId="2" ParentId="1918" CreationDate="2016-12-20T00:33:50.343" Score="2" Body="&lt;p&gt;One &lt;a href=&quot;https://hapoc2015.sciencesconf.org/file/176702#page=23&quot; rel=&quot;nofollow noreferrer&quot;&gt;source&lt;/a&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;VT 340 is an alphanumerical display (16x80) developed by VIDEOTON independently, introduced in 1971.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="75" LastActivityDate="2016-12-20T00:33:50.343" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1948" PostTypeId="2" ParentId="309" CreationDate="2016-12-20T05:06:20.353" Score="19" Body="&lt;p&gt;300 bits per second has the advantage that it is the lowest common multiple of both 50 and 60.  These made it easier to use the power line frequency (50 Hz in Europe, 60 Hz in USA) to synchronise the bit timing circuits.  This was long before Quartz locked circuits became cheap enough to include in teletype equipment.&lt;/p&gt;&#xA;" OwnerUserId="4107" LastActivityDate="2016-12-20T05:06:20.353" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1949" PostTypeId="2" ParentId="1851" CreationDate="2016-12-20T11:23:59.653" Score="10" Body="&lt;p&gt;Rather than convert the NES, just get a PAL monitor.   The common auto backup video systems use an NTSC/PAL switchable monitor, available for not much money.&lt;a href=&quot;http://www.banggood.com/7Inch-TFT-LCD-Car-Rear-View-Monitor-VGA-DVD-VCR-For-Reverse-Backup-Camera-p-976003.html?rmmds=search&quot; rel=&quot;nofollow noreferrer&quot;&gt;Backup monitor 7&quot;&lt;/a&gt;   It is also possible, with some video capture cards,&#xA;to select PAL (then your computer display will allow you to use the game).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your TV takes PAL input (some do: check all the menus), it's easier, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a Dell 2007FP video monitor that takes PAL as well as NTSC, DVI, VGA...&lt;/p&gt;&#xA;" OwnerUserId="4108" LastEditorUserId="4108" LastEditDate="2017-01-02T02:29:34.993" LastActivityDate="2017-01-02T02:29:34.993" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1950" PostTypeId="1" AcceptedAnswerId="1951" CreationDate="2016-12-20T16:22:14.497" Score="15" ViewCount="1431" Body="&lt;p&gt;Emulators have always been a gray area. Googling the laws on emulation reveals all sorts of different answers, often with people saying that it's ok because &quot;it's old stuff anyways.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there laws in place (in the US) that prohibit emulation of older operating systems/game systems?&lt;/p&gt;&#xA;" OwnerUserId="3872" LastEditorDisplayName="user12" LastEditDate="2016-12-31T17:49:17.867" LastActivityDate="2017-01-11T05:34:52.853" Title="What are the laws concerning emulation in the US?" Tags="&lt;emulation&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1951" PostTypeId="2" ParentId="1950" CreationDate="2016-12-20T16:38:27.667" Score="31" Body="&lt;p&gt;Note of course that I'm not a lawyer, this is not legal advice etc. The laws that apply here are &quot;intellectual property&quot; laws: copyright, patent law and perhaps trademark law.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Emulators&lt;/em&gt; themselves aren't a gray area; some companies have tried to make them perceived as such. If you can write an emulator without violating anyone's copyright, then you're OK; any patents on old hardware will have expired.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The gray area concerns obtaining software to actually use the emulators, in some cases. Typically you want to use an emulator to run software (including possible firmware) that was relevant at the time; obtaining this software in a legal fashion can be difficult. In some cases, the rights-holders have explicitly allowed their firmware and/or software to be used in emulators, or provide licenses to do so (&lt;em&gt;e.g.&lt;/em&gt; Amstrad for their old ROMs, HP with their hobbyist program...). In other cases, the rights-holders vehemently oppose any unsanctioned use of their software in emulation (unsanctioned typically meaning &quot;not sold by them&quot;), even if you own the originals. And in the remaining cases, the rights-holders are no longer around, or no one can figure out who owns the rights... If you own the original hardware (where relevant, &lt;em&gt;e.g.&lt;/em&gt; for ROM chips) and software, you're probably OK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, as clarified by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4113/david-schwartz&quot;&gt;David Schwartz&lt;/a&gt;, emulators themselves are legal, and so is using them. Obtaining software for them may be illegal but that's another matter. &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/778/79&quot;&gt;Is it legal to download ROM images from shared or internet archives?&lt;/a&gt; has more on that topic.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2016-12-20T22:27:48.763" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="1952" PostTypeId="2" ParentId="1946" CreationDate="2016-12-20T17:23:13.423" Score="3" Body="&lt;p&gt;I've found that many programs requiring glib on Windows don't always find the installation directory that GTK installs to. I'm not sure if it is the GTK installer or the individual programs themselves; haven't looked at this in a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While you could update your &lt;code&gt;PATH&lt;/code&gt; at the system level to include that directory, you could also cheat and just copy it to the directory where Basilisk II's &lt;code&gt;.exe&lt;/code&gt; is residing.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2016-12-20T17:23:13.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1953" PostTypeId="2" ParentId="1851" CreationDate="2016-12-20T21:12:47.527" Score="2" Body="&lt;p&gt;The easiest and cheapest solution is probably a &lt;a href=&quot;http://www.ebay.com/itm/Scart-HDMI-to-HDMI-720P-1080P-HD-Video-Converter-Monitor-Box-For-HDTV-DVD-STB-WP-/121649366404?hash=item1c52de0584:g:FWYAAOSwBahVUcth&quot; rel=&quot;nofollow noreferrer&quot;&gt;composite to HDMI adapter that supports PAL&lt;/a&gt;. But it will add about &lt;a href=&quot;http://retrogaming.hazard-city.de/&quot; rel=&quot;nofollow noreferrer&quot;&gt;2 frames of lag&lt;/a&gt; (search in that link for &quot;HDV 8S&quot; for the review), so fast-paced games may be a little more difficult to play.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best solution for digital displays is either an &lt;a href=&quot;http://retrorgb.com/hidefnes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;HDMI NES mod&lt;/a&gt; or an &lt;a href=&quot;https://solarisjapan.com/products/xrgb-mini-framemeister-compact-up-scaler-unit&quot; rel=&quot;nofollow noreferrer&quot;&gt;XRGB-Mini Framemeister&lt;/a&gt;, both of which are nearly lag-free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For analog displays, the discussion gets a little more complicated.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2016-12-22T06:03:49.733" LastActivityDate="2016-12-22T06:03:49.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1954" PostTypeId="1" AcceptedAnswerId="2052" CreationDate="2016-12-21T04:15:01.803" Score="13" ViewCount="585" Body="&lt;p&gt;On a disk image (which I had for many years) from a &lt;a href=&quot;http://www.computer-museum.ru/english/besm6.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;BESM-6&lt;/a&gt;, I've suddenly found a working &lt;a href=&quot;https://en.wikipedia.org/wiki/POP-2#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;POP-2 (POPLAN)&lt;/a&gt; interpreter (for all these years I'd considered that area as useless bits and pieces of various files and binaries, because I've never heard of POP-2 implemented on the BESM-6). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is only one complete working POP-2 program of any interest on that disk image: a &lt;a href=&quot;https://en.wikipedia.org/wiki/3D_tic-tac-toe&quot; rel=&quot;nofollow noreferrer&quot;&gt;3D tic-tac-toe&lt;/a&gt; game. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone has a recollection of using that language, and a stash of relatively small entertaining programs I could try on the interpreter? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm specifically interested in &lt;a href=&quot;http://rosettacode.org/wiki/Man_or_boy_test#Pop11&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Man or Boy Test&quot;&lt;/a&gt; in POP-2. The Pop11 version provided doesn't compile.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-01-08T06:55:57.830" LastActivityDate="2017-01-09T07:08:10.010" Title="Do any interesting POP-2 programs survive?" Tags="&lt;programming&gt;&lt;history&gt;&lt;mainframe&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1955" PostTypeId="1" AcceptedAnswerId="1956" CreationDate="2016-12-21T04:51:13.983" Score="19" ViewCount="1435" Body="&lt;p&gt;Most emulators store the number of cycles a particular instruction takes in an array, and then adds any conditional cycles if needed (when crossing page boundaries, for example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm wondering if there is a way to procedurally determine the number of cycles an instruction will take based solely on addressing mode and memory reads/writes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To give an example, I've noticed that all instructions that use immediate or relative addressing take 2 cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All zero-page instructions take 3 cycles, plus an additional 2 cycles if altering memory in-place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All indexed zero-page instructions take 4 cycles, plus an additional 2 cycles if altering memory in-place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...And so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, is there some fully documented, procedural way of determining the number of cycles for an instruction like the above? Are there exceptions that would break determinism in such a formula?&lt;/p&gt;&#xA;" OwnerUserId="4114" LastActivityDate="2016-12-22T05:12:37.610" Title="Is it possible to procedurally determine the number of cycles a particular instruction takes on a 6502?" Tags="&lt;nes&gt;&lt;6502&gt;&lt;mos-650x&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1956" PostTypeId="2" ParentId="1955" CreationDate="2016-12-21T06:17:56.473" Score="20" Body="&lt;p&gt;To a certain extent you can guess the number of cycles by counting the number of memory accesses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 2-byte instruction will take a minimum of 2 cycles because you need to read 2 bytes.  If the instruction needs to read or write a data byte add another cycle.  For example, a zero-page read is a 2-byte instruction, but in addition to reading the instruction bytes you also need to read 1 byte from zero page, totaling 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Crossing a page boundary requires an extra cycle because the high byte of the address needs to be incremented due to the carry from the lower byte (it's actually the carry that causes the extra cycle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A read-modify-write instruction requires 3 extra cycles (1 cycle to read, 1 cycle to modify the data, and 1 cycle to write the new value to memory).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some instructions are hard to guess at this way because some cycles are used for operations internal to the CPU (e.g. the extra cycle for crossing a page boundary).  And you have to have a pretty good idea of how the CPU works internally; specifically which operations can be done in parallel and which must be done in sequence.  If an instruction takes one cycle more than you think it should, chances are good that there was an internal operation that couldn't be done in parallel in 1 cycle, and had to be done in 2 cycles.  If an instruction takes fewer cycles than you thought, chances are good it was able to do 2 steps in parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, because there will be exceptions due to mysterious/unknown CPU design choices, it is usually simpler to just look up the total delay in a table.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2016-12-21T06:17:56.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1957" PostTypeId="2" ParentId="1955" CreationDate="2016-12-22T05:12:37.610" Score="3" Body="&lt;p&gt;You are correct that instructions of the same form follow the same pattern. Alas, I forget my original documentation sources now (perhaps &lt;a href=&quot;http://users.telenet.be/kim1-6502/6502/hwman.html#AA&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;?), but these days I tend to use my emulator code as a reference. :-/  For instance, not counting the initial instruction opcode fetch (which is identical for all instructions), 2-byte-long 4-cycle zp,Y instructions always go like &lt;a href=&quot;https://github.com/zellyn/go6502/blob/f193a52183/cpu/opcodemodes.go#L214&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;. You can see the &lt;code&gt;ldx&lt;/code&gt; variant referencing that code &lt;a href=&quot;https://github.com/zellyn/go6502/blob/f193a52183/cpu/opcodes.go#L132&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All instructions read or write at every cycle, and sometimes the intermediate reads are at strange addresses: for instance, &lt;code&gt;STA ADDR,X&lt;/code&gt; instructions will read from ADDR+X, but without the carry applied to the high byte, before getting the final address correct for the write.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to be sure you got your reads and writes correct, my suggestion is that you run Klaus Dorman's excellent &lt;a href=&quot;https://github.com/Klaus2m5/6502_65C02_functional_tests&quot; rel=&quot;nofollow noreferrer&quot;&gt;test suite&lt;/a&gt;, and compare every cycle's reads and writes with the transistor-level simulation of the 6502: there are versions in (at least) Javascript, C, and Go. You can see my test that does that &lt;a href=&quot;https://github.com/zellyn/go6502/blob/master/tests/compare_test.go&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. After that, you can be reasonably sure that you got &lt;em&gt;most&lt;/em&gt; of the details right. :-)&lt;/p&gt;&#xA;" OwnerUserId="335" LastActivityDate="2016-12-22T05:12:37.610" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1958" PostTypeId="2" ParentId="1851" CreationDate="2016-12-22T15:19:49.017" Score="2" Body="&lt;p&gt;You're never going to convert a 50 FPS to 60 FPS (or vice-versa) and have the game run perfectly...the way the designers meant it to run.  It's always going to run too fast (PAL running on NTSC) or too slow with lag (NTSC running on PAL).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is the conversion itself.  Think of two metronomes starting at the same time.  One runs at 50 FPS and the other at 60 FPS.  Only once per 50*60=3000 ticks will they both be in sync.  So most of the time, you will hear two clicks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want the best experience, then get a monitor or TV that can lock onto both rates.  Some TV's will sync to both NTSC and PAL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, just get a PAL monitor...but that might be expensive having it shipped from Europe...unless you find someone who already has one near you.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2016-12-22T15:19:49.017" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1959" PostTypeId="1" AcceptedAnswerId="2818" CreationDate="2016-12-23T04:26:39.090" Score="11" ViewCount="1797" Body="&lt;p&gt;Does anyone have recommendations for a specific inexpensive RF demodulator that's higher quality than your standard VCR (and maybe a little bit smaller)? Like any old equipment floating around that could do it? I have access to a lot of junk that's regularly trashed at work, but there's so much different AV equipment that I wouldn't know what to look for. I haven't found a high quality standalone RF demodulator yet that's reasonably priced IMO. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My personal experience with demodulators in VCRs hasn't been favorable, but if anyone has a specific brand/model they like, that would be helpful. I'm looking to get an Atari 2600's picture quality as clean as possible without doing an RGB conversion and modding it (not that I can't, but I prefer to keep it in factory condition). I understand that I'm not going to get 4k resolution and a 1600000:1 contrast ratio from something through RF; just wanting decent picture. I am running this through to a 1080p TV so having a 16:9 mode available would be nice. I have HDMI, composite and component options. &lt;/p&gt;&#xA;" OwnerUserId="4123" LastEditorUserId="-1" LastEditDate="2016-12-24T01:32:02.987" LastActivityDate="2017-05-01T20:58:55.483" Title="Recommendations for high quality cheap RF demodulator" Tags="&lt;graphics&gt;&lt;video&gt;&lt;atari-2600&gt;" AnswerCount="1" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="1961" PostTypeId="1" CreationDate="2016-12-25T14:33:02.607" Score="11" ViewCount="559" Body="&lt;p&gt;I'm looking for an explanation, or a link to documentation of the on-disk structures of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Files-11&quot; rel=&quot;noreferrer&quot;&gt;Files-11&lt;/a&gt; format, that is, the format of disks used by &lt;a href=&quot;https://en.wikipedia.org/wiki/RSX-11&quot; rel=&quot;noreferrer&quot;&gt;RSX-11&lt;/a&gt; on the PDP-11. Also known as &lt;em&gt;ODS-1&lt;/em&gt;, the precursor of the VMS format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've read that it was &quot;published on the RSX SIG tapes a couple of times&quot;. That seem to be the tapes that are available under &lt;em&gt;decus&lt;/em&gt; in a number of places, but I couldn't find the correct tape for that so far.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2016-12-31T00:09:13.740" Title="On-disk structures for Files-11 format (RSX11)" Tags="&lt;hard-disk&gt;&lt;file-format&gt;&lt;dec&gt;&lt;pdp-11&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1962" PostTypeId="1" AcceptedAnswerId="2119" CreationDate="2016-12-26T18:45:56.173" Score="9" ViewCount="607" Body="&lt;h3&gt;TL;DR -&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Was the LCD technology in Game &amp;amp; Watch passive (or active)?&lt;/li&gt;&#xA;&lt;li&gt;If so, was the technology used Twisted Nematics (and at which point, if at all, were Super Twisted Nematics employed, and in which latter models)?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Leading on from &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1613/main-board-of-the-original-game-watch-ball#answer-1911&quot;&gt;Thomas's excellent answer&lt;/a&gt; to the question, &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1613/main-board-of-the-original-game-watch-ball&quot;&gt;Main board of the original Game &amp;amp; Watch (Ball)&lt;/a&gt;, does anyone know what sort of LCD technology was used in the Game and Watch devices?&lt;/p&gt;&#xA;&lt;p&gt;Thomas mentions that the LCD required constant refreshing (specifically for &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Game_%26_Watch_games#Green_House&quot; rel=&quot;noreferrer&quot;&gt;Green House&lt;/a&gt;, which came out in late 1982):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There is a bit more logic to it, but that's essentially it; some of the logic is to drive the screen; I don't remember the reason but I was explained that LCD screens from that era needed the segments to be toggled on / off to prevent some damage, apparently it's the same in watches; if anyone worked with that technology, I'd be happy to understand the details.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I wondered what the answer was to the need for constant toggling, and decided to research the topic.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Game_%26_Watch_games#Models&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia G&amp;amp;W - Models&lt;/a&gt; section lists the release dates which range from 1980 to 1991. Bearing that in mind, I looked up which LCD technologies were available at these dates.&lt;/p&gt;&#xA;&lt;p&gt;The Wikipedia entry for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Liquid-crystal_display#1970s-1980s&quot; rel=&quot;noreferrer&quot;&gt;history of the LCD during the 1970s and 80s&lt;/a&gt;, states that &lt;a href=&quot;https://en.wikipedia.org/wiki/Twisted_nematic_field_effect&quot; rel=&quot;noreferrer&quot;&gt;Twisted Nematic&lt;/a&gt; (&lt;strong&gt;TN&lt;/strong&gt;) field effect LCDs were available when the G&amp;amp;W was first conceived. Later, in 1983, &lt;a href=&quot;https://en.wikipedia.org/wiki/Super-twisted_nematic_display&quot; rel=&quot;noreferrer&quot;&gt;Super-Twisted Nematic&lt;/a&gt; (&lt;strong&gt;STN&lt;/strong&gt;) structure for passive matrix addressed LCDs was invented, and so would have been available for the later models of G&amp;amp;W.&lt;/p&gt;&#xA;&lt;p&gt;Assuming that the TN was used, en lieu of the earlier &lt;a href=&quot;https://en.wikipedia.org/wiki/Dynamic_Scattering_Mode&quot; rel=&quot;noreferrer&quot;&gt;Dynamic Scattering Mode&lt;/a&gt; (&lt;strong&gt;DSM&lt;/strong&gt;) LCD (which was discovered in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Liquid-crystal_display#1880s-1960s&quot; rel=&quot;noreferrer&quot;&gt;60s&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In 1971 the company of Fergason ILIXCO (now LXD Incorporated) produced the first LCDs based on the TN-effect, which soon superseded the poor-quality DSM types due to improvements of lower operating voltages and lower power consumption.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Presumably the LCD used was passive and not active. From &lt;a href=&quot;https://en.wikipedia.org/wiki/Liquid-crystal_display#Passive_and_active-matrix&quot; rel=&quot;noreferrer&quot;&gt;Passive and Active-matrix&lt;/a&gt;, it is stated that STN requires constant refreshing, similar to that alluded to by Thomas in the quote above:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;STN LCDs have to be continuously refreshed by alternating pulsed voltages of one polarity during one frame and pulses of opposite polarity during the next frame.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The earlier TN also requires refreshing, or toggling, see the description of &lt;a href=&quot;https://en.wikipedia.org/wiki/Twisted_nematic_field_effect#Description&quot; rel=&quot;noreferrer&quot;&gt;Twisted Nematics&lt;/a&gt;. Although in this wiki entry, there is no mention of refreshing, or field reversal, it &lt;em&gt;is&lt;/em&gt; actually required&lt;sup&gt;1&lt;/sup&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A voltage of about 1 V is required to make the crystal align itself with the field, and no current passes through the crystal itself. Thus the electrical power required for that action is very low.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, to summarise, are my assumptions correct, and TN was used in the earlier models of G&amp;amp;W? Also, was STN used in latter models? If so, at which point was STN employed and for which G&amp;amp;W models?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;From the article &lt;a href=&quot;http://www.retrogamer.net/profiles/hardware/game-watch/&quot; rel=&quot;noreferrer&quot;&gt;Game &amp;amp; Watch&lt;/a&gt; there are a number of references to the fact that when the G&amp;amp;W was designed LCD screens were crude, and with limited size/resolution yet cheap and plentiful, but the actual type of LCD used in not mentioned.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; The reason why polarity reversal is required is answered by &lt;a href=&quot;https://electronics.stackexchange.com/questions/276967/do-twisted-nematic-lcd-need-refresh-polarity-reversal/276973#276973&quot;&gt;this answer&lt;/a&gt; to the question &lt;a href=&quot;https://electronics.stackexchange.com/questions/276967/do-twisted-nematic-lcd-need-refresh-polarity-reversal&quot;&gt;Do Twisted Nematic LCD need refresh (polarity reversal)?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="202" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-01-24T07:07:45.043" Title="Which LCD technology was used in Game and Watch?" Tags="&lt;game-and-watch&gt;&lt;lcd-display&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1965" PostTypeId="2" ParentId="1135" CreationDate="2016-12-27T21:55:52.813" Score="16" Body="&lt;p&gt;So I've been doing a little more research on this and it appears that in the early days of the NES, Nintendo did not license a dev kit themselves.  Developers were forced to hack away and make their own dev kits.  A popular one at the time was the &quot;NES Mission Control&quot; created by Rocket Science Production.  Bill &amp;amp; Ted's Excellent Adventure and The Mutant Virus, among others, were created with this hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Custom hardware was attached to a modified NES system and special RAM carts were used to transfer game data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nj07H.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nj07H.jpg&quot; alt=&quot;Mission Control&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xurv4.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xurv4.jpg&quot; alt=&quot;32K Cart&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware was paired with two 16-bit MS-DOS executables: &lt;code&gt;NESTEST.EXE&lt;/code&gt; which was used to actually test/debug the debugging hardware itself, and &lt;code&gt;HST.EXE&lt;/code&gt; which is the Mission Control software that actually communicates with the hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://devkits.handheldmuseum.com/NES_MissionControl.htm&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A comment mentions Cross Products and their development kits.  While I believe they produced one, the earliest references to their hardware I could find was the manual to SNASM68K, their 68000 assembly language development system for MS-DOS and PC-DOS.&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2016-12-27T21:55:52.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1966" PostTypeId="2" ParentId="1604" CreationDate="2016-12-28T19:41:47.853" Score="2" Body="&lt;p&gt;While you didn't explicitly mention the &lt;code&gt;IIe&lt;/code&gt;, the following memory map information was taken directly from &lt;code&gt;Inside the Apple IIe&lt;/code&gt; (1985) by &lt;code&gt;Gary B. Little&lt;/code&gt; &lt;code&gt;ISBN 0-89303-551-3&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Page 47/48&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;$0000-$00FF. This is the 6502 zero page and it is used extensively by all parts of the lie's operating system, including the system monitor (see Chapter 3), the Applesoft interpreter (see Chapter 4), and the disk operating system (see Chapter 5). Those locations available for use by your own programs are set out in Table 2-5.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$0100-$01FF. This is the 6502 stack area and is also used for temporary data storage by the Applesoft interpreter (see Chapter 4).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$0200-$02FF. This area of memory is normally used as an input buffer whenever character information is entered from the keyboard or from diskette (see Chapter 6).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$0300-$03CF. This area of memory is not used by any of the built-irt programs in the lie and so is available for use by your own programs. It is an ideal location for storing small assembly-language programs that are called from Applesoft and most of the examples presented in this book are to be loaded here.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$03D0-$03FF. This area of memory is used by the disk operating system, Applesoft, and the system monitor for the purpose of storing position-independent vectors to important subroutines that can be located anywhere in memory (such as interrupt-handling subroutines). See Appendix IV for a complete description of how this area is used.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$0400-$07FF. This is pagel of video memory that is used for displaying both the primary text screen and the primary lowresolution graphics screen (see Chapter 7). It is also used for displaying one-half of the text screen when in 80-column mode.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$0800-$0BFF. This is page2 of video memory that is used for displaying both the secondary text screen and the secondary low-resolution graphics screen (see Chapter 7). Since page2 is rarely used, this area of memory is normally used for program storage; &lt;strong&gt;in fact, the default starting position for an Applesoft program is $801.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$0C00-$1FFF. This area of memory is free for use.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$2000-$3FFF. This is pagel of video memory that is used for displaying the primary high-resolution graphics screen (see Chapter 7).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$4000-$5FFF. This is page2 of video memory that is used for displaying the secondary high-resolution graphics screen (see Chapter 7).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$6000-$BFFF. This area of memory is normally free for use. However, the upper part of it (above $9600) will be used if a disk operating system is installed (see Chapter 5).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Highlighted section added by me.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2016-12-28T19:41:47.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1967" PostTypeId="1" AcceptedAnswerId="2501" CreationDate="2016-12-29T16:10:20.263" Score="7" ViewCount="282" Body="&lt;p&gt;I've got a 6-player X-Men Arcade cabinet and I was wondering what other boards might be compatible with it. Can I use any Jamma compatible board? Will the dual monitors just mirror?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a &lt;a href=&quot;http://arcarc.xmission.com/PDF_Arcade_Manuals_and_Schematics/X-Men_(6%20player).pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;link to the manual&lt;/a&gt; with wiring info.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Originally &lt;a href=&quot;https://gaming.stackexchange.com/questions/295093/6-player-x-men-arcade-cabinet-compatibility&quot;&gt;asked&lt;/a&gt; in Arqade, with no response]&lt;/p&gt;&#xA;" OwnerUserId="4132" LastEditorUserId="-1" LastEditDate="2017-04-13T12:10:06.257" LastActivityDate="2017-03-28T08:16:47.533" Title="6 Player X-Men Arcade Cabinet Compatibility" Tags="&lt;hardware&gt;&lt;arcade&gt;&lt;gaming&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1968" PostTypeId="2" ParentId="1961" CreationDate="2016-12-29T20:39:12.447" Score="5" Body="&lt;p&gt;There are a couple of files at &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rsx11/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rsx11/&lt;/a&gt;, e.g.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Andrew C. Goldstein, &lt;em&gt;Files-11 On-Disk Structure Specification&lt;/em&gt;, First Edition, Digital Equipment Corporation, 19 June 1975&lt;/p&gt;&#xA;&#xA;&lt;p&gt;at&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rsx11/Files-11_ODS-1_Spec_Jun75.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rsx11/Files-11_ODS-1_Spec_Jun75.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Andrew C. Goldstein, &lt;em&gt;Files-11 On-Disk Structure Specification&lt;/em&gt;, Revised Edition, Digital Equipment Corporation, 15 June 1977&lt;/p&gt;&#xA;&#xA;&lt;p&gt;at&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rsx11/Files-11_ODS-1_Spec_Jun77.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rsx11/Files-11_ODS-1_Spec_Jun77.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Andrew C. Goldstein, &lt;em&gt;Files-11 On-Disk Structure Specification&lt;/em&gt;, Revised Edition, Digital Equipment Corporation, 15 April 1981&lt;/p&gt;&#xA;&#xA;&lt;p&gt;at&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rsx11/Files-11_ODS-1_Spec_Apr81.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rsx11/Files-11_ODS-1_Spec_Apr81.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do any of these help?&lt;/p&gt;&#xA;" OwnerUserId="4134" LastEditorUserId="4134" LastEditDate="2016-12-31T00:09:13.740" LastActivityDate="2016-12-31T00:09:13.740" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1969" PostTypeId="2" ParentId="1644" CreationDate="2016-12-30T06:11:45.297" Score="2" Body="&lt;p&gt;The Apple IIgs running GS/OS did indeed support a more modern memory management model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applications (.S16, .EXE, CDA, NDA, etc.) were stored in &lt;a href=&quot;http://www.brutaldeluxe.fr/products/crossdevtools/omfanalyzer/&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Object Module Format&quot;&gt;Object Module Format&lt;/a&gt;.  All of the major Apple IIgs development tools supported the creation of OMF files.  OMF files included a relocation information which Loaders could use to relocate the object code into a specific memory location.&lt;/p&gt;&#xA;" OwnerUserId="3653" LastActivityDate="2016-12-30T06:11:45.297" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1970" PostTypeId="2" ParentId="1950" CreationDate="2016-12-31T15:52:29.570" Score="0" Body="&lt;p&gt;Generally speaking, just owning and using an emulator is completely legal in most places. (I won't say everywhere, because some places actually have strict laws about how any general purpose computing devices can be used.) But it also sort of depends what we mean by &quot;emulator&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we mean the sort of emulation software and systems we used to play with old software and ROMs then, as pointed out already,  the legalities often centre on the intellectual property laws around that software or ROMs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it's not too much of a stretch to think of something like the Java &quot;look and feel&quot; as GUI emulation (Sun certainly did in some documentation). Microsoft also decided that emulating their UI in Java Swing was in conflict with their ownership of the UI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, emulation of the Windows look and feel in software created with Java and running in a JVM was restricted to VMs running on Windows. That is, the JVM disallowed apps from switching to the Windows look and feel at runtime if that JVM wasn't running in Windows. I admit this might be more of a trademark issue. But I think it highlights where things like rights and ownership sometimes take you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps this is beyond the scope of the question, but it is often useful to be reminded that the law is simultaneously subtle and blunt sometimes, and decisions often turn on specifics of the language used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recall there was a very hackable programmable calculator platform that both emulation and writing your own apps for is essentially forbidden, and the rights holders are particularly litigious on both accounts. And they have used the &quot;emulating our stuff is the same as using our stuff without permission&quot; argument with some success.  Well, where success is measured as &quot;some courts have found in our favour&quot; or &quot;we scared away interested hackers and squelched further development.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether or not it is a good idea is another thing altogether. &lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorDisplayName="user12" LastEditDate="2016-12-31T17:50:27.177" LastActivityDate="2016-12-31T17:50:27.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1971" PostTypeId="1" AcceptedAnswerId="1972" CreationDate="2017-01-01T01:22:07.113" Score="12" ViewCount="1657" Body="&lt;p&gt;I was looking for a C64 type computer that can be used in the terminal. Can I code one or is there one on the interwebs?&lt;/p&gt;&#xA;" OwnerUserId="4139" LastEditorUserId="11916" LastEditDate="2019-04-29T21:42:32.550" LastActivityDate="2019-04-29T21:42:32.550" Title="Is there a C64(or any other) emulation that can be run in terminal?" Tags="&lt;commodore-64&gt;&lt;emulation&gt;" AnswerCount="6" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1972" PostTypeId="2" ParentId="1971" CreationDate="2017-01-01T03:14:25.983" Score="15" Body="&lt;p&gt;If you wish to limit emulation to running Commodore BASIC v2 in the terminal, &lt;a href=&quot;https://github.com/mist64/cbmbasic&quot; rel=&quot;noreferrer&quot; title=&quot;cbmbasic&quot;&gt;cbmbasic&lt;/a&gt; seems to be a transpilation of the BASIC ROM to portable (if almost unreadable) C.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-01-01T03:14:25.983" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1973" PostTypeId="2" ParentId="1971" CreationDate="2017-01-01T05:13:44.303" Score="7" Body="&lt;p&gt;You can certainly code an emulator that works in a terminal - graphics will be tricky, but they're super-useful. I use my terminal-mode Apple II often when developing assembly code...&lt;/p&gt;&#xA;" OwnerUserId="335" LastActivityDate="2017-01-01T05:13:44.303" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1974" PostTypeId="2" ParentId="1" CreationDate="2017-01-01T20:11:07.537" Score="4" Body="&lt;p&gt;Old versions of the Monitor:&lt;br&gt;&#xA;&lt;a href=&quot;http://pdp-6.trailing-edge.com/&quot; rel=&quot;noreferrer&quot;&gt;http://pdp-6.trailing-edge.com/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PDP-6 notes from ITS, includes some PDP-6 programs:&lt;br&gt;&#xA;&lt;a href=&quot;https://github.com/PDP-10/its/issues/278&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/PDP-10/its/issues/278&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2017-01-01T20:11:07.537" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1975" PostTypeId="2" ParentId="944" CreationDate="2017-01-02T05:25:20.450" Score="5" Body="&lt;p&gt;The VT52 terminal escape codes should work fine within VT100 or VT220 Emulation. Later generations are able to support earlier codes. VT240 is the first terminal to support color displays as color for instance. This is VT color not ANSI. You should be able to run something like Putty on a windows computer and then attach to your device over the serial port. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VT52 is an 80x24 screen resolution with 7x7 character space, That means each character fits within a 7x7 grid. Modern characters are defined in a more vertical rectangular space so that might stretch your image somewhat but will be completely usable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to see the physical machines that are the terminals themselves, check out this link. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://terminals-wiki.org/wiki/index.php/DEC_VT52&quot; rel=&quot;noreferrer&quot;&gt;http://terminals-wiki.org/wiki/index.php/DEC_VT52&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://terminals-wiki.org/wiki/index.php/DEC_VT100&quot; rel=&quot;noreferrer&quot;&gt;http://terminals-wiki.org/wiki/index.php/DEC_VT100&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3648" LastActivityDate="2017-01-02T05:25:20.450" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1976" PostTypeId="1" CreationDate="2017-01-03T05:07:37.080" Score="27" ViewCount="3272" Body="&lt;p&gt;My first computer was an &lt;a href=&quot;https://en.wikipedia.org/wiki/Exidy_Sorcerer&quot; rel=&quot;noreferrer&quot;&gt;Exidy Sorcerer&lt;/a&gt;, bought in the late '70s.  It featured a full keyboard including lower case, on screen text of 64 B&amp;amp;W characters by 30 rows, 2 MHz z-80 processor, up to 48 kbytes of RAM, 8 kbyte ROMpacs (an msBASIC pac came standard), ROM-based diagnostic monitor program, etc.  As far as full-featured computer, it was significantly ahead of its competitors such as the Apple II, TRS-80, and Commodore Pet.  (Prologue because apparently no one here has talked about this computer before.)&lt;/p&gt;&#xA;&lt;p&gt;It did not have conventional graphics - the computer was always in text mode.  A text ROM defined a full set of 256 8x8 characters.  However, the top 128 characters were loaded into RAM at bootup. This meant programs could dynamically redefine those characters, giving the computer a limited form of pixel-mapped graphics at a 512x240 resolution.  Even within those limitations, clever programmers achieved some very nice effects and even images.&lt;/p&gt;&#xA;&lt;p&gt;/edit add 2017.01.04 07:35 EST&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;General comment to many of the answers:&lt;/strong&gt; I should have excluded the case of a computer having both definable characters and a traditional bit-mapped screen. In that event the definable characters simply allow for non-Latin character sets, and programmers are not forced to jump through hoops to display graphics at the best resolution possible. But when your display is limited only to text mode, programmers need to be pretty darn creative. Especially on the Sorcerer, where the 128 definable characters would only fill in 2 of the 30 display lines in a brute-force approach.&lt;/p&gt;&#xA;&lt;p&gt;Similarly, computers that had no text mode, only bit-mapped, aren't the same as the Sorcerer either. Of course the characters were redefinable -- everything was!  This is not meant to downplay the existing answers, which responded to the question as asked.  But for any future answers, please limit them to computers with redefinable characters in a text-mode only environment.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Were there other retro-computers that used similar character-defined graphics technology exclusively?&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="5199" LastEditDate="2020-07-23T09:08:11.683" LastActivityDate="2021-01-06T18:31:32.957" Title="Which computers had redefinable character sets?" Tags="&lt;hardware&gt;&lt;graphics&gt;&lt;display&gt;&lt;exidy-sorcerer&gt;" AnswerCount="23" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="1977" PostTypeId="2" ParentId="1976" CreationDate="2017-01-03T05:38:41.813" Score="16" Body="&lt;p&gt;The TI-99/4a has a &lt;a href=&quot;http://www.theforbiddenknowledge.com/99er/&quot; rel=&quot;noreferrer&quot;&gt;CALL CHAR&lt;/a&gt; command to redefine one ASCII character at a time. The first argument is the ASCII code and the second is the 8x8 map expressed as a series of hex digits. (This is how I learned hexadecimal back in elementary school. Good times!)&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-01-03T05:38:41.813" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="1978" PostTypeId="2" ParentId="1976" CreationDate="2017-01-03T06:10:15.873" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Terak_8510/a&quot; rel=&quot;nofollow noreferrer&quot;&gt;Terak&lt;/a&gt; had a fully downloadable font for its text mode.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-01-03T06:10:15.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1979" PostTypeId="2" ParentId="1976" CreationDate="2017-01-03T08:13:15.680" Score="13" Body="&lt;p&gt;All Atari 8-bit computers supported &lt;a href=&quot;http://www.atarimagazines.com/v2n11/charactergraphics.html&quot; rel=&quot;noreferrer&quot;&gt;redefining the character graphics&lt;/a&gt;. The default character set is stored in ROM, but you can tell the ANTIC chip to read the character bitmaps from any area in memory — so typically you'd copy the character set from ROM to RAM and edit whichever characters you want to change.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-01-03T08:13:15.680" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1980" PostTypeId="2" ParentId="1976" CreationDate="2017-01-03T08:18:11.663" Score="8" Body="&lt;p&gt;Lots of homecomputers (or game consoles) had redefinable characters. Many game consoles (Atari, NES, SNES, Gameboy) are tile based in the first place, and a tile is nothing but a redefinable character. The Commodore 64 has a fixed charset in ROM, but can also use charsets in RAM. This tendency continued with the IBM PC, where graphics cards from EGA onwards also have a redefineable character set. I'm sure there's more.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-01-03T08:18:11.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1981" PostTypeId="2" ParentId="1976" CreationDate="2017-01-03T10:44:46.523" Score="11" Body="&lt;p&gt;The BBC model B had a range of 8 bit codes (224 to 255 by default) that could be redefined using the BASIC &lt;a href=&quot;http://beebwiki.mdfs.net/VDU_23#VDU_23.2C32-255_-_Define_character&quot; rel=&quot;noreferrer&quot;&gt;VDU 23&lt;/a&gt; command like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;VDU 23,224,28,28,8,127,8,20,34,65&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In that example 23 is the VDU code to redefine a character, 224 is the code of the character to be redefined, and the remaining 8 parameters are 8 bit bitmaps for the 8 rows of the character image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The range of redefinable characters could also be expanded using &lt;a href=&quot;http://beebwiki.mdfs.net/OSBYTE_%2614&quot; rel=&quot;noreferrer&quot;&gt;OSBYTE &amp;amp;14&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4145" LastActivityDate="2017-01-03T10:44:46.523" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1982" PostTypeId="2" ParentId="1976" CreationDate="2017-01-03T11:47:46.537" Score="7" Body="&lt;p&gt;The Sinclair ZX Spectrum (the Timex 2068 in the USA) had a system variable in RAM which by default pointed to a section of ROM holding 8*8 pixel character graphics. By changing the system pointer, RAM could be used to hold custom character definitions.&lt;/p&gt;&#xA;" OwnerUserId="4146" LastActivityDate="2017-01-03T11:47:46.537" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1983" PostTypeId="2" ParentId="1976" CreationDate="2017-01-03T12:28:42.883" Score="28" Body="&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;ZX Spectrum: has 21 user definable graphics (UDG) available to the user via POKE USR command. Also, main character set can be redirected to RAM (sysvar CHARS, 23606-23607) so it is fully definibled. It doesn't have a real text mode. All text is rendered into pixels by the firmware.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Jupiter ACE: has the entire character set in dedicated RAM (but available in the Z80 address space as write only RAM). You can change it anytime using POKE (you cannot use PEEK to this memory). It doesn't have a graphic mode. Text is rendered by the hardware.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Amstrad CPC: you can use the SYMBOL AFTER command to redefine all or part of the character set. It doesn't have a real text mode. Text is rendered into pixels by the firmware.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;MSX: the VDP uses dedicated VRAM for storing character patterns when a text mode is used. From BASIC, you can use VPEEK and VPOKE to access this VRAM memory and alter character bitmaps. Don't remember if there is specific BASIC commands for changing character patterns, such as the one used in Amstrad or Sinclair machines.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Dragon/Coco: The MC6847 VDP inside these machines stores characters in its own ROM when a text mode is used, so not redefinable. However, there are several graphics modes, which would allow a redefinable character set, at the expense of using more memory for the screen bitmap and a slower printing, as done in Spectrum/Amstrad.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Commodore 64: The VIC-II uses a dedicated CHAR ROM where character patterns are stored when a text mode is in use, but you can instruct VIC to use RAM instead for a custom character set. However, the BASIC is quite limited and there are no specific instructions to assist you on altering the character set, so you are on your own using PEEK and POKE, mapping and unmapping memory blocks, changing the character generator ROM address, etc.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Oric Atmos: has a text mode but character patterns are stored in RAM so they can be changed. There is support for 80 user definable characters so you can use standard character patterns for text, digits and punctuation symbols, yet allowing enough custom character patterns for most applications.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-01-03T12:28:42.883" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1984" PostTypeId="2" ParentId="1976" CreationDate="2017-01-03T12:46:24.047" Score="5" Body="&lt;p&gt;The Convergent Technologies IWS and NGen lines of business computers (marketed under several names, such as Burroughs B21 and B25, the Mohawk Data Sciences/Momentum HERO, the DataPoint VISTA-PC, the NCR WorkSaver, the Pr1me Producer, and others) both had RAM-based fonts which could be loaded at will (with a documented OS API call) by user programs. If I recall correctly, the IWS used a 10x15 cell and the NGen used a 9x12 cell, but the NGen also supported a half-pixel offset for any row of the cell.&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2017-01-03T12:46:24.047" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1985" PostTypeId="1" CreationDate="2017-01-03T13:50:03.837" Score="35" ViewCount="2852" Body="&lt;p&gt;This doesn't belong on the gaming SE, so I'm trying my luck here.&#xA;I'm looking for any info I can get on an old game that I simply known as &quot;Haunt.bat&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the back-story:&#xA;In the mid 90's a relative of mine purchased a PC.&#xA;I don't recall the exact year, it sat around doing nothing for a good deal of time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PC had a 3.5&quot; floppy drive, a 5.25&quot; floppy drive, and a CD Rom drive. Yes, the trifecta.&lt;br&gt;&#xA;It ran Windows 3.1&lt;br&gt;&#xA;It came with one of the keyboards you used to see that had a huge placard with a ton of (Corel?) hotkey shortcuts printed on it. At least 50...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PC came pre-loaded with:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Specifically &lt;em&gt;this&lt;/em&gt; version of Bricks (1984): &lt;br/&gt;&#xA;&lt;a href=&quot;https://archive.org/details/msdos_Bricks_1984&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/msdos_Bricks_1984&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Commander Keen 1 (1990): &lt;br/&gt;&#xA;&lt;a href=&quot;https://archive.org/details/msdos_Commander_Keen_1_-_Marooned_on_Mars_1990&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/msdos_Commander_Keen_1_-_Marooned_on_Mars_1990&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mickey's ABC's (1992): &lt;br/&gt;&#xA;&lt;a href=&quot;https://archive.org/details/msdos_Mickeys_ABC_-_A_Day_at_the_Fair_1992&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/msdos_Mickeys_ABC_-_A_Day_at_the_Fair_1992&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(So the PC was definitely purchased after or during 1992, this is the newest piece of software on it that I recall.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also contained two files: &quot;haunt.bat&quot; and &quot;haunt.com&quot;. The &quot;com&quot; part may be just a false recollection, but I am positive haunt.bat was what I used to launch the game, and I am sure that the game wasn't just a sprawling batch file. These files were in a generic &quot;games&quot; folder, or directly on the C drive, I can not recall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Launching the batch file presented you with the text title of the game (no graphics at all), which I believe was &quot;Haunted Mansion&quot; or &quot;Haunted House&quot; something like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You start in a room in a house, you immediately find a silver bullet or knife (something silver). You almost immediately encounter a werewolf that you cannot kill. Trying to shoot, stab, or do anything to the werewolf would just end in game-over. I always just died at the werewolf, I recall finding the silver item and thinking &quot;yes! I can finally kill it&quot; then, as per many c80's games, was greeted with &quot;you tried to shoot it...&quot; or &quot;you can't shoot it&quot;, something like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are no graphics, no bestiary, no inventory on screen, no list of available directions. No asking for your name, no asking for kin, etc. It just starts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been searching for 20 years. &lt;br/&gt;&#xA;These games are &lt;strong&gt;not&lt;/strong&gt; it:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Haunted House (TRS80): &lt;br/&gt;&#xA;&lt;a href=&quot;http://www.figmentfly.com/hauntedhouse/hauntedhouse.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.figmentfly.com/hauntedhouse/hauntedhouse.html&lt;/a&gt; &lt;br/&gt;&#xA;This game does not feature a werewolf, or any silver items.&lt;/li&gt;&#xA;&lt;li&gt;HAUNT (DEC20): &lt;br/&gt;&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/HAUNT&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/HAUNT&lt;/a&gt; &lt;br/&gt;&#xA;Couldn't find any real working copies of this, but I did manage to find some source code. No werewolf, but there are silver candlesticks.&lt;/li&gt;&#xA;&lt;li&gt;Adventure 3 - Haunted Mansion (C64): &lt;br/&gt;&#xA;&lt;a href=&quot;http://www.gamebase64.com/game.php?id=141&quot; rel=&quot;noreferrer&quot;&gt;http://www.gamebase64.com/game.php?id=141&lt;/a&gt; &lt;br/&gt;&#xA;I heard that if you move around outside before going into the house for too long there's a surprise... but the surprise appears to be that your movements are nonlinear and you constantly get lost and move in circles, not a werewolf. Going into the house you can move around a lot, and you're immediately confronted with a small ghost that can eventually kill you and put you in &quot;LIMBO&quot; which did not happen in the game I'm trying to find. Lots of exploring yielded no werewolf.&lt;/li&gt;&#xA;&lt;li&gt;Windsloe Mansion: &lt;br/&gt;&#xA;&lt;a href=&quot;https://videogamegeek.com/videogame/143110/windsloe-mansion-adventure&quot; rel=&quot;noreferrer&quot;&gt;https://videogamegeek.com/videogame/143110/windsloe-mansion-adventure&lt;/a&gt; &lt;br/&gt;&#xA;This game starts outside a &quot;Blair House&quot;, not in the haunted mansion. It talks a ton about &quot;Pumpkin Man&quot;, who I do not recall. It also has a visable on-screen inventory and list of visible objects.&lt;/li&gt;&#xA;&lt;li&gt;Transylvania: &lt;br/&gt;&#xA;Asks for name, kin, etc. The name is obviously Transylvania, not anything Haunted.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Through Reddit I have learned of a game called &quot;CastleQuest&quot; that was available through Compuserve. This game sounds like the my haunt.bat.&#xA;The problem is that this game apparently does not exist anymore, at all. Not even the original programmers have any of the code: &lt;br/&gt;&#xA;&lt;a href=&quot;http://ask.metafilter.com/195777/Does-anyone-remember-the-old-CompuServe-text-adventure-game-CastleQuest&quot; rel=&quot;noreferrer&quot;&gt;http://ask.metafilter.com/195777/Does-anyone-remember-the-old-CompuServe-text-adventure-game-CastleQuest&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have asked this question here: &lt;br/&gt;&#xA;&lt;a href=&quot;https://www.reddit.com/r/tipofmyjoystick/comments/3carg3/pc80s_played_in_early_90shaunted_mansion_text/&quot; rel=&quot;noreferrer&quot;&gt;https://www.reddit.com/r/tipofmyjoystick/comments/3carg3/pc80s_played_in_early_90shaunted_mansion_text/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Someone else has seemingly asked the same question previously: &lt;br/&gt;&#xA;&lt;a href=&quot;https://www.reddit.com/r/tipofmytongue/comments/zn4z1/tomtcomputer_game_haunted_mansionstyle_text/&quot; rel=&quot;noreferrer&quot;&gt;https://www.reddit.com/r/tipofmytongue/comments/zn4z1/tomtcomputer_game_haunted_mansionstyle_text/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neither have any resolutions, but both point toward &quot;CastleQuest&quot;. &lt;br/&gt;&#xA;The only issue (besides it's complete non-existence) is that I absolutely did not access this game through Compuserve. I had an available internet connection, but connecting was a big deal back in the day, and I played this game with no connection, guaranteed. Even if the batch file accessed Compuserve for me, I would have been dead in the water with no internet connection. Of course, it's possible that the game was ported, but if that's the case I would imagine that at least someone would know about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was reluctant to post this here, but chat convinced me to give it a shot. If anyone knows anything else this old game could be, please give me some leads.&lt;/p&gt;&#xA;" OwnerUserId="4148" LastEditorUserId="4605" LastEditDate="2018-09-11T08:31:07.387" LastActivityDate="2021-03-20T05:25:53.260" Title="Where and what was Haunt.bat? A game pre-loaded on a c1992 PC" Tags="&lt;ms-dos&gt;&lt;identify-this-game&gt;" AnswerCount="2" CommentCount="18" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="1989" PostTypeId="5" CreationDate="2017-01-03T14:45:40.657" Score="0" Body="&lt;p&gt;The Exidy Sorcerer is a home computer originally manufactured from 1978 to 1980. Like many other machines, it contained the Zilog Z80 CPU.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-01-03T14:45:40.657" LastActivityDate="2017-01-03T14:45:40.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1990" PostTypeId="4" CreationDate="2017-01-03T14:45:40.657" Score="0" Body="For questions about the Exidy Sorcerer home computer. For questions about this computers' CPU or assembly programming for this machine, also use the [z80] tag." OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-01-03T14:45:40.657" LastActivityDate="2017-01-03T14:45:40.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1998" PostTypeId="1" AcceptedAnswerId="4940" CreationDate="2017-01-03T18:01:09.370" Score="25" ViewCount="1050" Body="&lt;p&gt;I've read that the PlayChoice 10's security system includes a 64-bit serial EPROM that gets compared against the first 64 bits of code, and that it's possible to swap the ROMs between compatible cartridges (that use the same mapper) to play different games. What's not clear is exactly which program code is compared with the security EPROM - does this work because different games happen to have the same first 64 bits, is it checking against the PlayChoice-only title/instructions ROM, or does this only work with an alternate PlayChoice BIOS?&lt;/p&gt;&#xA;" OwnerUserId="4155" LastEditorUserId="4155" LastEditDate="2017-01-05T16:37:21.883" LastActivityDate="2020-11-26T22:27:19.413" Title="How does the NES PlayChoice arcade's security EPROM work?" Tags="&lt;nes&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1999" PostTypeId="2" ParentId="194" CreationDate="2017-01-03T18:47:51.767" Score="5" Body="&lt;p&gt;You can get much further back if you choose an actual Unix*, like a BSD variant. Possibly all the way back to the first machines that ran Unix, provided you can find one whose C compiler can compile C99 or so, and thence Unix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*Not denigrating Linux, which is an excellent Unix-alike OS, just sayin' that Unix was designed to build itself on the ancient DECs and such that it started on.&lt;/p&gt;&#xA;" OwnerUserId="4150" LastActivityDate="2017-01-03T18:47:51.767" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2001" PostTypeId="1" AcceptedAnswerId="2003" CreationDate="2017-01-03T19:50:09.420" Score="9" ViewCount="233" Body="&lt;p&gt;When I was a kid, my aunt had an &quot;official&quot; &lt;code&gt;Laser 128&lt;/code&gt; that was made, IIRC, by V-Tech.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later in life, I bought a &quot;Laser 128&quot; off eBay but I don't know if it was really from V-Tech or not.  Even though it actually does say &quot;Laser 128&quot; on the case.  But it's not embossed or appears to be high quality printing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have never taken it apart to see what the branding on the motherboard is but the whole computer feels like a &quot;clone of a clone&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible that I have another brand of Laser 128 other than V-Tech or, perhaps, I have a cheaper cost-reduced run made by V-Tech?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have the computer near me at the moment.  But I can dig it up and post pictures if needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-01-03T20:39:59.560" Title="Was there an Apple IIc clone other than the one from V-Tech?" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2002" PostTypeId="2" ParentId="1976" CreationDate="2017-01-03T19:50:27.387" Score="5" Body="&lt;p&gt;Amstrad CPC, PCW and Spectrum +3 under CP/M: The character set is held in banked memory, and all 256 characters can be redefined by a suitably-aware program. There is no true text mode; all characters are rendered by the CP/M XBIOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Character set addresses are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CPC:            0x8000 in CP/M bank 0&#xA;PCW:            0xB800 in 'screen environment' bank&#xA;+3 (8x8 font):  0x3000 in CP/M bank 0&#xA;+3 (8x5 font):  0x3800 in CP/M bank 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2017-01-03T19:50:27.387" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2003" PostTypeId="2" ParentId="2001" CreationDate="2017-01-03T20:39:59.560" Score="6" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Franklin_Electronic_Publishers#Early_history&quot; rel=&quot;noreferrer&quot;&gt;Franklin Ace&lt;/a&gt; series was a number of Apple II clones.  The Ace 500 specifically was considered a clone of the Apple IIc. You might be interested in &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II_series#Clones&quot; rel=&quot;noreferrer&quot;&gt;wikipedia.org/wiki/Apple_II_series#Clones&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, there was no relationship between V-Tech and Franklin that would have led to an Ace motherboard in a Laser case.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2017-01-03T20:39:59.560" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2005" PostTypeId="1" AcceptedAnswerId="2017" CreationDate="2017-01-03T23:14:05.513" Score="9" ViewCount="279" Body="&lt;p&gt;Were there ever any remote debugging tools for the Atari ST line of machines? When developing games in full screen modes, switching away to a debugger seems quite cumbersome if you need to remember what was on screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any remote debuggers that can either show the disassembled binary or actual C source?&lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2017-01-04T19:19:50.417" Title="Remote Debugging on the Atari ST" Tags="&lt;atari&gt;&lt;atari-falcon&gt;&lt;atari-st&gt;&lt;debugging&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2008" PostTypeId="1" AcceptedAnswerId="2018" CreationDate="2017-01-04T01:58:17.877" Score="25" ViewCount="4640" Body="&lt;p&gt;I've just finished reading &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0735611319&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Charles Petzold&lt;/a&gt;'s book, Code: The Hidden Language of Computer Hardware and Software. In it Charles explains building relays into gates, gates into logic components, and logic components into computing machines.&lt;/p&gt;&#xA;&lt;p&gt;He talks about the book &lt;a href=&quot;https://archive.org/details/bitsavers_tidataBookesignEngineers2ed1981_29954976/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;TTL Data Book for Design Engineers&lt;/a&gt; which first came out in 1973. (I'm assuming people had lists of TTL gate chips prior to this). This talks a lot about the &lt;a href=&quot;https://en.wikipedia.org/wiki/7400_series#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;Texas Instruments 7400 series&lt;/a&gt; of logic gate chips.&lt;/p&gt;&#xA;&lt;p&gt;Then he talks about the Intel &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_4004&quot; rel=&quot;nofollow noreferrer&quot;&gt;4004&lt;/a&gt; in 1971, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8008&quot; rel=&quot;nofollow noreferrer&quot;&gt;8008&lt;/a&gt; in 1972, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8080&quot; rel=&quot;nofollow noreferrer&quot;&gt;8080&lt;/a&gt; in 1974 and the Motorola &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6800&quot; rel=&quot;nofollow noreferrer&quot;&gt;6800&lt;/a&gt; in 1974.&lt;/p&gt;&#xA;&lt;p&gt;Could there have been a homebrew computing club in 1971? Could people have wired together logic gates to build a CPU prior to the 8008 coming out?&lt;/p&gt;&#xA;&lt;p&gt;(I'm assuming this is people outside the Intel design office who are prototyping the next CPU).&lt;/p&gt;&#xA;&lt;p&gt;My question is: &lt;strong&gt;Were people building CPUs out of TTL logic prior to the 4004, 8080 and the 6800?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/em&gt;: &lt;strong&gt;Assumption&lt;/strong&gt;: By &amp;quot;&lt;em&gt;people&lt;/em&gt;&amp;quot; I mean any hobbyist or engineer who is not explicitly prototyping the next CPU to be manufactured by Intel or Motorola.&lt;/p&gt;&#xA;" OwnerUserId="3500" LastEditorUserId="439" LastEditDate="2021-01-27T14:21:29.447" LastActivityDate="2021-01-28T21:42:59.143" Title="Were people building CPUs out of TTL logic prior to the 4004, 8080 and the 6800?" Tags="&lt;history&gt;&lt;8080&gt;&lt;intel&gt;&lt;6800&gt;" AnswerCount="13" CommentCount="16" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="2009" PostTypeId="2" ParentId="2008" CreationDate="2017-01-04T03:52:49.040" Score="10" Body="&lt;p&gt;It would have been cost and space-prohibitive to try to build a microcomputer using TTL logic chips, but minicomputers and mainframes were routinely built from such chips (or related technologies like DTL, ECL, etc.).  Processors like the 4004, 8008, 8080 and 6800 were not powerful enough for minicomputer and mainframe workloads, so they used simpler (and faster) chips to get the job done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually minicomputers and mainframes were able to fit the entire CPU onto a single chip, but until then it was common for CPUs to occupy one or several circuit boards (or a cabinet full of circuit boards).  Large chips like the AMD 2900-series allowed processors to be reduced from a cabinet down to just a few boards.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-01-04T03:52:49.040" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2010" PostTypeId="2" ParentId="1976" CreationDate="2017-01-04T06:04:02.923" Score="4" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/VTech_CreatiVision&quot; rel=&quot;nofollow noreferrer&quot;&gt;VTech CreatiVision&lt;/a&gt; (also known as the Dick Smith Wizzard and the Hanimex Rameses amongst others) had redefinable characters if you were using the BASIC cartridge. If I remember correctly, the character was set with a HEX string, up to 16 characters long. Each HEX pair was one row of 8 pixels. The characters were divided into blocks (I can't remember how big) and each block could have its colour set independently of the others. So, for example, if you typed &lt;code&gt;ZAP&lt;/code&gt; directly from the keyboard, it was possible to have the &lt;code&gt;A&lt;/code&gt; a different colour from the &lt;code&gt;Z&lt;/code&gt; and &lt;code&gt;P&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2067" LastActivityDate="2017-01-04T06:04:02.923" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2011" PostTypeId="2" ParentId="2008" CreationDate="2017-01-04T08:00:34.797" Score="20" Body="&lt;p&gt;Hmm, an interesting question to be sure. It certainly would have been possible to make something like a 4004 style microprocessor from TTL chips. In fact, when Intel made their microprocessor, the first in the world, they chose not to pursue a patent for it, because they felt that there was &lt;em&gt;no invention&lt;/em&gt; there; it was obvious for someone to go and combine the workings of a processor from several ICs into a single IC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, it would have been rather pointless for the home enthusiast to make a processor, because before the microprocessor there also were little or no semiconductor memories that he could program with the code that the processor runs. It's rather an unfulfilling excercise to make a stored program computer when you don't have a memory to store the program into. &lt;em&gt;[Edit]: semiconductor memories were becoming available just prior to the microprocessor, and seems there was a time period when this was actually happening, please see the answer regarding the KENBAK computer!&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, people were using TTL chips much like programmers are using programming languages today. If you're making a controller for your model railroad, you'd pick a latch here and a flip-flop there. You'd pick up a monostable multivibrator instead of calling Delay(). The hardware design approach worked very well and people were blissfully unaware of the problems and complexities that would later come with software projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Building computers was a large industry in the 1960's. But the processor was not the main design problem in those computers, it was the interface to memory. It's rather more difficult to use something like a steel drum memory, even if it couples with a &lt;em&gt;standard&lt;/em&gt; 1/2 inch shaft 6000 RPM electric motor, than, say, an EPROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Along with the 4004 microprocessor, Intel made also the companion chips 4001, 4002 and 4003: a 2Kbit ROM, a 320 bit RAM, and a 10 bit shift register that works as an interface to the outside world. Without the 4001, 4002 and 4003, the 4004 would have been as useless as the home TTL processor.&#xA;More info: &lt;a href=&quot;http://www.intel.com/Assets/PDF/Manual/msc4.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.intel.com/Assets/PDF/Manual/msc4.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, the 4001, 4002, 4003 and 4004 all were the brainchilds of a single man, a young design engineer at Intel, Federico Faggin. He was the lead engineer on all four and, even with one failed production run, he managed to make all the four chips in just 9 months. So I think those chips should be called his brain quadruplets!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Faggin is an interesting man, to be sure. Even younger, before coming to Intel, he also invented the self aligned silicon gate: the single most important IC manufacturing key technology after photolithography. He's still going strong and his interview from 2014 is one of the more interesting views in YouTube: &lt;a href=&quot;https://www.youtube.com/watch?v=hugZii_eX30&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=hugZii_eX30&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4058" LastEditorUserId="4058" LastEditDate="2017-01-05T07:37:28.087" LastActivityDate="2017-01-05T07:37:28.087" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2017" PostTypeId="2" ParentId="2005" CreationDate="2017-01-04T19:19:50.417" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;http://dev-docs.atariforge.org/files/Atari_Debugger_1-24-1990.pdf&quot; rel=&quot;noreferrer&quot;&gt;Db&lt;/a&gt; is a debugger for the Atari ST and TT series of 68000-family&#xA;  computers... Db can use any of the ST's character devices for its&#xA;  input and output, including the screen, the serial port, and the MIDI&#xA;  port... Db is capable of debugging programs running on one machine&#xA;  while the bulk of the debugger runs on another.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It lets you view the state of the registers and the memory, and there's a way to load symbols, presumably to make the disassembled code easier to read? Maybe someone who has actually used it can describe the workflow.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-01-04T19:19:50.417" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2018" PostTypeId="2" ParentId="2008" CreationDate="2017-01-04T21:33:08.267" Score="24" Body="&lt;p&gt;Here is an homebrew / educational computer made of LSI / MSI chips :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.kenbak-1.net/index.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.kenbak-1.net/index.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Designed in &lt;strong&gt;1971&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;256 bytes of memory made of MOS shift registers.&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2017-01-04T21:33:08.267" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2022" PostTypeId="1" AcceptedAnswerId="2023" CreationDate="2017-01-05T15:36:07.597" Score="13" ViewCount="973" Body="&lt;p&gt;My Apple II has been getting really hot in use, I've cleaned it, so I don't think dust is an issue. Is there something wrong with the hardware that could be affecting it? I've had Apple IIs overheat and break before, so I'm not sure if it was a factory issue or something that affected all Apple II computers.&lt;/p&gt;&#xA;" OwnerUserId="3872" LastActivityDate="2017-01-10T14:08:10.233" Title="Heating issues in Apple II?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2023" PostTypeId="2" ParentId="2022" CreationDate="2017-01-05T15:46:38.737" Score="15" Body="&lt;p&gt;The Apple ][ could overheat if it had a number of cards installed.  Especially if they were close together.  So, yes, it affected (almost) all of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would affect the airflow within the case and heat would build up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back when I used Apples, I would try to have a blank I/O slot between each populated slot.  That would get the air flowing better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know certain cards got picky about which slot they were installed in, so your options may be limited.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, try not to block the slots at the back of the case with cables.  The slots are to enable cables from the cards to pass through the case and connect with peripherals.  However, bunging them up with cables can also impede airflow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't say if you have any installed cards, or how many.  In my experience an Apple with a minimal number of cards would run forever without overheating.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2017-01-05T15:46:38.737" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2024" PostTypeId="1" CreationDate="2017-01-05T17:08:18.017" Score="12" ViewCount="1021" Body="&lt;p&gt;I need to handle bulk quantities of floppy disks, where I archive their contents,  then recycle them by formatting them for use on old Amiga/Atari/MS-DOS computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a 3.5&quot; floppy disk drive mounted in my current computer thanks to a 34 pin to USB converter. But the converter can only handle 1.44MB floppy disks, which makes it impossible to read/write 720KB floppy disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also have an old Acer computer with a floppy disk interface embed in the motherboard, but it sadly can handle only one floppy disk drive, which is unpractical to handle so many disks. I could modify the floppy disk drive cable to switch between two drives but this seems highly unpractical and I could still handle only one drive at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to know how I could build a computer that could handle reading/writing many floppy disks at the same time (with more than two drives).&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="129" LastEditDate="2019-07-15T09:30:04.727" LastActivityDate="2019-07-15T10:11:22.453" Title="How to build a workstation to handle bulk quantities of floppy disks?" Tags="&lt;floppy-disk&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="2025" PostTypeId="1" AcceptedAnswerId="2027" CreationDate="2017-01-05T17:41:47.270" Score="13" ViewCount="183" Body="&lt;p&gt;I have a variety of videoprocessors (Micomsoft Framemeister, Micomsoft SC-512N1-L/DVI, Sync Strike) to help me get the best possible RGB picture out of my retro computers/consoles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However one issue has always stumped me:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some retro computers/consoles output with an unusually wide horizontal resolution (for example, Atari ST Medium resolution is 640x200)&lt;/li&gt;&#xA;&lt;li&gt;Most scalers have the horizontal sampling rate locked at 720 pixels&lt;/li&gt;&#xA;&lt;li&gt;Since there is no integer divide between the sampling rate of 720 pixels and the console's horizontal resolution of 640 pixels, these images always look terrible&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What I'm looking for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A scaler that either has a customisable (or fixed but very high) horizontal sampling rate&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Can anyone help?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="272" LastActivityDate="2017-01-05T20:40:30.263" Title="Videoprocessor with custom horizontal sampling" Tags="&lt;hardware&gt;&lt;graphics&gt;&lt;video&gt;&lt;atari-st&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2026" PostTypeId="2" ParentId="2024" CreationDate="2017-01-05T19:20:39.823" Score="10" Body="&lt;p&gt;As suggested by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/1931/muzer&quot;&gt;Muzer&lt;/a&gt;, I'd recommend obtaining new-old-stock floppies to use instead of recycling existing ones, if they have content you care about (or are commercial floppies).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To actually answer your question, there are two things to consider.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first is that formatting floppies is always best done on the system they'll be used with, so that really solves your problem on that end of things: format your Amiga floppies in an actual Amiga, your Atari floppies in an actual Atari, your DOS floppies in an actual DOS PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second is that archiving floppies properly is relatively difficult, and is hard to do properly in parallel on standard systems. If you want to stick to modern PCs, your best bet is probably something like a &lt;a href=&quot;http://www.kryoflux.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;KryoFlux&lt;/a&gt;; you can run several in parallel but it starts getting expensive fast. Alternatively, you could use an older PC: there are old ISA floppy controller boards that have jumpers allowing them to be reconfigured so that you can run two controllers in a single system, with up to four floppy drives. Then all you need to do is find floppy-reading software that will allow you to use several floppy drives in parallel! You could use &lt;a href=&quot;http://www.classiccmp.org/dunfield/img/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;ImageDisk&lt;/a&gt; for archival-grade copying on a DOS system, but I think it only reads one floppy at a time. &lt;a href=&quot;https://en.wikipedia.org/wiki/HDCopy&quot; rel=&quot;nofollow noreferrer&quot;&gt;HD-Copy for DOS&lt;/a&gt; works well too for more basic floppy reading requirements (DOS format only), but I can't remember if it can read from multiple drives simultaneously...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2017-01-05T19:20:39.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2027" PostTypeId="2" ParentId="2025" CreationDate="2017-01-05T20:40:30.263" Score="8" Body="&lt;p&gt;The Open Source Scan Converter (OSSC) supports custom &lt;a href=&quot;http://junkerhq.net/xrgb/index.php/OSSC#Horizontal_samplerate&quot; rel=&quot;noreferrer&quot;&gt;horizontal sample rates&lt;/a&gt;, even Amiga's &lt;a href=&quot;https://www.videogameperfection.com/forums/topic/advanced-timing-settings-for-amiga/&quot; rel=&quot;noreferrer&quot;&gt;PAL:Super-HiRes (1440×283)&lt;/a&gt; mode.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-01-05T20:40:30.263" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2028" PostTypeId="2" ParentId="2024" CreationDate="2017-01-05T20:55:38.343" Score="1" Body="&lt;p&gt;Even if your floppy controller is capable of running 2 drives with the proper cable (and many floppy controllers on newer systems are not), it may not be possible to read or write from both drives simultaneously because they will both try to use the same DMA channel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can find a PCI floppy controller this should be less of an issue, but for old-style ISA-bus floppy controllers I don't see a lot of options.  Probably better to stick with USB floppy drives (or SCSI floppies if you can find any) if simultaneous access is really important to you.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-01-05T20:55:38.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2029" PostTypeId="2" ParentId="1976" CreationDate="2017-01-05T21:05:29.737" Score="3" Body="&lt;p&gt;When I saw the title of your query the first machine that came to mind was the Exidy Sorcerer and I was going to answer with that, but alas that was mentioned in your first sentence. So I'll answer with something much less known:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A third-party made an internal hardware add-on for the TRS-80 Model I that gave it a code-programmable character generator. I don't think they sold many, but a friend of mine (GB) marketed a space game (IIRC, like Defender) that used it, and it looked fantastic (especially compared to the stock 128x48 pixel graphics).&lt;/p&gt;&#xA;" OwnerUserId="4199" LastActivityDate="2017-01-05T21:05:29.737" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2030" PostTypeId="2" ParentId="707" CreationDate="2017-01-05T21:21:27.863" Score="3" Body="&lt;p&gt;The MacOS versions that used Apple 802.11g Airport cards were compatible with Broadcom's chipset for that standard (a bit of a speed improvement over 802.11b).&#xA;There were PCMCIA plugin cards for laptops, and those which were identified&#xA;as '54G' were compatible with the Apple drivers, just plugged in and worked.&#xA;That doesn't give you a way, though, to plug into the builtin antenna for your iMac.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The official Apple faster WiFi solution, if you had Ethernet, was an Airport Extreme base station.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays, for OS 10.4, you can get third-party USB gizmos,&#xA;but they do take up a valuable socket.&#xA;&lt;a href=&quot;https://eshop.macsales.com/item/Edimax/EW7811UN/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Edimax nano-N&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2017-01-05T21:21:27.863" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2031" PostTypeId="2" ParentId="1976" CreationDate="2017-01-05T21:41:18.300" Score="9" Body="&lt;p&gt;Some MS-DOS program did this in VGA text mode — notably Norton Utilities and &lt;a href=&quot;http://www.users.on.net/~jtlim/ImpulseTracker/&quot; rel=&quot;noreferrer&quot; title=&quot;Impulse Tracker&quot;&gt;Impulse Tracker&lt;/a&gt;. The latter dynamically redefined the characters under the mouse pointer to provide smooth, sub-character cell movement.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-01-05T21:41:18.300" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2033" PostTypeId="1" AcceptedAnswerId="2040" CreationDate="2017-01-06T01:34:06.813" Score="9" ViewCount="1488" Body="&lt;p&gt;My experience growing up was that my Dad would program '&lt;a href=&quot;https://en.wikipedia.org/wiki/EEPROM&quot; rel=&quot;noreferrer&quot;&gt;EEPROMs&lt;/a&gt;' or &lt;a href=&quot;https://en.wikipedia.org/wiki/Flashrom&quot; rel=&quot;noreferrer&quot;&gt;Flash ROMs&lt;/a&gt; from his &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_IIGS&quot; rel=&quot;noreferrer&quot;&gt;Apple IIGS&lt;/a&gt;. (I don't know if that is similar to an FPGA or not). He used these in custom wire-wrap computers he was building (around 1986-1989). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We know that the first FPGAs went on sale &lt;a href=&quot;https://en.wikipedia.org/wiki/Field-programmable_gate_array#History&quot; rel=&quot;noreferrer&quot;&gt;in 1984&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've just finished reading &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0735611319&quot; rel=&quot;noreferrer&quot;&gt;Charles Petzold&lt;/a&gt;'s book, Code: The Hidden Language of Computer Hardware and Software. In it Charles explains building relays into gates, gates into logic components, and logic components into computing machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He talks about the book &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B001C17Q2Q&quot; rel=&quot;noreferrer&quot;&gt;TTL Data Book for Design Engineers&lt;/a&gt; which first came out in 1973. (I'm assuming people had lists of TTL gate chips prior to this). This talks a lot about the &lt;a href=&quot;https://en.wikipedia.org/wiki/7400_series#History&quot; rel=&quot;noreferrer&quot;&gt;Texas Instruments 7400 series&lt;/a&gt; of logic gate chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to me it seems you could combine TTL chips (or relays or transistors) into a CPU using the instructions in this book. But &lt;a href=&quot;https://electronics.stackexchange.com/questions/23231/what-are-the-advantages-of-using-fpgas-over-ttl-in-intro-computer-architecture&quot;&gt;everything&lt;/a&gt; online says &quot;use FPGAs instead! It's easier for that scale! [Unless you're getting the concepts and want to see the end to end view]&quot;. Fair enough - some pragmatism is good - it depends on what the outcome is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you look at the &lt;a href=&quot;http://slideplayer.com/slide/4786110/&quot; rel=&quot;noreferrer&quot;&gt;structure of an FGPA&lt;/a&gt; - it appears to only have slightly more complexity than &lt;a href=&quot;https://en.wikipedia.org/wiki/Adder_(electronics)#Ripple-carry_adder&quot; rel=&quot;noreferrer&quot;&gt;a 4-bit adder&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mkro5.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mkro5.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I don't know when the first four-bit adder was invented. (My guess is it came out of &lt;a href=&quot;https://en.wikipedia.org/wiki/Claude_Shannon&quot; rel=&quot;noreferrer&quot;&gt;Claude Shannon&lt;/a&gt;'s work on &lt;a href=&quot;https://en.wikipedia.org/wiki/Boolean_algebra&quot; rel=&quot;noreferrer&quot;&gt;boolean logic&lt;/a&gt; in 1948). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So somewhere between 1948 and 1984 someone must have thought of the idea of FPGAs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Assumption&lt;/strong&gt;: By &quot;&lt;em&gt;people&lt;/em&gt;&quot; I mean any hobbyist or engineer who is not explicitly prototyping the next FPGA to be manufactured by Naval Surface Warfare Center, Altera and Xilinx.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: &lt;strong&gt;Were people building FPGAs out of TTL logic prior to the first sales in 1984?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="3500" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:11.130" LastActivityDate="2018-09-08T07:06:50.643" Title="Were people building FPGAs out of TTL logic prior to the first sales in 1984?" Tags="&lt;history&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2034" PostTypeId="1" CreationDate="2017-01-06T01:45:19.517" Score="6" ViewCount="428" Body="&lt;p&gt;It appears that at least some pre-IEEE 754 computers had only one hardwired floating point rounding mode, e.g. away from zero as in &lt;a href=&quot;https://pdos.csail.mit.edu/6.828/2005/readings/pdp11-40.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-11&lt;/a&gt; (page 154 of PDF). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which historical architectures were the earliest ones to cater to the need for the ability to switch floating point rounding modes in software? Not necessarily at the same level of detail as &lt;a href=&quot;https://en.wikipedia.org/wiki/IEEE_floating_point#Rounding_rules&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEEE 754&lt;/a&gt;, just two different modes switched by flipping a bit in a status register or using different opcodes would be enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A data point: &lt;a href=&quot;http://www.computer-museum.ru/english/m20.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;M-20&lt;/a&gt;, designed in 1955-1958, had different arithmetic instructions for operations with or without normalization or rounding.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-12-04T20:46:01.337" LastActivityDate="2018-12-04T20:46:01.337" Title="When were floating point rounding modes first implemented?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;floating-point&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2035" PostTypeId="2" ParentId="2033" CreationDate="2017-01-06T03:44:35.760" Score="2" Body="&lt;p&gt;The main point of FPGAs is the ability to have an (almost) arbitrary connectivity between the Configurable Logic Blocks (CLBs) &lt;strong&gt;within the FPGA chip&lt;/strong&gt;. This is achieved by having configurable switch networks between the rows and columns of CLBs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the logic blocks are implemented with individual chips, the closest equivalent of a configurable switch network is a breadboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore the answer is &quot;yes, they were&quot;, as breadboards are quite field-configurable.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-01-06T03:44:35.760" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2037" PostTypeId="2" ParentId="2024" CreationDate="2017-01-06T04:52:08.723" Score="1" Body="&lt;p&gt;If you want to get really extreme you could build a machine that while only doing one disk at a time, does so automatically:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=H5lkxSY7QsI&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=H5lkxSY7QsI&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2017-01-06T04:52:08.723" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2039" PostTypeId="2" ParentId="2033" CreationDate="2017-01-06T13:37:23.430" Score="5" Body="&lt;p&gt;For the individual hobbyist or small development shop, the equivalent of FPGAs weren't available. Hardware logic was built from manually routed or wire-wrapped boards with many 74xx logic chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An intermediate step for volume production that was available in the early 1980s was the &lt;em&gt;uncommitted logic array&lt;/em&gt; (“ULA”) or &lt;em&gt;gate array&lt;/em&gt;. One of the earliest uses was in the Sinclair ZX81. While the final logic connection mask had to be applied at the factory, for volume production ULAs proved cheaper and more compact than discrete logic chips.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-01-06T13:37:23.430" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2040" PostTypeId="2" ParentId="2033" CreationDate="2017-01-06T15:55:17.457" Score="8" Body="&lt;p&gt;Yes at one level we did do designs in TTL but usually not the whole structure of an FPGA. From memory I'm pretty sure that the QL ULA was wire wrapped first (I worked with David Karlin the QL designer) usually the problems were mostly to do with the signal timings due to longer wire lengths when you did stuff in TTL (I'm ignoring power and heat for this discussion).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the sort of time period you're talking about I suspect most folks used things like the AMD2900 for custom CPU designs (the wikipedia page goes into a long list of designs)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1988 when I worked with David on a Ethernet chip design (a chip called ENZO) we breadboarded the data separator in TTL. Later (1990..2) we did initial prototypes of designs using Actel chips and I did a 80286 based support chipset design for an embedded system with most of an AT system built in (I skipped DMA as it wasn't needed) in a single part. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We ran out space when I did a networked chip for a mixing desk (1983?) (not that big IIRC less that 10000 gates) but we prototyped it in sections disabling bits of logic to gain enough space to test with. The Actel parts were the biggest available and the main logic block was 4 input mux followed by a latch. (Muxes make great logic gates you can do nearly all four input logic gates with one) They were very expensive at the time (I have a figure of £400 in my head which was probably over $1000 at the time) You could make a 4 bit gray counter out of 4 LUTs which I was rather pleased with. We didn't use Verilog/VHDL as you could beat it by hand fairly easily (also the designs were small enough to work with at the gate/latch/flipflop level).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We used a Toshiba sea of gates technology for our production ASICs a bit more flexible than a ULA but along similar lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1984 a FPGA would be too slow and small to produce a useful CPU. Certainly in the early 90s you would have been limited to single digit MHz and I seem to remember really struggling with propagation delays on the 80826 support chipset design I did.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2018-09-08T07:06:50.643" LastActivityDate="2018-09-08T07:06:50.643" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="2042" PostTypeId="1" CreationDate="2017-01-06T18:13:02.527" Score="15" ViewCount="871" Body="&lt;p&gt;I'm trying to do research about the Wang VS series, and there's very little on these computers on the internet (as the company was effectively dead before the internet era, this is hardly shocking).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've stumbled across a scan of a sales brochure that suggests the final machine (VS 18950) had a CPU designated by Wang as the CP-18.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another (partial?) listing on a hobbyist website suggests the first CPU in this line would have been the CP-3, with most of the numbers (but not all) in between being actual offerings over the years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the era and market (minicomputers), I doubt that this CPU was a single chip, at least initially (and given the high cost of fabbing, maybe even the last).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are any details known about this chip? Was it a full CPU by modern standards, or lacking hardware stacks and what not like we see on some of the more primitive sorts? Is the instruction set documented?&lt;/p&gt;&#xA;" OwnerUserId="4208" LastActivityDate="2021-01-07T02:55:43.533" Title="What is known about the Wang VS series CPUs?" Tags="&lt;hardware&gt;" AnswerCount="5" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2045" PostTypeId="2" ParentId="2042" CreationDate="2017-01-07T02:49:58.870" Score="10" Body="&lt;p&gt;According to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Wang_Laboratories#The_Wang_VS_computer_line&quot; rel=&quot;noreferrer&quot;&gt;materials I found&lt;/a&gt; (I just Googled the phrase &quot;Wang VS series CPUs&quot; from your title), the VS series of processors implemented a slight superset of the IBM System/360 instruction set architecture. Definitely a &quot;full CPU&quot; by any standard. This put them in the class of &quot;high-end minicomputer&quot;; Wang deliberately avoided marketing them as mainframes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At some point in the early 1980s, IBM and Motorola collaborated on a single-chip implementation of the S/370 ISA, based largely on rewriting the microcode of a 68000. It was used on a &lt;a href=&quot;https://en.wikipedia.org/wiki/PC-based_IBM-compatible_mainframes#Personal_Computer_XT.2F370&quot; rel=&quot;noreferrer&quot;&gt;plug-in card for the PC&lt;/a&gt;, along with a bunch of memory, in order to give it the ability to run mainframe applications. I strongly doubt that Wang would have used this &amp;mdash; I mention it only to give an indication of what was possible at the time.&lt;/p&gt;&#xA;" OwnerUserId="4183" LastEditorUserId="4183" LastEditDate="2017-01-07T02:59:40.773" LastActivityDate="2017-01-07T02:59:40.773" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2046" PostTypeId="1" CreationDate="2017-01-07T11:01:23.183" Score="13" ViewCount="702" Body="&lt;p&gt;Out of the blue the other day, my friend found an internal 65C102 co-processor for the BBC Master in his attic, and gave it to me. It wasn't in particularly good physical condition (all the pins were bent) but I managed to get it connected, and it does appear to work! (Though I don't have any of the PCB stand-offs; I guess they're quite important to ensure the board isn't damaged by warping, so I should probably go and find some soon-ish).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I'm slightly more concerned than with most hardware, due to the condition that it was in, that there might be something wrong with it. While I can write a simple BASIC loop and see that it does indeed execute just over twice as fast as on the main processor, I'd like to test as much as the memory as is possible. I gather from the internet that the entire 64K address space of the thing is mapped to RAM, into which the chosen ROM is copied on boot? So I guess testing that bit won't be easy. Though I could easily write some BASIC to do some simple tests between PAGE and HIMEM (though that might be complicated since I suspect HIMEM especially will change during program execution!), and between &amp;amp;C000 and &amp;amp;F7FF (where &quot;HI BASIC&quot;, which I also don't have a copy of, would usually sit), I wonder if there's a not-too-hard way to be a bit more thorough than this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately I've forgotten most things I used to know about my collection of 80s and early 90s home computers, since I had university between now and the last time I had access to them; so some basic things that I would have known how to do (eg getting files onto disk easily) are things that I can't do right now (especially since my main machine with a floppy controller is currently sitting dead). But I can remember the, err, basics of BASIC, and I can get files across using the tape interface.&lt;/p&gt;&#xA;" OwnerUserId="1931" LastActivityDate="2019-07-15T20:12:54.320" Title="BBC Master 65C102 co-processor — test memory" Tags="&lt;hardware&gt;&lt;6502&gt;&lt;bbc-micro&gt;&lt;testing&gt;&lt;hardware-testing&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2050" PostTypeId="2" ParentId="1954" CreationDate="2017-01-08T22:40:39.180" Score="2" Body="&lt;p&gt;Looking through Usenet, I came across a post on &lt;code&gt;comp.lang.pop&lt;/code&gt; (posted 2016/10/27 02:36) asking for information about POP-2:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I am trying to collection materials relating to Pop-2 (Poplog's predecessor).&#xA;  &lt;a href=&quot;http://www.cs.otago.ac.nz/staffpriv/ok/pop2.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cs.otago.ac.nz/staffpriv/ok/pop2.htm&lt;/a&gt;&#xA;  lists what I currently have. [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The information that this person has collected so far includes 'a selection of programs from the POP-2 library of the Edinburgh 4100 installation'&lt;sup&gt;1&lt;/sup&gt;, spanning three-and-a-bit .PDF files (&lt;a href=&quot;http://www.cs.otago.ac.nz/staffpriv/ok/pop2.d/silver-4-library.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;file 4&lt;/a&gt;, &lt;a href=&quot;http://www.cs.otago.ac.nz/staffpriv/ok/pop2.d/silver-5-library.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;file 5&lt;/a&gt;, &lt;a href=&quot;http://www.cs.otago.ac.nz/staffpriv/ok/pop2.d/silver-6-library.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;file 6&lt;/a&gt;, &lt;a href=&quot;http://www.cs.otago.ac.nz/staffpriv/ok/pop2.d/silver-7-end.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;file 7&lt;/a&gt;). These scans do not contain text but are legible enough to be typed out by hand.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Index of Edinburgh 4100 POP-2 library&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In this index, page numbers are given as per the file, not the scanned book. The first number is the start of the description and the second number is the start of the code.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;http://www.cs.otago.ac.nz/staffpriv/ok/pop2.d/silver-4-library.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;File 4&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;LIB ALLSORT - p2, p4&lt;/li&gt;&#xA;&lt;li&gt;LIB ASSOC - p5, p9&lt;/li&gt;&#xA;&lt;li&gt;LIB CALL AND EXPLAIN - p11, p15&lt;/li&gt;&#xA;&lt;li&gt;LIB DCOMPILE - p16, p18&lt;/li&gt;&#xA;&lt;li&gt;LIB DEBUG - p19, p22&lt;/li&gt;&#xA;&lt;li&gt;LIB EASYFILE - p23, p34&lt;/li&gt;&#xA;&lt;li&gt;LIB EQUATIONS - p38, p40&lt;/li&gt;&#xA;&lt;li&gt;LIB FOR - p42, p44&lt;/li&gt;&#xA;&lt;li&gt;LIB FOURS - p46, p47&lt;br&gt;&#xA;Note: This may be the &quot;3D tic-tac-toe&quot; game that you mentioned.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;http://www.cs.otago.ac.nz/staffpriv/ok/pop2.d/silver-5-library.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;File 5&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;LIB FULL MEMOFNS - p1, p7&lt;/li&gt;&#xA;&lt;li&gt;LIB GRAPH TRAVERSER - p10, p16&lt;/li&gt;&#xA;&lt;li&gt;LIB INDEX - p18, p20&lt;/li&gt;&#xA;&lt;li&gt;LIB INVTRIG - p22, p23&lt;/li&gt;&#xA;&lt;li&gt;LIB KALAH - p24, p25&lt;/li&gt;&#xA;&lt;li&gt;LIB MATRIX - p30, p32&lt;/li&gt;&#xA;&lt;li&gt;LIB MEMOFNS - p35, p39&lt;br&gt;&#xA;Note: A less-full(?) version of LIB FULL MEMOFNS (earlier version?)&lt;/li&gt;&#xA;&lt;li&gt;LIB NEW STRUCTURES - p41, p46&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;http://www.cs.otago.ac.nz/staffpriv/ok/pop2.d/silver-6-library.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;File 6&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;LIB PLOT - p1, p4&lt;/li&gt;&#xA;&lt;li&gt;LIB POPEDIT - p7, p12&lt;/li&gt;&#xA;&lt;li&gt;LIB POPSTATS - p14, p15&lt;/li&gt;&#xA;&lt;li&gt;LIB PROOF CHECKER - p28, p35&lt;/li&gt;&#xA;&lt;li&gt;??? QUIZZING MACHINE - p40.5?, p43?&lt;br&gt;&#xA;Note: A page of the scan is missing. It is the description, so the program remains complete.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;&lt;a href=&quot;http://www.cs.otago.ac.nz/staffpriv/ok/pop2.d/silver-7-end.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;File 7&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;LIB RANDOM - p1, p2&lt;/li&gt;&#xA;&lt;li&gt;LIB RANDPACK - p3, p4&lt;/li&gt;&#xA;&lt;li&gt;LIB SETS - p5, p7&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; from &lt;em&gt;Programming in Pop-2&lt;/em&gt;, by Burstall, Collins, and Popplestone.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-01-08T22:40:39.180" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2052" PostTypeId="2" ParentId="1954" CreationDate="2017-01-09T03:08:18.137" Score="5" Body="&lt;p&gt;&lt;a href=&quot;http://www.cs.otago.ac.nz/staffpriv/ok/pop2.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.cs.otago.ac.nz/staffpriv/ok/pop2.htm&lt;/a&gt;&#xA;is mine.  I have in fact typed a lot of that code in,&#xA;have begun retyping RMYCIN, and have written but not&#xA;yet debugged other stuff.&#xA;I am not yet ready to put that stuff on line, but&#xA;would be happy to send it by e-mail to the original&#xA;poster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the Silver Book says, &quot;FOURS is a game of three-dimensional noughts&#xA;and crosses, played on a 4x4x4 board.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My &quot;stash&quot; includes over 400 solutions to RosettaCode problems,&#xA;which I have not yet tested (because my compiler is not yet finished).&#xA;I would be thrilled to the very socks to be given a copy of the&#xA;POPLAN interpreter materials in exchange.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A word of warning:  the primary reference for Pop-2 is the Silver Book,&#xA;but the language kept on developing until the mid to late 1980s.  For&#xA;example, the Pop-2 system I used at Edinburgh included &quot;properties&quot;&#xA;(hash tables), which are not in the Silver Book.  By the time anyone&#xA;thought about revising that, Pop-11 had replaced Pop-2.  As an&#xA;example of Pop-2 development, the &lt;em&gt;language&lt;/em&gt; described in the Silver&#xA;Book includes loopif Cond then Stmts close, which is a cross between&#xA;a 'while' loop and a Dijkstra 'do' loop (in that it can have more than&#xA;one alternative), but the &lt;em&gt;library&lt;/em&gt; hadn't been updated to use that&#xA;feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The AI department at Edinburgh used an Emacs-like editor called&#xA;DOPE (the Display-Oriented Pop Editor) in the 1980s, a lineal&#xA;descendant of the &quot;77 editor&quot;, using the &quot;piece table&quot; approach.&#xA;I might have that on a tape somewhere, but have no tape drive to&#xA;read it, sorry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DAI Edinburgh lost a lot of stuff in a fire, sadly, including Pop-2&#xA;materials.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh yes, this should be Man or Boy.  UNTESTED!&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&quot;&quot;&quot;&#xA;&#xA;function A k x1 x2 x3 x4 x5;   &#xA;   function B kref;   &#xA;      vars k;   &#xA;      kref.cont -&amp;gt; k;   &#xA;      k-1 -&amp;gt; k;   &#xA;      k -&amp;gt; kref.cont;   &#xA;      A(k, B, x1, x2, x3, x4)   &#xA;   end;   &#xA;   if k &amp;lt;= 0 then   &#xA;      x4() + x5()   &#xA;   else   &#xA;      apply(B(% consref(k) %))   &#xA;   close      &#xA;end;   &#xA;A(10, lambda; 1 end,  lambda; -1 end,   &#xA;      lambda; -1 end, lambda; 1 end,   &#xA;      lambda; 0 end) =&amp;gt;   &#xA;&quot;&quot;&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Algol 60 function A has an integer parameter k passed by&#xA;value and five other parameters passed by name.  Pass by name was &lt;em&gt;meant&lt;/em&gt;&#xA;to be like pass by reference, but what Algol 60 actually specified was&#xA;basically a pair of procedures (L,R), the L procedure being called when&#xA;you wanted an address to store into and the R procedure being called&#xA;when you wanted a value (the modern word for R is &quot;thunk&quot;).  That's&#xA;why the Algol code has x4 + x5 and the Pop-2 code has x4() + x5(),&#xA;and it's always why the Pop-2 code has anonymous functions&#xA;(lambda ;  end) in the top level call to A where Algol&#xA;had constants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing that makes this example a bit of a pain in Pop-2, and &lt;em&gt;more&lt;/em&gt;&#xA;of a pain than in Pop-11, is the scope rules.  A funny thing happened&#xA;in the early days of Lisp.  McCarthy et all &lt;em&gt;meant&lt;/em&gt; to specify the&#xA;same kind of static scope rules that Lisp and Scheme now enjoy, but&#xA;by mistake implemented 'dynamic scope'. One way to think of it is&#xA;that all references to an identifier always go to the same static&#xA;location; when you enter a scope where a variable is (re)declared&#xA;its old value is saved on a stack, and restored when you leave that&#xA;scope.  (Common Lisp now calls this &quot;fluid binding&quot;.)  Pop-2 went&#xA;with Lisp.  By the mid-1980s 'vars' had been replaced by 'lvars'&#xA;(&quot;Lexically scoped VARiableS&quot;).  The language described in the&#xA;Silver Book didn't have lvars.  Nor did functions capture their&#xA;non-local variables in &quot;closures&quot;.  Closures had to be made by hand.&#xA;B(% ... %) says &quot;make a closure where the code part is B and the&#xA;values of ... will be passed as extra arguments at the end.&quot;  Now&#xA;B needs to &lt;em&gt;change&lt;/em&gt; k, so we stuff the value of k into a one-word&#xA;record called a &quot;reference&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, =&gt; is called the &quot;print arrow&quot;.  Inside a function, it&#xA;prints and removes the top item on the stack.  At top level, it&#xA;prints and removes everything on the stack.&lt;/p&gt;&#xA;" OwnerUserId="4229" LastEditorUserId="4" LastEditDate="2017-01-09T07:08:10.010" LastActivityDate="2017-01-09T07:08:10.010" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="2053" PostTypeId="2" ParentId="2034" CreationDate="2017-01-09T03:55:17.153" Score="3" Body="&lt;p&gt;The IBM System/360 had separate instructions for (Add, Subtract, Multiply, Divide) Normalized and (Add, Subtract, Multiply, Divide) Unnormalised.  That feature&#xA;remained in /370, /390, and zSeries.  (zSeries now does IEEE arithmetic as well.)&#xA;The earlier STRETCH (IBM 7030) machine also offered this choice.  In fact, the 7030 had three choices: unnormalized, normalized (shift 0s in when normalizing), and &quot;Noisy&quot; (shift 1s in when normalising).  My e-copy of the Stretch reference manual is dataed 1960 and the first machine was shipped in 1961, according to Wikipedia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interval arithmetic, relying on the towards -infinity and towards +infinity rounding modes, was understand and used in the 1960s, but I don't know when &lt;em&gt;hardware&lt;/em&gt; support for those modes was introduced.  Certainly the B6700, DEC-10, and S/360 didn't have them.  Computer architects had a tendency to focus on the &lt;em&gt;speed&lt;/em&gt; of floating-point arithmetic as their top priority.&lt;/p&gt;&#xA;" OwnerUserId="4229" LastActivityDate="2017-01-09T03:55:17.153" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2054" PostTypeId="2" ParentId="99" CreationDate="2017-01-09T04:02:53.217" Score="4" Body="&lt;p&gt;It depends on exactly what you mean.  The Physics department I did my MSc at was using a graphics terminal years before the Lisa came out.  The terminal was a Tektronix (might have been a 4010) attached to a PDP-11.  (OK, it might have been a KJV8I; I remember it as a Tex because that's what it looked like.) There were LOTS of these things around.  The screen could display text or &lt;em&gt;vector&lt;/em&gt; graphics (not raster graphics), and there was a light pen, so you could point and select.  See &lt;a href=&quot;https://en.wikipedia.org/wiki/Tektronix_4010&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Tektronix_4010&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't forget all the 8-bit machines that preceded the Lisa, including the Apple 2.&lt;/p&gt;&#xA;" OwnerUserId="4229" LastActivityDate="2017-01-09T04:02:53.217" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2055" PostTypeId="1" AcceptedAnswerId="2062" CreationDate="2017-01-09T11:10:18.930" Score="24" ViewCount="4240" Body="&lt;p&gt;Microsoft produced the &lt;a href=&quot;https://en.wikipedia.org/wiki/Z-80_SoftCard&quot; rel=&quot;noreferrer&quot;&gt;Z80 Softcard&lt;/a&gt; for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II&quot; rel=&quot;noreferrer&quot;&gt;Apple II&lt;/a&gt; enabling it to run &lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M&quot; rel=&quot;noreferrer&quot;&gt;CPM&lt;/a&gt; and many &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80&quot; rel=&quot;noreferrer&quot;&gt;Z80&lt;/a&gt; binary programs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seems to be an unthinkable achievement. (For a kid who had an Apple IIe but was only a child at the time). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you imagine in the 1990s plugging a Motorola &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68020&quot; rel=&quot;noreferrer&quot;&gt;68020&lt;/a&gt; card into a Intel &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80286&quot; rel=&quot;noreferrer&quot;&gt;286&lt;/a&gt; PC and running Mac programs? (Or vice versa - plugging an Intel card into a Mac and running Windows programs on the hardware.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can you design a Computer System, to plug in a card, then share the video RAM, and coordinate that some binary instructions go to one processor and some to the other? How do you coordinate the I/O?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've just finished reading &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0735611319&quot; rel=&quot;noreferrer&quot;&gt;Charles Petzold&lt;/a&gt;'s book, Code: The Hidden Language of Computer Hardware and Software. In it Charles explains building relays into gates, gates into logic components, and logic components into computing machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reading this book means I can imagine building a CPU out of logic gates and logic components, but can't imagine how you would switch control from one to another. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: &lt;strong&gt;How did the Apple II forward binary instructions to the Z80 software card with CPM?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="3500" LastActivityDate="2017-01-10T07:42:37.833" Title="How did the Apple II forward binary instructions to the Z80 software card with CPM?" Tags="&lt;apple-ii&gt;&lt;z80&gt;&lt;motorola-68000&gt;&lt;80286&gt;&lt;cp-m&gt;" AnswerCount="4" CommentCount="11" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2057" PostTypeId="2" ParentId="2055" CreationDate="2017-01-09T13:48:09.493" Score="4" Body="&lt;p&gt;This is a very broad question, so a correspondingly broad answer would be simply that each processor treats the other processor's instructions as binary data, without trying to interpret it in any way. On the Apple II, the 6502 simply copies this data from the disk to the Z-80's memory, and then the Z-80 can execute it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Shared I/O is a little more complicated. Normally, there would be some way for the two processors to communicate with each other, often using that same shared memory in conjunction with some mutual &quot;mailbox&quot; interrupts. Special code running on the &quot;host&quot; processor (the 6502) would emulate the I/O APIs that the application software running on the &quot;guest&quot; processor (the Z-80) is expecting to see. The lowest-level I/O driver code on the guest processor would also be replaced with custom code to support this interface.&lt;/p&gt;&#xA;" OwnerUserId="4183" LastEditorUserId="4183" LastEditDate="2017-01-09T13:55:06.817" LastActivityDate="2017-01-09T13:55:06.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2058" PostTypeId="2" ParentId="2055" CreationDate="2017-01-09T14:32:52.057" Score="39" Body="&lt;p&gt;They both shared the same memory so it didn't really forward instructions.&#xA;The Z80 card stopped the 6502 running using the DMA signals and the system swapped between the two by writing to $CN00 where N is the slot number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the memory was shared the Z80 stuffed some values (A,X,Y,P) into the 6502 zero page ($F045 and up from the Z80 side) stored the address it wanted to call into $F3D0 ($03D0 from the 6502 side) and wrote a byte to the softcard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get back again the routine at $3C0 was called from the 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Full gory details are in this copy of the Microsoft manual&#xA;&lt;a href=&quot;http://apple2online.com/web_documents/microsoft_softcard_-_software_and_hardware_details.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://apple2online.com/web_documents/microsoft_softcard_-_software_and_hardware_details.pdf&lt;/a&gt; which also contains the schematics for the card (and it's all TTL so in theory fairly tractable).&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2017-01-09T17:49:56.723" LastActivityDate="2017-01-09T17:49:56.723" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2059" PostTypeId="2" ParentId="2022" CreationDate="2017-01-09T16:53:08.737" Score="3" Body="&lt;p&gt;A very common add-on for the Apple II was called the Kensington System Saver. This is a &quot;Muffin fan&quot; that hooked into the vent slots on the left side of the Apple II/II+/IIe, had a front-side master power switch, and 2-3 outlets on the back to power the computer, monitor, and printer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This fan noise was a very characteristic sound for Apple II computers in schools, as you'd have a room of 20 Apple II's outfitted with System Savers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Google image search: &quot;Apple II&quot; &quot;System Saver&quot; -- &lt;a href=&quot;http://www.google.com/search?tbm=isch&amp;amp;q=%22Apple%20II%22%20%22System%20Saver%22&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.google.com/search?tbm=isch&amp;amp;q=%22Apple%20II%22%20%22System%20Saver%22&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can probably still find it on eBay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the Apple IIgs, it did not include a fan as a standard feature from Apple but it does include a place to clip one on to the power supply at the front corner, and a 2-pin plug on the motherboard for a fan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though the placement of the IIgs internal fan is weird, inside the case directly on the power supply, and I don't know if it actually pushed hot air out of the case or if it just blew the air in a circle inside the case, which would not have been very effective for cooling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kensington also made a System Saver IIgs which sat on top of the computer, under the monitor, with power switches across the front, and a fan to suck air up through the top of the IIgs and blow it out under the monitor. There was a rubber gasket around the edges to seal the System Saver IIgs to the top of the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Google image search: &quot;Apple IIgs&quot; &quot;System Saver&quot; -- &lt;a href=&quot;http://www.google.com/search?tbm=isch&amp;amp;q=%22Apple%20IIgs%22%20%22System%20Saver%22&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.google.com/search?tbm=isch&amp;amp;q=%22Apple%20IIgs%22%20%22System%20Saver%22&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are one of the lucky few to still own an Apple ///, you already know all about its overheating problems which were legendary for its time and which caused the untimely death of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It ran extremely hot due to Steve Jobs' idiot insistence that fan noise sucks and air vents are unattractive. Socketed chips would slowly work themselves out of their chip-holders causing electrical failures. An official solution to this from Apple was to pick the machine up and drop it on the table to reseat the chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reference: Wikipedia - Apple III &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_III&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Apple_III&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="3687" LastEditDate="2017-01-10T14:08:10.233" LastActivityDate="2017-01-10T14:08:10.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2061" PostTypeId="1" CreationDate="2017-01-09T20:40:05.910" Score="15" ViewCount="441" Body="&lt;p&gt;I have an Apple //e, and I quite enjoy using it as a dumb terminal to my Raspberry Pi from time to time. Recently, I came across a few cords that could connect my Android phone (a Pixel) to the DB25 port on the back of the //e's Super Serial Card. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any software I could use to get my Android phone to interact with the Apple? I am using MODEM.MGR currently whenever I connect it to my Raspberry Pi. Is there an app for Android that anybody can verify works with an Apple II Super Serial Card's DB25 port?&lt;/p&gt;&#xA;" OwnerUserId="4234" LastEditorUserId="3423" LastEditDate="2017-01-11T08:51:56.217" LastActivityDate="2017-03-02T18:14:09.600" Title="Connecting an Apple //e with a Super Serial Card to an Android device via a USB to DB25 cable" Tags="&lt;apple-ii&gt;&lt;new-hardware-adaptation&gt;&lt;serial&gt;&lt;usb&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2062" PostTypeId="2" ParentId="2055" CreationDate="2017-01-09T21:30:55.830" Score="13" Body="&lt;p&gt;&lt;em&gt;TL;DR: this longish answer address the &quot;mystic&quot; property of the question; i.e., the sense of wonder about how this could be possible; not the actual workings of the specific components.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The gory details have been given in other answers, but here is a broader outlook on the issue:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that in that time, computers (certainly home computers) were, compared to today, very simple things. For example, at the days of the 8 bit computers like Atari 800XL, C64 and so on, it was not unheard of for a kid to own a big book which not only had the complete schematic of the whole computer, but also in such great detail that you could literally &quot;see&quot; and eventually comprehend every single detail right into the deepest depths of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were many discrete parts (e.g., many logic chips of the 74xx family) which in themselves were very easy to understand. The most complex item was the CPU, the separate video chip, and the separate sound chip, but every one of these items was of very finite complexity. You could easily get a 100% intuitive understanding of any of them; their whole functional and internal description would fit into a not too thick physical paper book each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that time, if you did things like plug a different processor (card) into a computer, if you had the documentation of what it did, you could readily trace the electrical connection and see where what took place. Another example; you could retrofit one of those 8bit computers with an enormous amount of RAM (256KB, making it a total of unbelievable 320KB of RAM, albeit with heavy paging involved); and here also the actual mechanism was right in front of your eyes, in plain sight, even if those computers didn't even had provisions to fit additional RAM, coming from the factory. One would directly solder the RAM expansion to the actual CPU pins (or PCB traces).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was very different from today where individual systems-on-a-chip are very much incomprehensible, and even a complete description of their outward interface would take not a single book, but whole libraries, if printed out on paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, back then there was no OS to speak of; while they already had something vaguely akin to a BIOS, using it was almost optional (when you were programming at the assembler/machine code level, which was very much achievable by kids teaching themselves from paper books). There was no user/kernel-space distinction, no memory protection, no virtualization, nothing of that kind. Even in BASIC, it would not take long until you used PEEK and POKE to manipulate the whole RAM and especially control registers, the video chip etc., directly and freely.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Reading this book means I can imagine building a CPU out of logic gates and logic components, but can't imagine how you would switch control from one to another.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But this is what happens every day when multiple MCUs communicate. For example, even on the arguably simplest bus around, the I2C bus, which uses only two wires, there is a very well defined protocol of who gets to talk when, which even allows multiple masters at the same time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scale that up to your question, and it is a simple matter to craft a protocol where one of the CPUs more or less &quot;shuts up&quot; and waits until it gets signaled to pick up work again. It could be as simple as each CPU having an &quot;enable&quot; pin, and a simple discrete logic, probably involving a flipflop, making sure that only one CPU is enabled at any one time. There certainly is no magic about this; and yes, if by chance both CPUs were active at the same time, things would go wrong quickly, there certainly was true no multiprocessing back then, in home computers.&lt;/p&gt;&#xA;" OwnerUserId="4235" LastEditorUserId="4235" LastEditDate="2017-01-10T07:42:37.833" LastActivityDate="2017-01-10T07:42:37.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2063" PostTypeId="2" ParentId="134" CreationDate="2017-01-10T05:02:47.420" Score="3" Body="&lt;p&gt;It's doable if you have a lot of time, decent electronics skills, and some good test kit to figure out how the VIC video chip and the 6510 share the address and data bus.  If I remember correctly, the 6510 reads/writes in one part of the clock cycle, and the VIC chip reads in the other part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know this because in 1990 a friend and I made a 4Mhz accelerator board for my Commodore 64 using many of the principles laid out in other answers.  We used 2x32kb static RAM chips, a 4MHz 6502 derivative (can't remember which now, but it's still sitting in my parent's attic), and about 4-5 PAL chips to control all the logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We removed the 6510, plugged in the board we built to where the 6510 used to sit, and spliced a wire to the video clock (16MHz, which itself is divided by 16 to provide the CPU clock), which was then divided by 4.  On every read cycle, the 4Mhz capable 6502 would directly read from the static RAM, and on every write cycle (the circuitry to synchronize clock cycles was very tricky) the 6502 would write to the static RAM AND the main board using the 1MHz clock (whether the RAM there, or special registers, whatever).  Essentially, it was what we call today a cache.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It worked.... sort of.  We could see programs running at about 3.5x regular speed for maybe a couple of minutes, but we could also see the screen filling up with random characters, indicating that something was corrupting memory.  Inevitably, the programs crashed.  We think that the VIC chip was somehow attempting read cycles that weren't quite synchronized with our clock cycles, but couldn't find a logic analyzer fast enough to figure out what was happening.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still think this approach could work if you have modern test equipment, but it's months and months of work.&lt;/p&gt;&#xA;" OwnerUserId="4236" LastEditorUserId="4236" LastEditDate="2017-01-10T05:09:47.230" LastActivityDate="2017-01-10T05:09:47.230" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2064" PostTypeId="1" AcceptedAnswerId="2077" CreationDate="2017-01-10T06:28:04.320" Score="1" ViewCount="301" Body="&lt;p&gt;Consider a FORTRAN program&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    РRINТ 1&#xA; 1  FОRМАТ(1Х,’ GООD ВУЕ НЕLLО, WОRLD’/’+ХХХХ ХХХ’)&#xA;    ЕND&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(YMMV re the number of leading spaces to align Xes with &quot;GOOD BYE&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its output, using the SIMH convention of denoting overprinting with the carriage return character, is&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   GООD ВУЕ НЕLLО, WОRLD^M  ХХХХ ХХХ&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My question is, how to convert it efficiently and reliably to HTML to display as intended?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Searching for &quot;HTML overprint&quot; yields irrelevant results or examples of very fancy overprinting using individual CSS specifications for each letter; obviously not what I want. Adding &quot;fortran&quot; yields descriptions of how to achieve overprinting in FORTRAN, not how to render the result in HTML.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="79" LastEditDate="2018-05-29T10:51:19.810" LastActivityDate="2018-05-29T10:51:19.810" Title="How to render FORTRAN overprinting in HTML?" Tags="&lt;display&gt;&lt;simulator&gt;&lt;fortran&gt;" AnswerCount="2" CommentCount="13" ClosedDate="2017-01-12T21:40:02.840" ContentLicense="CC BY-SA 3.0" />
  <row Id="2065" PostTypeId="2" ParentId="2055" CreationDate="2017-01-10T06:44:15.110" Score="1" Body="&lt;p&gt;iirc, the 6502 was actually 'off the bus' half of the time (it only controlled the bus when the clock was at one polarity, and ignored the bus when the clock was the opposite polarity).  This allowed the Z80 to have essentially full-speed access to the bus without diminishing the 6502's access; the processors essentially interleaved their access, by design.&lt;/p&gt;&#xA;" OwnerUserId="4237" LastActivityDate="2017-01-10T06:44:15.110" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2066" PostTypeId="2" ParentId="2064" CreationDate="2017-01-10T14:36:39.637" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://www.ibiblio.org/pub/languages/fortran/ch2-14.html&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;FORTRAN carriage-control&quot;&gt;FORTRAN carriage-control&lt;/a&gt; from record-based IO on legacy systems can be quite challenging on modern octet-stream systems. If SIMH is using CRs and BSs to format output, the traditional way of cleaning up the stream is to use &lt;a href=&quot;http://man7.org/linux/man-pages/man1/col.1.html&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;col -b&quot;&gt;col -b&lt;/a&gt; as a filter to merge the control characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Okay, so this &lt;em&gt;is&lt;/em&gt; a question about HTML overprinting, for which there seems to be no acceptable cross-platform solution, and any answer to that would be well out of scope for RCSE. Here's an SVG-based possible solution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://scruss.com/wordpress/wp-content/uploads/2017/01/hello.svg&quot; width=&quot;320&quot; /&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(fail-safe image: &lt;a href=&quot;https://i.stack.imgur.com/ASvn5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ASvn5.png&quot; alt=&quot;overstrike&quot;&gt;&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was made with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;echo -e 'GOOD BYE HELLO WORLD\rXXXX XXX' | enscript -B -o hello.ps&#xA;ps2eps --ignoreBB -l hello.ps&#xA;epstopdf hello.eps&#xA;pdf2svg hello.pdf hello.svg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="439" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:35.493" LastActivityDate="2017-01-10T19:35:09.350" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2067" PostTypeId="2" ParentId="775" CreationDate="2017-01-10T14:41:39.130" Score="4" Body="&lt;p&gt;Microsoft's licensing and activation functions have slowly evolved over time. When Windows 95 and then Windows 98 came out, Microsoft used keys that were unique but not tracked via a central database.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Windows 95 was first introduced, at that time access to the Internet was still very uncommon, with people using 14.4 kilobit in about 1994 or so. All computers could not be guaranteed to have modems to call in to a licensing registry, and Ethernet was uncommon except in schools and businesses. So how would the software be able to easily know if a product key was being uniquely entered for each installation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically in the old days, the way that install software would become activated involved using install media that could be written to. There would be some sort of &lt;strong&gt;key disk&lt;/strong&gt; that would have activation information written to it, and was designed to use copy protection to prevent duplication and transfer of the software to someone else. If this disk was damaged or unreadable then then software could not be used anymore. Typically this type of software protection is only used infrequently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If Microsoft had done this, the key disk would have had to be permanently inserted at all times, preventing use of the floppy drive, which would have been both cumbersome and annoying to Windows users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The modern activation process is not specifically tied to the software installation disc, but rather to your hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most modern standardized Windows install media can be used an unlimited number of times, but requires a unique product key for each installation. The product keys themselves are tied to hardware inside the computer, commonly the MAC address of the network interface, which every modern computer now includes integrated by default.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For modern Windows installations that include Windows preinstalled and no product activation is needed, that is a special short-run customized installation media used by a vendor for all their products. That install media is not uniquely tied to that specific computer, but will work for any similar system from the same product family.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-01-10T14:41:39.130" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2068" PostTypeId="1" AcceptedAnswerId="2182" CreationDate="2017-01-10T16:54:40.890" Score="9" ViewCount="2042" Body="&lt;p&gt;I have an original Amiga &quot;tank&quot; mouse, the PCBs are good, but the cable is clearly faulty as the Y axis and left mouse click doesn't work when it is tilted to the right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to replace the cable in order to have it working properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know I have to get a 9 pin D-Sub female connector. But I don't know what type of cable I should get as it should be 9 pin but the mouse cable only has 8 wires + the ground that seems soldered to the metal mesh coating the wires inside the cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I don't know which pin goes where on the PCBs, I could only find pinouts for the connector, and not for the PCBs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what type of cable should I get as a replacement and how should I solder it to the PCB?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="2109" LastEditDate="2017-01-10T17:09:18.633" LastActivityDate="2017-01-27T03:04:13.807" Title="Replacing Amiga 9 pin D-Sub mouse cable" Tags="&lt;amiga&gt;&lt;restoration&gt;&lt;repair&gt;&lt;mouse&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2069" PostTypeId="2" ParentId="2068" CreationDate="2017-01-10T17:10:59.607" Score="1" Body="&lt;p&gt;Use an ohmmeter to determine the end-to-end mapping from D-sub pins to the connections on the PCB with the existing cable. Write this down and make sure your new cable has the exact same mapping.&lt;/p&gt;&#xA;" OwnerUserId="4183" LastActivityDate="2017-01-10T17:10:59.607" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2070" PostTypeId="1" AcceptedAnswerId="2071" CreationDate="2017-01-10T18:47:47.483" Score="21" ViewCount="5895" Body="&lt;p&gt;I've recently got hold of an old Zilog Z80 microprocessor and I know how to clock and test it. I do not however know how to connect RAM, I/O ports, control switches (for programming instructions into ram) or a display for output. I cannot seem to find any basic or any complete tutorials online about the simplest Z80 computer you can build. I do have some electrical knowledge, enough to read and follow a schematic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I connect the microprocessor other hardware components?&lt;/p&gt;&#xA;" OwnerUserId="4240" LastEditorUserId="278" LastEditDate="2017-01-10T19:40:28.930" LastActivityDate="2019-12-08T16:09:29.957" Title="Wiring a Zilog Z80" Tags="&lt;hardware&gt;&lt;z80&gt;&lt;8-bit-microcomputers&gt;&lt;homemade&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2071" PostTypeId="2" ParentId="2070" CreationDate="2017-01-10T20:01:36.693" Score="29" Body="&lt;p&gt;The &lt;a href=&quot;http://www.nascomhomepage.com/pdf/z80-mostek.pdf&quot;&gt;MK 3880 Mostek CPU Technical manual&lt;/a&gt; (it's the Z80 implementation from Mostek) has a section called &quot;Hardware implementation examples&quot; which may help you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides, the &lt;a href=&quot;http://www.z80.info/&quot;&gt;Thomas Scherrer Z80-Family Official Support Page&lt;/a&gt; has a &lt;a href=&quot;http://www.z80.info/#BASICS_HARD_SCHEMA&quot;&gt;section devoted to circuit schematics based upon the Z80 processor&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are in Facebook, there is a group devoted to share knowledge about system design on the Z80 called &lt;a href=&quot;https://www.facebook.com/groups/849674861775079/&quot;&gt;Z80 DIY/Homebrew Computers &amp;amp; Projects&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplest schematic I can think of, uses:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A Z80&lt;/li&gt;&#xA;&lt;li&gt;A ROM chip (actually, EEPROM chip)&lt;/li&gt;&#xA;&lt;li&gt;A RAM chip (actually, SRAM chip)&lt;/li&gt;&#xA;&lt;li&gt;An 8-bit latch which will store data written to a specific I/O port&lt;/li&gt;&#xA;&lt;li&gt;A 8-bit transceiver which supplies 8 bit input data when read from a specific I/O port&lt;/li&gt;&#xA;&lt;li&gt;Some logic gates for decoding purposes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You have first to define your memory map: the Z80 starts executing from address 0000h after powerup or reset, so it's usual to place the ROM memory mapped to lower addresses. Say your ROM is a 32KB chip (27256 for example). It will be mapped from address 0000h to address 7FFFh. RAM can map the remainder of the address space, from address 8000h to address FFFFh. A 62256 SRAM chip can do the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that, as I/O address space is separated from memory address space, you don't have to open a gap into the memory address space in order to accomodate I/O devices. They can share addresses with memory and there won't be collisions between both because memory will only be asserted when MREQ is low, and I/O devices will be asserted when IORQ is low.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dividing the memory space into two 32KB regions allows for a very easy decoding. Address line A15 will be used for that: if it is low and there is a memory bus cycle executing, then ROM is selected. If it is high and a memory bus cycle is executing, then RAM is selected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally, chip select pins on ROMs and RAMs chips are enabled low, so we will need some logic gates to generate chip selects according to this memory map. Take A15 and OR it with MREQ. The output can be used as CS for the 27256 chip (ROM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take A15, negate it with an inverter and OR it with MREQ. The output can be used as CS for the 62256 chip (RAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 27256 chip also uses an OE pin to output data into the bus. Just connect it to the RD pin on the Z80. Do the same with the OE pin on the 62256 chip and connect it to the RD pin on the Z80. Last, wire the WE pin from the 62256 chip to the WR pin on the Z80, so the RAM will be put into write mode only when it is selected AND there is a write bus cycle executing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I/O devices are used the same. For a very simple design, we will use lazy decoding, using only A0 to select between an input I/O device and an output I/O device. When A0 is low, the input device is selected and with A1 high, the output device is selected. Thus, even numbered I/O ports will access the input device and odd numbered I/O ports, the output device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take A0 and OR it with IORQ and with RD (3-input OR gate). The output will be the select signal for the transceiver that will act as input device. Take A0 again, negate it, and OR it with IORQ and with WR (3-input OR gate). The output will be the load enable signal for the latch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that, when decoding I/O devices, use both IORQ signal and WR and RD signals. Don't decode just IORQ, as the INTA bus cycle also asserts IORQ, and this may confuse the I/O logic by thinking that an I/O bus cycle is executing. The INTA cycle asserts both IORQ and M1, but not RD nor WR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The outputs from the latch can go to eigth LED's. Each LED will have a 330 ohm limiting resistor to GND, and connected, anode to each output from the latch and cathode, to the resistor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inputs on the transceiver can be pulled up to +5V using a 4.7K resistor array. Reading the input device with nothing connected to its input will read $FF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following picture is an almost-complete schematic of a minimal Z80 system. It misses some decoupling capacitors here and there, and logic gate power supplies should be connected. Also, inputs from unused logic gates should be tied to GND so you can use either LS or HCT chips (I would recommend to use HCT chips because they impose a very small load to the Z80 output pins, which being a NMOS device, have a small fanout. In fact, a proper Z80 based design should buffer all output pins). Besides, it lacks a circuit to supply a proper clock signal, but I think the main idea is there. I have changed the output device to drive a seven segment display instead of eigth discrete LEDs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1ZPcQ.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1ZPcQ.png&quot; alt=&quot;Minimal Z80 circuit&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A small program to demonstrate this system could be as this (it doesn't even need RAM in order to work, just ROM and both I/O devices). To use it, plug one end of a piece of wire to GND and touch with the other end each of the eight input pads of the pin header connected to the input device. The number (0 to 7) of the pad contacted is showed on the LED display and stays there until you touch another pin.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PINHEADER      equ 0&#xA;DISPLAY        equ 1&#xA;&#xA;; Bit of B register to build digits from 0 to 7&#xA;; Bit 7 is always 0 for this example&#xA;;         0&#xA;;       -----&#xA;;      |     |&#xA;;    5 |  6  | 1&#xA;;       -----&#xA;;      |     |&#xA;;    4 |     | 2&#xA;;       -----&#xA;;         3&#xA;                org 0000h&#xA;&#xA;Start           di&#xA;&#xA;                xor a&#xA;                out (DISPLAY),a      ;clear display&#xA;&#xA;Again           in a,(PINHEADER)     ;read pins&#xA;&#xA;                ld b,00111111b       ;prepare to display 0&#xA;                bit 0,a              ;is pin 0 grounded?&#xA;                jr z,Found           ;if so, go ahead and display 0&#xA;&#xA;                ld b,00000110b       ;prepare to display 1&#xA;                bit 1,a              ;is pin 1 grounded?&#xA;                jr z,Found           ;if so, go ahead and display 1&#xA;&#xA;                ld b,01011011b       ;and so on...&#xA;                bit 2,a&#xA;                jr z,Found&#xA;&#xA;                ld b,01001111b&#xA;                bit 3,a&#xA;                jr z,Found&#xA;&#xA;                ld b,00110110b&#xA;                bit 4,a&#xA;                jr z,Found&#xA;&#xA;                ld b,01101101b&#xA;                bit 5,a&#xA;                jr z,Found&#xA;&#xA;                ld b,01111101b&#xA;                bit 6,a&#xA;                jr z,Found&#xA;&#xA;                ld b,00000111b&#xA;                bit 7,a&#xA;                jr z,Found&#xA;&#xA;                jr Again&#xA;&#xA;Found           ld a,b&#xA;                out (DISPLAY),a&#xA;                jr Again&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2017-01-11T07:44:22.567" LastActivityDate="2017-01-11T07:44:22.567" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2072" PostTypeId="2" ParentId="1950" CreationDate="2017-01-11T05:34:52.853" Score="2" Body="&lt;p&gt;There doesn't seem to be any law that prohibits it specifically. The most relevant law appears to be:&lt;/p&gt;&#xA;&lt;h3&gt;&lt;a href=&quot;https://www.law.cornell.edu/uscode/text/17/102&quot; rel=&quot;nofollow noreferrer&quot;&gt;17 U.S. Code § 102 - Subject matter of copyright: In general&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(b) In no case does copyright protection for an original work of&#xA;authorship extend to any idea, procedure, process, &lt;strong&gt;system&lt;/strong&gt;,&#xA;&lt;strong&gt;method of operation&lt;/strong&gt;, concept, principle, or discovery, regardless of the form in which it is described, explained, illustrated, or&#xA;embodied in such work.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Emphasis mine. My interpretation: emulators are computer programs that replicate the method of operation of the system being emulated, therefore they do not infringe any copyright.&lt;/p&gt;&#xA;&lt;p&gt;Indeed, I wasn't able to find a case where &amp;quot;compatible products&amp;quot; such as emulators are outright asserted to be illegal. In the two relevant cases I found, the company took issue with something other than the emulator itself.&lt;/p&gt;&#xA;&lt;p&gt;Two companies developed and sold PlayStation emulators and were subsequently sued by Sony. In those cases, Sony didn't try to dispute the legality of emulation. They sought an injunction that would stop the developers from making money off of the software. This stifled future development of their emulators. As noted in &lt;a href=&quot;http://aarongiles.com/history/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aaron's Computing History&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Of course, as was widely reported, we were sued by Sony Computer&#xA;Entertainment of America, and the legal tussle ensued. Although we won&#xA;a number of battles, we lost the most important one: SCEA was granted&#xA;a preliminary injunction against the product, which meant that we had&#xA;to stop selling it shortly after we released it — and before I could&#xA;finish up the Windows port. Unfortunately, this put the brakes on all&#xA;our momentum, and generally hurt our ability to sell the product even&#xA;after the injunction was overturned on appeal. Plus, since we didn't&#xA;know whether or not the injunction was going to be overturned, it&#xA;wasn't in our best interests to devote company resources toward&#xA;improving the product. So it languished for several months, and a lot&#xA;of features we wanted to put into it never made it. Eventually, we did&#xA;ship the Windows version and a few updates, but by then the excitement&#xA;and novelty of the product had long since worn off.&lt;/p&gt;&#xA;&lt;p&gt;In the end, we managed to settle things out of court.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A summary of the two cases in question:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://scholar.google.com/scholar_case?case=7166769136737271634&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sony Computer Entertainment v. Connectix Corp.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Apparently, the issue was in &lt;em&gt;how&lt;/em&gt; the PlayStation emulator came to be developed, rather than the fact it was developed at all.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Virtual Game Station does not contain any of Sony's copyrighted&#xA;material. In the process of producing the Virtual Game Station,&#xA;however, Connectix repeatedly copied Sony's copyrighted BIOS during a&#xA;process of &amp;quot;reverse engineering&amp;quot; that Connectix conducted in order to&#xA;find out how the Sony PlayStation worked. Sony claimed infringement&#xA;and sought a preliminary injunction.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sony won at first but lost when Connectix appealed; the copying of the copyrighted PlayStation BIOS was found to be fair use, &amp;quot;necessary to permit Connectix to make its non-infringing Virtual Game Station function with PlayStation games&amp;quot;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The object code of a program may be copyrighted as expression, 17&#xA;U.S.C. § 102(a), but it also contains ideas and performs functions&#xA;that are not entitled to copyright protection. See 17 U.S.C. § 102(b).&#xA;Object code cannot, however, be read by humans. The unprotected ideas&#xA;and functions of the code therefore are frequently undiscoverable in&#xA;the absence of investigation and translation that may require copying&#xA;the copyrighted material. We conclude that, under the facts of this&#xA;case and our precedent, Connectix's intermediate copying and use of&#xA;Sony's copyrighted BIOS was a fair use for the purpose of gaining&#xA;access to the unprotected elements of Sony's software.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sony also claimed Connectix's Virtual Game Station tarnished the PlayStation trademark because the emulator was unable to play games as well as the hardware. However:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This evidence is insufficient to support a conclusion that the&#xA;shoddiness of the Virtual Game Station alone tarnishes the Sony mark.&#xA;Sony's tarnishment claim cannot support the injunction.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://scholar.google.com/scholar_case?case=11837224078052556056&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sony Computer Entertainment America v. Bleem&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this lawsuit, Sony simply claimed Bleem could not use screenshots of Sony's copyrighted games to advertise it.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The legality of the emulator is not at issue in this lawsuit.&lt;/p&gt;&#xA;&lt;p&gt;The issue in this appeal is the validity of the method by which Bleem&#xA;is advertising its product. In various advertising media, Bleem has&#xA;included comparative &amp;quot;screen shots&amp;quot; of Sony PlayStation games.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Later in the document:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The veracity of the screen shots is not at issue in this appeal. Sony&#xA;has not alleged that Bleem's depictions of the games played in&#xA;different ways are inaccurate or misleading; it simply contends that&#xA;Bleem may not use those screen shots because they are Sony's&#xA;copyrighted material.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sony lost when it was concluded that the use of the screen shots constituted comparative advertising.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2162" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-01-11T05:34:52.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2073" PostTypeId="1" CreationDate="2017-01-11T08:18:55.920" Score="1" ViewCount="369" Body="&lt;p&gt;I found a Z80 CPU lying around my house. I've search all over the Internet but I still don't know how do I input stuff and tell it what to do. Help me please&lt;/p&gt;&#xA;" OwnerUserId="4246" LastActivityDate="2017-01-11T10:58:01.710" Title="How to I give instructions to a Z80 CPU" Tags="&lt;z80&gt;&lt;8-bit-microcomputers&gt;&lt;homemade&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2017-01-11T10:59:51.507" ContentLicense="CC BY-SA 3.0" />
  <row Id="2074" PostTypeId="5" CreationDate="2017-01-11T09:46:46.757" Score="0" Body="&lt;p&gt;The Atari ST was a 680x0-based microcomputer manufactured from 1985-1993.  It appeared in various versions of memory size and processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use this tag for questions regarding models within the ST range.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-01-11T09:46:46.757" LastActivityDate="2017-01-11T09:46:46.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2075" PostTypeId="4" CreationDate="2017-01-11T09:46:46.757" Score="0" Body="For questions regarding the Atari ST range of microcomputers." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-01-11T09:46:46.757" LastActivityDate="2017-01-11T09:46:46.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2076" PostTypeId="2" ParentId="2073" CreationDate="2017-01-11T10:58:01.710" Score="4" Body="&lt;p&gt;Unless you want to build a barebones/simple computer basically from scratch, I'm not sure there's really much you can do with just a CPU chip on its own. Maybe there are some simple tests you can run without having a full computer built up around it, or maybe not, I don't know, but you won't really be able to use it &lt;em&gt;as a processor&lt;/em&gt; without building most, if not all, of a computer around it. If you just want to see if it works you could find an existing Z80 computer that uses the same package/etc. for the Z80 CPU and swap them out (that would obviously require desoldering the existing Z80 and replacing it with yours, unless it's socketed).&lt;/p&gt;&#xA;" OwnerUserId="1931" LastActivityDate="2017-01-11T10:58:01.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2077" PostTypeId="2" ParentId="2064" CreationDate="2017-01-11T20:14:43.473" Score="2" Body="&lt;p&gt;Experimenting with CSS along the lines (pun intended) of &quot;line-height:0&quot;&#xA;yielded &lt;a href=&quot;http://jsbin.com/moxulonufo/edit?html,css,output&quot; rel=&quot;nofollow noreferrer&quot;&gt;this satisfactory result&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.over { line-height: 0; margin-top: 0.5em; margin-bottom: -0.5em; }&#xA;&#xA;&amp;lt;pre&amp;gt;FIRST LINE&#xA;PREVIOUS LINE&#xA;&amp;lt;div class=&quot;over&quot;&amp;gt;GOOD BYE&#xA;XXXX XXX HELLO WORLD&amp;lt;/div&amp;gt;&#xA;NEXT LINE&#xA;LAST LINE&amp;lt;/pre&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Things are slightly trickier: the default line height is &quot;roughly&quot; 1.2em, so 0.6 and -0.6, or 50% and -50% of the current line height, will be likely better; however, line height may vary depending on the browser and the font, so the universal solution is still elusive.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-01-11T23:55:24.963" LastActivityDate="2017-01-11T23:55:24.963" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2080" PostTypeId="1" AcceptedAnswerId="2085" CreationDate="2017-01-12T07:53:24.530" Score="14" ViewCount="843" Body="&lt;p&gt;In a batch programming system developed in the late 1960s - early 1970s at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Joint_Institute_for_Nuclear_Research&quot;&gt;Joint Institute for Nuclear Research&lt;/a&gt; in the city of Dubna near Moscow, it was possible to dump object files to punch cards in &quot;binary&quot; format, then use those punch-card equivalents of binary object files in a deck together with sources. A typical object file on punch cards looked like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&#xA;.............................................................................O..&#xA;..O.............................................................................&#xA;..O..O.....O..OOOO.......OOOO.....OOO....OOOOOO...OOOOOOO...................O.O.&#xA;.....O.....O..O...O.....O....O...O...O...O.....O.....O..........................&#xA;..O...O...O...O....O....O.......O.....O..O.....O.....O.......................OO.&#xA;..O...O...O...O.....O....OOOO...O.....O..O.....O.....O......................OOO.&#xA;.......O.O....O.....O........O..O.....O..OOOOOO......O.......................O..&#xA;O.O....O.O....O.....O........O..O..OO.O..O...O.......O......................OOO.&#xA;........O.....O....O...O.....O...O...O...O....O......O......................O...&#xA;O.......O.....OOOOO.....OOOOO.....OOO.O..O.....O.....O..........................&#xA;............................................................................OOO.&#xA;............................................................................OOO.&#xA;&#xA;.O...O..........O...O.............O...O....O...O..........O.OO.O.....OO.OO...O..&#xA;....................O.............O........O...O..............O.....OO...OO.....&#xA;....O.O........................................................O...OOO.OOO..O.O.&#xA;..O........................................................O.O.O....OO...O......&#xA;..O..OO...............................O.................................O....OO.&#xA;....OOO...................................................O.O.O....O...O....OOO.&#xA;..O..O...............................................................O...O...O..&#xA;O.O.OOO..............................................................O.O.O..OOO.&#xA;..O.O...........................................................O..O.O...O..O...&#xA;O...............................................................O......O........&#xA;....OOO.O.......................................................O....O.O.O..OOO.&#xA;....OOO.........................................................O..O.OOO.OO.OOO.&#xA;&#xA;.....O....O.....OOO....OOO.OO.....O...O.O.OO...O.O......O....................O..&#xA;.O......OOO...O..O.....OOO..OO...OOOO.....O.O.OO................................&#xA;....OO..O....O.OOO....O.O.OOO....OOO.O..O...O.O..O......O...................O.O.&#xA;..O...O.OOO..OO..O......O...O..O.OOOO...O...OOOO.O...O..O..........O...O........&#xA;.....O..OO...O..O..O...O...O.....OOO.OO.....O.OO............O................OO.&#xA;..O.O....O...O.O......O...O.......O.O........O.O.......O....................OOO.&#xA;..O..............O......O...O.......O........O............O............O.....O..&#xA;O.O.O........O.O.O.O..O.O.O.O........O....................O.O...............OOO.&#xA;..O..............O......O...O....................O...O....O...O.............O...&#xA;O.O.O.O........O......O...O....O..........O......O...O..........................&#xA;...............O.O....O.O.O.O....................O...O....O...O.............OOO.&#xA;..O.O.O........O.OO...O.OOO.OO.O..........O......O.O.O....O...O........O....OOO.&#xA;&#xA;.O.O.O........O........O........O............................................O..&#xA;.OO...............O...OO..O....O................................................&#xA;....O.O..O....O...O....OO..OO...OO..........................................O.O.&#xA;..O...................OO..O....O................................................&#xA;..O..OO....................O....O............................................OO.&#xA;..O.OOO................OO..OO...OO..........................................OOO.&#xA;.....O....O....O...O.......O....O............................................O..&#xA;O.O.OOO...O....O...O....O..OO....O..........................................OOO.&#xA;....O.................OO..O....OO...........................................O...&#xA;O.O....................OO...O...OO..............................................&#xA;..O.OOO...O....O...O.......O................................................OOO.&#xA;..O.OOO..OO...OO..OO..OO..OO...OO...........................................OOO.&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(An equivalent assembly language code is 42 lines long.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each card contains its ordinal number in the &quot;object file&quot;, a parity column, and the module name in &lt;a href=&quot;https://en.wikipedia.org/wiki/Six-bit_character_code#Examples_of_six-bit_ASCII_variants&quot;&gt;ECMA-1&lt;/a&gt; code (with uniquely Cyrillic letters replacing the controls and some punctuations). The last card has an EOF flag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to Soviet mainframes, there were CDC and ICT computers at the JINR. Did their programming systems, or any other programming systems of that time, include such a capability, or was it a Soviet invention out of necessity, because magnetic tapes were in short supply and not of a particularly high quality?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-03-08T18:47:20.090" LastActivityDate="2017-03-08T18:47:20.090" Title="Which programming systems used object files on punch cards?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;punched-cards&gt;" AnswerCount="3" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="2081" PostTypeId="2" ParentId="2068" CreationDate="2017-01-12T12:07:28.303" Score="7" Body="&lt;p&gt;Unfortunately there were a few &quot;revisions&quot; of the mouse, and the pads on the mouse side were not always signed; the color coding isn't guaranteed to be repeatable either. &lt;a href=&quot;https://i.stack.imgur.com/ZOOVr.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZOOVr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your mouse has the pins marked on board, you can use the pinout of this extension cord to match them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there isn't, you'll have to match them &quot;by hand&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cut the mouse cable a very short distance from the plug, just enough to expose the wires and their colored shells. Using ohm-meter match colors to pins in the plug, write that down - and also match colors to pad order inside the mouse. That way you'll be able to re-create the mapping, unless the fault is right at the socket. If it is - you'll have some pretty arduous surgery at your hands, stripping the plastic from the plug with a sharp knife to trace the physical connection of the wires to pins. &lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2017-01-12T12:07:28.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2082" PostTypeId="1" CreationDate="2017-01-12T16:53:21.820" Score="6" ViewCount="94" Body="&lt;p&gt;I am trying to maintain an old procuct for my employer, based on an HD63B03R which is a 6800-style micro. The crystal on the PCB generates a 4.75MHz clock. I believe from the data sheets found on t'internet for this device thet the CPU internally divides this clock by 4 so in my case the system clock is 1.1875MHz. Documentation says there is a &quot;free running timer&quot; which is used with the Timer Output Compare Register to generate a timer interrupt when the free running timer equals the Timer Output Compare Register - but I can't find anything to say whether the free running timer is incremented by the external clock or the system clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The program sets TOCR = free running timer + #FFFF, thus setting the timer interrupt period to the maximum possible. If the free running timer is incrememnted by the system clock then this means the timer will interrupt at intervals approx 55.2ms, or if incremented by the external clock at 13.79 ms intervals. However neither of these figures seem consistent with the program's behaviour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result of these timer interrupts, the program reads an ADC (AD7578) 4 times (each time setting some PORT1 bits to select which analog device is gated to the ADC). So I scoped the (active low) Chip Select for the ADC and saw the expected groups of 4 downward-going pulses with gaps in between. These gaps according to the scope's horizontal scale were 5ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't relate the 5ms to any of the above figures, there must be something else I don't know. Does anyone else know what that is or where I can find it from?&lt;/p&gt;&#xA;" OwnerUserId="4249" LastActivityDate="2017-01-14T00:40:32.590" Title="HD63B03R timer interrupt frequency" Tags="&lt;6809&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2083" PostTypeId="2" ParentId="2080" CreationDate="2017-01-12T17:17:09.200" Score="6" Body="&lt;p&gt;If you didn't have access to (magnetic) backing store then the only way to keep your executable code once you'd compiled/assembled your source code would be to output the working file to paper tape or punched cards. However as a student in the late 70s, it was more a case of retrieving the job to correct source code errors, or runtime program faults; once you'd got a good run of the program and kept its printout you rarely needed to store the executable, as you wouldn't need to run it again, you'd be editing the source to make another executable, which you'd run once after you'd got the source code right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dirk is right about paper tape - we used it in an installation I can't name on a project I can't talk about for precisely that purpose, until 8&quot; floppy disks containing all of 250KB per side became available.&lt;/p&gt;&#xA;" OwnerUserId="4249" LastActivityDate="2017-01-12T17:17:09.200" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2084" PostTypeId="2" ParentId="2082" CreationDate="2017-01-12T17:26:04.003" Score="6" Body="&lt;p&gt;Your analysis seems pretty good. To confirm, the E clock is 1/4 the oscillator frequency. The data sheet also states that the free running counter (FRC) is driven by that same E clock. Your conclusions of the setting of the output compare register (OCR) is also correct. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how can there be a discrepancy? When I programmed this chip, it was very common to set the initial value to the maximum allowed to give initialization procedures time to conclude. Once running however, the OCR was incremented by a smaller value to increase the rate of interrupts to a higher rate during &quot;normal&quot; operations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note here the operation is OCR = OCR + delta and not OCR = FRC + delta, as the former produces interrupts with much less time jitter than the latter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This incrementing would typically occur in the interrupt service routine and not the main line code. That is where you need to look.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastEditorUserId="4066" LastEditDate="2017-01-14T00:40:32.590" LastActivityDate="2017-01-14T00:40:32.590" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2085" PostTypeId="2" ParentId="2080" CreationDate="2017-01-12T18:36:57.450" Score="11" Body="&lt;p&gt;It wasn't just a Soviet thing:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;… This time I decided to look closely at the program deck.  By now I&#xA;  knew just about everything there was to know about the source deck.&#xA;  The program deck was quite different from the source deck.  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;To start with,&#xA;  it was a much smaller stack of cards.  There were no letters typed on the&#xA;  top of the cards, and there were lots of punches in each of the cards.&#xA;  Lots of punches! In fact, some of the cards looked almost like lace.&#xA;  Clearly in order to verify that the compiler had done its job right I&#xA;  would need to learn how to read these cards as well as I could now read&#xA;  the source deck cards. I took the program deck to Bob and asked him how&#xA;  to decipher all those punches.  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;“Don’t worry about it,” he said.&#xA;  “This deck of cards, your object deck, is punched with a binary coding&#xA;  system that only computers understand.  You could figure it out if you&#xA;  really had to, but you don’t.”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;— Dale Fisk, describing &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/fisk.pdf&quot; rel=&quot;noreferrer&quot; title=&quot;Programming with Punched Cards&quot;&gt;Programming with Punched Cards&lt;/a&gt; on an IBM 360.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Douglas W. Jones' &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/cards/collection/i-program.html&quot; rel=&quot;noreferrer&quot; title=&quot;Punched Cards for Computer Programs&quot;&gt;Punched Cards for Computer Programs&lt;/a&gt; also has some examples of instruction/binary/data cards.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-01-12T18:36:57.450" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2086" PostTypeId="1" AcceptedAnswerId="2087" CreationDate="2017-01-13T00:14:31.817" Score="11" ViewCount="1644" Body="&lt;p&gt;My Mega Drive's cartridges rarely boot. It's to the point where I sometimes don't want to change the current game because it'll mean 15 minutes of me constantly taking out and re-seating the next cartridge before I finally see a Sega logo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once in and seated 'correctly' however, the games play fine. No freeze-ups or weird graphical glitches. It's only the initial insertion where problems arise. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise on my RetroN 5, the games are recognised straight away and are immediately dumped &amp;amp; ready to play. Thus I don't think the problem is with the carts themselves, but with my old Mega Drive's cartridge slot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've wiped down the contact points of the cartridges themselves, but is there any cleaning or repair work I can do to the console's cartridge slot itself? Are there any parts that are known to be prone to failure or can be repaired/maintained, or (in extreme cases) replaced entirely?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using an unmodified 'Revision 1' Mega Drive (PAL) if it matters&lt;/p&gt;&#xA;" OwnerUserId="3352" LastEditorUserId="3352" LastEditDate="2017-01-13T03:21:04.410" LastActivityDate="2017-01-13T03:21:04.410" Title="What cleaning/repair can be done to a Mega Drive cartridge slot?" Tags="&lt;repair&gt;&lt;game-cartridge&gt;&lt;sega-genesis&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2087" PostTypeId="2" ParentId="2086" CreationDate="2017-01-13T03:17:47.020" Score="8" Body="&lt;p&gt;Have you tried cleaning the pin connector inside the Mega Drive? It's fairly simple to remove the shell and access the pin connectors. (don't forget to remove the LED wires for model 1) I got a second hand genesis and used toothpicks to clean up the immense dust buildup in my console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early Mega Drives did not have BIOS - they boot directly from the cartridge. Later ones did had a small startup ROM that boots first known as the Trademark Security System (TMSS). This chip can stop roms from loading if it deems a game as unlicensed. You can tell if you have this TMSS if when you games boot, a short message &quot;THIS GAME WAS MADE/LICENSED BY SEGA&quot; or something similar. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure if this ROM is the problem since your sporadic loading is more indicative of more cartridge contact rather than a faulty TMSS ROM.&lt;/p&gt;&#xA;" OwnerUserId="4251" LastActivityDate="2017-01-13T03:17:47.020" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2089" PostTypeId="1" AcceptedAnswerId="2091" CreationDate="2017-01-14T01:01:25.417" Score="10" ViewCount="1526" Body="&lt;p&gt;A two-part question:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How widespread in legacy systems was the practice of using magnetic tapes as a genuinely random access medium at the OS level by pre-formatting them in a way before the first use, then an application referring to data blocks on tape by number, and the OS automatically issuing the appropriate number of Block Skip Forward or Block Skip Back commands before performing the actual block read or write operation?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: That's &lt;a href=&quot;https://en.wikipedia.org/wiki/DECtape&quot; rel=&quot;noreferrer&quot;&gt;DECtape&lt;/a&gt;, for example.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;How widespread, if at all, was the practice of emulating such random access tapes with IBM &lt;a href=&quot;https://en.wikipedia.org/wiki/9_track_tape&quot; rel=&quot;noreferrer&quot;&gt;9 track tapes&lt;/a&gt;, when the original equipment went out of commission but the need for tapes with random access remained?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-01-14T16:54:00.610" LastActivityDate="2017-01-15T12:16:03.380" Title="Magnetic tapes as a random access medium?" Tags="&lt;history&gt;&lt;storage&gt;&lt;magnetic-tape&gt;" AnswerCount="4" CommentCount="17" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2090" PostTypeId="2" ParentId="2089" CreationDate="2017-01-14T04:40:34.693" Score="2" Body="&lt;p&gt;It is very unlikely this was ever done on legacy reel-to-reel tape machines, since the time to wind through a 2,400 foot tape to find the next block of data would have been ridiculously slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In commercial computing applications, the standard way to process a large dataset in &quot;random order&quot; was to start by &lt;em&gt;sorting&lt;/em&gt; it into the required order. This could be done using sequential reading and writing with several tape drives. For example with three tape drives, you could first copy (unsorted) sections of the data onto several tapes, and then read a block of data from two tape drives, sort it in memory, and write it in sorted order onto a third drive. Repeating that &quot;merge sorting&quot; procedure enough times would sort an arbitrarily long data set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In principle, the IBM S/360 tape drives could have done this, because they were capable of &lt;em&gt;backspacing&lt;/em&gt; over a data block, and then reading or writing with the tape moving forwards. But writing new data in this way could cause problems, since the data blocks on tape could be of variable length, and obviously you could not replace a block by a longer one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &quot;backwards reading&quot; was used in some specialized applications - for example in solving systems of equations which were much larger than the available main memory, it was possible to write intermediate results onto a tape, and then read them backwards, while doing more calculations, and writing the final results to a second tape. I used software that worked like that in the 1970s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were various special-purpose storage devices that used many short &lt;em&gt;loops&lt;/em&gt; of tape to achieve a reasonable random access speed, with much more storage capacity than the available magnetic disks (which often had a capacity of only a few Mb, not a few Tb as now) Once such device was the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2321_Data_Cell&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/IBM_2321_Data_Cell&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware failures on the 2321 and similar mechanical devices could be &quot;entertaining&quot; - the data could literally end up being shredded and scattered around the computer room floor!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_3850&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/IBM_3850&lt;/a&gt; was a much larger scale version of the 2321, using tape cartridges storing about 50Mb with a robot device to mount the tapes onto drives and transfer the data to disk for access by the computer. By 1980, the largest model could store about 500Gb - but in a 20-foot-long cabinet, not a 2 inch diameter PC disk drive!&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2017-01-14T04:56:17.327" LastActivityDate="2017-01-14T04:56:17.327" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2091" PostTypeId="2" ParentId="2089" CreationDate="2017-01-14T06:41:21.697" Score="10" Body="&lt;p&gt;DECtape was used that way; it was wide (0.750 inch?) magnetic tape, on very small reels, so it&#xA;didn't take forever to find a sector.   PDP-8 and PDP-11 systems from Digital Equipment were the likely systems sporting DECtape drives.  The tape was fully redundant, took a LOT of wear without losing data, and that made it suitable&#xA;for such system-program use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That would be about the late 1970s.   As I recall, 1/2&quot; tapes&#xA;of that era were not used for any such OS functions, because hard disk drives&#xA;weren't more expensive than a good full-reel tape transport.  Nine-track&#xA;and ANSI labeled standard tapes weren't as suitable for such service.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2017-01-14T06:41:21.697" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2092" PostTypeId="2" ParentId="2089" CreationDate="2017-01-14T10:12:13.320" Score="4" Body="&lt;p&gt;There's another use of tape drives that is &quot;sort-of&quot; random access and floppy-like, besides DECtapes: The &lt;a href=&quot;https://en.wikipedia.org/wiki/Exatron_Stringy_Floppy&quot; rel=&quot;nofollow noreferrer&quot;&gt;Exatron Stringy Floppy&lt;/a&gt; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Microdrive&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX Microdrive&lt;/a&gt; used tapes that consisted of a closed loop in a cartridge, and was used for home computers (TRS-80 resp. Sinclair ZX Spectrum) as a cheaper alternative to floppy disks. The loop was transported much faster then the audio cassettes that were also used for storage, and used higher quality type, so access times and capacity were comparable to a floppy disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the tape was not pre-formatted, organziation was not by blocks, but by files, and there were no skip commands (the loop was read/written continously). So if you don't restrict your question to that particular way of organzing it, then yes, there were other kinds random access tapes as well. (I still wrote this up as an answer instead of a comment, because it's much too long for a comment).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course nobody thought about replacing them with IBM tape drives. :-)&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-01-14T10:12:13.320" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2094" PostTypeId="2" ParentId="2089" CreationDate="2017-01-15T02:24:02.143" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Coleco_Adam&quot; rel=&quot;nofollow noreferrer&quot;&gt;Coleco Adam&lt;/a&gt; was an early home computer that used a pair of block-addressable cassette tapes as its secondary storage. I helped a friend develop a Forth interpreter for it, but the system was quickly outdated and it went nowhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even at the time, everyone understood that this was a sub-optimal solution to the problem of block-addressability. There was never a &quot;need&quot; for these systems to be emulated; everyone migrated to disks (floppy or hard) as soon as it became feasible.&lt;/p&gt;&#xA;" OwnerUserId="4183" LastEditorUserId="4183" LastEditDate="2017-01-15T02:33:42.450" LastActivityDate="2017-01-15T02:33:42.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2095" PostTypeId="1" AcceptedAnswerId="2099" CreationDate="2017-01-15T09:36:53.280" Score="45" ViewCount="35056" Body="&lt;p&gt;I've been thinking about getting a Commodore 64 machine. However, I realise there's obviously no video cables I have that will work. But when I looked online there are many people using S-Video to VGA and stuff like that. My TV is quite old and has an aerial (RF antenna) port in the back but I'm not sure if that would work. Other than that I can't find the S-Video to C64 cable that all these videos show. (They then put it into an S-Video to VGA converter)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I able to use the aerial cable to run the C64 and if not, how do I find a C64 out to S-Video cable? I don't feel comfortable making one. &lt;/p&gt;&#xA;" OwnerUserId="4259" LastEditorUserId="824" LastEditDate="2018-07-11T14:03:47.957" LastActivityDate="2018-07-11T14:03:47.957" Title="Commodore 64 to modern TV" Tags="&lt;commodore-64&gt;&lt;video&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="2096" PostTypeId="2" ParentId="2080" CreationDate="2017-01-15T11:15:45.973" Score="4" Body="&lt;p&gt;Punched card object files were used as a &quot;standard&quot; method of distribute software in some low-volume specialized applications. In the 1970s, magnetic disks were not generally portable, and the proliferation of incompatible magnetic tape hardware and software being developed made it problematical for a small scale software development team to produce tapes that were compatible with every recipient's hardware. Some form of binary data on cards was guaranteed to be compatible and readable, and the standard-size 2000-card package was physically almost indestructible by international post and courier services, since it was pretty much a large solid brick-shaped block of cardboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, working for a jet engine manufacturer, we had the task of shipping software that simulated engine performance to all the airlines flying the engines. We had an informal network of colleagues in other companies which allowed porting and testing the software on as wide a range of computer systems as was necessary, but we certainly didn't have the expertise to understand all the tape hardware and software formats used by hundreds of airlines, nor did we have access to the hardware to write every type of media that they might be using. But everybody's computer system could read a box (or more usually, several boxes) of cards.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2017-01-15T11:15:45.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2098" PostTypeId="2" ParentId="2095" CreationDate="2017-01-15T13:49:01.693" Score="5" Body="&lt;p&gt;You can use the aerial port on your TV, but you probably need a switch box for that to work. Every C64 came with the cable and switch box in the box but they are infrequently used today because the picture quality is the lowest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C64-to-S-Video adapters are available on eBay. You need a C64 monitor cable to plug into it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Converting composite or S-Video to VGA is more complicated but there are devices which can do it. There is a popular one called the GBS-8220, also available on eBay, that can convert composite/YUV and CGA/EGA/RGB to VGA.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2017-01-15T13:49:01.693" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2099" PostTypeId="2" ParentId="2095" CreationDate="2017-01-15T15:30:49.457" Score="38" Body="&lt;p&gt;The VIC-II chip inside the C64 computer outputs a S-Video signal, which is mixed and modulated into the matal box that contains the UHF modulator circuit. Earlier models made composite video available on the A/V DIN connector. Later models also made separate componentes (luminance and chrominance) available as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the sake of image quality, and as you say you want to use your C64 in a modern TV, it's better to forget about the UHF output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most modern TVs still have a composite video input (yellow, white and red RCA connectors at the back). If yours doesn't have it, it may have it in form of a TRRS output and you will need a cheap TRRS -&gt; RCA converter. Others have it embbeded into the SCART connector. Others share the composite video connector with the YPbPr (video component) connector (actually using the Y connector (green) for both luminance and composite video). So, your first and more succesful option would be to get a composite video signal and audio signal from the C64 A/V DIN connector and feed with it your TV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you find your TV supports S-Video (normally, a 4 pole mini-DIN connector) and your C64 is a later model that outputs S-Video, then you can try it as well, for a slighly better video output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So your first (and cheaper) options are first to find an A/V cable for your C64, such as this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gHxsp.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gHxsp.jpg&quot; alt=&quot;A/V cable&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or this one, if you can confirm your TV supports S-Video input and your C64 can output it as well. Note that this cable can also be used with older C64 computers / TVs which supports only composite video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OlRX9.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OlRX9.jpg&quot; alt=&quot;S-Video cable&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If (and only if) your target monitor doesn't accept either composite video or S-Video, then you can try a converter box. This one I bought some time ago can accept both composite and S-Video inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fLqjA.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fLqjA.jpg&quot; alt=&quot;Video converter box&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the device, once unboxed and connected to a composite video source and to a TFT VGA display:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Op542.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Op542.jpg&quot; alt=&quot;Converter unboxed&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how I see a C64 computer in my TFT monitor. Its monitor OSD shows me which VGA output resolution I'm using. Although it is using the composite output from the C64, I think it gives a very decent image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xp3nm.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xp3nm.jpg&quot; alt=&quot;Converter output&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several resolutions and refresh rates availables:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eDRtv.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eDRtv.jpg&quot; alt=&quot;Available resolution menu&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The converter brings its own OSD menu, from which we can adjust many parameters. This is just one of the sections:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7RUsY.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7RUsY.jpg&quot; alt=&quot;OSD&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This particular VGA converter box allows a VGA source too, so you can share your mnitor with your PC and your C64 without the tedious connector unpluging and pluging. Just pressing a button. You can even have a PIP (picture in picture) output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EIwQx.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EIwQx.jpg&quot; alt=&quot;PIP&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, you can go for a composite-to-HDMI, or S-Video-to-HDMI converter box, if you are willing to use a monitor/TV without VGA input. Amazon sells them with different prices and options. These HDMI converters usually convert the audio signal also, so you have a true HDMI audio/video signal. I have one such converter, but I haven't tried it yet with a C64.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-01-15T15:30:49.457" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2100" PostTypeId="2" ParentId="2095" CreationDate="2017-01-15T18:04:11.340" Score="4" Body="&lt;p&gt;I don't know what your budget is, but if you can afford it then consider a C128 and old RGBI-compatible monitor instead. It will still &quot;look cool&quot; and allow you to &quot;program with limitations&quot;.  You will gain a crisp 80-column display, ability to program for both the 6502 and z-80 CPUs, and a much better built-in BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, RGBi stands for Red, Green, Blue, intensity. It was a digital signal providing for 16 sharp colors, 4 bits for each pixel. They were black (no bits set), light grey (R+G+B bits set), red, green, blue, cyan (B+G), magenta (R+B), and yellow (G+R). Each of those base 8 colors had an enhanced intensity when the i-bit was set.  Among everything else, this turned light-grey to white, and black to dark-grey.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used my C128 with a Sears &lt;em&gt;Total Video System&lt;/em&gt;.  It combined a TV and monitor modes for monochrome, composite, and RGBI.  This was perfect for the C128 because the composite worked with C64 mode and the RGBI worked with the C128 modes. (Plus it was my TV.) Here is a &lt;a href=&quot;http://www.atarimagazines.com/compute/issue58/computer_video.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;1985 article&lt;/a&gt; which includes descriptions of the Sears TVS as well as other flexible monitors of the period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wish to avoid buying an old separate monitor/TV, see &lt;a href=&quot;https://sites.google.com/site/h2obsession/CBM/C128/rgbi-to-vga&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article&lt;/a&gt; for building an RGBI to VGA converter.  Sigh, it looks like your TV doesn't have VGA either. However, this should hook up to just about any computer monitor you happen to have.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-01-15T22:58:01.663" LastActivityDate="2017-01-15T22:58:01.663" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2102" PostTypeId="2" ParentId="152" CreationDate="2017-01-16T14:12:53.243" Score="3" Body="&lt;p&gt;They replaced the character generator ROM with a static RAM chip, and provided a path by which the CPU could read and write this RAM. A single 2K&amp;times;8 chip (which became available at about that time) would have held 256 different 7&amp;times;8 patterns. Fonts would have been loaded from mass storage.&lt;/p&gt;&#xA;" OwnerUserId="4183" LastActivityDate="2017-01-16T14:12:53.243" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2103" PostTypeId="1" AcceptedAnswerId="17530" CreationDate="2017-01-16T22:13:47.240" Score="16" ViewCount="1523" Body="&lt;p&gt;Historical price charts for RAM are quite readily available, e.g. in the mid-seventies a ballpark figure was a penny a byte. What was the price of ROM (assuming you were getting the chips produced in quantities at least a few thousand) in that time period? I imagine it was cheaper than RAM, but by how much? (Every Google search hit I find, assumes I'm misusing ROM to mean anything from flash memory to magnetic tapes, which is a weirdly rapid timescale for a term to decay.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-26T19:08:46.253" Title="Historical price of ROM" Tags="&lt;history&gt;&lt;rom&gt;&lt;memory&gt;" AnswerCount="4" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2104" PostTypeId="1" CreationDate="2017-01-17T02:40:12.077" Score="12" ViewCount="1615" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/FLOPS#Hardware_costs&quot; rel=&quot;nofollow noreferrer&quot;&gt;The relevant Wikipedia page&lt;/a&gt; has a large gap between 1961 and 1984, not allowing to estimate, even approximately, in what year the symbolic threshold of $1/FLOPS (or, as the wiki table puts it, $1bn/GFLOPS) was crossed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The threshold of $1/KFLOPS is interesting as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case the Soviet data points would be mostly useless because the prices of goods not sold outside of the Eastern bloc were in funny money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we attempt to accept funny money at a face value, a potential contender &amp;ndash; BESM-6 (1967) &amp;ndash; still doesn't do it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A figure of just below $1M was &lt;a href=&quot;https://groups.google.com/d/msg/besm6/GI5gwo6yCws/hfol5WT9AQAJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;alluded to&lt;/a&gt; (in Russian; computed as a multiple of a publicly quoted price of 600K rubles, and the official exchange rate of $1.56 per ruble; I also remember it reported regularly in Soviet newspapers as 0.64-0.66 rubles per dollar), but &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/3278/4025&quot;&gt;delivered&lt;/a&gt; at most 0.5 MFLOPS using the most generous definition.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-07-09T01:28:39.733" LastActivityDate="2018-08-31T03:00:01.137" Title="Historical cost of computing (when was $1/FLOPS crossed?)" Tags="&lt;history&gt;&lt;performance&gt;" AnswerCount="1" CommentCount="16" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2105" PostTypeId="1" AcceptedAnswerId="2106" CreationDate="2017-01-17T15:10:01.383" Score="18" ViewCount="3339" Body="&lt;p&gt;Some cartridges on older consoles (like on the SNES) had battery save in them, so you can turn off the console, come back some time later and continue where you left off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These use an actual battery that powers the RAM so it basically never turns off. But does that mean it can deplete over time? If so, how long can these last?&lt;/p&gt;&#xA;" OwnerUserId="762" LastEditorDisplayName="user12" LastEditDate="2017-01-17T16:41:28.440" LastActivityDate="2017-01-17T16:41:28.440" Title="Game cartridge save-game battery lifetime" Tags="&lt;snes&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2106" PostTypeId="2" ParentId="2105" CreationDate="2017-01-17T15:38:03.127" Score="21" Body="&lt;p&gt;Yes, they can deplete. More modern games (starting with the Nintendo 64, for instance) used EEPROM (similar to flash memory) so don't have this issue, but in the days of the SNES this was too expensive so battery-backed SRAM was used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How long the batteries last depends on the game. Pokemon Silver for example has a real-time clock, which takes a lot more power than SRAM alone, so all copies of it you'll find will either have already run out, or had the battery replaced at some point. On the other hand, games that just have SRAM might still be going strong today. But if your save game is important to you you definitely shouldn't rely on the battery lasting. Use one of the many methods available to back it up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After making a backup, the battery can then be safely replaced without risking data loss. Most of these batteries are soldered in place, unfortunately, so it's not always easy to change them; you can often solder in a battery holder to make future replacement easier, if there's enough space in the cartridge. Most of them are CR2032 or the very similar (and often interchangeable) CR2025.&lt;/p&gt;&#xA;" OwnerUserId="1931" LastEditorUserId="1931" LastEditDate="2017-01-17T15:46:22.780" LastActivityDate="2017-01-17T15:46:22.780" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2107" PostTypeId="1" CreationDate="2017-01-18T02:00:27.240" Score="13" ViewCount="390" Body="&lt;p&gt;What was the typical configuration — CPU, memory, disks (number and type), printers, terminals, OS, etc — for a university PDP-11 system in the mid-late 1970s? I'm more interested in the FORTRAN/BASIC engineering department numerical side than the computer science one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to get the feel of using one of these systems: how it was to create and run files, and what the limits of the system were. I realize that running under simh isn't exactly like handling a deck of punch cards or loading tapes, but at least it will show me what the commands were.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-01-18T10:35:21.903" Title="Typical academic PDP-11 configuration for emulation" Tags="&lt;pdp-11&gt;&lt;simh&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2108" PostTypeId="1" AcceptedAnswerId="2109" CreationDate="2017-01-18T04:20:53.537" Score="10" ViewCount="997" Body="&lt;p&gt;I have an old Apple //e clone, bought in Brazil (but assembled who-knows-where-on-Earth) that has not been touched for over 15 years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least, from what I could see, it is a //e -- but not enhanced, since it has lowercase characters, but came with 48k RAM (is that correct?). When booting, instead of &quot;APPLE ][&quot;, &quot;APPLE //e&quot; or any clone brand name, it prints &quot;COMPUTER&quot; on the screen (now &lt;em&gt;that&lt;/em&gt; is an informative message!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it was working, I remember the character generator had some problem (some characters displayed kind of weird on screen, with some pixels missing sometimes, but not always). So I was wondering if I can dump its content, maybe debug and fix it, and put a new EPROM in its place. But I don't know what kind of EPROM it is -- there is no useful information on it, and all I can see is that it's a 24-pin chip, with the round hole in the middle for recording. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What IC could I use to replace that one? And what kind of gear do I need to dump the old one's contents and write the new one? Would a MiniPRO TL866CS, for example, do the job? (it's easier for me to get a MiniPRO than any other EPROM recorder)&lt;/p&gt;&#xA;" OwnerUserId="529" LastActivityDate="2017-01-24T21:38:48.767" Title="What kind of EPROM was used for the Apple //e character generator, and how do I write a new one?" Tags="&lt;apple-ii&gt;&lt;rom&gt;&lt;chip&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2109" PostTypeId="2" ParentId="2108" CreationDate="2017-01-18T05:22:25.343" Score="12" Body="&lt;p&gt;The standard US Apple //e Video ROM was pin compatible with 2732 (4k) EPROMs, but some foreign models (&lt;a href=&quot;http://reactivemicro.com/wiki/Apple_IIe_Enhancement_Kit&quot; rel=&quot;nofollow noreferrer&quot;&gt;UK, German, French, Italian&lt;/a&gt;) used a 2764 (8k) compatible ROM with two character sets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your clone might be the same or it might be different - the best way is to try to decode the pinout using either a logic probe (while on) or even a multimeter (while off) to trace the voltages and signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case the larger question of how to read and write EPROMs is better covered in discussion forums or blog posts such as &lt;a href=&quot;http://www.classic-computers.org.nz/blog/2012-10-21-eproms.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this fairly comprehensive one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless it's been improved recently the MiniPRO TL866CS might need a work-around to use 25V instead of 21V to program a 2732 (see the circuit below), or at least a &lt;a href=&quot;http://www.insentricity.com/a.cl/196/its-not-stupid-its-enhanced&quot; rel=&quot;nofollow noreferrer&quot;&gt;tolerant 2732 that accepts 21V&lt;/a&gt;. &lt;a href=&quot;https://pinside.com/pinball/forum/topic/minipro-tl866-eprom-programmer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's another site&lt;/a&gt; that discusses various aspects of programming old EPROMs with the TL866.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3242p.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3242pm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Technical Trivia&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you ask about the &quot;Apple //e character generator&quot;, perhaps I should point out that unlike earlier Apple II video ROMs, the //e Video ROM actually contains all the possible bit patterns that are output by the video hardware, including LORES and HIRES patterns. Your clone might not be the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TEXT patterns are stored in the first half of a 4k ROM ($000-7FF) and in the first and third quarters of an 8k ROM. The patterns are in reverse bit order and inverted. For more technical details see page 8-40 in &lt;a href=&quot;https://archive.org/details/Understanding_the_Apple_IIe&quot; rel=&quot;nofollow noreferrer&quot;&gt;James Sather's Understanding the Apple IIe&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2017-01-24T21:38:48.767" LastActivityDate="2017-01-24T21:38:48.767" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="2110" PostTypeId="2" ParentId="2107" CreationDate="2017-01-18T10:35:21.903" Score="4" Body="&lt;p&gt;I've used several PDP-11's in a university environment (in the appropriate time period). The engineering ones were usually a bit smaller than the Computer Science ones, as they often controlled equipment rather than ran numerical work. Numerical work would have been done on larger mainframes. For example, I've seen machines controlling X-ray microscopes and such like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A typical university PDP-11 of the era is shown in this lovely sequence of videos from DePauw University: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/XV-7J5y1TQc&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/XV-7J5y1TQc&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully that would give you some idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machines would have run RSX from DEC at that period. Only later machines used unix. There would have been much assembler programming, some basic some Fortran.&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2017-01-18T10:35:21.903" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2111" PostTypeId="1" AcceptedAnswerId="6639" CreationDate="2017-01-18T17:41:28.990" Score="16" ViewCount="538" Body="&lt;p&gt;I am the original owner of my Amiga 3000.  As I remember it, I purchased the machine fairly early after release.  I'm cleaning and detailing the machine, and I took a quick picture of the serial number sticker on the mainboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/S62RF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S62RF.jpg&quot; alt=&quot;Image of sticker&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously this indicates the board is an A3000, serial number 7779.  But I'm not sure what the N signifies, and assuming they started at the number 1, I would have to guess this was the 7,779th machine built or assembled. Further, I would infer the 4/90 (with 91 scratched out) is a production, inspection, or ship date.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone tell me what the HKC or WW markings refer to?  Or offer any other interesting information (manufacturing location, etc) that could be determined from this serial number?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did some googling but my google-fu is apparently weak.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As always, all responses are much appreciated!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE 10/28/2018&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have recently had an opportunity to look more closely at my A3000 mainboard.  I also did a review of some excellent images found on www.bigbookofamigahardware.com and am convinced the answer by Brian H below is spot on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After looking at the images I was able to find online that were clear enough to read, I located a REV 6.1 board from WW 3 (I think, it was difficult to read) with a SN of 00101, and a REV 7.2 board from WW 21 (again, difficult to read) with a SN of 00804, and a REV 8.9 board (nothing written on the WW sticker) with a SN of 02845.  My board is a REV 9/01 (from the silkscreen) from WW 41 with a SN of 07779 (shown above).  This &lt;em&gt;seems&lt;/em&gt; to indicate the SN are simple counters going upward over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be interesting to collect the Rev, SN and WW from other owners to form a more concrete conclusion. &lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="2080" LastEditDate="2018-10-28T16:52:27.850" LastActivityDate="2018-10-28T16:52:27.850" Title="Seeking details relating to Amiga 3000 serial numbers" Tags="&lt;amiga&gt;&lt;amiga-3000&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2112" PostTypeId="1" AcceptedAnswerId="2115" CreationDate="2017-01-18T18:07:43.033" Score="15" ViewCount="1046" Body="&lt;p&gt;I know the interwebs are full of information relating to the replacement of batteries for various computers, and the Amiga's are no different.  But before I do anything rash, I wanted to ask for some input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My A3000 still has the original clock battery on the mainboard, and obviously this needs to be removed and replaced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qdYug.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qdYug.jpg&quot; alt=&quot;Corroded battery&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought I was going to replace this with a CR-2032 watch battery socket so I would be able to replace the battery when necessary.  This &lt;a href=&quot;http://www.ebay.com/itm/COIN-LITHIUM-BATTERY-BACKUP-for-AMIGA-4000-3000-2000-/272459712749?hash=item3f6fdd48ed:m:mZGXfLHkGJbHcWX1xPU50mA&quot; rel=&quot;nofollow noreferrer&quot;&gt;easy ebay solution&lt;/a&gt; looked promising...  However I noticed the original component is clearly labeled 3.6v and 60mAh (milli-ampere-hours).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A CR2032 is rated at 3v but should last ~200mAh.  Is the CR2032 a good replacement choice, or will the lower voltage cause any unexpected weirdness?  And what kind of battery-life can I expect?  I've got some 486SX/25 mobo's from forever-ago and I swear the CR2032's are &lt;em&gt;still&lt;/em&gt; working...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, and perhaps most importantly I was a little freaked out when I read this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A special note for A3000 users: The RTC has a small amount of memory&#xA;  also backed up by the battery which is used to store settings for the&#xA;  motherboard SCSI controller. After replacing the clock battery, you&#xA;  will need to use SetBatt-1.2 from Aminet.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Usage: SetBatt A&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This clears the &quot;amnesia&quot; bit. The SCSI controller settings may also&#xA;  have been lost due to the power interruption to the RTC and may need&#xA;  to be altered depending on your SCSI devices.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;taken from &lt;a href=&quot;http://www.amiga.serveftp.net/battery.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My concern stems from the fact that my A3000 has the original beta Kickstart 1.4 ROM which it uses to boot the actual Kickstart image from the SCSI hard drive (Kickstart.rom).  The absolute last thing I want to do is disconnect the on-board battery for a few days and loose something vital to my ability to boot off the SCSI drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone offer any further details?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As always, all input is greatly appreciated!&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Addendum&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After reading the excellent responses below, I took the time to re-assemble my Amiga and downloaded SCSIPref from Aminet so I could double check my current settings.  As expected, all values were defaults.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also took the time to put together a few 'rescue' disks with things like SCSIPref, JRComm, and other essentials (SuperKickstart 1.3/3.1) just in case I have to do anything weird after replacing the battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I took some voltage readings off the battery while the charging circuit was both powered and unpowered to (attempt) to properly size a Schottky diode for reverse current protection.  I'm going to solder the CR2032 holder right to the motherboard. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks again for the help! &lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="276" LastEditDate="2017-12-14T10:38:45.967" LastActivityDate="2017-12-14T20:03:43.640" Title="Appropriate battery replacement for my A3000" Tags="&lt;amiga&gt;&lt;battery&gt;&lt;amiga-3000&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2114" PostTypeId="2" ParentId="2112" CreationDate="2017-01-19T07:54:36.137" Score="7" Body="&lt;p&gt;On &lt;em&gt;all&lt;/em&gt; my retro computers, I tend to replace the on-board batteries with cables and a double AA battery holder like &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B003YD8NPO&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; that I can store off-PCB (typically, I fix it somewhere within the computer using double-sided tape) to make sure leaking batteries can never again damage the PCB. Normal AAs by far won't last as long as the original or Li-Ion batteries, but I don't care. In case the original used a rechargeable battery, I put some NiCad batteries in the holder. (You could, however, do the same with longer-lasting lithium batteries in case you find a suitable holder). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of my computers tend to stay on the shelves for a rather long time, and I really don't fancy having to check the batteries regularly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With regards to NVRAM content: It really doesn't hurt to have a backup of it or at least noted somewhere in the computer what configuration needs to go in there and a matching procedure.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-01-20T08:37:19.280" LastActivityDate="2017-01-20T08:37:19.280" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2115" PostTypeId="2" ParentId="2112" CreationDate="2017-01-19T17:26:49.577" Score="8" Body="&lt;p&gt;Don't wait, just clip it. Come back when you're done. You look dangerously close to getting the goop on the motherboard which is effectively malignant cancer for electronics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now that you've clipped the battery, you need to decide on what replacement you want to use. Unfortunately, the Amigas originally came with NiCd batteries which despite being prone to a bunch of issues they also have different charging requirements than (say) LiOn. Because of this, you can't just solder in any old battery since bad things could happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, you can use any battery you want (to provide between 3 - 3.6V) as long as you disable the charging circuit. Typically you would do this by connecting a diode inline to the battery which allows the battery to discharge into the motherboard but prevents the motherboard from charging into the battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a page here that seems to do a good job explaining things: &lt;a href=&quot;http://members.iinet.net.au/~davem2/overclock/batt.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://members.iinet.net.au/~davem2/overclock/batt.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="2081" LastEditDate="2017-01-24T17:15:35.800" LastActivityDate="2017-01-24T17:15:35.800" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2116" PostTypeId="1" CreationDate="2017-01-20T21:17:43.510" Score="5" ViewCount="149" Body="&lt;p&gt;Can an Amiga 2000 (or even A500) be made to easily work with modern 1.44 MB drives?  Meaning, is it just a matter of pin mappings or are the drives just too incompatible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize there are other solutions like GoTek but I'm interested in using real floppies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-01-20T21:17:43.510" Title="Can a modern 1.44MB floppy drive work with an Amiga 2000?" Tags="&lt;amiga&gt;&lt;floppy-disk&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2017-01-21T11:55:52.813" ContentLicense="CC BY-SA 3.0" />
  <row Id="2117" PostTypeId="1" CreationDate="2017-01-21T13:31:41.990" Score="51" ViewCount="10873" Body="&lt;p&gt;I am interested to know if any computers that are on-topic for this site had more than one CPU, where this plurality could be leveraged by a programmer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some cases I don't so much care about:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Amigas could add a faster processor, but doing so disabled the onboard CPU so that we couldn't multitask on an Amiga.&lt;/li&gt;&#xA;&lt;li&gt;The C128 had both a 6510 and a Z80, but these could not be run at the the same time, so a programmer had to pick one to use and leave the other.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Did any early home computers have several CPUs so that a programmer could use both?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="278" LastEditDate="2017-01-24T21:30:54.703" LastActivityDate="2018-04-13T16:21:07.580" Title="What early home computers have more than one CPU, where both could be used by the programmer?" Tags="&lt;history&gt;" AnswerCount="12" CommentCount="24" FavoriteCount="7" ClosedDate="2017-01-27T19:25:04.267" ContentLicense="CC BY-SA 3.0" />
  <row Id="2118" PostTypeId="2" ParentId="2112" CreationDate="2017-01-21T14:56:31.257" Score="2" Body="&lt;p&gt;Even if the battery powered memory loses its contents, you don't really risk losing the ability to boot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The settings that are stored in the memory for the on-board SCSI controller are all performance-related, if the battery data is lost they would all revert to their defaults, that are (appropriately) the more conservative choice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only non-performance setting is the SCSI id for the controller, which would reset to 7, that has always been the Amiga convention (and there were no reason to change that if memory serves).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I actually don't remember ever reading back in the days that the loss of the battery contents prevented ever anyone from booting from the HD...&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2017-01-21T14:56:31.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2119" PostTypeId="2" ParentId="1962" CreationDate="2017-01-21T15:16:39.160" Score="1" Body="&lt;p&gt;This is going to be hard to answer with any substantial evidence. Ideally, we'd like a hardware geek with a sharp eye to pick out hints from tear-down or upgrade videos found in the usual places.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, we do know that the original Game and Watch design was guided by the &lt;a href=&quot;https://medium.com/@adamagb/nintendo-s-little-known-product-philosophy-lateral-thinking-with-withered-technology-bac7257d8f4&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lateral Thinking of Withered Technology philosophy&lt;/a&gt;. By design, the whole platform depended on the most mature, dependable, and economical hardware available at the time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to Nintendo lore, this meant eschewing newer LCD tech that was faster, clearer and used less energy in favour of whatever the big standard LCD devices of the day used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm actually not sure what that specific mature LCD tech would be called then or today, but that is certainly what was used for the Game and Watch platform. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But given the design constraints and the era, it was  &lt;em&gt;probably&lt;/em&gt; some sort of TN or active matrix.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorDisplayName="user12" LastEditDate="2017-01-21T17:59:50.183" LastActivityDate="2017-01-21T17:59:50.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2120" PostTypeId="2" ParentId="2117" CreationDate="2017-01-21T16:45:03.223" Score="11" Body="&lt;p&gt;The Soviet PDP-11-compatible educational desktop computer &lt;a href=&quot;https://en.wikipedia.org/wiki/UKNC&quot;&gt;UKNC&lt;/a&gt;, released in 1987, for example.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One unique part of the design is the usage of a peripheral processing unit (PPU). PPU unloaded the CPU, taking responsibility for the management of peripheral devices (display, audio and so on), but could run any user programs, as well as CPU.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-01-21T16:45:03.223" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2121" PostTypeId="2" ParentId="2117" CreationDate="2017-01-21T16:46:50.500" Score="17" Body="&lt;p&gt;The spectacularly rare &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_Transputer_Workstation&quot; title=&quot;Atari Transputer Workstation&quot;&gt;Atari Transputer Workstation&lt;/a&gt; from 1989 supported up to 13 parallel processing Transputer CPUs. Multiple processors communicated with one another, and allowed sharing of suitable processing tasks. Other computer manufacturers considered Transputers at the time; I know of one card developed for Macintosh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Around the same time, linear processing array cards such as the NEC &lt;a href=&quot;https://www.okqubit.net/imap/&quot; title=&quot;IMAP-VISION&quot;&gt;IMAP-VISION&lt;/a&gt; used multiple DSP-like cores to speed up tasks like edge detection in video streams. While this was not a general-purpose CPU, it did offload a large amount of computation that the CPUs of the time couldn't handle. Going too far down this route would allow maths coprocessors and DMA IO controllers to be considered as second processors, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure I'd consider the BBC Micro's &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_Micro_expansion_unit&quot; title=&quot;expansion unit&quot;&gt;expansion unit&lt;/a&gt; as a true second processor, even if there were then-powerful CPUs such as NS 320xx and ARM 1 that used it. A little like the C128 and the CP/M card for Apple II, the expansion unit relegated the main processor to simple IO tasks. &lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-01-21T16:46:50.500" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2122" PostTypeId="2" ParentId="2117" CreationDate="2017-01-21T17:17:22.610" Score="5" Body="&lt;p&gt;The Atari Falcon had both a 68030 CPU and a 56001 DSP that could work and be programmed independently of each other. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you count FPUs as some sort of &quot;CPU&quot;: you could add an optional 68882, so it even had 3 powerful chips.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2017-01-21T17:17:22.610" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2124" PostTypeId="2" ParentId="2117" CreationDate="2017-01-21T18:35:47.567" Score="30" Body="&lt;p&gt;The BBC micro family (6502 processor) had a &lt;a href=&quot;https://en.wikipedia.org/wiki/Tube_(BBC_Micro)&quot;&gt;tube interface&lt;/a&gt; which permitted Z80, 6502, or &lt;a href=&quot;http://www.cowsarenotpurple.co.uk/bbccomputer/master512/tube.html&quot;&gt;80186 coprocessors&lt;/a&gt; (possibly others). See e.g. &lt;a href=&quot;http://www.beebmaster.co.uk/SecondProcessors.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each of these consists of a 'cheese wedge' with a board in with its own CPU and RAM. Both processors thus can run simultaneously (though that wasn't the normal intention which is why some of the links describe the coprocessor as &lt;em&gt;'running the user's program'&lt;/em&gt;), and indeed do when e.g. accessing disks etc.&lt;/p&gt;&#xA;" OwnerUserId="4292" LastEditorUserId="4292" LastEditDate="2017-01-22T18:00:44.910" LastActivityDate="2017-01-22T18:00:44.910" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2125" PostTypeId="2" ParentId="2117" CreationDate="2017-01-21T19:35:29.870" Score="11" Body="&lt;p&gt;The Commodore Super-PET had both a 6809 and a 6502. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6809 was used to access the Waterloo programming environment with an editor and compilers for several languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 accessed a non-standard variant of the PET.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both sides had access to 64K of additional RAM. A toggle switch on the side of the unit selected which processor was active.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastActivityDate="2017-01-21T19:35:29.870" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2126" PostTypeId="2" ParentId="2117" CreationDate="2017-01-21T23:06:37.437" Score="7" Body="&lt;p&gt;The DEC Rainbow had two processors, one for 8 bit programs and the other for 16 bit programs.  I have one of these in my basement, and I think it still works!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Rainbow_100&quot;&gt;https://en.m.wikipedia.org/wiki/Rainbow_100&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2017-01-21T23:06:37.437" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2128" PostTypeId="2" ParentId="2117" CreationDate="2017-01-22T00:13:11.843" Score="30" Body="&lt;h2&gt;User-programmable computers&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The Commodore 64 has two 6502-family CPUs. There's a 6510 on the main logic board, and there's another CPU in the 1541 disk drive. The KERNAL on the host treated the 1541 as what is now called network attached storage (NAS), sending file access commands to CBM DOS in the 1541's ROM. Because the transfer protocol in CBM DOS was so slow, many C64 users sent a &lt;a href=&quot;https://en.wikipedia.org/wiki/Fast_loader&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;fast loader&quot; patch&lt;/a&gt; to the 1541's RAM in order to make data transfer faster. The demoscene eventually figured out how to &lt;a href=&quot;https://ilesj.wordpress.com/2014/05/14/1541-why-so-complicated/&quot; rel=&quot;nofollow noreferrer&quot;&gt;run an interrupt-driven custom DOS in the background&lt;/a&gt; to stream data off the disk while animation continued on the host.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Fourth-generation game consoles&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The Super Nintendo Entertainment System (called Super Famicom in East Asia) has two 6502-family CPUs. One is a second-source 3.6 MHz 65816 core licensed from WDC, combined with a DMA controller in the 5A22. The other is a 1 MHz Sony SPC700, which behaves as a 65C02 with reshuffled opcode numbers. Games run game logic on the 65816 and the sound engine on the SPC700. Some Game Paks include a third processor: either an NEC uPD77C25 DSP, a Capcom CX4 (Hitachi HG51B169) DSP, an Argonaut Super FX Graphics Support Unit (GSU), an SA1 (a 10.5 MHz 65816-based coprocessor), or even the entire Game Boy system-on-chip. (Source: &lt;a href=&quot;https://problemkaputt.de/fullsnes.htm#snescartridges&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;SNES Cartridges&quot; in Fullsnes&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Sega Mega Drive (called Genesis in North America) and Neo Geo AES have a similar setup, with a 68000 to run the game and a Z80 to run audio. The Sega CD and 32X peripherals add additional CPUs, and the game &lt;em&gt;Virtua Racing&lt;/em&gt; contains an additional &quot;SVP&quot; CPU, analogous to the GSU.&lt;/p&gt;&#xA;" OwnerUserId="586" LastEditorUserId="586" LastEditDate="2018-04-13T16:21:07.580" LastActivityDate="2018-04-13T16:21:07.580" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="2129" PostTypeId="2" ParentId="2117" CreationDate="2017-01-22T05:08:14.170" Score="6" Body="&lt;p&gt;Some not so vintage, but still 90's computers:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Apple PowerMac 6100/66 with a DOS card. It was either a 486 or Pentium CPU with 8 MB of RAM. You could switch between Macintosh &amp;amp; Windows by hitting &lt;kbd&gt;Cmd&lt;/kbd&gt;+&lt;kbd&gt;Return&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Apple Macintosh LC III with an Apple IIe card. The IIe expansion card provided a 65C02 CPU and 256KB of RAM, just like a real Apple IIe. You could open a program to boot into ProDOS and even hook up 5.25&quot; floppy drives&lt;/li&gt;&#xA;&lt;li&gt;Lots of add on cards to Macs (Sonnet, Newer Tech) that plugged into a slot. You would load an extension at boot and offload the heavy lifting to that CPU instead of on the mainboard.&lt;/li&gt;&#xA;&lt;li&gt;The Apple Power Macintosh 9500/180MP, based on the Tsunami architecture, featured dual 180 MHz PowerPC 604e processors, 16 MB or 32 MB of RAM, a 2.0 GB hard drive, an 8X CD-ROM drive, and a 2 MB ATI video card in a very expandable tower case design with twelve RAM slots and six PCI slots.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4296" LastEditorUserId="2037" LastEditDate="2017-01-22T09:07:32.083" LastActivityDate="2017-01-22T09:07:32.083" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2130" PostTypeId="2" ParentId="2117" CreationDate="2017-01-22T10:36:53.157" Score="2" Body="&lt;p&gt;The NeXT computer (1988) had a second CPU, a Motorola 56001.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were a number of Macintosh models with the 'AV' suffix that sported&#xA;a Motorola 56000 digital signal processing second processor.  Some that&#xA;I recall were Quadra 660AV, Power Macintosh 6100/60AV, 7100/66AV, 8100/100AV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These may have been used for sound processing, but aside from minor&#xA;applications (software 56k modem, using the Geoport as phoneline interface)&#xA;they didn't get a lot of interest. &lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2017-01-22T10:36:53.157" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2131" PostTypeId="1" AcceptedAnswerId="2132" CreationDate="2017-01-22T21:42:53.367" Score="3" ViewCount="821" Body="&lt;p&gt;I'm fixing up a Gateway 2000 4DX-33 which came with a Fujitsu hard drive. The CMOS battery was dead after over 20 years without use, and needed to be replaced. This meant that all BIOS settings were reset. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I need to setup the hard drive, but the PhoenixBIOS does not have a hard drive type that specifies the right number of cylinders, size, heads, and sectors for the hard drive that came with the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the battery died and reset the system, could this have reverted the BIOS to an earlier version that did not support the hard drive? How can I get the bios to detect the hard drive (as it once did)?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Hard drive: Fujitsu M1636TAU, 1.28 GB, 2490 cyl, 16 heads, 63 sectors.&#xA;BIOS: PhoenixBIOS A486 1.00.06.AC0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="473" LastActivityDate="2017-01-23T17:23:08.760" Title="Installing hdd on PhoenixBIOS A486 on Gateway 2000 4DX-33" Tags="&lt;repair&gt;&lt;hard-disk&gt;&lt;ibm-pc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2132" PostTypeId="2" ParentId="2131" CreationDate="2017-01-22T23:02:37.467" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;When the battery died and reset the system, could this have reverted the&#xA;  BIOS to an earlier version that did not support the hard drive?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. BIOS is a motherboard firmware program which is usually written to a ROM, PROM, EPROM or EEPROM. It does not a working battery to maintain the information stored in this fixed memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It does store volatile information in a place which needs power. But the actual BIOS program is &lt;strong&gt;not&lt;/strong&gt; changed when the battery runs out. Only its settings are lost.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How can I get the BIOS to detect the hard drive (as it once did)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Assuming the drive still works (e.g. no oils inside it which have turned into thick sludge), then all you should need to do is to power up the computer, press the relevant hotkey to inter the BIOS setup (usually &lt;kbd&gt;ESC&lt;/KBD&gt; or &lt;kbd&gt;DEL&lt;/KBD&gt; and enter the correct values.  For ancient drives (say 40MiB) you manually entered the relevant values (using drive type 47) or selected one of the predefined drive types. For anything over 200MiB the system usually could auto detect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And with the huge (1.28GB) drive you mentioned auto detect is almost a certain fact. Go to the firmware (BIOS), make sure that you have the IDE controller enabled (boards from that age usually had two IDE controllers for up to 4 drives), page up and down until you find auto detect and things should just work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it does not, then check if the drive spins up. If not check power. &#xA;Also make sure that you have the proper master slave settings, briefly:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For one drive, set to single.&lt;/li&gt;&#xA;&lt;li&gt;For two drives set one drive to master, the other to slave.&lt;BR&gt;(Note that for some drives Master &amp;amp; single settings are identical.)&lt;/li&gt;&#xA;&lt;li&gt;If you have a cable select cable then set the drive to cable select. This will turn the drive at the end of the cable into the master and a drive in the middle of the cable to slave.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Potential problems here:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you had two drives and removed one, leaving master/slave in a wrong state.&lt;/li&gt;&#xA;&lt;li&gt;If you move the drive to the middle of the cable on a CS cable.&lt;/li&gt;&#xA;&lt;li&gt;And as previously stated, check that the drive still spins up. 20 years is a long time. It might very well either not spin or not be able to move its heads.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;HR&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: given the questions in the comments and the lack of markup them I am adding this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early PCs (80286 era, about 1983) had some preprogrammed information for a number of harddisks.  In the BIOS you could set a disk to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&quot;not installed&quot; (aka type 0), &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;or to one to the predefined ones. As shown below&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;Write     Landing&lt;/code&gt;&lt;br&gt;&#xA;&lt;code&gt;Type Cyls Hds precomp   Zone      Capacity&lt;/code&gt;&lt;br&gt;&#xA;&lt;code&gt;&lt;/code&gt;&lt;br&gt;&#xA;&lt;code&gt;1    306   4  128       305         10M&lt;/code&gt;&lt;br&gt;&#xA;&lt;code&gt;2    615   4  300       615         21M&lt;/code&gt;&lt;br&gt;&#xA;&lt;code&gt;3    615   6  300       615         32M&lt;/code&gt;&lt;br&gt;&#xA;...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Or to type 47: User inputted values&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In addition to these types more modern computers (starting circa 80486 era) also had options called &quot;auto&quot; (for autodect) and LBA.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;BR&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for user input: Often a BIOS would limit the number which you could enter, even though the IDE standard supported bigger nummber. E.g. many motherboards had a BIOS which only allowed you to enter up to 16 heads.  Since the size of a drive was defined by #heads * #tracks * #sectors_per_track this limited the maximum supported drive size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are curious you can read more on that &lt;a href=&quot;http://www.tldp.org/HOWTO/Large-Disk-HOWTO-4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, &lt;a href=&quot;http://www.drivesolutions.com/info/aboutbios.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;here2&lt;/a&gt; or Google for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that you computer may not have worked with a drive larger than 504MiB (16 heads, 1024 tracks, 63 sectors/track). At the time there were three ways to work around that:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Buy an IDE card with its own firmware (or buy a more modern motherboard).&lt;/li&gt;&#xA;&lt;li&gt;Use a small drive to boot from and let the OS discover the large drive after booting.&lt;/li&gt;&#xA;&lt;li&gt;Or install a custom overlay and let the disk appear differently, rewriting values as needed. Given the comment about an overlay I suspect that this is the case&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4307" LastEditorUserId="4307" LastEditDate="2017-01-23T17:23:08.760" LastActivityDate="2017-01-23T17:23:08.760" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2133" PostTypeId="5" CreationDate="2017-01-23T11:17:07.143" Score="0" Body="&lt;p&gt;The Amiga 3000 was a Motorola 68030-based computer manufactured by Commodore Business Machines from 1990 to 1992.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-01-23T11:17:07.143" LastActivityDate="2017-01-23T11:17:07.143" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2134" PostTypeId="4" CreationDate="2017-01-23T11:17:07.143" Score="0" Body="For questions related to the Commodore Amiga 3000." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-01-23T11:17:07.143" LastActivityDate="2017-01-23T11:17:07.143" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2135" PostTypeId="2" ParentId="2117" CreationDate="2017-01-23T18:00:44.000" Score="8" Body="&lt;p&gt;One more for the Amiga. If you had a bridgeboard installed (a PC-on-a-card), you could theoretically leverage an x86 processor to work alongside the 680x0. Out of the box, you more-or-less saw this straight from Commodore:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Janus's AREAD and AWRITE commands were normally used to copy files across the PC/Amiga divide. Though fixed function, it did run code on both sides to achieve this.&lt;/li&gt;&#xA;&lt;li&gt;If you didn't have a VGA card installed in one of the ISA slots, the Amiga would emulate a MDA/CGA display adapter in the 680x0 environment.&lt;/li&gt;&#xA;&lt;li&gt;If you didn't have a hard drive installed in an ISA slot, you could have a hardfile or partition daemon running in 680x0-land to provide a hard drive to the PC.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;How it did this is that there was 64KB of dual-ported RAM available to both the PC and Amiga. Documentation for how this worked was available at the time and thus I can recall at least one example where someone took advantage of this; drive a cheap ISA PC NE2000 network interface for use by the Amiga. At the time, network adapters for the Amiga were expensive so this was a cheap way of getting Ethernet on the Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So theoretically one could write a daemon of some sort on the PC side and control it from the Amiga; send a rendering file, do some automated activity, do some processing in the background, whatever. There was a mention on the newsgroups back in the day that someone was looking to build something like this but I don't recall ever seeing the result. I personally did a few experiments back in the day but never went anywhere with it.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2017-01-23T18:00:44.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2136" PostTypeId="2" ParentId="2117" CreationDate="2017-01-24T00:06:08.793" Score="1" Body="&lt;p&gt;Ohio Scientific offered a switchable 3 CPU system in 1978, the Challenger-3 (6502, 6800, and Z80). I remember reading the description, or perhaps an advert, in a back issue of Byte(?) magazine and wondering if any of them was ever put into useful service.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On some versions, the CPU could be switched under software control, though it seems like the CPUs could not be enabled simultaneously, since the busses were shared. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;More here: &lt;a href=&quot;http://www.technology.niagarac.on.ca/people/mcsele/OhioScientific.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.technology.niagarac.on.ca/people/mcsele/OhioScientific.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4150" LastEditorUserId="4150" LastEditDate="2017-01-24T00:16:43.883" LastActivityDate="2017-01-24T00:16:43.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2137" PostTypeId="2" ParentId="1" CreationDate="2017-01-24T02:02:10.090" Score="4" Body="&lt;p&gt;The program was MAC HACK VI.  This link doesn't give access to the program, but it may give you some leads about where to find it.  It was a chess playing program, and a good one for its time frame.  &lt;a href=&quot;https://chessprogramming.wikispaces.com/Mac+Hack&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://chessprogramming.wikispaces.com/Mac+Hack&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, here's a link to pdp- TECO.  The best text editor around in 1965.  This link does have a Download button, which I have not tried.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://dspace.mit.edu/handle/1721.1/5917&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://dspace.mit.edu/handle/1721.1/5917&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also want SHRDLU, &#xA; a language understanding prgram written by Terry Winograd. You can get it here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://hci.stanford.edu/winograd/shrdlu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://hci.stanford.edu/winograd/shrdlu/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trouble is,  you'll also have to get MacLisp in order to run it. &lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2017-01-24T02:20:10.327" LastActivityDate="2017-01-24T02:20:10.327" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2138" PostTypeId="1" AcceptedAnswerId="2140" CreationDate="2017-01-24T04:39:44.090" Score="10" ViewCount="1083" Body="&lt;p&gt;From &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_Micro&quot;&gt;https://en.wikipedia.org/wiki/BBC_Micro&lt;/a&gt; &quot;the height of the graphics display was reduced to 200 scan lines to suit NTSC TVs&quot;. But NTSC is supposed to have 241 visible scan lines per half frame. Why wouldn't you want to make the graphics display vertical resolution 240 instead of 200?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-10-28T04:29:43.540" Title="NTSC scan lines and vertical resolution" Tags="&lt;graphics&gt;&lt;ntsc&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2139" PostTypeId="2" ParentId="1962" CreationDate="2017-01-24T06:55:42.450" Score="2" Body="&lt;p&gt;Your assumptions are reasonable, TN is most likely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DSM appears never to have been mainstream. TN LCDs provided better visual quality at lower power and took over pretty much as soon as they were on the market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;STN's advantage over TN is in LCD matrices — that is, big arrays of pixels like a laptop screen where individual wires for each pixel would be impractical. STN's sharper voltage-response curve makes it less prone to smearing/ghosting effects when wired up in a row/column matrix. But the Game &amp;amp; Watch didn't need a matrix, it used discrete LCD segments. So there was no need for the more advanced STN technology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any kind of actve-matrix tech (TFT et cetera) is similarly ruled out as unnecessary and expensive. When there's no matrix at all, the advantages of active over passive matrix don't come into play.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2017-01-24T06:55:42.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2140" PostTypeId="2" ParentId="2138" CreationDate="2017-01-24T07:38:37.643" Score="10" Body="&lt;p&gt;While nominally 241 scan lines were visible in the sense they contained video information, all TV sets hid a varying amount of scan lines on top and bottom (and left and right) by &lt;a href=&quot;https://en.wikipedia.org/wiki/Overscan&quot;&gt;overscan&lt;/a&gt; and by the bezel in front of the screen. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So with a vertical resolution of 240, on most TV sets parts at the top and bottom would not be seen. While this doesn't matter much for movies, it's not a good thing if you want to do text editing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is also the reason while basically all homecomputers and game consoles had some sort of border (which often could be colored) around the center part of the image that carried information: It was to make sure this central part would be visible on all TV sets.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-01-24T07:38:37.643" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2141" PostTypeId="1" AcceptedAnswerId="2142" CreationDate="2017-01-24T08:53:01.813" Score="10" ViewCount="507" Body="&lt;p&gt;It is said that the S-100 bus provided a standard hardware format for expansion cards across many models of computers, including ones using different system software and even different CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having plugged in an expansion card, how does the computer know what to do with it? Today's computer industry has settled on device drivers as the answer to that question, but today's computers have only a handful of operating systems to write device drivers for, hard disks to install them on, and spare memory to load them into, all of which would seem to be necessities. How did they handle it in the S-100 days?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10260" LastEditDate="2020-11-15T01:25:06.207" LastActivityDate="2020-11-15T01:25:06.207" Title="S-100 bus and device drivers" Tags="&lt;history&gt;&lt;hardware&gt;&lt;driver&gt;&lt;s-100&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2142" PostTypeId="2" ParentId="2141" CreationDate="2017-01-24T09:12:50.110" Score="12" Body="&lt;p&gt;Like most busses of its time, you had to write your own software to communicate between the cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term &lt;em&gt;device driver&lt;/em&gt; wasn't widespread at the time, but that is what you were writing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The S-100 bus (IEEE696), with its standard 100-pin socket could support a number of different cards.  While it was common to have a processor card, memory card and assorted I/O controller cards, it was possible to have co-existing processor cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bus protocol is still available on the web, e.g. &lt;a href=&quot;http://www.imsai8080.com/computers/s100/ieee696spec.pdf&quot;&gt;here&lt;/a&gt;, giving details of the bus pins and signals.  There is still a thriving &lt;a href=&quot;http://www.s100computers.com/&quot;&gt;community&lt;/a&gt; of users and builders, where some more beginner-friendly information may be found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bus is split into sections:  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Address  &#xA;Status  &#xA;Data  &#xA;Control  &#xA;DMA Control  &#xA;Vectored interrupt  &#xA;Utility&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Controlling a card over the bus essentially meant claiming the role of Bus Master and then addressing the card you required.  I/O cards could raise interrupts to gain the attention of the processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were - still are - a large number of different processor cards available on the S-100.  Each capable of running one or more operating systems.  Exactly how you implemented the software to control another card on the bus would vary from OS to OS and CPU to CPU.  I couldn't attempt to list them all here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You state in your question that there are only a handful of OS today where you can write a driver.  Not true, you can write drivers for any modern OS, it is just that some of them make it harder for you, and some device manufacturers won't tell you how to control their device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a lot of information and open source code for S-100 out there.  Learning from it will help you be able to write device drivers for modern kit.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-01-24T09:28:39.597" LastActivityDate="2017-01-24T09:28:39.597" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2143" PostTypeId="5" CreationDate="2017-01-24T14:58:12.733" Score="0" Body="&lt;p&gt;SIMH is a simulator produced by the Computer History Simulation Project.  It is capable of simulating a number of retrocomputers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use and configuration of SIMH is on-topic.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-01-24T14:58:12.733" LastActivityDate="2017-01-24T14:58:12.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2144" PostTypeId="4" CreationDate="2017-01-24T14:58:12.733" Score="0" Body="For questions regarding configuration and use of the SIMH simulation package" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-01-24T14:58:12.733" LastActivityDate="2017-01-24T14:58:12.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2145" PostTypeId="2" ParentId="2117" CreationDate="2017-01-24T19:24:08.097" Score="-1" Body="&lt;p&gt;I don't know if it's &quot;vintage&quot; enough, but &lt;/p&gt;&#xA;&#xA;&lt;p&gt;8087, 80287, 80387, 80386, and of course the 80486 had a math co-processor that you could &quot;directly&quot; access. You could use it for for math operations of course, but you could also access a &quot;stack&quot; that could be pushed, popped, and indexed of a sort. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most applications that even used the co-processor would do so using the x87 instructions (do math on the co-processor),  but you could access it directly by assembly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other then an academic excersize I don't know any program that would use the co-processor other then for math operations, but it could do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some info can be found here &lt;a href=&quot;http://wiretap.area.com/Gopher/Library/Techdoc/Cpu/coproc.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiretap.area.com/Gopher/Library/Techdoc/Cpu/coproc.txt&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="454" LastActivityDate="2017-01-24T19:24:08.097" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="2146" PostTypeId="1" AcceptedAnswerId="2149" CreationDate="2017-01-24T19:36:02.353" Score="59" ViewCount="8142" Body="&lt;p&gt;The Amiga used a CPU rated for 8 megahertz, but clocked at 7.14 megahertz. What was the reason for this number? I remember it was something to do with a multiple of the frequency of the video circuitry, but I forget the details.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="87" LastEditDate="2017-06-21T18:19:00.363" LastActivityDate="2017-06-21T18:19:00.363" Title="Reason for the Amiga clock speed" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;video&gt;" AnswerCount="6" CommentCount="0" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2147" PostTypeId="2" ParentId="2146" CreationDate="2017-01-24T20:25:22.833" Score="14" Body="&lt;p&gt;I think you meant 7.15909 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;7.15909 MHz is twice the NTSC color burst frequency (3.579545 MHz).  The NTSC color burst frequency is 455/2 times the line rate, the line rate is 262.5 times the field rate, and the field rate is 60 * 1000 / 1001 (59.94 Hz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;https://www.repairfaq.org/samnew/tvfaq/tvwinsswf.htm&quot;&gt;https://www.repairfaq.org/samnew/tvfaq/tvwinsswf.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On PAL systems that have different field rates, line rates, etc. the CPU is clocked at 7.09379 MHz.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-01-24T20:25:22.833" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="2148" PostTypeId="2" ParentId="2146" CreationDate="2017-01-24T22:06:40.620" Score="20" Body="&lt;p&gt;When color video was introduced in the USA, the horizontal scan rate was set as precisely 15750 * (1000/1001)Hz, i.e. roughly 3579545.4545Hz and the color sub-carrier frequency (also called the chroma clock) was defined as 227.5 times the horizontal scan rate.  Many computers of that era use a multiple of the chroma clock as the pixel clock (the Amiga, for example, uses 4x chroma, or 14318181.818Hz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On systems where video generation shares the a memory bus with everything else, it's generally necessary that a fixed relationship exist between the video frequency and the CPU clock.  In the case of the Amiga, the system clock is 1/2 the dot clock (2x chroma), which is a bit faster than some earlier machines, though the 68000 doesn't do as much each clock cycle as some other processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some other typical machines:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Atari 2600: dot clock=chroma; CPU clock=chroma/3&lt;/li&gt;&#xA;&lt;li&gt;Atari 800: dot clock=chroma*2; CPU clock=chroma/2&lt;/li&gt;&#xA;&lt;li&gt;Apple II: dot clock=up to chroma*4; CPU clock=chroma*2/7&lt;/li&gt;&#xA;&lt;li&gt;Commodore VIC-20: dot clock=up to chroma*8/7; CPU clock=chroma*2/7&lt;/li&gt;&#xA;&lt;li&gt;Commodore 64: dot clock=up to chroma*16/7; CPU clock=chroma*2/7&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The IBM PC had video memory that was separate from the main memory, and was designed to allow the video clock to be independent of the CPU clock.  Nonetheless, the original PC with a CGA card used a dot clock of chroma*4, and a CPU clock of chroma*4/3.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-01-24T22:06:40.620" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2149" PostTypeId="2" ParentId="2146" CreationDate="2017-01-24T23:12:22.380" Score="66" Body="&lt;p&gt;The architecture of most &quot;color computers&quot; of the 70s-80s was &lt;em&gt;very&lt;/em&gt; tightly built around the NTSC color video standard. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Almost all of them had a 14.31818 MHz crystal.  Note that this is four times the 3.579545 MHz frequency of the NTSC color standard, which was called a &quot;color clock&quot;.  They divided that crystal frequency to derive their actual clock frequency.   For instance &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Apple II was 1.023 MHz (1/14 of crystal, 3.5 color clocks per CPU cycle) and used a 1 MHz rated CPU.  &lt;/li&gt;&#xA;&lt;li&gt;Atari 2600 VCS was 1.19 MHz (1/12 of crystal, 3 color clocks per CPU cycle).  &lt;/li&gt;&#xA;&lt;li&gt;Atari 400/800 was 1.79 MHz, (1/8 of crystal, 2 color clocks per CPU cycle) and used a 2 MHz rated CPU.  &lt;/li&gt;&#xA;&lt;li&gt;Even the IBM PC used this same crystal that everyone else was using, dividing it by 3 for CPU clock (4.77MHz).  (But keep in mind memory clock is 1/4 of that, so memory throughput was crystal/12, the same as the Atari 2600 - ha!)  Why choose a multiple &lt;em&gt;when video cards had dedicated video RAM and ran on their own clocks&lt;/em&gt;?  Despite staggering chip-fab capability, the IBM PC team was pathological about using off-the-shelf designs and components.  And this &quot;kept the door open&quot; to a future &quot;color computer&quot; design with shared video RAM; which came to fruition as the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PCjr&quot; rel=&quot;noreferrer&quot;&gt;IBM PCjr&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Why didn't these color-computers just operate asynchronously and run the CPU at max spec, while the video system operated on color-clock?  Because memory was at a premium in those days, so they used memory-mapped video.  This was dual-ported in the simplest possible scheme**, which required memory clocks be in lock sync with the video system. The Apple II even used the video system to accomplish dynamic memory refresh. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you see.   The Amiga, the last of the machines built with the &quot;color computer&quot; &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Mindset_(computer)&quot; rel=&quot;noreferrer&quot;&gt;mindset&lt;/a&gt; (heh, speaking of another)&lt;/em&gt;, deliberately chose a CPU speed again divided down from that same familiar crystal, and again lockstepped to the NTSC color clock.  This allowed them to leverage all the color-computer design which had come before, rather than having to reinvent the wheel. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's difficult to imagine, in this day and age of 4k video, gigabytes of video RAM, and VPUs that can mine Bitcoin faster than the CPU... that we were so pious in our worship of the NTSC standard.  No longer needing the thing, it was kind of a lousy standard.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;** To digress on pre-Amiga-age dual-porting: On the Apple II, the video system got every other RAM cycle whether it needed it or not (hence running half the speed of the Atari), and in classic Wozniak style, he rearranged the memory mapping of video so the video system would also do dynamic RAM refresh). On the Atari, the far more sophisticated &lt;a href=&quot;https://en.wikipedia.org/wiki/ANTIC&quot; rel=&quot;noreferrer&quot;&gt;ANTIC&lt;/a&gt; system interrupted the CPU to take the memory cycles that video needed, as well as dynamic RAM refresh.  This meant available CPU power varied between display modes and whether you were in vertical blank  (a significant amount of time when the raster was off the visible screen).  In a lot of Atari games, the CPU &quot;rode the raster&quot;, spending its very limited CPU cycles to prepare changes to colors or sprites that would happen on the next scan line, wait for horizontal-blank, execute on cue, and prepare the next.  All the computational work of playing the game happened after it got to a low-attention area like the bottom scoreboard, and the vertical blank period.  All this was coded in assembler of course, with  painstaking cycle-counting to make sure the operations could happen in the requisite time, given the cycles ANTIC would steal for the video mode you requested. &lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2017-01-27T15:55:56.870" LastActivityDate="2017-01-27T15:55:56.870" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="2151" PostTypeId="2" ParentId="2061" CreationDate="2017-01-25T01:41:47.610" Score="2" Body="&lt;p&gt;I do not expect it is practical. The reason you can connect the Apple to RPi is that the USB port on the RPi is designed to be a host to USB slave devices - for this case, it is hosting a USB slave that does RS-232. And, perhaps more importantly, the RPi has drivers installed that can recognize RS-232 capable hardware and use it as a terminal connection. So the RPi controls the RS-232 slave, and the slave and Apple computer exchange data with one another over RS-232. The Android phone also has a USB port, but it is commonly only used for charging and for connecting to a host (like the RPi). The Android hardware, or the available drivers, does not support slave devices like the USB-to-RS-232 device, nominally.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-03-02T18:14:09.600" LastActivityDate="2017-03-02T18:14:09.600" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2152" PostTypeId="2" ParentId="1401" CreationDate="2017-01-25T01:59:49.137" Score="3" Body="&lt;p&gt;Both GadTools and BOOPSI were addressing limitations of Intuition before Kickstart 2.0, but from different angles. Intuition provided a great deal of flexibility in how a programmer created and displayed GUI elements. That was great for custom designs, but made it much more work to create the rote normal types of GUIs that many applications used. Also, the flexibility led to a lack of standards in GUI implementation, which created confusion among users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GadTools addressed these two problems by simplifying the programming necessary for most application GUIs and also providing a means of standardization to make more applications look and work similarly, thus easing the learning curve for both programmers and users. It is also noteworthy that there was a new GUI &quot;Style Guide&quot; put forth by Commodore at the same time as Kickstart 2.0 release.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BOOPSI was there to enhance the ability for programmers to create fully custom GUIs, which was the tradition the platform already had with Intuition. However, programming GUIs is arguably better when using GUI frameworks that follow the Object-oriented (OO) paradigm. So, BOOPSI provided this paradigm for Intuition programmers that still wanted to go the customized GUI route, rather than use GadTools and &quot;look like all the other programs.&quot;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-01-25T01:59:49.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2153" PostTypeId="1" CreationDate="2017-01-25T03:59:56.563" Score="10" ViewCount="320" Body="&lt;p&gt;The first FORTRAN compiler for the Soviet BESM-6 mainframe was written by means of manually retargeting the assembly code of the &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_1604#Similar_machines&quot; rel=&quot;nofollow noreferrer&quot;&gt;CDC 1604&lt;/a&gt; FORTRAN compiler donated by &lt;a href=&quot;http://home.cern/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CERN&lt;/a&gt; to &lt;a href=&quot;http://www.jinr.ru/main-en/&quot; rel=&quot;nofollow noreferrer&quot;&gt;JINR&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result is it likely that any bug in the front-end of the BESM-6 compiler replicates a bug in the original CDC 1604 code. &#xA;There is a peculiar bug: &lt;a href=&quot;http://mailcom.com/besm6/runitnew.cgi&quot; rel=&quot;nofollow noreferrer&quot;&gt;select &quot;FORTRAN bug&quot; in the left column, then press RUN&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      program main&#xA;      i = 5&#xA;      j = 5&#xA;      if (i=j) print 10&#xA;   10 format(13hHello, world!)&#xA;      print 20&#xA;   20 format(32hWhy isn't &quot;hello, world&quot; printed)&#xA;      end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, &lt;a href=&quot;http://simh.trailing-edge.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SIMH&lt;/a&gt; doesn't have the CDC 1604 among the emulated systems, and even if it did, I wouldn't know where to find a FORTRAN compiler for it. I could have tried the CDC 1700, but I don't see a mention of the compiler &lt;a href=&quot;https://github.com/simh/simh/blob/master/CDC1700/CDC1700-MSOS.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, only the runtime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to check if the bug exists in the original code. Does a CDC 1604 emulator exist with a functional FORTRAN compiler?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="79" LastEditDate="2018-05-29T10:51:29.250" LastActivityDate="2018-05-29T10:51:29.250" Title="Does a CDC 1604 emulator exist with a functional FORTRAN compiler?" Tags="&lt;programming&gt;&lt;debugging&gt;&lt;fortran&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2154" PostTypeId="1" AcceptedAnswerId="2155" CreationDate="2017-01-25T05:07:31.137" Score="9" ViewCount="4559" Body="&lt;p&gt;So I snagged a North American Amiga 500 on sale at a flea market. I purchased a DSub to VGA connector in the hopes I could get some color output. After getting strange Horizontal sync on my monitor, I realized that I needed a 15 kHz monitor, which I do not have and are not easy to find. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike later Amiga computers which supported composite video, the A500 needs an RF modulator, the Amiga 520A which sticks out like parasite on the back of the machine. After ordering one on ebay, i found out I still had no color. It turns out that the A520 was PAL (German I believe) and does not produce color on NTSC. North American 520A are really hard to find.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any cheap alternatives? &#xA;I am open to making direct modifications to the machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HFoFB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HFoFB.jpg&quot; alt=&quot;Amiga 520A&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4251" LastEditorDisplayName="user12" LastEditDate="2017-01-25T13:31:50.313" LastActivityDate="2017-01-25T14:38:34.793" Title="Alternative to Amiga 520A Video Adapter" Tags="&lt;video&gt;&lt;amiga-500&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2155" PostTypeId="2" ParentId="2154" CreationDate="2017-01-25T08:55:18.080" Score="7" Body="&lt;p&gt;Your first choice is to see if with a little modification, the A520 box can be used as a NTSC encoder. Open it, locate chip MC1377, take pin 20 (which will be unconnected) and ground it. That will make the chip to act as a NTSC encoder. I don't know if this will be enough, as there seems to be some resonant circuits all over the board, that may be tuned to PAL frequencies. Anyway, it's worth a try.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that doesn't work, there is still a couple of alternatives:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First alternative: use a GBS-8220 scan converter, to get a VGA signal from the Amiga analog RGB output. This is the device:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/shcub.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/shcub.jpg&quot; alt=&quot;GBS-8220&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how an Amiga 1200 is seen, with the standard Workbench resolution of 640x256:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1ysrg.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1ysrg.jpg&quot; alt=&quot;Workbench 640x256&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the same Workbench, but in a 640x512 interlace mode. The interlace mode does not flicker at all. It's steady and clear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dx3qe.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dx3qe.jpg&quot; alt=&quot;Workbench 640x512&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pixel definition is very good. Here you have a very populated GUI with tiny button captions, from ProTracker&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OKlfw.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OKlfw.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second alternative: use a RGB-to-CVBS converter. There are a few projects based upon the AD724 encoder chip, wich can generate either a PAL or NTSC signal. &lt;a href=&quot;http://eab.abime.net/showthread.php?t=30752&quot;&gt;This link, for example, shows a hobbyist approach&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A friend of mine, Antonio Villena, designed and built a more professional encoder, which can be fitted inside the Amiga box. You can then route the composite video output to the monochrome composite output on the Amiga 500, first cutting the track that carries the monochrome video output from the Amiga board, for a complete internal solution without having to drill a single hole into the case. He sells them for 5 euros.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Q1 crystal can be changed to a 3.57 MHz NTSC one, and the solder jump SJ1 configured to make the encoder to output a NTSC signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IAabi.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IAabi.png&quot; alt=&quot;AD724 schematics&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LppZf.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LppZf.png&quot; alt=&quot;PCB layout&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2017-01-25T09:01:37.057" LastActivityDate="2017-01-25T09:01:37.057" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2156" PostTypeId="1" AcceptedAnswerId="2158" CreationDate="2017-01-25T12:23:33.470" Score="20" ViewCount="1661" Body="&lt;p&gt;In this &lt;a href=&quot;https://www.reaktor.com/blog/crash-course-to-amiga-assembly-programming/&quot;&gt;Crash course to Amiga assembly programming&lt;/a&gt;, the author loads A6 with a constant, and then regularly jumps to offsets from that constant. He explains: &lt;code&gt;All functions within that library can be accessed by jumping to addresses relative to the base address of the library.&lt;/code&gt; So in the example codes on his page first load a CPU register with the base address of exec.library:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;move.l  $4,a6&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and then we find that jumps to subroutines inside a library go like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;jsr -132(a6)    ; Forbid&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am used to ELF libraries on Linux. I was expecting to find some way to look up a routine's entry point by the name of the routine, (for example, that's how dlsym etc works. I've never done assembler on Linux though). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is exec.library always at $4? Are libraries generally loaded at some fixed address, or it this only because exec.library is in a kickstart ROM?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are the symbol names stored in the libraries anywhere, so that I can look the addresses up? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I have a different kickstart version, could the entry points in exec.library be different?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2017-01-29T15:47:13.063" Title="How are Amiga libraries structured?" Tags="&lt;amiga&gt;&lt;amiga-kickstart&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2157" PostTypeId="2" ParentId="2146" CreationDate="2017-01-25T14:31:00.910" Score="7" Body="&lt;p&gt;The accepted answer is good, however there is something more that needs to be said here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No discussion in this kind of detail on the hardware design of the Amiga should pass without some kind of mention of &lt;a href=&quot;https://en.wikipedia.org/wiki/Jay_Miner&quot; rel=&quot;noreferrer&quot;&gt;Jay Miner&lt;/a&gt;. In addition to leading design on the Amiga, he also designed the 2600, &lt;strong&gt;and&lt;/strong&gt; the Atari 800/400 which (as Harper mentioned) used the same scheme. That's more than half of the designs listed in Harper's answer. This was clearly his go-to design for clocking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jay Miner was indisputably one of the fathers of home computing. Arguably the most important one. &lt;em&gt;His contributions should not be forgotten&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is of course well-known that the signatures of Miner, his dog, and the rest of the development team, are embossed inside the (removable) case top of most Amiga 1000's&lt;/p&gt;&#xA;" OwnerUserId="4345" LastActivityDate="2017-01-25T14:31:00.910" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2158" PostTypeId="2" ParentId="2156" CreationDate="2017-01-25T14:34:18.100" Score="18" Body="&lt;p&gt;A library in Amiga programming is exactly as you describe - you obtain a pointer to the library base address, and then call a function by loading the library base address into A6, the required parameters into the documented registers, and then doing a jsr to an A6-relative address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is unusual to refer to the function addresses by number. The Amiga standard header files will define symbolic names. My memory is a bit hazy, but I think the code you quoted would more commonly be written as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;include &quot;exec/exec.i&quot;&#xA;&#xA;...&#xA;&#xA;jsr _LVOForbid(a6)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(&lt;code&gt;_LVO&lt;/code&gt; is a standard prefix for library function symbols; LVO stands for library vector offset.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, a pointer to exec.library is always at $4, and this is (in theory, but not in practice) the &lt;em&gt;only&lt;/em&gt; fixed address you should ever use in AmigaOS. To obtain the base address for any other library, you have to ask exec.library. It has a function &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node0222.html&quot;&gt;OpenLibrary&lt;/a&gt; which takes a library name and a minimum version and will return to you the base address of the requested library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you follow the pattern of getting the pointer to exec.library from $4 and then calling &lt;code&gt;OpenLibrary&lt;/code&gt; for every other library, then you will be compatible with different Kickstart versions. Well-written libraries will be backward-compatible, that is, the old functions will continue to be work as is on newer Kickstarts. This is why &lt;code&gt;OpenLibrary&lt;/code&gt; takes a library version number: you must ask for the smallest version number that contains all the functions you need. If the library is not present with the requested version number or newer, &lt;code&gt;OpenLibrary&lt;/code&gt; will return &lt;code&gt;NULL&lt;/code&gt; (which is a condition you should test for!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The libraries themselves don't contain the symbol names of the functions - they are fully linked and resolved so there's no symbol table. So you will need the header files to use the symbolic names, at least when you are programming in assembly. When programming in C, you would normally link with a stub linker library that defines functions with the same names, and performs the library call on your behalf.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is mandatory to put the library base pointer into A6 (necessary so that the library can find its own data; there are very few exceptions to this rule) but once you have completed the library call, you can clear A6 and use it for other purposes. You can have multiple libraries open at once; typically you would store their pointer in a variable, and load the variable into A6 just before making a library call.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://amigadev.elowar.com/&quot;&gt;http://amigadev.elowar.com/&lt;/a&gt; contains lots of information about developing for AmigaOS, including descriptions of all the standard libraries.&lt;/p&gt;&#xA;" OwnerUserId="149" LastEditorUserId="149" LastEditDate="2017-01-28T21:38:05.873" LastActivityDate="2017-01-28T21:38:05.873" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2159" PostTypeId="2" ParentId="2154" CreationDate="2017-01-25T14:38:34.793" Score="4" Body="&lt;p&gt;I think it really depends on what type of use you want out of your Amiga.  If sharp text and sharp Workbench are important, then a high quality scan-doubler is going to be the best option...but, expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried the GBS-8220 everyone raves about and I really don't see how people can use that thing.  Maybe I got a bad one.  But in my experience, the image was never clear.  The interface is a nightmare to use.  The card is huge and gets hot.  And, the picture was terrible.  Lots of artifacting and blurring.  Your mileage may vary but I was certainly not impressed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what I did was set out to build my own S-Video converter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this schematic online:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www3.telus.net/narmi/schematic.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www3.telus.net/narmi/schematic.png&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, I needed two expensive parts.  An AD724 and a DB23 connector.  Some people take a DB25 and saw it or somehow make it fit.  I didn't like that approach.  Luckily, I was able to find a solder-tail DB23 on eBay for about $8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other expensive part is the AD724.  They are about $11-$14 USD if you buy them new from Mouser.  I was pretty lucky in that I managed to get three for FREE.  I signed up at Analog Devices (the maker) and requested free samples.  I've also bought them for less on eBay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other parts are pretty cheap like some resistors, enclosure box, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, it's not pretty...but it works GREAT.  On my 1084S monitor, the image is awesome.  Text isn't that great (you need VGA for that) but I mainly play games.  The image even looked great on my 42&quot; plasma.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ignore the moire pattern and scanlines from the pics below.  The real images are actually really nice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my suggestion is to just build that circuit.  It's actually not hard.  The hardest part will be adapting the surface mount AD724 to a breadboard-friendly version.  There are cheap adapters online for that as well.  If you can't solder or feel this would be too difficult, perhaps find a friend that can.  Or, look me up on Lemon Amiga.  I might be able to build you one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice, too, that I pulled out two separate lines for chroma an luma to get S-Video.  What I don't show in these pics is that I also made a custom S-Video cable to go to a normal TV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps somewhat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ry3NK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ry3NK.jpg&quot; alt=&quot;Back&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kW6Sd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kW6Sd.jpg&quot; alt=&quot;Front&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KgJmF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KgJmF.jpg&quot; alt=&quot;Close up&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0liVu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0liVu.jpg&quot; alt=&quot;Boxed up&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QBpYt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QBpYt.jpg&quot; alt=&quot;Better in real life&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jshXB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jshXB.jpg&quot; alt=&quot;Pretty sharp!&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-01-25T14:38:34.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2160" PostTypeId="2" ParentId="234" CreationDate="2017-01-25T18:11:34.920" Score="13" Body="&lt;p&gt;A little more background on the formats... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When IBM is involved, it's all about history. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM's first PC floppy disk format was single sided, 5-1/4&quot;, 160K on a single-sided drive. (40 tracks, 8 sectors per track, 512 byte sectors). This started as &quot;double density&quot; but was otherwise a conservative design, typical for IBM. Double-sided floppies were 320K, of course.  They very quickly made a &quot;bump&quot; to 180K/360K as they found they could easily squeeze on a ninth sector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM's implementation of 3-1/2&quot; drives was made to be as backward-compatible as possible, so they simply wheeled over the same formats, except with 80 tracks, so 360/720k.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see with IBM's conservative tack of &quot;dragging their old designs forward&quot;, there was lots of room for an aggressive competitor to best them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance Apple opened at 400k/800k, accomplished by changing drive rotation speed for different tracks, moving closer to CLV rather than CAV (CLV was more famously used by the Laserdisc format, and it was something the 3.5&quot; format designers had never imagined when they designed for a 1MB raw-data-stream capacity. Hence, Apple's approach pried more raw capacity out of the drive than even the designers intended, and then used that fairly conservatively). That was typical of Steve Wozniak, coming up with masterstrokes of parts-efficient design rather than pushing the performance envelope.  &lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2019-01-23T16:54:26.103" LastActivityDate="2019-01-23T16:54:26.103" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="2161" PostTypeId="1" AcceptedAnswerId="2167" CreationDate="2017-01-25T19:55:33.323" Score="6" ViewCount="396" Body="&lt;p&gt;Many people are familiar with the awesome &lt;code&gt;Ocean&lt;/code&gt; loaders from the 8-bit days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those that are not, &quot;loaders&quot; are small programs that were usually artwork and music (sometimes games) that were displayed while the actual game loaded from tape or disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ocean (a games publishing company) was famous for creating 5 (IIRC) loaders that they used in many of their games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there any others that achieve nearly (or greater?) success and popularity as the Ocean loaders?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm mostly interested in the ones for &lt;code&gt;Commodore 64&lt;/code&gt; but any other retro platform would be great.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I should have mentioned that &quot;famous&quot; doesn't always mean &quot;legit&quot;.  :-)  So, if the loader was famous/well-known but belonged to a cracking group, that is also OK.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="621" LastEditDate="2017-01-25T21:33:47.303" LastActivityDate="2017-01-26T15:19:05.557" Title="Other than Ocean, what other famous loaders were there?" Tags="&lt;commodore-64&gt;&lt;gaming&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ClosedDate="2017-01-26T15:25:15.500" ContentLicense="CC BY-SA 3.0" />
  <row Id="2162" PostTypeId="2" ParentId="2153" CreationDate="2017-01-26T02:19:18.973" Score="1" Body="&lt;p&gt;The obvious reason why &quot;Hello World&quot; isn't printed is that &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (i=j) print 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;is not standard Fortran in any dialect I have ever seen in 40+ years of Fortran programming. Even in Fortran 90 and later, the relational operator for equality is == not =.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is a &quot;bug&quot;, probably it is the fact that the compiler didn't print an error message, or your emulator has lost the error output somewhere. The compiler then generated no code for the statement containing the error, and you executed the program with that statement deleted.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (i .eq. j) print 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;is standard Fortran, and works as expected.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2017-01-26T02:25:47.377" LastActivityDate="2017-01-26T02:25:47.377" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2163" PostTypeId="1" AcceptedAnswerId="2166" CreationDate="2017-01-26T06:12:59.570" Score="11" ViewCount="961" Body="&lt;p&gt;How does the 6502's machine code process $ vs #$, as in it's assembly language? Does every piece of machine code have an extra byte or something telling to use addresses or values or was it something more clever? (finding info on 6502 assembly is easy, on machine code processing in general not so much, so I don't know if there's a standard way or if this is a stupid question or not!)&lt;/p&gt;&#xA;" OwnerUserId="4353" LastActivityDate="2017-03-06T12:15:36.693" Title="How does 6502 machine code process $ (address) VS #$ (value)?" Tags="&lt;assembly&gt;&lt;6502&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2164" PostTypeId="2" ParentId="2163" CreationDate="2017-01-26T07:36:41.780" Score="11" Body="&lt;p&gt;The 6502 has been decapped and traced, and a &lt;a href=&quot;http://visual6502.org/&quot;&gt;simulator&lt;/a&gt; is available, so you can find out the workings of anything in as much detail as you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://visual6502.org/wiki/index.php?title=Hanson%27s_Block_Diagram&quot;&gt;block diagram&lt;/a&gt; (available even before the decap) helps a lot in understanding what is going on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, instructions were executed in several phases (T0-T5), and the instruction register and the current phases were decoded first with a ROM, and then with a PLA into signals which drive the various parts of the CPU, including the next phase. &#xA;The &lt;a href=&quot;http://www.visual6502.org/wiki/index.php?title=6502_State_Machine&quot;&gt;state machine&lt;/a&gt; wiki page has some of the more intricate details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for immediate vs. absolute addressing, the state machine sequences would slightly differ: Immediate would fetch the byte after the opcode (actually this was pipelined, and happened always at the same time as opcode decoding, which is why each opcode takes at least 2 cycles), and then this value would be routed to the ALU. Absolute addressing would fetch two bytes after the opcode, route them to the address bus latches, use them to fetch the byte at this address, and route that to the ALU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simulator allows you to enter your own programs, so just enter both variantes and see what happens.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-01-26T07:36:41.780" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2166" PostTypeId="2" ParentId="2163" CreationDate="2017-01-26T09:55:40.013" Score="17" Body="&lt;p&gt;While @dirkt's is a good answer, I think it might be missing the high-level overview you're after.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the most basic level, instructions using immediate vs absolute addressing are encoded into different opcodes. For example, LDA # (immediate mode) is encoded as A9 (after which the CPU knows, by mechanisms detailed in @dirkt's answer, to read one byte and interpret it as a value), whereas LDA (absolute mode) is encoded as AD (and the CPU knows to read two bytes and interpret it as an address).&lt;/p&gt;&#xA;" OwnerUserId="1931" LastActivityDate="2017-01-26T09:55:40.013" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2167" PostTypeId="2" ParentId="2161" CreationDate="2017-01-26T15:19:05.557" Score="3" Body="&lt;p&gt;I remember Invade-a-Load quite fondly (mostly for the music though you could play a fairly difficult game of Space Invaders whilst your game was loading).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Invade-a-Load&quot; rel=&quot;nofollow noreferrer&quot;&gt;Invade-a-Load on Wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4359" LastActivityDate="2017-01-26T15:19:05.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2168" PostTypeId="2" ParentId="1401" CreationDate="2017-01-26T15:43:52.587" Score="2" Body="&lt;p&gt;I don’t know whether an official statement exists, but the most plausible explanation is that these were &lt;em&gt;parallel developments&lt;/em&gt;. Such waste of resources was the norm at Commodore and is best illustrated by the release of the CDTV, using an extended version of the 1.3 operating system, when the version 2.0 was already released with a A3000. Of course, several efforts spent on extending the 1.3 version were not necessary if they coordinated with the development of the 2.0 version instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gadtools is a library that doesn’t require version 2.0 for its features and there is indeed a pure 1.3 version of that library, I have seen in a developer archive. The same applies to the asl.library, which settles on gadtools for its UI. Of course, the version finally shipped with Amiga OS 2.0 was adapted to use the same color scheme/look&amp;amp;feel as the BOOPSI classes, but as you noted yourself, there is no interaction between these two features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BOOPSI on the other hand, has been developed for Amiga OS 2.0 in the first place, as it requires several fundamental changes to the intuition.library to work. As far as I know, starting with the 3.0 version of the operating system, the gadtools.library has been adapted to use some of the BOOPSI features, however, it has to stay compatible with the 2.0 version.&lt;/p&gt;&#xA;" OwnerUserId="4358" LastActivityDate="2017-01-26T15:43:52.587" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2170" PostTypeId="1" AcceptedAnswerId="2171" CreationDate="2017-01-26T16:51:21.450" Score="12" ViewCount="1645" Body="&lt;p&gt;When the &lt;code&gt;NES&lt;/code&gt; was released, there were a list of original titles from Nintendo such as Duck Hunt, Super Mario Bros. and Metroid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These titles came in a distinctive box that was mostly black. Plus, the cartridges themselves had a black label.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So these original games have come to be known as &quot;black box&quot; or &quot;black label&quot; games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During this time, many cartridges had five screws holding them together. Later on, to reduce manufacturing costs, this was reduced to three screws. Yes, two tiny screws times millions of cartridges really adds up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, did &lt;strong&gt;ALL&lt;/strong&gt; of the original &quot;Black Box&quot; NES games come in the standard five screw format or did NES eventually start shipping them in three screw format?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My assumption is that most of the original black box games were made up until the end of NES and Nintendo started using the three screw design.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, I have found more examples of Black Box games coming in three-screw cases.  In fact, I bought &lt;code&gt;Pinball&lt;/code&gt; recently and noticed it was in a three-screw case.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="2081" LastEditDate="2017-01-30T19:28:46.410" LastActivityDate="2017-01-30T21:11:25.807" Title="Did all NES &quot;Black Box&quot; games come in carts with five screws?" Tags="&lt;history&gt;&lt;nintendo&gt;&lt;nes&gt;&lt;game-cartridge&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2171" PostTypeId="2" ParentId="2170" CreationDate="2017-01-26T17:01:47.710" Score="10" Body="&lt;p&gt;&lt;strong&gt;This answer is a Community Wiki post, feel free to edit it to add additional games or information.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I guess it's impossible to know now (unless you worked in the industry or at a plant), as someone could have taken a three-screw variant of a game and a black box and call it a complete three screw set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a &lt;a href=&quot;http://www.ebay.com/itm/10-YARD-FIGHT-NES-Nintendo-Complete-CIB-Black-Box-Game-3-Screw-gt-gt-FREE-SHIPPING-lt-lt-/122251678221&quot; rel=&quot;nofollow noreferrer&quot;&gt;completed eBay auction&lt;/a&gt; for someone who claims to have a three screw black box of 10-Yard Fight&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ekUc8.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ekUc8.jpg&quot; alt=&quot;10-Yard Fight Front&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cPNWT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cPNWT.jpg&quot; alt=&quot;10-Yard Fight Front&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ebay.com/itm/Tennis-3-screws-Complete-In-Box-NES-Game-/252661492867&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's one for Tennis&lt;/a&gt;, but there are no pictures of the back of the cartridge, so I'm skeptical.  Apparently there is also one for Donkey Kong, but I'm still looking for picture proof.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2017-01-30T21:11:25.807" LastActivityDate="2017-01-30T21:11:25.807" CommentCount="2" CommunityOwnedDate="2017-01-30T21:06:52.960" ContentLicense="CC BY-SA 3.0" />
  <row Id="2172" PostTypeId="1" CreationDate="2017-01-26T18:07:09.400" Score="19" ViewCount="975" Body="&lt;p&gt;I would assume that most people who have been trying to keep these old micros working are well aware of the finite life of components, which is the idea that age will eventually cause things to fail. Though the components in our 8-bits seem to be a bit higher quality than those that fell ill to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Capacitor_plague&quot;&gt;Capacitor Plague&lt;/a&gt;, I do wonder how much time is left before some things won't work anymore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question here is more that I haven't really seen anyone suggest that their computers have died because of capacitor failure on the motherboard; by this I mean that if the power supply fails, it not only prevents the machine from working but could also take down the rest of the machine with it due to incorrect voltages... but to my question, I haven't seen any reports really of people saying that their machine (with a healthy power supply) is not working because of a capacitor failure in the logic parts of the motherboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose it differs by manufacturer and model, but I'm not really sure what to expect and when for some of this kit. Being proactive about the power supply is one thing, but is that enough? That being said, should I be worried as long as I have the power supply covered, i.e. as long as the supply voltages are in spec from the PSU then nothing can really fry in the rest of the machine but perhaps just fail logically?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm curious how diligent one should be about this.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2017-02-05T10:22:02.777" Title="When or should we expect our 8-bit motherboards to fail due to the capacitors?" Tags="&lt;restoration&gt;&lt;maintenance&gt;&lt;component-failure&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2173" PostTypeId="1" AcceptedAnswerId="2174" CreationDate="2017-01-26T18:40:59.053" Score="8" ViewCount="463" Body="&lt;p&gt;Roughly speaking, the two main ways to sell computers are, and particularly were in the old days,&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Three digit price tag sold to individuals =&gt; mass market, department stores and suchlike.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Four digit price tag sold to businesses =&gt; dealers, who are specialists in computers, provide advice, support et cetera.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Apple and Commodore both had extensive dealer networks in the late seventies. (Commodore ditched theirs when they switched to home computers, and Apple a few decades later went into retail themselves, but that's another story.) So basically starting from 1977, they acquired networks of thousands of dealers very quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where did the dealers come from? They can't already have been specialists in selling personal computers, because those didn't exist before. Were they in business selling something else previously or what?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-01-31T18:18:35.320" Title="Origin of dealer networks" Tags="&lt;apple-ii&gt;&lt;history&gt;&lt;commodore-pet&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2174" PostTypeId="2" ParentId="2173" CreationDate="2017-01-26T19:10:21.443" Score="13" Body="&lt;p&gt;You'd be surprised.  There were specialist microcomputer shops in the late 1970s.  I'm talking now about the UK and the shops that I used to visit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These were either individual shops or small chains, like &lt;em&gt;The Byte Shop&lt;/em&gt;.  These would sell imported boards from US companies like NorthStar and the many British and European board makers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before microcomputers became popular, there had always been electronics, ham radio and hifi shops.  All of these dealt with high technology, and for them it was a natural opportunity to expand and branch out - jump on the new microcomputing bandwagon.  Sometimes they just expanded their range to include computing, sometimes they opened another branch to specialise in computing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The electronics shops, like &lt;em&gt;Watford Electronics&lt;/em&gt; or &lt;em&gt;Maplin&lt;/em&gt;, already sold TTL chips and breadboards for people to knock up little gismos as a hobby.  They just started selling CPUs, RAM and so on as an expansion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ham radio (and in the '70s CB radio) shops started selling little systems for talking to &lt;em&gt;Compuserve&lt;/em&gt;, &lt;em&gt;Bix&lt;/em&gt;, &lt;em&gt;Cix&lt;/em&gt; etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Growth was organic but fast.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2017-01-26T19:10:21.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2175" PostTypeId="1" AcceptedAnswerId="2180" CreationDate="2017-01-26T19:54:39.353" Score="14" ViewCount="1398" Body="&lt;p&gt;What sort of code could be used to substitute a high level function with a return value to a 6502 subroutine? Take this C-like function for example.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;byte func(byte a, byte b, byte c) {&#xA;    d = (a + b) * c;&#xA;    return d;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How could that be done on 6502, or is it impossible? I am new to 6502 assembly and I can't find any possible equivalents similar at all to return values or subroutines with arguments. If 6502 programmers would need to do something like the above, using a subroutine, how would they do it?&lt;/p&gt;&#xA;" OwnerUserId="4353" LastActivityDate="2017-01-26T23:39:18.937" Title="How could high level functions with return values map to 6502 assembly? (if at all possible)" Tags="&lt;programming&gt;&lt;assembly&gt;&lt;6502&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2176" PostTypeId="2" ParentId="2172" CreationDate="2017-01-26T19:57:11.587" Score="4" Body="&lt;p&gt;“Now” might be a fair answer, given that I've had to replace capacitors on two compact Macintosh motherboards (Classic and Classic II). Failed caps can prevent booting if the conductive electrolyte shorts critical connections. Leaked electrolyte is decidedly &lt;a href=&quot;http://www.classic-computers.org.nz/blog/2012-01-09-classic-ii-cottonbud-solution.htm&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;sticky-looking&quot;&gt;sticky-looking&lt;/a&gt;. Similarly, failed display capacitors in 68K Macintosh PowerBooks might not stop the machine from booting, but will stop you seeing anything on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if it was a particular symptom of the surface-mount electrolytic capacitors that Apple used, or just a general eventual failure mode of all electrolytics. Any equipment 20 years old or older with electrolytics may be suspect. The effects can be reduced by cleaning the circuit board, but ultimately any leaking capacitors will need to be replaced.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-01-26T19:57:11.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2177" PostTypeId="2" ParentId="2172" CreationDate="2017-01-26T21:39:36.123" Score="11" Body="&lt;p&gt;As someone who owns around 70 vintage computers (8/16 bit), leaky caps are a big concern for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experiences, batteries leak far more often than capacitors.  Obviously, electrolytic capacitors can, and often do, leak.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Companies like Commodore didn't exactly use high quality parts.  So the shelf life for those electrolytic caps isn't long.  Yet, I have Commodore's (Atari's, Apple's, etc.) that have never been recapped but still work great with no leakage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I keep almost all of my collection in my basement which is climate controlled.  Heat can drastically shorten the life of those caps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With ceramic capacitors, they typically last a very long time and there is nothing to really leak with them.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, there is just no way of knowing when they will fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the computer is important to you, then re-cap it with good quality caps like Panasonic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing I want to mention, is that unless you know how to &lt;em&gt;professionally&lt;/em&gt; solder/de-solder and work on boards, then you may cause more damage than just leaving the caps alone.  If you don't know how to &lt;em&gt;properly&lt;/em&gt; solder, then farm it out to a professional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Especially if they are surface mount caps.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-01-26T21:39:36.123" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2178" PostTypeId="2" ParentId="2175" CreationDate="2017-01-26T22:22:56.347" Score="10" Body="&lt;p&gt;The short answer is, you do it however you like.  It's your machine and you're the programmer, so do whatever works for you.  On an 8-bit CPU like the 6502, there is no one 'right' way to do it.  The processor is too limited for any single solution to work in all cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One obvious option is to do something similar to what's done on more modern processors: push arguments onto the stack, and return values in A if they fit in one byte, or a pair of registers (like A and X) if they require 2 bytes.  This is probably not a good option because the 6502 has such a small stack, and it lacks instructions that make it easy to access arguments on the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to have the arguments follow the JSR instruction.  The function can then use the return address on the stack to locate arguments, updating the return address as it reads each argument.  When the function is done reading arguments the return address will be left pointing to the byte after the argument list, where your executable code would resume execution after the function returns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, you could allocate a page of memory somewhere for arguments, store your arguments somewhere in that page, and pass the address of the first argument in the X or the Y register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you could store your arguments somewhere in zero page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are lots of options for how you do arguments.  Likewise, there are lots of options for how to return values.  For example if you don't want to return values in A, how about returning them in memory location 0?  If your function just returns a true/false value, don't forget you can use the condition codes -- for example you can set the carry flag to indicate true, and clear the carry flag to indicate false, or you can use the overflow flag or any other flag.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-01-26T22:22:56.347" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2179" PostTypeId="2" ParentId="2173" CreationDate="2017-01-26T22:25:09.057" Score="9" Body="&lt;p&gt;I can't speak to the origin of all dealers, but the one I work for often repeats it's origin story into new recruits. It's &quot;public&quot; knowledge, but may have been self censored, so please take it with a pinch of salt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The founder apparently noticed that computer memory was decreasing by about 5% per month, and noted that he and his friends would mostly buy memory from trade magazines. He also realised that there was a one-month gap between phoning up to place an advert in the magazine and the advert appearing in press. He took a gamble, and placed an advert for memory at 4% less than current market prices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;His gamble paid off, and his advert was the cheapest (and thus most popular) advert for memory in the magazine. He had to get several credit cards to pay for the stock from the manufacturer, but it was all worth it. His customers all got their memory and he kept his profit. Rinse and repeat a few times, and he had enough to start doing this more widely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As more people were calling he was able to offer more products, take on staff, get credit accounts with distributors and manufacturers, and eventually offer a full service to consumers and businesses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The company is now far more business focused than consumer, but is one of the largest in the market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of our competitors seem to have spun out from businesses that simply bought and used so many computers that selling a few must have made sense. The most obvious of these is BT Business Direct (an offshoot of our former state-run (monopoly) telephone provider). As I say though, I'm mostly assuming how they started out selling computers.&lt;/p&gt;&#xA;" OwnerUserId="4364" LastActivityDate="2017-01-26T22:25:09.057" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2180" PostTypeId="2" ParentId="2175" CreationDate="2017-01-26T23:39:18.937" Score="17" Body="&lt;p&gt;There is a C compiler for the 6502 CPU (cc65). The wiki for this compiler has a section about the internals of the compiler itself, in which the argument passing and result return is discussed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the wiki has a &lt;a href=&quot;https://creativecommons.org/licenses/by/3.0/&quot;&gt;CC by 3.0 license&lt;/a&gt;, I can copy and redistribute the documentation inside that wiki, for the sake of completeness, provided that appropiate credit is given, a link to the license is made available, and an indication about possible changes is added.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following documentation belongs to the &lt;a href=&quot;http://www.cc65.org&quot;&gt;CC65 project&lt;/a&gt;. It is an exceprt of the &quot;Compiler Internals&quot; section. Most precisely, the documentation is a verbatim copy of the three first points under that section.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main URL, where the original document is available from, is:&#xA;&lt;a href=&quot;http://wiki.cc65.org/doku.php?id=cc65:mainpage&quot;&gt;http://wiki.cc65.org/doku.php?id=cc65:mainpage&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To the best of my knowledge, no changes to the content have been performed, and if there is anyone, it has been made unintentionally.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The primary register&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 CPU has no single register that is able to hold any C data besides char. And, for arithmetic operations, only the A register (the accumulator) can be used. Obviously, the 6502 architecture is not very well suited for C and its larger data types.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this reason, operands are placed in an artificial “primary register”. This register consists of the A and X CPU registers if the operand is 16 bit wide (low byte in A, high byte in X). For 32 bit operands, a 16 bit zeropage location named sreg is used in addition to these CPU registers. So the high word goes into sreg and the low word goes into A/X.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a runtime function uses more than one operand (a multiplication for example), the first operand is passed on the parameter stack, while the second one is passed in the primary register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Parameter and return stacks&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 has a fixed stack with a size of 256 bytes in page 1 (at address $100). On several platforms, the stack is even smaller, because the operating system uses part of it for other purposes. This means that the stack is too small to use it as storage for local variables in C programs. For this reason, cc65 compiled programs utilize separate parameter and return stacks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;The return stack&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The “return stack” is actually the 6502 hardware stack. It is called “return stack”, because it contains mostly return address of subroutines. It can be (and is) used also as temporary data storage (for example saving a register). It is not used for parameters and variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;The parameter stack&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;General use&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The parameter stack is a software stack that usually resides at the highest program data address and grows downwards. It is addressed using a two byte zeropage variable named sp and the Y register. The parameter stack is also used for local auto variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Functions for use with the parameter stack&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The runtime library contains functions to access the stack, push and pop values, and reserve or drop space on the stack. Here are a few examples:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function    purpose&#xA;pusha       Push byte in A onto the parameter stack&#xA;pushax      Push word in A/X onto the parameter stack&#xA;popa        Pop byte on TOS into A&#xA;popax       Pop word on TOS into A/X&#xA;decsp2      Decrement the stack pointer by 2&#xA;incsp2      Increment the stack pointer by 2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Accessing data on the parameter stack&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data on the parameter stack is accessed using the sp zeropage variable using “indirect Y” addressing mode. The last byte pushed is always at offset zero. So if we pushed the value $42 onto the runtime stack using&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    lda     #$42&#xA;    jsr     pusha&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;we can access it using&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ldy     #$00&#xA;    lda     (sp),y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Moving the stack&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The stack isn't put in a segment; it's put into a separate memory area. That area isn't named; it's implied by two expressions. The first one is in the ld65 configuration file. For example, “c64.cfg” has “size = $C7F3 - STACKSIZE”. The second one is in the start-up code. For example, “c64/crt0.s” has ”(RAM_START + RAM_SIZE + STACKSIZE)”.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it were named explicitly (it should be!), then they would look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;HEADER: file=%O, define=yes, start=$0801, size=$000C;&#xA;STACK: file=&quot;&quot;, define=yes, start=$d000-__STACKSIZE__, size=__STACKSIZE__;&#xA;RAM: file=%O, define=yes, start=__HEADER_LAST__, size=__STACK_START__-__RAM_START__;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And, sp would be set to ”(STACK_START + STACK_SIZE)”.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do want to put your stack into a segment, then you simply assemble a big buffer, put a label at the end of it, and store that label in sp.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Parameter passing and calling conventions&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parameters are passed to functions on the parameter stack. In general, parameters are pushed from left to right, so the rightmost parameter is the last one pushed (and therefore the one at the lowest position on the parameter stack). Provided that there are no local variables, the last parameter is at offset zero on the parameter stack.&#xA;Parameter passing in presence of a prototype&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In presence of a prototype, parameters are pushed as their respective types. This does especially mean that characters are pushed as such and are not promoted to integers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Parameter passing without a prototype&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If no prototype is available, the default promotions are applied before pushing parameters. This means that characters are promoted to integer before pushing them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Variable argument lists&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parameters in variable argument lists (ellipsis, …) are treated the same as if there were no prototype.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;The ''fastcall'' calling convention&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a function is declared as &lt;strong&gt;fastcall&lt;/strong&gt; (or fastcall), the last (rightmost) parameter is not passed on the stack, but passed in the primary register to the called function. This is A in case of an eight bit value, A/X in case of a 16 bit value, and A/X/sreg in case of a 32 bit value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the called function is a C function, its first instruction will be a call to one of the push functions to push the passed value onto the stack. This means that for C functions fastcall doesn't make the code really faster. Assembler functions however, can take advantage of the values passed in registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although fastcall doesn't help making C functions faster it usually helps making the whole program somewhat smaller as all the callers of a fastcall function can omit one call to a push function.&#xA;Callee cleans up the stack&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Contrary to most other C compilers, the callee is responsible for cleaning up the stack (dropping stack space used for parameters) before returning. This is done in order to generate smaller code, since dropping parameters can in many places be combined with dropping local variables.&#xA;Examples&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following example assume that there are no local variables. Presence of local variables would change the stack offset of the parameters in the function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Prototype:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void foo (unsigned bar, unsigned char baz);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Stack layout within the function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;           +------------------+&#xA;           | High byte of bar |&#xA;Offset 2 -&amp;gt;+------------------+&#xA;           | Low byte of bar  |&#xA;Offset 1 -&amp;gt;+------------------+&#xA;           | baz              |&#xA;Offset 0 -&amp;gt;+------------------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Example code for accessing bar. The variable is in A/X after the code snippet:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ldy     #2              ; Offset of high byte of bar&#xA;    lda     (sp),y          ; High byte now in A&#xA;    tax                     ; High byte now in X&#xA;    dey                     ; Offset of low byte of bar&#xA;    lda     (sp),y          ; Low byte now in A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-01-26T23:39:18.937" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2181" PostTypeId="1" CreationDate="2017-01-27T00:49:05.427" Score="6" ViewCount="264" Body="&lt;p&gt;I have an old dead Zenith SupersPort 286e and it an a really high quality mechanical keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The keyboard is connected to the motherboard with a 24 pin ribbon cable of approximately 3.15 cm of width.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to use this keyboard for another project that uses modern computer components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to know if there is a way to use this keyboard on a modern system (via USB maybe) and if there is an available pinout for this ribbon connector.&lt;/p&gt;&#xA;" OwnerUserId="2109" LastActivityDate="2018-08-18T22:28:29.587" Title="Zenith SupersPort 286e 24 pin ribbon cable keyboard to modern computer" Tags="&lt;keyboards&gt;&lt;zenith-supersport&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2182" PostTypeId="2" ParentId="2068" CreationDate="2017-01-27T03:04:13.807" Score="0" Body="&lt;p&gt;I went to an electronics shop where the owner mapped the connections and replaced the D-Sub connector, which fixed the mouse. So using an ohmeter as recommended by Dave Tweed is the way to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing I discovered upon closer inspection of the Amiga mouse PCB is that the soldering points labels (1 or 2 letters) actually indicate which wire to solder to each point according to its color. So here are the matching soldering points-wire color combination for the main PCB:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;The format is Label = Wire color.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;w = White wire&lt;/li&gt;&#xA;&lt;li&gt;pu = Unused&lt;/li&gt;&#xA;&lt;li&gt;bk = Unused&lt;/li&gt;&#xA;&lt;li&gt;Pu = PUrple wire &lt;/li&gt;&#xA;&lt;li&gt;Ye = YEllow wire&lt;/li&gt;&#xA;&lt;li&gt;re = REd wire&lt;/li&gt;&#xA;&lt;li&gt;br = BRown wire&lt;/li&gt;&#xA;&lt;li&gt;or = ORange&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The left and right click PCB doesn't use the same labelling scheme:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;U = Blue&lt;/li&gt;&#xA;&lt;li&gt;L = Dark blue&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2109" LastActivityDate="2017-01-27T03:04:13.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2183" PostTypeId="1" AcceptedAnswerId="2184" CreationDate="2017-01-27T05:30:00.517" Score="6" ViewCount="811" Body="&lt;p&gt;Apologies if this is not the right place to ask this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I was in high school in the early 90s (maybe 1992 or so), they took us on a field trip to what I think was a government R&amp;amp;D center of some sort. One guy showed us an optical mouse which had a transparent window with &quot;crosshairs&quot; on it. I believe that it was used to &quot;trace&quot; drawings or schematics that were on paper, so as to digitize them, or maybe aid in the creation of new drawings (the same guy showed us a large color plotter). I have no idea to what kind of system it was all connected. They also had some pretty old stuff at that place, like those big reel tape drives and 8&quot; floppies (already obsolete back then), but they seemed to be somewhat proud of the plotter, and the optical mouse was ahead of its time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remembered this the other day while watching a YouTube video about a very early optical mouse. I tried googling, but I couldn't find anything like what I saw. Do keep in mind that I was a kid back then, and this was some 25 years ago, so my memories are probably less than perfect. Considerably less.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know of any mouse or device like that?&lt;/p&gt;&#xA;" OwnerUserId="4366" LastEditorUserId="4921" LastEditDate="2020-01-16T06:33:44.197" LastActivityDate="2020-10-10T03:17:11.020" Title="Identify an early 90s optical mouse" Tags="&lt;mouse&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2184" PostTypeId="2" ParentId="2183" CreationDate="2017-01-27T08:07:00.543" Score="17" Body="&lt;p&gt;I think you are referring to what was back then called a &lt;a href=&quot;https://en.wikipedia.org/wiki/Graphics_tablet&quot;&gt;digitizer&lt;/a&gt;. I believe they were mainly for &lt;a href=&quot;https://en.wikipedia.org/wiki/Computer-aided_design&quot;&gt;CAD&lt;/a&gt;, but maybe someone who has experience with one could explain how they were used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At first when I read your question I thought of the old optical mice (not opto-mechanical mice that had a mouse ball) that used a special &lt;a href=&quot;https://en.wikipedia.org/wiki/Mouse_Systems&quot;&gt;mirrored mousepad with a grid&lt;/a&gt;. Sun workstations used these a lot, but they were also available on PCs.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-01-27T08:07:00.543" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2186" PostTypeId="2" ParentId="2183" CreationDate="2017-01-27T08:43:48.330" Score="16" Body="&lt;p&gt;Graphics digitisers like this were not optical, they were magnetic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KUefq.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KUefq.jpg&quot; alt=&quot;Graphics Tablet&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tablet contained a grid of wires which encoded a small magnetic signal.&lt;br&gt;&#xA;You moved either a stylus or, as you say, a device with cross-hairs over the tablet.&lt;br&gt;&#xA;As you pressed a button on the stylus, it picked up the coordinates and fed them to the computer.&lt;br&gt;&#xA;The coordinates could be picked up with great accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple made such a tablet for the Apple ][ and there were models for the HPIB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did see an optical model sold that had a row of LEDs along top and left edges, and detectors on the bottom and right.  These passed into history quite quickly.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2017-01-27T08:43:48.330" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2188" PostTypeId="2" ParentId="2172" CreationDate="2017-01-27T11:06:30.760" Score="10" Body="&lt;p&gt;This clearly needs a &quot;depends&quot; answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are known places where I wouldn't even dare to switch on a computer without replacing caps first - The Sinclair ZX Spectrum series is such a candidate - It features an analogue voltage step-up circuit for the memory supply voltage generation that is known to be able to simply fry all of your otherwise perfectly working memory at the first power-on when some of the caps in the circuitry have lost capacity. Those caps are a &lt;strong&gt;must to replace&lt;/strong&gt; before doing anything else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Others, I'd just keep an eye on - I have some Atari STs that I tend to open every three years or so for a check and never had any problems with the large caps in the PSU circuitry. No need to fix anything that isn't broke here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Batteries&lt;/strong&gt;, especially of the rechargeable type, are a different story. I &lt;em&gt;generally&lt;/em&gt; replace them with off-PCB battery holders as outlined in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2112/appropriate-battery-replacement-for-my-a3000&quot;&gt;another question&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because comments have asked for it:&#xA;The ZX Spectrum's memory power supply (generated on the main logic board) is an ingenious piece of circuitry that is able to generate +12V, -12V and -5V supply voltages for the memory chips (and other CMOS logic on the main board) from a +9V DC and a +5V DC (generated from a straightforward 7805 linear regulator) input with just a handful of components. Part of its ingeniousness is an oscillating circuit based on TR4, a small transformer and a couple of capacitors (and is a perfect example how Sinclair managed to sell computers at revolutionary low prices)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6O01v.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6O01v.png&quot; alt=&quot;ZX Spectrum Charge Pump&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The downside of this ingeniousness is that it has an in-built capability to self-destruct: in case the oscillation doesn't start (for whatever reason, typically caps that have lost capacitance), TR4 and/or TR5 will die of over-current, and the circuit may deliver 9V to the -12V inputs of the memory chips which can't really stand that for long...&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2017-02-05T10:22:02.777" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2189" PostTypeId="2" ParentId="2146" CreationDate="2017-01-27T12:15:23.290" Score="1" Body="&lt;p&gt;I believe the simple concise answer is so it could synchronize with the video signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This meant totally smooth 50/60hz scrolling and also let it overlay graphics on the signal if you had a genlock.&lt;/p&gt;&#xA;" OwnerUserId="4370" LastActivityDate="2017-01-27T12:15:23.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2190" PostTypeId="1" AcceptedAnswerId="2199" CreationDate="2017-01-27T20:04:32.237" Score="7" ViewCount="652" Body="&lt;p&gt;Among other early computers, the Apple II and IBM PC made the consequential decision to provide internal expansion slots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How much did this add to manufacturing cost? Intuitively, it seems like it should add quite a bit, but I don't really know, and I'd like to get some idea at least to an order of magnitude.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-04-27T21:02:05.480" Title="Cost of expansion slots" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;history&gt;&lt;ibm-pc&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2191" PostTypeId="2" ParentId="1925" CreationDate="2017-01-27T20:29:22.373" Score="6" Body="&lt;p&gt;Technically, the most up to date modern fork of otx is being maintained by Zhi-Wei Cai on GitHub &lt;a href=&quot;https://github.com/x43x61x69/otx&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.  v1.7: Build 566 or a fresh clone of master should work on any modern OS X system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But that's not why we're here.  This is Retrocomputing Stack Exchange after all.  The most recent fork of otx which works on legacy OS X platforms is probably the &lt;a href=&quot;https://github.com/linuxaged/otx&quot; rel=&quot;noreferrer&quot;&gt;linuxaged fork&lt;/a&gt;.  I also realized an &lt;a href=&quot;http://web.archive.org/web/20130829145110/http://otx.osxninja.com/builds/trunk/&quot; rel=&quot;noreferrer&quot;&gt;archive of the original svn server&lt;/a&gt; is available on the Wayback Machine.  This provides otx 0.16b which works for reverse engineering PowerPC binaries.&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2017-01-27T20:29:22.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2192" PostTypeId="2" ParentId="2190" CreationDate="2017-01-27T20:51:19.230" Score="9" Body="&lt;p&gt;If you want to think about cost of manufacturing, you would have to figure in not only cost of the connectors but also motherboard layout, space in the computer (to accommodate width/height of internal expansion cards) and possibly increased wattage of the power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I don't think you can measure cost here and frankly I don't think that was the real focus. I would think it was more because of the evolving technology of personal computers at the time and that people were still coming up with new ideas of how to use these tools; if you as a manufacturer decided not to include slots, the consumer could only expand to what was made available port wise. The original Mac tried to take this approach by requiring special tools to open (and then not having any user servicible parts inside) and thus it made it very difficult to expand; you only had serial ports and an external disk drive for the most part as there was no RAM expansion capability. Heck, even adding a hard drive to those machines was a bit of a hack and not very performant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In comparison, the open architecture might have come from two places:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The S-100 bus model. The Altair 8800 and derivatives didn't have ANY ports and thus the only way you could expand the thing was by installing expansion cards. I assume this was not so much because of a &quot;free and flexible&quot; design but rather they hadn't come up with everything yet (e.g. video card or serial ports). These expansion cards eventually appeared, but not always from the manufacturer (e.g. Cromemco video worked in an Altair machine).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Trying to keep cost down while allowing for flexibility to have your dream machine if you wanted it. The Apple II didn't have a disk at first, but frankly you could have survived with just the cassette ports. It didn't have a serial port, printer port or a hard drive, but you could add those things if you wanted and incur the cost at that point. These machines weren't cheap when they came out - imagine how stratospheric the cost would have been if they had these things from the factory? It isn't like there was much to bulk discount with suppliers when they were still a curiosity to most and thus only selling in the thousands at times (compared to today when Dell probably sells thousands an hour).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;On the other hand, then why did the Sinclairs, Commodores and Ataris not have slots? I think we might blame organizations like the FCC as there was a point in the late 70's into early 80's where RF emissions were a major concern and thus these machines needed to be fully shielded thus making it hard to allow expansion slots. I believe the designers of the Atari 400/800 wanted slots but because of their fears of failing FCC tests they had to encase the motherboard in heavy shielding and thus only had a small opening to the outside world in the form of their SIO port. Eventually, companies like Atari had enough ecosystem built around the SIO model that they didn't bother to go back to slots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For what its worth, Apple originally ignored the FCC bits since I think there was a loophole about it not being a consumer appliance or something, but regardless the rules were refined and better understood over the next few years. As well, if the designer/manufacturer was OK with having a large device, they could build that shielding into their big cases. I would suspect that Sinclair/Atari/Commodore didn't go that route simply because bigger means more expensive and they were trying to keep these things within the budgets of everyday people.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2017-01-27T20:51:19.230" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2193" PostTypeId="1" AcceptedAnswerId="2198" CreationDate="2017-01-27T21:09:07.610" Score="28" ViewCount="2246" Body="&lt;p&gt;Early color computers typically had a limit of X colors used simultaneously from a palette of Y, a classic example being the Commodore 64 which could do 320x200 monochrome or 160x200 four colors, chosen from a palette of sixteen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The limitation on the number of colors used simultaneously is a straightforward matter of memory bandwidth: it just wasn't possible (within the budget of a home computer) to pump more bits to the video chip per frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the reason for the limited palette size? Intuitively it would seem straightforward to e.g. have a palette of 65536 colors; it would just be a matter of having a few 16-bit registers in the video chip, easy enough even given the technology of the day. The resolution of the digital to analog conversion circuitry would need to be improved, but that doesn't seem like it should cost very much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-11-08T07:41:43.237" Title="Limiting factor on early color palettes" Tags="&lt;history&gt;&lt;graphics&gt;&lt;color-display&gt;" AnswerCount="10" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2194" PostTypeId="2" ParentId="2193" CreationDate="2017-01-27T21:18:19.573" Score="3" Body="&lt;p&gt;I think a big part of the answer is that it was good enough at the time. Given the crudity of the resolution and number of simultaneous colors, having a bigger palette wouldn't have added much to the overall experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Games at the time were more primitive (though they always pushed the limits), and basic business charts and graphs can still be quite useful with a small palette.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, generating good, repeatable colors with NTSC on cheap hardware isn't so easy. Keeping it to the basic fully saturated &quot;guy colors&quot; of red, green, blue, yellow, black, white, etc. is easier to achieve.&lt;/p&gt;&#xA;" OwnerUserId="550" LastActivityDate="2017-01-27T21:18:19.573" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2195" PostTypeId="2" ParentId="2193" CreationDate="2017-01-27T21:47:30.027" Score="28" Body="&lt;p&gt;What you're missing is that early computers didn't generate their video signals the way that modern computers do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're probably picturing a C64 working in much the same way that a &lt;a href=&quot;https://en.wikipedia.org/wiki/Video_Graphics_Array&quot;&gt;VGA adapter&lt;/a&gt; does: you specify a color index to RGB mapping, and a digital-to-analog converter looks up that mapping and generates appropriate red, green, and blue signal values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Color computers didn't work that way.  Generally, they synthesized a &lt;a href=&quot;https://en.wikipedia.org/wiki/Composite_video&quot;&gt;composite video&lt;/a&gt; signal directly in the analog domain by modifying the color carrier; there &lt;em&gt;is no digital-to-analog converter&lt;/em&gt;.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_VIC-II#Colors&quot;&gt;VIC-II&lt;/a&gt;, for example, used an analog adder to combine four versions of the carrier in appropriate proportions to produce its 16 colors; each color had a (mostly) independent circuit.  Increasing the number of available colors isn't just a matter of adding a few lookup registers; you'd also need to add the circuitry to turn those registers into YIQ/YUV values.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2017-01-27T21:47:30.027" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2196" PostTypeId="2" ParentId="2193" CreationDate="2017-01-27T21:47:48.593" Score="3" Body="&lt;p&gt;In many systems, the colour palette was fixed. This was either because they were easy to generate on the available hardware components or because it was easier to hard-code them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take the Commodore 64 as an example. This computer used the MOS VIC-II to render the video, which determined its video modes and colour palette. The palette was chosen mostly arbitrarily; it was a YPbPr palette where the Pb and Pr coordinates were sine and cosine (respectively) of angles multiples of one sixteenth of a circle, and many colours were opposite others in the NTSC colour wheel to save on resistor values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II uses a different technique. It exploits NTSC colour artefacts to generate colours cheaply. In hi-res graphics, horizontally adjacent colours are averaged on NTSC displays, so two colours are outputted per carrier cycle. When an odd pixel is on and an even pixel is off, the displayed colour of the pixels is green; switching them gives purple. When both are on the colour is white, and when both are off the colour is black. By shifting these a half-pixel, orange and blue can also be produced, giving a total of 8 colours (including two whites and two blacks, which were visually identical but produced different artefacts at areas of contrast). Low-res graphics are created using the text generator circuitry, allowing up to 16 colours (including two identical greys) but at the same resolution as text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Colour generation was often optimised for simplicity at the hardware level and, by extension, manufacturing price. This means that you can manipulate it at a low level in unintended ways, but it also comes with restrictions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further information:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.pepto.de/projects/colorvic/2001/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore VIC-II Color Analysis (Preview)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.colodore.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;colodore&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.applefritter.com/content/apple-ii-hi-res-pictures&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple II Hi-Res pictures | Applefritter&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-02-04T15:37:19.883" LastActivityDate="2017-02-04T15:37:19.883" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2197" PostTypeId="2" ParentId="2193" CreationDate="2017-01-27T21:53:21.930" Score="11" Body="&lt;p&gt;First, the Commodore 64 could do better than 320x200 in monochrome.  Without any special tricks, it could display two colors per 8x8 cell at that resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One reason of the limited color palette comes down to how much logic you could cram into one chip.  Take the Atari 800.  It was able to produce roughly 128 colors (later, 256) but it actually had TWO chips.  One to render the monochrome image and the other to add color, sprites, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VIC-II in the Commodore 64 is just one chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another reason is that a disproportional area of the VIC-II chip was dedicated to sprite rendering.  The Commodore 64 had some of the best sprites of any 8-bit machine and that sprite ability came at a cost.  Reduced functionality in other areas of the VIC-II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VIC and VIC-II were never really designed for advanced computers.  They were designed BEFORE the Commodore 64 was out (late 70's, early 80's).  They were also mainly designed for things like computer kiosks and early arcade machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, look at the Apple II.  The fact that Apple had COLOR AT ALL in a &quot;somewhat&quot; affordable machine in the late 70's is amazing.  But the Apple II cheats by using NTSC artifact fringing.  Which severely limits the number of available colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other 8-bit machines had similar issues.  They were designed either too early for advanced graphics or made way too cheap for them (i.e., Mattel Aquarius).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the 16-bit machines came along (not counting B/W Macintosh), around 1985 or so, color was much more &quot;doable&quot;.  And you start seeing real color DAC's, etc.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-01-27T21:53:21.930" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2198" PostTypeId="2" ParentId="2193" CreationDate="2017-01-28T00:20:19.820" Score="22" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What's the reason for the limited palette size? Intuitively it would&#xA;  seem straightforward to e.g. have a palette of 65536 colors; it would&#xA;  just be a matter of having a few 16-bit registers in the video chip,&#xA;  easy enough even given the technology of the day. The resolution of&#xA;  the digital to analog conversion circuitry would need to be improved,&#xA;  but that doesn't seem like it should cost very much.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;What am I missing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Long story short: to minimize design, test and manufacturing costs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story: IMHO, there are some factors that limit both the number of distinct colors (entries) a palette can have, and the size (number of bits( of a palette entry:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Of course, more colors means more bits per pixel, and memory was a scarce resource. But in addition, there is something more that must be taken into account: the more entries a palette have, the more complex is the management of the LUT that translates from an entry to an actual color:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A LUT is seen as a ROM (fixed palette) or RAM (user defined palette). Such LUT needs a decoder with 2&lt;sup&gt;N&lt;/sup&gt; outputs (where N is the number of bits of a pixel). So, for a 4bpp, the LUT needs to be implemented with a 1:16 decoder. For a 8bpp, you need a 1:256 decoder. The more outputs a decoder needs, the more space it will need inside the video chip. Take into account that this LUT will be accessed at the frequency of the pixel clock (if not faster), so the LUT decoder cannot be implemented by chaining together several smaller decoders, as this would introduce a very long propagation time, but with one big decoder.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Besides, an user defined palette needs the LUT to be implemented with RAM. RAM that would be read by the video engine, possibly at the same time the CPU writes a new value to one of their entries. A small LUT can be implemented with latches and muxes so a read operation can be performed at the same time as a write operation (dual port memory), but if the number of entries increases (and every added bit to the color of a pixel doubles the number of entries), implementing a dual port memory becomes harder with the space constraints in a chip of that time.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Leaving aside full custom implementations, like the VIC-II chip, most video chips were implemented using some form of gate array, which is a digital-only device, so no internal DACs were possible, which also means that a N bit color would need N pins at the gate array that would be connected to some form of DAC. To simplify the design (and to reduce manufacturing costs), dual in line chips were used as gate arrays (ULA in the Spectrum and Oric, GA in the Amstrad CPC), and these come normally with a pin limit of 40 - 48 pins. After reserving pins for power, clock, data, address, sync signals, etc, there were a few pins left to output the video signal in digital form. A 16-bit color signal would eat 33% of the available pins of a 48 pin gate array. The Amstrad CPC gate arrray, for example, used a trick to have 3 possible states per output pin, allowing 27 unique colors with 3 pins. This was possible by driving each output pin high, low, or leaving it in high impedance state. A resistor divisor placed at each pin would generate three different voltages for each state, thus 3&lt;sup&gt;3&lt;/sup&gt;=27 colors.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;16 or 24 bit palette entries would need either more I/O memory locations (or I/O ports for the Z80 architecture), or a more complex I/O decoding implementation. Both approaches would go against system simplification and cost reduction, as it was usual to do lazy decoding to reduce glue logic gate count. OTOH, a palette entry wider than 8 bits would need some more code to initialize it, and games that would use several palettes would need more RAM to store such palettes. And don't forget that memory was a scarce resource.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some machines, like the Oric Atmos, generated their own composite video signal with discrete components instead of using an off-the-shelf PAL encoder (LM1889, MC1377, etc). The key component of Oric's PAL encoder is a small PROM that uses the R,G,B and SYNC signals from the ULA (among others) to get a composite video signal straight from the PROM output data, after D/A conversion. Using more bits for R,G or B would have a bigger (and possibly more expensive) PROM to be needed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2017-01-28T11:02:12.703" LastActivityDate="2017-01-28T11:02:12.703" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2199" PostTypeId="2" ParentId="2190" CreationDate="2017-01-28T00:49:16.760" Score="12" Body="&lt;p&gt;Connectors are surprisingly expensive when you build a device:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The part itself is usually quite pricey, relative to other components.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;They require a different assembly step and tooling.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Testing can not always be automated.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;They present complexity in routing, especially in old systems where connectors expose the whole bus.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;They require additional components, to deliver power but also buffer the signals.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When analog signals are also present on connectors, care must be given to make sure that nearby digital signals don’t introduce noise. On the board the sections are usually separated but in a connector, sometimes the two worlds get in close proximity.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Ports are one of the first things to be looked at when redesigning boards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A funny annecdot: when Atari designed the portable ST, they had musicians in mind as the machine was popular with its MIDI ports; to make it smaller and cheaper, they removed the cartridge port; on the ST, the company that relied the most on it for its products was Steinberg... The leader, at the time, in music software :)&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2017-01-28T00:49:16.760" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2200" PostTypeId="2" ParentId="2193" CreationDate="2017-01-28T05:38:10.857" Score="9" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Color_Graphics_Adapter&quot; rel=&quot;noreferrer&quot;&gt;CGA&lt;/a&gt; (1981) monitors have digital TTL RGBI inputs (red, green, blue, and intensity), giving you a fixed palette of 16 (2&lt;sup&gt;4&lt;/sup&gt;) colors:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;## | I R G B | Color&#xA;---+---------+--------------&#xA; 0 | 0 0 0 0 | black&#xA; 1 | 0 0 0 1 | blue&#xA; 2 | 0 0 1 0 | green&#xA; 3 | 0 0 1 1 | cyan&#xA; 4 | 0 1 0 0 | red&#xA; 5 | 0 1 0 1 | magenta&#xA; 6 | 0 1 1 0 | yellow&#xA; 7 | 0 1 1 1 | light gray&#xA; 8 | 1 0 0 0 | dark gray&#xA; 9 | 1 0 0 1 | light blue&#xA;10 | 1 0 1 0 | light green&#xA;11 | 1 0 1 1 | light cyan&#xA;12 | 1 1 0 0 | light red&#xA;13 | 1 1 0 1 | light magenta&#xA;14 | 1 1 1 0 | light yellow&#xA;15 | 1 1 1 1 | white&#xA;--+----------+--------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So in this case, the palette was a hardware limitation, specifically in the monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Enhanced_Graphics_Adapter&quot; rel=&quot;noreferrer&quot;&gt;EGA&lt;/a&gt; (1984) was also &lt;a href=&quot;https://en.wikipedia.org/wiki/Quantization_(signal_processing)&quot; rel=&quot;noreferrer&quot;&gt;quantized&lt;/a&gt; like CGA but supported 4 voltage levels (2 bits) per R, G, and B for a total of 64 colors (4&lt;sup&gt;3&lt;/sup&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, &lt;a href=&quot;https://en.wikipedia.org/wiki/Video_Graphics_Array&quot; rel=&quot;noreferrer&quot;&gt;VGA&lt;/a&gt; (1987) abandoned digital signal levels and switched to analog. Then the limitation on the number of colors was no longer in the monitor but in the VGA circuitry itself. Standard VGA supported a palette of 6 bits per pixel and color (2&lt;sup&gt;6*3&lt;/sup&gt;) for a total of 262,144 colors, but only 256 of those colors could be used per frame. Later, &lt;a href=&quot;https://en.wikipedia.org/wiki/High_color&quot; rel=&quot;noreferrer&quot;&gt;high color modes&lt;/a&gt; supported 16 bits per pixel (2&lt;sup&gt;16&lt;/sup&gt; = 65,536 colors, usable in a single frame) and then 24 bits (2&lt;sup&gt;24&lt;/sup&gt; or ~16.7 million colors). All of this was possible using the same monitors as standard VGA because those monitors were all analog.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But back to 8-bit computers, the Atari 2600 (1977) had a palette of 128 colors (NTSC) or 104 colors (PAL) and could display all of these colors in the same frame, without a &lt;a href=&quot;https://en.wikipedia.org/wiki/Framebuffer&quot; rel=&quot;noreferrer&quot;&gt;framebuffer&lt;/a&gt;, by providing a way for the programmer to synchronize with the electron gun and change the colors of the background, playing field, and 2 sprites and 2 missiles from one scanline to the next. (See &lt;a href=&quot;https://www.youtube.com/watch?v=04Wk9Oi_Fsk&quot; rel=&quot;noreferrer&quot;&gt;this demo&lt;/a&gt; for some examples.) Later 8-bit computers with framebuffers could only display 16 colors on the screen at a time. How's that for progress? :-)&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="357" LastEditDate="2017-01-28T17:13:24.233" LastActivityDate="2017-01-28T17:13:24.233" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2201" PostTypeId="1" AcceptedAnswerId="2202" CreationDate="2017-01-28T18:44:56.997" Score="33" ViewCount="1942" Body="&lt;p&gt;This is an unusual question since I'll answer it right away because it was a truly unique device and there is absolutely nothing about the technology it used on the internet. I spoke with the hardware designer, and for the first time we can understand how it worked.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The DCTV is a hardware device from &lt;em&gt;Digital Creations&lt;/em&gt; that connects to both the video port and the parallel port of an Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is able to output a picture with full color video composite quality and also digitize a composite video signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was released in 1991 for $495 in the USA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JgX7H.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JgX7Hm.jpg&quot; alt=&quot;DCTV Advertising&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specs are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;DCTV - Digital Composite Television - turns digital data from the RGB port to composite television signal&#xA;uses the RGB port as an I/O port for sending compressed video information:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the information is encoded into special Amiga display screens that DCTV recognises by a signature in the upper-left corner&lt;/li&gt;&#xA;&lt;li&gt;these screens contain the digitized and compressed form of the analogue waveform data required to create the composite display&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the resulting composite image quality is far better and much worse than a normal Amiga RGB display:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;for pictures that contain a lot of color changes (like photographic materials) the quality is as good as everyday television&lt;/li&gt;&#xA;&lt;li&gt;in case of pictures with a lot of detail (like text) the display is blurry&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;uses the Amiga RAM as framebuffer - requires at least 1 MB of memory for functioning&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;supports resolutions from 640×200 to 736×482/566 (NTSC/PAL) in 24 bit&lt;/li&gt;&#xA;&lt;li&gt;slow scan video digitizer - captures a still video frame in 6 to 10 seconds&lt;/li&gt;&#xA;&lt;li&gt;the parallel port is used for sending digitized images to the Amiga&lt;/li&gt;&#xA;&lt;li&gt;composite (RCA) input and output&lt;/li&gt;&#xA;&lt;li&gt;DB23 RGB connector passthrough for connecting two monitors at the same time - one for the Amiga (RGB) and one for the DCTV (composite)&lt;/li&gt;&#xA;&lt;li&gt;although DCTV does not interfere with normal genlock operation, its output cannot be fed into a genlock without the DCTV RGB Converter&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here is the device:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6f9an.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6f9anm.jpg&quot; alt=&quot;Photo of the DCTV device&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pass-through connector would go on the video output port and the monitor cable would go on the other side, while the second connector would go on the parallel port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a &lt;a href=&quot;http://www.youtube.com/watch?v=rmtL1sJa478&amp;amp;t=0m44s&quot;&gt;YouTube video&lt;/a&gt; showing it in action.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would take the regular frame buffer output, displayed as is from the Amiga, in which you could kind of see the shape of the final picture, and turn it into a full color image.&#xA;The onscreen display was spectacular, but I could never figure out how it was working.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastEditorUserId="278" LastEditDate="2017-01-28T19:43:41.410" LastActivityDate="2019-01-24T03:48:27.600" Title="How did the Amiga DCTV work" Tags="&lt;amiga&gt;&lt;video&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2202" PostTypeId="2" ParentId="2201" CreationDate="2017-01-28T18:44:56.997" Score="29" Body="&lt;p&gt;After some research, I found the hardware engineer that built the DCTV and we exchanged some messages where he explained the system.&lt;/p&gt;&#xA;&lt;p&gt;This is the unedited text:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Wow, it has been a long time... I didn't really remember! Luckily I still have all the lab books and design notes from those days filed away. We used a technique that encoded the data on two consecutive lines in the Amiga frame buffer in a way that we could reconstruct a composite video signal when run through some processing and combined with data from the previous line (delayed through a line memory). I know that is pretty ambiguous, but it is a general description. I will describe in more detail below, but it assumes some familiarity with NTSC composite video signals.&lt;/p&gt;&#xA;&lt;p&gt;In more detail:  Amiga had a frame buffer mode that displayed 736x483 pixels, but only 4-bits per pixel (16 colors).  We used that mode, but re-interpreted the data.  We combined alternate pixels so that we had 8-bits per pixel at half the rate.  Even (I think) lines stored data as Y + (R-Y), Y - (R-Y), etc. [Luma +/- red color difference value, alternating] at a 7.159MHz sample rate.  Odd lines stored data as Y + (B-Y), Y - (B-Y), etc. [Luma +/- blue color difference value, alternating], logically shifted by half a 7.159MHz sample.  So every line would contain every other raw sample for an NTSC composite video signal.  In order to reconstruct the missing data, it would generate the Y component by averaging the values left and right of the missing sample, and the chroma component by subtracting the two adjacent samples from the previous line.  The final value was created by adding these values together.  The resultant data stream was at 14.318MHz and contained Y+(B-Y), Y+(R-Y), Y-(B-Y), Y-(R-Y), etc.  When converted to analog and added sync and so on the resulting signal was a full color composite signal that looked surprisingly good.&lt;/p&gt;&#xA;&lt;p&gt;So it was really a way to get full color out of the Amiga frame buffer by applying some signal processing techniques to trade off spatial resolution for increased colors.  Instead of a frame of 736x483 pixels of 16 colors, we got an effective resolution of about 368x483 pixels of full NTSC type color.  Chroma resolution was less (as with any composite NTSC type signal), including somewhat less resolution vertically.  But it looked pretty good by 1990 standards!  We found that we could even stream data off a fast (for the time) hard drive in real time, and used to demo by playing back scenes from &amp;quot;Back to the Future&amp;quot; at trade shows. Fun times.&lt;/p&gt;&#xA;&lt;p&gt;Actually we may have used the 704x483 graphics mode... I got he 736 number from Wikipedia, but I am not sure it is correct.  704 sounds more right.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Then me asking a bit more:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You have cleared a mystery that was popping back in my mind now and then! It is true that for the time, the output was very good! so you could probably fit the decoding logic in a cpld?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And he replied:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The decoding logic fit in a 3000 series Xilinx FPGA.  The line memory was external, along with the D to A converter and a few other things like a PLL for the pixel clock.  I think the final product had an A to D converter for grabbing images from an external video source as well...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I will let him know about this thread just in case there are more questions, to see if he wants to participate.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-01-29T05:34:29.493" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2203" PostTypeId="1" AcceptedAnswerId="2204" CreationDate="2017-01-28T19:01:09.697" Score="6" ViewCount="256" Body="&lt;p&gt;DECNet was a network system for DEC computers, introduced in the mid to late seventies. What physical connector did it use? Was it possible to connect to such a network using just an RS-232 serial port, or was it only for machines equipped with some proprietary port?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-01-30T13:23:02.477" Title="DECNet physical connector" Tags="&lt;rs232&gt;&lt;dec&gt;&lt;network&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2204" PostTypeId="2" ParentId="2203" CreationDate="2017-01-28T20:30:57.963" Score="11" Body="&lt;p&gt;DECnet is more of a protocol suite than a physical hardware standard.  So asking what kind of physical connector it uses is kind of like asking what kind of physical connector TCP/IP uses -- the answer is, it uses whatever connector you need to use for the particular data link layer you're running DECnet on top of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are running DECnet over Ethernet, then the Ethernet will dictate what kind of connector you need.  Thickwire used a vampire tap transceiver.  Thinwire used a BNC tee connector.  UTP used an RJ-45 connector (the RJ-45 connector survived the upgrade from 10Mbps to 100Mbps Ethernet, and again from 100Mbps to gigabit Ethernet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are running DECnet over a slow serial link, RS-232 is probably the connector you need.  Faster links (leased lines, T1 connections, etc.) may have used different connectors but I don't know enough about those to give a detailed answer (last time I used a T1 it was on an RJ-45 connector but I don't know if they always used that or if the RJ-45 replaced an earlier connector).&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-01-28T20:30:57.963" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2205" PostTypeId="1" AcceptedAnswerId="2206" CreationDate="2017-01-29T00:02:07.810" Score="14" ViewCount="1239" Body="&lt;p&gt;Suppose you were, in the early eighties, designing a color computer to run on an NTSC TV with a free hand to choose the specifications within the limits of the technology of the time. What would be the ideal resolution?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NTSC has 262.5 scan lines, but not all are visible; for reliable full visibility on all TV sets, you don't want to go much over 200, so e.g. the Commodore 64 went for 200 and the Atari 800 for 192.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Horizontal resolution looks trickier. The color clock cycles 227.5 times per scan line, so that suggests horizontal resolution should be a bit less than that, maybe just over 200. On the other hand, the Commodore 64 did 320 and seemed okay. On the third hand, my experience with that was on PAL, which offers higher resolution and better color reproduction at the cost of lower frame rate. I don't know how good the color display was on NTSC. The relationship between the color clock and pixel resolution is, I gather, subtle, complicated and difficult to grasp for one not thoroughly versed in that art.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you actually get better results when you make the horizontal resolution exceed the NTSC color clock? If so, er, how is that possible? If not, does that mean it was pointless for the Commodore 64 to go 320?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For that matter, I remember looking up close at a TV screen (though PAL again) and seeing the pixels, each composed of three vertical stripes, red, green, blue. I would have thought the pixel resolution of the screen would be highly relevant in discussions like this, but it never seems to get mentioned. What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-20T07:52:12.287" Title="Ideal resolution for color computer on NTSC" Tags="&lt;graphics&gt;&lt;ntsc&gt;&lt;color-display&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2206" PostTypeId="2" ParentId="2205" CreationDate="2017-01-29T01:10:14.247" Score="12" Body="&lt;p&gt;The pixel clock doesn't have to be the same as the color clock. In fact, it's usually higher. Remember that in a composite video signal, the chrominance information (whose resolution depends upon the color clock) is less important than the luminance information (whose resolution depends upon the pixel clock), so the color clock can be (and usually is) slower than the pixel clock. Color information is actually subsampled, as in JPG files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were to design a video mode with NTSC output in mind, I would start with the color clock, which for NTSC is 3.57 MHz (aprox.) As discussed, you can have the pixel clock to be faster. Ideally, an integral multiple of this color clock. This way, some interferences such as &quot;crawling dot&quot; are avoided. This particular interference is present when the color clock is not in phase with the pixel clock, and this happens when both clocks are not depended one each other. An ideal design should use a single clock to derive both pixel clock and color clock for the NTSC encoder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time, 4xNTSC crystals (14.31818Mhz) were usual and cheap, so I would pick my pixel clock to be that value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you notice, NTSC vertical resolution is 262.5 scanlines. NTSC interlace signal is not a big deal, but most retro computers use the vertical retrace period to trigger an interrupt, and game developers (at the time) would prefer this interrupt to have always the same period (measured in scanlines, or CPU cycles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I would design with a 262 scanline picture in mind, and using NTSC progressive scanning (always outputting the same field).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, all the scanlines are not visible. A safe approach would be to take 240 visible scanlines, which is, not by chance, half the standard NTSC resolution, and center them on the screen. That would give us an upper and lower overscan area of (262-240)/2 = 11 scanlines. Some of these scanlines are actually part of the vertical blanking period, so I would except the number of scanlines at the bottom of the image to be less than the number at the top of it, if you want to keep the pixel addressable area centered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This, in addition to the 4:3 aspect ratio, yields a horizontal resolution of 320 pixels, so my screen resolution would be 320x240 with a border, or overscan area that would cover the rest of the picture. The standard NTSC resolution is 640x480. It's not a surprise that many standard resolutions among different computers have numbers very related to this one. Commodore 64, for example, but also CGA, EGA and VGA. Remember that early CGA adapters had a composite video output RCA jack, besides the Sub D 9 RGB TTL connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OTOH, A 14.31818 MHz pixel clock gives us more than 900 pixels per scanline. Therefore, I would divide that clock (now our master clock) by two to get a pixel clock of 7.15909 MHz. A scanline in NTSC lasts 63.5 microseconds. Using this pixel clock, the entire scanline is divided into 454.6 equal time intervals. Of course, we cannot use fractional time intervals, so I would use 454 ticks (clock periods) per scanline, for a total scanline time of 63.416 microseconds, which is pretty close to 63.5 microseconds, required for NTSC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So we have 454 ticks in a scanline. 320 of them will be used to display actual pixels, while the rest of them will be used for horizontal blanking period. &lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-01-29T01:10:14.247" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2207" PostTypeId="2" ParentId="2156" CreationDate="2017-01-29T01:10:20.700" Score="8" Body="&lt;p&gt;@RichardDowner has already answered it, but who don't want pictures?  These are from the &lt;em&gt;Amiga ROM Kernel Reference Manual: Libraries&lt;/em&gt;, 3rd edition, @1992 by Commodore Electronics, Ltd.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gy3RW.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gy3RW.png&quot; alt=&quot;Figure 1.1: Amiga Library Structure and Jump Table&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;What Every Amiga Programmer Should Know:&lt;/em&gt; The functions in the Amiga OS are accessed through shared run-time libraries. Libraries must be opened before their functions may be used. The systems master library, Exec, is always open. The exec function &lt;strong&gt;OpenLibrary()&lt;/strong&gt; is used to open all other libraries.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EPfre.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EPfre.png&quot; alt=&quot;Figure 1.2: Exec and the Organization of the Amiga OS&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;What Every Amiga Programmer Should Know:&lt;/em&gt; The Amiga has a dynamic memory map. There are no fixed locations for operating system variables and routines. Do not call ROM routines or access system data structures directly. Instead use the indirect access methods provided by the system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;If I have a different kickstart version,&#xA;could the entry points in exec.library be different?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With the one absolute entry point at Sysbase, no, &lt;strong&gt;it&lt;/strong&gt; won't be. Everything else is relative and should be accessed via library calls.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-01-29T15:47:13.063" LastActivityDate="2017-01-29T15:47:13.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2208" PostTypeId="2" ParentId="2183" CreationDate="2017-01-29T01:38:46.050" Score="7" Body="&lt;p&gt;Some of the early digitizers were off-line machines. In the 1970s We used to have one made by DMAC (sorry, I can't find a picture on the internet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was basically a stand-alone device the same size as a desk, with a glass top and the mechanism visible inside. The drawing to be digitized was taped to the glass. The operator used a device about the size of a modern computer mouse with a magnifying lens and cross hairs, that &quot;sat&quot; firmly on the paper to locate the points accurately (no wheels or rollers!), The coordinate were captured by pressing a button which punched the data onto paper tape for input to a computer. IIRC there was also a QUERTY keyboard to punch arbitrary data on the tape (e.g. identifying labels, etc). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The internal mechanism was basically a permanent magnet moving under the glass, connected to a pantograph arm and some position sensors. The permanent magnet tracked an electromagnet whose coil that was wound around the outside of the magnifying lens. If there was a large distance between the points being digitized, sometimes the two magnets lost contact with each other you had to search around a bit with the cursor until they &quot;found each other&quot; again. (It was easy to tell if the machine was still &quot;following you&quot; even when the drawing being digitized was obscuring the view, because the motors were quite noisy).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite the apparently crude mechanism, this was a high-precision device The specified accuracy was 0.1mm (0.004 inches) which was far better than the first &quot;flat digitizing tablet&quot; that replaced it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machine was also almost indestructible. On one occasion, an electrician decided to stand on top of it to change a light tube in the office, forgot that it wasn't a real desk, and instead of keeping his feet on the edges stood in the middle of the glass plate, shattered the glass, and fell into the mechanism. Having removed the electrician and the broken glass, we simply bought another sheet of glass from a hardware store, checked the accuracy of the machine (which was not affected!) and got back to work. Try doing that with modern computer equipment!&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2017-01-29T01:38:46.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2209" PostTypeId="1" CreationDate="2017-01-29T16:11:49.577" Score="5" ViewCount="399" Body="&lt;p&gt;Today I tried out an old M2 for the first time with an USB/P2 adapter. For the first 10 minutes it worked fine.&#xA;Then I set it aside on my desk, left the room for a second, came back and suddenly the caps lock and scroll lock lamps were on and not a single key reacts anymore. Nothing has fallen onto the keyboard and the keys are not stuck.&#xA;I already replugged the board and restarted the computer, and the two lamps went back on immediately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I run Fedora Linux on a mid-2011 Mac mini and would be thankful for any advice.&lt;/p&gt;&#xA;" OwnerUserId="4376" LastActivityDate="2017-01-29T17:55:33.293" Title="IBM Model M2 stuck on Scroll and Caps Lock, no keys reacting" Tags="&lt;keyboards&gt;&lt;ibm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2210" PostTypeId="1" AcceptedAnswerId="2218" CreationDate="2017-01-29T16:54:29.363" Score="11" ViewCount="4642" Body="&lt;p&gt;I have acquired a nice MS-DOS PC from EET Computer (I couldn't find any information about them).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It actually works, but I have two errors on boot:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Floppy disk drive controller failure;&lt;/li&gt;&#xA;&lt;li&gt;CMOS Battery is low.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The motherboard itself is in good shape aside from the side with the VLB and ISA ports (I/Os) which has bluish-green corrosion that spreads across the motherboard and the ISA and VLB ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The corrosion also seems to be removing the thin green protective layer of the motherboard that prevents unwanted contacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bNvKp.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bNvKpt.jpg&quot; alt=&quot;Here we can see the corroded ISA slots, PCB and the CMOS battery&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/zFhDn.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zFhDnt.jpg&quot; alt=&quot;Here we can see the corroded ISA slots, PCB and the CMOS battery]&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VGA VLB and Floppy disk drive controller cards also have corrosion on their connectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2KsxW.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2KsxWm.jpg&quot; alt=&quot;Corroded ISA card connector&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The battery also seems to be rusting, it's completly stuck to its connectors. I have to replace it to avoid it leaking on the motherboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what is written on the CMOS battery:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;VARTA | Ni/Cd | 3/V 60R | 3.6V 60mAh | 14h 6mA | 100+&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I remove the corrosion and stop it from spreading? And how can I replace the CMOS battery, should I go for a coin cell battery?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="278" LastEditDate="2017-01-30T16:44:35.843" LastActivityDate="2018-06-28T18:05:52.510" Title="Restore corroded AT motherboard with dead CMOS battery" Tags="&lt;restoration&gt;&lt;ibm-pc&gt;&lt;battery&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2211" PostTypeId="2" ParentId="2205" CreationDate="2017-01-29T17:16:13.400" Score="6" Body="&lt;p&gt;If I were designing video hardware and wasn't wanting to exploit chroma aliasing, I'd probably use a dot rate of about 10/3 or maybe 3.5x chroma, which would yield pixels with a roughly 1:1 aspect ratio in interlaced modes, or 2:1 in non-interlaced modes.  If it wasn't necessary to go out to the border, that would yield a nice power-of-two screen size (512 pixels) which could facilitate the design of graphics hardware and software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I wanted to facilitate the use of chroma aliasing, I would probably use 4x chroma as a dot rate and, if memory weren't critical, have 1024 logical pixels per screen row (leaving some storage unused at the end of each line).  I'd make the horizontal rate programmable as 227.5 or 228 chroma clocks, and the vertical programmable as 262, 262.5, or 263.  Using 228 chroma clocks per line would yield vertically-striped chroma pattern.  Using 227.5 chroma clocks on 262 lines would yield a stationary checkerboard pattern.  Using 227.5 chroma clocks on 263 lines would yield an alternating checkerboard pattern.  The alternating pattern would allow a better-looking display if software was able to render different content on even and odd frames, but the stationary checkerboard would probably look better than stripes if software could either handle having different objects for even and odd scan lines or else limited motion to two-pixel increments.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2017-01-29T18:10:13.370" LastActivityDate="2017-01-29T18:10:13.370" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2213" PostTypeId="2" ParentId="2209" CreationDate="2017-01-29T17:55:33.293" Score="3" Body="&lt;p&gt;It's probable that the capacitors on the controller PCB have failed -- this seems to be a common fault with M2 keyboards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are various pages that walk through how to replace them, for example &lt;a href=&quot;https://cooltrainer.org/ibm-1395300-model-m2-pcb-repair/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;. There are two capacitors to replace: one is 2.2uF 50v and the other is 47uF 16v. &lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2017-01-29T17:55:33.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2214" PostTypeId="2" ParentId="2193" CreationDate="2017-01-29T18:36:38.497" Score="4" Body="&lt;p&gt;The Atari 2600 supports 128 colors because it was easier to have four 7-bit color registers along with circuitry independently generate one of eight luminance levels and one of sixteen chroma phases, than to have four 4-bit latches along with circuitry to convert a 4-bit value into one of sixteen useful colors.  The Atari 400 and 800 have a few more color registers, but not a huge number, and so they simply follow suit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Commodore VIC-20 uses a 4-bit RAM chip on a dedicated data bus to independently select one of two display modes and one of eight foreground colors for each character.  Although the VIC chip generates colors electronically in much the same way as the 2600, it was cheaper and easier to have a 4-bit ROM to map 16 colors into luma and chroma values, along with 11 register bits for the border, background, and aux colors, than it would have been to have eleven 7-bit registers for the eight font colors along with the background, border, and aux colors.  Further, having color numbers 0-7 map to eight fixed colors made it possible to have labeled key functions (control 1-control 8) to select those colors.  Adding palette mapping might have made that more confusing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C64 followed in the VIC-20's footstep except that light magenta, light cyan, and light yellow are replaced by shades of gray, and it defaults to using the upper bit of each character's color to select colors 8-15 rather than selecting an alternate display mode.  I think it would have been great if the C64 had included 16 seven-bit-wide palette registers, but a 16x7 ROM is cheaper, and the C64 beat pretty much everything but the Atari computers anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many video chips use an 8-bit data bus to fetch bytes that select a foreground+background combination.  Going beyond 16 colors would require the use of two fetches per byte or else--as with the C64--adding 16 7-bit registers.  The VIC-20 and C64 are unusual in that their chips actually fetch data 12 bits at a time (8 from main memory, and four from a secondary color RAM); upgrading the color RAM to 8 bits would not only require adding another 1Kx4 RAM chip and another chip to selectively couple its 4 data lines to the main bus during CPU access, but would also require somehow getting another 4 bit lines into the video chip which was crowded enough as it was.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2017-01-30T15:29:57.453" LastActivityDate="2017-01-30T15:29:57.453" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2215" PostTypeId="1" AcceptedAnswerId="2216" CreationDate="2017-01-29T18:46:49.353" Score="13" ViewCount="3063" Body="&lt;p&gt;Another question about color computers in the days of CRT televisions!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a consensus that pixels should be square, and so they typically are on purpose-designed monitors. However, looking at a close-up of pixels from a CRT TV:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1asG8.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1asG8.jpg&quot; alt=&quot;Phosphor pattern&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... they definitely do not look square; they look to me about as rectangular as the screen itself, maybe 4:3, which suggests horizontal resolution should be about the same as vertical resolution?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing that jumps out at me is that the columns of pixels are offset half a pixel height, which is the last thing I was expecting on a system that scans by horizontal lines. What's going on with that? Does the electron beam half-light two pixels every other pixel? Does it have anything to do with interlacing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="276" LastEditDate="2017-10-05T08:43:52.350" LastActivityDate="2017-11-14T21:58:01.523" Title="Square pixels and TV output" Tags="&lt;display&gt;&lt;color-display&gt;&lt;crt-monitor&gt;&lt;screen&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2216" PostTypeId="2" ParentId="2215" CreationDate="2017-01-29T20:30:02.980" Score="31" Body="&lt;p&gt;CRT TVs are analog devices, there is no &quot;pixel&quot;, but the size of the spot limits the resolution of the image, as the size of silver nitrate crystals limits the resolution of photo films.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several arrangements of the colour stripes on the CRT tubes have been designed, they are a compromise between resolution, luminosity and the precise alignment of the electron guns and shadow mask.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trinitron CRTs, with vertical stripes, made very good computer monitors. For interlaced analog TV signals, the pattern above with staggered pixels is probably better and more mechanically stable than a rectangular array.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the age of CRT displays, there was no exact alignment of pixels to the phosphors patterns, like it is common nowadays with LCD screens. The analog bandwidth and dispersion of electrons made every pixel a Gaussian circle. The coloured mask is overlaid over this circle, phosphors are unevenly lit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Of course, you can ask Wikipedia about &quot;Aperture Grille&quot; vs. &quot;Shadow Mask&quot;)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;i&gt;(I did not expect so many upvotes, this answer deserves an upgrade !)&lt;/i&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a way, I did not answer the reason why a computer could not align the dots in memory to a precise coloured spot on a cathodic tube.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is because is it is an open-loop system! There is no feedback between the displayed image and all the electronic stuff between the very low voltage VGA signals and the very high voltages driving the CRT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A CRT is mechanically stable, and the manufacturers painfully optimized the construction for a precise alignment of phosphors to the shadow masks and electron guns, with thick hardened glass and temperature stable alloys. So the &quot;blue&quot; gun only lights blue phosphors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is not such precision for the electronic part. Even minimal variations of the temperature and the wear of components can slightly change the electron acceleration voltage and the voltage put into deviation coils. Even Earth magnetic field or a nearby loudspeaker (and there are loudspeakers in TVs and many computer displays !) can move the position where electrons fall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without a very complex and precise regulation mechanism, sensors in the CRT able to measure electric charges or where light is emitted, there is no way to align pixels to phosphors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Electrostatic deviation,which was used in oscilloscopes, is a bit more precise but need very deep tubes. An average size TV would be one meter deep and weight one hundred kilos. BTW, there were also special tubes for oscilloscopes and RADAR able to keep charges for some time, giving persistent images...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;And here, after this long digresssion we wander back to paleo-computosaurs.&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Williams-Kilburn CRTs (&lt;a href=&quot;https://en.wikipedia.org/wiki/Williams_tube&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Williams_tube&lt;/a&gt;) were used as computer memory, measuring the electric charge of each pixel. Even the wikipedia article mentions the issues with having to constantly recalibrate the fixture. Here, the pixels on the CRT and the video RAM are actually the same thing! Too bad the hardware for probing pixels is hiding them !&lt;/p&gt;&#xA;" OwnerUserId="1958" LastEditorUserId="1958" LastEditDate="2017-11-14T21:58:01.523" LastActivityDate="2017-11-14T21:58:01.523" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2217" PostTypeId="1" AcceptedAnswerId="2229" CreationDate="2017-01-29T20:48:17.570" Score="9" ViewCount="528" Body="&lt;p&gt;As discussed in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2173/origin-of-dealer-networks&quot;&gt;Origin of dealer networks&lt;/a&gt;, the two main ways to sell computers are, and particularly were in the old days,&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Three digit price tag sold to individuals =&gt; mass market, department stores and suchlike.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Four digit price tag sold to businesses =&gt; dealers, who are specialists in computers, provide advice, support et cetera.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Looking at the history of Commodore as discussed in e.g. &lt;a href=&quot;http://www.filfre.net/2012/04/computers-for-the-masses/&quot;&gt;http://www.filfre.net/2012/04/computers-for-the-masses/&lt;/a&gt; they started off selling the PET as a business computer via dealers, then introduced the Vic-20 which was obviously a home computer and needed to be sold via mass-market stores. This apparently led to many dealers feeling betrayed and abandoned and in turn abandoning Commodore, which was a problem a few years down the road when they introduced the more expensive Amiga and wanted to position it as a professional machine, but now lacked dealers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would have thought it should be possible to say to the dealers &quot;look, this is our home computer, the money per unit wouldn't be enough to interest you anyway, you are still our valued partners for selling our business computers.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that's not the case - and apparently it didn't work that way for Commodore - does that mean &lt;strong&gt;it was simply impossible for one company to do well in both markets&lt;/strong&gt; (until PCs became cheap and capable enough that they merged)? &lt;strong&gt;Did the psychology of the market channels require that a computer company choose exactly one of the business and home markets?&lt;/strong&gt; Or am I missing something?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="357" LastEditDate="2017-01-30T12:22:11.777" LastActivityDate="2017-01-31T03:00:52.933" Title="Selling computers via dealers and the mass market" Tags="&lt;history&gt;&lt;commodore&gt;&lt;market&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2218" PostTypeId="2" ParentId="2210" CreationDate="2017-01-29T22:00:01.983" Score="13" Body="&lt;p&gt;&lt;strong&gt;Disclaimer: This answer is not known to be accurate.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;From the information you've provided so far it's tricky to give complete advice, but here's a start:&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Removing corrosion&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The low CMOS battery error might be caused by battery leakage; from what I've seen of leaky batteries, they do appear rusty. This can cause significant damage to components. To neutralise the battery acid (which is actually alkeline), pour vinegar on the affected areas and leave it to soak for ten to fifteen minutes.&lt;sup&gt;&lt;a href=&quot;http://www.vogons.org/viewtopic.php?t=35727&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To remove rust and corrosion, use isopropyl alcohol and something soft (e.g. cotton bud, toothbrush, other soft brush).&lt;sup&gt;&lt;a href=&quot;http://www.vogons.org/viewtopic.php?t=35727&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;https://www.ifixit.com/Answers/View/136530/How+to+fix+corrosion+on+motherboard.&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://pc-restorer.com/replacing-cmos-batteries-in-old-pcs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://www.hardwaresecrets.com/replacing-the-motherboard-battery/2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; It can be more effective to soak the board, but you must ensure that the alcohol does not enter any speakers or other sensitive components.&lt;sup&gt;&lt;a href=&quot;https://www.ifixit.com/Answers/View/136530/How+to+fix+corrosion+on+motherboard.&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; It's possible that there could still be dissolved or loose residue on the board after cleaning; distilled water can be used to remove this (either by soaking the board in it or by pouring the water onto the board).&lt;sup&gt;&lt;a href=&quot;https://www.ifixit.com/Answers/View/136530/How+to+fix+corrosion+on+motherboard.&quot; rel=&quot;nofollow noreferrer&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Replacing the battery&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;From your description of the battery, it is a standard 3.6V rechargeable Ni/Cd battery.&lt;sup&gt;&lt;a href=&quot;http://pc-restorer.com/replacing-cmos-batteries-in-old-pcs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; For these instructions, I'm assuming that it looks something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://pc-restorer.com/wp-content/uploads/2013/11/cmos-battery-nicd1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9WnUSm.jpg&quot; alt=&quot;A leaky Ni/Cd battery&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is tricky to replace. The first step is to remove the battery. This can sometimes be done with side cutters,&lt;sup&gt;&lt;a href=&quot;http://pc-restorer.com/replacing-cmos-batteries-in-old-pcs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; but you can also de-solder the battery if this is too hard.&lt;sup&gt;&lt;a href=&quot;http://pc-restorer.com/replacing-cmos-batteries-in-old-pcs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://www.hardwaresecrets.com/replacing-the-motherboard-battery/2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; If there's glue still attaching the battery to the motherboard, gently rock the battery from side to side until it becomes loose.&lt;sup&gt;&lt;a href=&quot;http://www.hardwaresecrets.com/replacing-the-motherboard-battery/2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; Once the battery has been removed, you might want to clean the area some more so that the new battery isn't damaged by remaining leakage. Assuming that your board doesn't have a replacement battery slot, you can solder two wires to the gaps and connect them to a replacement NiCd battery that remains external to the board, so that the board won't be damaged when it leaks again.&lt;sup&gt;&lt;a href=&quot;http://pc-restorer.com/replacing-cmos-batteries-in-old-pcs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; As Richard Downer's answer says, ensure that you don't wire a non-rechargeable battery in such a way that it charges. It's probably best to go with a rechargeable instead, just in case.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Replacing capacitors&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Your floppy drive controller might be failing because the capacitors have failed. This is bad, not only because they require replacement but because they leak a corrosive substance that can damage the board.&lt;sup&gt;&lt;a href=&quot;//retrocomputing.stackexchange.com/a/864/278&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt; To replace them, you need to de-solder them from the board. First, check whether they're actually bad. You can do this by testing the components, but it is sometimes easier to check visually (though not all capacitors fail visibly!&lt;sup&gt;&lt;a href=&quot;http://badcaps.net/index.php?pageid=identity&quot; rel=&quot;nofollow noreferrer&quot;&gt;[8]&lt;/a&gt;&lt;/sup&gt;). See if you can spot the failed capacitors in this image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.overclockers.com/wp-content/uploads/images/stories/articles/How_ANYONE_Can_Replace_Leaking_Capacitors/oldcaps.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6QM3ym.jpg&quot; alt=&quot;Spot the difference: Three failed capacitors (lower right) and three not failed capacitors (upper left)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you've identified the faulty capacitors, you need some replacements. Find, buy, borrow, salvage or otherwise get your hands on some capacitors that have the same &quot;stats&quot; as on the existing ones. It's best to get a capacitor with the same capacitance and at least the same voltage,&lt;sup&gt;&lt;a href=&quot;http://www.overclockers.com/how-anyone-can-replace-leaking-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[7]&lt;/a&gt;&lt;/sup&gt; but a higher capacitance also may work for many capacitors on a mainboard. A higher voltage rating is no problem, but don't go for less or it may explode!&lt;sup&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2218/278#comment18697_2218&quot;&gt;[11]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On to de-soldering! There are a few ways to go about doing this; the one that I've found easiest (with other components) is melting the solder on one leg, pulling it out as far as it will go without breaking, then repeating on the other pin, alternating pins until it comes out. You might see some gunk near or underneath the capacitors; this can probably be cleaned off using the same method as outlined in the above &quot;Removing corrosion&quot; section, sans vinegar (I'm not sure whether this would neutralise the electrolyte or make it worse). If this doesn't work, &lt;em&gt;gently&lt;/em&gt; scrape it off the board, taking care not to damage everything further.&lt;sup&gt;&lt;a href=&quot;http://www.overclockers.com/how-anyone-can-replace-leaking-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[7]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often, solder will remain in the holes that you took the old capacitors from.&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://www.overclockers.com/how-anyone-can-replace-leaking-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[7]&lt;/a&gt;&lt;/sup&gt; This can make it hard to push the new capacitors in without damaging them (&lt;em&gt;don't try&lt;/em&gt;). There are a few different methods to remove the solder; they are listed here in one recommended order:&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Melt the solder (adding a bit of new solder in the process if neccesary&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_removal&quot; rel=&quot;nofollow noreferrer&quot;&gt;[10]&lt;/a&gt;&lt;/sup&gt;) then suck it off the board with a solder sucker.&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_removal&quot; rel=&quot;nofollow noreferrer&quot;&gt;[10]&lt;/a&gt;&lt;/sup&gt; Do not do this more than twice; you risk damaging the board&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_removal&quot; rel=&quot;nofollow noreferrer&quot;&gt;[10]&lt;/a&gt;&lt;/sup&gt; (which is surprisingly easy to do in my experience).&lt;/li&gt;&#xA;&lt;li&gt;Place a de-soldering wick over the hole, put the soldering iron on top, and watch as the solder disappears.&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt; This has the disadvantage of applying lots of heat for a prolonged period of time, so it's best not to use this if there are any components nearby.&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Find a steel&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt; / stainless steel&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_removal&quot; rel=&quot;nofollow noreferrer&quot;&gt;[10]&lt;/a&gt;&lt;/sup&gt; pin at least the size of the capacitor legs. Either heat the bottom of the pin whilst pushing it through&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt; or melt the solder before pushing the pin through the hole.&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_removal&quot; rel=&quot;nofollow noreferrer&quot;&gt;[10]&lt;/a&gt;&lt;/sup&gt; You can twist the pin as the solder sets if you like,&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt; but this should work without doing so. After the solder is hard, twist and pull the pin out of the hole, then brush away any remaining solder to leave an open hole.&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_removal&quot; rel=&quot;nofollow noreferrer&quot;&gt;[10]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If the capacitor legs still refuse to go in for whatever reason (solder attached to the legs, the legs being too big, etc.) you can clean them with sandpaper so that they fit.&lt;sup&gt;&lt;a href=&quot;http://www.overclockers.com/how-anyone-can-replace-leaking-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[7]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When replacing the capacitors, make sure that they go the right way round, otherwise Bad Things&amp;trade; may happen.&lt;sup&gt;&lt;a href=&quot;http://www.overclockers.com/how-anyone-can-replace-leaking-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[7]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://badcaps.net/index.php?pageid=identity&quot; rel=&quot;nofollow noreferrer&quot;&gt;[8]&lt;/a&gt;&lt;/sup&gt; With any luck, your board will look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.overclockers.com/wp-content/uploads/images/stories/articles/How_ANYONE_Can_Replace_Leaking_Capacitors/removed.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZDpWYm.jpg&quot; alt=&quot;A big circle on the board, with a line through the middle. One side is marked with diagonal lines, and the other has a + sign.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually, the negative side has dashed lines and the positive side is marked with a +.&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_install&quot; rel=&quot;nofollow noreferrer&quot;&gt;[9]&lt;/a&gt;&lt;/sup&gt; However, there are some non-standard manufacturers who put the dashed lines on the positive side,&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_install&quot; rel=&quot;nofollow noreferrer&quot;&gt;[9]&lt;/a&gt;&lt;/sup&gt; so make sure to check which side is which. Once you've identified this, put the capacitors into the holes &lt;em&gt;the right way around&lt;/em&gt;. Capacitors are often marked with negative signs on the negative side&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_install&quot; rel=&quot;nofollow noreferrer&quot;&gt;[9]&lt;/a&gt;&lt;/sup&gt; and the positive leg may be slightly longer.&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt; After they are in the holes, trim the legs with side-cutters&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_install&quot; rel=&quot;nofollow noreferrer&quot;&gt;[9]&lt;/a&gt;&lt;/sup&gt; so that they stick about 2mm out of the board,&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt; then solder. If you solder then cut unnecessary stress may be put on the board,&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt; but this is probably not enough to cause significant damage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is recommended to remove all capacitors of each type before replacing them.&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_removal&quot; rel=&quot;nofollow noreferrer&quot;&gt;[10]&lt;/a&gt;&lt;/sup&gt; It is also recommended to remove all capacitors of each type if one has failed, because they're probably from the same batch. It is also recommended not to do this unless you &lt;em&gt;really&lt;/em&gt; know what you're doing.&lt;sup&gt;&lt;a href=&quot;http://www.itsacon.net/computers/hardware/replacing-bad-motherboard-capacitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_install&quot; rel=&quot;nofollow noreferrer&quot;&gt;[9]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://www.badcaps.net/index.php?pageid=cap_removal&quot; rel=&quot;nofollow noreferrer&quot;&gt;[10]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2018-06-28T18:05:52.510" LastActivityDate="2018-06-28T18:05:52.510" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="2219" PostTypeId="5" CreationDate="2017-01-30T10:25:50.717" Score="0" Body="&lt;p&gt;For questions regarding failure of components within retrocomputers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, failures due to  age-related degradation of components such as leakage of electrolytic capacitors or silver migration in relays.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-01-30T10:25:50.717" LastActivityDate="2017-01-30T10:25:50.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2220" PostTypeId="4" CreationDate="2017-01-30T10:25:50.717" Score="0" Body="Relating to the degradation of components in a retrocomputer." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-01-30T10:25:50.717" LastActivityDate="2017-01-30T10:25:50.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2221" PostTypeId="2" ParentId="2203" CreationDate="2017-01-30T10:45:14.497" Score="3" Body="&lt;p&gt;As already stated, the question misses the point of what DECNet is.  This is a common misconception regarding networks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DECNet sits at the Transport and Network levels of the OSI model of networking.  The physical connector is only relevant at the Physical or Data Link levels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used DECNet extesively for several years, on Thick-wire, Thin-wire, Optical, Microwave, Dial-up, etc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;DECNet coexists perfectly happily on a physical network with other protocols, such as TCP/IP.  Again, I used mixed protocol networks like this all the time. &lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-01-30T13:23:02.477" LastActivityDate="2017-01-30T13:23:02.477" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2222" PostTypeId="5" CreationDate="2017-01-30T10:54:41.180" Score="0" Body="&lt;p&gt;For questions regarding networking on retrocomputers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both networking protocols and connections to networks.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-01-30T10:54:41.180" LastActivityDate="2017-01-30T10:54:41.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2223" PostTypeId="4" CreationDate="2017-01-30T10:54:41.180" Score="0" Body="Regarding retrocomputing networks, connections and protocols." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-01-30T10:54:41.180" LastActivityDate="2017-01-30T10:54:41.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2224" PostTypeId="5" CreationDate="2017-01-30T10:57:08.900" Score="0" Body="&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt; this tag should be used only for CBM questions that do not have a more specific tag, such as &lt;a href=&quot;/questions/tagged/commodore-64&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;commodore-64&amp;#39;&quot; rel=&quot;tag&quot;&gt;commodore-64&lt;/a&gt; or &lt;a href=&quot;/questions/tagged/amiga&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;amiga&amp;#39;&quot; rel=&quot;tag&quot;&gt;amiga&lt;/a&gt;. For more information on manufacturer tags, see &lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/q/232/7208&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/q/559/7208&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Commodore Business Machines, later known as Commodore International, was originally a Canadian electronics manufacturer, later moving to the USA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It manuactured computers and calculators from 1954 to 1994.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="7208" LastEditDate="2019-11-20T22:58:22.680" LastActivityDate="2019-11-20T22:58:22.680" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2225" PostTypeId="4" CreationDate="2017-01-30T10:57:08.900" Score="0" Body="For quesitons regarding Commodore Business Machines itself or its products that do not have a more specific tag such as commodore-64 or amiga." OwnerUserId="276" LastEditorUserId="7208" LastEditDate="2019-11-20T22:58:22.680" LastActivityDate="2019-11-20T22:58:22.680" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2226" PostTypeId="1" AcceptedAnswerId="2228" CreationDate="2017-01-30T19:47:09.753" Score="13" ViewCount="683" Body="&lt;p&gt;I was reading &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2158/2155&quot;&gt;Richard Downer's excellent response&lt;/a&gt; about how Amiga libraries work and one sentence in particular got my attention:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Yes, a pointer to exec.library is always at $4, and this is (in&#xA;  theory, but not in practice) the only fixed address you should ever&#xA;  use in AmigaOS.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I only ever knew about $4! So what are other addresses/data in a fixed memory location in AmigaOS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Of course, I'm not talking about hardware registers; this question is specifically about software related addresses and memory areas)&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="11916" LastEditDate="2019-04-24T13:50:27.627" LastActivityDate="2019-04-24T15:53:18.017" Title="What are all the fixed addresses of AmigaOS?" Tags="&lt;amiga&gt;&lt;operating-system&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2227" PostTypeId="2" ParentId="2190" CreationDate="2017-01-30T20:07:02.703" Score="2" Body="&lt;p&gt;Like others have said, expansion ports are surprisingly expensive.  When you look at the two examples you provided (Apple II and IBM), they weren't exactly the cheapest options for computers back in the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even today, those 50 pin edge connectors can be $3+ each even in large quantities.  I imagine (but cannot confirm) that Steve Jobs worked his magic back in the 70's and 80's and managed to get them for a bargain. But I'm only speculating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the edge connector is hardly the entire cost of expansion ports.  You have &quot;glue&quot; logic for device selection (such as 74LS138 multiplexers), buffers, shielding, etc.  Plus, it is &lt;em&gt;NOT&lt;/em&gt; a trivial task to design expansion buses in a machine.  Especially for anything over a couple MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II (and IBM, really) wouldn't have been a very exciting machines if it weren't for the expansion buses.  But all of these ports came at a price.  Which is why the more &quot;budget friendly&quot; computers such as the VIC-20, Commodore 64, Tandy CoCo, etc. used external edge connectors that had fewer pins.  And, they typically only had one or two of them if any at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's impossible to say that expansion slots &quot;cost 20% more&quot; or &quot;40% more&quot;.  There are too many variables involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the exception of the Apple II line, you only really ever saw them in droves on computers marketed for business (IBM, Amiga 2000/3000/4000, etc.).  In fact, I would argue that the only reason you saw them on PC compatibles (like Compaq) is because they were trying to mimic the IBM completely.  If IBM had created the 5150 with no expansion slots and used all serial/parallel connectors, the clone business may have been a completely different animal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I think it's safe to say that expansion ports are expensive.  &lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-01-30T20:07:02.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2228" PostTypeId="2" ParentId="2226" CreationDate="2017-01-31T02:18:16.800" Score="14" Body="&lt;p&gt;Actually, the $4 fixed address, more properly referred to as ExecBase, really is the only intentional, consistent fixed software &quot;entry point&quot;. ExecBase serves as an entry point to the Exec library. exec.library has an interface to support enumeration of the other system software that is present, such that those interfaces (GfxBase, IntuitionBase, Dos, etc.) can be located and accessed. The locations of the other system software can and will move from release to release, but the ExecBase at $4 stays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use ExecBase to locate, for example, the entry point (GfxBase) for graphics.library in a dynamic sense. However, the static address value you determine for GfxBase is not expected to be the same on some other iteration of the system software, and could also change based on hardware version and configuration. It's a dynamic system, by design.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-01-31T02:18:16.800" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2229" PostTypeId="2" ParentId="2217" CreationDate="2017-01-31T03:00:52.933" Score="9" Body="&lt;p&gt;Commodore's experiences were driven by the interactions between Commodore management and its dealer network, and should not be taken as indicative of some broader tendencies within the early personal computer industry. To support this assertion, I would point to the other early personal computer companies whose experiences were different from Commodore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first example I offer is Tandy Radio Shack. Tandy was early to market with moderately priced personal computers (original TRS-80 line), high-end business computers (Model II, Model 12, Model 16), and low-cost home computers (Color Computer 1/2/3). All three lines experienced marketplace successes and were sustained for years through retail sales at Radio Shack, despite the vast pricing differences. The systems available represented a mix of 3-digit and 4-digit pricing, and they were sold to all categories of home, hobbyist, professional, and business users. Tandy's approach was to own and control their dealer network, and this certainly gave them a different experience than Commodore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another example is the launch of the original IBM PC in 1981. This was an expensive professional, business system when introduced. Quoting from the IBM Archives: &quot;Needing new channels to distribute these new computers, IBM turned to ComputerLand; Sears, Roebuck and Co.; and IBM Product Centers to make the IBM PC available to the broadest set of customers.&quot; It was not uncommon for Sears to carry big ticket items in their stores and catalog, and IBM's approach was to leverage its own dealers, plus dedicated computer dealers, plus department stores for their expensive new computer. When IBM followed up the successful PC with the PCjr, they also attempted to retail it through multiple channels. It did not find success in any channel because it was widely regarded by consumers as a poor product.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another example is the Apple 8-bit line. The early model Apple II/Plus/IIe were in the 4-digit price range and sold through a network of computer dealers with great success. As prices of computers came down, and as new low-cost models like the IIc were introduced, 3-digit prices were common and so was mass market selling. Apple continued to sell Apple II through dealers despite the falling price, and also alongside more expensive products like the original Macintosh. Apple is probably the best example of an early computer company using multiple types of retail channels and selling computers on both sides of the &quot;$1,000 barrier&quot; with good success.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on these examples, Commodore's problems with securing a reliable dealer network for the Amiga were most likely self-inflicted, based on past policies that had a negative impact on Commodore dealers. During the aggressive pricing wars that saw the Commodore 64 fall from $599 to $199, some dealers were left holding inventory that they could no longer sell without taking a loss. Commodore alienated their dealers with their aggressive and rapid price reductions and with no offers to compensate them for the losses. As such, the dealers that survived developed a healthy skepticism of Commodore that would make them less likely to join forces with them for the Amiga.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-01-31T03:00:52.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2230" PostTypeId="2" ParentId="2173" CreationDate="2017-01-31T18:18:35.320" Score="3" Body="&lt;p&gt;It's pretty simple, actually.  Go where the money is.  During that time frame, retail outlets like Sears were pitched with just about anything that can be sold legally.  Just look at an old Sears Wish Book to get an idea of what they sold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So computers companies would logically target large retailers like Sears.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another scenario was Radio Shack (Tandy).  They had thousands of retail stores across the US so it made sense to them to not only sell a computer in their established stores, but to also create a computer branded as a Tandy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, even back in the early days of computers, there were many shops that targeted business/commercial accounts.  Even in a small town like where I'm from, I remember companies like Northshore Computers that sold to both the consumer and businesses.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-01-31T18:18:35.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2231" PostTypeId="2" ParentId="2210" CreationDate="2017-01-31T22:25:46.223" Score="7" Body="&lt;p&gt;wizzwizz4 has a good answer about cleaning up the corrosive chemicals to stop the damage getting any worse, so I won't duplicate that information. But here are a few more suggestions. My experience is with the Amiga computers, where the retro computer enthusiasts speak of Varta with howls of anguish - the damage you have seen here has affected thousands of vintage Amigas in the same way. Hopefully much of the advice would apply to your mainboard too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The good news is that the damage is often repairable. Components such as the sockets can often be desoldered and replaced. The chemicals may have corroded some traces to the point that they are broken, but patch wires can often be used to bypass the damaged area and restore connectivity. This is a specialist skill so you may need to find an expert in vintage computer repair to do this work for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is probably possible to replace the NiCd battery with a coin cell (CR2032 or similar). However you must place a diode in series with the new battery - otherwise the charging circuitry will try and charge up the non-rechargeable battery. Ready-made coin cell adapters with the same footprint as the rechargeable battery and the necessary protective diode can be bought for Amigas (&lt;a href=&quot;http://amigakit.leamancomputing.com/catalog/product_info.php?products_id=1093&quot; rel=&quot;noreferrer&quot;&gt;example&lt;/a&gt;), and it's likely they would work just as well on your PC mainboard.&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2017-01-31T22:25:46.223" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2232" PostTypeId="1" CreationDate="2017-02-01T15:44:49.917" Score="8" ViewCount="948" Body="&lt;p&gt;I got a PSone (&quot;PS1 slim&quot;) for $5 off Facebook. Real dirty, didn't have any of the cables. So I take it apart, clean it real good. I take my universal power pack and my PS2 AV cables and plug it in. Everything goes fine for a while, the game boots up and I start playing it. Then the video looked like it was inverted, and the audio cuts out. The PSone crashes. I turn it back on and it freezes on the boot screen. I took it back apart and cleaned it out with alcohol. Still doesn't work. I'm thinking it could be the power pack?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the steps I can take to determine if this is something I can fix myself?&lt;/p&gt;&#xA;" OwnerUserId="3646" LastEditorDisplayName="user12" LastEditDate="2017-02-01T18:11:19.023" LastActivityDate="2017-02-01T18:54:30.080" Title="Used PS1 &quot;slim&quot; (PSone) freezes on boot" Tags="&lt;repair&gt;&lt;sony-playstation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2233" PostTypeId="2" ParentId="2232" CreationDate="2017-02-01T16:38:18.417" Score="8" Body="&lt;p&gt;I bet you have a dirty lens or faulty optical drive.  Try cleaning the diode with a Q-Tip and a electronic lens cleaning solution.  It's also possible that the entire drive is broken or dirty.  Does the PS1 read any other discs like audio CDs?  It might need an entire spindle hub or optical drive replacement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe some of the tips in this &lt;a href=&quot;https://www.ifixit.com/Wiki/PlayStation_Troubleshooting#Section_Game_does_not_load_skips_or_freezes&quot; rel=&quot;noreferrer&quot;&gt;iFixit troubleshooting guide&lt;/a&gt; will help.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2017-02-01T18:54:30.080" LastActivityDate="2017-02-01T18:54:30.080" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2234" PostTypeId="1" AcceptedAnswerId="2236" CreationDate="2017-02-02T15:25:07.523" Score="14" ViewCount="4165" Body="&lt;p&gt;I've seen there are adapters to convert Japanese Famicom games to work on the NES. You may have to remove the lockout chip, I can't remember.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, many Famicom games included extra sound hardware to enhance the in-game music. However, on the NES, this extra sound cannot be heard because the NES lacks the circuitry to route the extra audio from the game cartridge to the NES audio circuitry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, was there any 3rd party adapters that would not only route the Famicom game to the NES console, but also route the extra audio signals out to perhaps an external audio port on the adapter so that we could mix the two audio signals together?&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="621" LastEditDate="2017-02-02T19:59:38.760" LastActivityDate="2017-02-02T19:59:38.760" Title="Is it possible to play Famicom games on the NES and utilize the extra sound channels?" Tags="&lt;nintendo&gt;&lt;nes&gt;&lt;audio&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2235" PostTypeId="2" ParentId="2234" CreationDate="2017-02-02T16:19:46.710" Score="8" Body="&lt;p&gt;I haven't tested this, so I can't vouch for its authenticity, but &lt;a href=&quot;http://www.retrofixes.com/2014/05/open-hidden-sound-channels-in-nes.html&quot; rel=&quot;noreferrer&quot;&gt;one guide&lt;/a&gt; claims that soldering a 24k to 56k resistor between pins 3 and 9 of the NES expansion connector will &quot;unlock&quot; additional sound channels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/E0KLJ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/E0KLJm.jpg&quot; alt=&quot;NES 1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ZAOBU.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZAOBUm.jpg&quot; alt=&quot;NES 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this only works on the original release with mono audio out.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="278" LastEditDate="2017-02-02T19:14:52.070" LastActivityDate="2017-02-02T19:14:52.070" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2236" PostTypeId="2" ParentId="2234" CreationDate="2017-02-02T16:56:48.150" Score="14" Body="&lt;p&gt;The &lt;a href=&quot;//wiki.nesdev.com/w/index.php/Cartridge_connector#Pinout_of_72-pin_NES_consoles_and_cartridges&quot;&gt;NES cartridge connector&lt;/a&gt; does not have expansion sound.  However, there's an &lt;a href=&quot;//wiki.nesdev.com/w/index.php/NES_expansion_port_pinout&quot;&gt;expansion port&lt;/a&gt; on the bottom of the NES which does, although this connector was never used by any commercial games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;JAL's answer describes a mod involving soldering a resistor between pins 3 and 9 of the expansion connector.  This actually &lt;em&gt;does&lt;/em&gt; work.  Pin 3 is the expansion audio pin, and pin 9 is EXP6, one of 10 pins which go to the cartridge.  So by soldering a resistor across those pins (or maybe connecting an expansion port accessory which connects those pins), EXP6 of the cartridge connector becomes an expansion audio pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the cartridge has to be designed to play audio into EXP6, which no commercial games did, and the game has to use the expansion audio channels, which no North American commercial games did, so the mod won't add sound to any existing games.  It &lt;em&gt;would&lt;/em&gt; work with that Famicom-to-NES adapter as long as the adapter routed the audio to EXP6.&lt;/p&gt;&#xA;" OwnerUserId="409" LastEditorUserId="409" LastEditDate="2017-02-02T18:28:58.647" LastActivityDate="2017-02-02T18:28:58.647" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2237" PostTypeId="2" ParentId="1501" CreationDate="2017-02-02T21:33:41.157" Score="4" Body="&lt;p&gt;I was a system builder in that era -- '90s. Probably the only MS-DOS games you'll have trouble with are '80s ones in CGA or EGA which were dependent on system clock speeds. Nibbler is an example of this type of game, which used the time that it took the screen to redraw to slow down the game. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fix for that 286-era game was the 'Turbo' function of the 386 processor. What turbo actually did was halve the clock speed of a 386 when you disabled it. So, Turbo speed was normal, and no turbo was half. Without that speed cut Nibbler was close to impossible to play.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To cut down on support calls many builders would put a hard jumper on the motherboard forcing the system to be in normal mode. Accidentally hitting the button with no knowledge of what it was for was a more problematical support issue. Your Duron motherboard will not support 'Turbo' since they had long given up supporting odd edge cases of poorly coded applications which that feature addressed. For any game you are likely to want to play none of this will even be an issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The larger key is not getting XP on a system which loses direct access to hardware. XP was the first consumer line which has a Hardware Abstraction Layer (HAL). That is what broke most of the games of that era which you want to play, Shogo, Myst, Shadow Warrior, Early Doom, and Quake. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;98 SE (Second Edition) is probably your best choice if you can find install media. It has the best rudimentary USB support. Some people online have reported problems with partitions larger than 40GB, I have not seen any problems on a good Motherboard. However if you have lots of small files, smaller partitions will help with slack space losses.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to BIOS (hardware) limits of the day ATA drives of the day over 137GB may not work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My own retro system is a First Motherboard AZ11E/Duron 1000/ 256M RAM and a Diamond Viper II Z200(32m) video card. You might want a better video card since I don't ever want to play Myst again. I love Civilization 1.5 which is MS-DOS based. My OS partition is 20G and I have 2 full 50GB partitions for games and other junk. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These old systems are especially power sensitive. If your board supports the Duron it likely also supports the Athlon. As every one else has mentioned, yes it wants a big fan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also &lt;strong&gt;do not&lt;/strong&gt; want to install Windows ME, or Millennium Edition. ME doesn't have the Hardware Abstraction Layer, but it was so buggy that you want to Run From It, not run it. ME follows the every other version rule for Microsoft OS's. They get it right every other generation. (Google image search for &quot;Windows CEMENT&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly the fact that your board had no fan could be because it was from a chassis that had a large 80mm or 120mm fan hooked to a plastic duct on the back of the chassis. All of the large manufacturers toyed with this build technique to save on custom components, but probably went back to putting the fan on the heat sink after the hassle of customers losing the processor after they lost the plastic shroud.&lt;/p&gt;&#xA;" OwnerUserId="3648" LastEditorUserId="3648" LastEditDate="2017-02-12T22:51:53.157" LastActivityDate="2017-02-12T22:51:53.157" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2238" PostTypeId="1" CreationDate="2017-02-03T04:45:43.893" Score="10" ViewCount="1297" Body="&lt;p&gt;I'm attempting to emulate the NES PPU and I'm implementing its registers. In particular, reading from the PPU status register has the following effects:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Reading the status register will clear D7 mentioned above and also the address latch used by PPUSCROLL and PPUADDR. It does not clear the sprite 0 hit or overflow bit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://wiki.nesdev.com/w/index.php/PPU_registers#Notes&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;PPUSCROLL&lt;/code&gt; and &lt;code&gt;PPUADDR&lt;/code&gt; registers are both write only. When writing to &lt;code&gt;PPUSCROLL&lt;/code&gt; for example, the first write specifies and X-scroll position, and the second write specifies the Y-scroll position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the latch the thing that determines the write state (x or y)? I just want to make sure I'm understanding this correctly.&lt;/p&gt;&#xA;" OwnerUserId="4114" LastActivityDate="2019-01-14T21:00:43.427" Title="Trying to understand what an &quot;address latch&quot; is while emulating the NES PPU" Tags="&lt;emulation&gt;&lt;nes&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2239" PostTypeId="2" ParentId="2172" CreationDate="2017-02-03T06:28:49.313" Score="-2" Body="&lt;p&gt;I would not worry too much. old capacitors were of good quality, not like the now-days junk. I have plenty of ancient components and I did not had to change any capacitors on them (unlike for newer ones) and they still function perfectly. &lt;/p&gt;&#xA;" OwnerUserId="3399" LastActivityDate="2017-02-03T06:28:49.313" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2240" PostTypeId="2" ParentId="2238" CreationDate="2017-02-03T09:01:47.280" Score="12" Body="&lt;p&gt;Disclaimer: I don't own a NES, aI haven't programmed a NES, nor have I written a NES emulator. The following is just my understanding of the description.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Flip-flop_%28electronics%29&quot;&gt;latch&lt;/a&gt; is a set of D-Flip-Flops that is used to temporarily store a value. So an &lt;em&gt;address latch&lt;/em&gt; stores an address temporarily. Both &lt;code&gt;PPUSCROLL&lt;/code&gt; and &lt;code&gt;PPUADDR&lt;/code&gt; need to provide a 16-bit address (or x-y-value), so both would have two 8-bit latches which are filled in turn with 8-bit values when writing to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To select one of the 8-bit latches, one would need an &lt;em&gt;address latch toggle&lt;/em&gt;. It looks like this toggle (another kind of flip-flop) is re-used to control both the &lt;code&gt;PPUSCROLL&lt;/code&gt; and the &lt;code&gt;PPUADDR&lt;/code&gt; latch pair. It's reset on reading either of them, and it's also reset by reading &lt;code&gt;PPUSTATUS&lt;/code&gt;. The description you reference seems to use the term &lt;em&gt;address latch&lt;/em&gt; to both to refer to the proper latches, and the latch toggle (which should be fixed IMHO).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, yes, it's the thing that determines the write state (high byte or low byte for &lt;code&gt;PPUADDR&lt;/code&gt;, x or y for &lt;code&gt;PPUSTATUS&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A question that's not answered is what happens on the third write: Will the value appear again on the first latch (the toggle toggles again), or on the second latch (toggle stays at it is)? If you do have a real NES, it would be interesting to find out.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-02-03T09:01:47.280" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2241" PostTypeId="2" ParentId="2238" CreationDate="2017-02-04T11:32:49.210" Score="4" Body="&lt;p&gt;Latches are used to hold data temporarily. They're an essential building block of chips and they they were used to simplify interfacing between the CPU and other hardware as CPUs had data registers that couldn't hold a full address (for example 8 bit data registers vs 16 bit addresses for the 6502)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In software terminology (in computer / game console interfaces), it refers to a very common setup I'll try to explain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's suppose you need to write a 16 bit address to a video register with the 6502:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;lda #address&amp;amp;255&#xA;sta VIDEOREGISTER&#xA;lda #address/256&#xA;sta VIDEOREGISTER + 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;how would the hardware know when the address is complete?&#xA;it needs a trigger to make a copy of the value; for example when VIDEOREGISTER + 1 is written.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To simplify the logic, it uses a latch:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;lda #address&amp;amp;255&#xA;sta VIDEOREGISTER&#xA;lda #address/256&#xA;sta VIDEOREGISTER&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The first write stores the first value, the second write get the second part and triggers the operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is smaller to implement in hardware that way since it is essentially two set (8 bits each) of flip-flops chained with one another (like a shift register). Each write triggers the copy of flip-flop1 to flip-flop2 and the value written goes to flip-flop1. One the second write, you have both values needed &quot;latched&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this scenario, when you read the status register, it resets the cycle; so if one write was already done, it's gone, and the latch is ready to receive an address through 2 writes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is useful since you don't know the status of the hardware after a reset, where maybe the cpu did one write before and then all writes to that register would subsequently not work as expected.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2017-02-04T11:32:49.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2242" PostTypeId="1" CreationDate="2017-02-04T18:54:54.513" Score="16" ViewCount="5807" Body="&lt;p&gt;Whilst researching the Zilog Z80, I had found that it accepts a 5V power supply.&lt;sup&gt;&lt;a href=&quot;http://www.z80.info/z80brief.htm&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; When looking for information on the ZX Spectrum, I found that its power adaptor produces 9V.&lt;sup&gt;&lt;a href=&quot;http://www.worldofspectrum.org/faq/reference/hardware.htm&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; Confused, I did some more searching and found that the 4116 DRAM chip uses +12V, +5V and -5V.&lt;sup&gt;&lt;a href=&quot;http://www.robotron-2084.co.uk/techwilliams4164.html&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; If I'm reading &lt;a href=&quot;http://www.zxdesign.info/soundbeeper.shtml&quot;&gt;this&lt;/a&gt; right, the voltage going to the beeper is also 5V.&lt;sup&gt;&lt;a href=&quot;http://www.zxdesign.info/soundbeeper.shtml&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; The composite video output pin is +1.2V.&lt;sup&gt;&lt;a href=&quot;http://mts.speccy.cz/doc/128_rgb.pdf&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does the ZX Spectrum create so many different voltages, and why does the power adaptor produce 9V instead of 12V or 5V?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-02-04T19:17:50.323" LastActivityDate="2017-02-05T12:53:42.973" Title="How and why did the ZX Spectrum use so many voltages?" Tags="&lt;zx-spectrum&gt;&lt;power&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2243" PostTypeId="2" ParentId="2242" CreationDate="2017-02-05T00:06:03.537" Score="24" Body="&lt;p&gt;I will start with the last question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The power adapter is a very cheap one. In fact, the voltage without load can raise up to 15-16V. 9V is the nominal supply voltage under the normal load that the Spectrum circuit imposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why 9V? It was a &quot;standard&quot; voltage setting at the time (equivalent to six 1.5V batteries), so transformers whose secondary winding generated a 9V AC power signal were cheap and easily available for the manufacturer. The Spectrum circuit needs about 1A, so anything higher than 9V for that amperage would have required a bulkier, hevier (and possibly more expensive) transformer. Remember that Sinclair was aiming for a cheap product.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why not 5V? To start, 5V was not a standard choice for external supply (because of the above reasons). In the case of the Spectrum in particular, 5V would have been too far from 12V, which is needed for some devices inside the computer board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX Spectrum components have different needs regarding the supply.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;First, the logic circuits: these operate by standard TTL/MOS levels, they are the most greedy of all them, and the supply must be very precise. TTL circuits use 5V, so a standard 7805 regulator was used. This is a linear regulator which accepts an input voltage from 7 to nearly 30V, and outputs a steady and virtually noise-free 5V signal. Linear means that the excedent of supply is disipated in form of heat. For a 9V DC input and 1A, this means: (9-5)V * 1A = 4W of heat disipation. Using a higher voltage, such as 12V, for input, would have increased the heat that the regulator would need to disipate. The 5V supply rail feeds the CPU, ULA, glue logic, ROM, and non contended RAM memory (the memory that goes from 8000h to FFFFh in the Z80 address space). It also feeds the emitter-follower circuit that drives the loudspeaker, although in some board issues, the emitter follower is connected to 9V instead of 5V.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The video encoder chip, LM1889, uses a supply voltage of 11-13V. Contended RAM memory (the one that is addressed from 4000h to 7FFFh) also uses it, so a way of generating 12V out from 9V or 5V is needed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Contended RAM memory also uses -5V, so this must be generated as well.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The method is to use an internal DC-DC boost converter. It's depicted here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Qfokl.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qfokl.png&quot; alt=&quot;ZX Spectrum internal DC-DC converter&quot;&gt;&lt;/a&gt;&#xA;&lt;em&gt;NOTE: signal labelled as 5V (20B) is actually -5V (20B is the pin at the rear connector where this signal is available)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is esentially an inverter circuit. TR5, TR4 and the coil forms the inverter. It generates a pulsating 12V signal at the collector pin of TR4 (it comes from the reactance discharging through transistor TR4). That signal is AC coupled by C80, so we have something similar to a 12V AC power supply, of about 110kHz, at the right side of C80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;D15, D17 and C44 form a simple rectifier and a simple filter. As frequency is much higher than 50Hz, no full rectifier or big capacitors are needed in order to have a steady power supply. The junction at D15 and C44 carries a 12V DC signal suitable for DRAM chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same voltage is passed through a PI filter formed by C44, R62 and C45 to give another 12V supply rail, isolated from the first one. This isolation (achieved in some way because of the PI filter) is needed to avoid high frequency switching noise coming from DRAM chips to enter the video circuit section, which would make it to display on screen, degrading picture quality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To generate -5V, a similar circuit is used: from the same point the 12V supply is got, another capacitor, C46, gives a 12V AC signal. Diodes D11, D18 and capacitor C79 play a similar role to D15, D17 and C44. Only that this time, diodes are arranged in the opposite direction, so the output signal is negative (with respect to ground). D19 is a 5.1 zener diode, which is used to lower the voltage from -12V to -5V. In order to not to destroy the zener, a current limiting resistor R79 is used. The -5V supply is very weak and only used to polarize the substrate of DRAM chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This particular DC-DC converter is the cause of many broken Spectrums. It happens that 4116 DRAMs (the ones that need three different voltages and forms the contended memory block) require them to be applied in a very specific order. Order that the DC-DC circuit doesn't respect. If this happens, there is a chance that the DRAM memory is damaged. Without the contended memory block in working order, the machine cannot boot and the ROM hangs the computer. The user doesn't see the (C)1982... welcome message, but a screen with light gray, white and/or black vertical thick stripes. The pattern may vary. The border is always white (light gray actually).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional information can be found at section 6 (power supplies) of the &lt;a href=&quot;http://hemdatornytt2.selda.se/wp-content/uploads/2014/08/ZXSpectrum48K_ServiceManual.pdf&quot;&gt;ZX Spectrum 48K Service Manual&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2017-02-05T00:12:39.577" LastActivityDate="2017-02-05T00:12:39.577" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2244" PostTypeId="1" AcceptedAnswerId="2247" CreationDate="2017-02-05T10:22:30.750" Score="96" ViewCount="23412" Body="&lt;p&gt;Many programs make use of randomness, from BASIC guess-the-number games to encryption key generators. This randomness could have been generated in many, many different ways: hardware, software, software seeded by hardware...&lt;/p&gt;&#xA;&lt;p&gt;What techniques were used to generate randomness in early computers, and were cryptographically secure sources of randomness commonly used?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="15334" LastEditDate="2021-01-22T13:27:27.617" LastActivityDate="2021-05-11T14:17:57.050" Title="How was early randomness generated?" Tags="&lt;hardware&gt;&lt;software&gt;&lt;rng&gt;" AnswerCount="17" CommentCount="14" FavoriteCount="23" ContentLicense="CC BY-SA 4.0" />
  <row Id="2245" PostTypeId="2" ParentId="2242" CreationDate="2017-02-05T10:44:00.687" Score="7" Body="&lt;p&gt;This is the boring (or, rather, the trivial) part of the answers - How the +5V voltage is being generated in a ZX Spectrum: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX Spectrum uses (like basically any other home computer of the time) a linear regulator (7805) and some Cs for smoothing the voltage to generate the 5V. The +9V fed into the circuitry are produced by the external PSU brick. The only interesting fact to mention is the DC brick's plug polarity - While nearly anyone else tends to use barrel plugs &quot;positive centre&quot;, the Spectrum has it the other way round (&quot;negative centre&quot;). As there is no reverse polarity protection circuitry in the Spectrum, watch out in case you want to use a replacement PSU! You might use it only once...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main downside of the 7805 linear regulators is they simply &quot;burn&quot; the excess energy from the PSU and so tend to produce a lot of heat in the Spectrum. While the excess heat is very well absorbed by the large heat sink on the 7805, today's state of the art technology is more advanced. &#xA;Many people (including myself) have thus replaced the 7805 with a modern switching regulator replacement (Traco Power TSR 1-2450, for example, but there are lots of others) that does the same job with about 90% efficiency, produces much less heat (practically nothing) and puts much less strain on the power brick - and less heat strain on the other Spectrum components. It doesn't even need a heat sink anymore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Sxh5C.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Sxh5C.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-02-05T12:53:42.973" LastActivityDate="2017-02-05T12:53:42.973" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2246" PostTypeId="2" ParentId="2244" CreationDate="2017-02-05T12:08:27.150" Score="29" Body="&lt;p&gt;Interesting question. After all, it's the main job of a computer to come up with &lt;em&gt;deterministic&lt;/em&gt; results, which is pretty much the opposite of &lt;em&gt;pure randomness&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In reality, coming up with a series of non-deterministic numbers from a digital circuit only is considered technically impossible. Modern computers use &quot;known noise&quot; in their peripheral devices or even dedicated noise generator circuits to seed their random number generator. Older home computers didn't really have that much periphery to choose from so used &quot;close-to random&quot; values as a seed like video flyback counters or &quot;time since switched on&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have a (more or less random) &lt;em&gt;seed&lt;/em&gt; (initial value), a &lt;em&gt;simple&lt;/em&gt; RNG (Random Number Generator) typically consists of an LFSR (linear feedback shift register) that runs the seed through a binary &lt;em&gt;polynom&lt;/em&gt;, generating a new value from the previous one that &quot;looks&quot; random (picture source: &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear-feedback_shift_register&quot;&gt;Wikipedia&lt;/a&gt;) (Today's computers tend to use much more sophisticated RNGs)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/whaMW.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/whaMW.png&quot; alt=&quot;Linear Feedback Shift Register (Source: Wikipedia)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note what &quot;looks like hardware&quot; in the picture can easily be reproduced by software in a computer. A random number would then just be the current value of that 8 bit register. A new random value is being generated on every fetch by shifting the old value one bit and feeding back the &quot;carry&quot; and bit positions determined by the chosen polynom into the lowest bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In pseudocode, an RNG looks somewhat like this (implements the above picture):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;carry = (x &amp;amp; $80) != 0 &#xA;oldx = x&#xA;x = x &amp;gt;&amp;gt; 1&#xA;x |= (carry + (oldx &amp;amp; $04) &amp;gt; 0 + (oldx &amp;amp; $10) &amp;gt; 0 + (oldx &amp;amp; $20) &amp;gt; 0) != 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In reality, most of the RNGs did, different from the example, normally use 16-bit shift registers and the polynoms might look different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The initial state i.e. the &lt;em&gt;seed&lt;/em&gt; of the shift register is normally set by the &lt;code&gt;RANDOMIZE&lt;/code&gt; (or similar) Basic keyword. This might be the most misunderstood and misused basic keyword ever - It somehow seems to imply to make the RNG &quot;more random&quot; but instead does the exact opposite - By seeding the RNG with a constant number, you can make different computers with the same BASIC produce the &lt;em&gt;exact same&lt;/em&gt; sequence of random numbers. Using this technique you can easily create encryption programs that can only be decrypted by the same RNG using the initial seed as a key (i.e. cyphers produced by the Commodore C64 that can only be deciphered by a C64). I also remember a Basic program I once wrote for the Sinclair QL that calculated the value of PI by simulating rainfall (random coordinates) onto a circle in a square and determining whether the raindrop fell into the circle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &quot;cryptographically secure&quot; source of a seed for the RNG is not known to me from early computers - At least not of home computers. After all, proper encryption which is the main use for RNGs was not necessary on a non-networked computer (most of the early computers were) as long as you had a proper door in front of it. Only the development of larger networks and the internet made encryption really necessary - before that time, you could simply rely on &lt;em&gt;physically securing&lt;/em&gt; computers.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-02-05T17:26:49.350" LastActivityDate="2017-02-05T17:26:49.350" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2247" PostTypeId="2" ParentId="2244" CreationDate="2017-02-05T12:15:10.447" Score="85" Body="&lt;p&gt;The one-word answer to your question is &amp;quot;badly&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;The way to create random numbers quickly is via a &lt;a href=&quot;https://en.wikipedia.org/wiki/Pseudorandom_number_generator&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pseudorandom number generator&lt;/a&gt; (PRNG). That Wikipedia page gives the history of PRNGs and in particular notes that &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_congruential_generator&quot; rel=&quot;nofollow noreferrer&quot;&gt;linear congruential generators&lt;/a&gt; are/were common, with quite a few failings including periodicity (i.e. it cycles through the same sequence of values), poor distribution, predictability, and quite a few other faults that make them poor choices for use in cryptography. That page also describes &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear-feedback_shift_register&quot; rel=&quot;nofollow noreferrer&quot;&gt;linear-feedback shift registers&lt;/a&gt; but I don't recall them being used in the BASICs of my youth.&lt;/p&gt;&#xA;&lt;p&gt;The first decent PRNG is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Mersenne_Twister&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mersenne Twister&lt;/a&gt;, which was invented in 1997. It requires 2.5 KiB of RAM to store its state, and is relatively computationally intensive, so it would be ludicrous to provide it as the standard random number source of a BASIC running on a machine with only a few tens of kilobytes of RAM and a slow CPU even if the algorithm had been known at the time.&lt;/p&gt;&#xA;&lt;p&gt;Cryptographically-secure random numbers need the aid of a hardware device that contains true randomness, such as interrupt timings from I/O devices, or even a dedicated quantum noise source. Again, older machines tended not to have much in the way of interrupt-driven I/O, commonly using a vertical blank interrupt to trigger a polling process instead.&lt;/p&gt;&#xA;&lt;p&gt;For a concrete example, look at the &lt;a href=&quot;http://skoolkit.ca/disassemblies/rom/asm/9720.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;source of the Sinclair ZX Spectrum's &lt;code&gt;RND&lt;/code&gt; function&lt;/a&gt;. In case that link goes bad, I'll also summarise it. There is a 16 bit system variable &lt;code&gt;SEED&lt;/code&gt; which unsurprisingly contains the current random number seed. When you call &lt;code&gt;RND&lt;/code&gt;, it computes &lt;code&gt;(SEED+1)*75 mod 65537 - 1&lt;/code&gt; which it stores in &lt;code&gt;SEED&lt;/code&gt;, and returns &lt;code&gt;SEED / 65536&lt;/code&gt;, i.e. a value in the range [0, 1).&lt;/p&gt;&#xA;&lt;p&gt;Because &lt;code&gt;SEED&lt;/code&gt; is just 16 bits, it's clear that this PRNG can't have more than 65,536 possible states. Mathematical analysis of the function it uses to generate the next &lt;code&gt;SEED&lt;/code&gt; will show that it has exactly 65,536 states, and thus will repeat and generate the same values after that many calls. It's alright for deciding where to put aliens on the screen, but I wouldn't trust my online banking to it...&lt;/p&gt;&#xA;" OwnerUserId="80" LastEditorUserId="15334" LastEditDate="2021-01-22T14:06:47.217" LastActivityDate="2021-01-22T14:06:47.217" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="2248" PostTypeId="2" ParentId="2244" CreationDate="2017-02-05T12:54:58.187" Score="14" Body="&lt;p&gt;Some games used the contents of ROM, or a subset of it, starting from a timer-fed address and looping. Because of the limited amount of space available, ROMs tended to be written to be very compact though you will sometimes get blocks of zeroes or repeating data, which is why a subset is often used. &#xA;Other games on the Z80 CPU used the bottom 7 bits of the R register, which is actually there to provide a refresh signal for DRAMs, and increases by 1 every instruction fetch. This is often random enough for game purposes though there's a strong correlation between close reads.&#xA;There wasn't much call for encryption-strength randomness on a computer not attached to a network. Some of the game loaders used scrambling and tricks to protect their games from being cracked or modified, but this decryption had to actually be deterministic to produce the same results every time.&lt;/p&gt;&#xA;" OwnerUserId="3776" LastActivityDate="2017-02-05T12:54:58.187" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2249" PostTypeId="2" ParentId="2244" CreationDate="2017-02-05T13:31:27.067" Score="23" Body="&lt;p&gt;On some games like &quot;Super Mario 64&quot;, the randomness was determined by simply XORing the value whenever it's called (&lt;a href=&quot;https://www.youtube.com/watch?v=MiuLeTE2MeQ&quot;&gt;technical detail can be found here&lt;/a&gt;). This allowed it to be exploited, especially on places where it's never called naturally, like Peach's castle, but by doing moves that generate dust (which calls the RNG function itself), it can be exploited. One example of such a glitch can be seen &lt;a href=&quot;https://www.youtube.com/watch?v=3UDDdbXaGx0&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, here's the raw function for randomness in Super Mario 64 in C:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;unsigned short rng_function(unsigned short input) {&#xA;    if (input == 0x560A) input = 0;&#xA;    unsigned short S0 = (unsigned char)input &amp;lt;&amp;lt; 8;&#xA;    S0 = S0 ^ input;&#xA;    input = ((SO &amp;amp; 0xFF) &amp;lt;&amp;lt; 8) | ((S0 &amp;amp; 0xFF00) &amp;gt;&amp;gt; 8);&#xA;    S0 = ((unsigned char)S0 &amp;lt;&amp;lt; 1) ^ input);&#xA;    short S1 = (S0 &amp;gt;&amp;gt; 1) &amp;amp; 0xFF80;&#xA;    if ((S0 &amp;amp; 1) == 0) {&#xA;        if (S1 == 0xAA55) input = 0;&#xA;        else input = S1 * 0x1FF4;}&#xA;    else input = S1 &amp;amp; 0x8180;&#xA;    return (unsigned short)input;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="65" LastEditorUserId="278" LastEditDate="2017-02-06T17:53:58.377" LastActivityDate="2017-02-06T17:53:58.377" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2250" PostTypeId="2" ParentId="2244" CreationDate="2017-02-05T18:30:58.237" Score="37" Body="&lt;p&gt;The Commodore 64 had a built-in audio processor, called the SID chip.  This chip would generate sounds based on (among other things) a frequency (e.g. 440 Hz) and a wave shape (square, sawtooth, etc.).  One of the options was to generate &quot;white noise&quot;, which is basically a random series of volumes.  Now the fun bit about this is that you could read a snapshot of the current volume from one of the SID registers, which in white noise mode, was an essentially random value from 0-255.  This technique was commonly used on this platform.  Even, if I recall correctly, in BASIC programs, though BASIC had a built-in random function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I'm pretty sure this randomness was generated in hardware, which probably means it was closer to true randomness than the software techniques described in the other answers.  Or it may have been a variant of the circuit described in tofro's answer.  In any case, there may well have been biases in the distribution or other features in the values generated that would make these values weak for cryptography.&lt;/p&gt;&#xA;" OwnerUserId="4401" LastActivityDate="2017-02-05T18:30:58.237" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2251" PostTypeId="2" ParentId="2244" CreationDate="2017-02-05T22:42:34.900" Score="15" Body="&lt;p&gt;Many early systems used the &lt;a href=&quot;https://en.wikipedia.org/wiki/RANDU&quot; rel=&quot;noreferrer&quot;&gt;RANDU&lt;/a&gt; PRNG (seed = seed*65539 mod 2&lt;sup&gt;31&lt;/sup&gt;; the initial seed must be an odd number) which happened to be not very random. If it is used to generate 3D coordinates, the resulting points are positioned &lt;a href=&quot;https://www.youtube.com/watch?v=7wVk_XsxyNk&quot; rel=&quot;noreferrer&quot;&gt;on a few fixed planes&lt;/a&gt;. Here is another visualization of this in an implementation of BASIC on &lt;a href=&quot;https://en.wikipedia.org/wiki/Electronika_BK&quot; rel=&quot;noreferrer&quot;&gt;Elektronika BK-0010&lt;/a&gt;:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/S2aGK.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S2aGK.gif&quot; alt=&quot;BK-0010 RANDU demonstration&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Testing for RANDU can be done by drawing a few thousands of pixels with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PSET (RND*width,RND*height),RND*numcols&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and observing the diagonal stripe pattern.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-02-08T02:50:59.457" LastActivityDate="2017-02-08T02:50:59.457" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2252" PostTypeId="2" ParentId="2244" CreationDate="2017-02-06T02:55:40.020" Score="78" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin&lt;/em&gt; — John von Neumann&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The method that RAND used to calculate their &lt;a href=&quot;https://www.rand.org/pubs/monograph_reports/MR1418.html&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;A Million Random Digits with 100,000 Normal Deviates&quot;&gt;A Million Random Digits with 100,000 Normal Deviates&lt;/a&gt; is described in this brief paper: &lt;a href=&quot;https://www.rand.org/content/dam/rand/pubs/papers/2008/P113.pdf&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;History of RAND's Random Digits: Summary&quot;&gt;History of RAND's Random Digits: Summary&lt;/a&gt; from 1949. In summary, the gated output of a gas-filled thermionic valve (such as a &lt;a href=&quot;https://web.archive.org/web/20170321081436/http://tubedata.milbert.com/sheets/137/6/6D4.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;6D4 Thyratron&lt;/a&gt; [Sylvania, 1944], well known to produce noise when &lt;a href=&quot;https://www.ietlabs.com/pdf/Manuals/GR/1390%20Noise%20Generator.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;operated in a magnetic field&lt;/a&gt;) was used to increment a five bit counter. The noise signal was interrupted every second and the counter read through a BCD converter to produce decimal digits. As the counter would overflow more than 3000 times per second and was fed by pulses with very fast random timing, the results passed all randomness tests &lt;a href=&quot;https://www.wsj.com/articles/rand-million-random-digits-numbers-book-error-11600893049&quot; rel=&quot;nofollow noreferrer&quot;&gt;available at the time&lt;/a&gt;. A similar gas-discharge valve noise system was used in the UK's random draw generator (&lt;a href=&quot;https://en.wikipedia.org/wiki/Premium_Bond#ERNIE&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;ERNIE&quot;&gt;ERNIE&lt;/a&gt;) for premium bonds.&lt;/p&gt;&#xA;&lt;p&gt;Alan Turing identified a very early need for true random numbers in computing, and his design for the never-built &lt;a href=&quot;https://en.wikipedia.org/wiki/Automatic_Computing_Engine&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Automatic Computing Engine (ACE)&quot;&gt;Automatic Computing Engine (ACE)&lt;/a&gt; (1945-6) was to include valve-based noise generators. These were to be used to assist in Monte Carlo simulations, as developed by Ulam for nuclear fission modelling.&lt;/p&gt;&#xA;&lt;p&gt;(I seem to remember reading the statement about Turing and RNGs in George Dyson's book &lt;em&gt;Turing's Cathedral&lt;/em&gt;, but I no longer have a copy to check.)&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2021-05-11T14:17:57.050" LastActivityDate="2021-05-11T14:17:57.050" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="2254" PostTypeId="1" CreationDate="2017-02-06T11:36:56.453" Score="4" ViewCount="251" Body="&lt;p&gt;I'm working on a project to write a small OS based loosely on the functionality of CP/M.  I want to better understand a few things about the early home computing market, as well as to understand operating systems concepts.  I'm using a Cortex M0+, which has, among other things, 8K of RAM.  From this perspective, the Cortex M0+ can't even run CP/M, which required a minimum 16K of RAM.  However, it is also much faster, at 48MHz, plus a bunch of modern enhancements.  So here's the question: can this microcontroller be used in a meaningful way to explore these concepts, or is it so different from what came before that the changes I'll have to make to my OS compared to early ones would be too significant?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, was there an early OS that ran on something with 8K of RAM that still had a reasonable user interface?  Or perhaps a better question, why did CP/M require 16K of RAM?  What did it use all of it for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ostensibly I can just buy a bigger microcontroller, but part of what I'm trying to do is better understand the need for efficiency.  Today, I could just write the OS for an old laptop or something and have access to GB of memory, but that's not the point!&lt;/p&gt;&#xA;" OwnerUserId="4407" LastActivityDate="2017-02-06T11:36:56.453" Title="Using a modern microcontroller to explore early home computing concepts" Tags="&lt;operating-system&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2017-02-06T12:12:37.997" ContentLicense="CC BY-SA 3.0" />
  <row Id="2255" PostTypeId="2" ParentId="2244" CreationDate="2017-02-06T11:37:37.830" Score="6" Body="&lt;p&gt;Others have covered PRNGs commonly used in early machines, so I wanted to add some detail on hardware sources of randomness. Some machines do have dedicated, tested random number generators, but retro computers usually had to make do without them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers with analogue inputs may be able to use those to generate random bits. Typically those inputs are somewhat noisy, due to limitations of the analogue-to-digital converters of the time and electrical noise. For example, the Atari 2600 and related machines could read analogue paddles for Pong style games, which worked by measuring the time it took to charge a capacitor. The charge rate was varied by a current limiting potentiometer in the paddle. Other machines like the BBC Micro had more advanced but still somewhat noisy analogue-to-digital converters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to noise the lowest order bit of an analogue-to-digital conversion tends to be somewhat random on those systems. Sampling those bits, and using them to seed a PRNG can produce better results than just using a PRNG on its own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another common source of randomness was timers. Applications that were not synchronized to the screen refresh could often use registers in the graphic processor, like the current beam position, as a source of randomness. Depending on the application, it might only use the lowest order bit, for example if the current scanline is odd or even.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measuring periods between user input was a popular technique. Times between key strokes, down to the millisecond or below level, are known to be fairly random. Mice are even better for this, although many users of early systems didn't have them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other more exotic sources of randomness included storage medium response times, for example how long a floppy disk took to seek during loading. Since the angle that the rotating disc started at was somewhat random, the overall time to seek to any particular track also varied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these sources had their limitations, so were typically combined and used to seed a PRNG or entropy pool rather than being used directly.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2017-02-06T11:37:37.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2257" PostTypeId="2" ParentId="2244" CreationDate="2017-02-06T15:50:31.713" Score="4" Body="&lt;p&gt;John Von Neuman, during the Manhattan project suggested using a 4 digit number, square it, then use the center 2 digits, for the next round.  I saw this in Richard Rhodes, book &quot;the Making of the Atomic Bomb&quot;.  The problem with the middle number technique, is it will cycle, also if you pick up 0's, then will repeat.&lt;/p&gt;&#xA;" OwnerUserId="4416" LastActivityDate="2017-02-06T15:50:31.713" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2258" PostTypeId="2" ParentId="2244" CreationDate="2017-02-06T15:58:18.767" Score="7" Body="&lt;p&gt;During the 1940s, John von Neumann developed a pseudorandom number algorithm called the &lt;a href=&quot;https://en.wikipedia.org/wiki/Middle-square_method&quot; rel=&quot;noreferrer&quot;&gt;middle-square method&lt;/a&gt; while conducting Monte Carlo simulations on the ENIAC computer for the Manhattan Project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The method was very simple - quoting from the Wikipedia article: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To generate a sequence of 4-digit pseudorandom numbers, a 4-digit starting value is created and squared, producing an 8-digit number. If the result has fewer than 8 digits, leading zeroes are added to compensate. The middle 4 digits of the result would be the next number in the sequence, and returned as the result. This process is then repeated to generate more numbers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Compared with more modern techniques the period of the middle-square method was quite short, however it had the advantages of 1) being faster than reading random numbers off of punch cards, and 2) pseudorandom numbers that got stuck in a loop could be easily detected and discarded.&lt;/p&gt;&#xA;" OwnerUserId="4415" LastActivityDate="2017-02-06T15:58:18.767" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2259" PostTypeId="2" ParentId="2244" CreationDate="2017-02-06T16:12:28.847" Score="11" Body="&lt;p&gt;Don't forget lookup tables. Those were used long before &quot;true&quot; pseudo-random number generators, and usually worked well enough. The simplest is just copying, say, 256 numbers from your random number codebook (a physical book, yes) to your program, and indexing into this memory with a successively incremented index.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, this is obviously nothing even close to randomness required in cryptography, or anything where correctness depends on good randomness (e.g. genetic algorithms, Monte Carlo approximation, ...). But it's good enough for games. As a reasonably recent example, &lt;a href=&quot;https://github.com/id-Software/DOOM/blob/master/linuxdoom-1.10/m_random.c&quot; rel=&quot;noreferrer&quot;&gt;the original Doom used a &quot;random&quot; number generator exactly like this&lt;/a&gt; - 256 pre-defined numbers taken in a loop. This had some visible side-effects (the BFG weapon could &quot;theoretically&quot; inflict much more (or less) damage than it could in practice, thanks to the random generator not being random enough). This was a very common approach in games, since it's extremely cheap (just a single shared &quot;pseudoRandomIndex++&quot; and a memory read from something that's always in CPU cache), and true randomness is seldom required - the main sources of entropy in a typical game are from mostly random ordering of events. BFG in Doom became so heavily biased mainly because it took a lot of those pseudo-random numbers in a sequence.&lt;/p&gt;&#xA;" OwnerUserId="542" LastEditorUserId="4440" LastEditDate="2017-02-08T07:25:14.477" LastActivityDate="2017-02-08T07:25:14.477" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2260" PostTypeId="2" ParentId="2244" CreationDate="2017-02-06T16:47:28.003" Score="10" Body="&lt;p&gt;The Apple II ROM keyboard-reading routines incremented a &quot;random&quot; number while waiting for keypresses:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;KEYIN    INC   RNDL&#xA;         BNE   KEYIN2     ;INCR RND NUMBER&#xA;         INC   RNDH&#xA;KEYIN2   BIT   KBD        ;KEY DOWN?&#xA;         BPL   KEYIN      ;  LOOP&#xA;         STA   (BASL),Y   ;REPLACE FLASHING SCREEN&#xA;         LDA   KBD        ;GET KEYCODE&#xA;         BIT   KBDSTRB    ;CLR KEY STROBE&#xA;         RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Of course, that only works after you've waited for a keypress, otherwise you're relying on the (sometimes slightly unpredictable) initial values of RAM on power-up.&lt;/p&gt;&#xA;" OwnerUserId="335" LastActivityDate="2017-02-06T16:47:28.003" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2261" PostTypeId="1" AcceptedAnswerId="2263" CreationDate="2017-02-06T20:51:37.460" Score="37" ViewCount="10842" Body="&lt;p&gt;I recently came across &lt;a href=&quot;http://microhobby.speccy.cz/mhf/156/MH156_32.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this magazine snippet&lt;/a&gt;; specifically this section:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Aprovechamos para avisar a los usuarios del Inves, que nos ha Ilegado el rumor de que haciendo:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BORDER 5&#xA;RANDOMIZE USR 4665&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;se averia el ordenador. No hemos tenido aún ocasión de comprobarlo (de funcionar, supondría cargarse un ordenador) pero esperamos poderlo verificar en un futuro. En una ocasión dijimos que era imposible averiar un ordenador desde el teclado; bien, ésta sería la excepción que confirma la regla.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;English translation (courtesy of mcleod_ideafix in their original answer):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;We take this opportunity to warn Inves users about a rumor that states&#xA;  that issuing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BORDER 5&#xA;RANDOMIZE USR 4665&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;the computer can be damaged. We haven't tested this yet (if this works,&#xA;  it means we would damage a computer) but we hope to put it to the test&#xA;  in the future. At one time we told you that it was impossible to break a&#xA;  computer by issuing commands from the keyboard. Well, this would be&#xA;  the exception that proves the rule.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is a rumour that the above code snippet, when run in the BASIC prompt, will cause damage to the computer. The text is in Spanish, so I presume it is referring to the Spanish version of the computer. The code doesn't appear to do much in an emulator, except print garbage to the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On an actual machine, does this code cause damage?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="3290" LastEditDate="2020-05-01T07:24:32.490" LastActivityDate="2020-05-01T07:24:32.490" Title="Can a USR command damage a ZX Spectrum?" Tags="&lt;zx-spectrum&gt;&lt;basic&gt;&lt;zx-spectrum-clones&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="2262" PostTypeId="2" ParentId="2261" CreationDate="2017-02-06T21:12:14.843" Score="3" Body="&lt;p&gt;It appears that this rumour is in fact false. A &lt;a href=&quot;http://www.zxprojects.com/images/stories/videos/rand_usr_4665_inves.flv&quot; rel=&quot;nofollow noreferrer&quot;&gt;video of the commands being run on a real Spanish ZX Spectrum&lt;/a&gt; shows that the only visible effect is garbage output.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-02-06T21:12:14.843" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2263" PostTypeId="2" ParentId="2261" CreationDate="2017-02-06T22:33:28.630" Score="60" Body="&lt;p&gt;I am the author of that video. I wrote a little article about that years ago. I will copy that for you here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Original article here:&#xA;&lt;a href=&quot;http://www.zxprojects.com/index.php/the-fix-a-spectrum-blog/29-the-oddities-of-the-inves-spectrum&quot; rel=&quot;noreferrer&quot;&gt;http://www.zxprojects.com/index.php/the-fix-a-spectrum-blog/29-the-oddities-of-the-inves-spectrum&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Inves Spectrum+ was a Spectrum 48K clone made by Investronica, the Spanish partner of Sinclair Research, and responsible for Sinclair distribution in Spain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This clone has suffered from numerous incompatibilities, mainly because of its non standard ROM, altered in some ways, mostly of them to comply with Spanish regulation, that demanded that every computer with less than 64K had to be &quot;spanished&quot;. That is: error messages had to be in Spanish, and the keyboard and screen had to be able to display some Spanish characters, like Ñ, or áéíóú.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Among the features of the Inves Spectrum, there was one that we can consider &quot;unique&quot; on the history of Sinclair computers: the Inves Spectrum was presumably the first Spectrum clone that could be damaged permanently by issuing instructions...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On page 32, issue #156 of the Spanish Microhobby magazine, this could be read:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ROG5E.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ROG5E.png&quot; alt=&quot;Warning in spanish&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The English translation says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;We take this opportunity to warn Inves users about a rumor that states&#xA;  that issuing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BORDER 5&#xA;RANDOMIZE USR 4665&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;the computer can be damaged. We haven't tested this yet (if this work,&#xA;  it means we would damage a computer) but we hope to put it under test&#xA;  in a future. Once ago we told you that it was impossible to break a&#xA;  computer by issuing commands from the keyboard. Well, this would be&#xA;  the exception that proves the rule.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It seems that, after all, they didn't do the test. Too afraid to damage one computer? Well, the Inves Spectrum is now considered &quot;rare&quot; as it only sold in Spain (although I've seen one or two in Britain, but they could have bought from a Spanish ebayer) and only a few months before Amstrad would take over Sinclair, so I'm not surprised that there's no news about someone having tried this &quot;randomize of the death&quot; to the date.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the meanwhile, the ZXSpectr emulator had been released, and claiming that it's the only emulator that supports the Inves Spectrum+ with its oddities. Nevertheless, Spectaculator seems to work well if the Inves ROM is supplied to it (but without the side effects discussed below).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ZXSpectr would have been just another Spectrum emulator, but had a distinctive value added: its author, César Hernández Bañó, showed the results of his own research about the strange behaviour of the Inves. One of them was the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;...It happened that, if you poke'd certain ROM addresses (yes, ROM addresses), the border didn't respond to new BORDER commands, so the speaker to BEEP commands. After some research, we discovered that pokeing ROM addresses whose least significant byte was 254, blocked any data from entering the ULA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be more precise: if you POKE a value V to addresses 254, 510, 766, ..., 16382; that is, N*256+254 with N ranging from 0 to 63, that value V acts like an AND mask for any subsequent data directed to the ULA. This means that if V is 0, regardless of the value issued by the processor, the ULA sees 0 in its data bus. To recover normal operation, 255 has to be &quot;poked&quot; to every &quot;privileged&quot; ROM address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This situation lasted as long as there were power supply to the Spectrum. A hard reset or a RAND USR 0 didn't restore the ULA to the original state. Only after a power cycle, things would come back to normal...&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's with Spectaculator, which I tried the &quot;randomize of the death&quot; with. Thanks to the ability of Spectaculator being able to put breakpoints into anywhere in memory, I traced the code beginning at address 4665, checking that it couldn't do any harm to the computer: the first two/three bytes were incorrectly decoded, as the address 4665 falls in the middle of a multibyte instruction, but after that, it's merely a jump in the middle of some ROM routine. The Phillip Kendall ROM collection lists the Inves ROM, so you can download it and try in your favorite emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what happens with the real machine? Well, see it for yourself:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first video shows what happens if the &quot;randomize of the death&quot; is issued to a real Inves Spectrum+. The video starts with a power cycle to initialize the Inves. If you can, compare this with the result obtained with Spectaculator running the Inves ROM:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.zxprojects.com/images/stories/videos/rand_usr_4665_inves.flv&quot; rel=&quot;noreferrer&quot;&gt;Link to video showing an Inves Spectrum+ executing BORDER 5: RANDOMIZE USR 4665&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, I think that after seeing this, it's the end of the &quot;randomize of the death&quot; hoax. And now for the poke-ROM issues, which I find more interesting. The following video shows an Inves doing a power cycle to initialize, then a tiny BASIC program is written, that pokes a 0 to every ROM location from 0 to 63*256+254. After running the program, I do some ULA related tests. After then, I issue a RAND USR 0, and after that, a hard reset by pushing the reset button. See what happens, and how the Inves can be restored to its normal state:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.zxprojects.com/images/stories/videos/inves_poke_rom.flv&quot; rel=&quot;noreferrer&quot;&gt;Link to video showing &quot;sticky&quot; behaviour of border even after reset&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this last test, I've wondered if this &quot;mask enabling mechanism&quot; only works for memory bus cycles or if it works for I/O bus cycles too. I've changed the POKE instruction for an OUT instruction in the program showed in the video, and nothing weird has happened. So, I think that whatever this is, it's a deliberate feature, not an accidental one. The same Microhobby article showed at the beginning of this post also said that &quot;...it seems that there's some kind of buffer between the Z80 and the peripherals, and some ports have to be written to, to allow access to the external bus...&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This feature can be used to alter the way other ports work. If I do a:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FOR n=0 TO 63: POKE n*256+p,v: NEXT n&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, port &lt;code&gt;p&lt;/code&gt; will be affected by mask &lt;code&gt;v&lt;/code&gt;. That is, any value written to port &lt;code&gt;p&lt;/code&gt; will be ANDed with &lt;code&gt;v&lt;/code&gt;. I've tried this with even ports other than 254 and it works. It seems that port reading operations are not affected, so I cannot test if this works for odd ports too, as the only even port the Inves has is the Kempston joystick (port 223), which is a read-only port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To end this article, I want to mention something that seems to have passed unnoticed to the people that has experimented with the Inves: some people find strange to poke to addresses that are located in ROM area, or at least, it seems so... doesn't it? It might not be that way. Just recall that the Inves Spectrum+ has 64K of RAM (two 64K x 4bit chips). Couldn't it be that the presumed ROM poke operations are indeed writing values in RAM? If so, does these RAM values act as configuration values for the ULA or some other parts of the computer? As a far as I know, there's no schematics for the Inves, and without that, further analysis is not easy.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Well... after many years, I was able to reverse engineer the Inves Spectrum. My findings, which among other things, explain the odd &quot;sticky&quot; behaviour, were published in another article, sadly only in spanish this time, although I digitalized it and published it in the form of a (huge) web page so you can sort of read it using Google Translate. AFAIR, there was a guy that started to do a proper translation of the text, but I haven't contacted him for a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Article here: &lt;a href=&quot;http://www.zxprojects.com/inves/&quot; rel=&quot;noreferrer&quot;&gt;http://www.zxprojects.com/inves/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="7946" LastEditDate="2019-12-17T17:57:50.583" LastActivityDate="2019-12-17T17:57:50.583" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="2264" PostTypeId="1" CreationDate="2017-02-07T01:05:40.540" Score="20" ViewCount="2283" Body="&lt;p&gt;The question '&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2261/can-a-usr-command-damage-a-zx-spectrum&quot;&gt;Can a USR command damage a ZX Spectrum?&lt;/a&gt;' has led me to wonder if there was once a microcomputer that could actually be damaged by software.&lt;/p&gt;&#xA;&lt;p&gt;More specifically:&lt;/p&gt;&#xA;&lt;p&gt;Is there a case that a microcomputer, using its default shipped hardware configuration (i.e. no added interfaces and the like), could be permanently damaged (requiring service to return to working order) just by writing a program and letting it execute it?&lt;/p&gt;&#xA;&lt;p&gt;I'm not talking about damage to elements connected to it (such as the monitor, a disk drive or a printer) but to the computer itself.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="5199" LastEditDate="2020-09-22T06:22:19.377" LastActivityDate="2020-09-23T15:45:36.807" Title="Was there a retro computer susceptible of being damaged only by issuing instructions at it?" Tags="&lt;hardware&gt;" AnswerCount="17" CommentCount="12" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="2265" PostTypeId="2" ParentId="2210" CreationDate="2017-02-07T02:30:52.473" Score="4" Body="&lt;p&gt;The fluid leaking from the battery has likely spread out across the board in a general radius away from the battery. In photo 1 you can see the exposed copper trace above the slots is corroded at least 10cm to the left of the battery. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller card itself shows damage to the full length of the edge connector, so likely all the adjacent unused slot sockets in at least a 10cm radius from the battery have been similarly damaged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to desolder and replace all of the slot connectors, which is exceptionally tricky due to the high pin count on the bottom of each. If any one pin is still attached even partially, you will not be able to budge the damaged slot connector. Though since it is damaged already, you might be able to crush the plastic card-edge connectors and remove the old soldered pins in segments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The integrated circuits near the main power connectors may be hiding damaged board traces underneath them, so you are also going to need to desolder these to inspect what is below them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chips do not tolerate heat very well so there is high risk of damaging them during the desoldering and resoldering process. There are clamp-on heatsink tools available that grab onto the pins to dissipate heat before it enters the chip casing and damages the silicon. This tool is very inexpensive but must be moved to the next pin so the board must be repeatedly flipped over during desoldering. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A random Google search result: &#xA;&lt;a href=&quot;https://www.circuitspecialists.com/ht-156.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.circuitspecialists.com/ht-156.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A metal document binder squeeze clip, also called a bulldog clip can also work as a ganged pin chip heatsink for soldering and desoldering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are going to go through all this work, it is reasonable to consider installing chip sockets where direct-soldered chips are removed. Though desoldered chips may not plug easily into new sockets due to solder residue on the pins, making them irregularly shaped.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-02-07T02:30:52.473" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2266" PostTypeId="2" ParentId="2264" CreationDate="2017-02-07T02:44:43.600" Score="13" Body="&lt;p&gt;Certain models of the Commodore PET had a Killer Poke.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you poked a particular value to a particular location, then the video circuit would damage the integrated CRT.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2017-02-07T02:44:43.600" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="2267" PostTypeId="2" ParentId="2264" CreationDate="2017-02-07T06:56:54.967" Score="0" Body="&lt;p&gt;A straight, simple CPU and memory arrangement of a (sufficiently simple) computer is made to start from a reproducible state after RESET into the next deterministic state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Permanent damage&lt;/em&gt; requires &lt;em&gt;permanent storage&lt;/em&gt; or the &lt;em&gt;ability to change something permanently&lt;/em&gt; in a computer through the ability to control external circuitry - and early home computers didn't have such luxury items. Even if you might (theoretically) be able to drive the same bus line from two devices to a conflicting state (which would be the closest to being able to damage anything), this is not very probable to really cause permanent damage to TTL and early CMOS chips - Early electronics can stand such a strain for quite some time, most even forever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When more modern devices started to have EEPROM or Flash memory that could be permanently changed to store configuration data or have upgradable firmware, it became easier to permanently brick them. But I would deliberately exclude such devices here.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-02-07T10:58:27.783" LastActivityDate="2017-02-07T10:58:27.783" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2268" PostTypeId="2" ParentId="2264" CreationDate="2017-02-07T08:50:08.880" Score="27" Body="&lt;p&gt;This was, and often still is, a deliberate design feature of safety critical computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Harmon VHLC, which is a 80186-based solid state interlocking used for railway signalling has been around since the late 1980s.  Its two CPUs cross-check each other every 39ms to make sure that they are at the same point in the program and agree on the value of certain key registers.  If one processor decides that the other processor is misbehaving, it can write to a memory mapped I/O address that switches 110V into the 5V input.  This is a deliberate ploy to kill the misbehaving processor so that the system fails safe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This technique of multiple processors cross-checking each other is common practice if designing to Safety Integrity Level 4, as defined by CENELEC.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2017-02-07T08:50:08.880" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="2269" PostTypeId="2" ParentId="2264" CreationDate="2017-02-07T09:47:27.907" Score="10" Body="&lt;p&gt;It's not particularly &quot;retro&quot;, but many x86 computers in the early Pentium IV era could be permanently damaged in a matter of weeks by setting the operating voltage and frequency too high.  This would cause the CPU to run hot and literally cook itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Earlier computers used jumpers rather than software controls for these settings, and later computers had better safeguards and thermal management.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2017-02-07T09:47:27.907" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2270" PostTypeId="2" ParentId="2264" CreationDate="2017-02-07T09:50:17.963" Score="6" Body="&lt;p&gt;You could kill the BBC Micro's cassette relay (and those of many other computers with cassette relays) by writing code to toggle them in a tight loop.&lt;/p&gt;&#xA;" OwnerUserId="1931" LastActivityDate="2017-02-07T09:50:17.963" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2271" PostTypeId="1" AcceptedAnswerId="2272" CreationDate="2017-02-07T12:47:03.850" Score="12" ViewCount="1733" Body="&lt;p&gt;Why did the Sinclair ZX-Spectrum use edges for its standard tape storage routines?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can see that frequency modulation was likely necessary in order to account for the inaccurate timings when running off the lower 16Kbs in the lower-end models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, as I understand it, EAR/MIC I/O was level based. Analog tapes also appear to have been based on amplitude modulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that both elements are amplitude based, it seems unnecessary if not dangerous to rely on edges when levels would appear to be fine after applying some chattering removal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was it related to the polarity of the tape recorders or something else entirely?&lt;/p&gt;&#xA;" OwnerDisplayName="user4433" LastEditorDisplayName="user4433" LastEditDate="2017-02-07T12:50:06.123" LastActivityDate="2017-02-13T23:36:32.370" Title="Why did the ZX Spectrum use edges for its tape storage routines?" Tags="&lt;zx-spectrum&gt;&lt;cassette-tape&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2272" PostTypeId="2" ParentId="2271" CreationDate="2017-02-07T14:56:43.230" Score="13" Body="&lt;p&gt;I'm not sure what you mean with &quot;EAR/MIC I/O was level based&quot;. In the ZX Spectrum, the EAR input is a digital input, so it can only be 1 or 0. You cannot measure the input level beyond that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main reason to use edges is for the system to work independently of the audio source. Other systems, such as the Commodore 64, need the datasette to supply a signal with the correct polarity, or the program won't load (this is because the CIA only detects falling edges and starts measuring time from those). The ZX Spectrum doesn't matter if it is a rising or falling edge. It just has to be an edge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Working with levels in a polarity independent way may require more complex code, and one distinctive feature of the ZX Spectrum ROM loader is that it doesn't require any memory location to hold temporary variables while it is executing. Everything (byte being loaded, bit being added to the current byte, time constants, counters, checksum, length of data to load, current address to store the loaded byte to, etc, are held in registers. Only the stack is used as the routine calls several sub-routines. A more complex code might break that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;it seems unnecessary if not dangerous to rely on edges when levels would appear to be fine after applying some chattering removal&quot;. Chattering removal would need a better input filter, and/or a hysteresis driven input. None of that is present in the ZX Spectrum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, an edge based loader has the inconvenient of triggering load errors if an edge is read when it shouldn't. The ZX Spectrum tries to minimize the effect of spureous signals by forcing the user to use a volume setting of about 70-75%, which is pretty loud.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-02-07T14:56:43.230" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2273" PostTypeId="1" AcceptedAnswerId="2274" CreationDate="2017-02-07T19:02:41.743" Score="7" ViewCount="1685" Body="&lt;p&gt;&lt;sub&gt;(This question was inspired by &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2170/621&quot;&gt;Did all NES &amp;quot;Black Box&amp;quot; games come in carts with five screws?&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've heard of the Famicom &quot;Pulse Line&quot; of games released in Japan shortly after the launch of the Family Computer.  Is there anything special about these games?  Is there a North American equivalent of this line?  How may &quot;Pulse Line&quot; games were released?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2017-02-07T21:43:42.370" Title="What is the Famicom &quot;Pulse Line&quot; of games? How many games are part of this line?" Tags="&lt;nintendo&gt;&lt;nes&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2274" PostTypeId="2" ParentId="2273" CreationDate="2017-02-07T19:02:41.743" Score="8" Body="&lt;p&gt;Just after the release of the Famicom in Japan, Nintendo released a collection of games with the same label design known informally as the &quot;Pulse Line&quot; of games.  One could deduce that Nintendo believed the best marketing strategy for new games was to keep the game label design consistent across multiple titles.  Later, Nintendo would create custom artwork for the labels on their cartridges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GZZwu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GZZwu.jpg&quot; alt=&quot;Pulse Line Carts&quot;&gt;&lt;/a&gt;&#xA;&lt;sub&gt;&lt;a href=&quot;https://www.reddit.com/r/gamecollecting/comments/5shu7m/i_now_own_all_14_nintendo_pulse_line_famicom_carts/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Image courtesy of /u/IsForInglip on /r/gamecollecting.&lt;/a&gt;&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some cases:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GRDAR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GRDAR.jpg&quot; alt=&quot;Game Cases&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These carts have a label showing the title of the game in Japanese (Chinese for Taiwanese or Hong Kong releases) and English.  This line is equivalent to the North American &quot;Black Box&quot; line.  Additional information about &quot;Black Box&quot; games can be found in this question: &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2170/621&quot;&gt;Did all NES &amp;quot;Black Box&amp;quot; games come in carts with five screws?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 14 &quot;Pulse Line&quot; titles in order of release are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Donkey Kong&lt;/li&gt;&#xA;&lt;li&gt;Donkey Kong Jr.&lt;/li&gt;&#xA;&lt;li&gt;Popeye&lt;/li&gt;&#xA;&lt;li&gt;Gomokunarabe&lt;/li&gt;&#xA;&lt;li&gt;Mah-Jong&lt;/li&gt;&#xA;&lt;li&gt;Mario Bros.&lt;/li&gt;&#xA;&lt;li&gt;Popeye&lt;/li&gt;&#xA;&lt;li&gt;Baseball&lt;/li&gt;&#xA;&lt;li&gt;Donkey Kong Jr. Math&lt;/li&gt;&#xA;&lt;li&gt;Tennis&lt;/li&gt;&#xA;&lt;li&gt;Pinball&lt;/li&gt;&#xA;&lt;li&gt;Golf&lt;/li&gt;&#xA;&lt;li&gt;Donkey Kong 3&lt;/li&gt;&#xA;&lt;li&gt;Devil World&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="621" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2017-02-07T21:43:42.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2275" PostTypeId="1" CreationDate="2017-02-07T21:13:18.817" Score="15" ViewCount="935" Body="&lt;p&gt;After reading mcleod_ideafix's &lt;a href=&quot;//retrocomputing.stackexchange.com/a/2263/278&quot;&gt;answer about the Inves Spectrum+'s &quot;randomize of death&quot;&lt;/a&gt;, specifically &lt;a href=&quot;http://www.zxprojects.com/index.php/the-fix-a-spectrum-blog/29-the-oddities-of-the-inves-spectrum&quot; rel=&quot;nofollow noreferrer&quot;&gt;his article on the subject&lt;/a&gt;, one thing struck me as odd. From César Hernández Bañó's research:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;...It happened that, if you poke'd certain ROM addresses (yes, ROM addresses), the border didn't respond to new BORDER commands, so the speaker to BEEP commands. After some research, we discovered that pokeing ROM addresses whose least significant byte was 254, blocked any data from entering the ULA.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From the main article:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This feature can be used to alter the way other ports work. If I do a:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FOR n=0 TO 63: POKE n*256+p,v: NEXT n&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;Then, port &quot;p&quot; will be affected by mask &quot;v&quot;. That is, any value written to port &quot;p&quot; will be AND'ed with &quot;v&quot;. I've tried this with even ports other than 254 and it works. It seems that port reading operations are not affected, so I cannot test if this works for odd ports too, as the only even port the Inves has is the Kempston joystick (port 223), which is a read-only port.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why does this occur, and why would this feature have been built into the Inves Spectrum+?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="3290" LastEditDate="2020-05-01T05:03:46.130" LastActivityDate="2020-05-01T05:03:46.130" Title="Why did POKEing ROM addresses mask port writes?" Tags="&lt;zx-spectrum&gt;&lt;rom&gt;&lt;io&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2276" PostTypeId="2" ParentId="2275" CreationDate="2017-02-08T00:04:05.510" Score="22" Body="&lt;p&gt;The following is an excerpt from the &lt;a href=&quot;http://www.zxprojects.com/inves&quot;&gt;article César Hernández Bañó and I wrote about the internals of the Inves Spectrum+&lt;/a&gt;, exposed after a detailed work of reverse enginnering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, some background: César is the author of the first (and AFAIK, only) emulator that handles the oddities of the Inves Spectrum+. With time, his emulator has evolved and now it supports other clones, such as ZX-UNO and TBBlue. As the question states, César did his own research and discover that strange feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second part of the question comes from another article I wrote BEFORE the reverse engineering work. On that part, I speculate with the possibility that this oddity might work with other ports, not only port $FE. Our reverse engineering work proved that this is not true, and the oddity only affects to write ports handled by the Inves itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OTOH, the equivalent of the ULA in the Inves is a gate array manufactured by Texas Instruments (in fact, most chips inside the Inves come from TI). This gate array is the TAHC10, and it has the equivalent of one thousand 2-input NAND gates. In the following parragraphs, any reference to &quot;ULA&quot; must be translated to &quot;TAHC10&quot; unless otherwise stated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the question should be reformulated as &quot;Why did POKEing ROM addresses mask port writes to the TAHC10 on the Inves Spectrum+?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before starting the electronic analysis, I was under the suspect that RAM could be colliding with the CPU when an I/O write bus cycle was in curse. That sounded crazy because I/O writes and memory reads are completely different bus cycles and no decent system designed around the Z80 processor should confuse both (because the Z80 uses a different address space for both memory and I/O, so different signals are activated for each bus cycle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I was very surprised to find out that the TAHC10 doesn't use the WR (write) signal from the CPU at all (in fact, the WR signal goes from the Z80 only to the rear expansion bus). For TAHC10, any bus cycle that is not a read cycle (signal RD asserted) is a write cycle. Then, the crazyness began to be plausible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will be clear if you look at the partially drawn Inves schematic, which includes nearly all the logic circuits:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hJkug.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hJkug.png&quot; alt=&quot;Inves Spectrum partial schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The section of interest is the one that comprises the TAHC10, RAM and several logic circuits. This section shows two data buses, labelled D and VD. D is the data bus directly connected to the Z80. VD is the data bus directly connected to the TAHC10. VD is normally used for the TAHC to read pixel data from VRAM, but as the Inves Spectrum doesn't differentiate between contended memory and non contended memory, there is only one physical RAM memory bank, and that is the bank implemented with two DRAM memories of 64Kx4 bit each. This means that the Inves Spectrum+ shipped with an actual amount of 64KBytes of RAM and 16KBytes of ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This also means that every memory bus cycle between CPU and RAM must transfer data from VD to D (memory read) or from D to VD (memory writes). Analogously, port writes to TAHC must transfer the data to write from D to VD, as the TAHC has not a separate data bus to talk with the Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it's this arrangement of data buses and its interaction, which produces the issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although VD and D are isolated each from another, there are two ICs that allow them to be connected, driven by the TAHC10: they are IC14 and IC15.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IC15 is a latch, capable of storing 1 byte of information. Its input comes from the VD bus and its output goes to the D bus. This latch is used to store a byte read from memory, so it is available to the CPU even if the memory is no longer available. It's loaded when its ENC input is 1, and that happens when output /MUXOE from TAHC10 is 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OTOH, IC14 is a tristate buffer. When enabled, it allows the flow of data from D to VD. This happens when /MUXOE is 0 y /RD is 1. It's the output of IC19A, and it's labelled /BUFFEROE .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, everytime the Z80 wants to use RAM, /MUXOE is 0. This opens the muxes IC20 and IC21, to drive address inputs on DRAM chips, and establish a connection from VD to D, or viceversa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SragG.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SragG.png&quot; alt=&quot;TAHC10 and DRAM section&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The article has several sections. One of them is about how Inves implemented the different read and write ports a Spectrum has. The issue affects to port $FE (only A0 is decoded, as in the original ZX Spectrum).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Port $FE, write. This port is integrated within the TAHC10, for obvious reasons: border colour and speaker are managed from here. As the TAHC only has one data bus (VD) and this is isolated from the Z80 data bus (D), it's logical to assume that the same latches and buffers that participate in RAM access bus cycles, will also participate here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I was warned from César and his research, the test program that was written to study write bus cycles to port $FE was desgined the following way:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, the program writes specific values into RAM. More concretely, address $40FE is written with value $00. Address $41FE with value $F0 and address $42FE with value $FF. According to César tests, the value that will be written into port $xxFE will be the binary AND between the value coming from the Z80 and the value that would be previously written into memory address $xxFE (that is, the same address used for the I/O port, but referred to memory).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this, the program continously writes the same value ( $AA ) to I/O ports $40FE, $41FE and $42FE. The data we see on the VD bus is the same that the TAHC10 will see and accept. Our goal is to check whether memory is being accessed at the same time as the I/O bus cycle is in curse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the chronogram for the I/O write bus cycle to port $40FE. Let's recall that memory address $40FE contains $00.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KDTCq.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KDTCq.png&quot; alt=&quot;I/O bus cycle, port $40FE&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Signal IORQULA is asserted (active negative) when /IORQ is asserted and A0 is 0 (this is the same IORQULA signal present in the Sinclair ZX Spectrum). TAHC10 sees that /RD has not been asserted, so it infers that this is an I/O write bus cycle, so it gets ready to accept data coming from the VD data bus as the new value for border, speaker, etc by asserting /BUFFEROE. As /BUFFEROE is asserted, value $AA from the Z80 can be seen on VD. While this happens, MUXSEL and /MUXOE are also asserted, so a memory read cycle is performed from the same address that it is being used for the I/O bus cycle, which results in data stored in memory at that address to show on VD too. At that precise time, that is, several nanoseconds after /CAS is asserted, VD data bus has a mix of the data from the CPU (provided by IC15) and data from memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IC15 is a 74LS244 transceiver, with a pullup of 50 ohms and bipolar transistors. OTOH, RAM IC TMS4464 is a SMOS device (N-channel scalable MOS), which means that its output stage is implemented with NMOS transistors with a not very strong pullup (another NMOS in enhanced mode acting like a resistor), but with a very strong pulldown, nearly a perfect short circuit to ground. At the end, this means that a 0 bit coming from a memory data bus pin will &quot;win&quot; against whichever value comes from IC15, and that a 1 bit coming from memory will easily be defeated by the value of the signal from IC15. So, this is actually a wired-AND operation between data from memory and data from IC15 (CPU).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that while the RAM is outputting data $00, the wire-AND logic makes the result value seen by TAHC10 to be $00 as well. As for the value read by TAHC10, my thoughts are that it uses a transparent latch that is opened (transparent mode) during the time /MUXOE is asserted. The first half of that time, about a half of a period of the CPU clock, the internal TAHC10 latch sees the original $AA value, so during that first half, border colour and speaker behave accordingly. By the start of the second half, the RAM has outputted its data, wire-ANDing it with Z80 data, and as /MUXOE is deasserted, this last ANDed value is the definitive value that the TAHC10 internal latch keeps. From the user point of view, what it's happening is that during a pixel time (a semiperiod of the CPU clock) the border exhibits its true colour (the one we wanted to write) to inmediately follow to the colour resulting of the ANDed operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An I/O write bus cycle to port $41FE shows this behaviour:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/I4cBU.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I4cBU.png&quot; alt=&quot;I/O write bus cycle to port $41FE&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Value read from memory is $F0, which wire-ANDed with the value the Z80 wants to write, $AA, results in the value being $A0, which is the final value the TAHC10 sees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And last, when an I/O write bus cycle is performed to port $42FE, the data coming from memory is $FF, which means that data coming from IC15 (from CPU) is not altered so the TAHC10 sees it unmasked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AyKwI.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AyKwI.png&quot; alt=&quot;I/O write bus cycle to port $42FE&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this is why POKEs to memory addresses result in this strage issue for port $FE. In fact, it doesn't mind if the address is from ROM or RAM, as regardless the address used, it's the RAM chip which is activated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason behind &quot;why ROM addresses&quot; (César didn't realize at the time that this worked with RAM addresses as well) is because within the Inves ROM (mostly a copy of the Sinclair ROM) any write operation to port $FE is performed by using the instruction OUT ($FE),A. This instruction puts value $FE to the lower part of the address bus, but it also puts the current value of A on the upper part of the address bus. As the ROM writes a value to port $FE so that it always has its three most significant bits with 0 (relevant bits are bits 0 to 4), such value won't be greater than $1F, so POKEing a $00 value on every memory address whose lower part is $FE and its upper part ranges from $00 to $1F, we get the &quot;sticky black colour&quot; effect, and no sound at all. If we issue a OUT 32*256+254,7 instruction, border will be white again (memory address $20FE was not affected by our previous massive POKE operation). If we then issue a POKE 32*256+254,0 , the previous working OUT instruction won't work any longer. In fact, and as most memory addresses whose upper part is greater than $3F are loaded with $00, it will very difficult to find an address that works. This is because any address with an upper part greater than $3F is actually a RAM address, not a ROM address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(to be continued)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Un comando NEW, RANDOMIZE USR 0, o el botón de reset, hacen que se vuelva a ejecutar la rutina de inicialización de la memoria, que es idéntica a la del ZX Spectrum. Esta rutina no toca los valores en ROM porque se supone que en la ROM no se puede escribir, por tanto no tiene sentido chequearla. Así, cualquier valor que se pokeara en ROM, allí seguirá, impidiendo que el color del borde cambie o el sonido funcione.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;La pregunta es lógica: si para cualquier acceso de escritura al puerto $FE sucede esta combinación AND con el contenido de la memoria, ¿cómo es que un Inves recién encendido no muestra comportamientos extraños? Después de todo, el contenido de la memoria es aleatorio en el momento del encendido. ¿O no?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cuando se enciende un Spectrum, sea de Sinclair, Amstrad o un Inves, si ya tenemos sintonizado el canal para que se vea la imagen desde el primer momento, y sobre todo si el equipo lleva apagado varios minutos, se puede ver durante una fracción de segundo una imagen característica, de franjas verticales, a veces negras y blancas, a veces de otros colores. Si el ordenador está estropeado y no puede iniciarse, el patrón queda fijo en pantalla y todos lo interpretamos como un Spectrum averiado. Un Spectrum “sano” sólo mostrará esta imagen por un momento, para seguidamente poner a negro toda la zona de paper, y a continuación, volver a borrarlo dejando el fondo blanco y en la parte inferior el conocido mensaje de copyright.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/G8oSf.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G8oSf.jpg&quot; alt=&quot;Spectrum with initial memory contents&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/Mm8I9.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Mm8I9.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;egún el fabricante y tipo de memoria que lleve, el patrón de franjas verticales es diferente. Pueden ser franjas muy anchas, de unos 8 caracteres de ancho como ocurre con algunos modelos +2A/3, o pueden ser franjas de unos 4 caracteres de ancho, como ocurre en la mayoría de Spectrum’s de 16K y 48K.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Esas franjas que se ven no son más que la interpretación en forma de imagen de los valores iniciales que contienen las celdillas de memoria. En una memoria DRAM, al contrario que las SRAM, quien guarda el valor de un bit es la capacitancia residual que se origina al fabricar un transistor MOS. La carga almacenada es muy pequeña y necesita ser amplificada y refrescada cada cierto tiempo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aquí no he encontrado información adicional, pero especulo con que bits que se guarden en posiciones adyacentes lo hagan con la polaridad invertida unos de otros, de forma que guardar un 1 lógico no siempre signifique cargar el condensador, y guardar un 0 no siempre signifique descargarlo. Como en muchas ocasiones hay grandes regiones de memoria con el mismo valor, estos cambios de polaridad podrían mejorar la inmunidad al ruido del propio chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Así, lo habitual es que tras un periodo prolongado con el equipo apagado, todos los condensadores que almacenan bits estén descargados, pero como el valor que se interpreta por los amplificadores es distinto según dónde esté ubicado el condensador, el resultado neto es que la memoria vuelca datos en forma de patrón regular de 1’s y 0’s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;El Inves monta casi todos los chips de Texas Instruments. Los chips de memoria también lo son, y su patrón de bits sin inicializar es del tipo 1111 0000 1111 0000 …. . Es decir: la dirección $0000 contiene un valor inicial que se interpreta como $F (los 4 bits a 1). La dirección $0001, el valor $0, y así sucesivamente. Al tener dos memorias del mismo fabricante, la secuencia que tenemos es $FF, $00, $FF, $00, etc. En la zona de memoria que guarda la información de la pantalla, esa secuencia hace que se vea el siguiente patrón al encender un Inves:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hrJKA.jpg&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hrJKA.jpg&quot; alt=&quot;Inves initial memory contents&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Y lo curioso de este patrón es que en las direcciones de memoria par guarda el valor $FF. Dado que el acceso al puerto $FE en escritura es un acceso a un puerto par, y dado que en practicamente todos los casos, la parte alta de la dirección de puerto será un valor comprendido entre $00 y $1F, la dirección de memoria que entra en conlicto con el puerto pertenece al espacio de ROM, a donde se espera que no se haga ninguna escritura. Es por esto que este fallo de diseño podría haber pasado inadvertido.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Claro está que si un programa realiza escrituras a ROM (por ejemplo como parte de una protección de carga para obtener un bloque de carga superior a lo que un copión de la época puede manejar) o bien por un efecto secundario de alguna rutina (por ejemplo para hacer un scroll vertical y no tener que chequear si la última fila se copia en ROM), hay posibilidad de que alguna de las direcciones de memoria “sensibles” ($xxFE) resulte alterada, creando el pequeño desastre en el bus VD que hemos visto.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Por otra parte, si se avería un Inves Spectrum y al repararlo se cambian los chips de memoria por otros que no cumplan con ese patrón de datos iniciales, es muy posible que desde el mismo momento del arranque, el color del borde no funcione como debiera, o el equipo se quede mudo.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-02-08T00:04:05.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2278" PostTypeId="1" AcceptedAnswerId="2281" CreationDate="2017-02-08T20:48:29.937" Score="9" ViewCount="3219" Body="&lt;p&gt;How do I create a dump of a Game Boy game so that I can have it for backup as a ROM?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that I can download the ROM (though slightly illegal) if I really wanted to, but I want to know &quot;how&quot; ROM dumping it's done.&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="148" LastEditDate="2017-02-09T06:37:56.300" LastActivityDate="2017-02-09T06:37:56.300" Title="How to get a dump of a particular ROM?" Tags="&lt;rom&gt;&lt;game-cartridge&gt;&lt;game-boy&gt;&lt;dump&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2279" PostTypeId="2" ParentId="2278" CreationDate="2017-02-08T21:04:59.130" Score="3" Body="&lt;p&gt;My experience is from the &quot;old days&quot; of the 80s and 90s, so I'm not sure what is available today.  At work we had several PROM burners that could write (or read) PROMs, EPROMs, and EEPROMs.  It could likely read ROMs as well, because IIRC that era's ROMs and PROMs had the same pinout. With that equipment, you would need a free device (not installed in anything).  You could not attach probes to an in-circuit component to read it. So you can search for this sort of equipment.  It would probably be a lot more expensive than just buying another TI-84, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A second option would be to find a programmable computer that had sockets for the type of device you wish to read. Then, use a memory dump program to write a memory image of that device to disk.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2017-02-08T21:04:59.130" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2280" PostTypeId="1" AcceptedAnswerId="2555" CreationDate="2017-02-08T21:28:04.090" Score="11" ViewCount="980" Body="&lt;p&gt;The V-Tech Laser 128 is an Apple II clone. This machine uses a clean-room copy of the Apple II BIOS and was intended to be compatible with Apple software. However, Brøderbund's games stored with the RWTS18 filesystem didn't run on this machine. I understand why it wouldn't run on an emulator, but why doesn't it run on a clone with an original disk?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-02-08T21:34:36.433" LastActivityDate="2017-03-26T14:41:01.863" Title="Why was Brøderbund's RWTS18 incompatible with the Laser 128?" Tags="&lt;apple-ii&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2281" PostTypeId="2" ParentId="2278" CreationDate="2017-02-09T01:30:45.530" Score="7" Body="&lt;p&gt;There are cart readers available for virtually any type of cartridge, including Game Boy, that will allow you to hook it into your computer to be read.  Modern ones, like the &lt;a href=&quot;http://bennvenn.myshopify.com/products/reader-writer-gen2&quot; rel=&quot;noreferrer&quot;&gt;Gen3 Reader/Writer&lt;/a&gt; (supports GB/GBC/GBA) use USB to connect with a PC and also allow you to flash your own blank carts for homebrew software.  Alternately, you could also rig one up yourself with an Arduino and a spare cartridge slot, as described &lt;a href=&quot;https://www.insidegadgets.com/2011/03/19/gbcartread-arduino-based-gameboy-cart-reader-%E2%80%93-part-1-read-the-rom/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, if you prefer something more DIY.&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2017-02-09T01:30:45.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2283" PostTypeId="2" ParentId="2280" CreationDate="2017-02-09T03:37:47.463" Score="13" Body="&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: From my research the Laser 128 series &lt;strong&gt;&lt;em&gt;was&lt;/em&gt;&lt;/strong&gt; compatible with Broderbund's 18 sector titles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A friend (thanks Michael!) has tested Wings of Fury on his Laser 128EX, and I've tested Airheart on an Apple //e with a VTech &lt;a href=&quot;http://apple2.info/wiki/index.php?title=A2_Floppy_Controllers#UDC_.2F_Universal_Disk_Controller&quot; rel=&quot;noreferrer&quot;&gt;Universal Disk Controller&lt;/a&gt;, both successfully. VTech manufactured the Laser 128 series and the UDC and used similar &lt;a href=&quot;http://www.applelogic.org/ABitABouttheClonerASICs.html&quot; rel=&quot;noreferrer&quot;&gt;ASIC chips in all of them to get around Apple's patents&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The techniques used in &lt;a href=&quot;https://github.com/Michaelangel007/apple2_rwts18&quot; rel=&quot;noreferrer&quot;&gt;RW18&lt;/a&gt; were no trickier or more timing sensitive than DOS itself. Disk timing is tight, so any emulation of Woz's sequencer design should either work or fail for pretty much everything. The use of 18 sectors was originally a cost-saving measure for the game producers, then an extra hurdle and headache for pirates simply because it required complete understanding of the software's disk layout and took extra effort to convert into a standard 16 sector format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that Bank Street Writer III, Prince of Persia, and Wings of Fury use an &lt;a href=&quot;http://pferrie.host22.com/papers/apple2_e7.pdf&quot; rel=&quot;noreferrer&quot;&gt;extra level of protection&lt;/a&gt; which is more sensitive to timing and the implementation of the sequencer, yet we know that at least two of these work on the Laser series.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The entry for Laser 128 in &lt;a href=&quot;https://en.wikipedia.org/wiki/Laser_128#Compatibility&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia says&lt;/a&gt;: (based on &lt;a href=&quot;https://books.google.co.nz/books?id=mi8EAAAAMBAJ&amp;amp;lpg=PA11&amp;amp;pg=PA11&amp;amp;redir_esc=y#v=onepage&amp;amp;q&amp;amp;f=true&quot; rel=&quot;noreferrer&quot;&gt;this 1986 source&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Central Point claimed in 1986 that testing had found that only&#xA;  Choplifterꟸ [1982], David's Midnight Magicꟸ [1982], and Serpentineꟸ&#xA;  [1982] did not run on the clone, because of Broderbund's copy&#xA;  protection.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, I don't think those games are 18 sector. Titles that I know are 18 sector:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Airheartꟸ (1986)&lt;/li&gt;&#xA;&lt;li&gt;Bank Street Writer IIIꟸ (1986 - well, the Scholastic version is 18 sector)&lt;/li&gt;&#xA;&lt;li&gt;Prince of Persia (1989)&lt;/li&gt;&#xA;&lt;li&gt;Where in the USA is Carmen San Diego?ꟸ (1986)&lt;/li&gt;&#xA;&lt;li&gt;Wings of Fury (1987)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But this 1988 &lt;a href=&quot;https://archive.org/details/Laser128SeriesCompatibleSoftwareListVersion1.0&quot; rel=&quot;noreferrer&quot;&gt;Laser 128 Series Compatible Software List&lt;/a&gt; has most titles above that existed at the time. (The titles present in this list are marked with ꟸ).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.apple2/n_YIXZVy6nc/cMsQ1JcqnS8J&quot; rel=&quot;noreferrer&quot;&gt;user compiled list&lt;/a&gt; from 1990 mentions ROM version 4.2, and also has Choplifter and Serpentine, so I think that the ROM is what caused any incompatibility, not disk problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To seal the deal, in &lt;a href=&quot;http://www.hackzapple.com/phpBB2/viewtopic.php?p=4836&quot; rel=&quot;noreferrer&quot;&gt;qkumba's 2012 crack write-up for Choplifter&lt;/a&gt; he notes:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;perform check of ROM code &#xA;;Choplifter does not work on some systems because of this &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This was common practice in protection to prevent the use of crackers' modified ROMs.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2017-02-18T01:15:53.147" LastActivityDate="2017-02-18T01:15:53.147" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="2284" PostTypeId="1" CreationDate="2017-02-09T14:44:55.200" Score="7" ViewCount="476" Body="&lt;p&gt;I am attempting to compile &lt;a href=&quot;//retrocomputing.stackexchange.com/a/1077/278&quot;&gt;John Burger's StdTel&lt;/a&gt; for Windows 98. I am using Pelles C, because it has Windows 98 support, but it appears that I don't have the necessary libraries. This is the compiler's output:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Building StdTel.obj.&lt;br&gt;&#xA;  &lt;strong&gt;C:\StdTel\StdTel.c(76): warning #2145: Assignment of 'char * *' to 'const char * const *'.&lt;/strong&gt;&lt;br&gt;&#xA;  Building StdTel.exe.&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__WSAGetLastError@0'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__htons@4'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__connect@12'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__send@16'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__shutdown@8'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__WSAStartup@8'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__gethostbyname@4'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__getservbyname@8'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__ntohs@4'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__socket@12'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__setsockopt@20'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__closesocket@4'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: error: Unresolved external symbol '__imp__recv@16'.&lt;/strong&gt;&lt;br&gt;&#xA;  &lt;strong&gt;POLINK: fatal error: 13 unresolved external(s).&lt;/strong&gt;&lt;br&gt;&#xA;  *** Error code: 1 ***&lt;br&gt;&#xA;  Done.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So that you don't have to open up the program source, here's the relevant section:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define STRICT&#xA;#define WIN32_LEAN_AND_MEAN&#xA;#define WINVER              _WIN32_WINNT_NT4 // Earliest available option to Windows 98&#xA;#define _WIN32_WINNT        _WIN32_WINNT_NT4&#xA;#define _WINSOCK_DEPRECATED_NO_WARNINGS&#xA;#include &amp;lt;Windows.h&amp;gt;&#xA;#include &amp;lt;WinSock2.h&amp;gt;&#xA;&#xA;#include &amp;lt;io.h&amp;gt;&#xA;#include &amp;lt;fcntl.h&amp;gt;&#xA;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &amp;lt;stdlib.h&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I also tried specifying Windows version 2.10 (guestimated from &lt;a href=&quot;//stackoverflow.com/a/545698/5223757&quot;&gt;this code snippet&lt;/a&gt;), but it didn't appear to have any effect.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-02-09T15:44:44.347" Title="What libraries do I need in order to compile for Windows 98?" Tags="&lt;windows-98&gt;&lt;compilers&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2285" PostTypeId="1" AcceptedAnswerId="2293" CreationDate="2017-02-09T15:37:18.870" Score="12" ViewCount="1008" Body="&lt;p&gt;I was reading about Prince of Persia over at &lt;a href=&quot;http://fabiensanglard.net/prince_of_persia/pop_boot.php&quot; rel=&quot;noreferrer&quot;&gt;POP Code Review&lt;/a&gt;.  In that article, the writer printed an interview with Roland Gustafsson, the inventor of RWTS18 copy protection for the Apple II series.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Roland says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It would have been better for them to have created a copy-system that created exactly the same format, RW18 and just make exact copies!! The experience was MUCH better, faster, etc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As a kid, when I played these games (including C64 games) I seriously thought all of these &quot;cracktros&quot;, &quot;trainers&quot;, etc. were actually a part of the game!  It wasn't until much later I realized that they were pirated games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, my copy of Prince of Persia came on three disks.  Turns out, that's because it was cracked to fit on the standard RWTS16 format from Apple which only supported 140K disks instead of the 157K (two disk) version of the original POP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my question is, how would it have been much better?  Other than a little less disk swapping.  Even with the three disk version, I don't remember it being terrible with constant swapping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only real negative I remember is that is crashed frequently.  I suppose this is because of the cracked version?  I never had the original to compare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="278" LastEditDate="2017-02-09T16:24:02.673" LastActivityDate="2017-06-20T23:00:06.770" Title="How was Prince of Persia &quot;better/faster&quot; with RWTS18?" Tags="&lt;apple-ii&gt;&lt;gaming&gt;&lt;copy-protection&gt;" AnswerCount="2" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2286" PostTypeId="2" ParentId="2284" CreationDate="2017-02-09T15:44:44.347" Score="7" Body="&lt;p&gt;You are probably not linking to the winsock library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the winsock version you are targetting, you should use either&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;ws2_32.lib&lt;/code&gt; for &lt;em&gt;Winsock 2&lt;/em&gt; (which you seem to be using), or &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;wsock32.lib&lt;/code&gt; for &lt;em&gt;Winsock 1.1&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2017-02-09T15:44:44.347" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2287" PostTypeId="1" AcceptedAnswerId="2289" CreationDate="2017-02-09T21:19:29.870" Score="9" ViewCount="1380" Body="&lt;p&gt;The NES/famicon has always used the Ricoh 2A03, a modified MOS 6502 processor to generate the memorable music and sound effects of classic Nintendo games and continues to define the newer 8-bit / chiptune music to this day. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several games included additional chips (known as &lt;strong&gt;Memory Management Controllers&lt;/strong&gt; or MMC) to increase processing power of games. I have always understood that the presence of additional chips can increase memory through methods like ROM bank switching, but I have never understood how certain MMCs like the VRC6, the VRC7 and even the Famicon Disk System were able to add additional sound channels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are these MMCs simply memory storage or are they actually just additional CPU's? &#xA;And how are the additional channels mixed with the 2A03?&#xA;Do the MMCs route audio through itself and back to the famicon?&lt;/p&gt;&#xA;" OwnerUserId="4251" LastActivityDate="2017-02-09T21:32:20.887" Title="How do NES/famicon games produce additional sound channels?" Tags="&lt;nes&gt;&lt;audio&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2288" PostTypeId="2" ParentId="2287" CreationDate="2017-02-09T21:30:14.317" Score="5" Body="&lt;p&gt;The MMCs are neither memory storage nor additional CPUs.  They're integrated circuits -- basically they're chips containing lots of circuitry.  The CPU and PPU in the NES are also ICs, and so is the processor in your computer.  The circuitry in the MMCs commonly performed functions like bankswitching and scanline counting&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Famicom's &lt;a href=&quot;//wiki.nesdev.com/w/index.php/Cartridge_connector&quot; rel=&quot;noreferrer&quot;&gt;cartridge connector&lt;/a&gt; contained an &quot;audio in&quot; pin which allowed circuitry on the cartridge to output audio, so some of the more advanced MMCs had sound generation circuitry, which behaved similarly to the 2A03's sound generation.  The audio pin is missing on the NES; see my answer &lt;a href=&quot;//retrocomputing.stackexchange.com/a/2236/409&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="409" LastActivityDate="2017-02-09T21:30:14.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2289" PostTypeId="2" ParentId="2287" CreationDate="2017-02-09T21:32:20.887" Score="13" Body="&lt;p&gt;In the case of the Famicom, the extra chip(s) on the cartridge would contain some additional sound generators. The cartridge slot contained a pin that would accept audio from the game cartridge and mix it with the other audio coming from the console and send it all to the TV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pinouts: &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/Cartridge_connector&quot;&gt;https://wiki.nesdev.com/w/index.php/Cartridge_connector&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice that the audio pin is missing from the NES cartridge slot; it's not possible for NES cartridges to add additional sound channels without hardware modifications. The audio-input pin &lt;em&gt;is&lt;/em&gt; present on the expansion connector underneath the NES. Some flash carts, like the Everdrive N8, will emulate the extra audio chips and send the sound to an unused pin on the cartridge. This unused pin is also available on the expansion connector, and bridging it to the audio pin (usually with a resistor or two to correct the volume) will allow Japanese games run from the flash cart to produce expansion audio when played on an NES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.retrofixes.com/2014/05/open-hidden-sound-channels-in-nes.html&quot;&gt;http://www.retrofixes.com/2014/05/open-hidden-sound-channels-in-nes.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4459" LastActivityDate="2017-02-09T21:32:20.887" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2290" PostTypeId="2" ParentId="2103" CreationDate="2017-02-09T23:34:15.770" Score="11" Body="&lt;p&gt;You can get a sampling of prices for EPROMs the hard way, by checking ads from electronics magazine archives. For example on page 116 of &lt;a href=&quot;http://www.americanradiohistory.com/Archive-Poptronics/70s/1977/Poptronics-1977-01.pdf&quot; rel=&quot;noreferrer&quot;&gt;Popular Electronics Jan. 1977&lt;/a&gt; you can see the 1702A 2K(bit) EPROM listed for $12.95. The old magazines always had full-page ads with components near the end.&lt;/p&gt;&#xA;" OwnerUserId="4461" LastActivityDate="2017-02-09T23:34:15.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2291" PostTypeId="2" ParentId="2244" CreationDate="2017-02-10T04:31:08.810" Score="4" Body="&lt;p&gt;Here is another tidbit from early Soviet computing. A PRNG subroutine suggested for the &lt;a href=&quot;https://en.wikipedia.org/wiki/M_series_%28computer%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;M-series computers&lt;/a&gt;, the first of which was developed in 1955-1958 and performed at about 20 TIPS, had the following note:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The period of the generator is 2&lt;sup&gt;33&lt;/sup&gt;-1 = 8 589 934 591, that is, the generator has a &lt;strong&gt;practically infinite&lt;/strong&gt; [emph. mine - Leo B.] period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The subroutine was 6 instructions long; therefore, it would require about a month just to exhaust the period by running the generator in a loop without doing any useful work.  The MTBF of a vacuum tube machine was likely an order of magnitude less than that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The scan of the book is &lt;a href=&quot;https://github.com/besm6/besm6.github.io/blob/master/doc/%D0%9C-220-%D0%BF%D1%80%D0%B8%D1%91%D0%BC%D1%8B-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, the routine is on page 349 of the book.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following C program reproduces the algorithm on a 64-bit CPU (hence the need to mask 36 bits, absent in the original) and verifies the period in about 22 seconds on a 3 GHz Intel:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;#define BITS36  0777777777777LL&#xA;#define UPPER13 0777740000000LL&#xA;#define START   0504277326410LL&#xA;unsigned long m20(unsigned long d1) {&#xA;    unsigned long c1 = (d1 &amp;lt;&amp;lt; 13) &amp;amp; BITS36;&#xA;    unsigned long c2 = d1 ^ c1;&#xA;    c2 = c2 &amp;amp; UPPER13;&#xA;    c2 &amp;gt;&amp;gt;= 20;&#xA;    return c1 | c2;&#xA;}&#xA;main() {&#xA;    unsigned long loop_len = 0, s = START;&#xA;    do {&#xA;        s = m20(s);&#xA;        ++loop_len;&#xA;    } while (s != START);&#xA;    printf(&quot;Loop length = %lld\n&quot;, loop_len);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The original code had to do the final f. p. addition of zero to convert the result into a floating point value in the range [0;1). &lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-02-10T19:17:44.117" LastActivityDate="2017-02-10T19:17:44.117" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2293" PostTypeId="2" ParentId="2285" CreationDate="2017-02-10T10:05:23.917" Score="10" Body="&lt;p&gt;Less disk swapping, but also faster loading. Much of the performance improvement in Apple II fast DOS implementations (including ProDOS) was due to less latency between reading sectors - and this happens naturally (in a game) when there are more sectors per track and you read them all. By the time you've read a sector and finished processing it, you arrange for the next sector you need to be right under the drive head ready to be read next.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Roland in &lt;a href=&quot;http://boutillon.free.fr/Underground/Deplombage/Interviews/The_Wizard/Roland_Gustafsson.html&quot; rel=&quot;noreferrer&quot;&gt;another interview&lt;/a&gt;: (with some similar answers - he must use a FAQ!)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The true speed-up came with sector-latency reading... where the read&#xA;  routines would just start reading whatever was under the head, I used&#xA;  this with the 18 sector routines so the maximum latency was 1/6&#xA;  revolution of the disk.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;At the same link there's actually mention of pirates writing dedicated copiers (&quot;Gogsmith&quot;) to reproduce specific 18-sector titles - exactly as Roland suggests in cbmeeks' question's quote.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as wizzwizz4 implies, although the performance and storage increase were impressive, it's unlikely it would have been suitable for a general-purpose Disk Operating System, since the requirements are quite different. For instance after reading or writing a sector there would be no guarantee that the next sector needed would be under the drive head.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course Roland also wrote &lt;a href=&quot;http://www.apple2.org.za/gswv/a2zine/Sel/RDOSstuff.html&quot; rel=&quot;noreferrer&quot;&gt;RDOS&lt;/a&gt; for SSI - 13 and 16-sector versions, but not an 18-sector one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a comparison of nibble encodings and their storage capacities:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Nibbles  Sectors/Track  Total Disk Space in: Bytes   kB&#xA;4+4      10                                  89600   87.5&#xA;5+3      13                                  116480  113.75&#xA;6+2      16                                  143360  140&#xA;6+2      18                                  161280  157.5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2017-06-20T23:00:06.770" LastActivityDate="2017-06-20T23:00:06.770" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="2295" PostTypeId="2" ParentId="2264" CreationDate="2017-02-10T18:56:44.560" Score="11" Body="&lt;p&gt;My teacher asked me the question back when I was in college.  My answer was to write in assembly a simple command that asked the hard drive arm to read well beyond what it was allowed.  This caused the hardware to burn out making the hard drive inoperable.  Hard drives now have a safety precaution built in to avoid this scenario.&lt;/p&gt;&#xA;" OwnerUserId="4467" LastActivityDate="2017-02-10T18:56:44.560" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2296" PostTypeId="2" ParentId="2264" CreationDate="2017-02-11T05:05:20.873" Score="8" Body="&lt;p&gt;As I explained in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1841/409&quot;&gt;my answer to Can removing a cartridge from an NES (or any other cartridge-based game system) damage the hardware or software?&lt;/a&gt;, the NES can be damaged by software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2CO2 PPU in the NES normally reads the background color from palette index 0, but this isn't hard-wired into the chip -- it actually reads the palette index of the background from four EXT pins. These pins are grounded on the NES, forcing the palette index to 0, but an arcade board using the 2CO2 or a similar chip could connect these pins to another PPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bit 6 of &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/PPU_registers#Controller_.28.242000.29_.3E_write%20PPUCTRL&quot; rel=&quot;noreferrer&quot;&gt;PPUCTRL&lt;/a&gt; selects whether the PPU should run in master or slave mode. If the PPU is in master mode, it reads the palette index from the EXT pins as explained above, but in slave mode, &lt;em&gt;it outputs the palette indices it is currently drawing to the EXT pins&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way, the images from two PPUs can be layered. The slave PPU draws one image, and the master draws another image on top of that and outputs the combined images.*&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NES didn't use that feature, but the hardware still exists in the PPU. If the PPU is set to slave mode, it will attempt to output the background palette index to the EXT pins. If it outputs a 1 to any of these pins, it will cause a short from Vcc, through the PPU, and to ground (because the EXT pins are grounded), possibly damaging the PPU.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;*: The image generated by the slave PPU can only use colors from the background palette of the main PPU because there are only 4 EXT pins, not 5.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="409" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2017-02-11T05:05:20.873" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2297" PostTypeId="1" CreationDate="2017-02-11T11:56:14.350" Score="27" ViewCount="2612" Body="&lt;p&gt;Traditional PC serial ports, based on members of the 8250/16550 UART families (or their clones within SuperIO chips) support some unusual serial data formats, specifically 5- and 6-bit data, and 1.5 stop bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some USB-Serial adaptors (Prolific) claim to support these formats, some (FTDI) only offer 7 and 8 bit data. I don't think many microcontroller UARTs support 5 or 6 bit data either, though it's time-consuming to research that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My own experience stretches fairly well back into the distance past, but I cannot recall ever having seen anything use a 5- or 6-bit serial data format.  I would say that 7-bit data formats are old-fashioned and tend to come from the 80s or earlier, and that 5/6 bit formats are nothing more than an historical curiosity.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to recommend to a project I'm involved in which interfaces to serial ports that we drop support (or at least test coverage) for 5- and 6-bit data and 1.5 stop bits.  It would be useful to establish whether anyone knows of any application for these which is still in service.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What were the legacy applications for 5 or 6 bit serial data, and do any of them still exist?&lt;/p&gt;&#xA;" OwnerDisplayName="anon" LastEditorUserId="278" LastEditorDisplayName="user4472" LastEditDate="2017-02-11T14:15:07.540" LastActivityDate="2019-02-20T07:32:55.633" Title="What were the applications of 5/6-bit serial port formats?" Tags="&lt;serial&gt;" AnswerCount="10" CommentCount="15" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2298" PostTypeId="2" ParentId="2297" CreationDate="2017-02-11T12:09:22.613" Score="16" Body="&lt;p&gt;The Baudot code uses 5 bits, and IIRC at least one of the mechanical teleprinters needed 1.5 stop bits to provide the time for the mechanism to do its thing, this at 45 baud. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;RTTY radio comms is probably the one place you still see this stuff in use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;9 bit on the other hand is semi common in RS485 industrial controllers. &lt;/p&gt;&#xA;" OwnerUserId="6508" OwnerDisplayName="Dan Mills" LastActivityDate="2017-02-11T12:09:22.613" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2299" PostTypeId="2" ParentId="2297" CreationDate="2017-02-11T12:19:38.177" Score="13" Body="&lt;p&gt;Traditional Teletypes and many &lt;a href=&quot;https://en.wikipedia.org/wiki/Punched_tape&quot;&gt;paper tape storage systems&lt;/a&gt; use these. You won't be able to read reels of punched paper tape if you drop support for 5 bit data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nor will you be able to interface with &lt;a href=&quot;http://www.tnmoc.org/explore/colossus-gallery&quot;&gt;Colossus&lt;/a&gt; systems, or the &lt;a href=&quot;https://en.wikipedia.org/wiki/Lorenz_cipher&quot;&gt;Lorentz&lt;/a&gt; communications they were designed to decode. At least one of each is apparently still in service - as a museum piece.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Full disclosure : despite being fairly archaic myself, I haven't personally interacted with either of these systems...&lt;/p&gt;&#xA;" OwnerUserId="6700" OwnerDisplayName="Brian Drummond" LastActivityDate="2017-02-11T12:19:38.177" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2300" PostTypeId="2" ParentId="2297" CreationDate="2017-02-11T14:37:09.207" Score="6" Body="&lt;p&gt;Many many years ago, I interfaced an old IBM Selectric Terminal to my CPM machine. It used a 6 bit code that was not supported by my hardware and a 134.5 bit per second data rate also not supported. I wound up bit banging the data out with a software UART. Lucky for me, I was not interested in getting data from the Keyboard as that would have been much more difficult.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastActivityDate="2017-02-11T14:37:09.207" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2302" PostTypeId="1" CreationDate="2017-02-11T21:24:20.457" Score="13" ViewCount="1142" Body="&lt;p&gt;The Super FX co-processor was built into games cartridges such as Star Fox, Yoshi's Island and Doom. It was used for sprite transformations in Yoshi's Island and 3D effects in Star Fox and Doom, as well as for rendering polygons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was a RISC (Reduced Instruction Set Computing) processor used in addition to the SNES CPU, which implies that the chip was specialised for certain tasks. As there were fewer instructions, the chip could more easily be optimised for these instructions. What specific tasks was the Super FX designed and used for?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-02-12T08:43:10.497" LastActivityDate="2017-02-14T06:55:43.867" Title="What did the Super FX co-processor do?" Tags="&lt;snes&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2303" PostTypeId="2" ParentId="1909" CreationDate="2017-02-12T01:43:44.763" Score="10" Body="&lt;p&gt;Yes, games like Rescue Raiders and Silent Service used interrupts to queue music and sound effects while other things were happening on the screen.  Perhaps the best example of the technique is Skyfox, which had music playing during the frenetic dogfight action.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The option to have simultaneous graphics and great sound without cycle-counting was one of the biggest gains that the Mockingboard offered, apart from the sound options themselves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast, the game Microwave interleaved the animation and sound effects by careful cycle-counting.  The game Nemesis interleaved user-interaction with the music in the same way.  This programming model limited the features that could be included because of the challenge to maintain all code-paths that toggled the speaker at the right time.&lt;/p&gt;&#xA;" OwnerUserId="4476" LastEditorUserId="4476" LastEditDate="2017-02-12T06:49:17.153" LastActivityDate="2017-02-12T06:49:17.153" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2304" PostTypeId="2" ParentId="2297" CreationDate="2017-02-12T03:49:16.177" Score="40" Body="&lt;h2&gt;Five-bit teletypewriter codes (&quot;Baudot&quot;, etc.)&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As far back as the early 1900s (believe it or not) there were teletypewriters. They were intended to replace Morse-style telegraphy, directly printing hardcopy rather than requiring an operator to listen to the Morse code and transcribe the messages by hand. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first successful such equipment was invented by a man named Baudot. He also invented the five-bit character code that his machines used. (See [&quot;Baudot code&quot;]) Later, a different five-bit (or &quot;five-level&quot;) code was developed that made it easier to build a mechanical typewriter-like keyboard that would generate the code. The most successful such code was called ITA2. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These codes provided upper case only. They were primarily used for communication between machines like the Teletype Model 15, in networks like Telex, TWX, and Western Union's &quot;Telegram&quot; service. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These networks have almost completely faded away. Some ham radio operators still use Radio Teletype (RTTY) and they do still use the five-bit codes, partly due to tradition, partly for efficiency (they need fewer bits to send a character than the modern 8-bit codes). But this is most often done using computers as terminals, not ancient teletypewriters like the Model 15. A few of the die-hards do keep some of the old machines running. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most old Teletype machines with three rows of keyboard keys (instead of the four that were common on typewriters) used these five-bit codes. They only needed three rows on the keyboard because numbers and special characters were shifted from the alphabetic keys. Two keys labeled &quot;Figs&quot; and, I believe, &quot;Ltrs&quot; sent the &quot;shift in&quot; and &quot;shift out&quot; codes. If you hear somebody talking about &quot;three row&quot; teletype machines, this is what they're referring to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote another answer about how teletypewriters in general, and the 5-level (&quot;Baudot&quot;) machines in more detail, &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4456/what-protocol-do-teletypes-use/4461#4461&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The 6-bit TTS code&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As for six-bit codes, the most common use (at least in terms of async serial communications) was probably the &quot;TeleTypesetter&quot; (TTS) code. I say this because virtually every newspaper that subscribed to a wire service (like AP or UPI) was equipped to receive it, usually with multiple feeds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm going to say quite a bit about this because, while five-bit teletypewriter info is easy to find out about, there's very little out there about TTS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TTS code was a clear descendant of the five-bit codes like ITA2. Despite having six bits it still used &quot;shift in&quot; and &quot;shift out&quot; codes (like the Baudot code family did), permitting TTS to carry over 100 different glyphs (printable characters) and control commands. So it included upper and lower case alphabets, digits, a large assortment of special characters (&quot;Wingdings&quot; - far more than what you'd find on a typical typewriter), plus typesetting-oriented commands like &quot;flush left&quot; (which means &quot;end a paragraph and justify the last line to the left&quot;), center, and flush right. &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;In the wire room&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;In the old days, news wire services like AP and UPI (and smaller local ones, like City News Service) would send stories to their member newspapers via this code, over dedicated leased telephone lines. In each newspaper's &quot;wire room&quot; the copy would be printed on a keyboard-less TeleType Model 20 (so the editors could read and select the stories), and also fed to a &quot;reperforator&quot; (paper tape punch). There was one such pair of machines for each wire service the paper subscribed to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Between each story the wire services would send a bunch of NULs (which would punch essentially blank tape, with only the feed holes), then a bunch of characters that would print as nonsense but would punch out the next-following Story ID on the tape in block letters, followed by more NULs. This made it relatively easy to find the section of tape that corresponded to the following printed copy. It also helped in identifying the correct direction and orientation for the paper tape, as the six-level tape was symmetric about the feed holes! But close inspection of the feed holes gave another way to tell the direction: They &quot;led&quot; the data holes slightly, so the back edge of a feed hole corresponded to the center line of the data holes it went with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A new hire in the wire room would have the job of tearing off the hardcopy and the tape that went with it as it came out, filing the tape, and distributing the copy to the editors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tape for selected stories could then be fed directly to a Linotype machine equipped with a &quot;Teletypesetter Operating Unit&quot;, which was a paper tape reader connected to a metal box that was placed on top of the Linotype's keyboard. The box was conceptually very simple: It had a solenoid for each of the Linotype's keys and it simply &quot;pressed the keys&quot; as the tape was read. The result, just as when a human was typing, was cast metal type that could be put on a press, inked up, and printed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was possible to edit the story before typesetting by using a TTS Teletype machine, tape reader, and tape punch (&quot;reperforator&quot;). The tape would be duplicated until the desired edit point was reached, then the operator could type additional text. Or  to skip things, they would advance the original tape &lt;em&gt;without&lt;/em&gt; copying it to the new tape. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A radio or TV station's news operation would have the model 20 Teletype, but no reperforator or Linotype. Copy from the Teletype would be torn off and handed to editors who turned it into the (generally much shorter) stories the anchors would read. In small stations the on-air news readers also did the writing. Eventually the wire services offered feeds already edited for radio or TV, used by smaller stations that didn't want to hire news copy editors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Teletype machines and paper tape punches ran nearly continuously, as stories were updated and reposted throughout the day. Ear protection was a good idea in the wire room! To this day, a few &quot;all news&quot; radio stations use the sound of one of those machines pounding out copy as background sound to their live on-air reporters.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;TTS code and computer typesetting&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;In later years the incoming 6-bit signal was connected directly into a computer's serial port, stored on disk, and made available for review and editing via video terminals. After editing the computer would send the copy to a phototypesetter, resulting in nicely set type on photo paper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I spent a few years working for a newspaper with such equipment, based on HP 2100 minicomputers. We still had the reperforators but they were turned on only during the hour or so when we ran the nightly backups. Due to repetition on the feeds, almost all stories they wanted to use would be found already in the computer, but if need be they could find the tape for a missed story and read it via a paper tape reader attached to the computer. Incidentally our phototypesetters were made by Merganthaler, the same company that made Linotypes. The software system was called &quot;Text II&quot;, from a company called Systems Development Corporation, based in Santa Monica.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Virtually everything you ever saw printed in a newspaper with &quot;AP&quot;, &quot;UPI&quot;, or some other news &quot;wire&quot; service in the slug line came into the paper via systems like this. The local newspaper may, however, have edited the stories, sometimes significantly. &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;TTS phase-out&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Around the late 70s, about the same time that I left the paper, AP was planning to offer a higher-speed network using eight-bit codes. So today, nearly 40 years later, I doubt that there's much if any of this six-bit TTS code left in use today - any more than there are five-bit (&quot;three-row&quot;) teletype networks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well-maintained operating examples of TTS equipment are virtually nonexistent as there is virtually no hobbyist interest in it. One Teletype enthusiast site claims there is &lt;em&gt;one&lt;/em&gt; operating example of a Teletype model 20. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Computers and six-bit codes&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There were also many computers that used 6-bit character codes internally. Examples were the PDP-8 (a 12-bit machine, so two 6-bit characters could fit in a machine word), IBM 1401 and 7090, CDC 3000 and 6000 series (24-, 48-, and 60-bit words respectively), etc. These were not the same six-bit codes as TTS, and &quot;shifting&quot; was generally not used to expand the code set. Nor did they commonly use six-bit paper tape.  Printers and punched cards of the day only supported upper case alphabets, so 64 different glyphs were enough. (See, for example, the Wikipedia article on the IBM 1401.) Some of them did, however, communicate with these six-bit codes over early modems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM's System/360 set a &lt;em&gt;de facto&lt;/em&gt; standard of 8-bit bytes (but using IBM's EBCDIC character code, which had very little uptake elsewhere), and several very successful mini-computers with 16-bit words (HP 2100, DG Nova, DEC PDP-11) started using 8-bit characters (generally using ASCII character codes) at around the same time. That pretty much ended the era of six-bit character codes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM 2741 and 1050 printing terminals were originally used with machines like the 7090 and the 1401, and these terminals used six-bit characters (at 134.5 bit/s, 1.5 stop bits). This was, however, a very different six-bit code from TTS, and in many cases different also from the character code used within the machines they connected to. (Of course.) Like the TTS code, though, they did have &quot;shift in&quot; and &quot;shift out&quot; commands, which corresponded literally to &quot;shifting&quot; the typewriter mechanism (ie rotating the ball 180 degrees). The 2741 and 1050 were based on the IBM Selectric mechanism; the Selectric typeballs of that time had 88 printable characters, already too many for six bits even before other controls are counted. (But not, alas, quite enough for the 94 printable glyphs of seven-bit ASCII.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later the same terminals were connected to System/360 and other eight-bit machines and the computers, or purpose-designed interfaces, had to do the code conversion. So if you happen to find a working 2741, yeah, you'll need that six-bit code to talk to it. :) You'll also need to be able to set your serial port to 134.5 bit/s. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Baudot_code&quot; rel=&quot;nofollow noreferrer&quot;&gt;Baudot code, ITA2, etc.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.smecc.org/teletypes_in_typesetting.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;About teletypesetting and Linotypes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2741&quot; rel=&quot;nofollow noreferrer&quot;&gt;About the IBM 2741&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Linotype_machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;About Linotypes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3705" LastEditorUserId="3705" LastEditDate="2019-02-20T07:32:55.633" LastActivityDate="2019-02-20T07:32:55.633" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="2305" PostTypeId="2" ParentId="1596" CreationDate="2017-02-12T14:27:02.383" Score="4" Body="&lt;p&gt;I worked with this machine for many years, mostly while employed at Digital Equipment Corporaion. The code in our library for multiple-precision subtraction was: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        CLA             ; not required if previous code always leaves AC==0&#xA;        TAD  B&#xA;        CLL CMA CML IAC ; form 13-bit negative with no previous borrow&#xA;        TAD  A          ; generates 0 for borrow, 1 for no borrow&#xA;        DCA  C&#xA;        RAL             ; propagate &quot;complemented&quot; borrow&#xA;        TAD  B+1        ; add previous stage borrow before forming negative&#xA;        CMA CML IAC     ; form 13-bit negative&#xA;        TAD  A+1        ; generates 0 for borrow, 1 for no borrow&#xA;        DCA  C+1&#xA;        RAL             ; propagate &quot;complemented&quot; borrow&#xA;        TAD  B+2        ; add previous stage borrow before forming negative&#xA;        CMA CML IAC     ; form 13-bit negative&#xA;        TAD  A+2&#xA;        DCA  C+2        ; et.seq. for further precision&#xA;        ; for unsigned arguments, the link now indicates a negative result&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The static load is an irreducable 5 instructions per additional word of precision. The dynamic load is 8 to 11 cycles per word of precision, depending on indirection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-8 programmers I worked with at DEC felt this arrangement of operations was the most easily proved correct. Some DECUS contributors may have had other opinions. &lt;/p&gt;&#xA;" OwnerUserId="4186" LastActivityDate="2017-02-12T14:27:02.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2306" PostTypeId="1" AcceptedAnswerId="2308" CreationDate="2017-02-12T14:44:07.770" Score="5" ViewCount="173" Body="&lt;p&gt;I heard it is possible to &lt;a href=&quot;http://www.mcmanis.com/chuck/computers/vaxen/storage.html&quot; rel=&quot;noreferrer&quot;&gt;&quot;telnet to the hard disk&quot;&lt;/a&gt; on VAX systems where the HD is connected with a DSSI interface. What commands are available once one establishes a connection to the disk?&lt;/p&gt;&#xA;" OwnerUserId="4479" LastActivityDate="2017-02-12T20:41:26.237" Title="Connecting to a Digital DSSI disc drive" Tags="&lt;hard-disk&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2307" PostTypeId="2" ParentId="2297" CreationDate="2017-02-12T16:57:36.377" Score="2" Body="&lt;p&gt;The IBM 6 bit &lt;a href=&quot;https://en.wikipedia.org/wiki/Transcode_(character_encoding)&quot; rel=&quot;nofollow noreferrer&quot;&gt;transcode&lt;/a&gt; was one of the serial modes supported by the IBM &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2780/&quot; rel=&quot;nofollow noreferrer&quot;&gt;2780&lt;/a&gt; amongst other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There used to be a (printed) handbook that compared all the then known codes from 5 bit Baudot to 8 bit ASCII (which was rather new at the time). It might be interesting to see if there is a scanned copy somewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you will find the 6 bit transcode mentioned in the &lt;em&gt;first&lt;/em&gt; edition of The art of electronics.&lt;/p&gt;&#xA;" OwnerUserId="4480" LastActivityDate="2017-02-12T16:57:36.377" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2308" PostTypeId="2" ParentId="2306" CreationDate="2017-02-12T20:41:26.237" Score="7" Body="&lt;p&gt;The &lt;em&gt;RF Series Integrated Storage Element User Guide&lt;/em&gt; is available as PDF e.g. &lt;a href=&quot;http://decdoc.itsx.net/dec94mds/rf72dug8.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On page 3-10 (p.88 in the PDF), it lists the commands to &quot;telnet&quot; (not really) to the ISE (here, to run the &lt;code&gt;PARAM&lt;/code&gt; program):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ MCR SYSGEN&#xA;SYSGEN&amp;gt; CONNECT/NOADAPTER FYA0&#xA;SYSGEN&amp;gt; EXIT&#xA;$ SET HOST/DUP/SERVER=MSCP$DUP/TASK=PARAMS &amp;lt;node_name&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On page 2-32 (p.72 in the PDF), there's a table of available programs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;PARAMS&lt;/code&gt;: &#xA;A SYSGEN-like parameter editor and interactive query utility used to view ISE and DSSI bus status.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;HISTRY&lt;/code&gt;:&#xA;An abbreviated version of a portion of PARAMS. HISTRY is used by host-level software such as MDM.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;DIRECT&lt;/code&gt;:&#xA;A directory program, output only, that lists the available diagnostic and utility programs.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;PRFMON&lt;/code&gt;:&#xA;An abbreviated version of a portion of PARAMS. PRFMON can be used by host-level software such as the VAX performance analyzer (VPA).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;DRVEXR&lt;/code&gt;:&#xA;A comprehensive drive exerciser.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;DRVTST&lt;/code&gt;:&#xA;A quick pass/fail test of the drive.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;VERIFY&lt;/code&gt;:&#xA;A complete read check of the disk and verification of the DSDF1 on- disk structure.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;ERASE&lt;/code&gt;:&#xA;A data ``scrubber'' utility that writes alternating patterns to each LBN, including the second sector of the RCT and the previous locations of the bad blocks, and then verifies that the scrubbing process succeeded.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;DKUTIL&lt;/code&gt;:&#xA;An interactive block display and replace utility. Typically used to confirm ERASE scrubbing.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Page 2-18 (p.58 in the PDF) contains an example list of running threads (processes) in the ISE. The CPU apparently was an 680x0.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-02-12T20:41:26.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2309" PostTypeId="1" CreationDate="2017-02-12T21:08:02.560" Score="1" ViewCount="442" Body="&lt;p&gt;Games like Super Mario 64 were revolutionary: full, round, hi-definition 3D models moving in real-time and able to be interacted with. This was because they were designed for machines with separate graphics processors. These GPUs would handle anything from overlaying images to rendering 3D models, even processing sound in some machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, many great 3D games were created for machines without GPUs.&lt;sup&gt;[citation needed]&lt;/sup&gt; What techniques were used to create 3D effects without a GPU?&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-02-12T21:08:02.560" Title="How were 3D effects created before GPUs?" Tags="&lt;software&gt;&lt;graphics&gt;" AnswerCount="0" CommentCount="9" ClosedDate="2017-02-13T10:52:02.510" ContentLicense="CC BY-SA 3.0" />
  <row Id="2310" PostTypeId="2" ParentId="2297" CreationDate="2017-02-13T03:15:23.240" Score="2" Body="&lt;p&gt;Peter Camilerri -- I did exactly the same thing around 1980. I was able to get &quot;letter quality&quot; output while everyone else had &quot;dot matrix&quot;. I did this by driving an IBM Selectric terminal using 6-bit serial (with the bit order reversed), using a program I had written in BASIC. This was on an 8-bit Z-80 system running MP/M, the multiuser version of the CP/M OS.&lt;/p&gt;&#xA;" OwnerUserId="4485" LastActivityDate="2017-02-13T03:15:23.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2311" PostTypeId="2" ParentId="2297" CreationDate="2017-02-13T05:29:43.017" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It would be useful to establish whether anyone knows of any application for these which is still in service.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;RTTY (FSK modem over radio) still uses 5 bit code at low bitrates 45/50. It's often still used for automatic weather reports.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What were the legacy applications for 5 or 6 bit serial data, and do any of them still exist?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The six bit code was convenient for golf-ball style teleprinters, where it could directly drive the six solenoids that operated the print head without needing additional translation. This is why you'll often see it used with more than one stop bit, as the solenoids need time to get back to their resting position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find lots of information on RTTY and its history here &lt;a href=&quot;http://www.rtty.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.rtty.com/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4486" LastEditorUserId="3705" LastEditDate="2019-02-19T05:21:08.883" LastActivityDate="2019-02-19T05:21:08.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2312" PostTypeId="2" ParentId="2302" CreationDate="2017-02-13T13:32:08.100" Score="13" Body="&lt;p&gt;The main tasks were:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Emulation of a bitmap framebuffer for the SNES. The SNES is tile-based, which means plotting arbitrary lines, polygons etc. and filling them with color or a pattern isn't easy. The Super FX had enough RAM on the cartridge to use it as a framebuffer, and it can then DMA transfer it to the SNES video RAM.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Faster 16-bit math operations, including multiplication, necessary for 3D and 2D rendering. The Super FX is a custom 16-bit RISC chip running at up to 21 MHz, so it can easily outperform the main CPU on these tasks.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So it's very similar to what a GPU does in more modern graphics cards. Still, it has a pretty general instruction set, so in theory one could use it for everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikibooks.org/wiki/Super_NES_Programming/Super_FX_tutorial&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; has lots of detailed information on registers and the instruction set.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2017-02-14T06:55:43.867" LastActivityDate="2017-02-14T06:55:43.867" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2313" PostTypeId="2" ParentId="2271" CreationDate="2017-02-13T18:11:38.333" Score="5" Body="&lt;p&gt;Physical magnetic media doesn't deal well with DC (or near DC) signals, which a long string of 0s or 1s would be if they were level sampled (there is a minimum frequency the tape can store). Edge triggering forces the signal to transition at a suitable rate to store on tape because both zeroes and ones include transitions.&lt;/p&gt;&#xA;" OwnerUserId="4488" LastActivityDate="2017-02-13T18:11:38.333" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2315" PostTypeId="2" ParentId="2271" CreationDate="2017-02-13T23:30:47.087" Score="7" Body="&lt;p&gt;It's the normal way to do it. In fact floppies and hard drives work this way too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In an analog signal recording on a magnetic media:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Amplitude is unreliable since the chemistry of the tape, the recording bias, the read/write head amp, the length of the cable, the output volume, etc can all affect amplitude.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Frequency, on the other hand, has only the tape speed as a variable.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As tylisim hinted in a comment above, there is another factor which is due to the nature of the head: the signal needs to be cycled regularly, otherwise the surface of the head will resist change and playback will be altered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recordings on magnetic media therefore encode data as flux reversal over time.&#xA;This is very convenient since time is quite reliable, and edge changes are much easier to deal with, from an electronics' perspective, than amplitude levels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This also allows to encode synchronization marks into the signal so that the timing loop knows the actual speed of the tape and can re-calibrate itself at regular interval during the read operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most common format for floppies was &lt;a href=&quot;https://en.wikipedia.org/wiki/Modified_Frequency_Modulation&quot; rel=&quot;noreferrer&quot;&gt;MFM&lt;/a&gt;, where 50% of the data actually written on the disk was to keep the  head from staying too long in the same state, and also synchronize the controller with the actual read speed.&#xA;Apple used another format called &lt;a href=&quot;https://en.wikipedia.org/wiki/Group_code_recording&quot; rel=&quot;noreferrer&quot;&gt;GCR&lt;/a&gt; but it was an exception.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tapes do not have the same density as floppies and the heads have a larger mass, so they do not need flux reversal as often, but the theory is the same.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastEditorUserId="3884" LastEditDate="2017-02-13T23:36:32.370" LastActivityDate="2017-02-13T23:36:32.370" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2316" PostTypeId="1" CreationDate="2017-02-15T17:44:04.317" Score="13" ViewCount="947" Body="&lt;p&gt;On the back of &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2297/what-were-the-applications-of-5-6-bit-serial-port-formats&quot;&gt;this question&lt;/a&gt; which talks about 5- and 6-bit communications, I remember back in the BBS days that it was common to set your terminal to 8N1, (a.k.a. 8 bits, no parity, 1 stop bit) to communicate with most BBSes. It was a bit of a curiosity why there was also 7E1 ('E'ven parity) amongst other configurations since I don't recall ever going to a board that required anything other than 8N1.&lt;/p&gt;&#xA;&lt;p&gt;Considering that parity is sometimes (always?) used for error correction, was the purpose of having a 7E1 connection a way of doing simple error detection in your transmission? If so, did anything ever use it at least in the PC modem communications world or is it just a relic of (say) tn3270 communications or something like that?&lt;/p&gt;&#xA;&lt;p&gt;I can imagine that 8N1 was popular since the home micros of the 70s and 80s had 8 bit bytes and thus was necessary for transferring files without the help of something like Kermit which I believe accounted for bit and character code differences (e.g. IBM System 360's EBCDIC to ASCII). But if it was just a text service, a parity bit could be useful? (Come to think of it, was 8E1 possible?)&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="15334" LastEditDate="2021-01-23T14:49:50.627" LastActivityDate="2021-01-25T18:00:06.337" Title="How was parity used with modems?" Tags="&lt;serial&gt;&lt;modem&gt;&lt;bbs&gt;" AnswerCount="6" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2317" PostTypeId="2" ParentId="2316" CreationDate="2017-02-15T21:18:31.330" Score="9" Body="&lt;p&gt;By the time I got my first analog modem, around 1980, my experience was the same as yours. Even and odd parity on 7-bit data was available, but almost all the BBSs featured 8N1. (The modems even still supported 5- and 6-bit data streams.) Apparently noise on phone lines by that time was so low that parity detection was considered superfluous for a large number of users. The BBSs would allow you to use a parity protocol if you wanted, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that parity in itself cannot correct errors. It is used for error detection. Software protocols were developed to flag a detected error and signal the sending computer to resend the bad packet.  As Leo B.'s link shows, there were more complex, actual error-correcting, protocols as well. For these, data would seldom need to be resent, because the packets already had enough information to find and correct a certain number of bad bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem with 7-bit data is that it is inefficient in handling binary information, or anything other than ASCII and other 7-bit character encodings. You could send binary data, but it would greatly increase the amount of data to transfer.  The simplest protocols encoded each 8-bit byte into two printable ASCII characters, doubling the data size. Smarter protocols could encode more efficiently and send, say 4 ASCII characters representing 3 binary bytes. The one saving grace is that the data was almost always compressed. So even with the extra bytes caused by 7-bit data, the transferred number of bytes might even be smaller than the original file size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One useful feature I wished they had added to the modems and BBSs of the day was support for the protocol used by a &lt;a href=&quot;https://en.wikipedia.org/wiki/Telecommunications_device_for_the_deaf&quot; rel=&quot;noreferrer&quot;&gt;telecommunications device for the deaf&lt;/a&gt; (TDD). It is apparently a 5-bit protocol, but as far as I know, no non-specifically deaf-related BBSs used it. I think, though, even they favored common packages such as Kermit and Modem7. Being deaf didn't limit folks from using a full computer keyboard, and, hey, mixed upper and lower case is kind of nice. I think the only reason you would want access to the old, deaf-only protocol is to communicate with someone who just had the TDD equipment, and no networked computer. That probably was not a big enough market for modem manufacturers, but it would have been nice to have available for anyone who did need it.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-02-16T02:21:04.200" LastActivityDate="2017-02-16T02:21:04.200" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2318" PostTypeId="2" ParentId="1326" CreationDate="2017-02-16T00:05:44.140" Score="2" Body="&lt;p&gt;MrC is a PowerPC compiler, you want C or SC which are the 680x0 compilers (Apple's original and Apple's licensed version of Symantec's compiler). Also you'll need to actually link the resulting object file with the right libraries to either generated an MPW tool or an application running under SIOW.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest using the CreateMake functionality in MPW to build a Makefile, rather than try to do this all by hand, especially since there are significant differences between what you might be used to from UNIX shells and Makefiles and the MPW implementations of these concepts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Also, in case you weren't aware, MPW is just another application on the classic Mac. It's not doing anything like providing access to an &quot;underlying&quot; command line; there is no such thing, if that's why you chose to use MPW rather than, say, THINK C or CodeWarrior.)&lt;/p&gt;&#xA;" OwnerUserId="4496" LastActivityDate="2017-02-16T00:05:44.140" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2319" PostTypeId="2" ParentId="1944" CreationDate="2017-02-16T00:11:07.747" Score="2" Body="&lt;p&gt;You might be able to find the precise dimensions in the Developer Note that came out around the time of the release; this is what would also have pinouts and specs for RAM expansion and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need to do a little more than just repackage some modern cells and get the right voltage and wattage, however: The PowerBook will try to charge the battery when plugged in, so you'll need to make sure the PowerBook's charging circuit doesn't actually harm the modern cells, which may have very different expectations with respect to charging especially if they're implemented with a different technology.&lt;/p&gt;&#xA;" OwnerUserId="4496" LastActivityDate="2017-02-16T00:11:07.747" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2322" PostTypeId="1" AcceptedAnswerId="2328" CreationDate="2017-02-16T08:35:43.137" Score="8" ViewCount="865" Body="&lt;p&gt;A punchcard (in 3 fragments) has been found in a copy of &lt;em&gt;Computer Programming: A Mixed Language Approach&lt;/em&gt; by Marvin L. Stein and William D. Munro (1965).&#xA;&lt;a href=&quot;https://i.stack.imgur.com/c9a7K.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/c9a7K.jpg&quot; alt=&quot;Recto&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/qpqqs.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qpqqs.jpg&quot; alt=&quot;Verso&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If my guess is right, a test-taker would write in her name, etc. then pencil in one of A-E answers to questions 1 up to 108, and then? Here we can see that the test number or the course number is already punched. What was the process of entering these punchcards in a computer? Were all pencil marks converted to punches first, or were there mixed punchcard/optical readers? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone remember using such punchcards to take tests?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="357" LastEditDate="2017-03-08T18:45:30.860" LastActivityDate="2017-03-08T18:45:30.860" Title="How did a punchcard-based test-taking system work?" Tags="&lt;history&gt;&lt;punched-cards&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2323" PostTypeId="2" ParentId="2316" CreationDate="2017-02-16T08:39:31.780" Score="4" Body="&lt;p&gt;The main benefit of parity is that it was detected within the modem.  It did not require processing power within the computer itself.  Although, usually the modem would generate a &quot;&lt;em&gt;Parity Fail&lt;/em&gt;&quot; interrupt if it occurred.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending upon the protocol, the receiving modem would reply to the sending modem with a parity fail e.g. &lt;code&gt;NAK&lt;/code&gt; instead of &lt;code&gt;ACK&lt;/code&gt; and the message would be resent.  In some modems, if using 5-wire connections instead of 3-wire then this could also be done by flashing the CTS line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could show you any number of modem systems still in use that use 7-bit data, even parity, with 2 stop bits (7E2).  Indeed, such systems are still being installed in quite large numbers because of their security.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="4138" LastEditDate="2017-02-16T12:14:50.853" LastActivityDate="2017-02-16T12:14:50.853" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2324" PostTypeId="2" ParentId="2322" CreationDate="2017-02-16T08:47:04.147" Score="5" Body="&lt;p&gt;The pencil marks would have been punched into the card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the 1960s-70s most computer suites had teams of people who would transcribe written notes onto punched cards.  My mother worked part-time in one for many years.  These places were the typing pools of their day.  Data would arrive either on paper or on part-punched cards and the operators would copy-type the data onto cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pILp2.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pILp2.jpg&quot; alt=&quot;Punch Card Pool&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in your case, it is most likely that the cards would have gone through a pool like this to have the pencil marks transcribed into the card.&lt;br&gt;&#xA;It was quite possible to see the card you were punching so that you could read the marks, as shown below:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BiBKd.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BiBKd.jpg&quot; alt=&quot;Individual Punch Machine&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... and do I remember using punched cards?  Yes, when first learning the art.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2017-02-16T08:47:04.147" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2325" PostTypeId="2" ParentId="2316" CreationDate="2017-02-16T11:54:55.233" Score="7" Body="&lt;p&gt;&lt;em&gt;Parity&lt;/em&gt; is a &quot;one-bit checksum over a single character&quot;. It can be used to detect single-bit errors in a serial asynchronous link (As the checksum is only one bit, two or more bits/char failed transmission can go undetected).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parity &quot;even&quot; adds a bit so that the &lt;em&gt;sum of all data bits in the byte frame is even&lt;/em&gt;, while &quot;odd&quot; parity does the same so that the sum turns out to be odd.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parity is generated and verified normally by the UARTs in both the modem and the computer, and (at least in newer modems starting from ~1990) &lt;em&gt;not&lt;/em&gt; transmitted over the modem link (which is typically syncronous and has no room for parity, but rather uses a much more complicated overlaid frame structure over the data to check for transmission errors and even do retransmissions over the phone line).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parity on &quot;dumb&quot; (or older) UARTs normally sacrifices one of the eight data bits in the byte frame for parity - effectively shortening the byte to 7 bits, and limiting the range of transferrable bytes to 0-127, which is still enough to transmit the full range of ASCII characters. For binary transfers, some sort of &lt;em&gt;Escape mechanism&lt;/em&gt; needs to be employed to be able to transfer the full range of 0..255. More modern UARTS newer than 1980 could (and can) transmit 8+P bits per frame and thus normally transfer a full byte in one character frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parity is useful when you have very long lines between the RS-232 comms participants, as was the case in ancient building-wide (or even larger) RS-232 communications between terminals and the mainframe (or terminal server) where the long cables were prone to induced electrical disturbances. As mostly text was transferred, the missing data bit didn't really hurt. On a short piece of RS-232 cable between a computer and a modem, it's pretty unlikely to be needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;8P[1-2] was used for binary transfers with non-terminal installations where the capability to transfer complete bytes was a must. The parity bit obviously produces a 12.5% overhead on transmission, wich is quite a bit - So transmissions using parity have less free bandwidth than such without. Note the start and stop bit also create some overhead. On an 8E1 connection (1 start bit, 8 data bits, one parity bit and one or two stop bits), you normally have up to 50% overhead bits to transfer, which is not really effective. So: parity makes a line slower, but more safe.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-02-16T12:47:02.337" LastActivityDate="2017-02-16T12:47:02.337" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2326" PostTypeId="2" ParentId="2322" CreationDate="2017-02-16T17:42:56.977" Score="2" Body="&lt;p&gt;Most likely, these cards would have been read optically, though there seem to be some pre-punched holes in the &quot;instructor&quot; field. Those holes might not be actual data (i.e. a code for the instructor's name) but just to indicate which side of the card was being scanned, since it seems to be a double-sided card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM produced an optical-reader &quot;test scoring machine&quot; in 1939, long before the computer era. See &lt;a href=&quot;http://www-03.ibm.com/ibm/history/exhibits/specialprod1/specialprod1_9.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www-03.ibm.com/ibm/history/exhibits/specialprod1/specialprod1_9.html&lt;/a&gt; and the following page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the reader converted the optical data to punched holes, there is no problem with the volume of data, because in &quot;column binary&quot; mode each one of the 80x12=960 hole positions on a card can represent a single bit of data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We used to use similar optical-input cards for project time recording, at a company I worked for in the 1970s. The marking was done using special pencils with &quot;lead&quot; that felt slightly greasy, made very dark black marks, and was not erasable (which would obviously be a useful feature to avoid cheating on tests!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Optical_mark_recognition&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Optical_mark_recognition&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2017-02-16T17:42:56.977" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2327" PostTypeId="2" ParentId="1315" CreationDate="2017-02-17T05:08:42.970" Score="8" Body="&lt;p&gt;Electrically, the American Super NES and Super Famicom cartridge ports are the same. Their Checking Integrated Circuits (CIC) use the same random number generation key, but they use a differently shaped cartridge housing. American Super NES Game Paks are more squarish and wider than Super Famicom cassettes but include two notches for alignment tabs in the Control Deck's slot.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Super Famicom cassette: Narrow shell, D411 CIC&lt;/li&gt;&#xA;&lt;li&gt;American Super NES Game Pak: Wide shell with notches, D411 CIC&lt;/li&gt;&#xA;&lt;li&gt;Super NES (PAL version) Game Pak: Narrow shell, D413 CIC&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's easy to modify an American Super NES to play Super Famicom games: use a pair of needle-nose pliers to break off the tabs inside the slot. Then the game will fit, and the D411 CIC will authenticate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you want to do the opposite (play American Super NES games on your Super Famicom), which can be more difficult. Try this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Buy region-free cartridge shells, such as &lt;a href=&quot;https://pikointeractive.com/snes-replacement-cartridge-shell.html#!/Super-Nintendo-Empty-Shell-PAL-JP/p/50376201/category=9430348&amp;amp;forcescroll=true&quot; rel=&quot;nofollow noreferrer&quot;&gt;these from Piko Interactive&lt;/a&gt;. These are narrower like Super Famicom shells, but they have the notches to also fit into an American Super NES if that's what your friend has.&lt;/li&gt;&#xA;&lt;li&gt;Get a screwdriver with a &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_screw_drives#Line&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;line&quot; head&lt;/a&gt;, sometimes called &quot;GameBit&quot;. Most licensed NES games and all Super NES games use this uncommon screw shape, which looks somewhat like a reverse-polarity Torx head.&lt;/li&gt;&#xA;&lt;li&gt;Open a Super NES game and remove its circuit board.&lt;/li&gt;&#xA;&lt;li&gt;Place the circuit board in the region-free shell.&lt;/li&gt;&#xA;&lt;li&gt;Screw the region-free shell together using the screws you removed in step 3.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="586" LastEditorUserId="586" LastEditDate="2017-03-03T15:50:42.163" LastActivityDate="2017-03-03T15:50:42.163" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2328" PostTypeId="2" ParentId="2322" CreationDate="2017-02-17T10:57:47.063" Score="2" Body="&lt;p&gt;The marks would be converted to punches in a machine like an &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_519&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;IBM 519 Document-Originating Machine&quot;&gt;IBM 519 Document-Originating Machine&lt;/a&gt; (1946) or later. The now-punched cards would have been read in any card reader or unit record machine. The pre-punched candidate number would have been linked to the handwritten candidate name by a manual operator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such “mark sense” cards had many applications, including &lt;a href=&quot;http://scholarlycommons.law.northwestern.edu/cgi/viewcontent.cgi?article=4516&amp;amp;context=jclc&quot; rel=&quot;nofollow noreferrer&quot;&gt;prison classification&lt;/a&gt; (link is to 1957 article, with good illustrations of the card template used). IBM made special pencils (&quot;IBM Electrographic&quot;) for marking cards and test sheets.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-02-17T10:57:47.063" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2329" PostTypeId="2" ParentId="1728" CreationDate="2017-02-17T20:52:19.140" Score="14" Body="&lt;p&gt;The GBA's memory controller can be configured using &lt;a href=&quot;http://problemkaputt.de/gbatek.htm#gbasystemcontrol&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;WAITCNT&lt;/code&gt;, an MMIO port at 0x04000204&lt;/a&gt;, to use slow or fast timing when accessing the Game Pak slot. The BIOS boots up in slow mode, in case Nintendo would release games on slow ROM. But Nintendo ended up releasing all games on fast ROM, and when a game starts, it writes a value to &lt;code&gt;WAITCNT&lt;/code&gt; to enable fast access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SuperCard is made to be cheap, not fast. When you start a game, the firmware copies it from the SD card to 32 MiB of DRAM that can't keep up with fast access. If you start a game, it will crash soon after the &lt;code&gt;WAITCNT&lt;/code&gt; write because the memory can't get the data lines to settle by the time the GBA's memory controller in fast ROM mode expects them to have settled. So the patch removes the write to &lt;code&gt;WAITCNT&lt;/code&gt;, keeping the system in slow mode and thus within the RAM's spec. It's not necessary for homebrew games that do not write to &lt;code&gt;WAITCNT&lt;/code&gt; or for &quot;multiboot&quot; game demos smaller than 256 KiB that load entirely into the GBA's RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A patch can do other things.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Changing the save method: GBA games can save to an 8-bit SRAM, a serial EEPROM, or a parallel flash. SuperCard hardware supports only SRAM. A patch changes the game to use SRAM.&lt;/li&gt;&#xA;&lt;li&gt;Save to SD card: The SuperCard's SRAM is volatile memory and will lose data if the system is powered off longer than the capacitor can continue to supply current. Normally, after saving the game, the user needs to quickly power cycle the GBA and restart the menu to copy the SRAM back to the SD card. The patch does the copying within the game under certain conditions.&lt;/li&gt;&#xA;&lt;li&gt;Patching DS games: When used in SLOT-2 of a suitably modded Nintendo DS, SuperCard can play DS games. But if they're bigger than a couple MB, they will need to load data from the Game Card in SLOT-1 during play. (The N64 and DS cartridge interfaces behave more like a CF or SD card than like traditional ROM.) Patching redirects these accesses to SLOT-2.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="586" LastActivityDate="2017-02-17T20:52:19.140" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2330" PostTypeId="2" ParentId="1726" CreationDate="2017-02-18T17:44:04.410" Score="3" Body="&lt;p&gt;The message “&lt;strong&gt;Not enough room on OS9 to install&lt;/strong&gt;” suggests that it's not a memory problem, but an (emulated) disk space problem. The installation image you downloaded is labelled &lt;em&gt;OS9&lt;/em&gt;, which is a clue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Classic Mac OSs can be a bit precious about where they install software, so maybe Kid Pix is trying to install on a small installation image. Can you enlarge the image, or install on a much larger emulated disk?&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-02-18T17:44:04.410" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2331" PostTypeId="1" CreationDate="2017-02-18T21:03:49.923" Score="11" ViewCount="803" Body="&lt;p&gt;From casual reading, it seems as though many C64 titles were ported from the ZX Spectrum. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was this the case? Was the ZX Spectrum more popular? Or easier to develop for? &lt;/p&gt;&#xA;" OwnerUserId="4501" LastEditorUserId="4138" LastEditDate="2017-02-19T10:43:10.657" LastActivityDate="2017-02-26T14:43:07.283" Title="Did the ZX Spectrum have more original titles than C64?" Tags="&lt;commodore-64&gt;&lt;zx-spectrum&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2332" PostTypeId="2" ParentId="2331" CreationDate="2017-02-19T00:52:01.013" Score="13" Body="&lt;p&gt;First, the title question: which had more games?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_ZX_Spectrum_games&quot; rel=&quot;noreferrer&quot;&gt;Wiki list of ZX Spectrum games&lt;/a&gt; (1694 titles, 5 million units sold in 10 years)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.worldofspectrum.org/archive.html&quot; rel=&quot;noreferrer&quot;&gt;World of Spectrum games&lt;/a&gt; (&gt;13,000 titles total in 3 categories)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Commodore_64_games&quot; rel=&quot;noreferrer&quot;&gt;Wiki list of Commodore 64 games&lt;/a&gt; (2021 titles, 12.5 to 17 million units sold in 12 years)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://gamebase64.com/&quot; rel=&quot;noreferrer&quot;&gt;C= gamebase64 games&lt;/a&gt; (&gt;25,000 titles)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The lists are not exhaustive, and they only include games. It makes a lot of sense that the C64 would have many more titles, though. It was a system popular all around the world, while the ZX Spectrum was primarily a UK system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as porting games from the Spectrum to the C64, software developers would have a financial incentive to have the biggest market possible for their games. The Spectrum developers would have significant desire to reach a worldwide audience, while, say, American C64 developers would have a smaller incentive in expanding to an audience largely limited to the UK. This is especially true since &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_64&quot; rel=&quot;noreferrer&quot;&gt;the C64&lt;/a&gt; was already one of the two most popular systems in the UK. I.e., they &lt;em&gt;already had&lt;/em&gt; a large number of potential customers there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know which was easier to develop for. I suspect the number of development tools and and amount of documentation and shared techniques was larger for the C64, though -- again due to its worldwide presence.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-02-19T19:20:31.693" LastActivityDate="2017-02-19T19:20:31.693" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2333" PostTypeId="2" ParentId="2297" CreationDate="2017-02-20T10:54:42.763" Score="2" Body="&lt;p&gt;Stock tickers date from 1863 (a variant was Edison's first successful invention in 1869).&#xA;The text-output ones only printed 32 characters,&#xA;so would  have been a 5-bit application... which is possibly the eldest of&#xA;the 5-bit-compatible applications of serial data.  I don't know the&#xA;timeline for bit-serial (some tickers operated like a pulse-dial phone,&#xA;took 'way more than 5 bit-times to print &quot;Z&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ticker tape went completely obsolete in the 1960s.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2017-02-20T10:54:42.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2334" PostTypeId="5" CreationDate="2017-02-21T11:25:12.163" Score="0" Body="&lt;p&gt;Bulletin Board System, or BBS, is a hosted mechanism for users to chat, email and share files.  These were highly popular for Retrocomputers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use this tag for questions regarding access to BBS from Retrocomputers.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-02-21T11:30:43.820" LastActivityDate="2017-02-21T11:30:43.820" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2335" PostTypeId="4" CreationDate="2017-02-21T11:25:12.163" Score="0" Body="For questions regarding Bulletin Board Systems." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-02-21T11:25:12.163" LastActivityDate="2017-02-21T11:25:12.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2336" PostTypeId="1" AcceptedAnswerId="2338" CreationDate="2017-02-21T14:25:14.963" Score="14" ViewCount="1273" Body="&lt;p&gt;In the &lt;code&gt;June 1977&lt;/code&gt; issue of &lt;code&gt;BYTE&lt;/code&gt; magazine I saw an advertisement stating you could order an Apple II and it had a price list.  One of the columns was titled &quot;Apple II Board-only&quot;.  The price for that column was significantly less than the &quot;Apple II System&quot; column.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was my understanding the Apple II never came in kit form (unlike its predecessor the Apple I).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my assumption is that you could have bought just the motherboard (fully populated) and you supply the case.  Is this correct or could you also buy the empty board and solder the chips in yourself like you could with the Apple I?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I feel that even a populated board that you had to mount in a case with a PSU could be considered a &quot;kit&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wanted to mention that the ad I saw appears to be from Apple.  Further down the page (this is from a PDF I saw) the address you send the money to was Apple.  It does appear that you could buy the board with memory populated.  I'm assuming the rest of the board would also be populated.  So maybe I answered my own question.  Perhaps they didn't consider it a kit.  More of a replacement motherboard.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="2081" LastEditDate="2017-02-21T14:36:38.357" LastActivityDate="2018-07-14T18:25:25.043" Title="Was the Apple II ever sold in kit form?" Tags="&lt;apple-ii&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2337" PostTypeId="2" ParentId="2336" CreationDate="2017-02-21T14:31:30.193" Score="2" Body="&lt;p&gt;I'm not aware of the Apple II ever being sold (legally) as a kit; however, I do know that at one point Bell &amp;amp; Howell had a study-at-home course which involved building your own Apple II (as they were shipped with a black case, rather than the standard Apple beige, they were popularly called &quot;Black Apples&quot;). I suppose that it's not impossible that some of the Black Apples 'escaped', either with or without Apple's knowledge/approval.&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2017-02-21T14:31:30.193" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2338" PostTypeId="2" ParentId="2336" CreationDate="2017-02-21T17:14:14.330" Score="20" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Apple II is also available in board-only form for the do-it-yourself hobbyist. Has all of the features of the Apple II system, but does not include case, keyboard, power supply or game paddles. $598.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;— Apple Computer Inc. advert, p.~15 &lt;a href=&quot;https://archive.org/stream/byte-magazine-1977-06/1977_06_BYTE_02-06_Cognitive_Robot#page/n15/mode/2up&quot; rel=&quot;noreferrer&quot; title=&quot;Byte Magazine Volume 02 Number 06 - Cognitive R...&quot;&gt;Byte Magazine Volume 02 Number 06&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could just have been an ad, and never followed through, but anecdotally:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A friend of mine bought a board only Apple II. It was the first Apple&#xA;  Computer that I ever saw.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;— Techtalkz Apple board - &lt;a href=&quot;http://www.techtalkz.com/apple/436029-board-only.html#post1738482&quot; rel=&quot;noreferrer&quot; title=&quot;][ Board only&quot;&gt;II Board only&lt;/a&gt; - Feb 2008.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several other tales of board-only purchases there, so I'd say it likely was available for a while.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-02-21T17:14:14.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2339" PostTypeId="2" ParentId="2316" CreationDate="2017-02-21T17:15:10.990" Score="5" Body="&lt;p&gt;I worked with serial-based systems in the 80's and don't ever remember parity being useful for anything; it was simply something to get right when you set devices up. The effect of receiving bad parity was device-specific: some devices would simply ignore the character; some would show a character even though received incorrectly; at least one type of dumb terminal I remember printing a funny character (perhaps a tilde ~ ) in place of the incorrectly received character.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original idea of parity checking was obviously to detect gross errors where 1 of the 8 bits in the character had got flipped in transit (perhaps in noise on a long cable). Obviously, it's of limited use, as a run of bad bits could easily render the parity overall as being correct. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the 'end-application' is an interactive terminal or printer, you can obviously spot that the characters are corrupt, as a stream of rubbish comes out on the paper or screen.  For file-transfer applications, or some kind of serial-based protocol (like the IBRO protocol they used to use in card-swipe terminals), you wouldn't depend on parity, but rather there would be some kind of better checksum.  I remember sending frames that consisted of STX + data + ETX + plus a one-byte checksum that was calculated from the data bytes. If the checksum calculation didn't work out the same at the receiver, you would send a NAK, and the sender would send the frame over again.  Some similar kind of logic exists in Kermit, IIRC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mention tn3270, but this is really on a different timeline to the one you suggest. IBM networks used synchronous links carrying SNA protocol encapsulated in SDLC frames at the low level this data was sent serially but with special start/stop patterns that couldn't appear in the data, and with a 16-bit cyclic redundancy check (CRC) to make sure the data was good at the receiver.  The terminal protocol was 3270 (using EBCDIC coding, as you mention), and this was a whole parallel world to ASCII-based PCs with their asynch serial communications.  This proprietary world of SNA communications lasted through the 90's until TCP/IP and the Internet ultimately displaced it.  The tn3270 that you describe is a way of encapsulating 3270 data into TCP/IP (telnet) packets, as a way to integrate the last few distributed IBM mainframe users into the new world of TCP networks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CRCs of varying lengths are used in modern communications, as it allows you to detect more than one error in frame, and is a good indication of the frame being overall somehow corrupted. Going further, there are forward error correction systems in use now that allow you to correct a small number of bits in error, as well as detect a frame that is corrupted beyond repair.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More detail about how serial communications works can be found in the data sheets for UART chips. PC designs used chips like the 8250 and 16550, but their modern descendents (like the Maxim MAX3109) have all the same ideas built-in.&lt;/p&gt;&#xA;" OwnerUserId="26" LastActivityDate="2017-02-21T17:15:10.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2342" PostTypeId="2" ParentId="2336" CreationDate="2017-02-22T16:17:00.200" Score="7" Body="&lt;p&gt;The &quot;Red&quot;[1] reference manual says this on the &quot;unpacking&quot; page&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you bought an Apple II board only, see the hardware section in this manual on how to get started. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pages 107 &amp;amp; 108 then go into some detail (about the PSU requirements etc) and exactly what you'll get from Apple (i.e. no keyboard, but again this seems to be available on it's own).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm guessing from this that bare boards were sold, and I think the manuals were written after the first systems shipped...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] I have an &quot;odd&quot; orange coloured version of this manual, I suspect it might have come with an ITT2020 at some point.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2017-02-22T16:17:00.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2343" PostTypeId="1" CreationDate="2017-02-22T23:04:13.603" Score="6" ViewCount="110" Body="&lt;p&gt;First I'd like to ask: Does anybody even know of this laptop? I was surprised to find 0 information about it online. I've was asked to see if I could get this thing to boot, but it was in rough shape. The battery had exploded and the HDD seems to be totally dead. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point I can get it to beep twice, but due to the lack of information I'm not really sure what the code means. Maybe it's because the hard drive is missing? I do have a bootable floppy in the drive and the floppy briefly reads it during the POST it seems. If it's any help the processor is an AM386.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8VFwW.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8VFwW.jpg&quot; alt=&quot;The laptop in question&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4513" LastActivityDate="2017-02-24T10:54:42.267" Title="Will this Acculite laptop boot without HDD?" Tags="&lt;hardware&gt;&lt;repair&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2345" PostTypeId="2" ParentId="2343" CreationDate="2017-02-23T01:58:03.183" Score="6" Body="&lt;p&gt;AFAIK, BIOS has always allowed booting from floppy. I can't imagine why any manufacturer would override that possibility.  IIRC, the default boot order in the 386 era was A, B, and then C. Some BIOSs had settings that let you override that, and boot from C immediately without annoying floppy drive noise as it (they) tried to access a floppy.  The reason for the default was for debugging.  You might have good reason to not access the HDD first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point to all that is that there is apparently a problem with the floppy as well.  Whether that is the floppy itself or the drive mechanism, I don't know. Do you know your bootable floppy is correct for that machine? For example, if the floppy were 720k double-sided and the mechanism only reads 360k single-sided, it may not be able to hande it. (Maybe it could, not sure. The point is there could be a mismatch, double-density vs single-density for example.)&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2017-02-23T01:58:03.183" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2346" PostTypeId="1" CreationDate="2017-02-23T05:49:45.180" Score="9" ViewCount="854" Body="&lt;p&gt;I have an old IBM monitor here and I'd like to use it as a second screen to my computer (Mac mini running Fedora or Thinkpad running Archlinux).&#xA;I plugged it into the electricity socket without a computer connection once and turned it on. It made the typical old monitor static noise and nothing exploded.&#xA;Still, I am not sure if it is safe to connect it to a newer computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MsHL6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MsHL6.jpg&quot; alt=&quot;The monitor itself&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/901KI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/901KI.jpg&quot; alt=&quot;Connection cables&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OZNQa.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OZNQa.jpg&quot; alt=&quot;The label&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4376" LastEditorUserId="357" LastEditDate="2017-02-27T08:54:51.283" LastActivityDate="2017-02-27T08:54:51.283" Title="Can I use my IBM P/N 93F0502 (circa 1992) monitor in a dual monitor setup with my modern Mac Mini or Thinkpad?" Tags="&lt;hardware&gt;&lt;crt-monitor&gt;&lt;ibm&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2347" PostTypeId="2" ParentId="2346" CreationDate="2017-02-23T07:26:43.763" Score="8" Body="&lt;p&gt;That's an IBM PS/1 monitor. The large DB connector is used to give supply to the computer (which has not a power supply of itself). The monitor is VGA capable, so as long as you connect it to a VGA adapter and set it to 640x480 @60Hz, you are fine. The monitor can go down to 50Hz, and possible, up to 72Hz.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-02-23T07:26:43.763" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2348" PostTypeId="2" ParentId="2346" CreationDate="2017-02-23T19:43:27.393" Score="4" Body="&lt;p&gt;If your Mac Mini is from 2009 or later, it will have two video output connectors: Mini-DVI and Mini DisplayPort, or HDMI and Mini DisplayPort, or HDMI and Thunderbolt, or 2x Thunderbolt. Any of these ports except HDMI can output VGA with a simple adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My ThinkPad (Lenovo W510) has a built-in VGA connector, and I've done dualscreen in Windows 7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the monitor is physically connected, you just have to go into your OS' display settings and configure it for 640x480 60Hz. If your monitor supports higher resolutions and/or refresh rates, you can try different combinations until you find one that doesn't make your eyes tired or give you headaches.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2017-02-23T21:13:29.447" LastActivityDate="2017-02-23T21:13:29.447" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2349" PostTypeId="1" CreationDate="2017-02-24T05:35:06.030" Score="2" ViewCount="446" Body="&lt;p&gt;So I've been wanting to get into modding consoles. Today I put in some 3mm leds. I put them under the usb ports and controller ports. So I get done with it and put in a game to make sure it works. Well it freezes after the boot screen. It took the game out spun the optical drive around and I didn't feel any resistance, but when I put the game on and spun it I felt alot of resistance. I think the leds might be building the case up, but at the same time I'm wondering if it's not because the closes led is in between the usb ports. Any ideas? Also note that I got this PS2 from a garage sale, they claimed it worked so all I did was turn it on to see the boot screen, never played a game one it. &lt;/p&gt;&#xA;" OwnerUserId="3646" LastEditorUserId="4399" LastEditDate="2017-02-24T20:19:32.027" LastActivityDate="2017-07-16T12:34:48.753" Title="PS2 slim disk won't spin" Tags="&lt;sony-playstation&gt;" AnswerCount="1" CommentCount="7" ClosedDate="2017-07-16T19:02:08.333" ContentLicense="CC BY-SA 3.0" />
  <row Id="2350" PostTypeId="2" ParentId="2343" CreationDate="2017-02-24T10:54:42.267" Score="1" Body="&lt;p&gt;The 2 beep post is likely the issue, what it means will depend on whose bios it has, pheonix and ami were the popular ones. You should find it on a chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Booting from floppy was always available if a floppy Drive was attached. You'll need a Dos 622 boot floppy at a minimum. A 386 era machine will support 1.44 floppies. If the system isn't completing POST you wont get that far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also based on the picture you do not have the brightness and contrast settings in the proper locations to see the screen. The right slider needs to be full right for full brightness. The contrast slider on the left will want to be between  25% 75% as a starting point, start with 60%. This era system had a non-Active LCD. It might be green, brown or white.&lt;/p&gt;&#xA;" OwnerUserId="3648" LastActivityDate="2017-02-24T10:54:42.267" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2352" PostTypeId="1" AcceptedAnswerId="2358" CreationDate="2017-02-25T06:04:42.630" Score="9" ViewCount="884" Body="&lt;p&gt;The CPU being able to tell code and data apart to prevent inadvertent or malicious execution of data as instructions by trapping (even if the bit pattern of the data can be interpreted as a valid instruction) is a helpful debugging mechanism. What was the first conventional architecture that had this feature?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could be implemented as an execution permission bit in a page or segment descriptor, or even as a hidden bit per memory word.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By &quot;conventional&quot; I mean a non-&lt;a href=&quot;https://en.wikipedia.org/wiki/Tagged_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;tagged architecture&lt;/a&gt; (like &lt;a href=&quot;https://en.wikipedia.org/wiki/Burroughs_large_systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;Burroughs large systems&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Lisp_machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;LISP machines&lt;/a&gt;), and, obviously, a &lt;a href=&quot;https://en.wikipedia.org/wiki/Von_Neumann_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;von Neumann architecture&lt;/a&gt; rather than a &lt;a href=&quot;https://en.wikipedia.org/wiki/Harvard_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;Harvard-like&lt;/a&gt; one.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-02-26T07:07:38.547" LastActivityDate="2017-02-28T09:46:24.200" Title="What is the first computer architecture that knew code from data?" Tags="&lt;history&gt;&lt;debugging&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2353" PostTypeId="1" AcceptedAnswerId="2377" CreationDate="2017-02-25T10:11:30.003" Score="13" ViewCount="1596" Body="&lt;p&gt;VESA local bus was an expansion bus used to overcome speed limitations imposed by ISA bus. In theory VLB could reach 1280 Mbit/s (with 40 MHz CPU) which was way more than ISA's 66.7 Mbit/s. The speed was initially required by graphics cards and SuperIO (combined storage/parallel/serial) controllers, so that's what most searches for VLB cards return now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I think speed improvements are welcome everywhere - were there other cards, like network controllers, sound cards or some other specialized devices (like data acquisition cards) that were designed for VLB? The fact that many 486 motherboards have 3 VLB slots suggest that there should be at least one more type of device for this bus. Or was this bus superseded by PCI before it was adopted by majority of manufacturers?&lt;/p&gt;&#xA;" OwnerUserId="156" LastEditorUserId="357" LastEditDate="2017-03-08T19:14:53.717" LastActivityDate="2017-09-19T19:13:55.587" Title="Were there VLB cards other than video cards and SuperIO controllers?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2354" PostTypeId="2" ParentId="2352" CreationDate="2017-02-25T12:38:56.980" Score="9" Body="&lt;p&gt;(This answers the question &quot;Early architecture that &lt;em&gt;distinguished code from data&lt;/em&gt;, here by having differing bank switching for code and data&quot;. I'm leaving this here because it's interesting, even if it doesn't meet the criteria of the modified question.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;PDP-1&lt;/strong&gt; had a &lt;em&gt;Memory Field Control&lt;/em&gt; (Type 14) that was capable of distinguishing between an instruction field and a data field. &lt;a href=&quot;http://www.ultimate.com/phil/pdp10/types&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; dates this module as having been available in &lt;strong&gt;1961&lt;/strong&gt;. The PDP-1 itself was designed in &lt;strong&gt;1959&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A field is a section of memory, in this case 4096 words of 18 bits. As described in the &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp1/F15B_PDP1_Handbook_1961.pdf&quot; rel=&quot;noreferrer&quot;&gt;manual&lt;/a&gt;, the Type 14 Memory Field Control allowed for 8 modules of 4096 words, so it had presumable two 3-bit registers (one octal digit), one of which would select the memory module to fetch instructions from, and the other the one for data access (so basically banking). Other PDP models, e.g. the PDP-8, use a similar scheme to extend their address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the main purpose of these field registers were to extend the address range, not to prevent against inadvertent or malicious execution. It was just convenient to distinguish between data and code to make the address range extension easier to handle, as it was possible to use the full internal 12-bit address range of 4096 words both for code and data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though it &lt;em&gt;could&lt;/em&gt; be used to implement time-sharing concepts (the TSS-8 operating system on the PDP-8, 1967), but there was no foolproof way to stop a user program from switching fields if it wanted to (previliged/supervisor modes didn't exist, and weren't considered necessary).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that the Type 13 Memory Field Control used a different scheme of mapping two smaller independent fields of 2048 words into the address range, with no distinction between code and data, so clearly they were still experimenting with these features at that stage.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2017-02-26T07:42:06.183" LastActivityDate="2017-02-26T07:42:06.183" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2355" PostTypeId="1" AcceptedAnswerId="2356" CreationDate="2017-02-25T18:50:32.670" Score="9" ViewCount="704" Body="&lt;p&gt;I dug out an old Macintosh Quadra 800 that I've had on my shelf for a long while. I'm not even sure where I got it anymore...  After a quick look in my VGA adapter bucket, I found I had the needed 15pin to VGA adapter, so I decided to fire the machine up and see if it still works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first attempt was met with absolute failure as it was very clear the machine wasn't doing anything.  No power supply fans, or beeps... just... nothing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I popped the hood and discovered that someone had been there before me, as the HDD was missing and the power to the motherboard was unplugged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I re-attached motherboard power, and tried my experiment again.  This time, I was able to get video and have an (expected) icon of a floppy disk with a little question mark.  Obviously the mac has no HD, so it's looking for something to boot from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Newer models can boot the OS from CD-ROM by holding the Option key, or Ctrl-C, or something like that...  but I wonder, is a vintage Quadra able to perform a similar trick?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not have any vintage Mac floppies, and no hardware currently capable of downloading and/or creating a bootable vintage floppy.  What I do have is a single original System 7.6.1 CD-ROM, which I thought might boot.  But after a few google searches and some random experimenting I haven't had any success.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know if it is possible to boot a quadra from CD, and if so, what the procedure is?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About 5 minutes after posting this question, I went back and took a closer look at the machine and discovered that whoever had the machine before me had disconnected everything from the motherboard, not just the power.  The Quadra has a really funky mounting mechanism for the motherboard, but after some jiggery-pokery I reattached the floppy/cd/speaker cables and tried again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This time, in the absence of the HDD the computer automatically fell back to the CD-ROM drive and booted 7.6.1 from CD without any hotkeys required.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am leaving the question open in the hope that someone knows if a key combination is available for the Quadra to boot from CD when the HDD is installed.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="2080" LastEditDate="2017-02-25T19:20:12.723" LastActivityDate="2017-02-25T20:32:07.607" Title="Boot Macintosh Quadra 800 from System 7.6.1 CD" Tags="&lt;apple-macintosh&gt;&lt;boot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2356" PostTypeId="2" ParentId="2355" CreationDate="2017-02-25T20:32:07.607" Score="7" Body="&lt;p&gt;Macs of the Quadra 800 era store the default boot drive in a section of battery-backed RAM called &quot;PRAM&quot; (you'll occasionally see &quot;clear the PRAM&quot; as a troubleshooting tip).  By default (eg. if the battery has run down), this boot drive is the internal hard drive.  Holding down the &lt;code&gt;C&lt;/code&gt; key will explicitly tell the computer to boot from the CD-ROM drive instead; if the hard drive is missing or does not contain a valid operating system, the computer will do this automatically.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2017-02-25T20:32:07.607" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2357" PostTypeId="2" ParentId="2353" CreationDate="2017-02-26T03:43:33.123" Score="9" Body="&lt;p&gt;I really enjoy this site in general and am happy to finally be able to answer.  Seeing VLB mentioned was a trip down memory lane and, like you, most of what I remember were display adapters with a handful of SCSI HBA's and primitive/proprietary RAID cards thrown in.  That said, though, I thought I remembered seeing one or two VLB NIC's that were intended for the servers of the day (read: mostly Novell).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out BOCA's BOCALANcard-VL (P/N BEN1VL) - general reference &lt;a href=&quot;http://ps-2.kev009.com/bocaresearch/pdf/manuals/BEN220.PDF&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, which supported a singe 10BaseT interface.  Even given the standards of the time this didn't make a lot of sense, given that 10M was perfectly fine on the ISA cards of the time.  &lt;/p&gt;&#xA;" OwnerUserId="3691" LastActivityDate="2017-02-26T03:43:33.123" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2358" PostTypeId="2" ParentId="2352" CreationDate="2017-02-26T10:18:35.063" Score="5" Body="&lt;p&gt;For the condition &quot;trap if data is accessed as code&quot;: I know of three ways to do that, (1) tagging memory words, (2) using base and limit registers, and (3) as part of the MMU for virtual memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(3) came comparatively late, so we don't need to look at it. I think most architectural families gained (2) under various names (descriptor, segment, address space, base &amp;amp; bound, codewords), at some stage (some late, like x86), and it would be interesting to make list. Note that (2) is primarily used for timesharing/multiprocessing, and not necessarily to distinguish between code and data. For example, the CDC 6000 only had a single pair (RA &quot;reference address&quot; and FL &quot;field length&quot;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(1) grew naturally out of various error detection schemes for memory (e.g. parity), which already &lt;em&gt;did&lt;/em&gt; trap, so it was an obvious extension. There were also variants in early machines which had no tags on memory words, but mark or sentinel words, e.g. to describe the end of an array, which also would trap on access (but weren't really a code/data distinction, or general protection scheme).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;http://www.feustel.us/Feustel%20&amp;amp;%20Associates/Advantages.pdf&quot; rel=&quot;noreferrer&quot;&gt;article&lt;/a&gt; has a bit of historical overview of tagged systems in the section II &quot;Previous Work&quot; on page 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's look at some early systems in detail:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bourrough B5000&lt;/strong&gt; (1961): The &lt;a href=&quot;https://en.wikipedia.org/wiki/Burroughs_large_systems#B5000&quot; rel=&quot;noreferrer&quot;&gt;B5000&lt;/a&gt; implemented both (1) and (2). In the original B5000 and B5500 implementation (see &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/burroughs/B5000_5500_5700/5000-21005_B5000_operChar.pdf&quot; rel=&quot;noreferrer&quot;&gt;manual&lt;/a&gt;), not all memory words were tagged (p. 2-5): (Packed) character words didn't have a tag, but control words and numerical words had a visible flag bit as part of the normal data bits. Descriptors were used extensively, even for single arrays, and the trap for out-of-bound descriptor access was identical to the trap for control-word-instead-of-numeric-word access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The B5000 was unconventional in the sense that the instruction set and principles of operation were aimed at implementing a high level language. But it did &lt;strong&gt;not&lt;/strong&gt; implement the principle of Lisp machines and later variants like the B6500 that the tag bits also described data types. So in that sense the B5000 does exactly what the BESM-6 does (descriptors aside).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the principal engineers of the B5000 also worked on the&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Rice computer (R1)&lt;/strong&gt; (built 1958-1961, partly operational in 1959): The &lt;a href=&quot;https://en.wikipedia.org/wiki/Rice_Institute_Computer&quot; rel=&quot;noreferrer&quot;&gt;Rice Computer&lt;/a&gt; again implemented both (1) and (2). I couldn't find a manual, but &lt;a href=&quot;https://web.archive.org/web/20080224035658/http://www.princeton.edu/~adam/R1/r1rpt.html&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; describes some details. The instruction set of the Rice Computer was more conventional than the B5000, though still a bit odd. Memory was initially CRT storage tubes of 8192 bits each. Word length was 63 bits: 54 bits of data, 7 bits of Hamming error-correction code, and 2 tag bits. The error correction was needed because the storage tubes were very unreliable (bits would gets weaker when read, tight loops would cause read errors). One can see how tag bits come natural when there's already that many error correction bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The archtectural roots of the Rice Computer were described as the &lt;a href=&quot;https://en.wikipedia.org/wiki/MANIAC_II&quot; rel=&quot;noreferrer&quot;&gt;MANIAC II&lt;/a&gt; at Los Alamos, and the Brookhaven computer at Brookhaven National Laboratory. I couldn't find anything on the latter. &#xA;Details on the former are also hard to find. It used an additional 49th bit on top of the 48 data bits in &lt;a href=&quot;http://ed-thelen.org/comp-hist/BRL61-m.html#MANIAC-II&quot; rel=&quot;noreferrer&quot;&gt;storage&lt;/a&gt;, but that was probably parity. The &lt;a href=&quot;https://en.wikipedia.org/wiki/MANIAC_III&quot; rel=&quot;noreferrer&quot;&gt;Maniac III&lt;/a&gt; included a tag bit at least in the &lt;a href=&quot;http://ed-thelen.org/comp-hist/BRL61-m.html#MANIAC-III&quot; rel=&quot;noreferrer&quot;&gt;opcode&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-02-26T10:18:35.063" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2359" PostTypeId="2" ParentId="2331" CreationDate="2017-02-26T14:22:32.940" Score="3" Body="&lt;p&gt;Depending on how far you want to stretch the meaning of the word &quot;titles&quot; in the question, it might be worth noting that the number of C-64 demoscene productions far exceeds those for the Spectrum (and - I think - every other platform).  The vast majority of those will be original and exclusive to their respective platforms, I'd guess, although a non-trivial amount - quite possibly the majority - would have been created after those platforms' 1980s heydays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;pouet.net currently lists &lt;a href=&quot;http://www.pouet.net/prodlist.php?platform%5B%5D=Commodore%2064&amp;amp;page=752&quot; rel=&quot;nofollow noreferrer&quot;&gt;752 pages of C64 prods = approx 18,800 releases&lt;/a&gt; versus &lt;a href=&quot;http://www.pouet.net/prodlist.php?platform[]=ZX%20Spectrum&amp;amp;page=64&quot; rel=&quot;nofollow noreferrer&quot;&gt;64 pages for the Spectrum = approx 1,600 releases&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, demozoo.org currently lists &lt;a href=&quot;https://demozoo.org/productions/?platform=3&amp;amp;production_type=&amp;amp;page=94&quot; rel=&quot;nofollow noreferrer&quot;&gt;94 pages of C64 prods (approx 4700 releases)&lt;/a&gt; versus &lt;a href=&quot;https://demozoo.org/productions/?platform=2&amp;amp;production_type=&amp;amp;page=53&quot; rel=&quot;nofollow noreferrer&quot;&gt;53 pages/approx 2650 releases for the Spectrum&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously the demoscene is a subculture, and popularity there doesn't necessarily reflect the wider world - I certainly wouldn't care to use those stats to claim the C-64 was more popular than DOS or Windows!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather, I think it helps support the point already made about the C64 having a more international following than the Spectrum, given that the demoscene is/was more known/popular in mainland European countries than English-speaking ones.  NB: I'm not sure how much software was produced for Spectrum clones in eastern Europe, perhaps that might impact any figures/analysis?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Anecdotally, the Speccy was the most popular computer from about a dozen types amongst the kids at my 1980s secondary school in northern England, whereas our compatriots at a twinned school in Germany were 100% Commodore users.)&lt;/p&gt;&#xA;" OwnerUserId="4519" LastEditorUserId="4519" LastEditDate="2017-02-26T14:43:07.283" LastActivityDate="2017-02-26T14:43:07.283" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2360" PostTypeId="2" ParentId="2352" CreationDate="2017-02-26T17:23:05.297" Score="5" Body="&lt;p&gt;The other answers to this question ignore the fact that the &quot;separate program/data&quot; architecture, aka the &lt;a href=&quot;https://en.wikipedia.org/wiki/Harvard_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;Harvard architecture&lt;/a&gt;, was described and implemented one year before the &quot;shared program/data&quot; architecture (aka &lt;a href=&quot;https://en.wikipedia.org/wiki/Von_Neumann_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;Von Neumann architecture&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first example was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Harvard_Mark_I&quot; rel=&quot;nofollow noreferrer&quot;&gt;Harvard Mark I&lt;/a&gt; in 1944, while the &lt;a href=&quot;https://en.wikipedia.org/wiki/First_Draft_of_a_Report_on_the_EDVAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;EDVAC&lt;/a&gt; was written up in 1945.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to go back further I believe you could argue that Babbage's unfinished Analytical Engine embodied the separate program/data architecture.&lt;/p&gt;&#xA;" OwnerUserId="4520" LastEditorUserId="278" LastEditDate="2017-02-26T17:54:04.210" LastActivityDate="2017-02-26T17:54:04.210" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2361" PostTypeId="1" AcceptedAnswerId="13621" CreationDate="2017-02-26T18:03:01.773" Score="43" ViewCount="5396" Body="&lt;p&gt;I have seen several claims of poor performance of the C128 when running CP/M, and would like to better understand these claims, especially in comparison to other CP/M machines of the early to mid-1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C128 has a Z80A microprocessor clocked at 4MHz for running CP/M. This is the same processor and clock speed found in, for example, the TRS-80 Model 4. Both those machines were CP/M compatible, but I have seen claims that the 4MHz clock speed was not fully utilized by the Z80A in the C128. Specifically, I have seen it stated that the &lt;em&gt;C128 Z80A only runs at 4MHz half the time&lt;/em&gt;. Is this statement true, and why should this be the case?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, are there any benchmark results published to substantiate poor C128 CP/M performance when compared to similar Z80A systems?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-05-03T16:00:28.260" Title="Why does the Commodore C128 perform poorly when running CP/M?" Tags="&lt;cp-m&gt;&lt;commodore-128&gt;&lt;benchmarking&gt;&lt;commodore&gt;" AnswerCount="7" CommentCount="2" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2362" PostTypeId="2" ParentId="2353" CreationDate="2017-02-26T18:55:27.413" Score="9" Body="&lt;p&gt;While &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2357/357&quot;&gt;rnxrx's answer&lt;/a&gt; shows that there were, in fact, some other cards designed for VESA Local Bus, I think the main thing to keep in mind here is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80486&quot; rel=&quot;noreferrer&quot;&gt;486&lt;/a&gt; was introduced in 1989&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/VESA_Local_Bus&quot; rel=&quot;noreferrer&quot;&gt;VLB&lt;/a&gt; was standardized in 1992&lt;/li&gt;&#xA;&lt;li&gt;VLB was &lt;a href=&quot;https://en.wikipedia.org/wiki/VESA_Local_Bus#Limitations&quot; rel=&quot;noreferrer&quot;&gt;completely tied&lt;/a&gt; to the 486's architecture, and fundamentally incompatible with the Pentium; the &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Intel_Pentium_microprocessors#.22P5.22_.280.8_.C2.B5m.29&quot; rel=&quot;noreferrer&quot;&gt;first variants of Pentium&lt;/a&gt; came in 1993, and using VLB with anything non-486 required special adaptation circuitry&lt;/li&gt;&#xA;&lt;li&gt;Work on &lt;a href=&quot;https://en.wikipedia.org/wiki/Conventional_PCI&quot; rel=&quot;noreferrer&quot;&gt;PCI&lt;/a&gt; began in 1990, and PCI 2.0 (which, according to Wikipedia, was the first version that actually specified some of the things you'd expect in a hardware standard, such as a specification for the connector) was introduced in 1993&lt;/li&gt;&#xA;&lt;li&gt;PCI was independent of the CPU architecture, and in fact saw widespread use for a decade until superceded by &lt;a href=&quot;https://en.wikipedia.org/wiki/PCI_Express&quot; rel=&quot;noreferrer&quot;&gt;PCI Express&lt;/a&gt; in 2004 (and motherboards with PCI slots were widely available for far longer)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also, keep in mind that VLB was really just an extension to the ISA bus, so you still had all the issues that you did with ISA, but could shuffle data faster. PCI solved a lot of those problems, not least by introducing &lt;a href=&quot;https://en.wikipedia.org/wiki/Conventional_PCI#Auto_configuration&quot; rel=&quot;noreferrer&quot;&gt;auto configuration&lt;/a&gt; (also known as &quot;plug and play&quot;, though full plug and play support obviously required more than just peripheral connector bus standard support).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In between VLB of 1992, and PCI of 1993-1994 or so, &lt;strong&gt;there just wasn't a lot of time for manufacturers to use the new bus.&lt;/strong&gt; Also, by the time PCI entered the market it came with the promise of not being tied to yesterday's architecture (the 486). Remember that at the time, an upgrade cycle of a few years gave &lt;em&gt;significant&lt;/em&gt; improvements in pretty much all measurable areas (storage, RAM, processing speed, graphics capability, ...), so pretty soon you'd either have upgraded to a system with PCI support anyway, or would accept that new systems were running circles around yours basically regardless of whether your network card was ISA, VLB or something else.&lt;/p&gt;&#xA;" OwnerUserId="357" LastActivityDate="2017-02-26T18:55:27.413" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2363" PostTypeId="2" ParentId="2361" CreationDate="2017-02-27T12:28:40.137" Score="6" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_128&quot; rel=&quot;noreferrer&quot;&gt;this Wikipedia article&lt;/a&gt;, the Z80 in the C128 was &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_128#CP.2FM_mode&quot; rel=&quot;noreferrer&quot;&gt;stepped down to 2MHz&lt;/a&gt;: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The C128 runs CP/M noticeably slower than most dedicated CP/M systems,&#xA;  as the Z80 processor runs at an effective speed of only 2 MHz (instead&#xA;  of the more common 4 MHz). From the source code of the C128 CP/M&#xA;  implementation, it is clear that the engineers originally planned to&#xA;  make it possible to run CP/M in the &quot;fast&quot; mode as well, with the&#xA;  40-column output turned off and the Z80 running at an effective 4 MHz;&#xA;  however, this feature does not correctly function on the&#xA;  first-generation C128 hardware.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, even though the chip was rated for 4MHz, it was never actually run at that speed in the C128.&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2017-02-27T12:28:40.137" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2364" PostTypeId="2" ParentId="2361" CreationDate="2017-02-27T13:14:06.513" Score="45" Body="&lt;p&gt;(2017.03.03) I have added a second answer with diagrams and more technical details. This answer is already huge and self-contained; the other focuses on the complexities due to hardware.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Why does the C128 perform poorly when running CP/M?&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The Z80A was sort of an after-thought in the C128 design. Before release it had been touted as &quot;fully C64 compatible&quot; (which the earlier C= Plus/4 was not). However, the C64 had a Z80 cartridge allowing it to run CP/M. For whatever reason the cartridge could not work on the C128, so they added the Z80 directly to the motherboard. At that point, they were already 2 months into their 5-month development cycle. (see reference #3 below)&lt;/li&gt;&#xA;&lt;li&gt;I/O was doubly indirect. Actions such as reading from the keyboard and writing to the screen first went thru the CP/M BIOS layer. &lt;strong&gt;Then it had to switch CPUs!&lt;/strong&gt; From the &lt;a href=&quot;http://www.pagetable.com/docs/Commodore%20128%20Programmer&amp;#39;s%20Reference%20Guide.pdf&quot; rel=&quot;noreferrer&quot;&gt;Commodore 128 Programmer's Reference Guide&lt;/a&gt; (PRG), page 500:&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 8502 is responsible for most of the low-level I/O functions. The request for these functions is made through a set of mailboxes. Once the mailboxes are set up, the Z80 shuts down and the 8502 starts up (BIOS85). The 8502 looks at the command in the mailbox and performs the required task, sets the command status and shuts down. The Z80 is re-enabled; it then looks at the command status and takes the appropriate actions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;Updates to the screen were s-l-o-w. I believe this was due to the impact #2 had on interacting with the 8563 video controller. Although a &lt;em&gt;block mode&lt;/em&gt; character transfer was possible, apparently the complexity of the dual-BIOS layers led to only one character being written to the screen per BIOS call. To write a character, two 8563 registers needed to be updated, which were the hardware pipeline to the 80-column video memory. That all amounts to a &lt;strong&gt;heckuva&lt;/strong&gt; lot of overhead per character.&lt;/li&gt;&#xA;&lt;li&gt;Some users only had the classic C64 model 1541 disk drive. This was already known for being very slow (to be fair, &quot;faster than cassette&quot;). The newer 1571 drive, released with the C128, was three to six times faster, had double the capacity, and supported several CP/M formats used by other manufacturers.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Some of these issues were clearly not due to hardware limitations, but stemmed from a lack of optimization for the drivers used in CP/M. The engineers were on a tight schedule and implementing something that wasn't even part of the original C128 design. They would have had to rewrite the 8502 BIOS code in Z80 assembly language, but they were primarily hardware guys. I'm sure Commodore didn't want to spend extra money to optimize a feature they hadn't even asked for. So the simplest, most reliable route was to make calls to the already working and well-tested 8502 BIOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 1999 update to C128 CP/M, by Linards Ticmanis, addresses some of the CP/M driver performance limitations of the original and purports to improve 80-column screen updates by 75%.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.commodore.ca/manuals/funet/cpm/sys/c128/system/cpmfast.zip&quot; rel=&quot;noreferrer&quot;&gt;http://www.commodore.ca/manuals/funet/cpm/sys/c128/system/cpmfast.zip&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(speculation added 2017.03.01)&lt;br&gt;&#xA;After fully reading reference #2, my understanding of the development bottleneck for the CP/M BIOS was clarified. The C128 team did have an excellent CP/M expert working off-site. It was never his goal to have the CP/M BIOS call the 8502 BIOS. Unfortunately the Commodore MOS group (the chip developers) had long-standing major problems delivering a working, stable, and reliable 8563 80-column video controller. This chip had been part of a Z8000 (16-bit version of Z80) Unix computer, the &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_900&quot; rel=&quot;noreferrer&quot;&gt;C900&lt;/a&gt;&quot;, Commodore had once worked on, and apparently the chip had never been completed even for that use. Thus the 8563's fundamental design was based on an entirely different bus structure than the C128 offered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8563 samples the C128 team received would tend to burn themselves up, arrive with documented deficiencies, and, in general, be altogether unreliable throughout most of the development process. The CP/M guy could not use current hardware.  He had a board with an older 8563 revision that wouldn't burn itself up and mostly worked. (He had to keep it cool with an ice cube sat in a tray above it, though.) But ongoing changes to the chip must have kept invalidating his BIOS. My guess is at the last minute he was told something like, &quot;Look, we'll eventually get the I/O working in house with the 8502 BIOS.  You just make calls to that, and we'll make sure on our end that it eventually works right.&quot;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;&lt;em&gt;Z80A only runs at 4MHz half the time.&lt;/em&gt;  Why should this be the case?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;From page 575 of the &lt;em&gt;PRG&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;SYSTEM DESCRIPTION&lt;/strong&gt;&lt;br&gt;&#xA;  The Z80A, a 4MHz version of Zilog's standard Z80 processor, is included as an&#xA;  alternate processor in the C128 system. This allows the C128 to run the CPM 3.0&#xA;  operating system at an effective speed of 2 MHz. The Z80 is interfaced to the 8502 bus interface and can access all the devices that the Z80 can access. The bus interface for the Z80 (the most complex part of the Z80 implementation) is described in this section, along with Z80's operation as a coprocessor in the C128 system.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;BUS INTERFACE&lt;/strong&gt;&lt;br&gt;&#xA;  Because a Z80 bus cycle is much different than a 65xx family bus cycle, a certain amount of interfacing is required for a Z80 to control a 65xx-type bus. Since the Z80 has built-in bus arbitration control lines, it is possible to isolate the Z80 by tri-stating its address lines. Thus, both the Z80 and the 8502 share common address lines.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The interfacing of the data lines is more complex. Because of the shared nature of the bus during Z80 mode, the Z80 must be isolated from the bus during AEC low. Thus, a tri-statable buffer must drive the processor bus during Z80 data writes. The reverse situation occurs during a Z80 read—the Z80 must not read things that are going on during AEC low; it must latch the data that was present during AEC high. Thus, a transparent latch drives the data input to the Z80. It is gated by the Z80 read-enable output, and latched when the 1 MHz clock is low. It will be seen that the Z80 actually runs during AEC low, but that the data bus interfaces with it only during AEC high.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;AEC&lt;/strong&gt; is a signal pin of the C128's memory management unit. It is defined on pages 584 and 585 of the &lt;em&gt;PRG&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;AEC: Address Enable Control. Indicates whether the 8502 processor or the&#xA;  VIC has access to the shared bus. When low, VIC or an external DMA has the bus and VA16 have the processor bus, and no pointer or BIOS translation takes&#xA;  place. This signal occupies pin 16.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To put it bluntly, &quot;&lt;em&gt;It's complicated&lt;/em&gt;.&quot; The Z80A slowdown may be thought of as something like &quot;wait states&quot;. Wait states are to allow a CPU running faster than memory to still operate, especially in an era before on-chip CPU caches alleviated the need for the CPU to access memory every (other) cycle. The problem on the C128 is that a 8502 CPU expects different things from its bus than a Z80 does. In the modern era, you can think of different motherboards being needed for different (yet current) '86 family CPUs. They can't just run the motherboards at slower and faster speeds and expect everything to work. Bil Herd and his team had to work with &lt;strong&gt;one&lt;/strong&gt; motherboard and &lt;strong&gt;two&lt;/strong&gt; entirely different CPUs.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Performance benchmarks?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I was not able to find actual benchmarks. There were several accounts of users lamenting the C128's CP/M speed, and especially its screen updating. IMO the perception of this mode being slow was much more to do with the I/O bottleneck than the effective 2 MHz clock rate of the Z80A. There had been lots of actual 2 MHz CP/M machines using the original Z80; there were few complaints about their speed. But imagine using a CP/M spreadsheet and actually observing &amp;nbsp; o&amp;nbsp;n&amp;nbsp;e &amp;nbsp; c&amp;nbsp;h&amp;nbsp;a&amp;nbsp;r&amp;nbsp;a&amp;nbsp;c&amp;nbsp;t&amp;nbsp;e&amp;nbsp;r &amp;nbsp; a&amp;nbsp;t &amp;nbsp; a &amp;nbsp; t&amp;nbsp;i&amp;nbsp;m&amp;nbsp;e &amp;nbsp; being written to the screen. It'd be kind of annoying.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Cool References&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://hackaday.com/2013/12/09/guest-post-the-real-story-of-hacking-together-the-commodore-c128/&quot; rel=&quot;noreferrer&quot;&gt;THE REAL STORY OF HACKING TOGETHER THE C128&lt;/a&gt; by Bil Herd, lead designer&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://c128.com/content/c128-story&quot; rel=&quot;noreferrer&quot;&gt;The C128 Story&lt;/a&gt;, aggregated CompuServe postings by Bil Herd&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.cbm/xVv2cnfkbFQ/WWuyFOtSINsJ&quot; rel=&quot;noreferrer&quot;&gt;HEY EVERYONE! IT'S BIL HERD!!! :)&lt;/a&gt; 1998 usenet post to &lt;a href=&quot;https://groups.google.com/forum/#!forum/comp.sys.cbm&quot; rel=&quot;noreferrer&quot;&gt;comp.sys.cbm&lt;/a&gt;&lt;br&gt;&#xA;Bil describes why, how, and problems in adding a Z80 to the C128&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;ftp://www.zimmers.net/pub/cbm/schematics/cartridges/c64/cpm/README&quot; rel=&quot;noreferrer&quot;&gt;CP/M-cartridge for the C64&lt;/a&gt;, a README by Ruud Baltissen&lt;br&gt;&#xA;detailed explanation of interfacing a Z80 to a 6502 bus&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.giantbomb.com/commodore-128/3045-58/&quot; rel=&quot;noreferrer&quot;&gt;Platform Wiki: Commodore 128&lt;/a&gt;, backstory, design, and marketing for the C128&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://c128.com/cpm-z80-cartridge-commodore-vic-40&quot; rel=&quot;noreferrer&quot;&gt;CPM Z80 Cartridge for the Commodore VIC-40&lt;/a&gt;, (from early 1980s)&lt;br&gt;&#xA;timing and other diagrams for interfacing a Z80 to a planned successor to the VIC-20&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-03-08T19:27:27.950" LastActivityDate="2017-03-08T19:27:27.950" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="2366" PostTypeId="1" AcceptedAnswerId="2374" CreationDate="2017-02-27T17:16:47.763" Score="23" ViewCount="3582" Body="&lt;p&gt;The 8086 is a 16 bit processor with a 20 bit segmented address space, famous for being used in the IBM PC. It is also infamous for being tricky to program for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently writing what is eventually going to be an operating system written in C for the 80286. For this project, I would like to know...&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;what conventions did programmers employ to deal with segmentation?&lt;/li&gt;&#xA;&lt;li&gt;what extensions exist for common programming languages to accommodate the segmented address space?&lt;/li&gt;&#xA;&lt;li&gt;what techniques exist to write relocatable code for the 8086 and 80286?&lt;/li&gt;&#xA;&lt;li&gt;are there any free/open source compilers that generate code that uses more than one data segment I can use for studying?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="24" LastActivityDate="2020-05-26T12:40:16.967" Title="What conventions and language extensions did people use to program the 8086 and 80286?" Tags="&lt;80286&gt;&lt;8086&gt;" AnswerCount="4" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="2367" PostTypeId="1" CreationDate="2017-02-27T18:01:46.667" Score="12" ViewCount="1543" Body="&lt;p&gt;Ceefax was a service that provided a series of pages of coloured text in a format similar to a 40-column display to a compatible television set. Each page was numbered, and you could address each page by its number. Typing in a number would bring up the relevant page with about the same latency as a dial-up modem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This hasn't made sense to me since I knew how a television worked. The television can't transmit back to the transmission tower; even if it could, my aerial is &lt;em&gt;much&lt;/em&gt; too small to send a signal that could reach the transmission tower without being drowned out by other signals from the transmission tower. Even if it was, there'd be interference from the other televisions' signals. And even if all of the signals managed to get to the transmission tower intact &lt;em&gt;and&lt;/em&gt; there was the necessary infrastructure to process all of the signals, there'd be no way for the transmission tower to send an extremely directed signal to the specific aerial that transmitted to it... &lt;em&gt;surely&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am certain that there was not enough RAM in my old CRT to store all of the Ceefax pages whilst the television was in Standby mode (although it did seem to take a while for Ceefax to become available after power was given to the machine...), but I can't see any other ways that this could have worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How was Ceefax designed, implemented and transmitted?&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-02-27T21:37:19.420" Title="How did Ceefax work?" Tags="&lt;data-transfer&gt;&lt;television&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2369" PostTypeId="2" ParentId="2366" CreationDate="2017-02-27T18:15:13.343" Score="12" Body="&lt;p&gt;That's a lot of parts for a single question.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;•what conventions did programmers employ to deal with segmentation?&lt;/p&gt;&#xA;&lt;p&gt;•what extensions exist for common programming languages to accommodate the segmented address space?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;These seem to be related.&lt;/p&gt;&#xA;&lt;p&gt;Compilers use memory models that make it transparent.  The models have names like &amp;quot;tiny&amp;quot;, &amp;quot;compact&amp;quot;, &amp;quot;large&amp;quot;, and &amp;quot;huge&amp;quot; (and there are even more than that).  They generate memory accesses using pointers that are &amp;quot;near&amp;quot; or &amp;quot;far&amp;quot;.  For &amp;quot;tiny&amp;quot; models, code, data, and stack all must fit in the same segment; &amp;quot;compact&amp;quot; has one 64kb block for code, and multiple segments for data, and the compiler dynamically assigns the proper value for DS; &amp;quot;large&amp;quot; has multiple 64kb blocks for code and data, and the compiler dynamically assigns the proper values for both CS and DS; &amp;quot;huge&amp;quot; is like &amp;quot;large&amp;quot; but allows data structures to exceed 64kb is length, and the compiler uses pointer trickery to deal with it.&lt;/p&gt;&#xA;&lt;p&gt;Linkers grouped all of the global variables into the data segment(s), and depending on the memory model.  To access the variables, the compiler would generate either a direct move from the current DS, or an LES/BX-style access and then an ES-overridden memory access.&lt;/p&gt;&#xA;&lt;p&gt;Calling into a far routine required a &amp;quot;far&amp;quot; (generally 0x9A segment:offset) call, and the CPU takes care of saving the calling segment on the stack.  The callee performs a &amp;quot;far&amp;quot; return and the CPU pops the segment register from the stack to reverse the operation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;•what techniques exist to write relocatable code for the 8086 and 80286?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The &amp;quot;MZ&amp;quot; (.exe) file format carries a relocation table that is generated by the compiler, and allows the file to be relocated by the operating system on load.  There is no need to perform explicit position-independent coding if you are using a high-level language.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;•are there any free/open source compilers that generate code that uses more than one data segment I can use for studying?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Watcom C++ (&lt;a href=&quot;http://openwatcom.org/&quot; rel=&quot;noreferrer&quot;&gt;http://openwatcom.org/&lt;/a&gt;) is free and open-source.&lt;/p&gt;&#xA;&lt;p&gt;Borland (now Embarcadero) Turbo C (&lt;a href=&quot;http://edn.embarcadero.com/&quot; rel=&quot;noreferrer&quot;&gt;http://edn.embarcadero.com/&lt;/a&gt;) has a free option after registration on their site.&lt;/p&gt;&#xA;" OwnerUserId="4476" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-02-27T19:34:53.967" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="2370" PostTypeId="2" ParentId="2367" CreationDate="2017-02-27T18:15:24.303" Score="12" Body="&lt;p&gt;It's a one-way Teletext system.  Basically, the pages are sent in conjunction with the broadcast signal.  The TV receiver knows how to extract the page information from the analog video signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you noted television broadcasts are one-way; all of the page content would be sent one page after the next.  The receiver could cache this information if desired and capable; otherwise, there would be a delay until the requested &quot;page&quot; was sent again.&lt;/p&gt;&#xA;" OwnerUserId="599" LastActivityDate="2017-02-27T18:15:24.303" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2371" PostTypeId="5" CreationDate="2017-02-27T18:40:58.160" Score="0" Body="" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-02-27T18:40:58.160" LastActivityDate="2017-02-27T18:40:58.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2372" PostTypeId="4" CreationDate="2017-02-27T18:40:58.160" Score="0" Body="Television sets and related systems. DO NOT USE for video or display protocols; use the relevant tag for each standard or the generic [video] tag instead." OwnerUserId="278" LastEditorUserId="15334" LastEditDate="2021-02-21T15:44:33.553" LastActivityDate="2021-02-21T15:44:33.553" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2373" PostTypeId="2" ParentId="2367" CreationDate="2017-02-27T21:37:19.420" Score="9" Body="&lt;p&gt;Ceefax uses the Teletext system. This protocol encodes data, such as text, in the vertical blanking periods of the PAL video signal. Each packet is 45 bytes long, where each byte is normally sent with the LSB first.&lt;sup&gt;p17&lt;/sup&gt; Packets could be sent from lines 6 to 22 and 318 to 335 inclusive.&lt;sup&gt;p14&lt;/sup&gt; Each data packet occupies one TV line.&lt;sup&gt;p15&lt;/sup&gt; The first three bytes are used for identification and synchronisation, the next two are used to define the packet address, and the remaining bytes are used to carry data.&lt;sup&gt;p17&lt;/sup&gt; The areas of the protocol determining the actual data are complicated, but I hope to have a summary written out soon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specification: &lt;a href=&quot;http://www.etsi.org/deliver/etsi_i_ets/300700_300799/300706/01_60/ets_300706e01p.pdf&quot; rel=&quot;noreferrer&quot;&gt;ETS 300 706 - Enhanced Teletext specification - ets_300706e01p.pdf&lt;/a&gt;&lt;br&gt;&#xA;Thanks to &lt;a href=&quot;/users/148/dirkt&quot;&gt;dirkt&lt;/a&gt; for finding this document.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-02-27T21:37:19.420" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2374" PostTypeId="2" ParentId="2366" CreationDate="2017-02-27T21:41:03.410" Score="43" Body="&lt;p&gt;What it boils down to is that, unlike in a flat addressing model, there are multiple types of pointers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;near&lt;/code&gt; - 16-bit (16-bit offset only.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;far&lt;/code&gt; - 32-bit (16-bit offset + 16-bit segment)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;huge&lt;/code&gt; -  The same as&lt;code&gt;far&lt;/code&gt;, but the compiler generates code to automatically manage the segment when doing pointer arithmetic. (This is slow, but can convenient, because it means the programmer can ignore segments when dealing with structures &gt;64K).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Memory models represented different default types of pointers for both code and data. IIRC:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;tiny&lt;/code&gt; - everything is &lt;code&gt;near&lt;/code&gt;, and code and data are both in the same segment. DOS .COM files used this by default:&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;small&lt;/code&gt; - everything is &lt;code&gt;near&lt;/code&gt;, with one segment for code and another for data.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;compact&lt;/code&gt; - One code segment, but multiple data segments.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;medium&lt;/code&gt; - One data segment, but multiple code segments. Different .c files emitted as different code segments. For function pointers to be general, they had to be &lt;code&gt;far&lt;/code&gt;. (This model was commonly used.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;large&lt;/code&gt; - Multiple data segments, multiple code segments.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The medium model wound up being one of the more commonly used models, because it presented a nice set of trade-offs. It allowed for more than 64K of code, but kept the quick access to a single data segment.  Some systems provided the ability to &lt;code&gt;malloc&lt;/code&gt; and &lt;code&gt;free&lt;/code&gt; against a separate heap outside the default segment, which gave selective access to &gt;64K data as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Practically speaking, what this meant is this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Compilers/linkers had flags to set the memory model in use. (Along with separate libraries, etc. for each... people can and did save disk space by not installing memory models they weren't using.)&lt;/li&gt;&#xA;&lt;li&gt;Pointers were annotated with vendor-specific anotations for &lt;code&gt;near&lt;/code&gt;, &lt;code&gt;far&lt;/code&gt;, and &lt;code&gt;huge&lt;/code&gt;. (And &lt;code&gt;sizeof&lt;/code&gt; for pointers would vary between the different types.)&lt;/li&gt;&#xA;&lt;li&gt;There were macros that allowed segment/offset pointers to be assembled from component parts and broken out into separate segments and offsets.&lt;/li&gt;&#xA;&lt;li&gt;There were 4096 different valid &lt;code&gt;far&lt;/code&gt; pointers for each location in the address space. (So pointer equality could be strange.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;One specific bit of trickery around this was the old &lt;code&gt;MakeProcInstance&lt;/code&gt; function in Win16. It generated code at runtime that would bind an instance of a function to a particular data segment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20080207-00/?p=23533&quot; rel=&quot;noreferrer&quot;&gt;https://devblogs.microsoft.com/oldnewthing/20080207-00/?p=23533&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also worth mentioning that the 286 was rather different in protected mode. Rather than the segment being directly shifted and added to the offset to form the final pointer, the segment number was an offset into a table that contained information (including the segment offset) for each segment managed by the OS. The indirection made it possible to relocate and protect segments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make it possible to easily traverse blocks of memory &gt;64K, Windows would allocate blocks of segments where the increment between one segment and the next was well known:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.midnightbeach.com/jon/pubs/huge-model.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.midnightbeach.com/jon/pubs/huge-model.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that as tricky as all this sounds, IMHO, it's not nearly as complex as some of the bank switching schemes that were used. The Apple ][ was bad about that, but in DOS, EMS 3.2 was no picnic either. EMS 3.2 took a 64K block of memory in the space between 640-1024K and divided it into 4 16K chunks.  The chunks then served as windows into a larger address space (megabytes) managed through the EMS memory mapping. An EMS memory reference thus was a &lt;code&gt;far&lt;/code&gt; reference to a 16K window mapped to some portion of another address space...&lt;/p&gt;&#xA;" OwnerUserId="4522" LastEditorUserId="79" LastEditDate="2020-05-26T12:40:16.967" LastActivityDate="2020-05-26T12:40:16.967" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="2377" PostTypeId="2" ParentId="2353" CreationDate="2017-02-28T15:17:50.300" Score="16" Body="&lt;p&gt;VLB was a stopgap solution to fix ISA. The 16-bit ISA bus originated in the original PC AT (1984) and was showing its age by the time of the 486. Not only was it 16-bits, system designers had long since decoupled the slot clock from the CPU clock to maintain compatibility with cards that assumed 8MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issues with this bus were evident as far back as the mid-1980's.  IBM's evolution of ISA was the Microchannel (MCA) bus. It was a better bus than ISA, but it also had it's problems.  MCA boards were about half the size of ISA boards, required more complicated glue logic, and there were licensing fees to be paid to IBM if you wanted to build an MCA machine.  Tandy did this with the 5000MC, but very few others did. (Other issues with the MCA bus included the fact that there were performance issues in the PS/2 Model 80's implementation of 32-bit, and IBM itself undermined the bus by continuing to use ISA in the Model 25, 30, and 30/286.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The troubles with MCA and the limitations of ISA left a vacuum that an industry consortium attempted to address with EISA. EISA had backward compatibility with ISA (including card size) and many of the same features of MCA, but was expensive and mostly wound up in servers and other relatively high end machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The net effect of all of this was that, particularly in the low to mid range market, PC's wound up confined to the 16-bit/8MHz ISA bus well into the 486-cycle. For most peripherals, this didn't matter, but fitting a 1024x768x8bpp display through an ISA bus represented a major performance bottleneck. This became even worse at 16bpp or when trying to animate things. (This is why NeXTStep required a better bus than ISA, and on-card video accelerator chips didn't help.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this is the gap that VLB was intended to fill - how to get large bitmaps into a frame buffer. Very little else was in scope. As a result VLB was designed in much the same way as ISA was originally, with the same bus and clock rate as the host CPU. With a 33MHz FSB, the VLB would run at 33MHz. With a 50MHz FSB, it'd run at 50MHz. This also had an impact on the number of slots... by the time you got to a 50MHz bus, I believe only one VLB slot was allowed. This turned out not to matter, because 486DX50 machines were difficult to engineer and the market quickly shifted over to 486DX2/66 machines with higher core clocks and 33MHz buses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The net result of this is that the market for VLB cards was heavily biased toward video cards. (Which aligns with the fact that the V in VLB stands for VESA.) That said, there were also disk controllers and a few other types of boards, but they were never remotely as significant as video. If you really care about high performance disk or network I/O, you'd buy a machine with an EISA bus. (And there were EISA machines that had VLB slots as well for the video... VLB had higher raw transfer rates than EISA, so it was still useful for video even on EISA machine.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the Pentium-era, Intel immediately pushed PCI into the market as the high-end alternative. Pentium-class machines would have PCI for disk, video, and anything else that required performance, and have an on board bridge to some ISA slots for compatibility with legacy devices. While I believe there were some PCI motherboards with VLB/ISA slots, the market really shifted over to PCI. (Until AGP was introduced to solve the same sorts of video bandwidth problems for PCI machines that VLB solved for ISA machines.)&lt;/p&gt;&#xA;" OwnerUserId="4522" LastActivityDate="2017-02-28T15:17:50.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2378" PostTypeId="2" ParentId="2366" CreationDate="2017-03-01T05:29:51.227" Score="5" Body="&lt;p&gt;One thing that hasn't been addressed yet:  relocation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's actually easier when you're using a segment:offset architecture.  The segment registers take care of most of the work for you.  A dos .COM file didn't have &lt;strong&gt;any&lt;/strong&gt; relocation capability--it's simply a memory image, nothing more.  It would be loaded wherever the operating system felt like loading it, the segment registers initialized to the segment it was loaded to and that's that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even when you were using a larger memory architecture most references would be near and not need relocation.  When relocation is needed the program is compiled for a fixed address and a table written into the file telling the OS what needs patching (add the load address to the value found.)  I never wrote anything big enough in assembler to dig into how it actually worked, though.&lt;/p&gt;&#xA;" OwnerUserId="1897" LastActivityDate="2017-03-01T05:29:51.227" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2379" PostTypeId="1" AcceptedAnswerId="2380" CreationDate="2017-03-01T17:03:44.380" Score="18" ViewCount="6871" Body="&lt;p&gt;I would like to know which original Operating Systems that run on retrocomputers are still being actively maintained and updated. This only applies to retrocomputer OS's that may still be used on original hardware.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Assuming the OS vendor has long-since dropped support, the updates would have to come from some community project which continues to develop the OS by adding modular enhancements, or by reverse-engineering the OS and releasing an enhanced version.&lt;/li&gt;&#xA;&lt;li&gt;Modern replacements for the original OS that are in no way compatible&#xA;should not be included.&lt;/li&gt;&#xA;&lt;li&gt;Updates should be able to run on the&#xA;original retrocomputer hardware without need for modern&#xA;hardware or emulators.&lt;/li&gt;&#xA;&lt;li&gt;Updated ROMs are Ok, since this may be the pathway to update the OS.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-03-01T17:49:49.110" LastActivityDate="2021-05-22T20:04:07.327" Title="Which original retrocomputer OS's are still maintained and updated today, for original hardware?" Tags="&lt;operating-system&gt;&lt;software-development&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="2380" PostTypeId="2" ParentId="2379" CreationDate="2017-03-01T17:05:17.130" Score="54" Body="&lt;p&gt;My previous research into retrocomputer OS updates has led me to the following list. For each retrocomputer OS, the date and version of the latest update released at time of posting is included. The link for farther information about the update is also included.&lt;/p&gt;&#xA;&lt;h2&gt;ProDOS 8 for Apple II, originally released Jan 1983&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://prodos8.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;ProDOS v2.4.2 (Jan 2018)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;GS/OS for AppleIIGS, originally released Sep 1988&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://a2central.com/7396/the-source-is-strong-with-this-one-system-6-0-4/&quot; rel=&quot;nofollow noreferrer&quot;&gt;GS/OS v6.0.4 (Jan 2017)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;OS-9 for Tandy CoCo, originally released 1979&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://sourceforge.net/p/nitros9/wiki/Main_Page/&quot; rel=&quot;nofollow noreferrer&quot;&gt;NitrOS-9 v3.3.0 (Apr 2014)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;AmigaOS for Amiga, originally released Jul 1985&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.hyperion-entertainment.com/index.php/news/1-latest-news/290-amigaos-42-for-all-classic-amigas-released-and-available&quot; rel=&quot;nofollow noreferrer&quot;&gt;AmigaOS 3.2 (May 2021)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://classicwb.abime.net&quot; rel=&quot;nofollow noreferrer&quot;&gt;Classic WB v28 (Dec 2015)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://real.amiga.sk&quot; rel=&quot;nofollow noreferrer&quot;&gt;AkReal v9 (Oct 2017)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;TOS for Atari ST, originally released Jun 1985&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/freemint/freemint&quot; rel=&quot;nofollow noreferrer&quot;&gt;FreeMiNT Open Source on Github (current)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/emutos/emutos&quot; rel=&quot;nofollow noreferrer&quot;&gt;EmuTOS Open Source on Github (current)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Atari DOS for Atari 8-bit, originally released Sep 1979&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://sdx.atari8.info/index.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;SpartaDOS X v4.49 (Apr 2020)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;RISC OS for RiscPC, originally released Jun 1987&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.riscosopen.org/content/downloads/riscpc&quot; rel=&quot;nofollow noreferrer&quot;&gt;RISC OS v5.28 (Oct 2020)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;OZ for Cambridge Computers Z88, originally released 1987&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://cambridgez88.jira.com/wiki/spaces/OZ/pages/104562695/OZ+V4.7+Release+Notes&quot; rel=&quot;nofollow noreferrer&quot;&gt;OZ 4.7.1 (May 2018)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;MSX-DOS 2 for MSX, originally released 1988&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.konamiman.com/msx/msx-e.html#nextor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nextor v2.1.0 (Aug 2020)&lt;/a&gt; - &lt;a href=&quot;https://github.com/Konamiman/Nextor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Source in GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;OS/2 for IBM PC, originally released Apr 1987&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ecomstation.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;eComStation (eCS) v2.1 (May 2011)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.arcanoae.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arca Noae&lt;/a&gt; ArcaOS 5.0.5 (June 2020)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;MINIX for IBM PC, originally released 1987&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.minix3.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MINIX 3&lt;/a&gt; is still currently maintained as of 2019.  It requires an i586 CPU, which is closer to original than modern hardware is.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Linux for IBM PC, originally released Aug 1991&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.kernel.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Linux 5.2.9 released Aug 2019&lt;/a&gt;  It still supports (at least theoretically) an i486 which was already available at the time of original release.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;BeOS for IBM PC, originally released Oct 1995&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.haiku-os.org/get-haiku&quot; rel=&quot;nofollow noreferrer&quot;&gt;Haiku R1/beta1 (Sep 2018)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Sinclair QL (and compatibles) SMSQ/E, originally released as Qdos 1984.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.wlenerz.com/smsqe/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SMSQ/E 3.37&lt;/a&gt; (May 2021)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;GEOS for C64/C128 and Apple II, originally released Jun 1986&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/mist64/geos&quot; rel=&quot;nofollow noreferrer&quot;&gt;GEOS Open Source on GitHub (current)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;PC/GEOS for PC clones, originally released in 1990&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/bluewaysw/pcgeos&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC/GEOS Open Source on GitHub (current)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Digital Alpha machines&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://vmssoftware.com/products/list/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Digital/Compaq/HP/HPE/VSI OpenVMS on Alpha V8.4-2L2 &lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;They don't have any paying customers with pre-Alpha machines.&lt;/p&gt;&#xA;&lt;h2&gt;MenuetOS, originally released May 2000&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The extremely &lt;a href=&quot;http://www.menuetos.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;lightweight OS written fully in assembly language&lt;/a&gt;. According to Wiki, originally released &lt;a href=&quot;https://en.wikipedia.org/wiki/MenuetOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;in May 2000&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Oric-1 / Oric Atmos&lt;/h2&gt;&#xA;&lt;p&gt;Sedoric has been maintained and improved :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Version 3 : &lt;a href=&quot;https://www.oric.org/software/sedoric_v3_0-741.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.oric.org/software/sedoric_v3_0-741.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Version 4 : &lt;a href=&quot;https://www.oric.org/software/sedoric_v4_0-2338.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.oric.org/software/sedoric_v4_0-2338.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Multics, first deployed in 1969&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.multicians.org/simulator.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multics 12.7&lt;/a&gt; is now (2021-02) getting ready for release, a follow-on to &lt;a href=&quot;http://multics-wiki.swenson.org/index.php/Main_Page#New_Features_in_MR12.6f&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multics 12.6&lt;/a&gt; which was released in 2017.  It would surely run on the original hardware if you have a 6180 in your garage.  Lacking that, it does run on an emulator ...&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="780" LastEditDate="2021-05-22T20:04:07.327" LastActivityDate="2021-05-22T20:04:07.327" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="2382" PostTypeId="2" ParentId="2061" CreationDate="2017-03-02T16:53:30.887" Score="4" Body="&lt;p&gt;Most (though not quite all) Android devices support operating the USB port as a USB host, either triggered by the usual OTG role pin on an adapter cable or by vendor-unique software setting.  There can be various complex interactions with charging and ability to supply power to a peripheral, but for a low consumption device like a USB serial converter it will in most cases work, though obviously consuming power from the phone battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the software side, Android allows Apps to interact with the USB host mode through a fairly low-level API, so in effect Apps have to bring their own user-mode USB driver implementation built with detailed understanding of how to talk to a particular peripheral.  USB serial converter chips tend to be well and widely understood in the technical community, so for the major varieties you should be able to find a pre-made app or perhaps an open source codebase to leverage - but you will need one compatible with your particular converter.  If you run into difficulty it may be easiest to try another - don't rule out 9-pin devices with a 9-to-25 pin adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last level would be having serial line settings and data interpretation compatible with the //e and whatever you are trying to do with it.  This is where starting with an open source Android App could be beneficial as you could then customize it to best support what you are doing with the Apple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an alternative to USB, you could also look into using a bluetooth to serial module (on Android, classic BT would work better for this than BTLE), or perhaps making a serial-to-wifi bridge out of a small router or something like an ESP8266.&lt;/p&gt;&#xA;" OwnerUserId="1874" LastActivityDate="2017-03-02T16:53:30.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2383" PostTypeId="1" AcceptedAnswerId="2384" CreationDate="2017-03-02T16:55:55.043" Score="10" ViewCount="753" Body="&lt;p&gt;It is well known that the &lt;code&gt;IBM PCjr&lt;/code&gt; was a commercial failure and that the &lt;code&gt;Tandy 1000&lt;/code&gt; series of computers not only matched the features of the PCjr (other than maybe the wireless keyboard), it also provided more features.  Such as better graphics and a sound chip built in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know off the top of my head how much &quot;better&quot; the Tandy's graphics were over the PCjr, but I don't believe the PCjr had any audio except a speaker for beeps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my question is, was it possible to upgrade the PCjr to the same level of graphics and sound as the Tandy 1000?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wrong about the sound abilities of the PCjr.  It did have audio built in.  But I'm not sure how it compared to Tandy.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="278" LastEditDate="2017-03-04T08:09:20.603" LastActivityDate="2017-12-19T17:44:03.710" Title="Can the IBM PCjr be upgraded to support the better features of the Tandy 1000?" Tags="&lt;ibm-pc&gt;&lt;ibm-pcjr&gt;&lt;tandy-1000&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2384" PostTypeId="2" ParentId="2383" CreationDate="2017-03-02T17:30:57.863" Score="13" Body="&lt;p&gt;The PCjr supports three-voice audio; the Tandy 1000 copied that so running games in Tandy mode should work on a PCjr too. Some games might need a &lt;a href=&quot;http://www.brutman.com/forums/viewtopic.php?f=6&amp;amp;t=99&quot; rel=&quot;nofollow noreferrer&quot;&gt;small program&lt;/a&gt; to switch to three-voice audio on first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both the PCjr and Tandy 1000 support 16-colour graphics in 320×200, but many games which run on Tandy machines don't work on the PCjr. There is a simple enough hardware modification to make a PCjr Tandy-compatible though; the Internet Archive still &lt;a href=&quot;https://web.archive.org/web/20140504205810/http://vintagemashups.net/2011/12/ibm-pcjr-tandy-1000-graphics-mod/&quot; rel=&quot;nofollow noreferrer&quot;&gt;has the details&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going beyond Tandy compatibility, there are quite a few useful upgrades for the PCjr, including in particular replacing the 8088 CPU with a NEC V20. Nerdly Pleasures has &lt;a href=&quot;http://nerdlypleasures.blogspot.fr/2014/03/ibm-pcjr-upgrades.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;details&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nerdly Pleasures also has a &lt;a href=&quot;http://nerdlypleasures.blogspot.fr/2012/06/ibm-pcjr-and-tandy-1000-games.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;detailed article on the differences between the PCjr and Tandy 1000&lt;/a&gt;. Apart from the slight differences in graphics handling, the major difference is the memory handling: the PCjr was designed for 128 KiB, whereas the Tandy 1000 was designed for more. The PCjr can be expanded but it retains quirks in its memory layout...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-12-19T17:44:03.710" LastActivityDate="2017-12-19T17:44:03.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2386" PostTypeId="1" AcceptedAnswerId="2396" CreationDate="2017-03-02T21:26:51.780" Score="86" ViewCount="11521" Body="&lt;p&gt;Microsoft Windows was originally introduced in 1985, ostensibly to compete with the Apple Macintosh, and other computers shipping with graphical shells by that time. However, early versions of Windows were not commercially popular, and MS-DOS remained the primary OS used on PC clones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This changed rather abruptly in 1990, when Windows was now 5 years old, and Microsoft released the Windows v3.0 update. Windows 3 was the first version to enjoy broad commercial success, and it began to quickly supplant MS-DOS as the dominant OS on PC's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I'm certain that Windows 3.0 was a superior product to the earlier versions, it's not clear to me which new feature would have finally catapulted Windows into such new heights of success. Speculatively, I would be more inclined to see this sudden success as being either a culmination of earlier factors, or a confluence of fortunate events occurring around the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the best explanation for Windows' sudden rise in the early 1990's with version 3.0, taking into account the relative obscurity of Windows for the five years previous?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="15334" LastEditDate="2021-01-12T22:52:27.133" LastActivityDate="2021-01-12T22:52:27.133" Title="What key factor led to the sudden commercial success of MS Windows with v3.0?" Tags="&lt;history&gt;&lt;operating-system&gt;&lt;windows-3.x&gt;" AnswerCount="10" CommentCount="19" FavoriteCount="21" ContentLicense="CC BY-SA 4.0" />
  <row Id="2387" PostTypeId="2" ParentId="2386" CreationDate="2017-03-02T22:21:19.133" Score="88" Body="&lt;p&gt;There were a number of factors involved.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Windows 3.0 introduced a more refined user interface than available in Windows 2.0: more colours, proportional fonts everywhere, smaller icons, and MDI windows (multiple document windows inside an application window)... This made it &amp;quot;obviously&amp;quot; better than plain DOS to many users. Reviewers back in the day perceived this as Windows &amp;quot;growing up&amp;quot;, since its new interface was modelled after OS/2's Presentation Manager (and OS/2 was still what a grown-up operating system was supposed to be like back then).&lt;/li&gt;&#xA;&lt;li&gt;Windows 3.0 included better 386 support than previous versions (including Windows/386). This didn't make a huge difference for Windows applications yet (compared to running them on a 286), but it meant that users could run multiple DOS applications at the same time, displaying them in windows on-screen. Most users still had DOS applications they needed, so running DOS applications was very important.&lt;/li&gt;&#xA;&lt;li&gt;While it could make better use of 386s, it still ran well on the very common 286s, and was usable on 8086s (but you probably wouldn't want to really). In 1990, 486s were jaw-droppingly expensive (the realm of servers effectively), 386s were the high end and many people still bought 286s.&lt;/li&gt;&#xA;&lt;li&gt;As pointed out by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/1912/john-e&quot;&gt;john_e&lt;/a&gt; in his &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2395/79&quot;&gt;answer&lt;/a&gt; (upvote it!), on both 286s and 386s, Windows 3.0 ran Windows applications in protected mode, allowing them to use all the installed memory (without any change to the applications themselves). On 386s, Windows 3.0 could additionally use a swapfile to provide more memory than was physically installed. &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4522/mschaef&quot;&gt;mschaef&lt;/a&gt;'s &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2396/79&quot;&gt;answer&lt;/a&gt; gives a lot more detail, as do Andrew Schulman’s two PC Magazine articles on the subject, &lt;a href=&quot;https://books.google.com/books?id=LNhQLiJ8TgQC&amp;amp;pg=PT350&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Windows 3.0: All That Memory, All Those Modes&lt;/em&gt;&lt;/a&gt; and &lt;a href=&quot;https://books.google.com/books?id=DXn-87kyJksC&amp;amp;pg=PT362&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The Programming Challenge of Windows Protected Mode&lt;/em&gt;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Windows 3.0 was much easier to use than previous versions, in particular thanks to its new File Manager and Program Manager (which allowed programs to be logically grouped). In previous versions you started applications from the Executive which was a rather primitive file manager.&lt;/li&gt;&#xA;&lt;li&gt;Windows 3.0 included a few simple but usable &amp;quot;productivity&amp;quot; applications, which were actually good enough for many people: Write in version 3.0 was a passable word processor (fine for letters, homework etc.), and Cardfile was a neat little information organiser (both of these were available in previous versions of Windows). Solitaire made its appearance in version 3...&lt;/li&gt;&#xA;&lt;li&gt;Microsoft managed to get extensive press coverage for the Windows 3.0 launch, far more than previous versions; a quick look through the Byte archives shows a cover story for the launch in June 1990, extensive coverage in the July 1990 issue with a number of in-depth articles, and continued coverage thereafter as more and more software was released for Windows 3.0.&lt;/li&gt;&#xA;&lt;li&gt;Around 1990, Windows software was starting to become usable, with enough features to convince people to switch to Windows to be able to run specific pieces of software: Word for Windows 1.1, Excel 3.0, PageMaker...&lt;/li&gt;&#xA;&lt;li&gt;Last in this list but not least, Windows 3.0 was the first version to be widely factory-installed on PCs. Before 1990, when you bought a PC you'd get a version of MS-DOS, and that would pretty much be it. After Windows 3.0's release, many manufacturers started bundling MS-DOS and Windows with their PCs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Before Windows 3.0, people who used Windows did so because they had to, typically to run Excel or PageMaker: they'd start Windows, start the software they were really interested in, do whatever they needed to do, then exit the software and &lt;em&gt;exit Windows&lt;/em&gt;. (The same was true of other desktop environments, &lt;em&gt;e.g.&lt;/em&gt; GEM for running Ventura.) Micros were single-tasking and people just ran one program after another. With the features listed above, it suddenly made sense to run Windows &lt;em&gt;and stay there&lt;/em&gt;, even to run DOS software (apart from games). On a 386 with its virtual memory support, Windows could even be a better DOS than DOS... With Windows 3.0, people started adding &lt;code&gt;win&lt;/code&gt; at the end of their &lt;code&gt;autoexec.bat&lt;/code&gt;, and PCs really became Windows PCs, no longer just DOS PCs.&lt;/p&gt;&#xA;&lt;p&gt;In following years, memory prices fell, and PC prices fell too; by 1992 a 386DX or 486SX with 4 MiB or even 8 MiB of memory was affordable (at least in North America and Western Europe), and Windows 3.0 was very comfortable to use on such a system. Windows 3.1 improved things further with its Truetype engine and built-in multimedia support in particular, OLE brought composite documents and made multi-tasking indispensable, and Windows for Workgroups brought networking to the (office) masses (easy networking was a killer feature in the early nineties). Eventually games started appearing too (in particular Myst on Windows 3), and the rest is history.&lt;/p&gt;&#xA;&lt;p&gt;Here's a quote from the June 1990 issue of Byte, to give you an idea of Windows 3.0's reception:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Users of DOS PCs rejoice! Windows 3.0 will breathe new life into your machine. Microsoft has bundled a graphical environment, a suite of desktop applications, a DOS program switcher, a Windows multitasking executive, a V86 multitasker, and a virtual memory manager into a single package.&lt;/p&gt;&#xA;&lt;p&gt;Windows has long aspired to change the face of DOS computing — not just for Excel or PageMaker addicts, but for the rest of us. A year ago, that transformation seemed unlikely. Today it appears inevitable. Windows 3.0 finally consummates the Windows/DOS marriage. That is good news for the 386 crowd, and it's great news for the silent majority: 286 owners who've lately been made to feel like they have bought an Edsel.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-04-25T12:03:13.300" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="2388" PostTypeId="5" CreationDate="2017-03-02T22:24:01.303" Score="0" Body="" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-03-02T22:24:01.303" LastActivityDate="2017-03-02T22:24:01.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2389" PostTypeId="4" CreationDate="2017-03-02T22:24:01.303" Score="0" Body="The IBM PCjr is a PC-compatible home computer. For questions about other PC-compatibles please use the [ibm-pc] tag." OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-03-02T22:24:01.303" LastActivityDate="2017-03-02T22:24:01.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2390" PostTypeId="2" ParentId="2386" CreationDate="2017-03-02T22:31:00.313" Score="14" Body="&lt;p&gt;For me, the main advantage of Windows 2.0 over MS-DOS was that I could configure my printer just once and then all Windows programs used the same configuration. Also it printed graphics better than most DOS applications. But overall, Windows 2.0 was basically a technology preview of things to come...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 3.0 let you run MS-DOS sessions in their own window, making it more user-friendly for multitasking than Desqview. Also it supported 256-color VGA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 3.1 was where Windows really took off. It added support for sound cards and had much nicer fonts.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-03-02T22:31:00.313" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="2391" PostTypeId="2" ParentId="2366" CreationDate="2017-03-02T23:37:55.533" Score="5" Body="&lt;p&gt;In terms of operating system design concepts like memory models are a bit of a red herring. Operating systems like MS-DOS and 16-bit Windows didn't care about these things. They provided a mechanism to load executables and provided an API that those executables could use to invoke system services. How programs dealt with segmentation was left to the programmers and their development tools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means the requirements on your 16-bit OS are fairly small. Your OS needs to support loading executables with multiple segments.  It would need to allocate space and a selector for each segment.  Your API would be need to use far pointers, with a 16-bit selector and 16-bit offset, wherever it passes or returns an address.  With that you've pretty much all you need to handle however programs want to manage segmentation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Relocations are maybe the only tricky part, but they're potentially easy to handle. Segmentation actually makes this easier, since in protected mode you can relocate entire segments without changing either the selector used to access them or the offsets of anything in the segment. The only relocation type you need to support is one that sets any segment references in the code and data in the executable to the selector you've allocated for them when you load the executable. (This is similar to how MS-DOS MZ executables work, with only segment relocations. Windows 16-bit NE executables support more relocations types, but this appears to be in order to support DLLs.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact you can get away with not having any relocations at all by assigning each program its own LDT. This means a program can assign its own fixed LDT entries for segments and use the corresponding fixed selector value in the executable. The major drawback with this is that no OS I know of worked that way, so you won't find any development tools that will create executables like this. This also doesn't support shared libraries (eg. DLLs) as they can't depend selectors not being allocated by some other shared library. (Though you could do something like 32-bit Windows where executables don't normally have relocations, but DLLs do.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd also add that memory models didn't quite work the way some of the other answers suggest. Their primarily purpose was to affect the default size of pointers, whether object pointers and function pointers were by default near or far. They had less of an effect on the layout of segments than you might think, and different compiler implementations could behave differently. For example when using a far code model (large or medium) compilers normally put each translation unit in its own code segment, however this was often undone by linkers that would try to pack these code segments together. In the far data models (large, compact) compilers normally put all statically allocated data in the same default data segment, the one which DS was assumed to always point to. You would have to use the &lt;code&gt;far&lt;/code&gt; keyword explicitly in a declaration to have it exist in a different segment (or alternatively enable some compiler option that would do this automatically).  &lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2017-03-02T23:37:55.533" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2393" PostTypeId="2" ParentId="2386" CreationDate="2017-03-03T02:26:11.903" Score="3" Body="&lt;p&gt;Hardware with more RAM could have been a big practical issue. I remember buying a cheap second-hand 80286 PC around that time, with 1 MiB of RAM and Windows 2.0 installed - though its previous owner warned me that Windows wasn't useable.&lt;/p&gt;&#xA;&lt;p&gt;Windows 2.0 itself would just about run, but trying to load any application resulted in literally minutes of memory paging before enough of the OS got out of the way to make room for the app.&lt;/p&gt;&#xA;&lt;p&gt;But of course a 1 MiB 80286 PC running MS-DOS was a perfectly useable computer - and with a 20MHz clock it was pretty fast for those days as well!&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="15334" LastEditDate="2020-11-14T06:50:04.140" LastActivityDate="2020-11-14T06:50:04.140" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="2394" PostTypeId="2" ParentId="2386" CreationDate="2017-03-03T04:05:18.203" Score="5" Body="&lt;p&gt;DOS programs all had unique interfaces, each had their own graphics and device drivers and each had their own fonts. Cut and paste did not exist. Each new program had to take all these into consideration.  Windows alleviated this overhead for the developer and at the same time gave the user experience continuity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though you could launch older DOS programs, it just felt dirty and primitive. Better hope your printer was supported and you really liked one of the ten fonts offered ( I'm looking at you Printshop ). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would have to say that the icing on the cake was NETWORKING.  Network setup in DOS was dicey at best and expensive (cough-Novel-cough). With Windows you just bought a cheap network card and it just worked.  In my own experience this lead to network gaming. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess my take is that not unlike the iPhone paradigm, in it's own way, it created a better ecosystem for both developers and users. &lt;/p&gt;&#xA;" OwnerUserId="4545" LastActivityDate="2017-03-03T04:05:18.203" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2395" PostTypeId="2" ParentId="2386" CreationDate="2017-03-03T10:21:35.453" Score="23" Body="&lt;p&gt;One reason that Windows 3.0 was popular with software authors: it included a DOS extender, meaning that on 286 / 386 processors Windows programs could run in protected mode and access as much memory as the computer had, rather than the 640k allowed by PCDOS.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2017-03-03T10:21:35.453" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2396" PostTypeId="2" ParentId="2386" CreationDate="2017-03-03T15:30:19.803" Score="82" Body="&lt;p&gt;Stephen Kitt covers the bases well, but I think the majority of the reason relates to fact that Windows 3.0 &lt;em&gt;finally&lt;/em&gt; brought 286 protected mode execution to the masses. Even though the 80286 was first released in 1984, Windows 3.0 was the first mainstream platform that actually ran it in protected mode. That made it the first mainstream platform that could present more than 1088K (not 1024K) of address space to a single user process. This may sound like a minor technical issue, but it represents Microsoft effectively addressing a demand from the marketplace that had been only poorly addressed for 6 years prior.)&lt;/p&gt;&#xA;&lt;p&gt;To give a bit more detail, the 20-bit/1024K 'real mode' address space of the original PC was widely considered to be major limitation, even early on in the PC's life. The original design reserved the top 384K of address space for I/O devices, ROM, etc., leaving 640K of address space for RAM. One of the important software applications of the time was the spreadsheet Lotus 1-2-3, and large spreadsheets could easily hit this limit. This was particularly true when running what were known as TSR's. (There are subtleties, but In modern terms, you can think of TSR's as lightweight background processes.)&lt;/p&gt;&#xA;&lt;p&gt;In parallel with this, 1984's Macintosh release and the 1985 release of Windows 1.0 started introducing GUI's to the mainstream PC market. These added memory pressure, both in terms of the graphics processing and in terms of the fact that they made it possible to run multiple applications at the same time. (In truth, this only came later to the Mac with Switcher and then MultiFinder.)&lt;/p&gt;&#xA;&lt;p&gt;So, in the first half of the 1980's into the second half, there came to be a large demand for techniques for addressing more than 640K of RAM, and there were a few common ways to handle the problem. Some machines would let you allocate part of the top 384K over to RAM, allowing for 704K and 768K configurations, but by far the more popular approach was something called LIM EMS.&lt;/p&gt;&#xA;&lt;p&gt;LIM EMS was essentially a standard bank switching standard developed by Lotus, Intel, and Microsoft (LIM). Lotus wanted to make it possible to work with big spreadsheets and Microsoft wanted to make it possible to run more applications in real mode 20-bit Windows. What LIM would do is take 64K within the top 384K and divide it into four 16K pages. It then presented a separate multi-megabyte address space that could be mapped into those four pages. While the CPU's native address space was still 20-bit and 1024K, this provided a way to use memory operations to access more than what would normally be allowed in a 20-bit address space, and do so in a semi-standard way. Initially, LIM EMS was always implemented in the form of a hardware plugin card that contained the mapping hardware and EMS memory.&lt;/p&gt;&#xA;&lt;p&gt;The downside to LIM EMS was that 1) programs had to be specially written to use the memory and 2) it was a bit of a pain to use. Microsoft Windows (as far back as 1.0) addressed these issues at least in part through the use of a handle based memory manager.  Unlike traditional &lt;code&gt;malloc&lt;/code&gt;/&lt;code&gt;free&lt;/code&gt;, which returned a pointer, the Windows memory manager returned block handles. Developers only got the pointer to the block when the indicated to the OS that they actually wanted to use it. This let Windows do things like automatically move blocks around, including to EMS, when they were not in use. (Keep this in mind, it becomes important later on.)&lt;/p&gt;&#xA;&lt;p&gt;Of course, the real solution to the address space issue was to select a CPU that had a bigger address space. This happened in 1984 when IBM picked the 80286 for the PC AT.  The 80286 introduced a 24-bit address space, which was more than even a real-mode EMS 3.2 machine could manage... and it was native to the chip.&lt;/p&gt;&#xA;&lt;p&gt;The catch was that to get the 24-bit address space, you had to adopt 80286 protected mode, rather than real mode. Unfortunately, DOS didn't support protected mode, and protected mode changed the rules enough that it wasn't necessarily easy to make the switch. Existing applications couldn't run in protected mode, and once a 286 was in protected mode, it was difficult to get it back to real mode. Still, around this time, there were continual rumors of an Advanced DOS (aka 286-DOS or DOS 4.0) that would somehow enable protected mode operation. What this wound up being was the IBM/Microsoft joint effort - OS/2.&lt;/p&gt;&#xA;&lt;p&gt;OS/2 brought protected mode to the PC, but due to limitations of the 286, it was itself limited.  While it could multitask OS/2 applications, running a DOS application suspended all the OS/2 apps, and was subject to all the usual DOS limitations. It was also expensive, only partially complete when it shipped, and had high memory requirements. It wound up not doing very well, while the industry stayed with DOS, etc.&lt;/p&gt;&#xA;&lt;p&gt;At this point, it's worth pointing out that there are also 80386 machines. The 80386 is expensive, but it has a couple things the 286 doesn't. The most notable (at least for the late 1980's) is what is known as V86 mode. The 80386 has hardware support for running multiple-real mode processes. This is used by Windows/386 and DesqView/386 to run multiple real mode processes at the same time.  The 80386 is also powerful enough to emulate LIM EMS with its internal MMU. The 80386 is truly revolutionary. (Note, though, that even under Windows/386, the Windows environment itself runs in real mode with a 20-bit address space...)&lt;/p&gt;&#xA;&lt;p&gt;There's also Windows/286 around this time.  One of the implementation details of the 80286 is that it would actually generate physical addresses as high as 1088K-16bytes. Windows/286 allowed access to this, so-called, high memory area beyond 1MB.&lt;/p&gt;&#xA;&lt;p&gt;This answer is turning into an epic, but this is the state of affairs when Windows 3.0 is about to be released. 80286 machines have been out for 6 years and 80386 machines for 4. While there are hacks and third party solutions to use the capabilities of these machines, there's nothing that works all that well, and nothing that easily ships out of the box. It's really rather a mess.&lt;/p&gt;&#xA;&lt;p&gt;This is when a Microsoft Windows developer named David Weise figured out how to run normal, mostly unmodified Windows applications in protected mode:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/archive/blogs/larryosterman/farewell-to-one-of-the-great-ones&quot; rel=&quot;noreferrer&quot;&gt;https://docs.microsoft.com/en-us/archive/blogs/larryosterman/farewell-to-one-of-the-great-ones&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a huge win for Windows, because there finally was a cheap path for people to take their existing hardware and software, and mostly cheaply get to use the capabilities of their system. (The reason this was possible at all is that handle based memory manager I mentioned several paragraphs ago.  If using protected mode means following a different set of rules about memory usage, it turned out Windows applications were already mostly following those rules.)&lt;/p&gt;&#xA;&lt;p&gt;You also have to keep in mind that this represented a huge turning point for Microsoft. They immediately knew it would undermine OS/2 (largely useful for protected mode access) and irreparably damage its relationship with IBM. They of course did it anyway, and made a huge success out of it.&lt;/p&gt;&#xA;&lt;p&gt;As Stephen points out, there were a number of other significant and very positive changes to Windows, but I think the biggest is that it finally provided a decent answer to the memory question.&lt;/p&gt;&#xA;" OwnerUserId="4522" LastEditorUserId="4744" LastEditDate="2020-11-18T06:20:05.133" LastActivityDate="2020-11-18T06:20:05.133" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="2397" PostTypeId="2" ParentId="778" CreationDate="2017-03-03T19:58:08.057" Score="2" Body="&lt;p&gt;I can answer about Russia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For criminal liability the damage to the copyright holder should be sufficient (100 000 rubles, somewhat less than $2000 currently). The copyright holder should prove damages which would be calculated from the retail price of the software. If he does not sell the same or similar software, it would be very difficult to prove damages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For administrative liability (misdemeanor) the deed should be done by a legal entity (firm) of a state official and with intent of gaining income. So, this does not apply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For civil liability, the holder also has to prove damage. In worst case the damage would not be greater than a price of a single copy. He can request confiscation of any copies though via court but only in the case you refuse to give up them on his request before the court case opened (pre-judical conflict resolution procedure is a must).&lt;/p&gt;&#xA;" OwnerUserId="4552" LastEditorUserId="4552" LastEditDate="2017-03-04T01:47:15.470" LastActivityDate="2017-03-04T01:47:15.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2398" PostTypeId="2" ParentId="2386" CreationDate="2017-03-04T02:53:14.350" Score="9" Body="&lt;p&gt;&lt;strong&gt;TL;DR: The success of Microsoft Office, proprietary data formats and the ensuing marketing strategies thereof, undercutting the competition, &lt;s&gt;collusion&lt;/s&gt; cooperation with OEMs to lease MS software preinstalled on their products, and probably most importantly: landing deals with IBM and their longstanding contracts with them&lt;/strong&gt; while retaining the ownership of certain IPs giving them market control over products that they sold to IBM and other companies (&lt;em&gt;&quot;Merchandising!&quot;&lt;/em&gt;), and to a lessor extent: ease of use via the company who first brought us GUIs.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Windows is what most early PC computers came with, is what you needed installed to run other Microsoft products, and historically is what other users needed to also be running to facilitate the useful exchange of documents which were written with their software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&quot;This program requires Microsoft Windows to run.&quot;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was nothing sudden about Microsoft's &quot;aggressive marketing&quot; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/United_States_v._Microsoft_Corp.&quot; rel=&quot;noreferrer&quot;&gt;predatory strategies&lt;/a&gt; (&lt;em&gt;United States v. Microsoft Corp.&lt;/em&gt;) that they use(d)  leading to their domination of the market. Windows 3.0 and Microsoft's success as a whole is indeed a culmination of earlier factors. This answer focuses on &lt;strong&gt;&lt;em&gt;why&lt;/em&gt; everyone had it, as opposed to &lt;em&gt;what&lt;/em&gt;&lt;/strong&gt; made it distinctly better than other operating systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The confluence was the fortunate event of the explosion of the PC market, where OEMs began to sell computers with preinstalled operating systems, which &lt;strong&gt;due to Microsoft's marketing strategies&lt;/strong&gt; was largely corned by versions of DOS and Windows. The company's perpetual existence and continued success, and the budding PC market in general, owes its greatest dues almost entirely to contracts that they and other companies had with IBM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IMO, the was no &quot;relative obscurity&quot; of &lt;s&gt;Windows&lt;/s&gt; Microsoft software in the years previous - they held an iron fist over the entire PC industry until only very recently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;One year prior to the release of W3.0, they released &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Office&quot; rel=&quot;noreferrer&quot;&gt;Microsoft Office&lt;/a&gt;, which today is used by approximately one seventh of the world's population, and at the time of its initial release required a Windows operating system to run.&lt;/strong&gt; [citation needed] And at the very least, until 2007, required recipients of Office data to be running Office to be read.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Microsoft Office prior to Office 2007 used proprietary file formats based on the OLE Compound File Binary Format. This forced users who share data to adopt the same software platform.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(What I cannot find is &lt;strong&gt;the number of W3.0 boxed copies sold to end users versus all the licenses of it granted to OEMs&lt;/strong&gt;, though I suspect the latter to dwarf the former - I've never even seen a boxed copy of W3.0, and it's the only version of Windows that I've never installed save for Vista and W10)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;DOS (Disk Operating System) was the operating system that brought the company its first real success. On August 12, 1981, after negotiations with Digital Research failed, &lt;strong&gt;IBM awarded a contract to Microsoft&lt;/strong&gt; to provide a version of the CP/M operating system for use in its new IBM Personal Computer (PC). Microsoft purchased a CP/M clone OS called 86-DOS (originally known as QDOS for &quot;Quick and Dirty Operating System&quot;) from Seattle Computer Products, which IBM renamed to PC-DOS. Around 1983, &lt;strong&gt;Microsoft collaborated with several companies&lt;/strong&gt; to create a home computer system, MSX, which contained its own version of the DOS operating system, entitled MSX-DOS; this became relatively popular in Japan, Europe and South America. After Columbia Data Products successfully cloned the IBM BIOS, quickly followed by Eagle Computer and Compaq, PCs manufactured by other companies flooded the market.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Its arrangement with IBM allowed Microsoft to have control of its own QDOS derivative, MS-DOS, and through aggressive marketing of the operating system to other manufacturers of PCs, Microsoft became one of the major software vendors in the home computer industry.&lt;/strong&gt; Microsoft continued to expand its product line in other markets with the release of the Microsoft Mouse on May 2, 1983. Microsoft Press, a book publishing division, debuted on July 11 the same year with two titles: &lt;em&gt;Exploring the IBM PCjr Home Computer&lt;/em&gt;, by Peter Norton; and &lt;em&gt;The Apple Macintosh Book&lt;/em&gt;, by Cary Lu.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In August 1985, &lt;strong&gt;Microsoft and IBM partnered&lt;/strong&gt; in the development of a different operating system called OS/2. On November 20, 1985, Microsoft released its first retail version of Microsoft Windows, originally a graphical layer on top of its MS-DOS operating system. In 1987, &lt;strong&gt;Microsoft released its first version of OS/2 to original equipment manufacturers&lt;/strong&gt; (OEMs).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;In 1989, Microsoft introduced its flagship office software suite, Microsoft Office, a bundle of separate office productivity applications, such as Microsoft Word and Microsoft Excel. On May 22, 1990 Microsoft launched Windows 3.0,&lt;/strong&gt; a new version of its operating system boasting features such as streamlined user interface graphics and improved protected mode capability for the Intel 386 processor; it sold over 100,000 copies in two weeks. Windows generated more revenue for Microsoft than OS/2, and the company decided to move more resources from OS/2 to Windows. In the ensuing years, the popularity of OS/2 declined, and Windows quickly became the favored PC platform.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;During the transition from MS-DOS to Windows, &lt;strong&gt;the success of Microsoft Office allowed the company to outpace its competitors&lt;/strong&gt; in applications software, such as WordPerfect and Lotus 1-2-3. Eventually, Microsoft Office became the dominant business suite, with a market share far exceeding that of its competitors.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;– &lt;em&gt;Microsoft&lt;/em&gt;, &lt;a href=&quot;http://www.newworldencyclopedia.org/entry/Microsoft&quot; rel=&quot;noreferrer&quot;&gt;newworldencyclopedia.org&lt;/a&gt; (headers and citations removed, emphasis added)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Undercut the Competition&lt;/strong&gt; (and unnecessarily* incorporate planned obsolesce under the shroud of the prevention of software piracy)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I further suspect that almost all versions of Windows were or still are offered to OEMs at a(n optional cost) loss, just like Microsoft's game consoles, as you could either buy a free standing copy of their operating systems for a few hundred dollars, or basically get a free computer at the same or less price point by buying a computer that came with it preinstalled. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aside from software piracy, that's why certain versions of Windows don't like it when you drastically change the hardware in your computer. How would they sell you &quot;The White Album&quot; again if it just still worked when you clicked play (or in terms of any given OS, simply migrated or installed it) on a new device?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;[*]&lt;/strong&gt; Unless you are a gamer or a designer using graphically intensive programs, there hasn't been a &lt;em&gt;need&lt;/em&gt; for a &quot;better&quot; computer or operating system for &lt;em&gt;at least&lt;/em&gt; the last 20 years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Functionally, from a UI standpoint, there isn't much difference between Windows 3.0 and Windows 10. Both have a point-and-click GUI. The next step IMO (which I thought would have been motion control, like the Wii) is likely to be thought or eye controlled. So until we invent a better mouse, &lt;strong&gt;Microsoft is the company who got it right first and continues to do so&lt;/strong&gt;, offering us the tools (we don't really need) to satisfy our own 'two-foot-ides'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short in a single word, be it software and/or hardware: &lt;strong&gt;&lt;em&gt;bundling&lt;/em&gt;&lt;/strong&gt;. An extent to which Apple has taken to a new level with their proprietary software and hardware and why their market share has increased so much in the recent past: they took a page out of Microsoft's book. The same one Gorge Lucas was so apt to read: &lt;strong&gt;retain the rights to your IP&lt;/strong&gt;, become a company giant, and use that power that you now have to enslave the universe through keen marketing of the merchandise that you sell, but somehow still own, because your lawyers are awesome.&lt;/p&gt;&#xA;" OwnerUserId="4220" LastActivityDate="2017-03-04T02:53:14.350" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="2399" PostTypeId="1" AcceptedAnswerId="2401" CreationDate="2017-03-04T03:34:33.243" Score="45" ViewCount="5198" Body="&lt;p&gt;In the 1980s, the popular BBC science fiction series Doctor Who used some real computer system(s) to display impressive (for the time, OK, maybe not!) graphics. They actually ran the software real-time and simply filmed the output on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the time they filmed the screen while the program was already running, but on a couple of occasions they showed the source code briefly before the program was run, presumably because it made the story look more science-fictiony!&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Source code&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dIITv.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dIITv.jpg&quot; alt=&quot;Police spaceship tracking software&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;TA&amp;amp;7A&#xA;  360.AP:LDX&amp;amp;78:LDY#0:.AD:LDAM%,X:STA(&amp;amp;7&#xA;6),Y:CLC:TYA:ADC#8:TAY:DEX:BNEAD&#xA;  370CLC:LDA&amp;amp;76:ADC#1:STA&amp;amp;76:LDA&amp;amp;77;ADC#&#xA;0:STA&amp;amp;77&#xA;  380DEC&amp;amp;7B:BNEAQ:CLC:LDA&amp;amp;74:ADC&amp;amp;82::STA&#xA;&amp;amp;74:STA&amp;amp;76:LDA&amp;amp;75:ADC&amp;amp;83:STA&amp;amp;75:STA&amp;amp;77:L&#xA;DA#8:STA&amp;amp;7B:.AQ:DEC&amp;amp;7A:BNEAP&#xA;  390CLC:LDA&amp;amp;72:ADC#1:STA&amp;amp;72:LDA&amp;amp;73:ADC#&#xA;0:STA&amp;amp;73&#xA;  400DEC&amp;amp;7F:BEQAZ:JMPAA:.AZ:RTS:]:NEXT:E&#xA;NDPROC&#xA;  410DEF PROCtitle&#xA;  420REPEATUNTILINKEY(0)=32&#xA;  455Xsize=4:Ysize=4:YOUR$=&quot;_______&quot;:PRI&#xA;NTTAB(6,7);:PROCdisplay&#xA;  460Xsize=4:Ysize=4:YOUR$=&quot;X.V.773&quot;:PRI&#xA;NTTAB(6,6);:PROCdisplay&#xA;  461REPEATUNTILINKEY(0)=32&#xA;  465Xsize=2:Yzise=2:YOUR$=&quot;LAST LOCATIO&#xA;N: 27|43&quot;:PRINTTAB(0,14);&quot;PROCdisplay&#xA;  466REPEATUNTILINKEY(0)=32&#xA;  467Xsize=2:Ysize=2:YOUR$=&quot;LAST CONTACT&#xA; : 12-99&quot;:PRINTTAB(0,20);:PROCdisplay&#xA;  470REPEATUNTILINKEY(0)=32&#xA;  475Xsize=2:Ysize=2:YOUR$=&quot;____________&#xA;______&quot;:PRINTTAB(2,29);:PROCdisplay&#xA;  480Xsize=2:Ysize=2:YOUR$=&quot;BELIEVED DES&#xA;TROYED&quot;:PRINTTAB(2,28);:PROCdisplay&#xA;  520FORW=0TO 4E3:NEXT:&#xA;  610ENDPROC&#xA;&amp;gt;RUN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3&gt;Output&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xTGE4.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xTGE4.png&quot; alt=&quot;Program after finishing&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amusingly, the command prompt is visible at the end of the final underline!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stories that feature running software on '80s computers (probably an incomplete list):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1982 - Castrovalva (filmed late 1981)&lt;/li&gt;&#xA;&lt;li&gt;1983 - The Five Doctors&lt;/li&gt;&#xA;&lt;li&gt;1984 - The Twin Dilemma (pictured above)&lt;/li&gt;&#xA;&lt;li&gt;1985 - Attack of the Cybermen (filmed late 1984)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Although the computers used were not necessarily the same, I would be interested in knowing what system is pictured below. It's using some combination of BASIC and assembly language that I don't recognise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things I have been able to work out:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The screen is 40 characters by 32 characters.&lt;/li&gt;&#xA;&lt;li&gt;Lines 350-400 (and probably earlier) contain assembly language&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It appears that the assembly is embedded into the BASIC program and wrapped in &lt;code&gt;[&lt;/code&gt; and &lt;code&gt;]&lt;/code&gt; characters, but it's hard to tell from a single screenshot&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Lines 410-610 contain a full procedure, which is the &quot;controller&quot; of the code (in MVC terminology)&lt;/li&gt;&#xA;&lt;li&gt;The underline is printed before and one line below the actual text, presumably to prevent the text from being deleted by the blank space above the underline characters!&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Xsize&lt;/code&gt; and &lt;code&gt;Ysize&lt;/code&gt; are how much to stretch the text in in each direction and &lt;code&gt;YOUR$&lt;/code&gt; (pronounced &quot;your string&quot;) contains the text to display&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;PROCdisplay&lt;/code&gt; is a &lt;strong&gt;proc&lt;/strong&gt;edure that &lt;strong&gt;display&lt;/strong&gt;s &lt;strong&gt;your string&lt;/strong&gt; at the current location with &lt;strong&gt;x size&lt;/strong&gt; and &lt;strong&gt;y size&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;PRINTTAB&lt;/code&gt; (probably just &lt;code&gt;PRINT TAB&lt;/code&gt; with an optional space removed and not a separate command) places the text cursor at the position specified on the screen&lt;/li&gt;&#xA;&lt;li&gt;The coordinate system starts at the bottom left, and works upwards and to the right&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This means you can &lt;code&gt;PRINT&lt;/code&gt; &quot;Hello &quot; normally, then immediately &lt;code&gt;PROCdisplay&lt;/code&gt; &quot;Fred&quot; at twice the size without having to reposition the text cursor&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;REPEATUNTILINKEY(0)=32&lt;/code&gt; (&lt;code&gt;REPEAT UNTIL INKEY(0) = 32&lt;/code&gt;) polls the keyboard until the [Space] is pressed, at which point the return value of &lt;code&gt;INKEY(0)&lt;/code&gt; is ASCII 32 for space&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The way &lt;code&gt;INKEY(0)&lt;/code&gt; works is exactly the same as Locomotive BASIC on the Amstrad CPC series but the rest of the grammar is incompatible&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Integers, and possibly floating point numbers, may be typed in scientific notation. On line 520 &lt;code&gt;4E3&lt;/code&gt; is &lt;code&gt;4000&lt;/code&gt; for a saving of one character!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What is this computer, and what BASIC and assembly language is it? All transcription errors are my own!&lt;/p&gt;&#xA;" OwnerUserId="2067" LastEditorUserId="2067" LastEditDate="2017-03-05T02:04:44.537" LastActivityDate="2020-05-03T20:05:22.810" Title="What computer system is this from 1984 Doctor Who?" Tags="&lt;assembly&gt;&lt;basic&gt;&lt;identify-this-computer&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2400" PostTypeId="2" ParentId="2361" CreationDate="2017-03-04T03:36:07.983" Score="18" Body="&lt;p&gt;My first answer attempts to answer all the OP's questions without going too deep into the hardware details. Since posting that answer, I have had the pleasure of corresponding for several days with Bil Herd, the lead designer of the C128 project. In addition to what I have learned from him, I have done some additional research on my own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This answer focuses on the hardware complexities which limited CP/M's effectiveness on the C128. It won't shy away from displaying system diagrams, timing diagrams, and etc. If you don't care about this level of detail, cool, and you have been warned. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the System Diagram, taken from page 3 of the &lt;a href=&quot;http://zetaweb.org/web/manuals/C128%20Service%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;C128 Service Manual&lt;/a&gt; (&lt;em&gt;C128SM&lt;/em&gt; - click to expand):&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ZRrhU.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZRrhU.png&quot; alt=&quot;C128 System Diagram&quot;&gt;&lt;/a&gt;&#xA;Remember the big deal I made of the 80-column 8563 Video Display Controller in my first answer? That's the tiny bit in the lower left corner. It is almost completely isolated from the rest of the machine, except for the address and data buses. That is why communication with the 80-column video RAM takes place via two registers of the 8563. The 8563 has 37 registers total, allowing control of number of characters per line, number of lines, cursor position, video synch, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might be thinking, &quot;There is a lot going on in that diagram.&quot; Yes. The C128 is essentially 4 computers in one box:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;a C64 with almost total compatibility, with the 8502 (upgraded 6502) running at 1 MHz and driving the 40-column VIC display&lt;/li&gt;&#xA;&lt;li&gt;a low-res C128 driving the 40-column display and running the 8502 at 1 MHz&lt;/li&gt;&#xA;&lt;li&gt;a high-res C128 driving the 80-column display and running the 8502 at 2 MHz&lt;/li&gt;&#xA;&lt;li&gt;a Z80A computer for running the CP/M operating system. It runs at 4 MHz, &quot;half the time&quot;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&quot;Huh?&quot; A diagram is in order, from page 8 of the &lt;em&gt;C128SM&lt;/em&gt;:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Pnx4W.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Pnx4W.png&quot; alt=&quot;Z-80 Bus Timing Diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Okay, I sort of get it. The Z80 clock is only running half the time. I see it, but that does not explain &lt;strong&gt;why?&lt;/strong&gt;.&quot; The &lt;em&gt;system clock&lt;/em&gt; is a 1 MHz clock provided by the VIC chip. In modes #1 and #2 it lets the 8502 run half the time, and allows itself half the time to update 40 column video RAM, move sprites, etc. One nice thing about 6502-family chips is that turning over half their time to something else costs them nothing, so they share with other stuff on the bus easily. In mode #3 it runs at 2 MHz and drives the 8502 at 2 MHz. Since the 40-column display is not active, the VIC need not worry about sprites and ignores the 40-column video RAM. Note, though, that this 2 MHz mode would not help the Z80A; at best it would simply force that chip into a semi-even 2 MHz mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the kicker, why the VIC must keep running even when 40-column video is not active (from pg.33 of same manual):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The VIC chip contains a register which allows the C128 system to operate at 2 MHz instead of the standard 1 MHz of the C64. This operating speed, however, disallows the use of the VIC chip as a display processor. This bit is bit zero in register 48, and setting this bit enables 2 MHz mode. During 2 MHz operation, the VIC is disabled as a video processor. The µProcessor spends the cycle full time on the bus, &lt;strong&gt;while VIC is responsible only for dynamic RAM refresh and DMA arbitration&lt;/strong&gt;. Clearing this bit will bring back 1 MHz operation and allow the use of the VIC as a video display chip. During refresh and I/O access, the system clock is forced to 1 MHz regardless of the setting of this bit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(emphasis mine)&lt;br&gt;&#xA;Rephrasing, if the VIC were completely shut off, the system's RAM would not be refreshed, and memory data would degrade. Also the VIC is forced to 1 MHz mode during refresh and I/O. Thus it makes no sense to use the 2 MHz VIC mode with CP/M because nothing is gained in the first place, and it would keep having to switch back to 1 MHz anyway. (The 8563 refreshes its 80-column memory asynchronously with everything else.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is even another reason for keeping the VIC alive during CP/M. Look again at the C128 System Diagram, focusing on the upper right corner. See the little box labeled &lt;strong&gt;C128 Extended Keyboard&lt;/strong&gt;? What is that about?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TMsi1.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TMsi1.jpg&quot; alt=&quot;C128 keyboard with C64 inset&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine using a business application with just the C64 keys. To get the rest, the VIC needs to be active. Well, &quot;the rest&quot; except the &lt;strong&gt;CAPS LOCK&lt;/strong&gt; at the top of the keyboard. It operates as a simple switch, separate from the 2-dimensional keyboard matrix, and its value is fed directly to the 8502 CPU. That means the Z80A cannot read that one key directly. However, since normal CP/M I/O is indirect and utilizes the 8502 and its BIOS, that key value is available. Only a pure Z80A routine lacks access. However, such a routine would be affected by the value of the separate &lt;strong&gt;SHFT LOCK&lt;/strong&gt; key.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;The Display Bottleneck&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Writing a character string to the 80-column screen from CP/M involves multiple layers of code:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;application layer - executes a printf() or other function to display a string&lt;/li&gt;&#xA;&lt;li&gt;BDOS layer - device-independent I/O handling for CP/M. BDOS can handle a full string, but must call steps 3-8 character by character.&lt;/li&gt;&#xA;&lt;li&gt;BIOS layer - sets up &quot;memory mailboxes&quot; so 8502 CPU can know what to do&lt;/li&gt;&#xA;&lt;li&gt;Z80A turns over control to 8502&lt;/li&gt;&#xA;&lt;li&gt;8502 obtains command from mailbox and readies itself to make BIOS85 call&lt;/li&gt;&#xA;&lt;li&gt;80-column screen-write call executes.&lt;/li&gt;&#xA;&lt;li&gt;8502 returns control to Z80A&lt;/li&gt;&#xA;&lt;li&gt;BIOS returns to BDOS&lt;/li&gt;&#xA;&lt;li&gt;BDOS sends next character to step 3 or returns to application code&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(Note that a native 8502 application would avoid most of these steps.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets look at the heart of step #6 as an 8502 disassembly, beginning at location 0181F (not the actual BIOS85 code, just an example of what it needs to do).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0181F  A2 1F     LDX #$lF  ; 8563 R/W data register number  &#xA;01821  8E 00 D6  STX $D600 ; location of 8563 command register  &#xA;01824  2C 00 D6  BIT $D600 ; check high bit of command register value   &#xA;01827  10 FB     BPL $1824 ; loop until clear  &#xA;01829  8D 01 D6  STA $D601 ; (8563 data register) write character to screen  &#xA;0182C  60        RTS       ; return  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;All&lt;/strong&gt; 80-column screen communication occurs through the two 8563 registers, mapped to memory locations $D600 and $D601. Figure 10-2 illustrates this, from page 295 of the &lt;a href=&quot;http://www.pagetable.com/docs/Commodore%20128%20Programmer&amp;#39;s%20Reference%20Guide.pdf&quot; rel=&quot;noreferrer&quot;&gt;C128 Programmer's Reference Guide&lt;/a&gt;.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/x6GRd.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/x6GRd.png&quot; alt=&quot;8563 Mapped Registers&quot;&gt;&lt;/a&gt;&#xA;$D600 tells which of the thirty-seven 8563 registers you wish to read or write, and $D601 is the location to read or write the data. Since the 8563 is often occupied with its own memory and driving the 80-column screen, it can take time to handle the $D601 value. That's why you must always check the $D600 STATUS bit before reading from or writing to $D601. One useful feature of writing to register 31 (data register) is that the screen location auto-increments after the write. You need not manually increment it.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Don't assume the 8563 has a poor design. Normal (non-CP/M) 80-column C128 programs run with no noticeable delay in screen writes. The CP/M bottleneck is not the chip itself; it is the many layers of code through which screen writes must undergo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is one busy chip; everything else in this answer relates to its &lt;em&gt;digital&lt;/em&gt; functionality. Don't forget that it drives the &lt;em&gt;video&lt;/em&gt; as well, converting bytes in memory to a 4-channel per pixel video signal (RGBI). Most of what it is doing is invisible to the 8502/Z80A side of the board. If set to its normal 80x25 screen, that is driving:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;80*9 pixels per scan line&lt;/li&gt;&#xA;&lt;li&gt;25*9 scan lines (each 8x8 character can be embedded in a larger frame)&lt;/li&gt;&#xA;&lt;li&gt;60 screen refreshes per second&lt;/li&gt;&#xA;&lt;li&gt;= 720 * 225 * 60 = 9.72 million pixels per second&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Time is also allocated for horizontal and vertical synchronizations. Modify the synch values, and it can generate screens of more than 88 characters by 30 lines. Turn on interlace, and you can even double the number of scan lines. That's the &lt;em&gt;output&lt;/em&gt; end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;em&gt;video RAM&lt;/em&gt; it must read the 80 character codes per line, read the associated byte of attributes for each character (color bits for (red, green, blue, intensity), as well as modifier bits for (alternate character set, reverse, underline, blink)). Finally it has to read the character definition RAM so that it knows what each character looks like. The 8563 character RAM is loaded during system boot-up, and both of its 256-element sets of 8x8 characters can be redefined by application programs. Internally I'm sure that some of the data is buffered within the 8563 (such as the current and maybe next character lines of data), but I don't know. The point is, no matter what's going on with the I/O ports at $D600 and $D601, the 8563 is extremely busy doing its job of displaying the screen. One more thing &amp;ndash; because neither C128 BASIC 7 nor CP/M support it, few people realize the 8563 can also operate in a 2-color bit-mapped mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... not a poor design at all. I'll end with showing the 8563 register map to give you an idea of all the things this chip is handling. This is from page 37 of the &lt;em&gt;C128SM&lt;/em&gt;.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/82fHN.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/82fHN.png&quot; alt=&quot;8563 on-chip registers&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-03-07T01:02:02.313" LastActivityDate="2017-03-07T01:02:02.313" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="2401" PostTypeId="2" ParentId="2399" CreationDate="2017-03-04T03:43:48.053" Score="78" Body="&lt;p&gt;This is an example of &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_BASIC&quot; rel=&quot;noreferrer&quot;&gt;BBC BASIC&lt;/a&gt; with &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_BASIC#/media/File:BBC_micro_assembly_listing.jpg&quot; rel=&quot;noreferrer&quot;&gt;inline (6502) assembler code&lt;/a&gt;. The computer in use would have been a &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_Micro&quot; rel=&quot;noreferrer&quot;&gt;BBC Microcomputer&lt;/a&gt;, manufactured by &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Computers&quot; rel=&quot;noreferrer&quot;&gt;Acorn Computers Ltd&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The display was probably a studio monitor of some sort. These could be driven directly using either the RGB output or the composite video output of the microcomputer. It is likely that the actual BBC Micro was not shown in the programmes but, nevertheless, this is what would have been used for generating the display signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BBC technicians had a lot of influence on the specification of the BBC Micro, since they wanted to make use of the machines in their studios and labs. The machine wasn't just designed for schools and colleges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is likely that the BBC Micro would have had a &lt;a href=&quot;https://en.wikipedia.org/wiki/Genlock&quot; rel=&quot;noreferrer&quot;&gt;Genlock&lt;/a&gt; board fitted to prevent strobing when the monitor was filmed by a television camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both the BBC Micro and BBC Basic were designed by &lt;a href=&quot;https://en.wikipedia.org/wiki/Sophie_Wilson&quot; rel=&quot;noreferrer&quot;&gt;Sophie Wilson&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3278" LastEditorUserId="439" LastEditDate="2018-01-01T14:51:07.193" LastActivityDate="2018-01-01T14:51:07.193" CommentCount="17" ContentLicense="CC BY-SA 3.0" />
  <row Id="2402" PostTypeId="1" CreationDate="2017-03-04T06:43:51.973" Score="34" ViewCount="1614" Body="&lt;p&gt;When requirements for the &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_Micro&quot; rel=&quot;noreferrer&quot;&gt;BBC Microcomputer&lt;/a&gt; were developed as part of the &lt;a href=&quot;http://www.retro-kit.co.uk/page.cfm/content/BBC-Computer-Literacy-Project&quot; rel=&quot;noreferrer&quot;&gt;BBC Computer Literacy Project&lt;/a&gt;, an &lt;a href=&quot;http://stardot.org.uk/forums/viewtopic.php?t=11935&quot; rel=&quot;noreferrer&quot;&gt;outline specification&lt;/a&gt; was created by an independent consultant, the late &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Coll&quot; rel=&quot;noreferrer&quot;&gt;John Coll&lt;/a&gt;. This specification was then fleshed out by the BBC and given to manufacturers who were interested in tendering for the project. &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Computers&quot; rel=&quot;noreferrer&quot;&gt;Acorn Computers&lt;/a&gt; subsequently won the contract with their innovative design, and the rest, as they say, is history.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, whilst many of the machine's features were specified either by Acorn (for their own needs) or by the BBC (as required for the literacy project), some features were specified by BBC engineers entirely for their own requirements. One infamous (and well-documented) example of this was the requirement for linear power supplies to prevent (supposed) interference with broadcast equipment when used in television studios. Since the linear PSUs ran very hot, this requirement was reluctantly dropped by the BBC, and switched-mode PSUs were subsequently used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember reading years ago that other requirements were specified by BBC engineers, but I cannot remember where I read it or what they were. One fairly obvious facility would have been the possibility of providing an external Genlock signal (via an add-in board), so that the video output could be synced with the studio equipment, and such boards were manufactured by various companies. However, I would love to know if any other requirements were specified by BBC engineers for their own purposes.&lt;/p&gt;&#xA;" OwnerUserId="3278" LastEditorUserId="10566" LastEditDate="2019-04-09T11:04:01.650" LastActivityDate="2019-04-09T11:04:01.650" Title="What BBC Microcomputer features were requested specifically by BBC engineers?" Tags="&lt;bbc-micro&gt;&lt;acorn&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2403" PostTypeId="5" CreationDate="2017-03-04T08:13:29.917" Score="0" Body="" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-03-04T08:13:29.917" LastActivityDate="2017-03-04T08:13:29.917" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2404" PostTypeId="4" CreationDate="2017-03-04T08:13:29.917" Score="0" Body="For questions about the IBM-compatible Tandy 1000 line of home computers." OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-03-04T08:13:29.917" LastActivityDate="2017-03-04T08:13:29.917" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2405" PostTypeId="1" CreationDate="2017-03-04T14:09:46.650" Score="12" ViewCount="4532" Body="&lt;p&gt;I have a Seagate ST-225 20MB hard drive. It used a ST-412 MFM (Modified Frequency Modulation) controller which unfortunately went to the great bit bucket some time ago.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to get this hard drive working with a modern PC? My thoughts are to either find a ST-412 MFM controller for ISA and hope I can find some drivers that work in Windows XP or Linux or to try to get or make some sort of adapter bridge to SATA, PATA/IDE/ATAPI or USB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that there are ESDI-&gt;SCSI adapters that could be chained to a SCSI-&gt;Something Modern adapter, but AFAIK ST-412 is an older protocol that is very similar to but not quite compatible with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have any need to retrieve/salvage data from this drive. I'm more interested in the novelty of getting such a disk working again and astonishing little children with the fixed storage media of their ancestors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume for the sake of this question that the drive itself is working - the scope of the question is how to interface it.&lt;/p&gt;&#xA;" OwnerUserId="3423" LastEditorUserId="3423" LastEditDate="2017-03-04T15:45:05.760" LastActivityDate="2020-11-16T02:30:52.533" Title="How can a ST-412 MFM hard drive be integrated with a modern PC?" Tags="&lt;hardware&gt;&lt;hard-disk&gt;&lt;old-hardware-adaptation&gt;" AnswerCount="4" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2406" PostTypeId="1" AcceptedAnswerId="2407" CreationDate="2017-03-05T01:50:56.133" Score="101" ViewCount="22706" Body="&lt;p&gt;In the 1980's at primary school we saw MS-DOS and DR DOS competing before Windows 3.1 and subsequent releases took over that space.&lt;/p&gt;&#xA;&lt;p&gt;At home we had Apple II's which booted up to a BASIC prompt. On these we ran ProDOS and CP/M.&lt;/p&gt;&#xA;&lt;p&gt;30 years later my kids hardly know what a disk is. That made me think &amp;quot;Why was it called a 'disk' operating system? Was it to contrast it with a 'ROM' based operating system? (You never really heard of a 'ROS').&lt;/p&gt;&#xA;&lt;p&gt;My question is: &lt;strong&gt;Does &amp;quot;Disk Operating System&amp;quot; imply that there was a &amp;quot;non-disk&amp;quot; Operating System?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="3500" LastEditorUserId="15334" LastEditDate="2021-05-25T17:18:28.100" LastActivityDate="2021-05-25T17:18:28.100" Title="Does &quot;Disk Operating System&quot; imply that there was a &quot;non-disk&quot; Operating System?" Tags="&lt;operating-system&gt;&lt;terminology&gt;" AnswerCount="16" CommentCount="14" FavoriteCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="2407" PostTypeId="2" ParentId="2406" CreationDate="2017-03-05T03:15:32.953" Score="103" Body="&lt;p&gt;The term &quot;Disk Operating System&quot;, or commonly &quot;DOS&quot;, was used in the early days of personal computing to distinguish operating systems that also contained software for supporting disk devices, since not all of them did. The DOS software could access blocks stored on disk, that were organized into files, and there was &quot;filesystem&quot; software included for managing the collection of files on the disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term does not imply that the DOS software itself &lt;strong&gt;had to be loaded from disk&lt;/strong&gt;. Several popular systems included the DOS software in ROM in the microcomputer, or even in the disk drive itself, as was the case with Commodore disk drives and CBM DOS. Other DOS software, like ProDOS and MS-DOS, did load from disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, yes, operating systems lacking software support for disk devices would be called simply &quot;OS&quot; and not &quot;DOS&quot;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-03-05T03:15:32.953" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2408" PostTypeId="2" ParentId="2406" CreationDate="2017-03-05T04:01:35.740" Score="9" Body="&lt;p&gt;Small single-user computers were typically a single task. They also had limited memory, so the most that their operating systems could do was manage I/O. As most of their function was dedicated to disk filing and maybe a little terminal/printer I/O, they were primarily &lt;strong&gt;disk&lt;/strong&gt; operating systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Large computer systems, on the other hand, had functions to manage multiple users, perform memory management, job accounting and network functions. Disk I/O was a relatively small and low-level part of their operating systems. Consequently, a DOS was a minimal shell over the small machine's hardware I/O, whereas a full OS was much larger and abstracted away from hardware.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-03-05T04:01:35.740" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2409" PostTypeId="2" ParentId="2406" CreationDate="2017-03-05T06:39:50.130" Score="9" Body="&lt;p&gt;I think it is fair to say that &lt;strong&gt;Disk Operating System&lt;/strong&gt; implies an OS that talks to disk in the commonly perceived environment of files, file sizes, directory(ies), time stamps, open(), close(), read(), write(), etc.  &lt;strong&gt;Operating System&lt;/strong&gt; is neutral on the subject of whether or not there is a disk. Many might group them with devices that have no large, native storage, such as many classic PDAs, or that used cassette as the primary storage medium. As the question implied, we have sort of moved beyond the idea of DOS. Yes, Windows, OS X, and Linux can all talk to disk (HDD and/or SSD), but in the networked world, that is a feature we no longer really think about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But something else exists. Classic FORTH broke all the perceived rules. Most implementations had access to disk. But no one referred to it as a DOS. Heck, most people would not even recognize it as an OS, even if it allowed a full, interactive, multi-user, (co-operative) multi-tasking environment in 64 kbytes of RAM with an 8-bit processor.  Even if the OS was indistinguishable from the language. Or the application(s). Or the development environment. You had the hardware and you had FORTH, and that's all there was. If you were operating single-user, you had 100% control of everything, all the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is, even without files, directories, or time stamps, it was an OS that gave R/W access to disk. At a high level, just four FORTH words (keywords, functions, whatever term you favor) were used to interact with the disk&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;BLOCK (n .. addr): given the block number n, read it into memory (if not already present in one of the available buffers) and return the address of the first byte.&lt;/li&gt;&#xA;&lt;li&gt;UPDATE : mark the most recently used BLOCK as needing to be written back to disk before it is over-written&lt;/li&gt;&#xA;&lt;li&gt;SAVE-BUFFERS : immediately write all updated blocks (if any) back to disk&lt;/li&gt;&#xA;&lt;li&gt;FLUSH : perform SAVE-BUFFERS and force re-read of any block, even if it is still present in memory&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There were other words too, both higher and lower level, but those were at the heart of this operating system thingy that talked to disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll add that most modern FORTHs cast away their operating system nature and operate as simply one application among many under the &quot;real&quot; OS.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-03-05T19:38:01.173" LastActivityDate="2017-03-05T19:38:01.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2410" PostTypeId="2" ParentId="2406" CreationDate="2017-03-05T06:54:55.097" Score="74" Body="&lt;p&gt;It doesn't imply that it's the &lt;em&gt;disk&lt;/em&gt; operating system so much as it implies that it's the &lt;em&gt;disk-operating&lt;/em&gt; system. You could boot an Apple II from ROM, enter and run BASIC programs, load programs from cassette, and basically do whatever an Apple II can do, but without DOS there was no way to access files on disk. Apple DOS didn't really do any of the features of a modern &quot;operating system&quot; (which were either built into ROM or entirely nonexistent), but what it did do was provide the routines for accessing disk files and directories, thus disk operating system. The same can be said of Atari DOS, CBM DOS, TRSDOS, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although MS-DOS isn't &lt;em&gt;entirely&lt;/em&gt; the same, to some extent it is. The earliest IBM PCs &lt;em&gt;did&lt;/em&gt; come with BASIC in ROM (called &quot;IBM Personal Computer Basic&quot; on the copyright screen, but commonly known as &quot;Cassette Basic&quot; to differentiate it from &quot;Disk BASIC&quot; which ran on DOS), and the BIOS ROM provided the basic facilities of keyboard, screen, printer, etc. So the most important service that MS-DOS added to that was the ability to read and write files from disk, and execute programs on disk. It also added a command shell (COMMAND.COM) that was the most common way of interacting with the computer, rather than BASIC. When later PC models eliminated ROM BASIC, DOS became pretty much the only way to boot and use the machine at all (unlike most 8-bit machines).&lt;/p&gt;&#xA;" OwnerUserId="336" LastEditorUserId="336" LastEditDate="2020-06-03T17:21:11.550" LastActivityDate="2020-06-03T17:21:11.550" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="2411" PostTypeId="2" ParentId="2406" CreationDate="2017-03-05T13:12:32.533" Score="18" Body="&lt;p&gt;In the personal/home computer space, the usual model was that the machine shipped with built in BASIC and the ability to save and load data from an attached cassette tape. This includes the original IBM PC, which had BASIC in ROM, as well as a specific cassette port that included a relay for controlling the cassette motor. BASIC itself included a &lt;code&gt;MOTOR&lt;/code&gt; command for controlling this relay, and enterprising hardware hackers could use this port to control things besides cassette motors. In these early systems, the OS was effectively the BASIC interpreter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From here, the PC quickly diverged from other small computers. For an Apple ][, DOS was mainly the disk drive support software and some additional commands for the BASIC interpreter. A BASIC REPL (Read-Evaluate-Print loop) therefore served as what'd we'd consider today to be a terminal or command window, and BASIC maintained primacy over the system unless it was replaced by something that it loaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For PCs, however, DOS was a larger and more self-contained entity. PC/MS DOS had its own command processor and could be useful independent of BASIC.  For disk based PC machines, BASIC was shipped with DOS and was a program to be run under DOS like any other. (Cassette BASIC and the Cassette port fell out of favor almost immediately, and most machines did not include either.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the tl;dr is that non-disk operating systems tended to be BASIC interpreters that allowed mass storage only via tapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much of this was true in the mainframe and minicomputer space as well.  Tapes predated disks, so pre-disk operating systems all tended to be tape based.&lt;/p&gt;&#xA;" OwnerUserId="4522" LastEditorUserId="357" LastEditDate="2017-03-06T21:04:51.047" LastActivityDate="2017-03-06T21:04:51.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2412" PostTypeId="2" ParentId="2406" CreationDate="2017-03-05T13:26:58.633" Score="45" Body="&lt;p&gt;The term DOS pre-dates the personal computer by a looong way: the term &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS/360_and_successors&quot; rel=&quot;noreferrer&quot;&gt;DOS/360&lt;/a&gt; was first coined by IBM in 1964 as a new operating system for their System/360 mainframe computers, to replace TOS (tape operating system). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM commissioned Microsoft (at that time a garage outfit) to write PC-DOS to run on their Personal Computer, which was launched in 1981. Somehow, IBM allowed Microsoft to keep the rights to the operating system, and they started selling their own version as MS-DOS. As the IBM PC manual included a complete set of circuit diagrams, there were very soon a lot of PC-clones running MS-DOS. The rest is his history.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsoft didn't actually write PC-DOS: they ported something that Tim Paterson at Seattle Computer Products had put together in six weeks. Tim's working title for the project was &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS&quot; rel=&quot;noreferrer&quot;&gt;QDOS&lt;/a&gt; (Quick and Dirty Operating System).&lt;/p&gt;&#xA;" OwnerUserId="4567" LastEditorUserId="4567" LastEditDate="2017-03-07T01:15:01.333" LastActivityDate="2017-03-07T01:15:01.333" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2413" PostTypeId="2" ParentId="2406" CreationDate="2017-03-05T17:00:36.203" Score="20" Body="&lt;h3&gt;Does &quot;Disk Operating System&quot; imply that there was a &quot;non-disk&quot; Operating System?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A little bit of history&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The earliest computers did not even have Operating Systems.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The earliest computers were mainframes that lacked any form of operating system. Each user had sole use of the machine for a scheduled period of time and would arrive at the computer with program and data, often on punched paper cards and magnetic or paper tape. The program would be loaded into the machine, and the machine would be set to work until the program completed or crashed. Programs could generally be debugged via a control panel using dials, toggle switches and panel lights.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Hard Disks arrived later.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In 1953, IBM recognized the immediate application for what it termed a &quot;Random Access File&quot; having high capacity and rapid random access at a relatively low cost.  After considering technologies such as wire matrices, rod arrays, drums, drum arrays, etc.,the engineers at IBM's San Jose California laboratory invented the hard disk drive.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Early operating systems were loaded from:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A switch panel&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Paper tape&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Magnetic tape&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Punched cards&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;or some combination of the above.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Further reading&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_hard_disk_drives&quot; rel=&quot;noreferrer&quot;&gt;History of hard disk drives&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_operating_systems&quot; rel=&quot;noreferrer&quot;&gt;History of operating systems&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3531" LastActivityDate="2017-03-05T17:00:36.203" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2414" PostTypeId="2" ParentId="2406" CreationDate="2017-03-05T18:39:27.073" Score="1" Body="&lt;p&gt;As I recall, early desktop computers (what became known as PCs, as well as the first Macs) didn't have hard disks, only memory (ROM, RAM) and, later, removable floppies. The computer's BIOS (Basic Input/Output System) was the firmware that booted the computer. It had to be loaded first to get the computer up and running before any DOS could be used. &lt;/p&gt;&#xA;" OwnerUserId="4573" LastActivityDate="2017-03-05T18:39:27.073" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2415" PostTypeId="1" AcceptedAnswerId="4950" CreationDate="2017-03-06T00:23:28.623" Score="5" ViewCount="1352" Body="&lt;p&gt;I don't remember anything else from this game except it was in the late 1980's in my school and I was playing it on something with a scrollball, and you basically build robots and did science experiments or something. Anyone else remember something like this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it was MS-DOS, or Macintosh. Very hard to say since I didn't know computers at the time. Would've been in grade 2 or 3 around 1986-ish probably. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you could customize your robots... It had other games, definitely Number Munchers. Maybe it didn't even have robots... I definitely remember mixing different liquids. I thought I was dumping them on my robots....&lt;/p&gt;&#xA;" OwnerUserId="4578" LastEditorUserId="621" LastEditDate="2017-03-09T19:49:36.650" LastActivityDate="2017-10-28T21:59:52.167" Title="1980's PC educational game where you build robots" Tags="&lt;identify-this-game&gt;" AnswerCount="4" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2416" PostTypeId="2" ParentId="2415" CreationDate="2017-03-06T01:55:43.337" Score="5" Body="&lt;p&gt;Two games come to mind, both by &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Learning_Company&quot; rel=&quot;noreferrer&quot;&gt;The Learning Company&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Midnight Rescue!&lt;/strong&gt; which is a sidescroller with robots released in 1989 for DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/en/0/0a/Midnight_Rescue_Screenshot.png&quot; alt=&quot;Midnight Rescue!&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Gizmos &amp;amp; Gadgets!&lt;/strong&gt; which is an education game with a focus on mechanics, basic electronics, and energy forms.  While it matches your criteria, it was made in 1993 for DOS 3.3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NnNwr.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NnNwr.gif&quot; alt=&quot;Gizmos &amp;amp; Gadgets!&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2017-03-06T01:55:43.337" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2417" PostTypeId="2" ParentId="2415" CreationDate="2017-03-06T02:40:53.927" Score="6" Body="&lt;p&gt;Guessing the most popular Apple II title that fits: &lt;a href=&quot;https://en.wikipedia.org/wiki/Robot_Odyssey&quot; rel=&quot;noreferrer&quot;&gt;Robot Odyssey&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The title page is at Wikipedia, so here is the inside of a robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iqFFI.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iqFFI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="71" LastActivityDate="2017-03-06T02:40:53.927" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2418" PostTypeId="2" ParentId="2406" CreationDate="2017-03-06T03:14:32.180" Score="6" Body="&lt;p&gt;&quot;In the 1980's at primary school we saw MS DOS and DR DOS&quot; -- in the '80's?  Hah!  Youngling!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before DOS there was TOS -- the Tape Operating System.  You would mount a substantial looking tape on a tape drive the size of a refrigerator, select it as the boot device using dial switches, and press the blue LOAD button.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Viola! the tape would run, and the operating system would be loaded.&lt;/p&gt;&#xA;" OwnerUserId="4582" LastActivityDate="2017-03-06T03:14:32.180" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2419" PostTypeId="2" ParentId="2415" CreationDate="2017-03-06T03:56:59.693" Score="5" Body="&lt;p&gt;I believe you are referring to &lt;strong&gt;ChipWits&lt;/strong&gt;, by Epyx software. It was quite popular at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/L82af.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/L82af.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-03-06T03:56:59.693" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2420" PostTypeId="2" ParentId="2163" CreationDate="2017-03-06T12:15:36.693" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How does the 6502's machine code process $ vs #$, as in it's assembly language? Does every piece of machine code have an extra byte or something telling to use addresses or values or was it something more clever? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Just to expand a bit on Muzer's answer...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All 6502 opcodes use exactly one byte, no exceptions. In this one byte, is encoded both what the operation is (load, store, add, rotate etc) and what the &lt;em&gt;address mode&lt;/em&gt; is. The address mode is what tells the processor where to get the operand. For example in &lt;code&gt;LDA #10&lt;/code&gt;is immediate - the operand follows the opcode. With &lt;code&gt;LDA $10&lt;/code&gt; the address mode can be either absolute (the operand is in the location specified by the two bytes following the opcode) or zero page which is the same as absolute except that, because you know the highest byte of the address is 0, it can be specified by the one byte following the opcode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The address mode is specified by some of the bits in the opcode. For LDA we have the following bit patterns:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LDA zp, x indirect 0xA1 10100001&#xA;LDA zero page      0xA5 10100101&#xA;LDA immediate      0xA9 10101001&#xA;LDA absolute       0xAD 10101101&#xA;LDA zp ind, y      0xB1 10110001&#xA;LDA zp, x          0xB5 10110101&#xA;LDA abs, y         0xB9 10111001&#xA;LDA abs, x         0xBD 10111101&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you focus on bits 2, 3 and 4, you can see that these three bits are the only difference for each of the above instructions and they specify the address mode for &lt;code&gt;LDA&lt;/code&gt;. The other bits specify &quot;LDA&quot; i.e. &lt;code&gt;101xxx01&lt;/code&gt; means &lt;code&gt;LDA&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eight of the instructions follow that pattern, for example &lt;code&gt;000xxx01&lt;/code&gt; is for &lt;code&gt;ORA&lt;/code&gt;, &lt;code&gt;001xxx01&lt;/code&gt; is for &lt;code&gt;AND&lt;/code&gt;, &lt;code&gt;100xxx01&lt;/code&gt; is for &lt;code&gt;STA&lt;/code&gt; except that &lt;code&gt;10001001&lt;/code&gt; does not mean STA immediate for obvious reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The principle sort of holds for some of the other instructions too. e.g. &lt;code&gt;LDX&lt;/code&gt;, &lt;code&gt;LDY&lt;/code&gt; but usually not all the address modes make sense for these or there is a deliberate choice not to have them. e.g. &lt;code&gt;CPX&lt;/code&gt; does not have a full set of address modes. The gaps are used for other things e.g. &lt;code&gt;INX&lt;/code&gt; is in the place where you would expect &lt;code&gt;CPX #xx&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-03-06T12:15:36.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2421" PostTypeId="1" CreationDate="2017-03-06T13:36:23.223" Score="93" ViewCount="9239" Body="&lt;p&gt;The 8087 math coprocessor for the 8086 (and descendants) nominally added floating point and transcendental (trigonometric and logarithmic) instructions to the 8086. Contrary to naive expectations, the 8087 didn't &quot;augment&quot; the main CPU. It was a separate and independent chip, and the coupling with the main CPU was minimal: the 8086 literally knew nothing about what the 8087 was. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the floating point instructions were really (as far as the main CPU is concerned) an ESC (ESCAPE) instruction followed by standard x86 parameter encoding. In an ESC, the main CPU did little more than act on the memory access operands (if any) and discard any fetched data. The 8087 could peek over the 8086's memory fetch stream, recognize the ESC instruction and execute the floating point instructions when it recognized them. Additional instructions on the main CPU were often needed to stall it, until the 8087 finished doing whatever it was doing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That leaves an intriguing door open.  The coprocessor architecture was not committed to the 8087 math coprocessor. It would be possible to plug something other than a 8087 into the coprocessor interface. You could theoretically make a coprocessor that did anything you wanted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Were there ever (from Intel or third-party providers) coprocessor chips different from the 8087 math coprocessors?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not talking about cheaper clones; I'm 99% there were some of those in the market. I'm talking about either a math coprocessor using a completely different instruction set (not merely an enhanced version of the x87 instruction set); or even better, another chip with a different purpose (not merely a floating point and transcendental operations chip): maybe some sort of physics engine, a vector computation engine, a crypto engine, interface gateway to another CPU/device, or something more clever than what I can think of?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there were no actual products, were there any known plans for such a chip even if they didn't come to fruition?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't expect there were any mass market applications, but I can imagine something in a narrow field (Industrial? Scientific?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Starting with the 486DX, the floating point circuitry was embedded in the 486 die. It started as a mere physical integration of the two chips, but I imagine by now the integration is very deep. The original meaning of the ESC instruction has probably been lost and I don't expect that such a replacement coprocessor is possible on a modern CPU)&lt;/p&gt;&#xA;" OwnerUserId="4577" LastEditorUserId="11916" LastEditDate="2019-12-03T16:21:42.423" LastActivityDate="2019-12-03T16:21:42.423" Title="Were there 8086 coprocessors other than the 8087?" Tags="&lt;intel&gt;&lt;8086&gt;&lt;microprocessor&gt;" AnswerCount="6" CommentCount="5" FavoriteCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="2422" PostTypeId="2" ParentId="2421" CreationDate="2017-03-06T14:12:14.763" Score="80" Body="&lt;p&gt;Not all of the original co-processors were for floating point math.  Intel itself offered an I/O coprocessor for the 8088 and 8086 called the 8089. Part of the reason it didn't do as well as the 8087 is that the PC included an empty socket for an 8087, but no support for the 8089.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you broaden the conversation out beyond just the 8086 generation of chips, there were a number of alternative floating point coprocessors that were available over the years. One of the more interesting was a Weitek chipset composed of three chips - Weitek's 1167, 1164, and 1165. Together, these three chips composed a memory mapped floating point processor. What this means is that they appeared to the CPU as if they were a memory device mapped into a specific region of the address space. The operation the chipset executed then depended on the specific address.  This design effectively used the address bus as the way to communicate opcodes, which gave it higher total bandwidth than if it had accepted instructions over the data bus. (I'm also pretty sure it was faster at the floating point operations themselves than a 387.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Weitek also could co-exist with an 80387, so you could have both installed in the same machine. After the 1167, they also did a single chip version called the 3167, and a 486-version referred to as the 4167.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also a number of designs over the years that added an entirely different CPU complex to the existing x86 design.  Hauppauge made a line of 486 mother boards they referred to as 4860. These had a separate i860 (the 'Cray 1 on a chip') that ran in parallel to the 486.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.geekdot.com/hauppauge-4860/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.geekdot.com/hauppauge-4860/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Earlier to that, companies like Definicon made ISA-bus plug in cards (DSI-780) that would let you install a single board 68020 computer into your PC AT for higher performance numerics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to all of this, there were also the expected x87 clones with enhanced features. The IIT 2C87 and 3C87 and the Cyrix Fasmath products all come to mind. These would run at higher IPC than the Intel originals and some of them offered additional instructions. (I don't remember the details, but I think the IIT chips had specific instructions targeted at 4x4 matrices.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On original Intel chips, there were a few other interesting combinations.  In response to the lag between the 386 and the 387's availability, early 80386 machines could be equipped with an 80287. The flip side of that was the 80287XL, which was an 80387 chip that could be installed into an 80286 machine. For a while, there were also ways to take advantage of the split bus and computational units of the 80287. I remember devices that would use this to let you run the core of your 80287 faster than the bus speed of the 80286. (Not to mention all the rigamarole people would go to to overclock the main CPU itself. The original PC AT shipped at 6MHz, although enterprising owners would install alternative crystals to run the machine at faster clocks. IBM later released an 8MHz AT, but with a timing loop in the BIOS that would fail if the system detected a clock rate faster than 8MHz.  The third party response was to build replacement CPU clocks that would hold the clock rate at 8MHZ just long enough to pass the BIOS check and then adjust it upwards to a user-adjustable setting.)&lt;/p&gt;&#xA;" OwnerUserId="4522" LastEditorUserId="15108" LastEditDate="2019-11-30T19:50:22.883" LastActivityDate="2019-11-30T19:50:22.883" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="2423" PostTypeId="2" ParentId="2421" CreationDate="2017-03-06T14:12:32.750" Score="24" Body="&lt;p&gt;I don't think there ever were any incompatible co-processors which used the same sockets and I/O mechanisms as the Intel co-processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were other incompatible co-processors, at least for the 386 and 486: the &lt;a href=&quot;https://en.wikipedia.org/wiki/Weitek&quot; rel=&quot;noreferrer&quot;&gt;Weitek&lt;/a&gt; 3167 and 4167 (Wikipedia also mentions the 1067 for 286s, and 1167 and 2167 for 386s, but I don't know anything about them). These required specific sockets on motherboards, and were memory-mapped, which helped their performance. They required specific support in software, and were only really &quot;popular&quot; for Autodesk products (AutoCAD and 3D Studio in particular) and other CAD packages; some scientific software could also use them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There isn't much information about these co-processors on the Internet; I do have some documentation on paper which I can dig out if you're interested.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advent of the PCI bus meant that such co-processors could simply be made available there: one very common co-processor which doesn't use &lt;code&gt;ESC&lt;/code&gt; is the GPU available in most modern PCs. x87-style FPUs are considered obsolete nowadays, and Intel recommends using SSE instead.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-03-06T14:12:32.750" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2424" PostTypeId="1" AcceptedAnswerId="2425" CreationDate="2017-03-06T15:19:43.867" Score="26" ViewCount="8871" Body="&lt;p&gt;ANSI art and animations were prevalent on BBS systems in the late 80s and early 90s, and the ANSI art scene continues to thrive today. There are thousands of ANSI art files, with usual extension &lt;code&gt;.ans&lt;/code&gt;, available on the Internet, many from those retro BBS's, and many recent artists' works too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/p2mEO.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/p2mEO.png&quot; alt=&quot;Screenshot ANSII art&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to easily recreate the experience of viewing ANSI art online by viewing .ans files natively, just using a terminal window and command-line tool to display the text. Based on my limited understanding of ANSI art, I think several retro-computing environmental conditions would need to be emulated within the terminal session. Off the top of my head:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Recreate the ANSI code page definitions, including all the escape codes that were commonly used in ANSI art. In the old days, I think the MS-DOS &quot;ANSI.SYS&quot; device driver provided this.&lt;/li&gt;&#xA;&lt;li&gt;Choose a suitable font that displays all the ANSI text characters in a manner true to the original online experience.&lt;/li&gt;&#xA;&lt;li&gt;Ditto for the color palette utilized on old EGA and VGA displays. I think both 16-color and 256-color palettes were common.&lt;/li&gt;&#xA;&lt;li&gt;Simulate appropriate output speed of characters to the terminal, allowing files to be viewed as if they were received over a modem connection at, for example, a speed of 9600 baud.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To summarize, if there was an ideal solution, it would work as simply as this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;ansi-cat http://ansiart.mydomain.net/some_ansi_art.ans --baud=9600&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the tool would fetch and display the .ans file in the terminal window using a simulated 9600 bps. Of course, a cross-platform tool is best, but I suppose there are valid reasons this might be more easily accomplished on some modern platforms than others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naturally, I will be thrilled with any answer that can come close to this simple experience. I would &lt;strong&gt;rather not&lt;/strong&gt; have to rely on &lt;strong&gt;emulation software&lt;/strong&gt; and old DOS programs to display the art.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="276" LastEditDate="2017-12-14T11:35:12.860" LastActivityDate="2021-03-27T10:05:04.900" Title="Is there a simple way to display ANSI art and animation files in a modern terminal window?" Tags="&lt;graphics&gt;&lt;ms-dos&gt;&lt;software-recommendation&gt;&lt;bbs&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2425" PostTypeId="2" ParentId="2424" CreationDate="2017-03-06T15:50:54.583" Score="29" Body="&lt;p&gt;There are various ANSI art viewers for modern platforms which satisfy all your feature requirements (command-line syntax excepted), for example:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://picoe.ca/products/pablodraw/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PabloDraw&lt;/a&gt; for Windows, macOS, and Linux&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://sourceforge.net/projects/acidview6-win32/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ACiD Viewer 6&lt;/a&gt; for Windows&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://vaperized.com/ansiexpress.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANSI Express&lt;/a&gt; for Windows&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Inside a terminal, at least on Linux/Unix and presumably macOS, viewing ASCII/ANSI art boils down to setting the font and colours, and slowing the display down — terminals support the required escape codes. One setup that works quite nicely is to use &lt;a href=&quot;http://int10h.org/oldschool-pc-fonts/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Ultimate Oldschool PC Font Pack&lt;/a&gt;, and run &lt;code&gt;xterm&lt;/code&gt; with the appropriate options: &lt;a href=&quot;https://github.com/jcs/ansiterm/blob/master/ansiterm.sh&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;ansiterm&lt;/code&gt;&lt;/a&gt; provides a good base, you'll just want to change the font name (&lt;em&gt;e.g.&lt;/em&gt; &lt;code&gt;-fa &amp;quot;Px437 IBM VGA9&amp;quot;&lt;/code&gt; instead of &lt;code&gt;-fn dos437&lt;/code&gt;), and change the geometry to 80×25 for some DOS files. Inside the terminal, use &lt;a href=&quot;https://grox.net/software/mine/slowcat/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;slowcat&lt;/code&gt;&lt;/a&gt; to slow the output:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;./slowcat -d 1000000 bambi.vt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;for &lt;a href=&quot;http://www.textfiles.com/art/bambi.vt&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;bambi.vt&lt;/code&gt;&lt;/a&gt; for example.&lt;/p&gt;&#xA;&lt;p&gt;You can also use &lt;code&gt;less&lt;/code&gt; inside that terminal to view files of static images:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LESSCHARSET=dos less -R CL\!-1999.ANS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;LESSCHARSET=dos&lt;/code&gt; reduces the character set that &lt;code&gt;less&lt;/code&gt; considers as control codes — without that, it would display non-ASCII characters as their hexadecimal value, &lt;em&gt;e.g.&lt;/em&gt; &lt;code&gt;&amp;lt;DC&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-03-27T10:05:04.900" LastActivityDate="2021-03-27T10:05:04.900" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="2426" PostTypeId="2" ParentId="2406" CreationDate="2017-03-06T16:21:51.037" Score="5" Body="&lt;p&gt;Just to clarify in a single sentence: some of these systems did not have disks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early home computers (e.g. ZX Spectrum, BBC Micro) ran entirely from ROM and could (slowly) load programs from audio cassette tape. BBC Micros could support disks, which involved adding a ROM. If you did this it got listed on the boot screen as &quot;Acorn DFS&quot; (Disk Filing System) or similar:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/i0ZUQ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/i0ZUQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="778" LastActivityDate="2017-03-06T16:21:51.037" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2427" PostTypeId="2" ParentId="2386" CreationDate="2017-03-06T16:25:46.357" Score="2" Body="&lt;p&gt;Many interesting answers here but I would say that the number one reason(s) without any shadow of a doubt is Microsoft Word for Windows and Microsoft Excel for Windows in combination with the fact that Windows 3 was the first really usable version of Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's probably all there is to it. We can argue about technology and stuff forever, but what sold Windows 3 is a combination of a UI and application software that people found easier to use than the competition.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-03-06T16:25:46.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2428" PostTypeId="2" ParentId="2406" CreationDate="2017-03-07T01:06:07.507" Score="3" Body="&lt;p&gt;It appears that IBM was first, but there were others. Back in the day (mid 1970s) the PDP-11 had a single-user DOS whose only purpose was to execute a &lt;code&gt;sysgen&lt;/code&gt; program and an assembler and linker, all of which generated a tailored operating system, which could be one of RT-11, RSX-11, or RSTS/E, depending on your requirements. [I'm not speaking of the Unix sysgen process here as I never saw it at the time.]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think there was (&amp;amp; is) a strong implication of 'single-user' with the name DOS.&lt;/p&gt;&#xA;" OwnerUserId="737" LastEditorUserId="737" LastEditDate="2017-03-09T04:45:51.933" LastActivityDate="2017-03-09T04:45:51.933" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2429" PostTypeId="2" ParentId="2322" CreationDate="2017-03-07T04:56:34.140" Score="1" Body="&lt;p&gt;It might be due to the fact that I went to a public school that had a penchant for hiring terrible educators, but they had a clever way to avoid paying for actual scantron punch/marker card systems with this method: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jtJIm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jtJIm.jpg&quot; alt=&quot;Scantron&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is an illustration I drew up real quick. The red card above would be the student's card that they would complete. The top card (Green) would be the instructors card. In this, they would use a hole-punch to create a &quot;mask.&quot; This allowed them to rapidly grade cards simply by holding them over the cards turned in by students (protip: coloring in two or three as a student increases your odds!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my example, answer #3 and #9 would be wrong, as they are not shaded by the pencil.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quite creative, really.&lt;/p&gt;&#xA;" OwnerUserId="4602" LastActivityDate="2017-03-07T04:56:34.140" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2430" PostTypeId="2" ParentId="2406" CreationDate="2017-03-07T09:55:07.860" Score="1" Body="&lt;p&gt;Back in the day, we used a Data General Nova computer with a 9-track tape drive.  It had non-volatile core memory.  And when you use RTOS (The Real-Time Tape Operating System, the 9-track was used much like hard drives are used now.  There was a directory at the beginning that would tell the tape unit where to find the files.  We used it for scientific research, and stored both data and programs on the tapes.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;No disks on that system at that time.  &lt;/p&gt;&#xA;" OwnerUserId="4612" LastActivityDate="2017-03-07T09:55:07.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2431" PostTypeId="2" ParentId="2421" CreationDate="2017-03-07T10:56:58.447" Score="25" Body="&lt;p&gt;Alan Cox mentions in &lt;a href=&quot;https://plus.google.com/+AlanCoxLinux/posts/1ijm1jjEfLe&quot; rel=&quot;noreferrer&quot;&gt;this post&lt;/a&gt; having seen a hard drive interface that plugged into the 8087 socket (for computers with no expansion slots).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've checked various issues of Amstrad PC magazine. PPC hard drive upgrades are advertised by ABSI Consultants, Alfa Electronics Ltd, Dovetail DST, International Hard Discs, and Stratum Technology Limited. I have a PPC with a Stratum Sprint drive and it doesn't use the coprocessor socket. The IHD and Dovetail advertisements also refer to their drives as &quot;Sprint&quot; so may well be the same device. That leaves the ABSI and Alfa as the most likely candidates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The uploader of &lt;a href=&quot;https://www.youtube.com/watch?v=uJxKBeEvtew&quot; rel=&quot;noreferrer&quot;&gt;this YouTube video&lt;/a&gt; says &quot;I buy this computer with a IDE controller installed in the coprocessor slot.&quot; but gives no more detail than that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One issue of Amstrad PC Magazine also mentions a 286 accelerator card (the Hypertec Hyperace II) which requires a small PCB to be added to one row of the 8087 socket on the mainboard. In that case it's clearly doing it to get at the data bus.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="1912" LastEditDate="2017-03-12T00:26:58.700" LastActivityDate="2017-03-12T00:26:58.700" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2432" PostTypeId="1" AcceptedAnswerId="2437" CreationDate="2017-03-07T12:05:37.557" Score="25" ViewCount="4231" Body="&lt;p&gt;Nowadays I hear a lot about graphics engines, game engines, physics engines etc.  but don't remember the term being used much, if at all, back in the 80s and the 8-bit era.&#xA;I'm not including Charles Babbage's Difference Engine or Analytical Engine, since those were hardware machines.&#xA;Where and when did this term originate? &lt;/p&gt;&#xA;" OwnerUserId="3776" LastEditorUserId="3290" LastEditDate="2020-08-05T13:11:38.480" LastActivityDate="2020-08-05T13:11:38.480" Title="What was the first piece of software to be called an engine?" Tags="&lt;history&gt;&lt;software&gt;&lt;terminology&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2434" PostTypeId="2" ParentId="2432" CreationDate="2017-03-07T13:37:33.890" Score="7" Body="&lt;p&gt;The first &lt;em&gt;Game Engine&lt;/em&gt; that literally used the term &lt;em&gt;Engine&lt;/em&gt; was, to my knowledge, the Doom Engine by id Software in 1993.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Database Engines&lt;/strong&gt;, however, used this term much earlier. dBase and, especially Foxpro, later also Borland, used the term &lt;em&gt;Database Engine&lt;/em&gt; in their advertisements basically all through the 80ies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, I was trying to find Software ads and marketing material before 1980 and failed - interestingly, nobody seemed to see the need for software ads before the 1980ies. All the computer-related ads I found preceeding 1980 were advertising hardware only...&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-03-07T16:15:18.420" LastActivityDate="2017-03-07T16:15:18.420" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2435" PostTypeId="2" ParentId="2432" CreationDate="2017-03-07T14:57:28.143" Score="16" Body="&lt;p&gt;The word &quot;&lt;em&gt;engine&lt;/em&gt;&quot;, applied to game development software platforms, came into common usage in the mid-1990's and is mostly applied to that category of software today. While there is history of using &quot;engine&quot; to describe database and AI platforms too, it is the &quot;&lt;strong&gt;Game Engine&lt;/strong&gt;&quot; that is commonly recognized by the non-technical public as a special class of commercial software, utilized by commercial game developers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As evidence of the recent trend in using the term &quot;engine&quot; more in connection to game engines, and less in reference to database engines, please see the Google search trends comparing the two below. This is the trend in very recent years and months. &quot;Game engine&quot; is the search term represented in blue, and &quot;Database engine&quot; is red.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2ejz7.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2ejz7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key attribute for these game engines, or any software engine, is that they are data-driven. The game content itself is represented as data entities, not as native code. In more sophisticated systems, event actions are also created using some form of high-level, portable scripting capability. The game engine is the software that can execute this data and script. Thus, the game engine can be utilized for the creation of many different games. Depending on the flexibility of the game engine, even games of differing genres may be created; however, the game engines are commonly limited to one basic genre.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since script execution is a common features of most game engines, there is an intersection with the concept of a &lt;strong&gt;Virtual Machine&lt;/strong&gt;. For efficiency, game engine script is commonly &quot;compiled&quot; into some form of efficient byte-oriented code, or &quot;byte code&quot;. Since the game engine runs this proprietary byte-code, the term virtual machine also makes sense when applied to these engines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the term &quot;Game Engine&quot; came into common use, it was also retroactively applied to older game platforms that met the basic requirements for the term. For example, &lt;em&gt;SCUMM&lt;/em&gt;, first used in 1987 by LucasArts for Maniac Mansion, would commonly be called an early game engine today. Interestingly, the modern reverse-engineered &lt;em&gt;SCUMM&lt;/em&gt; system is called &quot;&lt;em&gt;ScummVM&lt;/em&gt;&quot;, emphasizing the point of interchangeability of &quot;VM&quot; and &quot;engine&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To my knowledge, the two earliest game engines, used for the production of many commercial retrocomputer games, were both developed in 1979. The &quot;Z-Machine&quot; was developed by Infocom and used in the creation of their many famous text-based adventure games throughout the 1980's. Also in 1979, &lt;em&gt;Automated Simulations&lt;/em&gt;, which would later become &lt;em&gt;Epyx&lt;/em&gt;, created a game engine for the &lt;em&gt;Dunjonquest&lt;/em&gt; series of games. These games were originally released for the Commodore PET, and later ported to other retrocomputer platforms. The most famous games of this series was the &lt;em&gt;Temple of Apshai&lt;/em&gt; trilogy.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-03-07T19:12:48.890" LastActivityDate="2017-03-07T19:12:48.890" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2436" PostTypeId="1" AcceptedAnswerId="2438" CreationDate="2017-03-07T16:06:43.863" Score="9" ViewCount="426" Body="&lt;p&gt;First off, I'm not talking about painting my plastic C64 in Ferrari Red! While this may look cool, I'm sure any value enhancement of the machine would be based purely on 'taste'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a NeXT Cube, which is a 'sort of valuable' and 'sort of rare' bit of retrocomputer history. Being that this particular computer received quite of bit of usage in its heyday, the metal case has many scratches on its original paint job. Since it is a high-quality metal case (true for many retrocomputers), and since I know the code for the original paint color, I am considering repainting. My expectation is that it will look 'like new' after the paint job because there is no physical damage to this case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, as someone who cares for both the historical significance and the value of a retrocomputer, will repainting it (carefully) enhance these attributes, or detract from them?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-10-04T15:27:54.910" Title="Will careful restoration of a retrocomputer's paint job enhance its value?" Tags="&lt;hardware&gt;&lt;restoration&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2437" PostTypeId="2" ParentId="2432" CreationDate="2017-03-07T16:27:37.037" Score="35" Body="&lt;p&gt;While I don't know the first software to be referred to as an engine, it seemed useful to check Google's &lt;a href=&quot;https://books.google.com/ngrams/graph?content=game%20engine%2Cdatabase%20engine%2Csoftware%20engine&amp;amp;year_start=1950&amp;amp;year_end=2008&amp;amp;corpus=15&amp;amp;smoothing=3&amp;amp;share=&amp;amp;direct_url=t1%3B%2Cgame%20engine%3B%2Cc0%3B.t1%3B%2Cdatabase%20engine%3B%2Cc0%3B.t1%3B%2Csoftware%20engine%3B%2Cc0&quot; rel=&quot;noreferrer&quot;&gt;Ngram Viewer&lt;/a&gt;:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/7DcVJ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7DcVJ.png&quot; alt=&quot;Ngram: database engine, game engine, software engine&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As can be seen, &lt;em&gt;database engine&lt;/em&gt; slowly began being to be used around 1979, while &lt;em&gt;game engine&lt;/em&gt; took another decade to begin catching on. Checking a few books using &lt;em&gt;software engine&lt;/em&gt;, they were using the phrase generally, in titles like &lt;em&gt;Best Practices in Software Measurement&lt;/em&gt; and &lt;em&gt;Practical Biometrics: From Aspiration to Implementation&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Darn, I left out &lt;em&gt;graphics engine&lt;/em&gt;. Regraphing, I see it began around 1982 and in in 2008 shows about three times the usage of &lt;em&gt;software engine&lt;/em&gt;, but still well below &lt;em&gt;game engine&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I checked links and found results for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1982: &lt;em&gt;A 6809 based graphics engine&lt;/em&gt; used in &lt;em&gt;Electrical Design News&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;1983: &lt;em&gt;The inference engine is an interpreter of the facts and the rules.&lt;/em&gt; used in &lt;em&gt;The Journal of Forth Application and Research - Volume 1&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;1987: &lt;em&gt;Relational Database Engine&lt;/em&gt; used in &lt;em&gt;Computer Architecture, Tutorial&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;1995: &lt;em&gt;Wolfenstein 3-D game engine&lt;/em&gt; used in &lt;em&gt;Game Developer&lt;/em&gt; magazine&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Be careful if you want most recent results with the &lt;em&gt;Ngram Viewer&lt;/em&gt;. By default, it cuts off at 2000, which in this case misses the recent drop-off in usage.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stephen Kitt pointed out that &lt;em&gt;inference engine&lt;/em&gt; peaks higher than everything else, and he is right. So I'm adding a 2nd graph with both that term and &lt;em&gt;graphics engine&lt;/em&gt;. The phrase &lt;em&gt;software engine&lt;/em&gt; was so minor I took it out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/904oP.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/904oP.png&quot; alt=&quot;Ngram: database engine, inference engine, game engine, graphics engine&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Everybody&quot; was using &lt;em&gt;inference engine&lt;/em&gt; in 1990, but the drop off from that year is dramatic.  It must not have been cool any more.&lt;/p&gt;&#xA;" OwnerUserId="4621" LastEditorUserId="4621" LastEditDate="2017-03-07T17:47:44.890" LastActivityDate="2017-03-07T17:47:44.890" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="2438" PostTypeId="2" ParentId="2436" CreationDate="2017-03-07T18:11:52.707" Score="9" Body="&lt;p&gt;I think this is something that will change over the years, but if I was to make a current observation by drawing parallels to the automobile industry, I would say &quot;sort of&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I'm not trying to say that retro computer collecting is going to be exactly like the automobile realm, there are a few points to note:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Original paint is far more valuable than a painted job, despite how good it may be.&lt;/li&gt;&#xA;&lt;li&gt;The current restoration process of using RetroBrite to restore the color of the plastics detrimental in the long run is up for debate.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For #1, obviously an unmodified relic is going to be more valuable since it is factory paint, provided the condition is good to excellent. People value the patina and authenticity. However, if the machine is in poor condition, it is not going to be as valuable (other than individual historical significance, if there is any) and only in that case you might want to pursue polishing the machine up. But I would imagine that taking a freshly painted machine and putting it up against an original of equivalent condition, the original is going to be worth far more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For #2, there have been some studies lately that suggest that the chemical process that RetroBrite does actually damages the plastics and while looking awesome for the near term, could cause the plastic to be in far worse condition several years down the road. It might help get your eBay sale increased in value, but I'd be cautious of the long term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I fall into the camp of leave the paint alone. If it is dirty, try cleaning it with mild soaps and scrub brushes; you'll actually make a huge difference just by doing that. If you're looking for long term value, make sure that the electronics are sound (capacitors, etc.) since most of the machines that are out there and for sale are probably not getting that treatment and are quickly falling into the &quot;doesn't work, throw it in the trash&quot; category. Saying that your machine has new caps/etc. and will last easily another 10+ years is going to pay off in the future, IMHO.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2017-03-07T18:11:52.707" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2439" PostTypeId="2" ParentId="2432" CreationDate="2017-03-07T22:16:16.170" Score="7" Body="&lt;p&gt;As an addendum to tofro's anwswer, many years ago I read somewhere about when id Software would license the Wolfenstein 3D Engine (which would predate the DOOM Engine) for $50,000, which may have put them in the position of being amongst the first game developers to license out game engines. I found the passage on the Internet but it's on a web page with pirated software so I'll just paste the relevant text here (emphasis mine)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Great enough that many companies started requesting licenses for the Wolf3D engine for their games. &lt;strong&gt;This happened enough times that it became an inside joke at id and &quot;Let's do another $50k xcopy&quot; was John Romero's response to any new requests&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Granted, the story is ambiguous enough that it's not clear if id Software thought of it as an &quot;engine&quot; yet or if they just thought it was awesome to be able to make $50k just for copying some code to a disk. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the years since they've retronymed the DOOM engine to be &quot;id Tech 1&quot; (2 is Quake/Quake 2, 3 is Quake 3, 4 is DOOM 3, 5 is RAGE, 6 is DOOM 2016), but no such designation for Wolfenstein 3D. In addition, the hacking tools for Wolfenstein 3D were clunky and discouraged, whereas modding DOOM was absolutely fine with id. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while they licensed out Wolf3D's engine they may not have called it an engine yet. Same way FPS games were called &quot;DOOM Clones&quot; before the other term stuck.&lt;/p&gt;&#xA;" OwnerUserId="446" LastActivityDate="2017-03-07T22:16:16.170" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2440" PostTypeId="2" ParentId="2436" CreationDate="2017-03-08T11:24:27.610" Score="4" Body="&lt;p&gt;By re-painting the metal case, you will most probably not increase the collector's value much. Reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Original paint is generally much more durable than what a layman's paint job will ever achieve. New painting is likely to receive scratches much easier than the original paint job&lt;/li&gt;&#xA;&lt;li&gt;You might not hit the exact original color and the result might look weird. (Admittedly, this is not so much of an issue with black)&lt;/li&gt;&#xA;&lt;li&gt;As pointed out in other answers: Some people like to see &lt;em&gt;the age&lt;/em&gt; of old equipment. Re-painting doesn't help much here.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you absolutely think you need to re-paint (maybe because there is corrosion on a metal case that needs to be catered for, or because they are really ugly scratches), make sure it is done absolutely &lt;strong&gt;professionally&lt;/strong&gt;. Just putting a lump of paint on the computer certainly doesn't increase value. And a professional paint job might, depending on what you can or cannot do yourselves, be expensive, likely to be even more than the computer's current value. If you cannot do or have it done professionally, then rather don't do it at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't even think about painting if the original was not painted at all. Plastic parts normally weren't, and a lot of metal parts are typically not painted, but rather &lt;em&gt;powder-coated&lt;/em&gt;. On powder-coated surfaces, paint will not stick well and you will not be able to match colors properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only ever worked out a new paint job was needed on one retro box (an extremely rare &lt;a href=&quot;https://en.wikipedia.org/wiki/CST_Thor&quot; rel=&quot;nofollow noreferrer&quot;&gt;CST Thor 16&lt;/a&gt; Sinclair QL compatible that had only several hundreds built) that was in dire need of repair because of heavy rust on its metal case. It had been stored for over a decade near a pack of UPS batteries and was in such a bad state that corrosion had to be stopped immediately to prevent further damage and I had it professionally sand-blasted and powder-coated. Even if it was done by a friend who does that for a living, it wasn't cheap, but worth the effort - The computer is as new now, with very much the same (or better) durability than original. Such measures also normally require replacing any body stickers the computer originally had which is even more effort. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that for a full (spray) paint job, the computer will have to be disassembled completely, which can be quite an effort - Some parts will not easily come off and might be destroyed in the process, needing further repair.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's only cosmetics like minor scratches, I would not do that. A thorough clean with water and some solvents like alcohol, maybe a run through the dishwasher with some mild detergentto remove the old grime should suffice.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-03-08T13:50:26.720" LastActivityDate="2017-03-08T13:50:26.720" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2441" PostTypeId="2" ParentId="1718" CreationDate="2017-03-08T11:53:00.557" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did other kinds of computers start supporting multi-word arithmetic before the 4004?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The answer is a clear yes. For example, the IBM system/360 had a word size of 32 bits and add and subtract operations would set the &quot;condition code&quot; in the program status word. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/princOps/A22-6821-0_360PrincOps.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/princOps/A22-6821-0_360PrincOps.pdf&lt;/a&gt; (page 24)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think, if you investigate ancient computer architectures, a carry flag or equivalent would be the norm rather than the exception. After all, it's a pretty obvious idea to have - humans usually get introduced to the concept as children.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early computers had large word sizes because why not? Carry flag or no carry flag, having a large word size is advantageous and the constraints were not as tight as with early microprocessors. Having a 48 bit word size (Manchester Atlas, Burroughs B5000) means more circuitry which means more power and more floor space but these are things that can easily be acquired for money. The early microprocessors were constrained by how many transistors you could squeeze on a piece of silicon with a reasonably high yield (of working chips) and also how many pins you could reasonably put on a dual inline package. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;NB The 6502 didn't have arithmetic operations &lt;em&gt;without&lt;/em&gt; carry. One of the gotchas for newbie programmers was that you had to clear the carry before doing an 8 bit addition and &lt;em&gt;set the carry&lt;/em&gt; before doing an 8 bit subtraction.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-03-08T11:53:00.557" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2442" PostTypeId="2" ParentId="1718" CreationDate="2017-03-08T12:33:10.460" Score="2" Body="&lt;p&gt;The carry is much older than the computer and a fundamental concept of arithmetics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When we're going 5000 years back to ancient Sumerian mathematics and the invention of the abacus, the carry as a technical implement is already present - overflow in lower digits increases higher digits by one and resets the lower one. (hyper-retro-computing at its best, here...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most probably, the concept of a carry is even older than that - when you calculate using your fingers, you normally start using a carry quite intuitively once you get beyond 10.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact that the carry is only a &lt;em&gt;carry flag&lt;/em&gt; in binary computers rather than a digit is only specific because computers are using binary arithmetics and thus only need one flag for one binary digit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could thus say it was the &lt;em&gt;Neanderthal ten-finger computer&lt;/em&gt; that might have had it first. If you'd want a &lt;em&gt;machine&lt;/em&gt;, it was definitely the abacus.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-03-08T13:38:13.437" LastActivityDate="2017-03-08T13:38:13.437" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2443" PostTypeId="5" CreationDate="2017-03-08T18:56:52.290" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-03-08T18:56:52.290" LastActivityDate="2017-03-08T18:56:52.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2444" PostTypeId="4" CreationDate="2017-03-08T18:56:52.290" Score="0" Body="Punched cards were an early method of digital computer data storage, using cards made of stiff paper with holes punched in specific locations to represent data. They could be punched manually or automatically, were generally read automatically, and commonly held up to a few hundred bytes of data each." OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-03-09T07:43:11.267" LastActivityDate="2017-03-09T07:43:11.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2445" PostTypeId="2" ParentId="1718" CreationDate="2017-03-08T19:05:44.273" Score="3" Body="&lt;p&gt;For the &lt;a href=&quot;https://en.wikipedia.org/wiki/Word_%28computer_architecture%29#Variable_word_length&quot; rel=&quot;nofollow noreferrer&quot;&gt;variable word-length computers&lt;/a&gt;, multi-precision arithmetic was the only mode of operation. The first computer among the listed in the wiki article, &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_702&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 702&lt;/a&gt;, was announced in 1953.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-03-08T19:05:44.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2446" PostTypeId="1" AcceptedAnswerId="2447" CreationDate="2017-03-09T03:42:48.950" Score="12" ViewCount="1016" Body="&lt;p&gt;I feel like I used to know the answer to this...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In classic Mac days, probably the early 90s and before, some applications would have a cursive / decorative ƒ character in their names.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the significance of this?&lt;/p&gt;&#xA;" OwnerUserId="4322" LastEditorUserId="175" LastEditDate="2017-03-09T19:38:10.333" LastActivityDate="2017-03-09T19:38:10.333" Title="What was the significance of the cursive 'ƒ' in an application name?" Tags="&lt;apple-macintosh&gt;&lt;mac-os-classic&gt;&lt;hfs&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2447" PostTypeId="2" ParentId="2446" CreationDate="2017-03-09T03:53:38.057" Score="20" Body="&lt;p&gt;It wasn’t typically in the application’s name, it was in the name of the folder containing the application, and used to mean “folder.”&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the folder containing SurfWriter, its Apple Guide help file, its template files, and so on may have been named “SurfWriter ƒ” either by the developer or by a user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often developers named the folder something like “SurfWriter 1.0.5 Folder” and a user would change it to “SurfWriter ƒ” to make things line up more easily, but still return a distinguishable result when searching their disk.&lt;/p&gt;&#xA;" OwnerUserId="4496" LastActivityDate="2017-03-09T03:53:38.057" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2448" PostTypeId="2" ParentId="2406" CreationDate="2017-03-09T12:22:03.987" Score="2" Body="&lt;p&gt;The Tatung Einstein was a mid-80s 8-bit home machine. When booted without a disk in the drive it would start a monitor interface (hex editor and debugger) called MOS - the Machine Operating System. This interface could then chainload DOS from the floppy drive. The DOS it used was a CP/M deriviative.&lt;/p&gt;&#xA;" OwnerUserId="4644" LastActivityDate="2017-03-09T12:22:03.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2450" PostTypeId="1" AcceptedAnswerId="2451" CreationDate="2017-03-09T15:55:38.907" Score="16" ViewCount="930" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/CSG_65CE02&quot; rel=&quot;nofollow noreferrer&quot;&gt;CSG 65CE02&lt;/a&gt; is an improved 6502 microprocessor that was shipped in small quantities by Commodore around 1988. It is used in the Amiga A2232 multi-port serial controller card, and that would be the source for scavenging one for the Apple.&lt;/p&gt;&#xA;&lt;p&gt;The 65CE02 contains too many performance improvements to list here. Suffice to say it can at least be a performance-enhanced 4 MHz 6502 replacement (I think!), and might be capable to be overclocked to 10 MHz. I am familiar with over-clocking the Apple //c+ to 8MHz and 10MHz. The &amp;quot;dream machine&amp;quot; would be to swap the 65CE02 with the 65C02 in the //c+ and overclock the system to 10 MHz.&lt;/p&gt;&#xA;&lt;p&gt;Even just running the 65CE02 in an Apple //e at the stock 1 MHz speed would &lt;em&gt;seem&lt;/em&gt; to provide some acceleration, because the 65CE02 is an improved CPU in a number of ways.&lt;/p&gt;&#xA;&lt;p&gt;Is such a CPU swap for any Apple //e, //c, or //c+ possible and worthwhile?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="3290" LastEditDate="2020-06-20T04:44:41.017" LastActivityDate="2020-06-20T04:44:41.017" Title="Can the CSG 65CE02 CPU be used to accelerate an Apple //e or //c?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;benchmarking&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2451" PostTypeId="2" ParentId="2450" CreationDate="2017-03-09T17:32:38.537" Score="14" Body="&lt;p&gt;I don't think it would work. Two main reasons come to mind:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You probably need an external clock that is running at (say) 4MHz to have the chip run at speeds over the default 1.024MHz.&lt;/li&gt;&#xA;&lt;li&gt;The ZipChip / RocketChip were more than just a faster 65C02 as they also had intimate knowledge of what memory addresses could run faster and which ones couldn't.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The Zip/Rocket chips probably had internal multipliers to get the variety of speeds that they would run at since the clock provided by the Apple II was not modified. However, the chips were smart enough to know where to slow down since some of the hardware on the Apple II was CPU timing dependent. Two items in particular are the analog paddle inputs and (somewhat famously?) the 5.25&quot; disk controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disk controller completely relied on the exact timing of the CPU since all of the read/write operations were done in software rather than in hardware (e.g. the smart Commodore 1541 or Atari 810 were separate computers with their own CPU). For example, if it was reading a track, the CPU was furiously tracking the bits coming out of the controller to detect sectors, data, etc. This design may not be very efficient from a CPU perspective, but from the hardware point of view it saved a massive amount of cost and chips and also enabled the Apple II disk to be more flexible than anything else in the home market at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With Zip/Rocket chips, you can disable this speed throttling for just about everything; WAIT routine, speaker access, any slot (and their I/O mapped ROM/RAM space) and so-forth. While you would be able to boot the machine with everything running at full speed, you wouldn't be able to use the 5.25&quot; disk unless your disk was spinning 4x faster :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;UPDATE&lt;/em&gt;: to make one other point, if the 65CE02's improvements are simply additional OpCodes and the timing of everything else remains the same, then there shouldn't be any reason that the swap wouldn't work. In fact, I believe I've read of people swapping out their 65C02's for a version of the 65816 that fit in the 40-pin DIP package and thus they'd get the benefit of a 16-bit processor and instructions, though still limited to the 16-bit address bus.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2017-03-09T21:08:11.367" LastActivityDate="2017-03-09T21:08:11.367" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2452" PostTypeId="5" CreationDate="2017-03-09T19:42:34.460" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Hierarchical_File_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;HFS&lt;/a&gt; is the main filesystem for MacOS Classic though it is supported on other operating systems including MacOS X and GSOS. HFS supports a large amount of metadata and resource forks that make it complicated to transfer the files to other operating systems.&lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="175" LastEditDate="2017-03-09T22:30:48.197" LastActivityDate="2017-03-09T22:30:48.197" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2453" PostTypeId="4" CreationDate="2017-03-09T19:42:34.460" Score="0" Body="HFS is the main filesystem for MacOS Classic " OwnerUserId="175" LastEditorUserId="175" LastEditDate="2017-03-10T00:06:00.360" LastActivityDate="2017-03-10T00:06:00.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2454" PostTypeId="2" ParentId="2406" CreationDate="2017-03-09T19:46:20.523" Score="3" Body="&lt;p&gt;Just to add to what already have been said here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to remember that until late '60s there were no disks of any kind used in computer storage or otherwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All computing systems where using punch-cards or tapes for any data storage and input/output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They were nothing more than huge electronic devices with what you would call active memory setup, all actions where done in memory.&#xA;When you start the &quot;computer&quot; it would run a set of instructions stored in the read only memory module EPROM/BIOS that would check all the hardware connected to the system and would wait for the user to start some kind of action.&#xA;The action would be a command to load the program from a data medium.&#xA;i.e. load a punch-card from a reader, or load a tape.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that data storage medium progression where a board with a physical on/off switches ==&gt; to a paper punch-card ==&gt; to a paper punch tape ==&gt; to magnetic tape similar to what been used in audio or video tapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these storage mediums have one thing in common, they were/are a sequential read devices. You have to start and read all of it from beginning to end. And they way it would work is that you would first load the OS in the form of interpreter and compiler, then you would load the program which would be compiled and loaded into memory, then you wold load the data which would be processed by the program and the output would be dumped to printer, or, if further processing where needed, to the input medium like punch-card or tape to be loaded later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the advancement of magnetic media, IBM in search of cheap, reliable, and portable storage media, developed the first floppy disk. Yet there were no operating system to properly use it. The disk was 8&quot; in diameter, read only, and essentially was still used as a tape, until in 1974 Gary Kildall of Digital Research, Inc. Came up with CP/M (originally standing for Control Program/Monitor and later Control Program for Microcomputers) that initially where targeting an Intel 8080/85-based 8 bit microcomputers systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key point of the CP/M and why it was so successful at the time was that it introduced different use of the disk media i.e. a non sequential read and later write of the data to/from the media. It had small memory footprint (only 64Kb)&#xA;it was fast and reliable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CP/M system where a de facto standard for computing system that where using disk storage medium until 1981, when IBM ventured into Personal computing.&#xA;They did initially approach Digital Research for license of CP/M to be used on IBM/PC but were not successful in that endeavor and went back to Microsoft which in turn came up with PC-DOS and later with MS-DOS.&lt;/p&gt;&#xA;" OwnerUserId="4652" LastEditorUserId="621" LastEditDate="2017-03-09T19:48:51.833" LastActivityDate="2017-03-09T19:48:51.833" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2455" PostTypeId="2" ParentId="2450" CreationDate="2017-03-10T11:53:02.400" Score="2" Body="&lt;p&gt;The 65CE02 is a descendant of the 65C02. The 65C02 fixed some bugs in the original 6502 design, and doesn't support the 6502's illegal opcodes. This means that code that depends on those bugs or which uses illegal opcodes will not work. (illegal opcodes were popular in the scene.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can check the differences here:&#xA;&lt;a href=&quot;http://wilsonminesco.com/NMOS-CMOSdif/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wilsonminesco.com/NMOS-CMOSdif/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the wiki article, the 65CE02 is also not cycle exact compatible to the 6502. It performs particular opcodes in fewer cycles. It is said to be 25% faster at the same clock rate. This means timing sensitive code will not work, either.&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="576" LastEditDate="2018-10-01T08:19:53.940" LastActivityDate="2018-10-01T08:19:53.940" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2456" PostTypeId="1" AcceptedAnswerId="2458" CreationDate="2017-03-10T13:16:17.523" Score="46" ViewCount="7145" Body="&lt;p&gt;One thing that was surprisingly common in older video games (around the same era assembly language was king) was the inclusion of uncompiled, plaintext source code in the ROM. You can see many examples of this &lt;a href=&quot;https://tcrf.net/Category:Games_with_uncompiled_source_code&quot; rel=&quot;noreferrer&quot;&gt;here.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is...why? It doesn't make much sense for a variety of reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The source code is not usable by the machine in any way, and is not pointed to by any part of executable code.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I figured it could be used for padding an EPROM when writing it during testing, but wouldn't it be trivial to just use a sequence of zeroes?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A bug/error in the assembly process. I've used assemblers before and it doesn't quite make sense to me how it could &lt;em&gt;include the source it's reading by mistake&lt;/em&gt; unless the assembler tools were heroically bad.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Another thing that crossed my mind is deliberate inclusion, either by disgruntled employees or as an easter egg. But almost nobody of the era could actually see it without a ROM dumper, which wasn't exactly a common household item. Additionally, even if the intention were to surreptitiously release the source, very seldom was enough code included to actually rebuild the game.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Was there any technical or other reason that source code would end up in a game ROM?&lt;/p&gt;&#xA;" OwnerUserId="1893" LastEditorUserId="1893" LastEditDate="2017-03-10T13:21:57.290" LastActivityDate="2017-03-14T01:40:44.450" Title="Why would older video games include fragments of source code?" Tags="&lt;rom&gt;&lt;game-cartridge&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2457" PostTypeId="2" ParentId="2456" CreationDate="2017-03-10T13:54:52.177" Score="16" Body="&lt;p&gt;I don't know if this applies in every case, but, on the Commodore PET and by extension C64, an executable program file on disk/tape consisted of a load address (normally $0401 on the PET) and then literally a memory dump of the the region of RAM containing the program. The normal save routine would save all the memory until it got to the end of the BASIC program. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most games were written in assembler but to load and run them the executable on disk/tape would be a memory dump of a one line BASIC program followed by the assembled machine code. The one line BASIC program would just call the machine code, using a &lt;code&gt;SYS&lt;/code&gt; command. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because you had all that machine code after the BASIC program you couldn't just use the default save routine because it would stop at the end of the BASIC, so you told it to save a block of memory. If you didn't get the size of it right (your block was too big) or there were gaps (e.g. between the end of the BASIC and start of the machine code) whatever garbage happened to be there would also get saved. These machines had no virtual memory, so the garbage that happened to be there had a good chance of being part of the source code you might have been working on in your assembler just before saving.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-03-10T13:54:52.177" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2458" PostTypeId="2" ParentId="2456" CreationDate="2017-03-10T14:33:47.433" Score="27" Body="&lt;p&gt;I'd guess a lot of the systems used for development didn't clean the memory down in between usages. It's also likely that for games &quot;gaps&quot; got left between binary chunks. So if for a hypothetical system redefined characters had to start on a multiple of 256 (0x100) byte boundaries the memory layout might have looked like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0x0000 - 0x1789 - Compiled code&#xA;0x178a - 0x1800 - Whatever was in memory&#xA;0x1800 - 0x2000 - 256*8 byte redefined characters&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So unless someone explicitly set the chunk between 0x178a &amp;amp; 0x1800 to be a value  you might see some left over source code.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2017-03-10T14:33:47.433" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2459" PostTypeId="2" ParentId="2456" CreationDate="2017-03-10T18:01:52.783" Score="6" Body="&lt;p&gt;There are many reasons why a program might be written to include unspecified data, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if the platform utilises any sort of paging, each individual page may need to be self-enclosed as the machine will have visibility of only a subset at a time, often implying unused space at the end of pages;&lt;/li&gt;&#xA;&lt;li&gt;if the platform was also the development machine, using all available RAM for object code implies no room for both object and source code; therefore source code may need to be assembled in chunks, each with a fixed start address (either because it's programmer specified like a &lt;code&gt;ORG $4000&lt;/code&gt;, or because the working environment would make reassembling all files for every edit infeasible, so the assembler applies some other fixed scheme), so that when glued together gaps are left;&lt;/li&gt;&#xA;&lt;li&gt;some CPUs may prefer certain data alignments (e.g. with 6502 lookup tables, it's usually faster not to overflow a page) so an appropriately directed assembler may be asked to skip certain output addresses (e.g. with the 6502, to move directly to the beginning of the next page).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If the assembler is told &quot;I don't care what's at address N&quot; then it is legitimate not specifically to put anything there. It is also likely, since it is faster. Therefore whatever was in memory before may linger. Which is likely to be source code.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-03-10T18:01:52.783" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2460" PostTypeId="2" ParentId="2456" CreationDate="2017-03-10T20:12:16.313" Score="15" Body="&lt;p&gt;The &lt;a href=&quot;https://tcrf.net/Category:Games_with_uncompiled_source_code&quot; rel=&quot;noreferrer&quot;&gt;page you linked on The Cutting Room Floor&lt;/a&gt; offers its own explanation:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Sometimes this is to pad out a disc or ROM to fill any empty space, other times it's just funky compiler behavior...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&quot;Funky compiler behaviour&quot; is the most likely explanation for the older games. More specifically, as explained in Muzer's comment, it's likely because memory was reused without erasing it first or completely overwriting it with new data.  One can imagine this resulting in source code ending up in a game in one of two ways. Either a compiler/assembler that ends up reusing part of its own memory for both storing the source code input and the machine code output, or a linker that ends up using memory previously used by a compiler/assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first case case could happen in a scenario something like the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The program allocates an input buffer &lt;/li&gt;&#xA;&lt;li&gt;The source code is read into the input buffer&lt;/li&gt;&#xA;&lt;li&gt;The source code is converted into a parse tree or some other intermediate representation&lt;/li&gt;&#xA;&lt;li&gt;The input buffer is freed&lt;/li&gt;&#xA;&lt;li&gt;The program allocates an output buffer which happens to overlap the the location in memory where the input buffer was&lt;/li&gt;&#xA;&lt;li&gt;The program converts the intermediate representation to machine code and stores it in the output buffer&lt;/li&gt;&#xA;&lt;li&gt;The entire output buffer is written out&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If the output buffer isn't cleared in step 5 or entirely overwritten in step 6 it could end up containing part of the source code read into memory in step 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Older single-user operating systems like MS-DOS didn't (and/or couldn't) provide any sort of real process isolation and there's was no security to speak of. While a modern multitasking OS will erase any memory it provides to a process so it can't see any data that might have been stored there by other processes, these older OS'es didn't do that.  So the second case mentioned above could happen in a scenario like the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The compiler/assembler allocates space for an input buffer&lt;/li&gt;&#xA;&lt;li&gt;The source code is read into the input buffer&lt;/li&gt;&#xA;&lt;li&gt;The source code is compiled/assembled into an object file&lt;/li&gt;&#xA;&lt;li&gt;The compiler/assembler exits&lt;/li&gt;&#xA;&lt;li&gt;The linker allocates space for an output buffer which happens to overlap the location in memory where the compiler/assembler allocated the input buffer&lt;/li&gt;&#xA;&lt;li&gt;The game's object files are linked together and stored in the output buffer&lt;/li&gt;&#xA;&lt;li&gt;The entire output buffer is written out&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Again, if the output buffer isn't cleared in step 5 or entirely overwritten in step 6 it could end up containing part of the source code read into memory in step 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This later scenario is probably more likely, at least for anything other than the earliest of games. The program is only likely to write an entire buffer regardless of how much of that buffer was used when the output needs to be a certain size like when creating a ROM image.  A smaller game might use assembler that produces the ROM image directly, but bigger games are more likely to use separate compilation and produce the ROM image using a linker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Padding out a disc or ROM is a much less likely explanation, though you see something similar in the newer games listed on that The Cutting Room Floor page. Instead of explicit padding, or even actual game source code, you often see build scripts and build configuration files included in games. These are files that happened to be in the build output directory for use by the game's build process but aren't actually needed at runtime by the game itself. They end up being included in the game because the entire build output directory ends being included in the game's disc (or flash cart) file system. Essentially they turn that entire directory into an ISO and use it as the image they send to manufacturing.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2017-03-10T20:12:16.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2461" PostTypeId="1" AcceptedAnswerId="2470" CreationDate="2017-03-11T02:30:38.753" Score="10" ViewCount="11504" Body="&lt;p&gt;I have acquired an old Shuttle X PC (Windows XP, Mini-DTX form factor HTPC) that works fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I can't do much with this form factor (I can't fit a modern motherboard in the case) and that the computer came with a working ATI X800 Pro graphics card, I plan an making a compact retro-gaming PC out of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to dual boot Windows 98 and Windows XP to be able to play a large quantity of old PC games (from late MS-DOS titles to Windows XP games).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also plan on installing both of the operating systems on a SD card using a SD to IDE adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I install a dual boot with both Windows 98 and Windows XP on a SD card?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;P.S: I have read about a Windows 98 bug that bloats the RAM if more than 256Mb of RAM is installed. This PC has 1Gb of RAM and I plan on upgrading to 2Gb, is  there anything I'll have to do to fix this?&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="2109" LastEditDate="2017-03-11T18:08:32.243" LastActivityDate="2020-09-15T21:15:34.673" Title="Windows 98 / XP Dual boot" Tags="&lt;ibm-pc&gt;&lt;windows-98&gt;&lt;boot&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2462" PostTypeId="2" ParentId="2264" CreationDate="2017-03-11T10:05:41.067" Score="10" Body="&lt;p&gt;Some retro computers such as the ZX Spectrum and Amstrad CPC did not fully decode I/O addresses. Instead they used a single address line to select each I/O chip, so it was possible (by using an invalid I/O address) to enable two or more chips at the same time. If the two chips are putting different data on the bus then they are shorting each other out, which could damage their bus drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.grimware.org/doku.php/documentations/devices/io.devices&quot; rel=&quot;noreferrer&quot;&gt;Amstrad CPC I/O devices&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.grimware.org/doku.php/documentations/devices/io.devices&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nxB7F.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2017-03-11T10:05:41.067" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2463" PostTypeId="2" ParentId="2264" CreationDate="2017-03-11T14:38:00.760" Score="5" Body="&lt;p&gt;Damaging the computer itself is hard to imagine, but damaging peripherals is much easier. Back in the early days of Linux (94-95), configuring the X11 server (that put graphics on the screen) required you to define video modes by specifying them in terms of clock rates listed in a text based configuration file. Unfortunately, this was not at all intuitive, and you ran the risk of damaging at least some monitors that didn't have adequate internal safeguards. This resulted in the XFree86 HOWTO having this friendly bit of language as a disclaimer (Emphasis mine):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You shouldn't use monitor timing values or ModeLine values for monitors other than the model that you own. If you attempt to drive the monitor at a frequency for which it was not designed, &lt;strong&gt;you can damage or even destroy it.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;-- &lt;a href=&quot;http://web.mit.edu/linux/redhat/redhat-4.0.0/i386/doc/HTML/ldp/XFree86-HOWTO-4.html&quot; rel=&quot;noreferrer&quot;&gt;http://web.mit.edu/linux/redhat/redhat-4.0.0/i386/doc/HTML/ldp/XFree86-HOWTO-4.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time I first set this up, I was a full time college student that'd just spent around $1,200 on a then state-of-the art Sony 17 inch monitor (GDM-17SE1). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting up X11 for the first time was more than a bit nerve wracking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;em&gt;Edit&lt;/em&gt;: One additional bit of damage you could do wasn't hardware... but you could make the argument that it's worse.  When Microsoft first introduced write buffering to the smartdrv disk cache, it would sometimes defer writes for longer than it probably should have... including to file location metadata. Combine this with the lack of memory protection, and it should not be a surprise that at least one errant memory write from software I was developing crashed the system before the cache was flushed and corrupted virtually the entire contents of the disk.)&lt;/p&gt;&#xA;" OwnerUserId="4522" LastEditorUserId="4522" LastEditDate="2017-03-11T14:45:55.403" LastActivityDate="2017-03-11T14:45:55.403" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2464" PostTypeId="1" AcceptedAnswerId="2512" CreationDate="2017-03-11T17:07:36.037" Score="36" ViewCount="3972" Body="&lt;p&gt;I remember the first time I saw &lt;em&gt;Ballblazer&lt;/em&gt;, the 1984 game, running on a friend's Atari 800. The split-screen 3d graphics and fast action blew my socks off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wnFGr.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wnFGr.png&quot; alt=&quot;Ballblazer screenshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking back, I get the impression there are some advanced 3d graphics techniques that appear to be used, but that would be either incredibly unique or impossible to achieve on mid-1980s 8-bit computers and consoles. The &quot;rotofoil&quot; players look like 3d &lt;a href=&quot;https://en.wikipedia.org/wiki/Polygonal_modeling&quot; rel=&quot;noreferrer&quot;&gt;polygonal modeling&lt;/a&gt;, which I am not aware of being used for any other fast-action 3d games on 8-bits. There were ground-breaking 16-bit games, like &lt;em&gt;Arcticfox&lt;/em&gt; and &lt;em&gt;Carrier Command&lt;/em&gt; that used polygonal modelling, but these games only managed wireframe 3d when ported to 8-bit machines. Another famous 8-bit game limited to wireframe was &lt;em&gt;Elite&lt;/em&gt;. So, &lt;em&gt;Ballblazer&lt;/em&gt; seems to be an early 3d standout with its solid, flat-shaded models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, the 3d play field shows correct perspective at a high frame rate and looks like &lt;a href=&quot;https://en.wikipedia.org/wiki/Texture_mapping#Perspective_correctness&quot; rel=&quot;noreferrer&quot;&gt;texture mapping&lt;/a&gt; to me. This almost has to be a programming trick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Ballblazer&lt;/em&gt; was very successful, which led to many ports to other 8-bit systems. To my eye, the original Atari 800 and the Atari 7800 console versions look the best. The C64 version is also pretty true to the original.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did &lt;em&gt;Ballblazer&lt;/em&gt; appear to pull off these advanced 3d rendering techniques for 8-bit micros of the day, especially since all other games using these techniques only appeared on 16-bit systems years later? Are there any tell-tale signs of known programming tricks?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="276" LastEditDate="2017-04-06T09:57:40.210" LastActivityDate="2019-11-18T12:09:56.493" Title="How did &quot;Ballblazer&quot; pull off fast, smooth, first-person, solid-model 3D on Atari 8-bits?" Tags="&lt;graphics&gt;&lt;atari&gt;&lt;gaming&gt;&lt;atari-800&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2465" PostTypeId="2" ParentId="2464" CreationDate="2017-03-11T19:51:23.733" Score="26" Body="&lt;p&gt;The gameplay can be implemented without any 3D calculations (or very little, depending on your definition of 3D calculations):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The checkerboard never rotates, so it can be drawn using affine segments and fills (y = ax + b); the players never get close enough to the edges (on the goal sides) for the vanishing point to be an issue. The checkerboard isn't texture-mapped, it's drawn using only two colours.&lt;/li&gt;&#xA;&lt;li&gt;The rotofoils are only ever shown in one of three angles, and are constructed with easily-scalable polygons (although &quot;easily-scalable&quot; would probably involve table-based calculations given the 6502's lack of mathematical prowess). The in-game rotofoils are much simpler than those shown in the title screen.&lt;/li&gt;&#xA;&lt;li&gt;The ball is always above the play field and is just a scaled, filled circle.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So basically to draw the 3D effects all that's needed is to figure out the scaling factor given an object's distance to the player. Redrawing the whole screen for every frame wasn't too difficult on the 8-bit Ataris.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ballblazer's graphics and speed are still an impressive programming feat, but not as impossibly impressive as you seem to think.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-03-12T10:02:28.360" LastActivityDate="2017-03-12T10:02:28.360" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2467" PostTypeId="1" CreationDate="2017-03-11T23:25:32.043" Score="8" ViewCount="11076" Body="&lt;p&gt;Say I want to hook up a Nintendo 64 console to an HDTV via HDMI or Component.  What are my options for upscaling hardware to be able to play the system without low quality or blocky picture and with low controller latency without directly modifying the console?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2017-03-12T04:03:26.083" LastActivityDate="2018-11-09T15:55:57.170" Title="How can I upscale the video output of a Nintendo 64 for low-latency and high quality graphics on an HDTV?" Tags="&lt;video&gt;&lt;nintendo-64&gt;&lt;new-hardware-adaptation&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2468" PostTypeId="1" CreationDate="2017-03-12T02:58:54.653" Score="9" ViewCount="433" Body="&lt;p&gt;I wish to modify my rack, in order to mount some modern rackmount servers.  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Am I damaging a piece of history&lt;/strong&gt; and will incur the wrath of historical computing librarians ?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;It is an old 19&quot; rack that used to contain a &lt;strong&gt;Data General Nova&lt;/strong&gt; minicomputer, first released in 1969.   I acquired the bare rack from the local university chemistry department around 10 years ago, and it was empty of active gear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Data_General_Nova&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Data_General_Nova&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Picture of Nova minicomputer in operation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gcA3r.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gcA3r.jpg&quot; alt=&quot;http://criggie.org.nz/pictures/servers/cabinet2.jpg&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/1SnVN.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1SnVN.jpg&quot; alt=&quot;http://criggie.org.nz/pictures/servers/cabinet1.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Picture of my rack as of 2011 - yes its a mess hence the plan to tidy and clean.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5270h.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5270h.jpg&quot; alt=&quot;A rack full of lots of electronics&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My modification is to cut out 150mm lengths of steel from the second and third horizontal rails, so I can extend the vertical support further backwards by bolting on two S rails that I have obtained from elsewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Downside of this is that the rack rails are closer at the back, so the server fits in the front but binds as I push it home.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So by making these cuts I can mount the S rails slightly further apart and push my servers home into the rack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vFj8U.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vFj8U.jpg&quot; alt=&quot;Planned cuts&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By doing this, will I damage an object with historical value?&lt;/p&gt;&#xA;" OwnerUserId="3754" LastEditorUserId="278" LastEditDate="2017-03-12T11:44:22.243" LastActivityDate="2017-06-19T23:14:19.397" Title="Does this Nova rack have historical value?" Tags="&lt;hardware-mods&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2469" PostTypeId="2" ParentId="2467" CreationDate="2017-03-12T04:01:19.127" Score="6" Body="&lt;p&gt;It depends on whether you also want to modify the N64 to support RGB output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without modification, the best output to use from the N64 is S-video. Cables are commonly available on eBay for the N64 that support S-video, and there are upscalers that will convert S-video to HDMI 1080p. This &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B0199I6L6A&quot; rel=&quot;nofollow noreferrer&quot;&gt;unit&lt;/a&gt; from Amazon looks like it would do the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also get far better output if you modify the N64 to output an RGB signal, plus use a different converter to go from the RGB to HDMI. There are details for modding the N64 &lt;a href=&quot;http://www.retrorgb.com/n64rgbmod.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, and it does look &lt;em&gt;rather involved&lt;/em&gt;. If you do go this route, you still need a converter like &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B01DLZ8K0C&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; to connect the N64-to-SCART cable to your HDMI monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding up-scalers and scan conversion, I'm honestly not crazy about either of those Amazon products. My go-to scan converter is the Sony DSC1024, which outputs standard VGA at up to 1600x1200. The 4:3 aspect, multi-input switching, scan-doubling, NTSC/PAL compatibility, and aperture capability all combine to make it a great converter for retro-computers and consoles. You can still find them used at a good price, sometimes.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-03-16T18:53:39.897" LastActivityDate="2017-03-16T18:53:39.897" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2470" PostTypeId="2" ParentId="2461" CreationDate="2017-03-12T05:19:02.887" Score="18" Body="&lt;p&gt;Presuming a totally fresh installation of everything and access to all the needed installation media. Also, presuming that the Shuttle X PC can read the SD card through the SD to IDE adapter.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Planning&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Partition Sizes&lt;/strong&gt;&#xA;The size of the SD is likely to cause the most problems. Windows XP system requirements is for at least 1.5GB of available hard disk space. Windows 98 only needs around 300MB of disk space. Since you are planning to run games, and probably install gamer related tools, you may need to raise those limits. I'll presume that you have a SD card large enough to provide the disk space needed for your intentions. This will still need some planning. Just for the installation, XP wants six times what 98 does, so you need to split your SD card's space between them accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, XP will be installed on a partition formatted NTFS while 98 will be on a partition formatted FAT32. XP can read FAT32 disks, 98 &lt;em&gt;cannot&lt;/em&gt; read NTFS disks. To make it easier to share data between both versions of Windows, you can make a third partition, formatted FAT32, that both systems can read and write. This should be large enough to handle an extra-full CD of data, at the minimum. An extra advantage of using a third partition for data transfer is that if you move the card to another computer, that partition will still have the data on it without having to wade through the system and program files of either Windows installation, and using it to transfer data &lt;em&gt;from&lt;/em&gt; another computer will not endanger the system installs in the other partitions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without knowing the size of your SD card, I can only recommend that you do some extra math ahead of time. The number of games you have for each system will also influence how you allocate the space of your SD card. As an example, with an 8GB SD card, maybe 1.9GB for Win 98, 5.1GB for Win XP, and 1GB for the shared partition. OTOH, if you have a really big SD, say 32GB, and plan to use some kind of virtual CD program in both XP and 98, the third partition can be sized rather large, and the VCD files can be stored there, allowing both systems to access them, while only needing one copy on the card. Maybe 2.1GB for 98, 5.5GB for XP, and 24.4GB for shared space. &lt;strong&gt;Note:&lt;/strong&gt; &lt;em&gt;In order to format a partition as FAT32, in XP, it has to be 32GB, or less&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Preparation&lt;/strong&gt;&#xA;Not that you haven't already considered it, but before installing either version of Windows it would help to collect the needed drivers first. If you already have all the drivers, or the original install disks for your devices, that's great. If not, you may have some trouble finding such old drivers for your devices. XP is still in use a lot, so most of the drives may not be too difficult to find and download. Windows 98, however, is so old that finding compatible drivers for your hardware might be tough. The video card and the sound card are both rather important for your gaming, yet may be the hardest to still find for Windows 98. Transferring those download, once you find them, is another possible use for that third partition on the SD card.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Installing&lt;/h1&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Boot the computer with the Win 98 Install disk inserted (either floppy or CD)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you boot with a Win 98 Install CD:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Select &lt;code&gt;2. Boot from CD-ROM&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Select &lt;code&gt;3. Start computer without CD-ROM support.&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;If you boot from a Win 98 boot floppy, or a Win 98 install floppy set, disk 1:&lt;/li&gt;&#xA;&lt;li&gt;Select &lt;code&gt;2. Start computer without CD-ROM support.&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Create a partition for Windows 98&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Type &lt;code&gt;FDISK&lt;/code&gt; to create the partition for your install&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you have a hard drive larger than 512MB you will be given a screen full of information about Windows support for large disks, followed by the option to enable that support. The choice is yours, but my recommendation is to enable it.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Next you are presented with the menu for &lt;code&gt;FDISK&lt;/code&gt;. &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Unlike most modern tools for working with disk partitions , &lt;strong&gt;all&lt;/strong&gt; commands are performed &lt;em&gt;immediately&lt;/em&gt; when you select their option, there is no final &quot;write&quot; command to make changes permanent! (As you select perform the various steps, you will constantly be presented with &lt;code&gt;Press Esc to continue&lt;/code&gt; it is safe to press &lt;kbd&gt;Esc&lt;/kbd&gt;, as it will return you to the previous menu or step.)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Select &lt;code&gt;4. Display partition information&lt;/code&gt; to verify the contents of the disk. Hopefully blank. If so, skip the next step.&lt;/li&gt;&#xA;&lt;li&gt;Select &lt;code&gt;3. Delete partition or Logical DOS Drive&lt;/code&gt; as needed until the disk has no partitions left.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You have to select &lt;code&gt;3. Delete Logical DOS Drive(s) in the Extended DOS Partition&lt;/code&gt; for each Logical drive before you can delete the extended partition.&lt;/li&gt;&#xA;&lt;li&gt;Then you can select &lt;code&gt;2. Delete Extended DOS Partition&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Finally you can select &lt;code&gt;1. Delete Primary DOS Partition&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Then select &lt;code&gt;1. Create DOS partition or Logical DOS Drive&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Select &lt;code&gt;1. Create Primary DOS Partition&lt;/code&gt;.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;FDISK&lt;/code&gt; will show &lt;code&gt;Verifying drive integrity&lt;/code&gt; while it checks the &lt;em&gt;whole&lt;/em&gt; disk. &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;FDISK&lt;/code&gt;  will give you an option the use the whole disk for the primary partition and make it active. Since the objective is to create a dual-boot setup we don't want that.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Enter &lt;code&gt;N&lt;/code&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;FDISK&lt;/code&gt; will &lt;em&gt;again&lt;/em&gt; verify the drive integrity before finally asking how big to make the partition.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Enter the size you want for the Window 98 partition.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can enter the value as a number, meaning MB, or as a percent &lt;code&gt;15%&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;FDISK&lt;/code&gt; is notoriously bad at math, so I recommend using raw numbers over percents. &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Enter the size you want and press &lt;kbd&gt;Enter&lt;/kbd&gt;. (See the partition size discussion above.)&lt;/li&gt;&#xA;&lt;li&gt;Now, select &lt;code&gt;2. Set active partition&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Choose partition 1 as the active partition.&lt;/li&gt;&#xA;&lt;li&gt;Press &lt;kbd&gt;Esc&lt;/kbd&gt; twice to exit &lt;code&gt;FDISK&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Reboot the computer.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Begin installing Windows 98&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you boot from a Win 98 boot floppy, or a Win 98 install floppy set, disk 1&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Select &lt;code&gt;1. Start computer with CD-ROM support.&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Type &lt;code&gt;FORMAT C:&lt;/code&gt; to format the new partition for Windows 98 to use.&lt;/li&gt;&#xA;&lt;li&gt;If your floppy is part of a complete install set that will be used for the installation:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Type &lt;code&gt;SETUP&lt;/code&gt; to launch the installer for Windows 98 from the floppy.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;If the floppy is a Win 98 boot floppy and you intend to install from a CD:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Type &lt;code&gt;D:&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Type &lt;code&gt;SETUP&lt;/code&gt; to launch the installer for Windows 98 from the CD.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Press &lt;kbd&gt;Enter&lt;/kbd&gt; to continue.&lt;/li&gt;&#xA;&lt;li&gt;Follow through the entire Windows 98 installation process.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;If you are booting with a Win 98 CD:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Select &lt;code&gt;2. Boot from CD-ROM&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Select &lt;code&gt;1. Start Windows 98 Setup from CD-ROM&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Press &lt;kbd&gt;Enter&lt;/kbd&gt; to continue with the setup.&lt;/li&gt;&#xA;&lt;li&gt;Select the option &lt;code&gt;Format this drive (recommended).&lt;/code&gt; and press &lt;kbd&gt;Enter&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Press &lt;kbd&gt;Enter&lt;/kbd&gt; to continue.&lt;/li&gt;&#xA;&lt;li&gt;Follow through the entire Windows 98 installation process.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Fix the memory cache issue, if needed,using the &lt;a href=&quot;http://computermemoryupgrade.mysuperpc.com/out_of_memory.shtml&quot; rel=&quot;noreferrer&quot;&gt;link&lt;/a&gt; provided in the comment by @Joe&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;At this point Windows 98 should be operational.&lt;/li&gt;&#xA;&lt;li&gt;Other than the memory cache issue, you shouldn't do any other driver/software installs or updates yet.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First, they can have unintended consequences when installing XP.&lt;/li&gt;&#xA;&lt;li&gt;Second, if something goes wrong in the XP install, it's just that much more work to repeat on the next round.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Wait until the dual-boot setup is final before doing any driver updates, software installs, or customization.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Install Windows XP&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If not already running, boot the computer into Windows 98 normally.&lt;/li&gt;&#xA;&lt;li&gt;Insert the Windows XP install CD.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you haven't changed any settings in Windows 98, the CD should &quot;autoplay,&quot; if not, then&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Double-click on &lt;code&gt;My Computer&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Double-click on the CD drive icon.&lt;/li&gt;&#xA;&lt;li&gt;If that opens a new Explorer window, double click on the &lt;code&gt;setup&lt;/code&gt; icon.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Click on &lt;code&gt;Install Windows XP&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;In the &lt;code&gt;Installation Type&lt;/code&gt; drop-down box select &lt;code&gt;New Installation (Advanced)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Click &lt;kbd&gt;Next&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Accept the EULA and click &lt;kbd&gt;Next&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Enter your CD-KEY and click &lt;kbd&gt;Next&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;In the top section of the dialog is an option to &lt;code&gt;Review or change the default options...&lt;/code&gt;. Click on the &lt;kbd&gt;Advanced Options&lt;/kbd&gt; button&lt;/li&gt;&#xA;&lt;li&gt;Place a check mark in the &lt;code&gt;I want to choose the install drive letter and partition during Setup&lt;/code&gt; option.&lt;/li&gt;&#xA;&lt;li&gt;Since you intend to do gaming here, it's likely helpful to have the installation files available, so (optionally) place a check mark in the &lt;code&gt;Copy all installation files from the Setup CD&lt;/code&gt; option.&lt;/li&gt;&#xA;&lt;li&gt;Click &lt;kbd&gt;OK&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Make any changes you need to the options for accessibility and the language options.&lt;/li&gt;&#xA;&lt;li&gt;Click &lt;kbd&gt;Next&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;On the &lt;code&gt;Get Updated Setup Files&lt;/code&gt; dialog, select &lt;code&gt;No, skip this step and continue installing Windows&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Click &lt;kbd&gt;Next&lt;/kbd&gt;.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The setup process will copy the files to the disk and reboot (after several minutes).&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Press &lt;kbd&gt;Enter&lt;/kbd&gt; on the first screen to begin installation.&lt;/li&gt;&#xA;&lt;li&gt;Move down to the &lt;code&gt;Unpartitioned space&lt;/code&gt; line.&lt;/li&gt;&#xA;&lt;li&gt;Press &lt;kbd&gt;C&lt;/kbd&gt; to create a partition in the unpartitioned space.&lt;/li&gt;&#xA;&lt;li&gt;Enter a size for this partition and press &lt;kbd&gt;Enter&lt;/kbd&gt;. (See the partition size discussion above.)&lt;/li&gt;&#xA;&lt;li&gt;Select the new partition, labeled &lt;code&gt;[New (Raw)]&lt;/code&gt; and press &lt;kbd&gt;Enter&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Select the option to format the partition that you prefer and press &lt;kbd&gt;Enter&lt;/kbd&gt;.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Recommend the one not labeled &quot;(Quick)&quot;.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Follow through the installation process for Windows XP&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Adding the third partition&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If not already there, boot into Windows XP.&lt;/li&gt;&#xA;&lt;li&gt;Click on the &lt;kbd&gt;Start&lt;/kbd&gt; button.&lt;/li&gt;&#xA;&lt;li&gt;Click on &lt;code&gt;Run&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Type &lt;code&gt;diskmgmt.msc&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Click on &lt;kbd&gt;OK&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Click in the free space for the disk. (It should have a lime-green bar across the top.)&lt;/li&gt;&#xA;&lt;li&gt;In the menu bar click on &lt;code&gt;Action -&amp;gt; All Tasks -&amp;gt; New Logical Drive...&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Click on &lt;kbd&gt;Next&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Logical drive&lt;/code&gt; is the only option available, and should already be selected.&lt;/li&gt;&#xA;&lt;li&gt;Click on &lt;kbd&gt;Next&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Enter the size, in MB, for the new partition, 32768MB maximum. (See the partition size discussion above.)&lt;/li&gt;&#xA;&lt;li&gt;Click &lt;kbd&gt;Next&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Change the drive letter, if you wish, and click &lt;kbd&gt;Next&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Make sure that the &lt;code&gt;Format this partition...&lt;/code&gt; option is selected.&lt;/li&gt;&#xA;&lt;li&gt;Change the &lt;code&gt;File system:&lt;/code&gt; drop down to &lt;code&gt;FAT32&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Enter a volume label, if you choose&lt;/li&gt;&#xA;&lt;li&gt;Leave the option for &lt;code&gt;Enable file and folder compression&lt;/code&gt; &lt;strong&gt;OFF&lt;/strong&gt;, or Windows 98 still will not be able to read it.&lt;/li&gt;&#xA;&lt;li&gt;Click &lt;kbd&gt;Next&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Click &lt;kbd&gt;Finish&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Close the &quot;Disk Management&quot; console.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Install drivers and software. I'd recommend the following sequence:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Install Windows 98 drivers.&lt;/li&gt;&#xA;&lt;li&gt;Install Windows XP drivers.&lt;/li&gt;&#xA;&lt;li&gt;Install your main programs and tools, not games, in Windows 98.&lt;/li&gt;&#xA;&lt;li&gt;Install your main programs and tools, not games, in Windows XP.&lt;/li&gt;&#xA;&lt;li&gt;Install your games into Windows 98 and XP as you choose to test/play them.&lt;/li&gt;&#xA;&lt;li&gt;Make the virtual CD images for the games that you &lt;em&gt;really&lt;/em&gt; want to keep rapidly accessible. Space will be limited :-(&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;Notes:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The FAT32 filesystem can, in theory, handle very large drives. Implementation, however, has set other limits. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The hard disk boot sector uses a 32-bit variable to store number the physical sectors present on the hard disk drive, making a practical limit of 2 TB. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Win 98 can only access up to 128 GB. (When formatting any partition over 64 GB, the system will report that it is formatting 64 GB. This is only a display bug, as it will correctly format for the requested size anyway.) &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Win XP without at least SP1 installed does not have 48-bit LBA enabled, limiting it to 128 GB as well. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Win XP with SP1 or higher installed will see, and access, FAT32 partitions up to the 2 TB limit. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Win XP, any SP level, will only &lt;strong&gt;format&lt;/strong&gt; FAT32 partitions up to 32 GB, irrespective of what it can access.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It is possible to replace step 6 above (Adding the third partition) with a similar process in Win 98. It is not so simple to perform, however, and is more error-prone. It is also possible to use a Live Linux disk, of any distro, to create the third partition. Both variations will allow creation of FAT32 partitions up to the 2 TB limit, or the Win 98 limit of 128 GB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A final option is to repeat step 6 to make a fourth, fifth, etc. partition, each of 32 GB FAT32 partitions. Or make additional NTFS partitions. FAT32 also has a 4 GB file size limit which could make storing full-DVD movies impossible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Odds are that the &quot;SD&quot; card in question is SDHC, which has a limit of 32 GB overall, so none of this matters. It could, however be the high-end SDXC, with a limit of 2 TB and considerations need to be taken for the extra space.&lt;/p&gt;&#xA;" OwnerDisplayName="user4511" LastEditorDisplayName="user4511" LastEditDate="2018-10-09T07:01:09.477" LastActivityDate="2018-10-09T07:01:09.477" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="2471" PostTypeId="2" ParentId="2070" CreationDate="2017-03-12T06:03:23.047" Score="8" Body="&lt;p&gt;IMHO, the easiest way to make that lonely Z80 into something you can play with is to hitch it to an Arduino. The Arduino can generate the clock, control the data lines, operate some of the control signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a setup like that, you can free-run the Z80 to see if it's working correctly, and watch its other signals to see what's going on. Speed may be an issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a CMOS z80 and an Arduino with enough pins (a Mega or similar) you can slow the Z80 clock down to a few dozen Hz, use the Arduino to monitor the address lines on the Z80, and simulate RAM/ROM for the Z80. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once that works, you can hand-assemble programs, load them into simulated RAM, and watch the Z80 run them in real time (with a slow enough Z80 clock.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've done this. It was actually one of those really cool computing moments  watching the Z80 go through its paces executing tiny, simple programs. It's also the final project in this book: &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/1484214269&quot; rel=&quot;noreferrer&quot;&gt;https://www.amazon.com/Junk-Box-Arduino-Projects-Electronics/dp/1484214269&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Full disclosure: I wrote that book. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;-JRS&lt;/p&gt;&#xA;" OwnerUserId="4671" LastEditorUserId="4671" LastEditDate="2017-03-12T06:09:28.847" LastActivityDate="2017-03-12T06:09:28.847" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2472" PostTypeId="2" ParentId="778" CreationDate="2017-03-12T16:47:48.643" Score="2" Body="&lt;h2&gt;No.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Most popular games from a retro platform's original commercial era are &lt;em&gt;not&lt;/em&gt; legal to distribute through the Internet, not even if you buy a used game before downloading a second copy in parallel from a ROM site. A U.S. court held in &lt;em&gt;UMG Recordings v. MP3.com&lt;/em&gt; that buying a genuine copy does not entitle you to download a second copy to your computer through the Internet. The ROM image must be made directly from genuine media.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The right way&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Instead, try this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Install an emulator and some &quot;ROMs where rightsholders have expressly provided distribution and non-commercial use of their intellectual property&quot; to ensure the emulator works.&lt;/li&gt;&#xA;&lt;li&gt;Buy a dumper, such as Retrode or Kazzo.&lt;/li&gt;&#xA;&lt;li&gt;Buy a used game.&lt;/li&gt;&#xA;&lt;li&gt;Use the dumper to extract a ROM image to your computer.&lt;/li&gt;&#xA;&lt;li&gt;Run this ROM image in the emulator. Do not share it with others.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This way to solve your underlying problem is more likely to fit within your country's limits on the scope of exclusive rights in a copyrighted work. Though these limits vary from one country to another, I'll use the United States as an example, as both I and Stack Exchange Inc. are based in that country. The U.S. copyright statute (Title 17, United States Code) sets forth several limits in &lt;a href=&quot;https://www.copyright.gov/title17/92chap1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;chapter 1&lt;/a&gt;, particularly &quot;first sale&quot; and &quot;essential step&quot;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First sale (17 USC 109) allows the owner of a lawfully made copy to resell that copy to someone else. (A &quot;copy&quot; is a physical object on which a work is recorded.) This allows someone to sell used Atari 2600 cartridges to you.&lt;/li&gt;&#xA;&lt;li&gt;Essential step (17 USC 117) allows the owner of a copy to make additional &lt;em&gt;private&lt;/em&gt; copies &quot;as an essential step in the utilization of the computer program in conjunction with a machine&quot;. This allows you to plug these cartridges into a dumper and produce ROM images for use in your computer.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="586" LastEditorUserId="586" LastEditDate="2017-03-13T19:40:03.890" LastActivityDate="2017-03-13T19:40:03.890" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2473" PostTypeId="2" ParentId="2264" CreationDate="2017-03-12T23:20:46.880" Score="4" Body="&lt;p&gt;If it's not too much of a stretch, to add to the &quot;over-exercising the drive&quot; examples, &lt;a href=&quot;http://all-things-andy-gavin.com/2011/02/06/making-crash-bandicoot-part-5/&quot; rel=&quot;nofollow noreferrer&quot;&gt;per one of the developers of Crash Bandicoot for the original Playstation&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Kelly is a smart guy, and a good game critic, but he had a lot more to&#xA;  worry about than just gameplay.  For example, whether Crash was&#xA;  physically good for the hardware!&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Andy had given Kelly a rough idea of how we were getting so much&#xA;  detail through the system: spooling.  Kelly asked Andy if he&#xA;  understood correctly that any move forward or backward in a level&#xA;  entailed loading in new data, a CD “hit.”  Andy proudly stated that&#xA;  indeed it did.  Kelly asked how many of these CD hits Andy thought a&#xA;  gamer that finished Crash would have.  Andy did some thinking and off&#xA;  the top of his head said “Roughly 120,000.”  Kelly became very silent&#xA;  for a moment and then quietly mumbled “the PlayStation CD drive is&#xA;  ‘rated’ for 70,000.”&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Kelly thought some more and said “let’s not mention that to anyone”&#xA;  and went back to get Sony on board with Crash.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So I think it doesn't hit the definition of a retro &lt;em&gt;computer&lt;/em&gt;, but on the Playstation not only could a sequence of instructions damage the hardware, but one of the best-selling pieces of software was knowingly likely to do so.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-03-12T23:20:46.880" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2474" PostTypeId="2" ParentId="2406" CreationDate="2017-03-12T23:23:28.850" Score="2" Body="&lt;p&gt;In the mid to late 1960s Digital Equipment Corporation's 36-bit PDP6, and its successor the 36-bit PDP-10, had a DECtape-based operating system called the Monitor. It was a multi-green-screen timesharing system. DECtape was a highly-reliable magnetic tape system providing random access to numbered blocks of data. This was later superseded by a disk-based operating system, but prior to that in 1969 custom disk access for data storage was developed for the Melbourne Stock Exchange in Australia.&lt;/p&gt;&#xA;" OwnerUserId="4682" LastActivityDate="2017-03-12T23:23:28.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2475" PostTypeId="2" ParentId="2467" CreationDate="2017-03-13T11:58:28.633" Score="6" Body="&lt;p&gt;You are asking how to convert the analog video output from a console for using it on a modern HDTV system. The usual answer is to use some kind of converter from the best video output option available in the console, to the best video input available in the TV. Chances are that your TV already has the right kind of input. In this case, you won't gain anything by using an external converter, which will do the same as the internal converter in your TV already does, usually performing worse than the internal converter, which should be best coupled to the electronics of your TV, and will surely provide you a &quot;Game&quot; profile in which the latency is reduced to a minimum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you own a TV designed for the european market, you are usually granted with composite video input, component input, RGB (scart), S-Video (sometimes it is included in scart) and HDMI, so you would use your RGB or component video output from your console and let the TV upscaler do the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you own a TV designed for the american market, you won't have scart, but you may have component input. If the console outputs RGB and you don't have RGB inputs, use a RGB to YPrPb converter, which uses very little electronics so it won't add latency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, any converter that doesn't need to change the timings and the domain of the video signal (i.e. it stays analog after the conversion) won't (shouldn't) introduce latency. Letting a external device to do the complete transformation, from analog to digital and from SDTV timings to HDTV timings will put you in the risk of suffering some latency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short: always that's possible, let the TV to be the one that does the internal upscaling, and do a conversion from the best video output you can get from your console to the nearest video input option on your TV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've composed this matrix about video conversions, in the hope it will be useful:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/spije.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/spije.png&quot; alt=&quot;Video conversion matrix&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-03-13T11:58:28.633" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2476" PostTypeId="1" AcceptedAnswerId="2482" CreationDate="2017-03-13T15:50:40.770" Score="10" ViewCount="446" Body="&lt;p&gt;Using an &quot;SCA to 50-pin adapter&quot;, it is possible to use a 300 gig Ultra-320 SCSI drive from 2004, with an Apple II outfitted with the Apple SCSI controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems possible for the electronics to be capable of accessing more storage than what the available software is currently designed to support. So...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the electronics only, what is the theoretical maximum block number / disk capacity accessible by the old SCSI controller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the old controller has technical limits on the maximum accessible block number, is there a way for the drive to overcome those limits?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software-wise, what is the maximum usable logical volume or number of volumes that can be created?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-03-14T05:18:24.913" Title="Apple II SCSI: Maximum drive / partition size?" Tags="&lt;apple-ii&gt;&lt;scsi&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2477" PostTypeId="1" AcceptedAnswerId="2487" CreationDate="2017-03-13T15:54:36.977" Score="18" ViewCount="1099" Body="&lt;p&gt;Not including the Apple IIgs, did the Apple &lt;code&gt;IIe Platinum&lt;/code&gt; include all enhancements made by Apple?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the first Apple IIe couldn't utilize the Double Hi-Res mode from what I understand.  In fact, there was an &quot;Enhancement Kit&quot; for the IIe that, IIRC, had four new chips to give it capabilities the IIc had.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering if the Platinum edition also had some type of upgrade path that didn't include IIgs or third-party upgrades (no Z80 boards, for example). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2018-08-08T20:29:34.020" Title="Did the Apple IIe Platinum include all feature enhancements from the Apple II line?" Tags="&lt;apple-ii&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2478" PostTypeId="2" ParentId="2477" CreationDate="2017-03-13T16:32:30.053" Score="9" Body="&lt;p&gt;Yes, all the enhancements that were part of the Enhanced Apple //e were included in the Apple //e Platinum Edition. So the stock system provided 80-column text, Double Hi-Res, 128K of RAM, 65C02 microprocessor, and all previous ROM updates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To my knowledge, the only &quot;official&quot; upgrade path available to the Platinum Edition owner was to swap the motherboard to make it an Apple IIgs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, the Platinum Edition //e was the last machine of the Apple ][ line to be manufactured and sold, all the way until the line was officially retired in 1993.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-03-15T05:18:34.050" LastActivityDate="2017-03-15T05:18:34.050" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2479" PostTypeId="2" ParentId="2467" CreationDate="2017-03-13T18:44:30.780" Score="3" Body="&lt;p&gt;The N64 natively outputs Composite and S-Video, so without modifying the console, the best results will be through an S-Video cable like &lt;a href=&quot;http://www.ebay.com/itm/NINTENDO-64-S-VIDEO-HIGH-PERFORMANCE-FULLY-SHIELDED-GROUNDED-NTSC-SVIDEO-N64-NEW-/172564866033?hash=item282daae3f1:g:XdEAAOSwLEtYic3t&quot; rel=&quot;nofollow noreferrer&quot;&gt;this fully shielded cable&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But your TV may not support S-Video at all, or it may add noticeable lag or poorly scale the image to the screen, resulting in a stretched and/or blurry image. A &lt;a href=&quot;https://solarisjapan.com/collections/micomsoft&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micomsoft XRGB-mini Framemeister&lt;/a&gt; will correct these issues.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-03-13T18:44:30.780" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2480" PostTypeId="2" ParentId="2424" CreationDate="2017-03-13T22:38:24.427" Score="11" Body="&lt;p&gt;I got bored over the weekend and created Ansi-Cat for a Windows command prompt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/peteri/Ansi-Cat&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/peteri/Ansi-Cat&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does code page 437 -&gt; Unicode conversion, tested it on Windows 8.1 &amp;amp; 10 but you will need the .net framework version 4.5.2 to run it. It's a bit rough (error handling just prints the exception) but works for 16 color &lt;code&gt;.ans&lt;/code&gt; files I've tried from archive.org but doesn't deal with blink commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you give it a go and run into problems add them to the GitHub issues pages.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2017-03-13T22:38:24.427" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2482" PostTypeId="2" ParentId="2476" CreationDate="2017-03-14T05:13:20.113" Score="8" Body="&lt;p&gt;The SCSI controller is not a limiting factor. The Apple II SCSI controller electronics, and SCSI protocol, would support accessing the blocks of a &lt;em&gt;very large disk&lt;/em&gt;. However, managing those blocks is all done by some DOS software, and ProDOS imposes some more severe constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ProDOS manages the disk as volumes and partitions, and does both these in a manner appropriate for an 8-bit, 64 KB computer - &lt;em&gt;sparingly&lt;/em&gt;. Volumes are associated with slots, and partitions are kept small (by modern standards) to minimize the file system management overhead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For ProDOS 2.0 and above, the maximum partition size is 32 MB and the maximum number of partitions is, theoretically, 13. To get to 13 you have to minimize other cards in the system and remove Floppy Drive Controllers. 32M x 13 would be a maximum of 416 MB for ProDOS HD volumes.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-03-14T05:18:24.913" LastActivityDate="2017-03-14T05:18:24.913" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2483" PostTypeId="2" ParentId="639" CreationDate="2017-03-14T16:51:59.480" Score="4" Body="&lt;p&gt;Even for disks which have self-erased due to entropy, high temperature storage, or poor chemistry resistance to self-demagnetization, these disks are not necessarily defective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the magnetic coating has not itself degraded or detached from the plastic, then a self-erased disk can still be used again by low-level reformatting of the entire disk, which lays down new magnetic patterns that defines new data boundaries for tracks and sectors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Due to differences in head width and signal strength for low and high density drives, a full erasure with a powerful &quot;bulk erasure&quot; magnet is preferred before low-level reformatting to remove any such old patterns.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &quot;refreshing&quot; of the magnetic domains was a feature of an old PC DOS hard drive maintenance software for early MFM/RLL/IDE hard drives, called SpinRite by Steve Gibson. It could read weak sectors, attempt statistical recovery through multiple rereading, and then rewrite each sector to refresh the magnetic patterns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I should mention that really old hard drives used stepper motors to position the read/write heads. A stepper always turns a precise number of degrees for each step, which would be used to position the heads for each track. But due to the loose mechanical nature of these hard drives, there was some &quot;slop&quot; in the head positioning. Taking an old hard drive and tipping it 90 degrees on its side could lead to read/write errors unless it was low-level formatted for that new physical orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also external physical impacts could cause the heads to &quot;skip&quot; to a new location, which the stepper can not detect and then leads to the drive being confused about where it is reading or writing. If this track-skipping occurs during a write, it can lead to catastrophic data corruption.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An improvement over this was the use of optical encoders and the voice-coil servo positioner. There was a clear glass or plastic band with tiny black stripes printed on it, attached to the head positioning arm, and passing over a light sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the drive head were to be struck and head misalignment occurred, it would immediately detect the misalignment due to the motion of the optical encoder, then stop whatever it was doing and reposition the heads back over the correct track again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This worked well, but there is a limit on how precise the optical encoder can be, as tracks became ever smaller and smaller as capacity increased. These drives could also still be low-level formatted due to the external optical track positioning sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At some point there was a transition to a new way of positioning the heads, using special magnetic markers read by the heads to tell them exactly where they are now on the platters. These position markers are printed onto the platters at the factory using special external equipment, and it is not possible to reconstruct the markers once the drive has left the factory. This positioning method is used by all modern hard drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early drives using this method would dedicate an entire platter surface to the servo data, but for modern drives, the permanent servo positioning data is mixed in among the regular read-write areas of each platter, and the drive electronics make sure to never overwrite that servo data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point it became impossible to do true low-level formatting because if the markers are removed, the drive has no idea where anything is on the platters and it becomes useless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, this is why modern hard drives can not be &quot;degaussed&quot; using a powerful external magnetizer, as this removes the head-positioning servo data and the drive can no longer find where tracks are located.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="3687" LastEditDate="2017-09-21T07:38:27.730" LastActivityDate="2017-09-21T07:38:27.730" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2484" PostTypeId="1" AcceptedAnswerId="2486" CreationDate="2017-03-14T17:19:31.930" Score="2" ViewCount="1445" Body="&lt;p&gt;Which computer systems used hard sector indexing of floppy disks?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Background:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On 5 1/4&quot; and 8&quot; disks there is a hole punched into the disk used for optical timing to locate the start of sectors. There were two types of index holes, hard sector and soft sector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hard sectored disks have an index hole for every sector boundary; if the disk has 10 sectors, there are 10 index holes, plus usually one additional hole in a half-sector arrangement, to mark the starting sector for each revolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Soft sectored disks have a single index hole. This marks the starting position of the first sector for each track and the remaining sectors are either defined in software encoding, or can be located via measuring the rotational time detecting the single index hole for each revolution and doing fractional math to find the timing for the start of each sector based on that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Steve Wozniak is famous for designing the Apple II DOS to work without using the index hole, and the electronics for it could be excluded in Apple floppy drives to reduce costs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which systems required hard-sector indexing, and could not function without it?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-12-27T21:50:59.897" Title="What systems used hard sectored floppy disks?" Tags="&lt;floppy-disk&gt;&lt;disk-drive&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2485" PostTypeId="2" ParentId="2424" CreationDate="2017-03-14T18:38:06.153" Score="3" Body="&lt;p&gt;The &lt;a href=&quot;https://github.com/adoxa/ansicon/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANSICON&lt;/a&gt; tool &quot;provides ANSI escape sequences for Windows console programs. It provides much the same functionality as ANSI.SYS does for MS-DOS&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can start an ANSI-capable instance of the command processor, or display standard input if redirected, or execute a specified program in an ANSI-capable window.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-03-14T18:38:06.153" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2486" PostTypeId="2" ParentId="2484" CreationDate="2017-03-14T18:43:16.577" Score="17" Body="&lt;p&gt;Hard sectored 8&quot; and 5-1/4&quot; floppy disks were used in some early computers including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DEC &lt;a href=&quot;http://www.vintage-computer.com/dec_pro_350.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pro 350&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zenith_Z-89&quot; rel=&quot;nofollow noreferrer&quot;&gt;Heath/Zenith H-89a&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.vintage-computer.com/altair8800bt.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;MITS Altair 8800BT&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/NorthStar_Horizon&quot; rel=&quot;nofollow noreferrer&quot;&gt;NorthStar Horizon&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Vector_Graphic&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vector Graphic&lt;/a&gt; computers&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Processor_Technology&quot; rel=&quot;nofollow noreferrer&quot;&gt;Processor Technology&lt;/a&gt; add-on for the &lt;a href=&quot;http://oldcomputers.net/sol-20.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sol-20&lt;/a&gt; computer called the Helios II Disk Memory System&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Exidy_Sorcerer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compudata Exidy Sorcerer&lt;/a&gt; add-on floppy drive based on the &lt;a href=&quot;http://retrotechnology.com/herbs_stuff/d_micropolis.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micropolis&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Quite some of the &lt;a href=&quot;http://www.retrotechnology.com/restore/zilog.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zilog dev systems&lt;/a&gt; (MCZ 1/15, MCZ 1/30, MCZ 1/05)&lt;/li&gt;&#xA;&lt;li&gt;And the IBM displaywriter also use hard sectored 8 inch disks and had a distinctive &quot;Granuching&quot; sound when accessing.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="75" LastEditorUserId="7432" LastEditDate="2017-12-27T21:50:59.897" LastActivityDate="2017-12-27T21:50:59.897" CommentCount="3" CommunityOwnedDate="2017-03-14T18:43:16.577" ContentLicense="CC BY-SA 3.0" />
  <row Id="2487" PostTypeId="2" ParentId="2477" CreationDate="2017-03-15T10:32:15.673" Score="15" Body="&lt;p&gt;The Platinum //e had all Enhanced //e features, but lacked some //c enhancements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Platinum //e motherboard hardware had the following &lt;a href=&quot;http://apple2history.org/history/ah07/#08&quot; rel=&quot;noreferrer&quot;&gt;changes&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All units shipped with a small form factor 64k Extended 80-Column Card installed&lt;/li&gt;&#xA;&lt;li&gt;A lower chip count: 2 RAM chips instead of 8, and one 16k firmware ROM&lt;/li&gt;&#xA;&lt;li&gt;The &quot;shift key mod&quot; was installed (to sense the Shift key in software)&lt;/li&gt;&#xA;&lt;li&gt;Extra capacitors were added to the push-button inputs to reduce &lt;a href=&quot;https://en.wikipedia.org/wiki/Electromagnetic_interference&quot; rel=&quot;noreferrer&quot;&gt;EMI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Some downsides were:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pressing the Shift key and a game controller's 3rd button caused a short-circuit&lt;/li&gt;&#xA;&lt;li&gt;The push-buttons could not be used for fast switching applications, e.g. &lt;a href=&quot;http://michaeljmahon.com/NadaNet.html&quot; rel=&quot;noreferrer&quot;&gt;NadaNet&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The firmware was the same as the Enhanced //e and so lacked at least these //c features:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://apple2history.org/history/ah08/#08&quot; rel=&quot;noreferrer&quot;&gt;65C02 support&lt;/a&gt; in the Monitor disassembler and mini-assembler&lt;/li&gt;&#xA;&lt;li&gt;Monitor step and trace commands&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/384/what-are-the-differences-between-the-versions-of-applesoft-basic/395#395&quot;&gt;The lo-res graphics commands&lt;/a&gt; (GR, HLIN, VLIN, PLOT, and SCRN) work with double lo-res&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note: An improved //e Monitor is available in the &lt;a href=&quot;http://www.jamtronix.com/blog/2007/05/24/apple-extended-debugging-monitor/&quot; rel=&quot;noreferrer&quot;&gt;Apple // Extended Debugging Monitor ROM&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2018-03-29T22:44:35.540" LastActivityDate="2018-03-29T22:44:35.540" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2488" PostTypeId="1" AcceptedAnswerId="2490" CreationDate="2017-03-15T17:38:15.760" Score="11" ViewCount="2623" Body="&lt;p&gt;Windows Explorer Shell Command Files are a feature added to Windows with Internet Explorer 4 (95 / NT 4). They were used in the now-defunct Quick Launch bar to show the desktop, open IE4's Channels feature and open Windows Explorer(?). These files have not been created by Windows since XP. For some reason, they behave like shortcuts in the shell; they can't be opened in programs using the built-in Windows open dialog's GUI - only by typing in the full file path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been puzzled by &lt;code&gt;.scf&lt;/code&gt; files for some time. Despite being built in to every version of Windows since Windows 95 (although heavily nerfed in later versions) there is no documentation of it on the Microsoft website, except that you can get your &quot;Show Desktop&quot; button back by copying and pasting if you accidentally delete it. They appear to be based on the &lt;code&gt;.ini&lt;/code&gt; configuration file format, but that's not very useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does any documentation on Windows Explorer Shell Command Files exist?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="156" LastEditDate="2017-03-15T22:17:02.660" LastActivityDate="2017-03-15T22:17:02.660" Title="Documentation on Windows Explorer Shell Command Files" Tags="&lt;windows-95&gt;&lt;windows-98&gt;&lt;file-format&gt;&lt;windows-me&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2489" PostTypeId="2" ParentId="2488" CreationDate="2017-03-15T18:56:51.167" Score="9" Body="&lt;p&gt;Articles &lt;a href=&quot;https://web.archive.org/web/20101118014705/http://support.microsoft.com/kb/190355&quot; rel=&quot;noreferrer&quot;&gt;Q190355&lt;/a&gt; and &lt;a href=&quot;https://web.archive.org/web/20101114160837/http://support.microsoft.com/kb/195737&quot; rel=&quot;noreferrer&quot;&gt;Q195737&lt;/a&gt; previously available on microsoft.com provided a little documentation about the .scf script file format:&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Example 1: Show Desktop (from Q190355):&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[Shell]&#xA;Command=2&#xA;IconFile=explorer.exe,3&#xA;[Taskbar]&#xA;Command=ToggleDesktop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3&gt;Example 2: View Channels (from Q195737):&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[Shell]&#xA;Command=3&#xA;IconFile=shdocvw.dll,-118&#xA;&#xA;[IE]&#xA;Command=Channels&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It looks like the only real customization you can do is to change the icons.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-03-15T18:56:51.167" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2490" PostTypeId="2" ParentId="2488" CreationDate="2017-03-15T21:11:28.927" Score="9" Body="&lt;p&gt;SCF files are just another form of shortcuts to access various system functions with syntax identical to *.ini files. They are handled by shell32.dll. Parameter 'Command' determines how is the file handled. Possible values:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Posts internal message to windows main process (systray.exe). At a glance it doesn't seem like message with this ID (0x4C8) is handled in explorer.exe or systray.exe, so I might be wrong about who actually receives this message. Nothing seems to happen, so this function is either not fully implemented, or needs additional section with more parameters. Messages with similar IDs seem to invoke power management related functions in systray.exe. Needs more research than I have done.&lt;/li&gt;&#xA;&lt;li&gt;Passes file to explorer.exe which executes command from [Taskbar] section. Valid values are 'Explorer' and 'ToggleDesktop'.&lt;/li&gt;&#xA;&lt;li&gt;Executes command from [IE] section. Valid value: 'Channels'&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;All other values are ignored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also another way to define the icon:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IconFile=&amp;lt;filename&amp;gt;&#xA;IconIndex=&amp;lt;index&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Researched on Windows ME, most likely applies to 95 and 98.&lt;/p&gt;&#xA;" OwnerUserId="156" LastEditorUserId="156" LastEditDate="2017-03-15T21:35:22.827" LastActivityDate="2017-03-15T21:35:22.827" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2491" PostTypeId="1" AcceptedAnswerId="2495" CreationDate="2017-03-16T02:46:47.633" Score="9" ViewCount="505" Body="&lt;p&gt;According to my limited experience with IBM clone mainframes, and as far as I can remember, at least in one OS the permanent storage disk space was allocated to users (and the scratch space &amp;mdash; to processes) by cylinder range, and the process was allowed to access the allocated cylinder range almost as if it was a section of an IBM tape, i. e. to write blocks of arbitrary sizes, limited only by the track capacity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure if it was the OS which decided how many blocks would fit on one track, or it was the user's responsibility to specify in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Job_Control_Language#Complexity&quot; rel=&quot;noreferrer&quot;&gt;JCL Data Definition statement&lt;/a&gt;, it's hard to tell from the example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How widespread was that practice among the mainframe manufacturers? When was it abandoned? &lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2018-04-13T17:53:47.380" Title="What operating systems allowed arbitrarily-sized disk blocks?" Tags="&lt;hard-disk&gt;&lt;operating-system&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2493" PostTypeId="1" AcceptedAnswerId="2496" CreationDate="2017-03-16T04:31:36.963" Score="10" ViewCount="389" Body="&lt;p&gt;I am wondering if the order is important, which do I turn off first?  The Atari ST computer or the external hard drive attached to it?  It is on an SCSI adapter.&lt;/p&gt;&#xA;" OwnerUserId="4708" LastActivityDate="2017-03-16T09:02:22.760" Title="Order of powering down Atari ST and hard drive?" Tags="&lt;atari&gt;&lt;hard-disk&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2494" PostTypeId="1" AcceptedAnswerId="2507" CreationDate="2017-03-16T04:37:41.323" Score="28" ViewCount="19856" Body="&lt;p&gt;I have assembled a retro-gaming PC out of an old Shuttle SN45G with a Windows 98/Windows XP dual boot.&lt;/p&gt;&#xA;&lt;p&gt;The motherboard can handle 2GB of RAM, but apparently Windows 98 can only handle 1 GiB.&lt;/p&gt;&#xA;&lt;p&gt;Windows 98 boots fine when I have 1 GiB of RAM installed, but I get the error &lt;code&gt;Not enough memory&lt;/code&gt; if I install 2 GiB of RAM.&lt;/p&gt;&#xA;&lt;p&gt;I'd like to have those 2 GiB of RAM permanently installed as I also have Windows XP on this PC.&lt;/p&gt;&#xA;&lt;p&gt;I tried setting the &lt;code&gt;MaxFileCache&lt;/code&gt; parameter to &lt;code&gt;524288&lt;/code&gt; in the &lt;code&gt;[vcache]&lt;/code&gt; section of &lt;code&gt;system.ini&lt;/code&gt; but it didn't work with 2 GiB.&lt;/p&gt;&#xA;&lt;p&gt;I also tried to limit the RAM to 999 MiB with &lt;code&gt;msconfig&lt;/code&gt; advanced settings but I ended up with a very unstable system (I get a black screen or a BSOD every few minutes and I'm forced to reboot).&lt;/p&gt;&#xA;&lt;p&gt;I thought of trying to limit the maximum memory of Windows 98 to 1 GiB (apparently it can be done with the &lt;code&gt;/maxmem&lt;/code&gt; boot parameter, but I don't know how to do it), but I don't know if it would work, and I would like to have those 2 GiB of RAM available under Windows 98.&lt;/p&gt;&#xA;&lt;p&gt;How can I have 2 GiB of RAM under Windows 98? Or, in last resort, how can I limit the maximum RAM of Windows 98?&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="6659" LastEditDate="2020-08-07T20:52:36.590" LastActivityDate="2020-08-07T20:52:36.590" Title="Windows 98 with 2GB of RAM" Tags="&lt;ibm-pc&gt;&lt;memory&gt;&lt;windows-98&gt;&lt;boot&gt;" AnswerCount="6" CommentCount="15" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="2495" PostTypeId="2" ParentId="2491" CreationDate="2017-03-16T06:33:32.177" Score="9" Body="&lt;p&gt;The &lt;a href=&quot;http://www.feb-patrimoine.com/english/from_gcos_62_to_gcos_4.htm&quot; rel=&quot;noreferrer&quot;&gt;Honeywell Series 60 Level 62&lt;/a&gt;, and its successor, the Honeywell Bull DPS4, certainly used variable-length sectors. It is worthwhile pointing out that these products were designed as IBM System/360 and System/3 knock-outs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disk drives themselves did not care what size the sectors were, and you could create sectors of various sizes on a track, or you could create a single sector with a size up to the maximum capacity of the track. This was (approximately) 7kB for Level 62 disk drives, and 19kB for DPS4 drives. However, the operating systems (on which I worked) only allowed sectors of the same size on each track.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Volume format&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The disk volumes were organised using the Volume Table of Contents (VTOC) architecture. The first cylinder of each volume contained a single directory (the VTOC) that described all of the files on the volume. This severely limited the number of files that any disk volume could contain, but in practice, this wasn't a serious problem due to the limited capacity of the disk drives and the availability of &quot;queued&quot; files (libraries) to store program files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The file types available to customers using high-level languages were as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sequential&lt;/li&gt;&#xA;&lt;li&gt;Relative (random access)&lt;/li&gt;&#xA;&lt;li&gt;Indexed (ISAM)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of these file types used fixed-length records (and blocks).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;File types also available to system programmers using Assembler were:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Queued Linked (chained blocks containing variable-length records)&lt;/li&gt;&#xA;&lt;li&gt;Queued Partitioned (contiguous blocks containing fixed-length records)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These queued files were used to store source code and object code, and had their own internal directories that could be of any size. System utilities were provided to allow users to manipulate these files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why use VTOCs (and queued files), rather than hierarchical directories? The main reason was that efficient algorithms for balancing the b-trees used in hierarchical directories were not known at the time that the systems were designed. Although inserting entries could be done efficiently, deleting entries and rebalancing the b-tree could not. When efficient algorithms were developed, manufacturers quickly switched to hierarchical directories. UNIX is, perhaps, the operating system that did more than any other to introduce hierarchical directories to users and programmers.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Sector format&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The actual sectors on the disks were organised on the count/key/data principle. Each field (count, key, or data) was effectively a mini-sector with its own inter-block gap and synchronisation bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;count&lt;/em&gt; field contained the address of a block in cylinder/track/sector format. It allowed the controller firmware to access data by physical location, and to verify that the correct cylinder and track was being accessed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;key&lt;/em&gt; field (if present) contained searchable data that could be used by the controller firmware to locate a particular sector on a track without needing to know the physical address of the sector. It was only used on tracks containing indexes and directories. Searches could be multi-track, with the controller firmware performing automatic track switching. This meant that an entire cylinder could be searched using a single command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data field contained the actual data of each sector. User programs could only access data fields, whilst system programs could also access count and key fields using specialised channel programs. The data fields were referred to as &lt;em&gt;blocks&lt;/em&gt; by programmers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On IBM systems, the &lt;em&gt;key&lt;/em&gt; field was used to record the size of the &lt;em&gt;data&lt;/em&gt; field, and this system is still used today on a lot of computer hardware, including floppy disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was the &lt;em&gt;key&lt;/em&gt; field used to contain index keys rather than sector sizes? In reality, there was no good reason. Although allowing disk controller firmware to search for index and directory entries seemed like a good idea, in practice it was highly inefficient since the disk controller remained in use throughout the entire I/O operation, and other I/O commands had to wait for the current command to finish before they could be started. This meant that data transfers could not take place while searches were being executed. This was bad news if you made heavy use of indexed files.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Why switch to fixed-length sectors?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The main problem with variable-length sectors is that it makes it very difficult to &lt;strong&gt;predict&lt;/strong&gt; when required sectors would pass under the read-write heads. If the controller can predict when this will happen, it can disconnect the disk drive and send a command to another disk connected to it. When the original disk locates the required sector, it sends a reconnect request to the controller so that data transfer can occur. If the controller is busy, the disk must wait for another revolution and issue the reconnect request again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On large mainframe systems, it was common to connect disk drives to more than one controller. When the disk drive issued a reconnect request, if one controller was busy, another controller could service the reconnect and perform the data transfer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the &lt;em&gt;key&lt;/em&gt; field to perform sector searches was highly inefficient since the controller had to remain connected to disk drive to perform the search. Controllers performed the searches since disk drives of the time did not have enough intelligence to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the &lt;em&gt;key&lt;/em&gt; field to store the length of sectors allowed tracks to contain sectors of different sizes, but this caused other inefficiencies as already described. Also, it made it very difficult to calculate which cylinder and track a desired sector was located on without using a higher-level index, which itself would need to be accessed by the operating system for each physical I/O operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The count/key/data system allowed operating systems to off-load a lot of processing to the disk controllers, and this was very useful when CPUs were rather slow (the Level 62 and DPS4's speeds were measured in kilo-operations per second). With the advent of faster processors, it made more sense to abandon variable-length sectors and allow the CPU to perform all the necessary calculations. The disk controllers could also be made less intelligent, and this helped with integrating device electronics with the actual disk drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, when drive capacities (and track capacities) became large enough to make zoning a good idea (storing more data on outer tracks), the use of variable-length sectors became infeasible, since it would be almost impossible to calculate which zone any sector was in. However, it made little difference since variable-length sectors had already fallen out of favour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The end-result of this convoluted process is the Integrated Device Electronics (IDE) drives that we all know and love today.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Honeywell Series 60 Level 62&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GMOHo.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GMOHo.jpg&quot; alt=&quot;Honeywell Series 60 Level 62&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.feb-patrimoine.com/projet/gcos4/gcos4_history.htm&quot; rel=&quot;noreferrer&quot;&gt;www.feb-patrimoine.com&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Working from the bottom in a clockwise direction, we have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Three disk drives with removable 30MB disk packs (and operator). The drives were top-loading and had a glass window so that you could see the read/write heads going in and out. Very nice!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The central processing unit. This contained the CPU, memory and all peripheral controllers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The operator console. This used a 30cps TermiNet band printer. A data cassette unit was also provided, but this is not visible.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A 600lpm drum printer. Faster printers were available.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An 80-column card punch/interpreter.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An 80-column card reader.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Other peripherals were available, such as half-inch magnetic tape, paper tape, 96-column card reader and 96-colum multi-function unit. Lower capacity disk drives were also available.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Honeywell Bull DPS4&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gP9DR.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gP9DR.jpg&quot; alt=&quot;Honeywell Bull DPS4&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.histoireinform.com/Histoire/+infos2/chr5infb.htm&quot; rel=&quot;noreferrer&quot;&gt;www.histoireinform.com&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Working from left to right (foreground), we have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;600lpm band printer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Two disk drives with 80MB disk packs.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Central processing unit with integral 8-inch floppy-disk drive.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Operator console (120cps dot-matrix printer and keyboard).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Other peripherals were available, such as half-inch magnetic tape, 80-column table-top card reader, and 300MB disk drives. The older type of disk drive could be connected for data-transfer purposes.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Resources&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.feb-patrimoine.com/english/from_gcos_62_to_gcos_4.htm&quot; rel=&quot;noreferrer&quot;&gt;FEB-patrimoine: From GCOS 62 to GCOS 4&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Volume_Table_of_Contents&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia: Volume Table of Contents&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Count_key_data&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia: Count Key Data&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Wikipedia articles relate to IBM products. However, they are broadly applicable to the Honeywell products described here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The FEB-patrimoine article contains minor inaccuracies, possibly because it is based on planning documents rather than engineering documents.&lt;/p&gt;&#xA;" OwnerUserId="3278" LastEditorUserId="3278" LastEditDate="2017-03-16T09:36:29.543" LastActivityDate="2017-03-16T09:36:29.543" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2496" PostTypeId="2" ParentId="2493" CreationDate="2017-03-16T08:32:38.060" Score="11" Body="&lt;p&gt;The order of switching should be relatively arbitrary - After all, there were Ataris around (like the Falcon or ST/E) that didn't have a separate power switch for the hard disk and where it was relatively random what stopped first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, if in doubt, ask the manual. The Atari Megafile manual says the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rKLih.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rKLih.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I'm especially fond of the &quot;...when the whirring stops...&quot; part - My Megafile 40 never stopped whirring :) )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to this (a pity that they don't give a reason), you should power off the disk last.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-03-16T09:02:22.760" LastActivityDate="2017-03-16T09:02:22.760" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2497" PostTypeId="2" ParentId="2493" CreationDate="2017-03-16T08:54:10.370" Score="6" Body="&lt;p&gt;The rule of thumb is switch on the peripherals firts and switch off them last. It is preffered to have the external pripherals already up and running while the computer is on, at least for home micros.  &lt;/p&gt;&#xA;" OwnerUserId="3422" LastActivityDate="2017-03-16T08:54:10.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2499" PostTypeId="1" AcceptedAnswerId="2640" CreationDate="2017-03-16T15:03:10.307" Score="11" ViewCount="2350" Body="&lt;p&gt;CIA 6526 chip used in Commodore 64 is capable of controlling two separate joystick buttons. But the second button should be connected through paddle pot input. This option was not popular till the release of Commodore 64GS (Game System). C64GS came with Cheetah Annihilator joysticks that officially has two separate buttons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently, several two button game have been released after C64GS. But I couldn't find the names. So what are the two button C64 Games?&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="11916" LastEditDate="2019-04-27T10:21:49.193" LastActivityDate="2019-04-27T10:21:49.193" Title="Which C64 games support two buttons?" Tags="&lt;commodore-64&gt;&lt;gaming&gt;&lt;joystick&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2500" PostTypeId="1" CreationDate="2017-03-16T16:37:21.560" Score="5" ViewCount="140" Body="&lt;p&gt;I am probably a decade late with this question, but anyway.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I digged out a PDA with Windows Mobile 5, and installed &lt;a href=&quot;https://spacetime-mathematics.en.uptodown.com/windows&quot; rel=&quot;nofollow noreferrer&quot;&gt;SpaceTime Mathematics&lt;/a&gt; on it. It is a 30-day trial (and you can't purchase the full version anymore as the service is dead...). The problem is I installed it before I set the date and time on the PDA, and it thought it expired in 1999. I uninstalled it with the built-in uninstaller, and then reinstalled it (all that with WiFi turned off), but it didn't start over the trial period. I couldn't locate any remnant files, so I have to ask this desperate question:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where should I search? or: How could I &lt;em&gt;clean&lt;/em&gt; uninstall an app from WinMobile 5.0?&lt;/p&gt;&#xA;" OwnerUserId="4713" LastEditorUserId="621" LastEditDate="2017-03-16T16:57:06.303" LastActivityDate="2017-07-16T12:25:40.453" Title="Where are program datas stored on Windows Mobile 5.0?" Tags="&lt;windows-mobile&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2501" PostTypeId="2" ParentId="1967" CreationDate="2017-03-16T20:33:43.970" Score="4" Body="&lt;p&gt;The board seems to be using standard Jamma connector for Player 1 and Player 2 except for the &lt;code&gt;-5V&lt;/code&gt; and the &lt;code&gt;test switch&lt;/code&gt;. Player 3-6 controls are using non-standart sub-harnesses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Practically any 6 player game which doesn't require -5V should work. But you may need to modify those sub-harnesses. I didn't see the details of the arcade monitor in the link you provided. You should check refresh rate of the monitor, too.&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="3422" LastEditDate="2017-03-28T08:16:47.533" LastActivityDate="2017-03-28T08:16:47.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2502" PostTypeId="1" AcceptedAnswerId="2503" CreationDate="2017-03-16T21:37:52.440" Score="8" ViewCount="1975" Body="&lt;p&gt;I think there is a long history of application vendors going to great lengths to complain or litigate against Operating System vendors to compete fairly. Specifically, I am talking about &quot;fairness&quot; with respect to the OS-vendor creating, marketing, and selling end-user applications that were broadly popular in the early days of computing. This would include business applications for accounting or database management, spreadsheets, word processors, and other utilities popular in the day but unlikely to be shipped with the OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some &quot;Retro&quot; examples of the controversy between OS and application vendors, dating back to the 1980's, would be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Apple famously split off &lt;em&gt;Claris&lt;/em&gt; around 1987 to be a separate company engaged in the development and marketing of popular application suites for the Macintosh and Apple ][ family (i.e. &lt;em&gt;AppleWorks&lt;/em&gt;). Purportedly, this was done to foster a more healthy relationship between Apple and independent application vendors.&lt;/li&gt;&#xA;&lt;li&gt;As early as 1984, companies like &lt;em&gt;Lotus&lt;/em&gt; and &lt;em&gt;WordPerfect&lt;/em&gt; seemed concerned with Microsoft using their dominance of PC-DOS as a springboard to compete with new applications, like &lt;em&gt;Multiplan&lt;/em&gt; and &lt;em&gt;Word&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The initial investigations into Microsoft's bundling and tying practices began around 1992 with an investigation by the U.S. Federal Trade Commission. An agreement was reached to end the bundling. In the late 1990's, Microsoft would be sued, lose the suit, and only narrowly escape being split into two companies - one for OS and one for applications.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It's not difficult to fathom how the independent application vendors could feel their business was threatened if engineers working on applications could collaborate with engineers working on the OS within the same company. Were they just being paranoid? Assuming this &lt;em&gt;was not&lt;/em&gt; paranoia, what was the earliest instance of a mass-market application vendor challenging an OS vendor over the OS vendor competing &quot;unfairly&quot; in the market for similar applications?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is conceivable, I think, that this was actually an issue of &lt;em&gt;Microsoft anti-competitive&lt;/em&gt; practices alone. I'm specifically looking for concrete instances of these complaints &lt;em&gt;before&lt;/em&gt; Microsoft's rise. I would assume the large application markets for CP/M (DRI), PDP, VAX (DEC), and IBM machines would have encountered this problem before Microsoft.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-03-21T20:47:05.593" LastActivityDate="2017-03-26T14:35:39.907" Title="Was it Microsoft that started the war between Application and OS vendors?" Tags="&lt;history&gt;&lt;ms-dos&gt;&lt;apple&gt;&lt;operating-system&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2503" PostTypeId="2" ParentId="2502" CreationDate="2017-03-17T07:44:43.907" Score="16" Body="&lt;p&gt;It could be argued that the “war” started with the creation of the software industry, when IBM unbundled its software and services in 1969. Before then, you’d lease a computer and get the software and services along with it. After 1969, leasing or buying the computer was one thing, buying software and services another. Quite a few IBMers and others started their own software businesses, and right from the start they were competing with the OS manufacturer (at least in IBM’s case). (See the last season of &lt;em&gt;Mad Men&lt;/em&gt; for a recent depiction of this.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM was under investigation all through the seventies for monopolising the computer market, and was as a result very careful to behave “correctly”. That didn’t stop them from engaging in a wide variety of predatory business practices, and IBM was the industry’s big bad wolf until Microsoft took its place in the nineties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Competing with the OS vendor is a fact of life in some parts of the software industry, notably in gaming, starting back in the Atari days and continuing today with Nintendo etc. (the latter also being their systems’ gatekeepers). In the application world there were fewer opportunities for this kind of strife: there weren’t many companies which were interested both in developing operating systems and applications running on those operating systems. Applications as we understand them nowadays weren’t a thing before the advent of micro-computers: before that, non-batch applications were stand-alone devices (typically, word processors), so there was no competition between the operating system vendor and the application vendor. The first software application is perhaps &lt;a href=&quot;https://en.wikipedia.org/wiki/Electric_Pencil&quot; rel=&quot;noreferrer&quot;&gt;Electric Pencil&lt;/a&gt;, released for the MITS Altair in 1976 (and MITS was in no position to compete with application vendors). I don’t think any of the companies you mention ever had a serious application development arm: Digital Research developed operating systems, language tools and GEM; DEC built hardware and operating systems, but no applications; IBM did have software such as &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Administrative_Terminal_System&quot; rel=&quot;noreferrer&quot;&gt;ATS&lt;/a&gt; but it never dominated any application market after the unbundling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An early example of an OS vendor interested in producing applications and trying to control the market is Atari; they developed the operating systems for their range of 8-bit computers in the late seventies, and also developed a range of applications in the early to mid-eighties (&lt;a href=&quot;http://en.wikipedia.org/wiki/Atari_Writer&quot; rel=&quot;noreferrer&quot;&gt;AtariWriter&lt;/a&gt; for example). At first, they only provided technical documentation for their platform to companies willing to sign an NDA, and it was only with the publication of &lt;a href=&quot;https://en.wikipedia.org/wiki/De_Re_Atari&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;De Re Atari&lt;/em&gt;&lt;/a&gt; in 1982 that documentation became widely available (coincidentally, Atari released their own official documentation in 1982; &lt;em&gt;De Re Atari&lt;/em&gt; itself was written by Atari employees and published by APX). Atari weren’t the only OS vendor publishing applications — Apple had their &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Writer&quot; rel=&quot;noreferrer&quot;&gt;Apple Writer&lt;/a&gt; — but as far as I’m aware they’re the only vendor which didn’t play nice with their platform’s (potential) ISVs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the business world it’s often said that complaints about companies are only posturing until they become a lawsuit. Looking at the software industry from that angle, I can’t think of any lawsuit by ISVs against an OS vendor competing with them in the application space until the Microsoft anti-trust lawsuits in the early nineties. There were lawsuits in the eighties, but primarily between OS vendors (Apple v. Microsoft) or between application vendors (Lotus v. Borland etc.). The PC software market wasn’t dominated by an OS vendor until Microsoft’s dominance in the late nineties: before that, the dominant applications were WordPerfect in the word processor space, VisiCalc then 1-2-3 in the spreadsheet space, and dBase in the database space. The story is slightly different on the Macintosh, where Claris had a few market-leaders (FileMaker in particular), but Microsoft quickly dominated the Macintosh software market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things really came to a head with the sudden rise of Windows with &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2386/79&quot;&gt;the release of version 3.0&lt;/a&gt;. At the time, Microsoft was one of the only vendors actively developing software for Windows (Word and Excel); the other incumbents were either developing for OS/2 (Lotus) or largely resting on their DOS laurels (WordPerfect; see &lt;a href=&quot;http://www.wordplace.com/ap/index.shtml&quot; rel=&quot;noreferrer&quot;&gt;W. E. Pete Peterson’s very interesting &lt;em&gt;Almost Perfect&lt;/em&gt;&lt;/a&gt; — Microsoft were actively courting ISVs so that their platform would be a success). At the time, the future of the PC was still very much up in the air, and many industry pundits still thought that DOS was dead and people should be looking at NeXTSTEP, Unix, OS/2, or even MacOS, and many ISVs were spending time porting their software to other platforms (Lotus with Improv on NeXT and 1-2-3 on OS/2 and MacOS, WordPerfect on everything from the Atari ST to Unix...). Microsoft were in the unique position of having applications ready for Windows, and suddenly having a decent platform (Windows 3.0 meant that Word and Excel could run much better than anything in DOS, without any changes). At this point, the lack of separation between the OS and application divisions became a real issue: while Microsoft had no doubt been able to take advantage of undocumented features in DOS, that didn’t seem to have much effect in the application market; in Windows it became much more obvious that Microsoft’s applications performed better thanks to the use of undocumented features. Microsoft were also in the unique position of being able to bundle applications along with the operating system, and that’s where the main complaints came from (and the lawsuits, albeit somewhat artificial — you could argue that Novell’s nineties buying spree was more about building a case against Microsoft than building a really competitive application suite).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the utility space the situation is different again, with many vendors being driven out of business when equivalent tools were integrated into the operating systems. The vendors that survived were those that either licensed their technology to the OS vendor (Central Point, Norton) or those that uped the ante and produced even better tools (Quarterdeck, at least with its QEMM). Lawsuits did occur too; the most famous of these are the suit brought by Stac Electronics against Microsoft after the release of MS-DOS 6.0 with Doublespace, and of course United States v. Microsoft which centred on the bundling of Internet Explorer with Windows 95 (before which there was a booming Internet browser industry, not just Netscape Navigator).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this to say that as far as I can tell, although the ingredients were there earlier, and some companies did attempt to take advantage of their position as OS vendor to help their applications, Microsoft was the first company to dominate the markets with their OS &lt;em&gt;and&lt;/em&gt; their applications, and as such was the first company (and so far only...) to attract serious complaints and lawsuits from ISVs.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2017-03-26T14:35:39.907" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2504" PostTypeId="1" CreationDate="2017-03-17T08:20:22.437" Score="5" ViewCount="802" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NcB9i.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NcB9i.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm currently running NOP   on a Z80A cpu. All it does it flash some led, I expected it to flash 1 by 1.&#xA;The led are place from address 16-0&lt;/p&gt;&#xA;" OwnerUserId="4720" LastActivityDate="2019-03-31T02:53:21.063" Title="What does the blinking of the cpu address bus actually means?" Tags="&lt;z80&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="2505" PostTypeId="2" ParentId="2504" CreationDate="2017-03-17T09:36:51.747" Score="6" Body="&lt;p&gt;The LEDs show individual bits of address that is currently accessed. This is a binary representation and each combination of on/off LEDs corresponds to different address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you are giving it a hardwired NOP instruction, the address grows sequentially like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0000 0000 0000 0000&#xA;0000 0000 0000 0001&#xA;0000 0000 0000 0010&#xA;0000 0000 0000 0011&#xA;&amp;lt;and so on...&amp;gt;&#xA;1111 1111 1111 1111&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;After that it rolls over back to all zeros. If you gave it some real code that does something, the LEDs would not grow sequentially due to branches in code. They would also show memory addresses being accessed for reading or writing.&lt;/p&gt;&#xA;" OwnerUserId="156" LastActivityDate="2017-03-17T09:36:51.747" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2506" PostTypeId="2" ParentId="2502" CreationDate="2017-03-17T12:39:21.147" Score="4" Body="&lt;p&gt;That &quot;war&quot; is/was not a general one and not in all brands of computers. Also, it was maybe more present in areas that targeted business customers (which is where the money is) than in typical home computer markets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sinclair and Amstrad as notable vendors of home computers and, as such, &quot;OS vendors&quot;, for example, didn't even develop their own application software. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both did re-selling of third-party applications under their own label, in the case of Amstrad only very reluctantly through Amsoft, the unloved Amstrad software arm that was only seen as a means of initial market push and very early ceased away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reason for that is that in the early days, the &quot;OS&quot; in this market was considered a non-divisable part of the computer (in most cases, it even physically was, as it was delivered in ROMs). Once the computer was sold, there was no other way to sell a new version of the OS than to sell a new computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, none of the two mentioned companies hadn't much of in-house software development capacity - Large parts of the Sinclair SW development was done by a company named &lt;em&gt;Nine Tiles&lt;/em&gt;, and Amstrad had most of their software contracted out to &lt;em&gt;Locomotive Software&lt;/em&gt;. Apparently, they believed the money was in hardware, not software.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-03-18T09:53:41.797" LastActivityDate="2017-03-18T09:53:41.797" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2507" PostTypeId="2" ParentId="2494" CreationDate="2017-03-17T18:31:37.507" Score="23" Body="&lt;p&gt;I might have found a stable way to limit Windows 98 to use only 1 GiB of RAM with &lt;strong&gt;HimemX&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Install Windows 98 with 1 GiB of RAM or less;&lt;/li&gt;&#xA;&lt;li&gt;Download &lt;code&gt;himemx&lt;/code&gt;from &lt;a href=&quot;https://sourceforge.net/projects/himemx/;&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sourceforge.net/projects/himemx/;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Extract &lt;code&gt;himemx.zip&lt;/code&gt; and copy &lt;code&gt;himemx.exe&lt;/code&gt; to &lt;code&gt;C:\Windows\&lt;/code&gt; under Windows 98;&lt;/li&gt;&#xA;&lt;li&gt;Open the Run dialog box (Windows + R), type &lt;code&gt;sysedit&lt;/code&gt; and press Enter;&lt;/li&gt;&#xA;&lt;li&gt;Open the file &lt;code&gt;C:\CONFIG.sys&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;At the very beginning of the file, add &lt;code&gt;device=C:\WINDOWS\HIMEMX.EXE /MAX=1048576&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;Save the modification;&lt;/li&gt;&#xA;&lt;li&gt;Shutdown your system;&lt;/li&gt;&#xA;&lt;li&gt;Install the 2 GiB of RAM;&lt;/li&gt;&#xA;&lt;li&gt;Start the system;&lt;/li&gt;&#xA;&lt;li&gt;Windows 98 should now only have 1 GiB of RAM although 2 GiB are installed and it should still be stable.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can also add &lt;code&gt;MaxFileCache=524288&lt;/code&gt; under &lt;code&gt;[vcache]&lt;/code&gt; in &lt;code&gt;system.ini&lt;/code&gt; to ensure that Windows 98 doesn't eat too much RAM for its cache.&lt;/p&gt;&#xA;&lt;p&gt;Limiting RAM to 1 GiB with HimemX seems like a stable fix, but I couldn't get the 2 GiB of RAM to work under Windows 98. But it still enables use of 2 GiB of RAM under another OS in a dual boot setup.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;P.S: If there are no answers posted in the next few days that explain how to fully use the 2 GiB of RAM under Windows 98, I'll mark this one as the answer.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="2109" LastEditorUserId="6659" LastEditDate="2020-08-07T20:51:40.420" LastActivityDate="2020-08-07T20:51:40.420" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="2508" PostTypeId="2" ParentId="459" CreationDate="2017-03-19T06:04:40.237" Score="2" Body="&lt;p&gt;My Apple ][ is SN 66XXX dated week 23 of 1980.  I agree with Howard Poe that there were a lot more Apple ][ computers produced than 20,000.  If there were only 20,000 produced the price for one would be astronomical but they can still be purchased for a somewhat reasonable price.  The release of the Apple ][+ in 1979 was not accompanied by an immediate cutoff of Apple ][ production as the Apple // production timeline graphics would have you believe.  So I would definitely revise Nick Westgate's Apple ][ production number, but I think his other guestimates are reasonable, given the limited production data that is available.  &lt;/p&gt;&#xA;" OwnerUserId="4723" LastActivityDate="2017-03-19T06:04:40.237" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2509" PostTypeId="1" CreationDate="2017-03-20T10:26:27.513" Score="12" ViewCount="705" Body="&lt;p&gt;Did the Apple ][ ever ship with an autostart ROM from the factory or were they all the older ROM with Trace/Step? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess would be that once the ][+ started shipping then new Apple ][ production (well at least once the non-autostart ROMs ran out) would have an autostart ROM but I can't find anything to confirm this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just to add Jim Sather in &lt;a href=&quot;https://archive.org/details/understanding_the_apple_ii&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/understanding_the_apple_ii&lt;/a&gt; says that his rev 3 board came with a non-autostart ROM. (Thanks to @blrfl for making me check this)&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2017-03-20T16:11:01.317" LastActivityDate="2020-09-29T15:10:36.367" Title="Did the Apple ][ ever ship with the Autostart ROM" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2511" PostTypeId="2" ParentId="166" CreationDate="2017-03-20T21:53:45.417" Score="5" Body="&lt;p&gt;It is a problem with the format of the disk: when a disk gets formatted, each track has more or less the same information to define a track (start, id, and some empty space called a gap) and sectors on them (sync, sector id, data mark, gap, etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you get an error 02, the Bad Address Mark, it means that once the read cycle has synced with the track, it won't find the id of the sector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point there are 3 possibilities:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the disk is damaged&lt;/li&gt;&#xA;&lt;li&gt;the Toshiba is expecting a very specific format&lt;/li&gt;&#xA;&lt;li&gt;the geometry of the disk is not set properly&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Most likely it is the last one; and, if not, you may need to boot from a floppy to format the disk.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2017-03-20T21:53:45.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2512" PostTypeId="2" ParentId="2464" CreationDate="2017-03-20T22:25:47.673" Score="33" Body="&lt;p&gt;There are two elements:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The background&lt;/li&gt;&#xA;&lt;li&gt;The sprites&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The background is very straightforward:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vanishing point never changes so you have one graphic with a checkerboard in perspective. That graphic takes 2 bits per pixel so that you have the 2 checkerboard colors and the edges of the field color.&#xA;It just needs to be the width of the screen + 4 tiles (2 more checkerboard cells and 2 being the edge tiles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so, if on a given scan line you can see 5 tiles, the line would be like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;0 1 2 1 2 1 2 1 0&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;0 being the border color&#xA;1 and 2 being the tiles color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rest is simply horizontal scroll:&#xA;since you can, in this example, display 5 tiles at once, when you are on the play field you do a fine scroll until you have moved to the next tile and then you jump back:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;let's assume that the visible area is between brackets:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0....1[...2....1....2....1....2]...1....0&#xA;0....1.[..2....1....2....1....2.]..1....0&#xA;0....1..[.2....1....2....1....2..].1....0&#xA;0....1...[2....1....2....1....2...]1....0&#xA;0....1....2[...1....2....1....2....1]...0&#xA;0....1....2.[..1....2....1....2....1.]..0&#xA;0....1....2..[.1....2....1....2....1..].0&#xA;0....1....2...[1....2....1....2....1...]0&#xA;0....1[...2....1....2....1....2]...1....0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see, you can loop it again and again to make the screen look as wide as you want. Once you reach the virtual edges, you just leave the color 0 be displayed.&#xA;This is handled for free through the display list since you can change the display address and horizontal scroll registers automatically, per scan line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vertical motion is even simpler since it only requires to change the palette  every scan line, essentially inverting the colors of the checkerboard pattern.&#xA;All is needed is a lookup table for perspective and to know when to do the changes as the position determines where you start in the table (which just needs 2 more lines than what is visible as well, exactly the same way as the horizontal motion, since you're looping your start position between the 2 top cells). This can be done through the Atari 800's display list interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the sprites, there are stored at different sizes and orientations; knowing that you can double and quadruple their display size horizontally; also you can instruct the DMA to double up every line vertically as well, but this was not commonly used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can run your logic in 2d, all you need to do is a projection, which is essentially a division, to find the sprite size; The 6502 can't do divisions but since we're talking about a very simple case here (distance between the camera and the sprite on a single axis.. a subtraction), you can use a lookup table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game looks impressive, but it is technically very simple. If anything is not clear, just ask, I'll clarify the post.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastEditorUserId="3884" LastEditDate="2017-04-03T02:25:32.507" LastActivityDate="2017-04-03T02:25:32.507" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2513" PostTypeId="1" AcceptedAnswerId="2514" CreationDate="2017-03-21T00:13:55.943" Score="66" ViewCount="17288" Body="&lt;p&gt;This probably nearly belongs on Skeptics.SE but here goes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Within the last few years I've become an Apple convert for the most part, which occasionally brings me into (usually) good natured conflict with a good friend at work who hates Apple (and who got me the job because they needed an iOS developer, so obviously he can't hate Apple &lt;em&gt;too&lt;/em&gt; much)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway the other day though I got into an argument with him I don't have the answer to. The premise of his argument was that Apple could have ruled the world with the Macintosh (as in, Windows/IBM Compatibles wouldn't have had a 90% or whatever market share) but Steve Jobs was just too hard headed and wouldn't let anyone, except maybe Adobe, develop for it. That they wanted to control all the software and have it go through them, and since Microsoft didn't exert any such control, plus they were available on everything, they &quot;won&quot; and Apple floundered for years. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm almost certain he's wrong (for one, it sounds like he's conflating portions of the modern iOS App Store with what Apple could have pulled off in 1984) but I'm not finding a lot of real concrete data on what early Macintosh development really was like. One source I've read said that for a while there was some sort of issue which meant you had to write code on a previous machine, like the Lisa, and copy it over to a disk. I've also seen info that said Apple was just slow to deliver compilers and an SDK (another thing that at least parallels early iOS development). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did Apple originally not let anyone develop for the Macintosh or is this a myth based on some other factor like a lag time in getting developer tools out there?&lt;/p&gt;&#xA;" OwnerUserId="446" LastActivityDate="2020-04-04T17:28:29.693" Title="Did Apple not originally allow anyone to develop software for the Macintosh?" Tags="&lt;software&gt;&lt;apple-macintosh&gt;&lt;software-development&gt;" AnswerCount="12" CommentCount="12" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2514" PostTypeId="2" ParentId="2513" CreationDate="2017-03-21T00:35:53.723" Score="89" Body="&lt;p&gt;This is most certainly a myth. There was no conspiracy by Steve Jobs or Apple to prevent third-parties from engaging with the ecosystem that would eventually flourish for Classic Macintosh applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, one of the earliest, significant, 3rd party applications to be released for the Macintosh was &lt;em&gt;Microsoft Word&lt;/em&gt; in 1985. Microsoft had already developed &lt;em&gt;Word&lt;/em&gt; for other platforms, and was able to quickly port it to the Macintosh, thanks in part to Apple's assistance in granting Microsoft pre-release hardware and system software. In fact, members of the original Macintosh team have written about Steve Jobs specifically recruiting Microsoft to be involved in Macintosh application development, such as &lt;a href=&quot;http://www.folklore.org/StoryView.py?story=Shut_Up.txt&quot; rel=&quot;noreferrer&quot;&gt;this article by Andy Herzfeld&lt;/a&gt;. The original &lt;em&gt;Word&lt;/em&gt; for Macintosh was very successful, and actually outsold all other versions of &lt;em&gt;Word&lt;/em&gt; for the next 4 years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the first Macintosh released was severely challenged on RAM (only 128K), it could not be used as an effective development system. Normally, developers would &lt;a href=&quot;http://www.folklore.org/StoryView.py?story=3rd_Party_Developers_and_Macintosh_Development.txt&quot; rel=&quot;noreferrer&quot;&gt;use a Lisa with 1M RAM&lt;/a&gt; instead, and cross-compile their application to run on the Macintosh. This would have been a barrier to entry for very small developers only because the Lisa was an expensive bit of gear costing around $10,000+, but this was not a ploy to limit third-party application developers.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="320" LastEditDate="2017-03-25T01:54:01.000" LastActivityDate="2017-03-25T01:54:01.000" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="2515" PostTypeId="2" ParentId="2513" CreationDate="2017-03-21T01:16:13.763" Score="23" Body="&lt;p&gt;The first set of Inside Macintosh books was about 1000 pages of documentation covering everything you needed to write a Macintosh application, and was available from the beginning. It didn't only cover the APIs, but also gave advice on how to design the user interface, since it was one of the first GUIs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Folklore.org has a story about the process of writing Inside Macintosh: &lt;a href=&quot;http://www.folklore.org/StoryView.py?story=Inside_Macintosh.txt&quot; rel=&quot;noreferrer&quot;&gt;http://www.folklore.org/StoryView.py?story=Inside_Macintosh.txt&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="94" LastActivityDate="2017-03-21T01:16:13.763" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2516" PostTypeId="2" ParentId="2513" CreationDate="2017-03-21T01:19:28.397" Score="-1" Body="&lt;p&gt;Mac's success is largely caused by Microsoft. In the early days, Microsoft was one of the few firms that produced software for MacOS; without its software, one could argue that the MacOS brand would have quickly died out (who wants to buy into an OS with almost no software).&lt;/p&gt;&#xA;" OwnerUserId="4727" LastEditorUserId="534" LastEditDate="2017-03-21T13:01:53.813" LastActivityDate="2017-03-21T13:01:53.813" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2517" PostTypeId="1" AcceptedAnswerId="2529" CreationDate="2017-03-21T02:51:27.447" Score="16" ViewCount="797" Body="&lt;p&gt;Does anyone know the source of this Apple II DOS 3.3 virus that infected my disks back in the 1990's? I got it from a public domain disk collection that was given to me by a friend, called the &lt;strong&gt;Freeloader Library&lt;/strong&gt;, which was sold commercially in the back of computer magazines in the 1970s-80s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Video of this Apple II virus in action:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=rSgqX8ua2F8&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=rSgqX8ua2F8&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no identifying information that I can find in the DOS hex code in memory, so I have no clue where this came from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Method of operation:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Boot from the viral DOS 3.3&lt;/li&gt;&#xA;&lt;li&gt;Insert a disk with some other DOS. Catalog it. Viral DOS checks to see if it is present on this disk. If not, then it overwrites the DOS and installs itself, and does a normal catalog.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Method of attack:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;After typing CATALOG 8 times, it zeroes the current target disk drive and modifies the reset vector so that you cannot break out of the destructive writing. Have to power off (for II/II+) or Control-OpenApple-Reset (IIe/IIc/IIgs) to regain control.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(This is one piece of software that I have no intention of uploading to Apple II disk archives to be preserved for future generations to experience.)&lt;/p&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="3687" LastEditDate="2017-03-21T03:03:47.370" LastActivityDate="2017-08-22T15:47:43.503" Title="Apple II: DOS 3.3 Virus?" Tags="&lt;apple-ii&gt;&lt;apple-dos&gt;&lt;malware&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2518" PostTypeId="2" ParentId="2513" CreationDate="2017-03-21T04:17:00.603" Score="0" Body="&lt;p&gt;Back then Apple didn't have the AppStore (this has only appeared since the iPhone), so it was possible to write software for the Macintosh, as it was then, and distribute it on 3.5&quot; floppy disks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trouble is, it was devilishly complicated (witness the size of the documentation, which was also v. expensive) and there wasn't an internet from which to glean examples and get questions answered. And it was all in C, or later Objective-C. So many tried and many gave up the will to live. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wish I'd persevered...&lt;/p&gt;&#xA;" OwnerUserId="4729" LastActivityDate="2017-03-21T04:17:00.603" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2519" PostTypeId="2" ParentId="2513" CreationDate="2017-03-21T09:51:43.363" Score="4" Body="&lt;p&gt;Developing software for the Mac was certainly very expensive and complicated, but it wasn't really part of Apple's strategy - it was a trade-off that didn't pay off. It wasn't that Apple &lt;em&gt;actively hindered&lt;/em&gt; developers (apart from providing quite a bit of bundled software). It's just that you needed to learn a new language, a huge new API, a completely new programming style, buy at least two Apple computers (the Mac itself wasn't really powerful enough for development)... Quite a bit of investment at a time where Apple &lt;em&gt;seemed&lt;/em&gt; to be chaotically changing everything all the time, so you could expect that the next generation hardware and software would again be 100% incompatible with the previous generation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple certainly tried to attract developers. The most obvious being the near-partnership with Microsoft (which were one of the few companies who actually released software for the Mac). They just weren't very successful, despite making claims to the contrary. The Mac managed to outsell the IBM PC by quite a margin at first - but while the Mac was left with just the claims, the IBM PC compatibles actually had the software. It still got considerable presence in DTP and graphics in general, something that survives to this day to some extent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the main problem was still that it wasn't compatible with anyone else (including Apple's own computers); why would you write a software at great expense that would only run on a tiny margin of computers that were quite a bit more expensive than the competition? Microsoft built up on being compatible with as much of the market as possible; the others (both on the IBM market and Apple) tried to keep everything closed and incompatible, and lost. It's ironic how one of the biggest vendor locks ever only really occured because Microsoft &lt;em&gt;didn't&lt;/em&gt; try to lock anyone in - they welcomed everyone, so they became the natural choice for almost everyone; and replicating their success would mean not doing &quot;a nice, clean system&quot; - it would mean all the little compatibility tweaks and hacks that made everything work well together. It's quite a feat that DOS applications still run perfectly fine on Windows 10.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic idea is quite simple. Computer is a platform. OS is a platform. Their only purpose is to run applications. So do you pick the platform that can run all your applications, or the platform that makes you throw them away &lt;em&gt;on purpose&lt;/em&gt;? And to make things even worse, Apple emulators sprung up all over the place, capable of giving you a 100% Apple compatible clone on an IBM PC (clone) that cost a fraction of an Apple PC. IBM PC was designed from the ground up as an open platform (though it backfired - IBM expected to complementarize the extension card market, but they actually lost control of the PC itself); the resulting market was very active, bringing the margins and prices very low. The real winner was the customer (yay!) and Microsoft (by becoming the true common platform for everyone to target). They didn't try to take over the applications (though there certainly had been periods of that as well), they let people develop them, just like they didn't try to make their own, closed, hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple wasn't really a company you could rely on as a developer at those times. Apple II was very popular with developers, but the introduction of Mac and Lisa made things a lot trickier (and they all kind of run in parallel). Steve Jobs had an appreciation for elegance, beauty; he certainly cared a lot more about the user experience than the developer experience. Some aspects of the company could be seen as rather chaotic - requiring you to learn a whole new language (new as in &quot;not used before on Apple computers&quot;) to program for the new platform, and then dropping it in the next. APIs that were either entirely incompatible, or at least required some upgrade process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It certainly wouldn't be &lt;em&gt;out-of-character&lt;/em&gt; for Jobs to try to control the whole software market for Apple computers (just like Apple mostly did for the hardware). But it wasn't really possible. There was no legal or technical way he (or Apple) could enforce that, so the only real influence they could have would be to make poor tools, documentation, APIs for developers. And they weren't really &lt;em&gt;poor&lt;/em&gt;; they were just a bit too inconvenient - I wouldn't assume they were &lt;em&gt;intentionally&lt;/em&gt; sabotaged, they just didn't seem attractive enough. Could it be fixed with a bit more directed effort? Not really. It would need a huge amount of effort, and Apple at the time didn't really care that much about making it easier for others to compete with Apple (you can see the same episodes with many companies - Microsoft, Oracle, IBM...). You can still see this today - even minor updates of Apple OSs routinely break applications developed for the previous version. The iOS market shows how Apple might have been in control in time of the Mac &lt;em&gt;if&lt;/em&gt; such control were possible then - but even there you can clearly see that software from other developers is encouraged - just under Apple's conditions.&lt;/p&gt;&#xA;" OwnerUserId="542" LastEditorUserId="542" LastEditDate="2017-03-23T13:34:04.080" LastActivityDate="2017-03-23T13:34:04.080" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2520" PostTypeId="2" ParentId="2513" CreationDate="2017-03-21T10:53:32.317" Score="32" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The premise of his argument was that Apple could have ruled the world with the Macintosh (as in, Windows/IBM Compatibles wouldn't have had a 90% or whatever market share) but Steve Jobs was just too hard headed and wouldn't let anyone, except maybe Adobe, develop for it. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is actually a distortion of the real argument. Apple never stopped other developers from writing software for the Macintosh although it is possible that Steve Jobs wanted some sort of ecosystem similar to the iOS app store. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real argument is that Apple could have ruled the world (in personal computer terms) if they had been prepared to licence the operating system to other PC hardware manufacturers. That way (the argument says) the world would be full of Macintosh clones and not IBM PC clones. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The argument has some merit: in the mid to late 80's everything about the Mac was superior to the IBM PC except the price. A whole load of clones would have solved that issue and everybody would have been happy...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... except Apple. The difference between Apple and Microsoft is that Apple is and always has been a hardware company. Apple would not have been able to compete with the clone makers (think how many PCs IBM sells now) and it would have been reduced to being the company that sold the operating system. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-03-21T10:53:32.317" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="2521" PostTypeId="1" AcceptedAnswerId="2524" CreationDate="2017-03-21T12:36:57.613" Score="11" ViewCount="4398" Body="&lt;p&gt;I would like to use an Amiga-looking keyboard on my PC.  (I prefer not to use my old original A2000 keyboard with an &lt;a href=&quot;http://ezhid.sourceforge.net/amikbd.html&quot; rel=&quot;noreferrer&quot;&gt;adapter&lt;/a&gt;, partly because it lacks many keys present on modern 105-key keyboards, and partly because it's not localized.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far the best option I've found is to buy a &lt;a href=&quot;http://www.wasdkeyboards.com/&quot; rel=&quot;noreferrer&quot;&gt;WASD custom keyboard&lt;/a&gt; with the keys appropriately painted white or grey. Unfortunately, a white or beige base is not available, only a black one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there other options?  &lt;/p&gt;&#xA;" OwnerUserId="4737" LastActivityDate="2019-07-28T12:09:57.920" Title="Amiga-looking keyboard for PC" Tags="&lt;amiga&gt;&lt;keyboards&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2522" PostTypeId="2" ParentId="2513" CreationDate="2017-03-21T13:16:18.583" Score="2" Body="&lt;p&gt;In the mid 80s I was working for Pete &amp;amp; Pam Computers - at the time the biggest UK distributor/retailer of Apple/PC hardware/software in the UK (we were Microsoft's reps in this country until they established an office over here, which happened surprisingly late) and I remember that about the only business software available for it was by Microsoft, including Multiplan, Word and Chart, along with Aldus Pagemaker (they weren't bought by Adobe until 1994).&#xA;The big lock in was with the OS and the hardware - we had a very nice little business in adding 3rd party hard drives to original machines (the official hard disk equipped machines were frightenly expensive).&#xA;I remember being impressed by its originality but unconvinced about its prospects - mind you, I thought the same about Windows 1.0&lt;/p&gt;&#xA;" OwnerUserId="4738" LastActivityDate="2017-03-21T13:16:18.583" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2523" PostTypeId="2" ParentId="2513" CreationDate="2017-03-21T15:17:36.643" Score="5" Body="&lt;p&gt;Having rediscovered the original text while researching a comment to another answer here, &lt;a href=&quot;http://www.lettersofnote.com/2012/02/apple-must-make-macintosh-standard.html&quot; rel=&quot;noreferrer&quot;&gt;Bill Gates wrote this to Apple in 1985&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Apple must make Macintosh a standard. But no personal computer&#xA;  company, not even IBM, can create a standard without independent&#xA;  support. Even though Apple realized this, they have not been able to&#xA;  gain the independent support required to be perceived as a standard.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[...]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The Macintosh has failed to attain the critical mass necessary for the technology to be considered a long term contender: ...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;d. Independent software and hardware manufacturers reinforced the risky perception of the machine by being slow to come out with key software and peripheral products.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The thrust of the memo is to argue for a licensing of the OS, to which Microsoft wants to contribute, but as to the proposition that &quot;Steve Jobs was just too hard headed and wouldn't let anyone, except maybe Adobe, develop for it&quot;, the contemporaneous Bill Gates recognises that Apple realised it needed independent support and attempted to obtain it, and places the blame for slow software releases on independent software developers. So the proposition is false.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: see also &lt;a href=&quot;https://youtu.be/YShLWK9n2Sk?t=2781&quot; rel=&quot;noreferrer&quot;&gt;this moment in the original 1984 Macintosh presentation&lt;/a&gt;. It's partway through the first carousel of Macintosh application screenshots, showing a Pascal development environment. Which — regardless of whether it correlates to anything real that actually shipped — would be odd were Apple intending not to &quot;let anyone, except maybe Adobe, develop for it&quot;.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-03-21T16:05:35.693" LastActivityDate="2017-03-21T16:05:35.693" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2524" PostTypeId="2" ParentId="2521" CreationDate="2017-03-21T15:34:18.907" Score="9" Body="&lt;p&gt;There is the X500 Evo mechanical keyboard. Unfortunately, this was produced for an X500 Kickstarter project, which is an A500 style computer case. It is no longer produced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see it on YouTube:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=e-DdAf7sOaY&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=e-DdAf7sOaY&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The project owner says that the keys are standard Cherry MX and are still available.&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="576" LastEditDate="2018-11-27T10:12:33.450" LastActivityDate="2018-11-27T10:12:33.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2525" PostTypeId="2" ParentId="2513" CreationDate="2017-03-21T17:31:33.480" Score="14" Body="&lt;p&gt;Initially, Apple had a developer program, and I applied.  They rejected me.  At that point, I think they were looking for larger organizations, not individuals.  Without membership, API's were not available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That did not last long, though, and I bought Inside Macintosh as soon as they (several volumes) hit the market.  Those documented the API's, and the information got more and more open with time.&lt;/p&gt;&#xA;" OwnerUserId="4743" LastActivityDate="2017-03-21T17:31:33.480" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2526" PostTypeId="2" ParentId="2494" CreationDate="2017-03-21T17:41:27.007" Score="21" Body="&lt;p&gt;The Windows 98 memory manager only supports a maximum of 1GB. This amount of memory was considered beyond huge for the time, and by the time people commonly had that much or more memory, Microsoft expected people to be using either newer versions of Windows 9x, or Windows NT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/?p=42903&quot; rel=&quot;nofollow noreferrer&quot;&gt;Raymond Chen's blog The Old New Thing&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Windows 98 bumped the limit to 1GB because there existed a vendor (who shall remain nameless) who was insane enough to want to sell machines with 1GB of RAM and preinstall Windows 98 instead of the much more suitable Windows NT.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The linked blog post also goes into the technical reasons why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your workaround works, then stick with it. You'll only ever be able to use 1GB of RAM with Windows 98, but XP will be able to make use of the full 2GB.&lt;/p&gt;&#xA;" OwnerUserId="4744" LastEditorUserId="4744" LastEditDate="2019-06-21T16:17:50.023" LastActivityDate="2019-06-21T16:17:50.023" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="2527" PostTypeId="2" ParentId="2521" CreationDate="2017-03-21T17:53:17.177" Score="5" Body="&lt;p&gt;Individual Computers in Germany makes &lt;a href=&quot;https://icomp.de/shop-icomp/en/shop/product/amiga-keyboard-sticker.html&quot; rel=&quot;noreferrer&quot;&gt;Amiga Keyboard stickers&lt;/a&gt;. They seem to be available in black only (at least I think that's black), but in various languages.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-03-21T17:53:17.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2528" PostTypeId="2" ParentId="2513" CreationDate="2017-03-22T03:36:29.800" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;... Apple could have ruled the world with the Macintosh (as in, Windows/IBM Compatibles wouldn't have had a 90% or whatever market share) but Steve Jobs was just too hard headed and wouldn't let anyone, except maybe Adobe, develop for it. That they wanted to control all the software and have it go through them, and since Microsoft didn't exert any such control, plus they were available on everything, they &quot;won&quot; and Apple floundered for years.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why did Microsoft take the lead&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, you have to understand a bit out how computing was back then. It's very hard for us to understand today, as we have many computers in our homes, tables, and cells. Back then a computer was not something that a person would have. It was something that a business would have, and maybe just one or two of total, for a huge business. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsoft and Apple went after two very different markets at the start. MS went after the business man that wanted to work from home. You could have a MS-DOS PC that had some word processing and spreadsheet app, in your house. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple, on the other hand went after hardware.  Again this is tricky to understand today. But essentially MS would let anyone that wanted to build hardware and run their OS. Apple on the other hand wanted to make sure that the OS only ran on &quot;their&quot; hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while apple was focused on pushing their &quot;hardware&quot; Microsoft focused instead on pushing their &quot;software&quot;. The push hardware model was certainly &quot;the way things were done&quot; Tandy, Atari, etc, had showed some success in this area, while at the same time, software was thought to be risky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However Microsoft's approach to pushing software worked out. Other companies (like IBM and Packard-Bell most notable at the start) already had established hardware channels and were able to &quot;retro fit&quot; MS DOS onto existing hardware cheap and easy. A small boost, that Microsoft was able to turn into a big win.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Steve Jobs was just too hard headed..&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Possibly, I don't know him personally, but he has a reputation for being stubborn and demanding. Though, he never, at any time that I can recall, outright blocked app development, or even tried to. The app store, as it is today, didn't exist, and it's mostly market share that lead companies to decide to write code or not for apple. That said, he did spear head a decision process that would come back and lend a little truth to this argument.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Few people wrote applications&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is true. Mostly for market share reasons as noted above, but for one other, really big reason. No one wanted to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As much as we developers go where the money is, we also have a strong ability to influence what platforms we develop for. Microsoft had a massive list of &quot;compatible languages&quot;. Back then there was BASIC which was good for hobbies and small programs, but bad for complex programs (though it was used anyway). Assembly, which no one liked but we all could use (a lot of programming back then was just wrapping assembly calls in something else), C/C++, Borland C (C but a little different) Fortran, Delphi, etc. etc. etc. There were libraries and tool chains to help you out, and just a bunch of choices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Apple side of the fence there, Apple decided, early on, to focus on a single good, solid tool chain, instead of a hoge-poge of middling tools. There was more then one language, there was more then one tool chain, but when it all came down to it, there were just more restrictions and fewer choices to work from. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What essentially happened is that &quot;it was no fun&quot;, so fewer developers would write code for it. The developers that could or would charged more, and thus an application had to be larger to to make money and support development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the same time Apple had carved out a market sector and couldn't really break into new areas. They dominated in Education and Graphic Work, and, in those areas, they had plenty of companies willing to write code for them. The products they made were successful enough they could pay the developers more, so the developers were willing to have &quot;less fun&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Microsoft side of things, there were &quot;tons&quot; of developers willing to work for little or no money. Their platform was &quot;fun&quot; enough and had enough choices, that applications, not all of them good, flourished. There were tons of crap applications that barely worked, or didn't work at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example, lets say 1 in 100 applications for DOS and windows were &quot;good&quot; applications, and 1 in 5 applications for Apple OS were &quot;good&quot;. Windows/DOS had thousands of applications, Apple only had 500. Yes apple had the &quot;it works&quot; thing going for them. But if you wanted to do a thing you maybe only had a choice or two to choose from. In Microsoft land you could have 10s or hundreds to choose from, even if a lot of them sucked. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This spiraled a bit, and it looked like Apple would fail, or at least &quot;stay small&quot;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Did Apple originally not let anyone develop for the Macintosh or is this a myth based on some other factor like a lag time in getting developer tools out there?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Neither, their developer tools were out from day one, and they were very open with letting applications on their platform back then. It just wasn't fun, they failed to attract developers (companies or people), so their application pool suffered. MS on the other hand successfully attracted tons of developers. This made dev costs for an Apple app go up and a DOS app go down. So much that you would only attempt to write code for an apple product if it was a &quot;sure thing&quot; and if the potential market was large enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was, back then, never any direct resistance to making an application for Apple OS. It just wasn't fun or profitable to do so. Anyone could do it, and Apple even had some programs to help with costs, but the tools and decisions involved, just didn't appeal to most.&lt;/p&gt;&#xA;" OwnerUserId="454" LastEditorUserId="454" LastEditDate="2017-03-23T06:37:57.960" LastActivityDate="2017-03-23T06:37:57.960" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2529" PostTypeId="2" ParentId="2517" CreationDate="2017-03-22T11:30:21.620" Score="10" Body="&lt;p&gt;What you're looking for is called &lt;em&gt;Killer DOS&lt;/em&gt;, which behaved exactly like the &lt;em&gt;Unnamed First Virus&lt;/em&gt; described on the &lt;a href=&quot;https://apple2history.org/history/ah23/&quot; rel=&quot;noreferrer&quot;&gt;Apple II History &lt;em&gt;Viruses&lt;/em&gt; page&lt;/a&gt;.  Killer DOS may have been the second version described on that page.  I first saw it in the flesh in 1983 or 1984.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's &lt;a href=&quot;http://apple2.callapple.org/mboard/messages/1220.html&quot; rel=&quot;noreferrer&quot;&gt;a reference&lt;/a&gt; (although not much of one) to it having been written by a Bill Bach, who may be the founder of Goldstar Software in Illinois.  His bio contains material that he would have been doing things with Apples during that era; you might drop him a line and ask.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't say I know a great deal about how it was implemented, but it wouldn't have been difficult to &lt;code&gt;JMP&lt;/code&gt; out of the &lt;code&gt;CATALOG&lt;/code&gt; routine at &lt;code&gt;$A56E&lt;/code&gt;, do your business plus whatever instructions were wiped out by replacing the first few bytes and &lt;code&gt;JMP&lt;/code&gt; back into the right place.&lt;/p&gt;&#xA;" OwnerUserId="749" LastActivityDate="2017-03-22T11:30:21.620" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2530" PostTypeId="1" AcceptedAnswerId="2532" CreationDate="2017-03-22T15:39:13.017" Score="12" ViewCount="2228" Body="&lt;p&gt;What is the name of the back arrow key on top left corner of the C64 Keyboard?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it escape or back? Also I don't recall using this key. What was the intended usage of it?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4BguV.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4BguV.gif&quot; alt=&quot;Commodore64 Keyboard Layout?&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3422" LastActivityDate="2017-03-22T22:19:09.267" Title="What is the name of the back arrow key on C64 keyboard?" Tags="&lt;commodore-64&gt;&lt;keyboards&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2531" PostTypeId="2" ParentId="2530" CreationDate="2017-03-22T15:57:37.297" Score="8" Body="&lt;p&gt;It actually typed a left-pointing arrow. It's from an early version of ASCII (1963 rather than the &quot;modern&quot; 1967 version) that was used for the basis of &lt;a href=&quot;https://en.wikipedia.org/wiki/PETSCII&quot; rel=&quot;noreferrer&quot;&gt;PETSCII&lt;/a&gt;; in the 1967 version of ASCII we know and love today, this character was replaced with an underscore. I don't recall if it has a name; it's probably just &quot;left-arrow&quot; or something.&lt;/p&gt;&#xA;" OwnerUserId="1931" LastActivityDate="2017-03-22T15:57:37.297" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2532" PostTypeId="2" ParentId="2530" CreationDate="2017-03-22T16:29:46.090" Score="7" Body="&lt;p&gt;According to &lt;a href=&quot;https://www.cs.tut.fi/~jkorpela/latin1/ascii-hist.html#5F&quot; rel=&quot;noreferrer&quot;&gt;this source&lt;/a&gt;, which seems to have been written with visibility of ANSI X3.4-1963, the original ASCII standard, it's simply &quot;a left-pointing arrow. This character was used as an assignment operator in some programming languages.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The character lives on in unicode as &lt;a href=&quot;http://www.kreativekorp.com/charset/encoding.php?name=ANSI%20X3.4-1963&amp;amp;char=5F&quot; rel=&quot;noreferrer&quot;&gt;U+2190&lt;/a&gt; where it has the formal name &quot;LEFTWARDS ARROW&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's unlikely to have been an influence on Commodore, but ← continued to serve as an assignment operator at least as late as Smalltalk-80:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZXHxg.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZXHxg.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-03-22T16:37:26.553" LastActivityDate="2017-03-22T16:37:26.553" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2533" PostTypeId="2" ParentId="2513" CreationDate="2017-03-22T17:18:31.937" Score="3" Body="&lt;p&gt;I have to agree with the &quot;it's a myth&quot; crowd, but I need to add that Apple's troubles are more about the hardware than software: The PC hardware platform rapidly became rather open, as it was built out of off-the-shelf parts.  Note that this openness wasn't &lt;em&gt;by design&lt;/em&gt;, but it happened anyways.   Mostly due to Compaq, if I recall correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple, back then, was just like it was now hardware wise: only they are allowed to make Apple devices, and they come in the designs and prices that Apple deems appropriate.  There's no low-end companies sneaking in to address budget-sensitive customers, nor high-end companies addressing the high performance or gaming customers.  Your Model T will be painted black, and you will like it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Granted, this often isn't useful to the parent company (IBM doesn't even make PCs anymore; they sold their business a ways back to Lenovo), but it is quite good for the &lt;em&gt;platform's&lt;/em&gt; continued existence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The first and only thing we learn from history is that we learn nothing from history)&lt;/p&gt;&#xA;" OwnerUserId="4756" LastActivityDate="2017-03-22T17:18:31.937" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2534" PostTypeId="1" AcceptedAnswerId="2541" CreationDate="2017-03-22T17:35:58.643" Score="21" ViewCount="2784" Body="&lt;p&gt;I've read the term &lt;em&gt;screen holes&lt;/em&gt; many times in the context of Apple II graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I understand, it has something to do with the interleaving storage of graphics (or was it text) and that some programmers use this space for other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I can't seem to find an explanation of what they really are, why they are used or how important they are (if at all).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone explain what they are or at least point me to a good reference?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2018-06-09T21:39:20.833" Title="What are the &quot;Screen Holes&quot; in Apple II graphics?" Tags="&lt;apple-ii&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2535" PostTypeId="2" ParentId="2534" CreationDate="2017-03-22T21:54:09.490" Score="13" Body="&lt;p&gt;The book &lt;a href=&quot;https://archive.org/details/InsideTheAppleIIe&quot; rel=&quot;noreferrer&quot;&gt;Inside the Apple //e&lt;/a&gt; by Gary B. Little provides excellent explanations for why &quot;screenholes&quot; exist in the Apple II memory map, and how they are used, &lt;strong&gt;by convention&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The memory for each page of the display is a 1024-byte block, but each character on the 40x24 text display uses 1-byte, for a total of 960 bytes. This leaves an unused 64 bytes in the display memory block. These unused (for display data) &quot;screenholes&quot; are dispersed across the 1024-byte block as 8 separate 8-byte holes. The base addresses for the 8 holes are $478, $4F8, $578, $5F8, $678, $6F8, $778, and $7F8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;By convention&lt;/strong&gt;, each of these holes may be utilized as &quot;scratch pad&quot; RAM by each of the 7 peripheral cards. The convention is necessary so that other software does not stomp on these memory addresses. It is specifically set aside as peripheral &quot;scratch pad&quot; where each card gets 8 bytes, plus there is 8 bytes taken for DOS use. The addresses available to each card are based on which slot it occupies, and the 8 addresses assigned to the card are computed using, 's' as the slot number, thusly:  $478 + s, $4F8 + s, $578 + s, $5F8 + s, $678 + s, $6F8 + s, $778 + s, and $7F8 + s.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-03-25T21:16:52.450" LastActivityDate="2017-03-25T21:16:52.450" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2536" PostTypeId="2" ParentId="2504" CreationDate="2017-03-22T22:11:43.303" Score="7" Body="&lt;p&gt;Algimantas's answer is partly correct - the pins will begin to count in binary as these represent the 16-bit program counter (PC). But they also present an 8-bit I register, and 8-bit Refresh (R) counter.  Thus there is a different pattern on the upper 8 address lines than the &quot;expected&quot; straight binary pattern.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two things going on, an opcode fetch, and a refresh cycle. The LEDS are actually showing the contents of the PC register followed by the I register on the upper 8 bits of the address bus and R is on the bottom 8 bits.  It is further complicated by the length of the different registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.z80.info/z80_faq.htm#Q-1&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;I AND R REGISTERS.  What they do.&quot;&gt;See I AND R REGISTERS.  What they do.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;More detailed explanation:&lt;/strong&gt;  The Z80 fetches opcodes with a a cycle named &quot;M1&quot; which is 4 clocks long.  The PC is presented on the LED's during clock cycles T1 and T2.  A refresh cycle also occurs during T3 and T4 of all M1  cycles.   In T3 and T4,  the address pins present the contents of the 8-bit I register (interrupt page register) on the upper 8 bits, and the lower 8 bits is the R-register that also increments after each opcode fetch.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The R and I registers will start at 00 and the Z80 PC will start at 00000 on reset.  For the first 256 (Edit: actually 128) cycles, the LED will show  the I + Refresh and the PC RAM memory addresses in perfect sync.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But at cycle 128 (0x080), the pattern will change. The Refresh register will have wrapped around back to 0x00, so the pattern will change as shown below&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Address bits in Hex:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0x0000 M1 cycle (opcode fetch)&#xA;0x0000 Refresh cycle is made from I (00) + R (00)&#xA;0x0001 M1 cycle (opcode fetch)&#xA;0x0001 R&#xA;0x0002 M1 cycle (opcode fetch)&#xA;0x0002 R&#xA;&amp;lt;and so on...&amp;gt;&#xA;0x007f M1  cycle (opcode fetch)&#xA;0x007f R  they both still match.&#xA;0x0080 M1  cycle (opcode fetch)&#xA;0x0000 R &amp;lt;=- refresh register has wrapped around&#xA;0x0081 M1 &amp;lt;= but the Program Counter does not.&#xA;0x0001 R &amp;lt;= refresh is now at a count of 1&#xA;0x0081 M1 &amp;lt;= but the Program Counter = 0x81 &#xA;&amp;lt;and so on...&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="698" LastEditorUserId="698" LastEditDate="2019-03-31T02:53:21.063" LastActivityDate="2019-03-31T02:53:21.063" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="2537" PostTypeId="2" ParentId="2530" CreationDate="2017-03-22T22:19:09.267" Score="3" Body="&lt;p&gt;I only recall it as being referred to as 'left arrow' but I think it also had a function when used with the Control key, as some of the other keys did. For example in programming you might type:&#xA;PRINT &quot;Q&quot; (was that the clear screen command, does anyone remember?)&#xA;or PRINT &quot; &amp;lt;-&quot;&#xA;There were different CTRL- combinations that moved the cursor around, cleared the screen and so on...&lt;/p&gt;&#xA;" OwnerUserId="4763" LastActivityDate="2017-03-22T22:19:09.267" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2538" PostTypeId="1" CreationDate="2017-03-22T23:30:30.447" Score="6" ViewCount="1306" Body="&lt;p&gt;I'm trying to get some LEDs to be synced with sound. I'm trying to find the pins for the left and right audio on a fat PS2 motherboard. All I can seem to find is a pin with a solid 10v and 2 pins that seem to be synced with the brightness of the TV. All the others aren't reading any voltage.&lt;/p&gt;&#xA;" OwnerUserId="3646" LastEditorUserId="621" LastEditDate="2017-03-23T00:53:04.213" LastActivityDate="2017-03-23T12:03:40.483" Title="What pins on the PS2 AV out port are the audio pins?" Tags="&lt;audio&gt;&lt;sony-playstation&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2539" PostTypeId="2" ParentId="2538" CreationDate="2017-03-23T00:33:09.320" Score="6" Body="&lt;p&gt;I found two neat pictures that show the pin order on the AV out port and the AV cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RkeOz.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RkeOz.gif&quot; alt=&quot;PS2 AV Cable&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fDN7N.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fDN7N.gif&quot; alt=&quot;PS1 AV Out&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the left in the bottom picture, pin 2 is the right audio channel and pin 4 is the left channel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.gamesx.com/avpinouts/psxav.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="621" LastEditDate="2017-03-23T12:03:40.483" LastActivityDate="2017-03-23T12:03:40.483" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2541" PostTypeId="2" ParentId="2534" CreationDate="2017-03-23T11:44:27.817" Score="22" Body="&lt;p&gt;&lt;strong&gt;1. What are screen holes?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II video architecture is based around a text display of 40 columns by 24 rows. Woz had already built an &lt;a href=&quot;https://en.wikipedia.org/wiki/ARPANET&quot; rel=&quot;noreferrer&quot;&gt;ARPANET&lt;/a&gt; terminal for a TV, and said in his book &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/0393330435&quot; rel=&quot;noreferrer&quot;&gt;iWoz&lt;/a&gt; that &quot;Forty columns was the limit of American TVs&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To map those 40 column rows into memory sequentially would for various reasons have increased the chip count - something Woz strove to minimize. He could have mapped 40 columns to 64 bytes and wasted 24 bytes per row, but every byte was precious back then. As a compromise he mapped 3 rows to each 128 byte block, leaving 8 bytes unused in each of the 8 blocks - the screen holes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This decision wasn't made in isolation. The larger design includes the video scanner which reads this memory (refreshing &lt;a href=&quot;https://en.wikipedia.org/wiki/Dynamic_random-access_memory&quot; rel=&quot;noreferrer&quot;&gt;DRAM&lt;/a&gt; in the process) and passes it to the video generation circuit. The logic of the scanner imposes further order on the mapping: each of the three rows in one 128-byte block resides on a different third of the screen. Figure 5.4 from Sather's &lt;a href=&quot;https://archive.org/details/Understanding_the_Apple_IIe&quot; rel=&quot;noreferrer&quot;&gt;Understanding the Apple //e&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ercsu.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ercsu.png&quot; alt=&quot;128-byte video memory segments consist of three 40-byte sections, each mapped into a different part (third) of the video screen&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sather's books have an excellent discussion on the how the bytes in memory map to the display for each video mode. Here are the address ranges for TEXT/LORES page 1 memory from Figure 5.5.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      TOP/         MIDDLE/      BOTTOM/      (SCREEN HOLES)&#xA;BASE  FIRST 40     SECOND 40    THIRD 40     UNUSED 8&#xA;ADDR  #  RANGE     #  RANGE     #  RANGE     RANGE&#xA;$400  00 $400-427  08 $428-44F  16 $450-477  $478-47F&#xA;$480  01 $480-4A7  09 $4A8-4CF  17 $4D0-4F7  $4F8-4FF&#xA;$500  02 $500-527  10 $528-54F  18 $550-577  $578-57F&#xA;$580  03 $580-5A7  11 $5A8-5CF  19 $5D0-5F7  $5F8-5FF&#xA;$600  04 $600-627  12 $628-64F  20 $650-677  $678-67F&#xA;$680  05 $680-6A7  13 $6A8-6CF  21 $6D0-6F7  $6F8-6FF&#xA;$700  06 $700-727  14 $728-74F  22 $750-777  $778-77F&#xA;$780  07 $780-7A7  15 $7A8-7CF  23 $7D0-7F7  $7F8-7FF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;TEXT/LORES page 2 follows the same pattern - just add $400 to the addresses. In fact HIRES pages 1 and 2 also follow exactly the same pattern, but repeated 8 times each from $2000 and $4000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, screen holes are sections of video memory that are not displayed. Technically they exist in all video modes and in both Main and Auxilliary memory, but the term &quot;screen holes&quot; usually refers to those in Main TEXT page 1, which have special significance as discussed next.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2. What are screen holes used for?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early Apple II's didn't always have 64k of RAM, and so low memory was special because it was always present. The 8 screen holes in TEXT page 1 must have seemed a natural fit for use by cards in the 8 expansion slots. The 1979 version of &lt;a href=&quot;https://archive.org/details/Apple_II_Reference_Manual_1979_Apple&quot; rel=&quot;noreferrer&quot;&gt;The Apple II Reference Manual&lt;/a&gt; has the following section reserving the screen hole locations for exclusive use by the system and expansion card firmware:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;PERIPHERAL SLOT SCRATCHPAD RAM&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Each of the eight peripheral slots has reserved for it 8 locations in&#xA;  ihe Apple's RAM memory. These 64 locations are actually in memory&#xA;  pages $04 through $07, inside the area reserved for the Text and&#xA;  Low-Resolution Graphics video display. The contents of these&#xA;  locations, however, are not displayed on the screen, and their&#xA;  contents are not changed by normal screen operations The peripheral&#xA;  cards can use these locations for temporary storage of data while the&#xA;  cards are in operation. These &quot;scratchpad&quot; locations have the&#xA;  following addresses:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Table 26: I/O Scratchpad RAM Addresses&#xA;&#xA;Base  Slot Number&#xA;Addr  1     2     3     4     5     6     7&#xA;$0478 $0479 $047A $047B $047C $047D $047E $047F&#xA;$04F8 $04F9 $04FA $04FB $04FC $04FD $04FE $04FF&#xA;$0578 $0579 $057A $057B $057C $057D $057E $057F&#xA;$05F8 $05F9 $05FA $05FB $05FC $05FD $0SFE $05FF&#xA;$0678 $0679 $067A $067B $067C $067D $067E $067F&#xA;$06F8 $06F9 $06FA $06FB $06FC $06FD $06FE $06FF&#xA;$0778 $0779 $077A $077B $077C $077D $077E $077F&#xA;$07F8 $07F9 $07FA $07FB $07FC $07FD $07FE $07FF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Slot 0 does not have any scratchpad RAM addresses reserved for it. The&#xA;  Base Address locations are used by Apple DOS 3.2 and are also shared&#xA;  by all peripheral cards.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Both the Apple //c and the Apple IIgs firmware for built-in devices uses the screen holes. In addition the Apple //c uses several areas in Auxilliary memory including the Aux TEXT page 1 screen hole at $0478-$047F as documented in Table B-4 of &lt;a href=&quot;https://archive.org/details/Apple_IIc_Technical_Reference_Manual&quot; rel=&quot;noreferrer&quot;&gt;The Apple IIc Technical Reference Manual&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="4147" LastEditDate="2018-06-09T21:39:20.833" LastActivityDate="2018-06-09T21:39:20.833" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="2542" PostTypeId="1" AcceptedAnswerId="2544" CreationDate="2017-03-24T01:32:57.393" Score="9" ViewCount="349" Body="&lt;p&gt;I need to interface between an older system that uses an RS232 port for reading/writing to a tape and a more modern computer that can manipulate the data and send it back. Is there a software+hardware combo to do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I work at a place that uses a ~20 years old scale (Hobart SP1500) that can interface via an &quot;RS232 Tape Recorder.&quot; I want to see if I can load and store data via a more modern computer, probably my Raspberry Pi. We have to load a lot of data onto it and I would much rather write a quick program to gather the data and write it back to the scale's internal memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Sorry if this is the wrong place to ask. I first looked through google searches and RPi communities.&lt;/p&gt;&#xA;" OwnerUserId="4779" LastActivityDate="2017-03-24T09:26:18.230" Title="RS232 Tape Recorder Emulator?" Tags="&lt;rs232&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2543" PostTypeId="1" AcceptedAnswerId="2545" CreationDate="2017-03-24T07:09:07.517" Score="7" ViewCount="283" Body="&lt;p&gt;I would like to get specific step by step instructions on how to use an old word processor called IBM Filing Assistant on DOSBox to be able to access old 1980s documents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to use DOSBox other than with games?&lt;/p&gt;&#xA;" OwnerUserId="4780" LastEditorUserId="278" LastEditDate="2017-03-25T07:54:46.300" LastActivityDate="2017-03-25T07:54:46.300" Title="How do I use IBM Filing Assistant on DOSBox?" Tags="&lt;dosbox&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2544" PostTypeId="2" ParentId="2542" CreationDate="2017-03-24T09:26:18.230" Score="9" Body="&lt;p&gt;I think your best bet is an &lt;a href=&quot;https://www.amazon.co.uk/USB-RS232-Converter-Cable/dp/B00077DJIQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;RS232-USB interface&lt;/a&gt; (NB I'm nor recommending the particular one linked, it was just the first one that came up in my search). Plug it in to your R-Pi's USB port and it should appear as a device in &lt;code&gt;/dev&lt;/code&gt;. You should be able to then read and write to it like a file (well, you might not be able to write to it if your scale is only set up to send data).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you haven't had any experience of RS232, you might find it a bit tricky to get set up. You have to configure the RS232 for speed , parity and stop bits. The Hobart manuals will probably tell you what you should set yours to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This stackoverlfow answer goes into more detail about talking to RS232 ports on Linux and is therefore relevant to the R-Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/a/20240650/169346&quot;&gt;https://stackoverflow.com/a/20240650/169346&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="-1" LastEditDate="2017-05-23T12:39:25.033" LastActivityDate="2017-03-24T09:26:18.230" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2545" PostTypeId="2" ParentId="2543" CreationDate="2017-03-24T16:36:37.527" Score="8" Body="&lt;p&gt;If it doesn't work in DOSBox then take a look at PCEm. It's a PC emulator that lets you emulate specific machine configurations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try to set up an emulated machine that matches one of the computers that the program could be used with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://pcem-emulator.co.uk&quot; rel=&quot;noreferrer&quot;&gt;https://pcem-emulator.co.uk&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4785" LastEditorUserId="621" LastEditDate="2017-03-24T17:42:18.633" LastActivityDate="2017-03-24T17:42:18.633" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2546" PostTypeId="1" AcceptedAnswerId="2548" CreationDate="2017-03-24T17:27:28.060" Score="4" ViewCount="205" Body="&lt;p&gt;I want to split a program developed in c using z88dk in several .c files and I do not know how.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have these files:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;test.c: The main file with the &quot;main&quot; method.&lt;/li&gt;&#xA;&lt;li&gt;test2.c: An auxiliar file with the &quot;AuxFunction&quot; method.&lt;/li&gt;&#xA;&lt;li&gt;test3.h: The header definition for test2.c&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I Build with this command: &lt;strong&gt;D:\Spectrum\z88dk\bin\zcc.exe +zx -lndos -create-app test.c test2.c -o test&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The error reported from zcc is this: &lt;strong&gt;Error at module 'test2': symbol '_AuxFunction' already defined in module 'test2'&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are the sources:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;test.c&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* test.c file */&#xA;&#xA;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &quot;test2.h&quot;&#xA;&#xA;void main(){&#xA;    printf(&quot;Include test 1.1!\n&quot;);&#xA;    printf(AuxFunction(&quot;Hello&quot;));&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;test2.c&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Test2.c file */&#xA;&#xA;char* AuxFunction(char* txt){&#xA;    return txt;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;test2.h&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* test2.h file */&#xA;&#xA;char* AuxFunction(char*);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Any link, help or suggestion will be welcome!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your time!&lt;/p&gt;&#xA;" OwnerUserId="405" LastEditorUserId="405" LastEditDate="2017-03-24T18:59:46.830" LastActivityDate="2017-03-24T20:13:21.587" Title="Include c files using z88dk" Tags="&lt;software-development&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2548" PostTypeId="2" ParentId="2546" CreationDate="2017-03-24T20:13:21.587" Score="5" Body="&lt;p&gt;As Mick suggested, declare AuxFunction as extern in the header file. This works for me using d88zk version 1.8, zcc version 2.57 (which is the version in the debian repos). Declaring functions 'extern' is generally useless in any compiler from the last 20 years. I guess d88zk, despite appearing to be an active project, needs to be treated as a legacy C compiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;test2.h&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* test2.h file */&#xA;&#xA;extern char* AuxFunction(char*);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="94" LastActivityDate="2017-03-24T20:13:21.587" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2549" PostTypeId="1" AcceptedAnswerId="2550" CreationDate="2017-03-25T01:58:57.860" Score="8" ViewCount="1269" Body="&lt;p&gt;I'm writing an emulator for the z80 CPU using the &quot;z80 CPU User Manual&quot; from zilog.com as reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I got into the AND operator I got confused. In the Condition Bits Affected is declared &quot;P/V is reset if overflow; otherwise, it is reset.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried to research somewhere and inside the Intel 8080 manual appears that the P flag is set, but the 8080 manual is not as clear as the z80 manual.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Page 158 of the manual. Inside &quot;8-Bit Arithmetic Group&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this mean that AND affects P/V, or P/V is just reset? I want to mimic the correct behaviour of the z80 CPU, I don't want to mimic the manual, but I don't have a z80 to test it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that are some unexplained areas in this manual, if anyone has a better reference for this case I will appreciate it.&lt;/p&gt;&#xA;" OwnerUserId="4787" LastEditorUserId="3748" LastEditDate="2018-12-02T18:22:17.880" LastActivityDate="2018-12-02T18:22:17.880" Title="z80 CPU User Manual AND P/V Flag" Tags="&lt;z80&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2550" PostTypeId="2" ParentId="2549" CreationDate="2017-03-25T07:00:27.490" Score="12" Body="&lt;p&gt;Referring to this reference manual: &lt;a href=&quot;http://www.zilog.com/docs/z80/um0080.pdf&quot; rel=&quot;noreferrer&quot;&gt;www.zilog.com/docs/z80/um0080.pdf&lt;/a&gt;&#xA;See the bottom of page 78:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This flag is also used with logical operations and rotate instructions&#xA;  to indicate the resulting parity is Even.  The number of 1 bits in a&#xA;  byte are counted.  If the total is Odd, ODD parity is flagged (P=0). &#xA;  If the total is Even, EVEN parity is flagged (P=1).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Their description of AND is broken just as you say, as is OR.  On page 157 the description of XOR is correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want an unambiguous reference, the MAME source code is the way to go:&#xA;&lt;a href=&quot;https://github.com/mamedev/mame/tree/master/src/devices/cpu/z80&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/mamedev/mame/tree/master/src/devices/cpu/z80&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will give you exact timings, undocumented instructions and undocumented flags.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2017-03-25T07:00:27.490" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2551" PostTypeId="1" CreationDate="2017-03-25T09:00:11.223" Score="18" ViewCount="5084" Body="&lt;p&gt;I have an old Atari SC1224 CRT which has badly lost focus over the years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After taking the cover off, I can see various focus controls that can be adjusted by screwdriver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question: is there a science or method to adjusting focus on CRT monitors? And are there any well known test patterns that can help?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm know it's impossible to get perfect focus everywhere, but I'm looking for as good as I can get!&lt;/p&gt;&#xA;" OwnerUserId="272" LastActivityDate="2017-03-29T15:45:06.573" Title="Adjusting focus for old CRT monitors" Tags="&lt;hardware&gt;&lt;crt-monitor&gt;&lt;atari-st&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2552" PostTypeId="2" ParentId="2551" CreationDate="2017-03-25T12:26:55.720" Score="24" Body="&lt;p&gt;The EHT (extra-high-tension) circuits used to drive colour CRT displays run at 25kV (kilo-volts), and the capacitors contain enough stored charge to &lt;strong&gt;kill you stone dead&lt;/strong&gt; if you touch the wrong thing, and the stored charge does not disappear as soon as you switch the device off. I would take it to a repair shop if I were you. The technicians will have the skills and equipment to handle it safely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the display has lost focus, that is because the EHT circuits are drifting for some reason, probably ageing capacitors. Fiddling with the focusing controls will almost certainly upset the convergence and make the image even worse. Any improvement that you do manage to make will not last long, since the failing components will continue to degrade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to make the display fully-operational, the best course of action is to let a qualified service technician identify and replace the faulty components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I appreciate that this doesn't answer your question, but it may just save your life.&lt;/p&gt;&#xA;" OwnerUserId="3278" LastEditorUserId="3278" LastEditDate="2017-03-25T12:41:30.917" LastActivityDate="2017-03-25T12:41:30.917" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2553" PostTypeId="1" CreationDate="2017-03-25T16:50:55.273" Score="13" ViewCount="1269" Body="&lt;p&gt;I am aware that there are answers regarding this but they do not seem to answer it for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few years back I got a Acorn Electron and it works using the arial for video fine, but I would like to connect it to my monitor which has a VGA &amp;amp; HDMI input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a cheap converter or cable I can buy without me having to make something to convert one of the outputs on the electron to VGA/HDMI? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="4790" LastEditorUserId="2081" LastEditDate="2017-05-23T14:04:05.813" LastActivityDate="2021-03-24T15:28:00.020" Title="Acorn Electron to VGA/HDMI?" Tags="&lt;graphics&gt;&lt;video&gt;&lt;acorn&gt;&lt;vga&gt;&lt;electron&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2554" PostTypeId="2" ParentId="2553" CreationDate="2017-03-25T19:21:15.137" Score="11" Body="&lt;p&gt;The Electron outputs an analogue interlaced 625-line image, with a line rate of 15.625Khz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HDMI is a digital input, so cannot comprehend the Electron's analogue output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VGA is analogue but many monitors expect a line rate of 31 kHz. It's not impossible that your screen would be okay with 15.625Khz though, as that's the PAL standard, so you could at least have a try. The pinout of the Electron's monitor port is &lt;a href=&quot;http://www.acornelectron.co.uk/eug/27/a-rgbm.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; and a passive cable would work if your screen is compatible. I guess you'd need something like &lt;a href=&quot;http://coolnovelties.co.uk/coolnovelties/bbc-video-cables/51-bbc-micro-model-b-master-electron-rgb-scart-cable.html&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt;, &lt;a href=&quot;http://www.ebay.co.uk/itm/2-METRES-SCART-Cable-to-SVGA-VGA-15-PIN-Male-2m-/351904598326?hash=item51ef260936:g:kycAAOSwHMJYHMuI&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; and &lt;a href=&quot;https://www.amazon.co.uk/d/SCART-Cables/Psylins-Coupler-Female/B0009N1MX2&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Failing that, you'll need a scan doubler, which does exactly what the name says, taking a 15.625Khz input scan rate and outputting 31.25Khz, which is within the range VGA screens expect.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-03-25T19:21:15.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2555" PostTypeId="2" ParentId="2280" CreationDate="2017-03-25T20:15:02.247" Score="16" Body="&lt;p&gt;I don't know how these rumors get started in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have &lt;em&gt;originals&lt;/em&gt; of:&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Hardware&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Laser 128, ROM Version 4.5&lt;/li&gt;&#xA;&lt;li&gt;Laser 128EX, ROM Version 4.5&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h1&gt;Software&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Broderbund&quot; rel=&quot;noreferrer&quot;&gt;Brøderbund&lt;/a&gt; RW18 games:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;[m]&lt;/code&gt; Airheart&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;[X]&lt;/code&gt; Wings of Fury (works)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;[X]&lt;/code&gt; Where in the USA is Carmen San Diego?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;[X]&lt;/code&gt; Where in Europe is Carmen San Diego?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;[X]&lt;/code&gt; Where in the World is Carmen San Diego?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Broderbund non-RW18 games:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;[no]&lt;/code&gt; Choplifter (loads then fails machine check)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;[X]&lt;/code&gt; Drol&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;[?]&lt;/code&gt; Gumball (fails to load, shows ROM GR test screen!)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;[X]&lt;/code&gt; Spare Change&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I've &lt;em&gt;tagged&lt;/em&gt; games:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;that work with [X], &lt;/li&gt;&#xA;&lt;li&gt;that don't with &lt;code&gt;[ ]&lt;/code&gt;,&lt;/li&gt;&#xA;&lt;li&gt;that can work with modifications &lt;code&gt;[m]&lt;/code&gt;,&lt;/li&gt;&#xA;&lt;li&gt;that need investigation with &lt;code&gt;[?]&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I verified every game boots and plays either on //e or //c to make sure the disk is good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am one of the AppleWin's developers and can provide a &lt;em&gt;definitive answer&lt;/em&gt; to&#xA;end this stupid confusion over the Laser 128 and &#xA;Roland Gustafsson's &lt;a href=&quot;https://github.com/Michaelangel007/apple2_rwts18&quot; rel=&quot;noreferrer&quot;&gt;RW18 code&lt;/a&gt;,&#xA;hopefully, for once and for all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;W.R.T. to &lt;code&gt;Airheart&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It &lt;em&gt;DOES&lt;/em&gt; work on my Laser 128.&lt;/li&gt;&#xA;&lt;li&gt;It does &lt;em&gt;NOT&lt;/em&gt; work on my Laser 128EX.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Since these two Lasers have the &lt;em&gt;exact same&lt;/em&gt; ROM this tells me it is NOT a disk-drive machine incompatibility but sloppy code in Airheart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As emulator maintainers we come across all sorts of bugs and stupid &quot;hacks&quot; including, but not limited to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;using illegal 6502 opcodes -- Lock-N-Chase &lt;/li&gt;&#xA;&lt;li&gt;does a ROM checks -- Airheart, Choplifter, etc.&lt;/li&gt;&#xA;&lt;li&gt;using uninitialized memory such as the RNG RND -- Pooyan (IIRC)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These prevent original disks working on emulators and clones. At the time&#xA;Mr. Freeze's ROM was a (popular?) ROM mod to make Ctrl-Reset always&#xA;stop the CPU and enter into the built-in ROM debugger, aka, the&#xA;Apple 2 &lt;em&gt;System Monitor.&lt;/em&gt; Game developers started getting aggressive&#xA;to prevent people from &quot;ROM dumping&quot; the disk image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's fire up &lt;em&gt;Airheart&lt;/em&gt; and see what happens on our Laser 128EX.&#xA;It prints this message ...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    REQUIRES //C OR 128K //E&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;... and hangs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code in question is @ $0946&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    0946:A0 00          LDY #$0&#xA;    0948:B9 53 09       LDA $0953,Y&#xA;    094B:F0 FE          BEQ $094B       ; Hang on end-of-string&#xA;    094D:99 28 06       STA $0628       ; putchar() on Row 13&#xA;    0950:C8             INY&#xA;    0951:D0 F5          BNE $0948       ; always -- assumes string is &amp;lt; 256 length&#xA;    0953:&#xA;    0953:               MSB ON&#xA;    0953:               ASC &quot;REQUIRES //C OR 128K //E&quot;&#xA;    0953:D2&#xA;    0954:C5 D1 D5 C9&#xA;    0958:D2 C5 D3 A0&#xA;    095C:AF AF C3 A0&#xA;    0960:CF D2 A0 B1&#xA;    0964:B2 B8 CB A0&#xA;    0968:AF AF C5&#xA;    096B:               DFB 0&#xA;    096B:00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How the heck did I know that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we were to boot trace this on a //e or //c we could normally do:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    CALL-151&#xA;    9600&amp;lt;C600.C6FFM&#xA;    96FA:9F&#xA;    9F01:60&#xA;    9600G&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the Laser 128EX P5 PROM for the disk controller is &lt;em&gt;hard-coded&lt;/em&gt;&#xA;to run at address $C600 along with using the firmware expansion at $C800.&#xA;We need to manually &quot;patch-up&quot; the boot stage 0 firmware code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, we need to &quot;page&quot; in the firmware ROM and copy it, then fix up all the calls to $C6xx or $C8xx.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    C600:0&#xA;    9800&amp;lt;C800.C8FFM&#xA;    960D:98&#xA;    9610:98&#xA;    9660:98&#xA;    9669:98&#xA;    9696:96&#xA;    96D7:98&#xA;    96EA:98&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Putting it all together:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    CALL-151&#xA;    C600:0&#xA;    9800&amp;lt;C800.C8FFM&#xA;    9600&amp;lt;C600.C6FFM&#xA;    96FA:9F&#xA;    9F01:60&#xA;&#xA;    960D:98&#xA;    9610:98&#xA;    9660:98&#xA;    9669:98&#xA;    9696:96&#xA;    96D7:98&#xA;    96EA:98&#xA;&#xA;    9600G&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Inspecting the boot sector and back-tracing how the PC (Program Counter)&#xA;ends up at $092F we see this machine check at $08D7:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    08D7:AD 81 C0       LDA $C081       ; Turn off Language Card RAM @ $D000 .. $FFF&#xA;    08DA:AD 81 C0       LDA $C081       ; Re-enable ROM bank @ $D000 .. $FFFF&#xA;    08DD:AD B3 FB       LDA $FBB3       ; MachineId byte&#xA;    08E0:C9 06          CMP #$06        ; &#xA;    08E2:D0 4B          BNE $092F       ; Laser 128EX = $06 = pass&#xA;    08E4:2C 17 C0       BIT $C017       ; SLOTC3ROM&#xA;    08E7:30 46          BMI $092F       ; &amp;lt;- Clone triggers this&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In case you are curious you can find a list of the Apple 2 I/O softswitches at&#xA;Jon Relay's site:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.kreativekorp.com/miscpages/a2info/iomemory.shtml&quot; rel=&quot;noreferrer&quot;&gt;http://www.kreativekorp.com/miscpages/a2info/iomemory.shtml&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;We can &quot;patch&quot; this check to skip the &lt;code&gt;BNE&lt;/code&gt; and &lt;code&gt;BMI&lt;/code&gt; by changing&#xA; them to &lt;code&gt;LDA #immediate&lt;/code&gt; via:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    8E2:A9&#xA;    8E7:A9&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This 2 byte patch will make the game work on any //e+ or //c clone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, here is &lt;code&gt;TL:DR;&lt;/code&gt; version to play &lt;em&gt;Airheart&lt;/em&gt; on the Laser 128EX:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    CALL-151&#xA;    C600:0&#xA;    9800&amp;lt;C800.CFFFM&#xA;    9600&amp;lt;C600.C6FFM&#xA;    96FA:9F&#xA;    9F01:A9 A9 8D E7 08 4C 01 08&#xA;    960D:98&#xA;    9610:98&#xA;    9660:98&#xA;    9669:98&#xA;    9696:96&#xA;    96D7:98&#xA;    96EA:98&#xA;    9600G&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To answer the original question:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;There is &lt;strong&gt;nothing&lt;/strong&gt; incompatible with the Laser 128 and Laser 128EX&#xA;&lt;em&gt;disk drive&lt;/em&gt; that stops it from running Apple 2 software. The &lt;em&gt;sole reason&lt;/em&gt;&#xA;is a lazy developer doing pointless machine identification checks&#xA;to stop it form working.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There &lt;strong&gt;is&lt;/strong&gt; a problem with the Laser 128EX way it handles the status&#xA;of the &lt;em&gt;C3 firmware.&lt;/em&gt;  I have no idea why V-Tech's engineers changed&#xA;the way SLOTC3ROM works on the Laser 128EX compared to the original Laser 128.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;/Oblg. Paul Harvey's &lt;em&gt;&quot;And now you know the rest of the story.&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enjoy!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Meta:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since Nick's answer has already been &quot;accepted&quot; I have no problems merging&#xA;this into his answer as long the &lt;em&gt;entire&lt;/em&gt; information is keep tact. He is&#xA;one of our fellow AppleWin developers. He understands the Apple II disk&#xA;drive controller far better then me.&lt;/p&gt;&#xA;" OwnerUserId="31" LastEditorUserId="31" LastEditDate="2017-03-26T14:41:01.863" LastActivityDate="2017-03-26T14:41:01.863" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2556" PostTypeId="1" AcceptedAnswerId="2559" CreationDate="2017-03-26T21:36:53.977" Score="12" ViewCount="2168" Body="&lt;p&gt;To qualify what I mean by &quot;16-bit microcomputer system&quot;, I am talking about a system that has not only a 16-bit (or 32-bit) microprocessor CPU, but also a &lt;strong&gt;16-bit wide external data bus&lt;/strong&gt; connected to the rest of the system. So, 16-bit access to its primary RAM, and the possibility of 16-bit wide access to peripherals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To qualify as &quot;mass-market&quot;, the system should have been generally available for purchase by consumers in quantity as a general-purpose, desktop style, computer in the vein that became popularized as &quot;personal computers&quot;. So, no prototypes, experimental, kit, or bespoke systems. Basically a conventional microcomputer marketed to business, professional, and/or home computer users.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-03-27T16:06:46.180" LastActivityDate="2020-07-01T13:07:08.363" Title="What was the first mass-market, 16-bit microcomputer system?" Tags="&lt;hardware&gt;&lt;history&gt;" AnswerCount="5" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2557" PostTypeId="2" ParentId="2556" CreationDate="2017-03-27T00:50:42.950" Score="10" Body="&lt;ul&gt;&#xA;&lt;li&gt;First 16-bit mini: &lt;a href=&quot;https://en.wikipedia.org/wiki/Data_General_Nova&quot; rel=&quot;noreferrer&quot; title=&quot;Data General Nova&quot;&gt;Data General Nova&lt;/a&gt; (1969)&lt;/li&gt;&#xA;&lt;li&gt;First 16-bit SBC/dev kit: &lt;a href=&quot;https://books.google.ca/books?id=07X0ovA_MmEC&amp;amp;pg=PA86&amp;amp;redir_esc=y#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;Intel ISBC86/12&lt;/a&gt; (1978)&lt;/li&gt;&#xA;&lt;li&gt;First 16-bit workstation: &lt;a href=&quot;https://en.wikipedia.org/wiki/Apollo/Domain#Models&quot; rel=&quot;noreferrer&quot; title=&quot;Apollo/Domain&quot;&gt;Apollo/Domain&lt;/a&gt; (1980)&lt;/li&gt;&#xA;&lt;li&gt;First 16-bit “home computer”: &lt;a href=&quot;https://en.wikipedia.org/wiki/Electronika_BK&quot; rel=&quot;noreferrer&quot; title=&quot;Electronika BK&quot;&gt;Electronika BK&lt;/a&gt; (1983-84).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2017-03-27T00:57:26.783" LastActivityDate="2017-03-27T00:57:26.783" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2558" PostTypeId="2" ParentId="2551" CreationDate="2017-03-27T00:57:57.923" Score="9" Body="&lt;p&gt;The CRT itself is essentially a high voltage, high capacitance device on steroids and can hold a charge for well over a week. Touching the wrong contacts with your bare hands will throw you across the room or kill you. Years ago I discharged a 26&quot; CRT - melted the ground wire (10 AWG) and about 2&quot; of a screwdriver...right hand paralyzed for almost a week.  I regained consciousness about 8 feet away and to this day all I remember is snap, crackle and waking up with an iron grip on what was left of the screwdriver.  HDTV's have a PC monitor hookup. This is a probably a better and safer way to go.&lt;/p&gt;&#xA;" OwnerDisplayName="user507" LastEditorUserId="2081" LastEditDate="2017-03-29T15:45:06.573" LastActivityDate="2017-03-29T15:45:06.573" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2559" PostTypeId="2" ParentId="2556" CreationDate="2017-03-27T06:45:14.360" Score="13" Body="&lt;p&gt;A number of mass-market microcomputers which could be qualified as home computers were released in 1982 or 1983, earlier than the Electronika BK:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;http://www.z80ne.com/m20/&quot; rel=&quot;noreferrer&quot;&gt;Olivetti M20&lt;/a&gt; was a 16-bit computer based on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z8000&quot; rel=&quot;noreferrer&quot;&gt;Z8001&lt;/a&gt; with a &lt;a href=&quot;http://www.z80ne.com/m20/sections/manuals/hw1.pdf&quot; rel=&quot;noreferrer&quot;&gt;16-bit data bus&lt;/a&gt; (&lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?c=611&amp;amp;st=1&quot; rel=&quot;noreferrer&quot;&gt;March 1982&lt;/a&gt;);&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;https://en.wikipedia.org/wiki/Olivetti_M24&quot; rel=&quot;noreferrer&quot;&gt;Olivetti M24&lt;/a&gt; was the first fully-compatible IBM PC clone, and it used a fully 16-bit 8086 and a 16-bit peripheral bus; it was quite popular in Europe (introduced sometime in 1983);&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Lisa&quot; rel=&quot;noreferrer&quot;&gt;Apple Lisa&lt;/a&gt;, while a commercial failure in the end, was widely available and used a 16-bit bus (introduced on January 19, 1983);&lt;/li&gt;&#xA;&lt;li&gt;in Japan, the &lt;a href=&quot;https://en.wikipedia.org/wiki/PC-9800_series&quot; rel=&quot;noreferrer&quot;&gt;NEC PC-9801&lt;/a&gt; also used the 8086 and had a 16-bit bus (the C-bus); it started the PC-98 line which would dominate the Japanese market well into the nineties (introduced in October 1982).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Looking into early 16-bit microprocessors leads to a number of earlier microcomputers that aren’t as famous as the above:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pascal_MicroEngine&quot; rel=&quot;noreferrer&quot;&gt;Western Digital WD-9000&lt;/a&gt;, which implemented p-code in its microcode (1979, although it wasn’t debugged and widely available before 1981);&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;https://en.wikipedia.org/wiki/Alpha_Microsystems&quot; rel=&quot;noreferrer&quot;&gt;Alpha Microsystems AM-100&lt;/a&gt;, based on the same Western Digital chipset (the &lt;a href=&quot;http://kicksfortso.com/am100pdf/am100-techman.pdf&quot; rel=&quot;noreferrer&quot;&gt;technical manual&lt;/a&gt; is stamped January 13, 1979);&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In the microcomputer-sized mini category, the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_5100&quot; rel=&quot;noreferrer&quot;&gt;IBM 5100&lt;/a&gt; was a 16-bit portable computer released in September 1975; the earlier-still &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_9800_series#HP_9830&quot; rel=&quot;noreferrer&quot;&gt;HP 9830A&lt;/a&gt;, released in 1972, was marketed as a calculator but had BASIC in ROM and was effectively a desktop computer (and used as such).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-04-27T16:30:50.943" LastActivityDate="2017-04-27T16:30:50.943" CommentCount="17" ContentLicense="CC BY-SA 3.0" />
  <row Id="2561" PostTypeId="2" ParentId="2556" CreationDate="2017-03-27T12:16:04.733" Score="6" Body="&lt;p&gt;In 1979 or 1980, Convergent Technologies released their IWS (Integrated WorkStation). This was based on the Intel iapx86 (8086), and came in two configurations - the older configuration had the CPU and disk drives in separate &quot;towers&quot; somewhat larger than a current PC, with a CRT on the desk; the second configuration moved the CPU to a box approximately the size of a modern &quot;pizza box&quot; (but about twice as thick in the smallest dimension) CPU attached to a base, with a CRT attached to its left to the same base. The disk drives were 8&quot;, both floppy and hard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1980 or 1981, the next generation of Convergent Technologies workstations were released, the AWS (Advanced WorkStation). This had essentially identical capabilities to the IWS, but the disk drives were incorporated into the the on-desk CPU configuration, and it used 5.25&quot; (&quot;full-height&quot;) drives rather than 8&quot;.&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2017-03-27T12:16:04.733" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2562" PostTypeId="1" AcceptedAnswerId="2569" CreationDate="2017-03-27T21:01:52.123" Score="22" ViewCount="2593" Body="&lt;p&gt;Looking at early microcomputers, all of them have support for something resembling ASCII, occasionally a few letters with accents and things were included also. And occasionally another alphabet such as Russian or Armenian was squeezed in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the Arabic alphabet is a bit more complicated. It's written (mostly) right-to-left, and as far as I can tell it needs many diacritics to be legible. What was the first computer to support this alphabet?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers with user-definable graphics, like the ZX Spectrum or the TI-99/4a, qualify if you can show a software title which uses them to render a sequence of bytes as Arabic text. I am not only considering the Arabic language here but any language which can be written with Arabic letters (eg. Urdu, Turkmen etc.)&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2021-03-23T11:32:26.020" Title="What was the first computer to support Arabic writing?" Tags="&lt;history&gt;" AnswerCount="6" CommentCount="13" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2563" PostTypeId="2" ParentId="2556" CreationDate="2017-03-27T23:15:24.947" Score="13" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Heathkit_H11&quot; rel=&quot;noreferrer&quot;&gt;Heathkit H11&lt;/a&gt; was available fully assembled and tested for &lt;a href=&quot;http://www.classiccmp.org/hp/hk/p70.jpg&quot; rel=&quot;noreferrer&quot;&gt;$1595&lt;/a&gt; in &lt;a href=&quot;http://www.classiccmp.org/hp/hk/heathkit.htm&quot; rel=&quot;noreferrer&quot;&gt;1978&lt;/a&gt;. It was a clone of the &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-11&quot; rel=&quot;noreferrer&quot;&gt;PDP-11&lt;/a&gt; minicomputer in a desktop case.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-03-27T23:15:24.947" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2564" PostTypeId="2" ParentId="2562" CreationDate="2017-03-28T10:10:06.140" Score="24" Body="&lt;p&gt;It was most probably not the first computer to support Arabic, but the Sinclair ZX Spectrum apparently was sold in an extremely rare Arabic version. That ROM is available for download and use in a Spectrum emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The screenshot (taken from the Fuse emulator running the Arabic ROM) shows the ZX Spectrum's copyright screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dHVBA.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dHVBA.png&quot; alt=&quot;Sinclair ZX Spectrum Arabic Startup Screen&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Arabic ROM did not simply use the Spectrum's UDG capability, but provided native Arabic support including right-to-left writing and support for diacritics (I don't know Arabic, so can't say much about the actual level of support here). Even ZX Basic programs are written right-to-left and list in Arabic glyphs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer apparently had a switch to select between the original and the Arabic ROM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following screenshot shows the &quot;Horizons&quot; introductory program running on an Arabic ROM. The upper part of the screen is a bitmap and thus not using the Arabic font, but the &quot;Stop the tape and then press any key&quot; message on the lower part of the screen does. (I used the &quot;standard English&quot; Horizons, so that message might look weird...). Also, the character coordinates seem to have been turned around, because in the &lt;em&gt;Horizons&lt;/em&gt; program, the screen is flashing the concepts all in the wrong places. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And in case you wonder that the screen writing in Arabic apparently is still left-to-right: I presume the &lt;em&gt;Horizons&lt;/em&gt; program doesn't use the standard ROM character output routine... &lt;code&gt;PRINT&lt;/code&gt; in ZX-Basic &lt;strong&gt;really&lt;/strong&gt; prints right-to-left. I checked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UBRTI.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UBRTI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-03-28T15:59:43.823" LastActivityDate="2017-03-28T15:59:43.823" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2565" PostTypeId="1" CreationDate="2017-03-28T12:26:52.583" Score="13" ViewCount="1003" Body="&lt;p&gt;I have an NES that was giving me a blinking red light when powering up. I had chalked this up to the 72-pin connector and set about cleaning it. After cleaning the connector and all games, the problem persisted. I replaced the connector with an aftermarket one, with the same result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point, I assumed it was the 10NES chip, and cut pin 4. Now, when I boot, I just get a blue screen, with either the original 72-pin or the aftermarket.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Its most definitely not the TV, I've tried it on two different CRT units, both of which work fine with other older, composite output based consoles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also tried another AC adapter. Like I mentioned originally, it was &lt;em&gt;working&lt;/em&gt;, just not reliably.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RF output also produces the same result.&lt;/p&gt;&#xA;" OwnerUserId="4803" LastEditorUserId="4803" LastEditDate="2017-03-31T12:20:01.293" LastActivityDate="2017-06-26T13:36:16.620" Title="NES repair - blue screen" Tags="&lt;nes&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2567" PostTypeId="2" ParentId="678" CreationDate="2017-03-28T19:19:44.643" Score="2" Body="&lt;p&gt;A debugger may be able to defend his integrity and memory space even in arcane architectures.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Granted that in the most common implementations, where you want to save speed and memory, and simplify the debug code, you are dependent on hardware protections provided by more advanced architectures. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The software can very well have anti-debug measures built-in for known debuggers or accidentally overwrite it in the course of loading or even in the normal operation of the program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you are willing to sacrifice memory and speed, it is rather easy to do &quot;emulation&quot; in the same CPU/interpreting critical commands and running others in a controlled area, at least more easy than implementing an emulation in a foreign architecture, as you are implementing actual arithmetic and bit operations using the native machine code instructions . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking the ZX Spectrum as an example, think it as an emulator for Z80 written in Z80 binary code just for the purpose of having an advanced debugger - think of it like pretending Z80 code is a foreign CPU, or as p-code and interpreting it (similar to how a BASIC program works).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be fair, before I wrote my own Spectrum emulator for Windows, I was toying around for long about writing a native Z80 interpreter/emulator in the actual Z80 machine as a proof of concept, and even wrote the basics of this idea for debugging in a real ZX Spectrum 48K behaviour of undocumented Z80 opcodes for my emulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even more interestingly yet, in machines like the TC/TS 2068 where you can control RAM paging from the 48K mode, you might get away with debugging full 48K programs &lt;em&gt;if you get your paging code right&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually with such scenario you might even page in a screen with the debug interface and at the when running the commands write to the actual addresses/pages of the &quot;real&quot; screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such a tool, besides the obvious debugging capabilities, would perhaps be more interesting as an educational tool if used contemporarily before emulation development systems in more advanced architectures became common place to hobbyists. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might even extend such a tool with help of hardware, where you load a very protected piece of software (a turbo loader with the Alkatraz protection for instance), and later on take control of it with a NMI interrupt, passing control to such debugger in another page of RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. The comment of TS/TC 2068 might also apply to Spectrum +2 hardware, never had one so not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The concept is also not new, and it was implemented in the past, albeit in more advanced systems. One of the oldest (from 1994) and better example I know of, is &lt;a href=&quot;https://en.wikipedia.org/wiki/Bochs&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bochs&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Bochs (pronounced &quot;box&quot;) is a portable IA-32 and x86-64 IBM PC&#xA;  compatible emulator and debugger mostly written in C++ (...) It&#xA;  supports emulation of the processor(s) (including protected mode),&#xA;  memory, disks, display, Ethernet, BIOS and common hardware peripherals&#xA;  of PCs.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Many guest operating systems can be run using the emulator including&#xA;  DOS, several versions of Microsoft Windows, BSDs, Linux, Xenix and&#xA;  Rhapsody (precursor of Mac OS X). Bochs runs on many host operating&#xA;  systems, including Android, iOS, Linux, Mac OS X, PlayStation 2,&#xA;  Windows, Windows Mobile.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Bochs is mostly used for operating system development (&lt;strong&gt;when an&#xA;  emulated operating system crashes, it does not crash the host&#xA;  operating system, so the emulated OS can be debugged&lt;/strong&gt;) and to run other&#xA;  guest operating systems inside already running host operating systems.&#xA;  It can also be used to run older software – such as PC games – which&#xA;  will not run on non-compatible, or too fast computers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2017-03-31T18:54:47.267" LastActivityDate="2017-03-31T18:54:47.267" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2568" PostTypeId="2" ParentId="2562" CreationDate="2017-03-28T22:57:25.827" Score="7" Body="&lt;p&gt;As far as I know the earliest ones were:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Thomson TO7. The machine has a different keyboard with the original ROM but an arabic cartridge (which was Microsoft basic) &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Elan 64 / Enterprise 64. Different keyboard and ROM. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Some of the MSX models manufactured by Casio. Different keyboard and ROM.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I wasn't aware of the ZX Spectrum mentioned above.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastEditorUserId="2126" LastEditDate="2017-03-29T07:46:13.420" LastActivityDate="2017-03-29T07:46:13.420" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2569" PostTypeId="2" ParentId="2562" CreationDate="2017-03-28T23:09:31.783" Score="14" Body="&lt;p&gt;The Apple II had rudimentary Arabic versions as early as 1979, similar to the later &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II_series#Apple_II_Europlus_and_J-Plus&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple II j-plus&lt;/a&gt;. I recall Woz saying at a talk he gave that he was personally involved in adding Arabic support.&lt;/p&gt;&#xA;&lt;p&gt;Here's an &lt;a href=&quot;http://www.computerhistory.org/collections/catalog/102645173&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple II version&lt;/a&gt;, thought the image needs magnifying to see the keyboard.&lt;/p&gt;&#xA;&lt;p&gt;Here's an &lt;a href=&quot;http://www.homecomputer.de/pages/MachineInfo/Apple_IIeuroplus_arabic.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple II europlus version&lt;/a&gt; with the keyboard clearly visible.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XkHrV.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XkHrV.jpg&quot; alt=&quot;Apple II europlus with Arabic keyboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &amp;quot;VINTROPEDIA - Vintage Computer and Retro Console Price Guide 2009&amp;quot; &lt;a href=&quot;https://books.google.co.nz/books?id=D7RS9yegrtoC&amp;amp;pg=PA9&amp;amp;lpg=PA9&amp;amp;dq=apple%20II%20europlus%20arabic&amp;amp;source=bl&amp;amp;ots=UGgGFB1rEM&amp;amp;sig=Mr5QFg-zr_WCBObrCmWQIm4U2T8&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=0ahUKEwiv2f3OnvrSAhVBP5QKHeJhBrUQ6AEIHTAB#v=onepage&amp;amp;q=apple%20II%20europlus%20arabic&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;gives a date of 1979&lt;/a&gt; for the europlus version - which sounds about right.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yAazh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yAazh.png&quot; alt=&quot;Vintage Computer and Retro Console Price Guide 2009 showing 1979 for the Arabic Apple II europlus&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2021-03-21T01:17:04.047" LastActivityDate="2021-03-21T01:17:04.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2570" PostTypeId="1" AcceptedAnswerId="2571" CreationDate="2017-03-29T01:01:42.210" Score="19" ViewCount="1490" Body="&lt;p&gt;I released my ZX Spectrum emulation Wspecem, and GPL sources first time publicly in the Internet at large, the 15th May 1996, for Windows 95.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am quite sure it was the first ZX Spectrum emulation developed specifically for the Microsoft Windows 3.11/95 API - (or any previous Windows versions before that)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I claim at least, it was the first ever non-commercial computer emulator developed for Windows? At least at the time, I did not find anything else.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2017-08-07T18:26:31.783" LastActivityDate="2017-08-07T18:26:31.783" Title="First computer emulator in Windows" Tags="&lt;emulation&gt;&lt;history&gt;&lt;zx-spectrum&gt;&lt;z80&gt;&lt;windows-95&gt;" AnswerCount="2" CommentCount="18" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2571" PostTypeId="2" ParentId="2570" CreationDate="2017-03-29T08:53:13.923" Score="17" Body="&lt;p&gt;AppleWin was announced in &lt;a href=&quot;https://groups.google.com/forum/?hl=en#!topic/comp.emulators.apple2/aN17mLJQTCg&quot; rel=&quot;noreferrer&quot;&gt;August 1994&lt;/a&gt;, so it turns out yours isn’t the first non-commercial emulator developed for Windows. It was made available by &lt;a href=&quot;https://groups.google.com/forum/?hl=en#!topic/comp.emulators.announce/xEOBE2vPv2A&quot; rel=&quot;noreferrer&quot;&gt;April 1995&lt;/a&gt; if not earlier.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-03-29T09:42:21.780" LastActivityDate="2017-03-29T09:42:21.780" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2572" PostTypeId="2" ParentId="2551" CreationDate="2017-03-29T11:16:54.333" Score="2" Body="&lt;p&gt;Focus is a high voltage function (but not as high as the main color monitor&#xA;anode, which is 24 kV or so).   Locate the 'focus' knob (which, if you&#xA;are careful, can be adjusted while the set is under power).  Sometimes&#xA;the back of the monitor has to come off, to get to it.  It's always labeled,&#xA;don't touch anything that ISN'T the adjustment knob.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If tweaking it works, put the case back on and enjoy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With simple tools, you can discharge the HV, attach a grounding strap, and&#xA;work safely on a TV or color monitor.   The CRT is irreplaceable, and it is&#xA;NOT the problem, so don't mess with it otherwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If focus controls don't help, it's usually just&#xA;the carbon composition resistors around that 'focus' control.   It is very likely&#xA;that some resistors, values in the range of 100 k to several megohms,&#xA;have failed.  They're cheap, under $1 worth of parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alas, color monitors may also need screen adjustment, and convergence and pincushion&#xA;and suchlike, tweaked as they age.   Unless you find an old guy who used&#xA;to do this work, it's not gonna happen (there's lots of non-obvious steps&#xA;in the process).&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2017-03-29T11:16:54.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2573" PostTypeId="1" AcceptedAnswerId="2580" CreationDate="2017-03-29T15:22:37.730" Score="39" ViewCount="5815" Body="&lt;p&gt;In layman's terms, please explain the reason that all the popular PSG's used in 1980s computers and game consoles provided an additional channel to generate programmable &quot;noise&quot;. How was this &quot;noise&quot; used to create more realistic or interesting music and sound effects? Also, it seems that the noise channel is absent in the later chips using FM synthesis. Why is it no longer required for that generation of on-chip synthesizer?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-03-30T01:52:03.027" LastActivityDate="2017-03-31T19:03:29.867" Title="Why do programmable sound generators like SID include a noise generator?" Tags="&lt;hardware&gt;&lt;commodore-64&gt;&lt;digital-audio&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2574" PostTypeId="2" ParentId="2573" CreationDate="2017-03-29T15:30:32.460" Score="23" Body="&lt;p&gt;Many PSG's (Programmable Sound Generators) at the time (such as the popular &lt;code&gt;AY-3-8910&lt;/code&gt;) were made for applications like doorbells, kiosk machines, etc.  And, of course, arcade machines and computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason they had noise channels was simple.  We need a way to synthesize sounds like drums, snares, and explosions.  The best way to do that is to use random noise.  Tones made with square waves, triangle waves, etc. don't sound as good as a random noise channel when you're trying to blast aliens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tones sound good for the laser, just not the explosion.  :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were many different ways the noise channels were randomized with different frequencies and random &quot;seeds&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, at the end of the day, they used noise channels for sounds that cannot easily be produced with generated tones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, keep in mind, digital audio recording wasn't an option at the time.  While it was possible (and did happen from time to time), it wasn't very practical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS, the SID doesn't have a dedicated &quot;noise&quot; channel.  Each of the three channels can be noise, triangle, saw tooth, etc.  &lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-03-29T15:30:32.460" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2575" PostTypeId="2" ParentId="2573" CreationDate="2017-03-29T16:09:28.510" Score="11" Body="&lt;p&gt;In some systems, the noise channel could be used as a cheap source of pseudo-randomness, such as in the &lt;a href=&quot;//retrocomputing.stackexchange.com/a/1943/278&quot;&gt;Atari POKEY&lt;/a&gt; (read address &lt;code&gt;0A&lt;/code&gt;). Here, cheap means that the CPU can do other things whilst the randomness is being generated. This is useful because decent randomness is expensive to compute on general purpose hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking the example of the Atari POKEY, the randomness is generated using 8 bits of a 17-bit polynomial register. A polynomial calculation is implemented in hardware similarly to a CPU's multiplication instruction so can take a similar length of time, but implementing one in software is O(n) (not O(1)). Thus, this randomness channel can have uses other than audio generation.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-03-29T16:09:28.510" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2576" PostTypeId="1" CreationDate="2017-03-29T15:45:54.357" Score="28" ViewCount="10049" Body="&lt;p&gt;I'm looking to buy or make an NES cartridge that can be controlled by a microcontroller or small computer like the Raspberry Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't want to gut an NES cart and put an NES emulator inside it (as most of my google searches are returning), instead I'd like to have complete control over a cartridge that is plugged into a real NES or clone, and have a live interface to the console (through the 72-pin connector) along with a live interface to a PC (serial over USB or Ethernet), and to-be-determined microcontroller and other electronics and firmware sitting between them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are plenty of flash cartridges available but they are more like a traditional cartridge where they are written to and then plugged into the console and aren't changed until the console is powered off.   Being able to re-write 'ROM' memory locations from a PC through a serial (Arduino) or Ethernet (Pi) connection interleaved with when Nintendo is reading them would be the idea, the game would copy the same sprite or background tile from the same memory address but get something different than a previous cycle (I'll worry about how to synchronize and not be in the middle of a memory copy later).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like the flash cartridges use FPGAs to simulate a ROM, but I wonder if a fast enough microcontroller could write to all 72 pins (or the subset of them that actually matter) every NES cycle – 1.x MHz NES -&gt; 1.79 * 72 * margin-factor MHz microcontroller (or less because only a subset of all those pins are needed)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Minimal cost and open source software and hardware is a big plus.&lt;/p&gt;&#xA;" OwnerUserId="4808" OwnerDisplayName="Lucas W" LastEditorUserId="278" LastEditDate="2019-04-20T12:24:19.447" LastActivityDate="2019-04-20T12:24:19.447" Title="NES cartridge ROM emulation with Arduino or Pi?" Tags="&lt;nintendo&gt;&lt;emulation&gt;" AnswerCount="8" CommentCount="5" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="2577" PostTypeId="2" ParentId="2576" CreationDate="2017-03-29T17:28:43.883" Score="13" Body="&lt;p&gt;I doubt you're going to be able to pull that off with a micro-controller.  Maybe one of the 200-300 MHz versions...maybe....but unless you try a Teensy 3.6, you may also have to design your own board for the mcu too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, the problem is that you can't compare MHz to MHz like that.  Just because the NES ran a 1.79 MHz and MCU &quot;A&quot; runs at 200 MHz doesn't mean it's 50 times faster.  The CPU's in the micro-controllers need so many cycles of the clock to execute even one instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take, for example, the Propeller MCU from Parallax.  It runs normally at 80 MHz.  However, it takes 4 cycles to do pretty much anything with it.  So the effective throughput is closer to 20 MHz.  So, that &lt;em&gt;roughly&lt;/em&gt; means that within the time it takes the 6502 on the NES to execute one instruction, the Propeller can execute about 10.  And that's very lenient and high-level.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There just isn't much you can do with 10 instructions.  Grab a few registers, update a value, etc.  Not much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Raspberry Pi may have better luck because it can run past 1 GHz.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;HOWEVER&lt;/em&gt;, the problem with the RPi (and any computer) is the OS.  The OS will not (and CANNOT) guarantee you the cycle access that you need.  It's nearly impossible to count cycles on them.  This is true of Windows and Mac too.  Like I said, you might be able to get away with it but there's going to be a huge margin of error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another issue is voltage translation.  Many fast micro-controllers cannot operate with the 5 volts the NES requires.  So you have to level-convert the voltage.  Which has propagation delays too that have to be accounted for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For what you're describing, I would recommend a low-end FPGA or maybe even a CPLD.  You can still find CPLD's in a PLCC84 package (easy to work with while prototyping) from Mouser that tolerate 5V and are as fast as 5-10ns.  Plus, you get the TRUE parallelism they provide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't want to discourage you.  But, you should know what you're asking seems pretty difficult if you're a beginner.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-03-29T17:28:43.883" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2578" PostTypeId="2" ParentId="2576" CreationDate="2017-03-29T17:53:27.883" Score="10" Body="&lt;p&gt;Your stated requirements are for hard real-time read/write access to all the pins. But for homebrew development, all you really need is to be able to interactively read from and write to ROM and RAM and the CPU registers. There's a flash cart called the &lt;a href=&quot;http://krikzz.com/store/home/31-everdrive-n8-nes.html&quot; rel=&quot;noreferrer&quot;&gt;EverDrive N8&lt;/a&gt; which lets you &lt;a href=&quot;http://krikzz.com/forum/index.php?topic=259.msg14024#msg14024&quot; rel=&quot;noreferrer&quot;&gt;add a USB port&lt;/a&gt; for debugging. But I don't think the debugging software exists for it yet, just some drivers and source code at the first link above, so you will need to integrate that with &lt;a href=&quot;https://www.gnu.org/software/gdb/&quot; rel=&quot;noreferrer&quot;&gt;gdb&lt;/a&gt; or whatever you decide to use. You may also need to work with the author to add any features to the flash cart's FPGA (an &lt;a href=&quot;https://www.altera.com/products/fpga/cyclone-series/cyclone-ii/overview.html&quot; rel=&quot;noreferrer&quot;&gt;Altera Cyclone II&lt;/a&gt;) that you need for debugging. Good luck!&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-03-29T17:53:27.883" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2579" PostTypeId="2" ParentId="2576" CreationDate="2017-03-29T17:53:36.910" Score="23" Body="&lt;p&gt;&lt;a href=&quot;//retrocomputing.stackexchange.com/a/2577/409&quot;&gt;As cbmeeks said&lt;/a&gt;, you're much better off with a FPGA or CPLD.  It's going to be nearly impossible to emulate an NES ROM with a microcontroller.  A Raspberry Pi would be fast enough, but not with an operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/dwelch67/raspberrypi&quot; rel=&quot;noreferrer&quot;&gt;It's possible to run code directly on a Raspberry Pi without an OS&lt;/a&gt;, like a microcontroller.  You don't even need to worry about cycle timing to emulate a NES rom; you can rely on the M2 signal to know when to read the value on the bus.  You're going to run out of I/O pins -- the Raspberry Pi only has 26 -- but you can reuse pins with shift registers.  If you only want to emulate NROM games, you could use two Pis -- one for the CPU address space and one for the PPU (and maybe the CIC chip too, since you'll have a couple of spare pins.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option might be something from the &lt;a href=&quot;http://beagleboard.org&quot; rel=&quot;noreferrer&quot;&gt;BeagleBoard family&lt;/a&gt;, such as the &lt;a href=&quot;http://beagleboard.org/black&quot; rel=&quot;noreferrer&quot;&gt;BeagleBone Black&lt;/a&gt;.  These normally run Linux, like the Raspberry Pi, but &lt;a href=&quot;https://beagleboard.org/project/starterware/&quot; rel=&quot;noreferrer&quot;&gt;it seems like it's easier to use them without an OS&lt;/a&gt;.  The BeagleBone Black doesn't have enough GPIOs even for just the CPU, but you can always use shift registers, and you &lt;em&gt;might&lt;/em&gt; be able to repurpose some of the other pins, especially if you're running without an OS.&lt;/p&gt;&#xA;" OwnerUserId="409" LastEditorUserId="409" LastEditDate="2017-03-29T20:17:22.140" LastActivityDate="2017-03-29T20:17:22.140" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="2580" PostTypeId="2" ParentId="2573" CreationDate="2017-03-29T17:55:59.277" Score="60" Body="&lt;p&gt;One basic distinction in acoustics is the one between sounds that oscillate  with a pattern that is repeated over time and sounds that are chaotic in nature, and show no repetitive pattern. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sounds of the first type may be referred to as &quot;tones&quot;. There are a few tones that can be described by a very simple mathematical equation, for example the the &lt;a href=&quot;https://en.wikipedia.org/wiki/Square_wave&quot; rel=&quot;noreferrer&quot;&gt;square wave&lt;/a&gt;, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pulse_wave&quot; rel=&quot;noreferrer&quot;&gt;pulse wave&lt;/a&gt;, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Triangle_wave&quot; rel=&quot;noreferrer&quot;&gt;triangle wave&lt;/a&gt;, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sawtooth_wave&quot; rel=&quot;noreferrer&quot;&gt;sawtooth wave&lt;/a&gt; (listen to the examples on the Wikipedia pages to get an idea what they sound like). The shape of some of these waves are shown in this image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CrJJG.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CrJJG.png&quot; alt=&quot;Periodic tones&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(By Omegatron, CC BY-SA 3.0, &lt;a href=&quot;http://creativecommons.org/licenses/by-sa/3.0&quot; rel=&quot;noreferrer&quot;&gt;http://creativecommons.org/licenses/by-sa/3.0&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By changing the rate of repeating patterns per second, tones can be played at different pitches. As they are so easy to describe mathematically, many early sound chips used them to produce music and tonal sound effects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second type of sounds may be called &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Noise&quot; rel=&quot;noreferrer&quot;&gt;noises&lt;/a&gt;&quot; – a noise is a sound without any clearly repetitive pattern: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6HUrx.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6HUrx.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(By cralize, CC BY-SA 3.0, &lt;a href=&quot;http://creativecommons.org/licenses/by-sa/3.0&quot; rel=&quot;noreferrer&quot;&gt;http://creativecommons.org/licenses/by-sa/3.0&lt;/a&gt;))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to this lack of repetitions, you can't produce noises at different pitches as easily as tones, so they're rather useless if you want to play a tune. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, they're still very important – in fact, most languages of the world use different types of noises as speech sounds: if you say &quot;three five six&quot;, each numeral starts with a different type of noise. Not only that, many sounds that occur in nature are noisy: falling rain, the sound of wind, or ocean waves are all lacking a repetitive pattern and are therefore different types of noises, as are, for example, rolling thunder or the sound of a cymbal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's extremely difficult to emulate noises by using one of the tones, so a sound chip that produces only one of the basic tones will have problems producing one of these natural sounds. But noises are also fairly easy to describe mathematically: simply send a sequence of random values to the speaker, and the result will be static noise. In fact, that's what you're listening when you listen to static coming from a radio that isn't set to a station: random fluctuations of the radio signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for early sound chips that didn't have much computing power, the two types of basic sounds complemented the range of sounds that could be produced with little effort: simple tones for music, and noise for naturally sounding effects. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, these chips were restricted to the tonal characteristics of the basic wave forms that they supported, none of which sounded like a real musical instrument. This is the charm of &lt;a href=&quot;https://en.wikipedia.org/wiki/Chiptune&quot; rel=&quot;noreferrer&quot;&gt;Chiptune&lt;/a&gt; music: it's clearly synthetic, and closely linked to a particular type of devices. So, in a way, by using these devices for creating music, a new and unique class of musical instruments was developed that sounded unlike anything before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later chips used FM synthesis to produce tones, which is a radically different approach to manipulating the shape of tonal waves. This allowed for a much expanded range of possible sounds, and all of a sudden, real musical instruments could be emulated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of these cards, for instance the Ad Lib card which was the first affordable sound card for x86 PCs, did not contain a noise chip, and therefore relied on FM synthesis also for sounds that are typically noisy in nature, for instance snare drums or cymbals. I know many people who hated the sound of the Ad Lib cards exactly for this reason: due to their lack of a noise generator, the drum sounds lacked all punch. Just listen for example to the &lt;a href=&quot;https://www.youtube.com/watch?v=iAt_OKfjS3E&quot; rel=&quot;noreferrer&quot;&gt;promotion video&lt;/a&gt; for the Ad Lib card, and you will hear what I mean.&lt;/p&gt;&#xA;" OwnerUserId="4806" LastEditorUserId="4806" LastEditDate="2017-03-31T19:03:29.867" LastActivityDate="2017-03-31T19:03:29.867" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="2581" PostTypeId="2" ParentId="2565" CreationDate="2017-03-29T19:52:04.940" Score="3" Body="&lt;p&gt;Have you tried swapping out the power adapter? Perhaps it's not getting enough power? Do you have another NES that you can swap parts from and eliminate components by trial and error?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also perhaps your TV can't handle 240p content. There are known issues regarding this; hdretrovision.com has a good blog article on compatible TVs:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.hdretrovision.com/240p/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.hdretrovision.com/240p/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4123" LastEditorUserId="4123" LastEditDate="2017-03-29T20:20:20.913" LastActivityDate="2017-03-29T20:20:20.913" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2582" PostTypeId="2" ParentId="2565" CreationDate="2017-03-29T20:09:26.717" Score="2" Body="&lt;p&gt;As montag said, it could be your TV (good call on that).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing I would try is locating an old CRT TV and try that. &#xA;Also, if your modern TV has it, try using the Coax (RF) connector.  Surprisingly, many modern TV's still have that connector.  It might look terrible but it should show if the NES works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But my first suggestion of an older CRT TV would be the first one. &lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-03-29T20:09:26.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2583" PostTypeId="2" ParentId="2576" CreationDate="2017-03-30T00:27:44.367" Score="4" Body="&lt;p&gt;When I did some hard embedded work about 20 years ago, we have a set of 'EPROM Emulators'. Basically, it was a set of rams that plugged into our system in place of the system's eproms. You'd hold the system into reset, change the contents of the rams (serial link to a PC, took a second or three), and then let it run. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Worked beautifully for what it was. You can't really change the code mid-run, but frankly you're going to have trouble making that happen without crashing things anyway, so not being able to do it isn't really costing you much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are still available, but kind of pricey. I'd try to either pick up an old one, or make my own (you don't need much ram). You'd need to sacrifice a cart, but that shouldn't be too hard, and you could easily use a Pi as a the brains of the thing (When not loading the RAM, just make sure that the Pi's control lines to the RAM are tri-stated.)&lt;/p&gt;&#xA;" OwnerUserId="4356" LastActivityDate="2017-03-30T00:27:44.367" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2584" PostTypeId="2" ParentId="2576" CreationDate="2017-03-30T08:29:47.887" Score="0" Body="&lt;p&gt;I am not that familiar with the NES system architecture, but what you are asking is possible for the Commodore 64. You can check details of the IrqHack64 cartridge on &lt;a href=&quot;http://www.lemon64.com/forum/viewtopic.php?t=58730&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;lemon 64&quot;&gt;Lemon 64&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This cartridge monitors the system for the IRQ signal. When it happens it halts the CPU and injects the required data into system ram. If the NES allows cartridges to halt the CPU, you can do a similar trick. In this case you might consider RAM chips instead of cartridge ROM.    &lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="576" LastEditDate="2018-11-27T10:42:54.683" LastActivityDate="2018-11-27T10:42:54.683" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="2585" PostTypeId="1" CreationDate="2017-03-30T14:26:33.737" Score="8" ViewCount="373" Body="&lt;p&gt;As a developer in a team, I am used to some techniques and workflow, like using git, issue trackers, linters, common ways to discuss the structure of the code, the ways to debug and refactor code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wonder, how it was performed in 80's?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say, there are many titles for NES, e.g. Castlevania or Contra. These include graphics, sound effects, music, level designs. Work on these games include research on what can be technically done and what is not possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Who were those people working on games? How many people worked on one game? Was this work temporary for them or were there people who did it for years?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was a career path for a game developer then? Where are they now?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How could a workday look for those employees? Like, a morning standup, a day of code creation, running and checking it on a TV? If people worked on separate machines, how did they merge all the changes into one working game?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there stories or books where I can know more about how it was and if it was much more different than is done these days?&lt;/p&gt;&#xA;" OwnerUserId="4817" LastActivityDate="2017-03-30T14:26:33.737" Title="Who and how worked on games in 80's?" Tags="&lt;programming&gt;&lt;software-development&gt;" AnswerCount="0" CommentCount="7" FavoriteCount="0" ClosedDate="2017-03-30T16:18:56.143" ContentLicense="CC BY-SA 3.0" />
  <row Id="2586" PostTypeId="2" ParentId="24" CreationDate="2017-03-30T17:55:06.220" Score="5" Body="&lt;p&gt;I wanted to mention additional techniques someone else has tried to strip away the outer foil.  The article -- &lt;a href=&quot;https://www.retrohax.net/amiga-600-keyboard-membrane-fixes/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga 600 - keyboard membrane fixes&lt;/a&gt; -- doesn't lend itself to blockquotes, so I'll summarize:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The author walks through attempts to remove the foil using different chemicals, then discovers by accident that he was able to peel the foil away by covering the membrane with a strong piece of adhesive tape and pulling it back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2xfUM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2xfUM.jpg&quot; alt=&quot;Foil being peeled off&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternately, &lt;a href=&quot;http://www.rwapsoftware.co.uk/membranes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;RWAP Software&lt;/a&gt; in the UK is currently offering replacements for certain versions of the membrane, which are sold through a store called &lt;a href=&quot;http://www.sellmyretro.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SellMyRetro&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are three known membrane types:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A blue-colored membrane, no model number available&lt;/li&gt;&#xA;&lt;li&gt;A green-colored membrane, model 56C47A or 56C471A&lt;/li&gt;&#xA;&lt;li&gt;A green-colored membrane, model 56C47B or 56C471B&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Apparently there are minor differences in the key placements so the types do not interchange.  You will need to disassemble the keyboard to get the model and revision of the green membrane.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.sellmyretro.com/search/naturalSearch?keyword=A600%20Keyboard&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is a list of search results&lt;/a&gt; showing all three versions for sale, two are currently available and one is on preorder as it's less common. (Guess which version my A600 has...)&lt;/p&gt;&#xA;" OwnerUserId="4822" LastEditorUserId="4822" LastEditDate="2017-03-31T14:34:55.890" LastActivityDate="2017-03-31T14:34:55.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2587" PostTypeId="2" ParentId="2573" CreationDate="2017-03-30T20:35:43.453" Score="1" Body="&lt;p&gt;Many games have explosions.  Explosions seem more like explosions when there's an associated a burst of noise than when there's a beep.  Having other kinds of noise for things like engines is also good, but it's not too hard to get decent rumbly sounds out of tone generators.  Explosion noises, however, would require changing the frequency setting much more often than rumbly sounds.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-03-30T20:35:43.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2588" PostTypeId="1" AcceptedAnswerId="2591" CreationDate="2017-03-31T03:00:04.820" Score="19" ViewCount="780" Body="&lt;p&gt;During the time when programming was done in machine codes, there was no need for &lt;a href=&quot;https://en.wikipedia.org/wiki/Object_module&quot; rel=&quot;noreferrer&quot;&gt;object modules&lt;/a&gt;; it just wouldn't make sense. People would write the whole program they needed to run in &quot;zeroes and ones&quot;, put it on a computer medium, and introduce it into the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is natural to assume that when &lt;a href=&quot;https://en.wikipedia.org/wiki/Assembly_language#Historical_perspective&quot; rel=&quot;noreferrer&quot;&gt;assembly languages&lt;/a&gt; started to appear, their initial functionality was only to provide the ability to write machine code using opcode mnemonics and symbolic addresses to facilitate the familiar development process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The notion of separate compilation which would require &lt;a href=&quot;https://en.wikipedia.org/wiki/Linker_%28computing%29&quot; rel=&quot;noreferrer&quot;&gt;linking&lt;/a&gt;, allow libraries of pre-compiled modules, and necessitate a binary format combining relocatable code and a table of external symbols would likely come somewhat later, but, one would think, sometime between the first assembler (SOAP for IBM 650, 1955) and the prominently mentioned IBM/360 linkage editor (1964).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, none of the referred wiki pages focuses on that aspect of the history. When was the first relocatable object file format invented, then, and by what company, if not IBM?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-03-31T03:13:20.800" LastActivityDate="2017-04-03T15:18:42.637" Title="When was the relocatable object module invented?" Tags="&lt;history&gt;&lt;software-development&gt;&lt;file-format&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2590" PostTypeId="2" ParentId="2573" CreationDate="2017-03-31T16:07:11.700" Score="5" Body="&lt;p&gt;There are many acoustic events - drum beats, steps, explosions, breath, abrasion, clicking... that are based on a lot of harmonically unrelated frequencies in relatively irregular patterns. Which is more easily synthesized by taking noise and filtering/ADSR-ing the unwanted parts away than controlling a lot of oscillators independently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that true white noise &quot;has it all&quot; - you could put a very narrow bandpass and an amplitude stabilizer behind a white noise source and have something very close to an oscillator defined by the bandpass center frequency (actually, a lot of oscillators are exactly that, albeit in a non-obvious way).&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-03-31T16:07:11.700" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2591" PostTypeId="2" ParentId="2588" CreationDate="2017-03-31T16:56:25.287" Score="12" Body="&lt;p&gt;Grace Hopper invented a kind of linking loader in 1951 for the Univac, as part of the &lt;a href=&quot;https://en.wikipedia.org/wiki/A-0_System&quot; rel=&quot;noreferrer&quot;&gt;A-0&lt;/a&gt; &quot;compiler&quot; (not a compiler like we understand it today).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One must keep in mind that memory was extremely limited on those very early computers, so what today would be an object module with many routines was equivalent to handling a single subroutine at that time. Also, the result of a linked program couldn't be stored in memory (again because there was not enough of it), so it would be stored on tape in a first pass, and then this tape would be executed in a second pass.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the paper &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/univac/HopperAutoCodingPaper_1955.pdf&quot; rel=&quot;noreferrer&quot;&gt;Automatic Coding for Digital Computers&lt;/a&gt;, Grace Hopper describes it this way:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Compiling routines [&lt;em&gt;i.e., a linker/loader in modern terms&lt;/em&gt;], which also read a pseudo-code, but which withdraw subroutines from a library and operate upon them, finally linking&#xA;  the pieces together to deliver, as output, a complete specific program&#xA;  for future running: [&lt;em&gt;For example&lt;/em&gt;] UNIVAC A-compilers, BIOR, and the NYU Compiler System.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So just like a relocatable object module loader would operate on an executable and read in a pre-compiled modules from a library, resolve relocations and load the whole thing into memory, Grace Hopper's &lt;em&gt;compiling routines&lt;/em&gt; would take a pre-compiled subroutine in a specific format, make changes to it (e.g. substitute fixed parameters for formal arguments if apropriate, and probably also &quot;call/return&quot; jumps similar to the relocation), and then &quot;compile&quot; (arrange) the modified subroutines together with the main program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A similar idea seems to have appeared even a bit earlier, in David Wheeler's &lt;a href=&quot;http://rspa.royalsocietypublishing.org/content/202/1071/573&quot; rel=&quot;noreferrer&quot;&gt;Programme Organization and Initial Orders for the EDSAC&lt;/a&gt; (1950), but I can't find an accessible version of that paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wouldn't say that the development of the idea of a linker preceeded symbolic coding. There's a fascinating collection of sessions presented at the &lt;em&gt;MIT Summer Session 1954&lt;/em&gt; called &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/mit/summer_session_1954/Digital_Computers_Advanced_Coding_Techniques_Summer_1954.pdf&quot; rel=&quot;noreferrer&quot;&gt;Advanced Coding Techniques&lt;/a&gt;. Among other things it contains a bit more details about the A-2 &quot;linker&quot; (p.30), and various forms of &quot;Automatic Coding Systems&quot; (p. 55) like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Speedcoding&quot; rel=&quot;noreferrer&quot;&gt;IBM 701 Speedcoding System&lt;/a&gt; (a sort of interpreted, more complex ISA) by John Backus (p. 41).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But earlier on in the collection, it becomes quite clear that various forms of symbolic coding were already in widespread use, and practice was far removed from &quot;zeroes and ones&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Page 7 (Whirlwind I was designed 1947):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;p&gt;Mnemonic coding: it is convenient for humans to use suggestive letter pairs or triples to denote the operation sections of instructions, or to identify subroutines.&#xA;  Machines usually ultimately require a digital&#xA;  representation.&#xA;  This is a simple change of type 1b. Whirlwind I has&#xA;  always performed this change on the operation sections of instructions.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Identification of words: the control unit of a machine can operate on words only if it is given the absolute addrssses. &#xA;  Humans find it more convenient when coding to use relative or symbolic addresses. The&#xA;  necessary change is of type 2 and can be performed by the machine, usually before execution of the routine.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Representation of numbers: these may originate as, say, &lt;code&gt;.023&lt;/code&gt;, &lt;code&gt;47.10^-5&lt;/code&gt;, or &lt;code&gt;7/45&lt;/code&gt;.&#xA;  The conversion to the standard machine form can be performed by&#xA;  the machine, though the routine required to do this is often lengthy. Type 1b.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And page 21:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Stanley Gill described a technique used on the Illiac which makes it&#xA;  unnecessary to list constants separately and refer to them in the program;&#xA;  instead, the constants may be written directly in the instruction which&#xA;  use them; thus, instead of writing&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ccf al&#xA;al, +123&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;one might write simply&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ccf +123&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Donn Combelic gave, as an example of mnemonic coding, the way in which input and output editing is requested in the M.I.T. Comprehensive System.&#xA;  Three letters specify respectively the medium, whether input or output, and the notational form; this may be followed by a sample number.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's also a &lt;a href=&quot;http://hopl.info/showlanguage2.prx?exp=3411&quot; rel=&quot;noreferrer&quot;&gt;webpage&lt;/a&gt; which claims that the &quot;Initial Orders&quot; system I mentioned above should be called the first assembler. That would have been 1951, way before SOAP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And &lt;a href=&quot;https://www.youtube.com/watch?v=qundvme1Tik#t=39m25s&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; is Grace Hopper talking about how subroutines were &quot;invented&quot; by borrowing notebooks during her work on the Aiken Mark 1 in World War 2, and she already hints at the necessity of &quot;relocating&quot; them (&quot;when you integrate a piece of code into another program, you frequently have to add addresses, and programmers can't add&quot;).&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2017-04-03T15:18:42.637" LastActivityDate="2017-04-03T15:18:42.637" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="2592" PostTypeId="1" AcceptedAnswerId="2593" CreationDate="2017-03-31T17:55:38.673" Score="13" ViewCount="2358" Body="&lt;p&gt;The Ricoh 2A03 (and the 2A07) is the CPU in the well-known Nintendo Entertainment System. Apparently, the die is very similar indeed, as the slides in this video suggest &lt;a href=&quot;https://www.youtube.com/watch?v=fWqBmmPQP40&amp;amp;t=2735s&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=fWqBmmPQP40&amp;amp;t=2735s&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the Ricoh 2A03 does not have a BCD mode. I heard they disabled it because of something to do with copyright or patent laws; is this true? Did they make any other changes? &lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="10260" LastEditDate="2019-02-09T18:39:18.213" LastActivityDate="2019-02-09T18:39:18.213" Title="What is the relationship between the Ricoh 2A03 and the MOS 6502?" Tags="&lt;6502&gt;&lt;nes&gt;&lt;binary-coded-decimal&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2593" PostTypeId="2" ParentId="2592" CreationDate="2017-03-31T19:02:22.143" Score="13" Body="&lt;p&gt;The Ricoh 2A03 (NTSC) and 2A07 (PAL) are best thought of as &lt;a href=&quot;https://en.wikipedia.org/wiki/Application-specific_integrated_circuit&quot; rel=&quot;noreferrer&quot;&gt;ASIC&lt;/a&gt; devices. They include a 6502-compatible CPU core, but these chips also include the NES's 5-voice &lt;a href=&quot;https://en.wikipedia.org/wiki/Programmable_sound_generator&quot; rel=&quot;noreferrer&quot;&gt;Programmable Sound Generator&lt;/a&gt;. The inclusion of the PSG, plus other I/O interfaces for the NES, together resulted in 22 internal memory-mapped I/O ports that are on-chip. As you mentioned, the binary-coded decimal instructions were disabled too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BCD functionality of the 6502 was not useful for the NES, since there was no requirement to interface to a 7-segment display. The main reason for removing the functionality was probably to avoid any licensing or royalty issues related to &lt;a href=&quot;http://www.google.com/patents/US3991307&quot; rel=&quot;noreferrer&quot;&gt;U.S. Patent 3991307&lt;/a&gt; held by MOS at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Ricoh 2A03/2A07 ASIC, together with the Ricoh Picture Processing Unit chip, comprise most of the necessary electronics for the NES by covering CPU, graphics display, controller inputs, and sound generation.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-04-01T12:18:29.147" LastActivityDate="2017-04-01T12:18:29.147" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2594" PostTypeId="2" ParentId="849" CreationDate="2017-04-02T07:50:02.083" Score="9" Body="&lt;p&gt;Only the U26 and U27 ROMs provided by The Internet Pinball Database differed between versions. Here is an image representing some results of that analysis:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/awCyi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/awCyi.png&quot; alt=&quot;Two largely red rectangles, both dotted with white and some grey. The lower image has some intersecting white rectangles just right of the centre. Directly below these white rectangles is a block of grey, scattered with red, green and blue dots. Below and left of this is a partial red and white chessboard pattern.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Red, green or blue means that the byte was different only in version L-1, L-3 or F-1 respectively. White means that the byte was the same in all, and grey none. The upper half is U26 and the lower half is U27.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disassembling is forbidden by the license, so it is difficult to be certain what specific bytes represent, but the presence of so much red shows that the L-1 version is very different to both the L-3 and F-1 versions and that the L-3 and F-1 versions are similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I conclude that F-1 is based on L-3, not L-1, and therefore contains the bug fixes from L-3.&lt;br&gt;&#xA;For more information, please see &lt;a href=&quot;https://retrocomputingblog.wordpress.com/2017/04/13/comparing-roms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Retrocomputing blog post&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-04-15T08:20:41.530" LastActivityDate="2017-04-15T08:20:41.530" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2595" PostTypeId="1" AcceptedAnswerId="2650" CreationDate="2017-04-03T04:19:39.603" Score="31" ViewCount="3622" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Composite_artifact_colors&quot; rel=&quot;noreferrer&quot;&gt;Artifact color&lt;/a&gt; is heavily associated with the Apple ][, since that is the only method the machine had to produce a color display. I was looking at the fantastic demo for IBM PC + CGA, &lt;a href=&quot;https://youtu.be/hNRO7lno_DM&quot; rel=&quot;noreferrer&quot;&gt;8088MPH&lt;/a&gt;, and I vaguely understand how they managed 1K colors with CGA as in the screenshot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yxtSG.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yxtSG.jpg&quot; alt=&quot;Multicoloured screenshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the 1K color mode, the ability of the CGA text mode to use the 16 direct palette colors is combined with the artifact color technique. Basically, 4 different 8-bit horizontal pixel patterns at a resolution of 640x200 each produce a 256 color palette by combining 16 direct colors x 16 artifact colors. When all 4 pixel patterns are used, you get a theoretical 256x4 unique colors on screen. See &lt;a href=&quot;http://www.reenigne.org/blog/1k-colours-on-cga-how-its-done/&quot; rel=&quot;noreferrer&quot;&gt;blog post&lt;/a&gt; for more details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What surprised me was the ability to have far more than 16-colors on screen by &quot;combining&quot; the direct color output with the artifact output to get a whole slew of 16-color palettes all available at once. I thought that real composite color output and artifact color output were somehow mutually exclusive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, is there any case where a retro machine equipped with NTSC composite &lt;strong&gt;color&lt;/strong&gt; video output can't be manipulated to create some &quot;high-color&quot; modes like this? Can you provide other examples of this technique for other retro machines and consoles, &lt;strong&gt;especially those which were never advertised to have an artifact colors mode&lt;/strong&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seems especially relevant for games, since artifact color modes don't carry any (much) CPU burden to display.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-04-03T15:11:44.683" LastActivityDate="2017-04-18T12:44:16.323" Title="Does every retrocomputer and console with NTSC composite output have 'artifact color' ability?" Tags="&lt;apple-ii&gt;&lt;graphics&gt;&lt;ibm-pc&gt;&lt;atari-800&gt;&lt;coco&gt;" AnswerCount="5" CommentCount="11" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2597" PostTypeId="2" ParentId="2595" CreationDate="2017-04-03T11:44:07.937" Score="12" Body="&lt;p&gt;Colour in NTSC is represented as the high-frequency part of the signal. A colour-aware TV will separate the low and high frequency parts. The colour decided will depend on the relative phase of the colour signal and the colour burst, a brief period of pure signal from the retrace period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore the ability for a computer to affect colour decoding depends on (i) having a high enough frequency output; and (ii) having a known or programmable colour burst relative to which the adjustable pixels are at a predictable phase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can't do colour on the Timex, or probably some other monochrome computers, because they don't output a colour burst. Neither does the Apple in its text mode — a deliberate choice to allow high-resolution text without it turning into noisy colours. So a conformant TV won't try to decode colour at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can't do the style of colour artefact you're asking about on an Atari 2600 because the output clock isn't fast enough. The fastest it ever outputs pixels is exactly one per colour cycle. Though the way that one colour blends into an adjacent colour is another kind of NTSC colour artefact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't claim to have knowledge of how everything else aligns pixel output and the colour burst but most computers are probably aligned just because NTSC colour clock oscillators were cheap and widely available due to their use in TVs. You even see PAL micros such as the ZX Spectrum just because of availability and because they're the good side of the 4Mhz rated limit of a Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Output frequency with a colour-burst are therefore the two main things to look for.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="357" LastEditDate="2017-04-18T12:44:16.323" LastActivityDate="2017-04-18T12:44:16.323" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2598" PostTypeId="1" CreationDate="2017-04-03T12:53:50.333" Score="15" ViewCount="1986" Body="&lt;p&gt;I read in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/63/278&quot;&gt;this answer&lt;/a&gt; that one could create graphics effects outside the usual specifications of the hardware by changing the settings of the machine's VIC-II at specific cycles during the video drawing interval.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What effects can be produced in this way? What settings at what cycle should be changed in order to produce them?&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2018-11-30T14:55:12.147" Title="What graphical effects can be created by changing the VIC-II settings?" Tags="&lt;commodore-64&gt;&lt;video&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2599" PostTypeId="2" ParentId="1026" CreationDate="2017-04-03T13:15:04.407" Score="1" Body="&lt;p&gt;Two-in-one serial ports on DB25 have been implemented in some unix workstations, but the use of a DB25 connector on 1980s PC style computers for single serial ports was perfectly common and is not an indicator for such a port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the above post of the full pinouts shows, the original RS232 standard allows for a lot of optional signals that were not implemented in PC hardware, so the 9-pin connector slowly became the preferred implementation. Serial modems often had the 25 pin connector and came with a 9-to-25 pin cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finding an undocumented (but present from a software/OS view) secondary serial port on some connector on any computer system would be most easily done by sending a constant stream of data out that port (serial ports have no idea whether anything is connected to them!) and checking pins with an oscilloscope. Once the output signal is found, the input pin could be found by connecting that output signal to any pin that is NOT ground, NOT a part of another port, and NOT showing a voltage reading - and checking whether an echo can be established. Using a safety resistor of a few 100 ohms could be prudent here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the number of implemented serial ports could be estimated by looking for the common line driver/receiver ICs (75189, 75188, 75232, MC1488, MC1489 etc.) and calculating how many signal lines these make possible.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-04-03T13:15:04.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2600" PostTypeId="2" ParentId="2598" CreationDate="2017-04-03T13:28:16.247" Score="16" Body="&lt;p&gt;The VIC-II has many settings that can be changed, and also has the ability to produce an interrupt whenever a particular scanline has been hit. This allows us to make for example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;horizontal scanlines&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;set an interrupt when the electron beam reaches a particular scanline. Change the border color when the interrupt happens, and then set another interrupt a few scanlines later, to change the border color back. &#xA;You now have a horizontal stripe across the border.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;text and graphics on the same screen&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A very similar trick to the one mentioned above. Maniac Mansion uses this one. Switch to one screen mode every vertical retrace, (that means the beam is at the top of the screen), and then wait a few scanlines and switch to a different screen mode. It is described &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5042/how-to-check-the-c64-graphics-mode-used-by-maniac-mansion&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;dithering&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some demos have graphics containing many more colours than the the 16 standard colours. This is done by very quickly switching between one image and another. So if a pixel is first red, then blue, then red again, alternating each frame, you get a purple which is different from the purple that the VIC-II produces. Not great for large areas since the flickering gets too uncomfortable, but you can get some extra colours that way&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;turn the upper and lower borders off&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VIC-II may be switched between 23 line mode and 24 line mode. If you set it to 24 line mode, and then set it to 23 line mode immediately before the the border would start, then the trigger to start the border never happens. This means that the border does not get drawn to the screen. You can not put pixels or characters in this area, but you can put sprites there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;turning off left and right borders&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar to turning upper and lower borders off. By switching from 38 column mode to 40 column mode and back again at just the right times, you can cause the trigger that makes the borders appear not happen, which means that the borders will not appear. You can't draw anything to the bitmap, but you can put sprites there. This needs to be done every single scan line though, so it's not that common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;sprite multiplexing&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VIC-II can draw 8 sprites to the screen at any one time. But by reconfiguring one of the sprites as the beam is halfway down the screen, you can get it to appear twice on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;nine sprites horizontally&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the VIC-II has 8 hardware sprites, by changing the sprite pointer as the beam is halfway along a scanline, you can get sprite 0 to show up near the left-hand edge &lt;em&gt;and&lt;/em&gt; near the right-hand edge of the screen. This needs to be done once per scanline that has nine sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Flexible Line Interpretation&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every eighth scanline, the VIC-II halts the CPU so that it can read data twice as quickly! This is called a badline. During this time, it reads 40 bytes of screenmem and 40 bytes of bitmap. But by meddling with the vertical scrolling you can cause the VIC-II to do this on different scanlines, and this can let you overcome the colour clash. You just need to update screenmem (this contains colour information, and then cause a badline so that screenmem will be re-read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Multicolor Interlace&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because in multicolor mode, each pixel is twice as wide as usual. To mitigate this, create two frames, and alternate between them. As you alternate the frames, also scroll the whole screen left and right by one pixel. Now, both halves of the double-width pixel is interlaced with the adjacent half of the next or previous pixel on the other frame, so that you have the appearance of a greater amount of colours in an attribute cell &lt;em&gt;and&lt;/em&gt; higher resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are probably many others that I have failed to mention here.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-11-30T14:55:12.147" LastActivityDate="2018-11-30T14:55:12.147" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="2601" PostTypeId="1" AcceptedAnswerId="2611" CreationDate="2017-04-03T16:17:38.163" Score="11" ViewCount="424" Body="&lt;p&gt;This question is specifically aimed to the Amiga hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's assume a floppy track is read via DMA using sync word to trigger the start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's also assume the track contains the sync word multiple times (e.g. 3 times).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume I will have 3 random ways to read the track depending on what sync word comes first under the head.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then what happens to the DMA?&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It ignores the other 2 sync words and just completes respecting the DMA size&lt;/li&gt;&#xA;&lt;li&gt;it stops early confused by the unexpected sync words&lt;/li&gt;&#xA;&lt;li&gt;any other behavior&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I expect 1) as the answer but I have not the time to setup the test. Maybe someone​ already knows the answer or has a handy dev environment where he can test this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Answer&lt;/strong&gt;: the right answer is 1&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Credit to @pndc for pointing out that AmigaDOS specs say each sector starts with 2 sync words. This makes sense since it is faster to start transfer from the wrong sector and then​ fix this in RAM than wait a full disk revolution for the start of the track. It is well described &lt;a href=&quot;http://lclevy.free.fr/adflib/adf_info.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="124" LastEditorUserId="124" LastEditDate="2017-04-11T19:10:31.087" LastActivityDate="2017-04-11T19:10:31.087" Title="What happens when a floppy track contains multiple sync words?" Tags="&lt;amiga&gt;&lt;floppy-disk&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2602" PostTypeId="2" ParentId="2601" CreationDate="2017-04-03T17:42:30.107" Score="5" Body="&lt;p&gt;Amiga or not, DMA or not, the algorithm for IBM PC-compatible floppies is largely the same: wait for a sector header marker, read the header, compare the sector number with the desired number; if no match, start from the beginning, otherwise wait for the data marker and do the read. If the index hole flag was raised the second time during the search, abort and report &quot;sector not found&quot;. I know this from implementing a low-level floppy interface simulator. Checking, after a successful read, for sectors with the same number would be a waste of effort.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-04-03T17:42:30.107" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="2603" PostTypeId="2" ParentId="2595" CreationDate="2017-04-04T04:44:09.570" Score="4" Body="&lt;p&gt;I think these are the necessary features:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Color burst, or the ability to 'draw' before the left border&lt;/li&gt;&#xA;&lt;li&gt;Pixel rate higher than the colour clock, possibly a multiple and in phase&lt;/li&gt;&#xA;&lt;li&gt;No low pass filters on the composite output&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Here some data I collected for various home computers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amiga: can do NTSC artifacts. The machine already had plenty of colors therefore the technique was not exploited. Plus, most of the users had RGB monitors. A possible exception is &lt;a href=&quot;http://hol.abime.net/1580&quot; rel=&quot;nofollow noreferrer&quot;&gt;virtual karting 2&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Atari 8 bit: possible. See &lt;a href=&quot;http://atariage.com/forums/topic/204355-artifacting-isnt-it-weird/page-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C64: the dot clock is not a multiple of the color clock. It is around 8.18Mhz for NTSC. This means that NTSC artifacts are visible using hires gfx but they will vary across the scanline and time, not usable. Other artifacts are were commonly used instead. Flickering and PAL delay line mixing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ZX spectrum: pixel clock is 3.5 mhz, not a multiple if the color clock. Only the ZX spectrum 128 had same clock for color and pixels. Indeed &lt;a href=&quot;http://www.beeptoplay.info/CGC_entry_one_for_the_hardware_types.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this mini game&lt;/a&gt; proves it can do color artifacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zx81: it generates a color burst &lt;a href=&quot;https://baltazarstudios.com/sinclair-zx81-lives-on/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://baltazarstudios.com/sinclair-zx81-lives-on/&lt;/a&gt; but the dot clock is related to the 3.25 MHz CPU clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amstrad Cpc: the dot clock is 1mhz multiple therefore artifacts are not usable. It is an RGB machine.&lt;/p&gt;&#xA;" OwnerUserId="124" LastEditorUserId="124" LastEditDate="2017-04-07T20:43:57.960" LastActivityDate="2017-04-07T20:43:57.960" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2604" PostTypeId="2" ParentId="2598" CreationDate="2017-04-04T08:39:25.533" Score="7" Body="&lt;p&gt;TV screens are drawn by scan lines, or raster lines. For instance, a PAL screen has 312 raster lines (including borders). The display on the screen is formed by drawing these lines one by one. The raster interrupt feature of the VIC-II allows us to trigger an interrupt when it reaches a predefined raster line. Most of the VIC-II tricks are based on this feature. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Changing screen mode/screen data between specific rasters.&#xA;This is used to display text and graphics together and logo graphics using character data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can scroll only a specific area of the screen. This is used in &lt;strong&gt;smooth text scroll&lt;/strong&gt; and &lt;strong&gt;logo swing&lt;/strong&gt; effects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can change the x-scroll value for successive raster lines to make your graphic wave. This is &lt;strong&gt;Tech-tech&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also special tricks dealing with bad lines. Every 8th raster line is special for the VIC-II because it halts the CPU to fetch the screen data from the RAM. This happens when vertical scroll bits (the first three bits of $d011) and $d020 are the same. You can manipulate the vertical scroll bits to delay a bad line. This means that the VIC-II will delay drawing the next line for a number of raster lines. This is used in Flexible Line Distance (&lt;strong&gt;FLD&lt;/strong&gt;) effects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are new graphic modes with increased resolution and color depths like &lt;strong&gt;FLI, AFLI, IFLI&lt;/strong&gt; etc. Additional colors are produced by increasing the number of badlines. The resolution may be increased by interlacing graphics that manipulates raster lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also simpler effects which do not deal with rasters or bad lines, but changes data on each screen refresh, like &lt;strong&gt;color cycling&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="576" LastEditDate="2018-11-27T09:56:48.147" LastActivityDate="2018-11-27T09:56:48.147" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="2605" PostTypeId="2" ParentId="1540" CreationDate="2017-04-04T11:13:20.393" Score="0" Body="&lt;p&gt;i found following resource for Archimedes POST faults which might help:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.retro-kit.co.uk/page.cfm/content/Common-faults-on-the-Acorn-Archimedes/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.retro-kit.co.uk/page.cfm/content/Common-faults-on-the-Acorn-Archimedes/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3390" LastActivityDate="2017-04-04T11:13:20.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2608" PostTypeId="5" CreationDate="2017-04-04T15:14:47.643" Score="0" Body="&lt;p&gt;If seeking to identify a particular retrocomputer, please give as much information as possible in order to help readers give an identification.&lt;/p&gt;&#xA;&lt;p&gt;Describe the machine and the approximate date of release. Give a photograph if possible.&lt;/p&gt;&#xA;&lt;p&gt;Please use a meaningful title, preferably incorporating any key words found on the machine (or at least the form factor, e.g. &amp;quot;mainframe&amp;quot; or &amp;quot;portable&amp;quot;); just writing &amp;quot;Please identify this computer&amp;quot; doesn't help your question stand out from the others!&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-12T14:36:44.563" LastActivityDate="2021-02-12T14:36:44.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2609" PostTypeId="4" CreationDate="2017-04-04T15:14:47.643" Score="0" Body="Requests to identify a historical computer. Whole, self-contained machines only; use [identify-this-card] instead for extension cards." OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-12T14:36:44.563" LastActivityDate="2021-02-12T14:36:44.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2610" PostTypeId="2" ParentId="2595" CreationDate="2017-04-04T17:28:26.180" Score="8" Body="&lt;p&gt;Let's sort out some different kind of color artifacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The &lt;em&gt;composite&lt;/em&gt; signal carries both lumincance and chrominance, the latter encoded in the phase of the color carrier. That means if it's somehow possible to change the composite signal quickly enough, it will affect the color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is &lt;em&gt;not&lt;/em&gt; a consequence of the bandwidth limitation of luma and chroma (which is the natural result of the way they are mixed into one signal): if you'd somehow transport luma and chroma seperately as three signals to the monitor, and bandwidth limit them in the same way as the composite signal, you'd see none of those artifacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some computers use this effect &lt;strong&gt;by design&lt;/strong&gt;: In the &lt;strong&gt;Apple II&lt;/strong&gt; Hires mode, the pixel dot rate is twice the color frequency, so an alternating pixel pattern &lt;code&gt;010101&lt;/code&gt; corresponds to one color (depending on phase and an additional mechanism to adjust phase). In the &lt;strong&gt;Apple IIe&lt;/strong&gt; Double Hires mode, 4 pixels correspond to one color cycle, so again this bit pattern determines the color. In the &lt;strong&gt;CGA Graphics&lt;/strong&gt;, combining different colors in a pattern creates a mix of phases that is decoded as a new color, as can be seen in this &lt;a href=&quot;https://www.youtube.com/watch?v=niKblgZupOc&quot; rel=&quot;noreferrer&quot;&gt;youtube video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some computers are &lt;strong&gt;not&lt;/strong&gt; designed to use this effect, e.g. the Commodore 64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some instances, with a bit of cleverness and modern means of producing cycle-counted code, it's possible to cause even more artifacts than intended (or not intended). This is how the 8088 MPH demo does the additional colors. In principle, one can do that on any system where you can repogram the video circuitry while the image is produced. However, it's quite difficult to make it &lt;strong&gt;useful&lt;/strong&gt;: You need to reprogram at exactly the right time in exactly the right way, and you need to be able to do this fast enough and in some way that still produces a sensible image with the new colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, it's next to impossible to pull this off on the Apple II without custom hardware modifications, because sync timing information is not available, and the only thing you can change is the framebuffer. It &lt;em&gt;might&lt;/em&gt; be possible to do something like that on the Apple IIe (toggle MSB at exactly the right time), but it would be damned difficult to do, and I haven't seen it. I don't think it can be done on the Commodore 64, because as far as I know one cannot reprogram the VIC in a way that produces meaningful changes in the color carrier phase, but who knows, maybe someone finds a way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To sum up: Some computers are designed for to use these kind of artifacts, some are not. In principle, one can attempt to create these kinds of artifacts on any system, but it's difficult to get useful results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there are other kinds of color artifacts:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) On analog TVs, the color of adjacent lines usually blended into a combined color (everything was a bit blurry, anyway). That's an effect you could use on all platforms, and that's why you'll often see patterns using two alternating lines for larger colored areas in games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This effect is due to the way the human eye recognizes colors and the physical properties of the phosphorous in the TV screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) A similar effect, but using a temporal instead of a spatial mechanism, is to change the color very quickly (every frame). Then again, both colors will blend together and produce a new color. For the e.g. the Commodore 64, the effect is &lt;a href=&quot;http://www.aaronbell.com/secret-colours-of-the-commodore-64/&quot; rel=&quot;noreferrer&quot;&gt;explained here&lt;/a&gt;. I don't think this effect has been used frequently.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-04-04T17:28:26.180" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2611" PostTypeId="2" ParentId="2601" CreationDate="2017-04-04T19:14:11.067" Score="5" Body="&lt;p&gt;Intuitively, the answer can only be &quot;3. any other behavior&quot;, in that it resyncs every time it sees the sync word.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why? Let's look at the standard Amiga disk format. All eleven sectors in a track are written together, and each sector starts with two copies of the magic &quot;4489&quot; sync word. However, because floppy drives are not precision devices, there is a random number of bits between the end of the last sector and before the first sector and its sync words come round again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now consider the read process, which is also performed on a whole-track basis. A track read will start at a random point in the track, and there is just a one in eleven chance that the read will happen to start before the first sector and thus get the sectors in order. More usually, it'll get the last N sectors, then the random-sized gap, then the first (11-N) sectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the sync only happened the first time the sync word was seen in a DMA transfer, only the last N sectors would be correctly aligned in memory. The remaining (11-N) sectors would have random alignment (with a one in sixteen chance of being correct) and be very difficult to find in memory. So this is clearly not the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise, if the transfer aborted on seeing multiple sync words, it would choke on the two sync words at the start of every sector.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2017-04-04T19:14:11.067" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2612" PostTypeId="1" CreationDate="2017-04-04T20:55:39.527" Score="8" ViewCount="2528" Body="&lt;p&gt;There haven't been many unlicensed games released for Nintendo consoles, partly due to the fact that Nintendo has locked down their development hardware and software.  The most famous of Nintendo's unlicensed games is probably Tengen Tetris for the NES, which is now sought after as a collectors item due to its short time on the market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there any unlicensed games released for the Nintendo 64?&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorUserId="576" LastEditDate="2018-10-28T07:40:30.663" LastActivityDate="2018-10-28T07:40:30.663" Title="Were any unlicensed games released for the Nintendo 64?" Tags="&lt;nintendo&gt;&lt;nintendo-64&gt;&lt;licensing&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2613" PostTypeId="1" CreationDate="2017-04-05T05:14:42.210" Score="8" ViewCount="194" Body="&lt;p&gt;I'm trying to set up a gamepad to work with Fuse on Ubuntu. No matter which type of joystick I try to emulate (including None), pressing button #2 (or B in the Sega naming) opens the main SDL menu. Looks like Fuse handles this button directly as even if this button is not mapped to any Fuse key, the menu still opens. It doesn't happen with GTK+.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I map it to a key or some keyboard-based joystick type (Sinclair or Cursor), then pressing the button first opens the menu and second triggers the emulated key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried two different 10 button joysticks, and both of them behave as above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to disable or re-configure this behavior?&lt;/p&gt;&#xA;" OwnerUserId="4841" LastEditorUserId="148" LastEditDate="2017-04-05T05:53:38.747" LastActivityDate="2017-04-05T05:53:38.747" Title="Gamepad triggers main menu in Fuse SDL" Tags="&lt;emulation&gt;&lt;zx-spectrum&gt;&lt;joystick&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2614" PostTypeId="1" AcceptedAnswerId="2618" CreationDate="2017-04-05T18:52:12.627" Score="15" ViewCount="1009" Body="&lt;p&gt;I read that pins &lt;code&gt;10&lt;/code&gt; and &lt;code&gt;11&lt;/code&gt; are the &lt;code&gt;9V AC +/-&lt;/code&gt; pins on the Commodore 64 User Port.  Pin 10 is the &lt;code&gt;+ phase&lt;/code&gt; while pin 11 is the &lt;code&gt;- phase&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize the User Port wasn't as versatile as the Expansion Port (or so I imagine) but why would anyone need it anyway?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What kind or peripheral would typically require AC current? &lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-04-07T11:41:00.400" Title="What were the 9 VAC pins used for on the Commodore 64 User Port?" Tags="&lt;hardware&gt;&lt;commodore-64&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2616" PostTypeId="1" AcceptedAnswerId="7179" CreationDate="2017-04-05T20:06:56.770" Score="13" ViewCount="2722" Body="&lt;p&gt;Quoting from &lt;a href=&quot;http://www.cs.utexas.edu/users/pingali/CS378/2008sp/assignments/hw1/assignment1.html&quot; rel=&quot;noreferrer&quot;&gt;Programming for Performance exercise&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;early versions of the MIPS processor had an &quot;exposed pipeline&quot; (that is, the assembly language programmer needed to know the latencies of operations and had to insert NO-OPS or other operations between dependent instructions to guarantee correctness). Later versions of the MIPS processor abandoned this idea.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The above is what I was able to find by googling &quot;CPU with exposed pipeline&quot; (mentioning &quot;CPU&quot; in the search string is important). The &lt;a href=&quot;https://en.wikipedia.org/wiki/MIPS_instruction_set&quot; rel=&quot;noreferrer&quot;&gt;MIPS architecture&lt;/a&gt; was introduced in 1981 (unfortunately, the wiki page doesn't mention the exposed pipeline, except in the acronym expansion without explanation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is my understanding that VLIW architectures which also have an exposed pipeline, came later. Is that true? Was MIPS really the first one?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="7946" LastEditDate="2018-08-02T14:14:15.787" LastActivityDate="2021-02-26T10:31:49.470" Title="What was the first CPU with exposed pipeline?" Tags="&lt;history&gt;&lt;architecture&gt;&lt;cpu&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="2617" PostTypeId="2" ParentId="2576" CreationDate="2017-04-05T20:23:22.263" Score="3" Body="&lt;p&gt;I agree with other answers that this is not a trivial task but it's actually doable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the examples of such a project : &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Atari 2600 multi cart emulation using NXP 70MHz ARM7TDMI-S microcontroller: &lt;a href=&quot;http://www.randomterrain.com/atari-2600-memories-harmony-cartridge.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;What is the Harmony Cartridge?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;GameBoy Cartridge emulation with an STM32F4 ( specifically with a 168Mhz part): &lt;a href=&quot;https://dhole.github.io/post/gameboy_cartridge_emu_1/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Emulating a GameBoy Cartridge with an STM32F4. Part 1&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Vectrex multicart emulator with an STM32F4 (specifically with a 100Mhz part): &lt;a href=&quot;http://spritesmods.com/?art=veccart&quot; rel=&quot;nofollow noreferrer&quot;&gt;Extreme Vectrex multicart&lt;/a&gt;&#xA;(If link is broken, search for &lt;a href=&quot;https://www.google.com/search?q=sprites%20mods%20vectrex&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;sprites mods vectrex&lt;/code&gt;&lt;/a&gt; on Google)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4847" LastEditorUserId="202" LastEditDate="2019-04-19T23:50:04.887" LastActivityDate="2019-04-19T23:50:04.887" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="2618" PostTypeId="2" ParentId="2614" CreationDate="2017-04-05T20:32:55.980" Score="17" Body="&lt;p&gt;The 9VAC available at the Commodore 64 User Port was used to drive additional peripheral loads that were not convenient to drive from the +5 VDC supply, or when doing so might exceed the limited current capacity for the DC supply. Both supplies were rated for 100 mA, so you could carry significantly more load by utilizing both supplies. Such uses also existed internal to the C64, where the system's 9 VAC was used to derive the voltages for the SID (~12V) and for the cassette motor (~ 6V).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An excellent example of this is the VIC-1011 RS-232 adapter, which uses the User Port 9 VAC in the generation of the 12V signals needed for RS-232. A &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/cartridges/userport/1011005.gif&quot; rel=&quot;noreferrer&quot;&gt;schematic for the VIC-1011&lt;/a&gt; shows this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Common peripherals for the User Port, besides RS-232, were modems,  printer interfaces, and EPROM programmers. A number of retro modems are designed to utilize 9 VAC, but I don't have a specific reference showing a modem for the C64 that used it. This &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/cartridges/userport/eprburn.gif&quot; rel=&quot;noreferrer&quot;&gt;EPROM programmer schematic&lt;/a&gt; does use it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With flexibility as a goal, Commodore &lt;strong&gt;may have&lt;/strong&gt; also meant for the 9 VAC supply to be useful for small motors, or to serve as a stable frequency input, as was also done with 9 VAC internally driving the TOD clock.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-04-05T20:32:55.980" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2619" PostTypeId="1" AcceptedAnswerId="2657" CreationDate="2017-04-06T08:08:29.940" Score="17" ViewCount="1562" Body="&lt;p&gt;The Wikipedia page on the MOS 6502 mentions a hardware device called the Trap65 which apparently sat between the 6502 and its socket to trap any undocumented opcodes. The wiki page has the usual &lt;code&gt;citation needed&lt;/code&gt; so I suppose it could be a lie.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming such a device existed, how did that work? Does the 6502 have a split I/D memory? How else could the Trap65 detect if the byte being read was an instruction or something else?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2017-04-11T16:38:27.910" Title="How did the Trap65 work?" Tags="&lt;6502&gt;&lt;undocumented-opcodes&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2620" PostTypeId="2" ParentId="2619" CreationDate="2017-04-06T08:24:38.037" Score="19" Body="&lt;p&gt;This is explained in “Add a trap vector for unimplemented 6502 opcodes” by Carl W. Moser, published in &lt;a href=&quot;http://archive.6502.org/publications/dr_dobbs_journal/dr_dobbs_journal_vol_04.pdf&quot; rel=&quot;noreferrer&quot;&gt;Dr. Dobb’s Journal volume 4&lt;/a&gt;, page 32 (page 42 in the PDF; this is linked from the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article on the 6502&lt;/a&gt;). The 6502 outputs a sync pulse on pin 7 whenever it reads an opcode, but not when it’s reading anything else (the second or third bytes of an instruction, or memory reads done during the instruction’s execution). See also page 7 of the &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6500_mpu_nov_1985.pdf&quot; rel=&quot;noreferrer&quot;&gt;6500 family datasheet&lt;/a&gt;, and &lt;a href=&quot;https://archive.org/details/byte-magazine-1980-10&quot; rel=&quot;noreferrer&quot;&gt;BYTE volume 5 issue 10&lt;/a&gt; pages 282 and onwards, which has an extensive bibliography.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The article has a detailed circuit diagram showing how a Trap65-style device could be implemented. That doesn’t prove that the Trap65 did exist, just that it would be possible!&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-04-06T12:41:41.730" LastActivityDate="2017-04-06T12:41:41.730" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2621" PostTypeId="1" AcceptedAnswerId="2622" CreationDate="2017-04-06T10:35:59.540" Score="11" ViewCount="781" Body="&lt;p&gt;The &lt;a href=&quot;https://www.tablix.org/~avian/galaksija/rom/rom1.html#l0fffh&quot; rel=&quot;nofollow noreferrer&quot;&gt;Galaksija ROM disassembly&lt;/a&gt; has a link to &lt;strong&gt;&quot;A tutorial on how to use &quot;ld&quot; instructions instead of &quot;jr&quot; and save a few bytes in the process.&quot;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is how does this work! It can see at &lt;code&gt;l038ch&lt;/code&gt; it gets an address which points to executable code, and puts it on the stack, leaving a copy in HL. I can imagine that a following &lt;code&gt;RTS&lt;/code&gt; would &quot;jump&quot; to that address, but I don't see one.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-12-21T09:51:24.137" LastActivityDate="2018-12-21T09:51:24.137" Title="On the Z80, how can we use LD instead of JR?" Tags="&lt;z80&gt;&lt;galaksija&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2622" PostTypeId="2" ParentId="2621" CreationDate="2017-04-06T11:22:58.967" Score="16" Body="&lt;p&gt;It's the &lt;code&gt;db 1&lt;/code&gt; at the end that the comment is referring to. That's the opcode for &lt;code&gt;LD BC, nnnn&lt;/code&gt; without a supplied operand. So it acts to swallow the load at &lt;code&gt;l0393h&lt;/code&gt;, which in turn swallows that at &lt;code&gt;l0396h&lt;/code&gt;, which gets you to &lt;code&gt;PARSE&lt;/code&gt; from &lt;code&gt;0392&lt;/code&gt; without using a &lt;code&gt;JR&lt;/code&gt; and without having done anything to change what you wanted in &lt;code&gt;HL&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you enter at &lt;code&gt;038c&lt;/code&gt; then the z80 will perform:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LD HL, &amp;lt;value 1&amp;gt;&#xA;PUSH HL&#xA;LD L, &amp;lt;value 2&amp;gt;&#xA;LD BC, xx&#xA;LD BC, xx&#xA;(arrive at PARSE)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But if you enter at &lt;code&gt;0393&lt;/code&gt; then instead it'll perform:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LD L, &amp;lt;value 3&amp;gt;&#xA;LD BC, xx&#xA;(arrive at PARSE)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;... and if you enter at &lt;code&gt;0396&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LD L, &amp;lt;value 4&amp;gt;&#xA;(arrive at PARSE)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The value in &lt;code&gt;HL&lt;/code&gt; and &lt;code&gt;BC&lt;/code&gt; when you arrive at &lt;code&gt;PARSE&lt;/code&gt; depends upon the entry point, but &lt;code&gt;BC&lt;/code&gt; is intentional junk. You've spent one byte on the opcode for &lt;code&gt;LD BC&lt;/code&gt; in two places you'd otherwise have used a &lt;code&gt;JR&lt;/code&gt;. In each of those places you've saved a byte.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-04-06T18:22:35.200" LastActivityDate="2017-04-06T18:22:35.200" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2623" PostTypeId="5" CreationDate="2017-04-06T11:32:24.000" Score="0" Body="&lt;p&gt;Many processors had reproducible behaviour for machine instructions (opcodes) that were not part of the documented instruction set. Use this tag for questions regarding these undocumented opcodes.&lt;/p&gt;&#xA;&lt;p&gt;See also &lt;a href=&quot;/questions/tagged/instruction-set&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;instruction-set&amp;#39;&quot; rel=&quot;tag&quot;&gt;instruction-set&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-21T15:26:02.510" LastActivityDate="2021-02-21T15:26:02.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2624" PostTypeId="4" CreationDate="2017-04-06T11:32:24.000" Score="0" Body="Opcodes available in a processor that are not part of its documented instruction set." OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-21T15:26:02.510" LastActivityDate="2021-02-21T15:26:02.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2625" PostTypeId="5" CreationDate="2017-04-06T11:34:56.893" Score="0" Body="&lt;p&gt;Microsoft Windows Me (Millennium Edition) was introduced in 2000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was the fourth 16-bit iteration of Windows.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-04-06T11:34:56.893" LastActivityDate="2017-04-06T11:34:56.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2626" PostTypeId="4" CreationDate="2017-04-06T11:34:56.893" Score="0" Body="For questions specifically regarding the Millennium Edition of the Microsoft Windows OS." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-04-06T11:34:56.893" LastActivityDate="2017-04-06T11:34:56.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2627" PostTypeId="5" CreationDate="2017-04-06T11:40:03.403" Score="0" Body="&lt;p&gt;Microsoft Mobile was introduced in 2000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not to be confused with Windows 10 Mobile, which is off-topic on Retrocomputing.SE&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-04-06T11:40:03.403" LastActivityDate="2017-04-06T11:40:03.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2628" PostTypeId="4" CreationDate="2017-04-06T11:40:03.403" Score="0" Body="For questions specifically regarding the Mobile Edition of the Microsoft Windows OS." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-04-06T11:40:03.403" LastActivityDate="2017-04-06T11:40:03.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2629" PostTypeId="5" CreationDate="2017-04-06T11:43:31.573" Score="0" Body="&lt;p&gt;For questions specifically regarding the 8086 processor.&#xA;This processor was manufactured by Intel and introduced in 1978.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-04-06T11:43:31.573" LastActivityDate="2017-04-06T11:43:31.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2630" PostTypeId="4" CreationDate="2017-04-06T11:43:31.573" Score="0" Body="For questions specifically regarding the Intel 8086 16-bit microprocessor" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-04-06T11:43:31.573" LastActivityDate="2017-04-06T11:43:31.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2631" PostTypeId="2" ParentId="2616" CreationDate="2017-04-06T13:51:46.737" Score="11" Body="&lt;p&gt;&lt;a href=&quot;https://www.ethz.ch/content/dam/ethz/special-interest/infk/inst-cs/lst-dam/documents/Publications/mips_retrospective.pdf&quot; rel=&quot;noreferrer&quot;&gt;&quot;A Retrospective on MIPS: A Microprocessor Architecture&quot;&lt;/a&gt;, authored by those that designed MIPS from the beginning, states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The absence of hardware interlocks (to delay an instruction if one of the operands wasn’t ready) was a tradeoff...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[...]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The team wanted to pick a name for the project that emphasized performance. About nine months earlier, the RISC project at UC Berkeley had started, so we needed a catchy acronym. “Million instructions per second” (MIPS) sounded right, given the project’s goals, but this metric was also known as the “meaningless indicator of processor speed.” So, we settled on “microprocessor without interlocked pipeline stages.”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So: (i) absence of interlocks is the reason for the exposed pipeline; (ii) was also the feature that gave the project its name; and (iii) in picking a name, they tried to avoid meaningless titles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd therefore suggest that it's likely that the MIPS processor was the first processor with an exposed pipeline, on the grounds that it's the feature the project was named after — it was one of the things they considered to make their work unique.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-04-06T13:51:46.737" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2632" PostTypeId="2" ParentId="2612" CreationDate="2017-04-06T15:31:50.083" Score="7" Body="&lt;p&gt;Yes, at least if you count pirated games (which are neither licensed from Nintendo nor from whomever owns the game, so twice as unlicensed). Per &lt;a href=&quot;https://youtu.be/HwEdqAb2l50?t=415&quot; rel=&quot;noreferrer&quot;&gt;this moment in a REcon presentation on the Nintendo 64 CIC&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... now I should say, unlike the older Nintendo stuff, instead of having very widespread pirate chips, this pirate game is actually very very very rare. If you actually have one of these and you're willing to donate in the name of science we'd actually really like to see what's inside those. There's a very small number of pirate games made in Hong Kong that have this chip and we have very little information about the history of this pirated CIC. So, again, please let us know if you have any leads on these.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Since the presentation is an in-depth look at the Nintendo 64 copy protection by people who have studied the thing at length, and that appears to be the only reference to illegitimate copy protection chips, it's probably correct to say that there were no unlicensed games with original content, and very few pirated games. Nintendo's approach in the 64 was sufficient in practice.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-04-06T15:31:50.083" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2633" PostTypeId="1" AcceptedAnswerId="2636" CreationDate="2017-04-06T17:09:00.130" Score="16" ViewCount="1726" Body="&lt;p&gt;The Commodore PET had an all-in-one form factor where the monitor was fused into the rest of the computer, making a single unit, not dissimilar to some early terminals like the VT100. This is undesirable; it makes the computer hard to lift safely, the monitor impossible to position ergonomically, and if either the main unit or the monitor goes on the blink, you can't swap out or return just that part; hence, later computers moved away from this design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the undesirability of this design, why was it done? Is it substantially easier or cheaper to design that way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the answer change when you move from early 10-12&quot; monitors up to a full 14&quot; monitor?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-04-07T11:03:15.307" Title="Computers with integrated monitor (all-in-one form factor)" Tags="&lt;crt-monitor&gt;&lt;commodore-pet&gt;&lt;vt100&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2634" PostTypeId="1" AcceptedAnswerId="2635" CreationDate="2017-04-06T17:27:17.617" Score="8" ViewCount="587" Body="&lt;p&gt;Consider a pair of early 14&quot; CRT monitors, one green screen 80x25 text, one color 640x480 graphics. It seems reasonable to conjecture that both could have the same resolution; at least if you suppose characters are eight pixels horizontally, 80x8 = 640.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be somewhat useful for them to be interchangeable. Using a color monitor as a green screen text display leaves some of its capability unused, using a green screen in place of a color monitor forgoes color, but there are contexts in which this would still be a lot better than nothing (e.g. the correct monitor is on the blink or whatever).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can they be interchanged? I'm guessing the answer is contingently no, just because they were designed by different companies that randomly came up with different connectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My real question is, &lt;em&gt;could&lt;/em&gt; they be interchanged if some effort was made to make them so? Or is there some reason this would be costly or impractical? Is there something about a green screen text display that wants a special connector to get lower cost or better resolution, that makes it undesirable to use the same connector as a 640x480 color monitor?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-04-10T20:45:36.000" Title="Connectors for green screen versus color monitors" Tags="&lt;crt-monitor&gt;&lt;screen&gt;&lt;connector&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2635" PostTypeId="2" ParentId="2634" CreationDate="2017-04-06T18:46:12.073" Score="10" Body="&lt;p&gt;The very short answer is no, because no “green screen” standard is compatible with VGA (which is where 640×480 was introduced). The slightly longer answer is yes, but only in a very small number of situations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The important aspect here is the signal sent from whatever system is driving the display, to the display. Early display adapters (apart from those intended for use with TVs) tended to use digital signals: MDA, CGA, Hercules, EGA and others. VGA and onwards (including non-VGA workstation displays) switched to analog signals, until the advent of DVI-D. Digital here means TTL: on/off only. Early digital monitors tended to be fixed frequency, or at best support a fixed set of discrete frequencies (EGA and VGA monitors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Monochrome_Display_Adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;MDA&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Hercules_Graphics_Card&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hercules&lt;/a&gt; were designed for a resolution of 720×350, with frequencies of 18,432 Hz (horizontal) and 50 Hz (vertical), and used six pins in a nine-pin connector: two ground pins, horizontal and vertical sync, intensity and video (which were combined to provide up to four display intensities, although not all monitors supported the video signal). MDA was text-only, but that doesn’t matter as far as the monitor is concerned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Color_Graphics_Adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;CGA&lt;/a&gt; introduced colour with resolutions up to 640×200, frequencies of 15.75 kHz (horizontal) and 60 Hz (vertical — it was designed to also drive NTSC displays); it used the three available pins from MDA to send red, green and blue signals (remember, just on/off) and dropped the video signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Enhanced_Graphics_Adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;EGA&lt;/a&gt; moved up to 640×350, with two frequencies: 15.75 kHz horizontal (for backwards compatibility with CGA) or 21.8 kHz horizontal, and 60 Hz vertical. It used the same RGB pins as CGA, and repurposed one ground and the intensity and video signals for RGB intensity (for 64 colours altogether). The new pins are only used for EGA-specific modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the above used the same connector, and the signals are similar enough that you could build adapters. In fact, many EGA cards had jumpers that could be used to configure them to produce an MDA-compatible signal; CGA modes on EGA cards are compatible with CGA monitors. Thus you can use an EGA system with nearly any digital monitor (although the monitor used would limit the available modes, and connecting an EGA system to a CGA monitor which actually connected the repurposed ground pin could destroy the graphics adapter). Some (most?) EGA monitors such as the IBM 5154 were backwards-compatible with CGA. But the 50 Hz frequency of the MDA/Hercules signals would probably mean that colour displays (expecting 60 Hz) wouldn’t work with them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going back to your question, all this means that you could use an EGA system with a green-screen monitor, if the EGA system can be reconfigured for MDA-compatible output. A CGA system can only be used with a colour monitor (CGA obviously, EGA if the monitor supports it), or with a television. A monochrome system (MDA or Hercules) can only be used with a monochrome monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VGA is a completely different story, with different connectors and different signals (although as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2637/79&quot;&gt;Ken Gober points out&lt;/a&gt;, converting the signals isn’t too hard — after all, they’re still h/v sync based with RGB signals). There were “monochrome” VGA monitors (“paper-white”), but they still used VGA signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Nit-picking a little, early monitors weren’t 14” in diagonal; a typical size was 12”.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2017-04-13T12:52:54.317" LastActivityDate="2017-04-06T22:12:50.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2636" PostTypeId="2" ParentId="2633" CreationDate="2017-04-06T18:48:11.387" Score="23" Body="&lt;p&gt;It's a little cheaper to build all-in-one units because you only need one cabinet and one power supply, and you need fewer cables and connectors and supporting electronics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And back then, people didn't often have monitors that they could reuse on new computers, just televisions which often had only RF inputs and couldn't produce a sharp image for text. So as long as you didn't have a monitor anyway, it made financial sense to buy a computer with one built in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mentioned ergonomics, but this wasn't on people's minds back then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers back then were more repairable. Often the repair manual and schematics even came with the computer. Since then we've moved from discrete components that anyone with a soldering iron and multimeter could fix, to integrated surface mount circuits and other components which require specialized training and tools to repair. People didn't throw away nonworking TVs back then. They took them to the repair shop. Today if your monitor dies, good luck finding someone who can fix it for a lower cost than a new monitor!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One last thing. Even today, all-in-one computers are still very popular. We call them laptops.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-04-06T18:48:11.387" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2637" PostTypeId="2" ParentId="2634" CreationDate="2017-04-06T20:24:49.940" Score="3" Body="&lt;p&gt;They &lt;em&gt;could&lt;/em&gt; be interchanged if you define &quot;some effort&quot; as &quot;a lot of effort&quot;.  The problem isn't so much the CRT tubes themselves, or the choice of 'color' or 'monochrome', but rather the circuitry that drives the electron beam deflection electromagnets, and the power supplies needed to drive those circuits.  These circuits are built to sweep the electron gun across the screen at certain refresh rates, with a certain number of scan lines per frame.  Trying to drive these circuits at other speeds can result in a failure of the circuit to be able to maintain sync, or it can put so much stress on the circuit that it burns out (or the power supply does).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you have two different CRTs that both refresh at the same rate (or close to the same rate), then converting between color and monochrome (or between digital and analog) is relatively easy to do with a fairly simple circuit.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-04-06T20:24:49.940" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2638" PostTypeId="2" ParentId="1971" CreationDate="2017-04-06T22:32:17.180" Score="14" Body="&lt;p&gt;It is certainly possible to write a emulator that run in a terminal.&#xA;If the emulated system is text only then you can intercept the text input and output, and transfer it from/to the terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;on a c64 text is written to the screen by writing to a certain range in memory. You can intercept the write to that range and transfer the character code to the terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a key is pressed on the terminal you can put the keycode in the inputbuffer of your emulated c64. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;since the c64 doesn't use ascii for it's screencodes a conversion table should be provided.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the emulated system uses also graphics modes (like the c64) you can:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;do a partial emulation (only text mode)&lt;/li&gt;&#xA;&lt;li&gt;use some graphic terminal (I think you can use graphics in xterm but I never used nor tested that) &lt;/li&gt;&#xA;&lt;li&gt;use a graphic library above X-windows (or something equivalent). an X-window environment is in fact a graphic terminal. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I wrote a &lt;a href=&quot;https://web.archive.org/web/20080112195019/http://ed64.eldendo.be/&quot; rel=&quot;noreferrer&quot;&gt;tutorial 'ED64 - HOW TO WRITE A COMMODORE 64 EMULATOR' and a simple c64 emulator in pascal&lt;/a&gt;. Chapter 4 and 5 use a simple terminal solution. (text only)&lt;/p&gt;&#xA;" OwnerUserId="4853" LastEditorUserId="4853" LastEditDate="2017-04-09T09:12:10.813" LastActivityDate="2017-04-09T09:12:10.813" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2639" PostTypeId="2" ParentId="2633" CreationDate="2017-04-06T23:12:35.947" Score="2" Body="&lt;p&gt;Three other reasons are conserving space, design aesthetics, and portability. The original Macintosh was an example of how to use the form factor for portability, you could get a fabric carrying case to hold your mac + keyboard, and take it back and forth between locations. I actually did this, it was probably at the weight limit for easy portability back then, and well over what we would accept today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The iMac is an example of space conservation and design aesthetics. Essentially an iMac takes up little desk space. But it's not much of a savings over a floor PC (unless you have little space under your desk), so it appears Apple's real motivation is design aesthetics. An iMac only requires a single power cable, so your desk can look cleaner and more professional (assuming you don't have papers all spread about). &lt;/p&gt;&#xA;" OwnerUserId="4764" LastActivityDate="2017-04-06T23:12:35.947" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2640" PostTypeId="2" ParentId="2499" CreationDate="2017-04-06T23:37:31.167" Score="7" Body="&lt;p&gt;I haven't personally tried myself but searching on the web suggests that below games make use of the second joystick button wired to Pin 9 POTX signal. If played on a C64, functionality is already assigned to relevant keyboard controls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Myth - History in the making&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Robocop 2&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Last Ninja Remix&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the relevant discussions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.lemon64.com/forum/viewtopic.php?t=35034&quot; rel=&quot;noreferrer&quot;&gt;http://www.lemon64.com/forum/viewtopic.php?t=35034&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.lemon64.com/forum/viewtopic.php?p=358186&quot; rel=&quot;noreferrer&quot;&gt;http://www.lemon64.com/forum/viewtopic.php?p=358186&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4847" LastActivityDate="2017-04-06T23:37:31.167" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2642" PostTypeId="2" ParentId="2633" CreationDate="2017-04-07T09:59:44.860" Score="4" Body="&lt;p&gt;Indeed, the PET likely took a lot of design ideas from &quot;dumb&quot; (actually semi-intelligent - very few of these weren't simple microcomputers inside!) terminals of the 70s, and kept the non-detachable keyboard. It was how a commercial computer workspace was expected to look like in that era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where did the dumb terminal makers get the dumb idea? Electric typewriters and teletypewriters, often used for very early computer systems, which &quot;glass teletypes&quot; (CRT terminals) were intended to replace. These very rarely came with detachable keyboards, often because the linkage between the keyboard and the rest of the machine was part-electronic and part-mechanical.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-04-07T09:59:44.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2643" PostTypeId="2" ParentId="2633" CreationDate="2017-04-07T11:03:15.307" Score="7" Body="&lt;p&gt;Most of the problems that you list were simply not considerations in the mid-70's. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The Commodore PET was not hard to lift safely. Its monitor (in the 40 column variety at least) was tiny and didn't contribute as much to the machine's weight as the vast quantities of sheet steel used in the construction of the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And don't forget that it was a novelty to be able to move a computer at all by hand. Before microcomputers, even small computers like the PDP-11 typically consisted of a couple of large boxes mounted in a 19&quot; rack and a teletype for the main console.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Ergonomics? Don't make me laugh. Nobody thought of ergonomics in those days, at least partly because very few people had jobs that meant they spent long periods of time in front of computers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Repair was a lot easier than you might think. With the Commodore PET, the entire top of the case was hinged at the back and there was a metal strut inside that you could use to &lt;a href=&quot;https://www.inexhibit.com/wp-content/uploads/2017/02/Commodore-PET-2001-open.jpg&quot; rel=&quot;noreferrer&quot;&gt;prop it open like the hood/bonnet of a car&lt;/a&gt;. It was a fairly simple matter to swap out the circuit board. In fact, when my parents upgraded their PET from 16k to 32k (&quot;we won't use that much in a lifetime&quot; -- my Dad, 1979) the shop effectively replaced the entire computer with a new one i.e. they swapped out the motherboard. IIRC the monitor unit was bolted on to the main case so that could be swapped out easily enough too.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Why was it done? Well, of course in some cases, it wasn't done. If you bought an Apple II, you bought the monitor separately. However, I think the thinking at Commodore was that, by integrating everything, they could market the PET as a &quot;one stop&quot; shop. Certainly with the original PET, which also had an integrated tape recorder, you bought one thing and then you were ready to go. This was probably a big selling point at a time when most people looking to buy a computer had never seen a monitor before they walked into the computer shop.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-04-07T11:03:15.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2644" PostTypeId="2" ParentId="2614" CreationDate="2017-04-07T11:41:00.400" Score="5" Body="&lt;p&gt;Possible uses would have been for any peripheral that needed:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Its own low-noise voltage regulated power supply (eg ADC/DACs for measurement and control, or audio stuff)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A symmetric power supply for analog circuitry - such can be easily achieved using a voltage doubler instead of a rectifier (caveat: you need to know what you are doing if you share a common ground with circuitry fed via a bridge rectifier!).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;48V for POTS (telephony) line interfacing (could have been stepped up via a transformer)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;21 to 29V (also via transformer) for EPROM/EEPROM programming equipment&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This was a time before cheap and easy-to-design dc to dc converter technology became ubiquitous.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-04-07T11:41:00.400" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2645" PostTypeId="1" CreationDate="2017-04-07T16:41:06.440" Score="4" ViewCount="398" Body="&lt;p&gt;Looking to get my Model M keyboard working on a modern setup, I believe I need an active converter to go from PS/2 to USB. What adapter / part would be compatible with this keyboard?&lt;/p&gt;&#xA;" OwnerUserId="4860" LastEditorUserId="278" LastEditDate="2017-04-09T20:22:40.013" LastActivityDate="2017-04-09T20:26:44.870" Title="Using a 1995 model M with a modern setup" Tags="&lt;keyboards&gt;&lt;ibm-pc&gt;&lt;old-hardware-adaptation&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2646" PostTypeId="2" ParentId="2645" CreationDate="2017-04-07T16:50:38.803" Score="8" Body="&lt;p&gt;Are you just looking for a generic PS/2 to USB adapter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B000BSJFJS&quot; rel=&quot;noreferrer&quot;&gt;Ziotek's SANOXY PS2 Keyboard To USB Adapter&lt;/a&gt; seems to have good reviews on Amazon and work well with older keyboards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pSKe4.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pSKe4.jpg&quot; alt=&quot;PS2 to USB&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2017-04-07T16:50:38.803" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2647" PostTypeId="2" ParentId="2612" CreationDate="2017-04-07T17:03:15.163" Score="8" Body="&lt;p&gt;While I was looking for information on the Hong Kong bootleg mentioned in Tommy's answer, I actually found information on a different bootleg released in Brazil: Ronaldinho Soccer 64&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Released by TEG Peru only in Brazil in January 1998, this bootleg was a modified version of International Superstar Soccer 64 which replaced all fake roster names with real player names, added some pictures of Ronaldinho to the title screen, removed the Konami logo, and changed some of the music tracks.  This bootleg also lacked a real CIC, so a device such as the N64 Passport Plus III is required to get the game to boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LnLdM.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LnLdM.jpg&quot; alt=&quot;Front&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/olj9l.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/olj9l.jpg&quot; alt=&quot;Back&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OTZxl.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OTZxl.jpg&quot; alt=&quot;Board2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/U1TQF.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/U1TQF.jpg&quot; alt=&quot;Board1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://micro-64.com/features/ronaldinho.shtml&quot; rel=&quot;noreferrer&quot;&gt;Additional information and source.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="621" LastActivityDate="2017-04-07T17:03:15.163" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2648" PostTypeId="1" AcceptedAnswerId="2651" CreationDate="2017-04-09T00:33:45.467" Score="13" ViewCount="1016" Body="&lt;p&gt;Unlike the original Apple ][, the Apple IIGS was built from highly-integrated custom chips. Among these were the Mega II and the CYA (which, apparently stands for &quot;Control Your Apple&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I have read, all the discrete logic that made up the original Apple ][, plus the various enhancements in the //e, were replicated fully by the Mega II chip. This would seem to provide the necessary electronics for controlling the Apple IIGS expansion bus and compatible cards. So, what is left for the CYA chip to control? How does the CYA chip serve as an arbiter for peripherals builtin to the motherboard?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, is there a programmer interface for dealing with the CYA, and does it give the expansion bus of the IIGS any additional capabilities not found in the //e?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-04-09T00:41:34.567" LastActivityDate="2017-04-10T05:11:24.827" Title="How did Apple's 'CYA' chip function to &quot;Control Your Apple&quot;?" Tags="&lt;hardware&gt;&lt;apple&gt;&lt;apple-iigs&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2649" PostTypeId="2" ParentId="2634" CreationDate="2017-04-09T06:43:59.187" Score="2" Body="&lt;p&gt;It can be done, but in addition to connectors, there are three &#xA;signal issues.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, the refresh rate&#xA;can be inflexible (and if it's different, there may be inadequate adjustment&#xA;capability).  Second, the horizontal and vertical synchronization signals&#xA;may be of different types (polarity, duty cycle).   Third, the video&#xA;voltage levels and drive impedance are not necessarily the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Macintosh Plus (monochrome) can be made to drive a VGA screen, with some tweaking (I've done that).   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A start, would be to identify both monitors' deflection frequencies (Hsync&#xA;and Vsync); that can be easy, a coil of wire will pick up the deflection&#xA;magnetic fields, if you know how to use an oscilloscope.  &lt;strong&gt;The TV Typewriter Cookbook&lt;/strong&gt; and &lt;strong&gt;The Cheap Video Cookbook&lt;/strong&gt; by Don Lancaster would be useful references for this.  He&#xA;calls the coil a 'snuffler'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know some electronics, you can produce composite or separate sync&#xA;signals as needed, in any polarity and duty cycle, from an available source.&#xA;If valid sync signals are present, the screen will scan, and (with a &#xA;variable AC/DC source) you can feed a dummy signal in and&#xA;adjust for a lit rectangular area of useful size. &lt;/p&gt;&#xA;" OwnerUserId="4108" LastEditorUserId="4108" LastEditDate="2017-04-10T20:45:36.000" LastActivityDate="2017-04-10T20:45:36.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2650" PostTypeId="2" ParentId="2595" CreationDate="2017-04-09T21:37:26.363" Score="19" Body="&lt;p&gt;In composite video, a scanline has the following format:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HuLLu.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HuLLu.jpg&quot; alt=&quot;Scanline&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every line has:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a sync mark, which is the lower level, on the left.&lt;/li&gt;&#xA;&lt;li&gt;a color burst, which I'll explain below.&lt;/li&gt;&#xA;&lt;li&gt;video data.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The sync mark is used to tell the TV set to bring the beam back to the left side of the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time TVs were black and white, you had the sync mark and then the video data. The amplitude of the data signal would determine how bright the pixel is during the length of the line (63.5µs in NTSC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When color TV tubes were created, it was important to keep compatibility with B&amp;amp;W sets when broadcasting TV programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea was to add the color information 'on top' of the B&amp;amp;W information so that it would not be visible on B&amp;amp;W TVs, but color sets would be able to get the color data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, if you take a B&amp;amp;W TV and hook an Atari 2600 where you can toggle color / B&amp;amp;W you will notice that the color display adds a bit of noise to the image. That's the color info that the B&amp;amp;W TV doesn't process. That same noise is present in the early color sets, but not the more modern ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the amplitude of the signal would determine the luminosity, the system was design so that color is encoded as a phase shift from a reference signal.&#xA;This signal has a very small amplitude, so it will not damage too much the luminosity signal (although it does a bit as you can see with the atari 2600 test).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to calculate the phase shift, you need a reference. It comes in the form of the color burst. It consists of roughly 2.5µs of a signal at 3.57954545 Mhz (the NTSC carrier frequency).&#xA;The TV set has an oscillator at exactly the same frequency. When the signal is detected, the TV's oscillator gets synchronized, through a &lt;a href=&quot;https://en.wikipedia.org/wiki/Phase-locked_loop&quot; rel=&quot;noreferrer&quot;&gt;PLL&lt;/a&gt;, so that the two signals are now in phase.&#xA;Every scanline re-synchronizes the internal oscillator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of the luminosity signal, the same 3.57954545 signal is added, but each color is represents by a phase shift from the color burst reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This chart gives an idea:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lHklp.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lHklp.gif&quot; alt=&quot;NTSC Colors&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far so good. Now let's talk about artifacts:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NTSC color clock runs at 3.57954545Mhz and the full range of colors can be represented through phase shifts through the whole 360º.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system works well as long as each pixel lasts long enough so that the color signal can be set to any value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what if the pixels are output at a rate of 2 x 3.57954545Mhz?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now two pixels will share the time to express one color and, if the pixels are very different in luminosity, the system may interpret differently the phase of the color signal and output a different color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if you plot the luminosity changes with fast pixel changes over a color clock, you will see very clearly why these colors are produced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the main source of artifacts. There are others but they're due to tube physics, etc and are not linked to the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ability of a system to make artifact colors depends on two things:&#xA; - The speed of it's pixel clock vs. the speed of the NTSC color clock.&#xA; - The 'location' on the circle of the system's colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On an Atari 800 for example, if we make a black and white bitmap, in 320x200:&#xA;(0 = black, 1 = white, - = don't care)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;0010 = green&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;0100 = blue&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;1100 = orange&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;0110 = light blue&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;1110 = nearly white&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;1111 = white&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now, to answer you question: can a machine be manipulated to do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the phenomenon is tied to the NTSC/PAL color systems, it is possible to do these artifact when:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The machine outputs a composite color signal (a B&amp;amp;W signal doesn't have a color burst and the TV set will not enable color decoding).&lt;/li&gt;&#xA;&lt;li&gt;The pixel clock is a higher frequency than the color clock.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That means pretty much most retro-computers. Typically, the pixel clock will be an even multiple of the color clock, such as 7.16 MHz or 14.32 MHz. This holds true for the Apple ][, IBM CGA, Tandy Color Computer, and the Atari 8-bit, all of which are known to support artifact color modes. (See &lt;a href=&quot;https://pineight.com/mw/index.php?title=Dot_clock_rates&quot; rel=&quot;noreferrer&quot;&gt;this link&lt;/a&gt; for pixel clock frequencies.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some systems had more flexibility with different modes (and different pixels rates), more base colors (allowing more combinations since they can start a block of pixels with different color phase shifts), but the effects can be clearly calculated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is to be noted that TVs all react a bit differently due to how they detect the phase change, but overall you wouldn't get that many variations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have implemented video hardware; this stuff is simple to explain on a white board, but a bit hard to convey in writing :D&lt;/p&gt;&#xA;" OwnerUserId="3884" LastEditorUserId="4335" LastEditDate="2017-04-10T23:05:27.727" LastActivityDate="2017-04-10T23:05:27.727" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2651" PostTypeId="2" ParentId="2648" CreationDate="2017-04-10T05:11:24.827" Score="18" Body="&lt;p&gt;The &quot;Control Your Apple ASIC&quot; (CYA) was part of the &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_IIGS#Third_firmware_release_.28.22ROM_version_3.22.29.3B_1.C2.A0MB_of_RAM&quot; rel=&quot;noreferrer&quot;&gt;Apple IIGS 1 MB&lt;/a&gt;&quot; introduced in 1989, which had 1.125 MB of DRAM and twice the ROM space of previous IIGS models.  The CYA was much the same as the &quot;Fast Processor Interface IC&quot; (FPI) that earlier IIGS models had instead, and much of the technical documentation refers to either of the chips as the FPI.  The new 1 MB model had version 3 of the ROMs and so this model is sometimes known as the &quot;ROM 3&quot; version of the IIGS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CYA/FPI exists to solve two problems while maintaining high compatibility with earlier Apple II models: allowing the newer, faster CPU to actually run faster, and to provide addressing to a larger amount of memory.  Compatibility required that all the peripheral functions run at the older 1 MHz bus speed, including DMA (Direct Memory Access) from peripheral controlers to memory, so allowing the 65C816 CPU to run at a faster clock wasn't straightforward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the lower left of the IIGS block diagram from the &lt;a href=&quot;https://archive.org/details/Apple_IIgs_Hardware_Reference_HiRes&quot; rel=&quot;noreferrer&quot;&gt;Hardware Reference&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PMZlw.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PMZlw.png&quot; alt=&quot;IIGS Block Diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dashed line separates two clocking regions: the Mega II region to the right, running at 1 MHz, and the FPI region to the left, running at a variety of rates, up to 2.8 MHz.  The Mega II region has all the peripheral connections, while the FPI region has the CPU, the ROM, most of the RAM memory, and the memory expansion slot.  (The Mega II region has 128KB of the RAM, which can be directly accessed by peripheral DMA at the standard 1MHz bus rate.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CYA/FPI chip is there to control the timing and memory addressing in the FPI region.  As long as the CPU accesses only memory in that region, the CPU (and the rest of the region) can be clocked at full speed.  When the CPU has to access a peripheral or the memory residing in the Mega II region, the FPI chip reduces the region clock to 1 MHz.  One of the memory functions of the FPI is to provide &quot;memory shadowing&quot; of some of the memory in the Mega II region (used for instance for the video display memory).  This allows reads to use the FPI copy at full speed; only writes have to access the Mega II region at the slow speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The details of the CYA/FPI functions are more complicated than this; if interested you might want to watch &lt;a href=&quot;https://www.youtube.com/watch?v=LP5k15g_0AMhttps://www.youtube.com/watch?v=LP5k15g_0AM&quot; rel=&quot;noreferrer&quot;&gt;this KansasFest &quot;Apple IIgs System Timing and the FPI&quot; video&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3644" LastActivityDate="2017-04-10T05:11:24.827" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2652" PostTypeId="1" AcceptedAnswerId="2653" CreationDate="2017-04-11T05:54:18.810" Score="15" ViewCount="1199" Body="&lt;p&gt;TCP/IP has some binary header fields which are affected by byte order, so defines 'network byte order' to settle the issue, specifically defines it as big-endian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When was this decided? The earliest reference I've found so far is RFC 1700, but that seems to be dated 1994, and I would expect this matter to have been decided much earlier than that.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10260" LastEditDate="2021-03-07T04:43:02.223" LastActivityDate="2021-03-07T04:43:02.223" Title="When was network byte order decided?" Tags="&lt;network&gt;&lt;endianness&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2653" PostTypeId="2" ParentId="2652" CreationDate="2017-04-11T08:08:32.460" Score="14" Body="&lt;p&gt;As far as I can see, &lt;a href=&quot;https://tools.ietf.org/html/rfc1700&quot; rel=&quot;noreferrer&quot;&gt;RFC 1700&lt;/a&gt; doesn’t define “network byte order” as a phrase; it specifies the order of transmission of bytes (or octets) on the network, as done previously in the RFCs it obsoletes (going at least as far back as &lt;a href=&quot;https://tools.ietf.org/html/rfc990&quot; rel=&quot;noreferrer&quot;&gt;RFC 990&lt;/a&gt; in November 1986). As I understand it, “network byte order” is just the order of bytes on the network, which depends on the network and should be documented in the network’s specification — it’s big-endian for IP, as documented in the IP specification, &lt;a href=&quot;https://tools.ietf.org/html/rfc791&quot; rel=&quot;noreferrer&quot;&gt;RFC 791&lt;/a&gt;, published in September 1981. (The initial &lt;a href=&quot;https://www.cs.princeton.edu/courses/archive/fall06/cos561/papers/cerf74.pdf&quot; rel=&quot;noreferrer&quot;&gt;TCP paper&lt;/a&gt; doesn’t concern itself with such issues.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Endianness as a byte-order term goes back to Danny Cohen’s &lt;em&gt;On Holy Wars and a Plea for Peace&lt;/em&gt;, published as &lt;a href=&quot;http://www.ietf.org/rfc/ien/ien137.txt&quot; rel=&quot;noreferrer&quot;&gt;Internet Experiment Note 137&lt;/a&gt; in April 1980 and again in &lt;em&gt;IEEE Computer Magazine&lt;/em&gt; in October 1981. That paper summarises the situation, pointing out that many existing communications protocols are little-endian (RS-232, Telex…) but that the &lt;a href=&quot;https://en.wikipedia.org/wiki/Interface_Message_Processor&quot; rel=&quot;noreferrer&quot;&gt;ARPANet IMP&lt;/a&gt; was mostly big-endian, and that communications on the ARPANet were big-endian.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-04-11T08:08:32.460" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2654" PostTypeId="2" ParentId="2652" CreationDate="2017-04-11T08:45:46.057" Score="3" Body="&lt;p&gt;Network packets are formed once but read during transmission multiple times. Therefore it is worth optimizing reading of multi-byte values. Reading a big-endian unsigned number consisting of N bytes (where N bytes is no more than the native word size) is&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cnt = N;&#xA;val = 0;&#xA;while (cnt--) val = (val &amp;lt;&amp;lt; 8) | getbyte();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;whereas reading a little-endian number requires a more complex code, something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;val = 0;&#xA;for (cnt = 0; cnt &amp;lt; N; ++cnt) val |= getbyte() &amp;lt;&amp;lt; cnt*8;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Therefore reading a value transmitted as a big-endian byte sequence is more efficient.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-04-11T08:45:46.057" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="2655" PostTypeId="5" CreationDate="2017-04-11T11:53:51.080" Score="0" Body="&lt;p&gt;The VT100 was a CRT-based terminal introduced by the Digital Equipment Corporation  in 1976.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It superseded the &lt;a href=&quot;/questions/tagged/vt52&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;vt52&amp;#39;&quot; rel=&quot;tag&quot;&gt;vt52&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-04-11T11:53:51.080" LastActivityDate="2017-04-11T11:53:51.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2656" PostTypeId="4" CreationDate="2017-04-11T11:53:51.080" Score="0" Body="For questions regarding the DEC VT100 Terminal." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-04-11T11:53:51.080" LastActivityDate="2017-04-11T11:53:51.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2657" PostTypeId="2" ParentId="2619" CreationDate="2017-04-11T16:38:27.910" Score="4" Body="&lt;p&gt;&quot;a hardware device ... which apparently sat between the 6502 and its socket to trap any undocumented opcodes. ... Assuming such a device existed, how did that work?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That sounds a lot like &lt;a href=&quot;http://laughtonelectronics.com/Arcana/KimKlone/Kimklone_short_summary.html&quot; rel=&quot;noreferrer&quot;&gt;&quot;the KK Computer: a Radical 6502 Redesign&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 was designed to have a unified &lt;a href=&quot;http://en.wikipedia.org/wiki/Princeton_architecture&quot; rel=&quot;noreferrer&quot;&gt;Princeton architecture&lt;/a&gt;, not a split I/D memory.&#xA;However, the 6502 has a &quot;SYNC&quot; pin that pulses when an opcode is fetched, which is how the KimKlone &quot;detect if the byte being read was an instruction or something else&quot;. (I would be surprised if the Trap65 used any other method of detecting which memory reads were instructions).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the KimKlone (&quot;KK&quot;),&#xA;the SYNC output pin of the 6502 (op-code fetch) and the phase 2 output pin of the 6502, and the memory data bus, are the only inputs to a few standard logic chips that track exactly what instruction is executing and how many cycles it has gone into that instruction -- including the &quot;new&quot; instructions that the KimKlone substitutes for many previously Undefined instructions --&#xA;as documented in &lt;a href=&quot;http://laughtonelectronics.com/Arcana/KimKlone/Kimklone_processors.html&quot; rel=&quot;noreferrer&quot;&gt;&quot;KimKlone: Processor Partnership&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The KimKlone splits the data bus into the &quot;memory data bus&quot; and the &quot;CPU data bus&quot;.&#xA;During an instruction fetch (i.e., when the 6502 pulses the SYNC pin),&#xA;the data from the memory bus goes into 4 chips:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the KK latches the actual data from memory into the KK's instruction register (a 74x273 chip).&lt;/li&gt;&#xA;&lt;li&gt;Meanwhile, all 8 bits go into a 74xx245 bus transceiver.&lt;/li&gt;&#xA;&lt;li&gt;Meanwhile, the high 5 bits (xxxx_x) drive a 74S288 EPROM, which selects a substitute opcode.&lt;/li&gt;&#xA;&lt;li&gt;Meanwhile, the low 3 bits go into a small decoder that tests that instruction on the memory data bus for xxxx_x011 patterns, which are all single-cycle NOPs on the 65C02.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If the decoder detects a xxxx_x011 pattern during the op-code fetch, that pattern never reaches the CPU bus -- the KK disables the transceiver and enables the EPROM to drive a substitute 65C02 op-code into the CPU on the CPU data bus.&#xA;During all other times (the decoder detects a &quot;normal&quot; 65C02 instruction being fetched, or the decoder sees a normal data LOAD or STORE where the SYNC pin doesn't pulse) -- that decoder enables the transceiver that connects the memory data bus and the CPU data bus normally.&#xA;(Apparently Laughton considered the possibility that the decoder + EPROM might not be fast enough to do this before the 6502 latched the instruction, and the backup plan was to allow that single-cycle NOP to execute normally, and then substitute a &quot;normal&quot; 65C02 instruction on the &lt;em&gt;following&lt;/em&gt; cycle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the KK latches the original instruction from RAM (not the possibly-substituted instruction going to the 65C02), it can continue doing the &quot;extra stuff&quot; necessary to implement that specific new instruction.&#xA;The hardware schematic in the Carl W. Moser article unconditionally substitutes a NOP instruction,&#xA;but the KK sometimes substitutes some other instruction, so some of the new instructions of the KK can re-use the 6502 address generation unit rather than requiring extra external hardware to do that work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jeff Laughton has documented all the details on how the KimKlone works and how to re-implement it, starting at&#xA;&lt;a href=&quot;http://laughtonelectronics.com/Arcana/KimKlone/Kimklone_intro.html&quot; rel=&quot;noreferrer&quot;&gt;&quot;KimKlone: Introduction &amp;amp; Table of Contents&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="582" LastActivityDate="2017-04-11T16:38:27.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2658" PostTypeId="2" ParentId="2652" CreationDate="2017-04-11T22:51:19.553" Score="6" Body="&lt;p&gt;For TCP/IP, the matter was &quot;decided&quot; the first time an IP packet was sent.  The order of bits and bytes put onto a wire (or a radio link) by the sender had to match the order they were processed by the receiver.  If the receiver processed them in a different order, chaos ensued.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since all communication involved at least two parties (a sender and a receiver), the appropriate order was established by convention.  If you followed the convention things worked; if you didn't then things didn't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually someone saw fit to actually specify the conventional order in an RFC, but before that you could figure out what the correct order was by trying to communicate with another already-working system.  I would not be surprised if repeated failures due to incorrect assumptions is what led this to being included in RFC 791, when it had been unstated in &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc760.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;RFC 760&lt;/a&gt; and &lt;a href=&quot;https://www.rfc-editor.org/ien/ien123.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEN 123&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, it was not typical to write the RFC/IEN first, then build a system afterward.  Rather, you built a prototype first, refined it through multiple iterations, and then when you finally had something that worked well enough to share with others, you would document it in an RFC or IEN (although sometimes you'd do so even if it wasn't working &quot;well enough&quot; simply to meet a commitment).&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2017-04-12T15:26:39.260" LastActivityDate="2017-04-12T15:26:39.260" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2659" PostTypeId="1" AcceptedAnswerId="2662" CreationDate="2017-04-12T10:55:33.183" Score="46" ViewCount="6660" Body="&lt;p&gt;The PDP-11's program counter was addressable in two ways: as a general purpose register or as a memory location. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, the PDP-11's instruction set included separate instructions for moving a new value into the PC. Did the designers not realise that the &lt;code&gt;MOV&lt;/code&gt; instruction would have done the trick? Is there something I'm missing?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-02-25T16:46:18.073" Title="Why did the PDP-11 include a JMP instruction?" Tags="&lt;pdp-11&gt;&lt;instruction-set&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2660" PostTypeId="2" ParentId="2659" CreationDate="2017-04-12T12:51:08.963" Score="47" Body="&lt;p&gt;&lt;code&gt;MOV&lt;/code&gt; changes the &lt;code&gt;N&lt;/code&gt;, &lt;code&gt;Z&lt;/code&gt; and &lt;code&gt;V&lt;/code&gt; flags according to the copied data. &lt;code&gt;JMP&lt;/code&gt; doesn't do that. It means you can run e.g. arithmetic operations somewhere, then jump to another location for the compare routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also &lt;code&gt;JMP&lt;/code&gt; appears to be 1 cycle faster. The handbook says &lt;code&gt;JMP&lt;/code&gt; takes 1 to 3 cycles while &lt;code&gt;MOV&lt;/code&gt; take 0 to 4 - maybe because it doesn't set the flags.&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="836" LastEditDate="2017-04-12T20:14:57.580" LastActivityDate="2017-04-12T20:14:57.580" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="2661" PostTypeId="2" ParentId="2595" CreationDate="2017-04-12T16:06:48.780" Score="3" Body="&lt;p&gt;For NTSC artifacting to be useful, the dot clock must be a multiple of chroma clock; on all systems I know of where it's useful, it's either 2x or 4x.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, for purposes of artifacting, there are four different ways that systems can handle horizontal and vertical timing:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Horizontal = chroma/228; vertical = anything near 262&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Horizontal = chroma/227.5; vertical = horizontal/262&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Horizontal = chroma/227.5; vertical = horizontal/263&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Horizontal = chroma/227.5; vertical = horizontal/262.5&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Broadcast video standards only allow for #4, but television sets' electronics have enough tolerance to accept any of the above (most sets should easily tolerate 260-264 without recalibration, and will either accept a wider range directly or will include a &quot;vertical hold&quot; knob that can be adjusted for a wider range).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On systems that use the first style, a solid color area should be drawn as a pattern of vertical stripes.  On those that use the second style, they should be drawn as a stationary checkerboard, but I've only seen that on karaoke CD+G displays and I don't know if they're consistent enough to make aliasing usable.  On a system that uses the third style, a solid color should appear as a checkerboard that reverses phase every frame, and one that uses the fourth style (interlaced video) would require cycling through a four-field pattern.  I think there's a digital video standard that outputs pixels at 4x chroma and relies upon artifacting for color; there's also another standard for digital component video which uses 3.5x chroma (a frequency which minimizes artifacting).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Commodore VIC-20, 64, and 128, and the Apple II all derive their system clock by using a frequency that's 2x chroma and dividing by 7.  The VIC-20 then multiplies that by 4 to get the pixel clock, and the C64/128 multiply by 8.  The Apple II adds an extra half-chroma period to the system clock every scan line to yield a line rate of chroma/228, while the VIC-20 and most Commodore 64s divide the system clock by 65 to yield a line rate of 227.5.  My first Commodore 64 used a line rate that was an integer submultiple of chroma (so color areas appeared as stripes) and I remember having determined that the horizontal rate was CPU clock/64 (which would yield a line rate of chroma/224), but that video chip was wonky in other ways (two sprites couldn't show single-pixel-wide areas very well) so I replaced it and junked the original.  I've never heard of any emulators supporting a horizontal rate of sysclock/64, so I wonder if my chip was broken in unique fashion.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-04-12T16:06:48.780" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2662" PostTypeId="2" ParentId="2659" CreationDate="2017-04-12T16:56:49.963" Score="43" Body="&lt;p&gt;Besides the flags, and differences in cycle count, the more important difference is that &lt;code&gt;JMP x&lt;/code&gt; uses the effective address of &lt;code&gt;x&lt;/code&gt;, while &lt;code&gt;MOV x,R7&lt;/code&gt; uses the value at &lt;code&gt;x&lt;/code&gt;. In other words, there's one level less of indirection, similar to the &lt;code&gt;LEA&lt;/code&gt; and &lt;code&gt;MOV&lt;/code&gt; opcodes for the x86.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &lt;code&gt;JMP R1&lt;/code&gt; faults, and &lt;code&gt;JMP @R1&lt;/code&gt; is equivalent to &lt;code&gt;MOV R1,R7&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means one can use &lt;code&gt;JMP d(R7)&lt;/code&gt; for relative jumps with a full 16-bit displacement (&lt;code&gt;BR d&lt;/code&gt; only has an 8-bit displacement, which is often not enough). In the same way, one can store the address of some block of code (library) in, say, &lt;code&gt;R1&lt;/code&gt;, and use &lt;code&gt;JMP d(R1)&lt;/code&gt; to jump  to a fixed displacement inside this code block. All of this is not possible with a single &lt;code&gt;MOV&lt;/code&gt; instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't make sense to access a register via the memory mapped address instead of just using it directly, because accessing them this way would need one more word per instruction, and therefore is inefficient.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2017-04-12T17:16:28.767" LastActivityDate="2017-04-12T17:16:28.767" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2663" PostTypeId="1" AcceptedAnswerId="2665" CreationDate="2017-04-13T05:32:56.617" Score="11" ViewCount="900" Body="&lt;p&gt;In a typical description of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Coroutine&quot; rel=&quot;nofollow noreferrer&quot;&gt;coroutine&lt;/a&gt; mechanism it usually &lt;a href=&quot;https://en.wikipedia.org/wiki/Coroutine#Implementations_in_assembly_languages&quot; rel=&quot;nofollow noreferrer&quot;&gt;mentioned&lt;/a&gt; that the PDP-11 instruction set provided a way to effect the coroutine switch by a single instruction, namely&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;JSR PC,@(SP)+&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was that instruction actually used in standard system software (an OS, a language runtime library, etc.)?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-07-11T23:47:22.600" LastActivityDate="2019-08-29T18:20:20.317" Title="Was the PDP-11 coroutine instruction actually used?" Tags="&lt;software-development&gt;&lt;pdp-11&gt;&lt;instruction-set&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="2664" PostTypeId="1" AcceptedAnswerId="2677" CreationDate="2017-04-13T06:25:16.873" Score="20" ViewCount="1497" Body="&lt;p&gt;I have discovered that the DEC PDP-10 used a floating-point format that differed from IEEE-754 in an interesting way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IEEE_floating_point&quot; rel=&quot;noreferrer&quot;&gt;IEEE-754&lt;/a&gt; is like &lt;a href=&quot;https://en.wikipedia.org/wiki/Signed_number_representations#Signed_magnitude_representation&quot; rel=&quot;noreferrer&quot;&gt;sign-magnitude&lt;/a&gt; representation.  The only difference between a positive value and its negative is the value of the MSB of the word.  Assuming no &lt;code&gt;NaN&lt;/code&gt;s, if you use an integer subtractor to compare two IEEE floats, the compare operation yields the correct result in 3 out of 4 cases.  The case where the integer compare result is wrong is when both values are negative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DEC PDP-10 had the same mantissa with &lt;em&gt;&quot;hidden 1 bit&quot;&lt;/em&gt;, offset binary exponent to the left of the mantissa, but when the numbers were negative, the PDP-10 represented that value as the &lt;strong&gt;2's complement&lt;/strong&gt; of the positive value.  So there was no &quot;-0&quot; representation (just one 0) and the integer compare operation worked in any case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is clever.  I wonder what other early computers may have used this and &lt;strong&gt;why&lt;/strong&gt; didn't this catch on with IEEE?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you combine this clever formatting with floats with denormals, you can have a floating-point representation that is monotonic mapping that is a piecewise-linear approximation to the &lt;code&gt;arcsinh()&lt;/code&gt; function when mapping the floating-point value to an integer having the same bit pattern in the word.  Seems like a clever idea missed by whatever IEEE committee that first came up with 754.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose they wanted &quot;-0&quot; so that if an operation like &lt;code&gt;1/x&lt;/code&gt; was done, they would know whether to use &lt;code&gt;+INF&lt;/code&gt; or &lt;code&gt;-INF&lt;/code&gt;, but if you leave that &quot;feature&quot; out and leave out &lt;code&gt;NaN&lt;/code&gt;s, this format can assign &lt;strong&gt;every&lt;/strong&gt; bit pattern to a numerical value that is a strictly-increasing mapping and that seems like a valuable feature.  Every bit pattern is a number and a unique number.  No &lt;code&gt;NaN&lt;/code&gt;s or &lt;code&gt;INF&lt;/code&gt;s or other goofy bit patterns to cause an exception.&lt;/p&gt;&#xA;" OwnerUserId="4875" LastEditorUserId="7946" LastEditDate="2018-08-23T14:52:01.317" LastActivityDate="2019-08-31T20:10:57.060" Title="What other computers used this floating-point format?" Tags="&lt;history&gt;&lt;floating-point&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="2665" PostTypeId="2" ParentId="2663" CreationDate="2017-04-13T06:51:27.673" Score="8" Body="&lt;p&gt;&lt;a href=&quot;http://pdp-11.trailing-edge.com/rsts11/rsts-11-072/RTSODT.MAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is a link to an octal debugger written in PDP-11 Assembly&lt;/a&gt;. It's using this instruction in the I/O routines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently, the RSTS APIs use a global data structure called &lt;code&gt;XRB&lt;/code&gt; to do I/O. And this application keeps a backup of &lt;code&gt;XRB&lt;/code&gt; which is called &lt;code&gt;O.XRB&lt;/code&gt;. Now, &lt;code&gt;O.IO&lt;/code&gt; is a routine which, when called, does two things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Copies &lt;code&gt;XRB&lt;/code&gt; into &lt;code&gt;O.XRB&lt;/code&gt;, and writes some constants into &lt;code&gt;XRB&lt;/code&gt; in preparation for a syscall&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Leaves on the top of the stack the address to a routine which restores &lt;code&gt;XRB&lt;/code&gt; from the backup, &lt;code&gt;O.XRB&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This is why &lt;code&gt;O.IO&lt;/code&gt; contains the coroutine instruction (it exits the subroutine and leaves PC + 2 on top of stack), and is also why every call to &lt;code&gt;O.IO&lt;/code&gt; is followed by the coroutine instruction (it calls the subroutine to restore &lt;code&gt;XRB&lt;/code&gt; and makes that subroutine return to the caller).&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-12-19T12:47:08.703" LastActivityDate="2018-12-19T12:47:08.703" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2666" PostTypeId="2" ParentId="2663" CreationDate="2017-04-13T07:12:56.080" Score="11" Body="&lt;p&gt;Well, I used it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the late 1980s, I led a small team who produced a signalling message distributor for British Rail (as it was then).  This was on the PDP-11 in a mixture of C and Assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We used the coroutine switch instruction in the communications handler part of the application.&lt;br&gt;&#xA;It shaved the odd millisecond off the system's response to incoming messages on any of a dozen modem lines.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't ask me exactly how it was used.  My memory isn't that good and the system was scrapped in the early 2000s.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2017-04-13T07:12:56.080" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2667" PostTypeId="2" ParentId="2664" CreationDate="2017-04-13T13:34:54.730" Score="9" Body="&lt;p&gt;&lt;a href=&quot;http://www.quadibloc.com/comp/cp0201.htm&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; has a list of various floating point formats for a number of different machines. Having skimmed it, I must say that the DEC 10 format seems quite rare. None of the architectures I have significant experience of used anything similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DEC 10 scheme has the advantage that you can use ordinary integer compares, but it has the disadvantage that normalisation is more complex. With the sign and magnitude version, all you have to do is look for the leading 1 and the normalised mantissa is the bits to the right of that 1. With the DEC 10 scheme, this still works for positive numbers but for negative numbers, you need to look for the first 0 instead. Whereas comparisons are quite common, normalisation has to happen on every single floating point arithmetic operation, sometimes more than once. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, in modern microprocessors, at least, floating point operations tend to be done in separate coprocessor modules that started out literally as separate chips. In such cases, the advantage of being able to reuse integer compares is moot.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-04-13T13:34:54.730" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2668" PostTypeId="5" CreationDate="2017-04-13T14:12:02.360" Score="0" Body="&lt;p&gt;This tag is for questions regarding the documented instruction sets of microprocessors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is in accordance with the meta discussion:-&lt;br&gt;&#xA;&lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/q/337/276&quot;&gt;How to tag questions about processor instruction sets (machine code)?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;/questions/tagged/undocumented-opcodes&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;undocumented-opcodes&amp;#39;&quot; rel=&quot;tag&quot;&gt;undocumented-opcodes&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-04-13T14:12:02.360" LastActivityDate="2017-04-13T14:12:02.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2669" PostTypeId="4" CreationDate="2017-04-13T14:12:02.360" Score="0" Body="For questions regarding the instruction sets of microprocessors." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-04-13T14:12:02.360" LastActivityDate="2017-04-13T14:12:02.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2670" PostTypeId="2" ParentId="1971" CreationDate="2017-04-13T19:27:49.593" Score="5" Body="&lt;p&gt;Well, since you asked for &quot;any other emulation&quot;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not C64, but the Atari800 emulator (&lt;a href=&quot;http://atari800.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;http://atari800.sourceforge.net/&lt;/a&gt;) for Atari 8-bit systems can run using &quot;curses&quot; for display.  This lets you use it from the command-line without a graphical environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will obviously limit your ability to do much with it beyond the hardware's text-based screen modes.&lt;/p&gt;&#xA;" OwnerUserId="4882" LastActivityDate="2017-04-13T19:27:49.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2671" PostTypeId="2" ParentId="2598" CreationDate="2017-04-13T21:37:19.637" Score="6" Body="&lt;p&gt;In addition to the other answers, you can also remove the vertical (left and right) borders. By using the raster interrupt, counting clock cycles and carefully timing an instruction to reduce the screen width from 40 to 38 columns, you can make the VIC believe that it has already started to paint the border, and thereby turned off the sprites, when it actually hasn't. This allows you to place visible sprites in the border area, which can be used to display graphics outside of the normally drawable screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find more details about this on Stack Overflow: &lt;a href=&quot;https://stackoverflow.com/q/1477444/3478852&quot;&gt;&lt;em&gt;How do I show sprites in the border on C64?&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2126" LastEditorUserId="-1" LastEditDate="2017-05-23T12:39:25.033" LastActivityDate="2017-04-14T08:50:14.870" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2672" PostTypeId="1" AcceptedAnswerId="2673" CreationDate="2017-04-13T23:02:11.860" Score="24" ViewCount="4041" Body="&lt;p&gt;Many retrocomputers from the late 80s and early 90s had audio DAC hardware support. This includes the Amiga, Classic Macintosh, and PC's with SoundBlaster add-on cards. Despite the fact that the MP3 codec is designed to perform well at pretty low bit rates (&amp;lt;128 Kbps), these retrocomputers can't handle MP3 playback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below is an excerpt from the &lt;em&gt;AmigaAMP&lt;/em&gt; System Requirements.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Basically AmigaAMP runs fine on any stock Amiga with at least a 68030-50 MHz processor. However, if you want to be able to play MP3 without downsampling and quality loss you need at least a 68060-50. Be prepared to face heavy system load! :-) If you've got a PowerPC you can play MP3 streams in the background without noticeable system slowdown at all.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What is the critical bit of computational capability that is so lacking in the earlier machines that makes MP3 playback infeasible?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4025" LastEditDate="2017-07-05T15:35:16.133" LastActivityDate="2020-05-11T13:32:53.427" Title="Why does MP3 audio decoding overwhelm retro CPU's?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;digital-audio&gt;&lt;compression&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2673" PostTypeId="2" ParentId="2672" CreationDate="2017-04-14T00:05:48.500" Score="34" Body="&lt;p&gt;What's lacking is mostly raw number-crunching ability.  The MP3 format is &lt;em&gt;relatively&lt;/em&gt; lightweight, and can be implemented using only fixed-point math (no FPU required), but it still takes a fair amount of computation to turn compressed frequency-domain data into uncompressed time-domain data that can be fed to a DAC. This &lt;a href=&quot;http://ieeexplore.ieee.org/document/4564625/?reload=true&quot; rel=&quot;noreferrer&quot;&gt;IEEE article&lt;/a&gt; quotes a minimum performance of 24 MIPS, and that is based on platform optimizations of the decoder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikipedia says that the &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68030&quot; rel=&quot;noreferrer&quot;&gt;68030&lt;/a&gt; at 50 MHz performs at about 18 MIPS, while a 50 MHz &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68060&quot; rel=&quot;noreferrer&quot;&gt;68060&lt;/a&gt; would do 67 MIPS.  Specific differences likely to be relevant are the much larger caches (8 kb versus 256 bytes), dual instruction pipelines permitting the CPU to execute two instructions at a time, and general optimization of integer math circuits.&lt;/p&gt;&#xA;" OwnerUserId="4" LastEditorUserId="4335" LastEditDate="2017-05-27T23:55:17.717" LastActivityDate="2017-05-27T23:55:17.717" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="2674" PostTypeId="2" ParentId="2672" CreationDate="2017-04-14T08:05:03.080" Score="12" Body="&lt;p&gt;Mp3 is primarily a &lt;em&gt;lossy compression&lt;/em&gt; format for audio. It must be decompressed, and the process needs a lot of CPU time (as for retro computers.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern computers both have speeds good  two orders of magnitude higher, and CPUs  with specialized &quot;multimedia&quot; instructions that streamline operations like fast cosine transform. A trivial operation like &quot;flip a byte backwards, bit-wise&quot; on Amiga can take some 30 instructions. A modern PC will take maybe two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The situation is somewhat similar for JPEG - I remember how my Amiga600 (7MHz) would take 20 minutes to display a JPEG that a PC (300MHz) would show in a blink of an eye. The CPU would suggest a speed-up to something of order of 20-30 seconds, but the multimedia instructions made all the difference.&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="74" LastEditDate="2017-04-14T08:14:47.870" LastActivityDate="2017-04-14T08:14:47.870" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="2676" PostTypeId="1" AcceptedAnswerId="2678" CreationDate="2017-04-15T13:14:21.120" Score="6" ViewCount="569" Body="&lt;p&gt;I'm writing a Z80 emulator in Swift for Mac OS and I have got as far as implementing the 16 bit pop instruction. The documentation I have found (i.e. The Z80 CPU User manual UM008011-0816 and also this document about &lt;a href=&quot;http://www.z80.info/zip/z80-documented.pdf&quot; rel=&quot;noreferrer&quot;&gt;undocumented Z80 instructions&lt;/a&gt;) says that the flags are not affected by &lt;code&gt;pop dd&lt;/code&gt; (where dd is a 16 byte register).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, one of the pop instructions is &lt;code&gt;pop af&lt;/code&gt; (opcode &lt;code&gt;0xf1&lt;/code&gt;) where &lt;code&gt;f&lt;/code&gt; in &lt;code&gt;af&lt;/code&gt; is the flags register. Does the Z80 toss the low byte or does it set the flags in apparent contradiction to the documentation.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-04-15T15:56:31.067" Title="pop af and flags" Tags="&lt;emulation&gt;&lt;z80&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2677" PostTypeId="2" ParentId="2664" CreationDate="2017-04-15T13:43:44.767" Score="11" Body="&lt;p&gt;Over the years, I have seen some really innovative ideas originally produced by the engineers at DEC (Digital Equipment Corporation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They were the IBM or later the Apple of their day. With custom hardware and a completely different implementation strategies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take the widely implemented VTxxx terminal types. Though almost no one uses the VT420 anymore, it was one of the first color capable TTYs. It didn't use ANSI based color though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Digital also made harddrives which had removable platter packs. Drive electronics and motors were separately replaceable from data storage. Sadly they were very heavy -- washing machine sized, only talked to DEC equipment, and were really expensive. SyQuest and Iomega both tried to implement solutions of this nature in the mid 90's. Both of which lost to CD's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So back to your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Standards are heavily driven by industry players. Standards exist to validate the status quo. They are not usually driven by the best solution, but by the solution which is the most agreeable to all the people at the table. This is also why standards take so long to ratify and in many cases the market has decided prior to the ratification. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the time IEEE-754 was finalized in 1985, DEC was no longer the huge powerhouse they once were. The market was flooded with 'cheap' desktop computers. Massive Mainframes and Big Iron were on the way out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This quote from the IEE-754-1985 standard's wiki page gives the correct sense of the issue when looked at with the above context...&quot;It was implemented in software, in the form of floating-point libraries, and in hardware, in the instructions of many CPUs and FPUs. &lt;strong&gt;The first integrated circuit to implement the &lt;em&gt;draft&lt;/em&gt; of what was to become IEEE 754-1985 was the Intel 8087&lt;/strong&gt;.&quot; Emphasis added by me. But it shows who &lt;em&gt;WAS&lt;/em&gt; at the table.&lt;/p&gt;&#xA;" OwnerUserId="3648" LastEditorUserId="3648" LastEditDate="2017-04-15T14:04:11.583" LastActivityDate="2017-04-15T14:04:11.583" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2678" PostTypeId="2" ParentId="2676" CreationDate="2017-04-15T15:56:31.067" Score="11" Body="&lt;p&gt;One of the main purposes of the &lt;code&gt;POP AF&lt;/code&gt; and the &lt;code&gt;EX AF,AF'&lt;/code&gt; instructions actually is to be able to move the flags to a safe place and restore them afterwards. So, opposite to what you have read, &lt;code&gt;POP AF&lt;/code&gt; actually &lt;em&gt;does&lt;/em&gt; affect the flags (but only if the destination register is AF). Apparently, the writers assumed this as a given.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.z80.info/z80sflag.htm&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; is an article on how Z80 instructions affect the flags.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2017-04-15T15:56:31.067" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2679" PostTypeId="1" CreationDate="2017-04-15T16:28:35.277" Score="10" ViewCount="569" Body="&lt;p&gt;I've been trying to figure out how the sequence of microcode instructions as described in the [schematics and ROM listing][1] in the PDP-11/40 (KD11-A Processor) relates to the timings given in Appendix C of the [Handbook], but I can't make the two match. If I just add up the time for the microinstructions, the result is always lower than it should be.&lt;/p&gt;&#xA;&lt;p&gt;Example 1: &lt;code&gt;JMP&lt;/code&gt; (Mode 1), 1.80 µs nominal&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  Cycle  Bus Microcode&#xA;  ─────  ─── ─────────&#xA;  140 ns  +  FET00/01/02&#xA;  140 ns     FET03&#xA;  200 ns     FET04&#xA;  140 ns     FET05&#xA;  200 ns     JMP00&#xA;  140 ns     JMP04&#xA;  200 ns     JMP12&#xA;  140 ns     JMP13&#xA;────────     ─────&#xA;1.30  µs, 1  Bus Cycle&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Example 2: &lt;code&gt;JMP&lt;/code&gt; (Mode 2), 2.10 µs nominal&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  Cycle  Bus Microcode&#xA;  ─────  ─── ─────────&#xA;  140 ns  +  FET00/01/02&#xA;  140 ns     FET03&#xA;  200 ns     FET04&#xA;  140 ns     FET05&#xA;  300 ns     JMP01&#xA;  200 ns     JMP02&#xA;  140 ns     JMP04&#xA;  200 ns     JMP12&#xA;  140 ns     JMP13&#xA;────────     ─────&#xA;1.60  µs, 1  Bus Cycle&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Example 3: &lt;code&gt;JMP&lt;/code&gt; (Mode 3), 2.30 µs nominal&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  Cycle  Bus Microcode&#xA;  ─────  ─── ─────────&#xA;  140 ns  +  FET00/01/02&#xA;  140 ns     FET03&#xA;  200 ns     FET04&#xA;  140 ns     FET05&#xA;  300 ns  +  JMP05&#xA;  140 ns     JMP11&#xA;  200 ns     JMP12&#xA;  140 ns     JMP13&#xA;────────     ─────&#xA;1.40  µs, 2  Bus Cycles&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I know about the three possible clock cycles (140/200/300 ns). I know that the clocks are turned off for a Unibus cycle and turned on again at completion of the cycle, but I get varying length for the bus cycles, if these intervals are what is what is missing.&lt;/p&gt;&#xA;&lt;p&gt;So: Given the sequence microinstructions for a command as described &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp11/1140/PDP-1140_System_Engr_Drawings_Rev_P_Jun74.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, how can I derive the time necessary to complete a macroinstructions?&lt;/p&gt;&#xA;&lt;p&gt;Other references:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp11/handbooks/PDP-11_40_Processor_Handbook_1972.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Handbook&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp11/1140/DEC-11-HKDAA-A-D_KD11-A_Processor_Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Processor Manual&lt;/a&gt; explains the microcode signals, among other things.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-11-25T11:31:00.677" LastActivityDate="2020-11-25T11:31:00.677" Title="Timing and microcode in the PDP-11/40" Tags="&lt;pdp-11&gt;&lt;instruction-set&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2680" PostTypeId="2" ParentId="2679" CreationDate="2017-04-16T16:42:39.203" Score="5" Body="&lt;p&gt;It looks like the bus cycles account for the difference.  Treat a bus cycle as something in the neighborhood of 450-500 ns and treat the rest as rounding error.  If you want a firmer guess at the bus cycle time you will need to consult the documentation for the common memory boards that shipped with the 11/40 and see exactly how long they took to fulfill memory read/write requests.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The amount of time required for the full instruction includes bus access time; bus time is not deducted from instruction time.  This means that actual instruction execution times will vary depending on the speed of your memory, and the values printed in the processor manual should be considered &quot;par&quot; values you can expect with the default memory that DEC was shipping at that time.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-04-16T16:42:39.203" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2681" PostTypeId="2" ParentId="2405" CreationDate="2017-04-16T18:06:32.907" Score="5" Body="&lt;p&gt;As people have mentioned in comments, you're looking at a lot of work. You are better off trying to locate a MFM controller. If you only want what is on the disc then maybe somebody with a controller would read it for you. That is of course assuming the data on the drive hasn't degraded. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the electrical connections are known and well-documented the format of the data on the drive is also not what was used on later IDE drives. MFM drives use RLL encoding. That's when it gets fun because there were different configurations of RLL encoding. Controllers needed to look at the disk and figure out which was used.  I hazilly remember there being a way that you could specify during format, but I only used MFM drives for a very short period of time. It was more my curiosity on how something worked than needing it for a particular task. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;About half of the electronics to read the disk, and the optional second drive, are on the card. That card had BIOS which presented the drive(s) to the computer as a storage device and hooked interrupt (INT)13 to make it bootable. SCSI controllers also do this. When a drive is presented as INT13 however you don't really need a driver to talk to it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A software driver was not used to describe drives until Windows 95, which booted from MSDOS. A actual  software driver for harddives didn't exist until 2000.&#xA;Linux started in 1991 so is not much older than Windows 95. The drive is probably predates that by 10 years. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is 20 megabytes so you're not really going to be able to use it on a modern operating system. At the time 20 megabytes was a lot compared to the 360 K boot disk of dos 3.3(if it was used in a 8088).&lt;/p&gt;&#xA;" OwnerUserId="3648" LastActivityDate="2017-04-16T18:06:32.907" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="2682" PostTypeId="1" AcceptedAnswerId="2684" CreationDate="2017-04-16T20:58:16.467" Score="0" ViewCount="375" Body="&lt;p&gt;I read or heard a long time ago that when Altavista was the market leader of internet search, the decision-makers at Digital Corporation didn't know what it was and didn't realize that they were the market leaders because the directors of the board at Digital Corporation were mostly old men over 80 years old who didn't know what the web was. Therefore Altavista were not as successful as they could have been. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this story true or was it a rumour?&lt;/p&gt;&#xA;" OwnerUserId="297" LastActivityDate="2017-04-17T02:55:16.797" Title="Is this story true about Digital and Altavista" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="7" ClosedDate="2017-04-18T21:37:14.007" ContentLicense="CC BY-SA 3.0" />
  <row Id="2683" PostTypeId="2" ParentId="2405" CreationDate="2017-04-16T22:37:10.990" Score="5" Body="&lt;p&gt;There were such things as SCSI-to-MFM bridgeboards, such as the Adaptec ACB-4000 or the Xebec 1410. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only experience I've had with this is trying to use Linux (running on a Pentium II PC) to access an MFM drive with an Xebec 1410-type bridgeboard. I was able to establish partial communication with the drive by disabling parity and applying a patch ('&lt;a href=&quot;http://ftp.vim.org/ftp/pub/ibiblio/kernel/patches/scsi/&quot; rel=&quot;noreferrer&quot;&gt;adaptec-40XX-1.02&lt;/a&gt;') to the kernel which hardcoded the drive size. However I didn't manage to get as far as reading data before the drive failed.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2017-04-16T22:37:10.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2684" PostTypeId="2" ParentId="2682" CreationDate="2017-04-17T02:55:16.797" Score="8" Body="&lt;p&gt;Per &lt;a href=&quot;http://www.sigcis.org/files/Goodwin_paper.pdf&quot; rel=&quot;noreferrer&quot;&gt;DEC: The mistakes that led to its downfall&lt;/a&gt; by David T. Goodwin and Roger G. Johnson of Birkbeck College, University of London:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DEC was the first Fortune 500 company to have its own web site, launching in October 1993, and was the first with an online storefront. It's improbable that &quot;decision makers&quot; didn't know what the web was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Possibly the kernel of truth behind your wild story is that CEO and Chairman Robert Palmer — then not quite 60, as if it makes any difference — valued AltaVista at $0 at the time of the the sale to Compaq. But the paper asserts this was likely a combination of not just failure to realise potential but also the need to sell the company, stemming from a decline in VAX sales attributable to overly-aggressive pushing of the Alpha and the sale of profitable but non-core side businesses.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-04-17T02:55:16.797" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2685" PostTypeId="1" AcceptedAnswerId="2686" CreationDate="2017-04-17T05:23:44.453" Score="17" ViewCount="5152" Body="&lt;p&gt;I plan to install Windows 3.0 and PC/GEOS on top of DOS. Plus I will install numerous games from the 1984-1992 timeframe. Some of the later games will require &gt;640K RAM and make use of an EMM driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am mainly debating between using MS-DOS v5 or FreeDOS. MS-DOS 5 is appropriate for the time period, and I know it will support the 4 MB of RAM and the 2 GB HD partition that I am planning. FreeDOS, on the other hand, is obviously much more modern and maintained. However, it is a re-engineered version of DOS and probably has compatibility issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me, FreeDOS seems like the safe choice for finding help online and for being able to have all the &quot;modern&quot; DOS niceties. But MS-DOS 5 seems like the &quot;safer&quot; choice for compatibility with the applications and games I want to install.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which DOS would be the better choice, OR is there a third option I should consider above either?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="15334" LastEditDate="2021-01-12T22:22:32.103" LastActivityDate="2021-01-12T22:22:32.103" Title="What is most appropriate choice for DOS for a 1990 80386 PC?" Tags="&lt;ibm-pc&gt;&lt;operating-system&gt;&lt;dos&gt;" AnswerCount="5" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="2686" PostTypeId="2" ParentId="2685" CreationDate="2017-04-17T08:24:55.733" Score="26" Body="&lt;p&gt;If you’re going for strict historical accuracy, a 1990 PC could have had either MS-DOS/PC-DOS 3.3, MS-DOS/PC-DOS 4.01, or DR DOS 5, along with Windows 3.0. MS-DOS 5 was released in 1991, and DR DOS 6 followed in the same year. An interesting OEM option is Compaq’s 3.31 DOS, which included support for partitions larger than 32MiB, and the first expanded memory manager (CEMM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of all those options, I’d say DR DOS 6 is the most convenient: it has the most memory optimisation features of the lot (&lt;a href=&quot;https://archive.org/stream/1992-06-compute-magazine/Compute_Issue_141_1992_Jun#page/n73/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;Compute Magazine, June '92&lt;/a&gt; review). You could also try MS-DOS 5, perhaps with QEMM or DOSMAX if you need more conventional memory. (You’ll need a boot menu anyway because many early nineties games aren’t compatible with V86 memory extenders.) Both of these would be period-accurate for 1992.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you’d rather go for convenience, your options widen: you could use MS-DOS 6.22, OpenDOS 7.03, or FreeDOS. All three are pretty much on a par in terms of usability: while FreeDOS has better tools, you’ll find far more information online about MS-DOS and to a lesser extent OpenDOS. (All three include good documentation of their own.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While on the subject of convenience, I’d also recommend going for Windows 3.1 or even Windows for Workgroups 3.11: they’re not historically accurate for 1990 either but they’re much more usable than 3.0. If your reference point is 1992 then Windows 3.1 is fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course all this ignores the question of licenses. It was also common in those days to install loads of utilities to alleviate the OS’s deficiencies, which levels the playing field too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I actually bought a PC in 1992; I got a 33MHz 386 with 8MiB of RAM (which was a lot at the time), a 120MiB hard drive, and DR DOS 6 and Windows 3.1. My only regret in the years that followed was not spending a bit more to get a 250MiB drive. I knew someone who had a gigabyte SCSI drive in 1992 but that cost half an engineer’s monthly wage (10 000 FF).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="4335" LastEditDate="2017-04-17T22:13:27.693" LastActivityDate="2017-04-17T22:13:27.693" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="2687" PostTypeId="2" ParentId="2685" CreationDate="2017-04-17T12:27:25.710" Score="6" Body="&lt;p&gt;I'd say it depends:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plain old DOS is not such a complicated operating system that a free alternative like FreeDOS would really cause severe compatibility problems - At least as long as you stay within the lower 640k. FreeDos is the easiest to obtain and doesn't come with in-built licensing implications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Himem and EMS might cause one or the other compatibility issues. But not only between free and commercial alternatives, also between the various commercial DOS vendors and versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using FreeDos with all my old PCs and have not experienced any such problems up to now, though. Support for &quot;newer&quot; hardware, like USB and networking, which tend to come in handy for transferring software to the legacy machine, is also much better on FreeDos than of any of the legacy systems.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2017-04-17T12:27:25.710" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2688" PostTypeId="2" ParentId="2685" CreationDate="2017-04-17T13:46:51.080" Score="4" Body="&lt;p&gt;I remember running a version of DOS 4.0 on my 1989-era 386sx machine, along with DesqView/386. Shortly thereafter, we installed Windows 3.0 and then MS DOS 5.0... As far as being period correct and useful, that would be a reasonable place to start. Given the expected life of that 386 box, you could go as new as MS DOS 6.22 and WfWG 3.11 and still be within the realm of possibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(BTW, if the goal is &lt;em&gt;period correct&lt;/em&gt;, that's not a 2GB Disk. Even 80MB disks sold for around $500-600. I know of at least one late 80's 386 machine with a 1GB disk, but it was a large external box and the application was quite high-end.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Corrected timeline, thanks to Michael Kjörling.&lt;/p&gt;&#xA;" OwnerUserId="4522" LastEditorUserId="4522" LastEditDate="2017-04-18T13:35:47.993" LastActivityDate="2017-04-18T13:35:47.993" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2689" PostTypeId="2" ParentId="2685" CreationDate="2017-04-17T14:16:55.020" Score="1" Body="&lt;p&gt;I've used &lt;a href=&quot;https://www.dosbox.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOSBox&lt;/a&gt; for the exact same purpose, i.e., playing old games.  I found it to be much easier to configure for various things (Soundcards, EMM, Ramdisks, etc.) which many games of old needed.  Best of all you can run it on current hardware so you won't have to dig up an old vga monitor out of a landfill.&lt;/p&gt;&#xA;" OwnerUserId="4899" LastActivityDate="2017-04-17T14:16:55.020" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2691" PostTypeId="1" CreationDate="2017-04-18T08:32:35.357" Score="11" ViewCount="1405" Body="&lt;p&gt;I am learning about the history of computers, and based on what I know so far, Unix was run on a large computer, and in order to use it, you have to use a computer terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody knows what is the version of Unix and the name of the (large) computer it run on in this 1982 video:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=tc4ROCJYbm0&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=tc4ROCJYbm0&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are some snapshots from the video:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MP0ZC.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MP0ZC.png&quot; alt=&quot;Screenshot 1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/rdiIf.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rdiIf.png&quot; alt=&quot;Computer&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/N5nxZ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/N5nxZ.png&quot; alt=&quot;Screenshot 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4905" LastEditorUserId="276" LastEditDate="2017-04-18T08:56:20.400" LastActivityDate="2017-05-19T20:37:48.813" Title="What is the version of Unix and the name of the computer it run on in this 1982 video?" Tags="&lt;history&gt;&lt;unix&gt;&lt;identify-this-computer&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2692" PostTypeId="2" ParentId="2691" CreationDate="2017-04-18T12:38:32.143" Score="11" Body="&lt;p&gt;It is likely a PDP-11/40, judging from the front panel just visible to the left of the terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-11/40 is consistent with the purple/red paint on the cabinet; and with the fact it's running some sort of UNIX. It also seems that they are using the computer to do CAD designs of microchips; I know that the ULA in the ZX Spectrum was designed in this way on a PDP-11.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it's impossible to say which version of UNIX is running here but it could be 1BSD or 2BSD. These were apparently popular unices on the PDP-11 around 1982.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2017-04-18T14:57:19.283" LastActivityDate="2017-04-18T14:57:19.283" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2693" PostTypeId="1" AcceptedAnswerId="2700" CreationDate="2017-04-18T13:48:06.927" Score="8" ViewCount="1185" Body="&lt;p&gt;I recently picked up a (seems like) fully functional Apple IIc on eBay to play around with. I do have a modern TV that has RCA input port that the Apple IIc supports. However, when I plug in the Apple IIc to the TV and turn it on, the display briefly displays the Apple IIc boot up screen (black screen with Apple IIc text on top) for a second, then everything turned into snowflakes, which means the video port on the Apple IIc is definitely not bad (I can replicate this every time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What else can I do to make this Apple IIc work on my TV?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also have an RCA to VGA adapter coming, not sure if that will help though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found out that if you switched to another input source then switch back to the input sources the Apple IIc is connected to, it will display the correct text for a fraction of a second, then return to the static screen. I've also tried running the diagnostic (holding both Apple key at startup), it says system OK (I managed to catch the text during the fraction of second which it appeared correctly).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a picture of the static:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QQZGS.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QQZGS.png&quot; alt=&quot;Static&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4906" LastEditorUserId="4906" LastEditDate="2017-04-19T08:52:45.697" LastActivityDate="2017-04-19T12:23:21.590" Title="Using Apple II with modern monitor displays snowflake" Tags="&lt;apple-ii&gt;&lt;display&gt;" AnswerCount="1" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="2694" PostTypeId="1" AcceptedAnswerId="2695" CreationDate="2017-04-18T18:16:19.983" Score="24" ViewCount="5213" Body="&lt;p&gt;Over the years I rarely saw anything specifically for the C128 besides CP/M and C-Net 128. I searched at one point for any C128 specific games but only found a version of &quot;The Last V8&quot; which didn't appear to be any different from the C64 version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't seem like there was much effort to make games specifically for the C128 as there are so few out there. But that being said, was there any advantage to having a game run natively on the C128 or were the media functions limited to the VIC-II and SID that was &quot;C64 grade&quot; in the first place?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can understand from the publishers point of view that they could just target the C64 and get both markets while limiting to the C128 would cut out the majority of people. However, I'm just curious if the improvements of the C128 were strictly &quot;business application focused&quot; and all gaming was limited to the legacy C64 mode.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="6794" LastEditDate="2019-05-22T08:26:44.067" LastActivityDate="2019-05-22T12:38:50.350" Title="Did C128 native games have any technical advantages over C64 ones?" Tags="&lt;gaming&gt;&lt;commodore-128&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2695" PostTypeId="2" ParentId="2694" CreationDate="2017-04-18T20:54:58.470" Score="21" Body="&lt;p&gt;Ultima V was I think the best known game that behaved differently on a Commodore 128 than it did on the Commodore 64, on the C128 it had music but not on the C64. I believe this was accomplished by separate C64 and C128 versions on the same disk. Apparently some of &lt;a href=&quot;http://www.lemon64.com/forum/viewtopic.php?t=19322#223467&quot; rel=&quot;noreferrer&quot;&gt;Andrew Braybrook's games for the C64&lt;/a&gt;, like Morpheus and Alleykat, took advantage the ability to switch briefly into 2MHz mode when running in C64 mode on a C128 in order to get better graphical effects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also a fair number of games that either were only available in C128 versions or had separate C64 and C128 versions. It's easy enough to find &lt;a href=&quot;http://www.lemon64.com/forum/viewtopic.php?t=16196&quot; rel=&quot;noreferrer&quot;&gt;lists of C128 games&lt;/a&gt; if you search the web but its not obvious what about the C128 made these games better or possible. I think the Infocom games that were available on the C128 but not the C64, like Trinity, Bureaucracy, and Beyond Zork, needed the extra memory the C128 had.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2017-04-19T07:44:06.093" LastActivityDate="2017-04-19T07:44:06.093" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2696" PostTypeId="2" ParentId="194" CreationDate="2017-04-19T08:49:01.680" Score="6" Body="&lt;p&gt;The Sun sun3 architecture hails from 1985, and there are 2.6.x ports to it (which are not that different from &quot;modern&quot; kernels, especially when it comes to features that are useful on old hardware. It could support all the software expected of a modern linux system if only the hardware was fast enough :) ).&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-04-19T08:49:01.680" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2697" PostTypeId="1" AcceptedAnswerId="2698" CreationDate="2017-04-19T08:49:02.683" Score="30" ViewCount="4273" Body="&lt;p&gt;I have read that the early terminals were Teletypes, for example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/X2g7g.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/X2g7g.jpg&quot; alt=&quot;Teletype&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you send your input to the (large) computer, and then you receive the result which gets printed on paper I suppose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But could you actually see what you were typing? Does a Teletype have a small screen or something that allows you to see what you are typing?&lt;/p&gt;&#xA;" OwnerUserId="4905" LastEditorUserId="836" LastEditDate="2017-04-19T13:55:12.000" LastActivityDate="2020-09-18T21:43:37.930" Title="Could you see what you are typing in a Teletype?" Tags="&lt;history&gt;" AnswerCount="6" CommentCount="6" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2698" PostTypeId="2" ParentId="2697" CreationDate="2017-04-19T08:52:13.567" Score="50" Body="&lt;p&gt;You could see what you were typing because it appeared on the paper in front of you.  A teletype is just an electric typewriter at heart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was no screen, the picture is just as the system was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The teletype was the console input to the computer.  Once logged in, you had the standard command prompt.  You entered your command which was sent to the mainframe character by character as you typed it.  Then the response was presented on the paper.  This was replaced by the console, or shell, display on a video monitor when such things came along later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As shown in your picture, there was a punched tape reader / writer on the left hand side, so you could also &quot;type&quot; onto punched tape, or read the contents of tape into the computer or onto the roll of paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I spent my formative years programming on these.  They were very slow to use because the keys had to be depressed a long way before contact was made and the keystroke detected.  This made it impossible to touch-type at any sort of respectable speed.  They were also incredibly noisy.  The sound of the clattering carriages in a room full of a couple of dozen of these could be deafening.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-04-19T09:02:49.903" LastActivityDate="2017-04-19T09:02:49.903" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="2699" PostTypeId="2" ParentId="2405" CreationDate="2017-04-19T09:11:12.400" Score="8" Body="&lt;p&gt;Unless going the SCSI bridge route described in another post, you will very likely need a PC with an ISA slot - such mainboards were only common up to the Pentium 3 era, unless you are using a PC using the PICMG backplane form factor used for industrial control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ST-506 interface drives (aka MFM/RLL) were very dependent on the controller paired to it. A factory new drive was commonly low level formatted using a tool in the controller ROM (debug g=c800:5 IIRC) and would then only work correctly with this or a similarly designed controller card until low level formatted with another controller's tool. In some cases, defect lists had to be typed in from a label on the drive itself, or from accompanying paper documentation, or built by the firmware tool. These were then stored in some location on the drive itself for use of the controller - an ST-506 drive does not hide damaged sectors at its connector, this is the controller card's job to handle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no drive identification of any kind with this interface, the BIOS and the controller firmware has to be told what kind of drive is connected and what its operating parameters are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An old school IDE drive was basically offering a reduced ISA bus on its connector, emulating a WD1003 controller card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can prove necessary to disable most or any on-mainboard IDE, SATA, Floppy functionality to stop it from conflicting with the ST-506 card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be aware that two standards - ST-506 aka MFM/RLL, and ESDI, existed back then that had identical looking connectors and superficially identical looking controller cards. These also are very similar from a what-to-do view, but the electrical interface drive-to-controller is totally different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be aware that some drives need terminating resistors on the last drive on the cable enabled or installed, similar to SCSI. Be aware that some of the signalling on the two cables is essentially analog.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If experimenting, mind that accidentally letting the low level format tool from a ST-506 controller loose on an IDE drive (some IDE might have it built into a corner of their own firmware, or the firmware from an actual controller card could mess with registers on an IDE drive installed in the same machine) was a known way of messing up IDE drives back in the day.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-04-19T09:11:12.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2700" PostTypeId="2" ParentId="2693" CreationDate="2017-04-19T12:23:21.590" Score="5" Body="&lt;p&gt;The RCA to VGA adapter that just came fixed the problem. I'm not sure about the brand but it should be a generic one. The monitor I connected is a pretty standard VGA computer monitor.&lt;/p&gt;&#xA;" OwnerUserId="4906" LastActivityDate="2017-04-19T12:23:21.590" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2702" PostTypeId="1" AcceptedAnswerId="2705" CreationDate="2017-04-19T15:46:54.757" Score="7" ViewCount="372" Body="&lt;p&gt;I am using this emulator for UNIX V7: &lt;a href=&quot;http://www.jbox.dk/sanos/pdp11.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.jbox.dk/sanos/pdp11.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I type &lt;code&gt;ps&lt;/code&gt; to get a list of processes, I get the following error:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4y9pr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4y9pr.png&quot; alt=&quot;Screenshot indicating &amp;quot;No Namelist&amp;quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4916" LastEditorUserId="276" LastEditDate="2017-04-20T07:43:07.637" LastActivityDate="2017-04-20T07:43:07.637" Title="&quot;ps&quot; returning &quot;No namelist&quot; on UNIX V7" Tags="&lt;unix&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2703" PostTypeId="2" ParentId="2697" CreationDate="2017-04-19T15:59:26.383" Score="19" Body="&lt;p&gt;Many Typetype-style devices (I'm not positive about the popular Teletype&amp;reg; brand ASR-33 itself) could be switched to use &quot;full-duplex&quot;, &quot;local&quot;, or &quot;half-duplex&quot; mode.  In full-duplex mode, characters which were typed would be transmitted to a remote machine but would not be processed locally.  In local mode, they would be processed locally but not transmitted.  In &quot;half-duplex&quot; mode (so named because it was suitable for use on &quot;half-duplex&quot; lines that could either transmit or receive, but could not do both simultaneously), characters that were typed would be both transmitted and processed locally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In cases where such usage would be practical, the optimal behavior is often to have characters that are typed be transmitted without being processed locally, but then have the remote system echo back characters as they are processed.  This can provide the user with clean feedback as to when and how characters are being processed, but requires that characters be processed as soon as possible with minimal buffering delays.  Single-user computers seem to favor such an approach since a computer that is doing nothing but awaiting input will be able to respond to it quickly.  Today, Unix systems seem to use a hybrid approach where the terminal itself is not expected to echo characters locally, but the characters get echoed by the system automatically before the application layer requests them.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-04-19T15:59:26.383" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="2705" PostTypeId="2" ParentId="2702" CreationDate="2017-04-19T16:16:07.893" Score="6" Body="&lt;p&gt;&lt;code&gt;ps&lt;/code&gt; in V7 expects to find the unstripped kernel binary in &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V7-Snapshot-Development/usr/src/cmd/ps.c#L104&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;/unix&lt;/code&gt;&lt;/a&gt;, or named as the &lt;em&gt;second&lt;/em&gt; parameter. In the Sanos simulator, you should run&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cd /&#xA;ln rl2unix unix&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to set the &lt;code&gt;/unix&lt;/code&gt; link up correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That won’t fix &lt;code&gt;ps&lt;/code&gt; completely though, it fails looking for &lt;code&gt;/dev/swap&lt;/code&gt;... I don’t know what the node should be for that, none of the values in &lt;code&gt;/dev/makefile&lt;/code&gt; work.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-04-19T16:24:37.813" LastActivityDate="2017-04-19T16:24:37.813" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="2706" PostTypeId="1" CreationDate="2017-04-19T21:47:31.373" Score="25" ViewCount="2076" Body="&lt;p&gt;Amiga's history includes something called &quot;Ranger&quot; that supposedly was either meant to be the next generation system to be released after the Amiga 1000 was released, or the codename for the next version of the custom chipset. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The name was in use till 1987, when the Los Gatos labs were closed and development of the Amiga was moved to Pennsylvania (and Jay Miner left). &#xA;Today, the slow-fast memory area is still occasionally referred to as the &quot;Ranger&quot; RAM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ranger is certainly not AGA, since that should be a later project started around 1990.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So... what is known of this system/chipset? Was it ever officially mentioned in (for example) developer's documentation or DevCon papers? Was there ever a description of the intended features?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="11916" LastEditDate="2019-10-10T22:02:43.207" LastActivityDate="2020-06-11T18:14:35.597" Title="What exactly was the Amiga Ranger?" Tags="&lt;amiga&gt;&lt;chip&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2707" PostTypeId="2" ParentId="2706" CreationDate="2017-04-19T22:30:31.100" Score="8" Body="&lt;p&gt;Ranger was going to be the next generation of the Amiga chipset after Original Chipset (OCS). It was based on the 68010 CPU and supports 2MB chipram. The new chipset would have 128 bit color registers, to support 7-bit color depths and would be capable to show 7-bit colors in 1024x1024 resolution. the high memory bandwidth required for this enhancement would be provided using VRAM chips. Commodore preferred to cancel the project due to the high price of the chipset. This was mostly because of expensive VRAM. Instead they release Enhanced Chipset in 1990 (ECS) which was a slightly improved OCS, so that most people know ECS as a 2MB OCS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They started another project AAA in 1988 for 3rd generation chipset which retains the VRAM idea. When they realized they did't have the resources to complete AAA in time, they quickly developed and released a reduced version named AA (or AGA) in 1992 to catch up with the competition and they failed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Presumably, Ranger - if it hadn't been cancelled - would be something similar to AGA but would have been available earlier.&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="576" LastEditDate="2018-11-27T09:49:12.627" LastActivityDate="2018-11-27T09:49:12.627" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="2708" PostTypeId="2" ParentId="2706" CreationDate="2017-04-20T03:45:39.977" Score="28" Body="&lt;p&gt;Ranger was to be the next generation Amiga, which the original West Coast Amiga engineers began working on in 1986-87, following the release of the Amiga 1000. Jay Miner improved the graphics chipset for Ranger to address the twin problems of chip (i.e. Graphics, Sound, DMA) RAM memory space and bandwidth in the Amiga 1000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Original Amiga chipset (OCS) allowed a maximum of 512K of chip RAM. This was recognized early on as too limiting, and the Ranger was enhanced to support 2M chip RAM. Additionally, Ranger was designed to make use of VRAM in order to improve the memory bandwidth available for graphics. This would allow for more bitplanes (up to 7) and higher display resolutions (up to 1024x1024). According to the Wikipedia article on &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_Ranger_Chipset&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ranger&lt;/a&gt;, work on the chipset enhancements was completed before Jay Miner departed Commodore. Other enhancements such as a full 32-bit 68020 CPU were also contemplated for Ranger, but it is not clear how far that work ever got, and Commodore management chose a different path forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of the cost premium of VRAM vs. DRAM at the time, Commodore management decided to drop Ranger in favor of the Commodore-West Germany project to deliver a more expandable and professional Amiga system in the form of the A2000, while continuing to use the OCS. Noting that there was still no solution to the 512K chip RAM limit, Commodore quickly followed the A2000 release with an enhanced Agnus chip supporting 1M of chip RAM. Later, through the introduction of the Enhanced Amiga Chipset (ECS), the Ranger capability of supporting 2M chip RAM would be realized. This was first shipped along with the Amiga A3000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually, the Pandora project gained traction within Commodore. This project sought to offer more graphics bandwidth for enhanced resolutions, colors, bit-planes, sprites, and playfields, much like Ranger had sought to do several years earlier. Pandora would eventually be delivered as the Advanced Amiga Graphics Architecture (AGA) chipset found in the Amiga A4000, A1200, and CD32. AGA accomplished much of what was intended for Ranger, if not more in certain respects. However, it was delivered 5 years later and at a time when other bigger industry players had largely caught up to the Amiga's original graphical abilities. The failure to deliver the more advanced graphics chipset sooner is often cited as contributing to the decline of the Amiga and Commodore in the 1990s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dave Haynie created a specification for the &lt;a href=&quot;https://bigbookofamigahardware.com/bboah/product.aspx?id=24&quot; rel=&quot;nofollow noreferrer&quot;&gt;never delivered Amiga A3000+&lt;/a&gt; in 1991. This could have been the first machine to use Pandora, and so the specification contains some detailed early descriptions of it.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-05-28T14:54:45.433" LastActivityDate="2020-05-28T14:54:45.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2709" PostTypeId="1" AcceptedAnswerId="2710" CreationDate="2017-04-20T07:45:34.637" Score="4" ViewCount="413" Body="&lt;p&gt;To this day you can buy passive cables which separate out S-Video and composite signals from VGA. There's always a warning to check whether your graphics adapter output these over the VGA connector. While I have seen a number of video cards which had a separate S-Video connector, up to the ATI HD 3650 and the Geforce 6200 but I have never in my life seen or heard of a card which outputted S-Video over VGA. Anyone...?&lt;/p&gt;&#xA;" OwnerUserId="3722" LastActivityDate="2019-10-15T14:38:44.213" Title="Which graphics adapters outputted S-Video over VGA?" Tags="&lt;vga&gt;&lt;s-video&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2710" PostTypeId="2" ParentId="2709" CreationDate="2017-04-20T08:28:18.470" Score="7" Body="&lt;p&gt;Some Matrox cards output composite and S-Video using the HD15 port; for example, the &lt;a href=&quot;https://web.archive.org/web/20171220085221/www.matrox.com/graphics/en/products/graphics_cards/g_series/g450pci/&quot; rel=&quot;nofollow noreferrer&quot;&gt;G450 PCI&lt;/a&gt; (see the TV output chapter in &lt;a href=&quot;https://www.matrox.com/graphics/media/pdf/products/graphics_cards/g_series/en_millg450.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;its manual&lt;/a&gt;). The adapter cable was optional though and isn’t commonly included with the graphics adapter.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-10-15T14:38:44.213" LastActivityDate="2019-10-15T14:38:44.213" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="2711" PostTypeId="2" ParentId="756" CreationDate="2017-04-20T08:52:18.987" Score="3" Body="&lt;p&gt;Be aware that there were several incompatible formats around when 5 1/4 and 8 inch floppy disks were in use - see &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_floppy_disk_formats&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/List_of_floppy_disk_formats&lt;/a&gt;. Incompatible as in, the wrong drive model and/or the wrong controller card will be unable to read a given  floppy disk. Common example: Apple II or C64 5 1/4 inch disks, even if the physical disk used is the same, a standard 5 1/4 inch PC drive on a standard PC controller would be completely unable to read them.&#xA;This is not a problem at filesystem or file format level that can be solved in software - different drive systems encoded data on the disks in a different way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make things worse, there were actually incompatible media types: Soft sectored, and various hard sectored styles. Different magnetic (coercivity) grades also could sometimes give you surprises.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first step in recovering data from such a disk will probably be to find out what system (which machine, which OS, which drive model) originally wrote that disk, then checking what hardware options are available.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-04-20T08:52:18.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2712" PostTypeId="2" ParentId="2697" CreationDate="2017-04-20T09:29:26.713" Score="6" Body="&lt;p&gt;Absolutely stone age stuff. We had these in 1970 when I worked at Hawker Siddeley Woodford. We had amazingly fast leased telephone lines that would handle 128 bps (not kilobits or megabits) connecting to the mainframe at Hatfield. The main point of the paper tape reader was that you could have your bulk input punched up in advance offline in the &quot;punch room&quot; and then read it in far faster than you could type it yourself on the teletype (normally without printing it at the same time). We shared the terminal among the programmers in the office and I got half an hour three times a week, so every second counted. &lt;/p&gt;&#xA;" OwnerUserId="4927" LastActivityDate="2017-04-20T09:29:26.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2713" PostTypeId="2" ParentId="2697" CreationDate="2017-04-20T11:19:23.443" Score="1" Body="&lt;p&gt;Yes, you could... The usual way of sending messages was to punch a paper tape first, and then run it through the tape reader, but you could also type directly, and even communicate as a 'chat', in real time and with the two texts clearly differentiated by the usual two-color tape, red and black...&lt;/p&gt;&#xA;" OwnerUserId="4929" LastActivityDate="2017-04-20T11:19:23.443" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2714" PostTypeId="1" AcceptedAnswerId="2717" CreationDate="2017-04-20T11:43:11.107" Score="6" ViewCount="234" Body="&lt;p&gt;Let's say that we have a PDP-11 computer with Unix installed on it and we have three terminals connected to it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aHitb.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aHitb.png&quot; alt=&quot;PDP11 with 3 terminals&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A terminal can use the &lt;code&gt;tty&lt;/code&gt; Unix command to get the terminal number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my question is: is the terminal number fixed? that is, if &lt;strong&gt;Terminal 2&lt;/strong&gt; typed the &lt;code&gt;tty&lt;/code&gt; command, and the returned result was &lt;em&gt;/dev/tty1&lt;/em&gt;, will the terminal number always be &lt;em&gt;/dev/tty1&lt;/em&gt;, or will it change if the terminal was rebooted or something?&lt;/p&gt;&#xA;" OwnerUserId="4905" LastEditorUserId="276" LastEditDate="2017-04-20T11:48:08.917" LastActivityDate="2017-04-20T13:33:06.023" Title="Is the terminal number fixed?" Tags="&lt;history&gt;&lt;unix&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2715" PostTypeId="1" AcceptedAnswerId="2723" CreationDate="2017-04-20T13:08:09.923" Score="6" ViewCount="448" Body="&lt;p&gt;On the NES, the system I'm most familiar with, the NTSC models produce 240 lines of video image, but the top and bottom 8 pixels are usually considered to be &quot;hidden&quot; due to overscan. (The actual number of hidden pixels varies along TVs from 4 to 12 it seems)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most other systems at the time either have a similar issue or reduce the vertical resolution in order to show a consistent border colour in the overscan area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wonder if, by affecting the quirks of NTSC video timing, a 240 pixel tall image but where all lines are showing on most TVs is technically feasible. For example by making line rate as high as possible within the tolerance, and frame rate as low as possible, so that more lines can be squeezed in less time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this even affect the overal heigth of the image, reducing the probability of lines being hidden by overscan?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I do &lt;em&gt;not&lt;/em&gt; count having two interlaced frames of 120 lines to be a valid solution.&lt;/p&gt;&#xA;" OwnerUserId="2123" LastEditorUserId="2123" LastEditDate="2017-04-20T17:48:49.147" LastActivityDate="2019-10-28T05:10:29.763" Title="Is it possible to have a NTSC picture 240 pixels tall, without any line being hiding by overscan?" Tags="&lt;video&gt;&lt;ntsc&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2716" PostTypeId="2" ParentId="56" CreationDate="2017-04-20T13:17:12.613" Score="3" Body="&lt;p&gt;In addition to what has been mentioned in the other answers, the correspondence between pitch registers and actual sound frequency is not the same for both models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when writing a sound engine, a different frequency lookup table has to be used for NTSC and PAL C64s. Failure to do so will result in music being transposed among models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This also means the extreme lowest and highest pitches available are not the same, so some extreme musical pitches might be available on only one model but not the other.&lt;/p&gt;&#xA;" OwnerUserId="2123" LastActivityDate="2017-04-20T13:17:12.613" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2717" PostTypeId="2" ParentId="2714" CreationDate="2017-04-20T13:30:45.587" Score="11" Body="&lt;p&gt;The tty command doesn't really tell you which terminal you're using, rather it tells you which terminal port on the PDP-11 you're using.  So restarting your terminal won't change what tty outputs, but swapping cables with an adjacent terminal would (or alternatively, swapping which ports the terminal cables connect to).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can change the name of the port by renaming the appropriate special file in the /dev directory.  If you do this you will also need to update the /etc/ttys file which lists the names of the ports that users may use for logins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that pseudo-terminal (pty) names are not fixed, because you will get assigned a pty from a pool of available ptys when you connect.  So if you connect to the system over the network using telnet, you might be assigned ttyp0, or ttyp1, or ttyp2, etc., depending on which ones are in use already.  But if you're the only person who uses the computer then you can be pretty sure you will always end up being assigned ttyp0.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-04-20T13:30:45.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2718" PostTypeId="2" ParentId="2714" CreationDate="2017-04-20T13:33:06.023" Score="1" Body="&lt;p&gt;These were actual serial terminals, and the tty device file very likely corresponded to a serial card - and it is likely that the kernel either had a compiled-in idea on which I/O addresses which serial card would be expected, or there even was a kernel build-time configuration mechanism to configure how many terminals you had at maximum, and where the serial ports were in I/O space...&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-04-20T13:33:06.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2719" PostTypeId="2" ParentId="2715" CreationDate="2017-04-20T13:43:39.700" Score="4" Body="&lt;p&gt;Yes and no.  Yes, you can play with the signal timing, but if you do it won't be NTSC video anymore, it will be something kind of similar to NTSC but with different timing.  This means you might not be able to display your signal on an NTSC monitor (or you may damage your monitor attempting to do so).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were some NTSC monitors that had a switch setting to shrink the picture enough so that no part of the picture would be covered by the monitor bezel.  This feature doesn't turn off overscan, it just ensures that the overscan area remains visible.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-04-20T13:43:39.700" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2720" PostTypeId="2" ParentId="2715" CreationDate="2017-04-20T13:52:12.417" Score="4" Body="&lt;p&gt;It'd depend on your TV. Some may just show 240 lines, of course, but assuming yours is chopping off only eight in total, that leaves 232 visible. It looks like the NES scans at 63.5us per line, which is exactly to spec per NTSC, to fit 240 lines, each would need to be slightly less than 61.4us — 232/240 as long as 63.5, or a 3.33% digression from the standard. Which is actually quite a lot — it's close to 7.5 colour cycles — do I'd expect it to be rare that a TV would accept that sort of overclocking. But there's no hard and fast rule.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to why Nintendo painted 240; you also probably wouldn't expect the lines a TV shows necessarily to be in the centre of the nominally visible region. Some might show the top lines but not the bottom, some the bottom but not the top, most something in between.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-04-20T13:52:12.417" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2721" PostTypeId="2" ParentId="2697" CreationDate="2017-04-20T14:03:38.977" Score="9" Body="&lt;p&gt;I own a DEC pdp8/e and two ASR-33 Teletypes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ASR-33 can operate in &quot;Line&quot; or &quot;Local&quot; mode.  In Local mode, characters are printed as they are typed.  This mode is used for reading and punching paper tapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Line mode, typed characters are sent down the line to whatever host you're communicating with.  Typing makes a &quot;Bzzt&quot; noise for each character as the mechanical parallel-&gt;serial converter spins but nothing is printed.  It is the responsibility of the Host to echo back the characters being typed.&lt;/p&gt;&#xA;" OwnerUserId="4930" LastActivityDate="2017-04-20T14:03:38.977" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2722" PostTypeId="1" CreationDate="2017-04-20T14:22:55.020" Score="9" ViewCount="1542" Body="&lt;p&gt;I know some monitors have a mono/green switch, but I'd like to do this with my 1702.  If one doesn't exist, I'll probably try and make one (somehow).&lt;/p&gt;&#xA;" OwnerUserId="38" LastActivityDate="2019-09-03T09:13:30.847" Title="Is there a device that will take composite video from a vintage computer and filter it so it is green or amber like the old monochrome monitors?" Tags="&lt;video&gt;&lt;commodore&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2723" PostTypeId="2" ParentId="2715" CreationDate="2017-04-20T20:47:05.003" Score="4" Body="&lt;p&gt;No, you can't somehow compress the lines on the TV to make 240 lines visible. The TV format is fairly rigid (no matter whether NTSC or PAL), and there's no way to, say, make it 280 lines total by just altering the timing in order to have 240 lines shown. Most TVs won't show a picture at all if you'd try that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this is different from (multisync) computer monitors, where you can vary the timing to a wide degree, and affect the image this way.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-04-20T20:47:05.003" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2725" PostTypeId="2" ParentId="1837" CreationDate="2017-04-20T21:55:51.900" Score="4" Body="&lt;p&gt;Not cartridge games, but the ZX Spectrum has a big problem with removing peripherals with power on because they have the +5V (pin3) and +9V (pin4) very close to each other; removing the peripherals had a big chance to make a short circuit that would send +9V to TTL circuits, which would damage them and render them unusable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This problem was solved on Spectrum Plus 2A and Spectrum Plus 3 by moving the +9V output on pin 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I broke my first ZX Spectrum 48K two times by moving the printer :(&lt;/p&gt;&#xA;" OwnerUserId="405" LastEditorUserId="2155" LastEditDate="2017-07-16T12:50:14.020" LastActivityDate="2017-07-16T12:50:14.020" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2726" PostTypeId="2" ParentId="2722" CreationDate="2017-04-21T10:32:50.200" Score="12" Body="&lt;p&gt;I don't know if such device exists as a final product, but here's some hints about how to build one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Composite video signal is made up from the analog sum of two components: luminance and chrominance. We are interested in the luminance component. So you should rip off the chrominance signal by using a low-pass filter with the cut frequency set at 3.5MHz (for NTSC signals) or 4.43MHz (for PAL signals). If no high resolution graphics are going to be displayed (that is, no more than, say 320 pixels per scanline), you may go with a low-pass filter with a cut frequency of 3MHz which will work on both PAL and NTSC systems.&#xA;Analog Devices offers an online filter generation tool here:&#xA;&lt;a href=&quot;http://www.analog.com/designtools/en/filterwizard/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.analog.com/designtools/en/filterwizard/&lt;/a&gt;&#xA;which I have used to generate this filter (I'm not by any means an expert on analog electronics, so this filter may totally fail)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0OxUY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0OxUY.png&quot; alt=&quot;Filter parameters&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3YWoy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3YWoy.png&quot; alt=&quot;Filter circuit&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The resulting signal is monochrome video. To make it amber or green you need to get the video and sync information on separate signals. To get syncs, you may use an LM1881 video sync separator chip ( &lt;a href=&quot;http://www.ti.com/lit/ds/symlink/lm1881.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ti.com/lit/ds/symlink/lm1881.pdf&lt;/a&gt;) , which will give you an output (pin 1) with sync signals only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1zRG7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1zRG7.png&quot; alt=&quot;LM1881 circuit&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get the active video signal, use a sync stripper as the one described in Intersil AN9752: &lt;a href=&quot;http://www.intersil.com/content/dam/Intersil/documents/an97/an9752.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.intersil.com/content/dam/Intersil/documents/an97/an9752.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cggpW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cggpW.png&quot; alt=&quot;Sync stripper circuit&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have a monochrome video signal and a composite sync signal. You can use this video signal as the green channel, keeping R and B channels black (tied to ground), to get a green over black image. For amber, you can route the video signal to the R channel, and using a voltage divider, route half this video signal to the G channel, keeping the B channel black, to get an ambar-like colour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way, you will get an RGB signal with the configuration you want. If you need a composite video signal as final output, use an AD724 PAL/NTSC encoder ( &lt;a href=&quot;http://www.analog.com/media/en/technical-documentation/data-sheets/AD724.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.analog.com/media/en/technical-documentation/data-sheets/AD724.pdf&lt;/a&gt; ) to get a composite video output from the composite sync signal provided by the LM1881, and the RGB channels, arranged the way you like from the monochrome video signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1JGEy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1JGEy.png&quot; alt=&quot;AD724 circuit&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="4921" LastEditDate="2019-09-03T03:16:36.820" LastActivityDate="2019-09-03T03:16:36.820" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="2727" PostTypeId="1" CreationDate="2017-04-21T14:27:41.047" Score="7" ViewCount="306" Body="&lt;p&gt;I am running UNIX V7 using the SimH emulator. I am trying to get a list of processes using &lt;code&gt;ps&lt;/code&gt;, but I am getting the following error:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;No namelist&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So I tried the following fix (from this &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2702/ps-returning-no-namelist-on-unix-v7&quot;&gt;post&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cd /&#xA;ln rl2unix unix&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But now when I do &lt;code&gt;ps&lt;/code&gt;, I get the following error:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Can't open /dev/swap&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Does anybody know how to fix this?&lt;/p&gt;&#xA;" OwnerUserId="4938" LastEditorUserId="4025" LastEditDate="2017-04-21T14:55:19.257" LastActivityDate="2017-04-22T03:13:53.617" Title="How to get a list of processes on UNIX V7?" Tags="&lt;unix&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2728" PostTypeId="1" AcceptedAnswerId="2729" CreationDate="2017-04-21T16:59:42.443" Score="3" ViewCount="482" Body="&lt;p&gt;I can use &lt;code&gt;cat&lt;/code&gt; to display the content of a file in UNIX V7, but I don't know how can I edit the content of a file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a built-in file editor in UNIX V7?&lt;/p&gt;&#xA;" OwnerUserId="4938" LastActivityDate="2017-04-21T17:09:29.393" Title="Does UNIX V7 have a built-in file editor?" Tags="&lt;unix&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2729" PostTypeId="2" ParentId="2728" CreationDate="2017-04-21T17:09:29.393" Score="6" Body="&lt;p&gt;The original editors are &lt;a href=&quot;http://linux.die.net/man/1/ed&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;ed(1)&lt;/strong&gt;&lt;/a&gt; (line-oriented text editor) and &lt;a href=&quot;http://linux.die.net/man/1/sed&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;sed(1)&lt;/strong&gt;&lt;/a&gt; (stream-oriented text editor). These editors were available from the very beginning.&lt;/p&gt;&#xA;" OwnerUserId="3278" LastActivityDate="2017-04-21T17:09:29.393" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2730" PostTypeId="1" CreationDate="2017-04-21T18:54:22.643" Score="4" ViewCount="490" Body="&lt;p&gt;I am running UNIX V7 using the SimH emulator. Whenever I press the &quot;backspace&quot; key, instead of the previous character being deleted, what happens is that the cursor is placed on a new line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this how the &quot;backspace&quot; key behaves in UNIX V7, or is it just a SimH thing?&lt;/p&gt;&#xA;" OwnerUserId="4938" LastActivityDate="2017-04-22T02:21:02.063" Title="Does the &quot;backspace&quot; key places the cursor on a new line in UNIX V7?" Tags="&lt;unix&gt;&lt;simh&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2731" PostTypeId="1" AcceptedAnswerId="2733" CreationDate="2017-04-21T20:03:42.333" Score="8" ViewCount="484" Body="&lt;p&gt;Title pretty much says it all.  To qualify, the computer must have been manufactured and released.  No prototypes or computers that never shipped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I'm looking for computers used at a home or small business.  No mainframes or NASA guidance systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="3290" LastEditDate="2020-04-26T12:50:31.100" LastActivityDate="2020-04-26T12:50:31.100" Title="What was the first personal computer to use surface mount components?" Tags="&lt;history&gt;&lt;hardware&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2732" PostTypeId="2" ParentId="2731" CreationDate="2017-04-21T20:55:45.117" Score="3" Body="&lt;p&gt;One of the Macs has to be a strong contender; per &lt;a href=&quot;https://books.google.co.uk/books?id=vDAEAAAAMBAJ&amp;amp;pg=PT50&amp;amp;lpg=PT50&amp;amp;dq=mac+surface+mount+pcb&amp;amp;source=bl&amp;amp;ots=9VbeKgpMwB&amp;amp;sig=XaEDbFxGdilb4HEXH47TYKdm-BU&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=0ahUKEwi3na6etLbTAhXL5yYKHZj8CJ0Q6AEIhgEwFg#v=onepage&amp;amp;q=mac%20surface%20mount%20pcb&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;a 1989 edition of InfoWorld&lt;/a&gt; &quot;All the Macs are extremely well-built. There is extensive use of surface-mount technology ...&quot; so at that point it's considered to be worthy of mention. Of the Macs under review there, 1989's SE/30 &lt;a href=&quot;http://spritesmods.com/?art=macsearm&amp;amp;page=2&quot; rel=&quot;nofollow noreferrer&quot;&gt;shows surface-mount components&lt;/a&gt; alongside through-hole and socketed, suggesting it is from early in the design transition.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-04-21T20:55:45.117" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2733" PostTypeId="2" ParentId="2731" CreationDate="2017-04-21T21:31:32.730" Score="10" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_Model_100&quot; rel=&quot;noreferrer&quot;&gt;TRS-80 Model 100&lt;/a&gt; (and clones) and the &lt;a href=&quot;http://www.old-computers.com/museum/photos.asp?t=1&amp;amp;c=634&amp;amp;st=1$&quot; rel=&quot;noreferrer&quot;&gt;Timex Sinclair 2068&lt;/a&gt;, all from 1983, all incorporated surface mount components.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2017-04-21T23:56:26.233" LastActivityDate="2017-04-21T23:56:26.233" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2734" PostTypeId="2" ParentId="2731" CreationDate="2017-04-21T23:05:40.180" Score="4" Body="&lt;p&gt;A number of MSX machines started to use the so called &quot;MSX engine&quot; chip, which condensed a number of discrete ICs into one SMD chip, most often a TQFP one. The first MSX Engine was the Toshiba T7775 chip, which was used in the Sanyo MPC-1, &lt;strong&gt;as early as 1985.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OQOsP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OQOsP.jpg&quot; alt=&quot;Solder side of Sanyo MPC-1 showing a SMD chip on the center of the board&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.msx.org/wiki/Sanyo_MPC-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.msx.org/wiki/Sanyo_MPC-1&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-04-21T23:05:40.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2735" PostTypeId="2" ParentId="2730" CreationDate="2017-04-22T00:05:04.003" Score="3" Body="&lt;p&gt;Please try the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Find out what your backspace key is generating, by running &lt;code&gt;od -b&lt;/code&gt;&#xA;then pressing backspace, then ctrl-D. If ctrl-D doesn't work, press up to 16 arbitrary different characters, then press Enter to see the output, then press ctrl-C.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Say &lt;code&gt;stty erase ^H&lt;/code&gt; if backspace generates byte 010, or &lt;code&gt;stty erase ^_&lt;/code&gt; if backspace generates byte 0177.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-04-22T00:05:04.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2736" PostTypeId="2" ParentId="2730" CreationDate="2017-04-22T02:21:02.063" Score="5" Body="&lt;p&gt;By default, the delete character (ASCII 127, ^?) acts as the interrupt key (usually bound to ^C on more modern Unix-like systems).  Pressing the interrupt key will behave as you describe.  In Unix v7 there's no easy way to change this except to modify the kernel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your terminal sends a delete character when you press the backspace key, try modifying your terminal settings so that it sends backspace (ASCII 8, ^H) instead.  Then use the following command to get Unix to recognize backspace as the erase character:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;stty erase '^H'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;While you're at it, you might want to also set the line-kill key according to modern usage:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;stty kill '^U'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-04-22T02:21:02.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2737" PostTypeId="1" CreationDate="2017-04-22T02:38:39.910" Score="10" ViewCount="244" Body="&lt;p&gt;What type of partition table was used with ProDOS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ProDOS (8-bit) version 1.2 was available in January 1983, one year before the Macintosh was released, so it is unclear to me if ProDOS 1.2 used the &quot;Apple Partition Map&quot;, or something else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Wikipedia article for Apple Partition Map does not say anything about this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Partition_Map&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Apple_Partition_Map&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-04-23T00:03:18.730" Title="Apple II: What type of partition tables were used?" Tags="&lt;apple-ii&gt;&lt;hard-disk&gt;&lt;scsi&gt;&lt;apple-dos&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2738" PostTypeId="1" AcceptedAnswerId="2742" CreationDate="2017-04-22T02:42:44.227" Score="9" ViewCount="243" Body="&lt;p&gt;On the Apple II using ProDOS, was it possible to create partitions on a floppy disk? Would it be possible to have two or more partitions on a 140k 5.25&quot; or 800k 3.5&quot; disk?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The question here is not practicality, but just if it could be done at all.)&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2018-09-28T23:41:16.503" Title="Apple II: ProDOS partitions on floppy disks?" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;&lt;apple-dos&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2739" PostTypeId="2" ParentId="2727" CreationDate="2017-04-22T03:13:53.617" Score="4" Body="&lt;p&gt;Does special file /dev/swap exist?  If not you need to create it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How exactly you do this depends on what kind of disk you have set up your system with.  If you are using an rp disk (rp03/rp04/rp05/rp06) there is usually some swap space between the rp0 (normally root) and rp3 (normally /usr) partitions.  For example, if you are using an rp04 disk, you should have the following special files in /dev:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;brw-r--r-- 1 root    6,  0 Dec 30 20:46 rp0&#xA;brw-r--r-- 1 root    6,  6 Dec 30 20:43 rp3&#xA;crw-r--r-- 1 root   14,  0 Dec 30 19:51 rrp0&#xA;crw-r--r-- 1 root   14,  6 Dec 30 19:51 rrp3&#xA;brw-r--r-- 1 root    6,  1 Dec 30 19:51 swap&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you're missing the /dev/swap special file you can create it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# /etc/mknod /dev/swap b 6 1&#xA;# chmod go-w /dev/swap&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There is a makefile in /dev that you may want to look at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using rl disks, then I would guess that you need to configure a new kernel set up to swap to an rl02.  I am not entirely certain how to do this (I've never personally tried to do it).  In /usr/sys/conf there are some sample configuration files, including rktmconf and rkhtconf which show how to configure a system to use an rk disk.  Presumably the configuration for an rl disk would be similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have those sample configuration files, it might be easier to just set up a fresh Unix v7 installation on an rp disk using the v7 distribution tape.  Here are some documents that may help you with this process:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://gunkies.org/wiki/Installing_v7_on_SIMH&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://gunkies.org/wiki/Installing_v7_on_SIMH&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;http://wsxyz.net/v7/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wsxyz.net/v7/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I appear to have done this at some point in the past (using an rp04) but apparently I did not make any notes on the procedure I used.  But I have it working so I know it's possible.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-04-22T03:13:53.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2740" PostTypeId="1" CreationDate="2017-04-22T03:34:05.220" Score="19" ViewCount="2647" Body="&lt;p&gt;Would it be feasible to create direct clones of obsolete and increasingly hard-to-find motherboards and controller boards for vintage computers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the early 1980s technology was either single side or double sided printed circuit boards, so apparently a direct clone should be possible by simply:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Making note of all component values and finding modern equivalents&lt;/li&gt;&#xA;&lt;li&gt;Reading the ROM images and making copies onto new chips&lt;/li&gt;&#xA;&lt;li&gt;Desoldering and removing all chips and components&lt;/li&gt;&#xA;&lt;li&gt;Photographing the board and doing some image editing to create new copper etch, drill, and label masks&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As out-of-production but highly-desired hardware becomes increasingly more rare and expensive, such as accelerator cards for antique systems, this may be the only way to make more available for potential users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disregarding issues of licensing and copyright for obsolete ROMs and mask designs from companies that either don't exist anymore or no longer care about the old hardware, is this feasible, and is anyone already doing this?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-04-25T15:46:13.383" Title="Cloning circuit boards for antique computers?" Tags="&lt;hardware&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2741" PostTypeId="2" ParentId="2737" CreationDate="2017-04-22T04:24:54.843" Score="9" Body="&lt;p&gt;ProDOS provides a common device driver API for storage systems, but does not specify a partition table format. Rather, the SCSI (or other) HD interface card has firmware to map partitions to ProDOS volumes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple SCSI Card and Apple High-speed SCSI Card for the Apple ][+, //e, IIGS utilize the Apple Partition Map, just like with their Classic Macintosh SCSI HDs. Apple provided a tool &quot;HDSCPARTITION&quot; on the disk they shipped with the SCSI Cards to allow the user to setup partitions.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-04-23T00:03:18.730" LastActivityDate="2017-04-23T00:03:18.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2742" PostTypeId="2" ParentId="2738" CreationDate="2017-04-22T04:28:57.823" Score="8" Body="&lt;p&gt;ProDOS supports up to 2 storage device volumes per slot, but does not support partitioning within those volumes. It is a function of the firmware provided with the storage device controller (i.e. SCSI Card) to map partitions on a storage device to volumes for ProDOS.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-04-22T04:28:57.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2743" PostTypeId="2" ParentId="2740" CreationDate="2017-04-22T04:52:15.563" Score="4" Body="&lt;p&gt;Based on actual projects that have been manufactured for the retrocomputing community, the tendency is toward enhancing the boards to take advantage of some modern components, rather than producing an exact clone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several projects that have created replacement motherboards for retrocomputers from Apple and Commodore.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.brielcomputers.com/wordpress/?cat=17&quot; rel=&quot;nofollow noreferrer&quot;&gt;replica 1 plus&lt;/a&gt; Apple I replica and&#xA;&lt;a href=&quot;http://www.brielcomputers.com/wordpress/?cat=24&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micro-KIM&lt;/a&gt; KIM 1 replica from Briel Computers&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://wiki.icomp.de/wiki/C64_reloaded&quot; rel=&quot;nofollow noreferrer&quot;&gt;C64 Reloaded&lt;/a&gt; and A1200 Reloaded (wip) from Individual Computers&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In most cases, original chips and ROMs need to be supplied. A user that owns a legitimate ROM could provide the firmware themselves, or the manufacturer may elect to license the rights to distribute the firmware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that fixing common &quot;issues&quot; in the original, such as unreliable power supplies, unsupported peripheral connectors, and out-of-date firmware, RAM, and storage media, is easily addressed while creating a highly compatible, but not perfect clone, motherboard replacement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, there are a number of projects that re-create the old chip functionality using FPGA devices, such as the &lt;a href=&quot;https://github.com/mist-devel/mist-board/wiki&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIST&lt;/a&gt; Project. While this would not be suitable for creating a replica of the original motherboard, it could be used as a motherboard replacement in the original case.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-04-22T15:14:40.230" LastActivityDate="2017-04-22T15:14:40.230" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2744" PostTypeId="2" ParentId="2740" CreationDate="2017-04-22T06:08:17.447" Score="11" Body="&lt;p&gt;&lt;strong&gt;Circuit Boards&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.willegal.net/appleii/apple1-kit.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mimeo 1&lt;/a&gt; is a replica of the Apple I motherboard.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.willegal.net/appleii/appleii-recreation.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rev 0 Replica&lt;/a&gt; is a replica of the Apple II Revision 0 motherboard.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.generationamiga.com/2016/11/29/amiga-500-kit-released/&quot; rel=&quot;nofollow noreferrer&quot;&gt;A replica of the Amiga 500 Rev 8 motherboard&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Chips&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://wiki.icomp.de/wiki/SuperPLA_V3&quot; rel=&quot;nofollow noreferrer&quot;&gt;Individual Computers SuperPLA V3&lt;/a&gt; is a plug-in replacement for Commodore 64's PLA chips that often go bad.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://gglabs.us/node/1933&quot; rel=&quot;nofollow noreferrer&quot;&gt;GGLabs F2R16&lt;/a&gt; is a flash-memory-based plug-in replacement for 27C400 EPROMs that are no longer in production.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Other Components&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.bigmessowires.com/2016/06/04/db-19-resurrecting-an-obsolete-connector/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Remanufactured DB19 connectors&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2017-04-23T04:27:18.903" LastActivityDate="2017-04-23T04:27:18.903" CommentCount="3" CommunityOwnedDate="2017-04-22T06:31:12.450" ContentLicense="CC BY-SA 3.0" />
  <row Id="2745" PostTypeId="2" ParentId="2740" CreationDate="2017-04-22T06:50:37.683" Score="19" Body="&lt;p&gt;What you describe would be a possible way of replicating a vintage computer.&#xA;The approach does, however, have some flaws that make it unlikely (or undesirable) to go this route, at least for designs newer than about mid-eighties - And it maybe is a solution for a problem that doesn't really exist:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You need to find someone to donate the victim for the dissection. The more worthy of replication the board is, the less likely you'll find a donor. Be aware there is a fair chance of the victim not surviving this exercise. Quite some of vintage computer PCBs weren't of the best quality when new, and the decades didn't help that much. Some PCB makes are known to dissolve their traces as early as being in sight of a hot soldering iron.&lt;/li&gt;&#xA;&lt;li&gt;A lot of vintage computers, especially home computers, used custom chips to minimise production cost. With the upcome of ASIC and PLA technology in the eighties, most of the computer manufacturers jumped on this technology as it offered ways to radically simplify a computer or create unique technology opportunities - Those custom chips will today most likely be just as rare as the original motherboards. And once you find one, it is very likely to come with a working board - so, why replace something that is still working?&lt;/li&gt;&#xA;&lt;li&gt;Because of the above, creating a new computer from old is, at least in a lot of cases, simply scavenging historical material. And the PCB itself is one of the most unlikely things to break in a vintage computer - Why replace something that isn't broke?&lt;/li&gt;&#xA;&lt;li&gt;Even some of the non-custom chips of the vintage computer are very likely no longer be available as new stock (Like nearly all of the Motorola 68k series or most of the 80ies exotic dynamic RAM chips). Most of them can be replaced with modern counterparts, but that will very likely require re-working the PCB. So why copy an old PCB if it needs re-work anyhow?&lt;/li&gt;&#xA;&lt;li&gt;Even if you manage to create a 100% replica, to be able to do at least something minimally useful with you replica, you should be able to interface with modern equipment. This most probably also requires re-work of the vintage PCB. Some ways of working, like handling audio tape for storage, is just too clumsy when there are modern replacements.&lt;/li&gt;&#xA;&lt;li&gt;And, to be honest: vintage computer schematics are normally not that complicated to not be able to recreate them by just tracing the PCB manually or using historical documentation as a starting point. Using modern PCB layout and manufacturing technology, re-creating the board is not the most complicated part in creating a working computer. The challenges lie mainly in the custom or otherwise no longer available chips and in the ways how you interface to modern storage technology without giving up compatibility to &quot;the original thing&quot;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;100% replicas of vintage (80ies) computers are thus not very likely to see the light of day, at least for designs where some or all of the above applies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example from the ZX Spectrum world: here follow two alternative examples of feasible mixed approaches to re-creating that computer in &quot;pure, vintage&quot; hardware:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.sellmyretro.com/offer/details/just-speccy-128k-fully-assembled-board-with-slam-ula-9902&quot; rel=&quot;noreferrer&quot;&gt;&quot;Just Speccy&quot;&lt;/a&gt; is a recreated ZX Spectrum 128 based on the original computer. It does, however, have a heavily re-worked PCB being able to use modern components for memory and external storage, and uses an original ZX Spectrum ULA. Still, it suffers from increasing non-availability of these original vintage ZX Spectrum 128 ULAs, custom chips that can only be scavenged from old ZX Spectrums.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;http://www.zxdesign.info/schematics.shtml&quot; rel=&quot;noreferrer&quot;&gt;&quot;Harlequin&quot;&lt;/a&gt; is a modern recreated Spectrum that uses (still somewhat vintage, but still available) TTL technology to recreate a ZX Spectrum computer without using vintage custom chips (except the Z80 CPU, which can still be bought in quantities) - The ZX Spectrum ULA is entirely re-engineered here in TTL logic. This is very much more effort, but has the advantage of not being reliant on draining ULA chip supply. Obviously, the PCB of the Harlequin doesn't really resemble much similarity with the original ZX Spectrum.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Even if the examples above both create a nearly 100% compatible ZX Spectrum re-make, their PCBs don't resemble much closeness to the original ZX Spectrum 128 computer. Approaches like the above are much more feasible than 100% replicas.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-04-23T11:26:12.660" LastActivityDate="2017-04-23T11:26:12.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2746" PostTypeId="2" ParentId="2740" CreationDate="2017-04-23T01:29:12.997" Score="2" Body="&lt;p&gt;The short answer is yes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the longer answer depends on what is the ultimate goal? is it to attempt to produce modern replicas with 100% new build parts (or using some percentage of original parts), or is it to attempt to remove the discrete components from a cracked/corroded original board, and replace the board itself, recycling the original parts? Perhaps all of the above?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anything is possible. PCB manufacturers are cheap nowadays; I regularly get small boards produced out of China: $10 for 10 boards. My colleagues have had slightly higher quality boards produced out of Germany. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main hurdle to what you are proposing, will be the schematic capture stage. Depending on the vintage of the boards you are copying, many older boards were laid out by hand and parts density is low. This would allow you to visually reverse engineer the schematic from the boards, draw it up in modern software and go from there. If the original boards are a bit more complex, you might need to trace out the original design with a multimeter/oscilloscope and perhaps simulate the resultant schematic in software to make sure it functions as it's meant to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another factor is the availability of the discrete parts; many parts are obsolete and discontinued these days, particularly peripheral driver chips. As mentioned in other posts, some parts were specific to the original computer manufacturer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All things considered, you might wind up with a 1:1 replica, or something with modern components substituted in to preserve the original functionality. It is up to you to consider how 'authentic' such a board would be if you're attempting to sell them; many older oscilloscopes had the traces on the boards laid out by hand with tape, and part of the appeal is the look of these hand laid boards. An example of what I mean can be found on a NES control board, as seen &lt;a href=&quot;http://www.elektronaut.at/nes-gamepad-dimensions-pictures/624&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;herequot;&quot;&gt;here&lt;/a&gt;. So yes it is possible, but 'feasible' depends on your final goal, and how desirable what you're making will be to others if you intend to sell limited production replicas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final note, although I haven't done anything as complicated/rare as an accelerator card, I have done something similar. The company I work for has several 80's vintage analogue front end amplifiers for data logging, many of which now have non-functional channels. I've copied the original schematic, updated the op-amps to more modern high-bandwidth versions and surface-mount versions of some of the parts and had them produced as updated replacements. I've also seen some projects &lt;a href=&quot;http://callanbrown.com/index.php/basic-nes-reproduction&quot; rel=&quot;nofollow noreferrer&quot;&gt;online&lt;/a&gt; where people have gutted old game console cartridges, desoldered the eprom chips containing the original game code, and replaced the core chip with another one which has been programmed with a different game. At the time I saw this I considered the feasibility of producing new-build cartridge boards and emulating the CIC chip with something modern like an ARM chip. The idea came to nothing, but it's inline with what you're proposing.&lt;/p&gt;&#xA;" OwnerUserId="4944" LastActivityDate="2017-04-23T01:29:12.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2747" PostTypeId="1" CreationDate="2017-04-23T02:31:24.603" Score="5" ViewCount="288" Body="&lt;p&gt;Starting in 1998 (I think) the PGP company run by Phil Zimmerman released the PGP SDK for Mac, Unix and Windows. This was a big event because it was the first time that comprehensive, high grade crytography became available to the average person.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, due to the buy out of PGP by Symantec that famous SDK is no longer available by any obvious source. There used to be links to it on Cryptome, but those links have been deleted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody know how I can find the Mac version of the 2001 release of the PGP SDK (including source code)?&lt;/p&gt;&#xA;" OwnerUserId="548" LastEditorUserId="548" LastEditDate="2017-10-02T20:07:48.907" LastActivityDate="2017-10-02T20:07:48.907" Title="Find the PGP SDK" Tags="&lt;apple-macintosh&gt;&lt;software&gt;" AnswerCount="0" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2749" PostTypeId="1" CreationDate="2017-04-23T21:39:51.903" Score="12" ViewCount="1029" Body="&lt;p&gt;The RGA bus is the bus that connects Agnus/Alice with Denise/Lisa and Paula. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is it used for? I guess at a minimum to write/read registers in Denise/Lisa and Paula, and I guess to feed data to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has it ever been documented?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2017-05-22T08:16:58.340" Title="How does the Amiga chipset RGA bus work?" Tags="&lt;hardware&gt;&lt;amiga&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2750" PostTypeId="2" ParentId="2749" CreationDate="2017-04-24T04:42:56.277" Score="9" Body="&lt;p&gt;The Amiga contains a general-purpose coprocessor within the Agnus/Alice custom chip known as the &lt;strong&gt;Copper&lt;/strong&gt;. The Amiga Copper uses DMA and interleaved access to chip RAM shared with the 68k CPU to fetch and execute simple instructions. Mainly, the Copper's &lt;strong&gt;MOVE&lt;/strong&gt; instruction is used to update the value of most any of the 3 custom chip's internal registers based on precise video timing and without intervention from the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Copper MOVE instruction needs to be able to address the many custom chip registers to do this, and it does so using the register address (RGA) bus that is shared among all 3 custom chips. So, you can think of the Copper as a simple micro-processor that controls an 8-bit address bus and a 16-bit data bus, but which can also utilize DMA to access its program code residing in the shared chip RAM. Additionally, many of the custom chip registers control additional DMA functionality, thus allowing the Copper to synchronize many different system activities independently of the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.google.com/patents/US4777621&quot; rel=&quot;noreferrer&quot;&gt;Amiga patent&lt;/a&gt; discusses the RGA bus specifically being an optimization to minimize the complexity of the custom chips and their interconnection. By using this approach, the chip designers created a powerful coprocessor capability around DMA control with a simplified shared bus requiring a minimum of logic and pins.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-04-24T04:42:56.277" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2751" PostTypeId="1" AcceptedAnswerId="2757" CreationDate="2017-04-24T06:54:01.937" Score="7" ViewCount="2114" Body="&lt;p&gt;I've played with various BAUD rate programs that allow you to save most of the RAM into a cassette tape up to around 9600 BAUD. Has anyone written or have a way to write the ram to tape (not MicroDrive) at an even faster rate? The quality is what is sacrificed, but maybe there's a better way?&#xA;Thanks&lt;/p&gt;&#xA;" OwnerUserId="4948" LastActivityDate="2017-04-24T16:27:13.740" Title="What is the maximum BAUD rate for ZX Spectrum tapes?" Tags="&lt;zx-spectrum&gt;&lt;cassette-tape&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2752" PostTypeId="1" AcceptedAnswerId="2753" CreationDate="2017-04-24T13:20:24.107" Score="12" ViewCount="1890" Body="&lt;p&gt;I have an old Apple IIc (not Plus) and an old Macintosh Plus (1MB RAM). I want to buy an external 3.5 inch floppy drive that works on both machines, that way I don't need two different drives around my house. I prefer it to accept 800K disk drive (400K is also fine). Both of the machine have the same external floppy port. A search on &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_External_Disk_Drive&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt; gives me 2 options that seems to work on both machine (according to what the page says about them):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.Macintosh 800K External Drive&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.Apple 3.5&quot; Drive&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does any one of these works for both the Apple IIc and the Macintosh?&lt;/p&gt;&#xA;" OwnerUserId="4906" LastActivityDate="2017-04-24T21:39:39.287" Title="Which Apple floppy drive is compatible on both Apple IIc and Macintosh" Tags="&lt;apple-ii&gt;&lt;apple-macintosh&gt;&lt;floppy-disk&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2753" PostTypeId="2" ParentId="2752" CreationDate="2017-04-24T14:22:23.077" Score="10" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.vintagemacworld.com/drives.html&quot; rel=&quot;noreferrer&quot;&gt;Vintage Macintosh&lt;/a&gt;, the only 3.5” drive the Apple IIc is compatible with is the Unidisk 3.5” (perhaps with a ROM upgrade — the first Apple IIc ROM &lt;a href=&quot;http://www.bigmessowires.com/2015/05/29/apple-iic-rom-upgrade/&quot; rel=&quot;noreferrer&quot;&gt;didn’t support Smartport disks&lt;/a&gt;, including the Unidisk). But the Mac Plus isn’t compatible with the Unidisk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple 3.5” drive is compatible with the IIc+ and the IIgs (which isn’t much help for you), as well as the Mac Plus. The M0131 (Macintosh 800K external drive) is only compatible with Macs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/71/nick-westgate&quot;&gt;Nick Westgate&lt;/a&gt; for the ROM upgrade info.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-04-24T21:39:39.287" LastActivityDate="2017-04-24T21:39:39.287" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2754" PostTypeId="2" ParentId="2752" CreationDate="2017-04-24T14:31:46.543" Score="9" Body="&lt;p&gt;I know you're looking for an actually mechanical floppy drive, but BMOW's &lt;a href=&quot;https://www.bigmessowires.com/floppy-emu/&quot; rel=&quot;noreferrer&quot;&gt;Floppy Emu&lt;/a&gt; works with both the Mac Plus and the Apple IIc.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-04-24T14:31:46.543" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2755" PostTypeId="1" AcceptedAnswerId="2756" CreationDate="2017-04-24T15:28:42.850" Score="5" ViewCount="2827" Body="&lt;p&gt;A 9-pin RS-232 serial port looks superficially quite similar to the Atari joystick port. I don't suppose you could just plug a joystick into a serial port and have it work, but suppose you took this into account at design time, say you were designing an 8-bit computer back in the day, early eighties or so, and you were equipping it with a 9-pin RS-232 serial port for the sake of being able to plug in a modem or serial printer or suchlike, would it be feasible to also make it take a joystick?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-04-26T01:56:30.793" Title="9-pin port for both RS-232 and Atari joystick?" Tags="&lt;rs232&gt;&lt;serial&gt;&lt;joystick&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2756" PostTypeId="2" ParentId="2755" CreationDate="2017-04-24T15:47:28.150" Score="6" Body="&lt;p&gt;Not &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_joystick_port&quot; rel=&quot;nofollow noreferrer&quot;&gt;an Atari joystick&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Atari joystick was basically just a set of mechanical switches and each of the pins was either ground, +5 volts, or one of the switches. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were you designing a joystick back in the 80's to plug in to a serial port, you would have needed to put some electronics in it i.e. a chip to support RS232. I think that would have been prohibitively expensive back in the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, there's no reason why you couldn't make it work from a technical perspective. The protocol would be quite simple and you wouldn't need to run it at more than a few hundred baud.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2017-04-24T15:50:05.663" LastActivityDate="2017-04-24T15:50:05.663" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2757" PostTypeId="2" ParentId="2751" CreationDate="2017-04-24T16:27:13.740" Score="8" Body="&lt;p&gt;Yes, the people at the OTLA project. More specifically, Antonio Villena wrote the &quot;CargandoLeches&quot; set of routines and a modified ROM that allows a Spectrum to load programs at a minimum of 11kbps, for tape, and to about 27kbps, if using audio from a digital source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://cargandoleches.speccy.org/inicio.en.html&quot; rel=&quot;noreferrer&quot;&gt;http://cargandoleches.speccy.org/inicio.en.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-04-24T16:27:13.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2758" PostTypeId="1" AcceptedAnswerId="2851" CreationDate="2017-04-24T16:49:15.197" Score="14" ViewCount="394" Body="&lt;p&gt;On the back of &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2738/apple-ii-prodos-partitions-on-floppy-disks&quot;&gt;this question&lt;/a&gt;, it got me thinking that it has always been that ProDOS would only support a &quot;,D1&quot; and &quot;,D2&quot; on a slot, i.e. slot 6 would have two addressible drives. With my 20MB Sider hard disk back in the day, I had only two partitions there as well which mapped &lt;code&gt;/HARD1&lt;/code&gt; to &lt;code&gt;,S7,D1&lt;/code&gt; and &lt;code&gt;/HARD2&lt;/code&gt; to &lt;code&gt;,S7,D2&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ever since I've been playing with emulators that supported hard disks, I did notice that you can have multiple volumes mounted on slot 7. Though ProDOS doesn't seem to allow you to do (say) &lt;code&gt;,S7,D6&lt;/code&gt;, you are able to mount a &lt;code&gt;/HARD6&lt;/code&gt; (to keep with my naming scheme from before).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did ProDOS allow this behavior? And in the spirit of the question I linked to at the start of this, why wouldn't you be able to mount more than one volume on a floppy controller? The thing which makes it a touch puzzling is that SmartPort devices apparently could map themselves to other slots as needed and also devices such as a CFFA 3000 allow for mapping volumes to multiple slots and exceeding &lt;code&gt;,D3&lt;/code&gt; conventions.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2020-03-29T20:26:02.530" Title="How does ProDOS allow for multiple volumes to exist on a single device?" Tags="&lt;apple-ii&gt;&lt;storage&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2759" PostTypeId="1" AcceptedAnswerId="2763" CreationDate="2017-04-24T18:50:54.350" Score="9" ViewCount="534" Body="&lt;p&gt;The Z80 was introduced, as I understand it, at a clock speed of 2 MHz. Later, Z80-based computers at 3.5 MHz started showing up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In what year did this faster clock speed become available? (In production quantity, not just samples.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="357" LastEditDate="2017-04-25T15:29:48.570" LastActivityDate="2017-04-25T15:29:48.570" Title="When were the various frequency Z80 CPUs introduced?" Tags="&lt;history&gt;&lt;z80&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2760" PostTypeId="1" AcceptedAnswerId="4405" CreationDate="2017-04-24T18:53:10.730" Score="16" ViewCount="4053" Body="&lt;p&gt;It is said that the 6502 was cheaper than the Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As of 1978, what were the actual prices of the two chips, in wholesale quantity?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-10-02T13:14:01.007" Title="How much did the 6502 and Z80 cost?" Tags="&lt;history&gt;&lt;z80&gt;&lt;6502&gt;&lt;chip&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2761" PostTypeId="2" ParentId="2755" CreationDate="2017-04-24T19:21:35.933" Score="8" Body="&lt;p&gt;In the early eighties, use of a 9-pin port for serial communications was uncommon.  Most systems used the standard 25-pin port.  I think it was IBM that made the 9-pin serial port popular, but I don't think that happened until around the time of the IBM PC AT (the original Macintosh also had a 9-pin serial port but it was wired differently, and was eventually replaced by round 8-pin Mini-DIN connectors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regardless, if you wanted to allow one port to connect to different types of devices it was theoretically possible, and the basic way to do it was to use something called a &quot;tri-state buffer&quot; for each device.  This was a chip that basically allowed a pin on a connector to be in one of three states:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;asserted (logical 1)  &lt;/li&gt;&#xA;&lt;li&gt;deasserted (logical 0)  &lt;/li&gt;&#xA;&lt;li&gt;high-impedance (disconnected)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;As long as all devices were kept in the high-impedance state (except the one that was actively using the connector at that moment) this would work, but it had two severe drawbacks:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The operating system had to be able to tell which device should be able to use the port, and if the user had the wrong thing connected to the port it was possible to burn something out (i.e. user error could lead to hardware damage).  &lt;/li&gt;&#xA;&lt;li&gt;Sharing ports like this was terribly inconvenient when a user wanted to use two different peripherals at the same time (for example, using a joystick to play an on-line game that required a serial port connection to a modem).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In practice it was far better to use separate ports for different purposes (and to make the connectors different shapes to prevent users from plugging things in the wrong place).  So there was some incentive to move to smaller ports (like the 9-pin D connector or the Mini-DIN connectors) but very little reason to actually share ports among different devices.  Game controllers were the only exception that come to mind (and they were wired in such a way that it would be safe to, e.g., plug in a joystick if the game actually used paddles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the sharing of one port among different devices was done, but only when all devices used the same type of communication.  These were commonly called &quot;busses&quot;, and notable examples at that time would include the IEEE-488 bus used on the Commodore PET, the IEC bus used on the C-64, and the SIO bus used on the Atari 400/800.  If you wanted to use one port for multiple devices, the use of a bus was the way to go.  Even the expansion ports in the Apple ][ could be considered a type of bus (albeit one where each slot had its own address).&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-04-24T19:21:35.933" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2762" PostTypeId="1" CreationDate="2017-04-24T20:11:38.400" Score="12" ViewCount="619" Body="&lt;p&gt;I have an accelerator card fitted to my Amiga 1200. The accelerator includes a real-time clock, but I noticed that the soldered-on rechargeable battery was in danger of leaking, so I cut it off before it could leak and cause any damage. This leaves me without a fully working RTC; the accelerator card will presumably have an operational RTC chip that will forget the correct time as soon as powered off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I connect an RTC card to the main board clockport? Would this work, or would its RTC chip clash with accelerator's RTC chip?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accelerator is an Apollo 68060 card. It does not appear to have an enable/disable RTC switch or jumper. I would consider replacing the battery, but don't want to have another soldered-on rechargeable type, and the limited space on the card and in the trapdoor slot would make a coin cell conversion tricky.&lt;/p&gt;&#xA;" OwnerUserId="149" LastEditorUserId="15334" LastEditDate="2020-12-27T14:42:16.940" LastActivityDate="2020-12-27T14:42:16.940" Title="Will using a clockport RTC card on an Amiga 1200 clash with the RTC on an accelerator card?" Tags="&lt;amiga&gt;&lt;amiga-1200&gt;&lt;rtc&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2763" PostTypeId="2" ParentId="2759" CreationDate="2017-04-24T20:15:00.810" Score="15" Body="&lt;p&gt;The Zilog Z80 (2.5 MHz) was introduced in 1976.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1977, the Z80A (4 MHz) was available for &lt;a href=&quot;http://www.old-computers.com/history/detail.asp?n=33&amp;amp;t=3&quot; rel=&quot;noreferrer&quot;&gt;$65 for the ceramic package and $59 for the plastic version&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80B (6 MHz) was available in &lt;a href=&quot;https://archive.org/details/Infoworld-1980-08-04&quot; rel=&quot;noreferrer&quot;&gt;August, 1980&lt;/a&gt; (p. 18) if not earlier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80H (8 MHz) was introduced in &lt;a href=&quot;https://archive.org/details/Infoworld-1982-10-18&quot; rel=&quot;noreferrer&quot;&gt;October, 1982&lt;/a&gt; (p. 1).&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2017-04-24T20:50:29.523" LastActivityDate="2017-04-24T20:50:29.523" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2764" PostTypeId="2" ParentId="2760" CreationDate="2017-04-24T20:33:07.150" Score="22" Body="&lt;p&gt;The MOS 6502 (1 MHz) was introduced in 1975 for a price of &lt;a href=&quot;https://en.wikipedia.org/wiki/File:MOS_6501_6502_Ad_Sept_1975.jpg&quot; rel=&quot;noreferrer&quot;&gt;$25&lt;/a&gt;. Then in 1978 MOS agreed to sell the 6502 (1.79 MHz) and an IO chip to Atari for &lt;a href=&quot;http://www.commodore.ca/commodore-history/the-rise-of-mos-technology-the-6502/&quot; rel=&quot;noreferrer&quot;&gt;$12 per set&lt;/a&gt; (because the production cost was $4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1977, the Zilog Z80A (4 MHz) was &lt;a href=&quot;http://www.old-computers.com/history/detail.asp?n=33&amp;amp;t=3&quot; rel=&quot;noreferrer&quot;&gt;$65 for the ceramic package and $59 for the plastic version&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-04-24T20:33:07.150" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2765" PostTypeId="2" ParentId="2762" CreationDate="2017-04-24T22:00:39.637" Score="9" Body="&lt;p&gt;Most likely, the two RTC devices would conflict, since they will probably rely on the same chip select line and base address $D80000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technically, the A1200 clock port and the A1200 expansion &quot;trap-door&quot; slot can support 2 separate clock port devices, since there are two chip selects. These are called the &quot;RTC&quot; CS, which uses $D80000-$D8FFFF, and the &quot;SPARE&quot; CS, which uses $DC0000-$DCFFFF. So, if you could assign each RTC chip to the two different CS lines, then they would respond on different addresses and would not conflict. However, this will require some minor hardware modification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see two likely options:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;(Good) Find an internal clock port RTC device that has a jumper to determine which CS/address it works off of. Naturally, the software driver will need to support the alternate address ($DC0000) too.&lt;/li&gt;&#xA;&lt;li&gt;(Bad) Disconnect the /RTCCS line from the accelerator card at the expansion port. This would require cutting a trace or a pin. Then a regular internal clock port RTC would use this CS line exclusively. No conflict.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-04-24T22:00:39.637" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2766" PostTypeId="1" AcceptedAnswerId="2896" CreationDate="2017-04-25T01:48:53.967" Score="4" ViewCount="491" Body="&lt;p&gt;These days it's mostly converged on USB, but in the old days computers tended to have lots of different kinds of ports. In particular, I'm interested in:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;9-pin serial&lt;/li&gt;&#xA;&lt;li&gt;25-pin serial&lt;/li&gt;&#xA;&lt;li&gt;parallel printer&lt;/li&gt;&#xA;&lt;li&gt;external disk drive&lt;/li&gt;&#xA;&lt;li&gt;Atari joystick&lt;/li&gt;&#xA;&lt;li&gt;IBM keyboard&lt;/li&gt;&#xA;&lt;li&gt;Ethernet&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;How much did each of these kind of ports cost to add to a 1980's home computer, in the old days? If exact figures aren't available, I'd be interested in an overall order of magnitude figure plus some idea of the differences, e.g. how much cheaper is 9-pin serial compared to 25-pin?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm specifically interested in Z80-based computers (e.g. ZX Spectrum).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Okay, for more specificity: yeah, ZX Spectrum is a representative particular machine, and I'm interested in total extra cost, the connector plus any chips needed to drive the port that weren't already necessary in the machine. I'm only interested in variable cost, not fixed, so the cost of developing any driver software can be ignored (though if it would be large, the cost of ROM space can't).&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2017-04-27T01:39:57.263" LastActivityDate="2017-05-11T17:23:56.510" Title="How much did different kinds of ports cost to add to a 1980's home computer?" Tags="&lt;hardware&gt;&lt;history&gt;&lt;connector&gt;" AnswerCount="1" CommentCount="17" ClosedDate="2017-05-17T19:54:11.273" ContentLicense="CC BY-SA 3.0" />
  <row Id="2767" PostTypeId="1" AcceptedAnswerId="2768" CreationDate="2017-04-25T13:07:15.850" Score="6" ViewCount="1406" Body="&lt;p&gt;Is the SimH emulator available for macOS? I can't find it on their website: &lt;a href=&quot;http://simh.trailing-edge.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://simh.trailing-edge.com/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I am specifically interested in is to run UNIX V7 on a PDP-11 emulator.&lt;/p&gt;&#xA;" OwnerUserId="4905" LastEditorUserId="4905" LastEditDate="2017-04-26T18:27:24.070" LastActivityDate="2018-05-07T14:47:59.460" Title="Is the SimH emulator available on macOS?" Tags="&lt;unix&gt;&lt;pdp-11&gt;&lt;simh&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2768" PostTypeId="2" ParentId="2767" CreationDate="2017-04-25T13:13:05.823" Score="5" Body="&lt;p&gt;It’s available in &lt;a href=&quot;https://brew.sh/&quot; rel=&quot;noreferrer&quot;&gt;Homebrew&lt;/a&gt; for macOS; install that, then&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;brew install simh&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to install SimH.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-04-25T13:13:05.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2769" PostTypeId="2" ParentId="2740" CreationDate="2017-04-25T15:46:13.383" Score="1" Body="&lt;p&gt;Redesigning vintage motherboards can be a great thing.  Anyone who's into this hobby (vintage/retro computers) know that the reason to do &lt;em&gt;anything&lt;/em&gt; with this stuff isn't about money.  But the love of the hobby.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although, some people have certainly made money doing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, coming from a person who is designing his own motherboards for retro computers, I recommend to start small.  One mistake is that not all 80's era motherboards were two layer boards.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing to consider is that some of these computers were more complicated than people assume.  For example, the Apple IIe did use some custom chips to reduce costs.  The original Apple II was more off the shelf.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of them used DRAM that are hard to obtain these days.  So between the DRAM and the custom chips, it would be a LOT of work to reproduce the Apple II line of motherboards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it HAS been done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, I would suggest starting small.  If you really want to design something of that vintage, one great example is the Mockingboard sound card for the Apple II.  I've built them on breadboards and they are still sought after.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plus, you can find the schematics online.  And, the chips are all very easy to obtain.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you get good at building peripheral cards, for example, then designing a complete motherboard would be easier.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-04-25T15:46:13.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2770" PostTypeId="1" AcceptedAnswerId="2772" CreationDate="2017-04-25T16:43:21.833" Score="28" ViewCount="3342" Body="&lt;p&gt;Looking at &lt;a href=&quot;http://www.old-computers.com/history/detail.asp?n=33&amp;amp;t=3&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; which refers to the initial release of the Z80 microprocessor, it prices the ceramic one at $65 versus the plastic version at $59.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that at least with the 6502, the earliest run was ceramic and now considered quite desirable since they changed over to plastic-only at some point in the mid-late 70's. But besides having a rarity factor, is there any advantage to having a ceramic chip instead of a plastic one? I presume ceramic has better heat transfer properties, but these things didn't run that hot to begin with.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="276" LastEditDate="2017-11-13T09:12:52.183" LastActivityDate="2020-12-13T03:01:45.877" Title="Is there any advantage of a ceramic microprocessor over a plastic one?" Tags="&lt;chip&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2771" PostTypeId="2" ParentId="2755" CreationDate="2017-04-25T17:25:08.837" Score="3" Body="&lt;p&gt;It could be done with a standard RS232 port. Not that you could plug an Atari joystick straight into it, but it would be trivial to run a five-microswitch joystick (i.e. Atari-type) on a serial port. Nor would you need a special driver for the host. Any old program could read the port and get the button info from it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before USB and even PS/2 ports were common, there were mice that plugged into the serial port. If you can run a mouse on a serial port you can certainly run a joystick! And the Atari-type joystick presents a much smaller problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A computer's RS232 port is set up as &quot;Data Terminal Equipment&quot;, which means that it receives four different &quot;status&quot; signals from the DCE: Data Set Ready, Clear To Send, Carrier Detect, and Ring Indicator. For an Atari-type joystick it would be trivial to connect four of the five microswitches to these so that they'd send RS232-compatible &quot;asserted&quot; (positive voltage) and &quot;deasserted&quot; (negative voltage) on these. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the fifth switch you could use the Received Data (RD) line. You couldn't send actual characters on RD without more logic, but if you just leave it at negative voltage (marking) when the switch is not-pressed and go to positive voltage (spacing) when the switch is pressed, the computer would see framing errors (or random incoming characters if it was released fast enough) in the status from the port. Set the port at 115200 bps and you could be &quot;sampling&quot; that button about 10,000 times a second, far more than fast enough. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chief obstacle would seem to be power -- or, rather, voltage. Very very little current is needed to drive those lines, as they are high-impedance, voltage-sensitive inputs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An RS232 port does not intentionally supply any power.  However its own output signal lines obviously are capable of driving RS232 &lt;em&gt;inputs&lt;/em&gt;, and that's all we'd be asking them to do here. (They can even supply enough current to light up LEDs and still provide useful signals to the other end, as witnessed by countless &quot;RS232 testers&quot; whose LEDs were powered from the port.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We just arrange for the program in the host to set up the port properly: If it asserts, say DTR, there you have your + voltage, and if it deasserts, say, RTS, there you have the negative. The TxD signal on an idle port will also be constantly providing negative voltage (&quot;marking&quot;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So all you really need are five microswitches, a connector and cable, and appropriate wiring. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more sophisticated approach would be to actually send serial data on an RS232-compatible line. You'd need a bit rate generator, a UART, and a single RS232 line driver... which in this case need be nothing more than a couple of  transistors (just one if you're creative). For an Atari-type stick you just wire your five microswitches into five data pins on the UART, and it sends a continuous stream of characters - bits within each character indicating the status of the five switches. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could trivially expand this to eight switches. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or with a better position sensor under your joystick you could use the extra three bits for &quot;intensity&quot;, indicating how far the joystick was pushed in the direction indicated. Or you could do more sophisticated schemes. With one bit for the &quot;fire&quot; button 128 different combinations of direction and magnitude could be encoded if the hardware sensing the joystick position permitted it. 16 different directions (permitting 22.5-degree resolution) and 8 magnitudes, for example. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With CMOS this circuitry would consume microamps and so could easily be powered from the few mA available from the output signal lines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, if you can run (and afford to make) a serial mouse from a serial port with no additional power supply, you can obviously do this. Cost would be no more prohibitive than that for a serial mouse. &lt;/p&gt;&#xA;" OwnerUserId="3705" LastEditorUserId="3705" LastEditDate="2017-04-26T01:56:30.793" LastActivityDate="2017-04-26T01:56:30.793" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2772" PostTypeId="2" ParentId="2770" CreationDate="2017-04-25T18:08:44.717" Score="24" Body="&lt;p&gt;One factor is indeed better heat dissipation properties of the ceramic housing. In those times both Z80 and 6502 were NMOS and had considerable heat release, so better heat transfer properties of ceramic housing could help achieve higher ambient working temperatures.&#xA;Second factor is temperature range. In most cases, temperature range of the chip is defined not by silicon chip itself, but by its housing. Solid plastic housing could literally tear out connecting wires off the chip during extreme temperature changes, unlike the ceramic housing, where the silicon chip is only glued (or soldered) by its bottom part.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2017-04-25T18:08:44.717" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2773" PostTypeId="1" AcceptedAnswerId="2774" CreationDate="2017-04-25T18:46:05.987" Score="7" ViewCount="679" Body="&lt;p&gt;In Linux, each terminal is associated with a new shell process. For example, here I have two &lt;code&gt;xterm&lt;/code&gt; terminals, and each &lt;code&gt;xterm&lt;/code&gt; terminal has an associated shell process:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8E5HV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8E5HV.png&quot; alt=&quot;ps listing with 2 xterm and bash processes&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am wondering if in the old days when terminals were real devices and not software emulation, did ancient Unix (for example UNIX V7) create a new shell process for each (real) terminal, or did all terminals share the same shell process?&lt;/p&gt;&#xA;" OwnerUserId="4905" LastEditorUserId="6794" LastEditDate="2017-12-23T07:08:58.057" LastActivityDate="2017-12-23T07:08:58.057" Title="Does ancient UNIX create a new shell process for each terminal?" Tags="&lt;unix&gt;&lt;terminal&gt;&lt;shell&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2774" PostTypeId="2" ParentId="2773" CreationDate="2017-04-25T19:05:56.050" Score="13" Body="&lt;p&gt;Each terminal gets its own set of processes: first &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V7-Snapshot-Development/usr/man/man8/getty.8&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;getty&lt;/code&gt;&lt;/a&gt;, which sets the terminal link up and waits for a login, then replaces itself with &lt;code&gt;login&lt;/code&gt; to handle the actual login, and finally &lt;code&gt;login&lt;/code&gt; runs the user’s shell. So yes, each terminal gets its own shell (once a user has logged in).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This doesn’t happen automatically, it’s set up by &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V7-Snapshot-Development/usr/man/man8/init.8&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;init&lt;/code&gt;&lt;/a&gt; which uses the information in &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V7-Snapshot-Development/etc/ttys&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;/etc/ttys&lt;/code&gt;&lt;/a&gt; to determine where to start &lt;code&gt;getty&lt;/code&gt;s.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-04-25T20:50:22.727" LastActivityDate="2017-04-25T20:50:22.727" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2775" PostTypeId="1" CreationDate="2017-04-25T19:11:37.287" Score="12" ViewCount="402" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Barcode#Universal_Product_Code&quot; rel=&quot;noreferrer&quot;&gt;the history of barcodes&lt;/a&gt;, the idea of consumer product barcodes appeared before the microprocessor era. What was the implementation plan then? Would each store need a mini-computer in a back-room?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first commercial barcode reader appeared in 1974. What was it based on? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The UPC barcode symbology seems to be quite complex compared to encodings used to record data on cassette tape (for example, it must be readable in either direction, and it contains just a couple of sync bars compared to hundreds of initial sync pulses in the beginning of cassette tape files); how was it implemented, given the memory constraints and the variation in scanning speed?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-04-26T06:03:45.403" Title="How did the early UPC barcode readers work?" Tags="&lt;hardware&gt;&lt;history&gt;&lt;barcode&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2776" PostTypeId="2" ParentId="2773" CreationDate="2017-04-25T19:40:39.300" Score="3" Body="&lt;p&gt;It wouldn't make much sense. Terminals are generally used by different people, and each one needs a shell process with a different user ID. Writing a shell able to serve multiple sessions in case a user logs in on multiple terminals would not be of much benefit as such sessions would be unlikely to be active at the same time.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="79" LastEditDate="2017-04-26T09:44:19.127" LastActivityDate="2017-04-26T09:44:19.127" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2777" PostTypeId="1" AcceptedAnswerId="2778" CreationDate="2017-04-25T21:06:23.337" Score="8" ViewCount="479" Body="&lt;p&gt;I am using the SimH emulator to emulate a PDP-11 computer with UNIX V7 installed on it. So basically I am emulating something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7p1er.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7p1er.png&quot; alt=&quot;PDP-11&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I issued the &lt;code&gt;tty&lt;/code&gt; command to see on which TTY port my terminal is connected and I got the following result:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9MulF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9MulF.png&quot; alt=&quot;Console screenshot &amp;quot;/dev/console&amp;quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I expected to get something like &lt;code&gt;/dev/tty2&lt;/code&gt; but I got &lt;code&gt;/dev/console&lt;/code&gt;. So I have searched to see what this value means and I found that it means the &quot;System Administrator console&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, is there a difference between the port that the &quot;System Administrator console&quot; is connected to and the other ports that the normal users terminals are connected to?&lt;/p&gt;&#xA;" OwnerUserId="4905" LastEditorUserId="276" LastEditDate="2017-08-31T08:30:51.977" LastActivityDate="2017-08-31T08:30:51.977" Title="Is there anything special about /dev/console?" Tags="&lt;unix&gt;&lt;pdp-11&gt;&lt;simh&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2778" PostTypeId="2" ParentId="2777" CreationDate="2017-04-25T21:10:08.113" Score="11" Body="&lt;p&gt;The system administrator console is the “terminal” used for system boot: &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V7-Snapshot-Development/usr/man/man8/init.8&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;init&lt;/code&gt;&lt;/a&gt; starts there, with a single-user shell, and only when that finishes does the system continue to multi-user boot (enabling the other terminals). The linked manpage has the details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://gunkies.org/wiki/Installing_Unix_v6_%28PDP-11%29_on_SIMH&quot; rel=&quot;noreferrer&quot;&gt;V6 PDP-11&lt;/a&gt; installation instructions show how to enable additional terminals (connecting over TCP/IP to the simulator) in SimH.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-04-25T21:18:20.467" LastActivityDate="2017-04-25T21:18:20.467" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2779" PostTypeId="2" ParentId="2775" CreationDate="2017-04-25T22:22:50.353" Score="4" Body="&lt;p&gt;You can see a picture of the first checkout system with barcode from &lt;a href=&quot;https://en.wikipedia.org/wiki/NCR_Corporation&quot; rel=&quot;nofollow noreferrer&quot;&gt;National Cash Register&lt;/a&gt;, the NCR 255, &lt;a href=&quot;http://www.smithsonianmag.com/innovation/history-bar-code-180956704/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. It uses a laser scanner, and as the shown newspaper article explains, an NCR 726 minicomputer in a backroom controls the whole system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ncr.org.uk/page410.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a bigger picture of the NCR 255 point of sale terminal, and a picture of the NCR 725 (hopefully not too different from the NCR 726) is &lt;a href=&quot;http://www.ncr.org.uk/page411.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's probably impossible to find out how it exactly was implemented. A laser scanner using mirrors shouldn't have a lot of variation in scanning speed, and I can imagine the bright-dark decoding was handled by dedicated hardware in the POS terminal. The density of bar codes is a lot lower compared to magnetic tape, and the contrast of the bar code stands out against everything else on the scanned package, so I don't see why it should need hundreds of sync pulses. Scanning twice in a cross makes sure the data is correct. The UPC barcode encoding really isn't that complex.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2017-04-26T06:03:45.403" LastActivityDate="2017-04-26T06:03:45.403" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2780" PostTypeId="2" ParentId="2775" CreationDate="2017-04-25T23:13:34.427" Score="5" Body="&lt;p&gt;The one tricky aspect of the UPC code is accurately gauging the bit rate, but that is facilitated by the fact that each code starts and ends with a sequence of narrow bars and spaces.  Once the bit rate has been determined, one can start by converting each &quot;pixel&quot; that matches the previous one to a zero and each pixel that differs into a 1.  Each character will start with a 1 and have six bits after it, of which three will be set and three will be clear.  There are 64 combinations of six bits, and 20 of them have three ones and three zeroes.  Ten of those are used to represent digits on the left half of the code, and ten are used to represent digits on the right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The one feature of UPC code which makes it difficult to process, and I'm not sure how this was handled, is the possibility of having up to three consecutive zero bits.  I would guess that if the inventor of UPC had thought of interleaving pairs of digits, an interleaved 2-of-5 format might have been used instead (though perhaps with other start/end sentinels), since it offers the same data density while only using two widths of bar and space.  I suspect that in practice capturing the bit rate for UPC data would not have been a problem for a laser scanner which could use one pass to measure the data rate (originally each code would have always had the same number of bars and spaces, stored in the same number of &quot;pixels&quot;, so measuring the time between the start and end sentinels and dividing by the number of pixels would have given the time per bit).  Reading UPC is harder for a single-pass handheld wand, but I don't know how common those were expected to be.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="2126" LastEditDate="2017-04-26T05:58:59.130" LastActivityDate="2017-04-26T05:58:59.130" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2781" PostTypeId="1" AcceptedAnswerId="2782" CreationDate="2017-04-26T05:23:40.567" Score="16" ViewCount="1482" Body="&lt;p&gt;Lately I've been interested in how old machines work, in particular an NES. While there are quite a few resources on the basic operations and even some games that have been totally broken down byte by byte, there isn't much information on how this is done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far, I've found discussions on two different methods to accomplish this, but neither seems very efficient, so I'm curious to see if there is a better option. Firstly there's converting the hex ROM file into assembly code, but this is difficult to follow and deals with RAM operations, making it difficult to precisely where in the ROM the information is being drawn from. Secondly, you can go in and systematically delete or corrupt parts of the ROM file just to see the effects. I've personally had more success with this, but it takes forever, and is entirely guesswork and doesn't lead to a broader understanding of how the program actually operates. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are these the only two viable options to doing this? Are there any patterns or behaviors I should be aware of? Thanks.&lt;/p&gt;&#xA;" OwnerUserId="4947" LastActivityDate="2019-11-08T07:32:27.507" Title="Best way to locate data on ROM? (6502 Processor)" Tags="&lt;nes&gt;&lt;rom&gt;&lt;6502&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2782" PostTypeId="2" ParentId="2781" CreationDate="2017-04-26T10:21:33.943" Score="17" Body="&lt;p&gt;I've done this partially with Commodore PET Space Invaders which I used as a test program to debug my Commodore PET emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used a disassembler to convert the program to assembly language and I then went through the code annotating it as I found out what it does. When I understood what a bit of code did, I would look for its entry point (my disassembler created labels for the target of every &lt;code&gt;JMP&lt;/code&gt; and &lt;code&gt;JSR&lt;/code&gt;) and rename the label to something useful. That would help me with other bits of code that called the piece I had just reverse engineered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It helped that, having written an emulator, I was quite familiar with the memory mappings of the IO chips and certain important bit patterns. So, for instance, if I saw a bit of code writing a certain bit pattern to a certain address that I knew was mapped to one of the PIA ports, I knew it would be scanning the keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also helped that I could run my emulator in trace mode (albeit very slowly) so every instruction is printed out as it is executed. So, for instance, when a space invader started appearing on the screen, I could look at the trace and see which bits of code were being executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It took some time and I basically suspended work on it when I found a bug that was caused by my emulator being too fast. I haven't figured out a way to make it run accurately at the correct speed yet.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To expand a bit, I used the disassembler (da65) from the &lt;a href=&quot;https://github.com/cc65/cc65&quot; rel=&quot;noreferrer&quot;&gt;cc65&lt;/a&gt; tool chain. It has the handy ability to accept an &quot;info file&quot; so you don't need to annotate the generated source from the disassembler. So, for example, the first two bytes of a PET program file are actually the load address. I wrote the following annotation in the info file&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RANGE { &#xA;    NAME &quot;loadAddress&quot;;&#xA;    START $03FF;    &#xA;    END   $0400;&#xA;    TYPE ByteTable;      &#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which make the assembler treat the first two bytes as data and not garbage assembler instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next bit was a one line BASIC program that calls the machine code routine that is the start of the program proper. Again, I forced the disassember to treat it as data&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RANGE { &#xA;    NAME &quot;basicBootstrap&quot;;&#xA;    COMMENT &quot;SYS(1039)&quot;;&#xA;    START $0401;    &#xA;    END   $040E;&#xA;    TYPE ByteTable;      &#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This time it also causes the disassembler to emit a comment that tells you what it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then it's just a case of laboriously going through the code identifying the function of various bits. For example, I found a short loop that tested a certain bit on one of the PIA registers which I know is the vertical retrace, so it is clearly syncing with the monitor. I add this annotation&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LABEL { &#xA;    NAME &quot;waitForRetraceLow&quot;;     &#xA;    ADDR  $09B0; &#xA;    size $8;&#xA;    COMMENT &quot;Wait for the screen to lower its retrace signal&quot;;  &#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the disassembler creates a label for the routine as well as using the label in &lt;code&gt;JSR&lt;/code&gt; and &lt;code&gt;JMP&lt;/code&gt; from elsewhere.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="2126" LastEditDate="2017-05-01T22:05:04.607" LastActivityDate="2017-05-01T22:05:04.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2783" PostTypeId="2" ParentId="2777" CreationDate="2017-04-26T13:15:40.410" Score="11" Body="&lt;p&gt;There is a very minor difference between the &quot;/dev/console&quot; terminal port and any other &quot;/dev/ttyxx&quot; terminal ports: whether the port is optional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the console port, the port is on a card that came with the base PDP-11 system (not an optional add-on).  On some models of PDP-11 the port was on a separate card (or set of cards, e.g. the KL11 on a PDP-11/20), while on other models the port was actually included on the CPU card itself (e.g. the PDP-11/23).  When the console port wasn't a KL11, it was something that was KL11-compatible (so the operating system could pretend it was a KL11 and it would work no matter what model of PDP-11 it actually was).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tty ports were typically for ports that were added to the system (either as factory-ordered options, or options added later).  These were typically added using options such as the DL11, DJ11, DH11, or DZ11.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a software perspective, the KL11 and DL11 were essentially the same thing, but the KL11 came with the system (often in the CPU cabinet itself) while the DL11 was an option.  The KL11 and DL11 each supported a single terminal, but options like the DJ11, DH11 and DZ11 could support up to 16 terminals (8 for DZ11).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Unix, there was nothing special about the console port except that its driver was always included in the kernel (because every system had it).  To support other terminal boards (DJ11, DH11, DZ11, etc.) you might need to reconfigure the system with additional drivers.  In particular, on Unix v7, if you install the system from tape the 'stock' kernel will only include support for the console KL11.  If you want to use additional terminals you need to reconfigure the system to add support for DL11/DJ11/DH11/DZ11/etc. options.  For more details, take a look at &lt;a href=&quot;http://minnie.tuhs.org/PUPS/Setup/v7_setup.html&quot; rel=&quot;noreferrer&quot; title=&quot;Setting Up Unix - Seventh Edition&quot;&gt;Setting Up Unix - Seventh Edition&lt;/a&gt; in the &quot;Reconfiguration&quot; section.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2017-04-26T13:27:44.710" LastActivityDate="2017-04-26T13:27:44.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2784" PostTypeId="1" AcceptedAnswerId="2787" CreationDate="2017-04-26T21:43:34.340" Score="17" ViewCount="1647" Body="&lt;p&gt;The Macintosh, ST, and Amiga were all 68000 CPU systems released in 1984-85, along with their respective new Operating Systems. While this was 5 years before protected mode became commonplace on Intel PC (80286/80386) OS's, the 68000 had a protected mode as well (i.e. a special mode allowing the use of privileged/supervisor instructions not normally available to user code).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga Exec kernel eschewed the use of protected mode in order to provide efficient multitasking and inter-process communications. The original Mac OS and Atari TOS did not really have these features, and I think they made use of protected mode for something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How was the protected mode used in Mac OS and TOS? What advantages did this provide?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="382" LastEditDate="2017-05-09T19:49:33.090" LastActivityDate="2017-05-09T19:49:33.090" Title="How did the original Apple Macintosh and Atari ST use protected mode?" Tags="&lt;apple-macintosh&gt;&lt;operating-system&gt;&lt;motorola-68000&gt;&lt;atari-st&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2785" PostTypeId="2" ParentId="494" CreationDate="2017-04-27T06:29:32.190" Score="8" Body="&lt;p&gt;The technique that zellyn describes above for having the Monitor process a command from the input buffer was, as he said, devised for Applesoft. In fact, one of its crucial elements is specific to that language: the &quot;D9C6G&quot; references the Applesoft ROM code. As it happens, the file that was often distributed to provide Integer BASIC for the Language Card had, of course, Integer BASIC itself, plus the mini-assembler and Sweet-16 interpreter, at $E000 to $F7FF, with &quot;Programmer's Aid #1&quot; added at $D000 to $D7FF, and $D800 to $DFFF left with simply a copy of the Applesoft ROM code of the same address space. Thus, the routine at $D9C6 &lt;em&gt;was&lt;/em&gt; present, and the above-listed technique would work. However, this would not be reliable -- the $D800-$DFFF space might not have a copy of that portion of Applesoft; and in particular, if the above is tried on an original-model Apple ][, with Integer BASIC itself in ROM and no trace of Applesoft, it definitely &lt;em&gt;won't&lt;/em&gt; work. There is an address intrinsic to Integer BASIC that does the same job: E817. Use that in place of D9C6 for something that will reliably work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A second, minor point is that the &quot;N&quot; just before the D9C6/E817 is used to safely terminate the memory-assignment command. That's usually fine, as it just sets text to &quot;Normal&quot; display mode. However, if one happened to have been using Inverse mode, this would cancel it. A completely generalized method would be to replace the &quot;N&quot; with a &quot;&amp;lt;&quot; directly prefixing the E817G: &quot;&amp;lt;E817G&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More significantly, however, a faster technique for storing the string in the input buffer, compared to a BASIC poke-loop, would be to &quot;trick&quot; Apple's DOS 3.3 into storing the string in the input buffer for you, by PRINTing it as a simulated DOS command. (The bold-italic &lt;strong&gt;&lt;em&gt;D&lt;/em&gt;&lt;/strong&gt; is an embedded &quot;ctrl-D&quot;):&#xA;&lt;code&gt;&lt;br&gt;&#xA;10 PRINT &quot;&lt;strong&gt;&lt;em&gt;D&lt;/em&gt;&lt;/strong&gt; 300:AD 30 C0 60 &amp;lt;E817G&quot;;:POKE 513,141:PRINT:&#xA;   POKE 49,0:POKE 52,2:CALL -123&lt;br&gt;&#xA;&lt;/code&gt;&#xA;In the above line, the PRINT begins with a &quot;ctrl-D&quot; to indicate a DOS command. This causes DOS to store all that is printed in the input buffer, instead of actually printing it. The POKE 513,141 then replaces the second character, which was a SPACE, with a &amp;lt;Return&gt; in the buffer. Then PRINT actually generates a &amp;lt;Return&gt;, to let DOS process the &quot;command&quot;. Thanks to the above POKE, DOS sees only a &quot;null&quot; command, and does nothing more. Then the two POKEs and CALL set up the monitor and have it process the printed string as a command.&lt;/p&gt;&#xA;" OwnerUserId="4959" LastActivityDate="2017-04-27T06:29:32.190" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2786" PostTypeId="2" ParentId="2784" CreationDate="2017-04-27T07:23:23.433" Score="7" Body="&lt;p&gt;So far as I recall, the Macintosh System Software didn't bother with the user versus supervisor mode distinction. Even after the release of System 7, which supported virtual memory, virtually everything ran in supervisor mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the Apple Lisa, which had a more minicomputer-like (or what we'd today call Unix-like) operating system design, as well as an MMU, did use supervisor for the operating system itself and user mode for application level code.&lt;/p&gt;&#xA;" OwnerUserId="4496" LastActivityDate="2017-04-27T07:23:23.433" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2787" PostTypeId="2" ParentId="2784" CreationDate="2017-04-27T08:12:52.517" Score="25" Body="&lt;p&gt;The (plain) 68k never had anything directly comparable to the Intel x86 range's &lt;em&gt;Protected Mode&lt;/em&gt;. When Intel introduced the Protected mode (PM) to its x86 range of CPUs, this lifted a number of restrictions, though, that the 68k range never had:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;PM allowed the OS designer to &lt;em&gt;protect&lt;/em&gt; (hence the name...) certain address ranges from access from non-privileged code, basically layering the software into privileged (OS) and non-privileged (applications) layers with certain access limitations on memory areas and certain instructions. The 68k from the very beginning supported &lt;em&gt;supervisor&lt;/em&gt; and &lt;em&gt;user&lt;/em&gt; modes to do a similar thing (but needing support from circuitry external to the CPU to define and impose those protected ranges). The Atari ST, for example, would execute a software trap triggered by its MMU (**) and GLUE custom chips when applications in user mode tried to access certain hardware register areas that were only allowed for Supervisor Mode code.&lt;/li&gt;&#xA;&lt;li&gt;Starting with the 386, PM provided a 32-bit linear address range to end user programs and allowed OS and applications writers to get rid of the quirky segmented architecture the original 8086 had (with &quot;tiny&quot;, &quot;large&quot; and &quot;huge&quot; memory models and all the software quirks that came with them). The 68k never had this limitation as it provided linear 32-bit addressing from the very beginning (but see further down below (*))&lt;/li&gt;&#xA;&lt;li&gt;The 386 PM introduced a fully capable MMU and address translation between virtual, linear and physical memory addresses - The original 68000 didn't have this and relied on external circuitry to do such things. A similar capability was introduced to the Motorola CPU range with the 68010 and 68020 CPUs, until the first &quot;full MMU&quot; implementation followed in the 68030.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The Atari ST generally ran applications in User Mode, in order to allow memory (and I/O) protection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Sinclair QL's QDOS did as well, effectively switching off multitasking when in Supervisor Mode (or rather, running OS code). Thus restricting Supervisor Mode code to OS code or hardware specific code like device drivers and (obviously) interrupt service routines. This also meant that user applications had to restrict the time they spent in Supervisor Mode as much as possible, in order to not severely harm proper time-slicing. Another reason not to stay in SM for too long was the very limited resources (only 100 bytes of supervisor stack, for example) assigned to this mode by the OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 68k Mac, to my knowledge, didn't actually care much about UM and SM and applications were allowed to run in Supervisor mode all the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PalmOS also had a strong distinction between Supervisor and User Mode, reliant on &lt;em&gt;co-operative&lt;/em&gt; multitasking, it effectively switched off application switching in Supervisor mode in order to be able to do some of it's complicated memory management magic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(*) The fact that the 68k range had a non-segmented architecture is only partially valid: It is true that the 68000 did have linear 32-bit addressing from the very beginning, but this was only valid for direct addressing modes - &lt;em&gt;indirect&lt;/em&gt; (register-relative) addressing was limited to +-32k in the original 68000, this limitation was lifted only later by the 68020. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This lead to the interesting fact that some computer architectures for the 68000 (examples being MacOS 68k, QDOS for the Sinclair QL and PalmOS for Palm Handhelds) implemented a software-segmented architecture, that introduced &lt;em&gt;artificial segmentation&lt;/em&gt; into 64k segments by only allowing register- and PC-relative addressing, which allowed them to get rid of an otherwise needed relocating loader to adapt absolute addresses in the code to the load address of the binary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This limited intrasegment calls to +-32k and actually introduced a sort of segmentation similar to what the 8086 had, but made life for the OS writers quite a bit easier (but for applications writers more complicated). Imposing the limit of fully position-independent code and data onto applications allowed the OS to do much more effective memory management (entirely needed on early 68k Macs that were limited to 128k of memory and PalmOS devices whose main memory also had to accommodate for mass data storage). The  OS could shift applications' data and code around arbitrarily and only had to adjust one single base register in the application - Much like it had a hardware MMU. Applications writers, however, had to introduce &lt;em&gt;jump islands&lt;/em&gt; or other helpers in their code (typically done on MacOS and PalmOS) in order to be able to reach a location further than 32k away, or, as an alternative, had to resort to having a relocation loader embedded into the application, where possible (Sinclair QL).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga and the Atari ST operating systems did have a relocating loader and supported full absolute 32-bit addressing in applications programs. This did, however, mean that once an application was loaded and relocated in memory by the OS, it couldn't easily be moved. (I'm not an Amiga expert, but do believe the Amiga used register-relative addressing in libraries, though).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Sinclair QL allowed both approaches, supporting both so-called &lt;em&gt;pure&lt;/em&gt; and &lt;em&gt;impure&lt;/em&gt; programs, the former fully movable in memory and allowing to run several task (&quot;job&quot;) instances on top of the very same code, the latter supporting in-built relocating loaders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(**) The Atari ST custom chip referred to as &quot;MMU&quot; here (that was the name Atari christened it) was not what we would call an MMU today. Yes, it did &quot;manage memory&quot;, but not in the sense of virtual memory and address translation.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-04-27T17:54:31.597" LastActivityDate="2017-04-27T17:54:31.597" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="2788" PostTypeId="1" AcceptedAnswerId="2790" CreationDate="2017-04-27T09:25:13.903" Score="15" ViewCount="1336" Body="&lt;p&gt;Computer and game consoles switched gradually from single-bitplane graphics (2 colours per character) to 2-bitplane graphics (4 colours per character), to eventually 4-bitplane graphics (16 colours per character).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some early Super NES games internally uses 3-bitplane graphics (allowing 8 colours per character, and a graphical quality between 2 and 4-bitplane graphics) and de-compresses it to 4-bitplanes in order to save ROM. I wonder if any system ever used 3-bitplane graphics natively.&lt;/p&gt;&#xA;" OwnerUserId="2123" LastActivityDate="2019-06-17T06:07:32.910" Title="Did any system natively use 3-bitplane graphics?" Tags="&lt;graphics&gt;&lt;gaming&gt;" AnswerCount="7" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2789" PostTypeId="2" ParentId="357" CreationDate="2017-04-27T09:45:03.390" Score="4" Body="&lt;p&gt;To add a bit to the above, since all the values in the first table are the same for an Apple IIe Enhanced and for an Apple IIgs, I could just point out that a quick answer to the question, &quot;Which is it?&quot; would be: If the value at $FE1F is $60, it's a IIe/Enh; if not, it's a IIgs. You don't actually have to &lt;em&gt;call&lt;/em&gt; the routine to determine this.&lt;/p&gt;&#xA;" OwnerUserId="4959" LastActivityDate="2017-04-27T09:45:03.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2790" PostTypeId="2" ParentId="2788" CreationDate="2017-04-27T11:00:20.603" Score="24" Body="&lt;p&gt;The Amiga hardware supported &lt;em&gt;only&lt;/em&gt; bitplane graphics, and you could have as many or as few bitplanes as you desired, up to certain bandwidth and archtectural limits. A neat trick of the Amiga's video hardware is to superimpose two three-bitplane screens and scroll them independently, which is obviously pretty useful for games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tended to use an eight-colour Workbench on my old Amiga 4000, as that was a reasonable compromise between having enough colours to render pretty icons, and yet not use up so much precious video bandwidth that window movements were slow.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2017-04-27T11:00:20.603" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2791" PostTypeId="2" ParentId="384" CreationDate="2017-04-27T11:16:11.583" Score="1" Body="&lt;p&gt;There was a lot of material quoted &lt;em&gt;VERBATIM&lt;/em&gt; from the Wikipedia article that was &quot;a bit jumbled, ambiguous, and in some cases wrong&quot;. I might ask what elements of the article these terms apply to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Judging from the respective Applesoft I and II &quot;blue books&quot;, it's not really possible to assert with certainty that the print-space function SPC() was &lt;em&gt;added&lt;/em&gt; with Applesoft II. In the Applesoft I manual, it's never &lt;em&gt;discussed&lt;/em&gt;, but &quot;SPC&quot; &lt;em&gt;IS&lt;/em&gt; listed among &quot;reserved words&quot;. What sounds likely is that the function did exist in Applesoft I, but they simply forgot to document it in the manual. But this can only be speculation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, Applesoft I did not have commands &lt;em&gt;called&lt;/em&gt; IN# and PR#, but among its reserved words were IN and OUT, not otherwise discussed in the manual. These MAY have been Applesoft I's equivalents of IN# and PR#, just as its lores graphics commands had different names.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One other point is that in Applesoft I, the argument for the USR function was the address to be called for its machine-language routine, not an argument &quot;for the function&quot; to utilize in calculating the function's value, as it was in Applesoft II. It's odd that in the Applesoft I manual, there is not one word said about having USR return a useful value of its own. Whenever an example in the manual employs USR to obtain a value, it just depicts the user-routine storing the value in some location that is PEEKed in a later statement.&lt;/p&gt;&#xA;" OwnerUserId="4959" LastEditorUserId="31" LastEditDate="2019-02-09T18:24:54.130" LastActivityDate="2019-02-09T18:24:54.130" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2792" PostTypeId="1" AcceptedAnswerId="2793" CreationDate="2017-04-27T13:24:48.283" Score="34" ViewCount="6059" Body="&lt;p&gt;The decision to use the 8088, a version of the 8086 with the data bus restricted to 8 bits, in the original IBM PC, seems strange on the face of it, certainly hurt performance and intuitively shouldn't save all that much money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How much exactly did it save on the manufacturing cost per machine, all told, taking into account the CPU itself, the mainboard and anything else thereby affected?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="276" LastEditDate="2017-04-27T13:27:24.423" LastActivityDate="2020-11-17T06:18:39.370" Title="What was the IBM PC cost saving for using the 8088 vs 8086?" Tags="&lt;history&gt;&lt;ibm-pc&gt;&lt;8086&gt;&lt;8088&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2793" PostTypeId="2" ParentId="2792" CreationDate="2017-04-27T13:32:35.773" Score="33" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8088#Selection_for_use_in_the_IBM_PC&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;, a number of reasons contributed to IBM’s using the 8088 instead of the 8086:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Intel offered them a better price for the 8088 and was able to supply more of the chips;&lt;/li&gt;&#xA;&lt;li&gt;the 8-bit data-bus meant that IBM could use a modified 8085 design (the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/23&quot; rel=&quot;noreferrer&quot;&gt;System/23&lt;/a&gt;) instead of coming up with a new 16-bit design;&lt;/li&gt;&#xA;&lt;li&gt;it also meant that IBM could use more mature and cheaper 8-bit components.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The knock-on effects on design and cost are extensive: using an 8-bit data-bus meant shorter XT-bus connectors, simpler extension cards, fewer traces to handle on the motherboard...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Attaching an actual figure to those cost savings is another story, I doubt anyone could determine that accurately nowadays.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-04-27T13:32:35.773" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2794" PostTypeId="2" ParentId="2792" CreationDate="2017-04-27T13:52:48.243" Score="12" Body="&lt;p&gt;8-bit data bus designs were generally dramatically cheaper than 16-bit designs because they required half as many RAM chips: DRAMs of the time conventionally stored a single bit per address. So an 8-bit machine needed eight of them to populate a memory region. A 16-bit machine needed sixteen. The 8088 has an 8-bit data bus whereas the 8086 has a 16-bit data bus, so the 8088 is a 16-bit chip for these purposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM 5150 uses 64kx1 DRAM chips per &lt;a href=&quot;http://www.minuszerodegrees.net/manuals/IBM_5150_Technical_Reference_6322507_APR84.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;its technical reference manual&lt;/a&gt; section 1-13. So when accessing anything in its 64kb of motherboard RAM, eight chips respond at once, each providing or receiving a single bit.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="276" LastEditDate="2017-04-28T09:45:28.137" LastActivityDate="2017-04-28T09:45:28.137" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="2795" PostTypeId="1" AcceptedAnswerId="7040" CreationDate="2017-04-27T15:29:03.537" Score="12" ViewCount="733" Body="&lt;p&gt;From 1969 up through the early 80s, the Internet used general-purpose Honeywell minicomputers for its core routers. At some point after that, purpose-built machines started being used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the first purpose-built core router? I'm interested in the name and year of course, but also if possible in technical specifics: what were the specifications of the machine, and &lt;em&gt;how&lt;/em&gt; exactly did it get the performance boost that justified its invention, &lt;em&gt;why&lt;/em&gt; did the Internet switch to dedicated routers then and not before or after.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-07-15T21:27:37.910" Title="What was the first dedicated core router?" Tags="&lt;history&gt;&lt;internet&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2796" PostTypeId="1" AcceptedAnswerId="2798" CreationDate="2017-04-27T17:56:18.097" Score="14" ViewCount="3137" Body="&lt;p&gt;The Commodore 64 was the most popular single retro-computer produced, probably selling something like 15 million units. Clearly, the C64 is not &quot;rare&quot;, but early revisions from 1982 are highly prized by collectors for being the most rare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the visible, easily-discerned, markers for recognizing early production of the C64?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="6986" LastEditDate="2018-03-03T00:45:49.720" LastActivityDate="2018-03-03T00:45:49.720" Title="How do you recognize an early production model Commodore 64?" Tags="&lt;hardware&gt;&lt;commodore-64&gt;&lt;collectability&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2797" PostTypeId="2" ParentId="2796" CreationDate="2017-04-27T18:34:53.167" Score="8" Body="&lt;p&gt;If the video port is an 8-pin DIN socket, then it is not from an early production run.  Originally the C64 video port was a 5-pin DIN socket.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This does not necessarily mean that all C64's with 5-pin video ports are &quot;early production&quot;; I do not know when exactly the switch to 8-pin video ports was made.  It was fairly early, but I don't know if it was early enough to be considered &quot;early production&quot; by your definition.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2017-04-27T18:40:19.310" LastActivityDate="2017-04-27T18:40:19.310" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2798" PostTypeId="2" ParentId="2796" CreationDate="2017-04-27T19:10:04.857" Score="14" Body="&lt;p&gt;The easiest way to tell at a glance is the Commodore label on the top of the case.  The earliest ones have a silver metal label, slightly later ones have a silver sticker label, and after that they have the normal &quot;rainbow&quot; label.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MGKmX.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MGKmX.png&quot; alt=&quot;Silver Metal Label&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/j06MF.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/j06MF.png&quot; alt=&quot;Silver Sticker Label&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/uQh0y.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uQh0y.png&quot; alt=&quot;Rainbow Label&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other common indicators are the 5-pin video port, orange VIC20 function keys, and various chips inside the computer being in ceramic packages instead of plastic ones (VIC, Kernal ROM, RAM, etc), although that does vary inconsistently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find a detailed breakdown of serial numbers and various attributes at the &lt;a href=&quot;http://c64preservation.com/registry&quot; rel=&quot;noreferrer&quot;&gt;C64 Perservation Project C64 Serial Registry&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2017-04-27T19:10:04.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2799" PostTypeId="2" ParentId="1637" CreationDate="2017-04-27T20:48:52.720" Score="3" Body="&lt;p&gt;Even an OS kernel on a some very modern system (certainly compared to what is relevant here) uses &quot;special memory values&quot; and machine dependent hacks to provide an ABI. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/2535989/what-are-the-calling-conventions-for-unix-linux-system-calls-on-x86-64&quot;&gt;https://stackoverflow.com/questions/2535989/what-are-the-calling-conventions-for-unix-linux-system-calls-on-x86-64&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Independence&quot; of a kernel could likely be best measured by whether the kernel can force user programs not to interfere with it or not. This became possible as soon as memory management units or comparable hardware became available commercially - and likely operating systems quickly followed since these features - that were expensive to build in pre-single-chip-CPU systems - would be useless without an OS taking advantage of them.&#xA;Architectures like IBM 370, DEC VAX and part of PDP-11 were tailored to such usage, and ran UNIX, VMS and even hypervisors in case of the 370 from the 1970s on. Home/Office grade computers only partially had that kind of feature set - the first widely used microprocessor CPUs that were capable without extra hardware were the 80286 (limited, the 80386 had far better features in that area) and Motorola 68030.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Added detail on why I said &quot;limited&quot; about the 80286: IIRC it was bugged and once you switched into protected/virtual memory mode (an x86 cpu always boots with these features switched off!), any attempt to return it to &quot;real&quot; mode (which you needed to do I/O) utterly crashed it unless you added extra hardware to guard against it (the A20 gate logic in the PC architecture).&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="-1" LastEditDate="2017-05-23T12:39:25.033" LastActivityDate="2017-04-27T21:47:32.113" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2800" PostTypeId="2" ParentId="2190" CreationDate="2017-04-27T21:02:05.480" Score="2" Body="&lt;p&gt;One problem adding substantial manufacturing cost and complexity when adding any socket taking edge connectors in modern hardware, especially consumer grade, is that it basically forces you to do a mixed SMT/THT design of your circuit board, and provide mechanical stability. While you could use SMT-only sockets nowadays, these are far more prone to get sheared or broken right off the board if it is manhandled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Drilling thousands of small holes into a PCB is a cost factor (though you need some for vias anyway) - PCB laminates are among the worst materials regarding tool wear. Putting tall THT components on is either manual work or needs additional machinery. Plastic parts in such connectors need to be of either a very heat proof material due to the way PCBs with SMT parts on all sides are soldered. They're baked like a pizza, at similar temperatures to a non-premium pizza. Add in the trouble with a huge amount of metal nails being a very unwelcome thermal mass. Alternatively, a press fit connector could be used after soldering, but that is relatively recent technology.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-04-27T21:02:05.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2801" PostTypeId="2" ParentId="2796" CreationDate="2017-04-27T21:53:43.337" Score="5" Body="&lt;p&gt;If one wants to get an insight into when a piece of - almost any - complex electronic equipment was built, it is helpful to look for the so called datecodes on components. You will commonly find 4-digit numbers on parts (very common on ICs and capacitors) that are encoded as two digit year, two digit week - eg 8403 for something made 3rd week of january 1984. While assembly can have been later than the most recent datecode found, it cannot have been earlier unless the unit was later modified or repaired with newer spare parts.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-04-27T21:53:43.337" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2802" PostTypeId="2" ParentId="2770" CreationDate="2017-04-27T22:36:46.887" Score="11" Body="&lt;p&gt;A Ceramic/glass/metal IC housing can offer hermeticity (gas, water and sh*t proofness) satisfying aerospace/military/industrial standards, while plastics cannot do so completely - gases and liquids will slowly diffuse, especially with plastics used for IC packaging often not being a simple blob of resin but a compound material made of more sand than plastic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most plastic materials also can take less of a harsh temperature regimen than the semiconductor itself - even if it doesn't melt or burn, trapped water (not truly watertight, as mentioned above) can burst or embrittle the plastic if it turns to steam on sudden temperature changes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually, ceramic packaged versions of components are considered nearly synonymous with military/industrial/aerospace grade parts, which create an impression of especially high quality and reliability (in some parts deservedly so, acceptance testing for these is far stricter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, small/early production runs might have been semi-manually bonded into cases after production - ceramic case kits are sold for such purposes. Also, a lidded ceramic package can be easily taken apart again without destroying everything inside, which can be valuable for defect analysis. Also, you can easily use a semiconductor die or even a multi-die arrangement that is not protected suitably for embedding into plastic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally: There is aesthetics, especially with the gold plating commonly found on ceramic parts. Given that 1980s era computers were expensive anyway, making key components look highest quality was probably considered worthwile. Even electrically nearly irrelevant metal parts were gold plated on chips meant to be blown up along with missiles :) - my theory is that it was about corrosion protection.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-04-27T22:36:46.887" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2803" PostTypeId="2" ParentId="2784" CreationDate="2017-04-28T09:11:07.837" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;68000 had a protected mode as well (i.e. a special mode allowing the use of privileged/supervisor instructions not normally available to user code).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Err, no. At least don't call it protected mode, call it supervisor mode or privileged mode. &quot;Protected mode&quot; implies something like the &gt;=80286 protected mode which had hardware memory protection. This did not exist with the original 68K. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 68000 supervisor mode meant two things:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;certain instructions were not allowed in user mode, for example enabling and  disabling interrupts&lt;/li&gt;&#xA;&lt;li&gt;supervisor mode had a separate stack pointer&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There was no built in support for memory protection at all, and I know for a fact (bitter experience), that early TOS on the Atari treated the memory space as a single shared resource for all programs. However, the 68000 had memory mapped IO and I think I'm correct in stating that the Atari MMU (a separate chip to the 68000) stopped user mode programs from accessing memory locations used by the registers of the IO devices. But that was the limit of memory protection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think roughly the same rules applied to Mac OS because one of the big deals when comparing it to Windows 9x was the lack of protection for processes (or pre-emptive multitasking). Mac OS X was the first virtual memory pre-emptive multitasking OS that achieved any traction in the Mac world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the 68000 you could not &quot;eschew&quot; supervisor mode. Any hardware interrupt or software trap automatically put the processor into supervisor mode, so you always had to deal with it - even on the Commodore Amiga.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-04-28T09:11:07.837" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2804" PostTypeId="1" AcceptedAnswerId="2808" CreationDate="2017-04-28T22:20:10.543" Score="23" ViewCount="12553" Body="&lt;p&gt;A &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2784/how-did-the-original-apple-macintosh-and-atari-st-use-protected-mode#comment6268_2803&quot;&gt;comment&lt;/a&gt; in another question about &lt;em&gt;supervisor&lt;/em&gt; and &lt;em&gt;user&lt;/em&gt; modes in the Motorola 68000 processors, claimed that &quot;performance was abysmal&quot; with virtual memory enabled. An &lt;a href=&quot;https://books.google.com/books?id=TFAEAAAAMBAJ&amp;amp;lpg=PP32&amp;amp;ots=yIsJKrexqJ&amp;amp;dq=mac%20%22system%207%22%20virtual%20memory%20performance&amp;amp;pg=PP32#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;InfoWorld article&lt;/a&gt; about System 7 corroborates this by saying, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To avoid slow performance, Apple suggests that the amount of virtual&#xA;  memory you select be less than the system RAM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Was this poor performance caused by System 7, or by the CPU/(P)MMU, or by the applications themselves? Why did Microsoft Windows not experience poor performance with virtual memory turned on except when applications ran out of memory?&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-11-07T22:57:47.707" LastActivityDate="2019-11-07T22:57:47.707" Title="Why did Mac OS 7 perform poorly with virtual memory enabled?" Tags="&lt;mac-os-classic&gt;&lt;windows-3.x&gt;&lt;virtual-memory&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2805" PostTypeId="2" ParentId="2788" CreationDate="2017-04-29T16:26:23.097" Score="10" Body="&lt;p&gt;Windows 1.x and 2.x use only three of the four planes on an EGA or VGA, because they use a &lt;a href=&quot;http://web.archive.org/web/20130430124615/http://members.chello.at/theodor.lauppert/windows/colors/&quot; rel=&quot;noreferrer&quot;&gt;1-bit true-colour model with dithering&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2017-04-29T16:26:23.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2806" PostTypeId="1" CreationDate="2017-04-30T05:25:23.457" Score="3" ViewCount="223" Body="&lt;p&gt;How many machines for which CP/M was the primary operating system (so not counting the Commodore 128) ever shipped?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also be interested in knowing how many S-100 machines ever shipped. I get the impression the two are almost synonymous?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-04-30T05:25:23.457" Title="How many CP/M machines ever shipped?" Tags="&lt;history&gt;&lt;cp-m&gt;&lt;s-100&gt;" AnswerCount="0" CommentCount="11" ClosedDate="2019-06-13T10:57:43.573" ContentLicense="CC BY-SA 3.0" />
  <row Id="2807" PostTypeId="2" ParentId="2788" CreationDate="2017-04-30T08:05:16.780" Score="5" Body="&lt;p&gt;While not exactly using &quot;bitplane graphics&quot; in a strict sense (see @RossRidge's comment), the Sinclair QL used 3 bits/pixel in its &quot;hi&quot;-color mode (8 colors + a flash bit). I do suspect, however, that this was rather due to a &quot;design accident&quot; than done deliberately: They ran out of pins on the video ULA in the design process and couldn't get the 4th colour pin out to the DAC, thus ended up using the &quot;4th bit plane&quot; for a rather useless flash (blinking) mode that didn't need a separate ULA pin.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2017-04-30T08:05:16.780" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2808" PostTypeId="2" ParentId="2804" CreationDate="2017-04-30T12:38:01.970" Score="17" Body="&lt;p&gt;There are several reasons for the low performance of virtual memory. The implementation had a significant effect.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It keeps ALL of the contents of memory in the VM Storage file, plus however much extra you've set it to, so all memory writes are also to disk also, even if not all reads are. &lt;a href=&quot;https://www.reddit.com/r/VintageApple/comments/688hzy/why_did_mac_os_7_perform_poorly_with_virtual/dgwq0g7/&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Program design also affected this. Many memory-hungry programs developed before virtual memory were designed to cope with low-memory computers in a similar way to System 7.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Some applications, like Photoshop, kind of did their own via temp files [...]  In some cases you might have two writes contesting for resources. &lt;a href=&quot;https://www.reddit.com/r/VintageApple/comments/688hzy/why_did_mac_os_7_perform_poorly_with_virtual/dgxeacu/&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The processor and MMU (or lack thereof) significantly affected virtual memory's performance.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Some portion of the main processor was dedicated to maintaining the paging file on the HD. [...] System 7 was designed to run on those 68k Motorola processors [...] The Intel 386 on the other hand had paging file management built in. &lt;a href=&quot;https://www.reddit.com/r/retrocomputing/comments/688fk1/why_did_mac_os_7_perform_poorly_with_virtual/dgwp5ua/&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For the 68020 [the MMU] was a coprocessor that many machines like the MacII had sockets for. &lt;a href=&quot;https://www.reddit.com/r/retrocomputing/comments/688fk1/why_did_mac_os_7_perform_poorly_with_virtual/dgwtw9e/&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Presumably to ensure compatibility with older hardware, System 7 didn't use DMA for disk access.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Disk I/O on most Macs was done by using the CPU to do transfers [...] Not using DMA meant that any transfer of data between disk and memory for paging required the CPU to do all the work.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Computers that use DMA [could] run programs while the transfer ran, so [...] Windows machines felt faster with virtual memory. &lt;a href=&quot;https://www.reddit.com/r/retrocomputing/comments/688fk1/why_did_mac_os_7_perform_poorly_with_virtual/dh26qdz/&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, many performance with virtual memory were caused by incorrect configuration or use.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Defragment and optimize the hard drive. VM performance suffered greatly if this wasn't done. [...] If the OS and apps you needed to run required 4MB RAM, then you really should have at least 4MB RAM. [...] Set your VM page size to only 1MB more than your physical memory size.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;You'd see things &quot;perform poorly&quot; [...] when you were switching from one memory-hungry app to another memory-hungry app (e.g., PageMaker to Adobe Illustrator) and that performance hit would only last as long as the process of switching between the apps. [...] You got used to the workflow of doing as much work as you could in a single app and only switching to another app when there was something that you absolutely had to get done there [...] If you lived on a diet of &quot;low impact&quot; programs, application switch time was tolerable if not speedy. &lt;a href=&quot;https://www.reddit.com/r/retrocomputing/comments/688fk1/why_did_mac_os_7_perform_poorly_with_virtual/dgwxruz/&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;All of this information was sourced from &lt;a href=&quot;https://www.reddit.com/r/retrocomputing/&quot; rel=&quot;noreferrer&quot;&gt;/r/retrocomputing&lt;/a&gt; and &lt;a href=&quot;https://www.reddit.com/r/VintageApple/&quot; rel=&quot;noreferrer&quot;&gt;/r/VintageApple&lt;/a&gt;. If you found this information useful, please give credit where it is due and upvote the original comments.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-05-03T16:28:32.687" LastActivityDate="2017-05-03T16:28:32.687" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2809" PostTypeId="1" CreationDate="2017-04-30T14:52:02.737" Score="18" ViewCount="938" Body="&lt;p&gt;I was recently reading about the Amstrad CPC 472, which was a CPC 464 with an extra, unusable 8KB of RAM added to avoid Spanish import fees on computers with 64KB or less.&#xA;Did any other computers have features added solely to exploit loopholes in particular sales regulations? &lt;/p&gt;&#xA;" OwnerUserId="3776" LastEditorUserId="3776" LastEditDate="2017-05-02T07:51:25.653" LastActivityDate="2017-09-16T14:10:28.253" Title="Which computers had features added purely for tax reasons?" Tags="&lt;history&gt;&lt;memory&gt;&lt;cpc464&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2810" PostTypeId="1" CreationDate="2017-04-30T15:20:04.220" Score="4" ViewCount="447" Body="&lt;p&gt;How much did it cost in 1980 to buy a tape drive capable of backing up 5 megabytes of data? Both for the drive itself and per tape?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(If that exact data is unavailable, I'd be interested in something close, e.g. prices from a couple of years earlier, or storage within an order of magnitude of 5 megabytes.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-08-08T09:43:00.650" Title="Cost of tape backup in 1980" Tags="&lt;history&gt;&lt;magnetic-tape&gt;" AnswerCount="2" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="2811" PostTypeId="1" AcceptedAnswerId="2814" CreationDate="2017-04-30T15:21:59.130" Score="23" ViewCount="2984" Body="&lt;p&gt;The &lt;em&gt;physical&lt;/em&gt; system design of the Atari 800 was pretty radical, when compared to the 3 other &lt;em&gt;canonical&lt;/em&gt; home computer designs of the late-1970s: TRS-80 Model 1, PET, and Apple ][.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the photo of the Atari 800 main and CPU board shows, the main board was slotted, but not for the purpose of interfacing general peripherals and enhancements, like in the Apple ][ or later IBM PC. Rather, the Atari 800 had a very modular construction for which not only the CPU, but also all RAM, ROM, and firmware were added via cards. Of course, the 1977 trio were all built with an integrated motherboard that included CPU, RAM, and ROM instead of Atari's modular approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be the rationale for the Atari designers to take this radically different approach compared to the aforementioned competitor systems?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;strong&gt;Backplanes weren't new&lt;/strong&gt;, but the Atari 800 came out two years after other home computers had abandoned such a design. see above)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/k4nfJ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/k4nfJ.jpg&quot; alt=&quot;Atari Boards&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="276" LastEditDate="2017-05-02T15:04:17.517" LastActivityDate="2018-10-28T07:29:35.733" Title="Why did the Atari 800 designers choose such a radical system design?" Tags="&lt;hardware&gt;&lt;atari&gt;&lt;atari-800&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2812" PostTypeId="2" ParentId="2804" CreationDate="2017-04-30T16:36:37.490" Score="13" Body="&lt;p&gt;I would say poor performance was due to System 7's implementation, and the constraints needed to support existing applications/drivers/extensions. Looking through the documentation, it's not hard to see why performance could suffer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;http://web.archive.org/web/20031230010126/http://developer.apple.com:80/documentation/mac/Memory/Memory-152.html#HEADING152-0&quot; rel=&quot;noreferrer&quot;&gt;Inside Macintosh: Memory&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Virtual Memory Manager takes special steps to avoid double page faults caused by user code (that is, code that is not executed as the result of an exception). It defers all user code while the driver of the paging device is busy. In particular, the Virtual Memory Manager defers until a safe time the following types of code:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;VBL tasks&lt;/li&gt;&#xA;  &lt;li&gt;Slot-based VBL tasks&lt;/li&gt;&#xA;  &lt;li&gt;Time Manager tasks&lt;/li&gt;&#xA;  &lt;li&gt;I/O completion routines&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;Note&#xA;  Because these types of tasks may be deferred under virtual memory, &#xA;  any application or device driver that uses them to achieve real-time performance might be adversely affected by the operation of the Virtual Memory Manager.  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In other words, if the hard disk driver was busy, no user code could run. This would definitely add lag to callbacks that were previously rock-solid dependable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20040203092154/http://developer.apple.com/technotes/tn/tn1094.html&quot; rel=&quot;noreferrer&quot;&gt;Technote TN1094: Virtual Memory Application Compatibility&lt;/a&gt; is also interesting. The implementation was certainly improved on PPC Macs and later Mac OS versions, &lt;/p&gt;&#xA;" OwnerUserId="4987" LastActivityDate="2017-04-30T16:36:37.490" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2813" PostTypeId="1" AcceptedAnswerId="2816" CreationDate="2017-04-30T19:18:27.840" Score="7" ViewCount="678" Body="&lt;p&gt;I'm planning to buy a Z8018006PSC. A z180 CPU (which I found is compatible with the z80 and has some advantages, for instance, able to address up to 1MB of RAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm planning to use it together with a 3.3v FPGA to generate its clock (so it can be &quot;variable&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just want to know if I'm reading the documentation right. On the absolute maximum ratings it can be run from -0.3v to +7.0v. So I can drive directly with 3.3v? And the input ports have a tolerance of vcc + 0.3v, so at 3.3v i will be able to put up to 3.6v on any input port?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, it will not run stably at 6MHz, but something close to 1MHz~2MHz will be fine for my purposes.&lt;/p&gt;&#xA;" OwnerUserId="4787" LastEditorUserId="3623" LastEditDate="2017-07-19T02:31:24.470" LastActivityDate="2017-07-19T02:31:24.470" Title="Can I power a z180 with 3.3v" Tags="&lt;z80&gt;&lt;power&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="0" ClosedDate="2017-07-28T09:59:48.367" ContentLicense="CC BY-SA 3.0" />
  <row Id="2814" PostTypeId="2" ParentId="2811" CreationDate="2017-04-30T21:24:20.137" Score="29" Body="&lt;p&gt;The physical design of the Atari 800 &lt;em&gt;was&lt;/em&gt; radical, but not for reasons related to the aspects you highlight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As others have commented, using multiple boards for a system was pretty standard at the time. S-100 systems for example were based on a backplane, with system features implemented on multiple boards connected to that. (The Atari 400 and 800 were designed using a Cromemco S-100 system — I don’t know whether that had any direct impact though.) The Atari 800 has three main boards: the &lt;a href=&quot;http://www.pcworld.com/article/181421/inside_atari_800.html#slide15&quot; rel=&quot;noreferrer&quot;&gt;“motherboard”&lt;/a&gt; (containing POKEY, PIA, the memory decoder, and all the system connectors), the &lt;a href=&quot;http://www.pcworld.com/article/181421/inside_atari_800.html#slide16&quot; rel=&quot;noreferrer&quot;&gt;CPU board&lt;/a&gt; (containing the 6502, CTIA or GTIA, and ANTIC), and the power supply board. User-accessible boards (initially sold as cartridges) provide the ROM (“system personality”) and RAM (not firmware though — what we’d consider firmware nowadays was provided by the external devices themselves).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main drivers behind the design appear to have been:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;user-friendliness, which led to building an enclosed system with well-protected user-accessible parts, such that the user could upgrade the system without being exposed to such things as the power-supply;&lt;/li&gt;&#xA;&lt;li&gt;compliance with FCC requirements, in particular because of the inclusion of an RF modulator — this is the reason why the system is so heavily shielded.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Both of these were radical departures from the other personal computers of the time; the first in particular had far-reaching consequences. Instead of opening up the whole system to access expansion cards, Atari 800 users could open the first flap to connect cartridges containing software, the second flap to change their system’s ROM or RAM, and anything else was connected to the joystick or SIO ports. To keep all this safe for users, the flaps had interlocks which ensured that the system was powered down when the flaps were opened; unless the users went out of their way to circumvent them (well, it wasn’t that hard really, but it couldn’t happen by accident), there was no risk of connecting or disconnecting a cartridge while the system was powered up. To keep all this easy to use, the designers had to come up with some rather novel ideas: the SIO bus in particular was far ahead of its time, with device-supplied drivers loaded automatically (the descendant of SIO is USB, amazingly enough).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coming back to the multi-board design, it does have some nice features, which might explain why it was kept at least for the initial system. Having a separate power supply board means that the main board and power supply board can be designed separately, by experts in the respective fields — these different kinds of boards require different kinds of expertise to design well. It also means that the main board can be bread-board designed without too much regard for the power supply; Goldberg and Vendel’s &lt;em&gt;Business is Fun&lt;/em&gt; shows that bread-boards were used extensively. Keeping the CPU, TIA and ANTIC on a separate board might have been relevant because that whole section of the computers took a while to settle; the same book shows that the designers were still contemplating different CPUs late in the system’s development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One &lt;em&gt;very&lt;/em&gt; nice benefit of using different boards like this, is that the CPU and RAM boards could be re-used as-is for the Atari 400 (which was re-designed, or perhaps just re-specified and designed, in a hurry not long before launch). The Atari 400 shares the same design, with a separate power supply board, main board (which includes the ROMs), and separate CPU and RAM boards (neither of which are supposed to be user-serviceable in the 400).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another nice benefit is that the base memory configuration could easily be changed to take advantage of price variations in the market. The Atari 800 was supposed to ship with 8K of RAM (hence its name — the Atari 400 was planned with 4K), but as RAM prices fell, its base configuration improved progressively until it ended up shipping as standard with 48K a few years later. This &lt;em&gt;would&lt;/em&gt; be possible with socketed memory chips on a big motherboard, but that approach is a little more restrictive. The Atari RAM boards are in some ways like early SIMMs, and allowed Atari to increase chip density without changing the motherboard (the boards were available in 8K and 16K variants, with the same number of chips).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The design wasn’t without its flaws of course. The initial cartridge design used for ROM and RAM made for poor airflow and created thermal problems, so the metal shielding around the cartridges was removed in later models, and the second flap’s plastic latches were replaced by screws. For completeness’ sake it’s worth noting that expansion wasn’t limited to the external ports entirely; the last RAM slot could be used for other kinds of expansion boards.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.atarimuseum.com/computers/8BITS/400800/ATARI800/A800.html&quot; rel=&quot;noreferrer&quot;&gt;Atari Museum’s page on the Atari 800&lt;/a&gt;, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_8-bit_family#The_early_machines:_400_and_800&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia entry&lt;/a&gt;, and the above-mentioned &lt;em&gt;Atari Inc.: Business is Fun&lt;/em&gt; all give further background on the design of these systems.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-05-02T11:44:40.740" LastActivityDate="2017-05-02T11:44:40.740" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2815" PostTypeId="2" ParentId="2813" CreationDate="2017-05-01T02:32:45.507" Score="4" Body="&lt;p&gt;Absolute maximum ratings are the minimum and maximum voltage the device can withstand without damaging. They aren't the minimum and maximum voltage the device is operative at. Those are the &quot;recommended supply voltage&quot;. Beyond these, the manufacturer cannot assure the functionality of the device although as long as the supply voltage is within these absolute maximum ratings, the chip won't be damaged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is a NMOS device, you won't probably be able to make it run properly at 3.3V . On the other hand, I've been able to power a CMOS Z80 rated at 20MHz at 3.3V and used succesfully with a FPGA clocking the CPU at 3.5 MHz. CMOS devices seem to be more forgiving about supplies as long as you slow down the clock if the supply voltage is lower than the recommended settings.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2017-05-01T02:38:58.423" LastActivityDate="2017-05-01T02:38:58.423" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2816" PostTypeId="2" ParentId="2813" CreationDate="2017-05-01T03:04:33.490" Score="7" Body="&lt;p&gt;This data sheet &lt;a href=&quot;http://www.datasheetspdf.com/datasheet/Z8018006PSC.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.datasheetspdf.com/datasheet/Z8018006PSC.html&lt;/a&gt; (page 189 of the PDF download) gives the DC operating conditions for a supply of Vcc = 3.3V plus or minus 10%, as well as 5.0V plus or minus 10% (on the preceding pages). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The AC characteristics (page 193) are also specified at both 3.3V and 5V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a quick reading, the maximum clock frequency at 3.3V seems to be 20MHz, compared with 33MHz at 5V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; as @mcleod_ideafix said in a comment, 3.3V operation is only supported for the Z8L180 version of the chip, not the Z80180 version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if the OP wants to use 3.3V operation and hasn't ordered the part yet, ordering the correct version would be a more reliable option than hoping the 5V version will work at reduced voltage and/or reduced clock speed.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2017-05-03T01:34:09.480" LastActivityDate="2017-05-03T01:34:09.480" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2817" PostTypeId="2" ParentId="2781" CreationDate="2017-05-01T14:50:10.907" Score="2" Body="&lt;p&gt;I just answered a similar question of yours on stackoverflow.com which may help: &lt;a href=&quot;https://stackoverflow.com/questions/43573269/how-does-a-6502-processor-transfer-data-between-rom-and-ram&quot;&gt;https://stackoverflow.com/questions/43573269/how-does-a-6502-processor-transfer-data-between-rom-and-ram&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not quite clear what you mean by &quot;deals with RAM operations&quot;. Perhaps you could clarify?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, reverse engineering is a long process. I am working on deciphering a games cartridge I wrote 35 years ago and am finding it difficult. Understanding what the code does is one thing but understanding why it does it is far more complicated and requires a good understanding of the console's hardware and the logical operation of the game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Getting back to your real question though, somewhere in the code it must be accessing the ROM (and again I refer you to my response on stackoverflow.com). What I would do would be to search the disassembled code for any reference to the ROM area. So, for example if your ROM starts at $C000, run Find commands from your text editor for $C, $D, $E, $F. Hopefully that will locate something that might get you started.&lt;/p&gt;&#xA;" OwnerUserId="4991" LastActivityDate="2017-05-01T14:50:10.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2818" PostTypeId="2" ParentId="1959" CreationDate="2017-05-01T20:32:07.850" Score="6" Body="&lt;p&gt;Although a VCR would have worked, I couldn't get my hands on one for free and I wanted to avoid the amount of space it took up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ended up grabbing some mystery units they were throwing away at work. At a glance I was optimistic they'd do what I needed, and I turned out to be right. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I grabbed a 232-MTA S12 Mono TV Tuner box made by Contemporary Research. It's about 6&quot; x 3&quot; x 2&quot; and has channel changer buttons on the front with a 3 digit analog display to display the channel. I leave that on 3. The back output consists of a serial IO port (RS-232), probably for telnet configs or something), and a 12 V 350 mA dc power input with positive right polarity. Model appears to be 331-5017-112. It works great with my 2600 and it's not obvious to me that it's running through there instead of into the back of a TV (e.g. no extra interference). I use a tiny RF cable to Coax adapter I bought from eBay many years ago for $3 that seem to work pretty well in conjunction with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also grabbed a 232-STS Stereo TV Tuner with S-Video output and closed captioning with what looks like IR input and is more or less visually identical. This one outputs in both S-Video and gold-plated RCA video instead of just rca like the mono device, and 475 mA/12 V instead of 350. The audio out is a five pin connector. I prefer the standard RCA out so I went with the mono device for now and have not tested the STS, although I would expect it to work just as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall, I'm very happy with my setup. I sure I'll spend most of my time using a Lakka box and emulating 2600 games, but I'll keep this around for show for certain. Pretty cool to see something working on an HD TV that was built 40 years ago. &lt;/p&gt;&#xA;" OwnerUserId="4123" LastEditorUserId="4123" LastEditDate="2017-05-01T20:58:55.483" LastActivityDate="2017-05-01T20:58:55.483" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2819" PostTypeId="2" ParentId="2804" CreationDate="2017-05-02T02:56:03.217" Score="4" Body="&lt;p&gt;with system 7, one had to have an '030 or better cpu (or an 020 with PMMU, which was not very common) - Mac II was most at risk here, and then, some did drop in a PMMU, but many jumped for the IIx upgrade instead (or IIfx later on).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rule of thumb back in the day was VM was half of installed RAM with M68K.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It didn't perform &quot;poorly&quot; - it was fine enough - the challenge here, is that some apps, like Photoshop, did their own scheme, which could interfere/impact System 7 VM...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Connectix did some fun stuff with RamDoubler/Speed Doubler - and recall, they also did cool stuff like Mode32 (for legacy mac with 32-bit dirty ROM's) - and Virtual for System 6... with the IIsi, Optima which opened up addressable memory, and Maxima, which was a disk backed RAM disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where things did get a bit odd - the PPC migration - and legacy M68K code vs. native PPC code - but once the PCI Macs showed up, that was less of an issue (painful though the transition was) and later versions of Classic...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Old memories...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And someone had mentioned about disk-thrashing...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HD-SC Setup, and the Apple drivers back in the day, if I recall correctly, where sync - and blocking on I/O (and HD-SC Setup only supported Apple ROM'd drive)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FWB Hard Disk Toolkit - 3rd party - had Async I/O - and non-blocking at that - so folks working creative production, that was the hot item back in the late M68K days, as they also supported generic SCSI drives...&lt;/p&gt;&#xA;" OwnerUserId="4997" LastEditorUserId="278" LastEditDate="2017-05-02T16:59:16.387" LastActivityDate="2017-05-02T16:59:16.387" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2821" PostTypeId="2" ParentId="2804" CreationDate="2017-05-02T10:10:56.390" Score="3" Body="&lt;p&gt;Some comments on virtual memory and paging in general:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Virtual memory is a means by which it can be made to appear that the computer has more memory than it actually does. The way it is implemented is with a page table. The memory is divided up into fixed sized pages (on 32 bit microprocessors, pages were always 4096 bytes in size). Memory addresses were divided into two parts: page number being the top 20 bits (in a 32 bit address architecture with a 4kbyte page size) and the address in the page being the lower 12 bits. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The processor maintains a page table indexed by virtual page number that contains the physical page number and some other information such as &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;is the page dirty i.e. has it been written to since it was last flushed to disk, &lt;/li&gt;&#xA;&lt;li&gt;is it valid i.e. is the page actually loaded into physical RAM at all&lt;/li&gt;&#xA;&lt;li&gt;some protection information e.g. is the CPU allowed to write to the page (or read from it, for that matter).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Every time the processor wants to access the RAM, it first has to go to the page table (which is itself in RAM) to find the physical page for the virtual page in the address. Thus you double the number of memory accesses required just to read a word from memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's the first performance hit. By turning on virtual memory, you double the number of RAM accesses required. Not only that, if your memory management unit was in a separate coprocessor (as in the 68020) there is a performance hit just for the communication between the two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In mainframe and minicomputers, this performance hit was mitigated with fancy hardware which did sophisticated caching - not so much on the 80386 and 68020 and 68030.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A second problem: you needed a paging table. If you wanted to allow processes to map the full 4Gb of virtual memory, your paging table needed 2&lt;sup&gt;20&lt;/sup&gt; entries of 32 bits each. That is 4Mb. If your computer has 4Mb then all the physical RAM is being used just for the page table. The problem of the page table eating RAM is the main reason why Microsoft's recommendation to keep the paging file at no more than twice the size of the physical RAM and the similar restriction for System 7 was probably for the same reason. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note also that, if you want each process to have the illusion of having a unique address space, you actually need a page table per process and the page table needs to be swapped on each context switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's talk about accessing pages. When the CPU wants to look at the content of a virtual address, assuming it is not cached, it looks up the virtual page in the page table and if the page table says the virtual page is mapped to a physical page, a new address is constructed of the physical page and the offset within the page and the data is fetched. If the virtual page is not mapped to a physical page, then depending on wht kind of data is stored in the virtual page, one of several things happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, the page is not there so the process cannot continue. A trap called a page fault is generated and the OS suspends the process, then it tries to fix the problem by allocating a new physical page and:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if the page comes from the running program, the physical page is loaded from the program's executable file on disk.&lt;/li&gt;&#xA;&lt;li&gt;if the page is newly allocated data e,g, from a malloc request, the physical page is filled with zeroes&lt;/li&gt;&#xA;&lt;li&gt;if the page has previously been swapped out, the physical page is loaded from the paging file.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In all of these cases there is a performance hit: the process has to wait for either a page to be zeroed out or 4kb of data to be loaded from disk. Obviously, in the latter case, if either the paging file or the program is fragmented, it's going to take longer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What if there aren't any physical pages free to allocate to the process? In this case, a page needs to be thrown away. But which one to choose? The optimal method is to throw away a page you are not going to use again or to throw away a page that you are not going to need for a very long time. Unfortunately this requires clairvoyance so expensive mainframes at the time of the 80386 and 68030 used an algorithm called LRU which stands for &quot;least recently used&quot; which gives quite a good approximation to the clairvoyant algorithm. In LRU you throw away the page that has not been used for the longest time. This requires expensive hardware support, namely a time stamp for each physical page which is updated every time it is used. Microprocessors had to use more complicated and less satisfactory algorithms because they didn't have the time stamp support. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the answers to this question suggest that System 7 always wrote pages to the paging file when they were dirty (i.e. the data in them was modified).  This is important because pages that are not dirty are much cheaper to throw out because you don't have to write them to the page file first. However, that makes the assumption that all pages will be thrown out at some point. If you have loads of RAM you incur the hit of writing dirty pages to disk even if no pages are ever going to need to be swapped out. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in summary, virtual memory is a performance hit because&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;each memory access actually needs two memory accesses&lt;/li&gt;&#xA;&lt;li&gt;the page table (or tables) itself uses up RAM&lt;/li&gt;&#xA;&lt;li&gt;if a virtual page is not allocated a physical page, you have to wait for the OS to allocate one&lt;/li&gt;&#xA;&lt;li&gt;retrieving pages from disk and writing them to disk takes a long time&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;We still use virtual memory because&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;each process can appear to have the entire address space to itself which greatly simplifies programming&lt;/li&gt;&#xA;&lt;li&gt;paging eliminates RAM fragmentation from the point of view of the operating system&lt;/li&gt;&#xA;&lt;li&gt;you need less RAM than the sum of the memory requirements of all running processes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With respect to the page table and CPU cache that traal mentioned, CPU cache does indeed mitigate the problem of multiple memory accesses somewhat but the 68030 only had a 256 byte cache. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, my description of page tables was &lt;s&gt;slightly&lt;/s&gt;heavily simplified: both the 386 and the 68030 had two level page tables. On the 386 for example, there was first a look up in the page directory which was a 4k block containing pointers to (up to) 1024 page tables, each of which was a 4k table containing 1024 page entries. Thus (ignoring any caching), referencing a memory address required three accesses to memory, not two as previously stated. The 68030 used a similar but slightly more complex scheme, you could vary the size of the individual pages.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2017-05-03T08:19:46.287" LastActivityDate="2017-05-03T08:19:46.287" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2822" PostTypeId="1" AcceptedAnswerId="2825" CreationDate="2017-05-02T13:18:02.520" Score="12" ViewCount="1893" Body="&lt;p&gt;I'm trying to figure out whether computing workloads, particularly those related to science and engineering, have historically been limited by memory or CPU. (By the former, I mean not memory access speed, but memory &lt;em&gt;amount&lt;/em&gt;; even if it takes multiple clock cycles to access RAM, that's still orders of magnitude faster than having to go to disk.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In theory, CPU speed has increased only slightly faster than memory amount over the decades, from 8-bit computers with kilobytes of memory and maybe a kiloflop of CPU, to modern computers with gigabytes of memory and gigaflops to teraflops. Many science and engineering workloads use algorithms significantly superlinear in problem size, so from that perspective one would expect a transition from memory-limited early on to CPU-limited later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anecdotally, my experience supports that; in the old days, CPU speed was actually not important because you would always run out of memory first, but in more recent years you sometimes get to wait for the CPU. But there are many workloads with which I have no experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: is it actually true that workloads prior to recent years were often limited by memory rather than CPU? I would be interested in anything from other people's anecdotal experiences, to references to scientific workloads running out of memory, efforts put into obtaining more memory, or ideally if anyone has actually run a full study on this question.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-05-03T19:47:36.337" Title="Memory-limited workloads" Tags="&lt;history&gt;&lt;memory&gt;&lt;performance&gt;" AnswerCount="6" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2823" PostTypeId="2" ParentId="2822" CreationDate="2017-05-02T13:45:18.037" Score="4" Body="&lt;p&gt;And I just serendipitously stumbled across a discussion thread at &lt;a href=&quot;https://news.ycombinator.com/item?id=14243303&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://news.ycombinator.com/item?id=14243303&lt;/a&gt; with some relevant anecdotes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... had a Quadra 950 with 128MB of RAM, which required some pretty exotic SIMMs. That would be a pretty expensive machine in today's money. This was for handling Adobe Illustrator files with large embedded images.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Designers that did print-quality photography, especially posters, have always been crying out for more memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I worked at a Forestrey Commission Research Station here in the UK in the 90s. One of the mathematicians was running an environmental model on a Sun workstation and it was running out of RAM and swapping and was going to take 2 days to run at that rate...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;p&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I blew a thousand dollars (Canadian) to upgrade my new Mac Plus to 4 megabytes and the sales guy asked --slightly tongue in cheek but only slightly-- if I was doing CAD for NASA.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="278" LastEditDate="2017-05-03T16:04:53.290" LastActivityDate="2017-05-03T16:04:53.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2824" PostTypeId="2" ParentId="2822" CreationDate="2017-05-02T13:47:15.143" Score="7" Body="&lt;p&gt;As you suggest, you always ran out of memory before you ran out of processing power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the 1980s and into the 90s, memory was significantly more expensive.  Not only in absolute terms but also in relative terms to CPU prices.  Even hard drives were pricey.  I remember the first hard drive I bought for a microcomputer cost me £7,000 for a massive 5Mb - that was 1983 or 1984.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pretty much all the applications I was involved in writing in that time were heavily memory constrained.  For example, I wrote a compiler for the PDP-11 in 1987 that used memory overlays to page each pass of the compiler into memory in turn, while keeping just a supervisory package in memory continuously.  Running a compilation could take a couple of hours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The company I worked for at the time explored the possibility of buying a Quantel Paintbox to do some image analysis.  This was based upon a PDP-11 with multiple parallel framestores.  This beast had more RAM than I had ever seen before but the cost was far beyond the company's budget.  However, I managed to get a system working to meet the requirements on a BBC Micro.  This put the software in Sideways ROMs that shared the load in order to keep the image data in RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, you asked for anecdotal evidence, in my experience we were always memory constrained.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-05-02T13:58:27.263" LastActivityDate="2017-05-02T13:58:27.263" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2825" PostTypeId="2" ParentId="2822" CreationDate="2017-05-02T15:03:27.177" Score="15" Body="&lt;p&gt;Naïve programming was often limited by memory speed even for the fastest mainframes available in the 1980s. For example on an IBM S/370 system, the maximum amount of memory available to a single user program could be limited to about 9MB out of an address space of 16MB (the other 7 being reserved for the operating system!) compared with hundreds of MB of disk, or an effectively unlimited amount of data on tape. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution was not to write naïve programs. The basic techniques were exactly the same as those now used, at a different scale, to avoid &quot;cache misses&quot; etc - for example to organize the data storage so that the maximum number of CPU operations could be done on a subset of the data, before exchanging it for the next subset. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes, the computer operators who did the tape-swapping were on the critical path for computational efficiency. I remember a benchmark being run by Cray Research for an oil exploration company. The company asked if they could provide their own tape operator, who was familiar with their tape volume labelling systems, etc, which was agreed. On the benchmarking day, the visitors arrived, installed their software, and checked it out on a small problem. The Cray guys then asked them &quot;so, where are your tapes for the benchmark?&quot; The answer was &quot;In the 20-ton truck that's in your visitors' car-park - can we move it a bit closer to the machine room, please?&quot; A one-hour benchmark run needed over 100 manual tape changes! Rather than risk forgetting a critical tape reel , they had just brought their entire tape library with them.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2017-05-02T15:03:27.177" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2826" PostTypeId="2" ParentId="2822" CreationDate="2017-05-02T16:52:19.480" Score="14" Body="&lt;p&gt;Memory hasn't always been the limitation. IBM identified (and in many ways, encouraged the adoption of) two kinds of computing: scientific and data processing. Data processing computers (such as the IBM &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_702&quot; rel=&quot;noreferrer&quot;&gt;702&lt;/a&gt; from 1953) had relatively modest processor power, but enough memory to hold all the parameters for the day's business transactions to ensure that processing could be finished before the next day's work was needed. Compare this to the scientific machines (such as 1954's &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_704&quot; rel=&quot;noreferrer&quot;&gt;704&lt;/a&gt;) that had tiny amounts of memory but could crunch floating point numbers quickly for numerical analysis. IBM's business and scientific machines ran completely different instruction sets, and evolved into two completely separate computer cultures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you asked for anecdotes, my father was once (briefly) accused of breaking a utility's billing mainframe. Dad was an analyst for &lt;a href=&quot;https://en.wikipedia.org/wiki/International_Computers_and_Tabulators&quot; rel=&quot;noreferrer&quot;&gt;ICT&lt;/a&gt; in the early 1960s, and his team was asked to spec and write a network flow analysis for the Scottish Gas Board's pipes. The data (which would likely fit on a single screen of spreadsheet today) was too big to analyze in any of ICT's scientific machines, so they had to write it for the utility's billing computer. Even with the “large” (a few kilo-words) amount of memory in the billing machine, the task had to be broken into many processing chunks, with each chunk dumping its data and chaining in the next task. The main analysis chunk was estimated to &lt;em&gt;just&lt;/em&gt; fit in the processing time that the Billing Department had grudgingly allowed the pipeline boffins on the commercial machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may not remember, but in the days of mag tape drives (✇✇), computer data processing activity correlated with the tapes spinning now and again. Each data record was read, processed and written, and the tapes advanced a bit every time. A working computer had mag tapes that moved; &lt;em&gt;everyone&lt;/em&gt; knew that. Even poets knew it: Brautigan &lt;a href=&quot;https://allpoetry.com/All-Watched-Over-By-Machines-Of-Loving-Grace&quot; rel=&quot;noreferrer&quot;&gt;wrote&lt;/a&gt; of a techno-pastoral utopia “&lt;em&gt;where deer stroll peacefully / past computers / as if they were flowers / with spinning blossoms&lt;/em&gt;”. So spinning tapes = working computer = happy operator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dad's network analysis job had to be run at an unpleasant hour of the night, after the day's billing had been run but before the next morning's readings started to come in. The job got set up, and the accounting operator approved of the first stages: the tapes kept moving, so the computer was working. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then came the main analysis. Once the tape drives had loaded all the data into core, the slow processor in the accounts machine started its work. The tapes stopped … and stayed stopped. After a couple of minutes, the operator started to fret, asking if it was supposed to do this. Despite positive assurances, his fretting increased as the minutes ticked by with no tape activity. Apparently the operator was almost screaming, threatening to have my dad escorted from the building and his company billed for the whole computer that they'd “broken”, when &lt;em&gt;a tape moved&lt;/em&gt;! The results spooled to tape from core, and the operator calmed down a bit (as did my dad, who was apparently beginning to have doubts of his own.) I don't know how long the job took to run — probably less than half an hour — but it certainly pushed that computer operator's experience well out of the comfort zone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally, I've also experienced processor limitations (making &lt;a href=&quot;http://mathworld.wolfram.com/JuliaSet.html&quot; rel=&quot;noreferrer&quot;&gt;Julia Set&lt;/a&gt; animations on an Amiga A500 in the early 1990s, the first time I had to let a computer run all night) and I/O bandwidth bottlenecks (ripping &gt; 1000 CDs on two computers and four CD-ROM drives: it took a couple of weeks). But none have resulted in threats, so far at least.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-05-02T16:52:19.480" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2827" PostTypeId="2" ParentId="2822" CreationDate="2017-05-02T17:07:55.737" Score="5" Body="&lt;p&gt;In the data compression domain, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform&quot; rel=&quot;noreferrer&quot;&gt;Burrows-Wheeler transform&lt;/a&gt; was invented in 1983, but kept unpublished until 1994, likely because of its memory requirements. Without at least several Mb of RAM, it is a mere curiosity, its usefulness as a compression algorithm cannot be demonstrated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To achieve a compression rate comparable to that of a competing algorithm, e.g. ZIP, the buffer size for the BWT should be of the order of hundreds of kilobytes, and the supporting data structures require at least one integer per byte. The algorithm involves sorting, therefore the whole data segment must be in RAM to avoid thrashing. &lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-05-02T17:32:29.097" LastActivityDate="2017-05-02T17:32:29.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2828" PostTypeId="1" AcceptedAnswerId="2829" CreationDate="2017-05-02T18:52:23.940" Score="20" ViewCount="4695" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_8-bit_family&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;, the Atari 8 bit series had a 6502 running at ~1.8 MHz.&lt;br&gt;&#xA;Why was the clock speed of the 6510 for the C64, which was designed a couple of years later, considerable slower?&lt;br&gt;&#xA;Was the main drive to save costs (e.g. lower frequency results in cheaper other components; RAM etc.) ?&lt;/p&gt;&#xA;" OwnerUserId="4176" LastEditorUserId="276" LastEditDate="2017-05-03T08:57:06.687" LastActivityDate="2020-01-12T17:01:33.587" Title="6510 clock rate of C64: Why was it considerably slower than the 6502 of the Atari 800?" Tags="&lt;commodore-64&gt;&lt;6502&gt;&lt;atari-800&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2829" PostTypeId="2" ParentId="2828" CreationDate="2017-05-02T20:07:42.680" Score="18" Body="&lt;p&gt;Somewhat of a guess:&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C64 always interleaved CPU and graphics RAM access (with additional graphics cycles if necessary), effectively accessing RAM at 2 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Judging from the ANTIC &lt;a href=&quot;http://atariage.com/forums/uploads/monthly_05_2015/post-15480-0-78211000-1432732591.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Timing Diagram&lt;/a&gt;, the ANTIC just stole CPU cycles whenever it needed them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in both cases you have a RAM access of about 2 MHz, which seemed to have been the limiting factor. So in fact the C64 is not &quot;slower&quot;, it's just the cycle distribution that's different.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="15994" LastEditDate="2020-01-12T17:01:33.587" LastActivityDate="2020-01-12T17:01:33.587" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="2830" PostTypeId="2" ParentId="605" CreationDate="2017-05-03T09:37:23.800" Score="12" Body="&lt;p&gt;Half a year ago, I've started a M680x0 port of LLVM. It is still at an early stage, but currently it is able to emit linkable/relocatable (no tls) object files that can be linked with GNU ld against glibc or newlib. ISA is limited to M68000 but is easily extensible. Also C++ support is rather questionable but if you are familiar with LLVM you can add it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If interested you can check it out here: &lt;a href=&quot;https://github.com/M680x0&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/M680x0&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5013" LastEditorUserId="5013" LastEditDate="2017-05-04T03:46:44.460" LastActivityDate="2017-05-04T03:46:44.460" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2831" PostTypeId="1" AcceptedAnswerId="2832" CreationDate="2017-05-03T15:32:21.577" Score="18" ViewCount="2211" Body="&lt;p&gt;I've read in the past that it was possible to overcome the 8 sprites per scanline on the Amiga (OCS) using the copper list.  However, I can't seem to find any actual references to what may have used this trick (any games or demos).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this actually possible?  I would imagine that the second reuse of the same sprite would need some space to be reused again.  Meaning, it couldn't be put side-by-side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, was this technique used in games?  What were the general limitations of such a trick? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-05-03T18:27:42.390" Title="Was it possible to get more than 8 sprites per scanline on an Amiga with the copper list?" Tags="&lt;amiga&gt;&lt;sprite&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2832" PostTypeId="2" ParentId="2831" CreationDate="2017-05-03T17:28:10.567" Score="17" Body="&lt;p&gt;It definitely was possible, as demonstrated by Parasol Stars, which &quot;&lt;a href=&quot;http://codetapper.com/amiga/sprite-tricks/parasol-stars/&quot; rel=&quot;noreferrer&quot;&gt;only uses a single sprite to create the score panel at the top of the screen!&lt;/a&gt;&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That article has a more detailed discussion of exactly that title but it sounds to be as simple as racing the beam, adjusting the sprite position continually to push it backwards beyond the location currently reached.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: the &lt;a href=&quot;http://codetapper.com/amiga/sprite-tricks/&quot; rel=&quot;noreferrer&quot;&gt;sprite tricks section of that same site&lt;/a&gt; gives a whole bunch of other examples with copper lists, including these four that all repeat sprites on the same line:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://codetapper.com/amiga/sprite-tricks/videokid/&quot; rel=&quot;noreferrer&quot;&gt;Videokid&lt;/a&gt;: Programmer Stuart Cook enhanced the Amiga version by using 6 sprites multiplexed across the screen to create a full screen scrolling background parallax layer;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://codetapper.com/amiga/sprite-tricks/r-type-2/&quot; rel=&quot;noreferrer&quot;&gt;R-Type 2&lt;/a&gt;: 8 sprites to create a 64 pixel wide repeating pattern for the backgrounds on most levels. The 8 sprites are repositioned multiple times as the display is rendered to show 18 sprites for a 288 pixel wide screen;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://codetapper.com/amiga/sprite-tricks/jim-power/&quot; rel=&quot;noreferrer&quot;&gt;Jim Power&lt;/a&gt;: 2 sprites are displayed then repositioned horizontally right across the screen to create the colourful static background;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://codetapper.com/amiga/sprite-tricks/risky-woods/&quot; rel=&quot;noreferrer&quot;&gt;Risky Woods&lt;/a&gt;: The 16-colour background layer was created by using all 8 hardware sprites and repositioning them across the screen. The same 64 pixel wide graphics are repeated across the entire play area.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-05-03T18:27:42.390" LastActivityDate="2017-05-03T18:27:42.390" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2833" PostTypeId="1" CreationDate="2017-05-03T19:20:39.167" Score="6" ViewCount="1847" Body="&lt;p&gt;I've got an atari 800 XL that is broken - when I power on, there's no reaction. It seems there is at least something sent to display, as TV detects a signal, and turns full black.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chips are soldered in, not socketed, so I cannot remove and swap them with working ones (And I do not have any spares anyway, so that kind of diagnosis is impossible in my case.) There are no visibly broken parts, capacitors are not bulging, and no IC's turn hot, so there are no obvious faults at play there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do however have a multimeter and logic analyser (sadly, I do not have an oscilloscope), but no knowledge as to what should I check, what voltages should be at which points, and what signals chips send on which pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any sort of guide as to what to check in such case, or anybody with the know-how can please share the knowledge?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(If that changes things, there's a memory mod installed that I cannot, and won't even attempt to remove)&lt;/p&gt;&#xA;" OwnerUserId="3651" LastActivityDate="2018-08-07T18:36:49.423" Title="Atari 800XL, black screen on power on - how to diagnose the problem?" Tags="&lt;atari&gt;&lt;display&gt;&lt;atari-800&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2834" PostTypeId="2" ParentId="2822" CreationDate="2017-05-03T19:47:36.337" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm trying to figure out whether computing workloads, particularly&#xA;  those related to science and engineering, have historically been&#xA;  limited by memory or CPU.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Computing workloads limited &lt;strong&gt;in what aspect?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I'm going to assume you mean &lt;strong&gt;limited in accuracy&lt;/strong&gt;, and &lt;strong&gt;limited in speed&lt;/strong&gt;, since any other type of limitation is going to prevent the workload from running at all.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Large simulations are today very much dependent upon wired RAM. At my place of work, many types of physics and electronics simulations take &quot;as much RAM as you can fit on the board&quot;. I frequently see applications that demand up to 64 GB per simulation thread; with others recommending 512 GB for faster processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The common thread for both RAM-limited accuracy and RAM-limited speed, across multiple different types of simulation, is &lt;strong&gt;recursion&lt;/strong&gt;; and this isn't even a &lt;em&gt;historical&lt;/em&gt; hypothetical situation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, the underlying algorithms are &lt;strong&gt;massively recursive&lt;/strong&gt;. The limits of available RAM place a limit on the &lt;strong&gt;depth of recursion&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same is true of historical computing, since the science isn't new, and the algorithms working on those models have not changed much, except in the depth of recursion available.&lt;/p&gt;&#xA;" OwnerUserId="5018" LastActivityDate="2017-05-03T19:47:36.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2835" PostTypeId="2" ParentId="2762" CreationDate="2017-05-03T20:26:04.493" Score="4" Body="&lt;p&gt;Expanding on the comment made by @pipe:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most if not all batteries originally used on the various Amigas and contemporary peripherals are rechargable NiCd (Nickel Cadmium) cells which are prone to leak.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the battery is a common type, there is likely a drop-in replacement NiMH (Nickel Metal Hydride) battery which is rechargable and far less likely to leak, while allowing you to retain use of your existing RTC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One can also replace the battery with a holder which will accept a Li-ion (Lithium Ion) battery akin to the ones used by mainstream PCs which are even less likely to leak.  However, special care must be taken to prevent the motherboard from trying to charge the battery as it isn't rechargable.  Usually this means cutting a circuit trace and adding a Germanium diode to the circuit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously these options require the use of a soldering iron.&lt;/p&gt;&#xA;" OwnerUserId="4822" LastEditorUserId="4822" LastEditDate="2017-05-04T14:07:34.243" LastActivityDate="2017-05-04T14:07:34.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2836" PostTypeId="2" ParentId="605" CreationDate="2017-05-04T04:58:18.693" Score="5" Body="&lt;p&gt;Take a look at &lt;a href=&quot;https://github.com/bebbo/amiga-gcc&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/bebbo/amiga-gcc&lt;/a&gt; which are GCC 6.5 cross-compiler toolchains for Windows, Linux, and Mac OS X targeting AmigaOS 3. There's an ongoing discussion about it &lt;a href=&quot;http://eab.abime.net/showthread.php?t=85474&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Thanks for the update, @bebbo!&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-04-23T19:41:08.203" LastActivityDate="2019-04-23T19:41:08.203" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2837" PostTypeId="1" AcceptedAnswerId="2854" CreationDate="2017-05-04T17:46:10.707" Score="8" ViewCount="219" Body="&lt;p&gt;My Grandparents computers are connected to each other via an ethernet cable, and communicate via AppleTalk. One of the computers is an iMac G3 with Mac OS 8 and the other is a &quot;SuperMac&quot; from the Apple clone era with Mac OS 7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They have recently either forgot the password they set up, or the hard drive has become corrupted in the exact location of the password. Based on their -- I'm talking computers here -- age, I'm completely will accept either answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem I'm having is that I can't find any documentation on resetting the password or removing it without first knowing the original password.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help on this would be immensely appreciated.&lt;/p&gt;&#xA;" OwnerUserId="5025" LastActivityDate="2017-05-07T11:31:39.767" Title="How to disable existing, unknown, password from AppleTalk on MacOS 7/8?" Tags="&lt;mac-os-classic&gt;&lt;appletalk&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2838" PostTypeId="1" CreationDate="2017-05-04T19:41:24.497" Score="12" ViewCount="338" Body="&lt;p&gt;There is some info over the net regarding 'some i8080 bugs were fixed in i8080a', but the exact bugs and differences are not usually disclosed. So, what is the exact difference between i8080 and i8080a?&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2017-05-07T19:06:48.460" Title="What is the difference between i8080 and i8080a?" Tags="&lt;8080&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2839" PostTypeId="2" ParentId="2833" CreationDate="2017-05-04T20:38:50.440" Score="4" Body="&lt;p&gt;You mentioned in a comment that you are checking the field service manual.  Which is good.  That should give you some indications as to which pins of each chip (or the main ones) are VCC, GND, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few things to check are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Find the voltage regulator on the motherboard.  The power supply is more than likely going to be stepped down and sent through a voltage regulator.  Check the power on it to make sure the board is getting a clean supply.  I don't know if the 800XL has AC power or not (like the C64 does).  But check too if it does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Black screen could be a sign of bad RAM.  Locate each RAM IC and check the voltages against what the datasheets say they should be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) You mentioned you have a logic analyzer.  You should be able to probe the data pins on the CPU and the address pins.  They should show a LOT of activity.  A data pin on the CPU that is solid is a sign the CPU isn't working (or the glue logic driving it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) Screen is black, do you hear any audio beeps if you allow the notepad to load?  If you get audio beeps then the Pokey should be good but the Antic or GTIA might be bad (process of elimination).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try those and let us know.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-05-04T20:38:50.440" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2840" PostTypeId="1" AcceptedAnswerId="2846" CreationDate="2017-05-05T02:46:45.117" Score="12" ViewCount="823" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/je5oK.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/je5oK.jpg&quot; alt=&quot;John von Neumann with EDVAC/MANIAC I/IAS depending on source&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the image. Different sources claim that this machine is the EDVAC, MANIAC I, or IAS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the Wikipedia page on John von Neumann has a picture of him and J. Robert Oppenheimer standing in front of this machine with the caption that it is the EDVAC.&lt;br&gt;&#xA;But the page about von Neumann's First Draft on the EDVAC has the same picture with the caption saying it is the MANIAC I. And the caption for this picture in an &lt;a href=&quot;https://cacm.acm.org/magazines/2014/1/170862-actually-turing-did-not-invent-the-computer/abstract&quot; rel=&quot;noreferrer&quot;&gt;ACM article&lt;/a&gt; says that it is the IAS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is it?&lt;/p&gt;&#xA;" OwnerUserId="5027" LastEditorUserId="276" LastEditDate="2017-05-05T07:07:28.107" LastActivityDate="2017-05-05T14:23:03.677" Title="Is this machine the EDVAC, MANIAC, or IAS?" Tags="&lt;hardware&gt;&lt;identify-this-computer&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2841" PostTypeId="2" ParentId="2840" CreationDate="2017-05-05T08:07:38.530" Score="1" Body="&lt;p&gt;Bear in mind that only one of each of the computers you mention was made.  Rand built each new machine in a specific location for a specific organisation.  All looking broadly similar.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each development resulted in a new name, usually a play on where the machine was located.  After ENIAC came:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDVAC&lt;br&gt;&#xA;IAS&lt;br&gt;&#xA;JOHNNIAC&lt;br&gt;&#xA;MANIAC&lt;br&gt;&#xA;ILLIAC&lt;br&gt;&#xA;WEIZAC&lt;br&gt;&#xA;AVIDAC&lt;br&gt;&#xA;ORDVAC  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible that this picture could be any one of them.  As some of these computers were for military purposes, the photograph's location may not have been positively identified at the time it was taken.  It may not be possible to provide a definitive answer to your question.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would need to find other - dated - photographs of Neumann and Oppenheimer and compare them with your picture.  That would give an approximate date, which would narrow down the list of possible computers.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2017-05-05T08:07:38.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2842" PostTypeId="1" AcceptedAnswerId="2843" CreationDate="2017-05-05T08:17:32.487" Score="8" ViewCount="1533" Body="&lt;p&gt;IEEE 754 defines 128-bit floating point, though perhaps in a three-way chicken and egg problem, it's rarely supported by hardware, rarely supported by compilers, and rarely used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have there been, historically, any&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Computers that supported 128-bit floating point&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compilers that supported it&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Workloads that used it?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm interested in both references and anecdotes from personal experience, and particularly specific information, not just that a certain computer supported 128-bit FP, but how it was implemented, what it was used for or both.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4025" LastEditDate="2018-12-04T20:44:50.343" LastActivityDate="2018-12-04T20:44:50.343" Title="128-bit floating point" Tags="&lt;history&gt;&lt;floating-point&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2843" PostTypeId="2" ParentId="2842" CreationDate="2017-05-05T09:38:03.523" Score="8" Body="&lt;p&gt;I never used it, so I can't give any anecdotes. But the 'implementation' section of the wikipedia &lt;a href=&quot;https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format&quot; rel=&quot;noreferrer&quot;&gt;about this topic&lt;/a&gt; cites some hardware and compilers. I quote some parts of the article:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware: &quot;Native support of 128-bit floats is defined in SPARC V8 and V9 architectures, but no SPARC CPU implements quad-precision operations in hardware as of 2004. POWER9 (ISA 3.0) will have 128-bit hardware support.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compilers: &quot;Quadruple precision is specified in Fortran by the real(real128), or as real(selected_real_kind(33, 4931)), or in a non-standard way as REAL*16. (Quadruple-precision REAL*16 is supported by the Intel Fortran Compiler and by the GNU Fortran compiler on x86, x86-64, and Itanium architectures, for example.) (...) in C/C++ with a few systems and compilers, quadruple precision may be specified by the long double type, but this is not required by the language (which only requires long double to be at least as precise as double), nor is it common (...) some C/C++ compilers provide a nonstandard quadruple-precision type as an extension. For example, gcc provides a quadruple-precision type called __float128 for x86, x86-64 and Itanium CPUs, and on PowerPC as IEEE 128-bit floating-point using the -mfloat128-hardware or -mfloat128 options; and some versions of Intel's C/C++ compiler for x86 and x86-64 supply a nonstandard quadruple-precision type called _Quad&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Libraries and toolboxes:&#xA;&quot;The Boost multiprecision library Boost.Multiprecision provides unified cross-platform C++ interface for __float128 and _Quad types, and includes a custom implementation of the standard math library.&#xA;The Multiprecision Computing Toolbox for MATLAB allows quadruple-precision computations in MATLAB. It includes basic arithmetic functionality as well as numerical methods, dense and sparse linear algebra.&#xA;The DoubleDouble package provides support for double-double computations for the Julia programming language.&quot;&lt;/p&gt;&#xA;" OwnerUserId="4853" LastEditorUserId="4853" LastEditDate="2017-05-05T09:53:27.273" LastActivityDate="2017-05-05T09:53:27.273" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2845" PostTypeId="1" CreationDate="2017-05-05T12:52:16.390" Score="5" ViewCount="266" Body="&lt;p&gt;I am building a 8080 emulator. I found some useful test suites &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/670/8080-8085-instruction-test-suite&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The emulator passes the first test suite (8080/8085 CPU Diagnostic, version 1.0, by Microcosm Associates), &lt;/p&gt;&#xA;&#xA;&lt;p&gt;but not the second ( DIAGNOSTICS II V1.2 - CPU TEST SUPERSOFT ASSOCIATES).&lt;br&gt;&#xA;Is there a manual (or other document) for this diagnostic tool ? (the tool gives some probably useful diagnostic codes)&lt;/p&gt;&#xA;" OwnerUserId="4853" LastEditorUserId="4853" LastEditDate="2017-05-07T08:31:59.083" LastActivityDate="2017-05-07T08:31:59.083" Title="Manual for DIAGNOSTICS II V1.2 - CPU TEST SUPERSOFT ASSOCIATES" Tags="&lt;8080&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2846" PostTypeId="2" ParentId="2840" CreationDate="2017-05-05T14:09:56.997" Score="8" Body="&lt;p&gt;Your image is a crop of an image used in George Dyson's book “&lt;a href=&quot;http://www.penguinrandomhouse.com/books/44425/turings-cathedral-by-george-dyson/9781400075997&quot; rel=&quot;noreferrer&quot;&gt;Turing's Cathedral&lt;/a&gt;”. IAS themselves credit it as “&lt;a href=&quot;http://cdm.itg.ias.edu/cdm/singleitem/collection/coll9/id/0&quot; rel=&quot;noreferrer&quot;&gt;John von Neumann - standing in front of computer :: Electronic Computer Project&lt;/a&gt;”. It's also listed by Getty Images as “&lt;a href=&quot;http://www.gettyimages.ca/detail/news-photo/john-von-neuman-and-the-institute-for-advanced-study-news-photo/135932726#john-von-neuman-and-the-institute-for-advanced-study-computer-new-picture-id135932726&quot; rel=&quot;noreferrer&quot;&gt;John von Neuman and the Institute for Advanced Study computer, Princeton, New Jersey, 1945&lt;/a&gt;”.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many of the IAS clone machines looked similar, with some key differences. JOHNNIAC used &lt;a href=&quot;https://en.wikipedia.org/wiki/Selectron_tube&quot; rel=&quot;noreferrer&quot;&gt;Selectron&lt;/a&gt; devices, so lacked the distinctive Williams valve/tube “cylinder head” of the IAS machine. MANIAC moved the Williams storage valves up to the top of the cabinet (photos in this report: &lt;a href=&quot;http://permalink.lanl.gov/object/tr?what=info:lanl-repo/lareport/LA-UR-83-5073&quot; rel=&quot;noreferrer&quot;&gt;Computing  &amp;amp;  Computers:  Weapons  Simulation  Leads  to  the  Computer Era&lt;/a&gt;). EDVAC was quite different: it wasn't derived from the IAS machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's the original IAS machine.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2017-05-05T14:23:03.677" LastActivityDate="2017-05-05T14:23:03.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2847" PostTypeId="2" ParentId="638" CreationDate="2017-05-05T16:15:12.690" Score="1" Body="&lt;p&gt;The first ZX Spectrums were made in &lt;a href=&quot;https://www.eveningtelegraph.co.uk/2015/08/28/the-good-the-bad-and-the-timex-a-factory-of-the-future-until-tough-times-hit/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Timex facilities in Dundee&lt;/a&gt;, Scotland. Unfortunately, they closed in 1993.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-05-05T16:15:12.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2848" PostTypeId="1" AcceptedAnswerId="2849" CreationDate="2017-05-05T22:07:05.917" Score="49" ViewCount="3053" Body="&lt;p&gt;I have a Commodore 128D that hasn't been powered in about 15 years.  I want to begin using it again.  It has been stored in cool dry places like attached garages, in a cardboard box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this question can apply to the general case of anybody who acquires an old computer and wants to use it without damage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My particular concerns are bad capacitors or other power supply problems, mechanical problems with disk drives for example, and other problems or stupid mistakes I'm not aware of.&lt;/p&gt;&#xA;" OwnerUserId="5032" LastEditorUserId="6794" LastEditDate="2017-08-27T16:02:50.937" LastActivityDate="2019-12-12T09:09:52.853" Title="What precautions to take when powering on old computer for the first time in years" Tags="&lt;maintenance&gt;&lt;commodore&gt;&lt;commodore-128&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="2849" PostTypeId="2" ParentId="2848" CreationDate="2017-05-05T23:29:00.893" Score="42" Body="&lt;p&gt;There are several simple precautions that are always worth taking when powering up a vintage microcomputer after long periods of storage or non-use. The minimum, simple steps, should include:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Place the computer on an electrically safe workbench, preferably one that includes a grounding strap for the user. A wooden table is an OK substitute, just avoid static discharge from your body.&lt;/li&gt;&#xA;&lt;li&gt;Open the computer for visual inspection. Dust inside the case and around any ventilation ports (i.e. PSU fan) should be blown out using compressed air. Grime can be removed using isopropyl alcohol (70%) and a clean rag.&lt;/li&gt;&#xA;&lt;li&gt;Look carefully at the component side of the motherboard and any cards for anything abnormal. Common anomalies to check for are leaky electrolytic capacitors, damaged or improperly inserted chips, empty sockets (missing chip?), and any evidence of component overheating, like blackened, charred area around a resistor or cap, or on the PCB.&lt;/li&gt;&#xA;&lt;li&gt;After properly sorting out any of the above, if needed, you should gently press on each socketed component to ensure it is completely and correctly seated in the socket.&lt;/li&gt;&#xA;&lt;li&gt;Assuming it can be done without exposing you to dangerous voltages, disconnect the internal PSU from the motherboard, then power on the PSU only from AC power. Watch and listen carefully for any arcing or sparking so you can power it right back down quickly. If it looks OK, then wait several seconds and check for any unusual or acrid odors from the PSU. If it appears stable, you should check the PSU voltages with a multi-meter next. Obviously, checking voltages will require you to obtain some basic troubleshooting guide so you know which pins to check and the specified voltage you should see. See answers to this &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2850/what-is-the-proper-way-to-test-the-psu-output-for-a-commodore-128d&quot;&gt;question&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;If above is good, reconnect PSU. Remove any peripheral cards that are not essential to subsequent testing, then power up the main board and CPU. Again, watch and listen carefully and check for odors or other anomalies so you can power it right back down.&lt;/li&gt;&#xA;&lt;li&gt;Ensure any fans that are installed are working and that the system or PSU is getting adequate airflow.&lt;/li&gt;&#xA;&lt;li&gt;If good so far, you can power back down, re-assemble the case, and start testing the machine with video displays and other peripherals.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This might sound like a lot of steps, but barring necessary repairs along the way, it can be done in 5 to 10 minutes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mentioned the floppy drive in the Commodore 128D as well. All the same simple checks above for the main board should be done for the floppy drive motherboard too. Frequently, the read/write head on a floppy drive will need to be cleaned before it can access disks. This is done by wetting a cotton swap with isopropyl alcohol and using that to gently clean the delicate head area. Also, if you keep the Commodore case open during operation, you can visually observe if the head is moving laterally across the disk. Sometimes it can get stuck or sort of sputter if the track it moves on needs lubricating after a long storage. I normally use a small amount of silicone lube for the metal tracks, and you should attempt to remove any old lubricant before applying the new. Of course, there can be many other failure modes for floppy drives, but these two simple things have gotten many drives working again for me. On 3.5&quot; drives, the moving parts associated with inserting and ejecting the diskette are also prone to needing old lubricant cleaned off and new lubricant applied.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-05-06T17:45:00.157" LastActivityDate="2017-05-06T17:45:00.157" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="2850" PostTypeId="1" AcceptedAnswerId="2999" CreationDate="2017-05-06T17:43:56.070" Score="12" ViewCount="1125" Body="&lt;p&gt;This question is directly related to comments on the more general question and answer &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2848/what-precautions-to-take-when-powering-on-old-computer-for-the-first-time-in-yea&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Commodore 128D and 128D-CR have an internal PSU that can be readily and safely disconnected from the main board in order to test the supply voltages without risking damage to the computer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Checking it is a good precaution after long periods of non-use.&lt;br&gt;&#xA;How exactly can this be accomplished?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="11916" LastEditDate="2020-02-07T11:48:34.070" LastActivityDate="2020-02-07T15:05:10.057" Title="What is the proper way to test the PSU output for a Commodore 128D?" Tags="&lt;commodore&gt;&lt;power&gt;&lt;commodore-128&gt;&lt;hardware-testing&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2851" PostTypeId="2" ParentId="2758" CreationDate="2017-05-07T01:30:11.810" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&#xA;  As of the release of &lt;em&gt;ProDOS 2.5 alpha#5&lt;/em&gt;, up to &lt;strong&gt;37 drives are supported&lt;/strong&gt;. This is done by increasing the number of mapped drives per slot from 2 to 8, which would theoretically allow 56 drives. However, there is only enough reserved memory for the table of unit numbers to hold up to 37 entries.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;ProDOS, being an 8-bit OS designed to run in 64K, uses very small and efficient internal data structures to map logical entities, like your volume &lt;em&gt;/HARD6&lt;/em&gt; to physical hardware entities. Specifically, ProDOS maps its block devices (all disk drives) to unit numbers that are 1-byte long with the high 4-bits specified as &lt;strong&gt;DSSS&lt;/strong&gt;, where D is the drive and SSS is the slot. Since D is only one bit, only 2 drives are supported. Since SSS excludes the value 0, 7 slots are supported (just like the hardware has slots 1 through 7). So, there is a limit of 14 unique unit numbers, and that means a limit of 14 physical drives (or partitions, since partitions are handled by the HD controller).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;SmartPort&lt;/em&gt; controllers support more than 2 drives for a single slot, and can theoretically support up to 127 devices. During initialization, when ProDOS encounters a &lt;em&gt;SmartPort&lt;/em&gt; controller with more than two drives, it uses &lt;em&gt;mirroring&lt;/em&gt; to map the additional drives to unit numbers associated with different slots. So, four SmartPort drives connected via slot 5 will be mapped by ProDOS: S5,D1 S5,D2 S2,D1 S2,D2. Each of those 4 drives will also have a logical volume based on the name of the disk. So, that is how you end up with a &lt;em&gt;/HARD3&lt;/em&gt; and &lt;em&gt;/HARD4&lt;/em&gt; that are assigned to slot 2, even though the actual card in slot 2 is probably a serial card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much more detail about this is available in &lt;strong&gt;ProDOS 8 Technical Note #20&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-03-29T20:26:02.530" LastActivityDate="2020-03-29T20:26:02.530" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="2852" PostTypeId="2" ParentId="2838" CreationDate="2017-05-07T08:51:27.717" Score="4" Body="&lt;p&gt;I googled for the same question and the only &lt;a href=&quot;http://marc.info/?t=104965277200005&amp;amp;r=1&amp;amp;w=2&quot; rel=&quot;nofollow noreferrer&quot;&gt;possible answer I found&lt;/a&gt; was that the 8080 wasn't able to connect to standard TTL (only to low power TTL). The 8080A was.&lt;/p&gt;&#xA;" OwnerUserId="4853" LastEditorUserId="4853" LastEditDate="2017-05-07T19:06:48.460" LastActivityDate="2017-05-07T19:06:48.460" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2853" PostTypeId="2" ParentId="2828" CreationDate="2017-05-07T10:06:24.403" Score="9" Body="&lt;p&gt;It's mainly based on VICII's (or generally for memory mapped video adapters) demand together with limitations on access time for RAM and ROM components.&#xA;VICII has to access the RAM (video character, hires, sprites, RAM refresh) interleaved with the CPU and ROM (character set), as already commented above.&#xA;Generally speaking:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Faster RAM were a cost problem, because RAM access is twice the&#xA;speed of the CPU (interleaving access of CPU and video chip): in a&#xA;single CPU clock cycle two RAM accesses occur. The BBC micro with&#xA;its 2 MHz CPU needed 4 MHz capable RAM chips which only few vendors&#xA;could provide. &lt;/li&gt;&#xA;&lt;li&gt;I/O chips are mostly pinned to 1 MHz.&lt;/li&gt;&#xA;&lt;li&gt;Dependency to the video chip which has a big demand on RAM&#xA;bandwidth, but has only interleaved access to RAM (competing with&#xA;the CPU) but still have to do the RAM refresh.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Later Commodore models like the C16, C116, Plus/4 run with 1.8 MHz CPU speed, faster RAM were common, but even there the video chip (TED) throttles the CPU down while displaying a video frame. Driving the video chip faster would have an overall impact on the system's design: first to mention the need for faster and expensive components, but also thermal aspects on the video chip come into play (VICII, TED seem to be on their limit even with 1 MHz). Commodore's solution if they want to raise the CPU speed were to add a second video chip with separate video RAM (see C128 comments above) or to omit RAM access intensive display modes (hires, sprites, ...) used for the CBM II line (B128, B256 &quot;business&quot; models).&lt;/p&gt;&#xA;" OwnerUserId="181" LastActivityDate="2017-05-07T10:06:24.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2854" PostTypeId="2" ParentId="2837" CreationDate="2017-05-07T11:31:39.767" Score="5" Body="&lt;p&gt;If you have &lt;em&gt;local&lt;/em&gt; access to the computer where the password is set, it is a simple matter to reset the password. You don't need to know the current password in order to change it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Go to Apple menu &amp;rarr; Control Panels. Then, open the &quot;File Sharing&quot; control panel:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/YXT1U.gif&quot; alt=&quot;&quot;&gt;&lt;br&gt;&#xA;&lt;sup&gt;(Image taken from &lt;a href=&quot;https://www.safaribooksonline.com/library/view/mac-os-91/0201730871/0201730871_ch10lev1sec5.html&quot; rel=&quot;noreferrer&quot;&gt;Maria Langer's &lt;em&gt;Mac OS 9.1: Visual QuickStart Guide&lt;/em&gt;&lt;/a&gt;)&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see in the above screenshot, there is an &quot;Owner Password&quot; field, right underneath the &quot;Owner Name&quot; field. Just click in that text box and type a new password—or clear it to remove the password altogether.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't &lt;em&gt;think&lt;/em&gt; you need to stop and restart file sharing for the new password to take effect—it should take effect immediately—but if you're having problems, it can't hurt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These steps work on System 7 through 9.&lt;/p&gt;&#xA;" OwnerUserId="2037" LastActivityDate="2017-05-07T11:31:39.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2855" PostTypeId="2" ParentId="2792" CreationDate="2017-05-07T12:29:28.357" Score="24" Body="&lt;p&gt;This is not a complete answer because it doesn't answer what the exact cost savings were, but I think it's worthwhile to have an informed primary source for the claim that there were cost-savings and commodity-components motivations behind IBM's choice to use the 8088 instead of the 8086.&lt;/p&gt;&#xA;&lt;p&gt;Peter Norton, PC guru and DOS programmer extraordinaire, writes in his book, &lt;a href=&quot;https://archive.org/details/Peter_Norton_Inside_the_IBM_PC_Revised_and_Enlarged&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Inside the IBM PC&lt;/em&gt;&lt;/a&gt;:&lt;br /&gt;&#xA;&lt;sub&gt;(© 1986; p. 9)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“There was an inherent practical problem . . . in using the 8086 as the base of a computer design. While the 8086 had 16-bit capabilities internally—which is very good—it also had to work exclusively with other computer components that handle 16 bits at a time as well. When the PC was being designed, 8-bit parts were plentiful and cheap; 16-bit parts were more expensive and in shorter supply. This presented an obstacle to anyone designing a computer around the 8086.&lt;/p&gt;&#xA;&lt;p&gt;Intel found a simple, practical solution to this problem with the 8088 chip. The 8088 &lt;em&gt;internally&lt;/em&gt; has all the 16-bit skills of the 8086, but when it communicates with other circuitry around it, it talks only 8 bits at a time; this slightly reduces the speed of the 8088, but it makes it possible for the 8088 to work with other components that are cheap and plentiful.&lt;/p&gt;&#xA;&lt;p&gt;For practical reasons, IBM designed the original model of PC around the 8088—a microprocessor with 16-bit power, but 8-bit economy. […]”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Furthermore, while the question makes it sound like IBM's choice to use a hobbled 16-bit processor was a rather curious one, it really wasn't. It's important to realize that when the IBM PC was designed (and even at the time of its release to the public), virtually &lt;em&gt;all&lt;/em&gt; home computers were 8-bit systems.&lt;/p&gt;&#xA;&lt;p&gt;In fact, IBM's original plan apparently &lt;em&gt;was&lt;/em&gt; to use an 8-bit processor, and Microsoft is who persuaded them to go with the 16-bit 8086 instead. In &lt;a href=&quot;https://www.pcmag.com/article2/0,2817,1204,00.asp&quot; rel=&quot;noreferrer&quot;&gt;an interview with &lt;em&gt;PC Magazine&lt;/em&gt; on March 25, 1997&lt;/a&gt;, Bill Gates had this to say &lt;sub&gt;&lt;sup&gt;(emphasis added)&lt;/sup&gt;&lt;/sub&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;…for IBM it was extremely different because this was a project where they let a supplier—a partner, whatever you call us—shape the definition of the machine and provide fundamental elements of the machine. &lt;strong&gt;When they first came to us, their concept was to do an 8-bit computer.&lt;/strong&gt; And the project was more notable because they were going to do it so quickly and use an outside company. It wouldn't be a high-volume product.&lt;/p&gt;&#xA;&lt;p&gt;Their charge was to do a home and a very low-end business machine. They had the Data Master, which was 8085-based at the time, that they felt was covering part of the business market. Then they had the 5100, the machine that had both an APL and a BASIC interpreter, which was covering another part of the business market. So it was sort of a home-down business machine. And it was a very small team in Boca that wanted to prove that IBM could do a product, any kind of product, in about an 18-month cycle. And that was the most novel-that was going to be the novel thing was: could you work with outsiders, which in this case was mostly ourselves but also Intel, and do it quickly?&lt;/p&gt;&#xA;&lt;p&gt;And the key engineer on the project, Lou Eggebrecht, was fast-moving. &lt;strong&gt;Once we convinced IBM to go 16-bit (and we looked at 68000 which unfortunately wasn't debugged at the time so decided to go 8086), he cranked out that motherboard in about 40 days.&lt;/strong&gt; It's one of the most phenomenal projects because there were very small resources involved and we had to ROM the BASIC which meant that it was essentially cast in concrete, so you couldn't make much in the way of mistakes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Microsoft co-founder Paul Allen remembers things the same way as Gates, writing in &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1591843820&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;his autobiography&lt;/a&gt;:&lt;br /&gt;&#xA;&lt;sub&gt;(© 2011; p. 133)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;That August [of 1980], a three-piece-suited contingent led by Jack same approached us about Project Chess, the code name for what would become IBM's PC. After we talked them out of an 8-ibt machine and won them over to the Intel 8086 (or as it turned out, the cheaper but virtually identical 8088), they wanted everything in our 16-bit cupboard, including FORTRAN, COBOL, and Pascal. Aside from BASIC, none of these products were even close to being ready for the 8086 platform. It would take a wild scramble to get them all done on IBM's tight timetable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's not to say, of course, that 16-bit computer systems didn't exist at this time—they did—but they were not found in personal computers. The most popular computers at that time, from Apple and Atari, were powered by the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502&quot; rel=&quot;noreferrer&quot;&gt;MOS Technology 6502&lt;/a&gt;, and a number of others by the &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80&quot; rel=&quot;noreferrer&quot;&gt;Zilog Z80&lt;/a&gt;. You might object and say that IBM wasn't really designing the PC to compete with the likes of Apple IIs and Commodores, since it wasn't a home gaming machine, but remember that IBM was still making powerful mainframes and minicomputers and certainly did not expect or want their PC to compete with these.&lt;/p&gt;&#xA;&lt;p&gt;In fact, the 8088's pseudo-16-bit architecture was considerably more powerful than any of its competitors. It has a lot of neat tricks up its sleeve that its contemporaries just couldn't match:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Chief among those was its relatively large complement of general-purpose registers. The 6502 only had a single GP register, while the 8088 had between 4 and 6 (depending on how you count). Sure, there were some instructions that were hardcoded to use only certain registers, but this was still a lot more headroom. Plus, these instructions required fewer bytes to encode, which turned the register specialization into an advantage.&lt;/li&gt;&#xA;&lt;li&gt;Another unique feature of the 8088 compared to other personal computers were its hardware multiplication and division operations. Being a 16-bit processor internally, these could do a full 16-bit multiply or divide internally on two values that were known only at run-time. Granted, these instructions were &lt;em&gt;extremely&lt;/em&gt; slow, but they were still faster than emulating them on processors that didn't support them.&lt;/li&gt;&#xA;&lt;li&gt;An even more important advantage of the 8088 was Intel's &lt;a href=&quot;https://en.wikipedia.org/wiki/Complex_instruction_set_computing&quot; rel=&quot;noreferrer&quot;&gt;CISC architecture&lt;/a&gt;, which offered a wide variety of extremely powerful &amp;quot;meta-instructions&amp;quot; that could be encoded in fewer bytes and executed more quickly than equivalent sequences of instructions on other microprocessors. The string instructions are the best known, and were truly one of the defining features of the 8088 from a performance-oriented programmer's perspective. With a single opcode (&lt;code&gt;MOVSB&lt;/code&gt;), you could copy a byte from one memory location to another &lt;em&gt;and&lt;/em&gt; advance both pointers—all in an order of magnitude less time than it would have taken to execute these three logical operations. There were instructions to copy memory around (&lt;code&gt;MOVSB&lt;/code&gt;), scan a buffer for a value (&lt;code&gt;SCASB&lt;/code&gt;), compare two buffers (&lt;code&gt;CMPSB&lt;/code&gt;), and fill a buffer with a certain value (&lt;code&gt;STOSB&lt;/code&gt;). When coupled with the &lt;code&gt;REP&lt;/code&gt; prefix (which caused the instruction to be repeated a certain number of times, or according to a particular condition), you had a &lt;em&gt;loop&lt;/em&gt; that could do these operations repeatedly at &lt;em&gt;extremely&lt;/em&gt; high speeds. The &lt;code&gt;XLAT&lt;/code&gt; instruction is another honorable mention, weighing in at only 1 byte yet allowing efficient, effective use of translation tables.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It's important not to overstate the drawbacks of an 8-bit external bus. This only slowed down &lt;em&gt;memory&lt;/em&gt; operations, which were—relatively speaking—extremely slow anyway and therefore avoided as much as possible by programmers targeting this architecture. Where you really saw a penalty from the 8-bit bus was in fetching &lt;em&gt;instructions&lt;/em&gt; to be executed (as opposed to data).&lt;/p&gt;&#xA;&lt;p&gt;It turned out that the 8088 spent a lot of its time idling, waiting for instructions to be read, since it could execute many of them so quickly that its 4-byte prefetch queue was usually empty. (It took ~4 cycles to read a single byte.) The way around this was to take advantage of those nice, short CISC instructions that were fetched quickly and packed readily into a small queue. If you had a series of 1-byte instructions, the queue would stay full and the chip would stay busy—and thus run quickly, as fast as an 8086.  When optimizing for 8088, using more instructions was usually a win if they were smaller, and x86 has &lt;a href=&quot;https://stackoverflow.com/questions/38019386/what-is-the-significance-of-operations-on-the-register-eax-having-their-own-opco/38019602#38019602&quot;&gt;a lot of special-case short-form encodings&lt;/a&gt; of various instructions.&lt;/p&gt;&#xA;&lt;p&gt;(The 8086, in addition to having a 16-bit external bus, also had a 6-byte prefetch queue; it was these things &lt;em&gt;together&lt;/em&gt; that made the 8086 a superior performer, since it was easier to keep the queue full and thus the processor busy. The 8088 limited its prefetch queue to only 4 bytes, probably because prefetch contends with data load/store, and some of that prefetch will turn out to be useless: discarded on jumps.  With less memory bandwidth available, it's less worthwhile to aggressively prefetch.  See discussion in comments. Michael Abrash's &lt;a href=&quot;http://www.jagregory.com/abrash-zen-of-asm/#branching-and-the-prefetch-queue&quot; rel=&quot;noreferrer&quot;&gt;extended treatment of the prefetch queue&lt;/a&gt; in his &lt;em&gt;Zen of Assembly&lt;/em&gt; is also worth a read.)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Another thing about the 8088 (and 8086, of course) that was &lt;em&gt;huge&lt;/em&gt; was the 8087 math coprocessor. It was an expensive add-on for sure, and therefore wasn't found in many systems, but boy was it &lt;em&gt;powerful&lt;/em&gt;. Not only did it make it possible to do complex IEEE floating-point operations, which was already unprecedented in a home computer, it also did it with high accuracy and precision. Even more significantly, it was a &lt;em&gt;true coprocessor&lt;/em&gt;, that could execute floating-point operations &lt;em&gt;independently&lt;/em&gt;, meaning that the main 8088/8086 processor could stay busy executing integer instructions. Background multiprocessing in 1981—what is this insanity?!&lt;/p&gt;&#xA;&lt;p&gt;From this perspective, it is, in some ways, surprising that the IBM PC was as powerful as it was. In the hands of the right programmer, it could blow the ceiling off of contemporary personal computers, and would even pose a real threat to some of the mini-computers on the market. Unfortunately, there were relatively few programmers who really took advantage of these neat features, and by the time such tricks were widely known, they were already obsolete. I also can't speak as to the extent to which IBM's engineers realized the power of Intel's processor—they may have thought they were humbling the machine more than they actually were, and it may be Andy Grove's team that were the real wizards here.&lt;/p&gt;&#xA;" OwnerUserId="2037" LastEditorUserId="2037" LastEditDate="2020-11-17T06:18:39.370" LastActivityDate="2020-11-17T06:18:39.370" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="2856" PostTypeId="2" ParentId="406" CreationDate="2017-05-07T19:30:22.110" Score="8" Body="&lt;p&gt;I know of an application that uses a different port from &lt;code&gt;#FE&lt;/code&gt; to change border colour. It concerns all of my border art viewers, and the reason why the different port had to be used is as follows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wanted to be able to use all 8 border colours. To get the best possible resolution, I could not re-load register values; all current registers had to be used. We have 7 registers for 8 colours; we output them using &lt;code&gt;out (c),r&lt;/code&gt;. The remaining 8th colour is outputted using an undocumented command &lt;code&gt;out (c),0&lt;/code&gt;. However, this causes an issue. The yellow colour has to be outputted using the command &lt;code&gt;out (c),c&lt;/code&gt;, and if &lt;code&gt;c&lt;/code&gt; was to be equal to &lt;code&gt;#FE&lt;/code&gt;, then &lt;code&gt;out (c),c&lt;/code&gt; would result in a high state of the beeper output and &lt;code&gt;out (c),0&lt;/code&gt; in a low state. Beeper noises are going to be produced. To avoid these noises, I reset two bits in the value in register &lt;code&gt;c&lt;/code&gt;, to ensure that beeper and tape state stays at &lt;code&gt;0&lt;/code&gt;. Hence, instead of writing into port &lt;code&gt;#FE&lt;/code&gt;, I wrote to the port &lt;code&gt;%11100110=0xE6&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="5039" LastEditorUserId="278" LastEditDate="2017-05-08T17:43:47.993" LastActivityDate="2017-05-08T17:43:47.993" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2857" PostTypeId="1" AcceptedAnswerId="2858" CreationDate="2017-05-08T02:33:40.857" Score="8" ViewCount="593" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/MSN_TV&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt; says: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The WebTV product was an adapter that allowed a television set to be connected to the Internet, primarily for web browsing and e-mail. The setup included a web browser, a corded or wireless (e.g., bluetooth or IRDA) keyboard and a connection, using a modem, ADSL, cable Internet access, or power line communication.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The WebTV set-top box had very limited processing and memory resources (just a 112 MHz MIPS CPU, 2 megabytes of RAM, 2 megabytes of ROM, 1 megabyte of Flash memory) and the device relied upon a connection through a 33.6 kbit/s dialup modem to connect to the WebTV Service, where powerful servers provide back-end support to the WebTV set-top boxes to support a full Web-browsing and email experience for the subscribers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm too young to have experienced any of this, so I'm kind of confused.  Was WebTV built on top of a third-party dial-up internet service?  E.g. did a user need to subscribe to something like AOL as well as WebTV?  Or was it an all-in-one package that was a sort of replacement for a dial-up internet service (so far as only being accessible through a TV browser)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, apologies if this isn't &quot;retro&quot; enough for this stackexchange, I didn't know where else to ask.&lt;/p&gt;&#xA;" OwnerUserId="5041" LastActivityDate="2017-05-08T04:55:56.283" Title="How did WebTV (MSN TV) work" Tags="&lt;internet&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2858" PostTypeId="2" ParentId="2857" CreationDate="2017-05-08T04:55:56.283" Score="12" Body="&lt;p&gt;The WebTV service launched over 20 years ago, so it's probably &quot;retro&quot; enough. :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;WebTV had contracts with a network of IAPs (Internet Access Providers), such as Concentric Networks, UUNET Technologies, and PSINet.  While the big carriers provided plenty of capacity for urban areas, dozens smaller IAPs were also used to get coverage in less populated zones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When first powered on, the WebTV set-top box would connect to a toll-free number.  This went to a bank of modems managed directly by WebTV.  As part of the toll-free service, the modems would receive the box's phone number through ANI (Automatic Number Identification).  The number was combined with phone rate data from CCMI to select local modems to call.  These were known as POPs (Point of Presence).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each box would ideally get two POPs to dial.  If the first one failed, the box would try the second one on the next attempt.  All successes and failures were logged and reported by the box when it eventually connected, which allowed WebTV to monitor network reliability despite not being in control of most of the POPs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few months after launch, WebTV added the &quot;OpenISP&quot; feature.  This allowed you to specify a dial-up modem number of your choosing, so that you didn't have to pay for Internet service twice if you already had an ISP.  You got a significant price break on the monthly subscription charge with OpenISP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yes, WebTV was usually sold as an all-in-one package, but it didn't have to be.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2017-05-08T04:55:56.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2859" PostTypeId="1" CreationDate="2017-05-08T07:21:38.707" Score="5" ViewCount="276" Body="&lt;p&gt;I'm concerned about an Amstrad CPC 464 tape deck, which loads, but makes grinding scratching noise while rewinding, fast-forwarding and play.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes it does load silently, but after a subsequent rewind the scratching noise returns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is very loud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have discontinued use while I figure out a solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help me.&lt;/p&gt;&#xA;" OwnerUserId="5042" LastActivityDate="2018-06-02T00:57:21.780" Title="Amstrad CPC 464 tape deck loads, but makes grinding scratching noise" Tags="&lt;hardware&gt;&lt;cpc464&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2860" PostTypeId="1" CreationDate="2017-05-08T08:23:45.173" Score="8" ViewCount="149" Body="&lt;p&gt;CBM prg studio is brilliant. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have searched Google for a version (or something similar) for the Amstrad CPC 464, to no avail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know of one?&lt;/p&gt;&#xA;" OwnerUserId="5042" LastActivityDate="2017-05-08T18:32:33.273" Title="cbm prg studio for the Amstrad" Tags="&lt;assembly&gt;&lt;basic&gt;&lt;software-development&gt;&lt;cpc464&gt;&lt;software-development-kit&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2862" PostTypeId="2" ParentId="1644" CreationDate="2017-05-08T11:17:34.830" Score="0" Body="&lt;p&gt;Honestly I suspect most folks used an assembler with labels (rather than a monitor type program). It's possible some Apple ][ folks wrote stuff using the mini assembler but even I as a penny less school kid wrote a wrapper around it that added labels and org statements. I suspect a lot of the early Z80 developers were cross compiling from CP/M to target systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I wrote a load of games in assembler without ever using a linker and memory management of locations was pretty manual using .org statements. I stopped using my home brew assembler once I got the ProDOS development kit.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2017-05-08T11:17:34.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2863" PostTypeId="2" ParentId="2860" CreationDate="2017-05-08T18:32:33.273" Score="4" Body="&lt;p&gt;The nearest I can think of — though still very far from CBM prg Studio's integration — is &lt;a href=&quot;http://lronaldo.github.io/cpctelera/&quot; rel=&quot;noreferrer&quot;&gt;CPCtelera&lt;/a&gt;. It's mostly for C development, and the BASIC and debugging components that make prg Studio so clever aren't there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't find any shining stars in the &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Programming:Cross_Development&quot; rel=&quot;noreferrer&quot;&gt;Programming:Cross Development - CPCWiki&lt;/a&gt; category. I've mostly made do with a mix of z88dk's &lt;em&gt;appmake&lt;/em&gt; and iDsK for cross development.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-05-08T18:32:33.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2864" PostTypeId="2" ParentId="1644" CreationDate="2017-05-08T21:00:23.973" Score="2" Body="&lt;p&gt;On &lt;a href=&quot;https://en.wikipedia.org/wiki/Electronika_BK&quot; rel=&quot;nofollow noreferrer&quot;&gt;Elektronika BK&lt;/a&gt;, using hardwired memory locations in ROM to access useful subroutines was quite popular among game developers.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-05-08T21:00:23.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2865" PostTypeId="1" AcceptedAnswerId="2873" CreationDate="2017-05-08T22:56:30.313" Score="11" ViewCount="1479" Body="&lt;p&gt;Sega and Nintendo were the dominant players in the console market at the end of the 1980s and into the 90s. By early in the next decade, Sony shipped the PlayStation 2, leading Sega to exit the console market altogether, and dramatically cutting into Nintendo's dominance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But before the first PlayStation was announced, overtures were made, and there was serious negotiation and work on joint ventures to produce a Sega/Sony console or a Nintendo/Sony console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In hindsight, it seems like both Sega and Nintendo could have wound up much better off by cooperating with Sony, rather than competing with the PlayStation. How far did these partnerships get, who rebuffed whom, and why?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-05-09T03:27:29.327" LastActivityDate="2018-02-09T18:42:36.347" Title="What ended the Sony console partnerships with Sega and Nintendo?" Tags="&lt;history&gt;&lt;nintendo&gt;&lt;sega-genesis&gt;&lt;sony-playstation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2866" PostTypeId="1" CreationDate="2017-05-09T04:34:44.327" Score="0" ViewCount="783" Body="&lt;p&gt;I am interested in looking at the source code of any program that was written in Assembly just about when the Assembly language was invented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone have a source code for such a program, please post it and say what year it was written in and on what computer it run on.&lt;/p&gt;&#xA;" OwnerUserId="5045" LastActivityDate="2017-05-09T17:04:00.943" Title="Does anyone have the source code of an early program written in Assembly?" Tags="&lt;history&gt;&lt;assembly&gt;" AnswerCount="3" CommentCount="3" ClosedDate="2017-05-10T14:53:53.503" ContentLicense="CC BY-SA 3.0" />
  <row Id="2867" PostTypeId="2" ParentId="2866" CreationDate="2017-05-09T06:02:29.127" Score="7" Body="&lt;p&gt;Here's a subroutine from &lt;a href=&quot;https://en.wikipedia.org/wiki/Whirlwind_I&quot; rel=&quot;noreferrer&quot;&gt;Whirlwind&lt;/a&gt; (built 1947-1951) to print a 5 digit octal number. It is taken from &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/mit/whirlwind/Subroutines.pdf&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; collection of subroutines. All computers of this era were programmed directly with the translated opcodes (there were not text editors, and no assembler to translate assembly into code), so the real program is just a sequence of numbers which was punched on papertape. The assembly mnemonics are just an aid for the programmer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks very similar to how Assembly code still looks today.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00  ta 19r  set return address&#xA;01  ts 1t   store value&#xA;02  cp 20r  is word negative? Yes: 20r&#xA;03  ca 26r  No: Print &quot;0&quot;&#xA;04  qp 144  Printing&#xA;05  cs 25r  Set digit counter&#xA;06  ts 2t&#xA;07  ca 1t   Value in AC&#xA;08  sr *12&#xA;09  ad 34r  Add start of number table&#xA;10  td 13r&#xA;11  sl 15   Store remainder&#xA;12  ts lt&#xA;13  (ca 0)  Put flexo code for digit in AC&#xA;14  qp 128  print digit&#xA;15  ao 2t   Have all digits been printed?&#xA;16  cp 7e   No.&#xA;17  ca 4r   Yes. Cause a CR&#xA;18  qp 128&#xA;19  (sp 0)  Go back to main program&#xA;20  ad 24r  Change sign&#xA;21  ts 1t   Store value&#xA;22  ca 27r  Print &quot;1&quot;&#xA;23  sp 4r&#xA;24  0.77777&#xA;25  p4      Initial value of counter&#xA;26  p45     Number Table&#xA;27  p36&#xA;28  p39&#xA;29  p3&#xA;30  p21&#xA;31  p33&#xA;33  p15&#xA;34  p26r&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;And here is an assembly program for the &lt;a href=&quot;https://en.wikipedia.org/wiki/IAS_machine&quot; rel=&quot;noreferrer&quot;&gt;IAS Machine&lt;/a&gt; (built from 1945-1951, inspired by &lt;a href=&quot;https://en.wikipedia.org/wiki/Eniac&quot; rel=&quot;noreferrer&quot;&gt;Eniac&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is taken from &lt;a href=&quot;https://www.linuxvoice.com/john-von-neumann/&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; article, which explains it in detail. Two instructions could be put into a single number, and again the sequence of numbers made up the program. There are no mnemonics this time, instead a more mathematical notation is used to describe the operation.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0.  S(x)-&amp;gt;R     10  ;   load working number into AR&#xA;    S(x)*R-&amp;gt;A   10  ;   multiply working number by AR&#xA;1.  R-&amp;gt;A            ;   move AR into AC&#xA;    At-&amp;gt;S(x)    12  ;   save AC in location 12&#xA;2.  S(x)-&amp;gt;Ac+   10  ;   load working number into AC&#xA;    S(x)-&amp;gt;Ah+   11  ;   add one to working number&#xA;3.  At-&amp;gt;S(x)    10  ;   store incremented working number&#xA;    S(x)-&amp;gt;R     10  ;   and start again!&#xA;4.  S(x)*R-&amp;gt;A   10&#xA;    R-&amp;gt;A&#xA;5.  At-&amp;gt;S(x)    13  ;   but save in location 13 this time&#xA;    S(x)-&amp;gt;Ac+   10&#xA;6.  S(x)-&amp;gt;Ah+   11&#xA;    At-&amp;gt;S(x)    10&#xA;7.  .empty&#xA;    .empty&#xA;8.  .empty&#xA;    .empty&#xA;9.  .empty&#xA;    .empty&#xA;10. .data   4&#xA;11. .data   1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2017-05-09T15:32:10.837" LastActivityDate="2017-05-09T15:32:10.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2868" PostTypeId="1" CreationDate="2017-05-09T07:12:40.087" Score="3" ViewCount="259" Body="&lt;p&gt;How does one get a program like a word doc onto MS DOS to begin with?  I have a set of files that are backups, only one with .exe that is from an ancient word processor and would eventually like to use it to read into ancient documents.  Starting with a WINDOWS HP or a MAC.  Is the latter possible also? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, I would like to open some documents in IBM FILING ASSISTANT and IBM WRITING ASSISTANT, which are old 1980s word processors from the IBM PC days.  I currently have a WINDOWS HP, with which I would like to use the above programs.  Can I get direction and if possible specific instructions?  I currently have DOSBOX installed through D FEND RELOADED, but do not know how to go to the next step, if even that is possible.&lt;/p&gt;&#xA;" OwnerUserId="4780" LastEditorUserId="824" LastEditDate="2018-07-12T07:44:04.383" LastActivityDate="2018-07-12T07:44:04.383" Title="Trying to open IBM FILING ASSISTANT in DOSBOX, or other?" Tags="&lt;emulation&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2017-05-15T16:18:40.560" ContentLicense="CC BY-SA 4.0" />
  <row Id="2869" PostTypeId="2" ParentId="2866" CreationDate="2017-05-09T08:18:28.650" Score="13" Body="&lt;p&gt;In case you want to look into interesting Assembly sources, I'd recommend to check the source code for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apollo_Guidance_Computer&quot; rel=&quot;noreferrer&quot;&gt;Appollo Guidance Computer&lt;/a&gt;. The sources (assembly code written in the early sixties for the first IC-based computer and discontinued 1975) have just recently be released into the open and can be analyzed on &lt;a href=&quot;http://googlecode.blogspot.se/2009/07/apollo-11-missions-40th-anniversary-one.html&quot; rel=&quot;noreferrer&quot;&gt;Google code&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case you're missing real retro hardware to run the code on (like a lunar lander, Apollo spaceship or the US Navy's DSRV), there's also an AGC emulator available along the same pages :).&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-05-09T11:07:35.233" LastActivityDate="2017-05-09T11:07:35.233" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2870" PostTypeId="1" AcceptedAnswerId="2871" CreationDate="2017-05-09T15:37:37.267" Score="14" ViewCount="485" Body="&lt;p&gt;The original GUI invented at Xerox Parc, used a three-button mouse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What did each of the three buttons do?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4222" LastEditDate="2020-09-10T17:39:29.233" LastActivityDate="2020-09-10T17:39:29.233" Title="Xerox Parc and the three-button mouse" Tags="&lt;mouse&gt;&lt;gui&gt;&lt;xerox-alto&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2871" PostTypeId="2" ParentId="2870" CreationDate="2017-05-09T16:19:57.760" Score="14" Body="&lt;p&gt;On the Alto, the buttons’ functions vary with the program currently being used and the location of the cursor. The &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/xerox/alto/Alto_Users_Handbook_Sep79.pdf&quot; rel=&quot;noreferrer&quot;&gt;Users’ Handbook&lt;/a&gt; describes the functions in the default applications, using colours for the buttons: red for the left button (or top button), yellow for the middle button, blue for the right button (or bottom button).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;em&gt;Bravo&lt;/em&gt;, the text document editor, the buttons are used as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;in the left-hand part of the screen, red and blue scroll up and down respectively, and yellow opens a page;&lt;/li&gt;&#xA;&lt;li&gt;in the document, red selects a single character, yellow selects a word, and blue extends the selection (using characters or words depending on what’s already been selected) — this is somewhat similar to Emacs’ mark and point;&lt;/li&gt;&#xA;&lt;li&gt;in the “line bar” (between the scroll bar and the text area), yellow selects a paragraph, and blue extends the selection;&lt;/li&gt;&#xA;&lt;li&gt;with the “Window” command, blue creates a new window (with a new document), yellow splits the current window (giving two views of the current document), red moves the window;&lt;/li&gt;&#xA;&lt;li&gt;with the “Kill” command, red kills a window and gives its space to the window above, blue to the window below, and yellow clears the window but doesn’t kill it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In &lt;em&gt;Laurel&lt;/em&gt;, the messaging program:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;when invoking commands, red invokes a command potentially with confirmation, blue invokes a command with implicit confirmation, and yellow cancels some commands;&lt;/li&gt;&#xA;&lt;li&gt;in the scroll bar, red and blue work as in &lt;em&gt;Bravo&lt;/em&gt;, and yellow moves around within sections (the scroll bar is somewhat more complex than their modern incarnations);&lt;/li&gt;&#xA;&lt;li&gt;in the message list, red and blue select messages;&lt;/li&gt;&#xA;&lt;li&gt;etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-05-09T16:19:57.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2872" PostTypeId="2" ParentId="2868" CreationDate="2017-05-09T16:42:59.170" Score="6" Body="&lt;p&gt;I'd recommend installing &lt;a href=&quot;http://www.dosbox.com/&quot; rel=&quot;noreferrer&quot;&gt;DOSBox&lt;/a&gt;, as it gives you a walled-garden emulation that won't mess up any Windows configuration. If you make a folder (say &lt;code&gt;dosbox/cdrive&lt;/code&gt;), in DOSBox you can issue the command&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mount c dosbox/cdrive&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and that will map everything in that folder to the emulator's C: drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've successfully installed and run &lt;a href=&quot;http://download.microsoft.com/download/word97win/Wd55_be/97/WIN98/EN-US/Wd55_ben.exe&quot; rel=&quot;noreferrer&quot;&gt;MS Word 5.5&lt;/a&gt; and &lt;a href=&quot;https://web.archive.org/web/20140825104412/www.tigerteam.co.uk/protext/&quot; rel=&quot;noreferrer&quot;&gt;Protext&lt;/a&gt; under DOSBox. Direct printing doesn't work (as stock DOSBox doesn't support it) but installing a PostScript driver, printing to file, and then converting to PDF works.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-05-09T16:42:59.170" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2873" PostTypeId="2" ParentId="2865" CreationDate="2017-05-09T16:55:13.547" Score="8" Body="&lt;p&gt;There was a relationship between Sony and Nintendo starting in 1988 and into the early 1990s as someone in Sony was looking to get into the video game business after seeing how successful the Famicom was. Agreements were made with Nintendo to produce a CD-ROM technology add-on and work was started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Prototypes were demonstrated in the early 90s which were compatible with the Super Nintendo, but also had additional capabilities based on some custom Sony hardware. Unfortunately, due to disagreements between Sony and Nintendo which mostly were around who retained the rights on the SNES-CD format, Nintendo pulled out and went with Sony's rival Philips for a similar component who would allow for Nintendo to retain their rights and tight control over content released for the device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see more information at &lt;a href=&quot;https://en.wikipedia.org/wiki/Super_NES_CD-ROM&quot; rel=&quot;noreferrer&quot;&gt;this wikipedia page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I remember reading in books over the years, Sony was now sitting on this technology that they had developed and decided that they would take a gamble at going into the video game business. Ultimately with a few improvements this came out as the Sony PlayStation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now Sega did release a CD add-on for their popular Genesis console. However, I don't believe Sega ever had a relationship with Sony in the development of this device. The release of it, however, did coincide more-or-less with the development of the SNES-CD work. Sega's next console, the Sega Saturn, was CD-ROM based but I don't believe they ever leveraged Sony as they would have been a competitor by then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One final note is that despite the development of the SNES-CD device, Nintendo did make the decision to not release any CD-ROM based devices until the release of the 2001 GameCube.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2017-05-09T16:55:13.547" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2874" PostTypeId="2" ParentId="2866" CreationDate="2017-05-09T17:04:00.943" Score="10" Body="&lt;p&gt;If you want to go all the way back, the first stored-program electronic computer was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Small-Scale_Experimental_Machine&quot; rel=&quot;noreferrer&quot;&gt;Manchester Small-Scale Experimental Machine&lt;/a&gt; (aka &lt;em&gt;Baby&lt;/em&gt;). Featuring 32 words of storage and seven instructions, its first program was run on 21st June 1948. The program successfully found the highest factor of 262144 to be 131072, and took almost an hour to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Baby could only subtract, and its one conditional instruction could only skip the next instruction if the accumulator was negative. Nonetheless, several programs were written for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's that first program, transcribed into more readable opcodes than were used at the time, from Joseph Adams' &lt;a href=&quot;http://jcla1.com/blog/baby-emulator/&quot; rel=&quot;noreferrer&quot;&gt;Baby Emulator&lt;/a&gt; distribution:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; This is the original factor finding program that was run on the SSEM in Manchester aka &quot;the Baby&quot;&#xA;; Run with: gobaby -t -l 27 -p=f examples/factor.asm [run-time ~ 15ms]&#xA;; Keep in mind, exection on the original machine took nearly an hour, same goes for the replica.&#xA;&#xA;00  JMP  0&#xA;; Initialization&#xA;01  LDN 24          ; Loads to Acc -(no. to be factored - 1) = initial -b test value&#xA;02  STO 26          ; Stores the initial –b test value in line 26&#xA;03  LDN 26          ; Loads initial +b value into Acc&#xA;04  STO 27          ; Stores the initial +b test value in line 27&#xA;&#xA;; Do subtractions using the current b test value, check sign of difference, jump back if 0 is not passed yet&#xA;05  LDN 23          ; Loads in no. to be factored to Acc.&#xA;06  SUB 27          ; Subtracts the latest +b test value from the current Acc value&#xA;07  CMP             ; Jumps to execute line 9 if Acc is now negative.&#xA;08  JRP 20          ; Loops back to execute from line 6 again if Acc value not yet negative&#xA;&#xA;; Form a remainder, Test it and Stop if it is Zero (because we have a result then)&#xA;09  SUB 26          ; Subtract current -b test value from Acc (so adds +b back on).&#xA;                    ; By adding +b back on, we identify if subtractions have overshot 0&#xA;                    ; by less than the amount +b, in which case b isn’t a factor.&#xA;                    ; If instead we get back to 0 exactly, then it must be a factor.&#xA;10  STO 25          ; Stores the calculated overshoot difference value in line 25.&#xA;                    ; If this is 0, we’ve found the factor. If it’s +ve, we haven’t.&#xA;11  LDN 25          ; Loads negative of line 25 overshoot difference value.&#xA;                    ; If a negative no is loaded now, then we haven’t got a factor.&#xA;                    ; If a non negative no is loaded it must be 0 and we have the factor.&#xA;12  CMP             ; If Acc is negative: Jumps to execute from 14 with a new test divisor.&#xA;                    ; If Acc is not negative: Execute next line 13 to Stop.&#xA;13  STP             ; STOP. Acc was NOT negative so Divisor was found. Answer is in Line 27.&#xA;&#xA;; Form a new divisor b to be tested, then jump back and test it as a possible factor using subtractions&#xA;14  LDN 26          ; Load the last tested b value as a positive Acc value.&#xA;15  SUB 21          ; Decrement the last tested b value by 1.&#xA;16  STO 27          ; Store new +b test value in line 27.&#xA;17  LDN 27          ; Load new –b test value into Acc.&#xA;18  STO 26          ; Store new -b test value in line 26.&#xA;19  JMP 22          ; Execute subtractions from line 5 again using new test b value.&#xA;&#xA;; Fixed data&#xA;20  NUM -3          ; Value for use in the JRP jump instruction in line 8.&#xA;21  NUM  1          ; Value for decrementing value of the test b value in line 15.&#xA;22  NUM  4          ; Value for use in the JMP jump instruction in line 19.&#xA;23  NUM -262144     ; Negative form of the number to be factored.&#xA;24  NUM 262143      ; First b value to check as being a factor of number in line 23.&#xA;&#xA;; Variable data written to during execution (initially all zero)&#xA;25  NUM  0          ; Latest overshoot difference (written by line 10).&#xA;26  NUM  0          ; Latest -b value under test (written by line 2 or 18).&#xA;27  NUM  0          ; Latest +b value under test (written by line 4 or 16).*&#xA;28  NUM  0          ; Not used.&#xA;29  NUM  0          ; Not used.&#xA;30  NUM  0          ; Not used.&#xA;31  NUM  0          ; Not used.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-05-09T17:04:00.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2875" PostTypeId="1" CreationDate="2017-05-09T18:11:13.890" Score="13" ViewCount="2189" Body="&lt;p&gt;I have many GWBasic programs peppered with Epson-specific escape sequences (ESC/P). Unfortunately I no longer have any printers that support these escape sequences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way I can convert these programs to a more usable format whilst preserving the formatting described by the escape sequences?&#xA;[![esc\p codes&lt;/p&gt;&#xA;" OwnerUserId="5048" LastEditorUserId="5048" LastEditDate="2017-05-10T17:24:58.583" LastActivityDate="2020-04-22T00:28:43.140" Title="How can I convert Epson escape codes to a more usable format?" Tags="&lt;data-preservation&gt;" AnswerCount="7" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2876" PostTypeId="1" AcceptedAnswerId="2879" CreationDate="2017-05-09T18:20:30.777" Score="18" ViewCount="2610" Body="&lt;p&gt;I've been reading about the fundamentals of computer architecture, but I think I could get a better grasp of the basics if I could could have an actual device to play with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had considered building a 2- or 4-bit device on a breadboard with &quot;switches and blinky lights,&quot; but I think that a &lt;em&gt;ready-made&lt;/em&gt; machine that I can interact with, code/decode, and disassemble/reassemble might be a better place for me to start. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Would a retro-computer, say from the the 70's or 80's, be good for this purpose?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FYI, I've been considering an original Apple II for many reasons, including its hobbyist-friendly design, a wealth of documentation, and a fondness for its main inventor, Steve Wozniak. But after seeing the high price of them on eBay, I'm considering other systems too. &lt;/p&gt;&#xA;" OwnerUserId="5049" LastEditorUserId="5049" LastEditDate="2017-05-10T15:05:05.230" LastActivityDate="2017-08-04T20:37:24.783" Title="Can a retro-computer be a useful way to learn computer-architecture fundamentals?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;history&gt;&lt;motorola-68000&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2877" PostTypeId="2" ParentId="2875" CreationDate="2017-05-09T19:16:24.227" Score="1" Body="&lt;p&gt;You cannot expect accurate results because the basic units of these ESC/P commands depend on the printer. For example, 9-pin printers often used a basic line spacing of 1/216 inch (1/3 * 1/72), while 24-pin printers used 1/360 inch (1/5 * 1/72) instead. For the horizontal direction, the spacing may be anything from 1/60 inch to 1/360 inch, and it is printer-dependent which command selects which density. 24-pin printers often support triple and/or quadruple density modes which are completely non-standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, show us the ESC/P codes in your programs and the printer they have been written for and we may be able to help you.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2017-05-09T19:16:24.227" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="2878" PostTypeId="2" ParentId="2875" CreationDate="2017-05-09T19:24:08.513" Score="17" Body="&lt;p&gt;If you can get your output to a file using redirection, then you can use the Linux open-source project called &lt;code&gt;dotprint&lt;/code&gt; to convert the file into a PDF document for printing on a modern printer, viewing on-screen, or transmitting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;code&gt;dotprint&lt;/code&gt; README:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;dotprint is a tool that can be used to convert text files that include escape sequences for dot matrix printers into PDF files.&#xA;  Nowadays you are not likely to come across such files often but they were common in the &quot;bad old days&quot; of DOS. Programs would often assume an &quot;epson-compatible&quot; dot matrix printer and would embed the escape sequences (for e.g. condensed or expanded font) into the output.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The source code and instructions are &lt;a href=&quot;https://github.com/zub2/dotprint&quot; rel=&quot;noreferrer&quot;&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-05-09T19:24:08.513" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2879" PostTypeId="2" ParentId="2876" CreationDate="2017-05-09T22:00:29.607" Score="15" Body="&lt;p&gt;The main benefit for learning computer system architecture with a retrocomputer, compared to a modern computer, is accessibility of the hardware. Retrocomputers are much simpler than modern systems in terms of both the hardware and the system software. By design and necessity, programming on a retrocomputer means often programming the &lt;strong&gt;bare metal&lt;/strong&gt;, and that means &lt;strong&gt;understanding how the machine works in exquisite detail&lt;/strong&gt;. At the same time, you get the aid of a big software library (often including a built-in BASIC interpreter) that shows off what's possible with the hardware, plus a fully self-contained environment to program in, plus a simple hardware architecture that can easily support hardware hacking too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The commenter above makes a very valid point about Arduino, which also is designed for this sort of bare metal software hacking and building your own hardware add-ons. I think the thing you would miss out on is the fascinating history of the retrocomputers, and the fact that they are normally far more sophisticated than just the CPU+GPIO that you get with Arduino. Many retrocomputers have unique and powerful coprocessors for sound and graphics. At minimum, they all support basic peripherals like keyboard, mouse/joystick, and video display. You'd have to attach some primitive proxy for these I/O device to Arduino to make it a full, self-contained computer system that you can program or use stand-alone. Then again, for programming efficiency, having something tethering you to a modern device can be very helpful. And that is possible to do and equally easy with either Arduino or a retrocomputer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original Apple ][ is an expensive retrocomputer because it is rather rare and collectible. But you can acquire an Apple //e, //c, or IIgs for a much more reasonable price. Of all of these, the IIgs is the most sophisticated and probably offers the most long-term hacking potential. But you could get very far &quot;down the rabbit hole&quot; with any of them. And, I also think you'd be happy with other popular 1980s 8-bit machine like Commodore, Atari, IBM 5150, or Tandy (showing my North American persuasion). Regardless, be sure to get a machine that comes with or can be adapted to a video display that you have available, and also investigate the supported hobbyists projects that will help you move files and disk images between the modern world and your retrocomputer of choice.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-05-10T02:06:05.473" LastActivityDate="2017-05-10T02:06:05.473" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2880" PostTypeId="2" ParentId="2875" CreationDate="2017-05-10T06:50:20.397" Score="1" Body="&lt;p&gt;There is a nice (commercial, but relatively cheap) program called &lt;em&gt;&lt;a href=&quot;https://www.kilgus.net/qpcprint/&quot; rel=&quot;nofollow noreferrer&quot;&gt;QPCPrint&lt;/a&gt;&lt;/em&gt; that does on-the-fly translation from Epson ESC/P escape codes received on a virtual LPT port to whatever modern printer you might have connected to your PC. This program allows you to leave the programs that were built to print to Epson printers completely unchanged and print to a modern printer.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2017-05-10T06:50:20.397" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2881" PostTypeId="2" ParentId="2876" CreationDate="2017-05-10T08:57:11.683" Score="6" Body="&lt;p&gt;I would say the answer to the question is no.There are two reasons for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, a retro computer is still a box with a circuit board in it and some chips soldered to it. Actually looking at its insides isn't going to leave you any more the wiser than looking at the insides of a modern desktop PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly retro computers - well, 1970s and 80s era microcomputers won't teach you very much about computer architecture generally because they tend to be extremely crude machines. You could understand a Commodore PET's internal workings in a great deal of detail (and I do, having written an emulator) but it won't tell you anything about virtual memory, caching, multithreading, pipelines and any one of the many concepts that were omitted from it thanks to the extreme cost of adding them to a micro computer of the time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best way to understand a particular computer's architecture is to write (or build, if you are competent at electronics) an emulator for that computer. If you just want to understand how computers work generally, may I recommend a book: &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B004HHORGA&quot; rel=&quot;noreferrer&quot;&gt;The Elements of Computing Systems: Building a Modern Computer from First Principles&lt;/a&gt; by Noam Nisan. It walks you through building a software emulation of a 16 bit computer from the basic TTL gates upwards. It does suffer a little from my second criticism in that it stops before you get to a discussion on things like virtual memory and it also incorrectly describes the architecture you build as a Von Neuman machine rather than what it is which is Harvard architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another useful exercise is to try to write answers for questions on here about computer architecture (you don't have to actually submit them if you are not confident).  For example, researching &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2784/how-did-the-original-apple-macintosh-and-atari-st-use-protected-mode&quot;&gt;this question&lt;/a&gt; or &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2804/why-did-mac-os-7-perform-poorly-with-virtual-memory-enabled&quot;&gt;this one&lt;/a&gt;, will tell you a lot about how virtual memory management works in a lot of machines.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-05-10T08:57:11.683" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2882" PostTypeId="2" ParentId="2876" CreationDate="2017-05-10T11:54:58.230" Score="5" Body="&lt;p&gt;Yes and No.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, retro computers can be useful to learn how a computer works (what components you need for a system to be useful, and how those components are connected together), but &quot;Computer Architecture&quot; as a topic requires you to understand &lt;em&gt;many&lt;/em&gt; ways that systems may be put together and the pros and cons of each, and learning how any one retro computer works isn't an efficient way to reach that goal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to pursue this anyway, look for a system that supports processor and memory upgrades, as well as upgrading from slower disk systems to faster disk systems.  Start with the minimum configuration and upgrade parts as you hit performance/resource limits so that you can see how upgrades don't really fix performance issues as much as they move system bottlenecks to a different part of the system.  Unfortunately the best systems for this kind of thing aren't so easy to find nowadays (and parts you can use for upgrades even less so).&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-05-10T11:54:58.230" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2883" PostTypeId="1" CreationDate="2017-05-10T15:02:27.133" Score="12" ViewCount="1132" Body="&lt;p&gt;I'm trying to learn the fundamentals of computer architecture (more &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2876/5049&quot;&gt;here&lt;/a&gt;), and it occurred to me that a retro version of an Arduino or Raspberry Pi could be useful for that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Does such a thing exist, at least for the purpose stated above?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikipedia's entry for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Single-board_microcontroller?wprov=sfsi1&quot; rel=&quot;noreferrer&quot;&gt;&quot;Single-board microcontroller&quot;&lt;/a&gt; has an &quot;Origins&quot; section, which looks interesting, but I'm having a hard time interpreting it. I also came across a &lt;a href=&quot;https://en.wikipedia.org/wiki/Microprocessor_development_board?wprov=sfsi1&quot; rel=&quot;noreferrer&quot;&gt;&quot;Microprocessor development board&quot; entry&lt;/a&gt;. They both discuss &quot;development systems&quot; or &quot;development kits.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given my ignorance, I'm not sure if one of these would be useful, practical, or affordable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit / Addendum:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify, I'm looking for some sort of kit or system akin to today's Arduino/RasPi boards that could act like a simple general-purpose computer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm unsure of the precise terminology of these newer gadgets, but Wikipedia calls them &lt;em&gt;single-board&lt;/em&gt; microcontrollers, i.e., one &quot;built onto a single printed circuit board.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, I don't care if everything exists on just one board, per se, but I'd like a set-up with elements like a CPU, registers, ALU, RAM, ROM, I/O ports, and some human-friendly way to input &amp;amp; output data. &lt;/p&gt;&#xA;" OwnerUserId="5049" LastEditorUserId="5049" LastEditDate="2017-05-16T03:05:44.603" LastActivityDate="2017-10-27T22:58:57.583" Title="Do retro-microcontrollers exist?" Tags="&lt;hardware&gt;&lt;history&gt;" AnswerCount="9" CommentCount="9" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2884" PostTypeId="2" ParentId="2883" CreationDate="2017-05-10T19:40:32.613" Score="8" Body="&lt;p&gt;Sure thing they exist! For example, i8048 is a good example, not widely used today and one of the founders of so-called 'microcontrollers'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've eventually found this: &lt;a href=&quot;http://github.com/AngryTroll/i8048_board&quot; rel=&quot;noreferrer&quot;&gt;retro i8048 board&lt;/a&gt;, which looks much like contemporary arduino boards :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we take only age of the architecture as the criterion of 'retro', then there are also i8051 family, PIC12 family, 68HC05 family and many more, yet not very known to me.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2017-05-10T19:40:32.613" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2886" PostTypeId="2" ParentId="2875" CreationDate="2017-05-10T20:28:05.940" Score="5" Body="&lt;p&gt;ESCParser (github: &lt;a href=&quot;https://github.com/nzeemin/ukncbtl-utils/wiki/ESCParser&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/nzeemin/ukncbtl-utils/wiki/ESCParser&lt;/a&gt;, win32 binary: &lt;a href=&quot;https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ukncbtl/ESCParser.zip&quot; rel=&quot;noreferrer&quot;&gt;https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ukncbtl/ESCParser.zip&lt;/a&gt;) converts a variant of ESC/P to PostScript and SVG.&lt;/p&gt;&#xA;" OwnerUserId="87" LastActivityDate="2017-05-10T20:28:05.940" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2887" PostTypeId="2" ParentId="2883" CreationDate="2017-05-11T01:45:30.650" Score="8" Body="&lt;p&gt;The &lt;a href=&quot;https://olduino.wordpress.com/&quot; rel=&quot;noreferrer&quot;&gt;olduino&lt;/a&gt; boards use either an RCA 1802 or a Z80 to reproduce a subset of Arduino functionality. These are microprocessors pretending to be microcontrollers, though, and the educational scope seems limited.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-05-11T01:45:30.650" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2888" PostTypeId="1" CreationDate="2017-05-11T02:01:18.280" Score="8" ViewCount="506" Body="&lt;p&gt;As the 8-bit systems hit their peak in the mid-1980s, breaking the 64K barrier was all the rage. Commodore, Apple, Atari, and Tandy all shipped new 8-bit machines that came standard with 128K. Of course, this introduced the need for new memory controllers and programming models, since all these machines had only a 64K address range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that Tandy's solution with the Coco 3 was using Dynamic Address Translation, and the unexpanded 128K Coco 3 presented as 16x8K pages. Commodore and Apple used bank switching to select one or the other 64K memory bank. I think Atari did the same, but I'm not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My gut feeling is using the 128K with the coarse bank switching approach would not work very well. Swapping code/data pages around using DAT seems like a more feasible and familiar programming model to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll go a little over the top perhaps, and ask: Was the bank switching approach basically a &lt;strong&gt;gimmick&lt;/strong&gt; that allowed the Commodore and Apple machines to be marketed as having 128K, even though the additional memory was not very useful (beyond a RAM disk)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise, is it true that the DAT approach as provided by the Coco 3 is a superior way to expand memory above 64K and keep the programming relatively simple?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(A great answer would probably include an example of how to use DAT effectively, and which isn't possible with bank switching).&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-05-11T23:14:03.243" LastActivityDate="2017-05-12T13:13:18.850" Title="Which memory management is easiest to program - CoCo 3 or C128/Apple //e?" Tags="&lt;commodore-64&gt;&lt;programming&gt;&lt;commodore-128&gt;&lt;coco&gt;" AnswerCount="1" CommentCount="19" FavoriteCount="0" ClosedDate="2017-05-15T15:44:39.750" ContentLicense="CC BY-SA 3.0" />
  <row Id="2889" PostTypeId="1" AcceptedAnswerId="2891" CreationDate="2017-05-11T07:00:39.347" Score="16" ViewCount="3551" Body="&lt;p&gt;As I understand, on the Commodore Amigas, the kickstart copies itself into a region of memory which is later made read-only. Does kickstart also copy workbench into this region?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does kickstart find workbench? It might be on a floppy; so is it stored in a particular location, like a MS-DOS boot floppy has a reserved region for booting? Or does kickstart load a particular file by its name? And what does kickstart do to the file once it's been loaded? Does it jump to a particular routine or something else?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2017-05-12T13:17:19.990" Title="How does the Kickstart ROM load and start workbench?" Tags="&lt;amiga&gt;&lt;amiga-kickstart&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2890" PostTypeId="2" ParentId="2244" CreationDate="2017-05-11T09:43:52.693" Score="7" Body="&lt;p&gt;The UK Government has a thing called Premium Bonds. You lend the government some money. Instead of giving you interest, they enter you in a draw every month for a cash prize.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The winning bond numbers are chosen by a computer called ERNIE. The first ERNIE was created in 1957 by Tommy Flowers (who created the ultimate fully electronic retro computer, the Colossus) amongst others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It used the signal noise generated by a neon gas diode valve as a source of randomness. Even the modern version doesn't rely on the normal means of generating randomness in computers but on thermal noise generated by transistors.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;were cryptographically-secure sources of randomness commonly used?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The answer to this question is interesting because &quot;cryptographically secure&quot; is a moving target. It is, however, reasonable to say that no general purpose civilian computer had a cryptographically secure random number generator before the widespread adoption of the Internet. Apart from the fact that, for the most part, they were too slow to do properly secure cryptography there were no use cases. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-05-11T09:43:52.693" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2891" PostTypeId="2" ParentId="2889" CreationDate="2017-05-11T12:27:46.837" Score="19" Body="&lt;p&gt;The Amiga Kickstart ROM is made up of numerous modules, libraries, and device drivers. One of the modules is &lt;em&gt;Strap&lt;/em&gt;, as in Bootstrap. After I/O and expansion devices have been enumerated and initialized (including any expansion ROM they contain, which provide more libraries or device drivers), &lt;em&gt;Strap&lt;/em&gt; takes over bootstrapping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bootable disk devices have already been enumerated by Kickstart, and Strap's job is to boot a DOS from the highest priority bootable disk. If the trackdisk device driver detects a floppy in drive DF0, that is the default highest priority, so the Amiga will boot from floppy. Floppy boot starts by searching the first two sectors of the disk for a &quot;Boot block&quot;. If it does not find a custom boot block, then it jumps into the Kickstart dos.library, and you boot into a shell. If it finds a boot block, then it loads it into newly allocated RAM and jumps to it. The boot block code can use the trackdisk.device to continue loading and booting custom code, which is what most games will do. It is noteworthy that the custom code can choose whether or not to use the filesystem driver from Kickstart, or just do I/O via the trackdisk.device and have data and code stored on the floppy based on its own bespoke track/sector layout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is no custom boot block, then dos.library has its own method of initializing and using the filesystem to continue booting. It follows the AmigaDOS commands provided in S:Startup-Sequence, which is the equivalent of MS-DOS's Autoexec.bat. There is also a workbench.library in LIBS: that gets loaded at this point, thus providing the Amiga graphical shell, which is populated by icons, stored in &quot;.info&quot; files, which are found by scanning the filesystem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do not insert a floppy, then Strap looks at its enumeration of bootable disk devices, selects the highest priority boot device, and starts it booting by jumping to ROM code provided by that device's autoboot controller ROM. From here, the process depends on the autoboot ROM, but it is similar to the floppy boot process. The main difference is that hard disks contain Rigid Disk Blocks, and those blocks can contain filesystem drivers. So a hard disk also does not have to use the filesystem driver in Kickstart. It can load a bespoke filesystem from its disk first, then continue the boot process using that filesystem. This is how advanced filesystems like SFS and PFS3 work. S:Startup-Sequence gets executed by dos.library and workbench.library gets loaded from LIBS:, as above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If &lt;em&gt;Strap&lt;/em&gt; found no floppy or bootable device, then it displays the familiar &quot;Insert Workbench&quot; disk screen, and continues scanning for a boot disk to be inserted by the user.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-05-11T14:50:29.423" LastActivityDate="2017-05-11T14:50:29.423" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2892" PostTypeId="2" ParentId="1394" CreationDate="2017-05-11T13:50:56.883" Score="7" Body="&lt;p&gt;Build it on a Linux VM of the era. The tools will probably expect command lines of GCC of the time, as well as libraries current at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd say something like Debian 2.0 or Redhat 7 (not RHEL!) should be OK.&lt;/p&gt;&#xA;" OwnerUserId="4973" LastActivityDate="2017-05-11T13:50:56.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2894" PostTypeId="2" ParentId="1394" CreationDate="2017-05-11T14:33:21.920" Score="1" Body="&lt;p&gt;I did a quick search for macOS versions of the Gameboy Development kit and I found this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/x43x61x69/gbdk-osx&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/x43x61x69/gbdk-osx&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;it doesn't build on my Mac but it looks like the issue is just one of locating build directories properly. However, it does include the source code of &lt;code&gt;lcc&lt;/code&gt; and &lt;code&gt;maccer&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-05-11T14:33:21.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2895" PostTypeId="2" ParentId="2833" CreationDate="2017-05-11T17:02:43.567" Score="0" Body="&lt;p&gt;Holding the option button while turning on the 800xl should take you to the built in notepad. It also bypasses the self tests I think.&lt;/p&gt;&#xA;" OwnerUserId="5057" LastActivityDate="2017-05-11T17:02:43.567" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2896" PostTypeId="2" ParentId="2766" CreationDate="2017-05-11T17:23:56.510" Score="2" Body="&lt;p&gt;In 1985 I paid $50 for a parallel printer adapter for my Atari 800xl to connect it to a standard Canon printer. The most popular one at the time called an ape face was around $60. The Atari 850 interface which was both serial and parallel was coming down in price but was still over $100. The 1050 disk drive was around $180 while the non Atari drives that were true double density or quad density started at $350 up to $700. The hard drives at the time all came with their own interface boards that only worked with the specific drive that came with it. I remember 5 mb drives being around $1000 and Corvus which had an interface board that also networked Atari's together and some other functions I don't recall sold a 20 mb drive which was close to $3000. I remember many home brew type joystick interfaces that could use the basic Atari stick with many systems but I don't remember prices.&lt;/p&gt;&#xA;" OwnerUserId="5057" LastActivityDate="2017-05-11T17:23:56.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2897" PostTypeId="2" ParentId="2883" CreationDate="2017-05-11T17:37:33.853" Score="7" Body="&lt;p&gt;I, of course, think the Olduino is terrifically educational but if you want something simpler, both the 1802 version and the Z80 version are based on the &lt;a href=&quot;http://www.sunrise-ev.com/projects.htm&quot; rel=&quot;noreferrer&quot; title=&quot;TMSI&quot;&gt;Membership Card series of microcomputer kits&lt;/a&gt;.  The membership card kits are self-contained, programmed with switches, and meant to fit in an altos tin.  The Olduino's are programmed in C or assembly language on a mac, windows, or linux computer and the code is downloaded like an arduino.  They're a bit bigger than the arduino but they can take most arduino shields so you can have a &lt;a href=&quot;https://olduino.wordpress.com/vcfmw/ethernet/&quot; rel=&quot;noreferrer&quot;&gt;web server running on a 1970's era processor attached to a standard Ethernet card&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="5058" LastActivityDate="2017-05-11T17:37:33.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2898" PostTypeId="2" ParentId="2685" CreationDate="2017-05-11T17:48:04.963" Score="2" Body="&lt;p&gt;In late summer 1994 I upgraded my original IBM AT to DOS 6.22. I had the OS on a 20mb drive and games on a 40mb drive. It was using an Intel AboveBoard with 2 mb memory which I had been using since DOS 5. It was using an enhanced 32kb EGA video card. I do not recall having any difficulty with any of the installed games. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first Packard Bell Pentium 75 came with DOS 6.22 and Windows 3.1 for workgroups on it. That ran some of my old games too fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I currently have an IBM Thinkpad 360c which is a 486 DX 50 that runs my old games. It has DOS 6.22 and Win3.1 for workgroups.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have never tried FreeDOS on any machine that old. I do use it on an old Athlon II but some games just don't run correctly. Any game with a PCI or AGP graphics incompatibily will have issues. Not many do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mark&lt;/p&gt;&#xA;" OwnerUserId="5057" LastActivityDate="2017-05-11T17:48:04.963" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2899" PostTypeId="2" ParentId="2883" CreationDate="2017-05-12T09:03:28.567" Score="15" Body="&lt;p&gt;8051 and 8052 are cores of old microcontroller, that have aged quite well, doing what they did but in packages much smaller than &quot;in the days of yon&quot;. and are implemented to this day as cores of special-purpose chips, making them programmable - things like voltage regulators, battery charger controllers, infrared interfaces, stepper motor controllers and so on often get 8052 core functionality making them &quot;arbitrarily customizable&quot;. The cores have also been implemented in VHDL, and as result you can make an arbitrary chip in FPGA and give it a &quot;CPU&quot; within the same chip by importing the '52 core into your code and connecting it to whatever custom circuitry you projected. Thanks to support for embedded C, BASIC and a rather friendly assembler, they are also nice to program, and due to tiny architecture, they are not power hungry and can be seriously miniaturized - a special purpose chip 3x3mm size, serving as obscure peripheral of your device, can be made &quot;fully programmable&quot; thanks to them.&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2017-05-12T09:03:28.567" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2900" PostTypeId="2" ParentId="2888" CreationDate="2017-05-12T10:12:31.333" Score="10" Body="&lt;p&gt;Neither CoCo nor Retro-Apples are my specific area of expertise - I'll try to answer from a more European viewpoint. Concepts and technical solutions are similar, however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, &lt;em&gt;all&lt;/em&gt; the technologies you describe that allow the adaptation of more memory than the CPU would normally be able to address are, at least in my terminology, denoted under the general term &lt;strong&gt;Bank Switching&lt;/strong&gt;. The implementations of such mechanisms, did, however, differ in terms of &lt;em&gt;memory granularity&lt;/em&gt; (that is, size of banks - Which was very often selected as 16kB, which seems kind of appropriate for 64kB address space) and &lt;em&gt;memory flexibility&lt;/em&gt; (that is, which bank can be superimposed onto which area in the addressable memory space). The term &lt;em&gt;bank&lt;/em&gt; is also kind of unspecific - Some vendors referred to a bank as the &lt;em&gt;source memory area&lt;/em&gt; in the larger address space, some others used the term for the &lt;em&gt;target memory area&lt;/em&gt; in the CPU's address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some computers also had the limitations that parts of the address space were dedicated to specific purposes like memory-mapped I/O (not on the Z80, typically) and screen memory (the ZX Spectrum 128, for example, always had screen memory fixed at 0x4000 and above). Other computers like the Enterprise could feed the screen more flexibly from selectable memory pages or, like the Cambridge Z88, didn't have screen or other dedicated memory areas in a traditional sense at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some examples:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Cambridge_Z88&quot; rel=&quot;noreferrer&quot;&gt;Cambridge Z88&lt;/a&gt; is able to address 3.5MB of RAM that is logically segmented into max. 256 16kB pages. Each of those pages can be mapped onto any of four &lt;em&gt;banks&lt;/em&gt; of Z80 address space. &lt;em&gt;Granularity:&lt;/em&gt; 16kB, &lt;em&gt;Flexibility:&lt;/em&gt; full. (Being a kind of early &quot;notebook computer&quot;, much of this memory area was normally used for storage in battery-buffered RAM, EPROM or, later, Flash memory)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Enterprise_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Enterprise 128&lt;/a&gt; uses a very similar scheme, 16kB page size, max. addressable memory 4MB, page/bank size 16kB, full flexibility. Like the Z88, the Enterprise provides ROM routines for linear addressing of data and code and moving data and code out and about within the larger address space and thus makes bank switching extremely transparent to the programmer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?c=35&quot; rel=&quot;noreferrer&quot;&gt;ZX Spectrum 128&lt;/a&gt; (&quot;Toastrack&quot;) had a much more limited banking logic. Like the above, it used 16kB pages, and divided its 128kB RAM + 16kb (48k &quot;compatibility&quot; ROM) + 16kB (128k &quot;new&quot; ROM) into 16kB slices. It did, however, have limited flexibility in what pages could be mapped into what bank in the Z80 address space: The lower 16kB bank could only be occupied by either one of the 16kB ROMs (So, that area was dedicated to ROM and made the Toastrack CP/M incapable, unlike later Spectrums), the next bank was fixed for screen memory pages and could only map pages 5 and 7 of the 128kBytes of RAM. Bank 3 was fixed and could not be paged in or out at all, and only Bank 4 could actually receive any of the 8 16kB RAM segments. The original Toastrack ROM did not provide a lot of support for bank switching - You basically have the mechanisms to influence the pages, but beyond that, for example, to move memory contents from one bank to another, you were on your own and had to decide which pages to page in and where.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qKnIY.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qKnIY.jpg&quot; alt=&quot;Picture from http://www.robeesworld.com/blog/35/loading_zx_spectrum_snapshots_off_microdrives_part_two&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later (Amstrad-made) ZX Spectrum models like the +2 and +3 had a more flexible banking scheme.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers based on the 6502 or similar CPUs had more challenges with large memory and bank switching than Z80-based computers. The 6502 zero page (or rather, the lower 1kB) is a crucial memory area that cannot be easily moved about in the address space as it holds address information for indirect addressing and other crucial information like the fix-addressed and size-limited CPU stack. Also, 6502 and similar CPUs typically use memory-mapped I/O, so we have another area that needs to fit into the 64k address space. You could easily argue that memory banking &lt;strong&gt;had to be&lt;/strong&gt; more complicated on such a CPU than on the Z80. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C128 MMU had special mechanisms to relocate this area and always kept the lower 1k mapped to the same RAM.  A C128 also had the additional challenge that it needed to orchestrate and accommodate two CPUs - the 8510 and the Z80 with the same memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not a C128 expert, but understand the following: The C128 had provisions to be able to cope with a maximum amount of 256kB of RAM internally and used sort of fixed memory configurations. While the zero page+ was handled specifically and always paged in from bank 1, you could either have 0x03ff-0xffff all RAM from Bank 0 (one half of the 128k available), or all RAM from Bank 1 (the other half of the 128k), or 16k from Bank 1 and the rest occupied with ROM and either I/O or character ROM. On top of that, the MMU had a &lt;em&gt;common RAM&lt;/em&gt; feature, that allowed to partially &quot;override&quot; the RAM configuration in a way that would configure certain memory areas of pre-selected sizes (1k-16k) to always map to Bank 1 memory. All in all, extremely complicated...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With respect to ease of programming, the &quot;fixed page size, fully flexible mapping&quot; approach definitely sounds likethe most simple, easy to understand and program way of doing things on a very low level. Juggling with the C128 MMU and paging registers on a low level doesn't look like fun to me. If, however, the on-board ROM supported you in providing calls and data access routines into the whole memory like the C128 (and, for example, the Enterprise and Z88, where you basically handed in a register triple instead of a register pair to the ROM routines in order to linearly address memory in the 4MB range) did, all of those complications basically became rather transparent to the programmer, so from an applications programmer view, I wouldn't really prefer one over the other.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-05-12T13:13:18.850" LastActivityDate="2017-05-12T13:13:18.850" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2901" PostTypeId="2" ParentId="2889" CreationDate="2017-05-12T13:17:19.990" Score="8" Body="&lt;p&gt;Your opening statement is only partly correct:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As I understand, on the Commodore Amigas, the kickstart copies itself into a region of memory which is later made read-only.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is true for the Amiga 1000 computer. The A1000 contains a small boot ROM which contains code to self-test and then request a Kickstart disk. Kickstart is loaded from disk into a special area of RAM called the Write Controlled Store, WCS. Then the boot ROM flips the WCS into read-only mode and reboots - this time the boot ROM is disabled and invisible, Kickstart is present where it needs to be in read-only memory, and Kickstart boots the machine. &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1140/how-did-the-amiga-1000-wcs-write-controlled-store-for-kickstart-work&quot;&gt;I asked a question about the A1000 WCS here&lt;/a&gt; which you might like to read to find out more details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For all other Amigas, there is no boot ROM or WCS, and no Kickstart disk. Instead Kickstart is in a physical ROM - at power on, Kickstart is already in the right place in the memory map and, obviously for a ROM chip, is read-only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I understand that some Amiga 3000 models may be a special case - they have something called Superkickstart which can load Kickstart from somewhere else, but I do not know much more than that.)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does kickstart also copy workbench into this region?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, not exactly, but portions of &quot;Workbench&quot; are actually part of Kickstart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we are referring the the Workbench disk, then no - files on the disk are loaded into RAM and are lost whenever the Amiga is rebooted. They are not treated specially, and are not put into write-protected memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we are referring to the Workbench &quot;application&quot;: some of the Workbench app is on disk, but most of it is in Kickstart - &lt;code&gt;workbench.library&lt;/code&gt; contains the Workbench code. The &lt;code&gt;LoadWB&lt;/code&gt; command merely locates &lt;code&gt;workbench.library&lt;/code&gt; and tells it to start Workbench.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(In another special case, the Amiga 4000T ROMs, and the later 3.x ROMs from Cloanto, do not have &lt;code&gt;workbench.library&lt;/code&gt; in ROM, requiring that to be on disk instead. This is due to space constraints - space on the 512KiB ROM is at a premium, but it was relatively easy to shift &lt;code&gt;workbench.library&lt;/code&gt; onto disk and gain more space in the ROM. This is fine for hard drive based systems, but means that a lot of floppy disk apps suddenly become incompatible because they do not have workbench.library on disk.)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How does kickstart find workbench? It might be on a floppy; so is it stored in a particular location, like a MS-DOS boot floppy has a reserved region for booting?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, this is correct - floppy disks have boot sectors. Kickstart loads the boot sector into RAM and executes it. On the Workbench disk - and many other disks - the boot sector contains a simple bit of code which simply calls back into Kickstart to say &quot;yes, I'm a normal bootable disk, please boot me&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Games and demos often had custom boot sectors which loaded the game/demo code directly; boot sector viruses had their own code to install themselves in memory and then called the &quot;please boot me normally&quot; Kickstart code so they behaved normally but hid their payload.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hard disks technically have boot blocks. I believe (but I am not certain) that these are actually unused, and when booting from hard disk Kickstart always goes straight to the &quot;please boot me normally&quot; routine instead of executing boot blocks.&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2017-05-12T13:17:19.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2902" PostTypeId="2" ParentId="2828" CreationDate="2017-05-12T20:49:06.300" Score="14" Body="&lt;p&gt;Memory chips of the era were limited to an access speed of about 2MHz.  On the Atari 400/800, cycles could be given arbitrarily to either the processor or the display hardware.  On the Apple II and VIC-20, there are 65 cycles per scan line but half of each cycle is given to the processor and the other half the display hardware, whether it needs it or not.  On both machines, screen text is read out while it is being displayed.  Since text rows are 8 scan lines high, each byte of screen text will get read eight times per frame (once on each scan line where it appears).  The Apple displays a group of seven pixels on each cycle, while the VIC-20 outputs a group of eight pixels every two cycles.  The first cycle of each pair fetches a byte of text, and the second uses that byte to fetch the associated byte of character-shape data.  Color memory on the VIC-20 has its own dedicated bus so that it can be fetched simultaneously with text memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things are more complicated on the C64 since the VIC-II chip's output on every cycle is controlled by a byte of text memory (and color memory, which is fetched at the same time) and a byte of character-shape memory.  For each row of text, the VIC-II chip will have one scan line where it needs to fetch both kinds of data, using both halves of every cycle to do so (stealing the bus from the CPU); it will then remember the text data that was fetched, so that on remaining seven lines of each text row, it can use its half of 40 cycles to fetch character data associated with the already-fetched 40 bytes of text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Displaying eight scan lines of text with all eight sprites showing would require fetching 616 bytes of data, but there are only 520 cycles every 8 lines, so there would be no way to avoid having the VIC-II chip steal at least some cycles from the main CPU in at least some circumstances.  I don't know how much it would have cost to augment the VIC-II's buffer so that it could fetch 5 bytes of text data during horizontal blank every scan line rather than stealing groups of 40 cycles from the main CPU, but some cycle-stealing would have been needed to support all the sprites in any case.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-05-12T20:49:06.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2903" PostTypeId="2" ParentId="2883" CreationDate="2017-05-13T17:22:36.003" Score="12" Body="&lt;p&gt;I would suggest the PIC 16F54.  Although that part is fairly recent, it is essentially a flash-programmed version of a mask-programmed part that debuted in the 1970s.  The 1970s part had a few limitations compared with the modern parts--most notably the features that are controlled by the OPTION instruction in the newer parts were controlled by the manufacturing process in the original--but the instruction set and general architecture has remained identical in the intervening decades.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-05-13T17:22:36.003" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2904" PostTypeId="1" AcceptedAnswerId="2940" CreationDate="2017-05-13T21:13:17.667" Score="8" ViewCount="528" Body="&lt;p&gt;What was the most common business computer system of the late 70s, just before the Apple II and CP/M really started proliferating?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For concreteness, let's say we are talking about a U.S. company on the order of 100 employees, in the business of something other than computers or electronics, having a need to process orders, payroll and so forth. What would they most often have? IBM? DEC? What sort of mix of in-house operations and contracting? Was there a lot of diversity, or was there a fairly standard setup?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-07-23T07:56:01.250" Title="Typical mid-scale business computer system of the late 70s" Tags="&lt;dec&gt;&lt;ibm&gt;&lt;minicomputers&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2905" PostTypeId="1" CreationDate="2017-05-13T21:27:03.093" Score="19" ViewCount="2372" Body="&lt;p&gt;On the one hand, I get the impression that memory chips around 1980 could be accessed no faster than 2 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, the 68000, introduced in 1979, had a typical clock speed of 8 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did the latter work with the former? Admittedly the effective speed was half the rated speed, that is, the 68000 used two clock cycles as its minimum time quantum. Is that half the answer?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-03-22T01:35:26.413" Title="68000 and memory access speed" Tags="&lt;memory&gt;&lt;motorola-68000&gt;&lt;performance&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2906" PostTypeId="2" ParentId="2905" CreationDate="2017-05-13T21:41:57.443" Score="27" Body="&lt;p&gt;If you look at the datasheet of a typical DRAM chip of this era, say the &lt;a href=&quot;https://console5.com/techwiki/images/8/85/MK4116.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mostek 4116&lt;/a&gt;, it indeed has a cycle time of 375ns, so you can't access it at more than 2.6 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But don't confuse the clock rate of a microprocessor with the bus timing. Looking at figure 4-1 of the &lt;a href=&quot;http://www.nxp.com/assets/documents/data/en/reference-manuals/MC68000UM.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;68000 datasheet&lt;/a&gt;, a simple byte read or write bus cycle takes 4 CPU cycles (8 bus states; each state is half a cycle), and the simple word read or write bus cycles in figure 5-1 also takes 4 cycles, so indeed RAM access time was 2 MHz for a 8 MHz CPU clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the whole cycle determines bus access rate: The address must be valid first, then the address strobe &lt;code&gt;AS&lt;/code&gt; changes, then data is provided and validity signaled by &lt;code&gt;DTACK&lt;/code&gt; or &lt;code&gt;UDS&lt;/code&gt; resp.&lt;code&gt;LDS&lt;/code&gt;. That you see the data valid for four cycles means nothing by itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, nearly all microprocessors had a way to delay bus cycles for slower devices on the bus (&quot;wait states&quot;), so even if some CPU happened to be faster than RAM, it could always be slowed down to match RAM speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, clock rate of a microprocessor doesn't say much about how &quot;fast&quot; it is if you compare different models. For example, the Z80 typically had a higher clock than a 6502, but also needed more cycles to complete an instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, always look at the details, don't rely on raw numbers.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="7208" LastEditDate="2020-03-22T01:35:26.413" LastActivityDate="2020-03-22T01:35:26.413" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="2907" PostTypeId="1" AcceptedAnswerId="2913" CreationDate="2017-05-14T10:04:34.137" Score="23" ViewCount="2159" Body="&lt;p&gt;I keep reading of the BBC micro's &lt;em&gt;tube&lt;/em&gt; interface that was apparently designed as a co-processor interface to the 6502. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be interested in what were actual applications of this interface and what hardware could be had supporting it. In case someone has information on &lt;em&gt;how common&lt;/em&gt; those hardware expansions really were, I would be grateful as well.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-11-17T21:40:20.310" Title="What's the TUBE interface of the BBC micro all about?" Tags="&lt;bbc-micro&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2908" PostTypeId="2" ParentId="2907" CreationDate="2017-05-14T11:31:49.510" Score="15" Body="&lt;p&gt;Devices connected to the Tube weren't terribly common because they added further expense to an already rather expensive computer in the first place. &lt;a href=&quot;http://www.apdl.org.uk/riscworld/volumes/volume9/issue5/2ndproc/index.htm&quot; rel=&quot;noreferrer&quot;&gt;The 6502 second processor was £200 and the Z80 was £300&lt;/a&gt;, which is about £600 and £900 respectively in 2017 money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware-wise, it consisted of a short bidirectional FIFO used for passing messages between the two processors. The higher-level software protocol arranged message-passing, which at a minimum would proxy OS calls from the second processor to be executed on the BBC Micro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a lot of information about the Tube protocol at &lt;a href=&quot;http://mdfs.net/Software/Tube/&quot; rel=&quot;noreferrer&quot;&gt;http://mdfs.net/Software/Tube/&lt;/a&gt; which appears sufficient to implement your own second processor, as well as containing software and source code to get you started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An obvious modern implementation of a second processor would be via a FPGA softcore, and this exists in the form of the &lt;a href=&quot;http://mdfs.net/Software/Tube/Matchbox/&quot; rel=&quot;noreferrer&quot;&gt;Matchbox CoPro&lt;/a&gt; that claims support for the 65C102, Z80, 80286, 6809, 68000, PDP-11, ARM2 and 32016. &lt;a href=&quot;https://github.com/hoglet67/CoPro6502/wiki&quot; rel=&quot;noreferrer&quot;&gt;Its GitHub page&lt;/a&gt; contains VHDL designs for the hardware.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2017-05-14T11:31:49.510" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2909" PostTypeId="1" CreationDate="2017-05-14T11:46:11.150" Score="32" ViewCount="4370" Body="&lt;p&gt;Quite a few successful early microcomputers used the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502&quot; rel=&quot;noreferrer&quot;&gt;MOS 6502&lt;/a&gt; CPU. This &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502#Computers_and_games&quot; rel=&quot;noreferrer&quot;&gt;included&lt;/a&gt;, but was not limited to, systems like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_I&quot; rel=&quot;noreferrer&quot;&gt;Apple I&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II&quot; rel=&quot;noreferrer&quot;&gt;Apple II&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_PET&quot; rel=&quot;noreferrer&quot;&gt;Commodore PET&lt;/a&gt;, and Ataris. A followup known as the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6510&quot; rel=&quot;noreferrer&quot;&gt;MOS 6510&lt;/a&gt; was used as the main CPU for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_64&quot; rel=&quot;noreferrer&quot;&gt;Commodore 64&lt;/a&gt; (the floppy disk drive used its own 6502), and variants of these were used in many other systems of the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why? &lt;strong&gt;What made the 6502 the CPU of choice for so many different computer designs over several years?&lt;/strong&gt; (The Apple I was introduced in 1976, and the C-64 was introduced in 1982, which conservatively gives a time period of at least five years. I also suspect that the Apple I wasn't the first system to use the 6502, though it might well have been one of the first that were widely available.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For comparison, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8085&quot; rel=&quot;noreferrer&quot;&gt;Intel 8085&lt;/a&gt; was introduced in 1975, and could run at up to 3-6 MHz, while the 6502 was introduced in the same year but could run only at up to 1-3 MHz, both depending on variant. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8086&quot; rel=&quot;noreferrer&quot;&gt;Intel 8086&lt;/a&gt; came later, in 1978, and even the slow variants could run at up to 5 MHz; faster 8086 CPUs could be clocked at up to 10 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was it an issue of cost? Availability? Simplicity of board design? Instruction set? Or what?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What do we &lt;em&gt;know&lt;/em&gt;, and what can we &lt;em&gt;deduce&lt;/em&gt; from available information?&lt;/strong&gt; Bonus points for answers that include citations.&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="115" LastEditDate="2017-05-15T06:00:03.373" LastActivityDate="2019-06-29T00:43:09.627" Title="Why did so many early microcomputers use the MOS 6502 and variants?" Tags="&lt;hardware&gt;&lt;history&gt;&lt;6502&gt;" AnswerCount="4" CommentCount="16" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2910" PostTypeId="1" AcceptedAnswerId="2912" CreationDate="2017-05-14T12:41:29.923" Score="8" ViewCount="446" Body="&lt;p&gt;What was the first computer to support Japanese script, not just as a toy demo, but at a level where you could actually use it to get a day's work done with Japanese documents? And how did it do it? I can see how to do it when you have megabytes of memory and a megapixel display, but I'm curious just how early it was done.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-05-15T12:08:19.407" Title="First computers to support Japanese script?" Tags="&lt;history&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2911" PostTypeId="1" AcceptedAnswerId="2919" CreationDate="2017-05-14T13:06:01.813" Score="9" ViewCount="476" Body="&lt;p&gt;Some computers in the seventies and eighties had the option of output to either a TV or a dedicated monitor. Suppose repurposing an existing TV isn't an option and you are going to be buying a screen either way, which would be cheaper? Are there any figures available for actual prices of monitors and TV sets of similar size in those years?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-22T11:40:09.247" Title="Price of early color monitor versus TV" Tags="&lt;history&gt;&lt;crt-monitor&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2912" PostTypeId="2" ParentId="2910" CreationDate="2017-05-15T02:06:21.483" Score="14" Body="&lt;p&gt;I don't know what the first computer to support Japanese script was. If only supporting Japanese kana counts, then it was probably some mainframe computer in 50's or 60's connected to a Japanese teletype. However the first non-toy Japanese word processor that supported both kana and kanji was apparently the &lt;a href=&quot;http://museum.ipsj.or.jp/en/computer/word/0049.html&quot; rel=&quot;noreferrer&quot;&gt;Toshiba JW-10&lt;/a&gt; which first shipped February 1979. (There was an earlier prototype word processor made by Sharp, but it doesn't seem to have gotten past that stage.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The JW-10 was big and expensive, the size of the desk and it cost ¥6,300,000, or $31,000 US at the exchange rate of the time. It's display used a 24x24 pixel font and printed documents on a 24-pin dot matrix printer. For kana to kanji conversion it came with a dictionary of 54,000 words and 8,000 proper nouns (eg. names) that could be expanded with 10,000 user-defined words and 8,000 user-defined proper nouns for a total of 80,000 words.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a picture of the JW-10 taken from the &lt;a href=&quot;http://museum.ipsj.or.jp/en/index.html&quot; rel=&quot;noreferrer&quot;&gt;IPSJ Computer Museum&lt;/a&gt; web site:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Mojew.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Mojew.jpg&quot; alt=&quot;Toshiba JW-10 Japanese Word Processor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that according the IPSJ's page on the JW-10, at the time it was release &quot;katakana were the only Japanese letters handled by computers (except for some systems using special equipment)&quot;.  So there would been some earlier computers that supported kanji, but wouldn't have had the novel kana-kanji conversion, an early input method editor (IME), developed for the JW-10. &lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2017-05-15T02:06:21.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2913" PostTypeId="2" ParentId="2907" CreationDate="2017-05-15T08:10:45.037" Score="17" Body="&lt;p&gt;The Tube interface was intended to enable the addition of what was known as a Second Processor.  Although this was something of a misnomer as the additional processor became the main CPU of the system and the base BBC Micro became an I/O controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When running, the second processor's memory was addressed from &lt;code&gt;&amp;amp;00000000&lt;/code&gt; upwards, and the I/O processor's memory was identified by being addressed as &lt;code&gt;&amp;amp;FFFF0000&lt;/code&gt; upwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As other answers have said, the Tube was a fast FIFO buffer enabling communication between the two processors.  The data was passed via the I/O processor's memory location &lt;code&gt;&amp;amp;FFFFFEE5&lt;/code&gt;.  The 6502 second processor was far and away the most commonly used.  It would run the same code as the main processor, effectively providing much more memory to the running program as all the I/O buffers remained in the I/O processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the I/O processor you had the following OSBYTE (or *FX) calls in the OS.  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;157 Write a single byte  &#xA;234 Test for presence of second processor &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Other OS calls affected the Tube&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;124     Clear escape state  &#xA;125     Set escape state  &#xA;142     Reset language ROM - copies language to second processor if present  &#xA;247/8/9 Set Break intercept code&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Within the second processor, you had OSWORD() calls:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;5 Read I/O processor memory  &#xA;6 Write I/O processor memory  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;These were used to transfer blocks of memory, not just single bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If writing a language ROM for the BBC, it was assumed that the 6502 second processor would run the language if fitted.  You had to encode the second processor relocation address in the ROM header.  The language ROM's initialization routine would be called at startup with two extra entries, &lt;code&gt;&amp;amp;FF&lt;/code&gt; and &lt;code&gt;&amp;amp;FE&lt;/code&gt; which informed the ROM that it was running in the second processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, Filing Systems had to be Tube-aware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there any software?  Yes.&lt;br&gt;&#xA;Some specific applications, like the BBC's Domesday Project, required the second 6502 processor.  Torch Computers manufactured a 68000 second processor that came with Torch Unix.  This was used in industry as a means of getting a cheap Unix box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For home users, second processors were quite rare.  The additional costs being not really worth the effort for a hobbyist.  In education, they were more common, but not widely used.  Their main use was in higher education, where the extra memory and wider variety of languages was of more use.  They were seen in universities.&lt;br&gt;&#xA;The more powerful second processors - 16032, 68000 etc. were quite short lived in industrial use.  Technology overtook them quite quickly and cheaper, more accessible systems became available after only a couple of years of the Tube's existence.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2017-05-15T08:10:45.037" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2914" PostTypeId="2" ParentId="2910" CreationDate="2017-05-15T12:08:19.407" Score="5" Body="&lt;p&gt;Early Japanese personal computers(like NEC's PC-8000) had expansion Kanji-ROMs sold separately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computers themselves only supported JISX0201(7-bit ASCII and half-width katakana) natively and required additional software in order to support the extra characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't find any reference regarding the first out-of-the-box input method but it seems to have happened around the introduction of 8086-based PCs(NEC PC-100 and PC-98).&lt;/p&gt;&#xA;" OwnerDisplayName="user4433" LastActivityDate="2017-05-15T12:08:19.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2915" PostTypeId="1" AcceptedAnswerId="2921" CreationDate="2017-05-15T12:37:20.033" Score="21" ViewCount="3000" Body="&lt;p&gt;Assume that the following computer terminal is connected to a large computer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DYWg8.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DYWg8.jpg&quot; alt=&quot;VT100 displaying text&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I type something on the keyboard (for example: &lt;code&gt;pwd&lt;/code&gt;), is it the computer terminal the one that receives the keystrokes and displays the corresponding characters on the screen? Or will the keystrokes go to the large computer and then the large computer will send back the characters to the computer terminal, and then the computer terminal will display the characters on the screen?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Note&lt;/strong&gt;: I am talking about how the &lt;strong&gt;&lt;code&gt;pwd&lt;/code&gt;&lt;/strong&gt; itself is displayed, and not the result of the &lt;code&gt;pwd&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="4905" LastEditorUserId="276" LastEditDate="2017-05-15T12:40:04.697" LastActivityDate="2017-05-15T19:29:11.857" Title="When you type on a computer terminal, how are the characters displayed on the screen?" Tags="&lt;hardware&gt;&lt;terminal&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2916" PostTypeId="2" ParentId="2915" CreationDate="2017-05-15T12:49:53.420" Score="6" Body="&lt;p&gt;The details and conventions vary between configurations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you type &lt;code&gt;pwd&lt;/code&gt; at the keyboard, those three bytes get sent to the computer. The shell accepts them, and writes them back to the terminal. So &lt;code&gt;pwd&lt;/code&gt; really gets sent back to the terminal; that's why you can see what you type. This scheme was common on some systems, especially from the 1970s and onwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some very old systems had a different convention: Instead of the computer accepting the input and sending a copy back to the terminal, the terminal wrote the input onto the screen (or paper) and sent a copy to the computer. This was common on the PDP-8 and ASR-33, but is uncommon now. &lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2017-05-15T12:49:53.420" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2917" PostTypeId="1" AcceptedAnswerId="2925" CreationDate="2017-05-15T14:04:54.873" Score="18" ViewCount="1681" Body="&lt;p&gt;As many of you know, plastics used in our beloved computers from the 70's, 80's and 90's contained a fire retardant called &lt;code&gt;Bromine&lt;/code&gt;.  This chemical (along with exposure to the Sun's ultraviolet rays) cause a yellowing effect in the plastics.  Sometimes orange, sometimes brown.  Point is, their color changes at a chemical level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recent years have revealed that you can reverse this process with a solution (mostly hydrogen peroxide) and MORE exposure to ultraviolet light.  This process has been termed &quot;Retro-Brighting&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have done this many times myself with various degrees of success.  However, I have read many times that the whole process is only temporary and that, over time, the yellowing will always continue to happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, has anyone experienced this first hand?  I think Retro-Brighting has been around for a long time now so there should be some evidence if it's somewhat permanent or temporary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="4251" LastEditDate="2017-05-16T18:59:46.277" LastActivityDate="2017-05-30T13:40:04.663" Title="Are the effects of &quot;Retro-Brighting&quot; permanent or temporary?" Tags="&lt;hardware&gt;&lt;restoration&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2918" PostTypeId="2" ParentId="3" CreationDate="2017-05-15T14:25:54.923" Score="3" Body="&lt;p&gt;I don't think this has been mentioned but if you have no interest in actually using the disks, then perhaps you could donate them to someone that could archive them for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, if you choose to use the images you can load them in an emulator such as VICE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there aren't too many of them, I would be happy to archive them for you.  I can even send them back to you if you want.  No charge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just hate seeing old technology discarded because someone doesn't want them any more.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-05-15T14:25:54.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2919" PostTypeId="2" ParentId="2911" CreationDate="2017-05-15T17:00:36.263" Score="13" Body="&lt;p&gt;Based on a quick perusal of the &lt;a href=&quot;https://ia801707.us.archive.org/3/items/Acorn_User_Number_004_1982-11_Adn-Wesley_GB/Acorn_User_Number_004_1982-11_Addison-Wesley_GB.pdf&quot; rel=&quot;noreferrer&quot;&gt;November 1982 edition of Acorn User&lt;/a&gt; — a user base reliably rich enough at least to consider a monitor — options then included (size unstated where the advert omits it, but I think that implies 14&quot;):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;colour BMC 1401: £240, £258.75&lt;/li&gt;&#xA;&lt;li&gt;colour Microvitec 1431: £269, £270, £284&lt;/li&gt;&#xA;&lt;li&gt;colour MC 370M: £289&lt;/li&gt;&#xA;&lt;li&gt;unspecified brand colour: £325, £287.50&lt;/li&gt;&#xA;&lt;li&gt;green 12&quot; BM[C]12A: £80, £90.85&lt;/li&gt;&#xA;&lt;li&gt;green 12&quot; Sanyo: £99&lt;/li&gt;&#xA;&lt;li&gt;green 12&quot; Zenith: £95&lt;/li&gt;&#xA;&lt;li&gt;green or amber Karga: £113.85&lt;/li&gt;&#xA;&lt;li&gt;unspecified and green: £100&lt;/li&gt;&#xA;&lt;li&gt;a Sanyo colour television: £235&lt;/li&gt;&#xA;&lt;li&gt;TV + monitor (including a PAL decoder, but having raw RGB inputs for a computer that offers an &quot;excellent resolution&quot;): £299&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Looking into the &lt;a href=&quot;https://issuu.com/retromash/docs/argos-no18-1982-autumnwinter&quot; rel=&quot;noreferrer&quot;&gt;autumn/winter 1982 edition of the Argos catalogue&lt;/a&gt; — usually a reliable indicator of the low end of high street prices in a given period, I see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Network 12&quot; black and white: £49.99&lt;/li&gt;&#xA;&lt;li&gt;Philips 14&quot; black and white: £69.99&lt;/li&gt;&#xA;&lt;li&gt;Philips 12&quot; black and white with remote control: £69.99&lt;/li&gt;&#xA;&lt;li&gt;Pye 12&quot; black and white: £54.99&lt;/li&gt;&#xA;&lt;li&gt;Deccavision 14&quot; black and white: £64.99&lt;/li&gt;&#xA;&lt;li&gt;Pye 14&quot; colour: £174.95&lt;/li&gt;&#xA;&lt;li&gt;Pye 16&quot; colour: £219.95&lt;/li&gt;&#xA;&lt;li&gt;Deccacolour 14&quot; colour: £179.95&lt;/li&gt;&#xA;&lt;li&gt;Fidelity 14&quot; colour: £189.95&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So if that's any guide, it looks to me like the cheapest 12&quot; monochrome TV was almost half the price of the cheapest 12&quot; monochrome monitor. You're getting black on white instead of green but it's far from impossible that the cheapest TV might have omitted filtering of the colour subcarrier; if so then you'd get a pretty decent resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cheapest 14&quot; colour TV was only about 73% as expensive as the cheapest 14&quot; monitor. Even the cheapest 16&quot; colour TV was slightly cheaper than the cheapest 14&quot; colour monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both cases the things were quite possibly a world apart in quality — the cheapest TV is a mass-market item in a competitive area whereas the cheapest monitor is already aimed at people with leisure money who are thinking about something they're going to be looking closely at for prolonged periods.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-05-15T17:00:36.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2920" PostTypeId="2" ParentId="2915" CreationDate="2017-05-15T19:27:13.250" Score="3" Body="&lt;p&gt;If local echo is turned on in your terminal's configuration, then whatever you type will immediately appear onscreen. If it's turned off, then whether you see what you type depends on whether the server sends the characters back to your terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if local echo is turned on and the server also sends each character back, you will see two copies of each letter you press. Or if local echo is turned off and the server does &lt;em&gt;not&lt;/em&gt; send each character back, you won't see what you typed at all.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-05-15T19:27:13.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2921" PostTypeId="2" ParentId="2915" CreationDate="2017-05-15T19:29:11.857" Score="29" Body="&lt;p&gt;Terminals fall into two broad categories:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Character-at-a-time&lt;/li&gt;&#xA;&lt;li&gt;Line- or Screen-at-a-time&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The VT100 is a character-at-a-time terminal, which means that when you press a key on the keyboard, a character gets sent to the computer.  If you have &quot;local echo&quot; enabled, then as soon as the character is sent it is also immediately displayed (often done using a loopback circuit that copies transmitted data to the receive pin), but typically you would have local echo turned off, because there are some things you don't want to see displayed on the screen as you type them (like passwords).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that typically, anything shown on a character-at-a-time terminal was sent by the host computer (because the host computer assumes you have local echo turned off).  In your &quot;pwd&quot; example the 3 characters 'p', 'w' and 'd' were either echoed back by the terminal driver (due to it being in &quot;line mode&quot;), or they were echoed back by the shell (common in modern shells that support command editing).  For more information about this look up the Unix terminal line disciplines &quot;raw&quot;, &quot;cooked&quot; (also known as Canonical) and &quot;cbreak&quot; (sometimes jokingly called &quot;rare&quot; or &quot;half cooked&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other broad category of terminal includes half-duplex terminals and IBM mainframe terminals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Half-duplex terminals were made to support a communications line that only allowed transmission in one direction at a time.  When your terminal was in transmit mode, you could type on the keyboard.  When it was in receive mode, the keyboard was typically locked.  As a result, when you were typing input, you would generally type out an entire line (with local echo enabled so you can see what you're typing), then when you pressed the Enter key that would signal the host computer to &quot;turn the line around&quot; so that it could use the line to send a response to your command .  When the computer was done sending output it would send a signal to enable the terminal to transmit (and re-enable the keyboard).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM mainframe terminals took this a step further by allowing you to fill out an entire screenful of information, all done locally within the terminal itself.  Everything you typed was processed locally (nothing got sent to the host computer at all).  Then, when you pressed Enter it would send a burst of data to the host computer containing all your screen input.  This was more efficient on those types of systems than character-at-a-time transmission because on those systems servicing an I/O interrupt was computationally expensive and doing so for each individual character wasted too much CPU capacity, so this scheme was used even when you had a full-duplex communication line that allowed transmission in both directions at once.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-05-15T19:29:11.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2922" PostTypeId="1" AcceptedAnswerId="2923" CreationDate="2017-05-16T13:35:58.550" Score="29" ViewCount="3658" Body="&lt;p&gt;The IBM PC BIOS had provisions for up to four floppy disk drives, by virtue of returning the number of floppy disk drives in a two-bit field plus a none/some flag (allowing for reporting values of 0, 1, 2, 3 or 4 floppy disk drives being installed). (See &lt;a href=&quot;https://web.archive.org/web/20170523060414/http://www.delorie.com/djgpp/doc/rbinter/it/26/2.html&quot; rel=&quot;noreferrer&quot;&gt;BIOS interrupt 11h, GET EQUIPMENT LIST&lt;/a&gt;, bits 0 and 7-6 of register AX as returned.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, most common configurations had one or two floppy disk drives installed. These were, intuitively enough, labelled &lt;code&gt;A:&lt;/code&gt; and &lt;code&gt;B:&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;What happened if you installed a third floppy disk drive in such a system?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What happened if you did the same in a system that, in addition to the two floppy disk drives, also sported a hard disk? (For simplicity, you can assume that the hard disk held a single partition.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Specifically, &lt;strong&gt;how were drive letters assigned by MS-DOS in each of these cases?&lt;/strong&gt; Did the hard disk (which would ordinarily be &lt;code&gt;C:&lt;/code&gt;) get pushed further into the alphabet (making it &lt;code&gt;D:&lt;/code&gt; in the example above), or was the hard disk partition still referred to as &lt;code&gt;C:&lt;/code&gt; and the third floppy disk drive became &lt;code&gt;D:&lt;/code&gt;? Or some other combination?&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-05-23T06:06:05.483" LastActivityDate="2018-07-12T02:31:00.283" Title="How did MS-DOS assign drive letters in the case of more than two floppy disk drives?" Tags="&lt;floppy-disk&gt;&lt;ms-dos&gt;&lt;ibm-pc&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2923" PostTypeId="2" ParentId="2922" CreationDate="2017-05-16T13:44:05.890" Score="27" Body="&lt;p&gt;As you might imagine, the answer depends on the version of DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Drive_letter_assignment#Order_of_assignment&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article&lt;/a&gt; on the topic matches my memories.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Before MS-DOS 5.0&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Before MS-DOS 5.0, the basic assignments are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A: goes to the first floppy drive, if any, or to a “phantom” drive;&lt;/li&gt;&#xA;&lt;li&gt;B: goes to the second floppy drive, if any, or to a “virtual” floppy drive (the virtual floppy drive was mapped to A:, but DOS remembered whether the floppy in the drive was A: or B:, prompting the user to switch when necessary).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then DOS assigns drive letters to any remaining floppy drives (up to four in total), then to the first primary partitions of the first two hard drives (if any), then to the logical partitions in the first extended partition of the hard drives, then to device drivers, then to TSRs. (Before MS-DOS 5.0, other hard drives and other primary partitions were ignored by default.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applying this to your two examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;adding a third floppy drive to a two-drive machine, with no hard drive, would result in floppies on A:, B: and C:;&lt;/li&gt;&#xA;&lt;li&gt;adding a third floppy drive to a two-drive machine with a hard drive would result in floppies on A:, B: and C:, and the hard drive on D:.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h1&gt;MS-DOS 5.0 and later&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;With MS-DOS 5.0 and later, the basic assignments are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A: goes to the first floppy drive, if any;&lt;/li&gt;&#xA;&lt;li&gt;B: goes to the second floppy drive, if any, or to the “virtual” floppy drive if there is only one floppy drive, or to nothing if there is no floppy drive;&lt;/li&gt;&#xA;&lt;li&gt;C: always goes to the first primary partition on the first hard drive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then DOS assigns drive letters to the first primary partitions on the remaining hard drives, then to logical partitions, then to other primary partitions, &lt;em&gt;then&lt;/em&gt; to other floppy drives (up to four altogether in practice), then to device drivers, then to TSRs (MSCDEX and network redirectors typically).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So a machine with one primary partition and four floppy drives would end up with floppies on A:, B:, D: and E:, and the hard drive on C:.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applying this to your two examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;adding a third floppy drive to a two-drive machine, with no hard drive, would result in floppies on A:, B: and C:;&lt;/li&gt;&#xA;&lt;li&gt;adding a third floppy drive to a two-drive machine with a hard drive would result in floppies on A:, B: and D:, and the hard drive on C:.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Other combinations were of course possible. For a while I had a single-floppy-drive PC (no hard drive) with A: and B: mapped to the floppy drive, and C: a RAM drive. OEM versions of DOS could behave differently, and device drivers can pretty much do what they want (including replace existing drives).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lots of software fails if the boot drive isn’t A: or C:. Drive assignments would typically get messed up by installing an additional hard drive (which would shift the logical partitions of the first hard drive by one); you could also run into trouble with network drives which might replace a local drive assignment.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-05-17T14:41:57.257" LastActivityDate="2017-05-17T14:41:57.257" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="2924" PostTypeId="1" AcceptedAnswerId="3272" CreationDate="2017-05-16T16:07:26.060" Score="7" ViewCount="1189" Body="&lt;p&gt;Back in the eighties, batteries weren't yet at the point where they could run a laptop with similar computing power to a desktop. If you wanted that much computing power, you just accepted that your laptop needed to plug into the mains.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that, early portables used CRT screens on the order of 5 inch. Hard to read and very heavy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Toshiba T3100 released in 1986 used a plasma screen. Much bigger display area, thinner, a better choice all round.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But apparently plasma screens were around more than a decade earlier than that, and 1970s plasma screens don't look deficient in the pictures I've seen of them. So why weren't plasma screens used in laptops earlier than 1986? Or is it that they were and I missed it?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-05-13T14:52:07.710" Title="How early could plasma screens be used in laptops?" Tags="&lt;history&gt;&lt;portable&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2925" PostTypeId="2" ParentId="2917" CreationDate="2017-05-16T18:42:35.523" Score="8" Body="&lt;p&gt;I do not have any anecdotal evidence, but scientific evidence seems to show that color restoration through use of hydrogen peroxide is a temporary solution to a long term problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A related question/answer on &lt;a href=&quot;https://chemistry.stackexchange.com/q/74618/45297&quot;&gt;Chemistry SE&lt;/a&gt; reveals that plastics are damaged by UV light and that this damage does result in color changes. The bromine you mentioned additionally causes further coloring to the plastics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I have gathered, UV light causes plastics to create free radicals - atoms with unpaired electrons - which causes the coloring of the plastic. Hydrogen peroxide is able to &quot;capture&quot; or bond to these radicals, effectively eliminating their presence in the plastic. This would explain the additional UV energy needed to reverse the reaction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since plastic degradation is inevitable over time, no amount of retrobrighting will permit plastics to remain white forever. :(&lt;/p&gt;&#xA;" OwnerUserId="4251" LastEditorUserId="2081" LastEditDate="2017-05-30T13:40:04.663" LastActivityDate="2017-05-30T13:40:04.663" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2926" PostTypeId="1" CreationDate="2017-05-16T19:36:41.717" Score="10" ViewCount="440" Body="&lt;p&gt;The Grid Compass, released in 1982, was arguably the world's first full-fledged laptop, whose only glaring deficiency to modern eyes is the small display, 320x240 with physical size to match, something that would have significantly restricted its usefulness in a world of desktops with 80-column text. (Compare to the otherwise similar Toshiba T3100, four years later.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously a larger display would have cost more, but intuitively, the benefit would have been easily worth the cost. Where does intuition go wrong? What was the obstacle with a larger display that was so severe that it led to the designers settling for 320x240?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-05-22T13:31:14.737" Title="Grid Compass - why such a small display?" Tags="&lt;history&gt;&lt;portable&gt;" AnswerCount="1" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="2927" PostTypeId="1" AcceptedAnswerId="2930" CreationDate="2017-05-16T20:59:16.777" Score="15" ViewCount="2099" Body="&lt;p&gt;I'm poking at the Intel 8086/8088 (iAPX 86/88) User's Manual, which states on page 2-29 (&lt;a href=&quot;https://web.archive.org/web/20170522071326/ftp://bitsavers.informatik.uni-stuttgart.de/pdf/intel/_dataBooks/1981_iAPX_86_88_Users_Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;PDF&lt;/a&gt; page 48), table 2-4, &lt;em&gt;CPU State Following RESET&lt;/em&gt;, that the state of the CPU after the RESET pin rising followed by going low is guaranteed to be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Flags = Clear&lt;/li&gt;&#xA;&lt;li&gt;Instruction Pointer = 0000H&lt;/li&gt;&#xA;&lt;li&gt;CS Register = FFFFH&lt;/li&gt;&#xA;&lt;li&gt;DS Register = 0000H&lt;/li&gt;&#xA;&lt;li&gt;SS Register = 0000H&lt;/li&gt;&#xA;&lt;li&gt;ES Register = 0000H&lt;/li&gt;&#xA;&lt;li&gt;Queue = Empty&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Curiosly, this means that CS:IP points at physical address FFFF0H (1 MiB minus 16 bytes), and that &lt;em&gt;the stack begins &lt;strong&gt;somewhere&lt;/strong&gt; in the lowest 64 KiB of memory&lt;/em&gt; because SS (the stack segment register) is cleared, but SP (the stack pointer register) is not guaranteed to have any particular value. If SP happens to take on the value FFFFH on reset, then SS:SP becomes physical address 0FFFFH = 65,535, resulting in a possible range of physical address 00000H through 0FFFFH pointed to by SS:SP; thus 64 KiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consequently, one of the first few things any CPU bootstrapping code would seem to have to do is to actually initialize SS:SP to some sensible value, probably immediately after the intersegment jump instruction recommended (page 2-29, PDF page 48) to be available at physical address FFFF0H. Only after SS:SP is explicitly initialized is it even remotely safe to perform any operations that use the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would be exacerbated by Intel specifically reserving the lower 128 bytes of the address space (0H through 7FH, page 2-16 figure 2-21, PDF page 35; also in text on page 2-15), so whatever code runs immediately on CPU reset must &lt;em&gt;specifically&lt;/em&gt; make sure to not clobber that memory area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my reading of the manual correct and Intel guarantees nothing about where SS:SP will point after RESET on the 8086 or 8088 other than that SS is 0000H, or am I missing something that is relevant here?&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-12-02T14:07:53.750" LastActivityDate="2019-08-22T21:01:57.027" Title="Did the Intel 8086/8088 not guarantee the value of SS:SP immediately after RESET?" Tags="&lt;8086&gt;&lt;8088&gt;" AnswerCount="4" CommentCount="13" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2928" PostTypeId="5" CreationDate="2017-05-16T21:08:26.917" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-05-16T21:08:26.917" LastActivityDate="2017-05-16T21:08:26.917" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2929" PostTypeId="4" CreationDate="2017-05-16T21:08:26.917" Score="0" Body="For questions specifically regarding the Intel 8088 microprocessor." OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-05-16T21:14:14.377" LastActivityDate="2017-05-16T21:14:14.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2930" PostTypeId="2" ParentId="2927" CreationDate="2017-05-16T21:36:37.417" Score="21" Body="&lt;p&gt;Your reading is correct, SP is undefined after a reset and the stack has to be set up appropriately by the initialisation code before it can be used. Interrupts are disabled after reset so there’s no risk of the stack being used by an interrupt (short of a NMI, but you’re in dire straits if that happens anyway at this stage).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The book I’m looking at just now (Robert L. Hummel’s &lt;em&gt;The Processor and Coprocessor&lt;/em&gt;) gives the flags as F000 on the 8086/8088, not cleared (the top nibble, which isn’t used, is always set to F). On the 286 the flags are set to 0002 after reset, and likewise 00000002 on the 386 (bit 1 is always set to 1, all other reserved bits are set to 0, and all flags are cleared). Execution always starts 16 bytes from the top of the address space, FFFF0 on the 8086/8088, FFFFF0 on the 286, FFFFFFF0 on the 386.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://sites.google.com/site/pcdosretro/ibmpcbios&quot; rel=&quot;noreferrer&quot;&gt;IBM PC BIOS&lt;/a&gt; is interesting to check in light of this question. The end of &lt;code&gt;PCBIOS.ASM&lt;/code&gt; shows the code at the reset vector, which just does a far jump to the &lt;code&gt;RESET&lt;/code&gt; label. The code there proceeds to trash all the registers: first the flags (&lt;code&gt;START&lt;/code&gt;), with various tests to ensure the flags retain their values and, then the general purpose, segment, pointer and index registers (AX, DS, BX, ES, CX, SS, DX, SP, BP, SI, DI in that order, starting at &lt;code&gt;C8&lt;/code&gt;). So the starting value of SP doesn’t matter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A test further down helps understand why SP doesn’t matter &lt;em&gt;in any case&lt;/em&gt;. Starting at &lt;code&gt;C15&lt;/code&gt;, the DMA controller is set up to refresh memory — before that, RAM is effectively unusable... &lt;code&gt;TEST.04&lt;/code&gt; then tests the RAM in the system, &lt;code&gt;C21&lt;/code&gt; initialises the 8259 PIC and then sets up a temporary stack (to allow loading test programs from the keyboard — this is the first time a subroutine is used, although a &lt;code&gt;RET&lt;/code&gt; using a fake stack in ROM happens earlier). At last at &lt;code&gt;C25&lt;/code&gt; the POST stack is set up, starting at 00030.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory usability at boot-up is even more problematic nowadays; synchronising the timing on all the memory in a modern system takes a little while. The early bootup in a modern CPU actually uses the CPU’s cache as memory to be able to store the data it needs to set the real memory up.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-08-22T21:01:57.027" LastActivityDate="2019-08-22T21:01:57.027" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="2931" PostTypeId="1" AcceptedAnswerId="8510" CreationDate="2017-05-16T21:37:48.800" Score="6" ViewCount="598" Body="&lt;p&gt;What was the first display technology capable of creating a flat-panel display with 640x480 resolution? (And reasonable size, say 12&quot; to 14&quot;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I can see, three flat-panel display technologies that were historically used were LCD (still important today), plasma (used in the Toshiba laptops in the late eighties, later used for some TVs) and electroluminescent (what happened to that?). However, the earliest reference I can find to a high resolution panel is the Toshiba T3100 (640x400, 1986). The Grid Compass (1982) only did 320x240, but I haven't been able to find out why; what was the limiting factor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the earliest display technology that could do it?&lt;/p&gt;&#xA;" OwnerUserId="4274" OwnerDisplayName="rwallace" LastActivityDate="2018-12-10T23:25:47.613" Title="First flat-panel display technology capable of 640x480" Tags="&lt;display&gt;&lt;history&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2932" PostTypeId="2" ParentId="2927" CreationDate="2017-05-17T08:10:34.253" Score="3" Body="&lt;p&gt;This definitely assumes the upper 16 bytes of the address space is ROM. SS:SP &lt;em&gt;must&lt;/em&gt; point to RAM, though. So what should Intel engineers assume for a valid RAM address? They didn't know, so assumed nothing and left it to the firmware writers - who had to initialize SP (and, probably, SS as well, even if that had a defined initial value) to some area actually containing RAM anyways. When the 8086 was designed, RAM was so valuable you couldn't simply assume some arbitrary value. On the other hand, you could most probably assume valid RAM in the vector area, thus lower memory area - because this definitely needs to be populated for interrupt vectors - Maybe this was the reason for SS=0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, you can pretty easily write firmware that doesn't really need a valid stack (or even RAM, for that matter) and only uses registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When booting, the PC traditionally loads the MBR to 0000:7c00 and places the stack 512 bytes above that. So at least for that first boot stage, SS=0 is just fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502, for example, assumed a fixed-size stack in the lower 1k of memory which makes the CPU a bit inflexible. I think &quot;leave it to the designer&quot; is much better and makes for a much more flexible memory map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Motorola 68k does a similar thing with &lt;em&gt;vectors&lt;/em&gt; in the lower 2 longwords at address 0 and 4: These give the initial longword values for the program counter and stack pointer that are picked up by the CPU in the RESET cycle. So, the 68k CPUs didn't strictly &lt;em&gt;guarantee&lt;/em&gt; initial values for PC and SP as well - Because of the differing maximum address ranges for various 68k CPUs (68008: 1MByte, 68000: 16MBytes) they couldn't simply put these values to the end of the address space which would have been more flexible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interesting side note unrelated to 8086/8088 CPUs:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With later CPUs, when Intel extended the segment registers to 32 bits and thus extended the CPUs address range, there's an interesting hack involved that made sure the BIOS could still live at the very end of the addressable memory (which was now much further up):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if the CPU starts in real mode, which actually has a limited address range of 1MByte, the CPU temporarily sets the upper (inaccessible in real mode) bits of ECS to 1 until the first long jump - This makes the CPU run code from a normally inaccessible memory area during the startup process. &lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-05-17T09:08:41.750" LastActivityDate="2017-05-17T09:08:41.750" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2933" PostTypeId="2" ParentId="2926" CreationDate="2017-05-17T14:22:51.470" Score="10" Body="&lt;p&gt;I just came across a possible answer &lt;a href=&quot;https://web.archive.org/web/20200201160915/http://www.indiana.edu/~hightech/fpd/papers/ELDs.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;on this page&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;The most important problem that had to be solved before mass production of ELDs could begin was increasing the reliability of the EL thin film stack.  Since the devices operated at very high field levels -- about 1.5 MV/cm -- there was a high probability that they would break down, especially if there was insufficient uniformity in the stack.  Sharp, Tektronix, and Lohja  Corporation in Finland were able to solve this problem between 1976 and 1983 using slightly different approaches.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That suggests maybe early high-resolution ELDs couldn't be had for any price if you wanted reasonably high reliability too?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="7347" LastEditDate="2020-05-22T13:31:14.737" LastActivityDate="2020-05-22T13:31:14.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2934" PostTypeId="1" AcceptedAnswerId="2937" CreationDate="2017-05-17T15:02:39.963" Score="11" ViewCount="1822" Body="&lt;p&gt;For those that don't know, &lt;code&gt;JiffyDOS&lt;/code&gt; is a ROM replacement for a Commodore 64 (and 128, I believe) and its 1541 disk drive.  This ROM replacement provides OS shortcuts, faster load times, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've noticed that many Commodore 64 (and perhaps 128) users install an external switch to disable the JiffyDOS ROM and switch back to the original Commodore ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the main reason for this?  Did some games or other software programs not support JiffyDOS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize a switch is a convenient way of not having to open the hardware so my question isn't on the switch...but why many users opted for a switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-05-18T01:29:30.167" Title="Why do many JiffyDOS users install a toggle switch to disable it?" Tags="&lt;commodore-64&gt;&lt;jiffydos&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2935" PostTypeId="2" ParentId="2927" CreationDate="2017-05-17T18:19:15.993" Score="3" Body="&lt;p&gt;I think the SS was set to 0 because usually there was RAM at 0 (al least for the interrupt table) but SP had to be set to the &lt;em&gt;end&lt;/em&gt; of the available RAM (since stack grows downwards) and this could only be done once its size was detected by the BIOS. Of course, if there was more than 64K of RAM, one could use a non-zero SS but I guess it was not a very common situation back then, and not having to change SS from the default probably saved a couple bytes. &lt;/p&gt;&#xA;" OwnerUserId="3783" LastActivityDate="2017-05-17T18:19:15.993" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2936" PostTypeId="1" AcceptedAnswerId="2938" CreationDate="2017-05-17T23:57:22.567" Score="6" ViewCount="234" Body="&lt;p&gt;Linux supports job control, i.e. you can start a process in the background, or make a foreground process run in the background, or make a background process run in the foreground, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did any V7 or earlier version of UNIX support such job control?&lt;/p&gt;&#xA;" OwnerUserId="4905" LastEditorUserId="357" LastEditDate="2017-05-18T08:46:57.863" LastActivityDate="2017-05-18T08:46:57.863" Title="Was job control supported in UNIX V7 or earlier?" Tags="&lt;unix&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2937" PostTypeId="2" ParentId="2934" CreationDate="2017-05-18T01:29:30.167" Score="13" Body="&lt;p&gt;As an owner of a &lt;a href=&quot;http://www.go4retro.com/products/jiffydos/&quot; rel=&quot;noreferrer&quot; title=&quot;JiffyDOS&quot;&gt;JiffyDOS&lt;/a&gt;-equipped SX-64, the reasons that @dirkt and @Mark gave are exactly correct: there are some fast loaders that just don't work with JiffyDOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for the switch? Most JiffyDOS vendors include the switch and socket hardware. It's especially relevant now, as &lt;a href=&quot;https://ist.uwaterloo.ca/~schepers/roms.html&quot; rel=&quot;noreferrer&quot; title=&quot;2732 or 2764 EPROMS&quot;&gt;2732 or 2764 EPROMS&lt;/a&gt; are not pin-compatible with Commodore's layout, so some kind of adapter must be supplied to make the ROMs work.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-05-18T01:29:30.167" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2938" PostTypeId="2" ParentId="2936" CreationDate="2017-05-18T05:38:24.987" Score="9" Body="&lt;p&gt;&lt;a href=&quot;http://pdp11.aiju.de/&quot; rel=&quot;noreferrer&quot;&gt;UNIX V6&lt;/a&gt; allows starting processes in the background with the ampersand character:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  Use, duplication or disclosure is subject to&#xA;  restrictions stated in Contract with Western&#xA;  Electric Company, Inc.&#xA;  # LS -L /BIN &amp;amp;&#xA;3&#xA;# TOTAL 392&#xA;-RWXRWXR-X  1 BIN      1514 JUL 18 09:33 AR&#xA;-RWXRWXR-X  1 BIN      5748 JUL 18 08:59 AS&#xA;-RWXRWXR-X  1 BIN      8780 JUL 18 09:33 BAS&#xA;-RWXRWXR-X  1 BIN       152 JUL 18 09:35 CAT&#xA;-RWXRWXR-X  1 BIN      7186 JUL 18 09:35 CC&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note the process number (3) and the prompt before the output from the background process starts. &lt;a href=&quot;http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/sys/ken/sig.c&quot; rel=&quot;noreferrer&quot;&gt;SIGSTOP/SIGCONT signals haven't been invented yet&lt;/a&gt; (see the &lt;code&gt;switch&lt;/code&gt; statement in &lt;code&gt;psig()&lt;/code&gt; function around the middle of the file), so it isn't possible to stop the background process without killing it. Also there is no way to &quot;background&quot; an already running process or to bring a background process to foreground.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-05-18T06:06:44.837" LastActivityDate="2017-05-18T06:06:44.837" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2939" PostTypeId="1" AcceptedAnswerId="3007" CreationDate="2017-05-18T05:43:17.750" Score="15" ViewCount="3422" Body="&lt;p&gt;Is it possible to expand an Amiga 500 rev 8 (not an Amiga 500 plus) to 1.5 MB of Chip RAM using an A501+ expansion? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is plug and play or are modifications required?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the board:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/gLyPz.jpg&quot; alt=&quot;this&quot;&gt;&#xA;&lt;sup&gt;Source: &lt;a href=&quot;http://www.bigbookofamigahardware.com/bboah/product.aspx?id=9&quot; rel=&quot;nofollow noreferrer&quot;&gt;Big Book of Amiga Hardware&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has a 8375 Agnus, 512KB and OCS Denise, no RTC&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: I wrongly thought the A501+ had 1MB of RAM. So the question is more like &quot;Is it possible to expand Amiga 500 rev 8 to 1.5 MB with a 1MB trapdoor expansion?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update 2: A501+ is listed as 512 KB &lt;a href=&quot;http://www.bigbookofamigahardware.com/bboah/product.aspx?id=969&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and as 1024 KB &lt;a href=&quot;http://amiga.resource.cx/exp/a501plus&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="124" LastEditorUserId="11916" LastEditDate="2019-04-09T21:56:34.440" LastActivityDate="2021-05-11T19:53:06.903" Title="Is it possible to expand Amiga 500 rev 8 to 1.5 MB with a 1MB trapdoor expansion?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;amiga-500&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="2940" PostTypeId="2" ParentId="2904" CreationDate="2017-05-18T09:04:26.657" Score="7" Body="&lt;p&gt;In Israel, in the early 1980s (I started work as an accountant in 1982 so I don't know how long the system had been in use prior to this date), all the kibbutzim of an area used to connect to one PDP-11 which was run from a communal computing centre. Each kibbutz had one data line. We had programs for accounting and a precursor of what was to be ERP, as well as more esoteric programs, such as one for maintaining a database of avocado trees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All we had originally was a DEC-Writer: we used to use the paper four ways. Eventually we bought a VT-100 terminal.&lt;/p&gt;&#xA;" OwnerUserId="4375" LastEditorUserId="4375" LastEditDate="2017-07-23T07:56:01.250" LastActivityDate="2017-07-23T07:56:01.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2942" PostTypeId="1" CreationDate="2017-05-19T08:45:01.683" Score="10" ViewCount="368" Body="&lt;p&gt;The thermal printer that was sold for use with the Mattel Aquarius or VIC-20 / Commodore 64 is an Alphacom VP42.&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/7PWOm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7PWOm.jpg&quot; alt=&quot;VIC 20 AlphaCom Printer&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ozvm6.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ozvm6.jpg&quot; alt=&quot;Aquarius printer&quot;&gt;&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This uses thermal paper, 4 3/8&quot; wide. Original paper for these printers is very hard to find. Thermal paper however is still being used in cash-registers, but the 4 3/8&quot; format is not very common. So I wonder if anybody ever found a replacement ?&lt;/p&gt;&#xA;" OwnerUserId="256" LastActivityDate="2017-05-20T21:00:46.880" Title="Where to find thermal paper for Aquarius or Commodore printer?" Tags="&lt;vic-20&gt;&lt;printer&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2943" PostTypeId="2" ParentId="2942" CreationDate="2017-05-19T09:03:09.480" Score="6" Body="&lt;p&gt;Fax machines used to use thermal paper by the pallet, and it is still commonly available wherever office supplies are sold (including amazon). While this will be wider (not, as the problem is with the cash register rolls, narrower) than what these vintage printers need, this problem can be fixed with a guide and a sharp knife (and in the worst case re-rolling the paper onto the core of an original roll if there are issues with core diameter...).&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-05-19T09:03:09.480" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2944" PostTypeId="2" ParentId="2883" CreationDate="2017-05-19T09:53:04.777" Score="5" Body="&lt;p&gt;A version of the 8052 with a built in interactive BASIC (via serial port) was actually sold as an Intel product in the 1980s. Some ROM images of that interpreter can be found on the web and uploaded into a flashable (or UV-EPROM) 8052. These chips will need the usual paraphernalia of a small 8051/8052 system: Clock crystal, reset circuit, serial level conversion (or straight connection to an usb-to-rs232 chip), address/data latches if you want to add any memory-mapped peripherals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mind that development boards that AND PSEN (correction: /PSEN) and CS (correction: /RD) together to facilitate ROM monitors need to be modified to support the interpreter.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Ah, that needs explanation: Before you had MCUs that were quickly re-flashable in-system, one good way to test things out as a developer was putting a monitor program (a mini-OS if you will) in the ROM and feeding it code via the serial line from a host computer. Since an 8031/8032/8051/8052 is a harvard-like architecture that addresses program and data store in separate spaces, you absolutely needed external RAM and a bit of circuitry to make it accessible as both program (/PSEN line) and data address space (/RD line).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Burning EPROMs to test code was impractical unless you had a large supply of EPROMs (and they were expensive, windowed-EPROM versions of microcontrollers like the 8748/8751 even more so!) - you needed to erase them before reprogramming, which takes 8 to 15 minutes.... EEPROMs, expensive and slow....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Needs another explanation: Every &quot;classical&quot; 8051/8052/80c517/537 (Essentially, the 40pin and up versions. Even a mask ROM version pulled from some old keyboard or VCR!) can be wired up as an 8031/8032 and forcibly driven from an external program store. The prescribed wiring in the datasheets for the 805x (ROM or Flash) vs 803x actually decided under what personality the chip ran.  Very likely, no 8031 was ever made as such, given there must have been a good supply of mis-programmed ROM 8051/8052 around...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS, don't get fooled by outrageously high clock rates (up to 40MHz!) for a 1970s design: they are very microcode heavy and have very bad instructions per clock cycle ratios (12 clocks per instruction is the minimum on an 8051 running off ROM)...&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Here's some detailed interviews with the people that designed the 8051 and 8048...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://archive.computerhistory.org/resources/access/text/2013/05/102658339-05-01-acc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://archive.computerhistory.org/resources/access/text/2013/05/102658339-05-01-acc.pdf&lt;/a&gt;&#xA;&lt;a href=&quot;http://archive.computerhistory.org/resources/access/text/2013/05/102658328-05-01-acc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://archive.computerhistory.org/resources/access/text/2013/05/102658328-05-01-acc.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="785" LastEditDate="2017-05-24T00:09:57.237" LastActivityDate="2017-05-24T00:09:57.237" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2945" PostTypeId="2" ParentId="1818" CreationDate="2017-05-19T10:51:10.747" Score="3" Body="&lt;p&gt;The fast and noisy bug-fixing, constantly-updating ecosystem we know today has only become popular in the mainstream somewhere in the 90s, probably coming from the open source community.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Testing for critical bugs was expected to be much more the responsibility of the vendor, and what was not found got shipped and only maybe fixed in the next release. Bugs were supposed to be something to curse about and work around, not report or fix - unless it was critical enough to make you call the vendor. Shipping software with a major bug, though, actually was a bigger disaster for a vendor than today: you essentially had one chance to deliver the customers (and print magazine reviewers) with a product considered working good-enough and fit for the purpose. Serious fixes would have meant real-life product returns and shipping fixed media, not just offering some download and calling it fixed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With problems making the software unusable for SOME customers, likely only those customers were shipped a fixed version when they rang and asked for a problem solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do not forget that many bugs that cause constant updating and a pressure to use up-to-date versions these days are security, not functionality related. Security bugs were a foreign concept in personal and small business computing in the pre-mainstream-internet days (except in actual networking and security software). If a certain input could make a software do something undesirable, it was considered OPERATOR ERROR to give it that input and not a security problem. Virus writers didn't bother to exploit vulnerabilities in data readers since just using straight up executable files as a vector was more effective. Somebody crashing your business network intentionally would not have been considered a gray-hat figure but a criminal saboteur or vandal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chances are, many software vendors didn't care about bugs that caused no one actual problems worth complaining about in anger.&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="7946" LastEditDate="2020-03-11T09:01:59.537" LastActivityDate="2020-03-11T09:01:59.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2946" PostTypeId="1" AcceptedAnswerId="2947" CreationDate="2017-05-19T12:24:51.447" Score="6" ViewCount="441" Body="&lt;p&gt;In Linux, if I want to get the file descriptors of a process, I would go to the following directory:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/proc/&amp;lt;pid&amp;gt;/fd&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But in UNIX V7, the &lt;code&gt;/proc&lt;/code&gt; directory does not exist.&lt;/p&gt;&#xA;" OwnerUserId="4905" LastActivityDate="2017-05-19T12:45:56.227" Title="Can you get the file descriptors of a process in UNIX V7?" Tags="&lt;unix&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2947" PostTypeId="2" ParentId="2946" CreationDate="2017-05-19T12:45:56.227" Score="10" Body="&lt;p&gt;You can't do this in Unix v7 unless you resort to poking around in /dev/kmem.  This is basically what ps(1) does so it's not unheard of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're interested in pursuing this, look at the source for ps to see how it locates the process table in kernel memory, then make a similar tool that reads the global file table.  The next step will then be to locate the user area for each process so that you know which files are open by whom.  This may require you to look in /dev/swap for processes that are swapped out, but I think the ps sources have an example of how to do that as well.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-05-19T12:45:56.227" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2948" PostTypeId="2" ParentId="1818" CreationDate="2017-05-19T15:12:00.217" Score="1" Body="&lt;p&gt;I still remember using phone support in 1994-5 with Metrowerks, when CodeWarrior had a serious shared library loading bug. The bug was known but not fixed in that version, so we had to order a new version - several CDs. So the &lt;em&gt;old&lt;/em&gt; style of support persisted into the early days of the web, because most people did not have the bandwidth or space to download significant patches. When updates were placed on servers in 1994-5, the servers got slammed. Apple put System 7.5.5 on &lt;code&gt;ftp.apple.com&lt;/code&gt; and I had to download the update from Usenet groups instead because all the official servers were busy.&lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="7946" LastEditDate="2020-03-11T09:02:08.440" LastActivityDate="2020-03-11T09:02:08.440" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="2949" PostTypeId="1" AcceptedAnswerId="2950" CreationDate="2017-05-19T17:52:17.310" Score="10" ViewCount="1143" Body="&lt;p&gt;I've been programming the C64 on/off for over 30 years (wow).  However, I have a few VIC-20's I want to program.  I never had a VIC-20 as a kid so I haven't had much exposure to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I correct in thinking that the VIC-20 cannot perform line-level raster interrupts like the C64 can?  How would a programmer, for example, change the background color mid-character?  I'm assuming one of the CIA timers would be used?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than hardware sprites and scrolling, what other video limitations are there compared to the C64?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2018-04-01T23:13:04.230" Title="Did the VIC-20 support raster scanline tricks like the Commodore 64?" Tags="&lt;programming&gt;&lt;display&gt;&lt;vic-20&gt;&lt;interrupt&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2950" PostTypeId="2" ParentId="2949" CreationDate="2017-05-19T18:43:49.940" Score="12" Body="&lt;p&gt;You're correct; the only interrupts on offer in a Vic-20 are those from a VIA — they're plain old 6522s in the Vic-20, not 6526s. The original VIC chip exposes the current scan line via a couple of registers so instead you'd perform a busy loop until it got to the number you wanted, then cue the VIA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not a C64 expert but besides the lack of hardware sprites and sub-character scrolling, the main limitations are the halved horizontal resolution and the lack of both extended background colour mode and bitmap mode. It's character mode only, each being either 1bpp from cell's colour plus the global background colour or 2bpp from the global background, border and auxiliary colours plus that cell's colour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, with no bad lines, the character indexes are reread every scan line. So if you can think of a use for mid-character tile substitutions then that's an option. And the lack of bad lines allows the CPU to run marginally faster.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-05-19T18:43:49.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2951" PostTypeId="2" ParentId="2691" CreationDate="2017-05-19T20:37:48.813" Score="13" Body="&lt;p&gt;The &quot;p&quot; program shown is a rudimentary pager (just stopped each 22 lines to wait to hit enter - 22 was chosen because some tools formatted output into 66-line pages with headers and footers) that appears in Research Unix v8 and onward, which suggests that what was being shown was the then-current version of Research Unix (this was three years before v8 was formally released). Version numbers weren't really a thing for Research Unix outside the preparation of printed manuals and distribution tapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other commands - makewords, lowercase, unique (by that name, though it may well simply be &lt;code&gt;uniq&lt;/code&gt; renamed), and mismatch (which appears to be a cut-down version of &lt;code&gt;spell&lt;/code&gt;) don't appear in v8 but may have been demonstration programs or scripts created to show off the concept of pipelines for the video.&lt;/p&gt;&#xA;" OwnerUserId="1891" LastActivityDate="2017-05-19T20:37:48.813" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2952" PostTypeId="1" AcceptedAnswerId="2953" CreationDate="2017-05-20T13:59:06.423" Score="21" ViewCount="3791" Body="&lt;p&gt;I want to install Windows 3.1 on my MS-DOS 6.22 Machine. I have the 6 disk images. But I only have 1 or 2 spare Floppy disk that I can write the disk images onto. One way I can think of is to write the first disk image on one, and then when the next is requested, I make the next one. But of course this will take forever (and I have to repeat this if later I want to reinstall it for whatever reason). So is there a better way to do this or I am forced to write them one at a time?&lt;/p&gt;&#xA;" OwnerUserId="4906" LastEditorUserId="4931" LastEditDate="2017-05-21T19:22:01.547" LastActivityDate="2017-05-22T19:33:46.103" Title="Is there a better way to the 6 disks install of Windows 3.1" Tags="&lt;floppy-disk&gt;&lt;windows-3.x&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2953" PostTypeId="2" ParentId="2952" CreationDate="2017-05-20T15:24:43.560" Score="32" Body="&lt;p&gt;If my memory serves well, Windows can be installed from a directory on hard disk. You need a means of reading all disks and storing its files on the same directory on the hard disk of your target machine. There may be files that are the same (DISK.ID or something). Just overwrite them. Then, invoke the INSTALL application from the copied directory. I think that's the way I did to install Windows 3.11 into a DosBox VM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may work if all the files are in a directory in a CD ROM as well.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-05-20T15:24:43.560" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2954" PostTypeId="2" ParentId="2939" CreationDate="2017-05-20T16:51:09.727" Score="6" Body="&lt;p&gt;Multiple sources on the internet point out that Rev 8a is indeed an Amiga 500 Plus and not a regular Amiga 500. And your picture clearly shows A500+ printed on the board. So I guess it can be said you own an A500 Plus, just with a 2MB Agnus but 512KB of memory. Does it have an on board clock chip and battery, out of curiosity?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The A500Plus service manual (&lt;a href=&quot;http://www.gamesx.com/wiki/lib/exe/fetch.php?media=amiga:amiga_500plus_-_service_manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.gamesx.com/wiki/lib/exe/fetch.php?media=amiga:amiga_500plus_-_service_manual.pdf&lt;/a&gt;) points out that the A501 and A501Plus use the same PCB, just the A501Plus does not have the clock chip and battery soldered in. It also states that the original A501 can be used both on an A500 (where it will result in the 512KB chip + 512KB slow fast memory configuration) and on an A500Plus (where it will be mapped in chip ram - I assume to give 1.5MB of chip ram, since the rest of the document describes the regular A500Plus with 1MB on board). It does not say anything about what happens with an A501Plus on an 512KB A500Plus. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, at the end, the list of jumpers in the schematics have a &quot;JP2&quot; jumper that selects between &quot;C0 vs. 08 address map&quot; (0x00C00000 being the slow-fast RAM, 0x00080000 the second Megabyte in chip RAM). Also a JP4 seems to select between 512KB and 1MB on board memory (so a 512KB Amiga 500Plus is indeed a supported configuration except it was never officially released??). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is that hardware-wise, you should be able to mount an A501 Plus in your Rev8a board with 512KB, and that you don't really risk damaging anything. However, again, this is just a guess, so you may want to wait for other answers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you probably still won't get 1.5MB chip RAM because, at least in the leaked Os 3.1+ source code (and there's no reason to believe earlier version to behave differently), Exec checks for Chip ram earlier during boot by starting at location 0 and probing every 16KB for memory and exiting as soon as the test fail, and finally creating one (and only one) node in the free memory list for the (continuous) area of Chip RAM that it found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you would have two options here:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;use some kind of command to add the second MB of chip ram starting at 0x080000 to the free mem list, to get 2 non contiguous chip ram areas (a configuration some applications may not like)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;or solder the missing 512KB of chip ram on the motherboard, fit the A501Plus in to turn it in a regular 1MB A500Plus + 1MB A501 Plus system.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;BTW, if you ever try and somewhat manage to have the hardware drive at least part of the memory of the A501Plus, you can use this program go add the region of memory not recognized by Exec: &lt;a href=&quot;http://aminet.net/package/util/misc/ROMTagMem&quot; rel=&quot;noreferrer&quot;&gt;http://aminet.net/package/util/misc/ROMTagMem&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2017-05-20T19:55:06.870" LastActivityDate="2017-05-20T19:55:06.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2955" PostTypeId="2" ParentId="2939" CreationDate="2017-05-20T19:01:36.560" Score="3" Body="&lt;p&gt;Any memory card added to the expansion bay will only show up as &lt;strong&gt;slow RAM&lt;/strong&gt;, by default.  To increase the amount of &lt;strong&gt;chip RAM&lt;/strong&gt; you would need to make modifications.  To get more than 512KB of chip RAM you need to add the missing RAM to the motherboard, and to get more than 1MB of chip RAM you also need to add the missing 74F(AS)139 at the unpopulated U32 location (this chip is what decodes the upper 1MB of chip ram).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Valid options are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Leave the motherboard alone -&gt; Max 512KB chip + expansion as slow ram&lt;/li&gt;&#xA;&lt;li&gt;Add 512KB to the motherboard -&gt; 1MB chip + expansion as slow ram&lt;/li&gt;&#xA;&lt;li&gt;Add the 512KB and U32 to the motherboard -&gt; more than 1MB chip with expansion RAM as chip ram&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="320" LastEditorUserId="320" LastEditDate="2017-05-21T23:47:03.980" LastActivityDate="2017-05-21T23:47:03.980" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="2956" PostTypeId="2" ParentId="2942" CreationDate="2017-05-20T20:34:51.353" Score="4" Body="&lt;p&gt;4 3/8 inches is 111.125 mm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Google search for the Swedish term &lt;code&gt;termopapper&lt;/code&gt; (thermal paper) &lt;code&gt;110mm&lt;/code&gt; gives me at least four hits on the first page alone for online stores that sell such paper. While none of those four appear at a glance to state whether it's in stock or not, it's clearly possible to procure. They even appear to offer different core diameters, so it shouldn't be too hard to find one that will fit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That would be the same type of paper as is used e.g. for cash registers (at least one of those sites offer &quot;not sales receipt&quot; card terminal rolls alongside), and I can see no good reason why it wouldn't work in a printer designed for thermal paper. At worst the print quality may suffer slightly, like how inkjet printers need specially coated paper for best quality results (but will &lt;em&gt;work&lt;/em&gt; with almost anything resembling paper of appropriate weight/thickness), but using generic thermal paper &lt;em&gt;shouldn't&lt;/em&gt; cause any hardware damage and should certainly allow you to use the printer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, I would expect any decent office supply store to either have it in stock, or at least be able to order it for you easily enough. Just don't mention that it's for a retrocomputer printer, or it will likely get a lot more difficult. Office supply store salespeople are used to dealing with customers who know exactly what they need, so just asking for rolls of 110 mm wide thermal paper should be enough.&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-05-20T21:00:46.880" LastActivityDate="2017-05-20T21:00:46.880" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2957" PostTypeId="2" ParentId="2749" CreationDate="2017-05-22T07:36:53.523" Score="2" Body="&lt;p&gt;RGA stands for ReGister Address.&#xA;Agnus controls it together with the DRAM multiplexed address bus and the chips data bus.&#xA;Examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CPU must read or write register N. Agnus puts N on RGA and connects the chips data bus with the CPU data bus&lt;/li&gt;&#xA;&lt;li&gt;DMA channel must read or write location L on register N. Agnus puts L on DRAM address, N on RGA. DRAM data bus is the chip data bus, therefore the data goes from DRAM to register or  vice versa depending on what control lines Agnus asserted.&lt;/li&gt;&#xA;&lt;li&gt;Copper MOVE, this is similar to a DMA read except the N is the target register of the move and L is the second word of the move instruction.&lt;/li&gt;&#xA;&lt;li&gt;Strobe. Sometimes the RGA is not the address of a real register but a magic register address number. Agnus use this to trigger some behavior on the other custom chips. E.g. vertical blank.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="124" LastEditorUserId="124" LastEditDate="2017-05-22T08:16:58.340" LastActivityDate="2017-05-22T08:16:58.340" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2958" PostTypeId="1" AcceptedAnswerId="2959" CreationDate="2017-05-22T11:30:37.307" Score="8" ViewCount="352" Body="&lt;p&gt;PDP-11 is said to be word addressable, which means every data access returns 16-bit data. Suppose I give a read request for address 100 in memory. Will it return 8 bits (LSB) from address 100 and 8bits (MSB) from address 101? As PDP-11 has 16 address bits does it have only 32K memory locations (16 bits each) or 64K memory locations (8 bits each)? &lt;/p&gt;&#xA;" OwnerUserId="5093" LastEditorUserId="278" LastEditDate="2017-05-22T21:41:44.907" LastActivityDate="2017-05-22T21:41:44.907" Title="How many bits are stored in a memory location in a PDP-11?" Tags="&lt;assembly&gt;&lt;memory&gt;&lt;pdp-11&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2959" PostTypeId="2" ParentId="2958" CreationDate="2017-05-22T11:41:47.763" Score="9" Body="&lt;p&gt;The PDP-11 could address 64kb of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It handled data as words, each word being addressed at an even memory location.&lt;br&gt;&#xA;So it depends on what your &quot;data read instruction&quot; is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you issue a &lt;code&gt;MOV&lt;/code&gt; instruction to move data from memory to a register, it would return a 16 bit word.  A word instruction could only address even memory addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you issue a &lt;code&gt;MOVB&lt;/code&gt; instruction to move just a byte, the register would be sign-extended into the upper 8 bits of the word.  A byte instruction could address odd or even memory addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many instructions exist with a form that operates on words and a form that operates on bytes.  The byte form of the instruction would have the &lt;code&gt;B&lt;/code&gt; suffix.  If the most significant bit of the opcode was 1, then it operated on bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a quick reference guide to the PDP-11 instruction set &lt;a href=&quot;http://www.cdf.toronto.edu/~ajr/258/pdp11.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; from Toronto University.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that the PDP-11 is known as &lt;em&gt;middle-endian&lt;/em&gt;.  In that each word is little-endian - the low addressed byte is the LSB.  That word must be aligned on an even memory address.  When doing 32-bit arithmetic, which the PDP-11 could do, the word on the lower address word was the MSW - big-endian.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-05-22T11:51:44.867" LastActivityDate="2017-05-22T11:51:44.867" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2961" PostTypeId="1" AcceptedAnswerId="2965" CreationDate="2017-05-22T15:09:40.100" Score="9" ViewCount="841" Body="&lt;p&gt;I was reading about the Audio/Video port pinouts of the VIC-20 and I noticed that pin 4 is &lt;code&gt;VID L&lt;/code&gt; and pin 5 is &lt;code&gt;VID H&lt;/code&gt; meaning Video Low and Video High, respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm familiar with luma, chroma, etc. but the term Video Low and Video High confuses me in the context of the VIC-20.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone shed some light on this subject?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks &lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-05-22T15:58:06.553" Title="What was the difference between &quot;Video Low&quot; and &quot;Video High&quot; on the VIC-20?" Tags="&lt;video&gt;&lt;vic-20&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2962" PostTypeId="1" CreationDate="2017-05-22T15:16:45.243" Score="16" ViewCount="2859" Body="&lt;p&gt;I am curious what Atari recommended to users as an appropriate monitor for their 8 bit computers (400/800/800xl/etc).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, my Commodore 64 pairs nicely with a Commodore manufactured 1702 or 1802 monitor.  Likewise, my Amiga pairs with its 1080 or 1084.  Even my Apple //e has a corresponding (green) monochrome monitor manufactured by Apple.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think Atari made monitors until the ST came along, which makes me wonder what a user would do when the TV just wasn't cutting it anymore? I'm using my Amdek Color-I right now, but I'd like to find a better pairing for my Atari.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did Atari ever recommend a brand or model of monitor?  Without getting opinion based, did a &lt;em&gt;de facto&lt;/em&gt; standard evolve among Atari users of the period?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="276" LastEditDate="2017-07-04T08:47:57.337" LastActivityDate="2018-07-21T23:21:09.733" Title="What monitor did Atari recommend for its 8 bit product line?" Tags="&lt;atari&gt;&lt;crt-monitor&gt;" AnswerCount="6" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2963" PostTypeId="2" ParentId="2962" CreationDate="2017-05-22T15:33:28.620" Score="12" Body="&lt;p&gt;I don’t think they ever recommended a monitor. As far as I can remember, Atari communications showed Atari computers on their own, or connected to TVs; see for example this &lt;a href=&quot;http://atarimagazines.com/ads/showad.php?ad=antic/1200xl&quot; rel=&quot;noreferrer&quot;&gt;1200XL advert&lt;/a&gt;, and Atari UK’s magazine, Atari I/O (issues &lt;a href=&quot;https://issuu.com/prixon/docs/atari_input-output_issue_2&quot; rel=&quot;noreferrer&quot;&gt;2&lt;/a&gt;, &lt;a href=&quot;https://issuu.com/prixon/docs/atari_input-output_issue_3&quot; rel=&quot;noreferrer&quot;&gt;3&lt;/a&gt;, &lt;a href=&quot;https://issuu.com/prixon/docs/atari_input-output_issue_4&quot; rel=&quot;noreferrer&quot;&gt;4&lt;/a&gt;, and &lt;a href=&quot;https://issuu.com/prixon/docs/atari_input-output_issue_5&quot; rel=&quot;noreferrer&quot;&gt;5&lt;/a&gt;). At least in Europe, 8-bit Ataris produced nice video on most TVs (I didn’t grow up with NTSC so I don’t know how bad US TVs are for computer use).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don’t know whether a de facto standard ever emerged.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-05-22T15:33:28.620" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2964" PostTypeId="2" ParentId="2962" CreationDate="2017-05-22T15:38:47.317" Score="3" Body="&lt;p&gt;The original Atari 800 monitor output (5-pin DIN) supports both composite video and S-video. Thus, the Commodore 1702 pairs very well with it, using the Chroma+Luma (S-video) inputs. Same with any other S-video capable monitor. Later versions of Atari 8-bits tended to not support S-video, but are &lt;a href=&quot;http://biosrhythm.com/?p=1002&quot; rel=&quot;nofollow noreferrer&quot;&gt;easily modified to provide S-video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think there was ever a &quot;de-facto standard&quot; Atari 8-bit monitor. People tended to purchase the best monitor for the type of software they wanted to run. A spreadsheet and word processor user might prefer a cheap monochrome display over a color S-video display.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-05-22T15:38:47.317" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2965" PostTypeId="2" ParentId="2961" CreationDate="2017-05-22T15:58:06.553" Score="7" Body="&lt;p&gt;The VLOW signal on Pin 4 of the VIC-20's monitor port has a low-pass filter applied to it, where Pin 5 (VHIGH) is not filtered. See &lt;a href=&quot;http://sleepingelephant.com/ipw-web/bulletin/bb/viewtopic.php?t=2477&amp;amp;start=90&quot; rel=&quot;noreferrer&quot;&gt;this post&lt;/a&gt;, which specifically says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Then the signal is buffered by emitter follower Q7, with a 270 ohm load and fed to pin 5 of the video socket directly and to pin 4 via 3.9uH inductor L2 and C18 which together form a low pass filter. I need to confirm the value of C18 from a real machine, the marking is hard to make out on the scanned copy, but I would expect the cutoff frequency to be of the order of 5MHz. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-05-22T15:58:06.553" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2966" PostTypeId="2" ParentId="2952" CreationDate="2017-05-22T19:33:46.103" Score="3" Body="&lt;p&gt;You can get a floppy emulator that physically connects to the floppy controller in place of the floppy drive. To &quot;load&quot; a floppy disk, you simply choose the image file. Then you don't have to mess with floppy disks at all, and the computer doesn't notice any difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of these emulators mount in the floppy drive bay, then you load the images onto an SD card or USB stick and select the active image using buttons on the front of the emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other emulators connect via USB to another computer running software to choose the image file. Then you don't have to mess with SD cards or fiddle with buttons, but the downside of course is that it depends on a second computer sitting nearby.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-05-22T19:33:46.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2967" PostTypeId="2" ParentId="2909" CreationDate="2017-05-22T20:09:09.037" Score="38" Body="&lt;p&gt;First, for Commodore's part, it should be obvious the reason for choosing the 6502 microprocessor for all their 8-bit machines (notwithstanding the dual-processor &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_PET#SuperPET_9000_series&quot; rel=&quot;noreferrer&quot;&gt;CBM 9000&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_128&quot; rel=&quot;noreferrer&quot;&gt;C128&lt;/a&gt;) - Commodore owned MOS. Jack Tramiel was very focused on vertically integrating his manufacturing, which basically assured Commodore's use of MOS CPUs and support chips. Since Commodore sold more 8-bit home computers than any other vendor, this fact alone greatly influenced the 6502's preeminence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, the aggressively low price point of the 6502. Chuck Peddle's team developed the 6502 to be a low-cost, compatible, Motorola 6800 &quot;killer&quot;, much the same way as Zilog did in targeting the Intel 8080 with the Z80. Again, Jack Tramiel's willingness to far undercut his competition kept the 6502 as a relative bargain among the early 8-bit options. As noted in this &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2760/how-much-did-the-6502-and-z80-cost&quot;&gt;question&lt;/a&gt; the 6502 was around 1/3 the cost of the Z80, and both were far cheaper than Motorola and Intel equivalents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third, MOS also created system support chips that were designed to easily interface with the 6502, such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6522&quot; rel=&quot;noreferrer&quot;&gt;6522 VIA&lt;/a&gt;. This made adding I/O capabilities very simple for system designers, and that freed them to focus more on custom circuitry that would help distinguish their system in the marketplace of many computers built around this basic chipset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fourth, the early success of the several 8-bit machines in both North America and Europe created a virtuous ecosystem of hardware designers and software programmers that knew how to work with the 6502. The momentum and professional user base made for a popular &quot;platform&quot; even before that term was widely used, and this reinforced vendors to stick with it as long as it remained technologically competitive with newer CPUs, and perhaps even longer. Indeed, the video game console industry shared in this platform ecosystem, and the 6502 dominated that category too. First in Atari consoles and then in the original NES, which used an ASIC version of the 6502 in the form of the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2592/what-is-the-relationship-between-the-ricoh-2a03-and-the-mos-6502&quot;&gt;Ricoh 2A03&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fifth, the 6502 had robust industry support that delivered enhanced versions (65C02 CMOS version, 65C816 16-bit version), higher clock speeds (capping out at 14MHz), alternative chip manufacturing sources (Rockwell, Synertek), and licensing of the 6502 IP to create custom ASIC devices. In this sense, it was a precursor to what happened with the ARM platform in the embedded computer (phones, etc.) industry. These enhancements and licensing extended the lifespan of the platform, leading to its inclusion in many additional computer and console products.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the KIM-1, released in 1976, and the Super NES (65c816 core), released in 1991, can serve as &quot;bookends&quot; for the 6502 platform dominant years, that represents a 15-year run in the home computer and console market. Of course, by 1991, the computing world was rapidly consolidating around the IBM PC &quot;clone&quot; standard, but the low-cost, high-volume, Super NES was capable of graphics, sound, and gaming abilities that exceeded much more expensive PCs. It was even competitive with newer 16-bit CPU systems more purpose-built for gaming, like the Amiga, Atari ST, and of course the 68000-based Sega Genesis. Even today, the 65C02 CPU continues to be manufactured and licensed (as a core CPU) for use in embedded systems.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-05-23T03:18:49.393" LastActivityDate="2017-05-23T03:18:49.393" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2968" PostTypeId="2" ParentId="2553" CreationDate="2017-05-22T22:05:21.863" Score="12" Body="&lt;p&gt;It cost me something like $50 all up to connect my Electron to the TV using an RGB to SCART cable (&lt;a href=&quot;http://www.ebay.com/itm/171309263925&quot; rel=&quot;noreferrer&quot;&gt;this one from eBay&lt;/a&gt;) and an RGB to HDMI converter like the one pictured below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Wvm7i.jpg&quot; alt=&quot;RGB to HDMI converter&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can get this model from a bunch of different eBay sellers, under various different brand names, but they're all the same.  I've tested it out with MODE 0 - MODE 6, and it seems to consistently work well.  It also works well with my BBC Model B  The only time I've seen it fail is when playing &lt;em&gt;Firetrack&lt;/em&gt; on the Electron, which does some tricky stuff with the video output to get more colours.&lt;/p&gt;&#xA;" OwnerUserId="5095" LastEditorUserId="5095" LastEditDate="2017-06-15T21:08:30.547" LastActivityDate="2017-06-15T21:08:30.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2969" PostTypeId="2" ParentId="2962" CreationDate="2017-05-23T01:35:08.997" Score="9" Body="&lt;p&gt;As others have said, Atari didn't recommend a monitor as far as I'm aware, but I can confirm S-Video on a Sony PVM looks fantastic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember as a kid my Dad telling me why he'd bought a Sony TV (a little 14&quot; Trinitron) and him showing me &lt;a href=&quot;https://archive.org/details/agm_archon&quot; rel=&quot;noreferrer&quot;&gt;the manual for Archon&lt;/a&gt;. Interestingly enough, EA did recommend a Sony ;)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kJCu3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kJCu3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="107" LastEditorUserId="107" LastEditDate="2017-05-24T01:41:08.433" LastActivityDate="2017-05-24T01:41:08.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2970" PostTypeId="1" AcceptedAnswerId="2971" CreationDate="2017-05-23T13:58:13.053" Score="16" ViewCount="3695" Body="&lt;p&gt;IBM famously created the PC standard with the introduction of the first IBM PC in 1981. IBM also extended the standard with the introduction of the PC/AT (1984) and the PS/2 line (1987). However, by 1987, IBM had lost control of their market and PC clone manufacturers were responsible for most of the new system sales.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that it was IBM that initiated most of the standards, such as ST-506 HDDs, the various graphics adapters/modes, BIOS interfaces, connectors, keyboard layout, standard peripheral chips, etc. So, I suspect there are a very few standard technologies first brought to market by one or more clone manufacturers. The well-known example is the EISA bus standard, which was simply to negate the effect of IBM's proprietary Micro-Channel Architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides EISA, what eventual PC clone standards were first introduced by  manufacturers of clone computers, and who introduced them?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE 1: I'm not looking for a list answer per se, since my assumption is there are &lt;strong&gt;very few&lt;/strong&gt;, if any technological innovations that can be traced to R&amp;amp;D efforts by a PC clone manufacturer (besides EISA).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE 2: I'd greatly prefer an answer where the innovation &lt;em&gt;really&lt;/em&gt; came from a clone computer manufacturer, not someone in the PC peripheral or semiconductor business. Companies such as Dell, Gateway, Compaq, Wyse, NEC, Olivetti, Toshiba would be potential examples of companies that manufactured clones.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-05-23T21:32:05.187" LastActivityDate="2019-07-12T14:08:07.773" Title="What PC &quot;Clone&quot; technology standards were introduced by clone manufacturers?" Tags="&lt;hardware&gt;&lt;history&gt;&lt;ibm-pc&gt;" AnswerCount="6" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2971" PostTypeId="2" ParentId="2970" CreationDate="2017-05-23T14:24:39.357" Score="24" Body="&lt;p&gt;Here are a few innovations that are not attributable to IBM, but also are &lt;em&gt;not attributable&lt;/em&gt; to PC clone manufacturers, either:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Expanded_memory&quot; rel=&quot;noreferrer&quot;&gt;LIM EMS&lt;/a&gt;, Lotus / Intel / Microsoft Expanded Memory Specification;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Parallel_ATA&quot; rel=&quot;noreferrer&quot;&gt;IDE&lt;/a&gt;, designed by Western Digital (and later expanded into various ATA standards)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ATX&quot; rel=&quot;noreferrer&quot;&gt;ATX&lt;/a&gt;, designed by Intel&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/USB&quot; rel=&quot;noreferrer&quot;&gt;USB&lt;/a&gt;, designed by a large number of companies including IBM and Intel, based on Atari’s SIO&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/AC%2797&quot; rel=&quot;noreferrer&quot;&gt;AC’97&lt;/a&gt;, designed by Intel&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Multimedia_PC&quot; rel=&quot;noreferrer&quot;&gt;Multimedia PC&lt;/a&gt;, largely driven by Microsoft&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Conventional_PCI&quot; rel=&quot;noreferrer&quot;&gt;PCI&lt;/a&gt; and its successors, designed by Intel&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There’s an obvious constant here, and it’s not IBM... As far as answering the question goes, Intel isn’t exactly a clone manufacturer in the same way as Compaq etc., but it did produce PC clones for a while. Compaq was involved in the design of a number of the above standards too, if you’re looking for a “real” clone manufacturer. But it’s really Intel (and Microsoft) who have been driving the platform.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="4335" LastEditDate="2017-05-24T01:29:08.920" LastActivityDate="2017-05-24T01:29:08.920" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2972" PostTypeId="2" ParentId="2970" CreationDate="2017-05-23T15:28:13.847" Score="17" Body="&lt;p&gt;The first PC compatible 80386 machine was introduced by Compaq.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/VESA_Local_Bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;VESA Local Bus&lt;/a&gt;, and similar short-lived/proprietary local bus standards, were also not introduced by IBM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most graphics cards that had capabilities beyond what the original VGA (IBM specification) offered were by third party manufacturers, and not based on IBM standards (like PGA or 8514a).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also: dedicated, fan/heatsink-based CPU cooling &lt;em&gt;in a PC&lt;/em&gt; (it likely existed in specialized workstation systems), which only became popular when the 486DX50 (not the 486DX2/50, different beast altogether - appeared later, and into an ecosystem where CPU coolers had become common) appeared on the enthusiast's map - while not &lt;em&gt;designed&lt;/em&gt; to be run with a cooler, practice quickly proved it needed one :)&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="836" LastEditDate="2018-03-11T10:54:44.787" LastActivityDate="2018-03-11T10:54:44.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2973" PostTypeId="2" ParentId="2970" CreationDate="2017-05-23T17:38:53.830" Score="17" Body="&lt;p&gt;Just two examples of the most important &quot;standards&quot; that came up during the PC's first years:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the first and most common PC &quot;standard&quot; graphics card was the Hercules Graphics card that was never part of any IBM &quot;standard&quot;. Cards to that de-facto standard were never produced by IBM, although they were very common in the early days and although there were quite some &quot;Hercules clones&quot; after a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer mouse was introduced to the PC world by Logitech, Mouse Systems and Microsoft in the early 80ies - IBM introduced their first mouse much later, in 1987, with their PS/2 systems.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-05-23T21:26:10.147" LastActivityDate="2017-05-23T21:26:10.147" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2974" PostTypeId="2" ParentId="2970" CreationDate="2017-05-23T21:09:26.957" Score="3" Body="&lt;p&gt;Hal Prewitt patented Hot Plug in 1987, and his company Core was the first to offer &lt;a href=&quot;http://www.coreinternational.info/1989-1992_IAS_Total_Data_Management.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;hot plug systems&lt;/a&gt; disks, controllers etc in 1990, they filed for &lt;a href=&quot;http://www.trademarkia.com/hot-plug-74140414.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;trademark&lt;/a&gt; in 1991.&lt;/p&gt;&#xA;" OwnerUserId="3722" LastActivityDate="2017-05-23T21:09:26.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2975" PostTypeId="1" AcceptedAnswerId="2976" CreationDate="2017-05-23T23:38:51.813" Score="21" ViewCount="967" Body="&lt;p&gt;What is the difference between the &quot;Return&quot; an &quot;Enter&quot; keys in the VT100 terminal:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oiLU6.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oiLU6.png&quot; alt=&quot;VT100 keyboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4905" LastEditorUserId="276" LastEditDate="2017-05-24T08:41:56.887" LastActivityDate="2017-05-24T08:41:56.887" Title="What is the difference between the &quot;Return&quot; an &quot;Enter&quot; key in the VT100 terminal?" Tags="&lt;hardware&gt;&lt;terminal&gt;&lt;vt100&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2976" PostTypeId="2" ParentId="2975" CreationDate="2017-05-23T23:54:55.380" Score="26" Body="&lt;p&gt;Under normal circumstances, there is no difference (&lt;code&gt;RETURN&lt;/code&gt; and &lt;code&gt;ENTER&lt;/code&gt; will send &lt;code&gt;CR&lt;/code&gt; or &lt;code&gt;CR LF&lt;/code&gt; as configured by the New Line Mode). However, there is a mode called &amp;quot;keypad application mode&amp;quot; where all the keys on the numeric keypad send their own distinct control sequences which are different from the rest of the keyboard.&lt;/p&gt;&#xA;&lt;p&gt;From the &lt;a href=&quot;http://vt100.net/docs/vt100-ug/chapter3.html&quot; rel=&quot;noreferrer&quot;&gt;VT-100 User Guide&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Auxiliary Keypad&lt;/strong&gt; – The keys on the auxiliary keypad normally transmit the codes for the numerals, decimal point, minus sign, and comma. In addition, the key labeled &lt;code&gt;ENTER&lt;/code&gt; transmits the same code as the &lt;code&gt;RETURN&lt;/code&gt; key. The host cannot tell if these keys were typed on the auxiliary keypad as opposed to the corresponding keys on the main keyboard. Therefore, software which requires considerable numeric data entry need not be rewritten to use the keypad.&lt;/p&gt;&#xA;&lt;p&gt;However, if software must be able to distinguish between pressing a key on the auxiliary keypad and pressing the corresponding key on the main keyboard, the host can give the terminal a command to place it in keypad application mode. In keypad application mode all keys on the auxiliary keypad are defined to give control sequences which may be used by the host as user-defined functions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4070" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-05-24T00:00:45.957" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2977" PostTypeId="2" ParentId="2970" CreationDate="2017-05-24T14:06:03.790" Score="6" Body="&lt;h1&gt;The Compaq Portable&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Now, not the first portable personal computer, but the first one which was &quot;100% IBM PC compatible&quot;. It shipped first in March 1983 (or January, according to some other source). The IBM Portable Personal Computer appeared in February 1984, the IBM PC Convertible followed in 1986.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, portable computer were not really an innovation. Then again, the IBM PC, introduced in August 1981, wasn't an innovation either. The first personal computer (which was also named as such) was the Xerox PARC's Alto from 1972. The Xerox Alto had a mouse-driven GUI (yep, a real bitmap graphics display), Ethernet, featured WYSIWYG (they specifically invented the laser printer for that feature) and an object-oriented operating system/development environment. The IBM PC, introduced almost ten years later had none of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That the IBM PC was so primitive was a key to its success, as everybody could build a cheap clone. &lt;strong&gt;However, if a clone manufacturer wanted to be &quot;100% IBM PC compatible&quot;, innovation was severely limited.&lt;/strong&gt; Several clone manufacturers &quot;improved&quot; the BIOS, as no one needed a computer which boots into a BASIC interpreter (as the original IBM PC did).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When IBM decided to make &lt;em&gt;their&lt;/em&gt; IBM PCs incompatible by introducing the Microchannel Architecture (MCA), they lost their market dominance (the competing EISA, developed mainly by Compaq, IIRC, was more successful).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also probably not invented by a clone manufacturer, but possibly first used for an IBM PC compatible: &lt;strong&gt;the tower enclosure&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not an IBM Clone, but nevertheless the inspiration for the extension card slots of the IBM PC: the Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, basically, when looking for innovation, don't look at the IBM PC market, but everywhere else. Some of the innovations in non-PC-compatibles were later incorporated into the PC design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anecdotal evidence:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine that Cray computer decides to make a personal computer. It has a 100 MHz processor, 20 megabytes of RAM, 500 megabytes of disk storage, a screen resolution of 1024 X 1024 pixels, relies entirely on voice recognition for input, fits in your shirt pocket and costs $3,000. What's the first question that the computer community asks? &quot;Is it PC compatible?&quot;&#xA;— InfoWorld, February 1984&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't ask whether a new machine is fast or slow, new technology or old. The first question is, &quot;Is it PC compatible?&quot;&#xA;— Creative Computing, November 1984&lt;/p&gt;&#xA;" OwnerUserId="5100" LastActivityDate="2017-05-24T14:06:03.790" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2978" PostTypeId="1" CreationDate="2017-05-24T16:14:21.347" Score="7" ViewCount="836" Body="&lt;p&gt;Trying to establish a null modem connection between 2 C64s using 1 Commodore 1660 300 Baud modem and 1 Commodore 1670 1200 Baud modem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody have detailed instructions on how to configure the modems for text exchange and file exchange?&lt;/p&gt;&#xA;" OwnerUserId="5101" LastEditorUserId="5101" LastEditDate="2017-05-24T17:23:52.003" LastActivityDate="2019-03-08T02:00:04.650" Title="Creating Null Modem Connection between two C64s?" Tags="&lt;commodore-64&gt;&lt;modem&gt;" AnswerCount="2" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="2979" PostTypeId="1" AcceptedAnswerId="2982" CreationDate="2017-05-24T19:25:06.707" Score="16" ViewCount="1730" Body="&lt;p&gt;I'm trying to figure out how the IBM 5150 PC handled the case where multiple physical devices (memory chips) were mapped to the same address within the 8088's physical address space.&lt;/p&gt;&#xA;&lt;p&gt;The closest I've been able to find is in the August 1981 IBM 5150 Technical Reference, where it says on page 2-68 (&lt;a href=&quot;http://www.minuszerodegrees.net/manuals/IBM_5150_Technical_Reference_6025005_AUG81.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDF&lt;/a&gt; page 87) about input from I/O address 3BCH or 378H that&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This command presents the CPU with data present on the pins associated with the out to x'3BC'. This should normally reflect the exact value that was last written to x'3BC'. If an external device should be driving data on these pins (in violation of usage ground rules) at the time of an input, this data will be 'or' ed with the latch contents.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Though of course, not only is that about port I/O, not memory-mapped devices, but also about the MDA/printer combo card, so it's not necessarily the same thing at all (though it could be).&lt;/p&gt;&#xA;&lt;p&gt;Minus Zero Degrees cautions that the base address for extension memory adapters need to be different from those of any other extension memory adapter in the system. For example, about &lt;a href=&quot;http://www.minuszerodegrees.net/5150_5160/cards/5150_5160_cards.htm#64_adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;the 64 KiB adapter&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The switches control the starting address of the RAM. /.../&lt;/p&gt;&#xA;&lt;p&gt;You can have multiple of these cards in your IBM 5150 or 5160, providing that none of the RAM on a card has an address conflict with any other RAM (motherboard RAM or expansion card RAM).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In order to have a reliable system and get the full benefit of the extra RAM installed, this makes perfect sense: No memory address conflicts allowed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;But what actually happened if you &lt;em&gt;did&lt;/em&gt; have a memory address conflict?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Did the system refuse to boot (POST failure)? Did it boot, but functioned erratically depending on which card just happened to serve the particular memory I/O request each time? Or did it boot and functioned &amp;quot;just fine&amp;quot;, except you didn't get the benefit of all the extra RAM you just installed (and if so, what about additional ROM chips)? Or what?&lt;/p&gt;&#xA;&lt;p&gt;Bonus points for answers that not only discuss the user-visible behavior, but also what was going on electrically and/or logically inside the computer.&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="6659" LastEditDate="2020-06-24T11:05:43.523" LastActivityDate="2020-06-24T11:05:43.523" Title="How did the IBM PC handle multiple physical devices serving memory at the same physical address?" Tags="&lt;ibm-pc&gt;&lt;memory&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2980" PostTypeId="1" CreationDate="2017-05-24T21:44:55.083" Score="17" ViewCount="916" Body="&lt;p&gt;On each Motherboard of an NES-001 (NTSC) there is a code: NES-CPU-xx&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These range from 04 to 11 (I think)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know if these are all of the revisions of the NES and what major differences there are between each one. (including chip sets, system architecture, etc) The most I can gather is that each revisions at least improves the CIC (10NES lockout security chip) but for even that I would love to know specifics. I have an 07. I will also be willing to accept pictures of other motherboards and share my own if possible.&lt;/p&gt;&#xA;" OwnerUserId="5102" LastEditorUserId="5102" LastEditDate="2017-05-27T20:51:14.947" LastActivityDate="2019-02-17T00:42:41.083" Title="Does anyone know the specific differences between the NES-001 (NTSC) motherboard revisions?" Tags="&lt;hardware&gt;&lt;nintendo&gt;&lt;nes&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2981" PostTypeId="1" AcceptedAnswerId="2983" CreationDate="2017-05-24T23:47:43.970" Score="8" ViewCount="766" Body="&lt;p&gt;This is certainly a long shot... this game has evaded my searching for years and I would love to have this mysterious game named once and for all.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It came out prior to 1997 (possibly earlier this is just when I discovered it) &lt;/li&gt;&#xA;&lt;li&gt;It was a turn-based (hot-seat) game&lt;/li&gt;&#xA;&lt;li&gt;It was set in space with a dozen or so planets&lt;/li&gt;&#xA;&lt;li&gt;At the start each player chose their 'spaceship' with some being faster/more fuel efficient while others had more capacity. (One of the spaceships looked like a brain)&lt;/li&gt;&#xA;&lt;li&gt;The focus was finance / strategy. You would buy/sell resources. The value of resources would go up/down like a stock-market.&lt;/li&gt;&#xA;&lt;li&gt;Your turn would end when you ended your go or decided to travel to another planet.&lt;/li&gt;&#xA;&lt;li&gt;Depending on your spaceship some planets required several hops (if you wanted to get from planet A to B you may need to go via planet C thus taking an extra turn)&lt;/li&gt;&#xA;&lt;li&gt;Mid turn you could be intercepted by a NPC who requests your help. Promising payment 50/50 chance he would rob you if you decided to help.&lt;/li&gt;&#xA;&lt;li&gt;The demo version would end after a fixed number of turns&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="5103" LastActivityDate="2017-05-25T08:07:39.967" Title="Can anyone help name this game?" Tags="&lt;gaming&gt;&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2982" PostTypeId="2" ParentId="2979" CreationDate="2017-05-25T05:06:53.797" Score="23" Body="&lt;p&gt;On early IBM PCs, all devices were conntected to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Industry_Standard_Architecture&quot; rel=&quot;noreferrer&quot;&gt;ISA Bus&lt;/a&gt;. You can read about how the bus worked in detail &lt;a href=&quot;https://gist.github.com/PhirePhly/2209518&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, including timing diagrams.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, all devices were just wired together. Some signals are controlled exclusively by the host (the motherboard, if you want). Other signals are active low and would be pulled low by any device which wanted to signal, so this is effectively a wired-or. The data lines are tristate (each device can control if the data lines are connected to the bus, or not).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means if several devices were reacting to the same address, a memory or I/O write would go to all of them. For a read, several chips would attempt to drive the same data line, and the result would depend on which driver is &quot;stronger&quot;, and on how the host reacted to voltages that are &quot;in between&quot; the defined levels. As a result, conflicting reads would deliver an unusable value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were no safeguards to prevent this. The actual effect was that usually both devices with an address conflict just wouldn't work, because the software could neither read data from them, nor reliably control one without affecting the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you had an address conflict with anything that was vital for normal operation, it wouldn't boot (but normally, cards didn't use any of these addresses).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is why you had often DIP switches on cards, so you could select one of several addresses in case of a conflict.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the IBM 5150 Technical Reference on page 2-68, it seems like some internal devices like the parallel port latches were connected directly to the bus (no tristate), and for this particularly architecture also the data lines were held or floating high on idle, and actively pulled low. So here a result of a conflicting read would be a &lt;code&gt;0&lt;/code&gt; for each bit that read &lt;code&gt;0&lt;/code&gt; on either responding device (again a wired-or), with the same effect that the resulting read was unusable.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2019-09-08T03:25:02.847" LastActivityDate="2019-09-08T03:25:02.847" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="2983" PostTypeId="2" ParentId="2981" CreationDate="2017-05-25T08:07:39.967" Score="12" Body="&lt;p&gt;I'm guessing you're talking about &lt;a href=&quot;http://www.old-games.com/download/8787/gazillionaire-deluxe&quot; rel=&quot;noreferrer&quot;&gt;Gazillionaire Deluxe&lt;/a&gt;.  It's a space trading game that came out in 1996, supported multiple players, and set in a universe with 7 planets. Notably on this screenshot taken from Old-Games.com, one of the spaceships looks like a brain:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BUr6H.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BUr6H.jpg&quot; alt=&quot;Gazillionaire Deluxe spaceship selection screenshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2017-05-25T08:07:39.967" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2984" PostTypeId="2" ParentId="975" CreationDate="2017-05-25T12:14:53.700" Score="11" Body="&lt;p&gt;Interlacing works basically by adjusting the start time of a new field (half-frame) forward or back by half a scanline in relation to the previous one. Thus either the first line is complete and the last one finishes early (after starting normally), or the first one starts late (but ends at the normal time) and the last one is complete. Literally, when it's stated as &quot;312.5 lines per field&quot;, that's the honest truth, not an averaging of a 312 and a 313 whole-line pair. You could see it as a single extra-tall frame of 625 lines where an extra Vsync pulse is issued EXACTLY halfway down the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the main horizontal AND vertical scan circuitry is continually running, at a steady pace, and each one always resets to the same distance up or across the screen regardless of what the other does (hence the 2D rolling effects with a desynched signal), there's nothing to say a Vsync can't happen at any arbitrary point along a horizontal line... and each line is actually very slightly diagonal - its position up/down the screen at its start point is essentially the same as the end of the previous one, plus a tiny displacement caused by the flyback time (ditto the vertical, if you could make the very last and very first lines visible between an &quot;odd&quot; and &quot;even&quot; field, the last line of the odd field wouldn't be quite 1/2 length when it finished, and the first line of the even field would start a little after halfway, with a very steep, dim (as it's more spread out) line connecting those two points across the entire height of the display, with the signal structure and circuitry designed to make it all even out. And, at least for computer monitors, a minuscule little twist engineered into the orientation of the electron gun (and, for colour, dot/aperture mask) assembly, and a slowly shifting bias to the horizontal deflection, to make the lines actually horizontal but with a much steeper descent on each flyback... (without the shifting bias they would have obvious trapezoidal edges because the Vscan centreline is no longer fully vertical)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The net effect being that the second line of an even field is displaced upwards by half a field-line height compared to the second line of an odd field, because it starts half a line-time earlier compared to the start of the vertical sweep. And so is every other &quot;even&quot; line vs its matching &quot;odd&quot; line. (The first, half-length one starts at the same height as its counterpart, but it's already halfway along, so the odd line has already descended by half its full sweep height).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naturally, with a non-interlaced scan, connected to a simplistic old school single-frequency CRT that ALWAYS deflects its beams at the same rate (ALWAYS!), and whose only sop to a not-quite-correct input scan rate is to reset the deflection to the &quot;zero&quot; (minus preset calibration bias) position in time with the appropriate H or Vsync pulses (so long as they're not so fast that the flyback circuitry hasn't fully charged, nor so slow that the beam has deflected way off the screen and the circuits are overcharged... by which point a safety trap circuit should've kicked in and issued an automatic unsynched flyback anyway), each field will exactly overlay its predecessor, at twice the normal rate, but with nothing at all displaying on the lines that would be taken by the other field. Hence, scanlines. The basic TV / 15khz monitor is a pretty unintelligent beast, it just looks for those particular pulses and resets when they come in, not holding a great deal of information in state re: scanrate, line count, what the current field is, etc. Most of the cleverness, including the 4-field colour sync cycle for broadcast images, is inherent to the signal instead and dealt with by what were originally very complicated room-filling machinery at the studios.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, there are differences between the existing standards, and here I think is the root of why NTSC computer/console displays at 240p have obvious scanlining, whereas PAL ones generally do not. Or did not, should I say?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1/ Higher inherent resolution, and often smaller screens. The lines are crammed closer together by about 20%, and may themselves be smaller, which leads to a bit of physical &quot;Kell&quot; smearing (which for broadcast material lowers the apparent resolution by anything upto 30%) that's worse for smaller sets than large ones because the actual overshine radius stays about the same... thus is proportionally wider.&#xA;If you're sitting a few feet away, a small 12 or 14 inch screen with a not particularly fine-grained mask (especially if it's a dot/cluster shadowmask rather than aperture type) simply isn't able to render each line with enough clarity at your eye for you to easily pick up on any discontinuity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2/ PAL colour encoding, vs NTSC. This isn't relevant to RGB connections, true, but some of the cheaper ways to implement the decoding may still have been permanently active regardless of input method (certainly, when our ST's CM8833 was run in 60hz by a game that could do the switch, it seemed a lot more &quot;liney&quot; than might have been expected, and far moreso than at 50hz - the vertical height was increased automatically too, meaning it had at least enough intelligence to detect between the two modes, and therefore potentially change other display circuitry settings, because a truly &quot;dumb&quot; monitor would have shown a 320x200 image at the same size just with smaller vertical borders, and probably displaced upwards somewhat).&#xA;The main method I'm thinking of here is the rock-bottom &quot;PAL-S&quot; mode, which relied on simple visual smearing and interpolation to produce the final colour from the two opposite-phase components that would otherwise both be the wrong colour... essentially dealing with the line-by-line colour dithering by blurring them together, partly physically at the screen, partly in the eye, and partly in a temporal (alternate flash) fashion. This is what's behind the faint &quot;green and purple&quot; and &quot;red and blue&quot; stripes seen in the closeups. Obviously, the way this works is by making each line excessively tall (either just defocussing the gun a little and accepting the blurring effect this would also have on the horizontal resolution, or increasing the amplitude of any installed &quot;spot wobble&quot; circuit which oscillates the vertical deflection voltage very slightly at extra-high speed (10+mhz), increasing the apparent height (and edge-softness), and slightly reducing the brightness, of each line as the gun aim jitters up and down a bit several times within one spot width's worth of sweep. Normally this would make the otherwise quite starkly different and contrasting interlaced scanlines overlap just enough to reduce the stripes to more of a faint wavering gradient pattern instead (&quot;hanover bars&quot;), mainly only really discernible with artificially strongly-saturated colours, and greyshades on signals with a lot of phase error, disappearing into homogeneity with a cleaner or less saturated signal. For a non-interlaced computer, it smears each actually-scanned line far enough into the unscanned region that adjoining field lines should overlap slightly (thus reinforcing each other in the very middle of the unscanned area)... and as they're double-scanned, therefore being made twice as bright as they otherwise might have been, those more dimly lit overlap areas are also considerably above black, and there's the effects of stronger phosphor overshine to consider as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(that said, I am a little confused at seeing those vertically-displaced hanover bars - what SHOULD happen is that each opposite-colour line is directly overlaid on top of the previous one, and so you'd instead see a very rapid shimmer effect, alternating temporally but fairly stable in the spatial dimension... and in fact if it's a baseband or a reasonably clean RF signal with no skew or other phase issues, and the monitor picks up the colourburst properly, the phase reversal should happen the same on both sides, and it would then scan the same colour for each line anyway. Colour mixing isn't an essential part of getting an accurate colour image out of a PAL set - it's merely one of its robust error-rejection features where an image tends more towards monochrome as its colour components are symmetrically displaced (NTSC lines in one direction, PAL in the other) by phase errors picked up along the transmission path, but the hue remains relatively stable. Hence no hue control on most PAL sets. So here it's maybe more likely that one or more of the colour guns isn't aimed entirely straight compared to the others? EG there might be a slight vertical mismatch between red and blue, but a bigger one between both of them and green, almost as much as a half line in fact; so in the not-quite-white background image (paper 7, bright 0), the magenta/green contrast is most obvious, as the &quot;dark&quot; lines are being lit mainly by the green gun, and the &quot;light&quot; ones by a reasonable overlap of the red and blue, with their own displacement masked by the overall brightness, and the further interference with each to produce cyan and dim yellow. On the magenta border, where the green gun doesn't fire at all, the displacement of the red and blue guns becomes more obvious, as now each not only overlap each other to make a magenta combination for the &quot;lit&quot; lines, but also claim a portion of the &quot;unlit&quot; line for themselves, forming a red and a blue stripe outline alongside; one suspects yellow would then give an impression more like white, and cyan more like magenta, with each of the three primaries having a more clearly scanlined appearance, much like the pixels on an overly coarse LCD.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For NTSC, no such scheme is applied, as the only smoothing-out technique applied to the colour is to shift the clock a little each line and each field, which counters some of the dot-pattern effects but doesn't do anything for phase errors as it's always in the same direction and orientation. So every line is an NTSC line, there's no need to smear the colours between them, and there's fewer lines anyway so the spot wobble / gun focus is made as tight as can be got away with whilst still producing a smooth, uniform picture in full interlace. Thus when you switch into progressive, the most help you get is overshine from the inherently brighter scanlines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A different PAL scheme is that of the acoustic (later, digital) delay line where the colour info from one field is stored directly into the start of the line, whilst simultaneously being summed with what comes out the end of it after exactly one field time's, plus or minus half a line (IE either 312.0 or 313.0 lines, because it has to be reused with a slight displacement... maybe alternating with two very slightly different lines, even), and that used as the actual colour information for the current line. Aka PAL-D.&#xA;(obviously, this gives you some lines, especially halflines, where the delay doesn't work right, and you get an output line with wildly incorrect chroma... this shouldn't matter though, given that the halfline is DEEP in the blanking area, and any artefacting output would be well into overscan and not seen.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thing is, that doesn't store the &lt;em&gt;luminance&lt;/em&gt; information in any way. ONLY the colour. And it still doesn't do anything for further filling in the black areas anyway, as the beam still scans over the same half-frame / single-field positions, just with more accurate, less changeable/shimmery colour now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, erm ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My money is on either the sets somehow automatically switching field start position anyway in the absence of a fully accurate sync signal (counting lines and ignoring the vsync after the first few fields have got it locked in), Sinclair telling a pack of lies and the composite/RF output actually being interlaced even if the RGB isn't (it might even just be an unavoidable feature of the composite encoder / RF modulator that it adds interlaced-spec timing/sync to the incoming image data even if that means actually outputting an alternating string of 311.5/312.5 or 312.5/313.5 line frames in response to a 312 or 313 progressive input), or it simply being a misfeature of badly aligned electron guns, defocussed spots, overenthusiastic spot wobble and phosphors with leaky photon wells.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you really need to do is either get an oscilloscope on there, or use a really high framerate slowmo camera (like, at least 100fps...) with good enough resolution that when you single-step the recording with decent zoom on the screen, it shows you clearly whether the image scans over the same place on every single field and it's down to a combination of other factors, or whether it really does interlace despite claiming not to. And do that with a variety of screens, and a couple of rival machines.&lt;/p&gt;&#xA;" OwnerUserId="5104" LastActivityDate="2017-05-25T12:14:53.700" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2985" PostTypeId="2" ParentId="195" CreationDate="2017-05-25T14:42:45.757" Score="6" Body="&lt;p&gt;If you build your own PS for the commodore 64, I'd recommend you using one of many available AC/DC switched mode power supplies for 5v, for example this one &lt;a href=&quot;https://octopart.com/eps-15-5-mean+well-26613044&quot; rel=&quot;noreferrer&quot;&gt;https://octopart.com/eps-15-5-mean+well-26613044&lt;/a&gt; or any alike. They are light, small and cool under full load, unlike 7805-based scheme in the neighbouring answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;9V AC power supply has to be floating with regard to 5v supply, so the simplest way is to use any of the available compact conventional 50Hz or 60Hz transformers. If the transformer available has slightly greater output voltage, you can try to unwind secondary winding to the required level, since the secondary winding is usually accessible. It makes sense also to connect primary winding of the transformer after the input filters in your AC/DC 5v power supply or just use additional input filters, as to lower the sensitivity to the noise coming from the power socket.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2017-05-25T14:42:45.757" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2986" PostTypeId="2" ParentId="975" CreationDate="2017-05-25T14:52:01.210" Score="0" Body="&lt;p&gt;Scanlines seen in the topic starter's setup actually do not depend on the type of home computer he used to connect to his TV, but just on two factors:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Whether his home computer was emitting true interlaced raster or 'static' non-interlaced one. For example, not only ZX but also C64 emits 'static' non-interlaced raster, but Commodore Amiga is able to work both ways -- with and without an interlace.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Whether his TV or monitor has enough sharpness to see less brightened space between the light traces of focused electron ray. For example, I own NEC multisync CRT monitor for the Amiga (which is able to show both TV and VGA rasters) and when I use non-interlaced TV mode on my Amiga (like 640x256 50Hz), the scanlines are seen there very sharply. If I use some conventional home TV instead, no scanlines are visible.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2017-05-25T14:52:01.210" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2987" PostTypeId="2" ParentId="2978" CreationDate="2017-05-25T17:51:53.623" Score="9" Body="&lt;p&gt;&quot;Null modem cable&quot; may not quite be a misnomer but is potentially misleading: it is a cable that connects two computers via their serial ports &lt;em&gt;without modems&lt;/em&gt;. It's not a null cable for modems, it's the null example of one of those cables you use to connect a computer to a modem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you want to make it look like there's a phone network between two modems that are really directly wired, you're not asking about null modem cables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you just want to network two C64s then the easiest thing is directly to connect them via their serial ports. That's not technically the same thing as the normal usage of the term &quot;null modem cable&quot; because that term is usually associated with full-duplex RS-232-style connections, whereas this will be half duplex but half duplex is no barrier whatsoever to networking. Ethernet is also half duplex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.webnet.at/c64/serielles_netzwerk.htm&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; contains a [German] write-up of networking via the Commodore serial bus, including &lt;a href=&quot;http://www.webnet.at/c64/serial.zip&quot; rel=&quot;noreferrer&quot;&gt;the necessary software&lt;/a&gt;. Obviously you can use Google to read &lt;a href=&quot;https://translate.google.com/translate?sl=auto&amp;amp;tl=en&amp;amp;js=y&amp;amp;prev=_t&amp;amp;hl=en&amp;amp;ie=UTF-8&amp;amp;u=http%3A%2F%2Fwww.webnet.at%2Fc64%2Fserielles_netzwerk.htm&amp;amp;edit-text=&amp;amp;act=url&quot; rel=&quot;noreferrer&quot;&gt;a translated-to-English version&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the software is customised, the cable you'll need isn't. Any standard Commodore serial cable will do — impedance is sufficient that the author had no issues even with five C64s and a total cable length of 25 metres. So if you have a 1541 then just use the cable from that.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-05-25T18:26:19.753" LastActivityDate="2017-05-25T18:26:19.753" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2988" PostTypeId="1" CreationDate="2017-05-26T02:47:28.387" Score="7" ViewCount="1099" Body="&lt;p&gt;This is how I think terminals were connected to a PDP-11 computer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A PDP-11 computer had only one port that you can connect the console terminal (&lt;code&gt;/dev/console&lt;/code&gt;) to, and if you want to connect more terminals, you have to connect an add-on (that have terminal ports) to the PDP-11 computer, and then connect the terminals to the terminal ports on this add-on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I correct? and can you post pictures of what a terminal port looks like, and what a terminal cable that connects to that port looks like.&lt;/p&gt;&#xA;" OwnerUserId="4905" LastActivityDate="2017-06-08T12:34:06.957" Title="How were terminals connected to a PDP-11 computer?" Tags="&lt;hardware&gt;&lt;pdp-11&gt;&lt;terminal&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2989" PostTypeId="2" ParentId="975" CreationDate="2017-05-26T04:11:52.447" Score="0" Body="&lt;p&gt;Looks like a ground loop issue on the video line, happens a lot in audio you get that annoying hum. How to get rid of it requires a bit of trial and error. One thing to try is to plug the monitor and the spectrum on separated power points in the house. Another is to put either the monitor or the spectrum on a isolation transformer see if that works.&lt;/p&gt;&#xA;" OwnerUserId="2158" LastActivityDate="2017-05-26T04:11:52.447" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2990" PostTypeId="2" ParentId="2988" CreationDate="2017-05-26T07:50:43.817" Score="2" Body="&lt;p&gt;Not quite correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-11, like all DEC machines, had one port which was dedicated to the console device.  The dedicated console port had elevated privileges and was used by the system for event logging.  This did not mean that it didn't have other serial ports into which you plugged the terminals.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may be thinking of a &lt;em&gt;DecServer&lt;/em&gt;.  If your DEC machine had a LAN, then you could connect DecServers to it.  These were terminal servers that connected to the LAN and provided a number of serial ports for the terminals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3FrEx.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3FrEx.jpg&quot; alt=&quot;DecServer front&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The server was configured on the DecNet LAN, appearing as &lt;code&gt;/dev/dsvr1&lt;/code&gt;, or similar.  It could then be addressed and the terminals configured to appear as, for example, &lt;code&gt;/dev/tty1&lt;/code&gt; upwards.  Peripherals could also be assigned, e.g. &lt;code&gt;/dev/lpt1&lt;/code&gt;.  The ports could be individually configured for baud rate, parity bits, etc.  There were also the usual network tweaking type settings available; packet size etc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was quite normal for a DEC installation, be it PDP or VAX, to have a number of DecServers supporting a large number of terminals and peripherals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cables for the terminals were simply DB25 serial cables as the ports were usually RS232.  100mA current-loop DecServers were available.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-05-26T08:13:27.037" LastActivityDate="2017-05-26T08:13:27.037" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2991" PostTypeId="2" ParentId="2988" CreationDate="2017-05-26T17:39:33.403" Score="9" Body="&lt;p&gt;There are two general ways to get terminals connected to a PDP-11:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;via Line Adapters or Multiplexors that provided direct terminal connections&lt;/li&gt;&#xA;&lt;li&gt;via a network link (using network protocols like Telnet, LAT, etc.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Terminal servers like the DECservers (but others made terminal servers as well, e.g. Xyplex) use method #2 to allow locally-attached terminals to connect to network resources (potentially very far away, e.g. in another state or another country).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For direct connection, you would plug in a Line Adapter card (the exact type of card depended on which PDP-11 you had), and the Line Adapter card would then be connected either directly to the device, or via a port module that attached to the computer's back panel.  The cards, modules, and connectors varied widely depending on which model PDP-11 you had, the kinds of devices you wanted to connect to, and the kinds of connectors you wanted.  RS-232 connectors were very common but they weren't the only kind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get an idea of the options that were available from DEC, have a look at a &lt;a href=&quot;ftp://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp11/handbooks/PDP11_PeripheralsHbk_1976.pdf&quot; rel=&quot;noreferrer&quot; title=&quot;PDP-11 Peripherals Handbook&quot;&gt;PDP-11 Peripherals Handbook&lt;/a&gt;.  There were also third-party options available, generally these were compatible with one of DEC's options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the DJ11 adapter lets you connect up to 16 terminals to a panel which is then connected to the adapter via a single ribbon cable.  The 1976 Peripherals Handbook (linked above) has a picture of it on page 4-112.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-05-26T17:39:33.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2992" PostTypeId="1" CreationDate="2017-05-26T22:31:51.440" Score="14" ViewCount="1573" Body="&lt;p&gt;The C64 kernel (or &lt;a href=&quot;https://en.wikipedia.org/wiki/KERNAL&quot; rel=&quot;nofollow noreferrer&quot;&gt;KERNAL&lt;/a&gt; as it’s known in the C64 community) routines work via a jump vector table stored in page $03xx. A common programming paradigm to create something like a &quot;device driver&quot; would be to hook the kernal routine by replacing the appropriate jump vector table entry with a pointer to your own custom code. So kernal calls just jump to your code instead of the routine in ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the best approach and memory location(s) for stashing your custom &quot;device driver&quot; code, so that compatibility is as good as possible? Assume you want the BASIC interpreter to continue to work, normal DOS functionality to not be impacted, and minimize the chance of some other software over-writing your driver. Also, what needs to change to have the same functionality in C128 mode?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4025" LastEditDate="2017-11-29T06:29:33.910" LastActivityDate="2020-11-30T10:14:21.040" Title="What is the &quot;standard&quot; way to implement KERNAL hooks on the C64?" Tags="&lt;commodore-64&gt;&lt;programming&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2993" PostTypeId="2" ParentId="2992" CreationDate="2017-05-26T23:41:48.847" Score="19" Body="&lt;p&gt;There was, in my opinion, not much standardisation for things like that for the c64.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The simplest approach would be to put your code in the range $C000-$CFFF, and then modify the jump table at $03C0. The area $C000-$CFFF is not used by the system. &lt;/li&gt;&#xA;&lt;li&gt;Another approach would be copying the content of one or both of the rom's in underlaying RAM. Modify the copied code in the RAM. Switch the memory map so that RAM is used instead of ROM.&lt;/li&gt;&#xA;&lt;li&gt;A third approach (if you need much space) would be to write your routines in underlaying RAM. Modify the jump table at $03C0 to jump to the $C000 area (like in method 1). There you bank ROM out and RAM in and jump to your routine. Don't forget to bank back after finishing your routine.&lt;/li&gt;&#xA;&lt;li&gt;This methods can be mixed. Use method 2 on the kernal ROM area, replace the routines by a simple bank and jump routine (that banks the basic ROM and jumps to your routine in the RAM under the basic ROM). This is very usefull if you don't want to use the $C000 area.&lt;/li&gt;&#xA;&lt;li&gt;Another possibility is to lower the area used by the system for BASIC. So you will create  space for your routines.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I can't help you with C128.&lt;/p&gt;&#xA;" OwnerUserId="4853" LastEditorUserId="4335" LastEditDate="2017-05-27T19:43:03.787" LastActivityDate="2017-05-27T19:43:03.787" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2994" PostTypeId="1" CreationDate="2017-05-27T10:38:28.323" Score="9" ViewCount="1069" Body="&lt;p&gt;I am building a z80 based 8 bit computer, and I really don't want to fry my chip. I was looking at this &lt;a href=&quot;http://www.zilog.com/appnotes_download.php?FromPage=DirectLink&amp;amp;dn=PS0178&amp;amp;ft=Product%20Specification%20(Data%20Sheet)%20&amp;amp;f=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTk2T0RBdmNITXdNVGM0TG5Ca1pnPT0=&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet&lt;/a&gt;, but I couldn't find the fan-out specified. There are some electrical characteristics on page 30, but that's about it. In the book called &quot;Build your own z80 computer&quot; by Steve Ciarcia, his outputs were buffered. If I'm not mistaken, CMOS should be able to drive quite a few inputs, but I'd appreciate if someone who knows better could tell me whether or not should I buffer them. I would like to reduce the price of the whole project if possible, and pack it in a box that is as small as possible, so it would be cool if I could avoid it. &lt;/p&gt;&#xA;" OwnerUserId="5113" LastEditorUserId="824" LastEditDate="2018-07-12T07:16:36.517" LastActivityDate="2018-07-13T14:57:17.877" Title="ZiLOG Z80 fan-out (CMOS version, Z84C0006PEC)" Tags="&lt;z80&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="2995" PostTypeId="1" AcceptedAnswerId="3137" CreationDate="2017-05-27T16:20:15.220" Score="13" ViewCount="890" Body="&lt;p&gt;I'm looking for information whether there has ever been an official statement by Commodore back in the days on why the Original Chipset was limited to doing 6 bitplanes only when running in low horizontal resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga DMA Allocation Channel diagram from the Hardware Reference Manual, 3rd edition clearly shows that 2 more slots are free in low resolution: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6l29Y.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6l29Y.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enabling 8 bitplanes in low resolution would have saturated the chip ram bandwidth, much like 4 bitplanes in high resolution, therefore making the machine sluggish as 4 bitplanes high res makes it. But then, why not limit high res to 3 bitplanes?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding 2 more bitplane pointers, 2 more shift registers to Denise, and more CLUT registers does not seem to me like a huge hurdle, even in 1984/85. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What other reason could it be?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="4147" LastEditDate="2018-11-12T14:27:41.770" LastActivityDate="2018-11-12T14:27:41.770" Title="Why was OCS low resolution limited to 6 bitplanes?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;graphics&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2996" PostTypeId="1" CreationDate="2017-05-27T19:19:43.990" Score="13" ViewCount="630" Body="&lt;p&gt;There was a time where computers often just stayed on all the time. Computer monitors did not have power save functions... they were either on or off. Processors such as the 6502, 68000, 8086, 286, 386, 486 and the Pentium typically ran at a fixed speed all the time and did not attempt to conserve energy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But apparently there was a point sometime in the 1990s where a move to trying to save energy started to occur. Is there a specific cause or reason for this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Intel processors, it seems like the turning point may have started with mobile processors and speedstep, to try to get more battery life.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="276" LastEditDate="2017-06-28T14:16:58.537" LastActivityDate="2017-06-28T14:16:58.537" Title="When did energy saving start to become important?" Tags="&lt;power&gt;&lt;energy-efficiency&gt;" AnswerCount="5" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2997" PostTypeId="1" CreationDate="2017-05-27T20:19:33.983" Score="10" ViewCount="1399" Body="&lt;p&gt;This is as a follow-up to my &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2595/does-every-retrocomputer-and-console-with-ntsc-composite-output-have-artifact-c?answertab=votes#tab-top&quot;&gt;previous question on artifact colors&lt;/a&gt; and the excellent answers provided there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The images below show a simple example of artifact colors generated using a single bit-plane 640x200 Amiga A1000 displaying on a 1080 monitor. The top image is the RGB mode display, middle is the same image in NTSC Composite mode, and the bottom image is just a close-up to make all the artifact colors more visible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EsQay.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EsQay.jpg&quot; alt=&quot;RGB video&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Fd0CY.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Fd0CY.jpg&quot; alt=&quot;Composite video&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/aIr6z.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aIr6z.jpg&quot; alt=&quot;Composite video close-up&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is one additional photo where, instead of random dot patterns, I created varying line patterns. The pixels on the left are from a single (1-bit plane) foreground color of yellow, while the pixels on the right are from a single foreground color set to green. The background is black for both, but can obviously be modified, to yield even more colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hI3CG.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hI3CG.png&quot; alt=&quot;line artifacts&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question: I am speculating that the same technique used to produce 10-bit color on the IBM CGA 640x200 display would produce 18-bit (262,144) color on the Amiga using its 12-bit native color palette and some clever Copper programming to update the two CLUT entries as needed during display. I will appreciate any answer that either validates or disputes this claim.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, I am somewhat surprised that such a high-color, low-bandwidth display mode hasn't already been used for some nifty demo on the Amiga. HAM mode animations were common, but require 3x more memory/bandwidth (320x200x6 bit-planes) than this artifact color mode would need. It seems that very smooth animation or even video playback is theoretically possible with the artifact mode. Is anyone aware of any demo or other Amiga software that ever used artifact color, or do you have any insights as to why not?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-05-29T22:31:39.273" LastActivityDate="2017-09-08T08:09:39.170" Title="Can artifact color mode create 262,144 colors on Amiga OCS?" Tags="&lt;amiga&gt;&lt;graphics&gt;&lt;color-display&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2998" PostTypeId="1" AcceptedAnswerId="13966" CreationDate="2017-05-28T00:51:02.947" Score="25" ViewCount="2286" Body="&lt;p&gt;When I learned BASIC on &lt;a href=&quot;https://en.wikipedia.org/wiki/Electronika_BK&quot; rel=&quot;nofollow noreferrer&quot;&gt;Elektronika BK&lt;/a&gt;, I got fascinated with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Flood_fill&quot; rel=&quot;nofollow noreferrer&quot;&gt;flood fill&lt;/a&gt; (&lt;code&gt;PAINT&lt;/code&gt;) operator: how does it know to get to all nooks and crannies of the shape to fill? I've devised an algorithm, tried to write my own implementation of it, and soon realized that it requires a substantial amount of scratch memory. A fine grid would be a good example of a tall order.&lt;/p&gt;&#xA;&lt;p&gt;The next thing I did was to write a very short program like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 CLS&#xA;20 COLOR 1&#xA;30 FOR I=10 TO 200 STEP 2&#xA;40 LINE (5,I)-(205,I)&#xA;50 LINE(I,5)-(I,205)&#xA;60 NEXT I&#xA;70 PAINT (5,10),2,0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The grid is drawn with color 1; the paint operation uses a point on the grid and directs to paint with color 2 using color 0 (background) as the boundary.&lt;/p&gt;&#xA;&lt;p&gt;And indeed, it hung and required power-cycling of the computer (there was no hardware reset button).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My question is, how do other implementations of the flood fill operator in BASIC on retro-computers with limited memory behave.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The absolute best would be to paint the 2-pixel-wide grid covering the whole screen correctly; presumably, this requires the most stack space.&lt;/p&gt;&#xA;&lt;p&gt;The second best would be to detect the stack/queue overflow and to stop with a runtime error.&lt;/p&gt;&#xA;&lt;p&gt;Here's another complex shape, a herringbone pattern, that causes &lt;code&gt;PAINT&lt;/code&gt; to hang:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 CLS&#xA;20 COLOR 1&#xA;30 FOR I=2 TO 200&#xA;40 FOR J=2 TO 200&#xA;50 K=I MOD 4&#xA;60 L=J MOD 4&#xA;70 IF (K=L AND K&amp;lt;2) OR K*L=6 THEN PSET (I,J)&#xA;80 NEXT J&#xA;90 NEXT I&#xA;99 PAINT (0,0)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Here we draw the pattern then ask to paint the background.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Findings so far:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sinclair QL sidesteps the issue by implementing a simplified operation: the fill mode must be requested before drawing the outline, and &lt;em&gt;If you have more than one pair of points in your shape's outline per horizontal scanline, divide the shape into less complex parts so that this condition is met.&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;CBM BASIC 7.0 on C128 fails with an &amp;quot;?OUT OF MEMORY&amp;quot; error if the shape is too complex.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="576" LastEditDate="2021-02-24T10:13:51.493" LastActivityDate="2021-02-24T10:13:51.493" Title="What implementations of BASIC had a robust flood fill operator?" Tags="&lt;graphics&gt;&lt;programming&gt;&lt;basic&gt;" AnswerCount="9" CommentCount="19" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="2999" PostTypeId="2" ParentId="2850" CreationDate="2017-05-28T08:05:35.013" Score="6" Body="&lt;p&gt;&lt;strong&gt;WARNING: Electricity is dangerous.&lt;/strong&gt; Don't open up your computer without turning off the power and allowing the capacitors to discharge. If you need these instructions for anything other than knowing how this particular computer works, do not try. &lt;strong&gt;The voltages involved can be fatal.&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;Before starting&lt;/h3&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Ensure the computer is safe from sparks.&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Place the computer on an electrically insulated worktop. &lt;a href=&quot;https://electronics.stackexchange.com/q/100210/135964&quot;&gt;See here for instructions on how to set one up&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Touch the outside of the box (or better still, use an anti-static wrist strap) to earth yourself. It's probably a good idea not to be standing on a carpet; that can cause static build-up when you're walking around.&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;Open the case. (How?)&lt;/li&gt;&#xA;&lt;li&gt;Remove the Power Supply from the main board. (How?)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h3&gt;To check the Power Supply&lt;/h3&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Visually check for faults. If any part of the PCB has a slightly different color than the rest, and/or you see a capacitor that looks slightly odd(bulgied or even entirely blown), you should &lt;strong&gt;NOT&lt;/strong&gt; power up the PSU until they are replaced with correct capacity and voltage (higher voltage is OK, but don't go below the rating on the original), and/or the PCB is cleaned. &lt;/li&gt;&#xA;&lt;li&gt;Connect the power to the PSU and turn it on.&lt;/li&gt;&#xA;&lt;li&gt;Watch and listen carefully for any arcing, sparking or burning. If there's anything suspicious, power it down &lt;em&gt;immediately&lt;/em&gt;.&lt;sup&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2849/278&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; Check for faults around the area that the noise / flash / smoke originated from, and skip the rest of this section.&lt;/li&gt;&#xA;&lt;li&gt;Measure the PSU outputs &lt;em&gt;carefully&lt;/em&gt;. Ensure you don't touch anything metal (including circuit board traces and metal heat sinks), just in case it's live. The wires on at least some models are color-coded as follows:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Black = GND, Red = +5V, Yellow = +12V, Brown = AC GND, White = 9VAC&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W8FbS.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W8FbS.jpg&quot; alt=&quot;C128D-CR NTSC versin&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Using an AC voltmeter or oscilloscope, measure the two close-together outputs to the left.&lt;sup&gt;&lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c128/power/ps-128dcr1.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Power supply schematic&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Check if the potential difference peaks at ±9V,&lt;sup&gt;&lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c128/power/ps-128dcr1.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Power supply schematic&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; plus or minus 0.9V.&lt;sup&gt;&lt;a href=&quot;https://archive.org/stream/C128DiagnosticInstructionandTroubleshootingManual3/C128_Diagnostic_Instruction_and_Troubleshooting_Manual_314060-01-02_djvu.txt&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;C128 Diagnostic Instruction and Troubleshooting Manual (text-only)&quot;&gt;[3#2.1]&lt;/a&gt;&lt;/sup&gt; If not, the AC voltage supply is faulty.&lt;/li&gt;&#xA;&lt;li&gt;Using a DC voltmeter or oscilloscope, measure the further-apart outputs to the other side.&lt;sup&gt;&lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c128/power/ps-128dcr1.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Power supply schematic&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Check if the potential difference between them is 5V,&lt;sup&gt;&lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c128/power/ps-128dcr1.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Power supply schematic&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; plus or minus 0.5V.&lt;sup&gt;&lt;a href=&quot;https://archive.org/stream/C128DiagnosticInstructionandTroubleshootingManual3/C128_Diagnostic_Instruction_and_Troubleshooting_Manual_314060-01-02_djvu.txt&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;C128 Diagnostic Instruction and Troubleshooting Manual (text-only)&quot;&gt;[3#2.1]&lt;/a&gt;&lt;/sup&gt; If not, the 5V DC voltage supply is faulty.&lt;/li&gt;&#xA;&lt;li&gt;Identify the DC ground (the inside output).&lt;/li&gt;&#xA;&lt;li&gt;Using a DC voltmeter or oscilloscope, measure between the DC ground and the output next to the AC outputs.&lt;sup&gt;&lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c128/power/ps-128dcr1.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Power supply schematic&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Check if the potential difference between them is 12V,&lt;sup&gt;&lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c128/power/ps-128dcr1.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Power supply schematic&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; plus or minus 1.2V.&lt;sup&gt;&lt;a href=&quot;https://archive.org/stream/C128DiagnosticInstructionandTroubleshootingManual3/C128_Diagnostic_Instruction_and_Troubleshooting_Manual_314060-01-02_djvu.txt&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;C128 Diagnostic Instruction and Troubleshooting Manual (text-only)&quot;&gt;[3#2.1]&lt;/a&gt;&lt;/sup&gt; If not, the 12V DC voltage supply is faulty.&lt;/li&gt;&#xA;&lt;li&gt;Power down the PSU.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h3&gt;5V DC Supply diagnosis&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Refer to &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c128/power/ps-128dcr1.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Power supply schematic&quot;&gt;this schematic&lt;/a&gt; for details.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Ensure that the circuitry matches the schematic above and / or the specific diagnostics &lt;a href=&quot;https://archive.org/stream/C128DiagnosticInstructionandTroubleshootingManual3/C128_Diagnostic_Instruction_and_Troubleshooting_Manual_314060-01-02_djvu.txt&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;C128 Diagnostic Instruction and Troubleshooting Manual (text-only)&quot;&gt;on section 2.2.1 of the Diagnostics Manual&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h3&gt;12V DC Supply diagnosis&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Refer to &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c128/power/ps-128dcr1.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Power supply schematic&quot;&gt;this schematic&lt;/a&gt; for details.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Ensure that the circuitry matches the schematic above and / or the specific diagnostics &lt;a href=&quot;https://archive.org/stream/C128DiagnosticInstructionandTroubleshootingManual3/C128_Diagnostic_Instruction_and_Troubleshooting_Manual_314060-01-02_djvu.txt&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;C128 Diagnostic Instruction and Troubleshooting Manual (text-only)&quot;&gt;on section 2.2.2 of the Diagnostics Manual&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h3&gt;AC Supply diagnosis&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Refer to &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c128/power/ps-128dcr1.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Power supply schematic&quot;&gt;this schematic&lt;/a&gt; for details.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Ensure that fuse F2 on the schematic linked above has a suitably low resistance (i.e. is not ruptured).&lt;/li&gt;&#xA;&lt;li&gt;If it does not, replace it with another fuse, ensuring that the replacement can withstand 315mA&lt;sup&gt;&lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c128/power/ps-128dcr1.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Power supply schematic&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; without rupturing.&lt;/li&gt;&#xA;&lt;li&gt;If there is still a problem, there is a fault with the transformer.&lt;sup&gt;&lt;a href=&quot;https://www.tablix.org/~avian/blog/archives/2006/09/commodore_128_psu/#comment_0001&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c128/power/ps-128dcr1.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Power supply schematic&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="278" LastEditorUserId="129" LastEditDate="2020-02-07T15:05:10.057" LastActivityDate="2020-02-07T15:05:10.057" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="3000" PostTypeId="1" CreationDate="2017-05-28T16:50:47.663" Score="9" ViewCount="517" Body="&lt;p&gt;According to Wikipedia, &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_Agnus&quot; rel=&quot;nofollow noreferrer&quot;&gt;the original Agnus has 21000 transistors&lt;/a&gt;. How many gates would this be? (assuming there's a straightforward way to convert between gates and transistors). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about Denise, and Paula?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Thanks everyone for the answer to the gate/transistor conversion. Wondering if anyone else knows the number of gates of Paula and Denise?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="278" LastEditDate="2019-04-07T17:43:58.247" LastActivityDate="2019-04-07T17:43:58.247" Title="How many gates does each chip in OCS have?" Tags="&lt;amiga&gt;&lt;mos-agnus&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3001" PostTypeId="2" ParentId="3000" CreationDate="2017-05-28T18:32:07.783" Score="3" Body="&lt;p&gt;There is a more or less straightforward way: according to the &lt;a href=&quot;https://en.wikipedia.org/wiki/CMOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;CMOS&lt;/a&gt; article, a typical 2-input Boolean gate is 4 transistors, and each additional input requires 2 more transistors; a state element (a typical &lt;a href=&quot;https://en.wikipedia.org/wiki/Flip-flop_(electronics)#Edge-triggered_dynamic_D_storage_element&quot; rel=&quot;nofollow noreferrer&quot;&gt;flip-flop&lt;/a&gt;) is 12 transistors (a 3 gate equivalent). Therefore the total number of logic gates is about 5 thousand; but how many of them were used for Boolean operations, and how many for registers is hard to tell.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-05-28T20:07:42.157" LastActivityDate="2017-05-28T20:07:42.157" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3002" PostTypeId="2" ParentId="2998" CreationDate="2017-05-29T02:28:05.750" Score="13" Body="&lt;p&gt;I didn't quite manage to replicate your test, but came up with something for the Amstrad CPC6128. A screen of 40×25 lower case ‘u’ is quite a difficult fill, but the &lt;code&gt;FILL&lt;/code&gt; command manages it well:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/T1SsN.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/T1SsN.gif&quot; alt=&quot;amstrad cpc fill&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the code to do this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 MODE 1&#xA;20 PEN 1&#xA;30 FOR i%=1 TO 25&#xA;40 PRINT STRING$(40,&quot;u&quot;);&#xA;50 NEXT i%&#xA;60 LOCATE 1,1&#xA;70 MOVE 10,14&#xA;80 FILL 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The animation is a little faster than realtime, but it really does take a few seconds to fill the screen.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-05-29T02:28:05.750" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3003" PostTypeId="2" ParentId="2994" CreationDate="2017-05-29T09:30:32.010" Score="3" Body="&lt;p&gt;74xx245 are cheap and/or can be salvaged from computer scrap (if you are capable of desoldering) in large amounts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless you are driving TTL circuitry, the reason you want a buffer is more about &lt;em&gt;capacitive&lt;/em&gt; than DC loading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mind that NMOS and TTL outputs can be rather asymmetric regarding high vs low driving power, and that TTL inputs are asymmetric regarding consumption!&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-05-29T09:30:32.010" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3004" PostTypeId="2" ParentId="2998" CreationDate="2017-05-29T09:31:56.630" Score="10" Body="&lt;p&gt;The classical flood fill algorithm is a recursive algorithm that, in its most simple form, can use an enormous amount of stack space&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void fill (x, y, col) {&#xA;   plot (x, y, col)&#xA;   if (point (x + 1, y) != col then fill (x + 1, y, col);&#xA;   if (point (x, y + 1) != col then fill (x, y + 1, col);&#xA;   if (point (x - 1, y) != col then fill (x - 1, y, col);       &#xA;   if (point (x, y - 1) != col then fill (x, y - 1, col);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are a number of strategies to limit the amount of space the fill algorithm will use, like having only working in a specific direction and limit the recursive part or using a list instead of the stack to avoid a stack overflow and be able to stop witth an &quot;Out of memory error&quot;, and, there are alternative algorithms that aren't recursive at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Sinclair QL, for example, uses such an alternative algorithm. This requires you to &quot;bracket&quot; shape drawing code to be filled with &lt;code&gt;FILL 1&lt;/code&gt; / &lt;code&gt;FILL 0&lt;/code&gt; pairs and fill the shape you have drawn in that bracket with the current ink color. BASIC will then set up a buffer of x-coordinate pairs per scanline in your shape and remember such pairs where you have drawn a &quot;left&quot; and &quot;right&quot; outer shape pixel. On the closing &lt;code&gt;FILL 0&lt;/code&gt;bracket, the algorithm will run through the buffer and simply draw horizontal lines between the coordinates found in the buffer. This needs a fixed buffer space of &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;typedef struct fillBufferT {&#xA;   int x1, x2;&#xA;};&#xA;&#xA;fillBufferT buffer [vertical_res];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;with no chance of buffer overflow at all. The downside is, that this algorithm is only capable of storing one pair of horizontal coordinates per scanline - complex shapes that need more coordinate pairs need to be sub-divided by the programmer to be properly filled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the algorithm as such is entirely bullet-proof and cannot lead to a runtime error. It is also obviously much faster than the recursive flood-fill, but will always fill the entire shape, regardless of &quot;what's been inside&quot; before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The limitation that the Sinclair QL &lt;code&gt;FILL&lt;/code&gt; command was not able to fill arbitrary shapes was mentioned in the manual as follows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The FILL algorithm stores a list of points to plot rather than actually plotting them. When the figure closes there are two points on the same horizontal line. These two points are connected by a line in the current INK colour and the process repeats. Fill must always be reselected before drawing a new figure to ensure that the buffer used to store the list of points is reset.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;b&gt;Warning&lt;/b&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;There is an implementation restriction on FILL. FILL must not be used for re-entrant shapes (i.e. a shape which is concave). Re-entrant shapes must be split into smaller shapes which are not re-entrant and each sub-shape filled independently.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-05-30T08:11:04.733" LastActivityDate="2017-05-30T08:11:04.733" CommentCount="19" ContentLicense="CC BY-SA 3.0" />
  <row Id="3005" PostTypeId="2" ParentId="2979" CreationDate="2017-05-29T12:06:43.120" Score="6" Body="&lt;p&gt;This can, in edge cases, even cause hardware damage: If you have something addressing these devices constantly (which is a plausible result from an OS/driver crash due to these ISA devices completely misbehaving in the first place - eg a driver waiting for a certain bit to be asserted, looping on a register read until it is, while another card pulls that bit down HARD with a stronger line driver!) they both try to force conflicting data onto the bus wires (in the worst case, 0x00 against 0xFF...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For every conflicting bit you will have one tristate driver connecting the shared wire to ground, the other to +5V - in the end creating a +5V to ground short carrying a current only limited by the line driver's impedances, which allow for significantly more current than the allowed 24/48mA (depending on driver type). &#xA;This can either burn out some driver stages from overcurrent, or overheat a whole line driver (typically, 74LS245 or 74F245 8 channel ) chip - either destroying it or shortening its lifetime significantly.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-05-29T12:06:43.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3006" PostTypeId="2" ParentId="2008" CreationDate="2017-05-29T12:15:08.567" Score="17" Body="&lt;h1&gt;The Xerox Alto&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;A 1972 machine, officially introduced in March 1973. It had multi-chip CPU built around the 74181 IC.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 74181 represents an evolutionary step between the CPUs of the 1960s, which were constructed using discrete logic gates, and today's single-chip CPUs or microprocessors. - &lt;a href=&quot;https://en.wikipedia.org/wiki/74181&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Xerox Alto had a mouse-driven GUI (yep, a real bitmap graphics display), Ethernet (yep, this was the computer they had to invent Ethernet for, to allow to easily put them into a LAN), featured WYSIWYG (they specifically invented the laser printer for that feature) and an object-oriented operating system/development environment. Not too shabby for a personal computer (&lt;em&gt;the&lt;/em&gt; first Personal Computer, actually) with a CPU built from discrete ICs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the Xerox Alto was not the first with a CPU designed around the 74181, it was just the most influential.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before the 74181 was available, most CPUs would span several PCBs. With the 74181, a CPU could fit onto a single (large) PCB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Links:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Alto&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Xerox_Alto&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/74181&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/74181&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="5100" LastEditorUserId="278" LastEditDate="2017-05-29T14:50:58.827" LastActivityDate="2017-05-29T14:50:58.827" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3007" PostTypeId="2" ParentId="2939" CreationDate="2017-05-29T20:52:45.297" Score="1" Body="&lt;p&gt;This is what I think is the right answer. Anyway, I would like to have some feedback before selecting it as the right answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After looking at the schematics I think these are the possible cases and outcomes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I add the a501+ (1MB) to the A500 rev8 (0.5MB without U32) then: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;_BCASL0 = _BCASL1 &lt;/li&gt;&#xA;&lt;li&gt;_BCASH0 = _BCASH1 &lt;/li&gt;&#xA;&lt;li&gt;Therefore internal and external banks have CAS selected at the same time. &lt;/li&gt;&#xA;&lt;li&gt;0x000000 _BRAS0 = _XRAS0 --&gt; DRAM chips U16-19 on the a500 rev8, and U1-4 on the a501+ &lt;/li&gt;&#xA;&lt;li&gt;0x080000 _BRAS1 = _XRAS1 --&gt; DRAM chips U5-8 on the a501+ &lt;/li&gt;&#xA;&lt;li&gt;NOTE: CPU address space 0x000000 to 0x07FFFF is mapped to TWO banks at the same time. But this should not be a problem since lines are driven to the same logic levels.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, 1MB of chipram is available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I add the a501+ (1MB) and U32 to the A500 rev8 (0.5MB) then: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0x000000 _BRAS0 = _XRAS0 _BCAS*0 driven --&gt; DRAM chips U16-19 on the a500 rev8 &lt;/li&gt;&#xA;&lt;li&gt;0x080000 _BRAS1 = _XRAS1 _BCAS*0 driven --&gt; nothing &lt;/li&gt;&#xA;&lt;li&gt;0x100000 _BRAS0 = _XRAS0 _BCAS*1 driven --&gt; DRAM chips U1-4 on the a501+ &lt;/li&gt;&#xA;&lt;li&gt;0x180000 _BRAS1 = _XRAS1 _BCAS*1 driven --&gt; DRAM chips U5-8 on the a501+ &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So there are 1.5MB of ChipRAM but AmigaOS will not recognize the 1MB at 0x100000 because not contiguous. OS Patch or post-boot command needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I add the a501+ (1MB) and add 0.5MB to the A500 rev8 (without U32) then: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0x000000 _BRAS0 = _XRAS0 _BCAS*0=_BCAS*1 driven --&gt; DRAM chips U16-19 on the a500 rev8 and U1-4 on the a501+ &lt;/li&gt;&#xA;&lt;li&gt;0x080000 _BRAS1 = _XRAS1 _BCAS*0=_BCAS*1 driven --&gt; DRAM chips U20-23 on the a500 rev8 and U5-8 on the a501+ &lt;/li&gt;&#xA;&lt;li&gt;0x100000 _BRAS0 = _XRAS0 _BCAS*1=_BCAS*0 driven --&gt; U16-19 on the a500 rev8 and U1-4 on the a501+ &lt;/li&gt;&#xA;&lt;li&gt;0x180000 _BRAS1 = _XRAS1 _BCAS*1=_BCAS*0 driven --&gt; U20-23 on the a500 rev8 and U5-8 on the a501+ &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So the a501+ is masked by the internal DRAM, 1MB of ChipRAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I add the a501+ (1MB), U32 and 512KB DRAM to the A500 rev8 (0.5MB) then it is an A500+ with A501+ --&gt; 2MB ChipRAM &lt;/p&gt;&#xA;" OwnerUserId="124" LastActivityDate="2017-05-29T20:52:45.297" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3008" PostTypeId="2" ParentId="2997" CreationDate="2017-05-29T22:17:39.563" Score="6" Body="&lt;p&gt;I don't see a technical question, but I will attempt a guiding answer toward some of the problems.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Apple II on an NTSC TV vs Amiga connected via composite to an RGB monitor&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Dot patterns to trigger NTSC color phases on a TV is fine on any suitable retro platform if you accept the halved resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Presumably you want to keep the Lores (320x200) resolution at least, so what you can do is draw some dot patterns in Hires (640x200) right away in a 4x2 grid (twice the 2x1 you'd expect, to get artifacts from normal scanlining and lores pixel phase), and see how many distinct colors appear(n).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can control it, you can go from 1 bitplane to 4 (16*16=256 times as many colors(n*256) - &lt;em&gt;provided all are unique&lt;/em&gt;). Control seems unlikely, though, especially near the original 12-bit values (which will, in turn, be similarly changed if output over composite).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An Amiga can likely output the same patterns as PC for CGA, so that using a CGA monitor will give you control, at the price of a reduction in colors to that of CGA.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&quot;High-color&quot;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I'm aware of no Amiga demos that attempt tricks over composite.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if the goal is to get more than 4,096 RGB colors on OCS, a few demoscene prods such as &lt;a href=&quot;http://www.pouet.net/prod.php?which=66004&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Frazetta&lt;/strong&gt;&lt;/a&gt; have used temporal dithering to achieve 15-bit color depth, via the &lt;a href=&quot;http://wiki.amigaos.net/wiki/ILBM_IFF_Interleaved_Bitmap#ILBM.PCHG&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;PCHG&lt;/strong&gt;&lt;/a&gt; format converter, using the &lt;a href=&quot;http://aminet.net/package/gfx/edit/hamlab208d&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;HAMLab&lt;/strong&gt;&lt;/a&gt; software to render the pictures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other dithering techniques such as horizontal dithering and mask dithers for so-called &lt;em&gt;&lt;a href=&quot;http://oldwww.nvg.ntnu.no/amiga/amigafaq/AmigaFAQ_16.html&quot; rel=&quot;noreferrer&quot;&gt;chunky modes&lt;/a&gt;&lt;/em&gt; (4x4 (and up) Lores hardware pixels as a software pixel).&lt;/p&gt;&#xA;" OwnerUserId="5117" LastEditorUserId="5117" LastEditDate="2017-05-29T22:37:01.660" LastActivityDate="2017-05-29T22:37:01.660" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3009" PostTypeId="2" ParentId="2996" CreationDate="2017-05-29T23:17:38.907" Score="5" Body="&lt;p&gt;Power savings has always been critical for microprocessors and other integrated circuits because of the physics of heat transfer. The more heat generated per unit of area on chip, the more aggressive heat dissipation needed to protect the chip from over-heating. This effects system cost, chip reliability, and maximum attainable speeds. Since heat dissipation and power consumption are inseparable, it's always been a critical consideration to minimize both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Better power usage and easier heat dissipation is the main reason that, since 1976, &lt;a href=&quot;https://en.wikipedia.org/wiki/CMOS&quot; rel=&quot;noreferrer&quot;&gt;CMOS&lt;/a&gt; has dominated integrated circuit construction. This has supported greater densities and speed while keeping the heat dissipation manageable. Without CMOS, not only would we have shorter battery life in our devices, but also less powerful processors owing to the limits higher power consumption imposes on the chip's transistor density and speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An excellent example of how CMOS and battery life intersect is the original Apple &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerBook_100&quot; rel=&quot;noreferrer&quot;&gt;PowerBook 100&lt;/a&gt;. It was released in 1991 and was notable for being an early battery-powered laptop built around the 68HC000 processor, which was a CMOS variant of the Motorola 68000. This processor was chosen in order to improve battery life and heat characteristics when compared to the HMOS 68000 used in most desktop computers. To complement the low-power microprocessor, the PowerBook 100 also included a power management IC that would power-down various I/O subsystems when they weren't in use. The combination of low-power IC's and power management over various subsystems is the basic model used to optimize battery life for all portable computing devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern power-saving processors can shutdown or &quot;sleep&quot; internal subsystems, such as the GPU, when they aren't strictly needed.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-05-30T01:20:57.080" LastActivityDate="2017-05-30T01:20:57.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3010" PostTypeId="1" CreationDate="2017-05-30T10:28:10.547" Score="5" ViewCount="330" Body="&lt;p&gt;I've installed IRIX on SGI Octane and have screen looking like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/C3h5l.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C3h5l.jpg&quot; alt=&quot;Screenshot showing fringing&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I mean the stripes on all elements of the screen, which doesn't seem as a result of CRT monitor - the screen looks normally on login screen)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some way to fix this with Xserver settings? &lt;/p&gt;&#xA;" OwnerUserId="5120" LastEditorUserId="276" LastEditDate="2017-05-30T10:40:02.327" LastActivityDate="2018-05-03T00:12:50.367" Title="Strange visual behaviour on SGI IRIX" Tags="&lt;graphics&gt;&lt;sgi&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3011" PostTypeId="2" ParentId="2992" CreationDate="2017-05-30T23:03:55.523" Score="4" Body="&lt;p&gt;The best approach is replacing the whole kernal. Discarding rarely used routines and putting new ones in their place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays Easyflash and 1541 ultimate users have the chance to replace the kernal at will without opening the c64 case and doing any soldering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's a viable method. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two main obstacles with a software only solution. &#xA;1. Preventing other software to not mess the hooks you setup is not trivial and it will only work for certain software. Compatibility would depend on ram needed by your custom software.&#xA;2. You need to load it on every boot before loading the actual software that will make use of the custom routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other solution is to create a custom cartridge. Since this introduces extra memory (rom) to the computer it will be resident at least. You still need to cope with sharing ram with the actual software that will be running on the computer but this time it's not as hard as pure software solution since you will be hosting the code on the cartridge rom. You can use rarely used I/O areas or such to increase the compatibility.&lt;/p&gt;&#xA;" OwnerUserId="4847" LastActivityDate="2017-05-30T23:03:55.523" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3012" PostTypeId="2" ParentId="2664" CreationDate="2017-05-31T06:55:46.780" Score="4" Body="&lt;p&gt;If you will allow your attention to be extended to formats implemented in software: The Borland Database Engine uses a similar scheme to encode floating-point numbers in its tables, in order to more easily create and sort keys, especially compound keys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Borland Paradox (*.DB) tables, the BDE encodes its Number (N) type as a 64-bit floating-point value, with a sign bit, an 11-bit exponent, and a 53-bit fraction. (I know, that adds up to 65 bits. Keep reading.) The exponent is coded as an excess-1024 integer, so that an exponent of 0 is coded as 0x400. The fraction is normalized to have no leading zeros, adjusting the exponent as necessary. The high-order bit of the fraction is not stored since it is always one. This reduces the fraction storage requirement to 52 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a positive value, the sign bit is set to one. For a negative value, the positive value is formed and the entire 64 bits complemented (not negated as one might expect).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zero is encoded as 0x 8000 0000 0000 0000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This encoding maps the entire range of floating-point values monotonically onto the unsigned 64-bit integers, allowing very speedy comparison and sorting of Number type values without the need to interpret or decode them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BDE generally encodes each of its data types so that its sort order maps monotonically onto unsigned integers. This allows it to form compound keys by simply concatenating the field values into one binary string.&lt;/p&gt;&#xA;" OwnerUserId="4186" LastActivityDate="2017-05-31T06:55:46.780" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3013" PostTypeId="2" ParentId="2996" CreationDate="2017-05-31T08:32:54.263" Score="3" Body="&lt;p&gt;I would say many factors influenced:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The performance race drove to an unsustainable consumption, not only because the consumed energy but for the heat and noise.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The common-user market is tending to mobility that require less heat and more battery life.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The number of datacenters has grown exponentially. Saving energy means saving millions of dollars in electricity bill. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The processors were performant enough to afford sacrificing some performance to reducing consumption/heat and increasing battery life.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="5122" LastActivityDate="2017-05-31T08:32:54.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3014" PostTypeId="2" ParentId="2996" CreationDate="2017-05-31T14:02:59.533" Score="9" Body="&lt;p&gt;While the earliest date can be disputable, big shift can be pinpointed as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Transmeta&quot; rel=&quot;noreferrer&quot;&gt;Transmeta&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Transmeta_Crusoe&quot; rel=&quot;noreferrer&quot;&gt;Crusoe&lt;/a&gt; CPU release in 2000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transmeta was a secretive company working since 1995 on a &quot;mystery product&quot;, employing some celebrities from the IT world (like Linus Torvalds.) Its &quot;mystery product&quot; was a new CPU with focus of power consumption. It offered unprecedented battery life to laptops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fame of the company was short-lived. Crusoe, while revolutionary, didn't entirely perform to promised specs. It was fairly expensive for what it offered performance-wise and it had minor compatibility problems with x86 platform. Still, the idea caught on, and both Intel and AMD released their own &quot;low-power&quot; CPUs soon after (putting the last nail in Transmeta's coffin.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a time the development ran in parallel, high-performance, high-power CPUs for desktop, and &quot;energy-saving&quot; portable CPUs. The manufacturers ran against a wall when trying to maintain Moore's Law concerning CPU speed though - power consumption for anything exceeding 4GHZ was excessive, and heat dissipation was difficult. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's where the race for higher clock speed ended, and the race for more cores in one chip began. Simultaneously, lower clock speeds allowed, and heat dissipation problems necessitated reduction of power consumption and tout that as a marketing point, &quot;energy efficient&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another high point in the race for energy efficiency was the &lt;a href=&quot;https://en.wikipedia.org/wiki/One_Laptop_per_Child&quot; rel=&quot;noreferrer&quot;&gt;One Laptop Per Child&lt;/a&gt; project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OLPC, starting around 2005, was a non-profit developing special child-friendly laptops with many completely novel solutions - including a system-on-chip, &lt;a href=&quot;https://en.wikipedia.org/wiki/Geode_(processor)&quot; rel=&quot;noreferrer&quot;&gt;Geode&lt;/a&gt; processor, with power demand low enough that the laptop could be charged by an attached crank.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of points of the program was &quot;Give one, get one&quot; - the system would be unavailable in normal trade, except this program: buy two, one goes to a child in need in a 3rd world country, you keep the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Asus, tasked with development of the device, did something rather mean - using the experiences gained developing OLPC XO-1, created Asus EEE PC - the first netbook. The price, while higher than of a single XO-1, was still lower than that of two, the new competition murdering the OLPC G1G1 program, and the new fad for netbooks started - with EEE 901 ('2008) boasting over 9 hours of battery life using Intel Atom. Along with iPhone (2007), Google G1 (2008) and iPad (2010) the race for &quot;super-low-power CPU&quot; began for real, and ARM became a major player.&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2017-05-31T14:02:59.533" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="3015" PostTypeId="1" AcceptedAnswerId="3018" CreationDate="2017-05-31T14:26:19.683" Score="17" ViewCount="960" Body="&lt;p&gt;Australia and New Zealand are somewhat unique among large, developed, economies because they bridge the culture of (mostly) the West with the geography of the East. I am curious how this may have influenced mass-adoption of 8-bit and 16-bit micros in the 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which manufacturers and models of early home/office computers dominated the market in Australia and New Zealand? Assuming there were 1 or 2 dominant &quot;players&quot;, what were the main drivers for their success?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="6659" LastEditDate="2020-06-07T13:56:57.313" LastActivityDate="2020-07-25T06:46:07.670" Title="Which (micro) computers were dominant in Australia and New Zealand in the 1980s?" Tags="&lt;history&gt;&lt;8-bit-microcomputers&gt;&lt;market&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="3016" PostTypeId="1" CreationDate="2017-05-31T17:03:50.583" Score="18" ViewCount="1085" Body="&lt;p&gt;I noticed in some of the answers in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2992/what-is-the-standard-way-to-implement-kernel-hooks-on-the-c64&quot;&gt;this question&lt;/a&gt; that the Commodore 8-bit line apparently used a jump table at $03xx for entry into the kernel (&quot;kernal&quot; for the pedantic) routines. Figuring that the jump table is more of a way to maintain compatibility across ROM revisions, I would also tend to think that maybe there are some entry points which are consistent across the PET/VIC-20/C64/C16/Plus4/C128.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a degree of compatibility across these machines because of this jump table and are there any examples of programs which will run across two or more of these platforms because of it?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="11916" LastEditDate="2020-03-18T14:49:32.060" LastActivityDate="2020-12-13T16:16:13.823" Title="Is there software that will run across multiple Commodore 8-bit machines without modification?" Tags="&lt;commodore-64&gt;&lt;commodore&gt;&lt;commodore-pet&gt;&lt;vic-20&gt;&lt;commodore-128&gt;" AnswerCount="6" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3017" PostTypeId="2" ParentId="3016" CreationDate="2017-05-31T23:10:50.623" Score="15" Body="&lt;p&gt;BASIC games that use no memory specific code can be ported between different commodore machines. (I did some successfully between PET and C64). Machinecode games could be transferred between some commodore machines if they were written to be portable. I never seen such programs but I found in &lt;a href=&quot;https://en.wikipedia.org/wiki/KERNAL&quot; rel=&quot;noreferrer&quot;&gt;this wikipedia artikel&lt;/a&gt; the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;The Adventure International games published for the VIC-20 on cartridge are an example of software that uses the KERNAL. Because they only use the jump table, the games can be memory dumped to disk, loaded into a Commodore 64, and run without modification.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But of course this program should use only the kernal routines. Most commodore programs access the screen by poking directly to the screen area. Since this area is on an other position in different machines this must be changed while porting the program. And of course forget using sound, or specific graphic features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is also interesting to note that commodore didn't promote this jumptable. in the 'reference guide' all kernal routines are mentioned with their absolute addresses.&lt;/p&gt;&#xA;" OwnerUserId="4853" LastEditorUserId="4853" LastEditDate="2017-05-31T23:19:18.927" LastActivityDate="2017-05-31T23:19:18.927" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3018" PostTypeId="2" ParentId="3015" CreationDate="2017-06-01T12:06:30.107" Score="11" Body="&lt;p&gt;I had a quick browse of the archive.org computer magazines section, searching for 'Australia' and 'Australian'. The sampling is unlikely to be fair, since I believe archive.org carries only what users happen to have kept and uploaded, but from this I found:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a long-running line of Commodore magazines: Australian Commodore Amiga Review, Workbench Magazine, OZAmiga;&lt;/li&gt;&#xA;&lt;li&gt;a decent representation of Micro-80, concerned with the TRS-80;&lt;/li&gt;&#xA;&lt;li&gt;several issues of Softgold, &quot;THE magazine for InterTAN Computer Users!&quot;, with InterTAN being the name used in places including Australia by Tandy for the equivalent of the US Radio Shack, though by 1987 it seems to be a lot more about the CoCo 3 than the TRS-80;&lt;/li&gt;&#xA;&lt;li&gt;a few issues of Australian Apple Review and a 1982 edition of APC with only the Apple bits retained (including a review of the Apple III) but also has solitary adverts for the Atari 400 &amp;amp; 800, and a bunch of CP/M machines.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm confident a former Commodore user has been disproportionately active but that at least suggests that the American companies — Apple, Commodore and Tandy — had a decent impact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Addendum: having broadened my search also to include New Zealand, I've found quite a few copies of the NZ Bits and Bytes magazine, which includes a strong showing for the British micros. Leafing through &lt;a href=&quot;https://archive.org/details/nzbitsandbytes-3-07&quot; rel=&quot;nofollow noreferrer&quot;&gt;the issue with &quot;The Amstrad Arrives&quot;&lt;/a&gt; as a cover story I see separate columns related to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the Apple II;&lt;/li&gt;&#xA;&lt;li&gt;the Atari 8-bit series;&lt;/li&gt;&#xA;&lt;li&gt;the BBC Micro;&lt;/li&gt;&#xA;&lt;li&gt;the Commodore 64 (with the C16 and Plus 4 being discussed therein);&lt;/li&gt;&#xA;&lt;li&gt;the Sega SC3000;&lt;/li&gt;&#xA;&lt;li&gt;the ZX Spectrum;&lt;/li&gt;&#xA;&lt;li&gt;the TRS-80; and&lt;/li&gt;&#xA;&lt;li&gt;the ZX81.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Amstrad review notes that it &quot;has been designed as competition to the BBC and Commodore 64 ... [i]t is also hoped to attract Spectrum users wanting to upgrade&quot;. That issue also contains positive reviews of a couple of PC clones, so it's possible New Zealand adapted more quickly to those than Europe did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flipping forward to 1985 (cover story: the Spectravideo X'press), columns now exist for the Amstrad, Apple, BBC, Sega, a Sanyo PC clone, the Spectravideo SV328 (the almost MSX, even more so than the Sega), Commodore, Spectrum and Atari.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An article titled &quot;The Z-80's Finale?&quot; notes with an exclamation mark that Amstrad ensured the new 6128 was available in NZ only ten days after the UK. Given that Amstrad were making an effort, it's likely that the market was competitive. These probably weren't various spotty grey imports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I think possibly your thesis is correct. A lot of major European names like Acorn, Sinclair, Amstrad intermingle with the American Commodore, Atari and Spectravideo but there's also room for the Japanese Sega and Sanyo.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-06-07T16:03:46.673" LastActivityDate="2020-06-07T16:03:46.673" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="3019" PostTypeId="1" AcceptedAnswerId="3020" CreationDate="2017-06-01T14:40:24.803" Score="62" ViewCount="13401" Body="&lt;p&gt;From the the two methods of encoding 8-bit data as human-readable ASCII, for a time, uuencode format was more popular. USENET 'binaries' groups were filled with uuencoded posts with whatever goodies were shared. The format was quite robust, insensitive to line breaks (if your mail program reflowed the text, for uuencode you could still decode the file) and the uuencode/uudecode programs were quite user-friendly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Base64 was not nearly so well liked. Some people would post base64-encoded binaries, arousing mild ire from these, who didn't have decoders. It was sensitive to formatting and white spaces. I'm not entirely sure, but I think it generated a little bigger output too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I was off-the-loop for a time, and when I came back to the Unix and Linux world, uuencode was dead, and wherever 7-bit was still needed, Base64 ruled, and rules to this day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What happened? What events led to base64 winning the format war?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="15334" LastEditDate="2021-01-04T13:09:20.240" LastActivityDate="2021-01-04T13:09:20.240" Title="Why did base64 win against uuencode?" Tags="&lt;history&gt;&lt;unix&gt;&lt;file-format&gt;" AnswerCount="6" CommentCount="11" FavoriteCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="3020" PostTypeId="2" ParentId="3019" CreationDate="2017-06-01T14:53:36.753" Score="48" Body="&lt;p&gt;I’m not sure about specific events, but I think the main reason Base64 “won” is that it’s one of the binary encodings supported by &lt;a href=&quot;https://en.wikipedia.org/wiki/MIME&quot; rel=&quot;noreferrer&quot;&gt;MIME&lt;/a&gt;, and MIME took over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So perhaps the question then becomes two-fold:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Why did MIME pick Base64 over UUencode? Possibly because Base64 is actually &lt;a href=&quot;https://en.wikipedia.org/wiki/Uuencoding#Relation_to_Xxencode.2C_Base64.2C_and_Ascii85&quot; rel=&quot;noreferrer&quot;&gt;more resistant&lt;/a&gt; than UUencode: it only uses alphanumeric characters plus two other characters to encode content (‘+’ and ‘/’ in MIME), and one character for padding (‘=’).&lt;/li&gt;&#xA;&lt;li&gt;Why did MIME become the dominant mail/news content wrapper? I guess it boils down to convenience, especially once most MUAs and news agents supported it (ah, the days of &lt;code&gt;slrn&lt;/code&gt; and Forte Agent...).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-06-02T12:25:02.907" LastActivityDate="2017-06-02T12:25:02.907" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="3021" PostTypeId="2" ParentId="3019" CreationDate="2017-06-01T15:03:08.417" Score="13" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Base64&quot; rel=&quot;noreferrer&quot;&gt;Base64&lt;/a&gt; is slightly more compact as it does not use a character indicating line length at the beginning of each line:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% dd bs=1k count=1024 &amp;lt; /dev/urandom | uuencode /dev/stdout | wc -с&#xA;1444736&#xA;% dd bs=1k count=1024 &amp;lt; /dev/urandom | uuencode -m /dev/stdout | wc -c&#xA;1421440&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Overall, Base64 is about 1.5% better.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-06-01T15:58:08.123" LastActivityDate="2017-06-01T15:58:08.123" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3022" PostTypeId="2" ParentId="3019" CreationDate="2017-06-01T16:10:11.043" Score="3" Body="&lt;p&gt;I can't definitively say whether it is cause or effect so am somewhat chancing my arm by promoting it to an answer but: the only way of forming a data URL (i.e. one that has the data directly within it†) is as base64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since all moderately substantial application environments supports URLs, even if they don't explicitly support base64 encoding and decoding then they at least support decoding just by forming the data URL. So it's just really easy for developers to support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore I think base64's usage in URLs may have contributed to its ascension, in the same way that its use in the IBM PC helped the x86 — it's not where the thing came from or why it was designed, but it led to a substantial propagation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;† e.g. &lt;a href=&quot;http://data:image/gif;base64,R0lGODlhCwAOAMQfAP////7+/vj4+Hh4eHd3d/v7+/Dw8HV1dfLy8ubm5vX19e3t7fr6+nl5edra2nZ2dnx8fMHBwYODg/b29np6eujo6JGRkeHh4eTk5LCwsN3d3dfX13Jycp2dnevr6////yH5BAEAAB8ALAAAAAALAA4AAAVq4NFw1DNAX/o9imAsBtKpxKRd1+YEWUoIiUoiEWEAApIDMLGoRCyWiKThenkwDgeGMiggDLEXQkDoThCKNLpQDgjeAsY7MHgECgx8YR8oHwNHfwADBACGh4EDA4iGAYAEBAcQIg0DkgcEIQA7&quot; rel=&quot;nofollow noreferrer&quot;&gt;this tiny document icon&lt;/a&gt; that I cribbed from &lt;a href=&quot;http://dataurl.net/#about&quot; rel=&quot;nofollow noreferrer&quot;&gt;this site&lt;/a&gt;, which doesn't identify a remote resource but itself contains a local resource. You might need to copy and paste it into your browser bar if yours is anything like mine, as trying to follow it like a link from here inevitably leads to the error that it's not a functioning link. Which is the point.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-06-04T19:45:50.917" LastActivityDate="2017-06-04T19:45:50.917" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="3023" PostTypeId="1" AcceptedAnswerId="3025" CreationDate="2017-06-01T18:14:16.440" Score="16" ViewCount="4589" Body="&lt;p&gt;Blue Green Red (BGR) byte ordering exists in a few image processing libraries &quot;for historical reasons&quot;, mostly because it seems to have been a Microsoft standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know the historical reason?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Color spectrum is almost always read as &quot;Red Green Blue&quot; in English.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't think of any byte ordering argument that would favor one over the other. OpenGL and earlier HW graphics tended to be either ARGB or RGBA (iirc). Intel little-endian doesn't seem to make any difference in a 4byte structure&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only blue first reason I can think of is that broadcast uses YUV and U is blue-green and V is red-green.&lt;/p&gt;&#xA;" OwnerUserId="5131" LastActivityDate="2017-06-01T23:32:27.513" Title="Why BGR color order" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3024" PostTypeId="2" ParentId="3019" CreationDate="2017-06-01T18:30:05.710" Score="26" Body="&lt;p&gt;The problem with uuencode is that the format was &lt;em&gt;not&lt;/em&gt; robust in the face of some of the really crufty mail software and gateways into and out of proprietary non-SMTP and non-ASCII mail systems of the day. Just to liven things up further, there were multiple EBCDIC variants which had different code points for some ASCII characters used by uuencode, opening up another route for data corruption. For example, the character &lt;code&gt;$&lt;/code&gt; has code point 74 in &lt;a href=&quot;https://en.wikipedia.org/wiki/EBCDIC_285&quot; rel=&quot;noreferrer&quot;&gt;code page 285&lt;/a&gt; used in the UK, but code point 91 in &lt;a href=&quot;https://en.wikipedia.org/wiki/EBCDIC_037&quot; rel=&quot;noreferrer&quot;&gt;code page 037&lt;/a&gt; used in the USA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This corruption would have been one of the driving forces behind the design of MIME, and its character set would have been carefully chosen to minimise problems with such gateways.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2017-06-01T18:30:05.710" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="3025" PostTypeId="2" ParentId="3023" CreationDate="2017-06-01T23:32:27.513" Score="24" Body="&lt;p&gt;The ordering for the color values stems from a desire to store color palettes in memory in a way that is easily transferable to the VGA RAMDAC used in IBM (and compatible) VGA video cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original IBM VGA implementation made use of the INMOS 171/176 RAMDAC chip, which is used as the Color-Lookup Table (CLUT) for VGA color mode displaying up to 256 colors from an 18-bit color palette. This RAMDAC had a peculiar way of reading and writing color palette entries using its 8-bit wide data bus. Three bus cycles are required to read or write the 18-bit color palette entry one byte at a time. During each access, an internal address register value is incremented so that the cycles read/write Red, Green, then Blue in that order. The internal register resets after blue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, it becomes an issue of convenience. By storing the palette values in the CPU RAM in xBGR order, the individual byte values end up in the proper sequence for the RAMDAC when they are transferred to it, byte-by-byte, using it's 8-bit data bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This data sheet for a &lt;a href=&quot;http://www.analog.com/media/en/technical-documentation/obsolete-data-sheets/35026349641821151ADV476.pdf&quot; rel=&quot;noreferrer&quot;&gt;compatible RAMDAC&lt;/a&gt; from Analog Devices gives more detail on how palette reads/writes are performed with these chips.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-06-01T23:32:27.513" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3026" PostTypeId="2" ParentId="3015" CreationDate="2017-06-01T23:45:30.187" Score="16" Body="&lt;p&gt;As far as the School market in Australia, the locally made Microbee was dominant in the 80's together with the Apple 2e and BBC.  The Microbee was mainly sold in Australia (zero to USA) but also sold into Sweden and its neighbours, New Zealand and a few to Israel &amp;amp; Russia. As a result, the USA, UK, etc know very little to nothing about the Microbee. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microbee also sold well On the home domestic market but never dominant there. The various Commodore's/Amiga's ruled because of their price. The Apple &amp;amp; BBC were to expensive.  Then came all the rest of the Spectrums, Ataris, Amstrads, etc. The Exidy Sorcerer and System 80 (TRS-80 clone from Dick Smith Electronics) were also well supported in the domestic market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All eventually killed off by the cheap IBM Clones of the late 80's/90's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alan&lt;/p&gt;&#xA;" OwnerUserId="5134" LastActivityDate="2017-06-01T23:45:30.187" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3027" PostTypeId="2" ParentId="3019" CreationDate="2017-06-02T13:52:41.470" Score="10" Body="&lt;p&gt;Some of the reasons base64 was disliked was because uuencode stored the original file name and file mode of the encoded data.  Also, uuencode had been around longer and was more established, which meant that many people had a uudecode program available but they did not have a base64 decoder.  Keep in mind at that time, many people were using systems that did not have a C compiler (the C compiler was often sold as an expensive add-on if it was available at all, and this was before GCC was widely available) so acquiring and compiling their own base64 decoder was a significant effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in certain contexts you didn't need a file name or mode (e.g. inline encoding of the body of an email message), and uuencoded data was particularly vulnerable to corruption because at that time it was not uncommon for a mail gateway somewhere along the line to insert an unwanted newline somewhere within&#xA;your message, or for character set translation to corrupt something.  The extra newlines were usually easy to fix, and the uuencode format made it easy to see where they had occurred, but corruption due to character set translation was much harder to fix (sometimes impossible without trial-and-error testing).  Base64 encoding solved these problems and was therefore a better choice for use within the MIME email encoding standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The decline in popularity of terminal-mode access compared to GUI access is what really killed uuencode.  Users who were using graphical email clients on a PC or on a Workstation or X Terminal, found base64-encoded MIME attachments more convenient than uuencoding, and web browsers allowed you to download files without needing any encoding at all (shifting the common method of binary file transfer away from mail and news, towards the use of FTP and HTTP instead).  Uuencoding is still an easy way to send a file when both the sender and receiver are using text-only terminals and can't use FTP, but today this is almost never the case.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2017-06-02T15:14:29.167" LastActivityDate="2017-06-02T15:14:29.167" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3028" PostTypeId="1" AcceptedAnswerId="3030" CreationDate="2017-06-02T19:33:32.387" Score="23" ViewCount="3436" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gMs88.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gMs88.png&quot; alt=&quot;Screenshot showing stripes&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When loading a program from tape on ZX Spectrum you could see those blue and yellow stripes around the splash screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I might be mistaken but I believe those were even sometimes used for quite advanced visual effects. For instance I recall a game where the splash screen featured a rocket and those stripes were showing through the part of screen where the flames coming  out the rocket nozzles should have been, as if that part of the screen was made transparent with some kind of alpha channel. Not sure if it was during loading only or during the gameplay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were these stripes there for some purpose other than pure visual?&lt;/p&gt;&#xA;" OwnerUserId="5141" LastEditorUserId="3290" LastEditDate="2020-05-01T11:06:14.313" LastActivityDate="2020-08-04T07:12:04.863" Title="Blue and yellow stripes on the screen when loading from tape on ZX Spectrum" Tags="&lt;zx-spectrum&gt;&lt;cassette-tape&gt;&lt;display&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3029" PostTypeId="2" ParentId="3028" CreationDate="2017-06-02T20:03:22.323" Score="15" Body="&lt;p&gt;No, they're purely for communication with the user. Coloured stripes = loading, slow colour changes = not loading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setting the border colour on the Spectrum is achieved with a simple port output. The stripes are an elementary raster effect — all that's happening is that the tape loading routine is changing the border lots of times within a frame. If you wrote a BASIC program like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 BORDER 2&#xA;20 BORDER 4&#xA;30 GOTO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then you'd see a similar effect, though with much larger stripes because of the overhead of interpreting BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a tape is loading successfully, the border colour changes on every input level change. That's a lot safer than putting anything less ephemeral on the screen because it communicates without modifying any RAM, and therefore can't possibly interfere with whatever's being loaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some custom loaders leave the border alone and do things like show a downward counter; the +3 doesn't do border stripes while loading from disc because they'd be a disproportionate cost — the FDC doesn't have DMA access so the Z80 is shuffling bytes to RAM as they come in, and can do without the interruption.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-06-02T20:09:54.333" LastActivityDate="2017-06-02T20:09:54.333" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3030" PostTypeId="2" ParentId="3028" CreationDate="2017-06-02T20:41:39.027" Score="24" Body="&lt;p&gt;Actually, the screen stripes while loading from tape first occurred on the ZX-81 - Where they were a result of Sinclair's typical savvy nature - the display and the &quot;EAR IN/MIC OUT&quot; had to share a pin on the ULA and thus made the (whole) screen flicker in stripes during tape loading and saving. This actually proved useful as a visual clue the computer still did something and also the stripe width allowed a bit of visual feedback on how well the computer &quot;could hear&quot; the tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus the Spectrum got the same mechanism, this time actually intentional by code in the tape loading and saving routine that quickly changes the border colour and thus creates the loading stripes. By only changing the border colour, this also added the luxury of having a usable central screen display during loading that could display type and name of a tape header block just read. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The border stripe width is a direct indication of the current bit rate received from the tape - the narrower the stripes, the higher the bit rate. Thick red and cyan bands indicated a &quot;wait for header&quot; condition, and thin yellow and blue stripes mean the computer is receiving a header or data block.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With custom load routines, the border flicker could actually be controlled during the loading - Some games simply changed part of the screen area in sync with the border colour change - This could display nice things like rounded edges on the loading screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Custom loaders could also change the load order for load screens from its normal, linear fashion towards something more interesting - There were some famous loaders like &lt;a href=&quot;https://www.youtube.com/watch?v=5y2c6eZ7wb0&quot; rel=&quot;noreferrer&quot;&gt;MadLoad&lt;/a&gt; that loaded screens in square chunks, following some made-up patterns on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other custom program loaders displayed a rainbow border during loading by modifying the colour selection from the standard red/cyan/blue/yellow scheme to more colours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing fancy things with the border colour outside a custom program loader is actually a bit simpler - You don't have to satisfy both the loading and the border effect routine with adequate timing and can concentrate on the border only. By counting the time between vertical retraces and switching the border colours with exact timing, you can, for example, extend colours from the main screen area into the border. &lt;a href=&quot;https://www.youtube.com/watch?v=xoCuSZeQspE&quot; rel=&quot;noreferrer&quot;&gt;Aquaplane&lt;/a&gt; was a game known for this effect, it extended the horizon and sea displayed into the border colour, imitating a higher screen resolution than what actually was there. (Although I found the game rather boring apart from this effect)&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-06-03T07:38:53.300" LastActivityDate="2017-06-03T07:38:53.300" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3031" PostTypeId="2" ParentId="2008" CreationDate="2017-06-04T07:56:22.720" Score="12" Body="&lt;p&gt;There was also the EDUC-8 (pronounced &quot;educate&quot;). It was Australia's first hobby computer, published as a series of articles in Electronics Australia from August 1974 to August 1975. The computer uses 100 discrete logic integrated circuits. There are 98 74 TTL series or 9000 series TTL chips, and two 1Kx1 static RAM chips. The computer runs at 500 kHz, with a 10 kHz instruction rate, due to bit-serial implementation to reduce complexity. There is an option of 128 or 256 bytes of RAM. Instructions are manually loaded using front panel switches. There are two serial input ports and two serial output ports at the back of the computer. These can be connected to a keypad, octal display, paper tape loader, paper tape puncher, printer, keyboard, music player, teleprinter, magnetic tape recorder and alphanumeric display. The 8-bit instructions are based on a shortened version of the 12-bit PDP-8 minicomputer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer uses a custom power supply, supplying 6A at 5V (30W total) to the computer and peripherals. The computer uses 3A (15W) with the peripherals using up to 3A. The main computer is housed in a 103 x 293 x 357 mm case. There are eight single-sided printed circuit boards consisting of the Front Panel Board, Connector Board, Timing Board, Decoder Board, Accumulator Board, Program Counter and Adder Board, Memory Board, and IOT Interface Board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see pictures and read more about it at &lt;a href=&quot;http://www.sworld.com.au/steven/educ-8/&quot; rel=&quot;noreferrer&quot;&gt;http://www.sworld.com.au/steven/educ-8/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alan&lt;/p&gt;&#xA;" OwnerUserId="5134" LastActivityDate="2017-06-04T07:56:22.720" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3032" PostTypeId="1" AcceptedAnswerId="3033" CreationDate="2017-06-04T17:00:10.803" Score="16" ViewCount="2707" Body="&lt;p&gt;Based on my understanding, a &lt;em&gt;tty&lt;/em&gt; means a &lt;em&gt;computer terminal/teletype&lt;/em&gt;, and that &lt;code&gt;/dev/ttyS1&lt;/code&gt; is the driver for &lt;em&gt;serial port 1/COM1&lt;/em&gt; (or more accurately, a driver for &lt;em&gt;UART chip 1&lt;/em&gt; I suppose).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I don't understand why the serial port driver is named with a &quot;tty&quot; in it  (&quot;/dev/&lt;strong&gt;tty&lt;/strong&gt;S1&quot;). Was it named like this because historically only a &lt;em&gt;computer terminal/teletype&lt;/em&gt; could be connected to a serial port?&lt;/p&gt;&#xA;" OwnerUserId="5151" LastActivityDate="2017-11-01T02:21:27.150" Title="Why is the serial port driver named &quot;/dev/ttyS#&quot;?" Tags="&lt;history&gt;&lt;terminal&gt;&lt;linux&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3033" PostTypeId="2" ParentId="3032" CreationDate="2017-06-04T17:30:19.907" Score="13" Body="&lt;p&gt;Historically a computer terminal or modem would be the most common device connected to a serial port. Thus, the default file name for the device reflects its most common usage, similarly to /dev/lpN for parallel ports, where &quot;lp&quot; stands for &quot;line printer&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For convenience, the device files corresponding to the (sub)set of serial lines dedicated to user terminals would have the names starting from /dev/tty to simplify writing the startup script activating the &lt;a href=&quot;https://en.wikipedia.org/wiki/Getty_(Unix)&quot; rel=&quot;noreferrer&quot;&gt;getty&lt;/a&gt; program, something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for i in /dev/tty?* ; do&#xA;getty $i &amp;amp;&#xA;done&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Other (for example, outgoing) serial lines, if any, could be named differently (e. g. &lt;code&gt;/dev/modem&lt;/code&gt; for an outgoing line). The UNIX kernel doesn't pay attention to the device file name; what is important are the &lt;a href=&quot;https://en.wikipedia.org/wiki/Device_file#Unix_and_Unix-like_systems&quot; rel=&quot;noreferrer&quot;&gt;&quot;major&quot; and &quot;minor&quot; numbers associated with the file system node&lt;/a&gt; the file name points to.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-06-04T17:40:41.457" LastActivityDate="2017-06-04T17:40:41.457" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3034" PostTypeId="2" ParentId="3032" CreationDate="2017-06-04T17:39:36.427" Score="20" Body="&lt;p&gt;TL;DR: Until Unix v7, if you wanted to be able to use a serial port for terminal logins, it had to have a name starting with &quot;/dev/tty&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time the first Unix systems were developed, it was common to use a Teletype as a terminal.  Early models of the DEC PDP-11 computer came with a Teletype intended to be used as the console terminal.  &quot;tty&quot; is an abbreviation for &quot;Teletype&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, use of other kinds of terminals became common but the use of the &quot;/dev/tty&quot; naming convention remained in place, even when the port had some other kind of terminal attached.  At that time it was common to use most (or all) of the serial ports on a computer for terminals or modems, and the /dev/tty naming was understood to apply to any character-at-a-time interface that could be used for logins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays, serial ports aren't usually used for login terminals but the naming has stuck, especially since you &lt;em&gt;can&lt;/em&gt; still use them that way if you want to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that you have always been able to rename the device file anything you like, but for a long time if you wanted to use the terminal for logins it had to have a name starting with &quot;/dev/tty&quot;.  Starting with Unix 7th Edition, you could enable a port for logins and call it any name you like (and the console terminal got renamed /dev/console), but most people continued to follow the /dev/tty convention for user terminals because it's well-known and the default (leading to fewer questions from your users).  In Unix v6, login terminals had to be named /dev/ttyX, where X was any single character (0-9 and a-z could be used, except that by convention '8' was reserved for the console terminal).&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2017-06-04T17:58:13.963" LastActivityDate="2017-06-04T17:58:13.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3035" PostTypeId="2" ParentId="3032" CreationDate="2017-06-04T23:12:52.867" Score="5" Body="&lt;p&gt;As the other answers said, yes, it's because terminals were originally connected to serial ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have 2 computers with functioning serial ports, at least one of them running a unix-like OS, and a null modem cable to connect them, you can still do this now. On one end, configure &lt;code&gt;ttyS0&lt;/code&gt; as a login port (by editing &lt;code&gt;/etc/inittab&lt;/code&gt; or some similar file where the &lt;code&gt;getty&lt;/code&gt; commands are), and on the other end run a terminal emulator that knows how to drive a serial port (e.g. minicom, screen, putty). For bonus points, run &lt;code&gt;cu&lt;/code&gt; or &lt;code&gt;tip&lt;/code&gt; on an existing terminal instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can't conduct this experiment, you can still observe other remaining effects of the historical close relationship between tty's and serial ports, by looking at all the options available in the &lt;code&gt;stty&lt;/code&gt; command. Several of them (speed, parity, number of data bits and stop bits, &quot;local&quot; mode, handling of break signals...) are serial port settings that make no sense on any other kind of tty. But they exist on every tty because historically there was no dividing line between configuring the serial port itself and configuring the driver to understand the terminal on the other end of the serial line, so everything was shoved into the &lt;code&gt;stty&lt;/code&gt; tool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can run &lt;code&gt;stty -a&lt;/code&gt; on any tty that isn't a real serial port, and if you match up all the listed modes to their description in &lt;code&gt;man stty&lt;/code&gt;, you'll probably find that it is set to 38400 baud, 8 data bits, no parity, 1 stop bit. These settings are pointless. Attempts to change them will either be rejected or have no effect. On &lt;code&gt;ttyS0&lt;/code&gt;, you have to get those settings right or the terminal won't work at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there's the &lt;code&gt;^S&lt;/code&gt; and &lt;code&gt;^Q&lt;/code&gt; special characters to stop and restart terminal output. They still work, but they're not very helpful unless the terminal is a fairly slow serial device. Mostly &lt;code&gt;^S&lt;/code&gt; just provides a way for people to accidentally freeze their terminals and get confused.&lt;/p&gt;&#xA;" OwnerDisplayName="user5152" LastActivityDate="2017-06-04T23:12:52.867" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3036" PostTypeId="1" AcceptedAnswerId="3037" CreationDate="2017-06-05T10:14:28.220" Score="12" ViewCount="3312" Body="&lt;p&gt;Got a question about how the 68000 addresses memory.&lt;br&gt;&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68000#Architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia says&lt;/a&gt;: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 68000 has a 24-bit external address bus and two byte-select signals &quot;replaced&quot; A0. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here is an image of the chip's pins:&lt;a href=&quot;https://i.stack.imgur.com/gfyMkl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gfyMkl.png&quot; alt=&quot;68000 pinout&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Wikipedia says, A0 is not there. So instead, we've got D0 thru D15, so that the CPU can fetch or store 16 bits at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what are the &quot;byte-select&quot; signals mentioned in the Wikipedia quote for? &lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="547" LastEditDate="2018-11-20T07:12:55.080" LastActivityDate="2018-11-20T07:12:55.080" Title="What do the &quot;byte-select signals&quot; in the 68000 do?" Tags="&lt;m68k&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="3037" PostTypeId="2" ParentId="3036" CreationDate="2017-06-05T10:32:08.010" Score="16" Body="&lt;p&gt;The byte select signals select the low byte or the high byte or both. The 68000 has instructions for reading or writing words (16 bits) and bytes. In the latter case, it needs to be able to tell the world which half of the databus it is reading or writing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the &lt;a href=&quot;http://www.nxp.com/assets/documents/data/en/reference-manuals/MC68000UM.pdf&quot; rel=&quot;noreferrer&quot;&gt;68000 user manual&lt;/a&gt; (table 3.1), when the process is reading or writing the data bus the LDS and UDS signals are used to tell the world which byte or bytes the processor is trying to read/write. This means that you can connect devices with 8 bit ports to the databus and not have spurious reads and writes to the wrong ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, it means the 68000 can write a single byte to memory. If you want to execute&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mov.b d0,someAddress&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;you put the low byte of d0 on either the low byte or high byte of the databus depending on whether &lt;code&gt;someAddress&lt;/code&gt; is even or odd respectively, but you don't want the memory to store the other byte of the databus as well. The byte select signals can stop it from doing that.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="2126" LastEditDate="2017-06-05T19:13:01.407" LastActivityDate="2017-06-05T19:13:01.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3038" PostTypeId="2" ParentId="3036" CreationDate="2017-06-05T10:40:16.027" Score="7" Body="&lt;p&gt;The signals are there so in byte addressing mode the 68000 can read and write individual bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From memory UDS means that valid data is on bits 8..15 of the data bus and LDS means that valid data is on bits 0..7 of the data bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast a 8086 family part calls LDS A0 and BHE for the other bits. In practice on an AT architecture machine this is a little different as the hardware can map 16 bit accesses into two 8 bit ones for compatibility with original PC hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is particularly important as the 68000 maps peripherals into memory. So you might not want to do a 16 bit read / write cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;When I get home with a bit of time and some datasheets I'll try and expand this a bit (particularly how the AT bus works) and make sure I have the UDS/LDS mapping to bits correct&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2017-06-05T15:05:20.107" LastActivityDate="2017-06-05T15:05:20.107" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3039" PostTypeId="1" AcceptedAnswerId="3040" CreationDate="2017-06-05T23:13:27.440" Score="22" ViewCount="1668" Body="&lt;p&gt;I'm wondering how old computer emulators work.&lt;/p&gt;&#xA;&lt;p&gt;I can think of two possible approaches:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;quot;hardware&amp;quot; approach - like a set of components that exactly act as low-level hardware elements. I mean a &lt;strong&gt;bus&lt;/strong&gt; with its &lt;em&gt;busy&lt;/em&gt; signals, &lt;strong&gt;CPU&lt;/strong&gt; and &lt;em&gt;fetch–decode–execute&lt;/em&gt; cycles, &lt;strong&gt;IRQs&lt;/strong&gt; that must wait for CPU, etc... Or even set of logical gates and electric circuits to imitate the structure of the real machine.&lt;/li&gt;&#xA;&lt;li&gt;&amp;quot;behavior&amp;quot; approach - do what we know the real machine would do and try to emulate all known &lt;em&gt;side effects&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In other words: is there some kind of hardware reverse-engineering done or is it based on the programmers' experience?&lt;/p&gt;&#xA;&lt;p&gt;I have found the question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1191/what-exactly-is-a-cycle-accurate-emulator&quot;&gt;What exactly is a cycle-accurate emulator?&lt;/a&gt;. Well, if there are &lt;em&gt;cycle-accurate-emulators&lt;/em&gt; so there should also be &lt;em&gt;&lt;strong&gt;not&lt;/strong&gt;-cycle-accurate-emulators&lt;/em&gt; which would be examples of &lt;em&gt;behavior&lt;/em&gt; approach as they wouldn't be as precise as the real machine.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, the VICE emulator, for example, can deal with such complicated tasks as &lt;em&gt;stealing cycles to display sprites&lt;/em&gt; described in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/574/how-to-avoid-sprites-confusing-the-raster-timings-on-c64&quot;&gt;How to avoid sprites confusing the raster timings on C64?&lt;/a&gt;. That, in my opinion, is only possible when you exactly duplicate &lt;em&gt;hardware&lt;/em&gt; behavior. The proof would be to run any demo with sprites on side-borders effect.&lt;/p&gt;&#xA;&lt;p&gt;Can you, please, shed some light on this? Or maybe there is someone involved in emulator development and can share his knowledge?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;: I'm mainly interested how &lt;em&gt;hardware quirks&lt;/em&gt; are dealt with like, for example, C64 graphic tricks.&lt;/p&gt;&#xA;" OwnerUserId="423" LastEditorUserId="576" LastEditDate="2021-04-18T09:54:52.573" LastActivityDate="2021-04-20T08:07:19.997" Title="How do old computer emulators work?" Tags="&lt;emulation&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="3040" PostTypeId="2" ParentId="3039" CreationDate="2017-06-06T03:22:34.650" Score="35" Body="&lt;p&gt;I wrote my first emulators somewhere in the mid-to-late '90s, my first cycle-accurate emulator circa 2000 and have managed to outdo even that, writing a clock-sign-transition-accurate emulator — accurate to the half-cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two problems usually recur:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;each component's proper implementation may be not only obtuse but possibly unknown; and&lt;/li&gt;&#xA;&lt;li&gt;ensuring that the components act simultaneously is difficult.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Most official documentation provides a programming model for a component, not an exhaustive documentation of its internals. E.g. many sound chips have a noise channel. There's almost always an easy way to derive the pattern of noise that channel will produce. It's almost never documented. If it isn't documented, how are you going to figure it out?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a CPU is running at 3 Mhz and it has a graphics chip that is also running at 3 Mhz, then both are doing work &lt;em&gt;at the same time&lt;/em&gt;. If they can interact on any cycle, then you need a way of being able to figure out exactly what state each should have been in at each synchronisation point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simplification often made in the old days was that the CPU operates a whole opcode at a time. E.g. if it encounters &lt;code&gt;PUSH HL&lt;/code&gt; then it puts &lt;code&gt;HL&lt;/code&gt; onto the stack, adjusting the stack pointer and memory underneath, then magically and instantaneously warps forwards in time by the eleven cycles that should have taken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, if the graphics chip draws one line every 228 cycles then they can interleave by doing 228 cycles of work on the CPU (with a running error count to deal with not necessarily being able to stop exactly at 228), then drawing one more line of the display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That sort of emulator is not cycle accurate. All changes the processor made within 228 cycles are seemingly batched up and performed instantaneously, immediately before the graphics chip managed to draw any of the line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The densest scheme for cycle accuracy, in an example two-chip machine, is: run the CPU for one cycle. Then run the graphics chip for one cycle. Then repeat. Both components need to be written to be able to run a cycle at a time, and your computer's real CPU is going to do a lot of jumping around and cache thrashing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An obvious improvement occurs for one-directional signalling — e.g. where a CPU may send commands to something like a sound chip, but doesn't receive anything back. Just keep a log of the signals, and then compute their effect later, or even asynchronously. It's producer-consumer, possibly cooperatively scheduled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A related approach is not explicitly to keep a log, but just to write the dependency to be able to run for N cycles, allowing it to assume constant machine state throughout. E.g. suppose graphics are always drawn from the address range 0x4000–0x8000. Then keep a count of cycles since you last let the graphics processor run. Any time the CPU writes to the graphics range, run the graphics output for that number of cycles and zero the count. Then write the value and continue. You'll do better than lockstep cycle-by-cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to capturing quirks, that's usually just a matter of understanding the way in which the hardware operates. E.g. the Atari 2600 is very close in ideology to the discrete hardware that it replaced — there are no centralised counters, because propagating a number is a heavyweight operation, there are lots of individual local counters with a common clock and the ability to reset each other. You can't tell a sprite to appear at x=23 because the thing that draws the sprites never knows what the current x is. It just knows that it will receive 160 clocks per line (umm, simplified a little, but let me have it) so whatever it does, it must repeat every 160 cycles. And you can programmatically tell it to reset. It will always trigger sprite output when it overflows. So you can place sprites by telling it to reset at an appropriate moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you model it as a bunch of distinct counters, you'll get much of the correct behaviour for free. If you try to get away with storing the x at which a sprite should appear, and correlating that with a global clock then you've attempted to change the problem and you'll probably end up getting it wrong.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-06-06T03:22:34.650" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3041" PostTypeId="1" CreationDate="2017-06-06T08:27:46.293" Score="24" ViewCount="3651" Body="&lt;p&gt;Modern versions of Windows (and other modern operating systems I suppose) have their own drivers to access hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as I have read, in the old days, if CP/M or MS-DOS wanted to access hardware, they would use the BIOS drivers to do that for them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why did CP/M and MS-DOS not have their own drivers to access hardware? My guess is that if they had drivers for all available hardware at that time, then the size for these operating systems would become too large.&lt;/p&gt;&#xA;" OwnerUserId="4905" LastEditorUserId="15334" LastEditDate="2020-12-09T18:55:07.720" LastActivityDate="2020-12-17T13:07:02.103" Title="Why did CP/M and MS-DOS use the BIOS instead of their own drivers to access hardware?" Tags="&lt;ms-dos&gt;&lt;cp-m&gt;&lt;bios&gt;&lt;driver&gt;" AnswerCount="11" CommentCount="14" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="3042" PostTypeId="2" ParentId="3041" CreationDate="2017-06-06T09:21:06.973" Score="35" Body="&lt;p&gt;The BIOS originated as part of the CP/M operating system. It was the &amp;quot;layer&amp;quot; that interfaced directly with the hardware and as such, was usually machine specific. The idea is that, if you separate out the hardware interactions into one module and provide a standardised interface that the rest of the OS uses (and user programs), then the only thing you need to change when porting to a new computer is the relatively small BIOS.&lt;/p&gt;&#xA;&lt;p&gt;With DOS and the IBM PC, a large part of the BIOS was moved from the OS into ROM to make it easier to boot the machine (CP/M had a bootloader in ROM, but I think it was pretty basic) but it's still effectively part of the DOS operating system. Once Windows came along, the operating system took over more of the tasks that had traditionally been the responsibility of the BIOS until by the time of Linux, Windows NT and Windows 95, the BIOS was only used to get to the point of having the operating system running and was henceforth ignored.&lt;/p&gt;&#xA;&lt;p&gt;So the answer to your question is that effectively the BIOS &lt;em&gt;is&lt;/em&gt; MS-DOS's and CP/M's drivers.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="15334" LastEditDate="2020-10-03T18:51:26.577" LastActivityDate="2020-10-03T18:51:26.577" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="3043" PostTypeId="2" ParentId="3041" CreationDate="2017-06-06T15:54:13.050" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;the size for these operating systems would become too large.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think that's a big part of it.  Building their own hardware drivers would require both:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Space in RAM to be used.&lt;/li&gt;&#xA;&lt;li&gt;Space on a 360k floppy disk.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'm sure those considerations were measured against using their own hardware drivers.  No need to &quot;re-invent the wheel&quot; for hardware access, when they were tight on space to begin with, and could just use the routines delivered with the BIOS.&lt;/p&gt;&#xA;" OwnerUserId="125" LastActivityDate="2017-06-06T15:54:13.050" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3045" PostTypeId="1" CreationDate="2017-06-06T17:08:32.460" Score="35" ViewCount="4251" Body="&lt;p&gt;I never had a Commodore 64 but I've always been curious what the purpose and history of some of the special keys were. In particular:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;kbd&gt;C=&lt;/kbd&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Run/Stop&lt;/kbd&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Clr/Home&lt;/kbd&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Restore&lt;/kbd&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm mostly used to the standard ASCII keyboards from the era and whenever I had sat in front of a Commodore these keys didn't seem to do much. But to be fair, I believe the &lt;kbd&gt;Run/Stop&lt;/kbd&gt; key would break listings and the &lt;kbd&gt;C=&lt;/kbd&gt; + &lt;kbd&gt;Shift&lt;/kbd&gt; key would possibly switch out the character set to allow for lowercase. But were there other uses? How come &lt;kbd&gt;Run/Stop&lt;/kbd&gt; can break a program but not start it? What is the &lt;kbd&gt;Restore&lt;/kbd&gt; key and why is it so big?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I &lt;em&gt;think&lt;/em&gt; the same keyboard was used on the other Commodore machines, but memory isn't clear. Are the behaviors consistent?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="11916" LastEditDate="2019-04-21T19:52:26.107" LastActivityDate="2020-04-01T09:59:44.347" Title="What was the purpose and history of the C64's special keys?" Tags="&lt;history&gt;&lt;commodore-64&gt;&lt;keyboards&gt;" AnswerCount="6" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3046" PostTypeId="2" ParentId="3045" CreationDate="2017-06-06T17:20:47.100" Score="14" Body="&lt;p&gt;I believe the C64 keys were carried over from the VIC-20.  The VIC-20 keys (somewhat at least) have some history from the PET series too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taken from &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_VIC-20&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia on the VIC 20&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When they returned to California from that meeting, Tomczyk wrote a&#xA;  30-page memo detailing recommendations for the new computer, and&#xA;  presented it to  Tramiel. Recommendations included programmable&#xA;  function keys (inspired by  competing Japanese computers),&#xA;  full-size typewriter-style keys, and  built-in RS-232.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The keys you mentioned are mostly self-explaining.  &lt;kbd&gt;RUN/STOP&lt;/kbd&gt; would run or halt an application and was programmable in software.  The fact that &quot;RUN&quot; rarely (if at all) started an application wasn't a limit of the key.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;kbd&gt;C=&lt;/kbd&gt; key could be said to exist as mere corporate branding such as the &quot;Apple&quot; keys on the Apple II series.  Useful as a META key or &quot;special&quot; key to allow specific combinations in software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to admit, I'm not sure of the history of the &lt;kbd&gt;Restore&lt;/kbd&gt; key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, keep in mind, that before the VIC-20 the biggest success Commodore had in computers was the PET.  The PET originally had terrible calculator keys that was quickly replaced by a real, full-travel keyboard.  Commodore seemed to learn their lesson in bad keyboards as many of their computers after the original PET actually had pretty good keyboards.  Even their cheaper models like the C16.  Of course, there are exceptions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, Tamiel was legendary in using parts he had on hand.  Which is one reason why the C64 inherited the VIC-20 keyboard.  So he wasn't going to design a completely new keyboard for the C64.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="-1" LastEditDate="2017-06-07T06:55:13.163" LastActivityDate="2017-06-07T06:55:13.163" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3047" PostTypeId="1" CreationDate="2017-06-06T18:13:52.947" Score="-6" ViewCount="1105" Body="&lt;p&gt;To which memory location does the stack pointer point at the beginning of the program in PDP 11? And what can be the end address the SP can point to before overflow occurs?&lt;/p&gt;&#xA;" OwnerUserId="5093" LastEditorUserId="79" LastEditDate="2018-07-04T13:54:27.150" LastActivityDate="2018-07-04T13:54:27.150" Title="What is the starting address pointed by Stack Pointer in PDP 11?" Tags="&lt;assembly&gt;&lt;pdp-11&gt;" AnswerCount="4" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="3048" PostTypeId="2" ParentId="3045" CreationDate="2017-06-06T20:47:38.950" Score="35" Body="&lt;p&gt;The &lt;kbd&gt;Restore&lt;/kbd&gt; key triggered the NMI (non-maskable interrupt) line; to actually have an effect it had to be combined with &lt;kbd&gt;Run/Stop&lt;/kbd&gt; - it would soft-reset the machine (via an indirect jump vector that could be overwritten to a custom routine if desired.  This wouldn't reset memory, but would stop even misbehaving programs in most cases.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;kbd&gt;Run/Stop&lt;/kbd&gt; was two keys; unshifted, it was &lt;code&gt;Stop&lt;/code&gt; and would halt the current action (like listing a program or stop a running BASIC program).  Pressing &lt;kbd&gt;Shift&lt;/kbd&gt; + &lt;kbd&gt;Run/Stop&lt;/kbd&gt; would be a shortcut for the &lt;code&gt;LOAD&lt;/code&gt; command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;kbd&gt;Clr/Home&lt;/kbd&gt; was similar.  Unshifted, it moved the cursor to the upper-left corner of the screen.  Shifted (&lt;code&gt;Clr&lt;/code&gt;) it cleared the screen and moved the cursor to the upper-left.  (If you were in an open quoted string, it would actually insert the control character for these things, so you could have a command in a program that would &quot;print&quot; the &lt;code&gt;Clr&lt;/code&gt; character, and when you ran the program it would clear the screen.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;kbd&gt;C=&lt;/kbd&gt; key had a few uses.  One, when combined with &lt;kbd&gt;SHIFT&lt;/kbd&gt; would switch between uppercase/graphics and lower/uppercase characters.  It was also an alternate &lt;code&gt;SHIFT&lt;/code&gt; key to access additional characters on the keyboard.  Lastly, &lt;kbd&gt;C=&lt;/kbd&gt; plus the numbers 1-8 would allow choices of 8 additional text colors (&lt;kbd&gt;Ctrl&lt;/kbd&gt; and 1-8 are the other 8 colors).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sta.c64.org/cbm64petkey.html&quot; rel=&quot;noreferrer&quot;&gt;http://sta.c64.org/cbm64petkey.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="599" LastEditorUserId="599" LastEditDate="2017-06-07T12:47:05.377" LastActivityDate="2017-06-07T12:47:05.377" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3049" PostTypeId="2" ParentId="3047" CreationDate="2017-06-06T21:09:11.430" Score="3" Body="&lt;p&gt;A &quot;naked&quot; PDP-11 (at least the ones I've seen, might also have been preconfigured) would start up with the system stack configured to &amp;amp;400 to &amp;amp;777 (&amp;amp; == octal notation, as common on the PDP-11) and execute code typically starting from &amp;amp;1000 (the next address beyond the stack top). As it's unclear what you mean with &quot;program&quot;, I'd assume the initial startup after reset. The area below the stack (&amp;amp;000-&amp;amp;377) holds the interrupt and trap vectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What happens after that is entirely dependant on the operating system and machine configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you see from the above, the system stack cannot technically grow lower than &amp;amp;400 (it would overwrite the vector area) - Actually, the PDP-11 has a stack limit register that monitors stack usage and will execute a processor trap once the stack grows into a configurable &quot;yellow zone&quot;, and a reset if the stack grows even lower into what DEC called the &quot;red zone&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the PDP-11/40 manual:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;b&gt;PROGRAMMABLE STACK LIMIT&lt;/b&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The stack limit allows program control of the lower limit for permissible stack addresses. This limit may be varied in increments of &amp;amp;400 words, up to a maximum address of &amp;amp;177400, almost the top of a 32K word memory.&#xA;  The normal boundary for stack addresses is &amp;amp;400. The stack limit option allows this lower limit to be raised, providing more address space for interrupt vectors or other data that should not be destroyed by a program.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The contents of the stack limit register (SL) are compared to the stack address to determine if a violation has occurred (although memory references that do not alter memory are always allowed). The least significant bit of the register (bit 8) has a value of &amp;amp;400. The determination of the violation zones is as follows:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Yellow Zone = (SL) + (&amp;amp;340 through &amp;amp;377) execute, then trap. &lt;/li&gt;&#xA;  &lt;li&gt;Red Zone = (SL) +(&amp;amp;337) abort, then trap to location 4.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;If the stack limit register contents were zero:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;YellowZone = &amp;amp;340 through &amp;amp;377 &lt;/li&gt;&#xA;  &lt;li&gt;RedZone = &amp;amp;000 through &amp;amp;337&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The stack limit register is, to my knowledge, exclusively available in the PDP-11/40 and sits at location &amp;amp;177400. You could thus reserve a protected memory zone between the stack and the vector area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the OS is loaded, the limits and locations can, depending on the operating system, be entirely different. Note the PDP-11 supports virtual memory and a larger system address space than addressable by a single process and can page in/out memory, the variance between OSs can be significant.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-06-06T21:42:54.030" LastActivityDate="2017-06-06T21:42:54.030" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3050" PostTypeId="2" ParentId="3047" CreationDate="2017-06-06T21:27:49.623" Score="2" Body="&lt;p&gt;If you are programming a 'bare metal' PDP-11 (no operating system or program loader) then you should not assume the stack pointer (R6) is initialized to any particular value (i.e. you need to initialize it yourself).  If your PDP-11 has front-panel toggle switches you can set R6 by toggling a value into location 177706.  Presumably this could also be done on later systems using Console ODT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are running a program under an operating system or monitor, the initial value of the stack pointer will typically be set for you, but the exact value may vary.  The documentation for the operating system or monitor you're running should tell you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lower bound of the stack pointer is 256 (400 octal).  If a stack 'push' operation causes the stack pointer to fall below that limit (the stack grows downwards) it will trigger a Stack Overflow trap (via the trap vector at address 4).  This is described in chapter 2, page 43 of the 1969 edition of the PDP-11 Processor Handbook (&lt;a href=&quot;http://gordonbell.azurewebsites.net/digital/pdp%2011%20handbook%201969.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://gordonbell.azurewebsites.net/digital/pdp%2011%20handbook%201969.pdf&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2017-06-06T21:41:42.943" LastActivityDate="2017-06-06T21:41:42.943" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3051" PostTypeId="2" ParentId="3041" CreationDate="2017-06-07T01:13:30.843" Score="12" Body="&lt;p&gt;The simple answer is that they just didn't need them! Why reinvent the wheel, when the required interface is already provided by the ROM BIOS? This allows the operating system to be more portable and to support a wider variety of machines and hardware from different vendors, because the vendor provides and is responsible for the ROM BIOS routines. Size of the OS itself was also certainly a consideration, as you rightfully point out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The converse question is, then, why do modern operating systems have their own drivers to access hardware? And the answer to that is rather simple, too: because they have to! The ROM BIOS routines are designed to be called from real mode, but modern operating systems don't run in real mode. Instead, they run in protected mode (32-bit) or long mode (64-bit). Since the ROM BIOS services are unavailable from these modes, the operating systems must provide their own drivers. The ROM BIOS services are often still used, even by modern operating systems, during the boot-up phase before they switch into protected/long mode. (All x86 processors boot in real mode, compatible with an 8088, even to this day.&lt;sup&gt;*&lt;/sup&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;__&lt;br&gt;&#xA;&lt;sub&gt;* Except that, as of the Intel Haswell microarchitecture, the &lt;a href=&quot;https://en.wikipedia.org/wiki/A20_line&quot; rel=&quot;nofollow noreferrer&quot;&gt;A20 gate&lt;/a&gt; is no longer supported.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="2037" LastEditorUserId="2037" LastEditDate="2017-08-10T14:18:13.493" LastActivityDate="2017-08-10T14:18:13.493" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="3052" PostTypeId="2" ParentId="3047" CreationDate="2017-06-07T04:49:02.307" Score="3" Body="&lt;p&gt;In &lt;a href=&quot;http://pdp11.aiju.de/&quot; rel=&quot;nofollow noreferrer&quot;&gt;UNIX V6&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# STTY -LCASE&#xA;# chdir tmp&#xA;# echo 'main() { int x; printf(&quot;%o\n&quot;, &amp;amp;x); }' &amp;gt; stack.c&#xA;# cat stack.c&#xA;main() { int x; printf(&quot;%o\n&quot;, &amp;amp;x); }&#xA;# cc stack.c&#xA;# ./a.out&#xA;177744&#xA;# &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The stack starts at the very top of the virtual memory, then the kernel puts the command line plus the &lt;code&gt;argv&lt;/code&gt; array there; plus the space for saved registers at the start of main; overall, there are 26 bytes used before the stack space for the local variables in &lt;code&gt;main&lt;/code&gt; starts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When &lt;code&gt;main()&lt;/code&gt; is called recursively, the execution, after a considerable wait, ends with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;22336&#xA;22320&#xA;22302&#xA;22264&#xA;22246&#xA;Memory fault -- Core dumped&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;whereas &lt;code&gt;size a.out&lt;/code&gt; shows a mere &lt;code&gt;638+58+530=1226 (2312)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That looks like a swap space exhaustion rather than a limitation. Ostensibly, the stack can grow down to the page just above the highest page containing dynamically allocated memory. &lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-06-07T04:49:02.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3053" PostTypeId="1" AcceptedAnswerId="3054" CreationDate="2017-06-07T06:06:20.303" Score="15" ViewCount="4297" Body="&lt;p&gt;The base address for the video memory in MS-DOS is &lt;code&gt;0xB8000&lt;/code&gt;. I am trying to write to this address using &lt;code&gt;debug.exe&lt;/code&gt;, but I am getting an error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1165:0103 mov [b8000],ax&#xA;                   ^ Error&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="5161" LastEditorUserId="79" LastEditDate="2017-06-07T06:36:32.263" LastActivityDate="2020-02-09T18:56:31.597" Title="How to write directly to video memory in MS-DOS?" Tags="&lt;ms-dos&gt;&lt;assembly&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3054" PostTypeId="2" ParentId="3053" CreationDate="2017-06-07T06:13:45.947" Score="22" Body="&lt;p&gt;You need to use a segment and offset, 0xB8000 can’t be represented directly in 16 bits:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mov ax, b800&#xA;mov ds, ax&#xA;; set AX appropriately here, or write an immediate value&#xA;mov [0000], ax&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You need to go through another register to write to DS because &lt;code&gt;mov ds, imm16&lt;/code&gt; isn’t valid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that by writing a word (AX), you’re writing a character and its attribute in one operation (in text mode).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Somewhat amusingly, &lt;code&gt;mov ax, imm16&lt;/code&gt; is encoded as 0xB8, so &lt;code&gt;mov ax, b800&lt;/code&gt; is 0xB800B8...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In monochrome video modes you’d have to use 0xB000 instead of 0xB800, and 0xA000 for some EGA/VGA graphics modes (see &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/it/10/0.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this table&lt;/a&gt; for details).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another approach, as pointed out by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/780/tofro&quot;&gt;tofro&lt;/a&gt;, is to use ES and the index registers:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mov ax, b800&#xA;mov es, ax&#xA;xor di, di&#xA;; set AX appropriately here&#xA;stosw&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This has the same effect, using &lt;code&gt;stosw&lt;/code&gt; to write the contents of AX to the memory pointed at by ES:DI (and incrementing DI in the process, so the next &lt;code&gt;stosw&lt;/code&gt; writes to the next character on screen). This is how one would commonly go about writing to the screen, in combination with &lt;code&gt;rep&lt;/code&gt; and &lt;code&gt;movsb&lt;/code&gt; or &lt;code&gt;movsw&lt;/code&gt; to copy content from DS:SI to ES:DI. For example, here’s how to clear the screen in 80×25 mode:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mov ax, b800&#xA;mov es, ax&#xA;xor di, di&#xA;mov cx, 07d0&#xA;mov ax, 2000&#xA;rep stosw&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This writes 0x0020 (black-on-black space) to the screen 2000 times (80×25, 0x07D0).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-12-03T13:47:29.723" LastActivityDate="2019-12-03T13:47:29.723" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="3055" PostTypeId="1" AcceptedAnswerId="3056" CreationDate="2017-06-07T08:25:19.567" Score="62" ViewCount="9687" Body="&lt;p&gt;To this day on Linux configs and startup scripts for the GUI system are stored in &lt;code&gt;/etc/X11&lt;/code&gt;. I remember this name appearing alone, or alongside others - XFree86, X.org, X - for as long as I had contact with UNIX/Linux systems. I'd guess '11' is some version number, but why would &lt;em&gt;this particular one&lt;/em&gt; be so prevalent? Why do we never hear of X10 or X12 window system while X11 survived a couple decades?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="357" LastEditDate="2017-06-08T19:49:52.267" LastActivityDate="2019-05-03T13:57:21.060" Title="What's the story behind the name &quot;X11&quot;?" Tags="&lt;unix&gt;&lt;xwindow-x11&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="3056" PostTypeId="2" ParentId="3055" CreationDate="2017-06-07T08:43:20.583" Score="81" Body="&lt;p&gt;The short version is that X11 was the first widely-disseminated version, and it turned out to be good enough to remain as-is for thirty years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;X is the &lt;a href=&quot;https://en.wikipedia.org/wiki/X_Window_System&quot; rel=&quot;noreferrer&quot;&gt;X Window System&lt;/a&gt;, which at its core is a protocol; the number identifies the version of the protocol. X1 was released in 1984 inside MIT, and quickly evolved to X9 in 1985; an external port to RT/PC required a protocol change, so X10 followed shortly thereafter. At this point X “escaped” to other organisations, but its developers really wanted a more device-neutral re-design. DEC contributed to this, and released X11 in 1987. (This is a quick summary of Wikipedia’s &lt;a href=&quot;https://en.wikipedia.org/wiki/X_Window_System#Origin_and_early_development&quot; rel=&quot;noreferrer&quot;&gt;history of X&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The protocol itself is stable, because it’s device-neutral and extensible. As a result, there has been no absolute need for a new protocol version (X12); as Bob Scheifler put it when he presented version 11, &lt;a href=&quot;https://www.youtube.com/watch?v=OTAI2-jYBa8&amp;amp;t=216&quot; rel=&quot;noreferrer&quot;&gt;“We don’t think it will ever change again, okay. There’s not gonna be a version 12.”&lt;/a&gt; The wide dissemination of X11 also means it’s harder to introduce a new protocol version, and instead, new features are introduced as extensions (sometimes jumping through hoops).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of limitations in X11, and there’s even an &lt;a href=&quot;https://www.x.org/wiki/Development/X12/&quot; rel=&quot;noreferrer&quot;&gt;“X12” page&lt;/a&gt; (which isn’t about an actual X12 project, just a list of what it would have to do and relevant resources).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The successor of course is likely to be &lt;a href=&quot;https://en.wikipedia.org/wiki/Wayland_%28display_server_protocol%29&quot; rel=&quot;noreferrer&quot;&gt;Wayland&lt;/a&gt;, which is developed by X developers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As pointed out by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/576/wilson&quot;&gt;Wilson&lt;/a&gt;, the letter X was picked as a follow-on to W, which was the windowing system of the &lt;a href=&quot;https://en.wikipedia.org/wiki/V_(operating_system)&quot; rel=&quot;noreferrer&quot;&gt;V operating system&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-05-03T13:57:21.060" LastActivityDate="2019-05-03T13:57:21.060" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="3057" PostTypeId="1" AcceptedAnswerId="3058" CreationDate="2017-06-07T11:09:49.260" Score="5" ViewCount="2047" Body="&lt;p&gt;I have written the following program in &lt;code&gt;debug.exe&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1165:0100  mov ah, 09&#xA;1165:0102  mov dx, 107&#xA;1165:0105  int 21&#xA;1165:0107  db 'Hello World', 0A, 0D, '$'&#xA;1165:0115  jmp 1165:0100&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, when I execute it, it stops working after printing &quot;Hello World&quot; once. What I want it to do is to keep printing &quot;Hello World&quot; repeatedly, in a loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/zsXxU.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also tried &lt;code&gt;jmp 0100&lt;/code&gt; but it also didn't work.&lt;/p&gt;&#xA;" OwnerUserId="5161" LastEditorUserId="2037" LastEditDate="2017-06-07T13:39:12.003" LastActivityDate="2020-01-30T17:08:37.667" Title="Why the &quot;jmp&quot; instruction is not working?" Tags="&lt;ms-dos&gt;&lt;assembly&gt;&lt;8088&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3058" PostTypeId="2" ParentId="3057" CreationDate="2017-06-07T11:14:41.420" Score="29" Body="&lt;p&gt;Your code runs through the data (&quot;Hello World&quot; string) interpreting it as (nonsense) machine code - and very probably crashes before it even reaches the &lt;code&gt;jmp&lt;/code&gt; instruction.&#xA;You need to move the &lt;code&gt;jmp&lt;/code&gt; instruction to &lt;em&gt;before&lt;/em&gt; the string.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-06-07T12:58:43.117" LastActivityDate="2017-06-07T12:58:43.117" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3059" PostTypeId="2" ParentId="2995" CreationDate="2017-06-07T12:32:20.903" Score="9" Body="&lt;p&gt;You are underestimating the on-chip costs of additional colors at that time. Supporting six bitplanes was already maxing out the possibilities, which is best illustrated by the fact that there were not enough CLUT registers even for six bitplanes, but only for five (32 colors), so six bitplanes could only be used via EHB, HAM or Dual Playfield mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If adding another 32 CLUT registers was that easy, there was no need for the EHB compromise. Not to speak of adding another 224 color registers…&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides that, reserving all cycles to the display DMA implies that neither Copper, Blitter nor CPU (in the absence of real FastRAM) could do anything while the display data is transferred, i.e. could only work during the blanking phase and that with even more graphic data to process. Such a display mode is not very useful for real applications (you may try a 256 color SuperHires mode on an AGA machine without FastRAM to get the idea)… So the benefit would not have justified the higher chip costs.&lt;/p&gt;&#xA;" OwnerUserId="4358" LastActivityDate="2017-06-07T12:32:20.903" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3060" PostTypeId="2" ParentId="3045" CreationDate="2017-06-07T13:44:11.553" Score="16" Body="&lt;p&gt;I just want to add to the existing answers that the &lt;kbd&gt;Restore&lt;/kbd&gt; key was a weird key.  It was on hardware side already completely independent of all the other keys.  It was attached to the NMI line of the processor, only proxied by a small circuit which let only rising flanks pass.  This circuit sometimes ignored a simple slow press and reacted much more reliably on a series of such flanks in quick succession.  Users could create these when hitting the key quite hard and fast and so letting the key bounce (that usage was typically rather loud and could have inspired the term &quot;hacker&quot; — just kidding).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;kbd&gt;Stop&lt;/kbd&gt; key (which was &lt;kbd&gt;Run&lt;/kbd&gt; when used with &lt;kbd&gt;Shift&lt;/kbd&gt;, hence it was often mis-called &lt;kbd&gt;Run Stop&lt;/kbd&gt;, but in fact a simple press on &lt;kbd&gt;Stop&lt;/kbd&gt; stopped a running program if that didn't take care to avoid this behavior) was a key of the normal keyboard matrix.  So the NMI routine jumped to by the &lt;kbd&gt;Restore&lt;/kbd&gt; key did a check first whether the &lt;kbd&gt;Stop&lt;/kbd&gt; key was being held and just returned otherwise.  Since this behavior could be changed, hacking on the &lt;kbd&gt;Restore&lt;/kbd&gt; key alone could create some special reaction in some special cases (in some games, for instance).&lt;/p&gt;&#xA;" OwnerUserId="5163" LastEditorUserId="5163" LastEditDate="2017-06-07T20:37:44.643" LastActivityDate="2017-06-07T20:37:44.643" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="3061" PostTypeId="1" AcceptedAnswerId="3062" CreationDate="2017-06-07T14:34:46.730" Score="15" ViewCount="2016" Body="&lt;p&gt;In DOS, the memory mapped IO base address for the CGA video buffer is &lt;code&gt;0xB8000&lt;/code&gt;. So when you write to &lt;code&gt;0xB8000&lt;/code&gt;, you are actually writing to a buffer in the CGA card itself and not to RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want to know is who decides what is the memory address that the CGA video buffer will be mapped to, does this information exists in the CGA card itself, and when DOS (or BIOS I don't know) scans to see what PCI devices exists on the PCI bus, it reads this information from the CGA card? Or is it only a convention to map the CGA video buffer to address &lt;code&gt;0xB8000&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="5161" LastActivityDate="2019-10-27T22:49:39.457" Title="Who decides what is the memory address that the CGA video buffer will be mapped to?" Tags="&lt;hardware&gt;&lt;ms-dos&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3062" PostTypeId="2" ParentId="3061" CreationDate="2017-06-07T14:41:29.183" Score="19" Body="&lt;p&gt;CGA pre-dates dynamic allocation of addresses in the PC world, by quite a few years. The video buffer appears at the area starting at 0xB8000 because the adapter responds to reads and writes at those addresses. Basically, when the CPU wants to read or write a value from or to a certain address, it places that address on its address bus (and asserts a given state using other pins); then any device which is also on the bus (memory, ROM, and cards on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Industry_Standard_Architecture&quot; rel=&quot;noreferrer&quot;&gt;ISA bus&lt;/a&gt;) can fulfill the request.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer to your question is, it’s the CGA which decides that its video buffer appears at 0xB8000.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-06-07T15:18:55.853" LastActivityDate="2017-06-07T15:18:55.853" CommentCount="17" ContentLicense="CC BY-SA 3.0" />
  <row Id="3063" PostTypeId="1" AcceptedAnswerId="3131" CreationDate="2017-06-07T17:22:35.897" Score="14" ViewCount="1587" Body="&lt;p&gt;My PC XT clone went up in smoke (literally) the other day.  I salvaged the half height 5.25&quot; double density floppy drive though and dropped it into an old 1.8 ghz AMD tower I had laying around.  Plan is to migrate whatever I can forward onto more modern media.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm able to boot off the drive (setup as A) and run DOS 3.2 successfully (as well as some self-booting old games).  Since I also have a 3.5&quot; drive B, I can move data to a slightly more common format, so basically a success.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's odd though, is if I boot the machine off the hard drive into Windows XP I have problems with the 5.25&quot; drive.  It knows it's there.  Drive B works perfectly normal.  Drive A though fails with General I/O error on access around 90% of the time.  On the rare occasion it works the first time after boot, it will stay working.  However, most times it won't work after booting.  Definitely Windows XP specific behaviour as DOS works perfect every time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any known issues with 360k drives with Windows XP?  If not, anyone know a registry key for adding extra delay for drives that are slow to start (my only working theory currently is that this drive may be a little slower to respond than expected).&lt;/p&gt;&#xA;" OwnerUserId="481" LastEditorUserId="481" LastEditDate="2017-06-07T22:14:10.370" LastActivityDate="2017-06-17T20:34:09.827" Title="Using a 360k (DD 5.25&quot;) floppy with Windows XP?" Tags="&lt;floppy-disk&gt;" AnswerCount="1" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3065" PostTypeId="1" AcceptedAnswerId="3066" CreationDate="2017-06-07T18:51:00.103" Score="5" ViewCount="706" Body="&lt;p&gt;I have installed MS-DOS 6.22 (released in 1994) on Virtual Box, and I want to know if Virtual Box is emulating an ISA bus or a PCI bus. The settings for my virtual machine don't show any information about the bus.&lt;/p&gt;&#xA;" OwnerUserId="5161" LastActivityDate="2017-06-07T21:02:50.107" Title="I have installed MS-DOS 6.22 on Virtual Box, do I have an ISA bus or a PCI bus?" Tags="&lt;hardware&gt;&lt;ms-dos&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3066" PostTypeId="2" ParentId="3065" CreationDate="2017-06-07T21:02:50.107" Score="13" Body="&lt;p&gt;If you went with VirtualBox's default settings for an MS-DOS system, you've got both: an Intel 440FX northbridge providing a PCI bus, and an Intel PIIX3 southbridge connected to that bus, providing an ISA bus.  The virtual video card (generic VESA-compatible) and PCnet-FAST III network card will be attached to the PCI bus.  The sound card (a virtualized SoundBlaster 16) will be attached to the ISA bus.  The hard drive and CD-ROM will be on a PIIX4 connected to the PCI bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Source: attaching a SysRescueCD to an MS-DOS VM and seeing what the diagnostics had to say.)&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2017-06-07T21:02:50.107" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3067" PostTypeId="2" ParentId="2996" CreationDate="2017-06-08T06:57:55.703" Score="3" Body="&lt;p&gt;According to Wikipedia, the ability to put CRT monitors on standby (&lt;a href=&quot;https://en.wikipedia.org/wiki/VESA_Display_Power_Management_Signaling&quot; rel=&quot;nofollow noreferrer&quot;&gt;VESA DPMS&lt;/a&gt;) arose from the US &lt;a href=&quot;https://en.wikipedia.org/wiki/Energy_Star&quot; rel=&quot;nofollow noreferrer&quot;&gt;Energy Star&lt;/a&gt; initiative of 1992. That matches my recollection, of computers in the 1993-6 timeframe booting with Energy Star logos.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2017-06-08T06:57:55.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3068" PostTypeId="2" ParentId="2988" CreationDate="2017-06-08T12:34:06.957" Score="3" Body="&lt;p&gt;The typical interface would have been a &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/www.computer.museum.uq.edu.au/pdf/EK-DZ110-TM-002%20DZ11%20Asynchronous%20Multiplexer%20Technical%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;DZ-11&lt;/a&gt; which would be an 8-line asynchronous multiplexer. This was a Unibus card that was connected via a ribbon cable to a backpanel. This had the familiar &lt;a href=&quot;https://en.wikipedia.org/wiki/RS-232&quot; rel=&quot;nofollow noreferrer&quot;&gt;V.24 25 pin connectors&lt;/a&gt; on the EIA/RS-232 version. The panel also was an anti-static filter. This may be the second component you were thinking of providing the connectivity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Local Area Terminal severs or LAT like the terminal server did exist but were not so widely used on PDP-11s (used more on VAXes).&lt;/p&gt;&#xA;" OwnerUserId="5164" LastActivityDate="2017-06-08T12:34:06.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3069" PostTypeId="1" CreationDate="2017-06-08T12:37:51.020" Score="21" ViewCount="1017" Body="&lt;p&gt;&quot;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/3055/whats-the-story-behind-the-name-x11&quot;&gt;What&amp;#39;s the story behind the name &amp;quot;X11&amp;quot;?&lt;/a&gt;&quot; showed up in the sidebar while I was browsing stackoverflow earlier and I noticed the question getting some high-signal answers, so I added &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/3055/whats-the-story-behind-the-name-x11?noredirect=1#comment7048_3055&quot;&gt;a comment asking how to get X10 working&lt;/a&gt;, something I've been wanting to do for some time. &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/3055/whats-the-story-behind-the-name-x11?noredirect=1#comment7052_3055&quot;&gt;I was recommended to open a new question&lt;/a&gt;, so here it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many years ago while browsing &lt;a href=&quot;http://xwinman.org&quot; rel=&quot;noreferrer&quot;&gt;xwinman.org&lt;/a&gt; I spied &quot;xwm&quot; at the bottom of &lt;a href=&quot;http://www.xwinman.org/others.php&quot; rel=&quot;noreferrer&quot;&gt;the full list of window managers&lt;/a&gt;. It's listed as&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;Possibly the first... this dates back to 1985, before X11 itself. The version in the archive is from X10R4.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Naturally, there are no screenshots anywhere. It probably looks really primitive, but I'm curious to fire it up nonetheless and play with it for fun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my question is, &lt;strong&gt;how can I get X10R4 running on an arbitrary modern machine running Linux (or Windows)?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naïvely speaking, I suspect emulation would likely play a key role.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I'm not aware of any practically-usable Solaris/SPARC emulators, and I understand that X10 was a SunOS/Solaris-era thing - &lt;a href=&quot;https://en.wikipedia.org/wiki/X_Window_System#Release_history&quot; rel=&quot;noreferrer&quot;&gt;the history section in Wikipedia's actually-decent article on X&lt;/a&gt; shows that X hit version 11 in 1987, 4 years before Linux was announced (&lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.os.minix/dlNtH7RRrGA&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; :P).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;X10R4 is noted as being from December 1986 - maybe there's (haha) an EGA UNIX for PCs from that era? (I'm woefully ignorant of UNIX history.) Or maybe... there's a PC-compatible VMS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;xwinman seems to have a bit of a permission glitch, but &lt;a href=&quot;http://web.archive.org/web/20160406123337/http://xwinman.org/archive/xwm/&quot; rel=&quot;noreferrer&quot;&gt;the xwm/ directory happily resides at the Web Archive&lt;/a&gt; (spoiler: it's a bare Apache index with a lone &lt;code&gt;xwm-X10R4.tar.gz&lt;/code&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had a cursory look online to see if &lt;em&gt;xwm&lt;/em&gt; was hiding in any browsable source repositories - and I found one! &lt;a href=&quot;http://www.retro11.de/ouxr/43bsd/usr/src/new/X/xwm/&quot; rel=&quot;noreferrer&quot;&gt;http://www.retro11.de/ouxr/43bsd/usr/src/new/X/xwm/&lt;/a&gt; (Try not to DoS it)&lt;/p&gt;&#xA;" OwnerUserId="3329" LastEditorUserId="357" LastEditDate="2017-06-08T18:21:54.170" LastActivityDate="2018-08-11T21:35:54.547" Title="What software stack could I use to get X10 (the version of X before X11) up and running on a modern system?" Tags="&lt;unix&gt;&lt;xwindow-x11&gt;&lt;xwindow-x10&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="3070" PostTypeId="1" CreationDate="2017-06-08T13:47:32.330" Score="5" ViewCount="252" Body="&lt;p&gt;It has long been the case that computer systems can signal serious faults using a series of beeps or flashes, where such faults occur too early in the boot process for them to be communicated in more conventional form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a long history of this: &lt;a href=&quot;https://www.intel.co.uk/content/www/uk/en/support/boards-and-kits/000005473.html&quot; rel=&quot;noreferrer&quot;&gt;modern PCs' motherboards can beep or flash their errors&lt;/a&gt;, and going back to 1986 the Sun 3/50 could indicate serious faults with the set of LEDs on its back panel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the first system to use such a method?  I'm interested in systems which had some kind of text interface as well; I'm aware that systems with only lights and switches could do little else.&lt;/p&gt;&#xA;" OwnerUserId="3480" LastActivityDate="2018-05-02T21:55:36.193" Title="What was the first system to use flash or beep codes as a diagnostic?" Tags="&lt;hardware&gt;" AnswerCount="2" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="3071" PostTypeId="2" ParentId="3069" CreationDate="2017-06-08T13:56:32.007" Score="11" Body="&lt;p&gt;Because of the fact that it is well-documented, widely-supported on modern systems, and emulates hardware that was an early adopter of the X Window System in the mid-1980s, I would suggest that a suitable software stack would use the &lt;a href=&quot;http://mess.org&quot; rel=&quot;noreferrer&quot;&gt;MAME/MESS&lt;/a&gt; emulator for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apollo/Domain&quot; rel=&quot;noreferrer&quot;&gt;Apollo DN workstations&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MESS emulator&lt;/li&gt;&#xA;&lt;li&gt;Domain/OS&lt;/li&gt;&#xA;&lt;li&gt;xwm&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are instructions on the MESS Wiki for setting up and using Domain/OS on an emulated Apollo DN workstation &lt;a href=&quot;http://www.mess.org/howto/apollo&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, which seem to include everything you would need. Then, you'd just need to build 'xwm' and run it as an early alternative to &lt;a href=&quot;https://en.wikipedia.org/wiki/Visual_User_Environment&quot; rel=&quot;noreferrer&quot;&gt;VUE&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-06-08T13:56:32.007" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3072" PostTypeId="1" CreationDate="2017-06-08T17:44:58.117" Score="13" ViewCount="491" Body="&lt;p&gt;Who owns the intellectual property regarding the Connection Machine and other products from Thinking Machines? I believe the remnants were bought by Sun, so possibly Oracle, but does anyone know?&lt;/p&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="621" LastEditDate="2017-06-08T18:21:44.820" LastActivityDate="2019-07-24T23:38:56.767" Title="Who owns the intellectual property of Thinking Machines today?" Tags="&lt;history&gt;" AnswerCount="0" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3073" PostTypeId="5" CreationDate="2017-06-08T18:28:06.607" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-06-08T18:28:06.607" LastActivityDate="2017-06-08T18:28:06.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3074" PostTypeId="4" CreationDate="2017-06-08T18:28:06.607" Score="0" Body="For questions concerning the X10 version of the X Window System, the predecessor of X11, and which was originally developed at MIT." OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-06-08T19:50:01.100" LastActivityDate="2017-06-08T19:50:01.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3075" PostTypeId="5" CreationDate="2017-06-08T18:29:08.957" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-06-08T18:29:08.957" LastActivityDate="2017-06-08T18:29:08.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3076" PostTypeId="4" CreationDate="2017-06-08T18:29:08.957" Score="0" Body="For questions concerning the X11 version of the X Window System, which was originally developed at MIT and is found on many present-day Linux and Unix systems." OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-06-08T19:49:29.763" LastActivityDate="2017-06-08T19:49:29.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3077" PostTypeId="2" ParentId="3069" CreationDate="2017-06-08T21:41:15.320" Score="6" Body="&lt;p&gt;According to the Wikipedia article, in 1985, X6 was released and DEC showed interest for its Ultrix workstations. In 1986, X10 was release, and in 1987, they switched to X11.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other sources (lost the Google results, sorry) put the switch to X11 in 1986.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be that as it may, there's a number of &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/bits/DEC/vax/ultrix/&quot; rel=&quot;noreferrer&quot;&gt;Ultrix tapes&lt;/a&gt; of various versions on Bitsavers. &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/bits/DEC/vax/ultrix/3.0/Ultrix_3.0_Description.txt&quot; rel=&quot;noreferrer&quot;&gt;Version 3.0&lt;/a&gt; already used X11. I tried to date the 2.X versions from the contents, but there seem to be contradictions: 2.3 mentions the year 1987, which seems to be after 3.0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, there are distributions files for X on the &quot;supported&quot; tapes for the 2.X versions. They mention neither &lt;code&gt;X10&lt;/code&gt; nor &lt;code&gt;X11&lt;/code&gt;, just &lt;code&gt;X&lt;/code&gt;, and I'm fairly sure that 2.0 is &lt;em&gt;not&lt;/em&gt; X11, though it may be earlier than X10.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'd try to install one or all of the 2.X versions on a simulated VAX using SIMH, so you can at least take a good look at the files. There seem to be &lt;em&gt;some&lt;/em&gt; source files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure about the state of graphics device support under SIMH, possibly that needs to be added (which may not be trivial).&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-06-08T21:41:15.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3078" PostTypeId="2" ParentId="3070" CreationDate="2017-06-08T21:46:39.957" Score="7" Body="&lt;p&gt;Going back to mainframes which had wide words and large panels of indicator lights, it was possible to display messages on CPU registers quite comfortably.&#xA;For example, on &lt;a href=&quot;https://en.wikipedia.org/wiki/BESM#BESM-6&quot; rel=&quot;noreferrer&quot;&gt;BESM-6&lt;/a&gt; the boot-up error messages, like &amp;quot;NO BT DSK&amp;quot; or &amp;quot;DISK ERR&amp;quot;, but in Russian, of course, were displayed using data cache registers consisting of 8 48-bit words (the second shelf from the bottom of the leftmost rack, with a large whitish rectangle of neon lights in the picture below). An OS even used scrolling to accommodate messages of arbitrary length.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BDimQ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BDimQ.jpg&quot; alt=&quot;BESM-6 CPU&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;That said, the question effectively asks &amp;quot;What was the first system with too few lights on the front panel to write letters or to scroll dots and dashes?&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-06-08T22:05:00.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3079" PostTypeId="1" CreationDate="2017-06-09T13:54:16.600" Score="6" ViewCount="483" Body="&lt;p&gt;I have a few collections of Atari 8-bit images that I've downloaded over the years, but only cherry picked into them. I'm at the point that I'd like to clean things up a bit and get rid of files that I don't need (e.g. MS-DOS &lt;code&gt;.COM&lt;/code&gt; files) and just focus on the disk, tape and cartridge images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've found a few random posts and FAQs on the internet, but none of them seem complete. I've found some that list &lt;code&gt;.dcm&lt;/code&gt;, &lt;code&gt;.atr&lt;/code&gt; and &lt;code&gt;.xfd&lt;/code&gt; but then fail to recognize &lt;code&gt;.md8&lt;/code&gt; for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does someone have a definitive list?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2017-06-10T03:40:04.157" Title="What are all the known file extensions for Atari 8-bit disk/tape/cartridge images?" Tags="&lt;emulation&gt;&lt;atari-800&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3080" PostTypeId="2" ParentId="3079" CreationDate="2017-06-09T14:19:18.730" Score="5" Body="&lt;p&gt;In practical terms, what really matters is which Atari 8-bit binary image formats and extensions are recognized by the popular Atari 8-bit emulators. Emulators (especially open-source ones that can share code amongst multiple projects) form the de facto &quot;specifications&quot; for binary image formats because it is almost always the emulator that is (or becomes) the primary client application to consume those binary image formats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on this practical association between the emulator support and what binary image formats and extensions are really viable, I offer this list, which comes directly from &lt;a href=&quot;http://www.virtualdub.org/altirra.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Altirra documentation&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Support for most popular 8-bit image file formats: ATR, ATX, ATZ, DCM, XFD, PRO, ARC, BAS, ROM, BIN, A52, CAS, SAP&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Additionally, Altirra documentation says the emulator supports Atari 8-bit executables with expected extensions of OBX and XEX.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-06-10T03:40:04.157" LastActivityDate="2017-06-10T03:40:04.157" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3081" PostTypeId="1" AcceptedAnswerId="3082" CreationDate="2017-06-09T18:51:24.043" Score="13" ViewCount="895" Body="&lt;p&gt;Since the Commodore 64 was often used with one or more 1541 drive, and these had CPUs which could run user code, it makes sense to me that these would have been expanded in the day, to have roomier memory, and for these to be used as a simple cluster computer, but I can't find anything suggesting it's been done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this known to have been done? Is there a technical reason why not?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="11916" LastEditDate="2019-11-23T12:51:45.470" LastActivityDate="2019-11-25T13:53:04.810" Title="Were 1541s upgraded with more RAM?" Tags="&lt;commodore-64&gt;&lt;disk-drive&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3082" PostTypeId="2" ParentId="3081" CreationDate="2017-06-09T22:01:51.383" Score="8" Body="&lt;p&gt;&lt;a href=&quot;http://www.tim-schuermann.de/c64/de/2003/dolphindos1.html&quot; rel=&quot;noreferrer&quot;&gt;DolphinDOS&lt;/a&gt; (&lt;a href=&quot;https://www.c64-wiki.de/wiki/Dolphin_DOS&quot; rel=&quot;noreferrer&quot;&gt;c64 wiki&lt;/a&gt;) adds 8KB of RAM to the 1541 and replaces the slow serial interface with a faster parallel one.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-06-09T22:01:51.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3083" PostTypeId="1" AcceptedAnswerId="3088" CreationDate="2017-06-10T00:28:13.477" Score="10" ViewCount="732" Body="&lt;p&gt;On UNIX, the progression of the most widespread data compression programs was as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(AFAIR: Pre System V) &lt;a href=&quot;http://www.unix.com/man-page/All/1/compact/&quot; rel=&quot;noreferrer&quot;&gt;compact&lt;/a&gt; (suffix .C), dynamic &lt;a href=&quot;https://en.wikipedia.org/wiki/Huffman_coding&quot; rel=&quot;noreferrer&quot;&gt;Huffman coding&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;(AFAIR: introduced in System V) &lt;a href=&quot;http://www.unix.com/man-page/All/1/pack/&quot; rel=&quot;noreferrer&quot;&gt;pack&lt;/a&gt; (suffix .z), static Huffman coding (could not work with streamed data)&lt;/li&gt;&#xA;&lt;li&gt;(AFAIR: appeared in a BSD distribution) &lt;a href=&quot;http://www.unix.com/man-page/all/1/compress/&quot; rel=&quot;noreferrer&quot;&gt;compress&lt;/a&gt; (suffix .Z), &lt;a href=&quot;https://en.wikipedia.org/wiki/LZW&quot; rel=&quot;noreferrer&quot;&gt;Lempel–Ziv–Welch&lt;/a&gt; algorithm&lt;/li&gt;&#xA;&lt;li&gt;(appeared everywhere) &lt;a href=&quot;http://www.unix.com/man-page/all/1/gzip&quot; rel=&quot;noreferrer&quot;&gt;gzip&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/DEFLATE&quot; rel=&quot;noreferrer&quot;&gt;DEFLATE&lt;/a&gt; algorithm from PKZIP&lt;/li&gt;&#xA;&lt;li&gt;... and the rest is modern history&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What is the story of data compression tools - with or without archiving capabilities - on personal computers, before &lt;a href=&quot;https://en.wikipedia.org/wiki/ARC_%28file_format%29#Lawsuits&quot; rel=&quot;noreferrer&quot;&gt;System Enhancement Associates and PKWARE, Inc.&lt;/a&gt; programs appeared in 1985/1986?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: Ignoring as trivial those that were only capable of run-length encoding.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="357" LastEditDate="2017-07-05T12:46:06.167" LastActivityDate="2017-07-05T12:46:06.167" Title="What is the history of data compression tools on personal computers?" Tags="&lt;history&gt;&lt;data-preservation&gt;&lt;storage&gt;&lt;utilities&gt;&lt;compression&gt;" AnswerCount="1" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3084" PostTypeId="2" ParentId="3061" CreationDate="2017-06-10T01:13:44.753" Score="5" Body="&lt;p&gt;CGA cards provide their own RAM to the address space. This memory lies in the hole between 640KB and 1MB. By convention, it was stated that the video memory (for CGA cards) would begin at segment B000 if the CGA card is being connected to a B/W monitor, and B800 if connected to a colour monitor. This way, two CGA cards would coexist in the same system, providing a means of multimonitor environment (text only for the monochrome monitor and graphics for the colour monitor in a typical CAD environment).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it seems that the base memory location can be changed somehow. Actually, it is more flexible than that. In text video modes, scrolling text is a fast operation not because the CPU shifts blocks of memory to make room for new lines, but because the CPU changes the starting address of the video memory so that the user sees a new page of video memory. There were 4 pages of video memory for text on a basic 16KB CGA card using 80 columns mode, and 8 pages if using 40 columns mode. This was possible because the CGA (and subsequent compatible graphics cards) used the well known CRTC controller Motorola 6845, which provides registers to specify where in memory the video data should begin.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-06-10T01:13:44.753" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3085" PostTypeId="1" AcceptedAnswerId="3089" CreationDate="2017-06-10T15:10:03.190" Score="11" ViewCount="682" Body="&lt;p&gt;The BBC Master 128 has 3 empty expansion ROM sockets and 2 cartridge slots, which seems like a lot of potential. I have already discovered that it is common to add an expansion ROM to support a filing system, but that still leaves 4 ROM+Cart sockets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that &quot;Sideways ROMs&quot; added via these sockets provides bank-switchable 16KB space that could be used for any sort of ROM software. What actual software was made, besides filing systems? What other expansions/peripherals, besides just &quot;Sideways ROM&quot;, has been added to the BBC using the cartridge slots?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: I'm not looking for an exhaustive list of products. &lt;em&gt;If there are a lot of uses&lt;/em&gt;, then just a sampling of the variety available would be great.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-06-12T14:33:38.533" Title="What kinds of expansion ROMs and cartridges are available for the BBC Micro?" Tags="&lt;hardware&gt;&lt;bbc-micro&gt;&lt;new-hardware-adaptation&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3086" PostTypeId="2" ParentId="3085" CreationDate="2017-06-10T15:30:18.667" Score="3" Body="&lt;p&gt;I used to keep my own cartridge to use on the 10-or-so BBC Masters we had at work. I'd plug it in when I started work on one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was just my favourites...Wordwise (WP) and Exmon (debugger/disassembler), I seem to remember.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastActivityDate="2017-06-10T15:30:18.667" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3087" PostTypeId="2" ParentId="3085" CreationDate="2017-06-11T08:29:43.573" Score="8" Body="&lt;p&gt;Some popular expansion pack features:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Programming languages (e.g. BASIC, D-DOS)&lt;/li&gt;&#xA;&lt;li&gt;File managers&lt;/li&gt;&#xA;&lt;li&gt;Office suites (e.g. View, Inter-Chart, Wordwise Plus)&lt;/li&gt;&#xA;&lt;li&gt;Hardware drivers (e.g. Epson Printmaster)&lt;/li&gt;&#xA;&lt;li&gt;Development Utilities&lt;/li&gt;&#xA;&lt;li&gt;Emulators&lt;/li&gt;&#xA;&lt;li&gt;Modems (e.g. Master Modem)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Further reading:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/ROM.html&quot; rel=&quot;noreferrer&quot;&gt;Chris' Acorns: BBC and Master ROMs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-06-11T08:29:43.573" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3088" PostTypeId="2" ParentId="3083" CreationDate="2017-06-11T09:45:43.240" Score="10" Body="&lt;p&gt;The story is told in this &lt;a href=&quot;https://groups.google.com/forum/message/raw?msg=comp.sys.ibm.pc/UckorKDTYvk/r-f0C2G_WnAJ&quot; rel=&quot;noreferrer&quot;&gt;1988 usenet post&lt;/a&gt; by Paul Homchick:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Some time went by and it was a CP/M world, and diskettes were bigger. &#xA;  In 1981 Richard Greenlaw released SQ and USQ, based on Huffman&#xA;  encoding and written in BDS C.  This was the first popular compression&#xA;  technique.  Greenlaw gave away the binaries and source code.&#xA;  &amp;lt;...&gt;&#xA;  By 1983 it was getting hard to ignore the IBM PC as programs which&#xA;  weren't written in BASIC started appearing.  SQ/USQ was ported by&#xA;  Chuck Forsberg from unix C-source code.  LU was ported to the PC by&#xA;  Tom Jennings, from a unix implementation named &quot;lar&quot; (for Library&#xA;  ARchive).  Jennings and Forsberg gave these programs away.  &amp;lt;...&gt; The&#xA;  next advance came in 1985 when Thom Henderson of System Enhancements&#xA;  Associates (SEA), released his ARC.EXE program.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Indeed, the CP/M &lt;a href=&quot;http://www.classiccmp.org/cpmarchives/cpm/mirrors/oak.oakland.edu/pub/cpm/squsq/&quot; rel=&quot;noreferrer&quot;&gt;source code for SQ&lt;/a&gt; is time-stamped 1983.&lt;/p&gt;&#xA;" OwnerUserId="87" LastEditorUserId="2126" LastEditDate="2017-06-11T17:04:35.063" LastActivityDate="2017-06-11T17:04:35.063" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3089" PostTypeId="2" ParentId="3085" CreationDate="2017-06-11T12:58:06.927" Score="5" Body="&lt;p&gt;The cartridge port first appeared on the Electron's Plus One expansion; those on the Master vary the meaning of a few pins but are mostly compatible — ROMs should work without modification (subject to the software, of course), but hardware is likely to be machine specific. The full pinout, including documentation of the machine differences, is contained in this &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/Acorn/AN/035.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Acorn application note&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A hypothetical Master cartridge gets enough information to expose registers, receive and provide audio, track composite sync and provide input to the CRTC's light-pen pin (which causes current output position to be latched).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, there wasn't anywhere near as much hardware available as for the Electron as I recall. So, mostly it was the defined software ROM types (as per Chapter 17 of &lt;a href=&quot;http://www.msknight.com/bbc/manuals/new-advanced-user-guide.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the New Advanced User Guide&lt;/a&gt;, but possibly more easily digested from the &lt;a href=&quot;http://www.pa3byb.nl/images/PA3BYB-basis/Handleidingen/Acorn_Electron/Advance_user_guide_Acorn_electron.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Electron Advanced User Guide&lt;/a&gt; because the same topic is stretched to four chapters, 8–11, and that PDF has been OCRd):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;language ROMs — anything that provides an environment: Forth, Logo, BCPL and Lisp being popular options that were actual languages but also View (the word processor), ViewSheet (the spreadsheet), and other traditional applications; &lt;/li&gt;&#xA;&lt;li&gt;services ROMs — anything that provides transient functionality: filling systems mainly; and&lt;/li&gt;&#xA;&lt;li&gt;serially accessed ROMs — these approximately contain the byte image of a tape, which the OS then loads just as if it were a [fast] tape. Not that useful on a Master where the usual storage is fast anyway but you could use the Electron cartridges, which generally are the early Acornsoft games: Hopper, Starship Command, etc. Likely Master compatible, as they just select a mode and then go.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-06-12T14:33:38.533" LastActivityDate="2017-06-12T14:33:38.533" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3090" PostTypeId="1" AcceptedAnswerId="7052" CreationDate="2017-06-11T16:43:19.063" Score="20" ViewCount="6057" Body="&lt;p&gt;I'm working on an alternate history story in which the protagonists, Silicon Valley computer entrepreneurs, are trying to release a graphical workstation in 1980, with the capability of displaying 640x480, 60 Hz noninterlaced, 64 colors. (Basically in the ballpark of VGA, which was released several years later OTL.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The electronics side of this would be doable, albeit of course more expensive  in terms of memory and bandwidth than a typical display at that time. The key component will be the monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How much would a picture tube capable of such a display cost at that time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Who would be the most likely supplier capable of providing it? One of the Japanese manufacturers such as Sony or Toshiba?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Thanks to everyone who has provided references confirming the feasibility of the proposed display. More than one person has correctly commented that the electronics side would be very challenging the way I phrased it. To clarify, the intent is that the machine will have two modes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;640x480 monochrome.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;320x240 16 colors from a palette of at least 64, maybe 512 or even 4096 if the required DACs can be made cheap enough.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If I'm calculating it correctly, both of these require 38K of video RAM, which by 1980 standards is generous but within the bounds of practicality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a bit like the Atari ST, released in the mid eighties, where you had a similar choice - but you had to choose at the time you bought the machine. You couldn't switch on the fly. To my way of thinking, this is a really big disadvantage, and if it comes to it, I think it's worth paying four figures for a picture tube that can do both high resolution and color, even if you'll only use one of those capabilities at any given moment.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="278" LastEditDate="2017-06-14T06:52:57.957" LastActivityDate="2020-07-03T14:29:56.420" Title="640x480 color display in 1980" Tags="&lt;hardware&gt;&lt;graphics&gt;&lt;display&gt;" AnswerCount="11" CommentCount="21" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3091" PostTypeId="2" ParentId="3090" CreationDate="2017-06-11T18:37:39.970" Score="10" Body="&lt;p&gt;CRT in IBM 3279 terminal was capable of 640x480 at 72 Hz (p. 85 of maint. manual) in 1980.  Relevant IBM SJ article (&lt;a href=&quot;http://domino.research.ibm.com/tchjr/journalindex.nsf/0b9bc46ed06cbac1852565e6006fe1a0/a8cbab223a731a7c85256bfa0067f925!OpenDocument&quot; rel=&quot;noreferrer&quot;&gt;&quot;Digital System for Convergence of Three-Beam High-Resolution Color Data Displays&quot;&lt;/a&gt;) is paywalled, and &lt;a href=&quot;http://manx-docs.org/details.php/19,21752&quot; rel=&quot;noreferrer&quot;&gt;maintenance manual&lt;/a&gt; doesn't seem to mention CRT manufacturer; terminal itself sold over $1000 (via &lt;a href=&quot;http://terminals-wiki.org/wiki/index.php/IBM_3279&quot; rel=&quot;noreferrer&quot;&gt;http://terminals-wiki.org/wiki/index.php/IBM_3279&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another (also paywalled) article that could help you: &lt;a href=&quot;http://dl.acm.org/citation.cfm?id=2278568&quot; rel=&quot;noreferrer&quot;&gt;A New High-Resolution Trinitron Color Picture Tube for Display Application.&lt;/a&gt; (IEEE Transactions on Consumer Electronics, Volume 26 Issue 3, August 1980).&lt;/p&gt;&#xA;" OwnerUserId="87" LastActivityDate="2017-06-11T18:37:39.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3092" PostTypeId="2" ParentId="3090" CreationDate="2017-06-11T22:01:05.457" Score="15" Body="&lt;p&gt;Well Cromenco have something on page 2 of this issue of byte. &lt;a href=&quot;https://archive.org/stream/byte-magazine-1980-11/1980_11_BYTE_05-11_High-Resolution_Graphics#page/n1/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/stream/byte-magazine-1980-11/1980_11_BYTE_05-11_High-Resolution_Graphics#page/n1/mode/2up&lt;/a&gt; 756x482 in 16 colors, and on page 70ish there's an article which talks about max raster screen resolutions of 1024x1024.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also worth looking at is the HP9845C with a cost of $39,500 according to Wikipedia and a screen resolution of 560x455.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2017-06-11T22:01:05.457" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3093" PostTypeId="2" ParentId="2770" CreationDate="2017-06-11T22:14:58.570" Score="2" Body="&lt;p&gt;This applies more to microcontrollers and EPROMs than microprocessors but...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Devices containing EPROM were erased by exposing them to ultra-violet light for 20-odd minutes. All of the windowed UV-erasable devices I handled were always ceramic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We had equivalent but non-EPROM parts for some of them and they were plastic, such as the plastic 8035 vs ceramic 8748/8749s. So I presumed the ceramic was to withstand UV damage that the plastic parts couldn't.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastActivityDate="2017-06-11T22:14:58.570" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3094" PostTypeId="2" ParentId="3090" CreationDate="2017-06-12T00:47:28.370" Score="11" Body="&lt;p&gt;You probably should cut down the resolution to 512x512. I actually worked with a graphics processing system (Earthviews by DBA Systems with the added AIMS (Advanced Image Management System) software). It was designed in the late 1970s, which is just before the time frame you mention. It had two monitors.  One was the primary, a serial terminal used for control and text output, and the satellite imagery was displayed on the 512x512 by 16k color monitor, interlaced. It had 16-bit/pixel graphics memory with two bits used for overlay. It used a DEC LSI 11/73 CPU and had 128 kwords program memory.  (DEC spec'ed everything for this series in 16-bit words rather than 8-bit bytes, to match the CPU registers.)  IIRC, there were four, large graphics memory cards with 16 kbytes on each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure 640x480 @ 60 Hz non-interlaced color monitors were available yet. But maybe this is what your engineers were developing.  1980 was still the analog monitor era, which actually helps in color depth.  The monitor wouldn't care whether the video DAC(s) were being fed 6-, 8-, or 24-bit color.  Separate RGB signal jacks were common (with separate video DACs), so your 64-color display is very conservative. That would be the R, G, and B DACs being fed 2-bits/pixel/ each. You might as well go for 18-bit &quot;true color&quot; (oh, marketing! ), with 6-bits/pixel/color.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-06-13T11:29:15.593" LastActivityDate="2017-06-13T11:29:15.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3095" PostTypeId="2" ParentId="3090" CreationDate="2017-06-12T09:13:15.593" Score="7" Body="&lt;p&gt;If you target any of the following resolutions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;640 x 480i 60Hz&lt;/li&gt;&#xA;&lt;li&gt;640 x 240 30Hz (yes that's weird but you might find a use for it)&lt;/li&gt;&#xA;&lt;li&gt;320 x 240 30Hz&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;...then you don't need a fancy monitor, you can use any NTSC colour TV. Customers will love the convenience of that. Of course you'd have to switch it to 50/25Hz to sell it in Europe/Australia where they had PAL TVs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most computers of the era didn't have enough RAM to do much with bitmaps that large, but people did come up with all kinds of clever ways in the 70s and 80s to use displays that had more pixels than their video cards (and sometimes their entire systems) had bytes. Rendering images one line at a time while the previous line is drawn so the computer never has to remember more than one or two lines, composing images out of pieces stored in a font buffer, etc.&lt;/p&gt;&#xA;" OwnerUserId="4163" LastActivityDate="2017-06-12T09:13:15.593" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="3096" PostTypeId="1" AcceptedAnswerId="3099" CreationDate="2017-06-12T15:19:18.447" Score="9" ViewCount="3238" Body="&lt;p&gt;During the 70s and 80s there were a number of books about how to write your own games for 8-bit computers, usually in BASIC. Three examples of these books are &lt;em&gt;How to Create Adventure Games&lt;/em&gt; by Christopher Lampton, &lt;em&gt;Golden Flutes and Greate Escapes&lt;/em&gt; by Delton T. Horn, and &lt;a href=&quot;http://www.atariarchives.org/adventure/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Creating Adventure Games On Your Computer&lt;/a&gt; by Tim Hartnell. What books and approaches did people take to writing adventure/RPG games?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to write a game myself since I'm a much better programmer now than I was when I learned BASIC on my Apple II. My goal is to write something that runs on real hardware similar to what was written at the time. For an adventure game 8-bit hardware isn't that much of a constraint since speed and graphics are much less important.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What books are available to help me do so?&lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="278" LastEditDate="2017-06-13T18:16:02.120" LastActivityDate="2017-06-13T18:16:02.120" Title="What &quot;Write your own RPG/Adventure game&quot; books were available for 8-bit computers?" Tags="&lt;programming&gt;&lt;gaming&gt;&lt;basic&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="4" ClosedDate="2017-06-13T18:11:44.710" ContentLicense="CC BY-SA 3.0" />
  <row Id="3097" PostTypeId="2" ParentId="3090" CreationDate="2017-06-12T15:56:17.447" Score="2" Body="&lt;p&gt;It's a few years later (1985 for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Original_Chip_Set&quot; rel=&quot;nofollow noreferrer&quot;&gt;Original Chipset&lt;/a&gt;) but Amigas could display 640x256 or 640x512 interlaced on a normal PAL/NTSC TV (per Robyn's answer). Later ones managed SVGA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You needed a pretty clear TV to actually see any detail (and interlaced flickered like hell) but it's not outside the realms of 1980 tech.&lt;/p&gt;&#xA;" OwnerUserId="4432" LastActivityDate="2017-06-12T15:56:17.447" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3098" PostTypeId="2" ParentId="3096" CreationDate="2017-06-12T16:03:53.833" Score="8" Body="&lt;p&gt;Fortunately, for all of us, Jimmy Maher, &lt;a href=&quot;http://www.filfre.net&quot; rel=&quot;nofollow noreferrer&quot;&gt;aka The Digital Antiquarian&lt;/a&gt;, has been tackling your question for years and in extravagant detail and style. I would urge you to take a look at Jimmy's &lt;a href=&quot;http://www.filfre.net/the-digital-antiquarian-e-book-library/&quot; rel=&quot;nofollow noreferrer&quot;&gt;eBook Library&lt;/a&gt;, beginning with the year(s) that most directly relate to the game-play experiences you hope to recreate. All of the eBooks are broken up by year, and the publications have progressed in roughly chronological order. The latest publications are late 1980s/early 1990s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For each game that has been tackled, the publications tend to do a thorough and deep-dive into game-play innovation, technology, platform, and business climate. It is all quite compelling to read, and should address your rather broad question far, far, better than can be done with a &quot;pithy&quot; answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to all the great writing on the 1980s Adventure and CRPG games, you might want to pay particular attention to this article about the Adventure Game Toolkit - &lt;a href=&quot;http://www.filfre.net/2016/08/agt/&quot; rel=&quot;nofollow noreferrer&quot;&gt;AGT&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best of Luck in your programming!&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-06-13T11:10:37.660" LastActivityDate="2017-06-13T11:10:37.660" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3099" PostTypeId="2" ParentId="3096" CreationDate="2017-06-12T20:27:30.750" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What books and approaches did people take to writing adventure/RPG games?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Alright, you asked for history. Here we go. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically (sic), one would start with some of the books/magazines that had listings of games in them. All kind of games, not only adventure/RPG. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you'd sit down and type those listings in. It took a while, you made errors, but at the end you'd have typed (and thereby also internalized) the whole source code. In about 75-90% of cases the game, then, even worked and you didn't have to go through all of it, multiple times, to find that one typo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, they went and changed it to hex encoded strings with checksums, especially if machine code was involved, but at that time there was not much of anything to learn anymore (the magazines I had tended to include the assembler files as well, IIRC, so you could at least try to follow what happened).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a while, you would dabble in your first own games or other programs. There were printed books about all parts of the 8-bit computers (BASIC, assembler, graphics/sound chips, overall system architecture, the actual hardware, and so on) in technical reference formats - what an engineer would expect; very detailled but you had to kind of figure out how to use all of it. Magazines regularly had great series where they sat down and walked you through major components and how to program them (e.g., video processors, sound etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Magazines also were a great source for specific components of specific game types - e.g., one could expect a series about data management in a RPG, how to parse the crude text languages in an adventure, or how to store the &quot;rooms&quot; and such. Most of these was concerned not with advanced things like OOP (what we would have today), but how to use shortcut after shortcut to implement it in the very limited space and with no particular programming libraries in existance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there was the demo scene, which gave you ideas about what the upper limit was regarding video and sound effects. The demos usually did not come with source code, so you had to use a disassembler. The demo code was also in my experience not much use for anything else as it usually relied on very exact timings (the code was timed to run in sync with the actual monitor being built up not only frame-by-frame but line-by-line or even pixel-by-pixel, often controlling the &quot;actual&quot; color of the electron beam more or less directly without even bothering to store any image in video RAM, which would have been much too slow to do it for every refresh cycle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a while, you just sat down and &quot;did it&quot;. The complexities then started to arise when RAM got full - that happened rather quickly with BASIC; you had to start paging 256-byte chunks of RAM in and out and whatnot. Assembler was an option, but it got overwhelming pretty quickly - there were none of the comfortable toolchains around; having a text file &lt;em&gt;editor&lt;/em&gt; (instead of something that used line numbers) was not necessarily standard. There were fables about wild guys using PASCAL or even C dialects on 8-bits, but I'd guess something like 99.999% of all games were either straight BASIC (maybe precompiled/obfuscated), assembler or a mixture. Wikipedia says that Ultima 1 was BASIC and Ultima 2 and on were 100% assembler. That should also explain why Richard Garriott made it into space &lt;em&gt;and&lt;/em&gt; is a half maniac. :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that even the most complex of games back then were incredibly simple by todays standard. Of the thousands of 8-bit games, there are a handful of exceptions (Ultima, Elite ...). If one of the other games was great, then due to the artful execution (game idea, graphics, sound...) within the limits imposed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, all hardware components of an 8-bit computer are vastly, vastly simpler than even the most mediocre PC you have today. There is really almost nothing to it. Sit any 15-year-old down with a lot of curiosity and a heap of books and a lot of time, and he or she can easily grasp everything there ever is to know about them. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I want to write a game myself since I'm a much better programmer now than I was when I learned BASIC on my Apple II.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I did not write such a complex game as Ultima or Elite myself, obviously, but I did dabble a bit; I recall breaking the BASIC RAM limit plenty of times, and having incredible fun (sic) in assembler, frequently freezing the machine on which I was developing while running the program under development, occasionally losing all source code, and so on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'd say the biggest challenge aside from physical limitations was to keep track of all the data without growing crazy, while writing the code in assembler language from scratch, with no meaningful toolchains, debuggers and whatnot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you edit on modern machines, cross-compiling into that environment, with all kinds of resources at your fingertips (see the links in other answers), maybe even a useful debugger, you have  a &lt;em&gt;huge&lt;/em&gt; benefit already. From there on, I'd say it's the same as learning any new environment these days - figure out how to do stuff step by step, and then simply start doing it.&lt;/p&gt;&#xA;" OwnerUserId="4235" LastEditorUserId="4235" LastEditDate="2017-06-13T13:26:02.717" LastActivityDate="2017-06-13T13:26:02.717" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3100" PostTypeId="2" ParentId="3096" CreationDate="2017-06-13T07:01:58.307" Score="4" Body="&lt;p&gt;Not sure if this should be a comment or an answer, but here's a book that I, personally, remember reading (in its Hungarian translation) in the early '90s (it was way too late by then of course), and its full text is available on Archive.org: enter &lt;a href=&quot;https://archive.org/details/Writing_BASIC_Adventure_Programs_for_the_TRS-80_1982_Frank_DaCosta&quot; rel=&quot;nofollow noreferrer&quot;&gt;Writing BASIC Adventure Programs For The TRS-80&lt;/a&gt; by Frank DaCosta. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a very well-thought-out book for beginners, since it includes material on the technical aspects (including general, introductory-level programming advice) as well as text adventure game design tips.&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2017-06-13T07:01:58.307" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3101" PostTypeId="2" ParentId="3090" CreationDate="2017-06-13T20:17:54.920" Score="9" Body="&lt;p&gt;The monitor would be relatively easy to create.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Just make the dot mask small enough, analog tubes can handle everything else – &lt;a href=&quot;/posts/comments/7114&quot;&gt;dirkt&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The problem is the sheer amount of circuitry required to generate this much graphics, or rather the price thereof.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Hercules monochrome graphics card came out in 1982 and was 720×348 for $500. – &lt;a href=&quot;/posts/comments/7114&quot;&gt;dirkt&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;Tektronix 4027 Raster Graphics Terminal, 640x350 pixels, pseudocolor, ~$9000 in 1978. – &lt;a href=&quot;/posts/comments/7117&quot;&gt;tofro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;Intergraph monochrome raster graphics terminal, 1280x1024(!), 1980, &gt;$10000(?). – &lt;a href=&quot;/posts/comments/7117&quot;&gt;tofro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Apollo DN300 (earlier than 1983, $10.000) used 2 68000 CPUs and had a 17 inch 1024x800 monochrome display. – &lt;a href=&quot;/posts/comments/7116&quot;&gt;dirkt&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Apollo DN600 (earlier than 1982, $60.000) had a 19 inch 1024x1024 or 512x512 color display with 4/8/24 planes. – &lt;a href=&quot;/posts/comments/7116&quot;&gt;dirkt&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The first and second are the only ones that come &lt;em&gt;close&lt;/em&gt; to the four-figure price that you wanted. As the Tektronix 4027 has a &quot;pseudocolour&quot; display (a term I &lt;a href=&quot;http://scholar.uwindsor.ca/cgi/viewcontent.cgi?article=1717&amp;amp;context=etd&quot; rel=&quot;noreferrer&quot;&gt;don't understand&lt;/a&gt; the &lt;a href=&quot;https://www.google.de/patents/WO1988007249A1?cl=en&quot; rel=&quot;noreferrer&quot;&gt;meaning of&lt;/a&gt;), I don't want to work with it - beside the fact that there is not much room for development created by the $9000 price.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Hercules card currently processes 250560 monochrome pixels (31320 bytes) per frame at 50Hz,&lt;sup&gt;&lt;a href=&quot;https://web.archive.org/web/20070202201848/http://www.adm-electronic.de/pdf/MNL115_ita_eng.pdf&quot; rel=&quot;noreferrer&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; for a total of 1566000 bytes per second. It needs to process 307200 16-bit colour pixels (minimum of 153600 bytes) per frame at 60Hz, for a total of 9216000 bytes per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is ignoring the complexity involved in a graphics card that supports both monochrome and colour - this revision of the answer will assume that Handwavium Corp&amp;trade; have solved this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RAM is an issue. 9216000 bytes per second is &lt;em&gt;massive&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You probably couldn't use anything off the shelf, except 16Kx1 DRAM chips. It would probably the size of a PC motherboard just for the graphics. – &lt;a href=&quot;/posts/comments/7118&quot;&gt;Ross Ridge&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;DRAM in 1980 had speeds of 13MiB per second.&lt;sup&gt;&lt;a href=&quot;https://www.ll.mit.edu/HPEC/agendas/proc04/invited/patterson_keynote.pdf#page=6&quot; rel=&quot;noreferrer&quot; title=&quot;1980 v. 2000 DRAM&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; The graphics card would need to use 9000KiB per second. This is over two-thirds of the available RAM time - there is not a &lt;em&gt;chance&lt;/em&gt; that the CPU can render even a hard-coded screen in that time. In order to make this work, the CPU would have to be able to access the non-graphics RAM much more often than this via some sort of addressing filter, but the code running on the CPU would have to be trusted to get its timing right much, much more than in other machines as it wouldn't be able to automatically wait for the video memory to be free. Alternatively, there could be a separate system for addressing video memory, but this would mean that standard processors could not be used, bringing up the price &lt;em&gt;massively&lt;/em&gt;. The video data could be interleaved between different RAM chips and their cycles could be offset for the rendering period, allowing the graphics card to effectively double, triple or quadruple the amount of RAM bandwidth available to it; this would require substantial modifications to the RAM addressing system and likely &lt;em&gt;very&lt;/em&gt; substantial modifications to the graphics card, meaning that we might as well design our own from scratch. I don't know enough to say how feasible this last option is, but as far as I know it has never been done (which says a lot).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The problem parallelises so easily that total cost and the feasibility of putting anything interesting onto the screen in a sensible amount of time are the main burdens, surely? – &lt;a href=&quot;/posts/comments/7145&quot;&gt;Tommy&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is another option. In 1980, IBM Research invented Video RAM: a relatively cheap RAM that allowed a graphics card to read from it at the same time as the CPU was performing I/O on it, completely asynchronously.&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Video_RAM_(dual-ported_DRAM)&quot; rel=&quot;noreferrer&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; There &lt;em&gt;is&lt;/em&gt; a catch, however. It wasn't patented until 1985. This is a really, really big problem, as its existence wouldn't have been publicly accessible knowledge until the patent application was filed in 1982.&lt;sup&gt;&lt;a href=&quot;https://www.google.com/patents/US4541075&quot; rel=&quot;noreferrer&quot; title=&quot;VRAM Patent&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; In order to make use of this, you would have had to have been owed a &lt;em&gt;significant&lt;/em&gt; favour by somebody &lt;em&gt;very&lt;/em&gt; high up in IBM. As an author you could arrange this, but in reality this would probably never have happened - the technology was just too valuable.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The first commercial use of VRAM was in a high-resolution graphics adapter introduced in 1986 by IBM for the PC/RT system, which set a new standard for graphics displays. – &lt;a href=&quot;https://en.wikipedia.org/wiki/Video_RAM_(dual-ported_DRAM)&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are still other problems left to solve. A back-of-the-envelope calculations says that Austin Semiconductor Inc.'s 70ns VRAM could perform a maximum of 7.3 DRAM Mibioperations/sec with 16-bit words,&lt;sup&gt;&lt;a href=&quot;http://web.archive.org/web/20110707190823/http://www.austinsemiconductor.com/datasheet/Austin-Semiconductor-Datasheet-SM55161A.PDF&quot; rel=&quot;noreferrer&quot; title=&quot;Military-grade VRAM specifications&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt; giving a maximum of 14.7MiB per second - only just enough to write a hard-coded graphic to the video memory per frame. This is certainly not enough leeway to &lt;em&gt;generate&lt;/em&gt; a graphical display.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Add enough parallel CPU power or some sort of acceleration to draw stuff fast enough at 1980s CPU speeds (even the VGA in 1987 had to use special architecture), and you have what makes the price/performance ratio a bad sell. – &lt;a href=&quot;/posts/comments/7114&quot;&gt;dirkt&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In order to do this, you will need at least two CPUs - one for each half of the screen. Each graphical CPU will have to have separate addressing systems for separate VRAM chips, with a time-shared RAM chip that they can use to communicate. Luckily, Handwavium Corp&amp;trade; have provided a temporary solution to this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, there are &lt;em&gt;still&lt;/em&gt; problems with the graphics card.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Graphics in personal computers in 1980 were constrained by various limitations because of the difficulties involved. The IBM PC's CGA card, released in 1981, was a full length card, too big to fit in most cases today. It only supported 320x200 with 4 colours (or 640x200 with 2) and from a limited palette. – &lt;a href=&quot;/posts/comments/7118&quot;&gt;Ross Ridge&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Popular television protocols NTSC and PAL transmitted the colour as an analogue signal with a brightness value (for compatibility with monochrome televisions) and colour values. To produce these, DACs needed to be used.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;DACs were a limiting factor on a lot of technology in the 80's. The 28 MHz RAMDAC in IBM's 1987 VGA card only supported 6-bit colour. Some early CD players, which only needed 44.1 KHz DACs, only used 14-bit DACs to save money, and sometimes only one shared between both left and right channels. You only need 2-bit DACs but you need them to work at 25 MHz, which I suspect wasn't available as a cheap single chip solution in 1980. Still very much possible, just not necessarily cheap and easy. – &lt;a href=&quot;/posts/comments/7124&quot;&gt;Ross Ridge&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, this is a workstation, not a home computer - a dedicated monitor can be used instead.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm not sure the DAC is such a problem for 6-bit colour; with an RGB monitor there's no need ever to intermingle the channels so you're talking about two-bit colour, times three. Resistor ladders would do. If necessary, give the computer separate graphics cards for R, G and B with fixed timings and a shared reset line. – &lt;a href=&quot;/posts/comments/7145&quot;&gt;Tommy&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This system would be possible to create using the technology existing in 1980. However, it would be difficult to do so without going above the $10000 mark.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-06-13T20:17:54.920" CommentCount="17" ContentLicense="CC BY-SA 3.0" />
  <row Id="3102" PostTypeId="2" ParentId="3016" CreationDate="2017-06-13T22:15:54.503" Score="7" Body="&lt;p&gt;If the contents of the Scott Adams' adventure cartridges for the VIC-20 are loaded into the same addresses on the Commodore 64 and executed, the games will behave on the C64 just as they do on the VIC-20 except that screen formatting will be a little wonky.  If exactly 22 characters precede a line break, the next line will appear appended to the first (since the C64 has a wider screen).  Changing one byte in the code will fix that.  I don't remember the address, but I think the old value was 22 and the corrected value will be 40.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-06-13T22:15:54.503" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3103" PostTypeId="2" ParentId="3090" CreationDate="2017-06-14T16:01:21.327" Score="9" Body="&lt;p&gt;Television production facilities had equipment with resolution even better than described.  The Doctor Who story &quot;The Leisure Hive&quot;, broadcast in August 1980, made use of a video processing system called Quantel which could import and export full video-quality images and process them in arbitrary fashion.  I don't know whether the system could operate in anything resembling real time, or if it needed to capture individual frames from an analogue video disk, process them, and then later write them back to an analogue video disk, but could certainly achieve the described level of resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Almost any desired level of graphical resolution can be achieved by adding parallel RAM banks, and the cost would be essentially proportional to the amount of memory required.  The tricky issue is figuring out how fast things would need to be to be usable.  A useful approach, which I've read of some systems using, is to have a system overlay a high-resolution low-color (e.g. 3 colors plus transparent) image on a lower-resolution higher-color image.  That would allow an operator to have a responsive user interface while selecting operations to be performed on an image, even if performing operations on the actual color image might take a few seconds.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-06-14T16:01:21.327" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3104" PostTypeId="2" ParentId="2997" CreationDate="2017-06-14T16:18:24.303" Score="2" Body="&lt;p&gt;I would expect that configuring an A1000 for 640x200x16 color mode and programming all 16 colors as different gray levels would make it possible to show 65536 artifact colors on screen rather easily.  Looking at your picture, it appears that repeating a four-pixel pattern on even scan lines would yield a solid color; shifting that pattern by two pixels on odd scan lines would show the same color.  I would expect that programming some of the 16 palette entries as colors rather than grays would yield colors that weren't among the primary 65536, but I think the results would probably be most predictable if one used grays.  Even then, I have no idea how consistent the colors would be among different machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would guess from your picture that in non-interlace mode the color phase would flip on even and odd scan lines, but would be the same on every frame.  It's also possible that it might flip on every frame, or that it might be the same on consecutive frames but it might be unpredictable whether even or odd scan lines should be shifted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things will be more complicated when interlace is enabled, since the required color phases will shift once every other field (i.e. 30 times/second) and I have no idea if there's any way to distinguish even versus odd fields.  If selecting non-interlace mode forces a certain color phase, one may be able to count how many frames have been shown after switching to interlace mode, but I have no way of testing such a thing.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-06-14T16:18:24.303" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3105" PostTypeId="1" AcceptedAnswerId="3106" CreationDate="2017-06-14T17:38:43.593" Score="9" ViewCount="783" Body="&lt;p&gt;The BBC Master 128 has a CMOS NVRAM and battery system for storing configuration information. I assume that a dead or removed battery just leads to the NVRAM reverting to defaults or other non-harmful state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Short of replacing the battery, can the BBC Master still be used to its full extent? How would one use it, and what MOS commands are needed?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-06-23T15:54:01.200" Title="Can the BBC Master 128 work fine with no battery?" Tags="&lt;bbc-micro&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3106" PostTypeId="2" ParentId="3105" CreationDate="2017-06-14T17:49:44.593" Score="6" Body="&lt;p&gt;I don't know how cleanly memory adopts a default state upon battery failure but even at worst you can still use the machine almost as normal: hold down R while switching on to reset the CMOS RAM. You'll be told that it is reset and prompted to press break for a warm reboot, at which point you should be back to factory defaults and safe at least until your next power cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;*STATUS&lt;/code&gt; (or &lt;code&gt;*ST.&lt;/code&gt;) can be used to see what settings are currently stored; &lt;code&gt;*CONFIGURE&lt;/code&gt; (or &lt;code&gt;*CO.&lt;/code&gt;) can be used to set CMOS values. If status reports a line like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LANG 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;i.e. use the ROM in slot 0 as the default language, then you can set that by:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*CONFIGURE LANG 12&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;i.e. use the ROM in slot 12 as the default language. The built-in BASIC ROM appears in slot 12.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: A BBC Master 128 with the default Megabit ROM chip will, upon resetting the CMOS and doing a warm reset, drop the machine into ADFS. If there are no disk devices available, then the BBC will hang until the user aborts by pressing &lt;code&gt;CTRL+D+BREAK&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4335" LastEditDate="2017-06-25T00:48:30.463" LastActivityDate="2017-06-25T00:48:30.463" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3107" PostTypeId="2" ParentId="3105" CreationDate="2017-06-14T18:27:51.940" Score="2" Body="&lt;p&gt;It will work fine. As you imagined, on power-up will store default values in the NVRAM, which will later disappear on power-off. I have used a few like this in the deep and distant past.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not quite sure what you mean by 'what MOS commands are needed'. But the above explanation may make than question irrelevant anyway.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastActivityDate="2017-06-14T18:27:51.940" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3108" PostTypeId="1" AcceptedAnswerId="3124" CreationDate="2017-06-15T02:01:02.643" Score="11" ViewCount="589" Body="&lt;p&gt;What's the meaning of &lt;code&gt;__saveds&lt;/code&gt; in Amiga C code?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's applied to function prototypes, and is required for functions that are to be called by assembler code, if I understand correctly.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="5231" LastEditDate="2017-06-19T12:48:07.947" LastActivityDate="2017-06-19T12:48:07.947" Title="What's the meaning of __saveds in Amiga C code?" Tags="&lt;amiga&gt;&lt;programming&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3110" PostTypeId="2" ParentId="3108" CreationDate="2017-06-15T06:36:47.263" Score="4" Body="&lt;p&gt;This is to make sure that the compiler generates code that loads the near data pointer in register a4 on each function entry so that your function is able to access its data. &lt;a href=&quot;http://www.hollywood-mal.com/docs/html/sdk/AmigaOSSaveDS.html&quot; rel=&quot;noreferrer&quot;&gt;(source)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-06-15T06:36:47.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3111" PostTypeId="1" AcceptedAnswerId="3112" CreationDate="2017-06-15T07:40:52.057" Score="7" ViewCount="500" Body="&lt;p&gt;I have a motherboard which stores BIOS settings in a DS12887 chip with internal battery. The battery is long dead, and the pin of chip's socket is not connected to any power supply so the chip doesn't store any settings which include hard disk configuration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I disconnected the internal battery, glued cell holder on top of the chip and connected it to battery pins, however it turns out I don't have any CR2032 batteries on hand. I want to test the computer and don't care if the settings are lost when I turn the computer off (for now). Is it safe to connect 5V directly to the chip's battery pin or should I make a quick 3V regulator?&lt;/p&gt;&#xA;" OwnerUserId="156" LastActivityDate="2017-06-15T19:16:35.610" Title="Is it safe to provide 5V to CMOS RAM from PSU instead of CR2032 battery?" Tags="&lt;ibm-pc&gt;&lt;restoration&gt;&lt;hardware-mods&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3112" PostTypeId="2" ParentId="3111" CreationDate="2017-06-15T07:58:16.193" Score="7" Body="&lt;p&gt;The datasheet for that part can be found &lt;a href=&quot;http://pdfserv.maximintegrated.com/en/ds/DS12885-DS12C887A.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, it lists the maximum for VBAT as 4.0 V, so yes you do need to regulate down from 5 V.&lt;/p&gt;&#xA;" OwnerUserId="3514" LastActivityDate="2017-06-15T07:58:16.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3113" PostTypeId="2" ParentId="3111" CreationDate="2017-06-15T17:03:39.500" Score="5" Body="&lt;p&gt;It's not clear from your question you're trying to do. A DS12887 &quot;chip&quot; has its own internal battery. It's actually not a chip, but a module containing a DS12885 chip, a crystal and a small lithium battery. The module only has one power supply connection, a +5V VCC pin and this pin must be connected to the +5V power supply during normal operation. It has no means of connecting an external battery. It does not use a CR2032 battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're saying that your motherboard has a CR2032 socket and you want connect +5V to it instead of replacing the battery with fresh a CR2032 then you shouldn't need to do anything. Like Cody Gray said, just remove the dead CR2032 battery and your motherboard should boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're saying you've broken open a DS12887 module and are attempting to replace the internal battery then you probably don't need to do anything except remove the battery for the motherboard to boot. Note that this battery is not a CR2032, it's a much smaller battery like a CR1232. The DS12885 chip inside the module just needs to be powered with +5V through its VCC pin, and this is required for it to be fully functional. The motherboard must already be supplying +5V to the DS12887 otherwise it would have never have worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can confirm all this with the &lt;a href=&quot;http://pdfserv.maximintegrated.com/en/ds/DS12885-DS12C887A.pdf&quot; rel=&quot;noreferrer&quot;&gt;DS12887's datasheet&lt;/a&gt;.  For example for the VBAT connection it says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Connection for a Primary Battery. (DS12885 Only.) Battery voltage must be held&#xA;  between the minimum and maximum limits for proper operation. If a backup&#xA;  supply is not supplied, VBAT must be grounded. Connect the battery directly to&#xA;  the VBAT pin. Diodes in series between the VBAT pin and the battery may&#xA;  prevent proper operation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Notice that only the DS12885 has a VBAT pin, and that it doesn't actually need to be connected to a battery. If you've cracked open a DS12887 you might need to ground the DS12885 chip's VBAT pin, but you don't need to supply it any power. Supplying +5V to battery terminals inside the module risks damaging it, supplying it a dropped down 2.5V - 4V from the power supply won't accomplish anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The description for the VCC pin reads:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When VCC is applied within normal limits, the device is fully accessible&#xA;  and data can be written and read. When VCC is below VPF reads and writes&#xA;  are inhibited.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Notice how the chip cannot be accessed unless its being supplied +5V through the VCC pin. This means when the computer is powered on the chip must be supplied with +5V for it to work, so this must already be the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're not sure whether you actually have DS12887 module then according to &lt;a href=&quot;http://dgmag.in/N1/Online/advanced/48629.pdf&quot; rel=&quot;noreferrer&quot;&gt;App Note 503: Replacing the DS1287/DS12887&#xA;Real-Time Clock in a Personal Computer&lt;/a&gt; here's how you can tell:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If your computer contains a Nickel Cadmium or a coin cell battery attached to the motherboard, or&#xA;  uses a battery connected to the motherboard via a wire harness, then your computer does not use a&#xA;  clock module. If your PC does use a Dallas clock module, it will look something like the&#xA;  following:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hKktQ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hKktQ.png&quot; alt=&quot;DS1287 and DS12887 clock modules&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Finally, if you are in fact ultimately trying to replace the internal battery in a DS12887 then you should consider simply replacing the entire module instead. They're still being made and can be bought for $10 or less online.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2017-06-15T19:16:35.610" LastActivityDate="2017-06-15T19:16:35.610" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3114" PostTypeId="1" CreationDate="2017-06-16T05:26:18.163" Score="9" ViewCount="240" Body="&lt;p&gt;This is a bit of an archaeological question, but RFC 821, page 31, paragraph 3 describes a syntax for mailbox addresses that is of the form &lt;code&gt;local_path@#123&lt;/code&gt;, where the pound and the following number is some sort of address. It doesn't mention what sort of address that is. It might have ben common knowledge at the time, but I couldn't find a reference for what sort of address that is.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Sometimes a host is not known to the translation function and&#xA;   communication is blocked. To bypass this barrier two numeric&#xA;   forms are also allowed for host &quot;names&quot;. One form is a decimal&#xA;   integer prefixed by a pound sign, &quot;#&quot;, which indicates the&#xA;   number is the address of the host. Another form is four small&#xA;   decimal integers separated by dots and enclosed by brackets,&#xA;   e.g., &quot;[123.255.37.2]&quot;, which indicates a 32-bit ARPA Internet&#xA;   Address in four 8-bit fields.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://tools.ietf.org/html/rfc821#page-31&quot; rel=&quot;noreferrer&quot;&gt;RFC 821 - page 31&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5219" OwnerDisplayName="Huckle" LastEditorUserId="276" LastEditDate="2017-06-16T10:48:22.103" LastActivityDate="2020-03-18T08:19:34.333" Title="Format of &quot;Pound&quot; domains in RFC 821" Tags="&lt;internet&gt;&lt;network&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3115" PostTypeId="2" ParentId="3114" CreationDate="2017-06-16T10:16:53.647" Score="2" Body="&lt;p&gt;I believe that these host numbers predated the ARPAnet. You can find out about them in the Appendix of &lt;a href=&quot;https://tools.ietf.org/html/rfc752&quot; rel=&quot;nofollow noreferrer&quot;&gt;RFC752&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It writes that, for example, « &lt;em&gt;MIT-AI (host 2 on IMP 6 or 2/6) is compiled as 6002&lt;/em&gt; »&lt;/p&gt;&#xA;" OwnerUserId="5220" OwnerDisplayName="roaima" LastActivityDate="2017-06-16T10:16:53.647" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3116" PostTypeId="2" ParentId="3114" CreationDate="2017-06-16T11:48:17.317" Score="6" Body="&lt;p&gt;The &quot;32-bit ARPA Internet Address&quot; seems to be just what we call &quot;IP address&quot; today (IPv4, of course).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would interpret the &quot;&lt;code&gt;#&lt;/code&gt; followed by decimal form&quot; as just a variant representation of the same kind of address: Instead of treating each byte as a a decimal number in the 0-255 range, treat the whole 4-byte word as a decimal number. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's the sort of hack I'd expect for easier parsing in the &quot;damn, DNS doesn't work, what do I do&quot; situation, where you'd just call &lt;code&gt;atoi&lt;/code&gt; and have done with it. And then the hack becomes part of the standard...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But that's just a conjecture, one would have to dig up a mailer that actually implements this form of addressing to find out.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-06-16T11:48:17.317" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3117" PostTypeId="2" ParentId="3114" CreationDate="2017-06-16T14:19:50.013" Score="16" Body="&lt;p&gt;It's called a #-literal. It's basically an Internet host number (IP address) written as a decimal number and it's been obsolete for almost as long as the Internet has existed. The current version of the SMTP protocol - &lt;a href=&quot;https://www.ietf.org/rfc/rfc5321.txt&quot; rel=&quot;noreferrer&quot;&gt;RFC5321&lt;/a&gt; (appendix F.4) - states it as being deprecated and it must not be used. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;RFC 821 provided for specifying an Internet address as a decimal&#xA;     integer host number prefixed by a pound sign, &quot;#&quot;.  In practice, that&#xA;     form has been obsolete since the introduction of TCP/IP.  It is&#xA;     deprecated and MUST NOT be used.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-06-16T14:19:50.013" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3118" PostTypeId="2" ParentId="3000" CreationDate="2017-06-16T16:33:29.113" Score="9" Body="&lt;p&gt;The Amiga 1000 chips were fabricated in 5 micron depletion-mode NMOS (mostly passive pull-up transistors), not CMOS (complementary P and N channel transistors).  So a typical low-speed 2 input passive NAND or NOR gate would have 3 transistors, not 4.  However, a lot of the logic was done using chains of pre-charge evaluate dynamic logic, with different transistors gated during different clock phases.  So, there is no straightforward conversion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The count of 22k transistors for the Agnus also seems wrong, as the die size, transistor size, and fabrication technology of the Agnus was not very far from that of the MC68000, which was reported to have over 60k transistors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the original first Agnus chip was fabricated by Synertek (possible later revisions may have been done by MOS Technologies, after the Commodore purchase of Amiga technology).&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-06-17T05:24:08.907" LastActivityDate="2017-06-17T05:24:08.907" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3119" PostTypeId="1" AcceptedAnswerId="3126" CreationDate="2017-06-16T17:48:46.900" Score="21" ViewCount="2654" Body="&lt;p&gt;The Commodore-Amiga was offered for sale to home users from 1985 (original A1000 in North America) until 1996, when Escom stopped selling the A1200. By 1996, Apple was selling PowerPC-based Macs for home users, and the other major home computer manufacturers from the 1980s had left the industry, I think. Obviously, by 1996, the vast majority of new home computer systems were Windows PC clones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is whether there were any legacy processor (not Intel, Intel clone, or PowerPC) retrocomputers that were actively marketed and sold to home users beyond the end of Amiga 1200 sales in 1996?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-06-07T04:31:08.643" Title="Was Amiga the last of the home retrocomputers sold?" Tags="&lt;history&gt;&lt;amiga&gt;&lt;market&gt;" AnswerCount="7" CommentCount="15" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3120" PostTypeId="2" ParentId="1731" CreationDate="2017-06-16T17:49:20.170" Score="11" Body="&lt;p&gt;I used the &lt;strong&gt;dsk2cdt2disc&lt;/strong&gt; tool to convert a .dsk image to a .cdt tape file. I can then play this tape file via an app (or convert it to audio data) and use a standard Amstrad tape cable to play the audio out to the 6128.&lt;/p&gt;&#xA;&lt;p&gt;I place a blank or erasable disk in the 6128, and then type:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;|tape&#xA;run&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then I start the tape audio playing, which will load a boot program on the Amstrad. The boot program will read the encoded disk sectors from the audio input and write them directly to the disk.&#xA;dsk2cdt2dsk is found at &lt;a href=&quot;https://github.com/pelrun/dsk2cdt2disc&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/pelrun/dsk2cdt2disc&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2020-11-16T20:28:52.490" LastActivityDate="2020-11-16T20:28:52.490" CommentCount="3" CommunityOwnedDate="2017-06-16T17:49:20.170" ContentLicense="CC BY-SA 4.0" />
  <row Id="3121" PostTypeId="2" ParentId="1731" CreationDate="2017-06-16T18:12:42.380" Score="0" Body="&lt;p&gt;I transfer files to my +3e using DIVMMC (which uses a card with +3e partitions, obviously):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Bring the MMC image to the PC using &lt;em&gt;DriveImage&lt;/em&gt;. Depending on your exact PC, this might &lt;strong&gt;not&lt;/strong&gt; work (on my Mac it doesn't), in this case create a disk image with &quot;dd for windows&quot; or MacOS dd. Apparently, StrowSaw (step2) should be able to directly access the card - In my case, it couldn't (I'm on MacOS using Parallels)&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;em&gt;StrowSaw&lt;/em&gt; to access the drive image (or card directly, in case that works for you) and copy all your valuable stuff to the +3e partitions.&lt;/li&gt;&#xA;&lt;li&gt;Use DriveImage or dd to transfer the image back to the card&lt;/li&gt;&#xA;&lt;li&gt;Use the card in the +3e - Whatever your files are good for, CP/M or +3eDOS, copy them directly to disk.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In case you want to transfer &lt;em&gt;disk images&lt;/em&gt; to the +3e, use dsk2tap first to convert the disk images to tap files first, then transfer as above. Those can then be easily written to disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the programs listed above should be found by a simple Google search for their name.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-06-16T18:17:46.330" LastActivityDate="2017-06-16T18:17:46.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3122" PostTypeId="2" ParentId="3119" CreationDate="2017-06-16T18:28:03.213" Score="17" Body="&lt;p&gt;If we are looking back to home computers, maybe the Q60 was the last real &quot;Home computer clone&quot;, a &lt;em&gt;Sinclair QL on steroids&lt;/em&gt; using a Motorola 68060 CPU in a PC case using ISA slots. It was first available 1999. I don't know how long &lt;em&gt;exactly&lt;/em&gt; it was sold, but I seem to recall well into 2005.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its home page is still &lt;a href=&quot;http://www.q40.de&quot; rel=&quot;noreferrer&quot;&gt;up&lt;/a&gt; (although it is named after its predecessor, the Q40 that used a 68040 CPU) in case you want to learn something about this really rare &quot;home computer&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apart from running an extended version of QDOS, the QL's native operating system, the Q60 could also run its predecessor, SMSQ/ and 68k Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do, however, think that the classic home computer has never died - Still today, it was proven to be possible to get well over 700kGBP funding for a project like the &lt;a href=&quot;http://www.specnext.com&quot; rel=&quot;noreferrer&quot;&gt;Spectrum Next&lt;/a&gt; on Kickstarter - This will, once released, obviously be the next &quot;last Home Computer&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some elaborations on the Sinclair QL history as comments (somehow) seem to ask for them:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the demise of the Sinclair QL which wasn't going to be continued by Amstrad starting from the Sinclair buy 1986, QL owners were kind of orphaned from any backing by suppliers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the peripherals suppliers jumped in and continued to produce first expansion boards, then, after the original supply of new computers made by Sinclair and cheaply thrown onto the market by Amstrad dried out, continually moved towards supplying complete QL compatible computers. Some examples (in roughly chronological order, and only the most important developments):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Miracle Systems Gold/SuperGold Card: Produced during the Sinclair/Amstrad transition phase - A plug-in card to replace most of the original QL except video and peripherals. Had a 68000 CPU and 2MB of memory (&lt;a href=&quot;http://www.rwapadventures.com/ql_wiki/index.php?title=Gold%20Card&amp;amp;lang=en&quot; rel=&quot;noreferrer&quot;&gt;GoldCard&lt;/a&gt;) or a 68020 and 4MB RAM (&lt;a href=&quot;http://www.rwapadventures.com/ql_wiki/index.php?title=Super%20Gold%20Card&amp;amp;lang=en&quot; rel=&quot;noreferrer&quot;&gt;Super GoldCard&lt;/a&gt;). Both copied and runtime-patched the original QL ROM into fast RAM, mainly for speed and circumventing any copyright issues (Amstrad initially threatened to sue anyone who would copy Sinclair intellectual property)&lt;/li&gt;&#xA;&lt;li&gt;Sandy &lt;a href=&quot;http://www.rwapadventures.com/ql_wiki/index.php?title=Sandy%20QXT-640&amp;amp;lang=en&quot; rel=&quot;noreferrer&quot;&gt;QXT-640&lt;/a&gt; Was a complete computer built from original QL motherboards and Sandy components into a new case.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/CST_Thor&quot; rel=&quot;noreferrer&quot;&gt;CST Thor&lt;/a&gt; A QL compatible range of computers, initially only an original QL built into a new case, then expanded with a 68020 CPU (but retaining the 8-bit data-bus), later the Thor 16 that was a completely new development based on the 68000. Last produced in Denmark by Dansoft, their biggest customer was Ritzaus, a news agency. Used &lt;strong&gt;Argos&lt;/strong&gt;, a (claimed) re-engineering of QDOS for copyright issues, how much of it was just stolen and how much was actually CST property was never really worked out.&lt;/li&gt;&#xA;&lt;li&gt;Miracle QXL card - A PC-ISA co-processor card that had a 68040 and 4/8MB of memory as the core and used PC peripherals (video, disk, keyboards, other peripherals). This used SMSQ/E, a complete re-development (and major enhancement) of QDOS by the original QDOS developers.&lt;/li&gt;&#xA;&lt;li&gt;Q40/Q60 a described above&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Today, QLs live on in the form of quite a number of emulators, the MiST FPGA platform, and a number of smaller community-based projects supplying hardware. There is also a number of &lt;a href=&quot;http://qlforum.co.uk/index.php&quot; rel=&quot;noreferrer&quot;&gt;forums&lt;/a&gt; that host the still active user community.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-07-16T10:42:53.337" LastActivityDate="2017-07-16T10:42:53.337" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3123" PostTypeId="2" ParentId="3119" CreationDate="2017-06-16T20:39:33.320" Score="9" Body="&lt;p&gt;Commodore went bankrupt in 1994 and sold their assets to ESCOM who re-released the A1200 and A4000T. Then ESCOM went bankrupt in 1997 but one of their licensees, QuikPak, continued to produce the 68060-based A4000T into &lt;a href=&quot;https://web.archive.org/web/19981206015502/http://www.newtekniques.com/TekTicker/NewsFlash001/newsflash001.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;1998&lt;/a&gt; until ESCOM's lawsuit against QuikPak halted production. &lt;a href=&quot;http://www.bigbookofamigahardware.com/bboah/product.aspx?id=47&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a photo of an A4000T manufactured on 1998-03-30.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Soon we will see ARM-based computers running Windows 10, but those of course won't be retro (even though ARM as the main CPU for a general-purpose computer debuted in &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Archimedes&quot; rel=&quot;nofollow noreferrer&quot;&gt;1987&lt;/a&gt;) and they, like the ones that used the Transmeta Crusoe processor in the early '00s (which did not natively execute x86 instructions but used emulation), will probably be laptops and tablet computers, not home computers. Also, SGI produced MIPS workstations until about 2006, and Sun produced SPARC workstations until 2008, and DEC/Compaq/HP produced AlphaStations until sometime in the '00s, but those are all for business, not the home.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2017-07-14T18:29:21.667" LastActivityDate="2017-07-14T18:29:21.667" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3124" PostTypeId="2" ParentId="3108" CreationDate="2017-06-16T20:55:47.830" Score="10" Body="&lt;h1&gt;What it does&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Quoting from the &lt;em&gt;SAS/C© Development System User's Guide&lt;/em&gt;, arguably the authoritative source for Amiga C code:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If you define a function with the &lt;code&gt;__saveds&lt;/code&gt; keyword, the compiler generates extra code at the beginning of the function that loads the address of the near data section into register A4. Defining a function with the &lt;code&gt;__saveds&lt;/code&gt; keyword is equivalent to compiling that function with the &lt;code&gt;saveds&lt;/code&gt; compiler option.  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The extra code would typically look something like this:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        ...&#xA;        LEA     _LinkerDB,A4&#xA;        ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;_LinkerDB&lt;/code&gt; is a symbol supplied by the linker, and points to the &lt;em&gt;Near Data&lt;/em&gt; section.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Near Data section&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The compiler tries to fit everything in this section, but it's limited to 64 KiB&lt;sup&gt;[1]&lt;/sup&gt;. This limit means that it can be addressed using a shorter and faster 16-bit addressing mode. Another quote from the SAS/C manual:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When you link your program, all data in the near data and near BSS hunks are merged into one near data section. When you run your program, the startup module loads the address of the near data section into register A4, and this section is referenced with 16-bit A4-relative addresses.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not only are the instructions shorter, but they don't need an entry in the relocation table, so it makes the executable file even smaller.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Why it is needed&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The key point here is that &lt;strong&gt;the startup module&lt;/strong&gt; initializes A4, and the rest of the compiled code never touches it again. In &quot;normal&quot; code, you don't have to think about this. However, that &quot;normal&quot; code &lt;em&gt;will&lt;/em&gt; expect A4 to point to the location of the data. If not, every single function would have to load the pointer, which would mostly negate the benefits of having one globally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, there are a few cases where you have to initialize it manually:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You have no &lt;em&gt;startup module&lt;/em&gt;. You may want to write a custom startup module but still have everything else work as expected. Your startup module then typically needs &lt;code&gt;__saveds&lt;/code&gt; once, and then it doesn't have to be touched again.&lt;/li&gt;&#xA;&lt;li&gt;You are writing C routines to be called externally. In this case, either the caller or your routine has to set up the near data pointer.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;[1]: Sometimes 32 KiB depending on the linker. Some linkers did not allow the full range to be used.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="333" LastEditorUserId="333" LastEditDate="2017-06-17T11:13:02.577" LastActivityDate="2017-06-17T11:13:02.577" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3125" PostTypeId="2" ParentId="3119" CreationDate="2017-06-17T07:45:17.907" Score="6" Body="&lt;p&gt;&lt;a href=&quot;http://speccy.info/Pentagon-1024SL&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pentagon-1024SL&lt;/a&gt; was a ZX Spectrum souped-up clone, manufactured and sold in Russia in the mid to late 2000s. This was of course already oriented towards retro enthusiasts, and probably only a limited amount of units has been produced for sale (as opposed to DIY construction).&lt;/p&gt;&#xA;" OwnerUserId="476" LastEditorUserId="3290" LastEditDate="2020-06-07T04:31:08.643" LastActivityDate="2020-06-07T04:31:08.643" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="3126" PostTypeId="2" ParentId="3119" CreationDate="2017-06-17T07:49:58.207" Score="31" Body="&lt;p&gt;If you include clones, home retro computers were sold far into the 90's, including the Milan (Atari ST compatible, 1997-1999) and various Amiga compatible machines. There were also lots of ZX Spectrum clones produced in East Europe until the late 90's. However, if it's just about systems supported by their original manufacturer, the answer is likely:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Acorn&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Acorn introduced the Archimedes in 1987, replacing it with the Risc PC a few years later. Acorn sold the rights to Castle Technology in 1998, which still supported and sold RiscPC and RiscOS until 2003. The machine was supported and manufactured until 2003 with enthusiasts later running Risc OS on the Raspberry PI.&lt;/p&gt;&#xA;" OwnerUserId="5224" LastEditorUserId="5154" LastEditDate="2018-08-04T07:05:48.250" LastActivityDate="2018-08-04T07:05:48.250" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="3127" PostTypeId="1" AcceptedAnswerId="7154" CreationDate="2017-06-17T15:52:22.720" Score="8" ViewCount="1267" Body="&lt;p&gt;I've got an Atari 130XE 8bit computer that has Composite Video Output.  Also, I've got an Atari SM124 monitor designed for the Atari ST 16-bit line of computers.  If you look at an Atari 130XE packing box (sold back in the mid 80s) it shows a complete computer system with matching peripherals, including printers, disk drives, modem, and an Atari Monitor.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cosmetically the ST (16bit) line is identical to the XE (8bit) line of Atari computer products.  But of course they are TOTALLY INCOMPATIBLE.  Atari never did finish off it's XE line of computers by marketing a matching monitor.  The XE suffered from a lot of vaporware hardware that never made it into production.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The role of my Atari XE is to sit on a desk and look nice and nostalgic. I happen to think the XE and ST were by far the COOLEST line of computers back in the day, and cosmetically that hit a Bullseye in product design.  I want my Atari to sit on a desk to look nice, and for folks to comment on.  The Atari 130XE coupled with a SM124 monitor does that job PERFECTLY.  However, they are incompatible products.  I'd like to be able to turn it on, and have the monitor come on, and type in something like &#xA;&lt;code&gt;10 PRINT &quot;HELLO WORLD!&quot;;&#xA;20 GOTO 10&lt;/code&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's about it.  It might seem that I'm asking for the impossible, but is there a way to convert the Composite Signal Output of the 130XE into the TTL Video Input of the Atari SM124?  I was hoping a Raspberry Pi 3 could digitize the signal, and maybe have a custom component input the Composite Signal, and another Custom component output the TTL signal?  How expensive might that run? And How do do it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;--edits--&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I added the nostalgic product background so hopefully the post wouldn't get disregarded as a foolish question.&lt;/li&gt;&#xA;&lt;li&gt;The SM124 is actually a (Analog RGB 31KHz) rather than Digital signal?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4894" LastEditorUserId="4894" LastEditDate="2017-06-17T18:15:44.793" LastActivityDate="2018-07-31T20:06:47.030" Title="Connecting an Atari 130XE to SM124 monitor" Tags="&lt;video&gt;&lt;atari-800&gt;&lt;atari-st&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3128" PostTypeId="2" ParentId="3119" CreationDate="2017-06-17T16:08:59.103" Score="10" Body="&lt;p&gt;Slightly disagreeing with the accepted answer because the questioner asked about computers that were built around legacy processor architectures and I wouldn't classify the ARM as such, I propose the Amstrad PCW range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sold only for home use, in a conventional desktop form, its final form was not discontinued until 1998. Although it had lost software compatibility with the older models, and with CP/M in 1995, and didn't sell very well, the final iteration remained Z80 based and therefore is almost certainly the final mass-produced 8-bit computer, and probably post-dates mass production of 680x0 machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the question didn't require that the thing be a computer then the pre-GBA Gameboys would be a decent suggestion. If the implied desktop restriction were relaxed and ARM were an acceptable answer then the Psions would be in with a shot. If processor weren't part of it then I think the FM Towns carried on being produced as x86-but-not-PC machines also until 1998. But by then Windows 95 had been ported so you couldn't tell.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-06-17T16:08:59.103" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="3129" PostTypeId="2" ParentId="3016" CreationDate="2017-06-17T19:51:46.623" Score="3" Body="&lt;p&gt;Most basic programs with no use of POKE command should work. The finest example is probably the Hello World program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT &quot;HELLO WORLD&quot;&#xA;20 GOTO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Besides that, some cassette games from VIC-20 should work on C64 because they load themselves from the datasette to RAM - they most probably won't refer to a weird memory location that on VIC-20 is on the cartridge, but not on C64.&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2017-06-17T19:51:46.623" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3130" PostTypeId="2" ParentId="2996" CreationDate="2017-06-17T20:24:20.013" Score="2" Body="&lt;p&gt;It began for real a few years after the &quot;Heatsink and fan required&quot; started appearing on 486-class CPUs - to be specific, about very late 1996 or 1997. At this point, heat was starting to be a major issue starting with Pentium II processors, and got worse in 1998 when the first Celeron CPU was released.&#xA;At this point, mobile computers started to get cheaper, and more mainstream; Many of them had either Pentium or Pentium II processors, which weren't very power efficient and created a lot of heat (to make things worse, laptops of the era were mostly passive-cooled ones);&#xA;In 1999, with release of Intel Pentium III, Intel also released Pentium III Mobile that was a slightly slower and less powered CPU, but it also was a lot more power-efficient and produced less heat.&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2017-06-17T20:24:20.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3131" PostTypeId="2" ParentId="3063" CreationDate="2017-06-17T20:34:09.827" Score="5" Body="&lt;p&gt;Sounds like a software-related issue. Firstly, I'd check if it works with any newer DOS release - try DOS6.22 or even DOS7 from China DOS Union. If that works, then I'd setup a Windows 98 SE on another partition/HDD and copy files using this OS; If you really need to do it on XP, then I would recommend removing the 3,5&quot; drive and using its place on the FDD cable as the place for the 5,25&quot; one.&#xA;Windows XP can be quite picky on working with 5,25&quot; drives, mostly because when it arrived in 2001 they already were an oddity - M$ included the support for them, but they probably didn't care enough to betatest it properly, and some bugs may occur.&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2017-06-17T20:34:09.827" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3132" PostTypeId="1" AcceptedAnswerId="3133" CreationDate="2017-06-18T01:23:40.257" Score="6" ViewCount="922" Body="&lt;p&gt;I currently only have 11 disks available. One of the disks is a reserve, so I will not use it unless I have to. That brings us down to 10 disks.&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;Disk 0 - Blank, I will use this for the installation of Windows 3.1&#xA;&lt;br&gt;&#xA;Disk 1 - MS-DOS Setup Disk 1&#xA;&lt;br&gt;&#xA;Disk 2 - MS-DOS Setup Disk 2&#xA;&lt;br&gt;&#xA;Disk 3 - MS-DOS Setup Disk 3&#xA;&lt;br&gt;&#xA;Disk 4 - MS-DOS Setup Disk 4&#xA;&lt;br&gt;&#xA;Disk 5 - MS-DOS Setup Disk 5&#xA;&lt;br&gt;&#xA;Disk 6 - MS-DOS Setup Disk 6&#xA;&lt;br&gt;&#xA;Disk 7 - Blank, Will use for setup of Windows 3.1&#xA;&lt;br&gt;&#xA;Disk 8 - Blank, Will use for setup of Windows 3.1&#xA;&lt;br&gt;&#xA;Disk 9 - Where MS-DOS 4.x is installed on&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;Is it okay to format disks 1-6 and use them for the Windows 3.1 setup? (it requires 8 disks)&lt;/p&gt;&#xA;" OwnerUserId="5225" LastActivityDate="2018-03-03T12:42:39.373" Title="Are floppy disks used for MS-DOS setup still needed after you install the operating system?" Tags="&lt;floppy-disk&gt;&lt;ms-dos&gt;&lt;windows-3.x&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3133" PostTypeId="2" ParentId="3132" CreationDate="2017-06-18T07:48:59.683" Score="9" Body="&lt;p&gt;Assuming that you will only use the MS-DOS 4.x installation on one machine configuration, you will not require the setup disks for use. The extra data that requires multiple floppy disks (on 6.2.2) contains:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An interactive setup program with lots of text.&lt;/li&gt;&#xA;&lt;li&gt;Keyboard Layouts&lt;sup&gt;&lt;a href=&quot;http://www.windowsreinstall.com/install/msdos/install622/page2.htm&quot; rel=&quot;noreferrer&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Help files&lt;sup&gt;[2]&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Optional Windows Programs (e.g. MSAVIRUS, taking up much of the third 6.2.2 disk).&lt;sup&gt;[2]&lt;/sup&gt;&lt;sup&gt;[3#1.1]&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Alternative versions of drivers.&lt;sup&gt;[2]&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I recommend keeping an image of the MS-DOS installation disks should the need arise, but it should be fine to erase them to install Windows 3.1. However, &lt;a href=&quot;/q/2952/278&quot;&gt;there is a better way&lt;/a&gt; than using six floppy disks and supervising the installer as it copies if you have a hard-disk.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;[2]&lt;/sup&gt;: The result of &lt;code&gt;DIR&lt;/code&gt; performed on the DOS 6.2.2 install disks.&lt;br&gt;&#xA;  &lt;sup&gt;[3]&lt;/sup&gt;: README.TXT included on the first DOS 6.2.2 install disk.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-06-18T08:50:11.937" LastActivityDate="2017-06-18T08:50:11.937" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3134" PostTypeId="1" AcceptedAnswerId="6482" CreationDate="2017-06-18T09:19:23.323" Score="7" ViewCount="1474" Body="&lt;p&gt;I currently have a working installation of MS-DOS 6.22 with Windows 3.1. I can only use Windows or DOS individually so I don't see the point of having a swap-file for Windows taking up space that can't be used for the DOS &lt;code&gt;%TEMP%&lt;/code&gt; directory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's assume that I have a separate &lt;code&gt;%TEMP%&lt;/code&gt; directory for when Windows starts. How can I configure DOS to overwrite the Windows swap area with the contents of the &lt;code&gt;%TEMP%&lt;/code&gt; directory?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="6915" LastEditDate="2019-12-05T07:04:01.080" LastActivityDate="2019-12-05T07:04:01.080" Title="Using the swap space of Windows 3.1 as a MS-DOS 6.22 temporary directory" Tags="&lt;ms-dos&gt;&lt;windows-3.x&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="3137" PostTypeId="2" ParentId="2995" CreationDate="2017-06-18T16:07:41.023" Score="14" Body="&lt;p&gt;IIRC, the primary reason for the decision on 6 bit planes was die area.  Registers (control and shift, but especially if the LUT was expanded) take up measurable die area.  The original bottom end price target was for an under $400 Hi Toro game machine.  This allowed only 32 kB of DRAM, and 8 bit plane layers was far more than fit in memory.  So why increase costs of the higher volume target?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The higher price target home computer decision came after the chips were floor planned... too late to change things and floorplan larger ASICs, given the extremely limiting R&amp;amp;D budget and aggressive schedule.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, hold-and-modify was an option for game designers who wanted to display more colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no official statement by Commodore because they had no clue how Hi-Toro and Amiga, Inc. designed the system and OCS over a year before their purchase of the technology.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-06-18T16:12:58.983" LastActivityDate="2017-06-18T16:12:58.983" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3138" PostTypeId="2" ParentId="2672" CreationDate="2017-06-18T16:22:27.203" Score="8" Body="&lt;p&gt;Early 68k processors implemented a multi-cycle multiply instruction (70 cycles per MULx), so the inverse MDCT would likely be the limiting factor in terms of raw CPU time.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-06-20T01:54:18.927" LastActivityDate="2017-06-20T01:54:18.927" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3139" PostTypeId="2" ParentId="2146" CreationDate="2017-06-18T16:29:29.313" Score="3" Body="&lt;p&gt;Synchronizers, which are required for reliability and signal integrity across any asynchronous clock domain crossings, in any main data path, costs lots of dual-rank registers, which have to be tightly characterized in circuit design and layout.  This costs in die area. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Async design also makes testing of the prototype emulator and chips themselves vastly more difficult.  Thus making hard-to-find bugs far more likely on any product with such an aggressive design schedule.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Easiest way out was to run all the wide fast paths (CPU, memory, BLIT, NTSC video) off the same derived clock edges.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-06-20T06:42:37.920" LastActivityDate="2017-06-20T06:42:37.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3140" PostTypeId="2" ParentId="2962" CreationDate="2017-06-18T18:12:11.223" Score="7" Body="&lt;p&gt;Atari marketed their computers in nice consumer packaging, at retail stores like Sears and Service Merchandise.  The box packaging featured pictures of a full lineup of nicely matching peripherals, including a variety of printers, a disk drive, modem and a monitor.  That was in 1985 and beyond, when their last line of 8-bits, the XE series (eXtended-Eight-bit) were released.  The new fashion was a sporty cool-gray.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Important Background:&lt;/strong&gt; &#xA;The NEW &quot;Atari&quot;-- Jack Tramiel had been ejected as CEO of Commodore for cutting prices of the C64 too drastically.  So he formed a private company to design new computer hardware using the Motorola 68000 processor. He had brought Commodore design folks to work on it, purportedly with plans in hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time, Atari was owned by Warner Brothers.  The folks at Atari had also been designing a new 16bit 68000 based computer, called the &quot;Atari 1850XLD&quot;, which featured a lot of custom circuitry, and was under heavy development. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But due to emergency financial troubles Warner Brothers had to sell them off at a throwaway price. Tramiel then purchased Atari. The &quot;Atari 1850XLD&quot; staff were not retained, with Tramiel deciding to use his &quot;Commodore&quot; staff and plans.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, those left-out employees from the &quot;Atari 1850XLD Project&quot; formed their own company called &quot;Amiga&quot;, to bring it to market. Tramiel then decided he wanted to purchase &quot;Amiga&quot;, fearing it would compete against his ST. HCommodore swiftly purchased Amiga in a surprise move, though.  That left Tramiel to restart his own Commodore-era designs as quickly as possible, and at &quot;Rock Bottom Price&quot; in oder to beat Commodore to market.  They used as much off the shelf components as possible for the &quot;Atari ST&quot; (standing for S.ixteen-T.hirty-two).  After battling in court with Commodore, Tramiel won a years delay for Commodore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;It was then that they formulated the idea of marketing a matching Atari 8-bit computer monitor.&lt;/strong&gt; However there were a lot of 8bit peripherals left in stock to sell off, and so they planned to bundle those with the freshly styled XE computers first, and then later manufacture cosmetically matching peripherals, including new monitors for the XE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new styling was shown off at the International Winter Consumer Electronics Show (CES) in Las Vegas, &lt;strong&gt;Atari previewed/announced: [color] XC1411 monitor and [monochrome] XM128 monitor for the XE line.&lt;/strong&gt;  Only a few demonstration units were produced, none shipped commercially.  Their new tagline, 'Power Without the Price' was bannered across their booth, which became an advertising slogan for years to come. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Their Atari ST adopted the fresh cosmetics, a cool-gray look considered slick and sporty.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PERSONAL ACCOUNT:&lt;/strong&gt; My first computer was an Atari 130XE, and it came with an old style 1050 disk drive and 1027 Letter Quality Printer, and also a Sears Monitor (almost a sleek cosmetic match,).  I would go on get an sleek new XM-301 modem and a 8pin XMM801 dot-matrix printer, with the fresh styling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the 8bit, XE series of Hardware that were never released commercially went on to become known as &quot;Vaporware&quot; and that includes the two previously mentioned XE properly-styled monitors, the &lt;em&gt;XC1411&lt;/em&gt; and &lt;em&gt;XM128&lt;/em&gt; monitors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dzFv1.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dzFv1.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nWU3t.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nWU3t.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4894" LastEditorUserId="4894" LastEditDate="2017-06-19T17:55:08.077" LastActivityDate="2017-06-19T17:55:08.077" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3141" PostTypeId="2" ParentId="3039" CreationDate="2017-06-18T23:23:31.530" Score="9" Body="&lt;p&gt;The answer is both ways, and combinations of the two.  Sometimes logic diagrams of the original ASIC circuits are available to use, sometimes reverse engineering has to make guesses to match the known behaviors.  Some emulators are designed to be more fast than accurate, but as host computers get faster, the accurate emulators run fast enough to be preferred.&lt;/p&gt;&#xA;&lt;p&gt;Hardware &amp;quot;quirks&amp;quot; are best dealt with by using the schematics to build logically equivalent cycle-accurate software state machines.  With no schematics, one waits to find bugs that deviate from vintage hardware, and fix them one at a time.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="7946" LastEditDate="2021-04-20T08:07:19.997" LastActivityDate="2021-04-20T08:07:19.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="3142" PostTypeId="2" ParentId="2285" CreationDate="2017-06-19T01:11:00.550" Score="14" Body="&lt;p&gt;The assertion that 4x4 is faster is false, it's easier, yes, but not faster. RWTS18 could read the entire track in one revolution so it is the fastest. I know that 4x4 and 6x2 were also capable of reading in one revolution but not sure about 13 sector... don't think anyone ever tried. :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So RWTS18 gave the game developer faster speed, more space with the requirement that they had to manage disk space manually. The fact that it made it harder to crack was a side benefit but not the main goal, believe it or not! That crack that required 3 disks was chuckle-worthy to me and only when the true 2 disk version was recently created was I impressed with the results. (That crack used RWTS16 with data compression, something that was not widely used back in the day.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RDOS was similar in that the space allocated for a file remained constant. This was to allow for as small an OS as possible.&lt;/p&gt;&#xA;" OwnerUserId="5230" LastActivityDate="2017-06-19T01:11:00.550" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="3144" PostTypeId="1" AcceptedAnswerId="3145" CreationDate="2017-06-19T17:19:49.843" Score="13" ViewCount="1628" Body="&lt;p&gt;The Apple II used a 6502 CPU clocked at 1.023 MHz which was tightly tied to the NTSC frequency (1/14 of crystal, 3.5 color clocks per CPU cycle). It is well known that the Disk ][ was primarily software driven and thus cycle counting was extremely important since there was no separate micro controller to abstract the mainboard from what the disk controller was doing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there were PAL and SECAM versions of the Apple II as well. When you look at most 8-bit computers of the era, they were also tied to the NTSC clock in some mathematical way and as a result the PAL versions operated a touch slower because of that video standard's 50Hz cycle versus NTSC's 60Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the Apple II use a slower clock frequency for the European versions or was the hardware output abstracted so that the computer could run at 1.023MHz and not introduce Disk ][ incompatibility? Heck, was the ASCII $07 beep a different pitch?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there was a different speed for non-US / NTSC versions, what accommodations needed to be made?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="75" LastEditDate="2017-06-19T17:24:06.393" LastActivityDate="2017-06-19T19:49:39.060" Title="Did the PAL version of the Apple II use a different clock frequency?" Tags="&lt;apple-ii&gt;&lt;ntsc&gt;&lt;pal&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3145" PostTypeId="2" ParentId="3144" CreationDate="2017-06-19T17:42:26.907" Score="10" Body="&lt;p&gt;Yes, but only a very slightly different speed: the master crystal was around 14.238Mhz rather than 14.31818Mhz. which is only around 0.5% different, so I would expect safely within tolerance for a Disk II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something PAL users didn't get from the base machine: colour. The relationship with phase is a lot more complicated in PAL, as that's how the error correction works. Add-ons could decode the NTSC colour and re-encode as PAL but at that point Wozniak's sneaky colour trick has turned into something absurd: rather than eliminating an explicit colour encoder, you've now got one of those and an additional decoder, with the CPU still working to encode colours on its end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: &lt;a href=&quot;http://www.applefritter.com/?q=node/23779&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt;, though it's secondary; strongly suggests the Apple II Reference Manual would confirm a difference, but I can't find a copy online that's new enough to have been revised in light of the European launch.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-06-19T19:49:39.060" LastActivityDate="2017-06-19T19:49:39.060" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="3146" PostTypeId="1" CreationDate="2017-06-19T20:56:48.770" Score="2" ViewCount="1249" Body="&lt;p&gt;In chronological order of roughly&lt;sup&gt;1&lt;/sup&gt; &lt;strong&gt;increasing&lt;/strong&gt; total pixel count (world record style), please list &lt;strong&gt;progressive scan raster CRT&lt;/strong&gt; monitors (not vector monitors) that were in production (not prototypes). Neither bit-addressable graphics nor color are required, only the maximum raw resolution of the screen. Special-purpose monitors (such as for medical or military applications) and computers with built-in monitors are allowed. Direct-view, front projection, and rear projection displays are allowed. This list is community wiki so anyone can edit it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a single year sets two world records, let's distinguish the two records by month and day, if available.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&lt;sup&gt;1&lt;/sup&gt; But if a newer monitor has fewer total pixels but is better in some significant way than an older monitor, keep both monitors in the list. For example, if the newer monitor supports color but the older one doesn't, or if the newer monitor supports a higher vertical resolution than the older one.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="278" LastEditDate="2017-07-01T15:09:27.460" LastActivityDate="2017-07-01T15:09:27.460" Title="Timeline of progressive scan CRT resolutions" Tags="&lt;display&gt;&lt;crt-monitor&gt;" AnswerCount="2" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3147" PostTypeId="2" ParentId="3146" CreationDate="2017-06-19T20:56:48.770" Score="5" Body="&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;1946&lt;/strong&gt;: 320×240 or 320×262 with overscan (76,800 or 83,840 pixels as 240p/262p with square pixels) - &lt;a href=&quot;http://www.telegraph.co.uk/technology/2016/06/08/how-everyday-gadgets-looked-when-they-were-first-invented/rca-630-ts-first-mass-produced-television/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RCA 630-TS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1972&lt;/strong&gt;: 512×256 (131,072 pixels, monochrome) - &lt;a href=&quot;http://terminals-wiki.org/wiki/index.php/Beehive_Model_V&quot; rel=&quot;nofollow noreferrer&quot;&gt;Beehive Model V&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1977&lt;/strong&gt;: 800x250 (200,000 pixels arranged as 80 columns × 25 rows of 10×10 pixels, monochrome) - &lt;a href=&quot;http://terminals-wiki.org/wiki/index.php/Zentec_9003&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zentec 9003&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1981&lt;/strong&gt;: 720×350 (252,000 pixels arranged as 80 columns × 25 rows of 9×14 pixels, monochrome) - &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Monochrome_Display_Adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM Monochrome Display Adapter (MDA)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1982&lt;/strong&gt;: 1024×800 (819,200 pixels, monochrome) &lt;a href=&quot;https://en.wikipedia.org/wiki/Sun-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sun-1 via Ball HD17H monitor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1983&lt;/strong&gt;: 1152×900 (1,036,800 pixels) - &lt;a href=&quot;https://en.wikipedia.org/wiki/Sun-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sun-2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1986&lt;/strong&gt;: 1280×960 (1,228,800 pixels) - &lt;a href=&quot;https://archive.org/stream/PC-Mag-1986-10-14#page/n57/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Moniterm Viking 1&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1987&lt;/strong&gt;: 1280×1024 (1,310,720 pixels) — &lt;a href=&quot;http://www.sgistuff.net/mirrors/4dfaq/index.html#appendixC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Silicon Graphics Professional IRIS Graphics G/T with the Hitachi CM2086A3SG&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1989&lt;/strong&gt; - 1600x1280 (2,048,000 pixels, 4-bit grayscale) &lt;a href=&quot;https://books.google.com/books?id=sTAEAAAAMBAJ&amp;amp;lpg=PT156&amp;amp;ots=yv_DWJsaY8&amp;amp;pg=PT156#v=onepage&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cornerstone Technology DualPage&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1994&lt;/strong&gt; - 1600×1200 (1,920,000 pixels, color) - &lt;a href=&quot;http://www.nekochan.net/reputable/monitors.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hitachi CM2198MSG Granite&lt;/a&gt; (&lt;a href=&quot;http://www.computerhistory.org/collections/catalog/102731452&quot; rel=&quot;nofollow noreferrer&quot;&gt;SGI Onyx monitor&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1997&lt;/strong&gt; - 2042×1152 (2,352,384 pixels, color) - &lt;a href=&quot;http://www.ceu-inc.com/intergr_6d.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Silicon Graphics Inc./Intergraph InterView 28hd96&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1999&lt;/strong&gt; - 2048×1536 (3,145,728 pixels, color) — &lt;a href=&quot;http://www.anandtech.com/show/421&quot; rel=&quot;nofollow noreferrer&quot;&gt;iiyama VisionMaster Pro 510&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2017-06-29T19:19:18.737" LastActivityDate="2017-06-29T19:19:18.737" CommentCount="8" CommunityOwnedDate="2017-06-19T20:56:48.770" ContentLicense="CC BY-SA 3.0" />
  <row Id="3148" PostTypeId="2" ParentId="2468" CreationDate="2017-06-19T23:14:19.397" Score="2" Body="&lt;p&gt;By looking at the photos i can't see any proof (logos, text) that this really is a Synergist rack; Adding to it that you don't have any other computer hardware associated with it, you should be OK with modyfing it. Over the past 48 years probably at least one of them got modified in a way that let it be used for a &quot;while&quot; longer.&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2017-06-19T23:14:19.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3149" PostTypeId="2" ParentId="1164" CreationDate="2017-06-19T23:33:49.463" Score="3" Body="&lt;p&gt;You should start with a dumped ROM (*.n64) and some utility for unpacking/previewing contents of this ROM. You can go the hardcore way - open the .n64 file in a hex editor like &lt;a href=&quot;https://directory.fsf.org/wiki/Ghex&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;GHex&quot;&gt;GHex&lt;/a&gt;, analyze the file, and save particular fragments that look like data that you're interested in - this approach needs a lot of knowledge about how N64 works and coding. You will probably also need a decompiler for this approach to be any effective.&#xA;The second way is a lot simplier - you'll need some tools for unpacking and previewing dump contents (many usefull utils can be found &lt;a href=&quot;https://www.zophar.net/utilities/mod.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;), and you should be able to get some data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides that, it would also be neat to have a friend that played this game a lot and knows if something occurs/is shown in-game, &lt;em&gt;or&lt;/em&gt; if you don't have any friends, a wiki for this game - it will help you to know if something was really shown in the game, or if it was your imagination playing tricks on you.&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2017-06-19T23:33:49.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3150" PostTypeId="1" AcceptedAnswerId="4596" CreationDate="2017-06-20T01:19:04.047" Score="32" ViewCount="11251" Body="&lt;p&gt;In the documentation for an implementation of Pascal for a Soviet computer, I've encountered a very weird language extension. I'll try to translate it:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;h1&gt;Branching operator (branch)&lt;/h1&gt;&#xA;  &#xA;  &lt;h2&gt;Syntax&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;&amp;lt;&lt;em&gt;Branching operator&lt;/em&gt;&gt;::= &lt;strong&gt;branch&lt;/strong&gt; &amp;lt;&lt;em&gt;Expression&lt;/em&gt;&gt; &lt;strong&gt;of&lt;/strong&gt; &amp;lt;&lt;em&gt;Operator&lt;/em&gt;&gt; { ; &amp;lt;&lt;em&gt;Operator&lt;/em&gt;&gt; }* &lt;strong&gt;end&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;h2&gt;Semantics&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;When control reaches a branching operator, the &lt;em&gt;Expression&lt;/em&gt;, which should be of a simple type, is evaluated, then control is passed to first &lt;em&gt;Operator&lt;/em&gt; in the &lt;strong&gt;branch&lt;/strong&gt;.&lt;br&gt;&#xA;  [&lt;em&gt;Forall j&lt;/em&gt; ls likely missing here. - LB] If the j-th operator of the &lt;strong&gt;branch&lt;/strong&gt; has concluded, the &lt;strong&gt;branch&lt;/strong&gt; is exited, and control is passed beyond &lt;strong&gt;end&lt;/strong&gt;.&#xA;  During the execution of the j-th &lt;em&gt;Operator&lt;/em&gt;, the &lt;strong&gt;back&lt;/strong&gt; operator can be called.&lt;/p&gt;&#xA;  &#xA;  &lt;h2&gt;Syntax of the &lt;strong&gt;back&lt;/strong&gt; operator&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;&amp;lt;&lt;em&gt;&lt;strong&gt;back&lt;/strong&gt; operator&lt;/em&gt;&gt; ::= &lt;strong&gt;back&lt;/strong&gt; &amp;lt;&lt;em&gt;Expression&lt;/em&gt;&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;During the execution of the &lt;strong&gt;back&lt;/strong&gt; operator, the &lt;em&gt;Expression&lt;/em&gt; is evaluated, and a search is performed for the closest dynamically preceding branch with a compatible value of its &lt;em&gt;Expression&lt;/em&gt;. The values are compatible, when they are either equal, or one of them is equal to zero.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If such a branch is found, control is passed to the next operator in the branch, or, if the last operator in the branch was being executed, beyond the &lt;strong&gt;end&lt;/strong&gt; of the branch.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If a branch with a compatible expression is not found, then it is deemed that the whole program is enclosed within&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;branch&lt;/strong&gt; &amp;lt;&lt;em&gt;Program&lt;/em&gt;&gt;; &lt;strong&gt;begin&lt;/strong&gt; &amp;lt;Printing &quot;exit on ALT&quot;&gt; &lt;strong&gt;end&lt;/strong&gt; &lt;strong&gt;end&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;TL;DR: The &lt;strong&gt;branch&lt;/strong&gt; operator implements exceptions, allowing to represent  concepts similar to C++ &lt;strong&gt;try&lt;/strong&gt;, &lt;strong&gt;catch&lt;/strong&gt; (including &lt;strong&gt;catch&lt;/strong&gt; (...)), &lt;strong&gt;throw&lt;/strong&gt; and re-throw, albeit using values of expressions rather than types to distinguish the exceptions.I notice two peculiarities: there are references to the &quot;j-th operator&quot; without explaining what &quot;j&quot; refers to (it turns out that in the context it simply means &quot;any&quot;); also the diagnostic &quot;exit on ALT&quot; &amp;mdash; the equivalent of C++ &lt;code&gt;terminate()&lt;/code&gt; &amp;mdash; had ALT in Latin letters, and the turn of the phrase is somewhat unnatural in Russian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(OK, three peculiarities: the last line is syntactically incorrect: the expression and the keyword &lt;strong&gt;of&lt;/strong&gt; are missing. Should have been something like &lt;strong&gt;branch&lt;/strong&gt; 0 &lt;strong&gt;of&lt;/strong&gt; ...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This leads me to think that this &lt;strong&gt;branch&lt;/strong&gt; operator was not of an original design, and that part of the documentation is a direct translation from a foreign language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does it ring a bell? Has anyone seen this kind of proto-exceptions in any programming language?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example (simplified from the example in the documentation):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;program t;&#xA;procedure m(i: integer);&#xA;begin&#xA;  branch i of&#xA;    begin&#xA;      if i&amp;lt;20 then begin&#xA;        m(i+1);&#xA;        back i-2&#xA;      end&#xA;    end;&#xA;    writeln(i)&#xA;  end&#xA;end;&#xA;begin&#xA;  m(0)&#xA;end.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It prints&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    17&#xA;    14&#xA;    11&#xA;     8&#xA;     5&#xA;     2&#xA;     0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The equivalent C++ code would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;&#xA;void m(int i) {&#xA;    try {&#xA;        if (i &amp;lt; 20) {&#xA;            m(i+1);&#xA;            throw i-2;&#xA;        }&#xA;    } catch (int k) {&#xA;        if (i &amp;amp;&amp;amp; k &amp;amp;&amp;amp; i != k)&#xA;            throw;&#xA;        std::cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; '\n';&#xA;    }&#xA;}&#xA;main() {&#xA;    m(0);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Additional examples:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;branch expr of&#xA;    writeln(1);&#xA;    writeln(2);&#xA;    writeln(3)&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;will print &lt;code&gt;1&lt;/code&gt; regardless of the value of &lt;code&gt;expr&lt;/code&gt;, because the execution of the &lt;code&gt;branch&lt;/code&gt; operator always starts from the first enclosed operator and finishes as soon as an operator concludes.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;branch 0 of&#xA;    begin&#xA;        branch 1 of&#xA;            begin write(1); back 0 end;&#xA;            begin write(2); back 1 end;&#xA;            begin write(3); back 99 end&#xA;            write(4); &#xA;        end;&#xA;        write(5)&#xA;    end;&#xA;    writeln(99)&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;will print &lt;code&gt;1 2 3 99&lt;/code&gt;: &lt;code&gt;back 0&lt;/code&gt; matches the closest enclosing &lt;code&gt;branch&lt;/code&gt; with expression value 1 (because one of the expressions is 0), the first item of &lt;code&gt;branch 1&lt;/code&gt; has been executed; so control is passed to the next item of that branch; in the second item, &lt;code&gt;back 1&lt;/code&gt; matches &lt;code&gt;branch 1&lt;/code&gt;, so control is passed to the third item. &lt;code&gt;back 99&lt;/code&gt; doesn't match &lt;code&gt;branch 1&lt;/code&gt; but it matches &lt;code&gt;branch 0&lt;/code&gt;, so control is passed to the next item of &lt;code&gt;branch 0&lt;/code&gt; which prints &lt;code&gt;99&lt;/code&gt;. Without &lt;code&gt;back 99&lt;/code&gt;, &lt;code&gt;1 2 3 5&lt;/code&gt; would be printed. With &lt;code&gt;back 1&lt;/code&gt; instead of &lt;code&gt;back 99&lt;/code&gt;, &lt;code&gt;1 2 3 4 5&lt;/code&gt; would be printed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question of different types of expressions is not covered in the documentation. Experimentation shows that 1.0 doesn't match 1, but chr(1) does. This indicates that the type information was not saved, and that matching was done by bit pattern.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-08-08T05:25:16.860" LastActivityDate="2018-08-08T05:25:16.860" Title="Where does this esoteric Pascal operator come from?" Tags="&lt;history&gt;&lt;programming&gt;&lt;pascal&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="3151" PostTypeId="2" ParentId="3146" CreationDate="2017-06-20T02:07:29.440" Score="2" Body="&lt;p&gt;1941 : about 320x262 (depending on contrast and including overscan) - Any early NTSC-1 B&amp;amp;W television, as abused by video games consoles to display in a non-interlaced, thus progressive  format.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-06-20T02:13:00.260" LastActivityDate="2017-06-20T02:13:00.260" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3152" PostTypeId="2" ParentId="3119" CreationDate="2017-06-20T02:19:46.137" Score="2" Body="&lt;p&gt;Palm was selling 68k based Zire handhelds (pocket computers?) in 2002.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2017-06-20T02:19:46.137" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3153" PostTypeId="2" ParentId="104" CreationDate="2017-06-20T03:58:15.490" Score="6" Body="&lt;p&gt;A PC 1.44 drive, can be converted for use in an Amiga, in fact ANY Amiga can use it, but it will be limited to 880k (720k PC).  The reasoning, is because PC 1.44 drive motor spins the disk at a different rate. Amiga HD (1.76MB) spins at 150RPM, where a PC drive rotates at 300RPM.&lt;/p&gt;&#xA;" OwnerUserId="5232" LastActivityDate="2017-06-20T03:58:15.490" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3156" PostTypeId="2" ParentId="3134" CreationDate="2017-06-20T06:45:33.417" Score="4" Body="&lt;p&gt;Firstly, you shouldn't do that. It will be sloooow, and won't be worth the time spent on it, mostly because old hard drives are kinda slow and not very useful in terms of using them as swap. Besides that, it may lead to slowing down the HDD or even HDD malfunction, where you may not be able to restore the data (old HDDs are mostly heavily-used ones, and making a new swapfile will make things even worse in terms of write-count).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest solution would be adding something like that to the begining of &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DEL swapfile.sys&#xA;MKDIR C:/DOS/TMP&#xA;SET TEMP=C:/DOS/TMP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where swapfile.sys is the name of your swapfile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, the best approach is probably creating a script that will look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@ECHO OFF&#xA;ECHO Creating swapfile.sys, please wait...&#xA;FOR /l %i in (1,1,1000) DO ECHO. &amp;gt; swapfile.sys&#xA;WIN.COM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="5211" LastEditorUserId="5211" LastEditDate="2017-06-20T16:22:52.330" LastActivityDate="2017-06-20T16:22:52.330" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="3157" PostTypeId="2" ParentId="3150" CreationDate="2017-06-20T09:28:00.527" Score="8" Body="&lt;p&gt;They probably meant Landin's &lt;a href=&quot;https://en.wikipedia.org/wiki/J_operator&quot; rel=&quot;noreferrer&quot;&gt;J operator&lt;/a&gt;, which is basically a precursor to the &lt;code&gt;call-with-current-continuation&lt;/code&gt; function from Scheme. See the &lt;a href=&quot;https://docs.racket-lang.org/guide/conts.html&quot; rel=&quot;noreferrer&quot;&gt;relevant part&lt;/a&gt; of Racket documentation.&lt;/p&gt;&#xA;" OwnerUserId="5234" LastActivityDate="2017-06-20T09:28:00.527" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3158" PostTypeId="2" ParentId="1132" CreationDate="2017-06-20T16:43:32.617" Score="10" Body="&lt;p&gt;The easiest (PnP) approach is definely using two adapters. The first one should be a USB to PS/2 (miniDIN) adapter; This one needs to be an active adapter, such as this one:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Yy741.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Yy741.jpg&quot; alt=&quot;active ps/2 adapter&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Avoid using weird smaller adapters like the one below - they probably won't work because they're designed for motherboards that have a PS/2 host, which allows them to be passive (motherboard will be in charge of changing D+ and D- from the USB port to Clock and Data signal from PS/2). If you have one lying around, you can always try it - your PC will be fine even if the keyboard won't work with this one.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/0wVoZ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0wVoZ.png&quot; alt=&quot;passive ps/2 adapter&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second adapter &lt;em&gt;should&lt;/em&gt; be a passive one; You can either make one yourself (&lt;strong&gt;working&lt;/strong&gt; schematic on the last picture) or buy one like the picture below online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/faHMr.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/faHMr.jpg&quot; alt=&quot;passive din&amp;gt;ps/2 adapter&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/viAZh.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/viAZh.gif&quot; alt=&quot;a WORKING schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One last thing; If you're going to make an adapter yourself, you &lt;strong&gt;should not&lt;/strong&gt; connect the same colored cables from the DIN cable to the same colored cables from the miniDIN cable; Always verify what cables you're connecting to what pins and double check if the polarization is OK (ie. that you haven't connected + from the miniDIN to a - on the DIN)&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2017-06-20T16:43:32.617" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3159" PostTypeId="1" CreationDate="2017-06-21T11:53:29.517" Score="10" ViewCount="1010" Body="&lt;p&gt;I maintain a Windows 98SE machine for lots of reasons (Star Commander, SIO-2-PC, ADTPro, 3.5&quot; and 5.25&quot; PC Floppies, RS-232 port, Zip, Jazz, CD-ROM, Ethernet, etc).  It is a &lt;em&gt;very&lt;/em&gt; useful box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also tend to boot to a command prompt a lot on this box, but Windows 98SE uses MS-DOS version 7.1 which has &lt;em&gt;some differences&lt;/em&gt; from MS-DOS 6.22.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mostly this is no big deal, but I do miss the nice DEFRAG command (from MS-DOS 6.22) that would not only defragment your drive but also allow you to sort the directory structure alphabetically.  This helped to soothe my file system OCD immensely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for a similar tool I can use from MS-DOS 7.1 (or Windows 98SE if need be) to sort my folders.  I've checked the Windows 98 version of Defrag, but alas, it doesn't seem to allow for the nifty alpha sorting that was available in earlier versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've considered trying to run the MS-DOS 6.22 version but suspect it will either complain about being the wrong version, or worse, screw up my filesystem.  So..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know of a command line tool or Windows 98 utility that will safely and reliably allow me to alpha-sort my directories? &lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2020-08-27T20:26:21.387" Title="How to alpha-sort MS-DOS 7.x directories" Tags="&lt;ms-dos&gt;&lt;windows-98&gt;&lt;defrag&gt;" AnswerCount="4" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3160" PostTypeId="2" ParentId="3150" CreationDate="2017-06-21T16:14:17.753" Score="2" Body="&lt;p&gt;Given the revised description, it appears that the intention was to provide an ability to exit inner blocks of code in a manner somewhat analogous to setjmp/longjmp.  Basically, something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;branch 6 of&#xA;  doX;&#xA;  doY;&#xA;  doZ;&#xA;End&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would be somewhat analogous to the C code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;extern jmp_buff back_jmp_buff;&#xA;extern int jmp_cause;&#xA;&#xA;jmp_buff volatile prev_jmp_buff = back_jmp_buff;&#xA;if (!setjmp(&amp;amp;back_jmp_buff))&#xA;  doX();&#xA;else if (jmp_cause != 6)&#xA;  longjmp(&amp;amp;prev_jmp_buff, 1);&#xA;else if (!setjmp(&amp;amp;back_jmp_buff))&#xA;  doY();&#xA;else if (jmp_cause != 6)&#xA;  longjmp(&amp;amp;prev_jmp_buff, 1);&#xA;else if (!setjmp(&amp;amp;back_jmp_buff))&#xA;  doZ();&#xA;else if (jmp_cause != 6)&#xA;  longjmp(&amp;amp;prev_jmp_buff, 1);&#xA;back_jmp_buff = prev_jmp_buff;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A &lt;code&gt;back 6&lt;/code&gt; would be equivalent to &lt;code&gt;jmp_cause = 6; longjmp(&amp;amp;back_jmp_buff, 1);&lt;/code&gt;  I don't understand the first example at all; the use of a variable and subtraction operators within the expressions seems weird.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those unfamiliar with setjmp/longjmp, the expression &lt;code&gt;setjmp(&amp;amp;buff)&lt;/code&gt; will take a snapshot of the current program counter and stack state and return 0; if code later does &lt;code&gt;longjmp(&amp;amp;buff, n)&lt;/code&gt;, execution will jump back to the previous &lt;code&gt;setjmp(&amp;amp;buff)&lt;/code&gt;, but it will return &lt;code&gt;n&lt;/code&gt;.  There are restrictions to the contexts in which &lt;code&gt;setjmp&lt;/code&gt; can appear which make it hard to do anything with the return value beyond testing whether it is zero, so I used a separate &lt;code&gt;jmp_cause&lt;/code&gt; variable.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2017-06-22T16:51:27.763" LastActivityDate="2017-06-22T16:51:27.763" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3164" PostTypeId="1" AcceptedAnswerId="3233" CreationDate="2017-06-21T23:40:54.503" Score="8" ViewCount="416" Body="&lt;p&gt;A &lt;a href=&quot;https://web.archive.org/web/20120722205002/http://docs.tendra.org/reference/xhtml/guide/ch08.html#S69&quot; rel=&quot;nofollow noreferrer&quot;&gt;document&lt;/a&gt; about the precursor to &lt;a href=&quot;https://en.wikipedia.org/wiki/Architecture_Neutral_Distribution_Format&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANDF&lt;/a&gt; (Architecture Neutral Distribution Format) mentions that two of its integer division/remainder primitives &lt;em&gt;&quot;are those generally implemented directly by processor instructions giving the sign of the remainder the same as the sign of the &lt;strong&gt;quotient&lt;/strong&gt;&quot;&lt;/em&gt; (it would be more precise to say that the sign of the non-zero remainder is positive if signs of the dividend and the divisor match, and negative otherwise).  The other two primitives implement the case where the sign of remainder is the same as the sign of divisor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was this a misstatement (intending &quot;dividend&quot;, as in x86), or there really was a CPU implementing this peculiar kind of integer division?&#xA;None of the programming languages define their &lt;a href=&quot;https://en.wikipedia.org/wiki/Modulo_operation&quot; rel=&quot;nofollow noreferrer&quot;&gt;modulo operation&lt;/a&gt; to make the remainder to follow the sign of the quotient. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;After some thought, I'm convinced that &lt;em&gt;&quot;the sign of the quotient&quot;&lt;/em&gt; was a mistake in the document. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using &lt;a href=&quot;https://en.wikipedia.org/wiki/Dimensional_analysis&quot; rel=&quot;nofollow noreferrer&quot;&gt;dimensional analysis&lt;/a&gt;, consider moving N ft North (positive) of South (negative) making K ft steps while facing North or South. The result is N/K full steps, where the sign of the result determines whether the steps were forwards (positive) or backwards (negative). The remainder of the distance could be either always in the same direction as were the full steps (the sign of the remainder follows the sign of the dividend), or always forwards (the sign of the remainder follows the sign of the divisor), or always to the North (the remainder is always positive). The obvious opposites are also possible but less useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the situation when the remainder of the distance would be to the North if the steps were forwards, and to the South if they were backwards, or vice versa, doesn't make sense.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-06-29T19:27:44.733" LastActivityDate="2017-06-30T13:08:09.227" Title="Was there ever a division instruction with sign of the remainder following the sign of the quotient?" Tags="&lt;history&gt;&lt;instruction-set&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3166" PostTypeId="1" AcceptedAnswerId="3167" CreationDate="2017-06-22T11:37:07.083" Score="25" ViewCount="2821" Body="&lt;p&gt;The best background I have found so far on the early development of the ARM processor at Acorn comes from this &lt;a href=&quot;http://www.eng.auburn.edu/~vagrawal/COURSE/READING/ARCH/Interview_ARMdesigner.pdf&quot; rel=&quot;noreferrer&quot;&gt;interview&lt;/a&gt; with Steve Furber.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interview does not mention the development of the first ARM &quot;model&quot; and &quot;simulator&quot; programs. I assume these programs were used to debug some key aspects of the new processor's instruction set and timing, and perhaps to predict its performance metrics. I have read elsewhere that they were written on the BBC Micro in BASIC. Is this statement verifiable, and does the original BASIC code still exist somewhere?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@see YouTube video &lt;a href=&quot;https://youtu.be/ZMEBj3FM2aw&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="10566" LastEditDate="2019-04-09T11:06:39.703" LastActivityDate="2019-04-13T11:59:53.703" Title="Was the first ARM &quot;processor&quot; a BBC BASIC program?" Tags="&lt;history&gt;&lt;basic&gt;&lt;bbc-micro&gt;&lt;acorn&gt;&lt;arm&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3167" PostTypeId="2" ParentId="3166" CreationDate="2017-06-22T13:30:21.337" Score="31" Body="&lt;p&gt;Per &lt;a href=&quot;https://youtu.be/QqxThgLTLyk?t=960&quot; rel=&quot;noreferrer&quot;&gt;Sophie Wilson:&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To prove that [Steve had] designed the microarchitecture correctly, he wrote, in BBC BASIC, a model of the microarchitecture. To prove that I'd designed the architecture correctly, I wrote an interpreter for the processor's instruction set and wrote programs in it.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;So, well before any actual commitment to doing things, we could demonstrate that you could write sensible programs in this stuff — programs did what I claimed, Steve's microarchitecture did what he claimed. You can then do all the verification that you need to do.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;So on my models of the processor you write programs that are expected to produce particular results. Those models run quite quickly — on a 6502 second processor we could run an ARM emulator at hundreds of thousands of instructions per second, where the microarchitecture model, and later on the transistor model, of the processor ran very much more slowly than that.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;But we built a test suite that demonstrated that the processor was the processor, ran it on my models of the processor and then on Steve's models of the processor to prove that his model did the same as mine, and then when we had a transistor model of the processor we ran it on that too, and then we made one. And to nobody's great surprise really, the processor arrived back in April 1985, we plugged it into the development board and it worked. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Furthermore, when interviewed by the Computer History Museum, &lt;a href=&quot;http://archive.computerhistory.org/resources/access/text/2012/06/102746190-05-01-acc.pdf&quot; rel=&quot;noreferrer&quot;&gt;Sophie commented&lt;/a&gt; (final sentence of Page 22 onwards):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So Steve wrote in BBC Basic the first behavioral model of an ARM. We ran test programs on that. ... We then also started writing instructions and interpreters ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So it's definitely the case that both designers strongly remember using BBC BASIC for the very first models, writing various further models, running them on BBC Micro hardware (the 6502 second processor was an ordinary market option for that machine) and producing hardware only much later. Earlier in that same interview, Sophie has established that a common practice elsewhere was to fab early and not get anything that works until the seventh or eighth revision, so the simulation story is given in contrast to that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If those pre-hardware software models of the ARM survive, I'm not sure that they've ever seen public release. The ARM evaluation kit — a very early ARM provided as a second processor for the BBC — is probably the first thing that survives in public.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-06-22T16:51:47.783" LastActivityDate="2017-06-22T16:51:47.783" CommentCount="17" ContentLicense="CC BY-SA 3.0" />
  <row Id="3168" PostTypeId="2" ParentId="463" CreationDate="2017-06-22T16:10:43.897" Score="3" Body="&lt;p&gt;Once upon a time, 16 kilobytes of DRAM was expensive.  The original 8080 Altair came with up to 4 kbytes of memory on a single memory board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only programming languages (higher than ASM) that could fit in that small a memory were Tiny BASIC (Palo Alto Tiny BASIC, Altair BASIC (Gates and Allen) and Woz's Integer BASIC, et.al.) and Forth.  The only alternatives were hand coding assembly language, or cross-compiling on a larger minicomputer.  Basic was more well known and far more commercially viable than entering programs in binary via front panel switches. Later personal computers continued with what the market was familiar with (from the books and magazine articles at that time), and came with BASIC loaded into ROM.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC (with a very simple OS for I/O) came in ROM on many early personal computers because mass-produced masked ROM was cheaper than RAM, on a per byte basis.  64k address space was considered huge at the time, so dedicating a portion of it to ROM was not considered wasteful.  And BASIC in ROM allowed the computer to be usable on power-up, instead of after loading software via paper-tape, cassette tape, or some other media.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-06-22T16:25:13.903" LastActivityDate="2017-06-22T16:25:13.903" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3169" PostTypeId="2" ParentId="2883" CreationDate="2017-06-22T17:07:44.557" Score="2" Body="&lt;p&gt;Many 8051 development boards seem to be listed, from multiple vendors including Amazon.com, as currently available.  The 8051 is a circa 1980 vintage design, if you consider that retro enough.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-06-22T17:30:15.083" LastActivityDate="2017-06-22T17:30:15.083" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3170" PostTypeId="2" ParentId="1359" CreationDate="2017-06-22T17:18:51.383" Score="8" Body="&lt;p&gt;For the OCS, one big reason was chip package cost.  Up to 40-pin DIP packages for the chips were the only ones in the consumer price range at the time the Amiga OCS was designed.  Other chip packages with more pins (enough to allow a 32-bit bus) were several times more expensive, as they were meant for mainframes and aerospace applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For later designs, an alternative to doubling (or quadrupling) the number of transistors would have been to double the clock rate of the internal blit (etc.) logic, and multiplex one 32-bit memory bus cycle into two (or 4!) 16-bit internal graphic engine cycles. This would have been possible using the smaller, faster CMOS transistors available a few years after the OCS was designed. With a 2X internal clock multiple, the system could get twice the bandwidth from a 32-bit memory bus and similar speed DRAMs, but stay NTSC color burst synchronous. &lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-06-23T08:12:09.713" LastActivityDate="2017-06-23T08:12:09.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3171" PostTypeId="1" AcceptedAnswerId="3173" CreationDate="2017-06-23T04:48:39.127" Score="11" ViewCount="603" Body="&lt;p&gt;Did ZX80 BASIC have a way to check how much memory you were using and how much was left?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or otherwise: if you were writing a program on a machine with the RAM expansion, was there a way to tell whether you were using enough memory that your program actually required the expansion?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-06-23T14:05:44.423" Title="ZX80 BASIC checking free memory" Tags="&lt;memory&gt;&lt;zx80&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3172" PostTypeId="2" ParentId="3171" CreationDate="2017-06-23T10:36:17.820" Score="3" Body="&lt;p&gt;I've had a quick browse around on this and there doesn't seem to be an easy way, top of memory is found by writing/reading values to and from memory during startup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ROM checks by using the Z80 stack pointer as indicator of top of memory (see RST 30 for details) Peeking DFEND should tell you if you definitely need more than 1K (if you're writing code on a 16K machine) but I'm not sure how much space you'd need to leave for the stack. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a test machine code routine in the 16K ram pack instructions which prints out memory size, I've not disassembled the code but my guess is it's copying the stack pointer somewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So short of writing a small machine code stub to read the stack pointer (or peeking and poking say 8K into the RAM space) I can't see how to do this in BASIC.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2017-06-23T11:57:15.443" LastActivityDate="2017-06-23T11:57:15.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3173" PostTypeId="2" ParentId="3171" CreationDate="2017-06-23T12:06:08.260" Score="9" Body="&lt;p&gt;The ZX80 puts the display file immediately after the storage necessary for your program, and puts a pointer to that at $400C. So you can figure out how many bytes you are using with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PRINT (PEEK(16396) + 256 * PEEK(16397)) - 16384&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That's sufficient if you know how much RAM there is in total. I'm hunting around for an equivalent of the ZX81's RAMTOP to do that automatically but can't find anything yet; will update answer if I find something.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-06-23T12:06:08.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3174" PostTypeId="2" ParentId="3171" CreationDate="2017-06-23T14:05:44.423" Score="5" Body="&lt;p&gt;You can detect ZX-80 memory by determining the current address of the stack pointer. This will obviously only work using machine code - Unfortunately, the ZX-80 has no such thing as RAMTOP, which is available in the ZX-81:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LD HL,0000        210000&#xA;ADD HL,SP         39&#xA;RET               C9&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can get that to run by&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 REM 12345&#xA;20 POKE 16427,33&#xA;30 POKE 16428,0&#xA;40 POKE 16429,0&#xA;50 POKE 16430,57&#xA;60 POKE 16431,201&#xA;70 PRINT USR(16427)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Note, the &lt;code&gt;USR&lt;/code&gt; is not a 1-key token, but has to be typed in character by character.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the other (lower) end of the memory, the display file and the program grow upwards - So the amount of free memory is the difference of what you get in this program and what you got in the other (accepted) answer.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2017-06-23T14:05:44.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3175" PostTypeId="1" CreationDate="2017-06-23T18:33:58.317" Score="13" ViewCount="2342" Body="&lt;p&gt;Similar to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2153/does-a-cdc-1604-emulator-exist-with-a-functional-fortran-compiler&quot;&gt;this question&lt;/a&gt;, but generalized to any mainframe computer from before the microprocessor era, does there exist an emulator and OS for a vintage mainframe computer that will run the output from a working FORTRAN compiler, from FORTRAN source code written on a contemporary system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The goal is for a student to be able to write code in an early programming language version on a student's laptop (or Pi, etc., without the need for an actual noisy card punch); but then check that the resulting code might actually have run on an old mainframe by using a reasonably accurate emulator (prefer cycle accurate, but not absolutely necessary) and seeing the (emulated line printer or whatever) output. &lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="79" LastEditDate="2018-05-29T10:50:34.203" LastActivityDate="2020-10-06T08:47:26.403" Title="Do any mainframe emulators exist with a functional FORTRAN compiler?" Tags="&lt;programming&gt;&lt;emulation&gt;&lt;compilers&gt;&lt;fortran&gt;" AnswerCount="7" CommentCount="13" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3176" PostTypeId="2" ParentId="2792" CreationDate="2017-06-23T18:57:50.027" Score="5" Body="&lt;p&gt;One should not ignore the cost of DRAM chips at the time when the IBM PC was originally designed.  Circa 1980, the marked-up retail price of a board with 64 kilobytes of DRAM was around $400 (that's over $1200 in 2017 dollars).  The high volume low cost DRAM memory chips were 1-bit wide.  Doubling the cost of that DRAM (from 8 to 16 1-bit memory chips) would be required in the minimal entry-level (cassette-tape with BASIC in ROM!) PC to support a 16-bit processor.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2017-06-23T18:57:50.027" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3177" PostTypeId="2" ParentId="3175" CreationDate="2017-06-23T19:16:44.743" Score="9" Body="&lt;p&gt;One possibility to look at might be the &lt;a href=&quot;http://www.hercules-390.org/&quot; rel=&quot;noreferrer&quot;&gt;Hercules emulator&lt;/a&gt;, which emulates the IBM S/370, ESA/390, and z/Arch systems. This is emulating the 'bare iron', and does not include the operating system or utilities, but there are sources for OS images and compilers listed on that page.&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2017-06-23T19:16:44.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3178" PostTypeId="2" ParentId="3175" CreationDate="2017-06-23T19:40:38.000" Score="6" Body="&lt;p&gt;Does it have to be a mainframe, or PDP-11 or VAX would be good enough?&#xA;If the latter, then there is &lt;a href=&quot;http://simh.trailing-edge.com/&quot; rel=&quot;noreferrer&quot;&gt;SIMH&lt;/a&gt;, and there is &lt;a href=&quot;http://www.mirrorservice.org/sites/www.bitsavers.org/bits/&quot; rel=&quot;noreferrer&quot;&gt;Bitsavers' Software Archive&lt;/a&gt;. There was a FORTRAN compiler on BSD UNIX for sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Better yet, there is no need to simulate the whole system. For convenience, one can use a &lt;a href=&quot;https://github.com/DoctorWkt/Apout&quot; rel=&quot;noreferrer&quot;&gt;user space PDP-11 emulator&lt;/a&gt;.&#xA;Binaries can be taken &lt;a href=&quot;ftp://minnie.tuhs.org/pub/PDP-11/Sims/Apout/UnixBins/&quot; rel=&quot;noreferrer&quot;&gt;from here&lt;/a&gt;, 2.11 BSD preferred.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-06-23T19:40:38.000" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="3179" PostTypeId="2" ParentId="803" CreationDate="2017-06-24T04:44:22.910" Score="3" Body="&lt;p&gt;You can't use Sixtyforce, it doesn't support N64DD ROMs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, an alternative I'm looking into is using &lt;a href=&quot;https://64dd.org/tutorial_mame.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MAME&lt;/a&gt; to play N64DD titles on my MacOS machine.&lt;/p&gt;&#xA;" OwnerUserId="621" LastEditorDisplayName="user6464" LastEditDate="2018-10-23T09:13:56.373" LastActivityDate="2018-10-23T09:13:56.373" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="3180" PostTypeId="5" CreationDate="2017-06-24T08:29:12.470" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-06-24T08:29:12.470" LastActivityDate="2017-06-24T08:29:12.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3181" PostTypeId="4" CreationDate="2017-06-24T08:29:12.470" Score="0" Body="Questions about the ability of a computer to perform some given useful operation using some given amount of energy, or about reducing the energy consumption for some given operation." OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-06-24T10:27:51.357" LastActivityDate="2017-06-24T10:27:51.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3182" PostTypeId="1" AcceptedAnswerId="3203" CreationDate="2017-06-24T13:22:08.100" Score="17" ViewCount="5370" Body="&lt;p&gt;Note to close-voters: There is a &lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/q/480/278&quot;&gt;meta question&lt;/a&gt; concerning the on-topicness of this question. Please provide an answer or comment. A comment from downvoters wouldn't hurt either.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The UK QWERTY keyboard layout has the button labelled with a split pipe type an unsplit pipe &lt;em&gt;|&lt;/em&gt; (via &lt;kbd&gt;Shift&lt;/kbd&gt; + &lt;kbd&gt;\&lt;/kbd&gt;) and the button labelled with an unsplit pipe type a split pipe &lt;em&gt;¦&lt;/em&gt; (via &lt;kbd&gt;Ctrl&lt;/kbd&gt; + &lt;kbd&gt;Alt&lt;/kbd&gt; + &lt;kbd&gt;`&lt;/kbd&gt; or &lt;kbd&gt;Alt Gr&lt;/kbd&gt; + &lt;kbd&gt;`&lt;/kbd&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The France AZERTY and Germany QWERTZ layouts have a single split pipe &lt;em&gt;¦&lt;/em&gt; that types an unsplit pipe &lt;em&gt;|&lt;/em&gt; (via &lt;kbd&gt;Alt Gr&lt;/kbd&gt; + &lt;kbd&gt;6&lt;/kbd&gt; and &lt;kbd&gt;Alt Gr&lt;/kbd&gt; + &lt;kbd&gt;&amp;lt;&lt;/kbd&gt; respectively).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The France AZERTY keyboard layout, courtesy Wikimedia Commons contributors:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:KB_France.svg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/b/b9/KB_France.svg&quot; alt=&quot;The France keyboard layout&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When and why did the convention of labelling keys with the &quot;wrong&quot; bar(s) on keyboards for PCs originate?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-06-27T16:20:54.093" LastActivityDate="2017-06-28T09:16:34.250" Title="Why are the | and ¦ keys labelled the wrong way around?" Tags="&lt;history&gt;&lt;keyboards&gt;&lt;text&gt;" AnswerCount="1" CommentCount="16" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3183" PostTypeId="5" CreationDate="2017-06-24T13:24:39.890" Score="0" Body="&lt;p&gt;Use this tag for retro-computing questions related to text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be about the way the text-specific hardware worked or about software techniques specifically relevant to text manipulation, processing and display.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-06-24T13:24:39.890" LastActivityDate="2017-06-24T13:24:39.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3184" PostTypeId="4" CreationDate="2017-06-24T13:24:39.890" Score="0" Body="For questions regarding text - as opposed to graphics - processing and display." OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-06-24T13:24:39.890" LastActivityDate="2017-06-24T13:24:39.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3185" PostTypeId="2" ParentId="3175" CreationDate="2017-06-24T15:12:28.987" Score="7" Body="&lt;p&gt;These aren't mainframes by any manner of means, but I've successfully compiled and run Fortran programs on an emulated:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;DEC PDP-11 running RSX11&lt;/li&gt;&#xA;&lt;li&gt;DEC PDP-8 running OS 8.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Both of these ran under &lt;a href=&quot;http://simh.trailing-edge.com/&quot; rel=&quot;noreferrer&quot;&gt;SimH&lt;/a&gt; on a Raspberry Pi Zero. The PDP-8, being a small machine, typically ran from paper tape rather than cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have reason to believe that another early educational computer, the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1130&quot; rel=&quot;noreferrer&quot;&gt;IBM 1130&lt;/a&gt; will run under SimH, or under the &lt;a href=&quot;http://ibm1130.org/sim/downloads&quot; rel=&quot;noreferrer&quot;&gt;IBM1130.org simulator&lt;/a&gt;. IBM1130.org has a download package that includes a Fortran compiler. From correspondence with the author of &lt;a href=&quot;http://www2.seas.gwu.edu/~kaufman1/FortranColoringBook/ColoringBkCover.html&quot; rel=&quot;noreferrer&quot;&gt;A FORTRAN Coloring Book&lt;/a&gt;, it seems that the book was targeted to students submitting code on an 1130. I'm not sure if it's possible to run IBM FORTRAN H — the version that introduced &lt;code&gt;COMPLEX&lt;/code&gt; — on an 1130, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible to compile Fortran-77 and older using &lt;code&gt;gfortran -std=legacy …&lt;/code&gt;. What will really get you with old code, though, are the machine-specific assumptions. For example, the Coloring Book is peppered with &lt;code&gt;// FOR&lt;/code&gt;, &lt;code&gt;// JOB&lt;/code&gt; and &lt;code&gt;// XEQ&lt;/code&gt; batch control cards with little explanation of what they do. It would have been assumed common knowledge for all users at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Fortran character set is a simple subset of ASCII, but if you want to really emulate punch cards, you should look at &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/cards/index.html&quot; rel=&quot;noreferrer&quot;&gt;Douglas W. Jones's punched card index&lt;/a&gt;. It has tools to convert ASCII ↔ EBCDIC for compiling card decks, and the format is used by SiMH.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-06-24T15:12:28.987" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3187" PostTypeId="2" ParentId="3175" CreationDate="2017-06-26T07:05:44.967" Score="4" Body="&lt;p&gt;Do you consider the PDP-10 a mainframe? Here is a TOPS-10 distribution with Fortran included: &lt;a href=&quot;http://www.steubentech.com/~talon/pdp10/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.steubentech.com/~talon/pdp10/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2017-06-26T07:05:44.967" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3188" PostTypeId="1" AcceptedAnswerId="3192" CreationDate="2017-06-26T13:20:10.207" Score="10" ViewCount="997" Body="&lt;p&gt;Suppose you have two early eighties computers, a Commodore PET with 8050 disk drive and an IBM PC with its 5.25&quot; disk drive. Is there a way to transfer files between them? Not machine code programs, those wouldn't be compatible anyway, but Basic source code and CSV data files. Buying third-party hardware or software is acceptable as part of the solution if necessary, but only such as is available in that timeframe, 1981-82.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-04-14T14:17:23.087" Title="Transferring files between Commodore PET and IBM PC" Tags="&lt;floppy-disk&gt;&lt;ibm-pc&gt;&lt;commodore-pet&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3190" PostTypeId="2" ParentId="3188" CreationDate="2017-06-26T13:59:10.123" Score="6" Body="&lt;p&gt;CBM disks used GCR drives, something beyond the capability of any PC disk drive that I would know of - They use MFM. Direct disk-to-disk transfer seems to be out of the question other than on a 1571 disk drive, which could do both, due to two separate disk controllers.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;There is &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/crossplatform/transfer/C2N232/cbmlink.html&quot; rel=&quot;noreferrer&quot;&gt;cbmlink&lt;/a&gt;, a program to transfer files between various CBM and IBM computers over a parallel cable. Supports PETs. On Linux, you can also use a serial port (Linux doesn't hit the &quot;contemporary&quot; mark, though).&lt;/li&gt;&#xA;&lt;li&gt;Very contemporary programs would be kermit as a serial file transfer program which should be available on both platforms, provided your PET has an RS-232 port, which was available as an aftermarket thing, if I remember right.&lt;/li&gt;&#xA;&lt;li&gt;You can possibly take a detour over the C64 (which should be able to read 4040-format PET disks and whatever you have there (like serial port or SD-IEC, although the latter wouldn't be contemporary)&lt;/li&gt;&#xA;&lt;li&gt;Transfer the file to a C-128, then to a 1571 drive (which is both GCR and MFM-capable), then use BigBlueReader - That would be &lt;em&gt;slightly&lt;/em&gt; non-contemporary, as the 1571 only hit the market 1985&lt;/li&gt;&#xA;&lt;li&gt;The most &lt;em&gt;contemporary&lt;/em&gt; solution would  probably be a IEE-488 card for the IBM PC which should have been available, or a &lt;em&gt;&lt;a href=&quot;http://www.commodore.ca/gallery/magazines/compute/Compute-002.pdf&quot; rel=&quot;noreferrer&quot;&gt;Computhink&lt;/a&gt;&lt;/em&gt; disk system (refer to page 13 in linked document for an advert) that allowed connecting Shugart-standard MFM drives to the PET. Both would, I guess however, be practically impossible to obtain today.&lt;/li&gt;&#xA;&lt;li&gt;Another contemporary option was &quot;Z-RAM for PET&quot; by Madison Computer. Factually a RAM expansion and Z-80 processor board, it also offered a standard RS-232 port (apparently a software implementation using the user port) and made the PET capable of running CP/M. You could use standard CP/M programs for file transfer to anywhere.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-06-26T15:33:10.970" LastActivityDate="2017-06-26T15:33:10.970" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3191" PostTypeId="1" AcceptedAnswerId="3193" CreationDate="2017-06-26T15:34:33.967" Score="8" ViewCount="557" Body="&lt;p&gt;I asked &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1683/why-did-the-atari-8-bit-computers-make-beeping-noises-while-accessing-the-disk-a&quot;&gt;this question&lt;/a&gt; several months ago about why did the Atari produce beeping sounds when loading a disk or tape and it seems that it was by design. However, as I've played with a few emulators over the years it seems to me that none of them actually reproduce the SIO sounds. Digging into the options of the Atari 800 emulator (for Windows and Mac OS X), I don't seem to find anything that suggests that this sound can be enabled or disabled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any emulators that emulate this sound? I'm curious why is it disabled on the emulators since aren't they trying to at least provide an authentic reproduction of the original platform?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(yeah, I'd probably enable it for about 5 minutes before muting it again, but as far as platform authenticity in emulation goes you'd think it should at least be there?)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2018-09-21T05:32:02.987" Title="Do any Atari 8-bit emulators produce the disk / tape I/O sound?" Tags="&lt;emulation&gt;&lt;atari-800&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3192" PostTypeId="2" ParentId="3188" CreationDate="2017-06-26T16:03:57.367" Score="8" Body="&lt;p&gt;It seems that the key piece of contemporary technology would be the &lt;strong&gt;Commodore VIC-20&lt;/strong&gt;, released in 1981. Through the use of IEEE-488 adapters, such as the &lt;a href=&quot;http://sleepingelephant.com/denial/wiki/index.php?title=VIC-1112_IEEE-488_interface_cartridge&quot; rel=&quot;noreferrer&quot;&gt;VIC-1112&lt;/a&gt; the VIC-20 was compatible with the Commodore floppy drives. Also, RS-232 adapters, such as the &lt;a href=&quot;http://sleepingelephant.com/denial/wiki/index.php?title=VIC-1011A_RS232C_adapter&quot; rel=&quot;noreferrer&quot;&gt;VIC-1011&lt;/a&gt;, were common for the VIC-20.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a contemporary VIC-20 with these adapters, one could create a bridge to the IBM PC. You would require terminal software and a null modem connection from the PC to the VIC-1011 interface. Then, files could be read from the CBM floppy by the VIC-20, and transferred over the terminal connection to the PC, where they are then written to PC floppy. Of course, files could also be transferred in the other direction. To get back to the PET, simply connect the CBM floppy drive to it instead of the VIC-20.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, a similar setup using the Commodore 64 would also be possible some years after the release of the VIC-20.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-06-26T16:03:57.367" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3193" PostTypeId="2" ParentId="3191" CreationDate="2017-06-26T17:22:48.637" Score="10" Body="&lt;p&gt;I use Altirra, which does emulate the drive beeping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.virtualdub.org/altirra.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.virtualdub.org/altirra.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I had to tweak the preferences to get the drive beeping turned on, and it was some time ago, so I can't direct you to the exact preference.  But I just tried it and it definitely makes the drive beeping sounds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an added bonus, you can also enable the 'drive sounds' to produce the spinning floppy disk noise.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2017-06-26T17:22:48.637" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3194" PostTypeId="1" CreationDate="2017-06-26T18:17:00.953" Score="17" ViewCount="1438" Body="&lt;p&gt;DriveSpace is the successor to DoubleSpace. Both are DOS systems that mount a Compressed Volume File as a drive, allowing ordinary programs to interface with a compressed drive without an intermediate compression stage. According to the MS-DOS 6.22 README.TXT:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;DriveSpace appears &#xA;  similar to DoubleSpace, which was included with MS-DOS 6 and 6.2. The&#xA;  main difference is that DriveSpace stores compressed data in a different&#xA;  format from DoubleSpace.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What is the difference in format used? Are there differences other than the compressed format?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-07-05T14:16:02.560" LastActivityDate="2018-03-21T04:55:30.467" Title="What is the difference between DriveSpace and DoubleSpace?" Tags="&lt;ms-dos&gt;&lt;file-format&gt;&lt;storage&gt;&lt;compression&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3195" PostTypeId="1" AcceptedAnswerId="3201" CreationDate="2017-06-26T19:52:48.877" Score="11" ViewCount="1384" Body="&lt;p&gt;As exemplified in answers to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2866/does-anyone-have-the-source-code-of-an-early-program-written-in-assembly&quot;&gt;this question&lt;/a&gt; (I hope that closed questions that are linked to, don't get purged), the instruction mnemonics in early assembly languages had a 1-to-1 correspondence to the machine instructions they denoted. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if the memory access instructions have different opcodes depending on the direction of the data transfer, there will be assembly instructions with an abbreviation of &quot;load&quot; and of &quot;store&quot; in their names, like &lt;code&gt;LDA&lt;/code&gt; for &quot;load accumulator&quot; and &lt;code&gt;STA&lt;/code&gt; for &quot;store accumulator&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, one of the x86 assembly languages could use the same mnemonic &lt;a href=&quot;http://c9x.me/x86/html/file_module_x86_id_176.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;MOV&lt;/code&gt;&lt;/a&gt; for the whole group of data transfer instructions which encompass several different bit patterns in their opcodes, be it a load or a store. The actual meaning of the instruction is then represented by the order and the type of the operands.&#xA;This can be thought of as a step up in the level of the language, sparing the programmer from remembering the gory details of the instruction set architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which architecture/platform was the first to have this kind of a &quot;smart&quot; assembly language?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, at the bottom of &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2867/4025&quot;&gt;this answer&lt;/a&gt; there seems to be an example of an assembly language program for the &lt;a href=&quot;https://en.wikipedia.org/wiki/IAS_machine&quot; rel=&quot;noreferrer&quot;&gt;IAS machine&lt;/a&gt; with formulas serving as mnemonics, e. g. &lt;code&gt;S(x)-&amp;gt;R&lt;/code&gt; for loading from memory. It appears that this style was used in the IAS emulator, but it is unclear if there was an assembler program on the actual machine that understood these mnemonics (doubtful, as in the late 1940s or early 1950s is would be too wasteful to use a 7-character mnemonic where a 2-character one would do).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there actual assembly languages that used formula-style instruction mnemonics rather than abbreviations of words, e. g. something like &lt;code&gt;MTR&lt;/code&gt; (&lt;strong&gt;M&lt;/strong&gt;emory &lt;strong&gt;T&lt;/strong&gt;o register &lt;strong&gt;R&lt;/strong&gt;) instead of what would be &lt;code&gt;LDR&lt;/code&gt; as a &quot;conventional&quot; mnemonic, and &lt;code&gt;RTM&lt;/code&gt; (register &lt;strong&gt;R&lt;/strong&gt; &lt;strong&gt;T&lt;/strong&gt;o &lt;strong&gt;M&lt;/strong&gt;emory) instead of what would be &lt;code&gt;STR&lt;/code&gt;, etc.?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-06-27T05:22:21.683" Title="What is the origin of different styles of assembly language mnemonics?" Tags="&lt;history&gt;&lt;programming&gt;&lt;assembly&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3196" PostTypeId="2" ParentId="3195" CreationDate="2017-06-26T21:57:36.390" Score="14" Body="&lt;p&gt;Most probably it was the Z80 that actually tried to (and succeeded to) orthoginalize an already existing assembler language, that of the Intel 8080.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;8080 assembly language used mnemonics that were different all over the place:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;MOV, STA and LDA&lt;/code&gt; for register moves, Accumulator Load and Store &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LXI&lt;/code&gt; for register pair load and store&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;MVI&lt;/code&gt; for moving immediate data into registers&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On the Z80, this was all just flattened to &lt;code&gt;LD&lt;/code&gt; (Load) plus appropriate arguments, while using the very same opcodes. Similar changes were done to other mnemonics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other quirks were&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ADD&lt;/code&gt; and &lt;code&gt;SUB&lt;/code&gt; looked different whether the operands were immediate or registers&lt;/li&gt;&#xA;&lt;li&gt;and quite some more quirky and hard to remember mnemonics...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;which were also &quot;fixed&quot; and straightened in Z80 assembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &lt;code&gt;LXI B,0FFH&lt;/code&gt;, &lt;code&gt;MOV A,B&lt;/code&gt;, &lt;code&gt;STAX&lt;/code&gt; , &lt;code&gt;MVI A,0ffh&lt;/code&gt; were all different ways on the 8080 to move data into or from registers or register pairs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z80 assembly translated all of these to a simple &lt;code&gt;LD &amp;lt;destination&amp;gt;,&amp;lt;source&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for the very same opcode, compatible with the 8080, the Z80 used different (and much more systematically built) assembler mnemonics that could actually fulfil the promise of their name and be &lt;em&gt;memorizable&lt;/em&gt;. This most probably made the assembler quite a bit more complicated (after all, it had to find out what the operand types were in order to find the proper opcode, while the 8080 had the operand types embedded in the mnemonics), but made life way easier for the programmer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond that, the Z80 did have quite some operations the 8080 didn't have, like relative jumps and quite a number of very useful block transfer commands (but that was not the question)&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-06-26T22:19:04.673" LastActivityDate="2017-06-26T22:19:04.673" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="3197" PostTypeId="1" AcceptedAnswerId="3198" CreationDate="2017-06-26T22:18:04.033" Score="20" ViewCount="2482" Body="&lt;p&gt;When did a C compiler first become available for the IBM PC? I have fond memories of Turbo C, but that didn't become available until the mid to late eighties; it definitely wasn't the first one. Languages available at launch seem to have been Basic, assembly and a Pascal byte code system.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4335" LastEditDate="2017-06-27T16:37:37.303" LastActivityDate="2017-07-03T23:28:01.830" Title="What was the first C compiler for the IBM PC?" Tags="&lt;history&gt;&lt;ibm-pc&gt;&lt;c&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3198" PostTypeId="2" ParentId="3197" CreationDate="2017-06-26T22:50:05.267" Score="24" Body="&lt;p&gt;The first compiler for PC-DOS was &lt;a href=&quot;https://en.wikipedia.org/wiki/Lattice_C&quot; rel=&quot;noreferrer&quot;&gt;Lattice C&lt;/a&gt;, released in June, 1982. This compiler was also distributed under license as Microsoft C v2.0. The Lattice C compiler was very popular and widely ported, available on several 1980s retrocomputers including Amiga, Atari ST, and Sinclair QL. The Lattice compiler was acquired by &lt;a href=&quot;https://en.wikipedia.org/wiki/SAS_Institute&quot; rel=&quot;noreferrer&quot;&gt;SAS Institute&lt;/a&gt; in 1987 and renamed SAS/C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Watcom C was also popular and widely ported, but was not available for the PC until the late-1980s, around the same time as Borland's Turbo C.&lt;/p&gt;&#xA;" OwnerUserId="4213" LastEditorUserId="4335" LastEditDate="2017-06-27T14:08:00.513" LastActivityDate="2017-06-27T14:08:00.513" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="3199" PostTypeId="1" AcceptedAnswerId="3205" CreationDate="2017-06-27T04:52:38.753" Score="27" ViewCount="15627" Body="&lt;p&gt;Suppose it's late 1980 to early 1981, you've got some software you want to write for the IBM PC which will be released later in 1981, want to get started ASAP, and believe C is the right language for the job. However, a C compiler on the PC does not become available until 1982.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the cheapest way to get your hands on some kind of usable C programming environment immediately?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="278" LastEditDate="2017-07-11T16:29:51.763" LastActivityDate="2017-07-11T16:29:51.763" Title="How to get started writing C for the IBM PC in 1980-81" Tags="&lt;ibm-pc&gt;&lt;compilers&gt;&lt;c&gt;" AnswerCount="10" CommentCount="4" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3200" PostTypeId="2" ParentId="3199" CreationDate="2017-06-27T05:22:13.080" Score="10" Body="&lt;p&gt;A possible answer is cross-development. If C is the right language for the job, then a prototype can be written in C on any platform that already has it (say, PDP-11, also a little endian 16-bit architecture, with a well-established C environment).&lt;br&gt;&#xA;A command-line program would be portable enough, maybe with a few include file modifications and taking care of the infamous &quot;text mode&quot; vs &quot;binary mode&quot;.&lt;br&gt;&#xA;If some kind of text mode direct screen access is needed for interactivity, in a prototype implementation it could be modeled by the CURSES library, to be rewritten later with assigning directly to the video memory.  &lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-06-27T05:22:13.080" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="3201" PostTypeId="2" ParentId="3195" CreationDate="2017-06-27T05:22:21.683" Score="6" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_6000_series&quot; rel=&quot;noreferrer&quot;&gt;CDC 6000 series&lt;/a&gt;, starting with the &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_6600&quot; rel=&quot;noreferrer&quot;&gt;CDC 6600&lt;/a&gt; introduced in &lt;strong&gt;September 1964&lt;/strong&gt; (13 years before the Z80), had a somewhat unique assembly format: The &quot;opcode field&quot; consisted of a prefix denoting a function followed by a register name, and the &quot;operand field&quot; consisted of one or two arguments (register names or constants), combined with &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;*&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt; or &lt;code&gt;/&lt;/code&gt; like a mathematical formula. There were three sets of registers, &lt;code&gt;A&lt;/code&gt; (address), &lt;code&gt;B&lt;/code&gt; (increment) and &lt;code&gt;X&lt;/code&gt; (data). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an example taken from page 67 (page 74 of the PDF) of &lt;a href=&quot;http://ygdes.com/CDC/Grishman_CDC6000AsmLangPgmg.pdf&quot; rel=&quot;noreferrer&quot;&gt;Ralph Grishman: Assembly Language Programming for the Control Data 600 and Cyber Series&lt;/a&gt;, that implements the standard Fortran funcion &lt;code&gt;IDIM&lt;/code&gt; (truncated subtraction):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        IDENT   IDIM&#xA;        ENTRY   IDIM&#xA;IDIM    BSS     1&#xA;        SA2     A1+1      X2 = address of second argument&#xA;        SA1     X1        X1 = first argument&#xA;        SA2     X2        X2 = second argument&#xA;        IX6     X1-X2     X6 = ARG1-ARG2&#xA;        PL      X6,IDIM   if ARG1-ARG2 positive, return&#xA;        SX6     B0        else set result=0&#xA;        EQ      IDIM      and return&#xA;        END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And different combinations of symbols and register would get assembled to different opcodes, e.g. (octal opcode in first column):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;50   SAi  Aj+K      Set Ai to Aj + K&#xA;51   SAi  Bj+K      Set Ai to Bj + K&#xA;...&#xA;74   SXi  Aj+Bk     Set Xi to Aj + Bk&#xA;75   SXi  Aj-Bk     Set Xi to Aj - Bk&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A full summary can be found on page 2 of the &lt;a href=&quot;http://ygdes.com/CDC/60100000D_6600refMan_Feb67.pdf&quot; rel=&quot;noreferrer&quot;&gt;Reference Manual&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A complete assembly environment called COMPASS with macros and pseudo-instructions was available.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-06-27T05:22:21.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3202" PostTypeId="2" ParentId="3199" CreationDate="2017-06-27T07:56:27.793" Score="3" Body="&lt;p&gt;C was available on the BBC Micro in the very early '80s.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You did need the third party 68000 Second Processor which was made by Torch Computers.  The OS was Torch Unix.  This configuration wasn't supported by Acorn but it worked pretty well.  This is how I first learnt C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From memory there was also an add-on card for the Apple ][ which would give access to a C environment.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2017-06-27T07:56:27.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3203" PostTypeId="2" ParentId="3182" CreationDate="2017-06-27T08:33:02.150" Score="12" Body="&lt;p&gt;ASCII was designed from the start with usable subsets (for instance an uppercase subset representable with six bits, consisting of the four central columns) and international variants.  SHARE (IBM users' group) insisted that all characters needed for PL/I, included the vertical bar, were present in the uppercase subset(*).  That was solved by allowing &lt;code&gt;!&lt;/code&gt; to be represented as a vertical bar, and by breaking the vertical bar present in the international non six-bit subset (7C).  Later a broken bar was introduced in the upper part of latin-1 (A6).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The usage of breaking the character 7C persisted, notably in the ROM fonts of early IBM PC (for instance &lt;a href=&quot;https://en.wikipedia.org/wiki/File:Codepage-437.png&quot; rel=&quot;noreferrer&quot;&gt;this Wikipedia capture of the ROM font of a VGA card&lt;/a&gt;).  And we have the current situation where some fonts are using the broken bar for 7C although they shouldn't (doing a google image search for &quot;ASCII bitmap font&quot; shows both usages).  Fonts for Latin-1 or Unicode (which shares the definition of graphical characters with Latin-1) tend to keep with the official definition (I've not found any which does not when writing this, but I'm pretty sure that in the past I've seen fonts which showed a broken bar for 7C and a continuous bar for 6A).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keyboards show the same variations as fonts.  Some have the key intended to type 7C showing a broken bar, others an unbroken one (I've just looked at mine, all have the French layout you give but two have a non-broken bar, one a broken one on key &lt;kbd&gt;6&lt;/kbd&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.cs.tut.fi/~jkorpela/latin1/ascii-hist.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.cs.tut.fi/~jkorpela/latin1/ascii-hist.html&lt;/a&gt; look from vertical line.  &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.trafficways.org/ascii/ascii.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.trafficways.org/ascii/ascii.pdf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Coded Character Sets, History and Development&lt;/em&gt;, C.E. MacKenzie&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;*&lt;/code&gt; depending on sources, they insisted that it was in the non variable part as well&lt;/p&gt;&#xA;" OwnerUserId="5269" LastEditorUserId="5269" LastEditDate="2017-06-28T09:16:34.250" LastActivityDate="2017-06-28T09:16:34.250" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3204" PostTypeId="2" ParentId="3199" CreationDate="2017-06-27T09:04:18.520" Score="43" Body="&lt;p&gt;So you want to write a C program for the IBM PC before the first C compiler for the PC is released. How do you go about it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are three options I can see:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Write your own C compiler&lt;/li&gt;&#xA;&lt;li&gt;Use a cross compiler for 8086 on some other platform&lt;/li&gt;&#xA;&lt;li&gt;Wait for a C compiler to become available&lt;/li&gt;&#xA;&lt;li&gt;Don't use C&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;No &lt;strong&gt;four&lt;/strong&gt; options. Amongst our many options are fear, surprise and a fanatical devotion to the Pope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd be pretty confident that all of the software houses that were in that position would have gone with option 4. The reason for this is that the premise of your question is faulty: professional software developers don't have dogmatic views about which language to use, they look at the target platform and then pick (what they think is) the best language that is &lt;em&gt;available&lt;/em&gt;. In my 30 years as a professional software developer, I have never had the luxury of a free choice of what language to use on any project. On a professional level, my favourite language is whichever one gets the job done on the target platform. For my personal projects, it's Swift all the way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another point to remember is that, in 1981, C did not have the ubiquity in the world of personal computers that it later gained. Everybody wrote in BASIC or assembler. The deficiencies of BASIC were recognised but the answer was not obviously &quot;replace it with C&quot;. Several languages were mooted as a replacement including IIRC Pascal, COMAL and even Fortran but the first time I even heard of C was when I went to University in 1984 and was exposed for the first time to Unix. There was a significant group of people who thought &quot;why would you use anything but assembler?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The software house developing an application for the IBM PC in 1981 would have had no hesitation in breaking out the 8086 assembler and just getting on with it. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2017-06-27T15:57:09.210" LastActivityDate="2017-06-27T15:57:09.210" CommentCount="19" ContentLicense="CC BY-SA 3.0" />
  <row Id="3205" PostTypeId="2" ParentId="3199" CreationDate="2017-06-27T10:06:45.780" Score="31" Body="&lt;p&gt;One option might have been using “&lt;a href=&quot;https://en.wikipedia.org/wiki/Small-C&quot; rel=&quot;noreferrer&quot;&gt;Small C&lt;/a&gt;,” which was published in 1980 in Dr. Dobb's Journal magazine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Initially it generated code for the 8080, but was adapted for a few other CPU's. It was adapted to generate code for DOS/8088 but I do not know the date.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Small C was written in itself so you would need a CP/M-80 system to do the port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if I recall correctly, at the time, most things were done in Basic or assembler. There may have been a Forth implementation but that was always a niche language.&lt;/p&gt;&#xA;" OwnerUserId="4213" LastEditorUserId="5288" LastEditDate="2017-06-28T23:51:22.833" LastActivityDate="2017-06-28T23:51:22.833" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3206" PostTypeId="2" ParentId="3199" CreationDate="2017-06-27T10:35:09.653" Score="30" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/BDS_C&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;BDS C&lt;/strong&gt; compiler&lt;/a&gt; was released in 1979, ran on CP/M, and was capable of generating code for the Intel 8080 microprocessor. (It also ran on and generated code for the Zilog Z80, but that's not relevant here). This was a very popular, well-known CP/M compiler, and as Wikipedia says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It ran much faster and was more convenient to use than other Z80-hosted compilers of the time. It was possible to run BDS C on single-floppy machines with as little as 30K of RAM - something of a minor miracle by comparison to most other commercial compilers which required many passes and the writing of intermediate files to disk.&lt;br&gt;&#xA;  [ … ]&lt;br&gt;&#xA;  BDS C was very memory efficient, with fast compilation speeds.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Since the 8088/8086 processors used in the IBM PC are largely compatible with the 8080, I believe that using BDS C on a CP/M machine would have been a viable path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two processors aren't &lt;em&gt;completely&lt;/em&gt; binary-compatible—as in, an 8088 won't run 8080 code as would have been generated by the BDS C compiler. &lt;em&gt;But&lt;/em&gt;, the two processors are compatible on the &lt;em&gt;assembly language&lt;/em&gt; level, which means that the binary code could have been easily &lt;a href=&quot;https://stackoverflow.com/questions/32413579/is-old-assemblycode-still-usable/32414213#32414213&quot;&gt;transcoded using an automatic tool&lt;/a&gt;, or even by a human assembly-language programmer looking at the 8080 source disassembly. All you needed to do was to translate the opcodes over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you could have used Ron Cain's &lt;strong&gt;Small-C&lt;/strong&gt; compiler, the source code for which was published in the May 1980 issue of &lt;em&gt;Dr. Dobb's Journal&lt;/em&gt;. This compiler also targeted the 8080, but since its source was available (at some point, it was released into the public domain, but I can't find a precise date), you could have modified it to target the 8088 with minimal effort—and I really do mean &lt;em&gt;minimal&lt;/em&gt;. Small-C generated assembly code as its final output, which then had to be translated into machine code by an assembler, so all you really needed to do was plug in an x86 assembler.&lt;sup&gt;*&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either way, this would allow you to write and debug all of your C code on the CP/M machine, meaning that you wouldn't need access to any IBM pre-release hardware (which wasn't exactly forthcoming; the PC was basically a &lt;a href=&quot;https://en.wikipedia.org/wiki/Skunkworks_project&quot; rel=&quot;noreferrer&quot;&gt;skunkworks project&lt;/a&gt;, kept secret from most of the rest of the industry). CP/M machines were very affordable at this time, and there were plenty of them to choose from. If you wrote reasonably portable C, the porting would have been absolutely trivial. And then, once a C compiler was eventually released for the platform (and you knew it was going to be), you could drop the post-compilation opcode-translation step, switching your build process over to, for example, the newly-released &lt;a href=&quot;https://en.wikipedia.org/wiki/Lattice_C&quot; rel=&quot;noreferrer&quot;&gt;Lattice C compiler&lt;/a&gt; in 1982, which ran natively on the IBM PC under PC-DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More realistically, though, the only reason you'd even need to do this would be to make sure that you had software ready to run on the IBM PC on the day of launch. But most vendors weren't doing that—no one expected the IBM PC to be the runaway success that it was.&lt;sup&gt;*&lt;/sup&gt; So, what is more likely is that you were a shop developing software for CP/M machines and already using the BDS C compiler. You'd continue doing so until it was obvious that the IBM PC was going to catch on, and then it would be a simple matter of porting your existing C code base to Lattice C or any other newly-released C compiler targeting the IBM PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;__&lt;br&gt;&#xA;&lt;sub&gt;&lt;sup&gt;*&lt;/sup&gt; The few vendors who &lt;em&gt;were&lt;/em&gt; writing serious software for the IBM PC in 1980–81 were doing it in assembly. Microsoft had an assembler up and running (they had to—they were using it to &lt;strike&gt;steal&lt;/strike&gt; develop DOS), and Intel certainly had one.&lt;br&gt;&lt;br&gt;&#xA;There was also some commercial software development done in Pascal. IBM released a Pascal compiler (developed by Microsoft) for the PC in 1981, alongside its August launch, and I imagine that prototypes were available to prospective vendors (though I don't know this for certain). There were also other vendors who had Pascal development environments, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/UCSD_Pascal&quot; rel=&quot;noreferrer&quot;&gt;USCD Pascal system&lt;/a&gt; was one of the available operating systems for the IBM PC, in addition to CP/M and Microsoft's DOS.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="2037" LastEditorUserId="2037" LastEditDate="2017-06-28T14:54:29.090" LastActivityDate="2017-06-28T14:54:29.090" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="3207" PostTypeId="2" ParentId="899" CreationDate="2017-06-27T11:53:55.537" Score="6" Body="&lt;p&gt;A passive, non multiplexed 7 segment LCD display doesn't need a real &quot;protocol&quot; - but neither can you just apply voltage to segments from some I/O pin. LCD displays at their core need an AC drive waveform, otherwise the LC material will be quickly damaged. &#xA;Multiplexed displays tend to need more than two voltage levels per drive pin, and a more involved drive waveform - they are not like multiplexed LED displays that can take advantage of the rectifier behaviour of individual display elements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this COULD be generated in software, if coupled with a symmetric driver circuit and/or primitive DAC (resistor networks) driven by an I/O port device (or just an address decoder + latch) or even directly off the bus. This would need CONSTANT and prioritized attention by the software, though: If your timing slips, your AC waveforms effectively get a DC bias and your LC display suffers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A possible compromise would be using an IO port followed by clocked XOR gates (and symmetric drivers, again...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, either a dedicated LC driver chip, or a display with a builtin driver chip was used: In which case, these will have behaved just like any other parallel, Data+Address+Chipselect I/O device.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-06-27T11:53:55.537" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3208" PostTypeId="1" AcceptedAnswerId="3209" CreationDate="2017-06-27T12:10:44.787" Score="21" ViewCount="1291" Body="&lt;p&gt;This question is about the Commodore 64 and its graphics chip, the VIC-II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine that on a particular scanline, the VIC-II needs to fetch 40 bytes (the background tiles) and since it's a badline also it needs to fetch another 40 bytes (the color attributes). That's 80 fetches it needs to make. I know that this steals 40 cycles from the 6510.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, there are eight sprites, which are three bytes wide each, on that same line, so that's 104 bytes. Actually, the VIC-II must also have worked out that each of those sprites are on this scanline. From what I remember, that's 17 bytes of data for the sprite coordinates. So I think this scenario means the VIC-II has to fetch 121 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is that the most a VIC-II will need to fetch in one cycle? If the VIC-II needs to fetch 121 bytes from RAM during one badline, does that mean that it will steal more cycles from the 6510 than the usual 40?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2017-06-27T14:02:24.457" Title="When does the VIC-II read the sprite data?" Tags="&lt;commodore-64&gt;&lt;video&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3209" PostTypeId="2" ParentId="3208" CreationDate="2017-06-27T14:02:24.457" Score="16" Body="&lt;p&gt;There are 63 to 65 clock cycles in a scanline, depending on the VIC model (PAL, old/new NTSC). Each cycle consists of two phases, the 6510 is only able to access memory in the high phase, the VIC-II can access it in both phases. So, a PAL VIC-II can read 63 bytes from memory, without disturbing the processor at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sprite color and coordinates are stored in VIC-II registers, so they are always available, no memory reads are needed to access them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following accesses are made by the VIC-II in the low phase:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;pixel data, 40 bytes&lt;/li&gt;&#xA;&lt;li&gt;sprite data pointers, 8 bytes&lt;/li&gt;&#xA;&lt;li&gt;2nd byte of the sprite pixel row, when needed&lt;/li&gt;&#xA;&lt;li&gt;5 dummy reads for RAM refresh purposes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;that's 62 bytes, but as I've said, it doesn't bother the 6510 at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following accesses are made in the high phase:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;color attributes (graphics mode) or character codes (text mode), that's a bad line&lt;/li&gt;&#xA;&lt;li&gt;1st and 3rd bytes of the sprite pixels, when needed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That's 40 + 2*8 = 56 bytes in the worst case (when all 8 sprites are visible on a bad line), for which the processor has to be stopped. The 6510 must actually be signalled 3 cycles before a read access in the high phase, because it must first finish whatever it's doing. Unfortunately, the sprite and attribute accesses are not consecutive, therefore up 6 additional cycles can be wasted that way, meaning that the VIC-II can actually &quot;steal&quot; up to 62 cycles out of 63.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt&quot; rel=&quot;noreferrer&quot;&gt;See this excellent document for more details than you'd ever want to know.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="348" LastActivityDate="2017-06-27T14:02:24.457" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3210" PostTypeId="2" ParentId="3199" CreationDate="2017-06-27T17:56:00.283" Score="6" Body="&lt;p&gt;You could do the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Compile your code to 8080 assembler.&lt;/li&gt;&#xA;&lt;li&gt;Use a transcompiler like &lt;a href=&quot;http://www.patersontech.com/dos/Docs/86_Dos_usr_03.pdf#page=47&quot; rel=&quot;noreferrer&quot;&gt;TRANS&lt;/a&gt; (1980) or Digital Research &lt;a href=&quot;http://www.s100computers.com/Software%20Folder/Assembler%20Collection/Digital%20Research%20XLT86%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;XLT86&lt;/a&gt; (1981) to convert the output from #1 to 8086 assembler.&lt;/li&gt;&#xA;&lt;li&gt;Use an 8086 assembler to compile the output from #2 to a .COM file.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Partial credit goes to @mcleod_ideafix for &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/861/75&quot;&gt;his answer&lt;/a&gt; to a similar question.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-06-27T17:56:00.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3212" PostTypeId="2" ParentId="3199" CreationDate="2017-06-27T22:32:30.947" Score="1" Body="&lt;p&gt;You could write a x86 backend for &lt;a href=&quot;https://en.wikipedia.org/wiki/Portable_C_Compiler&quot; rel=&quot;nofollow noreferrer&quot;&gt;pcc&lt;/a&gt; (and a cross-assembler), or politely ask &lt;a href=&quot;https://en.wikipedia.org/wiki/Whitesmiths&quot; rel=&quot;nofollow noreferrer&quot;&gt;Whitesmiths Ltd.&lt;/a&gt; to deliver their x86 compiler earlier (InfoWorld reported on 29 September 1980 that it was at least 6 months away from release).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or just write in assembler (Intel ASM86 running on a Intel MDS) -- that's how IBM has written PC BIOS, apparently -- &lt;a href=&quot;http://www.os2museum.com/wp/the-ibm-pc-bios-and-intel-isis-ii/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.os2museum.com/wp/the-ibm-pc-bios-and-intel-isis-ii/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="87" LastActivityDate="2017-06-27T22:32:30.947" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3213" PostTypeId="1" CreationDate="2017-06-28T02:21:32.517" Score="15" ViewCount="2924" Body="&lt;p&gt;When did a C compiler first become commercially available for the Apple Macintosh?  And what was its name?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only programming languages that I recall were available for the Mac at launch (January 1984) were Microsoft Basic, and cross-compiling Pascal on a Lisa if one was in a developer program.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4025" LastEditDate="2017-06-29T05:11:07.480" LastActivityDate="2017-06-29T05:11:07.480" Title="What was the first C compiler for the Mac?" Tags="&lt;apple-macintosh&gt;&lt;programming&gt;&lt;c&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3214" PostTypeId="1" CreationDate="2017-06-28T02:30:29.113" Score="14" ViewCount="874" Body="&lt;p&gt;What is the the MOD music file format?  Exactly how does it relate to the Amiga 1000 audio hardware?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the MOD format become popular on non-Amiga computers?  If so, why?&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2018-08-24T07:52:58.407" Title="What is the relationship between Amiga audio and the MOD music file format?" Tags="&lt;amiga&gt;&lt;audio&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3215" PostTypeId="1" CreationDate="2017-06-28T02:34:53.470" Score="11" ViewCount="552" Body="&lt;p&gt;What features of the Amiga chipset architecture and/or Amiga OS made it possible to design the Video Toaster for the Amiga?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why weren't there similar (cost-effective) video products for the PC or Mac?&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2019-12-20T02:30:54.447" LastActivityDate="2019-12-20T02:30:54.447" Title="Amiga Video Toaster support" Tags="&lt;amiga&gt;&lt;video&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="3216" PostTypeId="2" ParentId="3199" CreationDate="2017-06-28T04:44:55.597" Score="3" Body="&lt;p&gt;You can either use a CP/M machine with an 8080 C compiler and port it when the IBM PC launches (August 1981) and BDS or Whitesmiths produce a compiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, and this was a common way of working then, you beg/borrow/steal access to a minicomputer with C (maybe Unix, maybe something proprietary) and develop on that.&lt;/p&gt;&#xA;" OwnerUserId="5276" LastActivityDate="2017-06-28T04:44:55.597" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3217" PostTypeId="2" ParentId="3215" CreationDate="2017-06-28T06:59:24.947" Score="10" Body="&lt;p&gt;The big thing is that the Amiga can natively work in NTSC. Don't know about early macs but for example VGA is totally incompatible with this standard so PCs weren't used that much for video editing in those days.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2017-06-28T16:54:00.127" LastActivityDate="2017-06-28T16:54:00.127" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="3218" PostTypeId="2" ParentId="3214" CreationDate="2017-06-28T09:36:21.657" Score="22" Body="&lt;p&gt;MOD is the file extension for SoundTracker modules. SoundTracker and its successors (NoiseTracker and ProTracker predominantly, although there are other derivatives) are sequencers, and load and save files in this format. It was originally designed for games and demo programmers - assembly code to play back the modules was commonly available and worked efficiently, and the module itself contained all the data needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modules embed all the required sound samples, and the &quot;patterns&quot;, essentially multiple 4x64 grids of musical notes and attributes. The 4 columns are matched to the Amiga's 4 audio channels; each of the 64 rows are a &quot;beat&quot; and the player steps through each row in time with the beat. Each cell has a musical note, a reference to the sample, and possibly some attributes which cause special behaviour. On each beat, the player takes the note and the sample reference in each column(channel) and tells the audio hardware to play it, and the frequency equivalent to the musical note. Also in the module file is the playlist, which tells the player in what order to play the patterns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The format was very popular with game and demo writers, and later for musicians in general, so there ended up with a very large body of music modules that were freely available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is very closely tied to the Amiga's hardware, specifically the Paula chip which was largely unchanged throughout the Amiga's product line:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Modules have 4 channels, like Paula&lt;/li&gt;&#xA;&lt;li&gt;The samples are 8-bit sampled voices, like Paula, and Paula can DMA the samples straight out of the module to play them&lt;/li&gt;&#xA;&lt;li&gt;Notes are stored as period values which are what Paula uses for sample rate adjustment&lt;/li&gt;&#xA;&lt;li&gt;Volume values range from 0 to 63, which is Paula's range.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For a long time this format was exclusively tied to the Amiga - the Amiga's peers did not have an audio capability that matched or exceeded the Amiga's, so they were impossible to play. However, technology moved forward for other platforms and they developed audio systems that exceeded that of the Amiga. MOD players started to become available for these other systems. That allowed these other systems to play back this large collection of freely-available music modules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As audio technology moved on and quality improved, new file formats took advantage. MP3 and its successors can represent higher resolution and higher bit rates, but a MOD file will always be 4-channel 8-bit sampled sound. There is still a &quot;scene&quot; for MOD files, similar to the demoscene and retro computing scene, and tools exist for modern platform to create and play MOD files.&lt;/p&gt;&#xA;" OwnerUserId="149" LastEditorUserId="149" LastEditDate="2018-08-24T07:52:58.407" LastActivityDate="2018-08-24T07:52:58.407" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="3219" PostTypeId="1" AcceptedAnswerId="3236" CreationDate="2017-06-28T11:32:00.937" Score="5" ViewCount="187" Body="&lt;p&gt;Yes, I still use Lotus 1-2-3 Release 2.4 on my HP 200LX. Anybody know of a good way to do something like insert row (&lt;code&gt;/wir&lt;/code&gt;), but only across a subset of columns? In other words, kind of like inserting a range of cells in Excel, and choosing shift cells down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know you could do something like &lt;code&gt;/m{r X}{end}{d}~{d}~&lt;/code&gt; (where you intend to move X+1 columns), but the &lt;code&gt;{end}{d}&lt;/code&gt; step wouldn't guarantee that you're moving &lt;em&gt;everything&lt;/em&gt; below the insertion point (if would stop at the next blank cell).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm open to clever macros, or (readily available) add-ins.&lt;/p&gt;&#xA;" OwnerUserId="4459" LastEditorUserId="3748" LastEditDate="2018-05-03T14:20:32.183" LastActivityDate="2018-05-03T14:20:32.183" Title="Insert a row, but only across some columns?" Tags="&lt;ms-dos&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3220" PostTypeId="2" ParentId="3213" CreationDate="2017-06-28T13:50:09.263" Score="36" Body="&lt;h1&gt;The Early Days&lt;/h1&gt;&#xA;&lt;p&gt;As you said, the most important languages on the Mac in its early days were Microsoft's BASIC, Pascal, and, of course, 68000 assembly. The Macintosh's System Software and ROMs were themselves programmed largely in assembly, with a bit of Pascal thrown in (mostly for pieces that were ported directly from the Lisa). C was merely a niche language in 1984, and I doubt very many copies of these were sold, but that doesn't mean you didn't have choices!&lt;/p&gt;&#xA;&lt;p&gt;The two earliest C compilers available for Macintosh were &lt;strong&gt;Hippo-C&lt;/strong&gt; and &lt;strong&gt;Consulair Mac C&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Other early options included Manx Software's &lt;a href=&quot;https://en.wikipedia.org/wiki/Aztec_C&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Aztec C&lt;/strong&gt;&lt;/a&gt; (see also &lt;a href=&quot;http://www.aztecmuseum.ca/intro.htm&quot; rel=&quot;noreferrer&quot;&gt;this site&lt;/a&gt;), &lt;a href=&quot;https://en.wikipedia.org/wiki/Megamax_C&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Megamax C&lt;/strong&gt;&lt;/a&gt;, and Softworks C (&lt;a href=&quot;http://www.shsmedia.com/kev.html&quot; rel=&quot;noreferrer&quot;&gt;which Kevin Killion claims was &amp;quot;the very first C language compiler for the Mac&amp;quot;, for which he wrote the front-end&lt;/a&gt;, but I cannot find independent verification for this claim). All of these compilers were available on other platforms, too, especially the Atari ST.&lt;/p&gt;&#xA;&lt;h3&gt;Hippo-C&lt;/h3&gt;&#xA;&lt;p&gt;As far as I can tell, the &lt;em&gt;very first&lt;/em&gt; C compiler ever released for the Macintosh was Hippo-C, developed by Wendell Brown, the founder of Hippopotamus Software.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Wendell_Brown&quot; rel=&quot;noreferrer&quot;&gt;The Wikipedia article on Brown&lt;/a&gt; has the following picture, showing him with Steve Jobs, with the caption claiming that the picture was taken &amp;quot;at the launch of Brown's Hippo-C software for Macintosh, January 1984&amp;quot;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:Steve_Jobs_with_Wendell_Brown_in_January_1984,_at_the_launch_of_Brown%27s_Hippo-C_software_for_Macintosh.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SL6ipm.jpg&quot; alt=&quot;Steve Jobs with Wendell Brown in January 1984, at the launch of Brown's Hippo-C for Macintosh&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sup&gt;(Image courtesy of Carol Rukomii Holladay, via Wikipedia, licensed under CC by-SA.)&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Macintosh was introduced to the world on January 24, 1984, and even if Brown had held a separate launch event a few days later for his C compiler, I doubt he could have persuaded Steve Jobs to show up. Plus, Jobs is wearing a silver bow-tie in the picture, which looks like the same one &lt;a href=&quot;https://www.youtube.com/watch?v=72JFlUjeNWk&quot; rel=&quot;noreferrer&quot;&gt;he wore that fateful day at Apple's Annual Shareholders Meeting&lt;/a&gt;. This is pretty compelling evidence that Hippo-C was the first C compiler for the Mac, available at the computer's launch.&lt;/p&gt;&#xA;&lt;p&gt;However, I can find &lt;em&gt;vanishingly&lt;/em&gt; little information online about Hippo-C. I find a few editions of &lt;em&gt;InfoWorld&lt;/em&gt; &lt;a href=&quot;https://books.google.com/books?id=Ai8EAAAAMBAJ&amp;amp;pg=PA24&amp;amp;lpg=PA24&amp;amp;dq=%22hippo-c%22+mac&amp;amp;source=bl&amp;amp;ots=uoGwd7Lkb9&amp;amp;sig=e2bR21ICgw7vO300MOels7y4Kmw&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=0ahUKEwik7Y-3mOHUAhWI1IMKHaCzA9YQ6AEIUTAM#v=onepage&amp;amp;q=%22hippo-c%22%20mac&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;offering it for sale&lt;/a&gt;, &lt;a href=&quot;http://www.macmad.org/newsletters/Nov1984MacMAD.pdf&quot; rel=&quot;noreferrer&quot;&gt;one off-handed mention of it in a November 1984 MUG newsletter&lt;/a&gt; (&amp;quot;…how about your impressions of the various development environments…Is Hippo C any good, or what?&amp;quot;), but no reviews of it in Macintosh magazines. Most of what I can find discusses it in relation to the Atari ST, for which it was also available. The Atari ST and the Macintosh both used Motorola's 68000 microprocessor, so it makes sense that the same assemblers and compilers could be used for both, but I can't be entirely certain that Hippo-C ran &lt;em&gt;natively&lt;/em&gt; on the Macintosh, as opposed to being a cross-compiler for the platform.&lt;/p&gt;&#xA;&lt;p&gt;Most likely, it never really caught on, so that by the time programmers had gotten serious and the Mac presses were rolling, it had been displaced by...&lt;/p&gt;&#xA;&lt;h3&gt;Consulair Mac C&lt;/h3&gt;&#xA;&lt;p&gt;It is confirmed by multiple independent sources that Consulair Mac C was available in 1984, but I can't find an exact launch date. &lt;a href=&quot;http://www.network172.com/files/2015/12/MacDev3.pdf&quot; rel=&quot;noreferrer&quot;&gt;This review&lt;/a&gt; by Léo Laporte in Issue #3 of &lt;em&gt;MacDeveloper&lt;/em&gt; magazine says that the author has &amp;quot;been using it full-time since November, '84&amp;quot;, so it was &lt;em&gt;at least&lt;/em&gt; commercially available by then. However, I'm not sure how long it was after the Mac's introduction that it became available. Whether or not it was available at the very beginning, this seems to have been the &lt;em&gt;most popular&lt;/em&gt; C compiler for the Mac in the early days, and there is plenty of information available about it.&lt;/p&gt;&#xA;&lt;p&gt;Consulair Mac C is also notable in that it is one of the few—perhaps the &lt;em&gt;only&lt;/em&gt;—early C development systems for Macintosh that were &lt;em&gt;not&lt;/em&gt; cross-platform. It was developed by Bill Duvall, who worked alongside Doug Englebart at Stanford on ARPAnet and later Xerox PARC on Smalltalk. Considering that Duvall also developed the &lt;a href=&quot;http://macgui.com/downloads/?cat_id=305&quot; rel=&quot;noreferrer&quot;&gt;Macintosh 68000 Development System&lt;/a&gt; (an assembler, known as MDS) for Apple, it is no real surprise that his C development system used the same editor and tools, being nearly drop-in compatible with MDS.&lt;/p&gt;&#xA;&lt;p&gt;All of the source code for the C libraries was supplied with the compiler, so programmers could modify it if they wanted, or even use it as a learning guide. This was pretty important, because examples of Mac code were not readily available at this time! (Only the &lt;code&gt;Str2Dec&lt;/code&gt; and &lt;code&gt;Dec2Str&lt;/code&gt; functions lacked source code, since these were licensed from Apple, not written by Duvall, and therefore shipped in binary form only.) There was even a makeshift console window provided, so you could actually make use of the decidedly command-line-centric functions in the standard library (&lt;code&gt;printf&lt;/code&gt;, &lt;code&gt;getc&lt;/code&gt;, etc.) from your Mac applications.&lt;/p&gt;&#xA;&lt;p&gt;Laporte's review (linked above) provides a number of interesting details about Consulair's Mac C, including what libraries it shipped with, what aspects of the language it supported, what else you needed to get started, and how much it cost. I won't quote all of this here, so go and read the article!&lt;/p&gt;&#xA;&lt;p&gt;There's also a March 1991 interview with Bill Duvall, conducted by Michael Swaine and originally published in &lt;em&gt;Dr. Dobb's Journal&lt;/em&gt;, available on &lt;a href=&quot;http://collaboration.cmc.ec.gc.ca/science/rpn/biblio/ddj/Website/articles/DDJ/1991/9103/9103h/9103h.htm&quot; rel=&quot;noreferrer&quot;&gt;this site&lt;/a&gt;. Although most of it is focused on Duvall's thoughts about HyperCard and later ventures, it does contain some interesting and relevant information about his C development system; in particular:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Dr. Dobb's Journal&lt;/strong&gt;: When did you first get involved with the Macintosh?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Duvall&lt;/strong&gt;: I became involved with the Mac some years before it was&#xA;released when Apple asked me to write an assembly language development&#xA;system for the Macintosh: an editor, a debugger, an assembler, and a&#xA;linker. Which I did.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;DDJ&lt;/strong&gt;: Why did Apple come to you?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Duvall&lt;/strong&gt;: The fellow that Apple hired to head up the Mac as an&#xA;engineering manager was Bob Belleville, a person with whom I had done&#xA;a lot of work at PARC. He had a need for a development system, knew&#xA;that I had some expertise in that area, and asked me to come and do&#xA;it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;DDJ&lt;/strong&gt;: Early Macintosh developers may know you as the author of that&#xA;development system, and more Mac developers should remember your&#xA;company, Consulair, for its C compiler. But Consulair was around&#xA;before the Mac.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Duvall&lt;/strong&gt;: Consulair was first formed in the mid-'70s. Most of our work&#xA;was in the area of word processing; in particular, we did a lot of&#xA;work in one of the early Japanese word processors. There was a fair&#xA;amount of systems work, writing operating systems. There was some&#xA;language development; we did some debugging systems, things like that.&#xA;In general, [it was] what you would classify as advanced development&#xA;or systems programming.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;DDJ&lt;/strong&gt;: You were doing tools for programmers, then?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Duvall&lt;/strong&gt;: We always worked on development systems, but primarily up&#xA;until the early to mid-'80s we had done development systems as&#xA;internal tools. In fact, we first wrote what later became the&#xA;Consulair C compiler in the late '70s as a tool for programming our&#xA;own projects. This was just after the publication of Kernighan and&#xA;Richie's original book, and I looked around to see what was the best&#xA;system programming language around, one that was going to be around&#xA;for the next few years, and came to the conclusion that C was probably&#xA;the best candidate. So I wrote a C compiler.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;DDJ&lt;/strong&gt;: Where did the commercial Consulair C compiler come into the&#xA;picture?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Duvall&lt;/strong&gt;: After the Mac was released to the world it became apparent&#xA;that there was a need for a C language development system. Since we&#xA;had a C compiler that we had been using internally for five years, it&#xA;was -- I won't say it was a short step, but it was a logical step --&#xA;to put that in a form that could be used commercially on the&#xA;Macintosh.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;DDJ&lt;/strong&gt;: It was well received. Didn't you get the first MacUser Editor's&#xA;Choice Award for a development language?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Duvall&lt;/strong&gt;: It's difficult to answer something like that. I, like many&#xA;people, suffer from the programmer's dilemma.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;DDJ&lt;/strong&gt;: The programmer's dilemma?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Duvall&lt;/strong&gt;: Any time you've worked on a program, you realize all of the&#xA;faults in it. It's difficult to go back and look at it and say, yes,&#xA;that was really important. Rather, you look at it and say, &amp;quot;Oh my&#xA;God.&amp;quot; But, yeah, I think it played an important role in the early&#xA;development of the Mac, although clearly it was superceded by MPW and&#xA;Lightspeed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Andy Hertzfeld also recalls the development of Consulair C, as part of &lt;a href=&quot;http://www.folklore.org/StoryView.py?story=RMaker.txt&quot; rel=&quot;noreferrer&quot;&gt;a larger recollection&lt;/a&gt; in which he describes how he developed a resource compiler that ran natively on the Mac, allowing him to ditch the Lisa when writing Mac programs:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I went on leave of absence from Apple in March 1984 (see Leave Of Absence), but I still was excited about writing software for Macintosh as an independent developer, and was full of ideas about different programs to write. But I wasn't happy about the fact that you still needed a Lisa to write software for the Mac; among other things, the recent linker problem had left a bad taste in my mouth regarding the Lisa development system. I had a Lisa at my house, but it really belonged to Apple, and I didn't want to have to buy one. I decided to try to cobble together an entirely Mac-based development system.&lt;/p&gt;&#xA;&lt;p&gt;Bill Duvall was an old friend of Bob Belleville's from Xerox who we seeded with a Mac prototype in the spring of 1983 so he could port his development system to it, including an assembler and a C compiler, to be sold by his own tiny company named Consulair. His linker even generated Macintosh code resources, but there was no equivalent of RMaker for building the other resources required by a Mac application - you still had to do that on a Lisa. I decided to rewrite RMaker for the Mac, so I could finally abandon the Lisa. I used assembly language, since the assembler was much further along than Consulair C was at the time. In a week or so, I had a new RMaker that was integrated with the Consulair tools, so you finally could write a complete application with just a Macintosh.&lt;/p&gt;&#xA;&lt;p&gt;In the summer of 1984, I got a call from Dan Cochran, who was the marketing person at Apple in charge of developer tools. He had heard about my new version of RMaker, and wanted to bundle it with the Consulair package. After a bit of negotiation, I sold it to Apple in exchange for a brand new LaserWriter prototype. I drove up to Bill Duvall's house in the Berkeley hills to help him incorporate RMaker into his system. When my reward arrived in October, I thought it was pretty cool to be the first on my block to have a LaserWriter, three months before it was officially announced.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This tells us a couple of neat things. First, Bill Duvall was given a Mac prototype in the spring of 1983 by Apple, which is what allowed him to have his development system available so soon. Also, the resource maker that eventually shipped with Consulair C was written (in assembler) by Hertzfeld himself—one of the original members of the Macintosh software development team.&lt;/p&gt;&#xA;&lt;p&gt;One significant limitation of Consulair Mac C—at least to our modern eyes—was that it did not include a source-level debugger. You had to use something like &lt;a href=&quot;https://en.wikipedia.org/wiki/MacsBug&quot; rel=&quot;noreferrer&quot;&gt;MacsBug&lt;/a&gt; or &lt;a href=&quot;http://basalgangster.macgui.com/RetroMacComputing/The_Long_View/Entries/2010/3/27_TMON.html&quot; rel=&quot;noreferrer&quot;&gt;TMON&lt;/a&gt; (by &lt;a href=&quot;https://en.wikipedia.org/wiki/ICOM_Simulations&quot; rel=&quot;noreferrer&quot;&gt;ICOM Simultations&lt;/a&gt;, which was &lt;em&gt;way&lt;/em&gt; better than MacsBug, but not free). Consulair C &lt;em&gt;did&lt;/em&gt; generate debugging symbols in a standard format that could be imported into either MacsBug or TMON, though, so you weren't totally on your own after a crash dumped you into a sea of object code.&lt;/p&gt;&#xA;&lt;p&gt;Although you can find &lt;em&gt;later&lt;/em&gt; versions of Consulair Mac C for download online (for example, &lt;a href=&quot;http://macintoshgarden.org/apps/consulair-mac-c-development-system&quot; rel=&quot;noreferrer&quot;&gt;Macintosh Garden&lt;/a&gt; and &lt;a href=&quot;http://macgui.com/downloads/?file_id=24076&quot; rel=&quot;noreferrer&quot;&gt;Mac GUI&lt;/a&gt; both offer version 5, which I believe is the last version ever released, and includes updates that make it HFS-compatible), I don't see anywhere that version 1 is hosted. Nor, unfortunately, do I have a copy of any of these older versions.&lt;/p&gt;&#xA;&lt;h1&gt;The Halcyon Days&lt;/h1&gt;&#xA;&lt;p&gt;Moving forward in time a bit, by 1986, C had joined Pascal as one of the premier and popular development languages for Macintosh software. (Apple themselves, though, were still heavily invested in Pascal. Macintosh's System Software continued to be written in a mix of 68000 assembly and Pascal up through System 6; System 7, circa 1990–91, was the first to have parts written in C.)&lt;/p&gt;&#xA;&lt;p&gt;Although Consulair's Mac C was still around, the two principal players by 1986 were &lt;strong&gt;LightSpeed C&lt;/strong&gt; and Apple's own &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Macintosh Programmer's Workshop (MPW)&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;Macintosh Programmer's Workshop&lt;/h3&gt;&#xA;&lt;p&gt;Although version 1.0 of MPW was released on September 24, 1986 (according to Wikipedia), with development having begun in late 1985 by Rick Meyers, Jeff Parrish, and Dan Keller (née Smith), this early version did not include a C compiler. Originally, MPW only supported Pascal, which was the language that Apple initially pushed for Macintosh software development. MPW was the official replacement for the Lisa Workshop, and what finally freed Mac programmers from having to cross-develop on Lisas. (Although, I believe you needed at least 1 MB of RAM to run MPW, which naturally limited you to developing on the newly-released [in 1986!] Macintosh Plus.)&lt;/p&gt;&#xA;&lt;p&gt;C support did not come to MPW until version 2.0, released on July 20, 1987. The C compiler that was included in this version was written by Green Hills' Software, under contract with Apple, with Mike Shannon serving as liaison at Apple. Interestingly, Green Hills wrote their C compiler in C—I'm not sure which compiler they used to bootstrap it, though! Green Hills Software has been around since 1982, and &lt;a href=&quot;http://www.greenhillssoftware.com&quot; rel=&quot;noreferrer&quot;&gt;is still around today&lt;/a&gt;, still developing compilers and other development tools, mainly for embedded systems.&lt;/p&gt;&#xA;&lt;p&gt;In version 3.0, MPW finally shipped with a C compiler developed in-house by Apple. Unlike the Green Hills compiler that it replaced, Apple's compiler was written in Apple Pascal and shared its code generator with MPW's Pascal compiler (the one that had been there since v1.0). It was this compiler that became famous for its &lt;a href=&quot;http://www.netfunny.com/rhf/jokes/91q3/cerrors.html&quot; rel=&quot;noreferrer&quot;&gt;quirky and comical error messages&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;What was unique about MPW was that it offered what was essentially a Unix-style shell (based on csh), running natively on the Macintosh. You could run shell scripts, there were command-line tools, and decidedly un-Mac-like behaviors (such as output redirection) were possible. MPW was really quite an odd duck, since it was not at all Mac-like, but it was also not fully Unix-compatible, either. It was also expensive in these early days (before Apple started giving it away for free, which didn't happen until after the PowerPC transition), so it was really only used by professional programmers.&lt;/p&gt;&#xA;&lt;p&gt;Again, later versions of MPW are readily available online (although no longer from Apple themselves, who would prefer to forget that the &amp;quot;classic&amp;quot; Mac OS ever existed), but I don't know where you can download any of the early versions.&lt;/p&gt;&#xA;&lt;p&gt;One last thing to note: while I &lt;em&gt;believe&lt;/em&gt; (though I can't find a confirmatory source) that even the earliest version of MPW required a Macintosh 512k, you could run Consulair Mac C on a 128k Macintosh (albeit with a bad case of disk-swapper's elbow, and a host of other challenges, like some of the RAM that was normally set aside for the screen buffer being repurposed for compilation, causing parts of your screen to fill with noise/&amp;quot;snow&amp;quot;—but hey, it worked)!&lt;/p&gt;&#xA;&lt;h3&gt;LightSpeed C&lt;/h3&gt;&#xA;&lt;p&gt;LightSpeed C was really the definitive and most widespread C development environment on the Macintosh. (It was also an extremely popular development environment on the 8-bit Atari machines of similar vintage.) It was developed by Michael Kahl, of THINK Technologies, and released in mid-1986. THINK Technologies was later &lt;a href=&quot;http://www.cbronline.com/news/symantec_acquires_think_technologies/&quot; rel=&quot;noreferrer&quot;&gt;gobbled up by Symantec Corporation&lt;/a&gt; (like so many other independent vendors), who continued to develop and release the tool under the name THINK C (having dropped &amp;quot;LightSpeed&amp;quot; from the name starting with version 4.0, circa 1988).&lt;/p&gt;&#xA;&lt;p&gt;No matter what it was called, LightSpeed/THINK C was powerful, fast, and (relatively) cheap—a winning combination. &lt;em&gt;BYTE&lt;/em&gt; magazine awarded it &amp;quot;Distinction&amp;quot; in the 1989 BYTE Awards, &lt;a href=&quot;https://archive.org/stream/byte-magazine-1989-01/1989_01_BYTE_14-01_PC_Communications_and_Annual_Awards_and_Digitizing_Tablets#page/n379/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;citing its &amp;quot;powerful features and low price&amp;quot;&lt;/a&gt;. &lt;a href=&quot;http://www.mactech.com/articles/mactech/Vol.02/02.08/Menus,Windows/index.html&quot; rel=&quot;noreferrer&quot;&gt;A July, 1986 article in &lt;em&gt;MacTech&lt;/em&gt; magazine&lt;/a&gt;, by Bob Gordon, recommends LightSpeed C as an excellent way to learn how to program C on the Macintosh, noting:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Its major advantages from our point of view is that it is very fast at compiling and linking and that it places you at the correct position in your source file if the compiler detects an error. The result is that you can edit, compile, link, and run your program very rapidly, make small variations in the code and determine their effect, and generally have the opportunity to make more mistakes in a shorter period of time. If we learn from our mistakes, Lightspeed C is a useful tool for learning C on the Macintosh.&lt;/p&gt;&#xA;&lt;p&gt;LightspeedC is different from the other available C compilers as it does not use a Unix-like setting &lt;em&gt;[Yea! -Ed.]&lt;/em&gt; -nor does it use separate programs in the Macintosh window environment. Instead it creates its own enviornment (that follows the Macintosh User Interface) from which all editing, compiling, linking, and running take place. The integrated editor is roughly similar to the Edit application. Menus available from inside the editor allow you to run, compile, or just check the syntax. As soon as the compiler detects an error, you are returned to the editor with the cursor at the location the compiler found the error. In other words, you get one error at a time.&lt;/p&gt;&#xA;&lt;p&gt;The link operation is extremely fast.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;However, Gordon does go on to disclaim a few problems in LightSpeed C, although most of these do not appear to be &lt;em&gt;actual&lt;/em&gt; problems with the development environment, but rather behaviors that he found confusing. A significant criticism, leveled often by reviewers and columnists, was that early versions did not include an assembler. Of course, I'm not sure how much that would have actually mattered to the average Mac programmer. The low-level gurus were probably already using MPW, which &lt;em&gt;did&lt;/em&gt; come with an assembler, and everyone else was writing in C because they &lt;em&gt;didn't want to&lt;/em&gt; use assembly. If they really needed one, assemblers were available from other vendors. And, THINK C eventually did ship with an assembler; in fact, it even supported inline assembly with the C compiler, in &lt;a href=&quot;https://groups.google.com/d/msg/comp.dsp/fHGFX9XcIMk/ya4NfTn2P-sJ&quot; rel=&quot;noreferrer&quot;&gt;a very easy-to-use implementation&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Although slightly less famous and less renowned than THINK Pascal, LightSpeed/THINK C was really the primary C development environment for Macintosh programmers through the late 1980s and early 1990s, until it was replaced by &lt;strong&gt;Metrowerks' CodeWarrior&lt;/strong&gt; circa 1994 (in part because Symantec had ruined it, but probably more so because of turmoil from the PowerPC transition, but that's getting far outside the scope of this answer). Interestingly, though, much of the development on CodeWarrior was done by folks who had worked on the original THINK C team, and CodeWarrior retained one of the most important features of THINK C: fast compile times.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.macintoshrepository.org/1803-lightningpaint-1-1&quot; rel=&quot;noreferrer&quot;&gt;LightningPaint&lt;/a&gt; was famously written in LightSpeed C, from which it borrows its name. This app was essentially a clone of MacPaint, but continued to be distributed as shareware long after Apple dropped MacPaint.&lt;/p&gt;&#xA;&lt;p&gt;Version 3.01 of LightSpeed C is also available on &lt;a href=&quot;http://macintoshgarden.org/apps/thinks-lightspeed-c-301&quot; rel=&quot;noreferrer&quot;&gt;Macintosh Garden&lt;/a&gt; and &lt;a href=&quot;http://macgui.com/downloads/?file_id=24077&quot; rel=&quot;noreferrer&quot;&gt;Mac GUI&lt;/a&gt;, along with later versions of THINK C.  Alas, older versions are missing-in-action, as for all the other development tools discussed here.&lt;/p&gt;&#xA;" OwnerUserId="2037" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-06-28T19:01:17.657" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="3221" PostTypeId="5" CreationDate="2017-06-28T14:18:14.897" Score="0" Body="&lt;p&gt;Do not use this tag. Use a specific tag for the CPU that the question concerns instead, not in addition. If the is a question that should be tagged with this tag but not with a specific CPU tag, the question is probably too broad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/q/110/276&quot;&gt;Do we need the CPU tag?&lt;/a&gt; for more details.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="278" LastEditDate="2017-06-28T20:44:26.860" LastActivityDate="2017-06-28T20:44:26.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3222" PostTypeId="4" CreationDate="2017-06-28T14:18:14.897" Score="0" Body="Do not use this tag - use a specific tag instead. See https://retrocomputing.meta.stackexchange.com/q/110/276" OwnerUserId="276" LastEditorUserId="278" LastEditDate="2017-06-28T20:44:26.860" LastActivityDate="2017-06-28T20:44:26.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3223" PostTypeId="5" CreationDate="2017-06-28T14:23:08.880" Score="0" Body="&lt;p&gt;This tag is for questions about the history of the C language and its use on retrocomputers, including C compilers targeting retro platforms.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;C programming questions are on-topic only so far as they are specific to a retro platform&lt;/strong&gt;, such as when asking about platform-specific compiler extensions. General questions about C programming (i.e. those that could apply to modern platforms as well) should be instead asked on &lt;a href=&quot;https://stackoverflow.com&quot;&gt;Stack Overflow&lt;/a&gt;. In particular, this tag is not for versions of C (such as C99) that are not being compiled for retrocomputers (such as code produced by Visual Studio 2013), despite the age of the standard.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="15334" LastEditDate="2021-02-08T17:36:54.627" LastActivityDate="2021-02-08T17:36:54.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="3224" PostTypeId="4" CreationDate="2017-06-28T14:23:08.880" Score="0" Body="For questions regarding the use or installation of the C language on retrocomputers." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-06-28T14:23:08.880" LastActivityDate="2017-06-28T14:23:08.880" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3225" PostTypeId="5" CreationDate="2017-06-28T14:26:44.563" Score="0" Body="&lt;p&gt;For questions regarding the ZX80 computer, made by Sinclair Research, in ready-made or kit form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX80 was released in 1980 and superseded by the ZX81 in 1981.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-06-28T14:26:44.563" LastActivityDate="2017-06-28T14:26:44.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3226" PostTypeId="4" CreationDate="2017-06-28T14:26:44.563" Score="0" Body="The Sinclair ZX80 was a low cost home computer introduced in 1980." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-06-28T14:26:44.563" LastActivityDate="2017-06-28T14:26:44.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3227" PostTypeId="1" CreationDate="2017-06-28T16:55:58.367" Score="17" ViewCount="2605" Body="&lt;p&gt;Back in the MS-DOS days, there was a program &lt;a href=&quot;https://en.wikipedia.org/wiki/DoubleDOS&quot; rel=&quot;noreferrer&quot;&gt;DoubleDOS&lt;/a&gt; that you could run that would split your machine in half and multitask two separate DOS programs. While it didn't particularly work well for games (as far as I remember), it was popular for system operators of bulletin board systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did DoubleDOS work? I know that I had used it on 8086 machines back in the day which I don't believe had many of the real context switching capabilities that modern CPUs use to support multitasking. Was it simply hooking up to an interrupt and storing session 1's CPU registers, context switching, restoring session 2's registers, running and then running until the next interrupt? Was memory space adjusted accordingly or did programs which didn't go simply through DOS and the BIOS fail to operate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(it has been a loooong time since I've used it, but another question just ignited an old brain cell :-) )&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2019-02-09T20:13:19.457" Title="How did DoubleDOS work?" Tags="&lt;ms-dos&gt;&lt;ibm-pc&gt;&lt;multitasking&gt;" AnswerCount="3" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3228" PostTypeId="1" CreationDate="2017-06-28T21:06:40.397" Score="9" ViewCount="933" Body="&lt;p&gt;When I was a kid, we had a PC-XT with a lot of GW-Basic programs on it. I am trying to track down one in particular -- it was a music player of sorts. A menu (all monochrome text as I recall) and you could select one of many songs, which would be played through the PC speaker (monophonic rather than polyphonic). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember a lot of TV and Movie Themes, as well as classical and popular tunes. I spent some time trying to track it down and turned up a few similar items, but not that exact one. This would have been the mid-80s, in the SF Bay Area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For sure it contained the &quot;William Tell Overture&quot; which I have seen as its own file &lt;code&gt;WILLTELL.BAS&lt;/code&gt; in a few places.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anybody remember this, or something like it?&lt;/p&gt;&#xA;" OwnerUserId="5286" LastEditorUserId="4025" LastEditDate="2017-06-29T02:42:53.243" LastActivityDate="2020-10-27T05:23:57.563" Title="Looking for a specific BASIC music program from the 80s" Tags="&lt;ibm-pc&gt;&lt;basic&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3229" PostTypeId="1" CreationDate="2017-06-28T22:34:09.707" Score="27" ViewCount="4584" Body="&lt;p&gt;When running some &lt;a href=&quot;https://en.wikipedia.org/wiki/Keygen&quot; rel=&quot;noreferrer&quot;&gt;keygens&lt;/a&gt; (i.e. applications that generate working license keys for possibly pirated software), low-quality background music is played while the user waits.  &lt;a href=&quot;https://www.youtube.com/watch?v=c17k4LfLkaE&quot; rel=&quot;noreferrer&quot;&gt;See this sample YouTube video&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What history contributed to these musical &quot;cracktros&quot; still prevalent in keygens?&lt;/p&gt;&#xA;" OwnerUserId="5289" LastEditorUserId="4025" LastEditDate="2017-06-29T03:30:29.007" LastActivityDate="2017-06-29T05:31:02.177" Title="Why did keygens play music?" Tags="&lt;history&gt;&lt;audio&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3230" PostTypeId="2" ParentId="3229" CreationDate="2017-06-29T02:23:52.763" Score="19" Body="&lt;p&gt;Short answer: It's a holdover from the Warez scene, and more specifically around the time of the Commodore Amiga when pirates had ready access to music software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the day (and less often nowadays), pirates &quot;signed&quot; cracked software with their name or emblem or something to that effect. As more and more pirates entered the scene and piracy became more difficult, a cracker's signature became a source of pride and a show of the owner's technical prowess, as well as a show of professional superiority over other crackers. Think, for example, the needlessly flashy company logos at the beginning of movies or games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the Amiga raised the general bar on the graphics and sound capabilities of the home PC, cracktros started becoming art pieces in their own right. Your average pirate now had access to music, dynamic color, layering, and composing tools that didn't exist one generation before. In the spirit of competition between pirates, flashy intros and elaborate music that stressed the technical prowess of the machine and the cracker became a must for cracked software, keygens included. Some famous examples of these &quot;demos&quot; pushed to incredible degrees is &lt;a href=&quot;https://www.youtube.com/watch?v=oTmpqBn4dfA&quot; rel=&quot;noreferrer&quot;&gt;Megademo&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=5aXsrYI3S6g&quot; rel=&quot;noreferrer&quot;&gt;State of the Art.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays, some kind of cute intro is often included in modern keygens, although it's less about technical prowess and more of a throwback.&lt;/p&gt;&#xA;" OwnerUserId="644" LastEditorUserId="644" LastEditDate="2017-06-29T05:31:02.177" LastActivityDate="2017-06-29T05:31:02.177" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3231" PostTypeId="2" ParentId="3199" CreationDate="2017-06-30T05:22:10.500" Score="2" Body="&lt;p&gt;To be realistic... in early 1981, you wouldn't be writing software for the announced but not released IBM PC, because it was expected to be a proprietary box with a proprietary OS, excluding the (relative) wealth of CP/M software already available. IBM owned the big computing industry in 1981, and it's PC was expected to be like its big iron: closed, proprietary, and not conducive to the rough and tumble world of the personal computer of the late 70's. It wasn't expected to sell very well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'd be targeting either Apple II or CP/M, to get the broadest possible market for 1981. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you wouldn't be writing in C in 1981. You'd be writing in assembler, BASIC, maybe FORTRAN, whatever you could get a compiler for. C for personal computers didn't become popular until the mid to late 1980's. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, writing one's own C compiler was not outside the realm of possibility in those days. Since the language is easy to parse, and is fairly close to assembler, writing a native code compiler wouldn't be that difficult, especially if the alternative was writing in assembler. &lt;/p&gt;&#xA;" OwnerUserId="5302" LastActivityDate="2017-06-30T05:22:10.500" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3233" PostTypeId="2" ParentId="3164" CreationDate="2017-06-30T13:08:09.227" Score="2" Body="&lt;p&gt;It is relatively easy to show that the sentence&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The operators div2 and rem2 are those generally implemented directly by processor instructions giving the sign of the remainder the same as the sign of the quotient.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;is self contradictory.  Processors giving the sign of the remainder the same as the sign of the quotient are hard to find.  So hard that I found none.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, Blaauw and Brooks's &lt;em&gt;Computer architecture, history and evolution&lt;/em&gt; is usually a very good source to find out the design spaces explored by historical computers.  They have a quite precise description of 28 architectures of historical importance (from Zuse to the 8080), and they have chapters describing each design choice in which they don't hesitate to use other examples if they are relevant.  Yet on the subject of the sign of the remainder, they give no variation at all.  They just state that the customary approach is to have the sign of the remainder be the sign of the dividend.  They signal that some have proposed to use the sign of the divisor instead, but they give no examples of processors following that proposition (BTW, the only one I'm aware is Knuth's MMIX and that's an artificial one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also looked at the manuals of some other processors too recent to have been considered by Blaauw and Brooks. All of those which had dividing instructions(*) were using the customary sign-of-remainder-is-sign-of-dividend algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is for sure possible that I've missed a processor using the sign of quotient algorithm.  But considering that that algorithm seems to offer no interesting properties (sign of dividend has lot of sign symmetries, sign of divisor and always positive have a periodic remainder), I consider that improbable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;the original statement is self contradictory&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the only remainder algorithm for remainder's sign which can be considered as generally implemented is the sign of dividend (I've yet to find one processor which provided something else)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;it is unlikely that they desired to provide an uncommon operation as having the sign of the remainder the same as the sign of the quotient does not offer interesting properties.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;(*) I've not looked in details what kind of result was provided by those having division-assist instructions.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="5269" LastActivityDate="2017-06-30T13:08:09.227" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3234" PostTypeId="5" CreationDate="2017-06-30T13:33:12.783" Score="0" Body="&lt;p&gt;Sales are important for production of computers - they not only get computers to consumers but also fund development of more computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This tag should be used for questions about the sale of computers at the time they were being sold by their manufacturers and &lt;em&gt;not&lt;/em&gt; for attempts at selling computers in the present day.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="278" LastEditDate="2017-06-30T19:48:57.333" LastActivityDate="2017-06-30T19:48:57.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3235" PostTypeId="4" CreationDate="2017-06-30T13:33:12.783" Score="0" Body="For questions about the sale of computers, or sales representatives or outlets for computer companies, at a time when retrocomputers were being sold by their respective manufacturers. Do not use this tag for &quot;questions&quot; that attempt to sell computers - such posts are not questions and are not on-topic." OwnerUserId="357" LastEditorUserId="278" LastEditDate="2017-06-30T19:48:57.333" LastActivityDate="2017-06-30T19:48:57.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3236" PostTypeId="2" ParentId="3219" CreationDate="2017-06-30T14:53:04.587" Score="2" Body="&lt;p&gt;Well, I managed to put together something workable. There are two functions: &lt;code&gt;{INSDOWN}&lt;/code&gt; and &lt;code&gt;{DELUP}&lt;/code&gt; that work like Excel's insert/delete with shifting cells down/up. You can do a whole range, and it will vacate/remove the cells across all the included rows and columns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two functions, &lt;code&gt;{INSDOWN}&lt;/code&gt; and &lt;code&gt;{DELUP}&lt;/code&gt;, take a range name as their sole argument. This can either be a range name (e.g. &lt;code&gt;NEWROW&lt;/code&gt;) or absolute addresses (e.g. &lt;code&gt;A4..C8&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also Alt-I and Alt-D macros that allow for interactive insertion/deletion. Move to a corner of the range, hit the macro hotkey to begin the range selection, move to the opposite corner, and hit Enter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sure you don't use these macros to insert/delete cells located above the macros themselves, or things will get a bit weird. :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the macro text via print-to-file with the list cell formulas option (and a tiny bit of manual formatting for readability). Make sure you &lt;code&gt;/rnlr&lt;/code&gt; the stuff in column A to set up the appropriate range names.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A1: 'ROWNUM&#xA;A3: 'NEXTROWNUM&#xA;A5: 'STARTCOLNUM&#xA;A6: 'STARTCOL&#xA;    B6: @IF(STARTCOLNUM&amp;gt;26,@CHAR(@INT(STARTCOLNUM/26)+64),&quot;&quot;)&amp;amp;@CHAR(@MOD(STARTCOLNUM,26)+64)&#xA;A8: 'ENDCOLNUM&#xA;A9: 'ENDCOL&#xA;    B9: @IF(ENDCOLNUM&amp;gt;26,@CHAR(@INT(ENDCOLNUM/26)+64),&quot;&quot;)&amp;amp;@CHAR(@MOD(ENDCOLNUM,26)+64)&#xA;A11: 'INSRANGE&#xA;    B11: 'INSPOINT&#xA;A13: 'SETUPINSRANGE&#xA;    B13: '{PUT ROWNUM,0,0,@STRING(@CELL(&quot;row&quot;,@@(INSRANGE)),0)}&#xA;    B14: '{PUT NEXTROWNUM,0,0,@STRING(@CELL(&quot;row&quot;,@@(INSRANGE))+@ROWS(@@(INSRANGE)),0)}&#xA;    B15: '{PUT STARTCOLNUM,0,0,@CELL(&quot;col&quot;,@@(INSRANGE))}&#xA;    B16: '{PUT ENDCOLNUM,0,0,@CELL(&quot;col&quot;,@@(INSRANGE))+@COLS(@@(INSRANGE))-1}&#xA;A18: 'INSDOWN&#xA;    B18: '{DEFINE INSRANGE:S}&#xA;    B19: '{SETUPINSRANGE}&#xA;    B20: '{CALC}&#xA;    B21: '/m{STARTCOL}{ROWNUM}..{ENDCOL}8192~&#xA;    B22: '{STARTCOL}{NEXTROWNUM}~&#xA;A24: '\I&#xA;    B24: '{ABS}{?}{woff}~&#xA;    B25: '/rncINSPOINT~{ESC}&#xA;    B26: '{INSDOWN INSPOINT}&#xA;    B27: '/rndINSPOINT~{won}&#xA;A29: 'DELUP&#xA;    B29: '{DEFINE INSRANGE:S}&#xA;    B30: '{SETUPINSRANGE}&#xA;    B31: '{CALC}&#xA;    B32: '/m{STARTCOL}{NEXTROWNUM}..{ENDCOL}8192~&#xA;    B33: '{STARTCOL}{ROWNUM}~&#xA;A35: '\D&#xA;    B35: '{ABS}{?}{woff}~&#xA;    B36: '/rncINSPOINT~{ESC}&#xA;    B37: '{DELUP INSPOINT}&#xA;    B38: '/rndINSPOINT~{won}&#xA;A40: 'woff&#xA;    B40: '{WINDOWSOFF}{PANELOFF}&#xA;A42: 'won&#xA;    B42: '{WINDOWSON}{PANELON}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4459" LastActivityDate="2017-06-30T14:53:04.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3237" PostTypeId="1" CreationDate="2017-06-30T16:01:57.260" Score="18" ViewCount="4482" Body="&lt;p&gt;I have three different IBM PS/2 machines and all of them are in perfect working order—except for the floppy drives. None of the floppy drives will read disks, which means all I can do is key in BASIC programs. This gets old fast, especially for an assembly-language programmer!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have any &quot;spare&quot; PS/2 floppy drives, and even if I did, they would very likely be broken, too! For some reason, these drives just didn't hold up well. And have become &lt;em&gt;extremely&lt;/em&gt; scarce in the intervening years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I do have a pile of &lt;em&gt;standard&lt;/em&gt; 3.5&quot; floppy drives that work just fine. (Some of them even &lt;em&gt;older&lt;/em&gt; than the broken PS/2 drives.) It would be really nice if I could just drop one of these drives in my PS/2s. Unfortunately (and quite ironically), the PS/2 series is not IBM-compatible. Their floppy drives used a card-style &quot;edge&quot; connector that carried both power and data, and plugged directly into a slot on a daughter-board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The photo on the left shows a front-shot of an OEM PS/2 floppy drive, just like the ones in my machines. The photo on the right is a better shot of the connector on the back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Floppy_IBM_PS2_M70_front.JPG&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lm1On.jpg&quot; alt=&quot;Front shot of OEM PS/2 floppy drive&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/File:IBM_PS2_MCA_Model_70,_riser_for_floppy_and_hard_drive.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/adC2w.png&quot; alt=&quot;Close-up of connector on back of OEM PS/2 floppy drive&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;(Left image courtesy of Tomáš Slavotínek. Right image adapted from original by Dale Mahalko. Both are via Wikipedia, licensed under CC by-SA.)&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way to adapt/convert this proprietary PS/2-specific connector to allow a standard 34-pin PC floppy drive to be plugged in? The data and power are both provided on the PS/2 connector, so there should be a way to build an adapter. Anyone know of a source for a pinout? Better yet, has ever done this before and know that it works?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Assume both drives have identical capacities, so that once the electrical interface problems were solved, the software should work without a hitch. The PS/2 supported 1.44 MB and 2.88 MB 3.5&quot; floppies, but all of mine are 1.44 MB drives, and that's the same capacity of &quot;standard&quot; drive that I'd want to replace it with.)&lt;/p&gt;&#xA;" OwnerUserId="2037" LastEditorUserId="2037" LastEditDate="2017-06-30T16:08:36.707" LastActivityDate="2021-02-16T02:08:13.437" Title="Is it possible to adapt a standard PC floppy drive to work in an IBM PS/2?" Tags="&lt;hardware&gt;&lt;floppy-disk&gt;&lt;restoration&gt;&lt;ibm&gt;" AnswerCount="3" CommentCount="13" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3238" PostTypeId="5" CreationDate="2017-07-01T08:13:41.893" Score="0" Body="&lt;p&gt;Defragmentation is the process of rearranging blocks of data on a disk so that related blocks of data (e.g. all blocks of data in a certain file) are next to each other. File systems become fragmented as files are created, deleted and modified and blocks are written into the gaps. This slows down file access as the read head has to seek in order to find the next block. Defragmentation does not prevent this but it can remove fragmentation from a file system.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-07-01T08:13:41.893" LastActivityDate="2017-07-01T08:13:41.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3239" PostTypeId="4" CreationDate="2017-07-01T08:13:41.893" Score="0" Body="For questions about defragmentation of file systems, the process of defragmentation or the effects of hard disk fragmentation." OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-07-01T08:13:41.893" LastActivityDate="2017-07-01T08:13:41.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3240" PostTypeId="1" CreationDate="2017-07-01T22:58:30.150" Score="-7" ViewCount="704" Body="&lt;p&gt;Reading some of the questions here got me to thinking... how many of the old methods, software or hardware, are still with us today? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My two examples: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;HTML. It's line oriented, for crying out loud. Do you know how much development effort is wasted working around that limitation, rather than address any part of the screen at any time? Dates back to line oriented text displays that the original hypertext of the 1970's was designed to run on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, a lot of new desktop PC's still have at least one ISA or ISA compatible slot on the motherboard. &lt;/p&gt;&#xA;" OwnerUserId="5302" LastActivityDate="2017-07-02T00:08:28.817" Title="How many old computing methods are still with us today?" Tags="&lt;hardware&gt;&lt;software&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="0" ClosedDate="2017-07-02T07:45:29.530" ContentLicense="CC BY-SA 3.0" />
  <row Id="3241" PostTypeId="2" ParentId="3240" CreationDate="2017-07-02T00:08:28.817" Score="6" Body="&lt;p&gt;I'd say many, many more than one could expect. Examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Any current computer has either a Von Neumann architecture, or a Harvard arquitecture. There possible may be other exotic architectures, but the vast majority of current day computer systems fall into any of these two categories.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The three major OS for desktop computers have some sort of terminal interface, despite how fancy their graphic system is.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The keyboard layout we use today can be dated back to the days of the PC-AT design. Maybe earlier.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Any 32-bit Windows version that supports MS-DOS, is still supporting some data structures that can be dated back to the CP/M days: when Windows load and run a .COM file, it loads it at offset 100h. The memory before that offset is reserved for the command line, and, if the command has one or two parameters, the OS creates two empty FCB's (File Control Block) for the command to use them in case those two parameters are files. FCB's were in fact deprecated with DOS 2.0, and they were only used in DOS 1.x . FCB's are an important part of the CP/M interface with files.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;About your two examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I'd say HTML parsers are character oriented, not line oriented. In fact, an HTML parser does ignore new line/carriage return characters. And on top of that, there is the  tag which allows the designer to put content on any position on the browser window (I'm not an HTML expert so it may happen that DIV is not the only one to allow that)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It's very rare that new desktop PCs have ISA slots. They may have ISA-style devices, for legacy OS, but ISA slots are gone long ago. They may be seen on some industrial-rated motherboards.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="105" LastActivityDate="2017-07-02T00:08:28.817" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3242" PostTypeId="1" AcceptedAnswerId="3243" CreationDate="2017-07-02T10:08:52.420" Score="31" ViewCount="7673" Body="&lt;p&gt;Was the original C compiler written in some old assembly language and now later &lt;a href=&quot;https://en.wikipedia.org/wiki/Flex_(lexical_analyser_generator)&quot; rel=&quot;noreferrer&quot;&gt;flex&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/GNU_bison&quot; rel=&quot;noreferrer&quot;&gt;bison&lt;/a&gt; are used instead?&lt;/p&gt;&#xA;" OwnerUserId="297" LastEditorUserId="15334" LastEditDate="2021-01-21T12:57:28.263" LastActivityDate="2021-01-21T12:57:28.263" Title="Which tools were used to create the C language?" Tags="&lt;history&gt;&lt;c&gt;&lt;compilers&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="3243" PostTypeId="2" ParentId="3242" CreationDate="2017-07-02T13:45:19.580" Score="46" Body="&lt;p&gt;C didn't spring into being suddenly, but was created by slowly modifying the &lt;a href=&quot;https://en.wikipedia.org/wiki/B_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;B&lt;/a&gt; language--which was written in itself.  Therefore you might say that C was always written in itself, but at first it was just a slightly modified B.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dennis Ritchie describes the evolution of C in &lt;a href=&quot;http://www.bell-labs.com/usr/dmr/www/chist.html&quot; rel=&quot;noreferrer&quot;&gt;The Development of the C Language&lt;/a&gt;.  He started by making small improvements to the B language:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In 1971 I began to extend the B language by adding a character type and also rewrote its compiler to generate PDP-11 machine instructions instead of threaded code. Thus the transition from B to C was contemporaneous with the creation of a compiler capable of producing programs fast and small enough to compete with assembly language. I called the slightly-extended language NB, for `new B.' &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Eventually, he made enough changes that the language deserved a new name:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;After creating the type system, the associated syntax, and the compiler for the new language, I felt that it deserved a new name; NB seemed insufficiently distinctive. I decided to follow the single-letter style and called it C, leaving open the question whether the name represented a progression through the alphabet or through the letters in BCPL. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="3324" LastEditorUserId="780" LastEditDate="2017-07-02T21:54:48.403" LastActivityDate="2017-07-02T21:54:48.403" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3244" PostTypeId="2" ParentId="3242" CreationDate="2017-07-02T18:42:49.503" Score="12" Body="&lt;p&gt;As is evident from its name, YACC (Yet Another Compiler Compiler) was not the first compiler writing aid. Its predecessor was the &lt;a href=&quot;http://www.multicians.org/tmg.html&quot; rel=&quot;noreferrer&quot;&gt;TMG&lt;/a&gt; tool.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;TMG was the compiler definition tool used by Ken Thompson to write the compiler for the B language on his PDP-7 in 1970. B was the immediate ancestor of C.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;tmg&lt;/code&gt; executable can still be seen on the UNIX V6 disks, along with &lt;code&gt;yacc&lt;/code&gt;. In UNIX V7, AFAIR, &lt;code&gt;tmg&lt;/code&gt; was already omitted.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-07-02T18:42:49.503" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3245" PostTypeId="1" CreationDate="2017-07-03T05:09:19.617" Score="9" ViewCount="968" Body="&lt;p&gt;I recently got me head round the basics of how a CPU works after watching Ben Eaters 8bit bread board computer series of internet videos.&#xA;Now I am hooked and i want to take my understanding further.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there windows based software that simulates the building of a computer?&#xA;For example, a system based on the 6502, where I could start with learning the basic of the chip and build up to creating a NES or C64. Although the hardware part is important, the ideal for me is to understand practically how to go from the relatively simple operations of a CPU to communicating with peripheral and generating text and graphics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for and tips and ideas.&lt;/p&gt;&#xA;" OwnerUserId="5322" LastActivityDate="2017-07-04T13:37:28.243" Title="Is the software available to simulate building a computer from the ground up? For example a system based on the 6502" Tags="&lt;assembly&gt;&lt;6502&gt;&lt;simulator&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ClosedDate="2017-07-07T00:20:16.650" ContentLicense="CC BY-SA 3.0" />
  <row Id="3246" PostTypeId="1" AcceptedAnswerId="3248" CreationDate="2017-07-03T06:23:17.180" Score="10" ViewCount="550" Body="&lt;p&gt;so I've been doing some digging, and I've downloaded the first release of mozilla source code. I'm trying to build it in sheepshaver using codewarrior 4 pro. Ultimately my goal is to try and hack something that will handle HTTPs so that I can at least navigate to web sites that I currently can't see on my classic mac. maybe even &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm following the build instructions here:&#xA;&lt;a href=&quot;http://marc.info/?l=mozilla-documentation&amp;amp;m=90222373931141&quot; rel=&quot;noreferrer&quot;&gt;http://marc.info/?l=mozilla-documentation&amp;amp;m=90222373931141&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About half way down that page, there are a list of downloads necessary to get Mozilla to build. The problem I'm running into is that after significant digging, I've been able to find alternate links and download all of the dependencies except for 3...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the three I'm missing are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;CWASTEEdit: &lt;a href=&quot;http://www.bact.wisc.edu/CWASTEEdit/CWASTEEdit.sit.hqx&quot; rel=&quot;noreferrer&quot;&gt;http://www.bact.wisc.edu/CWASTEEdit/CWASTEEdit.sit.hqx&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Menu Sharing Toolkit: &lt;a href=&quot;ftp://ftp.scripting.com/userland/menuSharingToolkit4.1.sit.hqx&quot; rel=&quot;noreferrer&quot;&gt;ftp://ftp.scripting.com/userland/menuSharingToolkit4.1.sit.hqx&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;ToolFrontEnd: &lt;a href=&quot;ftp://dev.apple.com/devworld/Periodicals/develop/develop25/develop_Issue_25_code/ToolFrontEnd.sit.hqx&quot; rel=&quot;noreferrer&quot;&gt;ftp://dev.apple.com/devworld/Periodicals/develop/develop25/develop_Issue_25_code/ToolFrontEnd.sit.hqx&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(obviously the above links are long expired...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've managed to find a CWaste 1.0 and later MenuSharing toolkits but they are the wrong versions, so I'm unsure if they will build properly.. if anyone knows where I can locate the versions specified that would be very helpful. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest roadblock however, is the one from apple: 'ToolFrontEnd'. I've got nothing on this one. Does anyone know of an archive of apple's devworld periodicals from 1998?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I've created a web page detailing my efforts: &lt;a href=&quot;http://andrew.colchagoff.com/netscape/&quot; rel=&quot;noreferrer&quot;&gt;http://andrew.colchagoff.com/netscape/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2187" LastEditorUserId="2187" LastEditDate="2017-07-05T04:38:28.930" LastActivityDate="2017-10-30T18:40:15.487" Title="Trying to build First Mozilla Release (Netscape 5)" Tags="&lt;mac-os-classic&gt;&lt;netscape&gt;" AnswerCount="2" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3247" PostTypeId="2" ParentId="3245" CreationDate="2017-07-03T15:00:10.823" Score="7" Body="&lt;p&gt;There's a book &lt;a href=&quot;https://www.amazon.co.uk/dp/B004HHORGA/ref=dp-kindle-redirect?_encoding=UTF8&amp;amp;btkr=1&quot; rel=&quot;noreferrer&quot;&gt;The Elements of Computing Systems: Building a Modern Computer from First Principles&lt;/a&gt; which takes the reader through the steps in designing and building computers from the logic gate level to the high level language level. The processor you build is actually one of the authors' own design, and although a 16 bit processor is quite simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I mention it is that the book uses a number of software tools to emulate the various components it discusses. In particular, it has an HDL simulator which will allow you to build complex circuits, including, e.g. processors from virtual logic gates. This is, I think what you want. The software is all available for free from the book's associated web site&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.nand2tetris.org/software.php&quot; rel=&quot;noreferrer&quot;&gt;http://www.nand2tetris.org/software.php&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One problem you'll find once you've implemented your 6502 is that it will be dog slow. Once you get to that point and want to start using (for example) 6502 assembler, it's better to switch to a software emulator of which there are many.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having reread your question, I think my recommendation might be starting at a lower level than you want. I'll leave the answer here anyway, just in case you are interested in how processors are designed from the ground up.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-07-03T15:00:10.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3248" PostTypeId="2" ParentId="3246" CreationDate="2017-07-03T21:58:28.987" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Obviously the above links are long expired...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The original links may have expired, but the Internet Archive &lt;a href=&quot;http://web.archive.org/web/19960901000000/http://www.bact.wisc.edu:80/CWASTEEdit/CWASTEEdit.sit.hqx&quot; rel=&quot;noreferrer&quot;&gt;made a copy of CWASTEEdit&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Internet Archive does not archive &lt;code&gt;ftp&lt;/code&gt; sites, so the file must be found elsewhere. It seems that &lt;code&gt;ftp://dev.apple.com/&lt;/code&gt; has only disappeared relatively recently - many text files still refer to it. Many mirrors have been made of individual sections, but I haven't yet found any containing the devworld periodicals.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-07-03T21:58:28.987" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="3249" PostTypeId="2" ParentId="3197" CreationDate="2017-07-03T23:28:01.830" Score="11" Body="&lt;p&gt;I worked for SAS when it acquired Lattice C in 1983. SAS needed a C compiler so it could port the SAS System to the IBM PC. I was part of a group whose job it was to create a &quot;cross-compiler&quot; that ran on IBM's CMS operating system but generated code for the IBM PC. I was experienced in CMS program development so my job was to write enough of the C standard library (memory management, I/O, etc.) to be able to run the compiler on CMS. Other members of the team included ex-Lattice employees who were familiar with code generation, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SAS/C was a compiler that ran on IBM operating systems that could be used to create executables that ran on CMS and IBM's MVS (now Z/OS) O/S. We leased the compiler very successfully but eventually IBM created its own C compiler that eventually took over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I worked on that product for 6 or 7 years. It was a lot of fun and I wrote some of the best code in my 30+ year career.&lt;/p&gt;&#xA;" OwnerUserId="5335" LastActivityDate="2017-07-03T23:28:01.830" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3250" PostTypeId="5" CreationDate="2017-07-04T08:22:17.157" Score="0" Body="&lt;p&gt;Netscape, formerly Mosaic, was one of the first browsers for the WWW.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The browser was first released in 1994.  It underwent several releases and introduced a number of standards later adopted by the industry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use this tag for questions on the use of any version of Netscape and its derivatives.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-07-04T08:22:17.157" LastActivityDate="2017-07-04T08:22:17.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3251" PostTypeId="4" CreationDate="2017-07-04T08:22:17.157" Score="0" Body="For questions regarding the Netscape Web Browser." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-07-04T08:22:17.157" LastActivityDate="2017-07-04T08:22:17.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3252" PostTypeId="5" CreationDate="2017-07-04T08:37:27.170" Score="0" Body="&lt;p&gt;For questions regarding the implementation or use of multitasking on a retrocomputer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multitasking is a form of parallel processing enabling the concurrent execution of tasks - programs.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-07-04T08:37:27.170" LastActivityDate="2017-07-04T08:37:27.170" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3253" PostTypeId="4" CreationDate="2017-07-04T08:37:27.170" Score="0" Body="Questions regarding running more than one task concurrently on a retrocomputer." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-07-04T08:37:27.170" LastActivityDate="2017-07-04T08:37:27.170" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3254" PostTypeId="2" ParentId="3245" CreationDate="2017-07-04T13:37:28.243" Score="2" Body="&lt;p&gt;A possible approach could be starting with a logic simulator (like &lt;a href=&quot;http://www.cburch.com/logisim/&quot; rel=&quot;nofollow noreferrer&quot;&gt;logisim&lt;/a&gt;). When it becomes all to slow, emulate your architecture in your favorite programming language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A second approach could be building your system from scratch using a FPGA.&lt;/p&gt;&#xA;" OwnerUserId="4853" LastActivityDate="2017-07-04T13:37:28.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3255" PostTypeId="1" AcceptedAnswerId="3256" CreationDate="2017-07-04T16:29:16.247" Score="11" ViewCount="1433" Body="&lt;p&gt;I'm looking at &lt;a href=&quot;https://web.archive.org/web/20161016210121/http://www.cs.dartmouth.edu/~mckeeman/cs48/mxcom/doc/x86.html&quot; rel=&quot;noreferrer&quot;&gt;this summary of the Intel x86 integer instruction set&lt;/a&gt; (though the same data seems to have been published in a number of places), which gives instruction timings on a per-instruction-variant basis for the Intel CPUs from 8088 to Pentium.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, take the &lt;code&gt;CBW&lt;/code&gt; mnenomic (opcode 98 hex):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CBW     Convert byte to word   (AL --&amp;gt; AX)&#xA;&#xA;                bytes   8088    186     286     386     486     Pentium&#xA;                 1       2       2       2       3       3       3   NP&#xA;&#xA;        Example:        cbw&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is included in the 2 clock cycles stated for the 8088? Or the 3 cycles for the 386?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As one specific example to hopefully give an idea of what I'm looking for: do those clock cycles include the memory fetch of the instruction, or is that assumed to have happened before one starts counting cycles?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, what about instructions such as &lt;code&gt;CALL&lt;/code&gt; which do implicit memory accesses, such as CALL's &lt;code&gt;PUSH&lt;/code&gt;(es) to the stack for the return address? Do the 23 cycles stated for a near CALL on an 8088 include that, considering that memory access would be at the mercy of RAM latency, which (particularly on later CPUs) is not &lt;em&gt;necessarily&lt;/em&gt; directly related to the CPU clock?&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-07-04T16:34:37.453" LastActivityDate="2019-02-13T16:37:17.760" Title="When specifying Intel 80x86 instruction execution time, what is included in the cycle count?" Tags="&lt;intel&gt;&lt;performance&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3256" PostTypeId="2" ParentId="3255" CreationDate="2017-07-04T16:57:40.797" Score="15" Body="&lt;p&gt;The documented execution times count the cycles required to execute the instruction itself, including any memory accesses caused by the instruction, and ignoring everything else. The Intel manuals provide pseudo-code showing what each instruction does; you can consider that the cycle counts cover that, only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus in CBW’s case, the &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/components/intel/8086/210200-002_iAPX88_Book_1983.pdf&quot; rel=&quot;noreferrer&quot;&gt;iAPX88 manual&lt;/a&gt; shows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (AL) &amp;lt; 80H then (AH) ← 0 else (AH) ← FFH&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In CALL’s case:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if Inter-Segment then&#xA;  (SP) ← (SP) - 2&#xA;  ((SP) + 1 : (SP)) ← (CS)&#xA;  (CS) ← SEG&#xA;(SP) ← (SP) - 2&#xA;((SP) + 1 : (SP)) ← (IP)&#xA;(IP) ← DEST&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which covers the pushes. When moving to the 386, both instructions gain 32-bit variants (98h is CWDE in 32-bit mode) which can explain the added cycles: you need additional checks to choose between 16- and 32-bit behaviour. (The instruction mix changed quite a bit anyway so different cycle counts aren’t surprising on a 386 or 486.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, the execution times ignore three of the main “cycle eaters” (up to the 486):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the prefetch queue, which takes time before an execution starts running and is variable based on circumstances outside the executed instruction’s control;&lt;/li&gt;&#xA;&lt;li&gt;DRAM refresh, which steals memory cycles independently of executing instructions;&lt;/li&gt;&#xA;&lt;li&gt;wait states, which delay instructions in variable ways again outside the execution’s control;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and eaters relevant on later CPUs, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the effects of caches;&lt;/li&gt;&#xA;&lt;li&gt;alignment penalties (which can be calculated using the number of memory transfers, which is documented in some timing tables).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This explains why the cycles given for any specific opcode are constant (or deterministic formulas), at least before Pentiums: any variability is excluded. It also explains most of the differences between 8088 and 8086 instruction times: any two-byte access takes four cycles more on the 8088 than on the 8086. It explains the &lt;code&gt;CALL&lt;/code&gt; timings too: 23 cycles is for a near direct call on the 8088, where the relative displacement is in the prefetch buffer and doesn’t need to be retrieved; the time taken here is the push required for the 16-bit near return address, which explains the four-cycle difference compared to the 8086. A far direct call takes 36 cycles on the 8088 v. 28 cycles on the 8086, &lt;em&gt;i.e.&lt;/em&gt; the difference in time taken to push two words to the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ultimate reference for all this, up to the 486 era, is Michael Abrash’s &lt;a href=&quot;http://www.jagregory.com/abrash-black-book/#chapter-4-in-the-lair-of-the-cycle-eaters&quot; rel=&quot;noreferrer&quot;&gt;In the Lair of the Cycle-Eaters&lt;/a&gt; chapter in the &lt;em&gt;Graphics Programming Black Book&lt;/em&gt; (which is adapted from &lt;em&gt;Zen of Assembly Language&lt;/em&gt;). After that you should check out &lt;a href=&quot;http://www.agner.org/optimize/#manuals&quot; rel=&quot;noreferrer&quot;&gt;Agner Fog’s optimisation manuals&lt;/a&gt; (and starting with the Pentium, things get quite a bit more complicated, even more on the latest CPUs which have many other sources of variability). The timing table you link to is greatly simplified, there are much more detailed tables available in &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/components/intel/&quot; rel=&quot;noreferrer&quot;&gt;Intel’s documentation&lt;/a&gt; or in books such as &lt;em&gt;The Processor and Coprocessor&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-02-13T16:37:17.760" LastActivityDate="2019-02-13T16:37:17.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="3257" PostTypeId="2" ParentId="3215" CreationDate="2017-07-04T20:09:04.897" Score="13" Body="&lt;p&gt;I think is a mix of features that made the videotoaster a good match for the Amiga.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The Amiga 2000 has an internal slot where both video signals and parallel port signals are available. This permits to Amiga and video expansion to talk conveniently.&lt;/li&gt;&#xA;&lt;li&gt;Among the video signals there is XCLK which permits to sync the Amiga with an external clock.&lt;/li&gt;&#xA;&lt;li&gt;Another important video signal is ZD which is high (or low?) when palette entry 0 is in use at a given pixel. This permits to the video extension to implement color key. The Enhanced Chip Set was even more flexible.&lt;/li&gt;&#xA;&lt;li&gt;Amiga can show 4096 colors in HAM mode and animate graphics at reasonable speed.&lt;/li&gt;&#xA;&lt;li&gt;Amiga can use overscan reducing the size of the borders&lt;/li&gt;&#xA;&lt;li&gt;Sprites, Copper and bitplanes are extensively used to encode data towards the video toaster&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="124" LastActivityDate="2017-07-04T20:09:04.897" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3258" PostTypeId="5" CreationDate="2017-07-05T12:51:19.803" Score="0" Body="&lt;p&gt;Compression is used for representing a given data set in less space than would be required for simply storing the data in a readily parseable form. The term may refer to lossless compression, where the original raw data is preserved, or lossy compression, where the meaning of the original data is preserved.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="278" LastEditDate="2017-07-15T09:06:41.183" LastActivityDate="2017-07-15T09:06:41.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3259" PostTypeId="4" CreationDate="2017-07-05T12:51:19.803" Score="0" Body="For questions about compression. May refer to lossless or lossy compression, and may refer to algorithms or utilities." OwnerUserId="357" LastEditorUserId="278" LastEditDate="2017-07-15T09:06:41.183" LastActivityDate="2017-07-15T09:06:41.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3260" PostTypeId="1" AcceptedAnswerId="3265" CreationDate="2017-07-05T17:25:59.660" Score="10" ViewCount="2125" Body="&lt;p&gt;Many early computers used TV sets as monitors. With an NTSC TV set, you could really only count on about 200 scan lines of vertical resolution, and for horizontal resolution, maybe 192 color clocks at a most optimistic reckoning, or maybe 300-400 pixels usable horizontal resolution if you're willing to accept some color artifacts, the upshot being a TV set could do 40x25 text but not much better than 40 columns and definitely no more than 25 rows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get the impression some early computers could get a sort of graceful degradation, could do better than the above while staying in the NTSC ballpark, taking advantage of a monitor if available and falling back to TV otherwise, by generating composite video, displaying this on a monitor if available, otherwise converting it to RF for a TV display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Presumably you still have to stay within overall NTSC parameters, but that's nominally 240p (when you don't use interlacing); could you that way get closer to being able to actually use 240 scan lines?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, how high could the practical horizontal resolution get in that scenario, if you happened to have a composite video monitor plugged in? High enough for 80 column text that you could actually use all day without eyestrain?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-07-07T05:53:17.230" Title="Actual resolution of composite video monitors" Tags="&lt;graphics&gt;&lt;ntsc&gt;&lt;color-display&gt;" AnswerCount="4" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3261" PostTypeId="2" ParentId="3260" CreationDate="2017-07-05T17:57:55.103" Score="6" Body="&lt;p&gt;I'm not sure if I understand the question correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TV composite is bandwidth limited because the color carrier signal blocks higher frequency. This means one particular type of signal &lt;em&gt;cannot&lt;/em&gt; &quot;gracefully degradate&quot;: If the horizontal resolution is too high, you'll just get colored jumble on the TV, and not somehow a fuzzy image in lower resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RF modulation has nothing to do with it: It's the composite signal itself that is limited that way, and the fact that many color TVs didn't have a composite input and one needed to modulate the composite signal itself onto a RF carrier like for broadcast TV doesn't matter it this respect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would it have been possible to use the NTSC timing, and display the full 240 lines on a monitor? Certainly, but that wouldn't make a lot of sense, because with a different timing one could display even more lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Composite monitors could easily do 80x25 (with 9x14 dot matrix, IIRC) at the beginning of the homecomputer era (e.g. Apple II 80-column video card). That signal wouldn't display on a TV, at all, even though it used the same RCA plug.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Monitors for business-oriented computers were capable of doing this or better long before. The Xerox Alto did 606x808 bitmapped graphics in 1973.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-07-05T17:57:55.103" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3262" PostTypeId="2" ParentId="3260" CreationDate="2017-07-05T19:25:05.240" Score="9" Body="&lt;p&gt;It depends on whether the TV is color or black-and-white/monochrome.  Older B&amp;amp;W TVs (and ordinary TV electronics and tubes converted into monochrome monitors by some el-cheapo monitor vendors), did not block (filter out) color burst frequencies (with the associated IQ bandwidth), and the cheap analog filtering did gracefully degrade as the bandwidth was pushed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most old TVs had vertical and horizontal overscan pots (variable resistors) for adjustments inside the back.  The edges of the TV display rectangle defaulted to being hidden behind the TV bezel.  By using the overscan adjustments to shrink the image, one could fit more width and height (in pixels) on the visible portion of the display within the TV bezel cut-out (and distortion limits).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the actual usable resolution could vary quite a bit by how the &quot;TV&quot; was set up or adjusted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;280 x 192 pixels was a safe sub-region for a non-specially-adjusted/off-the-shelf analog color TV.  Tweak the pots, and one could display more.  Using a B&amp;amp;W TV set or tube with modified electronics, even more pixels were possible.  But eventually the contrast would roll-off, with the vertical limit set by the inductances of the yoke on the neck of the tube.  (High-resolution CRT monitors use custom magnetic yoke designs, very different from the ones manufactured for consumer TV sets).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC, old electronics magazines (circa 196x to early 197x?) had articles on how to mod a B&amp;amp;W TV's electronic circuit chassis (tube or discrete transistor) for use as a monitor or an XY oscilloscope.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-07-07T05:53:17.230" LastActivityDate="2017-07-07T05:53:17.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3263" PostTypeId="1" AcceptedAnswerId="4663" CreationDate="2017-07-05T21:53:45.833" Score="13" ViewCount="379" Body="&lt;p&gt;So, I inherited this old Epson Equity LT...  It's a laptop with internal Ni-Cd batteries.  No battery quick disconnect, but apparently they're at least somewhat removable as the manual says that you can have them replaced at a shop (well, maybe 20 years ago you could have!).  Batteries don't hold a charge at this point, but neither does it get hot like they're in danger of melting down (yet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it had a user serviceable battery, I'd just pull it, send it to recycling, and run the system off wall power.  However, with the batteries not being user serviceable I figure there's at least a chance that they're part of the power filtering system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know if it's safe to run it without the batteries installed?  I'd hate to spend the time removing them and potentially doing damage to their connections only to find I needed them installed...  However, I would like to have them gone to avoid a potential future problem!&lt;/p&gt;&#xA;" OwnerUserId="481" LastEditorUserId="357" LastEditDate="2017-07-06T14:48:46.687" LastActivityDate="2017-09-06T00:16:08.383" Title="Dealing with old laptop batteries?" Tags="&lt;battery&gt;&lt;epson&gt;&lt;portable&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3264" PostTypeId="2" ParentId="3260" CreationDate="2017-07-06T00:03:46.070" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;...i was using my A500 with a amber composite monitor. Terrible monitor for an amiga, except for &lt;a href=&quot;http://www.amiga.org/forums/showthread.php?t=41527&amp;amp;page=3#td_post_688373&quot; rel=&quot;nofollow noreferrer&quot;&gt;interlace mode which had almost no flicker&lt;/a&gt;.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I don't know which particular monitor was referenced above (perhaps a &lt;a href=&quot;http://www.1000bit.it/ad/bro/zenith/ZDS-122-123S.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zenith ZVM-122-A&lt;/a&gt;), but the Commodore &lt;a href=&quot;http://www.zimmers.net/cbmpics/mlcomp2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;1080&lt;/a&gt; (&lt;a href=&quot;http://www.bigbookofamigahardware.com/bboah/product.aspx?id=1532&quot; rel=&quot;nofollow noreferrer&quot;&gt;link2&lt;/a&gt;) and &lt;a href=&quot;http://www.zimmers.net/cbmpics/mlcomp4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;2080&lt;/a&gt; (&lt;a href=&quot;http://www.bigbookofamigahardware.com/bboah/product.aspx?id=864&quot; rel=&quot;nofollow noreferrer&quot;&gt;link2&lt;/a&gt;) color monitors also had &lt;a href=&quot;https://books.google.com/books?id=d-tPdHcBE9wC&amp;amp;lpg=PA190&amp;amp;ots=-2m0XSRo4Q&amp;amp;pg=PA190#v=onepage&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;long-persistence phosphors&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The disadvantages of interlacing include an annoying flicker when displaying 400 or more interlaced lines... The problem is further compounded by the high contrast in which computers display objects; this contrast makes the slower refresh apparent to the human eye.&lt;/p&gt;&#xA;&lt;p&gt;The only way around this problem is to use a monitor with long-persistence phosphors. However, these special phosphors in themselves create problems: a displayed image may smear as it moves on the screen, and the slow phosphors usually make the overall image dimmer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This helps explain the earlier quote about how an amber composite monitor, besides being monochrome, was a &amp;quot;terrible monitor for an Amiga&amp;quot; (a multimedia/games machine).&lt;/p&gt;&#xA;&lt;p&gt;Interlaced mode on an A500 is 400 (NTSC) or 512 (PAL) horizontal &lt;em&gt;lines of resolution&lt;/em&gt;, and 320 (LowRes) or 640 (HiRes) vertical lines. A composite connection limits the color bandwidth, so in summary, I would say that &lt;strong&gt;the maximum useful resolution of a composite NTSC video monitor designed for productivity is about 320×400 pixels (color) or 640×400 pixels (monochrome)&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-07-06T02:41:35.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3265" PostTypeId="2" ParentId="3260" CreationDate="2017-07-06T00:32:48.473" Score="8" Body="&lt;p&gt;NTSC provides 227.5 colour cycles per line; PAL is very close to 283.75. In both cases, the visible area is around 80% of the line, but most home computers had a much bigger border than that — e.g. (of those I know offhand) the Acorn machines paint for 40µs, which is 62.5% of the line; the 48kb Spectrum paints for 128/224ths, which is around 57%; over in NTSC land the Atari 2600 paints for close to 70% of a line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a useful caveat though: colour cycles per line is a corollary of the normal line period and the colour subcarrier frequency. Since TVs apply some tolerance in timing you can do what at least both Atari and Apple did in NTSC: provide a slightly longer than usual line, such that per the colour subcarrier frequency it's exactly 228 colour cycles long. That way you can paint a decent number of individual colour pixels and have the effects of colour banding be uniform down the screen and from frame to frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Atari's case at least, that amounts to populating 160 individual colour cycles†.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anybody had done the same thing in PAL then they'd probably have stretched to a line long enough to contain 284 colour cycles, and painted between 170 and 200 of them. Though the phase alternating part of PAL means that you wouldn't get the same consistency vertically, which is presumably why nobody did. The PAL Ataris just end up no longer being aligned with the colour subcarrier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That all being said, if you're asking about horizontal resolution in the abstract then don't discount the option of just doing it in black and white. Colour TVs are supposed to suppress any decoded colours if there was no colour burst — that's going back to the transition period when some channels were broadcasting in colour and some weren't, and you didn't want false colours showing up all over the place on those that weren't and which also weren't pre-filtering their signal. On some TVs that might cut the low-pass filter out of the loop. If so then you can do a lot more pixels and expect them to show up cleanly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ditto if displaying on a cheap black and white TV as the colour subcarrier frequencies were picked so that a combination of phosphor persistence, persistence of vision and psychology make the colour part of the signal hard for a human being to detect even if a pre-colour TV, with no concept of distinguishing the colour part of the signal, is tuned to a colour broadcast. Therefore you could send one of those a relatively high-frequency signal and expect it to be rendered without deliberate filtering: as a rule of thumb, you can multiply the horizontal resolution by four††.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II is a machine that will omit a colour burst in text mode to get that benefit on compatible televisions. Some very old machines, such as the ZX80 and ZX81, are purely monochrome so don't output a colour burst at all. ZX BASIC could well look better on a ZX81 than a ZX Spectrum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the numerical answers: 160–200 colour if you want the nicest possible artefacting, 320–400 if you don't mind some artefacts, more like 640 or so if you're in black and white and are lucky with the TV set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;† actually the Atari outputs either 160 or 152 pixels per line because the way it handles object movement means that it sometimes omits the left-hand eight pixels. You'll have seen it in many titles as short black horizontal lines on the left margin that move around as the sprites do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;†† the hand-waving version: if the colour subcarrier is n Hz then per Nyquist you need to capture 2n samples fully to describe it, but colour in NTSC and PAL is encoded in quadrature so there are actually two parts to the colour signal encoded exactly out of phase, which makes 4n. But more persuasively, sampling at four times the colour subcarrier is the official industry recommendation for digital preservation of archive composite video.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-07-06T00:39:09.300" LastActivityDate="2017-07-06T00:39:09.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3266" PostTypeId="2" ParentId="3263" CreationDate="2017-07-06T06:46:34.390" Score="8" Body="&lt;p&gt;Ni-Cd cells like the ones used in the last century have one strong advantage over the Li-based battery cells we use today: They simply die silently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As long as they are not leaking and contaminate the inwards of your computer, I see no reason why you shouldn't just go on using that computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than that, quite a lot of Ni-Cd battery packs have been built from standard-off-the-shelf 1.2V AA or AAA cells and are thus relatively easy to replace.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-07-06T11:25:03.450" LastActivityDate="2017-07-06T11:25:03.450" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3267" PostTypeId="1" AcceptedAnswerId="3278" CreationDate="2017-07-06T08:00:08.133" Score="3" ViewCount="1100" Body="&lt;p&gt;For a computer that took a variable number of clock cycles to execute floating point instructions, what would be the formula to estimate its performance in &lt;a href=&quot;https://en.wikipedia.org/wiki/FLOPS&quot; rel=&quot;nofollow noreferrer&quot;&gt;FLOPS&lt;/a&gt; assuming that it can execute either &lt;strong&gt;A&lt;/strong&gt; add instructions, or &lt;strong&gt;M&lt;/strong&gt; multiply instructions, or &lt;strong&gt;D&lt;/strong&gt; divide instructions per second in average?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it reasonable to use just the value of &lt;strong&gt;M&lt;/strong&gt;, as was done in the first line of &lt;a href=&quot;https://en.wikipedia.org/wiki/FLOPS#Cost_of_computing&quot; rel=&quot;nofollow noreferrer&quot;&gt;the table&lt;/a&gt;, using &quot;About 2400 IBM 7030 Stretch supercomputers [...] IBM 7030 Stretch performs one floating-point multiply every 2.4 microseconds.&quot; to represent the performance of 1 GFLOPS, or were there better formulas?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, converting from Whetstones to FLOPS appears unreliable. The ratio of MWIPS to MFLOPS in &lt;a href=&quot;http://www.roylongbottom.org.uk/whetstone.htm#anchorAlliant&quot; rel=&quot;nofollow noreferrer&quot;&gt;this table&lt;/a&gt; varies substantially even for the same family of processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't care that &lt;em&gt;In the past, FLOPS was considered a marketing term and thus subject to rather over-optimistic reporting&lt;/em&gt;, as mentioned in an answer below. I'm asking how it was computed.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-07-07T21:57:02.400" LastActivityDate="2017-07-08T18:50:00.480" Title="How to compute performance of a CPU in FLOPS?" Tags="&lt;history&gt;&lt;performance&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3268" PostTypeId="2" ParentId="3267" CreationDate="2017-07-06T12:56:09.197" Score="6" Body="&lt;p&gt;The &lt;a href=&quot;https://www.top500.org/project/&quot; rel=&quot;noreferrer&quot;&gt;TOP500 project&lt;/a&gt; uses the &lt;a href=&quot;http://www.netlib.org/utk/people/JackDongarra/faq-linpack.html#_Toc27885709&quot; rel=&quot;noreferrer&quot;&gt;Linpack Benchmark&lt;/a&gt; to determine FLOPS ratings. In the past, FLOPS was considered a marketing term and thus subject to rather over-optimistic reporting.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-07-06T12:56:09.197" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="3269" PostTypeId="5" CreationDate="2017-07-06T14:17:59.080" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-07-06T14:17:59.080" LastActivityDate="2017-07-06T14:17:59.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3270" PostTypeId="4" CreationDate="2017-07-06T14:17:59.080" Score="0" Body="For questions about portable computers, including laptops and &quot;luggables&quot;." OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-07-06T14:48:40.330" LastActivityDate="2017-07-06T14:48:40.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3272" PostTypeId="2" ParentId="2924" CreationDate="2017-07-06T21:24:13.663" Score="7" Body="&lt;p&gt;There is a fascinating publication called &lt;a href=&quot;https://books.google.co.nz/books?id=AKyuk5YDQC8C&amp;amp;lpg=PA66&amp;amp;dq=plasma%20vs%20crt%201970&amp;amp;pg=PR1#v=onepage&amp;amp;q=plasma%20vs%20crt%201970&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;Flat Panel Displays in Perspective&lt;/a&gt;, put out by the (now closed) &lt;a href=&quot;https://en.wikipedia.org/wiki/Office_of_Technology_Assessment&quot; rel=&quot;noreferrer&quot;&gt;Office of Technology Assessment&lt;/a&gt;, United States Congress. The key &lt;a href=&quot;https://books.google.co.nz/books?id=AKyuk5YDQC8C&amp;amp;lpg=PA66&amp;amp;dq=plasma%20vs%20crt%201970&amp;amp;pg=PA66#v=onepage&amp;amp;q=plasma%20vs%20crt%201970&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;quote&lt;/a&gt; from the publication:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...the first direct current (DC) plasma displays were segmented displays developed in the 1970s to replace the Nixie tube. Later in the decade, dot-matrix versions were developed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It doesn't give exact dates but if development of dot-matrix DC panels didn't happen until the &quot;late 70s&quot; then it's safe to assume the technology could not have become commercially viable until some time later, i.e. in this case the mid-80s.&lt;/p&gt;&#xA;" OwnerUserId="5342" LastEditorUserId="5342" LastEditDate="2017-07-07T02:01:05.063" LastActivityDate="2017-07-07T02:01:05.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3273" PostTypeId="2" ParentId="2924" CreationDate="2017-07-06T22:46:39.520" Score="5" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/PLATO_(computer_system)#NSF_involvement&quot; rel=&quot;noreferrer&quot;&gt;Plato IV&lt;/a&gt; computer terminal introduced in 1972 had a 512×512 pixel plasma display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason why plasma displays were never popular in battery-powered laptops is because they use a lot of power compared to LCD displays, especially when &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Portable&quot; rel=&quot;noreferrer&quot;&gt;not all laptops were backlit&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-07-06T22:46:39.520" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3274" PostTypeId="2" ParentId="3263" CreationDate="2017-07-07T16:07:17.270" Score="6" Body="&lt;p&gt;The battery probably isn't a part of the power-filtering system. If you aren't sure if you'll be able to use the laptop without it, just disassemble the laptop, remove the battery and power on the computer. If it works, then there's nothing to be worried about. If it doesn't, firstly check if you have connected everything properly; If everything seems OK, then insert the battery again and check if it changes anything - if it will work then but not without the battery, just leave it inside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before sending the battery to the recycling center, i would suggest to try to replace the cells - you may make it work like a new one! Firstly, if you don't feel confident in electronics, don't do it - this process will include desoldering existing cells and soldering new ones, which is kinda dangerous if you don't take precautions, and may be hard for a beginner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before I even start on how to do it, i must write that i give &lt;strong&gt;no warranty&lt;/strong&gt; that you won't destroy your laptop/battery and/or injure yourself. Be careful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A clean desk&lt;/li&gt;&#xA;&lt;li&gt;Lots of time, patience, and some soldering skills&lt;/li&gt;&#xA;&lt;li&gt;Flat and/or phillips screwdriver&lt;/li&gt;&#xA;&lt;li&gt;Soldering iron&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;First, if your battery is put together using screws, unscrew them. If you don't see any, then carefully insert your flat screwdriver in the slit and pry the battery open. Be patient with this step, try avoid damaging the plastic.&#xA;Second step is to determine what cells your battery uses. They should have a numer like 18650 on them (but they probably won't be random 18650s - 18650s are LiIon, not NiCd). Search for that number on a site like Amazon or Ebay; If you'll get any results, buy an exact number of cells that you already have in your old battery; New cells can be rated for a little bit higher or lower voltage (~±1V is still OK, but anything higher/lower than that won't be good for your laptop), and can have a higher or lower Wh/Ah rating - this one will only change how much uptime will your laptop have on the battery. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the cells will arrive, desolder the old ones from battery circuitry (from the Printed Circuit Board, or PCB), and solder the new ones exactly like the old ones were soldered. Don't forget to check the polarity of all batteries you solder - you should connect + from one cell to - from another cell, or if some of the cells are connected in parallel way in the original, then + from first cell to + from the second cell, and - from the first cell to - from the second cell (this way two or more cells will work as 1 bigger one). Don't forget to double-check if all cells are connected correctly before soldering two leads to the PCB. &lt;/p&gt;&#xA;" OwnerUserId="5211" LastEditorUserId="5211" LastEditDate="2017-07-07T16:12:20.583" LastActivityDate="2017-07-07T16:12:20.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3275" PostTypeId="2" ParentId="3194" CreationDate="2017-07-07T21:11:04.393" Score="9" Body="&lt;p&gt;It appears that there are several versions of both DoubleSpace and DriveSpace. Information about each version as I &lt;s&gt;find&lt;/s&gt; get it will be posted in this answer.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;DoubleSpace&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;DoubleSpace uses MRCI, which uses &quot;a variant of Lempel-Ziv encoding&quot;.&lt;sup&gt;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/cc722457.aspx&quot; rel=&quot;noreferrer&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; A non-technical explanation of the DoubleSpace compression algorithm:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;DoubleSpace first identifies the repeated sequences, and then writes them as &lt;em&gt;&amp;lt;offset, length&amp;gt;&lt;/em&gt;. &lt;em&gt;Offset&lt;/em&gt; is the number of bytes to the left of where the match starts [...] For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;The rain in Spain falls mainly on the plain.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;This sentence would be compressed as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;The rain &amp;lt;3,3&amp;gt;Sp&amp;lt;9,4&amp;gt;falls m&amp;lt;11,3&amp;gt;ly on &amp;lt;34,37&amp;gt;pl&amp;lt;15,3&amp;gt;.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;The key is to analyze the frequency of occurrence of the offset and length values, and then to choose very short encoding [sic] for the most common values. – &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/cc722457.aspx&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The DoubleSpace naming convention for CVFs (Compressed Volume Files) is &lt;code&gt;DBLSPACE.nnn&lt;/code&gt; where &lt;code&gt;nnn&lt;/code&gt; is a three-digit, right-aligned (&lt;code&gt;0&lt;/code&gt;-padded) number. If the DoubleSpace CVF was created from uncompressed data the extension will be &lt;code&gt;000&lt;/code&gt;; if the CVF was created empty the extension will be another number.&lt;sup&gt;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/cc722457.aspx&quot; rel=&quot;noreferrer&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Windows 95 &quot;DriveSpace&quot;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This program, whilst producing files in the DoubleSpace format, seems to be having an identity crisis:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I still refer to it as 'win95 doublespace' though M$ call it 'drivespace'.  – &lt;a href=&quot;//cmp.felk.cvut.cz/~pisa/dmsdos/faq.html&quot; rel=&quot;noreferrer&quot; title=&quot;dmsdos FAQ&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It supports compressed drives of up to 512MB&lt;sup&gt;&lt;a href=&quot;https://books.google.co.uk/books?id=9cpU5uYCzq4C&amp;amp;pg=PA248&amp;amp;lpg=PA248#v=onepage&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; with a cluster size of 8KB.&lt;sup&gt;&lt;a href=&quot;//cmp.felk.cvut.cz/~pisa/dmsdos/faq.html&quot; rel=&quot;noreferrer&quot; title=&quot;dmsdos FAQ&quot;&gt;[1/FAQ]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;DriveSpace&lt;/h2&gt;&#xA;&#xA;&lt;h3&gt;DriveSpace 3&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This program supports compressed drives of up to 2GB with a cluster size of 512KB.&lt;sup&gt;&lt;a href=&quot;//cmp.felk.cvut.cz/~pisa/dmsdos/faq.html&quot; rel=&quot;noreferrer&quot; title=&quot;dmsdos FAQ&quot;&gt;[1/FAQ]&lt;/a&gt;&lt;/sup&gt; It uses the SQ-0-0 compression scheme.&lt;sup&gt;&lt;a href=&quot;//cmp.felk.cvut.cz/~pisa/dmsdos/faq.html&quot; rel=&quot;noreferrer&quot; title=&quot;dmsdos FAQ&quot;&gt;[1/FAQ]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Thanks to &lt;a href=&quot;/users/5342&quot;&gt;misha256&lt;/a&gt; for &lt;a href=&quot;/posts/comments/7772&quot;&gt;the link&lt;/a&gt; to &lt;a href=&quot;//cmp.felk.cvut.cz/~pisa/dmsdos/&quot; rel=&quot;noreferrer&quot; title=&quot;dmsdos&quot;&gt;dmsdos&lt;/a&gt;. Thanks to &lt;a href=&quot;/users/4147&quot;&gt;Tommy&lt;/a&gt; for &lt;a href=&quot;/posts/comments/7817&quot;&gt;the link&lt;/a&gt; to &lt;a href=&quot;https://books.google.co.uk/books?id=9cpU5uYCzq4C&amp;amp;pg=PA248&amp;amp;lpg=PA248#v=onepage&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;PC Mag&lt;/a&gt;.&#xA;Thanks to &lt;a href=&quot;/users/4147&quot;&gt;Tommy&lt;/a&gt; (&lt;a href=&quot;/posts/comments/7816&quot;&gt;here&lt;/a&gt;) and &lt;a href=&quot;/users/547/&quot;&gt;Jules&lt;/a&gt; (&lt;a href=&quot;/posts/comments/7818&quot;&gt;here&lt;/a&gt;) for identifying the DoubleSpace compression algorithm.&#xA;Thanks to &lt;a href=&quot;/users/4921&quot;&gt;manassehkatz&lt;/a&gt; (&lt;a href=&quot;/posts/comments/7813&quot;&gt;here&lt;/a&gt;), &lt;a href=&quot;/users/4147&quot;&gt;Tommy&lt;/a&gt; (&lt;a href=&quot;/posts/comments/7817&quot;&gt;here&lt;/a&gt;) and &lt;a href=&quot;/users/5211&quot;&gt;redsPL&lt;/a&gt; (&lt;a href=&quot;/posts/comments/7819&quot;&gt;here&lt;/a&gt;) for pointing out various errors.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="357" LastEditDate="2017-07-08T12:36:59.580" LastActivityDate="2017-07-08T12:36:59.580" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="3276" PostTypeId="1" AcceptedAnswerId="3279" CreationDate="2017-07-08T13:49:15.203" Score="7" ViewCount="1758" Body="&lt;p&gt;I have an IBM 466 DX2 with the default CD-ROM drive installed like normal. I wanted to install Windows 95, so I first tried to install on top of the version of DOS already on the hard drive. It had the driver for the CD-ROM installed and booted into setup. Partway through setup, it detected a previous version of Windows on the hard drive, and said that I needed to get a Windows 95 upgrade. Of course, I wasn't going to find that, so I had DOS format the hard drive. I then tried to do a install with the boot floppy. When booted, it displays an Oak Technologies CD-ROM driver, but then says it doesn't find a CD-ROM drive and aborts. I need to find a driver that works with the Windows 95 boot disk so I can boot into setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a photo of what the CD-ROM drive says on the top and also a photo of the sound card that the CD-ROM is hooked to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PRJZV.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PRJZVm.jpg&quot; alt=&quot;Labels on an internal CD-ROM drive&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/BnvWm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BnvWmm.jpg&quot; alt=&quot;Expansion card with 40-pin ribbon cable attached&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5348" LastEditorDisplayName="user722" LastEditDate="2017-07-09T08:10:32.537" LastActivityDate="2017-07-09T18:10:39.550" Title="Windows 95 boot disk cannot detect my CD-ROM drive" Tags="&lt;ibm-pc&gt;&lt;windows-95&gt;&lt;driver&gt;&lt;cd-rom&gt;" AnswerCount="1" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3277" PostTypeId="2" ParentId="3267" CreationDate="2017-07-08T18:46:18.357" Score="0" Body="&lt;p&gt;The question seems to be skirting round the definition of FLOPS compared with the measurements of performance achieved by benchmarks. FLOPS is defined as a 'best case' measurement, as is evident from the way it is calculated. There is no allowance for making any use of the floating-point result (load/store), and no allowance for any control flow (branches and integer maths). These approximations may not have been too significant when the benchmark was first envisaged, and make some sense in the context of a separate floating-point unit which once loaded performs its work, and returns a result (that being the count for cycles required).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where this starts to fall over is cores which are able to perform as many floating point operations as data transfers - but this is where benchmark results become relevant. Take a standardised workload, and use that as a measure of both the floating point workload, and the other operations which are necessary to feed the workload. Benchmarks are &lt;em&gt;more&lt;/em&gt; real numbers, but subject to over-fitting of the micro-architecture (pick a gain of 5% on three benchmarks, or a loss of 2% on another for example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking the numbers as presented to get a best case number is not unreasonable, the performance metric relates to the fastest possible floating point operation (which makes the result almost entirely meaningless, but still easy to quote). I believe that at the time, these numbers were rapidly identified as meaningless, and replaced by a small number of synthetic benchmarks - we're still evolving what we use to benchmark processors now.&lt;/p&gt;&#xA;" OwnerUserId="46" LastActivityDate="2017-07-08T18:46:18.357" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3278" PostTypeId="2" ParentId="3267" CreationDate="2017-07-08T18:50:00.480" Score="3" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.roylongbottom.org.uk/whetstone.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Roy Longbottom&lt;/a&gt; (pers. comm.), the proper way to calculate the real-life number of MFLOPS is to run the &lt;a href=&quot;http://www.roylongbottom.org.uk/whets.for&quot; rel=&quot;nofollow noreferrer&quot;&gt;Whetstone benchmark&lt;/a&gt; and to take the &lt;em&gt;geometric mean of the three floating point results in Millions of Floating Point Operations Per Second&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My mistake was using an outdated version of the benchmark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, according to my experiments with simulated CU/ALU pipes of the BESM-6, this would come out to about 30% less than the geometric mean of &lt;strong&gt;A&lt;/strong&gt;, &lt;strong&gt;M&lt;/strong&gt;, and &lt;strong&gt;D&lt;/strong&gt;, and 40% less than just &lt;strong&gt;M&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the curious, here's how the BESM-6 results look like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; WHETSTONE BENCHMARK FOR  100.00 SECONDS DURATION&#xA;&#xA;      8 PASSES USED (X 100)&#xA;&#xA; FORTRAN WHETSTONE BENCHMARK - SINGLE PRECISION&#xA;Month run         7/2017&#xA;Supplier/model    IPMCE, USSR                                &#xA;CPU chip type     BESM-6                               &#xA;Clock MHz         9                                   &#xA;Cache size        16 words                                 &#xA;Chipset/options   CU/ALU pipes emulated using interlocks and ave. timings from the manual                        &#xA;OS/DOS            DISPAK (user mode emulated)&#xA;Compiler          F O R E X ИПM AH CCCP 4.12 OT 25.06.85           &#xA;Options           default&#xA;&#xA; LOOP CONTENT                   RESULT                MFLOPS      MOPS   SECONDS&#xA;&#xA; N1 FLOATING POINT       -1.12398256285086973          0.524               0.293&#xA; N2 FLOATING POINT       -1.12187081181764370          0.402               2.674&#xA; N3 IF THEN ELSE          1.00000000000000000                    0.185     4.477&#xA; N4 FIXED POINT          12.00000000000000000                    0.346     7.280&#xA; N5 SIN,COS ETC.          0.49902906717352380                    0.036    18.361&#xA; N6 FLOATING POINT        0.99999958804255584          0.121              35.720&#xA; N7 ASSIGNMENTS           3.00000000000000000                    0.106    13.963&#xA; N8 EXP,SQRT ETC.         0.75100162294984329                    0.018    16.087&#xA;&#xA; MWIPS                                                 0.809              98.856&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;MFLOPS per the benchmark come out to 0.295; the theoretical max numbers are  &lt;strong&gt;A&lt;/strong&gt;=0.820, &lt;strong&gt;M&lt;/strong&gt;=0.500, and &lt;strong&gt;D&lt;/strong&gt; = 0.180, based on the CPU manual; their geometric mean is 0.418. &lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-07-08T18:50:00.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3279" PostTypeId="2" ParentId="3276" CreationDate="2017-07-09T02:48:50.380" Score="8" Body="&lt;p&gt;From your pictures you have a CD-ROM manufactured by Matsushita for IBM with a model number of CR-563BBZ.  This drive uses Matsushita's proprietary interface, so won't work with the the OAKCDROM.SYS driver which only supports CD-ROM drives using the IDE interface.  It is however not connected to your sound card, its connected to it's own LaserMate CD-ROM interface card (labelled LMEP0084C). Your sound card is just behind it, it's the card with the silk screened CT2770 at the top.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure if your LaserMate interface card needs its own drivers, or if it's compatible with the Matsushita interface card and so can use the Matsushita drivers.  If it is compatible then what you need to do is copy &lt;code&gt;CDMKE.SYS&lt;/code&gt; to the root directory of your boot floppy. You'll then need to add the following line to your &lt;code&gt;CONFIG.SYS&lt;/code&gt; file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DEVICE=CDMKE.SYS /D:MSCD001 /P:300&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You'll also need to copy the file &lt;code&gt;MSCDEX.EXE&lt;/code&gt; to your floppy and add the following command to your &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; if it's not already there:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MSCDEX /D:MSCD0001&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If the device driver &lt;code&gt;CDMKE.SYS&lt;/code&gt; fails to load, displaying a message like &lt;code&gt;Interface board or CD-ROM is not ready.&lt;/code&gt;, then you can try each of the following numbers for the the &lt;code&gt;/P:&lt;/code&gt; parameter: 310, 320, 340, 350, 360, 370, 380, 390, 3A0, 3B0, 3C0, 3D0, 3E0, or 3F0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However if it doesn't work the first time, then I would suggest disconnecting the CD-ROM drive from the interface card and connecting it to your sound card instead. The model number on the card, CT-2770, indicates that it's a &lt;a href=&quot;http://www.vogonswiki.com/index.php/Creative_Sound_Blaster_16_Value&quot; rel=&quot;noreferrer&quot;&gt;Sound Blaster 16 Value&lt;/a&gt; which should also have Matsushita proprietary CD-ROM interface.  You'd then need to change the line added to &lt;code&gt;CONFIG.SYS&lt;/code&gt; above to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DEVICE=CDMKE.SYS /D:MSCD001 /SBP:220&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Other numbers you can try with the &lt;code&gt;/SBP:&lt;/code&gt; option are 240, 260, and 280. However your Sound Blaster 16 is very likely using port 220 and you can verify this by checking to see if the jumpers labelled IOS0 and ISO1 at the bottom middle of the board are both installed. If they're not both installed then it's using port 240 if ISO0 is not jumpered but ISO1 is jumpered, port 260 if ISO0 is jumpered but ISO1 is not jumpered, or port 280 if neither ISO0 nor ISO1 are jumpered.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2017-07-09T18:10:39.550" LastActivityDate="2017-07-09T18:10:39.550" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3280" PostTypeId="1" CreationDate="2017-07-09T14:54:53.423" Score="8" ViewCount="684" Body="&lt;p&gt;There is a plethora of tools available for engineers to test their code these days. However, frameworks like Mocha.js came around only in 2011 with the ascent of NPM. So I wonder what were the practices around software design a few decades ago?&lt;/p&gt;&#xA;" OwnerUserId="5349" LastEditorUserId="357" LastEditDate="2017-07-12T02:34:36.733" LastActivityDate="2018-03-11T08:58:48.603" Title="How did software engineers test their code in 19xx?" Tags="&lt;history&gt;&lt;software-development&gt;&lt;testing&gt;" AnswerCount="5" CommentCount="12" FavoriteCount="2" ClosedDate="2017-07-13T08:36:25.470" ContentLicense="CC BY-SA 3.0" />
  <row Id="3281" PostTypeId="2" ParentId="3199" CreationDate="2017-07-09T16:45:46.570" Score="3" Body="&lt;p&gt;Can't comment yet, so I'll add another answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Small C has been mentioned. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Translators that would mechanically translate 8080 assembly to 8086 assembly were available, if you preferred not to do the job by hand. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know people who did essentially this in 1983 or '84 -- hand translated the assembly language source for the compiler and the output object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Small C could theoretically be used to bootstrap a full C compiler, and that was also done. But it wasn't done as much because it did take real work, in terms of working out all the grammar rules and testing them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a little higher-tech level, C compilers (and other language compilers and interpreters) in those days were usually constructed using yacc and lex. So, if you had a budget and someone who understand yacc and lex, you might have constructed a cross-compiler on a cheap (so-to-speak) Unix minicomputer which would then be shared by your dev-department to write the software on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(afterthought)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using lex and yacc might make it possible, after cross-compiling the&#xA;libraries and some other tools and lex and yacc themselves, to use &#xA;the source code for the cross-compiler to bootstrap a native compiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That was the holy grail, of course, but it didn't always work that &#xA;well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason you might not want to use the source code for the Unix &#xA;compiler, if you had that, is that you wouldn't want the full set of &#xA;bells and whistles on a machine as limited as the IBM PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the converse, some managers preferred not to have native compilers&#xA;because that would be one more asset of unknown value to keep track of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(end afterthought)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, finally, if you had early access to the hardware or a mockup of some sort, you might have had early access to the compilers that had not yet been officially released.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An option that the Forth community often mentioned back then, but never actually seemed to be used, might have been to write the compiler in Forth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speaking of Forth, it is my understanding that the early versions of WordPerfect were written in a Forth that the predecessor to WordPerfect Inc. wrote themselves. If you understood Forth, Forth would have been just as much an option for development as C at the time.&lt;/p&gt;&#xA;" OwnerUserId="5350" LastEditorUserId="5350" LastEditDate="2017-07-10T01:14:44.173" LastActivityDate="2017-07-10T01:14:44.173" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3282" PostTypeId="2" ParentId="3280" CreationDate="2017-07-09T17:53:30.780" Score="4" Body="&lt;p&gt;IIRC, there were conformance tests (input decks with known outputs) back in the day of FORTRAN programs on punched cards.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2017-07-09T17:53:30.780" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3283" PostTypeId="2" ParentId="2264" CreationDate="2017-07-10T02:22:36.223" Score="5" Body="&lt;p&gt;Maybe what you're looking for is the semi-mythological halt-and-catch-fire instruction?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several of the Motorola processors had an instruction or two that put the CPU itself into a HALT state, but cycled the address lines from 0 to 65535 endlessly. This was great for testing, since you could check for address decode errors and such quite easily. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way out was hard reset or cycling power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These were jokingly called &quot;HCF&quot; by some engineers, but, of course, it would take a poorly designed bit of hardware to actually be damaged permanently by it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The wikipedia page&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Halt_and_Catch_Fire&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Halt_and_Catch_Fire&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;has a little bit more on the subject of invalid op codes putting the CPU into a state requiring power cycling or hard reset. It mentions one possible (apocryphal) scenario in the pre-microprocessor world, of a magnetic core design that might burn the control lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thinking of the sort of things a hobbiest might build, one could imagine something like improperly designed dynamic RAM circuits or even data buffers with too much loading that could be burned out by a CPU's HALT state. But I think hobby projects don't count for this question.&lt;/p&gt;&#xA;" OwnerUserId="5350" LastEditorUserId="5350" LastEditDate="2017-07-10T05:31:20.137" LastActivityDate="2017-07-10T05:31:20.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3284" PostTypeId="1" AcceptedAnswerId="3306" CreationDate="2017-07-10T02:40:50.897" Score="7" ViewCount="604" Body="&lt;p&gt;I implemented a Forth interpreter or the TRS-80 Color Computer (M6809) way back in the 1980s, and I've been trying to figure out how to get it loaded into an emulator to test some parts of the interpreter that I may not have gotten right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(My old hardware lies across an ocean these days.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently found the xRoar emulator,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.6809.org.uk/xroar/&quot; rel=&quot;noreferrer&quot;&gt;http://www.6809.org.uk/xroar/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which I was able to compile and get running, bringing it up to a BASIC prompt. I was even able to get the disk editor/assembler program I used to come up and show a prompt and take some basic instructions. (Tried to sign up for the forum, but got no answer.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't figure out how to set the thing up so that, when it's running the editor/assembler, I can get it to read my source code. I also tried using a cross compiler mentioned on the xRoar pages to compile my source code, but I haven't yet figured out how to attach or load the binary output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clarification -- the source code files are text files that I extracted some twenty-four years ago. I do not have images of the disks in question, only the files. Which means, I think, that I need a tool to format a disk image and copy a text file into it, giving it a name and proper directory item allocation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further clarification -- I do not use MSWindows. But I do write code on occasion, so a description of the format might get me somewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, it seems like I might be able to supply the text file as if it were a text file, but I was not able to get that to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone give me some pointers?&lt;/p&gt;&#xA;" OwnerUserId="5350" LastEditorUserId="5350" LastEditDate="2017-07-10T10:30:46.057" LastActivityDate="2017-07-15T16:23:52.367" Title="Can someone help me get xROAR to read files? (M6809/TRS-80 ColorComputer)" Tags="&lt;emulation&gt;&lt;assembly&gt;&lt;color-computer&gt;&lt;disk-image&gt;&lt;color-basic&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3285" PostTypeId="2" ParentId="3280" CreationDate="2017-07-10T19:00:55.660" Score="6" Body="&lt;p&gt;By late 1983, Apple developers had developed an almost complete Apple Macintosh OS and were working on software for it.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;MacWrite and MacPaint were pretty much feature complete but still needed a lot of testing, especially in low memory conditions. MacPaint needed to allocate three off-screen buffers, with each the size of the entire screen, so it was always skirting the edge of running out of memory, especially when you brought up a desk accessory, but the specific sequences that led to crashes were difficult to reproduce.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This lack of memory meant that there was not enough memory for a large testing program, nor a large set of test-cases. Steve Capps, whilst working on the Guided Tour disk, realised that the underlying system that powered the playback of pre-recorded actions could be used as the basis for one of the first GUI fuzzers: the Monkey.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Monkey was a small desk accessory that used the journaling hooks to feed random events to the current application, so the Macintosh seemed to be operated by an incredibly fast, somewhat angry monkey, banging away at the mouse and keyboard, generating clicks and drags at random positions with wild abandon. It had great potential as a testing tool, so Capps refined it to generate more semantically rich events, with a certain percentage of the events as menu commands, a certain percentage as window drags, etc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For more information and the source of these quotations, see &lt;a href=&quot;https://www.folklore.org/StoryView.py?story=Monkey_Lives.txt&quot; rel=&quot;noreferrer&quot;&gt;Folklore.org: Monkey Lives&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-07-10T19:00:55.660" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3286" PostTypeId="1" AcceptedAnswerId="3288" CreationDate="2017-07-10T21:30:45.623" Score="33" ViewCount="4144" Body="&lt;p&gt;Windows ME includes the ability to create a bootable DOS floppy. This floppy contains versions of &lt;code&gt;COMMAND.COM&lt;/code&gt; and &lt;code&gt;IO.SYS&lt;/code&gt; that are &quot;crippled&quot; to remove real mode. This is done with only one changed byte in each - it is easy enough to change this back to re-enable real mode in the image:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;* COMMAND.COM and IO.SYS from diskcopy.dll are from the WinME crippled version  &#xA;* that removed real mode DOS =&amp;gt; they must be patched:  &#xA;* IO.SYS            000003AA          75 -&amp;gt; EB &#xA;* COMMAND.COM       00006510          75 -&amp;gt; EB &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;(&lt;a href=&quot;https://superuser.com/a/1228138/541767&quot;&gt;Direct source&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=Comparison_of_DOS_operating_systems&amp;amp;diff=174378583&amp;amp;oldid=172924307&quot; rel=&quot;noreferrer&quot;&gt;Closer to original source&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;How do these patches work? Why is it so easy to re-enable real mode? (The patch is too similar in both for this to be accidental.) Why was real mode disabled instead of just being unused?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-08-02T15:55:00.607" LastActivityDate="2020-11-12T11:38:19.240" Title="How did Windows ME &quot;cripple&quot; DOS?" Tags="&lt;ms-dos&gt;&lt;software&gt;&lt;windows-me&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3287" PostTypeId="2" ParentId="3286" CreationDate="2017-07-10T22:14:49.437" Score="11" Body="&lt;p&gt;&lt;code&gt;EB&lt;/code&gt; is short jump relative. &lt;code&gt;75&lt;/code&gt; is short jump if not equal. So Microsoft replaced a conditional jump with an unconditional one to prevent entry to a certain section of code — presumably there was a path that goes one way if installed on a hard disk, another if installed on a floppy disk, and Micorsoft hard-wired it always to act like it was on a floppy disk.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-07-11T12:31:02.553" LastActivityDate="2017-07-11T12:31:02.553" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3288" PostTypeId="2" ParentId="3286" CreationDate="2017-07-10T23:22:01.307" Score="43" Body="&lt;p&gt;There's actually two versions IO.SYS and COMMAND.COM used with Windows ME. The normal &quot;crippled&quot; versions used to boot from hard disks, and the &quot;Emergency Boot Disk&quot; versions use to boot from floppies.  It's those later EBD versions that are embedded in &lt;code&gt;diskcopy.dll&lt;/code&gt; under Windows XP, Windows Vista, Windows 7 and Windows 8.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The EBD versions are crippled in only one respect, they can't be used to boot off a hard disk. This is what the patches you quoted actually are meant to fix. The unpatched EBD versions of IO.SYS and COMMAND.COM fully support booting into real mode MS-DOS, as that is their sole purpose. The files CONFIG.SYS and AUTOEXEC.BAT are fully supported in the EBD version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The crippled version that Windows ME normally uses to boot from a hard disk doesn't support CONFIG.SYS and won't boot to a real mode command prompt and instead will always start Windows. It will process the AUTOEXEC.BAT file but Windows ME will remove anything from AUTOEXEC.BAT that does anything other than setting an environment variable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another related issue with Windows ME is that the version EMM386.EXE included with it is broken, preventing it from being used on Windows ME EBD floppies.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Technical Description of the Patches&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Here's a disassembly of the code in the EBD version of IO.SYS that is changed by the patch:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;seg000:03A4                 mov     dl, [bp+?dos_internal.?vbr.?vbr_24]&#xA;seg000:03A7                 cmp     dl, 80h&#xA;seg000:03AA                 jnz     short loc_3B5&#xA;seg000:03AC                 lea     si, [bp+?dos_internal.?error_invalid_system_disk_2]&#xA;seg000:03B0                 push    cs&#xA;seg000:03B1                 pop     ds&#xA;seg000:03B2                 jmp     ?print_error_and_reboot&#xA;seg000:03B5&#xA;seg000:03B5 loc_3B5:&#xA;seg000:03B5                 mov     dh, [bp+?dos_internal.?vbr.?bpb.?media_id_byte]&#xA;seg000:03B8                 pop     di&#xA;seg000:03B9                 mov     ax, cs:word_7FA&#xA;seg000:03BD                 mov     bx, cs:word_7FC&#xA;seg000:03C2                 jmp     far ptr 70h:0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This what the relevant code looks like before being patched. The names starting with question marks (&lt;code&gt;?&lt;/code&gt;) in the disassembly were made up by me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code above compares the BIOS disk number stored in the volume boot sector (&lt;code&gt;?vbr_24&lt;/code&gt;) to 80h, which is the BIOS disk number for the first hard disk. If these numbers are equal then IO.SYS was booted from a hard disk and it results in the &lt;code&gt;jnz short loc_385&lt;/code&gt; instruction not jumping to &lt;code&gt;loc_385&lt;/code&gt; and instead falling through to the following instructions.  These instructions result in the code jumping to a routine that prints the message &quot;Invalid system disk&quot; and then rebooting the computer when the user press a key. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When IO.SYS is booted from a floppy &lt;code&gt;?vbr_24&lt;/code&gt; will contain the value 0 (zero) which is the BIOS disk number for the first floppy drive. This results in the comparison not being equal and the &lt;code&gt;jnz short loc_3B5&lt;/code&gt; statement jumping to the code at at the &lt;code&gt;loc_3B5&lt;/code&gt; label. This causes IO.SYS to proceed to boot normally, the &lt;code&gt;jmp far ptr 70h:0&lt;/code&gt; instruction jumps to the main IO.SYS entry point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The patch changes the &lt;code&gt;jnz short loc_3B5&lt;/code&gt; instruction to a &lt;code&gt;jmp short loc_3B5&lt;/code&gt; instruction. This causes the code to always jump to &lt;code&gt;loc_3B5&lt;/code&gt; regardless of the result of the comparison, so IO.SYS always boots normally regardless of whether it was booted from a floppy or a hard disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The patched code in the EBD version of COMMAND.COM is more obscure. It apparently checks to see if its being started during a hard disk boot before Windows has loaded. If so then it prints (I believe) the message &quot;Please press CTRL+ALT+DELETE to restart your computer&quot; and halts the computer. This check is apparently done to prevent restoring normal AUTOEXEC.BAT processing by replacing the crippled hard disk version of COMMAND.COM with the otherwise uncrippled COMMAND.COM from a EBD floppy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the patch to COMMAND.COM also changes a JNZ instruction to a JMP instruction, the code being changed is actually quite different. It's only a coincidence that code can be effectively disabled by the same single byte change used for IO.SYS.  Also note that the code Microsoft added to IO.SYS and COMMAND.COM (relative to the completely uncrippled versions used in Windows 95 and Windows 98) was more than a single byte change. In the disassembly above the entire sequence of instructions from address to 03A4 to 03B2 inclusive wouldn't have been present in previous versions of IO.SYS.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2017-07-12T16:40:06.500" LastActivityDate="2017-07-12T16:40:06.500" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="3289" PostTypeId="2" ParentId="3280" CreationDate="2017-07-11T09:20:18.290" Score="9" Body="&lt;p&gt;Back when I started in the late 1980's, we still had test suites and test cases. It's just that all the tests were carried out by hand. Unit tests were pretty much unheard of - the developer just did some ad hoc testing before checking his (it usually was a he) code in. Then there was formal testing that was structured into several tiers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You had your module tests, perhaps integration tests, functional tests, system tests and finally (you hoped) acceptance tests. Sometimes there were also user tests, but showing the system to the users before it was ready was sometimes considered politically sensitive. One system in particular stands out. I worked on the first British computerised passport issuing system. The office staff who were then still &lt;a href=&quot;https://www.thesun.co.uk/wp-content/uploads/2016/08/nintchdbpict000256021693.jpg?w=960&amp;amp;strip=all&quot; rel=&quot;noreferrer&quot;&gt;writing out passports by hand&lt;/a&gt;, were kept completely out of the loop during development because it was feared they'd all go on strike or something. In the end, they did anyway and, as a result of not consulting the users, basic mistakes were made in design of the user interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, on that particular project, we designed the individual modules using a technique called &lt;a href=&quot;https://en.wikipedia.org/wiki/Jackson_structured_programming&quot; rel=&quot;noreferrer&quot;&gt;JSP&lt;/a&gt; (Jackson Structured Programming). We drew our JSP diagrams and then we converted that into a special kind of pseudo code. We'd use the JSP diagram to enumerate all of the possible paths through the code and produce a series of test scripts from that.  Then (and this is the first step done not with pen and paper) we typed the pseudo code as comments in an empty Cobol source file and wrote the code between the comments. Then we would run the test scripts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other types of tests were made by reference to a test plan and the functional specification. There would, for example, be a section in the functional specification that described the facility to enter a new passport application from an application form. You would examine that and write a series of test cases - probably filling in real application forms - and then you'd create a test script for the tester to follow (note: all of this is being done by hand, you wrote the scripts out with pen and paper and sent them to the typing pool to be typed). An army of testers would then run the tests and raise defect reports for when they went wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole process from start to finish was unbelievably tedious, especially the module tests, which meant, of course, that they were frequently not done as well as they might be. Hence, it was not unusual to find fairly basic bugs even as late as acceptance testing. Once the system was delivered and in support, regression testing was an unattainable fantasy. The support team simply didn't have the resources to run through the mountain of paper rerunning the functional tests.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those who are interested, the above system was written for Tandem Non Stop Cyclone systems which were designed with redundant hardware for maximum uptime. One of the system tests involved physically pulling a CPU module out of the rack while the system was running to simulate a hardware failure. The software was mostly written in Cobol talking to ISAM files at the back end. It ran in a transaction process monitor and the UI was written in a Cobol like screen definition language whose name I forget. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2017-07-11T09:29:03.840" LastActivityDate="2017-07-11T09:29:03.840" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3290" PostTypeId="2" ParentId="3280" CreationDate="2017-07-11T12:54:09.427" Score="6" Body="&lt;p&gt;Admittedly, your question is way too broad - Even today, that question cannot be answered for the bandwidth of what commonly qualifies as &quot;software&quot;. &lt;em&gt;Embedded Software&lt;/em&gt; requires (and required) an entirely different test strategy and, obviously, the approach to testing safety-critical software like a moon lander will be entirely different from that of a home computer game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I started developing software in 1986, I was working on a satellite payload system for telemetry and range finding. That system was entirely developed on IBM PCs that had a number of Z-80 daughter boards (the target system was Z80-based). The entire system was module tested on the PC that emulated the on-board connectivity. There was only one single &quot;real&quot; target system that was heavily guarded for safety and confidentiality issues and only accessible after a long-winding procedure after passing quite a number of (physical) gates. That system was normally used only for integration and acceptance tests. What you did was feed your software running on the Z80 boards with proper stimuli from the PC using small (PC) assembler programs and hope you'd get the right results out of the simulated base station comms. If something didn't work, you'd start a CP/M debugger to remotely debug the Z80 software on the boards. You didn't have any symbol support or even symbolic debugging, but rather worked with large piles of paper from the linker map file and assembler source code, single-stepping instruction by instruction. Paper was generally much more important to programming than it is today. The teams were also much smaller that they probably are today - On that whole system, only 4 developers were working for about a year. As there was no way to on-board-update the software in case you found an error after launch (or a simple way to recall the system for a quick factory fix... Anything that was invented by then would have involved a crater...), the system had a number of very space-limited &quot;patch areas&quot; (empty static RAM pages that were kept as reserve to be able to replace faulty software with small &quot;backpack&quot; routines) and testing was really nearly half of the development effort if I remember right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On another job some years later, we were working on technical GUI software - There was no such thing as automated testing for GUIs, even less than on the satellite payload - All testing would be done by hand (and mouse!) according to &quot;user stories&quot; (what a modern term...) that were documented in huge piles of paper (again) with expected input or output. After such a story, a database script was run to see whether the database contents looked like expected, and that was the only &quot;automated testing&quot; we had. We also didn't have a dedicated test team - for the bi-yearly product releases, development was simply shut down for a month or so and all hands were called in to do a number of incremental test sessions, document the results (again on paper) and then fixed the bugs you found. At least, nobody was normally assigned to test something they had not written themselves, so you had the chance to see parts of the software you weren't aware they were existing before that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In another job, I was working on the control software for large spinning machines - We had a cut-down &quot;real machine&quot; (just cut down in size so that each sensor/actor/motor on the real thing was actually present at least once) in the middle of the office that could be (and was) used for testing. The software was developed on OS/9 development systems (PCs with 68k cards, embedded systems and some Atari STs (!) running OS/9) and then tested on the machine. Main testing was, however, done by finding out whether the various sub-systems that were communicating with each other over RS-232 lines exchanged the expected messages - so your most important testing tool was the protocol analyzer.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="463" LastEditDate="2018-03-11T08:58:48.603" LastActivityDate="2018-03-11T08:58:48.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3291" PostTypeId="2" ParentId="3280" CreationDate="2017-07-11T14:30:04.583" Score="4" Body="&lt;p&gt;Agree with tofro, a broad question with no simple answer and depends on how critical the application was and the budget.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;c1982, writing assembler (2650) for a TV video games console, if the game could be played and no-one could crash it, make it do something odd, or get strange displays or sounds, then it was good to go. For the most part if anything at all was amiss the output would be total garbage and easy to spot, but there wasn't much technology available to find the cause.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;c1985, again writing assembler but for a system with 12 6809 processors. Algorithms were developed in psuedo-code, then I wrote and thoroughly tested code for each psuedo-code structure (ie IfThenElse, ForN=x-&gt;y etc) before converting the algorithms to code. This unit fed data to a minicomputer, and the guy who was writing the code for that created test beds for the unit. These two components were part of a much larger communications loop, but I never got any feedback from system integration and field testing. &lt;/p&gt;&#xA;" OwnerUserId="4991" LastActivityDate="2017-07-11T14:30:04.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3292" PostTypeId="2" ParentId="3255" CreationDate="2017-07-11T18:28:09.793" Score="2" Body="&lt;p&gt;On the original 8088 processor, the easiest way to estimate execution speed is generally to ignore cycle counts and instead count memory accesses, including instruction fetches, and multiply by four.  Although some instructions spend enough time executing internally that the memory bus ends up being idle for a few cycles, unless the average execution time for a sequence of code ends up exceeding the memory-fetch time by more than 12 cycles, the memory-access times will dominate.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-07-11T18:28:09.793" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3293" PostTypeId="1" AcceptedAnswerId="3294" CreationDate="2017-07-12T13:07:33.503" Score="18" ViewCount="2278" Body="&lt;p&gt;One thing I really liked about the 8-bit (and even most 16-bit) games was that the frame rate was fixed to the vertical blanking. Games were smooth back then. I've been trying to recreate that feeling on a Macbook Pro and recently on a RetroPie (connected to an almost new 65&quot; Sony TV) without any real success. The Mac does a better job than the RetroPie but it's not perfect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VICE is an excellent emulator and it is so perfectly timed that it even handles horizontal raster splits. It has to handle microsecond timing correctly to pull that off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RetroPie hardly breaks a sweat (one of four cores at 30%) to emulate the C64 and that's why it bothers me that it seems unable to even do a simple side-scroller smoothly. The &lt;a href=&quot;https://www.youtube.com/watch?v=JZWatsuxX74&amp;amp;feature=youtu.be&quot; rel=&quot;noreferrer&quot;&gt;juddering&lt;/a&gt; reminds me of a bad conversion from 24 fps to 25 fps (the actual frame rate for a PAL C64 is 50 fps). Why does this seem so hard to emulate and is there something I can do about it?&lt;/p&gt;&#xA;" OwnerUserId="5354" LastEditorUserId="5354" LastEditDate="2017-07-12T13:27:18.830" LastActivityDate="2018-06-10T12:03:17.387" Title="Emulate smooth scrolling" Tags="&lt;commodore-64&gt;&lt;emulation&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3294" PostTypeId="2" ParentId="3293" CreationDate="2017-07-12T13:50:02.697" Score="17" Body="&lt;p&gt;Macs with a built-in screen are generally locked to 60Hz. Your Raspberry Pi is most likely also to be running at 60Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplification applied by almost all emulators is to calculate an entire frame of the display, output that, calculate the entire next frame, output that, ad infinitum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore the software is pushing a complete new frame 50 times a second. Your Mac or Pi is pushing a new HDMI or composite image 60 times a second. Neither is doing anything in particular in regard of the difference. So you're probably not even getting as nice a conversion as a bad 24 to 25 — for C64 frames 1 2 3 4 5 6 7 8 9 10 you'll at best be getting output of 1 2 3 4 5 5 6 7 8 9 10 10. But because nowhere is it exactly written that 5 frames shall be output in 6 slots you also might be seeing some minor timing differences pushing one or the other frame backwards or forwards during the time that 50Hz and 60Hz end-of-frame timings are close.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On your Raspberry Pi, modify your &lt;a href=&quot;https://raspberrypi.stackexchange.com/tags/config.txt/info&quot;&gt;config.txt&lt;/a&gt; for 50Hz if you haven't already. That should help a lot. Possibly you'll still get the odd frame that goes slightly askew because cross-platform libraries rarely tie neatly to platform-specific signals like retrace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: with a little more research on the C64 specifically, one frame takes 19,656 cycles (312 lines of 63 cycles), but the machine is clocked at around 985,248.6111Hz (it's 17.734475Mhz divided by 18). So a real machine actually puts out about 50.13 frames per second. So even if you adjust the Pi to put out 50 that's still not quite the perfect rate. As you note though, VICE has an option to just lock itself to one frame of output = one frame of input. So then you're running your emulated C64 about 0.25% too slowly, but that should be a lot less worrying an imperfection than dodgy frame adaptation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For comparison, quite a few 24fps movies are just sped up for PAL-region 25fps broadcast for the same reason. That's is a 4.2% speed up, so more than sixteen times as far off, but I've never met anybody who realised without being told.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-07-12T20:48:59.667" LastActivityDate="2017-07-12T20:48:59.667" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="3295" PostTypeId="1" AcceptedAnswerId="3309" CreationDate="2017-07-12T17:04:07.343" Score="5" ViewCount="1029" Body="&lt;p&gt;Which programs or tools were used to create the sprites and backgrounds for 16-Bit games like those on the Super Nintendo or the Sega Genesis?&lt;/p&gt;&#xA;" OwnerUserId="5355" LastEditorUserId="4025" LastEditDate="2017-07-12T19:18:32.147" LastActivityDate="2018-03-08T20:56:51.280" Title="Graphics Editor for 16-Bit Games" Tags="&lt;graphics&gt;&lt;software-recommendation&gt;&lt;snes&gt;&lt;sega-genesis&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3296" PostTypeId="1" AcceptedAnswerId="5360" CreationDate="2017-07-12T19:01:53.620" Score="5" ViewCount="847" Body="&lt;p&gt;When published in 1970, the Pascal language did not have a way to implement the functionality equivalent to the (future) C language operators &quot;break&quot; and &quot;continue&quot;. Their convenience having been recognized, extended dialects of Pascal have started to feature similar operators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the same documentation for an implementation of Pascal for a Soviet computer as &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/3150/4025&quot;&gt;here&lt;/a&gt;, dated 1979:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In accordance with the ideas of structural programming and the requirements &#xA;  of programming practice, the following control structures are introduced in the language:&lt;/p&gt;&#xA;  &#xA;  &lt;h1&gt;Structural labels&lt;/h1&gt;&#xA;  &#xA;  &lt;p&gt;An operator can be labeled with a structural label.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&amp;lt;&lt;em&gt;operator&lt;/em&gt;&gt; ::= { &amp;lt;&lt;em&gt;label&lt;/em&gt;&gt;&lt;strong&gt;:&lt;/strong&gt; }* { &lt;strong&gt;(&lt;/strong&gt; &amp;lt;&lt;em&gt;structural label&lt;/em&gt;&gt; &lt;strong&gt;)&lt;/strong&gt; }* &amp;lt;&lt;em&gt;unlabeled operator&lt;/em&gt;&gt; &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&amp;lt;&lt;em&gt;structural label&lt;/em&gt;&gt; ::= &amp;lt;&lt;em&gt;identifier&lt;/em&gt;&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The scope of a &lt;em&gt;structural label&lt;/em&gt; is the &lt;em&gt;unlabeled operator&lt;/em&gt;.&lt;/p&gt;&#xA;  &#xA;  &lt;h2&gt;&lt;strong&gt;exit&lt;/strong&gt; operator&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;Within the scope of a &lt;em&gt;structural label&lt;/em&gt;, e. g. &quot;(M)&quot;, there may be operators &lt;strong&gt;exit&lt;/strong&gt; M, equivalent to exiting the corresponding &lt;em&gt;unlabeled operator&lt;/em&gt;.&lt;/p&gt;&#xA;  &#xA;  &lt;h3&gt;Syntax&lt;/h3&gt;&#xA;  &#xA;  &lt;p&gt;&amp;lt;&lt;em&gt;exit operator&lt;/em&gt;&gt; ::= &lt;strong&gt;exit&lt;/strong&gt; &amp;lt;&lt;em&gt;structural label&lt;/em&gt;&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;h2&gt;&lt;strong&gt;goto&lt;/strong&gt; operator&lt;/h2&gt;&#xA;  &#xA;  &lt;h3&gt;Syntax&lt;/h3&gt;&#xA;  &#xA;  &lt;p&gt;&amp;lt;goto operator&gt; ::= &lt;strong&gt;goto&lt;/strong&gt; ( &amp;lt;&lt;em&gt;label&lt;/em&gt;&gt; | &amp;lt;&lt;em&gt;structural label&lt;/em&gt;&gt; )&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;A &lt;strong&gt;goto&lt;/strong&gt; operator using a &lt;em&gt;structural label&lt;/em&gt; may appear within the scope &#xA;  of that &lt;em&gt;structural label&lt;/em&gt;. Its function is equivalent to the regular &#xA;  &lt;strong&gt;goto&lt;/strong&gt; operator.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Structural labels realize the right of each operator to iterate and to complete.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Most readers of the documentation would later misquote the last statement as &quot;the inalienable right of each operator to iterate and to complete&quot;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Structural labels implement mechanisms akin to generalized &quot;break&quot; and &quot;continue&quot; operators on the C language. For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(outerloop) for i := 1 to 100 do&#xA;(innerloop) for j := 1 to 100 do&#xA;     (iter) begin&#xA;            ...&#xA;            exit iter; { same as continue in C }&#xA;            ...&#xA;            exit innerloop; { same as break in C }&#xA;            ...&#xA;            exit outerloop; { no convenient C analog }&#xA;     end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Unlike regular numerical labels in Pascal, structural labels did not need to be pre-declared.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://turbopascal.org/system-procedures-break-continue-and-exit&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turbo Pascal&lt;/a&gt; appeared in the 1980s and seems to have regular C-like &lt;strong&gt;break&lt;/strong&gt; and &lt;strong&gt;continue&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The question is: Has any pre-1979 dialect of Pascal featured &quot;structural labels&quot;, or any kind of break/continue functionality?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-08-08T05:25:47.160" LastActivityDate="2018-08-08T05:25:47.160" Title="When were the analogs of the C operators &quot;break&quot; and &quot;continue&quot; introduced in Pascal?" Tags="&lt;history&gt;&lt;programming&gt;&lt;pascal&gt;" AnswerCount="3" CommentCount="16" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3297" PostTypeId="2" ParentId="2461" CreationDate="2017-07-12T21:55:56.073" Score="6" Body="&lt;p&gt;Windows 98SE which is what you should be running, not vanilla 98. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;SE has a maximum partition size of 137GB; vanilla 98 is 64GB. The boot partition should not extend past the first 2GB on the drive. The rest of the drive would be the game storage area. I would use 2 SD cards, The boot loader and 98 on the first drive. XP on the Second, the nice feature that gets you is the Bootloader would let you select which OS, which would be which partition on which SD, but if you had to you could boot add a second entry on the XP boot screen to select a boot of the device alone if it were the only one in the system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;XP can be installed on a FAT32 partition as well. It is not recommenced because fat32 limits you to just under 4GB maximum file size. That makes many DVD images hard to deal with since those are 4.7 GB&lt;/p&gt;&#xA;" OwnerUserId="3648" LastActivityDate="2017-07-12T21:55:56.073" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3298" PostTypeId="1" CreationDate="2017-07-13T00:09:14.997" Score="13" ViewCount="965" Body="&lt;p&gt;I am interested to learn about the Texas Instruments TMS34010, a 32-bit fully functional CPU with built-in graphics manipulation capabilities, which appeared in Atari's Hard Drivin' arcade boards amongst others. I was wondering if there were any freely available tools such as compilers to develop software for this processor? So far my searches have been in vain.&lt;/p&gt;&#xA;" OwnerUserId="3776" LastEditorUserId="4496" LastEditDate="2019-12-02T23:17:46.687" LastActivityDate="2019-12-02T23:17:46.687" Title="Are there any public tools for the TMS34010?" Tags="&lt;software-development&gt;&lt;c&gt;&lt;software-recommendation&gt;&lt;software-development-kit&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3299" PostTypeId="2" ParentId="3293" CreationDate="2017-07-13T05:15:11.553" Score="7" Body="&lt;p&gt;I'll come from the other end -- nice and smooth feeling of 50fps screen update was mostly because of stroboscopic nature of CRT tvs and monitors used: while you move your line of sight smoothly, CRT shortly displays a flash of picture for you every time in the correct place, hence the &quot;one-frame&quot; feel. Even if you'll use 50Hz lcd tv for real C64, there will be no comparable feeling, since lcd shows the same picture during all the frame.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2017-07-13T05:15:11.553" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3300" PostTypeId="2" ParentId="845" CreationDate="2017-07-13T15:58:48.280" Score="2" Body="&lt;p&gt;I have tried to save or load from a smartphone and PC. These don't record well. However the audio file from tape may be processed on PC. Audiotap and CS1er are examples of software for the TI. I have tried successfully to use an MP3 player (including through Bluetooth) to play wav files. A repossitory for wav files is at whtech: &lt;a href=&quot;https://computerarchive.org/files/mirror/ftp.whtech.com/Cassettes/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://computerarchive.org/files/mirror/ftp.whtech.com/Cassettes/&lt;/a&gt;&#xA;Good luck !&lt;/p&gt;&#xA;" OwnerUserId="5357" LastActivityDate="2017-07-13T15:58:48.280" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3301" PostTypeId="2" ParentId="1976" CreationDate="2017-07-13T16:33:27.963" Score="6" Body="&lt;p&gt;Regarding the TI 99/4A, the video functions were designed for games although the 64 bit representation of the real numbers made the computer pretty competent for scientific appplications. Redefinition of characters allowed a plot, but it was a lengthy process(see &lt;a href=&quot;http://www.academic.ro/TI994A&quot; rel=&quot;noreferrer&quot;&gt;http://www.academic.ro/TI994A&lt;/a&gt;). TI itself is making the plot with the X on vertical, by using the same coding scheme, well, faster but unusual.  Extended Basic allowed assembler code and thus direct access at the video memory(&quot;the missing link&quot; solution-1990 by Texaments). Nowadays a compiler exists for Extended Basic. TI Logo requires the very expensive Peripheral Expansion Box. Nowadays, the CF7+ circuitry replaces that device, but of course, the computer itself it's not competing. &lt;/p&gt;&#xA;" OwnerUserId="5357" LastActivityDate="2017-07-13T16:33:27.963" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3302" PostTypeId="2" ParentId="1976" CreationDate="2017-07-13T20:07:17.380" Score="9" Body="&lt;p&gt;The VIC-I used in the Vic-20 differs from the VIC-II of the C64 by not having sprites or bitmap modes. So your only option is software-defined tiles. All of them are always in RAM and they're seeded with the character set from the ROM.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The ZX80 and 81 have one of the most interesting display architectures in terms of moving parts, and when used as intended it conspires to give a character-based display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For pixel fetching there is exactly one hardware counter. It's three bits large, increments each line and is reset on vertical retrace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To display characters, the Z80 executes the character codes. Or, rather, it attempts to. RAM is mirrored above 32768; when the machine spots an attempt to read an instruction from that area it secretes away the byte that would have been read and forces the bus to 0. Which is Z80 for &lt;code&gt;NOP&lt;/code&gt;. So the Z80 does nothing, but does so with regular timing and while incrementing its program counter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 was built to provide dynamic RAM refresh signals, which it does while decoding instructions. So while decoding its &lt;code&gt;NOP&lt;/code&gt;, it announces a refresh cycle and puts a refresh address on the bus. That address can be set programmatically, though the Z80 automatically increments the low seven bits, which the machine then uses to keep track of distance across the line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a video value was stashed, the machine replaces the low nine bits of the address bus with the low three bits of the line counter plus six of the bits it secreted away. The value then on the data bus is loaded into a shift register and output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ROM configures everything so that the net effect is a character-mapped display, character forms stored in ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A quirk is that if the address generated for final video fetch isn't in the ROM range, the ROM doesn't respond as the ordinary address bus is being manipulated so the ordinary decoding rules apply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you have RAM that puts a value on the bus during refresh cycles, you can tweak the Z80's refresh address and put your character set in RAM. The built-in 1k does, but expansions disable that RAM and may not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quicksilva and some others also sold an add-on to put suitable RAM atop where a ROM mirror usually sits, intended for character set redefinition. Those fit alongside any other RAM expansion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Smart programmers have also managed to generate a pseudo-bitmap mode (use some other part of the ROM as a character set and try to hit useful patterns) and a full-bitmap mode (keep false triggering vertical sync in time with horizontal to negate the line counter and otherwise act appropriately).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: the ZX80 and ZX81 as cgaracter-mapped devices on which it was discovered that the character patterns could be drawn from anywhere in ROM, or reprogrammed with suitable RAM, or at a stretch you could work around the whole system and create a bitmap. Almost certainly completely without any sort of intention of hardware design, but working nonetheless.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Beyond that, anything with a TMS99[1/2]8 has to be a candidate? That owns its own 16kb, off the main system bus, and has both a tile map and tiles; it contrasts an explicit 'text mode' with three 'graphics' modes but the main difference is that the former crops tiles to 6 pixels wide in order to fit 40 on the screen. You're really only picking between 6-pixel wide characters and 8-pixel wide characters. It also has 1-bit sprites, but no built-in scrolling so it's still not really the tile-and-sprite console-type thing that its successors evolved into (e.g. the Master System is a descendant, and the Mega Drive descends from that, retaining the Master System's additions but cutting the original TMS-compatible modes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In computers, it's as seen in the MSX 1, ColecoVision Adam, the Sega SC-3000, various Spectravideos and elsewhere. Scanning the existing answers, it's the same chip that was in the TI-99/4a, as per traal's answer.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-07-14T13:28:05.033" LastActivityDate="2017-07-14T13:28:05.033" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3303" PostTypeId="2" ParentId="1634" CreationDate="2017-07-14T17:12:05.917" Score="8" Body="&lt;p&gt;I have just completed an open source solution to this problem available at &#xA;&lt;a href=&quot;http://amiga.robsmithdev.co.uk&quot; rel=&quot;noreferrer&quot;&gt;http://amiga.robsmithdev.co.uk&lt;/a&gt; with full source code.  The project is based around an Arduino and example code is for Windows (Visual Studio) but could be ported to other O/S easily&lt;/p&gt;&#xA;" OwnerUserId="5359" LastActivityDate="2017-07-14T17:12:05.917" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3304" PostTypeId="2" ParentId="1976" CreationDate="2017-07-15T10:43:18.483" Score="8" Body="&lt;p&gt;Although not strictly redefinable characters, the IBM CGA was able to have the size of the character cells changed from the standard 8x8 to 8x2, which combined with certain characters turned its text mode into the equivalent of &lt;a href=&quot;http://nerdlypleasures.blogspot.com.au/2014/09/cga-16-color-rgb-graphics-modes.html&quot; rel=&quot;noreferrer&quot;&gt;a 160x100 bitmapped display&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This worked by displaying a character in each cell such that the 8x2 character box would appear as two 4x2 blocks of solid colour, effectively functioning as &quot;pixels&quot; at 160x100 resolution.  Each character's foreground and background colour controls the colour of each half of the 8x2 character cell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although 160x100 was a lower resolution than the CGA's 320x200 and 640x200 bitmapped modes, it allowed all 16 colours to be used instead of only the four colours available in the true bitmap modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So although it wasn't done via the use of redefinable characters, it did allow for bitmapped graphics to be displayed in text mode, at a higher resolution than for normal ASCII-art style graphics.&lt;/p&gt;&#xA;" OwnerUserId="5361" LastEditorUserId="5361" LastEditDate="2017-07-15T23:51:33.433" LastActivityDate="2017-07-15T23:51:33.433" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3305" PostTypeId="2" ParentId="747" CreationDate="2017-07-15T12:42:35.873" Score="3" Body="&lt;p&gt;The CMD HD series hard drives and their modern day Thunderdrive clone made by MyTech Electronics can be configured for any default device number from 8 to 29. Also, the MyTech FD2K and FD4K Firedrive clones of the CMD FD-2000 and FD-4000 floppy disk drives are dip switch configurable for device numbers 8 through 15. A total of 8 devices can adequately share the IEC bus through daisy-chaining. Adding a 9th device will cause read errors on all the devices connected.&lt;/p&gt;&#xA;" OwnerUserId="5363" LastActivityDate="2017-07-15T12:42:35.873" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3306" PostTypeId="2" ParentId="3284" CreationDate="2017-07-15T16:23:52.367" Score="7" Body="&lt;p&gt;You can manage CoCo disk images quite easily with MAME's &lt;a href=&quot;http://docs.mamedev.org/tools/imgtool.html&quot; rel=&quot;noreferrer&quot;&gt;imgtool&lt;/a&gt;. I've assumed you want to use RS-DOS on a CoCo 2, launching xroar via:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;xroar -default-machine coco2bus&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To make a blank, single-sided disk image, enter&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;imgtool create coco_jvc_rsdos new.dsk&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The file will be 161280 bytes long: 35 tracks × 9 sectors × 512 bytes per sector.&lt;/p&gt;&#xA;&lt;p&gt;I'm assuming your assembler accepts ASCII in the same format that CoCo BASIC expects, with CR (0x0d / \r) as line endings. To convert a text file to this format:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;tr '\n' '\r' &amp;lt; infile &amp;gt; OUT.TXT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To copy the file across to the image:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;imgtool put coco_jvc_rsdos new.dsk OUT.TXT OUT.TXT --ftype=data --ascii=ascii&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Similarly for an assembler file:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;imgtool put coco_jvc_rsdos new.dsk TEST.ASM TEST.ASM --ftype=assembler --ascii=ascii&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I'm not sure how much difference &lt;code&gt;--ftype&lt;/code&gt; makes to the result, but &lt;code&gt;--ascii&lt;/code&gt; clearly sets a text flag. You can copy a binary across with:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;imgtool put coco_jvc_rsdos new.dsk RANDOM.BIN RANDOM.BIN --ftype=binary&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To see what's on the disk image:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;imgtool dir coco_jvc_rsdos new.dsk&#xA;&#xA;Contents of new.dsk:&#xA;------------------------------ -------- --------------- ------------------&#xA;OUT.TXT                              43             0 A                   &#xA;TEST.ASM                            145             0 A                   &#xA;RANDOM.BIN                        17313             0 B                   &#xA;------------------------------ -------- --------------- ------------------&#xA;       3 File(s)           17501 bytes                          133632 bytes free&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The image, when attached to xroar, seems to work as expected:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/dAbrj.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dAbrj.png&quot; alt=&quot;CoCo disk contents in xroar&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(If you wanted to use OS9, I hadn't tried that, but it looks like you can substitute &lt;code&gt;coco_jvc_os9&lt;/code&gt; for &lt;code&gt;coco_jvc_rsdos&lt;/code&gt; in the imgtool command line. The &lt;a href=&quot;https://nitros9.sourceforge.io/wiki/index.php/Main_Page&quot; rel=&quot;noreferrer&quot;&gt;NitrOS-9&lt;/a&gt; community might be of more help.)&lt;/p&gt;&#xA;&lt;p&gt;Some additional links that &lt;em&gt;look&lt;/em&gt; as if they'd be useful in your quest for working binaries:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://lwtools.projects.l-w.ca/&quot; rel=&quot;noreferrer&quot;&gt;LWTOOLS&lt;/a&gt; — a set of cross-development tools for the Motorola 6809 and Hitachi 6309 microprocessors&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://toolshed.sourceforge.net/ToolShed.html&quot; rel=&quot;noreferrer&quot;&gt;ToolShed&lt;/a&gt; — another CoCo cross-development system which includes disk image management&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://nowhereman999.wordpress.com/2017/06/19/coco-6809-assembly-on-a-modern-computer/&quot; rel=&quot;noreferrer&quot;&gt;CoCo (6809) Assembly on a modern computer&lt;/a&gt; — article on CoCo cross development on a Mac, debugging via MAME&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.cs.unc.edu/%7Eyakowenk/coco/text/diskbasic.html&quot; rel=&quot;noreferrer&quot;&gt;Disk Basic Summary&lt;/a&gt; — just in case you've forgotten (or, as in my case, never knew) CoCo disk BASIC commands.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="439" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-07-15T16:23:52.367" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3307" PostTypeId="2" ParentId="1976" CreationDate="2017-07-16T02:03:04.483" Score="4" Body="&lt;p&gt;Many years ago I had a CP/M based machine called the Quark-100 by a small Canadian company called Megatel. The character generator was held in RAM so it could be any 256 characters desired from an 8*8 grid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I even wrote a character set editor for the machine in the Z-80 version of Turbo-Pascal V3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those were the days...&lt;/p&gt;&#xA;" OwnerUserId="4066" LastActivityDate="2017-07-16T02:03:04.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3308" PostTypeId="1" AcceptedAnswerId="5970" CreationDate="2017-07-16T04:44:30.083" Score="9" ViewCount="597" Body="&lt;p&gt;I have a IIe (boots as enhanced: Apple //e), motherboard 607-0187-A, and 80 column text card 607-0103-J.&lt;br&gt;&#xA;They came together and I think they're compatible, but not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I boot to DOS 3.3 then type &lt;code&gt;PR#3&lt;/code&gt; (capslock is on) to activate, the system restarts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I boot to ProDOS 1.1.1 then type &lt;code&gt;PR#3&lt;/code&gt; I get &quot;NO DEVICE CONNECTED&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I boot with no disk then type &lt;code&gt;PR#3&lt;/code&gt; the system hangs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've followed the &quot;&lt;em&gt;80-Column Text Card Manual For //e Only&lt;/em&gt;&quot; and it looks like I'm doing things right.  But I'm certainly not getting the results anticipated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have some tips to share?&lt;/p&gt;&#xA;" OwnerUserId="5364" LastEditorUserId="276" LastEditDate="2019-12-18T18:44:06.980" LastActivityDate="2019-12-18T18:44:11.930" Title="How do I troubleshoot an 80 column card on an Apple //e?" Tags="&lt;apple-ii&gt;&lt;text&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="3309" PostTypeId="2" ParentId="3295" CreationDate="2017-07-16T10:33:42.893" Score="9" Body="&lt;p&gt;Depending on the platform we're talking about, you've got a few choices. As the best platform for editing images at the time was the Amiga with its 4096 color palette in HAM mode on OCS/ECS (Original ChipSet/Enhanced ChipSet), and even better modes if you had an AGA (Advanced Graphics Architecture) machine, I'll talk about this computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best choice on that platform was the &lt;strong&gt;Deluxe Paint&lt;/strong&gt; (otherwise known as &lt;strong&gt;DPaint&lt;/strong&gt;), and the most popular version was probably Deluxe Paint IV, which was released in 1991 by EA. This editor had a rather limited GUI, with a very big part of the screen utilised as the canvas. It had a big amount of tools to work with such as custom brushes. Besides that, it allowed to change palettes on the go, as you needed another color. A very big feature that DPaint had, but almost no other editor had, was probably the ability to animate - it was nice, but it required a lot of RAM, and if you would want to animate on a bare 1M Amiga (not even mentioning 512K ones), I would recommend going B&amp;amp;W to save some memory. Using the older DPaint III is also a good idea to save some memory.&#xA;Besides Amiga, DPaint was ported to Apple IIgs, MS-DOS and Atari ST, but those versions weren't that popular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another good editor for the Amiga was the &lt;strong&gt;Personal Paint&lt;/strong&gt;, otherwise known as &lt;strong&gt;PPaint&lt;/strong&gt;. It looked similar to DPaint, but lived longer (it is still available to download from the &lt;a href=&quot;https://www.amigaforever.com/classic/ppaint/&quot; rel=&quot;nofollow noreferrer&quot;&gt;evil cloanto site&lt;/a&gt;). It had almost the same features, but it was expanded as the development went on for a very long time after 1995 when the last version of DPaint was released. Nowadays, this is the go-to graphics editor for classic Amiga computers.&#xA;PPaint was also released on a few shareware CDs/coverdisks, of which I've got at least two.&#xA;The biggest con of the PPaint is that it eats even more RAM than DPaint, thus you'll need a more expanded Amiga or limit yourself to 4-8 color images at best.&lt;/p&gt;&#xA;" OwnerUserId="5211" LastEditorUserId="2126" LastEditDate="2018-03-08T20:56:51.280" LastActivityDate="2018-03-08T20:56:51.280" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3310" PostTypeId="2" ParentId="2500" CreationDate="2017-07-16T12:25:40.453" Score="3" Body="&lt;p&gt;I would recommend searching for strings like &quot;SpaceTime&quot; and &quot;Mathematics&quot; in registry, and deleting them (and &quot;directories&quot; they are in) accordingly. I've had a similar problem with Odyssey Client for WiFi on my laptop with Win2000 (it's very, veeery hard to get even a working trial, not even mentioning the license!), and i've fixed it after about 10 minutes of fiddling with regedit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beware that this can damage your registry if you delete the wrong thing; &lt;strong&gt;Always make backups!&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2017-07-16T12:25:40.453" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3311" PostTypeId="2" ParentId="2349" CreationDate="2017-07-16T12:34:48.753" Score="0" Body="&lt;p&gt;As you haven't ever tried it if it works before the mod, we can only guess what the problem may be. I'd suggest to remove the LEDs and check if you have assembled everything correctly. If the motor spins, but it's having a hard time, i'd recommend spraying some WD-40 on moving parts (&lt;strong&gt;DO NOT spray the laser!!&lt;/strong&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides that, if you have a SCPH-7XXXX (pre-2008 model; code lower than 8C; matt plastic on the top, the only glossy part is a strip with &quot;PS2 Playstation 2&quot; text on it), you can try with FreeMcBoot and lodaing &lt;em&gt;legally&lt;/em&gt; imaged games from USB.&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2017-07-16T12:34:48.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3312" PostTypeId="1" CreationDate="2017-07-16T13:20:30.637" Score="4" ViewCount="488" Body="&lt;p&gt;I have this old Windows 98 Aptiva IBM which I can't seem to get out of DOS mode or boot from a CD. When I switch it on, it goes through the BIOS checks and then prompts me to click enter to boot or F1 for setup utility. When I actually boot to Windows 98, it is in DOS mode, and when I try to activate the GUI with the &lt;code&gt;win&lt;/code&gt; command, it says &quot;VFAT Device Initialisation failed&quot; on a BSOD, followed by &quot;system halted&quot;. It has something between that which I forgot. But anyway, I burned a Windows 98 SE ISO to 4 different CDs, set CD to be primary boot option in BIOS, then tried to boot from it by putting it in and switching it on, but it still doesn't work. So there is a big explanation but the question is: how can I get this thing to boot from a CD?&lt;/p&gt;&#xA;" OwnerUserId="5365" LastEditorUserId="357" LastEditDate="2017-07-16T23:28:27.303" LastActivityDate="2017-07-16T23:28:27.303" Title="Windows 98 Aptiva IBM not booting from CD" Tags="&lt;ibm-pc&gt;&lt;windows-98&gt;&lt;cd-rom&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3313" PostTypeId="2" ParentId="3312" CreationDate="2017-07-16T13:47:43.630" Score="5" Body="&lt;p&gt;Firstly, many old computers had problems with booting from CD; It was either unsupported or very buggy. Secondly, even if booting from CD would work on that particular Aptiva, i doubt that booting from a recorded CD would - it has something to do with the way data is written to the disc (many pre-1997 (the year recordable CDs were introduced) CD-ROMs have problems with reading burned CDs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would go with booting from floppy with Windows 98SE loader disc (all you need is DOS and CD-ROM drivers installed on it). The procedure would be to go to D: (or R:, or any other letter that MSCDEX would tell you to), enter the WIN98 directory and launch setup.exe&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other solution is booting from floppy with Plop Boot Manager - it's more flexible, as you'll be able to actually boot from CDs not based on DOS (for example Linux install CDs), and maybe even boot from USB drives!&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2017-07-16T13:47:43.630" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="3314" PostTypeId="1" AcceptedAnswerId="3325" CreationDate="2017-07-16T14:01:31.373" Score="74" ViewCount="23358" Body="&lt;p&gt;Being a child of the 80s I loved my ZX Spectrum, did my best to learn BASIC but I felt like the games I was playing (Jetpac, Dizzy, Renegade etc) were perhaps not written using BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wondered: &lt;strong&gt;how were these early games developed?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days I've figured (or am guessing) they were written using Z80 assembly, and if that's the case, did the developers literally writing assembly by hand and running it on their Spectrums? How were they running it? How were they testing (or at least recovering from inevitable crashes)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a developer myself, I appreciate it's commonplace to have tooling to generate code. &lt;strong&gt;Did the developers of these mid-80s games have any tooling?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only reference I've managed to &lt;a href=&quot;https://youtu.be/LymCezUg7HI?t=5m21s&quot; rel=&quot;noreferrer&quot;&gt;find was an interview&lt;/a&gt; with Matthew Smith talks about building a custom interface board to write to ZX Spectrum ROM via a TRS80. Was that typical?!&lt;/p&gt;&#xA;" OwnerUserId="5366" LastEditorUserId="519" LastEditDate="2019-02-05T09:11:29.537" LastActivityDate="2020-12-19T12:02:47.780" Title="How were the first ZX Spectrum games written?" Tags="&lt;history&gt;&lt;zx-spectrum&gt;&lt;gaming&gt;&lt;software-development&gt;" AnswerCount="9" CommentCount="13" FavoriteCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="3315" PostTypeId="1" CreationDate="2017-07-16T16:59:31.957" Score="20" ViewCount="2512" Body="&lt;p&gt;What were the earliest Forth programming language implementations for 8-bit personal computers?  Was it FIG Forth?  Or a predecessor?  Or some other development?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did Forth lose its relative popularity in usage after the advent of 16/32 bit personal computers?&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="357" LastEditDate="2017-07-16T23:28:41.537" LastActivityDate="2017-07-19T03:43:08.323" Title="Early Forth for personal computers" Tags="&lt;programming&gt;&lt;compilers&gt;&lt;forth&gt;" AnswerCount="5" CommentCount="12" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3316" PostTypeId="2" ParentId="3314" CreationDate="2017-07-16T18:46:48.027" Score="55" Body="&lt;p&gt;This is quite a wide-ranging question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some resources online which help: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jonathan Cauldwell, author of various Spectrum hits, has a &lt;a href=&quot;http://www.spanglefish.com/egghead/index.asp?pageid=397755&quot; rel=&quot;noreferrer&quot;&gt;How to write games for the Spectrum&lt;/a&gt;&quot; guide, which seems to mainly cover modern Speccy development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Oliver Twins (authors of many Codemasters-published titles back in the day) detail some of their development processes in their &lt;a href=&quot;http://www.olivertwins.com/history&quot; rel=&quot;noreferrer&quot;&gt;History pages&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently I need more reputation to publish more than two links. Darn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my own knowledge of Amstrad CPC gaming, a popular native assember was Maxam, which could be loaded from disk, tape or a custom ROM package attached to the interface port of the machine. The Multiface was a similar tool which allowed the user to break into a currently running program at the press of an external button, whereupon the user can view and modify memory and the CPU's registers, which I imagine would have helped with debugging games. It certainly did help when hacking them!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tools such as C and Pascal compilers, which did exist for these early machines, were workable but would not produce assembly of sufficient speed to eek every bit of power from the CPU, which typically only ran at around 4MHz. All of this speed was definitely needed to deliver realtime arcade-style games. Of course memory was also tight and optimised assembly routines would usually take up less space than the equivalent code compiled from a higher-level language. Programmers would often employ tricks to reduce processing requirements by a few clock ticks including using then-undocumented Z80 assembler commands and writing self-modifying code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If developed in assembly language, a program is translated into Z80 opcodes and placed into a specific starting address in memory. To run the program, the address is called, which means the CPU's Program Counter is set to the address required. This can usually be done from BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To test a routine, it can again be directly called, but first the CPU's registers must be set to the values expected by that routine, akin to method parameters today. The 'return value' from such routines would again be placed across the various registers, meaning a routine could return more than one value. Of course routines could read/write memory and so on as well. If the program crashed or locked, the machine would have to be reset and the program reloaded from disk or tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Aside: if you want to get a feel for how development was on these old machines, I wholeheartedly recommend TIS-100, which simulates a computer with very limited memory and a restricted command set. Unfortunately it's a multi-core system, which no machines were at the time, but it certainly sets the right tone).&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As evident elsewhere, it was fairly common in the larger software houses to connect the target 8-bit micro to something more powerful on which the actual development work would be done, perhaps an IBM-PC or similar. Many games however were written on the machine itself, at home, in the spare time of schoolchildren, students and people employed in non-gaming industries, making this a true technical revolution which touched the lives of most young people at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this has helped a little.&lt;/p&gt;&#xA;" OwnerUserId="5368" LastActivityDate="2017-07-16T18:46:48.027" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="3317" PostTypeId="2" ParentId="3315" CreationDate="2017-07-16T18:47:28.433" Score="6" Body="&lt;p&gt;That's kind of two questions in one; as to the latter: one of the big benefits of Forth is that it produces threaded code: every new word (/function) is very nearly just an ordered list of of other words to call. So the output tends to be very compact, but not very speedy. Once you've got more RAM, it stops being quite so useful a trade-off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also unusual in being stack based. Postscript is the last surviving  stack-based language, as far as I'm aware, and it's rarely used for much beyond data storage. So its swimming against the tide probably didn't help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to the former: there were at least two Forths for the Apple II by 1979 — so predating most of the competing machines — Apple Forth by Cap'n Software and AppleFORTH by Programma International. Given the similar names it's probably safe to assume independent but concurrent development, and a lack of preceding competitors.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="1989" LastEditDate="2017-07-16T21:39:35.957" LastActivityDate="2017-07-16T21:39:35.957" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3318" PostTypeId="2" ParentId="3315" CreationDate="2017-07-16T20:57:22.090" Score="9" Body="&lt;p&gt;From the Gforth manual section &lt;a href=&quot;http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Origin.html#Origin&quot; rel=&quot;noreferrer&quot;&gt;Appendix B Authors and Ancestors of Gforth&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A team led by Bill Ragsdale implemented fig-Forth on many processors in 1979. Robert Selzer and Bill Ragsdale developed the original implementation of fig-Forth for the 6502 based on microForth.&lt;/p&gt;&#xA;&lt;p&gt;The principal architect of microForth was Dean Sanderson. microForth was FORTH, Inc.'s first off-the-shelf product. It was developed in 1976 for the 1802, and subsequently implemented on the 8080, the 6800 and the Z80.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Regarding Forth on the 6502, Forth Inc's &lt;a href=&quot;https://www.forth.com/resources/forth-programming-language/&quot; rel=&quot;noreferrer&quot;&gt;Forth programming language, history and evolution&lt;/a&gt; states:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Bill Ragsdale, a successful Bay Area security system manufacturer, became aware of the benefits of microFORTH, and in 1978 asked FORTH, Inc. to produce a version of microFORTH for the 6502. FORTH, Inc. declined, seeing much less market demand for microFORTH on the 6502 than the more popular 8080, Z80 and 6800 CPUs.&lt;/p&gt;&#xA;&lt;p&gt;Ragsdale then looked for someone with the knowledge of microFORTH and intimate familiarity with the 6502 to port a version of microFORTH to the 6502. He found Maj. Robert Selzer, who had used microFORTH for an AMI 6800 development system on an Army project and was privately developing a standalone editor/assembler/linker package for the 6502. Selzer wrote a 6502 Forth assembler, and used the Army’s microFORTH metacompiler to target compile the first 6502 stand-alone Forth for the Jolt single board computer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="439" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-07-16T20:57:22.090" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3319" PostTypeId="2" ParentId="3315" CreationDate="2017-07-16T21:01:07.150" Score="21" Body="&lt;p&gt;I believe &lt;a href=&quot;https://www.forth.com/&quot; rel=&quot;noreferrer&quot;&gt;FORTH Inc.&lt;/a&gt; provided the first microcomputer version:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;FORTH, Inc.'s microFORTH was developed for the Intel 8080, Motorola 6800, and Zilog Z80 microprocessors starting in 1976. &lt;a href=&quot;https://en.wikipedia.org/wiki/Forth_(programming_language)#History&quot; rel=&quot;noreferrer&quot;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It wasn't until 1978 that the FIG-Forth model became available, based on the 6502 implementation developed by one of FIG's founders, Bill Ragsdale. &lt;a href=&quot;https://www.forth.com/resources/forth-programming-language/&quot; rel=&quot;noreferrer&quot;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;My professional programming career began with FORTH, Inc.'s version for the PDP-11 family. It gave 100% control of everything all of the time. While it was a multi-tasking and multi-user system, the implementation was such that these features were co-operative.  One user or bad application could disrupt the others.  Everyone and every application had 100% control of everything all of the time.  It sounds contradictory, but in a non-networked environment of people working together, this was a very efficient system with little operating system overhead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That was the key to early Forths. The operating system was Forth. The development environment was Forth. The language was Forth. The applications were Forth. (You weren't writing separate programs so much as making Forth bigger.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computer scientists were probably horrified at these concepts. Sure it was compact, efficient, quick in both development and execution, and many implementations were free. But it wasn't safe. It wasn't structured. It gave everyone 100% control of everything all of the time. Anathema!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Forth lost its popularity because it is seldom taught, and it breaks too many rules. Running under an operating system does give advantages, such as networking, GUI, and a large number of available applications for the computer. But it has lost part of what made it unique.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My next professional job added Unix computers to the Forth stuff I was doing. Partial control of some things when Unix feels like it. The paradigms were opposite, and it felt disconcerting switching from one to the other. Forth, of course, was available on Unix, but as a program controlled by Unix. (This is how most Forth's are today, running under a larger operating system.) If you really like the language, that's cool.  Most managers won't allow its use though, because even as a slave app, it is different to almost everything else, and the number of Forth programmers is relatively small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Formality is another reason it lost its popularity. Sure it results in fast development, but fast development is not part of modern programming philosophy. &quot;&lt;em&gt;Know what you're going to do before you do it&lt;/em&gt;&quot; is.&lt;/strong&gt; Plan everything out ahead of time. Forth was designed for interactive, iterative development. Try something. Fix it, tweak it, improve it. Okay, the telescope can now spin at the speed, direction, and to the location desired. An hour later, move on to controlling the angle of the telescope relative to the ground. Don't already know what you are going to do.  Just do it.  (I know there are places that encourage iterative development techniques, but as far as I know it is uncommon, especially in large companies.)&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-07-17T00:23:31.180" LastActivityDate="2017-07-17T00:23:31.180" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="3320" PostTypeId="2" ParentId="3315" CreationDate="2017-07-17T09:39:05.547" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did Forth lose its relative popularity in usage after the advent of 16/32 bit personal computers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It didn't have any relative popularity as an 8-bit computer programming language at least, not amongst hobbyists. All 8-bit microcomputers except one came with a BASIC interpreter and BASIC was a much easier language to learn. The one computer that didn't come with BASIC was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Jupiter_Ace&quot; rel=&quot;noreferrer&quot;&gt;Jupiter Ace&lt;/a&gt; which had Forth built in instead. The Jupiter Ace was a commercial failure, partly because it didn't have BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was Forth not a success (as a general purpose language)? There are tworeasons, in my opinion:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Forth is a hard language to learn for an absolute beginner. Many people who bought 8-bit micros had never done any programming and so were having to learn how to program. If you're struggling with the basic (sorry about the pun) concepts, an unfamiliar notation is an added difficulty too far. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC programs were lists of instructions in almost English. They weren't much of a stretch from, say, a recipe or a list of directions. Forth programs were lists of words in reverse Polish notation, which can be tricky to grok.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, expressions in BASIC were not too far removed from expressions as taught in maths at school. Also, also The concept of a stack can be quite tricky to grasp. You can do a lot with BASIC without knowing what a stack is.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The BASIC monoculture was self sustaining. In the age of 8-bit computing, everybody knew BASIC. If you had a problem with a BASIC program, somebody could help you solve it. If you bought computer magazines, they tended to have program listings in the back that you could type in. These were almost invariably in BASIC. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Forth is a great language with a small footprint, but it is quite low level and definitely quirky. It was never going to be a mainstream success.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-07-17T09:39:05.547" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="3321" PostTypeId="2" ParentId="3314" CreationDate="2017-07-17T10:10:01.170" Score="20" Body="&lt;p&gt;I remember a friend of mine who did a lot of C64 coding.  I distinctly remember seeing him writing out the assembly mnemonics on a lined notepad, then working out what the hex codes were for each instruction, then writing a BASIC program to POKE them into memory before running them.   He did eventually get a disk assembler (store a text file on a floppy disk, then run the compiler from same disk, output binary was written to same disk), but in the early days of C64, that wasn't really an option.  Although the programs he wrote back then, with this method, weren't 'games', he did get a few listings published in magazines, and later, one conversion that was a MASSIVE hit.&lt;/p&gt;&#xA;" OwnerUserId="5381" LastActivityDate="2017-07-17T10:10:01.170" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="3322" PostTypeId="5" CreationDate="2017-07-17T21:56:27.223" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-07-17T21:56:27.223" LastActivityDate="2017-07-17T21:56:27.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3323" PostTypeId="4" CreationDate="2017-07-17T21:56:27.223" Score="0" Body="For questions about FORTH (sometimes written Forth), an early programming language with a syntax resembling Reverse Polish Notation." OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-07-18T06:10:30.470" LastActivityDate="2017-07-18T06:10:30.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3324" PostTypeId="2" ParentId="3314" CreationDate="2017-07-18T00:20:02.423" Score="18" Body="&lt;p&gt;Many, many Spectrum games were written with Devpac, on the Spectrum itself. Devpac was written by HiSoft, where I worked during this period (on the 68k Devpac, I never worked on the Z80 stuff myself).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HiSoft themselves developed their Z80 software on CP/M machines (using their own Z80 assembler), though for the life of me I cannot remember how they got the code from the CP/M machines into the Spectrum.&lt;/p&gt;&#xA;" OwnerUserId="5392" LastActivityDate="2017-07-18T00:20:02.423" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3325" PostTypeId="2" ParentId="3314" CreationDate="2017-07-18T10:12:51.537" Score="69" Body="&lt;p&gt;Interestingly enough, I stumbled in a &lt;a href=&quot;http://www.zdnet.com/article/the-zx-spectrum-birthday-memories/&quot; rel=&quot;nofollow noreferrer&quot;&gt;related article&lt;/a&gt;, that hints firstly the (cross)development at Sinclair was made on CP/M machines, (which corroborates the Matthew Smith Manic Miner development in the TRS 80 reference on the OP question), and later on in CP/M emulated under a VAX for (re)using the original binary (cross)toolchain.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;At Sinclair, a £60,000-plus DEC VAX 11/780 was used for software&#xA;development, email and other shared activities — hardware design was&#xA;done mostly on Valid workstations (one of which was broken so often it&#xA;acquired an 'In' before its badge).&lt;/p&gt;&#xA;&lt;p&gt;Pretty much standard corporate computing for the time, the '780 was a&#xA;powerful beast capable of supporting forty-odd terminals over miles of&#xA;serial cables. As the Sinclair lab was on top of the only hill for&#xA;miles, lightning strikes on a radio mast nearby were common had a&#xA;habit of frying all the line driver cards in the computer. Amazingly,&#xA;this was never given as an excuse for delivery delays.&lt;/p&gt;&#xA;&lt;p&gt;All the Spectrum software development tools ran under CP/M, the&#xA;standard micro-computer operating system before MS-DOS took over. CP/M&#xA;was designed to run on the 8080 and Z80 microprocessors, and a card&#xA;with two Z80s lived in the VAX to run the operating system and&#xA;interface it to the users. If two people were using the card then you&#xA;could opt to run a Z80 emulator on the VAX proper — which absolutely&#xA;soaked up all the processing power it had, slowing things down to an&#xA;unusable crawl for everyone else.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As for other first developers, the ZX81 already existed at the time, and if memory does not fail me some of the first commercial  hits were ZX81 adapted titles. Actually, as far as I remember, there were some oddities in the Speccy ROM that could only be explained from it being initially a conversion job from the ZX81 ROM.&lt;/p&gt;&#xA;&lt;p&gt;In fact the easiest way to load ZX81 source titles or binaries over, before modifying them, was writing a short ZX81 compatible tape loading routine. Interestingly enough, one of these days, the author of Ant Attack was telling me in a Facebook thread that he first wrote a Z80 interpreter to run the ZX81 binary in Speccy hardware before doing a much improved conversion.&lt;/p&gt;&#xA;&lt;p&gt;As for Matthew Smith, the experience seems more typical than is evident at first sight (or not), as I will talk further ahead.&lt;/p&gt;&#xA;&lt;p&gt;I wrote a lot of Z80 asm code using the honorable Gens3 assembler and drinking a lot from the &lt;a href=&quot;http://www.primrosebank.net/computers/zxspectrum/docs/CompleteSpectrumROMDisassemblyThe.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spectrum ROM disassembly book&lt;/a&gt; and &lt;a href=&quot;https://microhobby.speccy.cz&quot; rel=&quot;nofollow noreferrer&quot;&gt;MicroHobby&lt;/a&gt; magazines.&lt;/p&gt;&#xA;&lt;p&gt;I had the Gens3 assembler even before I knew assembly (1984), however I also wrote and input machine code by hand when I had my cassette recorder broken (which sadly was its normal state); it is actually doable to do the entire conversion process by hand, however it would just be easier writing the asm code in a another foreign contemporary platform, cross assembling it, and then just copy the opcodes by hand if need be.&lt;/p&gt;&#xA;&lt;p&gt;In fact, some magazines at the time had Basic programs with a somewhat de facto &amp;quot;standard&amp;quot; hexadecimal format aka hexa loaders (with slight variations depending on the magazine you were reading), hexadecimal data lines with a checksum, to input programs by hand, which you could also easily use and adopt.&lt;/p&gt;&#xA;&lt;p&gt;Nevertheless, the CP/M or the PC XT/AT and the Speccy processor bus were pretty well documented and understood &lt;em&gt;even at the time&lt;/em&gt;, and it made much more sense cross assembling programs and developing/ hacking together a small electronic interface to bit bang data between two machines than inputting all the cross-developed code by hand before the appearance of the &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Interface_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX Interface 1&lt;/a&gt; expansion module in 1983 (basically in the 2nd year the ZX Spectrum was available).&lt;/p&gt;&#xA;&lt;p&gt;Or instead of the data bus, using the parallel port of a IBM PC/AT to load Spectrum tapes. (I actually wrote &lt;a href=&quot;http://ruka12.tripod.com/tape2tap.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;TAPE2TAP&lt;/a&gt; in Intel assembly that loads tapes/gets saved data in the native ZX Spectrum ROM format using an IBM PC parallel interface). The electronic schematics are simple enough for exporting data out of the ZX Spectrum and are here as to show it ought to be simple to complement them to import data too.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;. you need a 25-pin D-type connector (just like the one that plugs your &#xA;  printer to your computer)&#xA;. a jack connector to plug to tape recorder&#xA;. some cable&#xA;&#xA;        (1)     (2)   (Female connector seen from solder side)&#xA;      ___|_______|___________________________________________&#xA;  13  \  o   .   o   .   .   .   .   .   .   .   .   .   .  / 1&#xA;       \   .   .   .   .   .   .   .   .   .   .   .   .   /&#xA;     25 \_________________________________________________/ 14&#xA;        &#xA;      &#xA;&#xA;&#xA;At the jack (mono):&#xA;------------&#xA;&#xA;    (1)     (2)&#xA;     |       |&#xA;     |       |&#xA;     .-D1&amp;gt;---.          Don't try to see if this works without the&#xA;     |       |       diode and the resistor. If you do that you can&#xA;     |       R1      severely damage your printer port!&#xA;     |       |&#xA;      \      [ (4)&#xA;       \     [&#xA;    (3)  [   [     &amp;lt;-- This pretends to be a mono jack&#xA;          ---&#xA;           ]&#xA;           .&#xA;           ]&#xA;&#xA;R1 = 100 Ohms&#xA;D1 = 4.7V Zener diode&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Actually the schematics for both directions are here in a better, and slightly more complex design:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://archive.org/serve/zx_Z80_Emulator_v3.0_PC_Tape_Adapter_Diagram_1994_Gerton_Lunter/Z80_Emulator_v3.0_PC_Tape_Adapter_Diagram_1994_Gerton_Lunter_screenshot.gif&quot; alt=&quot;tape&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;So contemporary &lt;em&gt;cheap&lt;/em&gt; interfaces could be put together that cost peanuts for shifting data in and out of Speccy for PCs (I would swear there was a much similar design for getting tapes into an Amiga emulator, but I never owned one).&lt;/p&gt;&#xA;&lt;p&gt;As such, while there are contemporary tales of Speccy titles stitching together multiple Gens3 runs, for any serious software house, and as the years go by in the 80s, it stops making much sense developing big titles directly in a Spectrum, as the memory,  keyboard  and screen size provide(d) a subpar experience compared to more advanced/professional platforms.&lt;/p&gt;&#xA;&lt;p&gt;By probably much earlier on than the middle '80s, &lt;em&gt;I believe&lt;/em&gt; you already had in widespread use (cross)assemblers running in CPM and DOS, but even failing that, or lacking the funds to buy one, the Z80/speccy architecture was simple enough to justify developing your own internal productivity tools for bigger projects (and for multiple titles).&lt;/p&gt;&#xA;&lt;p&gt;Besides the ROM Basic, basic Pascal, extended BASIC and C compilers were available in the ZX Spectrum, however they were pretty limited, and if memory does not fail me the libraries also used up valuable memory (never used them much).&lt;/p&gt;&#xA;&lt;p&gt;Despite the (many) limitations, many games were written using Hisoft's Gens3 assembler, which had an integrated editor/text IDE that was quite interesting back in the day. Gens3 also had a companion, Mons3 to disassembly and debug Z80 code step-by-step. &lt;a href=&quot;http://www.zxspectrumreviews.co.uk/review.aspx?gid=1518&amp;amp;rid=13383&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hisoft Devpac&lt;/a&gt; Both were released in 1983.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;GENS, the program-generator, lets you type in up to 30K of program&#xA;text in one lump on any Spectrum. This is enough for between 2K and 5K&#xA;of machine code, though you can compile larger programs from disk, as&#xA;explained later.&lt;/p&gt;&#xA;&lt;p&gt;There's no fixed relationship between the size of an assembler program&#xA;in text form and the corresponding machine code. The ratio depends on&#xA;your programming style, and whether or not you include comments so you&#xA;can understand what you've written when you come back to it after a&#xA;few months.&lt;/p&gt;&#xA;&lt;p&gt;Editing is fairly painless if you're used to line editors in the style&#xA;of CP/M's ED or Microsoft BASIC's EDIT. Lines are stored in numeric&#xA;order, and can be edited individually by moving a cursor back and forth&#xA;along the line in a variety of modes. This is no substitute for a&#xA;screen editor, but it's not too hard to get used to and doesn't need&#xA;much code, leaving extra space for text.&lt;/p&gt;&#xA;&lt;p&gt;The display can use standard 32-column text or a compact but readable&#xA;51 characters per line. Assembler programs are written in five columns&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;line number, label, instruction, operand and comment - so I prefer the &amp;gt; 51-column display even though it's a bit slow, taking about four seconds to&#xA;redraw the whole screen. Groups of spaces are compressed into a single&#xA;byte when a line is stored, saving memory.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The cursor keys have rather arbitrary effects - the right arrow is a&#xA;tab key to skip between columns, but the left arrow throws away the&#xA;entire line. The up and down arrows don't appear to have any effect at&#xA;all!&lt;/p&gt;&#xA;&lt;p&gt;The editor includes a full set of multiline commands, including&#xA;automatic line-number generation, renumbering, searching for text -&#xA;you can replace it with something else - block printing, deleting,&#xA;saving and loading. Files can be stored and catalogued on disk, tape&#xA;and RAM disk.&lt;/p&gt;&#xA;&lt;p&gt;SLOW ASSEMBLER&lt;/p&gt;&#xA;&lt;p&gt;GENS can translate your completed program into code at about 50 lines&#xA;a second, if the program text is already loaded. That may seem rather&#xA;slow, but it won't bother you if you only assemble a few hundred lines&#xA;at a time.&lt;/p&gt;&#xA;&lt;p&gt;If you want to assemble a big program you must split the text into&#xA;several files and tell GENS to read the text from disk rather than&#xA;from RAM. This slows things down even more, especially as GENS has to read the entire&#xA;text twice. Version 5.1 assembles about 309 lines a second when&#xA;reading text from RAM disk, and 20 lines a second from floppy.&lt;/p&gt;&#xA;&lt;p&gt;If you're really prolific you can spread a program over two drives and&#xA;the RAM disk, so there's virtually no limit on the size of program you&#xA;can assemble if you're willing to wait a 16K program could take about&#xA;7 minutes.&lt;/p&gt;&#xA;&lt;p&gt;The assembler has some professional facilities. You can use macros&#xA;with parameters: in other words, you define new symbolic commands that&#xA;stand for a group of instructions of your choice, saving typing and&#xA;text space. Whenever you write a macro name GENS inserts the whole&#xA;group of instructions, plugging parameters in as required.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There was also many &amp;quot;rumours&amp;quot; and interviews in Speccy magazines in the heydays of Spectrum that hinted big software houses had developed (or bought) &amp;quot;powerful&amp;quot; cross-assembler/emulator tools, and (cross)development was being made in IBM PCs and Commodore Amigas. The resulting machine code routines  were then transferred to a ZX Spectrum using either a interface 1 expansion module with a rs232 interface or manipulating directly RAM via the Spectrum bus interface. However, there were also hints the (first) emulator tools had not achieved yet 100% hardware emulation capabilities in software, at a decent speed (for several reasons).&lt;/p&gt;&#xA;&lt;p&gt;I do remember (vaguely), an interview in Yes Sinclair (I think), were the developer of a known software house, while talking about the development phase of a recently released game, talked about their first experience using a cross-development environment. He was also complaining the debugging and testing phases were too limited on that environment for such a complex game. Apparently, they lost valuable time transferring multiple times data to a real Spectrum, only to find out a modification to a routine would not work (via saving a tape on the cross development system, and loading it on a real Spectrum, or via a serial interface, I think, not having a more streamlined process due to hardware limitations). That particular interview also dealt with the next steps they were  planning to improve their cross-development rig for the next project, but sadly I do not remember much more of it, except them commenting it would allow them to run directly Spectrum binaries too. Nevertheless, the interview was not that rich in technical details. People kept under wraps whatever they were using.&lt;/p&gt;&#xA;&lt;p&gt;I also found an interesting reference to Ultimate Games, which appeared earlier on in the life of the ZX Spectrum:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;From the beginning, Ultimate developed games in a way very different&#xA;from the typical Speccy bedroom coder. As with so much else about&#xA;Ultimate, details of their development system are not entirely clear,&#xA;but those early interviews do describe it as a 32-bit multi-user&#xA;system on which they could write and compile their code and ship it&#xA;over to an attached Spectrum for execution. (A best guess would be a&#xA;68000-based Unix workstation.) The methodology obviously borrowed&#xA;heavily from that used by Zilec and their competitors for writing&#xA;arcade firmware, and cost “several thousand pounds.”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As for Hewson (1988), already a bit later on the game, but here for the sake of completeness and history:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As you can see from the photographs, a lot more equipment is used in&#xA;developing Spectrum games than a single Spectrum and cassette-based&#xA;assembler! The Spectrum is actually developed on an IBM compatible PC&#xA;which runs a fast Z80 cross-assembler that can compile a 200K source&#xA;file in a few seconds. After the program has been assembled, it can be&#xA;downloaded to the Spectrum via a parallel link, ready for testing.&lt;/p&gt;&#xA;&lt;p&gt;The graphics are all designed on an Atari ST using the Advanced Art&#xA;Studio. This package (programmed by my good friend Chris ‘8-bits are&#xA;crap’ Hinsley) also features a ‘map editor’ that enables all the&#xA;screens in a game to be chopped and changed very quickly. The ST&#xA;format graphics are converted to Spectrum format data to be&#xA;incorporated into the main program.&lt;/p&gt;&#xA;&lt;p&gt;This type of set-up has many advantages over developing the program on&#xA;the Spectrum itself. For a start you never have to worry about the&#xA;Spectrum crashing, as the program is permanently stored on the PC’s&#xA;hard disk. The program’s development time is cut down by a huge&#xA;amount. The idea was to be able to write games using the (limited)&#xA;full 48KB memory in games and speed up the development process.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Later on the life of Spectrum, around the mid 80s, people also used the 128K models as souped-up development rigs, notably with the &lt;a href=&quot;http://www.zxspectrumreviews.co.uk/review.aspx?gid=3055&amp;amp;rid=6197&quot; rel=&quot;nofollow noreferrer&quot;&gt;Laser Genius assembler&lt;/a&gt; and the &lt;a href=&quot;http://www.sundby.com/mirror/www.worldofspectrum.org/pub/sinclair/games-info/h/HiSoftDevpacV4.1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gens4&lt;/a&gt; assembler , which were expanded to be 128K aware and were thus able to use the extra memory.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;GENS4 is a fast, two-pass Z80 assembler which assembles all standard&#xA;Z80 mnemonics and has added features which include macros, conditional&#xA;assembly, many assembler commands and a binary-tree symbol table.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Back in the dying years of Spectrum, emulation and cross assemblers/cross compilers started being written by &amp;quot;common&amp;quot; people, first in assembly, JPP and Z80 the better known for DOS, and, as more powerful CPUs started being more affordable for domestic use, using the extra CPU power and development kits allowing writing near same speed emulators in high level languages.&lt;/p&gt;&#xA;&lt;p&gt;(I myself wrote an emulator/step-by-step debugger for it in C for DOS around 1990, using &lt;a href=&quot;http://tistory.wikidot.com/tasm&quot; rel=&quot;nofollow noreferrer&quot;&gt;TASM&lt;/a&gt; as a cross-assembler for Z80 code. Release the DOS emulator in a local BBS around 1992 and released the first emulator for Windows for the ZX Spectrum 48k around 96, announcing it in comp.sys.sinclair - see &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2570/first-computer-emulator-in-windows&quot;&gt;First computer emulator in Windows&lt;/a&gt; and &lt;a href=&quot;http://ruka12.tripod.com/wspecem.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;wspecem&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Common user ported games to/from emulator platforms using tape. I myself wrote too in 80x86 assembly an open source routine to load ZX Spectrum tapes in an IBM PC &lt;a href=&quot;http://ruka12.tripod.com/tape2tap.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;TAPE2TAP&lt;/a&gt;,that was used in a &lt;a href=&quot;http://ruka12.tripod.com/wspecem.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;wspecem&lt;/a&gt; companion utility, and adapted for the &lt;a href=&quot;http://www.worldofspectrum.org/warajevo/Features.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Warajevo&lt;/a&gt; emulator (with my blessing).&lt;/p&gt;&#xA;&lt;p&gt;By the Z80, &lt;a href=&quot;http://ruka12.tripod.com/wspecem.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;wspecem&lt;/a&gt; and &lt;a href=&quot;http://www.worldofspectrum.org/warajevo/Features.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Warajevo&lt;/a&gt; emulators time, there were already several emulators and utilities in the emulation/development scene to export and import back Z80 Spectrum binaries via tape.&lt;/p&gt;&#xA;&lt;p&gt;The .TAP and shortly later on the .TZX file formats started being more used to store images of emulated tapes. By that time, the Speccy, Z80 and ULA &lt;em&gt;behaviour&lt;/em&gt; was also &lt;em&gt;relatively&lt;/em&gt; well understood, and maybe 98.xx% of the expected (and unexpected) behaviour was fairly well emulated.&lt;/p&gt;&#xA;&lt;p&gt;Up to these days people normally develop for the ZX Spectrum in more modern hardware, and load the resulting machine code via tape or micro SD card adapter interfaces, of which the most known is the &lt;a href=&quot;http://www.retroplanet.gr/content/spectrum-divmmc&quot; rel=&quot;nofollow noreferrer&quot;&gt;DivMMC&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;PS Coming back to the Manic Miner lore.&lt;/p&gt;&#xA;&lt;p&gt;The story goes Matthew Smith developed and tested the core of Manic Miner running in the TRS80 before the Speccy was launched. (in fact in the heydays of Spectrum there were rumours of vestigial CP/M routines in the actual Manic Miner tape...cannot remember the details)&lt;/p&gt;&#xA;&lt;p&gt;He then wrote blindly the Spectrum specific routines.&lt;/p&gt;&#xA;&lt;p&gt;Using his personal connections, got (paid) access to the Sinclair development rig one entire weekend from Friday evening to Monday morning, one or two weeks before the Spectrum official launch, to debug and save the final version to tape, in a truly hit or miss marathon.&lt;/p&gt;&#xA;&lt;p&gt;So as it appears, the game actually was ready by the time the Spectrum hit the shelves. What Matthew Smith did not count on was the delays on the distributor logistic. If memory does not betray me, the original one even managed to miss the Christmas season.&lt;/p&gt;&#xA;&lt;p&gt;The rest, as they say, is history.&lt;/p&gt;&#xA;&lt;p&gt;As far as I remember, after the Manic Miner money downfall, he got his own ZX Spectrum cross-development rig, from the same supplier of the Sinclair team.&lt;/p&gt;&#xA;&lt;p&gt;Disclaimer: the details are too hazy after all this years. While I think not, I might have mistaken this Manic Miner story for other game.&lt;/p&gt;&#xA;&lt;p&gt;PS: There were rumours of vestigial CP/M routines in the actual Manic Miner tape, at least in the first launched version, and nowadays there are also proofs of source code remnants in the speccy address space.&lt;/p&gt;&#xA;&lt;p&gt;From &lt;a href=&quot;http://skoolkit.ca/disassemblies/manic_miner/reference/facts.html#sourceCodeRemnants&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://skoolkit.ca/disassemblies/manic_miner/reference/facts.html#sourceCodeRemnants&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Before the game starts for the first time, the 512-byte cavern buffer&#xA;at 32768 contains source code remnants (shown below). The DB&#xA;directives define part of the title screen tune data at 33902. There&#xA;are more source code remnants at 37708.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This bit of information actually suggests the memory was not actually bit-banged in binary format from CPM, but was originally loaded in an intermediate format, or at least part of it.&lt;/p&gt;&#xA;&lt;p&gt;see also &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2570/first-computer-emulator-in-windows&quot;&gt;First computer emulator in Windows&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2020-12-19T12:02:47.780" LastActivityDate="2020-12-19T12:02:47.780" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="3326" PostTypeId="1" AcceptedAnswerId="3327" CreationDate="2017-07-18T16:00:53.047" Score="52" ViewCount="12484" Body="&lt;p&gt;How did the 8-bit computers (Spectrum, Commodore, Atari, Amstrad etc) typically &quot;bootstrap&quot; from bare electronics into a platform with a working assembly language and OS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I mean: An assembler is not an application exactly trivial to write. There's a text editor, there's a parser/lexer that converts the mnemonics and parameters to machine code, there are I/O procedures to save the sources and the binary, at the very least. It's a fairly largish piece of code that you have &lt;em&gt;no programming language to write in&lt;/em&gt;, not even an assembler! And there's even no OS to use procedures for I/O, it still needs to be written. And there were no simulators/emulators for existing platforms to use, since this was a brand new platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How was this problem handled? How did programmers approach bootstrapping the micros from 'bare metal' to a 'marketable product with a working assembler'?&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2017-09-14T23:11:16.120" Title="How was the first assembler for a new home computer platform written?" Tags="&lt;assembly&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="12" CommentCount="23" FavoriteCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="3327" PostTypeId="2" ParentId="3326" CreationDate="2017-07-18T16:12:15.983" Score="49" Body="&lt;p&gt;Gates and Allen used remote terminal access to a minicomputer (Harvard's DEC PDP-10) to cross-assemble, and simulate, their implementation of BASIC for the Altair 8800.  Commodore Basic (for the 6502) is &lt;a href=&quot;http://www.itworld.com/article/2872659/the-source-code-behind-microsoft-basic-for-6502-comes-to-light.html&quot; rel=&quot;noreferrer&quot;&gt;reportedly derived from Altair Basic&lt;/a&gt;, and also cross-assembled using Macro-10 on a DEC 10.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Woz (and many other early Apple programmers) could code 6502 machine code in absolute hex, which could then be burned into EPROMs to boot the machine into a monitor, from which more hex machine code (or a single line of mini-assembler mnemonics) could be entered.  Many programmers in those days memorized raw hex or octal machine opcodes instead of (or in addition to) assembly language mnemonics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a reasonable guess that some other microcomputer system developers may have used cross-assemblers on the first CP/M systems and/or Intel MDS development systems to write early development tools for later 8-bit systems.  And those systems were, in turn, used to cross-develop for subsequent systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears that the very first textual mnemonic assembly language programs, for the EDSAC and other early vacuum tube computers, were manually translated to hex, octal or binary machine code on paper, by hand, and entered into the computer by front panel switches, punched cards, or paper tape.  Thus, the &quot;computers&quot; used for the very first cross-assemblers may well have been a roomful of women with pencils. (See the 2017 movie, &lt;em&gt;Hidden Figures&lt;/em&gt;, or the 2008 Book &lt;em&gt;&lt;a href=&quot;http://press.princeton.edu/titles/7999.html&quot; rel=&quot;noreferrer&quot;&gt;When Computers were Human&lt;/a&gt;&lt;/em&gt; .)&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-07-20T19:44:00.760" LastActivityDate="2017-07-20T19:44:00.760" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3328" PostTypeId="1" AcceptedAnswerId="3330" CreationDate="2017-07-18T16:43:55.443" Score="15" ViewCount="2043" Body="&lt;p&gt;In the late seventies, up through around 1981, the maximum access speed of off-the-shelf RAM chips was around 2.6 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the same speed limit apply to ROM chips of the same era? If not, what would their maximum access speed have been?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Specifically, I'm talking about the mask-programmed ROM chips that the microcomputers of the era used for their Basic interpreters.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2017-07-18T19:25:30.470" LastActivityDate="2019-10-18T13:38:44.157" Title="Speed of early ROM versus RAM chips" Tags="&lt;history&gt;&lt;rom&gt;&lt;memory&gt;&lt;performance&gt;&lt;chip&gt;" AnswerCount="3" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3329" PostTypeId="2" ParentId="3326" CreationDate="2017-07-18T17:04:56.507" Score="23" Body="&lt;p&gt;The 1974 Altair 8800 kick-started the industry but at the time offered no keyboard, no screen, just a bunch of switches and lights connected directly to the bus and a counter to help you input or output sequential values. So you'd work out the binary representation of your program by hand and input it byte by byte, bit by bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The world's introduction to the 6502 wasn't so much more advanced: 1976's KIM-1 has a hexadecimal display and input pad but you're still hand-assembling and inputting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So by the time you really get to the boom, in 1980 or so, the market has had half a decade of building terminals, tape interfaces and the rest, often in an ad hoc fashion, from which to put together the second-wave machines. You're not bootstrapping from nothing, you're standing upon experience with the CPUs and with how you can add a bunch of things to them. Through CP/M you already have a huge number of development tools for the 8080 and Z80. Throw in a minicomputer and you've probably got the grunt to simulate. If you're after about 1980 and considering filling your machine with PALs or ULAs then the manufacturer of those will probably lease you the minicomputer and supply the simulation software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my answer is: they weren't building from nothing by then, and definitely not in isolation.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="357" LastEditDate="2017-07-19T12:48:06.910" LastActivityDate="2017-07-19T12:48:06.910" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3330" PostTypeId="2" ParentId="3328" CreationDate="2017-07-18T20:06:43.050" Score="11" Body="&lt;p&gt;A typical EPROM series of that period is the 27xx series. Today's DIL EEPROMs still use the same pin layout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Access time varied with models. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Datasheets with exact dates are difficult to google systematically, but for example, an Intel 2764A-250 had a 250ns access time in &lt;a href=&quot;http://www.cpushack.com/chippics/EPROM/2764/IntelG2764A-25.html&quot; rel=&quot;noreferrer&quot;&gt;1983&lt;/a&gt;, while the 2764A-1 variant had a 180ns access time in&lt;a href=&quot;http://www.buyicnow.com/files/datasheet/EPROM/452.pdf&quot; rel=&quot;noreferrer&quot;&gt;1989&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the ballpark is &quot;a bit faster than DRAM, but not that much&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would expect PROMs and ROMs to have similar access times, but I don't remember the chip serial numbers for them.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-07-18T20:06:43.050" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="3331" PostTypeId="2" ParentId="3326" CreationDate="2017-07-18T20:21:09.060" Score="43" Body="&lt;p&gt;As someone who did it....&#xA;We wrote an assembler for an 8080, as there was nothing affordable from Intel.&#xA;We wrote it in ALGOL 60, if I recall, and ran it on a mainframe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the first thing we ran through it was .. itself, re-coded in assembler. Oh, and a boot-loader, though I think maybe we had already hand-assembled a minimal version of that into binary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that there was no stopping us :-)&lt;/p&gt;&#xA;" OwnerUserId="5404" LastActivityDate="2017-07-18T20:21:09.060" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3332" PostTypeId="2" ParentId="3326" CreationDate="2017-07-18T20:34:20.280" Score="7" Body="&lt;p&gt;The first assemblers for home computers were almost certainly written on non-home computers, whose first assemblers were written on their predecessors and so on back to the very first assembler which was undoubtedly implemented in good old fashioned machine code.&lt;/p&gt;&#xA;" OwnerUserId="5405" LastActivityDate="2017-07-18T20:34:20.280" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3333" PostTypeId="2" ParentId="3326" CreationDate="2017-07-18T21:42:12.563" Score="25" Body="&lt;p&gt;&lt;em&gt;The same answer as everybody else, just with more detail:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What I mean: An assembler is not an application exactly trivial to write. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Oh, but it is. A &quot;first&quot; assembler on a platform simply reads some bytes, transforms them in a more or less 1:1 relationship to other bytes, that's it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The target architecture was very simple. There was no shared objects / DLLs or anything like that. At least the assembler I used on a Atari 800XL either had no binding/linking stage, or I didn't know about it/did not see a need for it. There certainly were no standard libraries or anything like that. You would skip all convenience features as well.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There's a text editor,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They are pretty easy to write as well. For starters, you don't absolutely need a full fledged modern editor. If in doubt, you can get away with something line-number based like the early BASICs. And even if you wanted to handcraft an actual editor, that would not be &lt;em&gt;that&lt;/em&gt; hard either.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;there's a parser/lexer&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For recognizing the assembler commands, you can use a simple lookup table or direct string comparison. You wouldn't need very complex &quot;formula&quot; parsing either. Don't forget that the CPUs of that time were &lt;em&gt;very&lt;/em&gt; simple as compared to today. The 6502 had 3(!) registers (A, X, Y) and only a handful of flags. The &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6500_mpu_preliminary_may_1976.pdf&quot; rel=&quot;noreferrer&quot;&gt;datasheet&lt;/a&gt; lists only roughly 60 (!) different instructions, 11 addressing modes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All commands, flags, addressing modes, op codes, timings and instruction-adressing combinations fit on two (!) single-sided pages of paper. The physical CPU had only 40(!) pins.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;there are I/O procedures to save the sources and the binary,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You'd need those anyway, and, again, those were kind of trivial back then. You could easily start off with everything on tapes, and then it's just about streaming some bytes in/out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recall disassembling/reverse engineering the firmware of one of the Atari 800 XL floppy drives (as well as the OS) back then. It was doable, not too bad.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;a fairly largish piece of code &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Really not. It was common back then to publish whole games in print magazines (and books), and teenage boys would easily type in thousands of lines of code over the course of a rainy weekend. When your machine has only a few KB of usable RAM anyway, the size of your code will have a natural limit.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And there's even no OS to use procedures for I/O, it still needs to be written. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again, I/O was very simple back then. A handful of different hardware models (tape drive and 1 or 2 different floppy drives), no choice of file system - heck, no file system at all for the tape, and extremely limited FS for floppies as well. No concurrency, no virtual memory, no swapping, no nothing. Definitely possible to handcode in assembler.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And there were no simulators/emulators for existing platforms to use, since this was a brand new platform.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No simulators/emulators (though I don't know for sure), but cross compilation is, again, pretty simple. That is, if you had (as a larger company) access to existing computers, you would probably write your code there.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How was this problem handled? How did programmers approach bootstrapping the micros from 'bare metal' to a 'marketable product with a working assembler'?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't know how they &lt;em&gt;actually&lt;/em&gt; did that, but I really would not be much surprised to learn that all the original code was hand-written in cross-compiled assembler or straight hex code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that rather large things like the Ultima games (starting with II, I think) were hand-written in Assembler. It was doable.&lt;/p&gt;&#xA;" OwnerUserId="4235" LastEditorUserId="4235" LastEditDate="2017-07-19T13:45:10.773" LastActivityDate="2017-07-19T13:45:10.773" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="3334" PostTypeId="2" ParentId="3326" CreationDate="2017-07-19T01:31:36.253" Score="7" Body="&lt;p&gt;I used to regularly program my organization's mainframe in hand-coded machine language. It was a 60s vintage machine (a GE400 system), but it had an online patcher so I could modify the operating system on the fly by sticking a deck of cards into the reader and typing a one-character command on the console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The patches were originally written in assembler, then hand-translated into machine language (in this case in octal). Punch the numbers into a card with a symbolic offset for the starting address, and the patcher basically did a &quot;go to this address, load this instruction&quot;. It wasn't far removed from loading up a PDP-8 by using the front panel toggle switches.&lt;/p&gt;&#xA;" OwnerUserId="5412" LastActivityDate="2017-07-19T01:31:36.253" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3335" PostTypeId="2" ParentId="3315" CreationDate="2017-07-19T03:32:29.993" Score="7" Body="&lt;p&gt;Forth was available for many of the microcomputers (and some minis) that could be called personal computers when they shipped. Engineers often constructed small Forth Kernels as the engineering department's debugging monitor for new hardware (including many things not PC), and, depending on the culture of the people they were working for, they often made their work available in the early users groups.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Non-engineers often did not know what do with Forth interpreters, and passed over them looking for BASIC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, managers who didn't understand Forth would not allow the engineering debugging monitor to ship in the product, arranging for a conventional one to ship with the hardware instead. Managers who did understand Forth also took it out, to avoid giving the customers too much for their money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, Forth kernels were useful as post-fix integer calculators, but you really wanted a much more complete development environment. That is part of what drove the creation of the fig-Forths -- helping to demonstrate a common set of definitions that could be used, with minimal porting, to construct a full IDE. (Line editor IDEs were still useful back then because we hadn't been spoiled by full-screen editors.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reasons Forth did not catch on? It didn't really lose its popularity, it was just totally eclipsed by the Bill Gates machine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think there may have been deliberate misinformation, because some thought Forth would not bring the customers back for the add-ons, etc. Gotta have that business plan that guarantees a cash flow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there was also a lot of terminology difference. Today we can describe a Forth as an interactive symbol table with fundamental math libraries. The detail of the split stack doesn't even hit radar level any more. It should, because of the now-well-known problems of the stack crash/smash, but I'm not willing to predict that common sense will prevail, even now. (Especially now.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The terminology and concept differences were deadly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Instruction threading&quot; is generating a list of mixed effective op-codes and procedure calls in a virtual machine that cached the return address to reduce call overhead. But people interested in Forth got all tangled up in details of the threading and wasted a lot of time in work that was mostly theoretical exercises in the limits of call optimization and pre-optimized static register usage patterns. It is actually valuable in an academic sense or in a CPU architecture research environment, but it didn't push product out the door, and sometimes made enemies that didn't need to be made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I was one of those who wasted considerable time on that.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Words&quot; vs. functions/procedures was another terminology difference which was confusing. &quot;Dual stack&quot; was another. I think a better term now would be &quot;split stack&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Postfix notation is a conceptual gap. You could (and some did) write a prefix or infix interpreter for Forths, but that mostly raised hackles. Other purist issues came up about the use of the stack -- whether to limit direct access to the swap/rot range or allow a generalized pick that could pull in operands from arbitrary depth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Splitting the stack made post-fix natural and simple to implement in the interpreter, but there was really no real reason to avoid infix or prefix. Shoot, the standard word for defining functions is prefix in standard Forth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The funny thing is that the non-Forth community has wasted a lot of effort support something called a stack frame that is mostly there to give the interleaved stack enough structure that you can safely use the interleaved stack to hold variables. With the split stack, all of the complexity of the stack frame goes away. If you really want a stack frame, it's just pushing the parameter stack pointer with the instruction pointer. The frame pointer can actually be just thrown away on return in most run-times if the stack is split.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the other funny thing is that the split stack is still ignored as the primary first step in really dealing with the security problems of stack corruption. If you don't want the return address overwritten, don't store it with the parameters and variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 64K boundary was another point of conflict in concepts. In other languages it was not such a big issue, but many early Forths made use of the 16 bit modularity, and there were some purist arguments about that, as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering the size of a bit-mapped display frame buffer, no one should ever have taken the 64K arguments seriously, but hind-sight is twenty-twenty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That brings up one more sticking point, which you refer to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving from 16-bit to 32 required a bit of abstraction, and Forth has always been a bit stand-offish about abstraction. To convert a 6800 or 6809 Forth to the 68000, for instance, many just kept the 64K memory model. (Can you imagine?) The actual conversion required going back through the source code carefully, looking for instances of &quot;2 +&quot; sequences that marked incrementing to a next address and changing those to &quot;CELLWIDTH +&quot; or some such. Not just that, of course, but you really had to understand the low-level source and you really had to take time doing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For people who had done it before, implementing a new Forth for a new 8-bit CPU was quick and painless when you had a full IDE to start with. Almost all the heavy lifting was high-level. But you couldn't do that when you jumped from 16-bit addresses to 32-bit. You could still do a lot of high-level, but you had to slow down, and the market was cut-throat enough to scare you about slowing down when you weren't sure how much you'd have to slow down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now is that more than you thought you wanted to know about this?&lt;/p&gt;&#xA;" OwnerUserId="5350" LastEditorUserId="5350" LastEditDate="2017-07-19T03:43:08.323" LastActivityDate="2017-07-19T03:43:08.323" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3336" PostTypeId="2" ParentId="3326" CreationDate="2017-07-19T09:05:00.637" Score="9" Body="&lt;p&gt;Early assemblers were either cross-assembled or hand-translated.  Writing a Z80 assembler in Forth takes just a handful of screens (if you are using mnemonics based on TDL's extension of the Intel 8080 mnemonics rather than the original Zilog Z80 mnemonics).  Its main job, once you are talking about a practised coder, is resolution of jump targets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put this in perspective: the Nascom Z80 editor/assembler occupied a whopping 4kB of code (the data structure for labels took 2 bytes for each label, namely only its value: for every use of a label, the source was searched from the front for its definition, with the label table being filled in order of definitions, so assembly times grew as O(n^3) with source size).  There was a disassembler taking up 3kB, and a very thorough debugger (using NMI and a few hardware bits in lieu of a &quot;trace&quot; flag/feature) taking up another 1kB and using the disassembler internals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, translating such code into binary (once you had it on paper) was less arduous than it would seem at first glance and once you had the relevant bugs under control, you could host natively.&lt;/p&gt;&#xA;" OwnerUserId="5416" LastActivityDate="2017-07-19T09:05:00.637" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3337" PostTypeId="2" ParentId="3326" CreationDate="2017-07-19T09:08:28.140" Score="4" Body="&lt;p&gt;The availability of cross-platform tools such as the Ocode bootstrap method for BCPL, and the Pcode bootstrap for Pascal, were also useful for creating and testing programs written in high-level languages, and then porting them to new systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BCPL in particular was designed with machine-architecture portability in mind - which no doubt gave rise to the ethos of portability in C.&lt;/p&gt;&#xA;" OwnerUserId="5417" LastActivityDate="2017-07-19T09:08:28.140" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3338" PostTypeId="2" ParentId="3326" CreationDate="2017-07-19T15:56:05.360" Score="17" Body="&lt;p&gt;It is worth remembering that by the time the home hobby microcomputers appeared, Computer Scientists had more that 25 years experience in building assemblers and designing bootstrap loaders. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a summer job in the mid-1960s, I worked as an operator in an IBM datacenter with a IBM 1401 - 16K of RAM, no disk, 5 tape drives a cardreader/punch and a printer. Programs were on decks of 80 column cards. You loaded the card deck in the hopper and pressed &quot;Start&quot; This read the first card into the start of memory and executed the instructions encoded on the card. I believe that it read 2 more cards to get the bootstrap fully loaded and then started to read the rest of the deck to get the actual application program read and started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At university we had a PDP-8 that used papertape as a program storage media. You had to key in the bootstrap using toggle switches. I don't recall how many instructions had to be keyed in but it was very few before the PDP-8 had enough code to start to read the tape and finish loading the program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the late 1960's as an undergraduate, I wrote an emulator that ran on the PDP-10 and emulated the IBM-360.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the time the micro-computers appeared, the concept of using cross-assemblers to produce executable code was pretty well understood and emulators allowed code to be tested even before an actual hardware chip was available. There was usually a long delay between the time a new chip functional design was finalised and the actual chip was available. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without the modern tools for chip design (CAD, design emulators, etc.) and cheap workstations for engineers to use, it was not that easy to make the masks for the chips and to test actual chips prior to going into production. It was completely impossible to wait for a &quot;real&quot; chip to start programming all of the software. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These problems had all been worked out long before the microchip.&lt;/p&gt;&#xA;" OwnerUserId="5422" LastActivityDate="2017-07-19T15:56:05.360" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3339" PostTypeId="1" CreationDate="2017-07-19T19:36:39.973" Score="5" ViewCount="354" Body="&lt;p&gt;Most of the ASCII character codes make sense in the context of data transmission, e.g. ␄, ␗, ␖ (end of transmission, end of transmission block, synchronisation). However, there are also codes such as ␜, ␝, ␞, ␟, ␙ (file separator, group separator, record separator, unit separator, end of medium) which make less sense in the context of data transmission and more in the context of low-level file management on tape or disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As pointed out by Mauri Markowitz, the character codes do make sense in the contexts of storing read cards from a card reader, to separate the data from cards. Was this taken to its logical extreme?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was ASCII used as the basis of any file systems / encapsulation formats? If so, which?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="10260" LastEditDate="2019-02-09T18:18:11.140" LastActivityDate="2019-02-09T18:18:11.140" Title="What file systems / encapsulation formats used ASCII?" Tags="&lt;file-system&gt;&lt;ascii&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="3340" PostTypeId="2" ParentId="3339" CreationDate="2017-07-19T23:58:05.967" Score="6" Body="&lt;p&gt;The codes in question were normally used to simulate special interrupts and/or control cards. The idea is that you could take a stack of 80-column punch cards (for instance) and translate them as a series of 80-column lines in a single ASCII file. To indicate a separator card, you'd put in a RS.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2017-07-19T23:58:05.967" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3341" PostTypeId="1" CreationDate="2017-07-20T00:25:33.113" Score="14" ViewCount="1511" Body="&lt;p&gt;Which capacitors should be inspected and, if necessary, replaced before attempting to power up an original Mac (purchased January 1984, but &quot;upgraded&quot; to a 512Ke) that has been sitting unused for a few years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where can one find proper replacement capacitors, if needed?  (I have soldering tools and know how to use them with the right parts.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any other components that should be inspected?&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-07-21T02:38:30.483" LastActivityDate="2017-08-21T04:51:20.520" Title="Original Mac capacitor inspection" Tags="&lt;hardware&gt;&lt;apple-macintosh&gt;&lt;maintenance&gt;&lt;power&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3342" PostTypeId="2" ParentId="3341" CreationDate="2017-07-20T01:30:38.907" Score="14" Body="&lt;p&gt;You can find a list of capacitors and other analog board components here: &lt;a href=&quot;https://docs.google.com/spreadsheets/d/132RwzC8HM5ask-BdY_31txErOCwJDSkz099GY2XLpE0/edit?hl=en&amp;amp;hl=en#gid=0&quot; rel=&quot;noreferrer&quot;&gt;https://docs.google.com/spreadsheets/d/132RwzC8HM5ask-BdY_31txErOCwJDSkz099GY2XLpE0/edit?hl=en&amp;amp;hl=en#gid=0&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This list is maintained by James Wages. The analog boards for the 128k, 512k, and Plus are compatible with 3 different revisions. Digikey part numbers for replacement parts are included. The first tab lists the capacitors most likely to need replacement, and the second tab lists all capacitors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're looking for capacitors that are bulging or leaking. A lot of people just replace all of them, or at least all of the first page ones, because the extent of the leaking often isn't revealed until you remove the capacitors and can see underneath them. For components besides the capacitors, you're generally looking for anything burnt or physically broken (such as diodes and transistors). Almost always you will want to re-solder the pins on the flyback transformer and all the connectors (J1, J2, and J3). These solder joints were notoriously bad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The capacitors on the logic board have not been observed to leak. The logic board generally doesn't require attention unless the battery has caused significant corrosion. So if there is still a battery present, be sure to remove it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CRT and PSU circuitry contain high voltages. If the computer has been turned off for an extended period (years, as you indicate), the CRT capacitors have probably discharged. However, I always follow CRT discharge procedure when working on a compact Mac analog board. See &lt;a href=&quot;https://archive.org/details/manuals-apple-safety&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/manuals-apple-safety&lt;/a&gt; for details. On the PSU side of things, there is a bleed resistor that will discharge the PSU capacitors within a few minutes of being turned off (but still plugged in).&lt;/p&gt;&#xA;" OwnerUserId="94" LastEditorUserId="94" LastEditDate="2017-07-20T17:10:51.943" LastActivityDate="2017-07-20T17:10:51.943" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3343" PostTypeId="1" CreationDate="2017-07-20T18:18:20.333" Score="11" ViewCount="333" Body="&lt;p&gt;The Exidy Sorcerer personal computer could use audio cassette tapes for program storage.  In what format were programs (and data?) stored on tape?  What was the data rate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I seem to remember the tape format was a bit squirrelly, cassettes could be read on some tape recorder-players, but not others.  Or one had to play data on the same recorder that was used for recording it.  What could cause this problem?&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2018-12-27T22:30:57.817" Title="What format was used for Exidy Sorcerer cassette tapes?" Tags="&lt;cassette-tape&gt;&lt;exidy-sorcerer&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3345" PostTypeId="2" ParentId="3343" CreationDate="2017-07-20T21:05:55.143" Score="13" Body="&lt;p&gt;A quick glance at the 'Theory of Operation, Tape Interface' section of the &lt;a href=&quot;https://ia800709.us.archive.org/28/items/Sorcer_Technical_Manual_1979-03_Exidy/Sorcer_Technical_Manual_1979-03_Exidy.pdf&quot; rel=&quot;noreferrer&quot;&gt;Exidy Sorcerer Technical Manual&lt;/a&gt; reveals that at 300 baud a 0 is encoded as four cycles of a 1200Hz square wave and a 1 is eight cycles at 2400Hz. At 1200 baud a 0 is half a cycle at 600Hz and a 1 is one cycle at 1200Hz tone. Or, if you prefer, at 1200 baud the output level is always toggled once at the start of the bit, and if the bit is a 0 then it is toggled again halfway through.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is built-in circuity to soften the sharp edges of the square wave before it gets to the tape recorder when heading outwards, and filters to remove low-frequency and high-frequency noise when audio is coming inwards. It uses a bi-directional edge detector to recognise waves — so it's looking for zero crossings. It's timing between each transition of the input signal from high to low or vice versa; whether high or low is factored out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't expand on how bytes are encoded in bits other than to say that the bit stream is assembled by an AY-3-1015 UART, and its data sheet advertises that &quot;all characters contain a start bit, 5 to 8 data bits, one or two stop bits ... and either odd/even parity or no parity&quot;. So at least one start bit and one stop bit in addition to byte contents plus potentially a parity bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the written material, that sounds like it should all be pretty robust. Bytes are framed, reading isn't relying on phase, there's an attempt not to send square waves directly to the recorder (sending directly can produce function-of-frequency phase errors), what amounts to bandpass filtering of input, and the three frequencies involved — 600, 1200 and 2400Hz — are neither very low nor very high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same document's suggestions for troubleshooting suggest that problems can arise from noise in the tape recorder from its own power source, and that &quot;marginal performance may be due to out of tolerance parts in the input filtration train, especially the second order linear phase high-pass filter&quot;. That's a filter that attempts to eliminate any signal below 300Hz. Given that electricity is 50Hz in the UK, one would dare imagine that both together imply that low-frequency noise is a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So as to the second part of your question, I'm going to answer that different tape players have different power-source background noise, and that the high-pass filter the electronics were built around perhaps wasn't as reliable as it should have been.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-07-20T21:05:55.143" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3346" PostTypeId="2" ParentId="3341" CreationDate="2017-07-21T10:16:24.060" Score="5" Body="&lt;p&gt;The vertical sweep nonpolar capacitor (C1) is the most likely to fail.  No inspection is complete without checking also the CRT yoke connector (plastic&#xA;four-pin connector) for cracked solder joints, and perhaps the focus&#xA;resistors (which fail by increasing resistance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those old CRT tubes are irreplaceable, and the connector on the neck&#xA;will break the glass if you bump it.    Pull that connector OFF as soon&#xA;as the back is removed.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2017-07-21T10:16:24.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3347" PostTypeId="2" ParentId="3328" CreationDate="2017-07-21T10:26:43.293" Score="1" Body="&lt;p&gt;A DEC VAX of the early 1980s used ROM to store its microcode, but on&#xA;power-up transferred all that into SRAM (static RAM).   SRAM was&#xA;faster than either ROM or DRAM (dynamic RAM), but more expensive and&#xA;power-wasteful. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It still is.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2017-07-21T10:26:43.293" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3348" PostTypeId="1" AcceptedAnswerId="3349" CreationDate="2017-07-21T12:59:39.640" Score="8" ViewCount="1051" Body="&lt;p&gt;I just received a &lt;code&gt;Performa 476&lt;/code&gt; and was shocked at the amount of rust in the computer.  I believe it literally sat underwater for some time.  The motherboard looks like it can be salvaged but the power supply is completely covered in rust.  So much so that I would never put power to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I may one day try and locate a replacement power supply for it but in the meantime, I have an extra PC ATX power supply (340W) I could possibly use for testing.  It's too big to fit in the Perfoma's case but I'd like to use it to confirm the computer works.  I don't have any other PSU's at the moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, can this ATX power supply be altered to work with this computer temporarily?  I'm very handy with a soldering iron but I'm not that familiar with Performa's.  I suppose I could look up the schematic online.  But, I don't know how the Performa's &quot;soft power switch&quot; would work with the ATX PSU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any tips would be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Performa 476 doesn't have a soft power switch.  I was thinking about my Mac IIvx when I typed that sentence.  The Performa 476 has a rocker type PSU.  Still, I'm unsure how the ATX PSU could be adapted to the Performa.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it as simple as just matching the cable colors?  There are two black wires, and one each of blue, orange and yellow.  I know there are standard colors for power supplies but Apple sometimes does things &quot;differently&quot;.  :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to Cody Gray for pointing out that information.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="2081" LastEditDate="2017-07-21T14:21:05.213" LastActivityDate="2017-07-23T00:21:05.310" Title="Can a standard ATX power supply be used on a Macintosh Performa 476?" Tags="&lt;apple-macintosh&gt;&lt;power&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3349" PostTypeId="2" ParentId="3348" CreationDate="2017-07-21T16:22:13.457" Score="9" Body="&lt;p&gt;Yes, you can use a standard ATX power supply. Do &lt;strong&gt;not&lt;/strong&gt; just match the wire colors. Look up the pinouts. Then (preferably) verify them yourself with a multimeter before wiring things up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to turn on the ATX PSU you will have to short PS_ON with COM (ground). You can wire up a momentary switch for this purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ATX pinout: &lt;a href=&quot;https://en.m.wikipedia.org/wiki/ATX#Power_supply&quot; rel=&quot;noreferrer&quot;&gt;https://en.m.wikipedia.org/wiki/ATX#Power_supply&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;LC 476 pinout: &lt;a href=&quot;http://old.pinouts.ru/Power/mac_lc_power_pinout.shtml&quot; rel=&quot;noreferrer&quot;&gt;http://old.pinouts.ru/Power/mac_lc_power_pinout.shtml&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="94" LastEditorUserId="94" LastEditDate="2017-07-21T16:27:23.607" LastActivityDate="2017-07-21T16:27:23.607" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3350" PostTypeId="2" ParentId="1818" CreationDate="2017-07-21T21:22:46.217" Score="4" Body="&lt;p&gt;My response is maybe a bit &quot;off-topic&quot; since in the 1970's our IBM mainframe compilers were installed from tape rather than floppy disk. But for interest sake, let me put on record the process followed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A compiler bug would first be identified by an application programmer, since his code once compiled was doing something stupid. Of course, lots of programs did stupid things after compilation, so he first had to convince himself and  a &quot;software programmer&quot; that it was the compiler that was at fault. Once the softie was convinced he would scour through the list of known bugs, which was on microfilm (if anyone has heard of that) and updated on a regular basis ~ quarterly or so . If he found it there was a fix to apply. If he didn't there was a page at the back of every IBM manual where you could enter the details and post it off. This never resulted in a response, so you would find some alternate coding construct to achieve your aim and normally find that it compiled to give you the desired result.&lt;/p&gt;&#xA;" OwnerUserId="4927" LastEditorUserId="4927" LastEditDate="2017-07-21T21:27:50.317" LastActivityDate="2017-07-21T21:27:50.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3351" PostTypeId="2" ParentId="3326" CreationDate="2017-07-22T00:08:34.637" Score="2" Body="&lt;p&gt;There's nothing special about an assembler.  It takes one type of instruction and does a 1:1 mapping to another type (the hex values for machine code).  The simplest ones were quite simple - in the Red Book for the Apple][+ ( &lt;a href=&quot;http://www.classiccmp.org/cini/pdf/Apple/Apple%20II%20(Redbook)%20Reference%20Manual%2030th%20Anniversary.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;pdf&lt;/a&gt; ), on pages 91-93 in rather large type (complete with comments) is the entirety of the assembly code - less a page (256 bytes) and a half in size, on the order of 150 instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such could easily be written by hand and blown to a prom with little difficulty.  From this, larger and more complex applications can be built.  But the simplest and first assemblers on the personal computers of the day? Trivially hand coded and loaded.&lt;/p&gt;&#xA;" OwnerUserId="5455" LastActivityDate="2017-07-22T00:08:34.637" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4351" PostTypeId="2" ParentId="3348" CreationDate="2017-07-22T08:09:58.643" Score="4" Body="&lt;p&gt;The power supply is mainly 5V 3.75A (for all the logic), with +12V 0.78A to&#xA;run the hard disk, and -5V 0.075A to run the serial ports (printer and modem).&#xA;Ethernet cards exist, but the hard disk drive is parallel SCSI and those&#xA;are no longer being made.  The floppy drive is Apple-type, also no longer&#xA;available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Power connector J12 has (1) black (GND), (2) black (GND), (3)nc (4) orange (+5V),&#xA;(5) yellow (+12V), (6)nc, (7) blue  (-5VDC).    Unless it's very dirty,&#xA;you can read that from silk-screened labels on the logic board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ATX power supply is overkill, you only need 30W, even with accesories plugged&#xA;in.  I'd consider yanking the power supply (it's held in by two plastic latches), disassemble, clean, and just paint all the rusty surfaces.&#xA;The important power bits don't care how it looks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the hard drive isn't working, though, and if you can't remote-boot&#xA;from a server with an operating system (7.5.3 is a good version)&#xA;bootable image, it'll be a tad disappointing.   The original disk drives&#xA;(0.080 GB) would be about 23 years old today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A workable HD substitute would be a Macintosh booted up with the T key held down, which would make the Mac HD available as a SCSI target just like it were an external drive.   That hardware/software combination only needs to offer a HFS drive image (because the Performa won't read the format of the post-MacOS 8.1 HFS+ disks), and can do that from IDE disk.   Target-disk firmware for the T key trick is supported on 'most all native SCSI Macintosh models.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastEditorUserId="4108" LastEditDate="2017-07-23T00:21:05.310" LastActivityDate="2017-07-23T00:21:05.310" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4352" PostTypeId="1" AcceptedAnswerId="4353" CreationDate="2017-07-22T11:40:58.977" Score="13" ViewCount="371" Body="&lt;p&gt;I owned an Acorn Electron during the 1980s. It was a great little machine, which was still supported with magazines and games until about 1990. However I'm not sure how long the machine was actually in production. My guess is that Acorn would have ceased production of the Electron after its acquisition by Olivetti in 1986. However, Acorn's failure to establish the machine as a serious competitor to the ZX Spectrum during 1983/4 may have meant that production ceased much earlier. Does anyone know how long the Electron was actually in production for?&lt;/p&gt;&#xA;" OwnerUserId="6461" LastActivityDate="2017-07-22T11:57:36.103" Title="How long was the production run for the Acorn Electron?" Tags="&lt;acorn&gt;&lt;electron&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4353" PostTypeId="2" ParentId="4352" CreationDate="2017-07-22T11:57:36.103" Score="13" Body="&lt;p&gt;According to &lt;em&gt;The Register&lt;/em&gt;’s &lt;a href=&quot;http://www.theregister.co.uk/2013/08/23/acorn_electron_history_at_30/&quot; rel=&quot;noreferrer&quot;&gt;history of the Electron&lt;/a&gt;, production had stopped before the Olivetti cash infusion; in February 1985:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But the Electron, seen to be low on Olivetti’s list of priorities too, managed to hold on. “We will be continuing to sell the Electron this year and hopefully next year as well,” pledged Reid, still interim chief executive and, by the end of February, also company chairman. But it was clear that the company was simply selling off existing stocks of the micro — only if they shifted would more be made. “Whether we will go into production on the Electron again or not will depend on our sales level during the year,” he admitted.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Presumably production stopped at some point around Christmas 1984:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By then, though, the bottom had dropped out of the UK home computer market. The boom was over. Unlike Dragon Data and Camputers, Acorn didn’t go under in 1984, but it struggled. “Whereas the trucks had been lined up at either end of the Wellingborough warehouse delivering and collecting machines before Christmas, after Christmas they were just delivering and the company ended up with £43 million of unsaleable stock,” said Hohenberg.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If trucks were still delivering stock to the warehouse after Christmas, that meant there was still stock coming from the factories. It seems production didn’t start much before September 1983, when the Electron was launched; so it appears it was in production from around September 1983 to around December 1984 — sixteen months in total. Acorn was left with huge amounts of unsold stock which it ended up selling to Dixons (a retailer in the UK) at a loss.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-07-22T11:57:36.103" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4354" PostTypeId="1" AcceptedAnswerId="4379" CreationDate="2017-07-22T19:46:45.547" Score="12" ViewCount="873" Body="&lt;p&gt;For example, the Apple II originally shipped with a base 4K of RAM but could be expanded to 48K, so the maximum was twelve times the base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of all the computers ever shipped, which one has had the largest such ratio? (I don't know if there was ever a machine that had no RAM at all in the base configuration, but if so, I'm not counting that.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-03-18T14:56:46.097" Title="Largest ratio between base and maximum RAM" Tags="&lt;history&gt;&lt;memory&gt;" AnswerCount="6" CommentCount="20" ContentLicense="CC BY-SA 3.0" />
  <row Id="4355" PostTypeId="2" ParentId="4354" CreationDate="2017-07-22T20:28:48.767" Score="8" Body="&lt;p&gt;The Sinclair ZX-81 came with a single K of memory and could be expanded to 64kBytes (using third-party memory expansions, Memotech, for example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think none of the later (home) computers ever managed to exceed that 64-fold expansion option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Theoretical&lt;/em&gt; expandability is maybe beaten by the Cambridge Z88 that came with 32kBytes of main memory and theoretically could have been expanded to 4MBytes (128-fold). Some of this address range would, however, have been used for mass storage on plug-in cards, so it was not really feasible to use all of this range for main memory.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2017-07-22T20:28:48.767" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4356" PostTypeId="2" ParentId="4354" CreationDate="2017-07-23T02:50:05.480" Score="7" Body="&lt;p&gt;An additional 64x option: the &lt;a href=&quot;https://en.wikipedia.org/wiki/Enterprise_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Enterprise 64&lt;/a&gt; came with the 64kb the name implies, and the base hardware implements a paging scheme of up to 256 separate 16kb segments — a 64 multiplier since that's 256*16/64, and 4mb total.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technical documentation seems to be sparse, but see e.g. &lt;a href=&quot;http://ep.lgb.hu/doc/Dave.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; and R16 to R21. The top two bits of the Z80's inherent 16-bit address bus are replaced with 8 by table lookup. So it's a 22-bit address bus, right there in the base machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll likely find other machines for which similar paging schemes provide similar RAM limits, but I think this is a rare example of the scheme being fully implemented in the base hardware.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I've already been outgunned, but another high multiple is the Mac SE/30, which shipped with 1mb in its lowest configuration but can be upgraded to 128mb. Apple's official documentation gives a limit of 32mb, but that's just because of the size of SIMMs available at launch. No hardware modifications are required to support 128mb of RAM.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-07-24T13:37:11.570" LastActivityDate="2017-07-24T13:37:11.570" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4357" PostTypeId="2" ParentId="4354" CreationDate="2017-07-23T09:42:54.923" Score="21" Body="&lt;p&gt;The Amiga 3000 shipped with 2 MB and is expandable with stock parts up to 1170 MB (4x 256 MB RAM card, 128 MB on CPU card, 18 MB on motherboard) - that's 585x. In theory, it could go up to a full 4 GB (2048x) but no hardware exists to do that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For on-motherboard expansion, the Power Macintosh 9500 shipped with 32 MB and is expandable up to 1536 MB - that's 48x. My 9500 actually runs 1.5 GB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For (somewhat) current server systems, 48:1 is rather easy to beat. Our (not quite retro yet) Dell R515 could be ordered with as little as 4 GB and is upgradable to 256 GB. More current systems can go up to several TB and probably start out as low as 8 or 16 GB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it comes to super computers, you could probably get six-digit ratios easily...&lt;/p&gt;&#xA;" OwnerUserId="5200" LastEditorUserId="5200" LastEditDate="2017-09-14T18:26:40.137" LastActivityDate="2017-09-14T18:26:40.137" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4358" PostTypeId="2" ParentId="3326" CreationDate="2017-07-24T14:36:53.503" Score="2" Body="&lt;p&gt;You might be considering them in terms of modern CPUs. The older machines (8 bit 1970s and earlier like the 6502) had a very simple opcode set. It was consequently &lt;strong&gt;much&lt;/strong&gt; easier to write an assembler/disassembler than you might think, and would have been easier even if coded in machine code too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disclosure - I wrote one, although not in machine code.&lt;/p&gt;&#xA;" OwnerUserId="6472" LastActivityDate="2017-07-24T14:36:53.503" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4359" PostTypeId="1" AcceptedAnswerId="4360" CreationDate="2017-07-25T16:20:40.730" Score="46" ViewCount="8242" Body="&lt;p&gt;My simplified understanding of the evolution of the Intel processors over the last 20 years is that the Pentium II and Pentium III architectures were sort of &quot;dead-ends&quot;, and today's Intel processors were built on an earlier design introduced with the Pentium (P5) in the early-90s. My understanding is the P5 core was enhanced to support the x86-64 instruction set &quot;borrowed&quot; from AMD and multi-threading, and they went to multiple cores on die.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for validation or correction of my (obviously simple) understanding here, as well as more details on the hows &amp;amp; whys for Intel to pursue this strategy? Additionally, why were the PII/PIII approaches a &quot;bust&quot;?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2017-07-25T19:47:16.897" LastActivityDate="2017-07-27T11:27:26.707" Title="What's the relationship between early 90s Pentium microprocessor and today's Intel designs?" Tags="&lt;history&gt;&lt;intel&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4360" PostTypeId="2" ParentId="4359" CreationDate="2017-07-25T16:49:31.167" Score="41" Body="&lt;p&gt;My approximate version:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Prior to the Pentium, Intel CPUs were pipelined: different parts of the CPU would simultaneously be working on different operations, but the different parts were designed to work in sequence, with every operation proceeding through all parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Pentium expanded on that by being superscalar. Rather than there being only exactly one instruction at each stage of execution at any given time, for a certain period there are two pipelines — one that can perform any defined operation and one that can perform only the simpler operations. If two instructions are independent and can be dispatched down different pipes then they will be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Pentium Pro expands on that by introducing out-of-order execution. Rather than only two pipes, with instructions being considered for potential parallel execution in the order they come, there are a bunch of slots for incoming instructions. An instruction that has no remaining preceding dependencies then proceeds through an execution path, its slot being taken by the next instruction in the stream. That way the Pentium Pro can potentially perform three instructions simultaneously, and is more likely to do so than if it required that all three be sequential and independent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Core2 and later widened the pipeline to a width of 4 instructions.  Actually decoded uops, so complex instructions take more slots.  Skylake can decode more than 4 instructions per cycle, but the narrowest bottleneck (issue/rename) is still only 4 uops wide.  Wider decode helps avoid bubbles in the pipeline by making up for cycles where the front-end decoded fewer instructions.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keeping it broad, the Pentium III and IV mostly just widen that same process, with a few additions. Hyper threading is an obvious one — if you pretend to have more cores then you'll be handed multiple execution threads at once. So it's more likely you'll find suitable independent instructions, and be able to use more of your execution units at once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a problem though: it's now a branching thing with a few places where you might wait a while, but a processor is still a pipeline. Instructions enter at one end, go through n intermediate steps, then finally are considered done. But what happens if there's a branch? In the worst case, if the processor is currently working on m instructions and a branch occurs, it needs to throw away all the work it did on m-1 of them, then start refilling its pipeline from the point of entry, with the various stages after fetching being empty until something new flows into them. That's called a pipeline stall. Making predictions about branches based on their recent history helps to avoid stalls (as you've hopefully guessed which set of instructions will come next correctly and if you did then there's no need to flush), and speculative execution (giving some resources to the path you don't expect to be taken to hedge your bets) help but are not ideal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Pentium IV took a misstep in gambling on a really long pipeline. The thinking was that a longer pipeline has a greater cost when a stall occurs but gives small, simple individual parts, which are easier to scale up the clock rate on. So what you lose on stalls you more than gain on throughput.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, increasing the clock also increases the heat output, and process improvements didn't turn up to quickly enough to correct for that. So it was difficult to scale, and the gamble didn't pay off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So Intel switched back from the microarchitecture they'd picked for the Pentium IV to the much-developed version of that which had originated in the Pentium Pro, and doubled down on instruction set extensions (both improving the vector stuff and the 64-bit transition, though the switch back put the latter temporarily on hold) and parallelism as software-side drivers of processing improvements, to bolster incremental improvements to each core.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what they've definitely abandoned is a long pipeline and the expectation of process improvements driving clock speed improvements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: the original Pentium was superscalar, which is a stepping stone, but modern Intel CPUs have a philosophy descended most directly from the Pentium Pro and its out-of-order design. The Pentium IV's architecture relied on a misprediction of manufacturing technology and was a bit of a dead end.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="3296" LastEditDate="2017-07-27T06:55:58.617" LastActivityDate="2017-07-27T06:55:58.617" CommentCount="19" ContentLicense="CC BY-SA 3.0" />
  <row Id="4361" PostTypeId="2" ParentId="4359" CreationDate="2017-07-25T19:47:48.450" Score="50" Body="&lt;h2&gt;Intel x86 CPU Lineages&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There are only a few Intel x86 CPU microarchitectural lineages. Each of these lineages starts with a processor design that was largely made from scratch, incorporating little of any previous CPU's design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The early microarchitectural lineages were all dead ends. In this stage of x86 CPU design Intel came up with a new microarchitecture for each major new CPU version that completely replaced the old.  They are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The original 8086 design, also used largely unchanged in the 8088 and improved in the 80186.&lt;/li&gt;&#xA;&lt;li&gt;The 80286 design, which added support for protected mode and a 16 megabyte address space&lt;/li&gt;&#xA;&lt;li&gt;The 80386 design, which added support 32-bit code and a 4 gigabyte address space&lt;/li&gt;&#xA;&lt;li&gt;The 80486 design, which significantly improved performance through &lt;a href=&quot;https://en.wikipedia.org/wiki/Instruction_pipeline&quot; rel=&quot;noreferrer&quot;&gt;pipelining&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;After these processors Intel started to take a more incremental approach to microarchitecture design. Intel would only come up with a completely new design three more times, creating three more lineages of which only one is currently a dead-end:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The Pentium processor introduced the P5 microarchitecture which was improved on with the Pentium-MMX and much later resurrected to form the basis of the Atom and Xeon Phi CPUs. The major improvement in this design was &lt;a href=&quot;https://en.wikipedia.org/wiki/Superscalar_processor&quot; rel=&quot;noreferrer&quot;&gt;superscalar&lt;/a&gt; dual pipelines. (Out-of-order execution was added in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Silvermont&quot; rel=&quot;noreferrer&quot;&gt;Silvermont microarchitecture&lt;/a&gt;, but it appears that current Atom and Xeon Phi CPUs still belong to this lineage.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Pentium Pro introduced the P6 microarchitecture, starting the lineage that most Intel CPUs, including all current desktop and server CPUs, have used since. The Pentium II and Pentium III CPUs introduced further improvements of this design. The big improvement with the P6 architecture was &lt;a href=&quot;https://en.wikipedia.org/wiki/Out-of-order_execution&quot; rel=&quot;noreferrer&quot;&gt;out-of-order execution&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Pentium 4 introduced the NetBurst microarchitecture. This lineage is a dead-end.  While it was improved on during its lifetime, it's long been abandoned by Intel and not likely to ever be brought back to life like the P5 lineage.  Its major improvement was a very long pipeline which allowed for a big jump in clock speeds, but hurt performance overall.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;The Failure of NetBurst and the Pentium 4&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The NetBurst microarchitecture was a failure for largely one reason, it was designed primarily to win the &quot;megahertz wars&quot;. In 2000 Intel's main competitor in the x86 CPU market, AMD, was able to release a 1 GHz CPU before Intel could. Intel struggled to beat AMD. They released a 1.13 GHz Pentium III later that year but had to recall it, while AMD was able to push forward to 1.2 GHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new NetBurst microarchitecture let Intel and its Pentium 4 CPUs take the megahertz crown decisively. Its much longer pipeline, double the length of the pipeline used in Pentium III, allowed Intel to consistently and significantly beat AMD in raw clock speed.  However that came with a big and ultimately fatal penalty, longer pipelines meant a longer delay anytime the processor was forced to discard the contents of the pipeline. Intel hoped that better compilers would produce code tuned to the NetBurst architecture to minimize how often this occurred, but in practice this happened often enough in most code to completely offset the performance improvements gained by the faster clock speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While being able to advertise faster CPU speeds gave a Intel an advantage over AMD in the desktop markets, the NetBurst design ended up hurting Intel significantly in the more lucrative server market. In the latter market, customers weren't as easily swayed by bigger gigahertz numbers, and even overall performance wasn't all they were interested in.  They were also concerned about heat, wanting to pack as many CPUs as they could into their server racks without having to pay for bigger and more expensive cooling systems.  On the performance-per-watt metric AMD's lower clocked CPUs were able to significantly beat Intel, and this helped AMD grab about a quarter of the server market at its peak.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;The rise of the Pentium-M&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;While it took Intel a fairly long while before they realized the NetBurst microarchitecture was a dead-end, the fact that the power hungry Pentium 4 CPUs were a poor choice for laptops was obvious from the beginning.  So they had a team of Intel engineers in Israel come up with a low power CPU design that would work well in mobile computers. Rather than base their design on the Pentium 4 they chose to base it on the already more power efficient, if not as fast, Pentium III CPUs. This resulted in the Pentium-M, a CPU that, while not clocked as fast as Pentium 4, could often beat it in real world performance while generating much less heat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Around the end of Pentium 4 era the advantages of the Pentium-M were becoming obvious. While Intel only sold it as a mobile CPU for use in laptops and other similar applications, motherboard manufacturers and server makers were increasingly releasing products for desktops and servers applications that used Pentium-M CPUs. If Intel didn't kill off the NetBurst design, the market soon would prefer to buy AMD and Pentium-M CPUs instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While Intel was slow to respond to the threat of AMD or leverage the advantages of their own Pentium-M CPUs, they eventually got the message.  First releasing a variant of the Core Duo for servers and then the Core 2 CPUs for both servers and desktops.  These new more efficient CPUs were based on the Pentium-M. All Intel's desktop and server CPU designs since then are descended from the Pentium-M and so ultimately the Pentium Pro and its P6 microarchitecture. Of Intel's current CPU designs only Intel's Atom (low-power/performance mobile/embedded) and Xeon Phi (high-end compute engine) CPUs aren't P6 descendants. &lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2017-07-27T07:47:50.637" LastActivityDate="2017-07-27T07:47:50.637" CommentCount="19" ContentLicense="CC BY-SA 3.0" />
  <row Id="4362" PostTypeId="1" AcceptedAnswerId="4363" CreationDate="2017-07-25T20:28:30.947" Score="9" ViewCount="713" Body="&lt;p&gt;A common feature of later games released for the Acorn Electron was the use of screen memory to store game code. This was commonly known as screen &quot;garbage&quot;,&#xA;and can be seen on games like &lt;a href=&quot;https://youtu.be/iVSxjG98g5k&quot; rel=&quot;noreferrer&quot;&gt;Exile&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't remember seeing the same effect employed on any BBC Micro games though. There's no screen garbage visible on the &lt;a href=&quot;https://youtu.be/2sRFxCf5pIE&quot; rel=&quot;noreferrer&quot;&gt;BBC Micro version of Exile&lt;/a&gt; for instance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both the Elk and the Beeb suffered from the same memory constraints, so why was screen garbage only a feature of games for the Electron?  Was there a way of masking the use  of screen memory for game code on the Beeb that programmers couldn't make use of on the Electron?&lt;/p&gt;&#xA;" OwnerUserId="6461" LastEditorUserId="6461" LastEditDate="2017-07-25T20:33:46.630" LastActivityDate="2019-01-03T07:43:14.957" Title="Screen &quot;garbage&quot; in Acorn Electron games" Tags="&lt;bbc-micro&gt;&lt;acorn&gt;&lt;electron&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4363" PostTypeId="2" ParentId="4362" CreationDate="2017-07-25T20:35:33.590" Score="10" Body="&lt;p&gt;Yes. The BBC has a &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6845&quot; rel=&quot;noreferrer&quot;&gt;Motorola 6845&lt;/a&gt; generating its screen addresses. That's a flexible chip, with which the developer has wide control over screen sizing and placement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Electron has a custom ULA designed by Acorn to produce the same video address generation as the 6845 when configured in one of the built-in modes but its functionality is fixed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So on a BBC you can create, say, a 30-column display instead of the default 40-column display and the hardware will never even inspect memory beyond those 30 columns. On an Electron you can select between 40-column and 80-column output but those are your only options. If the programmer can afford only 30 columns of game graphics then at least 10 columns of game code will also be visible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Minor exceptions are: using the mid-display interrupt to change the palette, and doing a similar thing with the tape output interrupt. So in both cases you don't change the actual width or height of the display, but you opt to make a vertical region of it blank by virtue of mapping all palette colours to black.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The former is usually used to reduce the 256-line output to the 156 bottom lines. See Spycat, Sim City or many others. The latter is much more rarely seen because it's not as obvious and because it severely impedes audio generation, the same counter being used for tape output and for audio generation, but contributed the small amount of empty space at the top of Southern Belle and Northern Star.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-07-25T20:42:47.167" LastActivityDate="2017-07-25T20:42:47.167" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4364" PostTypeId="2" ParentId="1811" CreationDate="2017-07-26T11:48:33.517" Score="21" Body="&lt;p&gt;I have had great success with Gentoo Linux on the earliest generation of Intel 80486 processors, though I had to patch it (below).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It works on the later ones too (486DX2 and 486DX4, both clock multiplied and having the back-ported Pentium CPUID instruction).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have it working on a Compaq LTE Elite 4/75CX laptop with a whopping 24MiB of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bugs have been filed with Gentoo for the following patches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you sync up the latest package configs with 'emerge --sync' or 'emerge-webrsync', you need to update the /usr/portage/profiles/arch/x86/make.defaults global configuration file because it assumes i686 as distributed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So change this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CHOST=&quot;i686-pc-linux-gnu&quot;&#xA;CFLAGS=&quot;-O2 -march=i686 -pipe&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CHOST=&quot;i486-pc-linux-gnu&quot;&#xA;CFLAGS=&quot;-O2 -march=i486 -pipe&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This glibc patch is needed for all i80486 and Pentium cpus because they all return (maxidx &amp;lt; 2) as true and the assert() causes the process to fail with a general protection fault. Unfortunately, that includes causing the init process to die, which makes your system panic.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;--- glibc-2.23/sysdeps/x86_64/cacheinfo.c   2016-02-18 17:54:00.000000000 +0000&#xA;+++ tmp/cacheinfo.c 2017-07-07 14:58:25.840654116 +0000 @@ -259,7 +259,8 @@  static long int __attribute__ ((noinline))  handle_intel (int name, unsigned int maxidx)  {&#xA;-  assert (maxidx &amp;gt;= 2);&#xA;+  if (maxidx &amp;lt; 2)&#xA;+    return -1;&#xA;     /* OK, we can use the CPUID instruction to get all info about the&#xA;      caches.  */&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This gcc patch is only needed for the first generation i80486, which lacks the CPUID instruction.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;--- gcc-5.4.0/gcc/config/i386/cpuid.h   2015-06-18 10:56:43.000000000 +0000&#xA;+++ tmp/cpuid.h.newest  2017-07-07 21:54:34.598488154 +0000 @@ -1,5 +1,5 @@  /*&#xA;- * Copyright (C) 2007-2015 Free Software Foundation, Inc.&#xA;+ * Copyright (C) 2007-2017 Free Software Foundation, Inc.   *   * This file is free software; you can redistribute it and/or modify it  &#xA;* under the terms of the GNU General Public License as published by the @@ -47,7 +47,7 @@  #define bit_SSE      (1 &amp;lt;&amp;lt; 25)  #define bit_SSE2 (1 &amp;lt;&amp;lt; 26)  &#xA;-/* Extended Features */&#xA;+/* Extended Features (%eax == 0x80000001) */  /* %ecx */  #define bit_LAHF_LM  (1 &amp;lt;&amp;lt; 0)  #define bit_ABM       (1 &amp;lt;&amp;lt; 5) @@ -63,11 +63,15 @@ &#xA;#define bit_MMXEXT  (1 &amp;lt;&amp;lt; 22)  #define bit_LM       (1 &amp;lt;&amp;lt; 29)  #define bit_3DNOWP   (1 &amp;lt;&amp;lt; 30)&#xA;-#define bit_3DNOW  (1 &amp;lt;&amp;lt; 31)&#xA;+#define bit_3DNOW  (1u &amp;lt;&amp;lt; 31)&#xA;+&#xA;+/* %ebx  */&#xA;+#define bit_CLZERO (1 &amp;lt;&amp;lt; 0)    /* Extended Features (%eax == 7) */  /* %ebx */  #define bit_FSGSBASE   (1 &amp;lt;&amp;lt; 0)&#xA;+#define bit_SGX (1 &amp;lt;&amp;lt; 2)  #define bit_BMI  (1 &amp;lt;&amp;lt; 3)  #define bit_HLE   (1 &amp;lt;&amp;lt; 4)  #define bit_AVX2  (1 &amp;lt;&amp;lt; 5) @@ -87,11 +91,19 @@ &#xA;#define bit_AVX512CD    (1 &amp;lt;&amp;lt; 28)  #define bit_SHA      (1 &amp;lt;&amp;lt; 29)  #define bit_AVX512BW (1 &amp;lt;&amp;lt; 30)&#xA;-#define bit_AVX512VL   (1 &amp;lt;&amp;lt; 31)&#xA;+#define bit_AVX512VL   (1u &amp;lt;&amp;lt; 31)    /* %ecx */  #define bit_PREFETCHWT1     (1 &amp;lt;&amp;lt; 0)  #define bit_AVX512VBMI  (1 &amp;lt;&amp;lt; 1)&#xA;+#define bit_PKU    (1 &amp;lt;&amp;lt; 3)&#xA;+#define bit_OSPKE  (1 &amp;lt;&amp;lt; 4)&#xA;+#define bit_AVX512VPOPCNTDQ    (1 &amp;lt;&amp;lt; 14)&#xA;+#define bit_RDPID  (1 &amp;lt;&amp;lt; 22)&#xA;+&#xA;+/* %edx */&#xA;+#define bit_AVX5124VNNIW (1 &amp;lt;&amp;lt; 2)&#xA;+#define bit_AVX5124FMAPS (1 &amp;lt;&amp;lt; 3)    /* XFEATURE_ENABLED_MASK register bits (%eax == 13, %ecx == 0) */  #define bit_BNDREGS     (1 &amp;lt;&amp;lt; 3) @@ -168,7 +180,7 @@&#xA;     /* Return highest supported input value for cpuid instruction.  ext can&#xA;-   be either 0x0 or 0x8000000 to return highest supported value for&#xA;+   be either 0x0 or 0x80000000 to return highest supported value for&#xA;    basic or extended cpuid information.  Function returns 0 if cpuid&#xA;    is not supported or whatever cpuid returns in eax register.  If sig&#xA;    pointer is non-null, then first four bytes of the signature @@ -224,21 +236,39 @@    return __eax;  }  &#xA;-/* Return cpuid data for requested cpuid level, as found in returned&#xA;+/* Return cpuid data for requested cpuid leaf, as found in returned&#xA;    eax, ebx, ecx and edx registers.  The function checks if cpuid is&#xA;    supported and returns 1 for valid cpuid information or 0 for&#xA;-   unsupported cpuid level.  All pointers are required to be non-null.  */&#xA;+   unsupported cpuid leaf.  All pointers are required to be non-null.  */    static __inline int&#xA;-__get_cpuid (unsigned int __level,&#xA;+__get_cpuid (unsigned int __leaf,&#xA;         unsigned int *__eax, unsigned int *__ebx,&#xA;         unsigned int *__ecx, unsigned int *__edx)  {&#xA;-  unsigned int __ext = __level &amp;amp; 0x80000000;&#xA;+  unsigned int __ext = __leaf &amp;amp; 0x80000000;&#xA;+  unsigned int __maxlevel = __get_cpuid_max (__ext, 0);&#xA;+&#xA;+  if (__maxlevel == 0 || __maxlevel &amp;lt; __leaf)&#xA;+    return 0;&#xA;+&#xA;+  __cpuid (__leaf, *__eax, *__ebx, *__ecx, *__edx);&#xA;+  return 1;&#xA;+}&#xA;+&#xA;+/* Same as above, but sub-leaf can be specified.  */&#xA;+&#xA;+static __inline int&#xA;+__get_cpuid_count (unsigned int __leaf, unsigned int __subleaf,&#xA;+          unsigned int *__eax, unsigned int *__ebx,&#xA;+          unsigned int *__ecx, unsigned int *__edx)&#xA;+{&#xA;+  unsigned int __ext = __leaf &amp;amp; 0x80000000;&#xA;+  unsigned int __maxlevel = __get_cpuid_max (__ext, 0);&#xA;&#xA;-  if (__get_cpuid_max (__ext, 0) &amp;lt; __level)&#xA;+  if (__maxlevel == 0 || __maxlevel &amp;lt; __leaf)&#xA;     return 0;&#xA;&#xA;-  __cpuid (__level, *__eax, *__ebx, *__ecx, *__edx);&#xA;+  __cpuid_count (__leaf, __subleaf, *__eax, *__ebx, *__ecx, *__edx);    return 1;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6484" LastEditorUserId="6484" LastEditDate="2017-07-26T12:11:22.957" LastActivityDate="2017-07-26T12:11:22.957" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4365" PostTypeId="2" ParentId="194" CreationDate="2017-07-26T12:20:47.513" Score="21" Body="&lt;p&gt;The Intel 80486DX came out in 1989, and that can run Gentoo Linux. This is really nice because most Gentoo portage packages are very current. You can build a completely current Linux kernel for it too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What makes this possible on Gentoo is that the installer software is compiled for the old 80486DX, and then during install you can &lt;em&gt;recompile&lt;/em&gt; the portage software packages for your target architecture (i486, i586, and i686 for 32 bit machines). You do have to edit some of the config files, as they are set for i686 by default.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reasonable way to do this is to install Gentoo using a fast machine onto an older hard drive, and then move the hard drive onto the old machine once done. There are some cheap USB-to-IDE adapters you can get for around $20 to do this. Recompiling on an old computer is painfully slow, even with large amounts of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The software patches needed at present are listed in this posting:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4364/6484&quot;&gt;https://retrocomputing.stackexchange.com/a/4364/6484&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another subtle problem is that the BIOS on such old computers often have bugs, so using the GRUB or Legacy GRUB bootloaders don't work. I have the most success installing the ancient LILO bootloader. It isn't pretty, but it works best on such old hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;People just marvel at me at work with my Compaq LTE Elite 4/75CX running the latest Linux kernel and current Gentoo userland.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.computinghistory.org.uk/userdata/images/large/PRODPIC-42318.jpg&quot; rel=&quot;noreferrer&quot;&gt;http://www.computinghistory.org.uk/userdata/images/large/PRODPIC-42318.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Love that built-in mouse, eh? Well, it was cutting edge for back then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I previously used the old Debian 'Squeeze' distribution (2011) because it supported 80486, but it has become too dated. That was the last Debian version to support 80486. Understand, the Linux &lt;em&gt;kernel&lt;/em&gt; still supports 80486, but the distributions and their userland utilities have been dropping support for i486 and often i586.&lt;/p&gt;&#xA;" OwnerUserId="6484" LastEditorUserId="6484" LastEditDate="2017-07-31T02:33:53.727" LastActivityDate="2017-07-31T02:33:53.727" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4366" PostTypeId="1" AcceptedAnswerId="4367" CreationDate="2017-07-26T13:51:28.527" Score="8" ViewCount="1029" Body="&lt;p&gt;I'm looking at a rather old Linux (v2.4) that has custom device drivers built into the kernel. Now I wonder since when that was done. I suppose it most be an old technique, was this the way device drivers were added to Linux already in version 1?&lt;/p&gt;&#xA;" OwnerUserId="297" LastActivityDate="2017-07-26T21:13:59.637" Title="Since when are Linux drivers loaded as kernel modules?" Tags="&lt;linux&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4367" PostTypeId="2" ParentId="4366" CreationDate="2017-07-26T13:55:01.527" Score="14" Body="&lt;p&gt;Kernel modules have been available since &lt;a href=&quot;http://tldp.org/HOWTO/Module-HOWTO/x73.html#AEN90&quot; rel=&quot;noreferrer&quot;&gt;version 1.1.85&lt;/a&gt; in January 1995 (see the introduction of &lt;code&gt;README.modules&lt;/code&gt; in the &lt;a href=&quot;https://www.kernel.org/pub/linux/kernel/v1.1/patch85.gz&quot; rel=&quot;noreferrer&quot;&gt;1.1.85 patch&lt;/a&gt;). At first, few drivers were actually available as modules, but within a few years everything that made sense as a module was available as a module.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When developing a new driver for the kernel, it’s easier to work on it as a module than a built-in driver: instead of rebooting when you make changes to the driver, you can unload the old module and load the new one in its place. In most cases though drivers are made available in both forms (built-in and in a module) before release, assuming they’re part of the main kernel source code. Drivers which are provided outside the main kernel source code can really only be made available as modules, unless the kernel itself is forked (which does happen).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-07-26T21:13:59.637" LastActivityDate="2017-07-26T21:13:59.637" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4368" PostTypeId="2" ParentId="194" CreationDate="2017-07-26T15:32:38.830" Score="8" Body="&lt;p&gt;If you want old hardware supported by current distros, Debian's &lt;a href=&quot;https://www.debian.org/ports/mips/&quot; rel=&quot;noreferrer&quot;&gt;MIPS Port&lt;/a&gt; is supposed to run on a 1993 &lt;a href=&quot;https://en.wikipedia.org/wiki/SGI_Indy&quot; rel=&quot;noreferrer&quot;&gt;SGI Indy&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-07-26T15:32:38.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4369" PostTypeId="2" ParentId="4366" CreationDate="2017-07-26T18:46:11.713" Score="2" Body="&lt;p&gt;Before common use of initrd on hard disks, you compiled all drivers needed at boot time into the kernel. Initrd is quite old now, but use of it on hard disks is reasonably new.&lt;/p&gt;&#xA;" OwnerUserId="418" LastActivityDate="2017-07-26T18:46:11.713" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4370" PostTypeId="2" ParentId="4359" CreationDate="2017-07-27T11:27:26.707" Score="9" Body="&lt;p&gt;Pentium 4 (NetBurst uarch-family) was Intel's dead-end misadventure between the original Pentium Pro / PII / PII (P6 uarch) and its current mainstream CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel had hoped to clock P4 much higher, above 5GHz I think.  But smaller transistors didn't lower power consumption as much as they'd hoped, so they were just generating the same amount of heat in an even smaller area, making it even harder to cool.  (See also &lt;a href=&quot;http://www.lighterra.com/papers/modernmicroprocessors/&quot; rel=&quot;noreferrer&quot;&gt;the &quot;power wall&quot; and &quot;brainiac vs. speed-demon&quot; sections of this article&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Power density is now a major issue for CPUs, even when going for pure performance (rather than laptop battery life).  They have to not melt, and unless you're going to use diamond as a thermal conductor between CPU and heat sink, it's hard to get much more heat out of a CPU.  Saving power by turning off temporarily unused circuits is a big part of why current CPUs can clock so high.  See also &lt;a href=&quot;https://en.wikipedia.org/wiki/Dark_silicon&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Dark_silicon&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Following P4, Intel produced Pentium-M, Core2, and Nehalem, all of which were direct descendants of Pentium III and members of the P6 microarchitecture family.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Sandybridge: enough under-the-hood changes to be called a new microarchitecture family&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Sandybridge is generally considered to be the first member of a new microarchitecture family (which includes Intel's current Skylake/Kaby Lake mainstream microarchitecture), but it's not a completely new design.  &lt;a href=&quot;http://www.realworldtech.com/sandy-bridge/&quot; rel=&quot;noreferrer&quot;&gt;David Kanter's detailed article about Sandybridge&lt;/a&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Sandy Bridge CPU cores can truly be described as a brand new microarchitecture that is a synthesis of the P6 and some elements of the P4.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Sandybridge-family of microarchitectures definitely has P6 ancestry, but it's not still part of the same family.  &lt;a href=&quot;https://en.wikipedia.org/wiki/Nehalem_(microarchitecture)&quot; rel=&quot;noreferrer&quot;&gt;Nehalem/Westmere&lt;/a&gt; is generally considered the last mainstream member of the P6 family.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sandybridge kept some parts of Nehalem essentially unchanged.  The latencies and throughputs of many instructions are the same as on Nehalem, and even run on the same ports (see &lt;a href=&quot;http://agner.org/optimize/&quot; rel=&quot;noreferrer&quot;&gt;Agner Fog's microarch pdf&lt;/a&gt;) so it's likely that a lot of the execution units are not significantly different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The P4 side of its ancestry is more in the form of ideas than actual blocks of logic.  A good example of taking just the idea but with a different implementation is Sandybridge's decoded-uop cache.  It avoids the power cost and throughput bottleneck of re-decoding x86 instructions when the same code runs repeatedly, but it's very different from P4's trace cache.  (And unlike P4, SnB still has good decoders, so uop-cache misses are not terrible.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another P4 feature that SnB uses is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Register_file&quot; rel=&quot;noreferrer&quot;&gt;physical register file&lt;/a&gt; instead of keeping uop input/output values in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Re-order_buffer&quot; rel=&quot;noreferrer&quot;&gt;ROB&lt;/a&gt; directly.  SnB's internal uop format was reportedly simplified relative to P6, so all of the internals of the out-of-order core have changes from Nehalem.  SnB is much more closely related to P6 than P4, but is definitely not just another member of the P6 family.&lt;/p&gt;&#xA;" OwnerUserId="3296" LastActivityDate="2017-07-27T11:27:26.707" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4371" PostTypeId="1" AcceptedAnswerId="4372" CreationDate="2017-07-27T21:50:24.670" Score="2" ViewCount="399" Body="&lt;p&gt;With modern computers and game consoles, it's common to have the ability to take 115 or 230 volt mains supply, selected by a small switch on the back of the machine. Presumably the logistical advantage of not needing separate SKUs for America and Europe, outweighs the cost of some extra circuitry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When did microcomputers start having this feature?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I thought there was always a small manual switch. If some machines can do this completely transparently, that counts too!&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2017-07-27T21:55:39.170" LastActivityDate="2017-07-27T23:31:19.607" Title="When did computers start being able to take both 115 and 230 volts?" Tags="&lt;history&gt;&lt;power&gt;" AnswerCount="1" CommentCount="7" ClosedDate="2017-07-28T07:15:33.363" ContentLicense="CC BY-SA 3.0" />
  <row Id="4372" PostTypeId="2" ParentId="4371" CreationDate="2017-07-27T23:31:19.607" Score="2" Body="&lt;p&gt;It was about when the ATX standard became the norm. Of course, a few late AT power supplies had this feature, but it was a rather niche feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most ATX PSUs have a little, usually red switch that allows end-user to change the voltage accordingly. It's worth mentioning that a few OEMs used do stick something over those switches to avoid users from changing them - less because they wanted to disallow users to move with their computers, more because someone might fiddle with the switch and break the PSU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides desktop power supplies, it's also worth to mention laptop ones; Laptops had power supplies that were able to change voltages automatically a little bit later than ATX power supplies arrived. It was about 1998-2000 that they became a norm, but some chargers like IBM's 85G6733 arrived earlier (about 1996-1997).&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2017-07-27T23:31:19.607" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4373" PostTypeId="1" CreationDate="2017-07-28T01:05:57.903" Score="3" ViewCount="373" Body="&lt;p&gt;I have a Sony Vaio PCG-F560 notebook and I have installed Windows 98SE on it. The only issue is that the display works only in 16 colors mode with 640x480 resolution. I think the problem is that graphics adapter isn't recognized and set up as a standard adapter. When I try to install it manually I can't see 256XL model in the list, only the MagicGraph 128 series. I have not found a compatible driver online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The video card is compatible with Windows XP, the OS bundled with the notebook. There are no other compatibility issues. How can I make this display compatible with Windows 98SE?&lt;/p&gt;&#xA;" OwnerUserId="6501" LastEditorUserId="278" LastEditDate="2017-07-28T09:58:10.797" LastActivityDate="2019-02-28T05:22:32.640" Title="Using a NeoMagic 256XL with Windows 98SE" Tags="&lt;video&gt;&lt;windows-98&gt;&lt;driver&gt;&lt;new-hardware-adaptation&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4374" PostTypeId="1" AcceptedAnswerId="4381" CreationDate="2017-07-28T02:09:51.997" Score="6" ViewCount="1556" Body="&lt;p&gt;I have a Macintosh LC II that I just acquired.  When I attempted to power it on, I got nothing.  No tones, no LED, no fan...nothing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I took out the power supply and tried to measure any voltage coming out but my multi-meter indicated 0 volts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I removed the case to check the fuse (shame on you Apple).  The fuse looks good.  I got good continuity across the fuse.  All of the capacitors look good.  No leaking, no bulging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only thing I get is a very faint clicking sound inside the PSU.  About 3-4 times per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can provide the exact model number of the power supply if that would help.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas on what the problem is?  I suspect it would be easier/cheaper to find a replacement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for any suggestions.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="2081" LastEditDate="2017-07-28T18:28:06.800" LastActivityDate="2018-08-12T16:21:29.973" Title="Macintosh LC II power supply clicking" Tags="&lt;apple-macintosh&gt;&lt;power&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4375" PostTypeId="2" ParentId="4373" CreationDate="2017-07-28T12:18:11.380" Score="3" Body="&lt;p&gt;Yes, getting only 16 colors is a classic symptom of the video driver not being properly installed. This used to be a big problem on Windows 9x; the default driver only did VGA (640&amp;times;480, 4-bit color), and most contemporary systems did not have drivers bundled with the OS. I was working as a technician in a repair shop around this time, and remember being &lt;em&gt;massively&lt;/em&gt; relieved when Windows 2000/XP became popular enough to replace 9x, as they had virtually all necessary drivers bundled with the OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The normal way to solve this problem is by going to the manufacturer's support website and downloading the appropriate driver. &lt;a href=&quot;https://esupport.sony.com/US/p/model-home.pl?mdl=PCGF560&amp;amp;template_id=1&amp;amp;region_id=1&amp;amp;tab=download#/downloadTab&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is Sony's driver download page for that notebook&lt;/a&gt;. The pre-selected default is Windows 98 SE, as &lt;a href=&quot;https://docs.sony.com/release//specs/PCGF560_mksp.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;that's the OS the computer shipped with&lt;/a&gt;. That's a good sign, because it suggests that there will be a Windows 9x-compatible driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately (and oddly), there's no video driver listed on that page, either for 98 SE or Me. I don't know why that would be omitted. Lots of other drivers are there (you'll probably need those, too), but no video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://esupport.sony.com/US/p/swu-download.pl?mdl=PCGF560&amp;amp;upd_id=771&amp;amp;os_group_id=4&quot; rel=&quot;nofollow noreferrer&quot;&gt;There &lt;em&gt;is&lt;/em&gt; a video driver available for Windows 2000&lt;/a&gt;, so you might want to try that one—you might get lucky and find a Windows 98 driver included in the package. Maximize your chances of success by &lt;em&gt;not&lt;/em&gt; using the install package bundled with the driver. Instead, unzip it to a temporary directory, go into Device Manager, update the driver for the unidentified video device, and point it to the temporary directory into which you expanded the driver data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that doesn't work (and it probably won't, since Windows 2000 is an NT-based operating system, which uses a completely different driver model than the VxD-based Windows 9x platform), then you'll have to go hunting for a driver out there on the web. This can be a lot of work, and requires a lot of patience. It can also be somewhat dangerous, as you're downloading binary executable files from unknown sources. &lt;em&gt;Caveat emptor&lt;/em&gt;. &lt;a href=&quot;http://www.video-drivers.com/companies/717.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;This website&lt;/a&gt; has a long list of drivers related to that one, including several for the &quot;256XL&quot;, listed as supporting Windows 98. Before giving up, it would definitely be worth trying a couple of those.&lt;/p&gt;&#xA;" OwnerUserId="2037" LastEditorUserId="2037" LastEditDate="2019-02-28T05:22:32.640" LastActivityDate="2019-02-28T05:22:32.640" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="4376" PostTypeId="1" AcceptedAnswerId="4377" CreationDate="2017-07-28T19:25:14.877" Score="22" ViewCount="1710" Body="&lt;p&gt;Reading through the Z80 datasheet, I noticed something interesting.  The Z80 separates its instruction execution into separate phases (which are called &quot;machine cycles&quot; in the official literature, but I don't like that terminology because it is too easy to confuse with clock cycles ... a machine cycle consists of multiple clock cycles, usually 3 or 4) that perform different kinds of operation. In the first such phase, which is called M1, the processor fetches the instruction to execute in the remaining phases, then once execution has finished it cycles back to M1 again and fetches the next instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, the processor has a pin that provides a signal identifying whether or not it is in the M1 phase. Apparently this is because the memory timing for instruction fetch is different to memory  accesses that are performed by the executing instruction, so if your RAM has an access time &gt; 1.5 clock cycles but &amp;lt; 2 cycles you need to assert the /WAIT signal during instruction fetches but not data fetches. But I see no reason this couldn't be used as a seventeenth address line, effectively allowing the Z80 to address an entire 64K of data memory without the inconvenience of needing to fit its program in the same space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any examples of machines that did this? Or any reason why it wouldn't work?&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2019-05-10T14:09:23.667" Title="Separate code and data address spaces on the Z80" Tags="&lt;hardware&gt;&lt;z80&gt;" AnswerCount="7" CommentCount="25" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4377" PostTypeId="2" ParentId="4376" CreationDate="2017-07-28T20:05:47.973" Score="25" Body="&lt;p&gt;The M1 line literally means machine cycle 1 — and you're right about timing; the instruction fetch part of an M1 cycle is only two clock cycles long and will sample the data lines in the first clock cycle that it finds WAIT not asserted in, whereas a normal read is three clock cycles long and will sample the data lines in the clock cycle immediately after the first in which it finds WAIT not asserted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However when the Z80 reads an operation with an operand, such as &lt;code&gt;LD A, 23&lt;/code&gt;, only the opcode itself is accessed in machine cycle 1. So if you were to use M1 naively as a seventeenth address line then you'd see that operands were no longer fetched from the same area as operations. Which would be problematic for most execution flows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, what you could do is latch some part of the address fetched in each M1 cycle and use that to alter the memory map — so that code in one address range sees one memory map but code in another range sees a different memory map. This idea is lifted from an expansion of the Acorn Electron, which is a 6502 machine but the SYNC pin there does pretty much the same thing in indicating which bytes are opcodes. This particular expansion switches the RAM seen when the OS is in its drawing routines with a separate bank visible to the BASIC ROM. It thereby takes the area used for display out of the normal addressing range.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-07-28T20:05:47.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4378" PostTypeId="2" ParentId="4354" CreationDate="2017-07-28T21:05:04.803" Score="1" Body="&lt;p&gt;If you allow addition of bank-switched RAM, the ratio can get very silly. For example, the 16KB Sinclair ZX Spectrum could have been expanded using an upgrade whose schematics were published in the Your Spectrum magazine (and which was also available as an assembled module, IIRC) up to 4MB, is by a factor of 256.  I believe the same system could have been used with little or modification on a ZX81 (originally sold with just 1KB RAM) for a factor of 4096 expansion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Custom built hardware could of course have taken it even further. But I'm not sure there would have been much point. Fully populating that 4MB expansion in 1986 would have cost somewhere between £500 and £1000, and the RAM chips (512 of them) would have dissipated a somewhat cozy 10W at idle and closer to 100W during a refresh cycle. I don't know whether anyone actually did it at the time.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-07-28T21:05:04.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4379" PostTypeId="2" ParentId="4354" CreationDate="2017-07-28T23:19:37.943" Score="5" Body="&lt;p&gt;The Altair 8800 shipped with 256 bytes of memory but the 8080 CPU could directly address 64K (with e.g. a Central Data 64K RAM Board), so that's 256&amp;times;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the 1980s, Macrotech released a &lt;a href=&quot;http://www.s100computers.com/Hardware%20Folder/Macrotech/2MGRAM/2MG%20Board.htm&quot; rel=&quot;noreferrer&quot;&gt;2MB RAM board&lt;/a&gt; for the S-100 bus which supports 4 such boards, so that's 32,768&amp;times;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More recently, hobbyists have built &lt;a href=&quot;http://www.s100computers.com/My%20System%20Pages/RAM%20Board/4MG%20RAM%20Board.htm&quot; rel=&quot;noreferrer&quot;&gt;4MB RAM boards&lt;/a&gt;, so that's 65,536&amp;times; total.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-07-28T23:19:37.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4380" PostTypeId="2" ParentId="3328" CreationDate="2017-07-28T23:24:47.477" Score="8" Body="&lt;p&gt;The premise of your question is flawed.  Much faster RAM than 2.6MHz (which I believe you have picked as an approximation of a 375ns cycle time, which is a critical number as will be explained below) was available in 1981. It just wasn't used because there was no point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 4164 series of DRAM chips were launched in the late 70s with speed grades available down to 120ns. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Home computers of the era may not have used the capability.  DRAM chips store data in a 2D grid in order to minimize address decoding logic.  Basically, a row and a column are selected, and the bit stored at the intersection is active. To reduce pin count, the row and column address are provided separately, controlled by 2 lines, RAS (Row Address Select) and CAS (Column Address Select). To specify an address, you connect RAS to ground while the first half your address is on the pins, then CAS for the next half.  Obviously this takes longer than just providing the address all at once, so if you are accessing two columns in the same row you don't need to change the row address again. This is called page mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using page mode would have required a DRAM controller capable of recognizing when the next access was going to be within the same row as the last, and would thus require latches, comparators and a fast clock signal to sync to, which was beyond the level of sophistication of the typical home computer, which would be more likely to have a capacitor and a Schmitt trigger to sequence the RAS and CAS lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But even without using a proper DRAM controller, the cycle time for a 4164-120 is 220ns. So of course the home computers of the era didn't bother with using page mode: they were mostly using either a 6502/6510 (max clock speed 2MHz) or Z80A (4MHz, but doesn't expect response to its memory requests until 1.5 cycles after it issues them), so you could easily get away with using memory that only responded after 375ns or longer, which is 1.5 cycles of the Z80A bus, and therefore the fastest memory access time that would make any difference in a 1981 era home computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that is why you have the erroneous belief that you couldn't get RAM faster than 2.6MHz – you could, but it wouldn't have helped because that's the fastest speed your processor would have used it at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edited to add&lt;/em&gt; - I've just discovered a wonderful resource that can help answer your original question.  In the pre-Internet era, it was of course tricky to get hold of datasheets for random components in order to evaluate whether they might be useful, and so on, a problem which led to the production of books that contained useful selections of datasheets and application notes for common (and sometimes not-so-common) components, along with indices to help you find components that might perform the function you're looking for.  Sometimes this was just one manufacturers data, but there were also publications that covered multiple manufacturers, including one called &quot;IC Master&quot;.  It happens that several editions of this publication have been scanned and are available on archive.org. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, I can't find the 1981 edition.  But they have the 1979 edition and the 1983 edition, which should give you some idea of what was around in '81.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 1979 edition shows that, as you might expect, larger ROMs were slower than smaller ones, so it depends how big your BASIC interpreter was.  &lt;a href=&quot;https://archive.org/stream/bitsavers_icMaster19_183923985/1979_IC_Master#page/n1075/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;This page&lt;/a&gt; contains a summary of the available ROMs in that year. As you can see, for any size larger than about 2KB you will be using one of the MOSFET-based technologies (mostly NMOS, but some CMOS chips were available), which was somewhat slower than the larger and more energy-hungry TTL implementations.  So for a 2KB ROM, you could get access times down to 100ns/10MHz (i.e. better than most reasonably-priced RAM chips of the era -- scroll a few pages back and you'll see than a 4Kbit DRAM could be as fast as 40ns if you were willing to pay for it, but most were in the 150-400ns range), but for a larger 16KB (as used in the ZX Spectrum, for example) you'd be looking at 450ns/2.2MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By 1983, &lt;a href=&quot;https://archive.org/stream/bitsavers_icMaster19_94563134/1983_IC_Master_Volume_2#page/n849/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;the situation had improved quite a bit&lt;/a&gt;.  4KB fast TTL ROMs were available, and the MOS-based parts had begun to catch up with TTL in speed, so you could by then get a 16KB ROM as fast as 200ns (5MHz), while DRAM speed was practically stationary (100ns was the fastest speed available for a 64Kbit DRAM in both years, although I imagine it would have been substantially cheaper in 1983...).&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="3748" LastEditDate="2019-10-18T13:38:44.157" LastActivityDate="2019-10-18T13:38:44.157" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="4381" PostTypeId="2" ParentId="4374" CreationDate="2017-07-29T03:10:54.127" Score="7" Body="&lt;p&gt;The ticking indicates restarting of the power supply by the controller, probably&#xA;due to a short.   The short would have to be on the OUTPUT (low voltage) side&#xA; (shorted AC-side devices would have taken the fuse out).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Power supplies of that era didn't suffer burst capacitors as often as the post-2000 years. The most likely cause of overcurrent is a shorted fast-recovery diode in a DC output circuit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at CR51 (&quot;C82M&quot;) and CR52 (&quot;B82M&quot;), one of those is probably shorted (either side pin to&#xA;the center should read as a diode, center=cathode).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A suitable replacement (has to be fully insulated &quot;fullpak&quot;) without the Japanese part number (because TDK made these supplies) might be MBRF2045CTG, from ON Semiconductor.&#xA;The same power supply was in LC, LCII,  Performa 4nn, Quadra 605... but there&#xA;were earlier versions as well, so my part numbers might not be the same as yours.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2017-07-29T03:10:54.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4382" PostTypeId="1" AcceptedAnswerId="6371" CreationDate="2017-07-29T14:45:59.570" Score="10" ViewCount="2108" Body="&lt;p&gt;In the days of 8-bit computers, two of the more common memory configurations were 16K and 64K, implemented as eight RAM chips of 16kbit or 64kbit respectively. The setup was one chip per bit over the data bus, so you couldn't use a pair of 64kbit chips to supply 16K of RAM. (Well, presumably you could if you were willing to let memory access take four times as long, but nobody was.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, when the Commodore 64 was released in 1982, it shipped with 64K of RAM, which was at that time unusual and moderately expensive relative to the previously more common 16K, but became the typical configuration as time went on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About what year did it get to the point where 64kbit RAM chips didn't cost significantly more than 16kbit so that even if you were aiming at the lowest end of the market, it wouldn't make sense to provide less than 64K?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-05-02T22:44:51.647" Title="When did 64K RAM become about as cheap as 16K?" Tags="&lt;history&gt;&lt;memory&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4383" PostTypeId="2" ParentId="4382" CreationDate="2017-07-29T20:08:09.097" Score="4" Body="&lt;p&gt;At a very rough estimate, around the beginning of 1984. Amstrad introduced the CPC 464 in spring 1984 with 64 K, and announced the CPC6128 for the US market very shortly thereafter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(source: &lt;a href=&quot;https://www.theregister.co.uk/2014/02/12/archaeologic_amstrad_cpc_464/&quot; rel=&quot;nofollow noreferrer&quot;&gt;You’re NOT fired: The story of Amstrad’s amazing CPC 464 • The Register&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-07-29T20:08:09.097" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4384" PostTypeId="1" AcceptedAnswerId="4385" CreationDate="2017-07-29T23:34:53.400" Score="7" ViewCount="622" Body="&lt;p&gt;There are a number of sources that give transistor counts for different CPUs over the decades. I'm looking for transistor counts for early video chips. in particular, I'd be interested in transistor counts for the video chips used in:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Atari 800&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Commodore 64&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Nintendo Entertainment System&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Atari ST&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Amiga&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But also interested in any other seventies or eighties video chips.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-07-30T02:40:46.783" Title="Transistor count of early video chips" Tags="&lt;history&gt;&lt;video&gt;&lt;chip&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4385" PostTypeId="2" ParentId="4384" CreationDate="2017-07-30T02:40:46.783" Score="7" Body="&lt;p&gt;To establish a lower bound, the only figure I can find is that of the Atari 2600's TIA: per &lt;a href=&quot;http://visual6502.org/wiki/index.php?title=Chips_in_our_collection&quot; rel=&quot;noreferrer&quot;&gt;the Visual 6502 team&lt;/a&gt;, who have decapped, imaged and hence simulated it, the TIA has 6193 transistors. So it's more than about 75% more than the 6502 just for a couple of sprites, a couple of missiles, a ball and a single row of background.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-07-30T02:40:46.783" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4386" PostTypeId="1" AcceptedAnswerId="4415" CreationDate="2017-07-30T02:58:10.953" Score="24" ViewCount="4288" Body="&lt;p&gt;I've recently really wanted to try and design a computer system around a retro 8-bit CPU such as the Zilog Z80 or the Intel 8080, and I would appreciate some sanity checks! I was inspired by Ben Eater's series on making a breadboard CPU, and I've built a large section of his project using the TI 74LS series TTL chips. Now, I was wondering if it was a reasonable project to design a retro computer based on the Z80, 8080, or other comparable 8-bit CPU. (perhaps the Motorola 6800?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that I'd have to get printed PCBs for any sort of reliability (no breadboards at this scale!) or at least get some solder-on boards. Also, I would have to get chips from unconventional sources (used or niche shops).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've researched the Intel 8080 and it seems that they made (at least back then) a wide range of companion chips like the memory controller, IO controller, a chip that generated all the necessary system clocks/signals, etc. That seems rather convenient, but I worry that those companion chips would be even harder to acquire than the CPU itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a pretty good conceptual understanding of how these basic CPUs work, as well as a general understanding of assembly, machine code, stacks, instructions, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this an impossible undertaking, or something that has been done many times before? My final goal would be to get some simple C compiler working, like Small-C, along with a terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: For future visitors, here is a link to a site with a very barebones Z80 implementation: &lt;a href=&quot;http://searle.hostei.com/grant/z80/SimpleZ80.html&quot; rel=&quot;noreferrer&quot;&gt;http://searle.hostei.com/grant/z80/SimpleZ80.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6504" LastEditorUserId="6504" LastEditDate="2017-07-30T04:07:39.823" LastActivityDate="2020-02-10T17:31:33.920" Title="DIY Project using 1970s 8-bit CPU, is it possible?" Tags="&lt;hardware&gt;&lt;z80&gt;&lt;8080&gt;" AnswerCount="5" CommentCount="16" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4387" PostTypeId="1" AcceptedAnswerId="4389" CreationDate="2017-07-30T07:44:28.197" Score="17" ViewCount="2226" Body="&lt;p&gt;I've always been fascinated by the rarity and elitism of such devices.&lt;/p&gt;&#xA;&lt;p&gt;However, from a practical standpoint, I don't understand why such low transfer rate device ended up in a bus commonly used for its performance.&lt;/p&gt;&#xA;&lt;p&gt;Best candidates I can think of were Akai audio samplers that implemented the bus and also had a floppy drive.&lt;/p&gt;&#xA;&lt;p&gt;For what usage in computers were these devices for?&lt;/p&gt;&#xA;&lt;p&gt;Note: I am talking about 1440 KiB floppies, not Iomega Zip drives; for those, the benefit was obviously evident.&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="15334" LastEditDate="2020-12-20T09:45:16.703" LastActivityDate="2020-12-20T09:45:16.703" Title="What were practical uses of SCSI floppy drives?" Tags="&lt;floppy-disk&gt;&lt;scsi&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="4388" PostTypeId="1" CreationDate="2017-07-30T10:25:59.703" Score="10" ViewCount="863" Body="&lt;p&gt;I just reverse engineered the file protection on the Amstrad CPC, which uses two sequences of rotating bytes taken straight out of the AMSDOS ROM to XOR each byte of the file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have &lt;code&gt;SEQa&lt;/code&gt; of 13 bytes and &lt;code&gt;SEQb&lt;/code&gt; of 11 bytes, the first byte of the file is XOR'd with &lt;code&gt;SEQa[0]&lt;/code&gt; and &lt;code&gt;SEQb[0]&lt;/code&gt;, the next byte with &lt;code&gt;SEQa[1]&lt;/code&gt; and &lt;code&gt;SEQb[1]&lt;/code&gt; and so on. When each sequence ends, it starts at the beginning again, e.g.:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10: SEQa[10] XOR SEQb[10]&#xA;11: SEQa[11] XOR SEQb[0]&#xA;12: SEQa[12] XOR SEQb[1]&#xA;13: SEQa[0] XOR SEQb[2]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are a number of obvious problems, such as the same process both encoding and decoding the input, the way ROT13 is self-reversible. The pattern is truncated at 128 bytes instead of using the full 143 bytes of the pattern. The same XOR mask is used every 128 bytes, making it easy to naïvely decode it with a 128 byte pattern without needing knowledge of the underlying method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it wasn't so easy to reverse engineer and the bytes were unknown instead of being taken from the AMSDOS ROM, would this scheme be considered secure in 1985? How does this compare to using a single sequence of 143 bytes or a largish prime number?&lt;/p&gt;&#xA;" OwnerUserId="2067" LastActivityDate="2018-11-14T13:56:12.853" Title="Was the Amstrad's file protection considered secure in 1985?" Tags="&lt;cpc&gt;&lt;copy-protection&gt;" AnswerCount="4" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4389" PostTypeId="2" ParentId="4387" CreationDate="2017-07-30T10:33:28.440" Score="21" Body="&lt;p&gt;When you're designing a system you might want to avoid messing with floppy controllers. Just implement a SCSI interface as a one-for-all and use SCSI drives, no matter what medium. Clean approach.&lt;/p&gt;&#xA;" OwnerUserId="5200" LastActivityDate="2017-07-30T10:33:28.440" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4390" PostTypeId="1" CreationDate="2017-07-30T10:44:21.643" Score="7" ViewCount="469" Body="&lt;p&gt;Using the Amstrad CPC disk data format as an example, the sector IDs are C1, C6, C2, C7, C3, C8, C4, C9, C5. Is it possible to lay these IDs on a track without actually formatting each sector or does setting these IDs on a track entail formatting the sectors too?&lt;/p&gt;&#xA;" OwnerUserId="2067" LastActivityDate="2017-08-15T21:46:40.373" Title="Can floppy disks have sectors laid out without being formatted?" Tags="&lt;floppy-disk&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4391" PostTypeId="1" AcceptedAnswerId="4394" CreationDate="2017-07-30T11:09:52.650" Score="18" ViewCount="3386" Body="&lt;p&gt;As I understand it, in the eighties the typical way of handling memory was one RAM chip per bit of data bus width. Suppose you were building a 16-bit machine and you wanted to give it 32K of RAM, you could do this with 16kbit RAM chips, using sixteen of them. 128K could equally well be done using 64kbit chips, again sixteen of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you wanted 64K of RAM, this could only be done by using eight of the 64kbit chips, and making each chip deliver two bits, one after another, thus incurring a slowdown.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you don't want to pay any penalty in access speed, it's 32K or 128K but not in between. Is this correct?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="76" LastEditDate="2017-07-31T06:43:53.077" LastActivityDate="2017-07-31T06:43:53.077" Title="80s DRAM chips: one per bit of data bus width?" Tags="&lt;memory&gt;&lt;performance&gt;" AnswerCount="5" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4392" PostTypeId="1" CreationDate="2017-07-30T11:58:18.067" Score="3" ViewCount="806" Body="&lt;p&gt;Although &lt;a href=&quot;https://en.wikipedia.org/wiki/MMX_(instruction_set)&quot; rel=&quot;nofollow noreferrer&quot;&gt;MMX techology&lt;/a&gt;,  introduced in 1997, is long superseded by SSE series of extensions, it's still included in every modern x86 CPU for backwards compatibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are some examples of programs which did use MMX when available, and did gain substantial acceleration from it? Were there maybe some games which were MMX-capable?&lt;/p&gt;&#xA;" OwnerUserId="1992" LastActivityDate="2017-07-30T11:58:18.067" Title="What are some programs known to take advantage of Intel MMX instructions?" Tags="&lt;software&gt;&lt;intel&gt;&lt;instruction-set&gt;" AnswerCount="0" CommentCount="7" FavoriteCount="1" ClosedDate="2017-07-31T20:03:27.633" ContentLicense="CC BY-SA 3.0" />
  <row Id="4393" PostTypeId="2" ParentId="4390" CreationDate="2017-07-30T12:38:03.960" Score="8" Body="&lt;p&gt;A disk could exist with only the sector headers being well-formed and the parts in between being only random noise, but could not be created with the built-in FDC. The CPC uses an FDC765, which is the same as that in a PC, and that has only an atomic 'format track' command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although it would be possible with a commercial disk duplicator, it'd be more likely that a producer would either just deliberately write bad CRCs or else deliberately write fuzzy (i.e. placed so as seemingly to shift location on each reading due to uncontrollable factors) or weak (actually a lot like being unformatted, but a deliberately written low-amplitude section rather than just whatever's there) bits as home machines can producer neither, but the results of reading are predictable.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-07-30T12:38:03.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4394" PostTypeId="2" ParentId="4391" CreationDate="2017-07-30T13:48:32.617" Score="25" Body="&lt;p&gt;No.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your hypothetical 16 bit machine with 64kiB of RAM, you could simply implement two 32kiB banks with using sixteen 16kib chips each. This obviously doubles the required number of chips and board space required, which may not be cost-effective against using just next higher-density chips and getting twice as much memory again for free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least one real-world example exists. The Amiga 500 shipped with 512kiB of RAM, and early models implement this using sixteen 256kib chips. The A501 memory expansion contains another sixteen 256kib chips, giving 1MiB in total.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2017-07-30T13:48:32.617" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4395" PostTypeId="2" ParentId="4388" CreationDate="2017-07-30T17:09:02.993" Score="7" Body="&lt;p&gt;I'm not familiar with that system, but if users had the ability to protect their own files, then no it was not secure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can protect your own files (with known contents) then you have easy access to both the protected and unprotected file.  XOR has always been a very common encryption method, so it would have been natural for a curious individual to try XORing the protected and the unprotected file.  Once you've done that it will be apparent that the XOR pattern repeats after 128 bytes and the security of the protection pretty much falls apart at that point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not necessary to figure out how the 128-byte key is generated, you just need to know the result.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-07-30T17:09:02.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4396" PostTypeId="2" ParentId="4391" CreationDate="2017-07-30T18:12:24.267" Score="2" Body="&lt;p&gt;It was very common in 1980s systems to utilize DRAM chips that output 4 bits. Common variants were 256Kb DRAM chips accessed as 64K x 4 bits, and 1Mb chips accessed as 256K x 4 bits. Thus, a 16-bit data bus might only require 4 DRAM chips to provide 512KB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 4-bit wide DRAM's were used widely because they reduced chip count needed for a given data bus width. 8 chips connected to a 32-bit data bus was a common configuration into the early 1990s. Also, later versions of 1980s 8-bitters like the Apple //e Platinum and the Commodore C64c were able to reduce their DRAM footprint to only 2 chips, reducing manufacturing costs.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-07-30T18:12:24.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4397" PostTypeId="2" ParentId="4391" CreationDate="2017-07-30T19:16:12.937" Score="14" Body="&lt;p&gt;There were several variations largely driven by cost at any particular point in time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is interesting is WHY 1 bit chips were popular, basically your address bus was typically multiplexed using the RAS and CAS signals, so if the technology at the time made 64K a desirable chip size, you could do 8 Address, RAS,CAS, 1 Data, WR, RD, CE plus power and ground in something like a 16/18 pin DIL and only end up with 1 signal per chip being unique. Back before multilayer PCBs were cheap, this mattered. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare with an array of 8, 8k*8 parts (Same total memory size), now you have to run that 8 bit data bus to every chip, plus 7 bits of address, plus the control signals, plus you need an address decoder, so you are looking at a 24 pin chip, with much more routing on the PCB.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually speeds got to the point that the lower bus loading made wider devices a better choice (especially as NMOS had horrible noise margins), but if you look at a modern DIMM you will still find that multiple narrow parts are often favoured. &lt;/p&gt;&#xA;" OwnerUserId="6508" LastActivityDate="2017-07-30T19:16:12.937" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4398" PostTypeId="2" ParentId="4388" CreationDate="2017-07-30T22:03:43.370" Score="12" Body="&lt;p&gt;Secure? No, but much more so than protected BASIC programmes on tape, which merely had a single field set in the tape header that triggered the &lt;em&gt;run once then NEW&lt;/em&gt; behaviour. It would definitely have slowed down most bedroom crackers, but if you had a sector editor, a printer and a good eye for detail, you could probably work it out quite quickly. As Ken has said, you only need the byte sequence, you don't need to know the source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a quick demo of how one might retrieve the key, consider the following BASIC programme:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 REM 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000&#xA;20 REM 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000&#xA;30 END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(that is, several lines of REM statements of maximum length, all holding the same byte value)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first 512 bytes of this programme when saved look like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00000000: 0050 524f 542d 4220 2042 4153 0000 0000  .PROT-B  BAS....&#xA;00000010: 0000 0000 0070 0100 0602 0000 0000 0000  .....p..........&#xA;00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................&#xA;00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................&#xA;00000040: 0602 004b 031e 0098 0000 001a 4220 2024  ...K........B  $&#xA;00000050: 2424 ff00 ff00 0000 0000 0000 0000 0000  $$..............&#xA;00000060: 0000 0000 0000 0000 0000 0000 0000 0000  ................&#xA;00000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................&#xA;00000080: ff00 0a00 c520 3030 3030 3030 3030 3030  ..... 0000000000&#xA;00000090: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;000000a0: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;000000b0: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;000000c0: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;000000d0: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;000000e0: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;000000f0: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;00000100: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;00000110: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;00000120: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;00000130: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;00000140: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;00000150: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;00000160: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;00000170: 3030 3030 3030 3030 3030 3030 3030 00ff  00000000000000..&#xA;00000180: 0014 00c5 2030 3030 3030 3030 3030 3030  .... 00000000000&#xA;00000190: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;000001a0: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;000001b0: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;000001c0: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;000001d0: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;000001e0: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;000001f0: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When saved via &lt;code&gt;SAVE &quot;PROT-P.BAS&quot;,P&lt;/code&gt; they look like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00000000: 0050 524f 542d 5020 2042 4153 0000 0000  .PROT-P  BAS....&#xA;00000010: 0000 0100 0070 0100 0602 0000 0000 0000  .....p..........&#xA;00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................&#xA;00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................&#xA;00000040: 0602 005a 03b5 2c75 ea6c 3725 3030 3030  ...Z..,u.l7%0000&#xA;00000050: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;00000060: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;00000070: 3030 3030 3030 3030 3030 3030 3030 3030  0000000000000000&#xA;00000080: 542c e7ea a917 0fdc abef 4a3c 0be4 5dc5  T,........J&amp;lt;..].&#xA;00000090: 3474 3321 ef69 bf11 434a fcb3 ed00 5a00  4t3!.i..CJ....Z.&#xA;000000a0: e3bf 32c0 505b a4d4 87c3 3398 50b8 c073  ..2.P[....3.P..s&#xA;000000b0: d8be 7390 fab4 0163 c32f f9d8 9df0 8a5d  ..s....c./.....]&#xA;000000c0: a338 e45a 1c82 3717 f0a9 deb9 9ff3 639b  .8.Z..7.......c.&#xA;000000d0: 1b04 6c1f 23de 9a1c e9c4 8c22 83f5 2c58  ..l.#......&quot;..,X&#xA;000000e0: 3110 1cca 4796 8594 ccab c102 6bf3 4047  1...G.......k.@G&#xA;000000f0: b506 8e6b bcf8 85f2 c03b a83f 06ad e8a6  ...k.....;.?....&#xA;00000100: 9b1c ddda 5c07 0fdc abef 4a3c 0be4 5dc5  ....\.....J&amp;lt;..].&#xA;00000110: 3474 3321 ef69 bf11 434a fcb3 ed00 5a00  4t3!.i..CJ....Z.&#xA;00000120: e3bf 32c0 505b a4d4 87c3 3398 50b8 c073  ..2.P[....3.P..s&#xA;00000130: d8be 7390 fab4 0163 c32f f9d8 9df0 8a5d  ..s....c./.....]&#xA;00000140: a338 e45a 1c82 3717 f0a9 deb9 9ff3 639b  .8.Z..7.......c.&#xA;00000150: 1b04 6c1f 23de 9a1c e9c4 8c22 83f5 2c58  ..l.#......&quot;..,X&#xA;00000160: 3110 1cca 4796 8594 ccab c102 6bf3 4047  1...G.......k.@G&#xA;00000170: b506 8e6b bcf8 85f2 c03b a83f 06ad d869  ...k.....;.?...i&#xA;00000180: ab38 ed2f 4c07 0fdc abef 4a3c 0be4 5dc5  .8./L.....J&amp;lt;..].&#xA;00000190: 3474 3321 ef69 bf11 434a fcb3 ed00 5a00  4t3!.i..CJ....Z.&#xA;000001a0: e3bf 32c0 505b a4d4 87c3 3398 50b8 c073  ..2.P[....3.P..s&#xA;000001b0: d8be 7390 fab4 0163 c32f f9d8 9df0 8a5d  ..s....c./.....]&#xA;000001c0: a338 e45a 1c82 3717 f0a9 deb9 9ff3 639b  .8.Z..7.......c.&#xA;000001d0: 1b04 6c1f 23de 9a1c e9c4 8c22 83f5 2c58  ..l.#......&quot;..,X&#xA;000001e0: 3110 1cca 4796 8594 ccab c102 6bf3 4047  1...G.......k.@G&#xA;000001f0: b506 8e6b bcf8 85f2 c03b a83f 06ad e8a6  ...k.....;.?....&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Very quickly, you can see repeat patterns: look at the sequences at &amp;amp;110 and &amp;amp;190 where the ASCII representation shows &lt;code&gt;4t3!&lt;/code&gt;… Realizing that most of the bytes in the source file are &amp;amp;30, XORing the result with &amp;amp;30 would be a good guess for recovering the key:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;          …&#xA;00000080: 641c d7da 9927 3fec 9bdf 7a0c 3bd4 6df5  d....'?...z.;.m.&#xA;00000090: 0444 0311 df59 8f21 737a cc83 dd30 6a30  .D...Y.!sz...0j0&#xA;000000a0: d38f 02f0 606b 94e4 b7f3 03a8 6088 f043  ....`k......`..C&#xA;000000b0: e88e 43a0 ca84 3153 f31f c9e8 adc0 ba6d  ..C...1S.......m&#xA;000000c0: 9308 d46a 2cb2 0727 c099 ee89 afc3 53ab  ...j,..'......S.&#xA;000000d0: 2b34 5c2f 13ee aa2c d9f4 bc12 b3c5 1c68  +4\/...,.......h&#xA;000000e0: 0120 2cfa 77a6 b5a4 fc9b f132 5bc3 7077  . ,.w......2[.pw&#xA;000000f0: 8536 be5b 8cc8 b5c2 f00b 980f 369d d896  .6.[........6...&#xA;00000100: ab2c edea 6c37 3fec 9bdf 7a0c 3bd4 6df5  .,..l7?...z.;.m.&#xA;00000110: 0444 0311 df59 8f21 737a cc83 dd30 6a30  .D...Y.!sz...0j0&#xA;00000120: d38f 02f0 606b 94e4 b7f3 03a8 6088 f043  ....`k......`..C&#xA;00000130: e88e 43a0 ca84 3153 f31f c9e8 adc0 ba6d  ..C...1S.......m&#xA;00000140: 9308 d46a 2cb2 0727 c099 ee89 afc3 53ab  ...j,..'......S.&#xA;00000150: 2b34 5c2f 13ee aa2c d9f4 bc12 b3c5 1c68  +4\/...,.......h&#xA;00000160: 0120 2cfa 77a6 b5a4 fc9b f132 5bc3 7077  . ,.w......2[.pw&#xA;00000170: 8536 be5b 8cc8 b5c2 f00b 980f 369d e859  .6.[........6..Y&#xA;00000180: 9b08 dd1f 7c37 3fec 9bdf 7a0c 3bd4 6df5  ....|7?...z.;.m.&#xA;00000190: 0444 0311 df59 8f21 737a cc83 dd30 6a30  .D...Y.!sz...0j0&#xA;000001a0: d38f 02f0 606b 94e4 b7f3 03a8 6088 f043  ....`k......`..C&#xA;000001b0: e88e 43a0 ca84 3153 f31f c9e8 adc0 ba6d  ..C...1S.......m&#xA;000001c0: 9308 d46a 2cb2 0727 c099 ee89 afc3 53ab  ...j,..'......S.&#xA;000001d0: 2b34 5c2f 13ee aa2c d9f4 bc12 b3c5 1c68  +4\/...,.......h&#xA;000001e0: 0120 2cfa 77a6 b5a4 fc9b f132 5bc3 7077  . ,.w......2[.pw&#xA;000001f0: 8536 be5b 8cc8 b5c2 f00b 980f 369d d896  .6.[........6...&#xA;00000200: ab2c edea 6c37 3fec 9bdf 7a0c 3bd4 6df5  .,..l7?...z.;.m.&#xA;00000210: 0444 0311 df59 8f21 737a cc83 dd30 6a30  .D...Y.!sz...0j0&#xA;00000220: d38f 02f0 606b 94e4 b7f3 03a8 6088 f043  ....`k......`..C&#xA;          …&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And there it is, the start of the key at &amp;amp;100 and again at &amp;amp;200, beginning with the byte sequence:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    &amp;amp;ab, &amp;amp;2c, &amp;amp;ed, &amp;amp;ea, &amp;amp;6c, &amp;amp;37, &amp;amp;3f, &amp;amp;ec,&#xA;    &amp;amp;9b, &amp;amp;df, &amp;amp;7a, &amp;amp;0c, &amp;amp;3b, &amp;amp;d4, &amp;amp;6d, &amp;amp;f5, …&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Since the 255 byte maximum line length may kibosh pulling the key out in one piece, you might need a longer sample programme to extract the key. The above bytes match the key used in the &lt;em&gt;ManageDSK&lt;/em&gt; source, as listed in this other forum thread: &lt;a href=&quot;http://www.cpcwiki.eu/forum/programming/unprotecting-programs/msg107841/#msg107841&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unprotecting Programs - CPCWiki Forum&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above is an example of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Known-plaintext_attack&quot; rel=&quot;nofollow noreferrer&quot;&gt;known-plaintext attack (KPA)&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2018-11-14T13:56:12.853" LastActivityDate="2018-11-14T13:56:12.853" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="4399" PostTypeId="2" ParentId="4388" CreationDate="2017-07-31T00:06:33.227" Score="2" Body="&lt;p&gt;Something to consider is the length of the keys. 13 plus 11 bytes gives 192 bits, while 128 bytes is 1024 bits, so this scheme isn't even one fifth as secure as using 128 unrelated bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If someone had access only to the encrypted files, the repeating nature of the keys would give an advantage as it adds a pattern that can be detected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The entropy of the keys is actually reduced by 8, since XORing the bytes with each each other &lt;code&gt;X XOR Y&lt;/code&gt; is the same as &lt;code&gt;(X XOR Z) XOR (Y XOR Z)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if the format of the file is known in advance (a tokenised BASIC listing), it would be easy to guess enough source bytes to make the decryption easier. This is not a particularly secure encoding, even if it was not possible to construct as many encoded files as you want for analysis, or without access to the source code.&lt;/p&gt;&#xA;" OwnerUserId="2067" LastActivityDate="2017-07-31T00:06:33.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4400" PostTypeId="2" ParentId="4391" CreationDate="2017-07-31T00:33:09.500" Score="4" Body="&lt;p&gt;Find someone with a collection of vintage Computer Shopper issues, there's no better research material for such matters. Not only are there articles discussing the merits of different computers and their memory schemes, there are ads touting the month-by-month pricing, speed and capacity of direct-market processors, RAM chips and disk drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few pointers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- Early dynamic RAMs were multivendor, with a common parts numbering scheme (and similar DIP pinouts) through the 4k to 256k generations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- 4096 x 1 chips for example were 4104, 16,384 x 1 chips were 4116, 65,536 x 1 chips were 4164, 262,144 x 1 were 41256.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- A suffixed letter often indicated if it was an epoxy (P for plastic) or ceramic (C for ceramic) package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- 4-bit-parallel parts were called &quot;nybble-wide&quot; or &quot;nibble-wide&quot; and were numbered 4416 and 4464. The 4464P was the commonest sort used in Apple //e's from 1986 onwards, providing 64kx4 with 120nsec RAS typical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--The original type-1 IBM AT used paired 4164C's soldered in piggyback stacks to populate its DIP sockets with &quot;128kbit&quot; RAMs, an arrangement possible because IBM custom-packaged these RAMs at their plants to fit a 256-kbit pinout. Finding these today is an Easter Egg hunt through Grampa's workbench, as they were often removed to make way for 41256 chips and squirreled away in some unmarked DIP rail or organizer drawer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- 1-megabit parts were the last to operate on 5-volt supply, but were internally 3.3-volt parts&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- 4-megabit parts began a wholesale transition to new technologies like 3.3-volt logic, JEDEC pinouts, SMT surface mounting and Single Inline Memory Modules. By then most new computers used word-wide (16-bit) memory.&lt;/p&gt;&#xA;" OwnerUserId="6513" LastEditorUserId="6513" LastEditDate="2017-07-31T04:24:06.380" LastActivityDate="2017-07-31T04:24:06.380" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4401" PostTypeId="2" ParentId="4391" CreationDate="2017-07-31T02:10:54.283" Score="3" Body="&lt;p&gt;One other reason: 1-bit chips could easily be configured as 8 or 9 bit wide arrays using only one type of chip - the latter in cases where memory parity (error checking) was desired. Sometimes, 4+4+1 was used, but necessitated two chip types with potentially different reliability characteristics (which is not helpful in a parity system).&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-07-31T02:10:54.283" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4403" PostTypeId="2" ParentId="4390" CreationDate="2017-07-31T07:09:29.737" Score="2" Body="&lt;p&gt;Without being Amstrad-specific, the answer is yes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the way &lt;a href=&quot;https://en.wikipedia.org/wiki/Electronika_BK&quot; rel=&quot;nofollow noreferrer&quot;&gt;Electronika BK&lt;/a&gt; interacted with its PC-compatible floppy drive through the interface board which had a simple PLA rather than a true floppy controller chip, necessitated formatting tracks by writing individual bytes and issuing &quot;write marker&quot; commands guided solely by instruction timing. &#xA;Thus it would be possible to skip writing exactly the 512 bytes corresponding to the data part of each sector, and making a formatted &quot;write-only&quot; disk.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-08-02T18:30:50.850" LastActivityDate="2017-08-02T18:30:50.850" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4404" PostTypeId="2" ParentId="4376" CreationDate="2017-07-31T10:47:06.950" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But I see no reason this couldn't be used as a seventeenth address line, effectively allowing the Z80 to address an entire 64K of data memory without the inconvenience of needing to fit its program in the same space.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The question as it applies to the Z80 has already been answered, but the more general answer is yes. The obvious example is the 8086. From the perspective of the programmer, addresses are 16 bits wide. However, the chip itself has 20 bits of address space. The extra four bits come from a segment register. Code access is done through the code segment, data accesses through the data segment or the extra segment and stack accesses are done through the stack segment. Thus, the programmer can access up to 256 kilobytes at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking the concept of keeping instructions and data separate to the maximum, you can have, not only a separate address space, but separate data paths too. i.e. when you fetch an instruction, it comes in on a different bus to the data. This is known as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Harvard_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;Harvard Architecture&lt;/a&gt;. The Harvard architecture has the advantage over the &lt;a href=&quot;https://en.wikipedia.org/wiki/Von_Neumann_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;Von Neuman architecture&lt;/a&gt; in that you can be doing instruction fetches and data accesses at the same time. You can also design caching policies to optimise for instructions and data separately. The disadvantage is having more bus lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Internally, almost all modern CPUs use the Harvard Architecture. Instructions are fetched from a different cache to data and the fetch uses a different pathway. So, from the microcoder's point of view, your separation scheme is pretty much standard.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="75" LastEditDate="2017-07-31T20:22:03.457" LastActivityDate="2017-07-31T20:22:03.457" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4405" PostTypeId="2" ParentId="2760" CreationDate="2017-07-31T21:26:37.527" Score="14" Body="&lt;p&gt;The above answer gives prices for times close to the release of the chips and at dates of significant sales.  But note that prices were effectively in freefall, and that every quarter year saw significant reductions in price around this time.  The price at the start of 1978 is not necessarily the same as it was by the end.  What we can see is that within 3 years, i.e. by 1981, the price difference had effectively vanished. See &lt;a href=&quot;https://www.scribd.com/doc/130820061/Radio-Electronics-Magazine-08-August-1981&quot; rel=&quot;noreferrer&quot;&gt;the advertisement on page 77 of this magazine&lt;/a&gt;, which gives retail prices of various CPUs, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Z80 $6.95&lt;/li&gt;&#xA;&lt;li&gt;Z80A $9.95&lt;/li&gt;&#xA;&lt;li&gt;6502 $7.45&lt;/li&gt;&#xA;&lt;li&gt;8080A $4.45&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Given that this trend was ongoing, while there may have been a significant price difference between the two chips in 1977, would there still have been by the end of 1978?  It's very hard to tell without additional data that I haven't been able to find.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-07-31T21:26:37.527" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4406" PostTypeId="1" AcceptedAnswerId="4407" CreationDate="2017-08-01T07:18:39.377" Score="7" ViewCount="918" Body="&lt;p&gt;I wonder which was the first operating system that had context switch and what are famous examples of OS that didn't have context switch?&lt;/p&gt;&#xA;" OwnerUserId="297" LastEditorUserId="276" LastEditDate="2017-08-01T12:56:31.327" LastActivityDate="2019-11-05T22:05:46.910" Title="The history of context switch" Tags="&lt;history&gt;&lt;operating-system&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4407" PostTypeId="2" ParentId="4406" CreationDate="2017-08-01T07:42:33.733" Score="15" Body="&lt;p&gt;The first operating system to implement context switches as we understand them today was the Atlas supervisor. Quoting T. Kilburn, R. B. Payne and D. J. Howarth’s 1961 paper on &lt;em&gt;The Atlas Supervisor&lt;/em&gt; (printed in &lt;em&gt;AFIPS Computer Conference 20&lt;/em&gt; and in Per Brinch Hansen’s &lt;em&gt;Classic Operating Systems&lt;/em&gt;):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;While one program is halted, awaiting completion of a magnetic tape&#xA;  transfer for instance, the co-ordinator routine switches control to the next&#xA;  program in the object program list which is free to proceed. In order to&#xA;  maintain full protection, it is necessary to preserve and recover the contents of&#xA;  working registers common to all programs such as the B-lines, accumulator,&#xA;  and control registers, and to protect blocks in use in core store.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The idea itself was first described by Christopher Strachey in his 1959 paper, &lt;em&gt;Time sharing in large, fast computers&lt;/em&gt;; the main purpose was to allow computers to switch tasks when one task was blocked waiting on I/O. &lt;em&gt;Interactive&lt;/em&gt; task-switching followed shortly; the first demonstration of that was CTSS in 1962 (this is what ended up being known as time-sharing; Strachey’s concept is referred to as multi-programming). In fact John McCarthy floated the idea of time-sharing in an unpublished memo dated January 1, 1959, so both concepts were contemporaneous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Strictly speaking any operating system which supports hardware interrupts has to support some form of context switching, even if it is strictly single-tasking (like MS-DOS). So the only operating systems which didn’t have any form of context switching were the few batch processing operating systems in the late ’50s such as BKS on the Philco-2000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Context switching arguably pre-dates operating systems, or rather, there were computers without operating systems designed as such which nevertheless supported context switches: &lt;a href=&quot;https://academic.oup.com/comjnl/article/2/1/39/398496&quot; rel=&quot;nofollow noreferrer&quot;&gt;the X—1&lt;/a&gt;, built at the Mathematical Centre in Amsterdam, supported interrupt-driven I/O, and it was demonstrated with a small coordination program used to switch between two running programs, one CPU-limited, the other I/O-limited.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Another outcome of the interruption facility is that it is quite easy to run two programs at the same time. This was rather a strange sight when we tried it the first time, and we were very astonished to find that the system worked.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-11-05T22:05:46.910" LastActivityDate="2019-11-05T22:05:46.910" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="4408" PostTypeId="2" ParentId="4387" CreationDate="2017-08-01T13:07:24.990" Score="13" Body="&lt;p&gt;For non-PC/home computer systems (UNIX workstations, small implementations of mainframe architectures) it could have been cumbersome to use some of the existing floppy controller chips, since they were usually optimized for certain microprocessor and/or bus systems different from what these machines used - or knowledge how to set these chips up was not available in house and/or nobody wanted to need to keep this kind of knowledge in house. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using SCSI meant making floppy drive controlling hardware somebody else's problem, and since it is a comparatively complicated (quite some semi-analog decoding stuff etc) but per definition not high-performance or performance-critical subsystem, there was little value in NOT making it somebody else's problem.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-08-01T13:07:24.990" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4409" PostTypeId="2" ParentId="4386" CreationDate="2017-08-01T13:57:58.660" Score="10" Body="&lt;p&gt;Custom PCBs wouldn't even be necessary, and if you want to design iteratively, could even be a hindrance. Since you will be dealing with slow rise times and a slow clock, even point or strip matrix boards and enameled wire will work, inverse dead bug (mounting IC sockets on standoff boards, or standing on their ground pins, on a continuous groundplane) can even work for far faster stuff (if I was ever to attempt say an 68000 or 80386, this would be the method of choice).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep the actual 8080 or even older chips for a second project: This chip is comparatively rare, and this chip and its contemporary entourage (first generation DRAMs, early IO chips) have complex power supply needs and are said to be rather easily damaged by mistakes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An 8051 system (eg based on an in system programmable version like the 80S52, OR with external RAM and a monitor program and/or BASIC52) is a good starter project: Serial communication is quick to set up since there is an onboard UART that only needs a level converter (which you should build as a module and keep).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An EPROM programmer (plus eraser if you go use real EPROM. If you have a host PC capable of running 90s era OS and with a real parallel port, older programmers should be cheap to come by) and some execute-in-place capable EPROM/28-type FLASH/parallel EEPROM (try salvaging these off old PC mainboards) will be needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z80, 6800, or 8085 (the tamed 8080) sound like the most reasonable second project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 8088, google up the difference between minimal and maximal mode systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if it sounds blasphemous: Get some broken/not worth restoring 8 bit computers and peripherals (dot matrix printers: often 8085/Z80 systems. 90s plasticky inkjets: often 80188 systems. dumb terminals (if you find a working one consider making it work!!): 6502 or 8085 or Z80 often. multisync CRT monitors, video recorders, processor-controlled stereo gear, button-and-LED appliances: /EA-capable 8051 usually), and cannibalize. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW: &lt;a href=&quot;https://archive.org/stream/byte-magazine-1982-11/1982_11_BYTE_07-11_Graphics#page/n79/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/stream/byte-magazine-1982-11/1982_11_BYTE_07-11_Graphics#page/n79/mode/2up&lt;/a&gt; .... any. questions. ?&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-08-01T13:57:58.660" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4410" PostTypeId="1" AcceptedAnswerId="4411" CreationDate="2017-08-01T23:31:54.710" Score="10" ViewCount="4057" Body="&lt;p&gt;Among the monitors offered by Commodore were the 1701 and the 1702, which, to my recollection, looked pretty much identical.  Were there any cosmetic, functional, or other differences between the two?&lt;/p&gt;&#xA;" OwnerUserId="6520" LastActivityDate="2017-08-02T00:11:22.453" Title="What is the difference between the Commodore 1701 and the 1702?" Tags="&lt;crt-monitor&gt;&lt;commodore&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4411" PostTypeId="2" ParentId="4410" CreationDate="2017-08-02T00:11:22.453" Score="18" Body="&lt;p&gt;The 1701 and 1702 are virtually identical.  They have the same specs, tube, inputs, casing, and manufacturer.  The only real difference is the 1701 is older (1982 to early '83, 1702 is late '83) and the fact that the 1701 shipped with a 5-pin composite video cable instead of an 8-pin luma-chroma cable in the box (both monitors support both inputs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A full list of the different Commodore monitor specs can be found &lt;a href=&quot;https://gona.mactar.hu/Commodore/monitor/Commodore_monitors_by_model_number.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2017-08-02T00:11:22.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4412" PostTypeId="2" ParentId="4386" CreationDate="2017-08-02T05:27:23.093" Score="3" Body="&lt;p&gt;It's definitely possible, and you can get away with breadboards up to a point. There's a few examples around of &lt;a href=&quot;https://www.bigmessowires.com/68-katy/&quot; rel=&quot;nofollow noreferrer&quot;&gt;some pretty cool machines being built on breadboards&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm currently in the process of building a 68k based machine myself, sounds like your software knowledge of these things is similar to mine, and I know sod all about electronics but I'm learning fast as I go. Currently I've got the CPU running code from EEPROM chips, next up is adding RAM and then some IO. I got sidetracked on the EEPROM part and built an EEPROM programming shield for an Arduino, definitely a huge side project but it provided a lot of useful learning for the overall project as I made my first PCB etc. as part of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best advice I can offer is find a good book, and get hold of a cheap logic analyzer that works with Sigrok/PulseView... that's worth it's weight (if not more for the particularly cheap and light ones) in gold. &lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2017-08-02T05:27:23.093" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4413" PostTypeId="1" AcceptedAnswerId="4414" CreationDate="2017-08-02T10:39:48.613" Score="14" ViewCount="6166" Body="&lt;p&gt;I'm wondering what the best way obtain old versions of Windows would be, specifically:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DOS&lt;/li&gt;&#xA;&lt;li&gt;Windows 95&lt;/li&gt;&#xA;&lt;li&gt;Windows 98/SE&lt;/li&gt;&#xA;&lt;li&gt;Windows 2000/ME&lt;/li&gt;&#xA;&lt;li&gt;Windows XP Professional&lt;/li&gt;&#xA;&lt;li&gt;Windows 7 Professional&lt;/li&gt;&#xA;&lt;li&gt;Microsoft Office for each version of Windows (i.e. Office 98 for Windows 98)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would need both the physical install media/ISOs and the activation licenses.&#xA;There are some of the options I've been considering:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Call Microsoft up and offer to pay them a lot of money to get copies and licenses for these versions of Windows, since they probably have some massive archive of everything in some basement. (Can they refuse?)&lt;/li&gt;&#xA;&lt;li&gt;Spend weeks scouring eBay and Amazon on the off-chance someone is selling a copy and buy it before someone else snatches it up.&lt;/li&gt;&#xA;&lt;li&gt;Use sites like &lt;a href=&quot;https://winworldpc.com/library&quot; rel=&quot;noreferrer&quot;&gt;https://winworldpc.com/library&lt;/a&gt; that are questionable legally. It looks like they provide the install files but not the licenses for obvious reasons. They all have Microsoft Office install files.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'd preferably like to obtain them legally, just so I'll be able to sleep at night and so I can get 100% functionality with all of the software, including the ability to join (at the very least) the XP and 7 machines, and maybe the 2000 machines, to a domain. I would install all these operating systems on actual hardware from that era, not use virtual machines on modern versions of Windows or emulators.&lt;/p&gt;&#xA;" OwnerUserId="5371" LastEditorUserId="3912" LastEditDate="2020-03-19T15:46:46.670" LastActivityDate="2020-03-19T15:46:46.670" Title="What is the best way to obtain old versions of MS-DOS and Windows?" Tags="&lt;ms-dos&gt;&lt;software&gt;&lt;windows&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="4414" PostTypeId="2" ParentId="4413" CreationDate="2017-08-02T11:09:46.140" Score="26" Body="&lt;p&gt;The legal way to obtain old versions of Microsoft operating systems and software is to buy a &lt;a href=&quot;https://www.visualstudio.com/vs/pricing/&quot; rel=&quot;noreferrer&quot;&gt;Visual Studio subscription&lt;/a&gt; (formerly known as MSDN subscription). That page has a link to the &lt;a href=&quot;https://download.microsoft.com/download/1/5/4/15454442-CF17-47B9-A65D-DF84EF88511B/Products_by_Benefit_Level.xlsx&quot; rel=&quot;noreferrer&quot;&gt;complete list of available software&lt;/a&gt;, which includes&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MS-DOS and Windows 3.1 and Windows for Workgroups 3.11&lt;/li&gt;&#xA;&lt;li&gt;Windows XP and later&lt;/li&gt;&#xA;&lt;li&gt;Office 95 and later (excluding Office 97)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Windows 95/98/ME, NT4 and 2000 are no longer available. (Windows 95 was removed in &lt;a href=&quot;https://groups.google.com/forum/?hl=en#!msg/microsoft.public.msdn.general/96gl_nza450/9PViq1ex1EsJ&quot; rel=&quot;noreferrer&quot;&gt;2001&lt;/a&gt;, the rest in &lt;a href=&quot;https://msdn.microsoft.com/subscriptions/ff723773.aspx&quot; rel=&quot;noreferrer&quot;&gt;2003&lt;/a&gt; following settlements with Sun Microsystems.) For those you’d need to find a second-hand copy whose licence allows it be re-sold (so probably not OEM versions), or buy an older computer pre-installed with the right version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case you’ll need to check the licenses. A subscription gives you a perpetual license to use the versions available during your subscription, as well as downgrade rights, but only for development and testing purposes; &lt;a href=&quot;https://www.visualstudio.com/wp-content/uploads/2017/03/Visual-Studio-2017-Licensing-Whitepaper-March-2017.pdf&quot; rel=&quot;noreferrer&quot;&gt;this whitepaper&lt;/a&gt; gives more details but you’d have to check an actual contract to be sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4577/euro-micelli&quot;&gt;Euro Micelli&lt;/a&gt;, &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/632/peteri&quot;&gt;PeterI&lt;/a&gt; and &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/722/ross-ridge&quot;&gt;Ross Ridge&lt;/a&gt; for their insightful comments.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-08-02T15:59:51.907" LastActivityDate="2017-08-02T15:59:51.907" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4415" PostTypeId="2" ParentId="4386" CreationDate="2017-08-02T15:20:06.273" Score="17" Body="&lt;p&gt;It's absolutely possible and fun as well!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, skip the 8080 projects for now.  They require much more &quot;glue&quot; logic and knowledge to get a basic computer up and running.  Second, focus on either the 6502 or Z80 CPU's.  BOTH, BTW, are still being made NEW today.  They are still in production.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm going to offer a little biased opinion here but for good reason.  I would personally recommend starting out with the 6502 CPU over the Z80.  I'm not interested in &quot;holy wars&quot; on which is better.  Z80 certainly has plenty of CP/M support.  However, I still recommend the 6502 because:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;It's still being produced (so is the Z80).  But, to be technical, you want the MODERN version of the 6502 which is the 65C02 (notice the &quot;C&quot;).  The &quot;C&quot; is for CMOS which is a much easier chip to work with, supports different voltage and can be single-stepped.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The 65C02 has a few I/O chips that fit its bus design PERFECTLY.  Such as the amazing 65C22 VIA chip and the 65C51 ACIA (serial) chip.  BTW, both the 65C22 and the 65C51 are also still in production!  The VIA (65C22) has so many practical uses you could write a book on it.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The 65C02 has one of the best, ACTIVE bunch of enthusiasts I have ever known.  Yes, I know the Z80 is active too.  But I have not seen a better bunch of guys that REALLY know their stuff than the group over at 6502.org.   (&lt;a href=&quot;http://forum.6502.org/&quot; rel=&quot;noreferrer&quot;&gt;http://forum.6502.org/&lt;/a&gt;).  Not only do these guys know the 65C02, but they actually use them in their professional careers (along with other chips).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The 65C02 (and Z80, for that matter) is very easy to get going.  A CPU, RAM, ROM (EEPROM), NAND gate and a serial or VIA is all you need for a real computer.  So the design is very easy.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There is an AMAZING &quot;primer&quot; for the 65C02 over at this site (&lt;a href=&quot;http://wilsonminesco.com/6502primer/&quot; rel=&quot;noreferrer&quot;&gt;http://wilsonminesco.com/6502primer/&lt;/a&gt;).  That site is indispensable for learning basic computer design with the 65C02.  The guy who wrote it, BTW, is also a very active forum member over at 6502.org.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Skip the PCB for now.  PCB layout is a completely different topic and will only add complications.  Baby steps.  Using breadboards is perfectly fine.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Don't try to build the next iMac on your first attempt.  Start small.  Very small.  The primer site above will teach you how to do that.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It's easy to get a full BASIC up and running including the original Microsoft BASIC and/or EhBASIC.  Not to mention Tiny BASIC, FORTH, Pascal, etc.  Don't let the lack of CP/M harm your opinion of the 65C02.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;At the end of the day, you really can't go wrong with choosing either the Z80 or 65C02 to build a simple, 8-bit computer.  Both are very well supported.  I just favor the 65C02 over the Z80 for the reasons listed above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck on your project!&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-08-02T15:20:06.273" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4416" PostTypeId="1" AcceptedAnswerId="4418" CreationDate="2017-08-02T16:45:40.330" Score="116" ViewCount="20377" Body="&lt;p&gt;A couple years ago the Toronto PET Users Group published an article (&lt;a href=&quot;http://www.tpug.ca/tpug-media/nl/91-Fall2015.pdf&quot; rel=&quot;noreferrer&quot;&gt;The Great Commodore/Microsoft Easter Egg War&lt;/a&gt;, on p. 7) about a newly discovered anti-Microsoft Easter Egg that Commodore hid in the ROM of the Commodore 64 and other machines.  Some sample code for triggering the Easter Egg is provided and I have verified that it really does print an unflattering message about Bill Gates (at least in the VICE C64 emulator):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kiXa6.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kiXa6.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How exactly does this work?  The article is sketchy on the details, saying only that the message is &quot;embedded inside BASIC's random number generator&quot;.  How did Commodore embed this message inside the random number generator, and how did the TPUG author reverse-engineer it?&lt;/p&gt;&#xA;" OwnerUserId="6520" LastActivityDate="2020-08-31T15:34:32.423" Title="How did Commodore's anti-Microsoft Easter Egg work?" Tags="&lt;commodore-64&gt;&lt;rom&gt;&lt;basic&gt;&lt;commodore&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="4417" PostTypeId="2" ParentId="4416" CreationDate="2017-08-02T17:06:01.040" Score="61" Body="&lt;p&gt;That's not a real easter egg. Someone just made an effort to find random seeds that produce the numbers to create the intended words. It would be an easter egg if the seed numbers were in some way related to CBM or Microsoft.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;A=RND(-A)&lt;/code&gt; initializes the (pseudo) random generator with A, generates a random number and stores it in A.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;GOSUB20&lt;/code&gt; subroutine then runs a random number series from the seed until &lt;code&gt;RND(A)&lt;/code&gt; is too low (close to zero), using the random number as index for letters A-Z.&lt;/p&gt;&#xA;&lt;p&gt;So, to generate any arbitrary string of reasonable length, all you need to do is to find the correct initialization value for the random generator, simply by trying all possible start values (brute force). See Psychonaut's excellent answer for details.&lt;/p&gt;&#xA;" OwnerUserId="5200" LastEditorUserId="5200" LastEditDate="2020-08-31T15:34:32.423" LastActivityDate="2020-08-31T15:34:32.423" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="4418" PostTypeId="2" ParentId="4416" CreationDate="2017-08-02T22:34:10.657" Score="229" Body="&lt;p&gt;I'm the author of the TPUG article.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;BILL GATES SUCKS&quot; message isn't really an Easter egg; that was just a conceit of mine to make the article a bit more interesting and to turn it into a bit of a puzzle.  Here's how it works and how it was created:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any given infinite sequence random numbers, it's a mathematical certainty that a given subsequence of numbers will appear at some point.  For example, if you repeatedly roll a normal six-sided die, then at some point you are bound to roll the sequence 6, 5, 4, 3, 2, 1—though it might take you hours of rolling before this happens.  Similarly, if you had a hypothetical 26-sided die labelled with the letters of the alphabet, then repeatedly rolling it you would expect at some point to form the words &quot;BILL&quot;, &quot;GATES&quot;, and &quot;SUCKS&quot;.  Again, this might take you hours, days, or even months of continuous rolling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;random&quot; number generator in the Commodore 64 and its brethren isn't truly random, but it's close enough that you can still expect to find arbitrary subsequences in its output.  The only problem (or in my case, feature) with it is that, every time you turn on the machine, it always produces the same &quot;random&quot; sequence of floating-point numbers, all between 0 and 1.  The random sequence can be changed only by seeding the generator with a numeric value.  Each seed value causes the generator to produce a different random sequence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this in mind, I set out to find three seed values such that the first five or six numbers of their respective sequences, multiplied by 22 and rounded down to the nearest integer, correspond to the the alphabetic indices of the letters in the words BILL, GATES, and SUCKS, followed by a zero.  For example, there is some seed value that makes the C64 random number generator start off with a sequence of floating-point numbers &lt;em&gt;x&lt;sub&gt;1&lt;/sub&gt;&lt;/em&gt;, &lt;em&gt;x&lt;sub&gt;2&lt;/sub&gt;&lt;/em&gt;, &lt;em&gt;x&lt;sub&gt;3&lt;/sub&gt;&lt;/em&gt;, &lt;em&gt;x&lt;sub&gt;4&lt;/sub&gt;&lt;/em&gt;, &lt;em&gt;x&lt;sub&gt;5&lt;/sub&gt;&lt;/em&gt; such that ⌊22&lt;em&gt;x&lt;sub&gt;1&lt;/sub&gt;&lt;/em&gt;⌋ = 2, ⌊22&lt;em&gt;x&lt;sub&gt;2&lt;/sub&gt;&lt;/em&gt;⌋ = 9, ⌊22&lt;em&gt;x&lt;sub&gt;3&lt;/sub&gt;&lt;/em&gt;⌋ = 12, ⌊22&lt;em&gt;x&lt;sub&gt;4&lt;/sub&gt;&lt;/em&gt;⌋ = 12, and ⌊22&lt;em&gt;x&lt;sub&gt;5&lt;/sub&gt;&lt;/em&gt;⌋ = 0; note that B is the 2nd letter of the alphabet, I is the 9th, and L is the 12th.  (I multiply by 22 because that's one more than the index of U, the alphabetically last letter in the message.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These three seed values were found by writing a BASIC program that iterated through all possible integer seed values until it found one that generated the correct sequence:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  0 k=1:f=22&#xA; 10 inputw$&#xA; 15 w$=w$+chr$(64)&#xA; 20 l=len(w$):dimw(l)&#xA; 30 fori=1tol&#xA; 35 printi&#xA; 40 w(i)=asc(mid$(w$,i,1))-64&#xA; 50 next&#xA; 60 i=-1&#xA; 70 a=rnd(i):j=k&#xA; 90 printi:ifj&amp;gt;lthenend&#xA;100 ifint(rnd(1)*f)=w(j)thenj=j+k:goto90&#xA;110 i=i-k:goto70&#xA;120 ifi&amp;gt;-1theninputi:ifi&amp;gt;-1theni=-i&#xA;130 i=rnd(i)&#xA;140 i=int(rnd(k)*f)&#xA;150 ifi=0thenprint:end&#xA;160 printchr$(i+64);:goto140&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To use it, first think of a short word you want to &quot;encode&quot;, and change the value of &lt;code&gt;f&lt;/code&gt; in line 0 to the index of the alphabetically last letter in the word plus one. Then run the &#xA;program and type in the word.  The program will then test each seed value, printing them out as it goes.  It stops when it finds a seed that prints the string.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The program looks a bit odd, but that's because it's optimized for speed.  (For instance, I prefer using variables and &lt;code&gt;goto&lt;/code&gt;s to constants and &lt;code&gt;for&lt;/code&gt; loops.)  I compiled it using the Blitz! compiler and ran it using the VICE emulator in warp mode.  This way seeds can be found within a few minutes or hours.  Runtime on a real C64 would have been tens or hundreds of times longer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once I had the three seed values, it was a simple matter to write a short BASIC program that used them to seed the random number generator three times and print out the generated letters.&lt;/p&gt;&#xA;" OwnerUserId="6527" LastEditorUserId="6527" LastEditDate="2017-08-03T16:55:04.797" LastActivityDate="2017-08-03T16:55:04.797" CommentCount="21" ContentLicense="CC BY-SA 3.0" />
  <row Id="4419" PostTypeId="1" AcceptedAnswerId="4425" CreationDate="2017-08-03T19:03:40.483" Score="30" ViewCount="5688" Body="&lt;p&gt;By the time the C language started to gain popularity outside of the PDP-11 circles (mid-1970s), mainframes with &quot;weird&quot; word sizes, and no capability to address individual bytes efficiently were still in use: for example, &lt;a href=&quot;https://en.wikipedia.org/wiki/Word_(computer_architecture)#Table_of_word_sizes&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt; mentions &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CDC 6600 (1964) with 60-bit words using 6-bit chars, &lt;/li&gt;&#xA;&lt;li&gt;PDP-6/PDP-10 (1963/1966) with 36-bit words using 6-bit or 9-bit chars,&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Electrologica_X8&quot; rel=&quot;noreferrer&quot;&gt;Electrologica X8&lt;/a&gt; (1965) - the chronologically last one in the table with a non-power-of-2 word size - with 27-bit words using 6-bit or 7-bit chars.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;CDC 7600 (1969) is not listed but it had the same architecture as CDC 6600.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there successful C language implementations (commercially or widespread informally) for those architectures, and how was it done?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, on the BESM-6 (1967) with 48-bit words using 8-bit bytes, the C language was but a toy, implemented as &lt;a href=&quot;https://en.wikipedia.org/wiki/Portable_C_Compiler&quot; rel=&quot;noreferrer&quot;&gt;Johnson's PCC&lt;/a&gt; porting experiment, and hasn't reached a quality of implementation good enough for practical use.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-08-03T19:15:29.830" LastActivityDate="2018-08-01T02:42:42.740" Title="How was the C language ported to architectures with non-power-of-2 word sizes?" Tags="&lt;history&gt;&lt;programming&gt;&lt;c&gt;&lt;mainframe&gt;" AnswerCount="5" CommentCount="29" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4420" PostTypeId="2" ParentId="4419" CreationDate="2017-08-03T20:04:25.213" Score="44" Body="&lt;p&gt;Word size is not really an issue in implementing C on a given architecture. There's no requirement that C types have a power-of-two size. There's only a problem if the word size is too small, but this can be simply worked around by using multiple consecutive words to represent C types like &lt;code&gt;int&lt;/code&gt; and &lt;code&gt;long&lt;/code&gt;. There's a long list of C compiler implementations for 8-bit and 16-bit targets that do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with porting C is with the size of a byte, which C defines as the smallest addressable unit and the size of the &lt;code&gt;char&lt;/code&gt; type. The size of a byte doesn't need to be a power of two (for example, there was a fairly early port of C to the 9-bit byte, 36-bit word Honeywell GCOS mainframes), but it does need to be a least 8 bits. If it's smaller than that, then it's awkward to work around, and as far I know C has rarely if ever been ported to machine with a natural byte size smaller than 8 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the size of a smallest addressable unit is significantly larger than 8-bits, then this also causes problems. While there's no conformance issue with this, having a such a large byte size would mean that ordinary ASCII (or EBCDIC) character strings end up wasting a lot of memory. C compilers that were implemented on systems where the smallest addressable unit was 16 bits or larger made &lt;code&gt;char&lt;/code&gt; an 8-bit (or maybe 9-bit) type and thus made a C byte the same size. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order for the C compiler to make the size of a C byte be smaller than the target machine's smallest addressable unit, the compiler needs to generate special code to extract the smaller C bytes out of the larger native bytes. This also means that the C compiler needs to handle pointer to &lt;code&gt;char&lt;/code&gt; (&lt;code&gt;char *&lt;/code&gt;) types differently. Typically, they were larger than other pointer types in order to store extra bits denoting which part of a native byte was being pointed to. This, in turn, meant that the pointer to &lt;code&gt;void&lt;/code&gt; types (&lt;code&gt;void *&lt;/code&gt;) also needed to be larger than most other pointer types.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this is supported by the C standard. A byte is required to be at least 8 bits in size. The size of &lt;code&gt;char&lt;/code&gt; is required to be one byte. The size of &lt;code&gt;short&lt;/code&gt;, &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;long&lt;/code&gt;, and &lt;code&gt;long long&lt;/code&gt; are required to be at least 16 bits, 16 bits, 32 bits, and 64 bits, respectively. All of these types are required to be integer multiples of the byte size. There's no requirement that any of these types be a power of two in size. Pointer sizes and representations are allowed to vary according to the type being pointed to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to write strictly conforming C code that works on any compliant C compiler ever made, then you can't depend on the size of types being nice, even powers of two. You should also be prepared to deal with padding bits, trap representations, integer overflow exceptions, and non-twos-complement arithmetic.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorUserId="2037" LastEditDate="2017-08-04T06:12:30.320" LastActivityDate="2017-08-04T06:12:30.320" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="4421" PostTypeId="1" CreationDate="2017-08-03T20:30:38.570" Score="8" ViewCount="270" Body="&lt;p&gt;SCSI-connected (flatbed) scanners existed a lot in the 90s and early 2000. Usually, they did need a vendor or vendor-specific (TWAIN, sane...) device driver to work, and IIRC usually implemented the 03h (PROCESSOR) device type.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was the device type and command set from the SCSI specification meant for such devices not used in many popular devices, and did any mass market scanners implement it at all?&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="4921" LastEditDate="2020-01-16T06:35:14.223" LastActivityDate="2020-01-17T04:09:41.850" Title="Did any scanners marketed as general purpose implement SCSI device type 06h (SGC)?" Tags="&lt;scsi&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4422" PostTypeId="2" ParentId="2141" CreationDate="2017-08-03T21:46:00.100" Score="8" Body="&lt;p&gt;An important thing is that old-style expansion buses - that includes S100, als well as the PC ISA bus and various proprietary buses, had no enumeration capability - a computer system was not aware of what was installed in the slots unless it explicitedly tried using any of that hardware - and what I/O addresses it responded to. Neither could I/O resource allocation be configured by the firmware or OS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can probably compare it with how things were handled with pre-MCA/PCI PC hardware: Well-known/usually installed devices (FDC, RTC, video cards,  were pretty standardized in their addressing and protocol, so the BIOS and/or knew where to look for what. Other expansion cards didn't only need a driver (or application software that included its own drivers), but usually needed you to explicitly a) install the right driver, b) configure that driver with the I/O settings - the same you used to configure &lt;em&gt;on the expansion board&lt;/em&gt;, usually with either physical switches or special vendor software, c) configure the BIOS to leave these I/O resources well alone when configuring PnP/PCI devices in mixed ISA-PCI systems. Such was still common practice in the Windows 9x/2000/NT era. Mistakes could sometimes end up in a nasty crash!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In S100 days, likely operating systems just listed what they supported for their own purposes - which would mostly concern serial ports for character terminals and mass storage devices to handle files on. More exotic hardware (framebuffer graphics, sound, industrial control...) was certainly the application program's business. Operating systems that restricted direct access to hardware were not common for S-100 sized machines :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, do not forget that there wasn't much of a concept of front side vs peripheral buses in these days, in machines of that size: The I/O bus was the same that was used for memory access, and ROM and RAM - which a CPU intrinsically knows how to handle! - was commonly on plugin boards on the main bus itself (that too was not uncommon in pre-80386 PCs, and &lt;em&gt;possible&lt;/em&gt; with many ISA 386/486 systems but at an atrocious performance penalty!). The address space these devices mapped into was usually configurable on the hardware (physical switches again) and likely needed to be configured to the OS and application expectations.&#xA;An expansion bus these days was in fact a glorified memory interface with a couple of extra lines to handle interrupts, DMA, power supply (in the S-100 case: raw unregulated DC, boards were expected to bring their own fine-grain power supply circuitry just as PCI cards did more and more in recent years ;) ), all kinds of system housekeeping signals, and whatnot. Peripherals were expected to behave like RAM with an attitude.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-08-03T21:46:00.100" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4423" PostTypeId="2" ParentId="4419" CreationDate="2017-08-03T22:39:12.330" Score="7" Body="&lt;p&gt;An interesting contemporary example is the Analog Devices SHARC 21488 and friends. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sizeof(char) == sizeof(short) == sizeof(int) == 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is fully compliant with the C standard (But not POSIX), and given that the usual use for these parts is as special purpose audio processors the extra space for character strings is not a problem. &lt;/p&gt;&#xA;" OwnerUserId="6508" LastEditorUserId="79" LastEditDate="2018-06-25T05:15:44.890" LastActivityDate="2018-06-25T05:15:44.890" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="4424" PostTypeId="1" AcceptedAnswerId="4437" CreationDate="2017-08-04T01:11:16.440" Score="26" ViewCount="2854" Body="&lt;p&gt;The game &lt;em&gt;Creatures 2&lt;/em&gt; on the Commodore 64 had an unusual cheat to get infinite lives which unlike most things on the Internet that are said to &quot;really work&quot; really worked! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you had to do was lick your finger and then rub it on the joystick port. IIRC A picture of a mouse (I believe he was a character from another game) would appear which would flap his arms as you rubbed the port, and eventually he'd turn grey to indicate the cheat was active.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know it sounds weirdly perverted, but it actually did the trick!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, how?&lt;/p&gt;&#xA;" OwnerUserId="4266" LastEditorUserId="6576" LastEditDate="2017-08-14T13:28:55.043" LastActivityDate="2020-07-18T18:45:34.197" Title="How did the &quot;rub joystick port to continue&quot; in the Creatures 2 infinite lives cheat work?" Tags="&lt;commodore-64&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4425" PostTypeId="2" ParentId="4419" CreationDate="2017-08-04T04:45:02.383" Score="19" Body="&lt;p&gt;There is some code left over in the pcc codebase showing how the GCOS compiler (for the Honeywell/GE 6000 series) worked, it used 9-bit (ASCII, most likely) characters natively, but supported 6-bit BCD characters with &lt;code&gt;`STRING`&lt;/code&gt; syntax for encoding them in the source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lexer support for these string tokens can be seen at &lt;a href=&quot;https://github.com/weiss/original-bsd/blob/b44636d7febc9dcf553118bd320571864188351d/old/pcc/mip/scan.c&quot; rel=&quot;noreferrer&quot;&gt;old/pcc/mip/scan.c&lt;/a&gt;, the strtob function it calls is not present in the code, but may have been a library function available on those systems. According to &lt;a href=&quot;https://www.thinkage.ca/english/gcos/expl/b/manu/manu.html&quot; rel=&quot;noreferrer&quot;&gt;this B language reference manual&lt;/a&gt; (B was an earlier language by Ken Thompson and Dennis Ritchie), B had similar syntactic support and dual BCD/ASCII strings, and the print function (like C's sprintf) could be used for converting from BCD to ASCII.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On further refinement of my google searches, I was able to find a &lt;a href=&quot;https://www.thinkage.ca/english/gcos/expl/nsc/expl.html&quot; rel=&quot;noreferrer&quot;&gt;C manual for GCOS&lt;/a&gt;. BCD strings could be printed with &lt;code&gt;%_s&lt;/code&gt; (and had been &lt;code&gt;%b&lt;/code&gt; in early versions), and &lt;a href=&quot;https://www.thinkage.ca/english/gcos/expl/nsc/lib/index.html&quot; rel=&quot;noreferrer&quot;&gt;various library routines&lt;/a&gt; for working with the BCD characters (which are packed six per 36-bit word) are documented.&lt;/p&gt;&#xA;" OwnerUserId="1891" LastEditorUserId="1891" LastEditDate="2017-08-04T04:53:59.903" LastActivityDate="2017-08-04T04:53:59.903" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4426" PostTypeId="2" ParentId="4424" CreationDate="2017-08-04T10:45:09.227" Score="8" Body="&lt;p&gt;Assuming it really &lt;em&gt;does work&lt;/em&gt; and we are not hunting an urban legend:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every game needs some sort of cheat mode during development and testing in order to be able to test and verify later levels of the game that would otherwise take considerable time to reach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could very well be that the cheat mode is activated by detections from the joystick ports of conditions not achievable with a normal joystick (like, for example, opposite directions triggered). This would, in game development, normally have been triggered by specific port adapters (a &quot;dongle&quot;) that connect those &quot;impossible&quot; joystick lines by wires or switches, or even active components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the impedance of the C64 joystick inputs, a wet finger directly on the port pins might be able to close the very same connections and activate the cheat mode.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-08-04T22:13:30.083" LastActivityDate="2017-08-04T22:13:30.083" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4427" PostTypeId="1" AcceptedAnswerId="4428" CreationDate="2017-08-04T13:21:14.717" Score="10" ViewCount="480" Body="&lt;p&gt;There were two versions of the Video Toaster hardware: an original one designed for the A2000 and a later one designed for the A4000 which was suitably called the Video Toaster 4000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I can imagine there were some subtle changes to the software to support the AGA chipset of the A4000, I'm curious what the difference was in the hardware? If you were to buy a Video Toaster today for the novelty of it, would you be gaining any features by having the 4000 version rather than the original? I somewhat suspect that the 4000 version was simply a reduced size card simply to fit in the smaller chassis of the A3000 and A4000.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2017-08-04T15:14:35.097" Title="What was the difference between the original Video Toaster and the 4000 version?" Tags="&lt;amiga&gt;&lt;video&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4428" PostTypeId="2" ParentId="4427" CreationDate="2017-08-04T15:14:35.097" Score="6" Body="&lt;p&gt;The Video Toaster 4000 capabilities were delivered as both a hardware and software upgrade to the original Video Toaster. Hardware wise, the video processors were improved on the 4000 to include many new digital video effects and faster performance, as well as to take advantage of the enhanced graphics capabilities of the Amiga 4000. In order to achieve this, the VT4000 connected to the A4000 using the new Extended Video slot. This gave the VT4000 access to additional video signals not present on the A2000/3000 Standard Video slot. See video slot pinouts &lt;a href=&quot;http://l8r.net/technical/t-videoslot.shtml&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the Extended Video slot is a superset of the original slot found in the A2000/3000, the VT4000 is also compatible with the earlier machines. However, many of the video effects and performance improvements of the VT4000 will not be available. You need an A4000 to use the full suite of effects and software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VT4000 &lt;em&gt;does not&lt;/em&gt; take advantage of the inline Zorro-III slot that the A4000 has. Communications between all Amigas and all VT's is through video slot signals, which includes an 8-bit parallel I/O capability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was no size advantage to the VT4000, and it has pretty much the exact same form-factor as the original. As such, it would actually occupy two slots in an A3000 or A4000.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-08-04T15:14:35.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4429" PostTypeId="2" ParentId="3041" CreationDate="2017-08-04T15:22:34.930" Score="16" Body="&lt;p&gt;CP/M was hardware independent - there was no notion of a reference machine (as the IBM PC was for MS-DOS), so CP/M could not provide drivers. The hardware producer had to develop the drivers and deliver them with CP/M, and the driver package was simply called BIOS (&quot;Basic Input/Output System&quot;). This worked quite well over the lifetime of CP/M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-DOS started with the same concept, but soon software accessed the hardware directly, bypassing the BIOS, and also after a short time the BIOS API no longer fit the requirements of the higher level O/S. This led to the degradation of the BIOS from really being the &quot;Basic Input/Output System&quot; to just being the boot loader.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2017-08-04T15:22:34.930" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4430" PostTypeId="2" ParentId="2876" CreationDate="2017-08-04T16:00:59.057" Score="1" Body="&lt;p&gt;YES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, I've grown up with the 8-bit Z80 machines, built a few hardware projects back then. The basic ideas what a CPU does are still valid even after 40 years, and many contemporary programmers lack that understanding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you're very welcome to learn the machine level of computing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The old processors are good for learning the basics because they show you explicitly at their external pins what they are doing right now. A Z80 has 8 data bit pins and 16 address bit pins, and for every single read or write access that your assembly-language program does, you see the activity on these pins (plus the supporting control pins).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One manual was enough for the complete specification of a CPU, e.g. found at&#xA;&lt;a href=&quot;http://hartetechnologies.com/manuals/Zilog/Zilog_Z80_Technical_Manual.PDF&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://hartetechnologies.com/manuals/Zilog/Zilog_Z80_Technical_Manual.PDF&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A typical step when booting up a new Z80 board design for the first time was to insert a ROM with the bytes C3, 00, 00 (meaning Jump to address 0000) at the addresses 0000 to 0002. This was expected to send the machine into an endless loop, repeatedly reading this Jump instruction. And you could easily see the expected memory read cycles using an oscilloscope. The Z80 manual told you exactly what this loop was expected to do:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;read the first byte (opcode C3) from address 0000 using a 4-clock M1 cycle&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;read the lower half of the target address (00) from address 0001 using a 3-clock M2 cycle&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;read the upper half of the target address (00) from address 0002 using a 3-clock M2 cycle&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So the loop was to complete within exactly 10 clock cycles (if memory was fast enough, which was always true as far as I remember).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern CPUs have multiple cores, internal caches, out-of-order execution, opcode translation and many more features that make them as lightning-fast as they are, compared to a Z80. But they lack the possibility to see the processor working: our Jump-to-Zero loop would be read from memory once and then executed from the internal cache, totally invisible at the outside pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you're ready to spend some time, then building your own computer from the chips can be both fun and give you a deep insight into processing at the machine level.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastEditorUserId="6565" LastEditDate="2017-08-04T16:13:25.463" LastActivityDate="2017-08-04T16:13:25.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4431" PostTypeId="2" ParentId="4419" CreationDate="2017-08-04T16:13:10.443" Score="7" Body="&lt;p&gt;The TI TMS34010 Graphics System Processor was capable of addressing memory in any particular transfer size you liked (2, 4, 6, 8, whatever bits). This was a natural outgrowth of its focus on graphics, where different color depths might be represented by different #s of bits per pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C implementation simply deviated from the standard, and had the pointers be 32 bit, BITWISE pointers. The bus was 32 bits, and if your access straddled a 32 bit boundary, the CPU would simply do the extra memory accesses to make it transparent to the code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This did mean that you had to pay attention to what you were doing when you were doing pointer math, but other than that it was quite pleasant to use.&lt;/p&gt;&#xA;" OwnerUserId="4356" LastEditorUserId="4025" LastEditDate="2017-08-04T16:34:10.680" LastActivityDate="2017-08-04T16:34:10.680" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4432" PostTypeId="2" ParentId="3339" CreationDate="2017-08-04T20:07:13.047" Score="0" Body="&lt;p&gt;Data transmission and text file handling are not truly separate aspects in many operating systems. This is very evident in DOS and unix systems, where special files that map to character communications channels exist, and where redirection means that programs can be made to accept either a text file, or terminal input (which traditionally was from a serial line, and is often mapped to device files that behave not entirely unlike one); also, a common way to print from programs that generated plain text, to printers that accept plain text, is to redirect the output to a parallel or serial device file that happens to have a printer connected to the corresponding port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the specific control characters mentioned in the question rarely are relevant to printers, they are relevant to both actual serial and emulated terminals - many linux terminal emulators will react to flow control characters etc, often to the confusion of users, eg when CTRL+S/CTRL+Q are accidentally entered (the former will give the appearance of a hung terminal)....&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-08-04T20:07:13.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4433" PostTypeId="2" ParentId="2876" CreationDate="2017-08-04T20:37:24.783" Score="3" Body="&lt;p&gt;Yes, and countering the &quot;still a black box&quot; argument.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware on the level of the original IBM-PC or AT is accessible as an electronic system to someone with &quot;some&quot; electronics skills and affordable tools: Connection points are big enough that they can be accessed with logic or oscilloscope probes. Most signalling is slow enough that probing it with test equipment will not create an RF mismatch so severe that the machine will crash. Most chip-to-chip I/O protocols follow the /CS, /WE, Address, Data scheme, and signals are &quot;literal&quot; - a presence of voltage on a data line means a data bit of 1. Faster, more modern hardware interfaces like SDRAM and DDR, USB, PCI-express, Ethernet tend to use complex encodings that also often do not allow you to interpret a logic state of a line &quot;in isolation&quot;, data is mixed with status, synchronization, error correcting, housekeeping protocols on one wire (RS-232 serial had some of that, but in a MUCH simpler fashion, and still making it very evident what was data and what was metadata).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measuring anything in the data paths of modern computers would mean using equipment that even as used surplus will cost hundreds to tens of thousands AND will be difficult to connect and use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, most signalling used one common specification how voltages and currents were to be interpreted, often 5V TTL levels. There will be a couple of different physical layer protocols on a modern PC mainboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you print a few lines of the letter &quot;A&quot; to a text-mode printer connected to a centronics printer and connected LEDs (in practice, use a buffer to do so!) to the 8 data wires on the parallel cable, you would see data lines 0 and 6 flash up a lot, any others staying nearly dark: 01000001 is the binary representation of ASCII &quot;A&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The parallel port could thusly also be used to connect simple, customized real world hardware (eg to control machinery) that could be made from perfectly generic parts (literally from discrete transistors) - Doing that with USB without using some USB-specific parts would be very difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a software side, a programmer could literally take the datasheet (with programming documentation) of some I/O chip and go for it, without interacting with an abstracted device driver.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-08-04T20:37:24.783" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4434" PostTypeId="2" ParentId="3041" CreationDate="2017-08-04T20:59:08.450" Score="1" Body="&lt;p&gt;Also, there was no good support infrastructure for loading third party drivers for new hardware (released after the DOS version used) - and any loadable (or even worse TSR or firmly compiled-in) driver, whether third party or included in the OS, ate away at the always tight &quot;lower&quot; RAM (the sub-640K area) capacity, whereas anything kept in ROM did not. Also, in floppy-oriented systems, it was common to make bootable disks with just the core OS for application programs - another place where you took capacity if you loaded anything from disk that was available in ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;BIOS&quot; doesn't just consist of what is in the ROMs on the mainboard, but sometimes is also augmented by &quot;option ROMs&quot; on extension cards - which equalled a built-in device driver for hardware that executed known functions but needed a different register-level protocol to access it - for example, hard drive controllers often brought firmware along that helped the BIOS and OS handle them, especially at boot time when there was no way to load a third party driver from disk since it would have to be loaded into the BIOS and boot loader to access the disk at all.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-08-04T20:59:08.450" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4435" PostTypeId="2" ParentId="3341" CreationDate="2017-08-04T21:35:25.170" Score="4" Body="&lt;p&gt;A few generic things to know when proactively replacing electrolytic capacitors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;There are at least two measuring devices you need to truly test electrolytic capacitors - a capacitance meter and an ESR meter, and some way to check for leakage current is also helpful (though a truly degraded, super leaky capacitor is unlikely to give a correct reading on a capacitance meter). Capacitors that have their capacitance within tolerance but have far too high ESR are commonly found in aged equipment.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Low ESR and &quot;normal&quot; electrolytic types are not interchangeable, especially not in switching power supplies ( a normal when used where a low-ESR is expected can cause malfunction and/or overheat; a low ESR type where unexpected can in rare cases cause stuff to oscillate by forming high-Q circuits, or worsen pulse loading on other components). BTW, if the negative marking band is golden or silver as opposed to white or black, that usually signifies a low ESR device).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Electrolytic capacitors degrade to some degree in unpowered storage - so will never-opened old stock! Most of that effect is reversible and automatically reverses when powered, but at the cost of much higher initial current draw (which can damage power supplies and the capacitors themselves).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Replacing electrolytics with types of a) a higher voltage rating, b) vastly smaller size, or c) different temperature grade can cause problems: Physically larger types sometimes have higher peak current ratings and better ESR specs, which the design might rely on. Higher voltage types can also be worse in that regard. 105°C types are more likely to have a flammable electrolyte inside, which might not fit some designer's fail-safe concept. Reading datasheets of original capacitor (if the type and manufacturer can be identified) and replacement is recommended.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Old teardrop shaped tantalum capacitors are a judgement call to replace or not - if they fail while connected to a high current capable source, they fail really catastrophically, but replacing them comes with some traps - in some cases, their better RF performance and lower ESR might be relied upon in the design. And theoretically, replacing with new tantalums needs meticulous care - most datasheets are exacting how they must be soldered (temperature and duration), with a risk of latent catastrophic failure if mishandled (this is how catastrophic failure looks &lt;a href=&quot;https://www.youtube.com/watch?v=VknpLq7DkSM&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=VknpLq7DkSM&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="785" LastEditorUserId="785" LastEditDate="2017-08-04T21:42:32.097" LastActivityDate="2017-08-04T21:42:32.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4436" PostTypeId="2" ParentId="919" CreationDate="2017-08-05T02:26:02.690" Score="4" Body="&lt;p&gt;My best mental reverse engineering of the constraints applied to the CPC bus, based on reading alone, is that it has a period of four cycles. Disclaimer: I'm not much of an electronics person, just an avid schematic reader as an offshoot of emulator authorship.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80's &lt;code&gt;WAIT&lt;/code&gt;, which is the recipient of the gate array's &lt;code&gt;READY&lt;/code&gt; is signalled for three out of the four cycles. For argument's sake, say cycles 2–4. Because the Z80 sometimes samples wait during the cycle it intends to access the bus (on opcode reads) but at other times samples it the cycle before it intends to access the bus (on ordinary reads and writes), that pattern boxes the CPU in to accessing on cycles 1 and 2, and leads to the round-up-to-four rule for Z80 machine cycle timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CRTC is clocked at 1Mhz but video memory is read at 2Mhz — e.g. in mode 2 you've got 80 columns of 1bpp text. So that's 80 bytes. It's 40/64ths of the width of the display. So if the CRTC were configured without any syncs, etc, that'd be 128 bytes read per line. Multiply that by the PAL line frequency of 15625Hz and that's exactly 2Mhz (though by not being interlaced usually, the CPC supplies only 624 of the usual 625 lines for each two fields, so actually produces output video at just a tiny bit above 50Hz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Video bytes are read during cycles 2 and 3. But the CRTC is clocked only once. So a separate clock — &lt;code&gt;CCLK&lt;/code&gt; is substituted for the low two bits. The CRTC actually supplies a total of 18 address lines: four for character row plus 14 for character index. The CPC discards the topmost from character row. It keeps the most significant two from the character index but throws replaces the two underneath that with the three it keeps from the character row. So it keeps fifteen of eighteen, and substitutes in &lt;code&gt;CCLK&lt;/code&gt; to make the sixteenth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What that means is that &lt;code&gt;CCLK&lt;/code&gt; needs to tick over from 0 to 1 during the transition from cycle 3 to cycle 4. But &lt;code&gt;CPU&lt;/code&gt; is used as the input to the multiplexers and the mutiplexers need to change between offering RAM to the CPU and offering it to the gate array during the transition from cycle 2 to cycle 3. So I think they are both 1Mhz clocks, but they're 1/4 of a cycle out of phase. It was then probably arbitrary which one got extended to the AY, which is clocked at 1Mhz. Having checked the data sheet, it doesn't clock anything except audio on its input — bus loading and sampling depends on &lt;code&gt;BC1&lt;/code&gt;, &lt;code&gt;BC2&lt;/code&gt; and &lt;code&gt;BDIR&lt;/code&gt; as controlled by the 8255 PPI, not on the clock input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that two video bytes are fetched during two consecutive cycles but should be output over the course of four, that implies a cycle where the first byte fetched is still being serialised but the second needs to be put somewhere safe. That's what I think the 74LS244 data buffer most likely does. So &lt;code&gt;244EN&lt;/code&gt; controls the timing of that chip's capture and release.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;CASADDR&lt;/code&gt; just appears to be the RAS/CAS selector — via each multiplexer it allows the high eight bits of the input address to be &lt;code&gt;RAS&lt;/code&gt; and the low to be &lt;code&gt;CAS&lt;/code&gt;, or possibly vice versa. Since both the row and column need to be selected every cycle, it likely runs along at 8Mhz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, on my account of the four cycle bus:&#xA;* &lt;code&gt;CPU ADDR&lt;/code&gt; is high, high, low, low;&#xA;* &lt;code&gt;CCLK&lt;/code&gt; is high, low, low, high;&#xA;* &lt;code&gt;READY&lt;/code&gt; is high, low, low, low;&#xA;* &lt;code&gt;CASADDR&lt;/code&gt; strobes high and low during every bus cycle;&#xA;* &lt;code&gt;244EN&lt;/code&gt; acts to instruct the &lt;code&gt;74LS244&lt;/code&gt; to latch what's on the bus during cycle four, and forward it during the next cycle one.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-08-05T02:26:02.690" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4437" PostTypeId="2" ParentId="4424" CreationDate="2017-08-05T07:43:21.563" Score="28" Body="&lt;p&gt;Originally intended for use with paddle input devices (and, like everything else on the C64, since exploited to the limit), the C64 has A/D converters &lt;a href=&quot;https://www.c64-wiki.com/wiki/Paddle&quot; rel=&quot;noreferrer&quot;&gt;readable from code&lt;/a&gt; exposed on the &lt;a href=&quot;https://www.c64-wiki.com/wiki/Control_Port&quot; rel=&quot;noreferrer&quot;&gt;joystick ports&lt;/a&gt;. It also has power rails exposed. Combine that with the lowered resistance of a moist finger and it is absolutely possible to read changing resistance values off the A/D converter when touching the port; I remember doing this gimmick for a demo back in the day.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2017-08-05T14:56:26.203" LastActivityDate="2017-08-05T14:56:26.203" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4438" PostTypeId="1" AcceptedAnswerId="4439" CreationDate="2017-08-05T16:06:00.193" Score="12" ViewCount="741" Body="&lt;p&gt;This is about a 2D (third person) game I remember seeing being played on an Atari ST computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the game the player controls a &quot;Conan&quot; style character (holding a sword, if I remember correctly). In the scene I remember seeing, the character climbed down a ladder on what looked like a cave man style cliff face and attacked some cave-men(?) with the sword.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the scene that I saw, the player could then choose to climb back up or further down on another ladder, to take on other cave men.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What game might this have been?&lt;/p&gt;&#xA;" OwnerUserId="5223" LastActivityDate="2018-02-23T14:54:05.357" Title="What was this game with a &quot;Conan&quot; style character on Atari ST?" Tags="&lt;identify-this-game&gt;&lt;atari-st&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4439" PostTypeId="2" ParentId="4438" CreationDate="2017-08-05T16:12:41.710" Score="9" Body="&lt;p&gt;You may be referring to &lt;a href=&quot;https://en.wikipedia.org/wiki/Barbarian_(1987_video_game)&quot; rel=&quot;noreferrer&quot;&gt;Barbarian&lt;/a&gt; and Barbarian II from game developer &lt;a href=&quot;https://en.wikipedia.org/wiki/Psygnosis&quot; rel=&quot;noreferrer&quot;&gt;Psygnosis&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-08-05T16:12:41.710" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4440" PostTypeId="1" AcceptedAnswerId="4441" CreationDate="2017-08-05T17:14:49.263" Score="8" ViewCount="3461" Body="&lt;p&gt;I was reading &lt;a href=&quot;https://en.wikipedia.org/wiki/Internet_Engineering_Task_Force&quot; rel=&quot;noreferrer&quot;&gt;this Wikipedia article&lt;/a&gt; that says that the U.S. Government formed the &quot;Internet Engineering Task Force&quot; (IETF) in 1986. This seems to imply that at least the term &quot;internet&quot; was in use earlier than this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the first-ever &quot;website&quot; was, according to &lt;a href=&quot;https://en.wikipedia.org/wiki/First_website_ever_made&quot; rel=&quot;noreferrer&quot;&gt;this Wikipedia article&lt;/a&gt;, created at CERN on year 1990.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when was the modern kind of internet access (where you open a connection to the internet, launch a web browser, and type in a domain name) first available to the public in USA?&lt;/p&gt;&#xA;" OwnerUserId="5223" LastEditorUserId="3290" LastEditDate="2020-09-11T09:10:22.777" LastActivityDate="2020-09-11T09:10:22.777" Title="When was internet access first available to public in USA?" Tags="&lt;history&gt;&lt;internet&gt;" AnswerCount="4" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4441" PostTypeId="2" ParentId="4440" CreationDate="2017-08-05T18:52:02.413" Score="16" Body="&lt;p&gt;The Internet was (and is) an evolving medium.  It predated the web, with the first commercial Internet Service Providers (ISPs) beginning around 1989. Early features included e-mail, FTP (File Transfer Protocol for making files available to others), gopher (a hierarchal index of FTP sites and their contents), and newsgroups (open predecessor to commercial sites such as Facebook and Twitter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a cross-pollination period between BBSs (Bulletin Board Systems, which started around 1978), private companies that offered their own computer offerings such as CompuServe and AOL, and the Internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The web itself could not exist without a browser.  (Well, people have stretched other programs to include browser functionality, such as EMACS.) So the seminal date would be in 1990 when Tim Berners-Lee invented the web browser.  He called his program WorldWideWeb. The first really popular browser was Mosaic, which came out in 1993 and developed by Marc Andreessen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is mostly incorrect to think of the Internet as an &quot;American&quot; thing. While the American government did start it off with Arpanet, that was restricted to a government/military/higher-education audience. Once ISPs started offering Internet access to anyone with a credit card, they didn't care what country you phoned in from.  Plus ISPs opened up in a huge number of countries very quickly.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-08-07T02:34:17.673" LastActivityDate="2017-08-07T02:34:17.673" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4442" PostTypeId="2" ParentId="4440" CreationDate="2017-08-05T19:02:21.923" Score="17" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/The_World_%28Internet_service_provider%29&quot; rel=&quot;noreferrer&quot;&gt;The World&lt;/a&gt; started in 1989 and claims to be the oldest commercial ISP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Netcom_(United_States)&quot; rel=&quot;noreferrer&quot;&gt;Netcom&lt;/a&gt; is also pretty old. Wikipedia gives 1988 as the launch date which could make it older than The World.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These early ISPs were small companies, serving small geographic areas (determined by the size of the local calling area - with everything running over regular phone lines, you didn't want to connect long distance!) It took a few years longer for access to reach the majority of the country.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early period, you connected to the ISP with a terminal emulator, and did everything in the terminal. We had mail, group chat (IRC), one-on-one chat (talk), file sharing (FTP) with a search engine (archie), and the great time sink, USENET.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the web started to overtake those other things in traffic volume, we didn't think &quot;hooray, the modern Internet is finally here!&quot; It was more like &quot;What's with all the newbies who think the web is everything?&quot;&lt;/p&gt;&#xA;" OwnerDisplayName="user5152" LastActivityDate="2017-08-05T19:02:21.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4443" PostTypeId="2" ParentId="4440" CreationDate="2017-08-05T22:03:52.070" Score="-9" Body="&lt;p&gt;When I was in the US Army Security Agency in the early 1970s, engineers produced a version of email that allowed military installations to easily converse with one another without radio transmissions. The system used code, of course, but could be sent instantly (almost) ON existing phone lines or on the emerging network of communications satellites. The Internet was developed in 1983 by scientists from CalTech using fiber optic cables and IP. Originally, an IP was a series of numbers but as more and more companies signed on, the scientists found a way to eliminate numbers and use words like   www.msn.com or www.cbssports.com.&#xA;The user had to have a dialup modem that called phone numbers in sequence until it found a phone using a dialup modem. Or, if the dialup number was known, that number was typed in and routed thru the modem. The internet expanded exponentially when Microsoft introduced Windows 95, an operating system that could send and receive, search the internet, produce documents and operate CDs inserted. That was just 21 years ago and look where the internet is now.&#xA;PS: The world's first 'COMPUTER' WAS built by US and British engineers in 1942 to break the German military's secret codes. Known as &quot;ENIGMA,&quot; THE computer unlocked the Ultra secrets. /The computer was as big as a football field and had more than 10,000 cathode ray tubes and about 40 miles of cable. But it worked.&#xA;Industry began using computers in the 1950s. Personal computers cam along in the late 1970s, but were very expensive and difficult to operate. IBM produced the world's first decent PC in 1984, but gave Microsoft the rights to the operating system, believing that the profits were in the computer hardware, not software. Somebody lost his job at IBM over that one.&lt;/p&gt;&#xA;" OwnerUserId="6577" LastEditorUserId="278" LastEditDate="2017-08-06T16:32:00.240" LastActivityDate="2017-08-06T16:32:00.240" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4444" PostTypeId="1" AcceptedAnswerId="4449" CreationDate="2017-08-07T15:16:32.753" Score="53" ViewCount="11012" Body="&lt;p&gt;If you know anything about the Commodore 64 (and other Commodores, really) you know that Commodore really went the cheap route and produced some awful power supplies.  The Commodore 128 PSU isn't &lt;em&gt;quite&lt;/em&gt; as bad as the C64 version, but it's nowhere near perfect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you open up the PSU for a C64, you will see that the insides of the brick are completely filled with epoxy.  There is no way to salvage the parts or repair them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My assumption is that Commodore didn't want average folks repairing their own PSU when they went south (which happens a lot).  And, Commodore would much prefer you buy a new PSU.  But was that really the reason?  Or, did Commodore think they were making them safer by doing that?&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="2081" LastEditDate="2017-12-20T20:06:35.843" LastActivityDate="2018-01-01T17:29:04.553" Title="Why did Commodore fill their power supplies with epoxy?" Tags="&lt;commodore-64&gt;&lt;power&gt;&lt;commodore&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4445" PostTypeId="2" ParentId="2570" CreationDate="2017-08-07T15:20:52.047" Score="0" Body="&lt;p&gt;XTricator was the first ZX-81 emulator for the Sinclair QL, released as shareware August 1994. So not entirely non-commercial (although today it is).&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2017-08-07T15:20:52.047" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4446" PostTypeId="1" AcceptedAnswerId="4478" CreationDate="2017-08-07T15:39:07.117" Score="34" ViewCount="2159" Body="&lt;p&gt;On the Commodore 64 and VIC-20, the &lt;code&gt;LIST&lt;/code&gt; command will abort with a &lt;code&gt;?SYNTAX  ERROR&lt;/code&gt; on any line that contains a &lt;code&gt;REM&lt;/code&gt; statement with a &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;L&lt;/kbd&gt; character.  A minimal program triggering the error would look as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 rem L&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Some programmers deliberately started or peppered their BASIC programs with such &quot;killer &lt;code&gt;REM&lt;/code&gt;&quot; statements to hide the source code.  (Of course, the protection this provided was only rudimentary, and could be easily bypassed.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, this quirk affects only the C64 and VIC-20; the C128, C16, Plus/4, and various PET models don't care about the argument of &lt;code&gt;REM&lt;/code&gt; statements. What I don't understand is &lt;em&gt;why&lt;/em&gt; this quirk exists and how it works.  Is this a bug or a feature of CBM BASIC?  If it's a feature, was it ever documented anywhere by Commodore, and why is it present only on the C64 and VIC-20?  If it's a bug, what exactly causes the &lt;code&gt;LIST&lt;/code&gt; command to choke on a shifted &lt;code&gt;L&lt;/code&gt; in a &lt;code&gt;REM&lt;/code&gt; statement?&lt;/p&gt;&#xA;" OwnerUserId="6527" LastEditorUserId="11916" LastEditDate="2020-01-05T11:09:26.017" LastActivityDate="2020-01-05T11:09:26.017" Title="Why does the C64's LIST command choke on REM statements with a Shift+L?" Tags="&lt;commodore-64&gt;&lt;basic&gt;&lt;vic-20&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4447" PostTypeId="2" ParentId="4444" CreationDate="2017-08-07T16:06:44.100" Score="21" Body="&lt;p&gt;Electricians some times (or used to) do similar techniques when configuring wiring -- once the wires were in place, they would fill the cavity with a non-conductive resin or epoxy, so that the chance of any movement or shift in the wiring would cause a short or a disconnect is greatly reduced. I've seen this in numerous situations myself, including air compressors, where there is quite a lot of vibration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally I think it was a cheap way to make their power bricks last longer because people move those things around, they get kicked a lot (I had a C64 for a very long time), and probably had to hold up the weight of many-a-12-yr-old when they stepped on it, because well, they're 12 and they can.&lt;/p&gt;&#xA;" OwnerUserId="6598" LastActivityDate="2017-08-07T16:06:44.100" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4448" PostTypeId="2" ParentId="4446" CreationDate="2017-08-07T16:08:11.323" Score="28" Body="&lt;p&gt;Internally, a BASIC program isn't represented as the text you see when you list it, but as a &lt;a href=&quot;https://www.c64-wiki.com/wiki/BASIC_token&quot; rel=&quot;noreferrer&quot;&gt;tokenized data structure&lt;/a&gt; where each of the language keywords are represented in an optimized 1-character form. Basically, if the upper bit is set in a character byte (i.e. values &gt;= 128/$80), it is processed as a token.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this does not only apply to the shift-L case, fx entering &lt;code&gt;&quot;10 REM&lt;/code&gt; &lt;kbd&gt;Shift + A&lt;/kbd&gt;&lt;code&gt;&quot;&lt;/code&gt; will list as &lt;code&gt;&quot;10 REM ATN&quot;&lt;/code&gt;. If you consult a list of the predefined &lt;a href=&quot;http://sta.c64.org/cbm64basins2.html&quot; rel=&quot;noreferrer&quot;&gt;BASIC tokens&lt;/a&gt;, you will find that 203/$CB is the last defined; this will match &lt;kbd&gt;Shift + K&lt;/kbd&gt;. After this, you are presumably (I'm speculating, haven't actually pored over the ROM listing) referencing a non existing or otherwise erroneous token, and the interpreter bails.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That you can enter tokens directly would seem like a bug or at least design limitation that was found acceptable, but I've never seen any official stance on that. Earliest mention of this token quirk I could find was in a &lt;a href=&quot;http://www.atarimagazines.com/compute/issue38/087_1_COMMODORE_REM_REVEALED.php&quot; rel=&quot;noreferrer&quot;&gt;1983 issue of Compute!&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="115" LastEditDate="2017-08-14T05:35:36.977" LastActivityDate="2017-08-14T05:35:36.977" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4449" PostTypeId="2" ParentId="4444" CreationDate="2017-08-07T16:08:29.167" Score="59" Body="&lt;p&gt;Epoxy offers two advantages -- it is an electrical insulator, and it conducts heat better than air. Transformers and inductors are generally potted with epoxy for this reason. [&lt;a href=&quot;https://en.wikipedia.org/wiki/Epoxy#Electrical_systems_and_electronics&quot; rel=&quot;noreferrer&quot;&gt;ref&lt;/a&gt;] Perhaps the cause of the high failure rate is that Commodore engineers decided they could use cheaper components to build the power supplies, depending on the epoxy properties to balance out any deficiencies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 2012 Bil Herd (Commodore engineer) &lt;a href=&quot;http://c128.com/did-commodore-64-use-surplus-power-supplies&quot; rel=&quot;noreferrer&quot;&gt;speculated&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;They were made for CBM by the boatload, they got warm and were not rated for things like the CBM cartridge &lt;em&gt;[Bil probably meant CP/M cartridge]&lt;/em&gt;, etc, though they would continue to make voltage they would just run hotter reducing their life.&#xA;  Potting them was probably to protect CBM as it's hard to start a fire from within a pound of epoxy.  The potting would have made the hottest components slightly less hot and everything else too hot.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Remember that the VIC 1 had started at least one fire, I think something like 3.  The case used to melt and sag over one of the heat sinks.  Supposedly a programmer tried to design apiece of the power supply without really knowing heat and wattage calculations.  So a good reaction would be a supply that never caught fire, was impervious to static and even water, and was a bitch to air ship.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="3687" LastEditDate="2018-01-01T17:29:04.553" LastActivityDate="2018-01-01T17:29:04.553" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4450" PostTypeId="1" CreationDate="2017-08-07T20:27:05.860" Score="9" ViewCount="546" Body="&lt;p&gt;The Colossus series of electronic computers, considered by some to be the first fully electronic (as opposed to electromechanical) computer in the world, was originally a British state secret. This means that many documents pertaining to the computers, including original blueprints, were destroyed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, enough information remained for the Computer Conservation Society to later build a working almost-replica of a Colossus Mark II. A search of their website and cursory examination of the National Museum of Computing (where the Colossus rebuild is housed) showed no signs of any schematics for the Colossus Mark II, its reconstruction or in fact any Colossus at all. Where can these schematics be found?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="10260" LastEditDate="2021-05-12T04:19:18.263" LastActivityDate="2021-05-12T04:19:18.263" Title="Where are the Colossus schematics?" Tags="&lt;hardware&gt;&lt;vacuum-tube&gt;&lt;colossus&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4451" PostTypeId="5" CreationDate="2017-08-07T20:57:09.197" Score="0" Body="&lt;p&gt;The Colossus series of computers, considered by some to be the first fully electrical (as opposed to electromechanical) computer, was created by the British government from 1943 to 1945 to break the Lorenz cipher (a PRNG XORed with an ITA2 message). These computers were parallel, memory-less dedicated machines.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-08-07T20:57:09.197" LastActivityDate="2017-08-07T20:57:09.197" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4452" PostTypeId="4" CreationDate="2017-08-07T20:57:09.197" Score="0" Body="For questions about the Colossus series of computers." OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-08-07T20:57:09.197" LastActivityDate="2017-08-07T20:57:09.197" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4453" PostTypeId="1" AcceptedAnswerId="4470" CreationDate="2017-08-08T07:09:19.833" Score="17" ViewCount="1409" Body="&lt;p&gt;The Commodore 64 and the Atari 2600 had compatible joystick ports.  Commodore, Atari, and third-party companies like Wico made joysticks supporting that standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did this standard have a name?  Where did it originate?&lt;/p&gt;&#xA;" OwnerUserId="6608" LastEditorUserId="6608" LastEditDate="2017-08-10T06:50:52.177" LastActivityDate="2018-11-20T14:06:56.817" Title="What is the history of DE-9 joystick ports?" Tags="&lt;commodore-64&gt;&lt;atari-2600&gt;&lt;joystick&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4454" PostTypeId="2" ParentId="4450" CreationDate="2017-08-08T09:14:55.533" Score="4" Body="&lt;p&gt;I have found &lt;a href=&quot;http://www.paulgannonbooks.co.uk/styled-6/files/codebreaking-machinery---colossus-i.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;a high-level diagram&lt;/a&gt; of the structure of Colossus I. This cites &lt;a href=&quot;http://discovery.nationalarchives.gov.uk/details/r/C11146660&quot; rel=&quot;nofollow noreferrer&quot;&gt;an entry in the National Archives&lt;/a&gt; which has not yet been digitised but looks promising.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-08-08T09:14:55.533" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4455" PostTypeId="2" ParentId="4453" CreationDate="2017-08-08T10:52:49.777" Score="12" Body="&lt;p&gt;The DE-9 joystick port is close to a standard D-sub connector (note that it uses the &quot;E&quot; shell and not the much larger &quot;B&quot; shell from the DB-25 serial or parallel port connectors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ETIY7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ETIY7.png&quot; alt=&quot;D-sub shells&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For joysticks, it was first used an the Atari 2600 VCS, went on to their early 8-bit machines and was then adopted by Commodore.&lt;/p&gt;&#xA;" OwnerUserId="5200" LastEditorUserId="5200" LastEditDate="2017-08-09T11:20:56.293" LastActivityDate="2017-08-09T11:20:56.293" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4456" PostTypeId="1" AcceptedAnswerId="4461" CreationDate="2017-08-08T16:08:12.950" Score="45" ViewCount="6272" Body="&lt;p&gt;(By &quot;Teletype&quot; I mean all teletypewriters compatible with the protocol used by the Teletype.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Teletype was the dumbest of all dumb terminals, which meant that it was cheap. This means that it was widely spread, and so that computers would be designed to be compatible with it, then other terminals would be designed to be compatible with &lt;em&gt;them&lt;/em&gt;, then other computers would be designed to be compatible with &lt;em&gt;them&lt;/em&gt; etc. creating a standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the protocol used by Teletypes?&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2019-02-19T05:24:10.480" Title="What protocol do Teletypes use?" Tags="&lt;terminal&gt;" AnswerCount="5" CommentCount="18" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4457" PostTypeId="1" AcceptedAnswerId="4458" CreationDate="2017-08-08T17:34:25.057" Score="13" ViewCount="794" Body="&lt;p&gt;I remember the &lt;a href=&quot;http://www.hugolyppens.com/VBS.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Video Backup System&lt;/a&gt; for Amiga advertized in Polish computer magazines of late 90s, &amp;quot;store hundreds of diskettes on a single VHS tape!&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;I seriously considered buying it (and a VCR since I didn't have one...) before I got my hands on a cheap CD-ROM drive – and to this day I don't know what I have missed and if I should regret it or be happy.&lt;/p&gt;&#xA;&lt;p&gt;First, let me ask the solid objectively answerable question: it connected by SCART or RCA (composite video, &amp;quot;phono plug&amp;quot;) to the VCR, but what interface did it use on the Amiga side? It didn't have any built-in video, or analog inputs, so the analog data had to undergo some rudimentary conversion to digital in hardware (before being passed through Reed-Solomon Error Correction program running on the Amiga). What was it?&lt;/p&gt;&#xA;&lt;p&gt;...and then let me ask for comments, how did it work out in practice (as &amp;quot;user experience&amp;quot;) – because I never knew anyone who used it, and I wonder if it was half as good as the hype in the ads.&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="15334" LastEditDate="2021-01-23T18:00:25.107" LastActivityDate="2021-01-23T18:00:25.107" Title="What interface did Video Backup System use?" Tags="&lt;amiga&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="4458" PostTypeId="2" ParentId="4457" CreationDate="2017-08-08T17:58:57.000" Score="4" Body="&lt;p&gt;&lt;a href=&quot;http://www.bigbookofamigahardware.com/bboah/product.aspx?id=776&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.bigbookofamigahardware.com/bboah/product.aspx?id=776&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the images here, it appears the VBS used a combination of the composite out and the DB25/RS232 connector on the Amiga (as well as a connection to the monitor) to operate.  I didn't own one, so I'm just interpreting the connection diagrams.&lt;/p&gt;&#xA;" OwnerUserId="599" LastActivityDate="2017-08-08T17:58:57.000" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4459" PostTypeId="2" ParentId="4456" CreationDate="2017-08-08T20:05:42.783" Score="8" Body="&lt;p&gt;Teletypes use the five bit &lt;a href=&quot;https://en.wikipedia.org/wiki/Baudot_code&quot; rel=&quot;noreferrer&quot;&gt;Baudot code&lt;/a&gt;. Although the machines themselves are obsolete, Baudot code still lives on in the form of &lt;a href=&quot;https://en.wikipedia.org/wiki/Radioteletype&quot; rel=&quot;noreferrer&quot;&gt;RTTY&lt;/a&gt; which is still used by radio amateurs.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2017-08-08T20:05:42.783" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4460" PostTypeId="2" ParentId="4456" CreationDate="2017-08-08T20:56:56.613" Score="13" Body="&lt;p&gt;Per &lt;a href=&quot;https://daduke.org/tty/&quot; rel=&quot;noreferrer&quot;&gt;this site about using one with Linux&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;it's a current loop — i.e. presence or absence of current indicates high or low level;&lt;/li&gt;&#xA;&lt;li&gt;it can be cheaply interfaced to RS232;&lt;/li&gt;&#xA;&lt;li&gt;the host will need to speak Baudot code, as per pndc's answer that predates this one;&lt;/li&gt;&#xA;&lt;li&gt;code entries should be transmitted and received with one start bit and two stop bits, no parity (so, 5N2); &lt;/li&gt;&#xA;&lt;li&gt;the real, original transmission rate was 45.45 baud, though that site advises using 50 baud and adjusting a tuning dial on the teletype, as 45.45 isn't generally conveniently available.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It'll simply output every character received, and transmit every key pressed.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-08-08T20:56:56.613" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4461" PostTypeId="2" ParentId="4456" CreationDate="2017-08-08T23:00:12.080" Score="84" Body="&lt;p&gt;Aside from the character code (which I'll get to later) about the only &amp;quot;protocol&amp;quot; has to do with character framing, until very late in Teletype machines' timeline.&lt;/p&gt;&#xA;&lt;p&gt;Quick summary: The signal from a sending teletype to a receiving one is a single line, usually a current loop (two wires), which is always in either &amp;quot;marking&amp;quot; (current flowing) or &amp;quot;spacing&amp;quot; (current not flowing) condition (1 or 0, respectively). An idle line is in &amp;quot;marking&amp;quot;. To send a character, the sender puts the line in &amp;quot;spacing&amp;quot; condition for one bit time (this is the &amp;quot;start bit&amp;quot;), then sends the bits of the character least-significant-bit first, then holds the line in &amp;quot;marking&amp;quot; condition for at least two bit times. The character itself is encoded with one of the five-bit codes, likely ITA2, or the six-bit TTS code, or ASCII, depending on the models of the machines. That's it. That's all the &amp;quot;protocol&amp;quot; there is.&lt;/p&gt;&#xA;&lt;p&gt;Details:&lt;/p&gt;&#xA;&lt;h1&gt;Electrical interface&lt;/h1&gt;&#xA;&lt;p&gt;Teletypes used a single &amp;quot;current loop&amp;quot; for their I/O interface. (Machines with RS-232 interfaces came very late in their history.) There are only two electrical terminals. As in a traditional analog telephone (which also has two terminals) the same pair of wires handles data in both directions at the same time—and as with a simple analog voice telephone, if the parties at both ends try to type at the same time, the result is garbled data. (There is no protocol in the machines to resolve&#xA;this. It's up to the operators to not type over each other.)&lt;/p&gt;&#xA;&lt;p&gt;In a simple point-to-point teletypewriter circuit, a two-conductor cable runs from one machine to the other, with a battery or other current source somewhere in between. So both machines and the battery are all in series in one loop (just as in a point-to-point telegraph circuit). Current in the loop is either flowing (which is called the &amp;quot;marking condition&amp;quot;, binary 1) or not (&amp;quot;spacing condition&amp;quot;, binary 0; also called &amp;quot;breaking condition&amp;quot;). The current level was generally 60 milliamps in longer distance service, but 20 mA in later machines connected directly to a computer. An idle line, with machines properly connected, is always in the &amp;quot;marking&amp;quot; condition: Current is flowing in the loop. Interrupting the loop, anywhere in the loop, causes current to stop flowing everywhere in the loop—as with any pure series circuit.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Aside:&lt;/strong&gt; The terms &amp;quot;marking&amp;quot; and &amp;quot;spacing&amp;quot; came from Morse code telegraphy. Originally the inventors did not anticipate that Morse operators would learn the &amp;quot;sound of Morse&amp;quot;, or that that would be reliable. Instead, the receiver side of Morse circuits was a &amp;quot;pen recorder&amp;quot;. This involved a quill pen point hung over a paper disc which was continuously rotated by a clockwork mechanism—or a length of paper tape, also advanced by clockwork. When the sender's key was pressed, completing the circuit, current flowed, and a solenoid in the receiver caused the pen to touch the paper, making a &amp;quot;mark&amp;quot;. When the sender's key was not pressed, current stopped flowing and spring tension withdrew the pen from the paper, leaving a &amp;quot;space&amp;quot; as the paper continued to move under it. Hence &lt;em&gt;marks&lt;/em&gt; (current is flowing) and &lt;em&gt;spaces&lt;/em&gt; (current is not flowing).  The marks, which looked like &amp;quot;dots&amp;quot; and &amp;quot;dashes&amp;quot;, on the paper could then be &amp;quot;decoded&amp;quot; at leisure. But Morse operators had to know the code to send it, and they soon learned to read the short and long clicks made by the pen recorder as dits and dahs and were able to write down what they heard as it came in without referring to the pen record. The paper disc did have the advantage that it could be saved as a permanent record, but eventually, for some circuits, the whole pen mechanism was discarded in favor of a much simpler electromagnetic &amp;quot;sounder&amp;quot;. The terms &amp;quot;marking&amp;quot; and &amp;quot;spacing&amp;quot; persisted into teletypewriter usage as they used the same sorts of circuits. Just like in a teletypewriter current-loop circuit, in a Morse circuit your receiver has to maintain &amp;quot;marking condition&amp;quot; (by closing the &amp;quot;shorting bar&amp;quot; on their key) or you won't be able to send them anything.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Further aside:&lt;/strong&gt; Such &amp;quot;pen recorders&amp;quot; were also used for monitoring dialed telephone lines, to see what number the subscriber was calling.&lt;/p&gt;&#xA;&lt;p&gt;The keyboard sends a character by interrupting the current in a specific pattern. These interruptions in turn inform the printer to print. The keyboard and printer in each machine were connected in series, and in series with the keyboard and printer in the machine at the other end. So typing a key causes printing on both the local and the remote machine. (This used to be called &amp;quot;local echo&amp;quot;.)&lt;/p&gt;&#xA;&lt;p&gt;There are no headers or wrappers on messages, no checksums, no addresses, ... nothing. If you're expecting a &amp;quot;protocol&amp;quot; like IP or something, forget it. You type a key and the character is printed by both machines. That's it.&lt;/p&gt;&#xA;&lt;p&gt;Heck, they didn't even think about parity bits until the 8-bit machines came along in the early 70s (model 33, etc.). And even then, if a received character doesn't pass parity checks, there was no provision for asking the sender to send again, or anything like that. However there is much to say about ...&lt;/p&gt;&#xA;&lt;h1&gt;Character framing&lt;/h1&gt;&#xA;&lt;p&gt;It is easy to imagine that the line is changed back and forth from one state to the other to encode a succession of bits, and that some number of such bits would comprise a character. Not terribly unlike Morse code, really. But &amp;quot;reading&amp;quot; Morse, identifying the boundaries of characters and words, was not easy enough to be done mechanically when teletypes were first invented in the 1900s (by which I mean the first decade of the 20th C. - yes, really that long ago!). The bits comprising each character have to be bounded, or &amp;quot;framed&amp;quot;, in some way so that an electromechanical receiver can easily and reliably recognize when each new character begins and ends.&lt;/p&gt;&#xA;&lt;h2&gt;sending&lt;/h2&gt;&#xA;&lt;p&gt;Enter &amp;quot;start bits&amp;quot; and &amp;quot;stop bits&amp;quot;. Character framing is done by, first, agreeing on a fixed number of bits and bit times per character. (Unlike Morse code, in which different characters have different durations.) And second, by wrapping the bits of each character in a leading &amp;quot;start bit&amp;quot; and a trailing &amp;quot;stop bit&amp;quot;. Or two.&lt;/p&gt;&#xA;&lt;p&gt;When a key is struck, the keyboard starts a cycle during which it interrupts the current in a precisely timed manner. First, the line goes from marking (current flowing) to spacing (no current) condition for one bit time. This is the &amp;quot;start bit&amp;quot;. It conveys no information; it's just for timing. The transition from marking to spacing state alerts the receiver that a character follows.&lt;/p&gt;&#xA;&lt;p&gt;The start bit is followed by the bits that encode the character for the key, 1 = marking, 0 = spacing, least significant bit first. The original teletype machines used a five-bit code. This eventually progressed to eight-bit codes—details later. What is important here is that the number of data bits doesn't change.&lt;/p&gt;&#xA;&lt;p&gt;Then the line is held at &amp;quot;marking condition&amp;quot; (current flowing) for a minimum of two bit times. In modern parlance we refer to the latter as &amp;quot;two stop bits&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;After the required two bit times' worth of &amp;quot;marking&amp;quot; condition, ie the stop bits, the line can continue to be held at marking condition forever. That is, after all, the &amp;quot;idle state&amp;quot; of the line. The marking-to-spacing condition that signals the start bit of the next character can happen at any time after the required two stop bits. In particular, it does not have to happen at any integral number of bit times. This is one reason this is called &lt;a href=&quot;https://en.wikipedia.org/wiki/Asynchronous_serial_communication&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;asynchronous&lt;/em&gt; serial communication&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;receiving&lt;/h2&gt;&#xA;&lt;p&gt;When the line first goes from marking to spacing condition this indicates to a receiver (printer) that a new character has begun to arrive. The receiver starts a cycle during which it reads the state of the line approximately half way through each bit period. In the electromechanical machines this is done by what is called a &amp;quot;distributor&amp;quot;, not unlike the car part of the same name. It is basically a rotary selector switch driven by a motor. It starts rotating when the start bit is received, and during the ensuing bit times, it routes the incoming &amp;quot;1 or 0&amp;quot; to individual wires.&lt;/p&gt;&#xA;&lt;p&gt;The current on these wires change the position of &amp;quot;stops&amp;quot; or &amp;quot;bails&amp;quot;, one per data bit, that will cause the printer, when cycled, to print the appropriate character.&lt;/p&gt;&#xA;&lt;p&gt;After this is done for the last of the data bits and the line goes to &amp;quot;marking&amp;quot; condition with the first of the stop bits, the printer's main cycle clutch is engaged and the printer begins to print the selected character. It's the detection of the first of the stop bits, the &amp;quot;marking&amp;quot; condition during the bit that follows the last of the data bits, that triggers printing.&lt;/p&gt;&#xA;&lt;p&gt;A print cycle takes just about one full character time, so if the next character follows soon enough after, that main clutch never disengages. This is good - it wears the clutch less. The printer is designed so that once a print cycle begins the bails can be positioned for the next character as the next character is in the process of arriving.&lt;/p&gt;&#xA;&lt;h1&gt;Disconnects and &amp;quot;breaks&amp;quot;&lt;/h1&gt;&#xA;&lt;p&gt;If a line is disconnected or otherwise goes &amp;quot;open&amp;quot;, the result is a never-ending &amp;quot;spacing&amp;quot; condition, which results in a &amp;quot;free running&amp;quot; condition in the receiver: the distributor is running but (because no stop bits are ever seen) the printer's clutch is never engaged, so it never starts a print cycle. (This makes a distinctive sound, much more quiet than printing, as the only thing turning is the distributor.) Later Teletypes have a key marked &amp;quot;break&amp;quot; that simply opens the line, causing this condition. This allowed operators to get the attention of the person at the other end. (It also interrupted communication for as long as the &amp;quot;break&amp;quot; key was depressed.)&lt;/p&gt;&#xA;&lt;p&gt;In switched dialup teletype networks like TWX the switching was all done externally to the teletype machines themselves, and was essentially a much smaller version of the public switched telephone network (PSTN). These networks were commonly used to send messages, not unlike email messages. But there was no &amp;quot;protocol&amp;quot; enforced by the equipment for framing messages, for message headers like &amp;quot;To&amp;quot; and &amp;quot;from&amp;quot; info, etc. The various messaging services that used this equipment each had their own conventions for this sort of information, once two machines were connected. And within each service, actual practice often varied significantly from one operator to the next.&lt;/p&gt;&#xA;&lt;h1&gt;Character codes&lt;/h1&gt;&#xA;&lt;h2&gt;Baudot&lt;/h2&gt;&#xA;&lt;p&gt;Now, about the character code: A couple of people have mentioned &lt;a href=&quot;https://en.wikipedia.org/wiki/Baudot_code&quot; rel=&quot;noreferrer&quot;&gt;Baudot code&lt;/a&gt;, which was indeed the first code used with teleprinters. But you might not recognize the &amp;quot;sending unit&amp;quot; that used Baudot code! It had no typewriter-like keyboard; it was manually operated with five keys for the five bits, so the operator had to know the code. The code was designed to be relatively easy to learn, with the most-often-used characters needing the fewest keys depressed.&lt;/p&gt;&#xA;&lt;h2&gt;figures and Letters&lt;/h2&gt;&#xA;&lt;p&gt;Five bits permitted only 32 different characters, so the code included &amp;quot;letters&amp;quot; and &amp;quot;figures&amp;quot; codes that put the receiver into two different &amp;quot;shift&amp;quot; modes. For example, a character with only the &amp;quot;1&amp;quot; bit set would be an &amp;quot;A&amp;quot; in letters mode, but a &amp;quot;1&amp;quot; in figures mode. This &amp;quot;figures vs letters shift&amp;quot; idea has persisted throughout all subsequent five-bit teletypewriter codes (and the six-bit TTS code). The &amp;quot;Figures&amp;quot; set included some special characters (period, comma, etc.) as well as digits, and both sets included space, carriage return, bell, NULL (all zeroes), etc. So  there is no room in the code set for the lowercase alphabet.&lt;/p&gt;&#xA;&lt;h2&gt;Baudot derivatives&lt;/h2&gt;&#xA;&lt;p&gt;Although it is common to refer to five-bit teletypes as using &amp;quot;Baudot&amp;quot; code, the  actual code invented by Émile Baudot was soon replaced. Very little actual Baudot-code equipment survives today outside of museums.&lt;/p&gt;&#xA;&lt;p&gt;Later five-bit codes were the Murray code (pretty much a complete redesign of the code set, intended to make a typewriter-style keyboard easier to make and more reliable), the Western Union code (which was basically the Murray code with a couple of minor changes), and the ITA2 code, introduced in 1924. All of these were five-bit codes and all included the &amp;quot;figures and letters shift&amp;quot; codes.&lt;/p&gt;&#xA;&lt;p&gt;ITA2 with minor variations became very widely used until 7-bit ASCII arrived in about 1963. By &amp;quot;widely used&amp;quot; I mean by networks like Telex and TWX. This code was also used on commercial (and amateur!) radioteletype (RTTY) links.&lt;/p&gt;&#xA;&lt;h2&gt;Levels and rows&lt;/h2&gt;&#xA;&lt;p&gt;Any teletype that uses a five-bit code is called a &amp;quot;five-level&amp;quot; machine, &amp;quot;levels&amp;quot; referring to the five possible positions of holes (excluding the feed holes) across the width of punched paper tape. Another characteristic of all of them (I think) is that their keyboards have only three rows of keys (instead of four as was common on typewriters, and on the later ASCII teletypewriters). This was because the numeric digits (&amp;quot;figures&amp;quot;) and other special characters did not have their own codes; they were shifted off of the letter keys, so they did not have their own &amp;quot;row&amp;quot; of keys either.&lt;/p&gt;&#xA;&lt;p&gt;Accordingly, in place of a typewriter's &amp;quot;shift&amp;quot; keys the five-level machines have keys labeled &amp;quot;figs&amp;quot; and &amp;quot;ltrs&amp;quot;. These sent their own characters out of the 32 possible; they did not modify the codes sent by other keys, as would be the case with the &amp;quot;Shift&amp;quot; keys on an ASCII machine. The relationships between letters and digits were chosen so that the standard QWERTY keyboard layout had digits 1 through 0, in order, on the QWERTY row.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/e/ec/Telex_machine_ASR-32.jpg&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; is a picture of a three-row &amp;quot;Baudot&amp;quot; or five-level machine, an ASR32. (Yes, &amp;quot;thirty-two&amp;quot;, not 33. The ASR33 was the ASCII equivalent.) If you enlarge the picture you can clearly see the &amp;quot;Figs&amp;quot; and &amp;quot;Ltrs&amp;quot; keys.&lt;/p&gt;&#xA;&lt;p&gt;(Aside: Today it would be trivial to build a keyboard with a layout nearly identical to that of a modern computer keyboard (except for some missing special characters) but which would send ITA2 or other five-level codes. This may have been done during the last years of five-level codes, so it's possible that a machine with four rows of keys might be a &amp;quot;five-level&amp;quot; machine. Certainly a computer program that sends a five-level code can use a standard modern four-row keyboard, sending the &amp;quot;Figs&amp;quot; and &amp;quot;Ltrs&amp;quot; codes automatically as needed.)&lt;/p&gt;&#xA;&lt;p&gt;There is very little &amp;quot;five-level&amp;quot; equipment in operational service today, outside of a tiny fraction of ham operators who operate &amp;quot;RTTY&amp;quot; (radio teletype) and enjoy running the authentic machines as part of their hobby. But even among RTTY fans there are probably far more hams now sending and receiving the five-level codes with their computer than with the old electromechanical Teletypes. Although they were amazingly rugged and reliable, time does take its toll; the machines are old, require fairly frequent cleaning and oiling to stay reliable, and of course replacement parts can only be had by scavenging from another machine, or by machining them from scratch.&lt;/p&gt;&#xA;&lt;h2&gt;6-bit codes&lt;/h2&gt;&#xA;&lt;p&gt;In a time period overlapping much of the usage of the &amp;quot;five-level&amp;quot; teletypes there was also teletype equipment using a 6-bit code, the TTS - &amp;quot;TeleTypesetting&amp;quot; - code. These machines looked much like their five-bit equivalents and someone not familiar with them probably wouldn't notice the difference. But a close look would reveal that they were printing both upper and lower case!&lt;/p&gt;&#xA;&lt;p&gt;The TTS code and the machines that went with them were used by the news &amp;quot;wire services&amp;quot;. I've written a lengthy answer about those &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2297/what-were-the-applications-of-5-6-bit-serial-port-formats/2304#2304&quot;&gt;here&lt;/a&gt;. You probably never encountered such a machine unless you worked for a newspaper or a radio or TV station - or a wire service. These circuits and codes continued to be used until the late 70s or possibly the early 80s. There are far fewer operating examples of six-level teletype equipment today than five-level because there is virtually no hobbyist interest in it. (One of the &amp;quot;enthusiast&amp;quot; sites says there is &lt;em&gt;one&lt;/em&gt; Teletype Model 20 known to be in working condition.)&lt;/p&gt;&#xA;&lt;h2&gt;Enter ASCII&lt;/h2&gt;&#xA;&lt;p&gt;Flash forward to 1963 or so, when ASCII entered the Teletype world. The famous Teletype model 33 uses the same concept of start bit, data bits, two stop bits, but at a faster bit rate (110 bits/sec, commonly called &amp;quot;110 baud&amp;quot;) and with eight data bits instead of five. Hence &amp;quot;8-level&amp;quot;, though that term fell into disuse as these machines went everywhere and largely displaced the five-level machines, so there was no longer a need to distinguish them.&lt;/p&gt;&#xA;&lt;p&gt;Their keyboards have four rows of keys in what has become known as a &amp;quot;bit-paired&amp;quot; arrangement for the special characters. e.g. &lt;code&gt;2&lt;/code&gt; shifts to the double-quote mark &lt;code&gt;&amp;quot;&lt;/code&gt;, not to &lt;code&gt;@&lt;/code&gt;. The &amp;quot;figs&amp;quot; and &amp;quot;ltrs&amp;quot; keys, and the underlying concept, are gone. They do have shift keys but the machines send and print only upper case letters, so the shift keys work only on the number keys and on a handful of special-character-only keys. (I don't know what an ASR33 would do if it received lowercase letters. I believe it prints them as their uppercase equivalents.)&lt;/p&gt;&#xA;&lt;p&gt;Their keyboard arrangement became known as &amp;quot;bit-paired&amp;quot; because for any given key the shift keys make a single-bit change in the generated character code (though which bit it is differs for different keys.) This was advantageous as the bit coding from these keyboards was still partly done with mechanical linkages, as it had been on the post-Baudot three-row machines.&lt;/p&gt;&#xA;&lt;p&gt;This is not the case with common computer keyboards of today; they almost always use an arrangement called &amp;quot;typewriter-paired&amp;quot; wherein e.g. &lt;code&gt;2&lt;/code&gt; shifts to &lt;code&gt;@&lt;/code&gt;. This arrangement follows that introduced by IBM with some of their Executive Typewriters, and later with the very successful Selectric. (As noted in one of the comments, many of these &amp;quot;pairings&amp;quot; are locale-dependent; what I describe here is for North American keyboards.)&lt;/p&gt;&#xA;&lt;p&gt;The model 33 was a light-duty machine with a lot of plastic and metal stampings instead of cast metal, so it was less reliable than its predecessors - but much cheaper. The very similar-looking model 32 was a five-level (so-called &amp;quot;Baudot&amp;quot;) machine with a traditional three-row keyboard, intended to replace the older five-level machines in messaging systems. There was also the model 35, which like the 33 was an ASCII machine but built more along the lines of the older, more rugged  five- and six-level teletypes.&lt;/p&gt;&#xA;&lt;p&gt;The ASR33 (automatic send receive) model included a paper tape reader and punch. An operator could prepare a paper tape offline and send it to a receiving station later. The paper tape punch could also make a tape from incoming data.&lt;/p&gt;&#xA;&lt;p&gt;The ability to read and write paper tape (although slowly, at only 10 char/sec), as well as provide keyboard input and printed output, made the ASR33 a mainstay in the early days of microcomputers.&lt;/p&gt;&#xA;&lt;p&gt;This machine may have been the first teletypewriter to implement a form of &lt;em&gt;flow control&lt;/em&gt;: The ASCII control codes DC1 and DC3 (device control 1 and device control 3, typed as &lt;kbd&gt;ctrl&lt;/kbd&gt;-&lt;kbd&gt;Q&lt;/kbd&gt; and &lt;kbd&gt;ctrl&lt;/kbd&gt;-&lt;kbd&gt;S&lt;/kbd&gt; respectively) were adopted as XON and XOFF. Sending an XOFF would cause the machine at the other end to stop its paper tape reader (if it was running) and sending an XON would turn it back on again.  Thus an operator could pause a lengthy transmission if, for example, it was noticed that the local machine was about to run out of paper. Similarly, DC2 and DC4 would turn the remote machine's paper tape punch on and off.&lt;/p&gt;&#xA;&lt;p&gt;XON and XOFF were soon adopted by operating system developers for software flow control: A terminal operator could pause a lengthy output from the computer by typing &lt;kbd&gt;control&lt;/kbd&gt;-&lt;kbd&gt;S&lt;/kbd&gt; and then resume it via &lt;kbd&gt;ctrl&lt;/kbd&gt;-&lt;kbd&gt;Q&lt;/kbd&gt;. Serial-interfaced printers and terminals evolved to the point where they sometimes had their own reasons to exert flow control over the host computer, and XON/XOFF flow control became a &lt;em&gt;de facto&lt;/em&gt; standard.&lt;/p&gt;&#xA;&lt;p&gt;Eventually Teletype Corporation introduced the model 37, which was basically a model 33 extended to the full ASCII-7 character set, including both lower and upper case alphabets. But it was hardly &amp;quot;letter quality print&amp;quot; and it still only&#xA;ran at 15 characters per second - faster than the ASR33, but not by much. Soon these were all largely displaced by printing terminals using &amp;quot;daisy wheel&amp;quot; and dot matrix mechanisms, at 30 char/s and sometimes faster, and by video display terminals for applications that didn't need hardcopy.&lt;/p&gt;&#xA;&lt;p&gt;Since the &amp;quot;eight-level&amp;quot; machines only support a 128-character ASCII code set (at most) they really only make use of seven of the data bits. The eighth data bit might be sent always 0, always 1, or with even or odd parity, depending on the customer's choice.&lt;/p&gt;&#xA;&lt;h2&gt;Framing errors and BREAKs&lt;/h2&gt;&#xA;&lt;p&gt;As with the five- and six-row machines, a start bit that is &lt;em&gt;not&lt;/em&gt; followed by a stop bit after the expected number of data bits is regarded as a &amp;quot;framing error&amp;quot;, which can be used to signal an interrupt of sorts to the other end. In other words the &amp;quot;break key&amp;quot; on a terminal keyboard does not send any ordinary &amp;quot;character&amp;quot;; you will not find &amp;quot;break&amp;quot; in the ASCII code set. Instead it causes what is better thought of as a &lt;em&gt;line condition&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Many operating systems treated a framing error as a signal to &amp;quot;interrupt current program&amp;quot;. DEC's OSs tended to stick with ctrl-C.&lt;/p&gt;&#xA;&lt;h1&gt;But what about RS-232?&lt;/h1&gt;&#xA;&lt;p&gt;If a teletype is converted to RS232 (really &amp;quot;TIA-232-F&amp;quot; these days) the keyboard and printer are electrically separated. The &amp;quot;transmitted data&amp;quot; pin of the RS232 connector carries the data sent from the keyboard and the &amp;quot;received data&amp;quot; pin sends data to the printer; these two &amp;quot;sides&amp;quot; of the machine can operate completely independently. In RS232 a negative voltage indicates &amp;quot;mark&amp;quot; (a &amp;quot;1&amp;quot; bit on the data circuits, &amp;quot;deasserted&amp;quot; on the control circuits) and positive indicates &amp;quot;space&amp;quot;. So an idle line has negative voltage on it.&lt;/p&gt;&#xA;&lt;p&gt;What is possibly unexpected about this is that - unlike the case with current loop interfaces - if you just cross-connect two such teletypes to each other, hitting a key on one causes printing on the other one, but not on the local printer! Must such teletypes were connected to simple modems and most such modems had a button labeled &amp;quot;half duplex&amp;quot;, which really should have been labeled &amp;quot;local print&amp;quot;, which causes the characters typed locally to be sent to the local printer as well as to the other end.&lt;/p&gt;&#xA;&lt;p&gt;Alternately, computers to which these machines were connected could echo the received character back to the teletype. If the computer was set to do this &lt;em&gt;and&lt;/em&gt; your modem was set to half duplex you would often see &amp;quot;doubled&amp;quot; characters when you typed things. Many computer systems made some use of the fact that the user would see nothing if the computer didn't echo their typing back - for example, they would turn off the echoing while you were typing your password.&lt;/p&gt;&#xA;&lt;p&gt;If the only purpose of the stop bit(s) was character framing on the line, one stop bit would really have been enough. Two were used with teletypes to give the mechanical printer enough time to complete a cycle, especially for lengthy operations like &amp;quot;carriage return&amp;quot;. (Carriage returns actually got an entire extra character time to complete because the CR was always followed by a line feed (LF).) When non-mechanical devices like CRT terminals that could run at much higher speeds appeared, designers realized that these did not need such an accommodation so a single stop bit became the norm on higher-speed links.&lt;/p&gt;&#xA;&lt;p&gt;p.s.: Technically, only machines made by the Teletype Corporation should be called &amp;quot;Teletypes&amp;quot;. Many other companies made compatible equipment and generically they are all called &amp;quot;teletypewriters&amp;quot;, or &amp;quot;teleprinters&amp;quot; if they are receive-only.&lt;/p&gt;&#xA;&lt;p&gt;Lots more information at &lt;a href=&quot;http://www.baudot.net/&quot; rel=&quot;noreferrer&quot;&gt;baudot.net&lt;/a&gt; .&lt;/p&gt;&#xA;" OwnerUserId="3705" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-02-19T05:24:10.480" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="4462" PostTypeId="2" ParentId="3041" CreationDate="2017-08-09T13:05:38.157" Score="3" Body="&lt;p&gt;One of the things to understand here, was that at the time of CP/M you had very little memory and it was a long time ago where many concepts had not been introduced yet.  Drivers came later when computers could be modified easily with new hardware.  Those days the computer was very much what you had when you purchased it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BIOS layer &lt;em&gt;is&lt;/em&gt; essentially what we today would consider a statically linked set of drivers, typically written in assembly by the manufacturer.   CP/M itself was the same binary on all machines (which could be very, very different) and had a standard API in talking to the hardware and the BIOS implemented that API.  This was probably the reason CP/M became so popular.  The hardware in CP/M 2.2 was not much more than the keyboard input, screen output, printer output (no buffering), and floppy disk sector read/write.  CP/M 3.0 was a bit more complex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For MS-DOS the initial machines were very different (and still had very little memory - Zork could run in 48 Kb, and 640 Kb was very expensive) so BIOS was the way to talk to the hardware.  It took quite a while before the clones got good enough to not need this.  BIOS may still be needed in the boot sequence even for modern PC's even if UEFI is rapidly replacing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer was:  Not invented yet, and even if it was the memory was better spent for programs.&lt;/p&gt;&#xA;" OwnerUserId="447" LastEditorUserId="447" LastEditDate="2017-08-13T14:21:45.253" LastActivityDate="2017-08-13T14:21:45.253" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4463" PostTypeId="2" ParentId="4453" CreationDate="2017-08-09T17:26:43.453" Score="5" Body="&lt;p&gt;From what I can see on the Wikipedia page about the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_joystick_port&quot; rel=&quot;noreferrer&quot;&gt;Atari Joystick Port&lt;/a&gt;, it seems that the whole &quot;cross platform&quot; standard of the DE-9 joystick started with the VIC-20 (1981) and was followed by the C64 (1983) and Amiga (1985) computers as full implementations. There were others which were mostly compatible such as the ColecoVision (1982) and Sega Master System (1986?), but perhaps didn't work with every kind of peripheral.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I seem to recall from reading over the years that Commodore intentionally made the VIC-20 joystick port compatible to ride some of the popularity of the Atari 2600. Evidence of this can be seen in that original VIC-20 joysticks produced by Commodore even looked like the CX40: &lt;a href=&quot;https://i.stack.imgur.com/vs6X0.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vs6X0.jpg&quot; alt=&quot;VIC-20 CX40 clone&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to why it was skipped by other companies later on (most notably Nintendo's NES) isn't clear, but I would suspect it had to do with the fact that since most CX40-compatible hardware on the market only had 1 trigger/fire button. Nintendo's NES had 2 triggers (A/B) on its first controllers in addition to dedicated Start/Pause buttons, which obviously wouldn't work if someone wanted to use their CX40 on the NES. Though you could make a controller that combined combinations of the digital inputs for additional functions (e.g. the Atari Keyboard controller), I suspect platform and revenue control/protection was a strong driver as well!&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2017-08-09T17:26:43.453" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4464" PostTypeId="2" ParentId="639" CreationDate="2017-08-09T18:46:37.763" Score="4" Body="&lt;p&gt;I know I'm responding to an old post here but I though I would share my recent experiences. I recently purchased a TEAC 5.25&quot; floppy drive off eBay for the purpose of going through a bunch of old 5.25&quot; disk that I have (some were mine originally, others come from a bunch I bought at a thrift store a long time ago). I've gone through about two dozen double density disks (some single sided, most double sided but all formatted as double sided it seems) and all of them have been readable so far. These disks date back to between 1983 and 1988. It seems like double density disks can be very reliable for long periods if properly taken care of. I don't know how high density disks compare...I haven't run across any of those yet. &lt;/p&gt;&#xA;" OwnerUserId="6637" LastActivityDate="2017-08-09T18:46:37.763" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4465" PostTypeId="2" ParentId="3041" CreationDate="2017-08-09T20:22:01.537" Score="5" Body="&lt;p&gt;&lt;em&gt;[I am assuming the question is limited to functionality built into the PC, not functionality added via installed cards etc.  Obviously the BIOS couldn't provide routines for the latter, so drivers would have to be supplied]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having lived through the introduction of the original IBM PC, I have to say that in my opinion the submitter has the question backwards - what should actually be asked is 'Why do modern systems use their own drivers when the BIOS provides the needed functionality?&quot;  The fact is, &lt;strong&gt;it was always intended&lt;/strong&gt; that user programs should only perform certain functions via the BIOS routines - the BIOS was the 'wall' protecting the hardware from the user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What actually happened is, some applications eventually started generating graphical interfaces instead of textual interfaces, but when they tried using the graphical routines in the original IBM PC BIOS they found that the routines were so slow - they were notoriously badly written - they had no choice but to write into video memory directly to achieve palatable performance.  And of course different PC clones had slightly different graphics hardware, so people had to supply multiple custom drivers for their products.  Windows itself had to do the same.  Everything snowballed from that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, it is also possible that everything would have been driven in that direction anyway, for reasons stated elsewhere.&lt;/p&gt;&#xA;" OwnerUserId="6638" LastActivityDate="2017-08-09T20:22:01.537" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4466" PostTypeId="1" CreationDate="2017-08-09T23:22:00.927" Score="11" ViewCount="603" Body="&lt;p&gt;My understanding is that bold text on a VT100/VT102 is more intense than ordinary text; I might say that normal text is 80% grey and bold text is 100% grey=pure white, for the sake of illustration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming that's correct, what happens when bold and reverse video are combined? Does the white background behind the black text change intensity or not?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried this in gnome-terminal and xterm:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ echo -e '\033[7mxxxxx\033[1mxxxxx\033[m'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and on xterm the white background to all the 'x's is the same shade:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GZe0Y.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GZe0Y.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;whereas on gnome-terminal there are two distinct shades of white in the background:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/OQmOn.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OQmOn.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What happens on the real hardware? Was it common for programs to use bold reverse video at all?&lt;/p&gt;&#xA;" OwnerUserId="516" LastActivityDate="2017-12-17T22:51:12.320" Title="What does bold reverse video look like on a VT100/VT102?" Tags="&lt;terminal&gt;&lt;dec&gt;&lt;vt100&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4467" PostTypeId="2" ParentId="4456" CreationDate="2017-08-10T15:36:31.407" Score="0" Body="&lt;p&gt;When I was a lot younger, I used to own an teletype - which worked as a computer printer! I bought a surplus teletype from the local GPO telephone exchange. (GPO - United Kingdom Post Office). This thing took two people to carry it - it was industrially built and had a huge metal base. It had a hard coded identifier which as I remember might have been a hotel.&#xA;When I got it home I hooked it up as a printer on a Tandy TRS-80. One of the magazines had produced the schematic to do this. Take the cassette output line, hook it up to a relay. the relay swings the current running through a HUGE transformer, which goes into the teletype. If your code switches the relay on and off at exactly the correct rate for a Baudot signal the teletype prints!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This may have been one of the few printers ever on a TRS80 Model 1&lt;/p&gt;&#xA;" OwnerUserId="6646" LastActivityDate="2017-08-10T15:36:31.407" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4468" PostTypeId="2" ParentId="4456" CreationDate="2017-08-11T03:26:20.687" Score="0" Body="&lt;p&gt;Lots of good information in these answers; very interesting stuff. However, you asked what protocol the Teletype machines used and I haven't seen anyone give the actual answer yet. The protocol that Teletype machines used was simply called TTY protocol. Here's the definition from PCmag.com's encyclopedia of term: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;TTY protocol (TeleTYpewriter protocol): A low-speed asynchronous communications protocol with limited or no error checking.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, to answer your question, Teletype machines used the TTY (TeleTYpe) protocol. I used to run a BBS which you called using a terminal program that could emulate all sorts of terminals. To transmit the text of the regular board menus and whatnot, ANSI/TTY was always used. When you would go to transfer a file, upload or download, it was necessary to then use a DATA protocol, such as xmodem, ymodem or zmodem (or HS-Link!) instead of a TEXT protocol such as TTY. If you read Rick Brant's awesome description, under the &quot;sending&quot; heading he literally describes the TTY protocol. Does this clear up any of the confusion?&#xA;Hope it helps :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, there was nothing really &quot;compatable&quot; with the TTY protocol, per se. Teletype machines did one thing- when you typed a character, it caused the other teletype to print the character you typed. Much like how when you type a character on a computer keyboard, then that character is printed on your screen. Later, terminals would emulate TTY in order to send character text. Later still, when computers were connected to each other through a modem connection, you would dial the other with a terminal program that emulated the many types of terminals (ANSI,VT100, etc) which themselves were emulating a teletype machine. &lt;/p&gt;&#xA;" OwnerUserId="3338" LastEditorUserId="278" LastEditDate="2017-08-11T08:10:52.663" LastActivityDate="2017-08-11T08:10:52.663" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4470" PostTypeId="2" ParentId="4453" CreationDate="2017-08-11T12:39:30.727" Score="13" Body="&lt;p&gt;Two questions, three plus answers.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did this standard have a name?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;a.1) &lt;em&gt;There is no neutral standard&lt;/em&gt; for joystick ports, hence no standard name. When speaking manufacturer/machine needs to be named.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a.2) &lt;em&gt;There is a standard for the connector&lt;/em&gt; used by most 8 Bit machines, as their &lt;strong&gt;DE9&lt;/strong&gt; is part of the series Cannon developed in the 50s. Here &lt;strong&gt;D&lt;/strong&gt; is the general series denominator (said to be due the shape, but I doubt that, as it perfectly fits Cannons order number scheme),  &lt;strong&gt;E&lt;/strong&gt; defines the shell size and is just a counting (A, B, C, ...), as it's been the 5th defined size. Last, there's the number of pins. For the most basic pinouts there's a fixed relation. A DA is always 15, a DB always 25 and a DE always 9. Except when there are special layouts, either combining various connector types, like analogue - a DB13W3 used in workstations had 13 standard pins and 3 coax connections. Then there is the high density series. A DE-15, the well beloved VGA connector is an E shell with 3 rows of 5 pins each. So the combination of shell and pin count is usually enough to describe most connectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least a &lt;strong&gt;P&lt;/strong&gt; for plug or &lt;strong&gt;S&lt;/strong&gt; for socket could be added. In the case of joysticks it's important to remember that the console side houses the plug variant. Mnemonic: &lt;em&gt;P&lt;/em&gt;lug == &lt;em&gt;P&lt;/em&gt;ins. Later on, some used M(ale) and F(emale).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the original canon order number for the connector used at the end of a joystick cable is a DE9S and DE9P for the console (Well, plus a bunch of suffixes for the cable/board mounting variations and housings :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Where did it originate?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;b) &lt;em&gt;Most likely with the &lt;strong&gt;Fairchild Channel F&lt;/strong&gt;.&lt;/em&gt; The Channel F was not only one of the first successful multi game console (Magnavox Odyssey beeing the first), it also came, unlike others, with detachable controllers (Odyssey again being there before), but unlike the Odyssey, the Channel F used DE9 standard connectors. The Channel F debuted about a year before the VCS, so it's safe to assume that Atari had a peek here. Fairchild also introduced the habit of using the socket (female) part on the mobile. Then again, Atari used a different pinout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the home computers (&lt;strong&gt;400/800&lt;/strong&gt;) introduced two years later, Atari kept the pinout. By now the add-on industry had joined and it was just natural for Commodore to use the DE9 for their upcoming home computer, the &lt;strong&gt;VIC-20&lt;/strong&gt;, another two years later. While there where other formats, even open ones, the mainstream was settled for the Atari based standard. It did not make any sense to derive something different, as no-one could beat the supply already offered. TI did use a different pinout to support two joysticks over only one connector, just to make the Atari-TI adaptor one of the most sold items for this machine :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Over the years some variations occurred, either to create system lock in, or for new features (mouse etc), creating different pinouts and/or protocols. For example Amstrad dropped the paddles to add a scheme to support two joysticks with two fire buttons via a single DE9, much like the TI, but of course, different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, IBMs &lt;strong&gt;DA15&lt;/strong&gt; is a different story.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Bonus: Early Pinouts&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;c.1) Fairchild Channel F&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Twist left&lt;/li&gt;&#xA;&lt;li&gt;Twist right&lt;/li&gt;&#xA;&lt;li&gt;Pull up&lt;/li&gt;&#xA;&lt;li&gt;Push down&lt;/li&gt;&#xA;&lt;li&gt;East&lt;/li&gt;&#xA;&lt;li&gt;North&lt;/li&gt;&#xA;&lt;li&gt;South&lt;/li&gt;&#xA;&lt;li&gt;West&lt;/li&gt;&#xA;&lt;li&gt;Common&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;All are just switches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;c.2) Atari 2600&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;North (Up)&lt;/li&gt;&#xA;&lt;li&gt;South (Down)&lt;/li&gt;&#xA;&lt;li&gt;West (Left)&lt;/li&gt;&#xA;&lt;li&gt;East (Right)&lt;/li&gt;&#xA;&lt;li&gt;Paddle B&lt;/li&gt;&#xA;&lt;li&gt;Trigger&lt;/li&gt;&#xA;&lt;li&gt;+5V&lt;/li&gt;&#xA;&lt;li&gt;Ground&lt;/li&gt;&#xA;&lt;li&gt;Paddle A&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Directions are switches connecting to ground when pressed. Paddles are 470k connected to +5V. Lightpen/Gun used Trigger as signal and North as Button.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;c.3) TI 99/4&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;-&lt;/li&gt;&#xA;&lt;li&gt;Select Joystick 2&lt;/li&gt;&#xA;&lt;li&gt;North (Up)&lt;/li&gt;&#xA;&lt;li&gt;Trigger&lt;/li&gt;&#xA;&lt;li&gt;West (Left)&lt;/li&gt;&#xA;&lt;li&gt;-&lt;/li&gt;&#xA;&lt;li&gt;Select Joystick 1&lt;/li&gt;&#xA;&lt;li&gt;South (Down)&lt;/li&gt;&#xA;&lt;li&gt;East (Right)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;... well, I could go on, but I guess you get the picture.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-11-20T14:06:56.817" LastActivityDate="2018-11-20T14:06:56.817" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="4472" PostTypeId="2" ParentId="972" CreationDate="2017-08-11T21:37:17.443" Score="3" Body="&lt;p&gt;Given this is a PC/XT clone, there are two difficulties:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;adapting the unusual plug - it's unlikely you find a ready-made adapter, you probably have to make it yourself, have one made, or fit the original cable to another keyboard&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;protocol - the PC/XTs used a different protocol - keyboards in the late 80s, early 90s were often switchable; modern AT-style ones with PS/2 connector won't work&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Another option is to repair the original keyboard; depending on the contact technology this can even be easy - or impossible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Corroded threads can be soldered over or repainted with conductive silver, and worn conductive rubber can be reworked with some aluminum foil and double-faced scotch tape.&lt;/p&gt;&#xA;" OwnerUserId="5200" LastActivityDate="2017-08-11T21:37:17.443" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4473" PostTypeId="1" CreationDate="2017-08-11T21:52:22.590" Score="6" ViewCount="199" Body="&lt;p&gt;I have my mom's old Dell Inspiron 2650 model PP04L.  She is passed away now but I'd like to salvage some of the old pictures and things she had on there.  Is there a way to buy an enclosure and mount this with a USB connection so I can open it on my new computer?&lt;/p&gt;&#xA;" OwnerUserId="6665" LastEditorUserId="75" LastEditDate="2017-08-11T22:38:08.383" LastActivityDate="2017-08-12T08:05:48.787" Title="Recover files from Dell PP04L Hard Drive" Tags="&lt;hardware&gt;&lt;hard-disk&gt;&lt;old-hardware-adaptation&gt;&lt;ide&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4474" PostTypeId="2" ParentId="2406" CreationDate="2017-08-11T22:07:25.677" Score="1" Body="&lt;p&gt;I learned programming on an IBM 1620 (6-bit BCD magnetic core memory) computer in 1965, and it had an attached IBM 1311 disk pack drive and IBM 1622 punch-card unit. We had no operating system available at the time, and wrote everything in raw machine code or assembler. There was a way to load and run the assembler from disk, but I don't recall the details...&lt;/p&gt;&#xA;" OwnerUserId="6664" LastActivityDate="2017-08-11T22:07:25.677" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4475" PostTypeId="2" ParentId="4473" CreationDate="2017-08-11T22:15:00.533" Score="5" Body="&lt;p&gt;My condolences. You can hook up that (assumed) ATA harddisk using an appropriate USB adapter (you'll need the 44-pin type for 2.5&quot; drives, thx Brian) - many electronic shops still stock ATA/SATA-to-USB adapters.&lt;/p&gt;&#xA;" OwnerUserId="5200" LastEditorUserId="5200" LastEditDate="2017-08-12T08:05:48.787" LastActivityDate="2017-08-12T08:05:48.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4476" PostTypeId="2" ParentId="4457" CreationDate="2017-08-12T00:18:08.203" Score="1" Body="&lt;p&gt;LGR (Lazy Games Review) just published an excellent review of a related VHS backup system for the PC, known as the Danmere Backer. See &lt;a href=&quot;https://youtu.be/TUS0Zv2APjU&quot; rel=&quot;nofollow noreferrer&quot;&gt;video on YouTube&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I don't have any experience with the VBS for Amiga, it is shown briefly in the above video, and it appears to be similar to the external version of the Danmere Backer. According to the &lt;a href=&quot;http://www.bigbookofamigahardware.com/bboah/product.aspx?id=1710&quot; rel=&quot;nofollow noreferrer&quot;&gt;BBOAH page&lt;/a&gt;, the Amiga VBS plugged into the Amiga serial port, and the two RCA jacks on the VBS were plugged into the composite video in &amp;amp; out on the VCR. There would be no reason to connect the VBS to your monitor, unless you just wanted to groove out to the funky monochrome video encoding of your backup data.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-08-12T00:18:08.203" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4477" PostTypeId="2" ParentId="4473" CreationDate="2017-08-12T00:26:35.893" Score="6" Body="&lt;p&gt;A laptop of the vintage you mention will most likely have a 2.5-inch IDE, PATA (Parallel ATA), hard disk drive. Of course, you will need to disassemble the laptop and remove the drive to confirm. Once removed, you can obtain a low-cost enclosure, such as this one from &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B0097CW6LI&quot; rel=&quot;noreferrer&quot;&gt;amazon&lt;/a&gt;, to connect the drive via USB 2.0 to a more modern computer. Most likely, the FAT partitions on the drive will be recognizable to your modern OS.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-08-12T00:26:35.893" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4478" PostTypeId="2" ParentId="4446" CreationDate="2017-08-12T13:01:08.280" Score="16" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What I don't understand is why this quirk exists and how it works.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As usual, lousy programming. It's a routine that exists in next to every Microsoft Basic, but often modified by the receiving company. It's used to list a line. On the 6502 version space was a premium, so they tried to cut down as much as possible in tests. And lets be serious, a 'real' terminal can not produce codes above 128 so there is no chance someone would enter a token code somewhere. And what computer engineer in his right mind would create a machine using other codes than plain ASCII?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is this a bug or a feature of CBM BASIC?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a combination of several little bits of 'less than perfect' ending up creating a bug.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and why is it present only on the C64 and VIC-20?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because here the token table is exact 127 bytes of token names plus one byte of zero.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If it's a bug, what exactly causes the LIST command to choke on a shifted L in a &lt;code&gt;REM&lt;/code&gt; statement?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As described already, the list routine iterates over all program lines and in each it displays the line number and then parses all token/text and print it. Tokens are recognized by having the high bit set. Tokens on the C64 reach from $80 (&lt;code&gt;END&lt;/code&gt;) to $CA (&lt;code&gt;GO&lt;/code&gt;) plus $FF for &lt;code&gt;PI&lt;/code&gt;. Whenever a token is detected, the token table is searched for (&lt;code&gt;PI&lt;/code&gt; is handled separately) in the most primitive way: $7F is subtracted and then tokens are scanned and skipped with that value decremented until zero is reached. Then this word pointing at is printed. Not really fast, but who cares during listing.This all works fine and stable - even with unused tokens. Try enter a &lt;kbd&gt;Shift + M&lt;/kbd&gt;, and you get a &lt;code&gt;FOR&lt;/code&gt; ($81) listed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just $CB fails, as it points to the combination of a single zero and an 128 Byte overflow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In conclusion it's a combination of a missing upper boundary check together with an addressing problem that only appears when using a character set not designed for and an input routine not catching it either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original routine can be found in all MS-Basic 1.0. For newer MS-Basics the token table is of a different length and the routine is modified - usually by using a 16 Bit Pointer instead of a fixed address plus offset - as their token tables are larger than 127 bytes.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-11-20T14:09:01.593" LastActivityDate="2018-11-20T14:09:01.593" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="4479" PostTypeId="1" CreationDate="2017-08-12T18:47:12.000" Score="10" ViewCount="783" Body="&lt;p&gt;Back in the day, when I was running a bbs, blinkyterm was just coming out with the new janus bidirectional file transfer protocol which was hoped to displace zmodem et al for bbs to bbs file transfer (ie mail), but its adoption was slowed by the limited availability of fast truly bidirectional modems (most high speed modems of the time had performance issues with high bandwidth bidirectional data that did not show under asymmetric loads like zmodem).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have searched off and on the last couple years, but I cannot find any information about janus. Maybe it is just my bad spelling and janus inc.'s ftp server (no relation) but I can't find anything relevant. I would like to find a protocol specification and/or reference implementation, but any details about its history and demise (probably killed by tcp) would be welcome.   &lt;/p&gt;&#xA;" OwnerUserId="6516" LastActivityDate="2017-08-13T09:57:37.823" Title="Whatever happened to the janus protocol" Tags="&lt;modem&gt;&lt;bbs&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4480" PostTypeId="2" ParentId="4479" CreationDate="2017-08-12T19:56:26.747" Score="18" Body="&lt;p&gt;Short answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because it was useless to begin with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a more detailed answer the whole picture is needed:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the &lt;em&gt;real&lt;/em&gt; old days modems were symmetrical. A V.21 modem split the line into two 300 bps channel, one for each direction. So single direction transfer would use only a half the available bandwidth. This stayed true including the 2400 bps standard (V.22bis). Janus was developed (IIRC) in the 1985-87 time frame, including adaptions for FIDO and so on. For 2400 bps Modems it did improve transfer times. So far a great idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Around the same time USR did introduce their proprietary HST modems. HST was based on an asymmetric channel distribution. One direction did get about 9600 bps bandwidth, while the other got only 300 bps. So perfect for single direction transfers. USR also got a huge foothold in the US by applying an aggressive marketing toward BBS operators with substantial discounts, sometimes up to 60% off regular retail. Now, while running Janus on a symmetric line is a great idea, it totally sucks on asymmetric connections. Thus, BBS running a high speed modem were better off utilizing single directional protocols.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since V.32 was already standardized years before (1984?), using a V.32 modem would have been a better idea, just they were prohibitive expensive (I remember Hayes asking for tier fist V.32 Modem in like 1988 more than 2000 USD, compared to a HST sold below 1000 USD) - and as said before, USR already had a great hold among BBS operators. With the advent of lower priced standard (V.32) modems USR did crank up the HST (16.8 and 19.2) to stay ahead, but ultimately lost. Still, this wasn't until like 1992/3, and many BBS were still on a locking to the HST.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same time standard 14.4/28.8 modems became available at reasonable prices, the mid 90s, is also when BBS lost it's appeal and major dial in networks or at last the internet took over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, yeah, Janus was a good idea, but market forces meant different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a more professional side it was never really something to be considered. People connecting to Unix systems or interconnecting Unix systems were mainly using Telebits PEP modems. For one, they not only offered a dynamic channel adjustment, but also protocol spoofing. PEP split the bandwidth into 512 channels each could be assigned to either direction, so the bandwidth was dynamically allocated. Protocol spoofing meant that the modem recognized a transfer using uucp-g or ZModem and handling all protocol issues locally, thus reducing turn around times to zero. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4049" LastEditDate="2017-08-13T09:57:37.823" LastActivityDate="2017-08-13T09:57:37.823" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4481" PostTypeId="1" AcceptedAnswerId="4482" CreationDate="2017-08-13T07:00:15.447" Score="29" ViewCount="2993" Body="&lt;p&gt;When RAM is at a premium, as it was in the old days, a greater &lt;a href=&quot;https://electronics.stackexchange.com/questions/4123/about-code-density-and-its-definition&quot;&gt;code density&lt;/a&gt; of an instruction set can be a substantial advantage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Click saver: &lt;em&gt;Code density refers loosely to how many microprocessor instructions it takes to perform a requested action, and how much space each instruction takes up.&lt;/em&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did the popular 8-bit microprocessor lines (6502, ..., and 8080, ...) compare against one another in that regard? An attempt to look up &quot;6502 vs 8080&quot; or &quot;6502 vs Z80&quot; brings up discussions about clock frequencies, clock cycles per instruction, programming preferences, etc. but not about the code density.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-08-13T09:26:49.107" Title="What is the relative code density of 8-bit microprocessors?" Tags="&lt;z80&gt;&lt;6502&gt;&lt;8080&gt;&lt;instruction-set&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4482" PostTypeId="2" ParentId="4481" CreationDate="2017-08-13T09:26:49.107" Score="33" Body="&lt;p&gt;An instruction set can be considered as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Huffman_coding&quot; rel=&quot;noreferrer&quot;&gt;Huffman coding&lt;/a&gt; of an idealised instruction stream. So the question is really asking which CPUs have a good balance of short encodings for common tasks to longer encodings for rare tasks. However, it is not sufficient to just look at the encoding of individual instructions because a RISC instruction generally does less than a CISC instruction, and real-world code need to be considered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, it is possible to increase code density by creating a more efficient virtual machine to execute &lt;a href=&quot;https://en.wikipedia.org/wiki/Bytecode&quot; rel=&quot;noreferrer&quot;&gt;bytecode&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Threaded_code&quot; rel=&quot;noreferrer&quot;&gt;threaded code&lt;/a&gt; (not to be confused with modern-day threads), or a variety of other similar techniques. All of these tricks are effectively instruction sets in their own right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you're not really asking about the theory, but hard data. The paper that immediately came to mind was &lt;em&gt;Code Density Concerns for New Architectures&lt;/em&gt; (&lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.398.1967&quot; rel=&quot;noreferrer&quot;&gt;Citation&lt;/a&gt;, &lt;a href=&quot;http://web.eece.maine.edu/~vweaver/papers/iccd09/iccd09.pdf&quot; rel=&quot;noreferrer&quot;&gt;Presentation&lt;/a&gt;, &lt;a href=&quot;http://web.eece.maine.edu/~vweaver/papers/iccd09/iccd09_density.pdf&quot; rel=&quot;noreferrer&quot;&gt;Paper&lt;/a&gt;). It is more biased towards modern architectures, but it does include the Z80 and 6502 in (some of) its results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can intuit the likely results for similar retro CPUs: the 8080 is a subset of the Z80 so will be less dense. Likewise the 8088 is a subset of modern x86 and also less dense and arguably not really an 8 bit CPU anyway, or we could just include the 68008 or 65816.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To crudely summarise the paper's results: Modern x86 tends to be the most-dense code; CISC, ARM Thumb, Z80 and the embedded-optimised CPUs are a close second; RISC and 6502 are a respectable third (many don't think of the 6502 as being RISCy!), and Itanium and Alpha come in a poor fourth. If you ignore the Itanium outlier, there's only about a factor of 1.5 difference between all the CPUs tested.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you're looking for a (popular) retro CPU with the absolute-highest code density, you want the Z80.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2017-08-13T09:26:49.107" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4484" PostTypeId="1" AcceptedAnswerId="4498" CreationDate="2017-08-14T10:13:12.057" Score="16" ViewCount="1381" Body="&lt;p&gt;Looking through the LO (localisation) disk for Workbench 3.1, I see that the language files are binary. I'd like to create a Gaeilge (Irish) localisation file. How is this done on Amiga? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oNnss.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oNnss.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: Following Raffzahn's advice, LocaleTest provides useful information on the current/active locale. I'm happy to see there are only 51 strings used in Workbench - the translation aspect should be easy :) Here is LocaleTest running on my setup: &lt;a href=&quot;http://www.dailymotion.com/video/x5wzhyj&quot; rel=&quot;noreferrer&quot;&gt;http://www.dailymotion.com/video/x5wzhyj&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Lithuanian language may be complete, but is also binary so I don't know what I can learn from it. There are also some irregularities delcared; &quot;usefull files (hacks) to make Amiga OS think that Lithuanian language&#xA;is your prefered language. Those files are hack because I don't know how to&#xA;build countries file. Sorry, but I don't have time to search internet for these documents.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The link at &lt;a href=&quot;http://wiki.amigaos.net/wiki/Locale_Library&quot; rel=&quot;noreferrer&quot;&gt;http://wiki.amigaos.net/wiki/Locale_Library&lt;/a&gt; clarifies some concepts but is ultimately aimed at application developers and doesn't show how to create a locale/catalog itself.&lt;/p&gt;&#xA;" OwnerUserId="5251" LastEditorUserId="2155" LastEditDate="2019-03-15T15:30:21.277" LastActivityDate="2019-03-15T15:30:21.277" Title="Creating a new locale.library language support for AmigaOS" Tags="&lt;amiga&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="4485" PostTypeId="2" ParentId="4484" CreationDate="2017-08-14T11:06:56.390" Score="6" Body="&lt;p&gt;As far as I remember the &lt;code&gt;.language&lt;/code&gt; files are a variation of &lt;code&gt;.catalog&lt;/code&gt; files. They are 'paired' with &lt;code&gt;.country&lt;/code&gt; files for things like default date order, etc. I do not remember any special tool for creation, but then again, it's been a few years. What I remember is a program called &lt;code&gt;LocalTest&lt;/code&gt; listing all structures and settings of &lt;code&gt;.language&lt;/code&gt; files. A quick search turned it up on &lt;a href=&quot;http://aminet.net/package/util/misc/LocaleTest.lha&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Aminet&quot;&gt;Aminet&lt;/a&gt;, including all sources, so there is maybe a starting point to dig.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at an existing localization might also help; maybe use this really complete &lt;a href=&quot;http://aminet.net/package/docs/misc/lietuvybe&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Lithuanian Localization&quot;&gt;Lithuanian localization&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at Amiga localization in general might also be helpful, see the &lt;a href=&quot;http://wiki.amigaos.net/wiki/Locale_Library&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Locale Library&quot;&gt;Locale Library page&lt;/a&gt; on AmigaOS. Of course, these pages focus on AmigaOS 4.0 and up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then there was the Amiga Translators Organization. A gathering of people on the net involved in (voluntary or professional) translation of Amiga product. I couldn't find an actual pointer, but &lt;a href=&quot;http://amigatrad.free.fr/web/Index.html&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Amiga Translators Organization&quot;&gt;this old page&lt;/a&gt; might be a first start for your search.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2019-03-13T10:30:29.850" LastActivityDate="2019-03-13T10:30:29.850" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="4486" PostTypeId="1" AcceptedAnswerId="4487" CreationDate="2017-08-14T22:01:25.280" Score="14" ViewCount="2026" Body="&lt;p&gt;I have an OS/2 Warp CD that I am wanting to use as the installation media on an IBM PC 350 Pentium system. I have already installed MS-DOS 6.22 and the IBMIDECD.SYS driver for the CD-ROM drive on the boot HD. When I boot the system, it seems to install the driver and MSCDEX.EXE is loaded and reports drive E: is available (the CD-ROM drive).&lt;/p&gt;&#xA;&lt;p&gt;The exact driver loading information from my CONFIG.SYS is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;DEVICEHIGH=C:\IBMIDECD.SYS /D:IBMCD000&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;And the command in my AUTOEXEC.BAT is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;C:\DOS\MSCDEX.EXE /D:IBMCD000 /L:E&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;I can switch to &lt;code&gt;E:&lt;/code&gt;, and I can use the &lt;code&gt;DIR&lt;/code&gt; command to see the contents of my CD-ROM, but I cannot access any of the files on the CD-ROM. The transcript below shows this &amp;quot;weirdness&amp;quot;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ibminst      &amp;lt;DIR&amp;gt;         10-30-01   6:20p&#xA;info         &amp;lt;DIR&amp;gt;         10-30-01   6:20p&#xA;install  cmd           956 01-04-01   2:43p&#xA;options      &amp;lt;DIR&amp;gt;         10-30-01   6:23p&#xA;os2image     &amp;lt;DIR&amp;gt;         10-30-01   7:26p&#xA;readme   add               10-30-01   7:39a&#xA;readme   txt               10-30-01   7:39a&#xA;rspinst  exe       478,064 10-27-01  10:50p&#xA;sample   rsp        81,781 10-27-01  10:50p&#xA;technote txt       214,878 11-02-01  11:48a&#xA;vcu      exe       131,347 10-16-01   3:29p&#xA;vcu      msg         1,760 10-16-01   1:26p&#xA;       22 file(s)      1,052,303 bytes&#xA;                               0 bytes free&#xA;&#xA;E:\&amp;gt;cd info&#xA;Invalid directory&#xA;&#xA;E:\&amp;gt;cd e:\info&#xA;Invalid directory&#xA;&#xA;E:\&amp;gt;type readme.txt&#xA;File not found - README.TXT&#xA;&#xA;E:\&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If I insert the same CD into my modern computer, I can see and access all of the contents. Under Mac OS X, the CD is recognized as being ISO 9660 format.&lt;/p&gt;&#xA;&lt;p&gt;What problems with the CD, CD-ROM drive, and driver setup in MS-DOS 6.22 could possibly be causing this behavior?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="15334" LastEditDate="2021-04-21T09:07:23.913" LastActivityDate="2021-04-21T09:07:23.913" Title="Why would a CD-ROM in an MS-DOS 6.22 system not allow file access?" Tags="&lt;ms-dos&gt;&lt;ibm&gt;&lt;cd-rom&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="4487" PostTypeId="2" ParentId="4486" CreationDate="2017-08-15T00:26:07.370" Score="27" Body="&lt;p&gt;It appears that the CD-ROM doesn't have a valid ISO 9660 file system. ISO 9660 requires that the file names be entirely in uppercase, lower case characters in file names aren't allowed. The directory listing in your screenshot shows only file names with lowercase letters instead of only uppercase as you'd expect to see in a MS-DOS directory listing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The error message &lt;code&gt;File not found - README.TXT&lt;/code&gt; shows that MS-DOS is looking for a file named &lt;code&gt;README.TXT&lt;/code&gt; despite the fact that you typed &lt;code&gt;readme.txt&lt;/code&gt;. MS-DOS automatically converts file names to uppercase since not only does ISO 9660 require uppercase file names, so does MS-DOS's own FAT file system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The OS/2 Warp 4 CD-ROM came with three floppy disks that were used for booting the installation, as the CD-ROM itself wasn't bootable. If you want to install OS/2 Warp 4 then you should probably track down those disks, as the installation may not work without them.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorUserId="4147" LastEditDate="2017-08-15T12:07:37.910" LastActivityDate="2017-08-15T12:07:37.910" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="4488" PostTypeId="1" CreationDate="2017-08-15T02:02:25.127" Score="4" ViewCount="638" Body="&lt;p&gt;I successfully took apart an Atari 2600 paddle controller, then cleaned and appropriately lubricated the contacts. However, the volume knob does not have the same smoothness as it does on the other paddle controller that I have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read online that using a damping grease inside the base of the potentiometer gives it glide and smooth action during rotation of the knob, and I believe &lt;em&gt;that&lt;/em&gt; was what was in there when it was new.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of people online recommend Nye damping lubricants but they are in excess of $40 for a 50g tube. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone found a cheaper alternative? I can't really justify paying forty dollars on damping grease to use on a three dollar controller. Every paddle controller I've used has this issue so it's not like I can go out and replace my set with a guaranteed good pair.&lt;/p&gt;&#xA;" OwnerUserId="4123" OwnerDisplayName="montag" LastEditorDisplayName="user6464" LastEditDate="2018-10-08T02:25:50.047" LastActivityDate="2019-07-12T08:56:38.070" Title="Potentiometer rebuild - inexpensive damping grease?" Tags="&lt;repair&gt;" AnswerCount="1" CommentCount="14" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="4489" PostTypeId="1" CreationDate="2017-08-15T08:55:34.643" Score="41" ViewCount="6761" Body="&lt;p&gt;I've found this page which has an informative description of how sectors were encoded on floppy disks: &lt;a href=&quot;http://nerdlypleasures.blogspot.com.au/2015/11/ibm-pc-floppy-disks-deeper-look-at-disk.html&quot; rel=&quot;noreferrer&quot;&gt;http://nerdlypleasures.blogspot.com.au/2015/11/ibm-pc-floppy-disks-deeper-look-at-disk.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do the gap bytes span the entire space between sectors? Or are there sections between the sectors where &quot;nothing&quot; is written? I'm asking about regular formats, not exotic ones where sectors overlap. I.e, after the data CRC, do the gap bytes start immediately? The article says &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Sometimes there may be some junk bytes between the CRC value and the next sequence of Gap bytes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What about the other times? Can there be &quot;nothing&quot; or will it always be filled with data, even if it's not normally accessible? The article also says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have never come across a disk that has had more than 10 x 512 byte sectors.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This means that a track must be able to hold at least 5320 bytes, assuming a single gap byte and a single &lt;code&gt;00&lt;/code&gt; sync byte for each sector ID and data field. The 9-sector format as shown uses 5274 bytes per track, so there is room for at least 46 bytes more!&lt;/p&gt;&#xA;" OwnerUserId="2067" LastActivityDate="2020-12-11T20:58:58.243" Title="What is between the sectors of floppy disks?" Tags="&lt;floppy-disk&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="4490" PostTypeId="2" ParentId="4489" CreationDate="2017-08-15T11:13:47.323" Score="19" Body="&lt;p&gt;There can be values between the sectors but you probably don't want them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem affecting disks is that they don't quite spin at a constant rate. Motor fluctuations, aerodynamics, friction from the head, etc, together give a few percentage points of variability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So reading disks means applying a phase-locked loop to try to recover the clock rate and therefore the data. And generally speaking, that's what the stuff between bits of data is: 4e or FF bytes to allow the PLL to settle and then 00s to allow proper framing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you first format a disk, you'll establish the initial ID marks and data bodies. Later you might want to rewrite the data. But you'll almost certainly be writing at a slightly different rate. So the controller will spot the existing ID mark, then write a new data section after it. It may well produce a fairly dirty slicing-in of the new data, and write it at a slightly different rate. So the stuff between the ID field and the data mark gives the PLL time to recover from a potential abrupt phase change, into a slightly different clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you might be spinning the disk slightly more quickly than the original drive. So your data rate will look lower. So the new data you write to replace the old might stretch into the gap you left after the data and before the next ID. But it can't go so far as not to give the PLL enough time to adjust to another splice and rate change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are plenty of machines with contemporaneous controllers that can see a lot of the stuff between sectors — anything with a WD1770 can do an okay job*, the Amiga can do so perfectly — but the stuff is there for the purpose of reliable operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the archetypal size for an MFM track is usually given as 6250 bytes. But it'll depend on how your drive feels that day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*) MFM sync words can arise naturally in ordinary data, so it can easily lose framing if your data happens to contain certain values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expanded detail on that claim, it having been queried:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One defined MFM sync word is the data value &lt;code&gt;C2&lt;/code&gt;. Normally encoded that should be &lt;code&gt;0101 0010 **1**010 0100&lt;/code&gt; but, as is normal for sync words, a clock bit is omitted to make &lt;code&gt;0101 0010 **0**010 0100&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, look at what happens if you validly encode the data value 000101001:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;0 -&gt; [clock] 0&lt;/li&gt;&#xA;&lt;li&gt;0 -&gt; 10&lt;/li&gt;&#xA;&lt;li&gt;0 -&gt; 10&lt;/li&gt;&#xA;&lt;li&gt;1 -&gt; 01&lt;/li&gt;&#xA;&lt;li&gt;0 -&gt; 00&lt;/li&gt;&#xA;&lt;li&gt;1 -&gt; 01&lt;/li&gt;&#xA;&lt;li&gt;0 -&gt; 00&lt;/li&gt;&#xA;&lt;li&gt;0 -&gt; 10&lt;/li&gt;&#xA;&lt;li&gt;1 -&gt; 0 [data]&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Putting it all together: &lt;code&gt;0101 0010 0010 0100&lt;/code&gt;. So what looks exactly like the &lt;code&gt;C2&lt;/code&gt; sync word occurs anywhere your actual disk data contains the nine bits 000101001. When the WD is performing its read track, it has its sync detector on and adjusts its framing accordingly. So if you have that sequence it will adjust its framing and definitely be wrong as it will have adjusted so that clock fluctuations are in the position that data fluctuations should be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: external sources mentioning the 0x5224 sync word: &lt;a href=&quot;http://info-coach.fr/atari/hardware/FD-Hard.php&quot; rel=&quot;noreferrer&quot;&gt;Atari ST FD Hardware&lt;/a&gt;, &lt;a href=&quot;ftp://ftp.oldskool.org/pub/drivers/Central%20Point/OptionBoard/website%20mirrors/retro.icequake.net%20Option%20Board%20website%20mirror/dob/files/bleuge/disk2fdi/DOCS/FDISPEC.TXT&quot; rel=&quot;noreferrer&quot;&gt;the FDI disk image file format specification&lt;/a&gt;, &lt;a href=&quot;https://fossies.org/linux/uae/src/disk.c&quot; rel=&quot;noreferrer&quot;&gt;the UAE source code&lt;/a&gt;, &lt;a href=&quot;https://www.scribd.com/document/339975262/MAME-Manual&quot; rel=&quot;noreferrer&quot;&gt;the MAME documentation&lt;/a&gt;. External sources mentioning its ambiguity: &lt;a href=&quot;http://www.atari-forum.com/viewtopic.php?t=27448&quot; rel=&quot;noreferrer&quot;&gt;&quot;All you always wanted to know about the WD1772&quot; (an Atari forum post)&lt;/a&gt;, &lt;a href=&quot;http://dmweb.free.fr/files/Atari-Copy-Protection-V1.4.pdf&quot; rel=&quot;noreferrer&quot;&gt;Atari Floppy Disk Copy Protection&lt;/a&gt;. It crops up a lot in ST literature because that was a machine with sufficiently-fixed hardware for real hit-the-metal protection schemes, it uses the WD which can make framing errors during a read-whole-track command due to the ambiguity, and it was a popular machine which always had a disk drive, so that was the only avenue for software distribution and piracy was a significant risk.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-08-15T13:46:34.937" LastActivityDate="2017-08-15T13:46:34.937" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4491" PostTypeId="2" ParentId="4489" CreationDate="2017-08-15T12:32:57.627" Score="102" Body="&lt;p&gt;&lt;strong&gt;This calls for a lengthy Floppies 101.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;For one, never assume a floppy as something with an inherently byte orientated structure. There is none. Just magnetic reversing areas. It's more like a magnetic tape (looped at the end). All orientation on this track is timing based. There are no cell markers or position markers or whatsoever. Well, there's a single marker that shows up once per revolution. It can be used to count them and &lt;em&gt;maybe&lt;/em&gt; to start something (like a track), but it's not really needed and some quite low level implementations ignored it, so let's also ignore it (*1).&lt;/p&gt;&#xA;&lt;p&gt;The disk is moved by mechanical means at a variable and less than perfectly controlled speed. This means that while drives may have a nominal revolution of 300 rpm, individual drives can rotate faster or slower, while at the same time a drive may also jitter during one round. It's not really favourable when doing timing based operations on the track.&lt;/p&gt;&#xA;&lt;p&gt;To add complexity, it should be possible not only to read a single sector, but also to write just a sector, not always a whole track. To provide a reliable data storage media offering this and being also exchangeable over different machines, compensations for these effects are needed, thus two provisions are made:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Sync bytes to locate headers and data sectors&lt;/li&gt;&#xA;&lt;li&gt;Three types of gaps to cover jitter and speed differences:&lt;/li&gt;&#xA;&lt;li&gt;A gap between the header and the data sector&lt;/li&gt;&#xA;&lt;li&gt;A gap between the data sector end and the next header&lt;/li&gt;&#xA;&lt;li&gt;A gap between the last data sector and the first header&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;All together it's a form of prayer that everything will go well at the end.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The structure is not god or manufacturer given, but written on the disk when formatting. Formatting is a process where the whole track is written at once, including all headers, (dummy) sectors and gaps since there is no physical structure to check and format against. So the first prayer goes that total time needed to write the formatted track is shorter than a revolution. Otherwise it would overwrite its own beginning. How much shorter is based on the amount of speed spread the format developer has to expect from drives. Lets say that the drives are accurate at +/-3%, resulting in a maximum usable length of 97% of a track - in case the machine formatting got any of the unlucky 309 rpm drives.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;The timing of one &lt;strong&gt;real&lt;/strong&gt; revolution defines the maximum usable length of a track.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Formatting includes (writes) all gaps on the track.&lt;/strong&gt; After that, these bytes aren't read or used again. They are exactly what the name suggests, a void between used sniplets. Their purpose is to allow timing variations and variable setup times for various stages of reading and writing. Their content is irrelevant.&lt;/p&gt;&#xA;&lt;p&gt;During normal operations (i.e. not formatting), when a specific sector is needed, the controller looks out for sync bytes. They tell the speed a block (header or data) was written, so the controller can pick that speed up and use it to read the following bytes. After all, it could have been written on a different machine and/or a drive adjusted to a different speed (rpm). After synchronisation the following data can be read. Usually first looking for headers and checking them, until the desired address is found. On a read operation, the process gets repeated (waiting for sync and syncing) then the following block gets read and done. Gaps (point 2.1.) are completely ignored and not really needed - except for providing time to switch modes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Now, when writing the picture changes.&lt;/strong&gt; Here also the header is searched and compared. After that the controller switches for writing and starts to output the &lt;em&gt;new sector data&lt;/em&gt; on his own timing. This includes sync bytes, data mark, data and CRC but not any gap bytes. The gap bytes between header and data have no real meaning at this stage, except, they should occupy the time span that the controller needs to switch from header check to writing.&lt;/p&gt;&#xA;&lt;p&gt;Although during reading synchronisation was kept by the data encoded, in writing synchronisation comes from the controller. This means a new sector can be longer or shorter than the existing one - again depending on drive adjustment (and controller). If it's shorter fine, but when longer it needs more space - that's what the gap after a data sector (b.2) is meant for. With 3% drive variation and 512 Byte sectors formatting should have added some 15 gap bytes (these numbers are made up, check actual data sheets for real values) to make writing reliable.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Now your questions:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Do the gap bytes span the entire space between sectors?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. The gap spans the space between data blocks (header or sector). There are no bytes, just rubbish.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or are there sections between the sectors where &amp;quot;nothing&amp;quot; is written?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In the gaps and at the 'end'.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;after the data CRC, do the gap bytes start immediately?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;After formatting yes, later on hopefully.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sometimes there may be some junk bytes between the CRC value and the next sequence of Gap bytes. What about the other times? Can there be &amp;quot;nothing&amp;quot; or will it always be filled with data, even if it's not normally accessible? The article also says&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Gaps are gaps. Whatever is in the gap doesn't matter. Maybe it's remaining of previous sectors, or alien messages. Looking in there is as useful as playing records backward.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I have never come across a disk that has had more than 10 x 512 byte sectors. This means that a track must be able to hold at least 5320 bytes, assuming a single gap byte and a single 00 sync byte for each sector ID and data field. The 9-sector format as shown uses 5274 bytes per track, so there is room for at least 46 bytes more!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Repeat after me: there are no byte cells on floppies.&lt;/p&gt;&#xA;&lt;p&gt;It's all about timing. On a physical level the maximum is defined by the flux changes the magnetic material can handle. Usually something like 6000 bpi. It's a property tied to length, not timing. So the outer tracks could hold more than the inner. But (normal PC) controllers handle disks at constant speed and constant data rate. For 5.25&amp;quot; MFM disks this is 250 kbps (=(decimal) kilobits per second). As the drive rotates at 300 rpm, or 5 rps (300 / 60), a 250 kbps data rate, the FDC can record exactly 50 (250 / 5) kbit (kilobits), or 6250 bytes, on a single track.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;6250 bytes per track is the (rough) upper limit for fixed speed MFM 5.25&amp;quot; drives.&lt;/em&gt; The controller can't supply more and the media can't take more. With your kind of calculation this would offer not just 46 Bytes, but a whole whopping kilobyte :)) Well, of course, ignoring that there is also a track header which takes about 100 bytes off.&lt;/p&gt;&#xA;&lt;p&gt;(A classic example of the need for gaps: I remember problems of PCs with a uPD765 controller when reading disks formatted by a WD1772 controller - the WD was quite fast to start writing after the track hole was detected, while some 765 implementation took time to think about before reading the first bytes, which would be the track block. Now, no hassles, as every sector also provides the track number, right? No, after track change the 765 insists on looking for the track header, and every time the index hole came, he went blind for a moment. But enough of wartime stories.)&lt;/p&gt;&#xA;&lt;p&gt;The little problem here is that your calculation is based on dropping all gaps and syncs which would make the media unreadable. Again, A floppy isn't some certified stream in byte order where a single byte somewhere will do the trick. The gaps are needed to cover timing variations and setup times (otherwise they could be dropped entirely). And one sync isn't a sync at all, just another gap. Controller PLLs need maybe several byte times to sync reliably, also a sync byte may get damaged (due to writing), or reading may just start half a bit time too late. Also, you may need to look again at the sync pattern. They are not just zeros. There should be a byte called A1, that's the real sync mark, as it's not &lt;code&gt;A1&lt;/code&gt;, but a modified 12 bit pattern that would be an A1 if there wouldn't be a 'clocking error' inside. Thus triggering the PLL. You'll need at least 3 of them - plus a bunch of zeros to lead in - to be sure synchronization happens.&lt;/p&gt;&#xA;&lt;p&gt;But long story short: yes, you can cram more into a track if you're sure about the timing of your drives and your machine. Up to 11 512 Byte sectors have been found to work acceptably on standard MFM disk drives manufactured from the late '80s onwards.&lt;/p&gt;&#xA;&lt;p&gt;If you really want to dig deeper, there's an awesome book called  &lt;a href=&quot;http://www.clausbrod.de/cgi-bin/view.pl/Atari/Scheibenkleister&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;Scheibenkleister&lt;/code&gt;&lt;/a&gt; (*2) written about storage media for the Atari ST. And yes, it's a great read for PC users, as the basic floppy hardware of the original ST is just the same as on the PC, while Atari Formats are also just PC Disks. A disk was supplied with the book offering a 'Hyperformat' program allowing to play with various kind of track types and track numbers. 12 sectors per track proved to be reliable for most machines. And once formatted on the ST, the PC could read and write them (see above). So get that book.&lt;/p&gt;&#xA;&lt;p&gt;Here is also a nice page about &lt;a href=&quot;http://www.retrotechnology.com/herbs_stuff/drive.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the very basic hardware of floppy drives and controllers&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is also another (newer) question about the &lt;a href=&quot;/a/7285&quot;&gt;historic development of floppies vs. disks&lt;/a&gt; worth reading next - not to mention many other great ones carrying the &lt;a href=&quot;/questions/tagged/floppy-disk&quot;&gt;floppy tag&lt;/a&gt; :)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - As &lt;a href=&quot;/users/10500/cmm&quot;&gt;cmm&lt;/a&gt; reminds &lt;a href=&quot;/q/4489#comment21420_4491&quot;&gt;in a comment&lt;/a&gt;, there are also hard-sectored disks. While this sounds like fixed cell, it's not really a property of the track, nor does it change the timing-based nature of recording itself. The benefit of sector markers is a much simpler electronic circuit. Keep in mind, floppies were developed in the late 1960s when adding several hundred gates was a big deal - as was saving a single one by using analogue tricks. Having hardware that reads and decodes headers on the fly, to find the right sector to read or write, would have been ridiculously complex and expensive.  Something maybe appropriate for expensive disks, but for sure not for a device developed as low cost (and low speed) storage.&lt;/p&gt;&#xA;&lt;p&gt;Having sector holes now allowed to have simple, 5 bit wide counter and comparator logic to 'find' a sector for reading or writing. The counter was (prepared to) reset whenever two pulses came in shorter than expected time (the index hole was placed between the holes for the last and first sector, so only one detector was needed) and incremented with every following pulse. Whenever the value was the same as looked for, comparator issued a pulse and the controller read whatever was coming along (and stopped by the next pulse in case of no data), or blurt out its data. When writing, no checks were made; when reading, sector headers were only checked &lt;em&gt;after&lt;/em&gt; having read the whole sector to double check if it's the right track and sector.&lt;/p&gt;&#xA;&lt;p&gt;Long story short, a hard-sectored disk can be read without looking for index and sector markers, as everything is on the track - it only needs a logic fast enough to make the decision to keep a sector when track/sector number is the one it's looking for. Similar writing can be done by using appropriate timers.&lt;/p&gt;&#xA;&lt;p&gt;*2 - There have been English (and other language) translations, just don't ask me, I searched the net, but I couldn't find any hint.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-11T20:58:58.243" LastActivityDate="2020-12-11T20:58:58.243" CommentCount="24" ContentLicense="CC BY-SA 4.0" />
  <row Id="4492" PostTypeId="1" AcceptedAnswerId="4494" CreationDate="2017-08-15T15:11:18.837" Score="21" ViewCount="4842" Body="&lt;p&gt;In the 1985 movie Weird Science, two teenage boys use a computer to create a girlfriend (Kelly Le Brock).  I've seen that movie 20 times or so but I still couldn't make out what computer they use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize the graphics of the computer (along with it's ability to create humans...lol) is not within the actual limits of the computer and that it was probably chosen to be something futuristic looking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it appeared to be at least some type of real computer.  Or loosely based on one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, what kind of computer was it?&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-08-16T12:07:51.117" Title="What computer was used in Weird Science?" Tags="&lt;identify-this-computer&gt;" AnswerCount="2" CommentCount="12" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4493" PostTypeId="2" ParentId="4492" CreationDate="2017-08-15T15:28:50.173" Score="18" Body="&lt;p&gt;It was a &lt;a href=&quot;https://en.wikipedia.org/wiki/Memotech_MTX&quot; rel=&quot;noreferrer&quot;&gt;Memotech MTX 512&lt;/a&gt; with expansion unit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For future movie-related computer questions it's always a good idea to check&#xA;&lt;a href=&quot;http://www.starringthecomputer.com/&quot; rel=&quot;noreferrer&quot;&gt;Starring the Computer&lt;/a&gt; page. In this case, just look &lt;a href=&quot;http://www.starringthecomputer.com/appearance.html?f=7&amp;amp;c=7&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="784" LastEditDate="2017-08-16T12:07:51.117" LastActivityDate="2017-08-16T12:07:51.117" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4494" PostTypeId="2" ParentId="4492" CreationDate="2017-08-15T15:28:56.637" Score="20" Body="&lt;p&gt;The Memotech MTX, if you believe &lt;a href=&quot;https://en.wikipedia.org/wiki/Memotech_MTX#Popular_impact&quot; rel=&quot;noreferrer&quot;&gt;its Wikipedia page&lt;/a&gt;. Your assumption about the graphics is correct: it's a machine that uses much the same hardware as an MSX, including exactly the same video processor, but unwittingly and therefore without being compatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OfcPK.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OfcPK.jpg&quot; alt=&quot;Memotech MTX&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="276" LastEditDate="2017-08-16T08:30:47.350" LastActivityDate="2017-08-16T08:30:47.350" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4495" PostTypeId="1" AcceptedAnswerId="4497" CreationDate="2017-08-15T16:58:44.510" Score="6" ViewCount="447" Body="&lt;p&gt;A &lt;a href=&quot;https://ux.stackexchange.com/q/110932/78342/#comment179418_110932&quot;&gt;comment&lt;/a&gt; on User Experience reminded me that Windows 98 keeps the All Programs submenus open when the mouse isn't on the menus, but if the mouse strays too far from the menus for long enough they all close.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that submenus also remain open if you move the mouse down to the next item and then across to the submenu if you do so quickly enough, but this may depend on a setting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a suspicion that this behaved the same way as the Alt menus in Windows Forms programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does Windows 98 determine when to open and close menus when accessed by the mouse?&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-08-16T21:02:12.410" Title="What algorithm does Windows 98 use to decide whether to show or hide menus?" Tags="&lt;windows-98&gt;&lt;gui&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4496" PostTypeId="2" ParentId="4390" CreationDate="2017-08-15T21:46:40.373" Score="3" Body="&lt;p&gt;For a disk track to be properly formatted, it is necessary that certain bit patterns (synchronization markers) appear at the start of each sector &lt;em&gt;and nowhere else on the track&lt;/em&gt;.  If a disk might initially contain arbitrary data, the only practical way to ensure that those markers don't appear anywhere they shouldn't is to erase the entire track.  While it might be possible to scan the track for those bit patterns, and refrain from erasing it if they're not present, such an approach could be unreliable if some drives are more sensitive than others.  If a disc contains some sync markers which are too weak for some drives to read, but strong enough for others, drive #1 might decide the track contains no sync markers when it writes information to it, but drive #2 might see--and get confused by--synchronization markers that drive #1 didn't see.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be possible to design a disk system whose block map could mark tracks as &quot;not formatted yet&quot;, and which would format each track the first time code attempted to write data to it.  If one doesn't try to write a track until one has enough information to fill it, the time to format and write a track may on some controllers be the same as the time to format the track and write all the sectors as blank.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-08-15T21:46:40.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4497" PostTypeId="2" ParentId="4495" CreationDate="2017-08-16T08:29:48.537" Score="5" Body="&lt;p&gt;I checked on Windows 98, and the behaviour I saw didn’t match your description (or my earlier answer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, whether you hold down the mouse button or not, menus stay open as long as you don’t click elsewhere or hit a key. Sub-menus open either immediately when you click on their parent menu entry, or after a short delay if the mouse pointer hovers over their parent menu entry. They stay open until you move the mouse pointer over another menu entry, although you do get a slight delay to facilitate diagonal movement (possibly over another menu entry, for a brief instant).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The big difference compared with Windows 3 is that the mouse pointer moves the menu selection on its own, without needing mouse clicks. In Windows 3, you could open a sub-menu, and the selected entry would stay on the first (selectable) item until you clicked on another entry, or dragged the mouse with the button depressed; in Windows 98, simply moving the mouse pointer moves the menu selection and opens sub-menus.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-08-16T21:02:12.410" LastActivityDate="2017-08-16T21:02:12.410" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4498" PostTypeId="2" ParentId="4484" CreationDate="2017-08-16T12:10:36.427" Score="5" Body="&lt;p&gt;The &lt;code&gt;.language&lt;/code&gt; file contains the &quot;language driver&quot;, which is basically an Amiga system library (i.e. just like a &lt;code&gt;.library&lt;/code&gt; file) that contains a bunch of localization-related functions that mostly implement the various string conversion, comparison and character class testing functions defined in &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node044E.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;locale.library&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the documentation and the example language drivers found in the &lt;a href=&quot;http://www.amigaos.net/content/81/sdk&quot; rel=&quot;noreferrer&quot;&gt;AmigaOS4 SDK&lt;/a&gt; (under &lt;code&gt;Documentation/Localization&lt;/code&gt; and &lt;code&gt;Examples/Locale&lt;/code&gt;, found inside &lt;code&gt;base.lha&lt;/code&gt; in the SDK archive), it seems that the full list of functions that a language driver may provide is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;code&gt;GetDriverInfo&lt;/code&gt;, &lt;code&gt;ConvToLower&lt;/code&gt;, &lt;code&gt;ConvToUpper&lt;/code&gt;, &lt;code&gt;GetCodeSet&lt;/code&gt;, &lt;code&gt;GetLocaleStr&lt;/code&gt;, &lt;code&gt;IsAlNum&lt;/code&gt;, &lt;code&gt;IsAlpha&lt;/code&gt;, &lt;code&gt;IsCntrl&lt;/code&gt;, &lt;code&gt;IsDigit&lt;/code&gt;, &lt;code&gt;IsGraph&lt;/code&gt;, &lt;code&gt;IsLower&lt;/code&gt;, &lt;code&gt;IsPrint&lt;/code&gt;, &lt;code&gt;IsPunct&lt;/code&gt;, &lt;code&gt;IsSpace&lt;/code&gt;, &lt;code&gt;IsUpper&lt;/code&gt;, &lt;code&gt;IsXDigit&lt;/code&gt;, &lt;code&gt;StrConvert&lt;/code&gt;, &lt;code&gt;StrnCmp&lt;/code&gt;, &lt;code&gt;IsBlank&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not all of these functions need to be actually provided by the language driver.  Instead, the &lt;code&gt;GetDriverInfo&lt;/code&gt; function is supposed to return a bitmap indicating which functions the driver actually implements.  For the functions that aren't implemented by the language driver, the OS instead falls back to the corresponding functions in the charset driver (defined in a &lt;code&gt;.charset&lt;/code&gt; file, which is another similar system library) or to built-in routines in &lt;code&gt;locale.library&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a complete localization, you'll also need a &lt;code&gt;.country&lt;/code&gt; file.  Unlike the language and charset drivers, the &lt;code&gt;.country&lt;/code&gt; file is not a system library, but just a simple IFF data file containing a list of strings related to currency, date/time etc. formatting.  The &lt;code&gt;.country&lt;/code&gt; files are, in fact, very much like the &lt;code&gt;.catalog&lt;/code&gt; files used for application localization, except that they use different IFF form and chunk names. &lt;/p&gt;&#xA;" OwnerUserId="366" LastEditorUserId="366" LastEditDate="2017-08-16T12:29:34.837" LastActivityDate="2017-08-16T12:29:34.837" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4499" PostTypeId="1" AcceptedAnswerId="4571" CreationDate="2017-08-16T12:28:36.727" Score="15" ViewCount="1667" Body="&lt;p&gt;&lt;em&gt;The Art of Computer Programming&lt;/em&gt;, volumes 1–3, was written in the late 1960s, with vol 3 finalized in Sept 1972 after a delay of “almost 3 years” because of rapid development of the subject matter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recall a statement (though I can’t find the actual page) where Knuth says 10! (About 3.6 million) separates the size of a problem that can be solved by brute force from those where such is impractical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now from Moore's Law, doubling every 18 months, I would estimate a modern computer would be faster by a factor of a &lt;em&gt;billion&lt;/em&gt;.  But, that seems to be an overestimate &lt;a href=&quot;http://www.dlugosz.com/zeta/?p=452&quot; rel=&quot;noreferrer&quot;&gt;based on my benchmarks&lt;/a&gt; and surmising that it would have taken Knuth a matter of days to run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now Moore's law applies to equal &lt;em&gt;cost&lt;/em&gt;, so comparing a major industrial machine against a desktop PC brings them closer together. Moore’s Law might not have started yet.  Scale factors might be more complex— e.g. was I wasting power because I could have been manipulating 64-bit quantities and the problem only used 8?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I wonder, just what were the performance characteristics of the kind of machine Knuth was familiar with at Princeton in the mid to late 1960s?&lt;/p&gt;&#xA;" OwnerUserId="585" LastEditorUserId="276" LastEditDate="2017-08-16T12:52:04.970" LastActivityDate="2019-09-15T13:26:24.443" Title="How powerful was Knuth’s computer?" Tags="&lt;hardware&gt;&lt;history&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4500" PostTypeId="1" AcceptedAnswerId="4501" CreationDate="2017-08-16T15:35:00.020" Score="28" ViewCount="10315" Body="&lt;p&gt;I'm building a 486 computer.  I plan on using a 100 MHz 486-DX4 that I have which I believe is about as fast as 486's went.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motherboard I will use (Socket 3) appears to support putting a heatsink and fan over the CPU but I'm not sure if it is needed.  The main PSU is already loud so I'd rather not use a fan/heatsink for the CPU if I don't have to.  Although, since they don't make 486's any more I might want to reconsider.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, is a heatsink/fan required for 486's or is it just recommended?  I don't plan on over-clocking but at 100 MHz the heat might climb quite a bit.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="6659" LastEditDate="2017-08-17T09:41:49.787" LastActivityDate="2019-02-13T16:36:12.420" Title="Should 486s have a heatsink?" Tags="&lt;hardware&gt;&lt;intel&gt;" AnswerCount="9" CommentCount="13" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4501" PostTypeId="2" ParentId="4500" CreationDate="2017-08-16T16:45:43.400" Score="26" Body="&lt;p&gt;It depends on the airflow in your computer. You can run even a 100 MHz 486DX4 without a heatsink or fan, if your PSU’s fan (or another fan) pulls enough air over it; they commonly used heatsinks though (without fans). You can find examples of pretty much all configurations starting with the DX2/66 (or even the DX/50, but that’s pretty rare): no heatsink, heatsink only, heatsink and fan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even some Pentiums can run without a fan — I have a 166 MHz Pentium running fine with only a heatsink. (Early 60 MHz and 66 MHz Pentiums did need a fan though, they ran much hotter.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The airflow requirements vary depending on the specific processor you use. The Intel manuals give some figures:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the 100 MHz &lt;a href=&quot;http://bitsavers.trailing-edge.com/components/intel/80486/241731-002_Intel486_Microprocessors_and_Related_Products_Jan95.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;DX4&lt;/a&gt; can cope with an ambient temperature (inside the case) of 29°C if the airflow over it is at least 200 ft/min, without a heatsink, or 35.5°C with &lt;em&gt;no&lt;/em&gt; forced airflow with a heatsink (see p. 2-353);&lt;/li&gt;&#xA;&lt;li&gt;the 66 MHz &lt;a href=&quot;http://bitsavers.trailing-edge.com/components/intel/80486/Intel486_DX2_Microprocessor_Data_Book_Jul92.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;DX2&lt;/a&gt; can cope with an ambient temperature of 28.3°C if the airflow over it is at least 600 ft/min, without a heatsink, or 40.9°C if the airflow over it is at least 200 ft/min, with a heatsink (see p. 15-3);&lt;/li&gt;&#xA;&lt;li&gt;the 33 MHz &lt;a href=&quot;http://bitsavers.trailing-edge.com/components/intel/80486/240440-002_i486_Microprocessor_Nov89.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;DX&lt;/a&gt; can cope with 27°C if the airflow over it is at least 200 ft/min, without a heatsink, and 31°C with &lt;em&gt;no&lt;/em&gt; airflow with a heatsink (see p. 169, 171 in the PDF).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;DX4 CPUs use 3.3V instead of 5V so they run cooler than you’d expect. There are low-voltage variants of 486 CPUs which would run cooler still.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-02-13T16:36:12.420" LastActivityDate="2019-02-13T16:36:12.420" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="4502" PostTypeId="2" ParentId="4500" CreationDate="2017-08-16T17:54:12.203" Score="17" Body="&lt;p&gt;&lt;strong&gt;You should at least use a heatsink.&lt;/strong&gt; For slower CPUs (like yours) it will work without a fan - if the heatsink is large (large for 1995 standards).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 100 MHz DX2 (50 MHz FSB, multiplier of 2) is a pretty rare beast - as 50 MHz boards are - since neither Intel nor AMD ever sold them (officially). Are you sure you're not using a 486DX4 with a 33 MHz FSB and a multiplier of 3?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fastest 486 officially available was the Am486DX5 with 150 MHz (50MHz x 3) or 160MHz (40 MHz x 4). AMD also sold them as Am5x86, but they were just 486s without any changes except the clock frequency. I've got one with 133 MHz (33x4) still running as a game server.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With appropriate cooling the 160 MHz could also run on 50 MHz FSB boards resulting in a 200 MHz 486.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="2067" LastEditDate="2017-08-18T06:56:52.677" LastActivityDate="2017-08-18T06:56:52.677" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="4503" PostTypeId="2" ParentId="4499" CreationDate="2017-08-16T19:12:49.383" Score="10" Body="&lt;p&gt;In the mid-1960's, an IBM 360/6x mainframe cost a few million (in USD at that time, adjusted for inflation it would be more) and could do on the order of a megaflop, maybe half that.  Today, a Raspberry Pi Zero W cost about $10, and can easily do over a gigaflop, maybe two.  But the price/performance of brute force numerical stuff on a contemporary GPU might be even better (near 100 teraflops for under a $1000).  For some types of computational problems, one can rent multiples of brute-force crunching capability from the &quot;cloud&quot;, and not even incur sunk hardware costs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Added: This wikipedia page suggests that Princeton had an IBM 360/67 in the 1960's: &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360_Model_67&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/IBM_System/360_Model_67&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-08-16T19:58:08.993" LastActivityDate="2017-08-16T19:58:08.993" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4504" PostTypeId="2" ParentId="4500" CreationDate="2017-08-16T20:49:42.443" Score="4" Body="&lt;p&gt;Mine did.  I recall saving it when I scrapped the PC, and later drilling and tapping holes in the copper base to repurpose it.  I recall it was about 2 or three inches square, and had fins about an inch tall.  It was a large but conventional looking heat sink, before the fancy stuff started appearing for CPUs.&lt;/p&gt;&#xA;" OwnerUserId="585" LastActivityDate="2017-08-16T20:49:42.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4505" PostTypeId="2" ParentId="4500" CreationDate="2017-08-16T22:19:44.497" Score="2" Body="&lt;p&gt;Yes you need a heatsink, but no you don't need a dedicated CPU fan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember being flabbergasted at a DX4/100 with what would be called a &quot;northbridge heatsink&quot; with a flat base about 1&quot; square, and fins rising 1&quot; high.  It was coloured blue and made of anodised aluminium.  And it was absolutely massive for the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related - I once broke an intel DX2/66 overdrive chip into three pieces trying to remove the bonded 8mm heatsink.  Sometimes the factory heatsink is epoxy-bonded to the packaging rather than being held on with any clamp.&lt;/p&gt;&#xA;" OwnerUserId="3754" LastEditorUserId="3754" LastEditDate="2017-08-17T20:52:53.203" LastActivityDate="2017-08-17T20:52:53.203" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4506" PostTypeId="2" ParentId="4500" CreationDate="2017-08-17T09:00:59.553" Score="7" Body="&lt;p&gt;Practice with actual 486-era PCs was:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The non-clock doubled, sub-40MHz types (the original 486DX 20/25/33MHz) usually were neither heatsinked nor equipped with a fan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the 50MHz (non clock doubled DX type, do not confuse with the 25MHz FSB DX2/50!) came on the market it was plagued by heat problems, and either fanned or peltier-assisted spot-cooling devices quickly entered both PC production and the catalog of DIY parts stockists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heatsinking single ICs had been a well known practice both with non-PC workstation CPUs and other high performance ICs in professional electronics at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the PC world had familiarized itself with spot coolers (which at least at that time was the engineering term often used to describe &quot;active&quot; heatsinks), they stayed; by the time the DX2 types (even though some of them were less of a thermal nightmare) became popular, fanned heatsinks were a commodity item and often integrated into new systems by default.&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="785" LastEditDate="2017-08-17T10:44:13.790" LastActivityDate="2017-08-17T10:44:13.790" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4507" PostTypeId="2" ParentId="4500" CreationDate="2017-08-17T12:31:20.337" Score="2" Body="&lt;p&gt;Yes, you need a heatsink. Most 486 heatsinks were so small that they latched directly over the CPU die, so many motherboards had no apparent mounts for a heatsink. Back then, CPUs didn't have the thermal throttling we find so convenient today, so running a cpu without heatsink can end up bad. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;486 could be ran without the sink only if airflow was large enough to make up for that. So, without heatsink you need even louder fan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note the 4 tabs that are supposed to grip the substrate. You mount the CPU in the sink before putting it into the socket (could be hard if your socket is not ZIF).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.evercoolusa.com/?p=2038&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.evercoolusa.com/?p=2038&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.pimfg.com/product-detail/COOLER-1000&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pimfg.com/product-detail/COOLER-1000&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW 100MHz DX4 (33x3) was the fastest 486 sold by Intel, but AMD produced 120MHz (40x3). Not that you can't try OCing yours : )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To lower the overall noise, you can (and should) replace the worn-out fan in your PSU or even repurpose early ATX psu.&lt;/p&gt;&#xA;" OwnerUserId="843" LastEditorUserId="3297" LastEditDate="2017-09-04T13:03:23.680" LastActivityDate="2017-09-04T13:03:23.680" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4508" PostTypeId="2" ParentId="4500" CreationDate="2017-08-17T18:49:58.153" Score="1" Body="&lt;p&gt;For me it needs a heatsink and also a little fan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember my first PC was a Pentium 90 (I still have the CPU). It has a little heatsink and a little quite noisy fan. Also, why does the MB have the fan controller? Is for connecting the fan, so... And as I remember well the 486DX2 was quite the maximum Intel was able to put out from the 486 so they are running in quite extreme condition, so they became hot very easy. Also remember that was the time when the power consumption was on the low priority for this CPU (notebooks were very rare).&lt;/p&gt;&#xA;" OwnerUserId="6720" LastEditorDisplayName="user39" LastEditDate="2017-08-17T21:30:41.390" LastActivityDate="2017-08-17T21:30:41.390" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4510" PostTypeId="2" ParentId="2909" CreationDate="2017-08-17T20:30:26.640" Score="7" Body="&lt;p&gt;The fast &quot;zero page&quot; &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502#Addressing&quot; rel=&quot;noreferrer&quot;&gt;addressing mode&lt;/a&gt; of the 6502, allowing to think of the lowest 256 bytes as &quot;registers&quot;, could have contributed to its popularity among programmers, prolonging the demand for 6502-based systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quoting from Wikipedia:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Many instructions are coded differently for zero page and non-zero page addresses:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LDA $00            ; zero page&#xA;LDA $0000          ; non-zero page&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The above two instructions both accomplish the same thing: they load the value of memory location $00 into the .A register (accumulator).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;However, the first instruction is only two bytes long and requires three clock cycles to complete. The second instruction is three bytes in length and requires four clock cycles to execute. Obviously, the difference in execution time could significantly improve performance in repetitive code.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Using single-byte addresses for size-critical code could also somehow mitigate the difference in &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/4481/4025&quot;&gt;code density&lt;/a&gt; compared to Z80.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-08-17T20:30:26.640" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4511" PostTypeId="2" ParentId="4500" CreationDate="2017-08-18T14:10:57.840" Score="1" Body="&lt;p&gt;When I built PCs back in the days, the first CPU to require a heatsink was in fact the DX4-100.&#xA;It would run (without HS) on a normal load and case opened without issues,&#xA;but closed case and some prolonged gaming or CAD would overheat it.&#xA;The first heatsink applied had no paste, only a clip-on, no fan, &#xA;covering the CPU areawise and about 2cm high. &#xA;After that it worked flawlessly.&lt;/p&gt;&#xA;" OwnerUserId="6725" LastActivityDate="2017-08-18T14:10:57.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4512" PostTypeId="1" AcceptedAnswerId="4514" CreationDate="2017-08-18T22:01:57.677" Score="8" ViewCount="689" Body="&lt;p&gt;I remember when playing on the N64 if the game didn't start running when I turned on the N64, I would remove the cartridge, blow into the cartridge where the pins were located, then slam the cartridge back into the N64 and when I turned it back on, the game would run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, would blowing into the pins of the cartridge really affect whether or not the game would run by removing dust from the hardware, or was this purely psychological? Everyone I know who had an N64 did this!&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="-1" LastEditDate="2017-08-19T15:25:54.310" LastActivityDate="2017-08-22T16:27:25.090" Title="Did blowing into an N64 cartridge really affect whether or not the game would run?" Tags="&lt;nintendo-64&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4514" PostTypeId="2" ParentId="4512" CreationDate="2017-08-19T15:37:30.560" Score="10" Body="&lt;p&gt;Not the blowing but most likely the process of repeated inserting has removed the cause - as so often with connectors, especially PCB connectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As @Ross Ridge already mentioned, the Question has been answered in full before at Gaming&#xA;&lt;a href=&quot;https://gaming.stackexchange.com/questions/15044/why-did-you-have-to-blow-into-an-nes-cartridge-to-make-it-work&quot;&gt;Why did you have to blow into an NES cartridge to make it work?&lt;/a&gt;:&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2017-08-19T15:37:30.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4515" PostTypeId="1" AcceptedAnswerId="4516" CreationDate="2017-08-20T13:49:44.627" Score="13" ViewCount="1718" Body="&lt;p&gt;How many transistors are there approximately in the C64 if we consider every chip on it? I think that it is something around 50.000 but I'm not sure.&lt;/p&gt;&#xA;" OwnerDisplayName="user6734" LastEditorUserId="3912" LastEditDate="2019-04-26T11:55:24.130" LastActivityDate="2019-04-26T11:55:24.130" Title="Number of transistors in the C64" Tags="&lt;hardware&gt;&lt;commodore-64&gt;&lt;chip&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="4516" PostTypeId="2" ParentId="4515" CreationDate="2017-08-20T16:41:22.967" Score="15" Body="&lt;p&gt;Logic&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;6510: ~3500&lt;/li&gt;&#xA;&lt;li&gt;VIC II: ? (est. 5000)&lt;/li&gt;&#xA;&lt;li&gt;2x CIA: ? (est. 2000)&lt;/li&gt;&#xA;&lt;li&gt;PLA: ? (est. 1000)&lt;/li&gt;&#xA;&lt;li&gt;SID: ? (est. 2000)&lt;/li&gt;&#xA;&lt;li&gt;commodity chips: ~500?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Memory&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;64K DRAM: ~526000 (one transistor per bit, one transistor per row per bus width)&lt;/li&gt;&#xA;&lt;li&gt;512 B SRAM: ~25000 (six transistors per bit&lt;/li&gt;&#xA;&lt;li&gt;20K ROM: ~160000 (one transistor or diode per bit)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;del&gt;The bulk number goes to the RAM, 50,000 isn't nearly enough though. I've tried to (very roughly) estimate the unknown ones - I'm definitely no expert - leading to some 100,000.&lt;/del&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit: very embarrassing - I counted bytes as bits...So, we've got around 14,000 for logic and some 710,000 for memory.&lt;/p&gt;&#xA;" OwnerUserId="5200" LastEditorUserId="5200" LastEditDate="2017-08-20T19:54:27.283" LastActivityDate="2017-08-20T19:54:27.283" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4517" PostTypeId="1" CreationDate="2017-08-20T22:38:58.270" Score="1" ViewCount="107" Body="&lt;p&gt;&lt;a href=&quot;https://imgur.com/a/mGP8u&quot; rel=&quot;nofollow noreferrer&quot;&gt;Photo album, sorry for the hassle&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quick question: Ceramic disk capacitor has leaked? Or a dodgy soldering technique?&#xA;This is a quite old calculator, it's an arbitrary model nowhere to be found.&#xA;Any information as to what could've happened is appreciated.&#xA;Thanks beforehand!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;edit:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Added more images of what looks like a burnt case and the bottom of the number input panel&lt;/p&gt;&#xA;" OwnerUserId="6735" LastEditorUserId="6735" LastEditDate="2017-08-20T22:46:15.907" LastActivityDate="2017-08-24T20:20:44.067" Title="PCB Black Spot: Leakage?" Tags="&lt;hardware&gt;&lt;restoration&gt;&lt;repair&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4518" PostTypeId="1" CreationDate="2017-08-21T00:29:00.367" Score="1" ViewCount="165" Body="&lt;p&gt;How much did a state-of-the-art semiconductor foundry cost in or around 1980?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally I'd like to get data on how it changed over time from the seventies to present day, but even a single data point from around that time would be good to have.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-08-21T00:29:00.367" Title="Historical cost of semiconductor fab" Tags="&lt;history&gt;&lt;chip&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2017-08-21T10:17:00.230" ContentLicense="CC BY-SA 3.0" />
  <row Id="4519" PostTypeId="1" AcceptedAnswerId="4520" CreationDate="2017-08-20T00:40:07.427" Score="15" ViewCount="1088" Body="&lt;p&gt;I seem to remember using a source code control system back in the early- to mid-1990s called git. Am I nuts?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used to work at IBM way back then. We didn't use it for a big project, but I distinctly remember using it. Is that possible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, &lt;a href=&quot;https://en.wikipedia.org/wiki/Git&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt; says Linus Torvalds wrote it in 2005, citing &lt;a href=&quot;https://git-scm.com/book/en/v2/Getting-Started-A-Short-History-of-Git&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;A Short History of Git&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Git was created by Linus Torvalds in 2005 for development of the Linux kernel, with other kernel developers contributing to its initial development.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Was there any earlier version of source-control software with the same name, or that may have functioned similarly?&lt;/p&gt;&#xA;" OwnerDisplayName="Thomas Jay Rush" LastEditorUserId="2037" LastEditDate="2017-08-21T09:16:57.557" LastActivityDate="2021-01-15T20:06:03.673" Title="Was there a 'git' in the 1990s?" Tags="&lt;software&gt;&lt;software-development&gt;&lt;source-control&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4520" PostTypeId="2" ParentId="4519" CreationDate="2017-08-20T00:52:50.413" Score="22" Body="&lt;p&gt;You are nuts, unfortunately.  The thing that's now called GIT didn't exist at all until Linus invented it after experience with &lt;a href=&quot;https://en.wikipedia.org/wiki/BitKeeper&quot; rel=&quot;noreferrer&quot;&gt;BitKeeper&lt;/a&gt;, and thinking about distributed version control.  Linux didn't start using BitKeeper for the official mainline source tree until 2002, but some developers must have been using it before that.  BitKeeper itself didn't exist until the late 90s (e.g. early-access beta in May 1999).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the major motivations for its creation was &lt;a href=&quot;https://en.wikipedia.org/wiki/BitKeeper#Pricing_change&quot; rel=&quot;noreferrer&quot;&gt;Bitkeeper's pricing change&lt;/a&gt;, making it inconvenient to developers to work on Linux if they didn't buy BitKeeper.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;There was another project that used to be abbreviated as &lt;code&gt;git&lt;/code&gt; (e.g. in Debian package names), but the popularity of the GIT VCS led to the &lt;a href=&quot;https://www.gnu.org/software/gnuit/&quot; rel=&quot;noreferrer&quot;&gt;GNU Interactive Tools&lt;/a&gt; being renamed &lt;code&gt;gnuit&lt;/code&gt;.  (And I only know that because I remember the Debian package-name conflict that led to GIT being pacakged as &lt;code&gt;git-vcs&lt;/code&gt; for a while.)&lt;/p&gt;&#xA;" OwnerUserId="3296" OwnerDisplayName="Peter Cordes" LastActivityDate="2017-08-20T00:52:50.413" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4521" PostTypeId="2" ParentId="3341" CreationDate="2017-08-21T04:51:20.520" Score="0" Body="&lt;p&gt;Also pay attention to the CMOS battery. I can't remember what Mac I had issues with but I remember it was pre-1993, a Quadra, beige. It had been unplugged for several years. If I remember right the battery looked like a small purple barrel, possibly with green markings. I thought the motherboard or PSU was shot because it wouldn't power on, but I left it plugged in for a few hours and came back and pressed the power button and it booted just fine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that said, the machine was kept in temperate storage and all capacitors were perfectly fine. &lt;/p&gt;&#xA;" OwnerUserId="4123" LastActivityDate="2017-08-21T04:51:20.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4522" PostTypeId="2" ParentId="4413" CreationDate="2017-08-21T05:03:54.413" Score="6" Body="&lt;p&gt;I have been able to find factory sealed copies of Windows 95, 98, 3.1, DOS and NT at various thrift shops (example: GoodWill) in my area, with product key inside. There are also tons of these on eBay. I think it's reasonable to assume that they are genuine since I throw them out at work all the time and there's low demand, thus low chance of fakes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for Windows 7, go to MSDN. &lt;/p&gt;&#xA;" OwnerUserId="4123" LastActivityDate="2017-08-21T05:03:54.413" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4523" PostTypeId="2" ParentId="4512" CreationDate="2017-08-21T07:07:04.303" Score="5" Body="&lt;p&gt;No, it didn't. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What helped was to remove the cartridge, and to re-enter it again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is the same psychological effect that lets us rub coins before we insert them a second time. When the second try is a success, we memorize &lt;code&gt;ok, rubbing the coin helps&lt;/code&gt;. If not, we do &lt;em&gt;not&lt;/em&gt; think &lt;code&gt;ok, rubbing doesn't help&lt;/code&gt;, but rather something like &lt;code&gt;I didn't rub well enough&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="5139" LastEditorUserId="5139" LastEditDate="2017-08-21T11:29:56.303" LastActivityDate="2017-08-21T11:29:56.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4524" PostTypeId="1" AcceptedAnswerId="4637" CreationDate="2017-08-21T12:04:49.827" Score="9" ViewCount="1217" Body="&lt;p&gt;I'm looking for a game. Unfortunately there're only few things I remember:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You had a robot. There was no way to steer it manually, so to solve a room, every step to do had to be programmed in advance&lt;/li&gt;&#xA;&lt;li&gt;It was isometric 3D (similar to e.g. 'batman', looks like &lt;a href=&quot;http://www.gamesetwatch.com/2009/06/way_cute_batman_remake.php&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;It was for a 8-bit computer, most probably C64 or CPC&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I know this is very little info; perhaps someone can recall it.&lt;/p&gt;&#xA;" OwnerUserId="5139" LastEditorUserId="5139" LastEditDate="2017-08-22T07:17:04.860" LastActivityDate="2021-04-08T13:18:01.997" Title="A game where you program a robot to fulfill missions" Tags="&lt;commodore-64&gt;&lt;identify-this-game&gt;&lt;cpc&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4525" PostTypeId="2" ParentId="4524" CreationDate="2017-08-21T12:17:56.193" Score="5" Body="&lt;p&gt;Was it &lt;a href=&quot;http://www.slate.com/articles/technology/bitwise/2014/01/robot_odyssey_the_hardest_computer_game_of_all_time.html&quot; rel=&quot;noreferrer&quot;&gt;Robot Odyssey&lt;/a&gt;? This fulfills most of the criteria in your question except that Robot Odyssey was not isometric - or at least I have never seen an isometric version. It required you to program a robot in advance to solve room challenges and it was an 8-bit game in the 8-bit era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MFU3l1Vh7cQ&quot; rel=&quot;noreferrer&quot;&gt;Here's&lt;/a&gt; a video of the game on the Apple //.&lt;/p&gt;&#xA;" OwnerUserId="3423" LastActivityDate="2017-08-21T12:17:56.193" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4526" PostTypeId="2" ParentId="4524" CreationDate="2017-08-21T19:52:39.753" Score="1" Body="&lt;p&gt;I would guess you mean &lt;b&gt;Paradroid&lt;/b&gt;. This game was originally written for the Commodore C64 and published through  &lt;em&gt;Hewson Consultants&lt;/em&gt;. Here's a &lt;a href=&quot;https://www.youtube.com/watch?v=OEam-zQgWcU&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game was (at least on the C64) not isometric, but rather had a somewhat 3D-enhanced birds-eye view and had you program robots to regain control over an alien-infected spaceship.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game was ported to a number of other micros, like the Amiga and the Atari ST.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Paradroid&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; has an article on the game, and the game itself was so popular that there even is a relatively modern, free 3D enhanced version today entirely done by fans: &lt;a href=&quot;http://www.freedroid.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Freedroid&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-08-21T20:11:14.390" LastActivityDate="2017-08-21T20:11:14.390" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4527" PostTypeId="1" AcceptedAnswerId="4580" CreationDate="2017-08-21T20:56:33.927" Score="8" ViewCount="1967" Body="&lt;p&gt;I've been searching for a game that I used to play a ton when I was a kid on the Windows 95/98, but I can't find it for the life of me!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I remember, you were a deep-sea diver that collected fish to put into a fish tank. I vaguely remember solving math problems to get fish for your fish tank that was on your submarine (the math part may or may not be true because during this era I had a lot of &quot;Jump Start&quot; educational games and I may be getting this diver game confused with those)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the diver had a square helmet and big black eyes, and one feature of the game is that you could look out the periscope to see what was above the water. I can't remember any other specifics right now. Does anyone know the title of this game?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Another's description of the game I am looking for:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This computer game was an ocean game where you look at fish underwater in a submarine I think. You were also able to have an aquarium where you can decorate the tank with statues and decorations you won. The front of the game disc had this diver with a scuba mask and flippers but it didn't look human. I cannot find it, I have checked mobygames, abandonware, wikipedia, etc. Some more information about my play of it was that it was also on windows, probably released between 1990 and 2002. The menu was a table with all your instruments within the submarine, you would play minigames or something to earn statues and decorations for your aquarium. (&lt;a href=&quot;http://www.escapistmagazine.com/forums/read/9.166417-Old-Games-you-remember-playing-but-cant-remember-the-name-of?page=219&quot; rel=&quot;noreferrer&quot;&gt;http://www.escapistmagazine.com/forums/read/9.166417-Old-Games-you-remember-playing-but-cant-remember-the-name-of?page=219&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="621" LastEditDate="2017-08-23T21:52:13.293" LastActivityDate="2020-08-29T04:51:16.360" Title="Submarine diver game where you had to collect fish and other things for your aquarium" Tags="&lt;windows-98&gt;&lt;windows-95&gt;&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4528" PostTypeId="1" CreationDate="2017-08-22T09:42:13.923" Score="13" ViewCount="1077" Body="&lt;p&gt;The apple ][ history site &lt;a href=&quot;https://apple2history.org/history/ah17/#05&quot; rel=&quot;noreferrer&quot;&gt;https://apple2history.org/history/ah17/#05&lt;/a&gt; has a section on assemblers with these interesting snippets:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;TED/ASM: Developed at Apple and smuggled out the doors around May 1978, this assembler had memory conflicts with DOS, so they couldn’t be used together. The text editor module was written by Randy Wigginton, and the assembler was written by Gary Shannon. In the early days, it was the only assembler they had available that would run on an Apple II.[21]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;RANDY’S WEEKEND ASSEMBLER: Also written by Randy Wigginton, this one slipped out of Apple in September 1978. The text editor was written mostly in SWEET-16 (Wozniak’s 16-bit emulator in the Integer BASIC ROM), and was therefore slow. Unfortunately, it had its own set of bugs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now I'm pretty sure that TED/ASM morphed in the EDASM combo in the Applesoft toolkit (which also was the ProDOS assembler) which I used in the early eighties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been trying to find both of these early assemblers online (I'm interested in how they worked without a floppy disk) and I can't find them. Has anyone found either of them anywhere? Ideally I'd like to get hold of the source code to them but I suspect that's completely unavailable and I'll need to reverse engineer EDASM instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This also begs the question how Big Mac &amp;amp; Merlin didn't get sued for copyright since some of the code according to the Apple ][ history pages was disassembled TED/ASM. Anyone know of the history around this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edit&lt;/em&gt; Done some more research and found a copy of the call-A.P.P.L.E. issue referenced by apple2history.org above.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;TED/ASM The first Apple assembler I encountered was one developed by Apple and smuggled out the doors around May 1978. The text editor part was written by Randy Wiggington and the assembler was written by Gary Shannon. The text editor is fairly good; it is line-oriented, but it manages the line numbers for you. The assembler appeared to be a decent design (long labels, sweet 16 instructions) but was riddled with a variety of bugs. One main problem is that the text editor had memory conflicts with DOS so they couldn't be used together. But I was still quite pleased to obtain it as it was, far better than anything else around at the time (which wasn't hard; nothing else was around at the time)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;..snip..&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Randy's Weekend Assembler Randy's Weekend Assembler (it assembles on weekdays, too!) found its way out of Apple around September 1978. It features a new version of Randy's text editor that is written mostly in Sweet 16 and includes far better intraline editing than the earlier version. Its search operations are kind of slow, though. The assembler, alas, had different pseudo-ops than Shannon's and its own set of bugs. I wrote my own front end to allow it to be used with DOS and thought I had a usable assembler, though a far cry from an ideal one. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Up to this point (Fall 1978) the only assemblers available were the Microproducts 4-character label assembler and whatever managed to leak out of Apple. Source code for Gary Shannon's original Apple assembler appeared on the hobbyist grapevine, spawning many different versions with many of the bugs fixed. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So the source code was available and might still be somewhere.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2017-08-22T22:44:36.720" LastActivityDate="2019-08-13T17:26:55.417" Title="Early Apple assemblers, getting hold of them" Tags="&lt;history&gt;&lt;apple-ii&gt;&lt;cassette-tape&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4529" PostTypeId="1" AcceptedAnswerId="4550" CreationDate="2017-08-22T11:52:12.863" Score="10" ViewCount="1675" Body="&lt;p&gt;Were there emulators running &lt;em&gt;on&lt;/em&gt; 8-bit computers (preferably &quot;mainstream&quot; personal ones), available to general public (as opposed to in-house developers only)? I am mostly after emulators running fully in software (e.g. CPU emulation), not hardware add-on cards, and mostly after emulators running on well-know machines. It is also better if the emulators were written/used in the 8-bit era, but recent emulators are fine too, if they run on retro machines - thus an emulator running on Atmel AVR would not quite fit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, running on 8-bit machines poses quite a significant set of challenges. First, emulated RAM must fit into the host RAM, and the emulated speed will be an order of magnitude below the host.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know of &lt;a href=&quot;https://en.wikipedia.org/wiki/CHIP-8&quot; rel=&quot;noreferrer&quot;&gt;CHIP-8&lt;/a&gt; and its implementation on several 8-bit computers, but that's more of a virtual machine than an emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also know of these emulators (as you can see, I am a bit biased):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=0015646&quot; rel=&quot;noreferrer&quot;&gt;ZX-81 emulator&lt;/a&gt; by Johan Koelman, running on ZX Spectrum from 1997, which is exactly what fits the question (though it came a bit late). &lt;a href=&quot;http://www.sinclairzxworld.com/viewtopic.php?t=2141#p21720&quot; rel=&quot;noreferrer&quot;&gt;Author says&lt;/a&gt; it managed to reach about 33% speed, mostly by translating ROM routines.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.worldofsam.org/node/qtzezzntxhkmc.html?from=250&quot; rel=&quot;noreferrer&quot;&gt;SAM2_ZX81&lt;/a&gt; &#xA;(by the same author), emulating ZX81 on Sam Coupé (the CPU runs natively)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://atariage.com/forums/topic/102394-unusable-zx-spectrum-emulator-use/&quot; rel=&quot;noreferrer&quot;&gt;Unusable ZX Spectrum emulator&lt;/a&gt; emulating Spectrum on 8-bit Atari, from 2007 - i.e. recent, author claims ~10% speed&lt;/li&gt;&#xA;&lt;li&gt;and there is of course &lt;a href=&quot;https://www.youtube.com/watch?v=AyVrai7cYLI&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; emulation of Windows 3.1 running on ZX Spectrum&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="476" LastActivityDate="2018-11-05T16:39:28.097" Title="Emulators running on 8-bit personal computers" Tags="&lt;emulation&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="8" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4530" PostTypeId="1" AcceptedAnswerId="4531" CreationDate="2017-08-22T12:09:53.000" Score="2" ViewCount="1132" Body="&lt;p&gt;I remember when I was very young (mid-to-late 90s) playing a probably educational DOS game that was like a whole bunch of minigames. At least one of the minigames (perhaps all of them) was teddy-bear-themed. There was one involving maths, one involving a train, one involving books in a shelf (I think I remember the background graphics showing a few books on the floor which always annoyed me), and maybe there was a paint-like program I think as well. Some of this stuff might be me conflating multiple different games but I think at least most of it was from this game. I'm in the UK if that matters.&lt;/p&gt;&#xA;" OwnerUserId="1931" LastEditorUserId="4921" LastEditDate="2020-01-16T06:35:09.580" LastActivityDate="2020-01-16T06:35:09.580" Title="Educational DOS game involving teddy bears" Tags="&lt;ms-dos&gt;&lt;identify-this-game&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4531" PostTypeId="2" ParentId="4530" CreationDate="2017-08-22T14:30:05.170" Score="6" Body="&lt;p&gt;Possibly the Fun School series? &lt;a href=&quot;https://en.wikipedia.org/wiki/Fun_School&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Fun_School&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They were popular when I was at school in the UK, early 90s. We played them on Amiga 500s but there were also DOS ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fun School 4 in particular has Teddy Bear themed levels&lt;/p&gt;&#xA;" OwnerUserId="6738" LastActivityDate="2017-08-22T14:30:05.170" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4532" PostTypeId="2" ParentId="2517" CreationDate="2017-08-22T15:15:53.703" Score="13" Body="&lt;p&gt;I am one of the two authors of Killer DOS.  If you know the final lock screen when your disk was corrupted, we took credit as &quot;The Master&quot; and &quot;The Wizard&quot;.  I was the DOS Master.  We were high school students at the time in a Chicago suburb and wrote the virus in a single weekend.  Killer DOS was done as a challenge by a friend at another high school to one-up the previous &quot;catalog&quot; virus that started in a different suburb/school system closer in to Chicago.  That virus just ran the &quot;init&quot; routine if you typed catalog taking 3 minutes to cause full damage with no replication.  For Killer DOS, we made it replicate itself on any access to the VTOC (volume table of contents), an internal call used for any access to any files or a catalog.  It set up a count down timer of 50 to give it time to replicate to others (of course many things decremented the counter, usually took 1-3 days).  Once down to 0, we manually controlled the drive head, seeked track 0, and dragged the write head across the entire disk in less than 2.5 seconds.  The disk could be reinitialized, but all data would be lost.  &lt;/p&gt;&#xA;" OwnerUserId="6739" LastEditorUserId="6739" LastEditDate="2017-08-22T15:47:43.503" LastActivityDate="2017-08-22T15:47:43.503" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4533" PostTypeId="2" ParentId="4529" CreationDate="2017-08-22T15:43:46.667" Score="3" Body="&lt;p&gt;The CHIP-8 programming language allowed developers to create games that could be ran on 8-bit computers within a virtual machine, which simulates the complete hardware in software, a.k.a an emulator. Although these were 8-bit games running on 8-bit computers, you could port the same game to another 8-bit machine if it had a CHIP-8 virtual machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, 8-bit calculators (such as the TI-84 which is still used today) have the capability to run Game Boy games, NES, and other early systems including DOS on the 8-bit calculator itself which has a Zilog Z80 processor via emulation.&lt;/p&gt;&#xA;" OwnerUserId="1880" LastActivityDate="2017-08-22T15:43:46.667" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4534" PostTypeId="2" ParentId="872" CreationDate="2017-08-22T16:01:47.053" Score="-1" Body="&lt;p&gt;Parallels and VirtualBox allow you to do whole system emulation as well, and running Mac on Mac seems a normal thing to do with it. These are much quicker than QEMU or PearPC.&lt;/p&gt;&#xA;" OwnerUserId="4973" LastActivityDate="2017-08-22T16:01:47.053" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4535" PostTypeId="2" ParentId="4512" CreationDate="2017-08-22T16:27:25.090" Score="0" Body="&lt;p&gt;I disagree entirely with the answers. I've spent a lot of time experimenting with this sort of thing. I've performed experiments on games where I've had multiple insertions and removals to no effect. However, after blowing on it it pretty much always works instantly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've experienced similar things with card-based media up to this day; Nintendo DS cards and SD cards I've had the same experience with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen it hypothesised that blowing on the contacts aids to the conductivity, and it certainly sounds plausible. Of course in the long term it's likely to promote corrosion and other nasty things, so it probably isn't very good for the contacts &lt;em&gt;in the long run&lt;/em&gt;. In the short term though, it really does work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I encourage anyone with known-problem games to try it out as an experiment before downvoting.&lt;/p&gt;&#xA;" OwnerUserId="1931" LastActivityDate="2017-08-22T16:27:25.090" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4536" PostTypeId="1" AcceptedAnswerId="4562" CreationDate="2017-08-22T16:49:36.253" Score="9" ViewCount="2527" Body="&lt;p&gt;I see a very large fan-base and hear a lot (especially here on retrocomputing) about how great the Commodore 64 was. Growing up in the Windows 95/98 era, I seemed to have missed a great era for computing and was wondering what might be the best way to experiment with the Commodore 64. I honestly don't see myself finding a physical one (unless that's what needs be), so how would I use an emulator (such as VICE) and start programming for the Commodore 64?&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="11916" LastEditDate="2019-10-19T08:11:04.970" LastActivityDate="2019-10-19T08:11:04.970" Title="How to develop software for the Commodore 64 with VICE?" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;software-development&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4537" PostTypeId="1" AcceptedAnswerId="4540" CreationDate="2017-08-22T17:27:58.983" Score="73" ViewCount="17446" Body="&lt;p&gt;So, today all major OS support multitasking and concurrency in languages like for instance threading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga seems to be the first home computer which has advanced concepts in this area. But had any 8-bit home-computer rudimentary capabilities already before the Amiga ? Be it in the ROM or emulated by any software (additional OS or an available programming language) does not matter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the Commodore 64 for instance there were hardware interrupts (e.g. for I/O and timer). But I'm thinking more about higher-level approaches here.&lt;/p&gt;&#xA;" OwnerUserId="4176" LastEditorUserId="4854" LastEditDate="2017-08-22T20:54:19.080" LastActivityDate="2020-01-20T20:38:52.943" Title="Did any 8-bit computer system / OS have concepts for concurrency and multitasking like we know from today?" Tags="&lt;multitasking&gt;" AnswerCount="14" CommentCount="25" FavoriteCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="4539" PostTypeId="2" ParentId="4537" CreationDate="2017-08-22T18:40:24.613" Score="11" Body="&lt;p&gt;The Sinclair QL was most probably the first truly multi-tasking home computer. It's QDOS is a fully-featured preemptive multi-tasking OS. Whether it matches your definition of an 8-bit computer with its 68008 is , however, debatable (and was debated a lot when it entered the market)&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2017-08-22T18:40:24.613" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="4540" PostTypeId="2" ParentId="4537" CreationDate="2017-08-22T19:07:51.630" Score="76" Body="&lt;h2&gt;In fact, quite a lot did.&lt;/h2&gt;&#xA;&lt;p&gt;Ignoring the 'home computer' restriction there is of course &lt;a href=&quot;https://en.wikipedia.org/wiki/MP/M&quot; rel=&quot;noreferrer&quot;&gt;MP/M&lt;/a&gt; - the multi-user and multi-program environment for CP/M. MP/M was published in 1979 by Digital Research for 8080/85/Z80 machines. Terminals, users and programs were handled separately, thus one user could have several programs run in parallel and switch between them (called &amp;quot;detach&amp;quot; and &amp;quot;attach&amp;quot;) on a single terminal, or change terminal and attach from there. Also, several users could (in sequence) share one terminal. Programs could run attached (in foreground on a terminal) or detached (in background). In addition, there was a scheduler process starting (and stopping) programs at specific times and conditions (like cron). Last but not least there was a separate spool process, so programs were not blocked while printing.&lt;/p&gt;&#xA;&lt;p&gt;MP/M also included functions for inter-process communication (queues) and process synchronization. Soon a network level (CP/NET and CP/NOS) was added to connect multiple MP/M machines to a kind of cluster (very rough term, but it was more than a simple client/server structure and I don't know how to explain its workings in less than a few pages :))&lt;/p&gt;&#xA;&lt;p&gt;All features could be controlled using the MP/M extension of the CP/M API.&lt;/p&gt;&#xA;&lt;p&gt;In theory, MP/M could have been used on every computer capable of running CP/M, especially where CP/M 3.0 memory management was available (which in itself was a backport from MP/M II to CP/M), but other than some Tandy Model II and 4, I don't remember any home computer with &lt;em&gt;explicit&lt;/em&gt; MP/M support.&lt;/p&gt;&#xA;&lt;p&gt;Another very common multiuser/multiprocess system was &lt;a href=&quot;https://en.wikipedia.org/wiki/OS-9&quot; rel=&quot;noreferrer&quot;&gt;OS/9&lt;/a&gt; created for Motorola's 6809 CPU. The 6809 offered great support for position independent code and data, as well as OS support and module linking in Hardware. Thus it was easy to load not only several programs at once, but also to support re-entrant code, thus resulting in a great reusability for libraries (shared code).&lt;/p&gt;&#xA;&lt;p&gt;Another multiprocess OS for the 6809 was UniFlex. Flex was originally written as a single-user single-program OS for the &lt;a href=&quot;https://en.wikipedia.org/wiki/SWTPC&quot; rel=&quot;noreferrer&quot;&gt;SWTPC 6800&lt;/a&gt; machine. Later iterations included a port for the 6809 and integration of Unixoide functionality, then called UniFlex.&lt;/p&gt;&#xA;&lt;p&gt;For home computers there have been dozens of variations of multitasking/multiprocessing environments. From 1984s &lt;a href=&quot;https://cpcrulez.fr/UtilsAdvert/Star_Division-Mouse_Operating_System-Star-Writer-Datei-Star-Composer-Star__GERMAN.jpg&quot; rel=&quot;noreferrer&quot;&gt;M.O.S&lt;/a&gt; for Schneider/Amstrad computers, distributed by StarDivision to 1986s &lt;a href=&quot;https://en.wikipedia.org/wiki/GEOS_(8-bit_operating_system)&quot; rel=&quot;noreferrer&quot;&gt;GEOS&lt;/a&gt; for the C64, a seemingly endless plethora of OS and OS-like environments have been created. I might need a book to list and qualify them all.&lt;/p&gt;&#xA;&lt;p&gt;The most remarkable piece might have been the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sinclair_QL&quot; rel=&quot;noreferrer&quot;&gt;Sinclair QL&lt;/a&gt; from 1984. With a 68008 CPU, it might be seen somewhere at the edge, but I'd still consider it an 8-bit machine. The QL included a pre-emptive multi-tasking OS in ROM called &lt;a href=&quot;https://en.wikipedia.org/wiki/Sinclair_QDOS&quot; rel=&quot;noreferrer&quot;&gt;QDOS&lt;/a&gt;. The built-in &lt;a href=&quot;https://en.wikipedia.org/wiki/SuperBASIC&quot; rel=&quot;noreferrer&quot;&gt;SuperBASIC&lt;/a&gt; offered the full QDOS interface for process creation and control to any BASIC program, thus allowing concurrent processes and threads. It is said that Linus Torvalds took much inspiration for Linux from QDOS, as he owned a QL before switching to a PC.&lt;/p&gt;&#xA;&lt;p&gt;(Oh, just to brag about: ca 1979/80 I wrote a small multi-process kernel for the Apple II, able to run up to 8 tasks, but I guess that's way below the threshold the OP asked for :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-20T17:39:47.990" CommentCount="28" ContentLicense="CC BY-SA 4.0" />
  <row Id="4541" PostTypeId="2" ParentId="4537" CreationDate="2017-08-22T20:04:40.863" Score="65" Body="&lt;p&gt;Back in the mid 70s I wrote, and in 1982 I &lt;em&gt;stopped&lt;/em&gt; shipping an 8 bit OS (&quot;SDOS&quot;) for Motorola 6800/6801/6809. Those OSes came in several flavors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SDOS/RT: Real Time multithreaded (2Kb ROM + whatever small bit of RAM you needed).  It was was always included as a part of the others in this list&lt;/li&gt;&#xA;&lt;li&gt;(plain) SDOS: Single user Disk Operating System (64K memory max)&lt;/li&gt;&#xA;&lt;li&gt;SDOS/MT: Multiuser Timesharing (15 users in 1Mb of RAM using 65Kb banks of memory, one per user)&lt;/li&gt;&#xA;&lt;li&gt;SDNET: Distributed OS (Single or Multiuser system with access to remote disks)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;One of the distributed OS versions managed 256x512 bit mapped graphics on the most trivial hardware you can imagine.  For the hell of it, &lt;a href=&quot;https://chessprogramming.wikispaces.com/SD+Chess&quot; rel=&quot;noreferrer&quot;&gt;I wrote a Chess Program&lt;/a&gt; in the compiled-BASIC I implemented as our application programming language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote a variety of RTOSes for other 8/16 bit computers in the 70s (including Z80 and 68000), but there were definitely others before me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I was at TRW Advanced Product Labs in 1974, John Liberty implemented a dual processor 6800 (each CPU used one half the 1Mhz symmetric bus clock to do its memory access); one CPU did general purpose work, the other often did real time single bit I/O streams to things like read/write magnetic tape heads. A fellow named Dick Moran wrote the multitasking, real multiprocessor &quot;BKOS&quot; (Basic Kernal OS) that handled both CPUs using atomic locks and the whole bit. These CPU boards went on to become the minimalist hardware core of May Company POS terminals. (My job was to use this OS to write the real time mag tape drivers and the print head drivers for a 7 pin vertical printer that swept across the paper roll to produce printed text for sales receipts. Even with holly borders at Christmas :).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC, the Intel 8080 came out before the 6800. It had a truly horrible scheme requiring hardware assist to take an interrupt and most of the CPU boards didnt bother with this.  Most couldn't take an interrupt to save their lives, so it didn't make much sense to build an RTOS for those... but ... some did. I'm sure some soul wrote a multitasking OS for the 8080 for conventional embedded use. I remember talking to a Brunswick (&quot;we don't just do bowling&quot;) cruise missile engineer who had done this onboard the missile. Late 70s, I did what I thought was a pretty nice multitasking OS for the Z80 using the SDOS/RT design but by that point I was probably just one of a crowd of guys who had done that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good part of the reason I chose to build the SDOS systems on the Motorola family chips is because they had built-in interrupt support that the 8080 lacked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the slick things I did for multitasking on these small machines was effectively expand the register set.  These 8 bit machines had only a few registers; talk about register pressure!  What I did was define a fixed set of addresses (on the 6800, 8 bytes down in page zero where they were easy to access) called the &quot;context&quot; and made them part of the CPU state that the OS thread scheduler switched.  This means your &lt;em&gt;thread&lt;/em&gt; could use the registers, and the context, safely, giving it a little a little scratchpad it could work in.  That made the code actually smaller than trying save things in the stack, way safer than having global variables all over the place, and remarkably it made the programs &lt;em&gt;faster&lt;/em&gt;.  [On Windows and Linux, this is called &quot;Thread local storage&quot;, but its stored in a place you have to access with long complicated index operations, blech.]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programming 8 bit machines from the bare metal up was fun.&lt;/p&gt;&#xA;" OwnerUserId="6744" LastEditorUserId="6744" LastEditDate="2018-08-15T21:31:50.000" LastActivityDate="2018-08-15T21:31:50.000" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="4542" PostTypeId="1" AcceptedAnswerId="4546" CreationDate="2017-08-22T20:30:17.120" Score="8" ViewCount="554" Body="&lt;p&gt;In order to write emulators for older systems, one has to know the &quot;inner workings&quot; of the original hardware and understand what makes it &quot;tick&quot;. I've noticed that with some systems, proprietary documentation can be found online (leaked), but if one does not have access to this official documentation, how can one figure out how the hardware works and be able to transfer the hardware logic to software logic?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that one can simply dump their system BIOS or ROM, but what about CPU, sound, or video cards?&lt;/p&gt;&#xA;" OwnerUserId="1880" LastActivityDate="2017-09-08T16:46:40.670" Title="How to obtain CPU and other hardware specs for emulator development" Tags="&lt;emulation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4543" PostTypeId="2" ParentId="4537" CreationDate="2017-08-22T20:36:13.513" Score="24" Body="&lt;p&gt;Since it ran on the Tandy Color Computer and similar Dragon computers in the UK, I guess it's fair to throw &lt;a href=&quot;https://en.wikipedia.org/wiki/OS-9&quot; rel=&quot;noreferrer&quot;&gt;OS-9&lt;/a&gt; into the mix. OS-9 was originally written for 6809 CPUs (hence the name). The linked Wikipedia article begins by calling it a &quot;&lt;strong&gt;family of real-time, process-based, multitasking, multi-user operating systems&lt;/strong&gt;&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember before it was available for home systems, a commercial development license cost many thousands of dollars per year. It certainly wasn't cheap, and I remember the up-front costs made it a non-starter environment at the company where I worked in the early to mid-80s. I'm pretty sure I would have loved it, though.  Everything I heard was pretty sweet -- except the cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was later ported to other Motorola chips in the 68000 family.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Trivia  - feel free to skip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1999, OS-9's owner sued Apple for trademark infringement about Apple's own operating system, &quot;OS 9&quot; (no dash). The OS-9 trademark had existed for 19 years before Apple started using it. The case was decided in Apple's favor, with the judge saying no one would get them confused. Huh? Try doing a simple internet search for &lt;strong&gt;os-9&lt;/strong&gt;. All you see are Apple-related links unless you specifically exclude Apple terms such as -Macintosh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The OS-9 version 2.4 manual in 1991 included a glossary containing an entry for Unix:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;An operating system similar to OS-9, but with less functionality and&#xA;    special features designed to soak up excess memory, disk space and CPU&#xA;    time on large, expensive computers.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-08-22T21:06:44.603" LastActivityDate="2017-08-22T21:06:44.603" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4544" PostTypeId="2" ParentId="872" CreationDate="2017-08-22T20:46:12.500" Score="1" Body="&lt;p&gt;Assuming that your host computer has an Intel CPU and you wanted the most recent version of Rosetta, then you could run Snow Leopard 10.6.8 on VirtualBox. Unfortunately, just having Rosetta may not solve all your problems because some PowerPC applications or games require the classic Mac environment. In this case, you would need the classic MacOS 9 environment running on PowerPC. This can be done with QEMU or some other type of CPU emulator if your host computer is an Intel-based CPU.&lt;/p&gt;&#xA;" OwnerUserId="1880" LastActivityDate="2017-08-22T20:46:12.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4545" PostTypeId="1" AcceptedAnswerId="4553" CreationDate="2017-08-22T21:03:35.667" Score="9" ViewCount="1291" Body="&lt;p&gt;I have probably broken my CPU by connecting 5 V from Arduino (500 mA) to the SENSE Pin of the Casette Port, So now I wonder what would be the safest way to desolder the processor?  I have a cheap soldering Iron and a cheap desoldering pump. My soldering skills are Ok.I thought about soldering a IC socket and then plugging a new CPU in the socket after removing the old one. Is this a good idea?&lt;/p&gt;&#xA;" OwnerDisplayName="user6734" LastActivityDate="2017-08-25T20:34:11.673" Title="What's a safe and easy way to desolder the CPU from C64?" Tags="&lt;commodore-64&gt;&lt;repair&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4546" PostTypeId="2" ParentId="4542" CreationDate="2017-08-22T21:20:42.230" Score="10" Body="&lt;p&gt;Not in all cases the schematics, parts lists, board views or even ROM assembly listings are &quot;leaked&quot; - it was quite common until into the 1980s to ship (or offer as an addon product) full documentation of that kind with professional electronics (which many computers were categorized and priced as) and also sometimes with consumer electronics. Existing copies of these might or might not have been &lt;em&gt;copied&lt;/em&gt; with the publisher's consent, but they were available to the general public.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC, So called &quot;technical reference manuals&quot; were available for ISA based IBM PCs (not MCA based ones, though detailed &quot;maintenance manual&quot;s exist) and 8-Bit Apples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mainboards and extension cards in the 1980s and 1990s commonly had schematics in the included documentation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often, so called &quot;leaked&quot; material, while never intended for the general public, was originally marketed to the washed masses (professional repair workshops and developers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, programming books from that era (eg books on EGA/VGA or PC assembly programming) commonly describe things in register-level detail - which was needed if there was no sufficiently capable device driver included in your OS or programming environment!). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look for the documentation coming with early implementations of a standard: These often assumed that the user had no documentation about the standard that they could be referred to... For example, printers using the parallel interface still sometimes found today in old or niche devices existed a decade(!) before PCs, and 1970s manuals would assume that the poor user that just unpacked the printer will now have to write a device driver or even design an interface board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a sidenote, it was not rare to find the schematic papers inside the case in a pouch or similar 1970s/1980s TVs (have found such in a curbside find Philips K11 or K12 TV which I stripped for parts ages ago, whoever put them there...)...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even today, for CPUs as well as peripheral and memory chips datasheets¹ are commonly available online, either from the manufacturer or from online datasheet archives. These will either contain instructions on how to program them or refer to further manuals (eg if there is an embedded CPU core, they will commonly refer to the pertinent CPU/architecture manual).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest problem in understanding hardware architecture from existing hardware and/or schematics are programmable (Flash, OTP, external, mask ROM...) parts that do not allow reading back and/or interpreting the code. Examples: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;microcontrollers with a protect bit set - if they can be overwritten, that is often only as a whole, if you want to overwrite the protect bit you overwrite the content! &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;PALs/GALs/CPLDs... that actually have the &quot;result&quot; of code and not the code itself stored in them - think of these as parts that you can rewire at will via some coded input from a programming device, and they do not allow you to read back the rewiring instructions - and what is in them can be stateful with some devices and so cannot reliably be analyzed by just measuring out truth tables.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Devices that will be fed code from an external memory (sometimes stored in ROM or mass storage and uploaded via an init routine from some CPU) that is in a non-source, undocumented format: RAM based FPGAs, for example.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Parts that are INTENTIONALLY made hard to reverse engineer, eg modules that are potted and/or outfitted with self-erase/self-destruct devices (crypto hardware)...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ASICs and gate arrays - the hardwired version of PAL/GAL/CPLD&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Application specific chips that have a whole, programmed computer system inside, which is documented only at a functional level (no one except the manufacturer of that chip has the code in that ROM). The PS/2 keyboard controller in a modern PC would be such a thing - a deeply embedded MCS48 or MCS51 with ROM and all, though the code might be very similar to what is in an actual dedicated keyboard controller chip.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;¹ The &quot;datasheet&quot; is a type of formal documentation when it comes to electronic parts, very different from the use of &quot;datasheet&quot; for marketing brochures!&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="785" LastEditDate="2017-08-22T21:34:22.450" LastActivityDate="2017-08-22T21:34:22.450" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4547" PostTypeId="2" ParentId="2238" CreationDate="2017-08-22T22:06:03.297" Score="0" Body="&lt;p&gt;If what is being emulated is SNES functionality: The SNES used the 65816, an extended 6502 that could do 24-bit addressing - but still came in a 40 pin case which obviously allows no space for 24 actual address lines, so a partially multiplexed address bus was used - the same 8 lines sometimes acted as the data bus, sometimes as the address bus. In order to have the 24 address lines available for actually addressing anything, one needed to store the contents of the 8 combined lines in a latch at the right time in the machine cycle, so they were available (at the output of the latch) while these lines were used as the data bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This kind of multiplexed interface is commonly found on 40-pin microprocessors in various forms, eg on the 8086/8088 and 8031 - note the ADx pins and the ALE (address latch enable. And yes, makes you think the designers were drunk at times...) pin on these.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-08-22T22:06:03.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4548" PostTypeId="2" ParentId="4529" CreationDate="2017-08-22T22:19:05.643" Score="1" Body="&lt;p&gt;To put the possibility in perspective, look at the much more modern (now defunct due to non-availability of the SoC) &lt;a href=&quot;https://www.fleasystems.com/flea86.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Flea86&lt;/a&gt; project, which sufficiently emulated a PC/XT to drive an ISA graphics card and run Windows 3 on a very fast 8 bit CPU.&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="439" LastEditDate="2017-09-04T01:10:01.253" LastActivityDate="2017-09-04T01:10:01.253" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4549" PostTypeId="2" ParentId="2909" CreationDate="2017-08-22T22:39:18.780" Score="5" Body="&lt;p&gt;An advantage of the 6502 which favors its usage in the Apple II series and Commodore VIC-20 and 64 (though not the Atari 400/800) is that it accesses memory on a very regular cycle--once every full clock cycle.  This makes it very easy to split each clock cycle into two parts--one of which is given to the CPU and the other of which is given to video (and--for the Apple--DRAM refresh) circuitry.  This makes it very easy for the CPU and video to use the same memory system, and also makes it possible for code to access memory that holds display data as quickly as it can access any other memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Atari 400/800 use shared memory for CPU and video, but don't subdivide cycles.  The CPU runs at 1.79Mhz [chroma/2] (vs. 1.022MHz [2*chroma/7] for the Apple II, VIC-20, and C64) but it has to stall the CPU every time it fetches data for the video subsystem.  On the other hand, the earlier Atari 2600 used a 28-pin version of the 6502 (called the 6507) running at 1.19MHz [chroma/3] which benefited enormously from the zero-page addressing mode, and inertia would have encouraged use of the 6502 on the later 400/800.  Since a memory bus speed of 1.19MHz would have been insufficient, it was boosted to 1.79Mhz.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-08-22T22:39:18.780" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4550" PostTypeId="2" ParentId="4529" CreationDate="2017-08-22T23:16:07.360" Score="5" Body="&lt;p&gt;Simon Owen has written &lt;a href=&quot;http://simonowen.com&quot; rel=&quot;noreferrer&quot;&gt;a number of them&lt;/a&gt; for the Sam Coupé, including of the Pacman arcade machine (from which it can run the original object code natively, being a z80-based micro) and of the Apple I and Vic-20 (in both cases emulating everything up to and including the 6502).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the Sam is nominally a 6Mhz machine, it has heavily constrained RAM access — when pixels are active it is permitted only one access to RAM every eight cycles, and even when in the border that only increases to one in four. So in practice it isn't substantially faster than, say, an Amstrad CPC. As a result both of the 6502 machine emulators are much slower than native speed: the author estimates 1/7th the original speed for the Vic-20 emulator. With a modern-era 20Mhz accelerator board, which also eliminates RAM-access wait states, he states that you get close to the original speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He has also back-ported the Vic-20 emulator to the Spectrum.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-08-22T23:16:07.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4551" PostTypeId="1" CreationDate="2017-08-23T05:07:41.780" Score="11" ViewCount="646" Body="&lt;p&gt;This OS was implemented on DG minis in about 1970 by Educational Data Systems.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dan Paymar, one of the EDS cofounders, hired me to help him complete a one-user diskless Basic Interpreter in Summer 1969.  I remember debugging the MAT INV operation by listening to the funny patterns of noises the FM radio made as MAT INV ran; you could hear it processing matrix rows.  We did this on Data General Nova serial #3, using a truly awful teletype-based text editor and assembler that read and wrote paper tapes.  We produced mountains of &quot;chad&quot; from paper tape holes, ugh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDS wanted to sell &quot;educational&quot; computers to schools but one terminal wouldn't serve multiple students so we built a 4 user memory-only standalone Basic interpreter with bad but workable timeslicing in 16Kb core memory.  Hardware multiplexors for multiple bit-serial devices barely existed and were really expensive, so we build a 16 bit parallel output register with one bit per terminal, and I built a device driver using the 1000hz built-in interrupt to serialize the ASCII bits being sent to the output ports. This continuously burned about 35% of the CPU even when nothing was being transmitted, but still left plenty for the timesharing basic.  We could drive 16 Teletypes full blast (110 baud) at the same time, making one hell of a racket. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Summer 70, the company got a head-per-track disk drive, and (zounds!) 32kb of core memory, and Paymar asked me to write a version of the BASIC that stored program files on the disk.   I was a bit contrarian and being left unsupervised :-} I inverted the problem to produce a multiuser disk operating system that would would run a BASIC interpreter as one of many applications, initially called Alice. The head per track drive meant Alice could swap users remarkably fast and the resulting response times to the teletypes was still quite good. The disk also gave us space to build a respectable file system where files actually had built-in record description metadata.   Alice could also run a text editor and an on-line assembler so we could finally avoid using the paper tape reader and high speed punch!  All of this is done in hard core DG assembly language.  My college buddies Steve Sternitzke and James Neighbors were a major part of this exercise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was frankly pretty impressive: a real timesharing system on a minicomputer.  Yep, earlier than Unix.    I've been stunned for my entire career that I got do to this when nobody was looking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Six months later, EDS ran into a financial troubles and I went on to do other things (eventually building an incremental BASIC compiler for Keronix DG clone computers and other operating systems &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4541/6744&quot;&gt;https://retrocomputing.stackexchange.com/a/4541/6744&lt;/a&gt;).  EDS renamed the OS to IRIS and started to sell it as a Business Basic system.  Apparently it was pretty successful in that market.  I came back as consultant a number of times, the last time sometime in the early 80s to help them figure out how to get 64 users running on that system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have a good timeline of what happened after I left.  Any more stories of how it evolved would be interesting.&lt;/p&gt;&#xA;" OwnerUserId="6744" LastEditorUserId="6744" LastEditDate="2019-05-21T15:12:22.760" LastActivityDate="2019-05-21T15:12:22.760" Title="Can we get a complete timeline on the IRIS Operating System for Data General Novas?" Tags="&lt;data-general&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="4552" PostTypeId="2" ParentId="4537" CreationDate="2017-08-23T06:21:48.667" Score="6" Body="&lt;p&gt;For the sake of completeness, there is &lt;a href=&quot;http://www.symbos.de&quot; rel=&quot;noreferrer&quot;&gt;SymbOS&lt;/a&gt;, which advertises itself as a graphical Z80 multitasking operating system. It didn't exist at the time, but it works for a variety of 8bit machines (MSX2 and better, Amstrad CPC, Enterprise 64/128, PCW Joyce).&lt;/p&gt;&#xA;" OwnerUserId="3603" LastActivityDate="2017-08-23T06:21:48.667" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4553" PostTypeId="2" ParentId="4545" CreationDate="2017-08-23T09:48:02.083" Score="12" Body="&lt;p&gt;The easiest way to desolder a dead chip is to cut the legs with your snips then remove each pin one at a time. Use a solder pump or solder braid to clean the holes. I would use an IC socket when replacing the chip as there is more of a chance of damaging the 6502 if you solder it directly. You can get low profile sockets if head space is an issue...&lt;/p&gt;&#xA;" OwnerUserId="1956" LastActivityDate="2017-08-23T09:48:02.083" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4555" PostTypeId="2" ParentId="4545" CreationDate="2017-08-23T11:13:58.757" Score="7" Body="&lt;p&gt;For destructive desoldering @Tim Rings method is usually the fastest: clip all pins, remove the chip and desolder each pin separately. Just be careful when clipping the pins. Use a small tool and try to cut each sideways (cutting flat), as large pliers and frontal cutting may twist the pin, which could damage traces or even the board. Clip all pins before starting to desolder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remove each pin separately and don't worry about removing the solder at this step. Free up the holes in a separate run, preferably with a solder pump, as now you can heat the hole on one side and suck with maximum efficiency from the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To keep the chip undamaged, I prefer to use a hot air gun. The tool should have a nozzle of about ~1cm (~1/2 inch) to direct the heat without damaging other components. Grab the CPU with an IC-pull-tool, heat the soldering side with your blower and gently move the IC to pull it out. After that, clean the holes as before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the board style and density it could be helpful to build a little cardboard box and shield around the soldering holes (half way to other components and at ca. 1cm high, to be inset in a sheet) so excess air isn't affecting other components much. It all depends on your skills here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Addendum: If this machine is to be used in further experiments, I'd go ahead and desolder &lt;strong&gt;all IC&lt;/strong&gt; and add sockets. Then desoldering is a matter of minutes with a hot air gun - and future replacements will be quite easy, not to mention add on components :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-08-24T18:15:49.657" LastActivityDate="2017-08-24T18:15:49.657" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4556" PostTypeId="2" ParentId="4537" CreationDate="2017-08-23T11:24:40.110" Score="4" Body="&lt;p&gt;In the early 90s, I worked for a division of GEC Alsthom who had based their control electronics on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Transputer&quot; rel=&quot;nofollow noreferrer&quot;&gt;transputer&lt;/a&gt;.  The transputer was obsolete by then, but they had not yet bitten the bullet to do a full redesign of their controls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transputers were explicitly designed to run as a massively parallel system.  Because designs had to be parallel, they also allowed multithreading within the processor as well (and in fact for efficiency there was some comms buffering which &lt;em&gt;had&lt;/em&gt; to be coded as parallel tasks, because that's how the processor worked).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sadly of course the transputer suffered from the same fate as most other UK technology companies, namely underinvestment.  Historically, major UK investors have been extremely reluctant to fund UK technology companies because they are seen as higher-risk; but of course this is a self-fulfulling prophecy when the companies fail because they cannot get the resources they need to grow.  In the case of the transputer, Intel and other US manufacturers put investment into mass-manufacture of single-core x86 processors which allowed single-threading processors to progress at a rate Inmos could not compete with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Occam_(programming_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;occam&lt;/a&gt; language was designed to handle multithreading and multicore processing.  Because occam was tied to the transputer platform, the detailed implementation of semaphores and shared data could be delegated to the language instead of having to be set up explicitly by the coder.  This made it trivial to implement multithreaded designs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course the transputer was not an 8-bit processor.  But your question seems more about &quot;early&quot; processors rather than being specifically tied to a processor word length, and &quot;8-bit&quot; seems to be more about the era than the processor.&lt;/p&gt;&#xA;" OwnerUserId="6749" LastActivityDate="2017-08-23T11:24:40.110" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4557" PostTypeId="2" ParentId="4537" CreationDate="2017-08-23T13:36:35.910" Score="11" Body="&lt;p&gt;It wasn't multitasking in any way, but Locomotive BASIC on the Amstrad CPC series (Z80, 1984) had software interrupts for calling subroutines based on timers. There were four 50 Hz timers, 0–3, with timer 3 having the highest priority. Timers could be set one-shot (&lt;a href=&quot;http://www.cpcwiki.eu/index.php/Locomotive_BASIC#AFTER_.E2.80.B9time_delay.E2.80.BA.5B.2C.E2.80.B9timer_number.E2.80.BA.5D_GOSUB_.E2.80.B9line_number.E2.80.BA&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;AFTER&lt;/strong&gt; ‹time delay›[,‹timer number›] &lt;strong&gt;GOSUB&lt;/strong&gt; ‹line number›&lt;/a&gt;), repeating (&lt;a href=&quot;http://www.cpcwiki.eu/index.php/Locomotive_BASIC#EVERY_i.5B.2Ct.5D_GOSUB_ln&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;EVERY&lt;/strong&gt; i[,t] &lt;strong&gt;GOSUB&lt;/strong&gt; ‹line number›&lt;/a&gt;) or based on the sound queue status (&lt;a href=&quot;http://www.cpcwiki.eu/index.php/Locomotive_BASIC#ON_SQ.28x.29_GOSUB_ln_x1.2C_x2.2C_x3.2C_x4.2C_...&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;ON&lt;/strong&gt; &lt;strong&gt;SQ&lt;/strong&gt;(x) &lt;strong&gt;GOSUB&lt;/strong&gt; ‹line number› x1, x2, x3, x4, …&lt;/a&gt;). Interrupts could be disabled (&lt;strong&gt;DI&lt;/strong&gt;) and re-enabled (&lt;strong&gt;EI&lt;/strong&gt;). Combined with Locomotive BASIC's screen viewport definitions (&lt;a href=&quot;http://www.cpcwiki.eu/index.php/Locomotive_BASIC#WINDOW.5B.23.E2.80.B9stream_expression.E2.80.BA.5D.2C.5BL.5D.2C.5BR.5D.2C.5BT.5D.2C.5BB.5D&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;WINDOW&lt;/strong&gt;&lt;/a&gt; … — somewhat different from how we'd define a window today) you could have the appearance of multiple programs running at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, arbitration was pretty much up to the programmer, and it was too easy to create a program that would lock up beyond the reach of even a soft reset. But as a limited form of high-level interrupt-driven code it worked quite well.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-08-23T13:36:35.910" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4558" PostTypeId="2" ParentId="4529" CreationDate="2017-08-23T13:46:38.660" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/BASICODE&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASICODE&lt;/a&gt; was a Europe-wide collaboration to develop a common set of BASIC subroutines for many different home computers and a common audio format for distributing programmes using those subroutines. Like CHIP-8, it implemented a lowest common denominator feature set to be supported on all machines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since BASICODE ran in the computer's native BASIC, it wasn't strictly an emulator, but did provide a way of running the same code on many different platforms.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-08-23T13:46:38.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4559" PostTypeId="2" ParentId="4537" CreationDate="2017-08-23T15:16:18.383" Score="6" Body="&lt;p&gt;Intel's &lt;a href=&quot;https://en.wikipedia.org/wiki/RMX_(operating_system)&quot; rel=&quot;noreferrer&quot;&gt;iRMX&lt;/a&gt;  worked on the 8080 and above. We used it on &lt;a href=&quot;https://en.wikipedia.org/wiki/Grid_Compass&quot; rel=&quot;noreferrer&quot;&gt;GRiD Compasses&lt;/a&gt; in the early 1980s, though the GRiD could hardly be called a &quot;home computer&quot;! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;iRMX (and the GRiDOS file system &amp;amp; GUI that GRiD built on top of it) were fully multi-tasking.&lt;/p&gt;&#xA;" OwnerUserId="3703" LastActivityDate="2017-08-23T15:16:18.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4560" PostTypeId="1" AcceptedAnswerId="4561" CreationDate="2017-08-23T15:37:02.453" Score="2" ViewCount="669" Body="&lt;p&gt;Back in school I took a couple electrical engineering classes and we did a lot of Boolean math using logic gates (AND, OR, XOR, NAND, etc), but never talked about how exactly the logic in a single gate is actually implemented or made. I'm sure logic gates are much smaller than they were before. What chemicals or materials were used to create the logic for logic gates?&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="1880" LastEditDate="2017-08-23T19:09:47.837" LastActivityDate="2017-08-24T20:21:55.690" Title="What chemicals or materials were used to create the logic for logic gates?" Tags="&lt;hardware&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4561" PostTypeId="2" ParentId="4560" CreationDate="2017-08-23T18:18:54.467" Score="3" Body="&lt;p&gt;Since the 80s? Probably not - In the 70s, there was a change from germanium to silicon in transistor technology, today, most transistors are silicon-based (although technology seems to be turning around and may be going back to Germanium in the future). That also covers about 95% of integrated circuits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Very high-speed devices are made from GaAs substrate, and even more exotic materials, like silicon on sapphire.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, basically, nothing has changed much during the last 30 years regarding the &lt;em&gt;material&lt;/em&gt; chips are made from. A lot, however, has indeed changed in the process, the material used to create structures on the silicon, and, especially, in the minimum size if structures that can be created - but that would be another question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT after the question was changed:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above covers the base materials, another thing is the doping and the creation of structures on the chip - In many cases this is something that is considered &quot;secret magic&quot; - chip manufacturers don't really publish this information very often. Chip manufacturing is a layering technology that consists of masking, then doping the silicone, again masking and etching structures, stacking layers and layers of semiconductor, conducting and isolating layers on top of the wafer base material.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some selected materials:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Photoresist - a lacquer that is used for masking, mainly consisting of phenolic resin and a small amount of photosensitive binding agent, and obviously an organic solvent to generate proper viscosity. The photo resist also requires, once exposure and development have been done, a number of aggressive solvents to be cleaned away. &lt;/li&gt;&#xA;&lt;li&gt;Silicone oxide - This is created by superheating the wafer beyond 1000°C and creates the isolating layers. In part, these oxide layers have to be etched away to create structures - As SiO2 is extremely resistive to etching, this only works with one of the most aggressive acids: fluoric acid, HFl. Nitride layers are etched using phosphoric acid (H3PO4). More modern etching procedures mix physical and a chemical processes: etching gases are &quot;shot&quot; at the wafer with high speed - Most of those gases are fluoride acids as well.&lt;/li&gt;&#xA;&lt;li&gt;Phosphorus, arsenic and boron for doping the silicon&lt;/li&gt;&#xA;&lt;li&gt;Silicon nitride and its etching by-product, ammonia, also for isolating layers&lt;/li&gt;&#xA;&lt;li&gt;various forms of silicon vapour, mainly silane (SiH4) and silicon chloride (SiCH4) to create upper layer silicone structures above an isolating layer&lt;/li&gt;&#xA;&lt;li&gt;Various metal vapours (Aluminium, copper, titanium and tungsten) to create conductive layers (note: modern micro chips can easily have like 10km of conducting trace on them) and dope the silicon&lt;/li&gt;&#xA;&lt;li&gt;Very trivially: water. Around 4000 litres per chip as solvent and cleansing liquid&lt;/li&gt;&#xA;&lt;li&gt;and lots more...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;None of these would really be considered healthy chemicals, so microchip manufacturing needs huge amounts of excipients to recycle, clean, dissolve&#xA;and neutralize the base and processing material. (GaAs technology is even dirtier)&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-08-24T20:21:55.690" LastActivityDate="2017-08-24T20:21:55.690" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4562" PostTypeId="2" ParentId="4536" CreationDate="2017-08-23T18:50:19.360" Score="7" Body="&lt;p&gt;As an example of minimalistic IDE for C64 development, you'll need just cross-assembler like &lt;a href=&quot;http://sourceforge.net/projects/acme-crossass/&quot; rel=&quot;noreferrer&quot;&gt;ACME&lt;/a&gt; and your favourite monospace text editor. Quite useful and detailed C64 doc is &lt;a href=&quot;http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt;. VICE emulator you've mentioned has some extensive debugging capabilities and is also cross-platform.&#xA;There are also myriads of C64 programming resources around, as there are some complete cross-IDEs for the development. I won't mention any specific ones since I've never dug that deep.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2017-08-23T18:50:19.360" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4563" PostTypeId="2" ParentId="4537" CreationDate="2017-08-23T20:59:11.623" Score="3" Body="&lt;p&gt;When we say &amp;quot;8 bit microcomputer&amp;quot;, really we might be talking about 16 bit machines, if we go by address bus size: 8080, Z80, 6502, ...&lt;/p&gt;&#xA;&lt;p&gt;If we give ourselves some leeway to by that rather than data register size, we might include the DEC &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-11#LSI-11&quot; rel=&quot;nofollow noreferrer&quot;&gt;LSI-11&lt;/a&gt; in the same category.&lt;/p&gt;&#xA;&lt;p&gt;Douglas Comer's &lt;a href=&quot;https://en.wikipedia.org/wiki/Xinu&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xinu&lt;/a&gt; operating system first ran on the LSI-11.&lt;/p&gt;&#xA;&lt;p&gt;Xinu supports concurrency and all that. From the old &lt;a href=&quot;http://www.dmi.unict.it/%7Epappalar/lab3/xinuhome.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xinu FAQ&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Xinu is a small, elegant, multitasking Operating System supporting the following features:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Concurrent Processing&lt;/li&gt;&#xA;&lt;li&gt;Message Passing&lt;/li&gt;&#xA;&lt;li&gt;Ports&lt;/li&gt;&#xA;&lt;li&gt;Semaphores&lt;/li&gt;&#xA;&lt;li&gt;Memory Management&lt;/li&gt;&#xA;&lt;li&gt;Buffer Pools&lt;/li&gt;&#xA;&lt;li&gt;Uniform Device I/O&lt;/li&gt;&#xA;&lt;li&gt;Shell&lt;/li&gt;&#xA;&lt;li&gt;Tcl&lt;/li&gt;&#xA;&lt;li&gt;TCP/IP&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="5202" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-08-23T20:59:11.623" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="4564" PostTypeId="2" ParentId="1216" CreationDate="2017-08-23T21:35:13.637" Score="0" Body="&lt;p&gt;Using new kit, you can try MsMadLemon's solution - you can buy a new IDE99 from AmigaKit.com and that provides a buffered 4-way interface, allowing a longer cable for standard 3.5-inch drives. If you do not want to run a 44-way IDE cable external to the Amiga, it's possible to put a laptop DVD drive in if you do not mind carving up the A1200 wedge case. The floppy connector can supply the 5 and 12v power, but in this case the power was too weak and a lead had to be run from the main power connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a link to the video:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=8U_LkdYIcig&amp;amp;t=927s&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=8U_LkdYIcig&amp;amp;t=927s&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The included software should enable you to read CDs but I'm unsure which formats - definitely ISO.&#xA;Personally my 1200 is towered so I have adequate power and space for the drive. The drivers were provided with OS 3.9 which I believe is just a bundled copy of Allegro CDFS. It doesn't seem to read DVD discs but I have done nothing to the original mountfile.&lt;/p&gt;&#xA;" OwnerUserId="6747" LastActivityDate="2017-08-23T21:35:13.637" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4566" PostTypeId="2" ParentId="1018" CreationDate="2017-08-24T02:42:24.960" Score="7" Body="&lt;p&gt;I've stumbled upon both this question and its answer today while trying to find out something else, and &lt;a href=&quot;http://blog.tynemouthsoftware.co.uk/2017/07/z80-m1-signals.html&quot; rel=&quot;noreferrer&quot;&gt;Tynemouth Software's theory as of the 1st of July&lt;/a&gt; is simply this: the Spectrum's expansion connector puts M1 next to the 12v AC signal. So the most likely cause isn't that Spectrums were assembled with processors that signalled M1 incorrectly, it's that many of the Z80s in Spectrums have had their M1 output destroyed by people accidentally bridging the M1 and 12v AC connections with hardware that wasn't quite exactly aligned with the connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That theory would suggest that there might well be no correlation between Z80 source and malfunction; if there is one then it's likely to do with 12v AC tolerance, and not really relevant unless the Z80 you intend to use is to be pulled from a Spectrum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: to expand on the second paragraph, it appears to be true that having a functioning M1 line is necessary for use in an MSX — to conform to spec you need to assert WAIT while M1 is active so as to extend the machine cycle by an extra clock. So any Z80 that was used in or comes from an MSX should be completely conformant with the specification on M1 activity. Given the wide variety of production lines that led to various MSXs I'd be surprised if that didn't include every manufacturer of Z80s.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-08-24T11:52:38.177" LastActivityDate="2017-08-24T11:52:38.177" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4567" PostTypeId="2" ParentId="4537" CreationDate="2017-08-24T05:01:01.293" Score="1" Body="&lt;p&gt;Interrupts are &lt;em&gt;co-operative&lt;/em&gt; multitasking - the hardware interrupts, it runs code to handle it, it returns to the (single) background loop (or a lower priority interrupt) by popping the stack. Most 8-bit home computers used this extensively - on a C-64, you could get an interrupt when two sprites in the video system collided (I think).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Operating systems like Unix have &lt;em&gt;pre-emptive&lt;/em&gt; multi-tasking - a process gets scheduled to run when it has nothing to wait for and has reached the top of a priority/round-robin system. Under the hood, this is (usually) done by servicing a (timer or peripheral) interrupt and deciding which process gets the CPU. Mostly, each process will need its own stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you need RAM for the stacks and CPU for the context switches - which is why a lot of 8-bit systems didn't bother. You can actually have a fairly sophisticated user environment with no co-operative multitasking - e.g. Windows 3.x.&lt;/p&gt;&#xA;" OwnerUserId="5276" LastActivityDate="2017-08-24T05:01:01.293" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4568" PostTypeId="2" ParentId="4560" CreationDate="2017-08-24T05:12:09.510" Score="4" Body="&lt;p&gt;Logic gates can be made out of many things, including (but not limited to) metal mechanical parts (Zuse Z1), electrical relays (telephone exchanges, elevators, Z3, Harvard Mark 1), vacuum tubes (Eniac, Univac), transistors (silicon or germanium plus oxides, metal layers (Al, Cu) and doping agents, or even Lego blocks (colored plastics).  There are also fluidic gates (metal or plastic channels filled with liquid or gas flows), and optical/photonic gates (glass fibers and crystals).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of the above can be used to implement Boolean logic (NAND, NOR, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Added: Here are some drawings found on the web of how (very common in contemporary chips) MOS FET transistors can be connected to produce a single NAND or NOR logic gating function: &lt;a href=&quot;http://www.vlsifacts.com/nand-gate-using-cmos-technology/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.vlsifacts.com/nand-gate-using-cmos-technology/&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-08-24T16:54:24.343" LastActivityDate="2017-08-24T16:54:24.343" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4569" PostTypeId="1" AcceptedAnswerId="4587" CreationDate="2017-08-24T12:12:34.157" Score="3" ViewCount="273" Body="&lt;p&gt;I know that in the 80s, there was a shift from aluminum gate material to polycrystalline silicon. I wonder because the 6502 was released in 1975 and there were a lot of different implementations and versions of it in the 80s.&#xA;Did ICs use aluminum gate material anyway?   &lt;/p&gt;&#xA;" OwnerDisplayName="user6734" LastActivityDate="2017-08-26T09:44:20.023" Title="Which material was used for the 6502/6510/8500 MOSFETs?" Tags="&lt;commodore-64&gt;&lt;6502&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4570" PostTypeId="1" AcceptedAnswerId="4579" CreationDate="2017-08-24T15:38:36.667" Score="10" ViewCount="1586" Body="&lt;p&gt;The complexity of the Sega Saturn's technically impressive hardware played a large factor in its downfall. It seems to me that one of the largest things that was difficult to work with was that the 2 Hitachi SH-2 processors shared the same bus and were unable to to access system memory at the same time. Nowadays multiple processors can access system memory and cache at the same time with multi threading. Why was the Sega Saturn's main processor architecture designed in this way?&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="5200" LastEditDate="2017-08-31T11:02:23.797" LastActivityDate="2017-08-31T11:02:23.797" Title="Why should 2 CPUs ever share the same bus?" Tags="&lt;hardware&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4571" PostTypeId="2" ParentId="4499" CreationDate="2017-08-24T16:58:01.067" Score="13" Body="&lt;p&gt;The comment you mention occurs in &lt;em&gt;The Art of Computer Programming,&lt;/em&gt; Volume 1 (&lt;em&gt;Fundamental Algorithms&lt;/em&gt;), Chapter 1 (&lt;em&gt;Basic Concepts&lt;/em&gt;), Section 1.2 (&lt;em&gt;Mathematical Preliminaries&lt;/em&gt;), Subsection 1.2.5 (&lt;em&gt;Permutations and Factorials&lt;/em&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wBjuq.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wBjuq.png&quot; alt=&quot;TAOCP Vol 1 p. 47&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The calculation says that &lt;em&gt;if checking each case takes about a millisecond&lt;/em&gt;, then 10! is about the number of cases you can check in an hour: this calculation is as true today as it was in 1968 (when Vol 1 was first published). What has changed is that today you can check a lot more in a millisecond than you could then: you can solve more difficult problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We actually know a fair bit about the kind of computers Knuth cut his teeth on:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;As an undergraduate student at Case Institute of Technology, he worked on the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_650&quot; rel=&quot;noreferrer&quot;&gt;“type 650 computer”&lt;/a&gt;, to which he dedicated the TAOCP series of books. He has spoken about how enlightened the computer administrators at the college were for allowing undergraduates to use the machine. There he co-wrote a compiler called &lt;a href=&quot;http://hopl.info/showlanguage.prx?exp=111&quot; rel=&quot;noreferrer&quot;&gt;RUNCIBLE&lt;/a&gt; (which led in 1959 to his second ever &lt;a href=&quot;https://dl.acm.org/citation.cfm?id=368507&quot; rel=&quot;noreferrer&quot;&gt;publication&lt;/a&gt;, after the one in MAD Magazine) (watch him talk about it &lt;a href=&quot;https://www.youtube.com/watch?v=YSb02Xd20_E&amp;amp;list=PLVV0r6CmEsFzeNLngr1JqyQki3wdoGrCn&amp;amp;index=23&quot; rel=&quot;noreferrer&quot;&gt;starting here&lt;/a&gt;). According to &lt;a href=&quot;https://www-03.ibm.com/ibm/history/exhibits/650/650_fs1.html&quot; rel=&quot;noreferrer&quot;&gt;this IBM page&lt;/a&gt;, the speed of this machine was as follows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Approximate calculating speeds (optimally programmed)&lt;/strong&gt;&lt;br&gt;&#xA;  78,000 additions or subtractions per minute&lt;br&gt;&#xA;  5,000 multiplications per minute (multiplier = 5,555,555,555)&lt;br&gt;&#xA;  3,700 divisions per minute (divisor = 5,555,555,555)&lt;br&gt;&#xA;  138,000 logical decisions per minute  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On the strength of this compiler experience, he got a job as a consultant at Burroughs (while still a student) to write an Algol compiler for the Burroughs 205 (read Richard Waychoff's account of it in the &lt;a href=&quot;http://ed-thelen.org/comp-hist/B5000-AlgolRWaychoff.html#7&quot; rel=&quot;noreferrer&quot;&gt;“III. The Summer Of 1960 (Time Spent with don knuth)”&lt;/a&gt; part of “Stories about the B5000 And People Who Were There” (&lt;a href=&quot;http://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/k-8-pdf/k-8-u2779-B5000-People.pdf&quot; rel=&quot;noreferrer&quot;&gt;PDF&lt;/a&gt;). &lt;a href=&quot;https://www.cs.virginia.edu/brochure/images/manuals/b205/central/central.html&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; doesn't list how fast this machine was. And if you're interested you can read &lt;a href=&quot;http://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/k-2-pdf/k-2-c1039-ALGOL-B205.pdf&quot; rel=&quot;noreferrer&quot;&gt;the compiler's source code&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And so on; Knuth cares a lot about history and you can see some stuff he wrote, or collected, in &lt;a href=&quot;http://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/KnuthDigitalArchive-Index.html&quot; rel=&quot;noreferrer&quot;&gt;his archives that he donated to the Computer History Museum&lt;/a&gt;: mentioned computers from the 1960s include the Burroughs 205, the &lt;a href=&quot;http://archive.computerhistory.org/resources/text/SDS/SDS.900.1962.102646286.pdf&quot; rel=&quot;noreferrer&quot;&gt;SDS 900&lt;/a&gt; (execution time 16 microseconds for additions, 32 microseconds for multiplications, 250–300 microseconds for operations on (24+9)-bit floating point), etc (lots on that page).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3726" LastActivityDate="2017-08-24T16:58:01.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4572" PostTypeId="2" ParentId="4537" CreationDate="2017-08-24T17:05:56.970" Score="1" Body="&lt;p&gt;Both &lt;a href=&quot;https://en.wikipedia.org/wiki/MINIX&quot; rel=&quot;nofollow noreferrer&quot;&gt;Minix&lt;/a&gt; (1988) (and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Embeddable_Linux_Kernel_Subset&quot; rel=&quot;nofollow noreferrer&quot;&gt;ELKS&lt;/a&gt; fork of &lt;a href=&quot;https://en.wikipedia.org/wiki/Linux&quot; rel=&quot;nofollow noreferrer&quot;&gt;Linux&lt;/a&gt; though that wasn't around until 1999) ran on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8088&quot; rel=&quot;nofollow noreferrer&quot;&gt;8088&lt;/a&gt; Microprocessor which had an 8 bit external data bus so is at least by some definitions an 8 bit processor; many 8 bit processors such as the Z80 had one way or another 16 bit registers at least by combining registers for addressing purposes, so I don't think this is too much of a stretch. Both Linux and Minix supported preemptive multitasking and concurrency. Neither Minix nor Linux originally (from memory - though it did by the time ELKS came out) supported threading but both did at some later point and could run it on an 8086.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did home computers that support the 8088? Well the IBM XT and some cheap PC clones were certainly sold into homes, so I would guess these count. But the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PCjr&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM PCjr&lt;/a&gt; was 8088 based and definitely marketed towards the home (&quot;IBM's first attempt to enter the home computer market&quot;). &lt;a href=&quot;https://books.google.es/books?id=ti4EAAAAMBAJ&amp;amp;pg=PA106&amp;amp;lpg=PA106&amp;amp;dq=8088%20home%20computer&amp;amp;source=bl&amp;amp;ots=fM3LhSQUyD&amp;amp;sig=Sw0xbF7YnU-ExvEtOP5BD8zu-Is&amp;amp;hl=en&amp;amp;sa=X&amp;amp;redir_esc=y#v=onepage&amp;amp;q=8088%20home%20computer&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;See also this link&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4292" LastEditorUserId="4292" LastEditDate="2017-08-25T15:03:45.217" LastActivityDate="2017-08-25T15:03:45.217" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4575" PostTypeId="2" ParentId="4570" CreationDate="2017-08-24T19:30:26.677" Score="5" Body="&lt;p&gt;If two devices will need to share information, there will need to be some kind of shared bus via which they can do so.  The easiest way to accomplish that is to have two devices sit on the same bus and take turns using it.  While it's possible to use more complicated arrangements, they are only practical if one is willing to either use a lot of discrete chips, or put a lot of stuff into a single chip.  Nowadays it's not uncommon for chips to have many hundreds of pins, but historically even a chip with 64 pins was considered &quot;large&quot;.  If one wants to have two processors share 65,536 words of memory on a 16-bit data bus and also have each be able to its own private 16-bit memory subsystem, that will require switching 16 address bits, 16 data bits, and some control wires.  Since each of those wires will need to be present in each private bus as well as the shared bus, that's over 100 signals that need to be managed by the bus-switching logic.  Nowadays it would be practical to have a single hundreds-of-pins chip to manage such things, but if one confines oneself to chips with no more than 40 pins each and divides things up to minimize duplication, one would end up needing quite a few such chips.  If all the shared memory were DRAM, one might be able to have two 40-pin chips each take care of 8 data bits and 4 address bits (multiplexing them to 2) and then have another 40-pin chip take care of the remaining address bits along with some other functions, but that's a lot of extra circuitry for what's presumably supposed to be an inexpensive system.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-08-24T19:30:26.677" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4576" PostTypeId="2" ParentId="4545" CreationDate="2017-08-24T19:55:28.850" Score="3" Body="&lt;p&gt;First of all, be careful of bad advice.  Even from me.  Second, if you are not 100% sure the CPU is dead, then do NOT clip the leads to make de-soldering easier.  No offense, but if you can't properly de-solder a chip using either a solder-sucker or a de-soldering vacuum station, then I would pass the job on to someone else.  They aren't making 6510's any more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, why are you assuming you fried the CPU with a 5V signal?  What indications do you have the CPU is dead?  I'm not saying it isn't...I just wonder how you got to that conclusion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, for any IC (not just CPU), the proper way to de-solder is to first make sure you're set at the right temperature.  Too hot (or too long) you will lift the pads or worse.  Use a good solder-sucker if you don't have a de-soldering station.  Take your time and do it right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's sometimes a good idea to add a little fresh solder to loosen things up.  Then, melt the solder and quickly use the sucker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't use solder wick for the bulk of the job.  It's not really designed for that. It's better designed for pulling up solder from flat areas.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;People are always so quick to recommend cutting stuff off.  If it's a $1 part that is easy to find, still produced, etc. then I can see that being OK.  But never a vintage part unless you REALLY know it's dead.  &lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2017-08-24T19:55:28.850" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4578" PostTypeId="2" ParentId="4517" CreationDate="2017-08-24T20:20:44.067" Score="2" Body="&lt;p&gt;That looks like long-term heat damage from a hot running component, especially given how PCB and Case are equally damaged. Not unlikely the transistor which has drossy looking solder joints (look like heat above 180°C remelted them) and looks like it has SPLIT IN HALF from overheating.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-08-24T20:20:44.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4579" PostTypeId="2" ParentId="4570" CreationDate="2017-08-24T20:26:00.103" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It seems to me that one of the largest things that was difficult to work with was that the 2 Hitachi SH-2 processors shared the same bus and were unable to to access system memory at the same time. Nowadays multiple processors can access system memory and cache at the same time with multi threading.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Todays multi-core CPUs suffer the same problem as all future systems will. One bus interface can do only one transfer at a time. It's just that caches with speculative reads and burst transmissions cover up for most collisions. The same was true already for the SH2 CPUs, as each operated a local 4K cache.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why was the Sega Saturn's main processor architecture designed in this way?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The same reason why all multi-core CPUs today are designed that way: to improve performance. On the Saturn it was especially to allow as flexible as possible interactions of parallel units to deliver superior performance as a whole system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking close, there are way more components accessing the busses than just the CPU cores. To start with, the Saturn had &lt;strong&gt;three&lt;/strong&gt; busses: A, B and C, all coordinated by the SCU (system controller).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;A Bus&lt;/strong&gt; connected the SCU with all expansion. For a basic console this means the expansion slot and the CD-ROM board. Access is arbitrated by the SCU between SCU access, access from the SH1 CPU on the CD-ROM board and whatever was plugged into the cartridge slot - yes, cartridges could have CPUs (or alike) accessing the whole system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;B-Bus&lt;/strong&gt; connected the SCU with both VDP and the sound system (with its own 68K CPU).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And and finally the &lt;strong&gt;C-BUS&lt;/strong&gt; connected the pair of SH-2 CPUs with the SCU and the System Management Controller, a 4(!) bit CPU handling system reset and backup RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, the &lt;strong&gt;SCU&lt;/strong&gt; wasn't just some bus switch, but got its own program running on a DSP, plus three independent working DMA engines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To add complexity, each SH-2 SPU also included two independent DMA channels, so there were up to 10 different entities accessing the C-Bus - 11 if you count the SMC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Within this complex system of independent programmable components, adding a second CPU core was an easy and cheap way to add more computing power. All components where like players in an orchestra and needed a good training, AKA programming. Due the sheer power (at that time) one could get nice results from the main CPUs with default drivers for SCU and VDP1/2, but nothing exceptional. It has been said that real great Saturn games only came from Japan and Europe (mostly Britain), as they got down to work the SCU in assembly language, while US companies preferred to use C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: &lt;em&gt;For more detailed information, a look at the &lt;a href=&quot;http://segaretro.org/Main_Page&quot; rel=&quot;noreferrer&quot;&gt;Sega-Retro-Wiki&lt;/a&gt; might be a good start. These guys collect everything about Sega in general, including a huge amount of real detailed information about the gaming consoles.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://segaretro.org/images/4/4e/Sega_Service_Manual_-_Sega_Saturn_%28PAL%29_-_013-1_-_June_1995.pdf&quot; rel=&quot;noreferrer&quot;&gt;Saturn Service Manual&lt;/a&gt; has a nice system overview on page 12.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="149" LastEditDate="2017-08-25T09:10:27.987" LastActivityDate="2017-08-25T09:10:27.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4580" PostTypeId="2" ParentId="4527" CreationDate="2017-08-24T20:34:32.260" Score="8" Body="&lt;p&gt;Was it Math Ace Jr.? It was sold around 1994~1996.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tj5DW.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tj5DW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-08-24T20:34:32.260" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4581" PostTypeId="1" CreationDate="2017-08-25T14:12:43.950" Score="5" ViewCount="434" Body="&lt;p&gt;I've just been given an Apple IIgs that hasn't been turned on since 1999. What's a reasonable set of checks to go through to make sure I don't toast the thing the first time I plug it in?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machine has:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ROM1&lt;/li&gt;&#xA;&lt;li&gt;Fan-upgraded power supply&lt;/li&gt;&#xA;&lt;li&gt;RAM expansion card with something like 2 MB installed&lt;/li&gt;&#xA;&lt;li&gt;Apple II High-Speed SCSI card&lt;/li&gt;&#xA;&lt;li&gt;AppleColor RGB Monitor&lt;/li&gt;&#xA;&lt;li&gt;single external 3½&quot; drive&lt;/li&gt;&#xA;&lt;li&gt;external SCSI drive (most likely frozen/dead with age)&lt;/li&gt;&#xA;&lt;li&gt;ADB keyboard and mouse (I also have a Mac ADB setup if these don't work)&lt;/li&gt;&#xA;&lt;li&gt;several 5¼&quot; drives (optional for now, but will be needed later)&lt;/li&gt;&#xA;&lt;li&gt;Many system floppies, including originals.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2017-09-08T01:55:34.147" LastActivityDate="2017-09-08T01:55:34.147" Title="Checklist for powering up an Apple IIgs?" Tags="&lt;power&gt;&lt;apple-iigs&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4582" PostTypeId="2" ParentId="4581" CreationDate="2017-08-25T14:53:19.787" Score="8" Body="&lt;p&gt;Generic answer, applies to any machine of a similar design in that condition:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If you can, check the power supplies (not just for the machine preferably, on anything you are attempting to connect to it too!) with a load that you would not mind or manage to destroy (eg a set of power resistors). Do not test them completely unloaded!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you are proficient enough with electricity to do so safely, wire a seriously high wattage lamp (incandescent/halogen and a few 100W. NO LED/CFL/whatever!) in series with the PSU input when first testing it. This will limit the damage that can happen in case something shorts out. Be skeptical of advice to use a variac - the kind of power supplies used in these machines are more likely to end up very stressed than soft started when you give them undervoltage.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Check the interior for foreign, conductive objects (do not open the monitor unless you are really comfortable inside CRT monitors. If you have to ask, you aren't.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;...or leaked batteries/capacitors of any kind&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Connect only a minimum set of peripherals on the first run.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you can, don't use the only copy of some disk in a floppy drive of unknown condition. Also make sure there is no unwanted foreign object or debris in the drive, this could damage floppy disks easily.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Avoid involving hardware parts with teardrop-shaped tantalum capacitors in the first test runs as much as you can, they are potential sources of serious trouble.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On the Variac practice: Often recommended with linear power supplies, to reform electrolytic capacitors and limit inrush current that could cook a dis-formed capacitor before it has time to form and damage your rectifier. Actually, it WOULD make sense with switchmode power supplies like the Apple II have IF you would cleanly disconnect everything downstream of the primary rectifier and filter circuit. Since that would mean temporarily modifying a very dangerous area in a power supply...&#xA;Also, I'd advise against slowly LOWERING the voltage with a variac in any case even on a linear power supply. That would eventually cause the pass transistors to fully open and let a lot of noise onto your supply rails and/or cause uneven undervoltage in the system - risking latchup effects and/or corruption of any writable permanent storage/memory if any is connected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On &quot;always connect a load&quot;: Especially true on earlier Apple II models, some have a power supply of a design (a feedback-less PSMPS ... what could possibly go wrong.) that will give nonsensical voltage readings over even take damage if not loaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and ... if a switchmode power supply seems to be completely dead, DO NOT disassemble it unless you know what you are doing. The worst failure mode (everything downstream of the rectifier/filter is open circuit, no bleeder resistors installed) could give you 400 volts worth of welcome weeks after being disconnected from the mains.&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="785" LastEditDate="2017-08-25T20:32:28.080" LastActivityDate="2017-08-25T20:32:28.080" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4583" PostTypeId="2" ParentId="3237" CreationDate="2017-08-25T15:27:22.150" Score="8" Body="&lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: I don't have enough experience to know which of these pins, if any, need to be &lt;code&gt;NOT&lt;/code&gt;ted in the converter. I could not find information about voltage either, so I have ignored it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use a multimeter before trying this. Make sure that the test floppy is unimportant and that you disconnect the drive if it is making suspicious noises.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, &lt;a href=&quot;https://chat.stackexchange.com/users/157247&quot;&gt;Giskard42&lt;/a&gt; suggests that &quot;[...] &lt;a href=&quot;https://chat.stackexchange.com/transcript/message/39623362#39623362&quot;&gt;when playing around with an unsure comms protocol, you use a series resistor for everything except power&lt;/a&gt; [because] &lt;a href=&quot;https://chat.stackexchange.com/transcript/message/39623384#39623384&quot;&gt;if you have a 1-10k resistor in series with each connection you make, the chance of blowing anything up becomes very low.&lt;/a&gt;&quot;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Mapping&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I am mapping the 40-pin to the 34-pin. The first number will be that of the 40-pin and the second will be that of the 34-pin.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;2 → 2&lt;/strong&gt;&lt;br&gt;&#xA;I suspect that this might need to be &lt;code&gt;NOT&lt;/code&gt;ted - the 40-pin &quot;High Density Select&quot; description suggests (to me!) that high means high-density but the 34-pin description explicitly states that high means low-density. (If the &quot;on&quot; state is low for the 40-pin then this can be wired up normally.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;8 → 8&lt;/strong&gt;&lt;br&gt;&#xA;On the 34-pin, low means Index (&quot;on&quot;). However, on pin 34 (disk change) high seems to mean &quot;on&quot;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;12 → 14/12&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;16 → 10/16&lt;/strong&gt;&lt;br&gt;&#xA;The 34-pin standard supports two drives, distinguished by a twist in the cable.&lt;sup&gt;&lt;a href=&quot;http://www.interfacebus.com/PC_Floppy_Drive_PinOut.html&quot; rel=&quot;noreferrer&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; The first number maps to / from drive A, and the second drive B.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;18-34 → 18-34&lt;/strong&gt;&lt;br&gt;&#xA;Everything else seems to match up perfectly, as if one standard was based on the other or both standards were based on the same (other) standard.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Pinouts&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Here is the pinout of a 40-pin PS/2 floppy connector:&lt;sup&gt;&lt;a href=&quot;http://ps-2.kev009.com/ohlandl/floppy/Floppy_Pinouts.html#40-pin_Card_Edge&quot; rel=&quot;noreferrer&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Pin Signal     Pin Signal&#xA; 1  Ground      2  -High Density Select&#xA; 3  Reserved    4  Reserved&#xA; 5  Ground      6  Reserved&#xA; 7  Ground      8  -Index&#xA; 9  Ground     10  Reserved&#xA;11  Ground     12  -Drive Select&#xA;13  Ground     14  Reserved&#xA;15  Ground     16  -Motor Enable&#xA;17  Ground     18  -Direction In&#xA;19  Ground     20  -Step&#xA;21  Ground     22  -Write Data&#xA;23  Ground     24  -Write Enable&#xA;25  Ground     26  -Track 0&#xA;27  Ground     28  -Write Protect&#xA;29  Ground     30  -Read Data&#xA;31  Ground     32  -Head 1 Select&#xA;33  Ground     34  -Diskette Change&#xA;35  Ground     36  Ground&#xA;37  Ground     38  +5VDC&#xA;39  Ground     40  +12VDC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is the pinout of a 34-pin IBM-PC floppy connector, excluding reserved and ground pins:&lt;sup&gt;&lt;a href=&quot;http://pinouts.ru/HD/InternalDisk_pinout.shtml&quot; rel=&quot;noreferrer&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;http://www.interfacebus.com/PC_Floppy_Drive_PinOut.html&quot; rel=&quot;noreferrer&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 2  /REDWC      --&amp;gt;     Density Select 1=Low/0=High&#xA; 8  /INDEX      &amp;lt;--     0=Index&#xA;10  /MOTEA      --&amp;gt;     0=Motor Enable A&#xA;12  /DRVSB      --&amp;gt;     Drive Sel B&#xA;14  /DRVSA      --&amp;gt;     Drive Sel A&#xA;16  /MOTEB      --&amp;gt;     0=Motor Enable B&#xA;18  /DIR        --&amp;gt;     0=Direction&#xA;20  /STEP       --&amp;gt;     0=Head Step&#xA;22  /WDATE      --&amp;gt;     Write Data&#xA;24  /WGATE      --&amp;gt;     Floppy Write Enable, 0=Write Gate&#xA;26  /TRK00      &amp;lt;--     0=Track 00&#xA;28  /WPT        &amp;lt;--     0=Write Protect&#xA;30  /RDATA      &amp;lt;--     Read Data&#xA;32  /SIDE1      --&amp;gt;     0=Head Select&#xA;34  /DSKCHG     &amp;lt;--     1=Disk Change/0=Ready&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;All of the odd-numbered pins are ground.&lt;sup&gt;&lt;a href=&quot;http://www.interfacebus.com/PC_Floppy_Drive_PinOut.html&quot; rel=&quot;noreferrer&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-08-25T15:57:34.797" LastActivityDate="2017-08-25T15:57:34.797" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4584" PostTypeId="2" ParentId="4545" CreationDate="2017-08-25T20:34:11.673" Score="5" Body="&lt;p&gt;I was just working on restoring an original c64 breadbin model and ran into the same issue you have: how do you safely desolder a multi-pin dip chip. I also happened to have a black screen of death failure. For a 40-pin chip it's gonna be nearly impossible to remove the chip with just a soldering iron and solder wick or a solder sucker. After I struggled to remove a bad dram chip using a soldering iron, solder wick and a solder sucker, I decided it was time to use the correct tool. You should use a vacuum desoldering iron, they run over a hundred dollars for one that will actually get the job done. I used one at the maker-space in my area. I would look for a maker-space or a university lab you might have access to before buying the tool. Using the correct tool I was able to remove the malfunctioning chips in a matter of minutes with minimal effort. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you mentioned that you have a black screen of death failure, you should realize that it can be caused by literally any chip on the motherboard going bad. It's more likely you damaged a CIA or PLA than the CPU given what you described. Since original 6510 CPUs are hard to come by, I would perform some serious debugging of all chips which could be malfunctioning before you proceed to destroy a possibly working CPU. In the case of my black screen fail I was able to isolate the failure to two bad dram chips. Once I desoldered them, installed sockets and replaced the chips the system booted up perfectly. You can easily test if your CPU is working by using a &quot;Dead Test Cartridge&quot;. If you plugin that cartridge and you see nothing on the screen then the cpu is bad. If the cpu is good you'll see periodic flashes of white on the screen indicating memory cells that are bad, if memory is mostly good you'll see a graphical diagnostics screen. These cartridges are continually being re-made and sold for ~$15 on ebay. If you don't want to go that route you can always use a logic probe to test the clock signal going in and out of the cpu and the address and data lines. If the cpu is good they should all be toggling. Good luck with your repair. &lt;/p&gt;&#xA;" OwnerUserId="4992" LastActivityDate="2017-08-25T20:34:11.673" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4585" PostTypeId="2" ParentId="4537" CreationDate="2017-08-25T22:37:41.897" Score="3" Body="&lt;p&gt;Tom Hunt created MTOS for Atari 8-bit computers in 1987. Details here: www.umich.edu/~archive/atari/8bit/Os/mtos.doc&lt;/p&gt;&#xA;" OwnerUserId="6782" LastActivityDate="2017-08-25T22:37:41.897" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4586" PostTypeId="2" ParentId="4581" CreationDate="2017-08-26T00:13:22.123" Score="4" Body="&lt;p&gt;This might sound harsch to some people over protective of their little C64, but best practice is just doing - it with apropriate caution ofc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Always check the inside for obvious dirt, dust, rust and damage. Remove if any. Next plug it in and power it up &lt;strong&gt;(keep the lid/cover closed).&lt;/strong&gt; If the machine has been stored in dry, clean condition, it should be fine anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There isn't anything you can't prevent without spending &lt;strong&gt;way&lt;/strong&gt; too much time. If a cap is dead or some short happened, they will blow anyway.  I did reactivate hundrest of machines over the years and basicly all just worked. The faulty ones usually had issues with dirt and rust, easy to detect before. Noe ever 'blow up' or caught fire. PS faults have been rather rare - and easy to detect when the breaker flips :)) Still, watch out for smell and smoke.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just got two Sourcerers after 30+ years of rather sub standard storage. Quite some rust, but no obvious problems when checking the boards. Both worked right away. The biggest issue was to find a plug converter, as these units had UK plugs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After almost 20 years, you might want to change the battery. At least if you intend to use the machine more often. It works fine with an empty one, but all setup (time, date, slot assignment) needs to be entered after each power up. The Battery is soldered in, so it needs some (easy) disassembly to change. AFAIR Digikey still got them listed. Use only (if possible) the original types (maybe of larger capacity), as look alikes may show different behaviour and reliability.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2017-08-26T00:13:22.123" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4587" PostTypeId="2" ParentId="4569" CreationDate="2017-08-26T09:44:20.023" Score="2" Body="&lt;p&gt;According to &lt;a href=&quot;http://visual6502.org/images/6502/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;visual6502.org's page of die images&lt;/a&gt;, the chip was produced with &quot;polysilicon&quot; which is &lt;a href=&quot;https://en.wikipedia.org/wiki/Polycrystalline_silicon&quot; rel=&quot;nofollow noreferrer&quot;&gt;apparently an alternative name for polycrystalline silicon&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-08-26T09:44:20.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4588" PostTypeId="2" ParentId="2762" CreationDate="2017-08-26T15:55:58.983" Score="1" Body="&lt;p&gt;I had a leaky battery on my Apollo 1240 card (it is the same PCB as the 1260) and desoldered it and replaced it with a Panasonic VL1220-1HFE rechargeable coin battery. Now the original battery had three pins, and the panasonic has two but I think the positive and negative terminals are marked on the card so just make sure you solder onto the right holes. The battery is larger than the original and extends past the sides of the card and the pins needed some creative &quot;bending&quot; to avoid the IC next to the battery. Otherwise no complaints - it has been working for two solid years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think this is the best solution. There is no need to a add second RTC and at any rate the Panasonic battery is more modern, rechargeable, and less likely to leak than the original and probably better than used RTC cards from eBay.&lt;/p&gt;&#xA;" OwnerUserId="6747" LastActivityDate="2017-08-26T15:55:58.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4590" PostTypeId="2" ParentId="4537" CreationDate="2017-08-27T20:44:40.497" Score="8" Body="&lt;p&gt;A great many Atari-era games ran in two threads.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thread attended to gameplay, listening to controller input, keeping score, arranging the playfield, cueing sounds.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second thread was responsible for sprite-juggling to render the playfield in a more complex way than the hardware designers imagined. The purpose of the added complexity was to be more competitive to other games,  or emulate the better hardware in arcade machines.  This thread effectively &quot;followed the raster&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was preemptive/cooperative.  At a certain point in the sweep/scan, the display hardware fired a hardware interrupt which (preemptively) launched the raster thread. It quit voluntarily (cooperatively) when the raster reached the last point of its concern.  If it failed to quit, the game would crash.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the gameplay module was unable to complete an entire &quot;cycle&quot; of tasks in a single display sweep, that wasn't the end of the world.  You could intentionally run the gameplay module on a 2-frame or 3-frame cycle if that made sense, or let it roll asynchronous.  Animation or polling tasks that didn't like being asynchronous could also be off-loaded onto the end of the raster thread.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;During debugging, you would set the screen border color to different colors for different tasks, e.g. blue for raster-chasing work, red for gameplay tasks handled by the raster interrupt, and green or rotating colors for the main thread.   You could watch the colors dance up and down the screen while you playtested, and watch for conditions that overloaded the game.  &lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2017-08-27T21:09:16.827" LastActivityDate="2017-08-27T21:09:16.827" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4591" PostTypeId="1" CreationDate="2017-08-28T14:00:05.647" Score="9" ViewCount="8753" Body="&lt;p&gt;What is the proper way to restore and re-ink old typewriter, calculator, dot matrix printer, and mainframe lineprinter ribbons?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually fabric ribbons or open-cell foam sponge rollers were used to hold ink for these machines. When the ink dried out, you'd take off the ribbon or roller, throw it away, and install a new one. But since most of this technology is obsolete, the supply chain for replacement ribbons/rollers shut down long ago.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But an old ribbon or roller probably could be recovered. There is probably still ink pigment on it, but the ink has become dry, so it won't transfer to the paper anymore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since most printer ribbons are exposed to the air all the time and are not capped/sealed between uses, the liquid must be very slow drying.. I assume the original ink was a mix of some kind of light oil plus pigment. Possibly a super-slow-drying &quot;rubber&quot; ink like is used on newsprint and offset-press systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am mainly talking about solid black ink ribbons. I assume the special multi-color ribbons with bands of ink on a single ribbon (like the Cyan / Magenta / Yellow / Black for the Apple Imagewriter II printer) are a lost cause with little to no hope of making it work like new again. Or is there also a solution for restoring/re-inking those?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-09-17T07:19:49.727" Title="How to renew and re-ink old printer ribbons?" Tags="&lt;restoration&gt;&lt;repair&gt;&lt;printer&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4592" PostTypeId="2" ParentId="4591" CreationDate="2017-08-28T14:16:53.160" Score="6" Body="&lt;p&gt;I don't know if this is the &quot;best&quot; solution, but I have found applying Singer light sewing machine oil to a dried-out fabric printer ribbon appears to be effective. This oil is odorless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amazon: &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B000YZ1Y06&quot; rel=&quot;noreferrer&quot;&gt;https://www.amazon.com/dp/B000YZ1Y06&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apply sparingly a drop at a time, and then set the ribbon aside and allow it time to soak or it will make a mess on the paper if you try to use it right away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though a problem is getting the oil to spread evenly across a long loop ribbon so that print is equally dark across the entire length of the ribbon. If the ribbon has a cartridge body, it seems best to open the case and apply a drop to the packed ribbon inside. (Be careful to not dislodge the drive wheel.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If allowed time to soak, the oil will diffuse across all the ribbon sections bunched together. If there is a drive wheel for the ribbon, spinning it with an electric drill to advance the ribbon will also over time help to distribute the oil.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-08-28T14:16:53.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4593" PostTypeId="2" ParentId="4591" CreationDate="2017-08-28T14:17:50.580" Score="5" Body="&lt;p&gt;In the old days(tm) it was common to reink fabric ribbons for typewriters, in fact, the early ones where made that way. I kept using that practice during the 70s and 80s for daisy wheel and dot matrix printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In theory ribbons could be reinked an unlimited time, but in reality wear on the fabric (too much movement due the hammer) limited this to like a dozend times at max. At least if you still wanted the result to be good looking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are still a few shops selling typewriter ink. Well, at least over here, which is Munich/Germany :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-08-28T20:28:22.677" LastActivityDate="2017-08-28T20:28:22.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4594" PostTypeId="2" ParentId="195" CreationDate="2017-08-28T17:04:57.903" Score="4" Body="&lt;p&gt;While I agree completely with some of the answers posted above about using a single transformer to get the 9VAC followed by a bridge rectifier a SMPS to get the 5VDC lines in a single circuit is technically the best solution, it is not a simple or inexpensive solution, requiring knowledge of power electronics and possibly PCB layout, and some time between design and getting your supply working. You can always buy custom made power supplies like these that will run you ~$80-$120 + shipping, but you'll likely have to wait for international shipping or wait for the custom supply to be built for you then shipped. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking to get your C64 up and running quickly and with minimal design knowledge required, you should go with a simpler setup involving using two existing wallwart type supplies to get the 9VAC@1A and the 5VDC@1.5-2A voltages which you an then wire up to our own cable to a 7-pin DIN connector. For the 9VAC you can use a pre-built 120VAC-9AC @1A wallwart. For the 5VDC, a common smartphone usb charger employing a SMPS that supplies 1.5-2A (depending on the modern accessories you intend to connect to your c64 which may exceed the original 1.5A spec by the original power supply). I followed suggestions on &lt;a href=&quot;http://dannygalaga.com/c64.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://dannygalaga.com/c64.html&lt;/a&gt; who describes how to make the cable housing for such a power supply. Then located an old android charger rated for 2A and got a USB Type-A Male to 2.5mm barrel connector male cable, a 120VAC-9VAC@1.5A with 2.1mm barrel connector male, a bag of cheap 2.1mm female barrel connectors, a 7-pin din connector, some AWG 22 wire, and heat shrink tubing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using this method I was able to put together a functional power supply for my c64 with parts I mostly sourced locally or got quickly thorough amazon and built the supply for ~$22. I was able to assemble the supply cable in around half an hour with minimal issues. If you connect everything correctly your connector should look something like this &lt;a href=&quot;https://en.retrogamesupply.com/products/power-supply-cable-adapter-for-commodore-64-64c&quot; rel=&quot;nofollow noreferrer&quot;&gt;power-supply cable adapter for c64&lt;/a&gt;. &#xA;It should be noted though that there are some concerns in the community about there potentially being ripple on the supply due to the to separate supplies not having a fused ground inside the supplies themselves (like you would get from having a single transformer design), but the grounds are fused within the c64 motherboard's power supply circuitry and the stead-state voltages within the c64 are all stable matching expected inputs to the chips on board. Sometime soon I'll do some analysis of the power characteristics of this dual-supply design using a scope and post back details on if electrically non-negligible ripple-issues. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some parts that I used which may be helpful:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.osepp.com/accessories/cables/34-usb-barrel-jack-adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;USB Type-A Male to 2.1mm barrel connector&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00B886CWS&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jameco Reliapro ADU090150A2231 AC to AC Wall Adapter Transformer 9V @ 1500 mA Straight 2.1 mm Female Plug, Black&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B01LRXIMP8&quot; rel=&quot;nofollow noreferrer&quot;&gt;5.5mm x 2.1mm Female DC Power Socket Jack Solder Connector Adapter Pack&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00PZSGGZ0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pair Black Plastic DIN 7 Pins Female Male Audio Video AV Adapter 6mm&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4992" LastActivityDate="2017-08-28T17:04:57.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4595" PostTypeId="1" AcceptedAnswerId="4597" CreationDate="2017-08-28T21:11:57.367" Score="5" ViewCount="579" Body="&lt;p&gt;Early American Donkey Kong arcade machines used  US Set 1 and the game title had &quot;1981 Nintendo&quot; as the copyright. Later US boards used Set 2 and Nintendo changed the copyright title to &quot;1981 Nintendo of America&quot;. What was the main reason for changing the wording of the copyright title?&lt;/p&gt;&#xA;" OwnerUserId="1880" LastActivityDate="2017-08-29T01:00:08.067" Title="Why did Nintendo change their copyright title between Donkey Kong Set 1 and 2?" Tags="&lt;nintendo&gt;&lt;arcade&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4596" PostTypeId="2" ParentId="3150" CreationDate="2017-08-28T22:09:31.380" Score="12" Body="&lt;p&gt;From personal communication with &lt;a href=&quot;http://offog.org&quot; rel=&quot;noreferrer&quot;&gt;Adam Sampson&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I think it's fairly likely that the designers of your 1979 dialect of&#xA;  Pascal were thinking of this as a feature to support (what was then&#xA;  called) &quot;backtrack programming&quot; for AI-like applications, rather than as&#xA;  an exception handling mechanism...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;There were several programming languages experimenting with approaches&#xA;  to backtracking in the mid-late 70s, Prolog probably being the&#xA;  best-known result (&quot;branch&quot; is equivalent to a Prolog predicate with&#xA;  multiple rules, where failure inside one rule causes control flow to&#xA;  backtrack to the next rule). Your branch/back construct would be pretty&#xA;  handy if you were trying to write a tree search algorithm with pruning&#xA;  (e.g. a classic board game AI), or a backtracking parser.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Here's a 1974 survey which sketches the backtracking idea (p157) and&#xA;  describes some early implementations:&#xA;  &lt;a href=&quot;http://dl.acm.org/citation.cfm?id=356632&quot; rel=&quot;noreferrer&quot;&gt;http://dl.acm.org/citation.cfm?id=356632&lt;/a&gt;&#xA;  (also &lt;a href=&quot;http://www.ai.sri.com/pubs/files/1499.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.ai.sri.com/pubs/files/1499.pdf&lt;/a&gt; - Leo B.)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This 1977 paper gives a denotational semantics for backtracking, and is&#xA;  fairly widely cited by later work:&#xA;  &lt;a href=&quot;https://link.springer.com/article/10.1007/BF00289245&quot; rel=&quot;noreferrer&quot;&gt;https://link.springer.com/article/10.1007/BF00289245&lt;/a&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;(Note in particular that it calls its equivalent of &quot;branch&quot; the&#xA;  &quot;alternative&quot; operator -- which might explain your &quot;exit on ALT&quot;&#xA;  message?)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This 1979 paper takes the idea and generalises it to work with&#xA;  coroutines (using Pascal for examples, although with different syntax):&#xA;  &lt;a href=&quot;http://dl.acm.org/citation.cfm?id=357062.357063&quot; rel=&quot;noreferrer&quot;&gt;http://dl.acm.org/citation.cfm?id=357062.357063&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As a matter of fact, similar program behavior and flow of control, except the &quot;zero matches everything&quot; part, could be expressed almost as succinctly in ALGOL-60 using formal parameters-labels:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;       1.     ’BEGIN’&#xA;       2.         ’PROCEDURE’ M(I, X, Y);&#xA;       3.         ’VALUE’ I; ’INTEGER’ I; ’LABEL’ X, Y;&#xA;       4.         ’BEGIN’&#xA;       5.             ’IF’ I &amp;lt; 20 ’THEN’ ’BEGIN’&#xA;       6.                 M(I+1, Y, A);&#xA;       7.                 ’GOTO’ X;&#xA;       8.             ’END’ ’ELSE’ ’IF’ ’FALSE’ ’THEN’&#xA;       9.                 A: PRINT(I, NEWLINE);&#xA;      10.         ’END’;&#xA;      11.         M(0, T, T);&#xA;      12.         T:&#xA;      13.     ’END’ ’EOP’&#xA;&#xA;LINE                                            ADDRESSES(OCTAL)&#xA;                1        2        3        4        5        6        7        8        9        0&#xA; 1 -  10      00001    00001             00003    00003    00004    00014    00015    00017    00022&#xA;11 -  13               00030    00031&#xA;&#xA; &amp;gt;&amp;gt;&amp;gt; PROGRAM &amp;lt;&amp;lt;&amp;lt;        LENGTH:    35 (00043)      TIME:   0,00 SEC. (CP:   0,00 SEC.)          ALGOL-COMPILER 16.IV.75&#xA;&#xA;       *EXECUTE&#xA;         17&#xA;         14&#xA;         11&#xA;          8&#xA;          5&#xA;          2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-09-16T00:47:17.997" LastActivityDate="2017-09-16T00:47:17.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4597" PostTypeId="2" ParentId="4595" CreationDate="2017-08-28T22:27:11.340" Score="10" Body="&lt;p&gt;Quite simple, Nintendo of America was incorporated in 1982 in Redmond (!). Nintendo of America acted from there on as sole copyright holder for all sales within the US.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before that US sales where in the name of the Nintendo (Japan). But copyrights are still today a national issue, where foreign companies may have a hard time to get their rights acknowledged. Even more so in the 80s. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-08-29T01:00:08.067" LastActivityDate="2017-08-29T01:00:08.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4598" PostTypeId="1" AcceptedAnswerId="4600" CreationDate="2017-08-29T08:08:25.377" Score="13" ViewCount="1311" Body="&lt;p&gt;Which programming language was the first to use &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Pattern_matching&quot; rel=&quot;noreferrer&quot;&gt;pattern match&lt;/a&gt;?&#xA;The oldest ones I know are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Prolog 1972&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ML 1973&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Are there languages older that have pattern matching?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By pattern matching I mean you can use patterns to control the flow of exection, like in Haskell for example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;factorial 0 = 1&#xA;&#xA;factorial n = n *factorial  (n-1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here we match with 0 if we call (factorial 0).&#xA;And we match n if we call (factorial 1).&#xA;You can use _ if you want to match with anything and you have list matching too with (head:tail) .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use this to replace all if else and switch statments and it can do more.&lt;/p&gt;&#xA;" OwnerUserId="6801" OwnerDisplayName="Mustafa" LastEditorUserId="4025" LastEditDate="2017-08-30T05:54:17.120" LastActivityDate="2019-08-11T17:59:39.433" Title="Pattern matching, which language first had it" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4599" PostTypeId="2" ParentId="4598" CreationDate="2017-08-29T09:32:30.690" Score="7" Body="&lt;p&gt;Probably the &lt;a href=&quot;https://en.wikipedia.org/wiki/Timeline_of_programming_languages&quot; rel=&quot;noreferrer&quot;&gt;first language&lt;/a&gt; to use string patterns was &lt;a href=&quot;https://en.wikipedia.org/wiki/COMIT&quot; rel=&quot;noreferrer&quot;&gt;COMIT in 1957&lt;/a&gt;. This was the predecessor to &lt;a href=&quot;https://en.wikipedia.org/wiki/SNOBOL&quot; rel=&quot;noreferrer&quot;&gt;SNOBOL in 1962&lt;/a&gt; from which it is considered most string processing language features claim their origin.&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2017-08-29T09:32:30.690" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4600" PostTypeId="2" ParentId="4598" CreationDate="2017-08-29T14:41:05.977" Score="15" Body="&lt;p&gt;&lt;a href=&quot;http://wikipedia.org/wiki/Refal&quot; rel=&quot;noreferrer&quot;&gt;Refal&lt;/a&gt; (conceived 1966, implemented 1968) is a language built upon the idea of structured pattern-matching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A function definition is a sequence of constructs &quot;pattern = replacement&quot;, operating on the function argument that consists of a sequence of terms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each term is either a symbol (a character or a meta-symbol like a number of a function ID), or a parenthesized sequence of terms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A pattern is a similarly-structured sequence with free variables that can match individual symbols, terms or &quot;expressions&quot; (sequences of terms), as well as literal symbols.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A replacement is a sequence of terms with potential function call terms that use magic parentheses and the sequence in parentheses starts from a function ID.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The examples on the Wiki page, like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; Fact { 0 = 1;&#xA;    s.N = &amp;lt;* s.N &amp;lt;Fact &amp;lt;- s.N 1&amp;gt;&amp;gt;&amp;gt;; }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;don't do the language justice; the main feature of the language is the ability to pattern-match structured data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The language had a counter-culture popularity in the programming circles in the USSR after the author had to emigrate to the U.S. in 1977, and was taught by the author, &lt;a href=&quot;https://en.wikipedia.org/wiki/Valentin_Turchin&quot; rel=&quot;noreferrer&quot;&gt;Valentin Turchin&lt;/a&gt;, in the City College of New York until his death in 2010. Now, unfortunately, the reference links on the Refal wiki page are also dead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Searching for &quot;refal&quot; on &lt;a href=&quot;https://github.com/search?utf8=%E2%9C%93&amp;amp;q=refal&amp;amp;type=&quot; rel=&quot;noreferrer&quot;&gt;Github&lt;/a&gt; returned 1599 matches, though.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-08-29T14:56:12.030" LastActivityDate="2017-08-29T14:56:12.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4601" PostTypeId="1" AcceptedAnswerId="4630" CreationDate="2017-08-29T20:38:47.170" Score="6" ViewCount="667" Body="&lt;p&gt;The Homebrew game &quot;pointless fighter&quot; (&lt;a href=&quot;https://youtu.be/PReg7pPcbIY&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/PReg7pPcbIY&lt;/a&gt;) has graphics and animations substantially better than most of the MSX2 games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a technical breakthrough which permits such achievement?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How is it implemented?&lt;/p&gt;&#xA;" OwnerUserId="124" LastEditorUserId="148" LastEditDate="2017-08-30T05:11:57.100" LastActivityDate="2017-09-02T21:47:04.697" Title="How does the MSX2 game &quot;pointless fighter&quot; obtain a graphic above the average?" Tags="&lt;msx&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4602" PostTypeId="2" ParentId="4601" CreationDate="2017-08-29T23:45:13.333" Score="3" Body="&lt;p&gt;I haven't looked at the code, but here's how I think it works: the Yamaha V9938 video chip supports 8 sprites of 16x16 full-color pixels per scanline. That's 128 pixels which is half of the screen width. But each fighter can be &gt;64 pixels (4 sprites) wide, plus there might be a fireball on the same scanline, so you can't simply assign 3 sprites to each fighter plus 2 sprites to the fireball and call it done. Therefore, the clever part is managing those limited sprites in a way that minimizes visual glitches. Maybe if you play the game long enough and watch closely, you might see one.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-08-29T23:45:13.333" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4603" PostTypeId="2" ParentId="4591" CreationDate="2017-08-30T00:30:31.663" Score="2" Body="&lt;p&gt;The old received wisdom was that WD-40 sprayed on the ribbon would give it new life. And it certainly would (briefly) but it could also leave greasy marks that migrated through the paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What could work was a few drops of endorsing ink (oil-based stamp pad ink) in the right place. You had to be very careful not to use too much, or your printing came out a sticky, smeary mess that would take days to dry. It also tended to build up on the ribbon seam, causing regular heavy blots. I used to be able to re-ink my DMP-2000 ribbons until they wore out, but they were hardly correspondence quality after a few refills.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-08-30T00:30:31.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4604" PostTypeId="1" AcceptedAnswerId="4605" CreationDate="2017-08-30T00:59:13.083" Score="12" ViewCount="838" Body="&lt;p&gt;So being a sysadmin for several years, I learned that &quot;Jesus saves, but God makes tape backups,&quot; several times over. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Watching Season 2 of Halt and Catch Fire, there is some data loss. &lt;/p&gt;&#xA;&#xA;&lt;blockquote class=&quot;spoiler&quot;&gt;&#xA;  &lt;p&gt; Season two, episode three, Gordon unleashes Sonaris on the Mutiny network, wiping not only the corporate drives, but some customers' as well &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Being that the show takes place in the mid 1980s, what were their options for (potentially centralized) backups of production data? There's some allusion to re-installing the backup drives; I assumed these were dumb, block-level clones taken when there was some extra slack in the network, not some good managed backup framework with fancy things like deduplication or application snapshots. &lt;/p&gt;&#xA;" OwnerUserId="6804" LastActivityDate="2018-10-17T01:52:31.200" Title="Old school backup systems: what are they?" Tags="&lt;software&gt;&lt;backup&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4605" PostTypeId="2" ParentId="4604" CreationDate="2017-08-30T02:40:58.680" Score="16" Body="&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;  Backup (of local data) at the time the show is set was mostly done to floppy disks, and even when using a network, all was at the mercy of the user to remember doing it (some companies tied backup into system boot, but then there are zillions of stories about users disabling it, 'cause waiting sucks).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Backup of centralized data was done independant and with whatever the mini or mainframe provided (usually tapes).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Being that the show takes place in the mid 1980s, what were their options for (potentially centralized) backups of production data?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Quite similar to today, well except large disk arrays that is. Tapes where the choice since the mid 70s (when they slowly came out of fashion as main storage). Since then they ofc improved quite a lot. Where originally 6250 bpi tapes where standard, the mid 70s brought the introduction of various cassette based tape systems. While there was quite some competition, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Quarter-inch_cartridge&quot; rel=&quot;noreferrer&quot;&gt;QIC&lt;/a&gt; standard did gather the largest market share in the non proprietary market (What a bunch of words to say that IBM didn't care and developed their own standards (LTO)).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the early 80s, which is the seting for the show, four and nine track QIC drives where most common, used with 300, 450 and 600 ft tapes. Cassettes where named according to the tape length, so a DC300 held a 300 ft tape. Four track QIC drives stored about 20 MiB on a 300 ft tape, while the nine track variant doubled this to 40 MiB (plus better error correction). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At said timeframe these drives where mostly used in (UNIX) minicomputers and in top end workstations (Apollo for example delivered most machines with a QIC drive). For simple PCs, such drives where available but rather rare. Keep in mind that during the first half of the 80s, floppy-only machines were still common. It wasn't until 1983 that IBM introduced the XT with a standard option for a hard disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess that the part of the show where next to every machine has a HD is less historically correct, but necessary to make it belivable to today's viewers :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides QIC, there where other standards which did get some audience during early PC times. For example DCC, working on compact cassete like drives, but using a digital format with special tapes. They could store similar amounts per cassette, but has slower access times. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yes, single machines could have been equipped with tape drive (QIC or other), but it's rather unlikely that it got rolled out all across a company. In context of the show, some introduction of a company invented new device would make sense... much like the Iomega did with the Ditto drives in the 90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The standard medium for backup were floppy disks. From today's view this may sound impossible, when a single letter can have several megabytes, and a floppy just holds 360 KiB, but back then programs didn't use bloated markup. Even with a lot of formatting a word processor file stayed under twice the amount of visible characters. A rule of thumb for letters were about 2-3 KiB per page. So one floppy could well store a hundred pages without compression or alike. Quite workable for a weekly differential storage for a single PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, while there have been solutions available even before the IBM PC got introduced, the real need for tape drives for single users didn't manifest before the mid 90s, when disk sizes and more importantly data formats increased exponentially in size.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There's some allusion to re-installing the backup drives; I assumed these were dumb, block-level clones taken when there was some extra slack in the network, not some good managed backup framework with fancy things like deduplication or application snapshots.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why not?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, I have to admit, I neither watched the show closely nor do I have an idea what kind of network / mini / mainframe setup is featured. But since the premise is about a PC company, it's safe to assume that there is a lot of workstation orientated application and data storage, so decentralized data (data stored on each workstation) needs to be backed up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering a network with most PCs connected (rather unusual for the early 1980s) it's quite possible that there was some IBM mainframe with extensive tape storage used to backup workstations. Usually the backup would be made in two stages: first the single PCs would be backed up onto mainframe disks with separate areas for each user, and in a second step all these user backups would be exported to tape.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;block-level clones&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most likely not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The backups in step one would NOT be made up from simple block copies, but rather on file level and differential, meaning that only files changed since last backup will be copied. DOS supports this strategy since 1.0 via the &lt;a href=&quot;https://en.wikipedia.org/wiki/Archive_bit&quot; rel=&quot;noreferrer&quot;&gt;Archive bit&lt;/a&gt;, inherited from CP/M 2.2.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;taken when there was some extra slack in the network&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not in the early 80s and on PCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-DOS was a single user single task operating system. There was no room for a backgound process nor the necessary interfaces to do a backup without interfering with the user. DOS wasn't reentrant and the archive bit mechanics did not work well in a multi-tasking environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Backup was strictly a process done at will and never really in the background. Considering the meager amounts of data to back up, even over a slow network all transfer could be done during a day in a few minutes. So no need for additional complexity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course one could assume they were using some kind of multitasking environment running every PC, but that's extremely far fetched, as Desq (later named DESQview) wasn't introduced until 1984 and at first was 'just' a switcher on top of DOS, thus not able to run an independent background process. The 386 changed this, but that again should be way beyond the time frame the show is set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar for Novell's Netware (to consider the network side). Until Netware 286 V2.0 (?1986 or 87?) it was a strict add on to DOS, hooking some functions to redirect access to a specified 'drive' over the network. All activity was client initiated. Again, no background processes at all, thus none waiting for 'network slack' to do some background.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, there are zillions of other posibilities and combinations, I tried to stay with the most common/generic.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="357" LastEditDate="2017-09-05T07:38:17.950" LastActivityDate="2017-09-05T07:38:17.950" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4607" PostTypeId="1" AcceptedAnswerId="4608" CreationDate="2017-08-30T14:04:24.137" Score="16" ViewCount="2275" Body="&lt;p&gt;After loading a file list from a floppy disk it is hard to program in BASIC because the file list is interpreted as BASIC lines.&lt;br&gt;&#xA;For example there can be 20 lines with the number 1, because 20 files have a file size of one, so to delete them, you have to type 1+RETURN 20 times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to use BASIC in this case without having to Soft Reset or Hard Reset the C64?  &lt;/p&gt;&#xA;" OwnerDisplayName="user6734" LastActivityDate="2019-12-02T15:48:28.833" Title="How to use BASIC after &quot;LOAD &quot;$&quot;,8 on the C64" Tags="&lt;commodore-64&gt;&lt;basic&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4608" PostTypeId="2" ParentId="4607" CreationDate="2017-08-30T14:10:56.313" Score="27" Body="&lt;p&gt;Try using the &quot;new&quot; command.  This clears BASIC's memory, so that you can write a new program.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-08-30T14:10:56.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4611" PostTypeId="2" ParentId="4570" CreationDate="2017-08-30T21:04:40.163" Score="1" Body="&lt;p&gt;There was some speculation (by competitors?) that the second SH processor was added by request of the marketing department, and not because engineering found it to be useful in typical game code.  It's addition might have been justified by the use of synthetic (and unrealistic?) benchmark numbers for marketing the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Current MT/MP systems have similar issues, but use wider bus widths, higher transfer speeds and multiple levels of much larger caches and buffers to better hide the issues in some current typical application methodologies.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2017-08-30T21:04:40.163" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4612" PostTypeId="2" ParentId="2767" CreationDate="2017-08-31T02:56:51.410" Score="1" Body="&lt;p&gt;What &lt;a href=&quot;http://homebrew.sh&quot; rel=&quot;nofollow noreferrer&quot;&gt;homebrew&lt;/a&gt; will install for you on MacOS as of today (Aug. 30 2017) is simh V3.9, which does look to be the latest non-beta release at present.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A beta release of simh V4.0 is available that is also supported on current and recent versions of MacOS. You can find it at &lt;a href=&quot;https://github.com/simh/simh&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/simh/simh&lt;/a&gt; if you're interested. V4.0 introduces support for emulating quite a few new processors and variants of already supported processors, as well as many enhancements to simh itself.&lt;/p&gt;&#xA;" OwnerUserId="6808" LastEditorUserId="6808" LastEditDate="2017-08-31T18:18:22.690" LastActivityDate="2017-08-31T18:18:22.690" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4613" PostTypeId="2" ParentId="3175" CreationDate="2017-08-31T03:46:10.423" Score="4" Body="&lt;p&gt;There are emulators for the historically significant systems produced by Control Data Corp. &lt;a href=&quot;/questions/tagged/cdc&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;cdc&amp;#39;&quot; rel=&quot;tag&quot;&gt;cdc&lt;/a&gt; and Cray &lt;a href=&quot;/questions/tagged/cray&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;cray&amp;#39;&quot; rel=&quot;tag&quot;&gt;cray&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://members.iinet.net.au/~tom-hunter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DtCYBER&lt;/a&gt;&lt;/strong&gt;, which can be run on Windows and Linux and is available as source code under GPL 3.0 terms.  &lt;strong&gt;DtCYBER&lt;/strong&gt; &lt;em&gt;does not&lt;/em&gt; include operating systems, compilers, etc., which the user must provide for themselves--a tall order, but probably not impossible.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.cray-cyber.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cray-cyber.org&lt;/a&gt; operates Internet-accessible CDC, Cray, and other historic mainframe and supercomputer-class systems, running their historic operating systems. These include an actual working instance of &lt;strong&gt;DtCYBER&lt;/strong&gt; running CDC's NOS V2.8.7 operating system as well as its Fortran compiler FTN5.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.LivingComputers.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;Living Computers&lt;/a&gt; operates a freely accessible CDC 6500 running NOS V1.3, in addition to Digital Equipment Corp.s mainframe DECSYSTEM-2065 (running &lt;a href=&quot;/questions/tagged/tops-10&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;tops-10&amp;#39;&quot; rel=&quot;tag&quot;&gt;tops-10&lt;/a&gt; v7.04) and the desktop-sized &lt;a href=&quot;/questions/tagged/xkl&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;xkl&amp;#39;&quot; rel=&quot;tag&quot;&gt;xkl&lt;/a&gt; Toad-2 &quot;mainframe&quot;, a 1990's era system built around a single-chip, radically enhanced implementation of the &lt;a href=&quot;/questions/tagged/decsystem-20&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;decsystem-20&amp;#39;&quot; rel=&quot;tag&quot;&gt;decsystem-20&lt;/a&gt; processor architecture, running &lt;a href=&quot;/questions/tagged/tops-20&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;tops-20&amp;#39;&quot; rel=&quot;tag&quot;&gt;tops-20&lt;/a&gt; V7.1. I haven't checked, but I imagine they all have FORTRAN.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;CDC's products included a number of the systems most deserving of the label &lt;a href=&quot;/questions/tagged/mainframe&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;mainframe&amp;#39;&quot; rel=&quot;tag&quot;&gt;mainframe&lt;/a&gt; based on historic usage of that term. These were physically &lt;em&gt;large&lt;/em&gt; systems that took up a lot of real estate (see photo below of a CDC 7600), required (some of them) special power like 400 Hz AC and chilled water cooling, and could cost as much as $10 million in 1960's-era dollars. (That's mid to high tens of millions in 2017 dollars, perhaps over $100 million for whatever the most expensive would have been.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;/questions/tagged/operating-systems&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;operating-systems&amp;#39;&quot; rel=&quot;tag&quot;&gt;operating-systems&lt;/a&gt; these old systems use (e.g. NOS, NOS/BE, SCOPE, etc., for the CDC systems) are extremely obscure these days. I &lt;em&gt;have&lt;/em&gt; been able to find some documentation on various websites for the compilers and operating systems. (Cray-cyber.org hosts some documentation themselves.)&#xA;&lt;hr&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Photo purported to be of a CDC 7600 supercomputer&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://c1.staticflickr.com/5/4096/4885200509_fe1bda8c31_b.jpg&quot; alt=&quot;CDC 7600&quot;&gt; &#xA;&lt;a href=&quot;/questions/tagged/hardware&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;hardware&amp;#39;&quot; rel=&quot;tag&quot;&gt;hardware&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6808" LastEditorUserId="6808" LastEditDate="2017-08-31T18:53:52.273" LastActivityDate="2017-08-31T18:53:52.273" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4614" PostTypeId="2" ParentId="3175" CreationDate="2017-08-31T10:24:58.053" Score="3" Body="&lt;p&gt;Beside the already mentiond Hercules emulation, why not using a real mainframe?&lt;/p&gt;&#xA;&lt;p&gt;The &lt;em&gt;Gesellschaft für historische Rechenanlagen&lt;/em&gt; (Society for Historic Computing Machinery) in Munich does offer a free remote login to a (rather modern, 1988) &lt;strong&gt;&lt;a href=&quot;http://www.cray-cyber.org/systems/yel.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cray Y-MP&lt;/a&gt;.&lt;/strong&gt; The Y-MP runs usually 24/7. On selected days, a &lt;strong&gt;&lt;a href=&quot;http://www.cray-cyber.org/systems/cy960.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;CDC Cyber 960&lt;/a&gt;,&lt;/strong&gt; the last iteration of the CDC6600 design, can be accessed. Both machines are equipped with stock FORTRAN compilers. So all you need is to upload your programms, compile and run it in a classic (well, 1980s) environment on a real machine. If needed, older OS Environments might also available (on the 960), but I'm not sure if they can be accessed over the internet.&lt;/p&gt;&#xA;&lt;p&gt;Number crunching in FORTRAN on a CDC is about as classic as it ever can get.&lt;/p&gt;&#xA;&lt;p&gt;I can imagine that they will also support you in using these machines for a reasonable sized course (donations are welcome as all of this is paid out of their personal pockets).&lt;/p&gt;&#xA;&lt;p&gt;Now, with some &lt;em&gt;pretty please,&lt;/em&gt; it's even possible to show up with a bundle of punch cards and have them run to get an output as &lt;strong&gt;punch cards and printouts&lt;/strong&gt; on a classic line printer &lt;strong&gt;on green and white forms.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Caveat: They are moving between different buildings, so I'm not sure about actual location and if conectivity is abailable at all. Just write a mail ( mail at cray-cyber.org ) to check whats possible.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="632" LastEditDate="2020-10-06T08:47:26.403" LastActivityDate="2020-10-06T08:47:26.403" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="4615" PostTypeId="1" CreationDate="2017-08-31T12:30:23.793" Score="14" ViewCount="2069" Body="&lt;p&gt;The fast inverse square root algorithm is probably best known for its use in Quake III Arena, the source code of which was released to the public a few years after its release. However, the algorithm was used much earlier than this - &lt;a href=&quot;https://en.wikipedia.org/wiki/Fast_inverse_square_root&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt; gives Gary Tarolli's implementation for the SGI Indigo as a &lt;em&gt;possible&lt;/em&gt; earliest known use.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float fast_InvSqrt(float n) {&#xA;    union {float f; long l;} approx = n&#xA;    approx.l = 0x5f3759df - (approx.l &amp;gt;&amp;gt; 1); /* Fast inverse square root */&#xA;    approx.f = y * (1.5F - (0.5f * n * approx.f * approx.f)); /* Newton's method */&#xA;    return approx.f;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Fast InvSqrt algorithm contains one or two iterations of Newton's method, but this question is asking mainly about the line &lt;code&gt;approx.l = 0x5f3759df - (approx.l &amp;gt;&amp;gt; 1);&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Who first developed Fast InvSqrt()? Where did &lt;code&gt;0x5f3759df&lt;/code&gt; originally come from?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-08-31T15:58:11.157" LastActivityDate="2018-06-13T20:50:27.880" Title="Where did Fast InvSqrt() come from?" Tags="&lt;history&gt;&lt;software&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4616" PostTypeId="2" ParentId="4615" CreationDate="2017-08-31T12:47:48.987" Score="-1" Body="&lt;p&gt;Who developed the algorithm?  That is in the comments of the code you have posted - Isaac Newton.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Newton's algorithm is a known mathematical iterative technique.  To quote from &lt;a href=&quot;http://www.wolframalpha.com/input/?i=Newton%E2%80%99s+iteration&amp;amp;lk=1&amp;amp;rawformassumption=%22ClashPrefs%22+-%3E+%7B%22MathWorld%22,+%22NewtonsIteration%22%7D&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wolfram Alpha&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/N4S43.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/N4S43.png&quot; alt=&quot;Newton&amp;#39;s Iteration&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This can be coded in a language like Mathematica (not exactly a RetroComputing language) using a simple construct such as: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Entity[&quot;MathWorld&quot;, &quot;NewtonsIteration&quot;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The hex codes that you ask about are hard-coded representations of seed values into this algorithm.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-08-31T12:55:27.610" LastActivityDate="2017-08-31T12:55:27.610" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4618" PostTypeId="1" AcceptedAnswerId="4619" CreationDate="2017-08-31T14:03:17.740" Score="35" ViewCount="5209" Body="&lt;p&gt;Apple's UCSD Pascal for the Apple II used its own file system rather than the existing DOS 3.3 of the day. I'm not sure if it overlapped SOS at all, but regardless of timelines it seems that the Pascal file system was separate and incompatible from SOS and the later derived ProDOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the point of Apple Pascal having its own file system? Why couldn't it have just used DOS 3.3 or at least ended up serving as a compatible base for SOS / ProDOS?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="4025" LastEditDate="2018-08-08T05:31:14.453" LastActivityDate="2018-08-08T05:31:14.453" Title="What was the point of Apple Pascal having its own file system?" Tags="&lt;apple-ii&gt;&lt;file-system&gt;&lt;pascal&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4619" PostTypeId="2" ParentId="4618" CreationDate="2017-08-31T14:24:32.717" Score="37" Body="&lt;p&gt;UCSD Pascal was a product of UCSD - The University of California at San Diego.  It was not a product of Apple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.freepascal.org/UCSD_Pascal&quot; rel=&quot;noreferrer&quot;&gt;UCSD Pascal&lt;/a&gt; was available on a number of machines, including the PDP-11, TI99/4, the BBC Micro and the IBM PC.  It was a noble attempt to produce a fully cross-platform language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UCSD Pascal used a disk filing system that was intended to be implemented across all hardware platforms.  Thus enabling software written and compiled to P-code on one machine to be used on another.  The filing system did away with proprietary restrictions on the lengths and formats of filenames, which were seen as a bar to interoperability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experience transfer wasn't as seamless as was planned but it did greatly assist cross-platform development.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2017-08-31T14:24:32.717" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="4620" PostTypeId="2" ParentId="4618" CreationDate="2017-08-31T15:34:34.097" Score="24" Body="&lt;p&gt;UCSD Pascal was developed prior to the Apple II, during the 70's in San Diego, using PDP-11 class machines with a 512-byte block disk structure. In the process of porting it to microcomputers, often (not always) the file system also got ported. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;UCSD Pascal was seen as a closed environment offering everything in one place. Today we might call this an IDE and see it as an application on top of an existing OS. But back in the very early microcomputer days most machines didn't have a DOS of their own. And even if some OSes were available, they were usually rather frugal and mostly just a bunch of hacks to attach floppies one way or another (let's be serious, the Apple DOS was one of them). Thus just only adapting the very basic hardware drivers while keeping everything above in transportable P-code, was a rather clever solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, the goal of the P-System was to offer students a standardized programming environment, where they could work on every machine, the university could afford, like on a PDP and have create exactly the same replicable results a course requies. It was never ment to be a language kit for software development for microcomputer systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To some extent it was quite similar to early mainframe applications &amp;mdash; what we nowadays see as an OS was an integral part of the application, thus forming a world of its own. It wasn't until much later that the P-code system changed from a standalone application to a runtime package running on top of a 'regular' OS (like PC-DOS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adopting Pascal for the Apple II can be seen as the first major step of Apple into the educational market. In the course of history, SOS and later ProDOS did inherit the 512 byte block size from the UCSD P-code system, as Pascal was the main implementation language for the Apple III &amp;mdash; and later all Mac software. In fact, for some time the Pascal development did also drive Apple II development in general. For example, release 1.1 introduced the 'Firmware Protocol' that required add-on cards to show certain signatures at $Cn05/07/0B and $Cn0C to help identify a card and its functions. Due to the importance of Apple Pascal, hardware manufacturers added them soon. ProDOS (and GS/OS) rely on these markers to identify and handle cards they know.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="71" LastEditDate="2017-09-01T09:53:31.973" LastActivityDate="2017-09-01T09:53:31.973" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4621" PostTypeId="1" AcceptedAnswerId="4622" CreationDate="2017-09-01T21:33:13.960" Score="12" ViewCount="500" Body="&lt;p&gt;I am currently testing out some stuff in assembly with C64Studio and Vice and I noticed something with odd sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My code starts at $1000 and my sprites at $2000 but when I try to lower the first sprite's address, I only get random stuff.&lt;br&gt;&#xA;I tried to put the sprite at $1FC0 with #$7F as the pointer and $1080 with #$42.&lt;br&gt;But when I go up (like $2040/#$81 and $3000/#$C0), it works perfectly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the code I used:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    * = $1000&#xA;&#xA;PRA  = $dc00 ; CIA#1 (Port Register A)&#xA;DDRA = $dc02 ; CIA#1 (Data Direction Register A)&#xA;&#xA;PRB  = $dc01 ; CIA#1 (Port Register B)&#xA;DDRB = $dc03 ; CIA#1 (Data Direction Register B)&#xA;&#xA;keyboard_setup&#xA;    lda #%11111111&#xA;    sta DDRA&#xA;    lda #%00000000&#xA;    sta DDRB&#xA;    lda #%011111111&#xA;    sta PRA&#xA;&#xA;screen_init&#xA;    jsr screen_clear&#xA;    lda #$FE ; light purple&#xA;    sta $D020 ;Frame&#xA;    lda #$F6 ; purple&#xA;    sta $D021 ;Center&#xA;&#xA;sprite_setup&#xA;    lda #$80 ;-&amp;gt; $2000&#xA;    sta $07F8 ;1(8) -&amp;gt; 8(F)&#xA;&#xA;    lda #%00000001&#xA;    sta $D015&#xA;&#xA;    lda #$95&#xA;    sta $D000&#xA;    sta $D001&#xA;&#xA;main&#xA;    lda PRB&#xA;    and #%00010000&#xA;    bne main&#xA;    rts&#xA;&#xA;screen_clear&#xA;    lda #$20&#xA;    sta $0400,x&#xA;    sta $0500,x &#xA;    sta $0600,x &#xA;    sta $06e8,x &#xA;    lda #$00&#xA;    sta $d800,x&#xA;    sta $d900,x&#xA;    sta $da00,x&#xA;    sta $dae8,x&#xA;    inx&#xA;    bne screen_clear&#xA;    rts&#xA;&#xA;* = $2000&#xA;!byte $c0,$00,$03,$81,$00,$01,$01,$3e&#xA;!byte $00,$01,$3e,$00,$01,$22,$00,$01&#xA;!byte $36,$00,$01,$3e,$00,$01,$71,$c0&#xA;!byte $03,$f7,$c0,$03,$f6,$c0,$03,$b4&#xA;!byte $40,$03,$b6,$c0,$01,$36,$c0,$00&#xA;!byte $3b,$80,$00,$21,$00,$00,$22,$00&#xA;!byte $00,$22,$00,$00,$22,$00,$00,$22&#xA;!byte $00,$80,$00,$01,$c0,$00,$03,$01&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And these are the kind of sprites I get: (L:$2000/#$80 R:$1FC0/#$7F)&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/F8tUy.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/F8tUy.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some kind of limitation to where the sprites can be in memory or am I missing something else ?&lt;/p&gt;&#xA;" OwnerUserId="6817" LastActivityDate="2017-09-02T09:20:49.120" Title="Sprites not rendering correctly before $2000" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;sprite&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4622" PostTypeId="2" ParentId="4621" CreationDate="2017-09-02T09:20:49.120" Score="16" Body="&lt;p&gt;Yes, there is a limitation. Due to incomplete address decoding, &lt;strong&gt;the VIC sees the bitmap font ROM between &lt;code&gt;$1000&lt;/code&gt; and &lt;code&gt;$1FFF&lt;/code&gt; and &lt;code&gt;$9000-$9FFF&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the end of the font ROM (the &lt;code&gt;C64/chargen&lt;/code&gt; file in VICE)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0FC0: 00 00 00 FF │ FF FF FF FF │ FF FF FF FF │ FF 00 00 00&#xA;0FD0: FE FC F9 93 │ 87 8F 9F FF │ FF FF FF FF │ 0F 0F 0F 0F&#xA;0FE0: F0 F0 F0 F0 │ FF FF FF FF │ E7 E7 E7 07 │ 07 FF FF FF    &#xA;0FF0: 0F 0F 0F 0F │ FF FF FF FF │ 0F 0F 0F 0F │ F0 F0 F0 F0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;One can recognize the pattern of the garbage sprite on the right. It starts with 3 &lt;code&gt;00&lt;/code&gt; bytes, the first line of the sprite is transparent, followed by 10 &lt;code&gt;FF&lt;/code&gt; bytes, that's 3-1/3 lines of white pixels, followed by 3 &lt;code&gt;00&lt;/code&gt; bytes etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VIC chip has a view of the system memory that's quite different from that of the CPU. It can only address 16 kbytes of memory, and there is a banking mechanism, the two missing address bits are supplemented by GPIO pins of a CIA. Because the screen memory is at &lt;code&gt;$0400&lt;/code&gt;, bank 0 is active, the VIC can access memory only between &lt;code&gt;$0000&lt;/code&gt; and &lt;code&gt;$3FFF&lt;/code&gt;. The 4 kbytes of the font ROM must be mapped &lt;em&gt;somewhere&lt;/em&gt; in this area, and the designers decided to place it from &lt;code&gt;$1000&lt;/code&gt; to &lt;code&gt;$1FFF&lt;/code&gt;. If you try to relocate the screen from &lt;code&gt;$0400&lt;/code&gt; to &lt;code&gt;$1000&lt;/code&gt; (move your program out of the way first), then it'd show only garbage too, interpreting font bitmap patterns as character codes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This mapping is present in banks 0 and 2, but not in banks 1 and 3. Switching to bank 2, memory between &lt;code&gt;$9000-$9FFF&lt;/code&gt; will not be usable for screen or sprite data either. However, if you set VIC bank 1 (&lt;code&gt;$4000-$7FFF&lt;/code&gt;) or bank 3 (&lt;code&gt;$C000-$FFFF&lt;/code&gt;), then you can put the screen and sprite memory anywhere in the 16k bank, but then you have to install font data somewhere in RAM too, because the VIC can't access the font ROM at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The latter case is quite useful if you want to have a text screen with custom characters. Map in RAM for the processor at &lt;code&gt;$D000&lt;/code&gt; (with interrupts disabled), install custom font and sprite data there, then you can turn back I/O. RAM between &lt;code&gt;$D000-$DFFF&lt;/code&gt; is too painful to use for anything else.&lt;/p&gt;&#xA;" OwnerUserId="348" LastActivityDate="2017-09-02T09:20:49.120" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4624" PostTypeId="2" ParentId="4615" CreationDate="2017-09-02T14:05:01.557" Score="15" Body="&lt;p&gt;As you mention, this algorithm was made famous by Quake III Arena; that implementation can now be found, preserved for posterity, in &lt;a href=&quot;https://archive.softwareheritage.org/swh:1:cnt:bb0faf6919fc60636b2696f32ec9b3c2adb247fe;origin=https://github.com/id-Software/Quake-III-Arena;lines=548-572/&quot; rel=&quot;noreferrer&quot;&gt;Software Heritage’s Archive&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond3D published two articles by Rys Sommefeldt on exactly this topic in 2006 and 2007: &lt;a href=&quot;https://www.beyond3d.com/content/articles/8&quot; rel=&quot;noreferrer&quot;&gt;part 1&lt;/a&gt; and &lt;a href=&quot;https://www.beyond3d.com/content/articles/15&quot; rel=&quot;noreferrer&quot;&gt;part 2&lt;/a&gt;. According to these, the fast inverse square root algorithm was invented in the late eighties by Greg Walsh, inspired by Cleve Moler. Greg was working at Ardent on the Titan graphics minicomputer, and came up with inverse square and cube root algorithms to help the computer live up to its performance claims. Cleve, one of the founders of MathWorks, and author of MatLab, was working with Greg at Ardent. Cleve had &lt;a href=&quot;http://blogs.mathworks.com/cleve/2012/06/19/symplectic-spacewar/#comment-13&quot; rel=&quot;noreferrer&quot;&gt;come across&lt;/a&gt; the basic idea behind the trick in &lt;a href=&quot;http://www.netlib.org/fdlibm/e_sqrt.c&quot; rel=&quot;noreferrer&quot;&gt;code&lt;/a&gt; written by Velvel Kahan and K. C. Ng in 1986 at Berkeley.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From there, the algorithm came to Gary Tarolli’s attention; he was consulting for Kubota, the company funding Ardent at the time, and later went on to found 3Dfx. It appears Gary might have used the algorithm on SGI’s Indigo systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this is also summarised in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Fast_inverse_square_root#History_and_investigation&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article on the topic&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code you list uses 0x5F3759DF, but Chris Lomont &lt;a href=&quot;http://www.lomont.org/Math/Papers/2003/InvSqrt.pdf&quot; rel=&quot;noreferrer&quot;&gt;came to the conclusion&lt;/a&gt; that 0x5F375A86 provided more accurate results. The origin of the 0x5F3759DF value appears to be lost in the mists of time.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-06-13T15:51:17.070" LastActivityDate="2018-06-13T15:51:17.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="4625" PostTypeId="1" AcceptedAnswerId="4627" CreationDate="2017-09-02T17:01:52.593" Score="26" ViewCount="6709" Body="&lt;p&gt;Suppose you were trying to build a computer with a color graphics display in 1980, you have limited engineering resources and time to market is critical, so you want to get as many of the parts off the shelf as possible. Was there an off-the-shelf video chip available at that time that could be used? Requirements:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A bitmapped display, resolution as high as possible.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some form of color.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It's for a workstation not a games machine, so there is no requirement for sprites or hardware scrolling.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If it makes a difference, the CPU is the 68000.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-03-31T09:50:16.503" Title="Graphics chips in 1980" Tags="&lt;hardware&gt;&lt;history&gt;&lt;video&gt;&lt;chip&gt;" AnswerCount="10" CommentCount="11" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4626" PostTypeId="2" ParentId="4625" CreationDate="2017-09-02T17:23:31.330" Score="6" Body="&lt;p&gt;Bitmap displays are easy.  Basically, all they require is some address counters and multiplexing logic.  The only difficult part is getting adequate memory bandwidth to achieve adequate performance, and that's a fairly straightforward cost vs. performance trade-off.  Things like sprites are used to increase what can be done with a given amount of memory bandwidth, but otherwise there's really nothing about straight bitmap that would require custom circuitry.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-09-02T17:23:31.330" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4627" PostTypeId="2" ParentId="4625" CreationDate="2017-09-02T17:28:01.527" Score="29" Body="&lt;p&gt;There were. A couple of examples are the Motorola MC6845 and the MC6847. These chips were flexible and allowed various resolutions and colors depending on how they were implemented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MC6845 was used in the Acorn BBC Micro, the Amstrad CPC and the IBM PC MDA and CGA video adapters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MC6847 was used in the Tandy TRS-80 [Model 1], the Acorn Atom, the Tandy Color Computer, the Dragon 32, and the V-Tech Laser 200.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some companies made their own custom video chips and didn't allow anyone else use them. Examples would be Atari (TIA, ANTIC/GTIA, MARIA, Shifter), Commodore (VIC, VIC-II, TED, Agnus/Denise), Apple (with the IIgs), and Tandy (with the GIME in the CoCo3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other companies made video chips with fixed abilities, usually more powerful than the Motorola chips but with fixed resolutions, colors, and sprites, and sold them for other companies to use in their own systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples are General Instruments' AY-3-8900-1 (used in the Mattel Intellivision), Texas Instruments' TMS9918 (used in the MSX, TI-99/4(A), Coleco ADAM, and ColecoVision), and Yamaha's V9938 (used in various MSX2 systems), V9958 (used in various MSX2+ systems), and the V9990 (not sure where it was used).&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2017-09-02T17:28:01.527" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4628" PostTypeId="2" ParentId="4625" CreationDate="2017-09-02T17:37:18.403" Score="14" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6847&quot; rel=&quot;noreferrer&quot;&gt;Motorola MC6847&lt;/a&gt;, used in the TRS-80 Color Computer, or the &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TMS9918&quot; rel=&quot;noreferrer&quot;&gt;Texas Instruments TMS9918&lt;/a&gt; would be good candidates. Both were available in 1980, and could display 256x192 pixel colour images.&lt;/p&gt;&#xA;" OwnerUserId="348" LastActivityDate="2017-09-02T17:37:18.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4629" PostTypeId="2" ParentId="4625" CreationDate="2017-09-02T19:23:54.597" Score="21" Body="&lt;p&gt;I designed a color graphics card for the Z80 ECB bus back in 1984 or so, based on the 6845.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6845 was &quot;just&quot; a timing and addressing generator. It was meant for character-based displays. So it divided the display area in character cells. Each character cell could span some horizontal pixels (to be serialized outside of the 6845) and some vertical scan lines. So it had:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the horizontal character number&lt;/li&gt;&#xA;&lt;li&gt;the vertical text line number&lt;/li&gt;&#xA;&lt;li&gt;the vertical pixel-in-character number.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This chip could easily be used for graphics as well as the necessary RAMs became available: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A character was e.g. defined to be 8 pixels wide and 8 pixels high.&lt;/li&gt;&#xA;&lt;li&gt;The horizontal character number became the higher bits of the x pixel coordinate (the lower 3 bits generated by additional hardware clocked at 8 times the 6845 speed)&lt;/li&gt;&#xA;&lt;li&gt;The vertical pixel-in-character number made the lower 3 bits of the y pixel coordinate.&lt;/li&gt;&#xA;&lt;li&gt;The line number gave the higher bits of y.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My card was a 768*512 8-color RGB, memory-mapped occupying 384 KByte of address space (only the lower three bits of the byte used), with hardware zoom by 2 or 4 (reprogramming the 6845 and using a slower clock speed), resulting in 384*256 resp. 192*128, making it easier to see details on a &quot;big&quot; 14-inch CRT screen.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastEditorUserId="6565" LastEditDate="2017-09-03T18:01:01.343" LastActivityDate="2017-09-03T18:01:01.343" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4630" PostTypeId="2" ParentId="4601" CreationDate="2017-09-02T21:47:04.697" Score="3" Body="&lt;p&gt;I read through the thread pointed by a comment.&#xA;It looks like:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It doesn't use HW sprites cause of their limits. Biggest one is just one color per line.&lt;/li&gt;&#xA;&lt;li&gt;It uses a bitmap 256*212 with 16 colors CLUT.&lt;/li&gt;&#xA;&lt;li&gt;Software sprites are drawn with a sort of multiprocessing&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The VDP cleans the background at the same time&lt;/li&gt;&#xA;&lt;li&gt;the z80 draws the not transparent pixels&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;No background scrolling&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="124" LastActivityDate="2017-09-02T21:47:04.697" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4631" PostTypeId="1" AcceptedAnswerId="4633" CreationDate="2017-09-03T01:45:51.663" Score="3" ViewCount="371" Body="&lt;p&gt;A Soviet manual (1978) for an interactive integrated development system named ПУЛЬТ (translated as &quot;console&quot; or &quot;[remote] control panel&quot;) developed for the BESM-6 mainframe contains a cryptic note:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Additionally, a &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/1918/4025&quot;&gt;VIDEOTON device&lt;/a&gt; can be augmented with a household audio tape recorder &quot;Mayak&quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1YGvE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1YGvE.jpg&quot; alt=&quot;Videoton 340&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likely this portable reel-to-reel (1976), or an earlier model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LE0ip.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LE0ip.jpg&quot; alt=&quot;Mayak 203&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Its tape memory is also available to the users of the ПУЛЬТ system, and they are able to access data using the regular commands of the system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Remote terminals were connected to the machine via a serial interface with speeds ranging from 300 to 1200 Baud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not asking to speculate how it was connected and operated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is: &lt;strong&gt;Was it ever the practice in the West to allow household audio tape recorders as a remotely-connected personal external storage for the users of mainframes or minis?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-09-03T02:18:11.757" LastActivityDate="2017-09-03T16:01:45.370" Title="Using audio tape recorders on non-personal computers?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;magnetic-tape&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4632" PostTypeId="2" ParentId="4524" CreationDate="2017-09-03T11:10:51.573" Score="0" Body="&lt;p&gt;Origin systems created a game called Omega.&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Omega_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Omega&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6825" LastActivityDate="2017-09-03T11:10:51.573" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4633" PostTypeId="2" ParentId="4631" CreationDate="2017-09-03T13:01:37.613" Score="6" Body="&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, there where sevelal professional mainframe (related/connected) devices that did use analogue recording. Most of them developed arround 1970 and used until the early 80s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key reason to use them was cost reduction in a large volume installation and higher reliability. Where ever the low transfer speed and the serial nature of tapes was acceptable, an audio tape solution could produce resonable cost cuting. The perfect seting is where (much like in the OPs example from the SU) remote stations connected over low speed lines, often operating only temporary (dial line) in accounting/banking/retail, where data processing was serial anyway.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(Caution, Granpa ist telling wartime stories again)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Prelude:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To simplify the description how the development went, lets assume a large nation wide bank with branches in many cities and multiple offices in each city. The same principl ofc work well with retail business, insurance companies etc ... coincitently exactly the businesses that adapted mainframes, and electronic IT in general first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In each of these application are based arround the fact that information is created local and needs to be balanced/processed into a unified data base. In case of banking the most used process would be arround account changes (deposit / transfer / withdrawl), a process where the traditional name, &lt;em&gt;'posting transaction'&lt;/em&gt; already hints its nature in communication. Before anything that reasembles modern IT came, there all these transaktions where already quite thruout formalized, but still kept as local as possible. If one wants to access his account, a visit at &lt;em&gt;his&lt;/em&gt; local branch was the only way. Remote access was a lengthy and slow (days to weeks) process, where in fact withdrawl and personal transport of cash between banks often was less cumbersome. Ledgers where kept local and centralized ledgers where only used for transfer accounts of rather large / important customers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Punchline&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the advent of automated data processing in form of punch cards, not only book keeping within one office got simplified, but also centralized bookkeeping (for all branches in a city, state or nationwide) became possible. Daily data was collected in machine readable form in each branch office and transfered to a central processing department, run against accounts (and whatsoever), finalized, and return data was sent back to each office.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early remote data entry relied on punching cards and transporting these daily to the processing center. Information was sent back as printouts to each branch office.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To have actual data each day, the whole processing cycle (gathering punch input, processing and deliver output) had to be done in a single night, so transport time was restricted to a few hours (~3-4) one way. Thus the size of a region where over night processing in a central locationcould work was restricted to physical travel time equaling the size of a large city region or a mall state. Anything beyond couldn't be &lt;em&gt;'up to date'&lt;/em&gt; (another term conined here - AFAIK) and was done in a incremental stages with less actual data on each stage.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;E.T. Phone Home&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First step in further automatization here was to add remote card readers. Originally this was ment to enable better centralization, ad data transfer across a country could be made in a matter of seconds per records. First installed at the 'local' (city/county) processign center and sendign into a state/national center, they became soon roled out to each branch office. They still punced all their posted transactions on cards, but instead of having someone drive them over to processing, they cont put into the card reader, and everyone went home. Somewhen during the night the mainframe called into each branch, activeted the reader and processes the batch much as it it was on a local reader. In fact, from a mainframe programms point of view it was the same, even on assembly instruction level. Seamless device integration was alwas a core issue in this world. The return path was at first still delivery of paper via a van, but soon also local printers got installed. Again, after processing the Mainframe dialed the branch, activated the printer and had it running. The real high quality and unbelivable prices of mainframe printers (as with remote entry stations) also originated in the need of having them operating at night unsupervised without paper jamming or alike failiures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(And yes, you read right, data connection was dial out, not dial in. It's like token ring vs. ethernet. More efficient and secure vs. brute force. I still remember a chat with an old time mainframe operator who couldn't understand why, heaven help, a mainframe should be able to accet dial in connection, and why mainframe modems should even be able to do so. God, well, IBM has created leased line connections for mainframe to mainframe and dial out for mainframe to branch office. Everything else would just lead to chaos, anarchy and the end of civilisation. That chat happened arround 1980. You see, mainframe mindset is realy &lt;strong&gt;a bit&lt;/strong&gt; different form what minis, micros and most of todays IT runs on)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason to install such hardware in each branch wasn't as much cost saving at first, but enabling of business at all.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Cheaper, More Relliable &lt;em&gt;and&lt;/em&gt; faster&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As said, paper jam with punch cards and printers where a relevant issue in early remote stations running unsupervised at night. So solutions to either scrap this at all, or at least delay the paper pased process into office hours where much sought after. Using Memory was out of scope, as the amount of data for a single branch office with several dozend KiB inbound and maybe even over 100 KiB outbound did easy exceed any reasonable amout of storage. Keep in Mind, in the late 60s, 16 to 64 KiB was a reasonable sized mainframe memory. Puting racks with 128KiB or more in brach offices would be prohibitive expensive and in no relation to replace the paper it would replace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For larger branches, or intermediate date collection centers usage of remote operated mainframe tape drives was used, but that was more of a handling improvement during data transfer as they where staffed in the night anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There where many atempts in the 60s to improve this situation with somewhat cheaper (easy, as IBMs prices did leave room to improve on) and more reliable (not easy) machinery, and new concepts. Most promesing where paper tapes. They did combine the ease of an automated endless media (so &lt;em&gt;way&lt;/em&gt; less paper jam) and beeing cheap enough to use it for intermediate storage of printouts. So reading (toward the mainframe) was more reliable, while writing could go at night to a paper tape punch and later, during office hours, feed to a supervised printer. Such a tape punch was way cheaper than a card punch and using less expensive material at the same time. Still bad handling could screw it big time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Development in this area was mainly driven by smaller plug compatible manufacturers, thanks to standardized mainframe interfaces and protocolls. To the mainframe such stations did look alike anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One key issue in all of this is data transmission rate. First connection where literally TTY based, so 33 bit/s of data (50 bps brutto). Around 1970 standard for mainframe dial out was 1200 bps, in the end of the 1970 2400bps was considered state of the art. 1200 bps or even 2400 bps is still within the capabilities of paper tape and more so punch cards &lt;em&gt;(when calculating here keep in mind that they just need to record netto data, while transmission lines have to include various kinds of framing).&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Papertape sill had the drawback of beeing a one time media and its inherent ways of screwing it up. Audio tape could fill exactly the need here, as it was reliable enough, machinery was (rather) cheap and data rate did fit. But it still suffered from complex handling and errors originated here. This changed when Philips introduced the compact cassette in 1963 (?). A nice system not fault prone due direct handling of the loose tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Now there where next to no handling errors left beside loading an empty cassette - which ofc happened and ofc it was almost never the clerks fault but the machine was broken and service got called. Been there, done that. More later).&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Soon several companies including names like Olivetti, NCR, Nixdorf, Bull, Honywell or GE developed remote batch entry stations where data was typed direct (only memory for line or record editing needed) onto cassette, which later at night was read as batch from the mainframe via dial out. Return data (if needed) was stored in a (later) second session again as batch on (another) cassette. Cheap standardized cassette mechanics made it possible to have severaldrives and reliable operation. Ofc, cheap here has to be seen in relation to mainframe tape drives. These mechanics wheren't from consumer grade manufacturers as with early home computer drives, but special build and much more controllable. A drive unit (no electronics) from NCR was still rated above 1000 Mark, while a complete consumer recorder was available for 40 or less. The advantage of cassette drives for professional equippment where due standardisation and available knowledge - and ofc, as said the higher reliability due reduced user interaction (&lt;a href=&quot;https://de.wiktionary.org/wiki/PEBKAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;PEBKAC&lt;/a&gt; principle)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;As Time Goes By&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the 1970s an overwhelming number of decentralized data entry points where based on compact cassette system - while at the same time larger branch offices became 'intelligent' data entry system, read, minicomputers with local disk storage. During the second half of the 70s into the 80s all cassette based entry stations became replaced by small computer systems still working with the same entry and connectivity priciples but using floppies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, I can't recall any use of audio level recording for mainframes. Also remote batch got more and more replaced by online batch where data was collected direct on the mainframe using 24/7 online connection. Nonetheless, processing is still today often done in nightly batches. &lt;strong&gt;Batch will never die&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Last story here: Now, PEBKAC errors are not realy restricted to tapes or punch cards. Floppies offered a whole new range of posibilities. I remember a story from a small bank branch office in a tiny village near Rosenheim, itself a small city about 60 km east of Munich (the area is worth a vacation). At one point they did call for service almost every other day, because the nightly transfer has failed. Located in the late 70s, the data entry was rather modern, using a closed system, 8080 based, with screen edit of entry record, even able to handle multi card records and showin meaningfull entry masks. Data created was stored on a floppy drive and transmited as nightly batch. They swear that they entered the data and the system did acknowledge everything as correct when entering, but the nightly transfer failed over and over, always claiming that no data could be read. This did go on for several weeks. At that time it was already an issue at CEO level between the bank and our company. So every phone call might have cost more than a new entry station. Anyway, we couldn't find any error at all. We could prove and demonstarte that the station was working as intended. They reserved even a whole mainframe for several hours to replicate the nightly situation. More than 30 people where needed for setup. All worked fine. Tensions (at management) did grow further. They where close to cancel some real large (&gt;10m Mark) orders.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;At one of these days, by sheer accident the bank clerk did forget to remove his work disk when service once more tried to locate the problem. It might be neccersarry to add here thet they where strict order to never let any of us touch customer data - as well as we where forbidden to do so. No problem as posted transactions where the only data in question and all was stored on a single 8&quot; floppy. Now that day one of us removed the customer disk and by chance did notice that &lt;strong&gt;he could lierally see thru the disk.&lt;/strong&gt; The magnetic layer was almost completly removed.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Long story short, they put heavy use on the same tracks of a few disks (less than a pack) for several years, each and every day, until the disks where complete worn up. No need to say that some side suddenly got rather calm. Three lessons to remember: Always check the whole production process; never trust a customers knowledge and most important &lt;strong&gt;Floppy drives are cutting machinery&lt;/strong&gt;)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-09-03T16:01:45.370" LastActivityDate="2017-09-03T16:01:45.370" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4634" PostTypeId="2" ParentId="4625" CreationDate="2017-09-03T17:25:52.377" Score="8" Body="&lt;p&gt;Well, beside building it from scratch with TTL components I guess that is. Right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As already described you could go ahead and 'extend' some existing chips. But if you want an integrated graphics solution more like today's systems, the Thomson EF9365/66 would be the most appropriate selection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Caveat: I'm not sure if they where already available in 1980, as the earliest data book I own, including them is from 1981.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, while in capabilities beyond what contemporary homecomputers did, they're still roughly within the limits of TV alike screens. But that border was quite lower back en and they have have been used like in a professional CAD setup with the EF936x driving a high-res graphics screen while commands and parameters where edited on a separate text screen. Windowing early 1980s style :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Features included&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Resolution 64x64, 128x128, 256x256 and 512x512 (last one only interlaced)&lt;/li&gt;&#xA;&lt;li&gt;additionally 512x256 non interlaced on the EF9366&lt;/li&gt;&#xA;&lt;li&gt;logical operation on a 4096x4096 space&lt;/li&gt;&#xA;&lt;li&gt;DRAM controller for 16 and 64 k chips&lt;/li&gt;&#xA;&lt;li&gt;lightpen support&lt;/li&gt;&#xA;&lt;li&gt;(interrupt) signals for Lightpen, VBLANK and READY&lt;/li&gt;&#xA;&lt;li&gt;(almost) unlimited number of bitplanes&lt;/li&gt;&#xA;&lt;li&gt;1,2,4 or 8 Bit per plane per pixel&lt;/li&gt;&#xA;&lt;li&gt;on-chip character generator&lt;/li&gt;&#xA;&lt;li&gt;scalable and rotatable character set (1..16 times width and height separate)&lt;/li&gt;&#xA;&lt;li&gt;vector (line) drawing capabilities with 4 line types&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Especially the last five points set it apart from any other controller at that time (I know). All syncing signals, timing and pixel clock is provided by the controller, bitplane selection, shift register(s) and colour generation (from the clocked data) is to be added. This makes the EF936x series extreme flexible. A 512x512 display in 24 Bit colour wouldn't be a big deal. Since the plane addressing was quite flexible, the signal generation could add many tricks like a layer for transparency (TV overlay) or other special function modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I always wanted to build a graphics system using that chip, as examples where like out of the world for back then. The chips are still somewhere, but I never went through.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditorDisplayName="user39" LastEditDate="2020-03-26T10:41:14.967" LastActivityDate="2020-03-26T10:41:14.967" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="4635" PostTypeId="1" AcceptedAnswerId="4642" CreationDate="2017-09-03T18:43:54.167" Score="11" ViewCount="1355" Body="&lt;p&gt;Essentially, my question is there in the title.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tower cases are commonplace these days, and probably are the &quot;default&quot; form factor for personal computers (or at least &lt;em&gt;were&lt;/em&gt;, before they were surpassed by laptops).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the original IBM PC, the PCJr, the Mac II and the Amiga 2000 were all desktops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At some point - I guess during the 386 era - towers started to gain traction.&#xA;They eventually surpassed desktops, I'd say sometime in the 90s, with IBM releasing the Aptiva tower crowning the form factor's popularity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;who&lt;/em&gt; was the first to come up with the tower form factor?&lt;/li&gt;&#xA;&lt;li&gt;which models were key in popularizing it and &lt;em&gt;when&lt;/em&gt;?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6828" LastActivityDate="2020-12-18T15:09:21.510" Title="When did the tower form factor appear and when did it become popular?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;80386&gt;&lt;case&gt;" AnswerCount="6" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4636" PostTypeId="2" ParentId="4635" CreationDate="2017-09-03T19:16:55.117" Score="7" Body="&lt;p&gt;The tower is neither an invention of the 90s nor was it done by IBM.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For example NCR sold their PC8 series in tower form factor since (at least) 1986 with 286 CPUs.&lt;/li&gt;&#xA;&lt;li&gt;IBM hat the PS/2 Model 60 in 1988&lt;/li&gt;&#xA;&lt;li&gt;Many companies put x86 PCs into tower cases, already with 8088 CPUs&lt;/li&gt;&#xA;&lt;li&gt;Not to mention stands that where available to turn an IBM PC into a tower&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I bet with some search will show a lot of other tower x86 systems from right after the IBM-PC got introduced.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Before the x86 PC there where several S100 cases build to be used as a tower&lt;/li&gt;&#xA;&lt;li&gt;Before that, DEC put various PDPs into tower like racks ment to be placed below a desk&lt;/li&gt;&#xA;&lt;li&gt;Even the mother of all desktop-GUI machines, Xerox' Dandelion series was build in tower style.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2017-09-03T19:16:55.117" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4637" PostTypeId="2" ParentId="4524" CreationDate="2017-09-03T19:27:51.943" Score="6" Body="&lt;p&gt;It sounds like you are probably referring to the 1984 release of &lt;a href=&quot;https://www.mobygames.com/game/macintosh/chipwits&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chipwits&lt;/a&gt;. It was originally released for the Macintosh, and was ported to the Apple ][ and Commodore 64.&lt;/p&gt;&#xA;&lt;p&gt;The screenshot below is from the version for the C64.&lt;/p&gt;&#xA;&lt;p&gt;Interestingly, &lt;a href=&quot;https://playchipwits.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a modern version&lt;/a&gt; of the game exists too.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/K9Qz5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K9Qz5.png&quot; alt=&quot;C64 ChipWits&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-11-12T20:13:02.177" LastActivityDate="2020-11-12T20:13:02.177" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="4638" PostTypeId="2" ParentId="4529" CreationDate="2017-09-03T23:02:35.930" Score="0" Body="&lt;p&gt;It may be a stretch, but I can remember 2 cases wich might be seen as emulators, on Tandy's TRS-80.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Level I emulation on NewDOS-80. &#xA;As far as I remember, you needed a disk system TRS-80 Model I with Level II BASIC ROM and NewDOS-80 v.II OS, and you could make your machine act as if it were a cassette-based  TRS-80 with a Level I BASIC ROM. Level I was very different from Level II, so it certainly wasn't tapping into the Level II ROMs. And, you had to reset the computer to get out of it. &lt;/li&gt;&#xA;&lt;li&gt;Model III emulation on a TRS-80 model 4P. &#xA;You could boot the Model 4 in Model III-mode. Wich wasn't difficult, because it had the Model III ROM build-in. But the Model 4P just had a 4K boot-ROM and nothing else. By the clever use of a ROM-file and key-combination, the machine would look for the ModelA/III-file - a ROM-image of the Model III BASIC - load it, and emulate a cassette-based Model III. If there was a Model III DOS in the drive, it would boot that, and you'd have an emulated Model III on a 4P.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6830" LastActivityDate="2017-09-03T23:02:35.930" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4639" PostTypeId="2" ParentId="4500" CreationDate="2017-09-03T23:09:26.017" Score="1" Body="&lt;p&gt;From personal experience:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first 486 was a 486 SX-20, it did have a heatsink, but with blades only 1 cm high, or so. Later 486s did sport bigger ones, but they did not yet need a fan, really. Typically, the airflow from the PS-fan was enough to cool the CPU. Unless you overclocked the CPU, a practice that began appearing in those days. Fans started appearing in general use, AFAIK, with Pentium processors.&lt;/p&gt;&#xA;" OwnerUserId="6830" LastActivityDate="2017-09-03T23:09:26.017" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4641" PostTypeId="2" ParentId="4635" CreationDate="2017-09-04T09:00:10.070" Score="5" Body="&lt;p&gt;Back in 1986, I was using an &lt;a href=&quot;https://en.wikipedia.org/wiki/PERQ&quot; rel=&quot;noreferrer&quot;&gt;ICL Perq&lt;/a&gt; on a computing project when I was a student. As you can see from the photo, not only the computer, but also the monitor was in tower format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can also see, the tower itself was massive by today's standards. For reference, it was wide enough for an 8 inch floppy drive to be installed horizontally.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-09-04T09:00:10.070" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4642" PostTypeId="2" ParentId="4635" CreationDate="2017-09-04T14:44:54.540" Score="9" Body="&lt;p&gt;The tower form factor was well known in the 1980's, even IBM was using it at that time (the IBM RT 6150 was available in both desktop and tower cabinets, and IBM even had a tower stand option for the PC AT 5170).  And it wasn't unusual to stand a desktop cabinet on its side; this practice was common in office environments when the system unit and monitor together were too tall to fit underneath the overhead cabinet in a cubicle, or the shelf above a credenza.  In such cases you would simply stand up the system unit (typically next to or under the desk), which allowed the monitor to fit underneath the shelf or cabinet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM wasn't the only one doing this -- in the 1980's DEC also had systems that were available in desktop and tower configurations, notably the MicroPDP-11 (in the BA23 cabinet) and the Professional 350/380 line.  (ref: &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp11/handbooks/EB-24944-18_Micro_PDP-11_Handbook_1983-84.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp11/handbooks/EB-24944-18_Micro_PDP-11_Handbook_1983-84.pdf&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-09-04T14:44:54.540" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4643" PostTypeId="2" ParentId="4625" CreationDate="2017-09-04T15:43:29.383" Score="4" Body="&lt;p&gt;If you really wanted to save money, you could use the CPU to generate the display. Many older machines did that, notably the Sinclair ZX80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially all you need is a memory mapped buffer chip and an R2R DAC made of passive resistors, and then some output buffer op-amps. Possibly some kind of encoder if you wanted to output composite video or similar. You could even forego the DAC if you could live with basic digital colour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such a system would have a low resolution, limited by the CPU clock rate. To increase it you could use dual port RAM, with the CPU enabling the video side outputs and simply stepping through addresses as fast as possible. The outputs would create digital colour or feed an R2R DAC as above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An improved version of this could use an address generating counter to step the RAM through addresses for each scanline. The CPU then only needs to set up the starting scanline address and trigger the counter to begin (and perhaps end). Using dedicated RAM would obviate the need for dual port RAM in that configuration. Adjusting the frequency of the counter also allows for different resolutions.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2020-03-31T09:50:16.503" LastActivityDate="2020-03-31T09:50:16.503" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="4644" PostTypeId="2" ParentId="4604" CreationDate="2017-09-04T15:59:42.920" Score="5" Body="&lt;p&gt;Adding to Raffzhan's answer, many obscure, short lived and slightly crazy data storage systems were created during the 1980s due to the high cost of mass storage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, several systems were created to save data to video tape (usually VHS format), because tapes and VCRs were widely available and relatively cheap. They worked somewhat like audio cassette data storage that was popular on 8 bit computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;People tried printing data on paper and scanning it back in with special low cost scanner hardware too.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2017-09-04T15:59:42.920" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4645" PostTypeId="2" ParentId="3057" CreationDate="2017-09-04T21:45:02.427" Score="15" Body="&lt;p&gt;All right, I was curious what actually happened when you tried to execute that code. Because it crashes, obviously something is wrong, but &lt;em&gt;what exactly&lt;/em&gt; is wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After some digging, I finally found a machine on PCjs.org which both boots to a usable command line, and has sufficient hardware to be able to run DEBUG with good results. Start at &lt;a href=&quot;https://www.pcjs.org/disks/pcx86/windows/win95/4.00.499/&quot; rel=&quot;noreferrer&quot;&gt;the Windows 95 build 499&lt;/a&gt; machine, and let it boot to a command prompt. By default, it will boot the disk image &quot;PC-DOS 3.30 (Disk 1)&quot;. It will ask you for the current date and time; just press Enter at both prompts. You are now in IBM PC-DOS 3.30.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, load the &quot;PC-DOS 3.30 (Disk 2)&quot; disk image into drive A:. That one contains, among many other things, &lt;code&gt;DEBUG.COM&lt;/code&gt;. You can now start DEBUG and provide your source code (in my case, DEBUG is using segment 114C; yours may be different). I'm also doing a CPU register dump at the beginning, so that we know what we have to work with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A&amp;gt;DEBUG.COM&#xA;-r&#xA;AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000&#xA;DS=114C  ES=114C  SS=114C  CS=114C  IP=0100   NV UP EI PL NZ NA PO NC&#xA;114C:0100 255300        AND     AX,0053&#xA;-a 100&#xA;114C:0100 mov ah,09&#xA;114C:0102 mov dx,107&#xA;114C:0105 int 21&#xA;114C:0107 db 'Hello World', 0a, 0d, '$'&#xA;114C:0115 jmp 114c:0100&#xA;114c:0117&#xA;-&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;OK, so let's see what that turns into:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-u 100 117&#xA;114C:0100 B409          MOV     AH,09&#xA;114C:0102 BA0701        MOV     DX,0107&#xA;114C:0105 CD21          INT     21&#xA;114C:0107 48            DEC     AX&#xA;114C:0108 65            DB      65&#xA;114C:0109 6C            DB      6C&#xA;114C:010A 6C            DB      6C&#xA;114C:010B 6F            DB      6F&#xA;114C:010C 20576F        AND     [BX+6F],DL&#xA;114C:010F 726C          JB      017D&#xA;114C:0111 64            DB      64&#xA;114C:0112 0A0D          OR      CL,[DI]&#xA;114C:0114 24EB          AND     AL,EB&#xA;114C:0116 E9376A        JMP     6B50&#xA;-&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Not &lt;em&gt;quite&lt;/em&gt; what we intended, is it? The first few instructions are fine, but by CS:0107H &lt;code&gt;DEBUG&lt;/code&gt; goes off on a tangent, and never recovers. Notice that it doesn't think there is any instruction beginning on offset 0115, which is where our jump to the beginning of the program was supposed to be. But sure enough, if we look specifically for it...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-u 115 117&#xA;114C:0115 EBE9          JMP     0100&#xA;114C:0117 37            AAA&#xA;-&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...there's our jump, in plain sight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming here that DEBUG's understanding of 8086 machine code is a decent approximation of the 8086/8088 CPU's Execution Unit, which is likely a reasonable assumption to make. (Its purpose, after all, was as a simple debugger and &lt;a href=&quot;https://en.wikipedia.org/wiki/Machine_code_monitor&quot; rel=&quot;noreferrer&quot;&gt;machine code monitor&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This code will execute just fine up through offset 0107, moving past the supposed &lt;code&gt;DEC AX&lt;/code&gt;. Says &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/73/25.html&quot; rel=&quot;noreferrer&quot;&gt;Ralph Brown's Interrupt List&lt;/a&gt;, upon return from INT 21H AH=09H, AL=24H (probably mostly an accident of the implementation, and not a deliberate choice), so at that point, decrementing AX is a perfectly valid operation even not accounting for wraparound. However...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;There is &lt;em&gt;no&lt;/em&gt; x86 instruction that starts out with a 65H byte.&lt;/strong&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/X86_instruction_listings&quot; rel=&quot;noreferrer&quot;&gt;See for yourself.&lt;/a&gt;) That's also why DEBUG would display it as a plain data byte (&lt;code&gt;DB&lt;/code&gt;) until it again finds something that it recognizes as a valid instruction. In this case those valid instructions are nonsensical, but that's just because DEBUG is trying to interpret as code what in reality is data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the CPU encounters this illegal code byte (remember, the CPU is still in the middle of executing code; it has no knowledge of the fact that what's coming up was data intended for human consumption, and happily does the best it can), it triggers interrupt vector 06H, &lt;code&gt;#UD&lt;/code&gt; (&lt;em&gt;undefined opcode&lt;/em&gt; or sometimes &lt;em&gt;invalid opcode&lt;/em&gt; -- this one seems appropriately schizofrenic). Exactly what happens at that point depends on your environment, but you can have a look at its address to see where the CPU will jump. Interrupt vectors are stored as 32-bit segment:offset pairs starting at address &lt;a href=&quot;https://sw0rdm4n.wordpress.com/category/interrupt-vector-table/&quot; rel=&quot;noreferrer&quot;&gt;0000H&lt;/a&gt;:0000H for vector 00H. Vector 06H is thus at bytes 0000H:0018H through 0000H:001BH. Let's look at what's there:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-u 0000:0018 001B&#xA;0000:0018 A09500        MOV     AL,[0095]&#xA;0000:001B F0            LOCK&#xA;0000:001C D01B          RCR     BYTE PTR [BP+DI],1&#xA;-&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Ignore the disassembly; that's meaningless here. The important part is the data, which in this case turns out to be &lt;code&gt;A09500F0&lt;/code&gt;. Let's look at memory address F000H:95A0H (remember that x86 CPUs store integers in reverse-byte order, and that the segment offset is stored at a lower offset than the segment, so we need to effectively read the address bytewise backwards):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-u F000:A095&#xA;F000:A095 2E            CS:&#xA;F000:A096 8B5404        MOV     DX,[SI+04]&#xA;F000:A099 89560A        MOV     [BP+0A],DX&#xA;F000:A09C 8166160100    AND     WORD PTR [BP+16],0001&#xA;F000:A0A1 33C0          XOR     AX,AX&#xA;F000:A0A3 EB14          JMP     A0B9&#xA;[remainder snipped for brevity]&#xA;-&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;At F000H:A0B9H, there is more meaningful-looking code. You can inspect it yourself if you want to (it's just a &lt;code&gt;-u f000:a0b9&lt;/code&gt; away) but that doesn't really matter, because what PCjs does with an invalid opcode may or may not be representative of what actual hardware did with it. I'm &lt;em&gt;guessing&lt;/em&gt; that, on real hardware, if you were to perform the same investigation, you'd find that the interrupt vector points toward a &lt;code&gt;HLT&lt;/code&gt; instruction, or possibly a jump-to-self, with the intent of freezing the computer from the user's point of view. Simply, by the time you get that far, something has gone horribly wrong, and in the simple days of DOS systems with no memory protection or anything similar, there wasn't a lot that could be done at that point to meaningfully recover. Stopping the system to make sure that no &lt;em&gt;further&lt;/em&gt; harm is done, then, is a reasonable course of action.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;And &lt;em&gt;that&lt;/em&gt; is why your program stops working.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Easy as pie, no?&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-09-05T06:06:04.697" LastActivityDate="2017-09-05T06:06:04.697" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4647" PostTypeId="1" CreationDate="2017-09-05T06:43:56.140" Score="26" ViewCount="2562" Body="&lt;p&gt;How reliable was the ferrite ring core memory system?  When the power went off, did all the magnetic positions of the iron rings in the program wire grid remain exactly as they were?  &lt;/p&gt;&#xA;" OwnerUserId="6837" LastActivityDate="2020-06-11T21:35:22.963" Title="Core Memory Stability" Tags="&lt;memory&gt;" AnswerCount="6" CommentCount="7" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4648" PostTypeId="2" ParentId="4647" CreationDate="2017-09-05T08:43:11.217" Score="6" Body="&lt;p&gt;At University I did a course on PDP-11 assembler because, as the lecturer put it &quot;the PDP-11 will be around forever&quot;. The course was split over two terms with the summer holiday in between and when we all came back, the University had thrown away all its PDP-11's and bought a load of Sun work stations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, the first task of any PDP-11 assembler language program was to loop through the whole of main memory and zero every unused location because the PDP-11 used core memory (at least, the older ones did) and core memory retains its contents when the power goes off.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-09-05T08:43:11.217" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4649" PostTypeId="2" ParentId="4647" CreationDate="2017-09-05T09:23:31.370" Score="4" Body="&lt;p&gt;The core memory is generally non-volatile (doesn't lose it contents while being powered off), which is attributed to the property of ferromagnetic materials: spontaneous magnetisation. Every small crystal of such material has its own magnetisation all the time -- generally with random direction. When enough external magnetic field is applied to the whole core, the majority of those small crystals change their magnetic moments according to the field. When the field is then de-applied, it becomes energetically unprofitable for every small crystal to change its magnetisation against the collective field made by all other previously oriented pieces of material, that now create their own magnetic field. Therefore the collective magnetisation keeps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Returning to the core memory, we conclude that it is generally non-volatile. However, special provisions must be made to suppress transients happenning during power-on and power-off cycling, that otherwise can disturb the magnetisation of the cores.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2017-09-05T09:23:31.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4650" PostTypeId="2" ParentId="4647" CreationDate="2017-09-05T10:00:43.683" Score="29" Body="&lt;p&gt;Caveat: I can only tell about mainframes. Minis might have used different protection and handling schemes (and for sure smaller memory sizes). My detailed knowledge is based on memory up to the mid-1970s. Further I was working for a manufacturer of compatible mainframes. We switched already for complete semiconductor memory at a time when IBM introduced new generations of core, but I don't remember these new core modules being any better, just smaller.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How reliable was the ferrite ring core memory system?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR: one non recoverable error per 32 KiB per month.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flipped bits happened all the time during normal operation. Rule of thumb, for mainframes using error detection and correction, was one non correctable error per 32 KiB and month at 24/7 usage. This rate was considered acceptable. Back then mainframe programs where usually batch runs and build around checkpoints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Checkpoints are for batch programs somewhat similar to transaction commits for database applications: a production state where the batch could be resumed if interrupted. Usually an intermediate step, where all data was on some external media (like punch cards, tapes or disks) or a collection of pointers/keys/etc. was stored to find a necessary restart position within all data, like after each processed tape block. But this required usually having some random storage like disk, drum or magnetic cards. So if a non fixable error happened, a (the) batch / program was restarted from that point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since only very few customer machines used more than 128-256 KiB (in fact, even 'large' models couldn't even be extended past that) during the 60s and early 70s, one or two machine halt per week was considered OK. After all, compared to previous systems this was an astonishing smooth handling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a parity halt occurred, depending on the jobs running, operators did check where the faulty word was (location, program) and either patched it back, reload some stuff or just purged that single program and let the machine continue. No reboot or alike. Yes, being an operator back then meant that you really knew the programs running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Service would only be called if the error rates went up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now with dialog applications and huge memory sizes the picture was a bit different. The most extreme example here might have been the 1972 Olympics. It included the first integrated real time online information system for the media, where all results were available at online terminals throughout the press center less than a minute after each and every competition. Several hundred acquisition stations and terminals where spread out literally all over Germany (while the main event was in Munich, some competitions like boating happened up at the north sea coast), while again hundreds of terminals where located at the main press center in Munich. So newspaper reporters could produce reports without moving their butt past the coffee maker. But that's a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the core one mainframe handled all the data acquisition and dialog load and it's been one of the largest installations worldwide, if not &lt;strong&gt;the largest&lt;/strong&gt; up to that time. 32 disk drives and a whopping &lt;strong&gt;two megabytes RAM&lt;/strong&gt; in single installation. The machine had to be setup in a T-shape with memory in all crossbar cabinets to keep the wire length toward the CPU (vertical bar) as short as possible, while having equal length to all cabinets (again, a different story). In theory this machine should get about two non recoverable errors per day and it worked out that way, even careful component selection couldn't reduce this much. There were more than a dozen machine halts during the 14 days of operation. It was still a quite successful operation, as, thanks to the back then brand new data base system a start up happened in less than 90 seconds - including OS boot. So failures became more of a small glitch than a real issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;If you can't beat it, embrace it :)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Insert: The ability to run a large scale real time information system (even for today's standards not small) on &lt;strong&gt;a machine with 'just' 2 MiB RAM, less than 200 MiB Disk and 400 kOps&lt;/strong&gt; is a great example that a mainframe MIPS are incomparable to mini/microprocessor MIPS)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When the power went off, did all the magnetic positions of the iron rings in the program wire grid remain exactly as they were?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR: yes&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, as with all storage systems it depends on the timing. When powered off in a safe state, it did retain its content for days or even longer. When powered off during a write cycle results are rather unpredictable. At this point it's important that reads on core are destructible, so each and every read is followed by a write. Thus just switching the machine off, most likely results in some memory damaged. Highest chance here the program locations executed at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Procedure for a clean power off while retaining machine state and memory was to put the CPU on hold and then power off. Hold wasn't an interrupt or alike, but literally held the CPU, so no further operation was done. There was a separate HOLD button at the operator's console. When powered on again, just press HOLD again to have it continue - or change some registers, like PC, to have it start somewhere else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This mechanic is why some mainframe manufacturers added special machine error state (a combination of interrupt and separate register set) which was invoked at power fail. The power supply did provide sufficient power to run a few instructions after power failure was detected. More than enough time to execute a single hold instruction, followed by some code to return from interrupt or put it into any kind of recovery mode. No UPS, large scale capacitor or motor generator needed, it just stopped and continued after power off/on. Of course, this did only affect the CPU. Half written tape blocks or disk tracks where still a pile of garbage. That's where checkpoints again played a role.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mainframes aren't a pile of single solutions as today's small machines, but a clockwork of multiple use of inherent hardware features.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-11T17:20:17.527" LastActivityDate="2020-06-11T17:20:17.527" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="4651" PostTypeId="2" ParentId="4647" CreationDate="2017-09-05T10:23:12.983" Score="12" Body="&lt;p&gt;The ferrite core memory system is quite reliable.  When I was working on medical systems, we used pre-programmed systems in core memory.  One day, we got a call from the factory in the US, saying that their shop floor computer had crashed and they could not restart it.  We put an extra core memory into our system in UK, copied it and then sent it to the factory in the US by special delivery.  They plugged it in, switched on and their system came to life straight away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We used to keep different pre-programmed boards.  Sometimes, they were sitting on the shelf for 6 months but when they were plugged in, the systems always worked.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2017-09-05T10:23:12.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4652" PostTypeId="1" AcceptedAnswerId="4654" CreationDate="2017-09-05T12:41:11.667" Score="13" ViewCount="3348" Body="&lt;p&gt;I'm looking for &quot;off the shelf&quot; graphic IC's that supported hardware sprites.  By &quot;off the shelf&quot; I mean chips that were designed to be used in various machines and not designed specifically for one machine.  So the VIC chips from MOS/Commodore wouldn't count.  Even though the VIC-I was originally designed to be off the shelf it never materialized that way since it was used mostly in the VIC-20. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I'm only interested in chips that were made any time during the 70's and 80's (1989 being a cutoff).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been doing some research on this and I've only been able to find one group of graphic chips that supported hardware sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That was the &lt;strong&gt;TMS9918&lt;/strong&gt;.  The TMS9918 had a few variants such as the 9928, 9938 and 9958.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, other than the TMS IC's from Texas Instruments, were there any others that supported hardware sprites?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I neglected to mention that in my research, I discovered a few &quot;Pong&quot; chips like the AY-3-8500 series.  I'm not sure if they count because while I &lt;em&gt;assume&lt;/em&gt; they had sprite support, they were not general purpose graphics chips that I could tell.  They were designed to host a few &quot;Pong/shooting&quot;-like games and that's it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT 2&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to make sure I'm clear.  I'm looking for single chip solutions that required very minimal external components.  RAM and clock would be OK but not much else (other than passives, of course).  I don't believe EGA would count (regardless if it had hardware sprites) because it required external components for memory decoding, DAC's, etc.  The TMS9918 is a good example of what I'm looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT 3&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like there was a &quot;single&quot; chip solution to EGA.  However, I'm really pushing the boundaries of the term &quot;single chip&quot; when we add RAM/ROM and a clock.  But, &quot;single chip&quot; isn't the primary focus of my question.  I'm more interested in the off-the-shelf graphics chips that included hardware sprites and I'd prefer close to single chip if possible.  I still, however, cannot confirm that the EGA cards (chips) supported any hardware assisted sprites.  But if it did, I would certainly add it to my research.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="2081" LastEditDate="2017-09-05T17:23:11.147" LastActivityDate="2019-10-27T23:28:51.500" Title="Were there any &quot;off the shelf&quot; graphics chips that supported 2D sprites in the 70's and 80's?" Tags="&lt;hardware&gt;&lt;graphics&gt;&lt;chip&gt;" AnswerCount="7" CommentCount="17" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4653" PostTypeId="2" ParentId="4652" CreationDate="2017-09-05T13:10:52.570" Score="5" Body="&lt;p&gt;If this is about general available chips, not custom ones, Texas did prety much set the standards and own the market when it came to hardware sprites. Motorola beeing the only other major player/initiaor did focus on chips enabling bitmap displays with variable designs, but not higher functionality. And as TI licensees did improve on the 9918 design, Thomson and other Motorola fellows did stay within their linage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another, maybe lesser known chip was the &lt;strong&gt;Signetics 2637 &lt;em&gt;Universal Video Interface&lt;/em&gt;&lt;/strong&gt;. The best description would be as a single chip video console solution, as it offered a&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;video circuitry,&lt;/li&gt;&#xA;&lt;li&gt;colour abilitiy (8colours),&lt;/li&gt;&#xA;&lt;li&gt;four sprites,&lt;/li&gt;&#xA;&lt;li&gt;collision detection,&lt;/li&gt;&#xA;&lt;li&gt;48x52 block graphics&lt;/li&gt;&#xA;&lt;li&gt;13x16 or 26x16 text,&lt;/li&gt;&#xA;&lt;li&gt;character ROM (40),&lt;/li&gt;&#xA;&lt;li&gt;64 graphic characters,&lt;/li&gt;&#xA;&lt;li&gt;16 backgroudn characters (frames etc.),&lt;/li&gt;&#xA;&lt;li&gt;8 definable characters,&lt;/li&gt;&#xA;&lt;li&gt;a 4 channel ADC (4 paddles or 2 joysticks)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Everything else with sprites, from Atari VCS (1977) and 8 Bit Atari (1979) over Commodore 64 (1982) and Famicom/NES (1983/85) to the Amiga (1985), did use proprietary, custom chipsets. Others didn't have hardware sprites at all. Well unless you considere lodable character sets as such.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and looking close, the PC got sprites also beginning in 1985 with some third party EGA and later SVGA cards - after all, the hardware mouse cursor is a single 16x16 2bpp sprite. Isn't it? :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-09-15T19:02:52.117" LastActivityDate="2017-09-15T19:02:52.117" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="4654" PostTypeId="2" ParentId="4652" CreationDate="2017-09-05T14:13:09.333" Score="7" Body="&lt;p&gt;The General Instruments AY-3-8900-1 supports eight 8x8 sprites with 1 color each. It was used in the Mattel Intellivision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The successors of the TMS9918 you mentioned are the Yamaha V9938 (32 32x32 sprites with 16 colors), the V9958 (same as V9938), and the V9990 (125 16x16 sprites with 16 colors). The V9938 was used in various manufacturer's MSX2 systems. The V9958 was used in various manufacturer's MSX2+ systems. The V9990 was used in cartridges for the MSX systems.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2017-09-05T14:13:09.333" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4655" PostTypeId="2" ParentId="4607" CreationDate="2017-09-05T19:00:34.177" Score="8" Body="&lt;p&gt;A workaround is to load the &lt;a href=&quot;https://www.c64-wiki.com/wiki/DOS_Wedge&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;DOS WEDGE&quot;&gt;DOS WEDGE&lt;/a&gt; from the 1541 Demo Disk. Once installed, it enables several disk commands without interfering with the BASIC memory.&#xA;For example &lt;code&gt;@$&lt;/code&gt; will list the directory without overwriting BASIC memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another one is to &lt;a href=&quot;https://www.lemon64.com/forum/viewtopic.php?t=48819&amp;amp;sid=48849a22744428946bc1988f83569671&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;BASIC screen save and restore&quot;&gt;load the directory into the screen buffer&lt;/a&gt;, by using &lt;code&gt;kernal&lt;/code&gt; calls:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SYS57812&quot;$&quot;,8:POKE147,0:POKE780,0:POKE781,0,POKE782,16:SYS65493&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Caveats:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The directory listing will be difficult to read&lt;/li&gt;&#xA;&lt;li&gt;If the directory exceeds 2KB, it will corrupt BASIC RAM.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2054" LastEditorUserId="2054" LastEditDate="2019-12-02T15:48:28.833" LastActivityDate="2019-12-02T15:48:28.833" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="4656" PostTypeId="1" AcceptedAnswerId="4659" CreationDate="2017-09-05T20:11:56.013" Score="7" ViewCount="737" Body="&lt;p&gt;According to Wikipedia, the &lt;a href=&quot;https://en.wikipedia.org/wiki/ColecoVision&quot; rel=&quot;nofollow noreferrer&quot;&gt;ColecoVision&lt;/a&gt; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/SG-1000&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sega SG-1000&lt;/a&gt; were almost identical.  I'm curious about that &amp;quot;almost&amp;quot; part.&lt;/p&gt;&#xA;&lt;p&gt;For example, they both used the same video generator (TMS9918/28).  They both used the same audio generator (SN76489).  They both used a Z80 running at 3.58MHz.  And they both had 1K of system RAM.&lt;/p&gt;&#xA;&lt;p&gt;One difference I am aware of is that the SG-1000 only had 2K (or was it 4K?) of video RAM whereas the ColecoVision had the maximum the TMS9918 allowed (16K).&lt;/p&gt;&#xA;&lt;p&gt;What other differences were there?  And, other than pin configuration, what prevents me from running SG-1000 games on a ColecoVision?&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="3290" LastEditDate="2020-08-08T06:11:50.007" LastActivityDate="2020-08-08T06:11:50.007" Title="What are the major differences between the ColecoVision and the SG-1000?" Tags="&lt;hardware&gt;&lt;sega&gt;&lt;coleco&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="4657" PostTypeId="1" CreationDate="2017-09-05T20:22:01.520" Score="6" ViewCount="1278" Body="&lt;p&gt;Is it possible to build a breadboard device to simply view the code burned into a 28 pin or 40 pin DIP chip?  I do not intend to do any erasing/programming on the chips, just wanted to view what is on them without the expense of a full-blown EPROM programmer device.&lt;/p&gt;&#xA;" OwnerUserId="6837" LastActivityDate="2017-09-16T22:14:50.213" Title="Reading the program on an EPROM chip" Tags="&lt;chip&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4658" PostTypeId="2" ParentId="4657" CreationDate="2017-09-05T20:37:31.100" Score="9" Body="&lt;p&gt;Jup, extreme simple, as EPROMs are static devices. Just connect a bunch of switches to the adress lines and some LED (use modern low power and don't forget the resistors) to the data lines, pull CS and OE and look whats on each address. You may even spare the switches and setup the address just with wires :)) I hope this isn't too low level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way would be using that EPROM in some old computer. For a 2716 I'd pull out an Apple II and plug it into some extension card with an according socket (or instead of BASIC :)) and use the monitor to browse the content. YMMV.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-09-06T08:25:20.333" LastActivityDate="2017-09-06T08:25:20.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4659" PostTypeId="2" ParentId="4656" CreationDate="2017-09-05T22:08:59.103" Score="10" Body="&lt;p&gt;They have different memory and IO maps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ColecoVision has a boot ROM at address 0000h and an inserted cartridge appears at 8000h. The Sega has no boot ROM so just maps the inserted cartridge at 0000h. RAM is at C000h on the Sega, 6000h on the Coleco. The Coleco's TMS is addressable between ports 40h and 7fh (including mirroring) but the Sega's is at BE and BF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So code that expected to run on one machine but was somehow inserted into the other would be running from a different location, breaking any absolute jumps or calls, would try to access RAM in the wrong location, causing it not to access RAM at all, and would similarly fail to reach any of the hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to write software that compiled for either without modification though, it would be fairly trivial. Nothing an assembler couldn't arrange properly.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-09-05T22:08:59.103" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4660" PostTypeId="2" ParentId="4657" CreationDate="2017-09-05T22:54:50.937" Score="7" Body="&lt;p&gt;While you can use toggle switches to enter addresses as @Raffzahn suggests (and it has a bit of the true retro authenticity to it: you'll be doing exactly the same operation that users of computers like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Altair_8800&quot; rel=&quot;noreferrer&quot;&gt;MITS Altair&lt;/a&gt; were doing to make them work), it's a &lt;em&gt;lot&lt;/em&gt; of working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.ti.com/general/docs/lit/getliterature.tsp?genericPartNumber=SN74LS393&amp;amp;fileType=pdf&quot; rel=&quot;noreferrer&quot;&gt;74LS393&lt;/a&gt; is a relatively cheap chip that contains a pair of 4-bit counters.  They count on negative edge of a clock signal, so if you connect the high-order bit of one to the clock input of the other, it becomes an 8-bit counter: pulse the clock repeatedly and it'll count up to 255 then switch back to 0.  Connect two of those together in the same fashion and you get a 16-bit counter.  Hook this up to the address lines of your eprom and then you can just press a button to get the next value, rather than having to make a complex sequence of adjustments by hand every time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.interlockroc.org/eproms-and-success.html&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt;'s a page where somebody has implemented a similar device (in this case capturing the output of the EPROM into an Arduino so that it can be stored for later reprogramming) along with a diagram showing how to cascade the counters as I describe above.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2017-09-06T00:18:00.557" LastActivityDate="2017-09-06T00:18:00.557" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4661" PostTypeId="1" AcceptedAnswerId="4665" CreationDate="2017-09-05T23:02:45.237" Score="20" ViewCount="1297" Body="&lt;p&gt;The wiki page &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-11_architecture&quot; rel=&quot;noreferrer&quot;&gt;PDP-11 architecture&lt;/a&gt; has a cryptic paragraph with no references or examples:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Inconsistent instructions&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Over the life of the PDP-11, subtle differences arose in the implementation of instructions and combinations of addressing modes, though no implementation was regarded as correct. The inconsistencies did not affect ordinary use of the PDP-11.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;My semi-recollection/semi-guess is that the differences could be due to variations in micro-programs dealing with auto-increments or auto-decrements of registers when a memory access interrupt occurred.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone shed light on these &amp;quot;subtle differences&amp;quot;?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strike&gt;The fact that &lt;em&gt;no implementation was regarded as correct&lt;/em&gt; deserves another question: was there another instruction set architecture with similar  inconsistencies without an officially declared correct way of implementing the architecture?&lt;/strike&gt;&lt;/p&gt;&#xA;&lt;p&gt;The answer to the stricken question is likely negative; as there is no way to prove a negative except by exhaustive research, and I wouldn't want to have a virtually unanswerable question under my name, I will not post it separately, unless someone would want to answer it positively.&lt;/p&gt;&#xA;&lt;p&gt;A contemporary example would be a difference between Intel and AMD in their handling of &lt;a href=&quot;https://youtu.be/KrksBdWcZgQ?t=29m25s&quot; rel=&quot;noreferrer&quot;&gt;a jump instruction with a data size override prefix&lt;/a&gt; (punchline at 32m50s).&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-06-28T13:02:25.690" Title="PDP-11 instruction set inconsistencies" Tags="&lt;pdp-11&gt;&lt;instruction-set&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4662" PostTypeId="2" ParentId="4652" CreationDate="2017-09-05T23:47:18.397" Score="4" Body="&lt;p&gt;The 6845 supports one hardware &quot;sprite&quot;, which is typically used for a text cursor but could be used for other purposes if desired.  Horizontal positioning accuracy is limited to one character cell, and there is no support for the sprite to straddle two cells vertically, but it would not be overly difficult for a system to offer a crude mouse pointer which was a &quot;dot&quot; that was half a character horizontally and vertically, and which could be moved on half-character boundaries.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-09-05T23:47:18.397" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4663" PostTypeId="2" ParentId="3263" CreationDate="2017-09-06T00:16:08.383" Score="4" Body="&lt;p&gt;I have 3 of these laptops, and can assure you that they will run OK without the NiCd battery installed, although you may need to replace the lithium CMOS battery if that hasn't been replaced. You can get a matching CMOS battery from Amazon, but you'll need to swap the connectors. Search for ER6C 3.6v Lithium. You should find a few AA size that say they're Maxell replacements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To open this laptop up, there are 5 screws underneath and 3 screws across the top of the back that need to be removed. Then just lift the top straight up. The batter connects to the power supply at the back. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Removing the battery requires taking out 2 screws on the bracket that holds it in place and then pulling the battery out. It may be held in place by some tape. The screw nearest the PS doesn't need to be completely removed as the hole is just partial. It's a little hard to hold on to that one and it might slip into the PS if you take it all the way out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested in a replacement battery, I would be happy to build one for a fellow LT owner for the cost of the parts and shipping. If you want to build one yourself, I'll dig up the part number for the connector for you. The battery consists only of 8 cells and 4 wires, so not too hard to assemble.&lt;/p&gt;&#xA;" OwnerUserId="6844" LastActivityDate="2017-09-06T00:16:08.383" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4664" PostTypeId="2" ParentId="4657" CreationDate="2017-09-06T04:00:59.880" Score="3" Body="&lt;p&gt;To add a price point, the &lt;a href=&quot;http://www.autoelectric.cn/EN/TL866_MAIN.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Minipro TL866CS&lt;/a&gt; is &lt;a href=&quot;http://stores.ebay.com/electronicdiy&quot; rel=&quot;nofollow noreferrer&quot;&gt;under $50&lt;/a&gt; and lets you read and write EPROMs. Check the &lt;a href=&quot;http://www.autoelectric.cn/MiniPro/MiniProSupportList.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;compatibility list&lt;/a&gt; to see if your chip is natively supported. I needed to write 27C400 chips which are not supported so I assembled an &lt;a href=&quot;https://gglabs.us/node/2021&quot; rel=&quot;nofollow noreferrer&quot;&gt;adapter board&lt;/a&gt; for it which works perfectly.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-09-06T04:00:59.880" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4665" PostTypeId="2" ParentId="4661" CreationDate="2017-09-06T08:41:06.590" Score="13" Body="&lt;p&gt;Here is an example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mov r5,-(r5)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That moves the contents of &lt;code&gt;R5&lt;/code&gt; to the address location specified in &lt;code&gt;R5&lt;/code&gt; after first decrementing &lt;code&gt;R5&lt;/code&gt;. The question is what gets put in the memory location? Is it the contents of &lt;code&gt;R5&lt;/code&gt; before the instruction was started or is it the decremented &lt;code&gt;R5&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if &lt;code&gt;R5&lt;/code&gt; contained 10 (decimal), usually the microcoded PDP-11s, would put 10 in location 9. Others, the earlier non microcoded ones, would put 9 in location 9. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Source: The book PDP-11 Architecture Handbook, 1983, digital, verifies this in Appendix B, &quot;PDP-11 Family Differences&quot;. Specifically, the models 23/24, 15/20, 25/40, 60, J-11, and T-11 would pre-decrement r before using it. The 44, 04, 34, LSI-11, 05/10, 45, 70, and VAX would not.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="576" LastEditDate="2018-04-17T20:59:28.483" LastActivityDate="2018-04-17T20:59:28.483" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="4666" PostTypeId="2" ParentId="4661" CreationDate="2017-09-06T14:30:47.713" Score="6" Body="&lt;p&gt;Some PDP-11 family computers could address its own registers as the top 8 (16-bit) addresses in its address space. (The top 4 kwords were sometimes dedicated to an I/O page.) For example, a program running on the 05/10 model could place a short loop in R2 to R5 and execute it from those registers. On most models, however, accessing those locations would yield a time-out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above is item 7 in a 52-member list of architecture instructional differences within the PDP-11 family, as itemized in Appendix B, &quot;PDP-11 Family Differences&quot; of_PDP-11 Architecture Handbook, 1983, &lt;strong&gt;digital&lt;/strong&gt;. Most are quite minor or obvious, such as some PDP-11s had the Extended Instruction Set (EIS) or floating point and some did not.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-09-06T18:53:21.663" LastActivityDate="2017-09-06T18:53:21.663" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4667" PostTypeId="1" AcceptedAnswerId="4668" CreationDate="2017-09-06T16:22:37.577" Score="12" ViewCount="1502" Body="&lt;p&gt;I recently read &lt;a href=&quot;https://ia902607.us.archive.org/isoview.php?iso=/9/items/dvdrom-wap-apple3/A3DVD.iso&amp;amp;file=A3%20Info%2FA3%20History%2FApple3DevelopmntHistory.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;a document&lt;/a&gt; which discussed how the Apple III would implement the Apple II emulation mode. On page 20, it goes on about difficulties involved with how the Apple III would have presumably a 16-sector disk format and how would an emulation mode work when the Apple II's DOS 3.2 was only 13-sector. It goes a bit more into how this would create maintenance implications with a worst case being supporting 5 versions of DOS 3.2 (the current one, a conversion one, a standard one and then 2 for the Apple III emulation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowhere in that document did I see anything suggesting that DOS 3.3 with a 16-sector format was planned or upcoming which leads me to suspect that perhaps DOS 3.3 was created simply to make it easier for Apple III emulation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So was DOS 3.3 and the Apple II's conversion to 16-sector format disks directly an influence or result of the Apple III's emulation mode?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="276" LastEditDate="2017-09-19T14:41:01.310" LastActivityDate="2019-04-24T08:47:50.560" Title="Was Apple DOS 3.3 created because of the Apple III?" Tags="&lt;apple-ii&gt;&lt;apple-dos&gt;&lt;apple-iii&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4668" PostTypeId="2" ParentId="4667" CreationDate="2017-09-06T17:41:10.033" Score="12" Body="&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&#xA;No, not really. It was even more twisted. 16 sector was done for the Pascal System for the Apple II, independently and before the Apple III got it, but didn't get rolled out for DOS until after the Apple III was introduced (and failed).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Wozniak developed the 16 sector format in 1979 for the Apple Pascal System, as otherwise the UCSD P-System would not only be space constrained, but also extremely slow, as every 7th block would be spread across two tracks. The Pascal System went on sale as a set of disks and a PROM to be placed on the Disk II controller card. It was usually also bundled with a language card (16 KiB memory card).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time Apple was all about getting the Apple III to market. Management believed that it should be superior in every way and no II model should have similar capabilities. Thus disk controllers were still shipped with 13 sector PROMs and DOS 3.2 only supported 13 sector format. The 16 sector format was reserved for the Apple III (and Pascal). The Apple II emulation included a 13 sector RWTS, to be loaded before accessing any Apple II disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This created a situation that Pascal could use the same disk as DOS with about 20% more space and even worse, people using Pascal &lt;em&gt;and&lt;/em&gt; DOS had to swap PROMs (or own two controllers). A very common hack was to solder the second PROM onto the first and select each with a manual switch. From an Apple management point of view they were different markets (home vs. school) so they could have different hardware, but reality was different and users became quite demanding to upgrade while using DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple III was introduced in spring 1980 and almost everyone at the company believed that the Apple II would be history half a year later. Well, history doesn't care for management and the Apple II was still runing strong, so policies got revised to tap into this by developing the LCA (Low Cost Apple) which became the Apple IIe. Its weird banking scheme is a result of the policy, still in effect at the time, that no II can be better than a III - so 128 Ki was defined as the maximum memory. But that's another story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short, to satisfy the demands of Apple II users for more disk space (and to generate additional sales), DOS got a facelift and the 13 to 16 sector kit was made available.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-24T08:47:50.560" LastActivityDate="2019-04-24T08:47:50.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="4669" PostTypeId="2" ParentId="4667" CreationDate="2017-09-06T17:42:36.753" Score="14" Body="&lt;p&gt;No, conversion to 16-sector format (and the necessary change from DOS 3.2 to DOS 3.3) was a consequence of Steven Wozniak realizing that he could get more capacity by tweaking the Apple II floppy driver controller hardware slightly. To quote from &lt;a href=&quot;http://www.metafilter.com/114962/jmp-TRIGSPIKES&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;After the Disk II had been in production for a while, Woz found out that the 8μs spec for the maximum allowable gap between flux reversals was overly conservative. The original Shugart format would generate longer gaps than 8μs in the code violation byte employed for address mark sync. The head amplifier's automatic gain control still coped tolerably well until reversals occurred maybe 14-15μs apart; 12μs was no problem. So he tweaked the Woz Machine PROM a little to stop it drifting out of sync when faced with more than one missing RDDATA pulse, and designed an improved GCR scheme based on disk nybbles that could now contain up to two successive zero bits. It turns out there are 66 of those, and reserving the same $D5 and $AA values for headers leaves just enough to represent 6 bits of user data per disk nybble.&lt;/p&gt;&#xA;&lt;p&gt;The new two-zeroes rule also allowed for a much shorter self-sync sequence. Instead of eight nybbles written with 36μs spacing, self-sync needed only four at 40μs before the $D5 $AA mark sequence. [...]&lt;/p&gt;&#xA;&lt;p&gt;Now there was room for 16 sectors per track, raising Disk II capacity to 143,360 bytes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If I remember correctly, there were actually upgrades (probably in the form of new PROMs, don't remember the details) for early disk controllers, which wouldn't be able to work with the new 16-sector format otherwise.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-09-06T17:42:36.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4670" PostTypeId="2" ParentId="1214" CreationDate="2017-09-06T22:17:52.627" Score="0" Body="&lt;p&gt;See if it makes a difference by right-clicking on your folder in Windows and click on &quot;Properties&quot;, then un-check the &quot;Read-only&quot; attribute.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WyS6y.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WyS6y.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or alternatively, reset the attributes from a command prompt replacing &quot;?&quot; with your drive letter and &quot;folder name&quot; with your folder name.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;attrib -h -r -s /s /d ?:\folder name\*.*&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="1880" LastActivityDate="2017-09-06T22:17:52.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4671" PostTypeId="2" ParentId="1214" CreationDate="2017-09-07T05:49:07.827" Score="3" Body="&lt;p&gt;The desktop was handled oddly in Classic Mac OS. Every non-removable drive had its own Desktop Folder, and the contents of those folders from every mounted disk were displayed &lt;em&gt;together&lt;/em&gt; on the desktop. By default, dragging a file from any disk to the desktop would attempt to move it to that drive's Desktop Folder, rather than copying it to another disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what you're describing, it sounds like the &quot;My PC&quot; drive is treated as a local drive, but it is either read-only, or cannot have a Desktop Folder created.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a workaround, create a folder on the desktop -- by default, this will be created on your startup disk -- then drag your file into that folder to copy it to that disk. Once you've copied the file, you can move it back out to the desktop if you so desire.&lt;/p&gt;&#xA;" OwnerUserId="461" LastActivityDate="2017-09-07T05:49:07.827" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4672" PostTypeId="1" CreationDate="2017-09-07T06:48:26.563" Score="43" ViewCount="4951" Body="&lt;p&gt;I've known about a technique allowing to bootstrap arbitrary 16-bit x86 code from a subset of instructions representable as printable ASCII bytes since the early 1990s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first example of an ASCII executable I saw was a short text that could be prepended to a uuencoded file resulting in an MS-DOS .COM executable that would uudecode and probably run itself. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That one I couldn't find, but here's an &lt;a href=&quot;https://astr0baby.wordpress.com/2012/08/31/executable-ascii-files-pt-2/&quot; rel=&quot;noreferrer&quot;&gt;example&lt;/a&gt; of a post reminiscing about x86 ASCII executables, with a few sample files to play with.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, an ASCII executable to convert .COM files to executable ASCII starts as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;T_OOWW3=XXWX5 2PY5w3P_-l.P-KD1Ep-OLPZ-pJP-pw40PQX5fsPu&#xA;ASDWERT/Nide5Fe,xPQX-=.PQX-MQP-xx4_P5rjP5Z2P-jE,JP=&#xA;5O2,APQX5R8P-rJPPRX5iBP-x=PRX5TsP59DHHP5rIHP-w64ZP=&#xA;40-2APQX-MiP-trP5_WP-pBP51w,pPTYPZPZP__z1t3w.FNtKptDCZ&#xA;LGcP4mCC558taMjL.4Hh0.44r5tNNAbs55p4VGsO5n_55LlC8zp_rk&#xA;gS5_pOiq.AIkgWub7GwtcOI.C9xO7PC2aPf.stA2.yGQ5JGvMvc4O_&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What is the history of this technique? Was it invented for the x86 instruction set or earlier? Which existing instruction set architectures are known to allow it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seeing how many people have misinterpreted the question, a clarification:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main usage of this trick was to publish binaries on USENET for people (or send them by e-mail to people) who don't use Unix and access &quot;the cyberspace&quot; from an MS-DOS machine. They may have no idea what uudecode is. With an ASCII-only executable the instructions are: copy the message in its entirety to a file, delete all lines up to and including the &lt;code&gt;-- cut here --&lt;/code&gt; line, rename the file to &lt;code&gt;whatever.com&lt;/code&gt; (for example, &lt;code&gt;uudecode.com&lt;/code&gt;) and run it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order for it to work, the file, which consists only of printable ASCII &amp;mdash; bytes 10 (LF), 13 (CR), 32 to 126 (space to ~), and definitely no bytes with the high bit set (might not pass through e-mail/USENET), and no other control bytes, especially no ^Z &amp;mdash; has to begin with a cleverly constructed sequence of machine commands that doesn't use any of the forbidden bytes yet manages to convert the rest of the text from ASCII to the binary intended to be executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, using ASCII executables could be a way to enter machine code by typing it in more efficiently than hex. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the question is, is it possible to have a similar converter for 8080/Z80, 6502, or another microcomputer platform, and if yes, has it been used and for what purposes, if not transmitting executables through e-mail?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="10260" LastEditDate="2019-02-09T18:29:51.187" LastActivityDate="2020-07-08T11:16:42.993" Title="Executable ASCII files before x86?" Tags="&lt;instruction-set&gt;&lt;8086&gt;&lt;text&gt;&lt;ascii&gt;" AnswerCount="8" CommentCount="7" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4673" PostTypeId="2" ParentId="4672" CreationDate="2017-09-07T07:47:23.520" Score="11" Body="&lt;h1&gt;Short Answer&lt;/h1&gt;&#xA;&lt;p&gt;It can be done in any environment that:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Allows the remarking of data files into program files,&lt;/li&gt;&#xA;&lt;li&gt;Has a loader format that's either primitive enough or all readable&lt;/li&gt;&#xA;&lt;li&gt;Has a character set (doesn't have to be ASCII) that has a sufficient number of encodings that produce valid opcodes&lt;/li&gt;&#xA;&lt;li&gt;Has an address space layout that fits the possible encodings&lt;/li&gt;&#xA;&lt;li&gt;Necessary OS calls can be encoded (subset of 3.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Numbers 4. and 5. can be circumvented depending on the machine, the OS and available text encodings.&lt;/p&gt;&#xA;&lt;p&gt;Since some small machines have 256 printable characters, the difference between a binary and a text file is negligible anyway.&lt;/p&gt;&#xA;&lt;p&gt;History here is a bit hard to grasp, as the necessity didn't arose in ye old days. Who needs tricks when you've got full access? But there was a somewhat similar situation for early mainframes - while there was a 'binary' mode for punch cards for many machines, one could also punch 'text' cards with encodings outside of the (usual) readable range. This worked, since the translation of 12 hole punch card code into 8 Bit EBCDIC worked according to fixed rules.&lt;/p&gt;&#xA;&lt;p&gt;Remember, real men always had a handpunch near, or carry at least a porta-a-punch.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-09-07T14:07:23.620" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4674" PostTypeId="2" ParentId="4672" CreationDate="2017-09-07T09:07:06.990" Score="12" Body="&lt;p&gt;It was standard practice on the Sinclair ZX80 &amp;amp; ZX81 to put executable code into a REM statement at the beginning of a BASIC program.&lt;/p&gt;&#xA;&lt;p&gt;REM statements are, of course, text comments, so this meets the spirit of your requirement for executable ASCII.&lt;/p&gt;&#xA;&lt;p&gt;The ZX80 (1980) and ZX81 (1981) predate your question about the early 1990s by about 10 years and used the Z80 processor.&lt;/p&gt;&#xA;&lt;p&gt;There is a guide on how to put executable code into REM statements &lt;a href=&quot;http://www.users.waitrose.com/~thunor/mmcoyzx81/chapter05.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  Essentially poking assembler codes back into a reserved space.&lt;/p&gt;&#xA;&lt;p&gt;This is just one example of the use of this technique.  It was also used later in the 1980s on the BBC Micro.  Small embedded subroutines were also put into REM statements on the HP9845, mostly to accelerate arithmetic calculations.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="278" LastEditDate="2020-07-08T10:17:03.517" LastActivityDate="2020-07-08T10:17:03.517" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="4675" PostTypeId="2" ParentId="4672" CreationDate="2017-09-07T10:56:12.963" Score="25" Body="&lt;p&gt;If you go back &lt;em&gt;a lot&lt;/em&gt; before the x86, this technique wasn't unusual at all. In fact, writing programs using printable letters and symbols was pretty much the norm for early computers, except that there was a number of encodings for words of varying bit size, and that encoding was &lt;em&gt;not&lt;/em&gt; ASCII.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;On the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1401&quot; rel=&quot;noreferrer&quot;&gt;IBM 1401&lt;/a&gt; (1959), a program that looked like&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;,008015,022029,036043,050054,055062,063065,069080/333/M0792502F1.065HELLO WORLD&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;would print &quot;HELLO WORLD&quot;. Here &lt;code&gt;,&lt;/code&gt; (set word mark), &lt;code&gt;/&lt;/code&gt; (clear storage), &lt;code&gt;M&lt;/code&gt; (move) etc. were opcodes, and the rest was operands. Wikipedia has a &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1401#Character_and_op_codes&quot; rel=&quot;noreferrer&quot;&gt;list&lt;/a&gt; of characters and corresponding opcodes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On the &lt;a href=&quot;https://en.wikipedia.org/wiki/Programma_101&quot; rel=&quot;noreferrer&quot;&gt;Olivetti P101&lt;/a&gt; &quot;desktop computer&quot; (1965), a program like&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;b ↑&lt;br&gt;&#xA;  B ↑&lt;br&gt;&#xA;  b ↓&lt;br&gt;&#xA;  B ÷&lt;br&gt;&#xA;  A ◇&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;would read two numbers, divide them and print the result. More examples in the &lt;a href=&quot;http://www.retrocomputing.net/parts/olivetti/programma101/docs/ManualeOlivettiP101.pdf&quot; rel=&quot;noreferrer&quot;&gt;manual&lt;/a&gt;. This machine didn't even have character sets with all Latin letters.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There was another early computer where the poor programmers had to translate assembler instructions into two characters of a rather random teletype-like charset on papertape, because initially there was no proper assembler, so &quot;writing gibberish&quot; was actually the proper method to program this computer. Unfortunately, I can't remember at the moment which computer that was (will edit answer when I do).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And there's probably a lot more examples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the technique itself is quite old. Coming back to encoding machine language into ASCII, in principle, one can apply it to any kind of ISA, one just has to define what part of ASCII one considers as admissible, which part of the instructions set of the particular CPU they match, and then it becomes an exercise to encode what you want in this restricted manner.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="3575" LastEditDate="2017-09-08T05:18:02.017" LastActivityDate="2017-09-08T05:18:02.017" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4677" PostTypeId="2" ParentId="4672" CreationDate="2017-09-07T15:54:09.873" Score="9" Body="&lt;p&gt;I remember doing this on the university mainframe around 1975.  This was on an ICL1904S.  Note that the 1900 series had been around for more than 10 years at that time.  I don't know when the feature came out but it had been around for some time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could list out any executable in card reader format.  It would produce the executable in 6-bit characters in lines of 80 characters.  Not really ASCII - the whole system ran on 6-bit a character set.  These could then be embedded in the GEORGE 3/4 batch files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was absolutely brilliant because the uni ran a cleanup every 2-3 weeks.  The OS would go through and delete all the executables and intermediate object files but it left the batch files alone, whatever their size.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2017-09-07T15:54:09.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4678" PostTypeId="1" AcceptedAnswerId="4680" CreationDate="2017-09-07T17:05:13.470" Score="6" ViewCount="1806" Body="&lt;p&gt;For the Apple //e, it was very common to have an extended 80-column card installed which brought the machine up to 128KB of RAM via 2 banks of 64KB each. There are soft switches in the $C0xx space which allow you to specify which bank is in use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is, it seems that the built in support for additional memory was limited only to the two banks and thus going beyond 128KB was not really in the design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did programs access the banks beyond the 128KB limit?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2021-02-13T01:50:19.307" Title="How does the Apple II address more than 128KB of RAM?" Tags="&lt;apple-ii&gt;&lt;memory&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4679" PostTypeId="1" AcceptedAnswerId="4681" CreationDate="2017-09-07T17:17:17.380" Score="7" ViewCount="665" Body="&lt;p&gt;When the Disk ][ first came out for the Apple II, the PROMs on the interface card only knew how to work with a 13-sector format. Around 1980, the Disk ][ was updated with 16-sector PROMs either for Apple Pascal or the newly released DOS 3.3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This upgrade introduced a problem where now someone's 13-sector disks would no longer work by default. Apple addressed this problem by supplying two programs: DEMUFFIN (to convert disks/files) and BOOT13.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I assume DEMUFFIN simply had the old 13-sector RWTS conversion code in it, but the BOOT13 was more interesting. Does it bypass the 16-sector PROMs? How exactly does it work and why does it work on the 16-sector PROM upgraded interface?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="3290" LastEditDate="2020-05-30T10:15:23.670" LastActivityDate="2020-05-30T10:15:23.670" Title="How could a 16-sector PROM Apple II access a 13-sector disk?" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;&lt;apple-dos&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4680" PostTypeId="2" ParentId="4678" CreationDate="2017-09-07T17:52:32.310" Score="6" Body="&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The thing is, it seems that the built in support for additional memory was limited only to the two banks and thus going beyond 128KB was not really in the design.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Jup. It was on purpose intended to not have any banks beyond 128k.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How did programs access the banks beyond the 128KB limit?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No banks, no access mechanism needed. Third party memory cards used different schemes - like emulating language cards (as on the II+), or switching 2 KiB blocks into the I/O ROM area.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;When Apple realized that the Apple III wasn't the instant success as expected, the LCA (Low Cost Apple) project, on hold for some time, was (re)started. They still believed that the III would take off eventually, so the major goal was a cost-reduced Apple II design that could extend the profitability for a year or two even though sales prices were expected to drop. While the LCA should have 64KiB (to reduce chip cost) and maybe 80 column display (which was originally a reserved feature for the professional III), its memory capabilities should stay for sure below what the Apple III offered - which started originally at 128 KiB (III+ started at 256 KiB) and was expandable to 512 KiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Walt Broedner, the main designer for the LCA, came up with the idea for using a 1k RAM and bank switching to implement the 80 column display, he also realized that this was a way to expand the II series to 128 KiB without adding any cost, as the few needed gates would slip into the custom MMU (one of the two custom ASICs of the LCA, the other being the IOU) anyway. Management let them go thru as this solution wasn't in any way extendable beyond 128 KiB, thus keeping the Apple III's superiority.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time many third party companies offered RAM cards to expand way beyond 128k, by extending the language card logic (Saturn most prominent). This design allowed next to infinite memory (ok, in reality anything beyond 2 MiB would have needed an extended approach), and an implementation as part of the LCA wouldn't have been a big deal, but not in line with what Apple envisioned at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: As usual when it comes to Apple II development, Steven Weyhrich's &lt;em&gt;Apple II History&lt;/em&gt; provides a &lt;a href=&quot;https://apple2history.org/history/ah07/&quot; rel=&quot;nofollow noreferrer&quot;&gt;great read&lt;/a&gt;, even with a Woz citation describing the mindset that lead to this rather limited bank switching scheme.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't get me wrong, being able to switch a large chunk of memory in at once was handy for an overlay-like program structure, but the huge bank size killed any other effect. And for data, more but smaller chunks would have been favourable.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-14T11:34:29.223" LastActivityDate="2020-02-14T11:34:29.223" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="4681" PostTypeId="2" ParentId="4679" CreationDate="2017-09-07T19:08:05.833" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does it bypass the 16-sector PROMs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Like MUFFIN it got it's own RWTS.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How exactly does it work and why does it work on the 16-sector PROM upgraded interface?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because DOS 3.2 also got it's own RWTS code?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PROM code is only used during the first two stages of boot, not during normal operation.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In detail DOS boot looks like this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;After Autostart/CTRL-P/PR#n the PROM code loads track 0/sector 0&lt;/li&gt;&#xA;&lt;li&gt;Track 0/Sector 0 uses the PROM code to load sector 0 (again) thru 9 and jumps there.&lt;/li&gt;&#xA;&lt;li&gt;This code already got it's own RWTS, independant of the PROM code.&lt;/li&gt;&#xA;&lt;li&gt;From there on the whole DOS is loaded using the RWTS loaded in step 3&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So BOOT13 just bypasses the first step, handles the second, using his own RWTS, then switching to the code loaded who continues with step 3&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Sidenote: The reason why the boot code loads 10 sectors instead of like 13 is based on the state of Woz' development of the Disk II controler, at the time the DOS loader was programmed. Originally Woz used FM encoding and could store 9 256 byte sectors on one track. This was based on the data Shugart supplied with the drives. After some intense measuring he decided that these numbers where rather conservative and he tightened the timing to get 10 sectors per track. At that point Randy Wigginton started DOS development. The second stage should, for performance reason read a whole track and continue from there ons. So 10 sectors it was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Soon after that decision was finalized Woz switched from FM to GCR to increase capacity by ~33% (10 to 13 sectors). But the boot sequence wasn't changed to reflect this.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-11-20T19:36:14.603" LastActivityDate="2017-11-20T19:36:14.603" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="4682" PostTypeId="2" ParentId="4652" CreationDate="2017-09-07T19:11:10.193" Score="7" Body="&lt;p&gt;The TI TMS 34010 and 34020 (released in 1986 and 1988 respectively) were pretty much the first fully programmable graphics processing units. They were 32-bit processors with a fair amount of dedicated graphics capability, including PixBlt operations, which were basically sprites--i.e., instructions that worked with/on a 2D array of pixels (though they also supported sizes quite a bit larger than you'd normally think of as sprites).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel apparently decided the dedicated GPU business looked interesting as well. In 1988 they released the 82786. Somewhat like the TI processors, it doesn't really treat sprites as a separate sort of thing--but it supports sprite-like operations on bitmaps and textures of (almost) arbitrary size, including the relatively small ones you'd normally think of as a sprite (and if you wanted a 32767x32767 pixel sprite, it'd theoretically do that too).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both were intended to be pretty much single-chip solutions. You'd need clock, power-supply, and external RAM, but both included things like the CRT controller, so you didn't need to add much there. They also included DRAM/VRAM controllers, so you didn't need much glue logic to talk to the memory either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most typical graphics cards using these probably did include a fair number of other chips though. On their own, neither provided anything similar to a EGA or VGA that the motherboard's BIOS would know how to talk to, so many (most?) cards using these &lt;em&gt;also&lt;/em&gt; included some sort of EGA/VGA chip set--which (despite providing much more limited abilities) often added a fair number of other chips. Some just supported VGA pass-through through, so you needed a VGA card along with the high-end graphics card.&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2017-09-07T19:39:12.073" LastActivityDate="2017-09-07T19:39:12.073" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4683" PostTypeId="1" CreationDate="2017-09-07T19:13:36.603" Score="4" ViewCount="214" Body="&lt;p&gt;Is there a way to simulate a Repeat/Until loop in a BASIC language without it, and without using a GOTO statement?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For BASIC languages with command separators, can this be done on a single line without an IF/THEN statement?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-09-08T02:58:37.970" Title="Simulate Repeat/Until in BASIC, and on a single line?" Tags="&lt;programming&gt;&lt;basic&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4684" PostTypeId="2" ParentId="4683" CreationDate="2017-09-07T19:13:36.603" Score="3" Body="&lt;p&gt;What we do is create a FOR/NEXT loop with the special property that we set the STEP rate to zero, so that it will run forever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To exit the loop, we set the counter equal to the ending value of the FOR loop.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR X = 0 TO 1 STEP 0&#xA;20 INPUT &quot;WHAT IS YOUR NAME?&quot;; X$&#xA;30 IF LEN(X$) &amp;gt; 0 THEN X = 1&#xA;40 NEXT X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this to work on a single line, the BASIC needs to support boolean values as a number, so that we can use Boolean Math in place of the IF/THEN statement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Support for this varies from one BASIC to the next, with some having a True value equal to 1 and others with True equal to -1. The following code checks to see which way this works and compensates for it.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 N = 1 : IF (1 = 1) = -1 THEN N = -1&#xA;20 FOR X = 0 TO 1 STEP 0 : INPUT &quot;WHAT IS YOUR NAME?&quot;; X$ : X = (LEN(X$) &amp;gt; 0) * N : NEXT X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Tested in Apple II Microsoft/FP BASIC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: An even shorter way to do it, that should be compatible across most BASIC languages, as suggested by Jeff Zeitlin:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 N=NOT 0 :FOR X=0 TO 1 STEP 0 :INPUT &quot;WHAT IS YOUR NAME?&quot;; X$ :X=(LEN(X$)&amp;gt;0)*N :NEXT X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="3687" LastEditDate="2017-09-08T02:58:37.970" LastActivityDate="2017-09-08T02:58:37.970" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="4685" PostTypeId="2" ParentId="4672" CreationDate="2017-09-07T19:54:34.410" Score="8" Body="&lt;p&gt;For a slightly interesting twist on this concept, consider Control Data mainframes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These beasts included not only a CPU, but a &quot;peripheral processing unit&quot; (PPU)&lt;sup&gt;1&lt;/sup&gt;--and the CPU sent commands to the PPU via normal I/O channels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU was a 60-bit processor that used 6-bit character codes. The PPUs were 12-bit processors, so the CPU sent a stream of 2 characters to the PPU to send it commands. The PPU commands all required that the first character of the string be a &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In most CDC character sets (they had a few, since each one only supported 64 characters), a 0 character was a colon, and letters started at 1, so A=1, B=2, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One semi-popular trick when I was in college was to get a user to execute a program that tried to print the string &lt;code&gt;:D&lt;/code&gt; to the screen. As it happened, PPU command 4 was &quot;log off user&quot;...&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In the higher-end machines, this was officially a &quot;peripheral processor&quot; (PP) instead, but the concept remained essentially similar.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="808" LastActivityDate="2017-09-07T19:54:34.410" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4686" PostTypeId="1" AcceptedAnswerId="4688" CreationDate="2017-09-08T06:01:11.980" Score="11" ViewCount="1132" Body="&lt;p&gt;In Linux we have command line switches traditionally started with minus &lt;code&gt;ls -al&lt;/code&gt;. In Windows those start with slash &lt;code&gt;dir /b&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember that on RSX-11M that I used to deal with and later on RT-11 the switches where traditionally slashes. This means that Windows did not invent the slash as a command line switch, it simply used an existing convention, albeit different from Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it known who when and why came up with these different types of command line switches?&lt;/p&gt;&#xA;" OwnerUserId="3835" LastActivityDate="2017-09-08T10:58:16.207" Title="Where do command line switches originate from?" Tags="&lt;history&gt;&lt;software&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4687" PostTypeId="2" ParentId="2997" CreationDate="2017-09-08T08:09:39.170" Score="-1" Body="&lt;p&gt;Very interesting article.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To give you a short answer to your question '&lt;strong&gt;Can artifact color mode create 262,144 colors on Amiga OCS?&lt;/strong&gt;':&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No you can not. And the reason is -as you might have guess- that the Amiga OCS chipset and specially the Denise (graphic) chip can only handle 12-bit graphics = 2^12 -&gt; 4096 colors and has only 32 color registers which are loaded with RGB values taken from the 4096 color palette. To be able to create a color palette larger than  2^12 = 4096 colors you need some external hardware connected to Amiga e.g. to the 23-pin RGB video port like HAM-E graphic card.&#xA;To show more colors than the 32 colors you can take advantage of the copper to change the values in the color registers with new values every scanlline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the Amiga AGA chipset it's another story. It has a 24-bit palette and can show up to 2^18 = 262144 colors in HAM8 mode (8 stand for 8-bitplanes in contrast to OCS chipset HAM6 - 6-bitplanes).&lt;/p&gt;&#xA;" OwnerUserId="6865" LastActivityDate="2017-09-08T08:09:39.170" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4688" PostTypeId="2" ParentId="4686" CreationDate="2017-09-08T10:58:16.207" Score="9" Body="&lt;p&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Unix'&lt;/strong&gt; style of command line handling is clearly inherited from GE's &lt;strong&gt;Multics,&lt;/strong&gt; as much as its name is a play on Multics. This incudes the hypen (&lt;code&gt;-&lt;/code&gt;) as token. In Multics it was called a &lt;em&gt;Control Argument.&lt;/em&gt; Multics itself may have inherited it from DECs &lt;strong&gt;TOPS-10,&lt;/strong&gt; or more exact the &lt;strong&gt;PDP-6 Monitor&lt;/strong&gt; program as it originally was called.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The popularity of Mutics at universities, together with many DEC installations at such places, can be seen as the major influence in next to all later systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data Generals &lt;strong&gt;RDOS/AOS,&lt;/strong&gt; in itself a child of DEC trained people (and DECs &lt;strong&gt;RSX-11&lt;/strong&gt; as direct competition) might have been the first to use a slash (&lt;code&gt;/&lt;/code&gt;) as token.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(I still think the Multics path seperator looks more natural&lt;/em&gt; &lt;code&gt;&amp;gt;etc&amp;gt;bin&lt;/code&gt; &lt;em&gt;- too bad Unix diverted here)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Comparsion with Mainframes&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next to all modern mini- / micro-computer OS commandline uses spaces as seperators between arguments and a dedicated token to indicate parameter names, which can stand for themself (switches) i.e. have no value assigned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example: &lt;code&gt;command arg1 arg2 -name1 val -name2&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast mainframe cli/script environments are based arround comma (&lt;code&gt;,&lt;/code&gt;) seperated arguments where parameter names are seperated by an equal/assignment (&lt;code&gt;=&lt;/code&gt;) sign from their value. Enpty values revert usually to the same default as if not present, therefore whats a lone switch elsewhere must here be accompanied by a (legal) value to enable the option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example: &lt;code&gt;command arg1,arg2,name1=val,name2=yes&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mainframe style has some advantages due less ambiguity, but is often considerete bloaty. Technical not true. It's rather that mainframe command designers love to have nice redable names, so it does get lengthy ... then again, GNU style parameter lists can easy spread over multiple lines.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2017-09-08T10:58:16.207" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4689" PostTypeId="2" ParentId="4542" CreationDate="2017-09-08T16:39:50.380" Score="2" Body="&lt;p&gt;The &amp;quot;old&amp;quot; computers usually used ICs with enough info to reverse engineer their functionality via program (I remember that most ICs datasheets also contained their circuit diagram). For example mine ZXS emulator works this way including chips like:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Z80A&lt;/li&gt;&#xA;&lt;li&gt;AY8912&lt;/li&gt;&#xA;&lt;li&gt;WD2797&lt;/li&gt;&#xA;&lt;li&gt;MHB8255A&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Which allows HW emulation without hacks. For example even custom low level FDD or tape loaders works (on most emulators are those just hacked by scannig for specific call instruction instead making custom loaders not usable). The draw back of this approach is that it requires &lt;a href=&quot;https://stackoverflow.com/a/33317202/2521214&quot;&gt;MC (machine cycle) level timing of the simulation&lt;/a&gt; which lowers the performance.&lt;/p&gt;&#xA;&lt;p&gt;The chips that are a &lt;strong&gt;black box&lt;/strong&gt; you hack or search for reverse engineered info as most likely someone already did it and post online ...&lt;/p&gt;&#xA;&lt;p&gt;Yes chip data-sheets contain errors especially the Z80 ... took me a long time to sort its instruction set out (and even claimers of 100% correctness are usually wrong). For info about debugging such things see:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/19218993/2521214&quot;&gt;Writing a graphical Z80 emulator in C or C++&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So to answer your question I would try this (in present order):&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;obtain machine schematics&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;circuit diagrams where commonly shipped along with the HW. So just google for circuit diagrams ...&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;obtain datasheedts on all used IC's you can&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can obviously ignore the common TTL logic if you can reverse its functionality.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;obtain testing SW&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;some architectues provide autotests that could surface hidden problems ... like ZEXALL. Using demos and games is also a good way but those usually either work or not but do not disclose what is wrong.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;check against different emulator core&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is best from start you can execute program both in your and in foreign emulator on per instruction manner. And simply check the registers and specific memory places for discrepancies. If found you know exactly which instruction went south...&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-09-08T16:46:40.670" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4690" PostTypeId="2" ParentId="4679" CreationDate="2017-09-08T19:23:24.720" Score="1" Body="&lt;p&gt;BOOT13 disks carry both DOS 3.2 and 3.3-compatible boot-sectors.  The DOS 3.2 boot sector boots directly if the hardware recognizes it.  The DOS 3.3 boot sector carries its own 5-and-3 decoder and loads the rest of the data manually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to have two boot sectors because the sector prologues are different between DOS 3.2 and 3.3.&lt;/p&gt;&#xA;" OwnerUserId="4476" LastActivityDate="2017-09-08T19:23:24.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4691" PostTypeId="2" ParentId="4678" CreationDate="2017-09-08T19:33:16.160" Score="1" Body="&lt;p&gt;Accessing the additional banks was simply a matter of accessing the appropriate soft-switch to enable a 64kb window in the auxiliary bank, and then using it directly.  After selecting the window, the interface is the same as for regular auxiliary access, including the language-card bank-switching mechanism to reach all 64kb.&lt;/p&gt;&#xA;" OwnerUserId="4476" LastActivityDate="2017-09-08T19:33:16.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4692" PostTypeId="1" CreationDate="2017-09-08T23:09:28.893" Score="18" ViewCount="1645" Body="&lt;p&gt;When I was working for a foundry consultancy, we did the following&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Download routines to add delays when writing certain tracks.  This was a security feature.  When the program started, it would try to read that track normally.  If it could, it failed the security check and stopped running.  If it couldn't, it downloaded the delay and checked again.  If it couldn't then it failed security again.&lt;/li&gt;&#xA;&lt;li&gt;Download routines to do database searches and return the results.  This was amazingly fast.  4 seconds to search the entire floppy.  This was before SQL was invented so it was a home brew pattern match written in 6502 assembler.&lt;/li&gt;&#xA;&lt;li&gt;Make the LED flash different colours when computations were running&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;What other obscure tasks were the 8050/1541 drives used for?&lt;/p&gt;&#xA;" OwnerUserId="5311" LastEditorUserId="6794" LastEditDate="2017-09-13T17:39:56.693" LastActivityDate="2017-09-13T17:39:56.693" Title="Obscure uses of the Commodore 8050/1541 disk drive" Tags="&lt;commodore-64&gt;&lt;disk-drive&gt;&lt;commodore-pet&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4693" PostTypeId="1" AcceptedAnswerId="4720" CreationDate="2017-09-09T06:11:34.943" Score="18" ViewCount="3480" Body="&lt;p&gt;The Z80 apparently had a 4-bit ALU, and computes 8-bit values in two stages. &#xA;The half-carry bit preserves the carry from bits 3 to 4.&#xA;Why did the designers of this chip choose to preserve that value in the flags register? Presumably, that intermediate result could have been stored (at less cost) in the Carry bit between the two halves of the addition/subtraction.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="3290" LastEditDate="2020-05-01T07:23:46.327" LastActivityDate="2020-05-01T07:23:46.327" Title="Why does the Z80 have a half-carry bit?" Tags="&lt;z80&gt;&lt;binary-coded-decimal&gt;&lt;cpu-flag-bits&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4694" PostTypeId="2" ParentId="4693" CreationDate="2017-09-09T06:27:49.650" Score="33" Body="&lt;p&gt;The intermediate carry flag, or &amp;quot;adjust flag&amp;quot;, or &lt;a href=&quot;https://en.wikipedia.org/wiki/Half-carry_flag&quot; rel=&quot;noreferrer&quot;&gt;half-carry flag&lt;/a&gt; is used to facilitate &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary-coded_decimal&quot; rel=&quot;noreferrer&quot;&gt;binary-coded decimal (BCD)&lt;/a&gt; arithmetic, where each decimal digit of a number is represented as a nibble (a group of 4 bits). The range of valid values for each nibble is 0 to 9 (0000 to 1001). If, after an arithmetic operation, the result contains a &amp;quot;non-decimal&amp;quot; nibble (1010 to 1111), it can be deduced from its bit pattern that a correction is necessary. However, it might also be necessary even if both nibbles of the result look &amp;quot;decimal&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Here's an example (from Wikipedia) why the flag is needed:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Adding the BCD values 39&lt;sub&gt;16&lt;/sub&gt; and 48&lt;sub&gt;16&lt;/sub&gt; produces 81&lt;sub&gt;16&lt;/sub&gt;. This result does not have a non-decimal low nibble, but it does cause a carry out of the least significant digit (lower four bits) into the most significant digit (upper four bits). This is indicated by the CPU setting the half-carry flag. This value must also be corrected, by adding 06&lt;sub&gt;16&lt;/sub&gt; to 81&lt;sub&gt;16&lt;/sub&gt; to produce a corrected BCD result of 87&lt;sub&gt;16&lt;/sub&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  0011 1001   39&#xA;+ 0100 1000   48&#xA;-----------&#xA;  1000 0001   81, intermediate result&#xA;+      0110   06, adjustment&#xA;-----------&#xA;  1000 0111   87, adjusted result&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-10-06T21:40:43.930" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="4695" PostTypeId="1" CreationDate="2017-09-09T12:52:37.207" Score="20" ViewCount="1631" Body="&lt;p&gt;MS DOS and derived systems use backslash &lt;code&gt;\&lt;/code&gt; for path separator and slash '/' for command parameters. Unix and a number of other systems used slash '/' for paths and backslash &lt;code&gt;\&lt;/code&gt; for escaping special characters. And to this day this discrepancy causes countless woes to people working on cross-compilers, cross-platform tools, things that have to take network paths or URLs as well as file paths, and other stuff that you'd never imagine to suffer from this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why? What are the origins of this difference? Who's to blame and what's their excuse?&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2018-10-04T18:59:05.947" Title="Slash versus backslash as directory separator - what/who caused this rift?" Tags="&lt;ms-dos&gt;&lt;unix&gt;&lt;file-system&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4696" PostTypeId="2" ParentId="4695" CreationDate="2017-09-09T13:12:34.567" Score="19" Body="&lt;p&gt;PC/MS-DOS 1 used the slash (&lt;code&gt;/&lt;/code&gt;) as the command line switch indicator (like DEC's RSX11 and DG's RTOS before), so when DOS 2.0 introduced subdirectories, they did need a new one. Backslash (&lt;code&gt;\&lt;/code&gt;) came somewhat natural - at least on US keyboards.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;With 2.0 IBM/Microsoft also tried to reverse that decision and introduce a syscall (INT 21h function 3700h and 3701h) and a &lt;code&gt;CONFIG.SYS&lt;/code&gt; option (&lt;code&gt;SWITCHAR=&lt;/code&gt;) to set a different switch indicator. All manufacturer supplied commands would obey that new char. Set to a hyphen (&lt;code&gt;-&lt;/code&gt;) would make the syntax more like Unix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, in paths, the OS didn't care. All dedicated path names, like in syscalls, can be written with either slash. It's only within the command line scan of each command, that simple slashes get interpreted as switch indicators. The idea was that people could/should migrate to a Unix-like style, but that didn't catch on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With DOS 3.0 the &lt;code&gt;SWITCHAR=&lt;/code&gt; option got removed fom &lt;code&gt;CONFIG.SYS&lt;/code&gt;, but the syscalls are still availabe up to today.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-09-09T20:53:30.677" LastActivityDate="2017-09-09T20:53:30.677" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4697" PostTypeId="2" ParentId="4693" CreationDate="2017-09-09T18:07:41.483" Score="4" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_4004&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel 4004&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_4040&quot; rel=&quot;nofollow noreferrer&quot;&gt;4040&lt;/a&gt; were 4-bit CPUs.  In some ways, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8008&quot; rel=&quot;nofollow noreferrer&quot;&gt;8008&lt;/a&gt; and its successor, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8080&quot; rel=&quot;nofollow noreferrer&quot;&gt;8080&lt;/a&gt; behaved as if it were two 4004s glued together, although the 8008 architecture was &lt;em&gt;not&lt;/em&gt; just two 4004s glued together.  For instance, the 8008 had an extensive &lt;a href=&quot;http://www.righto.com/2017/02/reverse-engineering-surprisingly.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;carry prediction chunk&lt;/a&gt; attached to the ALU.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding either BCD or 4-bit values in the 4004 could result in overflow, indicated by the carry flag.  In the 8008 and its descendants, this carry is preserved as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Half-carry_flag&quot; rel=&quot;nofollow noreferrer&quot;&gt;half-carry flag&lt;/a&gt;.  This is why there is a half-carry flag in Intel's 8080, &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8086&quot; rel=&quot;nofollow noreferrer&quot;&gt;8086&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8088&quot; rel=&quot;nofollow noreferrer&quot;&gt;8088&lt;/a&gt;, and subsequent x86 processors, as well as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zilog Z80&lt;/a&gt; and its descendants (e.g., the &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_eZ80&quot; rel=&quot;nofollow noreferrer&quot;&gt;eZ80&lt;/a&gt;, released in 2007) and its clones.  That the &lt;a href=&quot;http://www.righto.com/2013/09/the-z-80-has-4-bit-alu-heres-how-it.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z80 implements its ALU&lt;/a&gt; as a two-pass 4-bit ALU is a little weird, but is the way it was done.  This choice of ALU design is not why there is a half-carry flag; this flag is present to preserve binary compatibility with the 8080.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.sbprojects.com/sbasm/6809.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motorola 6809 also had&lt;/a&gt; a half-carry flag.  Weirdly, it is &lt;a href=&quot;https://www.maddes.net/m6809pm/appendix_a.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;not affected&lt;/a&gt; by the DAA opcode (even if the DAA must carry between the nibbles) for fixing up BCD addition via single-byte adds.  Here, the half-carry bit is set by the ADDA or ADCA and thus indicates binary inter-nibble carry, not BCD inter-digit carry.  (This is a way that the English Wikipedia's article on the half-carry flag is not quite applicable to the MC68000.)  Nevertheless, this led to the half-carry flag in the Motorola 68000 series and descendants as well.&lt;/p&gt;&#xA;" OwnerUserId="3784" LastActivityDate="2017-09-09T18:07:41.483" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="4698" PostTypeId="1" CreationDate="2017-09-09T18:29:14.280" Score="15" ViewCount="3381" Body="&lt;p&gt;Was there ever a commercially available hobbyist/teaching computer with the ability to single-step the processor?  Maybe a Z80-based machine?&lt;/p&gt;&#xA;" OwnerUserId="6870" LastEditorUserId="4138" LastEditDate="2017-09-09T20:36:12.057" LastActivityDate="2020-11-15T19:25:35.457" Title="Commercially available computer with single-step feature?" Tags="&lt;z80&gt;&lt;debugging&gt;" AnswerCount="11" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4699" PostTypeId="2" ParentId="4698" CreationDate="2017-09-09T18:38:39.283" Score="23" Body="&lt;p&gt;Next to every SBC/Kit computer, especially microprocessor systems could do so. Back then a system without this ability was something out of the norm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the &lt;strong&gt;8080/Z80&lt;/strong&gt;, already the grandpa of all hobby computers, the &lt;strong&gt;Altair 8800&lt;/strong&gt;, included that feature. Single step could be issued from the front panel and all cards I've ever seen follow that (hardware) protocol - as, eventually, did the first Z80 card for the S100, the &lt;strong&gt;Ithaca Audio Z80 card&lt;/strong&gt; (IA-1010).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside such hardware based solutions, which could even step thru ROM code, virtually every monitor program offered some way of single stepping through (RAM based) code. Like &lt;strong&gt;Commodores TIM,&lt;/strong&gt; or the monitor Woz supplied for the &lt;strong&gt;Apple II&lt;/strong&gt;. After all, what good would be a machine monitor if you couldn't use it for tracing?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="2081" LastEditDate="2017-09-15T18:53:16.487" LastActivityDate="2017-09-15T18:53:16.487" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4700" PostTypeId="2" ParentId="4698" CreationDate="2017-09-09T20:33:43.933" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Exidy_Sorcerer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Exidy Sorcerer&lt;/a&gt; included a 4K ROM monitor which included debug capability and, IIRC, single step execution.&lt;/p&gt;&#xA;&lt;p&gt;I believe MS-DOS/PC DOS &lt;strong&gt;debug&lt;/strong&gt; program could single step through the execution of other DOS programs.  I just checked, and see that the CP/M operating system included &lt;strong&gt;ddt&lt;/strong&gt; (dynamic debugging tool) program.  I'm guessing it was likely the model from which &lt;strong&gt;debug&lt;/strong&gt; was built.&lt;/p&gt;&#xA;&lt;p&gt;So yes, the capability was not only available, but common.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="15334" LastEditDate="2020-11-15T12:44:25.183" LastActivityDate="2020-11-15T12:44:25.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="4701" PostTypeId="2" ParentId="4698" CreationDate="2017-09-09T22:43:34.787" Score="6" Body="&lt;p&gt;Since the 8080 and Z80 don't do any memory protection, it's &lt;em&gt;fairly&lt;/em&gt; easy to do single stepping with them.&lt;/p&gt;&#xA;&lt;p&gt;The hardest part is that a debugger that wants to do debuggging has to figure out where one instruction ends, and the next one starts. It then (for example) inserts a &lt;code&gt;ret&lt;/code&gt; immediately after the next instruction to execute&lt;sup&gt;1&lt;/sup&gt;. Do a &lt;code&gt;call&lt;/code&gt; to execute that instruction, and it executes the instruction and immediately returns to the caller (the debugger). The debugger then looks at register values (or whatever it wants to). When it's ready to execute the next instruction, it replaces the &lt;code&gt;ret&lt;/code&gt; it inserted with the original content of that byte, finds the end of the next instruction, and inserts another &lt;code&gt;ret&lt;/code&gt; immediately after it. Lather, rinse repeat.&lt;/p&gt;&#xA;&lt;p&gt;Many newer processors (e.g., the 8086 and newer) have a single step flag (normally called the &amp;quot;trap flag&amp;quot; on x86) to do single stepping without having to modify the target instructions, which is certainly handy.&lt;/p&gt;&#xA;&lt;p&gt;It can get more difficult with processors that have MMUs, so it's harder to write to the code to be executed. In such cases, either you need something like the 8086's trap flag, or else the debugger needs enough privileges to modify the target code (e.g., it may need to run as a privileged process).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Another fairly popular possibility is to insert an &lt;code&gt;rst&lt;/code&gt; instruction.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2020-11-15T19:25:35.457" LastActivityDate="2020-11-15T19:25:35.457" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="4702" PostTypeId="1" CreationDate="2017-09-10T00:31:26.473" Score="9" ViewCount="1298" Body="&lt;p&gt;Figuring out how many bits in a group of bits are set to 1, known as computing &quot;population count&quot;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Hamming_weight&quot; rel=&quot;noreferrer&quot;&gt;Hamming weight&lt;/a&gt;, or &quot;bit summation&quot;, among others, has various applications. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is also fairly cheap to implement in hardware to be executed as fast as a fixed point addition if not faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likely for these reasons, &lt;a href=&quot;http://ed-thelen.org/comp-hist/CDC-6600RefMan.pdf&quot; rel=&quot;noreferrer&quot;&gt;CDC 6600&lt;/a&gt; (1964) had &lt;code&gt;CXi (47)&lt;/code&gt; described as &lt;em&gt;Count the number of 1's in Xk to Xi&lt;/em&gt; specifically included in its quite short list of instructions, although IBM STRETCH (1961) had that capability first as a by-product of all logical operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, in &lt;a href=&quot;https://en.wikipedia.org/wiki/Hamming_weight#Processor_support&quot; rel=&quot;noreferrer&quot;&gt;the list of processors with the &quot;popcount&quot; instruction&lt;/a&gt; there are large gaps. Since CDCs and Crays, and until very late 1990s, only SPARC (designed in mid-1980s) had the &lt;code&gt;POPC&lt;/code&gt; instruction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not a single IBM processor (not counting the aforementioned IBM STRETCH where there was no need for a separate instruction), not a single DEC processor (the instruction first appeared in an Alpha CPU when it was already Compaq's), not a single Motorola processor, not a single Intel or AMD processor until late 2000s, ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, innumerably many a software engineer had to implement the functionality of &lt;code&gt;POPCOUNT&lt;/code&gt; by hand with various degrees of efficiency (even GCC introduced &lt;code&gt;__builtin_popcount&lt;/code&gt; only in mid-2000s), and to endure silly interview questions about its efficient implementations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was going on? The wiki page doesn't discuss that aspect, but the many-decades long omission is so glaring that there had to be some musings on the subject by people &quot;in the know&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not asking people to speculate here; I'm asking for references to existing material about the lack of POPCOUNT in most of the CPUs of the last quarter of the XX century.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-09-11T09:02:25.970" LastActivityDate="2020-02-04T16:28:35.507" Title="Are there any articles elucidating the history of the POPCOUNT instruction?" Tags="&lt;history&gt;&lt;instruction-set&gt;" AnswerCount="4" CommentCount="23" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4703" PostTypeId="2" ParentId="4698" CreationDate="2017-09-10T02:05:34.480" Score="7" Body="&lt;p&gt;The RCA 1802 microprocessor was implemented in fully static CMOS.  You could stop and single step the clock to the processor.  Perhaps using a debounced front panel switch, which could be done with a slight modification to a Cosmac Elf kit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A debugger only pretends to single step a program by inserting breakpoints or copying instructions, but the debugger itself is still running.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-09-11T15:39:40.270" LastActivityDate="2017-09-11T15:39:40.270" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4705" PostTypeId="2" ParentId="4698" CreationDate="2017-09-10T04:11:24.283" Score="8" Body="&lt;p&gt;Hardware single-stepping the Z80 is nice and simple: when the processor asserts the M1 line (meaning it's executing the first machine cycle of an instruction), pull WAIT low until you're ready for it to continue.  You could easily build an add on board to do this for just about any Z80 machine with an exposed bus (although in many cases you'd also need to halt the display hardware too).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative option (similar to the system described by Peter Camilleri above) is to wait for the M1 line to be asserted the number of times you want, then issue an interrupt or NMI to cause a jump back to your monitor program.  An example of this is seen in the Nascom computers, which were ideal for assembly language development because their 2KiB monitor program and 1KiB video RAM left a very large amount of address space available for user programs, while the monitor itself was fully featured.  Although its ability to handle break points was based on changing instruction memory to insert an &lt;code&gt;RST&lt;/code&gt; instruction, its single-step function was hardware assisted, as shown in this schematic:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2bAQ2.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2bAQ2.png&quot; alt=&quot;single step section of Nascom 2 schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer has a latch attached to I/O port 0; on the left side of the schematic bit 3 of this is connected to the clock of a flip-flop (IC14a), which becomes set whenever bit 3 goes high (edge triggered, not level triggered -- this will be relevant later).  When this output goes high, two changes occur: the 'set' signal to flip-flops IC14b and IC15a is deasserted, allowing them to start changing (they'll initially both be '1'), and an input to IC10a goes high, which prevents IC15b's reset signal from being asserted while the IC14a state is high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the start of the next instruction (call it instruction 1), M1B goes low, then high again; this causes the output of IC14b to toggle from 1 to 0.  Instruction 2 causes it to toggle from 0 to 1 again; this causes the clock signal to IC15a to go high, toggling that from 1 to 0.  Instruction 3 again causes IC14b to go low; instruction 4 sends it high again, toggling IC15a back to high.  This sends a clock signal to IC15b whose /Q output goes from high to low -- this has two effects: the original IC14a flip-flop is reset back to low (and because the input is level triggered it won't become high again until port 0 bit 3 is set low and then back to high again) and an NMI signal is generated until the start of the next instruction.  This causes a jump back to the monitor program, which stores the program state, toggles the single step port signal back to low, shows the register contents and waits for a user command.  The code in the monitor to issue a single step instruction is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;exec2:  pop bc&#xA;    pop de&#xA;    pop hl&#xA;    pop af&#xA;    ; restore user sp&#xA;    ld  sp,(rsp)&#xA;    ; put user pc on top of stack&#xA;    push    hl&#xA;    ld  hl,(rpc)&#xA;    ex  (sp),hl&#xA;    ; set bit 3 of p0, to&#xA;    ;  activate nmi&#xA;    push    af&#xA;    ld  a,8&#xA;    out (0),a&#xA;    pop af                         ; ** INSTRUCTION 1&#xA;    ; execute one step of program&#xA;    retn                           ; ** INSTRUCTION 2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Instruction 3 is therefore the executed user instruction, and the NMI occurs at the beginning of instruction 4.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-11-18T00:45:23.700" LastActivityDate="2018-11-18T00:45:23.700" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="4706" PostTypeId="1" AcceptedAnswerId="4751" CreationDate="2017-09-10T07:02:13.270" Score="8" ViewCount="679" Body="&lt;p&gt;We know that the &lt;a href=&quot;https://en.wikipedia.org/wiki/ARM_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARM&lt;/a&gt; chip came out of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Computers&quot; rel=&quot;nofollow noreferrer&quot;&gt;Acorn&lt;/a&gt; computing initiative.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the book &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/031654616X&quot; rel=&quot;nofollow noreferrer&quot;&gt;The One Device&lt;/a&gt;, we &lt;a href=&quot;https://books.google.com.au/books?id=WVk_DQAAQBAJ&amp;amp;pg=PT151&amp;amp;lpg=PT151&amp;amp;dq=arm%20low%20power%20discovered%20by%20accident&amp;amp;source=bl&amp;amp;ots=To7kaXHRBm&amp;amp;sig=6nCv2IY7W5j2ZeJbolbD7dABQF4&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=0ahUKEwjX8PySg5rWAhXGyLwKHbxPDLgQ6AEIQzAF#v=onepage&amp;amp;q=arm%20low%20power%20discovered%20by%20accident&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;read&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The low-power big thing that the ARM is most valued for today, the reason that it's on all your mobile phones, was a complete accident,&quot; Wilson says. &quot;It was ten times lower than Steve had expected. That's really the result of not having the right sort of tools.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The implication is that (a) the lower power design of the ARM was discovered by accident, and (b) the right set of tools would have lead to a predictable outcome. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seems strange. One would have thought you could predict the power consumption of a device using physics and scientific models. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: &lt;strong&gt;Why isn't the approach to lower power CPUs guided by design rather than accident?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="3500" LastEditorUserId="276" LastEditDate="2017-09-19T09:34:07.197" LastActivityDate="2017-09-23T22:20:33.277" Title="Why isn't the approach to lower power CPUs guided by design rather than accident?" Tags="&lt;arm&gt;" AnswerCount="5" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4707" PostTypeId="2" ParentId="4706" CreationDate="2017-09-10T09:06:11.883" Score="4" Body="&lt;p&gt;It is, as the citation already points out, if you use professional tools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that the first ARM developments should be better described as a hobbyists aproach. They wrote their own tools on BBC Mico systems using BASIC and Assembler. It wasn't until they closed in for real production, when the ARM team had to transfer their ideas into professional toolsets.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-09-10T10:03:25.657" LastActivityDate="2017-09-10T10:03:25.657" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4708" PostTypeId="2" ParentId="4702" CreationDate="2017-09-10T18:49:29.570" Score="8" Body="&lt;p&gt;I would guess the answer is very simple and obvious:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CPU makers don't just implement what they want, what &quot;looks nice in a spec&quot;  or &quot;what's easily done&quot;. They are driven by the market and implement what programmers need and ask for.  In case a certain instruction would make a clear distinction in the market or create a unique selling point for a new CPU, they would certainly have implemented it. There is and has definitely been enough peer pressure in the market to justify. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But apparently it wasn't and they didn't.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-09-10T20:39:38.123" LastActivityDate="2017-09-10T20:39:38.123" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4709" PostTypeId="2" ParentId="4706" CreationDate="2017-09-10T20:09:21.260" Score="3" Body="&lt;p&gt;When RISC technology was developed, power usage wasn't the same concern as it is today. Smartphones had not been invented yet, electricity was cheaper, Moore's Law still had plenty of life in it, and global warming was not yet on people's minds. Heat management was a concern, but reducing power draw is only one way to prevent overheating. The main goal back then was to design CPUs with increasing clock rates, so that's where most of the effort went. Other achievements were often just happy accidents that occurred while working toward that goal.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-09-10T20:09:21.260" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4710" PostTypeId="2" ParentId="4698" CreationDate="2017-09-10T22:51:43.483" Score="7" Body="&lt;p&gt;I recall my old Z-80 based SD Systems Z80 Starter kit had single stepping in hardware. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A programmable timer had its output attached to the Non-Maskable Interrupt (NMI) pin. The debugger firmware would setup the timer to trigger that interrupt just as the instruction in question was fetching its first byte. This would fire off that interrupt when the instruction concluded or reached an interruptible point. Since the interrupt could not be masked, the processor had to respond.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The firmware was tricky in that the timer had to be very precisely programmed, but as a single stepper it was rock solid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a bonus, this method allows single stepping through ROMs and the firmware did not need to know how long the instruction was. Just where it started, which was typically the last saved PC value.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastEditorUserId="4066" LastEditDate="2017-09-10T23:24:04.680" LastActivityDate="2017-09-10T23:24:04.680" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4711" PostTypeId="2" ParentId="4692" CreationDate="2017-09-11T13:54:37.930" Score="7" Body="&lt;p&gt;Reposting slightly, but &lt;a href=&quot;http://www.webnet.at/c64/serielles_netzwerk.htm&quot; rel=&quot;noreferrer&quot;&gt;this (German-language) page&lt;/a&gt; provides software for networking C64s via the serial bus, with the simplest intended power-on state being two C64s connected to the two inputs of a 1541, having one set to ignore the drive while the other loads, then reversing that, then having them talk to each other and to the drive through negotiation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think arbitration is decentralised for a flexible topology, so the mildly askew use of the drive is as a networking hub. One can imagine it becoming a more powerful server on such a network, e.g. being responsible for authoritative state in a multiplayer game, but I don't think the page goes that far.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-09-11T13:54:37.930" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4712" PostTypeId="2" ParentId="4706" CreationDate="2017-09-11T15:51:44.910" Score="11" Body="&lt;p&gt;The question statement is faulty.  The approach to low power CPU design &lt;strong&gt;is&lt;/strong&gt; guided by tools.  Today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, those tools did not always exist, or, when they eventually did exist, were too expensive to be used by small chip development teams who could not afford to buy time on a Cray or large mainframe needed to analyze the physical models.  (Plus, the models themselves were still being developed for new fabrication processes.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time most 8-bit and early 16-bit microprocessors were designed, Spice, and other circuit simulation tools, IIRC, could simulate on the order of a few dozen transistors, far fewer than needed for a full CPU.  So total power estimation was done by engineers with some experience in integrated circuit design, not by tools.  Sometimes those estimates were off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same with performance estimation (before the days of fast enough logic simulation).  So the performance/power estimates could be even farther off until the first chips were tested with real application code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that HP (with far greater engineering resources than Acorn) did design very low-power processors for the first battery powered scientific calculators (HP-35, et.al.), but with magnitudes less raw performance than personal computer microprocessors of that era.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-09-11T22:57:16.187" LastActivityDate="2017-09-11T22:57:16.187" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4713" PostTypeId="2" ParentId="4692" CreationDate="2017-09-11T16:17:27.753" Score="12" Body="&lt;p&gt;There were a number of programs that used the 6502 in the 1541 as a coprocessor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An obvious application was for calculating fractals, because that doesn't need a lot of RAM. An example is the &lt;a href=&quot;https://www.c64-wiki.de/wiki/Mandelbrot-Construction-Set&quot; rel=&quot;noreferrer&quot;&gt;Mandelbrot Construction Set&lt;/a&gt; (German article).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.lemon64.com/forum/viewtopic.php?t=27911&amp;amp;start=0&quot; rel=&quot;noreferrer&quot;&gt;This&lt;/a&gt; thread also mentions some more recently written games which used the 1541 as coprocessor, namely &lt;a href=&quot;http://csdb.dk/release/?id=820&quot; rel=&quot;noreferrer&quot;&gt;The Masque&lt;/a&gt;, &lt;a href=&quot;http://csdb.dk/release/?id=15745&quot; rel=&quot;noreferrer&quot;&gt;Panta Rhei&lt;/a&gt;, &lt;a href=&quot;http://csdb.dk/release/?id=11610&quot; rel=&quot;noreferrer&quot;&gt;Altered States&lt;/a&gt; and &lt;a href=&quot;http://csdb.dk/release/?id=4762&quot; rel=&quot;noreferrer&quot;&gt;Digital Worlds&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course all the Turbo Loaders had a part that needed to run on the 1541, but these were not really obscure.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-09-11T16:17:27.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4714" PostTypeId="1" AcceptedAnswerId="4721" CreationDate="2017-09-11T21:33:08.180" Score="10" ViewCount="2163" Body="&lt;p&gt;By the early eighties, there were a variety of off-the-shelf sound chips suitable for use in home computers and arcade games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about 1977? That seems to have been just a little early; I'm not seeing any good off-the-shelf sound chips in that year. Are there any that I'm missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-02-27T18:41:24.560" Title="Sound chips in 1977" Tags="&lt;history&gt;&lt;chip&gt;&lt;sound&gt;" AnswerCount="6" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4715" PostTypeId="2" ParentId="4714" CreationDate="2017-09-11T21:41:44.717" Score="2" Body="&lt;p&gt;Why specifically 1977?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A year later, but still in the seventies: &lt;a href=&quot;https://en.wikipedia.org/wiki/General_Instrument_AY-3-8910&quot; rel=&quot;nofollow noreferrer&quot;&gt;General Instrument AY-3-8910&lt;/a&gt;, aka Yamaha YM2149F.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-09-11T21:41:44.717" CommentCount="21" ContentLicense="CC BY-SA 3.0" />
  <row Id="4716" PostTypeId="2" ParentId="4714" CreationDate="2017-09-11T21:45:38.150" Score="10" Body="&lt;p&gt;I'm not sure about 1977. The first chips that come up to me are the &lt;strong&gt;TI TMS9919 aka SN76489&lt;/strong&gt; and &lt;strong&gt;General Instruments AY-3-8910&lt;/strong&gt;. The AY-3-8910 was around for sure in 1978. Both were also used in a lot of arcade machines and consoles/home computers. And both have follow-up designs that are available even today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The direct predecessor of the TMS9919 was the &lt;strong&gt;SN76477&lt;/strong&gt;, called the &lt;em&gt;Complex Sound Generator&lt;/em&gt; (the TMS9919 was called the &lt;em&gt;Digital&lt;/em&gt; Complex Sound Generator). Each function could be controlled via direct inputs, so clearly a sound chip. But for use with digital systems, some glue logic (latches) would be needed. It got an article in Popular Electronics in 1978 but I don't know how long it was before it was available. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the GI side, there were the &lt;strong&gt;AY-1-0212&lt;/strong&gt; and &lt;strong&gt;AY-3-214&lt;/strong&gt; before the AY-3-8910. But it's hard to qualify them already as sound chips, as they weren't really self-sufficient from today's view.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;While the &lt;strong&gt;Signetics 2637&lt;/strong&gt; isn't 'just' a sound chip, it offered in 1977 a single sound chanel plus white noise and loudness controll. The 2637 could be best described as a single chip video console, as it includes a video circuitry with colour abilitiy and sprites, 13x16 text, character ROM plus definable characters plus ADC for up to 4 analoge paddles or two analogue joysticks - plus said sound generator.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-09-15T18:50:38.000" LastActivityDate="2017-09-15T18:50:38.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4717" PostTypeId="2" ParentId="4714" CreationDate="2017-09-11T21:46:54.570" Score="0" Body="&lt;p&gt;&quot;Sound chip&quot; is an ambiguous term that has changed over time.  There were audio DAC ICs available in the 1977 time frame.  But the non-captive audio ICs did not include any DMA (there were no usable common bus standards at that time) or any significant DSP capabilities.  But there were chips that produced a few &quot;beeps&quot; available near that time frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A capable &quot;sound chip&quot; at that time was more likely a large PCB for the S-100 bus or DEC minicomputer.  Circa 1979 or '80, there were also some fairly full featured sound cards for the Apple II.  But not chips.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-09-11T21:52:19.313" LastActivityDate="2017-09-11T21:52:19.313" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4718" PostTypeId="1" AcceptedAnswerId="8601" CreationDate="2017-09-12T01:31:11.323" Score="2" ViewCount="489" Body="&lt;p&gt;In this &lt;a href=&quot;https://www.youtube.com/watch?v=-cOVmcQHg2I&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple commercial for the new MacBook Pro&lt;/a&gt;, there are several typewriters as well as a few retro Apple laptops shown. Which typewriters and laptops are being shown?&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Screenshots&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Order is left to right, top to bottom.  Click to embiggen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Typewriters:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8sMFv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K2xhq.png&quot; width=&quot;300&quot; alt=&quot;Typewriter 1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/IU0Yb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0sHUa.png&quot; width=&quot;300&quot; alt=&quot;Typewriter 2&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/2UQis.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/372Ao.png&quot; width=&quot;300&quot; alt=&quot;Typewriter 3&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/otF3h.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bvwmy.png&quot; width=&quot;300&quot; alt=&quot;Typewriter 4&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/PyPAZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6ijwt.png&quot; width=&quot;300&quot; alt=&quot;Typewriter 5&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Computers:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WRDn4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/E8Bvs.png&quot; width=&quot;300&quot; alt=&quot;Computer 1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/AmjuI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G0jN2.png&quot; width=&quot;300&quot; alt=&quot;Computer 2&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/A0MVX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/M0jNO.png&quot; width=&quot;300&quot; alt=&quot;Computer 3&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/oULCv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0DIvP.png&quot; width=&quot;300&quot; alt=&quot;Computer 4&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6877" LastEditorUserId="7347" LastEditDate="2018-12-31T13:47:44.743" LastActivityDate="2018-12-31T13:47:44.743" Title="What typewriters and computers are shown in this commercial?" Tags="&lt;apple&gt;&lt;identify-this-computer&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="4719" PostTypeId="2" ParentId="4692" CreationDate="2017-09-12T09:07:11.000" Score="9" Body="&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Playing music with the drive heads, of course. I've tried that too, wrecking the drive in the process.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Dimming the drive LED, by flashing it very fast, with a variable duty cycle.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Printing a file on disk directly to a daisy-chained printer, freeing up the computer to do something else.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Direct disk-to disk copy between two 1541 units, similarly to the one above.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="348" LastActivityDate="2017-09-12T09:07:11.000" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4720" PostTypeId="2" ParentId="4693" CreationDate="2017-09-12T10:16:49.733" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why does the Z80 have a half-carry bit?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because the ALU is only 4 bits wide. The Z80 needs to preserve the carry between bits 3 and 4.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did the designers of this chip choose to preserve that value in the flags register?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Good question. You can't access the &lt;code&gt;H&lt;/code&gt; bit directly except by saving the status register and then examining its contents, so there is no real purpose in having it visible. I suspect it was just easier or saved gates to put it in the same 8 bit register as the other user accessible flags. There are also two other undocumented flags in the status register that have less obvious uses.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Presumably, that intermediate result could have been stored (at less cost) in the Carry bit between the two halves of the addition/subtraction&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Some Z80 arithmetic calculations should not affect the normal carry flag. For example address displacement calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the &lt;code&gt;DAA&lt;/code&gt; instruction needs not just the final carry to be preserved but also the carry between &quot;hex&quot; digits so it knows how to adjust the digits to get the proper answer. For example 1 + 1 = 2 which is fine in hex and BCD but 9 + 9 = &lt;code&gt;0x12&lt;/code&gt; in hex and the addition needs to be adjusted by &lt;code&gt;DAA&lt;/code&gt; to be &lt;code&gt;0x18&lt;/code&gt;. The only way to tell between the two cases is to know the value of the carry from the bottom hex digit to the top hex digit.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2017-09-13T09:30:08.173" LastActivityDate="2017-09-13T09:30:08.173" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4721" PostTypeId="2" ParentId="4714" CreationDate="2017-09-12T10:39:00.423" Score="9" Body="&lt;p&gt;Sound generation might be easier using an IC, but unless you have a need for your product to be small, there's no reason you couldn't do it with a few discrete components and some general-purpose ICs.&#xA; &lt;a href=&quot;http://www.nutsvolts.com/magazine/article/bipolar_transistor_cookbook_part_5&quot; rel=&quot;noreferrer&quot;&gt;This article&lt;/a&gt; gives a few sample circuits that are useful for producing sounds, but note that for a computer there's another possibility that isn't considered here: you presumably already have a crystal oscillator to drive your clock signal, in the range of ~1-4MHz depending on the CPU you've chosen.  Feeding that into a divider circuit (which is to say a counter and a digital comparator used to toggle a flip flop) and you can produce virtually any frequency output you like.  Then to make sound, all you need to do is load the divider value into a latch that's connected to the processor bus, and use another bit to turn the sound on or off, and there you have frequency-controlled sound.  It's not as good as the multi-channel sound chips you got later, but it's better than the Sinclair Spectrum had, and that managed OK even 5 years later...&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-09-12T10:39:00.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4722" PostTypeId="2" ParentId="4718" CreationDate="2017-09-12T11:15:44.193" Score="4" Body="&lt;p&gt;I don't know any of the typewriters; those predate me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computers, however, are (in order of appearance):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://lowendmac.com/1984/macintosh-128k/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Macintosh&lt;/a&gt; (the original, later known as 128k to distinguish it from the 512k &quot;Fat Mac&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The one that started it all, of course. Kinda-sorta-maybe portable.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://lowendmac.com/1993/powerbook-165c/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PowerBook 165c&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was the first Apple notebook with a color display, and the first notebook from &lt;em&gt;any&lt;/em&gt; vendor to have a 256-color display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the 1080 HD version of the video, and getting really close to the screen, you actually read the badge on this one as confirmation of the identity.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://lowendmac.com/category/tech-specs/powerbook/powerbook-g4/15-inch-powerbook-g4/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aluminum PowerBook G4 (15&quot;)&lt;/a&gt; (Late 2003 or newer, but it could be any year/speed after that; you can't tell from the video because the cases were identical)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was the first notebook to come in an aluminum enclosure, and it really set the standard for all Apple &quot;pro&quot; notebooks that have followed it. The case design has been tweaked, but not yet significantly revamped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The badge on this one is pretty clear even at lower resolutions. It's just above the keyboard. If it were a MacBook Pro (the first Intel-based Apple notebooks; early versions used a case nearly identical to the PB G4), it would have said &quot;MacBook Pro&quot; under the screen.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.apple.com/macbook-pro/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Some kind of weird, unrecognizable unit without function keys.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It is a bit odd they didn't include the &lt;a href=&quot;http://lowendmac.com/1989/mac-portable/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Macintosh Portable&lt;/a&gt;, which was the first &lt;em&gt;real&lt;/em&gt; portable Macintosh, or the &lt;a href=&quot;http://lowendmac.com/1991/powerbook-100/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PowerBook 100&lt;/a&gt;, which was (I believe) the first sub-notebook (a form factor that would later reappear with the PowerBook Duo series). The PowerBook 100 was also the first notebook to include a built-in trackball pointing device, in a location that would become the industry standard (centered at the front of the unit, underneath the keyboard).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would have also felt compelled to include one of the &lt;a href=&quot;http://lowendmac.com/category/tech-specs/powerbook/powerbook-g3/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PowerBook G3 models&lt;/a&gt; (post-Kanga: either Wallstreet, Mainstreet, Lombard, or Pismo), which was the first notebook that I ever thought was &quot;sexy&quot;. It also introduced the glowing Apple logo on the lid that is so iconic today (although in the early designs, it was upside down when the lid was open and the computer was in use!).&lt;/p&gt;&#xA;" OwnerUserId="2037" LastEditorUserId="2037" LastEditDate="2017-09-12T11:45:12.797" LastActivityDate="2017-09-12T11:45:12.797" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4723" PostTypeId="1" AcceptedAnswerId="4724" CreationDate="2017-09-12T14:33:44.667" Score="2" ViewCount="372" Body="&lt;p&gt;In this &lt;a href=&quot;https://www.youtube.com/watch?v=RDpOB-OXypQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Reveal video for the new MacBook Pro&lt;/a&gt;, seven or eight vintage Apple products are shown. Which ones exactly are they?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other question similar to this one is asking about a completely different Apple commercial.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Screenshots&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Order is left to right, top to bottom.  Click to embiggen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kLE77.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zWM64.png&quot; width=&quot;200&quot; alt=&quot;Laptop 1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/AjQOw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qtNfk.png&quot; width=&quot;200&quot; alt=&quot;Laptop 2&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/SN5T8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/36qoi.png&quot; width=&quot;200&quot; alt=&quot;Laptop 3&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/BlixV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FNKnl.png&quot; width=&quot;200&quot; alt=&quot;Laptop 4&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/LR1JY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zwyNi.png&quot; width=&quot;200&quot; alt=&quot;Laptop 5&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/XiK6y.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QQgLw.png&quot; width=&quot;200&quot; alt=&quot;Laptop 6&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ZVdtJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v6vPz.png&quot; width=&quot;200&quot; alt=&quot;Laptop 7&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/1NCiS.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gvssc.png&quot; width=&quot;200&quot; alt=&quot;Laptop 8&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/gk1YD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eYJPw.png&quot; width=&quot;200&quot; alt=&quot;Laptop 9&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/O8MyO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/E3MOM.png&quot; width=&quot;200&quot; alt=&quot;Laptop 10&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6877" LastEditorUserId="7347" LastEditDate="2018-12-31T13:27:48.740" LastActivityDate="2018-12-31T13:27:48.740" Title="What Apple computers are shown in this MacBook Pro Reveal video?" Tags="&lt;apple&gt;&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="4724" PostTypeId="2" ParentId="4723" CreationDate="2017-09-12T14:53:20.423" Score="3" Body="&lt;p&gt;In order:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;one of the first PowerBooks, either a &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerBook_140&quot; rel=&quot;nofollow noreferrer&quot;&gt;140&lt;/a&gt; or a &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerBook_170&quot; rel=&quot;nofollow noreferrer&quot;&gt;170&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;one of the colour &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerBook_500_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;PowerBook 500 series&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;a &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerBook_G3#PowerBook_G3_Series_.28Wallstreet_Series_II.2C_AKA_PDQ.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wallstreet Series II PowerBook G3&lt;/a&gt; (spot the CD-ROM drive, and rounded touchpad);&lt;/li&gt;&#xA;&lt;li&gt;an &lt;a href=&quot;https://en.wikipedia.org/wiki/IBook#iBook_G3_.28.22Clamshell.22.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;iBook G3&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;an &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerBook_G4#Titanium_PowerBook_G4&quot; rel=&quot;nofollow noreferrer&quot;&gt;Titanium PowerBook G4&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;an &lt;a href=&quot;https://en.wikipedia.org/wiki/MacBook#Original_polycarbonate_model&quot; rel=&quot;nofollow noreferrer&quot;&gt;white polycarbonate MacBook&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;a &lt;a href=&quot;https://en.wikipedia.org/wiki/MacBook_Air&quot; rel=&quot;nofollow noreferrer&quot;&gt;MacBook Air&lt;/a&gt; (you can read the model below the screen);&lt;/li&gt;&#xA;&lt;li&gt;a &lt;a href=&quot;https://en.wikipedia.org/wiki/MacBook_Pro#Third_generation_.28Retina.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;third-generation (Retina) MacBook Pro&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;a &lt;a href=&quot;https://en.wikipedia.org/wiki/MacBook_(Retina)&quot; rel=&quot;nofollow noreferrer&quot;&gt;MacBook Retina&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;the new touch-bar &lt;a href=&quot;https://en.wikipedia.org/wiki/MacBook_Pro#Fourth_generation_.28Touch_Bar.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;MacBook Pro&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-09-13T07:37:26.133" LastActivityDate="2017-09-13T07:37:26.133" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4725" PostTypeId="1" AcceptedAnswerId="4726" CreationDate="2017-09-13T07:50:55.107" Score="8" ViewCount="2437" Body="&lt;p&gt;Are there any numbers available for the floating point performance of classic minicomputers of the seventies and eighties? For example, the VAX 11/780 for integer calculations was generally rated in the ballpark of one MIPS, similar to the 68000 and 286, but I can't find any corresponding figures for floating point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do have a figure of 50 kflops for the 8087, so a comparison to that would be useful, as would raw flops numbers.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4025" LastEditDate="2018-12-04T20:44:17.087" LastActivityDate="2018-12-04T20:44:17.087" Title="Floating point performance of classic minicomputers" Tags="&lt;performance&gt;&lt;floating-point&gt;&lt;minicomputers&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4726" PostTypeId="2" ParentId="4725" CreationDate="2017-09-13T07:58:44.403" Score="12" Body="&lt;p&gt;&lt;a href=&quot;http://www.roylongbottom.org.uk/whetstone.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Whetstone table&lt;/a&gt; may be useful. The ratio of Whetstones/s to FLOPS varies, but not too much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A whetstone test outputs a table, like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Loop content                 Result            MFLOPS     MOPS   Seconds&#xA;&#xA;N1 floating point    -1.12475025653839100      19.971              0.274&#xA;N2 floating point    -1.12274754047393800      11.822              3.240&#xA;N3 if then else       1.00000000000000000               11.659     2.530&#xA;N4 fixed point       12.00000000000000000               13.962     6.430&#xA;N5 sin,cos etc.       0.49904659390449520                2.097    11.310&#xA;N6 floating point     0.99999988079071040       3.360             45.750&#xA;N7 assignments        3.00000000000000000                2.415    21.810&#xA;N8 exp,sqrt etc.      0.75110864639282230                1.206     8.790&#xA;&#xA;MWIPS                                          28.462            100.134&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(from the &lt;a href=&quot;http://www.roylongbottom.org.uk/whets.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;C language variant of Whetstone&lt;/a&gt;, for a 100 MHz Pentium.) &#xA;The overall MFLOPS result can be computed as the geometric mean of the three MFLOPS values in lines 1, 2, and 6, as suggested in the Whetstone table &lt;a href=&quot;http://www.roylongbottom.org.uk/whetstone.htm#anchorHeading&quot; rel=&quot;nofollow noreferrer&quot;&gt;explanation&lt;/a&gt;. In this case it will be cube_root(19.971*11.822*3.36)=9.257 MFLOPS. Why they didn't add a few lines of code to compute and print it automatically, is beyond me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not all rows in the table have the MFLOPS value because on most machines an older version of Whetstone was run that did not report MFLOPS per loop. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For VAX 11/780, luckily, we have the MFLOPS value (0.25 - with FPU, which would be a fair comparison with 8087, that is 5x).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For most DEC systems, when both MWIPS and MFLOPS figures are given, the ratio between Whetstones/s and FLOPS varies between 3.5x and 4x, so a reasonable comparison can be made with other systems for which the MFLOPS value is not provided. For example, a PDP 11/34 with hardware FP, reported as 0.204 MWIPS, would likely have performed approximately at 50 KFLOPS.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-09-14T06:48:56.373" LastActivityDate="2017-09-14T06:48:56.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4727" PostTypeId="2" ParentId="4725" CreationDate="2017-09-13T12:37:48.513" Score="15" Body="&lt;p&gt;There are nearly endless benchmarks (see a short list of relevance at &lt;a href=&quot;http://www.netlib.org/benchmark/&quot; rel=&quot;noreferrer&quot;&gt;Benchmark Programs and Reports&lt;/a&gt; on the Top500 site) and it may need a bit of work to understand each benchmark's implications (see &lt;a href=&quot;http://www.cs.virginia.edu/~mk2z/cs654/files/benchmark.pdf&quot; rel=&quot;noreferrer&quot;&gt;Benchmark Tutorial&lt;/a&gt;, in IEEE Micro 1989, or &lt;a href=&quot;http://users.ece.utexas.edu/~ljohn/teaching/382m-15/reading/weicker.pdf&quot; rel=&quot;noreferrer&quot;&gt;An Overview of Common Benchmarks&lt;/a&gt; in Computer 12/1990). Benchmarking will always give only a rough estimation, so all numbers should be taken with a serious amount of salt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said that, one of the longest running measurements, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Whetstone_(benchmark)&quot; rel=&quot;noreferrer&quot;&gt;Whetstone Benchmark&lt;/a&gt;, is quite useful for us, as it's been around since 1972. Its details were described in an article in &lt;a href=&quot;http://www.roylongbottom.org.uk/whetstone.pdf&quot; rel=&quot;noreferrer&quot;&gt;1976 Computer Journal&lt;/a&gt;. Its result is given in so called &lt;strong&gt;&lt;em&gt;W&lt;/strong&gt;hetstone &lt;strong&gt;I&lt;/strong&gt;nstructions &lt;strong&gt;P&lt;/strong&gt;er &lt;strong&gt;S&lt;/strong&gt;econd&lt;/em&gt;, usually noted as &lt;strong&gt;Kilo&lt;/strong&gt;WIPS or &lt;strong&gt;Mega&lt;/strong&gt;WIPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Originally developed in ALGOL60 it has been ported to next to all languages available and many computers. This was possible as the benchmark isn't defined as a specific source code (like with &lt;a href=&quot;https://en.wikipedia.org/wiki/Standard_Performance_Evaluation_Corporation&quot; rel=&quot;noreferrer&quot;&gt;SPEC&lt;/a&gt;), but a series of (FP) operations. So, to some extent, it also relies on programming skills as well as the compiler used. Alas due to its simple nature, programmers' skills will only show up as long as the compiler is &lt;em&gt;rather&lt;/em&gt; bad in supporting a (new) machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As with every benchmark, it also measures memory access, control structures, etc., not only FP instructions. But translation is rather well defined, so with detailed numbers, WIPS can be translated into FLOPS. Or just used as they are for the sake of simplicity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some examples for common machines are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MWIPS  Machine    Environment&#xA;0.0027 Apple II   Applesoft&#xA;0.0188 PDP 11/20  Fortran&#xA;0.0852 80286/87   Fortran&#xA;0.74   VAX 11/780 Fortran, No FPU&#xA;1.02   VAX 11/780 Fortran&#xA;2.4    SUN 3/160  Fortran 68020/881@16 MHz&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;All values are taken from the &lt;a href=&quot;http://www.roylongbottom.org.uk/whetstone.htm&quot; rel=&quot;noreferrer&quot;&gt;Whetstone Benchmark History and Results&lt;/a&gt;, written by Roy Longbottom who was involved with application of Whetstone almost since the beginning. It provides not only much information about the development, but also quite extensive lists of machines, focusing on scientific usage. His site includes quite a lot &lt;a href=&quot;http://www.roylongbottom.org.uk/&quot; rel=&quot;noreferrer&quot;&gt;more information&lt;/a&gt; about benchmarks than just Whetstone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there are many other sites/lists around the web, so a search may help to find values for the machines you are searching for. Or just go ahead and implement it yourself - it's really just a &lt;a href=&quot;http://www.netlib.org/benchmark/whetstones&quot; rel=&quot;noreferrer&quot;&gt;few (hundred) lines of code&lt;/a&gt; (some FORTRAN required).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-09-13T17:46:58.503" LastActivityDate="2017-09-13T17:46:58.503" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4728" PostTypeId="2" ParentId="4725" CreationDate="2017-09-13T14:59:48.757" Score="4" Body="&lt;p&gt;This is not so much quantitative data as qualitative annecdote. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many years ago, I interfaced an NSC MM-57109 &quot;math&quot; chip to the Z-80 system I was building at the time. It gave me access to much better calculating abilities than I would otherwise have had access to. A professor at York University, Keith Aldridge, approached me to see if this chip could be fitted to the Interdata 5/16 minicomputer he was using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get to the point, the first step was to benchmark the performance of the 5/16 computer's software based floating point. It was pretty good. On the order of 50 microseconds for most operations (sorry, that data is long lost). Much faster than the MM-57109 which needed several milliseconds for most tasks. We investigated using the then brand new 8087 chip, but were forced to conclude that the overhead of interprocessor communication and format translation made this a losing proposition. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Dr Aldridge said when I presented my findings: &quot;Engineers look for answers; Sometimes the answer is NO!&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ended up working with his grad students improving their FORTRAN code. I could usually improve throughput by applying a few simple transformations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, another colleague donated a 32 bit Interdata (by then Perkin Elmer) machine that had floating point in hardware.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastActivityDate="2017-09-13T14:59:48.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4729" PostTypeId="2" ParentId="1261" CreationDate="2017-09-13T16:52:50.343" Score="15" Body="&lt;p&gt;This is not a Microsoft logo - it is a logo for Apple's &lt;em&gt;Gourmet&lt;/em&gt; baby food branch.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Back when Apple released the original Macintosh, they had a printed 40-odd page insert in Newsweek showing off what the Mac could do. Much of it revolved around the design and creation of a business or brochure for a fictional gourmet baby food. – &lt;a href=&quot;https://www.reddit.com/r/retrocomputing/comments/6r69ta/does_anybody_recognise_this_logo/dmnp1t9/&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Thanks to Reddit user &lt;a href=&quot;https://www.reddit.com/user/danamania&quot; rel=&quot;noreferrer&quot;&gt;danamania&lt;/a&gt; for the recollection and &lt;em&gt;especially&lt;/em&gt; for finding &lt;a href=&quot;http://www.macmothership.com/gallery/gallery3.html&quot; rel=&quot;noreferrer&quot;&gt;an archive&lt;/a&gt; of Newsweek including this Macintosh showcase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How this ever got to be on a badge with the Microsoft logo is another story.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-09-13T16:52:50.343" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4730" PostTypeId="1" AcceptedAnswerId="4750" CreationDate="2017-09-13T18:31:17.283" Score="7" ViewCount="849" Body="&lt;p&gt;I connected a vintage serial matrix receipt printer (Datamega DPN-233) via FTDI to my MacBook's USB.&#xA;It performs its own self-test without problems, prints an example and the RS 232 configuration (19200.8.N.1)&#xA;I tried 2 different USB-to-Serial adapters, both have the same problem:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When I press the &quot;Online Button&quot; on the printer my MacBook receives a &quot;v&quot;&lt;/li&gt;&#xA;&lt;li&gt;When I press the &quot;Online Button&quot; on the printer again, my MacBook receives a &quot;w&quot; and so on...&lt;/li&gt;&#xA;&lt;li&gt;Whatever ESC-Code I send nothing happens, sometimes, after some commands the printer starts to print some garbage&lt;/li&gt;&#xA;&lt;li&gt;The printer can print 24 Characters in one line. After i sent 12 CR Strokes to it, it starts to print a complete Line of &quot;=y=y=y=y=y=y=y=y=y=y=y=y&quot; and performs a line feed.&lt;/li&gt;&#xA;&lt;li&gt;I already tried 9600 but the result is exactly the same. &lt;/li&gt;&#xA;&lt;li&gt;I configured the printer as XON/XOFF, when I detach the Rxd from the printer all the above doesn't work any more&lt;/li&gt;&#xA;&lt;li&gt;All the above happens when I use two different serial terminal emulations on my Mac (Serial and Arduino)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any suggestions? The serial communication seems to work.&#xA;Is this an encoding problem?&lt;/p&gt;&#xA;" OwnerUserId="6887" LastEditorUserId="3748" LastEditDate="2019-05-31T16:31:41.150" LastActivityDate="2019-05-31T16:31:41.150" Title="Serial Receipt Printer Garbage" Tags="&lt;rs232&gt;&lt;serial&gt;&lt;printer&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="4731" PostTypeId="2" ParentId="4730" CreationDate="2017-09-13T19:06:31.237" Score="12" Body="&lt;p&gt;Looks like inverse polarity. &#xA;The CR code is 015, &lt;code&gt;00001101&lt;/code&gt; in binary.&#xA;The codes for &quot;=&quot; and &quot;y&quot; are 075 and 171, &lt;code&gt;00111101&lt;/code&gt; and &lt;code&gt;01111001&lt;/code&gt; respectively. Note the sequence of four zeros in CR, and sequences of four ones in &quot;=&quot; and &quot;y&quot;. With the inverse polarity, the character boundaries will depend on the speed with which they are sent because the start and the stop bits are messed up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A common source of inverted polarity is attempting to interface a device with a true RS-232 (logic &quot;0&quot; - positive voltage , logic &quot;1&quot; - negative voltage) with a device producing TTL levels (logic &quot;0&quot; - 0V, logic &quot;1&quot; - 5V or 3.3V). The RS-232 voltage ranges are potentially much higher than TTL levels (up to +/- 25V, but nowadays usually +/- 5-6V), so theoretically you could be risking one of the two devices when connecting them directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a page describing the problem and ways to solve it in detail: &lt;a href=&quot;https://www.sparkfun.com/tutorials/215&quot; rel=&quot;noreferrer&quot;&gt;https://www.sparkfun.com/tutorials/215&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A commonly used chip to do the conversion was called &lt;a href=&quot;https://en.wikipedia.org/wiki/MAX232&quot; rel=&quot;noreferrer&quot;&gt;MAX232&lt;/a&gt;. Its currently available version is &lt;a href=&quot;https://www.sparkfun.com/products/589&quot; rel=&quot;noreferrer&quot;&gt;MAX3232&lt;/a&gt;. Many vendors offer &lt;a href=&quot;https://www.google.com/search?q=invert+rs232+signal&quot; rel=&quot;noreferrer&quot;&gt;little PCBs&lt;/a&gt;  providing the functionality.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-09-14T01:34:25.867" LastActivityDate="2017-09-14T01:34:25.867" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4732" PostTypeId="2" ParentId="4730" CreationDate="2017-09-14T08:01:44.403" Score="3" Body="&lt;p&gt;While Leo's answer seems possible, I find a reverse polarity problem relatively improbable when standard off-the-shelf equipment is used. I wouldn't want to rule out Leo's answer completely, though, just point out a possible alternative (even if I would assume that with reverse polarity at least the &lt;em&gt;number&lt;/em&gt; of characters sent and apparently received should be equal).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look at the bit patterns, another explanation (and the most common one in serial comms) is differing baud rate on both ends. even if you say it's the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Double the bit rate on the receiving end can lead to bit duplication (as all bits are sampled twice), and the patterns you observe strongly look like duplicated bits to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently, one end of your line is configured to 9600 bps only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What program are you using on the Mac (what Mac?) to send the characters?&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-09-14T13:34:20.260" LastActivityDate="2017-09-14T13:34:20.260" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4733" PostTypeId="1" AcceptedAnswerId="5758" CreationDate="2017-09-14T16:23:26.497" Score="24" ViewCount="3490" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Galaga&quot; rel=&quot;noreferrer&quot;&gt;Galaga&lt;/a&gt; was a popular arcade game developed and released by Namco (Midway in N. America) in 1981. It had amazing, fast, smooth 2D-sprite graphics, and relied on Namco hardware that utilized 3 Z80 CPUs running at ~3 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am aware from the limited information found online that the 3 Z80s were divided up as one main CPU, and a co-processor each for sound and graphics. I'm mostly interested in how the Z80 for graphics processing was utilized to manage the drawing of all the sprites. Although, I would assume a similar means of sharing data existed for the sound co-processor too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it is noteworthy that none of the 8-bit single CPU home or console systems of the 1980s faithfully reproduced this game. There was a weak port for the Atari 7800 and a decent, serviceable port for the NES, which still falls well short of the arcade game graphics. So I am guessing that the sprite hardware available for the top 8-bit home systems was no match for Namco's custom graphics hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did the Namco hardware create such an effective graphics rendering engine from slow, cheap, multiprocessing Z80 CPUs?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-02-16T09:40:04.080" Title="How did Z80 multiprocessing work in the Namco Galaga hardware?" Tags="&lt;z80&gt;&lt;arcade&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4734" PostTypeId="2" ParentId="1626" CreationDate="2017-09-14T17:19:15.383" Score="13" Body="&lt;p&gt;I think your premise is wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly &quot;overflow&quot; in most cases doesn't mean pure arithmetic overflow, it means overflow of some other limit, checking said limits would require more than a single extra instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly in many of the glitches involving overflow the overflow is a secondary part of the glitch. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Using a rare candy on a level 255 pokemon results in a level 0 pokemon, but the player isn't supposed to have a level 255 pokemon in the first place.&lt;/li&gt;&#xA;&lt;li&gt;Encountering a &quot;glitch pokemon&quot; corrupts the hall of fame due to an overflow in the sprite decompresser but the player shouldn't be encountering glitch pokemon in the first place.&lt;/li&gt;&#xA;&lt;li&gt;In psywave the pokemons level is multiplied by 1.5, this can only overflow if the pokemon is over level 100 which again should never happen.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As to the broader question of why pokemon Red/Blue has so many &quot;interesting&quot; glitches (rather than boring crash bugs) I think it's a combination of the large size of the game (a whole megabyte in size) with the limitations of 8 bit platforms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The very limited total ram (8K video ram, 8K work ram, 4x8K cart ram, less than 1K high ram) along with the fact that it's generally faster to use hard-coded memory locations on 8-bit platforms means that the same hard-coded memory location will be used for different things in different contexts. If you can set a memory location in one context and then cause it to be read in another context you can end up with memory locations set to predictable values that were outside the ranges the developers believed they could have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Combine that with a large non-linear game written on a platform where resources were precious (so you wouldn't initialise something or check something unless you thought it needed doing) and there are lots of opportunities for unexpected combinations.&lt;/p&gt;&#xA;" OwnerUserId="499" LastEditorUserId="499" LastEditDate="2019-04-11T09:55:32.597" LastActivityDate="2019-04-11T09:55:32.597" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="4735" PostTypeId="2" ParentId="4698" CreationDate="2017-09-14T18:28:31.007" Score="3" Body="&lt;p&gt;In my time as an electronics student I worked with a trainer based on 6502 that allowed the execution step by step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It had a hexadecimal keyboard and a 7-segment display with 8 digits (if I remember correctly).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Binging (not Googling) &quot;6502 trainer&quot; I found a couple of interesting names: KIM-1 and EMMA II&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For KIM-1 there's a software emulator -&gt; &lt;a href=&quot;http://www.crbond.com/soft6502.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Soft6502 (KIM-1)&lt;/a&gt; looks cool! In eBay I see a few, but with expasinve Price ($599, $999, $4.995)&lt;/li&gt;&#xA;&lt;li&gt;You can see ENMA II  here &lt;a href=&quot;https://picclick.com/Rare-6502-Microprocessor-Trainer-EMMA-II-Tested-Working-282621274450.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;EMMA II sold!&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Searching &quot;6502&quot; on eBay you can found some trainers some at good Price ($120 -&gt; &lt;a href=&quot;http://www.ebay.com/itm/6502-Microprocessor-Kit-/282640289495?hash=item41ceac8ed7:g:r50AAOSwxg5X1BKd&quot; rel=&quot;nofollow noreferrer&quot;&gt;Looks good&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The 6502 procesor is simplest than z80, and it's a good start too, but I prefer a z80 on a ZX Spectrum 48K :)&lt;/p&gt;&#xA;" OwnerUserId="405" LastEditorUserId="405" LastEditDate="2017-09-14T18:43:17.860" LastActivityDate="2017-09-14T18:43:17.860" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4736" PostTypeId="1" AcceptedAnswerId="4737" CreationDate="2017-09-14T21:57:57.197" Score="8" ViewCount="1287" Body="&lt;p&gt;In the early days of computing, memory error detection and correction was either non-existent (Wikipedia tells of &lt;a href=&quot;https://en.wikipedia.org/wiki/ECC_memory#Implementations&quot; rel=&quot;noreferrer&quot;&gt;Seymour Cray famously saying &quot;parity is for farmers&quot;&lt;/a&gt;  when asked why he left it out of the CDC 6600) or was limited to parity checking only, although the &lt;a href=&quot;https://en.wikipedia.org/wiki/Hamming_code&quot; rel=&quot;noreferrer&quot;&gt;Hamming error-correcting code&lt;/a&gt; has been known since 1950.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the end of the last century, high-end or even medium-priced PC motherboards supported DRAM with ECC, and it was fairly commonplace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What was the first commercially available computer sold with Hamming ECC memory, either standard or as an option?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2019-10-06T18:53:08.727" Title="What was the first commercially available computer with ECC memory?" Tags="&lt;history&gt;&lt;memory&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4737" PostTypeId="2" ParentId="4736" CreationDate="2017-09-14T22:59:49.597" Score="10" Body="&lt;p&gt;Not sure what the &lt;em&gt;first&lt;/em&gt; ECC use was, but basically all mainframes got parity control as standard and ECC codes optional. To some degree there was a split between commercial (banking etc.) application/mainframes and scientific. Commercial systems where heavy on ECC usage, while scientific often just went with parity - if at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Common word sizes for ECC memory was 32+6 bit per word and in fewer cases 64+8 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually one of the first &quot;mass&quot; produced ECC memory system was the 1958 IBM 7302 Core Storage Unit, offering 16 KiWords of 72 bits each. Some machines (like the 7030 Stretch) used it as 64 bit + 8 bit ECC, while others (like 7090) used all 72 bits as two 36 bit words without any protection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally I remember the IBM /370 Model 165 (ca. 1971) operating with ECC, and being able to correct single bit errors without operator interaction. Similar mainframes of that timeframe (~1970s) with ECC were Siemens 4004-151 and -220  or Telefunken TR440. All of them operated on magnetic core memory where ECC was quite essential for un- or better less interrupted operation.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-04T19:00:31.620" LastActivityDate="2019-10-04T19:00:31.620" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="4738" PostTypeId="2" ParentId="3326" CreationDate="2017-09-14T23:11:16.120" Score="2" Body="&lt;p&gt;Well Here is how I did it, and occasionally still do.&#xA;In my day it was the system hardware guys who created the 1st code.&#xA;We needed it to test and fix the hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point (1978) the big advantage was the terminal (24 lines by 80 characters), and the UART (serial port, COM port). although on one occasion, I built a unit just using a 12 digit 7 segment display and a scientific calculator keyboard (40 keys).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 1st step is to write a monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It needs operations to &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Accept a character, print a character &lt;/li&gt;&#xA;&lt;li&gt;Accept and print a lines&lt;/li&gt;&#xA;&lt;li&gt;Display and change memory &lt;/li&gt;&#xA;&lt;li&gt;Set a break point, step and run programs&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;and at the second step&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Load and save programs. &#xA;The earliest cheap mechanism was audio cassette tapes (30/1800 bytes per second/minute ).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was not a great deal of code. maybe a few hundred lines of code.&#xA;You wrote it and coded it by hand, Gridded notepads were the key. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The big break through for me was something called a rom emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This is a modern kit version to attach to a PC &lt;a href=&quot;http://www.sparetimegizmos.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.sparetimegizmos.com&lt;/a&gt;&#xA;/Hardware/EPROM_Emulator.htm. The 1st one I bought for about $100 (I was getting paid at this point!) had a simple display, and a 20 key keyboard, so you could edit the memory and.. program eproms).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could connect it to the rom socket and and it enabled me to edit memory interactively. All I needed then was some sort of display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the monitor was working, Assembler was next.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First a simple line by line assembler. recognized Mnemonics, and register names, and simple labels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next was a 2 pass assembler which provided for relocatable code.&#xA;This needed the load function as you needed to load the program twice, once to allocate memory, and generate code, and the 2nd to update addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote my 1st multi-tasking operating system in 4k ROM + 2K ram this way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPM and the PC extended the monitor into a bios, add in Floppy drives and you need file system, and as the saying goes bob's your uncle you have a system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that was it til I discovered Forth and life became really interesting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Forth is not a compiler, it really is a linker, which can be easily extended and normally includes an assembler, and often makes you ask why you need high level languages. You do because optimizing compilers are real time and resource savers, but they were still at least 5 years away or $100K plus in the early 80s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you &quot;get&quot; Forth you wonder what is all the fuss about OSes etc., is, then you get older and realize that they would be very useful when they finally create a good one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand &#xA; &lt;strong&gt;Do not write in assembler&lt;/strong&gt;, write in &quot;C&quot; at a minimum.&lt;/p&gt;&#xA;" OwnerUserId="3774" LastActivityDate="2017-09-14T23:11:16.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4739" PostTypeId="1" CreationDate="2017-09-15T01:02:21.377" Score="9" ViewCount="531" Body="&lt;p&gt;I have a HP 9122D (EDIT: its actually a 9133) combo disk drive connected to an HP 9000 model 310 computer running Basic 4.0. This setup is used to control a few machines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hard drive is getting dated (obviously), and I am worried that it will break soon, rendering the machines unusable. To that end, I would like to copy the contents of the disk as an image, and emulate the hard drive using a modern computer via the &lt;a href=&quot;http://www.hp9845.net/9845/projects/hpdrive/&quot; rel=&quot;nofollow noreferrer&quot;&gt;HPDrive Project&lt;/a&gt;, this &lt;a href=&quot;http://www.dalton.ax/hpdisk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PIC emulator&lt;/a&gt;, or something similar. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem I have is how to copy a disk image off of the 9122D (EDIT actually a 9133) to be able to use the above tools. In researching options, I found BASIC commands to copy files, but none to directly copy the entire unformatted data on the disk. I am not beyond spending money on a device that will do this, and my focus is on trying to do this with minimal effort. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I am blown away by these responses, thank you so much everyone!&#xA;Unfortunately, the drive is actually an HP 9133 HD/floppy drive (the drive must have been swapped out from the factory original). The drive does not have a floppy inserted, so all the data I need is on the HD. The machine starts by running the machine control program, so I am at a loss to programmatically reaching a solution in basic. &lt;/p&gt;&#xA;" OwnerUserId="6889" LastEditorUserId="824" LastEditDate="2018-07-12T07:17:03.370" LastActivityDate="2018-07-12T07:17:03.370" Title="Copying disk image from HP 9122D drive" Tags="&lt;basic&gt;&lt;disk-image&gt;&lt;hp&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="4740" PostTypeId="2" ParentId="4739" CreationDate="2017-09-15T06:08:58.157" Score="4" Body="&lt;p&gt;Assuming that you have used a standard DOS file system:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Remove the first floppy disk from the drive.&lt;/li&gt;&#xA;&lt;li&gt;Put the floppy disk in your modern 3.5&quot; floppy reader.&lt;/li&gt;&#xA;&lt;li&gt;Connect your modern floppy reader to a computer with &lt;code&gt;dd&lt;/code&gt; installed - probably a GNU/Linux distro.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Run the command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dd if=/dev/fd0 of=~/floppy.img&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;Repeat once from 2. with the second floppy disk, changing the write path of the image so that it does not overwrite the first file.&lt;/li&gt;&#xA;&lt;li&gt;Mount the floppy images to test their integrity. (Optional.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-09-15T06:29:06.973" LastActivityDate="2017-09-15T06:29:06.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4741" PostTypeId="2" ParentId="2809" CreationDate="2017-09-15T12:05:01.367" Score="1" Body="&lt;p&gt;In Spain the computers must have the &lt;kbd&gt;ñ&lt;/kbd&gt; key. The old ZX Spectrum 48K didn't have it. The ZX Spectrum + 2 solved it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The law says:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;Todos los aparatos de funcionamiento eléctrico o mecánico qué se utilicen para escritura, impresión, retransmisión de información y transmisión de datos&quot;, reza el artículo 2 del anteproyecto, &quot;deberán incorporar, en el momento de venta al usuario, la letra eñe y los restantes caracteres específicos del idioma castellano&quot;. El artículo 3 hace referencia a &quot;las infracciones y sanciones en materia de defensa del consumidor y de la protección agro alimentaria&quot;, de acuerdo con lo previsto en la Ley General para la Defensa de los Consumidores y Usuarios. La sanción máxima puede llegar a los 100 millones de pesetas.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From: &lt;a href=&quot;https://elpais.com/diario/1991/07/02/cultura/678405601_850215.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Newsletter El Pais in July 1991&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Translated to English, this reads:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;All electrical or mechanical devices which are used for writing, printing, transmitting information and data transmission&quot;, reads article 2 of the preliminary draft, &quot;shall incorporate, at the time of sale to the user, the letter ñ and the other characters specific to the Castilian language.&quot; Article 3 refers to &quot;infringements and sanctions in the area of consumer defence and agricultural food protection,&quot; in accordance with the provisions of the General law for the defence of consumers and users. The maximum penalty can reach 100 million pesetas (€601 012).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="405" LastEditorUserId="278" LastEditDate="2017-09-16T14:10:28.253" LastActivityDate="2017-09-16T14:10:28.253" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4742" PostTypeId="2" ParentId="4739" CreationDate="2017-09-15T18:29:44.960" Score="6" Body="&lt;p&gt;&lt;em&gt;(Some background: the 9122D uses &lt;a href=&quot;https://archive.org/details/bitsavers_sonyfloppyDriveOAD32WOAD32VOEMManualSep83_1149051&quot; rel=&quot;noreferrer&quot;&gt;Sony OA-D32W&lt;/a&gt; floppy drives. Here's a &lt;a href=&quot;https://archive.org/details/bitsavers_sonySonyOAceNov83_3409602&quot; rel=&quot;noreferrer&quot;&gt;service manual&lt;/a&gt; and a &lt;a href=&quot;http://www.hpmuseum.org/forum/thread-281.html&quot; rel=&quot;noreferrer&quot;&gt;discussion about repairing these drives&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a perfect 1:1 image of the floppy disk at the magnetic level, you will need a &lt;a href=&quot;https://www.kryoflux.com/&quot; rel=&quot;noreferrer&quot;&gt;KryoFlux&lt;/a&gt; or equivalent. Maybe this isn't necessary for your purposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@wizzwizz4 provided instructions on using &lt;code&gt;dd&lt;/code&gt; in Linux to create an image of the disk using a modern computer and a modern floppy drive. Then you can store the image away and restore it onto fresh floppies as needed. But if your floppy drives both die, then you will need another way to read the saved images on your HP 9000 computer...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your HP 9000 computer supports talking to multiple 9122D units on the same bus, then you can install a HP-IB board (a.k.a. GPIB or IEEE-488) in your Windows or Linux computer, run &lt;a href=&quot;http://www.hp9845.net/9845/projects/hpdrive/&quot; rel=&quot;noreferrer&quot;&gt;HPDrive&lt;/a&gt; to emulate another 9122D, hook both it and the real 9122D to the HP-IB bus, and use your HP 9000 computer to copy the disk from the real 9122D to the emulated one. From then on, you can mount the disk images on your Windows/Linux machine and you won't need the 9122D anymore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, if you can figure out how to &lt;a href=&quot;http://www.mh-aerotools.de/hp/documents/HxC%20with%20HP%20Drives.pdf#page=8&quot; rel=&quot;noreferrer&quot;&gt;connect&lt;/a&gt; a &lt;a href=&quot;http://hxc2001.free.fr/floppy_drive_emulator/&quot; rel=&quot;noreferrer&quot;&gt;HxC&lt;/a&gt; floppy emulator (SDcard or USB version, your choice) inside the 9122D case to replace one of the floppy drives, then you &lt;a href=&quot;http://torlus.com/floppy/forum/viewtopic.php?f=19&amp;amp;t=1918&quot; rel=&quot;noreferrer&quot;&gt;may be able&lt;/a&gt; to use the HP 9000 computer to copy from the remaining floppy drive onto the HxC, and mount the images on the HxC directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you get the HxC working in your 9122D, I'm sure the HP community would like to hear about it.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-09-15T18:29:44.960" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4743" PostTypeId="2" ParentId="4530" CreationDate="2017-09-16T00:12:25.960" Score="0" Body="&lt;p&gt;Perhaps the Stickybear series? &lt;a href=&quot;https://archive.org/search.php?query=4am%20stickybear&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/search.php?query=4am%20stickybear&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They were primarily for the Apple II but some were ported to the IBM PC.&lt;/p&gt;&#xA;" OwnerUserId="4476" LastActivityDate="2017-09-16T00:12:25.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4744" PostTypeId="1" AcceptedAnswerId="4745" CreationDate="2017-09-16T03:15:29.120" Score="17" ViewCount="4295" Body="&lt;p&gt;I gather the fastest way to implement memcpy (copy a certain number of bytes from one place in memory to another) on the Z80 is to use an instruction called LDIR. But how fast is the result, when fully optimized, in terms of clock cycles per byte?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-09-16T20:32:25.007" Title="How fast is memcpy on the Z80?" Tags="&lt;z80&gt;&lt;performance&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4745" PostTypeId="2" ParentId="4744" CreationDate="2017-09-16T03:52:02.540" Score="27" Body="&lt;p&gt;There's no real optimisation — &lt;code&gt;LDIR&lt;/code&gt; (or indeed &lt;code&gt;LDDR&lt;/code&gt;, which goes downward instead of upwards) is the complete inner loop. It will always load from HL, store to DE, increment both and decrement BC. Then if BC is non-zero it will repeat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Annoyingly it will repeat exactly by just decrementing the PC by 2. So it'll read the full instruction again. Which means that 50% of memory accesses are it reading the opcode for the entire loop. The advantage is that interrupts can be accommodated while a transfer is in progress. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cost is 21 cycles for each time around the loop that does lead to a repetition, then 16 cycles on the final go. Four cycles opcode fetch, four cycles opcode fetch, three cycles reading from the address pointed to by HL, then a long five cycle write to the address pointed to by DE. Then five cycles without a bus access if repeating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unrolled LDIs will be faster if you have the space as they always cost the flat 16 cycles. E.g. put 16 of them in a row with a conditional jump at the end and if the number of bytes you want to copy is n then jump into the loop n mod 16 steps from the repetition test for the first iteration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, if you're writing for a computer with slower RAM access that ROM access (e.g. because RAM is shared with video) then a top tip is to look for the three-byte sequence &lt;code&gt;LDIR RET&lt;/code&gt; anywhere in ROM and call it.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="-1" LastEditDate="2017-09-16T14:26:05.333" LastActivityDate="2017-09-16T14:26:05.333" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4746" PostTypeId="2" ParentId="4744" CreationDate="2017-09-16T08:43:48.000" Score="12" Body="&lt;p&gt;You can do better in particular cases.  Here is an inner loop (&lt;code&gt;REPT 11&lt;/code&gt; [...] &lt;code&gt;ENDM&lt;/code&gt; makes 11 inline repetitions) for scrolling by 16 bits in a screen area I used in a game of mine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        LD      B,16            ;29&#xA;SCRL11: EX      DE,HL           ;4&#xA;        LD      E,(HL)          ;11&#xA;        INC     HL              ;17&#xA;        LD      D,(HL)          ;24&#xA;        INC     HL              ;30&#xA;        EX      DE,HL           ;34&#xA;        REPT    11&#xA;        EX      (SP),HL         ;35&#xA;        DEC     SP              ;41&#xA;        DEC     SP              ;47&#xA;        ENDM                    ;551&#xA;        EX      (SP),HL         ;586&#xA;        LD      HL,22+40H       ;596&#xA;        ADD     HL,SP           ;607&#xA;        LD      SP,HL           ;611&#xA;        DJNZ    SCRL11          ;10008&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Numbers are accumulated clock cycles (obviously the first line does not start with zero: this is part of something quite longer).  I am not actually sure why &lt;code&gt;EX (SP),HL&lt;/code&gt; clocks in with 35 cycles here: the nominal count is 19 cycles.  I'm assuming that the 16 additional cycles are wait states because access is in video memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looks like I'm a bit fuzzy after somewhat more than a quarter century.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, putting the stack pointer in the data area can improve speed for some operations since &lt;code&gt;LDI&lt;/code&gt; and its ilk only work by bytes and have extended Z80 opcodes (where the opcode fetch alone is good for something like 8 cycles) while many stack operations work by words and are part of the original 8080 opcode set.  Of course, you cannot have interrupts arriving while doing that kind of thing.&lt;/p&gt;&#xA;" OwnerDisplayName="user6891" LastActivityDate="2017-09-16T08:43:48.000" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4747" PostTypeId="2" ParentId="4744" CreationDate="2017-09-16T16:50:55.643" Score="10" Body="&lt;p&gt;The heaven of &lt;code&gt;memcpy&lt;/code&gt;-like optimization in Z80 is the stack.&#xA;If you have destination fixed, for example, you do like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld   sp,src&#xA;pop  hl&#xA;ld   [dest+0],hl&#xA;pop  hl&#xA;ld   [dest+2],hl&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;thus getting 14 clocks per byte transferred (&lt;code&gt;ldir/lddr&lt;/code&gt; is just 21 clocks per byte).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If both source and destination are fixed, you can do:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld   sp,src&#xA;pop  af,bc,de,hl&#xA;exx&#xA;ex   af,af`&#xA;pop  af,bc,de,hl&#xA;ld   sp,dest+16&#xA;push hl,de,bc,af&#xA;exx&#xA;ex   af,af`&#xA;push hl,de,bc,af&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;thus getting ~13 clocks per byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main disadvantage of such stack methods is the need to disable interrupts (in general case, of course there could be cases when interrupt is acceptable).&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2017-09-16T16:50:55.643" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4748" PostTypeId="2" ParentId="4714" CreationDate="2017-09-16T18:17:54.857" Score="1" Body="&lt;p&gt;Although it wasn't done often, it was possible in that era to build a rather powerful sound generator by combining a CPU, a ROM, a DAC, and maybe some RAM.  The DAC need not be anything fancy--a bunch of resistors would suffice.  I don't think Eugene Jarvis' 6800-based sound board goes back quite that far, but a 6502 running at 1.19Mhz with 128 bytes of RAM and two four-bit DACs (hardware found in an Atari 2600 from 1977) can produce four-voice music (61-note full chromatic scale) at a sample rate of 15.75KHz using 46 cycles out of every 76 for sound generation.  A CDP1802 microprocessor might have been able to do likewise without needing any RAM if some creative addressing logic were wired in, but I don't know how the price of the 1802 would compare with that of a 6502 plus a RIOT (RAM+I/O+timer) chip.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-09-16T18:17:54.857" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4749" PostTypeId="2" ParentId="4744" CreationDate="2017-09-16T20:32:25.007" Score="10" Body="&lt;p&gt;Perhaps I should just edit the contradiction out of the accepted answer that starts by claiming you can do no better than &lt;code&gt;LDIR&lt;/code&gt; then mentions that unrolling it to a series of &lt;code&gt;LDI&lt;/code&gt; instructions is faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But for the nonce I'll put an explicit example of the &lt;code&gt;LDI&lt;/code&gt; unroll here.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; Copy BC bytes from HL to DE.&#xA;copy_mem:&#xA;    ld      a,b&#xA;    or      c&#xA;    ret     z&#xA;&#xA;    ld      a,16&#xA;    sub     c&#xA;    and     15&#xA;    add     a,a&#xA;    ld      (lp_entry),a&#xA;    jr      $&#xA;lp_entry    equ $-1&#xA;copy_lp:&#xA;    ldi&#xA;    ldi&#xA;    ldi&#xA;    ldi&#xA;&#xA;    ldi&#xA;    ldi&#xA;    ldi&#xA;    ldi&#xA;&#xA;    ldi&#xA;    ldi&#xA;    ldi&#xA;    ldi&#xA;&#xA;    ldi&#xA;    ldi&#xA;    ldi&#xA;    ldi&#xA;&#xA;    jp      v,copy_lp&#xA;&#xA;    ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The code does check for the byte count == 0 case.  However, it does use self-modifying code so it won't work if run from ROM nor will it be viable in a multi-threaded environment.  Replacing the unrolled loop entry with a jump table is left as an exercise for the reader.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that while &lt;code&gt;LDI&lt;/code&gt; does not loop it does decrement &lt;code&gt;BC&lt;/code&gt; and sets the overflow flag to indicate that &lt;code&gt;BC != 0&lt;/code&gt;.  That helps make the loop faster and by unrolling by 16 the cost per byte is 16 + 10/16 cycles: 16 cycles per &lt;code&gt;LDI&lt;/code&gt; which copy a byte and a 10 cycle cost every 16 bytes to account for the &lt;code&gt;JP V&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Can We Do Better?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Well, Z-80 memory access is fastest through the &lt;code&gt;PUSH&lt;/code&gt; and &lt;code&gt;POP&lt;/code&gt; instructions.  &lt;code&gt;PUSH&lt;/code&gt; can write 2 bytes in 11 cycles and &lt;code&gt;POP&lt;/code&gt; can read 2 bytes in 10 cycles.  Thus the theoretical maximum speed write is 5.5 cycles/byte and maximum speed read is 5 cycles/byte.  This means that 10.5 cycles/byte is the best we could possibly do.  Loop overhead will cut that number down, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main issue with using &lt;code&gt;PUSH&lt;/code&gt; and &lt;code&gt;POP&lt;/code&gt; is that you cannot have any interrupts occur while the copy takes place.  That may be a deal breaker, but if acceptable wrapping the function in &lt;code&gt;DI&lt;/code&gt;/&lt;code&gt;EI&lt;/code&gt; will take care of maskable interrupts and we'll assume that specific platform knowledge can rule out non-maskable interrupts (NMI).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The secondary problem is that between loading the stack pointer register twice for each block copied and some counter loop overhead it is hard if not impossible to run faster than 16 cycles/byte so &lt;code&gt;LDI&lt;/code&gt; wins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your source and destination are fixed a fully unrolled stack-based copy can get as low as 12.5 cycles per byte.  And the unrolling costs 1.57 program bytes per byte moved.  Those are pretty heavy restrictions but there are applications.  For example, moving bytes from an off-screen frame buffer to the hardware buffer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's one iteration of such an unroll that moves 14 bytes:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ld      sp,src  ; 10&#xA;    pop     af      ; 10&#xA;    pop     bc      ; 10&#xA;    pop     de      ; 10&#xA;    pop     hl      ; 10&#xA;    exx             ; 4&#xA;    pop     bc      ; 10&#xA;    pop     de      ; 10&#xA;    pop     hl      ; 10&#xA;    ld      sp,dst  ; 10&#xA;    push    hl      ; 11&#xA;    push    de      ; 11&#xA;    push    bc      ; 11&#xA;    exx             ; 4&#xA;    push    hl      ; 11&#xA;    push    de      ; 11&#xA;    push    bc      ; 11&#xA;    push    af      ; 11&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Those numbers add up to 175 cycles.  175 cycles / 14 bytes = 12.5 cycles/byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that it is perfectly safe to use &lt;code&gt;AF&lt;/code&gt; in this fashion; the data will be copied correctly.  Also note that trying to speed it up by using &lt;code&gt;IX&lt;/code&gt; or &lt;code&gt;IY&lt;/code&gt; won't work as their &lt;code&gt;PUSH/POP&lt;/code&gt; is slower and can only manage 14.5 cycles/byte.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2017-09-16T20:32:25.007" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4750" PostTypeId="2" ParentId="4730" CreationDate="2017-09-16T20:54:03.000" Score="7" Body="&lt;p&gt;If the printer is offering an actual RS232 port, this should be identifiable by there being an RS232 level converter IC near the connector on its logic board: Usually, there will be a DS232/MAX232 or other MAX23x series IC, or a NEC D4711/UPD4711, or a combination of any of MC1488/MC1489/SN75188/SN75189/GD75189/GD75188/GD75232...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This chip inverts the signal, matches it to RS232 voltage levels, and limits the rate of voltage rise at the signal transitions - a TTL signal tends to go from one voltage extreme to the other in a couple of nanoseconds - it would be &quot;fast&quot; enough to implement a 10 megabit serial line easily. Unfortunately, a signal like that would need to be treated (cabling wise) like it was 10 megabit regardless of the baud rate, otherwise effects like horrible radio interference or phantom signal transistions due to reflections can and will happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If such a chip is present, there are two options:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Use a real serial port or an USB/Serial converter equipped or retrofitted with such a converter chip too&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Modify the printer by disconnecting the serial level converter and hooking the TTL-level signals into the lines that interface between the rest of the printer and the converter. Mind that TTL level signals are not good for long wiring, if not using some termination scheme it is best to run them in shielded wires (or one half of a twist of a twisted pair cable, other wire connected to ground - not optimal but...) and keep cabling length to a feet or two. Or, build the FTDI (or other converter board) into the printer and run USB into it (Don't &quot;mess&quot; with USB wiring BTW, it is even more sensitive than TTL).&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-09-16T20:54:03.000" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4751" PostTypeId="2" ParentId="4706" CreationDate="2017-09-16T21:39:46.340" Score="2" Body="&lt;p&gt;Design is one factor determining the actual power use of your device - the other is the semiconductor process used and its tolerances and variations over the product lifecycle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Especially with whatever process is cutting edge at the time, there is no &quot;either it doesnt work or it works and consumes exactly n watts of power in a given state&quot; - more of a continuum between &quot;part either doesnt work at all or is scrap because it uses power above the maximum stated in the specifications&quot; via &quot;this won't overconsume and/or overheat if not used above this clock frequency, sell it as a lower speed part&quot; to &quot;works perfectly, speed is maximum, and power consumption is on the low end&quot;. There will be days like &quot;The machinery isn't at its best calibration today, guess we will be making a lot of lower speed parts today...&quot; in production...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A given design of a CPU is often undergoing &quot;die shrinks&quot; over the product lifecycle, which are in the end adaptations to a new and improved semiconductor process. Depending on the design and the processes, a change of process can lower or raise power consumption - eg a process using smaller structures could lower gate capacitances and thus the power consumed when data changes inside the device, but worsen leakage currents that will mean more power is consumed when certain non-changing states of logic levels are present. A design taking advantage of peculiarities of a given process could well end up taking disadvantage of peculiarities of another...&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-09-16T21:39:46.340" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4752" PostTypeId="2" ParentId="4657" CreationDate="2017-09-16T22:14:50.213" Score="1" Body="&lt;p&gt;Half OT, but whatever: Once you built this breadboard circuit, try to get your hand on some 2816/2864/... chips (not 28Fxxx flash!) - these EEPROMs share a pinout with the 27xx EPROMs and are easy enough to write to(!) that it can be done in a breadboard setup too.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-09-16T22:14:50.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4753" PostTypeId="2" ParentId="4635" CreationDate="2017-09-16T22:44:22.683" Score="3" Body="&lt;p&gt;PC specific, ignoring non-PC systems here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remembering early-90s systems, 286 machines were mostly built in the &quot;Baby-AT&quot; form factor. Sometimes you still saw new 286/rarely 386 builds in the full-width AT form factor, which is surprisingly huge :).&#xA;386/486 machines were a common sight in both Baby-AT and minitower/full tower form factors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One likely reason for this trend was that technologies that allowed more than the maximum 4 (two floppy, two hdd) drives designed into the original PC and AT designs became more mainstream. The classic full width PC and AT form factors were only meant to take 5.25&quot; type drives (3.5&quot; were used with adapter brackets), could typically take 4 half-height drives or 2 full height. Baby-AT typically allowed 3 5.25&quot; half height (often with only 2 externally accessible. Could be used with 1 full 1 half in some, excuse the pun, cases) and one 3.5&quot; device.&#xA;SCSI in the PC was the newest high-end trend in the early 90s, and allowed up to 7 drives, and probably catalyzed adoption of tape and CDROM devices (however, the mainstream versions of these were typically NOT the expensive SCSI type).&#xA;Obviously, all these new possibilities caused problem with the desktop form factors limited in drive slots, whereas tower cases could be built to various heights with nearly limitless expansion capacities for mass storage...&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-09-16T22:44:22.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4754" PostTypeId="2" ParentId="4625" CreationDate="2017-09-16T23:07:30.907" Score="5" Body="&lt;p&gt;It likely was not the graphics chips (or for that matter complexity of a solution built from non application specific chips) that limited practical high resolutions at a price point - you still need a framebuffer memory for a raster display, and even to realize, for example, a 1024x1024 resolution without any color or grayscale capability you would need 1 megabit (128 Kilobyte) of RAM - which was more than what some computers had as system memory, and expensive.&#xA;Offering a high number of colors made this even worse, and adds the problem of needing to ímplement a good DAC (precision isn't as much the issue here as speed! BTW, dirty secret of most VGA cards: &quot;true color&quot; is not 32/24-bit but 18 bit in hardware. Look up some RAMDAC datasheets...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mid 70s to early 80s high resolution graphics systems tended to use vector-oriented graphics generators, that either constantly redrew the vectors from a program (like the IBM 2250) or used inherently persistent displays (like the Tektronix 4016, which is listed with a 1979 price of almost $20k)...&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-09-16T23:07:30.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4755" PostTypeId="1" AcceptedAnswerId="4762" CreationDate="2017-09-17T02:52:55.583" Score="8" ViewCount="1650" Body="&lt;p&gt;As you probably know, the original Macintosh 128K, 512K (Fat Mac) and the Macintosh Plus (IIRC) have a different keyboard and mouse connection than the later ADB versions such as the Macintosh SE series.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The keyboard looks to use an RJ-11 jack and the mouse used a 9 pin serial connector.  Many times finding a replacement keyboard and mouse for those models  can cost more than the Mac itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, was there an official (or third party) adapter to convert more common ADB keyboards to work with those models of Macintosh?  I suspect that it's more difficult than a straight pin converter.  I also suspect those keyboards and mice used a different serial protocol than ADB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any information on this would be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="2081" LastEditDate="2017-09-18T12:23:24.057" LastActivityDate="2017-09-18T12:23:24.057" Title="Can the ADB keyboard and mouse be converted to the 128K Macintosh?" Tags="&lt;hardware&gt;&lt;apple-macintosh&gt;&lt;keyboards&gt;&lt;mouse&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4756" PostTypeId="2" ParentId="4755" CreationDate="2017-09-17T04:51:23.457" Score="6" Body="&lt;p&gt;The closest thing I have seen is &lt;a href=&quot;http://www.synack.net/~bbraun/mackbd/index.html&quot; rel=&quot;noreferrer&quot;&gt;bbraun's adapter&lt;/a&gt; which allows you to connect a PS/2 keyboard and mouse. You can't buy one as far as I am aware, though I believe he provides all the PCB design files and source code for you to make your own.&lt;/p&gt;&#xA;" OwnerUserId="94" LastActivityDate="2017-09-17T04:51:23.457" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4757" PostTypeId="2" ParentId="4591" CreationDate="2017-09-17T07:19:49.727" Score="2" Body="&lt;p&gt;Reinking with a felt roller, motorized spindle, and a small amount of stamp pad ink was a common practice.   Less common, was WD-40 spray, or an eyedropper with some kerosene (available odorless for lamp fuel).   These tricks worked on 'plain' cloth ribbons, but were useless on bicolor (black&#xA;and red was a common combination) or film (basically, a very thin carbon-copy film in a cartridge that could not be re-stuffed, only unrolled once) ribbons.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stamp pads and ink are still available for hobby, but mostly people use&#xA;laser-print on label stock nowadays.   Less mess, more flexibility.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2017-09-17T07:19:49.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4758" PostTypeId="2" ParentId="4739" CreationDate="2017-09-17T11:10:26.757" Score="5" Body="&lt;p&gt;You can read the floppy in any &lt;strong&gt;FDD&lt;/strong&gt; (mechanically compatible). The problem lies with &lt;strong&gt;FDC&lt;/strong&gt; compatibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each &lt;strong&gt;FDC&lt;/strong&gt; controller looks for a specific pattern on the track to find out where the sector starts are. Some &lt;strong&gt;FDCs&lt;/strong&gt; are incompatible and when using the same floppy formatted on incompatible &lt;strong&gt;FDC&lt;/strong&gt; then no matter what you do you can not read the data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example I got many floppies formatted with &lt;strong&gt;D40&lt;/strong&gt; which is &lt;code&gt;5.25&quot;&lt;/code&gt; drive based on &lt;strong&gt;WD2797 FDC&lt;/strong&gt; for &lt;strong&gt;ZX Spectrum&lt;/strong&gt;. It is incompatible with the &lt;strong&gt;PC&lt;/strong&gt; based &lt;strong&gt;FDC NEC765&lt;/strong&gt;. You can read &lt;strong&gt;PC&lt;/strong&gt; disks on it but not the &lt;strong&gt;ZX&lt;/strong&gt; disks on &lt;strong&gt;PC&lt;/strong&gt; (unless specifically formated on the &lt;strong&gt;WD2797&lt;/strong&gt; before use).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can not read such disks on &lt;strong&gt;PC&lt;/strong&gt; directly no matter what.  I am not talking about &lt;strong&gt;FAT&lt;/strong&gt; but low level sync to find sectors &lt;strong&gt;FDC&lt;/strong&gt;s are using. There is an workaround however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I build custom &lt;strong&gt;FDC&lt;/strong&gt; from &lt;strong&gt;AT32UC3A3&lt;/strong&gt; which simply is controlled by &lt;strong&gt;USB&lt;/strong&gt; from &lt;strong&gt;PC&lt;/strong&gt; and can seek/read tracks at low level ... extracting pulses. Then send it to &lt;strong&gt;PC&lt;/strong&gt; by &lt;strong&gt;USB&lt;/strong&gt; in form of &lt;strong&gt;MFM&lt;/strong&gt; pulses image. Then it is decoded (both format and FAT and emulator compatible image is created).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I successfully backup all my discs after 15 years of hibernation :) and they where still not demagnetized (even the tapes got unusable a decade before which is weird I always taught they would last longer :) ).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here are your options:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;backup on modern FDD/computer if compatible FDC is present&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you should do sector by sector read ignoring the FAT as it might be different then on host OS.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;create custom FDC&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;this is a bit more complex that it sound you basically need to create &lt;strong&gt;FDC+FDD+control+data_acquisition&lt;/strong&gt; system. Mine fits into single &lt;strong&gt;MCU&lt;/strong&gt; chip (no separate &lt;strong&gt;FDC&lt;/strong&gt; or any chip needed just the &lt;strong&gt;USB&lt;/strong&gt; and &lt;strong&gt;FDD&lt;/strong&gt; connectors + some &lt;strong&gt;R,C&lt;/strong&gt; and &lt;strong&gt;Xtal&lt;/strong&gt;. You can use kits for this so you just make a connection cable to &lt;strong&gt;FDD&lt;/strong&gt; and do not need to worry about the &lt;strong&gt;MCU&lt;/strong&gt; circuitry). I would go this way only as last resort. They might be some ready solutions by now like this out there I was doing this a decade ago.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;backup on original system&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You got &lt;strong&gt;BASIC&lt;/strong&gt; so write program that reads your floppy sector by sector and send the data to &lt;strong&gt;PC&lt;/strong&gt; or whatever by any com available (&lt;strong&gt;RS232&lt;/strong&gt;,parallel port,&lt;strong&gt;I/O&lt;/strong&gt;, sound output, ... ) If none present you can use even the screen+camera create video ant than later analyze it (using as serial &quot;cable&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a magnitude simpler then &lt;strong&gt;#2&lt;/strong&gt;. You just need to find the proper com connection that can be used. Read Floppy should not be too hard to code.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So the answer depends on what &lt;strong&gt;FDC&lt;/strong&gt; chip you got in your computer. At &lt;a href=&quot;ftp://bitsavers.informatik.uni-stuttgart.de/pdf/hp/disc/5957-6559_9122D_9122S_Disc_Drive_Service_Apr88.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;HP 9122D service manual&lt;/a&gt; you can see the controller &lt;strong&gt;PCA&lt;/strong&gt; part list. Try to identify which &lt;strong&gt;IC&lt;/strong&gt; is the &lt;strong&gt;FDC&lt;/strong&gt; and look for its datasheet for more info about the compatibility. I do not recognize any but I am not familiar with &lt;strong&gt;SONY&lt;/strong&gt; nor &lt;strong&gt;Motorola&lt;/strong&gt; chips numbering and too lazy to search all the candidate chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;[Edit1] Thanks to @Jules&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;FDC&lt;/strong&gt; controller used should be &lt;strong&gt;Fujitsu MB8876A&lt;/strong&gt; Which is compatible with &lt;strong&gt;NEC765&lt;/strong&gt; so you should be able to use the simplest method &lt;strong&gt;#1&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2017-09-17T12:21:40.040" LastActivityDate="2017-09-17T12:21:40.040" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="4759" PostTypeId="1" AcceptedAnswerId="4760" CreationDate="2017-09-17T13:52:20.327" Score="3" ViewCount="569" Body="&lt;p&gt;I have the following code line:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 0DATA&quot;-+-+-&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here &quot;&lt;code&gt;\&lt;/code&gt;&quot; and &quot;&lt;code&gt;/&lt;/code&gt;&quot; are the ASC codes 205 and 206.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get a syntax error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;?SYNTAX  ERROR IN 0&#xA;READY.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As I can remember, there was same special in the handling of the special terminal-controlling characters in strings. For example, a reverse ❤ has deleted the screen on print, but it behaved normally in the source code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea, what could be the reason?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tSArBm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tSArBm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Extension: my tests show it happens with all strings, not only for these. I use vice.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="129" LastEditorUserId="129" LastEditDate="2017-09-17T19:54:00.510" LastActivityDate="2017-09-17T19:54:00.510" Title="C64, basic v2, DATA strange behavior" Tags="&lt;commodore-64&gt;&lt;basic&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4760" PostTypeId="2" ParentId="4759" CreationDate="2017-09-17T14:38:10.403" Score="13" Body="&lt;p&gt;Your problem may be with your READ statement, not the DATA statement.  If you have string data, make sure you read into a string variable like so:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 READ X$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you try to read string data into a numeric variable you will get a syntax error reported on the DATA line, even though it was the READ that triggered it.  So this would give you an error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0 DATA &quot;A&quot;&#xA;10 READ X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-09-17T14:38:10.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4761" PostTypeId="2" ParentId="4759" CreationDate="2017-09-17T14:47:57.793" Score="10" Body="&lt;p&gt;The problem is with the flowing line:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;2 READS:X=1024:FORY=1TOLEN(S):A=ASC(MID$(S,Y,1)):POKEX,A:X=X-165+A*2:NEXT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;String variables in BASIC need to suffixes with a dollar sign &lt;code&gt;$&lt;/code&gt;. So all your uses of the variable &lt;code&gt;S&lt;/code&gt; should be &lt;code&gt;S$&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;2 READS$:X=1024:FORY=1TOLEN(S$):A=ASC(MID$(S$,Y,1)):POKEX,A:X=X-165+A*2:NEXT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2017-09-17T14:47:57.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4762" PostTypeId="2" ParentId="4755" CreationDate="2017-09-18T01:16:09.213" Score="5" Body="&lt;p&gt;With enough work, anything can be adapted. However, I’m unaware of any products that will implement an ADB host controller and act as an original Macintosh keyboard and mouse. Any such product will probably be comparable in price to just obtaining the correct keyboard and mouse for the Macintosh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you guessed, the protocols are &lt;em&gt;very&lt;/em&gt; different, the original keyboard spoke a simple TTL-level serial protocol, the original mouse provided quadrature signals the computer had to interpret, and ADB is more like a network.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, just FYI, the Macintosh mouse did not use a “9-pin serial connector,” both PC/AT serial and the original Macintosh mouse used DE-9 connectors.&lt;/p&gt;&#xA;" OwnerUserId="4496" LastEditorUserId="75" LastEditDate="2017-09-18T05:43:09.443" LastActivityDate="2017-09-18T05:43:09.443" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4763" PostTypeId="1" CreationDate="2017-09-18T18:54:45.880" Score="8" ViewCount="246" Body="&lt;p&gt;In a BESM-6 disk image I can see bits and pieces of something that looks like a strange interactive scripting language:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[start of disk block]&#xA;&amp;lt;LET=P11=%X01&#xA;&amp;lt;IEQ=P11=%377&#xA;&amp;lt;LET=P11=1&#xA;&amp;lt;END&#xA;&amp;lt;LET=P12=0&#xA;&amp;lt;REP=META=P12=%P11&#xA;&amp;lt;ADD=P12=1&#xA;&amp;lt;&amp;lt;MO2&#xA;&amp;lt;&amp;lt;K31&#xA;&amp;lt;&amp;lt;MO5&#xA;&amp;lt;&amp;lt;K35&#xA;... [a dozen more &amp;lt;&amp;lt;MOn and &amp;lt;&amp;lt;Knn lines]&#xA;&amp;lt;MES=    ROUND %P12 ENDED [originally in Russian]&#xA;&amp;lt;LAB=META&#xA;[end of file marker, zeros to the end of the block]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here one can guess that &lt;code&gt;&amp;lt;LET&lt;/code&gt; is an assignment operator, &lt;code&gt;&amp;lt;IEQ&lt;/code&gt; is a conditional, &lt;code&gt;&amp;lt;REP&lt;/code&gt; is a loop up to a label, &lt;code&gt;&amp;lt;MES&lt;/code&gt; means &quot;message&quot;, the % sign in a message text is an interpolation operator, etc.&#xA;The &lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt; lines are unclear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another example I've found is (with texts translated)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;МЕS=&#xA;&amp;lt;МЕS=*** IBM TAPE VERIFIER *** ( 03.02.89 )&#xA;&amp;lt;МЕS=&#xA;&amp;lt;GЕТ=11=VOLUME-&#xA;&amp;lt;GЕТ=13=RECORD DENSITY (8, 32, 63)-&#xA;&amp;lt;GЕТ=14=TAPE DESIGNATOR (MAX. 21 CHARS.)-&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As all the keywords are in English, a Western prototype is likely. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In pieces of the documentation in Russian I was able to find, this functionality is called &quot;interactive macrogenerator&quot; (just like that, without a proper name). Searching for that in English finds a few documents about &lt;a href=&quot;https://en.wikipedia.org/wiki/TRAC_%28programming_language%29&quot; rel=&quot;noreferrer&quot;&gt;TRAC&lt;/a&gt;, which is a different language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Searching in Russian finds &lt;a href=&quot;http://www.electriz.ru/programmnoe-obespechenie/interaktivnyi-makrogenerator-pagen.html&quot; rel=&quot;noreferrer&quot;&gt;a page&lt;/a&gt; which mentions &lt;code&gt;MES&lt;/code&gt;, &lt;code&gt;LET&lt;/code&gt;, &lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;IEQ&lt;/code&gt;, etc. The page title suggests that the name of the language was likely PAGEN, and the links below, mentioning Soviet DEC clones - that it could have stemmed from DEC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Searching for 'pagen', or even &quot;!pagen +DEC&quot; leads nowhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the language called PAGEN which used less-than signs to start keywords and equal signs as separators?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-09-19T02:33:32.073" LastActivityDate="2017-09-19T10:44:35.497" Title="Was there an interactive macro/scripting language named PAGEN?" Tags="&lt;programming&gt;&lt;dec&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4764" PostTypeId="1" AcceptedAnswerId="4776" CreationDate="2017-09-19T09:07:46.043" Score="9" ViewCount="1261" Body="&lt;p&gt;Many Z80 computers in the seventies and early eighties used the S-100 bus, into which you could plug many kinds of expansion cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would it have been possible to plug suitably designed game cartridges into an S-100 slot? Admittedly most of the computers using that bus were designed as business machines and didn't have color graphics, but supposing you had one that did have color graphics?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-09-26T19:32:31.053" Title="Game cartridges on the S-100 bus?" Tags="&lt;hardware&gt;&lt;z80&gt;&lt;game-cartridge&gt;&lt;s-100&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4765" PostTypeId="2" ParentId="4764" CreationDate="2017-09-19T09:17:10.117" Score="4" Body="&lt;p&gt;The S-100 bus was introduced in 1975 and the first processor cards available used the Intel 8080.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A large number of cards became available over time, including a variety of video interfaces, both monochrome and colour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also a wide variety of memory boards.  These cards included both RAM and ROM types.  So yes, a ROM board with a game loaded in it would work in the same way as a more modern games cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are enthusiasts out there for the S-100.  Sites like &lt;a href=&quot;http://www.s100computers.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;S-100 Computers&lt;/a&gt; try to keep the bus alive.  There is a lot of information on the bus signals, for example at &lt;a href=&quot;http://www.interfacebus.com/S-100_Computer_Bus.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Interface Bus&lt;/a&gt; which covers other bus types too.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2017-09-19T09:17:10.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4766" PostTypeId="5" CreationDate="2017-09-19T09:24:02.397" Score="0" Body="&lt;p&gt;For questions regarding the S-100 interface bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The S-100 bus is an 8-bit backplane standard introduced in 1975 supporting configurable card types.  Several processor, interface and memory cards are/were available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bus evolved into a 16-bit version and gained IEEE standardisation as the  IEEE696 bus.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-09-19T09:24:02.397" LastActivityDate="2017-09-19T09:24:02.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4767" PostTypeId="4" CreationDate="2017-09-19T09:24:02.397" Score="0" Body="The S-100 (later the IEEE696) bus is a backplane standard introduced in 1975 supporting configurable card types." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-09-19T09:24:02.397" LastActivityDate="2017-09-19T09:24:02.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4768" PostTypeId="5" CreationDate="2017-09-19T09:35:48.647" Score="0" Body="&lt;p&gt;This tag is blacklisted. See &lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/q/110/276&quot;&gt;Do we need the CPU tag?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please do not use it.  Use a tag appropriate to the processor in question.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-09-19T09:35:48.647" LastActivityDate="2017-09-19T09:35:48.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4769" PostTypeId="4" CreationDate="2017-09-19T09:35:48.647" Score="0" Body="DO NOT USE THIS TAG  https://retrocomputing.meta.stackexchange.com/q/110/276 " OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-09-19T09:35:48.647" LastActivityDate="2017-09-19T09:35:48.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4770" PostTypeId="5" CreationDate="2017-09-19T09:41:53.407" Score="0" Body="&lt;p&gt;For questions regarding the processors manufactured by &lt;a href=&quot;https://www.arm.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARM&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Originally Acorn RISC Machines, then Advanced RISC Machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please use this tag for retrocomputing applications of ARM processors.  Not their modern products.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-09-19T09:41:53.407" LastActivityDate="2017-09-19T09:41:53.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4771" PostTypeId="4" CreationDate="2017-09-19T09:41:53.407" Score="0" Body="ARM is a British processor manufacturer that evolved from Acorn Computers in 1985." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-09-19T09:41:53.407" LastActivityDate="2017-09-19T09:41:53.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4772" PostTypeId="5" CreationDate="2017-09-19T09:49:45.753" Score="0" Body="&lt;p&gt;Regarding the generation of sound in retrocomputers.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware, software and tools necessary to generate sound of all kinds.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-09-19T09:49:45.753" LastActivityDate="2017-09-19T09:49:45.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4773" PostTypeId="4" CreationDate="2017-09-19T09:49:45.753" Score="0" Body="Questions regarding the generation of sound in retrocomputers." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-09-19T09:49:45.753" LastActivityDate="2017-09-19T09:49:45.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4774" PostTypeId="5" CreationDate="2017-09-19T09:54:08.610" Score="0" Body="&lt;p&gt;For questions regarding the retrocomputers of Data General.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data General produced computers from 1968, including the Nova, SuperNove and the One.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-09-19T09:54:08.610" LastActivityDate="2017-09-19T09:54:08.610" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4775" PostTypeId="4" CreationDate="2017-09-19T09:54:08.610" Score="0" Body="For questions regarding the products of Data General.  A computer manufacturer from 1968-1999" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-09-19T09:54:08.610" LastActivityDate="2017-09-19T09:54:08.610" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4776" PostTypeId="2" ParentId="4764" CreationDate="2017-09-19T09:54:25.997" Score="12" Body="&lt;p&gt;Short answer: &lt;strong&gt;Yes&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Would it have been possible to plug suitably designed game cartridges into an S-100 slot?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure. After all, such a cart would be just another ROM/Memory board. Although, some configuration might be required to avoid address collision.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Admittedly most of the computers using that bus were designed as business machines and didn't have color graphics, but supposing you had one that did have color graphics?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Cromemco's &lt;em&gt;TV Dazzler&lt;/em&gt; was already available in 1976. It got quite some publicity, I think I remember even a book about it back then. So colour wasn't as uncommon on S100 as people might believe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were several S100 systems offering out of the box colour abilities (like Poly88) - and even more when considering (home) computers that offered S100 as expansion boxes, like the Exidy Sorcerer, ok, B/W, but you get the picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main issue here would not only be a non-game-console-like effort to configure a card (Address and I/O usage) but also the lack of a standard way to access various hardware - not to mention the merits of some abstraction layer. We all can rant a lot about MSFT and Windows, but it did provide a proper way to encapsulate even the most weird hardware, making old games run on new graphics cards (and vice versa ... well, ignoring the missing power :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a game system viewpoint, the S100 bus would have been a way expensive system. For one, the bus doesn't offer regulated power, but rather expects each card to have their own regulators. Very primitive, good for quick-starting a system, but expensive on the long run. Same for the board size. Cost goes with board size, and an S100 module needs to be at least as wide as the connector is. Mind you, there have been even VCS cartridges that tried to use odd shaped boards to minimize surface. It's a penny business. Even with such tricks like triangular shaped boards etc., they would cost several times what a standard VCS cartridge board was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a reason something like this never happened, despite the zillions of developments done for S100.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6812" LastEditDate="2017-09-19T17:03:48.153" LastActivityDate="2017-09-19T17:03:48.153" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4777" PostTypeId="2" ParentId="4763" CreationDate="2017-09-19T10:27:22.807" Score="3" Body="&lt;p&gt;PAGEN is a &lt;em&gt;'language'&lt;/em&gt; (well, more of a configuration file) used in RT11 on PDP-11 for system generation.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-09-19T10:44:35.497" LastActivityDate="2017-09-19T10:44:35.497" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4778" PostTypeId="5" CreationDate="2017-09-19T14:43:01.987" Score="0" Body="&lt;p&gt;For questions regarding the Apple /// computer, produced by Apple from 1980 to 1984.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Versions of the Apple ][ continued to be produced, the Apple /// was not a replacement for the Apple ][.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-09-19T14:43:01.987" LastActivityDate="2017-09-19T14:43:01.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4779" PostTypeId="4" CreationDate="2017-09-19T14:43:01.987" Score="0" Body="The Apple /// was intended to be a business complement to the Apple ][.  It was introduced in 1980." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-09-19T14:43:01.987" LastActivityDate="2017-09-19T14:43:01.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4780" PostTypeId="2" ParentId="2353" CreationDate="2017-09-19T19:13:55.587" Score="11" Body="&lt;p&gt;For such a small market window time wise, there was a bunch of activity.  Off the top of my head:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SCSI Controllers from Adaptec, AMI, Tekram, Buslogic, DTC, Advansys, Ultrastore, and others&lt;/li&gt;&#xA;&lt;li&gt;Always SCSI + EIDE controller&lt;/li&gt;&#xA;&lt;li&gt;Caching EIDE from Tekram &amp;amp; Atronics&lt;/li&gt;&#xA;&lt;li&gt;EIDE RAID from Promise&lt;/li&gt;&#xA;&lt;li&gt;AMI SCSI + LAN&lt;/li&gt;&#xA;&lt;li&gt;Ethernet from D-link, Cnet, Lantech, and many others&lt;/li&gt;&#xA;&lt;li&gt;FDDI from Compu-Shack &amp;amp; Infosystems (no, I've never seen one)&lt;/li&gt;&#xA;&lt;li&gt;Dual serial from Kouwell (no, I don't know why)&lt;/li&gt;&#xA;&lt;li&gt;Miro video capture/playback and editing cards&lt;/li&gt;&#xA;&lt;li&gt;Miro wavetable sound card (I never saw one)&lt;/li&gt;&#xA;&lt;li&gt;3DLabs 3D Blaster, pre-PCI Direct3D add-in card&lt;/li&gt;&#xA;&lt;li&gt;Somewhere around here I've got a VLB card with SVGA, EIDE, FDC, CD-ROM, SIO, PIO &amp;amp; Game port all on one card.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And that's leaving out a lot of manufacturers, not to mention all the generics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There weren't a lot of sound cards that I recall (no need for the speed), and I never heard of a data collection card of any type.  VLB didn't last long enough for a 100base-T card to show up.  I'm somewhat surprised no one shipped a Token Ring card, considering two shops managed to ship FDDI cards, but there you go.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2017-09-19T19:13:55.587" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4781" PostTypeId="2" ParentId="639" CreationDate="2017-09-20T09:02:51.163" Score="4" Body="&lt;p&gt;With floppies the density of data write is a big difference. My experience is the more dense data is written the lower the lifetime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still got around ~100 of 5.25&quot; DD 3M floppies which last I check (after 15 years of non usage) where still in tact (I did a full backup to HDD and only single disk was a problem but that disc was faulty even back in the days...). On the other hand the average lifetime of 3.5&quot; HD floppy is one year tops. The 5.25&quot; HD floppies where not much better. So I would expect that 8&quot; Floppy properly stored would be still in tact even after 30 years. Also even faulty Floppy is good as new after proper low level reformat (not the MS-DOS crappy one) if no mechanical damage is present.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As written in the other answers Floppies are the most reliable removable storage in longterm. Here empiric experience of mine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;medium    | reliable_storage&#xA;--------------------------&#xA;MG tapes  | 10  years (reusable)&#xA;5.25&quot; DD  | 15+ years (reusable)&#xA;3.5&quot; DD   | 10+ years (reusable)&#xA;5.25&quot; HD  | 5.0 years (reusable)&#xA;3.5&quot;  HD  | 1.0 year  (reusable)&#xA;CD W      | 10 years  (fully destroyed metalic layer)&#xA;DVD W     | 0.5 year  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So guessing/extrapolating to 8&quot; SD 30+ Years is a real possibility&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closer the tracks are together the sooner they noticeably interact similarly to tapes. Yes of coarse the higher density uses much a bigger &lt;code&gt;B&lt;/code&gt; punch so they should be less susceptible to background magnetic fields but the experience tells us a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well yes we have &lt;strong&gt;USB&lt;/strong&gt; Flash now which can store data for a long time (if not rewritten) but the reliability of the electronics involved is questionable. As for any modern electronics the lifetime goes to hell. I remember electric devices that last for 40+ years. Even my ZX clone from 1989 is still functional. And the modern ones are up to 2-5 years tops...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2017-09-20T11:12:47.320" LastActivityDate="2017-09-20T11:12:47.320" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4782" PostTypeId="2" ParentId="10" CreationDate="2017-09-20T11:26:49.170" Score="3" Body="&lt;p&gt;Based on the Book title from the accepted answer I found this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://freerangefactory.org/cores/video_controller/ula_chip_for_zx_spectrum/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;zx_ula project&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Which leads to this repository:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/fabriziotappero/ip-cores/tree/video_controller_ula_chip_for_zx_spectrum&quot; rel=&quot;nofollow noreferrer&quot;&gt;video_controller_ula_chip_for_zx_spectrum&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;which is directly accessible without the need to buy or register anything&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look for &lt;code&gt;ula.v&lt;/code&gt; file which is code representing ULA chip by FPGA. &lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2017-09-20T11:34:41.573" LastActivityDate="2017-09-20T11:34:41.573" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4783" PostTypeId="2" ParentId="42" CreationDate="2017-09-20T12:28:16.357" Score="3" Body="&lt;p&gt;Not really an answer but I feel some things needed to be clarified.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pressing a key on &lt;strong&gt;ZX&lt;/strong&gt; does not trigger any interrupts ... The interrupt is triggered by &lt;strong&gt;ULA&lt;/strong&gt; itself with screen refresh rate and the &lt;strong&gt;ISR&lt;/strong&gt; is scanning keyboard ports in matrix manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;PC&lt;/strong&gt; keyboards Do this whole stuff internally usually by integrated &lt;strong&gt;i8048 MCU&lt;/strong&gt; chip (yes &lt;strong&gt;i8048&lt;/strong&gt; not &lt;strong&gt;i8051&lt;/strong&gt;). That alone brings up some restrictions in reflection to &lt;strong&gt;ZX&lt;/strong&gt; which was major disappointment for gamers coming from &lt;strong&gt;ZX&lt;/strong&gt; to &lt;strong&gt;PC&lt;/strong&gt; world. The &lt;strong&gt;ZX&lt;/strong&gt; can handle any number of Key pressed at any time the &lt;strong&gt;PC&lt;/strong&gt; (most keyboards) can not.  That is because the &lt;strong&gt;i8048&lt;/strong&gt; has a very little of &lt;strong&gt;RAM&lt;/strong&gt; only between 64 to 256 Byte depending on the chip. This memory is used for registers (4*8 Byte are just for global purpose register banks of r0..r7 ...), stack and variables. So you can imagine there is not much space for key scan tables. So only last few keystrokes are stored instead. That means once you press more than a certain number of keys in a single line or row in the keyboard matrix any next keystorkes are not registered until you release at least one of the first keys. That is the major reason why there are very few split screen games for more than one player on single &lt;strong&gt;PC&lt;/strong&gt; because certain keys (especially extended scan codes like numeric pad) lead to very small number of keys triggering this (like 3-4) so when you're fighting with a friend and suddenly your fire button does not work ... because it has less priority the fun starts :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now back to your question To connect &lt;strong&gt;PC&lt;/strong&gt; keyboard you need to emulate the keyboard matrix. So basically you need a computer (&lt;strong&gt;MCU&lt;/strong&gt;) which reads the serial input from &lt;strong&gt;PS/2&lt;/strong&gt; and emulates the states on the keyboard matrix ports. If you got basic &lt;strong&gt;MCU&lt;/strong&gt; coding experience then it is not that hard to do but the connected keyboard will never perform as well as the original one due to above restrictions.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2017-09-21T08:00:45.670" LastActivityDate="2017-09-21T08:00:45.670" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4784" PostTypeId="1" AcceptedAnswerId="4785" CreationDate="2017-09-21T19:55:18.980" Score="4" ViewCount="420" Body="&lt;p&gt;I have a HP 9133 combo disk drive connected to an HP 9000 model 310 computer running Basic 4.0. This setup is used to control a few machines, and does not have a floppy inserted. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hard drive is getting dated, and I am worried that it will break soon, rendering the machines unusable. To that end, I would like to copy the contents of the disk as an image, and emulate the hard drive using a modern computer via this &lt;a href=&quot;http://www.dalton.ax/hpdisk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PIC emulator&lt;/a&gt;, the &lt;a href=&quot;http://www.hp9845.net/9845/projects/hpdrive/&quot; rel=&quot;nofollow noreferrer&quot;&gt;HPDrive Project&lt;/a&gt;, or something similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem I have is how to copy a disk image off of the 9133 to be able to use the above tools. In researching options, I found BASIC commands to copy files, but none to directly copy the entire unformatted data on the disk. I am not beyond spending money on a device that will do this, and my focus is on trying to do this with minimal effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer starts by running the Basic program, and I am left without a command line (or much knowledge of old computers, though I do know basic decently).&lt;/p&gt;&#xA;" OwnerUserId="6889" LastEditorUserId="824" LastEditDate="2018-07-12T07:17:41.900" LastActivityDate="2018-07-12T07:17:41.900" Title="Getting a disk image off of a HP 9133 drive" Tags="&lt;disk-drive&gt;&lt;data-transfer&gt;&lt;disk-image&gt;&lt;hp&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="4785" PostTypeId="2" ParentId="4784" CreationDate="2017-09-21T20:46:37.267" Score="6" Body="&lt;p&gt;If you can get HPDrive working on a PC so that it can act a hard drive your HP 9000 model 310 computer then you should be able to use it's complementary utility &lt;a href=&quot;http://www.hp9845.net/9845/projects/hpdir/&quot; rel=&quot;noreferrer&quot;&gt;HPDir&lt;/a&gt; to make an image of your HP 9133 drive. You'll need to a suitable HP-IB/IEEE-488 interface card for your PC for this work, but you'd also need such a card for HPDrive to work. Your specific drive, an HP 9133, is shown in an illustration on the HPDir project page, so drive compatibility shouldn't be a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Z73rV.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z73rV.png&quot; alt=&quot;Illustration of HPDir using various drives including a HP 9133&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2017-09-21T20:46:37.267" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4786" PostTypeId="2" ParentId="4784" CreationDate="2017-09-21T20:48:38.587" Score="1" Body="&lt;p&gt;This drive uses the IEEE-488 (aka GPIB) protocol. You can &lt;a href=&quot;http://www.dalton.ax/gpib/&quot; rel=&quot;nofollow noreferrer&quot;&gt;make a USB adapter&lt;/a&gt; for this, then use a virtual COM port to communicate with the drive. I haven't found information about the specific API - these varied between different GPIB devices.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-09-21T20:48:38.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4787" PostTypeId="5" CreationDate="2017-09-21T21:35:54.623" Score="0" Body="&lt;p&gt;This tag applies to questions about source control tools or systems that were or could have been used on retro-platforms, both open source, like &lt;a href=&quot;https://en.wikipedia.org/wiki/Source_Code_Control_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCCS&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Revision_Control_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;RCS&lt;/a&gt;, and proprietary, like &lt;a href=&quot;https://en.wikipedia.org/wiki/Panvalet&quot; rel=&quot;nofollow noreferrer&quot;&gt;Panvalet&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-09-22T06:16:08.410" LastActivityDate="2017-09-22T06:16:08.410" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4788" PostTypeId="4" CreationDate="2017-09-21T21:35:54.623" Score="0" Body="For questions regarding source control tools like SCCS, RCS, CVS, etc." OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-09-22T06:15:56.707" LastActivityDate="2017-09-22T06:15:56.707" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4789" PostTypeId="1" CreationDate="2017-09-22T22:57:12.457" Score="4" ViewCount="316" Body="&lt;p&gt;Played it around the end of the 80's but most probably developed between 1981 and 1986.&#xA;You had control over a person/avatar (not stick figure like, more plump looking) and could walk from scene to scene; these locations (museum, plaza maybe) or rooms contained scattered items like masks, horns, pots, etc. and some wandering people (including a policeman in some places).&#xA;It had a memorable tune but nothing I can compare it to.&#xA;Possible use of Egyptian and/or British themes.&#xA;A decades old mystery of mine, been searching from time to time and I'm starting to believe it was a figment of my young imagination.&lt;/p&gt;&#xA;" OwnerUserId="6913" LastEditorUserId="4025" LastEditDate="2017-09-23T01:41:06.790" LastActivityDate="2017-09-23T02:28:41.913" Title="Need help identifying an Apple IIc game/possibly educational with a top-down view" Tags="&lt;apple-ii&gt;&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4790" PostTypeId="2" ParentId="4789" CreationDate="2017-09-23T02:28:41.913" Score="2" Body="&lt;p&gt;Hmm, I &lt;em&gt;was&lt;/em&gt; going to say potentially one of these ...&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=JZpcoaYib_Y&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Heist&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uBuJK4geIiw&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spare Change&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;but then you said &quot;top-down view&quot; so that rules out &quot;sidescrollers&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next task is to go through Wikipedia's list of &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Apple_II_games&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple 2 Games&lt;/a&gt; ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm wondering if it was an action RPG along the lines of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Z7cxjYqVF8I&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gemstone Warrior&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=GOUgZpf4a_A&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lady Tut&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any chance you remember any more details, such as the what size was the avatar? Or specific colors?&lt;/p&gt;&#xA;" OwnerUserId="31" LastActivityDate="2017-09-23T02:28:41.913" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4791" PostTypeId="2" ParentId="4706" CreationDate="2017-09-23T22:20:33.277" Score="0" Body="&lt;p&gt;What he means is that the tools for designing CPUs were not able to give accurate estimates of power consumption. So when the power use was so low, it came as a surprise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern tools not only estimate power consumption, they help the designer optimise it.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2017-09-23T22:20:33.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4792" PostTypeId="1" CreationDate="2017-09-25T16:12:42.183" Score="7" ViewCount="1898" Body="&lt;p&gt;I have a Compaq Deskpro EN 6266 Deskpro EN PII 266 Computer, pictured below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I try to insert a 4.7 GB optical disk, the PC stops. When I use a 720MB optical disk it says that I don't have permissions to copy files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to copy the files to some external storage medium? The computer does not have an Ethernet port. It only has 5.7GB of data on it (with Windows and all programs) but there are important files on it and I don't want to lose them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bcl11.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bcl11.jpg&quot; alt=&quot;Front view, showing drives&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qi83O.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qi83O.jpg&quot; alt=&quot;Rear view, showing ports&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eNl9d.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eNl9d.png&quot; alt=&quot;Close up of some of the ports&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6919" LastEditorUserId="337" LastEditDate="2017-09-25T21:13:44.663" LastActivityDate="2017-11-30T05:23:38.820" Title="How can I copy files from a Compaq Deskpro?" Tags="&lt;windows-98&gt;&lt;data-preservation&gt;" AnswerCount="6" CommentCount="23" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4793" PostTypeId="2" ParentId="4792" CreationDate="2017-09-25T16:55:43.313" Score="1" Body="&lt;p&gt;If there is no way to connect the drive to a data transfer system common to two of your computers, the &quot;nuclear&quot; solution is to remove the hard drive and connect it to an external drive controller. This is a &lt;em&gt;last resort&lt;/em&gt; - the other answers should be used if possible.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Disconnect the computer from power and wait for the capacitor to discharge.&lt;/li&gt;&#xA;&lt;li&gt;Unscrew the case of the computer, taking care to remember which screw goes where.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Carefully&lt;/em&gt; disconnect the cable attached to the hard drive from the motherboard.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Carefully&lt;/em&gt; remove the drive from its housing.&lt;/li&gt;&#xA;&lt;li&gt;Identify the interface.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Parallel ATA:&#xA;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:PATA-cable.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/6/66/PATA-cable.jpg&quot; alt=&quot;A 40-pin (2 by 20) connector with a ribbon cable attached&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Serial ATA:&#xA;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:SATA_Ports.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/7/7c/SATA_Ports.jpg&quot; alt=&quot;7 pins, a gap, then 15 pins&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Purchase or otherwise gain an adapter for this connector.&lt;/li&gt;&#xA;&lt;li&gt;Connect the adapter to a modern computer.&lt;/li&gt;&#xA;&lt;li&gt;Copy the files from the hard drive.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-09-25T17:08:01.710" LastActivityDate="2017-09-25T17:08:01.710" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4794" PostTypeId="2" ParentId="4792" CreationDate="2017-09-25T17:54:54.040" Score="3" Body="&lt;p&gt;The optical drive in your computer is probably a CD-ROM reader.  Unless it actually says &quot;Recordable&quot; or &quot;Rewritable&quot; on the front, don't assume that it will be able to record.  It may not handle DVD-ROMs at all.  Check to see if it has the DVD symbol on the front.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your computer appears to have a SCSI connector, so the simplest method may be to connect an external SCSI drive, format it and copy your files to it.  But finding such a drive might not be so simple nowadays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is probably easier to just add an Ethernet adapter to the computer so that you can copy files to another computer over the network.  You will need to open the computer up first to confirm whether your expansion slots are PCI or ISA.  They are probably PCI but you should check.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-09-25T17:54:54.040" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4795" PostTypeId="2" ParentId="4792" CreationDate="2017-09-25T18:23:25.340" Score="17" Body="&lt;p&gt;There are three basic ways:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;a) Get a LAN card and setup a workgroup with all drives shared&lt;/strong&gt; and access whatever needs to be backuped to your new machine. This is quite dependant on installed software. But chances are good that some NE2000 compatible card driver is already installed. You have to check what I/O bus system is used and buy the apropriate card. As new PCI or ISA cards are geting rare, Epay should be a good source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;b) remove the disk(s) and attach them via USB adaptor to a new machine.&lt;/strong&gt; With such you may read the drive from next to any moderen machine, as USB, as well as drives over USB, is quite standardized. This will also require way less hardware knowledge than puting the old drive into a new machine. If they (and I assume there are multiple drives, as 5.7 wasn't the original disk size) are PATA (also called IDE) drives, a $15 PATA to USB adaptor will do the trick.  For SCSI drives an adaptor might be less common and way more expensive. Adaptec had once one available, called USBXchange. A Google search might be helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;c) if these are USB connectos, all the way to the left, right beside the audio connector, you might be able to just plug a USB drive there.&lt;/strong&gt; I don't remember if Win98 supported USB disks out of the box. Have you tried to plug in a USB stick? Just try it. Preferably one with less than 32GiB and FAT32.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For installing any drivers (or other software), and if you got no other machines with floppies, just use the CD. It sould be able to read writeables. Make sure to burn a &lt;strong&gt;CD&lt;/strong&gt; not a DVD or Bluray.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This brings us to way #4:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;d) Use some kinde of old fashioned file transfer programm.&lt;/strong&gt; Put whatever programm you prefer on a floppy (or CD) and run it on both machines (the old one and some new one), after connecting them via a serial cable. Some USB to Serial if your new machine doesn't offer any classic serial port. Cost is about $15 for the USB/serial. and maybe another $10 for a gender changer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh,and there's one more, without the need for any hardware tinkering:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;e) Boot a live Linux from &lt;em&gt;CD&lt;/em&gt;.&lt;/strong&gt; Then USB will then most likely work and you may use whatever USB stick to transfer your disk data within short time. Try Knoppix, as it's well known to come up even on real weired machines. There are many other small, direct bootable Linux distributions, but Knoppix is well known for easy handling even if you're not a Linux buff. Just make sure you pick a &lt;strong&gt;CD-based&lt;/strong&gt; one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(As more as I look at this machine, as less it seams like a Retrocomputing case)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="439" LastEditDate="2017-09-26T15:36:27.780" LastActivityDate="2017-09-26T15:36:27.780" CommentCount="21" ContentLicense="CC BY-SA 3.0" />
  <row Id="4796" PostTypeId="1" AcceptedAnswerId="4797" CreationDate="2017-09-26T00:43:51.337" Score="4" ViewCount="315" Body="&lt;p&gt;Wikipedia says that&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1620#Invalid_character&quot; rel=&quot;noreferrer&quot;&gt;The IBM 1620 Model I used the Cyrillic character Ж (pronounced zh) on the typewriter as a general purpose invalid character with correct parity&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Model II used a new character ❚ (called &amp;quot;pillow&amp;quot;) as a general purpose invalid character with correct parity.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(The character ❚ is rendered as U+275A HEAVY VERTICAL BAR).&lt;/p&gt;&#xA;&lt;p&gt;References, or scans of printouts with either character, are not provided on the wiki page; assuming that's true about the letter Ж on Model I, how come an arbitrary character from another script was chosen? Is there a story behind it?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-09-28T01:56:34.600" Title="Cyrillic Ж on IBM 1620?" Tags="&lt;terminal&gt;&lt;ibm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4797" PostTypeId="2" ParentId="4796" CreationDate="2017-09-26T01:51:21.360" Score="6" Body="&lt;p&gt;Sorry to debunk that myth. All information I'm aware of looks like it isn't a Zhe, but a made up symbol. Several sources, including IBM manuals do show quite different shapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sources pro Zhe:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A) IBM 1620 CPU Model 1 Manual&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;by IBM (found &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/1620/A26-5706-3_IBM_1620_CPU_Model_1_Jul65.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;) features a glyph  much like a Zhe:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KlR9J.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KlR9J.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sources contrary Zhe:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;B) IBM 1620 Input Output Units Manual&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;by IBM (found &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/1620/A26-5707-0_IBM_1620_Input_Output_Units_1621_1622_1624.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;) shows on page 22 something that can be described as two semi circles back to backwith a horizontal bar, much like a strike thru:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wmkuL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wmkuL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;C) Reference Manual IBM 1620 Data Processing System&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;revision July 1961 by IBM (found &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/1620/A26-4500-2_1620ref_Jul61.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;) prints on page 36 quite the same symbol, this time rotated by 90 degree:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KAl1k.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KAl1k.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;D) IBM 1620 Parts Catalog&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;form May 1963  by IBM (found &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/1620/fe/127-0753-2_IBM_1620_Central_Processing_Unit_Parts_Catalog_May63.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;) identifies the typebar for that symbol as #7 and associates this with the same symbol as the reference manual.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1yFb7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1yFb7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;E) BASIC PROGRAMMING CONCEPTS AND THE IBM 1620 COMPUTER&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;by Daniel Leesons shows at page 279 an image, again like two semi circles, but this time attached to either side of a quite long vetical bar:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DAn2g.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DAn2g.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A bit confusing that four genuine IBM 1620 manuals of the same time show three different glyphs, while another book of the same time frame shows another different one. And only one of them might be seen as Zhe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;So far, and despite the similarity, I'm pretty sure that this symbol is not the Cyrillic letter Zhe, but a made up one. Much like the many other the 1620 typewriter features.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess people just tried to find a name like with other 'weired' chars like dagger, doubble dagger, pillow, lozenge, box, diamond, delta, ruber, and so on. Here maybe someone with basic Russian might have brought up the idea and it stuck. Or the Wiki remark is just one of the usual retroactive made up explanations, not rare at all among wiki entries. As for myself, I never heared about that theory, but then again, I never realy worked on a 1620 either.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-09-28T01:56:34.600" LastActivityDate="2017-09-28T01:56:34.600" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="4798" PostTypeId="1" AcceptedAnswerId="4807" CreationDate="2017-09-26T02:03:36.407" Score="5" ViewCount="259" Body="&lt;p&gt;Which companies were the most important manufacturers of picture tubes for monitors (both monochrome and color) in the seventies and eighties? That is, it's easy enough to find lists of monitors by nominal manufacturer of the model (IBM, DEC, Commodore etc), but it's not as easy to find which companies typically were the actual manufacturers of the picture tubes.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-09-26T23:40:50.643" Title="Primary manufacturers of picture tubes for early monitors" Tags="&lt;hardware&gt;&lt;history&gt;&lt;crt-monitor&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4800" PostTypeId="2" ParentId="4792" CreationDate="2017-09-26T07:15:12.307" Score="3" Body="&lt;p&gt;I hated that machines. If my memory serves well they need Floppy to get into &lt;strong&gt;BIOS&lt;/strong&gt;. But in a nutshell it is a &lt;strong&gt;PC&lt;/strong&gt; compatible machine with &lt;strong&gt;ISA&lt;/strong&gt; or &lt;strong&gt;PCI&lt;/strong&gt; slots so you can even find a network adapter for it (I still got a box of 10MBit of them somewhere). But with modern components I see this approaches:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;HDD&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case it have &lt;strong&gt;PATA IDE&lt;/strong&gt; interface so you can use any &lt;strong&gt;IDE PATA HDD&lt;/strong&gt; but be careful about the barriers so do not use too big partitions. if you got any or even use the machines &lt;strong&gt;HDD&lt;/strong&gt; directly. For that you need another computer with &lt;strong&gt;PATA&lt;/strong&gt; or &lt;strong&gt;USB to PATA&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case you got &lt;strong&gt;MFM&lt;/strong&gt; or &lt;strong&gt;SCSI&lt;/strong&gt; then you would have hard time to use it. But that is unlikely as the Compaqs I saw at that time all had standard 40pin &lt;strong&gt;IDE PATA&lt;/strong&gt;. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;LPT/COM&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you boot into &lt;strong&gt;MS-DOS&lt;/strong&gt; there are utilities used to communicate by &lt;strong&gt;LPT&lt;/strong&gt; or &lt;strong&gt;COM&lt;/strong&gt; ports. I used it a lot back in the days. Try to find/use:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;interlnk.exe&#xA;intersvr.exe&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That is native to &lt;strong&gt;MS-DOS&lt;/strong&gt; and you just need to add&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;devicehigh=e:\rescue\dos98\interlnk.exe&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;into &lt;code&gt;config.sys&lt;/code&gt; to enable to use it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to use &lt;a href=&quot;http://www.download.bg/?cls=program&amp;amp;id=24790&quot; rel=&quot;nofollow noreferrer&quot;&gt;FX.exe&lt;/a&gt; It does not need anything it is stand alone app. So on host computer you just run &lt;strong&gt;MS-DOS&lt;/strong&gt; and connect by either &lt;strong&gt;COM&lt;/strong&gt; or &lt;strong&gt;LPT&lt;/strong&gt; cable ... config both sides &lt;code&gt;FX.exe&lt;/code&gt; and copy what you need. The host computer can do this for example in emulator ... you just need access to real &lt;strong&gt;COM&lt;/strong&gt; or &lt;strong&gt;LPT&lt;/strong&gt;. In case on your modern computer is no &lt;strong&gt;COM&lt;/strong&gt; nor &lt;strong&gt;LPT&lt;/strong&gt; ports you can buy &lt;strong&gt;USB to RS232&lt;/strong&gt; or &lt;strong&gt;USB to LPT&lt;/strong&gt; reductions but some of them would require tweaking the baud rate and bits to work properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also Windows support networking over &lt;strong&gt;COM&lt;/strong&gt; and &lt;strong&gt;LPT&lt;/strong&gt; too I think it is even compatible with the &lt;code&gt;interlnk.exe&lt;/code&gt; you just need a proper cable and add the network manually in windows on both sides.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;USB&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you got &lt;strong&gt;USB&lt;/strong&gt; port I think it twas v1.1. There are memory sticks that are compatible with Win9x you just need driver for it. That will be the simplest way to interconnect. You just format the stick with &lt;strong&gt;FAT32&lt;/strong&gt; and use as external removable storage :). The problem is to find stick that has Win9x drivers. I got 2 of them somewhere. Your best bet is to find &lt;strong&gt;SD/MMC&lt;/strong&gt; card reader for &lt;strong&gt;USB&lt;/strong&gt; compatible with Win9X ... yes those still exist and usually got drivers shipped with them. I even have a mini CD with the drivers somewhere. Or scan USB Flash drives manufactors for Win9x drivers and when found just buy such drive.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2017-09-26T07:28:33.413" LastActivityDate="2017-09-26T07:28:33.413" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4801" PostTypeId="2" ParentId="4792" CreationDate="2017-09-26T15:58:54.883" Score="2" Body="&lt;p&gt;&lt;em&gt;Most&lt;/em&gt; (but not all) Windows 98 installations come with HyperTerminal, a serial comms program that supports file transfers over &lt;a href=&quot;https://en.wikipedia.org/wiki/ZMODEM&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZMODEM&lt;/a&gt; or &lt;a href=&quot;http://www.kermitproject.org/kermit.html#software&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kermit&lt;/a&gt;. With another computer, a USB-Serial adapter and a null modem cable, you can get files across one at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will be slow - likely maxing out at 115200 bps / ~ 11 KB/s - but may be the least intrusive option. I wouldn't want to risk installing anything on a hard drive of that age.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-09-26T15:58:54.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4802" PostTypeId="1" AcceptedAnswerId="4803" CreationDate="2017-09-26T18:40:28.323" Score="10" ViewCount="1516" Body="&lt;p&gt;I have a breadbox Commodore 64 with a Commodore 1702 monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My monitor has three RCA-style inputs on the back:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Audio (White)&lt;/li&gt;&#xA;&lt;li&gt;Luma (Yellow)&lt;/li&gt;&#xA;&lt;li&gt;Chroma (Red)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I purchased a cable which claims to be an original Commodore 64 monitor cable, but I believe it must have been made for a later model of the monitor (or perhaps for a different Commodore computer altogether) because it has four leads: White, Black, Red, and Blue. It's possible that the white may have originally been yellow, because all of the colors are quite faded. The cable sheath is light grey (but may have originally been white).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Through trial and error, I've discovered the red lead carries the Luma signal and the blue lead carries the Chroma signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are the black and white cables both audio? Can I use an &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B014QK4R44&quot; rel=&quot;noreferrer&quot;&gt;RCA Y-splitter&lt;/a&gt; to merge them? Can I connect them directly into a standalone speaker set (with the standard white-red/left-right RCA-style female connectors)?&lt;/p&gt;&#xA;" OwnerUserId="4761" LastActivityDate="2017-09-26T19:07:06.210" Title="What is this extra lead in my monitor cable?" Tags="&lt;commodore-64&gt;&lt;audio&gt;&lt;commodore&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4803" PostTypeId="2" ParentId="4802" CreationDate="2017-09-26T18:52:46.453" Score="10" Body="&lt;p&gt;[Do over answer]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on your clue that an Atari monitor has matching coloured inputs I looked up the Atari 8-bit video connector, compared to the C64:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PzogW.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PzogW.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is likely you have an Atari lead rather than a Commodore one. So your four signals are intended to be (1) luminance; (2) audio; (3) composite video; (4) chroma where available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plugging that cable into a C64 will give you luminance, audio out and composite video on the same outputs as they would have been on an Atari. But the connection that's offered for chroma output will actually function as an audio in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Composite video should be usable as luminance because that was a key concern affecting its original design — it's the same issue as backwards compatibility with black and white sets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore of your two spare ends, one is audio out and one is audio in.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-09-26T19:07:06.210" LastActivityDate="2017-09-26T19:07:06.210" CommentCount="16" CommunityOwnedDate="2017-09-26T19:07:06.210" ContentLicense="CC BY-SA 3.0" />
  <row Id="4804" PostTypeId="2" ParentId="4652" CreationDate="2017-09-26T19:25:58.227" Score="2" Body="&lt;p&gt;The graphics chip developed by &lt;a href=&quot;https://en.wikipedia.org/wiki/Dave_Nutting&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nutting&lt;/a&gt; for Bally was used in many of their arcade games as well as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Bally_Astrocade&quot; rel=&quot;nofollow noreferrer&quot;&gt;Astrocade&lt;/a&gt; console (ostensibly from Bally, but not really) and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Datamax_UV-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Datamax UV-1&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It did not have hardware sprites in the typical sense, but instead used a clever bit-blitting system so that writes to memory over the 32k boundary were mirrored into memory below 32k while applying a selected bitwise function, normally XOR. In this way you could have any number of 2D objects that could be moved with simple commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure it exactly meets the definition of either &quot;off the shelf&quot; or &quot;hardware sprites&quot;, but I think its close enough.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2017-09-26T19:25:58.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4805" PostTypeId="1" AcceptedAnswerId="4811" CreationDate="2017-09-26T19:27:18.000" Score="11" ViewCount="1107" Body="&lt;p&gt;We had PET computers in my high school, 4032's IIRC, and a few classic games to go with them - the excellent Space Invaders port, Star Trek of course, and a few others. These all used PETASCII for graphics, if any.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my last year there I found someone had brought in a bunch of new games, and one in particular still strikes me as odd to this day. It was a shoot-up-from-the-bottom game like Space Invaders, but had several submodes, in the fashion of Gorf or Astro Blaster. I seem to recall that the player's ship was two triangles and perhaps fired two shots at the same time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these sub-games featured graphics that were far in advance of what I had seen before. One in particular consisted of a small number of alien ships (two?) mid-screen shooting lighting bolts down the screen. These were not typical graphics, they appeared semi-transparent and seemed to be vectors. Beyond that, everything was &lt;em&gt;fast&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone hazard a guess what this game may have been?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2017-09-27T18:05:13.790" LastActivityDate="2019-02-05T07:10:59.063" Title="PET space arcade game with surprisingly good graphics" Tags="&lt;identify-this-game&gt;&lt;commodore-pet&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4806" PostTypeId="2" ParentId="4764" CreationDate="2017-09-26T19:32:31.053" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Exidy_Sorcerer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Exidy Sorcerer&lt;/a&gt; did exactly that, it had a cartridge format known as &quot;ROM-PAC&quot; that was simply a subset of the S-100 pins arranged in a slot at the rear of the right side of the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was a very interesting machine, IMHO, that tried to bridge the world between S-100 business markets and home computers. Essentially it was the processing and memory parts of an S-100 machine packaged into a typical home-computer style case. An expansion slot at the back allowed the backplane to be connected to an expansion chassis that gave it full S-100 slots and floppy disk support.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2017-09-26T19:32:31.053" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4807" PostTypeId="2" ParentId="4798" CreationDate="2017-09-26T23:40:50.643" Score="4" Body="&lt;p&gt;I know links as answers are frowned upon. But this official document called &quot;Color Picture Tubes from Canada, Japan, the Republic of Korea, and Singapore&quot; by an US commission has more on both US and foreign producers of CRTs in the 80s than you ever want to know :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.usitc.gov/publications/701_731/pub2046.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://www.usitc.gov/publications/701_731/pub2046.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-09-26T23:40:50.643" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4808" PostTypeId="1" AcceptedAnswerId="4809" CreationDate="2017-09-27T15:10:31.930" Score="30" ViewCount="3595" Body="&lt;p&gt;According to this article: &lt;a href=&quot;https://www.c64-wiki.de/wiki/POS&quot; rel=&quot;noreferrer&quot;&gt; german C64 Wiki article about the POS() command&lt;/a&gt;     POS(π) is 20 % faster.&lt;br&gt;&#xA;                                                              Although in my experience it is circa 28 % faster. &#xA;                                                                                  Is there a specific reason for this immense speed boost? &lt;/p&gt;&#xA;" OwnerDisplayName="user6734" LastEditorDisplayName="user6734" LastEditDate="2017-09-27T15:23:14.993" LastActivityDate="2019-01-12T22:24:39.877" Title="C64: Why is POS(π) faster than POS(0)?" Tags="&lt;commodore-64&gt;&lt;basic&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4809" PostTypeId="2" ParentId="4808" CreationDate="2017-09-27T18:17:58.477" Score="35" Body="&lt;p&gt;That interpreter apparently parses the source text, or at least the numerical literal values, at every execution. π is a single-byte magic token, therefore, as soon as it is recognized, it is immediately substituted with the value of Pi, and nothing else needs to be done. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a byte that might occur in a number is parsed, the number parsing routine begins. Its execution time will depend on the number of characters in the string representing the number. When parsing a number, each digit in the integer part requires multiplying the number parsed so far by 10 and adding the value of the digit. The fractional part is usually parsed as an integer, then divided by the appropriate power of 10. The division operation is expensive, and it makes sense to check if the dividend is 0 before dividing &amp;mdash; that's why &lt;code&gt;.0&lt;/code&gt; is much faster than &lt;code&gt;.1&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's why, as the German Wiki article says, the next best execution time is for &lt;code&gt;POS(.)&lt;/code&gt;: the number parsing routine starts, but there are no digits to parse, and it devolves to skipping the period and adding the initial (zero) values of the integer and the fractional part, then for a variable with a single-character name (name lookup), and then for the number 0 (will cause the computation of 0 * 10 + 0). Longer numbers will take even longer.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-09-27T22:35:16.707" LastActivityDate="2017-09-27T22:35:16.707" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="4810" PostTypeId="2" ParentId="4625" CreationDate="2017-09-28T18:22:29.513" Score="9" Body="&lt;p&gt;In 1980?  Ouch.  That timeframe is pretty limiting for a 'workstation' using commodity chips stuff.  If you eschew the custom chip route, and you didn't do something like license someone else's design (in 1980?  E&amp;amp;S if you have the $$$. &#xA; PERQ, maybe?  Apollo?), I think about all you have are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MC6845 (and numerous derivatives and second sources): CGA resolution, limited color graphics&lt;/li&gt;&#xA;&lt;li&gt;TMS9918: CGA-ish resolution, limited color graphics&lt;/li&gt;&#xA;&lt;li&gt;Dumb frame buffer: a la the Mac...some (v)ram and a video shift register (maybe something fun like the Fujitsu MB14241).  Not that many chips, but without some pretty sophisticated tricks somewhere you won't get many color planes before you crushed a 68000 (1 almost did in the original Mac), so this is more in the realm of idle speculation.  &lt;/li&gt;&#xA;&lt;li&gt;Smart frame buffer: As above, but use another processor to handle most of the drawing tasks (bitblt, mouse, etc.).  Trade hardware for software.  Could be another 68000, or one of the 8-bitters (the 6809 was introduced in 1978).  More chips, but &lt;strong&gt;much&lt;/strong&gt; less risk than rolling your own silicon. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;N.B. - the MC6847 was around before 1980, but as I recall it was intended to drive a TV and have very limited resolution, so isn't really a workstation graphics chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if you could wait just another two years or so, the whole world changes.  In particular:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1982: NEC uPD7220, Up to 1k x 1k, 4-planes, fast and cascadeable for more colors.  Second sourced by Intel and evolved into uPD72120 and uPD72220.&lt;/li&gt;&#xA;&lt;li&gt;1982: Thomson EF936x, described above, chips in the series from 512 x 256 to 512 x 1024 with lots of extras.  Nice chips.&lt;/li&gt;&#xA;&lt;li&gt;1982: Various V-series derivatives of the TMS9918.&lt;/li&gt;&#xA;&lt;li&gt;1982: faster 68000s &amp;amp; 68010 for better frame buffers (and better performance in general).&lt;/li&gt;&#xA;&lt;li&gt;1983: the TI32010 DSP came out, which people did some very interesting graphics stuff with, but I don't think this really meets the OP's requirements :-)&lt;/li&gt;&#xA;&lt;li&gt;1984: the HD63484 chipset, awesome 4k x 4k and up to 16-bit color&lt;/li&gt;&#xA;&lt;li&gt;1984: the mc68020, frame buffers, again&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then in 1985 some folks started a company called ATI and things in the graphics world started to &lt;strong&gt;really&lt;/strong&gt; change.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2017-09-28T18:22:29.513" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4811" PostTypeId="2" ParentId="4805" CreationDate="2017-09-28T20:18:44.933" Score="11" Body="&lt;p&gt;And it's &lt;strong&gt;definitely&lt;/strong&gt; &lt;em&gt;Star Spores&lt;/em&gt;. I found &lt;a href=&quot;http://www.vcfed.org/forum/archive/index.php/t-35256.html&quot; rel=&quot;noreferrer&quot;&gt;an interview with the author&lt;/a&gt;, who it turns out lives fairly close to me, and he mentioned the line-drawing routine which I'm sure is referring to the lightning bolt effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems this game has been lost to history. The interviewer mentions trying to find a copy to upload, but look as I might I cannot see it anywhere. Interestingly, the game was originally distributed on BBSs, so it might still be out there on someone's archived file library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; As it was a BBS upload, it's not clear how widely it would have spread. It's possible this was not well known outside the Ontario area. For those of you who have not seen this game, if we do track it down, you need to check it out. It was far in advance of anything else I saw on the PET.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2017-09-29T13:50:44.610" LastActivityDate="2017-09-29T13:50:44.610" CommentCount="19" ContentLicense="CC BY-SA 3.0" />
  <row Id="4812" PostTypeId="2" ParentId="4625" CreationDate="2017-09-29T02:49:14.937" Score="6" Body="&lt;p&gt;A lot of the coin operated video games of 1980's and early 1990's used 6845 or 6545 CRTC, plus a lot of game video were design around TTL chips with built in hardware character sprites for the slow CPU's.&#xA;You can search for schematic of the game boards on the inter-web to get some ideas on how they are implemented.&#xA;My favorite is QIX by Taito it uses 6545 with 2x 6809 CPU's. &lt;/p&gt;&#xA;" OwnerUserId="2158" LastActivityDate="2017-09-29T02:49:14.937" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4813" PostTypeId="2" ParentId="4698" CreationDate="2017-09-29T14:45:13.227" Score="3" Body="&lt;p&gt;The Nascom computers provided single-stepping.  They did it by outputting a certain value to a port.  Special circuitry then waited for enough M1 cycles (opcode fetches) to complete&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;POP AF&#xA;RETN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and have another command start before triggering an NMI signal.  A built-in debugger in the 2k of system monitor ROM then produced a register dump and put you back at the system prompt (where you could continue stepping or do other things).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There also was a 1kB debugger available (interesting since you could put it anywhere in RAM, not a mean feat on a Z80) that used the 3kB disassembler for displaying the actual opcodes if you were tired of reading hex codes.  The usual setup of those computers had 8kB of ROM Basic (as delivered), 4kB of editor/assembler and the 3kB/1kB combination of debugger/disassembler (free sockets on the main board taking 1kB EPROMS).  Oh, and of course the system ROM (2kB).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Luxury.&lt;/p&gt;&#xA;" OwnerDisplayName="user6943" LastActivityDate="2017-09-29T14:45:13.227" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4815" PostTypeId="1" CreationDate="2017-09-29T20:58:10.617" Score="17" ViewCount="1039" Body="&lt;p&gt;Atari historians have been able to find documents and tapes of chips and hardware developed at Atari. E.g. &lt;a href=&quot;http://atariage.com/forums/topic/154479-new-gtia-chips/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://atariage.com/forums/topic/154479-new-gtia-chips/&lt;/a&gt; .&lt;/p&gt;&#xA;&lt;p&gt;Nothing like this is happening for Commodore and Amiga.&lt;/p&gt;&#xA;&lt;p&gt;MOS designed tens (hundreds?) chips and this was its core business. It is hard to believe that a corporation owning a chip foundry lost &lt;em&gt;all&lt;/em&gt; the tapes and blueprints of its chips (I mean not only the Amiga chipset) AND the companies who acquired the rights of what was Commodore did the same.&lt;/p&gt;&#xA;&lt;p&gt;Why such artifacts don't resurface?&#xA;How MOS archived such artifacts and where?&lt;/p&gt;&#xA;" OwnerUserId="124" LastEditorUserId="576" LastEditDate="2020-08-26T05:51:50.520" LastActivityDate="2020-08-27T01:28:45.750" Title="Where are the blueprints of MOS chips?" Tags="&lt;amiga&gt;&lt;atari&gt;&lt;chip&gt;&lt;commodore&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="4816" PostTypeId="2" ParentId="4815" CreationDate="2017-09-30T03:39:46.810" Score="14" Body="&lt;p&gt;MOS was renamed to Commodore Semiconductor Group (CSG) sometime after Commodore bought them in 1976.  After Commodore folded in 1994, the CSG division was bought by its former management and renamed to GMT Microelectronics (Great Mixed-signal Technologies).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They continued with design, manufacture, and marketing of analog and mixed-signal power management integrated circuits and also provided foundry services and low-cost wafers until they where shut down by the EPA in 2001 due to leaking underground hazardous waste storage tanks.  At that point they ceased operations, all assets were liquidated, and the plant became a Superfund site.  There doesn't seem to be any solid information past that online as to what happened to any remaining assets when GMT was liquidated.&lt;/p&gt;&#xA;" OwnerUserId="320" LastEditorUserId="320" LastEditDate="2017-09-30T03:48:30.557" LastActivityDate="2017-09-30T03:48:30.557" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4817" PostTypeId="1" AcceptedAnswerId="4821" CreationDate="2017-09-30T08:52:35.160" Score="6" ViewCount="611" Body="&lt;p&gt;Back when Mac OS was called &quot;System&quot; and preemptive multitasking was a distant fantasy, I had a small collection of Macintosh programming books.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the life of me, though, I can't remember what one particular book was called, or who wrote it. I do remember, though, a few things about it:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It wasn't terribly long, maybe ~200 pages.&lt;/li&gt;&#xA;&lt;li&gt;It had a brightly-colored cover; I think orange, but I could be wrong.&lt;/li&gt;&#xA;&lt;li&gt;It was written in a conversational style with a lot of that mid-90's cool-guy attitude.&lt;/li&gt;&#xA;&lt;li&gt;There was a section on graphics programming that started with a wisecrack about programmers getting inspired by Ambrosia's Maelstrom and getting lost in the complexities of dealing with GWorlds and sprites before giving up and going back to playing Maelstrom.&lt;/li&gt;&#xA;&lt;li&gt;There was a chapter on non-traditional programming environments, including a brief discussion of the Forth-derived &quot;Mops&quot; and &quot;Yerk&quot;, which the younger me thought were hilarious.&lt;/li&gt;&#xA;&lt;li&gt;It included a CD with lots of the shareware/freeware tools discussed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would love to try and track down a copy, but I can't remember what it's called! Can you help me find it?&lt;/p&gt;&#xA;" OwnerUserId="6945" LastEditorUserId="824" LastEditDate="2018-07-12T07:43:58.233" LastActivityDate="2018-07-12T07:43:58.233" Title="What is the title of this Macintosh programming book?" Tags="&lt;apple-macintosh&gt;&lt;programming&gt;&lt;software-development&gt;&lt;books&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="4818" PostTypeId="5" CreationDate="2017-09-30T09:43:23.013" Score="0" Body="&lt;p&gt;This tag should be used if your question relates to books or retro-related literature in general. This tag can be used for both contemporary and historical books, but make sure it is at least related in some way to retro-computing.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-09-30T09:43:23.013" LastActivityDate="2017-09-30T09:43:23.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4819" PostTypeId="4" CreationDate="2017-09-30T09:43:23.013" Score="0" Body="Questions on retro-related books (contemporary or historic)" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-09-30T09:43:23.013" LastActivityDate="2017-09-30T09:43:23.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4820" PostTypeId="1" AcceptedAnswerId="4822" CreationDate="2017-09-30T16:12:05.143" Score="5" ViewCount="1172" Body="&lt;p&gt;This question was raised on Facebook a few hours ago. Some say it's possible, others say impossible. What do you experts say?&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-10-01T08:24:25.860" Title="How hard would it be to port Amiga OS4 to x86 or ARM?" Tags="&lt;amiga&gt;&lt;programming&gt;&lt;operating-system&gt;" AnswerCount="2" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4821" PostTypeId="2" ParentId="4817" CreationDate="2017-09-30T20:27:37.717" Score="7" Body="&lt;p&gt;Could it be &lt;a href=&quot;https://www.amazon.ca/Bytes-Mac-Programmers-Cookbook-Terrell/dp/0078820626&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;Byte's Mac Programmer's Cookbook Paperback – May 1994&#xA;  by Rob Terrell (Author)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I once had (and enjoyed) it when I still had a Macintosh. Just like the Mac, my issue has unfortunately long gone the path of all obsolete.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, as an added service: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.applerescueofdenver.com/products-page/macintosh-books-manuals/byte-mac-programmers-cookbook/&quot; rel=&quot;noreferrer&quot;&gt;Apple Rescue of Denver&lt;/a&gt; still seems to sell new copies for a whopping $15.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-09-30T20:33:56.013" LastActivityDate="2017-09-30T20:33:56.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4822" PostTypeId="2" ParentId="4820" CreationDate="2017-10-01T05:42:09.947" Score="8" Body="&lt;p&gt;&lt;a href=&quot;http://aros.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;AROS&lt;/a&gt; is an existing reimplementation of AmigaOS 3.1 with cross-platform compatibility (current distributions run on MC68020, PPC and x86 platforms; given the diversity of these platforms I would presume adding ARM compatibility would be fairly simple).  While its developers have stated they have no desire to implement the updates that were included in the more recent AmigaOS 4 release, it would serve as a useful base for a fork.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikipedia has a &lt;a href=&quot;https://en.wikipedia.org/wiki/AmigaOS_4#AmigaOS_4_prominent_features&quot; rel=&quot;noreferrer&quot;&gt;list of the most major changes in AmigaOS 4&lt;/a&gt;.  There's nothing here that's Earth-shatteringly difficult.  As OS development tasks go, it's not trivially easy but it isn't really hard either.  Of course, working on an OS is never quite as simple as working on standard applications, as you have to either deal with emulated hardware or running on a system that may not have a functioning OS while you test it.  I reckon a small team with people with experience in the relevant fields (low level hardware interfacing, on-disk data structures, UI and graphics development) could do it in about a year.  So from a technical perspective, I'd say it's clearly achievable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then, the AmigaOne platform and consequently AmigaOS 4 were commercial failures, so the need for such a system doesn't seem to be there otherwise it wouldn't have failed.  So finding a team motivated to spend the time to make these changes would be tricky.  As would getting funding to pay such a team.  So from a practical perspective, I don't imagine it will ever happen.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-10-01T05:42:09.947" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4823" PostTypeId="2" ParentId="4820" CreationDate="2017-10-01T08:24:25.860" Score="5" Body="&lt;p&gt;In addition to Jules's AROS reference: given the functionality of both x86 and ARM platforms and AmigaOS 4's hardware requirements, it's definitely possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, for a native platform port you not only need to make the bare OS run on the hardware, you also need to provide drivers for the pool of hardware you need to work. With AmigaOS's hands-on approach, writing the code isn't very hard but nowadays, getting to the hardware details is - there's only few hardware around where sufficient hardware documentation is provided.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All in all, the difficulty isn't very high if you're able to stick to hardware that's well documented. Nonetheless, you're looking at several developer years of work.&lt;/p&gt;&#xA;" OwnerUserId="5200" LastActivityDate="2017-10-01T08:24:25.860" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4824" PostTypeId="2" ParentId="4529" CreationDate="2017-10-01T17:01:07.217" Score="6" Body="&lt;p&gt;One strange variant is an emulator running on a 8-bit CPU to emulate a ARMv6 CPU with the aim to run Linux (&lt;a href=&quot;http://dmitry.gr/index.php?r=05.Projects&amp;amp;proj=07.%20Linux%20on%208bit&quot; rel=&quot;noreferrer&quot;&gt;Details&lt;/a&gt;). As one can imagine the boot process takes its time ...  &lt;/p&gt;&#xA;" OwnerUserId="181" LastActivityDate="2017-10-01T17:01:07.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4825" PostTypeId="2" ParentId="4529" CreationDate="2017-10-01T22:02:47.607" Score="0" Body="&lt;p&gt;UCSD &lt;a href=&quot;https://en.wikipedia.org/wiki/P-code_machine&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;p-code&quot;&gt;p-Code&lt;/a&gt; is a self-hosted emulator for a hypothetical stack machine designed to be targeted by Pascal-like languages.  Apple Pascal was a p-code environment.  I know Terak had a p-code environment for their Z-80 system, and I recall there was a version for CP/M-80.  There were probably others.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2017-10-01T22:02:47.607" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4826" PostTypeId="1" CreationDate="2017-10-02T19:54:10.750" Score="10" ViewCount="488" Body="&lt;p&gt;I'm considering creating a retro system but without requiring the sacrifice of any retro machine in order to get parts. The TMS9918 chip seems the only &quot;generic&quot; retro graphic chip, all other chips are system specific, it seems unfortunately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By connecting video out of one chip to video in to the next chip, it should be possible to create multiple layers of graphics, getting better graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possibility is to use a passive resistive divider (or a more advanced analog filter) to change the intensity of the video signal and alter colours, so that we can get more than 16 colours in total, for example we could have a system with 2 chips would be dedicated to darker colours and 2 other chips dedicated to light colours.&lt;/p&gt;&#xA;" OwnerUserId="2123" LastActivityDate="2017-10-03T16:32:36.210" Title="Is it possible to chain TMS9918 chips to get better graphics?" Tags="&lt;hardware&gt;&lt;video&gt;" AnswerCount="1" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="4827" PostTypeId="2" ParentId="4826" CreationDate="2017-10-02T20:42:48.920" Score="9" Body="&lt;p&gt;Assuming that the chip starts in a well-defined state upon reset, an alternative would be to use the 9928 rather than the 9918; the primary difference is that you get component outputs rather than composite. You also lose video in, so each would be running individually. But the option it brings is running three of them simultaneously and e.g. taking only Y from each to form the triplet of R, G, B.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not completely scientific, as these things often come from consensus wisdom of visual colour matching rather than from hardware analysis, but I grabbed an image of the TMS palette from the web, desaturated by converting to luminance value, and sampled the results. Sorted into order and divided into close tiers as per the unscientific nature of the experiment, I got potential Y outputs of:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;255&#xA;205 204 199 &#xA;190 183 &#xA;158 &#xA;149 &#xA;134 130 &#xA;126 125 &#xA;114 &#xA;96 &#xA;0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So I make that probably ten usable levels of output per channel — the hypothetical machine would support 1,000 colours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have them sit at the same addresses, but add bus logic so that you can enable or disable any combination of them and you could even save time by pushing the same graphics to each, then diverging for a palette set.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As to your resistor network idea, that's approximately how the SAM Coupé's Kaleidoscope add-on works. One programmatically sets a multiplier of video levels, in 256 steps. It's a terrible implementation so in practise it's often hard to see the difference, but in principle one puts an ordinary image on screen, then runs a busy loop on the CPU to race the raster (or do it once per scan line, that being the resolution of interrupts), tweaking output levels in much the same way as you might dynamically swap palettes. A user without a Kaleidoscope just seems the normal image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the one hand, if you could automate that then it might be a workable solution. But on the other hand, if you are willing to create a circuit that can grab a value from memory and then transcribe it into an analogue level, you should probably just use a 6845 and implement the complete colour output yourself. With one of those you programmatically set timing, then it gives you current pixel address to output plus information about the correct placement of syncs. So all you need do is grab the value indicated and output, using whatever size of source data and mapping to colours you desire.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-10-03T16:32:36.210" LastActivityDate="2017-10-03T16:32:36.210" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4831" PostTypeId="1" AcceptedAnswerId="4839" CreationDate="2017-10-04T13:47:07.250" Score="11" ViewCount="1293" Body="&lt;p&gt;I have a project where I aim to create a retro arcade game cabinet, the technology would be ~1988. For now I am planning to only simulate the system on my PC in order to develop the game. The dedicated hardware, if ever created, will come later. &lt;strong&gt;However I have to know what kind of video hardware to simulate in order to really start development.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My requirements would be the following (nothing is set in stone, those are just general ideas):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Composite output (possibly encoded from RGB with an external chip), X resolution 256 px, Y resolution between 192 and 240 px (more than 224 lines would be hidden by NTSC overscan anyway I guess)&lt;/li&gt;&#xA;&lt;li&gt;One fully scrollable background layer capable of 3BP or 4BP graphics with either 8x8 or 16x16 character tiles.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Possibly&lt;/em&gt; one simpler non-scrollable background layer of 2BP graphics that could serve for backdrops or text overlays&lt;/li&gt;&#xA;&lt;li&gt;A lot of 3BP or 4BP sprites, at least 16x16 in size (if larger is available it doesn't hurt) (if there's enough sprites available then only one background layer is necessary)&lt;/li&gt;&#xA;&lt;li&gt;Palette: At least 32 colours simultaneously - (if either sprites or BG graphics are in 4BP it's enough to have a single palette (Sega Master System style))&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Ideally I'd want to be able to create the system with parts if the need ever arises. If that is the case, I'd like to use retro parts, through-hole components and +5V parts whenever possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Was there a video chip available at that time that could be used?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="2123" LastEditorUserId="4147" LastEditDate="2017-10-04T14:38:54.980" LastActivityDate="2020-02-15T02:04:00.757" Title="Video chip for hypothetical 1988 arcade game" Tags="&lt;history&gt;&lt;video&gt;&lt;chip&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4832" PostTypeId="2" ParentId="4831" CreationDate="2017-10-04T14:52:36.027" Score="10" Body="&lt;p&gt;Assuming you're happy with a forward-looking 1988 machine, how about the &lt;a href=&quot;https://en.wikipedia.org/wiki/TMS34010&quot; rel=&quot;noreferrer&quot;&gt;TMS34010&lt;/a&gt; (from 1986) or '020 (from 1988)? It's a RISC CPU/GPU combination, so you're supposed to supply a frame buffer, and its instruction set includes 2d drawing. It became the basis of the solid polygon Hard Drivin' and STUN Runner in 1989 but was also later found in heavy sprite movers like Smash TV and Mortal Kombat, so it's adaptable to either style.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably your easiest solution for interfacing to one would be to pick up one of the ISA TIGA boards — that'll get you the processor and a frame buffer, behind a well-defined bus for which I'm sure a connector would be locatable.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-10-04T14:52:36.027" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4833" PostTypeId="2" ParentId="2244" CreationDate="2017-10-04T16:21:57.710" Score="2" Body="&lt;p&gt;In the C89 language specification, the &lt;code&gt;rand&lt;/code&gt; PRNG is defined. This was used by many programs compiled from C source code.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;static unsigned long int next = 1;&#xA;&#xA;int rand(void)   /* RAND_MAX assumed to be 32767 */&#xA;{&#xA;         next = next * 1103515245 + 12345;&#xA;         return (unsigned int)(next/65536) % 32768;&#xA;}&#xA;&#xA;void srand(unsigned int seed)&#xA;{&#xA;         next = seed;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;An explanation of the magic numbers is as follows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The &lt;code&gt;32768&lt;/code&gt; is there to ensure that &lt;code&gt;rand()&lt;/code&gt; won't generate &lt;code&gt;32767&lt;/code&gt; half the time on 16-bit machine, while the &lt;code&gt;65536&lt;/code&gt; deals with the fact that the low-order bits of an LCG with a power-of-2 modulus are far less random than the high-order bits (in particular, the LSB alternates between 0 and 1).  The &lt;code&gt;12345&lt;/code&gt; and &lt;code&gt;1103515245&lt;/code&gt; are derived from the modulus of &lt;code&gt;4294967296&lt;/code&gt; to ensure the generator covers the full potential period. – &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4/mark&quot;&gt;Mark&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-10-04T18:46:51.767" LastActivityDate="2017-10-04T18:46:51.767" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4834" PostTypeId="1" AcceptedAnswerId="4835" CreationDate="2017-10-05T15:18:37.673" Score="7" ViewCount="1180" Body="&lt;p&gt;I wrote this little Basic program to get Joystick input from Control Port 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that this method is very strange and is better for keyboard input.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;20 get a$&#xA;30 if a$=&quot;&quot; then 20&#xA;32 b=asc(a$)&#xA;33 if b=50 then 100&#xA;34 if b=95 then 200&#xA;35 if b=160 then 300&#xA;36 if b=29 then 400 : rem left/problem&#xA;46 a$=&quot;&quot;:goto20&#xA;100 print&quot;right&quot;:goto46&#xA;&#xA;       ...&#xA;&#xA;400 print&quot;left&quot;:goto46&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The program works as expected but when I do 'left' the program lags for approximately 1 second. I can't even stop the program during the lag. Why is this only happening for 'left'?.&#xA;I heard about something that the Control Port 1 is time delayed but I'm not sure and I do not know why this should be only for 'left'.&lt;/p&gt;&#xA;" OwnerDisplayName="user6734" LastEditorUserId="3297" LastEditDate="2017-10-06T09:18:15.717" LastActivityDate="2017-10-06T09:18:15.717" Title="C64: Strange Behaviour on Control Port 1" Tags="&lt;commodore-64&gt;&lt;basic&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4835" PostTypeId="2" ParentId="4834" CreationDate="2017-10-05T16:06:44.707" Score="15" Body="&lt;p&gt;Control Port? You are reading the &lt;strong&gt;keyboard&lt;/strong&gt; (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here 29 (1D) is cursor right, while 159 (9D) is left (Down=17; Up=145)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To read the joystick you need to peek into the port. &lt;code&gt;56321&lt;/code&gt; for port 2, &lt;code&gt;56320&lt;/code&gt; for port 1 (2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try &lt;code&gt;10 PRINT PEEK(56320): GOTO 10&lt;/code&gt; and wiggle your joystick to see all values via port 1. Since it's a bitmap, testing should be done by masking the values, or at (maybe faster) using a mask to remove fire and unwanted lines before going through an &lt;code&gt;IF&lt;/code&gt;-sequence like yours, as logic operations in BASIC are slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, you might want to consider some more reliable fall through checking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(1) - The reason you are getting some/any results is due to the fact, that keyboard and joystick are using the same ports. Reading via &lt;code&gt;GET&lt;/code&gt; is not only tricky, but a great way to screw things up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2) - To keep joystick and keyboard separate, it might be a good idea to switch the keyscan off (&lt;code&gt;POKE 56322,224&lt;/code&gt;) and only enable it when needed (&lt;code&gt;POKE 56322,255&lt;/code&gt;) - when to do it best depends a lot on your programm structure.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="2126" LastEditDate="2017-10-05T21:41:26.113" LastActivityDate="2017-10-05T21:41:26.113" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4836" PostTypeId="2" ParentId="4693" CreationDate="2017-10-05T18:16:13.233" Score="4" Body="&lt;p&gt;Halfcarry is necessary for &lt;code&gt;DAA&lt;/code&gt; instruction and thus it makes sense to have it in &lt;code&gt;AF&lt;/code&gt; in a designated place (since it has a designated behavior).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;DAA&lt;/code&gt; is needed for BCD arithmetic.  But it's also useful to convert a nibble into ASCII:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ADD A,90H&#xA;DAA&#xA;ADC A,40H&#xA;DAA&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;takes 6 bytes and 22 cycles.  You cannot really do that with conditional jumps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The halfcarry bit is not even the most obscure: there is a bit that is set when the last operation was a subtraction (or comparable) so that the &lt;code&gt;DAA&lt;/code&gt; instruction knows whether to adjust after an addition or a subtraction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8088 (which is sort-of source code compatible to the 8080) has two different adjustment instructions for addition and subtraction, in contrast.&lt;/p&gt;&#xA;" OwnerDisplayName="user6963" LastActivityDate="2017-10-05T18:16:13.233" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4837" PostTypeId="2" ParentId="4834" CreationDate="2017-10-05T18:35:03.320" Score="8" Body="&lt;p&gt;The &lt;code&gt;get a$&lt;/code&gt; method isn't really a good way to read the joystick. Raffzahn's method is much better: it directly queries the CIA's I/O lines the joystick acts on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, it just works by accident: the C64 uses the very same CIA I/O lines to query the keyboard matrix and the joystick ports. Essentially, from software you can't tell whether a key is pressed or the joystick is moved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The keyboard is a matrix of contacts that are horizontally connected to the same lines as one joystick port and vertically connected to those of the other joystick port. When you press a key you connect a horizontal line to a vertical line. The keyboard subroutine in turn pulls down one of the horizontal lines and looks for a vertical line being pulled low as well. If it is the key on the intersection must be pressed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each joystick has four directional contacts that are closed when you move in that direction. It doesn't need to be scanned but from the keyboard routine's perspective it looks like a whole row or column on the keyboard is depressed - it senses a pulled down line no matter what row it currently scans. On the other joystick port you short the scanning (output) lines to ground which can't be sensed, that's why the &lt;code&gt;get a$&lt;/code&gt; method doesn't work there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The keyboard scanning interferes with reading the I/O lines directly, so it's better to switch the horizontal lines to input as well while you're querying the ports - that is what the &lt;code&gt;POKE&lt;/code&gt; does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(It is quite possible that I mixed up horizontal and vertical lines but you'll get the idea. Of course, the keyboard is not physically arranged in a rectangular matrix but it's wired that way.)&lt;/p&gt;&#xA;" OwnerUserId="5200" LastActivityDate="2017-10-05T18:35:03.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4838" PostTypeId="2" ParentId="4831" CreationDate="2017-10-06T13:00:42.033" Score="5" Body="&lt;p&gt;Your requirements pretty well match the &lt;a href=&quot;https://en.wikipedia.org/wiki/Original_Chip_Set&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga OCS&lt;/a&gt;, which was introduced with the Amiga 1000 in 1985 and widely popularized by the Amiga 500 in 1987.  So by 1988, that level of graphics was already common in home computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, the Amiga chipset might not be a bad target for your project.  Good Amiga emulators like &lt;a href=&quot;https://en.wikipedia.org/wiki/UAE_(emulator)&quot; rel=&quot;nofollow noreferrer&quot;&gt;UAE&lt;/a&gt; are easily available, there a plenty of good native development tools and tutorials still around if you search a bit (&lt;a href=&quot;http://aminet.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aminet&lt;/a&gt; has just about everything you could need; the challenge is knowing what to look for in that giant haystack), and once you're ready to move beyond emulators, real Amiga hardware is still quite practically obtainable.  And sticking a plain off-the-shelf Amiga box into an arcade cabinet would not have been an altogether unprecedented move in 1988.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, here's how the OCS compares with your requirements:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Composite output (possibly encoded from RGB with an external chip), X resolution 256 px, Y resolution between 192 and 240 px (more than 224 lines would be hidden by NTSC overscan anyway I guess)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Check.  NTSC output at a nominal 320&amp;times;200 px or PAL at 320&amp;times;256 px, more with overscan.  Vertical resolution could be doubled via interlacing, horizontal resolution could also be doubled at the cost of reduced color palette and sprites.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Palette: At least 32 colours simultaneously - (if either sprites or BG graphics are in 4BP it's enough to have a single palette (Sega Master System style))&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Check.  Up to 6BP in lores mode (320 px horizontal resolution) or 4BP in hires mode (640 px), with 32 independent 12-bit color registers.  Full 12-bit color space could be shown using a special 6BP &lt;a href=&quot;https://en.wikipedia.org/wiki/Hold-And-Modify&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;hold and modify&quot;&lt;/a&gt; graphics mode, although with restrictions that made it rather impractical in games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The display-synced &lt;a href=&quot;https://en.wikipedia.org/wiki/Original_Chip_Set#Copper&quot; rel=&quot;nofollow noreferrer&quot;&gt;Copper&lt;/a&gt; co-processor also allowed easy mid-screen palette changes, extending the available colors, and could even be used to split the screen vertically into multiple parts with separate palettes, frame buffers, sprites and even different graphics modes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A lot of 3BP or 4BP sprites, at least 16x16 in size (if larger is available it doesn't hurt) (if there's enough sprites available then only one background layer is necessary)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Kind of.  The Amiga chipset had only eight 16 px wide 2BP hardware sprites (which could be merged into four 4BP sprites), which might not count as &quot;a lot&quot; for you.  However, you could easily &lt;a href=&quot;https://en.wikipedia.org/wiki/Sprite_multiplexing&quot; rel=&quot;nofollow noreferrer&quot;&gt;multiplex&lt;/a&gt; them with the help of the Copper or just use &lt;a href=&quot;https://en.wikipedia.org/wiki/Blitter_object&quot; rel=&quot;nofollow noreferrer&quot;&gt;blitter objects&lt;/a&gt; instead.  So in practice, the real limitation was 8/4 sprites visible per scanline (possibly more with mid-scanline multiplexing), plus as many bobs as you could draw in a frame (which was quite a few, especially if they were small).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One fully scrollable background layer capable of 3BP or 4BP graphics with either 8x8 or 16x16 character tiles.&#xA;  &lt;em&gt;Possibly&lt;/em&gt; one simpler non-scrollable background layer of 2BP graphics that could serve for backdrops or text overlays&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, kind of.  The OCS had hardware support for two independent 3BP layers (&quot;dual playfield mode&quot;), so you could have simple hardware parallax scrolling at the cost of reduced colors.  However, in practice, I believe most games would just use the &lt;a href=&quot;https://en.wikipedia.org/wiki/Blitter&quot; rel=&quot;nofollow noreferrer&quot;&gt;blitter&lt;/a&gt; to draw all layers into a single 4/5/6BP raster buffer, allowing more colors and a potentially unlimited number of layers.  As noted above, things like top/bottom status bars could also be done as separate subscreens with the copper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ps. Here's &lt;a href=&quot;https://www.youtube.com/watch?v=VS6xB5m5ufo&quot; rel=&quot;nofollow noreferrer&quot;&gt;a random YouTube video&lt;/a&gt; I found by Googling for &quot;best looking Amiga games&quot; that shows off some examples of what the Amiga chipset is/was capable of.  (I believe most of those are OCS compatible, although I haven't really checked.  Not a lot of Amiga games really made use of the extra capabilities of the later &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_Advanced_Graphics_Architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;AGA&lt;/a&gt; chipset even after it was introduced in 1992.)&lt;/p&gt;&#xA;" OwnerUserId="366" LastEditorUserId="366" LastEditDate="2020-02-15T02:04:00.757" LastActivityDate="2020-02-15T02:04:00.757" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="4839" PostTypeId="2" ParentId="4831" CreationDate="2017-10-06T15:53:00.277" Score="6" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Yamaha_V9958&quot; rel=&quot;noreferrer&quot;&gt;Yamaha V9958&lt;/a&gt; video chip was used in the MSX2+ (1988) and MSX Turbo-R (1990). It supports a resolution of 256x212 with up to 19,268 colors, 32 4BPP sprites, and horizontal and vertical scroll registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a successor of the TMS9918 which was the basis of the video chip used in the Sega Master System that you mentioned.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-10-06T15:53:00.277" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4840" PostTypeId="2" ParentId="4831" CreationDate="2017-10-06T16:36:25.767" Score="5" Body="&lt;p&gt;Another approach, depending on what you really want to do (do you WANT to design your own board, or do you just want to program 1988-class hardware?), is to pick an existing arcade board, and try to develop for it. For instance, if you want all those features in a 1988-class arcade cabinet, I think the Namco System 2 hardware (which ran games such as Assault, released in 1988) would do the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not able to dig around right now to find out if someone has already put together a toolchain or graphics libraries for it or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 68K was supported in many compilers (current versions of GCC appear to still support it), and you can get most of the hardware info you need by looking at the MAME sources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, of course, you can use MAME as your simulator during development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is no good if you want to build many cabinets, but if you just want one, it's not that hard or that expensive to find a working Namco System 2 boardset.&lt;/p&gt;&#xA;" OwnerUserId="4356" LastActivityDate="2017-10-06T16:36:25.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4841" PostTypeId="1" AcceptedAnswerId="4842" CreationDate="2017-10-07T03:17:40.203" Score="5" ViewCount="316" Body="&lt;p&gt;I acquired a collection of older EPROM IC's and am wondering what the rarity of them are or if they are rather common. Do people collect these items?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;89142   NM27C512Q&lt;/li&gt;&#xA;&lt;li&gt;~~  B9212   NM27C512Q&lt;/li&gt;&#xA;&lt;li&gt;~~  B9312   NM27C512Q&lt;/li&gt;&#xA;&lt;li&gt;~~  B9224   NM27C512Q&lt;/li&gt;&#xA;&lt;li&gt;~~  B9318   NM27C512Q&lt;/li&gt;&#xA;&lt;li&gt;~~  B9130   NM27C512Q&lt;/li&gt;&#xA;&lt;li&gt;A   8740    2716Q&lt;/li&gt;&#xA;&lt;li&gt;Allen Bradley   AM27C2048   &lt;/li&gt;&#xA;&lt;li&gt;AMD 2764ADC &lt;/li&gt;&#xA;&lt;li&gt;AMD AM27C64 &lt;/li&gt;&#xA;&lt;li&gt;AMD     AM27C64-20QDSB  AM27C64-20ADSB&lt;/li&gt;&#xA;&lt;li&gt;AMD     9232EP  AM27C512-255DC&lt;/li&gt;&#xA;&lt;li&gt;Fujitsu / Intel 8628 19 MBL8742H&lt;/li&gt;&#xA;&lt;li&gt;Fujitsu / Intel MBL 8742H   &lt;/li&gt;&#xA;&lt;li&gt;Intel '80   8627P   L8300363&lt;/li&gt;&#xA;&lt;li&gt;Intel '80   8641P   L6460221&lt;/li&gt;&#xA;&lt;li&gt;Intel '80   8644P   L6460220&lt;/li&gt;&#xA;&lt;li&gt;Intel '80   8726P   L7290058&lt;/li&gt;&#xA;&lt;li&gt;Intel '80   8627P   L6300365&lt;/li&gt;&#xA;&lt;li&gt;Intel '82   D8742   L4255697&lt;/li&gt;&#xA;&lt;li&gt;Intel '82   D8742   L5360036 / L6110132&lt;/li&gt;&#xA;&lt;li&gt;Intel '82   8441    8441FDD&lt;/li&gt;&#xA;&lt;li&gt;Intel '82   D8742   L4195392&lt;/li&gt;&#xA;&lt;li&gt;Intel '82   DM742   L8130114 – 308262&lt;/li&gt;&#xA;&lt;li&gt;Intersil    8201    IM64021PL&lt;/li&gt;&#xA;&lt;li&gt;Intersil    7929    IM64021PL&lt;/li&gt;&#xA;&lt;li&gt;Mitsubishi Elect Corp   D8742   &lt;/li&gt;&#xA;&lt;li&gt;Motorola    8013    MCM2716C-35&lt;/li&gt;&#xA;&lt;li&gt;Motorola    185-08  &lt;/li&gt;&#xA;&lt;li&gt;Motorola    185-09  &lt;/li&gt;&#xA;&lt;li&gt;Motorola    8448D XM    SC81192L&lt;/li&gt;&#xA;&lt;li&gt;Motorola    8504C XM    SC81192L&lt;/li&gt;&#xA;&lt;li&gt;NEC D8741AD &lt;/li&gt;&#xA;&lt;li&gt;NEC D8302P9 &lt;/li&gt;&#xA;&lt;li&gt;NEC D8348PX &lt;/li&gt;&#xA;&lt;li&gt;NEC D8321P9 &lt;/li&gt;&#xA;&lt;li&gt;NEC D8320P9 &lt;/li&gt;&#xA;&lt;li&gt;NEC D8352PX &lt;/li&gt;&#xA;&lt;li&gt;NEC 595304A NM27C512Q&lt;/li&gt;&#xA;&lt;li&gt;SEEQ    8450A   27128-25&lt;/li&gt;&#xA;&lt;li&gt;SEEQ    0517 A  2764-20&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  3210F   &lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  10F 1 L / 9604  &lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  9318    M27C4002&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  9335S   M27C4002&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  10F I L 96004v5 MYS 88 530&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  96004 V5    M27C 1001&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  9335S   M27C4002&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics      M27C4002&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  9340B   M274002&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  9340B   M27C4002&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  9G004   MYS 88 530&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  9235    MC27C4002&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  9301    MC27C4002&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  9340B   MC27C4002&lt;/li&gt;&#xA;&lt;li&gt;STMicroelectronics  9335S   M2732A-2FL&lt;/li&gt;&#xA;&lt;li&gt;TMS JL  27c240-15   LP9245184&lt;/li&gt;&#xA;&lt;li&gt;TMS JL  27c240-15   LP9245157&lt;/li&gt;&#xA;&lt;li&gt;TMS JL  27c240-15   LP92451B4&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6949" LastEditorUserId="439" LastEditDate="2017-10-07T16:51:16.737" LastActivityDate="2017-10-07T16:51:16.737" Title="Collection of older EPROM IC's" Tags="&lt;hardware&gt;&lt;rom&gt;&lt;intel&gt;&lt;motorola-68000&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4842" PostTypeId="2" ParentId="4841" CreationDate="2017-10-07T14:09:59.563" Score="7" Body="&lt;p&gt;Chip collectors I know are generally looking for a few things:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Early production dates&lt;/strong&gt; — chips often have a date code of the form &lt;code&gt;YYWW&lt;/code&gt; (eg &lt;code&gt;8651&lt;/code&gt; for the 51st week of 1986). The earliest ones have more value to collectors.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unusual technologies&lt;/strong&gt; — if a chip used a short-lived or esoteric technology, it's generally considered more ‘interesting’.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Non-standard packaging&lt;/strong&gt; — anything but DIP: mil-spec ceramics, piggybacks, Eastern Bloc rarities or regular chips in metal cans, …&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Specific applications&lt;/strong&gt; — At the hobbyist level, Commodore/MOS produced a lot of chips with non-standard pinouts, and these originals are now getting rarer. Industrially, there are many infrastructure/transit projects that run on 30+ year old systems. These may require one particular EPROM type for system modifications.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Provenance&lt;/strong&gt; — if a chip or board comes with verifiable information where it was used (say aerospace, or motor racing) then it would have additional collector value. This might also apply if an EPROM contained a known early ROM version for a commercial computer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;EPROMs were usually produced in quantity, were designed to be interchangeable and used very standard technology. I'd say they were more useful than valuable, though UV-erasable EPROMs do have a certain visual appeal.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-10-07T14:09:59.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4843" PostTypeId="1" AcceptedAnswerId="4844" CreationDate="2017-10-08T11:56:47.140" Score="7" ViewCount="929" Body="&lt;p&gt;From &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum_Contended_Memory&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/ZX_Spectrum_Contended_Memory&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Contended memory space, on the other hand, is shared between the ULA and the Z80 and the ULA has higher priority. Contended memory occupies addresses 0x4000..0x7FFF of the Z80 memory map. This is the first 16 KB of RAM in the 48 KB machine but the entire RAM of the 16 KB machine.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Okay, I can sort of understand that in a scenario where the 48K machine uses three banks of 16kbit RAM chips, so just one bank is shared.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as I understand it, later versions of the 48K Spectrum used a single bank of 64kbit RAM chips (so actually 64K RAM of which 16K was unused). How is that consistent with the possibility of only 16K being contended?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-10-20T19:36:32.367" Title="RAM contention and what counts as different banks" Tags="&lt;zx-spectrum&gt;&lt;memory&gt;" AnswerCount="5" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4844" PostTypeId="2" ParentId="4843" CreationDate="2017-10-08T12:50:56.043" Score="6" Body="&lt;p&gt;I can find no evidence that a single bank of RAM was used. Checking out the &lt;a href=&quot;https://z00m.speccy.cz/?file=hardware&quot; rel=&quot;nofollow noreferrer&quot;&gt;schematics for every issue of 48kb Spectrum&lt;/a&gt;, all that seems to happen is a switch from sixteen x1 chips to two x8 chips, at issue 6. But the low 16kb and the high 32kb remain physically distinct.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-05-03T15:36:01.620" LastActivityDate="2018-05-03T15:36:01.620" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="4845" PostTypeId="1" AcceptedAnswerId="4848" CreationDate="2017-10-08T13:17:12.970" Score="10" ViewCount="700" Body="&lt;p&gt;Here is a BASIC program for the Commodore 64, which should load the &lt;code&gt;LIB&lt;/code&gt; file from the disk, and then stop. Yes?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;5 PRINT &quot;LOADING...&quot;&#xA;10 LOAD &quot;LIB&quot;,8,1&#xA;20 STOP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the &lt;code&gt;LIB&lt;/code&gt; file is 102 bytes long and is loaded to address &lt;code&gt;$BF00&lt;/code&gt;, which is under the BASIC ROM so I don't see how it should affect the running of the system in any way since I don't turn the ROM off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I see on the screen:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LOADING...&#xA;LOADING...&#xA;LOADING...&#xA;LOADING...&#xA;LOADING...&#xA;LOADING...&#xA;LOADING...&#xA;LOADING...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;... ad infinitum. How can this be happening?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2017-10-15T00:24:43.750" Title="Why does this BASIC program keep restarting?" Tags="&lt;commodore-64&gt;&lt;basic&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4846" PostTypeId="1" AcceptedAnswerId="4850" CreationDate="2017-10-08T13:22:46.870" Score="13" ViewCount="2782" Body="&lt;p&gt;Back in the 8-bit days, I used 6502 computers, where the story about memory access was easy to understand. RAM chips of the late seventies and early eighties could do 2 MHz (or a bit more e.g. 2.6 in the datasheet I found), a 1 MHz 6502 took half the bandwidth leaving the other half for video which translated into a maximum of about 10K of video RAM. (Variation on a theme: the BBC Micro used the new fast RAM chips, which allowed a doubling of all those numbers.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm writing a story that involves among other things a fictional Z80-based home computer at the end of the seventies; the protagonists selected that CPU in the belief that it was slightly faster than the 6502 (takes an average of perhaps three times as many clock cycles to do things, but has four times the clock speed). The computer has 16K of RAM (about the max affordable at the time) and graphics similar to those of the Sinclair Spectrum. I'm belatedly checking the situation with regard to sharing memory access, and...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.worldofspectrum.org/faq/reference/48kreference.htm#Contention&quot; rel=&quot;noreferrer&quot;&gt;http://www.worldofspectrum.org/faq/reference/48kreference.htm#Contention&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... it's looking surprisingly terrible? The video seems to be using 3/4 of the memory bandwidth rather than the expected 1/2 even though it's only 6K of video RAM. The Z80 needs memory access at what are in this context effectively random intervals, which means it will very often trip over the video chip. Worse yet:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum_Contended_Memory&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/ZX_Spectrum_Contended_Memory&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;However, the ULA must wait for a Z80 read or write to complete before it can stop the Z80's clock and access the memory. As the ULA has no capacity to prefetch and store data in advance, it relies upon the memory being available to read to produce a clean and true video display. If an existing Z80 access is in progress when the ULA must read video data, the read is missed and the display shows blank white pixels in place of the correct video pixels. On the next frame, they may well be read correctly. The consequences of this often appeared as a flickering of missing pixels on the display, or 'snow' as it was also called. To avoid snow, some programs and games only copied data to the display on interrupt, as the Spectrum maskable interrupt was generated by the display vertical refresh signal.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... that seems to mean that a program that spends most of its time updating the display (like games, which, let's be honest, are the main consumers of CPU cycles on home computers), must effectively shut down operations while the screen is being displayed, which is most of the time. The combination of these would seem to imply that you'll only actually see a small fraction of the nominal performance of the CPU. Even the separate memory banks on the 48K Spectrum won't help all that much, because the CPU does still need to update video memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think it can really be that bad. If it was, nobody would ever have used a Z80 for any computer with a graphical display, and in practice, the Spectrum, Amstrad, MSX and probably some other machines I'm forgetting, did happily use the Z80. What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-06T20:01:49.290" Title="Z80 and video chip contending for random access" Tags="&lt;video&gt;&lt;z80&gt;&lt;memory&gt;&lt;performance&gt;" AnswerCount="7" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4847" PostTypeId="2" ParentId="4846" CreationDate="2017-10-08T14:47:40.820" Score="11" Body="&lt;p&gt;The 6502 situation isn't quite that rosy — the Vic-20 has a 12-bit data bus so that it can fetch both pixels and colours during its gap, the C64 has a complete CPU lock-out for the first row of every character line, the Atari 400/800/etc use a special modified 6502 on which they can stop the clock to get the CPU out of the way, the Oric runs the 6502 for only one in three memory cycles in order to give the video 2/3rds of the memory bandwidth...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, the most powerful Z80 instructions move two bytes rather than one. Only &lt;code&gt;PUSH&lt;/code&gt;s and &lt;code&gt;POP&lt;/code&gt;s achieve that with a single-byte opcode. So the instruction stream is always an easy majority of memory accesses in a real program. On a Spectrum, even if you're heavy on screen painting, you still hit the lower bank much less frequently than the higher assuming you've located your code sensibly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other options:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be like the MSX (or ColecoVision, or Master System, or anything else with a member of that family of VDP). Its VDP doesn't share bandwidth with the CPU, it instead has its own memory. You have to post bytes to IO ports to write into it, but then it's tiles and sprites so ongoing adjustments aren't as heavy. The CPU has full bandwidth access to its RAM. MSX caveat: the RAM need only be fast enough to serve a value every three cycles; an extra WAIT is inserted into opcode fetches, which would otherwise expect a response in two cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPC is especially interesting because prototypes had a 6502, which was switched out for a Z80 before production, and it effectively recreates the 6502 two-phase memory access cycle with the Z80, strobing WAIT so that in every four-cycle block the Z80 gets one memory access during the first two cycles, and the video gets to use both of the other two cycles (with only one RAS — both video values are from the same row). This kind of has the opposite effect of the MSX scheme as opcode fetches cost exactly the normal amount but the three-cycle accesses that constitute most of the rest of CPU activity are stretched to four. Received rule of thumb is that the nominally 4Mhz CPU acts like it is 3.3Mhz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my net argument: the Z80 isn't as weighed down as you think, and other options are available, and many of the 6502 machines were more affected than you describe.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4692" LastEditDate="2019-02-16T09:40:44.590" LastActivityDate="2019-02-16T09:40:44.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="4848" PostTypeId="2" ParentId="4845" CreationDate="2017-10-08T15:31:13.643" Score="11" Body="&lt;p&gt;When Commodore BASIC finishes the LOAD command, it automatically runs the BASIC program, which was not overwritten because you loaded a binary outside of BASIC's program space. See page 59 of the C64 Programmer's Reference Guide.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2017-10-08T15:31:13.643" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4849" PostTypeId="2" ParentId="4846" CreationDate="2017-10-08T16:22:23.693" Score="2" Body="&lt;p&gt;The contention is not the only thing that is considered while designing computer. The &lt;strong&gt;Z80&lt;/strong&gt; was so popular also due to fact It contain all the logic for refreshing of dynamic memories as &lt;strong&gt;SRAM&lt;/strong&gt; was too expensive at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that is the missing piece of contention Tommy's  answer is pointing out. In your &lt;strong&gt;6502&lt;/strong&gt; system you account for sharing memory by &lt;strong&gt;CPU&lt;/strong&gt; and graphic chip. But the memories must be periodically refreshed too which also takes some bandwidth and or &lt;strong&gt;CPU&lt;/strong&gt; cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;strong&gt;Z80&lt;/strong&gt; does this on its own there is no need for additional circuitry which would lead to 3 object contention instead of 2 ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastActivityDate="2017-10-08T16:22:23.693" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4850" PostTypeId="2" ParentId="4846" CreationDate="2017-10-08T22:41:19.040" Score="13" Body="&lt;p&gt;I think you've let your understanding of the situation as it was in the late 70s/early 80s become somewhat more simplified than it actually was.  For example:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;RAM chips of the late seventies and early eighties could do 2 MHz (or a bit more e.g. 2.6 in the datasheet I found)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You say you're looking at a 16K design, so it's highly likely it'd be based on the 4116 series of DRAM chips.  The 4116 was available in a variety of speed grades at different times; it happens the datasheet I have in front of me is for Motorola's implementation of it and dated October 1979, at which time they offered access times down to 150ns (which is nominal latency from RAS to data being available, assuming your timing between asserting RAS and switching to CAS is optimal).  The 150ns wasn't especially common, but the 200ns variant was more so (for example, &lt;a href=&quot;https://archive.org/stream/byte-magazine-1979-11&quot; rel=&quot;nofollow noreferrer&quot;&gt;this issue of Byte magazine from 1979&lt;/a&gt; has a lot of adverts for products including 4116-200, and quite a few with 4116-250s, but only a single advert for the 150ns variant (on p282, listed as &quot;4116-2&quot;, which was a common designator for this speed, used e.g. in the &lt;a href=&quot;https://console5.com/techwiki/images/8/85/MK4116.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mostek implementation&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in the end, 150ns or 200ns, you still get the same overall full cycle time of 375ns, which as you say is about 2.6MHz.  But that's fine, because the Z80 didn't use its bus anything like as efficiently as the 6502, so it doesn't matter that your memory is slower than the CPU bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 is renowned for using its memory bus for (depending on how you clocked it exactly) around about half of each of its processor cycles.  This lets you interleave its accesses one-to-one with accesses to your video hardware, and it works out very neatly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 memory interface, on the other hand, is messy.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Z80 clock rate is much faster in relation to both CPU processing and memory accesses than the 6502 is.&lt;/li&gt;&#xA;&lt;li&gt;The Z80 subdivides its cycles into machine cycles (labeled M1, M2, etc) and T-states (T1, T2, etc, which correspond to bus cycles).  Each machine cycle contains at least 3 T-states.&lt;/li&gt;&#xA;&lt;li&gt;The first T-state of the M1 cycle is easily identified, because the CPU explicitly signals the start of M1 cycles.&lt;/li&gt;&#xA;&lt;li&gt;How the Z80 uses memory depends on what it's doing.&lt;/li&gt;&#xA;&lt;li&gt;When the Z80 fetches instructions, it performs the following operations:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It places the address on the bus in sync with a negative edge of its clock in cycle T1 (cycles are counted positive edge to positive edge).&lt;/li&gt;&#xA;&lt;li&gt;roughly a quarter cycle later, during the low phase, it asserts MREQ and RD.&lt;/li&gt;&#xA;&lt;li&gt;at the next negative edge, the Z80 samples the WAIT line.  If it isn't asserted, it reads the memory contents on the next positive edge after that, which is to say at the start of cycle T3, a full cycle and a half after it signaled the memory request.  Perhaps not coincidentally, this is 375ns for a 4MHz Z80A.&lt;/li&gt;&#xA;&lt;li&gt;because you've had enough time for a complete memory cycle during this process, you can immediately start using the memory for other things.  After reading an instruction, you have the T3 and T4 cycles (i.e. at least 500ns at 4MHz) before the next machine cycle starts.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;When a memory read or write is performed during executing an instruction, the sequence is slightly different. &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The address is placed on the bus at the &lt;em&gt;rising&lt;/em&gt; edge of T1, not falling.&lt;/li&gt;&#xA;&lt;li&gt;The MREQ and RD signals are asserted on the falling edge of T1, or for a write WR at the falling edge of T2.&lt;/li&gt;&#xA;&lt;li&gt;The data is read (assuming no WAIT signal is asserted) on the falling edge of T3, i.e. a full 500ns after the control signals at 4MHz.  Data for writing is available from falling edge of T1 until just after the rising edge of T3, giving several hundred ns of variability.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All machine cycles are at least 3 T-states long, and in each machine cycle you can tell during the first T-state whether the CPU is going to be using memory.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even in the absolute worst case where every machine cycle is hitting memory (and it would be rather difficult to achieve this with a practical program), you get 500ns of time for display memory access between each CPU memory access.  OK, you need to perform memory refresh in this time, but there's more than enough time for that during times you won't be producing video output (you need to hit all 128 rows every 2ms; the horizontal blanking period between each row of a typical TV screen will contain 8 M1 cycles so you can refresh your memory in horizontal blanking every 16 lines of display, which is less than 1ms).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you get 500ns out of every µs, but that only gets you 1 memory access per microsecond, right?  There's a 375ns cycle time on the memory, after all...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, it turns out that's not quite the end of the story.  375ns is the cycle time for &lt;em&gt;random access&lt;/em&gt;.  But video graphics is decidedly non-random. You're pulling lines of data out of a linear buffer.  You can easily optimize your memory accesses so that you hit two adjacent memory slots on each use.  Doing this lets you use your memory in what's referred to as &quot;page mode&quot;, which is substantially more efficient.  Accessing two adjacent memory slots (assuming you don't cross a page boundary) can be done by only using RAS once and then CAS twice.  The time for such a cycle of two addresses on a 150ns 4116 is: tRCD + 2*tCAS + tCP + tRSH + tRP + 2*tASC = 460ns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to why the Spectrum suffers from snow when accessing the display: the Spectrum is notoriously cheap.  It didn't synchronize its accesses with the CPU's in any way (despite this not being hard to achieve), in order to allow the board to be built particularly cheaply.  Avoiding treading on the Z80 isn't hard, it's just a little bit harder than it is on a 6502 system like the C64.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="7946" LastEditDate="2020-02-06T19:37:32.820" LastActivityDate="2020-02-06T19:37:32.820" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="4851" PostTypeId="1" AcceptedAnswerId="4853" CreationDate="2017-10-08T23:06:53.143" Score="9" ViewCount="579" Body="&lt;p&gt;I have around 500 floppy disk images from an Apple II and IIgs BBS/usergroup that closed down recently. Some of the disks are bootable, but many aren't. Is there an easy way to tell if a disk boots into something useful without loading up an emulator?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These disks are a mix of DOS 3.3, ProDOS 8, IIgs ProDOS 16 and Pascal formats.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2017-10-09T00:20:04.973" LastActivityDate="2017-10-09T20:43:35.873" Title="How can I tell if an Apple II disk image is bootable?" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;&lt;disk-image&gt;&lt;apple-iigs&gt;&lt;boot&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4852" PostTypeId="2" ParentId="4846" CreationDate="2017-10-09T00:00:24.847" Score="1" Body="&lt;p&gt;(I had originally a rather lengthy answer written, until I figured that your question is way too unspecific to be answered in detail. Without the type of Video generation mentioned, including resolution and colours as well as access patterns, no useful answer can be given. So here just a few basic numbers)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's go for the hard limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On each TV line about 17% (US NTSC) of time has no (data based) signal, so this time is available to the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar for the whole picture where only 483 of the 576 lines are used, leaving another 16% available. So completely holding the CPU during video access would leave about 30% to the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, real ~1980 contemporary computer video resolution will be way less (here your input is missing). Vertical resolution (horizontal doesn't matter here) might be just 200 lines per half frame. So only 70% (400/576) is needed, leaving 42% for the CPU. The video logic will now only steal a tad more than half of the cycles. No special trick used by now and native resolution with this timing might be up to 704 pixel in NTSC-M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I seriously wouldn't call this &lt;em&gt;&quot;which is most of the time&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Now I've got to use assumptions again - due missing input)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the amount of data the video circuitry needs to fetch per line, there may be additional access holes within a line. With like a 240x200 b/w display this would be 30 bytes per line (and about 6000 bytes video RAM). The visible part of a line is about 51us. Thus a RAM speed of 850ns (which is slow by 1980s standard) or better would already deliver double the needed bandwidth, thus the video logic would only need to stop the CPU for one single byte access and then leave the same time for the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In simple numbers this would now reduce the time the CPU gets slowed down to 29%. Already more than 2/3rd (71%) are now left to the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the Z80, you will notice, that depending on the instruction, there are often T-cycles outside an M-cycle. Thus depending on the instruction, the Z80 may even continue to work while memory access is blocked. Thus real blockage will already be less than about 29%.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here a lot of possibilities open for tweeking RAM and CPU speed to get even less usage due video access. With the right chips, the number can be lowered to 15%. So again, not what I would call a great slow down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if we separate video RAM from program RAM, much like in the Spectrum, &lt;strong&gt;real magic happens&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the Z80 does a lot of memory access, only a small percentage is for 'real' data. most goes to program code. And even of the data part, only a fraction is writing to the screen. For example moving a block of display data onto the screen via LDIR will mean that only 3 of the 21 cycles are writing video memory, while the remaining 18 cycles work internally or access program or source memory. Thus filling the screen with LDIR will get virtually **not at all slowed down* In fact, here it would even be sufficient if the video logic would only offer a gap every 6 or 7 bytes. Impact would still be almost impossible to detect. Same is true for basically all other access patterns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond this point speeding up the RAM access time would go hand in hand with geting a faster CPU. But again, very dependant on your design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So video doesn't need to slow down the CPU at all. Even when using a Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Addendum: Video games really don't access the video RAM itself as much as you assume. But proving this is a different topic.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-05-10T14:24:57.737" LastActivityDate="2018-05-10T14:24:57.737" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="4853" PostTypeId="2" ParentId="4851" CreationDate="2017-10-09T00:03:54.350" Score="10" Body="&lt;p&gt;The bootprocess itself don't know any 'not bootable' exit. If a disk can be read, the first sector is loaded at 800 and then jumped to 801 (800 holds a counter for the number of sectors to read by the bootloader - usually 1). If there is no sector to be found, it spins indefinit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Non bootable disks may have some kind of error message, but don't have to. You could try to scan for certain loader signatures as found in common OS. But thats a rather fruitless task.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-10-09T20:43:35.873" LastActivityDate="2017-10-09T20:43:35.873" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4854" PostTypeId="2" ParentId="4843" CreationDate="2017-10-09T02:14:57.727" Score="6" Body="&lt;p&gt;The 64K chips in the Spectrum 48K are used to provide the difference between the 16K and 48K models, i.e. exactly half of each chip is in use.  The 16K of memory from the base model is retained.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, this design allowed Sinclair to use 64K chips that would otherwise be rejected as faulty, as they just had to configure an address line to avoid the faulty part of the chip.  Presumably they got these chips cheap enough to account for what otherwise would be a waste of only using half of them.  Later Spectrums used fully working chips, though, and aftermarket hacks were available that let you bank switch them.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-10-09T02:14:57.727" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4855" PostTypeId="1" AcceptedAnswerId="4860" CreationDate="2017-10-09T10:27:15.853" Score="23" ViewCount="4871" Body="&lt;p&gt;There are basically two ways to design a 2D graphics system:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Provide lots of hardware support in the form of tiles, hardware scrolling and sprites, to put together each frame on the fly from a small quantity of data, so you can have lots happening on the screen in every frame even if the CPU is slow. The Commodore 64 and NES are well-known examples of this strategy.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Provide a simple frame buffer that can store a relatively large quantity of data, and rely on the CPU (plus any support chips) to be able to move that data around fast enough. The Apple II and Amstrad 464 are well-known examples of this strategy.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The second strategy produces an elegant and flexible design, but has the disadvantage that if you want lots happening on the screen in every frame, you can get severe slowdown. For example, a 4 MHz Z80 can blit about 200K/second, which sounds like a lot but at 60 fps, it would be only about 3K per frame, and you really want something like 20K of frame buffer for good graphics without tiles or sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is said that the Z8410 DMA chip can blit much faster, up to 2 megabytes/second. Would it be feasible to use it as a sort of GPU, put it in a home computer and let it handle scrolling and suchlike for an order of magnitude speedup? If so, why was it never done?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems the answer is yes, doable! But a couple of people have pointed out it's not a full match for the Amiga's blitter, because it doesn't do bit shifting and masking, only byte transfers. This is true, but will be considerably ameliorated by using chunky pixels (as opposed to bit planes on the Amiga). Suppose we had one pixel per byte. The problem would disappear. Unfortunately that's not feasible on an 8-bit home computer, but suppose we have something like the low resolution mode on the Amstrad 464, two pixels per byte. Now we can move two pixels without bit shifting. Better yet, if we double buffer, each buffer can move two pixels without bit shifting, for a net effect of one pixel movement per frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Addendum: if the blit is for the purpose of horizontal scrolling, hardware scrolling - which I think is cheap to provide? - would also help.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2017-10-09T23:27:04.940" LastActivityDate="2020-10-15T10:28:18.740" Title="Z8410 DMA chip as GPU?" Tags="&lt;graphics&gt;&lt;z80&gt;&lt;performance&gt;&lt;z8410&gt;" AnswerCount="4" CommentCount="11" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4856" PostTypeId="1" AcceptedAnswerId="4857" CreationDate="2017-10-09T13:06:41.927" Score="7" ViewCount="280" Body="&lt;p&gt;How do I transfer files between the host and the guest when using SunOS 4 under QEMU?&lt;br&gt;&#xA;I have followed this guide:&#xA;&lt;a href=&quot;https://en.wikibooks.org/wiki/QEMU/SunOS_4.1.4&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikibooks.org/wiki/QEMU/SunOS_4.1.4&lt;/a&gt;&lt;br&gt;&#xA;But when I try to rlogin or rcp, I get the following error: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ sudo rlogin -l root localhost  &#xA;ssh: connect to host localhost port 22: Connection refused&#xA;&#xA;$ sudo rcp test.txt localhost:  &#xA;ssh: connect to host localhost port 22: Connection refused lost connection&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;QEMU version: 2.10, SunOS version: 4.1.4, Ubuntu version (host): 16.04&lt;/p&gt;&#xA;" OwnerUserId="6970" LastEditorUserId="276" LastEditDate="2019-12-18T18:39:27.913" LastActivityDate="2019-12-18T18:39:27.913" Title="QEMU with SunOS 4 - how to transfer files" Tags="&lt;qemu&gt;&lt;sunos&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="4857" PostTypeId="2" ParentId="4856" CreationDate="2017-10-09T13:36:37.230" Score="8" Body="&lt;p&gt;&lt;code&gt;rlogin&lt;/code&gt; and &lt;code&gt;rcp&lt;/code&gt; are considered to be somewhat obsolete nowadays and have been replaced by &lt;code&gt;ssh&lt;/code&gt; and &lt;code&gt;scp&lt;/code&gt; respectively, the first &quot;s&quot; standing fore &quot;secure&quot;. The reason I am telling you this is that both &lt;code&gt;ssh&lt;/code&gt; and &lt;code&gt;scp&lt;/code&gt; connect to the &lt;code&gt;sshd&lt;/code&gt; server via port 22. Coincidence? I think not. Your host system does not have a true &lt;code&gt;rcp&lt;/code&gt; or &lt;code&gt;rlogin&lt;/code&gt; and has instead aliased both commands to the &lt;code&gt;ssh&lt;/code&gt; equivalent. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason it is like this is because &lt;code&gt;ssh&lt;/code&gt; long ago replaced these two commands as the preferred method for remote log in and file transfer but somebody at Ubuntu decided that it would be better to alias &lt;code&gt;rlogin&lt;/code&gt; and &lt;code&gt;rcp&lt;/code&gt; instead of doing the right thing (which is just leave them uninstalled, so you know they are properly missing).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently, Ubuntu has an &lt;code&gt;rsh-client&lt;/code&gt; package that installs the real utilities. I don't know exactly how to install a package on Ubuntu, but it's probably something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install rsh-client&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Once you have got into your SunOs guest an can upload files to it, the first thing you should do is install an &lt;code&gt;ssh&lt;/code&gt; server so you can use the &lt;code&gt;ssh&lt;/code&gt; tools properly.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-10-09T13:36:37.230" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4858" PostTypeId="2" ParentId="4846" CreationDate="2017-10-09T13:52:30.550" Score="9" Body="&lt;p&gt;Some facts about ZX Spectrum 16/48k:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Video DRAM was unable to work at Z80 frequency (3.5MHz) [i.e. making full access every clock], therefore the need to &quot;contend&quot; Z80 cycles. For the DRAM working at Z80 frequency, there would be no need to contend Z80 at all (for example, russian Pentagons did like so).&lt;/li&gt;&#xA;&lt;li&gt;ULA does have some buffering capability as it reads screen data two pixel bytes ahead (2 pixel bytes plus two attribute bytes) in a single burst.&lt;/li&gt;&#xA;&lt;li&gt;It does so every 16 pixel clocks (i.e every 8 Z80 clocks), hence the notorious 6-2 pattern in Z80 contention.&lt;/li&gt;&#xA;&lt;li&gt;ULA uses &quot;page mode&quot; to access pixel and attribute bytes, i.e. it issues single RAS-address to the DRAM and then two CAS-addresses. Without the page mode, ULA would have to stop CPU for the duration of the whole line fetch (i.e. for 128 Z80 clocks).&lt;/li&gt;&#xA;&lt;li&gt;The requirement of being able to access pixels and attributes within single CAS-page creates that famous funny layout of ZX screen.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2017-10-09T13:52:30.550" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4859" PostTypeId="2" ParentId="4855" CreationDate="2017-10-09T14:28:39.067" Score="16" Body="&lt;p&gt;It has been already done for &lt;strong&gt;ZX spectrum&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;see &lt;a href=&quot;http://velesoft.speccy.cz/data-gear.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Velesoft: DATA-GEAR&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/vz8EG.png&quot; alt=&quot;DataGear&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;It has &lt;strong&gt;DIL40&lt;/strong&gt; socket compatible pins at the bottom and it replaces &lt;strong&gt;Z80&lt;/strong&gt; (so the bus is as short as possible). According to that site The bandwidth is around:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ZX128+ is 17.3 kB(17727 bytes) / frame = 865.6 kB(886350 bytes) / second&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The higher bandwidth allows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;fast scrolls&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MultiTech&lt;/strong&gt; techniques to boost color resolution (8 pixel/attribute instead of 64 pixel/attribute)&lt;/li&gt;&#xA;&lt;li&gt;much easier doubling of screen resolution (256x384 instead of 256x192)&lt;/li&gt;&#xA;&lt;li&gt;easier and more precise border effects&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Here &lt;strong&gt;MultiTech&lt;/strong&gt; example (from my Emulator I got some timing issue with the &lt;strong&gt;DMA&lt;/strong&gt; chip somewhere so there are few artifacts that are not present on real machine)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/edExa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/edExa.png&quot; alt=&quot;multitech&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And the same image without &lt;strong&gt;MultiTech&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/385FS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/385FS.png&quot; alt=&quot;normal&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here grayscale &lt;strong&gt;MultiTech&lt;/strong&gt; output:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7Op2W.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7Op2W.png&quot; alt=&quot;grayscale multitech&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And here preview of &lt;strong&gt;DMA demo level2&lt;/strong&gt; (the choppy-ness is due to my &lt;strong&gt;RT GIF&lt;/strong&gt; encoder, the emulation itself is smooth)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OQedZ.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OQedZ.gif&quot; alt=&quot;DMA demo&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It goes smoothly even above 1000 sprites (If the magenta counter really is count of used sprites) ... without any over-clocking of standard &lt;strong&gt;48K ZXS&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2020-10-15T10:28:18.740" LastActivityDate="2020-10-15T10:28:18.740" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="4860" PostTypeId="2" ParentId="4855" CreationDate="2017-10-09T14:50:33.853" Score="15" Body="&lt;p&gt;I've been thinking about something like this myself, recently.  I wasn't planning on using a Z8410, though, but an Intel 8257-5.  This has a number of advantages:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It has 4 controller channels rather than 2&lt;/li&gt;&#xA;&lt;li&gt;It was actually a cheaper chip than the Zilog chips&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The interfacing to the Z80 wouldn't be quite as easy, but fundamentally the Z80 and the Intel 8085 that the 8257 was designed to integrate with were very similar chips, so shouldn't be too hard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why do I need 4 controller channels though?  The answer to that is that the DMA chip can perform multiple functions: it can produce the address generation logic for reading lines from a framebuffer, for reading sprites to overlay on the framebuffer, and for doing memory bulk transfers (the latter operation requires two channels, one to read and one to write) or operations for drawing into the framebuffer.  It handles taking control of the bus from the CPU and generating the signals that cause the CPU to wait if it needs to access memory (the scheme used by the 8085 and the Z80 for this look at first glance as though they are compatible, but more research will be necessary to be sure of this).  Basically, a single DMA chip can perform the same operations that are more commonly associated with a CRT controller chip, and provide useful additional functions in the same package, for a similar price.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This also lends itself to a more advanced kind of video controller: one that uses a display list.  In such a system, the processor writes a description of each scan line saying where in memory to assemble the various parts of the line from, and what formats they're in.  One DMA channel reads this description, and the second acts on it.  Display lists weren't exactly new (they were used in various Atari systems from the late 70s onwards, for example), but AFAIK there were no publicly available chips that could be used to easily implement them.  A DMA controller would probably be the easiest and cheapest option for a custom system that worked like this.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-10-09T14:50:33.853" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4861" PostTypeId="1" AcceptedAnswerId="4864" CreationDate="2017-10-09T19:13:31.560" Score="12" ViewCount="2329" Body="&lt;p&gt;I've started reading this &lt;a href=&quot;https://www.notebookcheck.net/A-look-back-at-25-years-of-ThinkPad-notebooks-Part-1-the-beginnings-with-IBM.251062.0.html&quot; rel=&quot;noreferrer&quot;&gt;article&lt;/a&gt; on the history of the ThinkPad. In it, the TrackPoint (pointing stick/&quot;nipple&quot; mouse) is heralded as an important innovation in the design of portable computers at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it doesn't mention what the alternatives were at the time; what the TrackPoint replaced. In those days where lots of PC software was still DOS-based I can imagine the alternative was no pointing device at all — but even back then, I'm pretty sure Windows was established enough that business users wouldn't have accepted that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what pointing devices were used by early laptop computers?&lt;/p&gt;&#xA;" OwnerUserId="1931" LastActivityDate="2021-02-27T06:38:26.477" Title="Which pointing devices were used by early laptop computers?" Tags="&lt;ibm-pc&gt;&lt;mouse&gt;&lt;ibm&gt;&lt;portable&gt;" AnswerCount="12" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4862" PostTypeId="2" ParentId="4861" CreationDate="2017-10-09T20:03:53.607" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Macintosh_Portable&quot; rel=&quot;nofollow noreferrer&quot;&gt;original Macintosh Portable&lt;/a&gt;, from 1989, is fairly typical in using a trackball; also in the '80s you could have had an early touchpad (e.g. on 1983's &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Gavilan_SC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gavilan SC&lt;/a&gt;) and &lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?c=1054&quot; rel=&quot;nofollow noreferrer&quot;&gt;GRID had experimented&lt;/a&gt; with a rolling bar — vertical motion was achieved by rolling, and horizontal by pushing the whole thing to the left or right.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-10-09T20:03:53.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4863" PostTypeId="1" AcceptedAnswerId="4865" CreationDate="2017-10-09T20:40:14.010" Score="5" ViewCount="492" Body="&lt;p&gt;The most common speed of the 6502 was 1 MHz, allowing the use of 2 MHz RAM chips (half the bandwidth went to the video chip to refresh the screen).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1982, the BBC Micro shipped, with double speeds across the board. That meant it needed 4 MHz RAM chips, which at the time were quite scarce and expensive. Presumably the extra cost was what discouraged other manufacturers from following suit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a figure available for exactly what the cost differential in the RAM chips was?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-10-09T21:44:15.090" Title="Cost differential between 2 and 4 MHz RAM chips in 1982" Tags="&lt;history&gt;&lt;memory&gt;&lt;bbc-micro&gt;&lt;market&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4864" PostTypeId="2" ParentId="4861" CreationDate="2017-10-09T21:21:33.127" Score="18" Body="&lt;p&gt;One alternative to the trackpoint was a trackball, either below the screen (as in the &lt;a href=&quot;http://oldcomputers.net/macportable.html&quot; rel=&quot;noreferrer&quot;&gt;Macintosh Portable&lt;/a&gt;), or next to the screen (as in the &lt;a href=&quot;http://www.pcmuseum.ca/details.asp?id=586&quot; rel=&quot;noreferrer&quot;&gt;Compaq LTE Lite&lt;/a&gt;).  When the trackball was next to the screen the mouse buttons were typically on the back (you would roll the ball with your thumb, and press the buttons on the back of the screen using index and middle fingers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before pointing devices were built into laptops, it was common for them to simply plug in externally like a desktop mouse.  The &lt;a href=&quot;https://www.microsoft.com/buxtoncollection/detail.aspx?id=224&quot; rel=&quot;noreferrer&quot;&gt;Microsoft BallPoint Mouse&lt;/a&gt; was notable at this time because it could be clamped to the side of a laptop which made it convenient when desk space was at a premium (or unavailable, such as on an airplane).&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-10-09T21:21:33.127" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4865" PostTypeId="2" ParentId="4863" CreationDate="2017-10-09T21:29:05.007" Score="5" Body="&lt;p&gt;No, they where neither rare nor expensive in 1982. Already in 1981 Apple did fit by default 250ns 4116 (usually AMD) to the Apple II+. Since the machine only needed 450ns RAMs, it's safe to assume that there wasn't any noticable price difference. I just checked several II and II+ and only one from ~1978 got 450ns RAM and another from ~1979 or 1980 got 300ns chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;120 and 150ns types where available as early as 1978. IIRC the RAM-speed development was much like with CPUs today. The slower just vanished the same time faster came up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(P.S.: wouldn't it be more apropriate if you would just draw up your design somewhere instead of posting many overlaping questions?)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-10-09T21:44:15.090" LastActivityDate="2017-10-09T21:44:15.090" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4866" PostTypeId="2" ParentId="4855" CreationDate="2017-10-09T21:37:00.730" Score="10" Body="&lt;p&gt;Pushing large chunks of bytes around is actually a task a DMA chip is very good at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point is: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Pushing partial bytes around is a task a DMA chip doesn't help sooo much, there is a lot of the job still left to the CPU. A DMA chip is not capable of shifting the bits in a byte, which was one of the main operations when handling retro computers sprite drawing and scrolling.&lt;/li&gt;&#xA;&lt;li&gt;A DMA chip cannot mask out bits on the &quot;sprite margin&quot;. It always works on byte boundaries.&lt;/li&gt;&#xA;&lt;li&gt;Pushing lots of small chunks around somewhat slows down a DMA chip (you need to constantly re-load DMA registers)&lt;/li&gt;&#xA;&lt;li&gt;A DMA chip is not built to handle overlapping source and destination memory ranges, something that is pretty common in screen handling.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;What follows is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A DMA chip is &lt;em&gt;really good&lt;/em&gt; at moving large chunks of around that have no holes in them and do not need to be shifted - In a typical home computer, however, to scroll by one pixel horizontally, you need to &lt;em&gt;shift&lt;/em&gt; the bits in the byte - the DMA chip doesn't help at all here. It would be very good at scrolling and sprite-blitting vertically and in 8-pixel-increments horizontally on a Spectrum, for example, but that would look pretty jerky.&lt;/li&gt;&#xA;&lt;li&gt;If you move rectangular (partial) areas of screen memory around, you typically have small chunks of contiguous memory to move, then a gap of a line length, then another chunk and so on - Moving sprites would require you to constantly re-load the DMA addresses once per each line of your sprite being transferred, each re-load a number of I/O transfers. Maybe a bit faster than moving with the CPU (depending on sprite size), but all in all not so much of an improvement.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Where a DMA chip would be really helpful would be in &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Saving whole screens to memory and back (no gaps, no shifts)&lt;/li&gt;&#xA;&lt;li&gt;Scrolling whole screen lines (or whole screen) up or down (no gaps, no shifts)&lt;/li&gt;&#xA;&lt;li&gt;Scrolling whole screen lines horizontally in increments of 1 bytes (on a Spectrum, that would be a jerky movement by 8 pixels only)&lt;/li&gt;&#xA;&lt;li&gt;Scrolling vertically (that always moves on byte boundaries). For vertical scrolling, you're running into the additional problem that a DMA chip cannot handle overlapping source and destination regions very well: It will always copy towards increasing addresses, so downward scrolling wouldn't work well without an additional buffer. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is a little bit limited for a blitter chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a different screen memory layout (8 bits/pixel) as in later computers, you would get rid of the shifting requirements and could really speed up graphics. But most retro home computers simply don't have that much screen memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also store your sprites bit-shifted (that means, shifted by one pixel into every possible horizontal position in memory), which would relieve you of the need to shift when moving sprites horizontally) but that would need 8 times the memory for sprites, not a very good idea for a home computer with limited memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A chip that would probably do exactly what you want/need the Z80DMA for was the &lt;em&gt;Blitter&lt;/em&gt; chip that came in the Atari STs: It had exactly the functions you'd miss in a Z80DMA chip like shifting, masking and gap-jumps plus fast memory-to-memory copying.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-10-10T07:15:18.990" LastActivityDate="2017-10-10T07:15:18.990" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="4867" PostTypeId="2" ParentId="4861" CreationDate="2017-10-09T21:43:14.427" Score="6" Body="&lt;p&gt;Trackballs in various shapes and designs - if there was a build in pointing device at all. Early laptops, from Grid and Sharp PC5000 to all the early Toshiba (T1000ff) didn't have any such device. If the OS and/or application did support one, the user was expeced to attatch an external mouse, trackball or pad (pen operated pads where already available before 1980). Some special machines (liek GridPAD) even had pen based input methods - there was even an extension for MS-DOS to accept pen input :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, GUIs didn't reach mass market before the late 1980s. Laptops have been arround for years at that time without the general need for any kind of pointer control.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2017-10-09T21:43:14.427" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4868" PostTypeId="2" ParentId="4855" CreationDate="2017-10-09T22:02:59.653" Score="7" Body="&lt;p&gt;Is it possible that you're using the here the term 'blit' as in Bit-Blit? If yes, than it's inaproptiate, as your examples are only about moving (byte) data. Moving is just one function of a bit blit engine. Beside logical operations, it also includes the handling od rectangular areas in a display wich are &lt;strong&gt;not&lt;/strong&gt; (always) a consecutive series of memory cells (read, an icon or sprite is spread out over several screen lines which are wider than the image).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A (Z80) DMA can only move consecutive chunks of memory. To move something like an icon to a screen image, you would need to configure and start the DMA for each line. Unless we talk about icons half the size of a screen, the CPU will be faster in just doing the work by itself - especially when additional logic operations (like masking) are needed. There's a reason specific blitters have been designed. Standalone or as part of graphic chipsets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A DMA as part of the graphics system only makes sense to handle the memory access and stream the video data toward the encoder. Like in two counter generating the pixel clock which is feed to the DMA-Request to fetch the according byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only DMA alike chip I know that could be used as a blitter would be the 8089 IOP which in fact was already available in 1980. But maybe a bit more expensive than a 8410. Here some screen programm could run and do many operations quite fast, and at the same time generate all data for a video stream on the fly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8089 can easy be interfaced with a Z80.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2017-10-09T22:02:59.653" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4869" PostTypeId="2" ParentId="4861" CreationDate="2017-10-09T23:28:11.800" Score="0" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Casio_PB-1000&quot; rel=&quot;nofollow noreferrer&quot;&gt;Casio PB-1000 pocket computer (1987)&lt;/a&gt; featured a touchscreen display.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-10-09T23:28:11.800" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4870" PostTypeId="2" ParentId="4861" CreationDate="2017-10-10T09:11:41.823" Score="1" Body="&lt;p&gt;My first laptop circa mid 1990's was, I think, one of these &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8Bzj2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8Bzj2.jpg&quot; alt=&quot;My first laptop&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has a very small track ball and two buttons, one on either side. I don't remember the track ball being particularly good, but at the time nipples and trackpads were unknown. Even the mice were completely mechanical.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-10-10T09:11:41.823" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4871" PostTypeId="2" ParentId="194" CreationDate="2017-10-10T14:36:10.420" Score="17" Body="&lt;p&gt;A certain freak has successfully &lt;a href=&quot;http://dmitry.gr/index.php?r=05.Projects&amp;amp;proj=07.%20Linux%20on%208bit&quot; rel=&quot;noreferrer&quot;&gt;run Ubuntu on a 8-bit microcontroller&lt;/a&gt;. From startup to the Ubuntu login window, it took him six hours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to do that, he had to write something that emulates a 32-bit CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's imaginable that you could port a modern Linux to a 70ies computer.&lt;/p&gt;&#xA;" OwnerUserId="6976" LastActivityDate="2017-10-10T14:36:10.420" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4872" PostTypeId="5" CreationDate="2017-10-10T19:25:16.200" Score="0" Body="&lt;p&gt;SunOS is a Unix-branded, BSD-based operating system first released in 1983, with the last release in 1994. SunOS ran on Motorola 680x0, Sun386i and SPARC CPU architectures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was superseded in 1992 by Sun Solaris, which was based on System V Release 4.&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="276" LastEditDate="2017-10-11T07:44:28.467" LastActivityDate="2017-10-11T07:44:28.467" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4873" PostTypeId="4" CreationDate="2017-10-10T19:25:16.200" Score="0" Body="SunOS is a Unix-branded, BSD-based operating system first released in 1983, with the last release in 1994. SunOS ran on Motorola 680x0, Sun386i and SPARC CPU architectures." OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-10-11T07:44:34.777" LastActivityDate="2017-10-11T07:44:34.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4876" PostTypeId="2" ParentId="4861" CreationDate="2017-10-11T14:02:28.453" Score="11" Body="&lt;p&gt;One uncommon pointing device was the &lt;a href=&quot;https://www.computerhope.com/jargon/j/jmouse.htm&quot; rel=&quot;noreferrer&quot;&gt;J Mouse&lt;/a&gt;. Zenith had it on some of their laptops. I remember seeing a laptop with this back in the early 90's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZllYS.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZllYS.jpg&quot; alt=&quot;J Mouse&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another uncommon pointing device was the mouse on the &lt;a href=&quot;http://www.computinghistory.org.uk/det/3405/hp-omnibook-300/&quot; rel=&quot;noreferrer&quot;&gt;HP Omnibook 300&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/E2thy.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/E2thy.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My work gave me an AST PowerExec laptop which had a trackball that clipped on the front edge. The ball was so small it constantly got gummed up with gunk so I bought an external serial trackpad for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2KgMu.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2KgMu.jpg&quot; alt=&quot;AST PowerExec trackball&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="637" LastEditorUserId="637" LastEditDate="2017-10-11T14:15:35.027" LastActivityDate="2017-10-11T14:15:35.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4877" PostTypeId="1" AcceptedAnswerId="4878" CreationDate="2017-10-11T16:03:44.433" Score="4" ViewCount="691" Body="&lt;p&gt;Quick background-- I really love old school springy/mechanical keyboards.  I haven't used one in years but it's been on my &quot;to purchase&quot; list for years to get an IBM Model-M for my work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After doing a bit of research, I might be interested in giving a Northgate Omnikey a try.  I've found a few reviews comparing the Model-M vs. the 101 and I'm about ready to buy a &quot;classic&quot; clicky-keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, after deciding to try and find a 101, I've found that 102's are easily discoverable on eBay but I can't find a 101.  This leads me to ask the question-- is the 102 the same as a 101?  My biggest hope is that at least the configurational dip switches are the same.  I'd like to try a Dvorak setup, and that was the main reason why I decided to try the Northgate over the IBM keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone has a definitive answer, I'd appreciate your advice.  I couldn't find any specifics on the differences, even on wikipedia. It seems that both devices are treated the same.&lt;/p&gt;&#xA;" OwnerUserId="1947" LastActivityDate="2017-10-11T21:36:26.577" Title="Anyone know the specific differences between a Northgate Omnikey 101 and 102?" Tags="&lt;keyboards&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4878" PostTypeId="2" ParentId="4877" CreationDate="2017-10-11T19:18:24.540" Score="8" Body="&lt;p&gt;102 Key models of any classic PC keyboards are usually the euro / foreign version with the 101 being the US model, typically with the extra key to the left of the lower half of a shortened enter key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Omnikey 102 seems to have a bit of an oddball layout though, retaining a full-sized enter key with the extra key being positioned between the right Ctrl and Alt, along with other strange layout choices.  The OmniKey 101 is a bog-standard US PC keyboard layout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TE8qV.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TE8qV.gif&quot; alt=&quot;OmniKey102&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/d0pGe.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/d0pGe.jpg&quot; alt=&quot;OmniKey101&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both 101 and 102 versions do seem to support a Dvorak configuration natively via the DIP switches.  From the manual:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;101, 102, and Inverted-T ULTRA&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;To change to a Dvorak layout: &lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;Press the Option Select button.&lt;/li&gt;&#xA;  &lt;li&gt;Press the PAUSE key. &lt;/li&gt;&#xA;  &lt;li&gt;Press the appropriate Function key for the layout you want. (Use the Function keys on the left side of your keyboard for all keyboards except the 101. Use the top row function keys for the 101.)&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;  &#xA;  &lt;p&gt;Key Layout&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;F1 Normal &quot;QWERTY&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;F2 Dvorak Standard&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;F3 Dvorak Left-hand&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;F4 Dvorak Right-hand&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Something else you might want to watch out for though if you intend to have the keycaps in the actual Dvorak layout:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For all Dvorak layouts, you must also remove all of the typewriter key caps and replace them with the optional set of Dvorak key caps. You cannot remove the original key caps and replace them in the Dvorak positions. The key caps are designed differently for different rows on the keyboard and will not fit properly in other positions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is a &lt;a href=&quot;https://deskthority.net/w/images/3/38/Northgate_OmniKey_Users_Guide_Apr92.pdf&quot; rel=&quot;noreferrer&quot;&gt;PDF copy&lt;/a&gt; of the manual on Deskthority.&lt;/p&gt;&#xA;" OwnerUserId="320" LastEditorUserId="320" LastEditDate="2017-10-11T21:36:26.577" LastActivityDate="2017-10-11T21:36:26.577" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4879" PostTypeId="2" ParentId="4861" CreationDate="2017-10-11T19:50:14.123" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;what pointing devices were used by early laptop computers?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;None at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 1.0 dates from 1985 but Windows started to become really well established around the time of Windows 3 in 1990&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a laptop I bought in 1991&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Kbck5.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Kbck5.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/LvJ2V.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LvJ2V.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This came with drivers for Windows 3.0. I think Windows 3.0 was an optional extra, the default OS was MS-DOS 5.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6RE4v.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6RE4v.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3476" LastEditorUserId="3476" LastEditDate="2017-10-11T19:56:49.210" LastActivityDate="2017-10-11T19:56:49.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4880" PostTypeId="1" AcceptedAnswerId="4887" CreationDate="2017-10-11T20:22:32.333" Score="13" ViewCount="1695" Body="&lt;p&gt;When you look at this &lt;a href=&quot;http://www.weihenstephan.org/~michaste/pagetable/6502/6502.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;block diagram&lt;/a&gt; you can see a 'Predecode Register'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Lel6s.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Lel6s.jpg&quot; alt=&quot;Block diagram of 6502&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose that the Opcode is already a 8-bit Number (D0-D7).&#xA;&lt;strong&gt;So what was the purpose of the Predecode Register. Did it really decode something?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user6734" LastEditorUserId="276" LastEditDate="2018-02-09T10:31:19.100" LastActivityDate="2018-11-02T13:27:49.587" Title="6502: What does the Predecode Register exactly do?" Tags="&lt;6502&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4881" PostTypeId="2" ParentId="4880" CreationDate="2017-10-12T08:11:12.280" Score="3" Body="&lt;p&gt;Registers by themselves don't decode anything. Instruction decoding, as is apparent from the full diagram, happens in two stages: Predecode logic; then the Decode ROM.  There must be a register before each stage to ensure that the inputs to the  circuit it feeds is stable while the signals are propagated through the logic. The Instruction Register between the Predecode logic and Decode ROM is likely wider than 8 bit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Decode ROM is marked 21x130, and 130 is written on the outgoing arrow, so it is apparently 130 bit wide, but it is unclear how deep it is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Decoding directly from 8 bit to (alleged) 130 would take either too many levels of logic, requiring to lower the clock frequency, or too large a ROM to fit on the chip. Hence the decision to split the decoding scheme into two clock cycles.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-10-12T08:11:12.280" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4882" PostTypeId="2" ParentId="4880" CreationDate="2017-10-12T08:28:44.680" Score="7" Body="&lt;p&gt;The Predecode register just holds the opcode which was fetched, as you have seen. The opcode which is about to be executed has already been loaded into the predecode buffer during the execution of the previous instruction. It does not decode anything just of itself; registers don't do anything like that. It just buffers the opcode until the time when it might be needed. The reason this value must be buffered in this way, and not sent straight into the decoding ROM is because:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;an interrupt might get serviced at this point. &lt;/li&gt;&#xA;&lt;li&gt;the previous instruction may not be done executing yet.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So what the predecode logic does is either load the opcode from the predecode register if no interrupt happened, or the byte &lt;code&gt;$00&lt;/code&gt; if an interrupt did happen. That byte is the &lt;code&gt;BRK&lt;/code&gt; opcode, which invokes the interrupt handler. (This is incidentally the reason behind the bug where a hardware interrupt &quot;swallows up&quot; a software interrupt.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That hopefully explains why the opcode has to be buffered in that predecode register before it may be executed.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2017-10-12T10:21:11.010" LastActivityDate="2017-10-12T10:21:11.010" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4883" PostTypeId="1" AcceptedAnswerId="4889" CreationDate="2017-10-12T08:58:45.503" Score="16" ViewCount="1720" Body="&lt;p&gt;When you are getting &lt;code&gt;INPUT&lt;/code&gt; in Commodore BASIC it always adds a question mark at the end of the string you want to show.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is there a way to suppress the question mark when using the &lt;code&gt;INPUT&lt;/code&gt; command?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user6734" LastEditorUserId="6794" LastEditDate="2017-10-13T18:31:33.763" LastActivityDate="2020-05-07T23:08:56.440" Title="C64 BASIC: How to suppress the '?' sign when using the INPUT command?" Tags="&lt;commodore-64&gt;&lt;basic&gt;" AnswerCount="6" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4884" PostTypeId="2" ParentId="4880" CreationDate="2017-10-12T10:10:25.763" Score="4" Body="&lt;p&gt;If you look at the &lt;a href=&quot;http://visual6502.org/JSSim/expert.html&quot; rel=&quot;noreferrer&quot;&gt;Visual6502 simulation&lt;/a&gt; in advanced mode, you can see the predecoder latch and predecoder logic on the very right side near the top, diagonally below the decoder ROM that stands out with its regular pattern at the top. The Visual6502 &lt;a href=&quot;https://github.com/trebonian/visual6502/blob/master/nodenames.js&quot; rel=&quot;noreferrer&quot;&gt;signal names&lt;/a&gt; contain the lines &lt;code&gt;pd0&lt;/code&gt; to &lt;code&gt;pd7&lt;/code&gt;, associated &lt;code&gt;pd*.clearIR&lt;/code&gt; clear lines, and also the predecoder output lines&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// internal signals: predecode latch partial decodes&#xA;&quot;PD-xxxx10x0&quot;: 1019,&#xA;&quot;PD-1xx000x0&quot;: 1294,&#xA;&quot;PD-0xx0xx0x&quot;: 365,&#xA;&quot;PD-xxx010x1&quot;: 302,&#xA;&quot;PD-n-0xx0xx0x&quot;: 125,&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So the predecoder &lt;strong&gt;does really decode something&lt;/strong&gt;. I haven't looked at where those lines go, and why they are needed (possibly because otherwise timing wouldn't work, as getting those signals from the final decoding ROM would be too late in the cycle), but with a bit of time investment into the netlist and the Visual6502 representation it should be possible to find that out.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-10-12T10:10:25.763" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4885" PostTypeId="2" ParentId="4883" CreationDate="2017-10-12T11:06:59.490" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there a way to suppress the question mark when using the INPUT command?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. There are also other problems with using &lt;code&gt;INPUT&lt;/code&gt; to get keyboard input. The Commodore PET had a problem where just typing &lt;code&gt;Return&lt;/code&gt; would stop the program which probably also exists on the C64. You might be better using the &lt;code&gt;GET&lt;/code&gt; command.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-10-12T11:06:59.490" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4886" PostTypeId="2" ParentId="4883" CreationDate="2017-10-12T15:33:29.417" Score="6" Body="&lt;p&gt;Back in the day I wrote my own input code using GET. Over time I enhanced it to support various features. You start out with GET A$. Here is a simple one I just threw together:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 NA$=&quot;&quot;:PR$=&quot;Name:&quot;&#xA;20 GOSUB 50000&#xA;30 PRINT&quot;Your name is &quot;;NA$&#xA;40 END&#xA;&#xA;50000 PRINT PR$;&#xA;50010 GET A$:IF A$=&quot;&quot; THEN 50010&#xA;50020 IF A$=CHR$(13) THEN PRINT:RETURN&#xA;50030 IF A$&amp;lt;&amp;gt;CHR$(20) THEN 50050&#xA;50040 IF LEN(A$)&amp;gt;0 THEN NA$=LEFT$(NA$,LEN(NA$)-1):? CHR$(157);&quot; &quot;;CHR$(157);&#xA;50050 IF A$&amp;gt;=&quot;a&quot; AND A$&amp;lt;=&quot;z&quot; THEN 50090&#xA;50060 IF A$&amp;gt;=&quot;A&quot; AND A$&amp;lt;=&quot;Z&quot; THEN 50090&#xA;50070 IF A$=&quot; &quot; THEN 50090&#xA;50080 GOTO 50010&#xA;50090 NA$=NA$+A$:PRINT A$;:GOTO 50010&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;BITD I had a blinking cursor implemented.&lt;/p&gt;&#xA;" OwnerUserId="637" LastEditorUserId="637" LastEditDate="2020-05-07T23:08:56.440" LastActivityDate="2020-05-07T23:08:56.440" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="4887" PostTypeId="2" ParentId="4880" CreationDate="2017-10-12T18:15:30.683" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I suppose that the Opcode is already a 8-bit Number (D0-D7).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, like any other data byte.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So what was the purpose of the Predecode Register.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Predecode register is loaded with each (read) bus cycle. Effectively being a duplicate of the data latch (DL). In a general way it's the much cited 6502 pipeline, as it loads the byte fetched, during the last cycle of an instruction (usually the one doing the work). Here it gets stored for one cycle to be fed into the instruction register at the beginning of the next cycle.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did it really decode something?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. That's what the Predecode Logic (to the left) is good for. Also that decoding is limited to detecting single byte instructions with the purpose to stop the PC from incrementing during the first cycle of a one byte instruction (that is why the opcode of the next instruction gets fetched twice). It detects all x8 and xA opcodes plus whatever irregularities exist (&lt;code&gt;RTI&lt;/code&gt;, &lt;code&gt;RTS&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So basically PD and Predecode Logic are pipeline and pipeline/fetch control of the 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, the Predecode Logic is where the pseudo &lt;code&gt;BRK&lt;/code&gt; gets 'injected' to handle an interrupt. Not a real 'injection' of a full byte, as it's done via the clear input of the IR.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Edit: If I understood it correctly, according to this forum post, the Predecode Register isn't really a register but a latch which stores only 1 Bit at a time and passes it to the Predecode Logic.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Looking at that post, I can't really find any claim about something serial. It basically describes the same as here.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-11-02T13:27:49.587" LastActivityDate="2018-11-02T13:27:49.587" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="4888" PostTypeId="2" ParentId="4861" CreationDate="2017-10-13T01:00:51.470" Score="0" Body="&lt;p&gt;The Apple IIc included a game controller port, and several games (Raster Blaster, Music Construction kit, etc.) used game controllers (analog joysticks and resistive touchpads) as pointing devices.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2017-10-13T01:00:51.470" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4889" PostTypeId="2" ParentId="4883" CreationDate="2017-10-13T06:38:38.067" Score="32" Body="&lt;p&gt;&lt;strong&gt;Use the &lt;code&gt;INPUT#&lt;/code&gt; command.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;INPUT#&lt;/code&gt; command is meant for non-interactive I/O on files or devices, i.e. reading from a file on disk, serial port, whatever. Because it is non-interactive, it will not display a prompt anywhere. The keyboard can be opened like any other I/O device, it has device number 0. Knowing that, the implementation is straightforward.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 OPEN 1,0:REM OPEN DEVICE 0 AS FILE #1&#xA;20 PRINT&quot;TYPE SOME TEXT:&quot;;&#xA;30 INPUT#1,A$&#xA;40 PRINT&quot;YOU TYPED:&quot;;A$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lSCIn.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lSCIn.png&quot; alt=&quot;INPUT#&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="348" LastActivityDate="2017-10-13T06:38:38.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4890" PostTypeId="2" ParentId="4861" CreationDate="2017-10-13T14:34:07.660" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Outbound_laptop&quot; rel=&quot;nofollow noreferrer&quot;&gt;Outbound&lt;/a&gt; was a Mac clone in a laptop form factor. It used a unique pointing device consisting of a small rolling cylinder that controlled the up-and-down motion and could be forced sideways against springs on either side to provide side-to-side motion. It was in some ways a combination of a one-axis trackball and a one-axis TrackPoint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am on a Lenovo machine as I type this. It has a TrackPoint. I hated it so much I pulled the little rubber bit off it so I wouldn't keep hitting it while trying to type H (or less, G). Unfortunately, as is common in the PC world, the presence of two of anything seems like an excuse to not fix problems and simply tell people to use the other one - in this case, the trackpad is utterly rubbish as well.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2017-10-13T14:34:07.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4891" PostTypeId="2" ParentId="194" CreationDate="2017-10-14T06:36:45.393" Score="10" Body="&lt;p&gt;I have a 1991 Sun Ultra 1 from 1991 which can run the very latest Linux kernel (I do so under the Gentoo distribution).  As old computers go, though, it is quite modern, with a 64-bit CPU, and I've equipped it with a full gigabyte of RAM, which was almost unheard of in that era.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2017-10-14T06:36:45.393" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4892" PostTypeId="2" ParentId="4845" CreationDate="2017-10-14T06:46:30.327" Score="8" Body="&lt;p&gt;Here is how you do it in Commodore BASIC:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 IF A=0 THEN PRINT &quot;LOADING, PLEASE WAIT...&quot;&#xA;20 IF A=0 THEN A=1:LOAD&quot;LIB&quot;,8,1&#xA;30 REM &quot;IF A=1&quot; IS TEMPTING HERE BUT IS UNNECESSARY, SINCE A MUST NOT EQUAL ZERO BY NOW&#xA;40 SYS 49152:REM ASSUMING &quot;LIB&quot; IS AT $C000; AMEND AS REQUIRED TO RUN &quot;LIB&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Commodore BASIC always re-runs a program when you LOAD within it, but variables are kept intact.  This code takes advantage of that by incrementing a variable so that the code can tell if the LOAD has happened yet or not.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastEditorUserId="2126" LastEditDate="2017-10-15T00:24:43.750" LastActivityDate="2017-10-15T00:24:43.750" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4893" PostTypeId="2" ParentId="1507" CreationDate="2017-10-15T15:18:19.783" Score="3" Body="&lt;p&gt;Your best bet to rescue this data, in my opinion, will be to use the Linux operating system.  It supports older hardware extremely well compared to most operating systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know what you are doing, you can install Linux on a Windows system and select which operating system to use at boot, and there are also live DVDs (which can also be installed on flash drives) which you can use to boot a temporary Linux system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once in Linux, you'll read the data and move it to another device - for example, a USB flash drive (separate from the boot flash drive if you used one to boot Linux) - and then read that device when you boot back into Windows.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2017-10-15T15:18:19.783" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4894" PostTypeId="1" AcceptedAnswerId="4951" CreationDate="2017-10-15T20:31:26.050" Score="11" ViewCount="1257" Body="&lt;p&gt;First, let me say I understand that 'recommendation style' questions can be very subjective, but I believe there is enough value in a few good beginner resource pointers that others could benefit from any answers generated by my question.  That said,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for a recommendation for a straightforward Disk/Sector editor for the Commodore 64 with a 1541 disk drive.  I've found some utilities for windows and other operating systems that will allow examination of D64 images but I'm looking for something running on the C64 itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to use this inside VICE and on actual hardware to inspect both physical disks and some disk images I converted last year.  I want to walk from the directory to the start of a given file, examine the leading bytes of the file (which should indicate the memory load address for the file contents) and walk the chain of blocks/sectors that comprise the file contents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've gotten rusty with old age, and while I remember spending many long nights in front of Supermon64, I can't for the life of me remember what my go-to solution was for examining disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As always, any input is greatly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="11916" LastEditDate="2019-04-27T06:15:16.333" LastActivityDate="2019-04-27T06:15:16.333" Title="Looking for an easy to use Commodore 64 disk/sector editor" Tags="&lt;commodore-64&gt;&lt;floppy-disk&gt;&lt;software-recommendation&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4896" PostTypeId="1" AcceptedAnswerId="4900" CreationDate="2017-10-17T09:45:53.200" Score="37" ViewCount="6118" Body="&lt;p&gt;On this picture below you can see that the Atari 2600 graphics are rather colourful, and some games like &lt;em&gt;Pitfall!&lt;/em&gt; I think use the many shades of each colour and have rather good graphics for the 2600. I have seen a video of that game on youtube and it must have been NTSC or possibly PAL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is kind of twofold. Why is the SECAM palette so garish and ridiculous, and why are there only 8 colours? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OV2qY.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OV2qY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2017-10-18T19:16:15.517" Title="What's with the Atari 2600 colors on SECAM?" Tags="&lt;atari-2600&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4897" PostTypeId="2" ParentId="2215" CreationDate="2017-10-17T11:16:37.770" Score="6" Body="&lt;p&gt;Besides TEMLIB's excellent answer relating to the physical characteristics of the TV, it's also worth pointing out the effects of the video input itself as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For analogue video input, the picture is encoded as a continuously varying value, in the form of a wave. The higher the horizontal resolution you want, the more detailed the variations in this value need to be, so the higher bandwidth you need to use, for various mathematical reasons. So the horizontal resolution is based on the chosen bandwidth - since there's only so much useful electromagnetic spectrum, this of course is a compromise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But for vertical resolution, the story is different. An analogue TV signal is encoded with a specified number of lines (there are generally only a small number of choices that a TV will support; but a CRT designed as a computer monitor might well support more), with a special signal at the start of each line so the TV knows to switch the beam off and move it back to the start of the next line. This is further complicated by some of these scanlines being invisible, due to them being in parts of the screen where the distortion from the convex CRT would be too great, or due to the TV needing time to move the beam back to the top left to start the next frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But besides these issues, the vertical resolution is well-defined, whereas the horizontal resolution is not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, if you connect a digital computer to an analogue TV, there will certainly be a defined resolution at the stage when the digital picture is converted into an analogue signal for output. And many old computers do indeed use pixels that end up being rectangular when displayed on the screen.&lt;/p&gt;&#xA;" OwnerUserId="1931" LastActivityDate="2017-10-17T11:16:37.770" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4898" PostTypeId="2" ParentId="4896" CreationDate="2017-10-17T11:48:16.313" Score="19" Body="&lt;p&gt;NTSC, PAL and SÉCAM are all colour-carrying signals based on existing monochrome transmission signals. This means that colour information has to be added to the existing monochrome signal, without disturbing it (or as little as possible). The missing information is represented as red and blue differentials with regard to the luminance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NTSC and PAL carry all the colour information in every line, for every pixel. This results in a certain amount of artifacting, especially in NTSC (PAL avoids this to a large extent by halving the vertical colour resolution).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/SECAM&quot; rel=&quot;noreferrer&quot;&gt;SÉCAM&lt;/a&gt; however only carries one of the two pieces of information in every line: alternating lines provide red and blue signals, and the missing information is taken from the previous line, using a delay line (hence the name “SÉCAM”: “&lt;em&gt;Séquentiel Couleur À Mémoire&lt;/em&gt;”, or “Sequential colour with memory”). This is troublesome for the 2600’s TIA since the latter can change its colour output on every line, and doesn’t have a framebuffer (or even enough memory to store the previous line and re-use the colour information).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplest fix for SÉCAM, which was the last market to be addressed by the 2600, was to make the luminance constant, which allows chrominance to be calculated — Atari had to choose between colour and saturation, and chose colour. Afficionados of black-and-white TVs would disagree, but imagine trying to sell a black-and-white gaming system in the early eighties...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The use of seven bits out of eight corresponds to the definition of the colour palette in the TIA (see &lt;a href=&quot;https://web.archive.org/web/20060924094927/http://www.howell1964.freeserve.co.uk/Atari/tia/addressdetails.htm&quot; rel=&quot;noreferrer&quot;&gt;COLUP0 here&lt;/a&gt;): four bits determine the colour (on NTSC, none, gold, orange, red-orange, pink, purple, purple-blue, blue — twice —, light blue, turquoise, green-blue, green, yellow-green, orange-green, light orange), and three bits the luminance.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-10-17T11:54:55.457" LastActivityDate="2017-10-17T11:54:55.457" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4899" PostTypeId="2" ParentId="4896" CreationDate="2017-10-17T13:23:22.570" Score="13" Body="&lt;p&gt;There is an explanation listed in the &lt;a href=&quot;http://www.atarimania.com/faq-atari-400-800-xl-xe-what-are-the-sally-antic-ctia-gtia-pokey-and-freddie-chips_13.html&quot; rel=&quot;noreferrer&quot;&gt;Atari Mania FAQ&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Jerry Jessop explains why French Ataris produce fewer colors:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;I will tell you why it only has monochrome out, because it's SECAM and a&#xA;    SECAM GTIA was never produced. The PAL GTIA is used in France and the Lum&#xA;    outputs are run into an onboard encoder to produce a &quot;psudo&quot; color depending&#xA;    on the Luminance output, composite only. This is why a SECAM VCS or 800 has&#xA;    nowhere near the same number of colors (16) availible as a PAL or NTSC unit&#xA;    (256).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The FGTIA was never completed as the market size did not warrant the&#xA;    expense.  The largest SECAM market is not France but the Soviet Union&#xA;    (former) and in 80-84 sales of these items there were not possible.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The GTIA is the (by today's standards, very simple) video chip used by the Atari 2600, of which there are PAL and NTSC versions. This explanation sounds like they decided it wasn't worth the expense to make a third, SECAM, version, solely for the French and Soviet markets, so they decided instead to use the PAL chip (which, unlike the NTSC chip, would output video that was compatible with SECAM TVs for black and white pictures) and added some external, crude electronics to convert the different possible luminance output values of this chip into different colours (it was much easier to make electronics to look at the luminance values than the chrominance ones, since the latter would effectively involve decoding PAL).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the chip (being crude) only looked at the luminance values, and there were only 8 luminance values output by the PAL chip, this meant there could only be 8 colours. Therefore, as Stephen Kitt rightly said in his answer, they decided to sacrifice the ability to display different luminances at all for the SECAM output, and locked the luminance on maximum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect ignoring the complexities of SECAM and outputting just the colours was reasonably trivial as long as you were willing to put up with artefacts on colour transition, which they presumably were. It'd be nice if someone who actually used a SECAM Atari 2600 could verify that this was the case, and how visible these artefacts were.&lt;/p&gt;&#xA;" OwnerUserId="1931" LastActivityDate="2017-10-17T13:23:22.570" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4900" PostTypeId="2" ParentId="4896" CreationDate="2017-10-17T13:41:11.223" Score="33" Body="&lt;p&gt;The TIA manages a very large palette on NTSC and PAL systems because it takes advantage of the way that composite colour is encoded: three bits produce luminance, and the colour subcarrier is always exactly the same sinusoid, but four of the other colour bits set its phase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for both NTSC and PAL:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;three bits set the amplitude of one signal;&lt;/li&gt;&#xA;&lt;li&gt;four bits set the delay of another signal; and&lt;/li&gt;&#xA;&lt;li&gt;the two things are summed for output.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To verify this, look at an NTSC colour wheel, and look at which angle each of the Atari's NTSC colours appears. They're just steps around the outside of the colour wheel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even PAL suffers a little from the NTSC-first logic; it has 12 hues instead of 15 because the NTSC subcarrier is approximately 12/15ths the frequency of PAL's, and the delay steps are NTSC oriented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SECAM doesn't work in the same way. Performing a phase shift doesn't actually make any difference — the colour subcarrier is a single channel in frequency modulation, not two channels in quadrature amplitude modulation. Nothing about a SECAM output is determined by phase. The colour-shifts that result from phase errors is exactly what SECAM sought to fix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So more complicated electronics are required, and the elegant hack of just doing a phase shift isn't available. More logic is required, and Atari did what it was cost effective to do, which is to implement a palette much like the other RGB-oriented machines of the era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In short:&lt;/strong&gt; the Atari's disproportionately-good palette on NTSC and PAL systems is because Atari exploited the way QAM composite encodes colour. SECAM does not use QAM. Therefore a much more basic palette, closer to other machines of the era, was implemented.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-10-18T19:16:15.517" LastActivityDate="2017-10-18T19:16:15.517" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4901" PostTypeId="1" CreationDate="2017-10-17T13:50:45.767" Score="18" ViewCount="3906" Body="&lt;p&gt;In modern operating systems (for example: Windows), you can't access a memory location before you allocate that memory location to your program (or else a segmentation fault will occur).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am wondering, do you need to also allocate memory before you use it in MS-DOS?&lt;/p&gt;&#xA;" OwnerUserId="6989" LastActivityDate="2021-01-18T08:57:23.400" Title="Do you need to allocate memory before you use it in MS-DOS?" Tags="&lt;programming&gt;&lt;ms-dos&gt;&lt;memory&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4902" PostTypeId="2" ParentId="4901" CreationDate="2017-10-17T14:04:15.357" Score="31" Body="&lt;p&gt;The basic answer is “yes”, assuming you want to be a good DOS citizen, however in many cases you don’t need to worry about it because the operating system takes care of it for you.&lt;/p&gt;&#xA;&lt;p&gt;If you’re talking about conventional memory, allocating it explicitly isn’t necessary:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;EXE files’ headers specify the minimum and maximum amount of memory the program needs, and DOS pre-allocates that (if it can) for the program before passing control to it (by default, the maximum is “all available memory”);&lt;/li&gt;&#xA;&lt;li&gt;COM files don’t have a header, so DOS pre-allocates the largest available block of conventional memory for the program’s use.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;DOS does provide APIs to allocate memory blocks, resize them and free them: respectively, &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/dos_kernel/2148.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;interrupt 0x21, function 0x48&lt;/a&gt;, &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/dos_kernel/214a.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;interrupt 0x21, function 0x4A&lt;/a&gt; and &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/dos_kernel/2149.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;interrupt 0x21, function 0x49&lt;/a&gt;. &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/dos_kernel/2158.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Function 0x58&lt;/a&gt; affects how memory is allocated, including whether UMBs are considered (in MS-DOS 5 and later, and compatible implementations).&lt;/p&gt;&#xA;&lt;p&gt;Some programs need to allocate memory separately, and therefore use these functions. One example is TSRs, since they need to reduce their pre-allocated block as much as possible and perhaps allocate other memory blocks, in order for them to remain allocated after they return control to the operating system but use as little as possible. It can also be useful to allocate memory if you want to use all the available memory: memory fragmentation might mean you wouldn’t get all the available memory in your pre-allocation.&lt;/p&gt;&#xA;&lt;p&gt;You’d need to explicitly manage memory allocations if you wanted to use anything outside conventional memory: upper memory blocks, the HMA, EMS, XMS or plain extended memory.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-01-18T08:57:23.400" LastActivityDate="2021-01-18T08:57:23.400" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="4903" PostTypeId="2" ParentId="4901" CreationDate="2017-10-17T14:27:18.263" Score="19" Body="&lt;p&gt;For the sake of offering a contrary answer: there is no memory protection and there are no access levels, so there will be no segmentation fault or other hardware interrupt if you access memory that is there and which you have not asked for ownership of. If you are an MS-DOS program then you are driving the computer. Various of the interrupts will be set up to route through DOS when your program starts, but there is no access control to prevent you from disabling or rerouting every single one of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you don't need to request ownership of memory provided that:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you happen somehow to know exactly what memory exists; and&lt;/li&gt;&#xA;&lt;li&gt;you happen also to know exactly how that memory is being used by the various TSRs and drivers the user has loaded.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In practice you probably don't know those things. So instead of your code being declared faulty and evicted without harming the system as it would under a modern OS, you'll probably continue to run until you've broken some other part of the system and that part tries to run. E.g. maybe the user has a Gravis Ultrasound emulating a Sound Blaster, or is using MSCDEX plus their particular CD driver, or has their manufacturer's VESA driver occupying a certain block of memory, you stomp on that storage, then attempt to output audio, read from the CD or change the graphics mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that as to your question, the answer is therefore both yes and no. You don't need to allocate memory to be able to use it, but if you don't then you accept the risk of causing some other part of the system to crash or otherwise misbehave.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's up to you though.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-10-17T14:27:18.263" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4904" PostTypeId="2" ParentId="4896" CreationDate="2017-10-18T13:38:19.420" Score="3" Body="&lt;p&gt;Regarding the &quot;only 8 colours&quot; point, these are the standard colours available with RGB controls when the only choices are to turn the red, green and blue channels either on or off.  Running through the truth table for the options available:-&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;red off, green off, blue off: black&lt;/li&gt;&#xA;&lt;li&gt;red off, green off, blue on: blue&lt;/li&gt;&#xA;&lt;li&gt;red on, green off, blue off: red&lt;/li&gt;&#xA;&lt;li&gt;red on, green off, blue on: magenta&lt;/li&gt;&#xA;&lt;li&gt;red off, green on, blue off: green&lt;/li&gt;&#xA;&lt;li&gt;red off, green on, blue on: cyan&lt;/li&gt;&#xA;&lt;li&gt;red on, green on, blue off: yellow&lt;/li&gt;&#xA;&lt;li&gt;red on, green on, blue on: white&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6749" LastActivityDate="2017-10-18T13:38:19.420" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4905" PostTypeId="1" AcceptedAnswerId="4953" CreationDate="2017-10-18T14:14:01.073" Score="5" ViewCount="382" Body="&lt;p&gt;Elektronika in the Soviet Union created a series of &lt;a href=&quot;http://www.mobygames.com/game-group/elektronika-standalone-handheld-series&quot; rel=&quot;nofollow noreferrer&quot;&gt;handheld games&lt;/a&gt; in the 80s (&lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%9D%D1%83,_%D0%BF%D0%BE%D0%B3%D0%BE%D0%B4%D0%B8!_(%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D0%B8%D0%B3%D1%80%D0%B0)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Электроника ИМ&lt;/a&gt;) similar to the Nintendo's Game &amp;amp; Watch. How were the electronics in these games designed, especially &lt;a href=&quot;http://www.mobygames.com/game/elektronika-im-19-biathlon&quot; rel=&quot;nofollow noreferrer&quot;&gt;Электроника ИМ 19 Биатлон/biathalon&lt;/a&gt; which is not a 100% clone of Nintendo? Given the hardcoded nature of the original Nintendo games, how would the cloned copies add different functionality?&lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="175" LastEditDate="2017-10-31T15:20:01.307" LastActivityDate="2017-10-31T15:20:01.307" Title="How were the electronics in the Elektronika IM (Электроника ИМ) designed?" Tags="&lt;hardware&gt;&lt;game-and-watch&gt;&lt;handheld&gt;&lt;ussr&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4906" PostTypeId="2" ParentId="4901" CreationDate="2017-10-18T16:05:31.340" Score="3" Body="&lt;p&gt;Technically, no. You DO NOT absolutely have to allocate memory before you use it in MS-DOS (for versions prior to the DOS that was included in OS/2 or the one in Windows 3.0). But note also that the ability to access any memory space (or not) in a machine is also determined by the hardware architecture (i.e., 8088, 8086, 80286, 80386, etc.) Now, to focus solely on the responsibility of the operating system (OS) here, &lt;a href=&quot;http://www.drdobbs.com/architecture-and-design/mapping-dos-memory-allocation/184408026&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robert J. Moore wrote in a November 01, 1988 article on Dr. Dobbs&lt;/a&gt; that, &quot;Starting with Version 2.0, all versions of DOS contain functions to allocate memory (function 48H), free allocated memory (function 49H), and modify allocated memory (function 4AH),&quot; via the use of Memory Control Blocks (MCBs). &quot;If DOS detects any corruption in the MCB chain, it prints out an error message and halts the system.&quot; However, it is possible to, &quot;break the MCB chain deliberately . . . DOS doesn't always notice.&quot; In fact, &quot;DOS could be bypassed altogether for memory management,&quot; said Mr. Moore. Simply put, that's because BOTH the OS and the hardware allows it. Per the book, Intel Microprocessors: 8086/8088 - 8th Edition (&lt;a href=&quot;https://books.google.com/books?id=KL09KAZM60EC&amp;amp;pg=PT38&amp;amp;lpg=PT38&amp;amp;dq=memory%20protection%208088%208086&amp;amp;source=bl&amp;amp;ots=RKersdf9Sw&amp;amp;sig=4Ten-nzPpOxJ0zcTJBnXXo7CKxI&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=0ahUKEwjnhPOorfrWAhWO3oMKHT-qCFwQ6AEIVTAI#v=onepage&amp;amp;q=memory%20protection%208088%208086&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;available on Google Books&lt;/a&gt;), &quot;Real mode, is an operating mode of 80286 and later x86-compatible CPUs. . . Real mode provides no support for memory protection, multitasking, or code privilege levels. 80186 CPUs and earlier, back to the original 8086, have only one operational mode, which is equivalent to real mode in later chips.&quot; Now, protected mode, as opposed to real mode, first available on the 80286, could allow your DOS programs to come under protected mode memory management--but that can happen &lt;em&gt;only&lt;/em&gt; if you've installed OS/2 or Windows 3.0 (which are the first operating systems to implement versions of DOS capable of DPMI--the protected mode specification) which would allow your DOS programs to run in protected mode on 80286 series and later processors. Only then would you actually need to allocate memory before using it in your DOS programs.&lt;/p&gt;&#xA;" OwnerUserId="6932" LastActivityDate="2017-10-18T16:05:31.340" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4907" PostTypeId="2" ParentId="249" CreationDate="2017-10-18T20:38:01.067" Score="13" Body="&lt;p&gt;The serial number, as far as I've figured it out is as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AAA BB CC DDDDDD EE FF GGGGG&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;AAA is the factory location as mentioned above. In addition, 200 seems to indicate Japan, as seen on a Chinon floppy drive.&lt;/li&gt;&#xA;&lt;li&gt;BB is the week. CC is&#xA;the year.&lt;/li&gt;&#xA;&lt;li&gt;DDDDDD represents the product number.&lt;/li&gt;&#xA;&lt;li&gt;EE is somehat of a&#xA;mystery to me and is usually a reasonably low number.&lt;/li&gt;&#xA;&lt;li&gt;FF usually&#xA;indicates hard drive size in megabytes or sometimes half of it (&quot;60&quot;&#xA;has been seen on a 120 MB A4000). On CD32 units, this column is 10.&lt;/li&gt;&#xA;&lt;li&gt;GGGGG is the actual serial number of the machine/device.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are some other numbers similar to these. PCB labels start with 010 or 011 and seem to have the same week/year and other columns, but I haven't figured out what those represent in these numbers. Possibly the DDDDDD column also represents a product number here, which seems to match the ones on the case serial numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then we also have what I believe are service stickers starting with 051 and 052. Here, the product numbers seem to differ from the ones on the case or PCB stickers. Possibly, the DDDDDD column here represents the task being performed and the GGGGG column represents an employee number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least, this is the result of guesswork and collection/analysis of around 60 serial numbers over the past three years. It's not official information.&lt;/p&gt;&#xA;" OwnerUserId="7000" LastEditorUserId="7000" LastEditDate="2017-10-18T20:48:14.870" LastActivityDate="2017-10-18T20:48:14.870" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4908" PostTypeId="1" AcceptedAnswerId="6265" CreationDate="2017-10-18T22:26:12.363" Score="24" ViewCount="1806" Body="&lt;p&gt;When loading a game from the tape drive on a C64, if you wiggle the joystick around too much the program will not load correctly.  Is there an explanation for this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Perhaps someone can try to reproduce this on their C64 and see if it's just me.&lt;/p&gt;&#xA;" OwnerUserId="7001" LastEditorUserId="7001" LastEditDate="2017-10-19T21:53:17.840" LastActivityDate="2018-11-29T20:12:22.817" Title="Why does waggling the joystick of a C64 cause errors loading from tape?" Tags="&lt;hardware&gt;&lt;commodore-64&gt;&lt;cassette-tape&gt;&lt;joystick&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4909" PostTypeId="2" ParentId="4908" CreationDate="2017-10-19T08:04:10.147" Score="-3" Body="&lt;p&gt;Interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not a problem that is unique to the C64 but could be seen on many machines of the era.  There is one CPU handling interrupts from various peripherals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the joystick is moved, or buttons pressed, it will generate an interrupt.  When the tape drive is being read, that too may generate interrupts - probably from a timer device to read at set intervals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there are too many interrupts to handle, even if nothing is done with them, the CPU may miss a byte or two of input from the tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used to encounter this all the time on processors from a number of manufacturers.  It doesn't just affect tape drives, it was very common when reading from serial ports or modems which interrupted the CPU on every byte read.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2017-10-19T08:04:10.147" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="4910" PostTypeId="2" ParentId="605" CreationDate="2017-10-19T13:27:51.020" Score="3" Body="&lt;p&gt;This might help a bunch: I've posted a very detailed guide on how to create (from source) an Amiga OS 4.x / PowerPC &quot;adtools&quot; cross-compiling gcc/g++ 5.4.x toolchain; hosted inside either a Cygwin32/Cygwin64 environment or inside a Bash-on-Ubuntu-on-Windows/Windows Subsystem for Linux environment on Windows 10.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That guide is found here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.amigans.net/modules/xforum/viewtopic.php?forum=25&amp;amp;topic_id=7623&amp;amp;order=&quot; rel=&quot;nofollow noreferrer&quot;&gt;How-To Create a Cygwin/Bash-on-Ubuntu-on-Windows adtools (cyg-adtools/uwin-adtools) Cross-Compiling Amiga OS4.x Toolchain on Windows 10&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also posted another step-by-step guide on how to use that cyg-adtools/uwin-adtools toolchain with MS Visual Studio 2017. That second guide is found here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.amigans.net/modules/xforum/viewtopic.php?forum=25&amp;amp;topic_id=7639&amp;amp;order=&quot; rel=&quot;nofollow noreferrer&quot;&gt;Using Visual Studio 2017 with a Cygwin-Based Cross-Compiling Amiga OS 4.x adtools Toolchain on Windows 10&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I note both those guides here, because they're brand new instructions published in October of 2017, showing how to build the official &quot;adtools&quot; toolchain for OS4.x, and I &lt;em&gt;think&lt;/em&gt; they'll work with only minor changes for the OS3.x toolchain as well -- I've simply not tried, though.&lt;/p&gt;&#xA;" OwnerUserId="7002" LastActivityDate="2017-10-19T13:27:51.020" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4911" PostTypeId="2" ParentId="4894" CreationDate="2017-10-19T20:19:59.203" Score="6" Body="&lt;p&gt;The Epyx Fast Load Cartridge did much more than just increase the speed of data between a 1541 disk drive and a Commodore 64. Features included a Machine Language Monitor and Disk Tools. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Disk Tools, accessed by pressing the British Pound Sterling symbol (£) at the READY prompt allowed the following features: Directory, Copy Disk, Disable Fastload, Edit Diskette, and File Tools (Directory,Copy,Delete,Lock,Unlock,Rename)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: there is some controversy about the mention of the British Pound Symbol: In the manual for the Epyx Fast Load and on the Commodore 64 Keyboard, the symbol is described as the British Pound Symbol and is signified by the symbol # in transcripted versions of the manual, since having to type ALT-0163 may not have occurred to the transcribers. Found a scan of the original manual here, thanks to retro-commodore.eu which has the correct original symbol:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.retro-commodore.eu/download.php?file=Epyx_Fast_Load_Cartridge_Instruction_Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.retro-commodore.eu/download.php?file=Epyx_Fast_Load_Cartridge_Instruction_Manual.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Disk Editor may be a tool useful to you - I never used it since I was mainly interested in games, but the Fast Load cartridge is ubiquitous and commonly available. Not sure how to mount one in VICE. You can easily obtain a FastLoad manual with a cursory google search. &lt;/p&gt;&#xA;" OwnerUserId="3751" LastEditorUserId="3751" LastEditDate="2017-12-12T15:38:37.870" LastActivityDate="2017-12-12T15:38:37.870" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4912" PostTypeId="1" AcceptedAnswerId="4913" CreationDate="2017-10-20T06:33:16.167" Score="2" ViewCount="384" Body="&lt;p&gt;I just bought a Macintosh Centris 610 and I'm trying to do some C programming on it. But I can't find the terminal and someone told me there isn't a terminal on classic MacOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to have a terminal with a c compiler and vi, and run programs in the terminal. Can you help me get there?&lt;/p&gt;&#xA;" OwnerDisplayName="user7008" LastEditorDisplayName="user7008" LastEditDate="2017-10-20T18:02:54.320" LastActivityDate="2017-10-21T00:51:27.830" Title="Programming on Macintosh Centris 610" Tags="&lt;apple-macintosh&gt;&lt;mac-os-classic&gt;&lt;terminal&gt;" AnswerCount="2" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4913" PostTypeId="2" ParentId="4912" CreationDate="2017-10-20T07:31:16.787" Score="6" Body="&lt;p&gt;You should take a look at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop&quot; rel=&quot;noreferrer&quot;&gt;Macintosh Programmer’s Workshop&lt;/a&gt;: it provides a C compiler (within a development environment) and a command-line window. I don’t know whether its terminal emulation is sufficient to run Vi though — a classic Mac developer wouldn’t have used Vi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/1095/79&quot;&gt;Resources for developing in Classic Mac OS MPW?&lt;/a&gt; has more information about this, along with pointers to various resources (including downloads).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-10-20T07:31:16.787" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4914" PostTypeId="2" ParentId="605" CreationDate="2017-10-20T10:17:32.260" Score="4" Body="&lt;p&gt;One approach you may be interested in that I recently saw somebody else using for working on a platform with no modern C or C++ compiler support was to use LLVM in its output-to-C-code mode, and then process the resulting C code through the original native compiler.  This apparently meant they could use modern C and C++ features &lt;em&gt;and&lt;/em&gt; they were able to benefit from at least some of LLVM's optimization capacity.  Might be worth a try.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-10-20T10:17:32.260" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4916" PostTypeId="2" ParentId="4912" CreationDate="2017-10-21T00:51:27.830" Score="3" Body="&lt;p&gt;The classic Macintosh does not have a terminal, it’s an entirely graphical environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many small developers used THINK Pascal or THINK C (which became Symantec C++) to develop Macintosh software, Apple’s Macintosh Programmer’s Workshop was popular among professionals and provided a command line and Makefile style environment (though still window and mouse based—more like a text editor with scripting). Metrowerks CodeWarrior succeeded THINK C as many developers’ main environment with the introduction of the Power Mac.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I’d strongly recommend trying some development with THINK C, Symantec C++, MPW, and CodeWarrior before you decide that you need something like a VT52 connected to a VAX circa 1981 in order to do interesting programming.&lt;/p&gt;&#xA;" OwnerUserId="4496" LastActivityDate="2017-10-21T00:51:27.830" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4917" PostTypeId="1" AcceptedAnswerId="4918" CreationDate="2017-10-21T08:00:52.563" Score="7" ViewCount="930" Body="&lt;p&gt;I have been learning about PCs, the first of which was the Altair 8800. So that users could run programs, Micro-Soft created a BASIC interpreter to allow the program to be mapped to processor instructions. They originally fed the interpreter to the computer as a binary via paper tape.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How they manage to install the interpreter directly to the hardware?&lt;/li&gt;&#xA;&lt;li&gt;If an interpreter has been programmed in assembly language, how did it then&#xA;become something that the computer could understand?&lt;/li&gt;&#xA;&lt;li&gt;How was this automated?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7011" LastEditorUserId="278" LastEditDate="2017-10-21T09:29:05.030" LastActivityDate="2017-11-12T10:42:57.450" Title="How were interpreters loaded into computers?" Tags="&lt;assembly&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4918" PostTypeId="2" ParentId="4917" CreationDate="2017-10-21T11:06:50.320" Score="9" Body="&lt;p&gt;Altair BASIC, the first product created by Micro-Soft, was programmed using Assembly. Some of this was assembled by a program running on a PDP-10&lt;sup&gt;[citation needed]&lt;/sup&gt; but some was assembled by hand.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;He took out his notebook and quickly scribbled down a loader program in assembly language, then manually translated that into the ones and zeros the Altair would understand.&lt;br&gt;&#xA;  – &lt;a href=&quot;https://web.archive.org/web/20120323162142/http://startup.nmnaturalhistory.org/gallery/story.php?ii=20&amp;amp;sid=4&quot; rel=&quot;nofollow noreferrer&quot;&gt;START-UP Albuquerque and the Personal Computer Revolution&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Assembly language is an easy-to-read version of machine code. An assembly compiler converts acronyms, such as &lt;code&gt;MOV&lt;/code&gt;, into a series of bytes, interpreted as machine code instructions by the CPU. Depending on the parameters, addressing modes etc. an acronym might have multiple different byte values. &lt;code&gt;MOV&lt;/code&gt; in the Intel 8080 (the processor in the Altair 8800) is a notable example - every combination of moving values from one register to another has a separate machine code instruction taking up almost half of the instruction set. There are often added features, such as the ability to reference a section of code or a memory value by a name (known as a label) instead of by the position in the program, but a rudimentary assembler could conceivably be made using a find-and-replace tool. This simplicity is how Paul Allen was able to convert his loader program from assembly to machine code using only a notebook and pen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/9/9a/Altair_BASIC_Paper_Tape.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Altair_BASIC_Paper_Tape.jpg/640px-Altair_BASIC_Paper_Tape.jpg&quot; alt=&quot;Basic 8K on paper tape.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This loader program was originally used to allow the BASIC interpreter to be loaded from a roll of paper tape. The program could be put into a Teletype machine and &quot;typed&quot; into the Altair 8800, where the loader program would store it into memory. From there it could be run on the Altair 8800 by setting the instruction pointer to the start of the interpreter. The loader program &lt;em&gt;itself&lt;/em&gt; was entered by typing it by hand into the computer, where &lt;em&gt;another&lt;/em&gt; loader program would take the loader program and load that into memory. The loader loader was hard-wired into the computer. This is a problem known as bootstrapping, from the saying &quot;to pull oneself up by one's bootstraps&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The principle of this bootstrapping remained roughly the same in the final version of Altair BASIC. A program running on the computer would know how to interface with the tape reader - after the user's copy of BASIC was put into the paper or cassette tape reader it would be read into the computer's memory and executed. From there programs could either be read into the memory reserved for the BASIC program from another tape or typed in manually. There was also a feature allowing the user to save their programs.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Altair BASIC is an interpreter, not a compiler. This means that the BASIC program is not converted to machine code. Instead it is treated as data that BASIC reads to determine what section of &lt;em&gt;its&lt;/em&gt; code to run when. For example, if you have the BASIC program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A = 1&#xA;B = 2&#xA;C = A + B&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;it will not be compiled to machine code. Instead, the interpreter will set the variable &lt;code&gt;A&lt;/code&gt; to &lt;code&gt;1&lt;/code&gt;, then set the variable &lt;code&gt;B&lt;/code&gt; to &lt;code&gt;2&lt;/code&gt;, then read &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt;, then add them, then set &lt;code&gt;C&lt;/code&gt; to the result. This makes BASIC much slower than native machine code, but it is has the advantage of being easier to program and debug.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU only understands machine code, but the interpreter &quot;understands&quot; whatever programming language it is designed to interpret. For example, if the command &lt;code&gt;PRINT&lt;/code&gt; is being interpreted, the interpreter's instruction pointer will jump to the code that prints things to the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could view the combination between the interpreter and it's data as a machine code program that executes the interpreted program, but it's not really &quot;compiled&quot; as there is no compilation step in between &quot;representation of the source code&quot; and &quot;execution of said code&quot;. If the program that ran BASIC instead &lt;em&gt;replaced&lt;/em&gt; &lt;code&gt;PRINT&lt;/code&gt; with a jump to the code that prints things to the screen etc. then it could be said to be a compiler that produces a program that requires BASIC as a &quot;runtime library&quot; and the code would run a little bit faster as it's already done all of the lookups and code replacement. However, I do not know of any BASIC compilers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The interpreter is programmed for one specific processor; this means that it will have to be partially modified to work on a different but similar processor and almost completely reprogrammed to work on a very different processor. The interpreter is also programmed for a specific type of computer but, as the Intel 8080 became very popular after the Altair 8800, Microsoft BASIC only required small modifications to run on other 8080-based computers. Microsoft made &lt;em&gt;a lot&lt;/em&gt; of money from this. See &lt;a href=&quot;https://retrocomputing.stackexchange.com/search?q=[*basic]&quot;&gt;the questions with a BASIC tag&lt;/a&gt; for more details as to variants of BASIC.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;ROM was used in many computers to store BASIC interpreters. This meant that BASIC was already effectively &quot;in memory&quot; and did not need to be loaded in by the user - a very time-consuming process. See &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/463/278&quot;&gt;Why was BASIC built into so many operating systems?&lt;/a&gt; for reasons why BASIC would be included like this.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-11-12T10:42:57.450" LastActivityDate="2017-11-12T10:42:57.450" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4919" PostTypeId="1" CreationDate="2017-10-21T12:45:19.077" Score="7" ViewCount="1045" Body="&lt;p&gt;Altair BASIC, the first version of Microsoft BASIC, was developed using an Intel 8008 emulator, modified to emulate an Intel 8080, running on a PDP-10 computer. This emulator was originally designed by Paul Allen so that he and Bill Gates could create the software for Traf-O-Data.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How was the original 8008 emulator developed?&lt;/li&gt;&#xA;&lt;li&gt;What documents were required?&lt;/li&gt;&#xA;&lt;li&gt;How did they ensure that it was a faithful emulation?&lt;/li&gt;&#xA;&lt;li&gt;How was this then modified for the 8080?&lt;/li&gt;&#xA;&lt;li&gt;What made it able to be modified so quickly?&lt;/li&gt;&#xA;&lt;li&gt;What documents were required to do so?&lt;/li&gt;&#xA;&lt;li&gt;What modifications to the emulator were made to fit specific behaviours of the Altair 8800?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2017-10-21T13:20:21.187" LastActivityDate="2017-10-21T21:29:20.000" Title="How was the Microsoft PDP-10 8080 emulator developed?" Tags="&lt;history&gt;&lt;emulation&gt;&lt;software-development&gt;&lt;8080&gt;&lt;pdp-10&gt;" AnswerCount="1" CommentCount="20" FavoriteCount="1" ClosedDate="2017-10-31T15:26:07.457" ContentLicense="CC BY-SA 3.0" />
  <row Id="4920" PostTypeId="1" AcceptedAnswerId="4923" CreationDate="2017-10-21T13:25:17.440" Score="14" ViewCount="720" Body="&lt;p&gt;The original System/360 architecture had a bit in the Program Status Word that would select an &quot;USASCII&quot; mode rather than the usual EBCDIC.  Setting this bit changed how the BCD arithmetic operations worked: The sign of results would now be encoded as a nibble reading 1010 for plus and 1011 for minus (instead of 1100/1101 for EBCDIC) and the upper nibble in unpacked &quot;zoned decimal&quot; numbers would be stored as 0101 (instead of 1111 for EBCDIC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This feature was never much used, and was abolished in System/370.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For EBCDIC, putting 1111 in the upper nibbles makes perfect sense: it makes the bytes printable digits. And 1100/1101 as the sign nibble in unpacked results means that if you punch the result to a card, it will look identical to the same number computed by a 1401 (even though the 1401's &lt;em&gt;internal&lt;/em&gt; bit patterns were different).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However &lt;strong&gt;what is particularly ASCII-friendly about using 1010/1011/0101 instead?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The digits in ASCII have 0011 as the upper nibble, not 0101. Putting 0101 in the upper bits would produce PQRSTUVWXY on an ASCII device rather than digits. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise, there doesn't seem to be anything ASCII about the bit combinations 1010 and 1011 for signs. Naively converting a packed BCD number to ASCII characters nibble for nibble would result in digits followed by &lt;code&gt;:&lt;/code&gt; or &lt;code&gt;;&lt;/code&gt; for positive and negative, hardly an improvement over &lt;code&gt;&amp;lt;&lt;/code&gt; and &lt;code&gt;=&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't look like producing ASCII output is made easier in any way by running the S/360 in &quot;USASCII&quot; mode rather than EBCDIC. So what was the point supposed to be?&lt;/p&gt;&#xA;" OwnerUserId="5432" LastEditorUserId="12128" LastEditDate="2020-06-07T10:52:27.290" LastActivityDate="2020-06-07T10:52:27.290" Title="What's the deal with System/360's &quot;USASCII&quot; mode?" Tags="&lt;ibm&gt;&lt;mainframe&gt;&lt;ascii&gt;&lt;s360&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4922" PostTypeId="2" ParentId="4919" CreationDate="2017-10-21T21:29:20.000" Score="7" Body="&lt;p&gt;I'm guessing here, but I suspect they started from Intel's own &lt;strong&gt;INTERP/8&lt;/strong&gt; 8008 simulator. This was supplied on tape for PDP-10 as FORTRAN IV source. While I can't find the source of INTERP/8, the manual is an appendix of this Lawrence Livermore report &quot;&lt;a href=&quot;https://www.osti.gov/scitech/servlets/purl/4429980/&quot; rel=&quot;noreferrer&quot;&gt;SIlMULATOR  PROGRAM  FOR  THE  INTEL  MCS-8  800  CPU&lt;/a&gt;&quot; [PDF]. Intel's simulator for the 8080, INTERP/80, was released in 1973 in a similar format. Original source for INTERP/80 is available &lt;a href=&quot;http://www.autometer.de/unix4fun/z80pack/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The instructions for the 8008 and 8080 are quite similar, so it wouldn't be a superhuman effort to modify the Intel simulator. As the BIOS of these early micros didn't need to be much more than &quot;print a char / read a char / write to port / read from port&quot;, even a very crude simulator would be of immense help.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-10-21T21:29:20.000" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4923" PostTypeId="2" ParentId="4920" CreationDate="2017-10-22T02:20:37.820" Score="14" Body="&lt;p&gt;I found the explanation in chapters 23 and 20 of Mackenzie, Charles E, &lt;em&gt;Coded Character Sets, History and Development&lt;/em&gt; (Addison-Wesley, 1980), which was linked in a footnote to Wikipedia's &lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII&quot; rel=&quot;noreferrer&quot;&gt;ASCII&lt;/a&gt; article.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early 1960s, 7-bit ASCII was being standardized as an &lt;em&gt;communication&lt;/em&gt; format (the last &lt;code&gt;I&lt;/code&gt; in the name comes from &quot;interchange&quot;), but this does not directly specify how this 7-bit code would be &lt;em&gt;represented internally&lt;/em&gt; in an 8-bit computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today it seems &quot;obvious&quot; that a 7-bit codepoint &lt;code&gt;abcdefg&lt;/code&gt; would be represented with a leading 0 bit as &lt;code&gt;0abcdefg&lt;/code&gt; -- which is what the standards committee eventually decided, in the context of representing ASCII on byte-oriented magnetic tape -- but this decision had not yet been made when the System/360 architecture was defined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM was championing a competing proposal which they called USASCII-8 where the codepoint &lt;code&gt;abcdefg&lt;/code&gt; would be represented in a byte as &lt;code&gt;abacdefg&lt;/code&gt; with an additional copy of the topmost bit inserted between the second and third bit. So the first three bits of ASCII would be encoded as a high nybble as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;000   becomes  0000  for  0x0_&#xA;001      ~     0001   ~   0x1_&#xA;010      ~     0100   ~   0x4_&#xA;011      ~     0101   ~   0x5_   (digits in this column!)&#xA;100      ~     1010   ~   0xA_   (first column of upper-case letters)&#xA;101      ~     1011   ~   0xB_   (second column of upper-case letters)&#xA;110      ~     1110   ~   0xE_&#xA;111      ~     1111   ~   0xF_&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this representation the 0101/1010/1011 upper-nybbles of the S/360's USASCII mode does make sense. 0101 is indeed where the digits are located. Having 1010 in the upper bits of the last digit of a positive number would make it compatible with EBCDIC (and its predecessors, such as in the 1401). Using 1011 as the negative-sign marker would not give the same &lt;em&gt;graphical&lt;/em&gt; results as the EBCDIC choice, but at least it would be upper-case letters too, and there were proposals for how to represent ASCII as Hollerith punch combinations that would have made these signed integers &lt;em&gt;punch&lt;/em&gt; the same as in the EBCDIC world (though textual data would &lt;em&gt;not&lt;/em&gt; be compatible).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why represent ASCII in this weird way, though? Mackenzie quotes some supposed advantages of this representation -- among others:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There would be space to extend the character set to an 8-bit character set with additional control characters &lt;em&gt;contiguously&lt;/em&gt; with the ASCII control character.&lt;/li&gt;&#xA;&lt;li&gt;The upper nybble of letters would be clearly distinguishable from a BCD digit, which would be useful for sanity checks of numeric format -- especially for the &lt;em&gt;packed&lt;/em&gt; format used by the S/360 where a &lt;em&gt;variable-length&lt;/em&gt; BCD field had a single sign nybble at the end which would move to a high nybble upon unpacking.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;DEL&lt;/code&gt; character would be represented by a byte of all ones, such that one could overpunch anything with it on 8-bit paper tape. (The analogous reasoning for 7-bit tape was the original reason why ASCII has this control character at the far end of the 7-bit codepoint space, away from the other controls).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Since the &lt;code&gt;abacdefg&lt;/code&gt; proposal never reached standardization, the USASCII mode of the architecture never became useful.&lt;/p&gt;&#xA;" OwnerUserId="5432" LastEditorUserId="5432" LastEditDate="2017-10-22T02:51:48.807" LastActivityDate="2017-10-22T02:51:48.807" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4924" PostTypeId="2" ParentId="223" CreationDate="2017-10-22T04:14:55.233" Score="11" Body="&lt;p&gt;&lt;a href=&quot;https://www.z88dk.org/wiki/doku.php?id=temp:front&quot; rel=&quot;noreferrer&quot;&gt;Z88DK&lt;/a&gt; is a suite of development tools for Z80 targets that includes a couple of different C compilers (one a variant of Small C and one a patched version of SDCC) and an assembly-level optimizer that is run as a post-filter on the output of these compilers.  It also has a highly hand-optimized library.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;They've published a set of benchmarks versus some older Z80 compilers (e.g. HISOFT-C and SDCC without their updates/optimizer) that depending on application show gains from 15% (Dhrystone) to 300% (Pi calculation).  At the same time they show gains in code size varying from 7% to about 90% (I presume due to elimination of large chunks of duplicate code).  Floating point performance is lower than some of the older compilers however - but that's because they're using higher-precision 48-bit floats rather than the 32-bit floats used by the older compilers.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is able to target a variety of platforms including MSX, CP/M, and many of the early 80s home computers that used Z80 CPUs.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-10-22T04:14:55.233" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4925" PostTypeId="1" CreationDate="2017-10-22T08:20:31.997" Score="13" ViewCount="3225" Body="&lt;p&gt;I'm planning out a 6502 homebrew build but seem to be stuck in the issue of buying parts. My plan is to extend the addressing capabilities of the 6502 by giving myself 64kb of RAM, and another 64kb of ROM, by using an MMU. I've looked up those such as the &lt;strong&gt;MOS-8722&lt;/strong&gt; and &lt;strong&gt;74LS610&lt;/strong&gt;, but can't seem to find them anywhere that don't cost $30AUD or more, because they have to be shipped from overseas and are now incredibly rare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously using a memory mapper would serve me well, however is there any tricks you can do with an Address Decoder or alike to extend the memory without needing any MMU's?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm pretty sure I read somewhere that you can flip a byte in memory and then it somehow knows which chips to take from, but then is that byte being stored in a register, ROM/RAM, I don't know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is a trick, what happens if I assumingly have two single 64kb ROM and 64kb RAM chips, want to read from ROM and put it in RAM. How does the decoder know to swap chips, grab the data and put into the other? What kind of soldering are we looking at here? &lt;/p&gt;&#xA;" OwnerDisplayName="user7013" LastActivityDate="2021-03-04T21:03:04.170" Title="Mapping more than 64kb of address space" Tags="&lt;hardware&gt;&lt;6502&gt;&lt;memory-layout&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4926" PostTypeId="2" ParentId="4925" CreationDate="2017-10-22T08:49:09.527" Score="12" Body="&lt;p&gt;The simplest way to do that is extending your address bus by at least one bit and have a latch (like, for example, a 74279 TTL latch) to store these bits. Then put in some address decoding to memory-(or i/o-) map this latch as a register allowing you to store arbitrary values in there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whatever you put into this latch then will determine which area of memory the CPU is addressing. You might want to disable this circuit on some address ranges to for example make sure ROM is paged in at a certain address all the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is obviously a very crude way to memory-map a 64k address range to some larger space. More advanced approaches would split the memory into banks (typically 16kBytes) and have a bit more advanced logic allowing to overlay any of these banks into anywhere in the 64k.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-10-22T10:35:56.593" LastActivityDate="2017-10-22T10:35:56.593" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4927" PostTypeId="2" ParentId="4925" CreationDate="2017-10-22T10:46:22.367" Score="8" Body="&lt;p&gt;There are many solutions to your problem. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;use a latch as suggested by tofro.&lt;/li&gt;&#xA;&lt;li&gt;extend this to a full register. This register provides the most significant bits of your extended addressbus.&lt;/li&gt;&#xA;&lt;li&gt;build a minimal MMU yourself by adding the content of a register to the 6502 address (using an adder). &lt;/li&gt;&#xA;&lt;li&gt;use a 6510 instead of a 6502. This processor is used in a Commodore 64 to do exactly what you want. This processor has an internal 'port' register connected to the processor pins which allows you to select different memories (or I/O areas).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;in case 1..3 you will have to address the latch or register in your memorymap. This is not necessary in case 4 since the port register appears on addresses 0 and 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you can't write to a rom, you can always acces RAM if the read/write line is set to write. This way you can read the ROM and write the RAM on the same address (like it is done on a c64).   &lt;/p&gt;&#xA;" OwnerUserId="4853" LastEditorUserId="4853" LastEditDate="2017-10-22T11:25:28.057" LastActivityDate="2017-10-22T11:25:28.057" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4928" PostTypeId="2" ParentId="4925" CreationDate="2017-10-23T00:51:59.333" Score="6" Body="&lt;p&gt;One simple way to extend address space is to use a register file to support bank-switching.  For example, suppose you have a 74LS670 4x4 register.  This chip lets you use 2 bits of input to select the value from 1 of 4 4-bit registers.  The ability to convert 2 bits to 4 bits means you can increase the address space from 16 bits to 18 bits, mapped in 16KiB chunks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The top 2 address bits would then select 1 of the 4 registers, and the selected register would then supply 4 new address bits (which combined with the remaining 14 bits of the original address, gives you an 18-bit effective address).  This scheme divides up the 64KiB address space into 4 16KiB regions, where each region can be chosen from among 16 possible 16KiB segments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use 2 74LS670 chips, you can extend this to 8 bits per register for 22-bit addressing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that because the 6502 uses memory-mapped I/O, you need to take some care to ensure that you never lose the ability to change the memory map by accidentally unmapping the address range where the register file is accessed. This is the nice thing about the 6510 -- it has a dedicated I/O port (addresses 0 and 1) which can never be unmapped.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2017-10-23T01:57:56.523" LastActivityDate="2017-10-23T01:57:56.523" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4929" PostTypeId="1" CreationDate="2017-10-23T02:01:28.297" Score="21" ViewCount="4114" Body="&lt;p&gt;A PCI card does not have a fixed memory address, the PCI card specifies how much memory it wants, and the OS will assign whatever address it wants for this memory, and will set this address in the PCI card's BAR field (of course a PCI card can have many BAR fields).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what about an ISA card, can the OS specify a memory address for the ISA card, or does the ISA card have a fixed address?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if the ISA card have a fixed address, what happens if two ISA cards existed on the same computer with the same address?&lt;/p&gt;&#xA;" OwnerUserId="7016" LastEditorUserId="6794" LastEditDate="2017-10-25T18:06:20.863" LastActivityDate="2017-10-27T19:38:45.900" Title="Does an ISA card have a fixed memory address?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4930" PostTypeId="2" ParentId="4929" CreationDate="2017-10-23T02:18:15.287" Score="15" Body="&lt;p&gt;If the ISA card is built to support it, it can have a BAR register (or the effective equivalent).  This is kind of what the ISA Plug-and-Play (ISA PnP) standard did, and it also defined a standard way for the OS/BIOS to identify cards and program addresses at boot time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before ISA PnP, it wasn't uncommon for cards to have configurable addresses stored in non-volatile RAM (e.g. Flash memory), and for the cards to come with a special utility on diskette allowing you to update the RAM with new settings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before that, cards would be configured via jumpers or switches (if they could have their addresses configured at all).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you configured two cards at the same address, they would generally both try to respond at once.  Typically the worst result was simple malfunctions, but depending on the design of the conflicting cards it might have been possible to actually damage one or both.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-10-23T02:18:15.287" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4931" PostTypeId="2" ParentId="4929" CreationDate="2017-10-23T08:43:29.180" Score="34" Body="&lt;p&gt;In general, yes, ISA cards have fixed memory and I/O addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ISA inherently has &lt;em&gt;the card decide&lt;/em&gt; to what memory and I/O addresses it reacts because address decoders are located on the cards. How that decision is being taken varied over time, however. Because the ISA bus in principle exposes the full system bus to cards with no isolation or address translation, a card might technically react to &lt;em&gt;any&lt;/em&gt; address its designer wanted it to (This is more flexible than, for example, assign fixed address ranges to slot numbers like other systems did, but also potentially leads to more collisions)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Very early in PC history, a simple memory and I/O map had been designed and that specified, for example, an MDA card &lt;em&gt;had&lt;/em&gt; to have its video memory at 0B0000h, and a CGA card was specified to live at 0B8000h. Similar for associated I/O addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cards that weren't standardized like that used to have jumpers or DIP switches that typically allowed you to choose between a (limited) set of memory (if needed) and I/O addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only much later, when memory and I/O address spaces started to become crammed with more and more peripherals, new approaches had to be invented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This started with jumperless cards that could have their memory and address resources configured into non-volatile memory (which created some sort of chicken-and-egg-problem: In order to program that jumperless card to use some specific resource, you had to access it somehow. And if that &quot;somehow address&quot; was already taken by another peripheral, you ended up with a collision and either had to revert to jumpers again or had to remove cards to make the initialization for a new card possible).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even later, ISA PNP tried to automate this process of allocating memory and I/O resources to cards by having the BIOS and the cards negotiate resource allocation during startup. (Even there, however, it is ultimately &lt;em&gt;the card&lt;/em&gt; that decides what addresses it listens to and what &lt;em&gt;potential resources&lt;/em&gt; it offers to the PNP BIOS for negotiation. And the resulting resource is fixed after the negotiation process). This approach somehow worked in theory but with PCs typically having a mix of legacy cards with fixed resource allocation and &quot;new&quot;-style PNP cards made that bargaining for resources very difficult, on heavily-equipped PCs sometimes even impossible. This (and other reasons like addressable space and bus speed) eventually led to the introduction of more advanced bus systems like MCA and PCI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW: Even if your question doesn't ask for this, very much the same is true for the third type of resource typically needed by peripherals: The IRQs.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-10-23T18:01:45.240" LastActivityDate="2017-10-23T18:01:45.240" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4932" PostTypeId="2" ParentId="4925" CreationDate="2017-10-23T20:11:54.293" Score="4" Body="&lt;p&gt;First, some theory:&#xA;(TL;DR: Everything is possible :))&lt;/p&gt;&#xA;&lt;p&gt;There are like a zillion possible ways to access more storage 'outside' a limited address space. They generally fall into three groups:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Have one or more mapping registers that to map memory into an address region&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Have an access port whose content is specified by one or more access registers.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Trap and modify the addressing on one instruction to access additional memory in another address space&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Method 1 is what is usually called &lt;em&gt;banking&lt;/em&gt;. One region of defined size within the CPU address space is selected via traditional means. All address bits within this region are supplied to an external address space plus some additional to select a block within this address space. Examples here would be GeoRAM or NeoRAM for the C64 (256 Byte region) or Language Card and compatible (like Saturn) for the Apple II (4/12 KiB region). With several regions, and thus more than one source for additional address bits, more variable configurations could be achieved.&lt;/p&gt;&#xA;&lt;p&gt;All data in these region(s) can be used for any access. Program, pointers or data.&lt;/p&gt;&#xA;&lt;p&gt;Method 2, in contrast, can only be used with user data, as only a single byte is accessible at a time, and all access is performed via the same address within the main address space.&lt;/p&gt;&#xA;&lt;p&gt;Method 3 is the most exotic but also most powerful, as it requires a deep knowledge of the CPU.  An example here would be the way the Commodore 6509 computers (PET II series) operate. Here the &lt;code&gt;LDA (zp),Y&lt;/code&gt; and &lt;code&gt;STA(zp),y&lt;/code&gt; instructions are modified during the data access cycle to use a 4-bit latch to access one of 16 64KiB address spaces while the program still runs in the main address space.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Less theoretical:&lt;/p&gt;&#xA;&lt;p&gt;For your project, the use of a 6522 might be the least complicated. While it might seem overpowered at first, it features several advantages. The timing is well-defined and the setting can be read again. The latter is quite important if you intend to have a multi-programming environment. That includes not only two concurrent user programs where each should have its value set when running, but also 'simple' things as interrupt routines.&lt;/p&gt;&#xA;&lt;p&gt;Just assume something such as a background transfer buffer (like for a printer).  Wouldn't it be great to have that spool data out of the way, within some extended address space? So whenever the printer signals the ability to accept a byte via interrupt, the access region needs to be switched to point to the print data. No problem; just write the latch. But later on, before returning, the value the foreground program uses needs to be restored. With a self-designed latch, this read-back will need several additional chips. Or additional software to keep the value in a memory location, and well-behaved software so it always gets written &lt;em&gt;and&lt;/em&gt; done so in a secure way.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;It's not as simple as people often think - and one could write a whole book about it. :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-03-04T21:03:04.170" LastActivityDate="2021-03-04T21:03:04.170" CommentCount="28" ContentLicense="CC BY-SA 4.0" />
  <row Id="4933" PostTypeId="1" CreationDate="2017-10-24T02:38:18.647" Score="1" ViewCount="210" Body="&lt;p&gt;Based on my understanding, a UART chip is a chip that exists on a serial card, and it is responsible for the actual sending and receiving of data over the serial port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to see what a UART chip actually looks like on a serial card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following is a PCI serial card:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YXOvb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YXOvb.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the chip circled in yellow the UART chip?&lt;/p&gt;&#xA;" OwnerUserId="7016" LastActivityDate="2017-10-24T16:46:00.987" Title="Is this a UART chip?" Tags="&lt;hardware&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2017-10-25T08:32:10.627" ContentLicense="CC BY-SA 3.0" />
  <row Id="4934" PostTypeId="2" ParentId="4933" CreationDate="2017-10-24T16:46:00.987" Score="3" Body="&lt;p&gt;That chip is an ASIX &lt;a href=&quot;http://www.asix.com.tw/products.php?op=pItemdetail&amp;amp;PItemID=128;74;111&amp;amp;PLine=74&quot; rel=&quot;nofollow noreferrer&quot;&gt;MCS9820&lt;/a&gt;, as seen on a (current) StarTech &lt;a href=&quot;https://www.startech.com/Cards-Adapters/Serial-Cards-Adapters/1-Port-16550-Serial-PCI-Card~PCI1S550&quot; rel=&quot;nofollow noreferrer&quot;&gt;1 Port PCI RS232 Serial Adapter Card with 16550 UART&lt;/a&gt;. While it contains UART functions, the chip itself is a PCI→Serial bridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chip emulates a National Semiconductor &lt;a href=&quot;https://en.wikipedia.org/wiki/16550_UART&quot; rel=&quot;nofollow noreferrer&quot;&gt;16550&lt;/a&gt; UART, itself an improved version of the NS &lt;a href=&quot;https://en.wikipedia.org/wiki/8250_UART&quot; rel=&quot;nofollow noreferrer&quot;&gt;8250&lt;/a&gt; found in the IBM PC. 8-bit computers often had a Motorola 6850 or MOS 6551 Asynchronous Communications Interface Adapter (ACIA). These would be more in line with this SE's remit.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-10-24T16:46:00.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4935" PostTypeId="2" ParentId="2297" CreationDate="2017-10-24T16:53:23.187" Score="3" Body="&lt;p&gt;The most common one still around is probably the International Program Airline Reservation System (IPARS) 6-bit character set used used in the Airline Link Control (ALC) protocol used in the international airline reservation system.  Yes, down in the guts of the global air travel system, blocks of 6-bit characters are still being shuffled around to this day all over the world. You can get many of the gory details by looking up 'SITA P1024B'. ALC was traditionally carried over X.25 or a serial bisync connection, but these days I suppose you'll find it encapsulated in IP most of the time (there's an RFC for that).  &lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2017-10-24T16:53:23.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4936" PostTypeId="1" AcceptedAnswerId="4937" CreationDate="2017-10-25T00:54:36.950" Score="8" ViewCount="405" Body="&lt;p&gt;With the help of this community, I was able to copy and emulate a HP9133 HD using Hpdir and Hpdrive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I want to edit, or at the bare minimum, read the programs on the HD. I have extracted the programs using Hpdir, but I am at a loss as to how to determine the encoding used. I can see some text (seems to mainly be variable names, see attached example), but try as I may to find the proper encoding, nothing comes out correctly.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some things worth noting:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I have used a number of editors, jEdit seems to have the most encodings available. When I open the programs in jEdit, It defaults to cp-1252 (also known as windows-1252). This is the encoding used in the shown example.&lt;/li&gt;&#xA;&lt;li&gt;I have tried a ton of encodings using brute-force from the supported list in jEdit, none seem to work. &lt;/li&gt;&#xA;&lt;li&gt;HP 9000 Model 310 running BASIC 5.1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any help would be greatly appreciated! Thanks!&#xA;&lt;a href=&quot;https://i.stack.imgur.com/MgKro.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MgKro.png&quot; alt=&quot;Program viewed in jEdit&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6889" LastActivityDate="2017-10-25T01:29:28.407" Title="Determine Character Encoding used on HP 9000 Model 310 running BASIC 5.1" Tags="&lt;basic&gt;&lt;hp&gt;&lt;unicode&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4937" PostTypeId="2" ParentId="4936" CreationDate="2017-10-25T01:29:28.407" Score="14" Body="&lt;p&gt;HP BASIC doesn't normally save programs in ASCII or any other character encoding. Instead it normally stores the program on disk using an internal representation (probably tokenized like other BASIC implementations). Any file in PROG format isn't in a format you can view in an editor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However HP BASIC does allow the saving a programs in ASCII format.  From &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/hp/9000_basic/5.0/98613-90000_Using_the_BASIC_5.0_5.1_System_Nov87.pdf&quot; rel=&quot;noreferrer&quot;&gt;Using the BASIC 5.0/5.1 System&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;h2&gt;A Closer Look at Storing Programs&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;To write a program to a mass storage device, you will use either the SAVE or the STORE&#xA;  statement. There is no &quot;right&quot; or &quot;wrong&quot; choice; your choice depends upon the&#xA;  kind of file you want.&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;STORE records an internal representation of the program in a PROG file. The&#xA;  main advantage of a PROG file is a rapid retrieval rate .&lt;/li&gt;&#xA;  &lt;li&gt;SAVE records the actual text of the program in an ASCII file. The main advantage&#xA;  of an ASCII file is that it can be read as data by a BASIC program or by&#xA;  LIF-compatible devices (such as other HP computers and terminals).&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So if you run the commands  &lt;code&gt;LOAD &quot;AUTOST&quot;&lt;/code&gt; followed by &lt;code&gt;SAVE &quot;AUTOST_A&quot;&lt;/code&gt; on your HP computer you should have a file you can read on your PC, probably called &lt;code&gt;AUTOST_A.ASCII&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2017-10-25T01:29:28.407" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4939" PostTypeId="2" ParentId="4917" CreationDate="2017-10-25T16:53:27.970" Score="3" Body="&lt;p&gt;The Altair 8800 had a set of switches on the front panel which could be used to store arbitrary data to arbitrary bytes of RAM.  The designers of the Altair published a boot loader that was IIRC a little over 50 bytes that could be entered via switches and would allow the machine to load and run a variety of programs from a paper tape reader.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since using front-panel switches to enter a 50-byte bootloader any time one wanted to load something would have been a nuisance, Micro-Soft published a simplified boot loader which fit in 17 bytes (I haven't examined the code for it, but I suspect it was probably hard-coded things like the size of program to be read).  An even smaller bootloader (12 bytes maybe?) was published about a decade ago that not only requires that the code to be loaded must have a certain exact size, but also requires that the bytes be stored in reverse order and that no two consecutive bytes match.  The BASIC interpreter would probably not satisfy those requirements, but if one punched a copy of it on a tape following a reverse-punched copy of a more sophisticated bootloader, one could use a 12-byte loader to read the more sophisticated loader, and then use that to read the BASIC interpreter.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-10-25T16:53:27.970" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4940" PostTypeId="2" ParentId="1998" CreationDate="2017-10-26T06:42:53.210" Score="15" Body="&lt;p&gt;The security is handled entirely by the Z80, the NES side of the machine has no awareness of anything outside of the normal behavior of an NES.  In fact, all the games (except for Mike Tyson's Punch Out) are 100% identical to the NES cartridge versions, and frequently use the same maskROMs from the NES version.  Because of this, you can exchange the ROMs for another game that uses the same mapper.  The downside to this, is that in the game list and instructions screen, it will show up with the name/instructions of the original title.  Note that the boards have extensive solder jumpers that can be used to allow it support various sizes of EPROMs and maskROMs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There actually are 2 security chips on a Playchoice cartridge.  There is the small serial ROM, and there is also another standard 27C64 EPROM that is used by the Z80.  That ROM contains the game's name, instruction screen, and also the Z80 code that does the actual comparison to the serial ROM.  If it doesn't match, then the game will not show up on the list.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the Z80 boots into the Playchoice &quot;BIOS&quot; ROM, and when it selects a cartridge slot, the cartridge's Z80 ROM gets mapped into an area of the Z80's memory.  The Z80 then executes code in that ROM to validate the cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is known thanks to the work of Martin Korth (author of the NO$NES emulator), and he has also created a utility which will allow anyone to create a custom ROM with their own game name and instructions, and also does no checking of the serial ROM, so you no longer need that part on the board.  I have designed my own Playchoice game boards and used his utility with it, it does work.&lt;/p&gt;&#xA;" OwnerUserId="7024" LastActivityDate="2017-10-26T06:42:53.210" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4941" PostTypeId="2" ParentId="223" CreationDate="2017-10-26T08:13:04.820" Score="1" Body="&lt;p&gt;I would reply in a more cagey fashion. It would certainly be useful to have a better C compiler for Z80 - the existing ones are not producing very good code. It is also clear that a number of people are experimenting, even with these not very good compilers, and end up creating new and useful software. Some of these software are definitely not bad. My real concerns are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It is clear that you ought to be able to write a better compiler than the existing ones. It is not clear if you can write a really good compiler - the one that would tempt asm coders to switch, because the gap between a good asm code and a good compiled code on Z80 platforms at the moment is massive.&lt;/li&gt;&#xA;&lt;li&gt;Part of the problem is to do with the fact that C was not really designed with 8-bit platforms in mind. The vast majority of the code assumes at least 16-bit int; the local variables cannot be efficiently allocated on stack and addressed on Z80, which makes implementation of function parameters very painful, especially with recursion allowed. It can all be supported, of course, but at the cost of writing significantly less efficient code. To address this things properly you would need to make changes to the language itself, and that will put a lot of people off.&lt;/li&gt;&#xA;&lt;li&gt;To make matters worse, a lot of paradigms for efficient Z80 coding are really not fitting into C. Things like movable stack pointers, self-modifying code, partial loop unrolling are just not catered for. Just like every Z80 coder, I would love to see a compiler with a bit of intuition for the use of Z80 registers, but I do not hold much hope.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="5039" LastActivityDate="2017-10-26T08:13:04.820" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="4942" PostTypeId="5" CreationDate="2017-10-27T08:44:44.510" Score="0" Body="&lt;p&gt;The PDP-10 minicomputer from the Digital Equipment Corporation (DEC) was a 16-bit machine introduced in 1966 and produced, in various generations, until the 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please use this tag specifically for the PDP-10.  Other machines in the range have their own tags.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-10-27T08:44:44.510" LastActivityDate="2017-10-27T08:44:44.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4943" PostTypeId="4" CreationDate="2017-10-27T08:44:44.510" Score="0" Body="For questions regarding the DEC PDP-10 Computer." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-10-27T08:44:44.510" LastActivityDate="2017-10-27T08:44:44.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4944" PostTypeId="2" ParentId="4929" CreationDate="2017-10-27T19:38:45.900" Score="2" Body="&lt;p&gt;&quot;What happens if two ISA cards existed on the same computer with the same address?&quot; appears to have no answer yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Short answer: you have a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Longer answer: it's very undefined. While both cards would probably react to write operations (with even more undefined results of the hardware), read operations are invariably borked. The CPU could get a mixture of both address locations' bits or nothing at all (when one card terminates the read cycle while the other dominates the data bus but hasn't put on any meaningful content yet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar things would happen with an IRQ or DMA collision: nothing good. Most often the devices simply wouldn't work or loading the driver would lock up the computer. Sometimes the effects could be rather subtle, appearing to work most of the time but playing up without any apparent reason.&lt;/p&gt;&#xA;" OwnerUserId="5200" LastActivityDate="2017-10-27T19:38:45.900" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4945" PostTypeId="2" ParentId="1858" CreationDate="2017-10-27T20:27:07.423" Score="24" Body="&lt;p&gt;This answer is written from memory, corrections may be made later if I remember/research more details. It starts with historical background to put things into perspective. This answer is specifically about Soviet ZX Spectrum clones, for other stuff read other answers, or for example this &lt;a href=&quot;https://www.glaver.org/blog/?p=959&quot; rel=&quot;noreferrer&quot;&gt;https://www.glaver.org/blog/?p=959&lt;/a&gt;  (Yes, Soviets were copying everything they could with total disregard for IP laws, and were pirating all the software, most soviets electronic components are clones of corresponding western ones)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, USSR economy was not consumer-oriented. Vast majority of resources, most talent was was allocated to military and internal security. Soviet electronics industry consisted of many factories, using mostly imported  outdated equipment and plenty of manual labor. Communication between these factories was limited due to secrecy and big distances. Non-military projects were frequently seen as means to utilize poor quality surplus components and sometimes grew out from personal projects done by one of the engineers working there.&#xA;Beyond some highly classified military projects, soviet industry was blindly chasing after the western one by following news, bringing some random specimens from abroad and trying to copy them, typically lagging behind by 10 years and never able to match production volumes and efficiency. Developing something original was seen too risky by soviet bureaucratic management, versus stealing finished, well debugged western software or hardware product. Usually biggest changes were made to accommodate inferior production technologies, materials and components. I could explain further how dysfunctional soviet economy was, how different ministries tried to one up each other, but the answer is already much bigger than it should be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was no interest on the state level to replicate ZX Spectrum and various other Z80 and 6502-based home PCs, but there was interest in micros for industrial automation, office work and especially education. The situation only changed in late 80s, when factories were asked to actually earn money to support themselves by selling consumer products. However, USSR ignored, did not copy and could not produce 6502 and Z80, until, probably, &lt;a href=&quot;http://speccy.info/%D0%A234%D0%92%D0%9C1&quot; rel=&quot;noreferrer&quot;&gt;the last year&lt;/a&gt; of its existence. Due to fragmented nature of the Soviet electronics industry there were more than 6 competing networked school micro/mini computers, with ZX Spectrum &lt;em&gt;not&lt;/em&gt; being one of them. Only one of those was Z80-based, but it wasn't actually produced in USSR. &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%AF%D0%BC%D0%B0%D1%85%D0%B0_%D0%9A%D0%A3%D0%92%D0%A2&quot; rel=&quot;noreferrer&quot;&gt;Yamaha MSX&lt;/a&gt;. Another, &lt;a href=&quot;https://en.wikipedia.org/wiki/Agat_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Agat&lt;/a&gt;, was Apple II semi-clone, but used either imported 6502, or &lt;a href=&quot;https://en.wikipedia.org/wiki/Bit_slicing&quot; rel=&quot;noreferrer&quot;&gt;bitslice&lt;/a&gt; re-implementation of it. The rest used domestically-produced &lt;a href=&quot;https://en.wikipedia.org/wiki/KR580VM80A&quot; rel=&quot;noreferrer&quot;&gt;8080/8080A&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/K1810VM86&quot; rel=&quot;noreferrer&quot;&gt;8086&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-11&quot; rel=&quot;noreferrer&quot;&gt;LSI-11&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/1801_series_CPU&quot; rel=&quot;noreferrer&quot;&gt;copies&lt;/a&gt;, able to run western software&amp;amp;operating systems, modified to support Cyrillic fonts. MSX brought videogames to USSR and many MSX games were (unofficially) ported to nearly every other USSR/exUSSR hobbyist PC.  There were many of those in the late 80 and early 90s, usually 8080A-based. They, of course, could not compete with huge library of quality software available for Spectrum, so it became a natural winner despite problems with sourcing enough Z80s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Majority of Soviet ZX Spectrum clones weren't using &lt;a href=&quot;http://speccy.info/%D0%A234%D0%92%D0%9C1&quot; rel=&quot;noreferrer&quot;&gt;copies of Z80&lt;/a&gt; and/or &lt;a href=&quot;http://speccy.info/ULA&quot; rel=&quot;noreferrer&quot;&gt;ULA&lt;/a&gt;. More often, they used imported Z80 and replicated ULA functionality by using a bunch of discrete logic chips (logic gates, triggers, counters, multiplexers) and a few lookup tables burned into several small ROMs.&#xA;Many did not replicate ULA timings and quirks exactly, or instead added extra functionality/performance improvements, used various tricks to cut down component count and production costs.&#xA;I believe, first designs were produced by a few bored engineers, who somehow obtained a Speccy, brought it to work and poked it with logic analyzers and oscilloscopes and then tried to devise an implementation that doesn't use custom chips. This was done independently in several places, with &lt;a href=&quot;http://speccy.info/%D0%94%D1%83%D0%B1%D0%BD%D0%B0-48%D0%9A&quot; rel=&quot;noreferrer&quot;&gt;some&lt;/a&gt; &lt;a href=&quot;http://speccy.info/%D0%A5%D0%BE%D0%B1%D0%B1%D0%B8%D1%82_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80)&quot; rel=&quot;noreferrer&quot;&gt;designs&lt;/a&gt; used for factory mass production &lt;a href=&quot;http://speccy.info/%D0%91%D0%B0%D0%BB%D1%82%D0%B8%D0%BA&quot; rel=&quot;noreferrer&quot;&gt;and&lt;/a&gt; &lt;a href=&quot;http://speccy.info/%D0%9B%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3%D1%80%D0%B0%D0%B4_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80)&quot; rel=&quot;noreferrer&quot;&gt;other&lt;/a&gt; used by hobbyist/small enterprises. Typically, factory-made designs are a bit overengineered, have Russian character sets and additional software/hardware features(&lt;a href=&quot;http://zxbyte.ru/&quot; rel=&quot;noreferrer&quot;&gt;Byte&lt;/a&gt;, Delta-S, Santaka, etc.), while DIY designs were more elegant, but frequently sacrificed some compatibility for simplicity and used unchanged Speccy ROMs except, maybe, changed copyrights.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Factory designs were usually produced as complete boxed products, a futile attempt of post-soviet industry to survive impending doom of 90s economic collapse while supplying impoverished masses with only home PC they could afford. To save costs, later versions of those used one of several available &lt;a href=&quot;http://speccy.info/ULA&quot; rel=&quot;noreferrer&quot;&gt;ASIC ULA reimplementations&lt;/a&gt; and &lt;a href=&quot;http://speccy.info/%D0%A234&quot; rel=&quot;noreferrer&quot;&gt;Т34ВМ1&lt;/a&gt;/U880 Z80 clones that were slightly less compatible than originals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DIY ones were made by small entrepreneurs frequently as a kit, with cases, keyboards, PSUs, expansions etc. being optional. They were gradually improved with more and more features, including RAM expansions, floppy, mouse and hard drive controllers, audio &amp;amp; graphics cards, modems etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. My english isn't very good, corrections are welcome.&lt;/p&gt;&#xA;" OwnerUserId="7030" LastEditorUserId="7030" LastEditDate="2017-10-28T04:28:20.127" LastActivityDate="2017-10-28T04:28:20.127" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4946" PostTypeId="2" ParentId="2883" CreationDate="2017-10-27T21:43:10.513" Score="1" Body="&lt;p&gt;You got it...you're looking for a &quot;development board&quot; or an &quot;evaluation board&quot;.  These are typically single boards produced either by the microcontroller/microprocessor manufacturer (Intel, Motorola/Freescale, TI, etc) or a shop that specializes in dev boards (IAR, Olimex, etc) to give engineers a known-working platform to learn about a given chip.  These are  produced at various price and feature points to entice engineers to get interested in designing with their chip.  Some are as simple as just a chip with I/O broken out to pins (like a shield), a serial transceiver and power supply; others have wide varieties of I/O, displays, memory, expansion, etc. Usually, they are bundled with a monitor and basic development kit as well (assembler, limited function compiler, etc); occasionally the programming is built in (BASIC or FORTH in ROM).  You can buy them new, or troll eBay for the more retro experience.  Basically, just decided what retro architecture you're interested in and search for a board that meets your price and feature needs.  I like picking up the odd eval board...it lets you learn a bit about obscure architectures without a lot of investment and without the hassle of trying to roll your own design.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2017-10-27T21:43:10.513" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4947" PostTypeId="2" ParentId="2883" CreationDate="2017-10-27T22:58:57.583" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://webpages.uncc.edu/~jmconrad/ECGR6185-2013-01/Presentations/Chitale_Paper_Presentation.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a proposed design for a portable electrocardiogram (ECG) instrument that uses a Gameboy Advance (GBA) (from 2003) as a microcontroller. The advantage of the GBA is its light weight, good graphics, low display latency, and low cost. It has an ARM7TDMI CPU which is a precursor to the ARMv8-A used in the Raspberry Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In actual use, &lt;a href=&quot;https://hackaday.com/2017/09/24/game-boy-advance-hiding-in-a-medical-device/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; is the display unit of a GBA in an ECG with what appears to be a custom microcontroller board.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-10-27T22:58:57.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4948" PostTypeId="1" AcceptedAnswerId="11852" CreationDate="2017-10-28T17:47:57.383" Score="21" ViewCount="1707" Body="&lt;p&gt;Looking through the source code of the 6502 MS-BASIC, certain parts of it seem more reminiscent of how things would be done on the 8080, then on how they should be done on the 6502.  Code to find a line with a specified number, for example, is a relatively performance-critical, but Bill Gates' code seems less than optimal:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FNDLIN: LDWX    TXTTAB      ;LOAD [X,A] WITH [TXTTAB]&#xA;FNDLNC: LDYI    1&#xA;        STWX    LOWTR       ;STORE [X,A] INTO LOWTR&#xA;        LDADY   LOWTR       ;SEE IF LINK IS 0&#xA;        BEQ FLINRT&#xA;        INY&#xA;        INY&#xA;        LDA LINNUM+1    ;COMP HIGH ORDERS OF LINE NUMBERS.&#xA;        CMPDY   LOWTR&#xA;        BCC FLNRTS      ;NO SUCH LINE NUMBER.&#xA;        BEQ FNDLO1&#xA;        DEY&#xA;        BNE AFFRTS      ;ALWAYS BRANCH.&#xA;FNDLO1: LDA LINNUM&#xA;        DEY&#xA;        CMPDY   LOWTR       ;COMPARE LOW ORDERS.&#xA;        BCC FLNRTS      ;NO SUCH NUMBER.&#xA;        BEQ FLNRTS      ;GO TIT.&#xA;AFFRTS: DEY&#xA;        LDADY   LOWTR       ;FETCH LINK.&#xA;        TAX&#xA;        DEY&#xA;        LDADY   LOWTR&#xA;        BCS FNDLNC      ;ALWAYS BRANCHES.&#xA;FLINRT: CLC         ;C MAY BE HIGH.&#xA;FLNRTS: RTS         ;RETURN TO CALLER.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The code uses a lot of INY and DEY instructions, even though the value of Y at any given spot in the code will always be the same; using an &lt;code&gt;LDY #1&lt;/code&gt; rather than &lt;code&gt;DEY&lt;/code&gt; at &lt;code&gt;AFFRTS&lt;/code&gt; would have allowed &lt;code&gt;BEQ FNDL01 / DEY / BNE AFFRTS&lt;/code&gt; to be replaced with &lt;code&gt;BNE AFFRTS&lt;/code&gt;.  Further, &lt;code&gt;INY INY&lt;/code&gt; could be cheaply replaced with &lt;code&gt;LDY #3&lt;/code&gt; and eliminate the need for the preceding &lt;code&gt;LDY #1&lt;/code&gt;.  Further, the use of X:A to hold a temporary high/low address foregoes the possibility of using (ind,x) mode [with x set to zero] which could help eliminate some of the gymnastics with Y.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, if the code was based on a reworking of a similar algorithm on the 8080, the use of INY/DEY could make sense since the effects would be analogous to incrementing or decrementing HL on the 8080.  On the 8080, code could rather efficiently do something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; Using Z80 mnemonics for 8080 opcodes&#xA;loop:&#xA;    ex      de,hl&#xA;start:&#xA;    ld      e,(HL)  ; Fetch link LSB&#xA;    inc     HL&#xA;    ld      d,(HL)  ; Fetch link MSB&#xA;    inc     HL&#xA;    ld      a,c     ; Line number LSB&#xA;    sub     a,(HL)&#xA;    inc     hl&#xA;    ld      a,b     ; Line number MSB&#xA;    sbc     a,(HL)&#xA;    jc      lp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For the 6502, a more efficient approach would be to have each line preceded by a length byte, allowing something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;start:&#xA;     lda     linNum+1&#xA;     sta     lnTemp&#xA;     ldy     #2&#xA;     ldx     #0&#xA;loop:&#xA;     lda     (ptr),y&#xA;     cmp     lnTemp   ; Carry clear if looking for &amp;lt; what's there&#xA;     bcs     oddBall&#xA;     lda     ptr&#xA;     adc     (ptr,x)&#xA;     sta     ptr&#xA;     bcc     loop&#xA;     inc     ptr+1&#xA;     bcs     lp       ; Carry still set from before&#xA;oddBall:&#xA;     bne     notFound&#xA;     lda     lnNum    ; Do other byte of line # if we haven't yet&#xA;     sta     lnTemp&#xA;     dey&#xA;     bne     loop     : If not equal, we need to do LSB of line #&#xA;     clc&#xA;notFound:&#xA;     rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Only 25 cycles per line in the common case, with an extra 7-8 cycles on each page crossing (depending upon whether the &lt;code&gt;lda(ind),y&lt;/code&gt; crossed a page).  So about twice as fast as the original code.  This code would rely upon the 6502's ability to directly access two addresses relative to (ind) without having to manipulate any index registers, which is something the 8080 couldn't do, but exploiting that ability could have made things much faster.  Further, it benefits from the fact that adding an 8-bit value to a 16-bit pointer is much faster than loading a 16-bit value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the 8080 BASIC use routines which largely mirror the logic of the 6502 versions, thus suggesting that the 6502 was strongly derived from it?  Or was Bill Gates simply following the coding style of a processor other than the 6502 (perhaps an 8080, or maybe PDP-10 or something else)?&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="576" LastEditDate="2017-11-09T14:58:19.963" LastActivityDate="2019-10-31T18:40:33.203" Title="Was the design of MS-BASIC for 6502 based on MS-BASIC for 8080?" Tags="&lt;basic&gt;&lt;6502&gt;&lt;microsoft-basic&gt;" AnswerCount="4" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4949" PostTypeId="2" ParentId="4948" CreationDate="2017-10-28T20:39:32.840" Score="14" Body="&lt;p&gt;I've seen a number of articles, such as &lt;a href=&quot;https://www.itworld.com/article/2872659/the-source-code-behind-microsoft-basic-for-6502-comes-to-light.html&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt; which states it was based on 8080 BASIC, and &lt;a href=&quot;http://www.pagetable.com/?p=43&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt; which states that 8080 BASIC was first ported to the 6800, which was translated to the 6502. It would make sense to take the methods used in 8080 BASIC and use them on other processors.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2017-10-28T20:39:32.840" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4950" PostTypeId="2" ParentId="2415" CreationDate="2017-10-28T21:59:52.167" Score="5" Body="&lt;p&gt;After MUCH searching, I found it. But I can't find ANY details about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's called &quot;Robot R&amp;amp;D&quot; for the Unisys ICON, a computer made for schools in the 80's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone know where I can find this?!?!&lt;/p&gt;&#xA;" OwnerUserId="4578" LastActivityDate="2017-10-28T21:59:52.167" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4951" PostTypeId="2" ParentId="4894" CreationDate="2017-10-29T20:57:21.743" Score="5" Body="&lt;p&gt;After doing some research, and some downloading, and some experimenting, I eventually settled on DI-SECTOR 3.0 from StarPoint Software (1985).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tad6Y.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tad6Y.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What sold me on DI-SECTOR was the Text and Hexidecimal representations for the current sector are both on-screen at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/704KZ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/704KZ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many of the sector editors I looked at would only show the textual representation for the current sector and then only display the hex value for your current cursor position, which seemed overly cumbersome.  I find the full display of both views to be far more friendly and closer to what I would expect from a modern hex editor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DI-SECTOR 3.0 was easy enough to navigate, and with a copy of Inside Commodore DOS it was simple enough to traverse the BAM, directory entries, file blocks, and do repair work to damaged data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully this helps someone else in the future!  Enjoy!&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2017-10-29T20:57:21.743" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4953" PostTypeId="2" ParentId="4905" CreationDate="2017-10-30T17:30:45.443" Score="6" Body="&lt;p&gt;Given that the clock part in the Электроника ИМ series, according to the wiki page, was not modified to support the customary in the USSR 24-hour mode, it is likely that there was no electronic design whatsoever, and the only thing that was designed anew were the new game scenarios and the new LCD panels that could be supported by the existing underlying game mechanisms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Small differences in the displayed picture could be handled by a few additional discrete logic elements. For example, the target in the Biathlon game corresponds to the last (lowest) position of an egg, but when it is displayed, the figure of a biathlonist should not disappear. Therefore the signal to display it would be a logical OR of the signal &quot;egg in the lowest position&quot; and the signal &quot;egg in the next to lowest position&quot;. &lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-10-30T17:30:45.443" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4954" PostTypeId="2" ParentId="3246" CreationDate="2017-10-30T18:40:15.487" Score="5" Body="&lt;p&gt;I found everything I needed, but the hunting was tough. I've uploaded all of the dependancies as well as the documentation of what I've done so far here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://andrew.colchagoff.com/netscape/&quot; rel=&quot;noreferrer&quot;&gt;http://andrew.colchagoff.com/netscape/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2187" LastActivityDate="2017-10-30T18:40:15.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4955" PostTypeId="1" AcceptedAnswerId="4958" CreationDate="2017-10-31T08:33:12.997" Score="10" ViewCount="1489" Body="&lt;p&gt;There's this old piece of software still present in today's Windows called SAM that enabled C64 to speak. I remember that we could choose either screen on and worse speech quality or screen off and better quality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did it work that way? Did SAM use &quot;varying SID volume = 4 bit digital audio&quot; trick, thus blanking the screen allowed better sample rate for phonemes?&lt;/p&gt;&#xA;" OwnerUserId="7038" LastActivityDate="2019-03-12T12:58:38.530" Title="Why did blanking of screen on C64 SAM enable better quality speech synthesis?" Tags="&lt;commodore-64&gt;" AnswerCount="3" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="4956" PostTypeId="1" CreationDate="2017-10-31T09:07:35.150" Score="4" ViewCount="310" Body="&lt;p&gt;Say we have a terminal (for example: &lt;strong&gt;VT100&lt;/strong&gt;) that is connected to a computer (for example: &lt;strong&gt;PDP-11&lt;/strong&gt;), and UNIX V7 is installed on the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The terminal will have a serial port that is connected though a wire to a serial port on the computer, right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now could we change the baud rate for these two serial ports, or is the baud rate fixed?&lt;/p&gt;&#xA;" OwnerUserId="7039" LastEditorUserId="276" LastEditDate="2017-10-31T10:17:35.713" LastActivityDate="2017-10-31T18:40:23.817" Title="Could we change the baud rate for the two serial ports on a terminal and on a computer?" Tags="&lt;hardware&gt;&lt;unix&gt;&lt;terminal&gt;&lt;pdp-11&gt;&lt;vt100&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4957" PostTypeId="2" ParentId="4956" CreationDate="2017-10-31T09:18:30.933" Score="9" Body="&lt;p&gt;The short answer is yes.  You can change the baud rate of a VT100 talking to a PDP-11.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the VT100, this is simply done using the &lt;em&gt;Set Up&lt;/em&gt; facility.  This is entered using the &lt;kbd&gt;Set Up&lt;/kbd&gt; key on the top left of the VT100 keyboard.  This takes the VT100 offline and into a configuration mode.  Then press &lt;kbd&gt;5&lt;/kbd&gt; to take you to a screen where you can change the baud rate by moving the cursor to the appropriate value and using &lt;kbd&gt;space&lt;/kbd&gt; to cycle through the available values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is described in more detail in the online &lt;a href=&quot;https://vt100.net/&quot; rel=&quot;noreferrer&quot;&gt;VT100 Manuals&lt;/a&gt; in &lt;a href=&quot;https://vt100.net/docs/tp83/chapter5.html&quot; rel=&quot;noreferrer&quot;&gt;Chapter 5&lt;/a&gt;.  Note that the input and output speeds can be set separately.  This was useful in the days of split-rate modems like the CCITT V23 standard used for services like &lt;a href=&quot;https://www.viewdata.org.uk/index.php?cat=15_Prestel&quot; rel=&quot;noreferrer&quot;&gt;Prestel&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the PDP-11 end, the baud rate was usually set with jumpers or DIP switches on the serial interface board.  To describe how to do this would depend upon which serial card you have.  Many later machines would auto-detect the baud rate from the attached terminal - just tap a key a few times and the PDP-11 would configure itself.  However, this often didn't work with split baud rates as it is only looking at incoming data.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-10-31T09:31:27.227" LastActivityDate="2017-10-31T09:31:27.227" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4958" PostTypeId="2" ParentId="4955" CreationDate="2017-10-31T09:42:14.433" Score="20" Body="&lt;h3&gt;How SAM works&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;SAM was written to be usable on many different computers. So instead of using the SID chip in the usual way, the CPU has to work to sample the phonemes itself. The SID could have taken a lot of that on, since it has its own oscillators, waveform generators, ASDR volume control, and all that. This would all have been very useful in speech synthesis, but it is not used because the program was written to be portable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For most phonemes, the program &lt;a href=&quot;https://github.com/s-macke/SAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;does a tight loop&lt;/a&gt;, which gets two sine waves and one &lt;a href=&quot;https://en.wikipedia.org/wiki/Rectangular_function&quot; rel=&quot;nofollow noreferrer&quot;&gt;rectangular function&lt;/a&gt;, each at a different frequency and each scaled by an amplitude, adds these three together, and stores the result (divided by a constant) in the SID's master volume register. That's good for sounding out continuants&lt;sup&gt;1&lt;/sup&gt;. For other phonemes, say the sibilants&lt;sup&gt;2&lt;/sup&gt;, random data and other tables were used instead. And for plosives&lt;sup&gt;3&lt;/sup&gt;, I'd wager the same thing was done, but the amplitude was simply altered with each loop iteration. This arrangement, with the looping, scaling, adding, as you can imagine, takes more than a few cycles on the lowly 6502. And it is very sensitive to timing because even a few cycles here and there will change the resulting soundwave quite drastically.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Fine, but what's it got to do with blanking the screen?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;On the C64, if the screen is being displayed&lt;sup&gt;4&lt;/sup&gt;, then every so often the CPU gets halted for some time, to allow the video chip to read the memory faster. &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/3208/when-does-the-vic-ii-read-the-sprite-data&quot;&gt;Between 40 and 62 cycles (depending on various details)&lt;/a&gt; are taken from the CPU in this way every 8 scanlines (again, depending on various details). These scanlines are called badlines, and under normal operation there are either 24 or 25 of them per frame. That means the CPU loses 960-1550 cycles every frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU on a European C64 ran at 985 KHz, and so 1000 machine cycles is 1.015 milliseconds. That's about the amount of time, per frame, during which the CPU may not run if it is stopped by the graphics chip, which means those loops I talked about do not run during that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it comes to normal human speech, a phoneme lasts only a very short amount of time. A phoneme can easily last less than, say, fifty milliseconds. Losing even 40 machine cycles puts a considerable dent in that timeslice, so they made sure that wouldn't happen, by making sure no badlines would happen, by making sure no text or graphics would get displayed.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;: continuants are vowels and consonants which can be elongated, like &lt;code&gt;m&lt;/code&gt;, &lt;code&gt;i&lt;/code&gt;, &lt;code&gt;s&lt;/code&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt;: sibilants (a subclass of continuants) are consonants like &lt;code&gt;s&lt;/code&gt;, &lt;code&gt;z&lt;/code&gt;, &lt;code&gt;f&lt;/code&gt;, &lt;code&gt;th&lt;/code&gt; etc. which work by constricting airflow so that it kind of hisses in the mouth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;3&lt;/sup&gt;: stops (aka plosives), are consonants that involve blocking and then releasing airflow, like &lt;code&gt;p&lt;/code&gt;, &lt;code&gt;k&lt;/code&gt;, &lt;code&gt;g&lt;/code&gt;. These sound very different from start to the finish, and cannot be pronounced for a long time&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;4&lt;/sup&gt;: The VIC-II has a bit in register $d011, which blanks the display. It disables all badlines too.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-03-12T12:58:38.530" LastActivityDate="2019-03-12T12:58:38.530" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="4959" PostTypeId="2" ParentId="4948" CreationDate="2017-10-31T15:44:47.557" Score="8" Body="&lt;p&gt;Bill Gates and/or Paul Allen likely did not write the 6502 version of Basic.  Marc McDonald, one of the very first Microsoft employees, is reported (on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Applesoft_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia page for Applesoft BASIC&lt;/a&gt;, for instance) as having written the 6502 version of Microsoft Basic. But he would have had access to all the source code to Gates and Allen's 8080 BASIC, as well as the same DEC computer on which to run a cross-assembler.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2017-10-31T15:44:47.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4960" PostTypeId="2" ParentId="4955" CreationDate="2017-10-31T15:50:56.643" Score="11" Body="&lt;p&gt;SAM ran on several systems, including the C64, the Atari 400/800, and, via a 6-bit DAC board that went in one of the peripheral slots, the Apple II.  The voice synthesis algorithms were later ported to 68000 for the Mac and the Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Timing jitter of the sample clock of an audio DAC causes distortion (unwanted severe phase and/or frequency modulation).  On 6502 systems, the sample timing for the SAM audio output to DAC was done in software by using code paths and loops with known CPU cycle timings.  So anything that could vary the timing of the software timing loops could distort the synthesized voice.  Leaving the display enabled can cause a number of things (interrupts, screen refresh memory fetches, etc.) that could vary the the number of clock cycles taken by software timing loops and paths.  Thus, blanking the display reduced potential distortion of the audio output due to DAC sample timing jitter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Video blanking was not needed for synthesized audio on the Mac and Amiga because audio DAC timing was done in hardware rather than by software timing loops.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2018-12-17T23:52:51.093" LastActivityDate="2018-12-17T23:52:51.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="4961" PostTypeId="2" ParentId="4956" CreationDate="2017-10-31T18:40:23.817" Score="2" Body="&lt;p&gt;If the DTE and DCE are physically connected (i.e. a serial cable between them) and those endpoints support changing speeds then the speeds can definitely be changed mid-stream.  The example would be two terminals on either side of a null modem.  If the terminals both reconfigured from, say, 9600 baud to 19.2k the session would continue (..possibly with some transitory loss if the switchover wasn't perfectly simultaneous).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It gets more complicated if there are modems involved.  With older, lower-speeds it was possible to change baud rates mid-session &lt;em&gt;if&lt;/em&gt; the modems were hardware switchable.  As an example, two terminals connected to 300/1200 (or 110/300) baud modems where rate was selected from the front panel could change speeds mid-session if the terminals were software switched or automatically detecting.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For higher speed links (9600 baud+) things got &lt;em&gt;much&lt;/em&gt; more complicated, as the modems were constantly renegotiating based on line conditions - not to mention often switching rates depending on who was transmitting (many modems were 9600+ in one direction and 300-450 in the other).  These modems tended to lock the speeds toward their DTE's, though - usually at a much higher speed than the modulating side could theoretically support.  Changing terminal rates in that situation was a non-starter.&lt;/p&gt;&#xA;" OwnerUserId="3691" LastActivityDate="2017-10-31T18:40:23.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4962" PostTypeId="1" AcceptedAnswerId="4966" CreationDate="2017-10-31T21:41:12.590" Score="4" ViewCount="1147" Body="&lt;p&gt;Not &lt;em&gt;that&lt;/em&gt; retro, but still over 20 years ago:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for the name of a game that was around in 1995, 1996 (Windows 95 era, although I think it was a DOS game) which I played on my 120MHz Pentium (later overclocked to a whopping 133MHz, yay!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, here are some details I remember:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Basically a racing game with hovering vehicles &lt;/li&gt;&#xA;&lt;li&gt;The vehicles are armed and you could shoot down your opponents&lt;/li&gt;&#xA;&lt;li&gt;The tracks are of circular style in different terrains (I remember dirt tracks and snow tracks, but there were more)&lt;/li&gt;&#xA;&lt;li&gt;You get rescued by aircraft in case you are totaled (or if you run out of fuel if I remember correctly)&lt;/li&gt;&#xA;&lt;li&gt;Very nice graphics for the era (it was praised for raphics quality as well as overall gameplay)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6478" LastActivityDate="2017-11-01T09:18:51.667" Title="Game from the mid-nineties with hovering vehicles" Tags="&lt;gaming&gt;&lt;identify-this-game&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4963" PostTypeId="2" ParentId="4962" CreationDate="2017-10-31T21:59:02.830" Score="1" Body="&lt;p&gt;Was it &lt;a href=&quot;https://youtu.be/xt-HixevAP8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zone Raiders&lt;/a&gt;? It came out in 1995 for DOS and Macintosh.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2017-10-31T21:59:02.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4964" PostTypeId="2" ParentId="4962" CreationDate="2017-10-31T22:04:24.307" Score="3" Body="&lt;p&gt;This game might have been Wipeout 2097. My brother and I used to play it on the Playstation 1, but it was available on Windows too. It came out in 1996.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2017-11-01T09:18:51.667" LastActivityDate="2017-11-01T09:18:51.667" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4965" PostTypeId="1" CreationDate="2017-11-01T01:33:49.313" Score="46" ViewCount="23481" Body="&lt;p&gt;In the UNIX V7 version of the C language (but not yet in the V6 version), there were the  &lt;code&gt;/\&lt;/code&gt; (min) and the &lt;code&gt;\/&lt;/code&gt; (max) operators. In the source of the &lt;a href=&quot;http://www.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/c/c00.c&quot; rel=&quot;noreferrer&quot;&gt;scanner part of the compiler&lt;/a&gt;, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;case BSLASH:&#xA;    if (subseq('/', 0, 1))&#xA;        return(MAX);&#xA;    goto unkn;&#xA;&#xA;case DIVIDE:&#xA;    if (subseq('\\', 0, 1))&#xA;        return(MIN);&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, attempting to use them reveals that the corresponding part in the code generator is missing. Trying to compile&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;foo(a, b) { return a \/ b; } &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;results in&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1: No code table for op: \/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Granted, using the otherwise &quot;magic&quot; backslash character for those operators was not a good choice, but why abandon things half-way? I don't remember any mention of them in the literature. What's the story behind them? (Ken Thompson was reported &amp;mdash; on another mailing list where I linked to this question &amp;mdash; as saying that the piece of code is news to him.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the &lt;a href=&quot;http://www.tuhs.org/cgi-bin/utree.pl?file=Xinu7/src/cmd/cc11/c00.c&quot; rel=&quot;noreferrer&quot;&gt;Xinu7 source&lt;/a&gt; dated 1986, the MIN and MAX operators in the parser are still there, and the code generation table still lacks the implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the &lt;a href=&quot;http://www.tuhs.org/cgi-bin/utree.pl?file=pdp11v/usr/src/cmd/cc/cc/c00.c&quot; rel=&quot;noreferrer&quot;&gt;&quot;PDP-11 3+2&quot; source&lt;/a&gt;, dated 1983, they are also there. &lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2017-11-08T23:20:00.337" LastActivityDate="2021-05-26T04:38:31.170" Title="Why were the /\ (min) and the \/ (max) operators abandoned in the C language?" Tags="&lt;unix&gt;&lt;pdp-11&gt;&lt;compilers&gt;&lt;c&gt;" AnswerCount="2" CommentCount="18" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4966" PostTypeId="2" ParentId="4962" CreationDate="2017-11-01T02:02:01.333" Score="8" Body="&lt;p&gt;It could be Hi-Octane. It was released in 1995 on PC, Playstation and Saturn. &#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Hi-Octane&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Hi-Octane&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably quite a similar style to Wipeout, though not as popular. It was a racing game with hovering vehicles. You could shoot at your opponents. You had to pick up fuel, ammo and shields around the course to keep going. There was a few different courses, including one with snow/ice, where you had less grip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fS4SNvJBVPE&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=fS4SNvJBVPE&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7041" LastActivityDate="2017-11-01T02:02:01.333" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4967" PostTypeId="2" ParentId="3032" CreationDate="2017-11-01T02:21:27.150" Score="4" Body="&lt;p&gt;It's a little weirder than that.  First and foremost, as @Leo B. says, devices have always been identified by device major and minor numbers.  Always remember that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the old days, the serial terminals (including things like 20ma current loop terminals like ASR-33 teletypes) were accessed as /dev/tty#.  Others have discussed this; it's a historical artifact.  Some programs (e.g. old versions of getty) hard-coded this assumption. This enshrined it in history.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also commonly /dev/cua# devices, which were serial devices with modem control.  Less commonly, /dev/ttyd# and /dev/cul# were modem lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Over time, some tty's became aliased to /dev/modem, /dev/console, /dev/mouse and other more mnemonic names.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then things got really weird, with psuedo-ttys.  This was the tty abstraction multiplexed over a single connection, and was used for things like X Windows, System V Streams, MPX/Layer, etc.  These show up as /dev/vty#, /dev/pty#, /dev/pt/#, etc.  The nice thing is that individual psuedo-ttys still by and large obey the same semantics as the old serial ttys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I recall, the /dev/ttyS# convention is actually relatively recent.  I &lt;em&gt;think&lt;/em&gt; it came along with Xenix, but it may have been one of the SysV/x86 ports.  It was a way to recognize IBM PC serial ports, with ttyS0 being DOS COM1, ttyS1 being DOS COM2, etc.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2017-11-01T02:21:27.150" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4968" PostTypeId="1" AcceptedAnswerId="4969" CreationDate="2017-11-01T10:32:44.000" Score="6" ViewCount="1224" Body="&lt;p&gt;I want to start an application after the boot sequence of &lt;code&gt;Workbench1.3&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xbarl.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xbarl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my case an &lt;code&gt;Amiga Shell&lt;/code&gt; application:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1VJ6V.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1VJ6V.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where are the startup files located and what are the changes to provide this?&lt;/p&gt;&#xA;" OwnerUserId="69" LastActivityDate="2017-11-02T20:21:15.250" Title="Start application after Amiga Workbench 1.3 boot sequence" Tags="&lt;amiga&gt;&lt;boot&gt;&lt;amiga-shell&gt;&lt;amiga-workbench-1.3&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4969" PostTypeId="2" ParentId="4968" CreationDate="2017-11-01T11:57:18.903" Score="10" Body="&lt;p&gt;You should start by adding your chosen commands to &lt;code&gt;S/User-Startup&lt;/code&gt; on your boot volume. You can also refer to it as &lt;code&gt;S:User-Startup&lt;/code&gt;; &lt;code&gt;S:&lt;/code&gt; will redirect to the S directory on the boot volume. This will definitely work on Workbench 2.04 and later, and may also work on earlier versions too (some application software &quot;backports&quot; the necessary support to Workbench 1.3 systems).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The command you want to add is simply:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;NewShell&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If this doesn't work, then your system most likely doesn't support S/User-Startup. This is normal on the earlier Workbench versions. In this case you'll have to make a change to the system startup file. This is called &lt;code&gt;S/Startup-Sequence&lt;/code&gt; on your boot volume.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last lines of this file, by default, will be something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LoadWB DELAY&#xA;EndCLI &amp;gt;NIL:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you add the command &lt;code&gt;NewShell&lt;/code&gt; in between these two lines, it should do what you are looking for.&lt;/p&gt;&#xA;" OwnerUserId="149" LastEditorUserId="149" LastEditDate="2017-11-02T20:21:15.250" LastActivityDate="2017-11-02T20:21:15.250" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4970" PostTypeId="2" ParentId="4965" CreationDate="2017-11-01T12:34:46.263" Score="17" Body="&lt;p&gt;(speculation, but I'm pretty confident in it)  Assuming &lt;code&gt;\/&lt;/code&gt; and &lt;code&gt;/\&lt;/code&gt; were actually used in early C to be max and min, someone probably quickly realized how totally stupid that symbology is.  They look like the long-accepted boolean operators for OR (&lt;strong&gt;∨&lt;/strong&gt;) and AND (&lt;strong&gt;∧&lt;/strong&gt;).  Having something you've been taught since high school means AND now stands for min in C would have been an extremely bad idea. It is equivalent to a computer language designer deciding that, in their language, the plus symbol (&lt;code&gt;+&lt;/code&gt;) should mean divide (÷).&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="15334" LastEditDate="2021-05-26T04:38:31.170" LastActivityDate="2021-05-26T04:38:31.170" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="4971" PostTypeId="2" ParentId="1095" CreationDate="2017-11-01T16:01:14.877" Score="2" Body="&lt;p&gt;There was a version of Mac OS 7.5 that was released by Apple on their ftp site. The last version of MPW was also released on the same site.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I develop using MPW on the Basilisk II emulator, which can be setup using these instructions: &lt;a href=&quot;http://emaculation.com/doku.php/basilisk_ii_setup&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://emaculation.com/doku.php/basilisk_ii_setup&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are still mirrors of apple's old ftp server available online (a google search will find them). This was the url for the last release MPW (which stuffit expander can extract):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;ftp.apple.com/developer/Tool_Chest/Core_Mac_OS_Tools/MPW_etc./MPW-GM_Images/MPW-GM.img.bin&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The url for the mac os 7.5 install files was every url in this ftp folder:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;/pub/apple/US/Macintosh/System/Older_System/System_7.5_Version_7.5.3/&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You may also need disk copy 6.3.3 to read the MPW image as well:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Disk_Copy_6.3.3.smi.bin&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7044" LastActivityDate="2017-11-01T16:01:14.877" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4972" PostTypeId="1" CreationDate="2017-11-01T16:56:16.457" Score="10" ViewCount="1211" Body="&lt;p&gt;This is vague, but I remember seeing several different arcade machines, probably in the early 90s, with various sorts of &quot;holographic&quot; 3D displays. By that I mean that they produced depth perception and at least a somewhat viewing-angle-dependent image without the player/viewer wearing any sort of glasses or headset. I believe they all utilized a display that was significantly sunk behind glass, so you couldn't get too close to it and the range of viewing angles was fairly limited. I seem to recall there being one or several such overhead-adventure games and maybe one fight game, but I may be mixing up memories of different (non-3D) games here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there actually such games? If so, what were their names and what type(s) of technology did they use for the displays? Some basic googling for holographic display yielded mostly technologies that would not have been around at the time and which look fancier that what I remember seeing.&lt;/p&gt;&#xA;" OwnerUserId="2070" LastEditorUserId="4921" LastEditDate="2020-01-16T06:35:05.593" LastActivityDate="2020-01-16T08:55:46.167" Title="&quot;Holographic&quot;/3D arcade games" Tags="&lt;identify-this-game&gt;&lt;display&gt;&lt;arcade&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4973" PostTypeId="2" ParentId="4972" CreationDate="2017-11-01T16:59:56.417" Score="13" Body="&lt;p&gt;Yes they existed, and they were produced by Sega, with the interactive movie &lt;a href=&quot;https://en.wikipedia.org/wiki/Time_Traveler_(video_game)&quot; rel=&quot;noreferrer&quot;&gt;Time Traveler&lt;/a&gt; being the most common though &lt;a href=&quot;https://en.wikipedia.org/wiki/Holosseum&quot; rel=&quot;noreferrer&quot;&gt;Holosseum&lt;/a&gt;, an upgrade kit for Time Traveler, is probably the fighting game you are thinking of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't a real hologram, obviously, but just a 2d image projected via a concave dome-shaped mirror to give the appearance of floating in space, with some abstract physical props placed around the outside of the display to give the general impression of a 3d scene. If you position it carefully relative to something like a light you can recreate the same effect using the bottom of a drinks or deoderant can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The process was invented and manufactured by Dentsu, using a Sony TV for display of the interactive portion of the game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some marketing fluff on Time Traveler can be seen &lt;a href=&quot;https://www.youtube.com/watch?v=9958AbBMG9w]&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; and a game of Holosseum on real hardware can be seen &lt;a href=&quot;https://www.youtube.com/watch?v=VC6yP425HEM&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-11-02T18:57:29.733" LastActivityDate="2017-11-02T18:57:29.733" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4974" PostTypeId="2" ParentId="4965" CreationDate="2017-11-01T20:00:01.773" Score="9" Body="&lt;p&gt;Assuming these operators were part of &quot;original C&quot; (I don't think so, see some comments):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main reason why these weren't followed up would probably be: C being what it is - a close-to-the-machine language - an operator in C would need to be aligned with at least some closely related machine instruction - Most of the C operators are. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not aware of any wide-spread architecture that had a machine instruction that produced the bigger (or smaller) of two values. Without that machine instruction, a compiler would have had to revert to compiler intrinsics, something that wasn't known as a concept back then (for good reasons).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the strong feeling that these operators were some sort of hack that was introduced (or partially introduced) to port C to some architecture that actually had such instructions, and then forgotten in the code. &lt;a href=&quot;http://csapp.cs.cmu.edu/3e/docs/chistory.html&quot; rel=&quot;noreferrer&quot;&gt;This text&lt;/a&gt; states, which might be a hint:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also during this period [Unix kernel programmed in C for the first time], the compiler was retargeted to other nearby machines, particularly the Honeywell 635 and IBM 360/370; &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-11-01T22:06:30.790" LastActivityDate="2017-11-01T22:06:30.790" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4975" PostTypeId="1" AcceptedAnswerId="4979" CreationDate="2017-11-02T08:14:45.657" Score="3" ViewCount="263" Body="&lt;p&gt;I am using a PDP-11 emulator with UNIX V7 installed on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;stty&lt;/code&gt; command returns the baud rate:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/O22VC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O22VC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To which serial card does this returned baud rate belongs to, is it the terminal serial card, or the PDP-11 serial card?&lt;/p&gt;&#xA;" OwnerUserId="7016" LastActivityDate="2017-11-02T13:37:15.593" Title="The baud rate of which serial card does the &quot;stty&quot; command returns in UNIX V7?" Tags="&lt;hardware&gt;&lt;pdp-11&gt;&lt;terminal&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4976" PostTypeId="2" ParentId="4975" CreationDate="2017-11-02T10:24:51.353" Score="4" Body="&lt;p&gt;The man page for &lt;code&gt;stty&lt;/code&gt; on my computer says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The &lt;code&gt;stty&lt;/code&gt; utility sets or reports on terminal characteristics for the device that is its standard input.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So it will be the device on which your terminal session is running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you type &lt;code&gt;who&lt;/code&gt; at the shell prompt, you should get a listing of who is logged in (just you, hopefully) including their terminal device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is in macOS but I do not think these commands have changed since v7 days.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2017-11-02T10:24:51.353" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4977" PostTypeId="2" ParentId="4975" CreationDate="2017-11-02T10:44:03.730" Score="2" Body="&lt;p&gt;Logic suggests it is only the &quot;local&quot; (host) side affected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any method to change the baudrate of a real physical terminal &lt;em&gt;via something sent down the serial line itself&lt;/em&gt; would be highly vendor specific - and in most cases, a bad idea. While this could theoretically be supported on a case-by-case basis by a termcap-like driver system, documentation for termcap shows no such capability, neither does the documentation for a VT100 - a typical terminal of that era - yield such control codes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, stty would have to use an in-band mechanism like that to modify any settings in the emulator. It is unlikely for an emulator to implement such control codes as an extension to the emulated device - they would make the emulation marginally incompatible since some faulty control codes that would be harmlessly ignored by a physical device could practically crash the emulator, especially if it is actually used on a serial line (which you can do).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An emulator not connected to some kind of pty (or machine-emulator interface) instead of an actual serial line has no use for the concept of emulating a serial line baudrate...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, mismatched baudrates or other line parameters on a real serial line will result in .. garbage, sometimes very low baudrate garbage if the parity mechanism catches most of it.&#xA;Setting these parameters was in practice done either via in-terminal setup menus or ... physical configuration switches.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-11-02T10:44:03.730" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4978" PostTypeId="2" ParentId="4955" CreationDate="2017-11-02T11:10:32.613" Score="1" Body="&lt;p&gt;As mentioned above, timing distortion, especially if your CPU is heavily involved in live video generation as it is in &quot;home computer&quot; style machines, is an issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, such designs did not tend to be very well screened internally, and power supply wiring (especially ground layout and filtering!) was not exactly optimized for a high-grade &quot;mixed signal&quot; type system. Fast rise pulses (the currency of digital electronics) and low level analog signals (the currency of audio) do not readily live in peace together: Digital circuitry does not mind if eg a ground is lifted by 100mV for a microsecond, and can easily CAUSE such interference. If the same ground is used for anything analog, this could cause an analog value at audio level to be misinterpreted by several percent of full scale...&#xA;Such problems have not even been fully eradicated from budget-grade, on board, sound cards in modern PCs: Audible interference from CPU activity is still commonly observed.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-11-02T11:10:32.613" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4979" PostTypeId="2" ParentId="4975" CreationDate="2017-11-02T13:17:03.103" Score="5" Body="&lt;p&gt;If you are able to see that message, the displayed baud rate kind of belongs to both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's supposed to belong to the serial port in the PDP-11 that your terminal is connected to -- this is the serial port that Unix is able to access and control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your terminal also has a serial port but Unix is not able to control it.  But note that if your terminal is running at a different speed from the PDP-11 serial port, then you won't be able to type commands or see results, because the speed one side sends at needs to match the speed the other side receives at (and vice-versa).  If the two sides are running at different speeds you'll just get garbage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you can type the &quot;stty&quot; command and see its output, that means your terminal must be running at the same speed as the PDP-11 serial port, and therefore the displayed baud rate can be applied to both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of the above applies to a real terminal attached to a real PDP-11.  If you are using an emulated PDP-11 then the displayed baud rate may mean nothing and the emulated PDP-11 serial ports may actually run at a very high speed (possibly much higher than any real serial port could ever do).  In that case the displayed baud rate should be taken only to mean &quot;if this were a real PDP-11 rather than a simulation, this would be the baud rate&quot;.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2017-11-02T13:37:15.593" LastActivityDate="2017-11-02T13:37:15.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4980" PostTypeId="2" ParentId="4917" CreationDate="2017-11-02T16:50:43.693" Score="1" Body="&lt;p&gt;Any machine-code program that does not rely on routines supplied by a full-on operating system can be &quot;installed directly to the hardware&quot; just as it is done with the BIOS: The machine code is written to some kind of ROM (an actual mask ROM - which is &quot;written to&quot; by sending your data on paper or as a file to a chip maker; an EPROM, which you can write from punch cards, paper tape, or a host computer via a dedicated programming device; or something modern like flash memory), which is then wired up to be in the memory address space where the CPU begins execution after a reset. &lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-11-02T16:50:43.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4981" PostTypeId="2" ParentId="333" CreationDate="2017-11-03T23:41:23.357" Score="5" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Sabre_(computer_system)&quot; rel=&quot;noreferrer&quot;&gt;SABRE system&lt;/a&gt; was an airline reservation system that spun off from &lt;a href=&quot;https://en.wikipedia.org/wiki/AN/FSQ-7_Combat_Direction_Central&quot; rel=&quot;noreferrer&quot;&gt;SAGE&lt;/a&gt;.  This was an IBM system and I believe the airline reservation terminals used &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Systems_Network_Architecture&quot; rel=&quot;noreferrer&quot;&gt;SNA&lt;/a&gt; and SDLC for the communication protocols.  I have a bunch of airline terminals as well and at some point would like to connect them up to something.  My thinking was to emulate SDLC using a microcontroller, or possibly other vintage IBM equipment.&lt;/p&gt;&#xA;" OwnerUserId="7053" LastActivityDate="2017-11-03T23:41:23.357" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4982" PostTypeId="2" ParentId="4917" CreationDate="2017-11-05T14:59:48.743" Score="2" Body="&lt;p&gt;When I did this sort of thing years ago, I wrote the interpreter in a different language (like C or PL/M) and then used a cross compiler to generate the code and a bit of assembler to set the start address.  This was just a jump instruction at FFFF:0 for 8086 ot 0 got the 8085/Z80.  The C compilers didn't generate efficient code, especially for the in/out statements so PL/M was the weapon of choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was then converted to a hex format - either Intel or Tektronix.  It was tested by downloading the code into an in-circuit emulator plugged into the hardware.  This allowed me to put breakpoints in ROM, patch the code etc.  After several iterations, it would be ready to release.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The release was in the form of PROMs. On 8-bit platforms, it was used as-is. On 16-bit platforms, it was split in two, odd in one, even in another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure what you mean by &lt;em&gt;how was this automated&lt;/em&gt;.  Once the build is complete, it is just a simple script to transfer the file over to the emulator.  There wasn't any form of source code control so a copy of the source code, along with the compilers and hex output were dumped on magnetic tape and this was archived with a set of PROMs, the release note and any supporting documentation.  This was the master copy: shop floor made a copy of that for mass production.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2017-11-05T14:59:48.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4983" PostTypeId="2" ParentId="1858" CreationDate="2017-11-05T16:19:35.483" Score="-1" Body="&lt;p&gt;One method I'd been told about is the use of an electron microscope to scan the layers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another engineer told me around 1990 that he'd seen this being done. Sorry I can't elaborate more but there's text on the interweb.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastEditorUserId="5199" LastEditDate="2017-11-08T10:19:49.510" LastActivityDate="2017-11-08T10:19:49.510" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4984" PostTypeId="1" CreationDate="2017-11-06T20:24:20.387" Score="8" ViewCount="735" Body="&lt;p&gt;Traf-O-Data was the first business partnership between Paul Allen, Bill Gates and Paul Gilbert. In order to develop the software for their custom-built Traf-O-Data machine (Intel 8008 Inside&amp;trade;), Paul Allen programmed an 8008 simulator for the IBM 360.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;We taught ourselves to simulate how microprocessors work using DEC computers, so we could develop software even before our machine was built. — &lt;a href=&quot;http://archive.fortune.com/magazines/fortune/fortune_archive/1995/10/02/206528/index.htm&quot; rel=&quot;noreferrer&quot;&gt;Paul Allen&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This 8008 simulator was later modified to become Microsoft's 8080 simulator.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How was the Traf-O-Data Intel 8008 simulator developed?&lt;/li&gt;&#xA;&lt;li&gt;What references (documents, machines) were used?&lt;/li&gt;&#xA;&lt;li&gt;How did they ensure that it was a faithful emulation before their machine was built?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="278" LastActivityDate="2017-11-06T20:59:45.400" Title="How was the Traf-O-Data 8008 simulator developed?" Tags="&lt;history&gt;&lt;emulation&gt;&lt;software-development&gt;&lt;ibm&gt;&lt;8008&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4985" PostTypeId="2" ParentId="4984" CreationDate="2017-11-06T20:55:19.413" Score="9" Body="&lt;p&gt;I suspect a full answer is improbable, but to offer &lt;a href=&quot;http://americanhistory.si.edu/comphist/gates.htm#tc11&quot; rel=&quot;noreferrer&quot;&gt;a fragment&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;He took the Macro 10 Assembler and defined macro, so we could just&#xA;  type in sort of a form of 8080 code. Then he modified the DDT-10, the&#xA;  symbolic debugger that was on the 10, to understand these&#xA;  instructions. He then wrote a simulator to simulate these&#xA;  instructions.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;And, because we'd never had the chip, just the book from Intel, if we had made any mistake in terms of how the instructions worked, the thing never would have run. [...]  Paul was scheduled to fly out to Albuquerque. He decided to go get some sleep. I stayed up all night reading the book to see if we'd miscoded some of the instructions. And finally, decided it was all okay, punch out the paper tape, and made sure Paul got that before he went off on his plane. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So as to your first question of how, it sounds like the simulator may actually have been, or have started as, a static recompiler — they not just wrangled 8080-esque syntax via macro, but also ensured that the symbolic debugger could &quot;understand these instructions&quot;. I cannot make sense of attaching a machine's native debugger and teaching it to understand macro-sourced compounds as anything other than static recompilation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am further assuming that since it is documented that the 8080 simulator is a code adaptation of the 8008 simulator, Gates is speaking in aggregate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that a simulator is then mentioned as a third step I'd dare imagine it went:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;macros to provided 8008-esque syntax, assembling into sets of instructions that simulate 8008 behaviour;&lt;/li&gt;&#xA;&lt;li&gt;adapt the debugger to understand that;&lt;/li&gt;&#xA;&lt;li&gt;start coding the intended product, using tools developed so far to try to get correct code;&lt;/li&gt;&#xA;&lt;li&gt;simultaneously write a simulator, little more than a fetch-dispatch lookup loop;&lt;/li&gt;&#xA;&lt;li&gt;use that as a way to verify real 8008 bytecode, once you're at the stage of taking your correct code and ensuring that it is efficient for time and space.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As to testing correctness, it sounds like all they had was the official documentation from Intel. Luckily Intel documentation of the era tended to be reasonably complete and accurate as far as it went. Likely they just declined to try to use any functionality that wasn't sufficiently well specified. That specific quote is about the Altair 8080 BASIC rather than the 8008 so one can at most speculate a similar process: build the software from the official documentation, test as and when a real opportunity arises but due to resource availability, not until very late.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-11-06T20:59:45.400" LastActivityDate="2017-11-06T20:59:45.400" CommentCount="5" CommunityOwnedDate="2017-11-06T22:00:14.693" ContentLicense="CC BY-SA 3.0" />
  <row Id="4986" PostTypeId="2" ParentId="4438" CreationDate="2017-11-08T11:43:02.980" Score="3" Body="&lt;p&gt;I think the game described is Rastan, a coin-op from Taito, later converted to several formats by Ocean Software, as is the case at hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rastan_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rastan description in Wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kind regards.&lt;/p&gt;&#xA;" OwnerUserId="7067" LastEditorUserId="7067" LastEditDate="2017-11-08T11:55:28.150" LastActivityDate="2017-11-08T11:55:28.150" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4987" PostTypeId="2" ParentId="4438" CreationDate="2017-11-08T17:04:25.740" Score="2" Body="&lt;p&gt;Although already answered, there was a whole genre of these games in the late 80s. Another was &lt;a href=&quot;https://en.wikipedia.org/wiki/Savage_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Savage&lt;/a&gt; by Probe Software for Firebird. The game is mostly forgettable, but it did have unbelievably good (for the time, and if you liked hokey takes on &lt;em&gt;The Art of Noise&lt;/em&gt;) music by Kevin Collier: &lt;a href=&quot;https://www.youtube.com/watch?v=b8NDwMqaGWA&quot; rel=&quot;nofollow noreferrer&quot;&gt;Savage (Amiga) - Level 1&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-11-08T17:04:25.740" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4988" PostTypeId="1" CreationDate="2017-11-08T17:32:01.233" Score="8" ViewCount="632" Body="&lt;p&gt;I want to create my own boot disk (an image file to use with simh) from my own PDP-11 code but I don't know how the code needs to be written to the disk/file so that it boots. I can load my code using absolute loader but I want to use a disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the format of PDP-11 disks that the computer will load code from at boot?&lt;/p&gt;&#xA;" OwnerUserId="7070" LastEditorUserId="278" LastEditDate="2017-11-08T17:40:58.830" LastActivityDate="2017-11-09T15:54:57.060" Title="Creating a PDP-11 bootable disk" Tags="&lt;pdp-11&gt;&lt;disk-image&gt;&lt;boot&gt;&lt;file-system&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4990" PostTypeId="2" ParentId="4988" CreationDate="2017-11-09T15:54:57.060" Score="6" Body="&lt;p&gt;There is no specific 'format' required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a real PDP-11, what happens at bootup depends on what kind of boot PROM you have installed.  In general, for disk-type devices the convention is to load the first block then jump to the code in that block.  If you don't have a boot PROM for the device you want to boot from, you may have to toggle in a bootloader yourself (if your PDP-11 doesn't have console switches you can usually &quot;toggle in&quot; code using the console terminal instead).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a web page containing sample bootloader code for various devices (including some non-disk devices):&#xA;&lt;a href=&quot;http://www.psych.usyd.edu.au/pdp-11/bootstraps.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.psych.usyd.edu.au/pdp-11/bootstraps.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So effectively the only requirement to be able to boot is, you must work within whatever limits your boot PROM imposes.  Typically this means you're limited to 256 words (512 bytes), and sometimes the first word must have a specific value for the boot block to be considered valid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond the first block (the &quot;boot block&quot;), there are usually no requirements on disk format.  Normally the format of the disk will be determined by the operating system you are booting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to, you can simply have your program occupy the blocks that follow consecutively after the boot block, and put a small program into the boot block that just loads those additional blocks, then jumps to the first one.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-11-09T15:54:57.060" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4991" PostTypeId="2" ParentId="4388" CreationDate="2017-11-09T16:01:10.880" Score="6" Body="&lt;p&gt;No, it wasn't considered really secure. In fact several programs existed at the time, including small &quot;type-ins&quot; available in magazines for removing that exact protection. There are some of them listed in the &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Programming:Unlocking_a_protected_basic_file&quot; rel=&quot;noreferrer&quot;&gt;CPCWiki&lt;/a&gt;, which are no longer than 3 lines of BASIC (well, sort of) code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not entirely sure when the first such program appeared on a magazine, but it definitely didn't take long; after all, there were ways to unlock for far more advanced protection schemes (including disk and tape &quot;locking&quot;).&lt;/p&gt;&#xA;" OwnerUserId="211" LastActivityDate="2017-11-09T16:01:10.880" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4992" PostTypeId="1" AcceptedAnswerId="4994" CreationDate="2017-11-10T14:08:39.643" Score="32" ViewCount="5505" Body="&lt;p&gt;Many of the most popular personal computers and video game consoles of the 1970s and 1980s, including those made by Commodore, Apple, and Atari, used the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502&quot; rel=&quot;noreferrer&quot;&gt;6502&lt;/a&gt; CPU (or some close relative, such as the 6507 or 6510).  These processors were manufactured by &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology&quot; rel=&quot;noreferrer&quot;&gt;MOS Technology&lt;/a&gt;, a company that was owned and operated by &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_International&quot; rel=&quot;noreferrer&quot;&gt;Commodore&lt;/a&gt; from 1976 to 1994.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am curious as to why Commodore deigned to sell CPUs to its very fiercest competitors.  For example, in the midst of the intense sales rivalry between the Commodore 64, the Apple II, and the Atari XL, would it not have made better business sense for Commodore to take its microprocessors off the market, pulling the rug out from under its competitors and driving consumers to its own computers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can think of a number of &lt;em&gt;possible&lt;/em&gt; explanations.  For example, perhaps Commodore was making more money off its 65xx sales to Apple and Atari than it was losing to them in the home computer wars.  Or maybe Apple and Atari had sales agreements with MOS Technology that predated its acquisition by Commodore and that couldn't be renegotiated.  Or maybe Commodore was convinced that its competitors could quickly replace their MOS chips with clones.  I'm not sure which of these explanations, if any, may be correct.  Is there any documented evidence one way or another?&lt;/p&gt;&#xA;" OwnerUserId="6527" LastActivityDate="2021-05-04T19:31:24.407" Title="Why did Commodore sell CPUs to its competitors?" Tags="&lt;hardware&gt;&lt;history&gt;&lt;commodore&gt;&lt;mos-650x&gt;" AnswerCount="6" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4994" PostTypeId="2" ParentId="4992" CreationDate="2017-11-10T15:40:28.117" Score="33" Body="&lt;p&gt;The 6502 was designed and manufactured before Commodore bought MOS Technology, the creator of the 6502. MOS Technology didn't originally plan to build computers. They wanted to sell the 6502 to companies who wanted to build computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back then, anyone planning to bring an electronic device to the market wouldn't choose any chip that didn't have multiple manufacturers, in order to ensure that if one manufacturer went under or decided not to sell to them, they could easily go to another manufacturer, so MOS Technology licensed the 6502 design to Synertek and Rockwell. This is simply how business was done in the chip industry back then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Atari bought their 6502 from MOS Technology. Steve Wozniak bought his first 6502 directly from MOS Technology but I believe they used other manufacturers later on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MOS Technology would certainly make more money licensing the design to other manufacturers to increase the confidence of system designers to choose the 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not know whether canceling the Synertek and Rockwell licenses later on would have been legally possible, or what the repercussions might have been if they did so. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, after Commodore bought MOS Technology, Chuck Peddle, one of the designers of the 6502, convinced Jack Tramiel that computers were the future. So they built the Commodore PET.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2017-11-10T15:40:28.117" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4995" PostTypeId="2" ParentId="4992" CreationDate="2017-11-10T17:46:13.257" Score="3" Body="&lt;p&gt;Commodore thought they would have such high volumes that they needed a second source because MOS Technology might not be able to reliably fab enough.  Semiconductor process technology was not as reliable in those days, and manufacturing yields from any particular fab line could vary drastically, cutting chip supplies.  So Commodore licensed the 6502 instruction set and logic design to Synertek.   Apple and Atari used Synertek (and possibly Rockwell) chips, which was now outside Commodore's control.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-11-10T17:51:50.680" LastActivityDate="2017-11-10T17:51:50.680" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4996" PostTypeId="2" ParentId="4992" CreationDate="2017-11-10T19:33:07.657" Score="16" Body="&lt;p&gt;The 6502 has been used in huge volumes in markets that commodore never cared about competing in much - terminals for large-scale professional computing, printers and plotters (which they mostly bought in from OEMs if sold with their own computers), embedded solutions, test and industrial and scientific equipment, arcade machines ... - just as other 8 bit CPUs of and in that era. Whatever was too complex for an 8051 or TMS1000 to do, was usually done with a Z80, 8085, 6800, or 6502. Computer controlled equipment was likely a bigger market than end-user computers. Not selling your chips via generic distribution channels would have lost some of that market to other silicon vendors that did so...&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-11-10T19:33:07.657" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4998" PostTypeId="1" AcceptedAnswerId="5000" CreationDate="2017-11-11T06:06:22.273" Score="17" ViewCount="1794" Body="&lt;p&gt;In the late 1990's, I recall that there was a piece of hardware being demonstrated in Best Buy that supposedly allowed you to control your computer via signals sent from your brain.&lt;/p&gt;&#xA;&lt;p&gt;The way it worked was that there was a small metallic plate that you would place your finger on. This plate was connected to (I believe) a USB port, and it somehow translated the signals from your brain into &amp;quot;left&amp;quot; and &amp;quot;right&amp;quot; commands for the computer.&lt;/p&gt;&#xA;&lt;p&gt;In the Best Buy demonstration, the product was hooked up to the slalom game that came with Windows 3.1 or 95 or so; the point was to ski left and right, avoiding trees, and hitting hills of snow to gain points by jumping in the air and doing tricks.&lt;/p&gt;&#xA;&lt;p&gt;The device somehow detected &amp;quot;brain patterns&amp;quot; and allowed you to ski the courses without actually moving. I remember it being notoriously hard to control at first, but after a few minutes, the brain control seemed natural and intuitive, and it actually made me a bit giddy to see the skier move without any apparent physical movement on my part.&lt;/p&gt;&#xA;&lt;p&gt;The problem is that I can't seem to find any documentation on this product anywhere. It seemingly had the name &amp;quot;Max&amp;quot; or the like, and I remember spending hours in Best Buy playing it before it mysteriously disappeared and was never seen again.&lt;/p&gt;&#xA;&lt;p&gt;What was this product, who created it, and why did it mysteriously vanish without a trace? Is it still possible to find/purchase one of these devices, or is the science behind it complete bull? I remember it working pretty well, but the device cost about $300 USD, which was more than you'd pay for a complete game console of the era.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone shed any light on this product, and what happened to it?&lt;/p&gt;&#xA;" OwnerUserId="2059" LastEditorUserId="7843" LastEditDate="2021-03-29T17:52:39.143" LastActivityDate="2021-03-29T17:52:39.143" Title="Mind-Controller User Input from the late 90s" Tags="&lt;hardware&gt;&lt;windows-3.x&gt;&lt;usb&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5000" PostTypeId="2" ParentId="4998" CreationDate="2017-11-12T10:06:34.443" Score="19" Body="&lt;p&gt;The device was called the MindDrive, from a company called &quot;The Other 90%&quot;. It had a few games available including &lt;a href=&quot;https://partners.nytimes.com/library/cyber/surf/0925surf.html&quot; rel=&quot;noreferrer&quot;&gt;MindSkier&lt;/a&gt;, which was a downhill slalom game. Nothing in particular ever happened to it, it just never caught on. The technology really has nothing to do with brainwaves at all; it's just measuring the conductance of your finger. At worst, it's pretty much random. At best, it's doing what a mouse can do, only not nearly as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clint Basinger (LGR) does a review/retrospective as part of his &quot;Oddware&quot; series &lt;a href=&quot;https://www.youtube.com/watch?v=3iPefnLfKlY&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2017-11-12T10:06:34.443" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5002" PostTypeId="5" CreationDate="2017-11-13T09:01:01.403" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-11-13T09:01:01.403" LastActivityDate="2017-11-13T09:01:01.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5003" PostTypeId="4" CreationDate="2017-11-13T09:01:01.403" Score="0" Body="This is a special tag that is designed to be used only by the system for questions that have had all of their other tags removed. Do not add this tag to existing questions, it is reserved for use by the system to identify posts with no valid tags." OwnerUserId="3748" LastEditorUserId="3748" LastEditDate="2017-11-13T09:10:33.953" LastActivityDate="2017-11-13T09:10:33.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5004" PostTypeId="2" ParentId="4998" CreationDate="2017-11-13T10:03:08.193" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Neural_Impulse_Actuator&quot; rel=&quot;nofollow noreferrer&quot;&gt;OCZ NIA&lt;/a&gt; was a device with a similar idea, but possibly with somewhat more advanced hardware, which was available at a later date (circa 2005 or so I think -- Wikipedia has date for when production ceased, but not when it started).  It was also somewhat cheaper.  If you look around, you can still find these available second hand.  Rather than controlling via the finger (which seems a bit weird if you ask me!) these devices hook over your head and (supposedly) sense the impulses that control the muscles that move your eyeballs.  I had one, but could never figure out how to actually make it work.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-11-13T10:03:08.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5005" PostTypeId="2" ParentId="4998" CreationDate="2017-11-13T22:27:15.773" Score="3" Body="&lt;p&gt;The MindDrive and other &quot;mind-reading&quot; input devices that don't include an EEG headset work by reading your stress levels in the form of skin conductivity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The program initializes its state by wobbling an object back and forth randomly.  When the object starts going in the desired direction, the user relaxes, which the hardware can read in the form of reduced skin conductivity.  If the user wants the object to reverse direction, they tense up, increasing skin conductivity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this is a simple &quot;yes-or-no&quot; input, and only works well for one-dimension movement, such as a slalom skier moving sideways across the slope.  Input devices based on it tend to vanish quickly, once the novelty wears off.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2017-11-13T22:27:15.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5006" PostTypeId="1" CreationDate="2017-11-14T01:33:05.847" Score="35" ViewCount="10357" Body="&lt;p&gt;I am learning about old computers, and I have found the following image from this &lt;a href=&quot;http://www.linusakesson.net/programming/tty/&quot; rel=&quot;noreferrer&quot;&gt;article&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/mJh4a.png&quot; alt=&quot;UART diagram&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They use the terms &quot;UART&quot; instead of &quot;serial port&quot; and &quot;UART driver&quot; instead of &quot;serial port driver&quot;, I have also read the same thing on other articles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why do they do that?&lt;/p&gt;&#xA;" OwnerUserId="7127" LastEditorUserId="15334" LastEditDate="2021-03-10T17:50:09.583" LastActivityDate="2021-03-10T17:50:09.583" Title="Why do articles use the term &quot;UART&quot; instead of &quot;serial port&quot;?" Tags="&lt;terminology&gt;&lt;serial&gt;" AnswerCount="8" CommentCount="9" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5007" PostTypeId="2" ParentId="5006" CreationDate="2017-11-14T02:17:33.137" Score="6" Body="&lt;p&gt;UART is an initialism for &quot;Universal Asynchronous Receiver/Transmitter&quot;, the manufacturer's name for the &lt;a href=&quot;http://archive.pcjs.org/pubs/pc/datasheets/8250A-UART.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;8250&lt;/a&gt; that was used in the original PC (and elsewhere) to run the serial port. That initialism continued to be used &lt;a href=&quot;http://www.ti.com/product/pc16550d&quot; rel=&quot;nofollow noreferrer&quot;&gt;when labelling the 16550&lt;/a&gt; which succeeded the 8250 and the term has attached itself to the serial port ever since. &lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-11-15T02:55:33.483" LastActivityDate="2017-11-15T02:55:33.483" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5008" PostTypeId="2" ParentId="5006" CreationDate="2017-11-14T04:39:07.140" Score="51" Body="&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter&quot; rel=&quot;noreferrer&quot;&gt;UART (Universal Asynchronous Receiver-Transmitter)&lt;/a&gt; is a particular kind of hardware device that uses digital sampling to convert serial data that uses embedded start and stop bits for synchronization into and from parallel data. Not all forms serial communication use start and stop bits, and not all devices that use this form of serial communication uses some sort of UART hardware. A serial port could be something completely different. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In traditional &lt;a href=&quot;https://en.wikipedia.org/wiki/Asynchronous_serial_communication&quot; rel=&quot;noreferrer&quot;&gt;asynchronous serial communication&lt;/a&gt;, data is transmitted a series of &quot;mark&quot; and &quot;space&quot; values. How these values are represented depends on the communication medium, for example &lt;a href=&quot;https://en.wikipedia.org/wiki/RS-232&quot; rel=&quot;noreferrer&quot;&gt;RS-232C&lt;/a&gt; defines a mark as being a voltage in the range of -3V to -15V, while a space is +3V to +15V. In order to know where each byte (or character) starts and ends, each byte is prefixed with a space value (start bit) that indicates the start of the byte, and suffixed with one or more mark values (stop bits) that indicate the end of a byte. In between the start and stop bits each byte is transmitted as series of mark (1) and space (0) values.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The start and stop bits provides the necessary synchronization for this form serial communication to work by just transmitting mark and space values without needing precisely synchronized clocks or by also transmitting a clock separately. The start bit lets the receiver know that a fixed number of bits will follow at given rate. The transmitter and receiver must be configured before hand to use the same parameters, the same number of bits in a byte, the same number of stop bits and the same baud rate. Once the receiver has received the start bit it samples the communication line at the specified baud rate to obtain each bit of the transmitted byte in sequence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The receiver ignores the the stop bit, but it performs two functions. First it gives time for the receiver to prepare for the next byte, and this was crucial on old mechanical devices like teletypes. Secondly it guarantees that the start bit, a space value, is preceded by a mark value, meaning each transmitted byte is preceded by transition from a mark to a space. This allows the receiver to resynchronize with the serial data byte steam if starts receiving in the middle of a byte being transmitted or noise or other problem causes it to lose synchronization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the start bit in fact causes the receiver to resynchronizes with the transmitter every time a byte is transmitted this means the receiver doesn't need to be sampling each bit at precisely the same rate as the transmitter is sending them. Since normally only 10 or less bits, including start, data, and stop bits, are transmitted before this resynchronization occurs even a relatively large 5% difference in transmitting and receiving baud rates won't cause errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A UART does everything necessary to implement asynchronous serial communication in hardware, and does so digitally (other earlier asynchronous hardware implementations used analogue timing circuits that needed manual calibration.) However it's also possible to implement an asynchronous serial device in software using a technique called &lt;a href=&quot;https://en.wikipedia.org/wiki/Bit_banging&quot; rel=&quot;noreferrer&quot;&gt;bit banging&lt;/a&gt;. This was done on old computers like the Commodore 64 in order to save money, and is still done from time to time in modern embedded applications for the same reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally there are other ways of transmitting data serially, like &lt;a href=&quot;https://en.wikipedia.org/wiki/Synchronous_serial_communication&quot; rel=&quot;noreferrer&quot;&gt;synchronous serial communication&lt;/a&gt; methods where a separate clock signal is transmitted alongside the serial data. In fact many modern computer interfaces, like &lt;a href=&quot;https://en.wikipedia.org/wiki/USB&quot; rel=&quot;noreferrer&quot;&gt;USB&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Serial_ATA&quot; rel=&quot;noreferrer&quot;&gt;Serial ATA&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/PCI_Express&quot; rel=&quot;noreferrer&quot;&gt;PCI Express&lt;/a&gt; are actually serial devices. So while a &quot;serial port&quot; normally refers to an asynchronous serial device usually implemented with some sort of UART, strictly speaking it could potentially mean a wide range of devices. By calling the hardware device used a &quot;UART&quot;, and the software driver for it a &quot;UART driver&quot; the diagram you've shown in your question is being more precise about what its describing. &lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2017-11-14T21:06:51.740" LastActivityDate="2017-11-14T21:06:51.740" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5009" PostTypeId="5" CreationDate="2017-11-14T10:21:13.277" Score="0" Body="&lt;p&gt;For questions specifically regarding the 8008 processor.&#xA;An 8-bit processor with a 14-bit address bus, manufactured by Intel and introduced in 1972.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-11-14T10:21:13.277" LastActivityDate="2017-11-14T10:21:13.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5010" PostTypeId="4" CreationDate="2017-11-14T10:21:13.277" Score="0" Body="For questions specifically regarding the Intel 8008 8-bit microprocessor" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-11-14T10:21:13.277" LastActivityDate="2017-11-14T10:21:13.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5011" PostTypeId="5" CreationDate="2017-11-14T10:22:32.443" Score="0" Body="&lt;p&gt;For questions specifically regarding the Z8410 Direct Memory Access (DMA) controller chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This processor was manufactured by Zilog.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-11-14T10:22:32.443" LastActivityDate="2017-11-14T10:22:32.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5012" PostTypeId="4" CreationDate="2017-11-14T10:22:32.443" Score="0" Body="For questions specifically regarding the Zilog Z8410 DMA controller" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-11-14T10:22:32.443" LastActivityDate="2017-11-14T10:22:32.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5013" PostTypeId="1" AcceptedAnswerId="5014" CreationDate="2017-11-14T11:30:31.190" Score="7" ViewCount="1187" Body="&lt;p&gt;What was the largest cartridge produced, or possible, for any 8-bit home computer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, the later 8 or 16-bit console cartridges could be surprisingly large, up to several megabytes in some cases, but as I understand it, the Commodore 64 cartridges were limited to 16K of ROM, and I don't remember other home computers going much beyond that. Were there any that did?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-09-21T18:41:11.630" Title="Maximum size of 8-bit computer cartridges" Tags="&lt;history&gt;&lt;rom&gt;&lt;game-cartridge&gt;" AnswerCount="5" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5014" PostTypeId="2" ParentId="5013" CreationDate="2017-11-14T11:50:12.647" Score="13" Body="&lt;p&gt;Simple Answer: &lt;strong&gt;Unlimited&lt;/strong&gt; and &lt;strong&gt;Many&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ofc, every system can only reserve a certain amount of real address space for cartridges, but then there is &lt;strong&gt;Bank Switching&lt;/strong&gt;. Just take the original Atari 2600. Address space for ROM was 4 KiB, and many early games only used 2 KiB ROMs. But already in 1982 &lt;em&gt;Burger Time&lt;/em&gt; came in a cartridge with 16 KiB ROM and some sort of bank switching. That's already more than the whole address space of the 6507 (8 KiB). Later even 32 and 64 KiB cartridges have been made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all it's the same as with every memory expansion. The Apple II only offered 12 KiB of deselectable ROM address space for expansion, but already Woz' language card filled these 12 KiB address range with 16 KiB of RAM. Saturn &amp;amp; Co later on squeezed several Megabytes in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the same techniques used in later games to get squeeze large amounts of game data into a linited address space. Usually the logic to enable the switching was part of the cartridge. As Chenmunka already mentioned, some systems, like the BBC, Memotech MTX, Exidy Sorcerer and other 8 bit machines already included mechanics, or at least protocols to handle expansions larger than the provided address space (window) in their basic design. Many of them enabeling RAM or ROM in the megabyte range.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-11-14T12:16:00.550" LastActivityDate="2017-11-14T12:16:00.550" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5015" PostTypeId="2" ParentId="5006" CreationDate="2017-11-14T12:25:09.667" Score="22" Body="&lt;p&gt;Simply, &lt;strong&gt;a UART is a serial port&lt;/strong&gt;, but &lt;strong&gt;a serial port is not neccessary a UART&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serial port is a general term for anything serial, without further specification, while a UART defines a tranceiver for a specific asynchronus format. That Ports using asynchronus protocols like RS232 ot TTY are colloquially simplified as &lt;em&gt;serial port&lt;/em&gt; shouldn't promote technical documentaation to be as unspecific.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a more technical side, a SPI is also a serial port, but I doubt that any UART driver will be able to handle its specificas.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2017-11-14T12:25:09.667" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="5016" PostTypeId="2" ParentId="5006" CreationDate="2017-11-14T14:30:38.080" Score="1" Body="&lt;p&gt;Your article is wrong.  A UART is a specific device (universal asynchronous receiver/transmitter) dealing with all the timing (and some buffering and framing error detection) of an asynchronous serial line transmission.  They are usually employed for serving serial lines since they take load and timing requirements off the main CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, they do not include the line level drivers: those are conspicuously absent from your diagram.  For RS232, eventually Maxim came up with notorious drivers working at 5V and including the respective switching voltage multipliers/inverters at a time switching drivers were kind of unusual (outside of memory chips where they started being a thing with, uh, 4164 dynamic RAM chips and 2716 EPROMs? since the 12V and -5V requirements of earlier RAM and EPROM chips were becoming a nuisance because of pin count and PCB layout).&lt;/p&gt;&#xA;" OwnerDisplayName="user7129" LastActivityDate="2017-11-14T14:30:38.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5017" PostTypeId="1" CreationDate="2017-11-15T00:32:33.063" Score="5" ViewCount="360" Body="&lt;p&gt;Some Apple II motherboards have a red LED in the back-right corner near the joystick / cassette in/out connectors. I have never seen it illuminated. What is its purpose?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-11-15T00:49:44.377" Title="Apple II: LED near joystick connector?" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5018" PostTypeId="2" ParentId="5017" CreationDate="2017-11-15T00:49:44.377" Score="7" Body="&lt;p&gt;This is the self-test LED. Here's a quote from Sather's excellent &lt;a href=&quot;https://archive.org/details/Understanding_the_Apple_IIe&quot; rel=&quot;noreferrer&quot;&gt;Understanding the Apple IIe&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There is an LED (Light Emitting Diode) connected across the speaker&#xA;  jack on the Apple IIe motherboard. However, the LED (CR2) does not&#xA;  normally light because there is not enough voltage developed across&#xA;  the speaker primary to cause visible light emission. The light does&#xA;  glow when SPKR is toggling with the speaker disconnected. You can see&#xA;  this for yourself by disconnecting the speaker plug and holding open&#xA;  Apple and close Apple and pressing CONTROL-RESET. This causes firmware&#xA;  diagnostic execution with speaker tones or light emission from the&#xA;  LED when the speaker is disconnected. The LED thus provides a means of&#xA;  verifying diagnostic performance on a motherboard with no speaker&#xA;  connected.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="71" LastActivityDate="2017-11-15T00:49:44.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5019" PostTypeId="1" AcceptedAnswerId="5021" CreationDate="2017-11-15T04:05:14.500" Score="24" ViewCount="20192" Body="&lt;p&gt;A memorable part of the PlayStation 1 experience was “wobbly” 3D graphics, where (supposedly) straight edges would warp, jitter and pulse as the camera panned across a scene. This was especially apparent in 3D-heavy games like &lt;a href=&quot;https://youtu.be/mDJaRgA4h8g&quot; rel=&quot;noreferrer&quot; title=&quot;Metal Gear Solid&quot;&gt;Metal Gear Solid&lt;/a&gt;, &lt;a href=&quot;https://youtu.be/hX_5XeB-VHQ&quot; rel=&quot;noreferrer&quot; title=&quot;Vagrant Story&quot;&gt;Vagrant Story&lt;/a&gt; and Time Crisis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did this happen, and why was the defect completely absent on other platforms of the era (e.g. PC, Nintendo 64)?&lt;/p&gt;&#xA;" OwnerUserId="272" LastEditorUserId="272" LastEditDate="2017-11-15T06:28:31.670" LastActivityDate="2017-11-16T03:11:14.370" Title="Why do 3D models on the PlayStation 1 “wobble” so much?" Tags="&lt;graphics&gt;&lt;sony-playstation&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5020" PostTypeId="2" ParentId="5006" CreationDate="2017-11-15T08:25:37.433" Score="2" Body="&lt;p&gt;Adding to the other answers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than distinguishing pure asynchronous operation from asynchronous/synchronous transmission/receive (opposing the term &lt;em&gt;USART&lt;/em&gt;), the term could also have been used for other reasons:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A denomination of &lt;em&gt;UART serial port&lt;/em&gt; could distinguish your product from a non-UART serial port as &quot;has some chip that relieves the CPU from the burden of transmitting bits&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Sinclair ZX Spectrum with its IF1 had, for example, a (asynchronous) serial port that was bit-banged by the CPU, so kept the CPU pretty busy while transmitting/receiving, which also limited the maximum speed at which this port could operate (while keeping hardware cost at a limit). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;UARTs instead were known to reach acceptable bandwidth transmissions and known to relieve the CPU from bit transmission and were thus a unique selling point.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-11-15T16:05:47.613" LastActivityDate="2017-11-15T16:05:47.613" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5021" PostTypeId="2" ParentId="5019" CreationDate="2017-11-15T12:01:32.537" Score="33" Body="&lt;p&gt;The transform applied to project geometry from 3d to the 2d coordinates necessary for drawing on a screen is called a perspective projection. It involves calculating 1/z and multiplying x and y by that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Filling a triangle involves visiting every pixel within it and deciding which colour to put there. To paint a texture that properly obeys perspective you'd need to perform a divide stemming from that 1/z operation for every pixel. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Divides are expensive so the original Playstation doesn't do them. It just squeezes the texture to fit, disregarding any consideration of perspective. That's only mathematically correct if 1/z is constant over the entire triangle, so you tend to see greater problems with geometry as it gets to a greater angle and as it gets closer to the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Genuine perspective:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/p2P7m.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/p2P7m.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ignoring z (i.e. affine):&#xA;&lt;a href=&quot;https://i.stack.imgur.com/2SXie.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2SXie.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given this constraint, a second issue arises: the standard on the Playstation is to use small triangles because then 1/z can't vary too much across the face. Or, spun another way, texture coordinates are correct anywhere there's an actual vertex, just a bit variable in between, so a higher number of vertices is desirable. A good game will even subdivide larger triangles as they get closer to the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then clipping the geometry — discarding those parts that fall behind the camera from triangles that are partly in front and partly behind — becomes an expense to do away with. A lot of titles just delete any triangle completely behind the camera, keep any wholly in front, and from the others subdivide to a point but then just push the vertices that should be behind to just in front. Mathematically they should be calculating brand new geometry that is exactly cut by the camera. That adds a sort of liquid effect, where camera motion slightly deforms near geometry by compressing it and moving it around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: the very near geometry can be slightly adjusted, and the pixel contents of each triangle are inexact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also a lack of subpixel precision that further reduces precision at triangle edges and more subtly within their fills. The issue there is that the vertices the describe the boundary of a triangle are stored as integers, precise only to the nearest whole pixel. That's enough information to locate them exactly but it affects how precisely you can calculate the on-screen positions of all other edge pixels, and how well you can map back from the screen to the source texture when filling in the middle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, imagine a triangle edge that begins in the pixel at (x, 0) and ends in the pixel at (x+1, 100). You know definitely which column the starting pixel must be in. You know definitely which column the ending pixel should be in. But exactly where should you switch column? Whatever choice you make, it's going to be exactly the same for every frame where the start and end vertices fall at those two locations. But what if the camera is panning very slowly, and, say, every sixth frame the edge moves one pixel to the left? Without subpixel accuracy, the entire edge will appear to be static for six frames and then suddenly leap. Supposing everything else on screen isn't moving at exactly the same rate, it'll appear not to move entirely with the scene. There's an overall shakiness, as the various different vertices all jump from one pixel to the next at different times, making it look like some frames are updating some part of the display, other frames are updating others even though every single pixel was drawn for every single frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If instead you knew that you were drawing from, say, (x + 0.1, 0) to (x + 1.3, 100) in one frame, then from  (x + 0.3, 0) to (x + 1.4, 100) in the next, you'd actually factor that into exactly how the edge runs, and exactly how you apply the texture. The user gets enough feedback that the polygon now looks like it is moving entirely with the scene, as there's then a consistent precision applied to the entire pipeline of all rendered pixels, rather than there being a step where an amount of precision is thrown away that is a function of current vertex position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A secondary problem is that the process of actually assigning pixels to polygons has a bit of a quirk to it. Taking OpenGL as an example because it's well documented, the main rule is that a pixel is considered part of a triangle if its centre falls within the triangle. But that leaves a literal edge case: what do you do with a pixel whose centre lies exactly on the edge of a triangle? If you always draw it then triangles that meet along that edge are both going to draw the pixel and that'll both cost more and ruin any transparency you're applying. If you never draw it then it won't be painted at all and triangles that should meet will show occasional gaps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's an easy fix for this, which is to paint pixels exactly on the boundary only if, in terms of the 2d screen, they're on e.g. the left or the top edge of the triangle. But there's a potential precision problem there because you're now testing for an exact match, and hoping to get the same result on at least two separate occasions. So some hardware and some software will sometimes still show individual pixel gaps between geometry that should meet up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is exacerbated on the Playstation because you might have started with two triangles sharing one edge but then subdivided only one of those polygons. So what was one edge on one side has turned into two edges. And the lack of subpixel precision means that the new vertex in the middle might not exactly be where it should once you've projected it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dealing with that is a per-developer problem, but tends to revolve around deliberate more aggressive stripping of precision or stretching geometry to be slightly larger than it would naturally be. In both cases you increase that shaky look (either because precision is worse, or because you did something else directly in projected pixels), and you often also get a greater sense of polygons fighting each other for boundary pixels frame-to-frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the Playstation uses a fixed point 16.16 representation for numbers. That doesn't allow as much localisation of precision as floating point, and means that a developer needs actually to think relatively carefully about game distance units. It's usually not a problem for the sort of draw distances that are realistic on that generation of hardware but a particular developer could deal with that poorly. Shouldn't be an issue for the Metal Gear Solids, Vagrant Stories or Time Crises of the world though.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-11-16T03:11:14.370" LastActivityDate="2017-11-16T03:11:14.370" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="5022" PostTypeId="2" ParentId="5006" CreationDate="2017-11-15T16:17:18.570" Score="0" Body="&lt;p&gt;Serial ports include line drivers, whereas UARTs are used to frame asynchronous data streams. UARTs precede line drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;UART driver&quot; is not even hardware -- it is software -- notice that it is part of the kernel in your diagram, so -- they are referring to the operating system there. In IBM PCs that ran DOS -- that was not the case. There were a couple of BIOS service calls in the firmware, but -- the 8250 style UART was not controlled by the &quot;kernel&quot; at all -- it was controlled largely by user written code, or a third party driver until DOS 5.0 / Win3.1 -- Many flavors of BASIC contained routines for serial communications at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your diagram also refers to TTYs -- teletypes -- which -- are primarily driven by RS-232 as well.&lt;/p&gt;&#xA;" OwnerUserId="7141" LastActivityDate="2017-11-15T16:17:18.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5023" PostTypeId="2" ParentId="5006" CreationDate="2017-11-15T16:24:15.223" Score="1" Body="&lt;p&gt;The UART is one of the functional blocks required to implement what was traditionally called a serial port (aka RS-232 port) - the other one is an RS-232 line driver / receiver. Originally the UART and line driver/receiver were separate chips, but more recently they are just blocks within a chipset. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the serial port is the entire set of functionality (or the connector, depending on how you view things :)) while the UART is one of the pieces that makes it work. &lt;/p&gt;&#xA;" OwnerUserId="7142" LastActivityDate="2017-11-15T16:24:15.223" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5024" PostTypeId="1" AcceptedAnswerId="5026" CreationDate="2017-11-15T17:20:40.477" Score="15" ViewCount="4147" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;Family BASIC or Famicom BASIC is the consumer product for programming&#xA;Nintendo's Family Computer video game console of Japan.&amp;quot;&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Family_BASIC&quot; rel=&quot;noreferrer&quot;&gt;wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I can't seem to find much info about Family BASIC anywhere on the internet. So I have a 2 simple questions.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Was Family BASIC powerful enough to create full programs or was it just made as a toy for people interested in programming?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I know Assembly language was used exclusively to create games for the NES/Famicom. Would you have a lot more limitations with BASIC compared to Assembly.&lt;/p&gt;&#xA;&lt;p&gt;Ex: speed, graphics, sound, etc?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4zttE.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4zttE.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6990" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-11-24T03:38:53.603" Title="Was Family BASIC for the NES/Famicom powerful enough to create full games and applications?" Tags="&lt;history&gt;&lt;nintendo&gt;&lt;basic&gt;&lt;assembly&gt;&lt;gaming&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5025" PostTypeId="2" ParentId="5024" CreationDate="2017-11-15T18:24:19.887" Score="8" Body="&lt;p&gt;From the &lt;a href=&quot;http://www.atkinsoft.com/familybasic.html&quot; rel=&quot;noreferrer&quot;&gt;token list at atkinsoft&lt;/a&gt;, there were certainly enough keywords from BASIC to suggest that Family BASIC was Turing-complete, and thus could be used for &quot;serious&quot; programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;https://en.wikipedia.org/wiki/Famicon#Technical_specifications&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;ref: Wikipedia:Nintendo Entertainment System&lt;/em&gt;&lt;/a&gt;) Since the CPU was a 6502, the same as used in e.g., early Apple and Commodore home computers, it is clear that the only limitation on &quot;serious&quot; programming would be available resources (such as RAM).&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2017-11-15T18:24:19.887" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="5026" PostTypeId="2" ParentId="5024" CreationDate="2017-11-15T21:54:20.397" Score="16" Body="&lt;p&gt;&lt;em&gt;1. Was Family BASIC powerful enough to create full programs or was it just made as a toy for people interested in programming?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;It depends on your defintion of 'powerfull'.&lt;/strong&gt; The Famicom, aka NES, was a 1.8 MHz 6502 machine, thus it got processing power superiour to a C64 or VIC20. It's graphics system was also more capable than what a C64 or similar machines got.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Family BASIC on the other hand was a special developed, MS alike dialect. Somewhat based on the BASIC, also provided by Hudson Soft, for the Sharp MZ80 (and follow up) series, but a seperate development. As a speciality it got a GAME BASIC mode. Basicly it switched all variable handling to Integer to improve performance considerable. Much like the Integer BASIC Woz did out of the same reasoning for the Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And like the TI 99/4s Extended BASIC it featured many special functions to utilize the hardware to a dregree unknown in other implementations. Next to all features of the Hardware could be accessed from BASIC. The only real restriction was the limited RAM size. 2 KiB for the original version and 4 KiB for Family BASIC V3. Due the great integration this was less lmiting than it seams.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe take a look at &lt;a href=&quot;https://www.youtube.com/watch?v=DeWOIb4Feqg&quot; rel=&quot;noreferrer&quot;&gt;this youtube video&lt;/a&gt; to get an idea how able Hudson Softs GAME BASIC was. It shows several games writen in Family BASIC. The first (Mario Jump) is an example taken from the Family BASIC manual.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'd say more than (almost) any other 8 Bit BASIC machine (back then).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;2. I know Assembly language was used exclusively to create games for the NES/Famicom. Would you have a lot more limitations with BASIC compared to Assembly.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Well, is eating noodles with chopsticks more limitating than using a fork?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As usual it depends. If you're in doubt about the underlaying principles, RetroComputing might not be the right place to ask. The question about a comparsion between BASIC and Assembler, even if it's a specific BASIC, is way to broad to be discussed here. Maybe try to ask this on more general, programming orientated, subsites of StackExchange.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-11-16T02:19:56.523" LastActivityDate="2017-11-16T02:19:56.523" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5027" PostTypeId="1" CreationDate="2017-11-15T23:01:41.687" Score="1" ViewCount="612" Body="&lt;p&gt;I'm trying to remember the name of a Commodore 64 game that had a character in it that would scream when it fell. I found videos of Impossible Mission, but the name doesn't seem right and the sound isn't the same as what I remember.&lt;/p&gt;&#xA;" OwnerUserId="2057" LastActivityDate="2020-02-28T18:15:50.507" Title="Commodore 64 Game with Falling Character Scream" Tags="&lt;commodore-64&gt;&lt;identify-this-game&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5028" PostTypeId="2" ParentId="5027" CreationDate="2017-11-16T00:25:40.870" Score="3" Body="&lt;p&gt;A few possibilities:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Rick Dangerous&lt;/li&gt;&#xA;&lt;li&gt;Kane&lt;/li&gt;&#xA;&lt;li&gt;The Way of the Exploding Fist&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="637" LastActivityDate="2017-11-16T00:25:40.870" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5029" PostTypeId="2" ParentId="5006" CreationDate="2017-11-16T10:03:48.177" Score="0" Body="&lt;p&gt;A UART is a Univeral Asynchronous Receiver and Transmitter. It is an electronic circuit which handles communication over an asynchronous serial interface - very often an RS232 interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serial Port or RS232 is a specification for serial communications between a DCE and DTE (For example communication between computer and modem); it defines electrical characteristics, the 25-way 'D' connector and the various functions of the various signal lines.&lt;/p&gt;&#xA;" OwnerUserId="7153" LastActivityDate="2017-11-16T10:03:48.177" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5030" PostTypeId="1" AcceptedAnswerId="5031" CreationDate="2017-11-16T10:35:55.370" Score="16" ViewCount="3625" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_IIGS&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Apple_IIGS&lt;/a&gt; the Apple IIGS, in its year of introduction, outsold the Macintosh, without being substantially cheaper than it. This is somewhat counterintuitive: one usually expects that at close to the same price, customers will tend to prefer the newer machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was the Apple IIGS so popular? Was it because of compatibility with the large portfolio of Apple II software, or some other reason?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-01-24T04:34:36.633" Title="Reason for popularity of Apple IIGS" Tags="&lt;history&gt;&lt;apple-iigs&gt;&lt;market&gt;" AnswerCount="6" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5031" PostTypeId="2" ParentId="5030" CreationDate="2017-11-16T10:49:41.190" Score="32" Body="&lt;ul&gt;&#xA;&lt;li&gt;For one, the II GS &lt;strong&gt;was&lt;/strong&gt; the newer machine - providing a colour desktop and ADB before any Mac.&lt;/li&gt;&#xA;&lt;li&gt;From a user perspective GS/OS offered everything the Mac did. Plus compatibility with an uncountable amount of existing Apple II software.&lt;/li&gt;&#xA;&lt;li&gt;It was the long awaited upgrade for anyone (still) working with an Apple II - and there where many back then, while the Mac was even more a niche product than today.&lt;/li&gt;&#xA;&lt;li&gt;And last but for sure not least, the Apple II was still the number 1 school computer in the US, so it not only carried over the still strong sales from the IIe, but created new.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Over most of the 80s, the whole Mac division was financed by the Apple II profits.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7159" LastEditDate="2017-11-16T17:40:41.507" LastActivityDate="2017-11-16T17:40:41.507" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5032" PostTypeId="1" AcceptedAnswerId="5033" CreationDate="2017-11-16T14:30:56.900" Score="5" ViewCount="1282" Body="&lt;p&gt;I'm writing my thesis about the home computer market between 1977 and 1984 (focusing on Commodore Inc.so PET, VIC-20 and 64 and competitors). I'm trying to plot a curve describing the technological innovation on the home computer market, and I am concerned about finding a good parameter to evaluate the progress of the industry in terms of effort in knowledge acquired and performance improvement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I use MIPS? Is there any benchmark available for a list of products that were on the market in that period of time? Can anyone suggest a better indicator, considering the lack of data that sometimes occur in this kind of research?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's what I found for now:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Instructions_per_second&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Instructions_per_second&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://web.archive.org/web/20141009144357/http://www.jcmit.com:80/cpu-performance.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://web.archive.org/web/20141009144357/http://www.jcmit.com:80/cpu-performance.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone can come up with a more complete list or a better idea about the parameter to use?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if it can be of any help to clarify the subject, my work is for an economics thesis, and it's based on the research of Foster and Christenen about the S shaped curve of technology&lt;/p&gt;&#xA;" OwnerUserId="7157" LastEditorUserId="7157" LastEditDate="2017-11-17T16:44:54.183" LastActivityDate="2017-11-18T18:55:09.107" Title="Benchmark between Home computers? What can be a valid parameter for that?" Tags="&lt;commodore&gt;&lt;performance&gt;&lt;benchmarking&gt;" AnswerCount="7" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5033" PostTypeId="2" ParentId="5032" CreationDate="2017-11-16T15:49:24.657" Score="6" Body="&lt;p&gt;If your focus is on Commodore products from 1977 to 1984, then MIPS would likely be the wrong way to differentiate.  I believe the whole line used a 1 MHz 6502 chip, meaning MIPS will be basically the same.  The SuperPET added a 1 MHz 6809, but I don't believe the CPUs could operate simultaneously. It wasn't until 1985, with the Commodore 128, that the 8502 (upgraded 6502) could run at 2 MHz, and even could drive an 80-column monitor. (Even the C128 offered backwards compatibility with the C64, running at 1 MHz on a 40-column screen in that mode.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So a better parameter might be &quot;user experience&quot;, i.e. graphics, sound, and text modes. Note that not all users want or need the same thing.  A typical business would greatly prefer an 80-column, easily read display over color graphics and multi-voice sound. A 10 year-old kid would prefer the latter, and his parents would appreciate that it used the television instead of a dedicated monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore's major competitors in the North American home included (no particular order):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Apple (Apple ][ with a 1 MHz 6502)&lt;/li&gt;&#xA;&lt;li&gt;Radio Shack (TRS-80 with a 1.77 MHz Z80, roughly equivalent to 1 MHz 6502&lt;/li&gt;&#xA;&lt;li&gt;TRS-80 Color Computer with 0.9 MHz 6809&lt;/li&gt;&#xA;&lt;li&gt;Texas Instruments (TI-99/4, with TI's own 3 MHz 9900 &quot;16-bit&quot; CPU -- it had only three hardware registers, none of which were an accumulator, making it feel slow, especially it's BASIC language)&lt;/li&gt;&#xA;&lt;li&gt;Atari 8-bit computers (6502 at about 1.8 MHz)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The fastest in MIPS I think would have been Atari. Other major considerations would have been keyboard (chiclet, membrane, or normal), presence of lower case, characters per line (anywhere from 22 to 80), color video, sound, sprites, external storage, and game control method(s).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe your thesis could feature a 2d graph, with &quot;kidability&quot; on one access and &quot;professionality&quot; along the other.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-11-18T11:18:13.177" LastActivityDate="2017-11-18T11:18:13.177" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="5034" PostTypeId="2" ParentId="5032" CreationDate="2017-11-16T15:50:19.900" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Can i use MIPS?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, of course you may use MIPS, but is it meaningful?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all, like with mainframes in the 60s and minis in the 70s, it wasn't about number crunching power. The first stage when a new technology becomes available is fundamental enabling, not speeding up. It's about that tasks that couldn't have been done before now are within reach. Take word processing. Just being able to backspace a whole sentence gives a completely new way of writing, compared to typewriters and whiteout. It didn't matter how slow and clumsy that machine was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that fundamental change, everything else is just gradualy again.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there any benchmark available for a list of products that were on the market in that period of time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://theultimatebenchmark.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ultimate Benchmark&lt;/a&gt; might be a good start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While developed just recently, the tools used are contemporary with early microcomuters. Simple benchmarks, like MIPS or Drystone only test a certain, rather limited, range of capabilities. But especially in the early time not all CPUs where (mostly) equal, but implemented way different strategies (if at all) to handle certain tasks. The Ultimate Benchmark now tries to switch from such simple setup to a more all around one, by inserting the abstraction layer of Forth and running a variety of more real world like tasks, much like SPEC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This allows for general and specific optimization of the Forth system toward a certain CPU, so that its specific advantages could be used. All while still running the same source task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course even this benchmark focuses on the CPU specific side, but then, extremely different graphics and sound hardware is even harder to compare.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Can anyone suggest a better indicator, considering the lack of data that sometimes occur in this kind of research?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now, isn't that the task you're told to solve? SCNR :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-11-17T16:30:53.193" LastActivityDate="2017-11-17T16:30:53.193" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5035" PostTypeId="2" ParentId="5032" CreationDate="2017-11-16T15:53:34.483" Score="3" Body="&lt;p&gt;For home computers, the most important criteria were generally:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;does a particular model do what you need/want?&lt;/li&gt;&#xA;&lt;li&gt;how much will it cost?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&quot;can the computer do X?&quot; was a much more important question than &quot;how fast can the computer do X?&quot; for most consumers, because they were limited to things the computer would do out of the box, things that could be done with commercially-available software, or things they could do themselves (if they chose to learn how to program the computer themselves).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cost was also a big consideration because at that time prices were relatively high and the 'value' of a computer was not well established.  In many households a computer was just a very expensive toy used to play games.  A computer that could be connected to an existing TV had a big cost advantage over a computer that required you to purchase a monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most popular home computers were the most popular because they had a lot of software available, and were relatively cheap compared to their competitors.  Their speed running benchmarks was not really of interest (except for after you had already purchased it, at which time benchmarks were an important part of the &quot;my computer is better than your computer&quot; discussions that inevitably broke out).&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-11-16T15:53:34.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5036" PostTypeId="2" ParentId="5032" CreationDate="2017-11-16T17:06:20.910" Score="4" Body="&lt;p&gt;See the other answers re: potential issues with benchmarking the Commodores (i.e. the results will probably all be the same), but as to potential sources &lt;a href=&quot;https://en.wikipedia.org/wiki/Personal_Computer_World&quot; rel=&quot;nofollow noreferrer&quot;&gt;Personal Computer World&lt;/a&gt; ('PCW') had a standard set of BASIC benchmarks that it used to evaluate all new home computers back in the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source code and results for the BBC, Amstrad CPC, IBM PC, Acorn Atom, Vic-20, Apple II, Dragon 32, both Orics, SVI-328, ZX81, Microtan, Spectrum, Atari 600 and TI-99/4a can be found &lt;a href=&quot;http://www.cpcwiki.eu/index.php/BASIC_Benchmark&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, and finding the review issues of PCW for other machines will likely give you their benchmark scores.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Spoiler: the Vic-20 actually does pretty well when overall, being beaten only by the two Acorns, the Amstrad and the IBM PC. The BBC comes on top. Interestingly it takes almost exactly half as long as the Vic-20 on average, and is built around a 6502 that runs almost exactly twice as fast as that of the Vic, but has an entirely independent implementation of BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PCW benchmarks aren't ideal as a test of hardware alone, they're a test of the combination of machine speed and quality of BASIC, but most home users who weren't just looking for games would write their own software in BASIC so I'd argue that it's a valid era-appropriate benchmark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the difference between the Oric 1 and the Oric Atmos for a representation of how the quality of the BASIC interpreter affects the tests; those are identical hardware but the latter has version 1.1 of Tangerine's [Microsoft] BASIC ROMs whereas the original has only version 1.0.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-11-17T15:11:03.607" LastActivityDate="2017-11-17T15:11:03.607" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5037" PostTypeId="2" ParentId="5032" CreationDate="2017-11-16T18:17:30.227" Score="3" Body="&lt;p&gt;Comparing processor architectures is tricky because they are all very different. How fast something can be done depends not only on the clock speed, instructions available, RAM speed, and how many bus cycles were used by the video chip (which was usually affected by mode it was in), but also on how well the algorithm is coded. How a Z80, 6502 or 6809 is coded to do something can vary a lot. The 6502 has simpler instructions which execute quickly, while the Z80 has more complex instructions which take more cycles to execute. Which is better will vary depending on your task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something that can more easily be benchmarked is languages, especially within language families. The most common language was BASIC and the most common brand was Microsoft, but you can compare different brands of BASIC, and even different languages, across processors and ignore clock speeds, RAM speed and bus cycles. This gives a simple numeric result which would be more useful to a potential owner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore BASIC and Applesoft BASIC benchmark very similarly with the Commodore 64 and Apple II benchmarking almost identically due to them both using Microsoft 6502 BASIC at 1 MHz. The Atari 800 used the 6502 at 1.79 MHz but due to the graphics chip taking up cycles, and the non-Microsoft Atari BASIC not being coded very optimally, it was much slower than Microsoft BASIC on the C64 or A2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next question becomes, what aspect of the languages do you want to benchmark. The most commonly known benchmark is an &lt;a href=&quot;https://archive.org/stream/creativecomputing-1983-11/Creative_Computing_v09_n11_1983_November#page/n269/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ahl's Simple Benchmark (Creative Computing, Nov 1983, page 260)&lt;/a&gt; which was commonly seen back in the 80's, and there are over 150 &lt;a href=&quot;https://archive.org/stream/creativecomputing-1984-07/Creative_Computing_v10_n07_1984_Jul#page/n9/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;results available on page 8 of the July 1984 issue&lt;/a&gt;, but all it benchmarks is a language's ability to run a loop, square and square root numbers, and determine how fast and accurate the floating point routines are. For the most part, the accuracy of the floating point calculations depends on how many bytes were used to store them. Unfortunately, I am not aware of a more comprehensive benchmark.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2017-11-16T18:17:30.227" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5038" PostTypeId="2" ParentId="1071" CreationDate="2017-11-16T18:17:54.547" Score="9" Body="&lt;p&gt;I feel like you're remembering the Apple At Play disk that came with the Apple //c.  It had Lemonade Stand, Quick Quiz, and Space Quarks (more of a Galaxian clone than Space Invaders, but I didn't know Galaxian when I was young, so I compared it to Space Invaders, too).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gWpGOm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gWpGOm.png&quot; alt=&quot;Space Quarks&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/X4E6g.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/X4E6g.png&quot; alt=&quot;Lemonade Stand&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On Windows 10, I use &lt;a href=&quot;https://github.com/AppleWin/AppleWin&quot; rel=&quot;nofollow noreferrer&quot;&gt;AppleWin&lt;/a&gt;, which is really a //e emulator, but it has all the nostalgia of the //c I loved as a child. I used it to capture the screenshots above. I've never used a Mac, so I can't help you there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And there used to be an online repository of all things Apple // called asimov.net.  There are still mirrors floating around the web.  I don't know how well they can be trusted, so I can't specifically recommend any site, but I did use an asimov mirror in order to obtain the pic of Space Quarks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, &lt;a href=&quot;https://archive.org/details/softwarelibrary_apple_games&quot; rel=&quot;nofollow noreferrer&quot;&gt;archive.org&lt;/a&gt; lets you play ancient emulated games directly in the browser.&lt;/p&gt;&#xA;" OwnerUserId="7160" LastEditorUserId="7160" LastEditDate="2017-11-17T17:27:45.927" LastActivityDate="2017-11-17T17:27:45.927" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5039" PostTypeId="2" ParentId="5030" CreationDate="2017-11-16T19:53:28.570" Score="4" Body="&lt;p&gt;There was a big &quot;Apple II Forever&quot; push encouraging users to upgrade. Also schools likely bought IIgses in bulk for their computer labs, driving up the sales figures.&lt;/p&gt;&#xA;" OwnerUserId="7162" LastActivityDate="2017-11-16T19:53:28.570" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5040" PostTypeId="2" ParentId="5030" CreationDate="2017-11-16T21:40:30.820" Score="9" Body="&lt;p&gt;Your question conflates two questions into one:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Did the IIgs sell more than the Mac in 1986?&lt;/li&gt;&#xA;&lt;li&gt;If so, why did the IIgs sell more than the Mac?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Others have given valid reasons for (2), but there is evidence that the answer to (1) is &quot;No&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance &lt;a href=&quot;https://www.macworld.co.uk/feature/mac/mac-in-numbers-surprising-apple-stats-3498117/&quot; rel=&quot;noreferrer&quot;&gt;this source&lt;/a&gt; says the Mac sold a million units by 1987, which is about what the IIgs sold over its whole lifetime - according to a former manager of the Apple II division &lt;a href=&quot;https://docs.google.com/spreadsheets/d/1UB9TyF1h3mDyUXQgGm3Z7gxENAGOTFwL1fwLySoBRyU/edit#gid=11&quot; rel=&quot;noreferrer&quot;&gt;quoted by Brutal Deluxe&lt;/a&gt; in their project to collect IIgs serial numbers and estimate sales data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Mac number roughly matches &lt;a href=&quot;http://jeremyreimer.com/m-item.lsp?i=137&quot; rel=&quot;noreferrer&quot;&gt;Jeremy Reimer's sales data&lt;/a&gt; which he used to write &lt;a href=&quot;https://arstechnica.com/features/2005/12/total-share/&quot; rel=&quot;noreferrer&quot;&gt;this article&lt;/a&gt;, and which I used when answering &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/498/71&quot;&gt;&quot;Over its lifetime, how many Apple II computers were sold?&quot;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scaling Brutal Deluxe's &lt;a href=&quot;https://docs.google.com/spreadsheets/d/1UB9TyF1h3mDyUXQgGm3Z7gxENAGOTFwL1fwLySoBRyU/edit#gid=8&quot; rel=&quot;noreferrer&quot;&gt;estimated sales data&lt;/a&gt; by the 1 million IIgs limit gives about 122,000 units in 1986-1987 (peaking at 305,000 in 1988) vs the Mac's 380,000 in 1986 alone (900,000 in 1988).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was the Apple //e that funded development of the Mac - until around 1988 when Macs finally started to sell more than the whole Apple II line. The full data for Apple II's and Macs from my other answer is in &lt;a href=&quot;https://docs.google.com/spreadsheets/d/15XJi00e7uswygc_j6boZoR8C5hK6YoZwa8vBCxnwVFE/edit#gid=0&quot; rel=&quot;noreferrer&quot;&gt;this Google Docs Sheet&lt;/a&gt;, with various notes about assumptions etc.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2017-11-17T02:28:20.190" LastActivityDate="2017-11-17T02:28:20.190" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5041" PostTypeId="2" ParentId="5030" CreationDate="2017-11-16T22:21:00.303" Score="2" Body="&lt;p&gt;There are 3 main reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;there was way more software, especially games, for the Apple II than for Mac at the time; also those games were often in color&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;it was a color computer&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;it was easy to program; both schools and power users loved the easy access to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Applesoft_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Applesoft Basic&lt;/a&gt; interpreter on the computer; the Mac required specialized toolkits to program and a much higher skill level&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="548" LastActivityDate="2017-11-16T22:21:00.303" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5042" PostTypeId="1" AcceptedAnswerId="5046" CreationDate="2017-11-17T01:11:27.973" Score="20" ViewCount="2341" Body="&lt;p&gt;I have been investigating the MS-DOS port of the C64's Maniac Mansion game.  The original MS-DOS port used the C64-specific character map to draw the various backgrounds in the game.  I noticed that each background (i.e. room) has 4 colours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These four values appear to be read as colours within the &lt;a href=&quot;https://github.com/scummvm/scummvm/blob/master/engines/scumm/gfx.cpp&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;ScummVM source code&lt;/strong&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void GdiV1::roomChanged(byte *roomptr) {&#xA;for (int i = 0; i &amp;lt; 4; i++){&#xA;    _V1.colors[i] = roomptr[6 + i];&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For each room in the game, the first 3 colours always fall within the range of 0x00 and 0x15, corresponding to the original &lt;a href=&quot;https://www.c64-wiki.com/wiki/Color&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;C64 colour palette&lt;/strong&gt;&lt;/a&gt;.  For most of the other rooms, the fourth colour almost always falls in this range with a few exceptions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Originally I assumed the C64 game was running in Multicolor Character Mode. &#xA; This matched &lt;a href=&quot;https://www.stum.de/2014/02/10/whats-on-the-screen-maniac-mansion/&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;other sources&lt;/strong&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This is purely done in multicolor character graphics &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If the game runs on the C64 in the Multicolor Character Mode I expect the first 3 colours to be used as the common colours across all characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I loaded up Maniac Mansion on the Vice emulator to check the memory settings via the built in monitor tool (ALT+M on Windows).  I checked the memory at these addresses:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bD86F.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bD86F.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was expecting these two addresses to show that the game is running in Multicolor Character Mode:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;D011: $7C  0111 1100  &#xA;D016: $51  0101 0001  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using the following &lt;a href=&quot;https://www.c64-wiki.com/wiki/Graphics_Modes&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;source&lt;/strong&gt;&lt;/a&gt; it looks like the following is enabled:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Extended Background Color Mode (bit 6 set in D011)  &lt;/li&gt;&#xA;&lt;li&gt;Standard Bitmap Mode (bit 5 set in D011)  &lt;/li&gt;&#xA;&lt;li&gt;Multicolor Bitmap Mode (bit 4 set in D016)  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Assuming the bit numbers are counted in this order:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;7 6 5 4 3 2 1 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the same source this is known as Extended Background Color Multicolor Bitmap Mode.  Refer to mode 7 in the table.  The following is stated:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Modes 5-7 are technically feasible, but considered illegal. Although the features expected of modes 5-7 are present (such as collision detection), there is no visible screen output for the user. It is for this reason that they are not utilised.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I checked the addresses for the 3 common background colours:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;D021: $16  0001 0110 &#xA;D022: $26  0010 0110 &#xA;D023: $FB  1111 1011&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see, these bytes do not fall within 0x00 to 0x15, nor do they actually correspond to the same values I am reading in the DOS port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://www.stum.de/2014/02/10/whats-on-the-screen-maniac-mansion/&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;this article&lt;/strong&gt;&lt;/a&gt;, the screen switches between 2 character sets to display text on screen:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Another thing of note is that the C64 supports two different character sets (2×256 Characters) and that the second character set consists of a common font, including the inventory arrows. This is one of the reasons that there is no text in the main game screen – they use the second (font) character set for the title line, switch to the primary set to draw the screen, then back to the secondary set for the menu at the bottom.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I want to know if I am using the correct method to determine the graphic mode for the game in question.&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Ultimately I want to understand how the room's 4th colour is actually applied.&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I have used additional sources to map the &lt;a href=&quot;http://sta.c64.org/cbm64mem.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;C64 memory&lt;/strong&gt;&lt;/a&gt; as well as &lt;a href=&quot;http://dustlayer.com/vic-ii/2013/4/26/vic-ii-for-beginners-screen-modes-cheaper-by-the-dozen&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;which addresses I need to check&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerDisplayName="user4411" LastEditorDisplayName="user4411" LastEditDate="2017-11-18T22:49:19.550" LastActivityDate="2020-12-05T11:28:50.723" Title="How to check the C64 graphics mode used by Maniac Mansion" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;graphics&gt;&lt;gaming&gt;&lt;memory-layout&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5043" PostTypeId="2" ParentId="5027" CreationDate="2017-11-17T02:03:46.217" Score="4" Body="&lt;p&gt;RE:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I think it was a similar type of character&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Impossible Mission II:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this youtube clip that contains the scream audio (the link should take you right to the point it occurs):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=p3-yRum-eFg#t=1m14s&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=p3-yRum-eFg#t=1m14s&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user4411" LastEditorDisplayName="user4411" LastEditDate="2017-11-18T17:36:30.490" LastActivityDate="2017-11-18T17:36:30.490" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5044" PostTypeId="2" ParentId="5030" CreationDate="2017-11-17T15:41:03.127" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://www.youtube.com/watch?v=7h4tepFbMso&quot; rel=&quot;nofollow noreferrer&quot;&gt;8bit guy did a YouTube video&lt;/a&gt; about Steve Job's biggest mistakes. It was a very well done video about comparing the Macintosh vs the AppleIIGS ... and the summary was that in almost every respect the AppleIIGS was a superior machine (in terms of both performance and cost). And that the Macintosh was Steve Jobs attempt to gain more footing at Apple.&lt;/p&gt;&#xA;" OwnerUserId="7168" LastActivityDate="2017-11-17T15:41:03.127" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5045" PostTypeId="2" ParentId="5032" CreationDate="2017-11-17T21:17:58.237" Score="3" Body="&lt;p&gt;Early personal computer magazines published several tiny benchmarks.  One of the earliest portable benchmarks was Byte Sieve, published in Byte Magazine in multiple articles circa 1981 thru 1984.  Byte magazine published several articles using this benchmark to compare different programming languages, as well as to compare the relative performance many personal computers of that era.  The value of this benchmark is the existence of multiple performance reports from the earliest 8-bit personal computer era, providing a good baseline appropriate for the personal computing world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple prime number sieve is an interesting benchmark in that it measures mostly basic arithmetic and array access instruction execution time, and the array size can be scaled both down and up for a range from tiny embedded devices up to larger contemporary processors.  It is not extremely different from McCalpin's Stream benchmark, which at one time was a popular supercomputer performance metric.  Close-to-linear scaling factors can be estimated and applied to Sieve sizes for comparison purposes.  Unlike Ahl's later benchmark from Creative Computing, it does not spend most of it's time executing unknown-quality vendor-written math library routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here it is in Basic: &lt;a href=&quot;https://github.com/hotpaw2/hello-world-1/blob/master/sieve.bas&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/hotpaw2/hello-world-1/blob/master/sieve.bas&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Running this benchmark on in Applesoft Basic on an Apple II with 48k of RAM requires that the array size be reduced to around 7000.  IIRC, it took around 12 to 13 minutes to run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A VAX 11/780, which DEC marketing claimed to be capable of &quot;1 MIP&quot; in general performance, took between 2.5 to 3 seconds to run the Sieve benchmark (size 8192) when compiled from a C version (source code can be found in many places online).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And here is the Sieve benchmark in Swift: &lt;a href=&quot;http://www.nicholson.com/rhn/files/benchmarks/sieve.swift&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.nicholson.com/rhn/files/benchmarks/sieve.swift&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On my iPhone X, after scaling to 1 iteration of size 8192, it would take around 18 milliseconds in interpreted &lt;a href=&quot;http://www.hotpaw.com/rhn/hotpaw/#4&quot; rel=&quot;nofollow noreferrer&quot;&gt;HotPaw Basic&lt;/a&gt;, and around 0.2 milliseconds compiled from Swift -Ounchecked .&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-11-17T21:59:31.717" LastActivityDate="2017-11-17T21:59:31.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5046" PostTypeId="2" ParentId="5042" CreationDate="2017-11-18T17:34:06.467" Score="7" Body="&lt;p&gt;I downloaded the ScummVM source code, and debugged any section of code that read from this &quot;4th colour&quot;.  It appears that before it reads the 4th colour it is overwritten (in a way that appears to match the block of colour ram used in C64's Multicolor Character Mode):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void GdiV1::drawStripV1Background(byte *dst, int dstPitch, int stripnr, int height) {&#xA;    int charIdx;&#xA;    height /= 8;&#xA;    for (int y = 0; y &amp;lt; height; y++) {&#xA;        _V1.colors[3] = (_V1.colorMap[y + stripnr * height] &amp;amp; 7); // overwrite&#xA;        // Check for room color change in V1 zak&#xA;        if (_roomPalette[0] == 255) {&#xA;            _V1.colors[2] = _roomPalette[2];&#xA;            _V1.colors[1] = _roomPalette[1];&#xA;        }&#xA;&#xA;        charIdx = _V1.picMap[y + stripnr * height] * 8;&#xA;        for (int i = 0; i &amp;lt; 8; i++) {&#xA;            byte c = _V1.charMap[charIdx + i];&#xA;            dst[0] = dst[1] = _V1.colors[(c &amp;gt;&amp;gt; 6) &amp;amp; 3];&#xA;            dst[2] = dst[3] = _V1.colors[(c &amp;gt;&amp;gt; 4) &amp;amp; 3];&#xA;            dst[4] = dst[5] = _V1.colors[(c &amp;gt;&amp;gt; 2) &amp;amp; 3];&#xA;            dst[6] = dst[7] = _V1.colors[(c &amp;gt;&amp;gt; 0) &amp;amp; 3]; // read _V1.colors[3]&#xA;            dst += dstPitch;&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The same occurs here:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void GdiV1::drawStripV1Object(byte *dst, int dstPitch, int stripnr, int width, int height) {&#xA;    int charIdx;&#xA;    height /= 8;&#xA;    width /= 8;&#xA;    for (int y = 0; y &amp;lt; height; y++) {&#xA;        _V1.colors[3] = (_V1.objectMap[(y + height) * width + stripnr] &amp;amp; 7); // overwrite&#xA;        charIdx = _V1.objectMap[y * width + stripnr] * 8;&#xA;        for (int i = 0; i &amp;lt; 8; i++) {&#xA;            byte c = _V1.charMap[charIdx + i];&#xA;            dst[0] = dst[1] = _V1.colors[(c &amp;gt;&amp;gt; 6) &amp;amp; 3];&#xA;            dst[2] = dst[3] = _V1.colors[(c &amp;gt;&amp;gt; 4) &amp;amp; 3];&#xA;            dst[4] = dst[5] = _V1.colors[(c &amp;gt;&amp;gt; 2) &amp;amp; 3];&#xA;            dst[6] = dst[7] = _V1.colors[(c &amp;gt;&amp;gt; 0) &amp;amp; 3]; // read _V1.colors[3]&#xA;            dst += dstPitch;&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In terms of the ScummVM emulator, the 4th colour found in the data files is never actually used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That answers my original question: &lt;strong&gt;Ultimately I want to understand how the room's 4th colour is actually applied.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In regards to &lt;strong&gt;I want to know if I am using the correct method to determine the graphic mode for the game in question.&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have used the suggestions in the comments and managed to get meaningful values by using the &lt;code&gt;io&lt;/code&gt; command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(C:$d040) io $d000&#xA;VIC-II:&#xA;&amp;gt;C:d000  00 fd 00 fd  00 fd 00 fd  00 fd 00 fd  00 fd 27 45   ..............'E&#xA;&amp;gt;C:d010  00 9b 37 00  00 ff c9 00  3f 74 f1 00  7f 00 ff 00   ..7.....?t......&#xA;&amp;gt;C:d020  f0 f0 fe fa  f1 fa f0 f1  f2 f3 f4 f5  f6 f7 fc ff   ................&#xA;&amp;gt;C:d030  ff ff ff ff  ff ff ff ff  ff ff ff ff  ff ff ff ff   ................&#xA;&#xA;Rasterline:   current: 0 IRQ: 41&#xA;Display Mode: Standard Hires Text&#xA;Colors:       Border:  0 Background:  0&#xA;Scroll X/Y:   1/3&#xA;Screen Size:  40 x 25&#xA;&#xA;VIC Memory Bank:   $c000 - $ffff&#xA;&#xA;Video Memory:      $cc00&#xA;Character Set:     $f800&#xA;&#xA;Sprites:&#xA;           Spr.0  Spr.1  Spr.2  Spr.3  Spr.4  Spr.5  Spr.6  Spr.7&#xA;Enabled:     yes    yes    yes    yes    yes    yes    yes    yes&#xA;Pointer:     $bc    $bd    $be    $bf    $c0    $00    $c0    $c1&#xA;Address:   $ef00  $ef40  $ef80  $efc0  $f000  $c000  $f000  $f040&#xA;X-Pos:         0      0      0      0      0      0      0     39&#xA;Y-Pos:       253    253    253    253    253    253    253     69&#xA;X-Expand:     no     no     no     no     no     no     no     no&#xA;Y-Expand:     no     no     no     no     no     no     no     no&#xA;Priority:    spr    spr    spr    spr    spr    spr    spr    spr&#xA;Mode:       muco   muco   muco   muco   muco   muco   muco    std&#xA;Color:         1      2      3      4      5      6      7     12&#xA;Multi Color 1: 10  Multi Color 2: 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm not sure why there is a different compared to reading the values directly from the memory compared to using the &lt;code&gt;io&lt;/code&gt; command.  Regardless, the &lt;code&gt;io&lt;/code&gt; command allowed me to confirm that 3 of the 4 colours found in the data files is being applied.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ross Ridge added the following comment to explain the differences seen when reading the values directly from the memory compared to using the &lt;code&gt;io&lt;/code&gt; command:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If you'll look at the memory map you linked you'll see that one of three different things can be mapped into the $D000 to $DFFF address range: &quot;I/O Area (memory mapped chip registers), Character ROM or RAM area (4096 bytes); depends on the value of bits #0-#2 of the processor port at memory address $0001&quot;. Rather than showing you what the CPU currently sees mapped into that range, the VICE debugger may simply be showing the RAM that can be mapped into that range.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerDisplayName="user4411" LastEditorDisplayName="user4411" LastEditDate="2017-12-19T13:18:08.703" LastActivityDate="2017-12-19T13:18:08.703" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5047" PostTypeId="2" ParentId="5032" CreationDate="2017-11-18T18:55:09.107" Score="2" Body="&lt;p&gt;Rather than a software benchmark, how about a physical one: transistors/USD&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software benchmarking the 8-bit Commodores will produce a very clustered set of results. They all used a (roughly) 1 MHz 6502 until the C128 came along, and they all ran almost the same MS Basic interpreter. Most of the value in owning a computer was not running benchmarks, but rather what use you could make of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But comparing the Pet 2001 to the C64C on number of transistors (in processor, support chips, ROM and RAM), the capabilities go up massively while the cost drops. With more memory and better support chips for graphics and sound (hence, more transistors) the more useful the computer became.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, you'd have to correct for the roller-coaster inflation rates of the 80s to make this meaningful. Commodore's an interesting case of starting off buying whatever components would work cheaply (compare two Pet 2001s, and they'll have slightly different power cords, internal fasteners, etc) to growing large enough to become a price-maker for electronic components.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-11-18T18:55:09.107" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5048" PostTypeId="1" AcceptedAnswerId="5050" CreationDate="2017-11-18T19:35:13.923" Score="19" ViewCount="1891" Body="&lt;p&gt;Early consoles and home computers that were optimized for games, tended to provide sprites. From a game programmer's viewpoint, these were good to have. Of course, one always wanted more and larger sprites, suggesting that it bumped up against some resource limit. But I'm trying to understand what the resource limit was, because the observed pattern is surprising.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Atari 800. 8 sprites, 2 or 8 pixels wide.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Commodore 64, 8 sprites, 24 pixels wide. You could use raster interrupts to multiplex on different scan lines; in all cases here, I'm talking about the limit &lt;em&gt;per scan line&lt;/em&gt;. Also, the pixel width could be doubled, but at the cost of halving resolution; the number of bits in each sprite per scan line was constant.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;NES. 8 sprites per scan line, 8 or 16 pixels wide.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Amiga. 8 sprites per scan line, 16 pixels wide.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sprite_(computer_graphics)&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Sprite_(computer_graphics)&lt;/a&gt; gives figures for some other machines; while the limits were increased in later years, the above figures tended to apply in the early eighties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that's machines spanning six years of time, multiple iterations of Moore's law, one or two orders of magnitude of available transistor count, but the sprite limits are strangely constant, which is surprising if transistor count is the limiting resource. Or does the number of transistors required to implement N sprites per scan line of W width, increase superlinearly with N or W? It is true that sprites tended to consume a lot of chip area (reported 2/3 to 3/4 of the Commodore 64 VIC-II; by eyeball from an annotated die photo, at least half of the NES PPU), but the available chip area would not be expected to stay the same over that length of time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it doesn't seem like it should be memory bandwidth; at least the description in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/3208/when-does-the-vic-ii-read-the-sprite-data&quot;&gt;When does the VIC-II read the sprite data?&lt;/a&gt; doesn't seem like the bandwidth requirement should depend on N or W.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what exactly was the limiting resource?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-05-12T15:08:00.990" Title="Limiting factor on sprite sizes" Tags="&lt;history&gt;&lt;video&gt;&lt;chip&gt;&lt;sprite&gt;" AnswerCount="6" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5049" PostTypeId="2" ParentId="5048" CreationDate="2017-11-18T22:41:22.313" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So that's machines spanning six years of time, multiple iterations of Moore's law, one or two orders of magnitude of available transistor count, but the sprite limits are strangely constant, which is surprising if transistor count is the limiting resource. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Or maybe 8 sprites per scan line is something that chip designers considered sufficient for all games they where required to make the chip for? After all, why spend more resources and thus money in each chip produced than necessary?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So what exactly was the limiting resource?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This question is way too broad to have a suitable answer. Of course, it would be possible to hold all sprite coordinates in on-chip registers and use dedicated logic to compare each sprite position vs. each other to detect and resolve overlapping, thus making the number of sprites displayable arbitarily large. Same goes for the sprite data itself. So no memory cycle at all (except for creating and moving them) would be needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But let's be honest, do we need anything more sophisticated? Looking at existing games show that much of the benefits of such a system, if not all, can be reached by clever handling of the existing setup. So why waste money on developing more costly chips?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not to mention that sprites in themselves are only crutches to enable picture manipulation for CPUs that are not fast enough to redraw a changed picture quickly enough. With faster CPUs the need for sprites vanished. While the Amiga still had sprites, the Atari ST only offered a plain bitmap. Still a rather extremely detailed and animated game like Xenon 2 did run smoothly on the ST.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So simple answer, extending the resources to handle more sprites would be a solution without a problem.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="357" LastEditDate="2017-11-24T10:06:04.537" LastActivityDate="2017-11-24T10:06:04.537" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5050" PostTypeId="2" ParentId="5048" CreationDate="2017-11-18T23:44:57.613" Score="8" Body="&lt;p&gt;Actually, the most probable limit was the amount of the on-chip RAM to hold sprites. To my knowledge, sprite circuitry, including sprite on-chip RAM (or just flip-flops) were responsible for the majority of silicon space in VIC-II chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In all the architectures @rwallace listed none were able to buffer even the single line before actually outputting it to TV: memory fetch was synchronous to the pixels outputting. Hence, the sprite data had to be fetched ahead of time and outputted just at the required moment when sprite coordinate comparators fire. The need to pre-fetch and store sprite data on-chip follows from this. Therefore silicon area, rather expensive at the time, limited the size and number of sprites available on those architectures.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="148" LastEditDate="2017-11-23T07:01:32.363" LastActivityDate="2017-11-23T07:01:32.363" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="5051" PostTypeId="2" ParentId="333" CreationDate="2017-11-18T23:50:48.480" Score="3" Body="&lt;p&gt;If it's like the airline reservation terminals I'm familiar with, it will be using a 6-bit bisync serial multidrop protocol under the Airline Link Control (ALC) protocol umbrella.  Searching for ALC, PARS, IPARS, TPF &amp;amp; SITA P1024B should give you all sorts of interesting info.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;em&gt;theory&lt;/em&gt;, you could still hook it up to something.  It's like an IBM 3270 terminal in that it's a block-mode terminal that requires a controller (called a PAD).  You could find an ALC PAD; they're still made or you could find a used one from someone like CR Systems.  As late as Cisco IOS 12.4, ALC PAD code was in the Cisco IBM feature set if you had the right physical interfaces in your router; I don't know about IOS 15 or later.  Probably other routers could do that too.  That gets the terminal talking on a network.  But then, as far as I know, you really need a mainframe running TPF or the equivalent to get the terminal to do anything useful.  Maybe TPF could run on the Hercules emulator; I've never heard of anyone trying that.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Talk to Linux?  I dunno...maybe terminal-&gt;PAD-&gt;token ring/X.25/sync serial-&gt;Linux-&gt;tn3270.  Just a guess, but I doubt it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If all that doesn't put one off, the keyboard is undoubtedly completely proprietary.  If you don't have it, it's unlikely to be documented anywhere well enough to adapt something else.  That's probably a show stopper.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2017-11-18T23:50:48.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5052" PostTypeId="1" CreationDate="2017-11-19T07:35:41.177" Score="14" ViewCount="1128" Body="&lt;p&gt;I've heard the term &lt;em&gt;tacts&lt;/em&gt; when referring to some hardware capability, e.g. &quot;tacts on one frame&quot; or &quot;tacts per second&quot;. I tried Googling this but surprisingly did not find anything relevant. What is the meaning of this term when used in the aforementioned contexts?&lt;/p&gt;&#xA;" OwnerUserId="7174" LastEditorUserId="3290" LastEditDate="2020-04-22T19:38:12.247" LastActivityDate="2020-04-22T19:38:12.247" Title="What are tacts in the context of ZX Spectrum systems?" Tags="&lt;zx-spectrum&gt;&lt;terminology&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5053" PostTypeId="2" ParentId="5052" CreationDate="2017-11-19T08:33:18.397" Score="11" Body="&lt;p&gt;Clock ticks as seen by the processor - e.g. a NOP instruction takes 4 tacts, or a frame takes 69888 tacts (on a 48K Spectrum). It's a fairly common usage of the term within computing circles (not just the Spectrum), being borrowed from the &lt;a href=&quot;https://en.m.wiktionary.org/wiki/tact#English&quot; rel=&quot;noreferrer&quot;&gt;musical meaning&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="360" LastActivityDate="2017-11-19T08:33:18.397" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="5054" PostTypeId="1" AcceptedAnswerId="5055" CreationDate="2017-11-20T01:39:11.003" Score="4" ViewCount="303" Body="&lt;p&gt;I'm not certain but I think it was a PC DOS game. I am reasonably certain it was not a Windows game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was some kind of logic platform game. You played a fairy, and cast spells that turned things into other things, usually ladders. The idea was to move the ladders around to get past the obstacles in the game. You could not fly or jump so ladder really was the best choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But anything turned into a ladder would turn back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could opt to turn things into coins instead, which was usually a mistake, but there was this one puzzle where turning ladders into coins was the right way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't a clue how to find it or what it was called.&lt;/p&gt;&#xA;" OwnerUserId="418" LastActivityDate="2017-11-20T13:06:00.930" Title="Identify logic game involving turning things into ladders" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5055" PostTypeId="2" ParentId="5054" CreationDate="2017-11-20T12:50:37.443" Score="5" Body="&lt;p&gt;This sounds like &lt;a href=&quot;http://www.mobygames.com/game/fgodmom&quot; rel=&quot;noreferrer&quot;&gt;F.Godmom&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;F.Godmom&lt;/em&gt; is a platform game, featuring a fairy godmother as the protagonist. All the fairy godmothers have been captured, and only you are left to save them. [...] The player's only weapon is a magic wand that can be used to transform objects. [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(limiting my quote because I’m not sure how compatible Mobygames’ and Stack Exchange’s terms are).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can play it on the &lt;a href=&quot;https://archive.org/details/msdos_F_Godmom_1991&quot; rel=&quot;noreferrer&quot;&gt;Internet Archive&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-11-20T13:06:00.930" LastActivityDate="2017-11-20T13:06:00.930" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5056" PostTypeId="1" AcceptedAnswerId="5057" CreationDate="2017-11-20T18:33:43.427" Score="11" ViewCount="1191" Body="&lt;p&gt;The Apple II uses memory mapped I/O and soft switches to do many things. One thing has confused me though: why are some soft switches only activated when written to?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, &lt;code&gt;80COLON&lt;/code&gt; (&lt;code&gt;$C00D&lt;/code&gt;) and &lt;code&gt;80COLOFF&lt;/code&gt; (&lt;code&gt;$C00C&lt;/code&gt;) turn on/off the 80-column display but these switches have to be written to to trigger. You would think that perhaps reading them would be the way to determine their state, but that is not the case. Instead, that is done by reading &lt;code&gt;80COL&lt;/code&gt; (&lt;code&gt;$C01F&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then you can look at something like &lt;code&gt;MIXEDOFF&lt;/code&gt; and &lt;code&gt;MIXEDON&lt;/code&gt; (&lt;code&gt;$C051&lt;/code&gt; and &lt;code&gt;$C052&lt;/code&gt;) which turns off the mixed graphics and text (at the bottom) mode. These switches can be triggered by either a a read or a write. Once again, you cannot determine their state by reading them, but rather reading &lt;code&gt;MIXED&lt;/code&gt; at &lt;code&gt;$C01B&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been under the assumption that soft switches basically work by some special circuitry detecting if their address line is active and then the desired operation will happen. You would think that if a write was required, it would be because of the address lines first getting set up and then letting the &lt;code&gt;R/W&lt;/code&gt; signal from the 6502 pulsing to actually trigger the switch. But then why are there some that are R/W and some which are R/O?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason why I was recently thinking about this is because of how the 80-column display works. The hardware obviously needs to bank switch for every other column since the even columns are stored in bank 0 and the odd columns are stored in bank 1. What this means is that (I believe) calls to &lt;code&gt;80STOREON&lt;/code&gt; (&lt;code&gt;$C000&lt;/code&gt;) and &lt;code&gt;80STOREOFF&lt;/code&gt; (&lt;code&gt;$C001&lt;/code&gt;) are hit to bank switch for every other character and then need to be switched back so as not to confuse with the main bank 0 zero page, stack, etc. Of course, with bank switching you also are supposed to disable interrupts and then re-enable them when coming back to the main bank.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this switching and interrupt handling takes a lot of cycles. When the 6502 does a read, it takes a minimum of 4 cycles. For a write, the processor effectively reads the address first before writing it which ends up taking at least 5 cycles. I started thinking why wouldn't the soft switches be implemented to support &quot;read triggering&quot; instead of the more expensive &quot;write triggering&quot;? Sure, it's a tiny fraction of time being spent for the extra cycle, but why not design it to save that tiny fraction? What would be the reason that they would have designed it only with write-triggered soft switches?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; while there are potential differences between read/write cycle times, they are identical for LDA/STA Absolute addressing which would have been the mode used for a soft switch anyway. As such, cycle concerns are invalid.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2017-11-20T20:16:49.527" LastActivityDate="2018-03-01T17:41:51.050" Title="Why are some soft switches on the Apple II only triggered with a write?" Tags="&lt;apple-ii&gt;&lt;6502&gt;&lt;memory-layout&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5057" PostTypeId="2" ParentId="5056" CreationDate="2017-11-20T19:20:05.080" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;[W]hy are some soft switches only activated when written to?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simply because they have been added later. To be exact with the introduction of the IIe/IIc. Originally all Apple II soft switches (including the Language Card) did work just by address selection. Direction was ignored. Usually writes were used, as they do not destroy any register content. Only the RMW instructions must be avoided, as they trigger the soft switch twice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the IIe (and IIc) included additional Hardware, new, prior unused locations were needed. For one, not many were left, thus the trick was to use locations that have, until then, been only used to read data, now in other context with writing. For example, the keyboard at &lt;code&gt;$C000&lt;/code&gt; was a read only resource before on the II/II+. Now &lt;em&gt;writing&lt;/em&gt; to &lt;code&gt;$C000&lt;/code&gt; activated &lt;code&gt;80STOREOFF&lt;/code&gt; on the IIe/IIc. Since the signal was already to be included in the select logic to reuse locations like &lt;code&gt;$C000&lt;/code&gt; is was also used for any other new soft switch - as a side effect preserving the ability to use the same locations as readable information in some future II-series machines. Handling soft switches via writes was at the same time made a general recommendation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, just always write and you're on the safe side.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The hardware obviously needs to bank switch for every other column since the even columns are stored in bank 0 and the odd columns are stored in bank 1.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The hardware doesn't have to do any switching, as the video circuit has its own address scheme. If at all, a/your program has to do so to access either location.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;All this switching and interrupt handling takes a lot of cycles. When the 6502 does a read, it takes a minimum of 4 cycles. For a write, the processor effectively reads the address first before writing it which ends up taking at least 5 cycles.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mind to explain this in detail. In my text book 6500 reads and writes are equally just one cycle. An LDA $C000 takes exactly 4 cycles, same as a STA $C000 does. Are you mixing this up with RMW operations, like INC, ROL, TSB or alike?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="382" LastEditDate="2018-03-01T17:41:51.050" LastActivityDate="2018-03-01T17:41:51.050" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5058" PostTypeId="1" AcceptedAnswerId="5060" CreationDate="2017-11-20T23:28:32.413" Score="6" ViewCount="737" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_Agnus&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/MOS_Technology_Agnus&lt;/a&gt; the Agnus, one of the three custom chips in the Amiga, that included the copper and blitter among other functions, contained a total of 21,000 transistors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How many transistors did the copper and blitter contain? Or what fraction of chip area was devoted to them? Or does there exist an annotated die photo of the Agnus?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="11916" LastEditDate="2019-04-09T21:56:18.983" LastActivityDate="2019-04-09T21:56:18.983" Title="Transistor count of copper and blitter" Tags="&lt;amiga&gt;&lt;mos-agnus&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5059" PostTypeId="2" ParentId="5052" CreationDate="2017-11-20T23:47:47.910" Score="6" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tact &lt;code&gt;[T]&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This term is equivalent for CPU clock period and it is the smallest time chunk in CPU based computer timings. One level higher are the MC machine cycles (each MC is 1 or more tacts depends on MC type and CPU architecture). So if you see something like &lt;code&gt;10T&lt;/code&gt; that means it is time duration of &lt;code&gt;10&lt;/code&gt; periods of CPU clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way of timing notation is independent on CPU frequency so you can compute duration of code universally and apply CPU clock on the final time ... It is used mostly for individual instruction timings. Some instructions have 2 times like &lt;code&gt;8/10T&lt;/code&gt; which means instruction can run in either &lt;code&gt;8T&lt;/code&gt; or &lt;code&gt;10T&lt;/code&gt; depending on something (like state of flags, condition, etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/a/18911590/2521214&quot;&gt;Here&lt;/a&gt; some example instructions timing for Z80:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;opc      T0 T1 MC1   MC2   MC3   MC4   MC5   MC6   MC7   mnemonic&#xA;&#xA;B8       04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,B&#xA;B9       04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,C&#xA;BA       04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,D&#xA;BB       04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,E&#xA;BC       04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,H&#xA;BD       04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,L&#xA;BE       07 00 M1R 4 MRD 3 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,(HL)&#xA;BF       04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,A&#xA;C0       11 05 M1R 5 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 RET NZ&#xA;C1       10 00 M1R 4 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 POP BC&#xA;C2L2H2   10 10 M1R 4 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 JP NZ,U16&#xA;C3L1H1   10 00 M1R 4 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 JP U16&#xA;C4L2H2   17 10 M1R 4 MRD 3 MRD 4 MWR 3 MWR 3 ... 0 ... 0 CALL NZ,U16&#xA;C5       11 00 M1R 5 MWR 3 MWR 3 ... 0 ... 0 ... 0 ... 0 PUSH BC&#xA;C6U2     07 00 M1R 4 MRD 3 ... 0 ... 0 ... 0 ... 0 ... 0 ADD A,U8&#xA;C7       11 00 M1R 5 MWR 3 MWR 3 ... 0 ... 0 ... 0 ... 0 RST 00H&#xA;C8       11 05 M1R 5 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 RET Z&#xA;C9       10 00 M1R 4 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 RET&#xA;CAL2H2   10 10 M1R 4 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 JP Z,U16&#xA;&#xA;opc:    operation code [hex]&#xA;        L1,H1,U1,S1 means first operand direct number or address&#xA;        L2,H2,U2,S2 means second operand direct number or address&#xA;        L3,H3,U3,S3 means third operand direct number or address&#xA;        H,L ... U16 high and low byte&#xA;        U   ... U8 unsigned byte&#xA;        S   ... S8 signed byte&#xA;&#xA;T0      normal instruction duration [T] always 2 decimal digits&#xA;T1      instruction duration if condition not met [T] always 2 decimal digits&#xA;&#xA;MC1++   Machine cycle first is type,second is duration [T] always 1 decimal digit&#xA;        ...     unused&#xA;        M1R     M1 cycle&#xA;        MRD     memory read&#xA;        MWR     memory write&#xA;        IOR     IO read&#xA;        IOW     IO write&#xA;        NON     no external operation (internal computation)&#xA;        INT     interrupt cycle&#xA;&#xA;mnem    instruction text (mnemonic)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;opc&lt;/code&gt; is used for the address in an array of pointers&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mnemonic&lt;/code&gt; is used to select the proper function pointer, and operands type&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;T0&lt;/code&gt; and &lt;code&gt;T1&lt;/code&gt; are used for instructions timing (this is enough for rough emulations)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;MC1++&lt;/code&gt; are used for correct MC timings (to implement correct hardware emulation and contentions timing)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As you can see all the times are in &lt;code&gt;[T]&lt;/code&gt; tacts.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tacts per frame&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On ZX computers the screen is outputted with 50 Hz frequency triggering interrupt each frame. The time between two interrupts in CPU clock tacts is referred as tacts per frame. This value is defined by model of ZX (type of ULA) and CPU clock frequency. It can be measured and used to determine type of ZX by reading IR register and approximation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This value is very important as all the stuff your code is doing must fit into it. The frame timing itself is a bit more complicated and can be used to achieve &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=0018933&quot; rel=&quot;nofollow noreferrer&quot;&gt;border effects&lt;/a&gt; or even &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4859/6868&quot;&gt;multitech techniques&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC here are some actual values:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;69888T ZXS 48k&#xA;70908T ZXS 128K&#xA;80384T Didaktik M,Didaktik Kompakt&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-11-21T08:39:36.070" LastActivityDate="2019-11-21T08:39:36.070" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="5060" PostTypeId="2" ParentId="5058" CreationDate="2017-11-21T01:22:51.263" Score="8" Body="&lt;p&gt;I don't know any annotated die photos, or any other analysis of this chip, but there are some (fairly low resolution) photos out there, so in the spirit of opening a discussion, I thought I'd post this.  Don't take this as gospel truth: I'm not an expert at this.  I've spent a while reading about chip design, but have no practical experience, and this is a long way out of my comfort zone, but... the best die photo of Agnus I can find is a long way from being good quality, but here's my best guess at the structures I can identify there:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NXX6t.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NXX6t.png&quot; alt=&quot;Agnus die photo&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'm reasonably confident about: the section highlighted in red.  There are either 12 nearly-identical or 24 mirrored units in this array.  Given the unusual number, and that Agnus has 24 DMA controllers, this is almost certainly what these are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not so confident about the section highlighted blue, but this is my best guess for where Copper is.  It's certainly a complex section of the chip with a high degree of feedback, and looks similar to other processor control circuits I've looked at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm even less confident about the green section, but that's my best guess at the location of the blitter.   It's about the size I'd expect the blitter to be, and has a degree of regularity that you'd expect from a circuit of that nature (a lot of similar functions handled with different types of shift and mask patterns, and so on).  I'd be more confident, however, if it wasn't so far from the DMA channels that I'd expect it to be interacting with quite heavily, so I'd definitely bow to anybody else's reasoned opinions on where else the blitter might be.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-11-21T01:22:51.263" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5061" PostTypeId="2" ParentId="5052" CreationDate="2017-11-21T11:31:07.883" Score="10" Body="&lt;p&gt;The word &quot;такт&quot; is routinely used in russian to denote exactly &quot;clock cycle&quot; in digital electronics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It always was and still is heavily used in the russian ZX scene in the same meaning (e.g. counting clock cycles of Z80 CPU, etc.) and sometimes was (and is) leaking to the english texts written by native russian speakers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &quot;tact&quot; could be recognized as a &lt;a href=&quot;http://en.wikipedia.org/wiki/Semantic_loan&quot; rel=&quot;noreferrer&quot;&gt;semantic loan&lt;/a&gt; from russian.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2017-11-22T09:42:35.877" LastActivityDate="2017-11-22T09:42:35.877" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5062" PostTypeId="1" CreationDate="2017-11-22T07:06:08.127" Score="0" ViewCount="176" Body="&lt;p&gt;I was watching a movie &lt;a href=&quot;http://www.imdb.com/title/tt0095519/&quot; rel=&quot;nofollow noreferrer&quot;&gt;License to Drive&lt;/a&gt; (1988) where the character was doing a DMV (Department of Motor Vehicles) knowledge test on an interactive software on a PC. I was a bit surprised that such tests may have existed back then, probably because what was then probably a high-tech solution in a conservative government body seems out of context. Such a solution may also hint to the use of a LAN (Large Area Network), which is even more surprising for that year.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is when did such tests actually start? The movie takes place in California.&lt;/p&gt;&#xA;" OwnerUserId="7180" LastEditorUserId="4138" LastEditDate="2017-11-22T11:25:52.727" LastActivityDate="2017-11-22T12:00:24.477" Title="PC for DMV knowledge test - since when?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="0" ClosedDate="2017-11-23T20:12:29.120" ContentLicense="CC BY-SA 3.0" />
  <row Id="5063" PostTypeId="2" ParentId="5062" CreationDate="2017-11-22T12:00:24.477" Score="2" Body="&lt;p&gt;Thanks to the rather broad question, even some serious old technology like Scantron and Mark-Sense fits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scantron based tests are in use by various DMV (*1) in the US since the 1970s. Even before that IBM Mark-Sense systems (*2) where used. So computer based licence tests handling is nothing new.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar terminal based solutions have been tried and used since the 1970s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*1 - or whatever agancy takes/took the test in a state&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Some may remember the system from school, where you had to usespecial pencils and make nice big graphite markings&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2017-11-22T12:00:24.477" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5064" PostTypeId="1" AcceptedAnswerId="5068" CreationDate="2017-11-22T15:25:40.757" Score="70" ViewCount="8243" Body="&lt;p&gt;The first inexpensive modem I ever purchased was a 300 baud direct-connect unit for the C64 User Port in late 1983. I recall that a couple of years later (1986), 1200 baud modems were affordable and I was able to make this significant (4X speed) upgrade. Then, by 1989, 2400 baud modems became affordable and I upgraded from a C64 to an Amiga with 2400 baud Supra Modem.&#xA;&#xA;The above timeline of about 6 years saw an 8X speed increase in what I would call affordable, consumer, &quot;low-speed&quot; modems. What came during the next 6 years felt quite different to me as I remember it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 9600 bps modems were out of reach price-wise as the early 1990s began. I remember the US Robotics Courier 9600 model being a large &quot;beast&quot; of an external box that cost nearly $1,000. What happened in the next few years seemed tremendous to me as, first, the price of these new &quot;high-speed&quot; modems fell to under $200 and, second, the speeds seemed to increase dramatically almost every year. By about 1996, 56 Kbps modems were inexpensive accessories that were often present in PCs. Naturally, this was a key to the growth in residential Internet access that followed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The comparatively fast leap from 2400 bps to 56 Kbps was a 24X speed increase in roughly the same time it had taken for the 8X speed increase I experienced in the 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is what technology factors allowed for the rapid speed increases of inexpensive, consumer modems during this new generation of &quot;high speed&quot; modems that began with the 9600 bps variants and culminated with the 56 Kbps variants in only about 6 years.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-01-24T16:29:59.387" LastActivityDate="2018-01-24T16:29:59.387" Title="What technological factors drove the rise of &quot;high-speed&quot; modems in the early 1990s?" Tags="&lt;history&gt;&lt;modem&gt;&lt;internet&gt;" AnswerCount="6" CommentCount="12" FavoriteCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="5065" PostTypeId="2" ParentId="5064" CreationDate="2017-11-22T15:56:41.177" Score="5" Body="&lt;p&gt;The answer might be too simple and not as desired: &lt;strong&gt;Nothing revolutionary or new in particular&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The underlaying physics/mathematics and the technology neccessary was know since quite some time. Speed up was mainly driven thru general availability of faster chips and classic market forces: Fast enough DSP and lowered prices within an emerging mass market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually another great example that next to all development during the computer revolution wasn't driven thru revolutionary technology, but enabeled by improved manufacturing.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2017-11-22T15:56:41.177" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5066" PostTypeId="2" ParentId="5064" CreationDate="2017-11-22T16:11:18.440" Score="7" Body="&lt;p&gt;I think the primary driver was the new availability of the Internet in the home. At that time modems were the primary method of getting online so it was worthwhile for companies to pursue ways to make modems faster. They implemented compression and better ways to encode the data so more bits could be transferred per second. They also focused more on increasing the download rate instead of increasing the upload rate, which allowed higher download rates be achieved. Finally, they hit a download rate of 56Kbps and and upload rate of 33.6Kbps. Then DSL came along...&lt;/p&gt;&#xA;" OwnerUserId="637" LastEditorUserId="637" LastEditDate="2017-11-27T14:34:51.693" LastActivityDate="2017-11-27T14:34:51.693" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5067" PostTypeId="2" ParentId="5064" CreationDate="2017-11-22T16:27:14.603" Score="7" Body="&lt;p&gt;I would say the big breakthrough is when &lt;code&gt;V.90&lt;/code&gt; was introduced. ISPs no longer had traditional modems installed to receive calls as the analog phone lines were replaced with 64kbit digital lines or multiplexed over T1 and similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This removed the digital to analog conversion that was done on the ISP side, allowing up to 56kbps from the ISP to the customer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When &lt;code&gt;V.92&lt;/code&gt; came along it boosted the customer to ISP upper limit rate to 48kbps.&lt;/p&gt;&#xA;" OwnerUserId="2054" LastEditorUserId="2054" LastEditDate="2017-11-23T13:25:05.627" LastActivityDate="2017-11-23T13:25:05.627" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5068" PostTypeId="2" ParentId="5064" CreationDate="2017-11-22T17:21:19.107" Score="98" Body="&lt;p&gt;Up to 9,600 baud it's just iterative application of fairly straightforward analogue-domain ideas as and when standards emerge. Then there's a significant improvement on the digital side that bumps to 14,400 baud. Incremental phone line improvements lead from there to 33,600 baud. Finally, a digital back end for the phone network provides 56k as a downward special case.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;300 baud modems use simple frequency-keyed shifting: during the relevant 1/300th of a second the calling modem produces a 1070Hz tone for a 0, and a 1,270Hz tone for a 1. The receiving modem produces a 2,025Hz tone for a 0 and a 2,225Hz tone for a 1. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The change that brought 1,200 baud was a switch to phase-shift keying. Different symbols are now indicated by changes in wave phase, not frequency, and the number of symbols was increased from two (i.e. 0 or 1) to four or eight as the phone line permitted. Same frequency range but up to four times as much information per symbol = four times the bandwidth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Different frequencies were used at each end of communications because phone lines are not two distinct and isolated channels, but rather each direction contains a slight echo of the other. The jump to 9,600 baud came through active echo cancellation — each modem measures the amount and delay of echo at the start of the call and subsequently keeps enough of a history to eliminate its returning output — and a switch to quadrature amplitude modulation, which is amplitude modulation of two sine waves, added together (and possibly slightly more famous for also being how colour is transmitted in the NTSC and PAL standards). That gives twice as many channels in operation, but with the active noise cancellation you're also no longer having to divide up frequencies between caller and receiver. So that's another multiply by four, to 9,600 baud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next leap is accepting a lossy signal through the Viterbi algorithm, via trellis modulation: it's a way to determine the most likely unobserved original signal that gave rise to an observed signal. So you're in the general realm of the Hidden Markov model. The mathematics predates modems and its application to modems was first published in 1976 but the paper that really made a splash with detailed empirical results is from 1982 and the corresponding ITU standard was agreed in 1990.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, phone lines get better so they up the underlying frequencies and tweak the tables underlying the trellis to get to 33.6 kbaud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually the phone network back-end went digital and 56 kbaud transmissions exploit exact phase alignment with the digital PCM samples — they're fed to the phone network directly as digital streams — and the fact that the final analogue hop isn't very far, so you can exploit a greater frequency range. Upload speeds remained at the old rate since the end-user has to feed analogue out and you'd be Nyquist limited even if you had an entirely lossless connection to whatever is digitising you given that its phase is unknown.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Outside of the standards process, there was also the Telebit Trailblazer, which went the other way: instead of trying to pack in complex symbols fast, keep them simple and slow but fill the entire potential frequency range with channels and dynamically enable or disable them based on which are getting through. That was an early leader but always proprietary.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-11-22T21:14:57.527" LastActivityDate="2017-11-22T21:14:57.527" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="5069" PostTypeId="1" CreationDate="2017-11-22T19:36:25.613" Score="13" ViewCount="2434" Body="&lt;h1&gt;What is going on in the overscan area of Sega Genesis games?&lt;/h1&gt;&#xA;&lt;p&gt;I noticed that different games display different things in the overscan area.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;I understand this was never intended to be seen.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;However, I would still like a &lt;strong&gt;technical explanation&lt;/strong&gt;. Was this useful to developers somehow?&lt;/p&gt;&#xA;&lt;p&gt;Here is a video I found that shows it.&#xA;&lt;a href=&quot;https://youtu.be/tT9OnPjQKWY?t=94&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/tT9OnPjQKWY?t=94&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here is screenshot from that video. Just one example of different things that could be in the overscan area.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YBKCl.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YBKCl.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6990" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-07-26T10:41:58.423" Title="What is going on in the overscan area of Sega Genesis games?" Tags="&lt;programming&gt;&lt;video&gt;&lt;gaming&gt;&lt;sega-genesis&gt;&lt;television&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5070" PostTypeId="2" ParentId="5069" CreationDate="2017-11-22T20:37:34.340" Score="12" Body="&lt;p&gt;Short answer: &lt;strong&gt;No&lt;/strong&gt;. At least not for display purposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pixels shown are artefacts when the VDP is operation in modes with more than 224 lines (NTSC). These lines were usually not displayed on real TV boxes. Nonetheless, the VDP did generate the lines from whatever tiles it did find at the proper locations. Depending on the game they where uninitialized, contained previous data or where used to store some game data. Some games even did carefully fill these locations with some background colour or an extension of the playfield.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if the game used these areas for data storage, you may see funny graphics blinking. After all, the Mega Drive did only offer 64 KiB direct accessible RAM for the main CPU (plus 8 KiB for the Z80), so unused potions of the 64 KiB of Video RAM accessible via the VDP dared to be used. :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2018-07-26T10:41:58.423" LastActivityDate="2018-07-26T10:41:58.423" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5071" PostTypeId="1" AcceptedAnswerId="6032" CreationDate="2017-11-22T23:33:24.297" Score="6" ViewCount="920" Body="&lt;p&gt;Decades ago I bought a database cartridge for my C64.  IIRC it was a no-name brand being sold as close-out or from a bargain bin.  It may have been the slowest program I ever bought.  It wasn't too bad for the first few entries, but by the time the database had 25 or so entries, adding a new entry would literally take minutes. Once you felt the slowdown, each new entry would take even longer to be accepted.  I built an address book, but it became unusable due to the database speed problem.&lt;/p&gt;&#xA;&lt;p&gt;Does anybody else remember what this thing was called? As far as its progressively slower performance as entries were added, I decided it was poorly designed.  I'm thinking they used some sort of recursive method, but not really knowing what they were doing.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="15334" LastEditDate="2021-01-23T18:45:08.647" LastActivityDate="2021-01-23T18:45:08.647" Title="Does anybody remember a database cartridge for the Commodore 64?" Tags="&lt;commodore-64&gt;&lt;identify-this-software&gt;&lt;application-program&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="5072" PostTypeId="5" CreationDate="2017-11-22T23:34:53.550" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-11-22T23:34:53.550" LastActivityDate="2017-11-22T23:34:53.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5073" PostTypeId="4" CreationDate="2017-11-22T23:34:53.550" Score="0" Body="Use this tag for questions about application programs designed for retro computers." OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2017-11-23T08:44:05.260" LastActivityDate="2017-11-23T08:44:05.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5074" PostTypeId="2" ParentId="5048" CreationDate="2017-11-23T06:23:33.530" Score="7" Body="&lt;p&gt;On most of those early systems, the scan line data for the sprites was fetched from main memory during the horizontal blanking interval prior to each display scan line, which is a fixed amount of time in NTSC or PAL video timing.  So the number (and width) of sprites was limited by memory bandwidth (which was limited by memory data bus width and DRAM cycle time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, memory bandwidth improvements lagged behind increases in the transistor counts predicted by Moore ‘s Law.  Also, large enough on-chip memories, such as for data caches, were not common until much later, around the time of the 68030.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2017-11-23T19:07:10.820" LastActivityDate="2017-11-23T19:07:10.820" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5076" PostTypeId="2" ParentId="5071" CreationDate="2017-11-23T13:37:23.163" Score="1" Body="&lt;p&gt;Is it perhaps Delphi Oracle? It came with a copy-protection dongle that plugged in the cassette port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was kind of silly because it would be easily reproduced by putting a paperclip on pins 4,5.&lt;/p&gt;&#xA;" OwnerUserId="2054" LastActivityDate="2017-11-23T13:37:23.163" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5077" PostTypeId="2" ParentId="5048" CreationDate="2017-11-23T15:13:27.777" Score="4" Body="&lt;p&gt;Memory bandwidth was usually the limiting factor. The video generation hardware has to fetch data for the background image and all sprites from memory. On most 8/16 bit systems this was done &quot;on-the-fly&quot;, as the screen image was being generated. As such memory speed placed an absolute limit on the amount of data that could be fetched in the time available, which was typically only one scanline or 64uS on a PAL system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory bandwidth also had to be shared with other devices. Typically the video generator hardware would get priority in order to avoid the screen breaking up. Whatever was left would be available for the GPU, CPU, sound, disk and other hardware to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node012B.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga has a total of 226 memory access slots available per scanline&lt;/a&gt;. Of those, 80 are allocated for background graphics, 11 for various other things and 16 for sprites. That leaves 119 available for the CPU and the Amiga's graphics accelerator (blitter). So the Amiga could actually support more sprites, at the expense of other functions, but other systems were often more limited.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see the result of this on certain machines, most notably the Nintendo Famicom / NES. Sprite flicker was common in Famicom games, and was caused by the system not having enough memory bandwidth to fetch graphic data for all the sprites on a given scanline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many systems limited the available number of sprites to make flicker impossible, but the Famicom designers decided to allow the programmers greater freedom to manage sprites themselves and decide on the best trade-offs.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2017-11-23T15:13:27.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5078" PostTypeId="1" AcceptedAnswerId="5096" CreationDate="2017-11-24T01:23:53.593" Score="12" ViewCount="1462" Body="&lt;p&gt;I just came across a fascinating video &lt;a href=&quot;https://www.youtube.com/watch?v=7h4tepFbMso&amp;amp;t=78s&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=7h4tepFbMso&amp;amp;t=78s&lt;/a&gt; which makes a coherent case - I don't feel I can pass a final verdict on whether he's right or wrong, but a coherent case - that the Mac was a mistake, that equal or better results could have been obtained by incremental development of the Apple II line without sacrificing backward compatibility. In support of this, he presents evidence that the Apple II GS at $1500 with color monitor, was a better machine than the Mac Plus at $2600. I'm not convinced by his claim that the 65816 had the potential to match the performance of the 68000, but the rest looks pretty solid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'm wondering is, given that the Apple II GS by and large had better hardware, how did it cost less?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One obvious possibility is that the Mac did not actually cost any more to manufacture, but was sold at a higher price for higher profit margin. That seems a bit of a stretch. Granted Apple was reputed to have the highest profit margins in the industry, but the estimates I've seen for their profit margins as a ratio between retail price and manufacturing cost have been along the lines of 3x, maybe 4x; for reference, Commodore typically had 3x, which seems to have been quite normal. The Mac Plus, by that explanation, would have had to go &lt;em&gt;far&lt;/em&gt; beyond that. And if they were going to bump the price of any machine to extract profit, why wouldn't they do that with the old cash cow instead of the new machine they wanted everyone to buy because it was hoped to be the future standard?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ideal would be a table of cost estimates like &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_64#Manufacturing_cost&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Commodore_64#Manufacturing_cost&lt;/a&gt; for the two machines, but I haven't been able to find such. The closest I've found so far is &lt;a href=&quot;https://web.stanford.edu/dept/SUL/sites/mac/primary/docs/bom/cost.html&quot; rel=&quot;noreferrer&quot;&gt;https://web.stanford.edu/dept/SUL/sites/mac/primary/docs/bom/cost.html&lt;/a&gt; which is Apple's own estimates for the Mac, years before the fact (and seems to have been an underestimate by a considerable factor; why the underestimate, I don't know).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are any cost data or credible estimates for these two machines, either absolute or relative, available?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-24T07:39:25.150" Title="Apple II GS versus Mac Plus cost" Tags="&lt;history&gt;&lt;apple-macintosh&gt;&lt;apple&gt;&lt;apple-iigs&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5080" PostTypeId="1" CreationDate="2017-11-24T07:27:45.443" Score="39" ViewCount="12124" Body="&lt;p&gt;What were the fastest CP/M computers ever built?&lt;/p&gt;&#xA;&lt;p&gt;I'll restrict this to the Z80 variant of CP/M, no CP/M-86, CP/M-68k etc.&lt;/p&gt;&#xA;&lt;p&gt;Z80 compatibles with higher clock frequencies or more instructions/clock or other modifications count, as long as it ran CP/M using mostly the Z80 ISA. Overclocked homebrew systems count.&lt;/p&gt;&#xA;&lt;p&gt;Multi-processor systems count (total attainable MIPS).&lt;/p&gt;&#xA;&lt;p&gt;Emulated hardware does not count, it must be an existing Z80-compatible CPU that's somehow running on real silicon.&lt;/p&gt;&#xA;&lt;p&gt;FPGAs etc. are worth considering if someone has actually done that for some other purpose than &amp;quot;it would be cool, I have this FPGA lying around here anyway, so let's just do it, it's easy&amp;quot;. E.g. for some accelerator of a legacy system that served a real purpose.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;To avoid confusion, some background on the question: When reading about CP/M machines, I found some were a lot faster than your run-of-the-mill Z80. So I wondered how far people actually pushed this, when CP/M was still in use. Therefore &amp;quot;must run CP/M, no emulated hardware&amp;quot;. Then someone mentioned FPGAs, so I said &amp;quot;ok, if people used this to speed up real CP/M systems, then ok&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Multi-processor systems (which I didn't exclude, because that would have been an obvious way to make it faster) only make sense if they somehow ran a modified CP/M, M/PM etc. on all cores. Lots of single machines each running CP/M (like the ZMOB, where it is used to provide an environment on each machine) don't make for a faster machine in total - they are still single machines, each running its own CP/M, even if they communicate.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-02-23T09:15:54.047" LastActivityDate="2021-02-23T09:15:54.047" Title="Fastest non-emulated CP/M Z80-based computer ever built?" Tags="&lt;z80&gt;&lt;cp-m&gt;" AnswerCount="10" CommentCount="9" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5081" PostTypeId="1" AcceptedAnswerId="5084" CreationDate="2017-11-24T08:20:19.677" Score="3" ViewCount="422" Body="&lt;p&gt;I used to have a modem that was a little black cube about 1.25&quot; on each side.  Maybe a little bigger. 19.2Kbaud I think.  I can't remember the name of the company or the model or anything and searches haven't found anything.  Does anyone remember this one?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a really strange form factor - especially considering most modems of the time were just in extruded aluminum cases of one kind or another.  For some reason I've been thinking of it lately.&lt;/p&gt;&#xA;" OwnerUserId="332" LastActivityDate="2018-03-03T21:09:03.330" Title="What modem was a little black cube about 1.25&quot; on each side?" Tags="&lt;modem&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5082" PostTypeId="2" ParentId="5080" CreationDate="2017-11-24T10:09:27.163" Score="31" Body="&lt;p&gt;If we consider only &lt;em&gt;real&lt;/em&gt; Z80 (i.e. no emulation and no FPGA), probably the fastest Z80 compatible CPU is eZ80 (runs at 50 MHz, but has 3-stage pipeline, so in theory it could reach 3× the speed of Z80 at the same frequency).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.shaels.net/index.php/mic80/mic80-general/38-mico-overview&quot; rel=&quot;noreferrer&quot;&gt;This hobbyist project&lt;/a&gt; describes eZ80 board and CP/M running natively on in, author says &quot;The system runs Z80 code on average 30 times faster then a 4MHz Z80 did&quot; which agrees with the expected speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any modern-ish RAM is fast enough to not make RAM access speed an issue.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2017-11-24T10:09:27.163" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5083" PostTypeId="2" ParentId="5080" CreationDate="2017-11-24T11:20:12.377" Score="23" Body="&lt;p&gt;Hard to tell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fastest Z80 CP/M system I had &lt;strong&gt;in ye olde days&lt;/strong&gt; (aka ~1982) was a Z80H card for my Apple II running at 12 MHz. It got its own 64 KiB and was a clone of a similar card running at 6 MHz. We thought we could speed it up a lot, but most cards produced wouldn't get past 10 MHz. Don't get me wrong: that's still not only awesome compared with the original 2 MHz of the MS-Z80 Card, but considerable faster than any other card. Still, we didn't reach our dreams. Partly due to the poor layout, but mostly because even weeks of selecting chips (The Z80H was only specified for 8 MHz) didn't produce enough stable setups.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Later on&lt;/strong&gt;, NEC introduced their V20/V30 8088/86 compatible CPUs with built-in 8080 core. We used to put one in a 8088-based 'Turbo' PC at 12 MHz - the equivalent Z80 speed might have been considerably higher, but I do not remember any numbers. For some time, it was quite  popular over here to have CP/M applications run seamlessly under MS-DOS. These chips were available up to 16 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mid 1980s Hitachi's 64180 gained quite some audience with CP/M users, as it was not only fast (up to 12 MHz) but also offered up to 1 MB address space, nicely made to run with CP/M 3. Around the same time Toshiba introduced its Z80 SOC with even faster versions, just it went mostly into embedded systems. It's said that there have been MSX machines based on that chip, but I can't name any.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In the early 1990s&lt;/strong&gt;, Zilog offered C-MOS implementations of the genuine Z80 design (84C00, not any enhanced/compatible chip) with up to 20 MHz. So the maximum speed for a 'real' Z80 might be around that - maybe + 20-30% for overclocking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And &lt;strong&gt;today (past 1998)&lt;/strong&gt;, there's the eZ80; unlike previous enhancements Zilog made in the Z280/Z380, this is more like the original Z80 and able to run at 50 MHz. Speed compared to the original Z80 will be somewhere at or above 100 MHz as the architecture got seriously improved. System building with an eZ80 is quite classic, as I learned doing an eZ80 card for the Apple II (again) in 2008.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Synchronous CPUs designs like this hit a hard border here, as RAM speed is the limiting factor. Despite all the multi-gigabyte transfer rates that modern RAMs offer, their real cycle time for a synchronous access is still in the 10ns region, so there's no real room past 100 MHz. Then again, modern x86 brutes may run emulations at equivalent speeds of several hundred MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Real Z80 tops out at ~20 MHz,&lt;/li&gt;&#xA;&lt;li&gt;Z80-compatible eZ80 around 100 MHz equivalent execution speed (50 MHz chip) and&lt;/li&gt;&#xA;&lt;li&gt;Z80 emulations anywhere past that.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-03-27T17:39:04.903" LastActivityDate="2019-03-27T17:39:04.903" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="5084" PostTypeId="2" ParentId="5081" CreationDate="2017-11-24T11:55:34.960" Score="6" Body="&lt;p&gt;You're looking for the &lt;strong&gt;Telebit QBlazer&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't just 19.2k, but a 9.6k V32 or 14.4k V32bis as QBlazer+. Your confusion might originate in their claims to run up to 38.4k ... available due to compression.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also was more like 2.3 inch (6cm) on each side. But yeah, small and portable and still a full figured desktop modem. The ability to be powered from a single 9V block did add to this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The QBlazer was first shipped for Christmas 1991 at 700+ USD, but dropped a year later down to 300 USD - right when the QBlazer+ came out.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="56" LastEditDate="2017-11-26T05:26:12.807" LastActivityDate="2017-11-26T05:26:12.807" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5085" PostTypeId="2" ParentId="5080" CreationDate="2017-11-24T13:06:56.590" Score="11" Body="&lt;p&gt;Back in 1995, I used to work on satellite on-board-systems that were typically powered by a number of 1MHz Z80 forming what you would today call a multi-core CPU. The Z80 communicated through shared memory segments and worked out complex fixed-point calculation for earth observation, radar range measurement, and general telemetry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While these were not particularly fast CPUs, the development and simulation took place on PCs that had Hitachi 64180 CPU cards equipped that were (I think) overclocked to 16MHz and ran CP/M on the boards. You could even run multiple CP/M instances on one PC if you fitted more than one card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, I can only find versions of that chip up to 10MHz.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-11-05T14:25:06.863" LastActivityDate="2018-11-05T14:25:06.863" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="5086" PostTypeId="1" AcceptedAnswerId="5090" CreationDate="2017-11-24T17:55:56.630" Score="30" ViewCount="2586" Body="&lt;p&gt;On CompuServe in the 1990's, my ID was &quot;73313, 3443&quot;. I still remember it today because it was (seemed) way more important to me than any phone numbers I ever memorized.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to Wikipedia:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The original CompuServe user IDs consisted of seven octal digits in&#xA;  the form 7xxxx,xx - a legacy of PDP-10 architecture - (later eight and&#xA;  nine octal digits in the form 7xxxx,xxx[20] and 7xxxx,xxxx and finally&#xA;  ten octal digits in the form 1xxxxx,xxxx)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;How, exactly, was this User ID format &quot;a legacy of PDP-10 architecture&quot;?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-04-03T13:51:00.953" Title="What was the technical reason behind the octal digits used for CompuServe User IDs?" Tags="&lt;modem&gt;&lt;network&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5087" PostTypeId="1" AcceptedAnswerId="5092" CreationDate="2017-11-24T18:40:41.977" Score="11" ViewCount="618" Body="&lt;p&gt;Is there a program for the C64 that plays the game of Go? Progress on go engines has started later than with chess, so maybe there is no C64 Go software from the 80s, but maybe someone has recently created such a program? The program does not have to be strong, just be able to play the game.&lt;/p&gt;&#xA;" OwnerUserId="6970" LastActivityDate="2017-11-24T20:49:43.097" Title="Go program for the C64" Tags="&lt;commodore-64&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5088" PostTypeId="2" ParentId="5086" CreationDate="2017-11-24T19:00:59.517" Score="7" Body="&lt;p&gt;Simply because DEC used octal representation of binary values, where IBM (and later micros) used hex. The PDP-10 used an 18 bit address and half word as smalest computational unit (the machine had 36 bit words). 18 Bits can be represented as 6 octal digits. So here you are. They just followed that scheme.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2017-11-24T19:00:59.517" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5089" PostTypeId="2" ParentId="5064" CreationDate="2017-11-24T19:33:15.507" Score="4" Body="&lt;p&gt;&lt;strong&gt;Porn&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the technology was always the same (actually, it evolved incrementally over this time), the network market changed quickly in the early 90s. Until the early 90s, household modems were used mainly to connect to text services, like BBS. That's until internet became mainstream and HTML became the main format on which people viewed content. Since you could embed images in HTML pages (in GIF or JPEG formats, back then), eventually people found that those there was a market for this kind of content and images (later also videos) demanded a much bigger bandwidth than plain text, which drove people to get the fastest available modems to not have to wait the images load for so long (progressive JPEG, anyone remember?). That was way before Youtube, Netflix or Lolcats even existed. My networks professor at university said that by mid 1990s to early 2000s porn dominated the internet by traffic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seriously, the main driver was that as personal computers became powerful enough to decode multimedia content, at first being JPEG/GIF images and MP3 music people started to share this content online (whatever was the content). These files usually had a size at order of 100KB to 1MB, which would take 11 minutes to 2 hours to download over 9600 bps or a fifth of that over 56kbps, assuming that the connection does not fail during the download.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another driver also was pirated games online, specially those abandonwares that would fit a floppy disc or two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Softmodems also helped&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the processing capability increased, the modems could offload much of their tasks to the main processor, thus they did not have to include a integrated processor or memory. They simply sent a interrupt to the microprocessor nearly every byte that they received, which greatly simplified the hardware design and reduced manufacturing costs. If you take a look on the design of these old US Robotics high end modem you will see that they included several components while the typical mid-late 90s modems had once single SoC.&lt;/p&gt;&#xA;" OwnerUserId="7198" LastActivityDate="2017-11-24T19:33:15.507" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5090" PostTypeId="2" ParentId="5086" CreationDate="2017-11-24T19:38:23.270" Score="31" Body="&lt;p&gt;It appears to be a legacy from TOPS-10. The easy part: octal was more popular in the 60s and 70s in general, but especially at DEC, which produced a number of 18-bit machines; the 3 bits per symbol divides 18 bits evenly, but the 4 bits per symbol of hex doesn't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CompuServe's beginnings weren't as a bulletin board or ISP, but as a general-purpose timesharing system, where people could dial in and run programs on one of their PDP-10 machines running a Compuserve-modified version of the TOPS-10 operating system. On TOPS-10 a user ID was called a Project / Programmer Number (PPN), and consisted of two 18-bit parts (the project number and the programmer number), each written in octal, and separated by a comma — e.g. &lt;code&gt;3426,15&lt;/code&gt;, and this was how you would log into the system. The practice of giving subscribers project numbers over &lt;code&gt;70000&lt;/code&gt; was probably a way to ensure separation between subscribers and system users, but I can't find any documentation of that; it's only my guess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compuserve continued to use PDP-10s into the 1990s, and as they grew into more of a communications service than a timesharing service, they eventually started using the term &quot;user ID&quot; (UID) instead of PPN, but the format remained the same, and when they connected to internet email, a user's PPN became their email address simply by changing the comma to a dot to get &lt;code&gt;71234.4321@compuserve.com&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="336" LastEditorUserId="336" LastEditDate="2019-04-03T13:51:00.953" LastActivityDate="2019-04-03T13:51:00.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5091" PostTypeId="1" AcceptedAnswerId="5093" CreationDate="2017-11-24T20:23:44.747" Score="7" ViewCount="833" Body="&lt;p&gt;I am currently playing around with pointer and indirect addressing on the C64 and I encountered a problem with the ADC opcode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to increment a number repeatedly and when it overflows (goes over #$FF/255) it should increments another value by one.&lt;br&gt;&#xA;But instead of setting the overflow flag after #$FF (255), the CPU sets it after #$7F (127).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a bit of research I noticed that the ADC opcode seems to be working with signed bytes and therefore sets the C and V flags when it goes over #$7F.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to make an unsigned addition on the 6502 by setting or clearing some flags before doing an addition or is there a trick to circumvent it ?&#xA;&lt;hr&gt;&#xA;Here is the code I used:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PRT_LOW = $FD&#xA;PTR_HIGH = $FE&#xA;* = $1000&#xA;&#xA;start&#xA;    lda #$28       ; Load value, add with carry and store the result&#xA;    adc PTR_LOW&#xA;    sta PRT_LOW&#xA;    bvc end        ; Branch on overflow clear, the V flag is set if A &amp;gt;= #$80&#xA;                   ;  instead of a &quot;regular&quot; overflow (more than #$FF)&#xA;    inc PTR_HIGH   ; Increase the &quot;higher address value&quot;&#xA;&#xA;end&#xA;    ;[Unrelated code...]&#xA;    jmp start&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6817" LastEditorUserId="6817" LastEditDate="2017-11-24T20:36:23.583" LastActivityDate="2017-12-31T00:05:46.497" Title="Unsigned addition on the 6502" Tags="&lt;programming&gt;&lt;assembly&gt;&lt;6502&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5092" PostTypeId="2" ParentId="5087" CreationDate="2017-11-24T20:49:43.097" Score="9" Body="&lt;p&gt;&lt;a href=&quot;https://www.mobygames.com/game/c64/go_&quot; rel=&quot;noreferrer&quot;&gt;Yes&lt;/a&gt;, it was written by Stack Computer Services Ltd., but it's not very good. OK for beginners to learn from.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2017-11-24T20:49:43.097" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5093" PostTypeId="2" ParentId="5091" CreationDate="2017-11-24T21:10:09.430" Score="19" Body="&lt;p&gt;First, you need to clear carry before doing an ADC to avoide that a random value of Carry is added.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, since your numbers are unsigned, Carry is what you're looking for, not Overflow. When adding a Carry is produced every time a result does not fit in a single byte. Overflow is only needed when doing signed numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you want to do should look more like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ADD8TO16:&#xA;        CLC     &#xA;        LDA PTR_LOW  * (*1)&#xA;        ADC #40      * Using decimal for line length is more readable, isn't it (*2)&#xA;        STA PTR_LOW&#xA;        BCC NOINC&#xA;        INC PTR_HIGH&#xA;NOINC:&#xA;        ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;*1 - Don't load constants and add pointers, load pointers and add constants. &lt;code&gt;PTR = PTR + 40&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - But using an equate like &lt;code&gt;LINELEN EQU 40&lt;/code&gt; would make a real killing :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ok, I know, I'm a total nerd when it comes to creating readable assembly code :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Addendum:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if you realy want to dig deeper into the myteries of the overflow flag, there's &lt;a href=&quot;http://www.6502.org/tutorials/vflag.html&quot; rel=&quot;noreferrer&quot;&gt;a real in depth explaination&lt;/a&gt; on 6502.org. But be aware, it's rather complex, and unless you want to do signed arithmetics, it's better ignored:)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-12-31T00:05:46.497" LastActivityDate="2017-12-31T00:05:46.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5094" PostTypeId="2" ParentId="5091" CreationDate="2017-11-24T22:25:13.427" Score="9" Body="&lt;p&gt;Use the carry flag, not the overflow flag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Carry dictates whether a 0 or 1 should carry over into the next column.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overflow dictates whether the result has an unexpected sign.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you add two positive numbers but the result is negative, that's overflow. If you add two negative numbers but the result is positive, that's overflow. There is no way to add two numbers of different signs and get the wrong result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're not treating your numbers as signed then you can just ignore the overflow flag. It doesn't affect the arithmetic result, or any future arithmetic result.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-11-24T22:25:13.427" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5095" PostTypeId="2" ParentId="5080" CreationDate="2017-11-25T08:12:14.573" Score="11" Body="&lt;p&gt;It is said about the CPU of the MSX Turbo R, that &lt;a href=&quot;https://www.msx.org/wiki/Panasonic_FS-A1ST&quot; rel=&quot;noreferrer&quot;&gt;&quot;the R800 runs roughly like a 28.6 MHz Z80&quot;&lt;/a&gt;. This was a commercially available off-the-shelf machine, so should definitely count. It was a marvel in my opinion...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: &lt;a href=&quot;https://en.wikipedia.org/wiki/R800_(CPU)&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/R800_(CPU)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;indicates the R800 is Z80 compatible.&lt;/p&gt;&#xA;" OwnerUserId="4616" LastEditorUserId="4616" LastEditDate="2017-11-25T10:59:19.633" LastActivityDate="2017-11-25T10:59:19.633" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5096" PostTypeId="2" ParentId="5078" CreationDate="2017-11-25T16:21:03.883" Score="14" Body="&lt;p&gt;The Macintosh sold for more because — as the shiny new thing — it &lt;em&gt;could&lt;/em&gt; be sold for more. It was marketed as an aspirational product, not sold as a reasonable markup on an engineering BOM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IIgs was about as far as you could go while keeping compatibility with the II range, and served as a useful cash cow funding Apple's Macintosh division for several years through educational sales of the IIgs. The IIgs architecture, though featuring a 16-bit processor and advanced support chips, still favoured development of small applications written in assembly language. The Mac's 68000 allowed complex programs to be written in higher-level compiled languages, even if the original Mac was shipped with an unusably small amount of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 original Macintosh BOM that you linked to was from Jef Raskin. Raskin saw the Macintosh as an information appliance, and went on to develop the brilliant yet spectacularly unsuccessful Swyftware and Canon CAT devices. Raskin's device was based on utility, for which the public will only pay a reasonable amount. The Macintosh was built on image, and was perhaps the first computer marketed on image rather than spec.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So technically, yes, the Mac was a mistake. There are lots of alternative timelines where the IIgs was the success and the Mac withered. But that's not what happened in reality.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-11-25T16:21:03.883" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5097" PostTypeId="2" ParentId="5064" CreationDate="2017-11-27T04:59:15.893" Score="4" Body="&lt;p&gt;The early 300 bps modems used frequency shift keying (FSK), whereby&#xA;sound is generated at one frequency to represent a '0' and a different&#xA;frequency to represent a '1'. Standards prescribed what frequencies&#xA;to use, with one pair being used in one direction and another pair in&#xA;the other. The relevant standards for 300bps are Bell 103 (America)&#xA;and V.21 (elsewhere). Despite their common use at 300bps, these modems&#xA;could be operated at any speed up to the maximum (and, in fact, usually&#xA;a fair bit above that - I think some worked up to 450 bps). When you&#xA;changed the input, the frequency being generated changed immediately,&#xA;so the modem itself has no fixed baud rate. The signal processing for&#xA;these was quite simple and could be implemented in analogue circuitry,&#xA;but they were made cheap by having the circuitry made into integrated&#xA;circuits (ICs) such as the AM7910 from AMD in the '80s. That chip&#xA;implemented a good range of FSK standards up to V.23, which was 1200&#xA;bps in one direction and 75 bps in the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next advance was by changing the encoding. Instead of using&#xA;different frequencies for 0 and 1, a single frequency was used with&#xA;the data encoded as a phase change. The first of these was V.22 which&#xA;was a 600 baud (i.e. it sent 600 symbols per second) modem and could&#xA;encode either one or two bits per symbol giving 600 bps or 1200 bps. This&#xA;was better than V.23 because it gave the same speed in both directions&#xA;(still by using a different frequency for each direction). It was possible&#xA;to obtain specialist chips that implemented this. Because this type of&#xA;modem (as with all faster ones) used a fixed baud rate, it did not allow&#xA;encoding of data at any speed up to the top speed - you had to use the&#xA;configured speed exactly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At about this point, digital signal processing became cheap and simple&#xA;enough to implement the processing required, so further standards&#xA;generally were implemented that way, which also allowed more&#xA;complicated encodings. The next advance was using both a phase and&#xA;amplitude change to encode data. V.22bis used this to provide 2400 bps&#xA;data over 600 baud (i.e. 4 bits at a time were encoded giving 4 * 600&#xA;bps).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All modems up to this point used a separate carrier frequency for each&#xA;direction. This split the carrying capability of a phone line in half.&#xA;The next advance was to use the same frequency in both directions,&#xA;with suitable signal processing to subtract out the echo of the&#xA;transmitted signal in order to get an accurate received signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The V.32 standard used the same carrier in both directions, and&#xA;increased the signalling to 2400 baud, giving up to 9600 bps. It also&#xA;added an alternative way to encode the 9600 bps. Like earlier&#xA;standards, it allowed four bits of data to determine one of 16&#xA;phase/amplitude combinations for the carrier, but it also allowed it&#xA;to determine one of 32 combinations (only 16 of which were possible&#xA;for any given symbol) which traded more processing for greater&#xA;resistance to errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Development proceeded to produce V.34, which was a fairly obvious&#xA;continuation of the same techniques, using a slightly higher baud rate&#xA;(3200) and more phase/amplitude possibilities to give up to 33600 bps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However at this point development hit a limit. The phone network had&#xA;once been analogue - basically just a pair or wires, which might have&#xA;allowed ever faster data transfer using higher carrier frequencies or&#xA;more finely divided symbol encodings, but analogue is expensive.&#xA;Things change their characteristics through temperature, age, and other&#xA;factors, so the network had been made digital. This meant that the&#xA;signal was sampled 8000 times per second into one of 256 possible&#xA;values, and this data was sent across the network to be reconstituted&#xA;at the other side. This is a data rate of 64000 bps (56000 bps in&#xA;America because one bit per symbol was stolen for signalling). However,&#xA;it didn't allow a modem to use the full speed because even if you can&#xA;generate exactly the 256 different levels, you cannot guarantee to&#xA;synchronise the generation to the sampling, and the equipment (which&#xA;was, of course, already installed in vast numbers of telephone&#xA;exchanges) might not even be accurate enough to reliably sample all of&#xA;the possible values. Consequently, V.34 is as fast as you can go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there is a further trick that can be used. If we replace the&#xA;modem at one end with something which handles the data directly in&#xA;digital form, then the signal from the phone is still limited to about&#xA;32Kbps, but the data in the opposite direction can generate all 256&#xA;symbols reliably (128 in America). The modem can have a more sensitive&#xA;detector and signal processing to analyse the incoming signal,&#xA;allowing it to decode a signal which encoded up to 56000 bps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 56K modem was a strange anomaly - it only worked because one end&#xA;of the call was purely digital. An obvious improvement would be to&#xA;make both end digital - then they could use the underlying 64000 bps&#xA;connection. Indeed, this was possible with ISDN - where Basic Rate&#xA;gave you two such channels. However, phone companies made this&#xA;excessively expensive, which meant that it was still considerably&#xA;cheaper having an analogue phone line and a modem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that point modem development had hit a hard limit - further&#xA;advances would require changes to the equipment at the telephone&#xA;exchanges, which is where ADSL started - by making the last hop from&#xA;exchange to customer encode data completely differently than data&#xA;moving inside the phone network, it was possible to increase the speed&#xA;much more.&lt;/p&gt;&#xA;" OwnerUserId="7211" LastActivityDate="2017-11-27T04:59:15.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5098" PostTypeId="1" CreationDate="2017-11-27T07:23:42.883" Score="4" ViewCount="453" Body="&lt;p&gt;I recall seeing an IBM PC compatible or similar system many years ago in a business environment that had a distinctive boot error screen. The system showed a spinning floppy disk on the screen, prompting the user (if I recall correctly) to insert a boot disk, and restarted itself every few minutes or so in this state. The graphic was relatively crude: it was monochrome and drawn in text mode. It's this spinning floppy graphic that caught my eye but sadly, I was never able to take a closer look at the system. I believe the system took 5.25&quot; floppies, and was not recent enough to use 3.5&quot; disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea what this system was?&lt;/p&gt;&#xA;" OwnerUserId="7212" LastEditorUserId="7212" LastEditDate="2017-11-27T20:36:56.350" LastActivityDate="2017-11-27T20:36:56.350" Title="What computer (possibly a PC compatible) rendered a spinning floppy disk on the screen on a boot error?" Tags="&lt;floppy-disk&gt;&lt;boot&gt;&lt;identify-this-computer&gt;" AnswerCount="0" CommentCount="26" ContentLicense="CC BY-SA 3.0" />
  <row Id="5099" PostTypeId="1" AcceptedAnswerId="5107" CreationDate="2017-11-27T12:15:38.927" Score="20" ViewCount="2503" Body="&lt;p&gt;The RM Nimbus range of computers were popular in British schools during the late 80s and into the 90s. When I was at high school Nimbus PC-186 machines were all over the place. Many web pages that discuss these machines (such as &lt;a href=&quot;https://en.wikipedia.org/wiki/RM_Nimbus#PC-186&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia's article&lt;/a&gt;) note that they are not IBM PC compatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However they have an Intel x86 CPU, a BIOS, and can run MS-DOS 3.1, Windows 3.0 and MS-NET. They shared several hardware components and port standards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &lt;strong&gt;why are they commonly described as not PC compatible&lt;/strong&gt;? What are they missing that means they are incompatible?&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2017-11-30T22:43:59.147" Title="Why is the RM Nimbus PC-186 not IBM PC compatible?" Tags="&lt;rm&gt;&lt;rm-nimbus&gt;&lt;rm-nimbus-pc-186&gt;" AnswerCount="5" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5100" PostTypeId="2" ParentId="5099" CreationDate="2017-11-27T12:40:10.237" Score="2" Body="&lt;p&gt;The Research Machines Nimbus didn't run Standard Windows 3.10.  It ran a custom variant which was not interoperable with the standard version used on &quot;Compatible PCs&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The differences lay in the sound, graphics and networking of the &lt;a href=&quot;http://www.computinghistory.org.uk/det/41537/RM-Nimbus-PC/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nimbus&lt;/a&gt;.  These were not to the same standards as &quot;Compatible PCs&quot;.  The Nimbus came equipped with Ethernet and Piconet ports as standard and a screen resolution (320x250x16 colours) that didn't match CGA, VGA or the other PC formats of the time.&lt;br&gt;&#xA;&lt;sub&gt;(Note that RM Piconet is not the same as the current Bluetooth network standard)&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the differences were to enable backwards compatibility with the earlier RM &lt;a href=&quot;http://www.computinghistory.org.uk/det/2226/RM-380Z-(Black-Case)/&quot; rel=&quot;nofollow noreferrer&quot;&gt;380Z&lt;/a&gt; and &lt;a href=&quot;http://www.computinghistory.org.uk/det/31283/RM-Link-480Z-in-Metal-Case/&quot; rel=&quot;nofollow noreferrer&quot;&gt;480Z&lt;/a&gt;.  These were very common in schools and had a lot of software in common use.  The Nimbus was also supplied with an x86 version of BBC Basic, enabling another very popular educational codebase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is not just Windows that was adapted for the Nimbus, some other Microsoft software, e.g. Word, was supplied in a Nimbus format.  There was also a third party emulation package that would enable certain standard PC software to run.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-11-27T13:11:02.097" LastActivityDate="2017-11-27T13:11:02.097" CommentCount="20" ContentLicense="CC BY-SA 3.0" />
  <row Id="5101" PostTypeId="5" CreationDate="2017-11-27T13:03:08.683" Score="0" Body="&lt;p&gt;Research Machines Ltd.  (known as RM) was founded in Oxford, England in 1973.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has been a manufacturer of computers for the educational market since 1977.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-11-27T13:03:08.683" LastActivityDate="2017-11-27T13:03:08.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5102" PostTypeId="4" CreationDate="2017-11-27T13:03:08.683" Score="0" Body="For questions regarding the products of Research Machines Ltd." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-11-27T13:03:08.683" LastActivityDate="2017-11-27T13:03:08.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5103" PostTypeId="5" CreationDate="2017-11-27T13:03:51.813" Score="0" Body="&lt;p&gt;Nimbus was a range of computers manufactured by Research Machines in the 1970s and 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use this tag for questions regarding retrocomputers in this range.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-11-27T13:08:56.847" LastActivityDate="2017-11-27T13:08:56.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5104" PostTypeId="4" CreationDate="2017-11-27T13:03:51.813" Score="0" Body="For questions regarding the Research Machines Nimbus range of computers." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-11-27T13:03:51.813" LastActivityDate="2017-11-27T13:03:51.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5105" PostTypeId="5" CreationDate="2017-11-27T13:04:59.740" Score="0" Body="" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-11-27T13:04:59.740" LastActivityDate="2017-11-27T13:04:59.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5106" PostTypeId="4" CreationDate="2017-11-27T13:04:59.740" Score="0" Body="For questions regarding the Research Machines Nimbus PC computer." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-11-27T13:04:59.740" LastActivityDate="2017-11-27T13:04:59.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5107" PostTypeId="2" ParentId="5099" CreationDate="2017-11-27T13:06:29.237" Score="18" Body="&lt;p&gt;While the NM-186 was based on a standard x86-compatible 80186, its architecture was very different compared to the IBM PC’s. The major differences are the firmware, which isn’t PC BIOS-compatible, and the memory map, which enabled the NM-186 to make more memory available to applications than was possible in real mode on the IBM PC: as far as I can determine, up to 708KiB for applications, and an additional 512KiB in a RAM drive (the system officially supported up to 1.5MiB of RAM, and I’ve seen claims that up to 925KiB could be made available for applications). The NM-186 also had a different floppy disk controller and graphics controller, providing higher-resolution graphics (up to 640×350 with four colours), and it included a sound chip, the &lt;a href=&quot;https://en.wikipedia.org/wiki/General_Instrument_AY-3-8910&quot; rel=&quot;noreferrer&quot;&gt;AY-8910&lt;/a&gt;. Software written specifically for the Nimbus could take advantage of all that; as you’d imagine, it was mostly educational software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As standard the NM-186 ran an OEM version of MS-DOS, specifically adapted to its architecture; this was DOS 3.10 (3.05 on early models). It also had various custom versions of Windows, starting with 1.0 and going up to 3.0 (which was adapted for use in schools: icons and groups couldn’t be moved around in Program Manager). Other titles were ported as well. The base system sold in education environments included an “IBM mode” with an “IBMulator” which was supposed to handle well-behaved PC software, at least software which could work on MDA or CGA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was an expansion board which provided better PC compatibility, the &lt;a href=&quot;https://www.thenimbus.co.uk/nimbus-parts-list/IBM-Mode&quot; rel=&quot;noreferrer&quot;&gt;IBM Mode Utility Board&lt;/a&gt;. This added a PC speaker, RTC and various other components necessary to provide hardware PC compatibility.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-11-27T15:03:40.777" LastActivityDate="2017-11-27T15:03:40.777" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5108" PostTypeId="2" ParentId="5099" CreationDate="2017-11-27T15:41:19.770" Score="13" Body="&lt;p&gt;This question is a bit hard, as 'IBM-Compatibility' isn't as clear defined as advertisement wants to make us believe. In fact, next to any IBM machine could be classified as not compatible, starting with the AT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Short answer:&lt;/em&gt; All PCs are some kind of quantum mechanic device: they are compatible and not compatible at the same time. Only if the system gets observed (aka a program gets started), a definite state emerges. A state different for each program possible.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Long Answer:&lt;/em&gt;&#xA;Compatibility usually falls into two categories: Hardware and software compatibility. Although easy definitions, they often get mixed up by hardware being blamed for software problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Hardware compatibility&lt;/strong&gt; describes the fact that a certain (third party or extension) hardware is compatible with a machine. Usually this is defined by interfaces available on the basic unit, like serial, or parallel ports and especially any extension ports. With a different extension bus system as for example ISA, as defined by the original PC, there will be a hard time to use such ISA cards, thus hardware compatibility is not given.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Software compatibility&lt;/strong&gt; defines if a certain program, written for a certain environment can run or not. For example an original IBM-PCXT without any video card will still boot and run quite well. That machine is by no doubt IBM compatible, still, running Windows 3.0 is somewhat fruitless - if it comes up at all. Too exotic? Well, plug in an MDA and you'll get the same result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe you remember the often lengthy list of sound cards, graphic cards, keyboards, mice and joysticks, a PC games did feature on the boxes during the 90s. All claimed to be PC games, but the user still had to verify a long list of features of versus his machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software relies on what parts of the environment it accesses. Most obvious it's the instruction set written/compiled for. A program compiled for a 80186 program may not run on a 8088, but quite well on a 80286. Next it's how it interacts with other features this may be more hardware (like above games) or other software. Generally here three basic variations within the PC World:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;a) Hardware compatible&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here a program accesses specific hardware on the lowest possible level. A program written to run direct with a CGA won't deliver any (useful) result without that card (or a close emulation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;b) BIOS compatible&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BIOS compatible programs do all their machine specific bidding (beyond the CPU) via BIOS calls. Such programs may run on all machines that offer a BIOS with compatible calls to what the programmer expects, read an IBM-PC BIOS of a certain level. Since the PC-BIOS offers next to everything a character mode program needs, from keyboard and screen handling all the way to disk read and write, this is in some ways equal to what early home computers offered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;c) OS compatible&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here a program does all its machine handling (I/O) via a certain OS, like DOS or Windows. In reality, there's a split between these examples calling for two subclassifications&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;c.1) DOS compatible&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A program running on DOS or similar operating systems can rely on a number of additional services, like the namesake disk management (working with files instead of devices) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;c.2) WINDOWS compatible&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are programs that rely on Windows (*1) services. Unlike DOS, Windows includes not only more than rudimentary process support, but also independent interfaces for graphics, sound and a wide variety of input devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(*1 - This is as well true for other, alike environment, like GEM or GEOS)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, a program written for either of the above compatibility layers and following its mechanics will run on any machine offering the same kind of compatible interface. A DOS program written for an IBM-XT does as well run on a Sirus 1, a SIEMENS PC-D, a Tandy 1000 or a Nimbus PC-186. All these machines have been accused of being non-compatible at some point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One major problem with real world applications is that the programmers did not really care much for clean interfaces - or couldn't because they needed certain capabilities. Like a game asking for a DOS environment &lt;em&gt;and&lt;/em&gt; a EGA. Accessing that made it unable to run on a PC with MDA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Grandpa story: One nice example I 'converted' was Mult Edit 5.0 for the SIEMENS PC-D. Eventually the best ever editor of all times to the best ever PC. The PC_D was originally developed as Unix workstation, but made later on fully BIOS and DOS compatible - on a hardware somewhat like the NM-186. Multi Edit was well written, except for two minor quirks. It expected a memory mapped character display much like the MDA (or later) and it accessed the PC speaker directly. Everything else did run via BIOS or DOS calls. Thanks to the nice hardware debugging features of the PC-D it took me like half an hour to find and patch the two words used. Lucky me, the software was extreme clean and only had those two references.)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With restrictions like that, programs needed to be ported, or, if their architecture was advanced enough, a driver for different hardware on different machines compositions had to be added. Even for 'standard' machines separate drivers where needed for CGA, EGA and VGA (and more) where needed, as the publisher did want to cover more variations than only his 'standard'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The major goal in the Windows (and GEM) development was to add abstraction layers&lt;/strong&gt; for devices like human input (aka keyboards, mice, joysticks etc.), graphics and sound. So a all driver handling was taken away from the applications and bundled with the OS. Porting Windows (or GEM) thus didn't require porting the OS, but just adding new branches of machine/hardware detection and appropriate drivers. Application programs did not need to be changed in any way - as long as they are coded according to the OS guidelines. There where still programs that bypassed Windows or assumed specific settings without checking, but usually not from major developers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A clean Windows 3.0 Program could run anywhere from an IBM-XT with 512 KiB and CGA to a PC-D with 960 KiB usable RAM, 720x350 B&amp;amp;W graphics and a 80186 or any Pentium 15 years later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So called 'special' versions of Windows where not special at all, just the result of a Microsoft marketing. For one, MS offered the ability to customize loading screens so manufacturers could present 'their' Windows making the buyer believe he got something special. Second, MS offered deals to manufacturers. They got Windows at a greatly reduced price but it only included drivers for the hardware these companies offered. Special machines got even bigger discounts - like the NM-186.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;&#xA;The PC-186 was fully compatible with BIOS (AFAIK, there seam to be other information available), DOS and Windows. All clean applications written for either would run right away. Application accessing Hardware not available on the PC-186 would fail.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="609" LastEditDate="2017-11-27T23:22:25.410" LastActivityDate="2017-11-27T23:22:25.410" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5109" PostTypeId="1" CreationDate="2017-11-27T16:43:09.693" Score="6" ViewCount="506" Body="&lt;p&gt;Can anyone help me find an old math game where equations let you move from room to room? I played the game on an Apple II back in middle school and I want to use it with my daughter to teach her math. The game had simple high-res line based graphics and would put up equations to solve when you tried to move around. The graphics were black and white first person perspective, similar to Mystery House. The math in the game was simple math, probably addition or multiplication, generally fill in the blank. I've got a working IIgs with 3.5 and 5.25&quot; drives so I can run any Apple II release of the game. The copy I played was on a pirated disk so I don't know the name or publisher for the game.&lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="175" LastEditDate="2017-11-30T12:47:06.577" LastActivityDate="2017-12-10T17:38:57.500" Title="Need help identifying math game where equations let you move from room to room?" Tags="&lt;apple-ii&gt;&lt;software&gt;&lt;apple&gt;&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5110" PostTypeId="2" ParentId="5013" CreationDate="2017-11-27T22:51:10.440" Score="1" Body="&lt;p&gt;This isn't an answer to the question, but an interesting tangent.  I thought it was worth mentioning on while discussing the topic, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Raffzahn points out, cartridges didn't have to just be static ROMs (or EPROMs as many of them actually contained), but could also have active circuitry that enabled bank switching or other features.  In many home computers, the cartridge interface was just an extension of the system bus, so the cartridges could actual add any additional hardware to the system that would sit inside the required form factor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An interesting example of this was the Video Chess cartridge for the TI-99/4 and /4A computers.  These computers by default had 16.25KB of RAM (16K of slow DRAM and 256 bytes of faster SRAM used by the processor as a scratchpad due to its lack of useful registers).  The &lt;a href=&quot;https://en.wikipedia.org/wiki/David_Levy_(chess_player)&quot; rel=&quot;nofollow noreferrer&quot;&gt;developer of Video Chess&lt;/a&gt; decided that this wasn't enough to get the computer to play a good game of chess, and therefore used the cartridge to fill the entire memory space of the processor (other than the parts that were needed for ROMs) with additional RAM, leaving the system with &lt;a href=&quot;http://www.spacious-mind.com/html/texas_instruments_video_chess.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;42KB of RAM, according to the specs here&lt;/a&gt; (although I'm a little dubious, because those specs suggest the total address space used &lt;em&gt;exceeds&lt;/em&gt; the processor's address space, but only by a couple of KB... I have a suspicion that something has been reported incorrectly, somewhere), which was basically an enormous amount of memory for a home computer in 1979.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-11-27T22:51:10.440" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5111" PostTypeId="2" ParentId="5099" CreationDate="2017-11-29T08:23:04.513" Score="4" Body="&lt;p&gt;The 80186 contains a CPU and several peripheral units, including a two-channel DMA Controller, a Programmable Interrupt Controller and three 16-bit timers. The IBM PC-AT and PC-XT also has a DMAC, PIC and timers but with more DMAC and timer channels and at different I/O addresses to those in the 80186.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BIOS did not have a full range of function calls for configuring and using these devices, so some programs would write to them directly. Such programs would therefore not work on an 80186-based PC, or an 80188 one for that matter. This lack of compatibility with the PC XT/AT architecture was a major reason for the very limited uptake of the 80186/80188 for PCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programs that don't access I/O devices directly could run fine, which seemed to cover a majority of application software in those days. Things like games were more likely to manipulate hardware directly to squeeze more performance out of the machine. Such a PC would need a modified BIOS that uses the peripherals available in the 8018x, instead of expecting one of the standard I/O maps of the PC XT or AT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used the 80186-based Tube board for the BBC Master back in the day and you were fine if you stuck to the right list of programs to run. We didn't use it for long though.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastActivityDate="2017-11-29T08:23:04.513" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5112" PostTypeId="1" AcceptedAnswerId="5113" CreationDate="2017-11-29T11:37:35.600" Score="1" ViewCount="527" Body="&lt;p&gt;I'm interested in the time, place and manner in which some historically important computers were introduced to the world. For example, the Macintosh was presented in January 1984 by Steve Jobs, first at the Apple shareholder meeting, then at a meeting of the Boston Computer Society.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore introduced some important products at conventions: PET at West Coast Computer Faire 1977, CBM 8032 at NCC 1980, C64 at CES 1982. What was the format of these? Was it just 'walk up to the booth and take a look, and an employee will run through some of the features for you' or was there anything more elaborate, along the lines of the Macintosh introduction?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga was presented July 23, 1985, at the Lincoln Center, New York. Did they organize an event just for that, so that they could stage a more elaborate show than they could at a convention?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did that compare with the debut of the Amiga's main rival, the Atari ST, at the Winter CES in January of 1985? Was that a 'walk up to the booth and take a look' affair, less elaborate than the Amiga?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Okay, that's two people perceiving the question as vague, so I'll make it more specific.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga apparently was introduced at its own special event, whereas the Atari ST was introduced at a convention, the Winter CES. Is it the case that the introduction of the Atari ST was therefore just a 'walk up to the booth and take a look' affair, whereas the Amiga could get a more elaborate stage presentation of the kind Steve Jobs liked to arrange, and this is why Commodore spent the extra money and risked the extra political capital on the special event?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="70" LastEditDate="2017-11-29T13:13:45.273" LastActivityDate="2018-06-03T11:03:06.343" Title="Amiga versus Atari ST computer introductions" Tags="&lt;history&gt;&lt;atari&gt;&lt;commodore&gt;" AnswerCount="1" CommentCount="11" ClosedDate="2017-11-29T16:35:12.433" ContentLicense="CC BY-SA 3.0" />
  <row Id="5113" PostTypeId="2" ParentId="5112" CreationDate="2017-11-29T14:18:43.943" Score="2" Body="&lt;p&gt;This question is a bit misleading as it seams to imply that a presentation at a trade show is always done in a 'small' booth somewhere hidden in a crowded hall. Maybe the originator never went to such? So the question may be rather:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why do companies sometimes choose separate events over trade shows?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Still not really Retrocomputing related)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'Boothes' on a trade show may be quite large. Sometimes companies fill whole convention halls with their single 'booth'. They are quite often way larger than any separate venue of the same company would be, as they transport communication over a longer duration as a single show and to a wider &lt;em&gt;direct&lt;/em&gt; audience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, trade shows offer stage rooms/halls. This is where companies do such presentation events. Ofc, the machine will be also shown at the booth, regardless of size, after all, that's what a trade show is about. The stage events do the 'official' introduction. Such a stage show may be 'just a press conference' or again outclass any separate event in size as well as in style. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So doing an introduction within a trade show or separately is a marketing decision, and doesn't tell anything about the way it was done. It's all about how a marketing director sees the bigger chance to reach the target audience. Go with the convenience of a trade show and have a guaranteed crowd and a coverage among all trade publications and maybe beyond if show (and product) seems important enough for mainstream media (good PR preparation may help).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conclusion: &lt;strong&gt;It's all about what goal marketing wants to reach&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While Atari did go with a small presentation at Winter CES and a surprise introduction at Comdex, as they did not have any money to go beyond attending at all, hoping that the usual trade media would do the bidding, (New) Commodore did decide to go with a separate event targeted at main stream media and using showbiz glamour to attract them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;...and what budget they have :)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Fun fact, a year later, in 1986, the Atari booth at CES was &lt;strong&gt;huge&lt;/strong&gt;, while Commodores stand was quite small - Source: &lt;a href=&quot;http://www.atarimagazines.com/compute/issue75/An_Eight-Bit_Bonanza.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compute! 75 in 8/86&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="3314" LastEditDate="2018-06-03T11:03:06.343" LastActivityDate="2018-06-03T11:03:06.343" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="5114" PostTypeId="1" CreationDate="2017-11-29T16:47:41.170" Score="3" ViewCount="399" Body="&lt;p&gt;Why would Xerox not try to market a computer more advanced than technology that we would not see until almost a decade after it was introduced in 1973? &#xA;Obviously I know some factors played a role in this, such as cost and what not, but with such a unique system and one of the first GUI made you would think Xerox would realize the future of computers as we know it lay directly in their palms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design itself seems to be made for use in any general work/home enviroment, for instance the portrait orientation of the screen, giving you a perfect display of whatever you may be printing to the dimensions of printer paper. A well made file manager, a interface made easy for any non-tech savy users,  and it even had games such as MazeWar, a vector based first person shooter very neat for its time!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why would Xerox put money into the development of such a unique computer that seemed perfectly made for use by the general public at a time when nothing else similar even existed if they had no intention of marketing this in the first place? Why design something for such a wide range of computer users? Why invest in this computer at all? The cost was estimated to be around $40,000 (if sold)  which is indeed steep, but I imagine had they sold these, that many universities and businesses would have invested in a product like this.&lt;/p&gt;&#xA;" OwnerUserId="7247" LastEditorUserId="357" LastEditDate="2017-12-01T16:09:10.577" LastActivityDate="2017-12-01T16:09:10.577" Title="Why would Xerox not try to market the Alto to the public?" Tags="&lt;xerox-alto&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5115" PostTypeId="2" ParentId="5114" CreationDate="2017-11-29T18:02:11.457" Score="3" Body="&lt;p&gt;For one, the Alto &lt;strong&gt;was&lt;/strong&gt; marketed since 1975 to universities etc. Until ~1979 about 2000 units were sold, almost half of them outside Xerox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1977 they started a project to build a more reliable and customer enabled machine. As a result the first Star was marketed in 1981. These 4 years were mostly spent developing office and communication software needed to make it useful to customers. After all, companies don't care if a system is revolutionary or not. They only spend money if it's a more useful tool than the ones they already have or can buy elsewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every development needs an environment where it can thrive. At first, a mouse slows down text editing speed when used by a professional, and a bitmap is not needed when underlined or, most fancy, italics is all that is needed for your business letters. Remember, the 70s and all of the the 80s, electronic &lt;em&gt;typewriters&lt;/em&gt; where more successful in offices than computers doing the same job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;It's never about technology, but always about usefulness.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Germany Siemens did OEM the Star beginning in 1981 as &lt;strong&gt;EMS 5800&lt;/strong&gt; and focused less on the graphics ability or the easy desktop, but the integration within large scale company networks. At that time Siemens was the leading telco supplier, ruling the market for local PBX. Due integration with their PBX systems and data transmission standards they where able to create a special market targeting large scale customers.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="637" LastEditDate="2017-11-30T22:41:32.403" LastActivityDate="2017-11-30T22:41:32.403" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5116" PostTypeId="2" ParentId="4792" CreationDate="2017-11-30T05:23:38.820" Score="2" Body="&lt;p&gt;I had the misfortune of having to deal with many of these Compaq systems about 15-20 years ago. The hard drive is SCSI, and probably so also is the CD drive. There is a SCSI controller card installed in the bottom expansion slot, as shown by the mini HD-50 pin external connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Booting a Compaq Deskpro is incredibly slow, due to the SCSI controller doing a scan for devices on the bus that takes about a minute or so, before it attempts to boot the hard drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your controller most likely looks something like this image from Wikimedia Commons: (from user Nosachevd, cc-by), &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Tekram_DC-300B_Fast_SCSI_ISA_controller.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://commons.wikimedia.org/wiki/File:Tekram_DC-300B_Fast_SCSI_ISA_controller.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/y8OvE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y8OvE.jpg&quot; alt=&quot;Tekram DC-300B Fast SCSI ISA controller&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SCSI is obsolete since about 2010, but PCI and even PCI-express controllers are still available if you look around on eBay or Amazon. Example Amazon search result:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adaptec 2248700-R U320 PCI Express X1 1-Channel SCSI Host Bus Adapter, US$49.00, &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B000NX3PII&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/Adaptec-2248700-R-Express-1-Channel-Adapter/dp/B000NX3PII&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a modern controller like this, you could plug your old SCSI drive into a computer running Windows 7/8/10 and directly access files on the drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though for simplicity's sake, you should avoid any modern SCSI controller that also says &quot;RAID&quot; in the name of it, as these may not recognize the drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would need a computer from about 2012 or older which had the large 4-pin Molex power connectors for IDE/SCSI hard drives. Eventually newer systems dropped those in favor of all-SATA style power connectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But even this can be worked around for the persistently stubborn, with a &quot;15-pin SATA male to 4-pin female&quot; power adapter, to plug the old drive into a modern SATA-only drive power connector, for about US$5..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B003AI272I&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/C2G-Cables-10149-15-Pin-6-Inch/dp/B003AI272I&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know nothing about the complexities of SCSI IDs, termination, etc, the least complicated thing to do would be to use a 68-pin ribbon for the internal connector of the above card, and then a 68 pin to IDC 50 pin SCSI adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I continue to use Amazon for this example, a &quot;wide&quot; (68-pin) SCSI internal ribbon cable costs about US$10..&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/s/ref=nb_sb_noss?field-keywords=wide+scsi+ribbon&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/s/ref=nb_sb_noss?field-keywords=wide+scsi+ribbon&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A 68 pin to &quot;IDC 50 pin female&quot; (the old-style large connector) SCSI adapter is another US$10..&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/s/ref=nb_sb_noss?field-keywords=68+IDC+50+scsi+adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/s/ref=nb_sb_noss?field-keywords=68+IDC+50+scsi+adapter&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-11-30T05:23:38.820" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5117" PostTypeId="1" AcceptedAnswerId="5119" CreationDate="2017-11-30T05:43:01.810" Score="6" ViewCount="357" Body="&lt;p&gt;Back in about the mid-1980s, there was a period of time when &quot;multimedia encyclopedia&quot; and training resources were being made for schools, for the early monochrome-only Macintosh that tied it to a Laserdisc player via a serial cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A typical way this would work is that there would be a HyperCard stack with cards for each topic, and then buttons on the card would command the Laserdisc player. It could either play a short video clip for the subject matter on a TV next to the computer, or freeze-frame on a single full-color image that the monochrome Macintosh was incapable of displaying by itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been trying to figure out what these programs were named so that I could try to find them again for nostalgia reasons, but I come up empty scratching my head trying to think of any, or how they would have been described at the time.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-11-30T12:16:26.130" Title="Old multimedia: Monochrome Macintosh / Laserdisc player" Tags="&lt;apple-macintosh&gt;&lt;multimedia&gt;&lt;laserdisc&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5118" PostTypeId="2" ParentId="4604" CreationDate="2017-11-30T06:25:03.340" Score="2" Body="&lt;p&gt;QIC drives for the 1980's PC were often incredibly slow, writing at speeds of approximately 250-500kb/sec. There was an adapter from a company called Colorado to plug them directly into a floppy cable, limiting its speed to that of the floppy controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the main &quot;features&quot; of QIC was its notorious unreliability. Writing out a QIC backup was already painfully slow, but there was no automatic read-after-write quality control built into QIC drives, so it would be necessary to followup a backup with a full read of what was just written to compare it against the original media, verifying it was written correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This then effectively doubled the time needed to complete a backup job, and since the concept of &quot;snapshots&quot; did not exist yet, the source media being backed up had to effectively sit completely idle and unused through the entire write and verify process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The QIC tape system was not sealed to keep out dust, so over time the head and the tape would also accumulate dust and debris, that would interfere with read/write quality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a followup verify-after-write operation and regularly scheduled head cleaning was not done, a QIC drive might very well just be writing out unreadable garbage that would not be discovered until it is too late.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By comparison, modern Linear Tape Open (LTO) does not require the full manual media verify after a write job completes, as the drive is designed to automatically read data as it is written, to immediately and continuously check that it is working correctly. The tape drive can then perform corrective measures by itself to automatically rewrite the media to recover from write errors, and if it continues to have tape verification problems, it can automatically request cleaning of the tape drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...though still as with QIC, LTO tape and the drive interior are not also sealed and gasketed, to protect it from dust buildup from the cooling airflow.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2017-11-30T06:25:03.340" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5119" PostTypeId="2" ParentId="5117" CreationDate="2017-11-30T06:55:36.847" Score="9" Body="&lt;p&gt;These were known as LaserStacks, and a &lt;a href=&quot;https://duckduckgo.com/?q=%22laserstacks%22&quot; rel=&quot;noreferrer&quot;&gt;DDG search&lt;/a&gt; turns up some information. Some titles were known as &lt;a href=&quot;https://duckduckgo.com/?q=hypervideo+database&quot; rel=&quot;noreferrer&quot;&gt;hypervideo databases&lt;/a&gt;. The biggest publisher appears to have been Voyager; various manufacturers built compatible LaserDisc drives, notably Philips and Pioneer. A number of &lt;a href=&quot;http://www.laserdiscarchive.co.uk/laserdisc_archive/pioneer/pioneer_laserdisc_control_mac.htm&quot; rel=&quot;noreferrer&quot;&gt;tools&lt;/a&gt; could be used to build LaserStacks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://blog.archive.org/2017/08/11/hypercard-on-the-archive-celebrating-30-years-of-hypercard/&quot; rel=&quot;noreferrer&quot;&gt;HyperCard on the Internet Archive&lt;/a&gt; post links to a &lt;a href=&quot;https://archive.org/details/CC501_hypercard&quot; rel=&quot;noreferrer&quot;&gt;documentary&lt;/a&gt; featuring a LaserStack demo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since they use LaserDiscs, they are hard to preserve and I don’t know whether any are available online. &lt;a href=&quot;http://www.eai.org/resourceguide/preservation/computer/pdf-docs/voyager_casestudy.pdf&quot; rel=&quot;noreferrer&quot;&gt;This document&lt;/a&gt; describes Voyager’s production history and preservation efforts (focusing on their CD-ROM releases). A good place to start exploring HyperCard in general is the &lt;a href=&quot;https://archive.org/details/hypercardstacks&quot; rel=&quot;noreferrer&quot;&gt;Internet Archive’s HyperCard stacks repository&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-11-30T12:16:26.130" LastActivityDate="2017-11-30T12:16:26.130" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5120" PostTypeId="2" ParentId="5099" CreationDate="2017-11-30T22:43:59.147" Score="0" Body="&lt;p&gt;While it would be possible for text-based programs that don't do anything unusual with the keyboard to run using only features provided by MS-DOS, perhaps with the aid of the ANSI.SYS driver, many programs use features that are provided by the underlying machine for a few reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;MS-DOS doesn't provide any graphics functionality at all.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The text-based operations MS-DOS does provide are often more than an order of magnitude (literally) slower than what could be accomplished by accessing screen hardware directly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;MS-DOS doesn't provide any way of determining which keys are pressed at any given time, nor of detecting any key combinations other than those which it is explicitly coded to handle.  By contrast, code which installs its own keyboard interrupt handler can detect key combinations like control-shift-X or alt-shift-J.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A machine that can run MS-DOS would be able to run programs that don't attempt to access the underlying platform for any of the above purposes, but many people writing interactive programs didn't want to be bound by the above limitations.  Further, many popular language implementations would automatically perform things like screen I/O using the underlying platform functions rather than the ones provided by MS-DOS because of improved performance, so programs written using those implementations would also have trouble on machines that didn't support them the same way as the PC.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-11-30T22:43:59.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5121" PostTypeId="1" AcceptedAnswerId="5122" CreationDate="2017-12-01T14:39:20.377" Score="34" ViewCount="4684" Body="&lt;p&gt;On x86 the first four general-purpose registers are named &lt;code&gt;AX&lt;/code&gt;, &lt;code&gt;CX&lt;/code&gt;, &lt;code&gt;DX&lt;/code&gt;, &lt;code&gt;BX&lt;/code&gt;. It would be quite intuitive if their indices (those used in instruction encoding) were in alphabetical order, but instead of &lt;code&gt;ABCD&lt;/code&gt; we actually have &lt;code&gt;ACDB&lt;/code&gt;. E.g. &lt;code&gt;mov bl, 1&lt;/code&gt; is encoded as &lt;code&gt;B3 01&lt;/code&gt; while &lt;code&gt;mov cl, 1&lt;/code&gt; is &lt;code&gt;B1 01&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any reason why they weren't enumerated in alphabetical order?&lt;/p&gt;&#xA;" OwnerUserId="1992" LastEditorUserId="565" LastEditDate="2017-12-02T06:22:38.970" LastActivityDate="2019-05-13T13:44:05.953" Title="Why are first four x86 GPRs named in such unintuitive order?" Tags="&lt;assembly&gt;&lt;instruction-set&gt;&lt;8086&gt;" AnswerCount="3" CommentCount="10" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5122" PostTypeId="2" ParentId="5121" CreationDate="2017-12-01T15:03:05.853" Score="46" Body="&lt;p&gt;There are no technical reasons, as any order would work and result in the same amount of gates. More likely it originated in the process by which the 8086 was developed. A main goal was to allow easy conversion of 8080 programs, so the development of the 8086 structure started out from a 8080 programming model. 8080 registers were ordered as 16 bit pairs in the sequence of &lt;code&gt;PSW&lt;/code&gt;/&lt;code&gt;A&lt;/code&gt;, &lt;code&gt;B&lt;/code&gt;/&lt;code&gt;C&lt;/code&gt;, &lt;code&gt;D&lt;/code&gt;/&lt;code&gt;E&lt;/code&gt;, &lt;code&gt;H&lt;/code&gt;/&lt;code&gt;L&lt;/code&gt; (&lt;code&gt;SP&lt;/code&gt;and &lt;code&gt;PC&lt;/code&gt;) with &lt;code&gt;HL&lt;/code&gt; being the general base or memory pointer and &lt;code&gt;DE&lt;/code&gt; being a backup (*1). So assigning them in the same order with similar functionality will result in&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;PSW&lt;/code&gt;/&lt;code&gt;A&lt;/code&gt; becomes &lt;code&gt;AX&lt;/code&gt;, and &lt;code&gt;AL&lt;/code&gt; is also the general purpose 8 bit accumulator,&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;B&lt;/code&gt;/&lt;code&gt;C&lt;/code&gt; becomes &lt;code&gt;CX&lt;/code&gt;, as these were the general purpose, usually counter registers&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;D&lt;/code&gt;/&lt;code&gt;E&lt;/code&gt; becomes &lt;code&gt;DX&lt;/code&gt;, as general purpose 16 bit pair, and finally&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;H&lt;/code&gt;/&lt;code&gt;L&lt;/code&gt; becomes &lt;code&gt;BX&lt;/code&gt;, as the primary pointer register.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I wouldn't be much surprised if early documents reveal 8080-like names used during development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember, while 8086 registers are more adapted for general use than in the 8080, they had dedicated functions like &lt;code&gt;BX&lt;/code&gt; in addressing, and/or optimized coding for certain applications - like &lt;code&gt;AL&lt;/code&gt;/&lt;code&gt;AX&lt;/code&gt; as primary accumulator. This provided a way for more compact coding when the registers were used in the specialized way, thus faster execution of programs acknowledging these differences. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;More important it also gave programs rewritten by automated translation utilities (like Digital Research's &lt;code&gt;XLT86&lt;/code&gt;) from 8080 assembler sources to 8086 assembler, an encoding comparably compact to 8080 code. An important argument toward early adopters, as memory requirements where still a major cost factor back then, and asking them to buy a CPU that needs bigger ((E)P)ROMs just for holding the (translated) existing one didn't come over well.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The physical 8080 model is different, as &lt;code&gt;PSW&lt;/code&gt; and &lt;code&gt;A&lt;/code&gt; were not part of the register file, which in addition featured a &lt;code&gt;W&lt;/code&gt;/&lt;code&gt;Z&lt;/code&gt; pair for internal operation (like buffering memory access, or addresses during 16 bit operations)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-05-13T13:44:05.953" LastActivityDate="2019-05-13T13:44:05.953" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="5123" PostTypeId="5" CreationDate="2017-12-01T18:00:06.333" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-12-01T18:00:06.333" LastActivityDate="2017-12-01T18:00:06.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5124" PostTypeId="4" CreationDate="2017-12-01T18:00:06.333" Score="0" Body="Questions about the Xerox Alto, an early GUI workstation introduced in 1973 and little used outside of Xerox labs." OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-12-02T13:02:27.477" LastActivityDate="2017-12-02T13:02:27.477" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5125" PostTypeId="1" AcceptedAnswerId="5127" CreationDate="2017-12-01T19:08:06.210" Score="8" ViewCount="972" Body="&lt;p&gt;For IBM PC-DOS/Microsoft MS-DOS, which version was the first version to actually allow using more than one partition for data storage? How about using multiple primary partitions vs one primary plus logical drives within an extended partition? How about multiple drives?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikipedia, in its infinite wisdom (err) &lt;a href=&quot;https://en.wikipedia.org/wiki/Master_Boot_Record#Overview&quot; rel=&quot;noreferrer&quot;&gt;states&lt;/a&gt; that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The partition table supported up to four &lt;em&gt;primary partitions&lt;/em&gt;, of which DOS could only use one. This did not change when FAT16 was introduced as a new file system with DOS 3.0.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The same article states that support for extended partitions and logical drives were added by the time of DOS 3.30, which sounds plausible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I distinctly recall by the time of MS-DOS 6.x or so having a hard disk that was large enough that I partitioned it into two partitions, so by that time, MS-DOS could certainly use multiple &lt;em&gt;partitions&lt;/em&gt; for data and program storage, just not for holding the operating system proper. (Given the size of even MS-DOS 6.x, this wasn't a major concern.) I do not, however, recall the exact way in which that drive was partitioned; it may have been as two primary partitions, or as one primary plus one extended/logical pair.&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-12-01T22:49:55.657" LastActivityDate="2017-12-07T08:50:52.050" Title="Which MS-/PC-DOS version was the first to allow multiple partitions to be used?" Tags="&lt;ms-dos&gt;&lt;storage&gt;" AnswerCount="1" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="5127" PostTypeId="2" ParentId="5125" CreationDate="2017-12-01T20:59:13.840" Score="10" Body="&lt;p&gt;The short answer is MS-DOS 3.3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the &lt;em&gt;MS-DOS Encyclopedia&lt;/em&gt;, MS-DOS 2.0 to 3.2 (included) only supported one MS-DOS partition per partitioned device (hard drive basically). (Before MS-DOS 2.0, hard drives weren’t supported at all.) MS-DOS 3.3 &lt;a href=&quot;http://www.os2museum.com/wp/dos/dos-3-3/&quot; rel=&quot;nofollow noreferrer&quot;&gt;introduced support for multiple partitions per device&lt;/a&gt;, albeit still limited to a single primary partition per drive (and multiple logical partitions inside extended partitions), and famously, 32 MiB per partition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compaq DOS 3.31, released in November 1987 or thereabouts, &lt;a href=&quot;http://www.os2museum.com/wp/dos/dos-3-3/&quot; rel=&quot;nofollow noreferrer&quot;&gt;introduced support for FAT16 with 32-bit sector counts&lt;/a&gt; and thus partitions larger than 32 MiB. Subsequent versions of DOS included this, starting with IBM DOS 4. (&lt;a href=&quot;http://www.os2museum.com/wp/dos/dos-4-0/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Reportedly&lt;/a&gt;, other OEM versions of DOS 3.3 released after Compaq DOS 3.31 included this too, &lt;em&gt;e.g.&lt;/em&gt; Zenith DOS 3.3 Plus.) MS-DOS 5 introduced support for multiple primary partitions per drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Various manufacturers also provided device drivers which supported proprietary partitioning schemes, or provided support for larger drives using the “standard” DOS partitioning scheme (such as Compaq’s &lt;code&gt;ENHDISK.SYS&lt;/code&gt;, &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5125/which-ms-pc-dos-version-was-the-first-to-allow-multiple-partitions-to-be-used#comment11335_5125&quot;&gt;mentioned&lt;/a&gt; by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/6659/raffzahn&quot;&gt;Raffzahn&lt;/a&gt;, which was available as early as &lt;a href=&quot;https://www.pcjs.org/disks/pcx86/dos/compaq/2.12/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compaq DOS 2.12&lt;/a&gt; if not earlier).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I’m not sure about DR DOS’s level of support; certainly by DR DOS 5 it supported large partitions (I used it on a 120 MiB drive with a single real partition, hosting a compressed volume using SuperStor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2922/79&quot;&gt;How did MS-DOS assign drive letters in the case of more than two floppy disk drives?&lt;/a&gt; covers letter assignment and discusses the differences in more detail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might help to put this in context (especially for readers coming from the original comment which led to this question).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DOS 3.0 was released in August 1984; the “standard” hard drive then was 10 MB in size, for around $900 (as present in the PC/XT), and the largest drives for sale for PCs that I can find are 33 MB in size (see for example &lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-09/1984_09_BYTE_09-09_Guide_to_the_IBM_PCs#page/n243/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;BYTE volume 9 number 9, page 236&lt;/a&gt;), which corresponds quite nicely with the maximum 32 MiB usable in a DOS partition.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.os2museum.com/wp/dos/dos-3-3/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOS 3.3&lt;/a&gt; was released in April 1987, and $900 then would comfortably buy a 40 MB hard drive; Seagate also had a 80 MB drive, available for around $1300 (large hard drives couldn’t be used in full, simultaneously, with DOS 3.2 and earlier, as standard, but they could be used with other operating systems, and that’s how &lt;a href=&quot;https://archive.org/stream/byte-magazine-1987-04/1987_04_BYTE_12-04_Instruction_Set_Strategies#page/n59/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;some were marketed&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;DOS 4.0 was released in July 1988, by which time Maxtor sold a 130 MB drive &lt;a href=&quot;https://archive.org/stream/byte-magazine-1988-07/1988_07_BYTE_13-07_Multitasking_and_Fast_40_Megabyte_Hard_Disks#page/n103/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;for around $1500&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;By the time MS-DOS 5.0 was released in 1991, 120 MB drives were starting to become common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I’ve checked with an old PC and a 40 MB drive, and DOS 3.2’s &lt;code&gt;FDISK&lt;/code&gt; can’t create a partition larger than 32 MB, however it &lt;em&gt;can&lt;/em&gt; create multiple primary partitions. But only one partition per drive is usable at a time (the active partition). DOS 3.3 can create and use extended partitions with logical partitions inside them.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-12-07T08:50:52.050" LastActivityDate="2017-12-07T08:50:52.050" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5128" PostTypeId="2" ParentId="5121" CreationDate="2017-12-02T04:11:38.800" Score="10" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5121/why-do-first-four-x86-gprs-named-in-such-unintuitive-order#comment11342_5121&quot;&gt;@davidbak suggests a possible physical implementation motivation&lt;/a&gt; for the design choice:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In the time we're talking guys writing the instruction set would prioritize minimal number of gates and then minimal gate depth/delay over just about everything else, I would think.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;BX&lt;/code&gt; is the only one of ACDB that can be used in a 16-bit addressing mode:&lt;br&gt;&#xA;&lt;code&gt;[ (BX|BP) + (DI|SI) +  (0 | disp8 | disp16) ]&lt;/code&gt;, where any of the 3 components are optional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;BX&lt;/code&gt; is also the only 16-bit-addressing-mode register that has a low/high half.  So maybe in 8086 it was physically on the boundary between the split low/high registers and the address-capable registers that the AGU had to read.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or maybe not: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5121/why-are-first-four-x86-gprs-named-in-such-unintuitive-order#comment11346_5128&quot;&gt;8086 ModR/M and opcode encodings were designed before the hardware by Stephen Morse, primarily a software guy&lt;/a&gt;.  We can't know whether he considered a HW layout benefit, or thought of this as a logical reason, or whether it just worked out well for the HW design, or maybe I'm way off base and it isn't even helpful for the HW implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(off topic re: low-8 of other registers) In x86-64, a REX prefix changes the meaning from AH/CH/DH/BH to SPL/BPL/SIL/DIL, in that order (Intel manual vol.2, Appendix B.1.4.2, Table B-5).  In 16/32 bit modes, 16-bit operand size was the smallest for SP/ESP and the other non-X registers.  (Making registers more uniform helps compilers, except that compilers sometimes end up wasting a REX prefix by picking a register that needs one to access the low 8 component.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://felixcloutier.com/x86/PUSHA:PUSHAD.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;pusha&lt;/code&gt;/&lt;code&gt;popa&lt;/code&gt; ordering&lt;/a&gt; matches too, and while that's interesting, the internal implementation probably uses a counter and goes through the same fetch-by-index logic as explicit register operands.  So it doesn't add new information that &lt;code&gt;pusha&lt;/code&gt; goes in order of the encodings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It makes sense that the physical layout of the register file would match the register-number encodings, though, to keep the decoding logic simple.  I had a look at the addressing-mode encodings, to see if there was a similar pattern there.  (I haven't looked at 8086 gate diagrams, but maybe the AGU fetches directly from the last 4 registers in the register file without going through the full indexing that can select any of the 8.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's complicated by the fact that 16-bit doesn't have a SIB byte, so base and base+index modes share the same 3 bit R/M field in the ModR/M byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://software.intel.com/en-us/articles/intel-sdm#three-volume&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel x86 manual vol.2&lt;/a&gt;, 2.1.5 Addressing-Mode Encoding of ModR/M and SIB Bytes,  &lt;em&gt;Table 2-1. 16-Bit Addressing Forms with the ModR/M Byte&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; Effective Address |  R/M field          | (added): /r encoding&#xA;[BX+SI]               000&#xA;[BX+DI]               001&#xA;[BP+SI]               010&#xA;[BP+DI]               011&#xA;[SI]                  100                | SI=110&#xA;[DI]                  101                | DI=111&#xA;disp16 (no base)      110                | (BP=101)&#xA;[BX]                  111                | BX=011&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So BX alone is at the opposite end from BX+SI and BX+DI, but it's one wrap-around away from being adjacent to the other two codes that involve BX.  When SI and DI are involved, bit0=0 means SI, bit0=1 means DI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When there are both base and index registers (bit2=0), then bit1=0 means BX, bit1=1 means BP.  So that's maybe consistent with BX being earlier in the physical layout of the register file (lower numbers to access it).  But R/M fields clearly need significant decoding before they turn into register fetches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, I think it's plausible that the AGU in 8086 has a &quot;back door&quot; into the register file that can only select from the last 4 registers (in &lt;code&gt;/r&lt;/code&gt; field and &lt;code&gt;pusha&lt;/code&gt; encoding order).  Note that &lt;a href=&quot;https://stackoverflow.com/questions/11953352/why-ia32-does-not-allow-memory-to-memory-mov/11957622?noredirect=1#comment64242811_11953352&quot;&gt;8086 uses the adder in its regular ALU for address calculations&lt;/a&gt;, but the addressing-mode decoding hardware &lt;em&gt;might&lt;/em&gt; use different paths to fetch inputs for the ALU's address calculations. (Totally guessing; certainly possible it just decodes those addressing modes to the usual 3-bit register codes and drives the normal ALU through regular register-fetch paths.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In 32/64-bit addressing modes, the encoding matches the usual register encoding, so presumably (in CPUs without out-of-order / register renaming, like 80386) the AGU can access the register file with the same 3-bit address as the ALU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(fun fact, 32/64-bit shares the same pattern of &lt;code&gt;[e/rbp]&lt;/code&gt; being the escape code for disp32 with no base (or RIP relative), which is why EBP always needs at least a disp8 = 0.  This is why disassembly looks like &lt;code&gt;[ebp+0]&lt;/code&gt; vs. &lt;code&gt;[edx]&lt;/code&gt;.)  Same for &lt;code&gt;r13&lt;/code&gt; in x86-64 mode, because it has the same code as &lt;code&gt;rbp&lt;/code&gt; (except for the extra bit in the REX prefix).&lt;/p&gt;&#xA;" OwnerUserId="3296" LastEditorUserId="3296" LastEditDate="2018-03-30T01:33:57.670" LastActivityDate="2018-03-30T01:33:57.670" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5131" PostTypeId="5" CreationDate="2017-12-04T10:35:16.583" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-12-04T10:35:16.583" LastActivityDate="2017-12-04T10:35:16.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5132" PostTypeId="4" CreationDate="2017-12-04T10:35:16.583" Score="0" Body="LaserDisc was an early hybrid analog/digital, primarily read-only video storage system using large optical disks, introduced in the late 1970s and largely superceded by DVD in the early 2000s. A variant of LaserDisc could also store arbitrary digital data." OwnerUserId="357" LastEditorUserId="357" LastEditDate="2017-12-04T11:05:22.253" LastActivityDate="2017-12-04T11:05:22.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5133" PostTypeId="1" AcceptedAnswerId="5134" CreationDate="2017-12-04T16:52:23.437" Score="2" ViewCount="1890" Body="&lt;p&gt;I've got an standard interface (DB-15 analog) joystick connector on my Windows XP gaming system.  It works fine for DOS applications (booting into DOS directly, not using XP at all).  However, nothing in XP detects it.  Since DOS games can talk to it, it must be hardware compatible.  Does XP need a special driver for legacy joystick support/how can I use it for my XP games?&lt;/p&gt;&#xA;" OwnerUserId="481" LastActivityDate="2017-12-07T15:17:52.710" Title="How to get Windows XP to detect joystick?" Tags="&lt;joystick&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5134" PostTypeId="2" ParentId="5133" CreationDate="2017-12-04T17:50:09.457" Score="6" Body="&lt;p&gt;It looks like you need to explicitly add the device - i.e., it isn't plug 'n play like USB or even like a lot of older devices (e.g., mice &amp;amp; keyboards on PS/2 ports).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cpl_joy_installing.mspx?mfr=true&quot; rel=&quot;noreferrer&quot;&gt;Microsoft: To install a game port game controller&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2017-12-04T17:50:09.457" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5135" PostTypeId="1" CreationDate="2017-12-04T20:54:43.473" Score="4" ViewCount="672" Body="&lt;p&gt;I'm attempting to retrieve text documents from a floppy disk that is a 2.0 MB DS HD floppy similar to:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.ebayimg.com/thumbs/images/g/UcUAAOSwzJ5XeCmh/s-l225.jpg&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;The only thing he knows is that the documents were created on a Mac around 1996.&lt;/p&gt;&#xA;&lt;p&gt;What are some ways that I can retrieve these text documents and what software problems should I expect keeping I have no idea what application or OS was used to create the documents?&lt;/p&gt;&#xA;" OwnerUserId="7326" OwnerDisplayName="Babiker" LastEditorUserId="15334" LastEditDate="2021-01-19T17:15:11.527" LastActivityDate="2021-01-19T17:15:11.527" Title="Retrieving text documents from a 2.0 MB/2.0 HD floppy disk?" Tags="&lt;hardware&gt;&lt;data-transfer&gt;&lt;text&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="5136" PostTypeId="2" ParentId="5135" CreationDate="2017-12-04T22:00:44.437" Score="6" Body="&lt;p&gt;That's the ubiquitous 1.44MB 3.5&quot; floppy.  Any modern floppy drive should be able to read it; the hard part is finding software that understands the format -- Mac-formatted disks aren't readable by Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing I'd try is plugging a USB floppy drive into a Mac and reading the disk directly: if you're lucky, everything should just work, and you can copy the files onto the hard drive to try various options for reading them.  If it doesn't, you're probably looking at a data-recovery effort, which can get a bit tricky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The files may be plain text or SimpleText documents, in which case TextEdit can read them.  If not, &lt;a href=&quot;http://www.libreoffice.org/&quot; rel=&quot;noreferrer&quot;&gt;LibreOffice&lt;/a&gt; is free and supports a wide range of old Mac word-processor formats.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2017-12-04T22:00:44.437" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5137" PostTypeId="2" ParentId="5135" CreationDate="2017-12-04T22:02:43.253" Score="7" Body="&lt;p&gt;From my experience, you have two options:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use a utility called &quot;MacDisk For Windows&quot; from (&lt;a href=&quot;https://macdisk.com/mden.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://macdisk.com/mden.php&lt;/a&gt;) that has a good chance of allowing a PC that is equipped with a Floppy Drive (USB or Otherwise) to read the HFS or HFS+ Formatted Macintosh Disk you have. I've used this in the past with good results. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you are concerned about using this old disk in a newer PC and running into a formatting error so severe it may damage your media the choose option&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Locate someone locally who has a G3 Blue and White, G4, or G5 Apple Macintosh that is still equipped with a floppy drive, and copy the disk contents to a standard formatted Flash Drive which would be visible by both PCs and Macs. I specify these apples because they use early versions of OS X, or even run OS 9, are highly likely to include a floppy drive in their standard configuration, and a USB port for the flash drive. (as duskwuff mentioned, the G5 might not be the best since it does not support internal floppy drives and only runs OS X so you would still need to get a USB floppy - mentioned it because it could still be available on the used market) &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It may be a good idea to acquire one of these legacy Power Macs anyway, since you may run into this issue in the future - diskettes, in the wild, tend to roam in packs. You maybe able to find a functional one inexpensively. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the files on the disk may be in some odd Macintosh application format, like Claris, Appleworks, Office Macintosh, or some other non-cross platform extension that may require you to manipulate it and convert it to a PC-readable file type from the original data. I doubt that time is of the essence, since this floppy has probably spent many seasons in retirement already.    &lt;/p&gt;&#xA;" OwnerUserId="3751" LastEditorUserId="3751" LastEditDate="2017-12-07T20:31:04.977" LastActivityDate="2017-12-07T20:31:04.977" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5138" PostTypeId="1" AcceptedAnswerId="5156" CreationDate="2017-12-04T23:22:59.127" Score="9" ViewCount="1232" Body="&lt;p&gt;I've recently become interested in collecting old NES games. I'm trying to find an original NES Legend of Zelda game CIB. However, I'm having trouble distinguishing different versions of the game. All of the LOZ games have a box, owner's manual, cartridge, sleeve, styrofoam, and a map with secrets. However, when I &lt;a href=&quot;https://www.ebay.com/sch/i.html?_from=R40&amp;amp;_trksid=p2047675.m570.l1313.TR0.TRC0.A0.H0.Xlegend%20of%20zelda%20nes%20cib.TRS1&amp;amp;_nkw=legend%20of%20zelda%20nes%20cib&amp;amp;_sacat=0&quot; rel=&quot;noreferrer&quot;&gt;search on eBay for Legend of Zelda games (CIB)&lt;/a&gt;, I get several variations. Namely, different games vary on extras in the box (i.e. a Nintendo Power poster, an invitation to subscribe to Nintendo, an invitation to join the Nintendo fun club, etc.) According to Wikipedia, &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Legend_of_Zelda_(video_game)#American_release&quot; rel=&quot;noreferrer&quot;&gt;the original NES version had the invitation to join the Nintendo fun club&lt;/a&gt;, but I really have no idea if that's correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;My question is:&lt;/strong&gt; Is there some online database out there that details what the package contents of different Nintendo video game releases are which is used by serious collectors?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried extensive Googling but to no avail. I found one that looked promising - &lt;a href=&quot;http://www.retrocollect.com&quot; rel=&quot;noreferrer&quot;&gt;www.retrocollect.com&lt;/a&gt;. It listed several versions for NES' Legend of Zelda. Unfortunately, it really didn't contain any details at all of versions like the &lt;a href=&quot;http://www.retrocollect.com/videogamedatabase/releases/13162/legend-of-zelda&quot; rel=&quot;noreferrer&quot;&gt;original North American release.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7328" LastEditorUserId="15334" LastEditDate="2021-03-13T07:09:04.677" LastActivityDate="2021-03-13T07:09:04.677" Title="Is there a database of the box contents for different versions of NES games?" Tags="&lt;nes&gt;&lt;data-preservation&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5139" PostTypeId="2" ParentId="4843" CreationDate="2017-12-05T20:48:57.767" Score="4" Body="&lt;p&gt;Contention, especially memory contention in the ZX Spectrum, has nothing to do with the memory chips, but rather with the address that is placed in the address bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The method by which the ULA is granted prioritary access to memory is implemented by making the ULA generate the Z80 clock. When the ULA finds an address in the 4000h-7FFFh range in the bus, it can stop the clock signal, effectively stopping the Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd recommend paying a visit to Chris Smith's excellent blog: &lt;a href=&quot;http://www.zxdesign.info/harlequin.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.zxdesign.info/harlequin.shtml&lt;/a&gt; or reading his book. :)&lt;/p&gt;&#xA;" OwnerUserId="7339" LastActivityDate="2017-12-05T20:48:57.767" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5140" PostTypeId="1" AcceptedAnswerId="5155" CreationDate="2017-12-06T10:18:18.033" Score="4" ViewCount="818" Body="&lt;p&gt;I have an old PC with a HDD that was using Double Space. Since I do not need the extra space, and want to minimise the system use of RAM, I attempted to re-format the drive normally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After typing &lt;code&gt;fdisk c:&lt;/code&gt;, which (IIRC) did not produce any errors, the drive is now responding &quot;Invalid media type&quot; to any attempt to use it. I have tried &lt;code&gt;format c:&lt;/code&gt;, &lt;code&gt;fdisk /mbr&lt;/code&gt;, just &lt;code&gt;fdisk&lt;/code&gt;, with identical results, &quot;Invalid media type reading drive C&quot;. It is MS-DOS 5.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any simple solutions? Which Norton tool should I use?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the BIOS diagnostics the drive is ok.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clarification: I have never booted from this drive, always from flash cards in A: or C: (with no HD installed). All the slots A-D are PCMCIA. It is a HP Omnibook.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More clarification: the reason I mentioned DS is that I first tried to just &lt;code&gt;format&lt;/code&gt; the drive, but it said I needed to use a DS-command (cannot remember the name), so I tried &lt;code&gt;fdisk&lt;/code&gt; instead, which seemed to work, but after that it has been &quot;invalid media type&quot; at any mention of &lt;code&gt;C:&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, there is only 4MB of RAM, so Norton Disk Doctor and some other Norton tools I tried do not run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Addition: please note that this problem is solved. Thanks to all who replied.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2017-12-09T01:34:30.780" LastActivityDate="2017-12-09T01:34:30.780" Title="What to do about &quot;Invalid media type&quot;" Tags="&lt;ms-dos&gt;&lt;hard-disk&gt;&lt;software-recommendation&gt;" AnswerCount="3" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="5141" PostTypeId="2" ParentId="5140" CreationDate="2017-12-06T10:40:37.663" Score="1" Body="&lt;p&gt;FIPS is another disk partitioning utility for MS-DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although FIPS is primarily intended for altering partitions on an existing, formatted HDD, it can create new partitions from scratch.  In my experience it is well worth trying as an alternative method of getting recalcitrant hard drives working again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have FIPS.EXE, it is available from several download locations.  It is normally supplied with Linux distros, as it is used to set up the HDD partitions before installing Linux alongside an existing OS.  If you have a Linux install CD/DVD lying around, you will have a copy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will of course need to boot MS-DOS from floppy and then run FIPS from a floppy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The included instructions will take you through the steps necessary.  An online guide can be found &lt;a href=&quot;ftp://www-uxsup.csx.cam.ac.uk/pub/doc/redhat/redhat7/rhl-rg-en-7.0/s1-dualboot-fips.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have your partition(s) back, then reboot MS-DOS from floppy and issue &lt;code&gt;format c:&lt;/code&gt; as normal.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-12-06T10:50:21.700" LastActivityDate="2017-12-06T10:50:21.700" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5142" PostTypeId="2" ParentId="5135" CreationDate="2017-12-06T16:40:04.770" Score="2" Body="&lt;p&gt;On floppy media that was not sold as preformatted, the unformatted capacity was commonly stated. ~2 MB is the unformatted capacity of what is commonly called a ‘1.44 MB’ floppy.&lt;/p&gt;&#xA;&lt;p&gt;However, the actual low-level format on the floppy could be:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PC DD format, which is 360 or 720 KiB. A PC drive can physically read that.&lt;/li&gt;&#xA;&lt;li&gt;Mac 800kB/400kB format. A non-specialty PC drive will choke on it.&lt;/li&gt;&#xA;&lt;li&gt;PC HD format. 1440 KiB. PC drive can read.&lt;/li&gt;&#xA;&lt;li&gt;PC specialty formats, like 1720 KiB. Unlikely that someone wrote to such a floppy from a Mac. PC drive can read with luck (these formats traded capacity for reliability) and an OS that supports it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The filesystem could be:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a DOS style FAT filesystem (any Windows or Linux PC can deal with that)&lt;/li&gt;&#xA;&lt;li&gt;a Mac-specific filesystem (MFS, HFS, HFS+) - will need extra software in Windows, and manual/special handling in Linux (a floppy automounter, if present, will likely not work).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The Documents:&lt;/p&gt;&#xA;&lt;p&gt;Unless they are plaintext (and even then, you might need a text editor that is configurable regarding character and newline encoding), you will need whatever software can process the given format.&lt;/p&gt;&#xA;&lt;p&gt;In case of a documented, or semi-plaintext, format, you might be able to write a rudimentary decoder yourself.&lt;/p&gt;&#xA;&lt;p&gt;If the filesystem is Macintosh specific, it is important to know that these filesystems actually treat files as a pair of two &amp;quot;subfiles&amp;quot;, so called forks. Macintosh applications often made use of that, and a file is incomplete and probably unusable if one of these forks is lost. Special attention has to be paid when handling this kind of file, since some non-Mac drivers will either only give you one of these forks or present them as two separate files (sometimes with one of them as a hidden file).&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="15334" LastEditDate="2021-01-19T16:44:47.033" LastActivityDate="2021-01-19T16:44:47.033" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5143" PostTypeId="1" AcceptedAnswerId="5148" CreationDate="2017-12-06T18:38:44.317" Score="10" ViewCount="972" Body="&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=xGEAPVCuwvY&quot; rel=&quot;noreferrer&quot;&gt;In this video about the EDSAC replica&lt;/a&gt;, he talks about the mercury delay lines which were used in the original EDSAC machine. They're unreliable, toxic, and relatively expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Delay lines can also be made from wire, which I imagine is much cheaper and maintainable. and the video demonstrates one made from wire. My question is: &lt;strong&gt;Why were early delay lines made from tubes of mercury?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2017-12-07T11:56:58.163" Title="Why did the EDSAC use mercury delay lines?" Tags="&lt;edsac&gt;&lt;delay-lines&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5144" PostTypeId="5" CreationDate="2017-12-06T18:50:40.290" Score="0" Body="" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-12-06T18:50:40.290" LastActivityDate="2017-12-06T18:50:40.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5145" PostTypeId="4" CreationDate="2017-12-06T18:50:40.290" Score="0" Body="For questions concerning EDSAC, the Electronic Delay Storage Automatic Calculator, built at Cambridge University between 1947 and 1949 and subsequently modified into the LEO I, the first computer deployed for commercial business processing." OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-12-06T18:50:40.290" LastActivityDate="2017-12-06T18:50:40.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5146" PostTypeId="5" CreationDate="2017-12-06T18:52:34.730" Score="0" Body="" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-12-06T18:52:34.730" LastActivityDate="2017-12-06T18:52:34.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5147" PostTypeId="4" CreationDate="2017-12-06T18:52:34.730" Score="0" Body="For questions about delay lines, components that extend the amount of time a signal takes to travel from one place to another." OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-12-06T18:52:34.730" LastActivityDate="2017-12-06T18:52:34.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5148" PostTypeId="2" ParentId="5143" CreationDate="2017-12-06T19:18:48.077" Score="18" Body="&lt;p&gt;To quote &lt;a href=&quot;https://en.wikipedia.org/wiki/Delay_line_memory&quot; rel=&quot;noreferrer&quot;&gt;the wiki&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Mercury was used because the acoustic impedance of mercury is almost  exactly the same as that of the piezoelectric quartz crystals; this  minimized the energy loss and the echoes when the signal was transmitted from crystal to medium and back again.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mercury was chosen over other techniques for the first data-delay lines because they were an adaptation of existing delay line technology used for radar.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastActivityDate="2017-12-06T19:18:48.077" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5151" PostTypeId="2" ParentId="5133" CreationDate="2017-12-07T15:17:52.710" Score="3" Body="&lt;p&gt;The DA-15 Joystick port (BTW, not to be confused with the AUI ethernet connector, which is also a DA-15 with additional locking hardware!) has no standardized provision to detect what is connected to it. The standard PC implementation of such a port (basically a bunch of 555 timers that are tuned by the variable resistors in the joystick) cannot even reliably detect if anything AT ALL is connected to it, a game port with nothing connected will just present nonsensical data to software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence, the OS, if it supports the game port hardware at all (Post-XP Windows by default will not work with the standard PC implementation!), needs to be manually configured for the type and number of joysticks connected. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the legacy (standard) type of game port is non-autodetectable hardware in itself. Actually, there seems to be no easy way even for a configured driver to ascertain whether it is reading from an installed game port or reading garbage data off the bus in its absence. This is the likely reason modern OSes will not by default support it, since a misconfigured or autoprobing driver could potentially cause a severe hardware crash (eg if some other legacy hardware uses some of the I/O resources that a multi-port gameport card would use).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same is basically true for your DOS games, with the differences that a) DOS simply choses not to involve itself at all with the game port, and b) the games bring their own driver that is set up with reasonable defaults, and relies on the user having installed their gameport hardware correctly.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-12-07T15:17:52.710" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5152" PostTypeId="1" AcceptedAnswerId="5153" CreationDate="2017-12-07T17:00:20.760" Score="13" ViewCount="2933" Body="&lt;p&gt;The Toshiba T100, the company's first laptop computer, shipped in 1982 with an LCD screen of 80x25 text resolution: &lt;a href=&quot;http://oldcomputers.net/toshiba-t100.html&quot; rel=&quot;noreferrer&quot;&gt;http://oldcomputers.net/toshiba-t100.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was this the first computer ever to have an LCD &lt;em&gt;screen&lt;/em&gt; as opposed to &lt;em&gt;line&lt;/em&gt; display, i.e. capable of displaying more than one line of text? It is the first one I have been able to find (though there are several earlier examples of LCD line displays, of course, depending on where you draw the distinction between a computer and a calculator).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: As Raffzahn observed, I misread that page. 80x25 is only if you connect the machine to a CRT monitor; the LCD is considerably smaller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Okay then, to clarify the question and for the sake of definiteness, let's say: what was the first computer ever to have an LCD screen capable of at least 40x25 text? That being the typical minimum standard for microcomputers around that time.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2017-12-07T17:46:04.433" LastActivityDate="2019-11-02T02:33:19.383" Title="First computer with LCD screen" Tags="&lt;history&gt;&lt;portable&gt;&lt;lcd-display&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5153" PostTypeId="2" ParentId="5152" CreationDate="2017-12-07T17:54:10.340" Score="25" Body="&lt;p&gt;As the question is unclear about &lt;strong&gt;what is to be considered a laptop&lt;/strong&gt; and &lt;strong&gt;what screen size is sufficient&lt;/strong&gt;, we will have multiple possible winners:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I will only include mass-market machines, as special solutions like terminals had LCD in various sizes quite a long time before)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;One-line portable computers have been around since the &lt;strong&gt;Sharp PC-1210&lt;/strong&gt; with&#xA;its 24x1 character display in 1980 (ignoring all earlier pocket calculators&#xA;like the HP41 with its alphanumeric display from 1979).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sharp's PC-1500&lt;/strong&gt; in 1981 not only extended that to 26x1 characters, but&#xA;offered, as a first, 156x7 bitmap graphics.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The mentioned &lt;strong&gt;Toshiba T100&lt;/strong&gt; in 1982 wasn't exactly a portable, as it still&#xA;required the user to schlepp several components and needed a desk. Also, the&#xA;display was restricted to 40x8 characters.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The same year Epson introduced the &lt;strong&gt;HX-20&lt;/strong&gt; with its 20x4 display&#xA;(120x32), eventually the first of the &lt;em&gt;Letter Sized Computers&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;1982/1983 was also the years(s) that brought us all the &lt;strong&gt;Kyotronic 85&lt;/strong&gt;&#xA;machines (Kyotronic 85, NEC 8201, Olivetti M10, Tandy M100) with their&#xA;40x8 (240x64) displays.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In fact, 1983 brought a real flood of similar machines, starting with&#xA;the &lt;strong&gt;Casio FP-200&lt;/strong&gt; with a 20x8 display (120x32).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In the Spring of 1983 the &lt;strong&gt;Gavilan SC&lt;/strong&gt; featured a 400x64 pixel LCD&#xA;which may barely qualify as a 80x8 (or even 10) text display.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sharp's PC-5000&lt;/strong&gt; introduced shortly after the Galivan had a full&#xA;80x8 display, capable of 640x80 B&amp;amp;W graphics.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In 1984, Zenith took the next step in size with 16 lines on the &lt;strong&gt;Z-150&lt;/strong&gt;&#xA;(80x16).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Although not really a mass-market machine, the &lt;strong&gt;Data General DG-1&lt;/strong&gt; released&#xA;in 1985 &lt;strong&gt;might qualify&lt;/strong&gt; with its large screen with CRT-like ratio and&#xA;dimensions and 80x25 characters (640x200) &lt;strong&gt;as the prime answer to the&#xA;above question&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;strong&gt;Apricot Portable&lt;/strong&gt; did reach most definitely a wider audience in 1985, &#xA;offering a 80x25 (640x200) display. But unlike the DG-1 it was rather slim,&#xA;unlike a CRT, much like the PC-5000. Then again, while being sleak,&#xA;transportable and called 'portable', naming it a laptop it would still be&#xA;a stretch.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Bondwell introduced its &lt;strong&gt;Bondwell-2&lt;/strong&gt; CP/M machine featuring a 80x25&#xA;(640x200) display using the same Hitachi screen as the Apricot Portable.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Toshiba added the &lt;strong&gt;T1000&lt;/strong&gt; with, again, a very similar form factor as the&#xA;Sharp PC-5000 but a 80x25 characters or 640x200 pixels in 1987.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An honourable mention should go to the &lt;strong&gt;Cambridge Z88&lt;/strong&gt; with its&#xA;rather high quality 80x8 (640x64) display from 1988.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now, if we also consider other display technologies in, the &lt;strong&gt;Grid Compass&lt;/strong&gt; series from 1982 with a 320x240 electroluminescent display would be another good bet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rest is history, so pick your favourite winner :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-02T02:33:19.383" LastActivityDate="2019-11-02T02:33:19.383" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="5155" PostTypeId="2" ParentId="5140" CreationDate="2017-12-08T09:52:54.297" Score="0" Body="&lt;p&gt;to solve your memory problem take a look at this &lt;strong&gt;SO/SE QA&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/46521076/2521214&quot;&gt;Run Turbo C++ in Freedos&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My bet is you did not use &lt;code&gt;highmem.sys&lt;/code&gt; or you are not loading &lt;code&gt;lh&lt;/code&gt; what you can eating up Your base memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;now There are few reasons for wrong media type I can think of...&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;BOOT sector protection&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;some &lt;strong&gt;BIOS&lt;/strong&gt;es have protection of boot sector (from viruses) messing up formating and partitioning. In the case a warning message Y/N should appear but I saw few times it did not happen or even if pressed &lt;code&gt;Y&lt;/code&gt; the format was corrupted. So check &lt;strong&gt;BIOS&lt;/strong&gt; and temporarily disable this feature if you Enabled.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Your system is infected by Virus&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There where some nasty boot sect viruses back in the days which may interfere with the formating/partitioning process causeing your problem. make sure you boot from virus free floppy/stick and do not run/scan files from HDD or stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC There where also some Viruses that hides in the BIOS or loads from LAN on boot so just in case unplug LAN cables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also Do not trust anything without proper scan. I got some infected pressed CD's from motherboards directly from manufactors. At that time the viruses where not recognized yet but after decade+ I got surprised when searching for old drivers ... :)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Incompatible fdisk or format utility&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What OS you have (MS-DOS 6.22)? What FS (FAT16)? If yo mix MS-DOS 7+ utilities with older MS-DOS then you can run into similar problems. Make sure you got FAT16 and do not crossing any barriers (In such case use EZ-drive I think).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC FAT32 was only for the newer &lt;strong&gt;MS-DOS&lt;/strong&gt; versions which where not a really MS-DOS like the old ones and not all programs runs in it properly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;physical drive error&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BIOS drive test is unreliable for &quot;newer&quot; IDE discs. That was usable for the old MFM and on new IDE it was not doing anything reasonable. Do not use HDD format utility from BIOS as IIRC some IDE HDD could be permanently damaged by it &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To diagnose and remedy your drive try &lt;strong&gt;PQ magick&lt;/strong&gt; I Think &lt;strong&gt;PQ 8.0&lt;/strong&gt; and earlier where meant for MS-DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also each IDE manufactor at that time had its own HDD format utility to make a low level HDD format You can try that as a last resort.... They usually work like FDD image you format an floppy with it and boot from it ... They sometimes helped in case of no real physical damage is present but just magnetical one.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2017-12-08T10:03:44.463" LastActivityDate="2017-12-08T10:03:44.463" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5156" PostTypeId="2" ParentId="5138" CreationDate="2017-12-08T10:41:27.313" Score="5" Body="&lt;p&gt;&lt;a href=&quot;http://www.mobygames.com/&quot; rel=&quot;noreferrer&quot;&gt;Moby Games&lt;/a&gt; allows users to submit box art and cartridges, and often different scans are submitted so we can observe the differences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bootgod.dyndns.org:7777/&quot; rel=&quot;noreferrer&quot;&gt;BootGod's database&lt;/a&gt; focuses mainly on NES/Famicom cartridge hardwre, but also include scans of the cartridges themselves and boxes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of those are exhaustive, but at least you can have a fair idea of different boxing for games that were released in multiple runs, such as Legend of Zelda.&lt;/p&gt;&#xA;" OwnerUserId="2123" LastActivityDate="2017-12-08T10:41:27.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5157" PostTypeId="2" ParentId="5140" CreationDate="2017-12-08T21:15:12.083" Score="2" Body="&lt;p&gt;Is it an OmniBook 300 or 425? Then you are in luck, because I've done precisely that with my 300. This is an official support document from HP explaining how to configure a 425 (or 300) without disk compression, and remove both the DoubleSpace and MS Flash Filesystem drivers from RAM. I forget how much conventional memory you end up with, but it's well over 500 KB.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;HP OMNIBOOK 425 - MAXIMIZING DOS CONVENTIONAL MEMORY BY REMOVING&#xA;DOUBLESPACE AND FLASH FILE SYSTEM&#xA;&#xA;  ISSUE:HP OmniBook 425 - running MS Windows while freeing up a&#xA;              maximum of 590 KB of DOS memory.&#xA;&#xA;  SOLUTION:To free up the DOS memory, two device drivers have to&#xA;              be disabled, DoubleSpace and the Flash File System.&#xA;              Disabling DoubleSpace will reduce the capacity of the&#xA;              hard drive to 40 MB and disabling the Flash File System&#xA;              will disable your access to drive D and the HP OmniBook&#xA;              425 Communication ROM card.  If access to either of&#xA;              these is necessary after following this procedure, see&#xA;              &quot;Reinstalling the Flash File System&quot; below.  This&#xA;              process should only be used with the hard disk version&#xA;              of the HP OmniBook 425 because the Flash File System&#xA;              will be disabled.  The following process describes&#xA;              copying the required files to drive C and editing DOS&#xA;              and Windows startup files.&#xA;&#xA;  REFORMATTING THE HARD DRIVE&#xA;&#xA;          CAUTION:ALL EXISTING DATA ON DRIVE C WILL BE&#xA;                    LOST.  ALL DATA SHOULD BE BACKED UP&#xA;                    BEFORE CONTINUING.&#xA;&#xA;              1. Exit Windows.&#xA;              2. Type FDISK C:and press [Enter].&#xA;              3. Answer YES to the &quot;Proceed with FDISK (Y/N)? [N]&quot;&#xA;                 prompt and press [Enter].&#xA;              4. Press any key to the &quot;Press any key when ready . . .&#xA;                 &quot; prompt to reboot the HP OmniBook 425.&#xA;              5. Answer NO to the &quot;Do you want to format drive C:and&#xA;                 copy required files to it (Y/N)? [Y]&quot; prompt and&#xA;                 press [Enter].&#xA;              6. At the D:prompt, type FORMAT C:and press [Enter].&#xA;                 Answer YES to the&#xA;                 &quot;Proceed with Format (Y/N)?&quot; prompt and press&#xA;                 [Enter].&#xA;              7. When prompted for a volume label, type OMNIBOOK and&#xA;                 press [Enter].&#xA;&#xA;  COPYING REQUIRED FILES TO DRIVE C&#xA;&#xA;              1. At the DOS prompt, type D:\OBSETUP /F and press&#xA;                 [Enter].  This will copy most of the required files&#xA;                 from drive D to drive C.  Reboot the HP OmniBook&#xA;                 425.&#xA;              2. Once the HP OmniBook 425 has rebooted, start File&#xA;                 Manager and open one window for drive C and one&#xA;                 window for drive D.&#xA;              3. In the window that displays drive C, select the C:\&#xA;                 icon to make the root directory active.  If a&#xA;                 replace prompt is displayed when performing the&#xA;                 following steps, answer YES.&#xA;              4. Copy the OMNIBOOK directory on drive D to drive C.&#xA;              5. Copy the WINDOWS directory on drive D to drive C.&#xA;              6. Copy the WINWORD directory on drive D to drive C.&#xA;              7. Copy the files in the TSI directory on drive D to&#xA;                 the WINDOWS\SYSTEM subdirectory on drive C.&#xA;              8. Copy all of the files in the root of drive D to the&#xA;                 root of drive C.&#xA;              9. Change the window that displays drive D to display&#xA;                 drive C and select the OMNIBOOK directory.  Move&#xA;                 OBMGMEXE.EXE  to C:\WINDOWS directory.&#xA;              10.     Change one window to display the&#xA;                 C:\WINDOWS\SYSTEM directory and the other window to&#xA;                 display the C:\TSI directory.  Move LLRSTS.EXE in&#xA;                 the C:\WINDOWS\SYSTEM subdirectory to the C:\TSI&#xA;                 subdirectory.&#xA;              11.     Change one window to display C:\OMNIBOOK and&#xA;                 the other to display C:.  Move OBCIC.EXE in the&#xA;                 OMNIBOOK directory to root of drive C.&#xA;              12.     Delete WIN.BAT in the root of drive C.&#xA;              13.     Copy C:\AUTOEXEC.DOS to C:\AUTOEXEC.BAT.&#xA;              14.     Exit File Manager.&#xA;&#xA;  EDITING REQUIRED FILES&#xA;&#xA;              1. Use Microsoft (R) Word and edit C:\CONFIG.DOS.&#xA;              2. Type REM at the beginning of the line listed below.&#xA;&#xA;                    DEVICE=C:\WINDOWS\EMM386.SYS NOEMS X=D000-DFFF&#xA;&#xA;              3. Save the file as CONFIG.SYS and again as CONFIG.WIN.&#xA;              4. Edit C:\WINDOWS\CONTROL.INI. and use Edit-Replace to&#xA;                 replace all occurrences of D:with C:.  If a replace&#xA;                 prompt is displayed, when performing these steps,&#xA;                 answer &quot;YES&quot;.&#xA;              5. Save the file.&#xA;              6. Edit C:\WINDOWS\SYSTEM.INI and replace all&#xA;                 occurrences of D:with C:.&#xA;              7. Save the file.&#xA;              8. Edit C:\WINDOWS\WIN.INI  and replace all occurrences&#xA;                 of D:with C:.&#xA;              9. Save the file and exit Microsoft Word.&#xA;              10.     Select the HP Financial Calculator icon in&#xA;                 Windows Main group.  Press Alt+Enter to display the&#xA;                 Program Item Properties and change the command line&#xA;                 to read &quot;C:\HPCALC.EXE&quot;.&#xA;              11.     Select the LapLink RA On/Off icon in the&#xA;                 Windows Main group.  Press Alt+Enter to display the&#xA;                 Program Item Properties and change the command line&#xA;                 to read &quot;C:\TSI\LLRSTS.EXE /S&quot;.&#xA;              12.     Exit Windows.&#xA;&#xA;  REBOOTING THE HP OMNIBOOK 425&#xA;&#xA;              1. At the DOS prompt, type OBBOOT 3.  This will reboot&#xA;                 the HP OmniBook 425 and disable DoubleSpace and the&#xA;                 Flash File System.&#xA;              2. To start Windows, type MSWIN and press [Enter].&#xA;&#xA;  OPTIONAL -- CREATE A BATCH FILE TO START LAPLINK REMOTE AND MS&#xA;  WINDOWS&#xA;&#xA;              1. Start Windows by typing MSWIN and pressing [Enter].&#xA;              2. Start Notepad and type the following lines.&#xA;&#xA;                    C:\LLREMOTE&#xA;                    C:\WINDOWS\MSWIN&#xA;                    C:\LLREMOTE /U&#xA;&#xA;              3. Save the file as C:\WIN.BAT.&#xA;              4. Modify AUTOEXEC.BAT and AUTOEXEC.WIN files to use&#xA;                 this batch file.&#xA;&#xA;  REINSTALLING THE FLASH FILE SYSTEM&#xA;&#xA;              1. Exit Windows.&#xA;              2. Type OBBOOT 2 and press [Enter] at the DOS prompt.&#xA;              3. To disable the Flash File System again, type OBBOOT&#xA;                 3 at the DOS prompt.&#xA;&#xA;                  Copyright  Hewlett-Packard Co. 1996&#xA;       This information is subject to change without notice and&#xA;                 is provided &quot;as is&quot; with no warranty.&#xA;          Hewlett-Packard shall not be liable for any direct,&#xA;        indirect, special, incidental or consequential damages&#xA;             in connection with the use of this material.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4459" LastActivityDate="2017-12-08T21:15:12.083" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5158" PostTypeId="2" ParentId="4894" CreationDate="2017-12-09T01:56:27.727" Score="2" Body="&lt;p&gt;I can recommend Reconnaissance. It's easy to use and also has a neatly arranged hex and ascii view. It is also what I used back in the days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/E2LaI.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/E2LaI.png&quot; alt=&quot;reconnaissance&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;^ Only very few sector editors offer such wide petscii lines. This increases readability - each directory entry equals one line. The program &quot;sector ed.&quot; starts at track $13, sector $00. The filetype is standard prg as defined with the $82 left of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just like you, I need a sector editor (my nordic power cartridge sometimes saves files with a wrong load-adress to disk). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I tested literally a dozen other sector editors today. In Vice and/or on my physical machine - just to have a look. (It took quite a while ;)  One of the best was &quot;Satans Seed&quot; aka &quot;Satans Cracker&quot; by &quot;the deacon&quot;. Don't look at me, I didn't label it that way ;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bw8En.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bw8En.png&quot; alt=&quot;seed screenshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want small size the winner in my opinion is disc-doctor-V3 by kevin pickell using only 15 blocks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mVmXE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mVmXE.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You maybe can find these programs if you g**gle for &quot;commodore.software&quot; and &quot;disk editors&quot;, but I'm sure searching the internet for the program names will work, too.&lt;/p&gt;&#xA;" OwnerUserId="7355" LastEditorUserId="621" LastEditDate="2017-12-10T03:09:41.743" LastActivityDate="2017-12-10T03:09:41.743" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5160" PostTypeId="1" AcceptedAnswerId="5175" CreationDate="2017-12-10T16:15:01.070" Score="11" ViewCount="1069" Body="&lt;p&gt;I'm building my own Z80 computer but I'm having a very strange problem.&#xA;Consider this code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ld a,0xaa&#xA;out (00),a&#xA;jp a&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That works as expected, outputting 0xaa on port 0x00.  Now consider this code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; ld a,0xaa&#xA;hello:&#xA; out (00),a&#xA; inc a&#xA; jp hello&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This outputs exactly 87 times to port 0x00, then it crashes. I took a look at the buses to see what's happening and it seems that it accesses incrementally addresses on memory when it's not needed. I read a year ago that this was a thing due to Z80's architecture, but the problem happens when this incremental access reaches 10000000(bin).  This is what I see in the logic analyser:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rGbcc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rGbcc.png&quot; alt=&quot;analyzer&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The increment is happening on address 3 4 5 6 7 and 8, and when the 8th modulates, iorq stops and the CPU does weird stuff.  Can any one please help?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;EDIT:&lt;/h3&gt;&#xA;&lt;p&gt;I found the answer but if you have the same or similar issue, &lt;strong&gt;you should definitely&lt;/strong&gt; read Spektre's and tofro's answers because they list a lot of very possible problems that could cause this.&lt;/p&gt;&#xA;" OwnerUserId="7356" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-05-30T11:50:09.647" Title="z80 crashes after executing some instructions" Tags="&lt;hardware&gt;&lt;z80&gt;&lt;assembly&gt;&lt;homemade&gt;" AnswerCount="3" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5161" PostTypeId="2" ParentId="5109" CreationDate="2017-12-10T17:38:57.500" Score="1" Body="&lt;p&gt;I will guess &lt;a href=&quot;http://www.his.com/~pshapiro/math.shop.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Math Shop&lt;/a&gt;. There was also Algebra Shop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this game the player went from &quot;shop&quot; to shop serving customers by solving math problems. Each shop featured different types of math problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Algebra Shop can be downloaded here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.apple2online.com/web_documents/algebrashop.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.apple2online.com/web_documents/algebrashop.zip&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="548" LastActivityDate="2017-12-10T17:38:57.500" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5162" PostTypeId="1" AcceptedAnswerId="5163" CreationDate="2017-12-10T21:36:08.697" Score="7" ViewCount="351" Body="&lt;p&gt;I bought a &lt;a href=&quot;https://en.wikipedia.org/wiki/Magnavox_Odyssey%C2%B2&quot; rel=&quot;noreferrer&quot;&gt;Philips Videopac G7000&lt;/a&gt; because it looks awesome. Now I need to shop for some games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interested in this AAA+ title, &lt;a href=&quot;https://en.wikipedia.org:/wiki/Crazy_Chase_(1982_video_game)&quot; rel=&quot;noreferrer&quot;&gt;Crazy Chase&lt;/a&gt;:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xKSfGm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xKSfGm.jpg&quot; alt=&quot;Crazy Chase box cover&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, on the box it says &lt;strong&gt;EXPANDED MEMORY&lt;/strong&gt;/&lt;strong&gt;&lt;em&gt;MEMOIRE 4K OCTETS&lt;/em&gt;&lt;/strong&gt;. Does it mean that I need a memory expansion? My computer only has 64 bytes of RAM! There's nothing about this in the manual.&lt;/p&gt;&#xA;" OwnerUserId="333" LastEditorUserId="276" LastEditDate="2017-12-11T09:53:35.393" LastActivityDate="2017-12-14T13:56:59.870" Title="What does &quot;Expanded Memory&quot; mean on a Philips Videopac G7000 game?" Tags="&lt;memory&gt;&lt;game-cartridge&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5163" PostTypeId="2" ParentId="5162" CreationDate="2017-12-10T23:28:14.337" Score="6" Body="&lt;p&gt;This just denotes the 'new' expanded cardridges with a game using a 4 KiB ROM. They are also known as &lt;strong&gt;'Challenger Series',&lt;/strong&gt; include titles like &lt;strong&gt;UFO&lt;/strong&gt; &lt;em&gt;(Astroids)&lt;/em&gt; or  &lt;strong&gt;Freedom Fighters&lt;/strong&gt; &lt;em&gt;(Defender)&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;While the external address space was limited to 2 KiB, the cartridge port did feature two select/address lines, so up to 4 ROMs with a total of 8 KiB could be added without further tricks. Still, early games did fit well in just one ROM. It wasn't until 1981 when UFO/Satellite Attack (#34) showed up as the first game requireing two ROMs (4KiB).These games where marketed as 'Challenger Series' and often hyped with the 'Expanded Memory' claim you noticed.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(BTW, your G7000 got 192 bytes of RAM - there are additional 128 bytes for the screen data :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Addendum: William Cassidy great &lt;a href=&quot;http://www.the-nextlevel.com/odyssey2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Odyssey² Homepage!&lt;/a&gt; has it covered with a seperate FAQ entry: &lt;a href=&quot;http://www.the-nextlevel.com/odyssey2/faq/essentials/#19&quot; rel=&quot;nofollow noreferrer&quot;&gt;What is the Challenger Series?&lt;/a&gt;. Prime source for information about Odyssey2/G7000 anyway.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-12-14T13:56:59.870" LastActivityDate="2017-12-14T13:56:59.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5164" PostTypeId="1" CreationDate="2017-12-11T05:14:20.867" Score="4" ViewCount="206" Body="&lt;p&gt;&lt;a href=&quot;http://www.minuszerodegrees.net/5162/bios/5162_bios_revisions.htm&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; references a problem with the IBM 5162 BIOS where it will present an error during POST under some circumstances and that using a third-party BIOS was a workaround.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What other BIOS ROMs would work with a 5162 and how would I find them today?&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2017-12-11T05:14:20.867" Title="Are there alternative BIOS ROMs for the IBM 5162?" Tags="&lt;ibm&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5165" PostTypeId="1" AcceptedAnswerId="5166" CreationDate="2017-12-11T06:04:35.753" Score="8" ViewCount="867" Body="&lt;p&gt;When shopping for a VGA ISA card, how might I know if it would be compatible with an IBM 5162? Do all 8-bit and 16-bit ISA VGA cards work, or only some?&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2018-04-09T20:21:02.287" Title="Choosing a VGA card for the IBM 5162?" Tags="&lt;ibm&gt;&lt;vga&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5166" PostTypeId="2" ParentId="5165" CreationDate="2017-12-11T08:10:15.683" Score="8" Body="&lt;p&gt;The 5162, more commonly known as the IBM PC XT/286, uses a 16-bit expansion bus. Any 8-bit “ISA” VGA card should work fine (but they are rare), and most 16-bit VGA cards should work too... Ironically, the 8-bit Hercules VGA card is &lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?59246&quot; rel=&quot;nofollow noreferrer&quot;&gt;known to cause issues&lt;/a&gt;. Some 16-bit cards designed for the PC AT won’t &lt;a href=&quot;http://www.minuszerodegrees.net/5162/misc/ibm_5162_demand.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;fit in the XT/286’s case&lt;/a&gt; and therefore can’t be used either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compatibility problems are mainly a concern with older systems, because of their 8-bit-only bus, and/or their 8088 CPU. A few 16-bit VGA cards work in IBM PCs and XTs; the Vintage Computer Forum has a &lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?26432-8bit-Friendly-ISA-VGA-cards&quot; rel=&quot;nofollow noreferrer&quot;&gt;list&lt;/a&gt;. Basically, older 16-bit VGA cards made by ATI, Cirrus Logic, Oak Technology, Trident, TSENG, Video Seven, and Western Digital (Paradise) are possibilities; some will work without configuration, others need jumpers to be set appropriately. &lt;a href=&quot;http://www.minuszerodegrees.net/5150/vga/5150_vga.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;This page&lt;/a&gt; lists 8- and 16-bit cards which are &lt;em&gt;known&lt;/em&gt; to work in IBM 5150s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/481/brian-knoblauch&quot;&gt;Brian Knoblauch&lt;/a&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5165/choosing-a-vga-card-for-the-ibm-5162/5166?noredirect=1#comment11548_5166&quot;&gt;points out&lt;/a&gt;, plugging a 16-bit card in an 8-bit slot means that part of the edge connector hangs off the end; this is perfectly safe as long as there are no components in the way on the motherboard, and as long as you don’t run into a slot with an edge that’s too thick to fit in between the connectors (it happens sometimes, so don’t force a card in). I couldn’t find an example photo of this in my brief search, but this works in the same way that a PCI-X card can usually be plugged into a PCI slot, with an edge connector hanging off the end (see &lt;a href=&quot;http://thehomeserverblog.com/esxi/intel-pro1000-dual-gigabit-nic-pci-x-card-in-pci-slot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article&lt;/a&gt; for an example).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-12-12T16:57:55.850" LastActivityDate="2017-12-12T16:57:55.850" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5167" PostTypeId="2" ParentId="5160" CreationDate="2017-12-11T09:20:11.023" Score="10" Body="&lt;p&gt;You might be having some sort of short between A7 and some other CPU line. Your program doesn't use/need this line, but refresh does. The fact that &quot;weird behavior&quot; starts when A7 is toggled for the first time, definitely hints that it is connected to something it shouldn't be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on where it is connected to, if your memory fetch (from ROM) is not properly synchronized (don't read from the bus when /RFSH is low) with the /RFSH signal, you might then pick up (during the instruction fetch) stray bytes from areas where no ROM is present and thus the wrong instructions.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-12-11T09:42:47.483" LastActivityDate="2017-12-11T09:42:47.483" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5168" PostTypeId="2" ParentId="5160" CreationDate="2017-12-11T09:21:37.913" Score="8" Body="&lt;p&gt;There is a lot what could go wrong here a list of hints:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;code&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see no &lt;code&gt;ORG&lt;/code&gt; directive in the code so are you sure you are placing your code in the right place of memory? Also I would feel safer with interrupts disabled. I would expect something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    org 0&#xA;reset:&#xA;    di&#xA;    ld a,0xAA&#xA;loop0:&#xA;    out (00),a&#xA;    inc a&#xA;    jp loop0&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.z80.info/zip/z80-interrupts.pdf&quot; rel=&quot;noreferrer&quot;&gt;Interrupts&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are &lt;code&gt;/NMI&lt;/code&gt; and &lt;code&gt;/INT&lt;/code&gt; pins causing interrupt (and &lt;code&gt;/RESET&lt;/code&gt; is also form of interrupt too). Hope they are properly electrically handled (with pull up resistor). In case you want to use also Interrupts you need to add proper interrupt handlers for your code but those require stack so you also need &lt;strong&gt;RAM&lt;/strong&gt; to work properly unless they are used as Watch dog for periodic reset only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beware &lt;code&gt;di&lt;/code&gt; disables only the &lt;code&gt;/INT&lt;/code&gt; pin so &lt;code&gt;/NMI&lt;/code&gt; and &lt;code&gt;/RESET&lt;/code&gt; will still interfere with your code if &lt;code&gt;Low&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also the &lt;code&gt;/WAIT&lt;/code&gt; and &lt;code&gt;/BUSRQ&lt;/code&gt; pins that can effectively stop the &lt;strong&gt;CPU&lt;/strong&gt; if un-handled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to be more safe I would change the code a bit more:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    org 0&#xA;reset:&#xA;    di&#xA;    ld a,0xAA&#xA;loop0:&#xA;    out (00),a&#xA;    inc a&#xA;    jp loop0&#xA;&#xA;    org 0x66&#xA;NMI:&#xA;    jp reset&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that I did not use &lt;code&gt;retn&lt;/code&gt; because you do not have any stack.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Analyzer signal&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the other comments mentioned you are probing the buses of the &lt;strong&gt;Z80&lt;/strong&gt; so you are catching everything instead of &lt;strong&gt;IO&lt;/strong&gt; access only. That means you got address bus swapping between &lt;code&gt;pc&lt;/code&gt; (program counter) and &lt;code&gt;r&lt;/code&gt; (refresh) registers and &lt;strong&gt;IO&lt;/strong&gt; address &lt;code&gt;+/-&lt;/code&gt; some undefined behavior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data bus is swapping between each &lt;strong&gt;OP&lt;/strong&gt; code of your assembly code the &lt;strong&gt;IO&lt;/strong&gt; data and also &lt;code&gt;+/-&lt;/code&gt; some undefined behavior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the &lt;strong&gt;IO&lt;/strong&gt; access is only a small fraction of what you see. To identify it you should investigate &lt;code&gt;/IORQ,/RD,/WR&lt;/code&gt; signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;Z80 IO&lt;/strong&gt; address space is officially only 8bit so probing 8th bit of address has not much sense. To move to 16 bit &lt;strong&gt;IO&lt;/strong&gt; address space use the&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;out (c),a&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which uses &lt;code&gt;bc&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;What does it mean Z80 crashes exactly?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not aware of any Crash ability of &lt;strong&gt;Z80&lt;/strong&gt;. More likely it executes &lt;code&gt;HALT&lt;/code&gt; or something waiting for &lt;strong&gt;HW&lt;/strong&gt; response that never comes ... Are you sure your logic analyzer probing does not interfere with the buses? Is the &lt;strong&gt;CPU&lt;/strong&gt; clock still running? Is &lt;code&gt;M1&lt;/code&gt; pin toggling?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;High frequency and circuit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also possibility that you got electrical and or timing problems. What clock are you using for &lt;strong&gt;CPU&lt;/strong&gt;? Is your &lt;strong&gt;ROM&lt;/strong&gt; fast enough? Do you got proper shielding of your buses and are they short enough? Do you got proper blocking ground and caps nearby to lower the impulse load on the power supply?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not lower your clock to more reasonable values. Also I strongly recommend to read this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://reverseengineering.stackexchange.com/a/12824/4709&quot;&gt;Thought I found serial port - broke embedded device instead! Help?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also remember any un-handled input pin of &lt;strong&gt;IC&lt;/strong&gt; is an antenna and if high frequency square pulses are nearby you can expect weird things to happen at anytime ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally if counting to a specific value stops the &lt;strong&gt;CPU&lt;/strong&gt; it might hint you got short circuit of some higher address or data bus line with &lt;code&gt;/INT,/NMI ,/BUSRQ&lt;/code&gt; or &lt;code&gt;/RESET&lt;/code&gt; check for that some short circuits on &lt;strong&gt;PCB&lt;/strong&gt; are invisible to naked eye usually scrapping the gaps between copper paths with a needle helps ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2017-12-11T10:06:27.783" LastActivityDate="2017-12-11T10:06:27.783" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5169" PostTypeId="1" AcceptedAnswerId="5176" CreationDate="2017-12-11T19:15:04.357" Score="7" ViewCount="335" Body="&lt;p&gt;Early floppy disks had significant spacing between blocks, e.g. a PC 5.25&quot; disk had a theoretical capacity of about 500K but was formatted as 360K, nine blocks per track, with a substantial fraction of a block's worth of space between blocks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the equivalent figure for early hard disks? For example, a common size for PC hard disks in the eighties was 20 megabytes. On a hard disk like that, how much of the space was used for spacing between blocks?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4025" LastEditDate="2017-12-13T08:14:24.947" LastActivityDate="2017-12-29T15:24:28.413" Title="What was the block spacing in early hard disks?" Tags="&lt;hard-disk&gt;&lt;storage&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5170" PostTypeId="2" ParentId="5169" CreationDate="2017-12-12T01:52:28.153" Score="3" Body="&lt;p&gt;It's a feature or the storage scheme - and similar schemes will end in similar results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The maximum you're asking for is defined by the bit clock. So take the time needed for one revolution and divede it by the clock uses. That's the theoretical capacity within the frameset of your question. Subtract the 'real' data and you'll get the overhed. And as a result the Ratio is about the same as with diskettes. Roughly 1/3rd.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just, as @tofro already noted, it's useless, as it doesn't tell anything about the media or its real capacity, or what would be possible by adapting the drive system. Just compare Apples variable speed 3.5 drive to an identical fixed speed drive. Same can be reached with variable speed bitstreams. And then there's the media. The 500 KiB you mention is a very conservative seting anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Playing with formating, gaps and alike makes only sense if one can't change the real parameters - which usually restricts this to nerdy games.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-12-12T18:25:11.633" LastActivityDate="2017-12-12T18:25:11.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5171" PostTypeId="2" ParentId="4894" CreationDate="2017-12-12T02:12:40.270" Score="1" Body="&lt;p&gt;Another way that I just recently learned although I use cartridges since &quot;the days&quot; is: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a cartridge like the Nordic Power or the Action Cartridge+ you can use the sector editor that is built into the assembler monitor. It's less comfortable but way quicker and you don't have to load a program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Howto:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Enter the monitor with F2&lt;/li&gt;&#xA;&lt;li&gt;The monitor command &quot;@BR track sector adress&quot; will load a sector (256 bytes) to given memory adress.&lt;/li&gt;&#xA;&lt;li&gt;For example &quot;@BR 12 01 40&quot; will load track $12, sector $01 to C64&#xA;memory at $4000 (this is the first block of the disk directory)&lt;/li&gt;&#xA;&lt;li&gt;Like always &quot;M 4000&quot; or &quot;I 4000&quot; or &quot;I* 4000&quot; will let you view and edit the memory.&lt;/li&gt;&#xA;&lt;li&gt;If you changed something and want to write it back to disk just use&#xA;&quot;@BW track sector adress&quot;&lt;br&gt;&#xA;f.e.: &quot;@BW 12 01 4000&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You can do exactly the same in Vice when you've got a .crt image file of the cartridge and mount it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/M7euc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/M7euc.png&quot; alt=&quot;Screenshot - Sector editor&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/jmUcw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jmUcw.png&quot; alt=&quot;Screenshot - Sector edited&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/c80Sy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/c80Sy.png&quot; alt=&quot;Screenshot - @BR&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7355" LastEditorUserId="276" LastEditDate="2017-12-12T09:19:41.067" LastActivityDate="2017-12-12T09:19:41.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5172" PostTypeId="1" AcceptedAnswerId="5192" CreationDate="2017-12-12T12:17:35.057" Score="11" ViewCount="2577" Body="&lt;p&gt;Would like to run &quot;black on white&quot; software on a DOS machine with an LCD screen, so am wondering if there are any TSR tools, or similar, for inverting the screen. I believe it is grey scale VGA, not monochrome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a HP Omnibook 300, if that matters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had a look at Simtel (I believe) a while ago, but could not find anything that worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Addition: I am running DOS only, not MS Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More additions: &lt;code&gt;ansi.sys&lt;/code&gt; does not seem to work, I believe the program handles the graphics directly by itself. The program also does not have a way to change the colours. Giving the command &lt;code&gt;mode mono&lt;/code&gt; before running the program does not make a difference to the program (but it does mess up the display of the battery level, which is something special apparently using the CP437/850 block graphics). The machine does not have any BIOS options for changing the display in any way. In fact I am not sure it even has a standard BIOS.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2017-12-13T00:15:30.043" LastActivityDate="2020-11-13T21:07:06.917" Title="Invert LCD screen in DOS 5.0" Tags="&lt;ms-dos&gt;&lt;vga&gt;&lt;lcd-display&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5173" PostTypeId="2" ParentId="5172" CreationDate="2017-12-12T13:20:16.090" Score="4" Body="&lt;p&gt;For programs which run within a DOS screen or window, you should be able to pre-load &lt;a href=&quot;https://www.computerhope.com/ansisys.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANSI.SYS&lt;/a&gt; with CONFIG.SYS. You would then preset your desired foreground and background colors before running the program you wanted. The page &lt;a href=&quot;http://www.robvanderwoude.com/ansi.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANSI Sequences&lt;/a&gt; seems to give pretty good guidance in using ANSI within a DOS window.&lt;/p&gt;&#xA;&lt;p&gt;I'm not sure whether ANSI.SYS still came standard with MS-DOS 5.0. It would still work, but for some reason they removed it from the standard distribution at some point.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="15334" LastEditDate="2020-11-13T21:07:06.917" LastActivityDate="2020-11-13T21:07:06.917" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="5174" PostTypeId="2" ParentId="5172" CreationDate="2017-12-12T14:14:26.657" Score="16" Body="&lt;p&gt;Some laptops have built-in support for inverting the screen in one form or another; Toshiba laptops for instance have a setup menu to configure gray-scale translation and inversion, as well as a pop-up TSR and a command-line tool (&lt;code&gt;VCHAD&lt;/code&gt; on VGA systems). If your system doesn’t have anything like this, I think your options are rather limited...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5173/79&quot;&gt;mentioned&lt;/a&gt; by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4138/richf&quot;&gt;RichF&lt;/a&gt;, &lt;code&gt;ANSI.SYS&lt;/code&gt; will allow you to set the current foreground and background colours, which will work for programs which don’t reset them; in practice, that’s mostly the DOS prompt and console tools, most full-screen programs will reset the colours themselves. If you do want to explore this option, I recommend using a more capable driver such as &lt;a href=&quot;http://www.reimagery.com/fsfd/screen.htm#nnansi&quot; rel=&quot;noreferrer&quot;&gt;NNANSI&lt;/a&gt;, along with &lt;a href=&quot;http://www.reimagery.com/fsfd/screen.htm#ansiset&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;ANSISET&lt;/code&gt;&lt;/a&gt; to set things up more easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other options you could look at are the basic &lt;code&gt;MODE MONO&lt;/code&gt;, which will switch the system to monochrome mode, and perhaps the &lt;a href=&quot;http://www.reimagery.com/fsfd/screen.htm#mono&quot; rel=&quot;noreferrer&quot;&gt;PC Magazine TSR &lt;code&gt;MONO&lt;/code&gt;&lt;/a&gt; which will replace text-mode character attributes continuously with monochrome attributes, and which you can modify to choose your own replacement colours. If you can find a copy somewhere, &lt;a href=&quot;https://books.google.fr/books?id=3bSfCwxhFmMC&amp;amp;pg=PT110&amp;amp;dq=pc%20magazine%20ultravision&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=0ahUKEwjll7b504TYAhVHqxoKHaPzCHEQ6AEIKzAB#v=onepage&amp;amp;q=pc%20magazine%20ultravision&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;UltraVision&lt;/a&gt; should provide enough control to set things up however you want — that was the go-to utility for DOS laptop users in the nineties (this was developed by Personics, and last released as “Laptop UltraVision”).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many DOS programs also support colour configuration of their own, some with pre-configured palettes for various types of LCD screens.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-12-12T14:33:05.780" LastActivityDate="2017-12-12T14:33:05.780" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5175" PostTypeId="2" ParentId="5160" CreationDate="2017-12-12T15:26:44.610" Score="8" Body="&lt;p&gt;Found the actual problem (i believe).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was used to connecting rom's &lt;code&gt;/CS&lt;/code&gt; to &lt;code&gt;A15&lt;/code&gt; to have both a rom and a ram later on, on a &lt;strong&gt;6502&lt;/strong&gt; system but as it turns out there is a handy &lt;code&gt;/MREQ&lt;/code&gt; signal on the Z80.Excluding all the address decoding, the solution was to connect &lt;code&gt;/MREQ&lt;/code&gt; to &lt;code&gt;/CS&lt;/code&gt; of the rom. &lt;/p&gt;&#xA;" OwnerUserId="7356" LastActivityDate="2017-12-12T15:26:44.610" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5176" PostTypeId="2" ParentId="5169" CreationDate="2017-12-12T16:22:38.547" Score="9" Body="&lt;p&gt;The difference between 360KB and 500KB is not entirely due to space between sectors.  A lot of the difference is due to clock sync bits, sector identification markers, checksum/ECC bits, etc.  Keep this in mind otherwise comparisons are meaningless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking the DEC RP03 disk pack drive as an example of an &quot;early hard disk&quot;, I took a look at the maintenance manual for the associated RP11 controller:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/dec/unibus/DEC-11-HRPCA-C-D_RP11-C_Maint_Aug74.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;RP11-C disk pack drive controller maintenance manual&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RP03 drive uses RP02P disk packs (actually the same packs as the IBM 2316), and these packs are 'hard-sectored' via a metal disc with 20 sector notches (plus 1 index notch).  Rather than having 20 small sectors, the RP03 ignores every other notch to end up with 10 sectors per track, allowing each sector to be twice as big.  These packs are spun at 2400 rpm, which works out to 40 revolutions per second, or 25 milliseconds per revolution.  Dividing by 10 sectors gives 2.5 milliseconds per sector, or 2500 microseconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Page 4-24 of the maintenance manual indicates that a continuous stream of 0 bits would be written as a 2.5 MHz signal while a continuous stream of 1 bits would be written as a 5.0 MHz signal.  This means that the 'bit clock' is 2.5 MHz, or 0.4 microseconds per bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Page 3-10 reports that each sector consists of 165 37-bit words, which is 6105 bits.  At 0.4 microseconds per bit, that's 2442 microseconds per sector.  Note that the actual data capacity of each sector is 128 36-bit words (4608 bits) so a significant fraction of the theoretical capacity is occupied by parity/checksum bits, clock sync bits and other housekeeping (1497 bits out of 6105, or 598.8 microseconds).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2500 microseconds minus 2442 microseconds leaves 58 microseconds of spacing between each sector, or 2.32% of the track (58 divided by 2500).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a very small amount of overhead compared to the 598.8 microseconds used for error checking and other overhead (24%).&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2017-12-29T15:24:28.413" LastActivityDate="2017-12-29T15:24:28.413" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5177" PostTypeId="2" ParentId="5172" CreationDate="2017-12-12T21:21:30.720" Score="6" Body="&lt;p&gt;Seems to me that the way to go would be to re-program the lookup table use by the digital to analog converter (DAC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DAC is essentially the last component in the VGA, taking 8-bit VGA colors and deciding what each of those will represent. Thus, it affects the output from essentially all other programs, even those that write directly to the hardware. The only obvious exception would be programs that themselves re-program the same lookup table--not really much you can do about that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For programs that run in text mode and/or high-resolution graphics (640x480), you only need to worry about the first 16 entries in the LUT (because they only use 16 colors, of course). In this case, you can read the current values from the LUT, invert their &lt;em&gt;order&lt;/em&gt; (swap 0 and 15, 1 and 14, etc.) and then write them back to the LUT. The first 16 colors are (at least normally) chosen so that inverting the color number approximately inverts the color itself (e.g., 0-&gt;black, 15-&gt;white, 1-&gt;blue, 14-&gt;yellow, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to a pre-existing program to do this...sorry, but I don't know of one. The code to handle this really is fairly simple though. I'd be tempted to write it and post the source code, but I wouldn't be able to test it...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.osdever.net/FreeVGA/vga/vgadac.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.osdever.net/FreeVGA/vga/vgadac.htm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Video_Graphics_Array#Color_palette&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Video_Graphics_Array#Color_palette&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="808" LastActivityDate="2017-12-12T21:21:30.720" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5178" PostTypeId="2" ParentId="5172" CreationDate="2017-12-13T02:17:56.017" Score="2" Body="&lt;p&gt;If all else fails, and you're up for (or know somebody who would be interested in) a fun low-level programming challenge, there's an interesting hack you could apply to this problem.  This will work if:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the software you want to run is traditional real-mode text-mode DOS software (i.e. doesn't use DPMI or similar), and&lt;/li&gt;&#xA;&lt;li&gt;you have a 386 or higher processor (which I believe you do in the machine you describe) and a bit of spare extended memory space.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The way it would work is to use the 386's Virtual X86 mode to map some extended memory into the space usually occupied by the text display; you would then map the original location somewhere else (probably outside of the lower 1MB address range) and run a periodic operation to copy the data from one to the other, flipping attributes while you did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This isn't an easy task, but it may be easier than expected because &lt;a href=&quot;http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/repos/pkg-html/jemm.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;there are open source 386 Expanded Memory Manager implementations available&lt;/a&gt; which already do a lot of the necessary work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, it would probably be better to solve this in just about any other way you can think of.  But this way would be &lt;em&gt;fun&lt;/em&gt;. :)&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-12-13T02:17:56.017" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5179" PostTypeId="1" AcceptedAnswerId="5181" CreationDate="2017-12-13T19:11:27.343" Score="34" ViewCount="8517" Body="&lt;p&gt;A comment on &lt;a href=&quot;https://stackoverflow.com/a/11020198/5003848&quot;&gt;this answer&lt;/a&gt; to a StackOverflow question made me curious. According the &lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf&quot; rel=&quot;noreferrer&quot;&gt;C99 standard&lt;/a&gt;, section 5.1.2.2.1:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The function called at program startup is named &lt;code&gt;main&lt;/code&gt;. The implementation declares no prototype for this function. It shall be defined with a return type of &lt;code&gt;int&lt;/code&gt; and with no parameters:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;int main(void) { /*...*/ }&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;or with two parameters (referred to here as &lt;code&gt;argc&lt;/code&gt; and &lt;code&gt;argv&lt;/code&gt;,though any names may be used, as they are local to the function in which they are declared):&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;int main(int argc, char *argv[]) { /*...*/ }&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;or equivalent; or in some other implementation-defined manner.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This was the case in &lt;a href=&quot;https://web.archive.org/web/20161223125339/http://flash-gordon.me.uk:80/ansi.c.txt&quot; rel=&quot;noreferrer&quot;&gt;ANSI C&lt;/a&gt; as well, it seems; I'm unaware of any earlier standards besides K&amp;amp;R.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second signature, with two parameters, has always included &lt;code&gt;argc&lt;/code&gt;, the number of arguments in &lt;code&gt;argv&lt;/code&gt;. Given that &lt;code&gt;argv&lt;/code&gt; is a NULL-terminated list, however, it's trivial to calculate this number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Historically, is there a reason for including &lt;code&gt;argc&lt;/code&gt; as a parameter of &lt;code&gt;main&lt;/code&gt;? Was it a feature of earlier languages such as B? Was it to save computation (at the cost of potentially using a bit more memory)? Was it just a programmer convenience?&lt;/p&gt;&#xA;" OwnerUserId="724" LastEditorUserId="6659" LastEditDate="2017-12-14T08:12:36.773" LastActivityDate="2020-12-15T06:04:34.170" Title="Why (historically) include the number of arguments (argc) as a parameter of main?" Tags="&lt;history&gt;&lt;programming&gt;&lt;c&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5180" PostTypeId="2" ParentId="5179" CreationDate="2017-12-13T19:30:06.343" Score="35" Body="&lt;p&gt;The requirement that &lt;code&gt;argv[argc]&lt;/code&gt; be &lt;code&gt;NULL&lt;/code&gt; was added in the ANSI C standard; it wasn’t a requirement before then, and some environments  didn’t null-terminate the array (the strings themselves were of course null-terminated). In fact, in Unix V4, &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V4-Snapshot-Development/man/man2/exec.2#L154&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;argv[argc]&lt;/code&gt; was documented as being -1 and not 0&lt;/a&gt;. Thus before ANSI C, &lt;code&gt;argc&lt;/code&gt; &lt;em&gt;was&lt;/em&gt; necessary, and it was kept thereafter for backwards compatibility.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-12-15T06:04:34.170" LastActivityDate="2020-12-15T06:04:34.170" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="5181" PostTypeId="2" ParentId="5179" CreationDate="2017-12-13T19:47:11.337" Score="44" Body="&lt;p&gt;K&amp;amp;R first edition (1978) does not mention the &lt;code&gt;NULL&lt;/code&gt; terminator in the &lt;code&gt;argv&lt;/code&gt; list at all. This was added later, in ANSI C. The relevant paragraph (section 5.11, p. 110) is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In environments that support C, there is a way to pass command-line arguments or parameters to a program when it begins executing. When &lt;code&gt;main&lt;/code&gt; is called to begin execution, it is called with two arguments. The first (conventionally called &lt;code&gt;argc&lt;/code&gt;) is the number of command-line arguments the program was invoked with; the second (&lt;code&gt;argv&lt;/code&gt;) is a pointer to an array of character strings that contain the arguments, one per string. Manipulating these character strings is a common use of multiple levels of pointers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Of course, when the terminating &lt;code&gt;NULL&lt;/code&gt; was added to the standard, there was no possibility of changing the number of arguments passed to &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2017-12-13T19:47:11.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5182" PostTypeId="2" ParentId="5179" CreationDate="2017-12-13T20:40:08.660" Score="13" Body="&lt;p&gt;Originally the &lt;code&gt;argv[argc]&lt;/code&gt; element did &lt;strong&gt;not&lt;/strong&gt; exist in Unix / K&amp;amp;R C.&lt;/p&gt;&#xA;&lt;p&gt;Adding a &lt;code&gt;NULL&lt;/code&gt; pointer is a later feature added against 'lazy' programming. This still doesn't make it a 'NULL-terminated' List, as there is no guarantee that the list doesn't already contain a NULL pointer due whatever previous processing.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;code&gt;argv&lt;/code&gt; is by definition an array (vector in BCPL notation) of string pointers with &lt;code&gt;argc&lt;/code&gt; elements thus only indices of 0..[argc-1] are valid. K&amp;amp;R's original &lt;em&gt;The C Programming Language&lt;/em&gt; from 1978 includes only examples (chapter 5.11) where &lt;code&gt;argc&lt;/code&gt; is used to determinate boundries.&lt;/p&gt;&#xA;&lt;p&gt;The same is true for all examples in 1988's second edition of &lt;em&gt;The C Programming Language&lt;/em&gt;. No usage of &lt;code&gt;argv[argc]&lt;/code&gt;. But now a new half sentence is added on page 115: &lt;em&gt;'...additionally, the standard requires that argv[argc] be a null pointer.'&lt;/em&gt; followed by an ilustration of an example vector. The 'standard' referenced here is the proposed ANSI standard which was basicly finished, but not published until 1989 (C89).&lt;/p&gt;&#xA;&lt;p&gt;Before that, the X/Open group (holder of the Unix trademark back then) tried to define what Unix or better a unixoid environment should be by creating several standard books called XPG (X/Open Portability Guide). XPG2 from 1987 (?) defines among others the C programming language interface including the C-lib which in turn prepares  argc/v when calling &lt;code&gt;main()&lt;/code&gt;. Here a new, last &lt;code&gt;NULL&lt;/code&gt; element for main's &lt;code&gt;argv&lt;/code&gt; was included.&lt;/p&gt;&#xA;&lt;p&gt;The X/Open definitions are the most important source that went into C89. So it may be safe to see this as a point where it 'officially' entered C. Now which of the Unix(oide) systems did bring it into XPG2 is not fully known to me. AFAIK it is based on an implementation for some BULL system of the early 80s.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.S.: And while it may be 'easy' to calculate the number of arguments by runing along the list until the first NULL is encountered, this is neither secure, nor free, but costs processing time. So why should a (user) program spend many cycles to calculate that number, when the calling program (OS/C-Lib) has already done the job while preparing the list? Remember, once upon a time programming was sensible and about performance :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-14T22:25:46.377" LastActivityDate="2020-12-14T22:25:46.377" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="5183" PostTypeId="1" CreationDate="2017-12-14T02:32:04.757" Score="9" ViewCount="247" Body="&lt;p&gt;The information on modifications on the PC Enterprises website was never saved by the web archive, so looking there is out.&#xA;I remember in their printed catalogs they sold a mod kit for making the PCjr audio Tandy 1000 compatible, but I didn't buy it for my two PCjr's.&#xA;I found the info elsewhere for the Tandy 1000 video mod and scrounged the chips from dead PC parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the Tandy 1000 games I tried would work with 16 color video and PC Speaker sound - except for one that didn't allow selecting video and audio separately. So it wouldn't run in 16 colors because it couldn't detect Tandy audio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Attempting to select Tandy audio on any of the other games would also fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've searched off and on for years looking for how to do the Tandy 1000 audio mod but have never found the information.&lt;/p&gt;&#xA;" OwnerUserId="4888" LastActivityDate="2017-12-14T06:22:35.673" Title="How to do the Tandy 1000 audio mod on a PCjr?" Tags="&lt;ibm-pcjr&gt;&lt;tandy-1000&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5184" PostTypeId="1" AcceptedAnswerId="5186" CreationDate="2017-12-14T04:07:15.023" Score="19" ViewCount="2407" Body="&lt;p&gt;Practically speaking, if I buy an ISA VGA card, will it implicitly support CGA and EGA games?&lt;/p&gt;&#xA;" OwnerUserId="7316" LastEditorUserId="11916" LastEditDate="2020-02-16T14:16:44.907" LastActivityDate="2020-02-16T14:16:44.907" Title="Do all VGA cards implicitly support CGA and EGA?" Tags="&lt;video&gt;&lt;vga&gt;&lt;compatibility&gt;&lt;cga&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5185" PostTypeId="2" ParentId="5179" CreationDate="2017-12-14T04:49:14.983" Score="3" Body="&lt;p&gt;Looking back in the context of recent ideas in programming languages, we can now reason it in more than one ways. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(1) &lt;em&gt;Precondition Validation and ease of use:&lt;/em&gt; Even if it's a NULL terminated list, just to know how many arguments are passed in, one has to go through the entire list to count the number, and every program that uses command line parameters needs to do that to work correctly. Before proceeding with checking the validity of the arguments passed in, and then with their eventual use, the program needs a precondition that terminates the program perhaps with a 'usage help' statement if the number of arguments sent in does not match with the number of arguments expected. So a 'ready-made' argc is quite handy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2) Consistent Style: Secondly, arrays are raw in C, and the program cannot find out the size of an array given the array pointer variable unless some sort of termination is encoded as a special value held inside the array. Such a special value may not always be possible if one wants to use the entire range of the type of the values being held in the array. The use of argc is consistent with this primitive choice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(3) &lt;em&gt;Arrays are not self-aware:&lt;/em&gt; Languages that treat arrays as objects that know their own cardinalities do not need argc.  So, only they could drop the parameter altogether. This is not the case with C.&lt;/p&gt;&#xA;" OwnerUserId="7368" LastEditorUserId="276" LastEditDate="2017-12-14T08:44:44.187" LastActivityDate="2017-12-14T08:44:44.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5186" PostTypeId="2" ParentId="5184" CreationDate="2017-12-14T05:44:26.240" Score="20" Body="&lt;p&gt;All VGAs support the “official” CGA and EGA modes, so most CGA and EGA games work fine. However, compatibility can only be relied upon at the BIOS level; a VGA can be implemented without strict hardware compatibility with the older standards. This affects some CGA games in particular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a CGA test tool &lt;a href=&quot;http://www.oldskool.org/pc/cgacomp&quot; rel=&quot;noreferrer&quot;&gt;available&lt;/a&gt;. It was written following &lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?13722-True-CGA-vs-VGA-card-in-CGA-mode&quot; rel=&quot;noreferrer&quot;&gt;this discussion about CGA compatibility&lt;/a&gt;. &lt;a href=&quot;http://www.vogons.org/viewtopic.php?t=28983&quot; rel=&quot;noreferrer&quot;&gt;This other discussion&lt;/a&gt; summarises test results on a variety of VGAs; basically, older Trident, Paradise and ATI boards provide good CGA compatibility (some with the help of an additional TSR or configuration tool), Tseng boards not so much. Trident’s TSR can cause timing issues with some games; Paradise and ATI boards switch to a hardware-supported CGA compatible mode instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that these considerations vary to some extent depending on the system you want to use the VGA in: CGA compatibility is only really important in older machines (8088/8086 or 286s), because many of the CGA-specific games which cause issues on EGA or VGA won’t run well on faster machines anyway. An extreme example of this is the &lt;a href=&quot;https://scalibq.wordpress.com/2015/08/02/8088-mph-the-final-version/&quot; rel=&quot;noreferrer&quot;&gt;8088 MPH demo&lt;/a&gt;, mentioned by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/75/traal&quot;&gt;traal&lt;/a&gt; (and whose authors include the developer of the CGA test tool mentioned above), which uses cycle-counting at all levels (instruction execution, memory timing, and even NTSC output) to achieve its effects — as a result, it only works correctly on an IBM 5150 with CGA and a composite monitor, or computers which are cycle-exact compatibles.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2017-12-14T13:32:37.887" LastActivityDate="2017-12-14T13:32:37.887" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5187" PostTypeId="2" ParentId="5184" CreationDate="2017-12-14T05:45:29.717" Score="6" Body="&lt;p&gt;Yes, most EGA and CGA games work just fine with a VGA card. VGA isn't 100% backwards compatible with EGA and CGA but in practice I don't think many games tried to get too fancy with these older cards. Gaming on IBM PC compatibles didn't really become a thing until VGA became standard on PCs, before that most IBM PC games were ports from other platforms. A bigger problem with compatibility is CPU speed, a lot of older CGA and EGA games have a fairly narrow range of CPU speeds they work well with. &lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2017-12-14T05:45:29.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5188" PostTypeId="2" ParentId="5183" CreationDate="2017-12-14T06:22:35.673" Score="5" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.brutman.com/forums/viewtopic.php?f=1&amp;amp;t=98&quot; rel=&quot;noreferrer&quot;&gt;this post on Mike’s PCjr forum&lt;/a&gt;, the audio mod should only require connecting pins 5 and 9 (and perhaps 2) on the MC15429. &lt;em&gt;However&lt;/em&gt; even that’s apparently not necessary: &lt;a href=&quot;http://www.brutman.com/forums/viewtopic.php?f=6&amp;amp;t=99&quot; rel=&quot;noreferrer&quot;&gt;this other post&lt;/a&gt; has a small program which switches audio to Tandy mode and back.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-12-14T06:22:35.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5189" PostTypeId="2" ParentId="2112" CreationDate="2017-12-14T20:03:43.640" Score="0" Body="&lt;p&gt;Get yourself three AA or AAA NiMH ready-to-use rechargeable batteries, a triple clip and fit the clip where nothing can ever get damaged. The NiMH get you the exact same voltage as the original battery but an insanely long buffering period (&gt;a year with 3x AAAs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I put the clip outside on the back, so I can take them out and speed charge them - Miggy doesn't run as much any more as she used to...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Losing the SCSI settings doesn't hurt by the way unless you changed the host ID or your HDD requires a very long spin-up wait (replace that one with a decent HDD while you're at it).&lt;/p&gt;&#xA;" OwnerUserId="5200" LastActivityDate="2017-12-14T20:03:43.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5190" PostTypeId="2" ParentId="171" CreationDate="2017-12-15T00:33:49.310" Score="2" Body="&lt;p&gt;The HDI45 connector for video is essential (it is nearly impossible to tack-wire&#xA;to the main circuit board).&#xA;Buy a video connector adapter.   They're still for sale &lt;a href=&quot;https://www.pimfg.com/product-detail/191-00&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pi mfg. for example&lt;/a&gt;&#xA;and probably there's a surplus supplier that can get you used ones.&#xA;An important part of those adapters is the mode switch(es): you have&#xA;to experiment to find a monitor mode that your Macintosh boot&#xA;code recognizes and drives, which is accepted by the modern screen. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A used ADB mouse is easier to find than any&#xA;adapters (to other, equally obsolete mice and keyboards).   Some&#xA;efforts are underway to serve USB&#xA;items to ADB ports &lt;a href=&quot;http://www.astrospark.com/adbbusboy/&quot; rel=&quot;nofollow noreferrer&quot;&gt;coming Real Soon Now&lt;/a&gt;.   Finding&#xA;an old keyboard/mouse in a friend's closet is your best prospect.&#xA;My closets are well-stocked in that regard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mac OS 7.5.3 is suitable for this model; 8.1 is better, 8.6 is possible.&#xA;It can boot from internal (or external) SCSI disks, including CDROM.   It may be important to learn SCSI address and termination rules... the&#xA;main logic board is SCSI ID=7, usually internal HD is ID=0.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2017-12-15T00:33:49.310" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5191" PostTypeId="2" ParentId="5184" CreationDate="2017-12-15T16:01:10.103" Score="9" Body="&lt;p&gt;The other answers are good, but one specific area where VGA cards are generally &lt;em&gt;incompatible&lt;/em&gt; with CGA is with respect to CGA's &lt;em&gt;Composite&lt;/em&gt; mode. In &lt;a href=&quot;https://www.youtube.com/watch?v=niKblgZupOc&quot; rel=&quot;noreferrer&quot;&gt;the video &quot;CGA Graphics - Not as bad as you thought!&quot;&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/channel/UC8uT9cgJorJPWu7ITLGo9Ww&quot; rel=&quot;noreferrer&quot;&gt;The 8-Bit Guy&lt;/a&gt; demonstrates the CGA Composite mode and explains that, after about 1987 or so, new software written specifically for CGA Composite Mode became uncommon because later cards did not support it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be clear, Composite Mode (as opposed to the RGBI mode that most people are familar with) only affects what colors are &lt;em&gt;seen&lt;/em&gt; on the screen, it does not affect whether a picture can be made to show up &lt;em&gt;at all&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no relationship with The 8-Bit Guy.&lt;/p&gt;&#xA;" OwnerUserId="3423" LastEditorUserId="3423" LastEditDate="2017-12-15T17:29:01.690" LastActivityDate="2017-12-15T17:29:01.690" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5192" PostTypeId="2" ParentId="5172" CreationDate="2017-12-16T02:59:21.880" Score="8" Body="&lt;p&gt;You can invert the screen on a monochrome Omnibook by holding the &lt;kbd&gt;Fn&lt;/kbd&gt; key and pressing either of the contrast up/down buttons next to the screen.&lt;/p&gt;&#xA;" OwnerUserId="4459" LastEditorUserId="79" LastEditDate="2017-12-17T21:53:26.130" LastActivityDate="2017-12-17T21:53:26.130" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5193" PostTypeId="1" AcceptedAnswerId="5195" CreationDate="2017-12-16T05:01:39.517" Score="7" ViewCount="1737" Body="&lt;p&gt;Is it possible to customize the keyboard layout in DOS? I use a custom keyboard layout on modern computers and I am wondering if I can do the same on old.&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2017-12-16T09:22:30.640" Title="Custom keyboard layout in DOS?" Tags="&lt;ms-dos&gt;&lt;keyboards&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5194" PostTypeId="2" ParentId="5193" CreationDate="2017-12-16T06:14:40.360" Score="7" Body="&lt;p&gt;There is a utility called &lt;a href=&quot;http://ftp.labs.hp.com/ftp/pub/micro/pc/simtelnet/msdos/keyboard/keymap00.zip&quot; rel=&quot;noreferrer&quot;&gt;KEYMAP.SYS&lt;/a&gt; which will do this.  It allows keys to be replaced at the scan-code level.  From the documentation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        KEYMAP.SYS v0.0 - A Keyboard Key Mapper&#xA;&#xA;KEYMAP.SYS allows you to change the layout of your keyboard.  Your changes&#xA;may be as simple as the swapping of the Ctrl and Caps Lock keys, or you can&#xA;set up a completely new layout (like the Dvorak layout).  You may create up&#xA;to ten layouts, and switch among them at will.&#xA;&#xA;As provided, the software defines two layouts.  The default is the Sholes&#xA;layout, also known as the QWERTY layout.  This is a standard layout, with&#xA;no keys moved.  The second provided layout is the Dvorak layout.&#xA;&#xA;         SHOLES              DVORAK&#xA;&#xA;    1 2 3 4 5 6 7 8 9 0 - =     1 2 3 4 5 6 7 8 9 0 = [&#xA;     Q W E R T Y U I O P [ ]     ' , . P Y F G C R L / ]&#xA;      A S D F G H J K L ; '       A O E U I D H T N S -&#xA;       Z X C V B N M , . /         ; Q J K X B M W V Z&#xA;&#xA;To switch between layouts, hold down the Control, Alt, and Left Shift keys,&#xA;then press a function key.  F1 selects the default layout (Sholes).  As&#xA;provided, F2 selects the Dvorak layout.  You can install up to ten different&#xA;layouts, enabled by F1 through F10.  &#xA;&#xA;To install a new layout, you will need a text editor and an assembler.  The&#xA;software is written for use with Borland's Turbo Assembler.  To assemble it&#xA;with a different assembler, you will probably have to edit the source code.&#xA;&#xA;This software works by hooking INT 15h, function 4Fh.  This function is&#xA;provided to allow keys to be remapped, but may not be present on machines&#xA;with very old BIOS ROMs.  Some software packages (notably games) take over&#xA;the keyboard interrupt, disabling KEYMAP.SYS.  While using such software,&#xA;the keyboard will return to its standard layout.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-12-16T06:14:40.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5195" PostTypeId="2" ParentId="5193" CreationDate="2017-12-16T09:22:30.640" Score="7" Body="&lt;p&gt;&lt;a href=&quot;http://www.freedos.org/download/&quot; rel=&quot;noreferrer&quot;&gt;FreeDOS&lt;/a&gt; includes a keyboard driver which has the ability to use individual keymap files, without needing any re-assembly or re-compilation (of programs at least). If you download the full USB installer from the linked page, and extract its contents, you’ll find:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Base/Keyb&lt;/code&gt; which contains the keyboard driver itself&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Base/Kpdos&lt;/code&gt; which contains sample keyboard layouts&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Base/KC&lt;/code&gt; which contains the keyboard layout compiler, with lots of documentation&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You should be able to write a &lt;code&gt;.KEY&lt;/code&gt; keyboard layout description for your custom layout, then compile it to a &lt;code&gt;.KL&lt;/code&gt; file using &lt;code&gt;KC&lt;/code&gt;, and finally load that with the &lt;code&gt;KEYB&lt;/code&gt; keyboard driver. The keyboard driver isn’t just for FreeDOS, it can be used with other DOS versions too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(You can also download the &lt;a href=&quot;http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/repos/pkg-html/keyb.html&quot; rel=&quot;noreferrer&quot;&gt;driver&lt;/a&gt; and &lt;a href=&quot;http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/repos/pkg-html/keyb_lay.html&quot; rel=&quot;noreferrer&quot;&gt;layouts&lt;/a&gt; separately, but I haven’t found a separate download for the compiler.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-12-16T09:22:30.640" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5196" PostTypeId="1" AcceptedAnswerId="5197" CreationDate="2017-12-16T13:02:39.187" Score="3" ViewCount="190" Body="&lt;p&gt;The ST-506 was an early personal computer hard disk, introduced in 1980 with a capacity of 5 megabytes and a price of $1500.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While several sources confirm the price, I haven't been able to find whether it was wholesale or retail. The difference matters; a wholesale price of $1500 typically translated to a retail price of about $4500.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The one piece of information I have been able to find is &lt;a href=&quot;https://www.gizbot.com/computer/features/things-that-you-should-know-about-hard-drives-044120.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.gizbot.com/computer/features/things-that-you-should-know-about-hard-drives-044120.html&lt;/a&gt; &quot;A 5 MB hard disk drive from Apple cost $3,500 in 1981.&quot; That would be consistent with $1500 being the wholesale price in 1980 (and some decrease in the course of a year). Is that correct?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-12-16T14:30:56.930" Title="ST-506 price: wholesale or retail?" Tags="&lt;history&gt;&lt;hard-disk&gt;&lt;market&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5197" PostTypeId="2" ParentId="5196" CreationDate="2017-12-16T14:04:46.653" Score="7" Body="&lt;p&gt;Nop. 1500 USD was resale for the drive. Just for the drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But noone - at least noone with a tie - bought just a drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mentioned Apple 'drive' was a Apple Profile, a complete setup including disk, controller and power supply in a case plus cabeling and a interface card. Not to mention the software (inside and drivers for SOS/DOS). All at a retail price of 3,500 USD when introduced (for the Apple III). Here are some nice &lt;a href=&quot;http://www.hardwaresecrets.com/inside-the-apple-iii/5/&quot; rel=&quot;noreferrer&quot;&gt;pictures of the components&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, considering usual Apple price tags, this was rather afordable. I just flipped an old Byte (8/81) and other upgrades where similar priced. For example 5 MB with interface kit to be build into a Superbrain was around 3k at discount stores.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-12-16T14:30:56.930" LastActivityDate="2017-12-16T14:30:56.930" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5198" PostTypeId="1" AcceptedAnswerId="5199" CreationDate="2017-12-16T18:48:23.657" Score="7" ViewCount="341" Body="&lt;p&gt;As my Osborne 1 ages, various of my disks have had to be retired with errors, and I'm concerned it may not survive much longer so am looking for ways to extend its life.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any communities who maintain software or are there alternatives to the 5 1/4&quot; floppies used to boot the Osborne or run software?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RdbaI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RdbaI.jpg&quot; alt=&quot;Osborne 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;pic from &lt;a href=&quot;https://www.inexhibit.com/case-studies/osborne-1-1981-when-the-personal-computer-became-portable/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.inexhibit.com/case-studies/osborne-1-1981-when-the-personal-computer-became-portable/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2010" LastEditorUserId="276" LastEditDate="2017-12-19T15:46:37.743" LastActivityDate="2017-12-19T15:46:37.743" Title="Are there any communities who maintain software for the Osborne 1?" Tags="&lt;maintenance&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5199" PostTypeId="2" ParentId="5198" CreationDate="2017-12-16T18:58:26.613" Score="5" Body="&lt;p&gt;As the Osborne is a pretty standard CP/M machine, any CP/M software will do, so look out for CP/M users (/groups) - there are plenty. In Europe especially, since the Amstrad CPC series gave CP/M a late boost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just keep working copies of the OS to boot. Disks can still be bought new and properly stored drives will surely work for a few more decades. Also, with its serial interface, everything needed to transfer new Software onto (new) disks is on board. I'd be more worried about the built-in screen or plastic parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to replace the drives, there are several designs, kits or ready to use flash-to-Shugart replacements available. Some are quite luxurious systems like &lt;a href=&quot;https://www.elektormagazine.de/news/floppy-drive-emulator-fur-alte-computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Floppyflash&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-12-18T11:51:14.617" LastActivityDate="2017-12-18T11:51:14.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5200" PostTypeId="1" CreationDate="2017-12-16T22:17:27.657" Score="7" ViewCount="285" Body="&lt;p&gt;I am trying to understand the Amiga schematics:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question 1:&#xA;What is the necessity of the Signal BLS (Blitter SLow) generated by A2000A U26 or Gary in the A2000B?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question 2:&#xA;BLS is also set by access $C0-DFFFFF. (SlowRAM, RTC and ChipRegister) Is there an Interaction with the Blitter too? &lt;/p&gt;&#xA;" OwnerUserId="7362" LastEditorUserId="6659" LastEditDate="2017-12-17T23:15:32.080" LastActivityDate="2017-12-17T23:48:44.770" Title="What is the necessity of the Signal BLS (Blitter SLow)" Tags="&lt;amiga&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5201" PostTypeId="2" ParentId="5200" CreationDate="2017-12-16T22:29:28.967" Score="5" Body="&lt;p&gt;It's &lt;em&gt;BLitter Slow&lt;strong&gt;down&lt;/em&gt;&lt;/strong&gt; and an input signal to Agnus, telling the DMA logic to free a cycle for the CPU if possible - a situation which normaly arises during Blitter operations, thus the name.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;em&gt;Amiga System Programmers Guide&lt;/em&gt; (English language version of &lt;em&gt;Data Becker's Amiga Intern&lt;/em&gt;) p.29:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The BLS signal (BLitter Slow down) signals Agnus that the processor has already waited three bus cycles for an access. Depending on its internal state, Agnus turns the bus over to the processor for one cycle.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(AFAIR there was somewhere a configuration bit for Agnus, called &lt;em&gt;'Blitter Nasty'&lt;/em&gt; which, when set tells the DMA to ignore BLS. So it's not always working :)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;And yes, there is a good and quite simple reason for BLS being active for access to the so called 'Slow-RAM' (or Ranger-Memory): It's managed by Agnus and thus technicaly Chip-RAM. So while the ECS/Fat-Agnus could handle more memory (addressing &amp;amp; refresh), the video related registers didn't get extended, thus the additional memory could not be used the same way as the original Chip-RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next question could be why at all, and as usual with Commodore it's all about money, even after Tramiels demise. Adding the ability to address and refresh more memory as a partitial redesign of the Agnus enabled the production of dirt cheap memory expansions for the A500. No need to add refresh logic, complex address decoding or whatsoever, just nail the RAMs onto the bus and sell them fast and in masses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why at that location? Well, for one, they didn't want to give up the chance to use the full 2 MiB range reserved for Chip-RAM (up to 1FFFFF), but more important, that area was already decoded by the Agnus anyway. So C00000ff it was. This is also the reason why there are memory expansions for the A500 with up to almost 2 MiB (~1,75 or so) Ranger Memory possible (with a little Garry hack). They utilize the whole C/Dxxxxx range except the registers. Still ofc with the Chip-RAM brakes set.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-12-17T23:48:44.770" LastActivityDate="2017-12-17T23:48:44.770" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5202" PostTypeId="1" AcceptedAnswerId="5206" CreationDate="2017-12-17T00:44:28.440" Score="12" ViewCount="4053" Body="&lt;p&gt;I have a modern Linux computer and a 286 computer running DOS. I would like to transfer files from the Linux computer to the DOS computer over a null modem serial cable. I know you can use &lt;code&gt;INTERLINK.EXE&lt;/code&gt;/&lt;code&gt;INTERSVR.EXE&lt;/code&gt; for DOS-to-DOS, but what about Linux-to-DOS (or Linux-to-FreeDOS)?&lt;/p&gt;&#xA;" OwnerUserId="7316" LastEditorUserId="15334" LastEditDate="2020-11-25T08:40:45.210" LastActivityDate="2020-11-25T08:40:45.210" Title="Transfer files to DOS over serial cable from Linux?" Tags="&lt;ms-dos&gt;&lt;serial&gt;&lt;data-transfer&gt;" AnswerCount="7" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="5203" PostTypeId="2" ParentId="5202" CreationDate="2017-12-17T01:04:15.570" Score="6" Body="&lt;p&gt;Is it text? In that case just pipe it from COMx into a file. Otherwise get some simple terminal program like @RossRidge already suggested. Or maybe Kermit. Kermit is a great start if you really want to start from scratch on the PC side since you may really bootstrap with a few lines of code. Or use BASIC to write your own receiving program :) Might be a real fun task.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7384" LastEditDate="2017-12-17T13:54:13.383" LastActivityDate="2017-12-17T13:54:13.383" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5204" PostTypeId="1" AcceptedAnswerId="5205" CreationDate="2017-12-17T03:22:21.973" Score="24" ViewCount="2699" Body="&lt;p&gt;In my childhood I had one of these:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Electronika_BK&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Electronika_BK&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, that the CPU of this is based on &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-11#LSI-11&quot; rel=&quot;noreferrer&quot;&gt;LSI-11&lt;/a&gt;. This is rather surprising because PDP-11 took a room (I was lucky enough to be able to tinker with it at parent's work) but BK was a home computer / microcomputer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was fascinated by what I used to call &quot;DEC architecture&quot;, mostly meaning the set of assembly command, registers, memory addressing, etc and I liked that they are the same at parent's work and on my small home PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, were there any microcomputers with similar processors (for the mass market) outside of Soviet Union? It does not have to be the same processor, but it should feature similar command set / registers / etc. Presumably it should be either by DEC or based on their design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most popular ones, like commodore, amiga, zx spectrum are all have very little to do with DEC and their processors.&lt;/p&gt;&#xA;" OwnerUserId="3835" LastEditorUserId="6659" LastEditDate="2019-12-21T11:46:42.777" LastActivityDate="2019-12-21T14:02:51.167" Title="Were there any LSI-11 like home computers outside of Russia?" Tags="&lt;hardware&gt;&lt;pdp-11&gt;&lt;dec&gt;&lt;ussr&gt;&lt;electronika-bk&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5205" PostTypeId="2" ParentId="5204" CreationDate="2017-12-17T03:54:40.560" Score="18" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Heathkit_H11&quot; rel=&quot;nofollow noreferrer&quot;&gt;Heathkit H11&lt;/a&gt; was available either as a kit or pre-assembled. It never became really popular in the West, but it was one of the most powerful PCs available in 1978. It used the LSI-11 small format of the PDP-11, and came with 4 kwords of memory for $1295.  (That is 8 kbytes, but DEC preferred to refer to memory as register size, which was 16 bits.) It could be expanded to 32 kwords. IIRC, the LSI-11 CPU could actually handle up to 128 kwords (using bank swapping and/or memory-tunnel registers), but any memory above 32 kwords would have to be off the motherboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I agree with Andrew that the PDP architecture was fascinating and conceptually easy to understand. I used and programmed one at work for many years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;----- added a day after initial answer -----&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I apologize to Alex Hajnal and others for using my own terminology, &quot;&lt;em&gt;memory tunnel registers&lt;/em&gt;&quot;. I was getting tired and chose not to look up the details on something that had very little to do with the question. The PDP-11 family offers several ways to access memory beyond 64 kbytes. One is the traditional memory mapping sort of deal where pages of memory can be mapped into and out of the accessible 64 kbytes. I was not referring to that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Q-Bus (used by LSI-11) offered 18 bits of physical address space, spanning 256 kbytes total. (Although Ken Gober indicates that on Heath's H11, the upper 2 bits of addressing were not wired, which would limit that machine to just 64 kbytes. I'm speaking of a fully addressed machine now.) With a linear mapping, the full memory space could still be accessed via 2 bits of the Processor Status register (PS), which provided address bits 16 and 17.  Four instructions existed to access the full memory space.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;MTPI&lt;/strong&gt; -- move to previous instruction space&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MTPD&lt;/strong&gt; -- move to previous data space&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MFPD&lt;/strong&gt; -- move from previous data space&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MFPI&lt;/strong&gt; -- move from previous instruction space&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What these instructions would do is push or pop a 16-bit word, accessing full physical memory via R6, the stack pointer (SP).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't remember all the details, just that you get access any memory location directly without using memory management.  Since it was one word at a time, the phrase I came up with was &quot;memory tunnel registers&quot;.  I guess the terminology almost fits, because the action does use both the SP and 2 bits of the PS.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2019-12-21T14:02:51.167" LastActivityDate="2019-12-21T14:02:51.167" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="5206" PostTypeId="2" ParentId="5202" CreationDate="2017-12-17T04:28:18.023" Score="11" Body="&lt;p&gt;Some sort of comms program that supports Zmodem on the 286 end and use &quot;sz&quot; to send from the unix end. Zmodem has some advantages in that usually the receiving computer will auto start reception of a file when it sees a Zmodem start sequence (there's a random number handshake to stop spoofing)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for recommending Zmodem is means you don't need to start the receiving process on the other computer (so no need to flip between keyboards).&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2017-12-18T12:49:22.863" LastActivityDate="2017-12-18T12:49:22.863" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5207" PostTypeId="1" AcceptedAnswerId="5213" CreationDate="2017-12-17T06:27:08.777" Score="2" ViewCount="689" Body="&lt;p&gt;Back in the day, workstations used to get impressively big. Take a look at &lt;a href=&quot;https://www.cnet.com/products/hp-alphaserver-ds20e-alpha-21264-833-mhz-1-gb-0-gb/specs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; — sure, a modern laptop has more computing power, but you don't see personal computers weighing eighty pounds these days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interested in power consumption and heat dissipation (sadly not listed for the above machine). In particular, did any workstation ever go over a kilowatt of thermal design power? For this purpose, I'm classifying a computer as a workstation if it's quiet enough that you'd want it under your desk, and a server if it's noisy enough that you'd want it in a separate room. So another way of phrasing the question is, did anyone ever manage to dissipate more than a kilowatt with air cooling through a tower form factor, and still keep it quiet?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="276" LastEditDate="2017-12-20T16:04:55.023" LastActivityDate="2017-12-20T16:04:55.023" Title="Was there ever a kilowatt workstation?" Tags="&lt;power&gt;&lt;workstation&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5208" PostTypeId="2" ParentId="5202" CreationDate="2017-12-17T07:44:58.227" Score="10" Body="&lt;p&gt;You can also use &lt;code&gt;dosbox&lt;/code&gt; or &lt;code&gt;dosemu&lt;/code&gt; to run a simulated DOS environment, give it access to whatever &lt;code&gt;ttyS*&lt;/code&gt; or &lt;code&gt;ttyUSB*&lt;/code&gt; you have, and then use the DOS-to-DOS transfer methods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally, I prefer &lt;a href=&quot;https://winworldpc.com/product/laplink/3x&quot; rel=&quot;noreferrer&quot;&gt;Laplink&lt;/a&gt;, which offers a convenient Norton-Commander like interface for file transfer. It can also bootstrap via the &lt;code&gt;CTTY&lt;/code&gt; command on the remote computer, which is handy if you've no other way to install something on the DOS computer.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-12-17T07:44:58.227" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5209" PostTypeId="2" ParentId="5204" CreationDate="2017-12-17T08:09:05.433" Score="4" Body="&lt;p&gt;There were one-chip versions both of the PDP-8/LSI-8 (the models are called &lt;a href=&quot;https://en.wikipedia.org/wiki/DECmate&quot; rel=&quot;nofollow noreferrer&quot;&gt;DECmate&lt;/a&gt;, using the Intersil/Harris 6100 chip) and the PDP-11/LSI-11 (&lt;a href=&quot;https://en.wikipedia.org/wiki/DEC_J-11&quot; rel=&quot;nofollow noreferrer&quot;&gt;J-11 or &quot;Jaws&quot;&lt;/a&gt; chip, used in a range of PDP-11 models). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, these were hardly &quot;home computers&quot; due to their price point. They would be typically be bought by labs or research institutions, both in academia and industry, and not owned by a single person or family.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2017-12-18T11:33:31.353" LastActivityDate="2017-12-18T11:33:31.353" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5210" PostTypeId="2" ParentId="972" CreationDate="2017-12-17T10:16:43.067" Score="5" Body="&lt;p&gt;Check out this source file for the technical details of the keyboard:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/mamedev/mame/blob/master/src/devices/machine/myb3k_kbd.cpp&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/mamedev/mame/blob/master/src/devices/machine/myb3k_kbd.cpp&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The source file contains all information you need to build your own keyboard. The serial protocol that the keyboard speaks to the host computer is unfortunately not even remotely similar to standard PC keyboards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it is pretty simple, so it should be possible to hook up two gpio pins from a raspberry or an arduino. (Minding any 3v 5v differences.)&#xA;Then write a small program to relay a standard usb keybord to the JB-3000.&lt;/p&gt;&#xA;" OwnerUserId="7350" LastEditorUserId="7350" LastEditDate="2017-12-17T20:36:56.720" LastActivityDate="2017-12-17T20:36:56.720" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5211" PostTypeId="2" ParentId="5204" CreationDate="2017-12-17T11:16:14.470" Score="7" Body="&lt;p&gt;There was &lt;a href=&quot;https://en.wikipedia.org/wiki/Terak_8510/a&quot; rel=&quot;nofollow noreferrer&quot;&gt;Terak 8510/A&lt;/a&gt; - a graphic workstation with the LSI-11 compatible processor, a graphical frame buffer (hardware-scrollable the same way as in the BK-0010), and a text mode with downloadable fonts, although admittedly too expensive to be a home computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some sense BK-0010 looks like a stripped-down Terak (no text mode, less RAM, etc.), but the main feature - the scrollable frame buffer - is virtually identical.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="87" LastEditDate="2017-12-21T18:49:48.857" LastActivityDate="2017-12-21T18:49:48.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5212" PostTypeId="2" ParentId="5204" CreationDate="2017-12-17T15:30:58.510" Score="9" Body="&lt;p&gt;It's possibly a stretch, but the &lt;a href=&quot;https://en.m.wikipedia.org/wiki/General_Instrument_CP1600&quot; rel=&quot;noreferrer&quot;&gt;General Instruments CP1600&lt;/a&gt; which was in the Intellivision, though otherwise unsuccessful, was based on the PDP-11 architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Intellivision was a product of Mattel, not GI, so it's the one commercial machine that opted to use the chip rather than being the machine the chip was designed for. General Instruments designed the chip for general use and likely sought other purchasers. It was a genuine attempt to provide something patterned after the PDP-11 for micro use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With either of a couple of official accessories (only one given a wide release) the Intellivision becomes a computer, but very far from a common one.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-12-17T16:17:22.103" LastActivityDate="2017-12-17T16:17:22.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5213" PostTypeId="2" ParentId="5207" CreationDate="2017-12-17T18:45:50.773" Score="7" Body="&lt;p&gt;The SGI Onyx and related machines were made in a &quot;deskside&quot; version. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let us look at the specifications from this manual ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://techpubs.jurassic.nl/library/manuals/1000/007-1733-070/pdf/007-1733-070.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://techpubs.jurassic.nl/library/manuals/1000/007-1733-070/pdf/007-1733-070.pdf&lt;/a&gt; &quot;POWER Onyx™ and Onyx Deskside Owner’s Guide&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;8100BTU/h max Thermal dissipation for the whole system. That is 2.4kW, concurrent with the rated power for the version equipped with the &quot;Infinite Reality&quot; graphics subsystem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given these were professional use machines typically used for rendering animated video using the complex graphics hardware, it is unlikely they were not designed to run under full load for extended periods of time. It is also unlikely that the power supplies were overbuilt &quot;just because&quot;, since their rating brings the inconvenience of being beyond what a standard 120V wall socket can deliver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Noise is rated at 60dB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.ifixit.com/Teardown/SiliconGraphics+Onyx+Teardown/12546&quot; rel=&quot;noreferrer&quot;&gt;https://www.ifixit.com/Teardown/SiliconGraphics+Onyx+Teardown/12546&lt;/a&gt; .. these huge boxes were filled with mostly electronics, not air :)&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-12-17T18:45:50.773" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5214" PostTypeId="2" ParentId="5207" CreationDate="2017-12-17T19:30:07.637" Score="1" Body="&lt;p&gt;This question doesn't make sense in its actual state. 'Thermal design power' is nonsense term when taking about a computer (in fact it's even more when it's about CPUs). Computers are neither designed to do mechanical work, light rooms or alike. There is no physical computing power - the only physical output is heat and a little bit of HF radiation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So the only usefull question I to be found would be &lt;em&gt;'have there been desktopcomputers with more than 1 kW power rating'&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the answer is &lt;strong&gt;Yes&lt;/strong&gt;, quite a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Already the IMSAI PS was rated at 500 Watt primary, and it didn't take long for third party frames to offer PS with 1 kW primry and more. And primary is a key issue here. Before the advent of switching, the power supply itself was usually the most critical part. In case of above IMSAI, up to 2/3rd of the primary power was wasted to heat up the PS. Removing that substantial heat was also needed to protect the PS, not so much the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Watercooling in computers was also not introduced to keep computing chips cool, but their transformers and power electronics. For example, a SIEMENS 7.760 X4 CPU, an upper end /370ish machine of ~1980 had a watercooled power supply, but air cooled electronics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even with a switching PS, like the Apple II pionered, the PS stayed the main heat source within the case. Kensington made good money with their system saver series of add on fans. It took many years until the computing chips itself got miniaturized enough to need even a simple head spreader for the little power they transformed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2017-12-17T19:30:07.637" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5215" PostTypeId="2" ParentId="4466" CreationDate="2017-12-17T22:51:12.320" Score="5" Body="&lt;p&gt;The approach I remember liking on some terminals of that era that I liked (not sure if I noticed DEC ones doing this, or some other company's) was that there were four intensity levels (including off).  Normal text was 2/3 intensity.  Inverse text was black on a 1/3 intensity background.  Highlighted was full intensity.  Highlighted reverse was 2/3 intensity (same as normal text).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, flashing text went between 1/3 and 2/3 intensity (rather than flashing on and off); and flashing highlighted went between 2/3 and full.  I don't remember what flashing inverse text did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's too bad I've not seen modern terminal emulation software adopt such an approach, since it really worked well.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2017-12-17T22:51:12.320" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5216" PostTypeId="2" ParentId="5202" CreationDate="2017-12-18T05:38:55.450" Score="1" Body="&lt;p&gt;In addition to the suggestions above, you can run the terminal program &quot;minicom&quot; on Linux, and use a PC terminal package (e.g. ProComm), and transfer the files between the two machines using zmodem or another file exchange protocol (zmodem is very time-efficient over serial ports).&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2017-12-18T05:38:55.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5217" PostTypeId="2" ParentId="5202" CreationDate="2017-12-18T16:18:11.057" Score="1" Body="&lt;p&gt;On the 286 PC DOS side, you should be able to use &lt;a href=&quot;http://www.pcxt-micro.com/download/tlx322.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;Telix&lt;/a&gt; (&lt;a href=&quot;http://cd.textfiles.com/simtel/simtel9510/disk1/DISC1/TELIX/00_INDEX.HTM&quot; rel=&quot;nofollow noreferrer&quot;&gt;SIMTEL mirror&lt;/a&gt;), it has all the standard protocols plus a very good scripting language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SIMTEL mirror has several scripts that can be used to setup the old PC in unattended host mode, allowing to do all the transfers from the Linux side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And for reliable transfers at 115200bps, get a good &lt;a href=&quot;http://archives.thebbs.org/ra82c.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;FOSSIL&lt;/a&gt; driver.&lt;/p&gt;&#xA;" OwnerUserId="2054" LastEditorUserId="2054" LastEditDate="2017-12-18T16:24:00.470" LastActivityDate="2017-12-18T16:24:00.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5218" PostTypeId="1" AcceptedAnswerId="5221" CreationDate="2017-12-20T06:36:54.517" Score="7" ViewCount="529" Body="&lt;p&gt;I remember playing a game when I was younger, it involved two players each having their own planet with a canon and the canon had different kind of missile attacks. These missile would damage part of the planet or any nearby planet. Gravity also affected the missile path. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't seem to find the game , I dont even remember the name. It was great fun playing co-op on the same PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I played it on windows 98 (or maybe XP).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone help?&lt;/p&gt;&#xA;" OwnerUserId="7392" LastActivityDate="2017-12-20T23:15:41.690" Title="Searching for an old planet shooter game" Tags="&lt;identify-this-game&gt;&lt;windows-98&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5219" PostTypeId="5" CreationDate="2017-12-20T16:07:00.907" Score="0" Body="&lt;p&gt;Multimedia refers to the processing of more than one medium, for example audio and video feeds, simultaneously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use this tag for questions regarding the processing of multimedia files.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-12-20T16:07:00.907" LastActivityDate="2017-12-20T16:07:00.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5220" PostTypeId="4" CreationDate="2017-12-20T16:07:00.907" Score="0" Body="For questions regarding presentation of more than one medium.  e.g. sound and vision" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2017-12-20T16:07:00.907" LastActivityDate="2017-12-20T16:07:00.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5221" PostTypeId="2" ParentId="5218" CreationDate="2017-12-20T18:54:42.030" Score="3" Body="&lt;p&gt;Are you thinking of &lt;a href=&quot;http://www.mobygames.com/game/warheads&quot; rel=&quot;nofollow noreferrer&quot;&gt;Warheads&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Warheads an old gravity-based planetary shooter, in the same vein as Scorched Earth.  And according to Moby Games (linked above) it was created in 1997, so that would be right around the time of Win 98.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sHkWI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sHkWI.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="125" LastEditorUserId="125" LastEditDate="2017-12-20T19:01:51.287" LastActivityDate="2017-12-20T19:01:51.287" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5222" PostTypeId="2" ParentId="5218" CreationDate="2017-12-20T23:15:41.690" Score="3" Body="&lt;p&gt;I did a bit a research based on @arron's answer and found there's a second version to Warheads game called &lt;a href=&quot;http://www.mobygames.com/game/windows/warheads-se&quot; rel=&quot;nofollow noreferrer&quot;&gt;Warheads SE&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was the game I was looking for! :) &lt;/p&gt;&#xA;" OwnerUserId="7392" LastActivityDate="2017-12-20T23:15:41.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5224" PostTypeId="1" AcceptedAnswerId="5226" CreationDate="2017-12-21T05:33:32.343" Score="13" ViewCount="970" Body="&lt;p&gt;The SC/MP (the processor found in the &lt;a href=&quot;https://en.wikipedia.org/wiki/MK14&quot; rel=&quot;nofollow noreferrer&quot;&gt;MK14&lt;/a&gt;) had four 16-bit address registers (and one of these was also the program counter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you add something to these registers, or increment these registers, the topmost 4 bits will not change. To change those top 4 bits, your program needs to set them separately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is why were the pointer registers designed to work in this way? Did they save some gates, not expecting to see huge (for the time) 64 KiB of memory? Or was it to better support coroutines somehow? Or were they expecting users to have metadata in that part of the pointer, as the Macintosh Classic did?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-08-15T06:08:49.243" LastActivityDate="2018-08-15T11:21:15.893" Title="Why were the SC/MP pointers 12-bit (kinda)?" Tags="&lt;scmp&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="5225" PostTypeId="2" ParentId="5224" CreationDate="2017-12-21T06:52:27.323" Score="12" Body="&lt;p&gt;The SC/MP didn't &lt;em&gt;really&lt;/em&gt; have a 16-bit address bus - It rather had a 12-bit adddress bus and four additional latchable lines that could serve as the upper 4 bits of a 16-bit address bus. This is also reflected in the inner register structure and clearly pointed out in the data sheet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data sheet also mentions&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To conserve pinouts on the chip, the absolute-addressing capability of the pointer register is subdivided&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which explains they limited the external addressing capability of the chip to 4k to be able to fit the CPU in 40-pin DIP. I would expect that the limited register width saving some valuable chip space was a welcome side effect.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-12-21T07:37:00.023" LastActivityDate="2017-12-21T07:37:00.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5226" PostTypeId="2" ParentId="5224" CreationDate="2017-12-21T07:48:53.350" Score="16" Body="&lt;p&gt;The SC/MP seems to have been designed right from the start with a 12 bit address bus and 4 additional &quot;page&quot; bits. To quote from p. 1-4 of the &lt;em&gt;SC/MP Technical Description&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The SC/MP chip has a 16-bit address capability; thus, any&#xA;  one of 65,536 memory locations can be discretely specified. As shown in figure 1-4, four of the address bits are&#xA;  sent over the data bus to select-any of 16 memory &quot;pages,&quot;&#xA;  and 12 bits are sent over the address bus to specify the&#xA;  memory location within the page. ROM, PROM, and RAM&#xA;  memories may be intermixed in the address space.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So not only are the upper 4 bits not incremented, they are also sent over the data bus early in the bus cycle and need to be latched to be useful. Which means many simpler systems would have used only 12 address bits, anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paging/banking technique is nothing unusual, it was quite commonly used in many computers from minis to home computers to extend the address range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to &lt;em&gt;why&lt;/em&gt; it was done this way, one can only speculate:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Possibly the SC/MP was originally designed with a 12 bit address bus, and the additional 4 address bits are an afterthought and were put in after most of the design was already done.&lt;/li&gt;&#xA;&lt;li&gt;As the SC/MP was intended as a microcontroller, possibly the designers saw an advantage to having a banked address range for handling interrupts etc.&lt;/li&gt;&#xA;&lt;li&gt;Possibly the adder in the ALU used is only 4 bits wide, and using the full 16 bit address range would have added another microcycle to the already large number of microcycles needed for each instruction, and that was considered to expensive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I couldn't find any information about the width of the adder in the &lt;em&gt;Technical Description&lt;/em&gt;, but the &lt;code&gt;ADI&lt;/code&gt; instruction needs one more microcycle than the &lt;code&gt;ANI&lt;/code&gt;, &lt;code&gt;ORI&lt;/code&gt; and &lt;code&gt;XRI&lt;/code&gt; instructions, which is exactly what would happen if and/or/xor were 8-bit wide, but add only 4-bit wide. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To actually verify this theory, one would need to decap a chip, and reverse engineer the silicon. This has been done for other chips, e.g. the 6502, but to my knowledge not for the SC/MP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More hints that the adder is possibly only 4 bits wide: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;code&gt;DLY&lt;/code&gt; operation takes &lt;code&gt;13 + 2 * (AC + disp + 2^8 * disp)&lt;/code&gt; microcycles, which is exactly what you'd get counting down AC and another internal register, if each decrement would need 2 microcycles. Though it could be of course an 8-bit decrement in one cycle, and one cycle to check for zero, but that would be really wasteful.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Bus accesses are 2 microcycles wide, and it takes 4 bus cycles from the opcode byte read until the bus read for the operand byte. That would be necessary if 3 cycles are needed to increment the 12-bit address in the PC (and 1 cycle for something else, e.g. instruction decode). Again, there are alternatives: if 2 cycles are needed for an 8-bit add and a 4-bit add, the other 2 cycles might be needed for something else.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Z80 also uses a &lt;a href=&quot;http://www.righto.com/2013/09/the-z-80-has-4-bit-alu-heres-how-it.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;4-bit ALU&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2018-08-15T11:21:15.893" LastActivityDate="2018-08-15T11:21:15.893" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5227" PostTypeId="5" CreationDate="2017-12-21T07:54:10.000" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-12-21T07:54:10.000" LastActivityDate="2017-12-21T07:54:10.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5228" PostTypeId="4" CreationDate="2017-12-21T07:54:10.000" Score="0" Body="For discussion of the SC/MP processor from National Semiconductor." OwnerUserId="576" LastEditorUserId="576" LastEditDate="2017-12-21T08:51:01.790" LastActivityDate="2017-12-21T08:51:01.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5229" PostTypeId="1" AcceptedAnswerId="5230" CreationDate="2017-12-22T20:11:42.777" Score="4" ViewCount="276" Body="&lt;p&gt;I'm doing some bare metal programming and I'm getting a lot of information from the &lt;a href=&quot;https://archive.org/details/bitsavers_ibmpccardseferenceManualMay92_1756350&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM VGA XGA Technical Reference Manual May92&lt;/a&gt; document. The only reference I can find about this document, is this draft version from May 92.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does a final version of this document exist, perhaps with another title?&lt;/p&gt;&#xA;" OwnerUserId="7401" LastEditorUserId="278" LastEditDate="2017-12-23T09:47:50.453" LastActivityDate="2017-12-23T12:52:43.390" Title="Does a final version of the IBM VGA XGA Technical Reference Manual exist?" Tags="&lt;ibm&gt;&lt;vga&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5230" PostTypeId="2" ParentId="5229" CreationDate="2017-12-23T12:52:43.390" Score="3" Body="&lt;p&gt;Given that by 1992, even IBM had realised that the PS/2 line was a failure, and had already released the last model in the series at that point (if you even count the model 25, which was an ISA machine rather than MCA, so was really a PS/2 in name only...), I doubt there was a final version if the document was still in draft half way through 92.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Reference: see list of PS/2 models on &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Personal_System/2#Models&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-12-23T12:52:43.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5231" PostTypeId="1" AcceptedAnswerId="5234" CreationDate="2017-12-23T12:53:00.350" Score="9" ViewCount="447" Body="&lt;p&gt;I owe my career as a software developer to the Amiga.  I might have learned the basics of programming on the Apple II+ and Commodore 64 - but on my Amiga I learned skills I've applied to my whole career.  Recently I've been having great fun working my way through stacks of old floppies and finding half-finished projects, source code, graphics resources and generally weird stuff I produced almost 30 years ago!  Now I'm trying to get everything organized and I started wondering what kinds of version control systems are available for the classic 68k Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first inclination was to try and find a backport of Git, but my google searches came up empty.  I remember vaguely there was a program called RCS (I think) that acted as a revision control system.  What are people using for version control on a classic Amiga?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="2080" LastEditDate="2017-12-23T13:23:00.103" LastActivityDate="2017-12-25T15:52:32.240" Title="Version Control for AmigaOS 3.1" Tags="&lt;amiga&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5232" PostTypeId="1" CreationDate="2017-12-23T22:50:24.103" Score="1" ViewCount="490" Body="&lt;p&gt;I've begun forcing myself to learn the basics of Windows 98, since I figured that it was essential to have knowledge of computing before Windows XP and Ubuntu 12. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After successfully creating a boot disk and installing Windows 98 on my Compaq (Presario, SR1503WM) tower, I decide to attempt to install DOOM (1993), since it's one of my favorite shooters. I burn the (uncompressed) contents of my DOOM zip file to a rewritable DVD and slip it into my tower. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Upon entering &lt;code&gt;dir D:&lt;/code&gt;, I receive this output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Volume in drive is MS-RAMDRIVE&#xA;Directory of D:\&#xA;File not found&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;After trying and trying again, I slip my disc back into my Windows 10 Laptop, and there I see my doom files. So I assume this is a driver issue?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below is some extra information, which I'd been told to add. (From the Microsoft page)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Info:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my &lt;code&gt;config.sys&lt;/code&gt;, under &lt;code&gt;[CD]&lt;/code&gt;, are the following lines:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;device=himem.sys /testmem:off&#xA;device=oakcdrom.sys /D:mscd001&#xA;device=btdosm.sys&#xA;device=flashpt.sys&#xA;device=btcdrom.sys /D:mscd001&#xA;device=aspi2dos.sys&#xA;aspi8dos.sys&#xA;device=aspi4dos.sys&#xA;device=aspi8u2.sys&#xA;device=aspicd.sys /D:mscd001&#xA;files=10&#xA;buffers=10&#xA;dos=high,umb&#xA;stacks=9,256&#xA;lastdrive=z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note: All of the above .sys files are located in &lt;code&gt;C:\rmcd&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And I've added a line (&lt;code&gt;lh c:\rmcd\mscd.exe /:mscd001&lt;/code&gt;) to my &lt;code&gt;autoexec.bat&lt;/code&gt;, under &lt;code&gt;@ECHO OFF&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerDisplayName="user7403" LastEditorDisplayName="user722" LastEditDate="2017-12-25T03:08:52.717" LastActivityDate="2017-12-25T03:08:52.717" Title="Windows 98 CD-ROM driver error" Tags="&lt;windows-98&gt;&lt;driver&gt;&lt;cd-rom&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5233" PostTypeId="2" ParentId="5232" CreationDate="2017-12-23T23:01:35.067" Score="3" Body="&lt;p&gt;Check the format your CD writing software is producing; these days there are two major formats, UDF and ISO9660/Joliet.  Versions of Windows older than Windows 98 SE, however, only understands ISO9660 or Joliet so would be unable to read a UDF-formatted disc.  If your Win98 is not SE, or if your writer software is using more recent extensions to the UDF format than the version 1.02 format that Win98 understands, then this is likely to be the problem.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-12-23T23:01:35.067" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5234" PostTypeId="2" ParentId="5231" CreationDate="2017-12-24T00:06:25.930" Score="4" Body="&lt;p&gt;As far as I know, there are only two &quot;serious&quot; contestants: &lt;a href=&quot;http://aminet.net/dev/misc/cvs_amiga_bin.lha&quot; rel=&quot;noreferrer&quot;&gt;CVS&lt;/a&gt; and &lt;a href=&quot;http://aminet.net/dev/misc/subversion-1.1.4.lha&quot; rel=&quot;noreferrer&quot;&gt;Subversion&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried both, and had most success with CVS. I had stability problems with the Subversion port but it was too long ago for me to remember what they were. YMMV. The CVS port is &quot;clean&quot;, as in, does not require installing a completely separate OS and a shaky ixemul.library (yes, I'm looking at you, the Geek Gadgets environment).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My investigations into getting git ported stopped when the developers told me it relies heavily on a fully functioning &lt;code&gt;fork()&lt;/code&gt;. It may be possible to get some of it ported, but so far I've been happy with CVS for basic revision control.&lt;/p&gt;&#xA;" OwnerUserId="333" LastActivityDate="2017-12-24T00:06:25.930" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5235" PostTypeId="1" AcceptedAnswerId="5237" CreationDate="2017-12-25T03:15:45.250" Score="5" ViewCount="334" Body="&lt;p&gt;I'd like to use the XT-IDE Universal BIOS with an IBM XT 286 (5162), but it's &lt;a href=&quot;http://minuszerodegrees.net/xtide/XT-IDE%20-%20Problems.htm&quot; rel=&quot;noreferrer&quot;&gt;known to be incompatible&lt;/a&gt;. With the card installed, it will not boot from a floppy from which it would otherwise boot (it starts to, but then glitches out).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I plan to try third-party system BIOSes to see if that might fix it, but while I wait for EEPROMs to show up, I thought it might be worthwhile to see if I can fix whatever incompatibility there is directly. The &lt;a href=&quot;https://github.com/aunali1/xtideuniversalbios&quot; rel=&quot;noreferrer&quot;&gt;source code&lt;/a&gt; seems unmaintained, though I did try flashing the latest version just in case (it has the same problem).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a professional programmer by day with quite a lot of experience at low-level programming, but no experience with my new (to me) IBM or computers of its era. If I wanted to debug this problem, how might I start?&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2017-12-25T14:21:35.487" Title="How to debug BIOS ROM incompatibility?" Tags="&lt;rom&gt;&lt;ibm&gt;&lt;bios&gt;&lt;xt-ide&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5236" PostTypeId="1" CreationDate="2017-12-25T04:39:48.973" Score="11" ViewCount="617" Body="&lt;p&gt;If an ISA card was configured to respond to the address range of the system's BIOS (and the BIOS chips removed), could you boot from it in the same way as the system's default BIOS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, I'm wondering if something &lt;a href=&quot;https://www.lo-tech.co.uk/wiki/ISA-ROM-Board&quot; rel=&quot;noreferrer&quot;&gt;like this&lt;/a&gt; could be modified to load the contents at &lt;code&gt;0xF0000&lt;/code&gt; (the address that I understand the IBM AT and IBM XT 286 puts the system BIOS). I'm interested in replacing the ROM chips with EEPROMs or flash, since they're easier to program and still being made (making a ROM socket adapter of some kind being plan B).&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2017-12-25T14:10:14.627" Title="Can the system's BIOS come from an ISA card?" Tags="&lt;rom&gt;&lt;ibm&gt;&lt;bios&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5237" PostTypeId="2" ParentId="5235" CreationDate="2017-12-25T10:09:44.303" Score="4" Body="&lt;p&gt;Depending on your skill level and the hardware you have access to, there are a few possible approaches I can think of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you could read the code for the various BIOSs involved and try to figure out the incompatibility that way&lt;/li&gt;&#xA;&lt;li&gt;you could use an in-circuit emulator to debug the problem&lt;/li&gt;&#xA;&lt;li&gt;you could use a bus sniffer such as &lt;a href=&quot;https://www.reenigne.org/blog/isa-bus-sniffer-update/&quot; rel=&quot;nofollow noreferrer&quot;&gt;reenigne’s&lt;/a&gt; to trace the system booting&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As you can imagine, none of these are simple...&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-12-25T10:09:44.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5238" PostTypeId="2" ParentId="5236" CreationDate="2017-12-25T14:10:14.627" Score="5" Body="&lt;p&gt;I don't see why not, as long as you are actually able to remove the original BIOS chips (or ensure they are never selected / never drive the data bus).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But keep in mind that there is a difference between a 16-bit memory access and an 8-bit memory access, and that in any single 128K region you cannot mix the two.  So if you want to install an 8-bit BIOS card at address F000, you must ensure that all accesses in the E000-EFFF range are &lt;em&gt;also&lt;/em&gt; 8-bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can get a 16-bit ROM card I think that would work better for you.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-12-25T14:10:14.627" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5239" PostTypeId="2" ParentId="5235" CreationDate="2017-12-25T14:21:35.487" Score="1" Body="&lt;p&gt;I suppose what I would try is moving all the involved ROMs to RAM (a simple byte-copy routine can handle this), but then you would need to search for absolute jumps and retarget them to whatever RAM region you copied to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, write a program that soft-boots the machine (either invoke the appropriate interrupt, or simulate what the CPU does at startup), then run this program under a debugger that lets you single-step through code. (this is why you needed to copy the ROM to RAM, so that you can set breakpoints).&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2017-12-25T14:21:35.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5240" PostTypeId="1" AcceptedAnswerId="5242" CreationDate="2017-12-25T14:52:15.107" Score="39" ViewCount="3029" Body="&lt;p&gt;The 68060 had a branch predictor that improved the cycle count of branches that tended to go one way or the other. Apparently it did not handle branches that alternated or had some kind of pattern to when they were taken. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did this branch predictor work? Is it the same as the 68040?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-07-12T02:47:55.447" Title="How does the 68060 branch predictor work?" Tags="&lt;m68k&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5241" PostTypeId="2" ParentId="5231" CreationDate="2017-12-25T15:52:32.240" Score="0" Body="&lt;p&gt;RCS can work if you're working alone or in a small team. Like SCCS, the classic Unix VCS, RCS maintains hard version numbers for individual files. This is quite unlike svn, cvs or git that version entire folders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still use RCS, as I've been using it since my Amiga days.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2017-12-25T15:52:32.240" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5242" PostTypeId="2" ParentId="5240" CreationDate="2017-12-25T18:01:08.530" Score="67" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Attention: The part about the &lt;em&gt;4-Way Set-Associative Branch Cache&lt;/em&gt; has been rewritten, as my original explanation was complete bogus (*0).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What a big and and wide question.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Fast Answer:&lt;/em&gt; No CPU can handle alternating branches equally well.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Slow Answer:&lt;/em&gt; Work your way thru the &lt;a href=&quot;http://cache.freescale.com/files/32bit/doc/ref_manual/MC68060UM.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;68060 User Manual&lt;/a&gt;. It's all there.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Short Answer:&lt;/em&gt; Having said that, your question already implies the answer. If a cache records previous taken decisions and predicts that the same will happen next time, then alternating branches are the perfect way to screw that bookkeeping.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;Long Answer:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Already the 68040 includes a static branch 'prediction' based on the Taken strategy. This means, it assumes that branches are always taken. This already improves the 'prediction' from 30% to 70% (*1). It is the most simple modification for 'prediction', as it just means to modify fetch whenever a branch comes up. The 68040 goes even a step ahead and fetches &lt;em&gt;both&lt;/em&gt; targets, but queues in only the taken target. Thus resulting in a mere 2 clock penalty to requeue the already fetched not-taken instruction if the branch is not taken(*2). I'm not sure how much this modifies the average, but it comes without any penalty.&lt;/p&gt;&#xA;&lt;p&gt;The 68060 adds to this what they called a &lt;em&gt;'Branch Prediction Logic with a 256-Entry, 4-Way Set-Associative, Virtual-Mapped Branch Cache for Improved Branch Instruction Performance'&lt;/em&gt; (p1-4 68060UM) sounds big, isn't so much, but reveals much about it's working.&lt;/p&gt;&#xA;&lt;p&gt;First, when looking at the cache cleared clock cycles (*3) it's obvious that the 'both targets' strategy got dropped (*4). Now, lets dig into the buzzword cloud above:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;256-Entry&lt;/strong&gt; - 256 Entries. Cool. Err, just what type of entry it is, is not described. It may be 256 entries, selected with the lower 8 address bits and that's it. So two branches (i.e. in a loop) will trash each other. Or do they also include the upper 24 bits for verification? Well, often not (*5). Who knows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;4-Way Set-Associative&lt;/strong&gt; - This just tells us that there are 4 entries which are shared among the last four branches executed with the same index. This is helpful to cover a wider range of memory without wasting too many entries - and at the cost of a more complex detection logic and additional management. Also this means there are only 64 indices to be used (organised as 64x4).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Virtual-Mapped&lt;/strong&gt; - Now, that's an important hint, as it reveals that the cache access is based on virtual addresses. Since the lower 8 bits of a virtual address and a real address are always the same (for MK68k anyway), the branch address must be recorded in the cache entry used to make this happen (*6).&lt;/p&gt;&#xA;&lt;p&gt;Not told in the users manual is the prediction strategy really used. We know already that the 68040 used a BTFN strategy, and 68060 execution timings with cleared branch cache does hint a similar default setting. But what about a filled cache?&lt;/p&gt;&#xA;&lt;p&gt;Well, lucky me I did find  bit more information in a stack of old papers from &lt;a href=&quot;https://www.hotchips.org/archives/1990s/hc06/&quot; rel=&quot;nofollow noreferrer&quot;&gt;HC06 in 1994&lt;/a&gt; called &lt;em&gt;'The Superscalar Hardware Architecture of the MC68060'&lt;/em&gt; (they even put it &lt;a href=&quot;https://www.hotchips.org/wp-content/uploads/hc_archives/hc06/3_Tue/HC6.S8/HC6.8.3.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;online&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Organized as 4-way set-associative (4x64)&lt;/li&gt;&#xA;&lt;li&gt;4-state prediction model&lt;/li&gt;&#xA;&lt;li&gt;Pipeline optimized for correct prediction&lt;/li&gt;&#xA;&lt;li&gt;Execution strategy for non predicted branches as BTFN&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While we already discussed the associative part, the 4-state-model is an important hint how prediction works, and why it's still good, even when a  branch &lt;em&gt;sometimes&lt;/em&gt; goes astray. See below. The optimization part means that prediction already interacts with fetch as early as possible, so pipelines are filled according to the prediction. And BTFN as default makes life easy in unknown territory.&lt;/p&gt;&#xA;&lt;p&gt;When thinking about a branch cache we usually imagine an entry for (hopefully) each branch, that records if it has been taken last time or not, so it can be used as assumption when it comes around again. This works eventually great on loops with many iterations. Sure there is (usually) a miss when entering and always a miss when leaving, but all additional iterations will benefit from the prediction (*7).&lt;/p&gt;&#xA;&lt;p&gt;If we look at taken or not as a continuum with unconditional branches at one end and totally random branches at the other, we will find loops and alike near the unconditional end. The easy to predict ones. One bit will do a great job for most of the time. Totally random ones, which might conclude with the 'alternating' the question mentions, are by definition unpredictable. No logic can cover them. Especially not one to be implemented using precious chip space.&lt;/p&gt;&#xA;&lt;p&gt;All static single bit caches will yield a false result when the condition changes. So on first sight this could be the answer to above question. Whenever the decision changes the prediction fails. And even worse, if this is just a one time occurrence, it'll fail next time again.&lt;/p&gt;&#xA;&lt;p&gt;Studying above contiuum we will find that it also describes a grade from mostly taken one way and rarely another (with unconditional as the always extreme, proving the rule) down to random. Mostly does sounds like a good area to improve on, doesn't it? Think of a selection, picking out all blue pixels on the screen or selecting all Orks in an NPC table or alike. Most of the time the condition will not trigger, and when, it'll often just trigger once. So what about adding a counter how often it has been taken during the last flybys?&lt;/p&gt;&#xA;&lt;p&gt;Instead of just one bit (with two states) for last time taken/not taken one could use two bits (the mentioned four states) and record multiple decisions of the same kind. Lets say we go:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00 Not taken once&#xA;01 Not taken more than once&#xA;10 Taken once&#xA;11 Taken more than once&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The prediction is still based on a single bit (the leftmost in above list), thus equally fast, but instead of just setting or clearing the prediction bit we only do it if the other bit is also zero, otherwise we clear first the second bit. This bit works now like a one bit counter, avoiding that an outlier in combinations like NNTN or TTNT will trash the prediction on the long run.&lt;/p&gt;&#xA;&lt;p&gt;As a drawback it will result in two misses when an always taken changes into a never taken or vice versa. Like when the search hits a group of Orks :) In reality, branches do flock like sheep, and in average code there are more branches that trigger only sometimes the other way than there are long streak triggered ones or truly random. Thus pushing up the hit counter from ~85% to ~90% Good job for a single bit, isn't it? (*8)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Answer: &lt;em&gt;The 68060 is like any other CPU with prediction slowed by changing conditions&lt;/em&gt;&lt;/strong&gt; (alternating branches as you call it), &lt;em&gt;&lt;strong&gt;but not as much if they change only sometimes.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;When reordering the encoding we also can easy establish a BTFN default handling when the cache is cleared:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00 Taken once&#xA;01 Taken more than once&#xA;10 Not taken once&#xA;11 Not taken more than once&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now a branch with an uninitialized entry works much like the 68040 does (*9).&lt;/p&gt;&#xA;&lt;p&gt;Here again Motorola did go one step further and added an explicit BTFN strategy for all cache misses (instead of living with a false hit). I guess with all the transistors spend on the 4-way implementation these few additional gates was a low price payed for a good improvement.&lt;/p&gt;&#xA;&lt;p&gt;BTW, this is more or less the same scheme the Pentium uses (with a few errors :)) - and CDC already used in the 1970s - as well as /370ish CPUs).&lt;/p&gt;&#xA;&lt;p&gt;Now having the branch prediction working ahead of instruction execute adds a nice quirk to the 68060: When a TRAP is used with 'additional' parameters, that look like a branch, the TRAP will result in an access fault, as now the cache is screwed up (s8.4.7, p8-29). This will be flagged in the Fault Status Word, and clearing the cache is all the fault handler has to do before rescheduling the instruction (p8-25).&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;The basics described here are noted in the 68080UM, including the buzzword list (sans decoding), excluding the strategy details, so &lt;strong&gt;RTFM&lt;/strong&gt; is always a good start.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*0 - My original description of the &lt;em&gt;4-Way Set-Associative Branch Cache&lt;/em&gt; has been critisised by a reader (@pipe) as wrong. Just to make prove how good I am, I started to search thru my old papers (and there are lots of them) to prove him wrong. And voila, I found a handout from HC06 in 1994 for a speech about &lt;em&gt;'The Superscalar Hardware Architecture of the MC68060'&lt;/em&gt; providing a slide with a little more information.&lt;/p&gt;&#xA;&lt;p&gt;Drats, @pipe was right, Motorola did really spend 4 comparators plus LRU (or alike) logic and more to make it 4-way associative like said. Never thought they had gone that length.&lt;/p&gt;&#xA;&lt;p&gt;At least that document also provided more information that supported the functional description I presented, even my assumption (due execution timing) of a BTFN default. Sigh.&lt;/p&gt;&#xA;&lt;p&gt;*1 - Yes, it's not the simple 50% people often assume when asked about branch probability. In real code branches are more often taken than not. And it's not just a little, but rather significant. Only 30% of all branches (remember to include the unconditional) are not taken. Just think of loops, mostly branching back until a condition is reached, or code blocks that are only executed when a condition is met. The last one coresponds with modern block orientated programming and was maybe a bit different in &lt;em&gt;ye old assembly days&lt;/em&gt; - when we where free to structure as we liked - but not much.&lt;/p&gt;&#xA;&lt;p&gt;*2 - I'm not really sure, but it might perform overall better than a Back-Taken-Forward-Not strategy, as it always reduces the penalty for wrong 'prediction' to these two clock cycles, but the cost of always spending these cycles on forward. I would love to get more in depth numbers here.&lt;/p&gt;&#xA;&lt;p&gt;BTFN assumes that backward branches are usually taken, thus the next instruction to be prepared is the one the branch points to - when it's negative - otherwise it just goes with the flow. Compared with an always taken strategy prediction raises in average code from 70% to 80% hit. Motorola PPC 603, of the same time, for example uses BTFN.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Backward Taken &lt;strong&gt;3&lt;/strong&gt;; Forward Taken &lt;strong&gt;7&lt;/strong&gt;; Backward Not Taken &lt;strong&gt;7&lt;/strong&gt;; Forward Not Taken &lt;strong&gt;1&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;*4 - It wouldn't have made much sense anyway with the longer and different structured pipeline.&lt;/p&gt;&#xA;&lt;p&gt;*5 - This would add another caveat for cache prediction: Aliasing error. Any access will find a corresponding entry reflecting the decision taken by any branch with the same lower 8 address bits. Not necessarily the droids we are looking for and a possible chance for a misprediction. But it saves a some chip real estate, so it was used in early mainframe designs.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Well, and adding the need for OS programmers to clear the branch prediction cache whenever the virtual address space is changed or modified. At least if they don't want to impale performance.&lt;/p&gt;&#xA;&lt;p&gt;*7 - On first sight, a BTFN would do the same, even better as it only fails on the last iteration, but loop exits are not just a counter at the end, but also every intermediate conditional exit (when ...break). Here a cache wins over BTFN.&lt;/p&gt;&#xA;&lt;p&gt;*8 - And no, larger counters as 1 bit would not improve the result any further, as any additional step does increase the number of (possible) initial faults, making any change in branch behaviour quite expensive. Expecialy hampering loops which soon would be better off with a BTFN than any cache.&lt;/p&gt;&#xA;&lt;p&gt;*9 - Another reordering may also enable us to see it as saturating counter (one that doesn't run over):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00 Taken more than once&#xA;01 Taken once&#xA;10 Not taken once&#xA;11 Not taken more than once&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now it just counts +1 if a branch is not taken and -1 if it is taken. Not that a counter would really save gates or improve anything, but it makes a great addition to confuse students in CS classes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Edit: &lt;a href=&quot;https://en.wikipedia.org/wiki/Branch_predictor#Saturating_counter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki&lt;/a&gt; takes this even a step further by using the saturation counter metaphor and explaining it as a state machine. Yeah, it takes a lot of dedication to explain two bits (and 4 simple gates) in such a 'refined' way :))&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-12T02:47:55.447" LastActivityDate="2020-07-12T02:47:55.447" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="5243" PostTypeId="1" CreationDate="2017-12-26T07:25:12.153" Score="4" ViewCount="658" Body="&lt;p&gt;The dynamics of the market, of what platforms end up being used at what times in what contexts, depend not only on what is technically possible, but even more on what can be done for what price, so manufacturing cost can provide insights into &lt;em&gt;why&lt;/em&gt; one computer succeeded, only to be replaced by another. To this end, I've found this breakdown of the manufacturing cost of the Commodore 64 highly illuminating: &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_64#Manufacturing_cost&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Commodore_64#Manufacturing_cost&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there available anywhere, a similar breakdown of the manufacturing cost of any 16-bit computer? I would, for example, be very interested in knowing exactly why the Atari 520ST was many times more expensive than contemporary late-model 8-bit machines from the same company, despite being designed for simplicity at a time when RAM and the 68000 CPU were both cheap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I found a reference for the price on the 68000. From &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/0994031025&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/Commodore-Amiga-Years-Brian-Bagnall/dp/0994031025/&lt;/a&gt; hardback edition page 58, on the selection of a CPU by the Amiga team:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'However, Motorola stood out for price. &quot;We were being quoted $12 apiece in large quantity,&quot; says Decuir. &quot;That was better than the Zilog people for the Z8000 were offering. And it was much better than Intel was asking for the 8086 family.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motorola unveiled the chip in 1980, but samples were not publicly available until 1982, just in time for Miner and his engineers to begin work on their new system.'&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2017-12-28T01:17:46.627" LastActivityDate="2017-12-28T14:53:02.143" Title="Manufacturing cost breakdown for a 16-bit computer" Tags="&lt;hardware&gt;&lt;history&gt;&lt;cost&gt;" AnswerCount="2" CommentCount="19" ContentLicense="CC BY-SA 3.0" />
  <row Id="5244" PostTypeId="2" ParentId="5243" CreationDate="2017-12-26T13:17:07.687" Score="2" Body="&lt;p&gt;Re-reading my answer, I see that I've written about the &lt;em&gt;why&lt;/em&gt; rather than the &lt;em&gt;what&lt;/em&gt; and failed to answer with a specific price breakdown, but I think it's still useful enough to post:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main visible cost is the CPU. The selling price of a CPU is not linear with performance but resembles more of an exponential curve to reflect the fact that people are prepared to pay quite a lot more for relatively modest gains in performance with only some of the cost being justified in extra engineering effort, and that few are interested in low-performance parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, a CPU is not a computer, and the rest of the system needs to be considered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 16-bit CPU has twice as wide a data bus as an 8-bit CPU. ROMs were typically 8 bits wide, and RAMs 1, 4, or 8 bits wide. So you need to double the number of ROM and RAM chips. You might think that you can just halve the capacity of the individual chips to get the same total size and save a bit of money that way, but there are a couple of problems with that. The simple one is that 16-bit code tends to be less memory-efficient than 8-bit code and that one also generally expects the 16 bit machine to do more, so the system needs more memory. A less-obvious one is that chip dies are square, so memory capacities tend to scale up in powers of &lt;em&gt;four&lt;/em&gt; rather than two. Half-sizes existed, but were not necessarily sufficiently cost-effective to justify the reduction in capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally the I/O and video subsystem would also be upgraded, since who wants their shiny new 68000-based box to be sullied with 8-bit graphics? (Atari ST owners, &lt;em&gt;ba-dum tish&lt;/em&gt;.) Better graphics means faster/wider video RAM, higher-quality video DACs, maybe a blitter or fancier sprite hardware. Floppy drives and controllers become a necessity on machines with lots of RAM, which adds further expense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 16-bit CPU also needs twice as many data lines as an 8-bit CPU, and normally has more address lines too, which increases PCB complexity, requiring a larger board to handle more traces, and perhaps more board layers as well. The cost of the PCB is often overlooked, but large boards can cost a surprising amount. The larger board usually means a larger case, and moulding large plastic pieces is not cheap. Consider the size of the Commodore 64 versus the Amiga 500.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You &lt;em&gt;could&lt;/em&gt; do clever hacks to reduce the bus width and save money that way. This results in the wretched performance of the Sinclair QL and Acorn Electron, both of which did their bit to ruin their respective manufacturers. So don't do that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After looking at the overall improvements, one can be left wondering why the 16-bit machines were so &lt;em&gt;cheap&lt;/em&gt; in comparison to the much worse-performing 8-bit systems.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2017-12-26T13:17:07.687" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5245" PostTypeId="1" AcceptedAnswerId="5247" CreationDate="2017-12-26T16:32:01.857" Score="15" ViewCount="4407" Body="&lt;p&gt;A slightly odd question, but is it possible to take an old 16K computer that wasn't designed for memory upgrades, such as a Commodore 16 or PET 4016, and upgrade it to 64K as a hardware hack?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not a hardware engineer; here are my initial loose thoughts:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose the memory chips are DRAM, standard 4116, eight of them. You'd need to take them out and replace them with 4164s. That's the easy part. If they're soldered rather than socketed, you would have to desolder the old chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any differences in addressing the two kinds of chips? If there are, that probably kills the project right there?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not, you would then really need to arrange for bank switching between the new RAM and the existing ROM in order to keep the upgraded computer actually usable. Can that be done by replacing a memory controller chip with something suitable?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-08-06T04:42:34.787" Title="Can a 16K computer be upgraded to 64K?" Tags="&lt;memory&gt;&lt;hardware-mods&gt;" AnswerCount="6" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5246" PostTypeId="2" ParentId="5245" CreationDate="2017-12-26T17:12:08.707" Score="11" Body="&lt;p&gt;The 4116 and 4164 have different pin allocations for the reason you'd expect: the 4164 has an additional address line (for two more bits of address in total because row and column are multiplexed). So you can't just drop one in, in place of the other. The 4116 also receives a 12v signal, which the 4164 doesn't. So you can't perform a straight substitution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n7z8F.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n7z8F.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to hack in 64kb where no original provision was provided, you'll need to make sure you don't connect that 12v signaland implement some sort of paging scheme of your own, to buffer an additional two bits and provide either one upon RAS and CAS. Or a single bit to supply regardless of RAS and CAS, to give 32kb in a 16kb slot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that means cutting or bending pins 8 and 9, connecting 8 to the board where 9 was, and providing a different input for 9.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2017-12-26T17:18:00.370" LastActivityDate="2017-12-26T17:18:00.370" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5247" PostTypeId="2" ParentId="5245" CreationDate="2017-12-26T20:03:30.250" Score="24" Body="&lt;p&gt;It all depends on the computer to be modified and its RAM system. For now, let's focus on the pure RAM expansion issue and drop the part about bank switching; as this is completely machine-dependent, a generalized answer, as requested, will be impossible. Even so, there are still many hurdles to overcome. One after the other:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;RAM Type&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Some machines, like original PETs are based on static RAM. They lack any logic to multiplex addresses thus, dynamic can't be used as (direct) replacement. Also, no provisions are on board for refresh (*1).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;RAM Organization&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The C16 mentioned above does use dynamic RAM, but with x4 organization (4416 - they are already 64Kib chips anyway :)), so x1 chips can't be used as (direct) replacement. Corresponding 256Kib x4 (4464) chips are available, still the hardware needs the capability to handle the additional address line(s).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Addressing Capabilities&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Even if a machine, like the 4016, does use x1 chips (4116), it also must provide means to multiplex all 16 address bits, which the 4016 doesn't. Only the 14 lower lines are multiplexed (*2). If at all, a working extension would be using additional 4116, wired in parallel with their CS connected to a small decoder for A14/A15 - and of course only if there is address space available to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C16 in contrast is already (somewhat) prepared for 64 KiB. The RAM chips can be replaced right away, just A14/A15 have to be supplied to the multiplexers (74257).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Address Space&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Next hardware hurdle is where to put the RAM. Even in a 16KiB machine, the remaining 48KiB address space are neither unused nor free. There is ROM somewhere, I/O and maybe a screen RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CBM 4000 series for example has its screen RAM at 8000h followed by I/O and ROM areas. That's the main reason why there never was a 4048.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C16, in contrast, is already prepared to have 64KiB - after all, it's a 264 design, like the plus/4. The address decoder is made to handle full 64 KiB RAM in addition to the ROM and I/O areas. Screen memory is all the way down (*3).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Software Access&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Even if one is able to squeeze in the additional RAM hardware-wise, most software, like BASIC, will not use it. The C16 is again a notable exception, as its BASIC is prepared to work with a full 64KiB RAM.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I did purposely focus on the machines listed in the original question, as otherwise this would be an endless story, even when confined to Commodore. But I hope you get the picture.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Then again, adding static RAM is less work (no multiplexer to consider) and nowadays even for DRAM machines the best choice. Just add it - especially if a suitable expansion bus is available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Well, the multiplexer(74153) needed is available on (most) boards, but not wired, so it still be less work to use 4116s or add a new multiplexer on a sub board&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The 264 does show that Commodore engineers where willing to learn. Unlike the C64 which was just a quick hack, the 264 series was planed with extensibility and maximum usage in mind.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-08-05T09:41:04.120" LastActivityDate="2019-08-05T09:41:04.120" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="5248" PostTypeId="2" ParentId="5245" CreationDate="2017-12-26T21:01:52.213" Score="6" Body="&lt;p&gt;In general on old computers, the whole address space will be used in some way or other, even with less than 64 KB RAM (for ROM or I/O). So you'll have to do bank switching of some kind, or you loose the ability to use original software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, a common method to do RAM (or ROM) extension is &quot;piggybacking&quot;: You solder a second RAM chip of the same type on top of the first RAM chip, bend off the CAS pin (or CS pin), connect all the CAS pins. Then you need to find whatever chip on the motherboard drives the CAS (or CS) pins, cut it, add a chip (e.g. mux) to switch between both banks, and find some I/O port to control the bank switch chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.classic-computers.org.nz/system-80/hardware_mods_memory_upgrade.htm&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; is a description with a bit more details for a Z80 system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can double the available RAM; if you want to quadruple it, it will get more complicated (e.g. use modern chips, desolder old chips, add an extra board and get signals from where the old chips where).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's even easier with ROMs if you just want to add some kind of functionality (e.g. switch a character set generator, or custom system ROM): In that case, a simple physical switch instead of a more complex bank select scheme is often all you need.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2017-12-26T21:01:52.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5249" PostTypeId="1" AcceptedAnswerId="5250" CreationDate="2017-12-26T22:11:56.497" Score="7" ViewCount="1252" Body="&lt;p&gt;I noticed my IBM XT 286 has no heatsink on the CPU nor a fan of any kind (only the PSU has a fan). I realize this was fine when it was built, but for longevity purposes, should I put a heatsink on it? Or is that a silly thing to do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there other chips that could benefit from a heatsink?&lt;/p&gt;&#xA;" OwnerUserId="7316" LastEditorUserId="6659" LastEditDate="2017-12-26T22:44:36.433" LastActivityDate="2017-12-26T22:44:36.433" Title="Is a Heatsink Needed for an Intel 80286?" Tags="&lt;ibm&gt;&lt;80286&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5250" PostTypeId="2" ParentId="5249" CreationDate="2017-12-26T22:21:14.303" Score="14" Body="&lt;p&gt;The 80286 has a maximum power dissipation of 3.3W and an operating range of up to 70°C. Unless you want to operate near that point, no heat sink is needed. The ICs surface is alreaady way too large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond that it falls into the same class as iluminated cables and coloured ribbons. Not needed but doesn't do harm either (if done properly).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a historic standpoint, it would be a shame to add such gimmicks to a (by now) classic machine. Especially as the XT286 is a bit less common than an early AT.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-12-26T22:32:42.800" LastActivityDate="2017-12-26T22:32:42.800" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5251" PostTypeId="1" AcceptedAnswerId="5253" CreationDate="2017-12-27T01:09:40.457" Score="23" ViewCount="6530" Body="&lt;p&gt;A lot of web sites describe how to create a bootable floppy disk using an existing image (via &lt;code&gt;dd&lt;/code&gt;). But what about the image makes it bootable?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interested in making my own bootable floppy images for an IBM PC and want to understand the details.&lt;/p&gt;&#xA;" OwnerUserId="7316" LastEditorUserId="6794" LastEditDate="2017-12-27T01:24:13.457" LastActivityDate="2019-04-08T09:21:38.870" Title="What makes a floppy disk bootable?" Tags="&lt;floppy-disk&gt;&lt;ibm-pc&gt;&lt;boot&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5252" PostTypeId="2" ParentId="5251" CreationDate="2017-12-27T01:20:11.220" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;what about the image makes it bootable?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The program(s loader) starts at Track 0 Sector 0 of a device&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm interested in making my own bootable floppy images for an IBM PC&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Write the program to be executed (like &lt;a href=&quot;https://en.wikibooks.org/wiki/X86_Assembly/Bootloaders#Technical_Details&quot; rel=&quot;nofollow noreferrer&quot;&gt;this minimal one&lt;/a&gt;) to Sector 0 Track 0 and press reset.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[I] want to understand the details.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's that simple. The BIOS looks for a floppy in drive 0, reads the first block and starts whatever is located there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikibooks offers a real nice and easy to follow &lt;a href=&quot;https://en.wikibooks.org/wiki/X86_Assembly/Bootloaders&quot; rel=&quot;nofollow noreferrer&quot;&gt;writeup&lt;/a&gt; about how to build a boot sector / bootable program, including an analysis how Linux does it.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, if you want to make floppies that also adhere to other standards - for example the FAT file system or the like, then you have to format it according to those specs. Like using a &lt;a href=&quot;https://en.wikipedia.org/wiki/Volume_Boot_Record&quot; rel=&quot;nofollow noreferrer&quot;&gt;Volume Boot Record&lt;/a&gt; and squeezing your program in there. Plus adding a FAT structure and packing further boot stages into files according to that structure - or at least reserved by dummy entries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But strictly nothing of that is needed when your goal is a bootable disk to do your own stuff. BIOS doesn't care for directories, clusters or assignment. Just Sector 0 on Track 0 and from there on Track/Sector numbers for reading, but that's already the domain of your program.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-04-08T09:21:38.870" LastActivityDate="2019-04-08T09:21:38.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5253" PostTypeId="2" ParentId="5251" CreationDate="2017-12-27T01:27:55.483" Score="46" Body="&lt;p&gt;The notion of a bootable-vs-non-bootable floppy is a little odd.  It's worth noting that almost all floppies you're likely to have are actually bootable: it's just that they boot a program that isn't especially useful (it either displays a message saying to insert a system disk, or they execute &lt;a href=&quot;https://en.wikipedia.org/wiki/BIOS_interrupt_call#INT_18h:_execute_BASIC&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;INT 18h&lt;/code&gt;&lt;/a&gt; - which runs BASIC if it's installed in ROM, or displays a boot error if it isn't).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, the key to writing a &lt;em&gt;useful&lt;/em&gt; bootable disk is to understand what the BIOS does when it boots from floppy (booting from a hard disk is subtly different, and adds a little extra complexity), which is this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First, it loads the first sector (512 bytes) of the first track of the first side (if the disk is double sided) of the disk into memory at 0000:7c00h.&lt;/li&gt;&#xA;&lt;li&gt;In some BIOSs, there may be a check that the last two bytes of the sector are 55h AAh (my tests on compatible machines show that this isn't necessarily true there, but I suspect IBM BIOSs do perform this test based on documents I've read about it), and the BIOS will ignore the disk if this signature isn't present.&lt;/li&gt;&#xA;&lt;li&gt;The BIOS then jumps to 0000:7c00h, which is expected to contain a jump instruction to the actual code (again, some BIOSs may check whether this is present or not before booting it).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In addition to this, most useful boot programs will also include the data structures that are necessary for some file system or other, typically a &lt;a href=&quot;https://www.win.tue.nl/~aeb/linux/fs/fat/fat-1.html&quot; rel=&quot;noreferrer&quot;&gt;FAT12 header&lt;/a&gt; which occupies the space between bytes 3 and 30.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rest of the sector is available for the boot program.  The DOS boot program simply loads a bunch of sectors from the start of the disk, performs some basic checks to make sure they were loaded correctly, and jumps into them to start the actual OS.  Some other boot sectors are smarter; I wrote one back in the 90s that:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Checked if the processor in the system was a 386 or higher, giving useful error messages if it wasn't&lt;/li&gt;&#xA;&lt;li&gt;Located and loaded a file by name in the FAT filesystem, thus allowing an OS kernel to be installed without the disk having any special space allocated as is required for DOS.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Writing a boot sector is fun.  Good luck. :)&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-12-27T01:27:55.483" CommentCount="24" ContentLicense="CC BY-SA 3.0" />
  <row Id="5254" PostTypeId="2" ParentId="5251" CreationDate="2017-12-27T04:27:13.590" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;what about the image makes it bootable?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;An operating system &quot;kernel&quot; sitting at track 0 sector 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: if &quot;data&quot;, or a program that doesn't have the necessary code to finish booting the system, is at track 0 sector 0, then the BIOS' bootstrap code will throw an error saying that an operating system is not found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT 2: if it's a fresh or unformatted disk, the BIOS is still going to try and look where it thinks track 0 sector 0 is, not find anything and then throw an error.&lt;/p&gt;&#xA;" OwnerUserId="3683" LastEditorUserId="3683" LastEditDate="2017-12-27T13:44:11.947" LastActivityDate="2017-12-27T13:44:11.947" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5255" PostTypeId="1" AcceptedAnswerId="5257" CreationDate="2017-12-27T06:23:52.817" Score="9" ViewCount="1831" Body="&lt;p&gt;I have a dozen or so 3.5&quot; floppy disks from the 90's and most of them show bad blocks when I scan them with &lt;code&gt;badblocks&lt;/code&gt;. If I do a low-level format, where the sectors are laid down again, will that make the floppies more reliable? I don't care about preserving the contents; just wondering if I should throw them out or keep trying to use them.&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2019-09-22T16:34:00.413" Title="Does low-level formatting improve floppy disk longevity?" Tags="&lt;floppy-disk&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5256" PostTypeId="2" ParentId="5255" CreationDate="2017-12-27T06:54:16.117" Score="4" Body="&lt;p&gt;Not really an answer but too long for a comment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a floppy drive is out of alignment when writing to the floppy, any other aligned drive will fail to read it.  It may or may not fail to read any other floppy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disk heads also need cleaning once in a while.  If they haven't been used for  a while and they are internal drives, they will need vacuuming as well.  The fans suck air through the system and that includes floppy drives so all the dust gets trapped in the floppy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can try formatting but if that doesn't work, just bin them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays floppies are high security devices because none of the machines sold have a floppy drive and very few people own portable floppy drives.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastEditorUserId="5311" LastEditDate="2019-09-22T06:19:45.477" LastActivityDate="2019-09-22T06:19:45.477" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="5257" PostTypeId="2" ParentId="5255" CreationDate="2017-12-27T07:48:42.237" Score="13" Body="&lt;p&gt;It won't improve &quot;disk longevity&quot;, but it will make the disks usable again. How long they'll stay usable depends on a lot of things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The magnetic flux pattern on the floppy disk that is used to store the sector address, the begin and end markers, and the data itself, gets weaker over time. If you low-level format them, you'll also refresh the flux pattern that's used for &quot;administrative&quot; purposes (finding sector start and end), not only the data itself. So that's a good thing, and helps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, floppies may go bad for other reasons: The magnetic coating may come off gradually due to friction, and a detoriating sleeve material will speed up this process. If stored improperly, moisture can form between the sleeve and the floppy, which can lead to mold and other things that may detoriate the surface. And so on. Low level formatting won't help with any of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then there's the whole issue of possible defects in the drive: Misalignment, dirt on the read-write-head which will make the read signal weaker, and also cause read errors, etc.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2019-09-22T14:21:35.853" LastActivityDate="2019-09-22T14:21:35.853" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5258" PostTypeId="2" ParentId="5245" CreationDate="2017-12-27T09:53:11.583" Score="4" Body="&lt;p&gt;On the ZX Spectrum (at least with some versions of the logic board) you could upgrade from 16K to 48K (by installing 32 KB of memory plus a few logic chips), and IIRC you could also install 64KB and do bank switching (where the ROM and lower 16KB of RAM are fixed, and the upper 32KB are switched).&lt;/p&gt;&#xA;" OwnerUserId="7159" LastActivityDate="2017-12-27T09:53:11.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5259" PostTypeId="1" AcceptedAnswerId="5261" CreationDate="2017-12-27T11:50:00.670" Score="11" ViewCount="1322" Body="&lt;p&gt;I've been looking for a certain game, I think it's from the 2000's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can only remember a few characteristics:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It was an RPG game.&lt;/li&gt;&#xA;&lt;li&gt;There was a cave, with what I think was a sleeping dragon and there was lava blocking the way to it.&lt;/li&gt;&#xA;&lt;li&gt;In the city, it had a tavern with a knife minigame, the target had 3 weels and the objective was to line up the same block color in a column.&lt;/li&gt;&#xA;&lt;li&gt;There was a port, with a ladder, that let you dive in the ocean.&lt;/li&gt;&#xA;&lt;li&gt;In the game map, in the oceanic part, had warnings that in certain parts lived sea monsters.&lt;/li&gt;&#xA;&lt;li&gt;In some part of the city, uphill, was a gate or portal that at a certain point lead you to talk to Merlin.&lt;/li&gt;&#xA;&lt;li&gt;You could cast spells everywhere but sometimes the citizens got enraged and would hunt you.&lt;/li&gt;&#xA;&lt;li&gt;the game was not 2d graphics.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7420" LastEditorUserId="780" LastEditDate="2017-12-30T12:21:28.427" LastActivityDate="2020-12-28T01:20:11.613" Title="2000's RPG PC game" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2020-12-28T21:14:04.770" ContentLicense="CC BY-SA 3.0" />
  <row Id="5260" PostTypeId="2" ParentId="5255" CreationDate="2017-12-27T12:34:07.507" Score="7" Body="&lt;p&gt;First of all, there is no such thing as not 'low-level' formating of a floppy. There's just formating. The misconception of a 'high-level' format (or what ever the counterpart would be) of a floppy is easy to receive from the MS Windows concept of 'fast format' - which simply clears FAT and root directory but doesn't really format anything - in conjunction with drive specific 'low level' formating introduced as buzzword with hard disks (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said that, it was always a good idea to format a floppy before (re-) using it. In 'ye good old days' it was necessary to get best results, as every drive was aligned a bit different. Buying preformated disks was shunned on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Floppies naturally loose their content (and format is also just content) over time. Also they are more likely to be stored in a less than perfect environment that can reduce their storage - mostly in fact by temperature changes than due magnatic fields.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;So yes, don't be lazy, do it like grandpa, format any floppy before use.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Last sentence is taken (and a bit edited) from a great comment by @tofro&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-12-27T17:24:30.593" LastActivityDate="2017-12-27T17:24:30.593" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="5261" PostTypeId="2" ParentId="5259" CreationDate="2017-12-27T15:48:14.720" Score="11" Body="&lt;p&gt;I cant believe I found it, I'm so happy right now, years and years trying...&lt;/p&gt;&#xA;&lt;p&gt;The name of the game is Quest for Glory V.&lt;/p&gt;&#xA;&lt;p&gt;Here is some gameplay: &lt;a href=&quot;https://www.youtube.com/watch?v=vtx_fpdi06w&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=vtx_fpdi06w&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And down here the image that finally helped me to find the game:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/syVbk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/syVbk.jpg&quot; alt=&quot;Quest for Glory V&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;https://gamefaqs.akamaized.net/screens/f/4/3/gfs_41400_2_47.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;akamaized.net&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7420" LastEditorUserId="3748" LastEditDate="2020-12-28T01:20:11.613" LastActivityDate="2020-12-28T01:20:11.613" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5263" PostTypeId="2" ParentId="5251" CreationDate="2017-12-27T17:24:47.617" Score="0" Body="&lt;p&gt;Addon, answering an aspect explicitly asked about in the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &quot;dd image&quot; of a complete floppy disk, unless dd is used with special (skip/count) parameters, will always carry the parts that make a floppy disk bootable or not bootable along with it - dd if=/dev/fd0 of=temp ; change floppy to empty one; dd if=temp of=/dev/fd0 will create a bootable copy of a bootable original, unless special techniques (copy protection that works by (mis)using normally non-addressable parts of the media) were used in the original.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2017-12-27T17:24:47.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5267" PostTypeId="2" ParentId="5204" CreationDate="2017-12-27T21:44:23.210" Score="1" Body="&lt;p&gt;Back in to 80's DEC themselves had the PDT 150 which was an office version of our Lab PDP11/03's&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.computerhistory.org/collections/catalog/102681914&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.computerhistory.org/collections/catalog/102681914&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could have been used as a home computer as its smaller than some current PC Cube cases and I believe DEC sold some to employees &lt;/p&gt;&#xA;" OwnerUserId="7432" LastActivityDate="2017-12-27T21:44:23.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5269" PostTypeId="1" AcceptedAnswerId="5279" CreationDate="2017-12-28T01:40:20.523" Score="9" ViewCount="1171" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Dynamic_random-access_memory#Page_mode_DRAM&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Dynamic_random-access_memory#Page_mode_DRAM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Page mode DRAM is a minor modification to the first-generation DRAM IC interface which improved the performance of reads and writes to a row by avoiding the inefficiency of precharging and opening the same row repeatedly to access a different column.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Minor in implementation difficulty, but major in performance implication; faster multiword data transfer can substantially speed up many operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When did CPUs start being able to make use of this? The instruction timing tables I've seen for seventies and early eighties CPUs such as the 6502, Z80 and 68000 suggest they did not use page mode. On the other hand, I've found a few PDFs that indicate the 68030 did. I haven't been able to find anything definite on the 68020. (Apparently the video chip on the Sinclair Spectrum did use it, so even if the CPU didn't, the capability didn't go to waste.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4138" LastEditDate="2017-12-28T04:30:22.647" LastActivityDate="2019-06-05T12:53:07.923" Title="When did CPUs start using page mode DRAM?" Tags="&lt;history&gt;&lt;memory&gt;&lt;chip&gt;&lt;performance&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5270" PostTypeId="2" ParentId="5269" CreationDate="2017-12-28T02:03:01.090" Score="13" Body="&lt;p&gt;DRAM access in general and page mode (*1) in particular are not CPU features, but depend on the DRAM controller. No matter if build by discrete components (like mulitiplexers and counters) or dedicated IC. Pagemode DRAM can be used with any CPU if the controller (access logic) used supports its features. No matter if it's an 8080 or a 68020.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You won't find any CPU related information on such RAM access techniques until the point in time where memory controllers got integrated into CPUs. For x86 this might be the AMD K8 or Intel's Core-i7. All PC CPUs before did use &lt;strong&gt;separate memory controllers&lt;/strong&gt;. Originally discrete logic, which slowly got moved into what later was known as &lt;strong&gt;'Northbridge'&lt;/strong&gt;. Beside x86, IBMs Power 5 and the Cell series got also integrated memory controllers around the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So all the time between introduction of PM/FPM/EDO from ~1977(?) till ~2005, it was used without any CPU having an idea about its workings. Wasn't having separate technology domains a great idea?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4577" LastEditDate="2017-12-29T09:42:46.530" LastActivityDate="2017-12-29T09:42:46.530" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5271" PostTypeId="2" ParentId="5251" CreationDate="2017-12-28T03:20:45.910" Score="1" Body="&lt;p&gt;Short answer: A magic number (0xAA55) being at the end of the first sector on the floppy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Slightly longer answer: &quot;Booting&quot; means that the first 512 bytes of the floppy are copied to memory (usually at real mode segment 0x7C00:0x0000 or physical address 0x7C00). This is the first segment of the floppy, segment 0. It's also  known as the bootsector. The processor then jumps here and starts execution. Some older BIOSes will check that the last 2 bytes of the segment are 0xAA55. This is a magic number. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;DD is a tool that is used to write to specific sectors on the disk. It is one of the more preferable tools for accessing raw disks on *nix systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: This is for IBM-PC &amp;amp; compatibles. See &lt;a href=&quot;https://en.wikipedia.org/wiki/Master_boot_record&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7435" LastEditorUserId="7435" LastEditDate="2018-01-05T23:48:03.133" LastActivityDate="2018-01-05T23:48:03.133" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5272" PostTypeId="1" AcceptedAnswerId="5273" CreationDate="2017-12-28T09:45:43.707" Score="6" ViewCount="414" Body="&lt;p&gt;According to the documentation I have (&quot;Hardware&quot; by J.Schimanski) after setting the copper list COP1LCx under &lt;code&gt;$dff080&lt;/code&gt; it should be started by writing an arbitrary value into COPJMP1 under &lt;code&gt;$dff088&lt;/code&gt;. However my copper list works &quot;automatically&quot; without the latter step. What is the right way of doing it? Do I need this starting step?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use Amiga 500 with ECS.&lt;/p&gt;&#xA;" OwnerUserId="7409" LastActivityDate="2017-12-28T12:16:27.353" Title="Should I start Amiga's copper list using COPJMP1 or is it superfluous?" Tags="&lt;amiga&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5273" PostTypeId="2" ParentId="5272" CreationDate="2017-12-28T12:16:27.353" Score="5" Body="&lt;p&gt;The Copper list is started automatically with every vertical sync. If you need it to start at some other time you need to write to COPJMP1.&lt;/p&gt;&#xA;" OwnerUserId="5200" LastActivityDate="2017-12-28T12:16:27.353" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5274" PostTypeId="1" AcceptedAnswerId="5277" CreationDate="2017-12-28T12:47:36.790" Score="6" ViewCount="1940" Body="&lt;p&gt;I have copied one program from a floppy to a hdd drawer (I created for it) and I want to start this program directly, without going through &lt;code&gt;Window -&amp;gt; Show -&amp;gt; All Files&lt;/code&gt; first in my Amiga Workbench (without doing that I am not able to see the program in the drawer). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to achieve my goal, means having an icon in WB which I can click to start the program? I can copy an existing one and rename it. However do you know a better/faster way/tool?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use Amiga 500 with WB 40.42 (3.1).&lt;/p&gt;&#xA;" OwnerUserId="7409" LastActivityDate="2018-04-20T12:20:10.627" Title="How to create fast an icon file for Amiga program in WB drawer?" Tags="&lt;amiga&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5275" PostTypeId="2" ParentId="5243" CreationDate="2017-12-28T14:53:02.143" Score="2" Body="&lt;p&gt;This doesn't directly answer your question, but I believe your indirect question is really why 16/32-bit computers were more expensive than 8-bit computers sold at the same point in time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer, in addition to what pndc says in his response, is that 8-bit computers, at that time, had had all their sunk costs recovered years before, and could simply be sold for component cost plus markup.  The new systems on the other hand had had a lot of research and development expense made (and continuing, as the operating system was continuing to evolve; Commodore, for example, didn't do a thing to the C64 kernel after the 64 was released except to fix a few bugs).  All of this time and effort cost money, and for that investment to make sense, that cost needs to be recovered in the sales of the units made as fruit of the R&amp;amp;D effort.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2017-12-28T14:53:02.143" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5277" PostTypeId="2" ParentId="5274" CreationDate="2017-12-28T15:48:20.920" Score="5" Body="&lt;p&gt;Various authors have created utility programs for AmigaOS that will automatically create &lt;code&gt;.info&lt;/code&gt; files and associate them with your Amiga programs, thus making the program or data file launch-able via a Workbench icon. As you noted, without the &lt;code&gt;.info&lt;/code&gt; file, the program or data file is not visible as a custom Workbench icon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you search on &lt;a href=&quot;http://aminet.net&quot; rel=&quot;noreferrer&quot; title=&quot;aminet&quot;&gt;aminet&lt;/a&gt;, you can find these utilities. One which I quickly located is called &lt;a href=&quot;http://aminet.net/package/util/wb/IconAdder&quot; rel=&quot;noreferrer&quot;&gt;IconAdder&lt;/a&gt;. According to its README file:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This program is like other 'icon adder' programs you may, or may not, have seen before. It uses the WhatIs.Library to find the file type, and then adds an icon according to it's type.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;NOTE: The way a &lt;code&gt;.info&lt;/code&gt; file is associated with a program or data file is by giving it the same base name; like &lt;code&gt;MyProg&lt;/code&gt; and &lt;code&gt;MyProg.info&lt;/code&gt;. The contents of the &lt;code&gt;.info&lt;/code&gt; file can link a data file to the executable to launch in order to use/view the data file.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2017-12-28T15:48:20.920" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5278" PostTypeId="2" ParentId="5255" CreationDate="2017-12-28T17:33:14.817" Score="0" Body="&lt;p&gt;I've never heard of a &quot;low level&quot; format for a &lt;em&gt;floppy&lt;/em&gt;.  The &lt;strong&gt;standard format&lt;/strong&gt;, the one that goes ticka ticka ticka for about 30 seconds -- that &lt;em&gt;is&lt;/em&gt; doing what hard drives call a low level format  - blanking the media and rewriting the sector boundaries.  It's not a particular challenge; sector bondaries are just more data.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was eventually a &quot;quick format&quot; which simply zapped the FAT directory table and boot sector.  But that was always a specified option, e.g. &lt;code&gt;format a: /q&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some companies sold floppies pre-formatted, so you didn't need to spend 30 seconds.  I wasn't much into those, being a 3-platform shop.  But I can imagine if someone only ever bought those and did &lt;code&gt;format /q&lt;/code&gt; by rote, they might think a normal/full/low-level format was the odd one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, a normal/full format &lt;em&gt;may&lt;/em&gt; help with bad blocks, if the problem is the magnetic fields fading from age (as opposed to the media deteriorating, say).   &lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2019-09-22T16:34:00.413" LastActivityDate="2019-09-22T16:34:00.413" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="5279" PostTypeId="2" ParentId="5269" CreationDate="2017-12-28T17:55:41.210" Score="7" Body="&lt;p&gt;Outside of the world of microprocessors, there &lt;em&gt;were&lt;/em&gt; plenty of CPUs that did this.  Up until some point in the mid 80s, TTL-based multichip CPUs were generally faster than microprocessors and therefore the memory interface was often the bottleneck for such systems.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Alto&quot; rel=&quot;noreferrer&quot;&gt;Xerox Alto&lt;/a&gt;, for example, had a processor that could theoretically run at a rate much faster than it actually did; it was slowed down to 5.88MHz because that was the fastest its RAM could supply instructions and data to it.  I don't have an unambiguous indication that it uses page mode, but as the &lt;a href=&quot;http://static.righto.com/images/alto/1-memory_card.jpg&quot; rel=&quot;noreferrer&quot;&gt;RAM bank uses 4116-2DC chips&lt;/a&gt; which are 150ns type chips (and therefore have a page mode cycle time of 170ns == 5.88MHz vs a full cycle time of 375ns == 2.67MHz) it seems pretty clear that the Alto was using them in page mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Alto also used them arranged in 16-bit words, so the Alto's processor meets the requirements of the additional question you asked in the comments to Raffzahn's answer: it is apparently able to read a 16-bit word in a single cycle at 5.88MHz, which appears to be the rate at which its microcode was processed -- it used programmable microcode, so how user-level instructions were handled could vary depending on the software it was running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For microprocessors, it was less necessary, because most of the well known ones were nowhere near this fast -- I suspect the 80286 was the first mainstream microprocessor that could actually use memory quickly enough to require it: running at 8MHz (the 10MHz and 12.5MHz variants were released later) it requires a memory access response time of 138.5ns to operate with zero wait states, and may perform another access one cycle later (i.e. 250ns after the initial access began).  While by the time of its release in 1982 there were faster DRAM chips available that could have managed that, they were very expensive, so I imagine most implementations of 8MHz 80286 machines used page mode, at least for the first few years after the 286 was launched (although I'm pretty sure that by the time my 286-based PC was made in 1987 that at least some manufacturers were simplifying their systems by using the faster RAM that was becoming cheaper by then).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, even in micro systems, there were cases where you may have needed the extra performance you could get from using page mode, because the CPU isn't the only component of the system that needs to use memory.  As mentioned, the ZX Spectrum uses page mode to fetch 16 pixels worth of information in the tight window that exists between possible successive uses of the bus by its CPU.  It wouldn't have enough time to get them in a single gap otherwise, and only getting 8 pixels per gap would leave it taking too long to generate each scan line.  More advanced graphical systems than the spectrum's could easily have tipped the balance into needing to use page mode for CPU accesses in order to steal enough bus time to produce a line.  Other uses might include DMA for disk-based systems, coprocessors, blitters, or other similar alternative memory users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A system I'm planning on building at some point would have two pluggable CPU boards (I'm planning on having both a Z80B and a second board that lets any CPU I want to experiment with be plugged into the shared bus) and a graphics system sharing access to a single 16-bit wide memory space.  I'm hoping that by caching bytes adjacent to the last access locally to the CPU and using page mode where possible, all three of these users should be able to hit memory whenever they want with very little waiting.  It'll be interesting to see if it works out that way...&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2017-12-28T18:06:39.217" LastActivityDate="2017-12-28T18:06:39.217" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5280" PostTypeId="1" AcceptedAnswerId="5282" CreationDate="2017-12-28T18:58:37.283" Score="14" ViewCount="2932" Body="&lt;p&gt;Suppose you wanted to take a 286 PC and replace the CPU with a 68000, not at the initial design stage, but actually modifying the finished machine, on the theory that they both have 24 bits of address and 16 bits of data bus so it's not obviously hopeless. What would be the obstacles?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, most obviously, they are completely incompatible at the software level. All 286 code in ROM or on disk would have to be replaced with suitably equivalent 68000 code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The packages are different. The 286 is in a square package whereas the 68000 is in a DIP; something would have to be done to physically wire up the replacement chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pins are in different positions, but do they have functional equivalents? Connecting e.g. D4 on one chip to where D4 on the other was connected, would be straightforward enough, but are there pins in one that don't have an equivalent in the other?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;x86 is little-endian and 68k is big-endian. Does that matter, once you've replaced the software?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say for the sake of argument we are talking about 8 MHz clock speed in both cases, so that shouldn't be an issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What else am I missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10260" LastEditDate="2021-03-07T04:41:21.697" LastActivityDate="2021-03-07T16:32:10.320" Title="Replacing 80286 with 68000" Tags="&lt;hardware&gt;&lt;motorola-68000&gt;&lt;80286&gt;&lt;hardware-mods&gt;&lt;endianness&gt;" AnswerCount="3" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5281" PostTypeId="2" ParentId="5280" CreationDate="2017-12-28T20:39:30.293" Score="19" Body="&lt;p&gt;Most obvious question first: why not puting itn on a ISA Card and take over the bus instead? Given, there would be still some work to be done after asking for DMA and pulling /MASTER, but way less than emulating a totally different CPU protocoll. More like adapting to a weired memory subsystem.&lt;/p&gt;&#xA;&lt;p&gt;But for your points&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;First, most obviously, they are completely incompatible at the software level. All 286 code in ROM or on disk would have to be replaced with suitably equivalent 68000 code.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Or add a 286 emulation :)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The packages are different. The 286 is in a square package whereas the 68000 is in a DIP; something would have to be done to physically wire up the replacement chip.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Standard way would be a daughterboard anyway.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The pins are in different positions, but do they have functional equivalents? Connecting e.g. D4 on one chip to where D4 on the other was connected, would be straightforward enough, but are there pins in one that don't have an equivalent in the other?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;More important, the bus protocoll is different. It will take quite some glue logic to fully emulate the Intel bus.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;x86 is little-endian and 68k is big-endian. Does that matter, once you've replaced the software?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not realy. There aren't many 16 bit ports. Beside, swaping low and hi-byte on the daughter board could solve this. But since all I/O software has to be rewritten anyway, this isn't a big deal.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Let's say for the sake of argument we are talking about 8 MHz clock speed in both cases, so that shouldn't be an issue.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Clock speed will be your least concern. It's not possible to simple tie a 68k bus to an x86 system and expect the same behaviour. Where the 68k uses AS, R/W and DTACK to signal access, the 286 hardware wants to see the bus status signals S0/S1, COD/INTR and M/IO (not to mention HOLD and HOLDA and several other) Thats why every 80286 (usually) got a 82288bus controller attached. The 82288 again generated ALE, RD, WR which again are nothing the 68k generates - but the bus expects. Did I already mention the 82284 for READY, SRDY and ARDY?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What else am I missing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What about that the 80286 got an additional I/O address space of 64 KiB? Where you want to put them within the 24 Bit 68k Address space without giving up access to some of the 80286 address space?&lt;/p&gt;&#xA;&lt;p&gt;I don't say it's not doable, but it's definitely not just wiring up some signals - it's stitching two different components together to make them work - &lt;strong&gt;system design as an art form.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.S.: This question is a bit like someone asking &amp;quot;To use a CPAN module in Visual Basic, wouldn't that just require aligning the parameter fields?&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-07T16:32:10.320" LastActivityDate="2021-03-07T16:32:10.320" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="5282" PostTypeId="2" ParentId="5280" CreationDate="2017-12-28T21:04:05.240" Score="34" Body="&lt;p&gt;No, there is no simple one-to-one mapping for the pins. (Bolded signal names will be active-low.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, while the 286 has two physical pins for interrupts (INTR and NMI), 68000 has three (&lt;strong&gt;IPL0&lt;/strong&gt;, &lt;strong&gt;IPL1&lt;/strong&gt; and &lt;strong&gt;IPL2&lt;/strong&gt;), encoding a total of 7 interrupt levels. So the interrupts are handled differently, and also the signaling for acknowledging an interrupt at the hardware level is different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 286 also has a concept of I/O address space: a 64 KiB range of addresses that are completely separate from normal memory addresses and must be accessed using separate machine language instructions. On a 68k, you would probably have to map this to some part of the real address space. For extra fun, the M/&lt;strong&gt;IO&lt;/strong&gt; signal used on 286 to tell the regular address space and I/O address space apart is also used when acknowledging an interrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you would need quite a bit of extra logic to adapt the signals intended for 286 to suit the inputs of the 68k and the outputs of the 68k to the system designed for 286.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there is the matter of different reset behaviours: at reset, the 68k reads two 32-bit values from the very beginning of the address space. The first will be used as the initial stack pointer, and the second as the initial program counter value, i.e. the address where the processor will start executing code. You'll need the system to provide some boot ROM or other meaningful data at these addresses on reset. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, the 286 will execute its first instruction after a reset at memory address 00FFFF0h (16 bytes below 1 MiB), just like the grand old 8086 did. And that's where the BIOS ROM is on PCs.&lt;/p&gt;&#xA;" OwnerUserId="7447" LastEditorUserId="7447" LastEditDate="2018-01-01T00:26:31.083" LastActivityDate="2018-01-01T00:26:31.083" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5283" PostTypeId="1" CreationDate="2017-12-29T01:05:58.263" Score="2" ViewCount="421" Body="&lt;p&gt;I've recently downloaded Futurama: Worlds of Tomorrow on my phone, and I noticed it has a progress bar with humorous messages in it (it usually loads fast enough for only two messages to appear). Two much older games I can remember that had the same feature were Sim City 2000 (&quot;reticulating splines&quot;) from 1993, and Afterlife released in 1996. Afterlife even had such messages as &quot;Bored with loading, restarting&quot; which would temporarily set the progress back to the beginning without affecting the real load time, and I believe it also had a mirror image progress bar that increased to the left.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the first game (or other software) to display the loading progress in a humorous way?&lt;/p&gt;&#xA;" OwnerUserId="2067" LastActivityDate="2017-12-29T01:05:58.263" Title="What was the first game to use humorous progress updates?" Tags="&lt;history&gt;" AnswerCount="0" CommentCount="6" ClosedDate="2018-01-07T08:32:25.903" ContentLicense="CC BY-SA 3.0" />
  <row Id="5284" PostTypeId="1" AcceptedAnswerId="5293" CreationDate="2017-12-29T10:32:41.347" Score="29" ViewCount="7560" Body="&lt;p&gt;In &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/e/e0/Zilog_Z-80_Microprocessor_ad_May_1976.jpg&quot; rel=&quot;noreferrer&quot;&gt;a Zilog ad from 1976 comparing the Z80 and Intel 8080&lt;/a&gt;, the following table is presented:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OS1Pz.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OS1Pz.jpg&quot; alt=&quot;Table comparing the Z80 and the 8080, showing each processor&amp;#39;s number of &amp;quot;instructions&amp;quot; and &amp;quot;OP codes&amp;quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the difference here between &quot;Instructions&quot; and &quot;OP Codes&quot;?  In my experience, the two terms are either used interchangeably to refer to a particular machine language command understood by a processor, or else &quot;instruction&quot; is used to mean a particular instance of an opcode along with its operands.  But obviously whoever prepared the table for this ad is making a different distinction between the two terms.  Maybe they meant something different back then?&lt;/p&gt;&#xA;" OwnerUserId="6527" LastActivityDate="2020-06-10T10:45:19.137" Title="What's the difference between &quot;opcode&quot; and &quot;instruction&quot; in this Zilog ad?" Tags="&lt;z80&gt;&lt;8080&gt;&lt;terminology&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5285" PostTypeId="2" ParentId="5284" CreationDate="2017-12-29T10:43:20.300" Score="17" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What is the difference here between &quot;Instructions&quot; and &quot;OP Codes&quot;? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Instruction:&lt;/strong&gt; A directive for a certain action, like ADD, SUB or MOV as a whole.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;OP-Code:&lt;/strong&gt; The Encoding of an instruction as seen by the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the Z80 has 1 ADD instruction and 20 ADD op-codes.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In my experience, the two terms are either used interchangeably to refer to a particular machine language command understood by a processor&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. An instruction refers to a Assembler mnemonic, which again may have several opcodes. Op-code in contrast always and only refers to the first byte/word (usually) in object code. Then again, when looking at code, instruction also may describe the whole works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Everything else is lazy usage.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or else &quot;instruction&quot; is used to mean a particular instance of an opcode along with its operands.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's the other way around. Well, at least with CPUs like a most old 8 bit are, where the op-code inherently encoded what operands are used and how they are encoded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As usual there are three variations between instruction and opcode possible, depending on the instruction structure:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The op-code (word) defines a certain operation, its workings, components and encoding. 6502 or Z80 opcodes are a good example.&lt;/li&gt;&#xA;&lt;li&gt;The op-code defines operation, workings, and component range, but used components are encoded in separate elements (bytes/words). Example IBM/370&lt;/li&gt;&#xA;&lt;li&gt;The op-code defines operation and workings, components and encoding is told in a follow up. x86 works much that way&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And as usual, in real life these definitions can get mixed up - like with the 8086 having the operand size encoded within the op-code, but the operants used and their encoding denoted in a following (ModRM) byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or to make it even more confusing, on the assembler side the 6502 has different mnemonics depending on the registers involved, but not for the addressing. So where a Z80 alike assembler line would be &lt;code&gt;MOV A,X&lt;/code&gt;, thus making the $8A opcode part of the encodings of the MOVe instruction, a 6502 assembler assigns &lt;code&gt;TXA&lt;/code&gt; (*1) as an instruction of it's own.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But obviously whoever prepared the table for this ad is making a different distinction between the two terms.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It simply shows that there are a certain number of things the CPU can do with an even higher degree of variation. After all, advertisement with numbers is nothing but a pissing contest.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Maybe they meant something different back then?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nope. Meaning did never change, just today, with less direct contact with the lower levels, people tend to use these terms in a less accurate, lazy way.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Before you ask, the reason was (as with the 6800) to simplify the assembler as much as possible. With register named in the mnemonic then only one operand was left (if at all) and that was always a memory operand.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-10T10:45:19.137" LastActivityDate="2020-06-10T10:45:19.137" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="5286" PostTypeId="1" CreationDate="2017-12-29T10:44:51.470" Score="6" ViewCount="519" Body="&lt;p&gt;The SAM Coupé was a ZX Spectrum compatible computer with a 6MHz Z80, 256K RAM minimum, enhanced graphics and sound and an improved BASIC amongst other features. My question is about its memory. The RAM in a standard SAM is two 44256 DRAM chips of 256Kx4 bits in a 512x512 row/column arrangement, so using 9-bit row/column addresses. The Z80 only has a 7-bit refresh counter and the SAM's display (in modes 3 and 4) can be completely switched off, giving the Z80 apparently uncontended access. So what refreshes all the memory rows?&#xA;(Schematic reference: &lt;a href=&quot;http://velesoft.speccy.cz/samcoupe_schematics-cz.htm&quot; rel=&quot;noreferrer&quot;&gt;http://velesoft.speccy.cz/samcoupe_schematics-cz.htm&lt;/a&gt; )&lt;/p&gt;&#xA;" OwnerUserId="3776" LastActivityDate="2017-12-29T11:49:30.180" Title="How does the SAM Coupé refresh its RAM?" Tags="&lt;hardware&gt;&lt;z80&gt;&lt;memory&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5288" PostTypeId="2" ParentId="5286" CreationDate="2017-12-29T11:49:30.180" Score="7" Body="&lt;p&gt;According to the schematic posted, the only possible component that could be performing the refresh is the chip identified as &quot;ASIC&quot;.  It has 9 pins labelled &quot;MADD0&quot;..&quot;MADD8&quot;, which are the only connections to the RAM address pins.  I know that &lt;a href=&quot;https://twitter.com/zxprojects/status/623630706766401540?lang=en&quot; rel=&quot;noreferrer&quot;&gt;some work has been done reverse engineering this chip&lt;/a&gt; and maybe @mcleod_ideafix will let us know in more detail later, but I'm going to guess that it detects the Z80's refresh cycles and extends the refresh counter with a couple of extra bits.  At 6MHz, this would generate a full cycle of refreshes in at most 2ms, so is clearly fast enough for the RAM, which requires all 512 rows refreshing in 8ms.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2017-12-29T11:49:30.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5289" PostTypeId="1" AcceptedAnswerId="5290" CreationDate="2017-12-29T12:24:47.563" Score="26" ViewCount="2848" Body="&lt;p&gt;I keep reading that when it was first released, there was a variant of the IBM PC model 5150 that had only 16KB of RAM installed.  From a hardware perspective, this would clearly work - the 5150 motherboard had sockets for 4 banks of 4116-type DRAM chips, and switches to select RAM size that did go down to 16KB, but from a software perspective I really can't see how this could possibly have worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5253/547&quot;&gt;recently discussed&lt;/a&gt;, the PC's BIOS loads boot code at address 0000:7c00 - i.e., at the top of the 32KB section of memory.  On a system with only 16KB installed, this clearly won't work, so how could a 16KB system boot?  Or was it only possible to use such a system with ROM BASIC?&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="11916" LastEditDate="2020-03-14T09:37:37.393" LastActivityDate="2020-03-14T09:37:37.393" Title="How did an IBM 5150 with 16KB RAM work?" Tags="&lt;ibm-pc&gt;&lt;memory-layout&gt;&lt;boot&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5290" PostTypeId="2" ParentId="5289" CreationDate="2017-12-29T12:30:01.947" Score="30" Body="&lt;p&gt;What Boot Code? With 16 KiB it was pitched against the Apple II or the Commodore/Tandy/Atari with BASIC, nothing else. Remember that the PC (!) had a the cassette port? That's the intended mass storage for a 16 KiB system :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The minimum requirement for floppy use was, as you already guessed, 32 KiB. And oh wonder, DOS &lt;em&gt;can&lt;/em&gt; be booted on a 32 KiB machine. Still, not much space would have been left for any application. 48 KiB was a more realistic size for real world applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(DOS itself (everything without the shell &lt;code&gt;COMMAND.COM&lt;/code&gt;) was about 9 KiB for 1.x, 24 KiB for 2.x, 36 KiB for 3.0 and 46 KiB for 3.3. So minimum RAM to boot would be 32 KiB for 1.x, 48 KiB for 2.x and 64 KiB for 3.0 - after 3.1 a memory expansion board would be needed to boot on a genuine PC.)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-13T01:07:09.573" LastActivityDate="2020-03-13T01:07:09.573" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="5291" PostTypeId="2" ParentId="433" CreationDate="2017-12-29T13:09:53.050" Score="3" Body="&lt;p&gt;In short, the Amiga 500 expansion port was an exact electrical equivalent of the expansion port of Amiga 1000, and very similar to the Zorro II card slots of the Amiga 2000 and above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Zorro II card slots of the Amiga 2000 and greater models had 14 extra pins compared to the Amiga 500/1000 expansion port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See: &lt;a href=&quot;http://www.ntrautanen.fi/computers/hardware/misc/amiga_zorro.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ntrautanen.fi/computers/hardware/misc/amiga_zorro.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you remove the expansion port cover on an Amiga 500, the large chip you see above the card edge connector is the actual 68000 processor - so you can see that the expansion port provides very direct connectivity to the processor.&lt;/p&gt;&#xA;" OwnerUserId="7447" LastActivityDate="2017-12-29T13:09:53.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5292" PostTypeId="2" ParentId="5245" CreationDate="2017-12-29T13:56:39.210" Score="4" Body="&lt;p&gt;Even if the main board does not feature place for additional memory chips, in the past it was quite possible just to solder the extra row of chips on the top of the existing ones. All power, control and data buses can be shared, often just a single chip selection pin must be bent apart and separately connected. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Address resolution logic requires some tweaks to produce the selection signal for the top row. It may be necessary to cut the track of the bottom row control signal and implement a different logic for it as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, such changes are only easy to do for somebody who understands the computer well and most likely have assembled it with own hands. Here is the fragment of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Radio-86RK&quot; rel=&quot;nofollow noreferrer&quot;&gt;Radio86RK&lt;/a&gt; mainboard where amount of RAM has been doubled this way (I am the author). The chips are the Soviet clones of 4116.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0xgUW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0xgUW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="496" LastEditorUserId="496" LastEditDate="2019-08-06T04:42:34.787" LastActivityDate="2019-08-06T04:42:34.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5293" PostTypeId="2" ParentId="5284" CreationDate="2017-12-29T14:13:44.673" Score="34" Body="&lt;p&gt;The definition of &quot;instruction&quot; and &quot;OP code&quot; (aka &lt;em&gt;operation code&lt;/em&gt;) is a bit fuzzy because it depends on how humans view the CPU. So the designers and their marketing department mostly get to pick the numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Operation code is the easier of the two: it is the number of different valid instruction byte sequences, excluding those parts of the instruction that encode constants. So in the advert given, they are counting the basic single-byte opcodes, plus those double-byte Z80 opcodes with ED, DD, etc prefixes. The Z80 does not commingle constants with its instructions, so there is a simple and obvious mapping of opcodes to bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instruction would be the number of conceptually different operations that the CPU makes. For example, you care more that the machine can add, divide, branch, read an I/O device, clear interrupts, etc, and less about the registers used to perform the task. This is much more wooly because instructions can be used in surprising ways: is xoring a register with itself an xor or a clear instruction? So in practice it is the number of assembler mnemonics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the number of assembler mnemonics are not an innate property of a CPU. While the manufacturer will normally specify an assembly language, it is possible to invent a new assembly language that compiles down to the same opcodes. Consider the 6502: There is the LDA mnemonic which loads the A register from memory, and covers a number of different opcodes for the different addressing modes. But then there's the TXA mnemonic and loads the A register from the X register and has a single opcode. A third party assembler could choose to treat that as just another LDA form such as &quot;LDA X&quot;, or even decide that LDA/TXA etc are just generalised move instructions and could be written &quot;LD xxx, A&quot;, &quot;LD X, A&quot; etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Counting the number of instructions does make sense in the specific case of comparing the Z80 versus early Intel CPUs: the two instruction sets were quite similar. It is possible to mechanically translate the Intel assember source into Z80 code, so comparing them makes sense. A similar chart comparing ARM versus x86 would be meaningless.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2017-12-29T14:13:44.673" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5294" PostTypeId="1" AcceptedAnswerId="5299" CreationDate="2017-12-29T18:51:54.270" Score="15" ViewCount="1949" Body="&lt;p&gt;In the 1980s and 90s, there was a fad among the IT industry press to dub the newest &quot;hot&quot; microprocessor on the market as being a &lt;strong&gt;&quot;mainframe-on-a-chip&quot;&lt;/strong&gt;. I have seen this fawning description applied to the Mototola 68000 and 68030, the Intel 80386 and 80486, and the Zilog Z80000. Looking at those particular chips, there's definitely important technical innovation for single-chip microprocessors there.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;68000&lt;/code&gt; Early 32-bit microprocessor&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;68030&lt;/code&gt; Advanced on-board MMU&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;80386&lt;/code&gt; Virtual 8086 mode hardware virtualization&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;80486&lt;/code&gt; Advanced on-board FPU&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Z80000&lt;/code&gt; Z80 fan's vision for world domination&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But I don't see why any or all of these innovations would truly advance the objective of replacing an actual mainframe with a single-chip microprocessor system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is was there ever a single chip microprocessor that fulfilled the role of &lt;em&gt;directly replacing&lt;/em&gt; some aging mainframe system of its day? I think if the mainframe &quot;platform&quot; could be successfully replaced by using the microprocessor to run the &lt;strong&gt;same OS and applications&lt;/strong&gt; (with at least source code compatibility), that should qualify. But I suspect that genuine mainframe applications probably had I/O performance requirements that greatly exceeded what the micros could do.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-03-02T05:51:20.690" Title="Was there ever a genuine &quot;mainframe-on-a-chip&quot; microprocessor?" Tags="&lt;intel&gt;&lt;motorola-68000&gt;&lt;mainframe&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5295" PostTypeId="2" ParentId="5294" CreationDate="2017-12-29T19:12:10.643" Score="5" Body="&lt;p&gt;Does VAX count?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/MicroVAX_78032&quot; rel=&quot;noreferrer&quot;&gt;MicroVAX 78032&lt;/a&gt; was a microprocessor compatible with previous, multiple-chip CPUs and used in new VAXen. &lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2017-12-29T19:12:10.643" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5299" PostTypeId="2" ParentId="5294" CreationDate="2017-12-29T20:17:09.407" Score="29" Body="&lt;p&gt;Yes, &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System_z&quot; rel=&quot;noreferrer&quot;&gt;IBM System z&lt;/a&gt; mainframes (and their predecessors) have been using &quot;mainframe-on-a-chip&quot; microprocessors for a couple decades now. In 1995 I used a IBM PS/2 with an &lt;a href=&quot;https://en.wikipedia.org/wiki/PC-based_IBM-compatible_mainframes#S/390_Processor_Card&quot; rel=&quot;noreferrer&quot;&gt;IBM System/390 Processor Card&lt;/a&gt; in it running MVS. It executed System/390 instructions natively, using (I believe) one of the same microprocessors used in the System/390 mainframes of the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/System/390#S/390_computers&quot; rel=&quot;noreferrer&quot;&gt;According to Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Introduced in 1994, the six generations of the IBM 9672 machines were the first CMOS, microprocessor based systems intended for the high end. The initial generations were slower than the largest ES/9000 sold in parallel, but the fifth and sixth generations were the largest and most powerful ESA/390 machines built.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So in 1994 at least there were microprocessor-based mainframes capable of running real world applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Around the same time I also had a Unisys '486 PC under my desk with a &lt;a href=&quot;http://www.retrocomputingtasmania.com/home/projects/unisysaseries&quot; rel=&quot;noreferrer&quot;&gt;Unisys SCAMP (Single Chip A-series Mainframe Processor) card&lt;/a&gt; in it, but I just used it as a PC to play games on after work. I don't know if the microprocessor used in this card was used in the regular Unisys A-series mainframes of the time.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2017-12-29T20:30:23.437" LastActivityDate="2017-12-29T20:30:23.437" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5300" PostTypeId="2" ParentId="5294" CreationDate="2017-12-29T20:19:41.850" Score="5" Body="&lt;p&gt;Well, this question does lead deep into the gray area of what is a microprocessor and what has to be on chip to qualify as replacement, or do multi chip solutions also count, or when is a second chip an add on ore an extension?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not to mention the basic question what part of a mainframe is considered the CPU. Does the memory interface belog to the CPU or is it part of the memory (subsystem). Do IOCs count as part of the CPU or seperate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least there is not doubt what a mainframe is, as there's nothing but /370(ish) (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It maybe even does come down to the question, when is a microprocessor a microprocessor. There are not many chips that can be considered useful withotu supporting chips. A 8086 can only be used in very simple systems without 8282 and 8284 chips to decode its bus signals to be understood by 'normal' I/O or RAM/ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said all that, there are many machiens, that could be seen as microprocessor based /370 and alike:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;First&lt;/strong&gt;most might be the IBM 5100. While not based on a single chip CPU (mind you, that was 1975), its discrete CPU did provide a mostly /370 instruction set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt; there was the XT/370 in 1983, and its follow ups with the (main) implementation as one microprocessor. While the machine wasn't particular fast (*2), it did fit with the lower end of what IBM offered as mainframes at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as you already mentioned the true capability of a mainframe is it's I/O performance. And that's something not even the later (1988) MCA implementation could do like the big ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During that time not only IBM, but also other mainframe manufactuerers did try to sell microprocessor based /370s. For example SIEMENS got it's PC-2000, a single board add on for its Multi Bus based PC-MX2 Unix machines (NS32016 based). Fujitsu offered a similar setup. Again, due the &lt;em&gt;rather&lt;/em&gt; low I/O performance, they where only designated for development. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*And then** there where also IBM (and other) mainframes using single chip CPUs, or better chip module, implementations starting in the late 1980s. First they where confined to the lower end, but nowadays next to all are based arround such implementations. Strictly they are not single chip, but then again, a Pentium II als isn't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Last&lt;/strong&gt; but not least, today many lower to mid range systems are no longer based on 'real' implementations, but rather standard microprocessors running a /370 emulation. Fujitsu offers several mainframes based on Intel Xeon processors. Their actual machines can even be partitoned to run mainframe OS(es), Windows and Linux in parallel. This development is based on thechologies  they aquired when taking over Siemens-Nixdorf. Who again started it (codename Sunrise) when Siemens did spin off their chip division (Infineon), so creating their chips couldn't be done inhouse anymore. At that time it was SPARC based, but now it's moved over to Intel. Still, the top end models are still based on custom implementations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before shuning emulation as 'not being the real thing' one should keep in mind, that next to every mainframe, beginning with the first /360s, was in part or complete delivered via a microprogrammed environment that changed many times bleow ISA level. The mainframe architecture never was abaut a certain real implementation, but it's an abstraction layer - or better a collection thereof.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Ok, there is another kind: Scientific processing with CDC and Cray as main players. But this kind never realy had the pressure to put up with decaded of ISA compatibility. Scientific applications, if they ever where used for more than a few years, where all source code available and just ported to the next generation anyway. There was never a real need to develop compatible microprocessor based solution - they got right away replaced by stock microprocessors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - 0.1 /370 MIPS may not sound fast, but at the same time a .9 MIPS machine with 1,25 MiB of memory was good to serve real time data for 200+ individual terminal users.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-03-02T01:55:14.770" LastActivityDate="2018-03-02T01:55:14.770" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5301" PostTypeId="2" ParentId="1927" CreationDate="2017-12-29T20:32:04.433" Score="10" Body="&lt;p&gt;Actually, it's 256 MB only for A4000/T CPU cards - it's 128 MB for A3000/T cards.&lt;/p&gt;&#xA;&lt;p&gt;The reason for this is that Fat Gary asserts the _RAMSLOT signal for this memory window. That way, the CPU card knows when to activate the RAM controller and to run an internal cycle.&lt;/p&gt;&#xA;&lt;p&gt;Overcoming this limit is (probably) possible but would require a complete address decoder and overriding the decoder on the mainboard.&lt;/p&gt;&#xA;&lt;p&gt;From &lt;a href=&quot;http://www.thule.no/haynie/systems/amiga3k/docs/a3kcpu.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The A3000 Local Bus Expansion Slot Specification&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;3.5 Other Local Bus Signals&lt;/p&gt;&#xA;&lt;p&gt;Local Slot Memory Decode (/RAMSLOT)&lt;/p&gt;&#xA;&lt;p&gt;This is an address based chip select for the region of memory allocated to the local bus&#xA;slot, $08000000-$0fffffff.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="5200" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2017-12-29T20:32:04.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5302" PostTypeId="1" AcceptedAnswerId="5304" CreationDate="2017-12-29T22:12:02.600" Score="11" ViewCount="2068" Body="&lt;p&gt;While look at some 3.5&quot; floppy disk drives I have, I noticed they have a little resistor missing next to &lt;code&gt;RDY&lt;/code&gt; and, looking it up online, I find some instructions for adding a resistor there to enable it. What is it and why would I want to enable it (or why is it not already enabled)?&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2019-11-03T07:47:21.160" Title="Why is the RDY signal on floppy disk drives disabled?" Tags="&lt;floppy-disk&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5303" PostTypeId="2" ParentId="5302" CreationDate="2017-12-29T22:29:07.677" Score="10" Body="&lt;p&gt;PCs don’t use the ready signal, and since most floppy drives ended up used in PCs, manufacturers could save a little by ignoring it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You’ll need it if you want to use the drive in some other systems (notably &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/104/79&quot;&gt;the Amiga&lt;/a&gt;, the Amstrad CPC and PCW). It must be &lt;a href=&quot;http://www.hermannseib.com/documents/floppy.pdf&quot; rel=&quot;noreferrer&quot;&gt;active low when a disk is in the drive&lt;/a&gt;, and importantly, it must switch to high and back when the disk is replaced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some drives have jumpers which can be used to enable the ready signal; others like yours require modifications.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2017-12-29T22:29:07.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5304" PostTypeId="2" ParentId="5302" CreationDate="2017-12-29T22:39:54.110" Score="12" Body="&lt;p&gt;Ready was traditionally the signal that went active after the motor had been turned on and two index holes had passed. So it primarily indicates that a disk is present, and also implies that the drive has had time fully to accelerate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM redefined that pin to indicate disk change — it goes inactive when a disk is ejected and active again when the head steps a track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would dare imagine the resistor allows you either to pick a behaviour, or to intermingle them; a combination of both tests works on some machines.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2017-12-29T22:39:54.110" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5305" PostTypeId="1" CreationDate="2017-12-29T23:55:25.743" Score="9" ViewCount="1114" Body="&lt;p&gt;I have a 3.5&quot; floppy drive in an IBM XT 286 (5162). I can boot DOS from the floppy just fine but when I try to run &lt;code&gt;FORMAT&lt;/code&gt;, it always says that the disk drive is not ready.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A:\&amp;gt;format A:&#xA;Insert new diskette for drive A:&#xA;and strike any key when ready&#xA;&#xA;Formatting...&#xA;Drive not ready&#xA;Format failure&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That's with the DOS 1.1 &lt;code&gt;FORMAT&lt;/code&gt;. With FreeDOS, I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A:\FDOS&amp;gt;format /U /V:dos A:&#xA; Insert new diskette for drive A:&#xA; Press ENTER when the right disk is in the drive...&#xA;Using drive default: 1440k (Cyl=80 Head=2 Sec=18)&#xA; Full Formatting (wiping all data)&#xA;Format_Floppy_Cylinder( head=0 cylinder=0 ) sectors=18 [int 13.5]&#xA;&#xA; Critical error during INT 13 disk access&#xA; INT 13 status (hex): 80&#xA;   Bits: timeout / no response&#xA;   Description: timeout (drive not ready)&#xA; Program terminated.&#xA; [Error 128]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Again, I can boot from the drive just fine so I don't think the cable is backwards or anything like that.&lt;/p&gt;&#xA;" OwnerUserId="7316" LastEditorUserId="15334" LastEditDate="2021-01-13T10:29:00.433" LastActivityDate="2021-01-13T10:29:00.433" Title="Why might I get &quot;drive not ready&quot; when formatting a floppy?" Tags="&lt;floppy-disk&gt;&lt;dos&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5306" PostTypeId="2" ParentId="5305" CreationDate="2017-12-30T00:05:24.990" Score="9" Body="&lt;p&gt;It is likely that the &quot;start of track&quot; signal, which is generated when the index hole of the floppy disk passes the sensor,  is not sent from the drive to the controller. It could be due to a bad contact somewhere, a broken LED in the drive, a piece of debris stuck in the index hole in the floppy, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When reading, the signal is ignored, but it is essential for formatting.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2017-12-30T00:05:24.990" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5307" PostTypeId="2" ParentId="5305" CreationDate="2017-12-30T01:55:52.273" Score="6" Body="&lt;p&gt;(&lt;strong&gt;Caveat&lt;/strong&gt;: The following information is strictly only true for the XT BIOS, not 100% sure about the XT286, but I'd say it is as compatible here as the AT is)&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Conclusion from above messages:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;INT 13h timeout (&lt;code&gt;80h&lt;/code&gt;) occures whenever the 'Wait for Interrupt' BOIS routine doesn't detect an interrupt within 2 seconds. So I say the FDC doesn't return from whatever command (usually Seek) is issued. My bet would be on a missing track 0 signal.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Detailed workings:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Whenever a Seek or Recalibrate/Reset is issued, the 8088 goes into an active wait loop, looking for a flag which is set whenever a disk interrupt occures. The only interrupts possible here hit when the drive has found the desired track (or track 0). When the interrupt occures, the interrupt routine sets the flag, which again breaks the wait loop. Now the FDC status is read and returned. Good or bad, either way (CF=0 if good, or CF=1 when bad).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is no FD interrupt within the ca. two second wait, the loop terminates and returns a general error which is returned by the floppy handler as &lt;code&gt;CF=1&lt;/code&gt;, &lt;code&gt;AH=80h&lt;/code&gt;, '&lt;code&gt;Drive timed out, assumed not ready&lt;/code&gt;'.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="2126" LastEditDate="2017-12-30T11:09:14.933" LastActivityDate="2017-12-30T11:09:14.933" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5308" PostTypeId="1" AcceptedAnswerId="5314" CreationDate="2017-12-30T06:15:12.823" Score="4" ViewCount="316" Body="&lt;p&gt;From my understanding, an important advantage &lt;a href=&quot;https://www.giantbomb.com/nec-pc-9801/3045-112/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-98&lt;/a&gt; have over IBM compatible PC was that it is better at handling ideograph based characters which are common in East Asian countries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why didn't other East Asian countries besides Japan adopt the PC-98 system for this reason?&lt;/p&gt;&#xA;" OwnerUserId="7462" LastEditorUserId="4138" LastEditDate="2017-12-30T11:37:04.927" LastActivityDate="2017-12-30T16:27:07.247" Title="With better character handling capability, why didn't PC-98 system succeed in rest of East Asia?" Tags="&lt;hardware&gt;&lt;history&gt;&lt;ibm-pc&gt;&lt;display&gt;&lt;text&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5309" PostTypeId="2" ParentId="5284" CreationDate="2017-12-30T10:31:03.567" Score="4" Body="&lt;p&gt;In &lt;strong&gt;Z80&lt;/strong&gt; assembly language the code looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;add a,5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where &lt;code&gt;add&lt;/code&gt; is &lt;strong&gt;instruction&lt;/strong&gt; and &lt;code&gt;a,5&lt;/code&gt; are the &lt;strong&gt;operands&lt;/strong&gt;. You can have many permutations of the same &lt;strong&gt;instruction&lt;/strong&gt; (with different operands) each of which has separate &lt;strong&gt;op.code&lt;/strong&gt;. For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;add a,b&#xA;add a,c&#xA;add a,d&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;all are still the &quot;same&quot; instruction &lt;code&gt;add&lt;/code&gt; but with different &lt;strong&gt;operands&lt;/strong&gt; and also &lt;strong&gt;op.codes&lt;/strong&gt; (&lt;code&gt;opc [hex]&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;opc      T0 T1 MC1   MC2   MC3   MC4   MC5   MC6   MC7   mnemonic&#xA;&#xA;80       04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 ADD A,B&#xA;81       04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 ADD A,C&#xA;82       04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 ADD A,D&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PS&lt;/strong&gt; that comparison table was not accurate as there is much more op.codes for Z80 (which where discovered later on). My &lt;code&gt;100%&lt;/code&gt; &lt;strong&gt;Zexall&lt;/strong&gt; passable emulation got &lt;code&gt;1792&lt;/code&gt; op.codes (some of them do the same thing however) opposing to yours &lt;code&gt;696&lt;/code&gt;. The &lt;strong&gt;opc&lt;/strong&gt; size can wary a lot for example it got even 3+1 byte opcs like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;opc      T0 T1 MC1   MC2   MC3   MC4   MC5   MC6   MC7   mnemonic&#xA;&#xA;FDCBS2FF 23 00 M1R 4 M1R 4 MRD 3 MRD 5 MRD 4 MWR 3 ... 0 SET 7,(IY+S8),A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The number of instructions depend on what is considered as different instruction. Usually different type of operand count as different instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more info and my complete list of op.codes see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/18911590/2521214&quot;&gt;SO/SE: What's the proper implementation for hardware emulation?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2017-12-30T10:44:20.023" LastActivityDate="2017-12-30T10:44:20.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5310" PostTypeId="2" ParentId="5308" CreationDate="2017-12-30T13:12:58.757" Score="2" Body="&lt;p&gt;The same question could be asked about other systems that where successful in their home country or region. Like the PC-D or the EuroPC in Germany, Amstrads 1512 in the UK (and somewhat on the continent) and several others. Even thru the markets thruout Europs where rather similar in their requirements, and the machiens did do well, none of them became an all European success. Instead the (more or less standard) IBM PC did will all over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's eventually like why VHS succeedes against Beta or Video 2000. Undoubtful higher quality here as well didn't winn against sheer world wide sales numbers and thus easy availabiltiy thru countless channels and at (seamingly) low price.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2017-12-30T13:12:58.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5311" PostTypeId="1" AcceptedAnswerId="5317" CreationDate="2017-12-30T14:04:32.150" Score="9" ViewCount="734" Body="&lt;p&gt;The original ZX Spectrum has a resolution of 256x192, for 32x24 text. Some later clones add a 512x192 mode. The most obvious thing to do with that is try to display 64x24 text. According to &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum_graphic_modes#512%C3%97192_monochrome&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/ZX_Spectrum_graphic_modes#512%C3%97192_monochrome&lt;/a&gt; exactly this was done:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;This mode was mainly used to display 64×24 or 80×24 columns text screen and only Timex Sinclair computers and some Russian clones can display it. There are two graphics editors for this mode and it is supported by BASIC64 and some CP/M implementations.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Spectrum outputs video to a TV, or to a composite video monitor with the frequencies and resolution of a TV. Given that, the effective resolution of the display is limited no matter what the computer outputs. The consensus is that 80-column text is never going to be usable unless you have a monitor with frequencies and resolution designed for computer use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How usable is the 64x24 text output in practice?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would the answer change if you were adapting the machine to NTSC rather than PAL?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="3290" LastEditDate="2020-06-07T04:09:20.840" LastActivityDate="2020-06-07T04:09:20.840" Title="Spectrum clones 512x192 mode usable text resolution" Tags="&lt;graphics&gt;&lt;display&gt;&lt;ntsc&gt;&lt;zx-spectrum-clones&gt;&lt;pal&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5312" PostTypeId="1" AcceptedAnswerId="19673" CreationDate="2017-12-30T15:47:48.573" Score="6" ViewCount="773" Body="&lt;p&gt;Heading says it all. I have a Spectrum +3 (with +3e ROMs if that makes any difference) with a DivMMC SD card interface.&lt;/p&gt;&#xA;&lt;p&gt;This works fine in +3e mode, but as I like to use the +3 with CP/M plus (Original Amstrad/Locomotive) are there any CP/M drivers available to use the DivMMC as a drive C:?&lt;/p&gt;&#xA;&lt;p&gt;Or are there any technical reasons why this wouldn't be possible?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RPunao9JxBo&quot; rel=&quot;nofollow noreferrer&quot;&gt;This video&lt;/a&gt; seems to imply it's possible with a DivIDE, at least. Unfortunately, there is no further explanation on that.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="7347" LastEditDate="2021-04-22T18:25:07.223" LastActivityDate="2021-04-24T05:03:23.907" Title="Are there any drivers available to use DivMMC on the Spectrum +3e with CP/M plus?" Tags="&lt;zx-spectrum&gt;&lt;cp-m&gt;&lt;spectrum-plus-3&gt;&lt;sd-card&gt;&lt;divmmc&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="5313" PostTypeId="1" AcceptedAnswerId="5315" CreationDate="2017-12-30T15:48:05.343" Score="5" ViewCount="1274" Body="&lt;p&gt;The Z80A, rated for a maximum clock speed of 4 MHz, was a very widely used CPU in the 8-bit era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80H, introduced in 1986, was rated for a maximum clock speed of 8 MHz. This would at first glance appear to provide an excellent drop-in upgrade in cases where a computer is trying to be backward compatible with an older model, but now has fast enough memory chips to support the higher speed; you would get exactly double speed, which can easily be halved again for old hardware or software that depends on exact timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, InfoWorld Oct 18, 1982, says, &quot;Performance gained from the Z80H is expected to exceed that of the standard 4-MHz Z80 by four to six times. The new version of the Z80 has been designed to take advantage of 16-bit peripherals originally intended for Zilog's contender in the 16-bit race, the Z8000.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That seems to imply that it also decreases the number of clock cycles needed to carry out typical instructions. Is that the case? If it is, that would be good news for the extra performance, but bad news if you also need the ability to run at exactly the old timing; no way to have both abilities in the same chip?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2017-12-30T17:08:00.117" Title="How much faster is the Z80H?" Tags="&lt;z80&gt;&lt;performance&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5314" PostTypeId="2" ParentId="5308" CreationDate="2017-12-30T16:27:07.247" Score="3" Body="&lt;p&gt;While the PC-98 became the dominant PC architecture in Japan (up until Windows 95 made it irrelevant) I don't think it had any significant advantage beyond BIOS support for Japanese. On the other hand, it had the significant disadvantage of being largely proprietary to NEC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM PC compatibles could made by anyone, including by a number of the Taiwanese companies that today dominate the PC OEM market. The lack of ideograph support on IBM PCs had a very simple solution: the &lt;a href=&quot;https://en.wikipedia.org/wiki/Hercules_Graphics_Card&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hercules Graphic Card&lt;/a&gt;. This card, introduced in 1982, was basically an MDA card with &quot;high resolution&quot; monochrome graphics support, the missing piece that prevented IBM PCs from displaying ideograph characters. In particular the card was designed to handle the Thai alphabet, which like Chinese ideographs can't be displayed properly on the MDA or CGA cards of the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Hercules Graphics Card was soon cloned and quickly became a &lt;em&gt;de facto&lt;/em&gt; part of the IBM PC compatible architecture. Given the availability of relatively cheap clone IBM PCs made in Asia and capable of displaying ideographs and other Asian texts, it's really not surprising that the proprietary NEC PC-98 computers didn't catch on there.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2017-12-30T16:27:07.247" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5315" PostTypeId="2" ParentId="5313" CreationDate="2017-12-30T17:00:24.720" Score="8" Body="&lt;p&gt;The Z80H is, to my knowledge, an exact drop-in replacement for the original Z80, just with a higher clock frequency. The instruction set and the pin-out (if purchased in the same package) are 100% identical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;InfoWorld's comment would rather point into the direction that the new CPU would be able to keep up with the speed of the mentioned devices - just because of its higher clock speed. I don't see why the citation would seem to &quot;imply a decreased number of clock cycles&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The very same &lt;a href=&quot;https://books.google.de/books?id=CjAEAAAAMBAJ&amp;amp;printsec=frontcover&amp;amp;dq=InfoWorld%20Oct%2018,%201982&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=0ahUKEwjVt-nHm7LYAhUR5qQKHWs7B1Q4PBDoAQgzMAI#v=onepage&amp;amp;q=Z80H&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;article&lt;/a&gt; states that the improvement (to get the CPU to work at 8 MHz) was achieved by improving &lt;em&gt;the process control&lt;/em&gt; rather than &lt;em&gt;the mask&lt;/em&gt;  in production which clearly tells me that thing is identical to a Z80A.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2017-12-30T17:08:00.117" LastActivityDate="2017-12-30T17:08:00.117" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5316" PostTypeId="2" ParentId="5284" CreationDate="2017-12-30T17:55:09.540" Score="0" Body="&lt;p&gt;Well, they are definitely cheating here since they state 158 instructions &quot;including all of the [78] 8080A's instructions&quot;.  The problem being that the Z80 (fortunately) combines a number of different 8080A instructions into single instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zilog has ADD where Intel has ADD and DAD, EX where Intel has HTHL and XCHG, LD where Intel has LXI and MOV (and likely others), JP where Intel has JPE, JPO, JP, JMP, JM... and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mean, that reduction in instructions is a real help, but here they go and only count the non-Intel instructions and add them to the Intel ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or maybe they use the (upwards compatible) TDL assembly instructions?  No idea.&lt;/p&gt;&#xA;" OwnerDisplayName="user7467" LastActivityDate="2017-12-30T17:55:09.540" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5317" PostTypeId="2" ParentId="5311" CreationDate="2017-12-30T18:05:57.897" Score="12" Body="&lt;p&gt;I had two micros when I was growing up: the SAM Coupé and the Acorn Electron.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SAM Coupé has a 512x192 mode much like you discuss. The SAM's display is physically wider than a Spectrum's though, pixels being approximately 1.25 times as wide as tall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Acorn Electron inherits full 80-column 640x256 video from its progenitor, the BBC Micro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both cases my recollection, across the TVs we had in the house during the early '90s, is that the high-resolution text was legible but uncomfortable. I spent a lot of time programming on the SAM in particular (because it's so much nicer when there's a floppy drive) but don't recall spending all that much time in its high-resolution mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To go beyond the qualitative, it just so happens that I'm an emulator author and that one of those includes an emulation of the Acorn Electron and is capable of displaying its output via a composite signal. This isn't one of those hacky &quot;PAL filters&quot; that tries to post-process a frame according to what I and an echo chamber feel like a TV did, it really generates a real composite signal, then really decodes it. So colour artefacts, frequency limits, occur naturally and accurately. Apologies for the sales pitch, but I hope it explains why I think the screenshot below is relevant to the conversation — that's what happens when I simulate the Electron's 640-pixel video mode via a composite signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JEXsi.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JEXsi.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Honestly, it looks worse than it is when pictured statically, as the PAL colour clock is out of phase with the pixel content, so it sort of swims frame by frame: the colour fringing moves around and your brain is able to get a little more of the form than it can from just a static shot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NTSC is even more limiting than PAL: due to a different trade-off between available spectrum and quality of signal, the luminance part of the signal can contain only around 80% as much detail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II, which acquired an 80-column mode not too long after launch, gained a quick fix for that: in text mode it declines to provide a colour burst. The colour burst is the part of a composite signal that tells a TV both the the current colour phase and indicates that this is a colour-encoded signal. High-end sets born into a world where they might receive a colour or black and white signal can use knowledge that what they're showing is black and white to apply less filtering to the signal. But all sets should decline to decode colour, so you should at least be spared the colour fringing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, cheap black and white sets will usually give a much better picture: they make no effort whatsoever to remove the colour subcarrier. You get a full-frequency image. If the source image is black and white then that can be exactly as good an image as a real monitor. If it has colours then you'll see some chroma dots around, but both PAL and NTSC subcarriers were selected to reduce their visibility: that's why they're out of phase with the scanning frequency.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-01-14T21:59:03.550" LastActivityDate="2020-01-14T21:59:03.550" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5318" PostTypeId="1" AcceptedAnswerId="5319" CreationDate="2017-12-30T19:03:54.357" Score="11" ViewCount="791" Body="&lt;p&gt;Assuming an 80's-era computer that is in good condition and used regularly, what, if any, routine maintenance is needed? For example, do I need to do anything to keep the floppy disk drive(s) in good condition? Or the power supply?&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2018-01-10T03:25:13.910" Title="What, if any, routine maintenance does an old computer need?" Tags="&lt;maintenance&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5319" PostTypeId="2" ParentId="5318" CreationDate="2017-12-30T19:12:24.393" Score="10" Body="&lt;p&gt;Handling of 80s machines is not different from any modern computer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Keep 'em in average humidity and remove accumulated lint once in a while.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not smoking is also a plus. Not so much because of appearance, but cigarette smoke contains a lot of oily and sticky substances that build up layers inside that reduce airflow and seal off chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, old machines are less prone than modern ones with their tightly designed, large throughput airflow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thinking of it, forcing chips back into their sockets might be another maintenance move. Depending on socket quality, chips have a tendency to creep slowly out of their sockets. A tiny bit every thermal cycle. Whoever pressed on some chips in old machines will notice that they often can be moved down a few microns ... sometimes more (*1). Then again it's not really neccessary until there are any problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For long term maintenance it might be good to look inside every now and then (ges with cleaning) and have a look for unexpected change - like shades arround batteries (if equipped with such) large capacitors and power connectors. When the machine is used often, maybe also liten (and check) the power switch for burnings or shades. While sizzling sounds aren't really a sign of danger, they may hint about burn on power contacts. (Thanks to TEMLIB and traal for the hint)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there are also things you should &lt;strong&gt;not&lt;/strong&gt; do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Foremost not using so called cleaning disks. I've seen more heads destroyed by their abrasive workings and/or chemicals used, than I've seen any benefits. Do it like we worked with mainframe disks in the 70s &amp;amp; 80s: take a torch (the electric kind please), look for visible traces and only if clearly dirty clean them. Not using these fast scratching disks, but clean fine linen cloth and alcohol. Slowly rubbing in circles and checking again for change. It's helpful to use a little flat wooden stick (like they come with iced lollies) and sew the cloth up as a sleeve to pull over that stick. This way you're able to move the cloth straight and without too much distortion. The tools we used, were much like this, just premade. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Some may remember that the failure of the Apple III was not only due to low performance, missing compatibility and high price, but also by way too cheap sockets. Sockets that ejected their chips not measured in decades but in a few weeks - leading to the invention of the Apple drop repair move: lifting the III by 4-5cm (2 inch) and dropping it. If that (temporarily) removed symptoms, a round of chip pressing was needed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2017-12-31T16:48:08.070" LastActivityDate="2017-12-31T16:48:08.070" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5320" PostTypeId="2" ParentId="5318" CreationDate="2017-12-31T11:27:34.003" Score="7" Body="&lt;p&gt;Well in the mid 80'ies the common &lt;code&gt;i8080&lt;/code&gt; based computers in my region, like &lt;a href=&quot;https://cs.wikipedia.org/wiki/PMD_85&quot; rel=&quot;nofollow noreferrer&quot;&gt;PMD85&lt;/a&gt;, had a lot of &lt;strong&gt;IC&lt;/strong&gt; sockets which tend to jump the &lt;strong&gt;IC&lt;/strong&gt;s out of it slightly causing instabilities of the computer. So the routine was to take all the &lt;strong&gt;IC&lt;/strong&gt;s from their sockets and push them back in. That also removed some oxidation from the pins and the computer would work again for at least half a year.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later on with the &lt;strong&gt;Z80&lt;/strong&gt; and better memories, the number of &lt;strong&gt;IC&lt;/strong&gt;s used dropped significantly and other problems surfaced like connector oxidation. So the same was applied for all the cartridges and connectors on all the computers/devices at that time. For example, the &lt;a href=&quot;https://cs.wikipedia.org/wiki/Didaktik_40&quot; rel=&quot;nofollow noreferrer&quot;&gt;D40/D80&lt;/a&gt; had a nasty wide connection cable connected directly to the bus of &lt;strong&gt;ZX 48K&lt;/strong&gt;, and without occasional removal it did mess things up from time to time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alcohol cleaning of all the connectors and pins was done when all the above did not help. (I do it till today with my PC's, some of which are 10+ years old and still working).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS. My &lt;a href=&quot;https://cs.wikipedia.org/wiki/Didaktik_Gama&quot; rel=&quot;nofollow noreferrer&quot;&gt;Didaktik Gama 89&lt;/a&gt; built in 1989 is still in working condition (last time I checked).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used to clean the &lt;strong&gt;FDD&lt;/strong&gt; head with a soft tampon and alcohol (maybe once in 2-3 years) and the drives are still working! Some drives loss the head load spring force due to plastic degradation (of the spring housing and lock, the spring is usually OK) so I got one drive reinforced with a plate and some screws and it is also still working...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sad thing is that the old computers were built to last 20+ years and the newer modern ones are unusable after 2-5 years. That much the progress had lead us to ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dust is usually not a big problem in old computers as that was introduced with rotary fan cooling systems which works like vacuum cleaners (they suck in all the dust from the room and stick it to the &lt;strong&gt;PCB&lt;/strong&gt; and &lt;strong&gt;IC&lt;/strong&gt;s) which was not commonly used for &lt;strong&gt;IC&lt;/strong&gt;s until &lt;code&gt;i80486&lt;/code&gt; and computers infected with this was usually due to wrongly designed &lt;strong&gt;PSW&lt;/strong&gt; fans. For such computers occasional dust and dirt removal (once per year) is a good idea... If you do not do it you may be surprised once you start... Once we found &lt;strong&gt;bugged&lt;/strong&gt; &lt;code&gt;i80486&lt;/code&gt; with passive cooling (a ~3.0 cm bug was cooked in on the surface of the &lt;strong&gt;CPU&lt;/strong&gt; for god knows how many years :) )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When none of the above helps there is a possibility of &lt;strong&gt;cold-soldered joints&lt;/strong&gt; which will eat up the tin around a soldered pin to the point that it is no longer electrically connected or represent a resistance or even capacity or thermal joint causing troubles. Once I got a &lt;code&gt;3.5&quot;&lt;/code&gt; &lt;strong&gt;FDD&lt;/strong&gt; where I could take out the power supply connector from the &lt;strong&gt;PCB&lt;/strong&gt; by hand... The solution is to suck out the old thin and apply &lt;strong&gt;soldering-flux&lt;/strong&gt;, new tin and solder again ... Sometimes even just new soldering helps. You can identify such joints by black spots or holes in the tin near the soldered pin. Ideal soldered joint should be smooth and shiny (silver color).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another common electrical problem is bad electrolytic capacitors. They can usually be identified by degraded shape (they are a bit enlarged, usually on the topside of the cylinder) or by the fact that they are a bit loose (you can dangle with them a bit without applying big force or bending their pins). They need to be replaced. They are usually located near &lt;strong&gt;PSW&lt;/strong&gt; (beware, those are kicking long after the device was switched off !!!) or heat source (beware, they can be hot !!!).&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="2126" LastEditDate="2018-01-01T07:27:45.563" LastActivityDate="2018-01-01T07:27:45.563" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5321" PostTypeId="1" AcceptedAnswerId="5363" CreationDate="2017-12-31T18:53:32.713" Score="10" ViewCount="1244" Body="&lt;p&gt;I have an IBM XT 286 which has essentially the same case as the original IBM PC. It has a few minor blemishes, some places where the paint has been chipped off, and some tiny spots of rust. How should I go about restoring the paint?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The case is metal and has two tones of grey/off-white. The paint is also textured. I'd like to preserve the original look as much as possible.&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2021-05-18T14:08:54.563" Title="How to repair paint on IBM PC?" Tags="&lt;ibm-pc&gt;&lt;restoration&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5322" PostTypeId="2" ParentId="5321" CreationDate="2017-12-31T19:21:07.087" Score="7" Body="&lt;p&gt;'Original look' is at least debatable, if not a myth. If you're serious about history, then preserve the scratches as well. Clean them, and, if needed, add some conservation wax or alike. Nothing that can't be removed later on again. For storage/use in a controlled environment like home / office / museum without intense stress there is no need to be protected against more than necessary.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Your question touches a rather sensitive area: How to handle heritage. And as with any emotional topic, there are various viewpoints and answers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actual museum strategies are geared toward preserving the history, not just some fictitious perfect state. Every prop has a history. No matter whether they are funny stickers on a screen, holes for a reset button, or faded key caps for the most used keys. These markings carry at least as much history as a certain special edition paint job, if not more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Especially when considering that our computers are usually a mass produced wares. Maybe compare it with a book. Lets say an ordinary 1890s physics school book. Nice find. Now take the same book with markings of a school boy. Less interesting? Shouldn't they be removed? To make a perfect book again, maybe. But what if the kid was named Albert and later became somewhat famous? Is a flower on page 32 now more important? Well, I'd say it doesn't matter, as it tells something about the user and how bored he was during that lesson. No matter if he later became famous as a scientist or lived an ordinary life as butcher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we want to preserve our heritage, we need to think about history, not shiny things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, being the techno-nerd I am, I will always prioritize functional restoration above everything else. But as soon as that is given, history gets priority.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: Feuer frei :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-01-12T16:30:15.750" LastActivityDate="2018-01-12T16:30:15.750" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5323" PostTypeId="1" AcceptedAnswerId="5326" CreationDate="2017-12-31T22:53:52.720" Score="16" ViewCount="2567" Body="&lt;p&gt;As is well-documented, the Fifth Generation of game consoles brought 3D accelerated graphics hardware to the home market. The main combatants in this particular console war of the mid-1990s were the Sega Saturn, Nintendo 64, and Sony PlayStation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is also pretty well documented how Sega and Nintendo came by their 3D hardware expertise: Sega through their arcade hardware business and Nintendo through their famous partnering with SGI. What I have not seen is much of any documentation on the origins of Sony's 3D hardware in the PS1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that this was all pretty new technology, at least in the realm of affordable bits for consumer devices, it would be surprising if Sony engineered their own unique solution at the 11th hour, and ended up winning this console war to boot!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any known history about when, where, and by whom Sony's original 3D graphics hardware was developed?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="278" LastEditDate="2018-01-01T11:53:03.957" LastActivityDate="2018-01-02T20:55:43.337" Title="Where did Sony's 3D graphics hardware in the PS1 originate?" Tags="&lt;graphics&gt;&lt;sony-playstation&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5324" PostTypeId="2" ParentId="1734" CreationDate="2018-01-01T21:28:54.063" Score="1" Body="&lt;p&gt;I had a ZX81 before I had my Spectrum. I am sure I am not alone in being grateful for the huge improvement, at minimal increased cost of the Speccy compared to the 81.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 81 membrane was very fragile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So a membrane with rubber keys as movement, and feedback to the user, also added protection to the membrane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clive produced hardware that traded off price and reliability, to bring consumer electronics to the masses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, the most common failure of an old spectrum is the membrane. I had to replace mine. They are available on SellMyRetro and elsewhere online, with instructions. Or Mark Fixes Stuff has excellent YouTube videos to show you how.&lt;/p&gt;&#xA;" OwnerUserId="7470" LastActivityDate="2018-01-01T21:28:54.063" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5325" PostTypeId="2" ParentId="688" CreationDate="2018-01-01T21:51:40.290" Score="2" Body="&lt;p&gt;Yes it is pretty easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dataserve is a great site, devoted to retro computing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if you want a video showing you how, to minimise getting it wrong, here is one from Mark Fixes Stuff on YouTube&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://m.youtube.com/watch?v=O61Yy00GHEc&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://m.youtube.com/watch?v=O61Yy00GHEc&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if you are buying, SellMyRetro is a good site.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sure you buy the right membrane. For example, the Spectrum + membrane is different to the rubber key 48k and 16k.&lt;/p&gt;&#xA;" OwnerUserId="7470" LastEditorUserId="7470" LastEditDate="2018-01-01T21:57:18.097" LastActivityDate="2018-01-01T21:57:18.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5326" PostTypeId="2" ParentId="5323" CreationDate="2018-01-02T14:50:11.127" Score="16" Body="&lt;p&gt;I'd be likely to endorse the verdict that Ken Kutaragi designed it alone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kutaragi designed the SPC700, the sound processor used in the SNES. Like any other moderately advanced sound processor, it is part DSP — amongst other things, it contains the logic to pitch shift an audio sample, which pretty much means taking a 1d signal of &lt;em&gt;m&lt;/em&gt; samples across and using it to produce &lt;em&gt;n&lt;/em&gt; output samples. It also has an in-house designed on-board CPU core, albeit that is only of similar complexity to a 6502 (i.e. a generation behind the system's main processor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So he was involved in DSP design within videogame budgets at least prior to 1990.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The step from being able to stretch or compress one-dimensional data from a source size to a destination size, to being able to stretch or compress two-dimensional data from a source size to a destination size isn't actually all that great. And that's the thing the Playstation spends the overwhelming majority of its time doing: the original machine forgets about perspective when it gets to actually painting polygon pixels, reducing the problem to merely stepping at a constant rate through a 2d source to paint a 1d output (i.e. the current scan line).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A smart engineer like Kutaragi could very easily have made that small step in the four years between working on the Super Nintendo and working on the PlayStation, while simultaneously figuring out edge scanning (which as the Playstation does it is also just a linear 2d calculation with a 1d output) and adding fairly generic multiplication-with-accumulate and divide to handle the maths prior to rasterisation. Especially as they licensed the CPU core this time around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a completely separate line of development with no direct influence over Sony, but for evidence of how easily a good DSP can scale up from audio to video usage, see demos such as &lt;a href=&quot;https://www.youtube.com/watch?v=yocH61FLKFY&quot; rel=&quot;noreferrer&quot;&gt;Quake for the Atari Falcon&lt;/a&gt;. That's a 68030 computer from 1992 with an off-the-shelf Motorola 56000 DSP intended to cement Atari's position in recording studios. More than twenty years after the fact, it's churning out a version of Quake that a decent 486 would be proud of (and with perspective-correct textures – take that, Kutaragi!) because the difference between audio processing and graphics processing at that level of sophistication isn't vast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Additional attempts to evidence the close nexus between Playstation-quality 3d and audio generation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the per-channel update process for non-noise on a SID:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while(in perpetuity) {&#xA;    output(sample_function_of(phase))&#xA;    phase += pitch&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where phase is 24 bit, pitch is 16 bit, and &lt;code&gt;sample_function_of&lt;/code&gt; does one of (i) output the top 12 bits (for a sawtooth wave); (ii) output the one-from-top 11 bits XORd with the top bit (for a triangle wave); (iii) output one of two levels by running the top 12 bits through a comparator (for a pulse wave); (iv) do as per the triangle wave but grab the MSB from a different channel (for ring modulation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the SID develops into the Ensoniq, that special phase -&gt; wave logic is removed in favour of simple lookup tables, so you're at:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while(in perpetuity) {&#xA;    output(sample(phase))&#xA;    phase += pitch&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And you can see exactly the same thing arising separately in various other sources, from the early-to-mid-'80s: the Amiga does this, as does the Konami SCC that went into various MSX cartridges, it's just a natural way to perform audio synthesis, and is something the SNES chip does also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Mode 7, discarding the addressing that gets it into a tile map, the SNES does this to source pixels for video output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while(not finished raster line) {&#xA;    output_to_analogue_domain(sample(x, y))&#xA;    x += x_step&#xA;    y += y_step&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If it isn't applying Goraud shading, then the Playstation does almost exactly the same thing, but limits it to the length of that triangle's body on a particular line:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while(not finished scan line) {&#xA;    output_to_frame_buffer(sample(x, y))&#xA;    x += x_step&#xA;    y += y_step&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's just not very different, and doesn't require a huge leap in expertise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional on repurposing of an older 1d DSP for 2d texturing, as it cuts to my contention that the difference isn't substantial:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose you have a 64x64 texture. So you decide to adopt 5.11 fixed point addressing, because that's already a whole lot of subpixel precision. Then suppose you recoded the Playstation loop as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;uint32_t position = (y &amp;lt;&amp;lt; 16) + x&#xA;uint32_t adder = (y_step &amp;lt;&amp;lt; 16) + x_step&#xA;&#xA;while(not finished scan line) {&#xA;    output_to_frame_buffer(sample(position))&#xA;    position += adder&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With &lt;code&gt;sample&lt;/code&gt; being a function that uses only bits 11–15 and 27–31 to look into a 1d blob of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, if you could discard carry between bits 15 and 16 then you've got exactly Playstation-quality texturing, you've just decided to express it oddly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But even if you're stuck using ordinary 32-bit arithmetic then: you've just wrangled 2d interpolation out of a classic 1d 32-bit interpolator. All you've lost through treating it as a 1d problem is an error of 1/2048th of a pixel any time there's carry out of the x component. Which could be every pixel if you're stepping negatively, and otherwise will occur if your texture is tiled. So call that a bit more often than 50% of the time. But is very, very unlikely to be noticeable across the number of pixels you're likely to paint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Switch to 8.8 fixed point and you can instead do:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;uint32_t position = (y &amp;lt;&amp;lt; 16) + x&#xA;uint32_t adder = (y_step &amp;lt;&amp;lt; 16) + x_step&#xA;&#xA;while(not finished scan line) {&#xA;    output_to_frame_buffer(sample(position))&#xA;    position += adder&#xA;    position &amp;amp;= 0x3fff3fff;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now you've got error flowing into y only when you're trying to traverse more than four source pixels for each screen pixel, which you can either hope is unlikely or else ensure is unlikely through MIP mapping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd dare imagine that logic along those lines is behind every low-end machine texturer in existence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But more to the point: if you had silicon implementing 32-bit 1d interpolation already, then repurposing that for a modest texture size of the era isn't a lot more complicated than removing one of the carry lines from your adder and wiring the output of that to your texture lookup in an appropriate fashion. No need for actual computed shifts or ANDs.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-01-02T20:55:43.337" LastActivityDate="2018-01-02T20:55:43.337" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5327" PostTypeId="1" AcceptedAnswerId="5328" CreationDate="2018-01-03T04:43:34.257" Score="35" ViewCount="7928" Body="&lt;p&gt;I understand MS-DOS to be backwards-compatible, so is there a reason to run a version earlier than the last (6.22) on an old computer? The only reason I can think of would be for period-accuracy, but is that it?&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2020-11-14T06:50:59.613" Title="Is there a reason to prefer earlier versions of MS-DOS over later?" Tags="&lt;ms-dos&gt;" AnswerCount="10" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5328" PostTypeId="2" ParentId="5327" CreationDate="2018-01-03T05:25:05.883" Score="40" Body="&lt;p&gt;Later versions of DOS tended to use more memory. On 386 systems, or systems with EMS memory, this wasn't a huge issue because dos could be configured to use memory outside of the standard 640K region for a large proportion of its use, but on 286 machines (which couldn't run EMM386 to emulate EMS memory, but generally didn't have any real EMS) this wasn't possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, I ran DOS 6.2 on my 286 happily for many years, just keeping back a boot disk with 3.3 on it for the rare occasion it was necessary.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-01-03T05:25:05.883" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5329" PostTypeId="2" ParentId="5294" CreationDate="2018-01-03T07:05:13.513" Score="4" Body="&lt;p&gt;Let's assume we're talking &quot;real&quot; Mainframe instruction sets (and don't argue too much about what that means).  Previous commentators mentioned the common ones:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IBM S/370 Based: XT/370, AT/370, P/370&lt;/li&gt;&#xA;&lt;li&gt;IBM S/390 Based: S/390, P/390&lt;/li&gt;&#xA;&lt;li&gt;Unisys A-Series: SCAMP Micro-A&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are a couple of more obscure ones:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;NEC SX: The SX-ACE is a single chip vector/integer processor on a PCI-e card.  Unfortunately, you can't buy it outside of one of NECs supers right now.  But earlier you could get the NEC SX-6i and later SX-8i which were single-node (multi-chip module) deskside versions of the SX architecture.&lt;/li&gt;&#xA;&lt;li&gt;NEC PX7x00: These are single-chip versions of the NEC ACOS mainframes, though they are always packaged as redundant pairs.&lt;/li&gt;&#xA;&lt;li&gt;Fujitsu GS21: Single-chip descendants of the FACOM mainframe are still being sold.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-01-03T07:05:13.513" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5330" PostTypeId="2" ParentId="5327" CreationDate="2018-01-03T11:43:40.830" Score="10" Body="&lt;p&gt;Earlier versions of MS-DOS 6 included DoubleSpace - a compression utility that was important in the days of smaller hard drives and high costs per megabyte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later versions of MS-DOS 6 were downgrades which did not include DoubleSpace as the Stac Corporation had successfully sued Microsoft for infringement of data compression patents. &lt;a href=&quot;https://en.wikipedia.org/wiki/Stac_Electronics&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Stac_Electronics&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you intend to use the original hard disk this may be a relevant consideration.&lt;/p&gt;&#xA;" OwnerUserId="7480" LastActivityDate="2018-01-03T11:43:40.830" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5331" PostTypeId="2" ParentId="5327" CreationDate="2018-01-03T13:54:24.670" Score="19" Body="&lt;p&gt;I know you said &quot;MS-DOS&quot; specifically, but PC-DOS &lt;strong&gt;was&lt;/strong&gt; MS-DOS up until PC-DOS 6.1 in 1993.  (MS-DOS 6.0 came out 3 months earlier.) With the split, IBM dropped QBasic (later to be replaced in v7.0 with REXX) and replaced the MS-DOS editor with the superior programmer's editor &lt;a href=&quot;https://en.wikipedia.org/wiki/E_(PC_DOS)&quot; rel=&quot;noreferrer&quot;&gt;E&lt;/a&gt;. For me, that was reason enough to stop using MS-DOS and become a PC-DOS user. I know that is not &lt;em&gt;much&lt;/em&gt; earlier than MS-DOS 6.22, but it is earlier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might be interested in Wikipedia's &lt;a href=&quot;https://en.wikipedia.org/wiki/Timeline_of_DOS_operating_systems&quot; rel=&quot;noreferrer&quot;&gt;Timeline of DOS operating systems&lt;/a&gt;. It includes a large amount of detail, and covers many decades, beginning even before MS-DOS 1.0.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2018-01-03T13:54:24.670" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5332" PostTypeId="1" CreationDate="2018-01-03T14:06:13.037" Score="4" ViewCount="383" Body="&lt;p&gt;In the old days, it sometimes happened that a computer with a compatible but faster CPU, had problems running old games. For example, Sopwith was written for an 8088 PC; it was amusingly challenging on a 286, completely unplayable on a 386. For a while, it was not unusual for PCs to have switchable clock speed (typically via a button labelled 'Turbo') to deal with this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The proper solution, of course, was for games to start locking frame rate to the display refresh. That solution focuses on the display. What about sound?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ideal scenario is a sound chip with a decent amount of autonomy, so it gets handed some stuff to play, and goes ahead and plays it without further intervention from the CPU. That both offloads work and avoids speed dependency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But early computers didn't have such sophisticated technology. For example, the Apple II and the CoCo had sound hardware consisting of little more than a DAC, so the CPU had to be continually involved; doubling the clock speed would presumably be expected to double the pitch of the sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any known cases, on any platform, where games did lock to the display refresh rate, but still had problems on faster machines, specifically because of the sound playing too fast?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: As Michael Kjörling observes, the &lt;em&gt;really&lt;/em&gt; proper solution is to synchronize display with the CRT refresh, while simultaneously using a separate timer as a way to time stuff happening. I'm not aware of anyone doing this before the nineties, but maybe some developers did. One reason it wasn't done in the eighties is that you can't strictly adhere to that discipline with a 2-D game because you can't really move things non-integral numbers of pixels.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2018-01-03T15:14:28.303" LastActivityDate="2018-01-04T16:14:45.073" Title="CPU speedup breaking sound compatibility" Tags="&lt;gaming&gt;&lt;performance&gt;&lt;sound&gt;" AnswerCount="1" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="5333" PostTypeId="2" ParentId="5327" CreationDate="2018-01-03T14:12:56.323" Score="4" Body="&lt;p&gt;6.2 had a brilliant file transfer utility which you could work through either the parallel port or serial port and a crossover cable.  On earlier versions, you had to use a Norton based tool.  On the later versions (W95 = DOS7), this facility was missing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The great thing about it is it can be used for transferring the contents of a WinXP CD to an old laptop without a CD drive and then installing it.  It is also great for transferring stuff from Linux CDs for Linux installations: as long as they keep to the 8.3 naming convention, there is no problem with the transfer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only problem is that the disks are limited to 2Gb. &lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2018-01-03T14:12:56.323" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5334" PostTypeId="1" CreationDate="2018-01-03T16:24:27.810" Score="6" ViewCount="212" Body="&lt;p&gt;To get an idea of how much various components such as CPUs, RAM chips, disk drives and monitors historically cost, and therefore how those costs influenced design decisions that were made, a good source is the ads in the back of magazines like Byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a caveat: what stage in the wholesale-retail chain did these correspond to?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it depends on a number of factors, a widely used guideline was that recommended retail price would be about three times manufacturing cost. So if a component cost a computer manufacturer $1, it would add $3 to the retail price.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking an example from December 1981 Byte, 16K of RAM (in the form of eight 4116 chips, 200 ns), is advertised for $16. There's no mention of minimum order quantity, so presumably the bulk price a computer manufacturer would pay, was less. Is there a figure available for what the corresponding bulk price would have been?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or looked at another way: in that year, 16K was quite a common configuration for a personal computer. How much would 16K of RAM have added to the retail price of a computer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would the answer be similar for other components such as disk drives and monitors? One data point is the ST-506 hard disk &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5196/st-506-price-wholesale-or-retail&quot;&gt;ST-506 price: wholesale or retail?&lt;/a&gt; - the answer in that case was that the advertised price was full retail.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-01-03T19:02:46.130" Title="Component cost in historical ads versus wholesale" Tags="&lt;history&gt;&lt;cost&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5335" PostTypeId="2" ParentId="5334" CreationDate="2018-01-03T18:45:56.853" Score="4" Body="&lt;p&gt;For a set of 8 not realy cheap, already &lt;em&gt;way&lt;/em&gt; above what I remember as street price for that time frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case I got personal memory, as I was searching search for acceptable priced 4116 for my Apple II in spring 1980. The dealership I bought the machine did quote me 120 Mark (~75 USD back then) for a set of 8. The cheapest local parts dealer was only 40 Mark (~25 USD), including tax, and wholesale would have been considerable below that. So 16 USD excluding tax almost two years later seams extreme. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may need to look at more than one ad, as even within one Byte issue there's a wide range of chip prices, often spanning 1:3 for (mostly) the same chips. Different advertizers had different markets in mind. In general, with a healty cmpetition marazins are a good way to research prices - with a lot work involved to not only collect data but judge reliability and intention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Care to share issue and page?)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-01-03T19:02:46.130" LastActivityDate="2018-01-03T19:02:46.130" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5336" PostTypeId="2" ParentId="5327" CreationDate="2018-01-03T19:37:11.023" Score="4" Body="&lt;p&gt;I don't see much sense in using DOS older than the latest one, as in DOS7.1 from WIN98, not as in official DOS6.22. It had a lot of improvements over earlier versions, for example long file names and better optimized writes and reads. The only downside is probably the compatibility - I personally didn't get into any problems when using 7.1, but if you need to run very (probably pre-1985 tier) software, you'll be safer using 6.22.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One exception to this is when you have a legal copy of DOS that you just want to use on a retro computer - in this situation, it's completely understandable to use older versions.&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2018-01-03T19:37:11.023" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5337" PostTypeId="1" AcceptedAnswerId="5338" CreationDate="2018-01-03T19:38:31.267" Score="12" ViewCount="721" Body="&lt;p&gt;The Lisa was a fairly impressive platform for the day. In comparison to the original Macintosh, the two did have different displays and aspect ratios but the Lisa also had additional hardware such as the custom MMU circuitry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In late 1984 the Lisa was repackaged as the Macintosh XL to try and clear out poor selling inventory. These machines appear to be simply regular Lisas supplied with emulation software (MacWorks?) to allow the running of Macintosh software. Given that they're both 68000-based platforms with somewhat similar display and human interface characteristics, I could see how this was possible, though unfortunately the Lisa's 68000 was ~2MHz slower than the Mac's. As well, I think I've read that any Lisa can run the MacWorks software, so if that is correct then that could imply that the Mac XL wasn't simply a Mac 128k motherboard in a Lisa box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So there you go. You've got a Mac in Lisa clothing with probably the only noticeable outward difference being the screen and aspect ratios. Now the question is, was there any hardware differences with the Mac XL versus the last versions of the Lisa? Was there anything special that the Mac XL could do that the Mac couldn't (besides RAM)? Did all that extra custom Lisa hardware go to waste in Mac XL mode? I'm just curious because I used Lisas back in the day and I've read enough about the Lisa over the years, but nothing has ever really said much about the XL other than it was a way to lower inventory levels.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2020-02-23T15:39:07.093" Title="Was the Mac XL hardware different from the last versions of the Lisa?" Tags="&lt;apple-macintosh&gt;&lt;apple-lisa&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5338" PostTypeId="2" ParentId="5337" CreationDate="2018-01-03T20:32:09.883" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;In late 1984 the Lisa was repackaged as the Macintosh XL to try and clear out poor selling inventory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not only that, but more important as development systems for the Mac. The original Mac had only 128 KiB of RAM and could not access a hard disk. So software development on the machine was rather cumbersome. The origin of MacWorks XL was an internal hack to emulate a Mac for software development. 512 KiB, or even 2 MiB (3rd party up to 8 MiB) did make compiling way faster despite the slower CPU. Later it became a product for Lisa owners to (also) run Mac software - but the main target was to allow smooth software development.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;These machines appear to be simply regular Lisas supplied with emulation software (MacWorks?) to allow the running of Macintosh software.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, usually they are all Lisa 2/10 But there are some exceptions known which seam to be after sales conversions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MacWorks is an emulation solution to 'install' the Mac ROM images and some drivers. A (Mac) System Disk had to be booted afterwards. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As well, I think I've read that any Lisa can run the MacWorks software,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, the original intention was to use a Lisa as development station for Mac software. MacWorks only later became a customer product to offer a bridge for existing Lisa owners (non developers) to tap the fast(er) growing market for Mac software. Just without a hard disk it wasn't really elegant.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;so if that is correct then that could imply that the Mac XL wasn't simply a Mac 128k motherboard in a Lisa box.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. That would been a way to waste even more money, as the Lisa hardware structure is complete different, and redesigning the Mac mainboard to fit the Lisa card cage would be way to expensive for just a few thousand possible customers. Something a software solution can do with way less cost.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You've got a Mac in Lisa clothing with probably the only noticeable outward difference being the screen and aspect ratios.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not necessary. The factory sold Mac XL had also a modification to the screen hardware to produce square pixels. It wasn't mandatory, and MacWorks did run fine without, but was also available as an upgrade for field change.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Now the question is, was there any hardware differences with the Mac XL versus the last versions of the Lisa? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While the base was always a Lisa 2 (Lisa with 3.5&quot; drive(s) plus changed FDC PROM and new front plate - original or converted from Lisa 1), it could come in different flavours:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;plain Lisa 2 (1 floppy) - two boot stages with successive floppies&lt;/li&gt;&#xA;&lt;li&gt;above with changed screen ratio&lt;/li&gt;&#xA;&lt;li&gt;Lisa 2/5 (1 Floppy + 5 MiB ProFile) - boots from ProFile or floppy&lt;/li&gt;&#xA;&lt;li&gt;above with changed screen ratio&lt;/li&gt;&#xA;&lt;li&gt;Lisa 2/10 (1 Floppy + 10 MiB Widget drive) - boots from HD or FD&lt;/li&gt;&#xA;&lt;li&gt;above with changed screen ratio&lt;/li&gt;&#xA;&lt;li&gt;Macintosh XL (1 Floppy + 10 MiB Widget drive, always changed screen ratio)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of the above may bear a Macintosh XL name plate, but only the last one &lt;em&gt;may&lt;/em&gt; be a factory made one (or field upgraded), as the name plate was separate available for licensed dealers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The separate availability of the screen conversion kit (just a PROM) was due the inability of some LISA software (most notably the whole office suite) could not handle the changed screen. (*1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware of a Lisa vs. a MacXL can be can be detected by the suffix on the screen PROM ( 256x8 like 6309) and the CPU ROMs (a pair of 2764). I don't remember if there  where also changes with the I/O ROM (a 2732) (*2). The marking is /A8 for 'original' Lisa 2 and /88 for Mac XL.  If there's a different number, you might have a strange Lisa 1 conversion :)) With only the CPU ROMs changed, it can run both OS and all software, but Mac graphics may seam a bit stretched. With the PROM installed it's still possible to boot both OS, but some (let's be serious, &lt;em&gt;most&lt;/em&gt;) Lisa Software may be unusable.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was there anything special that the Mac XL could do that the Mac couldn't (besides RAM)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;AFAIK all Lisa I/O could be used with MacWorks. Including multiple parallel and serial interfaces. And then there is the better keyboard :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*1 ofc, the easy solution to switch ROMs was introduced soon by third party companies like Dafax with their ROMswitcher. The &lt;a href=&quot;https://archive.org/stream/bitsavers_applelisamwitcher_1479772/Dafax_ROMswitcher#page/n1/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Manual&lt;/a&gt; is a worthwhile read with quite some information around the screen issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The I/O ROM (2732) was most definitely swapped when a 2/5 (external ProFile HD) was changed into a 2/10 (internal Widget drive), as there was also a bord to be changed. To add complication in identifying a machine, a 2/10 still supported the external ProFile (good in the first place), so some/many(?) 2/5 without a widget drive have been upgraded later to use the 2/10's I/O ROM - and such identifying them to the software as 2/10. But that's a different story :)) &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Additional Info&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Original MacWorks had a modified image of the original Mac. Later on Sun Remarketing did continue the Lisa support and enhanced MacWorks as MacWorks Plus, based on the Mac Plus ROMs, supporting System 6, and later updated to run up to System 7.5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another issue is the Lisa software, as the Lisa ROMs contain a serial number, and when the software is installed (on HD) first time, this number is copied onto the floppy, allowing from that point on only installation on machines with the same serial number. Changing the CPU-ROMs changes that number, so afterwards the installed software won't continue to work and can not be reinstalled. there was a handling note for dealers to give out just a fresh set of install disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least, there was also the &lt;strong&gt;Macintosh Professional&lt;/strong&gt;. After Sun Remarketing (not related to SUN) took over the remaining stock and continued Lisa and Mac XL support under a licence from Apple, they sold refurbished/upgraded Lisa with 1 MiB Memory, Profile/Widget (20 MiB HD also available) and an optional 800 KiB (!) FD. First this was branded as &lt;strong&gt;Lisa Professional&lt;/strong&gt; later, with the Mac Plus based MacWorks Plus renamed as Macintosh Professional. Check their &lt;a href=&quot;https://archive.org/stream/bitsavers_applelisasarketingCatalogSummer1988_28586791/Sun_Remarketing_Catalog_Summer_1988#page/n3/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;1988 Catalogue&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-23T15:39:07.093" LastActivityDate="2020-02-23T15:39:07.093" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="5339" PostTypeId="2" ParentId="5327" CreationDate="2018-01-03T21:57:55.403" Score="18" Body="&lt;p&gt;If the old computer is '100% IBM PC Compatible'™, then you should be able to run basically any version of MS/PC-DOS on them.  However, there were lots of old computers that ran MS-DOS (especially when the IBM PC was young) that had non-compatible hardware variations that would limit that.  For example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If it uses 8&quot; floppies, support for that disappeared in MS-DOS 2.11.  More common than you might think at one time.&lt;/li&gt;&#xA;&lt;li&gt;Anything with an 80188/80186 rather than an 8088/8086 (e.g. Tandy 2000, Mindset) is probably going to have issues with later DOS.&lt;/li&gt;&#xA;&lt;li&gt;If it's an early PC-9801 series (the original 8086 or V30 only sorta PC compatible versions of the hugely popular Japanese PC-98 platform), then I'm pretty sure you're stuck at MS-DOS 3.3, but certainly no later than 6.20.  NEC had a similar machine called the APC-III that I recall ran up to 3.11.&lt;/li&gt;&#xA;&lt;li&gt;Didja know TI made an IBM PC competitor?  Neither did anyone else.  If you have a TI 'Professional Computer' the not-quite-compatible design and TI's quick exit from the market leaves you at DOS 2.1 or so.  Lots of orphans fall into this category: Dec Rainbow, Victor 9000, Sanyo MBC-55, Wang Professional, Zenith Z-100 series.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You get the idea.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastEditorUserId="576" LastEditDate="2020-02-10T16:33:50.660" LastActivityDate="2020-02-10T16:33:50.660" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="5341" PostTypeId="1" AcceptedAnswerId="5343" CreationDate="2018-01-03T22:11:55.383" Score="92" ViewCount="18886" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ed_(text_editor)&quot; rel=&quot;noreferrer&quot;&gt;ed&lt;/a&gt; was the standard Unix editor, and is present on all POSIX certified systems (though it's not installed by default in Debian, FWIW).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a line editor (meaning, you can't see all the text at a time. You query line numbers and it spits it back, but it came before vi[1], where you can use &lt;code&gt;hjkl&lt;/code&gt; to navigate up and down the screen).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How was it used? I find it hard to believe that people memorized their code well enough that they could remember what was going on in line 5 when working on line 20[2]?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did people write code on a paper and then type it in (sort of like in the punch-card days), editing the paper and then modifying code through ed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1]. Small point, ed gave birth to ex, and vi was &lt;a href=&quot;https://en.wikipedia.org/wiki/Ex_(text_editor)&quot; rel=&quot;noreferrer&quot;&gt;ex&lt;/a&gt;'s &quot;visual mode&quot;, and ex's legacy is still visible in modern vim/neovim (when you type :COMMAND, like :w, that's vi running an ex command), so ed's legacy is still around to this day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2]. Programs weren't too long in the 70s. There just wasn't enough RAM for them. But even a short 20 line program is still too complicated to fully keep in my brain, line by line.&lt;/p&gt;&#xA;" OwnerUserId="7488" LastEditorUserId="6659" LastEditDate="2018-01-04T03:06:20.150" LastActivityDate="2020-06-14T19:58:42.350" Title="How did people use ed?" Tags="&lt;unix&gt;" AnswerCount="19" CommentCount="7" FavoriteCount="34" ContentLicense="CC BY-SA 3.0" />
  <row Id="5342" PostTypeId="2" ParentId="5341" CreationDate="2018-01-03T22:27:20.707" Score="25" Body="&lt;p&gt;You have to remember that 'ed', originally, was as often as not being used on a teletype, not a video terminal, so the line-oriented paradigm made sense.  Even then, knowing enough 'ed' to get around files was valuable when, for example, you were using a &lt;em&gt;really&lt;/em&gt; dumb terminal (I recall an IBM 3101 that for reasons I forget I was forced to use occasionally that was just easier to use 'ed' on), or when you'd borked up your tty params to the point you couldn't get the full screen editors to work. &lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-01-03T22:27:20.707" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5343" PostTypeId="2" ParentId="5341" CreationDate="2018-01-03T22:52:53.800" Score="114" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;It's a line editor (meaning, you can't see all the text at a time. You query line numbers and it spits it back, but it came before vi, where you can use &lt;code&gt;hjkl&lt;/code&gt; to navigate up and down the screen).&lt;/p&gt;&#xA;&lt;p&gt;How was it used? I find it hard to believe that people memorized their code well enough that they could remember what was going on in line 5 when working on line 20?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Using a line-based editor isn't that hard.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For one, &lt;strong&gt;yes, real programmers&lt;/strong&gt; (as we all were back then) &lt;strong&gt;do remember their lines.&lt;/strong&gt; (*1)&lt;/li&gt;&#xA;&lt;li&gt;Next, when on a &lt;a href=&quot;https://en.wikipedia.org/wiki/Teleprinter&quot; rel=&quot;noreferrer&quot;&gt;writing terminal&lt;/a&gt;, one lists the working on section once, so all you need to do to take a look is pull the paper.&lt;/li&gt;&#xA;&lt;li&gt;On a dump terminal one could just issue a list (print) command for the actual range, or &lt;code&gt;,p&lt;/code&gt; for all, as often as needed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did people write code on a paper and then type it in (sort of like in the punch-card days), editing the paper and then modifying code through ed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes and no. Before writing a program one sits down and draws a rough structure. Something I'd assume everyone still does today. &lt;em&gt;How else do you get a first glimpse if your idea for a structure is valid?&lt;/em&gt; After that, &lt;code&gt;ed&lt;/code&gt; (or similar editors on mainframes) is all a programmer needs. A program grows in your head; the screen is just to dump the result, isn't it?&lt;/p&gt;&#xA;&lt;p&gt;Also, assembling/compiling did usually produce a listing which could be used to go thru on paper (if printed out), add remarks and new lines before hacking them in again. And no, you didn't compile every few seconds and remove just the top warning/error. One worked thru the whole error list before compiling again.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Programs weren't too long in the 70s. There just wasn't enough RAM for them. But even a short 20 line program is still too complicated to fully keep in my brain, line by line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;How are you able to understand your own program if you can't visualize it in the first place? (I'm serious here: I couldn't, and I don't know how it would work otherwise.)&lt;/p&gt;&#xA;&lt;p&gt;And again, in all seriousness, I worked with line editors over years and on programs with more than 200 lines. In fact, &lt;code&gt;ed&lt;/code&gt; already has more features than are absolutely necessary, as &lt;a href=&quot;https://en.wikipedia.org/wiki/Edlin&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;edlin&lt;/code&gt;&lt;/a&gt; has everything you really need to program.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - I can't stop myself from adding a 'little' story about &lt;em&gt;how real programmers remember their code&lt;/em&gt; here:&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;From Grandpa's Vault:&lt;/p&gt;&#xA;&lt;h2&gt;How Real Programmers Remember  Code&lt;/h2&gt;&#xA;&lt;p&gt;In the mid '80s (~1985) I was working mostly for a somewhat large, /370 based, mainframe application. At that time the software consisted of about 1.1 million lines of hand written assembly (~1.2M including secondary programs, &lt;code&gt;Only&lt;/code&gt; statements, excluding empty lines, etc.). It had its own database engine (*2), screen handling (more than 800 different screen layouts), own editor (*3), own networking stack, own runtime and so on. A typical installation had, at this point about 100-300 full-time users.&lt;/p&gt;&#xA;&lt;p&gt;The project had been around since the early 1970s. We worked on a policy of &lt;em&gt;no-wrappers,&lt;/em&gt; which means only modules were used which we did understand and if necessary were modified to fit the system, and redoing the whole code base every 4-6 years, to avoid ageing code. After all, in a real world application requirements change all the time and so does code. It's a matter of style to avoid rucksack solutions. Nonetheless, 'lint' accumulates over the years and a start over was done every 4-6 years.&lt;/p&gt;&#xA;&lt;p&gt;At that time we also had scored a new contract with a very promising customer(*4), so a lot of changing and adaptations were needed to incorporate the functionality of two other large scale systems and put them out of business. So a perfect time for a 100% redesign. We were a core team of 4 programmers. Unlike previous times we didn't have a relaxed schedule, but had to implement everything until an already agreed roll-out date, set less than 3 years away. Not cool. We still had (wanted and needed) to go ahead with a total redesign, so management (*5) did assign 14 additional men and we were moved into something like a designer and lead programmer role.&lt;/p&gt;&#xA;&lt;p&gt;Of course, these were all 'super specialists' and way better than anything we were ... the usual game. And as so often they came up with the same questions, why not use a high level language(*6), a standard DBS and so on. The usual crap. Seriously, with an application of that size, writing such components is just a minor add on. Eventually needing less code than using a standard interface requires - not to mention being faster because being tailored exactly to our needs.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, let's go for the story. One of these 'specialists', lets call him Mr. W., claimed that no one can oversee such a large codebase, not even partially. Heck, no one can even remember all code written by himself in 5 or more years. &lt;em&gt;Ha!&lt;/em&gt; &lt;em&gt;&lt;strong&gt;That was a claim that I couldn't let stand uncontested, so one word yielded the next. Bottom line: we agreed for a bet, one beer, that I will be able (he said not able) to identify source name when presented a 10 line snippet, from random programs I did within the existing codebase.&lt;/strong&gt;&lt;/em&gt; We agreed on 10 examples. Date was set the next morning.&lt;/p&gt;&#xA;&lt;p&gt;Morning came, I didn't prepare nothing, but he came up with a stack of paper and a case of beer. I guess his intention was to show how much I didn't gain by presenting every fail with a bottle. Also, he was so generous as to make the snippets a whole page each. I didn't really need that. I named not only each routine he handed me, but also which module it belonged to, what's the purpose, some workings, why variables are named the way they are, some caller or what was to be found on the pages before or after. Further, I also named the original programer (*7), as he inserted a few pages from programs I didn't write and identified a piece of code that was no longer used, told why and what has replaced it - he pulled it form a &lt;em&gt;very&lt;/em&gt; old version :))&lt;/p&gt;&#xA;&lt;p&gt;The whole case of beer, bottle by bottle, changed sides :))&lt;/p&gt;&#xA;&lt;p&gt;The same time Mr. W. became more and more quiet. Needless to say that there was no further argument about readability of code or the ability to handle a large code base. Sure, there was still the database fight, but that's a different story.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*2 - Up to 10.000 user transactions per hour with even more DB access per transaction on a 1 MIPS machine with 1.25 MiB RAM - that's mainframe to you :))&lt;/p&gt;&#xA;&lt;p&gt;*3 A full screen editor on block based terminals. Think of it like &lt;code&gt;ed&lt;/code&gt; on steroids. There was no scrolling or alike, but you could edit any of the 20 displayed lines locally before sending that 'page' back to the host to be sorted into the source again (everything was based on sets of libraries, which again worked as a versioning system).&lt;/p&gt;&#xA;&lt;p&gt;*4 - About a dozen planned installations. For mainframe ERP software, that's like hitting the jackpot, maybe comparable to selling several million copies of a game or such.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Management also changed at that time, lucky us :(&lt;/p&gt;&#xA;&lt;p&gt;*6 - Until today, no one could explain to me how &lt;code&gt;Buffer := Record.&lt;/code&gt; is supposed to be more readable than &lt;code&gt;MVC BUFFER,RECORD&lt;/code&gt; - no, we are not talking C, only real languages were up for decision :)&lt;/p&gt;&#xA;&lt;p&gt;*7 - Programmers have a 'handwriting' no matter what language is used. There is a way conditions are formed, a likeliness for the selection of field names and so on. When working for some time with others, one clearly knows to 'hear' this like a voice speaking.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-03T21:46:37.247" CommentCount="22" ContentLicense="CC BY-SA 4.0" />
  <row Id="5344" PostTypeId="2" ParentId="5341" CreationDate="2018-01-04T04:20:51.587" Score="30" Body="&lt;p&gt;Before the advent of interactive terminals (and version control programs), most programmers were used to keeping their source code on 80-column punched cards. On the first mainframe that I worked on (a Honeywell system), work-flow was typically as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Initial source code would be entered on 80-column coding pads, and these would be transferred to punched cards by the punch-room typists. This would be a lot quicker than typing it yourself, even if you had access to a card punch. The punch-room girls (yes, they were all women) would also do paper tape, but this was universally loathed, and was only used for systems that had no card reader.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Any edits to your source code would either be done via the punch room, or by yourself if you had a card punch. This might either be a manual card punch (which were readily available), or a punch/interpreter similar to those in the punch room.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When you got your program working, you would then store your code in a source code library. Note that this was not a version control system. It simply allowed you to save your working code on disk (and then archive the card deck in a secure cabinet). You then had the option of archiving the entire library on magnetic tape once you had a fully working program.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;All of the compilers and assemblers would accept standard line editor commands, so that you could modify the code in the source libraries on the fly without having to update them.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Once you got your modifications working, you could then update the source code libraries using the standard line editor, and re-archive the library.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Edit decks could then either be merged with the original card decks or stored as incremental updates, in case you lost the source code libraries (usually due to disk failure). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The system was cumbersome, but it worked, and the transition to line-oriented terminals was seamless. If you think that this way of working would drive you mad, bear in mind that you would be lucky to get two compiles in a normal working day. Even then, your jobs would be run by operators; you were not allowed to run the jobs yourself since computer time was an expensive commodity. The more knowledgeable operators would correct simple typing errors for you if your compile failed (and they had time to do so).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TZOqd.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TZOqd.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Manual 80-column card punch&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BEzRX.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BEzRX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM 029 80-column card punch/interpreter&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sKVPE.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sKVPE.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Honeywell Series 60 Level 62 small business computer (circa 1975)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An 80-column card reader can be seen on the far right. This was capable of reading 2,000 cards per minute. An 80-column card punch/interpreter can be seen next to it. I cannot remember its speed, but it was probably around 100 cards per minute. This demo-centre machine lacked 9-track magnetic tape drives. Otherwise, it was fairly similar to our development machine.&lt;/p&gt;&#xA;" OwnerUserId="3278" LastEditorUserId="3278" LastEditDate="2018-01-04T12:03:03.777" LastActivityDate="2018-01-04T12:03:03.777" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5345" PostTypeId="2" ParentId="5341" CreationDate="2018-01-04T05:52:31.237" Score="67" Body="&lt;p&gt;The reason you can't keep a 20 line program in your head is because you don't have to any more. Same reason you probably don't know any phone numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But back in the day, we certainly did do this. I have written thousands of lines of code and text and documentation using line editors (not ed). At 110, 300, 1200 and 2400 baud. The 2400 baud terminals were nice, but 1200 was completely usable. 300 and 110, not so much - functional, but not preferred. On a single screen which was only 80x24. I never cared for the printing terminals. They were OK, but the glass ttys were so much better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used to write English papers on the school mainframe. We had something akin to RUNOFF or troff. You think a line editor is bad, you should try using an actual typewriter some day. The line editor is much better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My English teacher was kind enough to accept composition papers printed on the back of greenbar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many of the habits from line editors carry over to editors like &lt;code&gt;vi&lt;/code&gt; and &lt;code&gt;emacs&lt;/code&gt;. And old habits die hard. In a line editor you don't simply page or scroll through your code. Rather, you search. It still drives me nuts to watch someone in a code file with hundreds of lines scroll and &quot;aim&quot; for a section of code when they could have simply searched for the function name to get there instantly. At least use the page down key, man!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I would do, and I can't cite specifics, as I've forgotten the editor commands, and don't know ed), but simply I'd search and then print the next 10 lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you get adept, you quickly learn to string commands together. Search for a line and delete it. Go to a line, make a change, etc. Almost every command I made ended with the &quot;print the line&quot; command so I could see what I did. The editor I used allowed editing commands on the command line so I was able to make changes without actually &quot;entering&quot; the editor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use &lt;code&gt;sed&lt;/code&gt; for that today.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sed -i -e '10s/old/new/' file.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Go to the 10th line, change the first &quot;old&quot; to &quot;new&quot;, and overwrite the file (file.txt).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, we are very fortunate in terms of computing resources and powerful code editors and word processors. And we get quite jaded. It is quite difficult to &quot;go back&quot;. A single screen, no scroll back, no command history, a line editor, using &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;S&lt;/kbd&gt; and &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Q&lt;/kbd&gt; to stop and restart output. If any of this sounds terrible to you, it was leaps and bounds above using cards. Cards were terrible.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="7946" LastEditDate="2018-06-20T17:32:23.297" LastActivityDate="2018-06-20T17:32:23.297" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="5346" PostTypeId="2" ParentId="5341" CreationDate="2018-01-04T06:18:47.863" Score="4" Body="&lt;p&gt;Back in the late 1980s, I worked with multiple infant Unix mutants whose terminal support was an afterthought. If I had to tweak a file, I would telnet in and use a line editor like ex or ed to make the fix. Jumping to a particular line number or searching for a distinct pattern was necessary to navigate large files. Wholesale changes were usually done by ftp, local edit using a screen editor, and ftp back. I do remember struggling with a file that was too large for my screen editor; I may have used a line editor to complete the edits or merely partition the file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC Real Programmers used&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% cat - &amp;gt;foo&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;not ed to write code.&lt;/p&gt;&#xA;" OwnerUserId="7496" LastEditorUserId="7496" LastEditDate="2018-01-04T06:27:29.340" LastActivityDate="2018-01-04T06:27:29.340" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5348" PostTypeId="2" ParentId="8" CreationDate="2018-01-04T07:52:42.177" Score="0" Body="&lt;p&gt;Be aware that there may be sellers that claim to be suitable, but do not specify whether it is centre negative or not. I bought one, then checked, based on the advice on this forum about the damage that could be caused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The seller first said it was the wrong one. Then the next day they said it was the right one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still no info on whether it was centre negative or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So please check, as I have, to avoid damage.&lt;/p&gt;&#xA;" OwnerUserId="7470" LastActivityDate="2018-01-04T07:52:42.177" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5349" PostTypeId="2" ParentId="5332" CreationDate="2018-01-04T09:17:53.040" Score="3" Body="&lt;p&gt;As @MichaelKjörling says &quot;For example, you've got a perfectly good 18.2 Hz timer in any IBM PC compatible, which could easily be used to calibrate a delay loop. &quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could be done indeed, any program could program a counter in the the PIT 8253/8254 that any PC compatible has (or emulates). I however have no idea if any game used it for graphics/sound timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used that chipset programming the &lt;a href=&quot;http://ruka12.tripod.com/wspecem.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;TAPE2TAP&lt;/a&gt; util around 1995, that digitises sound from tapes from the Sinclair ZX Spectrum to DOS files, and the &lt;a href=&quot;http://worldofspectrum.org/warajevo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Warajevo&lt;/a&gt; emulator also used my routines also for independent CPU speed sound sampling (with my permission).  see PIT.INC in my sources.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Intel 8253 and 8254 are Programmable Interval Timers (PITs), which&#xA;  perform timing and counting functions using three 16-bit counters.[1]&#xA;  They were primarily designed for the Intel 8080/8085-processors, but&#xA;  later used in x86-systems. They (or an equivalent circuit embedded in&#xA;  a larger chip) are found in all IBM PC compatibles. In PC compatibles,&#xA;  timer channel 0 is assigned to IRQ-0 (the highest priority hardware&#xA;  interrupt), channel 1 is assigned to DRAM refresh (at least in early&#xA;  models), and channel 2 is assigned to the PC speaker.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;TBH, I hardly believe my software would be the only example in that time period. The technology was there usable from DOS from the beginning (XT times) to achieve CPU speed independency in time sensitive routines/loops.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2018-01-04T16:14:45.073" LastActivityDate="2018-01-04T16:14:45.073" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5350" PostTypeId="2" ParentId="3159" CreationDate="2018-01-04T09:23:49.613" Score="6" Body="&lt;p&gt;The DEFRAG.EXE utility in DOS 6.22 probably won't work as you expect, as (1) it doesn't know anything about FAT32, and (2) it doesn't know anything about long file names, which means that it quite likely will trash your LFNs unless you &lt;a href=&quot;https://archive.ph/P6tom&quot; rel=&quot;nofollow noreferrer&quot;&gt;back them up first.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Searching around, &lt;a href=&quot;http://www.msfn.org/board/topic/140102-possible-to-reorganize-not-sort-a-dos-directory-alphabetically/&quot; rel=&quot;nofollow noreferrer&quot;&gt;one of the pages&lt;/a&gt; referred to &lt;a href=&quot;http://www.murraymoffatt.com/software-problem-0010.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;directory sort utilities&lt;/a&gt; for Windows that deal with FAT partitions. These may help as long as they are still Win95/98/Me-compatible: I make no guarantees about their reliability, and the usual cautions about mucking around with mounted filesystems applies.&lt;/p&gt;&#xA;&lt;p&gt;As others have noted, sorting the physical directory structure may not be as useful as you think, because DOS makes no effort to keep the directories ordered. You'll have to run the sorting utility periodically to maintain sorted directories.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastEditorUserId="15334" LastEditDate="2020-08-27T20:26:21.387" LastActivityDate="2020-08-27T20:26:21.387" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5351" PostTypeId="2" ParentId="5341" CreationDate="2018-01-04T09:59:54.403" Score="19" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;ed was the standard Unix editor, and is present on all POSIX certified systems (though it's not installed by default in Debian, FWIW).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Indeed it was and when I first went to University in 1984, they taught me how to use it. Then they said &quot;there's also &lt;code&gt;vi&lt;/code&gt;, type &lt;code&gt;man vi&lt;/code&gt;&quot;. &lt;code&gt;vi&lt;/code&gt; by the way was actually little more than some extensions on another line editor called &lt;code&gt;ex&lt;/code&gt; in those days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, if you were working on a paper teletype (we weren't, we had glass terminals that emulated the VT52), you had to use a line editor. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It's a line editor (meaning, you can't see all the text at a time. You query line numbers and it spits it back&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not true. Each command was prefixed by an address which could be a line number, a range of line numbers or a pattern (if my memory serves correctly). So you could do &lt;code&gt;1,$p&lt;/code&gt; which would print the whole file. On a glass VDU printing the whole file in this way was typically a pointless waste of time because all but the last 25 lines would have scrolled off the top of the screen and there was no scrolling back to find them like you get with modern terminal emulations.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How was it used? I find it hard to believe that people memorized their code well enough that they could remember what was going on in line 5 when working on line 20&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well the situation wasn't much better with full screen editors because you could only see a window of 24 lines (with vi, the bottom line was the command line). The way I used to work was to print off a hard copy of the code periodically and have it beside me on the desk when writing or debugging code. When I changed something, I'd mark up the paper listing, not necessarily with the change but with a mark to remind me that that section was now out of date.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did people write code on a paper and then type it in&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. At least I didn't. Well, when I got my first job we did that, but that is because our company office didn't have a computer of the right type for the client we were working for. We'd do our debugging and changes on paper using paper listings and then drive to the customer's site to type in the changes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Programs weren't too long in the 70s&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Is that what you think? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case it is not clear that the above is a flat denial of the assertion that there were no long programs in the 70's, it's fair to say there were long programs. For example, compilers and operating systems tended to be very large. In fact, in the 70's most operating systems were written in assembler meaning the Unix kernel as originally written in assembler would have more lines of source code than the C version (assuming the C version didn't have too many extra features). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, individual source code files could be of arbitrary length and still can be. So, in a 100,000 line program you might have 50 C code files, each 2,000 lines long on average and you still would today. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2018-01-05T09:21:57.393" LastActivityDate="2018-01-05T09:21:57.393" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5353" PostTypeId="2" ParentId="5311" CreationDate="2018-01-04T12:56:41.953" Score="2" Body="&lt;p&gt;I had a Timex TC 2048 (compatible with the ZX Spectrum 48k) with the text extended modes, never used them much. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Granted, they were not supported by the ZX Spectrum ROM in the first place and the software to support them was not that widespread; however I got a tasword copy that supported those modes, and in my cheap B/W (PAL) TV the result was difficult to read; in the bigger (PAL) TV at the living room it was  better and clear too. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However you could not use it for larger periods of time due to eye tiredness. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[the analog modulator+(extended) ULA in the TC 2048 gave a better/sharper quality image than the original ZX Spectrum too, and the extended modes had better quality than it would be expected] &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, at the end of the day, those modes only created game incompatibilities for the mere common mortals.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2018-01-04T16:45:38.387" LastActivityDate="2018-01-04T16:45:38.387" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5354" PostTypeId="1" AcceptedAnswerId="5367" CreationDate="2018-01-04T13:27:31.997" Score="5" ViewCount="581" Body="&lt;p&gt;I used to own a Timex TC-2048 ZX Spectrum 48K compatible clone. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I programmed it in assembly extensively, both for fun and when learning, and also when testing things for writing my own ZX Spectrum emulator(s) in the 90s (a DOS emulator, and later on a Windows emulator &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2570/first-computer-emulator-in-windows&quot;&gt;First computer emulator in Windows&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also did never understood much the ZX Spectrum video timing effects, writing in the border and such, and thought it was my fault and my TC 2048 fault (had problems in the modulator). I also tried to measure contention issues without much success back in the 90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I learnt recently the TC 2068/TC 2048 ULAs besides the sharper, better quality image and extra modes, also had different memory contention issues unlike the original ZX Spectrum machines. &lt;a href=&quot;http://rga24.blogspot.pt/2014/05/timex-contended-memory-timings-ts2068.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://rga24.blogspot.pt/2014/05/timex-contended-memory-timings-ts2068.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be the results of such difference? Were they noticed back in the day? I never heard much about them TBH, and the Timex was sold as an almost 100% true clone [aside from the extra modes and the joystick].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: the details are fuzzy, but I do remember trying a game that did some special effects in the border and it did not work in my TC 2048.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="3290" LastEditDate="2020-04-26T13:00:47.460" LastActivityDate="2020-04-26T13:00:47.460" Title="Timex 2048 RAM contention ULA/video output" Tags="&lt;zx-spectrum&gt;&lt;video&gt;&lt;clone&gt;&lt;timex-sinclair&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5356" PostTypeId="2" ParentId="5341" CreationDate="2018-01-04T18:13:16.500" Score="4" Body="&lt;p&gt;I started to write my thesis using ed and I got very good at searching for unique words I could remember using.&#xA;I was on a vdu so I could print out a range of lines to review what I had written or run the scribe compile job and send it to the line printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then we got to upgrade to vi and latex and life became much easier. &lt;/p&gt;&#xA;" OwnerUserId="7508" LastActivityDate="2018-01-04T18:13:16.500" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5357" PostTypeId="2" ParentId="5341" CreationDate="2018-01-04T19:47:42.757" Score="3" Body="&lt;p&gt;On the line editor I used (SOS on a DEC-10, ca. 1984), the lines surrounding the line you were working on were visible, and you could scroll back and forth as necessary.  It could be disconcerting to see lines appear in reverse order as you scrolled back up through the file, but it was something you got used to relatively quickly.  Not quite as speedy as using a mouse and scroll wheel, but not crippling either.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, once we upgraded to a VAX and got screen-based editors (EDT, LSE, etc.), we never looked back.  &lt;/p&gt;&#xA;" OwnerUserId="5331" LastActivityDate="2018-01-04T19:47:42.757" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5358" PostTypeId="2" ParentId="5341" CreationDate="2018-01-04T20:37:15.003" Score="10" Body="&lt;p&gt;As a university undergrad in the 1980s we were not allowed to use &lt;strong&gt;vi&lt;/strong&gt; as an editor, only &lt;strong&gt;ed&lt;/strong&gt;, because of the limited resources of the VAX 750 shared by the thousands of undergrads on campus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't a problem because you learned how to use your tools.  For example, you want to list the lines 1 through 10, you would just type &lt;code&gt;1,10p&lt;/code&gt; (or &lt;code&gt;1,10n&lt;/code&gt; for a numbered listing, or &lt;code&gt;1,10l&lt;/code&gt; to show non-printing character, or...).  You had no need to memorize you code, you could just see it on the screen.  For larger chunks, you'd just send the whole file to the line printer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try using &lt;strong&gt;gdb&lt;/strong&gt; from the command line.  It's pretty much the same experience even today.&lt;/p&gt;&#xA;" OwnerUserId="7510" LastActivityDate="2018-01-04T20:37:15.003" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5359" PostTypeId="2" ParentId="5327" CreationDate="2018-01-04T21:55:08.367" Score="4" Body="&lt;p&gt;There are some instances when having an older version of MS-DOS around could be helpful. Realistically, I would use the latest and greatest unless you have come across a reason otherwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When dealing with installs of old programs, I have come across ones which will only work on a certain version of DOS. For instance, MS-DOS 5.00 was one that I remember a couple programs needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind this was doing installs of programs made in the late 1980s early 1990s.&lt;/p&gt;&#xA;" OwnerUserId="7513" LastEditorUserId="3648" LastEditDate="2018-01-05T20:09:31.850" LastActivityDate="2018-01-05T20:09:31.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5360" PostTypeId="2" ParentId="3296" CreationDate="2018-01-04T22:09:56.357" Score="7" Body="&lt;p&gt;It is difficult to say for sure, because there have been a lot of implementations of the Pascal Language (some of them not very widely distributed), each with their own specific additions to the language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, my researchs show that it is very unlikely that a feature like the one you describe have been made available before 1979:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Turbo Pascal compiler (which has certainly been one of the most widely ditributed Pascal implementations, and stands, at least for me, as a reference) has, indeed, introduced break/continue statements, but not before the 7.0 version, released in &lt;strong&gt;1992&lt;/strong&gt;. See the reference manuals available &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/borland/turbo_pascal&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. In a paragraph named &quot;Flow control procedures&quot;, you'll see the break/continue statements are mentioned for the 7.0 version, but not for the 6.0 version.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Pascal/MT%2B&quot; rel=&quot;noreferrer&quot;&gt;Pascal MT+&lt;/a&gt;, released in 1980, show no such thing in its reference manual (available &lt;a href=&quot;http://www.shanit.com/docs/MTplusMan.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/UCSD_Pascal&quot; rel=&quot;noreferrer&quot;&gt;UCSD Pascal&lt;/a&gt;, released in 1978, is simply based on the Wirth definition of Pascal with a few additions, but nothing that looks like a break/continue statement (manual &lt;a href=&quot;ftp://ftp.apple.asimov.net/pub/apple_II/documentation/programming/basic/UCSD_PASCAL_II.0_Manual_Mar79_alt.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I made some additional researchs on other implementations, but almost all of them are said to be close to the ISO 7185 standard, and I couldn't find the manuals online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, the fact that Borland introduced this feature so late (and that nobody answered this question yet) should be convincing enough. I may have missed some very obscure implementations, though (like the one you mention).&lt;/p&gt;&#xA;" OwnerUserId="4614" LastActivityDate="2018-01-04T22:09:56.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5361" PostTypeId="1" AcceptedAnswerId="5375" CreationDate="2018-01-05T06:54:26.640" Score="10" ViewCount="1590" Body="&lt;p&gt;I'm able to use &lt;a href=&quot;https://en.wikipedia.org/wiki/Netwide_Assembler&quot; rel=&quot;noreferrer&quot;&gt;NASM&lt;/a&gt; to assemble simple &lt;code&gt;COM&lt;/code&gt; files from my modern Linux computer, but how can I create a DOS &lt;code&gt;EXE&lt;/code&gt; file while still in Linux?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, I am interested in a solution that will target 8088 and 80286 processors from a X64 Linux host. Many modern solutions only target 80386 and above.&lt;/p&gt;&#xA;" OwnerUserId="7316" LastEditorUserId="7316" LastEditDate="2018-01-06T04:04:24.563" LastActivityDate="2020-10-04T11:14:33.140" Title="Is there a way to link object files for DOS from Linux?" Tags="&lt;ms-dos&gt;&lt;assembly&gt;&lt;linux&gt;" AnswerCount="5" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5362" PostTypeId="2" ParentId="5341" CreationDate="2018-01-05T07:49:28.870" Score="4" Body="&lt;p&gt;My first several years of college included a variety of line editors on different systems. Many thousands of lines of code as I wrote 3D image generation and analysis systems. Oddly, the programming devices were old 80x24 text terminals and our high-end graphic output device was a ComRecorder... a $300,000 machine that in fact was nothing but sealed black box containing a tiny color monitor with a Nikon camera pointed at it... (turn on a pixel, cycle the shutter, repeat). Took 26 hours of compute time to generate a 3000x2000 pixel image, then wait 2 days to get the film developed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the line editors of the day was called xedit -- I still call what I do everyday the &quot;xedit-compile-damn&quot; loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On keeping code in your head... this was something you could actually do partially because you wrote everything. There were practically no libraries of code you could browse and integrate. The few that existed often needed a complete rewrite to work with your OS or compiler. My story... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was working on a new Dell 386-based machine in '87 running a flavor of Unix, writing the database admin UI for a barcode scanning system (the back office app for a grocery store). The video card failed in the computer and I continued to edit code, modify the database design, and compile systems for 6 days without ever seeing a single character on the screen until a new video card arrived. This was likely 30-50,000 lines of code spread through a substantial folder structure. That was the mind-muscle-memory you developed from never taking your fingers off the keyboard. The machine was slow, so you were used to typing into a command buffer and being 3-5 commands ahead of what was actually running. It was normal then, but a skill that could never be developed after the mouse became a primary input tool. I certainly couldn't do it today.&lt;/p&gt;&#xA;" OwnerUserId="7521" LastActivityDate="2018-01-05T07:49:28.870" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5363" PostTypeId="2" ParentId="5321" CreationDate="2018-01-05T08:02:17.097" Score="8" Body="&lt;p&gt;The old computer cases I saw were some pretty thick sheet metal, almost exactly like old car bodies from pre-1970s (enough metal that they can rust outside for years and still be sanded down &amp;amp; used without having holes everywhere). Treating it just like a car body paint repair would work fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds like it's just a couple very small spots, so I would just use a tiny piece of sandpaper to get rid of only the rust, then paint the bare metal to match. Primer might be optional if your paint doesn't need it, but it could &quot;fill in&quot; more of the void if that's required. Scratches could be filled using a very fine brush or even a toothpick to just fill in the crack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Auto paint has a rainbow of colors available, you might find a match in a tiny pen-like bottle, or get some custom colored to match. Check what house paints are available too, it might be cheaper to go to a hardware store like Home Depot, Lowes, Rona, etc for custom colors too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matching the texture would be more difficult. If the spots are very small &amp;amp; you wouldn't notice the missing texture from just looking, I'd probably just skip it. But there are techniques to get textures in paint using special paints, or additives, or using sponges or rags or brushes or combs. Again house &amp;amp; furniture paints have more texture options, searching for &quot;textured paint&quot; led to this &lt;a href=&quot;https://www.homedepot.com/c/how_to_texture_paint_HT_BG_PA&quot; rel=&quot;noreferrer&quot;&gt;Home Depot link on Textured Paint&lt;/a&gt;, definitely practice on a piece of scrap first.&lt;/p&gt;&#xA;" OwnerUserId="4298" LastActivityDate="2018-01-05T08:02:17.097" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5364" PostTypeId="2" ParentId="5361" CreationDate="2018-01-05T09:16:28.863" Score="8" Body="&lt;p&gt;NASM can generate OMF-format object files, which are the most common format for DOS programs (although there are other options -- e.g. DJGPP uses COFF format object files, but IIRC the results needs a 386 to run).  A search for linkers that support this format turns up few possibilities: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/JWasm/JWlink&quot; rel=&quot;noreferrer&quot;&gt;JWLink&lt;/a&gt; is a fork of the old Watcom linker, which was open-sourced a while back.  This is probably your best bet of all of the possibilities I list here because it's a known-working linker that has an officially supported Linux port.  I'm including the other options below only for completeness sake, because I found them first.  It seems that the only problem with this version is that it doesn't support the DOS/16M DOS extender environment that was usually used with Watcom's tools, so if you wanted to do that you'd probably need to run the official Watcom linker under DOS.  I think it does support DOS/4GW, but that requires a 386 to run.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.devoresoftware.com/freesource/wlsrc.htm&quot; rel=&quot;noreferrer&quot;&gt;WarpLink&lt;/a&gt;, which seems to be primarily designed to run in DOS, and is largely written in assembly language modules written using the MASM syntax.  You may be able to get this to assemble using &lt;a href=&quot;https://github.com/JWasm/JWasm&quot; rel=&quot;noreferrer&quot;&gt;JWASM&lt;/a&gt;, which is an open-source version of the Watcom assembler, which was somewhat compatible.  Some modules are written in C, and if you're lucky this means the IO is handled in those modules so it &lt;em&gt;may&lt;/em&gt; be possible to port to Linux. Unfortunately, I have no experience using it, so can't advise beyond this.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you can't get that to run under Linux, another possibility would by &lt;a href=&quot;http://devel.archefire.org/mirrors/my.execpc.com/~geezer/johnfine/jloc.htm&quot; rel=&quot;noreferrer&quot;&gt;JLoc&lt;/a&gt;.  JLoc is shareware, rather than open source, and the standard distribution is for DOS 386 protected mode.  However, its author John Fine was involved in NASM development back in the late 90s and if you can find him (his home page has disappeared, but he may still be contactable via the email address in the linked documentation) may be persuaded to either open source it or release a Linux version.  The code is apparently written in C (for DJGPP) so should be somewhat easier to port.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If all else fails, if you have experience working in C writing a linker yourself isn't actually out of the question.  The EXE (or &quot;MZ&quot; as it's sometimes known) file format is simple, and there are available libraries that can load object files -- or you can use NASM's &quot;rdf&quot; output format, which was intentionally designed to be as simple as possible in order to support writing custom linkers.  There's an example of an extremely simple flat-format output linker in the NASM source code that could server as a starting point for a linker that produces EXE files.  You may need to hack the NASM source code a bit to make RDF work in this context -- it doesn't support segment relocations at present, but it should be pretty simple to add them.  If you get stuck on that, add a comment here with a way to contact you off this site and I'll try to find some time to assist.  It's been a while since I did any hacking on NASM, but I don't think it's changed much since then, so I ought to be able to figure it out reasonably quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Edit: I previously also sugested 'alink', but having had a look through the source code it seems to only support 32-bit protected mode output using a DPMI DOS extender)&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-01-05T11:25:27.863" LastActivityDate="2018-01-05T11:25:27.863" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5365" PostTypeId="2" ParentId="3296" CreationDate="2018-01-05T09:39:51.397" Score="1" Body="&lt;p&gt;From the beginning Pascal has always had a &lt;code&gt;goto&lt;/code&gt; statement. So while it didn't have explicit &lt;code&gt;break&lt;/code&gt; and &lt;code&gt;continue&lt;/code&gt;, they were trivially easy to emulate:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while someCondition do&#xA;  begin&#xA;    2: &#xA;    (* do some stuff *)&#xA;    goto 1; (* Equivalent to break *)&#xA;    (* do some more stuff *)&#xA;    goto 2;&#xA;    (* do even more stuff *)&#xA;  end;&#xA;1:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;break&lt;/code&gt; and &lt;code&gt;continue&lt;/code&gt; are more convenient of course but they are essentially just &lt;code&gt;goto&lt;/code&gt; statements and personally I really don't like them. I've never used &lt;code&gt;continue&lt;/code&gt; and I only use &lt;code&gt;break&lt;/code&gt; in C switch statements.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2018-01-05T09:39:51.397" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5366" PostTypeId="2" ParentId="5361" CreationDate="2018-01-05T10:24:48.947" Score="5" Body="&lt;p&gt;I think the easiest way is to use &lt;strong&gt;DOSBOX&lt;/strong&gt; like emulator on Linux and use &lt;strong&gt;NASM&lt;/strong&gt; inside it. That way you can test your code directly in &lt;strong&gt;MS-DOS&lt;/strong&gt; environment (even if just emulated).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not a Linux user so I do not know if &lt;strong&gt;DOSBOX&lt;/strong&gt; works correctly on &lt;strong&gt;Linux&lt;/strong&gt; but simple google search &lt;a href=&quot;https://ubuntuforums.org/showthread.php?t=2041725&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOSBox - Runs Old MS-DOS Games/Programs in Linux - Tecmint&lt;/a&gt; suggest it does. Just do not forget to increase the number of &lt;strong&gt;CPU&lt;/strong&gt; tics to match desired Speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both &lt;strong&gt;NASM&lt;/strong&gt; and &lt;strong&gt;TASM&lt;/strong&gt; works under Windows &lt;strong&gt;DOSBOX&lt;/strong&gt; so I see no reason why it should not work in Linux either. Here few relate SO/SE QAs of mine (all are &lt;code&gt;*.com&lt;/code&gt; however):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/29579522/2521214&quot;&gt;NASM code compiled under DOSBOX&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/45780565/2521214&quot;&gt;TASM code compiled under DOSBOX&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/45583938/2521214&quot;&gt;NASM LINEZ Game&lt;/a&gt; but this one got deleted so you need hi rep on SO/SE to see it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You just need &lt;strong&gt;NASM&lt;/strong&gt; binaries for &lt;strong&gt;MS-DOS&lt;/strong&gt; to make this work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC To create an &lt;code&gt;*.exe&lt;/code&gt; file from &lt;strong&gt;NASM&lt;/strong&gt; the code should look a bit differently than the &lt;code&gt;*.com&lt;/code&gt; file and also the switches are a bit different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;strong&gt;NASM&lt;/strong&gt; the &lt;code&gt;*.com&lt;/code&gt; file looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[BITS 16]&#xA;[ORG 100h]&#xA;&#xA;[SEGMENT .text]&#xA;    ;here goes the code&#xA;    ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And this is my &lt;code&gt;vc.ext&lt;/code&gt; entry to compile it in Volcov commander:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;asm:@cls&#xA;    @c:\language\compil\nasm\nasm.exe -ic:\language\source\nasm\inc\ -w+orphan-labels -o !.com !.!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I did not do &lt;code&gt;*.exe&lt;/code&gt; files at that time so I do not have any example. All I found is some protected mode demo and from it the source code for exe is different:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&#xA;;;; Init Flat 32 bit ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&#xA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&#xA;%include &quot;pmode.lib&quot;&#xA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&#xA;;;; Main: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&#xA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&#xA;bits 32&#xA;_main:      sti&#xA;&#xA;        mov     bx,101h&#xA;        mov     ax,4f02h&#xA;        int     10h&#xA;&#xA;        call    _getselector&#xA;        mov     edx,0A0000h&#xA;        call    [_setselector]&#xA;        mov     es,ax&#xA;&#xA;        mov edi,0&#xA;        mov al,13&#xA;        mov ecx,65535&#xA;        rep stosb&#xA;&#xA;        mov ax,0&#xA;        int 16h&#xA;        mov ax,3&#xA;        int 10h&#xA;&#xA;        mov     ax,es&#xA;        call    _freeselector&#xA;        mov     es,[_seldata]&#xA;        jmp     _exit&#xA;        CODEEND&#xA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&#xA;;;; End. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&#xA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where &lt;code&gt;pmode.inc&lt;/code&gt; contains subroutines macros and stuff defined under:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;section code&#xA;bits 16&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The compilation and link &lt;code&gt;vc.ext&lt;/code&gt; entry using turbo assembler linker:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;asm:@cls&#xA;    @c:\language\compil\nasm\nasm.exe -ic:\language\source\nasm\inc\ -w+orphan-labels -f obj !.!&#xA;    @c:\language\compil\tasm\tlink.exe /3 /x !.obj , !.exe&#xA;    @del !.obj&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So without protected mode all the stuff should be in 16 bit I think...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do not forget to use your own paths in the &lt;code&gt;vc.ext&lt;/code&gt; file...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-01-05T10:57:34.863" LastActivityDate="2018-01-05T10:57:34.863" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5367" PostTypeId="2" ParentId="5354" CreationDate="2018-01-05T10:38:48.847" Score="3" Body="&lt;p&gt;The border and multiplied scanline resolution effects would not work properly creating artifacts. The same goes for multitech techniques. Also sound is sometimes affected by this. Other than that no contention means higher speed for code in contented areas at the same CPU frequency. That could lead to crashes in timing critical code. That is the reason why some games are runing on genuine ZX 48K and reseting on some clones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This goes also in reverse so such code written for Timex would not work on genuine ZX 48K properly. Some programs (especially demos) detect the type of computer they run on and use timing critical routines coded specially for them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many ways for detection like:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;floating bus&lt;/li&gt;&#xA;&lt;li&gt;interrupt frequency&lt;/li&gt;&#xA;&lt;li&gt;ROM signature&lt;/li&gt;&#xA;&lt;li&gt;RAM page switching test&lt;/li&gt;&#xA;&lt;li&gt;probing machine specific HW&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and probably much more ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastActivityDate="2018-01-05T10:38:48.847" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5368" PostTypeId="2" ParentId="5354" CreationDate="2018-01-05T11:56:05.770" Score="2" Body="&lt;p&gt;I also found an interesting link talking about differences in the Timex inner-workings about memory/video inner workings here &lt;a href=&quot;http://comp.sys.sinclair.narkive.com/QIaAtnsk/interrupt-timing-of-timex-ntsc-spectrum-clones&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://comp.sys.sinclair.narkive.com/QIaAtnsk/interrupt-timing-of-timex-ntsc-spectrum-clones&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appear the TC Timex series were more compatible with than the TS, and had the floating bus, hence my confusion. I read something while ago, and probably mixed it up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there are difference in timings:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;On a real 48K Speccy, the ULA starts starts putting the Z80 under&#xA;  contention 14336 T-states after the interrupt. Because of this&#xA;  contention, the effects of writing to the first display byte or border&#xA;  (even though it is invisible behind the display) will be delayed a&#xA;  little. Three T-states later (14339) the ULA reads the first display&#xA;  byte. It is at T-state 14341 that the first top left hand display&#xA;  pixel is output to the TV (the T-state after it has read the first&#xA;  Attribute byte).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Floatspy returns first Display byte fetch at 14347 (8 Tstates later -&#xA;  I thought they were accounting for the length of the IO instruction,&#xA;  (14336+11) but as Woody has caused me to rethink this, I see that this&#xA;  is not the case as the difference is 8. I dunno what Ramsoft are&#xA;  thinking now ;-) )&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[ It's time to run away if you're not interested in nerdy details....&#xA;  ] A huge amount of analysis has shown that the precise timing of the&#xA;  IO/ Mem contention, byte fetches and pixel output is (first 4 bytes) :&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;14336 IO Contention Starts&lt;br&gt;&#xA;  14337 -&lt;br&gt;&#xA;  14338 Memory Contention Starts&lt;br&gt;&#xA;  14339 First display byte fetch&lt;br&gt;&#xA;  14340 First attribute byte fetch&lt;br&gt;&#xA;  14341 IO Contention End, Border finish, 1st and 2nd pixels output to&#xA;  screen, second display byte fetched from memory.&lt;br&gt;&#xA;  14342 Second attribute byte fetch, 3rd and 4th pixels output to screen&lt;br&gt;&#xA;  14343 Memory contention end, 5th and 6th pixels output to screen&lt;br&gt;&#xA;  14344 IO contention start, 7th and 8th pixels output to screen &#xA;  14345 9th and 10th pixels output&lt;br&gt;&#xA;  14346 Memory contention starts, 11th and 12th pixels output to screen&lt;br&gt;&#xA;  14347 Display byte 3 fetch, 13th and 14th pixels output&lt;br&gt;&#xA;  14348 Attribute byte 3 fetch, 15th and 16th pixels output&lt;br&gt;&#xA;  14349 IO Contention End, Display byte 4 fetch, 17th and 18th pixel&#xA;  output&lt;br&gt;&#xA;  14350 Attribute byte 4 fetch, 19th and 20th pixel output  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The contention start and end T-states are inclusive, so the start and&#xA;  end T-states experience contention, not the one following it. Note&#xA;  also that the memory and IO contention periods are &lt;em&gt;different&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2019-04-28T14:07:58.243" LastActivityDate="2019-04-28T14:07:58.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5369" PostTypeId="1" AcceptedAnswerId="5376" CreationDate="2018-01-05T13:14:09.870" Score="10" ViewCount="2037" Body="&lt;p&gt;The 6502's decode ROM takes an input which tells it when to start the next instruction. In the case of something like an &lt;code&gt;INX&lt;/code&gt; or &lt;code&gt;LDA #7F&lt;/code&gt;, it is obvious that once the output from the ALU has been latched in the destination register, the ROM may issue the signal to start the next instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the conditional branches, &lt;code&gt;BEQ&lt;/code&gt;, &lt;code&gt;BMI&lt;/code&gt; and so on either take 2 or 3 cycles depending on whether the branch is taken or not. That makes sense: in the case that the branch is taken, the ALU needs to update the PC. And otherwise of course, the next instruction may start early. But how is this behaviour implemented?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can imagine one way to do it would be to have all the relevant flags serve as inputs to the decode ROM. Then &lt;code&gt;BEQ&lt;/code&gt; and friends could be microprogrammed to work differently depending on which bits were set. But a look at &lt;a href=&quot;http://www.pagetable.com/?p=39&quot; rel=&quot;noreferrer&quot;&gt;the block diagram&lt;/a&gt; shows that's not how it works. And probably it would be a wasteful way to do it since so few instructions would need it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way might be to send the branch offset and the low byte of the program counter to the ALU, and then conditionally write the addition/subtraction to the low byte of the program counter if the branch is taken (also taking care to handle the carry-out), or else issue the next instruction. But the datapaths on the block diagram do not show that the data really can move in this way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the block diagram, as far as I can see, also does not show that there is anything which takes the status flags as inputs. So I am confused about how this actually works!&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-01-06T15:03:46.560" Title="How does the 6502 implement its branch instructions?" Tags="&lt;mos-650x&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5370" PostTypeId="2" ParentId="5369" CreationDate="2018-01-05T14:01:47.373" Score="10" Body="&lt;p&gt;(Caveat, this is from far away memory)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general your second assumption is right. But step by step:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I can imagine one way to do it would be to have all the relevant flags serve as inputs to the decode ROM. Then BEQ and friends could be microprogrammed to work differently depending on which bits were set. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now, as the 6502 logic is more a highly (in hardware) optimized microprogramm than what CS classes usually tell, not everything is really in the ROM part, but also realized as dedicated circuitry. After all, this hybrid optimization is the true genius of the 6500.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition it's neccesarry to keep in mind that Mr. Hanson's diagram isn't a full schematic, but rather simplified to make it easily readable in the first place. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Signals like Carry &lt;strong&gt;are&lt;/strong&gt; inputted into the block called &lt;em&gt;Random Control Logic&lt;/em&gt; as they are not only needed for branches, but for example in each and every addressing to detect page overrun. Remember the additional clock the original 6500 needed when an index causes a carry into the upper 8 bit of a data address? Well, the 'microcode' within the &lt;em&gt;Decode ROM&lt;/em&gt; always include this additional cycle, but with Carry cleared, the logic cancels this step out by advancing the micro programm counter (called &lt;em&gt;Timing Generation Logic&lt;/em&gt; here) one ahead (No the wide arrows).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Another way might be to send the branch offset and the low byte of the program counter to the ALU, and then conditionally write the addition/subtraction to the low byte of the program counter if the branch is taken (also taking care to handle the carry-out), or else issue the next instruction.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yup, that's basically the way it is done.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But the datapaths on the block diagram do not show that the data really can move in this way.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure they do. Note the way how there is a &lt;em&gt;Pass Mosfets&lt;/em&gt; box between DB and SB (look right between PCH and S). This way the offset noted in the branch instruction is routed from the &lt;em&gt;Input Latch&lt;/em&gt; (DL) via DB and SB over to the A-side (AI) of the AL, while PCL is transferred using ADL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yup, much like a diversion sign on the daily ride to work, which one doesn't note anymore :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And the block diagram, as far as I can see, also does not show that there is anything which takes the status flags as inputs. So I am confused about how this actually works!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Part of the simplification. Note how three control signals directly go into Carry, while ACR from the ALU points rather unspecified in from above. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, while the Hanson-Diagram does reveal a lot, and is for most parts correct, it's not an exact schematic, but intended to ilustrate certain features for his lectures and IEEE micro scripts. For example one of his publications (in 1995) is exactly about using D-flipflops as such pass thru blocks.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="2126" LastEditDate="2018-01-05T23:57:18.300" LastActivityDate="2018-01-05T23:57:18.300" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5371" PostTypeId="1" AcceptedAnswerId="5373" CreationDate="2018-01-05T21:26:57.543" Score="29" ViewCount="8522" Body="&lt;p&gt;In an interesting crossover between current events and Retrocomputing, the vulnerability known as &lt;a href=&quot;http://www.kb.cert.org/vuls/id/584653&quot; rel=&quot;noreferrer&quot;&gt;&quot;Meltdown&quot;&lt;/a&gt; was publicly disclosed on January 3rd 2018. The retro-computing tie-in is that this vulnerability is reported to impact all Intel microprocessors back to the 1995 release of the Pentium Pro (P6 micro-architecture).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the late 1990s, the dominant OS's for Intel machines were MS-DOS, which was slowly being retired, and Windows 95 and 98, which were the replacements still underpinned by MS-DOS. Of course, Windows NT was also on the rise, but was most prevalent in enterprises. My question is which of these OS's were TECHNICALLY vulnerable to Meltdown, taking into account whether the OS offered any real attempt at memory protection?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My impression is that MS-DOS and Windows offered no such protection*. Therefore, it's arguable that they weren't actually vulnerable to Meltdown, by virtue of the fact that no such vulnerability needed to exist to allow a rogue process to access &quot;private&quot; data owned by other processes. If this is true, then what time-frame can we pinpoint when systems became vulnerable to Meltdown accounting for OS features that guaranteed memory protection?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*NOTE: I'm recalling dev tools for Windows, like Dr. Watson and Bounds Checker, that seemed to allow full access to process memory without any special privilege.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-12-05T10:04:16.180" Title="Are MS-DOS and Windows 9x vulnerable to Meltdown?" Tags="&lt;ms-dos&gt;&lt;windows-98&gt;&lt;intel&gt;" AnswerCount="5" CommentCount="11" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5372" PostTypeId="2" ParentId="5371" CreationDate="2018-01-05T22:21:00.607" Score="13" Body="&lt;p&gt;This flaw does not affect MS-DOS because there is no kernel protection to subvert. It affects any protected mode Windows of any era that has a speculative CPU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, nothing before the Pentium Pro speculatively executed so a regular Pentium or below does not exhibit the bug. Therefore it is unlikely to affect a substantial number of real machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two observations underlying Meltdown:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;speculative execution can see memory even if accessing it should cause an access violation;&lt;/li&gt;&#xA;&lt;li&gt;speculative execution has a side effect, cache loading, that can be observed even when the speculative branch isn't taken.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So if you use one bit of a byte you don't have access to as an array index, multiplied by a suitable amount, you can test whether that bit was set or cleared by observing the timing effect of trying to access the array yourself. If the section indexed when the bit is a 1 is in the cache, the bit must have been a 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fix is not to have kernel memory mapped at all when running user code. The mapping and unmapping cause a large performance hit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No operating system would volunteer to apply that protection if it weren't necessary, so you should expect all protected mode operating systems to be affected.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-01-06T19:09:17.080" LastActivityDate="2018-01-06T19:09:17.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5373" PostTypeId="2" ParentId="5371" CreationDate="2018-01-05T22:45:31.313" Score="41" Body="&lt;p&gt;The Meltdown attack is about figuring out what's in protected memory (typically, kernel memory) by arranging for it to be speculatively read, and then looking for residual side effects after the speculative read is discarded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-DOS is immune to Meltdown because it doesn't do memory protection.  If you want to figure out what's in RAM, you can simply look.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 9x has a userspace/kernelspace split with kernel protection (and some bugs: parts of kernel-critical memory were left user-writeable, so a userspace program could bring down the entire system).  The kernelspace memory mapping includes all of physical RAM, which means a Meltdown-style attack can read everything, just like it could on an unpatched Linux system.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2018-01-05T22:45:31.313" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="5374" PostTypeId="2" ParentId="5371" CreationDate="2018-01-06T01:33:25.830" Score="19" Body="&lt;p&gt;For the most part you're correct. Neither MS-DOS nor Windows 95/98/ME implemented a security model that would not be impacted by the Meltdown or Spectre vulnerabilities.  MS-DOS didn't protect memory at all, Windows 9x's separation of user and &quot;kernel&quot; memory was just to protect against user processes accidentally from modifying memory outside of their process. An MS-DOS program can read whatever memory it wants and any Windows 9x program can load a device driver (VxD) that can read whatever memory it wants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there is one way that potentially these operating systems could be affected by these vulnerabilities, at least in theory, and that's through a &lt;a href=&quot;http://www.tomshardware.com/news/meltdown-spectre-exploit-browser-javascript,36221.html&quot; rel=&quot;noreferrer&quot;&gt;JavaScript program running in an web browser&lt;/a&gt;. MS-DOS I would assume is safe from this in practice because I assume the are no web browsers for DOS that support JavaScript, but Windows 9x would be a different matter. A mitigating factor for Windows 9x is that web browsers that support these old operating systems would be old and so probably don't have the JavaScript features necessary for the exploit to work and probably have other JavaScript vulnerabilities that would be easier to exploit&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2018-01-06T01:33:25.830" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5375" PostTypeId="2" ParentId="5361" CreationDate="2018-01-06T05:03:06.330" Score="9" Body="&lt;p&gt;It turns out that &lt;a href=&quot;https://flatassembler.net/index.php&quot; rel=&quot;noreferrer&quot;&gt;FASM&lt;/a&gt; can generate &lt;code&gt;MZ&lt;/code&gt; 16-bit DOS executables directly:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;format MZ&#xA;&#xA;mov ah, 9h&#xA;mov dx, hello&#xA;int 21h&#xA;&#xA;mov ax, 4c00h&#xA;int 21h&#xA;&#xA;hello db 'Hello, world!', 13, 10, '$'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which can be assembled and linked automatically:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ fasm hello.asm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's not the same format as NASM, but it works for my purposes for now.&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2018-01-06T05:03:06.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5376" PostTypeId="2" ParentId="5369" CreationDate="2018-01-06T07:59:35.057" Score="3" Body="&lt;p&gt;Quick answer (I can update with a cycle-by-cycle description of what happens if you need it):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see exactly what happens in the 6502 using the in-browser simulation provided by &lt;a href=&quot;http://visual6502.org/JSSim/expert.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;visual6502.org&lt;/a&gt; in advanced mode. Enter a branch, and watch what the control lines do. You can even see where every signal is located on the chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 has a two-stage &quot;pipeline&quot; for instruction decoding, so the opcode for the next is already fetched in the last cycle of the current instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how the 2 cycle variant of branch works: One cycle for opcode fetch, one cycle to fetch the offset, and if the branch is not taken, then the next opcode is just fetched normally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the 3-cycle variant, it's too late to change the next opcode fetch (because it was already scheduled by the &quot;fetch offset&quot; cycle). Also, the offset has to be fed into the ALU to get the next address. So if the branch is taken, you'll have one &quot;empty&quot; memory cycle for the location directly after the branch instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also a 4-cycle variant, if the new PC location crosses a page boundary. The ALU is only 8 bit wide, so calculating the high byte of the PC using carry/borrow takes an additional cycle. Which means you have two &quot;empty&quot; fetches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flags etc. &lt;em&gt;are&lt;/em&gt; input to the control logic, the block diagram only provides an overview. &lt;a href=&quot;http://visual6502.org/wiki/index.php?title=6502_datapath&quot; rel=&quot;nofollow noreferrer&quot;&gt;This&lt;/a&gt; visual6502 wiki page explains names of the most signals.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2018-01-06T15:03:46.560" LastActivityDate="2018-01-06T15:03:46.560" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5377" PostTypeId="2" ParentId="5371" CreationDate="2018-01-06T08:41:47.233" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;mainly I'm trying to dispute the claim that computers have been vulnerable to Meltdown since 1995.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The claim was never that &lt;em&gt;all&lt;/em&gt; computers since 1995 were vulnerable, just &lt;em&gt;some&lt;/em&gt;.  Also not that all PPro-using computers were vulnerable (as a whole system), but just that those CPUs were vulnerable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Microsoft was not the only OS vendor for Pentium Pro CPUs in 1995,&lt;/strong&gt; there were x86 OSes that did full memory protection.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update: It turns out PPro / PII is not strictly vulnerable to Meltdown, instead leaking various microachitectural data but not cache/mem contents.&lt;/strong&gt;  Henry Wong ran some detailed tests of forbidden loads that were present or not in L1d cache (and various cases of TLB state) on a range of microarchitectures from P5 to Haswell, and Atom, K6, K8, Bulldozer, and Via.  With results in an interesting table.  &lt;a href=&quot;http://blog.stuffedcow.net/2018/05/meltdown-microarchitecture/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Microarchitecture Behind Meltdown&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P4 Prescott is vulnerable, as are Core 2 and later Intel.  (He didn't test PIII, Pentium M, or Core Solo so we don't know if Core2 is the first vulnerable uarch.)  The AMD and Via uarches aren't vulnerable.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Pentium Pro, Pentium II&lt;/strong&gt;&lt;br&gt;&#xA;  The Pentium Pro takes the “load value is a don’t-care” quite literally. For all of the forbidden loads, &lt;strong&gt;the&#xA;  load unit completes and produces a value, and that value appears to be&#xA;  various values taken from various parts of the processor&lt;/strong&gt;. The value&#xA;  varies and can be non-deterministic. None of the returned values&#xA;  appear to be the memory data, so the Pentium Pro does not appear to be&#xA;  vulnerable to Meltdown. The recognizable values include the PTE for&#xA;  the load (which, at least in recent years, is itself considered&#xA;  privileged information), the 12th-most-recent stored value (the store&#xA;  queue has 12 entries), and rarely, a segment descriptor from&#xA;  somewhere.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The Pentium II (Klamath) has the same behaviour as the Pentium Pro.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So it's not Meltdown; instead it's more like the &lt;a href=&quot;https://mdsattacks.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;general RIDL (Rogue In-flight Data Load) vulnerability&lt;/a&gt;,&lt;/strong&gt; and other MDS (Microarchitectural Data Sampling).  e.g. you might possibly be able to get some data the kernel stored before returning to user-space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The other not-vulnerable uarches, AMD, VIA, and Intel Atom, either don't produce a value at all, or produce zero.  So there's no microarchitectural data leakage there.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(The rest of this was written assuming the statement about PPro meltdown vulnerability was true.  Systems existed in 1995 that used x86 memory protection, and PPro wasn't widely used in Win95 boxes until later PII / PIII.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linux in 1995 (when PPro was released) had many real users and full working memory protection between separate userspace processes.  So did other Unix implementations on 386, like &lt;a href=&quot;https://en.wikipedia.org/wiki/386BSD&quot; rel=&quot;nofollow noreferrer&quot;&gt;386BSD&lt;/a&gt;, and some &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Unix&quot; rel=&quot;nofollow noreferrer&quot;&gt;non-free Unix implementations for 386&lt;/a&gt; which predated Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsoft's crufty Win9x OS family being widely used at the time meant that most people didn't have an OS with full privilege separation for multiple users (or unprivileged processes), or to protect the kernel from applications.  Win9x used virtual memory to stop processes from &lt;em&gt;accidentally&lt;/em&gt; crashing each other, not for security.  See Ross's answer, and another question: &lt;a href=&quot;https://security.stackexchange.com/questions/107546/old-os-memory-space-protection-was-it-really-that-bad&quot;&gt;Even Win9x did run processes in separate address spaces from each other&lt;/a&gt;, but its security model allowed any process to load a driver (VxD) and bypass that.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Also note that Pentium Pro was not widely used in home computers.  &lt;a href=&quot;https://en.wikipedia.org/wiki/Pentium_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pentium II in May 1997&lt;/a&gt; was what really replaced Pentium MMX.  Even the consumer-targeted PII was expensive at first: My first PC (in early 1998, IIRC) was a P-MMX running Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The workstations / servers that used PPro were probably mostly not running Win9x.  Some were probably running Linux or other Unix, many probably running Windows NT as mentioned in comments.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The claim that Intel CPUs dating back to 1995 were vulnerable to Meltdown is based on the fact that all of Intel's out-of-order CPUs (other than Pentium 4 (netburst microarchitecture)) can trace their lineage back to the first generation of P6 (Pentium Pro), and use the same fault-handling strategy for under-privileged TLB hits on kernel-only mappings: let the load continue microarchitecturally, and only flag it to fault on retirement, after potentially making other changes to micro-architectural state that depend on the loaded &quot;secret&quot; data, specifically the cache.  This is the Meltdown design flaw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(But it turns out that there have been changes over the years, and first-gen P6-family didn't expose cache contents.  The above reasoning for the claim made sense, but turned out to be wrong.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sandybridge-family is a new microarchitecture family, but it did evolve from P6-family (Nehalem being the last generation).  SnB incorporates some ideas from Netburst, but in a different form.  (E.g. the decoded-uop cache instead of the trace cache.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most Intel-based computers in 1995 were either using in-order CPUs, and/or running OSes that didn't try to enforce process isolation.   Some old 586 and 486 CPUs stayed in service for many years...  (But since some software at the time had a security model that's defeated by Meltdown, it makes sense to say computer, not just CPU.)&lt;/p&gt;&#xA;" OwnerUserId="3296" LastEditorUserId="3296" LastEditDate="2019-12-05T10:04:16.180" LastActivityDate="2019-12-05T10:04:16.180" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="5378" PostTypeId="2" ParentId="5371" CreationDate="2018-01-06T17:14:34.410" Score="9" Body="&lt;p&gt;Windows 95 is vulnerable to Meltdown. Spectre attack from JavaScript on 32 bit systems can turn into Meltdown if the processor is vulnerable to Meltdown. You probably don't care because where are you going to get a web browser for Windows 95 that supports JavaScript but doesn't have ridiculous security holes in it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Java applets are in a worse state. The root construction can be built in Java code. It looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;byte array[] = new byte[65536];&#xA;int z = targetbyte; /* plus some offset we can't know yet -- but kernel memory is high */&#xA;int accum = 0;&#xA;for (int b = 0; b &amp;lt; 8; ++b)&#xA;    for (int x = 0; x &amp;lt; 32; x++)&#xA;        for (int t = 0; t &amp;lt; 3; t++) {&#xA;            int s = 0;&#xA;            /* force array[4096] out of L1 cache */&#xA;            for (int y = 8192; y &amp;lt; 65536; ++y) s |= array[y];&#xA;            int y = (x == 31) ? z : 1;&#xA;            long time1 = System.nanoTime();&#xA;            if (y &amp;lt; 16) { /* branch predictor is trained for true */&#xA;                do {&#xA;                    /* s = array[1] during normal execution;&#xA;                       reads out-of-range memory during speculative execution&#xA;                       expression is jmpless array[array[y] ? 0 : 4096] */&#xA;                    s = array[(array[y] &amp;amp; (1 &amp;lt;&amp;lt; b)) &amp;gt;&amp;gt; (1 &amp;gt;&amp;gt; b) &amp;lt;&amp;lt; 12];&#xA;                } while (s == 0 &amp;amp;&amp;amp; y &amp;lt; 16); /* loops only during speculative execution */&#xA;            }&#xA;            s = array[4096];&#xA;            long time2 = System.nanoTime();&#xA;            if (x == 31 &amp;amp;&amp;amp; (time2 - time1) &amp;lt; some_constant_unique_per_cpu)&#xA;                accum |= (1 &amp;lt;&amp;lt; b);&#xA;         }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is the unified sequence that attacks both Spectre and Meltdown and targets the small cache liens on Pentium II and III processors (adjust to bigger lines for a VM guest). Pentium I isn't vulnerable. The internal &lt;code&gt;if&lt;/code&gt; protecting array bounds is also trained to true by the same code so it won't hose us.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any Java applet running in the web browser can read all memory on the system (int wraps around in 32 bit) so if by some miracle you have a fully patched web browser and Java implementation you still get smacked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 95 memory mapping is so poor that a Spectre attack is the equivalent of a Meltdown attack. (And MS-DOS uses a 1-1 mapping when running 32 bit DOS programs.) All memory is mapped above 3GB in all processes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are running this in a VM guest on a 32 bit host vulnerable to Meltdown it will read all host memory. If your host is 64 bit the host is protected by the fact the guest can't generate 64 bit read offsets and so can't read kernel memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't been able to fully check this, but the following should be correct: If your host machine is vulnerable to rowhammer (~doesn't have ECC memory), than you really are in trouble. Emulators tend to allocate the guest VM in one swoop, which tends in turn to allocate host memory in one swoop. This makes guessing adjacent memory easy, and the Spectre attacks on jitting emulators and true VMs able to bust out of the emulator by flipping bits in the jitted code (we remember true VMs have to JIT the guest kernel in some cases--once we have full control of the guest we can arrange them) and thereby get control of the VM process in the host machine. Please not the Spectre attack doesn't &quot;know&quot; it's in a VM and will read outside the VM bounds into the host process. Rowhammer is difficult to exploit. Rowhammer when you know the memory layout is not. If the host is vulnerable to Meltdown we can then repeat the process and take over the kernel. If not, we have the emulator process, which probably isn't running as its own user. (I think VirtualBox processes run as root; and the user probably started qemu as himself--either way is really bad.)&lt;/p&gt;&#xA;" OwnerUserId="418" LastEditorUserId="418" LastEditDate="2018-01-06T21:15:52.080" LastActivityDate="2018-01-06T21:15:52.080" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5380" PostTypeId="2" ParentId="5341" CreationDate="2018-01-07T00:29:02.973" Score="5" Body="&lt;p&gt;Beyond what has already mentioned in other answers, keep in mind that sometimes you know exactly what you need to change and where, especially during the typical edit-compile-test cycle typical of classical software development.  Think for example of the output most C compilers give when they hit a compilation error, you get a line number and an excerpt of the line where the error was.  In such a case, it's not all that difficult for someone with even a very basic understanding of &lt;code&gt;ed&lt;/code&gt; to make the necessary change.&lt;/p&gt;&#xA;" OwnerUserId="7197" LastActivityDate="2018-01-07T00:29:02.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5382" PostTypeId="2" ParentId="1811" CreationDate="2018-01-07T13:07:54.427" Score="14" Body="&lt;p&gt;Modern Gentoo still works on the 486 in 2018!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see the details including the video of my attempt here: &lt;a href=&quot;http://yeokhengmeng.com/2018/01/make-the-486-great-again/&quot; rel=&quot;noreferrer&quot;&gt;http://yeokhengmeng.com/2018/01/make-the-486-great-again/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Detailed instructions: &lt;a href=&quot;https://github.com/yeokm1/gentoo-on-486&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/yeokm1/gentoo-on-486&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Summary of implementation:&lt;br&gt;&#xA;1. Use a modern PC to do the compilation and installation&lt;br&gt;&#xA;2. Adjust Portage settings to target 486&lt;br&gt;&#xA;3. Modify Linux kernel options with the 486 option&lt;br&gt;&#xA;4. Compile everything&lt;br&gt;&#xA;5. Move the disk to the 486 PC&lt;br&gt;&#xA;6. Profit!  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to the answers in this thread for pointing me in the right direction.&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4364/7573&quot;&gt;https://retrocomputing.stackexchange.com/a/4364/7573&lt;/a&gt;&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1814/7573&quot;&gt;https://retrocomputing.stackexchange.com/a/1814/7573&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7573" LastActivityDate="2018-01-07T13:07:54.427" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5383" PostTypeId="2" ParentId="239" CreationDate="2018-01-07T18:46:33.573" Score="3" Body="&lt;p&gt;I am unaware of any formalised test suite for either the 6520 or 6522.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6526 is at least partially covered by Wolfgang Lorenz's C64 test suite. Because of the applicability to other machines, you usually see it &lt;a href=&quot;http://www.softwolves.com/arkiv/cbm-hackers/7/7114.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;documented for its 6502 tests&lt;/a&gt; (and the outward link to the suite itself there is broken; instead try that &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/crossplatform/emulators/msdos/pc64/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;listed here&lt;/a&gt;) but it includes a scattering of CIA (i.e. 6526) tests:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Programs CIA1TB123 and CIA2TB123 - CIA timer B 1-3 cycles after writing CRB&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Programs CIA1TA to CIA2TB - CIA timers in sysclock mode&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-01-07T18:46:33.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5384" PostTypeId="2" ParentId="5341" CreationDate="2018-01-07T20:23:17.320" Score="4" Body="&lt;p&gt;As others have said, around 1975-1978 we would write a program by hand on coding pads and send it to the punch room to be punched onto 80-column cards. It would then be taken down to the computer room for the first attempt at compilation; if you were lucky you got the output back 2 hours later. Compilation would always produce a complete line printer listing of the program, complete with line numbers (we used lorry-loads of line printer paper). The compiler error messages would also refer to line numbers, so you could then see where the errors were.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were then several ways you might apply the corrections (in my case I was using (a) in 1972, (b) in 1975, and (c) in 1978):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(a) punch replacement cards yourself for the incorrect lines, and insert them into the card deck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(b) punch a set of editing commands into a new deck of cards, and submit a batch job to apply these edits to the disk-based file containing the source code&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(c) wait until an interactive terminal became available - initially a teletype, subsequently a VDU that essentially emulated a teletype - and enter the editing commands interactively at the terminal. (Usual practice was to start at the end of the file and work towards the front, so that the line numbers on the line printer listing remained valid as long as possible). Then submit a batch compile job, and wait two hours to get the listing back, generally with a new set of error messages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By about 1979 we were starting to see editors developed to take advantage of VDU capabilities (vi being a not-particularly-good example); but we carried on using line-oriented editing because once you had memorised all the commands available, it was actually faster. &lt;/p&gt;&#xA;" OwnerUserId="4915" LastActivityDate="2018-01-07T20:23:17.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5385" PostTypeId="1" AcceptedAnswerId="5863" CreationDate="2018-01-08T01:42:25.463" Score="4" ViewCount="403" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Sirius_Systems_Technology&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Sirius_Systems_Technology&lt;/a&gt; the Victor 9000 aka Sirius 1 was &quot;the most popular 16-bit business computer in Europe, especially in Britain and Germany,&quot; though its lack of IBM compatibility meant it couldn't survive in an IBM world, and it died after the PC followed it across the Atlantic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How many units of this machine were sold in total worldwide? I haven't been able to find any actual numbers, even plausible estimates.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-03-03T08:23:40.210" Title="How many units did the Victor 9000 sell?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5386" PostTypeId="1" CreationDate="2018-01-08T08:15:59.290" Score="-2" ViewCount="367" Body="&lt;p&gt;I know to run 8086 using MASM &amp;amp; 8086 emulator, but how to run 8086 programs in dos without any special software. &lt;/p&gt;&#xA;" OwnerUserId="7584" LastEditorUserId="79" LastEditDate="2018-09-13T16:45:57.147" LastActivityDate="2018-09-13T16:45:57.147" Title="Run 8086 programs in dos using simple os other than any special software" Tags="&lt;ms-dos&gt;&lt;8086&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2018-01-08T15:28:28.670" ContentLicense="CC BY-SA 3.0" />
  <row Id="5387" PostTypeId="2" ParentId="5386" CreationDate="2018-01-08T11:16:52.883" Score="4" Body="&lt;p&gt;Assuming your question is about working with 8086 assembly language programs, without using third party software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at the DEBUG.EXE program that is part of all practical MS-DOS distributions -it does contain a simple assembler and the needed auxiliary tools.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-01-08T11:16:52.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5388" PostTypeId="1" CreationDate="2018-01-08T13:29:10.983" Score="29" ViewCount="2902" Body="&lt;p&gt;I have two Amiga 1200's in pieces. One of them has a 52mb HDD in it and on it is my dissertation from 1995 and all my essays. I want to retrieve the dissertation because it's the only surviving copy. I use elementary - xenian - ubuntu linux self customised. &#xA;The HDD is wired to the old Amiga for power and has an IDE socket. Do you think I can just connect it and retrieve the files as text files? &lt;/p&gt;&#xA;" OwnerUserId="7588" LastEditorUserId="11916" LastEditDate="2019-04-17T00:43:44.723" LastActivityDate="2020-05-06T17:01:19.347" Title="How can I recover the contents from an Amiga HDD using modern Linux?" Tags="&lt;amiga&gt;&lt;data-preservation&gt;&lt;file-system&gt;&lt;amiga-1200&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5389" PostTypeId="2" ParentId="5341" CreationDate="2018-01-08T13:52:37.333" Score="9" Body="&lt;p&gt;Blind people still program this way today.&#xA;Those screenreaders they use are only 120characters wide and 3 lines high. This is for a very expensive model (like the price of a car).&lt;/p&gt;&#xA;" OwnerUserId="7589" LastActivityDate="2018-01-08T13:52:37.333" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5390" PostTypeId="2" ParentId="5388" CreationDate="2018-01-08T14:33:59.597" Score="34" Body="&lt;p&gt;You should be able to use the Amiga hard drive directly on your Linux computer (provided it still has IDE support).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linux also understands AFFS (Amiga Fast File systems), at least once AFFS support is compiled into the kernel (from your &quot;self customized&quot; wording I would assume you know how to do that). Apparently, some Linux tools don't seem to understand Amiga partition tables, though, so &lt;code&gt;mount&lt;/code&gt; would not be able to properly mount the partition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;parted&lt;/code&gt; should be able to understand the disks partition table, so (assumed your Amiga disk shows up as &lt;code&gt;/dev/sdc&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;parted /dev/sdc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the &quot;u&quot;, &quot;b&quot;, and &quot;p&quot; commands should display the partition start sectors:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Partition Table: amiga&#xA;Number Start End Size File system Name Flags&#xA;1 &amp;lt;s1&amp;gt; &amp;lt;e1&amp;gt; &amp;lt;sz1&amp;gt; affs1 DH0 boot&#xA;2 &amp;lt;s2&amp;gt; &amp;lt;e2&amp;gt; &amp;lt;sz2&amp;gt; affs1 DH1&#xA;3 &amp;lt;s3&amp;gt; &amp;lt;e3&amp;gt; &amp;lt;sz3&amp;gt; affs1 DH2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(for a disk with 3 affs partitions, the numbers between &quot;&amp;lt;&gt;&quot; have been replaced by variables here)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should now be able to mount the Amiga partitions using&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo mount -t affs -o offset=&amp;lt;s3&amp;gt; /dev/sdc /media/Amiga&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I not, some people have reported this to work by putting the raw partition onto a loop device and then mounting the loop such as in&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ sudo losetup -o &amp;lt;s3&amp;gt; /dev/loop1 /dev/sdc&#xA;$ sudo mount -t affs /dev/loop1 /media/Amiga&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Another possible option could be to use an Amiga emulator that runs on Linux like FS-UAE and point it to the raw device as a hard disk. Although it does not seem to be officially supported, people have &lt;a href=&quot;https://fs-uae.net/using-hard-drives&quot; rel=&quot;noreferrer&quot;&gt;reported it to work&lt;/a&gt; (scroll down to &quot;Using real Hard Drives&quot;). That has the added benefit that you would be able to use native Amiga programs in order to retrieve your documents. You would then use another (Linux-native) directory mounted to the emulated Amiga top copy your files over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As proposed by comments:&#xA;You could also save as much of your HD contents as early as possible with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dd if=/dev/sdc of=~/AmigaDisk &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and work from that image with the same methods as above.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-01-08T16:30:03.890" LastActivityDate="2018-01-08T16:30:03.890" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5391" PostTypeId="2" ParentId="2402" CreationDate="2018-01-08T21:27:57.627" Score="9" Body="&lt;p&gt;Seemingly predating that StarDot thread by a few years, I found this &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/BBC/&quot; rel=&quot;noreferrer&quot;&gt;list of documents&lt;/a&gt; that includes &quot;HardwareSpecification.txt&quot;, &quot;BASICOutline.txt&quot; and a few others that are &quot;(c) Copyright BBC 1981&quot; rather than copyright Acorn, or dated 1982 when the BBC Micro actually appeared. There are various details not from the StarDot thread, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;unused gate inputs will not be left open-circuit;&lt;/li&gt;&#xA;&lt;li&gt;with the sole exception of the Econet interface, integrated circuit sockets will be fitted in all unequipped positions;&lt;/li&gt;&#xA;&lt;li&gt;dimensions: 400mm wide by 300 mm deep by 60mm high approx;&lt;/li&gt;&#xA;&lt;li&gt;the case will be of two-part construction, the upper shell supporting the keyboard PCB and the lower shell the main PCB and power supply. Electrical connection between the two parts will be by flexible ribbon cable;&lt;/li&gt;&#xA;&lt;li&gt;[it is] essential that all points which could be at mains potential when power is applied be inaccessible to the &quot;standard finger&quot;;&lt;/li&gt;&#xA;&lt;li&gt;it must be possible to generate all ASCII codes (0/0 to 7/15) by using the SHIFT and CTRL keys in conjunction with the other keys;&lt;/li&gt;&#xA;&lt;li&gt;a RESET (or BREAK) key will not be provided on the main keyboard;&lt;/li&gt;&#xA;&lt;li&gt;both pound sign and number symbol (hash) must be included ... the RETURN key will be a different colour from the rest;&lt;/li&gt;&#xA;&lt;li&gt;the power supply will withstand an overload indefinitely and will protect itself from damage through overheating, even at 260v mains. The power supply will NOT be a switched-mode type;&lt;/li&gt;&#xA;&lt;li&gt;a 1v pk-pk (75 ohms) composite video (PAL coded) output will be provided on a 75 ohm BNC socket accessible at the rear of the machine. The socket will not be fitted in the basic machine;&lt;/li&gt;&#xA;&lt;li&gt;a cassette modem will be incorporated ... the demodulator will be insensitive to input level variations of up to +6dB or -12dB and must recover the UAR/T clock from the tape in order to track short and long-term speed variations, It must cater for an instantaneous speed error of at least 10% WITHOUT relying on the inherent insensitivity to speed of asynchronous data, i.e. bit-centre sampling must be maintained;&lt;/li&gt;&#xA;&lt;li&gt;a parallel printer output to Centronics specifications will be provided. The 6522 I/O device will be fitted in the basic machine but the buffer components and connector need not be fitted as standard although provision will be made for these on the main PCB;&lt;/li&gt;&#xA;&lt;li&gt;provision will be made on the main PCB to fit a floppy disk controller plus data separator and buffer devices to allow interfacing to one or two mini-floppy or 8&quot; floppy drives ... both hardware and software must be capable of supporting 8&quot; disks to the IBM 3740 specification, although this may necessitate fitting an additional ROM which is not present in the basic machine. There is no requirement for double-density operation;&lt;/li&gt;&#xA;&lt;li&gt;an elapsed-time clock will be included in the basic machine, having a resolution of 10ms. The clock can be set and tested under software control;&lt;/li&gt;&#xA;&lt;li&gt;there will be 8 selectable display formats as follows ... (followed by exactly the BBC Micro's modes, including the requirement that 'text' modes be bitmaps);&lt;/li&gt;&#xA;&lt;li&gt;in modes 0 to 6 the &quot;colours&quot; are selectable from a palette of 16 effects being black, red, green, yellow, blue, magenta, cyan, white and the same eight colours automatically flashing;&lt;/li&gt;&#xA;&lt;li&gt;the CPU is a 6502A running at a 2MHz clock rate except when accessing some input-output devices, when the effective clock frequency is reduced to 1 MHz; and&lt;/li&gt;&#xA;&lt;li&gt;the level of R.F. radiation from the machine is to be minimised. The exact maximum level is to be agreed by the BBC.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It sounds to me like that document might be after Acorn has become the de facto supplier, given the specificity of the processor, the display modes, the implementation of econet, etc, but I'm pretty sure that even the Model A came with a composite BNC and that 8&quot; disks were never supported, and certain that the return key ended up being the same colour as all the other keys and that break is not only present but shift+break is the intended way of launching almost all disk-based software. Various other specifications I haven't quoted also weren't eventually met. There's also still quite a lot like that final item that is reserved for later specification by or agreement with the BBC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this is a statement of specifications intended to be met, not a description of the machine as completed.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-01-09T15:58:53.270" LastActivityDate="2018-01-09T15:58:53.270" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5393" PostTypeId="1" AcceptedAnswerId="5407" CreationDate="2018-01-09T19:55:07.523" Score="17" ViewCount="4099" Body="&lt;p&gt;I bought what was claimed by the seller to be an Issue 4S Spectrum 48k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried loading games and some worked while others didn't. Turns out it was the 16k ones that worked and 48k didn't. This pattern took a while to work out because the tapes were old as was the tape player. I put those that worked in one pile, with the others in another pile. And tried and tried again, in the time honoured fashion, changing volume, leads, cleaning. Games like Atic Atac would appear to load then reset the machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Others would fail with RAMTOP no good errors on the BASIC loader. Errors I had rarely seen before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Others with other memory errors like Out of Memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspected a memory problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I tried POKEing and PEEKing to all of upper memory with 255. Checked out OK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then...weirdness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;POKEing 0 to 32768 PEEKed as 4. 128 gave 132 and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I checked the P-RAMT system variable. 23732+23733*256 gave 32767.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it looked like a 16k but was claimed and sold to me as a 48k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Various weirdness occurred. Then it occurred to me from looking at how the ROM RST 0 (hard reset) worked that it might be certain bits working while others failed. Hence why 255 worked but 0 did not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zKd8V.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zKd8V.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aEDZg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aEDZg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The common element here appears to be that bit 2 stays on, no matter what. (using convention that bits are 0-7. That is, the bit that adds 4 to the binary number represented in decimal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This masks 255 and other values, as per the screenshots. But most values fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This same problem occurs at 32768, 32768+8191, 32768+16384, and other addresses in upper RAM that I've checked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the seller this is definitely a 48k Spectrum. He asked me to open it up and check and I did. The chips are there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What could have caused this? Damage in the post? Old capacitors? Damage when the seller did the composite video modification?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bulging electrolytic capacitors or not? Need replacing?&lt;a href=&quot;https://i.stack.imgur.com/eL1ue.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eL1ue.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And what about the bulging or solder damage to C64? No, not a Commodore 64 the capacitors marked c64?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PakPU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PakPU.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now trying to show the dirty and shiny side of the ICs. I apologise for the iPad 2 poor quality photo. I will post a better photo if I can get one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4jYH6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4jYH6.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7470" LastEditorUserId="7470" LastEditDate="2018-01-11T23:10:03.070" LastActivityDate="2018-01-11T23:10:03.070" Title="What is causing the problem with the RAM in this (claimed) Spectrum 48k?" Tags="&lt;zx-spectrum&gt;&lt;memory&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5394" PostTypeId="2" ParentId="5393" CreationDate="2018-01-09T20:18:18.967" Score="25" Body="&lt;p&gt;A single bad DRAM, probably — in machines of that vintage each DRAM holds only a single bit at each address; you use eight in parallel to serve an 8-bit bus.  And the Spectrum uses physically separate chips to serve its first 16kb and the other 32kb.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So a single chip holds the value of bit 2 for every address at or above 32768. No matter which address you pick in that range, you're talking to the same chip. An alternative chip handles bit 0, a third handles bit 1, etc. I can't find schematics beyond the issue 4a/b, but from that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VK0Fz.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VK0Fz.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;(&lt;a href=&quot;http://www.retroisle.com/sinclair/zxspectrum/Technical/Hardware/ZXSpectrumIssue4ab-Schematics.gif&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out IC15 to IC22 in the bottom right. Each is a 4532. That means it stores 32768 bits. Each handles a different bit on the data bus. IC18 handles bit 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such machines also use an open-collector bus: lines look like a logical 1 unless something is connected to them that says otherwise. So a RAM chip that wasn't there at all would produce this problem, just as one that was simply not functioning would.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, check for dead solder, etc, going to that DRAM and at worst consider replacing that chip. As a diagnostic, consider switching it with one of its neighbours and see whether the set bit changes.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-01-09T20:36:34.103" LastActivityDate="2018-01-09T20:36:34.103" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="5395" PostTypeId="2" ParentId="5318" CreationDate="2018-01-09T20:36:08.527" Score="0" Body="&lt;p&gt;Electronic Contact Cleaner (i.e. &lt;a href=&quot;http://www.penntoolco.com/96-004-450/?_vsrefdom=adwords&amp;amp;gclid=EAIaIQobChMItIePpNvL2AIVxpd-Ch1A1QdXEAYYASABEgLmzPD_BwE&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.penntoolco.com/96-004-450/?_vsrefdom=adwords&amp;amp;gclid=EAIaIQobChMItIePpNvL2AIVxpd-Ch1A1QdXEAYYASABEgLmzPD_BwE&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And compressed air are your friends.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reseating chips (and forget spellcheck, it IS a word) is a great point just dont press too hard, they are more brittle then you'll be used to as heat treating chips has come a long way.&lt;/p&gt;&#xA;" OwnerUserId="7609" LastActivityDate="2018-01-09T20:36:08.527" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5396" PostTypeId="2" ParentId="2297" CreationDate="2018-01-09T23:54:41.860" Score="0" Body="&lt;p&gt;Not specifically 5 or 6 bit, but also not a normal 7 or 8 bit byte: Motorola CODEX security modems have a bunch of security features that made it very hard for a non-CODEX modem to attach to them. They could be set up to 10bits, (e/o/space) parity, with (0,1,2) stop bits as well as a unique unit ID which dropped the connection if it wasn't provided as part of the initial handshake.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The extra bits were only transmitted over the wire, the DTE was a normal device.&lt;/p&gt;&#xA;" OwnerUserId="3648" LastActivityDate="2018-01-09T23:54:41.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5397" PostTypeId="1" AcceptedAnswerId="5398" CreationDate="2018-01-10T00:27:27.733" Score="8" ViewCount="1045" Body="&lt;p&gt;I've been thinking about the possibility of overclocking 8-bit computers of the late seventies and early eighties, and it seems to me that the things most likely to break, would be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Cassette save and load routines, on all computers that used cassette tapes; these are inherently timing-sensitive, and if you change the clock speed by more than a few percent, you lose interoperability with tapes written by the original hardware.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Sound in cases like the Apple II and CoCo, where instead of a tone generator you have a DAC that has to be toggled by the CPU at the desired frequency.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is this a correct assessment? In particular, are there any computers that use cassette tapes in a way that would not break if you change the CPU speed?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-07-15T21:41:48.147" Title="Overclocking an 8-bit computer" Tags="&lt;cassette-tape&gt;&lt;overclocking&gt;" AnswerCount="4" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5398" PostTypeId="2" ParentId="5397" CreationDate="2018-01-10T01:20:54.473" Score="9" Body="&lt;p&gt;If you're changing just CPU clock speed, leaving the other components as is then amongst those that would continue to read tapes correctly are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Vic-20 and the Commodore 64. In the case of the Vic-20 tape input is connected to one of the control lines of a 6522 VIA. Wave length determination is achieved by loading a timer on that VIA and checking its value upon the interrupt triggered by the change in the control line. So if the VIA retains its original clock, tape loading will work as per usual. The same is true of the C64, but substitute a 6526 CIA for the VIA. You'd have to change your disk signalling routines though, because they're entirely dependent on the CPU toggling lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC Micro and the Acorn Electron. In the former case a serial ULA feeds a Motorola 6850 ACIA. In the latter case a custom ULA does the whole thing. But in both cases the CPU does whatever it is normally doing and is informed by interrupt of tape events.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MSX would likely not be affected for many pieces of software, depending on the degree of overclocking. It picks the speed it thinks data is on the tape based on measuring the initial tone, and supports a range from about 600 baud up to about 3600 baud. Commercial tapes are likely to be at around 1200 baud because it's one of the two fixed speeds built in for saving, and is more reliable than the alternative faster 2400 baud. So you could probably double the CPU clock rate and the BIOS would still cope — 1200 baud would look like 600 baud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Machines that would definitely be broken that I'm aware of, in all cases because the CPU directly polls an input bit and counts time for itself:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the ZX80, ZX81 and ZX Spectrum;&lt;/li&gt;&#xA;&lt;li&gt;the SAM Coupe;&lt;/li&gt;&#xA;&lt;li&gt;the Amstrad CPC*;&lt;/li&gt;&#xA;&lt;li&gt;the TRS-80 Model 1.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On the Oric tape input is wired to CB1 on a 6522 but I've never disassembled the ROM to figure out whether that is counted against a 6522 timer like the Commodores or something else. So that could go either way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*) with the caveat that on the 464 and 4128, the tape drives are built in. So if you're modifying the machine, you could try just also overclocking the speed of the tape drive and hope for the best in terms of analogue filtering. Definitely worth a go in the scenario where you've managed to overclock the CPU somehow. And the same comment goes for the Amstrad Spectrums.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-01-11T20:15:20.513" LastActivityDate="2018-01-11T20:15:20.513" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5399" PostTypeId="2" ParentId="5397" CreationDate="2018-01-10T03:07:02.847" Score="6" Body="&lt;p&gt;I think your bigger problem is going to be dynamic RAM refresh.  Particularly in Z-80 systems where the CPU controls DRAM timing, overclocking already tight memory timing specs are undoubtedly going to cause glitches.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-01-10T03:07:02.847" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5400" PostTypeId="2" ParentId="5318" CreationDate="2018-01-10T03:25:13.910" Score="1" Body="&lt;p&gt;Some types of capacitors go bad over time.  Re-caping power supplies and other parts of old electronic kit is common preventative maintenance.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Electrolytic caps have various failure modes which will prevent normal function.  Worse, they can bulge and leak.  Leaking electrolyte can corrode PCBs.&lt;/li&gt;&#xA;&lt;li&gt;Tantalum caps can fail spectacularly.  Old tantalums should be replaced as well.&lt;/li&gt;&#xA;&lt;li&gt;As I understand it (I'm no expert), ceramics don't go bad nearly as often as other types.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There's a ton of more informed info than I can give searching the various classic computing and vintage radio forums about how and when to replace caps in vintage gear.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-01-10T03:25:13.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5401" PostTypeId="1" AcceptedAnswerId="5404" CreationDate="2018-01-10T04:52:10.083" Score="39" ViewCount="6704" Body="&lt;p&gt;The Z80 was one of the most popular CPUs of the seventies and eighties. In almost all cases that I know of, the version used was the Z80A, rated for 4 MHz, sometimes clocked a little slower in order to match display hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80B, rated for 6 MHz, was available quite early; &lt;a href=&quot;https://archive.org/details/eu_BYTE-1981-12_OCR/page/n542&quot; rel=&quot;noreferrer&quot;&gt;Byte, December 1981 page 541&lt;/a&gt;, lists the Z80A for $7.25 and the Z80B for $19. Intuitively it seems like the extra twelve dollars should be well worth paying for a fifty percent performance improvement, but I don't remember any computers using it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did any computers use the Z80B? If not, why not?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="7208" LastEditDate="2019-12-11T03:30:44.627" LastActivityDate="2020-08-19T07:03:03.547" Title="Did any computers use the Z80B?" Tags="&lt;history&gt;&lt;z80&gt;" AnswerCount="6" CommentCount="8" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="5402" PostTypeId="2" ParentId="5401" CreationDate="2018-01-10T05:34:19.773" Score="50" Body="&lt;p&gt;A number of computers shipped with the Z80B, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Brascom BR1000M&lt;/li&gt;&#xA;&lt;li&gt;IPTVT TIM-S (Romanian ZX Spectrum clone)&lt;/li&gt;&#xA;&lt;li&gt;M.G.T. Sam Coupé&lt;/li&gt;&#xA;&lt;li&gt;Osborne Executive&lt;/li&gt;&#xA;&lt;li&gt;Panasonic FS A1 WX (MSX)&lt;/li&gt;&#xA;&lt;li&gt;Sharp MZ-2500 (SuperMZ) series&lt;/li&gt;&#xA;&lt;li&gt;Vector Graphics Vector-3 (VIP)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Upgrades to the Z80B were available for some computers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Acorn &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/Acorn/Manuals/Acorn_Z802ndprocSM.pdf&quot; rel=&quot;noreferrer&quot;&gt;Z80 Second Processor&lt;/a&gt; for the BBC Micro&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-01-10T16:17:14.483" LastActivityDate="2018-01-10T16:17:14.483" CommentCount="13" CommunityOwnedDate="2018-01-10T05:34:19.773" ContentLicense="CC BY-SA 3.0" />
  <row Id="5403" PostTypeId="2" ParentId="5397" CreationDate="2018-01-10T17:10:00.980" Score="8" Body="&lt;p&gt;And the main problem here is that in most cases, you'll have to overclock the &lt;em&gt;entire&lt;/em&gt; computer, not just the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, in ZX Spectrum CPU clock is generated by ULA, so you'll have to overclock it in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In C64, CPU works in tight sync with VIC, so again overclocking CPU means overclocking VIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then, once you overclock video chip, you'll get complete garbage instead of video signal out of it:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Frame rate will increase&lt;/li&gt;&#xA;&lt;li&gt;Line frequency will increase&lt;/li&gt;&#xA;&lt;li&gt;Color subcarrier frequencies will increase&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So even overclocking it to 10% would lead to colors failing and probably to sync fail in TV.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2018-07-15T21:41:48.147" LastActivityDate="2018-07-15T21:41:48.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5404" PostTypeId="2" ParentId="5401" CreationDate="2018-01-10T17:25:59.030" Score="38" Body="&lt;p&gt;One reason you didn't see many Z80B machines is that not much was available in the way of affordable support chips for it.  For example, look at the advert you cite: it has prices for PIO, CTC, DMA, and SIO chips to work with either Z80 or Z80A, but for the Z80B there are no DMA or SIO chips listed, and the PIO and CTC chips are &lt;em&gt;much&lt;/em&gt; more expensive.  You could also use a Z80A with one of Intel's DMA chips, but those only went up to 5MHz, so if you needed DMA, you were only looking at a 25% increase in performance at most, not 50%.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory was a problem, too: for a Z80B at 6MHz to run with no wait states, it would need memory with a cycle time of 1.5x the clock rate, which unless you were using page mode (and consequently more expensive support chips) meant you'd need fast RAM chips too (a 4164-120 should do the job, but they were quite a bit more money than the 4164-150s that most computers were using at the time).  And you'd still need logic to generate the RAS and CAS lines, which needs to be able to run &lt;em&gt;faster&lt;/em&gt; than the CPU clock in order to produce the signals correctly.  For example, the Sinclair Spectrum generates these using its ULA, which runs internally at 4 times the CPU's clock rate.  So to make a Spectrum-like computer run a Z80B at full speed would need its ULA to run at 24MHz, which was pushing the capabilities of programmable logic at the time, so would likely have required a full custom ASIC, pushing it beyond the capabilities of many manufacturers.  It could have been done with TTL logic chips, but would have made the resulting boards quite large, and expensive to produce.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, there were manufacturers who had the capabilities to do this, but in reality they had no real desire to: Commodore could have done it, but were completely invested in the 6502 series of CPUs due to their ownership of MOS Technologies.  Acorn could, but then by the time the need for a faster mainstream microcomputer became apparent, Acorn were already thinking along the lines that would lead to the ARM processor.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-01-10T17:25:59.030" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5405" PostTypeId="2" ParentId="540" CreationDate="2018-01-10T17:39:10.497" Score="6" Body="&lt;p&gt;The CPU in the IIgs can address up to 16 megabytes of memory. Due to lack of address lines on the CPU chip, the upper 8 bits is sent out on the data bus before each memory access and is latched by external circuitry in the CYA/FPI chip.  These 8 bits are referred to as 'Bank address'.  Ahead of a memory access, the CYA chip will manipulate the timing, address, and other signals on the main board to make it all work seamlessly; Fast, Slow, 8bit, 16 bit, DMA, slots, firmware, whatever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the IIgs firmware, the top 8M is 'reserved' for Rom, the bottom 8M for RAM. Deviating from this means you have to change firmware.  (Rumor: If I recall correctly from a Kfest emulator discussion, there is a 1 byte patch for the memory manager to bring it up to 12M.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IIgs also uses some areas of the higher memory address area with dedicated RAM for 8 bit Apple II compatibility and video buffers that are timing dependant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IIgs memory expansion slot controlled by the CYA chip provides timing signals for refresh for up to 4 megabytes of additional memory.  Bank addressing at the memory expansion slot is adjusted by the CYA/FPI chip so will differ from the CPU's bank addressing, offset b the number of banks built into the main board, 4 for Rom1, 16 for Rom3.  So the memory accessed at the memory slot is at a different bank address range on a Rom1 vs a Rom3 and the CPU.  If you go beyond 4 megabytes in the expansion slot you need extra circuitry to support refresh and DMA support is not going to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As stated earlier, above 8 megabytes total Ram would require patching firmware routines or using your own memory management.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short: get up to 4M cheaply for best results, minimum 1M expansion to run it in IIgs mode vs Apple II mode.&lt;/p&gt;&#xA;" OwnerUserId="7613" LastEditorUserId="621" LastEditDate="2018-01-10T19:59:00.533" LastActivityDate="2018-01-10T19:59:00.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5406" PostTypeId="2" ParentId="5397" CreationDate="2018-01-10T18:01:49.840" Score="9" Body="&lt;p&gt;Since you mentioned the Apple II, it is worth pointing out that accelerators were available for that platform &quot;back in the day&quot;. I can speak to how the CPU replacement ones worked (e.g. Zip/RocketChip) since some others simply took over the bus and some did RAM mirroring with faster SRAM which is a bit more complicated than a simple overclock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As with most of the other platforms at the time, much of the machine was driven by a single clock. If you increased this clock, you'd effectively speed up everything. However, you'd also speed up non-software things such as its concept of the NTSC video signal timing which wouldn't be desirable. I've read that a system clock replacement with the Commodore VIC chips would cause similar issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The approach the Zip / Rocket chips took on the Apple II was that the CPU had its own clock for instruction speed and thus was able to drive the bus faster because it was working and signaling faster. Video display wasn't corrupted because it was still using the original clock from the main board. While this works well for most of the system, there were a few parts which couldn't get sped up and thus the CPU had to be conscious of this and throttle itself down to 1MHz as appropriate. In particular, the 5.25&quot; floppy disk controller was entirely software timing based and would fail under anything but stock speeds. So while the platform could be running at (say) 4MHz, it would slow down for floppy access and then speed back up when finished. Given that floppy access was always a blocking operation on the Apple II, you wouldn't notice the machine slowing down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RocketChip came with a few utilities that allowed you to tweak what parts of the system would be subject to throttling. This included the speaker, standard ROM WAIT routine, and then some aspects of each expansion slot (floppy disk was done by throttling any access to slot 6 - the standard 5.25&quot; controller slot). With some experimentation, you could find out what combination worked best and what expansion devices didn't mind being sped up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what does this mean in general? If you were able to increase the speed of the clock signal to the CPU itself, you could probably achieve a somewhat compatible overclock. However, there most likely are aspects of the target platform that wouldn't like the CPU being fast and thus a simple clock replacement may not cut it.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2018-01-10T18:01:49.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5407" PostTypeId="2" ParentId="5393" CreationDate="2018-01-10T21:27:55.803" Score="6" Body="&lt;p&gt;Some notes on RAM repair, which may or may not be useful:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RAM in the upper memory of the issue 3/4 spectrum is usually a TMS4532-20NLx chip. These are 32Kb chips that are pin compatible with the 64Kb 4164 type, so as pointed out by lvd in the comments to Tommy's answer a 4164 can be directly substituted.  If you &lt;em&gt;do&lt;/em&gt; happen to find a source of 4532s, you need to ensure that the 'x' matches the ones you already have: in order to work correctly the -20NL4 chips need their A7 line pulled high during column select, while the -20NL3 type need it pulled low (this is because a 4532 is actually a 4164 that failed testing due to a fault that only occurred in one half of the columns of its memory array, so the other half is being ignored).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On issue 3 boards, the RAM is socketed, so can be easily replaced.  Unfortunately, no such luck with issue 4 boards: they're soldered directly.  If you're confident with a soldering iron they can be removed and replaced still (they're DIP16 chips, which aren't &lt;em&gt;too&lt;/em&gt; hard to remove), but if you're not experienced it is possible to damage the board in ways that are hard to fix, so alternative approaches are recommended.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Alternative approach 1: cut the pins of the chip close to where it enters the chip body and remove it; solder replacement chip to the remaining pins.  Obviously this will not solve the problem if it is caused by a failed solder joint rather than a failed chip, so checking that the chip is entirely dead is advisable (I'll put a suggestion of how to do this below).  The cost of this repair would likely be approximately £2-3 in the UK (for a single DRAM chip + postage; the repair would be somewhat cheaper in the US, as there are several US suppliers with 4164s for as little as $1-$1.50; buying them from China may also be worth considering, assuming you actually get what you pay for).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Alternative approach 2: just solder a new chip directly to the old one, pin to pin.  This will only work if the old chip is &lt;em&gt;completely&lt;/em&gt; dead, but is possibly the easiest approach if it is.  Cost same as approach 1.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Alternative approach 3: internal memory replacement module.  these are available online for £12 and seem to be quite easy to install.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Alternative approach 4: cut out all of the chips, and use an external RAM upgrade module instead.  All of the lines that are needed to implement the 32KB upper memory are exposed in the rear edge connector of the Spectrum circuit board, so you can simply buy or build an expansion module that attaches to the back of the machine and replaces the internal memory. Unfortunately, I can't find any sources of such modules at the moment (although they &lt;em&gt;did&lt;/em&gt; exist historically).  With a little understanding of how memory works it wouldn't be hard to put one together yourself, however:  start with an appropriate 8-bit or 16-bit wide RAM chip (anything with better than about 400ns cycle time will do; if using a 16-bit chip we'll be ignoring half of its memory, but that's not a huge problem).  To save costs, I would suggest recycling one from old hardware -- circuit boards from dead 90s hard disks are a good source of useful ram chips, and I bet most of us have quite a few of those hanging around, or a 30-pin SIMM could be used too, if you're feeling adventurous :) -- but they can also be purchased relatively cheaply in any case. Then add: addressing logic.  If you're using DRAM (or a SIMM) then you'll need to decode column/row select and an appropriate refresh pattern yourself. Once that's sorted just arrange your chip so that it is enabled whenever A15 is high and MREQ is low.  SRAM is much easier: you only need to perform that A15/MREQ decoding.  You may have unused address lines; you could tie then all to zero, but what would be the fun in that?  A latch attached to an I/O port address can be used to select a 32KB page out of however much memory you have (up to 8MB total).  I believe port 127 has been historically used by some clones that do this, e.g. the Didaktik Gama.  Cost: £2.50 gets an SRAM chip with 32KB x 8-bits; edge connectors are available at £3.50; support logic will be dirt cheap, so you could probably put together a working module for less than £10.  If you really wanted to go overboard, a 2MBx8-bit SRAM chip is available for £13, but it's surface mount so you'd need a proper PCB for it... but that means you could probably put together a 2MB expansion module for about £25 if you really wanted one. :)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;How to test memory chips while they're still in the system: there are a variety of ebay vendors that are selling a dirt-cheap 8-channel 16MHz logic analyzer.  (It's sold as a clone of the Saleae Logic, but isn't actually compatible). It can be used with the &quot;sigrok&quot; software to view the signals produced on the different pins of the chip.  First check the chip has power and ground (probably using a multimeter).  Then hook it up to CAS, RAS, some random address lines, and the Din and Dout pins, and check that all of them have stuff happening.  If nothing is reaching Din, CAS, or RAS, or any of the address pins, the chip's connection to the board is broken somehow.  If data is being sent to all of these pins but nothing is coming out of Dout, the chip is faulty.  If data is coming out of Dout, then again the chip's connection to the board is the problem.  Chip pinouts are available at &lt;a href=&quot;https://faqwiki.zxnet.co.uk/wiki/DRAMS&quot; rel=&quot;noreferrer&quot;&gt;https://faqwiki.zxnet.co.uk/wiki/DRAMS&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-01-10T21:27:55.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5409" PostTypeId="2" ParentId="5401" CreationDate="2018-01-11T09:35:07.210" Score="7" Body="&lt;p&gt;I had a homebuilt S100 Z80A system overclocked to 6MHz. It worked very well although I did find it necessary to heat sink the processor. So using  a Z80B was not really necessary, and I was able to use standard Z80 family parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is worth considering that $12 around 1980 was worth rather more than $12 today, so that cost comparison is not so simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was also a Z80H which was rated at 8MHz, although I believe that came later.&lt;/p&gt;&#xA;" OwnerUserId="7620" LastActivityDate="2018-01-11T09:35:07.210" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5410" PostTypeId="1" AcceptedAnswerId="5412" CreationDate="2018-01-11T18:05:23.143" Score="8" ViewCount="580" Body="&lt;p&gt;The Amiga 1000 had a small, hidden memory expansion port on the front-middle of the machine. From what I've seen, this was always populated with a 256KB RAM expansion card that brought the base machine memory up to 512KB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I've read that this might have been done due to the cost of RAM at the time to help lower the price of the base machine. However, I'm curious if this port is capable of anything more than 256KB and if so was there ever a card produced as such? Going beyond that, was this port usable for anything other than RAM expansion?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2018-01-11T21:37:03.527" Title="Was the Amiga 1000's front expansion port capable of anything other than the 256KB card?" Tags="&lt;amiga-1000&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5411" PostTypeId="1" CreationDate="2018-01-11T19:15:22.067" Score="10" ViewCount="521" Body="&lt;p&gt;I had a GVP 68040 card in my old Amiga 2000 (ah those were the days). 25Mhz 68040, 16MB of RAM, SCSI controller to my 750 MB SCSI drive (if that was even 3200rpm I was probably lucky) and it was SO FAST. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;GVP seemed to do a very good job of making Amiga add on hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do we know when they stopped manufacturing hardware at all?  Are they still around?&lt;/p&gt;&#xA;" OwnerUserId="7623" LastEditorUserId="7623" LastEditDate="2018-01-12T16:08:36.050" LastActivityDate="2018-01-12T16:08:36.050" Title="When did Great Valley Products, stop producing hardware?" Tags="&lt;hardware&gt;&lt;amiga&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5412" PostTypeId="2" ParentId="5410" CreationDate="2018-01-11T19:42:54.763" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm curious if this port is capable of anything more than 256KB&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, as @Tommy already pointed out, it's just a DRAM interface and not usable for anything else.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and if so was there ever a card produced as such?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not that I ever heared of.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Going beyond that, was this port usable for anything other than RAM expansion?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As usual, every interface could be 'reused' by throwing 'enough' hardware at the issue. Not that it would make any sense with the A1000, given that a more traditional and better usable expansion port was also available.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Why only RAM?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Why an adding such an restricted interface not good for anything beside adding a limited mmount of RAM?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's save to assume that it was to drive down cost (of the base unit) in combination with absence of imagination. Especially when considering that the original design for the A1000 called for 256 KiB of (Kickstart) ROM and &lt;strong&gt;only 128 KiB RAM&lt;/strong&gt; in the base unit. The story goes that the design team did fight hard for a larger memory with 512 KiB as target. So 256 KiB in base unit plus a cheap (PCB) connector and a plasic cap instead of full 512 KiB looks quite like the typical compromise with management (*1).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Why so complicated?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Sure, 8 simple sockets on the mainboard have been a way better solution, but then again customers could have just went ahead and bought 8 cheap chips instead of a precious RAMEX board (*2).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Technical Background:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It's basicly a 4164/4464 (*3) type chip interface for 4 blocks of 8 or 2 ICs each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;DRA0..7&lt;/code&gt; provides a multiplexed 16 bit address where&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;/RAS&lt;/code&gt; signals an 8 bit row address and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;/CASxy&lt;/code&gt; signals the lower 8 bit column address where&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due activation of either &lt;code&gt;/CASxy&lt;/code&gt; line or lines, one or more blocks are accessed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All data lines of chips selecetd with &lt;code&gt;/CASLy&lt;/code&gt; are connected to D00..D07, while the ones with &lt;code&gt;/CASUy&lt;/code&gt; are connected to D08..D15.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sounds complicated, but is rather simple:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 16Bit access simultanius use of &lt;BR/&gt;&#xA;&lt;code&gt;/CASL0 + /CASU0&lt;/code&gt; selects the lower (first)  128 KiB &lt;BR/&gt;&#xA;&lt;code&gt;/CASL1 + /CASU1&lt;/code&gt; selects the higher (second) 128 KiB&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 8Bit access use of &lt;BR/&gt;&#xA;&lt;code&gt;/CASL0&lt;/code&gt; selects the lower byte of the lower (first)  128 KiB &lt;BR/&gt;&#xA;&lt;code&gt;/CASU0&lt;/code&gt; selects the upper byte of the lower (first)  128 KiB &lt;BR/&gt;&#xA;&lt;code&gt;/CASL1&lt;/code&gt; selects the lower byte of the higher (second)  128 KiB &lt;BR/&gt;&#xA;&lt;code&gt;/CASU1&lt;/code&gt; selects the upper byte of the higher (second)  128 KiB&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I bet the expectation of selling a cheap to produce 256 KiB with good profit expansions did add apeal to Commodore management :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - see *1&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Yes, it's not only technical feasible to use 4164s, but even has been done. I own an early prototype card using 4164s.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-01-11T21:37:03.527" LastActivityDate="2018-01-11T21:37:03.527" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5413" PostTypeId="2" ParentId="5411" CreationDate="2018-01-11T19:59:20.007" Score="8" Body="&lt;p&gt;Well this is embarrassing. I should have just looked at Wikipedia first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Great_Valley_Products&quot; rel=&quot;noreferrer&quot;&gt;According to the Pede&lt;/a&gt;,  they liquidated July, 1995, and a company &lt;a href=&quot;http://www.gvp-m.com/&quot; rel=&quot;noreferrer&quot;&gt;GVP-M&lt;/a&gt; took over the assets. Alas, the site shows a number of products, but reports as last being updated in 2003, and Buy Online links redirect to some Japanese sites. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a pretty cool Amiga Hardware Database, that has a &lt;a href=&quot;http://amiga.resource.cx/search.pl?company=gvp&quot; rel=&quot;noreferrer&quot;&gt;list and images of GVP Products&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specific product I remember so fondly is the &lt;a href=&quot;http://amiga.resource.cx/exp/gforce2040&quot; rel=&quot;noreferrer&quot;&gt;GVP G-Force 040 for the Amiga 2000&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4Mm2c.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4Mm2c.jpg&quot; alt=&quot;A2000 GVP G-Force 040&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4 DIMM slots, had 16 MB. (Considering the 1MB my A2000 had previously, this was world changing). &#xA;SCSI port, so hard drives became an option.&#xA;Motorola 68040 at 25 Mhz (vs the 68000 at 8 Mhz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Configured this way it was a multitasking beast. I sold it, alas, I wish I could power it up now, and see how it 'feels' compared to my work laptop, a 4 core Intel i7 at 2.4Ghz, and 16GB of RAM with an SSD drive. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1024 times the RAM&lt;/li&gt;&#xA;&lt;li&gt;96 times the CPU (But X3 for the three extra cores, ignoring execution units, and ops per cycle)&lt;/li&gt;&#xA;&lt;li&gt;Disk speed I cannot compare.  3600 rpm SCSI-1 vs SATA-II SSD. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And yet... &lt;/p&gt;&#xA;" OwnerUserId="7623" LastEditorUserId="7623" LastEditDate="2018-01-12T14:08:37.220" LastActivityDate="2018-01-12T14:08:37.220" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5414" PostTypeId="5" CreationDate="2018-01-11T21:35:15.060" Score="0" Body="&lt;p&gt;Certain computer systems have been more open, and allowed other parties to make hardware, often called clones. The PC environment is the clearest example. For a short period in the 1990's the Macintosh environment allowed clones to be built, and then that permission was rolled back. &lt;/p&gt;&#xA;" OwnerUserId="7623" LastEditorUserId="7623" LastEditDate="2018-01-12T08:43:39.100" LastActivityDate="2018-01-12T08:43:39.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5415" PostTypeId="4" CreationDate="2018-01-11T21:35:15.060" Score="0" Body="A clone is a device based on one companies design, by a second party. " OwnerUserId="7623" LastEditorUserId="7623" LastEditDate="2018-01-12T08:43:44.313" LastActivityDate="2018-01-12T08:43:44.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5416" PostTypeId="1" AcceptedAnswerId="5417" CreationDate="2018-01-12T00:38:48.477" Score="9" ViewCount="2838" Body="&lt;p&gt;I'm familiar with the Hitachi 6309's block transfer instructions (TFM). It can work as a &quot;poor man's&quot; DMA controller or Blitter, and is one of the things that makes the 6309 the best 8-bitter of all time (Just ask any crusty old TRS-80 CoCo user!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen it mentioned somewhere that the venerable Z80 also had instructions that could do memory block transfers and/or peripheral I/O transfers. What were these Z80 (or maybe even 8080) instructions, how do they work, and how do they compare with the 6309 abilities?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe crusty CoCo users should be hammering a Z80 into their machines instead... :)&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-02-10T17:04:51.663" Title="How do Z80 Block Transfer instructions work?" Tags="&lt;z80&gt;&lt;coco&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5417" PostTypeId="2" ParentId="5416" CreationDate="2018-01-12T01:18:42.567" Score="14" Body="&lt;p&gt;Unplug the soldering iron again. It's not really worth it. For one the Z80 operations are less flexible, but more important, they are also slower (clock by clock or cycle by cycle, as you prefer) than their 6309 counterparts.&lt;/p&gt;&#xA;&lt;p&gt;Nonetheless, these Z80 additions over the 8080 core were nice additions to simplify programming in assembly as well as compacting code - the later especially with their non-repeating counterparts.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;The Z80's operations are:&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;LDIR&lt;/code&gt; - LoaD Increment Repeat - Move block with increasing addresses (from start)&lt;BR /&gt;&#xA;&lt;code&gt;LDDR&lt;/code&gt; - LoaD Decrement Repeat - Move block with decreasing addresses (from end)&lt;BR /&gt;&#xA;&lt;code&gt;CPIR&lt;/code&gt; - ComPare Increment Repeat - Compare A using increasing addresses (from start)&lt;BR /&gt;&#xA;&lt;code&gt;CPDR&lt;/code&gt; - ComPare Decrement Repeat - Compare A using decreasing addresses (from end)&lt;BR /&gt;&#xA;&lt;code&gt;INIR&lt;/code&gt; - IN Increment Repeat - Input block with increasing addresses (from start)&lt;BR /&gt;&#xA;&lt;code&gt;INDR&lt;/code&gt; - IN Decrement Repeat - Input block with decreasing addresses (from end)&lt;BR /&gt;&#xA;&lt;code&gt;OTIR&lt;/code&gt; - OuT Increment Repeat - Output block with increasing addresses (from start)&lt;BR /&gt;&#xA;&lt;code&gt;OTDR&lt;/code&gt; - OuT Decrement Repeat - Output block with decreasing addresses (from end)&lt;/p&gt;&#xA;&lt;p&gt;Unlike TFM they all operate with a fixed set of registers holding the needed information:&lt;/p&gt;&#xA;&lt;h3&gt;For memory (LDIR/LDDR/CPIR/CPDR):&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;H/L&lt;/code&gt; - Source address&lt;BR /&gt;&#xA;&lt;code&gt;D/E&lt;/code&gt; - Destination address (only LDxx)&lt;BR /&gt;&#xA;&lt;code&gt;B/C&lt;/code&gt; - Byte counter&lt;BR /&gt;&#xA;&lt;code&gt;A&lt;/code&gt; - Byte to be compared / searched (only CPxx)&lt;/p&gt;&#xA;&lt;h3&gt;For I/O (INIR/INDR/OTIR/OTDR):&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;H/L&lt;/code&gt; - Memory address (source or destination)&lt;BR /&gt;&#xA;&lt;code&gt;B&lt;/code&gt; - Byte counter &lt;BR /&gt;&#xA;&lt;code&gt;C&lt;/code&gt; - Port number&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Stupid Part&lt;/h3&gt;&#xA;&lt;p&gt;They don't really offer increased speed. Just convenience in programming, as their execution timing is literally just the combined time of the individual instructions. In fact, unroling an LDIR into LDI can speed up execution :))&lt;/p&gt;&#xA;&lt;p&gt;The speed implications have been already &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4744/how-fast-is-memcpy-on-the-z80&quot;&gt;discussed in great detail&lt;/a&gt; in a question some time ago.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;An interesting sidenote here&lt;/strong&gt; might be a comparison with the 8086 string operations. While &lt;code&gt;MOVS&lt;/code&gt;/&lt;code&gt;CMPS&lt;/code&gt;/&lt;code&gt;INS&lt;/code&gt;/&lt;code&gt;OUTS&lt;/code&gt; look quite similar at first, the decrement of the byte counter is not included in the non-repeating basic version, making them more suitable as building blocks for string/stream processing loops. Even more so with the support of &lt;code&gt;LODS&lt;/code&gt;/&lt;code&gt;STOS&lt;/code&gt; (and &lt;code&gt;XLAT&lt;/code&gt;) plus &lt;code&gt;LOOP&lt;/code&gt;and &lt;code&gt;JCXZ&lt;/code&gt;. Not to mention that they really just loop around the action with out wasting time for opcode fetch :))&lt;/p&gt;&#xA;&lt;p&gt;To me these string operations have always been the most intrigue part about the 8086 (them and the strict 16-bit-ness). They feel more like building blocks for high level constructs than ordinary instructions. Like a bunch of MSI TTL perfect tuned to build some powerful circuitry.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;So if stream operations are something you desire, maybe an 8088 would make a great 8 bit CPU to be added?&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-01-12T14:41:19.773" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5418" PostTypeId="2" ParentId="5416" CreationDate="2018-01-12T01:29:03.873" Score="6" Body="&lt;p&gt;Yes, the Z-80 has block move instructions for memory, I/O and searching.  These were additions made by Zilog and were more definitely not available on the Intel 8080.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nominally the Z-80 accesses devices though a different I/O address space using special &lt;code&gt;IN&lt;/code&gt; and &lt;code&gt;OUT&lt;/code&gt; instructions.  There's nothing stopping the Z-80 from using memory mapped devices but the block move instructions continue this separation of memory and I/O.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two block memory move instructions are &lt;code&gt;LDIR&lt;/code&gt; and &lt;code&gt;LDDR&lt;/code&gt; short for &quot;LoaD, Increment and Repeat&quot; and &quot;LoaD, Decrement and Repeat&quot; respectively.  Like &lt;code&gt;TFM&lt;/code&gt; a fixed register (&lt;code&gt;BC&lt;/code&gt;) is used to track the count of bytes moved.  Unlike &lt;code&gt;TFM&lt;/code&gt; the source and destinations addresses always use &lt;code&gt;HL&lt;/code&gt; and &lt;code&gt;DE&lt;/code&gt; respectively and the instructions are safely interruptable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those familiar with &lt;code&gt;TFM&lt;/code&gt; can read them instructions as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LD    BC,256            LDW  #256&#xA;LDIR                    TFM  HL+,DE+&#xA;LDDR                    TFM  HL-,DE-&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A zero count in &lt;code&gt;BC&lt;/code&gt; will transfer 65536 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For I/O ports there is &lt;code&gt;OTIR&lt;/code&gt;/&lt;code&gt;OTDR&lt;/code&gt; for outputting data and &lt;code&gt;INIR&lt;/code&gt;/&lt;code&gt;INDR&lt;/code&gt; for inputting data.  For those instructions &lt;code&gt;C&lt;/code&gt; register is used as the I/O port address and &lt;code&gt;B&lt;/code&gt; register tracks the byte count.  So unlike &lt;code&gt;TFM&lt;/code&gt; these instructions can only output 1 to 256 bytes at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Their relationship to &lt;code&gt;TFM&lt;/code&gt; is not exact because of the separate I/O address space but it is roughly as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;OTIR                    TFM  HL+,C&#xA;OTDR                    TFM  HL-,C&#xA;INIR                    TFM  C,HL+&#xA;INDR                    TFM  C,HL-&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I won't go into the &lt;code&gt;CPIR&lt;/code&gt; and &lt;code&gt;CPDR&lt;/code&gt; instructions here as they are only similar to &lt;code&gt;TFM&lt;/code&gt; in that they repeat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a few details I glossed over that I'll cover now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technically the I/O instructions work on port &lt;code&gt;BC&lt;/code&gt;, not just &lt;code&gt;C&lt;/code&gt;.  This is a bit odd as the changing byte count in &lt;code&gt;B&lt;/code&gt; means the port number is changing as data is output.  Some Z-80 systems simply ignore the upper 8 bits of the port address and act as if there are only 256 ports.  In other words, the effective operation of the instructions depends on system architecture and not just the Z-80 itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the Z-80 block move instructions come in non-repeating form.  They do exactly the same operation and the repeating forms including decrementing &lt;code&gt;BC&lt;/code&gt; (or &lt;code&gt;B&lt;/code&gt;) register but do not repeat themselves until &lt;code&gt;BC&lt;/code&gt; (or &lt;code&gt;B&lt;/code&gt;) is zero.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Repeating           Single&#xA;LDIR                LDI&#xA;LDDR                LDD&#xA;INIR                INI&#xA;INDR                IND&#xA;OTIR                OUTI&#xA;OTDR                OUTD&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;They do set flags to indicate if &lt;code&gt;BC&lt;/code&gt; or &lt;code&gt;B&lt;/code&gt; has reached zero so are useful when you wish to do the block copy operation but with some extra checks along the way.  As they are all 5 T-States faster than the repeat forms they can also be used to unroll the operation for faster execution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally it should be noted that these instructions are optimized for program compactness and programmer convenience.  At 21 T-States per byte copied they're not particularly fast.&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2018-01-12T01:41:00.613" LastActivityDate="2018-01-12T01:41:00.613" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5419" PostTypeId="1" AcceptedAnswerId="5421" CreationDate="2018-01-12T04:56:23.947" Score="8" ViewCount="625" Body="&lt;p&gt;Contemporary with the old 8-bit chips, existed powerful but unsung programmable DMA controllers like the Zilog 8410 and the Intel 8257, that could copy data from one memory location to another, much faster than the CPU could.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Presumably the benefit of using them increases with the size of the block of data to be copied. If you just need to copy one byte, presumably it's faster to just do it directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the breakeven point? How many bytes do you need to be copying before it's faster to use the programmable DMA chip? To be specific, suppose we are talking about a common 8-bit computer system with a 4 MHz Z80, and the Z8410 DMA controller.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-01-14T09:56:36.813" Title="Breakeven number of bytes for programmable DMA" Tags="&lt;z80&gt;&lt;performance&gt;&lt;z8410&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5420" PostTypeId="2" ParentId="5416" CreationDate="2018-01-12T05:51:42.817" Score="5" Body="&lt;p&gt;Despite being believed as too slow, &lt;code&gt;LDI&lt;/code&gt;- and &lt;code&gt;LDIR&lt;/code&gt;-like commands in Z80 actually do their best in moving bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;LDI&lt;/code&gt; takes 16 cycles in total, specifically 4+4 cycles to read the opcode, then 3+3 cycles to read and write memory and finally 2 cycles to house-keep, which includes incrementing HL and DE and decrementing BC, as well as setting several flags according to the resulting BC. This is actually not bad when we take into account that &lt;code&gt;INC BC/DE/HL&lt;/code&gt; solely take 6 cycles, that is 4 cycles for opcode read and then 2 extra cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;LDIR&lt;/code&gt; is similar to &lt;code&gt;LDI&lt;/code&gt; with the addition of looping. The loop was made in the simplest way by conditionally retarding PC back 2 bytes and executing &lt;code&gt;LDIR&lt;/code&gt; again, which takes additional 5 cycles. If we look at the simplest &lt;code&gt;JR&lt;/code&gt; command we can notice that it takes same 5 cycles to add signed byte to PC: 4 cycles for opcode fetch, 3 cycles for operand fetch and the rest is exactly the same 5 cycles. &lt;code&gt;(IX+offset)&lt;/code&gt; addressing again takes takes the same 5 cycles for the same task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Comparing Z80 with 6809 we should take into account difference in first production date which leads to technology difference (feature size) and thus to difference in the number of transistors that were available to the designers, as well as the fact that Z80 traditionally has higher clock rates than 6502-likes and 6809-likes, thus making the direct comparison like 'this CPU is better because it makes more work per clock' irrelevant.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-01-12T05:51:42.817" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5421" PostTypeId="2" ParentId="5419" CreationDate="2018-01-12T09:40:28.983" Score="8" Body="&lt;p&gt;each &lt;strong&gt;DMA&lt;/strong&gt; transfer must be programed so you need to set some &lt;strong&gt;I/O&lt;/strong&gt; registers of the &lt;strong&gt;DMA&lt;/strong&gt; chip like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BYTE DMA mode&#xA;WORD source address&#xA;WORD destination address&#xA;WORD block size&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;These are usually send by 8bit &lt;strong&gt;I/O&lt;/strong&gt;  requiring at least 1 instruction per 8 bit value but usually more depending on the &lt;strong&gt;DMA&lt;/strong&gt; chip interconnection to computer and interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if the duration of this programming code and transfer is longer than &lt;strong&gt;CPU&lt;/strong&gt; transfer you got your threshold. On &lt;strong&gt;Z80&lt;/strong&gt; you  can use &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5417/6868&quot;&gt;&lt;code&gt;LDIR&lt;/code&gt;&lt;/a&gt; where you also need set up source/destination and code block. So the programming part is not that much different. But if the &lt;strong&gt;DMA&lt;/strong&gt; chip is after some interfaces like &lt;code&gt;i8255&lt;/code&gt; than it requires much more code to program ... And your question starts to be a valid one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To ease this up &lt;strong&gt;DMA&lt;/strong&gt; chips usually provide command que which means you can program more &lt;strong&gt;DMA&lt;/strong&gt; transfers ahead ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are still missing one very important point which makes &lt;strong&gt;DMA&lt;/strong&gt; invaluable for some applications and that is that during the &lt;strong&gt;DMA&lt;/strong&gt; transfer on some platforms the &lt;strong&gt;CPU&lt;/strong&gt; runs too and can do stuff that would not be possible otherwise (but you need to take contention into account if present).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for example of &lt;strong&gt;DMA&lt;/strong&gt; chips usage on 8bit computers see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4859/6868&quot;&gt;Z8410 DMA chip as GPU?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Anyway to answer your question you would need to specify the architecture more closely. Let us consider &lt;strong&gt;3.547MHz Z80 CPU&lt;/strong&gt; (&lt;strong&gt;ZX128+&lt;/strong&gt; with &lt;a href=&quot;https://velesoft.speccy.cz/data-gear.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;DATAGEAR&lt;/strong&gt;&lt;/a&gt; which is &lt;strong&gt;Z8410&lt;/strong&gt; based):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;opc      T0 T1 MC1   MC2   MC3   MC4   MC5   MC6   MC7   mnemonic&#xA;&#xA;EDB0     21 16 M1R 4 M1R 4 MRD 3 MWR 5 NON 5 ... 0 ... 0 LDIR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;so the theoretical transfer rate on &lt;strong&gt;CPU&lt;/strong&gt; (without contention) is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;3 547 000 / 21 = 168904 Byte/s = 164.9 KByte/s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It is a shame &lt;strong&gt;Zilog&lt;/strong&gt; encoded the instruction under &lt;code&gt;0xED&lt;/code&gt; prefix without it would be &lt;code&gt;4T&lt;/code&gt; faster leading to &lt;code&gt;208647 Byte/s&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;3.547MHz Z8410 DMA&lt;/strong&gt; chip has measured transfer rate &lt;code&gt;~865.6 kB/s&lt;/code&gt; which is &lt;code&gt;~5.25&lt;/code&gt; times faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So just compare programing code on &lt;strong&gt;CPU&lt;/strong&gt; and &lt;strong&gt;DMA&lt;/strong&gt; and the duration difference must be shorter than Time boost gained by the &lt;strong&gt;DMA&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is &lt;strong&gt;Z80&lt;/strong&gt; code for &lt;strong&gt;DMA&lt;/strong&gt; doing the same as &lt;code&gt;LDIR&lt;/code&gt; taken from &lt;a href=&quot;https://velesoft.speccy.cz/data-gear/data-gear-info.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;YourSpectrum #04 January 1998&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    org 45000&#xA;    ld hl,50000 ; source address&#xA;    ld (source),hl&#xA;    ld hl,6911 ; block size&#xA;    ld (len),hl&#xA;    ld hl,16384 ; destination address&#xA;    ld (dest),hl&#xA;    ld hl,dma&#xA;    ld b,length ; size of DMA command stream&#xA;    ld c,11&#xA;    otir&#xA;    ret&#xA;dma:  defb #C3,#C7,#CB,#7D&#xA;source:defw 0    ;source address&#xA;len:  defw 0    ;length of data to be transferred&#xA;      defb #14,#10,#C0,#AD&#xA;dest:  defw 0    ; destination address&#xA;      defb #92,#CF,#B3,#87&#xA;length equ $-dma&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see you can hardcode the stuff into 18 byte &lt;code&gt;defb&lt;/code&gt; array:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dma:ld hl,cmd ; 10T address of stored  command stream&#xA;    ld b,len  ;  7T size of stored command stream&#xA;    ld c,11   ;  7T DATAGEAR port&#xA;    otir      ;373T = 17*21 + 16&#xA;    ret       ; 10T&#xA;cmd:defb #C3,#C7,#CB,#7D&#xA;    defw source_address,block_size&#xA;    defb #14,#10,#C0,#AD&#xA;    defw destination_address&#xA;    defb #92,#CF,#B3,#87&#xA;len equ $-dma&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here the same on &lt;strong&gt;Z80&lt;/strong&gt; only:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cpu:ld hl,50000 ; 10T source address&#xA;    ld bc,6911  ; 10T block size&#xA;    ld de,16384 ; 10T destination address&#xA;    ldir&#xA;    ret         ; 10T&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now just compare the timings of the code without transfer:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DMA: +407T &#xA;CPU: - 40T&#xA;----------&#xA;diff: 367T&#xA;&#xA;dt = 367T / 3547000Hz = 0.00010346771919932337186354665914858 s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now we need to compute the transfer size which will have ~same &lt;code&gt;dt&lt;/code&gt; time boost&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x / cpu_rate = x / dma_rate + dt&#xA;x * dma_rate = x * cpu_rate + dt * cpu_rate * dma_rate&#xA;x * dma_rate - x * cpu_rate = dt * cpu_rate * dma_rate&#xA;x * (dma_rate - cpu_rate) = dt * cpu_rate * dma_rate&#xA;x  = dt * cpu_rate * dma_rate / (dma_rate - cpu_rate)&#xA;x = 0.00010346771919932337186354665914858 * 168904 * 886350 / (886350 - 168904)&#xA;x = 15489951.555342542994079503806033 / 717446&#xA;x = ~21.59 Byte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So the theoretical transfer block size threshold is 22 Byte&lt;/strong&gt;. Btw the &lt;code&gt;ld b,N&lt;/code&gt; and &lt;code&gt;ld c,N&lt;/code&gt; can be optimized into &lt;code&gt;ld bc,NN&lt;/code&gt; which is &lt;code&gt;4T&lt;/code&gt; shorter and it would a bit change the numbers ... also &lt;code&gt;ldir&lt;/code&gt; can be unrolled into &lt;code&gt;n&lt;/code&gt; times &lt;code&gt;ldi&lt;/code&gt; which leads to &lt;code&gt;cpu_rate = 221687.5 Byte/s&lt;/code&gt; but that is impractical for larger blocks (unless looped).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;[Edit1] more optimized code&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;DMA:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dma:ld hl,cmd ; 10T address of stored  command stream&#xA;    ld c,11   ;  7T DATAGEAR port&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    outi      ; 16T&#xA;    ret       ; 10T&#xA;cmd:defb #C3,#C7,#CB,#7D&#xA;    defw source_address,block_size&#xA;    defb #14,#10,#C0,#AD&#xA;    defw destination_address&#xA;    defb #92,#CF,#B3,#87&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;CPU:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cpu:ld hl,50000 ; 10T source address&#xA;    ld de,16384 ; 10T destination address&#xA;&#xA;    ldi         ; 16T&#xA;    ldi         ; 16T&#xA;    ldi         ; 16T&#xA;    ...&#xA;    ldi         ; 16T&#xA;    ldi         ; 16T&#xA;    ldi         ; 16T&#xA;&#xA;    ret         ; 10T&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;times equation:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DMA: +315T &#xA;CPU: - 30T&#xA;----------&#xA;diff: 285T&#xA;&#xA;dt = 285T / 3547000Hz = 0.000080349591203834226106568931491401 s&#xA;&#xA;x = dt * cpu_rate * dma_rate / (dma_rate - cpu_rate)&#xA;x = 0.000080349591203834226106568931491401 * 221687.5 * 886350 / (886350 - 221687.5)&#xA;x = 23.75357&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So the theoretical threshold for optimized transfers is &lt;code&gt;24&lt;/code&gt; Bytes.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-01-14T09:56:36.813" LastActivityDate="2018-01-14T09:56:36.813" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="5422" PostTypeId="1" AcceptedAnswerId="5424" CreationDate="2018-01-12T13:21:34.007" Score="7" ViewCount="1746" Body="&lt;p&gt;I am currently designing a watered-down version of the 6502 in Logisim. I am working off of &lt;a href=&quot;https://i.imgur.com/BkZ9o.png&quot; rel=&quot;noreferrer&quot;&gt;Hanson's Block Diagram&lt;/a&gt; to build my subset. I have fully built the processor using the diagram and other resources as a reference in logisim, with the one exception being that I have combined the Random Control Logic And decode ROM into a single &quot;Instruction ROM&quot;, seen below. Note that INF is the rest of the processor as a sub-circuit and the RAM is not fully wired yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ewqXw.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ewqXw.png&quot; alt=&quot;System block diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am at the the point of programming the &lt;a href=&quot;https://imgur.com/a/9eRzp&quot; rel=&quot;noreferrer&quot;&gt;control lines&lt;/a&gt;, and I am wondering if there is a place where I can find each opcode and the control lines sent out for each cycle of the clock. Is there a website or book that shows how each opcode is processed internally using either Hanson's terms or otherwise? &lt;/p&gt;&#xA;" OwnerUserId="7632" LastEditorUserId="276" LastEditDate="2018-01-12T13:25:49.620" LastActivityDate="2018-11-19T02:05:10.157" Title="Is there a place where I can find 6502 instruction lines by opcode?" Tags="&lt;6502&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5423" PostTypeId="2" ParentId="5422" CreationDate="2018-01-12T14:53:04.620" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there a website or book that shows how each opcode is processed internally using either Hanson's terms or otherwise?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. At least none I've come across while researching the 6502. For most parts, the Decode ROM already provides the needed insight. After all, most instructions follow the same flow, usually defiened by the way memory access is done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess, when thinking about, everyone realizes that it's that simple. No explicit intermediate step is needed. Not to mention, these combinations &lt;em&gt;are&lt;/em&gt; the reason this part has not been made up as regular ROM. It's way more efficient that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By drawing up some simple sheets for each basic instruction flow, you'll easy see what groups of signals are needed to be activated. The Decode ROM, as well as an Opcode Matrix, will be useful. That's at least the way I went.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, &lt;a href=&quot;http://visual6502.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visual 6502&lt;/a&gt; is a great help. Here especially the handy &lt;a href=&quot;http://visual6502.org/JSSim/expert.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;simulator&lt;/a&gt;. Here it's rather easy to follow each signal and see the workings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that Hanson's diagram does leave out some important signals and loopbacks, as it's meant to underline specific points in his articles, not documenting the whole design. It's neither complete nor conflict free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://visual6502.org/wiki/index.php?title=Atari%27s_6507_Schematics&quot; rel=&quot;nofollow noreferrer&quot;&gt;6507 sheets&lt;/a&gt;, and Beregnyei Balaz's rather complete transistor level drawings, are more revealing but of course a lot harder to read than a high level block diagram.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: It might be interesting to see how you managed the integration of the so called 'Decode ROM' and 'Random Logic' into a single classic(?) ROM&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-11-19T02:05:10.157" LastActivityDate="2018-11-19T02:05:10.157" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5424" PostTypeId="2" ParentId="5422" CreationDate="2018-01-12T18:09:56.850" Score="10" Body="&lt;p&gt;Visual6502.org has all you need: A &lt;a href=&quot;http://visual6502.org/wiki/index.php?title=6507_Decode_ROM&quot; rel=&quot;noreferrer&quot;&gt;table&lt;/a&gt; of the decode ROM, explanation of the control lines in the &lt;a href=&quot;http://visual6502.org/wiki/index.php?title=6502_datapath&quot; rel=&quot;noreferrer&quot;&gt;wiki&lt;/a&gt; and additional comments to control line names in the &lt;a href=&quot;https://github.com/trebonian/visual6502/blob/master/nodenames.js&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(It's difficult to answer this question except by linking, I don't think a cut-and-paste copy of the ROM table makes sense here).&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-01-12T18:09:56.850" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5425" PostTypeId="1" AcceptedAnswerId="5426" CreationDate="2018-01-12T18:42:16.980" Score="15" ViewCount="3632" Body="&lt;p&gt;How many lines of code were in the first Unix version (with the Thompson shell)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that the modern Linux kernel has about 15 million lines of code, I do wonder of the amount with the first Unix product released at the time.&lt;/p&gt;&#xA;" OwnerUserId="7634" LastEditorUserId="7634" LastEditDate="2018-01-13T06:27:18.330" LastActivityDate="2018-01-13T12:33:32.347" Title="How many lines of code were in the first Unix version (with the Thompson shell)?" Tags="&lt;unix&gt;&lt;shell&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5426" PostTypeId="2" ParentId="5425" CreationDate="2018-01-12T19:00:59.943" Score="25" Body="&lt;p&gt;According to the &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/tree/Research-V1-Snapshot-Development&quot; rel=&quot;noreferrer&quot;&gt;Unix history repository&lt;/a&gt;, V1 had 4,501 lines of assembly code for its kernel, initialisation and shell. Of those, 3,976 account for the kernel, and 374 for the shell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For comparison, current &lt;code&gt;dash&lt;/code&gt; has 14,455 lines of C, and the current Linux kernel has 372,988 lines of C for its core functions only (&lt;code&gt;kernel&lt;/code&gt;, &lt;code&gt;lib&lt;/code&gt; and &lt;code&gt;mm&lt;/code&gt; in the kernel source code). But their capabilities are vastly greater than those of V1.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-01-13T12:33:32.347" LastActivityDate="2018-01-13T12:33:32.347" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5427" PostTypeId="2" ParentId="1001" CreationDate="2018-01-13T14:22:47.857" Score="12" Body="&lt;p&gt;Nothing actually prevents anybody of creating 2GHz 68060-like CPU. Or even highly-speculative out-of-order 68k-compatible one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All you need is tens (if not hundreds or more) of millions dollars to be able to spin a production process at (for example) TSMC and a talented team that would be able to create RTL for such a processor, do a proper verification for it and do a proper physical design procedure to get production files for chips manufacturer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or more specifically, nothing prevents that except for economical reasons.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-01-13T14:22:47.857" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5428" PostTypeId="1" AcceptedAnswerId="5431" CreationDate="2018-01-13T14:37:27.520" Score="4" ViewCount="1045" Body="&lt;p&gt;Looking on eBay for floppy drives, I came across these incredibly cheap Chinese 3.5&quot; USB drives (there are lots of them on offer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.ebay.com/itm/USB-1-1-2-0-Portable-External-3-5-1-44MB-Floppy-Diskette-Drive-FDD-for-PC-Laptop/332496421454?hash=item4d6a54c24e:g:xRQAAOSwUM5aFPKV&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ebay.com/itm/USB-1-1-2-0-Portable-External-3-5-1-44MB-Floppy-Diskette-Drive-FDD-for-PC-Laptop/332496421454?hash=item4d6a54c24e:g:xRQAAOSwUM5aFPKV&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The USB interface is obviously useless for a retro computer. I doubt it, but: Does anyone know if there is anything usable in these (ideally, a decent 3.5&quot; drive with a 34-pin connector)? Or can these be made into something usable?&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-01-13T15:39:10.813" LastActivityDate="2018-01-27T20:32:49.627" Title="Is there anything useful for a retro in these cheap Chinese floppy drives?" Tags="&lt;floppy-disk&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5429" PostTypeId="2" ParentId="5428" CreationDate="2018-01-13T15:03:41.933" Score="2" Body="&lt;p&gt;Usually there should be a rather standard drive within, but you never know until you open one - and whatever you learn will only be valid for that batch. THe next one, similar looking may have different internals.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-01-13T15:03:41.933" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5431" PostTypeId="2" ParentId="5428" CreationDate="2018-01-13T19:24:45.470" Score="6" Body="&lt;p&gt;No, they don't expose an interface useful for retro applications. Many of them will likely use an integrated USB controller + RAM like in this &lt;a href=&quot;https://www.heyrick.co.uk/blog/index.php?diary=20170116&quot; rel=&quot;noreferrer&quot;&gt;USB floppy teardown&lt;/a&gt; so they appear as mass storage.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-01-13T19:24:45.470" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5432" PostTypeId="1" AcceptedAnswerId="5434" CreationDate="2018-01-13T21:10:10.020" Score="8" ViewCount="510" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/5393/278&quot;&gt;A ZX Spectrum is likely to lose the same bit of every memory address&lt;/a&gt; if a single DRAM chip fails completely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if a DRAM chip &lt;em&gt;partially&lt;/em&gt; fails, this could cause... interesting issues, especially when coupled with such an unusual architecture as in the ZX Spectrum (which I suspect might be more common than I know).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In what ways would DRAM fail? (e.g. bad reads, bad writes, translated reads / writes, address line failure)&lt;/li&gt;&#xA;&lt;li&gt;What software-visible patterns would appear in the memory behaviour? (e.g. garbage data, missing data, moving data, duplicated data)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I will accept both errors caused by natural component deterioration and by sufficiently advanced incompetence.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2018-01-14T10:19:56.527" Title="In what ways is DRAM likely to fail?" Tags="&lt;hardware&gt;&lt;memory&gt;&lt;component-failure&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5433" PostTypeId="2" ParentId="1001" CreationDate="2018-01-14T01:57:11.543" Score="2" Body="&lt;p&gt;The x86 is an ancient architecture, some IBM mainframes as even older (System Z).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Their evolution is interesting to understand what is needed to make faster compatible CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make a CPU faster than in the 80s, you can use modern manufacturing processes and gigahertz clocks, add large caches and all the refinements of current high performance CPUs : out of order, speculative, superscalar, branch prediction,...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this is not enough. Because a 5GHz MC68000 is useless. Mostly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The purpose of faster CPUs is to run more complex software, and this  software will need larger registers (24 -&gt; 32 -&gt; 64 bits addressing), an FPU then some SIMD/Multimedia instructions for efficient processing of things that could not be conceivable in simple integer CPUs, then more elaborate MMU mechanisms (virtualisation, security features), multiprocessing, multithreading, assistance for encryption, support of dynamic compilation...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ARM is nearly as old as the x86, but they broke the instruction set at least three times (ARMv2, 24bits, then ARMv7, then the 64bits ARMv8). Intel managed to keep things quite compatible, but there are clearly deprecated parts in the architecture (x87 instructions, segment registers) which adds dead weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motorola was more aggressive in deprecating things and breaking compatibility : The MC68040 don't support in hardware all the MC68882 FPU instructions, its MMU is simpler than the MC68851, etc. The ColdFire family discarded many silly MC68020 addressing modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think (but don't have any definitive proof) that the x86 family was more amendable to high performance implementations than the MC68K, because there are arguably more critical defects such as complex addressing modes (bad for pipelining, OoO and MMU faults management), most instruction update flags (bad for superscalar)... Of couse, a reboot, like what AMD did with the 64bits x86 mode (which, besides 64bitness, doubled the number of useable registers) could have fixed most MC68K original shortcomings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary : Yes, a CPU running with a speed equivalent to a 20GHz 6502 is certainly possible, but it is useless as the main CPU of a personal computer. Sooner or later, the instruction set architecture would have to evolve (to a 65816, then the never released 65832...). Over 30 years, the descendant will keep little resemblance from its ancestor.&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2018-01-14T01:57:11.543" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5434" PostTypeId="2" ParentId="5432" CreationDate="2018-01-14T10:19:56.527" Score="5" Body="&lt;p&gt;The ZX Spectrum memory isn't a particularly &quot;unusual architecture&quot; as these things go, and you will see much the same faults as on other platforms:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A solder bridge or chip fault which ties an address line to 0, 1, or to another address line or other signal. This will manifest itself as aliased memory locations. A simple memory test of the kind often used to determine the size of memory will not detect this.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The same kind of fault which affects a data line. The Spectrum has one data line per chip which makes it marginally harder to debug, and is normally just assumed to be a bad chip rather than a build fault. This will look like a stuck bit across the whole chip and is &lt;em&gt;really&lt;/em&gt; obvious to any tester that's not total gash. A machine won't boot in this state unless the RAM is some additional bank (on the Spectrum, anything beyond 16kiB) which is not used by the boot process.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The same fault again affecting the address decoder (e.g. a &lt;a href=&quot;https://www.fairchildsemi.com/datasheets/MM/MM74HC138.pdf&quot; rel=&quot;noreferrer&quot;&gt;74138 3-to-8 decoder&lt;/a&gt;). In this case, multiple chips might be enabled for writes, or not enabled when they are supposed to, so accesses will go to the wrong memory location, or multiple locations, or none. If it's &quot;only&quot; a partial or design fault, this can be infuriating to detect because the circumstances causing the bad decode might be very rare. The infamous &quot;dead cockroach&quot; fix in early ZX Spectrums is a fix for this class of problem. A simple memory tester that writes then immediately reads may not detect this either, as the value never actually enters memory but hangs around in the stray capacitance on the bus.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A bad memory cell within the chip. A cell &lt;a href=&quot;https://en.wikipedia.org/wiki/File:DRAM_Cell_Structure_%28Model_of_Single_Circuit_Cell%29.PNG&quot; rel=&quot;noreferrer&quot;&gt;is a transistor and a capacitor&lt;/a&gt; which are both ultimately analogue devices. When the device is working and being used correctly, they will ensure that the capacitor stably holds the value that was previously written. On total failure, the bit will stick to one value; on partial failure the cell will be weak and intermittently flip. Worse, the partial failure tends to be temperature-related, so the machine might need to warm up before it works properly, or it stops working after it's warmed up. A badly-designed or faulty refresh circuit may also run DRAM out-of-spec and cause this sort of problem.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As you might guess, testing memory is a harder problem than it initially appears. It is only possible to prove that memory is bad, and impossible to prove that it is good. Fortunately, if you perform a thorough-enough test for bad memory and find nothing, it is safe enough to assume it works.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2018-01-14T10:19:56.527" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5435" PostTypeId="1" AcceptedAnswerId="5437" CreationDate="2018-01-14T10:44:51.727" Score="11" ViewCount="2312" Body="&lt;p&gt;I think that I have once seen an Internet article, which stated, that special drives &lt;strong&gt;are capable of making many megabytes of data out of one ordinary MF-2HD floppy disk.&lt;/strong&gt; &lt;s&gt;But I am unable to find it again.&lt;/s&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;s&gt;Did such a drive actually exist?&lt;/s&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any more accurate documentation about this technology? &lt;strong&gt;Is there any way to store 32MB on a MF-2HD in 2018?&lt;/strong&gt; And what aboue DD and ED disks?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I found more information here:**&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.theregister.co.uk/2000/10/23/32mb_on_a_humble_floppy/&quot; rel=&quot;noreferrer&quot;&gt;http://www.theregister.co.uk/2000/10/23/32mb_on_a_humble_floppy/&lt;/a&gt; &lt;strong&gt;32MB&lt;/strong&gt; on a humble floppy&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Floppy_disk&quot; rel=&quot;noreferrer&quot;&gt;http://en.wikipedia.org/wiki/Floppy_disk&lt;/a&gt; (that's where I probably read it one day: &lt;em&gt;“For example, the &lt;a href=&quot;http://en.wikipedia.org/w/index.php?title=LS-240&amp;amp;redirect=yes&quot; rel=&quot;noreferrer&quot;&gt;LS-240&lt;/a&gt; drive supports a 32 MB capacity on standard 3½-inch HD disks,[54] but it is, however, a write-once technique, and requires its own drive.”&lt;/em&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Floppy_disk#Sizes&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article&lt;/a&gt; mentions &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zone_Bit_Recording&quot; rel=&quot;noreferrer&quot;&gt;Zone Bit Recording.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Because the sectors have constant angular size, the 512 bytes in each&#xA;  sector are compressed more near the disk's center. A more&#xA;  space-efficient technique would be to increase the number of sectors&#xA;  per track toward the outer edge of the disk, from 18 to 30 for&#xA;  instance, thereby keeping nearly constant the amount of physical disk&#xA;  space used for storing each sector; an example is zone bit recording.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Is that high density writing technology with 32MB still CAV or CLV like optical discs (CD, DVD, HD-DVD, BD, etc.)? Does it utilize ZBR?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Answer on other question by &lt;strong&gt;@ChenMunka:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://retrocomputing.stackexchange.com/a/5449/7641&quot;&gt;http://retrocomputing.stackexchange.com/a/5449/7641&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You would not expect a quick format to repair corruption from magnetic fields as it doesn't recreate the track and sector sync markers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This means, that the track sector information can be written on a format. &lt;strong&gt;Does that not mean, that an ordinary drive could possibly squish like 10MB on a floppy disk by formatting it with different track/sector information?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;to format or write to this high-coercivity media, the high-density drive switched its heads into a mode using a stronger magnetic field. When these stronger fields were written onto a double-density disk (having lower coercivity media), the strongly magnetized oxide particles would begin to affect the magnetic charge of adjacent particles. &lt;strong&gt;The net effect is that the disk would begin to erase itself.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;How long does it take for the floppy disk to erase itself when treated like an ED? &lt;strong&gt;Can I store 2.88MB on MF-2HD for 10 minutes?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7641" LastEditorUserId="621" LastEditDate="2018-01-15T16:52:07.680" LastActivityDate="2018-10-16T05:22:12.903" Title="Was there a special drive, that saved much more than 1.44MB on an HD floppy disk?" Tags="&lt;floppy-disk&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5436" PostTypeId="2" ParentId="5435" CreationDate="2018-01-14T11:46:21.880" Score="4" Body="&lt;p&gt;The Wikipedia table of &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_floppy_disk_formats#Other_manufacturers&quot; rel=&quot;nofollow noreferrer&quot;&gt;floppy disk formats&lt;/a&gt; has five entries at the bottom with capacities of hundreds of MB, namely the &lt;a href=&quot;https://en.wikipedia.org/wiki/SuperDisk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Superdisk&lt;/a&gt; (LS-120 and LS-204), the &lt;a href=&quot;https://en.wikipedia.org/wiki/UHD144&quot; rel=&quot;nofollow noreferrer&quot;&gt;UHD144&lt;/a&gt;, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/HiFD&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sony HiFD&lt;/a&gt; (HiFD 150 and HiFD 200). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These all seem to be &lt;a href=&quot;https://en.wikipedia.org/wiki/Floptical&quot; rel=&quot;nofollow noreferrer&quot;&gt;flopitcal&lt;/a&gt; technology, where a laser or similar is used to position a &quot;normal&quot; read-write-head.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They all seem to have been able to read ordinary 1.44MB floppy disks or similar standard formats, but I couldn't find any information if the higher densities required different floppy disks (because the magnetic material might have needed different characteristics), or would also work with HD-type floppy disks.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-01-14T11:46:21.880" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5437" PostTypeId="2" ParentId="5435" CreationDate="2018-01-14T12:22:40.867" Score="21" Body="&lt;p&gt;Note that beyond SD, DD, and HD formats for 3.5&quot; disks there was ED (extra density) with double the capacity of a HD disk (2.88 MBytes formatted, 3.5MBytes raw capacity and double the data transfer rate of a HD disk). Disks and drives looked the same but were much less common than HD technology. You had to use specific ED-Disks to use the higher capacity in those drives, the drives could, however, read and write HD and older disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As that was pretty late in the development of floppy disk technology, only a few vendors picked that up (IBM PS/2 and the NeXT computers are some of the more prominent examples, I happen to have a twin ED disk set for a Sinclair QL that gives me ~5MB of storage, the size of a small hard drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, drives (and, especially, disks) supporting the ED format are relatively hard to come by and expensive because of their rarity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ED was the last open industry standard supporting the highest capacity for 3.5&quot; floppy technology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond the official standards (and some years later) was the Superdisk mentioned by dirkt already with much higher capacity that could also read and write 1.44M disks, but these were combi drives - You &lt;em&gt;could&lt;/em&gt; use &quot;normal&quot; 1.44M floppies in these drives, but only with their limited capacity. To my knowledge, Superdisk drives could not work with ED media. In order to use the up-to-120M capacity the drives had, you had to use specific Superdisk media that could use their magneto-optical technology and looked a bit different from standard 3.5&quot; floppies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later Superdisks could, apparently, with some special software supplied by the vendor, write up to 32M to a standard 1.44M floppy. The drive, however, lost its random access capabilities with that usage and basically degenerated to some sort of tape drive. It also didn't show up as a block device to the computer and could only be used in that way through the vendor application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess Superdisks (both media and drives) are even harder to come by today than ED. Superdisks were replaced relatively fast by the upcoming CD R/W pure optical drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were other proprietary Superdisk-like technologies from Iomega and Sony that more-or-less worked similarily (optical laser-based positioning and magnetic data storage).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Superdisks and similar devices are, however, in my opinion at least borderline off-topic for this site, as they are 3rd-millennium technology.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="637" LastEditDate="2018-01-15T23:52:23.453" LastActivityDate="2018-01-15T23:52:23.453" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5438" PostTypeId="1" AcceptedAnswerId="5439" CreationDate="2018-01-14T12:48:35.367" Score="3" ViewCount="339" Body="&lt;p&gt;Whilst researching the 65C102's memory layout, it occurred to me that, since the I/O processor's memory is mapped to &lt;code&gt;0xFFFFxxxx&lt;/code&gt;, it might be possible to store code there and execute it by setting the co-processor's instruction pointer to a value in that range.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Does this work?&lt;/li&gt;&#xA;&lt;li&gt;On which co-processors does this work?&lt;/li&gt;&#xA;&lt;li&gt;What are the side-effects?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="278" LastActivityDate="2018-01-15T20:04:08.150" Title="Can the BBC Master co-processor execute a program in the I/O processor's memory?" Tags="&lt;bbc-micro&gt;&lt;memory-layout&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5439" PostTypeId="2" ParentId="5438" CreationDate="2018-01-14T17:04:17.167" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Whilst researching the 65C102's memory layout, it occurred to me that, since the I/O processor's memory is mapped to 0xFFFFxxxx,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, that's only a convention set by the filing system. In reality they are two seperate memory spaces, each with 64 KiB (*1). Communication between the Memory blocks is only available under programm controll by both CPUs via a FIFO (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $FFFF 'prefix' tells the filing system (running on the main CPU, now called I/O Procesor) to place any data into it's own memory (or take from there) as final destination. Also, this convention is true for all Tube-CPUs, not just the 6502 wedge or the 65C102 card.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;it might be possible to store code there&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure, it's still the whole original machine. Just keep in mind that several pages are now used by the software needed to handle the Tube-CPU. For example the second KiB ($0400-$07FF) is now occupied by the DNFS communication software. Furthere there is a redifined character set and other usage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a general assumption all memory between &lt;code&gt;OSHWM&lt;/code&gt; and &lt;code&gt;HIMEM&lt;/code&gt; is available. But keep in mind that this can change during runtime, as the screen can grow downward, depending on the video mode selected, and other memory may be used for like buffers (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://lists.cloud9.co.uk/pipermail/bbc-micro/2009-November/007585.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a nice thread about the memory issue (*4).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and execute it by setting the co-processor's instruction pointer to a value in that range.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now, that's the tricky part. One way is to write your own wraper for DNFS to be in control, or you hook later on. Either way you may want to take a look at its &lt;a href=&quot;http://mdfs.net/Software/Tube/BBC/Host100.lst&quot; rel=&quot;nofollow noreferrer&quot;&gt;commented Listing&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the wraper method does require a lot of thinking plus modifying the ROMS (or adding a new one), using the existing hooks is way less work - though, not free. So if all you want to do is to kick of some serial action (*5) Using the &lt;code&gt;OSWORD $E0&lt;/code&gt;..&lt;code&gt;$FF&lt;/code&gt; calls (*6) is the way to go. When executed from the Tube-CPU side, they transfer execution thru &lt;code&gt;USERV&lt;/code&gt; &lt;strong&gt;on the I/O-Processor side&lt;/strong&gt;. These calls are also able to shovel a parameter block of up to 128 Bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep these functions short, as they are, AFAIK, not secured by locks. Less than desired programming on the Tube-CPU side can screw things up when another call comes while first is still served.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more dereffered, parallel processing you need to dig into the world of interrupts and so on. Have fun.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does this work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In general, yes. But as said, your programm must fit into the management scheme of the DNFS. Otherwise the whole system will come to a grinding halt. Like a Brain (the Tube-CPU) isolated from its body (the I/O Processor).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;On which co-processors does this work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;On all, as it's a change on the I/O-Processor side, not a specific Tube-CPU (*5).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What are the side-effects?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Possible) Reduced I/O performance, especially missing responsivnes (Schwupdizität). As usual it depends on what the task is and how it's implemented - the classic YMMV case :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;If you want to dig deeper, the &lt;a href=&quot;http://mdfs.net/Software/Tube/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Acorn Tube™ Software and Resources&lt;/a&gt; at the &lt;a href=&quot;http://mdfs.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;mdfs.net site&lt;/a&gt; might be a good start - just be aware, that's hard core information, not for the faint at heart :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also search for the Acorn Tube Application Note 004 from 1992, which I used for the description of the OSCALL/USERV calling part. Sorry, got no scan :(&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Or to be more correct, there are 64 KiB basic (I/O-Processor) Memory and up to 4 GiB minus 64 KiB accessable in the tube.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - @Chenmunka &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2907/whats-the-tube-interface-of-the-bbc-micro-all-about/2913#2913&quot;&gt;described the associated OS calls&lt;/a&gt; in an answer to a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2907/whats-the-tube-interface-of-the-bbc-micro-all-about&quot;&gt;related question&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - See the &lt;code&gt;PRINTER&lt;/code&gt; untility programm from the disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Or is it about the fact how people can go on and on with poitless misunderstandings? Can't realy decide :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Well, it's parallel as far as the Tube-CPU is contiuing to run after the call, but it will hamper further action on the I/O Processor until it's done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Fine for the 6502 extensions, other CPUs may already use some. For example the Z80 grabs &lt;code&gt;OSWORD $FF&lt;/code&gt; for extended transfers.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-01-15T20:04:08.150" LastActivityDate="2018-01-15T20:04:08.150" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5440" PostTypeId="1" CreationDate="2018-01-14T17:12:13.443" Score="3" ViewCount="1056" Body="&lt;p&gt;How can&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;VHS cassettes.  &lt;/li&gt;&#xA;&lt;li&gt;MiniDV cassettes.  &lt;/li&gt;&#xA;&lt;li&gt;Compact audio cassettes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;be used as digital data storage?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can the error correction strength be adjusted?&lt;/p&gt;&#xA;" OwnerUserId="7641" LastEditorUserId="621" LastEditDate="2018-01-14T23:36:11.667" LastActivityDate="2018-01-15T17:22:54.127" Title="Using VHS/MiniDV/CompactCassette as digital data storage?" Tags="&lt;cassette-tape&gt;&lt;magnetic-tape&gt;" AnswerCount="3" CommentCount="11" ClosedDate="2018-01-15T16:57:26.750" ContentLicense="CC BY-SA 3.0" />
  <row Id="5441" PostTypeId="2" ParentId="5440" CreationDate="2018-01-14T22:46:57.760" Score="4" Body="&lt;p&gt;You can use these types of tape cassettes for digital storage by acquiring the correct kind of tape drive and/or interface for each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For VHS cassettes the &quot;tape drive&quot; would be a standard VCR connected to a special interface card that converts digital data into analog signals that can be recorded as a video signal.  These special interface cards aren't made any longer that I know of, but you might be able to find one used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For MiniDV cassettes the easiest way is to get a MiniDV camcorder that has a FireWire (IEEE-1394) connection, then connect the camcorder to a PC that way.  The camcorder will then appear to the PC to be a digital tape drive that can be used by software that knows how to work with tapes (and knows how to use IEEE-1394).  I believe that certain versions of Microsoft Backup were able to use a MiniDV camcorder connected this way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compact audio cassettes were most frequently used for digital data with home computers in the 70's and 80's.  Typical setups used regular commercial tape recorders connected to the computer using the earphone and microphone connections, with circuitry in the computer converting the analog audio signals into digital.  Commodore used a special tape recorder that communicated digitally (the digital/analog conversion circuitry being in the tape drive rather than in the computer).  There were also tape drives made that used very similar cassettes with a special notch that identified them as data-grade; audio cassettes could not be used with those drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, the error correction schemes for these methods is fixed and cannot be adjusted.  If you need more error correction you can preformat your digital data with ECC, then write that preformatted data to tape.  There is software out there that will add ECC to arbitrary data, this was typically used when transmitting data over some kind of network but it would work just as well for this.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-01-14T22:46:57.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5442" PostTypeId="2" ParentId="5440" CreationDate="2018-01-15T03:19:27.063" Score="4" Body="&lt;p&gt;The VHS (and Beta) protocols required signals to mimic frames of&#xA;television picture, so are hardware-supported in complex ways.  Digital&#xA;use (possible exception of PCM audio) was rare. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CompactCassette trademark licensing requirements precluded &#xA;audio-player-incompatible use, so modified cassettes were used for digital directly, OR audio-compatible encoding (like the Kansas City standard) was used for indirect digital recording through FM modulation.&#xA;The modified cassettes were not CompactCassette labeled.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2018-01-15T03:19:27.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5443" PostTypeId="1" AcceptedAnswerId="5445" CreationDate="2018-01-15T07:25:46.363" Score="5" ViewCount="8468" Body="&lt;p&gt;My Panasonic CT-20S12S (20 inches, not 12 inches) has some pretty bad geometry in various parts of the screen. The edges of lines bow in or out, distorting shapes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I adjust the geometry on my CRT to fix this bowing?&lt;/p&gt;&#xA;" OwnerDisplayName="user7645" LastActivityDate="2018-01-21T20:10:11.050" Title="CRT Geometry Adjustment" Tags="&lt;crt-monitor&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5444" PostTypeId="2" ParentId="5440" CreationDate="2018-01-15T08:07:48.127" Score="1" Body="&lt;p&gt;There used to be a software on pre Intel Macs to backup on DV, it was called DVBackup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's what data looks like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mw5En.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mw5En.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(from &lt;a href=&quot;http://www.imaging-resource.com/SOFT/DVB/DVB.HTM&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.imaging-resource.com/SOFT/DVB/DVB.HTM&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the DV media allows to store GBs of data, it still inherits the downsides of the approach such as no random access and low throughput.&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2018-01-15T17:22:54.127" LastActivityDate="2018-01-15T17:22:54.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5445" PostTypeId="2" ParentId="5443" CreationDate="2018-01-15T08:46:37.357" Score="7" Body="&lt;p&gt;Fault you describe implies problem with electron ray sweeping...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Triangle wave generator&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;this circuitry is used for &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; sweeping across the screen area. If the shape is not triangular but curved it can create distortions like you describe. There are few common reasons what could cause it:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;electric fault of some kind&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;like bad electrolyte capacitor, faulty transistor or tube... You need to identify and change the faulty part. That is usually done by oscilloscope probing specific test points and according to shape of the signal you can decide what is going on. Some docs for old TVs and Monitors contain this along with the circuitry schematics. Try to look for &lt;strong&gt;service manual&lt;/strong&gt; for your monitor all the info should be there.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;too old adjustment trimmers&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;they tend to oxidize and starts to be not reliable after ~10+ years. If you hit the device a bit and situation changes it is the most likely this (or cold (dead) soldering on the &lt;strong&gt;PCB&lt;/strong&gt;). There are solutions for this. You need to lubricate the part resistive area with something oil-like and not isolative too much. In my region is the best to use this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3kSfA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3kSfA.png&quot; alt=&quot;diava&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;its called &lt;a href=&quot;http://www.bugy.sk/static/produkt/4061/DIAVA-Politura-cervena-lestenka-na-nabytok-200ml/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DIAVA Politúra Červená&lt;/a&gt; There are also pure electrical solutions like &lt;strong&gt;CONTOX&lt;/strong&gt; or what ever but I do not have any experience with trimmers using it. Applying a drop of &lt;strong&gt;Diava&lt;/strong&gt; at the trimmer resistive surface and moving the adjustment a bit along the way and then set again to original position will usually help for 1-2 years then you need to apply it again. Before changing the setting make a mark where it originally was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The circuitry might got different parameters over time and need a different settings. So you could locate the linearity trimmers and try to adjust them until your lines are linear again. &lt;strong&gt;Doing this blindly can do more harm than good&lt;/strong&gt;. So the best is use an oscilloscope. If You do not have one then use a test screen like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/N8AOD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/N8AOD.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and pay attention to the vertical grid lines they should be equally spaced along whole screen. If the distribution changes with &lt;code&gt;Y&lt;/code&gt; axis (on top is different than in the middle) then you need to adjust horizontal linearity too.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;CRT magnets&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;on the vacuum screen tube  (in the thin cylinder part on the back) there are sweeping electromagnet coils and adjustment magnets. The magnets are used to compensate for Background Earth Magnetism (use those only as last resort) when nothing else helps. Some tubes also have magnets for focusing &lt;strong&gt;do not touch those !!!&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Do not forget to mark any adjustable parts original position so you can reverse back to original settings !!!&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Safety&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As  &lt;strong&gt;Ralf Kleberhoff&lt;/strong&gt; pointed out There are high and very high voltages inside your &lt;strong&gt;CRT&lt;/strong&gt; monitor so you need to be extra careful. Do not touch any metal stuff or parts directly. &lt;strong&gt;Use only insulated tools&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most dangerous part is the &lt;strong&gt;Voltage multiplier&lt;/strong&gt; (big ugly transformer like but almost without cables part sometimes enclosed by plastics but most likely covered by dark burned dust)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/l8nmC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/l8nmC.png&quot; alt=&quot;DC multiplier&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is usually connected with single thick extremely isolated cable to the &lt;strong&gt;CRT&lt;/strong&gt; (somewhere on the side closer to the front of the &lt;strong&gt;CRT&lt;/strong&gt; with sucking disc like insulation). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jbS4O.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jbS4O.png&quot; alt=&quot;CRT&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DC voltages used are usually between &lt;code&gt;12.7 - 32 KV&lt;/code&gt; which means that it can throw an electric arc through you if you just near (&lt;strong&gt;without touching it&lt;/strong&gt;). Usual air has insulation of &lt;code&gt;3.6 KV/mm&lt;/code&gt; but near this stuff the air can be partially ionized so it can be &lt;strong&gt;dangerous even deadly&lt;/strong&gt; up to distances around &lt;code&gt;1-5 cm&lt;/code&gt; !!! from the live parts. Also be careful it tend to suck in also insulators so if you got any free hanging sleeves, hand watches etc it can be a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also generally is a good idea to remove things like rings , piercings etc that could come into proximity to live parts of device as they tend to decrease the transmitting resistance of owner causing much bigger current in case of incident much more likely doing bigger harm ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If using oscilloscope or any measurement device do not probe the High Voltage pins ... that would fry your device for good... See &lt;a href=&quot;https://reverseengineering.stackexchange.com/a/12824/4709&quot;&gt;Thought I found serial port - broke embedded device instead! Help?&lt;/a&gt; and always check the Voltage range selected (and or cable connector used before measurement). Especially with multimeter devices where you can measure both current and voltage as using current connector/setting for Voltage measurement is performing a short circuit where it should not be ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be careful even if the monitor is off as any &lt;strong&gt;LC&lt;/strong&gt; circuit (coil-capacitor) can be charged/oscillating long after shutdown and &lt;strong&gt;CRT&lt;/strong&gt; monitors have quite a few of those (like the sweeping coils)...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;If you are a rookie and do not know a bit about electricity do not do this !!!&lt;/strong&gt; or at least do not attempt to do this alone so just in the case there is someone to shut down the power and perform &lt;strong&gt;First aid&lt;/strong&gt; / resuscitation &lt;strong&gt;AFTER POWER SHUT DOWN&lt;/strong&gt; with main power kill switch for your home or disconnecting the power plug. Do not put your fate just in to current protector (even if they are a good thing to have)&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="278" LastEditDate="2018-01-21T20:10:11.050" LastActivityDate="2018-01-21T20:10:11.050" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5446" PostTypeId="2" ParentId="159" CreationDate="2018-01-15T10:42:58.453" Score="3" Body="&lt;p&gt;With Atari, some or combination of the following practices were used:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Increasing block size from default 128 bytes to more bytes. Fewer blocks&#xA;resulted in fewer overhead bytes (calibration sequence, record header, checksum) and fewer IRGs (gaps between blocks)&lt;/li&gt;&#xA;&lt;li&gt;Reducing duration of the IRGs (standard duration was 0,25 s) &lt;/li&gt;&#xA;&lt;li&gt;Increased baud rate. The FSK demodulator in the data recorder was optimized for 600 bps, but it was possible to squeeze better baud rate from it (even 900). With that, the condition and build quality became essential. Typically the best performer was the Atari 1010.&lt;/li&gt;&#xA;&lt;li&gt;Decoding data by directly polling the serial input pin bypassing POKEY's shift registers. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All these three practices reduced time available to process data (the IRG is present to allow CPU to process the data just read), so some loaders were forced to completely disable DMA (blank screen) or use a display list with minimum CPU overhead (one or two lines of GR.1 or GR.2 to display program name).&lt;/p&gt;&#xA;" OwnerUserId="7646" LastActivityDate="2018-01-15T10:42:58.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5447" PostTypeId="1" AcceptedAnswerId="5449" CreationDate="2018-01-15T10:54:01.063" Score="28" ViewCount="5168" Body="&lt;p&gt;What I noticed is, that &lt;em&gt;formatting&lt;/em&gt; a floppy disk takes three times as much time for the same data amount as writing a file to the disk normally.&#xA;The accoustically perceivable jumps of the head between the eighty tracks are &lt;strong&gt;significantly slower on a full format&lt;/strong&gt; than on a normal write of an 1.44 MB file which matches the MF-2HD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;If I expose a floppy disk to a magnet, the data gets corrupted, as expected.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I deleted the corrupted file.&lt;/li&gt;&#xA;&lt;li&gt;I tried to write the same file again.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The floppy disks fail being written to. If the write succeeds, &lt;strong&gt;the new data after magnet exposure is also corrupted.&lt;/strong&gt;&#xA;But the floppy disk is &lt;strong&gt;not physically damaged.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;After quick format: Data still corrupted after write.&lt;/li&gt;&#xA;&lt;li&gt;After &lt;strong&gt;full format:&lt;/strong&gt; New data can be written to the floppy disk just as usually.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would appreciate a technical explaination. I am just curious.&lt;/p&gt;&#xA;" OwnerUserId="7641" LastActivityDate="2018-01-16T07:30:31.330" Title="Magnetic exposure to floppy disk damages file system and requires complete reformat?" Tags="&lt;floppy-disk&gt;&lt;file-format&gt;" AnswerCount="3" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5449" PostTypeId="2" ParentId="5447" CreationDate="2018-01-15T11:12:05.893" Score="39" Body="&lt;p&gt;A formatted disk contains markers which identify the start of each track and the start of each sector within the track.  These markers are fixed magnetic sequences that are picked up by the drive electronics so that it knows where the sectors are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a full format, a completely blank disk has these markers written.  This takes time as the drive must apply the markers, and check that they are correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a quick format, the electronics assume that the markers are still there.  The process is simply to mark the sectors as empty.  Usually the sectors are overwritten with zeros, but not necessarily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both cases a blank directory is placed at the head of the disk by the operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you erase your disk, or part of it, using a magnet, the track sector markers are destroyed.  A quick format won't find them and therefore the format and/or any write to the disk will fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is some good information on track formatting of different floppy variants &lt;a href=&quot;http://www.retrotechnology.com/herbs_stuff/drive.html#data&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.  The low-level track &amp;amp; sector markers were often fiddled with by some software as part of a copy protection scheme.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2018-01-15T11:18:31.403" LastActivityDate="2018-01-15T11:18:31.403" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5452" PostTypeId="1" AcceptedAnswerId="5453" CreationDate="2018-01-15T12:20:52.727" Score="5" ViewCount="292" Body="&lt;p&gt;&lt;a href=&quot;http://retrocomputing.stackexchange.com/a/5449?noredirect=1&quot;&gt;http://retrocomputing.stackexchange.com/a/5449?noredirect=1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Floppy Disks have tracks that can be destroyed by a magnet, which would cause it to need &lt;strong&gt;full reformats,&lt;/strong&gt; as stated in the answer link above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible, that the exact same effect happens after frequent rewrites under &lt;strong&gt;normal treatment?&lt;/strong&gt; &#xA;This means: writing and erasing files normally, no reformatting: Does that cause the tracks/sector edges to fade away slowly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe I can remember seeing this effect on DD 720KB Floppy Disks in 2011, but I am not sure.&lt;/p&gt;&#xA;" OwnerUserId="7641" LastActivityDate="2018-01-15T13:15:11.737" Title="Do DD floppy disks need regular full reformats?" Tags="&lt;floppy-disk&gt;&lt;storage&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5453" PostTypeId="2" ParentId="5452" CreationDate="2018-01-15T12:41:43.293" Score="4" Body="&lt;p&gt;Generally speaking no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Floppies would occasionally need a reformat after prolonged heavy use as the magnetic fields may degrade.  However, firstly, this tended to only be with cheaper, lower quality floppies and secondly, you had to have given them some abuse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Low level reformats were not necessary under most circumstances.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2018-01-15T12:41:43.293" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5454" PostTypeId="2" ParentId="5452" CreationDate="2018-01-15T12:53:33.550" Score="3" Body="&lt;p&gt;NO at least not because of the R/W usage. The only case of R/W access corupting the media I know of was back in the days of MG tapes using ELTA recorders which got some circuit bug and was overwriting tape during playback slightly. IIRC There where fixes for that until they fix it by new revision of tape recorder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But make no mistake remagnetization occurs over time mostly due to background magnetism and also due to proximity of the tracks. The bigger the track density the higher this effect is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look here &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4781/6868&quot;&gt;How long will floppy disks maintain data integrity?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usual &lt;strong&gt;3.5&quot; HD&lt;/strong&gt; floppy lasts only up to 1 year at average.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;5.25&quot; DD&lt;/strong&gt; floppies can last even 15 years without reformat.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-01-15T13:15:11.737" LastActivityDate="2018-01-15T13:15:11.737" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5455" PostTypeId="2" ParentId="5447" CreationDate="2018-01-15T12:57:10.653" Score="30" Body="&lt;p&gt;The main thing is that there is no such thing as a &quot;quick format&quot; - That term is entirely misleading terminology invented by Microsoft. Quick Format doesn't &quot;format&quot; anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What MS calls a &quot;Quick format&quot; is rather a &quot;wipe directory&quot; - It marks all sectors as unused and rewrites only the FAT and root directory. That process visits only a very limited number of tracks on the disk - that is why it is so fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A proper format of a disk needs to re-write all sector markers on the disk, so all tracks and sectors have to be touched by the write heads.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-01-15T15:06:34.530" LastActivityDate="2018-01-15T15:06:34.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5456" PostTypeId="1" AcceptedAnswerId="5458" CreationDate="2018-01-15T13:04:50.750" Score="6" ViewCount="910" Body="&lt;p&gt;DD, HD and ED floppy disks have individual materials to match their densities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &lt;strong&gt;is density their only difference?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any differences regarding:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Maximum allowable rotation speed?&lt;/li&gt;&#xA;&lt;li&gt;Rewrite cycles?&lt;/li&gt;&#xA;&lt;li&gt;Sensitivity to external magnetic interference?&lt;/li&gt;&#xA;&lt;li&gt;Life span? Data preservation?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7641" LastActivityDate="2018-01-15T15:53:00.840" Title="DD vs HD vs ED floppy disks: lifespan/writecycle difference? Other differences?" Tags="&lt;floppy-disk&gt;&lt;storage&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5458" PostTypeId="2" ParentId="5456" CreationDate="2018-01-15T15:53:00.840" Score="3" Body="&lt;p&gt;Hope we are talking about Feromagnetic data storage mediums (like tapes or floppies). Not an expert in the field but:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Maximum allowable rotation speed?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general &lt;strong&gt;Yes&lt;/strong&gt; different material means different adhesiveness and structural integrity so you can stress them only up to a point which is different for each material or shape of the medium. This affects the maximal speed and GForce which the medium will survive without degrading. But the speeds used for floppies are too small to even get near these effects. As it is limited by the mechanical properties of the drive and energy consumption and speed of processing. So the answer to this question is &lt;strong&gt;not really&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rewrite cycles?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;No&lt;/strong&gt; as you are not mechanically changing anything. The only problem may be the substrate material. That is usually some plastics which can age if exposed to radiation (in long therm) and different material/density means different radiation levels. But too these effects usually surface long after the lifetime of the medium. So the answer to this question is not really.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sensitivity to external magnetic interference?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most definately &lt;strong&gt;Yes&lt;/strong&gt;. Different material/density means different size of the head and level of the &lt;code&gt;B&lt;/code&gt; field. The higher energy needed to magnetize the lower the sensitivity to external magnetic field. But as experience over last decades show us when you increase the density you increase the auto remagnetization from neighboring tracks/layers. So higher densities lead to better resistance to external fields at cost of lower resistance to data stored nearby on the same medium and usually in favor of the latter (as more dense mediums have smaller life span). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Life span? Data preservation?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Yes&lt;/strong&gt; see &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4781/6868&quot;&gt;How long will floppy disks maintain data integrity?&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of that different material can and usually do age at different rate.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastActivityDate="2018-01-15T15:53:00.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5460" PostTypeId="1" CreationDate="2018-01-15T20:37:34.307" Score="8" ViewCount="525" Body="&lt;p&gt;The postulated address range for CPU ROM (so-called &quot;PRG-ROM&quot;) in cartridges is $8000..$FFFF, that is pre-decoded in NES/Famicom and the chipselect is fed to the cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it is quite common for some games to have extra &quot;PRG-RAM&quot; range of $6000..$7FFF. While the chipselect only decodes $8000..$FFFF range, we certainly know when the CPU accesses $0000..$7FFF range by NOT having chipselect. Since all CPU address pins except A15 are also provided to the cartridge, we are able to know exactly which location the CPU accesses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the lowest available to the cartridge CPU address, i.e. how much down to zero the cartridge space may span, whether it would be PRG-ROM, PRG-RAM or cartridge registers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $6000 border seems to be just a conveniently-decoded one, is it possible to have for example PRG-RAM from $4100 or so (provided that $4000..$4020 range is occupied with sound and OAMDMA on-chip registers)?&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2019-12-23T11:38:07.997" LastActivityDate="2019-12-23T11:38:07.997" Title="NES/Famicom CPU address range allowable for cartridges" Tags="&lt;nintendo&gt;&lt;nes&gt;&lt;famicom&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5461" PostTypeId="2" ParentId="5460" CreationDate="2018-01-15T21:24:04.540" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What is the lowest available to the cartridge CPU address, i.e. how much down to zero the cartridge space may span, whether it would be PRG-ROM, PRG-RAM or cartridge registers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, everything up to 4020 is filled, or better internal chip select decoding will fire for each and every address. For example the 2 KiB internal RAM are visible 4 times on $0000, $0800, $1000 and $1800. Similar the 8 PPU registers are mirrored a 1024 times.&lt;/p&gt;&#xA;&lt;p&gt;The secret here is that RAM and PPU is selected via a 74139 TTL, while the APU is fully decoded within the CPU/APU chip. The 74139 only decodes 3 large areas ($0000-1FFF, $2000-$3FFF and $8000-$FFFF) to select RAM, PPU and cardridge. No provision is needed for the APU as this is already done on chip.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The $6000 border seems to be just a conveniently-decoded one, it is possible to have for example PRG-RAM from $4100 or so (provided that $4000..$4020 range is occupied with sound and OAMDMA on-chip registers)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yeah, that's the fun part, unlike all other internal hardware, the APU is decoded down to A5, thus realy only reacting to $4000..$401F. Therefore everything from $4020 up to $7FFFcan be used with the 'PRG-RAM' trick for a total of 32KiB-32B.&lt;/p&gt;&#xA;&lt;p&gt;Well, with one exception: The Famicom Disk System. Its hardware registers are located after $4020. AFAIR less than $20 Registers are used, but the address decoding is only down to a whole pave, so all all addresses $4020-40FF are taken.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Bonus Question:&lt;/p&gt;&#xA;&lt;p&gt;So why is there no cardridge using the Space between $4020 and $5FFF ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, adding 8 KiB at $6000 is a simple RAM Chip (6264) and one 7400 TTL. Adding another 8 KiB (minus 32 B), would not only require another 6264, as there are no 16 KiB RAMS (or at least wheren't back then) and at least two TTL for decoding. Not to mention the space needed to crap that into a cardridge. Money better spend for more ROM to enhance the game.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-01-15T22:46:10.633" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5462" PostTypeId="1" AcceptedAnswerId="5463" CreationDate="2018-01-15T23:58:31.330" Score="6" ViewCount="1146" Body="&lt;p&gt;I have heard it many times before, but I can't recognize where the TTS file/engine comes from. But what in do know is that it sounds very old, so it seemed appropriate to post this question here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is an example of the TTS I'm talking about:-&#xA;&lt;a href=&quot;http://clyp.it/fjxhz2bw&quot; rel=&quot;nofollow noreferrer&quot;&gt;Old TTS&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I finally found it on &lt;a href=&quot;http://www.text2speech.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;this online TTS tool&lt;/a&gt;, the &quot;US Male&quot; but I still have no clue where it comes from. I was hoping that y'all could recognize it and recommend me the TTS file.&lt;/p&gt;&#xA;" OwnerUserId="7652" LastEditorUserId="4147" LastEditDate="2018-01-16T03:04:26.713" LastActivityDate="2019-02-09T20:13:04.117" Title="Identification of old text-to-speech voice/engine" Tags="&lt;software&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5463" PostTypeId="2" ParentId="5462" CreationDate="2018-01-16T02:06:15.460" Score="7" Body="&lt;p&gt;The site linked is using &lt;a href=&quot;http://www.festvox.org/flite/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FLITE&lt;/a&gt; or Festival Light, an optimized open source reimplementation of the &lt;a href=&quot;http://www.cstr.ed.ac.uk/projects/festival/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Festival speech framework&lt;/a&gt;. Development goals where fast(er) generation, (relative) small footprint and low power consumption so it can be used on upcoming PDAs of the early 2000s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Festival is developed since 1995 at the University of Edinburgh, while FLITE development happens at Carnegie Mellon University since 1999.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being rather recent (post 2000) I wouldn't really consider this software retro. Though, the underlying synthesis model dates back to the 1970s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your memory is really about something classic, maybe you remember some system using an SSI 263 (&lt;a href=&quot;https://en.wikipedia.org/wiki/Votrax&quot; rel=&quot;nofollow noreferrer&quot;&gt;Votrax&lt;/a&gt; SC-02) chip? There have quite a lot boards using that chip all thru the 80s and early 90s. TRS-80, PET and Apple II all the way to PCs got their speech boards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't get fooled by the many less than great examples on Youtube, as they usually only show the basic capabilities, where the majority of TTS is done in with the chiptables, which naturally only give a rather robotic voice. There has been better adjusted software available fine-tuning the output with results much more like what the FLITE examples show.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorDisplayName="user39" LastEditDate="2019-02-09T20:13:04.117" LastActivityDate="2019-02-09T20:13:04.117" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5464" PostTypeId="2" ParentId="5462" CreationDate="2018-01-16T03:32:30.033" Score="3" Body="&lt;p&gt;It sounds like the Amiga Narrator device. I remember it had really weak intonation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other old devices that it probably isn't: MITalk/DECTalk (“Stephen Hawking”), TI TMS5100 (“Speak &amp;amp; Spell”), Apple MacinTalk (Radiohead “Fitter, Happier”), General Instrument SP0256/AL2 (lots of 8-bit speech devices), SAM (Apple II/C64, Software Automatic Mouth: &lt;a href=&quot;https://github.com/s-macke/SAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;s-macke/SAM: Software Automatic Mouth - Tiny Speech Synthesizer&lt;/a&gt;), …&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-01-16T03:32:30.033" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5465" PostTypeId="1" AcceptedAnswerId="5466" CreationDate="2018-01-16T05:45:07.013" Score="13" ViewCount="2530" Body="&lt;p&gt;It is necessary, that the floppy drive, just like CD-ROM, attempts achieving 100% data integrity using the help of error correction. If a sector  is not readable, it just does not get sent to the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software does require full data integrity of course. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, optical drives have an SCSI command for disabling 100% of data integrity, which could be useful for pictures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the sector is not readable 100% with error correction, the drive does return partial data. This is also by default the case on CDDA, where error correction is weaker than on CD-ROM (C3 layer missing). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is there a way to make the floppy  drive return approximate data even from just partially readable  sectors?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7641" LastEditorUserId="3683" LastEditDate="2018-04-15T06:50:44.460" LastActivityDate="2019-04-07T16:09:27.107" Title="How to at least partially read damaged sectors of floppy disk?" Tags="&lt;floppy-disk&gt;" AnswerCount="7" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5466" PostTypeId="2" ParentId="5465" CreationDate="2018-01-16T07:27:31.493" Score="16" Body="&lt;p&gt;(Answer based on WD1770, a prominent standard Floppy Disk controller from ~1980)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Standard Floppy controllers don't have any error &lt;em&gt;correction&lt;/em&gt; at all. So there is nothing to switch off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They support a simple CRC (error &lt;em&gt;detection&lt;/em&gt;), both on the ID fields (the sector header identification) and the data sector itself, to be able to identify they have found the correct sector on the disk and the data sector is intact. In case the first CRC fails, the drive cannot be sure &lt;em&gt;what and where on the disk&lt;/em&gt; it has actually read - It wouldn't make much sense to send the data to the computer in this case - The host computer simply gets a &quot;Sector not found&quot; message. In case the second CRC fails, the data is still sent to the computer, but marked as defect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Within the sector's actual data field, there is neither any data &lt;em&gt;correction&lt;/em&gt; nor &lt;em&gt;error detection&lt;/em&gt; beyond this CRC performed by the drive controller. Any such process is done on the host computer (in fact, in most cases it isn't, for performance reasons, the checks are rather done on file system level), the contents read from the data bytes of a sector are simply forwarded in raw form to the host computer. What the host computer does with defective data, is up to the OS and application. Specific programs can try to rescue as much as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what you assume to be an optional rescue operation actually is standard behavior for a floppy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As long as the controller can be sure it at least hit the proper sector (header CRC OK), it will send whatever it has read from that sector's data bytes to the host. In case the data integrity could not be verified (data CRC failed), this will be signaled to the host as well.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-01-16T10:42:56.127" LastActivityDate="2018-01-16T10:42:56.127" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="5467" PostTypeId="2" ParentId="5447" CreationDate="2018-01-16T07:30:31.330" Score="6" Body="&lt;p&gt;The magnetic field doesn't destroy only the file contents, but the contents of the directory blocks and the block allocation table, as well as the sector markers on the disk itself. A full sector on a disk doesn't just contain the payload, but - depending on the system - a 'sync' marker denoting its start, the sector number itself and a checksum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So deleting and rewriting the file most probably does not work - the only correct way is to backup the undamaged files, do a &lt;strong&gt;full&lt;/strong&gt; format of the disk, and then rewrite the files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;A bit offtopic, but worth mentioning&lt;/em&gt;: Modern hard drives contain essential operational data on reserved sectors, if that becomes unreadable for any reason, the hard drive is essentially bricked - all you'd hear is that 'click of death'.&lt;/p&gt;&#xA;" OwnerUserId="7654" LastActivityDate="2018-01-16T07:30:31.330" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5468" PostTypeId="2" ParentId="5465" CreationDate="2018-01-16T09:37:07.217" Score="4" Body="&lt;p&gt;In most cases yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Utilities were available for most computer systems of the '80s and '90s that would read the disk at a low-level and attempt to deduce the track/sector information.  These reads would bypass the filing system software - going directly to the controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the Intel PC had Norton's &lt;em&gt;Disk Doctor&lt;/em&gt;, amongst others.  The BBC Micro had Computer Concept's &lt;em&gt;Disc Doctor&lt;/em&gt;.  Such utilities would have commands to read at low level as best they could.  The recovered data could then be examined and edited reconstruct the valid information.  This could then be saved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The example &lt;em&gt;Disc Doctor&lt;/em&gt; command to read was &lt;code&gt;*RECOVER&lt;/code&gt;, an extract from the instruction manual is below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VrhXi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VrhXi.png&quot; alt=&quot;Disc Doctor Manual for *RECOVER&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, if the disk were too badly corrupted, you couldn't recover anything.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2018-01-16T09:37:07.217" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5469" PostTypeId="2" ParentId="5460" CreationDate="2018-01-16T10:47:38.270" Score="3" Body="&lt;p&gt;The cartridge can map anything anywhere, however there's restrictions if it overlaps existing hardware in the console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Write-only registers could be mapped in a way that overlaps RAM in $0000-$1fff range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Read-only registers could be mapped overlapping $2000, $2001, $2003, $2005 and $2006 PPU registers (or any of their mirrors), as well as $4000-$4014 pAPU registers, as those are open-bus, meaning the PPU will leave the data bus alone when reading from those addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Write-only registers could be mapped overlapping $2002 PPU register or any of its mirror.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anything $4018-$ffff is free for the cartridge to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, ROM or RAM chips are at least 8kb (8192/$2000 bytes) in size, so mapping anything other than registers below $6000 is complicated/wasteful and not worth it, which is why it's typically never done. But Nintendo MMC5 mapper maps it's internal 1k of Expansion RAM at $5c00-$5fff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer of your question is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For write-only registers, address $0000 is the minimum.&lt;/li&gt;&#xA;&lt;li&gt;For read-only registers, address $2000 is the minimum&lt;/li&gt;&#xA;&lt;li&gt;For r/w registers, ROM and RAM, $4018 is the minimum&lt;/li&gt;&#xA;&lt;li&gt;In practice for ROM and RAM the chip size granularity prevents using address low in range because it means complicated decoding &lt;em&gt;and&lt;/em&gt; loss of some bytes from the chip, so unless it's integreated in an ASIC, $6000 can considered to be the practical minimum&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2123" LastActivityDate="2018-01-16T10:47:38.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5470" PostTypeId="1" AcceptedAnswerId="5472" CreationDate="2018-01-16T13:55:14.493" Score="48" ViewCount="19168" Body="&lt;p&gt;180rpm to 360 rpm, unlike 12000rpm on optical discs, was how fast floppy disks got.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure, whether &lt;strong&gt;all drives had the same speed,&lt;/strong&gt; but 360rpm is not close to the physical stress limitations of floppy disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why were floppy disks not any faster?&lt;/strong&gt;&#xA;Because of a technical limitation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Their speed of 18×512×(rpm/60) bytes per second was easily sufficient for plain/hypertext documents without multimedia attached to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5458/7641&quot;&gt;https://retrocomputing.stackexchange.com/a/5458/7641&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7641" LastEditorUserId="276" LastEditDate="2018-01-16T14:02:15.523" LastActivityDate="2018-01-23T01:26:54.663" Title="Why were floppy drives not any faster?" Tags="&lt;history&gt;&lt;floppy-disk&gt;" AnswerCount="9" CommentCount="13" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5471" PostTypeId="2" ParentId="5470" CreationDate="2018-01-16T14:20:04.897" Score="62" Body="&lt;p&gt;That answer is somewhat trivial:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hard disks and optical drives are &lt;em&gt;contact-less technologies&lt;/em&gt; - Nothing touches (or is even allowed to touch) the media while it spins. On a hard disk or CD-ROM, the heads touching the media would end up with catastrophic effects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Floppies and tape drives are different. The heads are constantly touching the media directly while it moves. You obviously want this to happen at a much lower relative speed to avoid wear on both the heads and media - Even if floppy disks were specifically teflon-coated to remove friction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Really floppy&quot; disks of the 8&quot; and 5-1/4&quot; type also have constant friction between inner sleeve and media while rotating. That has somewhat improved with hard-case technologies of the 3&quot; and 3-1/2&quot; type.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a sense, floppies are like hard disks, but designed to survive a constant head crash.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-01-16T15:39:06.273" LastActivityDate="2018-01-16T15:39:06.273" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5472" PostTypeId="2" ParentId="5470" CreationDate="2018-01-16T16:14:41.093" Score="41" Body="&lt;p&gt;As you mentioned, speed was considered sufficient for the typical applications at the time they were introduced. Also, any significant rotational speed increase would have meant:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;More complex data separator circuitry (due to higher bandwidth needed), probably better shielding on the r/w head wiring and drive-to-controller cabling -&gt; cost, development effort&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Higher risk of drive/media damage if there is some imperfection in the media, or if any foreign matter gets into the drive or between media and sleeve (observable with hard drives. Dust in a hard drive can wreck it.) -&gt; reliability&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;More wear from media-to-sleeve friction - 5 1/4&quot; and 8&quot; discs typically touched the sleeve, which was lined with soft material -&gt; wear, noise&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The disc didn't always get perfectly centered by the loading mechanism, leading to rotational imbalance -&gt; vibration, noise, wear&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Probably also time needed to accelerate the medium to that speed without causing stress -&gt; perceived speed, and/or cost due to much more complex electronics to read before medium is up to speed. If media is clamped with the motor on (as done in many existing floppy systems), mind the stress to the material if that is done at high speed!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Designing media so that it kept structurally sound even if punctured, driven against the read/write head by vibration/shock, suddenly braked in case something jams (observable with CD-ROM - high speed drives can rip damaged media to pieces!)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also mind that very early (8 inch era) drives did not use controllable BLDC motors but synchronous AC motors that might have posed some limitations (and made these limitations into specs).&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-01-16T16:14:41.093" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5474" PostTypeId="2" ParentId="5470" CreationDate="2018-01-16T23:11:15.197" Score="37" Body="&lt;p&gt;I used to work for a company called ‘Rimage’ who manufactured robotic duplicators for floppy disks, the company still exists and today manufactures robotic equipment to publish/duplicate cd, dvd and Blu-ray. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fastest rotational speed for a floppy disk was 1440 rpm and the equipment would also write to both sides of the disk at the same time. This meant you could duplicate a 1.4MB disk in less than 20 seconds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The drives used could be modified versions of consumer drives such as Sony 73W which ran at 600 rpm, but YE Data produced a drive especially for this industry and it ran at 1440 rpm for duplicating.&lt;/p&gt;&#xA;" OwnerUserId="7669" LastActivityDate="2018-01-16T23:11:15.197" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5475" PostTypeId="1" AcceptedAnswerId="5481" CreationDate="2018-01-17T03:29:17.627" Score="-1" ViewCount="954" Body="&lt;p&gt;From &lt;a href=&quot;http://en.wikipedia.org/wiki/Floppy_disk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia - Floppy_disk&lt;/a&gt;: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;to format or write to this high-coercivity media, the high-density drive switched its heads into a mode using a stronger magnetic field. When these stronger fields were written onto a double-density disk (having lower coercivity media), the strongly magnetized oxide particles would begin to affect the magnetic charge of adjacent particles. &lt;strong&gt;&lt;em&gt;The net effect is that the disk would begin to erase itself.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is a similar question to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5435/was-there-a-special-drive-that-saved-much-more-than-1-44mb-on-an-hd-floppy-disk&quot;&gt;Was there a special drive, that saved much more than 1.44MB on an HD floppy disk?&lt;/a&gt;, but more dedicated:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How long can a MF-2HD disk hold 2.88MB of data, before it begins to erase itself?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And can any firmware hack allow enforcing 2.88MB onto 1.44MB?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 32MB squishing technology from SuperDrives is different and requires hardware dedication.&lt;/p&gt;&#xA;" OwnerUserId="7641" LastEditorUserId="278" LastEditDate="2018-06-09T19:59:00.567" LastActivityDate="2018-06-09T19:59:00.567" Title="How long can a HD floppy disk hold 2.88MB before erasing itself?" Tags="&lt;floppy-disk&gt;&lt;storage&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="5476" PostTypeId="2" ParentId="5470" CreationDate="2018-01-17T03:31:49.430" Score="4" Body="&lt;p&gt;Many computers had floppy drives that couldn't process data as fast as it came from a disk, even at 300rpm.  If the time required to process a sector is twice as long as the time required to read it, reading all the sectors on a track would require that the disk rotate about three times.  If the drive were to spin twice as fast, the time required to process each sector would be four times the (now shorter) time to read it, making it necessary for the disk to rotate five times.  Doubling the rotational speed of the drive would thus only reduce the required time by 16% rather than by 50%.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make matters worse, getting good performance out of a floppy generally requires that the disk be in a position to read out a sector just before the computer is ready to receive the data.  If the drive is spinning fast enough that the disk rotates past a sector just before the computer is ready for the data, it will generally be necessary to wait an extra revolution.  While reading 16 sectors on a normal-speed drive with 3:1 interleave would take about three revolutions at 200ms each (600ms total) reading those same 16 sectors on a &quot;double speed&quot; drive would require 19 revolutions, or about 1.9 seconds.  Unless the data was written with a 5:1 interleave (which would add 66% to the time required to read it on a normal-speed drive), the faster drive would read it much more slowly than a slower one.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-01-17T03:31:49.430" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5477" PostTypeId="2" ParentId="5470" CreationDate="2018-01-17T08:42:23.890" Score="1" Body="&lt;p&gt;The main limitation was the speed with which the computer could process the data from the drive. To keep costs low standard floppy drives were fairly simple devices, relying on the computer to do the decoding and detect things like the start of track markers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later faster floppy drives became available. 2x USB floppy drives were not uncommon, and even 4x units existed. However those had their own custom controllers to handle the higher rotation speed and thus data rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, consider the classic &lt;a href=&quot;http://www.threedee.com/jcm/terak/docs/Intel%208272A%20Floppy%20Controller.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel 8272A&lt;/a&gt; and NEC UPD765A floppy controllers, which were very common PCs from the 80s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both parts operate from an 8MHz clock, relatively fast in the 1980s when CPUs were typically running at 1 to 5MHz. As speeds get above about 10MHz special consideration is needed to make the electronics work reliably, which increases cost and complexity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that at 8MHz both those parts are limited to single and double density disks. They can't even handle 1.5MB high density disks at this speed. And this is dedicated controller hardware, earlier systems that used the CPU to control the drive directly in order to reduce costs were limited to single density (350kB) 3.5&quot; disks or 5.25&quot; disks.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2018-01-17T11:27:34.460" LastActivityDate="2018-01-17T11:27:34.460" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5478" PostTypeId="2" ParentId="5470" CreationDate="2018-01-17T09:05:33.540" Score="3" Body="&lt;p&gt;The limitations of floppy drives were not mechanical. While they certainly couldn't have stood up to the 15000 RPM that some hard drives today have, they were certainly more than capable of being read much faster than the old hardware would have you believe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were a number of things that hindered older hardware, including a slower interface to the motherboard (fewer maximum bits per second), poor programming practices (floppy drivers not aligning DMA buffers to 64KB boundaries), and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later disk drives were able to perform much better by having an IDE interface. For example, the LS120 was capable of writing the entire contents of a 1.44MB image to a 3.5&quot; floppy in just a couple of seconds, probably at least 15 times faster than older systems. Anecdotally, this was a problem for me; I'd often format a floppy more than once, since it happened so quickly I wasn't sure it'd happened at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even the older drives using the older interface could achieve much higher speeds if programmed with optimal DMA transfers and a sufficiently beefy processor. Floppies were slow back then, but they didn't have to be. I actually found a MS-DOS driver a few decades ago that aligned the DMA buffers to a 64kb boundary, and I was able to write 1.44MB of data to the disk in about 10 seconds, while the MS-DOS driver took almost 33 seconds to transfer the same amount of data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have an older system, you might try doing some research on DMA programming and floppy drive interfaces to figure out if you can write something that runs much faster on older hardware. You'll just need a basic understanding of DMA, ports, memory, and some machine code. The firmware will stop your drive from destroying it and/or the disk, but if you spend some time researching this, you could actually get some serious speed.&lt;/p&gt;&#xA;" OwnerUserId="2059" LastActivityDate="2018-01-17T09:05:33.540" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5479" PostTypeId="1" AcceptedAnswerId="5480" CreationDate="2018-01-17T12:53:10.207" Score="62" ViewCount="13960" Body="&lt;p&gt;My father is a retired programmer. When I was in high school in the late 1970s, he purchased a TRS-80 model 1 (on which I learned to program in BASIC). At some point in the early 1980s it, together with various accessories, was put in a box and stored in an attic crawlspace for 25+ years. When my parents moved from that house several years ago, my father gave this to me since he knew I was interested in the history of computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to refurbish it if possible. But, is it even safe to power it up without first checking the circuitry? The crawlspace was exposed to temperature extremes ranging from near-freezing in the winter to above 100 degrees Fahrenheit in the summer. It hasn't been powered up for maybe 35 years. I'm afraid that if I plug it in and turn it on, a degraded component could cause a short-circuit which will fry the electronics. Is my fear baseless? If not, how would I go about safely refurbishing it?&lt;/p&gt;&#xA;" OwnerUserId="4728" LastEditorUserId="3422" LastEditDate="2018-10-10T07:58:54.617" LastActivityDate="2018-10-10T12:13:58.737" Title="Is it safe to turn on a 40-year old TRS-80?" Tags="&lt;hardware&gt;&lt;trs-80&gt;" AnswerCount="5" CommentCount="13" FavoriteCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="5480" PostTypeId="2" ParentId="5479" CreationDate="2018-01-17T13:04:41.470" Score="55" Body="&lt;p&gt;It definitely does not hurt to open the case and have a look at the PCB. When opening, be especially careful with the keyboard ribbon cables - They are apparently known to become very brittle with age and tend to easily break.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main victims of age and heat are electrolytic capacitors which are known to leak or bulge and leak over time, losing their capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fortunately, it is quite easy to see whether your computer suffers from this problem. Affected capacitors tend to bulge outwards on their top. Here's an example picture (not from a TRS-80):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/77zjP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/77zjP.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two caps on the right are definitively affected and should be exchanged, the others in the picture are seemingly unaffected. Also watch out for electrolyte leaking from the capacitors - another reason to replace them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some computers (like the Sinclair ZX Spectrum) are known, under certain circumstances, to literally self-destruct when they are affected with that problem. To my knowledge, the TRS-80 does not have that problem. So, in case you don't see any capacitors like in the picture, I would guess it's safe to flip the switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TRS-80 didn't have any on-board batteries, I am pretty safe to assume, so that would not be a possible cause of problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond the above, problems you  might have with old computers having been in storage for a long time are rather caused by mechanical than electronic problems. In case you have disk drives, it doesn't hurt to check whether the disks can turn and the R/W heads are not stuck in year-old hardened lubricant (simply try and move them on their rails, a tiny bit of lithium grease doesn't hurt). Also don't forget to check any drive belts you might have for elasticity and eventual damage.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-10-10T12:13:58.737" LastActivityDate="2018-10-10T12:13:58.737" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="5481" PostTypeId="2" ParentId="5475" CreationDate="2018-01-17T17:10:53.443" Score="8" Body="&lt;p&gt;&lt;b&gt;Experimentally verified data retention duration: 0 seconds.&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because you asked and I was curious too, I have just cut an ED notch in one of my old HD disks (to trick the drive into thinking it were an ED disk) and tried to format it in my ED disk drive set on my Sinclair QL - It wouldn't even format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The drives have no problem whatsoever in handling both ED disks and HD disks (coded and treated as HD). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disk could also be properly formatted as HD once i closed the ED notch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, we shouldn't be generalizing from one single test, but for me it didn't work at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Possible reason could be that HD uses &lt;em&gt;longitudinal recording&lt;/em&gt; (the &quot;magnets&quot; lie flat with N and S in the same layer) and ED &lt;em&gt;perpendicular recording&lt;/em&gt; (the &quot;magnets stand upright&quot;) - This doesn't seem to work at all with HD disk coating. But could be a gazillion of other reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(You owe me a disk) &lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-01-17T17:25:55.507" LastActivityDate="2018-01-17T17:25:55.507" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5482" PostTypeId="2" ParentId="5479" CreationDate="2018-01-17T19:36:49.507" Score="8" Body="&lt;p&gt;I too have an old TRS-80 in the attic, and I wonder the same thing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last time I powered up a much newer computer that had been off for a couple of years, the power supply exploded with a fizz and some smoke. Probably a large electrolytic capacitor had gone bad. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem is, these caps need a voltage to form and maintain the insulation layer on the plates. If that layer has broken down (dried out ?) then it will draw a large leakage current, overheat and explode after a few seconds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;New electrolytic caps need to be &quot;formed&quot; with a limited current, i.e. through a resistor and not directly from the power plant. See e.g. &lt;a href=&quot;http://www.qsl.net/g3oou/reform.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.qsl.net/g3oou/reform.html&lt;/a&gt; . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck. &#xA;mem size? enter  :-) &lt;/p&gt;&#xA;" OwnerUserId="7685" LastActivityDate="2018-01-17T19:36:49.507" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5483" PostTypeId="2" ParentId="5470" CreationDate="2018-01-17T21:05:16.553" Score="0" Body="&lt;p&gt;It is a limitation of the media -- which operates at lower audio frequencies. Magnetic media has a similar limitation across the board in all technology. In other words, it is a purely analog medium.&lt;/p&gt;&#xA;" OwnerUserId="7141" LastActivityDate="2018-01-17T21:05:16.553" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5484" PostTypeId="1" CreationDate="2018-01-17T22:23:15.153" Score="32" ViewCount="11236" Body="&lt;p&gt;I can imagine the following situation 20 to 40 years ago inside a working office between two colleagues:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&quot;Can I have a copy?&quot;&lt;/li&gt;&#xA;&lt;li&gt;&quot;Sure, wait a moment....done! [eject] I'll pass that floppy disk onto your table.&quot;&lt;/li&gt;&#xA;&lt;li&gt;&quot;Got it. I also need that other file.&quot;&lt;/li&gt;&#xA;&lt;li&gt;&quot;Oh, well. It is too large. &gt;7 MB!&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How was this situation dealt with decades ago?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7641" LastEditorUserId="7641" LastEditDate="2018-01-23T20:46:02.427" LastActivityDate="2018-01-23T20:46:02.427" Title="Dealing with oversized files decades ago? Data transfer in the age of floppy disks" Tags="&lt;floppy-disk&gt;&lt;storage&gt;&lt;data-transfer&gt;" AnswerCount="11" CommentCount="17" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5485" PostTypeId="2" ParentId="5484" CreationDate="2018-01-17T22:32:21.500" Score="63" Body="&lt;p&gt;Forty years ago, a 7MB file would be unheard of, at least in contexts where floppies would be the only available means of transferring it. (Tapes were commonly used for large transfers on minis and mainframes.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In slightly more recent times (even thirty-odd years ago, and then as long as floppies were still useful), we used archiving tools with support for splitting archives over multiple floppies (on the PC, ARJ was particularly good at this, PKZIP not so much; &lt;code&gt;tar&lt;/code&gt; and &lt;code&gt;cpio&lt;/code&gt; deal with this too), or one of the numerous splitting utilities. In the latter case restoring the file at the other end was as easy as &lt;code&gt;COPY PART1+PART2+PART3 FILE /B&lt;/code&gt; under DOS...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember in extreme cases splitting a large file, and using a single floppy shuttled back and forth to get all the parts across to another computer!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As others have mentioned, micro computer users could also have transferred files over null-modem serial or parallel cables, using tools such as LapLink or &lt;code&gt;uucp&lt;/code&gt;, and some could have used their network (which was probably more common in schools and universities than in offices until the 90s).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-01-18T07:04:31.400" LastActivityDate="2018-01-18T07:04:31.400" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5486" PostTypeId="2" ParentId="5470" CreationDate="2018-01-17T23:05:15.953" Score="5" Body="&lt;p&gt;There were, in fact, attempts to create faster floppy drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Corporate Systems Center once sold a high-speed floppy drive called the &lt;a href=&quot;https://en.wikipedia.org/wiki/X10_accelerated_floppy_drive&quot; rel=&quot;noreferrer&quot;&gt;X10 Accelerated Floppy Drive&lt;/a&gt;. The drive came with a special controller card with its own processor and memory, and it basically read both sides of the disk concurrently and at four times the normal spindle speed, allowing it to load the whole disk in about five seconds. The memory was used as a write-back cache to speed up writes to the disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some floppy-based Sony Mavica digital cameras used a high-speed floppy drive that were capable of reading and writing to disks at two or four times the normal speed using a higher spindle speed. This was particularly useful because it greatly shortened shot-to-shot times; the camera had to write each image to the disk before it could shoot another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As noted by several other answers, floppy disks weren't really designed to handle these high speeds. I have a Mavica FD-90 with the 4x floppy drive and it was distinctly less reliable than any of the PC floppy drives I've used. I've had disks jam inside the drive, and in one case, a partial disassembly of the camera was required to eject the disk. I would suppose that because of a lack of market interest and cost concerns, nobody made floppy disks specifically for high-speed drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a video of the FD-90 in action &lt;a href=&quot;https://www.youtube.com/watch?v=CVaTwiOeWxQ&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7212" LastActivityDate="2018-01-17T23:05:15.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5487" PostTypeId="2" ParentId="5484" CreationDate="2018-01-17T23:07:17.633" Score="15" Body="&lt;p&gt;Do have a 7 MiB file, you would need a HD at least that size. In reality even a manyfold thereof, as usually one won't have a HD with just one file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, in the &lt;em&gt;real&lt;/em&gt; early times, lets say 70s, home users wouldn't have disks at all - not even floppies, and professional users with minis would use disk packs (exchangeable hard disks) and &lt;em&gt;maybe&lt;/em&gt; fixed disks of the same or similar size. So file exchange wasn't a big deal as the disk pack could be just mounted on another machine. In fact, it would be more of a challenge to find another user to exchange files in the first place:)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, 40 years ago, that would be the end of the 70s (1978). If at all, SOHO users would have a disk drive. And while HDs where already available, one would rather invest in a second or third FD than putting up the same amount of cash as a small car to get a HD. In that time-frame a professional disk drive was good for anywhere between 200 and 600 KiB So a 5 MiB HD was barely more than a dozen floppies. Again, not worth it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The situation stayed the same throughout the majority of the 80s. Hard disks where only available at high end machines out of reach for most users. Also Floppies reached 600 to 800 KiB. Quite a lot. Keep in mind that back then most applications didn't store a lot of meta data, and if at all, they did it in rather efficient way. So instead of adding like up to 300 bytes to a text file for making one word underlined in MS-Word, WordStar just added two bytes (well, 7 in some cases). Thus text files didn't require much more space than the amount of letters typed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An average business letter back then was often less than 2 KiB on disk. So having a hundred letters on one FD wasn't anything unusual. Even a large thesis could fit on a single disk. Serious, I have a hard time to imagine larger databases on micros back them&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just an example, on mainframe system I worked on in the first half of the 1980 got all databases stored on two 144 MiB drives (plus another for the OS). That was the only IT system for a company with about 1500 employees and storing next to everything on these two disks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the micro range the need for archives spread out over multiple floppies didn't emerge before the late 80s/early 90s, when average HD size grew beyond 40 MiB and more important data processed moved away from simple text and numbers to more complex objects that could produce files in the MiB range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And users growing into this range didn't use floppies for data exchange. The mid 80s to late 90s were the heydays of changeable hard disks (Syquest et al) and more important QIC streamer. I still remember, when I ordered a first 486 (with a 170 MiB ESDI) or later a dual Pentium II, I took care to include a QIC streamer for backup and data exchange. Many may also remember the surge for ZIP drives during the late 90s, for exactly the same reason: Data exchange and backup. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is also the idea where SuperDisk / LS 120 originated. A way to exchange larger fines in a floppy like format. They did get some foothold, but where ultimately killed by a throw away solution, the writable CD. Cheap drive and dirt cheap media.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7776" LastEditDate="2018-01-22T11:16:26.430" LastActivityDate="2018-01-22T11:16:26.430" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5488" PostTypeId="2" ParentId="5484" CreationDate="2018-01-18T00:17:07.757" Score="27" Body="&lt;p&gt;As well as splitting across multiple floppy disks, there were several cabled communication options available ranging from your basic serial cables and sending data over via X/Y/ZMODEM or Kermit, but there was also specialized parallel cables (like printer cables) that could be used that facilitated even faster transfers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think &quot;LapLink&quot; was a such a product (I never used it), typically employed to transfer large files and programs to lap tops and other portable computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple also had it's Appletalk network fairly early (mid-80s) to enable file transfers as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously outside of PCs, tapes where often used. In the Alpha Micro world, they had the ability to transfer data using an off the shelf VCR and VHS tapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was certainly some time before ubiquitous networking was in place. I didn't have networking at our offices until the early 90's.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="7493" LastEditDate="2018-01-18T00:23:43.303" LastActivityDate="2018-01-18T00:23:43.303" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5489" PostTypeId="2" ParentId="5484" CreationDate="2018-01-18T02:55:03.397" Score="8" Body="&lt;p&gt;Which OS? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a Unix or variant, we used cpio, which would detect end of media (tape or floppy) and prompt to replace and continue onto (or from) another volume.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The media was just treated as a sequence of blocks of data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If using MSDOS, there was BACKUP and RESTORE commands that spanned floppies but I’m not sure if they were in DOS exactly 40 years ago.&lt;/p&gt;&#xA;" OwnerUserId="4213" LastActivityDate="2018-01-18T02:55:03.397" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5490" PostTypeId="2" ParentId="5479" CreationDate="2018-01-18T04:26:36.957" Score="8" Body="&lt;p&gt;The above advice is very good. I'd like to add a few general putpose work methods which will help with any other vintage electronics. My uncle and I recently looked at an old ray-tube oscilloscope he bought in the 60's, which had a faulty op-amp on the trace-auto. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start by checking the capacitors and wiring, and anything else that looks like it's suffered age-related damage. I've got some circuits at home (not from a TRS-80) where the copper traces have started to corrode under the varnish around the ground pins where a battery was. Check everything visually with the cover off, and be systematic. Start at the top left corner and work across and then down towards the bottom right. inspect every component for signs of bulging on capacitors or any heat-related discolouration. Also check around the parts themselves; hot components often discolour the board, which is assuming the parts were on the way out last time it was powered. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next flip the board over and look at the soldering. It should be bright and shiny, although it does go dull with age; you're looking for a uniform dullness/oxide layer on the solder joints. If any of them have gone black and crusty looking then replace them. The solder from that vintage is likely lead based, which tends to last a bit longer than modern lead free solder, but check for dry solder joints; the solder must be well adhered to both the board trace and the pin of the components. Also check the traces around the joint; sometimes flux residue from the solder can attack the copper traces on the boards. If in doubt, remove the old solder with a soldering iron and vacuum gun and resolder with lead solder if you can still get it where you live. Clean the flux off the board as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another good place to check is anything with any weight to it; parts attached to heat sinks which might have been jarred loose by knocking/dropping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a good 'belt and braces' approach, grab a schematic off the net like those &lt;a href=&quot;http://ts-inc.dyndns.org/TRS-80%20Model%201%20Schematics/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; and start probing out each connection with a multi-meter in continuity mode first, to check for opens/shorts where there shouldn't be any. You can also often put the multimeter in diode test mode to check most transistors and gates. This &lt;a href=&quot;https://www.youtube.com/watch?v=fh4hpM8JyvM&quot; rel=&quot;noreferrer&quot;&gt;video&lt;/a&gt; explains the method better than I can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally once you're confident everything's nominal, you can power it up. If it doesn't work, start checking the components around the power supply first; fuses, decoupling capacitors etc. Work your way up to the power rails on the chips. The schematics and an oscilloscope will be of use here. &lt;/p&gt;&#xA;" OwnerUserId="7695" LastActivityDate="2018-01-18T04:26:36.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5491" PostTypeId="2" ParentId="5484" CreationDate="2018-01-18T05:58:09.313" Score="25" Body="&lt;p&gt;40 years ago - 1978 - there was no home/hobbyist/small office computing to speak of. Maybe a few hundred people altogether.  So you must be talking about commercial/industrial computing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For large files we used 1/2&quot; mag tape:&lt;img src=&quot;https://i.stack.imgur.com/PDui5.jpg&quot; alt=&quot;1/2&amp;quot; mag tape&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You've seen drives like this in older movies:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/EYBOu.jpg&quot; alt=&quot;You&amp;#39;ve seen drives like this in older movies.&quot;&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These tapes could hold &lt;em&gt;one hell of a lot of data&lt;/em&gt;: Maybe 50Mb.  (Really high density tapes could go up to ~200Mb.)  But the capacity actually depended on the record format because individual records were separated on tape by a 1/2 inch &quot;inter record gap&quot; - so if you wrote small records (and didn't write them in blocks) you couldn't fit as many records on the tape.  By the way, these suckers were &lt;em&gt;heavy&lt;/em&gt;.  Not quite break a toe if you dropped one on it heavy, but pretty nearly. (I owned 4 or 5 of these in my college days.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were a few other form factors, e.g., Digital Equipment Corporation had small reels called DECTape:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://www.pdp8.net/tu56/pics/large/TU56_front.jpg&quot; alt=&quot;DECTape&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DECTapes were about the size of the palm of your hand and were, amazingly enough - random access!  (&lt;em&gt;Really really &lt;strong&gt;slow&lt;/strong&gt;&lt;/em&gt; random access.) And also they were much lower capacity, less than 1Mb total.  (I owned about 10 of these in my college days.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Actually, even talking about the capacity of this media in terms of &quot;megabytes&quot; is fairly anachronistic.)&lt;/p&gt;&#xA;" OwnerUserId="332" LastEditorUserId="332" LastEditDate="2018-01-18T06:18:46.103" LastActivityDate="2018-01-18T06:18:46.103" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5492" PostTypeId="2" ParentId="5462" CreationDate="2018-01-18T06:27:41.553" Score="1" Body="&lt;p&gt;The first time I heard this was when I added sounds to my computer with a &lt;a href=&quot;https://en.wikipedia.org/wiki/Sound_Blaster&quot; rel=&quot;nofollow noreferrer&quot;&gt;Creative Labs Soundblaster&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This voice came with a program called &lt;a href=&quot;https://en.wikipedia.org/wiki/Dr._Sbaitso&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dr. Sbaitso&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7697" LastActivityDate="2018-01-18T06:27:41.553" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5493" PostTypeId="2" ParentId="5484" CreationDate="2018-01-18T10:13:51.667" Score="6" Body="&lt;p&gt;40 years takes us back to the dawn of &quot;Personal Computing&quot;. In June 1978 Apple released the Disk II for its Apple II computer. It was based on the Shugart SA-400, the first widely available 5.25&quot; drive. Prior to that there were only 8&quot; floppy drives. That would take up quite a bit of desk space. There weren't many files larger than a disk at that time because they all had to fit on a floppy disk. Hard drives were only used by large businesses. They would use big bulky and slow tape drives to move the large files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later on in the 90s things changed and files had gotten bigger. To get around the size problem we would use file splitters to spread it out over a bunch of disks. I used pkzip to 'span' disks a few times. Usually one of the disks would go bad of course, so we had to account for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often times we would just connect another hard drive. In the 90s they were usually 40-pin IDE drives and we would connect one to the secondary IDE channel and it would dangle there while the files were copied over. In the unlucky event that there was only 1 IDE channel we would have to connect it as a slave drive and hope the two drives played nice together. Sometimes they didn't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the late 90s and early 2000s there were higher density floppy formats becoming available such as the Zip, Jaz, and SuperDisk but they weren't very common because the disks and drives were fairly expensive. There were also some weird removable hard drives just before USB came out. I remember using one that got power through the keyboard cable and communicated through the PS/2 mouse port or LPT printer port or something like that. I can't remember exactly. It had pass through connectors on it and little 2&quot; hard disks that would go in somewhat like a floppy disk. It was WEIRD.&lt;/p&gt;&#xA;" OwnerUserId="7702" LastActivityDate="2018-01-18T10:13:51.667" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5494" PostTypeId="2" ParentId="5484" CreationDate="2018-01-18T11:14:01.087" Score="2" Body="&lt;p&gt;Well, there were the floppies, 9 track tape to backup data sets but you still needed the mainframe/mini folks to help you out. The source of &quot;big&quot; data in those days was the mainframe computer centres. Most personal computers weren't personal yet ( unless home computers) business/government micro computers were mostly few and shared by the team I would have the most hours per week in the computer room ( sign the logbook ). Few IT support people as  typical now. The user was usually self supporting in small units. The lids of the micros I supported/operated were always loose ( or only a single screw )( once a few harddisk drives were available ) I'd slid the lid off, pull a hard drive from one computer and walk to the other and reinstall it - usually a smaller HDD 10MB your big storage might be a 30MB HDD - Ashton-Tate/Borland dBase as the database engine. There would be a drawer with bare HDD each used for a different database/project or software application sometimes bootable. ( I might even pull the math coprocessor/RAM/or a hardware interface card to move some device from one micro to another ) Tape/cartridge tape drives ( ostensibly for backup restore ) and things like SyQuest, optical laser disk drives Corel SCSI. ( SCSI was a big thing. ) There were the precursors of the laptop the luggable micro ( that might have an early LED amber/white or green monochrome display ) that you could carry from one desk to another or if with a good back even strive to take home for the weekend. Go to a university library and somewhere in the stacks are the back issues of the computer magazines of that era PC Magazine/Byte look through the lavish ads - one of my bigger expenses was buying computer magazines in the pre BBS and internet years, and dozens of thick computer programming books - you carried books when commuting not laptops, and paper notebooks for your &quot;offline&quot; coding, or the green banded fanfold print out. Your dotmatrix printer, manila folder and file cabinet was a storage medium as well.&lt;/p&gt;&#xA;" OwnerUserId="7706" LastEditorUserId="7706" LastEditDate="2018-01-18T11:24:04.493" LastActivityDate="2018-01-18T11:24:04.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5496" PostTypeId="1" CreationDate="2018-01-18T14:03:17.947" Score="4" ViewCount="202" Body="&lt;p&gt;I am currently developing a subset of the 6502 in LogiSim. One of my main resources is &lt;a href=&quot;https://i.imgur.com/BkZ9o.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hanson's Block Diagram&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently I am developing opcodes for the processor, and my current task is the instruction BPL, where the processor checks the negative flag, and if it is positive goes to a specified address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first thought was that the processor puts the status register into the ALU and has the other argument as 10000000, but the ALU compares 8 bit numbers, so I am not sure how it would compare just a single bit of the status register. How does the 6502 check the negative flag internally? &lt;/p&gt;&#xA;" OwnerUserId="7632" LastActivityDate="2018-01-18T15:31:12.173" Title="How does the 6502 check the negative flag internally?" Tags="&lt;6502&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2018-01-18T16:15:33.170" ContentLicense="CC BY-SA 3.0" />
  <row Id="5497" PostTypeId="1" CreationDate="2018-01-18T14:49:53.500" Score="10" ViewCount="1542" Body="&lt;p&gt;I want to create HTML5 versions of some classic Atari 2600 games and was wondering if there's any possible way to rip all sound effects from a game's ROM file. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Until now, I've tried using Stella with Audacity, but I'm looking for a faster or automated solution.&lt;/p&gt;&#xA;" OwnerUserId="7710" LastEditorUserId="10751" LastEditDate="2018-10-19T17:09:33.647" LastActivityDate="2018-11-18T11:45:07.843" Title="How do I rip sounds from Atari 2600 ROMs and save it in a more modern format?" Tags="&lt;atari&gt;&lt;atari-2600&gt;" AnswerCount="5" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5499" PostTypeId="2" ParentId="5497" CreationDate="2018-01-18T15:25:08.800" Score="14" Body="&lt;p&gt;Ignoring the copyright issues of such an endeavor, you're going to have a very hard time of ripping audio in a conventional sense. Old games don't store their sound effects and music as waveforms like modern PC and console games do. This is because both the audio hardware on old computers and consoles was much more limited, and because there wasn't enough RAM or ROM space available to hold the sounds as waveforms in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most old computers with sound capability would have a certain number of sound channels with varying abilities to adjust the tone and frequency, making them primitive synthesizers and not devices suitable for general purpose audio playback. &lt;a href=&quot;https://web.archive.org/web/20060924094923/http://www.howell1964.freeserve.co.uk/Atari/tia/description.htm&quot; rel=&quot;noreferrer&quot;&gt;The Atari 2600 had two circuits with the ability to adjust frequency, waveform type, and volume.&lt;/a&gt; As part of a program's sound playback routines, the program adjusts the appropriate control registers to get the machine to make the sounds it wants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that the only way to 'rip' such sounds is to do what you've been doing, i.e. record them from the output of an emulator (or original hardware), since that's how instructions to the synthesizer are turned into actual sound output.&lt;/p&gt;&#xA;" OwnerUserId="4744" LastEditorUserId="4744" LastEditDate="2018-01-18T17:44:45.827" LastActivityDate="2018-01-18T17:44:45.827" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5500" PostTypeId="2" ParentId="5497" CreationDate="2018-01-18T16:42:36.890" Score="5" Body="&lt;p&gt;I'm going to chance my arm that there's no automated solution because there's no [realistic] automated way to find and trigger all the possible sound effects. You're probably going to have to be a human who plays for long enough to figure out how to trigger all the sound effects, in which case you almost might as well have captured them when you play.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that Atari 2600 games generally don't have music (i.e. Pitfall 2 aside), I can imagine a tool that automatically separated sound effects from a long recording, but that would probably be more straightforward by post-processing whatever you captured.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Top tip though: the audio counters inside the TIA are clocked at 1/38th the rate of the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in the NTSC Atari 2600 the CPU is clocked at a third the speed of the colour subcarrier, so approximately 1193181.8Hz, and the TIA can update its output level autonomously at only 1/38th of that = around 31399.5Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the PAL (and, I think, SECAM) Atari 2600 that's 1182298/38 ~= 31113.11Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think that CPU changes to things like volume are synchronised to that clock and Stella's a generally excellent emulator so it's not quite true to say that sampling at 31400 Hz will exactly capture all NTSC sounds, but I think for this purpose it's close enough to true.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-01-19T14:07:12.003" LastActivityDate="2018-01-19T14:07:12.003" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5501" PostTypeId="2" ParentId="5484" CreationDate="2018-01-18T17:27:42.210" Score="4" Body="&lt;p&gt;7MB?  What an unwieldy thing in an era when RAM was 4-64kB (not hard limits, just a sampling of values).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other answers have not touched on &lt;a href=&quot;https://en.wikipedia.org/wiki/Acoustic_coupler&quot; rel=&quot;nofollow noreferrer&quot;&gt;acoustic coupling modems&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Bulletin_board_system#The_first_BBSes&quot; rel=&quot;nofollow noreferrer&quot;&gt;BBSs&lt;/a&gt;, which were methods of file transfer in the late '70s.  (How could you make an acoustic coupler have dimensions fitting all shapes and sizes of phone?  It's easier when there's &lt;strong&gt;a&lt;/strong&gt; model of phone and it comes from &lt;strong&gt;the&lt;/strong&gt; phone company.)  7MB would still have been quite challenging at 150 to 1200 baud (bits per second), taking 13-100 hours -- most BBSs implemented time limits because they only had one or a handful of phone lines.&lt;/p&gt;&#xA;" OwnerUserId="3784" LastActivityDate="2018-01-18T17:27:42.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5502" PostTypeId="2" ParentId="5484" CreationDate="2018-01-18T18:45:04.043" Score="12" Body="&lt;p&gt;Your timescales are out. Floppies might have just existed 40 years ago, but your average office worker never saw one. More to the point, office workers didn't pass machine-readable data around the office to each other, the only equipment they had that could read the data was a shared mainframe, so they would both access the same copy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From Gio Wiederhold, Database Design, ISBN 0-07070130 (1977): &quot;Disk drives are now available which can contain 200M characters per pack&quot;; cost was quoted as $600 per million characters; transfer rate was quoted as 312K characters per second. So 7Mb of data required a $4.2K investment (which was about a year's salary); at that level, you don't make multiple copies without a very good reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(For amusement: &quot;Magnetic devices are nearing their limits of storage capacity because of the size of the magnetizable area, which is determined by the surface coating and the physical dimensions of the read-write heads&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;7Mb in those days was vast. Who needs that much? You can store the entire works of Shakespeare in 5Mb.&lt;/p&gt;&#xA;" OwnerUserId="4915" LastEditorUserId="4915" LastEditDate="2018-01-18T21:00:23.393" LastActivityDate="2018-01-18T21:00:23.393" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5503" PostTypeId="2" ParentId="5484" CreationDate="2018-01-18T19:01:18.270" Score="-2" Body="&lt;p&gt;Floppies?  Just email ARCHIE and have him reply with the uuencoded binaries over dialup UUCP, then pipe the results through paste and uud.  Hmmm, ASCII pr0n.....&lt;/p&gt;&#xA;" OwnerUserId="7510" LastActivityDate="2018-01-18T19:01:18.270" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5504" PostTypeId="1" AcceptedAnswerId="5511" CreationDate="2018-01-18T19:45:30.403" Score="5" ViewCount="384" Body="&lt;p&gt;I have a piece of computer hardware in my lab that is running an Intel Celeron CPU with 300 MHz and 128k bytes of secondary cache. The hardware documentation says it's running an real time operating system (&lt;strong&gt;RTOS&lt;/strong&gt;) called &lt;strong&gt;pSOS&lt;/strong&gt; (Portable Software On Silicon). I wanted to measure what is the load on the CPU to know if I can load more stuff into it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because this is legacy hardware, I am having a hard time trying to find any information or guide on how to measure CPU usage for this chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My best guess is that I can do that using &lt;strong&gt;TELNET&lt;/strong&gt; and the correct command to read CPU usage and memory allocation. I can already &lt;strong&gt;TELNET&lt;/strong&gt; to the CPU and by using the &lt;code&gt;help&lt;/code&gt; command I get a list of commands. The problem is, I have no idea what is the exact command I have to type in order to read that kind of info. And I am afraid to mess up the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;---Updates&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This OS don't support &lt;code&gt;uname&lt;/code&gt; nor &lt;code&gt;top&lt;/code&gt; commands. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But  it does support &lt;code&gt;arp&lt;/code&gt;, &lt;code&gt;netstat&lt;/code&gt;, &lt;code&gt;ifconfig&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7717" LastEditorUserId="7717" LastEditDate="2018-01-19T10:22:42.417" LastActivityDate="2018-01-19T10:58:29.910" Title="Measuring CPU usage on an pSOS operating system" Tags="&lt;intel&gt;" AnswerCount="2" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="5505" PostTypeId="2" ParentId="5475" CreationDate="2018-01-18T21:31:28.897" Score="2" Body="&lt;p&gt;I'm not sure how ED drives work in particular, but a general issue with different densities of disk media is coercivity.  The basic design goal of disk media is that the magnetic domains within it should flip their states in the presence of a magnetic field that exceeds a certain strength, and retain their states absent such a field.  The design goal of the drive head is to produces a field which is strong enough to affect the parts of the disk that should be written, but not so strong as to disturb the parts that shouldn't be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When using media with a low coercivity, a portion of the media which has just been polarized in one direction is moving away from the head and is escaping its influence, and the head starts trying to polarize the media in the other direction, the field produced by the portion just written will oppose the field from the head.  This effect can limit usable data density.  When using media with a high coercivity, and writing it with a stronger signal, this effect will be less pronounced, thus allowing a higher density.  Consequently, media that need to support higher densities use higher corcivity materials.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a drive is used with higher-coercivity media than it is expecting, it will drive the heads too weakly to reliably flip the states of the magnetic domains on that media.  If it is used with lower-coercivity media, it will power the heads too strongly, thus affecting a wider area of the media than it should.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-01-18T21:31:28.897" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5506" PostTypeId="2" ParentId="5504" CreationDate="2018-01-18T23:28:05.853" Score="1" Body="&lt;p&gt;As others have pointed out, knowing what OS is running is really the key. &lt;code&gt;help&lt;/code&gt; as a valid command could be any variant of *nix, but also many other operating systems and even an application that is processing the telnet command instead of an OS shell process. But assuming it is some variant of Linux or a similar OS, try the &lt;code&gt;top&lt;/code&gt; command. The options vary, but typically it starts off running showing the &quot;biggest&quot; programs at the top sorted either by memory usage or CPU usage. It also lists some overall system information, such as total memory available and total memory used. The specifics vary a bit by OS version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One other item that would be helpful to figure out system capacity is the memory. You mentioned 300 Mhz. (speed) and 128k secondary cache, but not the amount of total system RAM. A quick search shows system of that vintage with 32 - 64 Meg., but I wouldn't be surprised to see quite a range from &quot;single task&quot; systems with less to top-of-the-line servers with much more, though Celeron has always been on the budget side so this was probably never a top-of-the-line server.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2018-01-18T23:28:05.853" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="5507" PostTypeId="2" ParentId="4387" CreationDate="2018-01-19T09:11:15.297" Score="3" Body="&lt;p&gt;Because the machines using them had no other storage bus. At the end of the 90s I had an (already old) Sun Sparcbook. It only had a SCSI bus, so its built in floppy was SCSI.&lt;/p&gt;&#xA;" OwnerUserId="7728" LastActivityDate="2018-01-19T09:11:15.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5509" PostTypeId="2" ParentId="1001" CreationDate="2018-01-19T09:39:48.793" Score="1" Body="&lt;p&gt;This is essentially due to the miniaturization capability. At those very frequencies, the very small parasitic capacitors present in any transistor become more and more problematic : A capacitor is like an elastic membrane which block the current and the faster you alternate the direction of the current, the more movement you can give to your electrons, and this produces heat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now multiply all those small currents by the amount of transistors on your chip, and your start to have a thermal dissipation problem. The only way you can reduce those capacitors when you have reduced all the other causes, is by reducing it's size. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those capacitors have another consequence, which is that they will absorb the command current you give your transistor, which makes them need a certain amount of time to react to command (it is called the raising time), and for this reason, you need to give each transistor, enough time or your CPU won't work.&lt;/p&gt;&#xA;" OwnerUserId="7725" LastActivityDate="2018-01-19T09:39:48.793" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5510" PostTypeId="2" ParentId="5479" CreationDate="2018-01-19T09:44:30.467" Score="1" Body="&lt;ol start=&quot;1970&quot;&gt;&#xA;&lt;li&gt;That makes it almost 50 years old.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;After you open it, Check for any worn out wires or cables(as mentioned by @tofro) and copper tracks on the mainboard. You don't want them to touch and short the circuit when you turn the power on. That may damage your precious vintage machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you check the components, check for disconnected solder joints. Sometimes your machine is working but this causes it not to turn on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the case is plastic, it may break easily after aforementioned temperature changes.&lt;/p&gt;&#xA;" OwnerUserId="7726" LastEditorUserId="7726" LastEditDate="2018-01-19T09:51:46.450" LastActivityDate="2018-01-19T09:51:46.450" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5511" PostTypeId="2" ParentId="5504" CreationDate="2018-01-19T10:58:29.910" Score="4" Body="&lt;p&gt;Apparently, you're ending up in &lt;em&gt;psh&lt;/em&gt;, the pSos+ shell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note what you have is an embedded system that is completely customized - So what you can and cannot do is entirely depending on what the system builder wanted you to be able to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;psh+ manual (for PowerPCS, but I'd assume Intel is similar) can be found here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bagfed.free.fr/pSOS/PSOS_Programmers_reference.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bagfed.free.fr/pSOS/PSOS_Programmers_reference.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(starting from pg. 1-114) Just browsed this shortly to find some sort of system load indicators, but a quick glance did not reveal anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;System load information can only be retrieved if the realtime kernel actually collects it - And in the case of PSos, I'm afraid it doesn't. So, no luck.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-01-19T10:58:29.910" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5512" PostTypeId="1" AcceptedAnswerId="5513" CreationDate="2018-01-19T14:02:03.540" Score="7" ViewCount="805" Body="&lt;p&gt;The Apple II series (up until the IIgs) did not have a built in clock. As such, there were a few add-on devices that could be installed that would keep a battery-backed time that could be queried by software. With the introduction of ProDOS, Apple decided to add the ability for time stamping files and Apple decided to standardize on a device called the Thunderclock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though a few other time keeping devices came out for the machine, they were either Thunderclock compatible or needed custom software or patches to be recognized by ProDOS. In particular, one product called the No-Slot Clock was popular because it didn't take up a precious slot and also made it possible to use on the //c. However, it did require a patch to ProDOS to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days, it seems that the only way to get time on your old Apple II is to purchase a reproduction of the No-Slot Clock and thus some time-dependent software seems to now be targeting that device probably because actual slot-based time cards weren't very common back in the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is whether the No-Slot Clock is compatible with the Thunderclock? I'm sure if you used ProDOS APIs to get to the time then it would be abstracted, but is it possible that people could be writing NSC software because there were extra features that could be exploited? Were they fundamentally different APIs?&#xA; Does it make any sense to make software for the NSC versus the Thunderclock standard? Why did the NSC need a patch in ProDOS?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2018-02-20T18:26:39.333" Title="Is the Apple II &quot;No-Slot Clock&quot; compatible with the Thunderclock?" Tags="&lt;apple-ii&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5513" PostTypeId="2" ParentId="5512" CreationDate="2018-01-19T14:41:04.210" Score="5" Body="&lt;p&gt;They are incompatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found &lt;a href=&quot;https://ia800909.us.archive.org/12/items/ThunderClock_Plus/ThunderClock_Plus.pdf&quot; rel=&quot;noreferrer&quot;&gt;the manual for the Thunderclock&lt;/a&gt; at the Internet Archive. I found &lt;a href=&quot;http://www.ctrl-pomme-reset.fr/wp-content/uploads/NSC/NSCUM.pdf&quot; rel=&quot;noreferrer&quot;&gt;the manual for the classic No-Slot Clock&lt;/a&gt; elsewhere. I also looked at &lt;a href=&quot;https://downloads.reactivemicro.com/Apple%20II%20Items/Hardware/No-Slot_Clock/No-Slot%20Clock%20Install%20Instructions%20v2.pdf&quot; rel=&quot;noreferrer&quot;&gt;installation instructions for the modern version&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The no-slot clock, as you say, doesn't fill an expansion slot. Instead you install it between the ROM and the mainboard. It gets exactly the same signals as the ROM gets. In particular:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Communication with the No-Slot Clock is established by pattern&#xA;  recognition of a serial bit stream of 64 bits which must be matched by&#xA;  executing 64 consecutive write cycles, placing address bit A2 low with&#xA;  the proper data on address bit AO. The 64 write cycles are used only&#xA;  to gain access to the No-Slot Clock.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;After which:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Information transfer into and out of the No-Slot Clock is achieved by&#xA;  using address bits AO and A2, control signals OE and CE and data line&#xA;  DQO. All No-Slot Clock data transfers are accomplished by executing&#xA;  read cycles to the mated memory address space. Write and read&#xA;  functions are determined by the level of address bit A2.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So you need to cause it to observe a specific 64-step access pattern to the ROM, after which it will activate and you can either feed it a bit stream by reading addresses that indicate the data you're writing, or read from it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's all a bit convoluted, but that's how you can fit it onto the existing bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, the ThunderClock (at least the Plus, for which I found the manual) exposes firmware and BASIC extensions for reading and writing; the documented assembly way of accessing it is via calls to &lt;code&gt;Cx08&lt;/code&gt; and &lt;code&gt;Cx0B&lt;/code&gt;, where x is determined by the selected installation slot. It can provide interrupts. The documented version offers additional functionality such as BSR/X-10, which is for home automation — that idea is about as new as it is commercially successful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Immediate conclusions then:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the officially documented way to access the ThunderClock is to use firmware extensions. The No-slot Clock does not offer those extensions. Therefore software written for the ThunderClock won't work on the No-Slot Clock;&lt;/li&gt;&#xA;&lt;li&gt;the officially documented way to access the No-Slot Clock is by specially-crafted ROM access patterns that can be parasitically intercepted. The ThunderClock does not observe interactions with the main ROM. Therefore software written for the No-Slot Clock won't work on the ThunderClock;&lt;/li&gt;&#xA;&lt;li&gt;because the ThunderClock uses some of the memory space reserved for its slot, an equivalent device that wasn't physically in a slot would nevertheless effectively cause one to be unavailable; and&lt;/li&gt;&#xA;&lt;li&gt;the ThunderClock offers interrupt-driven time updates, but the No-Slot Clock does not even have access to the interrupt line. Therefore a No-Slot Clock could never be ThunderClock compatible.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-01-19T14:41:04.210" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5514" PostTypeId="2" ParentId="5512" CreationDate="2018-01-19T14:41:06.807" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;My question is whether the No-Slot Clock is compatible with the Thunderclock?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. Thunderclock is a standard Apple II I/O Card, placing chip registers and ROM routines in memory areas provided for the slot they are in. All access is done either via direct hardware access or using the card ROM functions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No-Slot-Clock is, as the name implies designed to use &lt;em&gt;no&lt;/em&gt; slot resources. Therefore it can not provide a compatible interface at all. No ROM means no ROM calls via Cnxx, and no I/O Port means no access via C0nx.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The No-Slot-Clock's access is done via consecutive read access to a bunch of ROM addresses creating a serial protokoll to unlock and read or write information.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;is it possible that people could be writing NSC software because there were extra features that could be exploited?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, but it's not a feature of something more powerfull or whatsoever, but the fact, that this clock doesn't need I/O resources. Hence, No-Slot. I could be added to a fully cramped Apple II - or even an Apple IIc, which otherwise couldn't add a slot based clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, the Thunderclock did provide more functionality. Not only could it provide time based interrupts (timers) but also handle a remote :)) So if you want to get more than just the time of day and data, you might want something else than a No-Slot-Clock.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Were they fundamentally different APIs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Thunderclock did provide a nice ROM based high level interface suited for easy access by BASIC (DOS and ProDOS), and still somewhat good access by Assembly. The No-Slot-Clock always needed an additional binary driver to be read or set. No function available without.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does it make any sense to make software for the NSC versus the Thunderclock standard?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;More installations. Programming for the No-Slot-Clock allows your software to use the clock feature  by installing a No-Slot-Clock. Even on an Apple IIc. Supporting only the Thunderclock restricts the clock feature to machines with slots (II/II+/IIe).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why not support both (like with a loadable driver binary).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did the NSC need a patch in ProDOS?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Cause ProDOS knows about time (DOS doesn't) but didn't have a driver for the No-Slot-Clock build in? How else would one be able to change the driver than by patching ProDOS?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-02-20T18:26:39.333" LastActivityDate="2018-02-20T18:26:39.333" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5515" PostTypeId="1" AcceptedAnswerId="5525" CreationDate="2018-01-19T15:49:59.303" Score="6" ViewCount="1820" Body="&lt;p&gt;I just got a Medion PC with an Intel AN430TX, Pentium MMX 166 and 32MB of RAM. The Mainboard has a 3d Rage 2 and Yamaha audio onboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can not install Windows 98 SE completely.&#xA;I don't get any error messages. The installation &quot;hangs&quot; or stops after / during device detection. To be precise, after entering the serial and device detection is a reboot. After that reboot I can see the Windows 98 loading screen with the boot animation at the bottom. The animation is playing now for an hour but there is no optical or HDD activity. The last activity I noticed was a very short access to the floppy drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried the installation several times but it stops always at this precise point.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I had to replace the BIOS battery and reset the bios to default values.&lt;/li&gt;&#xA;&lt;li&gt;I removed all PCI cards.&lt;/li&gt;&#xA;&lt;li&gt;I tried the memtest floppy: no errors.&lt;/li&gt;&#xA;&lt;li&gt;I tried a different HDD and different optical drive.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;This is a burned CD with an image from my university (pre-OnTheHub Microsoft educational program) and a license I obtained as a student. I tried another image I got from archive.org with the same serial.&#xA;-- The university image crashes during installation with a memory error pretty early. I assume the image is damaged. I carry this around for 8 years now. If requested I'll install from that image again and copy the error message.&#xA;-- The archive.org image works to the point I explained above.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I have no spare power supply to test&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;I have no spare RAM which fits so I could test this, too.&lt;/li&gt;&#xA;&lt;li&gt;There seems to be a BIOS update (p.10) and the Board seems to have p.4 as far as I understand the version string.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I will try installing Windows 95 next, but I'd like to have 98 SE on this PC. I need help to figure out what the problem is. Any help is appreciated, even if I have to reinstall it over and over. I just want it to work and have a retro gaming and &quot;retro development&quot; PC from that time to play with.&lt;/p&gt;&#xA;" OwnerUserId="7194" LastActivityDate="2018-01-21T13:01:36.127" Title="Windows 98 SE installation &quot;hangs&quot;" Tags="&lt;windows-98&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5516" PostTypeId="1" AcceptedAnswerId="5517" CreationDate="2018-01-19T15:58:49.257" Score="6" ViewCount="483" Body="&lt;p&gt;If one inserts an ED disk into a floppy drive, which supports sizes only &lt;strong&gt;up to HD,&lt;/strong&gt; how does it cope with ED?&lt;/p&gt;&#xA;" OwnerUserId="7641" LastEditorUserId="15334" LastEditDate="2021-02-16T10:50:01.713" LastActivityDate="2021-02-18T22:08:24.027" Title="How does a HD floppy drive react to an ED disk?" Tags="&lt;floppy-disk&gt;&lt;floppy-drive&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5517" PostTypeId="2" ParentId="5516" CreationDate="2018-01-19T16:06:32.140" Score="8" Body="&lt;p&gt;It doesn’t, at least not in any particularly useful way. Because of the position of the density sensor cut-out on ED floppy disks, they’re detected as 720K floppies by HD drives. Their contents can’t be read, and they can’t be used, as explained in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/18030/79&quot;&gt;Michael Karcher’s answer&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-18T22:08:24.027" LastActivityDate="2021-02-18T22:08:24.027" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5518" PostTypeId="2" ParentId="5484" CreationDate="2018-01-19T16:31:00.163" Score="3" Body="&lt;p&gt;It sounds like in your example each worker has his own computer. So your question is not about how data was transfered between minicomputers. Forty years ago the problem you describe simply did not arise for personal computer users, indeed it could not arise. Assuming that in 1978 you could even find an office with two (&quot;TWO! Did you hear they have TWO!&quot;) personal computers in it, floppy disks (or cassette tapes) would be the only persistent storage medium. If you wanted to transfer a file, you would take the disk out of one computer and put it into the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1978 a 70KB file would be considered enormous. If you were to start talking about 7MB files people would laugh indulgently. That's over 1500 single-spaced typed pages. Are you going to type all that in? What are you going to do with it once you have it saved on a couple dozen floppies?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There just weren't the opportunities to create big files which we have today. Personal computers which could display photographs, play recorded audio, and play even tiny grainy videos are still more than a decade in the future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nor could a personal computer even store such a file. You would have to wait until at least 1981 to buy a hard disk for a personal computer which could store even one such file (the Shugart ST-412).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You question is rooted in the modern computing world in which computers have huge internal storage and removable media is comparatively small. In 1978 they had no persistent internal storage. If you went back in time to 1978 and asked how to &quot;transfer a file too big to fit on a floppy disk from one computer to another&quot; people would assume you were confused and start giving you a lesson in how computers work. They would explain that data is not stored long-term inside the computer, it is stored on a floppy disk.&lt;/p&gt;&#xA;" OwnerUserId="433" LastEditorUserId="433" LastEditDate="2018-01-22T19:29:49.070" LastActivityDate="2018-01-22T19:29:49.070" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5519" PostTypeId="2" ParentId="5470" CreationDate="2018-01-19T17:02:33.627" Score="0" Body="&lt;p&gt;The 400kb and later double-sided 800kb and bigger Classic Macintosh floppies did run faster, depending on head location. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the Mac innovations was &lt;em&gt;variable-speed drives&lt;/em&gt; see &lt;a href=&quot;http://lowendmac.com/2016/floppy-disk-compatibility-and-incompatibility-in-the-mac-world/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://lowendmac.com/2016/floppy-disk-compatibility-and-incompatibility-in-the-mac-world/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;These drives had a variable speed motor that allowed the Mac to pack 400K into a disk that would only hold 360 KB on a fixed-speed drive. (This is also the reason non-Mac computers can’t mount 400K and 800K Mac floppy disks.)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first Mac was a 1985 512KB &quot;Fat Mac&quot; with the internal 400kb drive, for which I purchased a third party 800kb double-sided. They definitely varied in speed - you could hear it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wonder if varying in speed also allows the drive to maintain a more uniform density of writing over the increased circumference of the tracks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just dug out my paper copy of &lt;em&gt;Inside Macintosh Vol IV&lt;/em&gt; which on page 251 says &lt;em&gt;With double-sided disks a single mechanism positions two read/write heads - one above the disk and one below - so that the drive can access two tracks simultaneously...This lets the drive read or write two complete tracks of information before it has to move the heads....The double-sided drive controls its own motor speed, ignoring the speed signal (PWM) from the Analog Signal Generator (ASG).&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="7730" LastEditorUserId="7730" LastEditDate="2018-01-23T01:26:54.663" LastActivityDate="2018-01-23T01:26:54.663" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5520" PostTypeId="1" AcceptedAnswerId="5521" CreationDate="2018-01-19T18:35:06.710" Score="21" ViewCount="2363" Body="&lt;p&gt;It was common with Commodore BASIC (and others, I'm sure) to have machine language encoded in BASIC programs using POKEs or READ/DATA. This was needed for both performance and to access certain machine functions not accessible from BASIC syntax.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, this was very sub-optimal, since it required an external assembler, provided no simple data sharing mechanism, and the code was completely unreadable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One obvious &quot;better way&quot; is to embed actual assembly language code that can easily share variables, parameters, and return values with BASIC. Though I'm unfamiliar with exactly how it worked, the BBC BASIC allows this technique.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did any other 8-bit micros have BASIC interpreters supporting inline assembly, or some other technique that could make mixing machine and BASIC code more practical AND readable?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Moderator's Note:&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Please refrain from posting new answers to this question; instead add information to &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5521&quot;&gt;the Community Wiki answer&lt;/a&gt; if it is not there already.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="278" LastEditDate="2018-01-20T13:22:09.713" LastActivityDate="2021-02-11T16:34:30.557" Title="Which BASIC interpreters support techniques for hybrid programming in Assembly?" Tags="&lt;basic&gt;&lt;software-development&gt;" AnswerCount="8" CommentCount="10" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5521" PostTypeId="2" ParentId="5520" CreationDate="2018-01-19T18:39:30.867" Score="24" Body="&lt;h1&gt;BBC BASIC: inline assembly&lt;/h1&gt;&#xA;&lt;p&gt;First one that comes to mind would be the BBC BASIC family.&lt;/p&gt;&#xA;&lt;p&gt;Beside many great features to access the OS, Assembly code could be directly inserted. It would be assembled right between the BASIC lines before and after.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 P%=8000 : REM set Assembly location&#xA;20 [&#xA;30  LDA #1&#xA;30  JSR some_function&#xA;40  RTS&#xA;50 ]&#xA;60 CALL 8000 : REM now execute it&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The feature originally started out with Acorn's &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Atom&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atom&lt;/a&gt;, followed by the &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_Micro&quot; rel=&quot;nofollow noreferrer&quot;&gt;BBC Micro&lt;/a&gt; (Acorn Proton) and it's offsprings (all the way to the Electron). BBC BASIC as it was called by now was ported from the 6502 to other popular CPUs, foremost of course to all the ones supported by BBC Micro Tube modules, like Z80, NS32016 or ARM (Standard BASIC for RiscOS).&lt;/p&gt;&#xA;&lt;p&gt;Especially the Z80 Version became wide spread as machines like Sinclair's Z88 (as Tofro mentioned) or Amstrad's N100/200 series did feature it - now of course supporting Zilog syntax :))&lt;/p&gt;&#xA;&lt;p&gt;In more recent years it also has been ported (and extended) for Windows and TI 83 calculators (also Z80 based).&lt;/p&gt;&#xA;&lt;p&gt;AFAICT it's still under somewhat active development by its original creators.&lt;/p&gt;&#xA;&lt;p&gt;There are also several new(er) reimplementations available, so it might be a good idea to search a bit for the desired machine/OS (like Linux).&lt;/p&gt;&#xA;&lt;h2&gt;Amstrad CPC: Resident System Extension&lt;/h2&gt;&#xA;&lt;p&gt;As comments on question pointed out, inline assembly source consumes much more space than just machine code bytes, plus assembly time.&lt;/p&gt;&#xA;&lt;h3&gt;A memory and time efficient compromise&lt;/h3&gt;&#xA;&lt;p&gt;One can reap those other benefits mentioned in question: (1) memory-efficient, (2) time-efficient, (3) information sharing/exchange with basic.&lt;/p&gt;&#xA;&lt;p&gt;One option is basically to consider assembly routines a kind of library or system extension, rather than part of BASIC program.  With proper calling mechanisms, such libraries can be &lt;em&gt;used&lt;/em&gt; from basic very conveniently.  They are just &lt;em&gt;developed&lt;/em&gt; with separate tool, not directly inside BASIC source.&lt;/p&gt;&#xA;&lt;h3&gt;How Amstrad did it&lt;/h3&gt;&#xA;&lt;p&gt;That's the approach taken by Amstrad when developing the CPC 464.  Amstrad BASIC allows to register extension routines made of Z80 machine code.  BASIC can then call them exchanging &lt;strong&gt;typed parameters&lt;/strong&gt;: integers passed as values or pointers, strings as pointers.  This allows changing BASIC variables (kind of multiple return values).&lt;/p&gt;&#xA;&lt;p&gt;It can be used with libraries supplied as ROM or loadable into RAM from tape or disc. Short reference: &lt;a href=&quot;http://www.cpcwiki.eu/index.php/RSX&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;RSX - CPCWiki&quot;&gt;RSX on CPCWiki&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Actual example of BASIC call&lt;/h3&gt;&#xA;&lt;p&gt;One can program this:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;10 memory &amp;9000 : LOAD&quot;extensio.bin&quot; : call &amp;9000 'register RSX&#xA;20 a$=&quot;mystring&quot; : |myuppercasecommand,@a$ : print a$ 'would print MYSTRING&#xA;30 |mywhatevercommand,myintegerargument1,@myargument2passedaspointer&#xA;&lt;/pre&gt;&#xA;&lt;h3&gt;Amstrad used it for their extensions&lt;/h3&gt;&#xA;Disc drive&#xA;&lt;p&gt;This was convenient enough that Amstrad used this very mechanism to provide BASIC access to hardware extensions like the floppy disc drive with functions like &lt;code&gt;|DISC&lt;/code&gt;, &lt;code&gt;|TAPE&lt;/code&gt;, &lt;code&gt;|REN,&amp;quot;oldname.bad&amp;quot;,&amp;quot;newname.bas&amp;quot;&lt;/code&gt;, etc (details: &lt;a href=&quot;http://www.cpcwiki.eu/index.php/AMSDOS&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;AMSDOS - CPCWiki&quot;&gt;AMSDOS on CPCWiki&lt;/a&gt;).&lt;/p&gt;&#xA;Hardware-based speech synthesizer&#xA;&lt;p&gt;For example, the &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Amstrad_SSA-1_Speech_Synthesizer&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Amstrad SSA-1 Speech Synthesizer - CPCWiki&quot;&gt;Amstrad SSA-1 Speech Synthesizer&lt;/a&gt; provided convenient routines callable from BASIC.  This would be a valid BASIC program using speech synthetizer:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;10 ' User has to first run program supplied by speech synthetizer manufacturer.&#xA;20 |say,&quot;Hello, what is your name?&quot;&#xA;30 input name$&#xA;40 r$=&quot;Pleased to meet you &quot; + name$ + &quot;.&quot; : |say,@r$&#xA;&lt;/pre&gt;&#xA;&lt;h3&gt;Official documentation&lt;/h3&gt;&#xA;&lt;p&gt;To create and register personal extensions, Amstrad provided an assembly-level API , documented in &lt;a href=&quot;http://www.cpcwiki.eu/imgs/f/f6/S968se10.pdf&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;S968se10.pdf&quot;&gt;SOFT 968 Section 10: Expansion ROMs, Resident System Extensions and RAM Programs&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Extract:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This example uses an invented external command which takes a string of characters, looks&#xA;these up in an index and returns a reference number. The external command is assumed to be&#xA;designed to be called from BASIC as follows:&lt;/p&gt;&#xA;&lt;p&gt;|REFNUM,@CHARTRING$,INDEXNUM,@REFNUM&lt;/p&gt;&#xA;&lt;p&gt;i.e. The first parameter is a string (whose address is passed) which is to be looked up. The&#xA;second parameter is a number specifying which index to use, and the third parameter is a&#xA;variable (whose address is passed) which is to be set to the required reference number.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h1&gt;Apple II: Monitor, Mini-Assembler, Ampersand, USR&lt;/h1&gt;&#xA;&lt;p&gt;While the Monitor and Mini-Assembler were not technically part of BASIC, they were available in ROM and machine language code they produced could easily be run from BASIC.&lt;/p&gt;&#xA;&lt;h2&gt;The Monitor&lt;/h2&gt;&#xA;&lt;p&gt;From BASIC, you could access the monitor with the ubiquitous &amp;quot;CALL -151&amp;quot; command.  It would also come up if a BRK instruction was executed.  The system monitor provided direct access to system memory (including ROM and memory-mapped hardware) and various features useful for directly manipulating memory.  The monitor contained a &lt;a href=&quot;http://apple2.info/wiki/index.php?title=System_Monitor#Disassembling_Memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;disassembler&lt;/a&gt; which could be accessed by inputting an address followed by 'L', e.g. &amp;quot;300L&amp;quot; will disassemble the code located at (hexadecimal) address 300.  You could continue on disassembling more code just by typing 'L', as the monitor remembers the last address it was operating on.  Simply typing an address with no command would dump the memory at that location in hexadecimal form.  The monitor also saved and displayed the CPU registers (and restored them before executing a command) and also supported an &lt;a href=&quot;http://www.easy68k.com/paulrsm/6502/MONREF.HTM&quot; rel=&quot;nofollow noreferrer&quot;&gt;'S' command&lt;/a&gt; which single-stepped through an assembly program, providing actually rather useful debugging features.&lt;/p&gt;&#xA;&lt;p&gt;Within the monitor, you could then access the mini-assembler with the command &amp;quot;F666G&amp;quot; (nobody said these commands would be easy to remember).  The &amp;quot;G&amp;quot; command tells the monitor to run the program located at the specified address, so &amp;quot;F666G&amp;quot; simply runs the program at that location, which happens to be the mini-assembler.  If you loaded the mini-assembler from disk you instead would give the address of wherever in memory you put it.  The //e and later allowed you to enter the mini-assembler with the simpler command &amp;quot;!&amp;quot; (which happened also to be the prompt character for it), which also allowed them to move the code.&lt;/p&gt;&#xA;&lt;h2&gt;The Mini-Assembler&lt;/h2&gt;&#xA;&lt;p&gt;While not technically part of BASIC, the Apple II family supported a &lt;a href=&quot;https://ia601009.us.archive.org/30/items/Apple2_Woz_MiniAssembler/Apple2_Woz_MiniAssembler.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;mini-assembler&lt;/a&gt;, which was created by Steve Wozniak himself.  The mini-assembler was included in the original Apple II ROM with Integer BASIC (supposedly, Woz wrote Integer BASIC itself using the mini-assembler).  Systems with Applesoft in ROM lost the mini-assembler, but it later returned in the Enhanced //e, //c, //c+ and IIgs.  Those computers without the mini-assembler in ROM could load it from disk or tape.  All versions of the Apple II had a disassembler in ROM.&lt;/p&gt;&#xA;&lt;p&gt;The mini-assembler provided a minimalistic interpretation of assembly language.  While it supported all the instructions and addressing modes available on the installed CPU, it had few other features.  Features not found in the mini-assembler but that were common in more full-featured assemblers included labels, code relocation, pseudo-opcodes, decimal numbers, embedded data, or much of anything else besides &amp;quot;[address] mnemonic operand&amp;quot;.  It did allow you to pass commands to the monitor, so you had not only assembler but memory poke/dump/disassembler/debugger available from the same command line.  Errors would produce a beep and a printout of the input that was in error, and you exited by entering a simple blank line.&lt;/p&gt;&#xA;&lt;h2&gt;The Ampersand&lt;/h2&gt;&#xA;&lt;p&gt;Applesoft BASIC also had an unusual &lt;a href=&quot;https://link.springer.com/content/pdf/10.3758/BF03203836.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;ampersand&lt;/a&gt; command which, while not originally intended for public consumption, eventually became a more efficient way of calling machine-language code than the usual DATA/POKE/CALL commands.  The ampersand hook allowed the programmer to attach machine-language code to an Applesoft program, where it would be managed by Applesoft and loaded/saved along with the rest of the BASIC program.  Data could be passed to the ampersand command directly from BASIC, and could not only assign variables, but even modify the language itself - adding additional flow control constructs, for example.  While this was nice for the BASIC programmer it was more work for the assembly programmer.  In this way the extra code functioned more like a language extension than a specific assembly-language routine, and the additional code didn't appear in the BASIC program listing.  (While DATA statements containing assembly routines aren't particularly easy to understand, they're right there and you can at least see them).&lt;/p&gt;&#xA;&lt;h2&gt;USR()&lt;/h2&gt;&#xA;&lt;p&gt;USR() was like CALL, but it could pass and return a value (in the accumulator).  Like CALL, additional data could be passed in free zero-page locations, the keyboard buffer, or some other transient storage.  Unlike CALL, you could only have ONE routine attached to the USR hook, so it is really only useful in limited circumstances.&lt;/p&gt;&#xA;&lt;h1&gt;Commodore C128 (CBM BASIC 7.0)&lt;/h1&gt;&#xA;&lt;p&gt;BASIC 7.0, the vastly improved BASIC in 128 mode, has some features that simplify the process of combining BASIC and ML.&lt;/p&gt;&#xA;&lt;p&gt;In addition to calling an ML routine, the SYS statement can also pass values from BASIC to ML. The values must be in the range 0-255 and are placed in the microprocessor's registers just before the ML routine takes over. Simply tack them onto the end of the SYS command, separated by commas. Conversely, the RREG command lets you read the processor's registers from BASIC after an ML routine has finished.&lt;/p&gt;&#xA;&lt;p&gt;The BLOAD command can bring in any ML module with no fuss or bother. The file loads into the same memory area from which it was saved, and BASIC continues with the next command. This is much simpler than the gyrations required in earlier versions of Commodore BASIC.&lt;/p&gt;&#xA;&lt;p&gt;(please add other Machines/Basics and their workings by editing this answer)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2021-02-11T16:34:30.557" LastActivityDate="2021-02-11T16:34:30.557" CommentCount="13" CommunityOwnedDate="2018-01-20T13:01:02.033" ContentLicense="CC BY-SA 4.0" />
  <row Id="5522" PostTypeId="2" ParentId="5520" CreationDate="2018-01-19T18:42:19.147" Score="4" Body="&lt;p&gt;Acorn computers did &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Atom&quot; rel=&quot;nofollow noreferrer&quot;&gt;Acorn Atom&lt;/a&gt; had Atom Basic which could have 6502 assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The later BBC Micro which was 6502 based had BBC Basic (later versions for Intel are &lt;a href=&quot;http://www.bbcbasic.co.uk/bbcbasic.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipesia description&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="7146" LastEditorUserId="7146" LastEditDate="2018-01-19T19:37:12.073" LastActivityDate="2018-01-19T19:37:12.073" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5523" PostTypeId="2" ParentId="5520" CreationDate="2018-01-19T18:53:19.613" Score="8" Body="&lt;p&gt;It is not commonly known, but the Cambridge Z88 also had BBC Basic. &lt;strong&gt;And&lt;/strong&gt; supported inline assembly. For the Z80, obviously, and not 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A little gem of a program named ZX-IDE allows mixed-mode Basic and assembler cross-development for the ZX-81 on a Windows PC. It is directly integrated with the EIghty-One emulator for lightning-fast turnaround.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.sinclairzxworld.com/viewtopic.php?t=1064&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.sinclairzxworld.com/viewtopic.php?t=1064&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-01-20T10:20:31.230" LastActivityDate="2018-01-20T10:20:31.230" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5524" PostTypeId="1" CreationDate="2018-01-19T20:15:05.947" Score="2" ViewCount="926" Body="&lt;p&gt;I played 20 minutes of music with a floppy disk directly in front of the speaker's subwoofer. &lt;strong&gt;No damaged sectors at all.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can a speaker actually erase a floppy disk? &lt;strong&gt;How close does it need to be?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7641" LastEditorUserId="278" LastEditDate="2018-01-23T17:05:33.427" LastActivityDate="2018-01-23T17:05:33.827" Title="Can a HiFi speaker erase a floppy disk?" Tags="&lt;floppy-disk&gt;&lt;storage&gt;" AnswerCount="4" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5525" PostTypeId="2" ParentId="5515" CreationDate="2018-01-19T20:52:40.947" Score="6" Body="&lt;p&gt;Solution: BIOS Update.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't want to update the BIOS. As far as I remember, BIOS updates were more risky back then so I wanted to do this as last option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I downloaded the BIOS Update and installed it. After that I tried installing Win98SE again and it worked perfectly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Mainboard has a Phoenix BIOS. Using a Phoenix BIOS make sure the first 11 digits of the installed BIOS and of the update match as you can read in the instructions (&quot;XXXXXXXX.XXX&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I updated from&#xA;4A3NT0X0.86A.0056.P04.9707181304&#xA;to&#xA;4A3NT0X0.86A.0095.P10&#xA;using the update i found on the Intel website here:&#xA;&lt;a href=&quot;https://downloadcenter.intel.com/product/50292/Intel-Desktop-Board-AN430TX&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://downloadcenter.intel.com/product/50292/Intel-Desktop-Board-AN430TX&lt;/a&gt;&#xA;(You can get some drivers there, too, but Win98SE brings all drivers required.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The version string is the fourth line on the screen. Make sure some lines below it shows &quot;Intel Corporation AN430TX Motherboard&quot; and not a completely different product / vendor. I assume there are Mainboard with the same Chipset but from other vendors, too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also loaded the BIOS defaults again and set &quot;Reset Configuration Data&quot; to &quot;Yes&quot;. Reboot. I enabled Plug &amp;amp; Play O/S.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that I installed Win98SE seamlessly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the issue that I get bluescreens with data write errors. Those bluescreens don't freeze the system, I can continue working and scandisk shows no problems. I assume the hard disk is old. I'll get a IDE to CF adapter soon and reinstall and comment here about the results.&lt;/p&gt;&#xA;" OwnerUserId="7194" LastEditorUserId="7194" LastEditDate="2018-01-21T13:01:36.127" LastActivityDate="2018-01-21T13:01:36.127" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5526" PostTypeId="2" ParentId="5524" CreationDate="2018-01-19T20:57:10.667" Score="8" Body="&lt;p&gt;It doesn’t need to be loud, it needs to be unshielded. Many speakers produced in the last 20-30 years are shielded, to avoid their magnets affecting surrounding objects — particularly CRTs (you don’t want your speakers changing the colours on your retro TV screen), but as a side-effect, magnetic media too. If you have unshielded speakers with strong enough magnets, or you place your floppies close enough to the magnet, the floppies will be affected, without even needing to play any sound.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-01-19T21:00:09.157" LastActivityDate="2018-01-19T21:00:09.157" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5527" PostTypeId="2" ParentId="5520" CreationDate="2018-01-19T20:58:20.757" Score="1" Body="&lt;p&gt;Any BASIC with a BRUN or SYS command could load a separate assembly program into memory and transfer control to that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the hex or decimal for assembly opcodes as used in DATA statements was as familiar as the mneumonic after awhile.&lt;/p&gt;&#xA;" OwnerUserId="7747" LastActivityDate="2018-01-19T20:58:20.757" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5528" PostTypeId="2" ParentId="5520" CreationDate="2018-01-19T21:38:19.493" Score="1" Body="&lt;p&gt;The only microcomputer BASIC I've ever seen which did not provide any mechanism for running machine code was the built-in interpreter of the TI 99/4 and TI 99/4a.  So far as I can tell, that machine required either a machine-language monitor or extended-BASIC cartridge to even load machine code programs off tape.  It's possible that someone has by now discovered a way to &quot;jail-break&quot; it from within a BASIC program, but many cassette-based games back in the day required that the user have one of those cartridges--a requirement I don't think they would have imposed if they could avoid it.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-01-19T21:38:19.493" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5529" PostTypeId="2" ParentId="5520" CreationDate="2018-01-20T02:42:49.877" Score="4" Body="&lt;p&gt;It is important to remember that most BASIC computers run an interpreter. So having to compile assembler at run time would have not been desirable (and, as the main reason to use it was always speed and/or RAM, interpreting it would have not been acceptable). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, a processor like Z80 (the one I knew best, using it on TRS80 Models I and III) had a simple enough set of instructions that one started memorizing the opcodes fairly quickly. I wrote a disassembler in BASIC when I was 14, but by the time I was in position to use it to disassemble significant code, I was proficient enough in reading in hexadecimal that most of the time I would not need it. With that knowledge, assembling a short routine by hand was not a big deal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case one needed a more substantial part of the program in assembler, one could produce a separate executable and run it from BASIC, or write a short BASIC routine that would poke the program. &lt;/p&gt;&#xA;" OwnerUserId="445" LastEditorUserId="445" LastEditDate="2018-01-20T04:16:11.043" LastActivityDate="2018-01-20T04:16:11.043" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5531" PostTypeId="2" ParentId="5520" CreationDate="2018-01-20T09:55:25.223" Score="6" Body="&lt;p&gt;&lt;a href=&quot;https://archive.org/stream/BASIC-80_MBASIC_Reference_Manual/BASIC-80_MBASIC_Reference_Manual_djvu.txt&quot; rel=&quot;noreferrer&quot;&gt;Microsoft BASIC (MBASIC)&lt;/a&gt; supported the &lt;code&gt;CALL/USR&lt;/code&gt; functions, where you could call non-BASIC functions located at a specified address. If you used the extended/disk versions, there were several ways of calling assembly without too much pain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From section 2.2:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;110 MYROUT=&amp;amp;HD000 &#xA;120 CALL MYROUT(I,J,K)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From section 2.13:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;200 DEF USR0=24000 &#xA;210 X=USR0(Y^2/2-89)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;DEF USR&lt;/code&gt; had the interesting property that you could rebind each of the USR variables, allowing for indirection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of having to use &lt;code&gt;POKE&lt;/code&gt; or &lt;code&gt;DATA/READ&lt;/code&gt;, you could also use &lt;code&gt;VARPTR&lt;/code&gt; to get the starting address of a file buffer or string array: You then used that computed address to set the &lt;code&gt;USRx&lt;/code&gt; or &lt;code&gt;CALL&lt;/code&gt; variable (the BASIC compiler allowed you to link assembly functions directly into your program and then use CALL without having to specify the starting address.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From section 3.43:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;100 X=USR(VARPTR(Y))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Later, Microsoft added &lt;code&gt;BLOAD&lt;/code&gt; which allowed you to load in binary data more quickly (I won't say that the speed was impressive, because it wasn't even then!) However, I'm not certain that any 8-bit versions of Microsoft's BASIC included that command.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2018-01-20T09:55:25.223" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5532" PostTypeId="2" ParentId="5524" CreationDate="2018-01-20T13:09:43.813" Score="2" Body="&lt;p&gt;Placing it in from of a speaker/woofer wont affect. It just creates vibrations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need a powerful magnet. You can either get it from a speaker, or make a strong &lt;strong&gt;electromagnet&lt;/strong&gt;. Rub it on the magnetic tape repeatedly. That will corrupt the data on it, but I doubt that it'll erase it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It works just same as magnetizing a metal piece by rubbing a magnet on it. &lt;/p&gt;&#xA;" OwnerUserId="7726" LastActivityDate="2018-01-20T13:09:43.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5533" PostTypeId="1" AcceptedAnswerId="5561" CreationDate="2018-01-20T14:54:23.400" Score="10" ViewCount="4121" Body="&lt;p&gt;I'm aware of the floppy emulators that are installed to 3.5&quot; bays where &quot;disks&quot; are stored on a flash drive. But what I need now is the opposite - essentially a USB dongle that emulates the floppy drive hardware with a disk inside. Something that older OS installers would recognize. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The need came up when I tried to install Windows XP on a laptop. The only way to load the AHCI drivers is via a floppy drive. I have a USB floppy drive, but no disks at the moment :( and obviously there is no 3.5&quot; bay to install the typical emulator in a laptop. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know I can always just buy some floppies, and in fact I have some on the way, but given the reliability of floppies over time, I still feel that what I'm describing would often come in handy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone make/sell these? &lt;/p&gt;&#xA;" OwnerUserId="7758" LastActivityDate="2018-06-07T15:22:04.300" Title="USB floppy drive emulator, is there such a thing? and if so, where can I get one" Tags="&lt;floppy-disk&gt;&lt;emulation&gt;&lt;usb&gt;" AnswerCount="5" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5534" PostTypeId="2" ParentId="5533" CreationDate="2018-01-20T15:34:55.567" Score="8" Body="&lt;p&gt;I don't think anyone sells something like that in one piece.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are, however, components on the market that should allow you to build that from scratch:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A GoTek or HxC that behaves like a &quot;real&quot; floppy&lt;/li&gt;&#xA;&lt;li&gt;An &lt;em&gt;old&lt;/em&gt; Floppy-to-USB adapter that was used to connect &quot;real&quot; floppies over USB. I don't think they're still made, so you would need to source one from eBay. Newer USB floppy drives no longer have this as I have learned from answers to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5428/is-there-anything-useful-for-a-retro-in-these-cheap-chinese-floppy-drives&quot;&gt;this&lt;/a&gt; question.&lt;/li&gt;&#xA;&lt;li&gt;Some sort of external power supply, as the GoTek/HxC will not be willing to live from the USB power supply.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Putting it all together would end you up with something that behaves like a real floppy, connected over USB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is, however, never going to be a full replacement for a &quot;real&quot; floppy disk drive. Old computer's abilities to for example boot from USB floppies have always been very limited (even if they could always boot very well from standard floppy drives). Once you find one that does this, it will most probably also boot from a standard USB flash stick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'd probably be much better off by buying a bunch of HD disks and storing them well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another, entirely different, but possibly long-term method to make Windows XP think it has a floppy drive would be a &lt;em&gt;&lt;a href=&quot;http://vfd.sourceforge.net&quot; rel=&quot;noreferrer&quot;&gt;virtual floppy driver&lt;/a&gt;&lt;/em&gt;. This just emulates a floppy based on an image stored on hard disk and could be a solution for many problems. You'd obviously need to have a drive and disk first in order to pull the images from &quot;real&quot; disks.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-01-20T16:11:02.553" LastActivityDate="2018-01-20T16:11:02.553" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5535" PostTypeId="1" AcceptedAnswerId="5536" CreationDate="2018-01-20T20:36:35.703" Score="16" ViewCount="3357" Body="&lt;p&gt;I've seen a few computers with more than two floppy drives, most with two 3.5&quot; and one 5.25&quot;. My question is how was this achieved? I've heard that it could be done with a second controller card, but I'm not aware about FDD controller cards for PCI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, what about those four-connector floppy cables (one edge connector, three standard goldpin connectors) - could've they been used to connect a 5.25&quot; and two 3.5&quot; drives, how about one of iOmega tape drives?&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2020-01-15T00:03:43.797" Title="Adding the third floppy drive?" Tags="&lt;floppy-disk&gt;&lt;ibm-pc&gt;&lt;data-transfer&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5536" PostTypeId="2" ParentId="5535" CreationDate="2018-01-20T21:23:35.937" Score="19" Body="&lt;p&gt;A PC floppy controller can control two drives. For the third and fourth drive you'd need a secondary controller. I haven't ever seen one for PCI, only for ISA - some ISA cards can be configured to primary or secondary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Raffzahn is correct: early floppy controllers did support all four drives the Shugart bus provided for. This changed with the clone market and when 3.5&quot; disks came up (AFAIR). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The four-connector floppy cables were used in the 5.25&quot; to 3.5&quot; transition era - they simply provide one kind of connector each for the A: and for the B: drive, so you can connect any mix. You can only use one of the connectors in each position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit2: If you don't stick to the twisted-cable scheme and jumper the address on the disk drive you can actually use all positions simultaneously (with a controller capable of driving four drives and if space allows).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit3: As it appears, I've looked at a non-common controller - most four-drive controller seem to use two cables with two drives each. (Thx @Raffzahn)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this wasn't Retrocomputing I'd say get a USB floppy drive...&lt;/p&gt;&#xA;" OwnerUserId="5200" LastEditorUserId="5200" LastEditDate="2018-01-22T11:55:15.357" LastActivityDate="2018-01-22T11:55:15.357" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5537" PostTypeId="2" ParentId="5535" CreationDate="2018-01-20T22:49:31.290" Score="9" Body="&lt;p&gt;You'd definitely be looking for an ISA controller; it seems highly unlikely that anybody would make a PCI one as there would be little commercial application, and developing PCI cards is rare for hobbyists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are plenty of ISA cards available, however; &lt;a href=&quot;http://www.malinov.com/Home/sergeys-projects/isa-fdc-and-uart&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt; is an open hardware design, so you can produce your own if you have the equipment to make PCBs. (It's also worth looking at the designer's list of projects if you have any other similar requirements: he's produced an entire modular PC-XT compatible system based on an ISA backplane, so some of those boards could be &lt;em&gt;very&lt;/em&gt; handy.)&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-01-21T02:26:25.383" LastActivityDate="2018-01-21T02:26:25.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5538" PostTypeId="2" ParentId="5535" CreationDate="2018-01-21T01:00:06.620" Score="17" Body="&lt;p&gt;Following the Shugart standard, selections for 4 drives (DS0..DS3) are available on a single interface. The drives had to be jumpered accordingly. Hardware-wise the PC floppy controller also supports this. But as the original housing only allowed two (full height) drives, the controller thus split the interface onto two (proprietary) connectors: one PCB header for up to two internal drives, and a DB37 for two external drives (separate housing). Each features only two DS signals (DS0/1 internal, DS2/3 external).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To simplify installation, IBM invented the twisted floppy cable, swapping the two select lines between the PCB connectors for the drives. This took away the need for individual jumpered drives. IBM drives were always set to DS1 (*1), and addressing was done via the connector used. In fact, there's another (logical) twist, as the outermost connector is always the 'first' drive. This is due to the termination needed / built in (*2) on (early) 5.25 inch drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nice design for simplifying upgrades, but it complicates more sophisticated installations - like 4 half height drives within the original case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With an original controller it's no problem to have 4 drives. Just cable work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clones with integrated/on-board controller often had two pin headers for floppies, so 4 internal drives could be used (*3). Later again the second connector got often dropped, so more recent machines only supported two drives. You may want to check the manual for your machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, with 3.5 inch drives becoming standard, clone manufacturers invented the 4 connector type cables you mentioned. These are &lt;em&gt;not&lt;/em&gt; meant to support 4 drives, but rather offer the choice to have either for each position. Usually (*4) the connectors are paired in a way making it physically impossible (*5) to add more than one drive for each position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Here is a &lt;a href=&quot;http://www.seasip.info/VintagePC/floppies.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;nice page&lt;/a&gt; showing the development in detail.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - It's not that easy, since IBM did use drives with different labeled selector blocks. With the ones labeled DS0..DS4, DS1 is the right selection, while on drives with a DS1..DS4 labeling, DS2 needs to be selected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Termination is another issue to take care of, at least for 5.25 inch drives. Only the last (&lt;code&gt;A&lt;/code&gt;) drive needs one, while the second &lt;em&gt;must not&lt;/em&gt; have it. It's a resistor array, usually looking like a socketed IC often of yellow/brownish colour, but sometimes also like a SIL package. 3.5 inch drives &lt;em&gt;do not&lt;/em&gt; need to be changed here, as their behaviour is like automatic. It can be added as A or B without changing anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Be careful, some had two pin headers, but each only supporting one drive - basically moving the cable twist onto the motherboard to save on cabling costs by only needing to supply two straight cables with single connectors (and no 5.25 support).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - As so often with Taiwanese creativity, there are cables made without that restriction in mind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Well, almost - never underestimate users with a dedication to add a third drive&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-15T00:03:43.797" LastActivityDate="2020-01-15T00:03:43.797" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5539" PostTypeId="2" ParentId="5524" CreationDate="2018-01-21T01:09:59.647" Score="5" Body="&lt;p&gt;A few years ago I've tried to ressurect a few of my &lt;em&gt;cooler&lt;/em&gt; floppies that had bad sectors and couldn't be formatted on my Amiga 600. My approach was to leave them on my strongest speaker for about a day, then flip, and leave it for another day, then reformat and write. Surprisingly, I've got a few of those fixed that way, but I doubt that leaving a floppy for a short time on a random speaker would do anything to it, not to mention playing music, which will do literally nothing in this case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To really damage a floppy, you would need to hold it literally on the magnet for extended periods of time, just like I did a few years back. This would still only &lt;strong&gt;damage&lt;/strong&gt; the data, not wipe it clean.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to check what really happens with magnetic mediums placed on speakers, a good place to start would be to get a blank audio tape, record some music onto it, leave it on the speaker for a few days, and then play it back. Notice that the sound will be much quieter with (maybe) some more hiss introduced. The hiss will be much more noticeable on silent sections. If you have a stereo player, you'll also be able to notice how one channel is much more quiet than the another.&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2018-01-21T01:09:59.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5540" PostTypeId="2" ParentId="3298" CreationDate="2018-01-21T02:21:01.630" Score="8" Body="&lt;p&gt;There is a port of an old gcc version (2.5.8) and binutils, see &lt;a href=&quot;http://web.archive.org/web/20080210052433/http://www.zip.com.au/~akpm/gsptools.html&quot; rel=&quot;noreferrer&quot;&gt;this archive.org link&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user7763" LastActivityDate="2018-01-21T02:21:01.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5541" PostTypeId="2" ParentId="5443" CreationDate="2018-01-21T03:19:11.273" Score="2" Body="&lt;p&gt;The vertical and horizontal deflections in a CRT are not entirely independent.   There is a 'pincushion' effect that is commonly adjusted&#xA;using a 'pin' or 'pin amp' labeled control, which is usually only accessible with (part of) the case removed.   Misadjustment results&#xA;in pincushion-shape or barrel-shape rendering of a test rectangle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other geometry adjustments are permanent magnets (often stuck on plastic&#xA;posts around the neck of the CRT).  The symptoms of missing or &#xA;disturbed trim magnets are not symmetric like 'pincushion'.&#xA;The steel parts of a monitor can become magnetized, which&#xA;also disturbs the trim, and a 'degauss' circuit will correct that.&#xA;Degaussing can be done with a wand, but many monitors have automatic&#xA;circuitry (every cold-start of the monitor does a degauss), or sometimes&#xA;a pushbutton.   Degaussing with the picture active, you'll see a &#xA;shiver of the image, possibly with odd colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, there are 'color convergence' controls that make red/green/blue&#xA;colors all land together to make a white line.   Readjustment of convergence is required when the picture tube ages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few late-model CRT displays had on-screen menus for some or all&#xA;of these adjustments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A twenty-year-old book on color TV or computer monitors will fill in&#xA;details, but it isn't safe to just open up the machine and poke things.&#xA;Proper readjustment also requires an assortment of odd tools and&#xA;some test-pattern equipment (and/or software).&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2018-01-21T03:19:11.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5542" PostTypeId="2" ParentId="3127" CreationDate="2018-01-21T03:20:52.010" Score="4" Body="&lt;p&gt;The SM124 will be difficult to interface without additional logic (i.e., some A/D converter + FPGA).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the &lt;a href=&quot;http://www.atarimania.com/documents/Atari_SC-1224_Color_Monitor_V2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari SC1224 color monitor&lt;/a&gt; looks identical to the SM124 - at least when turned off - and should accept signal timings similar to PAL or NTSC (15.75 kHz HSync and 60 Hz VSync according to the Atari manual).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, since the 8 bit Ataris only seem to generate composite or S-Video (luma/chroma) output, you will need some way to convert the output signal to RGB, e.g. the &lt;a href=&quot;http://pdf.datasheetcatalog.com/datasheets/228/499937_DS.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motorola TDA3300 TV color processor IC&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerDisplayName="user7763" LastActivityDate="2018-01-21T03:20:52.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5543" PostTypeId="2" ParentId="3127" CreationDate="2018-01-21T07:08:49.313" Score="4" Body="&lt;p&gt;The 130XE outputs &lt;a href=&quot;http://www.atariage.com/forums/uploads/post-119-1053723058_thumb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Composite (CVBS) and S-Video (Y/C)&lt;/a&gt; through the 5-pin DIN connector. Converting this to 640x480 VGA is simple with something like a &lt;a href=&quot;https://hometheaterhifi.com/volume_6_1/dvdoiscan.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;DVDO iScan Plus&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SM124 has a &lt;a href=&quot;http://www.retrocomputing.net/parts/atari/1040STF/docs/connettore_monitor_st.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;71.25 Hz vertical scan rate and 31.5 kHz horizontal scan rate&lt;/a&gt; and outputs 640x400. It cannot handle any other type of signal, &lt;a href=&quot;http://www.atari-forum.com/viewtopic.php?t=25739#p241372&quot; rel=&quot;nofollow noreferrer&quot;&gt;not even standard 640x480@60Hz VGA&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were to process the 640x480@60Hz signal, ignore 80 lines of it and increase the refresh rate to 71.25 Hz, you would likely have tearing or juddering artifacts and some lag from the frame buffer. Also it wouldn't be in color!&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-01-21T07:08:49.313" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5544" PostTypeId="1" CreationDate="2018-01-21T10:52:27.100" Score="11" ViewCount="447" Body="&lt;p&gt;I have a large sample of .WI images I need to convert to e.g. JPEGs, but the format now seems defunct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mimetype is image/wavelet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The compression algorithm was developed by Summus, a US company that also now seems defunct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last CorelDraw support for the format was under 32-bit Windows (see &lt;a href=&quot;https://community.coreldraw.com/talk/coreldraw_graphics_suite_x6/f/corel-photo-paint-x6/33558/is-wi-supported-in-x&quot; rel=&quot;noreferrer&quot;&gt;https://community.coreldraw.com/talk/coreldraw_graphics_suite_x6/f/corel-photo-paint-x6/33558/is-wi-supported-in-x&lt;/a&gt;). If I go down the hardware route I need to be able to make calls to a server via e.g. REST.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think under *nix djvulibre might be able to open the files, but I haven't been able to test this yet. Also IrfanView.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to re-implement the codec myself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone here have any expertise in this area?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apologies if this is not the right forum - is there a better place?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for all help!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an input sample &lt;a href=&quot;http://www.wolfgang-rolke.de/graphics/wavelet.wi&quot; rel=&quot;noreferrer&quot;&gt;http://www.wolfgang-rolke.de/graphics/wavelet.wi&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7766" LastEditorUserId="7766" LastEditDate="2018-01-24T12:36:19.173" LastActivityDate="2019-09-21T09:02:35.417" Title="How to open a CorelDraw WI wavelet-compressed image" Tags="&lt;windows-98&gt;&lt;windows-95&gt;&lt;file-format&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5545" PostTypeId="1" AcceptedAnswerId="5547" CreationDate="2018-01-21T13:38:16.157" Score="3" ViewCount="375" Body="&lt;p&gt;I have a Macintosh Performa 200 and I’m trying to get it working again. It powers on normally and then it brings up the normal Mac OS screen but the mouse and keyboard don't work. Yesterday they were working fine but today the mouse will not move and the keyboard does nothing. I have plugged both directly into the computer but this doesn't help?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kskMw.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kskMw.jpg&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n87qq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n87qq.jpg&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7761" LastEditorUserId="7761" LastEditDate="2018-01-25T18:10:08.703" LastActivityDate="2018-01-25T18:10:08.703" Title="Macintosh Performa 200 Mouse and Keyboard Issue" Tags="&lt;apple-macintosh&gt;&lt;keyboards&gt;&lt;apple&gt;&lt;mouse&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5546" PostTypeId="2" ParentId="5545" CreationDate="2018-01-21T13:42:29.457" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I have plugged both directly into the computer but this doesn't help?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Performa 200 is, AFAIR, a Classic II, thus using ADB. Mouse goes into Keyboard (either side) and the keyboard connects to the ADB plug on the Mac. That's the single, leftmost  DIN plug, right between Audio In (to the left) and External Floppy (to the right).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From your description I assume you have pluged them into Printer and/or Modem which are &lt;em&gt;two&lt;/em&gt; DIN located all the way to the right (between SCSI and Audio Out).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-01-21T13:53:07.187" LastActivityDate="2018-01-21T13:53:07.187" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5547" PostTypeId="2" ParentId="5545" CreationDate="2018-01-21T14:05:09.343" Score="3" Body="&lt;p&gt;The Performa 200 has an ADB fuse soldered to the main board. From &lt;a href=&quot;https://farm4.static.flickr.com/3038/2671378332_759215a53a_b.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this picture of the PCB&lt;/a&gt;, it seems to be F2, located in the upper right corner between the DB19 connector for the external floppy and the 20-pin header for the internal one. This fuse sometimes breaks when ADB devices are plugged into or unplugged from a running system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, as Raffzahn suggested, you might accidentally plugged the keyboard and/or mouse into the Mini-DIN 8 modem or printer ports. This might have caused damage to the connectors or the peripherals.&lt;/p&gt;&#xA;" OwnerDisplayName="user7763" LastActivityDate="2018-01-21T14:05:09.343" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5548" PostTypeId="2" ParentId="5535" CreationDate="2018-01-21T15:13:35.670" Score="6" Body="&lt;p&gt;In addition to the other answers, SCSI floppy drives do exist, although they are fairly uncommon.  These would be usable on even modern systems, as you can get SCSI controller cards for nearly all generations of PC clones.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2018-01-21T15:13:35.670" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5549" PostTypeId="1" CreationDate="2018-01-21T19:27:12.767" Score="3" ViewCount="675" Body="&lt;p&gt;My Panasonic CT-20S12S keeps slowly getting brighter and brighter, and I keep having to take off the back and turn down the SCREEN control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's going on here?&lt;/p&gt;&#xA;" OwnerDisplayName="user7645" LastActivityDate="2018-06-20T04:26:42.493" Title="Weird Brightness Problem On CRT" Tags="&lt;crt-monitor&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5551" PostTypeId="1" AcceptedAnswerId="5552" CreationDate="2018-01-21T22:42:18.207" Score="4" ViewCount="530" Body="&lt;p&gt;Does anyone know of a source for Motorola's MACSBUG 68k monitor source code (which was the basis for the classic Mac debugger with the same name)? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I seem to remember it was available on the old Motorola BBS, but the only related code I could find on a mirror of the BBS are different debuggers (FBUG68K and VUBUG).&lt;/p&gt;&#xA;" OwnerDisplayName="user7763" LastActivityDate="2019-05-13T17:48:07.360" Title="Motorola MACSBUG source code?" Tags="&lt;motorola-68000&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5552" PostTypeId="2" ParentId="5551" CreationDate="2018-01-21T23:14:09.860" Score="6" Body="&lt;p&gt;I'm not sure if a general MACSbug was ever available. AFAIR Motorola did supply it only to OEM. They even had a special manual for OEM manufacturers regarding the adaption of MACSbug I/O functions and adding new commands (like Apple did for &lt;code&gt;ES&lt;/code&gt; (Exit to Shell) and &lt;code&gt;RB&lt;/code&gt; (ReBoot)). Many of them gave the resulting product a name of their choice. Then again, being the micro computer industry of the 70s, they wouldn't have mind an adoption by anyone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example Corvus added it (now spelled &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/corvus/Corvus_Concept/manuals/7100-01387_Macsbug_68000_Debugger_Users_Guide_Mar83.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MACSBUG 68000&lt;/a&gt;) to their &lt;a href=&quot;https://en.wikipedia.org/wiki/Corvus_Systems#Corvus_Concept&quot; rel=&quot;nofollow noreferrer&quot;&gt;Corvus Concept&lt;/a&gt;. Or Dual Systems added it as default monitor (here spelled Macsbug) to their &lt;a href=&quot;ftp://bitsavers.informatik.uni-stuttgart.de/pdf/dualSystems/Dual_CPU_68000_Users_Manual_1982.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;CPU/68000&lt;/a&gt; for the S100. Or Omnibyte who offered MACSbug as OB68KMACS for the &lt;a href=&quot;http://www.bitsavers.org/pdf/omnibyte/OB68K1A_1983.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;OB68K1A Multibus CPU&lt;/a&gt; (*1,2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heck, even Motorola did:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the MEX68KDM (Mororola 68K Design Module) from 1979, where it was originally designed for, it was called &lt;code&gt;MBUG&lt;/code&gt;, while its later (1983?) incarnation with the MEX68KECB (M68K Educational Computer Board) was named &lt;code&gt;Tutor&lt;/code&gt;. The manual included a reference to the now generalized MACSbugname.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So maybe search for either systems software and have a look for the manual.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; The OP &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5551/motorola-macsbug-source-code/5553#5553&quot;&gt;has found&lt;/a&gt; the MEX68KECB directory on Bitsavers including &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/components/motorola/68000/MEX68KECB/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tutor/MACSbug Manuals and Binaries&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - It always amazes me how many various CPUs got glued onto bus systems never ment for them. Like 6502 or 2650 to S100 or NS32k or 68k to Multibus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - They also offered the more powerfull VERSAbug named OB68KVERSA&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-05-13T17:48:07.360" LastActivityDate="2019-05-13T17:48:07.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5553" PostTypeId="2" ParentId="5551" CreationDate="2018-01-21T23:15:49.477" Score="5" Body="&lt;p&gt;Thanks to Raffzahn's comments, I could confirm that TUTOR is in fact an early version of MACSBUG. It's available at &lt;a href=&quot;ftp://164.41.45.4/pub/os/embedded/misc/motorola/m68k/tutor.arc&quot; rel=&quot;noreferrer&quot;&gt;this Motorola BBS mirror ftp site&lt;/a&gt; as well as on &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/components/motorola/68000/MEX68KECB/&quot; rel=&quot;noreferrer&quot;&gt;bitsavers&lt;/a&gt;. There is also &lt;a href=&quot;https://raw.githubusercontent.com/jefftranter/68000/master/tutor/tutor13.s&quot; rel=&quot;noreferrer&quot;&gt;a version that can be assembled with gas&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerDisplayName="user7763" LastEditorDisplayName="user7763" LastEditDate="2018-01-22T00:33:49.893" LastActivityDate="2018-01-22T00:33:49.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5554" PostTypeId="2" ParentId="3298" CreationDate="2018-01-22T07:05:08.077" Score="7" Body="&lt;p&gt;I worked for a company that created a TMS34010 TIGA product in the before times. It was a pretty awful chip, all things considered. Very expensive, relative to competing products, made worse by requiring lots of expensive VRAM memory (for both code and data memory) for decent performance, even though they advertised you could use cheap DRAM to build cheap graphics systems (true in that DRAM == cheap and very slow). Memory bus was 16-bit, so if you were trying to do, say, 8-bit graphics, you could only grab 2 pixels per clock (~150ns-200ns depending on speed step). Math was integer only until the follow-on tms34020. 'IBM Standards Compliant' (e.g. SVGA, 8514/A, XGA) video cards offered more of what customers actually wanted at generally higher performance for far less money.  Our product wasn't a market success.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TI 34010 TIGA C compiler was pretty buggy as I recall; at least I remember the firmware guys complaining a lot. I have the toolchain for Sun-3/Sun-4 on a tape someplace,and someone who will preserve it.  I wasn't aware of a GCC port...congrats again to the GCC guys for producing something that adaptable.  34010 is a strange architecture.  Bit-level address-ability is pretty important to getting the most out of it; I would think that would make a C compiler 'interesting' (though the 8051 folks figured it out, so clearly it's a solved problem).  Compilers aren't my area of expertise, though, so I'll leave that analysis for the experts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, the TMS34010 was everything that the 'experts' thought the market wanted from a graphic chip at the time (highly programmable, general purpose GPU) if they ignored everything that was actually happening at the time (fast, cheap, fixed function graphics primitives...mostly bitblt, line drawing, etc.).  There's a reason TIGA had a really short lifespan.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-01-22T07:05:08.077" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5555" PostTypeId="1" AcceptedAnswerId="5557" CreationDate="2018-01-22T09:28:12.577" Score="19" ViewCount="1194" Body="&lt;p&gt;On the Apple IIgs, the 256K of built-in main memory is divided into two sections: The &quot;fast&quot; RAM, banks 00 and 01, and the &quot;slow&quot; RAM, banks E0 and E1.  CPU access to slow RAM required the CPU to slow to the 1MHz speed of the earlier Apple II models.  (Later models with 1MB on board are similar, just with more fast RAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible to set a soft switch ($C035) to control write shadowing, in which writes to bank 00 and 01 are copied automagically into banks E0 and E1.  This allows the CPU to run at full speed while accessing this memory.  The primary purpose of this was to allow the CPU to write data into the video buffer, which was in slow RAM, without slowing down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But my question is how did this work?  Obviously, something is copying this data, but how?  The FPI cannot write the data to slow RAM itself, as it has no direct connection.  Only the Mega II can write to slow RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on looking at the &lt;a href=&quot;https://apple2.gs/downloads/Apple_IIgs_256K_Schematic.pdf&quot; rel=&quot;noreferrer&quot;&gt;schematic&lt;/a&gt;, the Mega II chip has access to the slow RAM - but it doesn't have access to the PH2 2.8MHz clock used on the CPU buses when in high speed mode.  The FPI, on the other hand, generates the PH2 clock and also can see the CPU buses, but it doesn't connect to the slow RAM, and the only way it seems to be able to pass data to the Mega II is via the main buses which are shared with the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The FPI and Mega II share only one clock: The 14Mhz clock which was the master clock in older models.  At 14MHz, the FPI could shift the address and data to the Mega II one bit at a time and still keep up with the CPU, but there doesn't seem to be any signal line suited for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having the FPI sneak data to the Mega II when the CPU isn't looking turns out to have the same problems as having the Mega II copy the writes in real time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing I can think of is that the FPI disconnects the CPU from the bus long enough to send this data over to the Mega II.  Normally you'd slow to 1MHz to send data to the Mega II this way - which would be unfortunate because it would pretty much defeat the whole point of the write shadowing.  This seems unlikely because it seems like it would perform worse than not doing it at all, but maybe they have a way to do it without totally killing performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I am out of ideas.  Where's the magic?&lt;/p&gt;&#xA;" OwnerUserId="7775" LastActivityDate="2020-07-01T19:03:46.137" Title="Apple IIgs: Hardware implementation of RAM shadowing" Tags="&lt;apple-iigs&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5556" PostTypeId="2" ParentId="5524" CreationDate="2018-01-22T10:08:25.750" Score="2" Body="&lt;p&gt;A loudspeaker has two magnets interacting: One big, usually permanent one (two-electromagnet seems to have gone out of fashion in prewar times), and an electromagnet (the voice coil). The permanent magnet is what you would normally worry about, but the field emanating from it is relatively independent of whether the loudspeaker is silent or not - you would need to physically move the floppy closer to the magnet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The electromagnet's strength is indeed dependent on sound input - how much of that magnetism actually leaves the loudspeaker is extremely dependent on the actual loudspeaker design at hand. Conceivably, fields from both magnets adding up during a particularly loud sound event could overcome the coercivity  of the floppy drive and indeed cause spurious erasure - all very dependent, again, on the exact loudspeaker. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to get an idea about magnetic fields in front of the loudspeaker - just find an old fashioned compass, it can tell you quite a bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to be sure to AVOID such damage, check what the loudspeaker manufacturer has to say about safe distances for ATM cards.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-01-22T10:08:25.750" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5557" PostTypeId="2" ParentId="5555" CreationDate="2018-01-22T11:35:02.367" Score="17" Body="&lt;p&gt;That's an interesting and especially well prepared question. Thank you.&lt;/p&gt;&#xA;&lt;p&gt;AFAIR your second assumption is right. &lt;strong&gt;When shadowing is enabled for a region&lt;/strong&gt; (see below) &lt;strong&gt;the CPU gets synchronized and slowed down to 1 MHz during the writing cycle for a clock period.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This isn't as bad as it seems, since 'useful' RAM access  (i.e. screen writing) is on average less than 10% of all clocks even in the tightest of all loops (*1). And the whole idea of shadowing is to restrict this slow down to just a single write cycle (on the 1 MHz side). Reading the same location (or any other 'on-screen' location) in 00/01 again isn't slowed down.&lt;/p&gt;&#xA;&lt;p&gt;In fact, as long as it's only about writing to a screen region, direct access to E0/E1 for the same purpose isn't any slower at all. The CPU also gets slowed down to 1 MHz only for the access cycle (*2). But in this case, reading would also be slowed down. And with placing a program in E0/E1 the machine will effectively slow down to (a tiny bit more than) 1 MHz.&lt;/p&gt;&#xA;&lt;p&gt;With shadowing, only writes do slow down, while reads are satisfied from fast memory (00/01). It's about squeezing out the very last bit of speed when slow memory is involved. For all practical purpose the effective speed of a program using slow memory for screen data lingers between 2.0 and 2.8 MHz (*3) depending on the code structure and timing(*2). Shadow memory operation pushes it way toward the upper boundary, making the use of slow memory not a real burden (*4).&lt;/p&gt;&#xA;&lt;p&gt;Shadowing is really only meant to speed up screen access. For everything else, needed for Apple II compatibility, direct access to E0/E1 is the only way. Shadowing is only available to 6 regions. They are partly overlapping and controlled via bits at E0/C035:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0 - 0400...07FF - Text1&#xA;1 - 2000...3FFF - HGR1&#xA;2 - 4000...5FFF - HGR2&#xA;3 - 2000...9FFF - Super High-res&#xA;4 - 2000...3FFF - Double High-res ($01/2000...)&#xA;5 - Unused&#xA;6 - C000...DFFF - Switches/Slot Memory&#xA;7 - Speed indicator&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Shadowing will only be done for the region enabled. Thus only data written after the corresponding switch is on will reach E0/E1.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion: Just switch it on and pump your data to the screen using 00/01.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Having said that, there might still be need to improve even upon shadowing. For example more sophisticated games do not just copy data to the screen, but issue more complex operations needing to manipulate data more than once before it is displayed (aka bit-blitting) . Also double buffering might be a good idea to use all the time for picture generation. &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/72/eric-shepherd&quot;&gt;Sheppy&lt;/a&gt; (*5) has written a quite &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/52/how-do-i-use-shadowed-memory-to-render-super-hi-res-quickly&quot;&gt;awesome answer&lt;/a&gt; about &lt;em&gt;how to use shadowing and CPU tricks to implement double buffering and fastest possible screen copy by using the effects of shadow memory&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Just grab a sheet of paper and count execution cycles according to what the access is and in which region.&lt;/p&gt;&#xA;&lt;p&gt;*2 - It's a bit more complex, as both memory systems are not simply synchronized in a way that the fast clock is a fraction less multiple of the slow clock. Thus there might be an additional waiting period of up to 4/5 of a 1 MHz cycle to synchronize. In worst case this means almost doubling the penalty. Sheppy mentions this in another related questions &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/228/inserting-nops-to-improve-iigs-shadow-copy-performance/286#286&quot;&gt;answer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Ofc, ignoring the optional stupidity to put code there.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Don't get fooled by horror stories told by &amp;quot;&lt;em&gt;experts&lt;/em&gt;&amp;quot;. Do the math (*1) yourself with the logic explained in mind.&lt;/p&gt;&#xA;&lt;p&gt;*5 - One of the demi-gods of Apple II programming and still around.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-01T19:03:46.137" LastActivityDate="2020-07-01T19:03:46.137" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="5558" PostTypeId="1" AcceptedAnswerId="5560" CreationDate="2018-01-22T12:43:52.313" Score="4" ViewCount="469" Body="&lt;p&gt;I received my Apple II Plus today from eBay. I powered up my computer without adding anything into it (it didn’t came with any card either). It started up in the ROM Applesoft BASIC just fine. However, I found one problem on this machine. All modifier keys doesn’t seems to work. For example, I want to enter the quotation mark, it should be shift+2 on this machine, but both shift keys don’t work (2 works, it writes 2 on the screen just as if the Shift isn’t been pressed). Control+G should create a beep, but the control key doesn’t seems to work either as it just enters a G on the screen. The speaker definitely works as the power up sound do work. Reset and esc doesn’t do anything either. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I’m thinking it might be a keyboard problem, but it is weird that it’s only the modifier keys that don’t work though. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where should I look next?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. the return and repeat key does work on this machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I found a switch in the outer side of the Keyboard circuit board labeled S1. After flipping that switch it appears that the reset key started working. Not sure what that do though, might be related to this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; I forgot to mention that the power LED also doesn't work on this machine. After taking apart the keyboard, I found out that the 3 keys that don't work are on the same wire as well as the power LED, maybe something broke there?&lt;/p&gt;&#xA;" OwnerUserId="4906" LastEditorUserId="6659" LastEditDate="2019-06-20T20:54:37.683" LastActivityDate="2019-06-20T20:54:37.683" Title="Apple II Plus modifier key doesn’t work" Tags="&lt;apple-ii&gt;&lt;keyboards&gt;" AnswerCount="1" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5559" PostTypeId="2" ParentId="5465" CreationDate="2018-01-22T13:16:32.863" Score="5" Body="&lt;p&gt;What you really want is SpinRite by Steve Gibson (Gibson Research Corporation), which reads the surface of the disk repeatedly, until it derives the data from a failing byte structure, giving a very high degree of data integrity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typical software for drive recovery only makes a single pass, but SpinRite is user-configurable to run a large number of repeated attempts on a single sector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quite often the magnetic properties of a single byte survive, but at too low a level for traditional software to reliably detect it with a single pass on the sector, but Spinrite uses a special algorithm which, in my experience, is particularly effective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first version was released in 1987. The final stable release for DOS/FAT filesystems was version 6.0, released June 7th 2004.&lt;/p&gt;&#xA;" OwnerUserId="7778" LastActivityDate="2018-01-22T13:16:32.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5560" PostTypeId="2" ParentId="5558" CreationDate="2018-01-22T13:25:14.310" Score="6" Body="&lt;p&gt;Since the Apple II/II+ keyboard is based on a hardware encoder (AY-5-3600 (*1)), thus handling of &lt;code&gt;Shift&lt;/code&gt; and &lt;code&gt;CTRL&lt;/code&gt; is done by this chip. So any failure to recognize either modifier is most likely due the encoder or the keys themself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said that, there is a possible &lt;em&gt;single&lt;/em&gt; point of failure for both modifiers: A 7400 on the little board below the keyboard. Two of its gates are used to invert and discriminate the modifiers, as they are not part of the matrix (like with a PC keyboard), but seperate inputs to the encoder. So if that IC is bad - or just out of place, both keys might work as if always enabled, or never - depending on the failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First iteration (*2) here would be checking in- and output side of the IC at position U2 (*3). Pin #8 is the output signal for &lt;code&gt;Shift&lt;/code&gt; and should go high when pressed, while pin #9 (shortened with #10) is the input from the key switch(es). Normaly at +5V, but going down to (almost) 0V when either &lt;code&gt;Shift&lt;/code&gt; is pressed. Vor &lt;code&gt;CRTL&lt;/code&gt; pin #11 is  output (going high when pressed) and #12/#13 is input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when the signal seams fine after the gate, then the keyboard encoder might be dead. Bad luck as the are not realy common anymore. If not working there, but fine before the gate, it's the gate, and if not working there, it must be the keys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is another possible single point of failure, the connector between the two boards (PCB with keys and interface), but to affect all modifiers it would involve two connection pins (#3 &amp;amp; #24) broken on different ends of the SIL connector And at the same time no other damaged. Rather hard to imagine - and I can't see any hint on your picture.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - That's for the more common two pice keyboard like you have. If it's a real old II without a little secondary board, it's a different chip. MM-something, I don't remember.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 -  AFAIR it's direct soldered, without a socket. If it's socketed, the very first step would be just pressing it back into - giving every socketed IC a firm wellcome (press) is always a great idea when revitalizing an old machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - just checked the schematics.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-01-22T13:47:04.540" LastActivityDate="2018-01-22T13:47:04.540" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5561" PostTypeId="2" ParentId="5533" CreationDate="2018-01-23T03:12:35.703" Score="3" Body="&lt;p&gt;Seems like the answer is NO. While others here have helpfully suggested workarounds to try, the answer as to whether the piece of hardware I asked about exists in a single piece is NO. &lt;/p&gt;&#xA;" OwnerUserId="7758" LastActivityDate="2018-01-23T03:12:35.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5562" PostTypeId="2" ParentId="5520" CreationDate="2018-01-23T16:55:43.313" Score="2" Body="&lt;p&gt;Blitz Basic II on the Amiga supported inline assembler. More commonly you would use an assembler function. It was a proper assembler, no need to use data statements or pokes.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-01-23T16:55:43.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5563" PostTypeId="1" CreationDate="2018-01-24T11:58:46.720" Score="1" ViewCount="1379" Body="&lt;p&gt;Amiga 500+ does not start up. It has been offline for a considerable amount of time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machine powers up but does not move from that point.&lt;br&gt;&#xA;I have inserted the workbench disk.&lt;br&gt;&#xA;Can anyone advise the best way to connect to a TV set&lt;/p&gt;&#xA;" OwnerUserId="7783" LastEditorUserId="11916" LastEditDate="2019-04-07T16:44:44.930" LastActivityDate="2019-04-07T16:44:44.930" Title="Amiga 500+ does not start up" Tags="&lt;amiga&gt;&lt;amiga-500&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2018-01-24T19:37:17.830" ContentLicense="CC BY-SA 3.0" />
  <row Id="5564" PostTypeId="2" ParentId="5563" CreationDate="2018-01-24T13:34:44.323" Score="4" Body="&lt;p&gt;When you switch on an Amiga, you should expect to see the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The power light will illuminate, slightly dimmed.&lt;/li&gt;&#xA;&lt;li&gt;About half a second later, the power light will brighten.&lt;/li&gt;&#xA;&lt;li&gt;Usually 3-4 seconds later (but could be up to a minute for Amiga models with HD controllers), the floppy drive will start to make noises.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For this check to work, you need only plug in the power supply. There's no need to plug in anything else, not even a TV or monitor - in fact, unplugging everything is recommended in case it's a peripheral that is actually faulty and preventing the Amiga from starting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do not get any power light, then it is likely that the PSU has failed, but could also indicate a fault with the Amiga mainboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you get a dim power light, but it does not brighten a moment later, then you have a good PSU, but there is a fault with the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you get a dim and then bright power light, then you likely have only a minor fault - perhaps the floppy drive has seized up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may also find &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/863/ive-taken-my-amiga-computer-out-of-storage-after-several-years-and-it-doesnt-w&quot;&gt;this question and answer&lt;/a&gt; useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately because you have a 500 Plus which has not been used for a long time, then it is very likely that you have a damaged computer. The 500 Plus has an onboard alkaline battery which leaks as it ages. It is very likely that this battery has leaked corrosive alkaline over the mainboard and caused damage. Such damage is often repairable by a retro computer specialist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if you decide that you do not want to repair the computer, I would urge you to not throw it away. Some spare parts for Amigas are in short supply. Even if the mainboard has been extensively damaged by battery alkaline, there will still be many salvageable parts that an Amiga specialist would find useful.&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2018-01-24T13:34:44.323" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5565" PostTypeId="1" AcceptedAnswerId="5567" CreationDate="2018-01-24T18:06:46.350" Score="14" ViewCount="2274" Body="&lt;p&gt;I bought an Amiga 1000 second-hand many years ago for $50. In this deal I received a spare motherboard as the one installed in the chassis was upgraded; most notably, it had KickStart on ROM and thus didn't require a disk at power-on (other than the Workbench, naturally).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has been a while since I've looked at this machine, but before I go digging it out and disassembling it to see, I'm curious about this ROM modification. I know about the Phoenix motherboard, but I don't think that is what I have hiding in my basement shelves. Was a ROM-based A1000 motherboard a factory or aftermarket modification? Was this common or do I have some unusual specimen?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last I turned on the machine (probably 2 years ago), it did work but the floppy drive needs some maintenance so I put it away for a future date. As far as opening it up to see what is inside, I haven't done that for probably 20 years.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="11916" LastEditDate="2019-04-17T13:38:25.260" LastActivityDate="2020-02-24T15:10:29.507" Title="What options were available for having an Amiga 1000 not be dependent on a KickStart disk?" Tags="&lt;amiga&gt;&lt;amiga-kickstart&gt;&lt;amiga-1000&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5566" PostTypeId="2" ParentId="5565" CreationDate="2018-01-24T18:31:55.653" Score="12" Body="&lt;p&gt;TL;DR You will need to open up the machine to see exactly what kind of Kickstart ROM upgrade is installed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you are probably aware, the disk-based Kickstart boot floppy was not part of the original Amiga A1000 design. Rather, it was a last minute response to the OS still being un-polished and buggy as Commodore management rushed the machine to market. Because of this, the A1000 motherboard actually has blanks to accommodate Kickstart ROM's, and this functionality is superseded with the addition of the simplified boot ROMs and Kickstart RAM daughterboard, which together load Kickstart in the Writable Control Store (WCS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that background, it is unsurprising that once the OS became pretty stable with Release 1.2, there were kits available for the A1000 that would undo the WCS &quot;hack&quot;. Basically, the Kickstart WCS RAM would be reclaimed as usable system RAM, and the simplified boot ROMS would be replaced with actually Kickstart ROMs. This was a relatively complicated change typically involving desoldering some chips for replacement and adding additional ROM chips. One example early product like this was the &lt;a href=&quot;http://amiga.resource.cx/exp/eliminator&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kickstart Eliminator&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to the difficulty of the above upgrade, the other early approach was a plug-in card for the Amiga's side expansion connector that provided Kickstart in ROM. Indeed, this is still a popular way to get an A1000 booting without floppies, and is replicated in more modern hardware in the &lt;a href=&quot;http://wiki.icomp.de/wiki/ACA500&quot; rel=&quot;nofollow noreferrer&quot;&gt;ACA500&lt;/a&gt;, which works with the A1000 when flipped over.†&lt;/p&gt;&#xA;&#xA;&lt;p&gt;† Common usage is to flip the ACA500 over, not the Amiga:)&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-02-24T15:10:29.507" LastActivityDate="2020-02-24T15:10:29.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5567" PostTypeId="2" ParentId="5565" CreationDate="2018-01-24T20:12:28.893" Score="7" Body="&lt;p&gt;Here are some options for booting an Amiga 1000 without a physical Kickstart floppy disk:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Kickstart eliminators:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CMI &lt;a href=&quot;http://amiga.resource.cx/exp/eliminator&quot; rel=&quot;noreferrer&quot;&gt;Kickstart Eliminator&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;DKB &lt;a href=&quot;http://amiga.resource.cx/exp/kwikstart&quot; rel=&quot;noreferrer&quot;&gt;KwikStart&lt;/a&gt; and &lt;a href=&quot;http://amiga.resource.cx/exp/kwikstart2&quot; rel=&quot;noreferrer&quot;&gt;KwikStart II&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Kupke &lt;a href=&quot;http://amiga.resource.cx/exp/kickstartmodul&quot; rel=&quot;noreferrer&quot;&gt;Kickstart Modul&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Rex Datentechnik &lt;a href=&quot;http://amiga.resource.cx/exp/rex9234&quot; rel=&quot;noreferrer&quot;&gt;Rex Kickstart Switcher&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Comspec Communications &lt;a href=&quot;http://amiga.resource.cx/exp/arm1000&quot; rel=&quot;noreferrer&quot;&gt;ARM-1000&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Accelerators with ROM sockets or flash memory:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CMI &lt;a href=&quot;http://amiga.resource.cx/exp/pa1000&quot; rel=&quot;noreferrer&quot;&gt;PAMC-1000&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Some users report success with the Individual Computers &lt;a href=&quot;https://icomp.de/shop-icomp/en/produkt-details/product/ACA500plus.html&quot; rel=&quot;noreferrer&quot;&gt;ACA500plus&lt;/a&gt; on an Amiga 1000. (Remember to install it &lt;a href=&quot;https://i.ytimg.com/vi/vbeRvkjs1og/maxresdefault.jpg&quot; rel=&quot;noreferrer&quot;&gt;backwards&lt;/a&gt;! (The CF slots should face the rear of the machine.))&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Replacement motherboards with ROM sockets:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Phoenix Microtechnologies &lt;a href=&quot;http://amiga.resource.cx/exp/phoenix&quot; rel=&quot;noreferrer&quot;&gt;Phoenix Board&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Floppy emulators (boot Kickstart from SD card or USB):&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HxC&lt;/li&gt;&#xA;&lt;li&gt;Gotek&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-01-24T21:49:55.367" LastActivityDate="2018-01-24T21:49:55.367" CommentCount="1" CommunityOwnedDate="2019-08-26T05:12:17.330" ContentLicense="CC BY-SA 3.0" />
  <row Id="5568" PostTypeId="1" AcceptedAnswerId="5569" CreationDate="2018-01-24T20:50:28.567" Score="8" ViewCount="837" Body="&lt;p&gt;I have an Amiga 1200 with an SD card and Classic WB installed. I have four drives DH0, DH1, DH2, DH3, when I start the machine with workbench it mounts all devices. If if start the machine using skip startup sequence then only DH0, DH1 and DH2 are mounted. How could I skip DH1 and DH2 from being auto mounted and how could I make DH3 be auto mounted?&lt;/p&gt;&#xA;" OwnerUserId="7777" LastEditorUserId="11916" LastEditDate="2020-01-05T13:16:00.443" LastActivityDate="2020-01-05T13:16:00.443" Title="How do specify drives to mount when Amiga 1200 starts up" Tags="&lt;amiga&gt;&lt;amiga-1200&gt;&lt;shell&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5569" PostTypeId="2" ParentId="5568" CreationDate="2018-01-24T23:17:04.473" Score="7" Body="&lt;p&gt;Each partition on an Amiga hard drive has settings that determine whether it is bootable and whether it should be auto-mounted. It sounds like your DH3 partition is not set for auto-mounting, and the other 3 partitions are set for auto-mounting. Furthermore, you have a &quot;Mount&quot; command within your boot drive's S/Startup-Sequence that is causing DH3 to be mounted for a normal boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My recommendation would be to run HDToolBox from Workbench (probably in &quot;Tools&quot;) to confirm the settings for auto-mounting on the 4 partitions. If you want, you can set only DH0 and DH3 to be auto-mount. Then, you could use Mount commands to mount DH1 and DH2 as needed.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-01-24T23:17:04.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5570" PostTypeId="1" AcceptedAnswerId="5571" CreationDate="2018-01-25T02:58:37.560" Score="8" ViewCount="2715" Body="&lt;p&gt;Context: I'm running an original MS-DOS.  I suspect the hard disk is failing, but don't want to shut it off for fear of not being able to get it started again if I can't swap the hard drive into another computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to come up with some information about the hard drive - particularly the connection interface used to plug it in, so I can know if I can transfer the hard drive into another newer computer and transfer data off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any commands in MS-DOS I can run to figure this out?  (Running at least version 3.3, not sure of exact number.)&lt;/p&gt;&#xA;" OwnerUserId="3341" LastActivityDate="2018-06-20T06:27:00.463" Title="How do you find information about your hard drive in MS-DOS?" Tags="&lt;hardware&gt;&lt;ms-dos&gt;&lt;hard-disk&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5571" PostTypeId="2" ParentId="5570" CreationDate="2018-01-25T07:50:26.377" Score="6" Body="&lt;p&gt;I would:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;create bootable floppy&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will make sure you got the correct system files in case of failure. Just to be sure do at least 2 floppies like this. IIRC it was done like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FORMAT A: /S&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to be sure check the &lt;code&gt;FORMAT.exe /?&lt;/code&gt; help page (not sure it uses &lt;code&gt;/?&lt;/code&gt; &lt;code&gt;/h&lt;/code&gt; or &lt;code&gt;/help&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do not forget to copy to your floppy also some MS-DOS commands like &lt;code&gt;FDISK,FORMAT&lt;/code&gt; in case you would need to reformat new HDD from scratch.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;copy your HDD data and system files somewhere&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure what options you got (Floppies are usually not a good idea for this). You can use &lt;strong&gt;COM&lt;/strong&gt; or &lt;strong&gt;LPT&lt;/strong&gt; to transfer your data to another &lt;strong&gt;PC&lt;/strong&gt; by using &lt;strong&gt;FX&lt;/strong&gt; (does not require restart) or &lt;strong&gt;laplink/interlink&lt;/strong&gt; for more info see:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4800/6868&quot;&gt;How can I copy files from a Compaq Deskpro?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now in case your drive will fail you got all you need to restore your computer with another drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Easiest of coarse is to copy to another drive but that requires turning off ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are utilities like &lt;code&gt;GHOST&lt;/code&gt; for this too. I do not know any other &lt;strong&gt;LAN&lt;/strong&gt; utility for this but &lt;strong&gt;LAN&lt;/strong&gt; under &lt;strong&gt;MS-DOS&lt;/strong&gt; is tricky as you need proper drivers (usually &lt;strong&gt;IPX&lt;/strong&gt;).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;check your HDD (while still running)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;strong&gt;MS-DOS&lt;/strong&gt; you can type:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;c:&#xA;dir&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;that will print info about current directory at volume &lt;code&gt;C&lt;/code&gt; and how much free space you got. With knowing total capacity (from drive number) you can estimate how much data you got.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During startup the BIOS usually prints a table of detected devices present like: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qbPN7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qbPN7.png&quot; alt=&quot;startup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you see something like &lt;strong&gt;IDE,ATA&lt;/strong&gt; or &lt;strong&gt;ATAPI&lt;/strong&gt; in there there is high chance your drive is &lt;strong&gt;PATA&lt;/strong&gt; which is the best as they are still available (even I got a pile of them) and there are still reductions &lt;strong&gt;SATA/PATA&lt;/strong&gt; so you can use even new drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you see &lt;strong&gt;SCSI&lt;/strong&gt; then you are most likely in trouble as those drives are not very common (they where used in servers and was designed for &lt;strong&gt;24/7&lt;/strong&gt; work so switching them on/off is much more risky). But I saw also &lt;strong&gt;SCSI&lt;/strong&gt; printers and scanners so it does not necessary mean you got &lt;strong&gt;SCSI HDD&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also &lt;strong&gt;MFM&lt;/strong&gt; discs out there. The biggest capacity I saw was ~ 40 MByte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To check your &lt;strong&gt;HDD&lt;/strong&gt; integrity you could use &lt;strong&gt;HDD&lt;/strong&gt; utility from drive manufactor. The &lt;strong&gt;really old&lt;/strong&gt; ones can be even reformatted by low level (not in the &lt;strong&gt;BIOS&lt;/strong&gt; !!!) but that usually worked on drives up to 20 MByte. The newer &lt;strong&gt;ATA&lt;/strong&gt; drives could not be reformatted at all or could be damaged by it permanently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also utilities like &lt;strong&gt;PQ magic&lt;/strong&gt; (PartitionMagic), &lt;strong&gt;NDD&lt;/strong&gt; (Norton disc doctor) which can check your drive logicaly).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To detect what drive you got go to &lt;strong&gt;BIOS&lt;/strong&gt; (restart and then [del] , [F2] , [F8] or whatever) and look for Drives there:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lMsMF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lMsMF.png&quot; alt=&quot;BIOS drives&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There you should see manufactor and drive number. From that you can google datasheet for that drive and look which interface it got.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;check your drive(while turned off and opened)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;simply look for the &lt;strong&gt;HDD&lt;/strong&gt; and take a look what cables it is connected with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For old drives is usually 4 pin &lt;strong&gt;MOLEX&lt;/strong&gt; connector used for power (&lt;strong&gt;+5V,GND,GND,+12V&lt;/strong&gt;). the rest depends on the interface:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;PATA&lt;/strong&gt; uses single 40 or 80 pin wide cable.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;SATA&lt;/strong&gt; uses thin 7 pin cable (highly unlikely for MS-DOS machine)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;SCSI&lt;/strong&gt; I did not came to contact with such drives but devices have 50 or 68 pins singe cable usually connected by Centornix cable (like LPT but wider) but there are more types of connectors.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MFM&lt;/strong&gt; uses two cables 20 and 34 (like &lt;strong&gt;FDD&lt;/strong&gt; cable) pins so if you see two wide cables you can be sure it is &lt;strong&gt;MFM&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On some newer or repassed &lt;strong&gt;MS-DOS&lt;/strong&gt; machines are sometimes &lt;strong&gt;SSD PATA&lt;/strong&gt; drives used in form of &lt;strong&gt;CF&lt;/strong&gt; Flash card with &lt;strong&gt;IDE/ATA&lt;/strong&gt; interface/reduction (the &lt;strong&gt;CF&lt;/strong&gt; uses the same &lt;strong&gt;IDE/ATA&lt;/strong&gt; interface as &lt;strong&gt;PATA HDD&lt;/strong&gt;s so the drive is just &lt;strong&gt;PCB&lt;/strong&gt; with 40pin &lt;strong&gt;ATA&lt;/strong&gt; connector 4pin &lt;strong&gt;MOLEX&lt;/strong&gt; one jumper 2 resistor arrays and single capacitor). I got one 512 MByte from old 486 machine given to me as spare parts once.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;new HDD&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of fail you can use different drive. &lt;strong&gt;PATA&lt;/strong&gt; is your best choice as they are still available. In case you do not have &lt;strong&gt;PATA&lt;/strong&gt; interface then you need also that (they where very common as small &lt;strong&gt;ISA&lt;/strong&gt; card with &lt;strong&gt;2xCOM 1xLPT 1xGAME 1xFDD 2xPATA&lt;/strong&gt;) so they should be easily available too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now boot from your floppy. Then type:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FDISK&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Create partitions (do not forget to make it active) and FAT you need. After exit restart, boot from floppy again and type:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FORMAT C: /S&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now you are bootable from HDD again... now just transfere backuped files back to new HDD (replicate original folder structure) but DO NOT OVERWRITE SYSTEM FILES !!! (except &lt;a href=&quot;https://stackoverflow.com/a/46521076/2521214&quot;&gt;&lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; and &lt;code&gt;CONFIG.SYS&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While using newer drives beware that there are &lt;strong&gt;OS, BIOS&lt;/strong&gt; and &lt;strong&gt;FAT&lt;/strong&gt; capacity boundaries (IIRC: 528MB,8GB,32GB,~90GB,2TB) and if you want to use higher capacity than your platform support do not forget to use &lt;strong&gt;LBA&lt;/strong&gt; in &lt;strong&gt;BIOS&lt;/strong&gt; and install driver like &lt;strong&gt;EZ drive&lt;/strong&gt; before use and format with compatible File System (&lt;strong&gt;FAT16,FAT32&lt;/strong&gt;...) but that depends also on the &lt;strong&gt;MS-DOS&lt;/strong&gt; version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some &lt;strong&gt;PATA/IDE&lt;/strong&gt; drives has also jumper to set the drive for specific boundary limit (like 32GB) rendering the rest of drive unusable but safe to use in such platforms as native drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case you handle boundaries wrongly any write access above that boundary usually overwrites &lt;strong&gt;FAT&lt;/strong&gt; table rendering your &lt;strong&gt;FS&lt;/strong&gt; unusable. To be more safe I usually create 2 partitions and have all the important stuff on the second one. So when this happens it overwrites just the &lt;strong&gt;C&lt;/strong&gt; volume where only system is ... which I got backupped on &lt;code&gt;D&lt;/code&gt; so I just boot from floppy &lt;code&gt;FDISK&lt;/code&gt; and &lt;code&gt;FORMAT C: /S&lt;/code&gt; copy backup back to &lt;code&gt;C&lt;/code&gt; and Can be workable again without loss of data... Sometimes &lt;strong&gt;PQ magic&lt;/strong&gt; alone helps restoring drive after this... I think the last version I used under &lt;strong&gt;MS-DOS&lt;/strong&gt; was &lt;strong&gt;PQ magic 8.0&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-06-20T06:27:00.463" LastActivityDate="2018-06-20T06:27:00.463" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="5572" PostTypeId="2" ParentId="5570" CreationDate="2018-01-25T13:39:40.920" Score="5" Body="&lt;p&gt;In addition to the options given by @Spektre, here are a couple of other things that you can try.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;If you have MS-DOS 6.x/Windows 3.x or higher&lt;/strong&gt;, you should have &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Diagnostics&quot; rel=&quot;noreferrer&quot;&gt;MSD (Microsoft Diagnostics)&lt;/a&gt; available, which will give you an overview of your computer's configuration. It won't help you determine the disk interface, but it will tell you the BIOS date and hard drive capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;If you do not have MSD.EXE available&lt;/strong&gt;, then you can get a rough idea of the age of the system by using &lt;code&gt;debug&lt;/code&gt; to &lt;a href=&quot;http://stanislavs.org/helppc/bios_data_area.html&quot; rel=&quot;noreferrer&quot;&gt;show the BIOS date&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C:\&amp;gt;debug&#xA;- dffff:5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You should get the date of the BIOS program, which is generally around when the computer was built. Some manufacturers didn't bother to set this (or they used a bogus value), but it's generally correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your computer is a consumer-class system and was made in the 1990's or later, chances are very good that the hard drive is IDE: ST-506 was essentially obsolete by the late '80s, and SCSI was more of a server option because of the cost. As well, if your hard drive is more that 80MB it's likely IDE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you're only worried about preserving data, just copy the important files to floppy disks: it's likely the only transfer mechanism that you have right now unless you invested in a null-modem cable, and you don't have to turn off the computer to use it. Most files should fit with no issues, but you may want to consider using an archiving or backup system to reduce the number of floppies that you need (most archives support spanning, which is helpful if you have files that don't fit!)&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2018-01-25T13:39:40.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5573" PostTypeId="2" ParentId="5570" CreationDate="2018-01-25T14:38:34.527" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;particularly the connection interface used to plug it in&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not possible, this is all hidden behind the abstraction layer the BIOS provides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And even testing the controller type won't help much, the IDE controller is simply a MFM controller built into the drive instead of an ISA card. To an old computer, they look exactly the same, the IDE port was just a different connector ISA slot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could do a &lt;code&gt;FDISK /STATUS&lt;/code&gt; to find out about the disk, then make a lucky guess from its size what kind of disk it may be.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2018-01-25T14:38:34.527" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5575" PostTypeId="2" ParentId="5533" CreationDate="2018-01-25T21:43:58.680" Score="5" Body="&lt;p&gt;There's no way a USB anything can transparently emulate a floppy drive without a driver being preinstalled.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The traditional PC floppy drive was an ISA device and appeared on specific I/O ports (0x3F0 to 0x3F6 IIRC).  Reading and writing to these ports was how you talked to the floppy drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;USB peripherals talk to a USB controller, but do not otherwise have a connection to the system bus.  So they cannot appear at the x86 I/O addresses where something expecting a traditional floppy would be trying to read/write.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;USB keyboards and mice look like PS/2 device to DOS and BIOS by a sleight of hand called &quot;System Management Mode&quot; - unfortunately this is part of BIOS/UEFI firmware and not easily/publicly available to operating systems to customize.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be possible for a device or  software to hook into BIOS routines that read/write to the floppy, but by the time you get to that prompt in the Windows XP installer, Windows is already running and not using the BIOS to read/write to devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Really doing this would at least require a direct connection to the ISA or PCI/PCI-E bus.  And many motherboard chipsets already have a Super I/O chip or equivalent that acts as a floppy controller, and already appears in those locations.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The HxC devices mentioned by @tofro are probably what you want.  Search for &quot;cf card floppy emulator.&quot;&lt;/p&gt;&#xA;" OwnerUserId="746" LastActivityDate="2018-01-25T21:43:58.680" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5576" PostTypeId="1" AcceptedAnswerId="5577" CreationDate="2018-01-26T01:02:37.627" Score="9" ViewCount="289" Body="&lt;p&gt;Recently I noticed a strange behavior when editing startup-sequence with &lt;code&gt;ed&lt;/code&gt;. Unless I call &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;protect startup-sequence rwed &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;before editing it, &lt;code&gt;ed&lt;/code&gt; says unable to write the file. Saving the file removes the &lt;code&gt;d&lt;/code&gt; and &lt;code&gt;e&lt;/code&gt; flag, and I am unable to edit the file again unless I call the above command.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I understand neither &lt;code&gt;d&lt;/code&gt; nor &lt;code&gt;e&lt;/code&gt; should be required for editing. Why is this?&lt;/p&gt;&#xA;" OwnerUserId="7777" LastEditorUserId="11916" LastEditDate="2020-03-16T12:39:53.707" LastActivityDate="2020-03-16T12:39:53.707" Title="Amiga ed removes flags" Tags="&lt;amiga&gt;&lt;amiga-1200&gt;&lt;shell&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5577" PostTypeId="2" ParentId="5576" CreationDate="2018-01-26T02:41:40.943" Score="9" Body="&lt;p&gt;I can reproduce the same behavior on my A2500 with Workbench 2.1 and using the built-in AmigaDOS &quot;Ed&quot; command v2.00. The critical bit is the Delete (&quot;d&quot;) protection flag. Ed's internal functionality is to delete the file then rewrite it with the modified contents. This operation fails if the &quot;d&quot; bit is cleared. The Execute (&quot;e&quot;) protection bit does not matter, only the &quot;d&quot; matters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Really, if there is a &quot;bug&quot;, it's that Ed does not rewrite the file with the same protection bits as before. Instead, it defaults to &quot;rw&quot;, which is why you can't edit the file a second time without setting &quot;d&quot; again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conclusion: Use 'memacs' instead. It has the same behavior of deleting then rewriting the modified file, but it retains the protection bits from the original file.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-01-26T02:41:40.943" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5578" PostTypeId="1" AcceptedAnswerId="5582" CreationDate="2018-01-26T10:23:27.633" Score="23" ViewCount="3201" Body="&lt;p&gt;The BASIC used in the early ZX Spectrum (and also its ZX predecessors) had this weird thing where every single BASIC token was printed onto the keyboard, and for example &lt;code&gt;PRINT&lt;/code&gt; or &lt;code&gt;LOAD&lt;/code&gt; were entered by a single keypress. In particular the ZX Spectrum had so many tokens on each key, meaning a great deal of shifting and entering various keyboard modes to enter some of the less common tokens such as &lt;code&gt;ATAN&lt;/code&gt; or &lt;code&gt;READ&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am interested to see how and why this was easier to implement than putting a simple tokeniser and string comparer in the ROM like everyone else! &lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-08-09T07:43:18.087" Title="ZX Spectrum tokenisation" Tags="&lt;zx-spectrum&gt;&lt;basic&gt;&lt;sinclair&gt;" AnswerCount="6" CommentCount="7" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5579" PostTypeId="2" ParentId="5578" CreationDate="2018-01-26T10:32:04.290" Score="7" Body="&lt;p&gt;I wasn't necessarily easier - it was down to money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember these were the days when the single most expensive component of a computer was its memory.  For many micros of the time, a simple memory expansion kit would cost more than the base model machine itself.  Sinclair was very clever at squeezing a working system into the smallest possible memory footprint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding a tokeniser to read multiple keystrokes would have required extra ROM space for the software and extra RAM space to hold the keystrokes while a command was being built up.  By using this form of key entry, the ZX80 managed to ship as a working machine with 1kb of RAM.  The ZX81 and Spectrum followed on from this, deliberately undercutting the competition on price by minimising the use of expensive memory chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the time the Sinclair QL came along, memory had reduced in price and so the drive to be so excessively frugal had reduced.  Sinclair continued to undercut the competition by saving in other ways - for example Phloopy tapes instead of floppy disks.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="576" LastEditDate="2018-01-26T12:12:45.003" LastActivityDate="2018-01-26T12:12:45.003" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5580" PostTypeId="2" ParentId="5578" CreationDate="2018-01-26T10:55:08.500" Score="0" Body="&lt;p&gt;My bet is because of small amount of RAM in BASIC. You need to take in mind there is the framebuffer, heap/variables and stack. If the code where represented as ASCII text it would be considerably longer. I often hit the memory limit in BASIC while writing small games in my early days of programming. For example this (first BASIC program I found in my archive):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 7901 BORDER 7: POKE 23693,56: CLS &#xA; 7902 LET f=1: LET n= PEEK 23635+256* PEEK 23636: LET vars= PEEK 23627+256* PEEK 23628&#xA; 7903 LET k=16383: INPUT CHR$ 8;&quot; LINE start: &quot;;od;&quot; koniec: &quot;;do; AT 0,0;&quot;Hlada sa: &quot;;a$: CLS &#xA; 7904 LET g=0: IF od &amp;lt;&amp;gt; ABS od OR do &amp;lt;&amp;gt; ABS do THEN LET g=1: LET od= ABS od: LET do= ABS do&#xA; 7905 IF n &amp;gt;=vars THEN STOP &#xA; 7906 GOSUB 7917: LET n=n+1: GOSUB 7918: IF l&amp;lt;od THEN LET n=n+b+1: GOTO 7905&#xA; 7907 IF l&amp;gt;7900 AND l&amp;lt;7930 THEN LET n=n+b+1: GOTO 7907&#xA; 7908 LET t=n: LET n=n+1: IF l&amp;gt;do THEN STOP : STOP : STOP &#xA; 7909 LET m= PEEK n&#xA; 7910 IF m= CODE a$ THEN GOSUB 7919&#xA; 7911 IF m= CODE &quot;&quot;&quot;&quot; THEN LET f=1-f&#xA; 7912 IF f AND (m= CODE &quot;:&quot; OR m= CODE &quot; THEN &quot;) THEN LET s=s+1: LET t=n&#xA; 7913 IF m=14 THEN LET n=n+5&#xA; 7914 LET n=n+1&#xA; 7915 IF m=13 THEN GOTO 7905&#xA; 7916 GOTO 7909&#xA; 7917 LET s=1: LET l= PEEK (n+1)+256* PEEK n: LET n=n+1: RETURN &#xA; 7918 LET b= PEEK n+256* PEEK (n+1): LET n=n+1: RETURN &#xA; 7919 PRINT PAPER 5;l;&quot;,&quot;;s;: PRINT TAB 8;: LET f=1: LET n=t&#xA; 7920 LET n=n+1: LET m= PEEK n&#xA; 7921 IF m= CODE &quot;&quot;&quot;&quot; THEN LET f=1-f&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;is 1058 bytes as ASCII and 867 bytes as a BASIC tokenized program file (including header). If I do the same for simple BASIC game like &lt;code&gt;Zednik ma zizen&lt;/code&gt; (not mine but very popular back in the days) then:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ASCII:   45619 Byte&#xA;.P file: 40995 Byte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The 5KB difference might not look like much but at the time it was. This game stretches the limits as there is only 42240 bytes available, minus the BASIC variables, and as ASCII text would not fit just the code alone ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the memory size changed (like on ZX128) they added text representation too ... (that is why &lt;a href=&quot;https://cs.wikipedia.org/wiki/Didaktik_40&quot; rel=&quot;nofollow noreferrer&quot;&gt;D40/D80&lt;/a&gt; FDC+FDD for ZX48K does not work in such environment with BASIC as it use tokens too...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/hog6w.png&quot; alt=&quot;D40&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another reason is speed. As ZX has BASIC interpreter processing text is much slower than processing tokens. For compilers it does not matter much as after binary is created no further processing occur during runtime. But interpreters must process each line of code when it executes. So loops and &lt;code&gt;GOTO/GOSUB&lt;/code&gt; invokes processing usually already processed lines again and again ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes it is possible to use text editor and token representation together but you must realize that there where not much tools at that time and code that and properly debug it would probably take much longer than they wanted to spend on it. Also conversion back and forward between both representations take time and coding could get sluggish ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="576" LastEditDate="2018-08-09T07:43:18.087" LastActivityDate="2018-08-09T07:43:18.087" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5581" PostTypeId="2" ParentId="5578" CreationDate="2018-01-26T12:16:24.660" Score="19" Body="&lt;p&gt;A purely speculative answer: it's a user experience improvement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX80 is unable both to process keyboard input and to maintain a stable display. It has the Z80 itself step through display bytes and programmatically generate vertical syncs, which requires it to be in a loop that is tightly synchronised to the video signal. It's able to do a fixed-length test for whether a key is pressed within that loop, but as soon as it needs to branch out and process a key press, it enters variable-length code, and loses synchronisation. The user observes this as a little screen roll.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The keyboard itself is also pretty terrible: a flat membrane, no tactile feedback. Like a smartphone except that your eyes aren't anywhere near it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore minimising keystrokes means: less typing, less screen rolling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX81 has the same kind of keyboard and still rolls in fast mode, and the ZX81 ROM is backwards compatible, being installable in a ZX80 (though slow mode, which produces a steady picture even when typing, won't be available because it relies on an extra interrupt generator). The ZX Spectrum's ROM is a direct descendant of the previous two and, anyway, single-press entry was by then associated with the brand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: it's from an emulator I wrote rather than a real machine, but it's getting this result by really emulating a CRT, not because I think it's cool, so I maintain that this is an accurate representation of the real ZX80 typing experience:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mmVAo.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mmVAo.gif&quot; alt=&quot;screen roll artifact&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="7946" LastEditDate="2018-02-07T09:09:48.003" LastActivityDate="2018-02-07T09:09:48.003" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5582" PostTypeId="2" ParentId="5578" CreationDate="2018-01-26T14:21:03.683" Score="36" Body="&lt;p&gt;Contrary to other answers, obliging the user to enter BASIC tokens directly doesn't really save meaningful amounts of RAM. Many of its contemporaries such as the BBC Micro had BASICs where you typed keywords in full which were then immediately tokenised when you pressed enter. If anything, tokenised Sinclair BASIC generally had &lt;em&gt;longer&lt;/em&gt; byte sequences than other BASICs due to parsing number constants and inlining the floating-point representation for performance. The latter is the source of bizarre memory-saving hacks on the ZX81 where e.g. &lt;code&gt;PI-PI&lt;/code&gt; (3 bytes: &lt;code&gt;PI&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt; and &lt;code&gt;PI&lt;/code&gt;) would be used in preference to &lt;code&gt;0&lt;/code&gt; (7 bytes: &lt;code&gt;0&lt;/code&gt;, 126 to indicate a floating-point constant, then the 40-bit constant).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, it serves to save on &lt;em&gt;ROM&lt;/em&gt; space. Remember that ZX BASIC started on the ZX80 which had just 4kiB of ROM for everything: Z80 control, I/O handling, character generation, and BASIC. Eliminating a tokeniser saved perhaps 500 bytes or so, which makes a real difference in such a small system. With the ZX Spectrum and its 16kiB ROM they would have had the option of supporting entering keywords in full, but chose not to. Partly perhaps because those 500 bytes could still do something more useful elsewhere, but most likely because the unusual input method was now a defining characteristic of ZX BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another important reason would be marketing-related. Uncle Clive was very much a showman, and what better way for a machine to advertise what it was capable of than to label the keys with a treasure map of keywords begging to be explored?&lt;/p&gt;&#xA;" OwnerUserId="80" LastEditorUserId="80" LastEditDate="2018-06-03T19:13:54.897" LastActivityDate="2018-06-03T19:13:54.897" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="5583" PostTypeId="2" ParentId="5578" CreationDate="2018-01-26T14:36:36.420" Score="2" Body="&lt;p&gt;I am in doubt it was due to a special technical reason. Finally I can not judge really but I am convinced there are a couple of advantages of this design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first computer/programming experience was with ZX Spectrum+. In contrast to its predecessors the keyboard of this model was outstanding till today. It was very well designed and very responsive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For me to have all the available commands printed on the keyboard helped very much to make first steps in programming at all. Further you have been forced to enter syntax correct code. The editor by default only accepted correct commands syntactically. The system was easy to learn and not very complicated at all. I liked it very much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qON0K.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qON0K.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7796" LastEditorUserId="7796" LastEditDate="2018-01-28T12:15:58.083" LastActivityDate="2018-01-28T12:15:58.083" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5584" PostTypeId="1" AcceptedAnswerId="5586" CreationDate="2018-01-27T03:12:59.247" Score="1" ViewCount="649" Body="&lt;p&gt;I'm going to adjust the dynamic convergence and geometry on my CRT TV with magnets. However, my dad is very reluctant as he thinks the bell of the tube may have a high voltage current and that placing a magnet on the tube will give one a shock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is is safe to touch the bell of the tube and to tape magnets to it?&lt;/p&gt;&#xA;" OwnerDisplayName="user7645" LastActivityDate="2018-01-28T09:11:57.993" Title="High Voltage in Bell of CRT Tube?" Tags="&lt;crt-monitor&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5585" PostTypeId="2" ParentId="5584" CreationDate="2018-01-27T05:41:38.300" Score="1" Body="&lt;p&gt;I can't tell you whether touching the bell of the tube specifically is dangerous, but I wouldn't do it if you're not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your best bet is to find an expert who knows exactly what they're doing and can show you how to deal with CRTs and high voltages safely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you decide to ignore my advice, at the very least make sure that you:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Turn off the power and unplug the CRT&lt;/li&gt;&#xA;&lt;li&gt;Don't touch any capacitors&lt;/li&gt;&#xA;&lt;li&gt;Work with someone nearby who can help you in case of an accident&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Some people recommend discharging the CRT, but if you don't know how to do it correctly, you may be exposing yourself to additional risk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be safe!&lt;/p&gt;&#xA;" OwnerUserId="7801" LastActivityDate="2018-01-27T05:41:38.300" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5586" PostTypeId="2" ParentId="5584" CreationDate="2018-01-27T08:40:08.643" Score="4" Body="&lt;p&gt;It's weird that you know enough about the CRT to know how to adjust geometry with magnets, but not enough to know the way the voltage is stored.  CRT repair is dangerous - you should understand &lt;em&gt;how&lt;/em&gt; the CRT works - not just follow step by step instructions.  This is true not just for safety but also because these are finicky analog devices that don't always respond the way the book says they should.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://repairfaq.org/sam/monfaq.htm#monaddi&quot; rel=&quot;nofollow noreferrer&quot;&gt;short answer&lt;/a&gt; is that yes, the outside of the tube itself is perfectly safe.  But that is not really enough to know, because you can still zap yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two kinds of high voltage danger inside a CRT.  First, the power supply, which can easily contain 200V or possibly up to 800V.  Second, the tube itself, which can contain 25,000 (yes thousand) volts or even more in a large TV.  The voltage in the tube is proportional to the size of the tube, about 1KV per diagonal inch, give or take.  The power supply voltage can burn you and knock you down, the tube voltage can kill you.  Most of the power supply voltage will discharge on its own given a few hours or days, though - especially if you unplug the CRT without turning it off, just like a PC power supply.  You should still discharge any large capacitors safely before you handle them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Voltage in the power supply is more likely to zap you because it's more exposed, but the danger from it is less.  The tube voltage is by no means safe.  If you look inside the case, you should see a large wire connecting the tube to a bulky component which is the flyback transformer.  The tube end of the wire attaches to a &quot;suction cup.&quot;  It isn't really, it's actually an insulator, but it looks like one.  This wire, the transformer, and sometimes some other components are all at high voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It isn't always necessary to discharge the tube before working on the CRT.  In fact, many adjustments can only be made with the case open and the display turned &lt;em&gt;ON&lt;/em&gt;.  Any activity inside the case when the tube is potentially charged should always be done using an insulated tool, wearing insulating gloves, no jewelry, no dangling hair or clothes, and with one hand in your pocket or behind your back.  This will at least hopefully keep the current from stopping your heart if you manage to zap yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To &lt;a href=&quot;http://www.instantarcade.com/discharge.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;discharge the tube&lt;/a&gt; - which you should do before replacing any components - you connect a wire to a screwdriver, the other end of the wire to the chassis ground (NOT earth ground or electronic ground) and poke the screwdriver under the cap until it touches the terminal.  Wait a few minutes, then go back and do it again.  Remove the cap (it has clips under it which you can squeeze to release) and connect the ground wire to the terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have any safety concern whatsoever, it's best to find someone who is willing to do this for you.  There may not be any CRT repair shops still around, but there are still some people around who worked in them and remember how to do things.  &lt;a href=&quot;http://repairfaq.org/sam/monfaq.htm#monsaf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Safety&lt;/a&gt; is more important than color quality!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit to add: Most of what I wrote applies only to repairs or adjustments you might make with the CRT disconnected from power. If you decide for some reason to work on it with it turned on - which you probably will once you start fiddling with the picture quality - you need some additional safety precautions. The power supply voltage can kill you too if it's connected to mains electricity, and a few CRTs have a &quot;hot chassis&quot; - the whole metal frame is live! Needless to say this is very much not perfectly safe to touch. Because of these and similar issues you need an isolation transformer - with isolated ground - to work on a plugged in CRT. This will allow the CRT's voltages to float independently of the external environment, so you can connect things like oscilloscope probes and your fingers without trying to discharge the whole power supply through them. &lt;/p&gt;&#xA;" OwnerUserId="7775" LastEditorUserId="7775" LastEditDate="2018-01-27T22:44:32.263" LastActivityDate="2018-01-27T22:44:32.263" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5587" PostTypeId="1" AcceptedAnswerId="6497" CreationDate="2018-01-27T10:34:56.943" Score="11" ViewCount="1515" Body="&lt;p&gt;I am confident of most of the following information except oddly the manufacturer.  I think that it was NCR but I am not quite sure.  I have no idea of the model.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machine had 32k of memory but 24 bit words not bytes.  &quot;Byte&quot; was not yet in my vocabulary.  Mostly, these words stored numbers: integers in 2's complement or floats.  When characters were stored, they used a 6 bit code and were packed 4 to a word.  Obviously, the coding was not ASCII, &quot;ASCII&quot; was also not yet in my vocabulary.  There was no room for upper and lower case so it was usual to work entirely in upper case.  If you insisted on lower case then you needed to use shift characters.  Space was coded as 0.  When I discovered ASCII later, I was surprised that space was 32, 0 had come to seem the natural code for space.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One reason that I am confident of this is that the number 2^23 = 8388608 is still burned into my brain as 8388607 was the maximum positive integer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;No hard disk and it was quite a while before I learned to use the tape drives.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system accepted a few simple control commands.  A typical program looked like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;amp;JOB;3733;JOHN;MY FIRST PROGRAM&#xA;&amp;amp;OPER; PLEASE LOAD TAPE XXX123 H1&#xA;&amp;amp;FORTRAN;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Loads of ugly code with GOTOs and stuff&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   STOP&#xA;   END&#xA;&amp;amp;RUN;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Data&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;amp;END;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;FORTRAN was the most commonly used language but COBOL, ALGOL, and an assembly language called NEAT (I think) were also available.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, can anyone confirm that it was a NCR or correct me?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would anyone be able to guess the model?&lt;/p&gt;&#xA;" OwnerUserId="7805" LastEditorUserId="278" LastEditDate="2018-01-27T11:00:07.523" LastActivityDate="2021-04-15T23:43:32.427" Title="Help identifying a very old computer: 1974, maybe an NCR" Tags="&lt;identify-this-computer&gt;" AnswerCount="7" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="5588" PostTypeId="1" CreationDate="2018-01-27T15:02:04.333" Score="11" ViewCount="715" Body="&lt;p&gt;Wondering what the 20 pinout holes was used for. It is below the speaker on the keyboard, has a further four pinouts above, and has something to do with the cartridge system in later models, I guess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any mods available?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have found this item &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Viglen_BBCCart.html&quot; rel=&quot;noreferrer&quot;&gt;http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Viglen_BBCCart.html&lt;/a&gt;, but it doesn't fit into the pins as such, and instead connects into a rom slot via  cable connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this also does a similar job &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/New4Old/RetroClinic_Beebzif.html&quot; rel=&quot;noreferrer&quot;&gt;http://chrisacorns.computinghistory.org.uk/New4Old/RetroClinic_Beebzif.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Space for a small Zif port perhaps?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am interested about the original use of these pinouts&lt;/p&gt;&#xA;" OwnerUserId="7806" LastEditorUserId="7806" LastEditDate="2018-01-27T15:31:35.603" LastActivityDate="2019-01-03T07:25:36.710" Title="BBC model B, 20 pinouts port on keyboard below speaker used for what?" Tags="&lt;bbc-micro&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5590" PostTypeId="2" ParentId="5587" CreationDate="2018-01-27T15:45:55.697" Score="1" Body="&lt;p&gt;Was it the &lt;a href=&quot;https://en.wikipedia.org/wiki/NCR_315&quot; rel=&quot;nofollow noreferrer&quot;&gt;NCR 315&lt;/a&gt;?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It used 12-bit slab memory structure using core memory. The instructions could use a memory slab as either two 6-bit alphanumeric characters or as three 4-bit BCD characters. Basic memory was 5000 &amp;quot;slabs&amp;quot; of handmade core memory, which was expandable to a maximum of 40,000 slabs in four refrigerator-size cabinets.&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;p&gt;A numeric value contains up to eight slabs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So it supports numeric operations on words in multiples of 12 bits, up to 96 bits.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Available Languages&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;NCR Assembler Language&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;National Electronic Autocoding Technique (NEAT)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;COBOL&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;BEST&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Hmm, Fortran and Algol are missing from that list. Maybe you are thinking of a successor that inherited the NCR 315's 12-bit words?&lt;/p&gt;&#xA;&lt;p&gt;Edit: Sorry, I didn't read the comments before posting this or I would have seen the suggestion that it might be the 315 or the 615. I guess great minds think alike!&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-01-28T05:06:33.677" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5591" PostTypeId="2" ParentId="5588" CreationDate="2018-01-27T16:09:59.003" Score="7" Body="&lt;p&gt;The “ashtray” was supposedly meant for serial PROM cartridges, but was often modded for other purposes. Cartridges were becoming rarer by the time the BBC Micro was released, though, and regular EPROMs became the medium of choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ISTR the Acorn Speech Synthesizer used some hardware in or around that slot.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-01-27T16:09:59.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5592" PostTypeId="2" ParentId="5588" CreationDate="2018-01-27T20:08:34.440" Score="12" Body="&lt;p&gt;Most hobbyists put a ZIF socket onto those pins.  This then was connected through to the sideways ROM sockets on the motherboard.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The socket enabled you to insert language ROMs as required, thus not using all the available sideways sockets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the main purpose was to fit the &lt;a href=&quot;https://www.retro-kit.co.uk/page.cfm/content/Acorn-Speech-Synthesiser-Upgrade/&quot; rel=&quot;noreferrer&quot;&gt;Speech Synthesizer&lt;/a&gt; unit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fitting this required modifying both the main PCB and the keyboard PCB.  It was not for the faint hearted but gave a remarkably high quality speech for its time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The speech being generated by requesting individual phonemes from the Synthesizer in sequence.  The speech being the digitised voice of Kenneth Kendall.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2018-01-27T20:16:49.427" LastActivityDate="2018-01-27T20:16:49.427" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5593" PostTypeId="2" ParentId="5428" CreationDate="2018-01-27T20:32:49.627" Score="1" Body="&lt;p&gt;Many (not all) of them have a 24-pin flat flex cable instead of the 34-pin cable you'd need. If you have an adapter, they work fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have three USB floppy drives of different brands and they all have the same flat flex cable going to a daughter board that converts it to USB. I happen to have an adapter I tore out of something that converts the flat flex to 34-pin and verified that all of them work in my old IBM just fine with it.&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2018-01-27T20:32:49.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5594" PostTypeId="2" ParentId="2402" CreationDate="2018-01-27T20:54:51.447" Score="15" Body="&lt;p&gt;Linear power supply was not a BBC engineering requirement by the time I joined Designs Dept in late 1981. Perhaps it was dropped well before actual production; I don't know if that was pushback from Acorn or experience with a prototype. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But by late 1981, shipping some with linear PSUs was an unhappy compromise caused by : (a) demand much higher than expected and (b) designing the SMPS and getting it into production would be a couple of months late (and miss the pre-Christmas launch altogether). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to keep the overheating down a bit, the first production was Model A, with half the memory, and slightly less power consumption.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I never saw a BBC Micro with 8&quot; floppies though they were ubiquitous in the BBC at the time, as well as standard for the &quot;Richard Russell Board&quot; (his own home computer design, Z80 based, which grew up to a 64k CP/M system. About 100 of these were made, mostly by BBC engineers. I built one, instead of getting a BBC Micro).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the &quot;disk connector shall be a 34-way type&quot; in the hardware spec (linked in the other answer) strongly hints that 5.25 inch floppies were intended; 8&quot; drives generally used a 50 way connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One aspect which (if I remember correctly) was a BBC requirement - probably Richard's own - was that BBC Basic had to have a useful block structured syntax, as far as could be achieved while still being BASIC. The aim was, for an educational machine, to teach best practice at the time. &#xA;You could program in a Pascal-like style that was a considerable advance on other BASIC dialects around then, and it's probably why BBC Basic still has its fans today. This was probably the most important and far reaching BBC requirement in its impact on users, who mostly did at least some programming - and perhaps on the UK as a whole. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Source : Richard Russell was my project leader at the time).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I've been asked to expand on the Richard Russell Board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was probably unknown outside the BBC, and slightly pre-dated the BBC Micro, it was fairly new when I joined in 1981.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sadly, I left mine in an attic about 15 years ago during a house move. Mine actually turned out to be a bootleg - apparently Richard loaned the PCB masters to Research Dept and they made some in house, one was left over. It wasn't actually used at the BBC per se, it was more of a homer &quot;home office&quot; in BBC jargon) project, but it inspired the ZEUS modular system which ran a lot of the BBC transmitters - and the broadcast clock and other graphics at the time. ZEUS modules configured for S/W development were known as ZELDA - Z80 Loader/Developer/Assembler - I think that (1981)was before Zelda was a game character. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC had a fairly enlightened attitude to &quot;home office&quot; projects, as long as they were kept out of hours and didn't drain expensive components. They gained a lot out of the process, like the ZEUS (Z80 Universal System) following the RTR Board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a SBC with 32K DRAM (4116, the original 3 rail type). These used +12V for the storage, +5V for the I/O and logic, and -5V at a ridiculously low current to bias the substrate. It was important that the -5V supply came up before the +12V, or all 16384 transistor turned on at once, with fatal consequences. I fitted a relay powered by -5V to connect the 12V supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, a second board had 32K more, either for monochrome high res bitmapped graphics, or 64K CP/M. But the main board used Z80, I think 8251 SIO, 8255 parallel I/O, and the ubiquitous 6845 for video. Two 64-way connectors along one side gave you everything. I may still have the schematic somewhere but can't find it just now.      &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most had 8&quot; floppy drives (dual was luxury!) and it booted to BBCDOS in under a second. BBCDOS  was pretty simple, but robust. It used 6.1 filenames (6 character name, 1 character extension) and a robust chained sector file system. The last two bytes of a 128-byte sector were a pointer to the next sector. No interleaving, so a 2.5 MHz Z80 could read 6 tracks/second while the original IBM PC was throttled to about 1 track/second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, he wrote his own BBC Basic interpreter for it. It wasn't 100% compatible - naturally, the built-in assembler understood Z80 instructions rather than 6502. That went on to sell as a CP/M version, the ... wait for it ... Sinclair (!) Z88 portable, Tatung Einstein, and eventually ported to x86 for MS/DOS (still available). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mine spent most of its time running CP/M, where I had the FTL Modula/2 compiler.&lt;/p&gt;&#xA;" OwnerUserId="6700" LastEditorUserId="6700" LastEditDate="2018-01-29T11:23:07.697" LastActivityDate="2018-01-29T11:23:07.697" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5595" PostTypeId="2" ParentId="5587" CreationDate="2018-01-28T00:31:34.673" Score="0" Body="&lt;p&gt;This is a reach, but how about an SDS 930?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It had 24 bit words and ALGOL.  Don't know about the rest of it.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2018-01-28T00:31:34.673" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5596" PostTypeId="2" ParentId="5584" CreationDate="2018-01-28T09:11:57.993" Score="0" Body="&lt;p&gt;A color picture tube can be made safe by (1) disconnecting power, and (2) shorting the anode to ground (with a probe under the suction-cup-like connection and wire(s) to the frame around the faceplate).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, you cannot do dynamic adjustments, or static magnet adjustments,&#xA;when it is safe.   Those require a fully powered display.&#xA;So, those adjustments are associated with safe-to-touch control&#xA;knobs, or controls that can be reached with nonconducting tools&#xA;from a comfortable position that doesn't require your body&#xA;to be near the hot wiring.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can find a service manual, even for a slightly different&#xA;model, it will help.  &lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2018-01-28T09:11:57.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5597" PostTypeId="2" ParentId="3227" CreationDate="2018-01-28T12:15:10.207" Score="5" Body="&lt;p&gt;I'm 61yrs old and my memory no longer serves me well but I do remember a few things about DOS. I purchased a book in the late 80's that contained a less optimized free version of DOS. That version of DOS (I can't remember for sure but I think it was MX-Dos) was very close to Caldera/DR-DOS and somewhat like FreeDos. (I suspect FreeDos is based on it) It included multi-user login, task switching, and several tools similar to QDos (cpm variant), DoubleDos, and QEMM. The book provided a short summary of every Dos C procedure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also several excellent asm books written by Tom (edited) Swan on how task switching was accomplished. I eventually purchased about 15 of his books and he regularly contributed to Byte magazine. He wrote about 150 asm utilities that where published and given to Byte readers for free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(As has all ready been pointed out, a TSR is a crude form of task switching - most lacked time slicing and live independent video support.) Exactly how the task switch was handled depended on the CPU mfg. Machine state was saved for the task switching but the details were different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As mentioned by several folks above, all computers used TSR's for all BIOS i.e i/o intercept. For Intel CPU, the 80xx memory segment pointers would be saved and loaded appropriately for each task switch. The 80xx has extra hardware clock registers and software timer interrupts would trigger the task switch according to time slices. The 80286 and later chips supported better multitasking with specific registers designed for task switching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2bNac.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2bNac.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 machines where even easier (I owned several), the Z-80 has two complete sets of registers and a single asm command will swap between them which made handling two OS environments a breeze. The Z80 has a dedicated external timer chip with 4 &quot;counter/timer channels&quot; (CTC) attached that could be software programmed for a software interrupt task switch - time slices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ECaxh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ECaxh.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An interesting bit of Z80 history... The two register sets where specifically provided to assist in easy interrupt handling but most programmers were scared of getting the wrong register set mixed so the mirror register set was almost never used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no idea how the 6502 &amp;amp; 6800 CPU was handled. Now, back to DoubleDos. Programs could be run in two modes, with or without i/o and screen support. The video was a challenge because DOS machines lacked extra memory so switching video in and out was very slow and consumed a big chunk of the limited 64k program memory block (later extended XMS memory drivers got quite good at freeing lower program memory). There was not any virtual video memory (frame buffers) so all video had to be done on the actual physical video memory. Also, the video chip was accessing video memory live and any DMA had to be halted during the video read cycles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programs set to run without screen support ran almost transparently. Both the Z80 and 80xx had DMA but copying large blocks of memory at 4-8mhz caused significant flickering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not remember the task switching rate, it seems to me that was user selectable to some degree. But, flicker was noticeable because everything had to swap live physical memory. The background program had to save the foreground video, load the background video, allow the background program to access physical screen memory, save it, and reload the foreground program video again. That was asking a lot from a 16bit CPU. Later, larger capacity video cards had &quot;bit blasting&quot; capability which was optimized DMA video memory manipulation and that almost eliminated the flicker.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It did not have resource tokens or arbitration so two programs sending output to a i/o device like the com port or printer would end up with gobbledygook. There where some clever folks that made add on print spool drivers, but DoubleDos did not manage it internally; or at least the early versions did not support it. Because there were no resource tokens there could never be deadlock. It was pretty much bullet proof except for an occasional TSR locking up. There was significant development between versions but MS deliberately killed it with pseudo task switching and a more powerful XMS manager in Dos 5 &amp;amp; 6. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quarterdeck Deskview arrived and immediately surpassed it. DoubleDos died a very quick death shortly after the first DeskView release. Deskview had pretty much unlimited task switching, print and com spoolers, the best virtual memory manager, and 20 or 30 utilities; all for slightly more money than DoubleDos. Third party developers immediately wrote compatible games and utilities for it. For some reason DoubleDos never received third party support.&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2018-01-30T03:07:25.513" LastActivityDate="2018-01-30T03:07:25.513" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5598" PostTypeId="2" ParentId="3227" CreationDate="2018-01-28T13:44:21.753" Score="6" Body="&lt;p&gt;Multitasking is absolutely not depending on modern CPUs like the 386 or anything - Those CPUs go one step beyond and &lt;em&gt;protect&lt;/em&gt; multiple tasks from each other, while earlier MT OSs had to rely on &lt;em&gt;behaving&lt;/em&gt; applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I co-wrote a multitasking system for x86 based on Turbo Pascal 5 and running from DOS for industrial control applications back in 1990. You &quot;simply&quot; set up a scheduler that was driven by one of the PC's system timers and interrupted the running task, stored all of that task's register contents onto the task's stack and restored another task for some time slices. I think we needed only one single assembler file and wrote all the rest in TP. Last time I looked they still had some machines running that OS.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-01-28T13:44:21.753" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5599" PostTypeId="2" ParentId="3227" CreationDate="2018-01-28T14:54:13.887" Score="8" Body="&lt;p&gt;Jwzumwalt already covered the basic, being not much younger I might add a few minor details still present to me.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;While it didn't particularly work well for games (as far as I remember), it was popular for system operators of bulletin board systems.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It was perfect - well, let me rephrase this as rather useful - for well behaving (read no direct hardware access) programs to have two programs at hand. Like a BBS operating in the background while being able to do maintenance tasks at the same time.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How did DoubleDOS work? I know that I had used it on 8086 machines back in the day which I don't believe had many of the real context switching capabilities that modern CPUs use to support multitasking.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In general the process is the same on each and every CPU ever developed. To switch all CPU-states visible to a user task need to be exchanged. Some CPUs may offer special modes for special cases (like the second register set in the Z80) or instructions to store the whole state (or most of it) in a single operation. Still, it has to be done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also with a primary single taking BIOS/OS combination, several memory regions need to be swapped - just think of things like cursor position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same with screen memory. If there's only one screen adapter, the content needs to be exchanged. Otherwise one would not be able to see the output of the background task when switched up.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was it simply hooking up to an interrupt and storing session 1's CPU registers, context switching, restoring session 2's registers, running and then running until the next interrupt?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly like that. The basic task switch was done via a timer interrupt. To make it work some additional precaution had to be taken. For example monitoring entry to certain BIOS and DOS interrupts. As well as handling BIOS for I/O related functions. This is necessary since no (at least not many) DOS/BIOS functions are designed for reentry (i.e. two tasks running thru the same code). So DoubleDOS had to keep the tasks from doing so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if the timer interrupt (08h) fires while the active task issues a DOS function, it will be ignored. Prior to DOS 2.0 DoubleDOS did this by hooking Int 21h and setting a marker of their own, while with DOS 2.0 the InDOS Flag got introduced to sign when it's safe to (re)enter DOS (*1).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was memory space adjusted accordingly&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;DoubleDOS was really build around the Idea of splitting a machine into two by partitioning memory. It wasn't really a taking system with dynamic memory assignment. At startup (or if no program was running in either task) available memory was to be split um in two regions and kept that way. Beside being the prime idea, it also avoids hassles wit programs manipulating the memory they assume to be entitled to.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or did programs which didn't go simply through DOS and the BIOS fail to operate?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are zillion ways to screw operations, and computers really enable them :)) It depends on the way of switching and what kind of 'bypassing' DOS/BIOS had been used. The most important issue here is usually the screen content and keyboard. Programs accessing both directly did only run well in foreground. In background they may at best just screw up the front tasks screen and steal input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast 'well behaving' programs, using only DOS and BIOS could even continue to produce output in background. Same for Printers and serial lines (*2). In fact, I remember that somehow up to 6 'tasks' could run at the same time. Two real tasks, while the other being specialized like print spoolers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In reality, many programs 'less than behaving' programs fail due to direct screen access. At the same time the majority do wait for user interaction at some point and don't issue any screen update when switching. So putting them in background won't do damage beside wasting CPU time for an idling application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again DoubleDOS did offer a ways to get around that to a certain degree by setting the background execution to halt. So when foreground and background switch, everything gets saved and the program stops operation (*3).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Addendum 1: Time slice handling&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be interesting to add the ways of handling time attribution to each task.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2:1 Foreground/Background&lt;/li&gt;&#xA;&lt;li&gt;1:2 Foreground/Background&lt;/li&gt;&#xA;&lt;li&gt;1:1 (equal time)&lt;/li&gt;&#xA;&lt;li&gt;2:1 Upper/Lower Program&lt;/li&gt;&#xA;&lt;li&gt;1:2 Upper/Lower Program&lt;/li&gt;&#xA;&lt;li&gt;Full time for Foreground&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Addendum 2: Multitasking (and TSR) hooks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With DOS 2 a lot of hooks where designed into DOS to enable multitasking - much the same way as the AT BIOS introduced similar measures. From there on it was &lt;em&gt;rather&lt;/em&gt; straightforward to build a tasking layer above DOS/BIOS. And Windows is maybe not the least example to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On BIOS side this includes several functions to allow an OS independent protocol to detect and handle critical sections and process task swap. With the SysReq-Key even an OS independent user interaction was designed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS added not only InDOS via Int 21h Function 34h (?), but also INT 28 to give a switching point/activity entry during idle. Beside InDOS function 34h also introduced an error flag which could be used to make the active DOS function fail in a (somewhat) orderly fashion. This again could be used in conjunction with the Error Handler at Int 24h(*4). To speed up the process. Int 23H also added the &lt;code&gt;CTRL-BREAK&lt;/code&gt; handling as an entry point for task switchers/OSes due user request.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then there was Int 2Fh, the MUX-Services. A collection of hooks mainly added by TSR utilities like &lt;code&gt;PRINT&lt;/code&gt;, but also various versions of DOS (and various DOSes). There where functions from &lt;code&gt;ASSIGN&lt;/code&gt; to &lt;code&gt;PRINT&lt;/code&gt; over network and CD handling to a countless number of services provided by Windows, VM-Ware and alike. &lt;code&gt;COMMAND.COM&lt;/code&gt;'s command line handling being not the least :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - There &lt;em&gt;are&lt;/em&gt; some function, especial the Character I/O which are &lt;em&gt;usually&lt;/em&gt; safe to be used while InDOS is set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Ofc. only if both tasks are not trying to access the same device on a character base - that is single byte (or line) output via DOS/BIOS. As soon a utility like PRINT was used even sharing a printer on job base was possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Not really desirable for a BBS, isn't it :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Right, that's the one where the infamous Abort/Retry/Ignore/FAIL is displayed. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorDisplayName="user39" LastEditDate="2019-02-09T20:13:19.457" LastActivityDate="2019-02-09T20:13:19.457" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="5600" PostTypeId="2" ParentId="5479" CreationDate="2018-01-29T13:14:27.423" Score="10" Body="&lt;p&gt;Inspired by this question, whilst visiting my parents this weekend (Jan 28th, 2018) I extracted my old TRS-80 .... and here is the result:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Dwf8x.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Dwf8x.jpg&quot; alt=&quot;TRS-80 powered up and working&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did open the case and give it an inspection first - and I also had a fire extinguisher on hand (just in case!) but everything went as smoothly as could be hoped. &#xA;The build quality is very high - I was concerned about the plastic having become brittle and cracking when I removed the screwed - but they were fine (different length screws in different holes!) &#xA;The ribbon cable I treated very carefully, but it, too, handled the gentle flexing required to remove the board and test the keyboard connections without issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My issues were: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Once warmed up, the vertical hold needed adjusting&lt;/li&gt;&#xA;&lt;li&gt;One of the key-switches has failed ('E' - I plan to unsolder and examine when I have time) &lt;/li&gt;&#xA;&lt;li&gt;Haven't been able to locate the necessary cables to&#xA;connect a tape drive - although I did find a variety of original&#xA;tapes, and the original user manual.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Worth bearing in mind, it has been kept in a residential space all these years, so no extremes of temperature or humidity, in any direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, all in all, forty year old hardware - plugged it in, and it started immediately. &#xA;I say, having taken the necessary precautions, go for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Don't ask why my parents still have a TRS-80. Just don't.)&lt;/p&gt;&#xA;" OwnerUserId="7818" LastActivityDate="2018-01-29T13:14:27.423" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5601" PostTypeId="1" AcceptedAnswerId="5602" CreationDate="2018-01-31T15:00:25.427" Score="6" ViewCount="654" Body="&lt;p&gt;I was watching a channel about living in China. And the host present a Jacky Chan Nintendo Fake. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MtQuv.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MtQuv.png&quot; alt=&quot;Sales box containing fake&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;System looks like a Famicom. But when show the cartridge &lt;a href=&quot;https://www.youtube.com/watch?v=WUvPxbx-UMc&amp;amp;t=575s&quot; rel=&quot;noreferrer&quot;&gt;Video&lt;/a&gt;, looks they need batteries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4Pf87.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4Pf87.png&quot; alt=&quot;Cartridge&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then it mentions a need for a battery to save games. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I was wondering what happen if the battery ran out. Do you lose your saved games?&lt;/p&gt;&#xA;" OwnerUserId="7824" LastEditorUserId="276" LastEditDate="2018-01-31T16:03:05.313" LastActivityDate="2018-03-24T06:07:13.473" Title="Do the cartridges lose your saved games without batteries?" Tags="&lt;nintendo&gt;&lt;famicom&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5602" PostTypeId="2" ParentId="5601" CreationDate="2018-01-31T15:05:26.587" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So I was wondering what happen if battery run out. Do you lose your save games?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In an unplugged/stored cardridge yes. After all, they are RAM based.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if it's still pluged and powered, then usualy not. Ofc. it depends how it's wired. With standard circuitry that's also the way to change batteries &lt;em&gt;before&lt;/em&gt; they go dead.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-01-31T15:11:41.220" LastActivityDate="2018-01-31T15:11:41.220" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5603" PostTypeId="1" AcceptedAnswerId="5604" CreationDate="2018-01-31T19:15:23.403" Score="65" ViewCount="13059" Body="&lt;p&gt;The cursor used on my 486 (and Pentium 3) in MS-DOS 6/7 has a thick underlined character. I cannot find that in code page 437. The underscore character is the closest to it, but is thinner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where does this cursor character come from? Or did I miss something?&lt;/p&gt;&#xA;" OwnerUserId="81" LastEditorUserId="15334" LastEditDate="2020-09-22T18:31:02.250" LastActivityDate="2020-09-22T18:31:02.250" Title="What character is the MS-DOS cursor?" Tags="&lt;ms-dos&gt;&lt;ibm-pc&gt;&lt;video&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5604" PostTypeId="2" ParentId="5603" CreationDate="2018-01-31T19:26:45.607" Score="118" Body="&lt;p&gt;The text-mode cursor isn’t a character, it’s managed separately by the video output circuitry (which is how it keeps blinking even when your computer is busy or locked up). It can be enabled or disabled, and its size can be determined — at least, its start and end scanlines, which determine its height; the cursor always occupies the full width of a character cell. That way you can have the simple cursor beneath your text, the half-cell cursor typically used for insert mode, a full-cell cursor, etc. Even a cursor above your text if you want! On EGA, and many VGA clones, you can also have &lt;a href=&quot;https://en.wikipedia.org/wiki/VGA-compatible_text_mode#Cursor&quot; rel=&quot;noreferrer&quot;&gt;a split cursor&lt;/a&gt;: if the end line is above the start line, you end up with a two-part cursor with lines at the top (down to the end line) and at the bottom (from the start line).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://wiki.osdev.org/Text_Mode_Cursor&quot; rel=&quot;noreferrer&quot;&gt;OSDev Wiki&lt;/a&gt; has more information on the topic, including pointers to the BIOS functions you can use, and code to directly manipulate the VGA registers (the cursor is also available on MDA, Hercules, CGA and EGA obviously). &lt;a href=&quot;http://www.osdever.net/FreeVGA/vga/textcur.htm&quot; rel=&quot;noreferrer&quot;&gt;FreeVGA&lt;/a&gt; is also relevant (amongst many other resources on the topic).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.pcjs.org/blog/2018/03/20/&quot; rel=&quot;noreferrer&quot;&gt;Emulating IBM PC Cursors&lt;/a&gt; illustrates the various effects and provides an in-browser emulator running PC Magazine’s &lt;code&gt;CTYPE&lt;/code&gt; so you can try different settings directly. (Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/357/michael-kj%C3%B6rling&quot;&gt;Michael Kjörling&lt;/a&gt; for the suggestion!)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-07-26T11:59:16.393" LastActivityDate="2018-07-26T11:59:16.393" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="5605" PostTypeId="2" ParentId="4652" CreationDate="2018-01-31T19:35:54.540" Score="3" Body="&lt;p&gt;The Signetics 2636 Video Controller may qualify -- it supports up to 4 8x10 sprites (resizable to 64x80!) and was used in the Interton VC 4000 console released in 1978: &lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?st=2&amp;amp;c=726&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.old-computers.com/museum/computer.asp?st=2&amp;amp;c=726&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If so, it may slightly predate the TMS9918 which came out in 1979, but I can't find exact dates on either chip.&lt;/p&gt;&#xA;" OwnerUserId="7827" LastActivityDate="2018-01-31T19:35:54.540" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5606" PostTypeId="2" ParentId="5603" CreationDate="2018-01-31T19:40:08.667" Score="52" Body="&lt;p&gt;The cursor on the CGA, MDA, EGA, and VGA cards was a hardware sprite&#xA;generated on the earlier cards by the 6845 video controller, and on later&#xA;cards by a chip that emulates the 6845.  That chip has an address counter&#xA;that is used to fetch data from memory, as well as a line counter and a&#xA;cursor-state latch.  It also has a programmable registers for cursor address, cursor start line, cursor end line, and blink pattern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every time the display controller advances to line N of a character row,&#xA;it compares N against the cursor-start and cursor-end registers.  If it&#xA;matches the former, it sets the cursor-state latch; if it matches the latter, it clears the latch.  At all other times, the latch keeps its state.  If the cursor is programmed to be active in rows 10-13 of each character, this signal will be active while drawing rows 10-13 of every character line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any time this latch is set, the value in an internal 5-bit frame counter matches the requirements of the blink pattern, and the display is fetching data from the programmed cursor address, the 6845 chip will output a &quot;cursor&quot; signal.  The CGA and MDA will then filter this signal with a redundant (worse than useless) blink circuit.  Whenever the filtered signal is high, the CGA or MDA will ignore the bit pattern of the character being displayed and unconditionally display the foreground color.  The cursor has no effect upon anything stored in memory, and because of the CGA's redundant blink circuit there's not even any way for software to tell whether it's visible at any moment in time.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2018-07-26T15:31:19.997" LastActivityDate="2018-07-26T15:31:19.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5607" PostTypeId="1" AcceptedAnswerId="5612" CreationDate="2018-01-31T21:09:18.723" Score="9" ViewCount="1004" Body="&lt;p&gt;It is generally agreed that Microsoft stole parts if not entire blocks of intellectual property from Digital Research, Xerox, Apple, and several other major corporations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To keep it simple, lets stipulate for MS actions prior to 1995 (Though they may have been sued for their pre-1995 actions at a later date).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Did any major corporation ever successfully sue Microsoft for intellectual property theft?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="576" LastEditDate="2019-12-03T10:43:24.747" LastActivityDate="2019-12-03T10:43:24.747" Title="Has any major corporation ever successfully sued Microsoft for intellectual property theft?" Tags="&lt;apple&gt;&lt;software-development&gt;&lt;software-development-kit&gt;" AnswerCount="2" CommentCount="18" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5608" PostTypeId="2" ParentId="5607" CreationDate="2018-01-31T21:25:24.657" Score="16" Body="&lt;p&gt;Stac Electronics obtained &lt;a href=&quot;https://web.archive.org/web/20070509205650/http://www.vaxxine.com/lawyers/articles/stac.html&quot; rel=&quot;noreferrer&quot;&gt;a 1994 judgment against Microsoft&lt;/a&gt; for patent infringement, based on Microsoft's use of knowledge it had learnt from Stac's source code for Stacker, which it had obtained while considering a purchase of the company, during implementation of DoubleSpace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsoft filed an appeal but Stac one-upped them with a successful injunction on sales of affected copies of DOS, so Microsoft ended up settling. So Stac's action was a success.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stac had IPOd in 1992, selling 3 million shares at &lt;a href=&quot;https://www.cbsnews.com/news/teslas-future-10-post-ipo-disasters/&quot; rel=&quot;noreferrer&quot;&gt;&quot;a a respectable&quot;&lt;/a&gt; $12/share (though it quickly dropped). Given Stacker's profile at the time and the respectable IPO, I would argue that the company meets the appropriate definition of a 'major corporation', albeit that it wasn't a Xerox or Apple as I'm willing to wager that's more value than was contemporaneously assigned to Digital Research.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-01-31T21:45:16.840" LastActivityDate="2018-01-31T21:45:16.840" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5609" PostTypeId="1" AcceptedAnswerId="8552" CreationDate="2018-02-01T02:26:50.640" Score="13" ViewCount="4770" Body="&lt;p&gt;IBM's CGA and the Commodore 128's RGB video output both use a DE-9 connector. How do I adapt the CGA video output from an IBM XT 5160 or Commodore 128 to a modern monitor?&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="15334" LastEditDate="2021-02-08T11:43:28.323" LastActivityDate="2021-02-08T11:43:28.323" Title="How can I adapt a digital CGA/C128 signal (RGBI DE-9) to a modern monitor?" Tags="&lt;video&gt;&lt;commodore-128&gt;&lt;old-hardware-adaptation&gt;&lt;cga&gt;" AnswerCount="6" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5610" PostTypeId="2" ParentId="5609" CreationDate="2018-02-01T02:26:50.640" Score="9" Body="&lt;p&gt;One strategy is to convert the digital to analog, then the analog to VGA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CGA consists of &lt;strong&gt;digital&lt;/strong&gt; red, green, blue, and intensity (&lt;strong&gt;RGBI&lt;/strong&gt;) 5V signals, plus horizontal (15.75 kHz) and vertical (59.92 Hz) sync. VGA consists of &lt;strong&gt;analog&lt;/strong&gt; red, green and blue signals (0.7V peak to peak), plus horizontal (31.46875 kHz) and vertical (59.94 Hz) sync (&lt;strong&gt;RGBHV&lt;/strong&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first step is to convert digital RGBI to analog RGB. This can be done with a simple resistor ladder. The &lt;a href=&quot;https://gglabs.us/node/2022&quot; rel=&quot;nofollow noreferrer&quot;&gt;GGLabs CGA2RGB&lt;/a&gt; does this conversion, fixes the impedence, and adds composite sync (CSync) to the output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;The GBS-8200 claims to support CGA as input (which implies digital RGBI), but in reality it &lt;a href=&quot;http://www.insentricity.com/a.cl/219/cgargbi-to-analog-for-the-commodore-128&quot; rel=&quot;nofollow noreferrer&quot;&gt;only supports analog RGB&lt;/a&gt;, and it only supports RGBS (using CSync, not HVSync) on signals below VGA frequencies.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next and final step is to convert HSync from 15.75 kHz to 31+ kHz. A &lt;a href=&quot;http://15khz.wikidot.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;small list of LCD monitors&lt;/a&gt; support 15 kHz analog RGB signals directly, but most require something like a GBS-8200, OSSC, or Framemeister XRGB-Mini to do the HSync conversion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 2018-12-14: See Stephen Kitt's answer above for a new all-in-one solution called the MCE2VGA.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-12-14T21:21:25.923" LastActivityDate="2018-12-14T21:21:25.923" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5611" PostTypeId="1" CreationDate="2018-02-01T05:17:49.917" Score="9" ViewCount="1638" Body="&lt;p&gt;I recently got the idea to start an 8088 system because I've been really interested in retro computing and the idea of a &quot;breadboard computer&quot; sounds very fun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I've read, every homebrew 8088 system requires the use of the 8284 clock generator chip in order to function. Because the 8088 just has a single clock input pin, would I be able to hook up a different method of clock generation? A 4-pin crystal, or 555 timer maybe? I am asking because i have tried looking for the 8284 and I cannot get it here in Australia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="7831" LastActivityDate="2018-02-08T19:43:33.640" Title="Do I have to use an 8284 chip with the 8088?" Tags="&lt;8-bit-microcomputers&gt;&lt;8088&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5612" PostTypeId="2" ParentId="5607" CreationDate="2018-02-01T07:50:22.990" Score="17" Body="&lt;p&gt;&lt;em&gt;Alcatel-Lucent&lt;/em&gt; won a lawsuit against MS in 2008 on a patent for audio file playback. That was later overruled by a higher court.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Bristol Technology&lt;/em&gt; attacked MS for not revealing needed Windows sources and entering other markets. MS was charged to pay $1M to Bristol in 2000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Spyglass&lt;/em&gt;, the company that originally built what is Internet Explorer today, filed a case against MS on the basis that MS was giving their product away for free after they licensed it from them, inhibiting them from making any money and won $8M (which I would consider a ridiculously low sum today - apparently, internet wasn't considered important by that court at that time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Stac&lt;/em&gt; was already mentioned in another answer&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Sun Microsystems&lt;/em&gt; were successful in court in forcing MS stop shipping their own &quot;MS standard&quot; Java VM, probably the only company that successfully attacked MS's traditional way of working with open industry standards (pretend to adopt, change in an incompatible way, take over, make your own version). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were numerous lawsuits other than that in MS history, obviously. MS policy has apparently always been to settle such lawsuits in private agreements outside court.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of those (except the first, which MS won in the long run) were not directly on &lt;strong&gt;theft&lt;/strong&gt; of IP, but rather improper &lt;strong&gt;usage&lt;/strong&gt; of IP or &quot;predatory business practices&quot;. I personally think IP theft is &lt;em&gt;so hard to prove&lt;/em&gt;, (especially has been in the early days, and see SCO vs. Linux) that lawyers will likely revert to other means to get at someone if they can. Most of the accusals of IP theft MS decided to settle outside court, probably to cover the details.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-02-01T14:41:19.330" LastActivityDate="2018-02-01T14:41:19.330" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="5613" PostTypeId="2" ParentId="5611" CreationDate="2018-02-01T08:23:29.843" Score="6" Body="&lt;p&gt;The short answer is you &lt;strong&gt;&lt;em&gt;should&lt;/em&gt;&lt;/strong&gt; use a 8284 chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The long answer is the functions could be duplicated by extensive external circuitry, but why would you want to? The 8284 function is described thus:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;The 8284 contains a clock generator capable of a third the frequency&#xA;  of the input clock (up to 8MHz with the 8284A), with sources&#xA;  selectable between an external crystal and clock input. The main clock&#xA;  output consists of a 4.5V (Vcc @ 5V) square wave at a 33.3% duty&#xA;  cycle, with an additional peripheral clock running at half of the main&#xA;  clock and a 50% duty cycle. Additional logic is provided to&#xA;  accommodate delays to allow for proper system start-up.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Forgetting for a moment the reset circuitry, the 8284 provides two synced noise-free clocks with proper voltage and wave shape - this is not a trivial matter to accomplish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every minimal circuit I found (over 50) and YouTube basic design projects has one - especially the breadboard designs. Breadboard designs are known for their simplicity and if the chip was not needed, at least some of the  breadboard designs would not have it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Informative links:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.google.com/search?q=8088%20minimal%20circuit&amp;amp;client=firefox-b-1-ab&amp;amp;tbm=isch&amp;amp;tbo=u&amp;amp;source=univ&amp;amp;sa=X&amp;amp;ved=0ahUKEwiroqG7oITZAhVW0WMKHRi1AQgQ7AkINg&amp;amp;biw=1323&amp;amp;bih=752&quot; rel=&quot;nofollow noreferrer&quot;&gt;circuits - 8088 minimal circuit&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.ee.hacettepe.edu.tr/~alkar/ELE414/dirz2005/w7-414-[2005].pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Minimal 8086/8088 theory and circuit design&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.homebrew8088.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Homebrew 8088&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2018-02-05T11:31:45.240" LastActivityDate="2018-02-05T11:31:45.240" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5616" PostTypeId="2" ParentId="5611" CreationDate="2018-02-01T14:58:20.540" Score="8" Body="&lt;p&gt;Of course, you don't need 8284 to let your 8088 run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First let see what tasks 8284 does, according to its datasheet &lt;a href=&quot;http://www.ndr-nkc.de/download/datenbl/i8284a.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.ndr-nkc.de/download/datenbl/i8284a.pdf&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It makes clock for 8088 of special shape like 1-0-0-1-0-0-... where&#xA;the repeating frequency matches the specified 8088 frequency (2 to 5&#xA;MHz, according to this&#xA;&lt;a href=&quot;http://www.ndr-nkc.de/download/datenbl/i8088.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.ndr-nkc.de/download/datenbl/i8088.pdf&lt;/a&gt;). The&#xA;durations of each '0' or '1' interval are the same. 8284 does it by&#xA;dividing input clock by 3. The fact also worth mentioning is that clock levels (logic 0 and logic 1) for 8088 are simple TTL ones, unlike, for example, i8080 and Z80.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It synchronizes reset for 8088 by its clock's negative edge.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It does also some magic with 'READY' signals, but if you don't ever need stretching 8088 bus cycles, you can simply drop this feature off and let 8088 have a constant on its 'READY' pin (the bus is always ready).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;From this little review it is now obvious that nothing will stop you from getting 8088 work without 8284 - provided you does exactly what 8284 would do.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2018-02-01T15:05:42.193" LastActivityDate="2018-02-01T15:05:42.193" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5617" PostTypeId="5" CreationDate="2018-02-01T18:19:17.463" Score="0" Body="" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-02-01T18:19:17.463" LastActivityDate="2018-02-01T18:19:17.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5618" PostTypeId="4" CreationDate="2018-02-01T18:19:17.463" Score="0" Body="IBM Color Graphics Adapter: signals, sources and receivers." OwnerUserId="75" LastEditorUserId="15334" LastEditDate="2021-02-25T11:13:29.357" LastActivityDate="2021-02-25T11:13:29.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5619" PostTypeId="2" ParentId="5609" CreationDate="2018-02-01T18:57:05.260" Score="6" Body="&lt;p&gt;The easiest approach is probably to convert to a component video signal.  If you pass the R, G, B, and I signals through a couple inverting buffers (so you have buffered versions of complemented and non-complemented signals) and formulated a composite sync signal, you could then use resistor dividers to generate Y, U, and V signals which could be fed into a component video input.  Component video is allowed to operate down to 15.75Khz, though some monitors may not be totally happy with a non-interlaced signal at that frequency.  Producing the composite sync might be as simple as passing the vertical and horizontal sync signals through an XOR gate, or perhaps just using the horizontal sync signal alone (some devices might output a composite sync signal on the horizontal sync pin).  Alternatively, some devices that use the 9-pin connector output a composite video signal on pin 7.  This is apt to be of very poor quality, but should have an acceptable sync signal.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2018-02-01T22:05:49.497" LastActivityDate="2018-02-01T22:05:49.497" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5620" PostTypeId="2" ParentId="5611" CreationDate="2018-02-01T19:41:26.113" Score="13" Body="&lt;p&gt;Caveat: I can't confirm that this works acceptably, as I haven't been able to find any references to anyone who has done it, but by reading the datasheet of the &lt;a href=&quot;https://www.intersil.com/content/dam/Intersil/documents/80c8/80c88.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;80C88&lt;/a&gt; it seems it should work there, and it &lt;em&gt;may&lt;/em&gt; also work on an original HMOS &lt;a href=&quot;http://www.ndr-nkc.de/download/datenbl/i8088.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;8088&lt;/a&gt;, but that's less certain as the HMOS design wasn't static (although it could work at relatively slow clock speeds, e.g. 2MHz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The primary purpose of the 8284 is to provide a clock with 33%/67% duty cycle.  The reason for this, per the 8088 datasheet, is &quot;to provide optimized internal timing&quot;.  That is to say, the chip can run faster because it has an asymmetric duty cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there is nothing to say that you need the chip to run as fast as it possibly can; if you are happy to run it at a slower rate, there is nothing in the datasheet's timing requirements that suggests that it &lt;em&gt;can't&lt;/em&gt; be run with a 50% duty cycle.  Just that you have to run it slower in order to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8088 (and the modern replacement 80C88) is available in two speed grades: 80[C]88 (max clock speed 5MHz) and 80[C]88-2 (max clock speed 8MHz).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the 5MHz variant, the requirements for the CLK pin timings are specified as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Description             Min   Max  Unit&#xA;CLK Cycle period        200   500  ns&#xA;CLK Low Time            118        ns&#xA;CLK High Time           69         ns&#xA;CLK Rise Time                 10   ns&#xA;CLK Fall Time                 10   ns&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Assuming your clock source has the maximum 10ns  rise &amp;amp; fall times, this means that you can meet the requirements with a 50% duty cycle of 118ns.  This gives a total clock rate of 1s/(118*2 + 10*2)ns = ~3.9MHz.  If you can manage a faster 7ns rise &amp;amp; fall (which should be reasonably easy), that increases to 4MHz, which is easy to produce with readily available crystal oscillators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the 8MHz variety, the timings are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Description             Min   Max  Unit&#xA;CLK Cycle period        125   500  ns&#xA;CLK Low Time            68         ns&#xA;CLK High Time           44         ns&#xA;CLK Rise Time                 10   ns&#xA;CLK Fall Time                 10   ns&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Again assuming you can manage a 7ns rise/fall time (because it works out neater in this case too), this allows a maximum 6.67MHz (or 6.41MHz with 10ns).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can live with this speed for whichever chip you acquire, I see nothing in the datasheet that suggests that using it this way wouldn't work.  Then all you need to do is replace the power-on reset functionality with an alternative circuit that meets the 8088's requirements (it needs the RESET line held high for at least 4 cycles at power on in order to initialize correctly) ... a common approach in lower cost computers of the 80s was to use a 555 chip in its monostable configuration (as described in its datasheet) for this purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This suggests that it is relatively easy to do without an 8284.  The question is: should you?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If you really want maximum performance, getting one would probably be the easiest way of achieving that.  The next best approach would be to use a faster clock (e.g. 15MHz), and either divide it with a counter (counting 0..2 before resetting, with a nor gate to produce a high level signal only when in state 0, for example -- although if you need a 50% duty cycle clock as well, you'll need to run at 30MHz and count to 6, and the logic gets a bit more complex), or run it through a shift register to produce the required output, but that's probably a little bit trickier.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you are willing to deal with chinese vendors, I see 82C84 chips available on aliexpress.com at sub-$1 prices plus relatively cheap postage.  These can be used with either the CMOS or HMOS versions of the processor; they are functionally identical as far as I can see.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you can live with slow performance, and you'd rather deal with local vendors, 82C84s seem to be hard to acquire.  None of the vendors I use regularly stock them, so you're looking at the very least a long wait while they order them in, and you may be looking at a fairly large minimum order.  They're also not anywhere near as cheap as the chinese vendors: I see prices of at least $5 here.  In this situation, I'd suggest doing without one, and making a reset circuit from a 555, which should be easy to acquire locally and cost a lot less than $5. :)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;But there is another way...&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As pointed out by @ChrisStratton in comments to @lvd's answer, you can easily use a modern microcontroller to produce the required signals.  Obviously this isn't for everyone: in many cases the purpose of projects like this is to find novel ways of using the technology that was available at a particular point in time, which would rule out this approach, but if that's not why you're doing this, then this approach could be the best way of solving this particular problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the comments there for my research on how I came to this design, but it seems if you want to do this, a good way of doing it would be to use a PIC12F1571 chip.  This chip is cheap (in the UK, £0.59 in unit quantities, or £0.49 in quantities of 10) and readily available.  It can run up to 32MHz, which is fast enough to generate precise clocks for a 5MHz 8088 along with a 50% duty cycle clock for peripherals, or just a CPU clock for running an 8088-2 at very close to its maximum 8MHz frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 5MHz usage, you'd use it with an external 30MHz crystal, and set up two of its PWM outputs to produce a 2-cycle high, 4-cycle low output (for the CPU clock) and a 3-cycle high, 3-cycle low output (for the peripheral clock).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This uses up 5 of the chip's 8 pins (VCC, GND, and CLK inputs; CCLK and PCLK outputs).  There are 3 more available; you can use 2 of them for a reset switch input and RESET signal output and have then entirely duplicated the functionality of the 8284.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the 8088-2, most things you read would suggest running it at 24MHz with a 1:2 cycle setting on the PWM to produce the CPU clock.  Unfortunately this gives results that are &lt;em&gt;slightly&lt;/em&gt; out-of-spec -- the clock high phase would be 42ns long, but the datasheet requires 44ns.  Now, this would &lt;em&gt;almost certainly&lt;/em&gt; work correctly, but to keep within spec you could use a 22.5792MHz crystal to provide an external clock to the MCU.  The same 1:2 setting on the PWM would now produce a 44ns/89ns cycle, which is in spec and lets you run the CPU at 7.5264MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(22.5792MHz crystals are apparently quite common: they're 512 * 44100 cycles per second, which makes them useful for running the processors in CD players)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want performance, then you'll need a faster microcontroller still.  We're starting to push the limits of what's available without using surface-mount chips, but the PIC18F24K42 is available.  It's a DIP-28 chip, so quite large, but maybe you can find other uses for the other pins (turbo switch and output to a 7-segment LED display to show the actual speed, perhaps?).  It can run at up to 64MHz; at that speed a 3:5 ratio on the PWM gives a 47ns/78ns clock which gives the maximum 8MHz and is within the CPU's specs, and obviously 4:4 ratio can be used for a peripheral clock.  You'd also have plenty of spare PWMs (this chip has 10 of them) which could be used for other useful clocks: a 3-phase 21.333MHz clock could be very handy for implementing a DRAM controller, for example.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-02-08T19:43:33.640" LastActivityDate="2018-02-08T19:43:33.640" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5621" PostTypeId="2" ParentId="5609" CreationDate="2018-02-01T21:00:27.793" Score="2" Body="&lt;p&gt;In case you aim for a single box to convert digital RGB video to HDMI, there's boxes around like &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B00DI6HTOI&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; that converts from SCART (which is RGB) to HDMI. I use one somilar to the one in the link to connect most of my old comuters (Sinclair Spectrum and QL) to a modern HDMI monitor. If your monitor has USB connectors, you can also conveniently power the converter from there. This gives a nice sharp picture.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-02-01T21:00:27.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5622" PostTypeId="1" AcceptedAnswerId="5626" CreationDate="2018-02-02T00:03:42.450" Score="13" ViewCount="719" Body="&lt;p&gt;While &lt;a href=&quot;https://chat.stackexchange.com/transcript/message/42611253#42611253&quot;&gt;chatting&lt;/a&gt; about data recovery, an obscure filesystem came up. It apparently claimed the MBR partition ID 0x20 and was named &amp;quot;Willowsoft Overture File System (OFS1)&amp;quot;. In the modern world, it seems to only be seen when a partition table is corrupted.&lt;/p&gt;&#xA;&lt;p&gt;Digging back a bit, it's possible to find references to it going back to 2000: &lt;a href=&quot;https://web.archive.org/web/20000903024208/https://www.win.tue.nl/%7Eaeb/partitions/partition_types-1.html&quot; rel=&quot;noreferrer&quot;&gt;https://web.archive.org/web/20000903024208/https://www.win.tue.nl/~aeb/partitions/partition_types-1.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;20&lt;/p&gt;&#xA;&lt;p&gt;Rumoured to be used by Willowsoft Overture File System (OFS1), if there is such a thing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;With a possible relation to a &amp;quot;Willowtech Photon coS&amp;quot;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;19&lt;/p&gt;&#xA;&lt;p&gt;Used for Willowtech Photon coS (completely optimized system) by willow@dezine.net. See dejanews.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A bit more digging and the earliest reference I can find is from 1997: &lt;a href=&quot;https://groups.google.com/forum/#!search/willowsoft$20overture%7Csort:relevance/de.comp.standards/upmxnfn2DAs/yXlOFDvXD84J&quot; rel=&quot;noreferrer&quot;&gt;https://groups.google.com/forum/#!search/willowsoft$20overture|sort:relevance/de.comp.standards/upmxnfn2DAs/yXlOFDvXD84J&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, this is where the trail gets cold. &lt;a href=&quot;https://web.archive.org/web/19990208012646/http://www.dezine.net:80/&quot; rel=&quot;noreferrer&quot;&gt;dezine.net appears&lt;/a&gt; to have been a web hosting company. Dejanews was apparently acquired by Google, and not much more is available on Google Groups.&lt;/p&gt;&#xA;&lt;p&gt;I would like to know where this filesystem was used - was it on an IBM PC-compatible, as the use of MBR suggests? Was it older, or contemporary with PC-DOS/MS-DOS? Did it even exist?&lt;/p&gt;&#xA;" OwnerUserId="1960" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-02-02T16:33:00.230" Title="Where was the Willowsoft Overture File System (OFS1) used?" Tags="&lt;history&gt;&lt;file-system&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5623" PostTypeId="1" AcceptedAnswerId="5636" CreationDate="2018-02-02T04:46:07.560" Score="22" ViewCount="3867" Body="&lt;p&gt;At one time bubble memory was advertised as being able to store huge amounts of data in the size of a sugar cube. I don't remember what the memory density was compared to today's SD cards. &lt;strong&gt;What happened to bubble memory - is it still being sold?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7848" LastActivityDate="2018-02-10T23:25:43.097" Title="What happened to bubble memory - is it still being sold?" Tags="&lt;memory&gt;&lt;storage&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5624" PostTypeId="2" ParentId="5623" CreationDate="2018-02-02T05:24:38.313" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I don't remember what the memory density was compared to today's SD cards.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, today's flash offers a way (several magnitudes) denser storage, but it is also way less reliable.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What happened to bubble memory - is it still being sold?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It might be still around. Today bubble memory is a rather special niche market with most uses in military and space applications, due to its extreme ruggedness and reliability in harsh environments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The former bubble memory division of Intel has been spun off as &lt;strong&gt;&lt;a href=&quot;http://listings.findthecompany.com/l/17427090/Memtech-SSD-Corporation&quot; rel=&quot;nofollow noreferrer&quot;&gt;MemTech Technologies&lt;/a&gt;&lt;/strong&gt; and continued development and sales maybe until the early 2000s. The company was active at least until the late 2000s, but seems to be defunct now (See below).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Development continues today. Maybe search for &lt;strong&gt;Vertical Bloch Line Technology&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Information found about MemTech:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/439/scruss&quot;&gt;Scruss&lt;/a&gt;&lt;/em&gt; did uncover some additional information about MemTech. According to a text to a &lt;a href=&quot;http://techchannel.att.com/play-video.cfm/2011/10/21/AT&amp;amp;T-Archives-Magnetic-Bubbles&quot; rel=&quot;nofollow noreferrer&quot;&gt;video about bubble development&lt;/a&gt; from 2011 by AT&amp;amp;T they actively offered bubble memory at least until the mid 2000s. Similar with a &lt;a href=&quot;https://www.bizjournals.com/eastbay/stories/2005/02/21/story6.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;2005 article&lt;/a&gt;. But here the term Flash is used several times to describe the technology and it's a bit unclear, as at the same time they refer back to prior use in military devices. So maybe they've started kind of transition around that time frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He also pointed out a blogpost by John Dvorak fittingly titled &lt;em&gt;&quot;&lt;a href=&quot;http://www.dvorak.org/blog/whatever-happened-to-bubble-memory/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Whatever Happened to Bubble Memory?&lt;/a&gt;&quot;&lt;/em&gt; from November 2006, basically a 'reprint' of his &lt;a href=&quot;http://go.galegroup.com/ps/i.do?p=AONE&amp;amp;u=tplmain&amp;amp;id=GALE%7CA11210891&amp;amp;v=2.1&amp;amp;it=r&amp;amp;sid=AONE&amp;amp;asid=119a1d03&quot; rel=&quot;nofollow noreferrer&quot;&gt;column from the September 1991 issue&lt;/a&gt; of &lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_Shopper_(US_magazine)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computer Shopper&lt;/a&gt;,  mentioning MemTech and Bubbles as present (in 1991).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="2126" LastEditDate="2018-02-04T09:01:29.620" LastActivityDate="2018-02-04T09:01:29.620" CommentCount="22" ContentLicense="CC BY-SA 3.0" />
  <row Id="5625" PostTypeId="2" ParentId="5609" CreationDate="2018-02-02T09:15:34.957" Score="2" Body="&lt;p&gt;If you have a genuine CGA card, it should have a composite video output.  I would recommend simply using that.  For one, lots of devices still have a composite input, and the cables are very common.  One thing that's often forgotten is that, for graphics, CGA composite video looks &lt;em&gt;much&lt;/em&gt; better than CGA's notoriously horrible digital graphics.  Games &lt;a href=&quot;https://www.youtube.com/watch?v=niKblgZupOc&quot; rel=&quot;nofollow noreferrer&quot;&gt;written when CGA was common&lt;/a&gt; actually look about as good as contemporary Apple and Commodore computers did.  Of course, the digital output produced much sharper text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of composite-to-HDMI adapters on the market (&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B00I482KZI&quot; rel=&quot;nofollow noreferrer&quot;&gt;example&lt;/a&gt;, not an endorsement, just the first one I found) which will hopefully produce much nicer looking graphics than converting the digital output.  You might even get lucky and get legible text out of your HDMI converter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that if you plug the CGA composite output into a monochrome composite monitor you'll get nice sharp text as well.&lt;/p&gt;&#xA;" OwnerUserId="7775" LastActivityDate="2018-02-02T09:15:34.957" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5626" PostTypeId="2" ParentId="5622" CreationDate="2018-02-02T16:14:56.010" Score="14" Body="&lt;p&gt;Documents such as &lt;a href=&quot;http://www.datadoctor.biz/data_recovery_programming_book_chapter3-page11.html&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; expand slightly on the attribution of 19h to Willowtech Photon COS with:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Code 19H is Claimed for Willowtech Photon COS by Willow Schlanger.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So Willowtech was either an individual or a company named after its founder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Willow Schlanger is named as a contributor to Ralf Brown's Interrupt List in 1997, which is the oldest source that has yet been discovered for this partition documentation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Willow Schlanger maintains a copy of that document on &lt;a href=&quot;http://www.undocumented.info/oldinfo/index.php&quot; rel=&quot;noreferrer&quot;&gt;his personal web page&lt;/a&gt; and also offers other relatively low-level documentation. His blog reveals that &lt;a href=&quot;http://www.undocumented.info/home/willowschlanger/content/wordpress/2013/07/&quot; rel=&quot;noreferrer&quot;&gt;he was born in 1982&lt;/a&gt;, so was the correct age to be making hubristic statements about &quot;completely optimised system&quot;s in 1997. Willowtech remains entirely obscure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the likely sequence of events is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a teenager, interested in OS development, helped to compile BIOS documentation that includes a list of master boot record IDs;&lt;/li&gt;&#xA;&lt;li&gt;being interested in hobby OS development, he decided to reserve an ID for his own use;&lt;/li&gt;&#xA;&lt;li&gt;the document he contributed to happened to become the only readily-available source for those numbers; and&lt;/li&gt;&#xA;&lt;li&gt;as such his product-that-probably-never-was has found itself included into a whole bunch of other, more prolific documents.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Most of us are lucky enough that our teenage actions rest safely in the past. One of Willow Schlanger's happens quietly to have gone viral.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-02-02T16:33:00.230" LastActivityDate="2018-02-02T16:33:00.230" CommentCount="1" CommunityOwnedDate="2018-02-02T16:14:56.010" ContentLicense="CC BY-SA 3.0" />
  <row Id="5627" PostTypeId="1" CreationDate="2018-02-02T18:51:20.900" Score="1" ViewCount="3776" Body="&lt;p&gt;I would like to get working with IBM System/360 on the Hercules emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use a mac.&#xA;With macports I have installed Hercules and c3270.&#xA;Through this site: &lt;a href=&quot;https://www.youtube.com/watch?v=ZtK_p06br9k&quot; rel=&quot;nofollow noreferrer&quot;&gt;Running the IBM OS/360 MVT operating system on Hercules&lt;/a&gt; ,I followed the instructions and have downloaded &lt;a href=&quot;https://app.box.com/s/m7qe4133q93cc3pfa14wvbjrm5nokat1&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Hercules-ready  MVT 21.8 images&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Than I did the following instructed in the &lt;code&gt;00README.txt&lt;/code&gt; file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Startup:&#xA;--------&#xA;&#xA;1.   From the asp directory, start Hercules:&#xA;&#xA;      hercules -f conf/asp.conf&#xA;&#xA;2.   Using a 3270 emulator, start a telnet session to port 3270 for&#xA;     device 010.  This is the OS master console.  It must be defined&#xA;     and connected at IPL, or the IPL will hang.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The first instruction gives me no trouble.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Concerning the second instruction, I found at this site the workings of the 3270 terminal: &lt;a href=&quot;https://fish-git.github.io/html/telnet.html#x3270&quot; rel=&quot;nofollow noreferrer&quot;&gt;Telnet/tn3270 Console How-To for Hercules Version 4&lt;/a&gt; ,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Start an x3270 session and connect to Hercules with the following&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Linux:&lt;/strong&gt;&lt;code&gt;x3270 -port nnnn -model 32xx-x hostname&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume this works the same for the console version c3270 I installed, thus:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;c3270 -port nnnn -model 32xx-x hostname&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;-port nnnn&lt;/strong&gt; I replaced with -port 3270&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;-model 32xx-x&lt;/strong&gt; with 3279-2 (this seems not so important ?, just about terminal screen size)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;hostname&lt;/strong&gt; with 010 (since in the second instruction in the &lt;code&gt;00README.txt&lt;/code&gt; file it says &lt;code&gt;device 010&lt;/code&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus the whole command is: &lt;code&gt;$ c3270 -port 3270 -model 3279-2 010&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gives an error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;OSX@1:~ $ c3270 -port 3270 -model 3279-2 010&#xA;c3270 v3.3.15ga9 Sat Sep  2 12:15:29 UTC 2017&#xA;&#xA;Copyright 1989-2014 by Paul Mattes, GTRC and others.&#xA;Type 'show copyright' for full copyright information.&#xA;Type 'help' for help information.&#xA;&#xA;Trying 0.0.0.8, port 3270...&#xA;Connect to 010, port 3270: No route to host&#xA;&#xA;[Press &amp;lt;Enter&amp;gt;]&#xA;OSX@2:~ $&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What is going wrong here ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And what is the meaning of ?:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;This is the OS master console.  It must be defined&#xA;     and connected at IPL, or the IPL will hang.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 1.&lt;/strong&gt; (2 feb. 2018 / 21:29)&#xA;In respect to @wizzwizz4, I tried &lt;code&gt;017700000001&lt;/code&gt; instead of &lt;code&gt;010&lt;/code&gt; , as device number, with the following result:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ c3270 -port 3270 -model 3279-2 017700000001&#xA;...&#xA;Trying 127.0.0.1, port 3270...&#xA;Connect to 017700000001, port 3270: Connection refused&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 2.&lt;/strong&gt; (3 feb. 2018 / 12:10) &lt;strong&gt;Solved for another setting&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried a different setting.&#xA;On mac os x I have installed &lt;a href=&quot;https://www.vagrantup.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vagrant&lt;/a&gt; ,and a vagrantbox for linux 14.04lts. I downloaded from &lt;a href=&quot;http://wotho.ethz.ch/tk4-/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The MVS 3.8j Tur(n)key 4- System&lt;/a&gt; the zip-file &lt;a href=&quot;http://wotho.ethz.ch/tk4-/tk4-_v1.00_current.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;tk4-_v1.00_current.zip&lt;/a&gt;. And I installed with &lt;code&gt;sudo apt install c3270&lt;/code&gt; the telnet terminal emulator in the linux vagrantbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the linux vagrantbox I extracted the zipfile to the folder &lt;code&gt;tk4&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I did:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;vagrant@ubuntu:~$ cd tk4&#xA;vagrant@ubuntu:~/tk4$ ./mvs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which starts up MVS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then in another tab of the same terminal&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;vagrant@ubuntu:~$ c3270 localhost:3270&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That gives the login screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I could fill in username and password.&#xA;Obviously this is not solving how to use any version of IBM System/360 etc. directly on mac os x. The TK4 version didn't seem to work on os x and is probably preconfigured for Linux and not os x.&#xA;However I am glad it does work the other way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this video &lt;a href=&quot;https://www.youtube.com/watch?v=UOL0HtlXVKM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mainframe operating system MVS 3.8 turnkey TK4 how to install and operate&lt;/a&gt; helpfull. As well as &lt;a href=&quot;http://wotho.ethz.ch/tk4-/MVS_TK4-_v1.00_Users_Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MVS_TK4-_v1.00_Users_Manual.pdf&lt;/a&gt;, with information on username (for instance &quot;HERC01&quot;) and password (for instance &quot;CUL8TR&quot;(belonging to HERC01)).&lt;/p&gt;&#xA;" OwnerUserId="7858" LastEditorUserId="7858" LastEditDate="2018-02-03T20:11:25.093" LastActivityDate="2018-02-20T08:02:04.307" Title="How to connect c3270 terminal with hercules emulator?" Tags="&lt;ibm&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5628" PostTypeId="2" ParentId="5627" CreationDate="2018-02-02T19:37:39.137" Score="4" Body="&lt;p&gt;&lt;code&gt;010&lt;/code&gt; has a preceding &lt;code&gt;0&lt;/code&gt;. This means &quot;treat this number as octal&quot; which is base-8. This uses the digits &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;2&lt;/code&gt;, &lt;code&gt;3&lt;/code&gt;, &lt;code&gt;4&lt;/code&gt;, &lt;code&gt;5&lt;/code&gt;, &lt;code&gt;6&lt;/code&gt; and &lt;code&gt;7&lt;/code&gt;. After &lt;code&gt;07&lt;/code&gt; is the number written as 8 in decimal (base 10), but there aren't any digits left. So, like in decimal, we use two digits: &lt;code&gt;010&lt;/code&gt; = 8. This looks familiar...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;Trying 0.0.0.8, port 3270...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is interpreting a single number as an IPv4 address. This is done by checking the format of the IPv4 address:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If it looks like &lt;code&gt;aa.bb.cc.dd&lt;/code&gt;, treat each decimal number as a seperate byte. For example, &lt;code&gt;123.45.67.89&lt;/code&gt; → &lt;code&gt;123.45.67.89&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;If it looks like &lt;code&gt;aa.bb.cc&lt;/code&gt;, treat the first two decimal numbers as bytes, but treat the third number as a two-byte literal. For example, &lt;code&gt;123.45.678&lt;/code&gt; → &lt;code&gt;123.45.2.166&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;If it looks like &lt;code&gt;aa.bb&lt;/code&gt;, treat the first decimal number as a byte but treat the second number as a three-byte literal. For example, &lt;code&gt;123.456789&lt;/code&gt; → &lt;code&gt;123.6.248.85&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;If it looks like &lt;code&gt;aa&lt;/code&gt;, treat the number as a four-byte literal. For example, &lt;code&gt;8&lt;/code&gt; → &lt;code&gt;0.0.0.8&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Apparently, this program not only supports decimal literals but also octal literals. In order to reach &lt;code&gt;localhost&lt;/code&gt; (a loopback address back to the requesting computer on almost every modern system) you need to use the IP address &lt;code&gt;127.0.0.1&lt;/code&gt;, which is &lt;code&gt;0x7F000001&lt;/code&gt; as a hexadecimal literal or &lt;code&gt;017700000001&lt;/code&gt;. So, try that number in place of &lt;code&gt;010&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This might solve the particular problem that you're having, but I expect that there are still a few others. Specifically, I don't think that's how you input the device number to this program.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2018-02-02T20:07:35.673" LastActivityDate="2018-02-02T20:07:35.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5629" PostTypeId="1" AcceptedAnswerId="5631" CreationDate="2018-02-03T01:48:22.800" Score="35" ViewCount="9557" Body="&lt;p&gt;Prior to the 1981 release of the IBM PC, the VT105 (72×20 1971), VT52 (80×12 1974), and VT100 (80×25 1978) text terminals were used on many Unix machines and the PDP-11 (probably the most widely used computer at the time). However, just as many other computers used widths of 60 (type writer), 132 (wide printer), or convenient memory page sizes of 32 or 64.&lt;/p&gt;&#xA;&lt;p&gt;TV's became quite blurry approaching 132 (B&amp;amp;W@625px) char so that seems to be the hardware maximum width upper limit.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Where did the 80×25 text terminal size come from?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7848" LastEditorUserId="15334" LastEditDate="2021-01-22T13:34:24.563" LastActivityDate="2021-01-22T13:34:24.563" Title="Why did 80×25 become the text monitor standard?" Tags="&lt;history&gt;&lt;graphics&gt;&lt;crt-monitor&gt;" AnswerCount="3" CommentCount="15" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="5630" PostTypeId="2" ParentId="5603" CreationDate="2018-02-03T03:01:50.020" Score="-3" Body="&lt;p&gt;Its been a very long time since I used MSDOS but on most video cards it flashed, that is it put down a _for several refresh cycles of the video page, and then a dim rectangle ▒ for several refresh cycles.  so it looked like the character block was flashing on and off.  This could actually be changed.  As I recall you had to put lines in config.sys or Autoexec.bat. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember one mod people did was change to a little smiley face rather than the rectangle, like this ☺ but a square rather than round smiley. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use any character in the ascii dingbats see image(Note square smiley is second character.) and link bellow for wikipeidia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tSiny.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tSiny.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Code_page_437&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Code_page_437&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note it was latter MSDOS versions(I think 3.0+.) that added ascii dingbats.&lt;/p&gt;&#xA;" OwnerUserId="7860" LastActivityDate="2018-02-03T03:01:50.020" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5631" PostTypeId="2" ParentId="5629" CreationDate="2018-02-03T10:30:11.663" Score="19" Body="&lt;p&gt;A lot of early PCs and terminals were designed to use either TVs or monitors that were built around CRTs that were built to the same specifications as TVs.  While (traditional standard definition) TVs don't have a well defined upper limit of horizontal resolution, in practice few of them were capable of handling a signal which varied faster than about 13 or so MHz; in the end, when resolutions of analogue TV were standardized in order to transition to digital a final upper limit of 13.5MHz was defined, but few TVs other than the very best were actually able to reach that, at least in the 70s and 80s; monitors were slightly better, but not much because in many cases they were using the same CRTs, and there was little incentive to produce a higher quality CRT if the rest of the circuitry couldn't use it.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, in order to display a reasonable number of lines at a reasonable frame rate, there was an upper limit to the length of time a single line could take to display, which realistically was in the region of 50us.  50us * 13.5MHz = 675 pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Display hardware needs to have a pixel counter that reacts when a limit is reached.  It is easier to detect that limit if the binary pattern of it consists of a small number of digits that need to be matched followed by a larger number of zeros.  640 is a good candidate that is close to 675: you only need to examine 3 bits to produce a counter that counts up to it.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of these reasons, 640 pixels became a very popular horizontal resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, as you point out, 132 character displays &lt;em&gt;can&lt;/em&gt; be implemented within the range of a typical TV CRT; you'd need to use 5 pixel wide characters and aim for a resolution of 660 pixels. But with 5 pixels width, and the need to have empty space between characters, that means you have a maximum of 4 pixels per character, and 4 pixel wide fonts are generally quite &lt;a href=&quot;https://github.com/bradgrantham/bitmap_console_tests&quot; rel=&quot;noreferrer&quot;&gt;untidy-looking&lt;/a&gt; and can be hard to read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With 5 pixels to play with things become a bit better, but a major improvement in legibility happens at 6 pixels; along with spacing this means you can fit about 91 characters in a display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there was little demand for this width; 132 characters is useful because along with reasonable margins and standard fixed-width fonts, it's about the most characters you can fit on common paper size (e.g. A4 landscape or A3 portrait with 0.4&quot; margins and a 12CPI font, or 8&quot;x11&quot; with 0.5&quot; margins and the same font), so was useful because (1) you could use it for word-processing and see an approximation of what you'd see on paper and (2) you could have a printer that would print the same thing you saw on screen.  But there was no such threshold in the region of 91 characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;80 characters is, as described in the comments, very close to the width you can fit on standard paper sizes in portrait orientation.  Most typewriters and &quot;letter quality&quot; printers used either Courier Elite (12CPI) or Pica (10CPI). As long as you used reasonable margins you could fit a line of text of either of those onto an 80 character display, so it is particularly useful for word processing, and again you can easily get a printer that can print whatever you see on screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were other reasons, too.  As described in another comment, IBM's standard punched card format allowed 80 columns, and therefore even before switching to CRT-based terminals many computing activities were already optimized around data that would fit into 80 columns.  Existing databases that were being transitioned to video display may well have had 80 column maximum lengths on fields, for example, and therefore product buyers purchasing terminals will have wanted to ensure they could display those fields.  Programmers were used to programming with 80 column maximum per line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With 640 pixels being a natural, easy-to-implement screen width for systems using bitmapped frame buffers, those systems had another good reason: it made the text display logic easier to have 8 pixel wide characters, because then to display a row of pixels for a string you could just copy a byte from the font memory into the framebuffer and increment your pointer to move on to the next character, which is much easier than any alternative font width.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to why 25 rows dominated, it's simply a question of existing hardware and font preferences.  CRTs manufactured for TVs had 4:3 aspect ratio, so along with 640 pixels width, 480 pixels height gives you square pixels, which are desirable.  By far the most popular fixed-width font is and was Courier; Courier has an aspect ratio of 0.43; 8/0.43 = 18.6, so 19 pixels is probably the ideal height for each character on a square pixel screen.  25 rows * 19 pixels is the most you can fit in 480 pixels.  25*80 is also the most you can fit in a 2K buffer (for a monochrome display) or a 4K buffer (if you have a choice of 16 foreground/background colours).&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-02-05T09:10:09.047" LastActivityDate="2018-02-05T09:10:09.047" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="5632" PostTypeId="2" ParentId="5629" CreationDate="2018-02-03T10:56:10.067" Score="14" Body="&lt;p&gt;The 80 columns comes via IBM terminals such as the 3270, which themselves got it from IBM punched cards. There was no particular reason to pick 80 over some other width for punched cards except that it is a nice round number and reflects the engineering limits of the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 25 rows is due to the power-of-two nature of RAM chips. These were extremely expensive at the time and so the framebuffer size would be chosen to make efficient use of commonly-available chips. Assuming 80 character columns, 2^10 characters is 12.8 lines, 2^11 is 25.6 lines, and 2^12 is 51.2 lines. The first doesn't put enough text on screen to be useful. The latter has a lot going for it and some terminals did offer it, but the text is quite small and squashed. The intermediate size with 25 lines is just right.&lt;/p&gt;&#xA;" OwnerUserId="80" LastEditorUserId="80" LastEditDate="2018-02-04T21:06:44.637" LastActivityDate="2018-02-04T21:06:44.637" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5633" PostTypeId="1" CreationDate="2018-02-03T12:29:53.297" Score="9" ViewCount="1053" Body="&lt;p&gt;One of the weirdest misfeatures of the Apple II - and perhaps the dumbest thing Woz ever designed - is the vestigial priority system for IRQ and DMA on the Apple II expansion bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each slot has four pins devoted to this system: an input and output for each priority signal.  Expansion cards are supposed to check these signals and refrain from signalling IRQ or DMA when a higher priority card is doing so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For IRQ, this system is completely useless.  Software interrupt handlers check all interrupt sources in sequence anyway, and the IRQ signal to the CPU is open-collector and level-triggered (thus multiple simultaneous IRQs are safe and will work correctly).  So there is no need to avoid contention, and no particular reason a card should pay any attention to this signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For DMA, though, it's potentially more important.  Only one card can use DMA at a time, so you need some way to avoid contention.  Unfortunately it still doesn't work very well.  One major problem is that the system only works if all the cards using DMA are in adjacent slots, because an empty slot breaks the chain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This, combined with the use of separate in and out signals in the first place, implies that you are supposed to only signal downstream if you want to perform DMA.  But on the other hand, if you only signal downstream, a potential upstream card doesn't know that you've started DMA, and might interrupt your DMA transaction with its own.  Apparently, the intention was that a higher priority card could actually do this and you were supposed to watch for it and get off the bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, there's no timing information provided in any documentation I've found.  A compliant card could simply signal at the same time it begins a transaction, giving the downstream card no time to respond and leading to a potential bus fight.  This would also leave memory in an inconsistent state, with the downstream card's transaction half done.  The reference manuals usually mumble something about &quot;cards should usually connect the IN and OUT lines together&quot; without saying anything about how to actually use them to initiate DMA.  It would be easy to read that to mean you should signal both ways.  Making matters worse, the schematic shows lower numbered slots having higher priority, but at least one source (IIe tech reference) says HIGHER numbered slots have priority!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unsurprisingly, DMA cards in the Apple II were frequently incompatible with each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is what was actually done, and what was supposed to be done.  Did cards just ignore the DMA priority lines, did they signal one way or both ways, or could they even potentially be damaged (bus fight) if someone tried to drive signals upstream on the &quot;IN&quot; line?  Did higher-priority cards watch the open-collector DMA line to avoid interrupting existing transactions?  Did cards observe some informal software protocol to deal with the problem?  Or was it more of a &quot;pray, and tell the user to turn off DMA if there's a problem&quot; sort of thing?&lt;/p&gt;&#xA;" OwnerUserId="7775" LastActivityDate="2018-10-29T10:02:05.457" Title="Apple II bus: IRQ and DMA priority" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5634" PostTypeId="2" ParentId="5629" CreationDate="2018-02-03T14:34:50.603" Score="35" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Where did the 80x25 text terminal size come from?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Quick answer: It's one Punch Card Per Line&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Resulting in 24/25 lines (cards) per screen when using a 4:3 tube and a reasonable font as dictated by proportions fostered since Roman times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Detailed Answer:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Prior to the 1981 release of the IBM PC, the VT05 (72x20 1971), VT52 (80x12 1974), and VT100 (80x25 1978) text terminals were used on many Unix machines and the PDP-11 (probably the most widely used computer at the time).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Depends on the definition of widely, wouldn't it? *1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're maybe focusing a bit to much on the IBM PC and mini computers here. For one, there have been many terminal developments even before DEC started business, and even more when they did. And even more, common memory is defined by many parameters(*2).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;However, just as many other computers used widths of 60 (type writer), 132 (wide printer), or convenient memory page sizes of 32 or 64.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It might be a good idea not to mix up different devices made for different usage. And I'm not sure what a memory page size does here (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Type writers are meant to write letters, something no one really thought about when doing computers in the 1950s, even less before. Then again, as with terminals, there is a whole class of typewriters, called tabulators, that did provide a carriage for 132 columns (*4). Like with mainframe terminals, they were usually only seen in back office.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In general, there were two sizes defined in in pre-electronic data processing: 80 characters per block for storage and processing (and sometimes printing) and 132 characters for printing.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 80 character came from IBM's extended punch card design of ~1930. The 'original' Hollerith card of 1890 had already evolved from 24 columns (characters) to 45 while keeping the basic structure. Still customers continued to ask for ever more storage capacity (*5). So one of the engineers Mr. Watson assigned the task came up with the idea of rectangular holes instead of the round one used up until then. Rectangular holes allowed (almost) doubling the density (*6) form 45 to 80 symbols while keeping the size of the card constant. This happened to be an important decision, as it only required modification on parts of the existing designs, while most of the production chain from paper manufacturing over card storage up to the mechanical parts of processing could be kept the same. Just punch thorn size and timing had to be modified (*7). Also around 1930 Remington doubled the capacity by keeping the round Hollerith holes, but storing two characters per column (90 characters per card). There were other formats as well. At the end of the 1940s (partly due the war) IBM's 80 column card was the industry wide accepted standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1920 the &lt;em&gt;Tabulating Machine Company&lt;/em&gt; (originally &lt;em&gt;The Hollerith Electric Tabulating System&lt;/em&gt;, now part of CTR Holding) introduced a new printer-lister system with 132 columns. While not the first to do so (*8), it became the de facto standard, thus setting the 132 characters for tabulating output - what later evolved into mainframe printers (and everything else meant to produce a ledger output).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;For data processing on terminals&lt;/strong&gt; it was a natural goal to display at least one basic data record - read, one punch card - in one display line, so data fields can be viewed as columns. The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1050&quot; rel=&quot;noreferrer&quot;&gt;IBM 1050 Data Communications System&lt;/a&gt; is a typical example of an early (printing) terminal system. At the center with an adapted &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Selectric_typewriter&quot; rel=&quot;noreferrer&quot;&gt;IBM Selectric typewriter&lt;/a&gt;, able to print 80 columns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, while the Selectric is usually seen as an office typewriter to handle standard letters, one major design goal was the capability of printing 80 characters, so it could also replace other data entry and print systems for IBM Mainframes. Mainly ofc, everything based around the IBM Electric typewriter, used for the same role since the 1930s - unlike Selectric also available in 132 character width. (*9)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That manufacturers of typewriters for simple home/office usage did go for design decision with a shorter carriage so only letter size paper (and thus less characters) can be used is unrelated here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;80 columns were therefore also the goal for CRT based terminals&lt;/strong&gt;. There was some development needed before a 80x24 could be archived. Memory constraints being not the least (*10). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even IBM struggled with the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2260&quot; rel=&quot;noreferrer&quot;&gt;2260&lt;/a&gt;, the grand daddy of all screen based terminals introduced in 1964. The basic Model 1 displayed 6 rows of 40 characters, while the Model 2 could do 12 line of 40 characters. Only the high end Model 3 could display a whole punch card in a single line with 12 lines of 80 characters. That setup with 3 models was mainly due memory reasons. Less characters per screen means one controller could support more terminals with the same memory. In fact, The 2260 didn't even have screen memory at all. The display was only a CRT and keyboard. Screen memory and picture generation was all within the 2248 control unit - stored in &lt;a href=&quot;https://en.wikipedia.org/wiki/Delay_line_memory#Magnetostrictive_delay_lines&quot; rel=&quot;noreferrer&quot;&gt;acoustic memory&lt;/a&gt; - and transmitted to the CRT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the 1964 2260 Model 3, 80 characters was the standard for mainframes and the goal for everything else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many early manufacturers did first ship with terminals with less then 80 characters and 24 lines. Sometimes even in large numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The well known (*11) &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint_2200&quot; rel=&quot;noreferrer&quot;&gt;Datapoint 2200&lt;/a&gt; did support as well 12 lines of 80 character. The similar but earlier &lt;a href=&quot;https://en.wikipedia.org/wiki/George_Cogar&quot; rel=&quot;noreferrer&quot;&gt;Cogar C4&lt;/a&gt;) did only 8 lines with 32 characters ... one reason why it never got as popular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, without 80 column support they were less than desirable for any serious usage (aka mainframe related) beside specialized data entry. A general purpose terminal needs to support at least the most common data structure at once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, DEC's VT series does neatly show the struggle for 80 characters and might be used as an example of non printing terminals toward the 80/132 character per line goal: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The original &lt;strong&gt;VT05 of 1970 offered 72x20&lt;/strong&gt; characters in a 4:3 fashion.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;strong&gt;VT06&lt;/strong&gt;, essentially a &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint_3300&quot; rel=&quot;noreferrer&quot;&gt;Datapoint 3300&lt;/a&gt;,  &lt;strong&gt;offered 72x25&lt;/strong&gt; characters&lt;/li&gt;&#xA;&lt;li&gt;The next iteration as the &lt;strong&gt;VT50 of 1974 with 80x12&lt;/strong&gt; already reached the 80 characters goal, but mostly due memory constraints, only 12 lines were displayed. Since a 4:3 CRT was used, the resulting picture looked a bit like having every other line blanked out.&lt;/li&gt;&#xA;&lt;li&gt;A bit more than a year later the &lt;strong&gt;VT52 of 1975 supported 80x24&lt;/strong&gt; characters. Literally 'filling the blank lines' and even more, as the greatly (for back then) expanded memory allowed to store a window of more than 24 lines, resulting in the ability to scroll up and down thru this buffer (*12).&lt;/li&gt;&#xA;&lt;li&gt;In a 'last' step the &lt;strong&gt;VT100 of 1978 introduced a 132x24&lt;/strong&gt; display, so now every 'professional' output could be shown.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Now the 25 lines is a different but related story.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technically the gold standard of all CRT based terminals, the 3270, did not display 24 but 25 lines. Just this 25th line was (usually) not accessible to user programs, as it held status information about the connection, session status or terminal/keyboard mode. So on a user level every competitor had to offer (at least) 80x24, which most did. The IBM PC text adapters were designed with terminal emulation in mind. Thus the hardware had to provide a 25th line. A line general available for any program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's something not restricted to the IBM PC. Many microcomputers before did offer 25 lines because of that. Heck, even the DEC VT100 did when it was transformed as VT180 into a CP/M machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion: 80/132 character come from the age of punch cards, 24/25 lines due the 4:3 dimensions of common CRTs&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;TV's became quite blurry approaching 132 (B&amp;amp;W@625px) char so that seems to be the hardware maximum width upper limit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The whole TV system is made to display continuous greyscales/colours as they appear in real life pictures, not sharp contrast as needed for text display. That's why electronics, coils, and tube coating for dedicated text displays differ from such made for TV purpose. A TV set, including the full path can barely produce 40 characters per line (6/7px per char) in acceptable quality.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - If most used is by computing power, or amount of users, then a single /370 installation might outclass a hundred PDPs. It's much like baking a peanut cake takes many more peanuts than one with a coconut filling takes coconuts :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - And it's a strange thing anyway. DEC's mini computer terminals were outsold by a magnitude by mainframe terminals like IBM's 3270. While mainframe terminals where used in huge installations in companies and government were only seen by a rather small number of employees working them every day all day, DEC products gained a hold in universities where Joe Average was introduced to them for a short time and moved. In most cases to jobs with (back then) no contact with terminals for the rest of their life. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - even less I can see where pages of 32 or 64 - at least not when amended with a unit of byte or KiB - could be anywhere convenient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Depending on the manufacturer there have been many different sizes even way past 200 columns. But 132 and 136 became somewhat a standard during the 1930/40s&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - The request for ever more storage capacity (and processing power) by users seam to be a constant during all history of data handling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - It's a bit like the move from FM to MFM for floppies, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - In the late 1960s, IBM tried to introduce a 96 column card together with the System/3 series. Here not only density got improved but at the same time the size got almost halved. The idea was quite like the 3.5&quot; floppy: A card should well fit into a shirt pocket. It did prove unsuccessful as no one else, not even within IBM, adopted it. While the System/3 eventually evolved into the AS/400, the 96 column card was outlived by it's predecessor&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - Before CTR's printer tabulator there was the already quite successful Powers Printing Tabulator. Again not the first, as the Royden system of Peirce Patent Company already had one - not to mention custom developments like done at Prudential Insurance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*9 - Since an IBM Electric was used as genuine terminal for the very first DEC machine (&lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-1&quot; rel=&quot;noreferrer&quot;&gt;PDP-1&lt;/a&gt;), it could be argued that DEC's 80 column orientation is originated here :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*10 - That's why Tectronix introduced &lt;a href=&quot;https://en.wikipedia.org/wiki/Storage_tube&quot; rel=&quot;noreferrer&quot;&gt;storage tube&lt;/a&gt; based terminals. First the 600 series devices which later evolved into the 4000 terminal series and further into the well known &lt;a href=&quot;https://en.wikipedia.org/wiki/Tektronix_4010&quot; rel=&quot;noreferrer&quot;&gt;4010 family&lt;/a&gt;. No dedicated memory needed for screen refresh - but also no real way to do things like scrolling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*11 - For being the source of all evil ... err x86.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*12 - It also started the downward spiral of decadence by offering lower case letters. Something real programmers (and users therefore) never needed in the first place.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="637" LastEditDate="2019-10-24T13:46:29.933" LastActivityDate="2019-10-24T13:46:29.933" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="5635" PostTypeId="2" ParentId="5633" CreationDate="2018-02-03T17:12:22.237" Score="12" Body="&lt;p&gt;&lt;em&gt;Preface: I have a bit of a headache with this, as it feels a bit more like a personal rant topped with a question. At the same time he's diving right into the real beauty of the II.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One of the weirdest misfeatures of the Apple II - and perhaps the dumbest thing Woz ever designed - is the vestigial priority system for IRQ and DMA on the Apple II expansion bus.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Vestigial might be quite misleading as a description. It is offering the ability to implement a priority chain with minimal effort. For sure this is better than no provision at all, don't you think so?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And accusing Woz of being dumb is usually only possible if one hasn't looked at the whole picture.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Each slot has four pins devoted to this system: an input and output for each priority signal. Expansion cards are supposed to check these signals and refrain from signalling IRQ or DMA when a higher priority card is doing so.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Right. It follows the basic implementation decision of Woz to &lt;em&gt;use geographic addressing&lt;/em&gt;. That is, each slot has fixed resources assigned. This goes for I/O address area and ROM addresses as well as IRQ and DMA priority. Unlike a random (parallel) design like the ISA Bus or S100, where every card is equal - and has to burden to decode everything they need in full. Circuitry to decode are needed on each and every card again. Also, each card needs to be configured before usage to answer the right addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Geographical decoding in contrast needs no hardware configuration. This is done the moment a card is plugged. It's not wrong to call the Apple II a Plug and Play system before the term was coined (*1). Since Woz moved decoding to the main board, building an expansion card became easy. A simple Port could be added without any glue logic at all. On the PC in contrast it did need several TTL, or a PAL to add even the most simple device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's worth noting, that Apple cards could of course use different address schemes by spending more hardware. In fact, unlike with the PC, a card could even disable the whole board selection and do its own thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the same principle is added to interrupts and DMA. To allow more than one card issuing interrupts or taking over the buss a simple priority chain was added. There is no difference to what other systems did, except for the simplicity of design. Where the PC used a 8259 to prioritize and handle multiple interrupt lines, plus the need to spend many slot lines to carry them, the Apple only needed two contacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me it's a great example about squeezing out the most versatile concept with the least effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be interesting to notice that next to every other bus system evolutionary switched to some form of geographic addressing at some point. Motorola did it with VME64, IBM  with MCA while compatibles added it due PCI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(There are several other strategies, all of them do need more hardware/software to implement)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For IRQ, this system is completely useless. Software interrupt handlers check all interrupt sources in sequence anyway,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And usually break as soon as one handler assumes responsibility for a detected source, not handing over to the next.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and the IRQ signal to the CPU is open-collector and level-triggered (thus multiple simultaneous IRQs are safe and will work correctly).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, they are not. It's depending on software structure and the way certain hardware offers and handles interrupts. Especially in a modular system there are endless ways to screw this up - not least lazy programmers not expecting other interactions.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So there is no need to avoid contention, and no particular reason a card should pay any attention to this signal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It sure is a great way to make sure that there is only one interrupt at a given time, and more importantly, that no lower priority card is issuing an interrupt when a higher one is still being handled. From a certain point of view (and when handled accordingly) the INT-Chain works much like the priority decoder and locking like within an Intel 8259. Interrupts are served in order of priority to the CPU and new interrupts are only issued when the last one has been acknowledged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, all of this can also be handled by sophisticated software - at the expense of slower handling and way more complexity. Therefore the INT chain &lt;em&gt;can&lt;/em&gt; be seen as optional if the goal does not include optimal performance.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For DMA, though, it's potentially more important. Only one card can use DMA at a time, so you need some way to avoid contention. Unfortunately it still doesn't work very well. One major problem is that the system only works if all the cards using DMA are in adjacent slots, because an empty slot breaks the chain.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Right, that's one of the requirements. The basic idea of the slots is to fill them left to right.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This, combined with the use of separate in and out signals in the first place, implies that you are supposed to only signal downstream if you want to perform DMA. But on the other hand, if you only signal downstream, a potential upstream card doesn't know that you've started DMA, and might interrupt your DMA transaction with its own. Apparently, the intention was that a higher priority card could actually do this and you were supposed to watch for it and get off the bus.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly that is the premise of a simple priority chain. Higher priority card overwrites lower priority. All is handles on a single byte level synchronized by the system clock. This decision is to be done &lt;em&gt;for each cycle&lt;/em&gt;. There is no such thing as a multi byte transaction - well, except for the card in slot 1 that is :)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Unfortunately, there's no timing information provided in any documentation I've found. A compliant card could simply signal at the same time it begins a transaction, giving the downstream card no time to respond and leading to a potential bus fight.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is plenty of time, as all it needs to do in the first place is disable the drivers of a lower priority card.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This would also leave memory in an inconsistent state, with the downstream card's transaction half done.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is no such thing as a half done transaction. Either the byte is read or written, or not.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The reference manuals usually mumble something about &quot;cards should usually connect the IN and OUT lines together&quot; without saying anything about how to actually use them to initiate DMA.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I thought of it as pretty self explanatory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole Phi1 high phase is available for arbitration, so even if you take away a few hundred nanoseconds for the address generation etc, there is still plenty of time to disable the address output buffers before the active access starts if a higher prioritized card signals that it will use the bus.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It would be easy to read that to mean you should signal both ways. Making matters worse, the schematic shows lower numbered slots having higher priority, but at least one source (IIe tech reference) says HIGHER numbered slots have priority!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Would you mind supplying a page and wording? I just checked my IIe Ref and couldn't find it. My version got the section about the chains on page 170.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Unsurprisingly, DMA cards in the Apple II were frequently incompatible with each other.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As so often with many cards on many systems. If you think the Apple II is badly documented, never try to debug a complex S100 Bus system :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside cards which simply ignore DMA priority, the most common problem are cards using DMA but not taking into account that others may need the bus. A typical carelessly acting card is Microsoft's Softcard (Z80 board) in default setting (S1-2 off). When activated it grabs the bus full time, only releasing it for one cycle during Opcode decoding (M1), so 6502 refresh gets a chance. If there's another, well behaving DMA card down the line, it will grab the bus during that cycle and the 6502 will soon starve to death.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if switched to obey DMA_IN (S2-1 on), the Soft-Card is pretty handsome, and can give way for an unlimited time, as the Z80 is still clocked, just halted. Of course, if the higher priority card relinquishes the bus for only one clock cycle, the Softcard will take over again and do at least two cycles (one 6502 cycle). As Z80 instructions may have several cycles (up to 14?), the 6502 may have to wait for a cycle until one Z80 instruction is finished that way, which may again result in starvation (see #1 in additional reading).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole DMA protocol is designed for cards that &lt;em&gt;sometimes&lt;/em&gt; need fast access. Cards which taking over the system are an anomaly. But thanks to the Softcard default setting, many other CPU cards (see #2 in additional reading) didn't much care about higher priority DMA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a perfect world (or at least with well behaving cards), a CPU card should be installed in slot#7 (*2) and obey DMA_IN. Now it would really behave as a CPU replacement &lt;em&gt;and&lt;/em&gt; being able to use other DMA devices. Sure, it might need a bit more logic to keep the 6502 alive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, if we want to point something out where Woz went short it's keeping the 6502 alive during lengthy DMA cycles. A provision on the main board might have been a good idea. Then again, it would have not only made the protocol way more complex (now a back channel for a lower priority used to request the bus against priority would be needed and managed), also, at least one additional counter would have been needed on the main board. Considering that other computers of the same time (and even way later) had no provision for prioritizing DMA - or even DMA at all, I think he found a great way to enable this functionality without spending much hardware for an exotic case. I say it was impossible to imagine that Z80 cards later became defacto standard in most II's. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An equally common cause for incompatibility of DMA cards have been subtle differences between the II, IIe and IIgs. The buffer circuitry has changed between these machines, resulting in a slightly different DMA timing (see #3 in additional reading).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did cards just ignore the DMA priority lines, did they signal one way or both ways,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Some did, some don't. After all, the number of active cards are rather rare, and multiple of them even more.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Most non-DMA cards followed Apple's recommendations and loped DMA_IN/DMA_OUT.&lt;/li&gt;&#xA;&lt;li&gt;Some didn't and will produce problems in complex combinations&lt;/li&gt;&#xA;&lt;li&gt;Many simple CPU cards do just grab DMA and go on without obeying DMA_IN&lt;/li&gt;&#xA;&lt;li&gt;Some cards can do, but won't always, like the Softcard which must be switched (S1-2 on) to do so.&lt;/li&gt;&#xA;&lt;li&gt;Some always do.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So pick your combination :)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or could they even potentially be damaged (bus fight) if someone tried to drive signals upstream on the &quot;IN&quot; line?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That depends on the individual card design, but I wouldn't recommend it, as it doesn't make any sense.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did higher-priority cards watch the open-collector DMA line to avoid interrupting existing transactions?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really useful, as they could as well trust the protocol. A case like that would be hard to resolve anyway.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did cards observe some informal software protocol to deal with the problem?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, at least not in the beginning. With the Apple Mouse card a software protocol for interrupt sharing was established using so called screen holes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or was it more of a &quot;pray, and tell the user to turn off DMA if there's a problem&quot; sort of thing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'd say it was something restricted to high class use cases that usually did require more thinking and experiments anyway.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Additional Readings:&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The grandfather of all DMA cards is no doubt &lt;a href=&quot;https://en.wikipedia.org/wiki/Z-80_SoftCard&quot; rel=&quot;noreferrer&quot;&gt;Microsoft's Softcard&lt;/a&gt;. Typically for back then a rather good documentation was available, including a thorough &lt;a href=&quot;http://apple2online.com/web_documents/microsoft_softcard_-_software_and_hardware_details.pdf&quot; rel=&quot;noreferrer&quot;&gt;hardware description&lt;/a&gt; and schematics. Since scans are somewhat bad to read, people even redid &lt;a href=&quot;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Z80%20Cards/Microsoft%20SoftCard/Schematics/Microsoft%20Softcard%20-%20Schematics.gif&quot; rel=&quot;noreferrer&quot;&gt;the schematics&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There is a real well made description by the German magazine &lt;em&gt;mc&lt;/em&gt; issue Sept.1985 of a &lt;a href=&quot;http://page.mi.fu-berlin.de/rojas/pub/68008_Karte.pdf&quot; rel=&quot;noreferrer&quot;&gt;68008 card&lt;/a&gt;. The article starts with a thorough description of DMA access. The Bus handling is like most (simple) CPU cards do. 1 in 8 cycles are given to the 6502 (or more correct lower priority cards). It does handle DMA_OUT while ignoring DMA_IN. Wonders of the internet, there is an acceptable &lt;a href=&quot;http://www.harrowalsh.de/Elektronik/APPLEBOX/68008CPUcard/68008translation.pdf&quot; rel=&quot;noreferrer&quot;&gt;English translation&lt;/a&gt; available.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Apple also added some information in 1983 via the &lt;em&gt;Apple II Technical Note&lt;/em&gt; called &lt;em&gt;&lt;a href=&quot;https://ia601008.us.archive.org/28/items/IIe_2523002_DMA_Hardware_Protocol/IIe_2523002_DMA_Hardware_Protocol.pdf&quot; rel=&quot;noreferrer&quot;&gt;Apple IIe #2: Hardware Protocol for Doing DMA&lt;/a&gt;.&lt;/em&gt; Sadly it focuses on DMA timing itself rather than cooperation of cards. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I'd even say the major reason to come up with such a phrase was due the complicated procedures needed to be handled on the PC before the work arounds where added.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Microsoft recommends slot#4 and #7 only if #4 is occupied. Nonetheless it worked fine in any slot. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-10-29T10:02:05.457" LastActivityDate="2018-10-29T10:02:05.457" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="5636" PostTypeId="2" ParentId="5623" CreationDate="2018-02-03T17:45:12.857" Score="13" Body="&lt;p&gt;Magnetic Bubble Memory (MBM) was a technology that never found a sustained market, and was only briefly in vogue a couple of times in the 1970s and 1980s when market and technical issues hit other storage technologies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While MBM is non-volatile and fairly rugged, it has a few show-stopping disadvantages, including:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It needs to be heated to over 30 °C before it will operate. Consequently, it is slow to start, has special power requirements and the thermal jacket on top of MBM's complicated structure makes bubble memory quite bulky.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;MBM is serial: the ‘bubbles’ race round loops, so memory can only be read or written as the right bubbles come round the loops. In order to speed up access, manufacturers tried many loops in parallel, which added complexity to the MBM module. Even with 512× 8192-bit storage loops, Intel's &lt;a href=&quot;http://www.wolfgangrobel.de/museum/files_bubble5/intel%207114%20bubble%20memory%20data%20sheet.pdf&quot; rel=&quot;noreferrer&quot;&gt;7114A&lt;/a&gt; from the early 1980s only managed an average access time of 40 ms. This might have been better than hard drives of the time, but MBM was touted as a RAM replacement.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;MBM is a &lt;a href=&quot;http://www.decodesystems.com/tib0203-exploded.gif&quot; rel=&quot;noreferrer&quot;&gt;complex&lt;/a&gt; sandwich made up of a semiconductor substrate layered between precisely-aligned magnetic coils and permanent magnets. Consequently, it would have been challenging to manufacture and likely far less mechanically shock-proof than its lack of moving parts might suggest.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;MBM, despite its expected ruggedness, could still develop bad blocks like any other magnetic storage medium. I've heard anecdotal reports of the block remapping process being quite time consuming, and booting machines from MBM could be a slow and not always reliable process.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I remember industry pundits of the time being very keen on pushing MBM as a successful technology, perhaps fuelled by over-optimistic PR from manufacturers such as Intel.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-02-03T17:45:12.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5637" PostTypeId="1" AcceptedAnswerId="5638" CreationDate="2018-02-04T08:24:11.143" Score="25" ViewCount="4523" Body="&lt;p&gt;I remember using a wysiwyg print program called Fontasy for CGI graphics in DOS because of a lack of standardized graphics fonts. Companies were selling &quot;font packs&quot; for other type fonts. Prior to Win 3.1 releasing TrueType fonts it seems everybody was shipping proprietary fonts with their programs and I don't recall any way to copy or steal them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;How &amp;amp; where did DOS store graphics fonts that were used by word processors and custom print programs?&lt;/em&gt;&lt;/strong&gt; (Excludes the custom fonts stored in dot matrix printer memory) &lt;/p&gt;&#xA;" OwnerUserId="7848" LastEditorUserId="79" LastEditDate="2018-09-13T16:44:04.400" LastActivityDate="2018-09-13T16:44:04.400" Title="Where did DOS store graphics fonts?" Tags="&lt;ms-dos&gt;&lt;graphics&gt;&lt;printer&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5638" PostTypeId="2" ParentId="5637" CreationDate="2018-02-04T08:49:25.807" Score="36" Body="&lt;p&gt;Fonts for text rendered to the screen or paper in a graphics mode would simply be data shipped with the application.  If this was perceived to be non-copy-able, it is likely because it was not (obviously) in a standard font format, and perhaps intentionally obfuscated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is also worth noting that VGA cards permitted relocating the text mode character generator tables to RAM, at which point you could upload a fully custom character set or copy the ROM table out to RAM and make only small modifications rather than having to start from scratch.  However this would be limited to a smaller range of sizes and to fixed width characters, unlike true WYSIWYG rendering of arbitrary size and proportional spacing fonts as you might find in a &quot;Desktop Publishing&quot; program as distinct from the &quot;Word Processing&quot; software of the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ultimate answer to where did DOS store them, is that for anything unique, DOS didn't - applications or their chosen libraries did, each in its own way.&lt;/p&gt;&#xA;" OwnerUserId="1874" LastActivityDate="2018-02-04T08:49:25.807" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5640" PostTypeId="2" ParentId="5637" CreationDate="2018-02-04T14:49:54.303" Score="15" Body="&lt;p&gt;DOS knows nothing about graphics fonts (mostly: it supports different display fonts which can be loaded using &lt;a href=&quot;http://www.vfrazee.com/ms-dos/6.22/help/chcp.htm&quot; rel=&quot;noreferrer&quot;&gt;CHCP&lt;/a&gt; to change the display's code page, and some other minor details.) It was up to each program to come up with their own method of sending text and images to the printer, generally with the help of a printer driver that contained &lt;a href=&quot;https://en.wikipedia.org/wiki/Font#Metrics&quot; rel=&quot;noreferrer&quot;&gt;font metrics&lt;/a&gt; for each supported typeface, size and style to help with formatting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every program had their own methods for using fonts. Some relied on the fonts in the printer, some had bitmap fonts for each size and DPI combination, and others used scalable fonts (vector, outline, or some other form); many programs used some or all of these methods (Windows still supports all three of these methods too, so DOS programs were not alone with this.) These &quot;soft fonts&quot; were tightly bound to the program, so the format was generally whatever best fit the program: font sharing between programs was not important, nor was it particularly encouraged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because there was no standardized format for fonts, there was little need to support standardized locations either. Some programs will have a separate directory for fonts, while others will put the fonts in the same directory as the main program. Programs which supported PostScript or PCL 5 might have an option to specify where additional fonts are located.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Every program was different, and even if you did copy a font from one program to another, it likely wouldn't work because they didn't use the same format (except possibly for PostScript fonts.)&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2018-02-04T14:49:54.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5641" PostTypeId="2" ParentId="5637" CreationDate="2018-02-04T16:38:16.573" Score="10" Body="&lt;p&gt;DOS itself did not manage them. Development environments used to ship with libraries that could support graphics modes, some with built-in font support. Some had vector fonts, some just blitted a dot matrix, favorably 8 pixels wide so one byte could encode one monochrome character scan line. The operating system contributed little to nothing. A popular example was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Borland_Graphics_Interface&quot; rel=&quot;noreferrer&quot;&gt;BGI&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ncplot.com/stickfont/stickfont.htm&quot; rel=&quot;noreferrer&quot;&gt;Font packs&lt;/a&gt; were included with the compiler, additional fonts could be purchased. Applications either had to ship the CHR files along with the executable, or embed them as resources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fontasy also used a vendor-defined format, their files had the &lt;strong&gt;FY&lt;/strong&gt; file extension for regular fonts, &lt;strong&gt;FYB&lt;/strong&gt; files for bold variants, and &lt;strong&gt;FYI&lt;/strong&gt; files for italics.&lt;/p&gt;&#xA;" OwnerUserId="7866" LastEditorUserId="7866" LastEditDate="2018-02-04T18:21:39.503" LastActivityDate="2018-02-04T18:21:39.503" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5642" PostTypeId="1" CreationDate="2018-02-05T08:56:50.713" Score="106" ViewCount="37015" Body="&lt;p&gt;I owned a PC in the mid-to-late 90s, and while everyone said when you turn it off and back on again, count to 30.  But it also had an instant reset button down below.  &lt;strong&gt;Was there ever really any risk by not counting to thirty?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7872" LastActivityDate="2020-05-26T14:41:26.420" Title="Was there ever any reason to wait 30 seconds to restart a c.1995 PC?" Tags="&lt;ibm-pc&gt;&lt;power&gt;" AnswerCount="22" CommentCount="8" FavoriteCount="19" ContentLicense="CC BY-SA 3.0" />
  <row Id="5643" PostTypeId="1" AcceptedAnswerId="5645" CreationDate="2018-02-05T09:01:57.957" Score="39" ViewCount="11208" Body="&lt;p&gt;Given the very small size of DOS, it would seem it might still be ideal for some applications such as handheld games. &lt;strong&gt;&lt;em&gt;Is any system manufacturer still shipping DOS with their machine?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If no one is shipping DOS, when was the last shipment? &lt;/p&gt;&#xA;" OwnerUserId="7848" LastEditorUserId="7813" LastEditDate="2018-02-06T20:48:47.970" LastActivityDate="2020-02-28T07:08:15.170" Title="Is DOS being shipped with or as an installed OS?" Tags="&lt;ms-dos&gt;" AnswerCount="8" CommentCount="17" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5644" PostTypeId="2" ParentId="5642" CreationDate="2018-02-05T09:12:49.133" Score="12" Body="&lt;p&gt;You are still recommended to wait about 30 seconds when turning a modern computer off and on again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The risk of any damage was very small but not zero.  The risk nowadays is probably even smaller due to protection circuitry being present or better than in the '90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is that you wait enough time for any charge held in capacitors to dissipate.  The risk is that, on powering up, any residual charge may cause a current surge that would damage the chips, processor, memory or interfaces.  As I said, the risk was very small, I never saw any machine damaged by blipping the power switch.  But I still wait about 5-10 seconds before turning a machine back on.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2018-02-05T09:12:49.133" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="5645" PostTypeId="2" ParentId="5643" CreationDate="2018-02-05T09:54:12.320" Score="51" Body="&lt;p&gt;I’m not sure about &lt;em&gt;OS&lt;/em&gt; manufacturers, but hardware manufacturers still use DOS, in &lt;strong&gt;at least&lt;/strong&gt; two scenarios visible to the general public:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;firmware upgrade CD images;&lt;/li&gt;&#xA;&lt;li&gt;bare-bones enterprise laptop and workstation setups (&lt;em&gt;e.g.&lt;/em&gt; from &lt;a href=&quot;https://support.hp.com/us-en/document/c01545904&quot; rel=&quot;noreferrer&quot;&gt;HP&lt;/a&gt; or Lenovo, “bare-bones” as in “with FreeDOS as the only installed operating system”; in some countries you’ll need a business account to access these configurations).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In both cases, manufacturers tend to use &lt;a href=&quot;http://www.freedos.org/&quot; rel=&quot;noreferrer&quot;&gt;FreeDOS&lt;/a&gt; rather than MS-DOS.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-02-05T19:04:35.303" LastActivityDate="2018-02-05T19:04:35.303" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5646" PostTypeId="2" ParentId="5642" CreationDate="2018-02-05T09:56:53.470" Score="9" Body="&lt;p&gt;&lt;em&gt;Count to 30&lt;/em&gt; is an ill advice. You simply shouldn't switch off-on a computer within the same 2 seconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason is old computers were switched &quot;hard-off&quot;, on the mains side of the power supply. To avoid your computer failing everytime there is a short break in the mains (happens once a week or so, depending where you live), the power supply has a one-second reserve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you switched off-on the computer within 2 seconds, you enter the grey area in which that one-second reserve may be drained - or not, depending on the configuration of the computer. There may be also some depowered circuits, while others are not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you had some RAM depowered but the CPU still running, software may do nasty things.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2018-02-05T09:56:53.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5647" PostTypeId="2" ParentId="5642" CreationDate="2018-02-05T10:13:05.257" Score="54" Body="&lt;p&gt;The reset button does not affect the power supply at all. It sends a reset signal to the CPU (and probably the bus).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some power supply designs indeed will wear quicker if quickly switched on and off, but this is not typically about still-charged capacitors. Depending on the circuitry, the following things among others could be a concern:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Cumulative thermal load on the rectifier (which has no time to cool down) due to inrush currents, if the power supply did have enough time to discharge the capacitors during the 2 seconds. Usually, it has; otherwise, the computer would keep running for several seconds before even reacting to the switch.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The same principle, applied to startup circuits: these can be designed in a way that they can take the short term stress of operation, if given time to cool down afterwards.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In some cases, the power rails downstream of the power supply might not yet be at 0V if you quickly switch on again. This is not very likely (but possible in some edge cases, think CMOS latchup effects...) to do permanent damage, but can start up the system into a confused state (e.g., if some power on reset circuitry is kept from triggering). A confused system, while it is unlikely to suffer electrical damage, still has potential for data loss.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="785" LastEditorUserId="3575" LastEditDate="2018-02-05T13:19:53.837" LastActivityDate="2018-02-05T13:19:53.837" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5648" PostTypeId="2" ParentId="5643" CreationDate="2018-02-05T10:41:24.617" Score="26" Body="&lt;p&gt;Several major computer brands have devices, low end in particular but not only, which get sold with FreeDOS installed. This includes top players like &lt;a href=&quot;https://www.alternate.de/HP/Pavilion-17-bs001ng-Notebook/html/product/1404040?&quot; rel=&quot;noreferrer&quot;&gt;HP&lt;/a&gt; and &lt;a href=&quot;https://www.notebooksbilliger.de/lenovo+v110+15ikb+80th001uge/?nbb=pla.google_&amp;amp;wt_cc2=911-0001_Hardware_344450&amp;amp;gclid=EAIaIQobChMI_aLotciO2QIVBLgbCh1gPQ7XEAQYASABEgL2kvD_BwE&quot; rel=&quot;noreferrer&quot;&gt;Lenovo&lt;/a&gt; — at some point even &lt;a href=&quot;http://www.dell.com/content/learnmore/learnmore.aspx?c=us&amp;amp;cs=04&amp;amp;l=en&amp;amp;s=bsd&amp;amp;~id=os_linux&amp;amp;~line=workstations&amp;amp;~mode=popup&amp;amp;~series=precn&amp;amp;~tab=recommendations&quot; rel=&quot;noreferrer&quot;&gt;Dell&lt;/a&gt; offered it for their professional workstations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/FreeDOS&quot; rel=&quot;noreferrer&quot;&gt;FreeDOS&lt;/a&gt; is basically an open source DOS reimplementation of MS-DOS, but includes several modern updates, including the ability to run not only DPMI programs, but also (a subset of) Windows console applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some countries the offer of a FreeDOS installation is available to the general public and used to scrap of even a bit more of their lowest priced machines. Availibility of this offer depends if there is a general contract with Microsoft about handling 'empty' PCs or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other countries it's only available as part of some business plan for professional customers, but this time usually across all their professional systems. Here it's a way of avoiding double payment of the MS-Tax for institutional customers. Basically all computer manufactures have (at least in the US but also other countries) a contract with Microsoft that by default for every machine a Windows installation will be assumed - unless a different OS is installed.  Installing no OS is terefore not an option. In that way, large scale customers who already have their own bulk licence agreement with Microsoft would have to pay twice for Windows. Thus pro forma FreeDOS installation on contract base does enable &quot;bare hardware&quot; deals again.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="79" LastEditDate="2018-02-05T21:29:32.727" LastActivityDate="2018-02-05T21:29:32.727" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5649" PostTypeId="2" ParentId="5642" CreationDate="2018-02-05T11:04:18.677" Score="22" Body="&lt;p&gt;My best guess is that it was (and is) all about getting the computer into a well-defined state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make the CPU start at the correct address, it needs to get a RESET signal or something equivalent. And in the old days this was often generated by slowly charging a capacitor at power-up, so that RESET stayed low for some time after applying power. And typically this capacitor (and supporting cirtuitry) also took some time to reliably discharge. So, having power off for too short, the RESET signal wouldn't be there reliably. Pressing the REST button that the old machines still had, didn't use this capacitor, so it worked, no matter how short you pressed the button.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another factor might have been the DRAM contents. 30 seconds should be enough to discharge all DRAM capacitors making up the individual bits of the RAM chips, so that nothing remains of the previous RAM contents. But to me that's not very convincing, as I don't think the typical DOS/Windows bootstrap process took care about anything found in RAM. Instead it filled the significant parts of the RAM freshly from boot media.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2018-02-05T11:04:18.677" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5650" PostTypeId="2" ParentId="5642" CreationDate="2018-02-05T12:47:37.720" Score="16" Body="&lt;p&gt;All the other answers talk about delaying switching back on to prevent possible damage/wear of the power-supply (which I fully agree with).  The other reason for a delay that was &quot;common knowledge&quot; way back when was to prevent damage to hard disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In normal use, the heads of a hard-disk are incredibly close to the platters, and it is partly the spinning of the platters (thanks to the Bernoulli effect) that keep the heads from touching the surface (with catastrophic consequences if it happened at speed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early hard-drives were fragile things: you were advised to &lt;code&gt;park&lt;/code&gt; the heads before powering down (moving the heads to a &quot;safe&quot; part of the disk to &quot;land&quot;). On power-on, the platters would be allowed to get up to full speed (and the heads safely &quot;floating&quot;) before the heads were moved back to &quot;active&quot; areas of the disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Allowing a &quot;reasonable time&quot; between removing the power and restoring it would allow the disks to &quot;spin down&quot; and the heads to land gently; rapid power-cycling ran the (probably small, but non-zero) risk of &quot;something going wrong&quot; and heads landing where they shouldn't and potentially losing data (as well as the mechanical strain on motors that were designed to run more-or-less constantly).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even as drive-technology improved (with auto-park mechanisms; perhaps &quot;locking&quot; the heads so they could not touch the surface), it feels &quot;one less thing to go wrong&quot; if you let the drives power-down fully before restarting.&lt;/p&gt;&#xA;" OwnerUserId="731" LastActivityDate="2018-02-05T12:47:37.720" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5651" PostTypeId="2" ParentId="5643" CreationDate="2018-02-05T13:54:26.937" Score="15" Body="&lt;p&gt;As of today, the German price comparison website &lt;a href=&quot;http://idealo.de&quot; rel=&quot;noreferrer&quot;&gt;idealo.de&lt;/a&gt; lists &lt;a href=&quot;https://www.idealo.de/preisvergleich/ProductCategory/3020F3891881.html&quot; rel=&quot;noreferrer&quot;&gt;11 PC systems&lt;/a&gt; and &lt;a href=&quot;https://www.idealo.de/preisvergleich/ProductCategory/3751F1092969.html&quot; rel=&quot;noreferrer&quot;&gt;91 laptops&lt;/a&gt; that come with FreeDOS preinstalled, mainly from MSI, Lenovo, HP and ASUS. Not only cheap entry level machines, there are some more expensive gaming and business laptops among them as well..&lt;/p&gt;&#xA;" OwnerUserId="348" LastActivityDate="2018-02-05T13:54:26.937" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5652" PostTypeId="1" CreationDate="2018-02-05T14:18:34.490" Score="37" ViewCount="14191" Body="&lt;p&gt;When you think about it, punch cards are the safest way to backup data for long term storage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are not influenced by magnetic fields and their data (the holes) don't fade over time. They are also less sensitive to heat than most backup media I can think of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Their biggest advantage should be that they are future-proof. Try reading an old computer backup tape or diskette (pick any size). Even if the data signal hasn't faded you probably cannot retrieve the data without some major effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Punch cards are easy enough to read and don't have proprietary encoding issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to read your grandfather's punch cards (or: your grandson wanted to read yours) it should be easy enough to create a card reader.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may not be ideal for graphics, but data - e.g. a family tree or government records - would be much safer if stored on punch cards in a fire-proof box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How come punch cards are not used (or not very popular) for long-term backups?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7877" LastEditorUserId="1931" LastEditDate="2018-02-06T18:26:32.160" LastActivityDate="2018-12-20T14:28:43.557" Title="Why are punch card readers no longer in use?" Tags="&lt;backup&gt;&lt;punched-cards&gt;" AnswerCount="13" CommentCount="13" FavoriteCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5653" PostTypeId="2" ParentId="5535" CreationDate="2018-02-05T14:25:21.650" Score="2" Body="&lt;p&gt;We used to sell 3-drive Apple-II systems for bookkeeping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One drive for the Accounts, one for the Transactions and the third for the Stock/inventory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We would simply add another floppy disk controller.&lt;/p&gt;&#xA;" OwnerUserId="7877" LastActivityDate="2018-02-05T14:25:21.650" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5654" PostTypeId="2" ParentId="5652" CreationDate="2018-02-05T14:48:50.067" Score="36" Body="&lt;p&gt;Nice Question :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Short answer: &lt;strong&gt;Density&lt;/strong&gt; - It just takes way too much cards to store anything useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And no, there is no way back in the good old time of optimized data structures)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When you think about it, punch cards are the safest way to backup data for long term storage.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As usual that depends on your definition on 'safest way'.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;They are not influenced by magnetic fields and their data (the holes) don't fade over time. They are also less sensitive to heat than most backup media I can think of.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Like any other media they do need a careful storage. But you're right, they can endure quite some abuse and neglect.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Their biggest advantage should be that they are future-proof. Try reading an old computer backup tape or diskette (pick any size). Even if the data signal hasn't faded you probably cannot retrieve the data without some major effort.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not true for classic nine track Tapes. they can not only be read by very primitive means (ferro fluid and a set of glasses), but are also (usually) plain text data. Of course, every data on every media may be application specific, and thus hard to decode for future data archeologists.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Punch cards are easy enough to read and don't have proprietary encoding issues.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure they have. Just because one physical storage is the same for all usages (size of cards and holes) doesn't mean all encodings are the same. While regular data may be encoded using zero to three holes per column to encode one symbols, there have been not only extended encodings with up to &lt;strong&gt;six&lt;/strong&gt; holes per column for binary data. But even within just one supplier like IBM there were many ways to use the card. Including horizontal storage, where data words where stored in rows, not columns. And then there were other manufacturers. All using the same paper and hole dimensions, but completely incompatible encoding.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If you wanted to read your grandfather's punch cards (or: your grandson wanted to read yours) it should be easy enough to create a card reader. It may not be ideal for graphics, but data - e.g. a family tree or government records - would be much safer if stored on punch cards in a fire-proof box.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Or even use metal cards, stretching the durability even further.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How come punch cards are not used (or not very popular) for long-term backups?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The main reason is &lt;em&gt;density&lt;/em&gt; - or it's reciprocal value &lt;em&gt;size&lt;/em&gt; - punch dards carry only a minuscle amount of information compared to their size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A punch card is 7.375 by ​3.25 by 0.007 inches (187.325 mm x 82.55 mm x 0,18 mm). That's a volume of ~2.8 cm³. With 80 bytes stored per card (*1), this comes down to 0.035 cm³ per character.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to the metric system everything from here only involve shifting the magnitue (*2).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;One KiB is like 36 cm³ - like a small wallet&lt;/li&gt;&#xA;&lt;li&gt;One MiB is 36,700 cm³ - already the size of a suit case (~10 US gallons)&lt;/li&gt;&#xA;&lt;li&gt;One GiB is 37.58 m³ - that's already almost the size of a garage.&lt;/li&gt;&#xA;&lt;li&gt;One TiB is 38,500 m³ - That's the size of a small school sports hall.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of this without taking boxes and other measues to handle them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now tell me again, what's the size of your actual hard drive(s) 1 TB? 4 TB ?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - We assume a simple standard code, no optimization that may give future readers a hard time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - I still used a pocket calculator, despite the fact that its a rough estimate anyway.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Addendum:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there is paper tape. Their density is about 10+ times of punch cards. Sure, a bit more fragile, but not so much. Still, even with 10 times less space needed, it can't be really used for today's surge of data.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Addendum 2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the title (&lt;em&gt;&quot;Why no punch card readers in use?&quot;&lt;/em&gt; ): They are ... at least I got one sitting right behind me, fully functional and in use.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-02-09T17:03:08.123" LastActivityDate="2018-02-09T17:03:08.123" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5655" PostTypeId="2" ParentId="5652" CreationDate="2018-02-05T15:33:57.663" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It may not be ideal for graphics, but data - e.g. a family tree or government records - would be much safer if stored on punch cards in a fire-proof box.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As already said, one card holds about 80 bytes of data, is made of paper, has the size of about, well, a postcard, and needs relatively low technology to read (or even, with some effort, you can train people to read it visually).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I can direct your attention to the wonderful retro technology of storing information on a roughly postcard-sized paper cards, requiring even less technology to store and retrieve the data (or even, with some effort, you can train people to read it visually): &lt;em&gt;quotation slips&lt;/em&gt;. They were extensively &lt;a href=&quot;http://lexiko.ujc.cas.cz/index.php?page=20&quot; rel=&quot;nofollow noreferrer&quot;&gt;used&lt;/a&gt; &lt;a href=&quot;http://www.oed.com/page/contrib/loginpage&quot; rel=&quot;nofollow noreferrer&quot;&gt;in&lt;/a&gt; &lt;a href=&quot;http://www.dmlbs.ox.ac.uk/web/quotation-slips.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;lexicography&lt;/a&gt;, and I've indeed seen it in productive use (i.e. not only consulting existing old archives) only a few years ago.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the storage density is substantially higher, my guess is that you can comfortably pack some hundreds of bytes per slip. Thus, when you already go this way, the quotation slips win over punchcards.&lt;/p&gt;&#xA;" OwnerUserId="476" LastEditorUserId="476" LastEditDate="2018-12-20T14:28:43.557" LastActivityDate="2018-12-20T14:28:43.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5656" PostTypeId="2" ParentId="5652" CreationDate="2018-02-05T15:47:51.067" Score="65" Body="&lt;p&gt;The main reason punched cards aren't used any longer is density.  A one-inch stack of cards is only 142 80-byte records (assuming the usual practice of encoding one byte per column).  So if you need to store 50,000 records that's a stack of cards 350 inches tall (over 29 feet).  And 50,000 80-byte records isn't that much, just 4 megabytes of data.  If you were to take those 50,000 records and simply print them on paper it would take 758 pages (printed on both sides that's less than one 500-sheet package of paper).  If you are paying for storage space (a warehouse, a floor of an office building, etc.) then consider the cost advantage of being able to store more records in less space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By comparison, a relatively minor (but still important) reason is that modern records no longer fit onto a single 80-byte card.  This means you need to use sequences of cards to hold larger records, which introduces a new problem:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Punched cards have no 'natural' sequence other than the sequence of cards in a stack.  If you drop the stack or just insert one card in the wrong place the data may not be understandable unless you have a way to restore the original sequence.  One way to record the sequence is to mark the sequence number on each card with a pen.  This is time-consuming for a large stack of cards.  Another way to record the sequence is to reserve some of the columns on the card to record a sequence number.  The cards can then be sorted into the correct order mechanically (there are machines that will do this).  The problem with doing this is that every column you reserve for sequencing reduces the number of columns you have left for actual data.  So 50,000 cards might require 4 columns for sequence numbers, but now each card only holds 76 bytes of data instead of 80, so instead of 50,000 cards you need 52,632 cards, which makes your already-bad density problem even worse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other ways to break up large records into multiple cards that don't involve sequence numbers, but they have similar problems that also end up requiring you to use more cards.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-02-05T15:47:51.067" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5658" PostTypeId="2" ParentId="5652" CreationDate="2018-02-05T17:16:26.283" Score="7" Body="&lt;p&gt;Many years ago I worked in a shop that had desktop apps (VB6) and mainframes.  I developed an app that replaced punch cards with ASCII text.  This was in the 1998-1999 timeframe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest reason given was the card reader was highly mechanical and broke down several times a week.  Eventually, parts were difficult (if almost impossible) to obtain.  The business made a decision to replace with a more dependable technology.&lt;/p&gt;&#xA;" OwnerUserId="7888" LastActivityDate="2018-02-05T17:16:26.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5660" PostTypeId="2" ParentId="5642" CreationDate="2018-02-05T19:49:25.013" Score="97" Body="&lt;p&gt;I am an EE system designer.  I have designed many PC systems (and non PC ones).  I do lots of power supply work and have dealt with many HDDs.  As always, there is bound to be an exception somewhere.   If someone told me to design an exception I certainly could, but here is my take:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;30 seconds was always overkill in terms of any digital state.  Even very large capacitors on a motherboard (not true inside the AC/DC supply or CRT) are completely drained in fractions of a second.  I have taken many scope measurements on many systems and sometimes find a 3-second hold-up on badly designed circuits where a voltage that matters has very high impedance when the system is off (usually something in a stand-by power circuit with a load switch) and they'll prevent a clean reset.  But 3 seconds is about the limit of what I've seen. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;30 seconds was - and is - true for in-rush current limiters in your AC power supply.  These come in two varieties negative and positive temperature co-efficient (search PTC and NTC ICL if you want to learn more) and they need some time to get back to the cold state to do their job.  If you are removing AC power and your power supply is hot then you may damage a PTC with a quick power cycle.  May.  I have seen it a few times (you'll find a blackened component near your fuse).  A well designed circuit should be able to handle a couple of hot-power cycles, but if you remove AC power and re-install it once within 30 seconds you should wait before doing it a second time.  I guarantee you (but not really, right?) that in the testing of your supply the engineers hot powered it a few times... but they didn't do it 5 times or if they did and it failed they didn't consider it a design failure.  But if it failed on a single hot cycle they would fix that.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;About HDDs.  I have never seen one damaged in an in-system power cycle (I have seen them damage by hot-plugging the HDD power cable: don't do that - they aren't tested for it).  But I did not extensively test any '90s PCs for this, and parking heads is real (and was more real then, the HDDs were much less smart).  However, starting in 2001 I did a &lt;em&gt;ton&lt;/em&gt; of HDD power-cycle testing including very late 1990s units.  I never saw what we took to be a &quot;drive still spinning when power was re-applied&quot; failure. The only failures were from voltage surges and mechanical shock.  But each model of HDD would have its own personal weaknesses and I am sure there is some unit out there that can't handle certain power cycles.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So yeah, don't wait 30 seconds if you held the front panel button of your PC until you forced a power-off.  3 seconds is good.  Don't wait 30 seconds if you removed AC power once (though if you think your supply is smoking hot then DO!).  Do not remove and re-insert AC power over and over.  You will surely burn it.  I'd bet many supplies could be burned in less than 30 seconds of intentional add/remove AC power.  &lt;/p&gt;&#xA;" OwnerUserId="7900" LastEditorUserId="-1" LastEditDate="2018-02-06T09:01:19.203" LastActivityDate="2018-02-06T09:01:19.203" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5661" PostTypeId="2" ParentId="5652" CreationDate="2018-02-05T20:59:11.260" Score="11" Body="&lt;p&gt;Your premise fails because it presumes higher density methods can't also be used.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the 1980s, the magazines that published code started using a barcode scheme so you could wand the program into your computer instead of keyboarding.  It didn't take off, but the concept is sound. Scanning those magazine pages is trivial; Google Books has already done it.  Writing some code to convert the scanned data into code again wouldn't be hard.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can either use one of those old methods rendered on microfiche as I'm sure has already been done... or you can design a new scheme for fiche, RAIDed so if a sheet is lost, or a corner or edge of all sheets a lost, the data can be reassembled.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then, with a little industrial effort, you can sustain suport for any legacy format you please.  &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;You are also placing too much faith in physical data rendering which itself has disadvantages.  For instance you just change the problem from maintaining machines which can read it, to protecting a more balky and fragile physical media i.e. Paper.  That tells me you are not an archivist. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And &lt;em&gt;even this&lt;/em&gt; is predicated on the idea of sticking data on a shelf, ignoring it for 20 years and having it readable when you come back.  That is an inept way to manage data that deserves to fail.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You protect data the way you protect the human genome: by continuously reproducing it. &lt;/p&gt;&#xA;" OwnerUserId="4330" LastActivityDate="2018-02-05T20:59:11.260" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5662" PostTypeId="2" ParentId="5642" CreationDate="2018-02-05T21:13:18.817" Score="5" Body="&lt;p&gt;Two factors may require leaving a computer off for a significant period of time before switching it back on:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Some computers distinguish power-on resets from other kinds of reset by looking for a certain pattern in memory.  If that pattern exists in memory, the computer may assume that certain other things in memory will be valid and should be kept rather than forced to known values.  If the pattern exists but those other things are not valid, attempting to reset the computer without erasing the pattern from memory may be ineffective.  Note that in some memory devices, some bits will have a slight bias toward &quot;1&quot; and some will have a slight bias toward &quot;0&quot;, but memory designers often try to minimize the bias.  While random manufacturing variations are likely to cause most bits to have a significant bias one way or the other, some bits may end up almost perfectly &quot;balanced&quot; and thus take an unusually long amount of time to lose their contents when power is lost.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;While many devices consume enough current during operation that removing power will cause VDD to quickly fall low enough to force a clean reset, many chips support a variety of low-power modes.  Even if a design never deliberately puts a chip into a super-low-power mode, a chip might somehow end up in such a mode anyway.  If that occurs, the bypass and storage caps may be able to maintain VDD for many times longer than usual.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If removing power for a second and then reapplying it causes a system to perform its normal power-on boot sequence, odds are extremely good that one second was long enough.  If it doesn't, it's possible that leaving the system off for a longer period of time might work; one shouldn't send the system in for repair until one has tried at least that.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-02-05T21:13:18.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5663" PostTypeId="2" ParentId="5643" CreationDate="2018-02-05T22:02:01.653" Score="4" Body="&lt;p&gt;DePauw saws of Belguim use DOS in their control computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've very recently seen brand new replacement computers running MS DOS 6. I don't know whether a brand new saw would still ship with a DOS machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although brand new there are a number of retro features to the design, including ISA sockets, PS2 and DDR RAM. I suspect the hardware was designed some time ago.&lt;/p&gt;&#xA;" OwnerUserId="7904" LastActivityDate="2018-02-05T22:02:01.653" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5664" PostTypeId="2" ParentId="5643" CreationDate="2018-02-06T00:31:44.657" Score="5" Body="&lt;p&gt;Just to note, your question is about OS manufacturers shipping DOS with &lt;em&gt;their&lt;/em&gt; machine. We also might have diferences on what 'machine' means, in this instance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, for the purposes of this question, OS Manufacturers are not usually hardware manufacturers (Assuming we can agree Microsoft is an OS Manufacturer, but the existance of Xbox and Surface pro does not make MS a hardware manufacturer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm in the warehousing industry and while there is a change underway to Andriod as the &lt;em&gt;de facto&lt;/em&gt; Operating system of choice, there are plenty of legacy applications that still require DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.barcodesinc.com/cats/portable-data-terminals/Operating_System=DOS/page=1/&quot; rel=&quot;noreferrer&quot;&gt;https://www.barcodesinc.com/cats/portable-data-terminals/Operating_System=DOS/page=1/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These devices are for sale with some kind of DOS. There are also devices from CipherLab and Honeywell that ship with DOS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, the OS itself can be downloaded:&#xA;&lt;a href=&quot;https://www.microsoft.com/en-us/store/p/ms-dos-mobile/9nblgggxzdtw#&quot; rel=&quot;noreferrer&quot;&gt;https://www.microsoft.com/en-us/store/p/ms-dos-mobile/9nblgggxzdtw#&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dallas&lt;/p&gt;&#xA;" OwnerUserId="7914" LastActivityDate="2018-02-06T00:31:44.657" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5665" PostTypeId="2" ParentId="5642" CreationDate="2018-02-06T03:22:28.917" Score="2" Body="&lt;p&gt;Don't know about the specific unit you mention, but I personally witnessed when an IBM 5100 &quot;portable computer&quot; was bricked by turning the power off and back on rapidly (probably under 1 second).  This would have been the late 1975.  The problem with this unit was that the internal &quot;power-on reset&quot; signal would not be generated, burning out the power supply itself and a couple of other components.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this unit used a &quot;switching&quot; power supply, not much different from more modern units, at least into the 1990s. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My take is that one needs to allow enough time for the main power supply voltages to be drained down -- 10 seconds or so.&lt;/p&gt;&#xA;" OwnerUserId="3483" LastActivityDate="2018-02-06T03:22:28.917" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5666" PostTypeId="2" ParentId="5642" CreationDate="2018-02-06T06:52:30.233" Score="4" Body="&lt;p&gt;I have no idea about 1990s PCs, but the same advice was given for Amigas - and the reason given was because a soft reset or a short power cycle didn't allow for enough time for the RAM to drain of residual power and reset, and only a portion of the RAM was deliberately reset during the power on cycle, which meant that nasty apps could potentially survive a reboot by hiding in the upper memory space.&lt;/p&gt;&#xA;" OwnerUserId="7923" LastActivityDate="2018-02-06T06:52:30.233" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5667" PostTypeId="2" ParentId="5642" CreationDate="2018-02-06T07:18:48.973" Score="2" Body="&lt;p&gt;It's still advisable to wait a few seconds, if your HDD is mechanical, i.e. doesn't apply to SSD disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&#xA;People are talking about capacitor discharge. It's not the reason for waiting.&lt;br /&gt;&#xA;The reason was and still is for HDD to stop spinning, so that when the power turns back on, HDD's heads wouldn't land on spinning disk and scratch the surface, leading to disk damage and data loss.&#xA;&lt;/p&gt;&#xA;" OwnerUserId="7924" LastActivityDate="2018-02-06T07:18:48.973" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5669" PostTypeId="2" ParentId="5652" CreationDate="2018-02-06T09:33:35.710" Score="2" Body="&lt;p&gt;If one wants to use paper as a backup medium, there is always the option of using an OCR friendly font and printing the data - in plaintext or using a binary-safe encoding like base64. You will still get much better density. Or even printing it in a non-character, more compressed format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Paper is not necessarily a more durable medium than eg a floppy disk or tape - the latter actually has less chance of catching mold or just weakening to a point where automated reading would tear it up when there is moisture or even flooding; silverfish and other paper eating critters will usually leave it alone; the risk of there being chemical self-decomposition is there with both media &lt;em&gt;and well known for non archival grade paper&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-02-06T09:33:35.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5670" PostTypeId="2" ParentId="5642" CreationDate="2018-02-06T09:35:21.677" Score="5" Body="&lt;p&gt;Indeed, a discharged capacitor has a higher inrush current than a charged one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, some power supplies have a &quot;slow start&quot; logic which limits the inrush current into the discharged capacitors when the power supply gets connected to the main. In some cases, quickly power cycling a power supply does not reset the &quot;slow start&quot; logic and the nearly fully discharged capacitors get charged without any special current limiting. This is especially true when the inrush current limited is an NTC. The NTC needs to cool down before it can act as a current limiter again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TL;DR version: an NTC thermistor is a very cheap way to limit the inrush current into a power supply (or a table saw or any other machine with a high power-on current). The NTC has a high resistance when it's at room temperature, so it will initially significantly limit the current going though it. It will then heat up quickly. At that higher temperature, its resistance will drop significantly and it no longer limit the current in a significant way. The temperature reaches an equilibrium where the NTC's resistance remains quite low, but still high enough to generate enough heat to keep it at the higher temperature required for low resistance. When the device is turned off, the NTC will cool down again - but not instantaneously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not aware how widespread the use of NTC as inrush current limiters was in PC power supplies. My 2017 NAS uses one...but I guess that's non-standard.&lt;/p&gt;&#xA;" OwnerUserId="5100" LastActivityDate="2018-02-06T09:35:21.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5671" PostTypeId="1" AcceptedAnswerId="5672" CreationDate="2018-02-06T09:59:58.890" Score="41" ViewCount="8699" Body="&lt;p&gt;As we know, in C to dereference a null pointer is undefined behaviour. From what I understand, the PDP-7 and the PDP-11 both have ordinary memory that can be written to and read from at address 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the PDP-11, that address is part of a memory region used to specify &lt;code&gt;EMT&lt;/code&gt; and &lt;code&gt;TRAP&lt;/code&gt; vectors. An operating system probably needs to be able to initialise these to the entry point of device drivers or whatever. And depending on model and configuration, writing to this memory location might cause a trap -- but the same goes for all other memory locations. So location 0 is not unique in that respect on this platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I can tell, the PDP-7 had ordinary memory at that address, just as many other machines do. But I understand that UB is very useful to compilers which need to be able to not guarantee a particular behaviour so that a particular architecture can be targeted easily. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is what led some C standard to treat the NULL pointer differently from any other pointer? Did K&amp;amp;R want to target an exotic architecture or something?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-02-13T12:23:34.640" Title="The history of the NULL pointer" Tags="&lt;c&gt;" AnswerCount="7" CommentCount="11" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5672" PostTypeId="2" ParentId="5671" CreationDate="2018-02-06T10:15:19.263" Score="26" Body="&lt;p&gt;The definition of &lt;code&gt;NULL&lt;/code&gt; is a syntactic crutch to allow a programmer a clear expression that a pointer is, at certain times, pointing nowhere. It's meant for readability - and with increased compiler bloat even for automated checks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a hardware level there is no such thing. A pointer is a word, and a word always holds a valid number. So by convention zero was chosen - it could have been any other. Like &lt;code&gt;-1&lt;/code&gt; for example. Selecting 0 offered the advantage that a simple &lt;code&gt;if(pointer)&lt;/code&gt; could be used to check if it's a valid pointer (or more correct, &lt;em&gt;not&lt;/em&gt; &lt;code&gt;0&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So my question is what led some C standard to treat the NULL pointer differently from any other pointer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;C also doesn't treat &lt;code&gt;NULL&lt;/code&gt; different from any other pointer. The C-Lib in contrast does, but not because of &lt;code&gt;NULL&lt;/code&gt;, but rather as its (runtime) value of &lt;code&gt;0&lt;/code&gt; will make some functions fail, when used as input.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did K&amp;amp;R want to target an exotic architecture or something?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nop. It's a concept needed from a pure software engineering point of view. Having a syntactic construct to handle uninitialized pointers improves readability and possibly enables further checks. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Now, for the historic part&lt;/strong&gt;, &lt;code&gt;NULL&lt;/code&gt; is, like the related handling of &lt;code&gt;TRUE&lt;/code&gt;/&lt;code&gt;FALSE&lt;/code&gt; inherited from BCPL (through B). Just here it was called &lt;code&gt;nil&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Even with that little historic bit, I'm not sure if Retrocomputing is the right place to ask for this, as it's about a basic concept in software engineering and not anything burdened with historic implication. So a quick search in &lt;a href=&quot;https://softwareengineering.stackexchange.com/questions/128327/what-is-the-difference-between-a-pointer-pointing-to-0x0-location-and-a-pointer&quot;&gt;Software Engineering&lt;/a&gt; and &lt;a href=&quot;https://stackoverflow.com/a/1296865/2973400&quot;&gt;Stack Overflow&lt;/a&gt; shows that this question has been asked many times. It's something people always stumble on, isn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-02-07T17:13:07.493" LastActivityDate="2018-02-07T17:13:07.493" CommentCount="17" ContentLicense="CC BY-SA 3.0" />
  <row Id="5673" PostTypeId="2" ParentId="5671" CreationDate="2018-02-06T12:05:31.693" Score="20" Body="&lt;p&gt;The important thing you may be missing is that a null pointer in C is not required by the standard to have the same binary representation as the number zero. It is still a &quot;normal&quot; pointer, but it points to a special location that the program is not allowed to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The integer constant &lt;code&gt;0&lt;/code&gt; is turned into &lt;code&gt;nullptr&lt;/code&gt; when used as a pointer. Similarly, &lt;code&gt;0&lt;/code&gt; will become &lt;code&gt;0.0&lt;/code&gt; when used in floating-point calculations, or &lt;code&gt;false&lt;/code&gt; in boolean operations. Coercions are not just one-way: &lt;code&gt;if(ptr)&lt;/code&gt; will convert a pointer into a boolean which indicates whether the pointer is not null. All of these conversions serve to avoid requiring that a null pointer shares the same representation as zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most machines represent integer zero as all-bits-zero and comparisons against that are particularly cheap, so it is worthwhile to arrange things so that sentinel values such as null pointers and end-of-string markers are all-bits-zero, and also that &lt;code&gt;+0.0&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt; are also all-bits-zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is some subtlety in C in that a literal &lt;code&gt;0&lt;/code&gt; is converted into &lt;code&gt;nullptr&lt;/code&gt;, whereas casting an integer that happens to be zero into a pointer will produce a pointer to location zero. Because they are the same thing on modern platforms, a whole class of potential bugs go away.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2018-02-06T12:05:31.693" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5674" PostTypeId="1" CreationDate="2018-02-06T13:08:15.097" Score="27" ViewCount="2839" Body="&lt;p&gt;Inspired by some comments on the question &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/5671/276&quot;&gt;&quot;&lt;em&gt;The history of the NULL pointer&lt;/em&gt;&quot;&lt;/a&gt;:-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a practice in the '70s to use the hexadecimal code &lt;code&gt;0xDEADBEEF&lt;/code&gt; to indicate an invalid value.  This could be to fill memory that was freed after a previous allocation, as the value of &lt;code&gt;NULL&lt;/code&gt; in C, or as an inaccessible address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The use of DEADBEEF is said to have originated on IBM midrange machines, as an easily identifiable error code when looking at a hex dump.  My experience of it is on VMS on DEC Vax machines, it allegedly was used on Apple Macs and the Commodore Amiga.  However, I haven't encountered it in use for several years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quick searching throws up differing and contradictory stories as to its spread and usage, so...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did IBM system engineers change jobs and take DEADBEEF with them as a code in other systems?  &lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2020-02-09T07:41:51.910" Title="How widely used was 0xDEADBEEF?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;dec&gt;" AnswerCount="2" CommentCount="14" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5675" PostTypeId="2" ParentId="5642" CreationDate="2018-02-06T13:23:55.093" Score="2" Body="&lt;p&gt;I've only heard it as 10-15 sec, and as I remember is was to make sure everything in RAM was cleared.&#xA;I had a Commodore Amiga back in the 1980's. You could mount a virtual drive in memory which would survive a restart (soft reset) and often even a crash that resulted in a reboot.&#xA;I experimented a bit for how long the virtual disk could actually survive a power off, and I think I landed about 4-5 sec.&#xA;In general it can be tough for hardware to be turned on and of quickly as others talk about here, but I mostly waited to make sure memory was cleared.&#xA;This was before having a HDD and I used the virtual drive for extremely fast reboot as I then didn't need a slow floppy disk.&lt;/p&gt;&#xA;" OwnerUserId="7936" LastActivityDate="2018-02-06T13:23:55.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5676" PostTypeId="2" ParentId="5642" CreationDate="2018-02-06T14:18:06.897" Score="4" Body="&lt;p&gt;I have observed a faulty IC (actually a discrete PLL) where the internal counters did not reset unless the board had been powered off for hours - or the power/ground pins were shorted. This is clearly an extreme case (the vendor claimed they could replicate but not identify a design fault), but suggests that odd corner case behaviour is quite possible - particularly in the absence of good brown-out reset and even rigorous reset synchronisation.&lt;/p&gt;&#xA;" OwnerUserId="46" LastActivityDate="2018-02-06T14:18:06.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5677" PostTypeId="2" ParentId="5674" CreationDate="2018-02-06T14:43:27.777" Score="18" Body="&lt;p&gt;It can be found in implementations of &lt;code&gt;zfs&lt;/code&gt; such as OpenZFS, inherited from the Solaris Kernel Memory C header file:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/openzfs/openzfs/blob/master/usr/src/uts/common/sys/kmem_impl.h&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/openzfs/openzfs/blob/master/usr/src/uts/common/sys/kmem_impl.h&lt;/a&gt; line 80&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define KMEM_FREE_PATTERN       0xdeadbeefdeadbeefULL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Quote from the &lt;code&gt;magic number&lt;/code&gt; wiki page:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;Dead beef&quot;, Famously used on IBM systems such as the RS/6000, also used in the classic Mac OS operating systems, OPENSTEP Enterprise, and the Commodore Amiga. On Sun Microsystems' Solaris, marks freed kernel memory (KMEM_FREE_PATTERN) &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="2054" LastActivityDate="2018-02-06T14:43:27.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5678" PostTypeId="2" ParentId="5671" CreationDate="2018-02-06T16:35:09.733" Score="4" Body="&lt;p&gt;For the PDP-11, you're thinking of physical address 0 for interrupt vectors. Logical address 0 in a user program just contains the first bytes of program code, i.e. the primary entry point (&quot;start&quot; from crt0.s). On a default executable, nothing stops you from reading it or writing to it, though if you write after the address returned to by main, you're gonna have a bad time. With &lt;code&gt;ld -n&lt;/code&gt;, it'll be read-only and attempting to write it will cause &lt;code&gt;SIGSEGV&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in that sense, a null pointer and a pointer to the &quot;start&quot; routine were identical, but it wasn't actually possible to reference assembly routines that did not begin with underscores from C. The PDP-11 probably wasn't the only architecture to put machine code (particularly startup code) that was not a valid C function at the zero address... it's a natural place to begin execution at, it wasn't something you could intentionally make a C pointer to, and it's something you need anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other solution is just to waste some small amount of space ensuring that that address is not used for anything. On &quot;split I/D&quot; executables on the PDP-11, data address 0 contains a zero explicitly put there for that purpose in crt0.s - in my test program, this was followed immediately by character data for the string literals I used with printf. (As has been pointed out, this could be at any address, not necessarily 0.)&lt;/p&gt;&#xA;" OwnerUserId="1891" LastEditorUserId="1891" LastEditDate="2018-02-09T20:19:30.070" LastActivityDate="2018-02-09T20:19:30.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5679" PostTypeId="2" ParentId="5643" CreationDate="2018-02-06T17:36:51.460" Score="0" Body="&lt;p&gt;This is a rather complicated question. To my knowledge, no PC OEM manufacturer have shipped DOS as a pre-installed OS on a mainstream, massively produced machine since the 90s. The other thing is refurbished PCs sold on auction sites such as eBay, Craigslist or similar - to avoid listing computers as working, but without an OS (which may induce smaller sales), they list them as working, with FreeDOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides not being pre-installed, there are still a lot of use cases for DOS even nowadays. You can still find DOS installed on checkout computers, newest of which are about 3-5 years old. Besides shops, also about 3 years ago most Polish health care computers ran DOS, which remains can still be seen in use of old and yellowed thermal printers.&lt;/p&gt;&#xA;" OwnerUserId="5211" LastEditorUserId="278" LastEditDate="2018-02-06T22:02:18.343" LastActivityDate="2018-02-06T22:02:18.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5680" PostTypeId="2" ParentId="5652" CreationDate="2018-02-06T17:52:53.550" Score="6" Body="&lt;p&gt;There are also some failure modes you have overlooked. The GB academic community's copy of the 1966 census was stored on punch cards but when someone tried to reload it they discovered that a squirrel had nested in the punch cards and many were now unreadable. &lt;/p&gt;&#xA;" OwnerUserId="7508" LastActivityDate="2018-02-06T17:52:53.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5681" PostTypeId="1" AcceptedAnswerId="5688" CreationDate="2018-02-06T18:13:20.783" Score="5" ViewCount="2608" Body="&lt;p&gt;Prior to the introduction of DOS in 1981 teletype printers were probably the most common hardcopy printer being used - usually in govt, educational or research facilities. When DOS arrived, teletype printers were not embraced, instead attempts to convert electric typewriters were used until mass production of dot matrix printers became standard. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before the widespread use of dot matrix printers, early issues of Byte and Kilobaud magazine regularly featured articles discussing conversion of electric typewriters for printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZC5qV.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZC5qV.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&lt;a href=&quot;https://www.rxtrace.com/2013/07/summer-writing-steve-jobs-bill-gates-and-me.html/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Electric typewriter as printer for Apple II in 1981.&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;For those mentioning that dot matrix existed in the 1970's... The pre 1981 dot matrix where industrial and not priced for small business or home. For example banks, hospitals and insurance companies often used &quot;band printers&quot;; the print head and ink ribbon where 10in tall and printed the entire page with one swipe. Data centers usually used 132col paper. It was not until Centronics and Epson (MX-80) entered the low end market that PC users got inexpensive hard copy. Was there an inexpensive dot matrix in production prior to 1981?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the answers that have been provided, it seems the cost is being overlooked. In 1977 $840 would be equivalent to about &lt;strong&gt;&lt;em&gt;$2000&lt;/em&gt;&lt;/strong&gt;, and $475 would be about $1000. This would be far above the average home budget. The same is true for other printers that have been mentioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, &quot;The $6,995 LaserWriter, introduced in March 1985 - just over a year after the Macintosh - was the first mass-market laser printer.&quot; [which would be &lt;strong&gt;about $15,000 today!&lt;/strong&gt;] (&lt;a href=&quot;https://www.macworld.co.uk/feature/apple/history-of-apple-steve-jobs-mac-3606104/&quot; rel=&quot;nofollow noreferrer&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Why were teletype printers not commonly used after DOS became available for business and home use?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2018-02-09T20:16:47.850" LastActivityDate="2019-01-17T12:56:59.360" Title="Why were teletype printers not used for DOS computers?" Tags="&lt;history&gt;&lt;ms-dos&gt;&lt;printer&gt;" AnswerCount="4" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5682" PostTypeId="2" ParentId="5671" CreationDate="2018-02-06T18:13:28.887" Score="14" Body="&lt;p&gt;Another relevant historical tidbit: You may have noticed that the values chosen for NULL - i.e 0xFFFFFFFF and 0xDEADBEEF - &lt;em&gt;are both odd-valued addresses&lt;/em&gt;.  Most architectures (certainly most at the time Unix was created) did not implement addressing down to the individual byte; they were only able to address words of two or four bytes - that is, only even-valued addresses were legal.  By choosing an odd-valued address for the value of NULL, the C compiler and runtime system ensured that any attempt to actually dereference NULL would immediately trap to the OS; that is why the usual error for dereferencing NULL on Unix is 'Segmentation Violation'.&lt;/p&gt;&#xA;" OwnerUserId="7947" LastActivityDate="2018-02-06T18:13:28.887" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5683" PostTypeId="2" ParentId="5671" CreationDate="2018-02-06T19:54:20.030" Score="8" Body="&lt;p&gt;Tony Hoare somewhat-famously in 2009 said this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn't resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While I don't have any specific citations, I suspect that C was influenced by ALGOL, or just made the same decision separately since having a specific value to represent &quot;not a valid reference&quot; was an easy and useful thing to do. It wasn't so much about &quot;how to point to a specific part in memory that's named 'zero'&quot; as much as &quot;we need to define a way to indicate that a pointer is not currently valid&quot;, particularly as a sentinel value. Given the constraints of computers at that time, it seemed a reasonable thing to do. So, one just creates a value called &quot;NULL&quot; which can be assigned to any pointer type, and there you have it.&lt;/p&gt;&#xA;" OwnerDisplayName="user616" LastActivityDate="2018-02-06T19:54:20.030" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="5685" PostTypeId="2" ParentId="5642" CreationDate="2018-02-06T21:44:26.027" Score="1" Body="&lt;p&gt;A PC is called a PC because IBM called their &quot;brand new&quot; microcomputer a PC back in 1981 or thereabouts. I started programming microcomputers in 1976 and I can tell you that even some electronic and electrical engineers were afraid to recommend any design they had not personally vetted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The power supply, the RAM, the CPU and HDD were all susceptible to the problems mentioned in other replies. I would say THAT is the reason for the 30 second rule. The engineers used that as their rule of thumb because people were having power supply on/off problems right and left. As engineers got smarter they protected their designs from crazy user behaviors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are working on vintage equipment you may want to be extra cautious. If in doubt, leave that puppy unplugged for AT LEAST 30 seconds. Make sure every indication of remaining power is OFF. &quot;just saying&quot; it, be careful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The risk is you will end up with a brick for a PC.&lt;/p&gt;&#xA;" OwnerUserId="7956" LastActivityDate="2018-02-06T21:44:26.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5686" PostTypeId="2" ParentId="5681" CreationDate="2018-02-06T23:35:07.293" Score="7" Body="&lt;p&gt;The teletype was not only the printer but for some old systems it was the only monitor for standard output. Having a CRT monitor made that function obsolete so that leaves only printing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The teletype was originally designed for copper line telephone network based text messaging. MS-DOS had no networking capabilities but you could install a modem in early PCs and use modem terminal software to speak directly to a teletype using telephone lines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Buying a modem and a teletype was more expensive than just buying a dot matrix printer which printed faster and was supported by most software from which you would want to print. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sending a file to a teletype through a modem is kinda like a fax; which was another technology that was disruptive to the teletype market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FROM WIKIPEDIA:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Obsolescence of teleprinters&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Although printing news, messages, and other text at a distance is&#xA;  still universal, the dedicated teleprinter tied to a pair of leased&#xA;  copper wires was made functionally obsolete by the fax, personal&#xA;  computer, inkjet printer, email, and the Internet.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In the 1980s, packet radio became the most common form of digital&#xA;  communications used in amateur radio. Soon, advanced multimode&#xA;  electronic interfaces such as the AEA PK-232 were developed, which&#xA;  could send and receive not only packet, but various other modulation&#xA;  types including Baudot. This made it possible for a home or laptop&#xA;  computer to replace teleprinters, saving money, complexity, space and&#xA;  the massive amount of paper which mechanical machines used.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;As a result, by the mid-1990s, amateur use of actual Teletype machines&#xA;  had waned, though a core of &quot;purists&quot; still operate on equipment&#xA;  originally manufactured in the 1940s, 1950s, 1960s and 1970s.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Despite the obsolescence of teleprinters by the 21st century, its&#xA;  distinctive sound continues to be played in the background of&#xA;  newscasts on the New York City radio station WINS, and Philadelphia's&#xA;  KYW, a tradition dating back to the mid-1960s.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Teleprinter&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Teleprinter&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7460" LastActivityDate="2018-02-06T23:35:07.293" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5687" PostTypeId="2" ParentId="5643" CreationDate="2018-02-07T02:49:18.017" Score="2" Body="&lt;p&gt;In terms of useful software (rather than the FreeDOS use to get around contracts), Toshiba (formerly IBM) &lt;a href=&quot;https://en.wikipedia.org/wiki/4690_Operating_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;4690 OS&lt;/a&gt; is still being shipped. It is an OS for Toshiba/IBM cash registers, and runs on descendants of Digital Research CP/M-86 and &lt;a href=&quot;https://youtu.be/IKzleg4AcXg?t=4m45s&quot; rel=&quot;nofollow noreferrer&quot;&gt;Concurrent DOS&lt;/a&gt;. The hardware it runs on is a PC and is Windows compatible.&lt;/p&gt;&#xA;" OwnerUserId="7959" LastEditorUserId="7959" LastEditDate="2018-02-07T05:57:31.307" LastActivityDate="2018-02-07T05:57:31.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5688" PostTypeId="2" ParentId="5681" CreationDate="2018-02-07T02:59:23.623" Score="15" Body="&lt;p&gt;&lt;strong&gt;Speed&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Teletypes were &lt;strong&gt;not&lt;/strong&gt; all limited to use over a modem. Many (e.g., the Model 43 - I had one of those) even had an RS232 compatible interface and could easily be used as a regular computer printer. But since most teletypes were designed for communications, and typical modems of the time were low speed, the teletypes themselves were low speed printers. Typical dot-matrix printers of the early 1980s were much faster. For example, the Epson MX-80 could print up to 80 characters per second. The TTY 43 was actually a dot-matrix printer but since the primary market was communications over cheap (for the time) modems, there was no design rationale for more than 30 characters per second (actually I think it went a bit faster to compensate for CR/LF speed). The Decwriter LA36 was similar vintage - and speed - as the TTY43 and actually was in use quite a bit with early microcomputers. The LA120 had a top speed of 120 CPS, more typical of the dot-matrix printers of the early 1980s and was definitely used quite a bit as a printer. However, your typical PC buyer would probably not have a reason to spend extra to get a keyboard with their printer when they weren't going to use it as a console for their computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The electric typewriter conversions were generally an attempt at &quot;letter quality&quot; printing. The first generation of dot-matrix printers were no substitute for typewriter quality output, and the teletypes were generally no better. Daisy wheel printers, like the Diablo 630, were actually better suited for computer printing than a typical electric typewriter, but a bit earlier than DOS (or at least MS-DOS/PC-DOS), in the 1970s, electric typewriter conversions may have been a relatively cost-effective alternative to a regular computer printer. You &lt;em&gt;could&lt;/em&gt; use a serial printer (with a keyboard) as a console with MS-DOS, but you wouldn't be able to run dBase II or WordStar or any of the other programs that were the selling force behind DOS-based PCs.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2018-02-07T02:59:23.623" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5689" PostTypeId="2" ParentId="5671" CreationDate="2018-02-07T13:42:59.923" Score="2" Body="&lt;p&gt;C treats NULL differently because it is undefined behaviour.&lt;/p&gt;&#xA;&lt;p&gt;Undefined behaviour is very different to implementation defined behaviour. Implementation-defined behaviour can simplify portability by allowing different implementations to make different choices (for example, different platforms have different native integer representations).&lt;/p&gt;&#xA;&lt;p&gt;Undefined behaviour is only partly related to portability - there's no requirement that undefined behaviour be consistent, even on the same platform (so even if C had only targetted a single platform, it may still have included undefined behaviour). In addition to the portability gains,  undefined behaviour allows implementations to emit simpler or faster code, by making error handling optional for certain error conditions. To quote the C rationale document (copied from &lt;a href=&quot;https://stackoverflow.com/questions/2397984/undefined-unspecified-and-implementation-defined-behavior#answer-14487077&quot;&gt;here&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The terms &lt;em&gt;unspecified&lt;/em&gt; behavior, &lt;em&gt;undefined&lt;/em&gt; behavior, and &lt;em&gt;implementation-defined&lt;/em&gt; behavior are used to categorize the result of writing programs whose properties the Standard does not, or cannot, completely describe. The goal of adopting this categorization is to allow a certain variety among implementations which permits quality of implementation to be an active force in the marketplace as well as to allow certain popular extensions, without removing the cachet of conformance to the Standard. Appendix F to the Standard catalogs those behaviors which fall into one of these three categories.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Unspecified behavior&lt;/em&gt; gives the implementor some latitude in translating programs. This latitude does not extend as far as failing to translate the program.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Undefined behavior&lt;/em&gt; gives the implementor license not to catch certain program errors that are difficult to diagnose. It also identifies areas of possible conforming language extension: the implementor may augment the language by providing a definition of the officially undefined behavior.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Implementation-defined behavior&lt;/em&gt; gives an implementor the freedom to choose the appropriate approach, but requires that this choice be explained to the user. Behaviors designated as implementation-defined are generally those in which a user could make meaningful coding decisions based on the implementation definition. Implementors should bear in mind this criterion when deciding how extensive an implementation definition ought to be. As with unspecified behavior, simply failing to translate the source containing the implementation-defined behavior is not an adequate response.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="3867" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-02-08T20:42:24.527" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5690" PostTypeId="2" ParentId="5652" CreationDate="2018-02-07T18:26:25.353" Score="2" Body="&lt;p&gt;An additional reason, not previously covered: &lt;strong&gt;expense&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last anecdotally quoted price I can find for punch cards was from &lt;a href=&quot;https://www.velocityreviews.com/threads/ibm-punch-cards.481645/#post-2740742&quot; rel=&quot;nofollow noreferrer&quot;&gt;1996&lt;/a&gt;, and was around USD 42 for a box of 2000 cards. That's a lot to pay for roughly 160 KB of storage.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-02-07T18:26:25.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5691" PostTypeId="2" ParentId="5652" CreationDate="2018-02-07T18:50:44.793" Score="6" Body="&lt;p&gt;The reason we don't use punch cards anymore is because literally every other data storage medium that's been invented since is vastly superior in every way imaginable.  Let's compare them to the current media of choice for long-term data storage: magnetic tapes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first is obviously density, as every other answer here reflects, so I won't get into that much except to say that even if you used smaller holes and used an advanced encoding scheme with fewer holes needed to represent data, it would still be impossible by electro-mechanical means to achieve the density of literally &lt;em&gt;billions&lt;/em&gt; of bits per square inch that magnetic media can provide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second concern is cost. Right now, a 7/15-terabyte LTO Ultrium tape can be had for around $80 -- almost a quarter of the cost of a hard drive with similar capacity.  Assuming ultra high-density punch cards (that don't exist in reality), tapes would still be cheaper than paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thirdly is fragility.  Paper is way more fragile than plastic (which is what the backing material of tapes are made from).  For long-term storage of punch cards, you need tightly controlled heat and humidity conditions for long periods of time. Paper molds, degrades, and warps much faster than plastic.  If you made the punch cards out of plastic or even metal plates, they'd be thicker than paper and would contribute to the density problem above.  Yes, magnetic tapes are sensitive to magnetic fields (obviously), but they're way less sensitive than you'd think, and modern error-correction algorithms make them very robust.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, let's not discount optical storage here either.  Technically speaking, you can think of optical discs as a logical evolution of punch cards; the data is encoded using microscopic pits (i.e. &quot;holes&quot;) in a hardy substrate that can be read by a laser rather than mechanical switches. Optical discs can therefore be made out of all sorts of materials, negating all the environmental concerns of punch cards and magnetic media.  In fact, for serious long-term archival of certain vital records, optical discs are preferred in some cases even over tapes.  Their only drawback is they still can't rival the density and cost advantages of other forms of media.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for future-proofing (e.g. looking at your grandfather's porn collection), you could use vinyl records for that.  The technology has been around for over a century, and it's been used before to encode digital data. It never really caught on, but there's a metal record floating around in space right now on the Voyager II probe, which aliens might find in a few thousand millennia.  Doesn't get much more long-term than that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though data storage on vinyl records has never been a thing, it'd &lt;em&gt;still&lt;/em&gt; be a better choice than punch cards.&lt;/p&gt;&#xA;" OwnerUserId="4565" LastEditorUserId="4565" LastEditDate="2018-02-07T19:01:04.933" LastActivityDate="2018-02-07T19:01:04.933" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5692" PostTypeId="2" ParentId="5652" CreationDate="2018-02-07T19:42:50.120" Score="3" Body="&lt;p&gt;Using punchcard for long-term backup is a bad idea imho.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;density/storage space required - as pointed out in the other answers; 1 TB of data translate to 12.5 billion cards or (2.4 g per card?) &lt;strong&gt;30,000 tons of cardboard&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;sensitivity - paper easily gets moldy, brittle or warps; it's rather hard to store long term, especially in quantity&lt;/li&gt;&#xA;&lt;li&gt;pest - rats and mice eat paper as do various insects&lt;/li&gt;&#xA;&lt;li&gt;read speed - even with a high-speed mercury reader, reading back data is as slow as a nail; 30 cards per second (~2000 CPM) translate to 2,400 byte/s - that's little more than the infamous 1541 floppy drive. The 12.5 billion cards from above would take a good 13 years. yaaawwwwnnnnn...&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It all depends on what &quot;long term&quot; means. 10 years? 100 years? 1000 years? You should carve your data in stone and bury it. ;-)&lt;/p&gt;&#xA;" OwnerUserId="5200" LastActivityDate="2018-02-07T19:42:50.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5693" PostTypeId="2" ParentId="5652" CreationDate="2018-02-07T19:56:36.550" Score="5" Body="&lt;p&gt;There are plenty of good reasons but to me the primary reason is the ease of copying. Two copies on bad mediums are more desirable than one copy on a good medium. I put a 4TB drive in a box and in less than a day have a complete copy on the medium of my choice. Don't try this with your box of punch cards at home.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Punch cards are only as good as the staff you're willing to pay to maintain them. I have bunches of hard drives and they don't require any staff.&lt;/p&gt;&#xA;" OwnerUserId="7982" LastActivityDate="2018-02-07T19:56:36.550" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5694" PostTypeId="2" ParentId="5642" CreationDate="2018-02-07T21:37:01.673" Score="2" Body="&lt;p&gt;15 answers and no one mentioned RAM.  The point of shutting down a computer device (any computer device. PC, cell phone, printer, anything with RAM), waiting X seconds, and then rebooting, is to make sure the RAM completely clears. RAM can only store information as long as power is supplied. Any fault in the RAM causing random glitches, will be cleared by power-cycling with X seconds of wait time (to guarantee that power is completely emptied from the circuits). Doesn't necessarily have to be 30 seconds. 5-10 will do.&lt;/p&gt;&#xA;" OwnerUserId="7988" LastEditorUserId="7988" LastEditDate="2018-02-09T15:28:34.350" LastActivityDate="2018-02-09T15:28:34.350" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5695" PostTypeId="2" ParentId="5681" CreationDate="2018-02-08T16:09:56.527" Score="7" Body="&lt;p&gt;The assumptions of this question are at best misleading and maybe based on personal experience, but not the situation at the time cited.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As requested I just pulled out the very second issue of &lt;a href=&quot;https://en.wikipedia.org/wiki/Kilobaud_Microcomputing&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kilobaud Magazin&lt;/a&gt; of February 1977 (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right at the beginning there is an &lt;a href=&quot;https://archive.org/stream/kilobaudmagazine-1977-02/Kilobaud_1977_February#page/n9/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;ad on page 12 selling ASR33&lt;/a&gt; starting at USD 840. &lt;a href=&quot;https://archive.org/stream/kilobaudmagazine-1977-02/Kilobaud_1977_February#page/n53/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Page 54&lt;/a&gt; shows an ad offering an Olivetti teletype at USD 950, even including RS232. The same ad also features a 100 LPM 132 column dot matrix printer at the same price. So why buy a slow 10 CPS teletype? The same ad also features a thermal printer at USD 475.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, page 130 features a rather high quality (compared to an ASR33) IBM Selectric with RS232 at USD 895. It might be useful to remember that the Selectric wasn't developed primarily as a typewriter, but as printing terminal for mainframe usage. It's not their developers' fault that it was also a darn durable office typewriter. They just made a reliable device with no hard connection between the keyboard and print mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally page 49 shows how cheap dot matrix already was in the spring of 1977, with an ad for a printer with a parallel port at USD 425 - when bought as kit (just electronics and print mechanics) it got down to only USD 179. It's also interesting here that a current loop (50mA) version, as a TTY replacement, was rather expensive at USD 575. This would not only mean one has to pay for an additional current loop interface in the computer (not available by default on most computers), but also pay even more for the printer itself. Ok, still less than a full teletype, but why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kilobaud was always a magazine directed at the hobbyist, not business or large users, attracting advertisers targeting a low price range. I bet pulling any other magazine from the same time will show a similar result. Even more so after 1977.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Proof#1 - Already in the spring of 1977, at the very start of microcomputer usage, shows that dot matrix printers were not only widely available, but also undercut TTYs by a large amount.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So lets take a peek at the &lt;a href=&quot;https://archive.org/details/Kilobaud198102&quot; rel=&quot;nofollow noreferrer&quot;&gt;February 1981 issue&lt;/a&gt; of the same magazine. That's about 7 months &lt;strong&gt;before&lt;/strong&gt; the IBM PC debuted in August 1981 and thus DOS.  Here it is easy to see that dot matrix printers and the parallel port have completely taken over. Page 11 features an &lt;a href=&quot;https://archive.org/stream/Kilobaud198102/Kilobaud%201981-02#page/n9/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;ad with Epson's MX-70&lt;/a&gt; at USD 645 and its 'brother' MX-80 for USD 800. Another ad at page 24 (*2) gives a nice comparison. here an MX-80 is only USD 575, while a Centronics 730 costs USD 599.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many more featuring various dot matrix printers in the range of USD 400 to 800, but only a &lt;a href=&quot;https://archive.org/stream/Kilobaud198102/Kilobaud%201981-02#page/n39/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;single one featuring a (Type 43) Teletype&lt;/a&gt; on page 41 - still at USD 989. So while TTY stayed basically the same over this 4 year period, dot matrix printers did not only improve but dropped quite a lot in price. Oh, and a 13 column (!) Selectric with parallel interface is down to competitive USD 659 (&lt;a href=&quot;https://archive.org/stream/Kilobaud198102/Kilobaud%201981-02#page/n69/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;p.71&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is of course only one magazine and two issues, but I'm quite sure this snap sample will hold when checking more data from other sources during the time period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Proof#2 - By 1981 the dot matrix printer had complete victory and teletypes where merely an outdated and expensive side note.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, there were many articles in these early magazines to convert some TTY, electric typewriter or Etch-a-Sketches to a hardcopy devices. As much as there were even more articles about building your own computer from parts or writing an OS from scratch. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, for hobbyists with too much time on their hands, finding a TTY in a scrap sale was still a feasible idea for the fun alone, but it for sure was never anywhere near mainstream. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion: The claim of teletypes being the 'most common' printer before DOS never existed in the first place.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least, considering the above claim, the PC (and DOS) in 1981 was meant for professional use, not as a hobbyist toy. But even with the clearly made for hacking Apple II the first interface was parallel, and the first printer offered by Apple (in 1978), targeted at hobbyists was a (thermal) matrix printer - undercutting any TTY price by far.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Grandpa Story:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said all of this, there are special occasions where even in 1980 new development for TTY was a thing. In my case I had already an Apple II (and a cheap dot matrix printer) in Spring of 1980 when I joined the Bundeswehr (German Army). Due to some less than official circumstances it worked out that we used my Apple to improve some bureaucracy during my service - and to produce printout I did build an interface so three(!) TTY could be connected to print in parallel. After all, they were dead slow, so it was better to have three interleaving print jobs and merge the pages later on, than to wait three times as long doing the same on a single TTY. This was also quite some fun to program :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason was less technical or due to budget but rather availability. As part of the staff of a signaling battalion TTYs were available by the dozen :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Which is BTW the issue featuring a &lt;a href=&quot;https://archive.org/stream/kilobaudmagazine-1977-02/Kilobaud_1977_February#page/n35/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;5 page Apple 1 review&lt;/a&gt; plus the original &lt;a href=&quot;https://archive.org/stream/kilobaudmagazine-1977-02/Kilobaud_1977_February#page/n97/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;first Apple ad&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - On a side note, page 25 features an intriguing ad :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-01-17T12:56:59.360" LastActivityDate="2019-01-17T12:56:59.360" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="5697" PostTypeId="2" ParentId="5652" CreationDate="2018-02-08T17:38:36.863" Score="4" Body="&lt;p&gt;Unfortunately, as someone who was around in those days of punch cards, a major con was the sheer size and costs of the card puncher and the reader. And as they were paper cards there was always the issue of card-jams/ripped cards, not only possible in the card puncher, but in the reader as well. A punch machine and reader/sorter required an area of about 10'x 5' and in those days business machines such as those and even typewriters were solid - built to last a hundred years.  The only 'pro' was the bag of punchouts Mom brought home for us kids - I guess that would be a 'con' for the parents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if you had anything close to a sizable business (whatever that means) you would be spending a fortune on storage costs.  My uncle ran a small mom &amp;amp; pop -sized accounting firm and their storage room was as big as the office itself, stacked floor-to-ceiling with cases of cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and did I mention the paper. You could lose your entire database in the event of a fire or water damage.  And all of the paper dust (as well as those punchouts) that could easily ignite in those days when people smoked in their offices.  Ew.&lt;/p&gt;&#xA;" OwnerUserId="8005" LastEditorUserId="8005" LastEditDate="2018-02-08T17:46:32.933" LastActivityDate="2018-02-08T17:46:32.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5698" PostTypeId="2" ParentId="5642" CreationDate="2018-02-08T19:43:07.947" Score="2" Body="&lt;p&gt;Yes, a 37-second shutdown was sometimes needed on some 1990s computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I worked with computers in the mid- to late-1990s that were networked as part of a corporate network.  The computers I worked with had Windows operating systems.  Some computers on the network ran on Windows NT, but none of the computers I worked with did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was responsible for writing custom software for some of these computers.  The simplest way of making sure that each computer was using the most up-to-date version of the software was to place the up-to-date copy in a particular place on one &quot;fileserver&quot; computer, and have a desktop shortcut on each &quot;client&quot; computer that pointed to that location on the &quot;fileserver&quot; computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes a computer (I forget whether it was the &quot;client&quot; or the &quot;fileserver&quot;, or maybe it was sometimes either one) would get confused about how to find the up-to-date version of the software.  (I forget if the problem was a network connectivity issue, or a mis-caching of the software.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We found that the best way to clear the problem was to shut down a computer (whichever one seemed to not be finding the correct file) for at least 37 seconds, and turn it back on again.  35 seconds was not sufficient.  I suspect that this fix involved two timeouts -- one of 30 seconds, and one of 5 seconds.  I do not know what aspect of the computers or the network needed to be cleared by each timeout.&lt;/p&gt;&#xA;" OwnerUserId="6618" LastActivityDate="2018-02-08T19:43:07.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5699" PostTypeId="2" ParentId="5642" CreationDate="2018-02-08T23:27:04.523" Score="7" Body="&lt;p&gt;Background:  I'm a EE specializing in embedded systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You want a 10+ second delay between turning items off and back on.  This still applies to modern computers (if actually removing power, not just soft shutdown / restart) and equipment with embedded processors including e.g. routers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 10+ second delay is primarily to allow power supplies (stored charge in capacitors) to fully decay to near zero.  What this does is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Puts reset capacitors (which have a pullup resistor to power, usually with a parallel diode to help discharge them quickly at power-down and make this less of an issue) into a known state.&lt;/li&gt;&#xA;&lt;li&gt;Some devices (including e.g. SD cards and USB sticks) have built-in reset circuits.  I've recently seen one make of SD card not function (100% repeatably) if the 3.3V supply wasn't taken down to under (IIRC) about 0.6V before re-applying power.&lt;/li&gt;&#xA;&lt;li&gt;Many years ago, I worked on a (low-power handicapped aid) system that we found would not reset - &lt;em&gt;ever&lt;/em&gt; - if a serial cable was connected to a device with its own power supply, when we were using certain types of serial interface chips.  The serial input power fed back through the protection diodes and kept the power supplies from discharging fully, leaving devices in bad states.&lt;/li&gt;&#xA;&lt;li&gt;If a device has gotten into a latched-up state (parasitic SCR), it's not going to un-latch until power is fully removed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Issues with power-supply inrush protection also apply, per other answers (I'm focused primarily on digital, not power-supply design).&lt;/p&gt;&#xA;" OwnerUserId="8007" LastActivityDate="2018-02-08T23:27:04.523" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5701" PostTypeId="2" ParentId="5642" CreationDate="2018-02-09T05:18:28.970" Score="5" Body="&lt;p&gt;Yes there was but it doesn't seem to be where most of these posts are coming from. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I build and repaired computers from this era in this era. While caps certainly could hold a charge, I can't think of any ever that could hold one for 30 seconds, and was used directly in the PC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for the 30 second rule was two fold. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, and formost it gave time for heat to dissipate. These older computers didn't often have fans, and a poorly built, or poorly cleaned one could over heat. Counting to 30 would let even the highest (non-board frying) temperature cool down quite a bit.  Now it's not like a two second cycle would be &quot;hotter&quot; then a 30 second cycle. But if your PC was overheating, it was better to wait a bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second was connected peripherals, specially the monitors.  In this era some form of vga monitor was typically in use. They were generally CRTs, and generally speaking your turned off the tower, but you left the monitor on. Power cycling the tower would me going from a, lets say 800x600x60 graphical mode to a text mode. In some monitors this would cause, well it wouldn't be good. You could, and I have seen, plenty of, fried monitors because the PC was power cycled too quickly. Other peripherals had other common issues. Modems needed time to reset, printers needed time to time out and realize the next chunk of data wasn't coming. Even some keyboards and mice could get &quot;stuck&quot; if you power cycled too quickly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These things combined, made it a fast rule to just tell people count to 30, then to try to explain how to, or why to check all the little bits and pieces. In the end, it's a rule of thumb that was just easier to tell someone then to try to explain. Even today computers are little magical black boxes where you shove electricity in and get fancy moving pictures out, to a lot of people. Most people don't care to know the reason why, or how it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in short, yes there was a benefit, and a need, but it was mostly social engineering. &lt;/p&gt;&#xA;" OwnerUserId="454" LastActivityDate="2018-02-09T05:18:28.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5702" PostTypeId="2" ParentId="5652" CreationDate="2018-02-09T14:41:50.287" Score="4" Body="&lt;p&gt;Other answers have focussed on data density and factors relating to the medium.  However they are all missing one key element.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Individually robust artifacts do not give robust data security.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Data security does not come from having long-lived artifacts.  We have a few scrolls which have survived from thousands of years ago - but most of them have long since crumbled to dust, or been burnt for kindling.  We have some inscribed stones from thousands of years ago - but most of them have long since been reused for building material.  Numerous artifacts have writing which cannot be decoded, because the language or script used has been lost to history, or which took centuries to be decoded until that language or script could be figured out.  &lt;a href=&quot;https://en.wikipedia.org/wiki/Ozymandias&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ozymandias&lt;/a&gt; is the default state of archaeology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What data has survived best from thousands of years ago?  Answer: anything which has been copied multiple times, with multiple copies across multiple geographic locations.  And of that, the data which has survived the absolute best is that which has not only been copied, but which has been repeatedly retranslated into the currently-applicable language.  Anything with very few copies has generally been lost.  The destruction of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Library_of_Alexandria&quot; rel=&quot;nofollow noreferrer&quot;&gt;Library of Alexandria&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Nazi_book_burnings&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nazi book burnings&lt;/a&gt;, or anything similar are all demonstrations that relying on a single storage location is not a robust strategy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Torah is perhaps the best example of how to preserve data.  How robust is any single Torah?  Not very - it's only paper.  How robust is the &lt;strong&gt;&lt;em&gt;data&lt;/em&gt;&lt;/strong&gt;?  History shows that it's been incredibly robust, because the process of copying a Torah does not just involve copying but also error-checking and error-correction. &lt;a href=&quot;https://www.simpletoremember.com/articles/a/torahaccuracy/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Checking between widely-separated Jewish communities, the error rate is tiny.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, your punch cards.  Yes, your single stack of punch cards could survive for a long time.  As one fictional example shows, you could even use &lt;a href=&quot;http://engrphys51ku.blogspot.co.uk/2009/11/golden-punched-cards.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;gold punch-cards&lt;/a&gt;.  But unless you have multiple redundant copies, it's very likely that your single golden copy will succumb to damage and be lost; or that the necessary language/technology/whatever to read that golden copy will make it impossible to retrieve the data.&lt;/p&gt;&#xA;" OwnerUserId="6749" LastEditorUserId="6749" LastEditDate="2018-02-09T15:59:23.907" LastActivityDate="2018-02-09T15:59:23.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5703" PostTypeId="2" ParentId="5643" CreationDate="2018-02-09T15:07:57.190" Score="0" Body="&lt;p&gt;In some cases, free (whether open source or just available legally with no payment) operating systems are installed on &quot;blank&quot; hardware to satisfy requirements in the licensing agreements of the OS that is to be actually installed on it. For example, some Windows versions under some licensing contracts were/are more expensive - or not available at all - as a non-upgrade version, while there is/was an upgrade version available that is a valid upgrade to a long list of eligible third party OSes (in some cases including free OSes).&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-02-09T15:07:57.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5704" PostTypeId="1" AcceptedAnswerId="5706" CreationDate="2018-02-09T17:01:58.027" Score="3" ViewCount="170" Body="&lt;p&gt;What is stored in the IIgs PRAM? I'm going to replace my PRAM battery in a ROM 03 IIgs and that got me thinking about what is stored in PRAM. I know that date and time are stored, but not if all the same values are stored on the IIgs as on the Macintosh.&lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2018-02-09T18:29:57.337" Title="What is stored in IIgs PRAM?" Tags="&lt;apple-iigs&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5705" PostTypeId="2" ParentId="5642" CreationDate="2018-02-09T17:31:52.337" Score="4" Body="&lt;p&gt;None of the other answers reflect what it was like to be a PC user in the mid 1990s. About 1994 or thereabouts, power supplies on Microsoft PC's changed from a regular switch to something less intuitive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a regular switch, it was obvious when the power was off. I could switch off my Vic-20 in 1982, count to 3, and then turn it back on. I knew for certain that it was completely powered down. Off meant no power. Want to turn off the monitor, PC, printer, and a lava lamp all at once when you are done playing &lt;a href=&quot;https://en.wikipedia.org/wiki/Gorf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gorf&lt;/a&gt;? Just flip the on/off switch on the power strip.   Similar for PC's around that time - there was an on/off switch. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Around 1995 or so, they introduced modern power supplies, where you hit the power button, and what happens isn't as obvious as the old switches. Maybe it will sleep? Hibernate? Do a shut down cycle that takes a while (&quot;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20160419-00/?p=93315&quot; rel=&quot;nofollow noreferrer&quot;&gt;It is now safe to shut down your computer&lt;/a&gt;&quot;)? Maybe it will restart? Maybe it will do nothing at all, and you'll need to hit it again? Maybe it will wait 10 s then start to do something?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because we lost easy control of the power supply, the only way to practically know if the computer was actually off was to wait until the lights were off, then wait a bit more to be sure it actually stopped working. It always seemed like if just might start up on its own after a short wait. As this stuff is more reliable now, 30 seconds is overkill. But ~1995 many computers were still really crappy; and power supplies were buggy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;30 seconds was a good way to know the computer was actually off; especially if you were trouble shooting your grandma's computer over the phone. They'd expect to be able to switch it on and off like a blender. &lt;/p&gt;&#xA;" OwnerUserId="8018" LastEditorUserId="79" LastEditDate="2020-05-26T12:43:17.363" LastActivityDate="2020-05-26T12:43:17.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5706" PostTypeId="2" ParentId="5704" CreationDate="2018-02-09T17:42:48.813" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What is stored in the IIgs PRAM?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Basicly everything you can set via the Control Panel&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm going to replace my PRAM battery in a ROM 03 IIgs and that got me thinking about what is stored in PRAM. I know that date and time are stored, but not if all the same values are stored on the IIgs as on the Macintosh.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's much like the Mac. In addition to things like language, colours or interface parameters, more hardware related setup values are also stored. This includes speed and asignment of function to slots and so on. For example I remember offset $28 beeing the boot slot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only description of the data I could find is the description of the control panel in &lt;em&gt;Apendix G&lt;/em&gt; of the &lt;em&gt;IIgs Firmware Reference&lt;/em&gt; (&lt;a href=&quot;https://archive.org/stream/Apple_IIgs_Firmware_Reference#page/n319/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;p299ff&lt;/a&gt;). But it goes only by the handling of said ROM programm, not how it's stored. You might want to do some web search to find more. When doing so it might be a good idea to include BRAM as term, as it was thuout documentation usually called 'Battery RAM' (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AFAIR the first $20 are the clock part and the control panel uses the area up to $60 or so. Everything thereafter is initialized with $FF. Except for the last 4 bytes containing some checksum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A helpful tool&lt;/strong&gt; might be Sheppy's &lt;a href=&quot;http://www.sheppyware.net/apple-ii-software/shifty-list.html&quot; rel=&quot;noreferrer&quot;&gt;Shifty-List&lt;/a&gt;, as it, IIRC, allows it to save and restore BRAM content among many other setings, so you won't have to worry to miss anything.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - BRAM vs. PRAM is a nice little way to distinguish old time Apple IIgs fellows from Mac people.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-02-09T18:29:57.337" LastActivityDate="2018-02-09T18:29:57.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5708" PostTypeId="2" ParentId="2767" CreationDate="2018-02-09T20:56:16.090" Score="1" Body="&lt;p&gt;You can also install &lt;code&gt;simh&lt;/code&gt; from &lt;a href=&quot;https://www.macports.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;MacPorts&lt;/a&gt;; to install it do:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;port install simh&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As the time of this writing, MacPorts is installing &lt;code&gt;simh&lt;/code&gt; V3.8-1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am also adding how to run Unix System 7, as I found a couple of inconsistencies in the original instructions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for putting it to work with Unix system7, download the PDP 11 Unix 7 tape image from  &lt;a href=&quot;http://simh.trailing-edge.com/kits/uv7swre.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://simh.trailing-edge.com/kits/uv7swre.zip&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then unzip either double-clicking on it, or with ´unzip` from MacPorts:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;unzip uv7swre.zip&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you have now new subdirectories, go inside them until finding the &lt;code&gt;unix_v7_rl.dsk&lt;/code&gt; file. Put it in a directory of your convenience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To boot then it, use the &lt;code&gt;simh-pdp11&lt;/code&gt; as it is que equipment you need to emulate to run your image:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ simh-pdp11&#xA;PDP-11 simulator V3.8-1&#xA;sim&amp;gt; set cpu 11/45&#xA;Disabling XQ&#xA;sim&amp;gt; set tto 7b   &#xA;sim&amp;gt; attach rl unix_v7_rl.dsk    &#xA;sim&amp;gt; boot rl&#xA;@boot&#xA;New Boot, known devices are hp ht rk rl rp tm vt &#xA;: rl(0,0)rl2unix&#xA;mem = 177856&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If it is the first time booting the image, create the missing directories of Dennis Ritchie´s user home, and &lt;code&gt;/tmp&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# mkdir /usr/dmr&#xA;# chown dmr /usr/dmr&#xA;# chgrp 3 /usr/dmr&#xA;# mkdir /tmp&#xA;# chmod 777 /tmp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then press &lt;code&gt;^D&lt;/code&gt; to proceed:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# Restricted rights: Use, duplication, or disclosure&#xA;is subject to restrictions stated in your contract with&#xA;Western Electric Company, Inc.&#xA;Thu Sep 22 05:48:15 EDT 1988&#xA;&#xA;login: dmr&#xA;$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;dmr&lt;/code&gt; user has no password by default.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need to login as root, by default, in this tape image, the &lt;code&gt;root&lt;/code&gt; account has as password, &lt;code&gt;root&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For leaving the emulation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ sync&#xA;$ sync&#xA;$ ^E&#xA;Simulation stopped, PC: 002306 (MOV (SP)+,177776)&#xA;sim&amp;gt; quit&#xA;Goodbye&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2018-05-07T14:47:59.460" LastActivityDate="2018-05-07T14:47:59.460" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="5711" PostTypeId="1" CreationDate="2018-02-10T00:52:17.060" Score="8" ViewCount="373" Body="&lt;p&gt;what is the meaning of the NAND external connected driving _BLIT in depency of _ROMEN?&#xA;I cant see the need mainipulate _BLIT by accessing the ROM.&#xA;Is this an Gary bugfix?&#xA;Strangely A500+ does not have this NAND Gates.&lt;/p&gt;&#xA;&lt;p&gt;Thanx&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zbrax.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zbrax.png&quot; alt=&quot;Part of A2000REv6 Schematic&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8024" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2021-02-06T22:30:58.663" Title="Question about external Gary NAND driving _BLIT in depency of _ROMEN" Tags="&lt;amiga&gt;&lt;amiga-2000&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5712" PostTypeId="2" ParentId="5642" CreationDate="2018-02-10T04:14:08.707" Score="4" Body="&lt;p&gt;&quot;Back in the day&quot;, the more expensive hard disks on &quot;mainframe&quot; computers had provision to prevent the heads from ever touching the media surface. To make them affordable (simple) enough for the personal computer market, the newer smaller HDDs would actually allow the heads to land on the media surface, but in a special &quot;landing zone&quot; where no information was recorded. This meant that on removal of power, the drive had to automatically seek to the landing zone before the disk slowed to the point the heads could no longer float (handled by the drive's controller).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Brief power interruptions (say a few seconds) ran the risk that, although the heads would position for landing, upon restoration of power with the disk still spinning, the controller could initiate a seek even though the drive was not yet spinning fast enough for proper float. This could lead to damage of the recording surface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Waiting 30 seconds allowed the drive to come to a complete stop so that on restart, the controller would recognize the disk as starting up and not permit a seek until the drive had attained normal operating speed.&lt;/p&gt;&#xA;" OwnerUserId="4561" LastActivityDate="2018-02-10T04:14:08.707" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5713" PostTypeId="2" ParentId="5711" CreationDate="2018-02-10T12:23:35.530" Score="3" Body="&lt;p&gt;&lt;em&gt;Caveat: I'm not exactly an Amiga guy. I did work with them, but never had much positive thought about :))&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the combination of signals I assume (*1) the IC in the lower right is supposed to be an &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_Agnus&quot; rel=&quot;nofollow noreferrer&quot;&gt;AGNUS&lt;/a&gt;, Amigas RAM/DMA/Blitter all in one handler (*1). The combination of question wording ant the shown schematic sniplet is a bit confusing, as the line is named /BLIT, a name introduced with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_Enhanced_Chip_Set&quot; rel=&quot;nofollow noreferrer&quot;&gt;ECS (Enhanced ChipSet)&lt;/a&gt;, while the text reads that the gates are not present at the Amiga 500+ - which used the ECS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So all this little combination does is inhibiting /BLIT (making it High) whenever /ROMEN is active (Low).&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;/BLIT is what /DBR was in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Original_Chip_Set&quot; rel=&quot;nofollow noreferrer&quot;&gt;OCS (Original ChipSet)&lt;/a&gt;, the signal that AGNUS want's to issue a bus cycle. AGNUS always had priority in bus access. Only a /BLISS assertion could 'ask politely' for a cycle (*3), which AGNUS &lt;em&gt;could&lt;/em&gt; grant by deasserting /BLIT for a single cycle. This additional circuit now did block (or delay) AGNUS requests when the address &lt;em&gt;actually&lt;/em&gt; decoded by GARY was a ROM address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without looking at the timing three possible situations may come to mind:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Due some circumstances AGNUS did generate ROM addresses (no idea how) which ofc, wasn't a good idea in the first place. This would protect against - maybe - some leftover from the A1000 WOM/WCS.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It was a strange way to keep the CPU prioritize the CPU during ROM access.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;It delays /BLIT until a prior active /ROMEN is deactivated. This would be the case if there is a race condition within GARY's decoding. In this case the gates provide an external fix.&lt;/strong&gt; The condition might be that /ROMEN is still active due a prior ROM access by the 68k when AGNUS pulls /BLIT to start a RAM cycle. Since /ROMEN is directly connected to /OE (Output Enable) of the ROM and RAM-/OE is fixed to ground, this &lt;em&gt;might&lt;/em&gt; screw the data bus, during early CAS cycle having ROM drive the data lines against RAM.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I would go for #3, as the other are rather obscure. But as said before, it's just an educated guess. I would need to dig out the exact schematic and more important timing sequence for each chip in conjunction with the 68k timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way would be simply to look what GARY version machines with or without that lock have. I bet that correlates.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - &lt;strong&gt;Assumptions are bad&lt;/strong&gt; It's always better if a question includes at least the basic information about the system and the environment it is asked on, so there are no basic assumptions necessary. Especially with the Amiga as there are literally dozens of internal versions for each Amiga. It's extremely hard to guess from which combination some sniplet is. Especially when, like in this case, after market schematics are used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - I think for the AGNUS alone there where more than 10 versions with different par numbers like 8361/8367/8370/8372/8375 plus appendixes like A/AB/B/R0/R01/R2/R3/R1/FAT. There isn't &lt;strong&gt;the&lt;/strong&gt; AGNUS. Sure, from a software side there where only two or 3 versions to distinguish, but hardware wise they where many more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Which usually was inserted by GARY after three consecutive AGNUS cycles.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="141" LastEditDate="2018-03-01T15:50:12.937" LastActivityDate="2018-03-01T15:50:12.937" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5714" PostTypeId="1" CreationDate="2018-02-10T17:17:24.137" Score="10" ViewCount="669" Body="&lt;p&gt;My question is about bankswitching behaviour on the Commodore 64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm writing a C64 game for a 16kb cartridge with EXROM and GAME pulled low, so the available bankswitching modes are (according to c64-wiki):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/t68Ho.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t68Ho.png&quot; alt=&quot;Bank Switching table summarised https://www.c64-wiki.com/wiki/Bank_Switching&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VIC-II display registers are memory-mapped into $D000-$D3FF. On boot up, CHAREN, HIRAM and LORAM will all be 1, so the system will start in mode 7, with &lt;code&gt;I/O&lt;/code&gt; access enabled within that memory region.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Does CPU access to the VIC-II registers fall under the category of &lt;code&gt;I/O&lt;/code&gt;?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I switch to mode 4 to allow access to the 'full' ~64kB of RAM, will I still be able to access VIC-II registers from the CPU, or will I have to switch to mode 5 to put &lt;code&gt;I/O&lt;/code&gt; back into the memory map?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Assume my code has been copied to some location in RAM first (e.g. $6000) at that point so it won't be affected by any mode changes.)&lt;/p&gt;&#xA;" OwnerUserId="8031" LastEditorUserId="8031" LastEditDate="2018-02-10T18:50:18.697" LastActivityDate="2018-02-11T09:54:42.090" Title="Behaviour of $D000-$D3FF section on the C64 during bankswitching" Tags="&lt;commodore-64&gt;&lt;memory-layout&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5715" PostTypeId="2" ParentId="5714" CreationDate="2018-02-10T17:28:14.087" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does CPU access to the VIC-II registers fall under the category of I/O?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. To access the RAM below the I/O, you have to use a function copied to RAM which does exactly that. A common use for that area however is to put a custom character generator and/or sprites there, because in the $4000..$7fff and $c000..$ffff area, the VIC always reads from RAM.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastEditorUserId="3459" LastEditDate="2018-02-11T09:54:42.090" LastActivityDate="2018-02-11T09:54:42.090" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="5716" PostTypeId="2" ParentId="5714" CreationDate="2018-02-10T18:36:20.473" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does CPU access to the VIC-II registers fall under the category of I/O?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If I switch to mode 4 to allow access to the 'full' ~64kB of RAM, will I still be able to access VIC-II registers from the CPU,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, as you switched it off.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or will I have to switch to mode 5 to put I/O back into the memory map?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly. Under on address(region) only one component can be reached at one time. So if you want to use the I/O, the 4 KiB at $Dxxx have to be switched to I/O  (mode 5/6/7 of that table), and the RAM at this address will be invisible. If the RAM is accessible there (Mode 0/1/4), you won't see any registers.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Assume my code is running from $6000 at that point so it won't be affected by mode changes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's always a good idea not to switch of the active programm, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW: $6000 is not part of any cardridge ROM.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-02-10T18:36:20.473" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5717" PostTypeId="2" ParentId="5711" CreationDate="2018-02-10T18:53:03.920" Score="7" Body="&lt;p&gt;This is just GARY performing its basic logic for multiplexing the Amiga's CHIP RAM bus, with the aid of some external logic. The *ROMEN signal is mutually exclusive with the *BLIT signal because there is no reason to assert *BLIT during accesses to ROM because the CPU doesn't need the CHIP RAM bus when accessing ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would make more sense to design Gary with this logic being internal to the gate array, in hindsight, but the Gary chip might have been designed first with some assumptions in mind that didn't pan out. Later versions of Gary perhaps &quot;fixed&quot; this, but it would have been a chip count optimization, rather than a bug fix.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-02-10T18:53:03.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5718" PostTypeId="1" CreationDate="2018-02-10T20:23:06.577" Score="2" ViewCount="312" Body="&lt;p&gt;My father had an old Apple II and I'm trying to find some info on it. Any help would be appreciated The model # is A2M001 and the disk drives are also A2M003-62498. I have seen other models but None with M in them. &lt;/p&gt;&#xA;" OwnerUserId="8032" LastActivityDate="2018-02-10T21:27:37.200" Title="I have an old Apple II computer,but cannot find any info on model # A2M001" Tags="&lt;apple&gt;&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5719" PostTypeId="2" ParentId="5718" CreationDate="2018-02-10T21:27:37.200" Score="2" Body="&lt;p&gt;A2M001 is for one printed on the PS and therefore only a rough identification. It may be a II as well as an early II+. Similar A2M003 is the type number for next to all Disk II drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a real indentification things like the Keyboard (power cap), Board revision and Board serial number might be helpful.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-02-10T21:27:37.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5721" PostTypeId="2" ParentId="433" CreationDate="2018-02-11T16:56:51.253" Score="0" Body="&lt;p&gt;Another fairly common expansion, which was not an accelerator, RAM, or 68k compatible, was the PC compatibility card containing an x86 compatible CPU. In fact, one of the first hyped Amiga sidecar expansions was &lt;a href=&quot;http://amiga.resource.cx/exp/a1060&quot; rel=&quot;nofollow noreferrer&quot;&gt;the original Sidecar&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-02-11T16:56:51.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5722" PostTypeId="1" AcceptedAnswerId="5724" CreationDate="2018-02-11T18:19:06.750" Score="14" ViewCount="815" Body="&lt;p&gt;In the 2001 video game, &lt;a href=&quot;https://en.wikipedia.org/wiki/Operation_Flashpoint:_Cold_War_Crisis&quot; rel=&quot;noreferrer&quot;&gt;Operation Flashpoint&lt;/a&gt;, there is a laptop that appears in the menu:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gibso.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gibso.jpg&quot; alt=&quot;https://i.redd.it/on7mlfn53jlz.jpg&quot;&gt;&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the name of that laptop?&#xA;The game was released in 2001, and the story is set in 1985 during the Cold War.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry, but I cant rip the model for now, so if the front view isn't enough, just tip me so I can rip the model/texture of that laptop.&lt;/p&gt;&#xA;" OwnerUserId="8033" LastEditorUserId="7651" LastEditDate="2018-02-11T21:19:51.760" LastActivityDate="2018-08-13T14:13:29.850" Title="Operation Flashpoint Laptop" Tags="&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5724" PostTypeId="2" ParentId="5722" CreationDate="2018-02-11T19:46:51.230" Score="16" Body="&lt;p&gt;It looks like the Texas Instruments &lt;a href=&quot;http://www.computer-retro.de/Bilder/Laptops/SO-Texas-Instruments-TravelMate-4000E-486-WinSX-25MHz-Color-ohne-Netzteil.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;TravelMate 4000e&lt;/a&gt; from 1993.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-08-13T14:13:29.850" LastActivityDate="2018-08-13T14:13:29.850" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5725" PostTypeId="1" AcceptedAnswerId="5726" CreationDate="2018-02-11T22:02:24.680" Score="7" ViewCount="503" Body="&lt;p&gt;I'm writing an emulator with an HTTP API that could usefully accept C64 .PRG files as the request body of a POST request. This means it has to be able to detect such files by their MIME type: POST requests don't come with a file name (just a request body and the body's MIME type), so there no extension that the server can check, and the .PRG format is really not amenable to auto-detection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will make up a new &lt;code&gt;vnd&lt;/code&gt; MIME type if necessary, but I'd rather use an existing one if there is one - however I had difficulty finding anything via Google.&lt;/p&gt;&#xA;" OwnerUserId="4836" LastEditorUserId="3290" LastEditDate="2020-05-06T07:51:26.400" LastActivityDate="2020-05-06T07:51:26.400" Title="Is there a MIME type for C64 .PRG files?" Tags="&lt;commodore-64&gt;&lt;emulation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5726" PostTypeId="2" ParentId="5725" CreationDate="2018-02-11T22:13:01.180" Score="7" Body="&lt;p&gt;There is no official recognized mime type but there are already some other applications using the standard way of defining private types as &lt;code&gt;application/x-*&lt;/code&gt;. For example&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;application/x-c64-cartridge&lt;/code&gt; for C64 Cartridge files (&lt;code&gt;.CRT&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;application/x-c64-program&lt;/code&gt;  for C64 program files (&lt;code&gt;.PRG&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;application/x-c64-datadisk&lt;/code&gt;for C64 floppy (data only/single side) (&lt;code&gt;.D64&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;application/x-c64-rawdisk&lt;/code&gt; C64 Floppy Disk(raw/single side) (&lt;code&gt;.G64&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;application/x-c64-snapshot&lt;/code&gt; for C64 Snapshot files (&lt;code&gt;.S64&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;audio/x-sid&lt;/code&gt; for SID audio files (&lt;code&gt;.SID&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;If you realy want to define something of your own&lt;/strong&gt; you must stay with the well defined way of mime type generation, as defined by RFC 2045/46. This application falls for sure within the reserved top media type of &lt;code&gt;application&lt;/code&gt;, as this is a binary and application specific format. &lt;a href=&quot;https://tools.ietf.org/html/rfc2046&quot; rel=&quot;noreferrer&quot;&gt;See RFC2046 Section 3 Type 5&lt;/a&gt;. The subtype then should follow the rules of an &lt;code&gt;x-token&lt;/code&gt; as described in &lt;a href=&quot;https://tools.ietf.org/html/rfc2045&quot; rel=&quot;noreferrer&quot;&gt;Section 5.1 of RFC2045&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;A quick search did show some other Commodore related types&lt;/em&gt; like &lt;code&gt;application/d64&lt;/code&gt;, &lt;code&gt;application/x-d64&lt;/code&gt;,&lt;code&gt;application/x-cbm-d64&lt;/code&gt;, &lt;code&gt;application/t64&lt;/code&gt;, &lt;code&gt;application/x-t64&lt;/code&gt;, &lt;code&gt;application/x-cbm-t64&lt;/code&gt; but they seem somewhat less desirable. Then again, there are maybe thousands of C64 freaks out there creating their own definitions :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-02-12T16:23:12.457" LastActivityDate="2018-02-12T16:23:12.457" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5727" PostTypeId="1" CreationDate="2018-02-11T23:40:24.447" Score="6" ViewCount="218" Body="&lt;p&gt;I have one of these lying around somewhere...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MQDgE.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MQDgE.jpg&quot; alt=&quot;Sharp Wizard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a really cool game on it called Dungeon which I'd love to get the code for. Is that possible?  What would be the steps to try? I do have the serial cable it came with... but no computers with that port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I figure something that old must not be too hard to decompile... if it were simple to get the data off.&lt;/p&gt;&#xA;" OwnerUserId="8041" LastActivityDate="2018-02-12T07:36:39.047" Title="Is there a way to get code off an old Sharp Wizard?" Tags="&lt;hardware&gt;&lt;gaming&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5728" PostTypeId="2" ParentId="5727" CreationDate="2018-02-11T23:52:20.773" Score="4" Body="&lt;p&gt;The connection problem is rather easy: Get yourself a &lt;a href=&quot;https://www.google.com/search?q=usb%20serial%20cable&quot; rel=&quot;nofollow noreferrer&quot;&gt;USB/Serial cable/converter&lt;/a&gt;. It might be a bit more work to convert the game itself. Here's the &lt;a href=&quot;https://github.com/cjdaniel/sharp-wizard-games&quot; rel=&quot;nofollow noreferrer&quot;&gt;github page&lt;/a&gt; of some guy who did some games for that system back then. Maybe you could find some pointers there.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7651" LastEditDate="2018-02-12T07:36:39.047" LastActivityDate="2018-02-12T07:36:39.047" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5729" PostTypeId="2" ParentId="5642" CreationDate="2018-02-12T11:29:37.790" Score="8" Body="&lt;p&gt;Over the last 35 years I can remember two instances of too fast a power cycle causing a major failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first was a full height winchester hard drive which crashed it's heads when it was powered up before it had finished parking. After restoring from backups to a new drive I took it to pieces to find nastily deep scratches in the platters. By the mid 90's most hard drives would have been auto-parking however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second was a monitor whose power supply popped when the computer was quickly flicked off then on. From the other side of the room, I heard the cluck, clunk as the switch was thrown off then on, followed by the WOM of the monitor powering up, soon followed by the POP. This was in the days of the IBM Big Red Switch, where the monitor was powered from the switched mains side of the BRS. Again, by the mid 90's, few systems would have had the monitor powered directly from a PC power switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also had multiple instances of fans stalling after power was re-applied while they were still spinning down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, I've also seen PCs which will happily keep running for a few seconds after mains power is removed, so unless you wait a little longer, you didn't actually end up power cycling them at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result of these experiences, I've always waited until a machine was quiet before turning it back on. That's not too long these days for SSD based machines with slow, quiet, PWM controlled fans, but old servers with arrays of 10 platter 10k rpm hard drives and multiple heavy duty high speed fans could be much longer.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On a side note, even if you power cycle your system for 30 seconds, you might be surprised at how intact the 'dynamic' memory in your system is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to be certain that in-memory cryptographic keys have completely decayed, then &lt;a href=&quot;https://www.youtube.com/watch?v=6EuUwDvlHz8&quot; rel=&quot;nofollow noreferrer&quot;&gt;you might have to wait significantly longer&lt;/a&gt; to make sure that &lt;a href=&quot;https://en.wikipedia.org/wiki/Data_remanence&quot; rel=&quot;nofollow noreferrer&quot;&gt;Data remanence&lt;/a&gt; is not an issue:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.usenix.org/legacy/event/sec08/tech/full_papers/halderman/halderman.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/onAXA.jpg&quot; alt=&quot;Lest We Remember: Cold Boot Attacks on Encryption Keys Figure 4&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data remanence is even worse if someone has access to perform a &lt;a href=&quot;https://en.wikipedia.org/wiki/Cold_boot_attack&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cold boot attack&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7138" LastEditorUserId="7138" LastEditDate="2019-11-14T11:19:56.163" LastActivityDate="2019-11-14T11:19:56.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5730" PostTypeId="1" AcceptedAnswerId="5732" CreationDate="2018-02-12T13:00:46.537" Score="9" ViewCount="1299" Body="&lt;p&gt;How did the Apple II decode the addresses for the expansion cards?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;https://apple2history.org/museum/articles/byte8412/&quot; rel=&quot;noreferrer&quot;&gt;The Apple Story&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Alan Baum helped a lot. I already had some address decoders on the&#xA;  board that decoded every 16th and every 256th I/O address. Alan&#xA;  realized very clearly that each card could have its own little&#xA;  256-byte PROM on it and how they could all share a bank-switched 2K&#xA;  space. So I could just send two decoding signals to each card. Each&#xA;  board had 16 addresses for its I/O and 256 bytes of space for its&#xA;  PROM. Alan was the most constructive person in terms of realizing very&#xA;  clearly just how well the hardware-software interaction would work.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Also in that interview, there is a remark about how on S-100 systems, the cards are more complex designs because each one is responsible of decoding its own address; but the Apple II was simpler because the computer itself decoded the addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am wondering how this worked. What is the 256 byte PROM for? Does that contain executable code, something like a device driver? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why does each card get two &quot;decoding signals&quot;? Are these to select somehow which I/O addresses are read from/written to?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="6659" LastEditDate="2018-09-01T16:47:57.760" LastActivityDate="2018-09-01T17:13:45.870" Title="How did the Address Decode for Apple II Expansion Cards Work?" Tags="&lt;apple-ii&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5731" PostTypeId="2" ParentId="5730" CreationDate="2018-02-12T13:31:46.340" Score="4" Body="&lt;p&gt;I'm not an Apple expert but I think I can answer this just based on the quote and general computer architecture knowledge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, address decoding comes basically down to this: &quot;For a given address, which device should respond?&quot;  Each device (typically a chip or an expansion card) has a range of addresses assigned to it; decoding is more about deciding which range an address falls into (and less about identifying which specific address within the range, that is the device's responsibility).  So having an address decoder that will identify which-of-several 16-byte ranges, and another that will identify which-of-several 256-byte ranges can be used to select slots (and thereby assign each slot one of those ranges).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two decoding signals each do something different.  One of them tells the card &quot;you have been selected for an I/O access in your 16-byte I/O space&quot;, and the other tells the card &quot;you have been selected for a memory access in your 256-byte PROM space&quot;.  In both cases the card can find out the exact address within the range (and do its own decoding of that) by looking at other pins of the slot (4 pins to get the exact I/O address and 8 pins to get the exact PROM address).  If each card had to do its own decoding, each card would need to look at all 16 bits of the 6502 address bus, which is considerably more work than just looking at 4 or 8 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 256-byte PROM certainly could contain a device driver; that is the most obvious use but it need not be executable or, I suppose, even a ROM.  There's no particular reason a card couldn't use it to provide 256 bytes of scratchpad RAM instead.  It could even be used as a larger I/O space if for some reason 16 bytes wasn't enough for that.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-02-12T13:31:46.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5732" PostTypeId="2" ParentId="5730" CreationDate="2018-02-12T13:34:43.687" Score="14" Body="&lt;p&gt;The Apple II employs what's called a geographic addressing. That is each expansion slot gets a fixed address (range) reserved and assigned for local resources. Thus the address of a component (like a VIA) changes, depending on which slot is used. Geographic addressing is the most simple form of plug and play while retaining the ability to have multiple instances of a certain I/O device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One primary goal of the Apple II I/O design was to enable card builders to create new cards with the least possible effort. Geographic addressing allows this, as there is, at least for simple cards, no need for additional decoding on the card, as the slot specific select line is all that needs to be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example a &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6522&quot; rel=&quot;noreferrer&quot;&gt;6522 VIA&lt;/a&gt; card could be built without &lt;em&gt;any&lt;/em&gt; additional circuitry but the chip itself. Slot lines could be directly wired up to the IC with the lower 4 address lines tied to the register address input and &lt;code&gt;/DEVSEL&lt;/code&gt; to chip enable. Similarly most other I/O chips of that time could be added.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For such simple I/O, &lt;strong&gt;each slot got a 16 byte address range for registers&lt;/strong&gt; set aside. In a more general view it is preferable if another address range is available for firmware code, so cards could bring drivers in ROM for instant usage. Since the 64 KiB address range of a 6502 doesn't allow big chunks of memory to be set aside - and many drivers won't need more than a few bytes anyway, &lt;strong&gt;each slot did get a additional 256 byte address range&lt;/strong&gt; assigned. This was usually used for driver code and called &lt;em&gt;'Peripheral Card ROM Space'&lt;/em&gt;. Access was signaled by another select line called &lt;code&gt;/IOSEL&lt;/code&gt;. So if a card did bring driver code, all it needed was to fit it in a ((E)P)ROM and have address, data and CE line tied to the respective slot lines. Again, no additional hardware needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;256 bytes may not sound like much, but be assured, it is quite a lot. There where many I/O cards where the whole driver didn't even need that much space. Keep in mind, Woz managed to put the whole boot loader code for the Disk II controller into a 256 bytes - and that includes all necessary drive handling. There is a nice &lt;a href=&quot;http://www.landsnail.com/apple/local/applewoz.htm&quot; rel=&quot;noreferrer&quot;&gt;email from Steve Wozniak&lt;/a&gt; preserved, where he not only described that he did put a 'whole' monitor program for a pre-Apple 1 prototype into 256 bytes of PROM, but also mentions his 256 byte printer driver for the Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case a card needs to offer much more complicated driver code, which couldn't fit in 256 bytes (or a multiple using some switching), &lt;strong&gt;another 2 KiB area, now shared by all cards&lt;/strong&gt;, signaled by &lt;code&gt;/IOSTROBE&lt;/code&gt;, was set aside. This sharing was time sliced - meaning that only one card could have its hardware visible at a given time. Therefore a hardware based protocol for activation and deactivation was needed. Whenever a driver needed access to address space, like for more code in a ROM, it first needed to deselect whatever was active before and then map in its own code. To do this all cards watched address &lt;code&gt;$CFFF&lt;/code&gt; and deselected their ROM when it got accessed. To enable each card could use whatever private method. Here for the first time hardware beyond the device in question (like ROM) was needed. Still only one flip-flop and a wide AND gate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this together (including all on board resources) resulted in a 4 KiB I/O space within the Apple II memory map. Located at $C000-$CFFF it looked like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$C000..C07F On Board Resources&#xA;$C080..C08F Slot 0 /DEVSEL area (16 byte register file)&#xA;$C090..C09F Slot 1 /DEVSEL area&#xA;... repeated for Slot 2..6&#xA;$C0F0..C0FF Slot 7 /DEVSEL&#xA;$C100..C1FF Slot 1 /IOSEL area (256 bytes 'PROM')&#xA;... repeated for Slot 2..6&#xA;$C700..C7FF Slot 7 /IOSEL area&#xA;$C800..CFFF Common area for all Slots (2 KiB 'ROM')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now it's also easy to see why slot 0 could only house certain cards, as its 'PROM' area was used for the internal I/O and the register windows of all other slots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;These great preparations for simple I/O card design are for sure part of the success the Apple II had.&lt;/strong&gt; From a hardware point it was extremely easy to enhance the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to the hardware definitions a simple software protocol was added to make use of the driver code from BASIC, as well from assembly. In general &lt;code&gt;PR#n&lt;/code&gt; or &lt;code&gt;IN#n&lt;/code&gt; did set the output or input vector (CSW/KSW) to &lt;code&gt;$Cn00&lt;/code&gt;, thus handing over data to the cards routines or taking it from there. Cards with dual functions did need to manipulate the vectors accordingly. Later on, with the Pascal system, a more sophisticated protocol of card IDs, and multiple entry points got developed. But that's a different story.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="56" LastEditDate="2018-09-01T17:13:45.870" LastActivityDate="2018-09-01T17:13:45.870" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="5733" PostTypeId="1" CreationDate="2018-02-12T23:56:05.940" Score="17" ViewCount="12056" Body="&lt;p&gt;I've read many times that USB floppy drives will not format (or read/write) 720K disks.  But then I read several posts online where people say they have done it.  Even with Windows 10 (which is what I'm using).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One instance said to use the following command at the DOS prompt:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;format a: /f:720&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I did that, here is what I got:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;format a: /f:720&#xA;Insert new disk for drive A:&#xA;and press ENTER when ready...&#xA;The type of the file system is RAW.&#xA;The new file system is FAT.&#xA;Formatting 720 KB&#xA;Parameters not supported by drive.&#xA;Format failed.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Just like the message said, the format failed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disk I'm using should be good but I cannot completely confirm.  It's also the disk that only has the one hole.  The cover says:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FUJI FILM&#xA;Micro Floppy Disk&#xA;MF2DD&#xA;Double Sided Double Density&#xA;135 TPI / 80 Tracks&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Is this possible or am I going to have to do something else?  I plan on swapping my Tandy 1000 EX's 5.25&quot; drive with a 3.5&quot; version and I'd like to transfer images over that way (sneaker-net).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't find the model number.  But it was highly rated on Amazon and some people even said they used this exact drive to format 720K.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is where I bought it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B00RXEWOAA&quot; rel=&quot;noreferrer&quot;&gt;https://www.amazon.com/gp/product/B00RXEWOAA/ref=oh_aui_detailpage_o00_s00?ie=UTF8&amp;amp;psc=1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The company is Chuanganzhuo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT 2&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On Stephen Kitt's suggestion, I tried a standard &quot;format a:&quot; but it didn't work.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Insert new disk for drive A:&#xA;and press ENTER when ready...&#xA;The type of the file system is RAW.&#xA;The new file system is FAT.&#xA;Verifying 1.44M&#xA;Invalid media or Track 0 bad - disk unusable.&#xA;Format failed.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="11916" LastEditDate="2019-10-27T10:50:07.080" LastActivityDate="2021-05-25T20:27:56.240" Title="Formatting a 720K floppy disk over USB fails with Windows 10" Tags="&lt;floppy-disk&gt;&lt;usb&gt;&lt;windows&gt;&lt;tandy-1000&gt;" AnswerCount="9" CommentCount="20" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5734" PostTypeId="2" ParentId="5733" CreationDate="2018-02-13T08:12:58.923" Score="15" Body="&lt;p&gt;There are &lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?39729-USB-Floppy-that-can-read-720k-disks!&quot; rel=&quot;nofollow noreferrer&quot;&gt;some USB drives&lt;/a&gt; which support double-density disks and formats, but as you suspect, not all of them. It is still worth trying a plain&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;format a:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;to see what it does — USB drives control formatting themselves, so this should do the right thing if it supports double-density disks. If you have a Linux system handy, you can determine your drives’ capabilities by querying it with &lt;a href=&quot;https://archive.ph/N3k04&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;ufiformat -i&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;However&lt;/em&gt; since your intention is to use these disks to transfer files to and from a computer with a double-density &lt;em&gt;drive&lt;/em&gt;, this approach is likely to be unreliable anyway. High-density and double-density disks use magnetic media with different coercivity, requiring different field strengths to write data; a double-density drive can’t reliably format or alter a disk that’s been written to by a high-density drive. All is not lost though: you should format your disks in the Tandy’s drive (when you get it), and check whether your USB drive can then read and write the disks (but keep some disks aside that will only ever be written to using the Tandy’s drive).&lt;/p&gt;&#xA;&lt;p&gt;Note that the holes in disks’ cases don’t determine the formats one-for-one. A DD disk will always end up formatted in double-density, and a DD drive will always format in double-density. An HD drive can theoretically operate in both modes (and will do so automatically with a DD disk). An HD disk can be formatted as a DD in a HD drive, but as mentioned previously will be unreliable in a DD drive; an HD disk formatted as a DD in a DD drive will work fine. You can use DD disks as HD by drilling an extra hole but then you’re taking your chances with the magnetic support.&lt;/p&gt;&#xA;&lt;p&gt;If your USB drive really doesn’t support DD disks, a nicer option for file-transfer might be a null-modem cable and LapLink or InterSrv on DOS 6. Another option, which is &lt;em&gt;very&lt;/em&gt; convenient, could be to use a floppy emulator such as the &lt;a href=&quot;http://hxc2001.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;HxC&lt;/a&gt; in the Tandy; or use a HD drive in the Tandy, if that’s supported...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="15334" LastEditDate="2021-05-25T20:27:56.240" LastActivityDate="2021-05-25T20:27:56.240" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="5735" PostTypeId="1" CreationDate="2018-02-13T09:19:08.507" Score="10" ViewCount="833" Body="&lt;p&gt;On the FAQ of the emu48 software, a famous emulator for HP38/39/40/48/49 calculators (&lt;a href=&quot;http://hp.giesselink.com/emu48faq.htm#ROM&quot; rel=&quot;noreferrer&quot;&gt;http://hp.giesselink.com/emu48faq.htm#ROM&lt;/a&gt;), we can find the following assertion:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In general all HP-ROM files are copyrighted by Hewlett Packard. But since fall 2000 HP ACO allowed the use of the HP38, 39, 40, 48, 49 ROM's even if you're not an owner of this calculator type.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And, indeed, you can easily find on the internet (e.g. on the &lt;a href=&quot;https://www.hpcalc.org/hp48/pc/emulators/&quot; rel=&quot;noreferrer&quot;&gt;hpcalc.org&lt;/a&gt; site) various ROM dumps of the above-mentioned models. Obviously, if HP were offended by this, hpcalc.org would have received a &quot;cease and desist&quot; letter a long time ago.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I have been unable to find any reference of an actual announce from HP on that matter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has there been such an official announce, which details in which condition the ROM codes can be used freely? Or has it been something decided totally informally from HP, who is tolerating ROM code distribution and usage without saying anything?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: this seems even more strange if we consider that the HP48 has been discontinued as late as 2003. HP therefore gave the ROM code away before the calculators were out of production, which is rather unusual from a manufacturer.&lt;/p&gt;&#xA;" OwnerUserId="4614" LastEditorUserId="4614" LastEditDate="2018-02-13T09:26:41.527" LastActivityDate="2018-02-13T09:26:41.527" Title="Did Hewlett Packard really allow the use of the HP48 ROMs in emulators?" Tags="&lt;rom&gt;&lt;hp&gt;" AnswerCount="0" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5736" PostTypeId="2" ParentId="5671" CreationDate="2018-02-13T10:30:02.623" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;As we know, in C to dereference a null pointer is undefined behaviour.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It is now, but the PDP-11 was an obsolete architecture before the first standard C was published. At the time when the PDP-11was current hardware, the only thing close to a standard was &lt;em&gt;The C Programming Language&lt;/em&gt; by Kernighan and Ritchie (henceforth referred to as K&amp;amp;R). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The null pointer wasn't a formal a concept back then and pointers were generally considered to be interchangeable with &lt;code&gt;int&lt;/code&gt;s although that wasn't always the case (a primary source of pain for portability). A pointer whose value was 0 was considered special and there was a macro &lt;code&gt;NULL&lt;/code&gt; whose definition was something like &lt;code&gt;((char *) 0)&lt;/code&gt;. Note that K&amp;amp;R C has no &lt;code&gt;void&lt;/code&gt; type.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dereferencing a null pointer is only designated as  undefined behaviour so that the compiler doesn't have add a check to every dereference to make sure the pointer is not null. It's perfectly acceptable for your architecture to have that work as with any other address. In fact, if your program crashes with a &lt;code&gt;SIGSEGV&lt;/code&gt; when you dereference a null pointer, it is not because the compiler put a check in but because your operating system has made it illegal for user space programs to access the location. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So an operating system writer could set up the PDP-11 trap vector table in C as long as he is confident that the compiler will treat address 0 like any other. Since, in early versions of Unix the OS team and the compiler team overlapped, this was obviously not an issue. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So my question is what led some C standard to treat the NULL pointer differently from any other pointer? Did K&amp;amp;R want to target an exotic architecture or something?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. The C standard came a decade after C and Unix were written. By this time it was obvious that null pointers were causing issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OK, so I had a look at my copy of &lt;em&gt;The C Programming Language&lt;/em&gt; (first edition) and it turns out that I was wrong. On page 97 we have (in relation to implementing a custom allocator)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;C guarantees that no pointer that validly points at data will contain zero, so a return value of zero can be used to signify an abnormal event.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;On page 190&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A pointer may be compared to an integer but the result is machine dependent unless the integer is the constant 0. A pointer to which 0 has been assigned is guaranteed not to point to any object, and will appear to be equal to 0; in &lt;strong&gt;conventional usage&lt;/strong&gt;, such a pointer is considered to be null.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;[my emphasis]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setting up an interrupt table for an operating system would not be considered conventional usage.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2018-02-13T12:23:34.640" LastActivityDate="2018-02-13T12:23:34.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5737" PostTypeId="1" AcceptedAnswerId="5754" CreationDate="2018-02-13T12:15:10.127" Score="3" ViewCount="354" Body="&lt;p&gt;I have a few hard drives, laptop and desktop IDE, which I would like to Secure Erase. I'm aware that other methods exist for removing the data, but this is the safest and most efficient, and it's the one I want to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than hooking them up to an old desktop (I only have a laptop) how can I manage this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;a href=&quot;https://linux.die.net/man/8/hdparm&quot; rel=&quot;nofollow noreferrer&quot;&gt;man hdparm&lt;/a&gt; it says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;hdparm provides a command line interface to various kernel interfaces supported by the Linux SATA/PATA/SAS &quot;libata&quot; subsystem and the older IDE driver subsystem. Many newer (2008 and later) USB drive enclosures now also support &quot;SAT&quot; (SCSI-ATA Command Translation) and therefore may also work with hdparm.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, I bought one which is support to support &lt;em&gt;SAT&lt;/em&gt;, and reflected on the word 'may'. This was ii337 Gembird AUSI01.&lt;a href=&quot;https://www.smartmontools.org/wiki/Supported_USB-Devices&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Initially I intended to destroy the drives after erasing them. I didn't realise that there might actually be people who would want old drives as they're quite ubiquitous. Of course that's how things become rare; people assume nobody wants them. I'll give some consideration to selling them or donating them to someone who wants them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, this makes Secure Erase all the more necessary. Things like writing zeroes to the whole drive will be effective, but will reduce the life of the drive, and take much longer.&lt;/p&gt;&#xA;" OwnerUserId="8040" LastEditorUserId="8040" LastEditDate="2018-02-15T16:31:05.567" LastActivityDate="2018-02-15T16:31:05.567" Title="How do I Secure Erase a PATA hard drive without a compatible desktop motherboard?" Tags="&lt;hard-disk&gt;" AnswerCount="3" CommentCount="23" ClosedDate="2018-02-18T17:00:08.900" ContentLicense="CC BY-SA 3.0" />
  <row Id="5738" PostTypeId="1" AcceptedAnswerId="5739" CreationDate="2018-02-13T12:17:04.387" Score="1" ViewCount="700" Body="&lt;p&gt;Can anyone help me? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an Landstalker 2 or a &quot;Look Like&quot; on Sega Mega Drive?&#xA;Perhaps an &quot;Fan-Made&quot; - Thing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I searched at Google - no results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I think, in the early 90s, there was an Landstalker 2 in production. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But no release? Why? &lt;/p&gt;&#xA;" OwnerUserId="8049" LastEditorUserId="276" LastEditDate="2018-02-13T12:22:27.950" LastActivityDate="2019-12-24T05:35:01.170" Title="Landstalker 2 or a &quot;Look Like&quot;?" Tags="&lt;sega-genesis&gt;&lt;sega&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5739" PostTypeId="2" ParentId="5738" CreationDate="2018-02-13T12:25:57.097" Score="1" Body="&lt;p&gt;According the the &lt;a href=&quot;https://translate.googleusercontent.com/translate_c?depth=1&amp;amp;hl=de&amp;amp;ie=UTF8&amp;amp;prev=_t&amp;amp;rurl=translate.google.com&amp;amp;sl=auto&amp;amp;sp=nmt4&amp;amp;tl=en&amp;amp;u=https://de.wikipedia.org/wiki/Landstalker_%25E2%2580%2593_Die_Sch%25C3%25A4tze_von_K%25C3%25B6nig_Nolo&amp;amp;usg=ALkJrhirA3meeMFhlyK-gSpqNGlaNffOgg#Fortsetzungen_&amp;amp;_Ableger&quot; rel=&quot;nofollow noreferrer&quot;&gt;German Wiki&lt;/a&gt; there was no game successor but a rather rare fan-manga called &lt;em&gt;&quot;Landstalker 2 - Heart of Diamond&quot;&lt;/em&gt;. Maybe thats where  your memory is based on?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There where several games based on the same engine/principles on other systems, but no direct follow up. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another candidate may be a revival in 2006, called &lt;a href=&quot;https://www.unseen64.net/2008/04/08/landstalker-psp-cancelled/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;&quot;Landstalker 3D&quot;&lt;/em&gt;, for the PSP&lt;/a&gt;, but it got canceled. At least there is some &lt;a href=&quot;https://www.youtube.com/watch?v=y2igJr2ZsNE&quot; rel=&quot;nofollow noreferrer&quot;&gt;footage&lt;/a&gt; of a demo on some trade show.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-02-13T12:40:10.360" LastActivityDate="2018-02-13T12:40:10.360" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5740" PostTypeId="1" AcceptedAnswerId="5745" CreationDate="2018-02-13T13:27:50.137" Score="4" ViewCount="1013" Body="&lt;p&gt;In the early eighties, the Z80B and Z80H at 6 and 8 MHz respectively, were released.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1985, the Hitachi HD64180 reached 10 MHz (with some enhancements such that it seems to be reckoned the equivalent of a Z80 at around 13 MHz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, according to &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z180&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Zilog_Z180&lt;/a&gt; the Z180 reached  speeds of 16, 20, ultimately 33 MHz. When were these milestones reached?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best I've been able to find so far is &lt;a href=&quot;http://www.z80.info/z80lives.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.z80.info/z80lives.htm&lt;/a&gt; dated 1992, which says the ceiling as of the time of writing is 15 MHz. That means the faster variants came later in the nineties?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-05-16T09:28:58.167" Title="When did the Z80 compatibles reach very high clock speed?" Tags="&lt;history&gt;&lt;z80&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5741" PostTypeId="2" ParentId="5740" CreationDate="2018-02-13T13:42:12.613" Score="4" Body="&lt;p&gt;While it's easy to setup a timeline for early models, it gets harder when the CPU was no longer a dedicated chip, but part of a SoC, or just an ebedded component, as this data is not free available. Even more as later developments, like the eZ80 may be code compatible, but of different internal design. It would be much like comparing an 8086 with a Pentium.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said that, spring 2002 was the time the eZ80 became available at 50 MHz. Considering that it got about 4 times the thruput per clock as a genuine Z80, this would set it at a 200 MHz equivalent. As a (more or less) seperate CPU, that'S the top notch Z80 code can run on dedicated/real hardare. Real in a sense that it's hardware made to execute Z80 code direct, not via an (internal) emulation layer or similar.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-02-13T13:42:12.613" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5742" PostTypeId="2" ParentId="5737" CreationDate="2018-02-13T16:34:39.777" Score="2" Body="&lt;p&gt;&lt;a href=&quot;https://www.amazon.ca/Mosuch-Adapter-Converter-Optical-External/dp/B002OV1VJW&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.ca/Mosuch-Adapter-Converter-Optical-External/dp/B002OV1VJW&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need a device such as this - which has a USB to PATA (and SATA) interface.  An external power supply (usually supplied) can be used to power the drive, and is necessary for 3.5&quot; drives (although still recommended for 2.5&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will let you connect your drive up to any machine with a USB port, although the device will be slower with USB 1.1 ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe USB 3.0 versions are around as well, if you want faster access, particularly to SATA drives.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2018-02-13T16:34:39.777" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5743" PostTypeId="2" ParentId="5737" CreationDate="2018-02-13T18:04:32.973" Score="1" Body="&lt;p&gt;You're overthinking the problem. Just &lt;a href=&quot;https://serverfault.com/questions/868863/does-drilling-a-hole-into-a-hard-drive-suffice-to-make-its-data-unrecoverable&quot;&gt;drill a few holes through the drive&lt;/a&gt;!&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-02-13T18:34:14.527" LastActivityDate="2018-02-13T18:34:14.527" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5744" PostTypeId="1" AcceptedAnswerId="5746" CreationDate="2018-02-13T19:21:28.023" Score="3" ViewCount="1023" Body="&lt;p&gt;I am working on a loading screen, and what I wanted was a simple raster trick (just change the border colour on the bottom half of the screen),&#xA;and also call the KERNAL to load some more data from a disk. Easy peasy, right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my code. It loads with &lt;code&gt;LOAD&quot;*&quot;,8,1&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; The following is a short BASIC program;&#xA;; 10 SYS 2304&#xA;; and causes the machine to jump to the machine code include later on.&#xA;; 2304 decimal is 900 hex.&#xA;        .byt $01, $08, $0C, $08, $0A, $00, $9E, $20&#xA;        .byt $32, $33, $30, $34, $00, $00, $00&#xA;&#xA;; Fill up with no-ops until the start of the program.&#xA;        .dsb 242,$EA&#xA;&#xA;* = $0900&#xA;        sei&#xA;&#xA;; Turn BASIC off but leave KERNAL and IO on.&#xA;        lda #$36&#xA;        sta $01&#xA;&#xA;; Enable raster interrupt signals from VIC&#xA;        lda #%00000001&#xA;        sta $d01a&#xA;&#xA;; Set the irqserve routine to start when raster line 0 hits.&#xA;        lda #0&#xA;        sta $d012&#xA;        lda #&amp;lt;irqserve&#xA;        sta $0314&#xA;        lda #&amp;gt;irqserve&#xA;        sta $0315&#xA;&#xA;; enable interrupts again&#xA;        cli&#xA;&#xA;; Infinite loop.&#xA;stop:&#xA;        jmp stop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see, it ends in an infinite loop, which means the program should end there, right? That's not how this program behaves. This program will eventually return the user to the BASIC prompt. I'm trying to figure out why, and the problem appears to be in the routine &lt;code&gt;irqserve&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;irqserve:&#xA;; Look at the raster counter to see how far down the screen we are&#xA;        lda $d012&#xA;        beq bluborder&#xA;        cmp #116&#xA;        bcc blackborder&#xA;        jmp irqend&#xA;&#xA;bluborder:&#xA;        lda #$01&#xA;; change border colour&#xA;        sta $d020&#xA;; Next interrupt should fire at raster line 116.&#xA;        lda #116&#xA;        sta $d012&#xA;        jmp irqend&#xA;&#xA;blackborder:&#xA;        lda #$00&#xA;; change border colour&#xA;        sta $d020&#xA;; Next interrupt should fire at raster line 0.&#xA;        sta $d012&#xA;irqend:&#xA;        rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But what I can't figure out though is what to do at the end of my interrupt handler. Should it jump back to the KERNAL? Or do &lt;code&gt;rti&lt;/code&gt; or &lt;code&gt;rts&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-02-15T18:18:08.227" Title="How can a C64 interrupt let the KERNAL keep operating?" Tags="&lt;commodore-64&gt;&lt;interrupt&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5745" PostTypeId="2" ParentId="5740" CreationDate="2018-02-13T19:49:00.200" Score="7" Body="&lt;p&gt;An article from 2000 on &lt;a href=&quot;https://www.embedded.com/design/mcus-processors-and-socs/4403160/New-Twists-on-the-Z80&quot; rel=&quot;noreferrer&quot;&gt;embedded.com&lt;/a&gt; dates the &lt;a href=&quot;https://en.wikipedia.org/wiki/Hitachi_HD64180&quot; rel=&quot;noreferrer&quot;&gt;Hitachi 64180&lt;/a&gt; (which Zilog second sourced as the Z180) to 1985, the Z280 to 1976, but that's almost certainly a typo for 1986, the Z380 to &quot;the mid '90s&quot;, the Rabbit 2000 to &quot;last fall&quot; (i.e. 1999), and the eZ80 explicitly to 1999. (Aside: it's an interesting read beyond those data points, giving a lot of technical detail rather than merely a dry recitation of dates).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As per my comment, I'd add to that the &lt;a href=&quot;https://en.wikipedia.org/wiki/R800_(CPU)&quot; rel=&quot;noreferrer&quot;&gt;R800&lt;/a&gt;, which was developed by the ASCII Corporation as an enhancement to the Z80 that had powered MSX machines until then; the bottom dropped out of the MSX market in the interim but it made it to market in the Panasonic Turbo R in 1990.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.datasheetspdf.com/pdf/903881/Hitachi/HD64180/5&quot; rel=&quot;noreferrer&quot;&gt;64180's product sheet&lt;/a&gt; states that it has an operating frequency up to 10Mhz. The same is true of the &lt;a href=&quot;http://www.zilog.com/appnotes_download.php?FromPage=DirectLink&amp;amp;dn=PS0140&amp;amp;ft=Product%20Specification%20(Data%20Sheet)%20%20&amp;amp;f=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTk2TVRnd0wzQnpNREUwTUM1d1pHWT0=&quot; rel=&quot;noreferrer&quot;&gt;Z180&lt;/a&gt;. In both cases instructions have already become more efficient than the Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.classiccmp.org/hp/zilog/z280_manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;Z280&lt;/a&gt; includes a clock divider and a clock output, the intention being that you feed it a fast clock and then it produces a divided one for everybody else and inserts wait states if and when necessary so that it isn't talking too quickly. It includes a cache, so a lot of the same considerations apply as with a more conventional clock multiplier, in addition to the instructions generally being more efficiently implemented. It &lt;a href=&quot;http://www.z80.info/cpu280.txt&quot; rel=&quot;noreferrer&quot;&gt;topped out at 12.5Mhz&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The R800 in the Turbo R is clocked at 14.32Mhz — four times the NTSC colour burst, and like the others mentioned here, is &lt;a href=&quot;http://map.grauw.nl/resources/z80instr.php&quot; rel=&quot;noreferrer&quot;&gt;more efficient per cycle&lt;/a&gt; than a Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.zilog.com/appnotes_download.php?FromPage=DirectLink&amp;amp;dn=PS0100&amp;amp;ft=Product%20Specification%20(Data%20Sheet)%20%20&amp;amp;f=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTl6WlhKcFlXd3Zlak00TUM1d1pHWT0=&quot; rel=&quot;noreferrer&quot;&gt;Z380&lt;/a&gt; scales up to 18Mhz, with similar considerations about Mhz not meaning the same thing as on a vanilla Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.mouser.com/ds/2/111/0190069_p-471326.pdf&quot; rel=&quot;noreferrer&quot;&gt;Rabbit 2000&lt;/a&gt; &quot;uses an external crystal with a frequency typically in the range from 1.8 MHz to 29.5 MHz&quot;. Which I take to mean that it tops out at 29.5 Mhz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.zilog.com/appnotes_download.php?FromPage=DirectLink&amp;amp;dn=UM0077&amp;amp;ft=User%20Manual&amp;amp;f=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTlWVFRBd056Y3VjR1Jt&quot; rel=&quot;noreferrer&quot;&gt;eZ80&lt;/a&gt; was initially announced as being intended to become available at up to 80Mhz, but it's unclear to me what actually launched. I defer to Raffzahn's existing answer which states that they only actually managed to push it to 50.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-02-13T19:49:00.200" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5746" PostTypeId="2" ParentId="5744" CreationDate="2018-02-13T20:45:39.317" Score="5" Body="&lt;p&gt;Assuming you're not actually going to chain the existing interrupt handler to your own, I think you should end with &lt;code&gt;rti&lt;/code&gt; &lt;em&gt;and more besides&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ffd2.com/fridge/docs/c64-diss.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;A disassembly of the C64 firmware&lt;/a&gt; shows that IRQs jump to &lt;code&gt;FF48&lt;/code&gt;, which pushes A, X and Y to the stack in that order, loads the value that was at the top of the stack and if it does not have &lt;code&gt;$10&lt;/code&gt; set — i.e. if the triggering event was presumably an interrupt — it &lt;code&gt;JMP&lt;/code&gt;s to your &lt;code&gt;(0314)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So at the end of your routine you should pull Y, X and A from the stack, then perform an &lt;code&gt;rti&lt;/code&gt; to pull the status register and the old program counter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or just jump to &lt;code&gt;EA81&lt;/code&gt;, where the normal IRQ routine that started at &lt;code&gt;EA31&lt;/code&gt; does that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Addendum: the safest way, assuming you're not trying to usurp the kernel, would be just to keep hold of whatever was in &lt;code&gt;(0314)&lt;/code&gt; before you installed yourself, and jump to that. Dynamically writing it into your own code is a decent way of doing that without worrying about storage — end with a dummy &lt;code&gt;JMP $0000&lt;/code&gt; and then copy whatever is currently in &lt;code&gt;0314&lt;/code&gt; to the argument of that instruction before writing in your own code's address.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-02-14T17:37:09.280" LastActivityDate="2018-02-14T17:37:09.280" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5747" PostTypeId="2" ParentId="5744" CreationDate="2018-02-13T20:45:45.707" Score="1" Body="&lt;p&gt;&lt;code&gt;RTS&lt;/code&gt; un-stacks the caller address (Program Counter) and resumes at the instruction following the original &lt;code&gt;JSR&lt;/code&gt; &#xA;So, in your interrupt handler returns to an undefined location because it is loading the processor flags (The three registers and the CPU flags) put there by the Interrupt trigger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You must use &lt;code&gt;RTI&lt;/code&gt; for an interrupt handler. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Since the question has changed, here's some more comments.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll want to &lt;strong&gt;wedge&lt;/strong&gt; your interrupt handler in front of the existing one. That's what @Tommy is explaining.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the C64 architecture overloads the IRQ line with several triggers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;VIC raster interrupt (what you want to do)&lt;/li&gt;&#xA;&lt;li&gt;CIA clock&lt;/li&gt;&#xA;&lt;li&gt;CIA timer 1&lt;/li&gt;&#xA;&lt;li&gt;CIA timer 2&lt;/li&gt;&#xA;&lt;li&gt;CIA serial I/O&lt;/li&gt;&#xA;&lt;li&gt;CIA cassette I/O&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So an interrupt handler has to determine which of these has been triggered and act accordingly.&lt;/p&gt;&#xA;" OwnerUserId="2054" LastEditorUserId="2054" LastEditDate="2018-02-15T18:18:08.227" LastActivityDate="2018-02-15T18:18:08.227" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5748" PostTypeId="1" AcceptedAnswerId="5749" CreationDate="2018-02-13T21:36:45.560" Score="24" ViewCount="12039" Body="&lt;p&gt;A lot have been said in the internet about the 6502 at 1MHz being roughly equivalent in performance to the Z80 at 4 MHz. Is said that the Z80 have a typical 4 clock ticks per instruction while the  6502 have typical 1 clock ticks per instruction and a rudimentary pipeline.   Is said that the Z80  ALU internaly is 4 bits when the 6502 ALU is 8 bits. It is said that the z80 access memory every 4 clock ticks while the 6502 access memory every 2 clock ticks. &#xA;My question: &#xA;Is that true that the 6502 at 1 MHz is equivalent in performance to the Z80 at4 MHz? Is there any pratical evidence of this claim? &#xA;Please consider only the Microprocessor performance, not the system build around it. &lt;/p&gt;&#xA;" OwnerUserId="8047" LastActivityDate="2019-09-18T20:55:08.197" Title="Z80 x 6502 raw performance" Tags="&lt;z80&gt;&lt;6502&gt;&lt;performance&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5749" PostTypeId="2" ParentId="5748" CreationDate="2018-02-13T21:54:37.677" Score="31" Body="&lt;p&gt;Both processors are cacheless. So the process is fetch instruction, decode instruction, execute instruction, forget what you saw. That provides a first line of comparison.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80's fastest memory fetch — the first half of an operation fetch — takes two cycles. That's always paired with another two cycles for refresh though, so the shortest instructions are four cycles long. Reads and writes that occur because the opcode tells them to generally take three cycles, though they're not always issued instantaneously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;E.g. compare &lt;code&gt;PUSH&lt;/code&gt; or &lt;code&gt;POP&lt;/code&gt;: the former writes two bytes to the stack, the latter reads two bytes from the stack. But because the Z80 stack predecrements, &lt;code&gt;PUSH&lt;/code&gt; takes 11 cycles (two to read the instruction, two for refresh, one further because it hasn't yet worked out what the new stack pointer should be, then three to write the first byte and produce the next stack pointer, and three to write the second) whereas &lt;code&gt;POP&lt;/code&gt; takes only 10 (four to get to the action, then three to read from the already known stack pointer and calculate the next followed by three to read from the next and calculate the final).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502's memory cycles always last half a cycle. It does only one per cycle, leaving the bus unattended for the other half. But it always fetches at least two bytes per operation: it reads an operand regardless of whether the instruction needs one. If the instruction didn't need one, that read was wasted — it doesn't repurpose the operand it didn't need as the next operation and somehow save an access cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore the shortest instruction is two cycles long. Exactly half the shortest instruction of a Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 also isn't always actually ready for the next memory access cycle after receiving the prior. In that case it'll do a read or write that it believes to be redundant. So it has less granularity in buying itself pauses in bus access. An example is anything read-modify-write. The 6502 will read, then perform a redundant read or write cycle of the original value while calculating what the result should be, then write.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which ends up being 'faster' then depends on the specifics of the instruction stream but if they were fetching the same number of follow-up bytes then you'd expect the Z80 to be worse than twice as slow because its follow up accesses take three times as long as the 6502's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice skilled Z80 programmers expend a lot of effort trying avoiding memory accesses by using its much deeper register set; the 6502 almost practically has a three-or-more cycle minimum because a lot of the time is spent shuffling things back and forth between the zero page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the 6502 tends to end up being a bit less efficient than a Z80 that is clocked twice as fast.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-02-14T14:55:19.213" LastActivityDate="2018-02-14T14:55:19.213" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="5750" PostTypeId="2" ParentId="5748" CreationDate="2018-02-13T21:57:59.627" Score="8" Body="&lt;p&gt;&lt;a href=&quot;https://github.com/soegaard/minipascal/blob/master/minipascal/tests-real/primes.rkt&quot; rel=&quot;noreferrer&quot;&gt;These UCSD Pascal benchmarks&lt;/a&gt; of an Eratosthenes Sieve Prime Number Program show that the 6502 is roughly 2x as efficient per clock cycle as the Z-80, 8086, and 8088.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For posterity, here's a partial list of the results:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;System          Time (sec)  MCycles  Notes&#xA;------          ----------  -------  -----&#xA;&#xA;Sage II         57          456      (68000 at 8 MHz)&#xA;&#xA;NEC APC         144         705.6    8086 at 4.9 Mhz  extended memory&#xA;&#xA;JONOS           162         648      (pretty good for a 4 MHz Z-80A)&#xA;NorthStar       183         732      (Z-80 at 4 MHz)&#xA;OSI C8P-DF      197         394      (6502 at 2 MHz)&#xA;H-89            200         800      (4 MHz Z-80A)&#xA;IBM PC          203         938.31   (4.77 MHz 8088)&#xA;&#xA;Apple ][        390         390      (1 MHz 6502)&#xA;H-89            455         910      (2 MHz Z-80)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-02-13T22:30:58.787" LastActivityDate="2018-02-13T22:30:58.787" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5751" PostTypeId="1" AcceptedAnswerId="5753" CreationDate="2018-02-14T02:13:14.307" Score="5" ViewCount="669" Body="&lt;p&gt;For both the x86 and SPARC based machines, it was possible to get not only FPUs installed as a separate, discrete IC, but also third party FPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, I've read about Weitek &lt;a href=&quot;https://en.wikipedia.org/wiki/Weitek&quot; rel=&quot;nofollow noreferrer&quot;&gt;on Wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did Weitek produce the fastest FPUs available for the x86 and SPARC during the era when it was still possible to replace the FPU as a discrete IC? Specific examples would be nice: e.g. what is the absolute fastest FPU available for the 286? 386?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bonus:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anything else to this story of third party FPUs that is worthwhile to mention? What other companies beyond Weitek did this?&lt;/p&gt;&#xA;" OwnerUserId="7413" LastEditorUserId="79" LastEditDate="2018-02-14T17:07:37.587" LastActivityDate="2018-02-14T17:07:37.587" Title="What was the fastest third party FPU?" Tags="&lt;80286&gt;&lt;80386&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5752" PostTypeId="2" ParentId="5740" CreationDate="2018-02-14T08:46:30.647" Score="2" Body="&lt;p&gt;I have used Z180 10Mhz version in early 2000 start using Z180 33Mhz in 2006 to 2009 because it was any an easy replacement of the slower Z180's. I think I started to see the fast Z180's in the market around 2005. I don't if you can call that a milestone.&lt;/p&gt;&#xA;" OwnerUserId="2158" LastActivityDate="2018-02-14T08:46:30.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5753" PostTypeId="2" ParentId="5751" CreationDate="2018-02-14T09:28:48.013" Score="11" Body="&lt;p&gt;I don’t recall SPARC systems having separate sockets for discrete FPUs; in particular, the Weitek SPARC POWER µP was a replacement SPARC CPU which derived much of its speed benefit from doubling its internal clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the x86 FPU side of things, quite a few different companies produced FPUs: Intel of course, AMD, IIT, Cyrix, Chips &amp;amp; Technologies... Many of them were marketed as being faster than Intel’s 80287 and 80387 designs; Cyrix’s FPUs even had that in their name — FastMath 83D87! &lt;a href=&quot;https://archive.org/stream/BYTE_Vol_15-12_1990-11_Compaq_Dazzling_New_Laptop/BYTE%20Vol%2015-12%201990-11%20Compaq%20Dazzling%20New%20Laptop#page/n219/mode/2up/search/Weitek&quot; rel=&quot;noreferrer&quot;&gt;BYTE volume 15, issue 12 (November 1990)&lt;/a&gt; has a detailed FPU comparison, with benchmarks and explanations of the differences between the FPUs. Most FPUs used the same interface as the Intel FPUs, with a direct CPU-FPU connection and special opcodes; the Weitek FPUs were the only exception, using a memory-mapped interface. The IIT and Cyrix FPUs were supposedly faster as-is, but they both added some features beyond speed: IIT FPUs had more registers, Cyrix FPUs used more accurate transcendental calculations. Weitek FPUs used a completely different programming model, so they required specific support from applications, and lacked support for 80-bit extended-precision values; they also required specific motherboard support (and it was possible to build systems with both a 387 and a 3167, or a 486 and a 4167).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as benchmarks go, the results from the BYTE issue above match what other benchmarks found: the fastest 286-class FPU was the IIT 2C87 (but the benchmark doesn’t cover Weitek’s 1067), and the fastest 386-class FPU was the Weitek 3167, followed by the Cyrix 83D87. Weitek’s 4167 was faster than the 486’s built-in FPU in some operations but not all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/byte-magazine-1988-03&quot; rel=&quot;noreferrer&quot;&gt;BYTE volume 13 issue 3 (March 1988)&lt;/a&gt; contains a number of articles on x86-compatible FPUs, including the Weitek 1167, and explains how to program them.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-02-14T09:28:48.013" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5754" PostTypeId="2" ParentId="5737" CreationDate="2018-02-14T11:33:20.960" Score="3" Body="&lt;p&gt;Buy a PCI or PCIe PATA adapter card.  They're &lt;a href=&quot;https://www.maplin.co.uk/p/dual-esata-dual-sata-ide-ports-pci-express-card-a53hh&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;really&lt;/em&gt; cheap&lt;/a&gt;, and can be incredibly useful in these days of motherboards that lack integrated PATA adapters.  As far as I know, they should be able to run all commands supported by the drives.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-02-14T11:33:20.960" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5755" PostTypeId="2" ParentId="5748" CreationDate="2018-02-14T21:54:04.730" Score="6" Body="&lt;p&gt;Many operations on the 6502 take fewer cycles than corresponding operations on the Z80; the ratio tends to be somewhere between 2:1 and 4:1.  The 6502 particularly excels at accessing data structures which 256 bytes or less; operations which cross page boundaries will often be slightly less efficient than those which don't, but code which will work across page boundaries will generally only incur a penalty if operations actually span page boundaries, while Z80 code that works across page boundaries will incur a major penalty in all cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given a byte &quot;index&quot; stored at an arbitrary memory address, if one wants to access the index'th byte of &quot;table&quot;, the 6502 code would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ldx index&#xA;lda table,x&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Nine bytes if the indexing operation crosses a page boundary; eight if it doesn't.  Subtract 1 if &quot;index&quot; is stored in the first 256 bytes of RAM.  On the Z80, if the table is page-aligned, and if the address of &quot;index&quot; happens to be in HL--rather favorable assumptions--one may be able to get by with something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld  d,tableH&#xA;ld  e,(HL)&#xA;ld  a,(DE)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;in 21 cycles.  If neither condition applies, but there's no need to keep the value in A and the table is guaranteed not to cross a page boundary, code would be something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld  a,(index)&#xA;add a,tableL&#xA;mov e,a&#xA;ld  d,tableH&#xA;ld  a,(DE)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the total would be 41 cycles.  If the Z80 code had to accommodate page crossings, it may as well use a 16-bit index, and then the code would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld  hl,(index)  -- Use a 16-bit index&#xA;ld  de,table&#xA;add hl,de&#xA;ld  a,(hl)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which would be 16+10+11+7=44 cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 is not terribly efficient at working with objects larger than 256 bytes, but many applications use primarily smaller objects.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-02-14T21:54:04.730" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="5756" PostTypeId="1" AcceptedAnswerId="5757" CreationDate="2018-02-14T22:28:14.327" Score="6" ViewCount="2019" Body="&lt;p&gt;What are some examples of devices that would use the Z80's bus request input?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;http://www.classiccmp.org/cini/pdf/Zilog/Zilog%20Z80-CPU%20Technical%20Manual.PDF&quot; rel=&quot;noreferrer&quot;&gt;technical manual&lt;/a&gt; re. BUSRQ:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Input, active low. The bus request signal is used to request the CPU address bus, data bus and tri-state output control signals to go to a high impedance state so that other devices can control these buses. When BUSRQ is activated, the CPU will set these buses to a high impedance state as soon as the current CPU machine cycle is terminated.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm assuming this rules out memory as whatever address is present on the address bus would disappear when the CPU enters high impedance (w/ regards to the bus).&lt;/p&gt;&#xA;" OwnerUserId="6672" LastActivityDate="2018-05-30T22:27:31.920" Title="What are some example uses of the Z80's BUSRQ/AK pins?" Tags="&lt;z80&gt;&lt;data-transfer&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5757" PostTypeId="2" ParentId="5756" CreationDate="2018-02-14T23:08:57.437" Score="10" Body="&lt;p&gt;That would be any device that likes to take over the bus. Usually that would be some DMA controller handling an interface like a serial or parallel one. But it also can be anything you want - like another CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its function is that another device (not the CPU) pulls &lt;code&gt;/BUSREQ&lt;/code&gt; whenever it needs control of the system. When the CPU is ready to release the BUS it answers with &lt;code&gt;/BUSACK&lt;/code&gt;, which in turn allows the other device to go ahead. The &lt;a href=&quot;http://www.z80.info/zip/um0081.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z80 Peripherals User Manual&lt;/a&gt; describes the handling in great detail, including why and how other family members use this feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using this mechanism a DMA controller can for example feed a parallel port a new byte whenever the last one has been transferred, so a background print queue requires no CPU attention at all - well, until the buffer is emptied of course. Similarly with a serial printer or a modem connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course there might be situations where a 'polite' bus takeover, as with this protocol, might not work out. For example with a screen buffer in main memory, access for the graphics unit by asking nicely via DMA protocol, would require additional buffers to compensate for the time it &lt;em&gt;may&lt;/em&gt; have to wait for the bus. So simple graphics systems instead disable the CPU by manipulating things like clock timing. This does result in a lower overall performance, but also in a way lower chip count, thus enabling cheap systems.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2018-05-30T11:46:52.560" LastActivityDate="2018-05-30T11:46:52.560" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="5758" PostTypeId="2" ParentId="4733" CreationDate="2018-02-15T04:25:38.013" Score="13" Body="&lt;p&gt;Galaga has specialized graphics hardware that draws 64 individual sprites, so to update a screen full of objects you only need to update 256 bytes at the most. The star field is generated completely in hardware with a LFSR (linear feedback shift register), and there is a 8x8 tile map to draw the score and any other text. I'd guess the Galaga CPUs are spinning their wheels most of the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its predecessor, Galaxian, was even more limited. It only had one CPU, and only 8 hardware sprites (plus 8 bullet/missile/bomb sprites) but managed to draw 46 enemies on screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It did this by using the tile map. Each 8-pixel high column of tiles (which was a horizontal row, since the screen was rotated 90 degrees) could be individually scrolled by writing to its corresponding scroll register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when enemies were in formation, they were drawn/animated with the tile map and moved from side-to-side using the hardware scrolling registers. When they started their attack on the player, they were converted to sprites, then back again if they returned to the formation. The player's ship was also animated this way.&lt;/p&gt;&#xA;" OwnerUserId="7827" LastActivityDate="2018-02-15T04:25:38.013" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5759" PostTypeId="2" ParentId="2103" CreationDate="2018-02-15T04:59:00.837" Score="6" Body="&lt;p&gt;From The Textbook of Video Game Logic p. 93, a 16 kilobit ROM would cost about $15 when the book was printed in 1976. I assume this is in quantities of 5000+ or so.&lt;/p&gt;&#xA;" OwnerUserId="7827" LastActivityDate="2018-02-15T04:59:00.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5760" PostTypeId="2" ParentId="2008" CreationDate="2018-02-15T05:19:31.473" Score="6" Body="&lt;p&gt;The 74181 ALU was available in 1970, so hobbyists &lt;em&gt;could&lt;/em&gt; build something with it -- it was $16.50 in quantities of 100.  &lt;a href=&quot;http://apollo181.wixsite.com/apollo181/about&quot; rel=&quot;noreferrer&quot;&gt;http://apollo181.wixsite.com/apollo181/about&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a 4-bit computer built around the 74181 and TTL logic: &lt;a href=&quot;http://jaromir.xf.cz/fourbit/fourbit.html&quot; rel=&quot;noreferrer&quot;&gt;http://jaromir.xf.cz/fourbit/fourbit.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That &quot;thing&quot; doesn't have to be a full CPU though. For example, Midway's 1975 arcade game Wheels II uses the 74181 as a glorified counter which was sequenced by a ROM, but still not technically a CPU -- since it was limited to a few addition operations and no branch instructions, hardwired to the needs of the game.&lt;/p&gt;&#xA;" OwnerUserId="7827" LastActivityDate="2018-02-15T05:19:31.473" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5761" PostTypeId="2" ParentId="5756" CreationDate="2018-02-15T07:54:21.443" Score="6" Body="&lt;p&gt;for example &lt;strong&gt;Z8410 DMA&lt;/strong&gt; chips are using &lt;strong&gt;BUSRQ&lt;/strong&gt; so any peripherial based on them will use it too. For example this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://velesoft.speccy.cz/data-gear.htm&quot; rel=&quot;noreferrer&quot;&gt;Velesoft: DATA-GEAR&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/vz8EG.png&quot; alt=&quot;datagear&quot; /&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Which is used as form of &lt;strong&gt;GPU&lt;/strong&gt;. For more info see:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4859/6868&quot;&gt;Z8410 DMA chip as GPU?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;BUSRQ&lt;/strong&gt; is meant to share buses of the system so it is intended also for multi &lt;strong&gt;(C)PU&lt;/strong&gt; systems. But not all shared &lt;strong&gt;BUS&lt;/strong&gt; devices use it. For example ZX spectrum &lt;strong&gt;CPU+ULA&lt;/strong&gt; share buses but &lt;strong&gt;ULA&lt;/strong&gt; stops &lt;strong&gt;Z80&lt;/strong&gt; clock instead of using &lt;strong&gt;BUSRQ&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You're right Memories are using different mechanisms. Each memory chip has its own &lt;strong&gt;CS&lt;/strong&gt; chip select signal which is activated by system address decoder usually tied to the address buss (not always). For example peripherials on ZX Spectrum use &lt;strong&gt;/ROMCS&lt;/strong&gt; signal on the bus which deactivates the internal &lt;strong&gt;ROM&lt;/strong&gt; and the peripherial can place its own memory there When needed. For example &lt;strong&gt;FDC&lt;/strong&gt; &lt;a href=&quot;https://cs.wikipedia.org/wiki/Didaktik_40&quot; rel=&quot;noreferrer&quot;&gt;Didaktik D40/D80&lt;/a&gt; works this way&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/hog6w.png&quot; alt=&quot;D40/D80&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;IIRC When you call &lt;code&gt;rst0&lt;/code&gt;(reset) it swap ROMs and run its own BIOS it detects the reason of &amp;quot;interrupt/reset&amp;quot;. As BASIC triggers this on syntax error it places new syntax into BASIC extending it to operate with FDD. for example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LOAD &amp;quot;file.P&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;loads from tape but&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LOAD * &amp;quot;file.P&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;loads from floppy ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-02-15T08:47:22.380" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5762" PostTypeId="2" ParentId="2008" CreationDate="2018-02-15T13:33:30.083" Score="7" Body="&lt;p&gt;The German hobby-electronics magazine &quot;ELEKTOR&quot; had a project called &quot;Computer 74&quot;, named both because of the year of publishing and the TTL logic chip family that made up most of the design. Sorry, I don't remember more about it...&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2018-02-15T13:33:30.083" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5763" PostTypeId="2" ParentId="4733" CreationDate="2018-02-16T09:40:04.080" Score="14" Body="&lt;p&gt;The three CPUs were designated as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CPU 1 - Main game logic and control of the other two&lt;br&gt;&#xA;CPU 2 - Graphics and enemy movement&lt;br&gt;&#xA;CPU 3 - Sound&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The three CPUs communicate via shared RAM. CPU 2 and 3 perform start-up checks (such as a ROM checksum) and then go into infinite loops, with all activity happening inside interrupts triggered by CPU 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CPU 2 is responsible for moving enemies, moving the player's shots and ship, moving the background and doing collision detection. It's code has been &lt;a href=&quot;http://www.computerarcheology.com/Arcade/Galaga/CPU2.html&quot; rel=&quot;noreferrer&quot;&gt;disassembled&lt;/a&gt; and you can see that it has a few simple commands that are triggered by interrupt. CPU 3 is basically the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that CPU 2 can refuse commands in cases where they are impossible to execute, e.g. when it has run out of free sprite slots. The enemies are drawn as part of the background tiles when not in flight, to save sprite slots.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-02-16T09:40:04.080" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5764" PostTypeId="2" ParentId="5533" CreationDate="2018-02-16T16:01:51.880" Score="3" Body="&lt;p&gt;The emulator that you want does exist.  You are looking for an emulator that emulates a USB Floppy Drive.  So the emulator connects to the computer via a USB cable, and the storage media is a USB Flash Drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do a Google search on &quot;UFA1M44-100&quot; and you will find one model of emulator that emulates a USB Floppy Drive.  You can find another company that sells these if you do a Google search on &quot;IntelliRob Systems&quot;.  Look in the menu on the left side of their pages for &quot;1.44 MB (USB) acts as USB Floppy Drive&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was trying to find a way to get a USB Flash Drive to act as a floppy without any emulator, but I finally gave up and started to look for a regular USB Floppy Drive.  That is when I stumbled upon these USB Floppy Drive Emulators.  I've already bought a USB Floppy Drive, but these emulators still interest me, so I may yet buy one.  If you do buy one, please let us know how well it works out.&lt;/p&gt;&#xA;" OwnerUserId="8060" LastActivityDate="2018-02-16T16:01:51.880" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5765" PostTypeId="2" ParentId="5756" CreationDate="2018-02-16T17:04:54.693" Score="3" Body="&lt;p&gt;Here is an example of ZX Spectrum-related thing:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/J88qT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/J88qT.jpg&quot; alt=&quot;http://nedopc.com/gs/neogs_c_front.jpg&quot;&gt;&lt;/a&gt;&#xA;This is a sound card for russian clones of ZX Spectrum (those that have ZX-Bus slots, ZX-Bus is an improved version of 'rubber ZX' bus, allowing multiple cards). It is called 'NeoGS' and based over the older one, 'GS' (stands for &quot;General Sound&quot;), that played 4 channels of digital 8-bit sound using on-board Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The improved NeoGS is FPGA-based and also has SDcard slot and mp3 decoder. DMA via BUSRQ/BUSACK for its on-board Z80 is used for fast access from host ZX to card's memory, thus making it also suitable for co-processor actions like 3D precalc etc. On-board Z80 runs at frequencies up to 24 MHz (slightly overclocked, also 20 MHz mode is supported).&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-02-16T17:04:54.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5766" PostTypeId="2" ParentId="2008" CreationDate="2018-02-17T01:16:08.213" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PERQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Perq computers&lt;/a&gt;, which were built first in Pittsburgh, PA, and then later, somewhere in England, had a CPU that was mostly built from 74LS parts.  &quot;Mostly,&quot; because it had one LSI chip, an &lt;a href=&quot;https://en.wikipedia.org/wiki/AMD_Am2900#Members_of_the_Am2900_family&quot; rel=&quot;nofollow noreferrer&quot;&gt;Am2910 microsequencer&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first Perqs were shipped in 1980--well after the Apple][ and other microprocessor-based computers had hit the market.  In fact, the Perq's I/O system used a Z-80 as an auxiliary processor.&lt;/p&gt;&#xA;" OwnerUserId="588" LastActivityDate="2018-02-17T01:16:08.213" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5767" PostTypeId="1" AcceptedAnswerId="5770" CreationDate="2018-02-18T22:19:32.193" Score="41" ViewCount="11655" Body="&lt;p&gt;Why did manufacturers of home computers avoid using the 6809 CPU? I realize that the Z80 and 6502 had a 3- or 4-year head start in availability.  But once it did become available in 1978, I don't understand why designers of new computers didn't choose it.  I can only think of the TRS-80 Color Computer (home market) and the Commodore SuperPet (educational market) as mass-produced computers which used it.&lt;/p&gt;&#xA;&lt;p&gt;It doesn't surprise me that it was not used in any business computers. &lt;strong&gt;New = unnecessary risk&lt;/strong&gt; to many of those potential customers. But most home users didn't care much about having a well-known operating system and large preexisting library of professional applications.&lt;/p&gt;&#xA;&lt;p&gt;The 6809 had inherent advantages. From the &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6809&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The 6809 was, by design, the first microprocessor for which it was possible to write fully position-independent code and fully reentrant code in a simple and straightforward way, without using difficult programming tricks. It was also one of the first microprocessors to implement a hardware multiplication instruction, and it features full 16-bit arithmetic and an especially fast interrupt system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It seems strange to me that the engineers of manufacturers would not have been attracted to these advantages, and striven to build machines utilizing it.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-10-15T21:28:49.963" Title="What limited the use of the 6809 CPU in personal computers?" Tags="&lt;6809&gt;" AnswerCount="6" CommentCount="19" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5768" PostTypeId="2" ParentId="5767" CreationDate="2018-02-18T22:36:57.667" Score="30" Body="&lt;p&gt;While I don't &lt;em&gt;know&lt;/em&gt; the answer to this, I'll hazard a few guesses:  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;It was quite an expensive CPU.  For example, in 1983 retail price in the UK was £6.50 for the 6809 or £12 for the 68B09, versus £3.20 for the Z80A or £5 for a 6502A.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Its performance didn't exactly set the world on fire.  With most instructions taking 3-7 cycles at 1MHz, the base 6809 would be somewhat slower than either of those alternative processors, except for applications that used a lot of 16-bit operations.  The 68B09 at 2MHz may have been a little faster, but probably not enough faster to be worth the cost, especially given that an 8088 was only another 50% more expensive and gave a much larger leap in performance.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The advantages cited in the Wikipedia article weren't generally seen as particularly important for PC/home applications &lt;em&gt;at the time&lt;/em&gt;.  It was only when more demanding applications started to be used on micros that they became relevant, and by then the 8088 had already achieved a dominant position.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-02-18T22:42:37.393" LastActivityDate="2018-02-18T22:42:37.393" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="5770" PostTypeId="2" ParentId="5767" CreationDate="2018-02-19T11:31:34.983" Score="51" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why did manufacturers of home computers avoid using the 6809 CPU?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I can't really see that anyone 'avoided' it. There have been many successful machines using the 6809. Beside the mentioned &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_Color_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tandy's CoCo&lt;/a&gt; there where other computers for the general audience, like&lt;/p&gt;&#xA;&lt;p&gt;(Not exhaustive, there might be many more, as it's just from memory)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://www.pcmuseum.ca/details.asp?id=41663&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hitachi MB6890&lt;/a&gt;&lt;/strong&gt; of 1980 and the later&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?c=341&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hitachi S1&lt;/a&gt;&lt;/strong&gt; series.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?c=100&quot; rel=&quot;nofollow noreferrer&quot;&gt;Canon CX-1&lt;/a&gt;&lt;/strong&gt; business system of 1981. (MCX Operating System)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/FM-8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fujitsu FM8&lt;/a&gt;&lt;/strong&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/FM-11&quot; rel=&quot;nofollow noreferrer&quot;&gt;FM-11&lt;/a&gt; series (1981) as professional desktop machines and&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/FM-7&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fujitsu FM7&lt;/a&gt;&lt;/strong&gt; series (1984) for the semi professional/home market&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;They were quite successful in Japan throughout all of the 1980s, and somewhat strange, the FM7 also in Portugal. The Fujitsu machines even featured &lt;em&gt;two&lt;/em&gt; 6809, the second one operating as independent graphics subsystem.&lt;/p&gt;&#xA;&lt;p&gt;Then there was Thomson as a major French player with the&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Thomson_TO7&quot; rel=&quot;nofollow noreferrer&quot;&gt;Thomson TO7&lt;/a&gt;&lt;/strong&gt;/8/9 series (starting 1982), and&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Thomson_MO5&quot; rel=&quot;nofollow noreferrer&quot;&gt;Thomson MO5&lt;/a&gt;&lt;/strong&gt;/6 series, a somewhat low cost version of the TO7(*1).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These machines had good sales and a strong following (still today) in French speaking countries. In other places they were rather rate (*2). The MO6 was also OEM'ed by &lt;strong&gt;Olivetti&lt;/strong&gt; as &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Olivetti_Prodest_PC128&quot; rel=&quot;nofollow noreferrer&quot;&gt;Prodest PC128&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;(For all these machines it might be more useful to read the corresponding French/Italian/Japanese Wiki pages than the English ones :))&lt;/p&gt;&#xA;&lt;p&gt;Another successful machine was the British &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Dragon_32/64&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dragon 32/64&lt;/a&gt;&lt;/strong&gt; series of 1982. They are often attribute as Tandy clones, but that's rather due the fact that both use Motorolas SAM chipset. Compared to the CoCo, they offer a better Keyboard and an on board parallel interface.&lt;/p&gt;&#xA;&lt;p&gt;And lets not forget the &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Vectrex&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vectrex&lt;/a&gt;&lt;/strong&gt; (1982), and the fact that the &lt;a href=&quot;https://www.folklore.org/StoryView.py?story=Good_Earth.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;MacIntosh prototype&lt;/a&gt;, developed around the same time, was also 6809 based.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I realize that the Z80 and 6502 had a 3- or 4-year head start in availability. But once it did become available in 1978, I don't understand why designers of new computers didn't choose it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For one, above examples do show that it has been used, but it takes some time to decide, design and market a new machine. So while the raw CPU may have been available in late 1978, above examples show that it took roughly 3 years for computers to show up using this new CPU. Comparable to the Atari Series, only showing up 4 years after the 6502 CPU was available.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It doesn't surprise me that it was not used in any business computers. New = unnecessary risk to many of those potential customers. But most home users didn't care much about having a well-known operating system and large preexisting library of professional applications.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It might be less simple here. Professional &lt;em&gt;users&lt;/em&gt; don't care about the machine or its CPU. They care about certain application. If a manufacturer supports its applications after switching the CPU, they gladly buy the new, incompatible one.&lt;/p&gt;&#xA;&lt;p&gt;Now, with third party software it becomes more complicated. If a manufacturer can convince them about the new system and its future sales, they will support it and users will follow. Otherwise it's playing safe and make the new machine compatible. Back in the 1970s and early 1980s, professional software was rather closely tied to computer manufacturers, so switching CPUs wasn't uncommon. Their decisions were hardware driven and supported by good profit margins, allowing them to spend large amounts on software ports.&lt;/p&gt;&#xA;&lt;p&gt;On the fast moving home computer market, margins were rather small, and changing a machine design that would result in a complete rewrite was unaffordable. That's why Commodore stayed that long with the 6502. It was less expensive to patch some parts of the Kernel for a new video controller while keeping the same old CPU.&lt;/p&gt;&#xA;&lt;p&gt;Pagetable has just released a nice work showing how Commodore kept &lt;a href=&quot;http://www.pagetable.com/?p=926&quot; rel=&quot;nofollow noreferrer&quot;&gt;reusing code in the Kernal&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The 6809 had inherent advantages. From the Wikipedia [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I guess that and for sure the usage of full 64 KiB where the main reasons for the &lt;a href=&quot;https://en.wikipedia.org/wiki/University_of_Waterloo&quot; rel=&quot;nofollow noreferrer&quot;&gt;University of Waterloo&lt;/a&gt; Computer Systems Group's development of a &lt;a href=&quot;http://www.6502.org/users/andre/petindex/superpet.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;6809 daughterboard&lt;/a&gt;  for the PET - what later became known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_PET#Education,_business,_and_computer_science&quot; rel=&quot;nofollow noreferrer&quot;&gt;SuperPET&lt;/a&gt; after Commodore bought the design in 1981 (*3).&lt;/p&gt;&#xA;&lt;p&gt;In fact, the SuperPET has been one of many 6809 add on cards for existing machines. Like &lt;strong&gt;&lt;a href=&quot;http://www.brouhaha.com/%7Eeric/retrocomputing/apple/apple2/mill/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Mill&lt;/a&gt;&lt;/strong&gt; for the Apple II or the &lt;a href=&quot;http://www.portices.fr/formation/Res/Info/Dimet/Ordinateurs/AcornBBC/www.stairwaytohell.com/Ressources/r-MU-CambridgeMS-6809SecondProcessor.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;6809 Tube Modul&lt;/a&gt; for the BBC.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It seems strange to me that the engineers of manufacturers would have been attracted to these advantages, and would have striven to build machines utilizing it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;At the time the 6809 became available the game was no longer played by some lone engineer starting a new computer, but bigger companies and driven by much more than just curiosity for a new chip. Still, a wide usage of 6809 systems as CPU in other systems, from knitting machines to street lights and telephone systems does show that engineers did appreciate the additional abilities.&lt;/p&gt;&#xA;&lt;p&gt;Also, and maybe even more important, 16-bit CPUs (8086, 68k, 32k) became available about the same time as the 6809. And the Mac is a great example, that switching over to 16-bit did bring even more advantages, especially in terms of memory, than just using a more advanced 8-bit unit. Kind of a 'too little, too late' case.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion: I don't think the 6809 was avoided. There have been many successful systems. But it was already too late to successfully compete with upcoming 16-bit systems.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Thomson somewhat screwed their own success by making the MO5 not fully compatible. While the hardware is quite similar, they mixed up the memory map, thus making exchangeable programs less common.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Keep in mind, most machines had their home markets and respective companies were rather niche players in other parts of the world. For example Tandy was a big number in the US, but never really a thing in continental Europe. Much like Thomson machines were big in France, Belgium and Italy, but exotic in other parts of Europe. Interestingly they were somewhat successful in Britain. Similarly, Japan had a complete separate ecosystem.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Reading the &lt;a href=&quot;http://seefigure1.com/2013/12/07/superpet.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;SuperPET history&lt;/a&gt; reveals that the original 6809 choice even came from IBM(!) as part of the MICROWAT program they developed for the University of Waterloo CSG.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-15T21:28:49.963" LastActivityDate="2020-10-15T21:28:49.963" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="5771" PostTypeId="2" ParentId="5627" CreationDate="2018-02-20T08:02:04.307" Score="0" Body="&lt;p&gt;Not sure if this will help, but this was the answer to connecting&#xA;the Master Console to an Ubuntu x3270 session on TK4-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;010@ubuntu:3270&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and then on the Hercules console:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;attach 010 3270 CONS&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;/v 010,console,auth=all&lt;/p&gt;&#xA;" OwnerUserId="8071" LastActivityDate="2018-02-20T08:02:04.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5772" PostTypeId="1" AcceptedAnswerId="5775" CreationDate="2018-02-20T12:06:55.197" Score="19" ViewCount="3241" Body="&lt;p&gt;The ZX BASIC Manual gives the &lt;a href=&quot;http://www.worldofspectrum.org/ZXBasicManual/zxmanchap18.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;following little program to demonstrate how INKEY$&lt;/a&gt; works:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 IF INKEY$ &amp;lt;&amp;gt; &quot;&quot; THEN GO TO 10 &#xA;20 IF INKEY$ = &quot;&quot; THEN GO TO 20 &#xA;30 PRINT INKEY$; &#xA;40 GO TO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;While I have ascertained that this works, and that if you remove line 10 (as the manual goes on to suggest), you get several letters displayed per keypress, I just don't understand the logic of it. I mean, &lt;code&gt;IF INKEY$ &amp;lt;&amp;gt; &quot;&quot;&lt;/code&gt; and &lt;code&gt;IF INKEY$ = &quot;&quot;&lt;/code&gt; would seem to cover all logical possibilities. How does the program ever get to line 30?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is: &lt;strong&gt;What exactly is the logic of &lt;code&gt;INKEY$&lt;/code&gt;f in ZX BASIC, and why do these two conditions not produce an inescapable loop?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="6794" LastEditDate="2020-04-18T14:01:38.460" LastActivityDate="2020-04-18T14:01:38.460" Title="Understanding INKEY$ in ZX BASIC" Tags="&lt;zx-spectrum&gt;&lt;basic&gt;" AnswerCount="6" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5773" PostTypeId="2" ParentId="5772" CreationDate="2018-02-20T12:25:38.933" Score="10" Body="&lt;p&gt;Lines 10 and 20 do cover all possibilities, but they don't cover them at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line 10 is saying, &quot;do not proceed to the next line as long as there's still a key being pressed from before.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line 20 is saying, &quot;now that no key is being pressed, stay here until one is being pressed.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will reach line 30 only when you first press a key, which it will print, then it will go back to line 10 to wait for you to release that key, then on to line 20 to wait for you to press a new one.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-02-20T12:25:38.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5774" PostTypeId="2" ParentId="5772" CreationDate="2018-02-20T12:26:02.583" Score="23" Body="&lt;p&gt;I suspect your confusion is because INKEY$ returns the current state of the keyboard, not a buffered stream of up / down key presses (On serial terminal based systems such as CP/M you'd get the character code which might have buffer depending on the hardware).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically the code could be written:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;10 Wait for all keys to be up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;20 Wait for a key to be pressed&lt;/p&gt;&#xA;&#xA;&lt;p&gt;30 Print pressed key&lt;/p&gt;&#xA;&#xA;&lt;p&gt;40 back to start again.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2018-02-20T22:57:20.073" LastActivityDate="2018-02-20T22:57:20.073" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5775" PostTypeId="2" ParentId="5772" CreationDate="2018-02-20T13:20:18.187" Score="24" Body="&lt;h2&gt;Some comprehensive BASIC to start with&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There are BASICly three (*1) kinds of statements to handle single keystrokes in various BASICs (*2):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Waiting for a single keyvalue to arrive and returning it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Checking if a key has been pressed, if yes, it's read and returned, otherwise an empty value is returned&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Delivering the actual state of the (decoded) keyboard without any waiting or checking.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Most classic BASICs follow version #1 or #2, as they work with keystroke buffers like when there is a terminal connection. Many homecomputer BASICs, especially of the Microsoft kind follow #2, while mainframe BASICs often follow #1. Usually, but not always, it is called &lt;code&gt;GET&lt;/code&gt; (*3). #3 is common among 'creative' BASICs that support game programming, including Sinclair BASIC.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;All three have their reasoning:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Version #1&lt;/strong&gt; stops the program run until a keypress is received, thus waiting for it does not need to do any further handling. Convenient on more text and business style application - also, in a mainframe environment, input is sometimes only available in blocking versions&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Version #2&lt;/strong&gt; is about as low level as any terminal based system can get. It only peeks into the input buffer, but if there is a character, it gets extracted and delivered. This allows more interactivity, but still can only report &lt;em&gt;'no keypress'&lt;/em&gt; or &lt;em&gt;'this key has been pressed and released'&lt;/em&gt; (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Version #3&lt;/strong&gt; now is something that can only be accomplished if the keyboard state is in direct access to the BASIC interpreter. It delivers this state each time called. So handling input is much like on Assembly programs. There is no filter about pressing or releasing. This has to be done by the BASIC program. As a result, each and every key (*5) behaves much like a joystick switch. Not only pressing, but also exact timing of press and release can be detected - thus including duration of press.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;In practice this translates to three different logics:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Version #1&lt;/strong&gt; is the most relaxed, as it always returns with a key pressed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Version #2&lt;/strong&gt; also returns when no key is pressed, so if waiting is required, it needs to be looped around. Of course, other things can be done during that loop before checking the keyboard again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Version #3&lt;/strong&gt; does need edge discrimination (*6) when used, differentiating key press and key release to form a keystroke if this is the goal.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Now for your question&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What exactly is the logic of INKEY$ in ZX BASIC,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sinclair BASIC's &lt;code&gt;INKEY$&lt;/code&gt; follows Version #3 and delivers just the actual state. Perfect for timing relevant game programming, but a bit more work for the programmer of more mundane tasks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your example it works like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 IF INKEY$ &amp;lt;&amp;gt; &quot;&quot; THEN GO TO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This loop waits until &lt;strong&gt;no&lt;/strong&gt; key is pressed by reading the matrix over and over again&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;20 IF INKEY$ = &quot;&quot; THEN GO TO 20 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This loop waits until &lt;strong&gt;a&lt;/strong&gt; key is pressed by reading the matrix over and over again&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;30 PRINT INKEY$;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now the matrix gets read one more time and the result is displayed.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and why do these two conditions not produce an inescapable loop?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because it's always checking the actual state, not some buffer. The logic is the one of an edge discriminator (*6), not so much of an OS call as modern languages offer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But yes, there is a chance to screw it, if you're able to press and release faster than thee lines are executed may result, depending on your timing, in lost keystrokes, missed keystrokes or wrong returned. Then again, We are talking about a human operation the membrane here. Fat chance :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A truly secure routine would be a bit slower, a bit more complex and look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 A$ = INKEY$&#xA;20 IF A$ = &quot;&quot; THEN GO TO 10&#xA;30 IF INKEY$ &amp;lt;&amp;gt; &quot;&quot; THEN GO TO 30&#xA;40 PRINT A$&#xA;50 GO TO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now we read the keyvalue only once and store it for later processing. This will always record the first key pressed, no matter if later on others got pressed (before releasing all).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Make that 6, as some BASICs define &lt;code&gt;INKEY&lt;/code&gt; as numeric, while others (like Sinclair) made it string based.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - It's &lt;code&gt;INKEY&lt;/code&gt; on Sinclair, &lt;code&gt;GET&lt;/code&gt; on Microsoft, and maybe other names on lesser known dialects. I just use &lt;code&gt;INKEY&lt;/code&gt; for the remaining answer to simplify wording. I'm well aware the Sinclair might have chosen INKEY instead of GET to make clear that here a different behaviour is to be expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - None of these single key reading operations where part of the &lt;a href=&quot;http://www.dartmouth.edu/basicfifty/commands.html&quot; rel=&quot;noreferrer&quot;&gt;original Dartmouth BASIC&lt;/a&gt; (as FORTRAN didn't offer anything about keystrokes), thus names are made up by each implementation in their own way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Usually it's reported the time it is pressed, but both ways have been used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Depending on the keyboard structure and scanning, multiple key combinations may or may not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - An edge discriminator in electronics is a circuit to detect when a signal changes, like detecting a rising or falling flank (aka edge), for example in interrupt handling or alinke. Here it describes a procedural way to detect when a condition changes - from not pressed to pressend, and back.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-02-21T08:58:57.357" LastActivityDate="2018-02-21T08:58:57.357" CommentCount="19" ContentLicense="CC BY-SA 3.0" />
  <row Id="5776" PostTypeId="1" AcceptedAnswerId="5778" CreationDate="2018-02-20T17:25:21.893" Score="4" ViewCount="747" Body="&lt;p&gt;I have one question about how old computers or consoles like Super NES merged background layer(s) and spirites. Or another way - how layers were merged to not overload a PPU / CPU? OR how about situation, when there were more spirites on the same position? Were there all pixels of all sprites drawn?&lt;/p&gt;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7qoWM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7qoWM.png&quot; alt=&quot;Example&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Example is based on NES, but i'm also interested in other solutions. On the picture above you can see well known and liked Mr. Gumba. Mr. Gumba is 16x16 sprite. Some of the pixels in memory has value h00, that means, that this is &amp;quot;transparent&amp;quot; color. As far as I remember - SNES were able to display parts of 6 backgrounds on the same time&lt;/p&gt;&#xA;&lt;p&gt;So how this layer below were displayed? This was made without buffering. Was it something like:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Load to a register pixel color from (top) object memory.&lt;/li&gt;&#xA;&lt;li&gt;If it is transparent load to a register pixel color from memory of object that is below.&lt;/li&gt;&#xA;&lt;li&gt;If it is transparent load to a register pixel color from memory of object that is below.&lt;/li&gt;&#xA;&lt;li&gt;If it is transparent load to a register pixel color from memory of object that is below.&lt;/li&gt;&#xA;&lt;li&gt;If it is transparent load to a register pixel of background&lt;/li&gt;&#xA;&lt;li&gt;Display&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;(?)&lt;/p&gt;&#xA;" OwnerUserId="8073" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-02-20T19:45:20.960" Title="SNES / old graphics: merging sprite's with background" Tags="&lt;graphics&gt;&lt;nes&gt;&lt;snes&gt;&lt;sprite&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2018-02-21T17:06:51.180" ContentLicense="CC BY-SA 3.0" />
  <row Id="5778" PostTypeId="2" ParentId="5776" CreationDate="2018-02-20T19:45:20.960" Score="6" Body="&lt;p&gt;It's usually not as centralised as you describe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a system supports a background and, say, four sprites then there'll be one part of the video chip that generates the background. That's always running. Then there'll be four distinct shift registers, each responsible for a single sprite. They're also always running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The five outputs go simultaneously to a single location. That location decides which one to forward to the video encoder, and often also updates a bit of exposed state about whether more than one of its inputs was active at the same time, which the processor can use to test for collisions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A sprite that is in practice entirely invisible will nevertheless be loaded into its shift register and shifted out in its entirety.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the process is parallel, not serial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then sprites-per-line limits from there being space for only so many shifters; there's a split between machines where you directly load hardware registers to describe sprites (like the C64), and those which fetch sprite details from RAM somewhere (like the TMS machines and direct descendants). The difference tends to manifest as whether the programmer can statically specify more sprites than can simultaneously share a line; the cost is that a bit more memory bandwidth is required for the same quality of display. The earliest successful console, the 2600, not only sits in the load-the-registers camp, but includes its background in the list of things that must be loaded and has enough internal storage for a single unique line only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later machines also abolish the fixed priorities between elements, allowing it to be specified.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-02-20T19:45:20.960" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5779" PostTypeId="2" ParentId="4528" CreationDate="2018-02-20T20:21:12.740" Score="1" Body="&lt;p&gt;I tried looking on www.archive.org (The Internet Archive) and didn't find it there, but try this page, which has several assemblers/text editors (the titles under which the files were uploaded may be different than the 'official' names in the histories):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://mirrors.apple2.org.za/ftp.apple.asimov.net/images/programming/assembler/&quot; rel=&quot;nofollow noreferrer&quot;&gt;mirrors.apple2.org.za/ftp.apple.asimov.net/images/programming/assembler/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scroll down and there are some in the 40+ range of the listings. The site is a mirror of the older Asimov Apple II FTP site.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully, that will give you a starting point. As for the Internet Archive, how you word your searches (use the text search box on the right-hand side of the homepage, and I'd at least use the terms &quot;Apple  II&quot;, assembler, &quot;text editor&quot;. and other words in the strict Apple name (or other nicknames) for the software you have. I have that ProDOS Assembler Toolkit, though I didn't get very far with it at that time (probably, I should get back to doing that, eh?)...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An update; I found that Internet Archive does have the manual for the ProDOS Assembler Toolkit (PDF and other formats) here: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/EDASM-ProDOS_Assembler_Tools_Manual&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/details/EDASM-ProDOS_Assembler_Tools_Manual&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may be able to find the disk image from that page - check if there are related links at the bottom of that page.&lt;/p&gt;&#xA;" OwnerUserId="8074" LastEditorUserId="621" LastEditDate="2018-02-21T00:40:31.137" LastActivityDate="2018-02-21T00:40:31.137" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5780" PostTypeId="1" CreationDate="2018-02-20T23:20:53.860" Score="5" ViewCount="285" Body="&lt;p&gt;Is there any way to compile programs written in TI-BASIC (68k) into 68k assembly?  The apps I have seen only support only the TI-83 family and do not produce 68k assembly.&lt;/p&gt;&#xA;" OwnerUserId="8077" LastEditorDisplayName="user6464" LastEditDate="2018-12-01T07:55:30.563" LastActivityDate="2018-12-01T07:55:30.563" Title="TI-89 BASIC Compiler" Tags="&lt;ti-basic&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="5781" PostTypeId="1" CreationDate="2018-02-22T23:19:03.660" Score="7" ViewCount="279" Body="&lt;p&gt;This question is about the era of the TRS-80 Model I, ca. 1977-1979. Originally there was no software you could buy, other than BASIC itself, which was in ROM. You would write your own, or type in source code from books and magazines. Then at some point it became possible to buy software commercially on cassette tapes, such as, if I recall correctly, an editor-assembler (EDTASM) and a Star Trek game. I think these tapes came in plastic boxes the size of a large book, which you could buy at a Radio Shack store. Later still, floppy drives became available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it true that Radio Shack originally had a business plan in which they would have a monopoly on software for the TRS-80? I seem to remember being told this at the time. I do think there probably was a period ca. 1978 when a Radio Shack store was effectively the only sales channel for TRS-80 software. Later (maybe 1980?), you could find ads in the back of computer magazines, and you could order games on floppy disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea of monopolizing software seems kind of goofy from today's point of view, when desktops are generic appliances, but this &lt;em&gt;was&lt;/em&gt; a different era, and also Radio Shack did make many dumb decisions. You could also look at this as a brilliantly evil, although unsuccessful, prefiguring of the kind of walled-garden approach that Apple now takes with their phones, or of some of Microsoft's behavior.&lt;/p&gt;&#xA;" OwnerUserId="4766" LastEditorUserId="4138" LastEditDate="2018-02-23T01:22:34.743" LastActivityDate="2018-02-23T01:22:34.743" Title="Did Radio Shack initially attempt to get a monopoly on commercial software for the TRS-80 Model I?" Tags="&lt;software&gt;&lt;trs-80&gt;" AnswerCount="1" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="5782" PostTypeId="2" ParentId="5781" CreationDate="2018-02-23T01:02:56.527" Score="9" Body="&lt;p&gt;I never heard of such a thing. I never read anything in any of the magazines. I've never heard any lingering of &quot;remember when...&quot; that you would think would flood the internet, even in this day in age. We all know about the Microsoft monopoly, but never a word about Radio Shack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, I have no &quot;proof&quot; that this didn't happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll tell you what did happen, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What did happen was Radio Shack went &quot;all in&quot; on the micro computer. More so than any other entity at the time especially one as large as Radio Shack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Through their Radio Shack Computer Centers, and their catalog, they tried to be &quot;one stop shopping&quot; for the entire array of computer related stuff. From computers to printers to desks to software and boxes of green bar printer paper. They really took the idea of the &quot;citizen computer user&quot; to heart by having these public showrooms of stuff available to any and all comers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They sold sophisticated hardware as well. Sure, we all remember the &quot;Trash 80&quot;, but, honestly, with everything going on at the time, the idea of an out of the box computer that had all of the components that the TRS-80 had, all matched up, again, one stop shopping, along with the market pressures that were occurring, that they were pioneering, seriously, the TRS-80 family was a wonder, despite its issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not to mention the Model II, their 68000/Z80 combinations, early XENIX releases, the later Model III and IV, etc. They were hot for the office market, not so much the consumer market. And, appreciate that that the time (as today), much of the micro world was dominated by &quot;consultants&quot; and &quot;vars&quot; and what not. It was actually difficult to walk in and buy off the shelf, well, anything. But not at a Radio Shack Computer Center.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I never knew if they had any kind of consulting arm outside of the store. Specialized, trained people, kitting up solutions for businesses. What we did learn after the utopian idea of widely available computing at all, was how specialized it all worked out to be. One stop shopping works well for hardware, but business solutions -- not so much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a zillion accounting packages out in the world for a reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, no, I don't think Radio Shack ever went for any kind of monopoly. Rather they went all in, projected the vision to get the Every Man (or, more rightly, the Every Businessman) a computer solution and lowered the barriers of access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Didn't quite work out for them, but hey, it was all new back then. Who knew what was going to happen.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-02-23T01:02:56.527" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5783" PostTypeId="5" CreationDate="2018-02-23T01:35:37.037" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2018-02-23T01:35:37.037" LastActivityDate="2018-02-23T01:35:37.037" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5784" PostTypeId="4" CreationDate="2018-02-23T01:35:37.037" Score="0" Body="Use for questions regarding the z80-based Tandy Radio Shack computers, the TRS-80 Model I, II, III, and 4. Computers using another processor, such as the 6809-based TRS-80 Color Computer, should use a different tag ([color-computer] in that case)." OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2018-02-23T08:00:22.240" LastActivityDate="2018-02-23T08:00:22.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5785" PostTypeId="1" AcceptedAnswerId="5787" CreationDate="2018-02-23T04:08:58.903" Score="19" ViewCount="1956" Body="&lt;p&gt;How can I obtain the uptime of a Sinclair ZX Spectrum machine (ZX48, ZX128, or Pentagon clone) via their BASIC interpreter? Specifically, the same value used by &lt;code&gt;RANDOMIZE 0&lt;/code&gt; to seed its PRNG. I would assume that this uptime would be the number of cycles the MCU has gone through since boot and so would increment at 3.5 MHz (or some fraction thereof). If it is not possible to obtain through the BASIC interpreter, how would I go about getting it by writing code directly to memory, e.g. with &lt;code&gt;DATA&lt;/code&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I am wondering is because I would like to generate a sequence of random numbers less predictable than that generated by &lt;code&gt;RND&lt;/code&gt;. To do that, I need an environmental source of entropy. Inter-keystroke timing is the perfect place to get that entropy (as the ZX has no HWRNG), but only if a high-resolution timer can be sampled at each keystroke. If this is an X/Y question, please let me know.&lt;/p&gt;&#xA;" OwnerUserId="8090" LastEditorUserId="8090" LastEditDate="2018-02-24T08:49:54.790" LastActivityDate="2019-05-30T20:45:15.513" Title="Uptime in ZX BASIC" Tags="&lt;zx-spectrum&gt;&lt;z80&gt;&lt;basic&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5787" PostTypeId="2" ParentId="5785" CreationDate="2018-02-23T08:52:45.903" Score="26" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.worldofspectrum.org/ZXBasicManual/zxmanchap25.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.worldofspectrum.org/ZXBasicManual/zxmanchap25.html&lt;/a&gt;, addresses 23672-23674 contain a 24 bit count of 50Hz frame ticks in the UK. I wrote a quick program to print the values, which do indeed seem to start at zero on startup and increment at the right rate, and thus serve as an uptime counter. A simple bit of maths indicates that the counter wraps round roughly once every four days.&lt;/p&gt;&#xA;" OwnerUserId="80" LastEditorUserId="-1" LastEditDate="2018-02-23T13:41:17.543" LastActivityDate="2018-02-23T13:41:17.543" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5788" PostTypeId="2" ParentId="5785" CreationDate="2018-02-23T10:56:51.593" Score="3" Body="&lt;p&gt;To do that, you simply initialise the random number generator with 0, like &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RANDOMIZE 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For this specific argument, according to the ROM disassembly, the ZX Spectrum BASIC will pick the value from the lower two bytes of the System variable &lt;code&gt;FRAMES&lt;/code&gt;, which is the number of 50Hz interrupts since startup. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case you want the seed value for your own PRNG, simply PEEK that system variable (05C76H), as pointed out in other answers (But be aware the Spectrum's PRNG isn't actually &lt;em&gt;that&lt;/em&gt; bad for an 80ies 8-bit computer and you might be having a hard time writing a better one yourself. The PNRG is actually quite cleverly made without a lot of code because it uses the Arithmetic interpreter of the Spectrum.) You could also &lt;code&gt;RANDOMIZE 0&lt;/code&gt; to make the initial VALUE of &lt;code&gt;RND&lt;/code&gt; dependant on the switched-on time and then feed your own, better implementation of a PRNG with the first value obtained by &lt;code&gt;RND&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-02-23T14:33:20.170" LastActivityDate="2018-02-23T14:33:20.170" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5789" PostTypeId="2" ParentId="5785" CreationDate="2018-02-23T11:50:18.613" Score="10" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I would assume that this uptime would be the number of cycles the MCU has gone through since boot and so would increment at 3.5 MHz (or some fraction thereof).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As already &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5787/6659&quot;&gt;mentioned&lt;/a&gt; by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/80/pndc&quot;&gt;pndc&lt;/a&gt;, the 24 bit counter &lt;code&gt;FRAMES&lt;/code&gt; at 5C78h increments (*1) with every frame (*2) displayed and is zeroed at startup. Thus, an overflow happens only after more than 4 days of gameplay :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The reason I am wondering is because I would like to generate a sequence of random numbers less predictable than that generated by RAND.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;FRAMES&lt;/code&gt;, or better its lower 16 bits, are already used to initialize the PRNG when &lt;code&gt;RANDOMIZE 0&lt;/code&gt;is called, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5788/6659&quot;&gt;Tofro pointed out&lt;/a&gt;. So there is some randomness, but then again, it's strictly based on the program run, unless the program includes many waiting times for asynchronous external events (like keyboard wait).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To do that, I need an environmental source of entropy. Inter-keystroke timing is the perfect place to get that entropy (as the ZX has no HWRNG), but only if a high-resolution timer can be sampled at each keystroke.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Hmm, there is kind of an high precision timer in every Z80: the refresh (&lt;code&gt;R&lt;/code&gt;) Register. It gets incremented in every T3 and T4 clocks of an M1 cycle. That's once per instruction (*3). Only the lower 7 bit are valid, so you may want to collect them if you need more bits. Just make sure there's something un-/less predictable in between.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Which is an interesting deviation from the ZX81, where a similar counter was &lt;em&gt;decremented&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - That's 50 times on European models and 60 on &lt;a href=&quot;https://faqwiki.zxnet.co.uk/wiki/NTSC_Spectrum&quot; rel=&quot;nofollow noreferrer&quot;&gt;NTSC-Spectrums&lt;/a&gt; (sold via mail order in the US) and &lt;a href=&quot;https://en.wikipedia.org/wiki/Timex_Sinclair_2068&quot; rel=&quot;nofollow noreferrer&quot;&gt;US-TS2068&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - It's a bit more complex, so see &lt;a href=&quot;https://stackoverflow.com/a/9351187/2973400&quot;&gt;this fine Stackoverflow answer for details&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-02-23T18:13:45.570" LastActivityDate="2018-02-23T18:13:45.570" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5790" PostTypeId="2" ParentId="4438" CreationDate="2018-02-23T14:54:05.357" Score="1" Body="&lt;p&gt;It could have been Targhan, from Silmarils, in a more aventurous style.&lt;/p&gt;&#xA;" OwnerUserId="166" LastActivityDate="2018-02-23T14:54:05.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5791" PostTypeId="1" CreationDate="2018-02-23T20:56:17.343" Score="8" ViewCount="455" Body="&lt;p&gt;When Tandy introduced the TRS-80, the computer we know now as the &quot;Model 1&quot; or Model I&quot; was simply called the &lt;strong&gt;TRS-80&lt;/strong&gt;. No &quot;Model&quot; designation was necessary. The early releases were as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;TRS-80, August 1977&lt;/li&gt;&#xA;&lt;li&gt;TRS-80 Model II, October 1979 (expensive model for business market)&lt;/li&gt;&#xA;&lt;li&gt;TRS-80 Model III, July 1980 (home computer successor to original TRS-80)&lt;/li&gt;&#xA;&lt;li&gt;TRS-80 Model 4, April 1983 (successor to the Model III)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;One assumes the original computer was given and marketed with a distinguishing name once the Model II began to be marketed. Was it:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;TRS-80 Model I (Roman numeral to match the Model II)&lt;/li&gt;&#xA;&lt;li&gt;TRS-80 Model 1 (Arabic for simplicity, and make the Model II name seem &quot;classy&quot;)&lt;/li&gt;&#xA;&lt;li&gt;Tandy never actually gave the original an official, distinguishing name.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have searched, and have not been able to find an authoritative answer. Some sites use Arabic, some Roman numerals. If there was a distinguishing name given, would someone please post a picture of the box with that name, or perhaps an official Tandy advertisement using that name? (Without a picture, it didn't happen! ) A link would be useful as well.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="3290" LastEditDate="2020-04-15T09:03:42.653" LastActivityDate="2020-04-15T09:03:42.653" Title="Was the TRS-80 Model 1 ever actually sold new with that name?" Tags="&lt;history&gt;&lt;trs-80&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5792" PostTypeId="2" ParentId="5791" CreationDate="2018-02-23T21:59:24.210" Score="3" Body="&lt;p&gt;I did browse some of my racks and found that thruout all Tandy Computer Catalogues, starting with RCS-3 in 1979 (&lt;a href=&quot;http://www.radioshackcatalogs.com/html/catalogs_extra/1979_rsc-03/h006.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Page 6&lt;/a&gt;) the original TRS-80 was called &lt;code&gt;TRS-80 Model I&lt;/code&gt; (Roman Numeral). Before that it was just called the &lt;code&gt;TRS-80 (system)&lt;/code&gt; (&lt;a href=&quot;http://www.radioshackcatalogs.com/html/catalogs_extra/1977_rsc-01/h005.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;RCS-1, 1977&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in original Tandy manuals and documentations I did find many spellings as &lt;code&gt;TRS-80 Model 1&lt;/code&gt;. So it seams as if they did keep the &lt;code&gt;Model I&lt;/code&gt; seplling thruout all advertisement, but not over all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar BTW for the early distinction between Level 1/2 and I/II BASIC.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-18T18:54:18.903" LastActivityDate="2019-09-18T18:54:18.903" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="5793" PostTypeId="1" AcceptedAnswerId="5794" CreationDate="2018-02-23T22:42:42.127" Score="18" ViewCount="876" Body="&lt;p&gt;In the U.S. in the early 1980's (1980-1982, roughly), the TRS-80 Model I/III computers were commonly referred to by teens and youngsters as the &quot;Trash-80&quot;. The best reason I can attribute to this widespread &quot;trash talk&quot; is that the TRS-80 was:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Popular among teachers pushing basic computer skills.&lt;/li&gt;&#xA;&lt;li&gt;Not popular among the students, who preferred an Atari 800 or Apple ][ at home.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is from a U.S. perspective. I don't know if the nickname was used overseas. My impression was that the kids were the ones spreading this nickname, not the adults. But everyone seemed to be aware of the nickname, including Tandy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any hope for assigning correct attribution to the famous nickname &quot;Trash-80&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Jimmy Maher, the Digital Antiquarian, has published what I'd consider the definitive recent article on the &lt;a href=&quot;https://www.filfre.net/2011/06/the-trash-80-part-1/&quot; rel=&quot;noreferrer&quot;&gt;early history of the Trash-80.&lt;/a&gt; But it doesn't answer this peculiar question...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: &lt;em&gt;It seems unlikely this nickname can be attributed to a single first source. It was probably so obvious that it arose simultaneously. The answers describe many of the technical weaknesses that may have encouraged the nickname to spread. However, a second major factor might have been Radio Shack's (the Company) own image. A good answer should address this factor too, IMO.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-02-25T16:03:59.533" LastActivityDate="2020-06-08T13:10:10.640" Title="Who coined the nickname &quot;Trash-80&quot; and what was the source of their animosity?" Tags="&lt;trs-80&gt;&lt;trs-80-model-iii&gt;" AnswerCount="3" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5794" PostTypeId="2" ParentId="5793" CreationDate="2018-02-23T23:27:27.187" Score="19" Body="&lt;p&gt;Since when do kids need a reason to &lt;em&gt;trashtalk&lt;/em&gt;? Especially with an abbreviation calling for such an interpretation? And fans of competing computers where even more eager to jump the train. The war didn't start with Amiga vs. Atari ST :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But (a bit more) serious, there was also a real reason for this name: Early Model 1 where already on itself rather unreliable. When paired with an expansion unit, it became notorious. Sudden resets, strange memory reads, lost RAM content and plain not working conditions happend on a steady base. Part due the rather lousy design, but as well due low quality components. For example the expansion unit connector was something to be replaced even before testing for any other error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That term wasn't just used among some students or teachers. It was also used in magazins and other publications early on. Just check &lt;a href=&quot;https://archive.org/stream/kilobaudmagazine-1978-12/Kilobaud_1978_December#page/n17/mode/2up/search/trash-80&quot; rel=&quot;noreferrer&quot;&gt;this letter in the December 1978 issue of Kilobaud&lt;/a&gt;. Or this &lt;a href=&quot;https://archive.org/details/80_Microcomputing_Issue_01_1980-01_1001001_US?q=trash-80&quot; rel=&quot;noreferrer&quot;&gt;editorial in the January 1980 issue&lt;/a&gt;, the very first issue of 80-Microcomputing, a magazin soly dedicated to Tandy computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It further was well known here in Europe, even before the machine could be bought. Such a catchy name spreads fast :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4025" LastEditDate="2018-02-25T08:39:37.610" LastActivityDate="2018-02-25T08:39:37.610" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5795" PostTypeId="2" ParentId="5791" CreationDate="2018-02-23T23:30:47.313" Score="11" Body="&lt;p&gt;I've gathered some pictures. Here is an early USA advert.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n6fEF.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n6fEF.jpg&quot; alt=&quot;USA introductory ad for TRS-80&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that it is never referred to as a &quot;Model 1&quot; or &quot;Model I&quot;. It's just a &quot;TRS-80&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a later USA ad, after the Model II was released.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/n3zY4.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n3zY4.jpg&quot; alt=&quot;USA TRS-80 ad after Model II released&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the price has gone down, but there is no indication that they have extended the name for the original model. The new Model II is specifically called out though. (The &quot;Level I&quot; refers to the low-end BASIC sold with the cheapest system.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a later ad from the UK.  It also came after the Model II was released.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/hXdop.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hXdop.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both the Model I and Model II names are specifically called out, in addition to the two Model I systems for Level I BASIC and Level II BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tentatively these ads indicate that the original machine was publicly referred to as the &quot;Model I&quot; in the UK. The &lt;a href=&quot;http://www.radioshackcatalogs.com/catalogs_extra/1979_rsc-03_small/&quot; rel=&quot;noreferrer&quot;&gt;catalog&lt;/a&gt; Raffzahn mentions is for the USA (I looked it up), so at least in brochures, Tandy would refer to the &quot;Model I&quot; after the Model II came out. The middle image suggests Tandy did not feel it necessary to use the Model I designater in USA ads.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2018-02-23T23:42:34.713" LastActivityDate="2018-02-23T23:42:34.713" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5796" PostTypeId="1" AcceptedAnswerId="5802" CreationDate="2018-02-24T11:43:34.080" Score="1" ViewCount="852" Body="&lt;p&gt;My wife is a fan of NCIS and I just watched an episode of the Los Angeles version with her.  In it, the bad guys take over a nuclear launch control center.  They try to re-target the missiles.  They appear to be using Commodore 64s but we don't get a close-up. &lt;/p&gt;&#xA;" OwnerUserId="7805" LastEditorUserId="278" LastEditDate="2018-02-24T12:08:14.583" LastActivityDate="2018-02-24T17:08:36.037" Title="Which computer is used in this NCIS episode?" Tags="&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="5797" PostTypeId="2" ParentId="5785" CreationDate="2018-02-24T13:14:14.263" Score="1" Body="&lt;p&gt;Could perform some in(port) commands instead - some ports did not have anything to define the read value, so could return random results. This was very version specific and additional hardware specific too. Not sure what emulators would do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could look at the tape port - just play (loud) music at it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would watch the keyboard ports (0xfe) directly to see which keys were pressed - loop counter detecting a change is more like your inter-keystroke timing. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 LET A=0&#xA;20 LET B=0&#xA;30 LET C=IN (254)&#xA;40 IF (B&amp;lt;&amp;gt;C) THEN GOSUB 1000&#xA;50 LET A=A+1&#xA;60 GOTO 30&#xA;1000 PRINT A&#xA;1010 LET B=C&#xA;1020 RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;BASIC is slow; probably need to do that in machine code.&lt;/p&gt;&#xA;" OwnerUserId="8096" LastEditorUserId="276" LastEditDate="2018-02-26T11:33:07.190" LastActivityDate="2018-02-26T11:33:07.190" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="5798" PostTypeId="1" AcceptedAnswerId="5805" CreationDate="2018-02-24T15:18:31.580" Score="14" ViewCount="2565" Body="&lt;p&gt;I am trying to convert my own BASIC TAP files (containing BASIC programs) to text so that they are readable on my Debian GNU/Linux machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I open them as is, I get this, which gives me some hope, as at least some parts are readable:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rainbow2  &amp;lt;o�$�&amp;gt;�&#xA; �Rainbowtype 2.0&#xA;&#xA; �0&#xA;    �0&#xA;( �&#xA;2 �b=0&#xA;&amp;lt; �b&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The first line is evidently a header with the filename, and the rest corresponds to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 REM Rainbowtype 2.0&#xA;20 BORDER 0&#xA;30 PAPER 0&#xA;40 CLS&#xA;50 LET b=0&#xA;60 BRIGHT b&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This gives me hope that it might be a simple conversion, which could be done with tr or sed etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the output od -x as requested by @cup (first ten lines):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0000000 0013 0000 6172 6e69 6f62 3277 2020 033c&#xA;0000020 806f 0324 3eab ff03 0a00 0012 ea20 6152&#xA;0000040 6e69 6f62 7477 7079 2065 2e32 0d30 1400&#xA;0000060 000a e720 0e30 0000 0000 0d00 1e00 0009&#xA;0000100 30da 000e 0000 0000 000d 0328 2000 0dfb&#xA;0000120 3200 000c f120 3d62 0e30 0000 0000 0d00&#xA;0000140 3c00 0004 dc20 0d62 4600 000a d920 0e37&#xA;0000160 0000 0007 0d00 6400 0007 ea20 614d 6e69&#xA;0000200 000d 0a6e 2000 30f2 000e 0000 0000 000d&#xA;0000220 2778 2000 a6fa 3d20 c220 3231 0e20 0000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is the output of xxd (entire program) as requested by @wizzwizz4:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00000000: 1300 0000 7261 696e 626f 7732 2020 3c03  ....rainbow2  &amp;lt;.&#xA;00000010: 6f80 2403 ab3e 03ff 000a 1200 20ea 5261  o.$..&amp;gt;...... .Ra&#xA;00000020: 696e 626f 7774 7970 6520 322e 300d 0014  inbowtype 2.0...&#xA;00000030: 0a00 20e7 300e 0000 0000 000d 001e 0900  .. .0...........&#xA;00000040: da30 0e00 0000 0000 0d00 2803 0020 fb0d  .0........(.. ..&#xA;00000050: 0032 0c00 20f1 623d 300e 0000 0000 000d  .2.. .b=0.......&#xA;00000060: 003c 0400 20dc 620d 0046 0a00 20d9 370e  .&amp;lt;.. .b..F.. .7.&#xA;00000070: 0000 0700 000d 0064 0700 20ea 4d61 696e  .......d.. .Main&#xA;00000080: 0d00 6e0a 0020 f230 0e00 0000 0000 0d00  ..n.. .0........&#xA;00000090: 7827 0020 faa6 203d 20c2 3132 200e 0000  x'. .. = .12 ...&#xA;000000a0: 0c00 00cb ed35 3030 0e00 00f4 0100 3aed  .....500......:.&#xA;000000b0: 3130 300e 0000 6400 000d 0082 2500 20fa  100...d.....%. .&#xA;000000c0: a620 3d20 c237 200e 0000 0700 00cb d931  . = .7 ........1&#xA;000000d0: 0e00 0001 0000 3a20 ed31 3030 0e00 0064  ......: .100...d&#xA;000000e0: 0000 0d00 8c25 0020 faa6 203d 20c2 3620  .....%. .. = .6 &#xA;000000f0: 0e00 0006 0000 cbd9 320e 0000 0200 003a  ........2......:&#xA;00000100: 20ed 3130 300e 0000 6400 000d 0096 2500   .100...d.....%.&#xA;00000110: 20fa a620 3d20 c234 200e 0000 0400 00cb   .. = .4 .......&#xA;00000120: d933 0e00 0003 0000 3a20 ed31 3030 0e00  .3......: .100..&#xA;00000130: 0064 0000 0d00 a025 0020 faa6 203d 20c2  .d.....%. .. = .&#xA;00000140: 3520 0e00 0005 0000 cbd9 340e 0000 0400  5 ........4.....&#xA;00000150: 003a 20ed 3130 300e 0000 6400 000d 00aa  .: .100...d.....&#xA;00000160: 2500 20fa a620 3d20 c238 200e 0000 0800  %. .. = .8 .....&#xA;00000170: 00cb d935 0e00 0005 0000 3a20 ed31 3030  ...5......: .100&#xA;00000180: 0e00 0064 0000 0d00 b426 0020 faa6 203d  ...d.....&amp;amp;. .. =&#xA;00000190: 20c2 3130 200e 0000 0a00 00cb d936 0e00   .10 ........6..&#xA;000001a0: 0006 0000 3a20 ed31 3030 0e00 0064 0000  ....: .100...d..&#xA;000001b0: 0d00 be26 0020 faa6 203d 20c2 3131 200e  ...&amp;amp;. .. = .11 .&#xA;000001c0: 0000 0b00 00cb d937 0e00 0007 0000 3a20  .......7......: &#xA;000001d0: ed31 3030 0e00 0064 0000 0d00 c828 0020  .100...d.....(. &#xA;000001e0: faa6 203d 20c2 3920 0e00 0009 0000 cbf1  .. = .9 ........&#xA;000001f0: 6220 3d20 c362 3a20 dc62 3a20 ed31 3030  b = .b: .b: .100&#xA;00000200: 0e00 0064 0000 0d00 d21f 0020 faa6 203d  ...d....... .. =&#xA;00000210: 20c2 3135 200e 0000 0f00 00cb fb3a 20ed   .15 ........: .&#xA;00000220: 3130 300e 0000 6400 000d 00dc 0400 f5a6  100...d.........&#xA;00000230: 3b0d 00fa 0c00 20ed 3130 300e 0000 6400  ;..... .100...d.&#xA;00000240: 000d 01f4 0800 ea44 656c 6574 650d 01fe  .......Delete...&#xA;00000250: 2400 20f1 7970 6f73 203d 2028 2032 3420  $. .ypos = ( 24 &#xA;00000260: 0e00 0018 0000 2d20 be32 3336 3839 0e00  ......- .23689..&#xA;00000270: 0089 5c00 290d 0208 2400 f178 706f 7320  ..\.)...$..xpos &#xA;00000280: 3d20 2820 3332 200e 0000 2000 002d 20be  = ( 32 ... ..- .&#xA;00000290: 3233 3638 3820 0e00 0088 5c00 290d 0212  23688 ....\.)...&#xA;000002a0: 2600 20fa 7870 6f73 203d 202d 3120 0e00  &amp;amp;. .xpos = -1 ..&#xA;000002b0: 0001 0000 c620 7970 6f73 203d 2030 200e  ..... ypos = 0 .&#xA;000002c0: 0000 0000 00cb fe0d 021c 3b00 20fa 7870  ..........;. .xp&#xA;000002d0: 6f73 203d 202d 3120 0e00 0001 0000 cbf1  os = -1 ........&#xA;000002e0: 7870 6f73 203d 2033 310e 0000 1f00 003a  xpos = 31......:&#xA;000002f0: 20f1 7970 6f73 203d 2079 706f 7320 2d31   .ypos = ypos -1&#xA;00000300: 0e00 0001 0000 0d02 2613 0020 f5ac 7970  ........&amp;amp;.. ..yp&#xA;00000310: 6f73 2c20 7870 6f73 3b20 2220 220d 0230  os, xpos; &quot; &quot;..0&#xA;00000320: 1300 20f5 ac79 706f 732c 2078 706f 733b  .. ..ypos, xpos;&#xA;00000330: 2022 223b 0d02 5803 0020 fe0d 6200 0001   &quot;&quot;;..X.. ..b...&#xA;00000340: 0000 b970 6ff3 0000 0100 00b8 706f f300  ...po.......po..&#xA;00000350: 0015 0000 92                             .....&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I looked at &lt;a href=&quot;http://www.worldofspectrum.org/utilities.html&quot; rel=&quot;noreferrer&quot;&gt;World of Spectrum Utilities&lt;/a&gt;, but most utilities seem to be for Windows. There is one for Linux, but it converts SNA files. In the Debian repositories I found zmakebas, but that does the opposite (converts text to TAP).&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="8072" LastEditDate="2018-02-24T16:24:08.783" LastActivityDate="2019-01-15T16:44:48.303" Title="Make a BASIC TAP file readable on Linux" Tags="&lt;zx-spectrum&gt;&lt;data-preservation&gt;" AnswerCount="4" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5799" PostTypeId="2" ParentId="5798" CreationDate="2018-02-24T15:28:30.803" Score="8" Body="&lt;p&gt;TAP files are basicly memory dumps of whatever is saved. In this case the tokenized BASIC program. Check &lt;a href=&quot;http://scratchpad.wikia.com/wiki/Spectrum_emulator_file_formats#TAP_format&quot; rel=&quot;nofollow noreferrer&quot;&gt;here for a format description&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that the simplest way would be to load it into an emulator and 'print' it into a text file. &lt;code&gt;fuse&lt;/code&gt; should be able to automate most of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure, but think I remember several utilities to convert TAP into some kind of disk files, where again a different set of tools might be available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or just hack your own conversion tool and become incredibly famous among Sinclair-Linux users - it shouldn't be that hard :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7044" LastEditDate="2019-01-15T16:44:48.303" LastActivityDate="2019-01-15T16:44:48.303" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5800" PostTypeId="1" CreationDate="2018-02-24T16:03:54.023" Score="4" ViewCount="194" Body="&lt;p&gt;I have an Epson HX-20 which has been in storage since I last used it in 2013.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To my surprise the program I wrote back then is still stored in RAM, and by LISTing it (and checking it against the external backup I made), I can verify that it is in place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when I run the program if ever it comes across a GOSUB statement, it stops with error UL (Undefined Line Number).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I LIST the whole program, I can see the line numbers in question. However if I type LIST {line number} I get a blank output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone explain what has probably happened, and what I could do to recover things in place?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am aware that I could type the whole program in again, or try to transfer it from backup - the first being time consuming and the second risky as if anything goes wrong I will delete the program anyway. I'm really more interested in understanding what has happened that simply restoring the program.&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="8072" LastEditDate="2019-02-04T12:05:59.207" LastActivityDate="2019-02-04T14:23:58.310" Title="Unexpected UL error / List problems Epson HX-20" Tags="&lt;data-preservation&gt;&lt;epson&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5801" PostTypeId="2" ParentId="5798" CreationDate="2018-02-24T16:37:32.563" Score="6" Body="&lt;p&gt;There is a Windows program called &lt;a href=&quot;http://www.zx-modules.de/zxeditor/zxeditor.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX-Editor&lt;/a&gt; that runs perfectly well on Debian (via Wine). Simply open the &lt;code&gt;.TAP&lt;/code&gt; file, and save a &lt;code&gt;.BAS&lt;/code&gt; file. It allowed me to extract this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# BAS file &quot;rainbow2&quot; created by ZX-Modules&#xA;&#xA;# Run-time Variables&#xA;&#xA;Var b: Num = 1&#xA;Var ypos: Num = 1&#xA;Var xpos: Num = 21&#xA;&#xA;# End Run-time Variables&#xA;&#xA;  10 REM Rainbowtype 2.0&#xA;  20 BORDER 0&#xA;  30 PAPER 0&#xA;  40 CLS &#xA;  50 LET b=0&#xA;  60 BRIGHT b&#xA;  70 INK 7&#xA; 100 REM Main&#xA; 110 PAUSE 0&#xA; 120 IF INKEY$ = CHR$ 12 THEN GO SUB 500: GO SUB 100&#xA; 130 IF INKEY$ = CHR$ 7 THEN INK 1: GO SUB 100&#xA; 140 IF INKEY$ = CHR$ 6 THEN INK 2: GO SUB 100&#xA; 150 IF INKEY$ = CHR$ 4 THEN INK 3: GO SUB 100&#xA; 160 IF INKEY$ = CHR$ 5 THEN INK 4: GO SUB 100&#xA; 170 IF INKEY$ = CHR$ 8 THEN INK 5: GO SUB 100&#xA; 180 IF INKEY$ = CHR$ 10 THEN INK 6: GO SUB 100&#xA; 190 IF INKEY$ = CHR$ 11 THEN INK 7: GO SUB 100&#xA; 200 IF INKEY$ = CHR$ 9 THEN LET b = NOT b: BRIGHT b: GO SUB 100&#xA; 210 IF INKEY$ = CHR$ 15 THEN CLS : GO SUB 100&#xA; 220 PRINT INKEY$;&#xA; 250 GO SUB 100&#xA; 500 REM Delete&#xA; 510 LET ypos = ( 24 - PEEK 23689)&#xA; 520 LET xpos = ( 32 - PEEK 23688 )&#xA; 530 IF xpos = -1 AND  ypos = 0 THEN RETURN &#xA; 540 IF xpos = -1 THEN LET xpos = 31: LET ypos = ypos -1&#xA; 550 PRINT AT ypos, xpos; &quot; &quot;&#xA; 560 PRINT AT ypos, xpos; &quot;&quot;;&#xA; 600 RETURN &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;del&gt;There are a few bugs, such as the possible replacement of all &lt;code&gt;GO TO&lt;/code&gt;s with &lt;code&gt;GO SUB&lt;/code&gt;s(? unverified), but it seems to work mostly fine.&lt;/del&gt; The program was actually written that way. No bugs to be seen!&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2018-02-25T12:59:13.510" LastActivityDate="2018-02-25T12:59:13.510" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5802" PostTypeId="2" ParentId="5796" CreationDate="2018-02-24T17:08:36.037" Score="3" Body="&lt;p&gt;It's actually NCIS LA, Season 9, Episode 7. And I'm pretty sure it actually is a C64&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://movies.stackexchange.com/questions/82792/does-the-us-really-use-c64-computers-for-the-launch-control-of-their-missiles&quot;&gt;This&lt;/a&gt; question on &lt;em&gt;Movies&amp;amp;TV&lt;/em&gt; has some footage from the series and the computer definitely looks like a C64.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-02-24T17:08:36.037" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5803" PostTypeId="1" AcceptedAnswerId="5807" CreationDate="2018-02-25T01:48:51.263" Score="8" ViewCount="795" Body="&lt;p&gt;Since my &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/5785/8090&quot;&gt;other question&lt;/a&gt; has been answered and has given me a way to do high-precision timing, I've been experimenting with it a bit. The first thing I did was write a simple benchmark using the &lt;code&gt;FRAMES&lt;/code&gt; variable as a time reference. When doing that, I noticed something odd. I wondered if there was any overhead to the &lt;code&gt;REM&lt;/code&gt; statement, which there was (albeit very little). However, I noticed the overhead was smaller if there was no text after the &lt;code&gt;REM&lt;/code&gt;. The line would execute in 0.04 or 0.05 PAL frames if the line was simply &lt;code&gt;REM&lt;/code&gt;, but would take 0.06 PAL frames if the line was &lt;code&gt;REM ANYTHING GOES HERE&lt;/code&gt;. It seems not to matter if the text is one character or a hundred characters. It always takes slightly longer if there is any text. This was completely reproducible all the dozens of times I tried it. Note that I &lt;em&gt;am&lt;/em&gt; currently using an emulator, however it is a &lt;em&gt;cycle-accurate&lt;/em&gt; emulator and so should be identical in behavior to a real Sinclair ZX Spectrum running 128 BASIC. The benchmarking code is below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  10 LET T1=PEEK 23672&#xA;  20 LET T1=PEEK 23673*256+T1&#xA;  30 FOR I=0 TO 100&#xA;  40 GO SUB 130&#xA;  50 NEXT I&#xA;  60 LET T2=PEEK 23672&#xA;  70 LET T2=PEEK 23673*256+T2&#xA;  80 LET TD=T2-T1-67&#xA;  90 IF TD&amp;lt;0 THEN LET TD=0&#xA; 100 PRINT &quot;SECONDS&quot;,&quot;FRAMES&quot;&#xA; 110 PRINT TD/5000,TD/100&#xA; 120 STOP&#xA; 130 REM LINE GOES HERE&#xA; 140 RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What could be causing this behavior? Why would the presence of text in a &lt;code&gt;REM&lt;/code&gt; statement affect the time it takes to execute in any way? I can understand why the overhead is not zero, but not this. My suspicion is that it is related to tokenization. Perhaps the interpreter takes in the token and the rest of the text in separately regardless of whether or not the text is to be interpreted or not. I can't verify this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why does &lt;code&gt;REM&lt;/code&gt; have less overhead than &lt;code&gt;REM FOO&lt;/code&gt; in 128 BASIC?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; I tested this more with different ROMs and BASIC versions, and I've concluded that there must have been a problem with my test. I thought I had already tried this code and reproduced the results, but when I tried again and actually wrote down the results, it seems there is actually no change in the number of frames that pass by when interpreting &lt;code&gt;REM&lt;/code&gt; with and without accompanying text. This makes it seem like the only reason my previous code gave the results it was giving had to do with the time it took &lt;code&gt;GO SUB&lt;/code&gt; to jump to its target, or something along those lines. I used this code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  10 LET T1=PEEK 23672&#xA;  20 LET T1=PEEK 23673*256+T1&#xA;  30 FOR I=0 TO 1000&#xA;  40 REM THIS IS A COMMENT&#xA;  50 NEXT I&#xA;  60 LET T2=PEEK 23672&#xA;  70 LET T2=PEEK 23673*256+T2&#xA;  80 PRINT T2-T1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I ran this on 48K, as well as on 128K with both its 48 BASIC and 128 BASIC interpreters, replacing line &lt;code&gt;40&lt;/code&gt; with both a &lt;code&gt;REM&lt;/code&gt; and even removing it all together. The results of 1000 loops of this test in PAL frames elapsed are recorded below. Clearly, something was wrong with my previous methodology.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&#xA;+---------------------+------------+------------+------------+&#xA;|                     | +REM +text | +REM -text | -REM -text |&#xA;+---------------------+------------+------------+------------+&#xA;| 48  BASIC, ZX48     |    241     |    241     |    221     |&#xA;+---------------------+------------+------------+------------+&#xA;| 48  BASIC, ZX128    |    238     |    238     |    219     |&#xA;+---------------------+------------+------------+------------+&#xA;| 128 BASIC, ZX128    |    372     |    372     |    311     |&#xA;+---------------------+------------+------------+------------+&#xA;| 48  BASIC, Pentagon |    227     |    228     |    209     |&#xA;+---------------------+------------+------------+------------+&#xA;| 128 BASIC, Pentagon |  338-343   |  338-343   |  286-288   |&#xA;+---------------------+------------+------------+------------+&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The results are telling. When not using &lt;code&gt;GO SUB&lt;/code&gt;, there is no overhead incurred by adding any text to &lt;code&gt;REM&lt;/code&gt; (but still some for interpreting the command itself, albeit not much). 48 BASIC is the fastest, though slightly slower on 48K than on 128K running 48 BASIC. 128 BASIC was by far the slowest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will do more tests to try and find out what caused the previous behavior that I misattributed to &lt;code&gt;REM&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8090" LastEditorUserId="8090" LastEditDate="2018-02-27T05:10:17.183" LastActivityDate="2018-02-27T05:10:17.183" Title="ZX BASIC REM statement overhead" Tags="&lt;zx-spectrum&gt;&lt;z80&gt;&lt;basic&gt;&lt;benchmarking&gt;" AnswerCount="2" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5804" PostTypeId="2" ParentId="5803" CreationDate="2018-02-25T02:11:15.070" Score="1" Body="&lt;p&gt;forest, I suggest you select Jules answer instead of mine. It appears my first assumption (below bottom horizontal rule) was correct after all, and he explains why. Let's see if math can shed light on your timing results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1,000,000 usec/second&lt;br&gt;&#xA;÷ 50 frames/second (PAL)&lt;br&gt;&#xA;=20,000 usec/frame&lt;br&gt;&#xA;* .045 frames (empty &lt;code&gt;REM&lt;/code&gt; line)&lt;br&gt;&#xA;= 900 microseconds&lt;/p&gt;&#xA;&#xA;&lt;p&gt;20,000 usec/frame&lt;br&gt;&#xA;* .06 frames (&lt;code&gt;REM&lt;/code&gt; line with additional text)&lt;br&gt;&#xA;= 1200 microseconds&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1200 usec -900 usec = 300 usec (observed difference)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's assume the CPU did execute a jump command. Using my z80 manual, I see that a &lt;code&gt;JP pq&lt;/code&gt; (jump immediate) command on the Spectrum's 3.5 MHz CPU would take approximately 3.33 usec. Even with extra overhead such as the interpreter moving pointers around, that is a heckuva lot less than 300 usec.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Change gears, and assume that the interpreter will skim thru extra text after &lt;code&gt;REM&lt;/code&gt;, which is what Jules and tofru seem to agree is actually happening. One way to do this is with the z80 &lt;code&gt;CPIR&lt;/code&gt; (compare and increment) command. For your CPU this takes 5.33 usec + 2.33 usec per extra byte, plus the likely significant overhead for setting up registers, and doing &quot;interpreter stuff&quot; such as calculating where the next line of BASIC is. The point of this paragraph is to show that varying quantities of text after the &lt;code&gt;REM&lt;/code&gt; will not take very long to skip thru. The overhead in setting up and handling the skip can often be longer than the skip itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know the actual granularity your timing method, but my guess is that the CPU can do a lot of stuff within each grain. Raffzahn has suggested you rerun the test with multiple &lt;code&gt;REM&lt;/code&gt; lines, which will likely help you get a better timing resolution.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;// wrongly corrected answer&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;s&gt;One possibility is that the &lt;code&gt;REM&lt;/code&gt; is normally implemented as some sort of jump. It would then have the same time overhead whether you are jumping past 1 character or 80. However, if no characters followed &lt;code&gt;REM&lt;/code&gt; on the line, then the jump would not be necessary, instead immediately and naturally flowing to the next line.&lt;/s&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;// original answer; probably in the ballpark&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it likely that the interpreter has not been fully optimized. It is simply not smart enough to stop parsing when it reaches the &lt;code&gt;REM&lt;/code&gt; text/token. Think of it this way. How is the interpreter going to find the &lt;code&gt;RETURN&lt;/code&gt; text/token? Very likely it just parses character by character until it gets to it. If the &lt;code&gt;REM&lt;/code&gt; line has text, that text still needs to be parsed, or maybe skimmed thru, to get to &lt;code&gt;RETURN&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A BASIC interpreter could be built using linked lists to each line, but why bother? BASIC optimizers and compilers would get rid of the &lt;code&gt;REM&lt;/code&gt; lines in their entirety.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2018-02-25T14:59:13.117" LastActivityDate="2018-02-25T14:59:13.117" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="5805" PostTypeId="2" ParentId="5798" CreationDate="2018-02-25T03:56:43.020" Score="18" Body="&lt;p&gt;&lt;code&gt;listbasic&lt;/code&gt;, from the &lt;strong&gt;fuse-emulator-utils&lt;/strong&gt; Debian package:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ listbasic rainbow2.tap&#xA;   10 REM Rainbowtype 2.0&#xA;   20 BORDER 0&#xA;   30 PAPER 0&#xA;   40 CLS &#xA;   50 LET b=0&#xA;   60 BRIGHT b&#xA;   70 INK 7&#xA;  100 REM Main&#xA;  110 PAUSE 0&#xA;  120 IF INKEY$ = CHR$ 12 THEN GO SUB 500: GO SUB 100&#xA;  130 IF INKEY$ = CHR$ 7 THEN INK 1: GO SUB 100&#xA;  140 IF INKEY$ = CHR$ 6 THEN INK 2: GO SUB 100&#xA;  150 IF INKEY$ = CHR$ 4 THEN INK 3: GO SUB 100&#xA;  160 IF INKEY$ = CHR$ 5 THEN INK 4: GO SUB 100&#xA;  170 IF INKEY$ = CHR$ 8 THEN INK 5: GO SUB 100&#xA;  180 IF INKEY$ = CHR$ 10 THEN INK 6: GO SUB 100&#xA;  190 IF INKEY$ = CHR$ 11 THEN INK 7: GO SUB 100&#xA;  200 IF INKEY$ = CHR$ 9 THEN LET b = NOT b: BRIGHT b: GO SUB 100&#xA;  210 IF INKEY$ = CHR$ 15 THEN CLS : GO SUB 100&#xA;  220 PRINT INKEY$;&#xA;  250 GO SUB 100&#xA;  500 REM Delete&#xA;  510 LET ypos = ( 24 - PEEK 23689)&#xA;  520 LET xpos = ( 32 - PEEK 23688 )&#xA;  530 IF xpos = -1 AND  ypos = 0 THEN RETURN &#xA;  540 IF xpos = -1 THEN LET xpos = 31: LET ypos = ypos -1&#xA;  550 PRINT AT ypos, xpos; &quot; &quot;&#xA;  560 PRINT AT ypos, xpos; &quot;&quot;;&#xA;  600 RETURN &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-02-25T03:56:43.020" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5806" PostTypeId="2" ParentId="5793" CreationDate="2018-02-25T05:05:25.533" Score="12" Body="&lt;p&gt;The Model 1 was a self contained computer that plugged in to, essentially, a TV set. And that was all well and good, if feature light (16K RAM, Cassette port, limited text and graphics). But it was plug and play.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original version, w/4K and Level 1 BASIC was notorious, for example, for key bounce. You could buy a simple mod to fix it, and it was remedied in the Level 2 BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then came the Expansion Interface. And the EI plugged in via a ribbon cable to the main unit, offered up a printer port and diskette interface, as well as RAM expansion (it may have offered a serial port, but the one we used never used it, so I just don't recall).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ribbon cables from the main device, ribbon cables out to the Disk drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ribbon cables are very good antennas. Plugging antennas in to computer boards just doesn't work well. So, these were a glorious source for adding noise to the system from, just, well, anything near by. There was one example of a computerized toy tank that when it traveled underneath a TRS-80, the tanks CPU noise would crash the TRS-80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Undoubtedly the original TRS-80 was part of the reason the FCC got in to the business of regulating computers. The FCC regulations is a primary reason the Model III replaced the Model I.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the spurious noise just adds uncertainty to the system. Our particular system had no problems with it, and was pretty much rock solid reliable, though we did have some unremembered issues with the disk drives every now and then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But one thing, from a design point of view, that was particularly striking of the TRS-80 was something my father stumbled upon as he was looking to interface hardware to the machine for custom projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 has two pins. A Bus Request pin, and a Bus Acknowledgment pin. Outside electronics send a signal the REQ pin, and the CPU will essentially &quot;finish what it is doing&quot;, go in to a sleep state of sorts, and then trigger the ACK pin to let the requester know it is done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing the TRS-80 had was a series of tri-state buffers, notably, interfacing RAM to the CPU. Without getting too technical, the tri-state buffer lets one set of electronics, roughly, disconnect from other electronics in the same circuit. So, these were a mechanism to isolate the CPU from the RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But on the TRS-80, the tri-state buffers were tied to the Bus REQUEST pin, not the Bus ACK pin. That means, when someone from the outside wants to ask the CPU for the bus, the first thing it does is disconnect the CPU ... from the bus! So, it's very possible that the CPU can't &quot;finish what it's doing&quot;. For example it could be reading a multi-byte op code (like, a JP instruction), and after reading the opcode, the RAM just vanishes before it gets the actual address. The bus request lets the Z80 finish things like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But not on the Model 1. That RAM gets yanked out from underneath it before it can say &quot;Wh...&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Very strange design decision. Naively, you would think they would tie the tri-state toggle to the bus acknowledge pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was the wild west, folks. Don't be amazed at the problems you see, rather be amazed this stuff worked at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that said, we were happy with the TRS-80. When I was getting my own first machine I was debating between a Model III and an Atari 800. I ended up with the Atari. Good friend of mine loved his Model III, however.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-02-25T05:05:25.533" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5807" PostTypeId="2" ParentId="5803" CreationDate="2018-02-25T10:38:09.440" Score="12" Body="&lt;p&gt;I just dug out a copy of The Complete Spectrum ROM Disassembly in order to see what's actually going on.  The answer is a bit more complex than you'd expect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main interpreter loop is implemented as a three stage process:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First, the line starting from the current execution point is scanned for either &lt;code&gt;:&lt;/code&gt; or a newline. The first byte, which contains the token for the statement, is looked up in a table of statements which controls the next stages&lt;/li&gt;&#xA;&lt;li&gt;Then, parameter parsing takes place, which is selected by a list of parameter classes&lt;/li&gt;&#xA;&lt;li&gt;Once parameters are parsed, the execution routine for the command is jumped to.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In the case of &lt;code&gt;REM&lt;/code&gt; the parameter class 5 is used, which is for a list of operands of varying kinds and therefore defers processing to the command implementation itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The REM statement's implementation is, as you'd expect, to do nothing: it pops its parameter off the stack and then falls directly through into the code to work out what the next action to take is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This analysis (which is basically a confirmation of @RichF's original assumption) suggests that you &lt;em&gt;should&lt;/em&gt; see a linear increase in execution based on the length of the statement, not a jump on whether there's any text at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But: the overhead for each statement executed is &lt;em&gt;much&lt;/em&gt; higher than the overhead for processing the line to find the end of the statement.  I therefore suspect that the actual result is being lost by some secondary effect that isn't actually related to the efficiency of the translation.  Perhaps a memory access issue (maybe something gets moved in or out of contended memory due to the different sizes of the program), or maybe the efficiency of the implementation of GOSUB might be the issue; I didn't really research that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some suggestions for further experiments:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Try a program with 10 REM statements before the RETURN rather than just one, which should reduce the overhead of the GOSUB in relation to the REM&lt;/li&gt;&#xA;&lt;li&gt;Try embedding this test in a larger program in order to see if the length of the program itself is a factor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="547" LastEditorUserId="637" LastEditDate="2018-02-25T13:02:38.127" LastActivityDate="2018-02-25T13:02:38.127" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5808" PostTypeId="2" ParentId="5772" CreationDate="2018-02-25T12:53:26.253" Score="1" Body="&lt;p&gt;Raffzahn's answer is excellent and deserves to be the accepted answer but I would like to add another viewpoint.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It only appears to be impossible for the program to get to line 30 because of an implicit expectation that INKEY$ will return the same value on successive calls.  However, if this was the case then one of line 10 or 20 by itself would block.  Understanding why that is not the case requires a realisation that successive calls to INKEY$ might return different values.  Once this is understood, the apparent impossibility should evaporate.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some languages, a declaration of a function allows the specification of &quot;deterministic&quot; or &quot;non-deterministic&quot;.  When I first saw this, my reaction was: &quot;Of course it is deterministic, it's a computer program&quot;.  However, both cases are possible.  A sensibly implemented sqrt or log function will be deterministic.  You would not expect multiple calls to sqrt(2) to return different values.  However, you should not be surprised if time() or rand() return different values.  INKEY$ is of the latter type: non-deterministic.  &lt;/p&gt;&#xA;" OwnerUserId="7805" LastActivityDate="2018-02-25T12:53:26.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5809" PostTypeId="1" AcceptedAnswerId="5810" CreationDate="2018-02-25T16:58:04.783" Score="19" ViewCount="4557" Body="&lt;p&gt;What video connections were common on European TVs and monitors during the &quot;retro&quot; era?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the USA, first there were none on TVs (RF screw terminals only) and monitors had composite (yellow RCA, CVBS) or nonstandard connectors specific to the computers they were made for. Later came MDA/CGA (DB-9, digital RGBI) to monitors, and S-Video (4-pin mini-DIN, Y/C) and Component Video (red, green, and blue RCA, YPrPb) to TVs, and eventually some TVs came with VGA (HD-15, RGBHV) carried over from computer monitors. SCART (RGBS, CVBS, Y/C w/ audio) was practically non-existent in the USA, although I think my family once had a Sony TV/monitor with a SCART input, but we never had anything that would connect to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm under the impression that SCART was much more common in Europe than S-Video or Component. Is that true, and were the U.K. and France different from the rest of Europe? Were the standard connection types different between TVs and computer monitors?&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-02-25T18:04:29.760" LastActivityDate="2019-08-18T19:22:16.883" Title="What video connections were common in Europe?" Tags="&lt;video&gt;&lt;vga&gt;&lt;s-video&gt;&lt;scart&gt;&lt;cga&gt;" AnswerCount="7" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5810" PostTypeId="2" ParentId="5809" CreationDate="2018-02-25T17:18:49.600" Score="16" Body="&lt;p&gt;Before SCART, European TVs often had not video input at all or S-Video on 6-pin or 8-pin DIN sockets (not Mini-DIN). Cinch composite was uncommon until VCRs came out. After that the old S-Video connectors died out and it was most common for cheap TV sets to have only an antenna and one composite in, better TV sets had a SCART input very early. Component video was very uncommon, as the SCART standard preferred RGB on these pins. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know about any European CRT TV which came with CGA/MDA/EGA/VGA inputs. &lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2018-02-25T17:18:49.600" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="5811" PostTypeId="2" ParentId="5809" CreationDate="2018-02-25T17:43:17.080" Score="21" Body="&lt;p&gt;In the UK in the 1980s and the early 1990s, no video input at all was common.  Early video recorders and set top boxes (for the new digital channels) would use RF out.  You would disconnect the aerial from the TV, connect it to the VCR or STB, and connect the VCR or STB to the TV with another aerial cable.  The TV would see it as an extra channel.  You might even daisy chain an STB and a VCR.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When SCART started to appear, we thought that it was great as the quality was rather better than the previous system.  I used to have a SCART switch which took three inputs STB, VCR, and XBOX since my TV at the time had only one SCART socket.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that some high end TVs had other options but they were not common.  The only other that I remember seeing is three RCA sockets (red, white, and yellow) which were often at the front or side and probably intended for connecting a camera.  &lt;/p&gt;&#xA;" OwnerUserId="7805" LastActivityDate="2018-02-25T17:43:17.080" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5812" PostTypeId="2" ParentId="5809" CreationDate="2018-02-25T19:59:19.580" Score="20" Body="&lt;p&gt;&lt;strong&gt;Up until ~1980&lt;/strong&gt; the only connectors TV sets had were &lt;a href=&quot;https://en.wikipedia.org/wiki/Belling-Lee_connector&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Belling-Lee&lt;/strong&gt;&lt;/a&gt; type antenna in. So most VCR and next to all home computers did use RF modulated output toward the TV set (*1). This included even cable networks. While &lt;a href=&quot;https://en.wikipedia.org/wiki/F_connector&quot; rel=&quot;noreferrer&quot;&gt;Type F&lt;/a&gt; connectors where used for more sophisticated equipment, households were still fitted with Belling-Lee. Professional equipment of the same time did use &lt;a href=&quot;https://en.wikipedia.org/wiki/BNC_connector&quot; rel=&quot;noreferrer&quot;&gt;BNC type&lt;/a&gt; connectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/RCA_connector&quot; rel=&quot;noreferrer&quot;&gt;RCA&lt;/a&gt; (Cinch), DIN or &lt;a href=&quot;https://de.wikipedia.org/wiki/Tuchelstecker&quot; rel=&quot;noreferrer&quot;&gt;Tuchel&lt;/a&gt; connectors were, at that time, only used for audio. Especially RCA was rather rare in Europe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Around 1977&lt;/strong&gt;-81 several TV manufacturers did come up with proprietary connectors, often based on DIN 41524 connectors (the large ones). They all vanished in the &lt;strong&gt;early 1980s&lt;/strong&gt; in favour of &lt;a href=&quot;https://en.wikipedia.org/wiki/SCART&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;SCART&lt;/strong&gt;&lt;/a&gt;, which was a quite nifty standard putting composite, component and RGB plus sound into a single connector. First of course at the higher priced models, but soon across all available TVs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were cheap imported VCRs offering only RF modulated and Cinch-component output (*2), thus Cinch to SCART cables became somewhat common. Similar Cinch inputs were only available on cheap imports - in addition to SCART.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SCART was the base connector for all TV sets until about 10 years ago (&lt;strong&gt;~2010&lt;/strong&gt;), since then being replaced slowly by &lt;a href=&quot;https://en.wikipedia.org/wiki/HDMI&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;HDMI&lt;/strong&gt;&lt;/a&gt; as main connector, but many sets still got &lt;em&gt;at least&lt;/em&gt; one SCART input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;During the 1990s&lt;/strong&gt; some sets included &lt;a href=&quot;https://en.wikipedia.org/wiki/S-Video&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;S-Video&lt;/strong&gt;&lt;/a&gt; and VGA input. But that was more of a marketing issue, as SCART already featured all relevant signals to cover anything Composite/RGB/S-Video, so all needed was the right cabling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With SCART the connection of home computers was a no-brainer. No matter if it was a C64, Atari ST or an Amiga, there were SCART cables for all of them.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - 1979, I got an Apple II; I had to add an RF modulator, so I could use an old B&amp;amp;W TV. It wasn't until two years later when I did finally spend the money to get a 'real' monitor. Half the size, but able to do 80 columns :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - usually Japanese and Korean manufactured devices. It's safe to assume that they where mainly designed for the US/Japanese market.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2018-02-26T18:34:33.420" LastActivityDate="2018-02-26T18:34:33.420" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5813" PostTypeId="1" AcceptedAnswerId="5817" CreationDate="2018-02-25T23:50:50.610" Score="1" ViewCount="608" Body="&lt;p&gt;How widely was MS-DOS used?  Was it globally, or just in some specific places?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there any regional substitutes used more commonly, and if so, what were they?&lt;/p&gt;&#xA;" OwnerUserId="8103" LastEditorUserId="621" LastEditDate="2018-02-25T23:54:54.903" LastActivityDate="2018-02-26T07:11:44.427" Title="Where was MS-DOS used?" Tags="&lt;history&gt;&lt;ms-dos&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2018-02-26T09:40:22.220" ContentLicense="CC BY-SA 3.0" />
  <row Id="5814" PostTypeId="1" CreationDate="2018-02-26T03:21:19.207" Score="3" ViewCount="367" Body="&lt;p&gt;One answer is &lt;strong&gt;yes&lt;/strong&gt;; I personally remember seeing it for sale at a Radio Shack store in Texas or California. In fact, I almost bought one. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Jupiter_Ace&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jupiter Ace&lt;/a&gt; was a British computer with the Forth language in ROM. It was developed by &lt;a href=&quot;https://en.wikipedia.org/wiki/Jupiter_Cantab&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jupiter Contab&lt;/a&gt; and marketed beginning in 1982. The Jupiter Ace 4000 was a model for the American market, but the only difference seems to be a slightly more robust plastic case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It did not sell well, and only 800 Ace 4000s were ever made (5000 of the original British version were built). One reason for this is that it had only 1 kbyte of user RAM. There was separate RAM for video. (I know Forth is space-efficient, but only 1000 bytes to do anything?!) Memory could be expanded, which would double the price of the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to my &quot;yes&quot;. I saw it at Radio Shack.  However I can find no evidence that Radio Shack ever marketed it, though. So perhaps I happened upon a store which chose to buy some and sell them on its own.  The official American distributor was:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computer Distribution Associates&lt;br&gt;&#xA;Jupiter* Computer Division&lt;br&gt;&#xA;56 South 3rd Street&lt;br&gt;&#xA;Oxford, Pennsylvania, 19363, USA&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That information came from the &lt;em&gt;Jupiter Ace 4000 Forth Programming Manual&lt;/em&gt; by Steve Vickers. A &lt;a href=&quot;http://k1.spdns.de/Vintage/Sinclair/80/Jupiter%20Ace/Manual/Jupiter%20Ace%204000%20Forth%20Programming.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDF file&lt;/a&gt; for the book is available on the web.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't actually remember where I saw it.  But I can do some deduction. According to the Wikipedia, the Ace 4000 began being distributed in 1983. From 1982 to 1985 I attended college at Abilene Christian University in Abilene, Texas. During that time I lived in both Abilene and Midland. So it is extremely likely I saw it at a Radio Shack in one of those two cities. After being graduated (Dec.85) I moved to San Rafael, CA, so there is a minor possibility it was a store in or near there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know if Tandy Radio Shack ever officially marketed these computers?&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2018-02-27T01:51:47.190" LastActivityDate="2018-03-30T22:50:47.277" Title="Was the Jupiter Ace computer ever sold by Radio Shack in the USA?" Tags="&lt;forth&gt;&lt;jupiter-ace&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5815" PostTypeId="5" CreationDate="2018-02-26T03:39:22.670" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2018-02-26T03:39:22.670" LastActivityDate="2018-02-26T03:39:22.670" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5816" PostTypeId="4" CreationDate="2018-02-26T03:39:22.670" Score="0" Body="The Jupiter Ace and Jupiter Ace 4000 were computers developed in the UK and sold in the early 1980s. They were based on the z80 CPU and had the FORTH language in ROM." OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2018-02-26T09:39:54.753" LastActivityDate="2018-02-26T09:39:54.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5817" PostTypeId="2" ParentId="5813" CreationDate="2018-02-26T07:11:44.427" Score="3" Body="&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5813/where-was-ms-dos-used#comment14183_5813&quot;&gt;mentioned&lt;/a&gt; by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4147/tommy&quot;&gt;Tommy&lt;/a&gt;, MS-DOS (or PC-DOS on IBM computers) was the default operating system for x86 PCs from 1981 to 1995 (and still widely used for a few years after that). Early versions were also adapted by OEMs to run on hardware which wasn’t quite IBM-compatible. As such, it was used pretty much everywhere PCs were used, whether it supported the local customs or not — many users around the world made do with an English-based computing environment, even if English wasn’t their native language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-DOS itself ended up supporting a variety of localisations natively, but some markets had their own versions — examples include Arabic, Hebrew, Japanese (with the &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS/V&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOS/V&lt;/a&gt; effort), and Russian. The Japanese market in particular was quite different from the US-based DOS market, with a different “standard” for computers (&lt;a href=&quot;https://en.wikipedia.org/wiki/PC-98&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-98&lt;/a&gt;) and specific software.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-02-26T07:11:44.427" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5818" PostTypeId="2" ParentId="5798" CreationDate="2018-02-26T07:15:44.307" Score="2" Body="&lt;p&gt;well some time ago I coded Win32 utility to convert &lt;strong&gt;MDOS 3.0&lt;/strong&gt; &lt;code&gt;*.P&lt;/code&gt; files (which are the same as &lt;strong&gt;BASIC&lt;/strong&gt; tap files) into text. You need the keyword/command table for that. Here is the &lt;strong&gt;VCL/C++&lt;/strong&gt; code extracted from the tool of mine:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// all ZX ASCII codes from 165 to 255 are BASIC commands&#xA;const AnsiString zx_table[91]=&#xA;    {&#xA;    &quot; RND &quot;,&quot; INKEY$ &quot;,&quot; PI &quot;,&quot; FN &quot;,&quot; POINT &quot;,&quot; SCREEN$ &quot;,&quot; ATTR &quot;,&quot; AT &quot;,&quot; TAB &quot;,&quot; VAL$ &quot;,&quot; CODE &quot;,&quot; VAL &quot;,&quot; LEN &quot;,&quot; SIN &quot;,&quot; COS &quot;,&quot; TAN &quot;,&quot; ASN &quot;,&quot; ACS &quot;,&#xA;    &quot; ATN &quot;,&quot; LN &quot;,&quot; EXP &quot;,&quot; INT &quot;,&quot; SOR &quot;,&quot; SGN &quot;,&quot; ABS &quot;,&quot; PEEK &quot;,&quot; IN &quot;,&quot; USR &quot;,&quot; STR$ &quot;,&quot; CHR$ &quot;,&quot; NOT &quot;,&quot; BIN &quot;,&quot; OR &quot;,&quot; AND &quot;,&quot; &amp;lt;=&quot;,&quot; &amp;gt;=&quot;,&quot; &amp;lt;&amp;gt;&quot;,&quot; LINE &quot;,&#xA;    &quot; THEN &quot;,&quot; TO &quot;,&quot; STEP &quot;,&quot; DEF &quot;,&quot; CAT &quot;,&quot; FORMAT &quot;,&quot; MOVE &quot;,&quot; ERASE &quot;,&quot; OPEN# &quot;,&quot; CLOSE# &quot;,&quot; MERGE &quot;,&quot; VERIFY &quot;,&quot; BEEP &quot;,&quot; CIRCLE &quot;,&quot; INK &quot;,&quot; PAPER &quot;,&#xA;    &quot; FLASH &quot;,&quot; BRIGHT &quot;,&quot; INVERSE &quot;,&quot; OVER &quot;,&quot; OUT &quot;,&quot; LPRINT &quot;,&quot; LLIST &quot;,&quot; STOP &quot;,&quot; READ &quot;,&quot; DATA &quot;,&quot; RESTORE &quot;,&quot; NEW &quot;,&quot; BORDER &quot;,&quot; CONTINUE &quot;,&quot; DIM &quot;,&#xA;    &quot; REM &quot;,&quot; FOR &quot;,&quot; GOTO &quot;,&quot; GOSUB &quot;,&quot; INPUT &quot;,&quot; LOAD &quot;,&quot; LIST &quot;,&quot; LET &quot;,&quot; PAUSE &quot;,&quot; NEXT &quot;,&quot; POKE &quot;,&quot; PRINT &quot;,&quot; PLOT &quot;,&quot; RUN &quot;,&quot; SAVE &quot;,&quot; RANDOMIZE &quot;,&#xA;    &quot; IF &quot;,&quot; CLS &quot;,&quot; DRAW &quot;,&quot; CLEAR &quot;,&quot; RETURN &quot;,&quot; COPY &quot;&#xA;    };&#xA;&#xA;&#xA;void editor::loadzxbas(AnsiString file)&#xA;    {&#xA;    txt=&quot;&quot;;&#xA;    win_adr=1;&#xA;    win_x0=0;&#xA;    win_y0=0;&#xA;    sbys=0;&#xA;    _redraw=true;       &#xA;    _change=false;&#xA;&#xA;    int hnd,siz;&#xA;    BYTE *dat;&#xA;    hnd=FileOpen(file,fmOpenRead);&#xA;    if (hnd&amp;lt;0) return;&#xA;    siz=FileSeek(hnd,0,2);&#xA;        FileSeek(hnd,0,0);&#xA;    dat=new char[siz];&#xA;    if (dat==NULL) { FileClose(hnd); return; }&#xA;    siz=FileRead(hnd,dat,siz);&#xA;    FileClose(hnd);&#xA;&#xA;    int i,l,a,_a,linenum;&#xA;    AnsiString s;&#xA;    DWORD a0,a1,a2,a3,a4;&#xA;    for (hnd=0;hnd&amp;lt;siz;)    // copy and count lines&#xA;        {&#xA;        if (hnd&amp;gt;=siz) break;    // line number&#xA;        a0=dat[hnd]; hnd++;&#xA;        if (hnd&amp;gt;=siz) break;&#xA;        a1=dat[hnd]; hnd++;&#xA;        linenum=(a1+(a0&amp;lt;&amp;lt;8));&#xA;        if (linenum&amp;lt;10000) txt+=&quot; &quot;;&#xA;        if (linenum&amp;lt; 1000) txt+=&quot; &quot;;&#xA;        if (linenum&amp;lt;  100) txt+=&quot; &quot;;&#xA;        if (linenum&amp;lt;   10) txt+=&quot; &quot;;&#xA;        txt+=linenum;&#xA;        txt+=&quot; &quot;;&#xA;        if (hnd&amp;gt;=siz) break;    // line length&#xA;        a0=dat[hnd]; hnd++;&#xA;        if (hnd&amp;gt;=siz) break;&#xA;        a1=dat[hnd]; hnd++;&#xA;        l=(a0+(a1&amp;lt;&amp;lt;8));&#xA;        for (s=&quot;&quot;,i=0;i&amp;lt;l;i++)  // load line&#xA;            {&#xA;            if (hnd&amp;gt;=siz) break;&#xA;            a=dat[hnd]; hnd++;&#xA;            s+=char(a);&#xA;            }&#xA;        l=i;&#xA;        if (linenum&amp;lt;=9999)          // BASIC lines&#xA;         for (a=0,i=1;i&amp;lt;=l;)&#xA;            {&#xA;            _a=a;&#xA;            a=BYTE(s[i]); i++;&#xA;            if (a&amp;gt;=165)  txt+=zx_table[a-165];&#xA;            else if (a&amp;gt;=32) txt+=char(a);&#xA;            if (a==14)  // number&#xA;                {&#xA;                if (i+5&amp;gt;l) break;&#xA;                a0=BYTE(s[i]); i++;&#xA;                a1=BYTE(s[i]); i++;&#xA;                a2=BYTE(s[i]); i++;&#xA;                a3=BYTE(s[i]); i++;&#xA;                a4=BYTE(s[i]); i++;&#xA;                if ((_a&amp;lt;'0')||(_a&amp;gt;'9'))&#xA;                    {&#xA;                    if (a0==0)  // int&#xA;                        {&#xA;                        int x;&#xA;                        x=a2+(a3&amp;lt;&amp;lt;8);&#xA;                        if (a1) x=-x;&#xA;                        txt+=x;&#xA;                        }&#xA;                    else{       // float&#xA;                        txt+=&quot;/float/&quot;;&#xA;                        }&#xA;                    }&#xA;                }&#xA;            }&#xA;        else{                   // Data area&#xA;            int x=0,n=8;&#xA;            AnsiString t;&#xA;            for (i=1;i&amp;lt;=l;)&#xA;                {&#xA;                a=BYTE(s[i]); i++;&#xA;                if (x) txt+=&quot;,&quot;;&#xA;                else { if (i&amp;gt;2) txt+=&quot;      &quot;; txt+=&quot; db &quot;; t=&quot; // &quot;; }&#xA;                if (a&amp;lt;16) txt+=&quot;0&quot;;&#xA;                txt+=AnsiString().sprintf(&quot;%X&quot;,BYTE(a));  x++;&#xA;                if ((a&amp;lt;32)||(a&amp;gt;164)) t+=&quot;.&quot;; else t+=char(BYTE(a));&#xA;                if (x&amp;gt;=n) { txt+=t+&quot;\n&quot;; x=0; sbys++; }&#xA;                }&#xA;            if (x)&#xA;                {&#xA;                for (;x&amp;lt;n;x++) txt+=&quot;   &quot;;&#xA;                txt+=t+&quot;\n&quot;; x=0; sbys++;&#xA;                }&#xA;            }&#xA;&#xA;        txt+=&quot;\n&quot;; sbys++;&#xA;        }&#xA;    delete dat;&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;editor::txt&lt;/code&gt; is &lt;code&gt;AnsiString&lt;/code&gt; containing your decoded text. You can ignore the &lt;code&gt;_redraw,_change&lt;/code&gt; bools they are just for proper redraw and save of teh editor class. There are 2 things going on.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;ASCII codes above 164&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;are the &lt;strong&gt;BASIC&lt;/strong&gt; keywords/commands so you need to swap them with the string from the &lt;code&gt;zx_table[]&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;numbers&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;ASCII&lt;/strong&gt; code &lt;code&gt;14&lt;/code&gt; marks number and needs to be properly decoded to string.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;AnsiString&lt;/code&gt; is a &lt;strong&gt;VCL&lt;/strong&gt; string variable type indexed from &lt;code&gt;1&lt;/code&gt;. With all this you should have all you need to code/port this on your own to Linux ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;btw the tool of mine recognize x86 asm, Z80 asm and BASIC files with syntax highlight. Here a META thread related to its syntax highlight:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://meta.stackoverflow.com/q/348110/2521214&quot;&gt;missing syntax-highlighting for x86 assembly&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And here non class code with syntax highlight tables (from another tool of mine):&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//---------------------------------------------------------------------------&#xA;//--- syntax ver: 1.02 ------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;#include &quot;font_DG89.h&quot;&#xA;//---------------------------------------------------------------------------&#xA;const _editor_syntax syntax_Z80_asm=&#xA;    {&#xA;    // keywords&#xA;    { &quot;ADC&quot;,&quot;ADD&quot;,&quot;AND&quot;,&quot;BIT&quot;,&quot;CALL&quot;,&quot;CCF&quot;,&quot;CP&quot;,&quot;CPD&quot;,&quot;CPDR&quot;,&quot;CPI&quot;,&quot;CPIR&quot;,&quot;CPL&quot;,&quot;DAA&quot;,&#xA;    &quot;DEC&quot;,&quot;DI&quot;,&quot;DJNZ&quot;,&quot;EI&quot;,&quot;EX&quot;,&quot;EXX&quot;,&quot;HALT&quot;,&quot;IM0&quot;,&quot;IM1&quot;,&quot;IM2&quot;,&quot;IN&quot;,&quot;INC&quot;,&quot;IND&quot;,&quot;INDR&quot;,&#xA;    &quot;INI&quot;,&quot;INIR&quot;,&quot;JP&quot;,&quot;JR&quot;,&quot;LD&quot;,&quot;LDD&quot;,&quot;LDDR&quot;,&quot;LDI&quot;,&quot;LDIR&quot;,&quot;neg&quot;,&quot;NOP&quot;,&quot;OR&quot;,&quot;OTDR&quot;,&quot;OTIR&quot;,&#xA;    &quot;OUT&quot;,&quot;OUTD&quot;,&quot;OUTI&quot;,&quot;POP&quot;,&quot;PUSH&quot;,&quot;RES&quot;,&quot;ret&quot;,&quot;RETI&quot;,&quot;RETN&quot;,&quot;RL&quot;,&quot;RLA&quot;,&quot;RLC&quot;,&quot;RLCA&quot;,&#xA;    &quot;RLD&quot;,&quot;RR&quot;,&quot;RRA&quot;,&quot;RRA&quot;,&quot;RRC&quot;,&quot;RRCA&quot;,&quot;RRD&quot;,&quot;RST&quot;,&quot;SBC&quot;,&quot;SCF&quot;,&quot;SET&quot;,&quot;SLA&quot;,&quot;SLL&quot;,&quot;SRA&quot;,&#xA;    &quot;SRL&quot;,&quot;SUB&quot;,&quot;XOR&quot;,&#xA;    &quot;adc&quot;,&quot;add&quot;,&quot;and&quot;,&quot;bit&quot;,&quot;call&quot;,&quot;ccf&quot;,&quot;cp&quot;,&quot;cpd&quot;,&quot;cpdr&quot;,&quot;cpi&quot;,&quot;cpir&quot;,&quot;cpl&quot;,&quot;daa&quot;,&#xA;    &quot;dec&quot;,&quot;di&quot;,&quot;djnz&quot;,&quot;ei&quot;,&quot;ex&quot;,&quot;exx&quot;,&quot;halt&quot;,&quot;im0&quot;,&quot;im1&quot;,&quot;im2&quot;,&quot;in&quot;,&quot;inc&quot;,&quot;ind&quot;,&quot;indr&quot;,&#xA;    &quot;ini&quot;,&quot;inir&quot;,&quot;jp&quot;,&quot;jr&quot;,&quot;ld&quot;,&quot;ldd&quot;,&quot;lddr&quot;,&quot;ldi&quot;,&quot;ldir&quot;,&quot;neg&quot;,&quot;nop&quot;,&quot;or&quot;,&quot;otdr&quot;,&quot;otir&quot;,&#xA;    &quot;out&quot;,&quot;outd&quot;,&quot;outi&quot;,&quot;pop&quot;,&quot;push&quot;,&quot;res&quot;,&quot;ret&quot;,&quot;reti&quot;,&quot;retn&quot;,&quot;rl&quot;,&quot;rla&quot;,&quot;rlc&quot;,&quot;rlca&quot;,&#xA;    &quot;rld&quot;,&quot;rr&quot;,&quot;rra&quot;,&quot;rra&quot;,&quot;rrc&quot;,&quot;rrca&quot;,&quot;rrd&quot;,&quot;rst&quot;,&quot;sbc&quot;,&quot;scf&quot;,&quot;set&quot;,&quot;sla&quot;,&quot;sll&quot;,&quot;sra&quot;,&#xA;    &quot;srl&quot;,&quot;sub&quot;,&quot;xor&quot;,&quot;&quot;&#xA;    },&#xA;    // brackets&#xA;    { &quot;(&quot;,&quot;)&quot;,&quot;[&quot;,&quot;]&quot;,&quot;{&quot;,&quot;}&quot;,&quot;PUSH&quot;,&quot;POP&quot;,&quot;push&quot;,&quot;pop&quot;,&quot;&quot; },&#xA;    // operators&#xA;    { &quot;+&quot;,&quot;-&quot;,&quot;*&quot;,&quot;/&quot;,&quot;%&quot;,&quot;&amp;amp;&quot;,&quot;|&quot;,&quot;^&quot;,&quot;!&quot;,&quot;:&quot;,&quot;,&quot;,&quot;&quot; },&#xA;    // remblck&#xA;    { &quot;&quot; },&#xA;    // remline&#xA;    { &quot;rem&quot;,&quot;REM&quot; },&#xA;    // preproc&#xA;    { &quot;&quot; },&#xA;    // wordspc&#xA;    { &quot;&quot; },&#xA;    };&#xA;//---------------------------------------------------------------------------&#xA;const _editor_syntax syntax_Z80_bas=&#xA;    {&#xA;    // keywords&#xA;    { &quot;RND&quot;,&quot;INKEY$&quot;,&quot;PI&quot;,&quot;FN&quot;,&quot;POINT&quot;,&quot;SCREEN$&quot;,&quot;ATTR&quot;,&quot;AT&quot;,&quot;TAB&quot;,&quot;VAL$&quot;,&quot;CODE&quot;,&quot;VAL&quot;,&quot;LEN&quot;,&quot;SIN&quot;,&quot;COS&quot;,&quot;TAN&quot;,&quot;ASN&quot;,&quot;ACS&quot;,&#xA;    &quot;ATN&quot;,&quot;LN&quot;,&quot;EXP&quot;,&quot;INT&quot;,&quot;SOR&quot;,&quot;SGN&quot;,&quot;ABS&quot;,&quot;PEEK&quot;,&quot;IN&quot;,&quot;USR&quot;,&quot;STR$&quot;,&quot;CHR$&quot;,&quot;NOT&quot;,&quot;BIN&quot;,&quot;OR&quot;,&quot;AND&quot;,&quot;&amp;lt;=&quot;,&quot;&amp;gt;=&quot;,&quot;&amp;lt;&amp;gt;&quot;,&quot;LINE&quot;,&#xA;    &quot;THEN&quot;,&quot;TO&quot;,&quot;STEP&quot;,&quot;DEF&quot;,&quot;CAT&quot;,&quot;FORMAT&quot;,&quot;MOVE&quot;,&quot;ERASE&quot;,&quot;OPEN#&quot;,&quot;CLOSE#&quot;,&quot;MERGE&quot;,&quot;VERIFY&quot;,&quot;BEEP&quot;,&quot;CIRCLE&quot;,&quot;INK&quot;,&quot;PAPER&quot;,&#xA;    &quot;FLASH&quot;,&quot;BRIGHT&quot;,&quot;INVERSE&quot;,&quot;OVER&quot;,&quot;OUT&quot;,&quot;LPRINT&quot;,&quot;LLIST&quot;,&quot;STOP&quot;,&quot;READ&quot;,&quot;DATA&quot;,&quot;RESTORE&quot;,&quot;NEW&quot;,&quot;BORDER&quot;,&quot;CONTINUE&quot;,&quot;DIM&quot;,&#xA;    &quot;REM&quot;,&quot;FOR&quot;,&quot;GOTO&quot;,&quot;GOSUB&quot;,&quot;INPUT&quot;,&quot;LOAD&quot;,&quot;LIST&quot;,&quot;LET&quot;,&quot;PAUSE&quot;,&quot;NEXT&quot;,&quot;POKE&quot;,&quot;PRINT&quot;,&quot;PLOT&quot;,&quot;RUN&quot;,&quot;SAVE&quot;,&quot;RANDOMIZE&quot;,&#xA;    &quot;IF&quot;,&quot;CLS&quot;,&quot;DRAW&quot;,&quot;CLEAR&quot;,&quot;RETURN&quot;,&quot;COPY&quot;,&#xA;/*&#xA;    &quot;rnd&quot;,&quot;inkey$&quot;,&quot;pi&quot;,&quot;fn&quot;,&quot;point&quot;,&quot;screen$&quot;,&quot;attr&quot;,&quot;at&quot;,&quot;tab&quot;,&quot;val$&quot;,&quot;code&quot;,&quot;val&quot;,&quot;len&quot;,&quot;sin&quot;,&quot;cos&quot;,&quot;tan&quot;,&quot;asn&quot;,&quot;acs&quot;,&#xA;    &quot;atn&quot;,&quot;ln&quot;,&quot;exp&quot;,&quot;int&quot;,&quot;sor&quot;,&quot;sgn&quot;,&quot;abs&quot;,&quot;peek&quot;,&quot;in&quot;,&quot;usr&quot;,&quot;str$&quot;,&quot;chr$&quot;,&quot;not&quot;,&quot;bin&quot;,&quot;or&quot;,&quot;and&quot;,&quot;&amp;lt;=&quot;,&quot;&amp;gt;=&quot;,&quot;&amp;lt;&amp;gt;&quot;,&quot;line&quot;,&#xA;    &quot;then&quot;,&quot;to&quot;,&quot;step&quot;,&quot;def&quot;,&quot;cat&quot;,&quot;format&quot;,&quot;move&quot;,&quot;erase&quot;,&quot;open#&quot;,&quot;close#&quot;,&quot;merge&quot;,&quot;verify&quot;,&quot;beep&quot;,&quot;circle&quot;,&quot;ink&quot;,&quot;paper&quot;,&#xA;    &quot;flash&quot;,&quot;bright&quot;,&quot;inverse&quot;,&quot;over&quot;,&quot;out&quot;,&quot;lprint&quot;,&quot;llist&quot;,&quot;stop&quot;,&quot;read&quot;,&quot;data&quot;,&quot;restore&quot;,&quot;new&quot;,&quot;border&quot;,&quot;continue&quot;,&quot;dim&quot;,&#xA;    &quot;rem&quot;,&quot;for&quot;,&quot;goto&quot;,&quot;gosub&quot;,&quot;input&quot;,&quot;load&quot;,&quot;list&quot;,&quot;let&quot;,&quot;pause&quot;,&quot;next&quot;,&quot;poke&quot;,&quot;print&quot;,&quot;plot&quot;,&quot;run&quot;,&quot;save&quot;,&quot;randomize&quot;,&#xA;    &quot;if&quot;,&quot;cls&quot;,&quot;draw&quot;,&quot;clear&quot;,&quot;return&quot;,&quot;copy&quot;,&#xA;*/&#xA;    &quot;&quot; },&#xA;    // brackets&#xA;    { &quot;(&quot;,&quot;)&quot;,&quot;[&quot;,&quot;]&quot;,&quot;&quot; },&#xA;    // operators&#xA;    { &quot;+&quot;,&quot;-&quot;,&quot;*&quot;,&quot;/&quot;,&quot;%&quot;,&quot;&amp;amp;&quot;,&quot;|&quot;,&quot;^&quot;,&quot;!&quot;,&quot;&amp;lt;=&quot;,&quot;&amp;gt;=&quot;,&quot;&amp;lt;&amp;gt;&quot;,&quot;=&quot;,&quot;:&quot;,&quot;,&quot;,&quot;;&quot;,&quot;&quot; },&#xA;    // remblck&#xA;    { &quot;&quot; },&#xA;    // remline&#xA;    { &quot;;&quot;,&quot;&quot; },&#xA;    // preproc&#xA;    { &quot;&quot; },&#xA;    // wordspc&#xA;    { &quot;&quot; },&#xA;    };&#xA;//---------------------------------------------------------------------------&#xA;// all ZX ASCII codes from 165 to 255 are BASIC commands&#xA;const AnsiString zx_table[91]=&#xA;    {&#xA;    &quot;RND &quot;,&quot;INKEY$ &quot;,&quot;PI &quot;,&quot;FN &quot;,&quot;POINT &quot;,&quot;SCREEN$ &quot;,&quot;ATTR &quot;,&quot;AT &quot;,&quot;TAB &quot;,&quot;VAL$ &quot;,&quot;CODE &quot;,&quot;VAL &quot;,&quot;LEN &quot;,&quot;SIN &quot;,&quot;COS &quot;,&quot;TAN &quot;,&quot;ASN &quot;,&quot;ACS &quot;,&#xA;    &quot;ATN &quot;,&quot;LN &quot;,&quot;EXP &quot;,&quot;INT &quot;,&quot;SOR &quot;,&quot;SGN &quot;,&quot;ABS &quot;,&quot;PEEK &quot;,&quot;IN &quot;,&quot;USR &quot;,&quot;STR$ &quot;,&quot;CHR$ &quot;,&quot;NOT &quot;,&quot;BIN &quot;,&quot;OR &quot;,&quot;AND &quot;,&quot;&amp;lt;=&quot;,&quot;&amp;gt;=&quot;,&quot;&amp;lt;&amp;gt;&quot;,&quot;LINE &quot;,&#xA;    &quot;THEN &quot;,&quot;TO &quot;,&quot;STEP &quot;,&quot;DEF &quot;,&quot;CAT &quot;,&quot;FORMAT &quot;,&quot;MOVE &quot;,&quot;ERASE &quot;,&quot;OPEN# &quot;,&quot;CLOSE# &quot;,&quot;MERGE &quot;,&quot;VERIFY &quot;,&quot;BEEP &quot;,&quot;CIRCLE &quot;,&quot;INK &quot;,&quot;PAPER &quot;,&#xA;    &quot;FLASH &quot;,&quot;BRIGHT &quot;,&quot;INVERSE &quot;,&quot;OVER &quot;,&quot;OUT &quot;,&quot;LPRINT &quot;,&quot;LLIST &quot;,&quot;STOP &quot;,&quot;READ &quot;,&quot;DATA &quot;,&quot;RESTORE &quot;,&quot;NEW &quot;,&quot;BORDER &quot;,&quot;CONTINUE &quot;,&quot;DIM &quot;,&#xA;    &quot;REM &quot;,&quot;FOR &quot;,&quot;GOTO &quot;,&quot;GOSUB &quot;,&quot;INPUT &quot;,&quot;LOAD &quot;,&quot;LIST &quot;,&quot;LET &quot;,&quot;PAUSE &quot;,&quot;NEXT &quot;,&quot;POKE &quot;,&quot;PRINT &quot;,&quot;PLOT &quot;,&quot;RUN &quot;,&quot;SAVE &quot;,&quot;RANDOMIZE &quot;,&#xA;    &quot;IF &quot;,&quot;CLS &quot;,&quot;DRAW &quot;,&quot;CLEAR &quot;,&quot;RETURN &quot;,&quot;COPY &quot;&#xA;    };&#xA;//---------------------------------------------------------------------------&#xA;void Z80_load_asm(editor &amp;amp;dst,AnsiString file)&#xA;    {&#xA;    dst.load(file);&#xA;    dst.set_font(&amp;amp;font_DG89,1,2);&#xA;    dst.tab=8;&#xA;    dst.syntax    =(_editor_syntax*)&amp;amp;syntax_Z80_asm;&#xA;    dst.syntax_asm=(_editor_syntax*)&amp;amp;syntax_Z80_asm;&#xA;    dst.scann();&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void Z80_load_bas(editor &amp;amp;dst,AnsiString file)&#xA;    {&#xA;    dst.loadtext(&quot;&quot;);&#xA;    int hnd,siz;&#xA;    BYTE *dat;&#xA;    hnd=FileOpen(file,fmOpenRead);&#xA;    if (hnd&amp;lt;0) return;&#xA;    siz=FileSeek(hnd,0,2);&#xA;        FileSeek(hnd,0,0);&#xA;    dat=new char[siz];&#xA;    if (dat==NULL) { FileClose(hnd); return; }&#xA;    siz=FileRead(hnd,dat,siz);&#xA;    FileClose(hnd);&#xA;&#xA;    int i,l,a,_a,linenum;&#xA;    AnsiString s;&#xA;    DWORD a0,a1,a2,a3,a4;&#xA;    for (hnd=0;hnd&amp;lt;siz;)    // copy and count lines&#xA;        {&#xA;        if (hnd&amp;gt;=siz) break;    // line number&#xA;        a0=dat[hnd]; hnd++;&#xA;        if (hnd&amp;gt;=siz) break;&#xA;        a1=dat[hnd]; hnd++;&#xA;        linenum=(a1+(a0&amp;lt;&amp;lt;8));&#xA;        if (linenum&amp;lt;10000) dst.txt+=&quot; &quot;;&#xA;        if (linenum&amp;lt; 1000) dst.txt+=&quot; &quot;;&#xA;        if (linenum&amp;lt;  100) dst.txt+=&quot; &quot;;&#xA;        if (linenum&amp;lt;   10) dst.txt+=&quot; &quot;;&#xA;        dst.txt+=linenum;&#xA;        dst.txt+=&quot; &quot;;&#xA;        if (hnd&amp;gt;=siz) break;    // line length&#xA;        a0=dat[hnd]; hnd++;&#xA;        if (hnd&amp;gt;=siz) break;&#xA;        a1=dat[hnd]; hnd++;&#xA;        l=(a0+(a1&amp;lt;&amp;lt;8));&#xA;        for (s=&quot;&quot;,i=0;i&amp;lt;l;i++)  // load line&#xA;            {&#xA;            if (hnd&amp;gt;=siz) break;&#xA;            a=dat[hnd]; hnd++;&#xA;            s+=char(a);&#xA;            }&#xA;        l=i;&#xA;        if (linenum&amp;lt;=9999)          // BASIC lines&#xA;         for (a=0,i=1;i&amp;lt;=l;)&#xA;            {&#xA;            _a=a;&#xA;            a=BYTE(s[i]); i++;&#xA;            if (a&amp;gt;=165)&#xA;                {&#xA;                if ((dst.txt!=&quot;&quot;)&amp;amp;&amp;amp;(dst.txt[dst.txt.Length()]!=' ')) dst.txt+=&quot; &quot;;&#xA;                dst.txt+=zx_table[a-165];&#xA;                }&#xA;            else if (a&amp;gt;=32) dst.txt+=char(a);&#xA;            if (a==14)  // number&#xA;                {&#xA;                if (i+5&amp;gt;l) break;&#xA;                a0=BYTE(s[i]); i++;&#xA;                a1=BYTE(s[i]); i++;&#xA;                a2=BYTE(s[i]); i++;&#xA;                a3=BYTE(s[i]); i++;&#xA;                a4=BYTE(s[i]); i++;&#xA;                if ((_a&amp;lt;'0')||(_a&amp;gt;'9'))&#xA;                    {&#xA;                    if (a0==0)  // int&#xA;                        {&#xA;                        int x;&#xA;                        x=a2+(a3&amp;lt;&amp;lt;8);&#xA;                        if (a1) x=-x;&#xA;                        dst.txt+=x;&#xA;                        }&#xA;                    else{       // float&#xA;                        dst.txt+=&quot;/float/&quot;;&#xA;                        }&#xA;                    }&#xA;                }&#xA;            }&#xA;        else{                   // Data area&#xA;            int x=0,n=8;&#xA;            AnsiString t;&#xA;            for (i=1;i&amp;lt;=l;)&#xA;                {&#xA;                a=BYTE(s[i]); i++;&#xA;                if (x) dst.txt+=&quot;,&quot;;&#xA;                else { if (i&amp;gt;2) dst.txt+=&quot;      &quot;; dst.txt+=&quot; db &quot;; t=&quot; // &quot;; }&#xA;                if (a&amp;lt;16) dst.txt+=&quot;0&quot;;&#xA;                dst.txt+=AnsiString().sprintf(&quot;0%Xh&quot;,BYTE(a));  x++;&#xA;                if ((a&amp;lt;32)||(a&amp;gt;164)) t+=&quot;.&quot;; else t+=char(BYTE(a));&#xA;                if (x&amp;gt;=n) { dst.txt+=t+dst.endl; x=0; }&#xA;                }&#xA;            if (x)&#xA;                {&#xA;                for (;x&amp;lt;n;x++) dst.txt+=&quot;     &quot;;&#xA;                dst.txt+=t+dst.endl; x=0;&#xA;                }&#xA;            }&#xA;        dst.txt+=dst.endl;&#xA;        }&#xA;    delete dat;&#xA;    dst.set_font(&amp;amp;font_DG89,1,2);&#xA;    dst.syntax    =(_editor_syntax*)&amp;amp;syntax_Z80_bas;&#xA;    dst.syntax_asm=(_editor_syntax*)&amp;amp;syntax_Z80_asm;&#xA;    dst.scann();&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void Z80_load_txt(editor &amp;amp;dst,AnsiString file)&#xA;    {&#xA;    dst.loadtext(&quot;&quot;);&#xA;    int hnd,siz;&#xA;    BYTE *dat;&#xA;    hnd=FileOpen(file,fmOpenRead);&#xA;    if (hnd&amp;lt;0) return;&#xA;    siz=FileSeek(hnd,0,2);&#xA;        FileSeek(hnd,0,0);&#xA;    dat=new char[siz];&#xA;    if (dat==NULL) { FileClose(hnd); return; }&#xA;    siz=FileRead(hnd,dat,siz);&#xA;    FileClose(hnd);&#xA;    int x=0;&#xA;    BYTE a;&#xA;    for (hnd=0;hnd&amp;lt;siz;)    // copy and count lines&#xA;        {&#xA;        BYTE a=dat[hnd]; hnd++;&#xA;&#xA;             if (a==128) a='e';&#xA;        else if (a==130) a='s';&#xA;        else if (a==131) a='c';&#xA;        else if (a==133) a='y';&#xA;        else if (a==134) a='a';&#xA;        else if (a==135) a='i';&#xA;        else if (a==136) a='u';&#xA;        else if (a==137) a='o';&#xA;        else if (a==138) a='o';&#xA;        else if (a==139) a='d';&#xA;        else if (a==143) a='z';&#xA;//      else if (a&amp;gt;127) a=a;&#xA;&#xA;        dst.txt+=char(a);&#xA;        x++; if (x&amp;gt;=64) { dst.txt+=dst.endl; x=0; }&#xA;        }&#xA;    delete dat;&#xA;    dst.set_font(&amp;amp;font_DG89,1,2);&#xA;    dst.syntax    =(_editor_syntax*)NULL;&#xA;    dst.syntax_asm=(_editor_syntax*)NULL;&#xA;    dst.scann();&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void Z80_load(editor &amp;amp;dst,AnsiString file)&#xA;    {&#xA;    AnsiString ext=ExtractFileExt(file).LowerCase();&#xA;    dst.syntax    =(_editor_syntax*)NULL;&#xA;    dst.syntax_asm=(_editor_syntax*)NULL;&#xA;         if (ext==&quot;.asm&quot;) Z80_load_asm(dst,file);&#xA;    else if (ext==&quot;.p&quot;  ) Z80_load_bas(dst,file);&#xA;    else                  Z80_load_txt(dst,file);&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-02-26T07:29:59.313" LastActivityDate="2018-02-26T07:29:59.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5819" PostTypeId="2" ParentId="5809" CreationDate="2018-02-26T10:33:14.983" Score="5" Body="&lt;h2&gt;TVs in Czechoslovakia (mainly TESLA brand)&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Till approximately 1985 TVs had only the antenna input. See&lt;sup&gt;&lt;a href=&quot;http://www.oldradio.cz/tvp.htm&quot; rel=&quot;noreferrer&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;http://elektromuzeum.wz.cz/&quot; rel=&quot;noreferrer&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;later almost all the colour TVs had composite input&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;small devices had &lt;a href=&quot;https://www.elektroda.pl/rtvforum/topic934037.html#4766074&quot; rel=&quot;noreferrer&quot;&gt;DIN-6 connectors&lt;/a&gt; with composite input (used also by Grundig and Sony)&lt;/li&gt;&#xA;&lt;li&gt;large devices had SCART connectors with composite input&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;probably none of the TVs had RGB pins connected&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;it seems that B&amp;amp;W TVs did not have video input except one model from 1989 (TESLA Merkur 2)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It is relatively simple to add video/composite input and sometimes also RGB so it was not uncommon that electro hobbyists added these inputs to TVs.&lt;/p&gt;&#xA;" OwnerUserId="154" LastEditorUserId="154" LastEditDate="2018-02-26T10:38:30.500" LastActivityDate="2018-02-26T10:38:30.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5820" PostTypeId="1" AcceptedAnswerId="6372" CreationDate="2018-02-26T18:39:41.447" Score="1" ViewCount="383" Body="&lt;p&gt;I am trying to find a free software for security, that I downloaded for tracing someone attached to my computer.  I remember using this on my Windows 98 system.  You could see on a map where the connection was coming from and you could search their info on Who Is right from the app.  I would really like to find something comparable for Windows 10.  The app was very user-friendly for a newbie.&lt;/p&gt;&#xA;" OwnerUserId="8106" LastActivityDate="2018-05-02T23:12:28.647" Title="What was the name and origin of this security software?" Tags="&lt;software&gt;&lt;windows-98&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5821" PostTypeId="2" ParentId="5814" CreationDate="2018-02-26T21:14:17.353" Score="3" Body="&lt;p&gt;Mind, I don't know, but honestly, while you certainly may have seen a store selling one, RS never &quot;sold them&quot; at the higher level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If they did, they would have rebranded it. RS sold RS product. From Realistic Stereos to TRS-80 branded computers. The TRS-80 Pocket Computers were SHARP remodels. The Model 100 was from Kyocera in Japan. Archer components, Micronta Meters, Radio Shack calculators (my programmable was a TI, for example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if they did sell it, it would have been a TRS-80 ACE or something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I never saw it for sale, that's for sure.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-02-26T21:14:17.353" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5822" PostTypeId="1" CreationDate="2018-02-27T06:22:57.677" Score="7" ViewCount="409" Body="&lt;p&gt;I have an old GNT-4601 punched tape reader/punch that I'm trying to connect to a modern computer. Using the DTE port and a &lt;a href=&quot;https://tripplite.com/usb-serial-adapter-cable-5-feet~U209005DB25&quot; rel=&quot;noreferrer&quot;&gt;usb-to-serial adapter&lt;/a&gt;, I'm able to send data to the punch but I can't read anything back. Py-serial gives a single &lt;code&gt;b'\x00'&lt;/code&gt; on &lt;code&gt;read&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that I may be using the type of wrong cable. The machine uses RS-232C with a DB-25 connector. Here is the manual with more information: &#xA;&lt;a href=&quot;https://archive.org/stream/bitsavers_gntGNT46012_1858526/GNT_4601_Operators_Manual_Jun82#page/n7/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/stream/bitsavers_gntGNT46012_1858526/GNT_4601_Operators_Manual_Jun82#page/n7/mode/2up&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions on what to try or how to debug the problem?&lt;/p&gt;&#xA;" OwnerUserId="8109" LastActivityDate="2018-03-29T09:42:50.340" Title="Reading data over serial from an old punched tape reader" Tags="&lt;serial&gt;" AnswerCount="1" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5823" PostTypeId="2" ParentId="5814" CreationDate="2018-02-27T09:08:44.997" Score="2" Body="&lt;p&gt;&lt;em&gt;(Caveat: This is more of an educated guess than a definite answer)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I never heared about Tandy selling the Jupiter Ace. Then again, Tandy did buy and rebadge whatever they thought they could sell. From stereos to multimeters - and comuters not the least here (think pocket callculators being TI and handheld computers being Sharp &lt;em&gt;and&lt;/em&gt; Casio).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now being a Texan store location, this might as well been some market test with a few units. Tanking into account that this was the time when litteraly every home computer manufacturer was afraid of the Sinclair machines, I wouldn't be surprised that Tandy played with the idea adding a rebranded Jupiter ACE to fill up the imagined deficit at the lowest end. After all, the Jupiter Ace was in many ways an improved ZX80 - &lt;a href=&quot;https://www.theregister.co.uk/2012/09/21/jupiter_cantab_jupiter_ace_is_30_years_old/&quot; rel=&quot;nofollow noreferrer&quot;&gt;designed by some of the same people&lt;/a&gt;. Quite a point. isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess the test sales where less than favourable, so Tandy placed their bet on the &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_MC-10&quot; rel=&quot;nofollow noreferrer&quot;&gt;MC-10&lt;/a&gt;. It had &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6847&quot; rel=&quot;nofollow noreferrer&quot;&gt;6847&lt;/a&gt; based graphics like the Coco, but with a 6803 instead, developed by &lt;a href=&quot;https://books.google.de/books?id=Vj0EAAAAMBAJ&amp;amp;pg=PA1&amp;amp;lpg=PA1&amp;amp;dq=Matra-Tandy-Electronic&amp;amp;source=bl&amp;amp;ots=tFcHIyD1jA&amp;amp;sig=4TaHyaXu1EtADUw3VOs6P8lymxg&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=0ahUKEwjSxdTI28XZAhUhIsAKHVajACsQ6AEIOTAF#v=onepage&amp;amp;q=Matra-Tandy-Electronic&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matra-Tandy-Electronic&lt;/a&gt; in France. Which again didn't work out as planned, part due incompatibility, but mostly because of a way too high price tag (&gt;100 USD). But that's a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So from these marks, I would say the machine you have seen was rather a Jupiter Ace then an Ace 4000, as that would be too late and in parallel to the MC-10, which wouldn't make any sense. Also it was rather in 1982, than '83, as it doesn't make sense to testmarket a machine when the follow up is already in the making. It further explains that they tried to setup their own US sales for the Ace 4000 after the Tandy deal didn't come thru.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;As said before: It's an educated guess using the facts I know/could find. All under the assumption that your memory is true.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-02-27T21:29:15.087" LastActivityDate="2018-02-27T21:29:15.087" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5824" PostTypeId="2" ParentId="5822" CreationDate="2018-02-27T09:18:45.000" Score="1" Body="&lt;p&gt;I'd first double-check that the switches are correctly set, then try looking for flow control issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If software flow control is selected (DC Codes and SW3 are ON), the reader waits for a DC1 (XON, decimal code 17) control character to start transmitting. In a terminal program, you can try typing &lt;kbd&gt;ctrl&lt;/kbd&gt;+&lt;kbd&gt;Q&lt;/kbd&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If hardware flow control is selected, ensure that your communication program sets the DTR signal.&lt;/p&gt;&#xA;" OwnerUserId="348" LastActivityDate="2018-02-27T09:18:45.000" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5825" PostTypeId="1" CreationDate="2018-02-28T05:19:47.853" Score="9" ViewCount="7292" Body="&lt;p&gt;I am trying to fix up an old work computer I have from the early to mid 90's.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything works fine, but the hard drive makes a horrible clicking noise when it loads anything, so I decided to replace it. I have seen many videos and articles describing using Compact Flash cards with IDE adapters instead of traditional hard drives, so I decided to try that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used my Linux machine to take an image of the original hard disk, which is 160MB. I bought a couple of 512MB Lexar CF cards, and I imaged one with the hard disk image using a CF to USB adapter. I used &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B001JTO782&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Amazon link&quot;&gt;this adapter&lt;/a&gt; to connect the CF card to the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BIOS detects the drive properly and fills out the Cylinders/Heads/Sectors information, but when it tries to boot from it, it fails and says &quot;Missing operating system&quot;. The status LEDs on the adapter indicate that there is power, but the data light only ever flashes once, very briefly, before the error is reported.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried connecting the old hard drive and the CF card, but in that case only the hard drive was detected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I checked the hex dump of the image and confirmed that it does have the magic number for a bootable drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not have any other systems with IDE connectors available at the moment, but I have tried connecting to the CF card with the adapter to an IDE to USB adapter on a modern computer. In that case, the OS detects the drive, but fails to read from or write to it. However, the card does work using a CF to USB adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I would like to know is what would cause the computer to fail to boot from the card?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could it be that that CF card isn't compatible?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read online that some cards are more compatible than others, but no one seemed to have a problem with Lexar cards. If the card is the problem, how do I know which card to buy so that it is compatible?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Responses to comments:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to boot DOS 6.22/Windows 3.1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have a boot floppy that I can use to see if the card is recognized. That is why I tried using the original hdd in addition to the card, but then the card wasn't recognized. The computer only has one IDE connector, and I couldn't get it to detect the card as either master or slave when the hdd was connected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original hard drive works fine, so I don't think there are any problems with corrupt data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know much about disk geometries, but I am pretty sure they are different.  The C/H/S values are different, and the CF card is about 4 times larger than the hdd.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer is a DTK Computer. I am not sure of the model. I guess it would fall into the &quot;PC compatible&quot; category.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Update:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I attempted to follow the advice of @Ken Gober and I made a boot disk, copied format.com and fdisk.exe, then booted the disk.  I partitioned the card with fdisk and made it active, then formatted the C drive with format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got another computer with an IDE port, and used that to copy the data from the hdd to the card in a number of different ways, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Copying the files using cp on Linux&lt;/li&gt;&#xA;&lt;li&gt;Using &lt;code&gt;format /s&lt;/code&gt; and copying over everything that was not already there&lt;/li&gt;&#xA;&lt;li&gt;Using &lt;code&gt;format /s&lt;/code&gt; and copying everything, replacing duplicates&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dd if=/dev/hdd-partition of=/dev/card-partition bs=512&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dd if=/dev/hdd of=/dev/card bs=512 skip=22 seek=63 count=numSectors&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;format c: /s&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As a result, I got one of three responses:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&quot;Invalid system disk. Insert another disk and press any key...&quot;&lt;/li&gt;&#xA;&lt;li&gt;&quot;Missing Operating System&quot;&lt;/li&gt;&#xA;&lt;li&gt;&quot;Starting MS-DOS...&quot;, then the system hangs indefinitely&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Interestingly enough, If I boot from a floppy disk, I can see all of the files on the card, and some of the executables even try to run, before complaining about missing himem.sys, complaining about needing Windows, or halting the system indefinitely while loading or something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you all so much for the help. At this point, I may just try installing FreeDOS just to see if I can get &lt;em&gt;anything&lt;/em&gt; booting off the CF card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update 2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I took @Jules advice and tried &lt;code&gt;sys a: c:&lt;/code&gt;.  Again, the computer said &quot;Starting MS-DOS..&quot;, but then got stuck in a loop or halted with the hard drive access light stuck on. Also, it seems that the original hard drive no longer boots properly, either (it's backed up, so it's fine). It seems that anything which is touched by a newer computer doesn't work with the old one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that there is a lower level issue at play. I don't have any other computer old enough care about the disk geometry instead of using LBA, and this one only has one IDE port, so I might just be screwed. I may just try to get an SD adapted as @traal suggested.&lt;/p&gt;&#xA;" OwnerUserId="8112" LastEditorUserId="276" LastEditDate="2020-01-27T18:17:55.083" LastActivityDate="2020-01-27T18:17:55.083" Title="Cannot boot from a Compact Flash card" Tags="&lt;ibm-pc&gt;&lt;hard-disk&gt;&lt;storage&gt;" AnswerCount="6" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5826" PostTypeId="2" ParentId="5825" CreationDate="2018-02-28T08:16:16.647" Score="0" Body="&lt;p&gt;I would as well see the C/H/S values as reason. When copying the HD content, all addressing is according to the HD geomtry, which ofc, isn't the same for the CF card. When booting the system releis on the C/H/F based addressing, thus using HD addresses to read the CF card, thus geting the wrong blocks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you said, you can boot the laptop into a MS-DOS floppy, you might as well use that system to format the CF card, right? That way the values should be exactly like the BIOS would like it. So try the whole process on the original machine. Which is the right thing anyway :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-03-07T10:00:39.020" LastActivityDate="2018-03-07T10:00:39.020" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5827" PostTypeId="2" ParentId="5825" CreationDate="2018-02-28T09:14:16.497" Score="2" Body="&lt;p&gt;Some or all CompactFlash cards aren't fully IDE compliant, and using a(n) SD to IDE adapter like &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B00DGNYXQ0&quot; rel=&quot;nofollow noreferrer&quot;&gt;this SD to 44-pin IDE adapter&lt;/a&gt; + &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B00006B8C2&quot; rel=&quot;nofollow noreferrer&quot;&gt;this 44-pin to 40-pin IDE adapter&lt;/a&gt; will often work better. (This combination &lt;a href=&quot;http://psx-scene.com/forums/f20/my-ps2-hdd-setup-reading-off-sd-card-adapter-133944/&quot; rel=&quot;nofollow noreferrer&quot;&gt;works perfectly in my Playstation 2&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-02-28T09:14:16.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5828" PostTypeId="2" ParentId="5825" CreationDate="2018-02-28T14:45:56.473" Score="5" Body="&lt;p&gt;First you need to make sure that your CF card and adapter are working properly.  One easy way to do this is to boot from the hard disk and make a boot floppy (FORMAT A: /S).  Copy the FDISK and FORMAT utilities to the floppy.  Power down, remove the hard disk and install your CF card and adapter, then boot from the floppy.  Partition and format the CF card using FDISK and FORMAT /S, then see if you can boot from the CF card.  If you can, they are working the way you need them to.  (Remember that you may need to reboot in between the FDISK and FORMAT steps to ensure that FORMAT is able to see the new partition).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, you need to make sure that you are making an image properly (this includes making sure you're using the right tool for the job).  Check to see what the C/H/S values are for the hard disk and the CF card, and make sure the H and S values are the same.  If the H and S values on both drives match, you should be able to take a raw sector dump of the entire hard disk (starting at 0/0/0) and just write it to the CF card (starting at 0/0/0).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If either the H or S values are different, then instead of dumping the entire hard disk you will want to just dump the DOS partition (start at whatever C/H/S is listed in the partition table for your DOS partition).  In this situation you need to recreate the DOS partition on the CF card manually.  Calculate new C/H/S values to use on the CF card so that the total number of blocks in the partition matches the total number of blocks in the hard disk DOS partition.  It is ok to round up the number of blocks to the next full track boundary, I doubt that would cause any problems.  It might even work to make the new partition on the CF card fill the entire volume but I don't recommend it (even if it works it can cause you problems later).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have multiple DOS partitions (a primary and one or more extended) and the H/S values are different, you may need to copy each partition separately using the procedure above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming your HD has C/H/S of 1011/15/22, and the DOS partition starts at 0/1/1 and fills the drive (the boot sector and partition table would be at 0/0/1 and the remainder of the first track is unused), that means your DOS partition is 333608 sectors (1011 cyls * 15 heads * 22 sectors = 333630, minus 22 sectors for the first track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your CF card is 994/16/63, that means each track holds 63 sectors and each cylinder holds 1008 sectors (16 * 63).  So, 333608 sectors would require 330 full cylinders, plus another 15 full tracks, plus 23 sectors (23 + 15 * 63 + 330 * 1008 = 333608).  If your DOS partition starts at 0/1/1 on the CF card, then it should end at 330/16/23 to be big enough to hold 333608 sectors.  Round up to the next track boundary and you should define it to end at 330/16/63.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once this is done, you can do a raw sector copy of 333608 sectors from the old HD to the new CF card, starting the read at 0/1/1 on the HD and starting the write at 0/1/1 on the CF card.  Starting the read at 0/1/1 means skipping the first 22 sectors of the HD (the first track), and starting the write at 0/1/1 means skipping the first 63 sectors of the CF card (the first track).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will be left with unused space on the CF card; you can create a new partition starting at 331/0/1 and use it as a D: drive if you like.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2018-02-28T23:08:27.400" LastActivityDate="2018-02-28T23:08:27.400" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5829" PostTypeId="2" ParentId="5825" CreationDate="2018-02-28T17:01:29.480" Score="0" Body="&lt;p&gt;One problem you may be having, if it isn't due to the file system being formatted for a disk with different geometry (which I suspect is the most likely problem) could be due to BIOS disk size limits: some BIOSes are unable to generate addresses correctly for disks that are over 504MB in size (1024 cylinders * 16 heads * 63 sectors * 512 bytes).  You may want to put your CF adapter into another machine and partition it so that your partition exists only within the first 1024 cylinders -- it will waste a few MB of space, but it may make it work with a BIOS that doesn't understand how to use partitions that extend beyond that.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-02-28T17:01:29.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5830" PostTypeId="2" ParentId="3016" CreationDate="2018-02-28T17:51:24.087" Score="11" Body="&lt;p&gt;It seems that Michael Steil at pagefault.org has recently posted an analysis of the KERNAL calls from all of the Commodore 8-bit machines to try and track lineage. However, what is relevant here is the table he includes near the bottom of his blog post that shows which vector entries are safe for which platforms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result of his findings is that only the following kernal vectors are consistent across all platforms (PET to C65):&#xA;Code that must work on all Commodore 8 bit computers (without detecting the specific machine) is limited to the following KERNAL calls that are supported from the first PET up to the C65:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$FFCF: BASIN – get character&lt;/li&gt;&#xA;&lt;li&gt;$FFD2: BSOUT – write character&lt;/li&gt;&#xA;&lt;li&gt;$FFE1: STOP – test for STOP key&lt;/li&gt;&#xA;&lt;li&gt;$FFE4: GETIN – get character from keyboard&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Very interesting if you want to see how a &quot;cross platform&quot; program for the Commodore 8-bits can be done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link to the analysis is here: &lt;a href=&quot;http://www.pagetable.com/?p=926&quot; rel=&quot;noreferrer&quot;&gt;http://www.pagetable.com/?p=926&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2018-02-28T17:51:24.087" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5833" PostTypeId="1" AcceptedAnswerId="5837" CreationDate="2018-02-28T20:58:35.100" Score="44" ViewCount="12717" Body="&lt;p&gt;The original IBM PC and later variants used an Intel 8253 or 8254 as a sound chip. Why did users add sound cards such as the Adlib or Sound Blaster. I remember voice output with programs like telephone answering programs. The sound was wimpy but I attributed most of the quality to speaker size.&#xA;&lt;strong&gt;&lt;em&gt;What was lacking with the original PC sound chip?&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2018-03-01T22:20:45.450" LastActivityDate="2020-05-04T00:09:39.910" Title="Why did the IBM PC need a sound card?" Tags="&lt;ibm-pc&gt;&lt;sound&gt;" AnswerCount="9" CommentCount="21" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5834" PostTypeId="2" ParentId="5833" CreationDate="2018-02-28T22:14:05.400" Score="25" Body="&lt;p&gt;Fundamentally, the lack of a specialized Programmable Sound Generator (PSG) or Synthesizer led to game sound effects and music on the IBM PC that were far inferior to competitors' microcomputers and game consoles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The comparatively inexpensive Commodore 64 had a PSG known as the SID that was capable of synthesized multi-track music, game sound effects, and even crude digitized speech. Such sophisticated sound accompaniment for games wasn't possible with the PC's simple programmable interval timer. Here you can &lt;a href=&quot;https://www.wothke.ch/tinyrsid/index.php/charts&quot; rel=&quot;noreferrer&quot;&gt;listen to SID music&lt;/a&gt; in your Browser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the popularity of PC's for gaming grew in the 1980's, the need for better sound to go with the increasingly sophisticated graphics became an impediment to the PC competing with 8-bit systems like the C64 and NES, or newer 16-bit systems from Commodore, Sega, and others. To solve this, first Ad Lib, and then Creative Labs (SoundBlaster), developed ISA cards for the PC with FM Synthesizer chips from Yamaha. Because of the vast superiority these cards offered over the simple interval timer and internal speaker of the PC, game developers quickly added support for them. Hear some &lt;a href=&quot;https://www.youtube.com/watch?v=ATb8zhdINpg&quot; rel=&quot;noreferrer&quot;&gt;sample AdLib Gold music&lt;/a&gt; from YouTube.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-03-01T18:09:08.917" LastActivityDate="2018-03-01T18:09:08.917" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5835" PostTypeId="2" ParentId="5833" CreationDate="2018-02-28T22:38:04.547" Score="73" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The original IBM PC and later variants used an Intel 8253 or 8254 as a sound chip.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8253&quot; rel=&quot;noreferrer&quot;&gt;8253 is a timer circuit&lt;/a&gt;, containing three timers able to generate timed interrupts or square-wave output with programmed frequencies. On the PC the third timer's output is, via an amplifier, connected to &lt;a href=&quot;https://en.wikipedia.org/wiki/PC_speaker&quot; rel=&quot;noreferrer&quot;&gt;a simple speaker&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As said before, calling a 'simple' timer a sound chip is quite a stretch. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since it's a digital output, no level control is available. Only on or off is possible. At best this results in rather nasty sounding square waves. There is no provision to smooth the signal (beside the inertia of the speaker membrane).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the only frequencies that can be selected are those that result from dividing the base frequency (1,193,181.8 Hz) by an integer in the range of 1&amp;ndash;65535. So even when accepting the meager signal quality, only very few notes can be played at correct frequency. Already the basic 440 Hz concert pitch will be off by .5Hz. So whatever is played using the timer will sound off pitch. Music can still sound good if a little off pitch, but only when all notes are off in the same way (*1) - which is not the case with this 'sound chip'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, there are also ways to manipulate the sound even a bit better by manually handling the output - which results in 100% CPU time usage.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did users add sound cards such as the Adlib or Sound Blaster.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simply because they wanted sound - or at least music. Not just a beeper.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What was lacking with the original PC sound chip?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;As said before, it's no sound chip at all&lt;/strong&gt;. A sound chip will need programmable oscillators for different wave forms and at least some analogue ciruitry to make a smooth, more natural sound. Ofcourse, from an enginering point, the PC's use of a timer was a great improvement over the Apple II, its model and competition, as it allowed the beeping in parallel - not that this feature was used by BIOS or DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Last but not least&lt;/em&gt;, the PC is an open system. It is made to add new/better hardware. So why shoudn't there be a real sound card? Improving the machine is a core feature of the design.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Addendum:&lt;/strong&gt;&#xA;&lt;em&gt;agtoever&lt;/em&gt; added a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5833/why-did-the-ibm-pc-need-a-sound-card/5835#comment14281_5833&quot;&gt;comment&lt;/a&gt; with a great example of what was possible with the direct fiddling with the speaker. Awesome, but less than apealing when compared to even the cheapest form of soundcard, the AdLib of the same time, as &lt;a href=&quot;http://www.crossfire-designs.de/download/articles/soundcards/adlib_monkeyisland.mp3&quot; rel=&quot;noreferrer&quot;&gt;used by Monkey Island&lt;/a&gt;. Next to zero CPU usage and crisp clear sound. Not to mention easy programming. I'd call that a huge advantage.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The average human decodes frequencies relative to each other. As a result sound is still perceived as good, even if the whole scale is shifted, as long as it's in the same direction and same percentage. Output needs to be way off to be noticed by an average listener. In contrast, if notes are off by a different margin and in different directions, even less trained listeners will notice.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-10T13:11:22.307" LastActivityDate="2018-09-10T13:11:22.307" CommentCount="23" ContentLicense="CC BY-SA 4.0" />
  <row Id="5836" PostTypeId="2" ParentId="5833" CreationDate="2018-03-01T04:26:15.490" Score="25" Body="&lt;p&gt;Here's typical audio from a PC speaker: &lt;a href=&quot;https://youtu.be/ZLwri0J1S4E&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/ZLwri0J1S4E&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can hear, it's really only designed to make beeps of various frequencies, all the same volume level. But by quickly turning the speaker on and off, you can play 1-bit PCM audio. Here's what it sounds like: &lt;a href=&quot;https://youtu.be/HstgfH9FWV4&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/HstgfH9FWV4&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And because it's unbuffered, it's very CPU-intensive just to do that PCM audio, so forget about using it in a game without pausing the image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple resistor ladder DAC on the parallel port produces 8-bit PCM audio, a dramatic improvement but unbuffered so still too CPU-intensive for fast action games: &lt;a href=&quot;https://youtu.be/spOenlrSSOE#t=19m9s&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/spOenlrSSOE#t=19m9s&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you add a buffer, it can be used in fast action games: &lt;a href=&quot;https://youtu.be/EoGCf69QLJc&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/EoGCf69QLJc&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative is FM synthesis to produce music and simple sound effects without using the CPU: &lt;a href=&quot;https://youtu.be/nSXlTJLqyL0&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/nSXlTJLqyL0&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first SoundBlaster had both 8-bit buffered PCM audio and FM synthesis, and could also record in 8 bits.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-03-01T04:26:15.490" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5837" PostTypeId="2" ParentId="5833" CreationDate="2018-03-01T07:54:31.760" Score="42" Body="&lt;p&gt;The &lt;strong&gt;PC speaker&lt;/strong&gt; connected to the &lt;a href=&quot;http://www.gianlucaghettini.net/wp-content/uploads/2014/01/timerinterrupt.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;i8253 PIT&lt;/strong&gt; (programmable interval timer)&lt;/a&gt; was only for beeping. For better sound you need to bypass the &lt;strong&gt;PIT&lt;/strong&gt; and use the &lt;strong&gt;Speaker&lt;/strong&gt; as an &lt;strong&gt;I/O&lt;/strong&gt; port with a single on/off bit controlled by the &lt;strong&gt;CPU&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That way you can generate any sound (even &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pulse-code_modulation&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCM&lt;/a&gt;&lt;/strong&gt; using a &lt;a href=&quot;https://stackoverflow.com/a/26947637/2521214&quot;&gt;nasty &lt;strong&gt;PWM&lt;/strong&gt; technique&lt;/a&gt;). The problem was that at that time the &lt;strong&gt;CPU&lt;/strong&gt; was too slow, and consider that &lt;strong&gt;I/O&lt;/strong&gt; operations are usually the slowest, the &lt;strong&gt;PWM&lt;/strong&gt; frequency would not be too high meaning you got only a few levels of &quot;volume&quot; and nasty background high pitch noise. Also this technique consumes a lot of the &lt;strong&gt;CPU&lt;/strong&gt;'s time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For better sound in games and apps you need:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A &lt;strong&gt;DAC&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Low &lt;strong&gt;CPU&lt;/strong&gt; consumption&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Neither of which the PC Speaker is capable of (if not using only the PIT and simple square waves). There were 3 alternatives at the time:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;LPT DAC like COVOX&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple R2R bridge with diodes for blocking branching loops (which many DACs ignored at that time) connected to the 8-bit &lt;a href=&quot;https://en.wikipedia.org/wiki/Parallel_port&quot; rel=&quot;nofollow noreferrer&quot;&gt;LPT port&lt;/a&gt;. This still needed CPU time but just a single out instruction per sample which was much much faster than maintaining PWM as a DAC for the Speaker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output of the DAC was connected either to headphones or to speakers if an amplifier was used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the newer &quot;more advanced&quot; LPT ports also had DMA capability so in such cases this was really cheap (anyone could bust it at home from just a few parts directly onto a Cannon 25-pin connector - not even a PCB was needed) and almost the same as using a SoundBlaster except for the MIDI polyphony... But only an 8 bit DAC was safe as the newer LPT was not fully connected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Btw the &quot;more advanced&quot; is a joke as the older LPTs were usually much faster than the new ones, not to mention they had more bits for both input and output. Just for comparison my 386 LPT was capable of ~190KHz transfer and K6 had problems with 80KHz - so much for &quot;advanced&quot;...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many music apps, games and demos were capable of using these DACs for sound output.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;external MIDI&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game port was also compatible with the MIDI interface and could be used as a as polyphonic synthesizer if one were connected to it externally. This was not used commonly for games, as not everyone has an &lt;strong&gt;external MIDI&lt;/strong&gt; device for this purpose. This was also not capable of PCM reproduction (unless workarounds were used which boils down to high CPU usage like the Speaker PWM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were only a few music apps which could use this and usually only musicians used it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sound card&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;Creative SoundBlaster&lt;/strong&gt; is comprised of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An &lt;strong&gt;ISA&lt;/strong&gt; interface for interconnecting with the computer. &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DAC&lt;/strong&gt;+Amplifier+&lt;strong&gt;DMA&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;A &lt;strong&gt;MIDI&lt;/strong&gt; polyphony generator (latter versions had also WAVETABLE)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So the CPU just configures the DMA to transfer PCM samples from memory to the DAC from time to time and the sound card did the rest. So the CPU usage was very low and the CPU had time for other things like graphics, game logic and user input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MIDI works similar to the PIT but with much much more options and higher sound quality. SoundBlaster created their own polyphony generator. If you want to know more about it try to Google the &lt;strong&gt;AY-8912&lt;/strong&gt; chip datasheet which was used for the ZX 128k sound: it is a basic start to polyphony... and would give you an insight into how that works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This Sound card became the standard...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6659" LastEditDate="2020-05-04T00:09:39.910" LastActivityDate="2020-05-04T00:09:39.910" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="5838" PostTypeId="2" ParentId="1449" CreationDate="2018-03-01T10:40:54.213" Score="1" Body="&lt;p&gt;I used dd command on a Ubuntu installed computer, using terminal. It worked for me but there may be differences due to file system.&lt;/p&gt;&#xA;" OwnerUserId="3305" LastActivityDate="2018-03-01T10:40:54.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5839" PostTypeId="2" ParentId="5833" CreationDate="2018-03-01T11:54:37.263" Score="16" Body="&lt;p&gt;There is another angle complementing all these answers and even the question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original PC was mainly designed and marketed as a boring but &quot;reliable&quot; business machine, building on top of 20-year-old technology on the line of CP/M hardware for lowering the production costs and being able to build machines with off-the-shelf, discrete TTL technology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So sound and video hardware were not exactly a priority. This also had the side effect that a de facto standard with continuity in time was never established in that department. That further complicated developing software and improving those technologies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In effect, the meager capabilities of the XT/AT in sound, video, and multitasking were more obvious when comparing it to several contemporary machines, of which notably the Commodore Amiga deserves a special mention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As other answers correctly point out, the native technology for producing sound was not that much better than a ZX Spectrum (a largely domestic British 8-bit machine contemporary to the XT model), except for the (clever) hack of being possible to drive it with an 825x timer chip.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2018-03-04T17:32:29.703" LastActivityDate="2018-03-04T17:32:29.703" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5840" PostTypeId="1" AcceptedAnswerId="5929" CreationDate="2018-03-01T13:28:16.653" Score="10" ViewCount="1567" Body="&lt;p&gt;The PDP-8 was a popular 12-bit minicomputer of the late sixties. It used word addressing, so that it always dealt in 12-bit words, of which it could address 4096 with a full bank of core memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, a typical minicomputer would spend a great deal of its time dealing with text one way or another. In those days, the market didn't demand the ability to use lowercase, which meant the PDP could fit a character in 6 bits, so it could fit two of them in a word.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But since it couldn't address individual characters, what was the idiomatic way to handle strings? Clearly you could open code the necessary instructions for reading a word from memory and handling each component character separately, but on the face of it, that would be rather inefficient in time and (more important in those days) code size. The instruction set is very small (only eight opcodes!) and unless I'm missing something, doesn't seem to contain any special instructions for the purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a 'hello world' program in PDP-8 assembly, but it doesn't use the contemporary encoding, it stores the string in ASCII, one character per word, which would surely have been unacceptably inefficient at the time: &lt;a href=&quot;https://bigdanzblog.wordpress.com/2014/05/31/hello-world-program-for-pdp-8-using-pal-assembly-language/&quot; rel=&quot;noreferrer&quot;&gt;https://bigdanzblog.wordpress.com/2014/05/31/hello-world-program-for-pdp-8-using-pal-assembly-language/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how were strings normally handled in contemporary code?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-04-27T21:38:23.850" Title="How did the PDP-8 handle strings?" Tags="&lt;pdp-8&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5841" PostTypeId="2" ParentId="5840" CreationDate="2018-03-01T14:04:31.483" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;In practice, a typical minicomputer would spend a great deal of its time dealing with text one way or another.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. PDPs where mainly used to automate machinery and related number crunching (only small numbers and little pebbles from today's view). Text wasn't among high priority.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In those days, the market didn't demand the ability to use lowercase, which meant the PDP could fit a character in 6 bits, so it could fit two of them in a word.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Jup. A 6 bit encoding was perfect to cover all characters of the back then common 5 bit &lt;a href=&quot;https://en.wikipedia.org/wiki/Baudot_code#ITA2&quot; rel=&quot;nofollow noreferrer&quot;&gt;ITA2&lt;/a&gt; encoding without the need of switching sequences (*1). This was a quite common practice. For example IBM's701 and follow up used 36 bit words and packed always 3 characters into a half word.Similar CDC's 6000 series used 60 bit words with 10 bytes each (*2).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But since it couldn't address individual characters, what was the idiomatic way to handle strings? Clearly you could open code the necessary instructions for reading a word from memory and handling each component character separately, but on the face of it, that would be rather inefficient in time and (more important in those days) code size.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly that has been done. Just think of the way 8 bit CPUs handle 8 bit words as two hex digits. It involves some shifting and masking. And  eventually buffers with unpacked characters to do overlapping operations. Remember, memory space was even more scarce than processing time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the PDP 8/E (IIRC) a new opcode got introduced: &lt;code&gt;BSW&lt;/code&gt; or &lt;strong&gt;B&lt;/strong&gt;yte&lt;strong&gt;SW&lt;/strong&gt;ap switched the upper and lower byte (*3), simplifying the handling of packed byte strings.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The instruction set is very small (only eight opcodes!)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a matter of definition, as one could also define the PDP as having more than 42 opcodes, as 'opcode' 7 was used to define 34 subcodes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and unless I'm missing something, doesn't seem to contain any special instructions for the purpose.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The missing point would be &lt;strong&gt;the missing need for text manipulation&lt;/strong&gt;. Word processing wasn't the application the PDP-8 was designed for. Texts where usually only output as fixed strings for like labels and headers. Everything else where numbers, which needed conversation from binary anyway.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I found a 'hello world' program in PDP-8 assembly, but it doesn't use the contemporary encoding, it stores the string in ASCII, one character per word, which would surely have been unacceptably inefficient at the time&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, as such character by character manipulation was only needed for very special situations.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So how were strings normally handled in contemporary code?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;99% was unpacking strings and printing them. Works fine with a limited instruction set. The rest was done in line buffers with one character per word and results (if there where any at all) again packed before storing.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - To some degree it's like Unicode half a century later - an extended code to cover multiple pages without switching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Again, these machines weren't so much about text as real number crunchers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Jup, bytes, as they where 6 bit bytes :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-04-27T21:38:23.850" LastActivityDate="2018-04-27T21:38:23.850" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="5842" PostTypeId="2" ParentId="5840" CreationDate="2018-03-01T17:00:16.247" Score="8" Body="&lt;p&gt;When I used the PDP-8, 7-bit ascii was in use.  Strings would start on an word boundary, and be packed 1.5 8-bit bytes per word, and the last nibble might be unused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'd use a subroutine to output them somewhere (e.g. teletype), and that subroutine would unpack them for sending as individual 8-bit characters.  The subroutine would have code for each case: (1) byte left justified in 12-bit word, (2) byte straddling 12-bit words, and (3) byte right justified in 12-bit word.  The subroutine would handle each case in succession, after the last case, start over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, don't forget that the PDP-8 has indirect load/store through a pointer in memory, and 8 locations (on the base page at octal addresses 10-17) are special in having auto-increment operations.  (They're used almost like registers.)  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means even with only one accumulator register, that you can do &lt;code&gt;movmem&lt;/code&gt; and &lt;code&gt;strcpy&lt;/code&gt;-like operations pretty easily.  You put your source &amp;amp; target into the auto-incrementing memory locations, then put a (negative) count in another memory location.  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Loop:   TAD I 10      ; source in auto-incrementing pointer at word address 10&#xA;        DCA I 11      ; target in auto-incrementing pointer at word address 11&#xA;        ISZ 20        ; counter in memory location 20, increments &amp;amp; skips on zero&#xA;        JMP Loop      ; backward branch to loop start; skipped to end the loop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The PDP-8's magnetic core memory required write after read since the read operation was destructive and zeroed the read memory location.  This meant that any read had to be automatically followed by a write of the read value.  By adding an increment operation to the re-write, they achieved both auto increment for loads/stores, and, increment and skip on zero (which also operates on memory location), virtually for free since it has to re-write anyway.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastEditorUserId="7985" LastEditDate="2018-03-01T18:55:56.013" LastActivityDate="2018-03-01T18:55:56.013" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5843" PostTypeId="1" AcceptedAnswerId="8183" CreationDate="2018-03-01T19:11:34.270" Score="12" ViewCount="2070" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Transistor_count&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Transistor_count&lt;/a&gt; provides some transistor count figures for early microprocessors, e.g. 8008 and 6502 both listed at around 3500.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-8 was a 12-bit computer with a deliberately simple instruction set. At first glance, 12 is greater than 8, so might be expected to be larger than the early 8-bit microprocessors, but the address sizes were 12 and 16 bits respectively. (Why did the PDP-8 not distinguish between data and address widths like the microprocessors? Conjecture: for early microprocessors, pins and board traces were expensive, but early minicomputers were made of discrete components which means they were effectively made of wires, so saving a few wires on the data bus wouldn't help.) It's not clear just from the nominal numbers, how the PDP should be expected to compare with early microcomputers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.pdp8.net/straight8/functional_restore.shtml&quot; rel=&quot;noreferrer&quot;&gt;https://www.pdp8.net/straight8/functional_restore.shtml&lt;/a&gt; says &quot;The backplanes contain 230 cards, approximately 10,148 diodes, 1409 transistors, 5615 resistors, and 1674 capacitor.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1409 is a surprisingly small number. For example, it's less than half of 3500. That leads one to ask how it managed to be so much simpler than e.g. the 6502, what tricks the 6502 designers were missing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there are also the other components to take into account. Is there some sense in which the diodes, resistors and capacitors did things that would be done by transistors in a microprocessor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be a reasonable assessment for the transistor count of the PDP-8 &lt;em&gt;by the same metric that the 6502 has 3510 transistors&lt;/em&gt;? Or vice versa?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-03-01T13:09:05.013" Title="PDP-8 transistor count" Tags="&lt;6502&gt;&lt;pdp-8&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5844" PostTypeId="1" CreationDate="2018-03-01T19:15:05.357" Score="14" ViewCount="2006" Body="&lt;p&gt;IBM spoiled me for hardware quality.  I've gone through many computers, including a TRS-80, Heathkit H-89, Commodore Vic-20 and C-64, and countless PC's but my first original IBM PC will always be my favorite because of the sheer quality of the box and the keyboard.  There's nothing, to me, like the un-mistakable feedback from typing on an IBM keyboard, and the solid feel of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe that IBM's biggest mistake in the home market early-on was to distribute their IBM PC Jr. with a &quot;chiclet&quot; keyboard.  To me, it would be like Mercedes Benz releasing a cheaper model with a car body made of all plastic.  One of the major things that set IBM apart from the many clones that quickly appeared on the market was the low quality of the cases and the keyboards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only after years of virtually no choice did I give in to the cheaper keyboards that came with today's PC's, although I at least get ones with back-lit keys (I am visually handicapped).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did IBM have a patent on their tactile feedback mechanism, or were clone makers just cheap?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the late 80's and early 90's my boss bought me two genuine IBM keyboards, one for work and one for home, and I treasured them both.  To this day, I get frustrated because unless I'm looking directly at the screen, I cannot be certain whether or not I pressed the keys hard enough or not every time.&lt;/p&gt;&#xA;" OwnerUserId="5094" LastEditorUserId="278" LastEditDate="2018-03-01T20:49:37.250" LastActivityDate="2018-03-30T20:14:28.187" Title="Why did tactile-feedback keyboards lose popularity?" Tags="&lt;hardware&gt;&lt;history&gt;&lt;ibm-pc&gt;&lt;keyboards&gt;" AnswerCount="6" CommentCount="14" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5845" PostTypeId="2" ParentId="5844" CreationDate="2018-03-01T21:05:34.997" Score="9" Body="&lt;p&gt;The original IBM Model M keyboard can still be bought. It is produced by the &lt;a href=&quot;http://pckeyboard.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;original manufacturer Unicomp&lt;/a&gt;, a management-buyout (I believe) from former IBM Lexmark. Their keyboards are within the $100 range and are built-to order, that is you can specify which colours and layout you want, with modern USB (or even PS/2) interfaces. Not cheap, but definitely recommended for anyone who liked the Model M (I have two of them, and with eyes closed, you can't feel the difference from an original Model M keyboard).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nEzNU.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nEzNU.gif&quot; alt=&quot;Von Shaddim - Eigenes Werk, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=30568410&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-03-03T13:41:20.380" LastActivityDate="2018-03-03T13:41:20.380" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5846" PostTypeId="2" ParentId="5843" CreationDate="2018-03-01T21:35:35.293" Score="11" Body="&lt;p&gt;The PDP-8 processor was implemented in &lt;a href=&quot;https://en.wikipedia.org/wiki/Diode%E2%80%93transistor_logic&quot; rel=&quot;noreferrer&quot;&gt;diode-transistor logic&lt;/a&gt;, whereas most early microprocessors were implemented in some variety of MOS logic,&#xA; most commonly &lt;a href=&quot;https://en.wikipedia.org/wiki/NMOS_logic&quot; rel=&quot;noreferrer&quot;&gt;NMOS&lt;/a&gt;.  This accounts for some of the discrepancy you note: a typical gate in MOS logic would use 3 transistors (the wikipedia article shows a resister and two transistors, but on an actual integrated circuit the resister is most commonly swapped for a transistor with its gate attached to a constant source, because that's easier to implement in MOS-type IC production processes), while in diode-transistor logic, there's only one transistor + several diodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, the PDP-8 processor was &lt;em&gt;very&lt;/em&gt; simple.  It had a single bit ALU that was used repeatedly to perform single operations, which would have saved a significant number of gates.  It also has fewer registers than even the notoriously register-sparse 6502.  Due to using a serial ALU, the larger word length would have only really had much effect on the size of the registers, and not made the rest of the processor any more complex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is therefore unsurprising that the gate count is lower than the 6502 (approximately 500 vs 1000 respectively).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Update&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It looks like the Wikipedia article I was basing some of the above is misleading: only the PDP-8/S has a single bit ALU (but then, that is where the 500-gate figure came from too).  Other sources confirm that the original PDP-8 has a full 12-bit ALU, so likely has many more gates than 500... the transistor count suggests it could have up to 1400 gates, although I imagine some of those transistors are used for buffers rather than gates, so I'd estimate it probably has a similar number of gates to the 6502.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-03-02T09:16:30.627" LastActivityDate="2018-03-02T09:16:30.627" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5847" PostTypeId="2" ParentId="5844" CreationDate="2018-03-01T22:33:03.440" Score="6" Body="&lt;p&gt;Whilst the original IBM keyboards were extremely robust, they also had a bit of a clunky feel even back in the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I actually preferred using Cherry mechanical keyboards, less noisy and slightly softer to the touch. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently you can still buy brand new mechanical keyboards with them  nowadays &lt;a href=&quot;https://www.cherry.de/cid/Mechanical_keyboards.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.cherry.de/cid/Mechanical_keyboards.htm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2018-03-03T14:25:34.103" LastActivityDate="2018-03-03T14:25:34.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5848" PostTypeId="2" ParentId="5294" CreationDate="2018-03-02T02:51:09.943" Score="0" Body="&lt;p&gt;There have been a number of minicomputers-, mainframes-, and supercomputers-on-a-chip, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Chris Fenton's &lt;a href=&quot;http://web.archive.org/web/20140102082302/http://www.chrisfenton.com/homebrew-cray-1a/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Homebrew Cray-1&lt;/a&gt; on a Xilinx Spartan-3 1600 FPGA chip (Cray-1 supercomputer)&lt;/li&gt;&#xA;&lt;li&gt;DEC J-11 (PDP-11 minicomputer)&lt;/li&gt;&#xA;&lt;li&gt;DEC NVAX (VAX minicomputer/mainframe)&lt;/li&gt;&#xA;&lt;li&gt;Harris HD6120 (PDP-8 minicomputer)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Please feel free to add to this list.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-03-02T05:51:20.690" LastActivityDate="2018-03-02T05:51:20.690" CommentCount="3" CommunityOwnedDate="2018-03-02T02:51:09.943" ContentLicense="CC BY-SA 3.0" />
  <row Id="5849" PostTypeId="2" ParentId="5844" CreationDate="2018-03-02T08:07:59.453" Score="15" Body="&lt;p&gt;Cost was certainly a part of it, but sound was another. Mechanical switches &lt;a href=&quot;http://xahlee.info/kbd/mechanical_keyboard_noise_comparison.html&quot; rel=&quot;noreferrer&quot;&gt;make more noise&lt;/a&gt; than rubber-dome and electromechanical, and as computers became more of a fixture in houses (and offices), I think that this became an issue. The fact that mechanical switches cost a lot more was probably the deciding factor, though.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2018-03-02T08:07:59.453" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5850" PostTypeId="2" ParentId="1592" CreationDate="2018-03-02T08:18:36.383" Score="8" Body="&lt;p&gt;I'd like to add a few words on conditional branching. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This is quite different from the conditional branching on the PDP-11&#xA;  and the 6502 computers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It simply doesn't fit into the PDP/8 instruction scheme, the 12 bits aren't enough for that. A conditional branch needs two aspects in one instruction:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;defining the branch target (the jump address)&lt;/li&gt;&#xA;&lt;li&gt;defining the condition (typically by having multiple opcodes)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The branch target would have to follow the memory-reference-instruction pattern of the PDP-8 to keep the gate count low and the range of reachable target addresses useful. So there'd be 9 bits for the branch target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you'd need at least a handful of different conditions (zero, nonzero, positive, negative, carry, noncarry), you'd consume a handful of opcodes. And the PDP/8 only devoted 3 bits to the opcode section, allowing for only 8 basic opcodes. Using 5 or more of them for the conditional branch was clearly impossible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP/8 also had no multiple-word instructions. So the &quot;skip&quot; trick allowed for a clever solution. Practically, combining a skip instruction with a jump gave a 2-word conditional branch instruction, although technically they were two individual instructions. And I'm sure that clever assembler developers combined skips not only with jumps, but with other instructions as well. E.g. getting the absolute value could be simply done by&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    SPA    skip the next instruction if positive or zero&#xA;    CIA    change the sign of the accumulator&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;No jump instruction needed.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastEditorUserId="576" LastEditDate="2020-03-11T14:41:27.963" LastActivityDate="2020-03-11T14:41:27.963" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5851" PostTypeId="2" ParentId="5844" CreationDate="2018-03-02T08:46:39.640" Score="3" Body="&lt;p&gt;As laptops rose in popularity and began to replace desktops in many workplaces people simply got used to laptop style keyboards. Due to limited space they tend to be rubber dome keyboards with little key travel.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-03-02T08:46:39.640" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5852" PostTypeId="2" ParentId="5833" CreationDate="2018-03-02T10:06:59.433" Score="2" Body="&lt;p&gt;One major thing the builtin sound hardware lacked was any facility to input/record (but so did the very first IBM soundcard, which was more or less a Yamaha FB-01 on an ISA card).&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-03-02T10:06:59.433" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5853" PostTypeId="2" ParentId="5844" CreationDate="2018-03-02T15:44:24.693" Score="15" Body="&lt;p&gt;As things become cheaper, people learn to tolerate lower and lower quality.&amp;nbsp;  This happens in many fields of endeavor.&amp;nbsp;  The voice quality people tolerate from today's mobile phones would have been generally unacceptable to land-line telephone engineers in the 1990s.&amp;nbsp; The typographic spacing people have learned to to from automated typesetting equipment would have been regarded as inept in the 1800s [it's too bad nobody wrote a rebuttal to &lt;em&gt;A Mac/PC is not a Typewriter&lt;/em&gt; entitled &lt;em&gt;A Mac/PC is not a Linotype&lt;/em&gt;].&amp;nbsp;  And the quality of keyboards people have learned to type on has fallen below what would have been expected on from even a cheap 1980s computer.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-03-02T15:44:24.693" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5854" PostTypeId="1" AcceptedAnswerId="5870" CreationDate="2018-03-02T18:43:36.620" Score="5" ViewCount="391" Body="&lt;p&gt;Someone at work made a joke, &quot;He's so old that keyboards didn't have that key&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When would the &lt;kbd&gt;~&lt;/kbd&gt; have first appeared on keyboards?&lt;/p&gt;&#xA;" OwnerUserId="3394" LastEditorUserId="3394" LastEditDate="2018-03-03T14:45:15.433" LastActivityDate="2018-03-03T15:55:02.720" Title="When did the tilde first start to appear on standard keyboards?" Tags="&lt;keyboards&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5855" PostTypeId="1" AcceptedAnswerId="5857" CreationDate="2018-03-02T20:30:55.680" Score="8" ViewCount="1234" Body="&lt;p&gt;In the first season of the AMC show Halt &amp;amp; Catch Fire, the protagonist &lt;a href=&quot;http://www.amc.com/shows/halt-and-catch-fire/cast-crew/cameron-howe&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Cameron Howe&quot;&lt;/a&gt; is introduced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cameron portrays a rookie engineer who is recruited for being extraordinarily talented, and is tasked by her new employer to perform a cleanroom reverse-engineering of the IBM PC BIOS. Who was the actual Engineer(s) who first accomplished this feat, and what evidence do we have to document their achievement?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tzCss.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tzCss.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-03-03T15:04:58.667" LastActivityDate="2018-03-03T18:43:06.327" Title="Who were the first engineers to &quot;cleanroom&quot; the IBM PC BIOS?" Tags="&lt;history&gt;&lt;ibm-pc&gt;&lt;bios&gt;&lt;clone&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5856" PostTypeId="2" ParentId="5833" CreationDate="2018-03-02T20:37:00.813" Score="4" Body="&lt;p&gt;The IBM PC was designed to be modular. You could put in a cheap sound card or an expensive sound card or no sound card at all. You could put in a cheap video card or an expensive video card. You could add a modem card or ethernet card. Repairing the unit was often done by pulling out cards and trying different cards until the offending card was discovered and replaced. If the mother board was bad, all the cards could be moved to a different motherboard. Upgrading was as easy as adding or replacing a card and installing new drivers. The only reason modern cell phones and tables are not designed this way is issues relating to space. The original &quot;sound chip&quot; could only make a beep. It was used for diagnostic purposes where the number of beeps at start-up gave out &lt;a href=&quot;http://ps-2.kev009.com/pcpartnerinfo/ctstips/49fe.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;diagnostic information&lt;/a&gt; or maybe getting the user's attention. Use of the beep sound chip in games was a cheap hack and it sounded cheap.&lt;/p&gt;&#xA;" OwnerUserId="8136" LastActivityDate="2018-03-02T20:37:00.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5857" PostTypeId="2" ParentId="5855" CreationDate="2018-03-02T21:23:04.333" Score="13" Body="&lt;p&gt;Even just restricting discussion to the first season, before the same people apparently not only clone the PC but also create (facsimiles of) Sierra Online, McAffee, Netscape and Yahoo, she's not based on anybody real.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In real life the source code for the IBM BIOS was printed in the back of the manual. There was no Gordon inexplicably hand transcribing the assembly address by address. There was one team of technical writers that read the manual and the source and provided detailed specifications. Those specifications were handed to the legal team. The legal team handed them to a team of engineers. The engineers implemented them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So she's a compound of a team, and I think the strange subplot about the friendly OS is completely fictitious; probably groundwork for Joe's discovery of the Apple Macintosh (i.e. that he was not a leader but a follower), and his ensuing crisis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The people usually lauded from Compaq are the management, for successful execution of the machine; not any star engineer. But that sounds like boring television.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-03-02T21:23:04.333" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5858" PostTypeId="1" CreationDate="2018-03-02T21:23:49.300" Score="10" ViewCount="132" Body="&lt;p&gt;The DECscope User's manual (EK-VT5X-OP-001, 4th printing, March 1977) states (page 19) that Reverse Line Feed is VT52/VT55 only:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Reverse Line Feed (&lt;strong&gt;VT52 only&lt;/strong&gt;)&lt;/p&gt;&#xA;&lt;p&gt;invoked by ESC I (033 111)&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;However, vt50h termcap/terminfo entries, dating back at least to &lt;a href=&quot;http://www.tuhs.org/cgi-bin/utree.pl?file=2BSD/bin/etc/termcap&quot; rel=&quot;noreferrer&quot;&gt;2BSD&lt;/a&gt; (1980), include reverse linefeed. (vt50 termcap/terminfo entries do not).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ infocmp vt50h&#xA;#   Reconstructed via infocmp from file: /usr/share/terminfo/76/vt50h&#xA;vt50h|dec vt50h,&#xA;    cols#80, lines#12,&#xA;    bel=^G, clear=\EH\EJ, cr=^M, cub1=^H, cud1=^J, cuf1=\EC,&#xA;    cup=\EY%p1%' '%+%c%p2%' '%+%c, cuu1=\EA, ed=\EJ, el=\EK,&#xA;    ht=^I, ind=^J, ri=\EI,&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Did the VT50h support reverse linefeed?&lt;/p&gt;&#xA;" OwnerUserId="3261" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-03-05T09:58:04.287" Title="VT50 Reverse Linefeed" Tags="&lt;vt52&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5859" PostTypeId="1" AcceptedAnswerId="5860" CreationDate="2018-03-02T23:27:03.543" Score="11" ViewCount="860" Body="&lt;p&gt;I have a Commodore 128, but this is a platform-neutral question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a lot of experience with a lot of operating systems (including DOS, Linux, BSD and AmigaOS) but I never used CP/M much back in the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I have compatible hardware, what are some good resources (books, web sites, etc.) to help me get started?  What software (ideally freely distributable) would be useful to start doing things (e.g. terminals, games, text editors, etc.)?&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2018-03-03T01:32:01.843" Title="Getting started with CP/M" Tags="&lt;cp-m&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5860" PostTypeId="2" ParentId="5859" CreationDate="2018-03-02T23:54:49.427" Score="10" Body="&lt;p&gt;If you are looking for software and other helpful files to download, then:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.classiccmp.org/cpmarchives/&quot; rel=&quot;noreferrer&quot;&gt;http://www.classiccmp.org/cpmarchives/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need a good primer for understanding the system, then the &lt;a href=&quot;http://www.commodoreman.com/Commodore/Library/Prog/CPM%20Primer%201-3.rtf&quot; rel=&quot;noreferrer&quot;&gt;CP/M Primer&lt;/a&gt; by Mike Mantino (originally published by the &lt;em&gt;StarBoard&lt;/em&gt; Journal of the FlagShip/StarShip SIGs) is pretty complete and also geared to the C128.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to show the youngsters what &lt;em&gt;serious&lt;/em&gt; computing was like &quot;back in the day&quot;, then I'd advise you to throw down the CP/M Trifecta.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/WordStar&quot; rel=&quot;noreferrer&quot;&gt;Word Star&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/DBase&quot; rel=&quot;noreferrer&quot;&gt;dBase&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Turbo_Pascal&quot; rel=&quot;noreferrer&quot;&gt;Turbo Pascal&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Beware the C128 is a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2361/why-does-the-commodore-c128-perform-poorly-when-running-cp-m&quot;&gt;bit of a dog&lt;/a&gt; when running CP/M.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="320" LastEditDate="2018-03-03T01:32:01.843" LastActivityDate="2018-03-03T01:32:01.843" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5861" PostTypeId="2" ParentId="5859" CreationDate="2018-03-03T00:09:19.350" Score="9" Body="&lt;p&gt;&lt;a href=&quot;http://www.z80.de/ehome.htm&quot; rel=&quot;noreferrer&quot;&gt;Gaby's CP/M Homepage&lt;/a&gt;, as well as her copy of &lt;a href=&quot;http://www.cpm.z80.de/&quot; rel=&quot;noreferrer&quot;&gt;The Unofficial CP/M Web site&lt;/a&gt; might be an excelent start - at least if you want to dive deep into the internals :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-03-03T00:49:44.060" LastActivityDate="2018-03-03T00:49:44.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5862" PostTypeId="1" AcceptedAnswerId="5867" CreationDate="2018-03-03T05:45:26.393" Score="9" ViewCount="630" Body="&lt;p&gt;I remember playing an Amiga game which was very similar to Rocket League, subject to the technology of the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a two player game with a top-down 2D playing area.  There was a large puck which the players would try to knock into the opposing goal.  Each player controlled a ship, and the ships traveled around on a low friction surface with approximately Newtonian physics.  Players could push the puck with their ship.  My recollection is that you could also shoot it to move it; you could shoot the opposing ship as well, though shots would not destroy it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Players could choose from a selection of ships with different performance parameters (some were small and fast but couldn't push the puck very hard, others were big and strong but not very maneuverable, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Head to head play was possible, not sure if there was any provision for modem play.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember playing this game in the late 80s on an NTSC Amiga 2000.&lt;/p&gt;&#xA;" OwnerUserId="7775" LastActivityDate="2020-10-03T15:51:20.693" Title="Identify this Amiga game: It's just like Rocket League" Tags="&lt;amiga&gt;&lt;identify-this-game&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5863" PostTypeId="2" ParentId="5385" CreationDate="2018-03-03T08:23:40.210" Score="8" Body="&lt;p&gt;My recollection from that era (and a view from Australia, where I recall several thousand units were sold in Australia, as &quot;Sirius 1&quot;) was the overall number worldwide was only in some hundreds of thousands. The period it was on sale was quite limited, from early 1982 until late 1983. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As reported in InfoWorld May 1984, Victor Technologies was reorganising for bankruptcy protection and the article notes that at the time they were &quot;Banking on Victor's survival, or at least on the continued loyalty of Victor 9000 owners (estimated by Victor to number between 100,000 and 150,000)...&quot; [&lt;a href=&quot;https://books.google.com.au/books?id=sy4EAAAAMBAJ&amp;amp;lpg=PA34&amp;amp;dq=victor%209000&amp;amp;pg=PA34#v=onepage&amp;amp;q=victor%209000&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;1&lt;/a&gt;].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In PC Mag Dec 1983 [&lt;a href=&quot;https://books.google.com.au/books?id=05wAGZQlo9QC&amp;amp;lpg=PA255&amp;amp;dq=%22victor%209000%22%203000%20units%20per%20month&amp;amp;pg=PA253#v=onepage&amp;amp;q=%22victor%209000%22%203000%20units%20per%20month&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;2&lt;/a&gt;] there is an estimate that IBM sold 188,000 PC in 1982 and 418,000 sold in 1983. As the dominant player in the market and Victor flagged as number 2 (in Europe at least) then it's numbers would be lower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &quot;Business Computer Systems, Volume 4, Part 1&quot;, written in 1985, on page 31 it notes &quot;To date, Victor 9000 sales in Europe, where the company goes by the name of Sirius exceed 100,000 units)&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on these references I believe we could safely bracket the sales at less than 200,000 units, and likely closer to 150,000.&lt;/p&gt;&#xA;" OwnerUserId="8125" LastActivityDate="2018-03-03T08:23:40.210" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5864" PostTypeId="1" CreationDate="2018-03-03T09:13:11.240" Score="3" ViewCount="355" Body="&lt;p&gt;While digging through a classic Mac 68k disassembly I got to the point where I need to know more about the &quot;Boot Globals&quot; residing in lowmem's system global variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;BootGlobPtr&lt;/em&gt; lives at $DDC, that's for sure, and it points to different locations on different machines - that's what a pointer was meant for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far so good, but what's the structure of the data living there? Here's some sample of its usage:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MOVEA.L BootGlobPtr,A1  ; $DDC points to $04FFFFE4 on a SE/30, $04FFFFF4 on IIci&#xA;ADDA.L  -16(A1),A1     &#xA;MOVE.L  20(A1),D0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Besides &lt;a href=&quot;https://github.com/cebix/macemu/blob/master/cxmon/src/mon_lowmem.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;some Emulator source&lt;/a&gt;, I can't find anything on the web providing more insight... Does anyone in here have a hint or can remember where to look it up?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers and thanks for helping!&lt;/p&gt;&#xA;" OwnerUserId="8141" LastActivityDate="2018-03-05T05:52:18.620" Title="68k macintosh lowmem system globals" Tags="&lt;apple-macintosh&gt;&lt;mac-os-classic&gt;&lt;operating-system&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5865" PostTypeId="2" ParentId="1452" CreationDate="2018-03-03T11:31:00.957" Score="4" Body="&lt;p&gt;Back in the day, it was &lt;strong&gt;VERY&lt;/strong&gt; common to encounter an IBM compatible which had only a single floppy drive, invariably designated as drive A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you imagine it phased us?  :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution was dead easy. You inserted the floppy in drive A and issued the DOS command &lt;code&gt;COPY A: B:&lt;/code&gt; which resulted in the system prompting the user to swap disks. It read disk 1 from A:, then paused awaiting user-interaction, then wrote back to disk 2 in A: (i.e. it thought the floppy drive was now B: ).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only expensive models had two floppy drives. No one wanted to pay for two, since the above solution was dead easy on the cheaper single-drive models.&lt;/p&gt;&#xA;" OwnerUserId="7778" LastActivityDate="2018-03-03T11:31:00.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5866" PostTypeId="2" ParentId="3132" CreationDate="2018-03-03T12:42:39.373" Score="3" Body="&lt;p&gt;You go right ahead and overwrite the physical floppies. No worries. The internet still swarms with copies of the old DOS boot disks, which you can download at need and recreate the version of DOS you need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's my favorite site -&lt;br&gt;&#xA;  &lt;a href=&quot;http://www.bootdisk.com/bootdisk.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.bootdisk.com/bootdisk.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Get a decent disk imaging program to write image files to floppy:&lt;br&gt;&#xA;  &lt;a href=&quot;http://www.winimage.com/winimage/winima61.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.winimage.com/winimage/winima61.zip&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7778" LastActivityDate="2018-03-03T12:42:39.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5867" PostTypeId="2" ParentId="5862" CreationDate="2018-03-03T14:07:37.010" Score="9" Body="&lt;p&gt;You may be thinking of Hyperbowl by Mastertronic. There's a &lt;a href=&quot;https://www.youtube.com/watch?v=f_XxQUaehWU&quot; rel=&quot;noreferrer&quot;&gt;youtube video of the Atari ST version in action&lt;/a&gt;, which other than the improved graphics is very similar to the Spectrum version I had.  I've found references to an Amiga version existing, but no videos or images of it that I could find.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A free streaming copy of the Spectrum version is available on &lt;a href=&quot;https://archive.org/details/zx_Hyperbowl_1986_Mastertronic&quot; rel=&quot;noreferrer&quot;&gt;archive.org&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-03-03T14:07:37.010" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5868" PostTypeId="2" ParentId="5864" CreationDate="2018-03-03T14:56:54.007" Score="2" Body="&lt;p&gt;Your description leaves me a little confused about the global variables you are actually searching for. Code in the ROM sets up a whole bunch of global values, and these are only sparsely documented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This archived copy of the &lt;a href=&quot;https://archive.fo/thHfG&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mac Almanac II&lt;/a&gt; lists all the global variables. The original source of this information is the Linux/m68k for Mac project.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-03-03T14:56:54.007" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5869" PostTypeId="2" ParentId="5854" CreationDate="2018-03-03T15:34:22.797" Score="6" Body="&lt;p&gt;The IBM System/360 introduced in 1965 used the EBCDIC character set which included tilde.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 1963 edition of the ASCII standard did not include the tilde character.  The 1965 edition included it, but it was at the position now occupied by &quot;\&quot; (backslash).  The 1967 edition of ASCII moved tilde to position 126 where it remains today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, it is fair to say that the tilde began to appear on standard keyboards in 1965.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-03-03T15:34:22.797" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5870" PostTypeId="2" ParentId="5854" CreationDate="2018-03-03T15:55:02.720" Score="5" Body="&lt;p&gt;Tilde did apear as early as the late 1880s on typewriter and typseting keyboards.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-03-03T15:55:02.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5871" PostTypeId="1" CreationDate="2018-03-03T18:38:30.117" Score="2" ViewCount="545" Body="&lt;p&gt;Which language and/or server software did Google use for its initial version?&lt;/p&gt;&#xA;" OwnerUserId="297" LastActivityDate="2018-03-04T04:24:12.553" Title="How was the first working version of Google written?" Tags="&lt;programming&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5872" PostTypeId="2" ParentId="5855" CreationDate="2018-03-03T18:43:06.327" Score="11" Body="&lt;p&gt;Phoenix Technologies developed its ROM BIOS from IBM's using a cleanroom approach:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To develop its ROM BIOS software, Phoenix claims in its press release&#xA;  that it used a process that would assure that none of IBM's original&#xA;  code was wittingly duplicated. One group at Phoenix examined the BIOS&#xA;  software documented in IBM's &lt;em&gt;Technical Reference Manual&lt;/em&gt;, and wrote a&#xA;  set of specifications that described how the program functioned&#xA;  without including any examples of actual code. This description was&#xA;  passed on to a single programmer who tried to write code that&#xA;  fulfilled its specifications.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://books.google.com/books?id=Bwng8NJ5fesC&amp;amp;lpg=PA6&amp;amp;pg=PA56#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;PC Mag, Jul 10, 1984, p. 56&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The programmer was not identified but &quot;He was a TI-9900 programmer&quot; according to the article.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-03-03T18:43:06.327" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5873" PostTypeId="2" ParentId="5871" CreationDate="2018-03-03T19:30:14.803" Score="8" Body="&lt;p&gt;When Google was just a research project at Stanford headed up by Larry Page, it was known as &lt;strong&gt;BackRub&lt;/strong&gt;. This name alluded to the fact that the PageRank algorithm being developed relied on traversing backlinks to rank each indexed search result by something related to its popularity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original BackRub can still be viewed via the WayBack Machine. This &lt;a href=&quot;http://web.archive.org/web/19980207005959/http://backrub.stanford.edu:80/backrub.html&quot; rel=&quot;noreferrer&quot;&gt;early version from 1998&lt;/a&gt; indicates that the project was implemented in Java and Python and ran on Sun Ultra servers as well as Linux machines on Intel Pentiums hardware.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="599" LastEditDate="2018-03-04T04:24:12.553" LastActivityDate="2018-03-04T04:24:12.553" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5875" PostTypeId="1" CreationDate="2018-03-03T21:11:04.283" Score="3" ViewCount="95" Body="&lt;p&gt;Inspired by another post here, I recently purchased a Telebit QBlazer modem and am having some fun with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It did not, however, come with a user manual, nor can I find one online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the absence of a manual, can someone provide me with specific AT commands that would, e.g. control connection rate or handle any options for this modem that tend to be proprietary?&lt;/p&gt;&#xA;" OwnerUserId="6986" LastEditorUserId="6986" LastEditDate="2018-03-03T21:33:09.053" LastActivityDate="2018-03-04T01:50:37.970" Title="Telebit QBlazer modem manual" Tags="&lt;modem&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5876" PostTypeId="2" ParentId="5875" CreationDate="2018-03-03T21:26:24.980" Score="1" Body="&lt;p&gt;Telebit modems were rather consistent in their command abilities. So using the &lt;a href=&quot;http://bitsavers.trailing-edge.com/communications/telebit/90238-01_Telebit_T3000_and_WorldBlazer_Modem_Reference.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1994 TrailBlazer 3000/WorldBlazer manual&lt;/a&gt; might prove helpful. Of course, everything above V.32 (or V.32bis for the QBlazer+) needs to be ignored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As always, Bitsaver is your friend for old manuals (and darn long time stable :)) Listing the options as requested would be way outside the scope of an acceptable answer, as there are literally hundreds of options.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-03-04T01:50:37.970" LastActivityDate="2018-03-04T01:50:37.970" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5877" PostTypeId="1" AcceptedAnswerId="5878" CreationDate="2018-03-04T07:27:42.167" Score="18" ViewCount="5160" Body="&lt;p&gt;What was the first commercial game sold for use on IBM/MS/PC DOS after the IBM August 12, 1981 release.&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2018-03-04T08:13:05.903" LastActivityDate="2018-03-06T15:52:22.923" Title="First commercial DOS game?" Tags="&lt;history&gt;&lt;ms-dos&gt;&lt;software&gt;&lt;ibm-pc&gt;&lt;gaming&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5878" PostTypeId="2" ParentId="5877" CreationDate="2018-03-04T10:16:23.100" Score="33" Body="&lt;p&gt;The first game sold for use on the IBM PC was &lt;a href=&quot;http://www.mobygames.com/game/pc-booter/microsoft-adventure&quot; rel=&quot;noreferrer&quot;&gt;Microsoft Adventure&lt;/a&gt;, which was available on the day the IBM PC was released (it was part of the launch, &lt;a href=&quot;https://archive.org/stream/byte-magazine-1981-10/1981_10_BYTE_06-10_Local_Networks#page/n33/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;along with VisiCalc, Easywriter etc.&lt;/a&gt;). It was developed by Gordon Letwin (later of OS/2 fame) in 1979, based on the Colossal Cave mainframe game. It didn’t run on DOS though, it was a “booter” — you booted the computer with the game floppy, and it took care of everything, without a separate operating system. You can see it in action on &lt;a href=&quot;https://archive.org/details/MicrosoftAdventure_DOS_1981&quot; rel=&quot;noreferrer&quot;&gt;the Internet Archive&lt;/a&gt;. (Booters were quite common in those days, on the PC as well as on other micros; see &lt;a href=&quot;http://www.mobygames.com/browse/games/pc-booter/&quot; rel=&quot;noreferrer&quot;&gt;Mobygames’ list of PC booters&lt;/a&gt; for other examples.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on &lt;a href=&quot;http://www.mobygames.com/browse/games/dos/1981/&quot; rel=&quot;noreferrer&quot;&gt;Mobygames’ list of DOS games released in 1981&lt;/a&gt;, the likeliest candidate for first commercial &lt;em&gt;DOS&lt;/em&gt; game is &lt;a href=&quot;http://www.mobygames.com/game/dos/arithmetic-games-set-1&quot; rel=&quot;noreferrer&quot;&gt;IBM’s Arithmetic Games Set 1&lt;/a&gt;. Its contents suggest it was in development by August 1981, and probably complete not long after; the latest files on the original disk are dated September 23, 1981. Strictly speaking it’s a BASIC game, so it could have run using only the PC’s built-in ROM BASIC, without DOS; but as sold it used DOS. It’s also available to play on &lt;a href=&quot;https://archive.org/details/msdos_Arithmetic_Games_Set_1_1981&quot; rel=&quot;noreferrer&quot;&gt;the Internet Archive&lt;/a&gt;. It’s not obvious whether any other games were released commercially earlier than that — some games were published in magazines and later published as commercial games. (Games published in magazines are arguably commercial games too, but it’s not quite the same.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-03-04T22:15:48.507" LastActivityDate="2018-03-04T22:15:48.507" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5880" PostTypeId="2" ParentId="5833" CreationDate="2018-03-04T17:38:00.310" Score="5" Body="&lt;p&gt;The built-in PC speaker, although a very &quot;basic&quot; and inexpensive part, could render sound/music/voice about as well as any portable audio device (pocket radio, mini cassette recorder/player, etc.), clock-radio, or speakerphone of the time. That is to say that mid-range such as speech could be clearly understood.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What made built-in PC sound so poor/limited was the fact that the driving signal was a simple on/off (1-bit digital), not analog (variable voltage) fed through a low pass filter (to &quot;round off&quot; the &quot;square&quot; edges of the input waveform). The upper limit of how fast things could happen was determined by the system clock, which in the original system was 4.77MHz (divided down to the 1.19 MHz clock driving the timer chip which controlled the speaker). As a result, sounds could only be crudely approximated. See page 2-22 of the reference manual (with schematics) I found here: &lt;a href=&quot;http://www.minuszerodegrees.net/manuals/IBM_5150_Technical_Reference_6025005_AUG81.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.minuszerodegrees.net/manuals/IBM_5150_Technical_Reference_6025005_AUG81.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing a little math... the 1.19MHz clock rate limits the 1-bit audio to about 27 possible amplitude levels at 44,000 samples/sec (for about 28dB SNR and an audio frequency range up to 20kHz, assuming the CPU could keep up), or an equivalent of 6-bit audio at about 18,000 samples/sec (for about 36dB SNR and an audio frequency range up to about 8.5kHz), and so forth. A decent sound card should have equalled CD fidelity - 16bit sampling at 44k samples/sec (for about 96dB SNR and an audio frequency range up to 20kHz, on each of two channels).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bear in mind that the only function the operating system ever offered in relation to the speaker was to make a pre-defined beep sound. It was offered via an O/S call as a simple beep, and used by the BIOS to signal to the user (via sequences of long and short beeps, sort of like Morse code) if the start-up diagnostics encountered any issues like missing keyboard, stuck keys, missing boot device, memory test failure, etc.. Essentially, the role of the speaker was simply a means to alert the user to something, and a beep does the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM PC was designed to be a relatively inexpensive tool to run business applications - word processing, spreadsheets, databases, and such (even though a usable system cost as much as a car). Rendering speech was probably seen as a capability unattainable for the target price point, and playing music was not within the scope of the business market it was targeted to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What IBM probably failed to anticipate is the interest the PC would attract in the home/hobby market due to the &quot;openness&quot; of the system (they published everything, which is what ignited the clone market). It was this spin-off clone market that revealed shortcomings in the original design, but also the extensibility to address them. However, third-party developers of hardware and software had to maintain compatibility with the base design, so true audio solutions (as well as better video, networking, extended/expanded memory etc.) had to be offered as add-on cards.&lt;/p&gt;&#xA;" OwnerUserId="4561" LastEditorUserId="4561" LastEditDate="2018-03-06T01:22:34.897" LastActivityDate="2018-03-06T01:22:34.897" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5881" PostTypeId="2" ParentId="5877" CreationDate="2018-03-04T21:33:41.783" Score="7" Body="&lt;p&gt;Two other early &quot;booters&quot; were Microsoft's &lt;a href=&quot;https://archive.org/details/msdos_Microsoft_Decathlon_1982&quot; rel=&quot;nofollow noreferrer&quot;&gt;Decathlon&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Microsoft_Flight_Simulator#Flight_Simulator_1.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Flight Simulator&lt;/a&gt;. &lt;a href=&quot;https://www.dosgamesarchive.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;This site&lt;/a&gt; has a host of free DOS games for download, as does &lt;a href=&quot;http://www.dosgames.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;, and &lt;a href=&quot;https://classicreload.com/microsoft-decathlon.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this site&lt;/a&gt; allows visitors to play Decathlon in-browser.&lt;/p&gt;&#xA;" OwnerUserId="8147" LastEditorUserId="79" LastEditDate="2018-03-06T15:52:22.923" LastActivityDate="2018-03-06T15:52:22.923" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5882" PostTypeId="2" ParentId="1858" CreationDate="2018-03-05T04:13:43.937" Score="10" Body="&lt;p&gt;Computer development wasn't necessarily &quot;top secret&quot; as is commonly said about anything that has to do with the Soviet Union. The engineers there used the same methods as other companies in Taiwan. Z80 is probably the most cloned CPU, because of its popularity and therefore wide compatibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Access to these computers weren't limited to &quot;spies who purchased them under a false identity, and smuggled them into the socialist bloc&quot;, western computers, radios/media players, instruments... were purchasable, and often officially, in the USSR. In the 70's, schools had computer classes that taught IBM technology, and ones that taught domestic computer technology. This cooperation was paused in 1979 during the Afghan war, and resumed in the 80's focused on the IBM PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a surprisingly abundant number of computer engineers back then who worked on developing microprocessors and microcontrollers. The hardware would be cloned, and later improved and modified for specific needs like the ability to work under extreme temperatures, or the introduction of other unusual hardware to communicate with those microprocessors/controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally the hardware scene was not suffering in terms of being able to keep up with needs, it's the software that suffered. Homemade &quot;moderate&quot; OS's were built by the users, but MS-DOS was a very desired product back then. This made the 8086 clone (KR1810VM86) CPU a valuable item. Afterall, software is easier to import than hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the Soviet computer scene gets a lot less credit than it deserves. Their clones were a very efficient way to incorporate computers into homes, schools, and job related needs like military, communications, and of course space, and with less evidence; hospitals and banking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I own a working &quot;-Sintez-&quot; computer, made in the Signal factory, Moldovan SSR 1989. Some of them came with a KR1858VM1 (z80 clone) cpu, some with the German UA 880, but my father also installed a KR580VM80A (i8080A clone) and the computer is able to use both. The consumer tech was usually easily customizable, and hobbyists knew what they were doing (overclocking, installing disk drives, more ram).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A couple of interesting reads:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Soviet_microprocessors&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;List of Soviet microprocessors&quot;&gt;List of Soviet Microprocessors (Wikipedia)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Soviet_integrated_circuit_designation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nomenclature for the CPU names&lt;/a&gt;&#xA;(the long Kx000yy00 names, and what they mean)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.leningrad.su/museum/main.php?lang=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Museum of Soviet digital tech&lt;/a&gt;&#xA;(very impressive collection, almost everything I know I am able to find here, as well as specs and origin)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://translate.googleusercontent.com/translate_c?depth=1&amp;amp;hl=en&amp;amp;ie=UTF8&amp;amp;prev=_t&amp;amp;rurl=translate.google.com&amp;amp;sl=ru&amp;amp;sp=nmt4&amp;amp;tl=en&amp;amp;u=http://www.leningrad.su/museum/show_calc.php%3Fn%3D398%26lang%3D1%26test%3D0&amp;amp;xid=25657,15700021,15700105,15700124,15700149,15700168,15700201&amp;amp;usg=ALkJrhgp2NoePOT4eRKg6dOIZnUOTjLoNA&quot; rel=&quot;nofollow noreferrer&quot;&gt;-Sintez-&lt;/a&gt; the computer I mentioned, but different colors&lt;/p&gt;&#xA;" OwnerUserId="8150" LastEditorUserId="4692" LastEditDate="2018-03-07T15:52:03.633" LastActivityDate="2018-03-07T15:52:03.633" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5883" PostTypeId="1" AcceptedAnswerId="5899" CreationDate="2018-03-05T04:15:43.897" Score="7" ViewCount="742" Body="&lt;p&gt;In the days of mainframes and minicomputers, a common user interface was a serial terminal where each keystroke was sent to the computer, which could respond with an update to the contents of the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At some point, IBM at least - maybe also other manufacturers - invented smart terminals, which had enough processing power to handle user interaction to the extent of filling out an entire form; only when that was done, did the contents get sent to the computer. This increased the number of concurrent users a computer could handle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me that a smart terminal would need a microprocessor, so I would expect them to start showing up in the early seventies, but I'm prepared to be corrected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When did they arrive on the scene?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-05-11T03:28:01.217" Title="When did smart terminals arrive?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;terminal&gt;&lt;mainframe&gt;&lt;minicomputers&gt;" AnswerCount="5" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5884" PostTypeId="2" ParentId="5883" CreationDate="2018-03-05T04:24:29.237" Score="6" Body="&lt;p&gt;Arguably the prototypical smart terminal was the IBM 3270. According to this link &lt;a href=&quot;http://www-03.ibm.com/ibm/history/exhibits/dpd50/dpd50_chronology4.html&quot; rel=&quot;noreferrer&quot;&gt;IBM History&lt;/a&gt; the 3270 was first demonstrated on May 23, 1971. While the Intel 4004 was shipping already at that time, the 3270 didn't use it - and the 4004 really wasn't powerful enough to run a terminal like the 3270.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2018-03-05T04:24:29.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5885" PostTypeId="2" ParentId="5864" CreationDate="2018-03-05T05:52:18.620" Score="3" Body="&lt;p&gt;The structure of StartGlobals (aka BootGlobs) is not publicly documented. However, a widely disseminated leak of System 7.1 source code includes the following definition of the structure in &lt;code&gt;Internal/Asm/BootEqu.a&lt;/code&gt;. As best I can tell, this information is primarily used in the early boot process and in certain low-level drivers.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;StartGlobals        RECORD  {sgRamTable},DECR&#xA;sgTestSpace         ds.l    2                   ; 2 longs for diagnostics to trash&#xA;sgRamTable          equ     *                   ; table of start/size physical RAM, -1 ended&#xA;sgMaxChunks         equ     8                   ; maximum # RAM chunks we can accomodate&#xA;sgWarmStart         ds.l    1                   ; warm start constant&#xA;sgTopOff            ds.l    1                   ; offset to top of boot globals area&#xA;sgAllocOff          ds.l    1                   ; offset to bottom of allocated area&#xA;sgPhysicalTableOff  ds.l    1                   ; offset to physical space table (for VM et al)&#xA;sgTotalRAM          ds.l    1                   ; total RAM in the system&#xA;sgPhys2Log          ds.l    1                   ; physical to logical offset for MMU tables&#xA;sgMMFlags           ds.b    1                   ; memory manager start mode flags&#xA;sgTypeMMU           ds.b    1                   ; type of MMU&#xA;sg24Info            ds.b    MMUConfigInfo       ; 24 bit mode MMU info&#xA;sg32Info            ds.b    MMUConfigInfo       ; 32 bit mode MMU info&#xA;sgRamDiskSize       ds.l    1                   ; size of RAM disk, if any                      &amp;lt;5&amp;gt; rb&#xA;sgRamDiskBase       ds.l    1                   ; logical base of RAM disk, if any              &amp;lt;5&amp;gt; rb&#xA;sgScratch           ds.l    4                   ; 4 longs of scratch space                      &amp;lt;SM11&amp;gt;&#xA;sgEDiskStealFlag    ds.b    1                   ; 1 byte flag to tell INIT code to steal RAM for the EDisk  &amp;lt;SM7&amp;gt;&#xA;sgAlign             ds.b    1                   ; alignment&#xA;sgBottom            equ     *                   ; last field&#xA;                    ENDR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;MMUConfigInfo&lt;/code&gt; structure referenced in &lt;code&gt;sg24Info&lt;/code&gt; and &lt;code&gt;sg32Info&lt;/code&gt; is, in turn, defined as follows in &lt;code&gt;Internal/Asm/MMUEqu.a&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MMUConfigInfo   RECORD  0               ; MMU configuration info&#xA;theCRP          ds.l    1               ;    start of the 64-bit CRP on 020/030's           &amp;lt;4&amp;gt;&#xA;theSRP          ds.l    1               ;    start of the 32-bit SRP on 040's               &amp;lt;4&amp;gt;&#xA;theTC           ds.l    1               ;    the TC (Translation Control Register) value&#xA;                                        ;    (the lsw contains the TC on a 68040)           &amp;lt;3&amp;gt;&#xA;theTT0          ds.l    1               ;    the {I}TT0 (Transparent Translation Reg 0) value&#xA;theTT1          ds.l    1               ;    the {I}TT1 (Transparent Translation Reg 1) value&#xA;MMUInfoSize     equ     *-MMUConfigInfo ;    size of an MMU info record&#xA;                ENDR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="461" LastActivityDate="2018-03-05T05:52:18.620" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5886" PostTypeId="1" AcceptedAnswerId="5901" CreationDate="2018-03-05T09:29:09.063" Score="2" ViewCount="651" Body="&lt;p&gt;I used to play this athletics game on a really old PC. I don't remember much about it since I was probably 4-5 years old by then (1990), but what I still know is this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It was monochrome.&lt;/li&gt;&#xA;&lt;li&gt;There were at least track running (two players pressing buttons repeatedly) and pole vaulting (you had to hit space to jump and the head of the pole vaulter was just a square box, this always disturbed me), others I can't remember.&lt;/li&gt;&#xA;&lt;li&gt;The year I wrote (1990) might not be that helpful, since my dad might have used some at that time already old equipment.&lt;/li&gt;&#xA;&lt;li&gt;I don't &lt;em&gt;think&lt;/em&gt; it was Microsoft Decathlon.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It was the first game I ever played, so I really like to know if anyone can help me identify it.&lt;/p&gt;&#xA;" OwnerUserId="8155" LastEditorDisplayName="user6464" LastEditDate="2018-10-17T05:52:22.917" LastActivityDate="2018-11-04T16:15:11.317" Title="What was this old athletics game I played?" Tags="&lt;identify-this-game&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5887" PostTypeId="2" ParentId="5833" CreationDate="2018-03-05T09:53:23.023" Score="0" Body="&lt;p&gt;One further point is that the sound card was an easy way to add a joystick port.  This was shared with the midi connector.  That was one of the main reasons I bought a second hand SoundBlaster 1.5 for X-Wing.  &lt;/p&gt;&#xA;" OwnerUserId="4171" LastActivityDate="2018-03-05T09:53:23.023" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5888" PostTypeId="2" ParentId="5858" CreationDate="2018-03-05T09:58:04.287" Score="2" Body="&lt;p&gt;It seems that this is a mistake from the terminfo entry (it wouldn't be the first).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only difference between the VT50 and VT50H is the keypad, not the command set, and another document from DEC: &lt;a href=&quot;http://www.bitsavers.org/www.computer.museum.uq.edu.au/pdf/DEC-00-HVTUA-A-D%20VT50%20Video%20Terminal.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;VT50 user's manual&lt;/a&gt; (issued in 1975), clearly indicates, consistently with the document you mentioned, that &quot;ESC I&quot; has no effect on the VT50 (see page 19).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no reason &lt;em&gt;not&lt;/em&gt; to trust both these documents from DEC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally have, on the other hand, more than one reason to distrust a terminfo entry.&lt;/p&gt;&#xA;" OwnerUserId="4614" LastActivityDate="2018-03-05T09:58:04.287" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5889" PostTypeId="2" ParentId="5886" CreationDate="2018-03-05T11:55:53.203" Score="3" Body="&lt;p&gt;If you aren't sure it was on MS-DOS, it may have been the original &lt;a href=&quot;https://en.wikipedia.org/wiki/Summer_Games_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Summer Games&lt;/a&gt; by Epyx, which had pole vaulting, sprinting and several other events.  It was available on almost everything &lt;em&gt;except&lt;/em&gt; MS-DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a &lt;a href=&quot;https://youtu.be/_8v-P6bsIOM?t=24&quot; rel=&quot;nofollow noreferrer&quot;&gt;sample&lt;/a&gt; of the Atari 8-bit version, including the pole vault 24 seconds in.&lt;/p&gt;&#xA;" OwnerUserId="7775" LastEditorUserId="79" LastEditDate="2018-10-19T07:03:09.500" LastActivityDate="2018-10-19T07:03:09.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5890" PostTypeId="2" ParentId="5843" CreationDate="2018-03-05T12:05:21.080" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did the PDP-8 not distinguish between data and address widths like the microprocessors?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You have your question the wrong way around. Up until the advent of microprocessors, it was quite normal for addresses and data to be the same size. When they weren't the same size, the address was normally &lt;em&gt;smaller&lt;/em&gt; than the data. So the PDP-11 has 16 bit addresses and 16 bit data (even though it was byte addressed). The DEC 10 had 36 bit data and 18 bit word addresses. The IBM system/360 had 32 bit data and byte addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for this is that, by today's standards memory was expensive. A typical computer used &lt;a href=&quot;https://en.wikipedia.org/wiki/Magnetic-core_memory&quot; rel=&quot;noreferrer&quot;&gt;magnetic core memory&lt;/a&gt; which consists of little magnetic doughnuts threaded on a lattice of very fine wires. The manufacture of this stuff was quite intricate, it was almost always done by hand. IIRC they sometimes used lace makers to weave the wire lattice. So, for Digital, there was no point in having more than 256 k-words in its DEC 10 because nobody would have been able to afford the memory. The four gigabytes theoretically addressable on the system 360 was unimaginable back in the day. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once they figured out how to do large scale integrated circuits, everything changed. Memory became much  cheaper, relatively speaking, so did processors. However, if you wanted to make a computer that an ordinary person could afford, you still had to keep costs down, hence the 8-bit microprocessor. Having only 8 bits of data kept the transistor count down and made the packaging and external data paths much cheaper to manufacture. Unfortunately, 8 bits is not a practical size for a memory address which is why they went to 16 bits for addresses. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2018-03-05T12:05:21.080" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5891" PostTypeId="1" AcceptedAnswerId="5892" CreationDate="2018-03-05T14:05:29.203" Score="4" ViewCount="1704" Body="&lt;p&gt;In the early days of the Internet, Windows users had to install an application called &quot;Trumpet Winsock&quot; in order to use Internet apps like e-mail, FTP, WWW, etc. There were competitors, but Trumpet seemed to be the most popular. Some time shortly thereafter, this all became part of Windows and Trumpet seemed to vanish. How did Microsoft acquire or replace them?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-03-05T18:09:26.100" LastActivityDate="2018-03-06T10:34:46.970" Title="How did Microsoft take over Winsocks (Windows Sockets)?" Tags="&lt;history&gt;&lt;windows-3.x&gt;&lt;network&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5892" PostTypeId="2" ParentId="5891" CreationDate="2018-03-05T14:22:23.483" Score="8" Body="&lt;p&gt;Microsoft didn’t take over Winsock. Winsock, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Winsock&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows socket API&lt;/a&gt;, is a socket API (similar to BSD sockets) which was designed by a number of engineers (including two from Microsoft) following a bird-of-a-feather session at fall 1991 Interop conference, and released in mid-1992. Trumpet Winsock is an implementation of a TCP/IP stack (including SLIP and PPP for dial-up) supporting the Winsock API; other implementations were available, but Trumpet ended up being the most popular in the mid-nineties (most ISPs provided it as part of their connection kits, alongside or instead of &lt;a href=&quot;https://en.wikipedia.org/wiki/KA9Q&quot; rel=&quot;nofollow noreferrer&quot;&gt;KA9Q&lt;/a&gt; which was used under DOS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Winsock-compatible applications, such as Netscape Navigator and Eudora, were written to use the Winsock API, and worked with any compliant implementation of Winsock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two sets of Microsoft tools ended up replacing Trumpet Winsock and other Winsock implementations in Windows, albeit only Windows for Workgroups version 3.11 (which was very, very popular before Windows 95 and ended up largely replacing all previous versions of Windows):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;in early 1994, &lt;a href=&quot;http://www.gaby.de/ftp/pub/win3x/archive/softlib/wfwtcp.exe&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft’s implementation of TCP/IP for WfWG 3.11&lt;/a&gt; — this used Windows for Workgroups’ support for network cards, and added TCP/IP support on top, but lacked any support for dial-up, making it mostly useless for home users;&lt;/li&gt;&#xA;&lt;li&gt;in April 1996, &lt;a href=&quot;https://en.wikipedia.org/wiki/Internet_Explorer_2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Internet Explorer 2&lt;/a&gt; for Windows 3.1, which included the Microsoft TCP/IP stack and a dialler, providing support for dial-up connections to the Internet.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Windows 95, either service release 1 and later (February 1996), or the first release with the Plus! pack, installed a TCP/IP stack and dialler as standard. The TCP/IP stack &lt;em&gt;shipped&lt;/em&gt; with the first release of Windows 95, but wasn’t installed by default. Windows NT 3.5 also included Winsock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So Microsoft made Trumpet Winsock and co. obsolete by integrating the corresponding features in the operating system, late in the game for Windows 3, and as standard in Windows 95. Microsoft’s implementation of the TCP/IP stack was independent of Trumpet Winsock’s. &lt;a href=&quot;http://tangentsoft.net/wskfaq/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Winsock Programmer’s FAQ&lt;/a&gt; has a detailed article on &lt;a href=&quot;http://tangentsoft.net/wskfaq/articles/history.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the history of Winsock&lt;/a&gt;, including an explanation of why it took so long for Microsoft to build in support for TCP/IP into its operating systems; &lt;a href=&quot;http://www.faqs.org/faqs/windows/winsock-faq/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the &lt;code&gt;alt.winsock&lt;/code&gt; FAQ&lt;/a&gt; is also interesting to read in this context.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-03-06T10:34:46.970" LastActivityDate="2018-03-06T10:34:46.970" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5893" PostTypeId="1" CreationDate="2018-03-05T20:28:01.193" Score="23" ViewCount="4373" Body="&lt;p&gt;Inspired by &lt;a href=&quot;https://gamedev.stackexchange.com/q/154981/76961&quot;&gt;this GameDev question&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;3D rendering is expensive. With 2D games it's easy to not re-write the buffers every frame, like in Super Mario Bros where the PPU is instructed to render the level with an offset:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/gOwI9.png&quot; alt=&quot;&quot;&gt;&lt;br&gt;&#xA;&lt;sup&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1899/278&quot;&gt;Image source&lt;/a&gt;.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With 3D games, it's harder to do this. However, &lt;a href=&quot;https://gamedev.stackexchange.com/q/154981/76961#comment275713_154981&quot;&gt;this comment&lt;/a&gt; suggests that it was done:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;@RussellBorogove Well, not all 3D games. It has to do with how constrained the camera is. FPS games usually do have to redraw everything (though early 3D FPSes still didn't - if you constrain the design a bit, you can save lots of pixels from being redrawn). A game with fixed camera, or a clever use of orthographic projection, can keep many things unchanged - there just isn't any reason now that we all have 3D hardware. And even if you redraw every pixel, it doesn't necessarily mean rendering the meshes again and again - they can be cached as 2D sprites. It's all about the constraints. – &lt;a href=&quot;https://gamedev.stackexchange.com/users/42225/luaan&quot;&gt;Luaan&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What are these clever tricks that allowed some 3D games to be rendered so quickly on the hardware?&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2019-11-12T14:24:59.190" Title="What techniques were used to reduce the required re-rendering in 3D programs?" Tags="&lt;graphics&gt;" AnswerCount="6" CommentCount="5" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5894" PostTypeId="2" ParentId="5893" CreationDate="2018-03-05T20:46:17.737" Score="15" Body="&lt;p&gt;Many games that &quot;looked&quot; 3d simply placed pre-rendered 2d pictures of 3d objects onto the screen.  For example, a typical first-person dungeon crawler might show a player a view something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;\         /&#xA;|_       /&#xA;| |\ ___|&#xA;| | |   |&#xA;| | |___|&#xA;|_|/    |&#xA;|        \&#xA;/         \&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If it would be possible to see a particular kind of wall surface at one of four different distances from the player on the left, four distances on the right, and four distances up ahead, a game would have twelve pictures of that wall surface--one for each of those circumstances where it might be shown.  If the walls include 3d features like alcoves, different views would often be drawn or painted by a human artist, then scanned and scaled, and finally cleaned up by hand.  At no point would any actual 3d rendering be involved (except by the human artist).&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-03-05T20:46:17.737" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5895" PostTypeId="2" ParentId="5883" CreationDate="2018-03-05T21:00:07.183" Score="2" Body="&lt;p&gt;A typical video display terminal includes a means of taking received bytes and storing them into a buffer while the contents of that buffer are being repeatedly read out and used to drive a CRT (typically by generating an associated sequence of pixels).  Although typically the only things sent to a remote device would be characters typed on the keyboard, as they are typed, a terminal may include a means of sending the character at the cursor position to a remote device and advancing the cursor.  This does not require very sophisticated hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One such device I've used (probably in the late 1970s, though it may have been built before that) was connected to the on-line library cataloging system (OCLC--I forget exactly what words that stood for).  During normal operation, typed characters would be sent to the display.  Pushing SEND would lock out the keyboard, home the cursor, wait for a polling signal, and then start characters off the display and sending them until an end-of-transmission character was reached.  The system would then await a response from the remote system and send it to the display, after which it would unlock the keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While such devices could have used a microprocessor or small computer to drive it, they could also be built without them.  Such devices fell somewhere between what would typically be called &quot;dumb terminals&quot; and what would typically have been called &quot;smart terminals&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note also, btw, that terminals which included some form of buffering (but no other intelligence) could have relatively unsophisticated computers to be shared more efficiently than terminals which didn't.  Some computer systems like the HP-2000 had a front-end which would buffer lines of data from dumb terminals and then send entire lines to the main computer at its convenience, but the front end necessary to interface a bunch of terminals was a computer almost as big as the &quot;main&quot; one.  Terminals which included their own buffering could eliminate the need for such a front end.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2018-03-05T21:05:26.127" LastActivityDate="2018-03-05T21:05:26.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5897" PostTypeId="2" ParentId="5893" CreationDate="2018-03-05T21:48:39.977" Score="35" Body="&lt;p&gt;A very broad question, so a random dump of thoughts:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Elite approximates solid objects through convex objects. Because every game object (other than the missile) is convex that means by definition that every hypothetical ray of vision from your eye to the object other than generate edge cases must pass through it exactly twice: once through a front face and once through a back. So just eliminating the back faces makes any single object appear to be solid when set on its own against a black background. Back-face culling is a standard technique that remains in use as it cuts the work for any closed object, but in Elite the further requirement of object convexity helps to give the illusion of solidness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Elite and many other games also use split-precision arithmetic. Individual objects are small but in a much larger space. So objects themselves have local geometry stored in 8 bits and rotated using 8-bit arithmetic. The object centre exists in a 16-bit (or larger) space and is subject to 16-bit arithmetic. Having located the centre in 16-bit space, sign extend and add the 8-bit results to get all intermediate results in 16-bit while having saved a lot on arithmetic. There are cheap and compact lookup-table approaches for 8-bit multiplication based on 8-bit lookup tables and simple addition so the saving is very substantial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plain vector games like Elite often do partial screen updates essentially by accident. It's too expensive to clear a whole frame buffer or to keep a spare and lines very rarely overlap. So they XOR objects in and then XOR them out again. As and when they can't keep up with the output frame rate, which is usually, that has the effect that objects across the screen are updated sequentially. When the screen becomes full you can see one move, then the next, then the next, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even as early as I, Of the Mask, animated scenes were being prerendered and replayed as a sequence of 2d draw calls, with some sprites added on top for gameplay. This presages interactive movies by about a decade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rescue on Fractalus probably begins the line for games based on a voxel heightmap, and does what it does on an Atari by leaving most of the surface details very implicit. It's drawing verticals of a uniform colour and just putting pixels on top because it's cheap to update a vertical of one height to another, and the pixels although sparse are enough to fire the imagination. Later games like Commanche could afford whole-buffer updates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might not be immediately obvious, but the 8-bit versions of Stunt Car Racer also assume they're filling a vertical space for faster solid graphics. They do not allow the car to roll beyond a certain amount, and when it does you can see the area underneath the track soft of rotate with you. So it's not really filling polygons so much as maintaining a 1d height map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As almost everybody knows, Wolfenstein's optimisations are (i) to restrict walls to a single height and vertical location, collapsing the problem of drawing from 3d to 2d; and (ii) requiring them to be on grid boundaries, for a simple per-column test without prior knowledge. Restriction (i) also makes each column a line of constant depth. Which means no per-pixel divides. The limited number of potential outcomes also allows all per-column possibilities to be precomputed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doom keeps similar per-pixel optimisations for wall rasterisation but completely replaces the logic as to what should be drawn by using a structure called a binary-space partition ('BSP') tree that allows a very fast back-to-front sorting of level geometry and ensures geometry is arranged in advance so that sorting by depth is always sufficient for a correct drawing. Allowing geometry not to overlap vertically further collapses the amount of work necessary to decide which bits of walls remain visible after having sorted them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quake does a similar thing with a BSP tree but adds an additional structure for broad-phase elimination of sections of the world called a potentially-visible set. A side effect of putting a structure into a BSP tree is that you end up with a bunch of convex sectors that the player can stand in. Quake keeps a compact list in each sector of which other sectors could be visible. That allows huge parts of the BSP traversing and therefore of span comparison to be skipped entirely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Games like Descent go a different way with convex sectors, rendering from that which the camera is in outwards and clipping each further sector to the portion of the display still unfilled by closer sectors. That's full-fat portal rendering: the surfaces that join sectors are 'portals' and the portals are the be all and end all for scene graph traversal and for visibility. Later but still retro games often use portals in a less strict manner as merely a broad phase for whether a section of the map might possibly be visible, particularly if they have a GPU that can report something like 'if I were to draw that polygon, [some/none] pixels would be drawn'. Games still do that, but I'm aware of it being implemented at least as far back as Mario 64 and twenty years passes my test for retro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A different branch of games going back at least to Alone in the Dark prerenders the background and simply superimposes the moving objects. Some knowledge of the full-scene geometry is retained for collisions and clipping but most isn't retained at runtime. In Alone in the Dark pixel artists created the backgrounds. In Resident Evil they were CG rendered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Little Big Adventure II is probably the most interesting branch of that system of thinking: it has the full 3d geometry of its outdoor world but presents it through fixed cameras. Each time the camera changes it pre-renders the background with depth information, after which only the main characters are redrawn in realtime. That causes a 0.5 second lag when changing camera, but that alone isn't jarring for the genre.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Microsoft Talisman project from the mid-'90s tried something very close to what you're asking. It would start by rendering a frame as a sequence of tiles and submitting those to the GPU. It would approximate the next frame and possibly the one after that by having the GPU simply manipulate the original tiles based on the camera difference — rotate them, move them around, scale them, all of them independently of each other. Then when the CPU had prepared the next entirely-new frame, it would submit it. So you got perfect key frames plus approximate intermediaries. It was implemented and previewed, but missed its window for success as the ordinary 3d accelerators appeared on the market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: also suddenly returning from the back of my the memory, a special word for Parsoft Interactive and the line of flight simulators up to 1996's 'A-10 Cuba!'. They were software developers that started on the Mac in the late-'80s, which means a massive display compared to processing ability. So they used a system of per-scan frame differencing to publish only the differences. Imagine a big green polygon that's rotating. The centre essentially remains the same so if you can figure how to redraw only the edges in less time than it takes just to redraw the centre then that's a win. Exactly how they did it seems to be vague but I'll bet it's just a matter of inserting spans into a structure that you can then traverse in x order (probably O(log n)) and performing a linear differencing of this frame and the previous at the end (in O(n)).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's almost certainly  why they were still pushing solid colour polygons as late as 1996, but also why they could do a pretty good frame rate at 1024x768x8bpp on a 68040, and a fantastic frame rate at 1280x1024 on my unaccelerated Pentium of 1996. Which was the best the monitor could display.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-03-07T17:35:02.827" LastActivityDate="2018-03-07T17:35:02.827" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="5899" PostTypeId="2" ParentId="5883" CreationDate="2018-03-06T03:17:55.340" Score="14" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It seems to me that a smart terminal would need a microprocessor, so I would expect them to start showing up in the early seventies,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, as discrete, specialized processors could do the job even before that.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When did they arrive on the scene?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;TL;DR: Gradually between 1964 and 1971&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As with every 'first' question, the answer is rather vague and needs a plethora of adjectives to construct a 'first'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The use of 'smaller systems' with specialized programming as 'intelligent' subsystems can be traced back as early as the 1950s. Distinction between specialized computers (subsystems) and Terminals is a bit blurry in the beginning, but a rough timeline can be drawn. The following examples follow mostly IBM developments. There have been several others, and IBM wasn't always the first to introduce a feature, but in the long run they not only resulted in the widest usage but also reflected the best known instances. Last but not least, differences in introduction between competing systems where rather in a scale of month than years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, we should clarify the term 'intelligent terminal' as some kind of device(s) allowing local editing/manipulation of data output from a computer before sending the result back for further processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this definition a point could be made that already the &lt;strong&gt;punch card environment of the 1940s&lt;/strong&gt; may qualify by offering local punching, reading, duplication, and repunch of cards to be fed back again. The more compact IBM 26 Interpreting Card Punch of 1962 does define local editing. But yeah, it's a stretch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(modified) TTY are the beginning of individual terminals. They are the equivalent of a dumb terminal. Every character typed is send right away toward the mainframe. With an increasing number of terminals, mainframe side buffers/communication controllers where added to reduce interrupt load, making them somewhat less dumb by collecting a line before interrupting the host.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1050&quot; rel=&quot;noreferrer&quot;&gt;IBMs 1050&lt;/a&gt;, a printing terminal, introduced in March 1963, diverged (first?) from TTY like unsynchronized single character I/O and introduced a line mode. Here the &lt;a href=&quot;http://terminals-wiki.org/wiki/index.php/IBM_1050&quot; rel=&quot;noreferrer&quot;&gt;1051 Control Unit&lt;/a&gt; managed a line buffer. While each keystroke was directly displayed, a line was only sent to the mainframe when &lt;code&gt;EOB&lt;/code&gt; (End Of Block) was pressed. &lt;code&gt;CR&lt;/code&gt; did implicitly send an &lt;code&gt;EOB&lt;/code&gt; following the &lt;code&gt;CR&lt;/code&gt;. After sending the keyboard became locked until released by the mainframe (*1). Another important improvement over TTY with its 10 characters per second was that the used Selectric mechanics did allow a 15 characters per second output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM's very first (graphical) terminal system, the &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2250&quot; rel=&quot;noreferrer&quot;&gt;2250&lt;/a&gt; of 1964&lt;/strong&gt; did also use a line/block mode when it came to text entry. While the terminal was direct connected to the Mainframes I/O channel, a local data buffer was used for editing. Entered text was displayed and could be edited in line mode. When a 'message was composed', as it was called back then, a mainframe I/O interrupt was issued to transmit the whole data block. To some degree the 2250 did set the lead for all terminals to follow, while it's direct impact was rather limited (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;IBM's 2240 of 1964&lt;/strong&gt; and later &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2741&quot; rel=&quot;noreferrer&quot;&gt;2241&lt;/a&gt; did continue what was set with the 1150. But without the ability of additional peripherals like card punch/reader or paper tape handling in favor of a simple low-cost approach to terminals. Instead of integrating a Selectric mechanism in a new case, controlled by a separate controller now a more standard Selectric with new logic could be used. The advantage was achieved due higher integration using SLT (&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Solid_Logic_Technology&quot; rel=&quot;noreferrer&quot;&gt;Solid Logic Technology&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;March 1965&lt;/strong&gt; brought what eventually could be called the first intelligent terminal as we see it today: &lt;strong&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2260&quot; rel=&quot;noreferrer&quot;&gt;2260&lt;/a&gt;&lt;/strong&gt;, IBM's first CRT based text terminal. Unlike the 2250 it was raster based (*3). Here for the first time a whole screen or parts thereof could be edited and sent back when done. Line mode was thus replaced by a wider block mode. In a strict sense it was still not an all-in-one terminal, as the logic, handling and storage was contained in a 2248 Display Control Unit which in turn handled up to 24 terminals at once. The 2260 Unit itself was barely more than keyboard and monitor. The first 2260 'only'  displayed six rows of forty characters each. Model 2 did 12x40 characters and Model 3 finally 12x80 characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;September 1966&lt;/strong&gt; brought the 2250 Model 2/3 which now no longer needed to be direct connected to the mainframe I/O, but acted via a 2840 control unit over remote, serial line. (*4)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;strong&gt;February 1968 the 2265&lt;/strong&gt; got introduced. IBM's first terminal where controller and display where located in one case, close to what we today imagine as a terminal. Functionally it was the same as 1965s 2260, but now a single terminal was tied to a single serial line. Beside the 2260's 12x80 mode a more form entry orientated 15x64 mode was offered (*5).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other companies did also work on intelligent terminals (-systems). In &lt;strong&gt;1969 SIEMENS introduced the 8150 system&lt;/strong&gt;. While it was, like the 2265, a single terminal per line, its electronics were still rather huge and confined in a heavy, tower PC like case. Display size was 20 lines with 54 characters each (*6). To my knowledge, the 8150 system was the first to introduce field delimiters and attributes, so forms could be displayed and cursor handling was done according to these fields. Even simple data local entry checks could be done by declaring a field as numeric, so only digits could be entered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To handle these more complex operation a microprogram controlled discrete, specialized processor was implemented on 12 &lt;a href=&quot;https://en.wikipedia.org/wiki/Eurocard_(printed_circuit_board)&quot; rel=&quot;noreferrer&quot;&gt;Eurocard&lt;/a&gt; like PCBs. In a simplified view, the microprogram was much like an interpreter processing the screen data for each frame, feeding the test according to the attributes to the character display logic. Display was done as &lt;a href=&quot;https://en.wikipedia.org/wiki/Vector_monitor&quot; rel=&quot;noreferrer&quot;&gt;vector output&lt;/a&gt;, so each character was just drawn as it came along. Keyboard input was handled whenever the cursor position was reached. The whole program structure was rather clever, albeit unusual from today's view (*7). Each Field descriptor did take up a character position and was displayed as a space. The later 8160 system of 1975 removed that limitation and added a few more features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually the largest 8150 installation early on where the &lt;a href=&quot;https://en.wikipedia.org/wiki/1972_Summer_Olympics&quot; rel=&quot;noreferrer&quot;&gt;1972 Munich Olympic Games&lt;/a&gt;, where more than 200 terminals where connected to a single mainframe to collect data from all competitions and deliver real time information updates them to journalists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, &lt;strong&gt;in 1970&lt;/strong&gt;, in retrospect, another milestone was introduced: &lt;strong&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint_2200&quot; rel=&quot;noreferrer&quot;&gt;Datapoint 2200&lt;/a&gt;&lt;/strong&gt;. Delivery started in Summer 1971. Like the IBM 2260/65, display was 12x80, but unlike the IBM it was not meant to be 'a' terminal, but to emulate as many as possible other terminals. After designing their first product, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint_3300&quot; rel=&quot;noreferrer&quot;&gt;Datapoint 3300&lt;/a&gt;, a classic dumb glass-TTY, CTC realized that there is a market for compatible terminals. So they decided to go for a programmable system they could adapt. But instead of keeping it a closed system trying to earn a premium by adapting the emulation to new systems, they made it an open system with programming available to users. While the basic idea was to enable some local programming to improve data entry, customers soon used it as a desktop computer. The fact that they convinced TI and Intel in trying to fit their CPU design on a single chip still shapes today's computing :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_3270&quot; rel=&quot;noreferrer&quot;&gt;in May 1971 the IBM 3270&lt;/a&gt;&lt;/strong&gt; terminal system was introduced. Various models displaying 12x80 up to 43x80 and 27x132 were available. But more important, form handling was added. &lt;strong&gt;The rest, I guess, is history:)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Caveat: As said before, this timeline is (mostly) IBM orientated, but there where many more companies, during the 60s and 70s usually ahead of IBM.&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As a final note it might be useful to explicitly note that the 'intelligent'(CRT based) terminal is not an evolutionary step &lt;em&gt;from&lt;/em&gt; 'dumb' (CRT-based) terminals. This common assumption is wrong. Both developments happened in parallel. Dumb terminals are a rather straight continuation from TTYs, supported by the growing availability of local computing power (aka mini computers) and direct CPU interaction. Demand to handle more users (terminals) was satisfied by buying more computers (and partitioning workload along department lines).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast intelligent terminals were developed to offload editing and screen manipulation duties from the mainframe to enable more terminals to be handled by a single machine. Intelligent terminals where created by departing from the TTY paradigm, not dumb terminals.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1- After all, this already constructs a simple hardware implementation for a command line, doesn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Not the least due its initial price of 200-300 thousand USD. No, not today's, but 1964 Dollars - make that more like 2 million of today's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Scanned 'sideways' - the beam did not run in horizontal rows, but vertical columns. Yup, These are terminals, not TVs, so not limited to TV specifics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Notable, it also introducing a character generator within the 2840, so the mainframe no longer had to send each output character as series of strokes :)) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - the 2265 was also the first IBM terminal system to use the ASCII character set. While transmission encoding was still BCD based, all ASCII glyphs could be displayed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Like many manufacturers of compatible systems, SIEMENS &lt;em&gt;had&lt;/em&gt; to offer more than IBM to convince customers (or more precisely, their management), so 1080 characters on a single screen instead of 960 is a lot, isn't it :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - Or in other words, it was clever and elegant programming instead of throwing code and libraries on a problem until it surrenders.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-03-06T19:10:30.907" LastActivityDate="2018-03-06T19:10:30.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5900" PostTypeId="1" CreationDate="2018-03-06T08:10:41.207" Score="8" ViewCount="12221" Body="&lt;p&gt;The amount of tutorials, youtube videos, scanned books on C64 programming is overwhelming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What materials would you recommend -- and, importantly, in what order! -- to build a path to programming my own demo in Assembly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please assume programming knowledge in higher-level languages.&lt;/p&gt;&#xA;" OwnerUserId="8137" LastActivityDate="2018-03-06T12:35:51.320" Title="Best path to learn C64 assembly" Tags="&lt;commodore-64&gt;&lt;programming&gt;&lt;assembly&gt;" AnswerCount="2" CommentCount="4" ClosedDate="2018-03-06T16:32:01.193" ContentLicense="CC BY-SA 3.0" />
  <row Id="5901" PostTypeId="2" ParentId="5886" CreationDate="2018-03-06T08:34:22.590" Score="2" Body="&lt;p&gt;This sounds very much like it &lt;em&gt;is&lt;/em&gt; &lt;a href=&quot;http://www.mobygames.com/game/pc-booter/olympic-decathlon&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft Decathlon&lt;/a&gt;. Other similar PC games of that era either didn’t have pole vault events at all, or had &lt;a href=&quot;http://www.mobygames.com/game/dos/games-summer-edition/screenshots/gameShotId,30113/&quot; rel=&quot;nofollow noreferrer&quot;&gt;more detailed depictions of the vaulters&lt;/a&gt;. There aren’t many candidates leading up to 1990: Mobygames lists &lt;a href=&quot;http://www.mobygames.com/browse/games/pc-booter/olympiad/&quot; rel=&quot;nofollow noreferrer&quot;&gt;four booters&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/browse/games/dos/olympiad/1988/&quot; rel=&quot;nofollow noreferrer&quot;&gt;seven DOS games released in 1988&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/browse/games/dos/olympiad/1989/&quot; rel=&quot;nofollow noreferrer&quot;&gt;four in 1989&lt;/a&gt;, and &lt;a href=&quot;http://www.mobygames.com/browse/games/dos/olympiad/1990/&quot; rel=&quot;nofollow noreferrer&quot;&gt;three in 1990&lt;/a&gt;. All told, the only summer games available on the PC by 1990 were &lt;a href=&quot;http://www.mobygames.com/game/pc-booter/olympic-decathlon&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft Decathlon&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game/pc-booter/summer-games-ii&quot; rel=&quot;nofollow noreferrer&quot;&gt;Summer Games II&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game/pc-booter/world-games&quot; rel=&quot;nofollow noreferrer&quot;&gt;World Games&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game/dos/games-summer-edition&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Games: Summer Edition&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game/dos/summer-challenge&quot; rel=&quot;nofollow noreferrer&quot;&gt;Summer Challenge&lt;/a&gt;, &lt;a href=&quot;http://www.mobygames.com/game/dos/daley-thompsons-olympic-challenge&quot; rel=&quot;nofollow noreferrer&quot;&gt;Daley Thompson’s Olympic Challenge&lt;/a&gt;, and &lt;a href=&quot;http://www.mobygames.com/game/dos/carl-lewis-go-for-the-gold-&quot; rel=&quot;nofollow noreferrer&quot;&gt;Carl Lewis’ Go for the Gold&lt;/a&gt;; I doubt titles such as &lt;a href=&quot;http://www.mobygames.com/game/dos/caveman-ugh-lympics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Caveman Ugh-Lympics&lt;/a&gt; would fit the bill since you’d be likely to remember the setting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see in &lt;a href=&quot;https://www.youtube.com/watch?v=d6gUZxIYXg4&amp;amp;t=434&quot; rel=&quot;nofollow noreferrer&quot;&gt;this gameplay video&lt;/a&gt; (thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/366/ilmari-karonen&quot;&gt;Ilmari Karonen&lt;/a&gt; for finding it!), the pole vaulters in Decathlon weren’t detailed at all.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-11-04T16:15:11.317" LastActivityDate="2018-11-04T16:15:11.317" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="5902" PostTypeId="2" ParentId="5900" CreationDate="2018-03-06T08:56:18.353" Score="1" Body="&lt;p&gt;You've probably already seen &lt;a href=&quot;http://6502.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;6502.org&lt;/a&gt;. It has a lot of tutorials. Also, if you haven't yet downloaded &lt;a href=&quot;http://www.ajordison.co.uk&quot; rel=&quot;nofollow noreferrer&quot;&gt;CBM.prg Studio&lt;/a&gt; you should have a look at it.&lt;/p&gt;&#xA;" OwnerUserId="8163" LastActivityDate="2018-03-06T08:56:18.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5903" PostTypeId="2" ParentId="5893" CreationDate="2018-03-06T10:01:26.800" Score="15" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tile based 2.5D render&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any &lt;strong&gt;isometric&lt;/strong&gt; game can reuse an already rendered frame. As there is no real perspective the movement of camera/player is really just panning/scrolling the &lt;code&gt;x,y&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://stackoverflow.com/a/35917976/2521214&quot;&gt;Isometric render:&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/UWJcl.png&quot; alt=&quot;isometric&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And usually by one or fraction of one tile so the render could be highly optimized.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also 3D polygons where sometimes rendered as sprites into isometric engines &amp;ndash; see &lt;strong&gt;Diablo1&lt;/strong&gt; (at least I suspect they use it) as an example. It's hard to say if they do it on game runtime (during init) or during game development or at all (an all is pixel art instead).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pseudo 3D render based on 2D ray casting techniques&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Pseudo 3D raycasting Wolfenstein3D&lt;/strong&gt; and &lt;strong&gt;Doom3D&lt;/strong&gt; techniques are rendered whole each frame. The only thing that could be speed-ed up by scrolling is the ray cast intersection list acquisition (map in top left) but that makes no sense as the added code will not gain anything (unless very large map is used with high visibility depth) and probably would even slow things down due to branching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://stackoverflow.com/a/32733650/2521214&quot;&gt;Wolf:&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/srs0H.gif&quot; alt=&quot;Wold3D&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://stackoverflow.com/a/47251071/2521214&quot;&gt;Doom:&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8ZZWg.gif&quot; alt=&quot;Doom3D&quot;&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Paging effects&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if we got any specific constraint of movement we could use this &quot;scroll/pan/combine&quot; technique and usually was used in &lt;strong&gt;Demo scene&lt;/strong&gt; for things similar to this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/OQedZ.gif&quot; alt=&quot;DMA&quot;&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Polygonal 3D render&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sadly for real unconstrained &lt;strong&gt;3D&lt;/strong&gt; engines is this not an option. Instead if speed is not good wireframe techniques where used to speed up. Or even combined with sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/O8tuH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O8tuH.png&quot; alt=&quot;ZX advanced polygon rendering&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Caching meshes as sprites is possible only if the view has no real perspective or the rendered object is in the &quot;same&quot; distance (like background) or very far so its relative distance does not change too much.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;3D Ray tracers&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When talking about 3D graphics do not forget that there are also &lt;strong&gt;3D&lt;/strong&gt; (back) ray tracing techniques which are fully perspective but they can reuse already computed rays (if light/shading model allows it and &lt;strong&gt;lights and scene are static&lt;/strong&gt;). If those requirements are met than does not matter where camera was if ray lies on the same axis and there is not obstacle between them than they results in the same color regardless of camera orientation and position. This can be used by caching rays of last frame and reusing them ... +/- some accuracy rounding. That might speed up a lot of the entire frame raytrace like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/a/45140313/2521214&quot;&gt;Mesh back raytrace:&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZdwLJ.png&quot; alt=&quot;mesh&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/a/48092685/2521214&quot;&gt;Volumetric back raytrace:&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/nzbqc.png&quot; alt=&quot;volumetric&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but I never saw implementing this in a real application. The current gfx &lt;strong&gt;HW&lt;/strong&gt; is not suitable for these techniques however. There are attempts to build &lt;a href=&quot;https://www.youtube.com/watch?v=3yH8OQTkpy8&quot; rel=&quot;noreferrer&quot;&gt;special ray tracing processors&lt;/a&gt; (for now they based on &lt;strong&gt;FPGA&lt;/strong&gt;s) which could handle Snell's law and Fresnel's natively. Hopefully they will be added into &lt;strong&gt;GPUs&lt;/strong&gt; someday...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apart of all this there is one technique used for 3D raytracer to speed up the rendering that is unique to these renders. It is using stochastic approach for branching. Basic ray tracers works like that you cast ray when it hit something it either reflects or both reflect and refract and this is recursive up to some layer. This can be speeded up by using pseudo random approach where the split of ray is not happening. Instead the ray has 50% chance to reflect and 50% to refract. And on top of that usually few frames are merged together. This way we can have much higher speed for the same recursion layer at the cost of quality (the image is a bit noisy like from CCD camera). This technique is fairly common in GLSL as it allows to use the underlying architecture in similar manner than polygonal rendering which is not the case for recursive ray split.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-03-07T18:25:18.803" LastActivityDate="2018-03-07T18:25:18.803" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5904" PostTypeId="2" ParentId="5893" CreationDate="2018-03-06T11:26:04.090" Score="11" Body="&lt;p&gt;One technique that has not been mentioned (well, it kind-of has, but not under its actual name) is the &quot;&lt;strong&gt;impostors&lt;/strong&gt;&quot; (or &quot;&lt;strong&gt;imposters&lt;/strong&gt;&quot;) technique.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It consists in drawing some 3D objects of the scene with a very rough approximation of their angle to the camera, and updating this angle only when really, really needed (by that we mean: only when the human eye would start noticing that this object doesn't seem to be &quot;turning&quot; as it should).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This technique has two flavours: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rendering small objects.&lt;/strong&gt; The extreme version of this technique is the &lt;strong&gt;billboard&lt;/strong&gt;, when every object is constantly facing the player, and the game designer decides that the objects should never turn (their angle to the camera is forever fixed). It can be made more permissive by deciding that the object can have 4 fixed angles to the camera (front, sides, back) or even 8 (for example, in Doom, barrels and lampposts &lt;em&gt;always&lt;/em&gt; face the player – that means only one fixed angle to the player, while enemies can be seen from 8 angles). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that this can be achieved in two ways: either the object is a sprite previously drawn in 2D (as in Doom), or it's just re-rendered at the required angle. Having just a few allowed angles makes the following optimisations available:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You can cache the few renderings of the object seen from each angle, as 2D images.&lt;/li&gt;&#xA;&lt;li&gt;Since the angles have discreet values, you can restrict the calculation space (for example if you pre-calculate and store in memory all the &lt;strong&gt;cos and sin values&lt;/strong&gt; for these angles).&lt;/li&gt;&#xA;&lt;li&gt;If you have many objects to display, most of the will be seen under the same angle, so you can use the same &lt;strong&gt;cached rendered version&lt;/strong&gt; many times (for example if you draw trees you can copy and paste the same tree seen from a handful of angles many times, by just scaling down the sprite depending on the distance). That's also sometimes used to render a crowd (like the stadium's audience in old sports games or the people on the side of the road in car racing games).&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rendering large, complex, distant objects.&lt;/strong&gt; The key here is that these objects are &lt;strong&gt;distant&lt;/strong&gt;. It means that their angle with the camera will change very slowly (even if the player/camera moves sideways for a long time, the mountain in the distance will look almost the same. therefore, the payer doesn't notice if you don't redraw it as much as it should). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the player/camera turns, then the distant object is just moved sideways on the screen (or just projected onto a &lt;strong&gt;skybox&lt;/strong&gt; that gets rotated, as described below), but doesn't change, so it is not redrawn. From time to time, if the camera moves to much, then simply re-render the complex object as seen from the new angle. Since that doesn't happen often, it's not too costly. it can be processed in a parallel thread. That technique is used in open-world games, like Skyrim, GTA, etc.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Another technique: the &lt;strong&gt;skybox&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could consider it as an impostor pushed to the extreme: the object (the sky, the sun, the clouds...) is so distant that its angle to the camera will never, ever change. So all you have to do is render it once and for all onto the screen and move it accordingly to the player looking up/down/left/right. As always, you can decide to render it from a 3D model (if you're rendering a complex, slowly-changing object such as a cloud) or from an actual 2D drawing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You never need to scale it because it always remains at infinite distance. &#xA;In order to rationalize that lateral movement (up/down/left/right) of the 2D rendered object that occupies the entire field of vision (like the sky), you project it onto a very large cube created around the scene (the player is inside the giant cube). You might want to apply a slight distortion of your 2D-rendered sky at the limits between each face of the cube, so that it's not too obvious that the sky is actually a cube. And voilà.&lt;/p&gt;&#xA;" OwnerUserId="8164" LastEditorUserId="462" LastEditDate="2019-10-28T00:06:22.207" LastActivityDate="2019-10-28T00:06:22.207" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="5905" PostTypeId="2" ParentId="5900" CreationDate="2018-03-06T12:21:38.690" Score="3" Body="&lt;p&gt;Since you want to program demo's you will have to learn not only 6510 machine code, but also the hardware of the c64. Both are explained in the original &lt;a href=&quot;https://www.c64-wiki.com/wiki/Commodore_64_Programmer&amp;#39;s_Reference_Guide&quot; rel=&quot;nofollow noreferrer&quot;&gt;'Commodore 64 Programmer's Reference Guide'&lt;/a&gt;. In my opinion this book is sufficient to do whatever you want to do with the c64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only other book I bought was the &lt;a href=&quot;https://books.google.be/books/about/What_s_Really_Inside_the_Commodore_64.html?id=ETfdtgAACAAJ&amp;amp;redir_esc=y&quot; rel=&quot;nofollow noreferrer&quot;&gt;What's Really Inside the Commodore 64 by Milton Bathurst&lt;/a&gt;. This is a disassembly of the c64 roms.&lt;/p&gt;&#xA;" OwnerUserId="4853" LastEditorUserId="4853" LastEditDate="2018-03-06T12:35:51.320" LastActivityDate="2018-03-06T12:35:51.320" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5906" PostTypeId="2" ParentId="2694" CreationDate="2018-03-07T03:40:38.897" Score="0" Body="&lt;p&gt;Easy 80-columns&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Double horizontal and vertical resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RAM, twice as much&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CPU, twice as fast&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disk access twice as fast&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another CPU added (z80). Parallel processing &amp;amp; multitasking capable.&lt;/p&gt;&#xA;" OwnerUserId="8170" LastActivityDate="2018-03-07T03:40:38.897" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5907" PostTypeId="1" AcceptedAnswerId="5908" CreationDate="2018-03-07T04:42:40.007" Score="19" ViewCount="6146" Body="&lt;p&gt;After playing a bit with the OS, a question sparked my interest:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could it entirely replace DOS and Windows ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's restrict the scope of this question a bit since it's fairly broad,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was it compatible with:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Windows 3.0 and above, up to 95 ?&lt;/li&gt;&#xA;&lt;li&gt;Win32s programs ?&lt;/li&gt;&#xA;&lt;li&gt;protected mode DOS programs, e.g. games &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In other terms, how was the compatibility with DOS and Windows programs from the second half of the nineties ?&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="4222" LastEditDate="2019-12-25T03:54:06.910" LastActivityDate="2019-12-25T03:54:06.910" Title="Was OS/2 a viable alternative for daily DOS and Windows tasks?" Tags="&lt;ms-dos&gt;&lt;windows-3.x&gt;&lt;compatibility&gt;&lt;os2&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5908" PostTypeId="2" ParentId="5907" CreationDate="2018-03-07T08:02:27.967" Score="33" Body="&lt;p&gt;The short answer is yes, starting with version 2.0 and even more so with Warp, OS/2 was a viable alternative for daily DOS and Windows tasks, up to and including Windows 3.&lt;em&gt;x&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting with &lt;a href=&quot;http://www.os2museum.com/wp/os2-history/os2-2-0/&quot; rel=&quot;noreferrer&quot;&gt;OS/2 2.0&lt;/a&gt;, the first 32-bit version, OS/2 included very, &lt;em&gt;very&lt;/em&gt; good support for DOS programs, including protected-mode and some measure of direct hardware access. This allowed it to run Windows 3 itself (with some modifications), and most real-mode and DPMI protected-mode DOS software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was thus compatible with most protected-mode DOS programs (an early demo involved running Doom in a window), most Windows 3 programs, and even Win32s-compatible 32-bit Windows programs (at least on OS/2 Warp 4). &lt;a href=&quot;http://odin.netlabs.org/en/site/index.xml&quot; rel=&quot;noreferrer&quot;&gt;Odin&lt;/a&gt;, released in 1999 and continually in development since then, is supposed to provide more general Win32 binary translation, but I haven’t used it much. I don’t think Windows 95/98/NT compatibility was ever all that good in practice, and it certainly wasn’t when OS/2 was still relevant — the industry’s switch to Win32 was the nail in the coffin for OS/2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that OS/2 does require more resources for basic use than DOS and Windows, so when it first came out, many potential users would have been frustrated if they’d tried it — it really needs at least 8MiB of RAM (which was still unusual in early 1992) and a decent amount of disk space. However on a system with enough resources to run it well, it really is very fast, and perhaps more efficient than DOS and Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some consider that this excellent compatibility contributed to OS/2’s demise: since it was so good at running DOS and Windows programs, there wasn’t much incentive for developers to provide OS/2-specific applications. There were a few, but no big killer app sufficient to carry the platform and allow it to compete with Windows. The requirement for Windows compatibility, which was always based on running a dynamically-modified version of Windows inside OS/2, meant that users needed either a Windows license, or a version of OS/2 with its own Windows license, which meant Microsoft made money off of OS/2 sales anyway (above and beyond any remaining licensing agreement from the joint IBM/Microsoft days)...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wQdK9owqVd0&quot; rel=&quot;noreferrer&quot;&gt;This episode of LGR Tech Tales&lt;/a&gt; gives a decent summary of the life and non-death of OS/2 (which lives on as &lt;a href=&quot;https://www.arcanoae.com/arcaos/&quot; rel=&quot;noreferrer&quot;&gt;ArcaOS&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-03-07T13:29:29.817" LastActivityDate="2018-03-07T13:29:29.817" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5909" PostTypeId="2" ParentId="5825" CreationDate="2018-03-07T09:43:34.597" Score="4" Body="&lt;p&gt;Some older BIOSes have trouble handling drives larger than 504MB, even though they allow such drive size to be specified in the setup. For such computers, Dynamic Drive Overlay applications can help. These applications install themselves to the MBR and replace the BIOS disk handling routines with their own at the expense of some conventional memory. They will also format partitions to the required size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: once the DDO is installed in the MBR, one should not boot from floppies, because in that case the BIOS disk handling routines remain in effect. The system booted from floppy might not recognize the drive.&#xA;&lt;strong&gt;Workaround&lt;/strong&gt;: while the system is booting, the DDO software displays a message that by pressing a specific key, booting from floppy is now possible. This way the DDO disk handler routines are already installed, it's safe to boot from a floppy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using OnTrack Disk Manager 9.57 with great satisfaction, which - according to Phil's computer lab - had been made freely available by the company developed it (Kroll Ontrack). You can download it from Phil's web site: &lt;a href=&quot;https://www.philscomputerlab.com/ontrack-disk-manager.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.philscomputerlab.com/ontrack-disk-manager.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this application, one of my 286 computers can handle a 2GB CF card at full capacity. The 286's BIOS is  only be able to handle drives as large as 106MB.&lt;/p&gt;&#xA;" OwnerUserId="8157" LastActivityDate="2018-03-07T09:43:34.597" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5910" PostTypeId="2" ParentId="5907" CreationDate="2018-03-07T15:11:03.540" Score="9" Body="&lt;p&gt;I recently installed OS/2 Warp on a vintage (late-90s) IBM PC 350 with a 200 MHz Pentium MMX CPU and 96MB of RAM. I found that OS/2 Warp works very well for running virtually any DOS or Windows 3.x productivity application, and provides excellent stability, performance, and access to all that glorious RAM and CPU &quot;power&quot; in my vintage PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, DOS gaming is another matter. Many of the games from the period will run, but it is difficult to get them to work with the peripherals, like sound cards and input devices, when running under OS/2 Warp's DOS mode. My most frequent problem was simply no sound output, but that kills it for gaming. My first attempt was with a ProAudio Spectrum 16 sound card, and it was only able to work with a few of my games. I switched to a more compatible (at least on plain DOS) SoundBlaster 16, but still had plenty of problems getting the OS/2 driver system to work with many games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since my main usage for the vintage PC is gaming, I ended up replacing OS/2 Warp with DOS 6.22. This OS with the SoundBlaster 16 provides the best gaming compatibility for late 90s games that don't require Windows 9x. Even so, there is still too much tweaking (IMHO) to get DOS games of this period working correctly; between memory manager settings, driver settings, in-game peripheral and controller settings, etc. Really, the whole reliving of the experience was a strong reminder as to why I chose a Playstation for most of my gaming (not to mention the family's gaming) from 1995 onward.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-11-02T04:08:12.943" LastActivityDate="2019-11-02T04:08:12.943" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="5911" PostTypeId="1" AcceptedAnswerId="16014" CreationDate="2018-03-07T15:31:25.800" Score="19" ViewCount="2424" Body="&lt;p&gt;What is the physical size of a PDP-8? The photographs I found seem to be evenly divided between showing it as a compact unit that looks maybe one foot high, and as a tall cabinet maybe five or six feet high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conjecture: the different sizes correspond to different models (maybe the smaller one is the PDP-8S?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conjecture: the computer itself is always the smaller box, but the tall cabinet contains that plus peripherals such as disk and tape drives. (In that case, is the core memory included in the small box?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which of these is correct?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-08-31T08:07:30.180" Title="Size of the PDP-8" Tags="&lt;pdp-8&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5912" PostTypeId="2" ParentId="5911" CreationDate="2018-03-07T15:50:14.137" Score="14" Body="&lt;p&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/Datei:PDP-8.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;The original (straight) 8&lt;/a&gt; is a fancy shaped box of about 2 ft wide, 3 ft height and 2 ft deep.&lt;/p&gt;&#xA;&lt;p&gt;Later models where mostly standard 19&amp;quot; rackmount boxes, roughly 2x1x3 ft&lt;sup&gt;3&lt;/sup&gt; until the last ones made that like 'half height' of ~6 inches.&lt;/p&gt;&#xA;&lt;p&gt;So yes, different sizes correspond to different models over time.&lt;/p&gt;&#xA;&lt;p&gt;And yes again, the racks usually shown are whole machines, including peripherals like Disks, Tapes and so on in addition to the CPU. After all, the open modular concept was one of the main advantages of the PDP-8 and -11 series.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="611" LastEditDate="2020-08-31T08:07:30.180" LastActivityDate="2020-08-31T08:07:30.180" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5913" PostTypeId="2" ParentId="5893" CreationDate="2018-03-07T17:10:34.507" Score="4" Body="&lt;p&gt;It helps to understand what the main limitations of 3D graphics where back in the day. Memory bandwidth was very limited, and early computers often stored graphics in a format that made changing individual pixels or spans of pixels expensive (e.g. Amiga bitplanes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As such it often helped to move 3D rendering away from graphics RAM and into some faster RAM which lessened the effect of overdraw. This was common on the Amiga in later years, and was often combined with a conversion from a convenient graphics format to the Amiga display format which made use of the otherwise dead time between memory access cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, floating point mathematics were very expensive due to most CPUs not having an FPU, and even FPUs being fairly low performance by modern standards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As such it was common to used fixed precision floating point, or simply use integer maths scaled up by say 10,000x. Operations like division, multiplication and sine/cosine were expensive too so optimizations such as using binary shifts and lookup takes were necessary.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-03-07T17:10:34.507" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5914" PostTypeId="2" ParentId="5911" CreationDate="2018-03-07T18:28:40.883" Score="22" Body="&lt;p&gt;There were different models of the PDP-8, but most models (say, PDP-8/E) consisted of a number of rackmounted boxes, one of which you could call the CPU (or, compared to a modern PC, maybe the motherboard is a better comparison).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.pdp8.net/pdp8em/pics/topboards.shtml&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; and &lt;a href=&quot;http://www.oldcomputers.arcula.co.uk/pdp83.htm&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; are some good pictures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The unit shown with the front panel in the typical orange/yellow colors containing the switches and lights, which were more or less directly connected to the data and address bus, contains a number of connectors on a backplane, which can be populated with cards about the size of a modern motherboard. You can see part of the backplane in the second link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first card controls the front panel, there are several cards that make up the CPU, and again several cards for the memory (a controller and the core memory itself). After that come cards for peripherals, and it was also possible to extend the backplane into a second module for even more peripherals IIRC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some peripherals did have a considerable amount of logic in their own units.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was also a (quite large, on the 8/E) unit for the power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I should call something the &quot;PDP-8 computer&quot;, I'd have used that name for the whole rack, including the peripherals in the rack, excluding the teletypes and printers that were connected with cables to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, there were also desktop versions of the PDP-8 (the DECMates), when the whole CPU had been miniaturized to a single chip, and it could be integrated into a video terminal.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-03-07T18:28:40.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5915" PostTypeId="2" ParentId="3295" CreationDate="2018-03-08T10:05:59.593" Score="1" Body="&lt;p&gt;Start by not confusing 16-bits consoles and 16-bits graphics.&#xA;16-bits consoles would usually use 8-bits graphics (256 simultaneous  colors) or less (96 colors, 64 colors...). 16-bit graphics would not be used on a 16-bits  console (Imagine a super Nintendo managing 65000 simltaneous colors, that's crazy talk).&#xA; Note: when I say &quot;simultaneous&quot;, I mean &quot;as opposed to all the colors available&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore you can draw those with any old-school pixel-pushing program, such as the Rolls-Royce of pixel art : Deluxe Paint 1 to 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But drawing is only part of the problem. You need to convert the sprite and palette format to the target console format.&lt;/p&gt;&#xA;" OwnerUserId="8164" LastEditorUserId="8164" LastEditDate="2018-03-08T11:53:31.297" LastActivityDate="2018-03-08T11:53:31.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5916" PostTypeId="2" ParentId="1858" CreationDate="2018-03-08T18:50:22.823" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How were these chips made? Could they have possibly taken a Western chip and taken it apart somehow, to manually build a netlist, as was recently done to the 6502? Or was someone able to procure the masks from Zilog's and Sinclair's engineers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, yes and yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's been a rather complex mixture of spying, buying and hard core reverse engineering. Also, there where, much like in the West, many different groups trying to push their design. Not only between the states (*1) but also within.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not have any reliable informations about Russia, but at least their Z80 was build with masks developed in East Germany. Which is good for us, as not only the people involved still can be interviewed, but most non technical issues are well documented and open by now. Often even available as books.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The start of the Z80 development included even a little game FEW engineers played with the MEE (&lt;a href=&quot;https://de.wikipedia.org/wiki/Ministerium_f%C3%BCr_Elektrotechnik_und_Elektronik&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ministerium für Elektrotechnik und Elektronik&lt;/a&gt;). The initial order was rather clear: Build an 8080 clone. Just the engineers rather wanted to do the Z80. So the &lt;a href=&quot;https://en.wikipedia.org/wiki/Main_Directorate_for_Reconnaissance&quot; rel=&quot;nofollow noreferrer&quot;&gt;MfS HVA&lt;/a&gt; section A XIV, responsible for gathering information about electronic technologies was bombarded with a series of requests for 8080 information, reasoned by 'still unclear details and huge problems in decoding the chip' while at the same time internal reports toward the responsible secretary of state for electronics, &lt;a href=&quot;https://de.wikipedia.org/wiki/Karl_Nendel&quot; rel=&quot;nofollow noreferrer&quot;&gt;Karl Nendel&lt;/a&gt;, did state that the Z80 was not more complex than the 8080 while at the same time more powerful and less hard to understand. So in the end (as always in realistic stories) the engineers did win and got the permission to clone the Z80 instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cloning itself didn't use any sophisticated process, but microscopic photographies of genuine Zilog chips. Engineers did sit down for several weeks and described every connection and detail they could describe onto audio tape, which would be transcribed into computer readable lists, which again where made into netlists. These netlists where put into a first simulation system - also developed for the project - for validation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a next step the layout was made, much like the Z80, so major parts can be found at similar places, but differed in detail. This stage was a combination of hand made design - literally drawn on millimeter paper - and later digitalised into routing data. Now it was simulated again, found to be working and put into production.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Russian Z80 clones where not developed in Russia, but produced with masks delivered by East Germany.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The process of reverse engineering instead of line by line cloning while sticking to the official documentation also resulted in a notable difference that can be used to detect a U880 from a (pre 1992) Z80. On a Z80a one byte OUTI with a source address of FFFFh does affect the carry, while the manual describes it as unaffected. The U880 works as describes - now you know another Z80 coding trick :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and the whole production wasn't exactly secret. About a dozen theses have been written by students of the universities of Dresden and Ilmenau who have taken part in the process.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Most of above knowledge is from various speeches and private talks to people involved. For the spying part, two readings can be suggested:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.amazon.de/Die-Industriespionage-DDR-wissenschaftlich-technische-Aufkl%C3%A4rung/dp/336001099X&quot; rel=&quot;nofollow noreferrer&quot;&gt;Die Industriespionage der DDR: Die wissenschaftlich-technische Aufklärung der HVA&lt;/a&gt;, and&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.amazon.de/General-Mikroelektronik-Autobiographie-Karl-Nendel/dp/3958410758&quot; rel=&quot;nofollow noreferrer&quot;&gt;General der Mikroelektronik: Autobiographie&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Sorry, both are only available in German - and both should be taken with more than just a grain of salt, as they are written by the former spies/apparatchiks. Still, they reveal quite a lot about the inner workings of the ways the East did acquire technology.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Here is a nice &lt;a href=&quot;http://smithsonianchips.si.edu/ice/OCR_ScanPE125/PE125(10379-K).pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Example of a US company reverse engineering a Zilog Z80 CTC&lt;/a&gt;. The East Germans might have worked much the same way.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - For example, the GDR did select the Z8000 as 16-bit family, but when x86 machines became more and more successful, they had to import 8086 CPUs from the SU. At the time a switch to 286 systems was desirable, the SU could not come up with a reliable and fast enough version, so &lt;a href=&quot;https://de.wikipedia.org/wiki/Karl_Nendel&quot; rel=&quot;nofollow noreferrer&quot;&gt;Karl Nendel&lt;/a&gt;, eventually the most important person at &lt;a href=&quot;https://de.wikipedia.org/wiki/Ministerium_f%C3%BCr_Elektrotechnik_und_Elektronik&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ministerium für Elektrotechnik und Elektronik&lt;/a&gt;, did decide that Robotron had to develop their own 80286 clone. Making it the fifth CPU locally developed in East Germany, after 8008, Z80, 8048 and Z8000 - a microVAX implementation was the last one done before it ended.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2019-01-12T16:16:03.837" LastActivityDate="2019-01-12T16:16:03.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5917" PostTypeId="1" AcceptedAnswerId="5919" CreationDate="2018-03-08T21:18:02.733" Score="14" ViewCount="2664" Body="&lt;p&gt;On the Z80 the &lt;code&gt;R&lt;/code&gt; register is 8 bits wide, as evidenced by &lt;code&gt;LD A,R&lt;/code&gt; and &lt;code&gt;LD R,A&lt;/code&gt; And every M1 cycle, &lt;code&gt;R&lt;/code&gt; increments by 1. But the uppermost bit does not participate in this increment. &lt;code&gt;R&lt;/code&gt; will not go from 0x7F to 0x80 or from 0xFF to 0x00. Apparently that behaviour is useful for DRAM refresh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But how was that implemented?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The Z80 has a 4-bit ALU which is used for all 8-bit and 16-bit operations, but apparently not this one. That means there must be a separate incrementer on the die?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I'm sure the Z80 designers were not imagining a programmer wanting to use R as an 8 bit counter, so they could have saved one bit of memory by having &lt;code&gt;R&lt;/code&gt; only 7 bits wide.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="576" LastEditorUserId="3290" LastEditDate="2020-05-01T07:23:28.467" LastActivityDate="2020-05-01T07:23:28.467" Title="Why do only the low 7-bits of the R register increment?" Tags="&lt;z80&gt;&lt;registers&gt;&lt;special-registers&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5918" PostTypeId="2" ParentId="5917" CreationDate="2018-03-08T21:32:41.210" Score="12" Body="&lt;p&gt;The 'R' register increment happens simultaneously with other operations, as it happens for every instruction, but must occur &lt;em&gt;after&lt;/em&gt; the refresh cycle in each instruction (which happens at the end of instruction fetch, thus pushing the only time the increment can actually happen into the time when the fetched instruction is executing), so it cannot use the standard ALU.  Therefore, the Z80 has a separate 7-bit wide incrementer for the R register.  It is implemented as part of the circuitry for the instruction counter incrementer (instruction counter increment can happen immediately after instruction fetch, i.e. while the refresh cycle is being generated, so doesn't conflict with ordinary instruction execution, but the ALU incrementer is only 8 bits I believe, while the instruction counter needs a full 16 bit incrementer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;7 bits would have been chosen because 128 was the number of refresh cycles required for the most common DRAM chip type at the time the Z80 was designed, the &lt;a href=&quot;http://www.rogtronics.net/files/datasheets/mem_dram/TMS4116.pdf&quot; rel=&quot;noreferrer&quot;&gt;4116&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.righto.com/2014/10/how-z80s-registers-are-implemented-down.html&quot; rel=&quot;noreferrer&quot;&gt;Ken Shirriff has die photos and a more detailed explanation on his blog&lt;/a&gt;, and a &lt;a href=&quot;http://www.righto.com/2013/11/the-z-80s-16-bit-incrementdecrement.html&quot; rel=&quot;noreferrer&quot;&gt;detailed article about the implementation of the incrementer&lt;/a&gt;.  It's also worth noting that other register increments are also apparently implemented not using the ALU but by a dedicated increment/decrement circuit.  Presumably, because this doesn't need full carry prediction, but a much simpler circuit to detect the case of all ones (or zeroes for decrement) to the right of each bit, this could be done in a single cycle rather than requiring two to feed the operation through the ALU, without wasting too much die space.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-03-09T00:29:44.077" LastActivityDate="2018-03-09T00:29:44.077" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5919" PostTypeId="2" ParentId="5917" CreationDate="2018-03-08T22:17:48.467" Score="16" Body="&lt;p&gt;The &lt;code&gt;R&lt;/code&gt; register is solely used to put out consecutive increased row addresses for RAM refresh. The fact that it is readable and setable by programs (*1) is rather a quirk than a feature (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;I&lt;/code&gt; and &lt;code&gt;R&lt;/code&gt; is a register pair right beside PC; a clever trick to save circuitry:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Firstly, &lt;code&gt;I&lt;/code&gt; needs to be placed on the upper address bus, like &lt;code&gt;PCH&lt;/code&gt;, so putting it alongside &lt;code&gt;PCH&lt;/code&gt; means the same buffers and signal lines can be used when the upper half of the interrupt service address is to be put out. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Secondly, for a refresh address it doesn't really matter if it's on the upper or lower address bus half, so the 'hole' beside &lt;code&gt;I&lt;/code&gt; can be easy be used for another register holding the refresh (row) address, and again the same buffers/lines can be used to deliver it. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And lastly, putting &lt;code&gt;R&lt;/code&gt; here allows the usage of the the same incrementer/decrementer circuits as used to handle the PC.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;From this it's easy to see that&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;R&lt;/code&gt; doesn't have a specialized 7-bit incrementer; it uses the full 16-bit incrementer as for &lt;code&gt;PC&lt;/code&gt;, but during operation on &lt;code&gt;(I)R&lt;/code&gt;, carry over is disabled between bit 7 and 8, so making it work as 7-bit incrementer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Since the register block is a symmetric structure of 12 register pairs, leaving out one bit somewhere in the middle wouldn't have saved anything.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;So, why just 7 Bits?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Faggin et. al. designed the Z80 in 1974/75, the only available DRAM with multiplexed addresses (and row refresh) was Mostek's 4 KiBit Chip MK4096, released in 1973. It was an instant success - a good reason for Zilog to include support for the new RAM interface design. The MK4096 needed a 6-bit row address for refresh. At that time 16 KiBit DRAM's were talked about, but no-one had one until Mostek started selling its MK4114 in 1976 - after the Z80 was released. So for this time-frame, the decision of utilizing 7 bits was already looking forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anything bigger was hard to imagine at that time. After all, it took 4 more years, until 1980, to make 64 KiBit DRAM available (which now would require 8-bit refresh counters).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;From a technological and marketing standpoint offering 7 bit (instead of 6) was a sensible, forward-looking decision.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Why it only used 7 bit for the increment can only be guessed, as all the other hardware would have supported a full 8-bit refresh counter.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Of course it needs to be read- and writeable on the hardware side, otherwise it can't do it's job:)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Well, there have been uses found, like RNG seeds and the like, as well as using the 8th bit as a 'secret' flag.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-05-30T11:49:27.877" LastActivityDate="2018-05-30T11:49:27.877" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="5920" PostTypeId="1" AcceptedAnswerId="5922" CreationDate="2018-03-09T03:10:10.707" Score="24" ViewCount="4724" Body="&lt;p&gt;The first time I ever played with software speech synthesis on a microcomputer (not hardware synthesis, like in TI's Speak &amp;amp; Spell) was around 1983, using &lt;a href=&quot;https://youtu.be/Rm4ZCGgzeeU?t=36s&quot; rel=&quot;noreferrer&quot;&gt;S.A.M for the Commodore 64&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A year later, I remember hearing the speech synthesis from the &lt;a href=&quot;https://youtu.be/RcRQWGFJ5YY?t=6m7s&quot; rel=&quot;noreferrer&quot;&gt;Macintosh unveiling&lt;/a&gt;, and being struck by the notion that it sounded the same as S.A.M on my C64. I suppose I thought that the SID chip and whatever the Macintosh used for sound would lead to much different results. Two years later, I got an Amiga, which came with &lt;a href=&quot;https://youtu.be/BqUyovNS8rs?t=53s&quot; rel=&quot;noreferrer&quot;&gt;built-in speech synthesis&lt;/a&gt; just like the Macintosh. Same. Voice. Again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the biggest surprise was the first time I heard &lt;a href=&quot;https://youtu.be/UErbwiJH1dI&quot; rel=&quot;noreferrer&quot;&gt;Stephen Hawking speak&lt;/a&gt;. This just didn't seem right, since Professor Hawking should obviously warrant something far better than a &quot;C64 under-the-bonnet&quot; for his translator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, the modern (2013) &lt;a href=&quot;https://youtu.be/IbpNK3B9eB8?t=10s&quot; rel=&quot;noreferrer&quot;&gt;SpeakJet synthesizer chip&lt;/a&gt; also seem to have the same voice, while certainly being far removed from the 1980s hardware above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why do they all have that same strange voice?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-03-12T03:17:29.060" LastActivityDate="2018-12-19T16:52:24.843" Title="Why do all the Speech Synthesizers have that same Voice?" Tags="&lt;history&gt;&lt;amiga&gt;&lt;commodore-64&gt;&lt;apple-macintosh&gt;&lt;sound&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5921" PostTypeId="1" CreationDate="2018-03-09T03:23:53.837" Score="9" ViewCount="409" Body="&lt;p&gt;I'm happily working through William Tang's &lt;em&gt;Spectrum Machine Language for the Absolute Beginner&lt;/em&gt;. I've already found one error (in the EZCODE listing), which I was able to fix myself, but to save myself further headaches, I would like to know if an errata document (official or otherwise) exists for this book. By Googling, I have found reference to the errata for a similar book (Mastering Machine Code on Your ZX Spectrum), but nothing for this particular book.&lt;/p&gt;&#xA;" OwnerUserId="8072" LastActivityDate="2021-01-04T21:51:34.430" Title="Where can I get the errata sheet for Spectrum Machine Language for the Absolute Beginner?" Tags="&lt;books&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5922" PostTypeId="2" ParentId="5920" CreationDate="2018-03-09T04:24:04.310" Score="40" Body="&lt;p&gt;The ones you list are all &lt;a href=&quot;https://en.wikipedia.org/wiki/Software_Automatic_Mouth&quot; rel=&quot;noreferrer&quot;&gt;S.A.M&lt;/a&gt;, from what is now &lt;a href=&quot;http://www.text2speech.com&quot; rel=&quot;noreferrer&quot;&gt;SoftVoice Inc&lt;/a&gt;. It was developed first for the Apple II, Lisa, Atari 8-bit machines and the Commodore 64; based on awareness of those versions, the company was contracted directly to supply the bundled speech generators for the Macintosh and Amiga.&lt;/p&gt;&#xA;&lt;p&gt;So they all sound the same because they are ports of the same software from the same company.&lt;/p&gt;&#xA;&lt;p&gt;This shared heritage was also confirmed by former Apple &amp;amp; Amiga engineer &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4606/hotpaw2&quot;&gt;@hotpaw2&lt;/a&gt; who comments in a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4955/why-did-blanking-of-screen-on-c64-sam-enable-better-quality-speech-synthesis&quot;&gt;related question&lt;/a&gt;: &amp;quot;While working at Apple, I purchased a SAM for my Apple II, and demonstrated it to the Mac team, as well as taking it with me to Hi-Toro/Amiga. Both those teams subsequently contracted with the SAM developers to do a 68000 port.&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-12-19T16:52:24.843" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5924" PostTypeId="2" ParentId="5917" CreationDate="2018-03-09T13:51:00.187" Score="5" Body="&lt;p&gt;&lt;a href=&quot;http://www.righto.com/2013/11/the-z-80s-16-bit-incrementdecrement.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;@Jules's link to the incrementer details&lt;/a&gt; offers an unsatisfying explanation:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When the Z-80 was introduced, 16K memory chips were popular. Since&#xA;  they held 2^14 bits, they had 7 row address bits and 7 column address&#xA;  bits. Thus, a 7 bit refresh value matched their need. Unfortunately,&#xA;  this rapidly became obsolete with the introduction of 64K memory chips&#xA;  that required 8 refresh bits.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That explanation suggests no reason why the designers couldn't have chosen 8 bits, with an eye to future memory devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the real reason lies elsewhere in that description.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Bits 7 through 11 are computed using the carry lookahead value,&#xA;  allowing them to be computed without waiting on the low-order bits. In&#xA;  parallel, the carry/borrow out of these bits is computed by the large&#xA;  NOR gate in the middle, and used to compute bits 12 through 14. The&#xA;  last carry lookahead value is computed at the left and used to compute&#xA;  bit 15. Note that the number of carry blocks decreases as the number&#xA;  of carry lookahead gates increases. For example, output 6 depends on&#xA;  three inc/dec blocks and no carry lookahead gates, while output 14&#xA;  depends on one inc/dec block and two carry lookahead gates. If the&#xA;  inc/dec blocks and carry lookahead gates require approximately the&#xA;  same time, then the output bits will be ready at approximately the&#xA;  same time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;i.e. The splits in the circuit structure were designed to meet overall timing constraints on the 16-bit incrementer, without regard for any secondary function it may be used for.  As it turned out, one of those splits was between bits 6 and 7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One unexpected feature of the Z-80's incrementer is that it can pass&#xA;  the value through unchanged. If the carry-in to the&#xA;  incrementer/decrementer is set to 0, no action will take place. This&#xA;  seems pointless, but it actually useful since it allows a 16-bit value&#xA;  to be latched and then read back unchanged.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Furthermore, if the carry-in to bit 7 of the incrementer is set to 0 - via the 'refresh' input to the NOR gate - then the upper 9 bits of the incrementer will not increment, but will preserve their input values. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The program counter and refresh register are separated from the rest&#xA;  of the registers and coupled closely to the incrementer. This allows&#xA;  the incrementer to be used in parallel with the rest of the Z-80. In&#xA;  particular, for each instruction fetch, the program counter (PC) is&#xA;  written to the address bus and incremented. Then the refresh address&#xA;  is written to the address bus for the refresh cycle, and the R&#xA;  register is incremented. (Note that the interrupt vector register I is&#xA;  in the same register pair as the R register. This explains why the I&#xA;  value is also written to the address bus during refresh.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;i.e. The I and R registers are updated through the incrementer as a 16-bit pair, just like the PC - but in this case the upper 9 bits are not incremented, and so I and bit 7 of R are actually reloaded with the same value.  There's no separate load control for the two halves of the pair, at least as far as the incrementer is concerned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(EDITED TO ADD: That's actually quite an assumption on my part, especially considering the separate I &amp;amp; R load capability I mention below.  But I think that even if R can be loaded from the incrementer independently of I, the argument still applies to bit 7 of R.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note that I and R can be individually transferred to and from A, but this is a distinct function from the refresh-cycle increment.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: While it would seem natural for the refresh counter to use 8 bits, the internal structure of the 16-bit incrementer (adopted to meet its timing requirements) was such that a 7-bit counter function is what was available - and this was sufficient for the prevailing memory technology of the time.&lt;/p&gt;&#xA;" OwnerUserId="8178" LastEditorUserId="8178" LastEditDate="2018-03-13T13:34:00.013" LastActivityDate="2018-03-13T13:34:00.013" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5925" PostTypeId="1" CreationDate="2018-03-09T15:14:17.477" Score="11" ViewCount="2062" Body="&lt;p&gt;I'm wondering if anyone has a document that describes the history of the BASIC interpreters used in the various Commodore 8-bit machines?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately I'm trying to track down how it is that the &lt;code&gt;A%&lt;/code&gt; format for integer variables apparently used the existing BCD floating-point code instead of presumably faster integer-only code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect I'll have to contact the original authors, but perhaps someone here knows?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-03-11T13:24:55.603" Title="Who wrote the MS BASIC on the PET/C64/etc?" Tags="&lt;commodore-64&gt;&lt;commodore-pet&gt;&lt;microsoft-basic&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5926" PostTypeId="2" ParentId="5925" CreationDate="2018-03-09T15:26:21.100" Score="27" Body="&lt;p&gt;It is well established that Microsoft's 6502 BASIC (and Commodore BASIC is just a manufacturer specific adaption) is a port of the original 8080 BASIC done for the Altair -- alas, not a direct one, as the prior port to 6800 was used as code base (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The creation &lt;a href=&quot;https://www.itworld.com/article/2872659/the-source-code-behind-microsoft-basic-for-6502-comes-to-light.html&quot; rel=&quot;noreferrer&quot;&gt;is attributed&lt;/a&gt; (in its &lt;a href=&quot;http://www.pagetable.com/?p=774&quot; rel=&quot;noreferrer&quot;&gt;source code&lt;/a&gt;) to three programmers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bill Gates&lt;/strong&gt; for the execution code (commands, functions and operators)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Paul Allen&lt;/strong&gt; for the 'Environment' code (editor, tokenizer, lister, etc.) and&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Monte Davidoff&lt;/strong&gt; for the math libraries (floating point).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, Davidoff might be the right guy for you to ask.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Caveat: Since Commodore &lt;em&gt;bought&lt;/em&gt; the BASIC and only paid for the 2.0 update, every change thereafter will be originated at Commodore, not Microsoft.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Michael Steil collected many details and did an &lt;a href=&quot;http://www.pagetable.com/?p=43&quot; rel=&quot;noreferrer&quot;&gt;in depth analysis&lt;/a&gt; using the &lt;a href=&quot;http://newsgroups.derkeiler.com/Archive/Comp/comp.sys.cbm/2005-10/msg00991.html&quot; rel=&quot;noreferrer&quot;&gt;6502 Easter egg&lt;/a&gt; as a marker 'gene'. He even created a nice family tree for Commodore BASIC:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/oVyV2.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oVyV2.png&quot; alt=&quot;MS/Commodore BASIC Family Tree&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6986" LastEditDate="2018-03-09T16:21:28.580" LastActivityDate="2018-03-09T16:21:28.580" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5927" PostTypeId="1" CreationDate="2018-03-09T16:15:31.310" Score="7" ViewCount="1878" Body="&lt;p&gt;Back in the day, of course we used modems (&quot;dial-up modems&quot; in today's parlance) to get our Commodores connected to other systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days I know several people have concocted options to get Commodores online.  What options are there?  I know some allow wired connections (RRNet?), and some allow WiFi (Schema made a C64 modem that works as well on the other systems, and at least a couple of other parties have made similar devices).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is someone familiar enough with the options to list them all?  Alternatively, list what you know and we can have a consolidated list.  I'm interested both in currently-produced hardware and in hardware that isn't made anymore, but might still be available in the used market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I include the VIC-20, C64 and C128 in my list because they share a common user port, but options using other connection methods are welcome too.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2019-01-22T13:38:39.670" Title="Getting your Commodore VIC-20, 64 or 128 online" Tags="&lt;commodore-64&gt;&lt;commodore&gt;&lt;commodore-128&gt;&lt;vic-20&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5928" PostTypeId="2" ParentId="5927" CreationDate="2018-03-09T16:19:48.513" Score="7" Body="&lt;p&gt;Here are the answers of which I am aware, and I know there are others:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://jammingsignal.com/commodore-wi-fi-modem/&quot; rel=&quot;noreferrer&quot;&gt;https://jammingsignal.com/commodore-wi-fi-modem/&lt;/a&gt; Schema's WiFi modem.  Connects via the user port.  Has a TFT display, and you connect to WiFi using Hayes-modem-like AT commands.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.lemon64.com/forum/viewtopic.php?t=65312&quot; rel=&quot;noreferrer&quot;&gt;http://www.lemon64.com/forum/viewtopic.php?t=65312&lt;/a&gt; C64net WiFi modem from Central Texas Commodore Users' Group&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.lantronix.com/products/uds-10/&quot; rel=&quot;noreferrer&quot;&gt;https://www.lantronix.com/products/uds-10/&lt;/a&gt; Lantronix UDS-10 - needs an RS-232 adapter; only connects via telnet.  Not true TCP/IP networking for the Commodore (the UDS10 does all this), but lets you telnet into systems which will let you then run other clients (e.g. an IRC client).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.go4retro.com/products/64nic/&quot; rel=&quot;noreferrer&quot;&gt;http://www.go4retro.com/products/64nic/&lt;/a&gt; C64 NIC+ by RETRO Innovations.  Wired networking.  I'm not super familiar with its capabilities.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://1200baud.wordpress.com/2017/03/04/build-your-own-9600-baud-c64-wifi-modem-for-20/&quot; rel=&quot;noreferrer&quot;&gt;https://1200baud.wordpress.com/2017/03/04/build-your-own-9600-baud-c64-wifi-modem-for-20/&lt;/a&gt; Plans to construct your own WiFi modem (thanks to user Jules for the information)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6986" LastEditorUserId="6986" LastEditDate="2018-03-09T17:28:21.297" LastActivityDate="2018-03-09T17:28:21.297" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5929" PostTypeId="2" ParentId="5840" CreationDate="2018-03-09T16:55:30.560" Score="16" Body="&lt;p&gt;Technically, the three common methods for storing text in a PDP-8 memory were: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;two 6-bit chars per word, using the 64 glyph TTY character set &lt;/li&gt;&#xA;&lt;li&gt;padded to 8-bit bytes, packed three bytes per two words &lt;/li&gt;&#xA;&lt;li&gt;one char per word, accepting the overhead of four or five unused bits per char&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With a few rare exceptions, programs handle text for two reasons: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the program is intended to handle text as data&lt;/li&gt;&#xA;&lt;li&gt;the program must emit predefined messages to the console, or as part&#xA;of its output&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;One char per one word&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PDP-8 programs that manipulate text (e.g. TECO, WPS8, EDIT) use 7-bit ASCII encoding, storing one char per word and accepting the overhead of five unused bits per char. Scanning and searching text is difficult enough on any minicomputer; no one is willing to entertain the complications of doing so on packed text. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least one program (WPS8) uses the extra bits to encode character attributes such as bold, underline, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Three chars per two words&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This information on 3/2 packing is taken from &lt;a href=&quot;http://homepage.cs.uiowa.edu/~jones/pdp8/faqs/#charsets&quot; rel=&quot;noreferrer&quot;&gt;Doug Jones's excellent archive&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Files under the widely used OS/8 system consist of sequences of 256 word blocks. When used for text or other 8-bit data streams, each block holds 384 bytes. The standard 3/2 packing method is somewhat strange -- byte 1 is stored in the lo 8 bits of word 1, byte 2 in the lo 8 bits of word 2, and byte 3 in the high 4 bits of word 1 and the hi 4 bits of word 2. Failure to unpack correctly can produce text with every 3rd char deleted. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐&#xA;word 1  │ byte 3 hi 4b  │            byte 1             │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 2  │ byte 3 lo 4b  │            byte 2             │&#xA;        └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Because most of the PDP-8 system software was originally developed for paper tape, the binary object code in *.BN files is stored in paper-tape image form using the above packing scheme. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This format was introduced by the authors of OS/8 utilities such as ABSLDR, and subsequent developers never found a reason to break compatibility. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Two chars per one word&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PDP-8 programs that emit predefined messages almost always use the upper-case only 64 char TTY set, and store them as two 6-bit chars per word.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DEC PDP-8 assembler (PAL) (except the earliest editions) includes directives to pack literal strings. TEXT and TEXTZ both pack literal strings into two 6-bit chars per word; TEXTZ in addition appends a 6-bit zero terminator to the string before packing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;TEXT with odd char count appends one halfword of null padding:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    TEXT    @ERROR@&#xA;&#xA;        ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐&#xA;word 1  │           E           │           R           │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 2  │           R           │           O           │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 3  │           R           │        000000         │&#xA;        └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;TEXT with even char count appends no padding:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    TEXT    @STRING@&#xA;&#xA;        ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐&#xA;word 1  │           S           │           T           │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 2  │           R           │           I           │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 3  │           N           │           G           │&#xA;        └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;TEXTZ with odd char count appends a halfword zero terminator and no padding:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    TEXTZ   @ERROR@&#xA;&#xA;        ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐&#xA;word 1  │           E           │           R           │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 2  │           R           │           O           │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 3  │           R           │        000000         │&#xA;        └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;TEXTZ with even char count appends a zero terminator and null padding:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    TEXTZ   @STRING@&#xA;&#xA;        ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐&#xA;word 1  │           S           │           T           │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 2  │           R           │           I           │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 3  │           N           │           G           │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 4  │        000000         │        000000         │&#xA;        └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A routine to write 7b ASCII messages to the console might occupy 20 words, while the corresponding routine to write 6b packed TTY messages would require 34 words. This means that unpacking 6b text consumes less total storage if you have more than about 28 characters of message in all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are a couple of &quot;Hello, world!&quot; programs using typical message dump subroutines:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/ 7-BIT HELLO PROGRAM&#xA;&#xA;        *       200&#xA;        JMS     WRMSG&#xA;                &quot;H&#xA;                &quot;e&#xA;                &quot;l&#xA;                &quot;l&#xA;                &quot;o&#xA;                &quot;,&#xA;                &quot; &#xA;                &quot;w&#xA;                &quot;o&#xA;                &quot;r&#xA;                &quot;l&#xA;                &quot;d&#xA;                &quot;!&#xA;                0&#xA;        HLT&#xA;        JMP     200&#xA;&#xA;/ WRITE MESSAGE TO CONSOLE&#xA;WRMSG,  0&#xA;WRLP,   TAD I   WRMSG   / MESSAGE TEXT FOLLOWS CALL&#xA;        ISZ     WRMSG   / BUMP RETURN ADDRESS&#xA;        SNA             / ZERO MARKS END OF MESSAGE&#xA;         JMP    WREX&#xA;        JMS     WRCHR&#xA;        JMP     WRLP&#xA;/&#xA;WREX,   TAD     K15     / CR&#xA;        JMS     WRCHR&#xA;        TAD     K12     / LF&#xA;        JMS     WRCHR&#xA;        JMP I   WRMSG&#xA;/&#xA;K15,    15&#xA;K12,    12&#xA;&#xA;/ WRITE CHARACTER TO CONSOLE&#xA;WRCHR,  0&#xA;        SKCFL   TTY     / SEND 7B CHAR TO CONSOLE&#xA;         JMP    .-1&#xA;        WRSEQ   TTY&#xA;        CLA             / SOME CONSOLES DO NOT CLEAR AC&#xA;        JMP I   WRCHR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/ 6-BIT HELLO PROGRAM&#xA;&#xA;        *       200&#xA;        JMS     WRMSG&#xA;                TEXTZ   @HELLO, WORLD!@&#xA;        HLT&#xA;        JMP     200&#xA;&#xA;/ WRITE MESSAGE TO CONSOLE&#xA;/ CALLING SEQUENCE&#xA;/        ... AC MUST BE ZERO&#xA;/        JMS    WRMSG&#xA;/               TEXTZ   @MESSAGE@&#xA;/        ... NORMAL RETURN, AC == 0&#xA;/&#xA;WRMSG,  0&#xA;WRLP,   TAD I   WRMSG   / MESSAGE TEXT FOLLOWS CALL&#xA;        MQL             / SAVE NEXT MESSAGE WORD IN MQ&#xA;        ISZ     WRMSG   / BUMP RETURN ADDRESS&#xA;        CLA MQA         / EMIT HI 6B OF WORD&#xA;        BSW&#xA;        JMS     WRHF&#xA;        CLA MQA         / EMIT LO 6B OF WORD&#xA;        JMS     WRHF&#xA;        JMP     WRLP&#xA;/&#xA;WRHF,   0&#xA;        AND     K77     / EXTRACT 6B PAL CHAR&#xA;        SNA             / ZERO MARKS END OF MESSAGE&#xA;         JMP    WREX&#xA;        TAD     K40     / CONVERT 6B PAL TO 7B ASCII&#xA;        AND     K77&#xA;        TAD     K40&#xA;        JMS     WRCHR&#xA;        JMP I   WRHF&#xA;/&#xA;WREX,   TAD     K15     / CR&#xA;        JMS     WRCHR&#xA;        TAD     K12     / LF&#xA;        JMS     WRCHR&#xA;        JMP I   WRMSG&#xA;/&#xA;K77,    77&#xA;K40,    40&#xA;K15,    15&#xA;K12,    12&#xA;&#xA;/ WRITE CHARACTER TO CONSOLE&#xA;/ CALLING SEQUENCE&#xA;/         ... AC MUST CONTAIN 7B ASCII CHAR&#xA;/        JMS     WRCHR&#xA;/        ... NORMAL RETURN, AC == 0&#xA;/        &#xA;WRCHR,  0&#xA;        SKCFL   TTY     / SEND 7B CHAR TO CONSOLE&#xA;         JMP    .-1&#xA;        WRSEQ   TTY&#xA;        CLA             / SOME CONSOLES DO NOT CLEAR AC&#xA;        JMP I   WRCHR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;One interesting exception&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No discussion of string handling on the PDP-8 would be complete without a description of the insanely compact format of the PAL8 assembler symbol table. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The authors of PAL8 managed to cram a 6-char symbol, a 2-bit type, two boolean flags, and a 12-bit defined value into each 4-word symbol table entry. They did this by restricting the symbol character set to 36 chars plus a null terminator, and using radix encoding instead of concatenation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A PAL8 symbol can contain only A..Z and 0..9, must begin with A..Z, and is truncated at 6 chars. To construct a symbol table entry, the chars are first mapped to these char codes: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;     0  terminator or null padding&#xA; 1..26  A..Z&#xA;27..36  0..9&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then the mapped values are stored 2 per word in radix-37 format, that is, hi-char * 37 + lo-char. Since the greatest char code is 36, the greatest value of a radix-37 pair is 36 * 37 + 36 = 1368 (octal 2530) which occupies only 11 bits. This leaves one bit available to store a boolean flag. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The maximum value of the first char pair is even smaller. A symbol must begin with A..Z, so the code for char 1 can only be 1..26. This means the greatest value for word 1 is 26 * 37 + 36 = 998 (octal 1746) which occupies only 10 bits. PAL8 stores symbol type information in the remaining 2 bits. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐&#xA;word 1  │ type  │    char1*37+char2 (octal 45..1746)    │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 2  │flg│      char3*37+char4 (octal 0..2530)       │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 3  │flg│      char5*37+char6 (octal 0..2530)       │&#xA;        ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤&#xA;word 4  │            12-bit dependent value             │&#xA;        └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;PAL8 uses the hi bit of word 2 and word 3 to store additional symbol type information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recovery of the two characters from a radix-37 pair is slow, but this is done only once, when printing out the symbol table. Originally the program had only to keep up with a printer or teletype console. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if earlier editions of PAL used a looser packing. I have the source code for only the OS/8 PAL8 assembler. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Radix text packing was also used on other machines; for example PDP-11 software often used radix-40 to store three chars per 16-bit word. &lt;/p&gt;&#xA;" OwnerUserId="4186" LastEditorUserId="4186" LastEditDate="2018-04-27T19:34:37.987" LastActivityDate="2018-04-27T19:34:37.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5930" PostTypeId="2" ParentId="5925" CreationDate="2018-03-09T17:13:15.087" Score="11" Body="&lt;p&gt;The following article details some of the early history of Commodore BASIC (including other Microsoft BASIC 6502 versions), particularly v1 and v2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.pagetable.com/?p=46&quot; rel=&quot;noreferrer&quot;&gt;Create your own Version of Microsoft BASIC for 6502&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Originally, Commodore paid a flat fee for Microsoft's BASIC, instead of a royalty license, reportedly because Jack Tramiel told Bill Gates, &quot;I'm already married&quot;. Commodore didn't go back to Microsoft for upgrades, instead creating them out of what they had already purchased for that one time fee.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later versions of &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Commodore BASIC&lt;/a&gt; were created by Commodore such as BASIC v4 (PET, CBM), BASIC v4+ (CBM-II), and BASIC v3.5 (Commodore 16 and Plus/4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Commodore created the Commodore 128, they did go back to Microsoft for updates, and they demanded their name be displayed at boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Wikipedia article linked above will probably answer any related questions you might have.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2018-03-09T17:13:15.087" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5931" PostTypeId="2" ParentId="5927" CreationDate="2018-03-09T23:10:26.903" Score="3" Body="&lt;p&gt;&lt;a href=&quot;http://www.kludgesoft.com/c64/nt10.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Novaterm 10&lt;/a&gt; has &lt;a href=&quot;http://www.webnet.at/c64/nt10help_en.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;built-in PPP and a telnet client&lt;/a&gt;. It does NOT have a working web or ftp client. You'll need a Swiftlink, Turbo232 or HART cartridge, a modem, and a dialup ISP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are various ethernet cards like the &lt;a href=&quot;http://www.go4retro.com/products/64nic/&quot; rel=&quot;nofollow noreferrer&quot;&gt;64NIC+&lt;/a&gt;, &lt;a href=&quot;http://dunkels.com/adam/tfe/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Final Ethernet&lt;/a&gt;, and &lt;a href=&quot;http://wiki.icomp.de/wiki/RR-Net&quot; rel=&quot;nofollow noreferrer&quot;&gt;RR-Net&lt;/a&gt; which work with various software and alternative operating systems for the C64 including Contiki and GEOS.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-03-09T23:10:26.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5932" PostTypeId="1" AcceptedAnswerId="5933" CreationDate="2018-03-09T23:50:21.273" Score="23" ViewCount="2642" Body="&lt;p&gt;On pages 150 to 154 of William Tang's (1982) &lt;em&gt;Spectrum Machine Language for the Absolute Beginner&lt;/em&gt;, there are these lines of code. (Note GOTO 9000 is the first non-REM statement in the program).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;9000 REM &#xA;9010 REM initialisation&#xA;9020 LET ze= PI - PI: LET on = PI / PI: LET tw = on+on: LET tr = on+tw: LET fr = tw+tw: LET qk = 256: LET mr = 2020 : LET ln = 200&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So following through the first five variables, ze represents 0 (zero), on 1 (one), tw 2 (two), tr 3 (three) and fr 4 (four). These variables are then (mostly consistently) used throughout the program where the numbers one to four are needed, though at least once on+tw is used for 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that 0 and 1 are derived by calculations based on π!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: Why did the programmer choose to do this? I can think of two possible reasons, though there are almost certainly more.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Obfuscation in the interests of copyright protection.&lt;/li&gt;&#xA;&lt;li&gt;Making sure a novice programmer types in the whole program from beginning to end before any part of it works. (As I said above, line 9000 is called straight away, and the program finishes at line 9180).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To avoid complete speculation, but aware that we are unlikely to get the author's express opinion, it would be good to hear about common practice / people who &lt;em&gt;did&lt;/em&gt; explain this practice in the era of typed program listings, or to see a provable performance benefit from code like this.&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="56" LastEditDate="2018-11-26T16:32:03.833" LastActivityDate="2019-06-08T21:15:34.460" Title="Why does this BASIC program declare variables for the numbers 0 to 4?" Tags="&lt;zx-spectrum&gt;&lt;basic&gt;&lt;books&gt;&lt;sinclair&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5933" PostTypeId="2" ParentId="5932" CreationDate="2018-03-10T00:37:02.440" Score="40" Body="&lt;p&gt;These tricks are usually done to increase speed or reduce space. For most (especially Microsoft) BASIC, constants are stored within a tokenized line as ASCII (as entered), and converted to a floating point number every time they are evaluated. This is a time consuming process. Assigning the number once to a variable to be used thereafter will skip this part and save quite some time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sinclair (Floating Point) BASIC is better than that. While it also includes the number the same way (*1), it is followed by the token &lt;code&gt;0x0E&lt;/code&gt; (*2), and the next 5 bytes storing the constant in floating point format. Sinclair BASIC does now only need to read past the ASCII until the &lt;code&gt;0x0E&lt;/code&gt; and take the FP without the need of conversion - so speed is not an issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But looking at the encoding shows that every time a constant is used it will take at least 7 bytes of program memory:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;1 Byte for the ASCII representation (more for numbers outside the integers 0..9)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;1 byte &lt;code&gt;0x0E&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;5 byte floating point representation&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A variable name is stored within the program as its ASCII representation. So a two letter name (like on, tw, ...) occupies just two bytes (*3). Thus any occurrence of &lt;code&gt;on&lt;/code&gt; is just two bytes instead of seven. That's five bytes saved each time &lt;code&gt;on&lt;/code&gt; is used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, this comes with an offset of assigning the variable, which is 5 bytes plus the expression used. So with &lt;code&gt;LET ze=0&lt;/code&gt; that would be 12 bytes, meaning that already using the variable three times will save space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using &lt;code&gt;ze=PI-PI&lt;/code&gt; saves even further, as this takes only 3 bytes, so the second usages of &lt;code&gt;ze&lt;/code&gt; will yield saved program space. Similar for all the other calculations. It's all about avoiding constants and replacing them by shorter encoded calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, these optimizations also offer some hints about the age of a program, or at least the time its programmer learned the tricks. &lt;code&gt;PI-PI&lt;/code&gt; was eventually the first discovered and used a lot - until someone came up with the idea of &lt;code&gt;NOT PI&lt;/code&gt; which also results in zero, but needs one byte less. &lt;code&gt;SGN PI&lt;/code&gt; gives one. Two is a bit more complex, but &lt;code&gt;on+on&lt;/code&gt; is as good as &lt;code&gt;SGN PI+SGN PI&lt;/code&gt; (both 5 bytes) - later &lt;code&gt;INT EXP SGN PI&lt;/code&gt; with only 4 bytes was discovered. Three again is just &lt;code&gt;INT PI&lt;/code&gt;, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The origin of these very Sinclair BASIC specific tricks starts with the ZX81 (the same as the ZX80, but with Floating Point BASIC). Here program space was scarily rare, thus every byte saved was worth the extra effort - much more than later on with the 'huge' RAM the Spectrum offered (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use of these tricks is a good hint that a programmer started out on a ZX81.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'd say that guy did start on a ZX81, and the above program was written early on - and just moved to the Spectrum later.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, not as entered, but as if it had been listed after being converted to float, and back to printable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - While this structure was introduced with the ZX80 FP BASIC/ZX81, 0x7E was used there. When creating Spectrum BASIC it was changed to 0x0E to allow its character set to be &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum_character_set&quot; rel=&quot;noreferrer&quot;&gt;(mostly) ASCII compatible&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - It's a bit more complex, so dig into BASIC tokenization and variable list handling if you really want to know the fine print.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Then again, we all know that there is never sufficient RAM.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-11-26T11:58:21.623" LastActivityDate="2018-11-26T11:58:21.623" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="5935" PostTypeId="1" AcceptedAnswerId="5939" CreationDate="2018-03-10T01:03:20.963" Score="5" ViewCount="317" Body="&lt;p&gt;Are there some tests that can be done to verify the operation of an Orange Micro Grappler+ printer interface card (1982) in an Apple IIe? I've searched around the web and the paper manuals for solutions or debugging ideas but haven't landed on anything definitive.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Issue A&lt;/strong&gt; - Grappler+ is in slot 1 and my understanding is that PR#1 should direct commands to the printer and PR#0 should return to screen output. Instead PR#1 (or PR#2 when in slot 2) makes the IIe unresponsive to everything except &lt;kbd&gt;control&lt;/kbd&gt;+&lt;kbd&gt;open apple&lt;/kbd&gt;+&lt;kbd&gt;reset&lt;/kbd&gt;. This is the case whether or not the ribbon cable is attached to the card.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Issue B&lt;/strong&gt; - If PR#1 is invoked and printer is on (regardless of paper inserted or printer 'select' status or any other printer buttons) &amp;quot;NOT SELECTED&amp;quot; flashes on screen and there is a constant fast beep until the printer is turned off. I don't know if this signals a card issue or a printer issue or something else.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Printer details&lt;/strong&gt; - The printer is an Apple ImageWriter II. It successfully passed the self-test, the printer buttons do what they're supposed to (line feed, etc.) and I can successfully print from Windows PC (generic driver) via USB (plus a couple adapters to attach to the serial printer cable). Everything seems to work properly.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;General details&lt;/strong&gt; -&#xA;I have always changed cards and cables with the power off. Tried Grappler+ in slots 1 and 2. I reviewed the Grappler+ operating manual and set the DIP switches (tried a few variations). I'm using an IDC to DB25 ribbon cable (red to left/center/away from pin 25) on the card, and a serial printer cable (same one as for the USB test above). Tried with and without 80 column card in slot 0. Tried with DOS 3.3, and ProDOS 1.1.1/AppleBasic 1.1.&lt;/p&gt;&#xA;&lt;p&gt;I grew up with an Apple IIe and knew the details fairly well, but after so many years this one has me stumped. Thanks for any tips you can provide.&lt;/p&gt;&#xA;" OwnerUserId="5364" LastEditorUserId="15334" LastEditDate="2020-11-11T07:44:15.473" LastActivityDate="2020-11-11T07:44:15.473" Title="How to test an Orange Micro Grappler+ card?" Tags="&lt;apple-ii&gt;&lt;hardware-testing&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5937" PostTypeId="2" ParentId="5935" CreationDate="2018-03-10T01:15:39.760" Score="0" Body="&lt;p&gt;Sounds much like a damaged/unreliable ROM code.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Can you read bytes from the PROM area using the monitor? ($C100..$C1FF)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are these the same values as expected?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Can you read bytes from the EPROM area using the monitor? ($C800..$CFFF)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are these the same values as expected?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Try to clean the contacts and repeat.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-03-10T01:15:39.760" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5938" PostTypeId="2" ParentId="5024" CreationDate="2018-03-10T08:48:58.393" Score="-1" Body="&lt;p&gt;Kirby's dream land was made entirely in family basic on a twin famicom with a track ball.... does that answer your question?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit: it wasn't family basic, but a &lt;em&gt;very&lt;/em&gt; similar program.&lt;/p&gt;&#xA;" OwnerUserId="8187" LastEditorUserId="8187" LastEditDate="2018-05-09T22:56:35.277" LastActivityDate="2018-05-09T22:56:35.277" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="5939" PostTypeId="2" ParentId="5935" CreationDate="2018-03-10T11:41:30.860" Score="5" Body="&lt;p&gt;&lt;strong&gt;Issue A&lt;/strong&gt; is probably just the card waiting to detect a printer. (But I haven't disassembled the ROM.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Issue B&lt;/strong&gt; is probably because you're trying to connect a serial printer to a (Centronics) parallel card.&lt;/p&gt;&#xA;&lt;p&gt;From the &lt;a href=&quot;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Parallel/Orange%20Micro%20Grappler%20plus%20Printer%20Interface/Manuals/&quot; rel=&quot;noreferrer&quot;&gt;Grappler plus Operator's Manual&lt;/a&gt;, top left on page 3:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;GRAPPLER+ STATUS CHECK&lt;/p&gt;&#xA;&lt;p&gt;Before sending a character to the printer, the&#xA;GRAPPLER+ will check the SELECT and PAPER EMPTY status lines. If the&#xA;printer is not &amp;quot;on-line,&amp;quot; or is out of paper, a warning will be&#xA;printed on the screen and the Apple will beep.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This suggests the card ROM is working fine, but it wants SELECT and (not) PAPER EMPTY.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-03-10T11:41:30.860" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="5940" PostTypeId="2" ParentId="5925" CreationDate="2018-03-10T13:38:52.957" Score="-1" Body="&lt;p&gt;It turns out Monte did not work on the 6502 version, but pointed me in the direction to figure all of this out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The A% format originates not in MS BASIC, but the one they based it on, BASIC-PLUS on the PDP-11. Like the later MS version, BASIC-PLUS indicated an integer value with the %, so for instance &lt;code&gt;A%&lt;/code&gt;. As in the MS version, integer variables were a 16-bit signed value. It is not clear whether BASIC-PLUS had a separate integer math package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This feature reappeared in later versions of MS BASIC, although I have not tracked down which one exactly. It does not appear to be part of the original 6502 version that was supplied to Atari, for instance. As it was available on some Commodore machines, this implies it happened relatively early in the evolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, the MS version used integer variables only as indexes and values in arrays. This allowed a more compact in-memory format, which was especially useful for large arrays of numbers like machine code stored in a &lt;code&gt;SYS&lt;/code&gt; array.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With these limited use-cases, there was no need for a separate math unit - this was being done for size not speed - and so any math using these variables simply converted it to the 9-byte FP format and used the existing FP math routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be interesting to modify the CBM code to add a separate integer math library with just the basic routines in it, perhaps only plus and minus. I suspect this would have a large effect on average program performance.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-03-10T13:38:52.957" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="5941" PostTypeId="1" CreationDate="2018-03-10T15:06:26.707" Score="34" ViewCount="3327" Body="&lt;p&gt;Today I got my (first) Soviet ZX Spectrum clone. The person who sold it to me had inherited it and had no idea how it worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to be a home-made clone, rather than a factory-built one. See picture in case I'm wrong about this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wY5s3.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wY5s3.jpg&quot; alt=&quot;zx spectrum clone case&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have looked at the most similar ones I could find online, but the ports seem to be in an unpredictable order on different clones. I show them upside down here to match the subsequent picture from the inside of the machine. I take it the port with the (in fact upside down) T is the electricity adapter socket, but would value confirmation of this before I fry the computer by plugging the electricity adapter (which I have) into the wrong place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DB9G3.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DB9G3.jpg&quot; alt=&quot;zx spectrum clone ports from the outside&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a picture of the ports as they are connected to the motherboard. As in the previous picture, the reset button is on the far right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/44soh.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/44soh.jpg&quot; alt=&quot;zx spectrum clone motherboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And here are the ports up close from the inside. Again, I'm guessing the two thicker wires connected to the port next to the reset button confirm that it is the electricity adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/j2yeS.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/j2yeS.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is - &lt;strong&gt;can anyone with more knowledge of Spectrum (clone) architecture and/or electronics confirm that the port next to the reset button is the electricity adapter, and divine what the other ones are?&lt;/strong&gt; For practical purposes, the monitor / TV out and EAR would be the most useful ones, though I take it these Soviet clones often had things like joystick ports, and I got a five-pin joystick together with this purchase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should say that &lt;em&gt;all&lt;/em&gt; the cables I have are five pin (DIN?), and though the middle port is seven pin, I've already experienced successfully using a five pin cable with a seven pin port (on my Elekronika BK-0010-01).&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="3290" LastEditDate="2020-06-07T03:57:15.967" LastActivityDate="2020-06-07T03:57:15.967" Title="Which ports are which on this Soviet ZX Spectrum clone?" Tags="&lt;hardware&gt;&lt;zx-spectrum&gt;&lt;ussr&gt;&lt;zx-spectrum-clones&gt;&lt;clone&gt;" AnswerCount="5" CommentCount="6" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5942" PostTypeId="2" ParentId="5941" CreationDate="2018-03-10T15:22:09.453" Score="22" Body="&lt;p&gt;No need for any special Spectrum knowledge. It's about power, and &lt;strong&gt;there is no rectifying, no appropriate sized capacitor and voltage control elements&lt;/strong&gt; on this board, so it most definitely does &lt;strong&gt;not take AC&lt;/strong&gt; but rather some well regulated DC input. I'd assume 5V. So operating it at some arbitrary AC and higher voltage my fry it right away.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Usually the start would be some laboratory PS (always a good investment if you plan to play with old stuff. And don't buy cheap here). But in times of need some USB charger might as well work for 5V (*1). Clip the connector, detect the orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In either case, look at the board if there are markings for ground or +5V. If lost, take a look at the chips. For example all RAMs typically have their ground on pin 16 - the top rightmost pin (mark on top). See where these traces are going and connect to the power lines, and you've got ground. Now you already can't damage polarity. Next is finding the +5V  (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since all is wired with single white wires (*2) and connected to various parts of the board, it's your turn to follow all of them, as the pictures don't really reveal a lot. Adding some &lt;em&gt;highres&lt;/em&gt; from direct above and below the board might allow others to help.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;SU computers often had external PS to reduce potential dangers within the device. In fact, school installations more often than not had central 5V or 12V routed to each desk, so the pupils only had contact to low voltage.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;What you got there is a LENINGRAD-1 board produced by Tachion (тахион) in Leningrad - today's St.Petersburg. The board was designed by Sergeij Zonow around 1988, who then founded Tachion to mass produce it and sell it to companies building their own versions of the Spectrum or hobbyists fitting them in home made cases. The resulting machines had many names and designs. Like Delta-N, Rita or Jaguna and endless variations of ZX/Specy/Spectrum in English, Russian or mixtures thereof and many regional names like Dubna, Leningrad, Ural, Krasnojarsk, Moskow, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Spectrum was in Russia like the VC20 or C64 over here ... in fact even more so, as it was, until the late 90s &lt;em&gt;the&lt;/em&gt; eastern European machine. The scene was exploding from like 1988 to the mid 1990. There were literally hundreds of meetings each month. And the Leningrad board was at the core of this movement. It also was that movement that inspired the Selenograd chip works to create a ULA equivalent to allow further integration. Selenograd was also the place doing the Z80 clones for the SU using East German technology.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Not sure, but I think I remember the Spectrum also needed +12V. The connector seams to have 3 pins, but looking at the picture I can only see two wires. Also from other details I'd say this board seams to be designed for a single voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Reminds me of the floppy drive for the Estonian &lt;a href=&quot;https://en.wikipedia.org/wiki/Juku_E5101&quot; rel=&quot;noreferrer&quot;&gt;Juku 5101&lt;/a&gt; computer. A simple enclosure for two 5¼ inch drives, but instead of flat ribbon, the connectors were wired individually all white wires. A hell of a work for a mass-produced machine, and even more so to debug.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-03-12T19:31:16.533" LastActivityDate="2018-03-12T19:31:16.533" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="5943" PostTypeId="2" ParentId="5932" CreationDate="2018-03-10T17:04:24.207" Score="20" Body="&lt;p&gt;The answer by Raffzahn is very good, except that I disagree that ZX80/81 background is all that important and I also feel he missed one important trick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally know most of these tricks from studying BASIC loaders for ZX Spectrum games. You see, yes, Spectrum has more memory, but when the machine code program is loaded, it was absolutely not uncommon to set up the stack at 24576-1 or 24320-1 or even 24064-1 (this was especially true with Multiface snapshots repackaged as hacked versions of games). With BASIC memory on unexpanded Spectrum 48K starting at 23755, this leaves you with no more RAM to Spectrum BASIC than the amount of RAM you have on ZX81.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, many loaders started with a code like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 INK NOT PI: PAPER NOT PI: BORDER NOT PI: CLEAR VAL &quot;24063&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Raffzahn already explained NOT PI. VAL &quot;number&quot; is another very common approach. Indeed, by default a number with X digits is stored in ZX BASIC using X+1+5 bytes. Number 24063 would normally occupy 5+1+5=11 bytes, whereas seemingly inefficient VAL &quot;24063&quot; only takes 3+5=8 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VAL works great for single digit numbers too. VAL &quot;2&quot; is also 4 bytes and much clearer than ugly INT EXP SGN PI. There is absolutely no need to use any combinations longer than 4 bytes (so SGN PI + SGN PI is interesting, but ultimately useless).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One last bit of probably irrelevant trivia. One can also create binary-edited basic programs, which work but do not confirm to what can be inputted using BASIC line editor. Using this, any number (floating point included) can be stored as exactly 1+1+5 bytes, i.e. there is technically no need to spend more than 7 bytes per constant. So, even though CLEAR VAL &quot;24063&quot; is easier to type in, the most size-efficient loaders would typically have instead command CLEAR 0, stored as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DB #FD,'0',#0E,0,0,#FF,#5D,0 ; the number occupies 7 bytes only&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This works because the actual ASCII representation of a number is only used by the editor; the interpreter only cares about binary representation after #0E.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, even a cursory look through the book indicates that the authors are working with 16K ZX Spectrum in mind, which actually makes a lot of sense for 1982. For example, on p.9 they discuss &quot;Nevertheless, such assemblers typically require 6K of memory, and are therefore of limited use on 16K machine. The Spectrum display takes up 7K of memory, and after loading the assembler you may have only 4K of memory left for you assembly language program.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even more relevant to the programme &quot;EZ-Code&quot; listed on pages 150 to 154 (which is a kind of machine code editor in BASIC) is the discussion on p.145 of the assumed memory map. &quot;Your program module must not be greater than 800 bytes or more than 200 instructions. You cannot load the final program below memory 31499 (in order not to wipe-off the EZ-Code program)&quot;. Clearly, the authors are working under assumption here that there may be no memory above 32768.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, the memory is quite tight because they are assuming 16K Spectrum. Hence, the likely need to economize space in their BASIC code.&lt;/p&gt;&#xA;" OwnerUserId="5039" LastEditorUserId="5039" LastEditDate="2018-03-13T00:34:40.580" LastActivityDate="2018-03-13T00:34:40.580" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5944" PostTypeId="2" ParentId="5941" CreationDate="2018-03-11T02:13:27.280" Score="13" Body="&lt;p&gt;Looking at the linked &lt;a href=&quot;https://k1.spdns.de/Vintage/Sinclair/82/Clones/Russia/LENINGRAD/Build%20your%20own!/EL-PLACE.gif&quot; rel=&quot;noreferrer&quot;&gt;schematic&lt;/a&gt; and the photo of the internals, I'd say the ports are the following (listed from the reset switch over)&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Reset&lt;/li&gt;&#xA;&lt;li&gt;Power&lt;/li&gt;&#xA;&lt;li&gt;Composite video (or possibly monochrome luma only)&lt;/li&gt;&#xA;&lt;li&gt;Joystick&lt;/li&gt;&#xA;&lt;li&gt;Tape&lt;/li&gt;&#xA;&lt;li&gt;RGB video&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The port with the two thicker wires is almost certainly the power, as you identified, backed up by the &quot;upside-down T&quot; symbol on the back of the case indicating the ground pin.  You'd have to show the underside of the board to be sure though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both the composite port and RGB port connect to the same area of the board (which is near to the RAM; chips with green capacitors on top) and you can see &quot;R&quot;, &quot;G&quot;, and &quot;B&quot; silk-screened on the board there.  The RGB port has six wires (R, G, B, Sync, ground, and shield), and the composite port has three (video, ground, shield).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tape port and joystick go to the same part of the board as the wires from the keyboard, indicating all the I/O is over in that area.  The tape port would be three wires (in, out, ground), and the joystick port with 6 wires (4 directions, button, +5 volts).&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2018-03-11T02:13:27.280" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5945" PostTypeId="2" ParentId="5941" CreationDate="2018-03-11T07:52:04.290" Score="11" Body="&lt;p&gt;Only you can decide which port is which as you are the only one with access to your HW. I would use multi-meter and or short circuit tester:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Power supply&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see no stabilisator nor &lt;strong&gt;DC/DC&lt;/strong&gt; nor &lt;strong&gt;AC/DC&lt;/strong&gt; converters so the power supply is external. Here is first &lt;strong&gt;Z80&lt;/strong&gt; pinout image I found in Google you can check against any &lt;strong&gt;Z80&lt;/strong&gt; datasheet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TEYw8.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TEYw8.png&quot; alt=&quot;Z80&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is look from top side of the chip (just like when you look at the real Z80 on your board). Notice the up marker (the engraved half circle or rectangle or sometimes just dot on top middle) so yo now how your chip is oriented. Now just trace where:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pin11 +5V&#xA;pin29 GND&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;are connected to your ports. be careful and check both directions of current that means if you find that some pin of your port is connected to GND for example make sure the conection is there if you swap cables &lt;code&gt;+/-&lt;/code&gt; if the conection gets lost you got some diode in the path and you are not in direct connection. Also capacitors tent to false positively show you connection which is not there but that last usually only few seconds. Test only with small DC voltage multimeters use low current and small voltage for this so you should be fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This should have you located the power supply port easily. The cables to it should be the thickest (but that is not rule for home made stuff) My bet it is the right most connector with 2 cables only (on the image below).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you need +5V 1A DC (direct current) power supply you can salvage any USB charger (they are usually &lt;code&gt;0.8 - 1 A&lt;/code&gt;) but using a lab power supply with current limiter is better idea at least until you bring the computer from the dead as you can set low current limit and check if there is no problems without actually burning the chips ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;ULA&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should locate &lt;strong&gt;ULA&lt;/strong&gt; chip(s). I can not recognize it on your image as I am used to &lt;strong&gt;DIL40&lt;/strong&gt; version. There are however versions of ULA distributed to more smaller chips 4 I think.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you already have keyboard try to trace to which &lt;strong&gt;IC&lt;/strong&gt;(s) it is connected that should be the &lt;strong&gt;ULA&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way is to identify all the &lt;strong&gt;IC&lt;/strong&gt; parts on your board. There should be memories 6116 or 4116 or something like that (beware Russian chips use very different numbers) there should be some &lt;strong&gt;TTL&lt;/strong&gt; multiplexors and may be also some &lt;strong&gt;TTL&lt;/strong&gt; gates like AND/OR/XOR/NOT The TTL chips start usually with &lt;code&gt;74&lt;/code&gt; I see quite a few of them on the image but there are a lot of the russian chips and I do not recognize those at all as I did not use them so much (just few times when there was no other choice). What ever will be left is most likely the &lt;strong&gt;ULA&lt;/strong&gt;. Here is my wild guess (the big chip DIL40 is the Z80 CPU)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wwww9.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wwww9.jpg&quot; alt=&quot;PCB layout&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now try to find out yours &lt;strong&gt;ULA&lt;/strong&gt; pinout and trace the pins of interest. That will let you find keyboard, sound out , tape in and video out.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Video&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would start with video as without it is hard to diagnose/use your ZX. The video output usually uses &lt;strong&gt;TV modulator&lt;/strong&gt; circuit which is usually a small circuit enclosed in Faraday's cage casing (small metalic box) with TV antenna connector going directly out of it. I see no such stuff on your board. So either it uses different type of video signal or the small metalic part I marked is the modulator. Anyway the modulator chip usually uses some &lt;strong&gt;TDA&lt;/strong&gt;xxx chip so if you see that you have it (again Russian counterparts can have different designation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So locate the video modulator chip and look for its pinout. There you should see if it needs additional voltages like &lt;code&gt;-12V&lt;/code&gt;. If it does trace where it is connected to. Either it will lead directly to some port or to some circuitry that will create the voltage from +5V in which case you do not need additional voltage for power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beware in case of more than one voltage power supply all the voltages should have specific order of turning on and off. If not provided you can seriously damage the chips using them (IIRC that was the self destruct reason of original ZX spectrum due to dried out capacitor in DC/DC converter circuit). But if chips use only single voltage you should be fine (as the newer clones does).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Anyway all the ports pinouts you need trace to the &lt;strong&gt;IC&lt;/strong&gt; chips they are interconnected with/to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The electrolytic capacitor I marked with red is most likely the power supply filtration (most likely connected to &lt;strong&gt;+5V&lt;/strong&gt; and &lt;strong&gt;GND&lt;/strong&gt;) for the whole computer and the design looks pretty old &lt;strong&gt;RVHP&lt;/strong&gt; style so it is most likely dried out already and should be changed (otherwise you risk random reset or crashes of your computer). I see only one other electrolyte (on the opposite side of CPU) small black cylinder that might need to change too but it looks much newer and also it most likely is not that important (my guess it is just CPU power up reset circuit reseting the CPU when you plug in/turn on the power supply) but that is just my guess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;[Edit1]&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well as mnem and jules pointed out there might not be an ULA present there is another way to identify the video. Simply plug in the power and hook up an oscilloscope to the port. Look for video signal there. To make this easier try to blindly program Border color different than white in BASIC. Now you are looking for signals with specific frequencies and shape. See &lt;a href=&quot;http://martin.hinner.info/vga/pal.html&quot; rel=&quot;noreferrer&quot;&gt;PAL video timing specification&lt;/a&gt;. So measure each pin of the undetermined ports and deduce from shape, voltage levels and frequency what the pin is. Flat lines are usually just shield or GND or inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sound output can be deduced similarly ... just try looping some BEEP in basic and look for sound square wave output with hear-able frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know coding in Basic blindly is not easy but it is doable I did it before with my ZX clone :) ... You can train on different machine or in emulator ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-03-11T09:46:13.330" LastActivityDate="2018-03-11T09:46:13.330" CommentCount="19" ContentLicense="CC BY-SA 3.0" />
  <row Id="5946" PostTypeId="2" ParentId="5925" CreationDate="2018-03-11T13:24:55.603" Score="1" Body="&lt;p&gt;The 6800 and 6502 CPUs both have BCD support and it is believed Microsoft's 6502 BASIC was derived from its 6800 BASIC, so the BCD could have been added when creating the 6502 BASIC but it may be more likely it was done for the 6800 BASIC. The 8080 didn't have BCD so it shouldn't have been in that version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would check Microsoft's 6800 BASIC (ran on the SwTPc 6800, written by Richard W. Weiland) and perhaps also some of their other 6502 BASICs such as Applesoft to see whether they also use BCD. I suspect Applesoft is the same as Commodore BASIC because BASIC benchmarks run on the Commodore 64 and Apple II are the same speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any version of Microsoft BASIC that asks &quot;MEMORY SIZE?&quot; at startup, will display the author by replying with 'A'.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2018-03-11T13:24:55.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5947" PostTypeId="1" CreationDate="2018-03-11T14:23:39.087" Score="16" ViewCount="4869" Body="&lt;p&gt;I saw &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2095/commodore-64-to-modern-tv&quot;&gt;Commodore 64 to modern TV&lt;/a&gt; about how to connect the Commodore 64 to a modern TV. I don't understand all the details of the answer, so I wanted to try and ask something specific here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, I just got a Commodore 64C and I have a VGA monitor. I have bought a converter box (&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B0144DEN7Y&quot; rel=&quot;noreferrer&quot;&gt;specifically this one&lt;/a&gt;) that supposedly can convert S-Video to VGA. From looking around (&lt;a href=&quot;https://ilesj.wordpress.com/2012/11/17/c64-s-video-cable-the-easy-way-and-with-no-scart/&quot; rel=&quot;noreferrer&quot;&gt;for example here&lt;/a&gt;) it sounds like the S-Video out on the Commodore 64 isn't a &quot;normal&quot; S-Video output. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To use a modern converter box, one would need a special cable (&lt;a href=&quot;https://www.amazon.com/review/R1Q2CWLUA559HW/ref=ask_dp_lswr_rp_hza&quot; rel=&quot;noreferrer&quot;&gt;seen for example here&lt;/a&gt;) that maybe reduces the voltage or something. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this correct?&lt;/p&gt;&#xA;" OwnerUserId="8158" LastEditorUserId="278" LastEditDate="2018-03-11T17:49:34.343" LastActivityDate="2018-03-12T22:08:59.620" Title="Is the s-video output on the Commodore 64 different from &quot;normal&quot; s-video?" Tags="&lt;commodore-64&gt;&lt;vga&gt;&lt;s-video&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5948" PostTypeId="2" ParentId="5947" CreationDate="2018-03-11T14:49:04.873" Score="3" Body="&lt;p&gt;I'm not so sure about your question. The C64 signal is a pretty standard signal, but you got to use a Commodore specific cable anyway, as the C64 outlet isn't compatible to &lt;em&gt;any&lt;/em&gt; standard. So buying a ready made cable will be the best solution - or wire one like described in the links you presented. Just take care that it's a 262° / DIN 41524 plug (not the more common 270° one often found on audio eq).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-03-11T14:49:04.873" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5949" PostTypeId="2" ParentId="5947" CreationDate="2018-03-11T15:05:42.893" Score="21" Body="&lt;p&gt;The 64 has separate outputs on the video port for luma and chroma which you can adapt to an S-Video output.  There are a few caveats, however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chroma signal is a bit &quot;hot&quot; compared to the S-Video standard.  The S-Video spec for the chroma line for NTSC is 626.70mVP-P (75% Color Bars), 835.60mVP-P (100% Color Bars) and for PAL 663.80mVP-P (75% Color Bars), 885.10mVP-P (100% Color Bars).  I've never seen anyone actually measure and post the output level on the 64's chroma line, but it outputs at a higher voltage than what the S-Video standard dictates.  Presumably, this is because the 64's Y/C output predates the S-Video standard by several years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This higher level output mostly results in over-saturated bleeding colours on a CRT TV but can result in all sorts of crazy colour-cycling nonsense on some LCD TVs, depending on how they process the S-video input internally.  The &quot;special cable&quot; involves putting a 300-ish Ohm resistor on the chroma output to get the output voltage down closer to S-Video specifications.  This gets you a cleaner S-Video output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Really old model 64's have a five pin video port, not an 8 pin one, which doesn't actually have a separate chroma line in it.  Instead it has just a luma and a composite output.  You can technically use the composite in place of the chroma, but that's not really recommended since it won't give you a nice picture at all.  The luma line can be used on its own for a good monochrome / B&amp;amp;W output, however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One further thing you have to worry about though, as far as using an S-Video to VGA converter box.  The C64 outputs a 240p signal, not a 480i (interlaced) signal.  Not all converter boxes will support a 240p input correctly, it is hit or miss.  Check the reviews carefully and see if people are complaining about it not getting a picture with their older video game consoles (NES, etc).&lt;/p&gt;&#xA;" OwnerUserId="320" LastEditorUserId="320" LastEditDate="2018-03-12T22:08:59.620" LastActivityDate="2018-03-12T22:08:59.620" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5951" PostTypeId="2" ParentId="1874" CreationDate="2018-03-11T16:34:13.143" Score="1" Body="&lt;p&gt;The computer lab at &lt;a href=&quot;http://bdh.scdsb.on.ca&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bradford District High School&lt;/a&gt; consisted of about eight PET 4032's connected to shared printers and disk drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every so often the &quot;killer poke&quot; would come up, the last time I recall I think was in the letters section of &lt;em&gt;Compute!&lt;/em&gt; Invariably, shortly thereafter someone would try it. The result was that the screen would go &quot;wonky&quot; as if you had incorrectly adjusted the horizontal hold control on an analogue TV, sort of &quot;tearing&quot; as opposed to the ordered rolling of a maladjusted vertical hold. No one was &lt;em&gt;that&lt;/em&gt; crazy though, and always turned off the machine within a few seconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The year I left, one of the 4032s died, and everyone swore up and down it was due to the killer poke being left running overnight by mistake. I cannot personally confirm this. I returned later that summer and the machine had been fixed, whatever the original problem happened to be. That is when I saw &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4805/pet-space-arcade-game-with-surprisingly-good-graphics/4811&quot;&gt;Space Spores&lt;/a&gt; for the second time (the first was at &lt;a href=&quot;http://ontarioplace.com/en/home/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ontario Place&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was also the summer where the business classes &lt;a href=&quot;https://en.wikipedia.org/wiki/Unisys_ICON&quot; rel=&quot;nofollow noreferrer&quot;&gt;ICON&lt;/a&gt; computers all died when a trojan RMed the entire hard drive. Apparently, it was hidden in a BASIC spreadsheet that the teachers always ran in their prived accounts.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-03-11T16:34:13.143" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5952" PostTypeId="1" AcceptedAnswerId="5957" CreationDate="2018-03-11T20:19:53.947" Score="46" ViewCount="14749" Body="&lt;p&gt;In general, there are two types of syntax of defining functions - Something like C, C++, C#, or Java (&lt;code&gt;int functionName(char arg)&lt;/code&gt;) vs the ML (and others) tradition of defining the return type after the function (and using something like a &lt;code&gt;fun&lt;/code&gt; keyword to define a function - like &lt;code&gt;fun functionName(char arg): int&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the advantages (for the parser, at least) for a &lt;code&gt;fun&lt;/code&gt; keyword is that it lets the parser be context-free (it doesn't have to guess if &lt;code&gt;int&lt;/code&gt; defines a variable or if it defines a function).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When C was invented, computers had very little memory and speed (so little, that the reason C requires one to define all the variables in the beginning of the function was because it had to be a one-pass parser). Why didn't they choose the simple way out and use function defining keyword?&lt;/p&gt;&#xA;" OwnerUserId="7488" LastActivityDate="2018-03-14T12:25:51.577" Title="Why did C have the return type before functions?" Tags="&lt;history&gt;&lt;c&gt;" AnswerCount="5" CommentCount="9" FavoriteCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="5953" PostTypeId="1" AcceptedAnswerId="5956" CreationDate="2018-03-11T20:25:34.320" Score="3" ViewCount="1280" Body="&lt;p&gt;How is the carry flag set during a subtraction by the 8080 or 8085 processor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For addition, the carry flag is set if the result is greater than 255 (i.e. if it overflows).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;https://www.tramm.li/i8080/Intel%208080-8085%20Assembly%20Language%20Programming%201977%20Intel.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;programmer's manual&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Notice that the SUB instruction complements the carry generated by the two's complement addition to form a 'borrow' flag.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Does this mean it simply flips the carry flag that would be generated by addition as described above? (I.e. sets it when the result does not overflow i.e. less than or equal to 255?)&lt;/p&gt;&#xA;" OwnerUserId="6672" LastActivityDate="2018-03-11T21:39:03.637" Title="Carry flag in 8080/8085 subtraction" Tags="&lt;8080&gt;&lt;8085&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5954" PostTypeId="2" ParentId="5058" CreationDate="2018-03-11T20:44:41.503" Score="6" Body="&lt;p&gt;I do not have any background in chipdesign, so I cannot add anything meaningful to Jules answer. But I backed Brian Bagnall's Kickstarter &quot;The Amiga Years&quot; where one stretchgoal was a poster with the fat-agnus schema. &#xA;So I provide this to hope it helps.&lt;a href=&quot;https://i.stack.imgur.com/VDJ09.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VDJ09.jpg&quot; alt=&quot;Agnus Schema&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8195" LastEditorUserId="8195" LastEditDate="2018-03-11T21:26:27.323" LastActivityDate="2018-03-11T21:26:27.323" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5955" PostTypeId="2" ParentId="5952" CreationDate="2018-03-11T21:01:45.013" Score="14" Body="&lt;p&gt;Typically with questions like this, it's very difficult to determine the exact reason &lt;em&gt;why&lt;/em&gt; a past design decision was made. This decision would have been made very early on in the development of C, and little was recorded about the design process at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the best we might hope for at this time is guesses. I have a few:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The design of C tried to minimise the number of reserved keywords in the language. Adding a keyword solely for defining a function would have required another reserved keyword.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The designers prioritised consistency over ease of parsing. The consistency I'm referring to here is the placement of the type in declarations such as &lt;code&gt;int x;&lt;/code&gt; and &lt;code&gt;int f();&lt;/code&gt;. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Declaring a function pointer variable with your suggested &lt;code&gt;fun&lt;/code&gt; keyword within the framework of C's variable declarations might be problematic. Would it look like this?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;fun(char arg): int *fp;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Parsing that might become a worse problem than the one you're trying to solve.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Also, it's not clear to me whether the designers cared whether their language was context-free or not. The fact is that they &lt;em&gt;did&lt;/em&gt; implement a compiler for the language that became C, and the fact that it worked was probably more important than adhering to particular rules of language grammar construction.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2018-03-11T21:01:45.013" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5956" PostTypeId="2" ParentId="5953" CreationDate="2018-03-11T21:39:03.637" Score="8" Body="&lt;p&gt;The 8080 sets the carry flag when the unsigned value subtracted is greater than the unsigned value it is subtracted from.  So for &lt;code&gt;SUB B&lt;/code&gt; carry is set if and only if the unsigned value of &lt;code&gt;B&lt;/code&gt; register is greater than the unsigned value of &lt;code&gt;A&lt;/code&gt; register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What the manual is getting at is that subtraction can be performed by adding the two's complement of the value being subtracted.  In that case a carry would result when the subtracted value is smaller than or equal to the value being subtracted from.  Thus they point out that the carry flag takes on the opposite of that carry from adding the 2's complement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can only guess that the manual mentions this because the 8080 performs the subtraction this way internally or that an electrical engineer would naturally think of performing subtraction in this way and might be surprised that carry is not what they might expect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, rest assured that it treats the carry flag consistently so that multi-byte subtraction can be performed with &lt;code&gt;SUB&lt;/code&gt; and &lt;code&gt;SBB&lt;/code&gt; instructions.  For example, this code will subtract the 24 bit value in &lt;code&gt;BCD&lt;/code&gt; from the 24 bit value in &lt;code&gt;EHL&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   LD   A,L&#xA;   SUB  D&#xA;   LD   L,A&#xA;   LD   A,H&#xA;   SBB  C&#xA;   LD   H,A&#xA;   LD   A,E&#xA;   SBB  B&#xA;   LD   E,A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="301" LastActivityDate="2018-03-11T21:39:03.637" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5957" PostTypeId="2" ParentId="5952" CreationDate="2018-03-11T22:24:16.200" Score="68" Body="&lt;p&gt;Dennis Ritchie’s paper on &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/chist.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The Development of the C Language&lt;/em&gt;&lt;/a&gt; gives some idea of the reasoning behind this: namely, the fundamental rule in C that declaration syntax should match expression syntax.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For each object of such a composed type, there was already a way to mention the underlying object: index the array, call the function, use the indirection operator on the pointer. Analogical reasoning led to a declaration syntax for names mirroring that of the expression syntax in which the names typically appear. Thus,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;int i, *pi, **ppi;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;declare an integer, a pointer to an integer, a pointer to a pointer to an integer. The syntax of these declarations reflects the observation that &lt;code&gt;i&lt;/code&gt;, &lt;code&gt;*pi&lt;/code&gt;, and &lt;code&gt;**ppi&lt;/code&gt; all yield an &lt;code&gt;int&lt;/code&gt; type when used in an expression. Similarly,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;int f(), *f(), (*f)();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;declare a function returning an integer, a function returning a pointer to an integer, a pointer to a function returning an integer;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;int *api[10], (*pai)[10];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;declare an array of pointers to integers, and a pointer to an array of integers. In all these cases the declaration of a variable resembles its usage in an expression whose type is the one named at the head of the declaration.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It appears this rule trumped parser considerations. Its immediate consequence is that function declarations can’t use specific keywords, or impose a different ordering of declaration components.&lt;/p&gt;&#xA;&lt;p&gt;It’s worth noting that parsing was somewhat different in early C, since function declarations didn’t specify their arguments, and function definitions separated the argument list from the argument declarations (which weren’t necessary for &lt;code&gt;int&lt;/code&gt; arguments):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sum();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;declares a &lt;code&gt;sum&lt;/code&gt; function, which would then be defined as&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sum(a, b) {&#xA;    return a + b;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(no types needed here, the default is &lt;code&gt;int&lt;/code&gt;). So the parser didn’t deal with types inside argument lists...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-03-12T18:23:18.240" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5958" PostTypeId="2" ParentId="5952" CreationDate="2018-03-11T22:46:23.553" Score="8" Body="&lt;p&gt;Type name before function name (and type name before variable name) was common at the time C was designed, for instance I believe Algol 60 and FORTRAN both declared functions that way. &quot;Because that's the way other people already do it&quot; is a strong argument when designing the &quot;user interface&quot; of a programming language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt that parser performance had anything to do with it. (And yes I've written a compiler for a small computer system.) Parsing gets a lot of attention in textbooks and classes, but it's not that complicated or memory intensive. (At least, until you get to C++ template levels of absurdity.)&lt;/p&gt;&#xA;" OwnerUserId="8197" LastActivityDate="2018-03-11T22:46:23.553" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5959" PostTypeId="1" AcceptedAnswerId="5964" CreationDate="2018-03-12T04:50:51.937" Score="6" ViewCount="243" Body="&lt;p&gt;As early as the seventies, some computers used RAM in page mode, in which you can read two or more words from sequential locations in rapid succession by only supplying the column address once, and then just supplying the row address of each location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that mode, can the decision whether to read a second word, depend on the contents of the first?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, can you, with 1970s technology, read one word, check its contents (with fast hardwired logic, not expecting software to be fast enough for such), and on the basis of that, decide whether to read a second word in fast page mode?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or is it the case that by the time the first word is read, plus a couple of gate delays for a minimum analysis, it's too late; to meet the timing constraints of page mode, you have to already have started the process of reading the second word if you are going to?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-05-01T12:49:33.280" Title="Can fast page mode depend on the first data retrieved?" Tags="&lt;memory&gt;&lt;performance&gt;&lt;chip&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5960" PostTypeId="2" ParentId="5959" CreationDate="2018-03-12T05:50:27.373" Score="5" Body="&lt;p&gt;The earliest point at which a device could supply a new column address would generally be when it reads the data from the old one.  If one added logic that added an extra 20ns to the time required for the chip to receive a valid address after it output data, that would add 20ns to the total time required for the chip to perform both reads.  Using column mode might still allow slightly better performance than would be possible without it, but adding any extra delay to column mode would reduce the benefits to the point that it may no longer be worth using.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-03-12T05:50:27.373" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="5961" PostTypeId="2" ParentId="5941" CreationDate="2018-03-12T05:58:47.203" Score="1" Body="&lt;p&gt;Use the schematics &lt;a href=&quot;http://speccy.info/%D0%9B%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3%D1%80%D0%B0%D0%B4_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80)&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://speccy.info/%D0%9B%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3%D1%80%D0%B0%D0%B4_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80)&lt;/a&gt; to trace everything up to the connectors. Any other way would be just guessing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can power the board from any widespread USB charger, 2A would be enough. Trace common power pins (ground: pin 7 at any DIP14 IC or pin 8 at any DIP16 IC, 5v: pin 14 or pin 16) to the one of the connectors (SUPPOSEDLY that is DIN-3 one) and then build the cable from any USB cable, using DIN-5 or DIN-3 male plug.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-03-12T05:58:47.203" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5962" PostTypeId="1" CreationDate="2018-03-12T13:04:46.607" Score="1" ViewCount="537" Body="&lt;p&gt;Though power of 2 word sizes look in hindsight like a natural consensus, historical computers used quite a wide variety, including but not limited to 9, 18, 36, 12, 24 and 60 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Power-of-2 computers have tended to end up (leaving aside 8087's 80-bit extended precision) with a choice between 32 and 64-bit floating point formats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 12/24 bit computer, when implementing floating point, would naturally tend to 48 bits. Indeed, this precision was actually used in some cases even on power-of-2 computers: &lt;a href=&quot;https://stackoverflow.com/questions/31928449/what-type-is-this-6-byte-48-bit-number-floating-point-integer&quot;&gt;https://stackoverflow.com/questions/31928449/what-type-is-this-6-byte-48-bit-number-floating-point-integer&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would 48 bits be enough for most scientific and engineering applications (in a way that 32 is not), or would such a computer need to incur the cost of supporting a higher precision such as 96 bits?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-11-23T12:39:06.430" Title="How adequate would 48-bit floating point be?" Tags="&lt;performance&gt;&lt;floating-point&gt;" AnswerCount="1" CommentCount="14" ClosedDate="2018-03-12T14:12:38.557" ContentLicense="CC BY-SA 3.0" />
  <row Id="5963" PostTypeId="2" ParentId="5962" CreationDate="2018-03-12T13:22:23.170" Score="4" Body="&lt;p&gt;Just making a rough estimation, using:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;1 bit for the sign,&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;8 bit for the exponent (range 10^-127 to 10^128)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;would leave 39 bits for the mantissa. You need about 10 bits for 3 digits (2^10 is 1024), so you would have 12 digits precision in a range of 1x10&lt;sup&gt;-127&lt;/sup&gt; to 1x10&lt;sup&gt;128&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seems enough for most things, I can imagine.&lt;/p&gt;&#xA;" OwnerUserId="5139" LastEditorUserId="576" LastEditDate="2018-11-23T12:39:06.430" LastActivityDate="2018-11-23T12:39:06.430" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="5964" PostTypeId="2" ParentId="5959" CreationDate="2018-03-12T14:03:04.913" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;As early as the seventies, some computers used RAM in page mode,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Just the other way around, 1976 page mode RAM (MK4116) was available, and subsequently computers did use it, so make that the late 70s.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;in which you can read two or more words from sequential locations&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, they did not have to be in sequence, all they needed to be is within the same &lt;em&gt;page&lt;/em&gt;, hence the name.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;in rapid succession by only supplying the column address once, and then just supplying the row address of each location.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(A little nitpicking The other way around, it is row address (RAS) first and column address (CAS) next. With keeping RAS active, the row (page) was held within the read/write buffers as long as desired)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In that mode, can the decision whether to read a second word, depend on the contents of the first?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure, why not. Just latch the last used row address and if the actual access matches the last, skip the row addressing and continue with the column address.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;That is, can you, with 1970s technology, read one word, check its contents (with fast hardwired logic, not expecting software to be fast enough for such), and on the basis of that, decide whether to read a second word in fast page mode?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Oh, I see multiple possible logic issues in these assumptions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;For one, 1970s hardware isn't less capable than today's. The underlaying logic is still the same.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Second, hardware of the same time scale will always be fast enough to handle hardware features of the same time, otherwise, why bother to create such feature?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And last, software (contemporary on contemporary hardware) will always be too slow to cope with a sum cycle issue.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or is it the case that by the time the first word is read, plus a couple of gate delays for a minimum analysis, it's too late; to meet the timing constraints of page mode, you have to already have started the process of reading the second word if you are going to?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There are no timing constrains. A page is held open as long as RAS is asserted. There is infinite time to check whatsoever, If the check succeeds go ahead with CAS addressing, if it fails, insert a RAS cycle.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Real World Usage&lt;/h1&gt;&#xA;&lt;p&gt;Now, these RAMs where clock less. No central clocking existed nor was it needed. Just respect the timing. In the real world of clocked microprocessors, everything had to be within the borders set by such a clock. This clock usually not only synchronises the CPU to all its devices, but also drives many other things, like timers or video. Thus it might be hard to do so.&lt;/p&gt;&#xA;&lt;p&gt;So instead of varying cycle length according to the access pattern, the clock cycle was designed to fit the fastest operation (here RAM in page mode access), and wait cycles where inserted whenever additional time was needed.&lt;/p&gt;&#xA;&lt;p&gt;Lets take the original &lt;strong&gt;MK4116-2&lt;/strong&gt; with &lt;strong&gt;375 ns access time&lt;/strong&gt; - that's the time the  hip needs at least to perform a whole read or write cycle with full addressing. So whenever a processor starts a read cycle it will have to wait this time before using the result. On a 6502 with it's symmetric clock and reading in the second half, this translates to about 1 MHz operation - on a Z80 it's be about 4 MHz (*1).&lt;/p&gt;&#xA;&lt;p&gt;Now when the row address is set, a &lt;strong&gt;page mode cycle&lt;/strong&gt; can be done in as little as &lt;strong&gt;175 ns&lt;/strong&gt;, or close to half of that. So using a clock fitted to this cycle, and inserting one additional wait cycle whenever the page changes looks like a natural solution, doesn't it?&lt;/p&gt;&#xA;&lt;p&gt;Of course we need to increase the timing for other delays - for example to detect if the page part of an address has changed or not. A comparator in general is a complex ting, but we do not need to know about the magnitude, just equal or not, and the XOR function delivers exactly this. &lt;code&gt;A XOR B&lt;/code&gt; delivers a nice &lt;code&gt;low&lt;/code&gt; whenever both are equal. So two 7486 will nicely compare two values of up to 8 bit. ORed together we get a nice signal telling us that&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;we need to insert a RAS cycle&lt;/em&gt; which is&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;activating the &lt;code&gt;WAIT&lt;/code&gt;signal for our CPU&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;deasserting &lt;code&gt;RAS&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;tunnelling the row address (upper 7 bits) onto the chip (&lt;code&gt;A0..6&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;latching it for the next comparison&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;reasserting &lt;code&gt;RAS&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;and let the RAM do its work&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;the next (or only) cycle is &lt;strong&gt;then is the CAS cycle&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;deasserting &lt;code&gt;WAIT&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;putting the column address (lower 7 bits) onto &lt;code&gt;A0..6&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;asserting &lt;code&gt;CAS&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;let the RAM do its work&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;At the end of that cycle the CPU will sample the data lines and happy read whatever is stored(*2). All taking 1 cycle if the page was 'open', two if not.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line, the CPU can run at roughly double the speed the RAM would otherwise allow, and is braked down to 'regular' speed whenever addresses are jumping.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Nothing comes for free, this additional circuitry does eat up some time (*3). Each level of TTL can be counted as ~10-15ns, so our two level decoder will eat up 30ns for its decision. By using the open collector 74266 XNOR we can reduce this to a single level using a wired-OR. So a mere 15 ns overhead isn't a bad thing, is it?&lt;/p&gt;&#xA;&lt;p&gt;So with a Z80, we could switch from a 4 MHz Z80A to a 8 MHz Z80H and even realize a good part of that higher clock frequency, as all internal operations and all consecutive (near by) RAM access will now run at full speed, while random access (outside the page) will only add one wait cycle to the three basic cycles(*4), thus only slowing it down by 1/3rd - heck, even with no page mode we have gained much speed - but that's ofc another story (4).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;If it's so easy, then&lt;/p&gt;&#xA;&lt;h1&gt;why hasn't it be used more?&lt;/h1&gt;&#xA;&lt;p&gt;Simple, because CPU structure and machine design would diminish the results.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;First, it needs a faster CPU&lt;/strong&gt;. For a 4 MHz Z80A, using page mode doesn't make any difference, as it can't use the shorter access time at all.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Next we still need RAM refresh&lt;/strong&gt;. So at least every 10 ms a row needs to be refreshed to keep it's content. That means a minimum of 10,000 full refresh cycle need to be inserted additional, each of them killing our preset row address with a 99% (*6) chance, resulting in an additional wait state for the next CPU access even if its within the same page from the CPUs view point.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;CPU access is only in pat continuous&lt;/strong&gt;. While opcodes and operands are in order, every data access is not, requiring a wait state at the data access and another at the begin of the instruction.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Further some CPUs will make it more complicated&lt;/strong&gt; (by being more comfortable in the first place). The Z80 inserts a refresh cycle with every instruction. Thus, after reading an opcode, the whole glory of above will hit - way more often than needed(*7,8).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;And then there is third party access&lt;/strong&gt;. Many (home/early) computers not only map video memory into the CPU address space, but video rather uses CPU RAM for video data. Especially during a line displayed on CRT, the the video circuitry will access the RAM several times, making not only the CPU wait, but also most likely changing the page address, thus requiring the next CPU access to start with a &lt;code&gt;RAS&lt;/code&gt; cycle and its wait state.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line, using page mode makes only sense when there is a gain - most likely speed - but results start to diminish depending on the machines design, while additional cost for a faster CPU (and circuitry) is to be added regardless of gain.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - doesn't that fall nicely in the usual ratio of common Z80 vs. 6502 comparisons? It's all about RAM access, isn't it?&lt;/p&gt;&#xA;&lt;p&gt;*2 - Writing works with exactly the same timing, so our circuitry doesn't need to care about.&lt;/p&gt;&#xA;&lt;p&gt;*3 - But so is all selecting etc.&lt;/p&gt;&#xA;&lt;p&gt;*4 - With multiple banks of 4116, there's even another optimization trick. One could send the page address (row) to all banks, thus opening the same bank in all chips, making access to all pages within one cycle. Assuming a 64 KiB system using MK4116, a program loop at address 0100..017F can access data at 0100..017F, 4100..418F, 8100..818F and C100..C17F without a wait. That's 512 bytes of 'fast' RAM :))&lt;/p&gt;&#xA;&lt;p&gt;*5 - The exact calculations are a bit more complex here.&lt;/p&gt;&#xA;&lt;p&gt;*6 - More exact 127/128 or 99.2%&lt;/p&gt;&#xA;&lt;p&gt;*7 - The refresh can be somewhat delayed, as the MK4116 guarantees data hold time of 2ms. Within these 2ms all 128 rows need to be refreshed only once. With an average of ~10µs between refresh cycles we would be on the safe side. Assuming 10 cycles per instruction on a Z80 as average, this means, on a 4 MHz Z80 doing an refresh every fourth instruction would be good (on average). Leaving out the refresh for 3 out of 4 times might be easy, but this also means we would need an external refresh counter, killing the advantage of the Z80. Or we go ahead and surpres two out of three cycles. Since 3 is prime, we will run thru all 128 row addresses within the needed time - now jumping like a rabbit instead of crawling like a slug. Still, it needs two additional TTL.&lt;/p&gt;&#xA;&lt;p&gt;*8 - The wait state can be avoided with some additional circuitry, but that again increases the chip count&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-05-01T12:49:33.280" LastActivityDate="2021-05-01T12:49:33.280" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="5965" PostTypeId="1" AcceptedAnswerId="5968" CreationDate="2018-03-12T17:26:26.723" Score="6" ViewCount="2195" Body="&lt;p&gt;During a conversation, a friend of mine sent me this picture:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OaI8k.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OaI8k.jpg&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's the first Thief (I guess), with so-called software rendering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already experienced this effect in Quake 1-2 and to an extent, in Shogo: M.A.D., but never actually understood, what it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How these settings work, why they produce lower quality and why it diseppeared after the millenia?&lt;/p&gt;&#xA;" OwnerUserId="120" LastEditorUserId="120" LastEditDate="2018-03-12T19:07:24.947" LastActivityDate="2018-04-05T20:29:48.490" Title="What is the (usually lower quality) &quot;software rendering&quot; mode visible in so many &quot;second-generation&quot; FPS games?" Tags="&lt;history&gt;&lt;graphics&gt;&lt;software&gt;&lt;gaming&gt;" AnswerCount="4" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5966" PostTypeId="2" ParentId="5952" CreationDate="2018-03-12T17:43:41.657" Score="7" Body="&lt;p&gt;Note C has much fewer places where a function definition can appear than languages like Pascal. Pascal supports nested functions, so a function definition can appear within any function, so basically anywhere. Marking a function definition with a keyword like &lt;code&gt;FUNCTION&lt;/code&gt;, can thus help a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For C, the parsing of a function is rather more easy: If anything on top level has a pair of parentheses, it must be a function. If it doesn't have a semicolon after the parentheses, it's a function definition. If it does, it must be a declaration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apart from that, when parsing a line, the order of things to expect for proper syntax doesn't really matter much in terms of effort. I don't think any of the more modern programming languages can be fully parsed with a pure LL(0) parser anyways.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-03-12T17:52:33.063" LastActivityDate="2018-03-12T17:52:33.063" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5967" PostTypeId="2" ParentId="5965" CreationDate="2018-03-12T17:53:05.140" Score="5" Body="&lt;p&gt;The Mode is called software rendering, because the program is painting all pixels with the CPU. So you are not using a 3D-Interface like OpenGL or DirectX (which interfaces with 3D-hardware) but set single Pixels (aka Bytes) in a framebuffer(a rectangle part of your Memory you usually copy to your Graphics card)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why is it so ugly?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the CPU was busy painting the triangles with (sometimes affine) texturemapping into the memory. There was simply no time to do transparency (which needs reading the already painted pixel and multiplying!) or antialiasing(which is even more costly).&lt;/p&gt;&#xA;" OwnerUserId="8195" LastEditorUserId="8195" LastEditDate="2018-04-04T14:57:41.463" LastActivityDate="2018-04-04T14:57:41.463" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5968" PostTypeId="2" ParentId="5965" CreationDate="2018-03-12T17:53:12.297" Score="15" Body="&lt;p&gt;“Software rendering” usually refers to 3D rendering which doesn’t use hardware assistance (see &lt;a href=&quot;https://en.wikipedia.org/wiki/Software_rendering&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt; for a lengthier description).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Older games &lt;em&gt;only&lt;/em&gt; had software renderers; hardware rendering didn’t exist in consumer PCs. In the late 90s, 3D-capable graphics processors became available, including the famous 3Dfx chips, and games started using them — initially &lt;em&gt;via&lt;/em&gt; game patches, &lt;em&gt;e.g.&lt;/em&gt; the various 3D accelerated patches available for Quake. Eventually hardware-assisted 3D rendering became the default, using &lt;a href=&quot;https://en.wikipedia.org/wiki/OpenGL&quot; rel=&quot;noreferrer&quot;&gt;OpenGL&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Direct3D&quot; rel=&quot;noreferrer&quot;&gt;Direct3D&lt;/a&gt;, but for a few years, games continued to ship with software renderers too; examples include Thief, the early Unreal games... However as hardware renderers increased in capabilities and speed, it became unrealistic to maintain equivalent software renderers running at an acceptable speed, and game developers stopped building software renderers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the intermediate phase, when hardware renderers and software renderers were both available, quality varied; early hardware renderers weren’t always all that good (see for example &lt;a href=&quot;https://b31f.wordpress.com/2015/02/05/tomb-raider-3d-patches-on-test/&quot; rel=&quot;noreferrer&quot;&gt;the various renderers available in &lt;em&gt;Tomb Raider&lt;/em&gt;&lt;/a&gt;), and significant effort was spent on certain software renderers (Unreal’s was particularly impressive). As time wore on though, developers produces better hardware-assisted rendering engines, hardware accelerators improved, and less time was spent on software renderers, resulting in the quality differences you’re seeing. This is still visible on older engines today: Quake or Quake II on a recent GPU are much nicer to play than they were when they first came out! (And yes, the engines have been tweaked since then, but the core is fundamentally unchanged.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-03-12T17:53:12.297" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5969" PostTypeId="2" ParentId="5965" CreationDate="2018-03-12T19:24:57.473" Score="1" Body="&lt;p&gt;OpenGL, Direct3D and so on take advantage of hardware 3D accelerators which can draw 3D scenes much more quickly than the CPU can do by itself. So to maintain acceptable frame rates, scenes rendered in software with the CPU must be much more simple (easier on the CPU) than scenes rendered in hardware.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-03-12T19:24:57.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5970" PostTypeId="2" ParentId="3308" CreationDate="2018-03-12T23:33:08.760" Score="2" Body="&lt;p&gt;Since my comments were helpful I've collated them into an answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things to check:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is the card in the AUX slot? Not slot 3 - that's usually where II or II+ 80-column cards go.&lt;/li&gt;&#xA;&lt;li&gt;Is the card oriented correctly? E.g. one end might have &quot;Keyboard&quot; printed on it.&lt;/li&gt;&#xA;&lt;li&gt;If there's a jumper on the card it should be closed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Things to try:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Remove all other cards.&lt;/li&gt;&#xA;&lt;li&gt;Swap the suspect 80 column card into another (known working) //e.&lt;/li&gt;&#xA;&lt;li&gt;Swap another (known working) 80 column card into the suspect //e.&lt;/li&gt;&#xA;&lt;li&gt;Try Apple's built-in self test by pressing Ctrl-Closed-Apple-Reset. That tests AUX RAM.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2018-03-13T22:09:04.160" LastActivityDate="2018-03-13T22:09:04.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5971" PostTypeId="1" CreationDate="2018-03-13T01:51:15.010" Score="5" ViewCount="1144" Body="&lt;p&gt;Consider for instance the GUI for Microsoft Word 97:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JqS76.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JqS76.gif&quot; alt=&quot;Microsoft Windows 97 screenshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am interested in getting the tiny icons used for the &quot;Open&quot;, &quot;Save&quot;, &quot;Print&quot; operations below the menu bar. Is there a good source for these and other icons used commonly by program GUIs around this period? That is, any of the icons used before XP would be nice to have and will be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I don't have access to the actual classic OSs anymore myself, but answers that give instructions on how to extract these from your installation are acceptable, so that this question is also useful to others. On my part, I have been trying to search for these myself, but my results are confounded by tutorials on how to open, save, etc. in Windows programs.)&lt;/p&gt;&#xA;" OwnerUserId="8212" LastActivityDate="2018-03-19T06:30:27.097" Title="Where can I get icons for Windows 3.1/95-style GUIs?" Tags="&lt;windows-98&gt;&lt;windows-3.x&gt;&lt;windows-95&gt;&lt;gui&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5972" PostTypeId="2" ParentId="3308" CreationDate="2018-03-13T02:50:26.313" Score="0" Body="&lt;p&gt;Say, didn't you have almost much of &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5935/how-to-test-an-orange-micro-grappler-card&quot;&gt;the same issue with another I/O card&lt;/a&gt; just recently?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chances are good that the IOU chip is dead. It's prone to die in quite creative ways. Get a new one and try a swap (or just another IIe anyway).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-03-13T02:50:26.313" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5973" PostTypeId="2" ParentId="5971" CreationDate="2018-03-13T04:15:57.093" Score="7" Body="&lt;p&gt;I remember there being a folder installed with VisualBasic 4 or 5 that was full of those icons...  I remember there being all the stock new, open, save, print, cut, copy, paste, etc. and some more esoteric ones like flags and smileys and chain links...  I don't have access to my old MSDN disk from back then (they are in storage) but if you can dig up a copy of the Vb4 ISO I think they are there...&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2018-03-13T04:15:57.093" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5974" PostTypeId="1" AcceptedAnswerId="6031" CreationDate="2018-03-13T09:24:49.507" Score="9" ViewCount="961" Body="&lt;p&gt;On an unmodified Game Boy Pocket, a small round ~0.5mm diameter bubble appeared on the center-left side of the screen eight months after I had last used it (there was no indication of it previously). What might be the cause of such a bubble (to avoid it happening again), and how does one go about fixing it (without having to replace the whole LCD screen if possible)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pixels on the display seem to work well, it seems to be the plastic film right above the display. If I tilt the Game Boy at a certain angle, it seems that the area around the bubble is slightly darkened. The bubble, which looks like a drop of water, does not seem to be darkened by looking at it directly. By using a camera, though, the whole area seems to be darkened, including the bubble.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The unit was safely stored the whole time in its original protective hard-shell plastic casing, horizontally lying down with its screen upward inside closed wooden furniture in my living room. Could the screen's plastic film be deteriorating due to its age?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the pictures, first you can see the darkened area, without the bubble being visible, and the following ones you can make out its shape through the reflection.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/cQEQB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cQEQB.jpg&quot; alt=&quot;Darkened area&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/7QbG3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7QbG3.png&quot; alt=&quot;Reflection 1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/I6HJa.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I6HJa.png&quot; alt=&quot;Reflection 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8097" LastEditorUserId="8097" LastEditDate="2018-03-19T16:10:54.770" LastActivityDate="2018-03-21T11:55:51.990" Title="How do you remove an LCD bubble on an unmodified Game Boy?" Tags="&lt;maintenance&gt;&lt;game-boy&gt;&lt;lcd-display&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5975" PostTypeId="2" ParentId="5971" CreationDate="2018-03-13T12:36:41.917" Score="2" Body="&lt;p&gt;Icons within .exe files are stored in specific resource sections within these files. Any modern (or less modern) icon editor should be able to extract icons directly from the .exe or common .dll file, on a modern PC, I would use &quot;Real World&quot;, on a historic environment, &lt;em&gt;iconedit.exe&lt;/em&gt; should be able to extract such icons. &lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-03-13T12:36:41.917" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5977" PostTypeId="2" ParentId="5952" CreationDate="2018-03-13T18:00:45.947" Score="7" Body="&lt;p&gt;The design of the C language began, to my understanding, in 1969 at Bell Labs, where Dennis Ritchie was working at the time.  The language was based on B, a language which used a single data type that could be interpreted differently in different contexts (somewhat like assembly language).  Keeping as close as possible to the structure of B was one of the aims of the language.  B looked like this (quoting from wikipedia, which cites the example as being from the &lt;em&gt;User's Reference to B&lt;/em&gt;):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* The following function will print a non-negative number, n, to&#xA;   the base b, where 2&amp;lt;=b&amp;lt;=10.  This routine uses the fact that&#xA;   in the ASCII character set, the digits 0 to 9 have sequential&#xA;   code values.  */&#xA;printn(n, b) {&#xA;        extrn putchar;&#xA;        auto a;&#xA;&#xA;        if (a = n / b)        /* assignment, not test for equality */&#xA;                printn(a, b); /* recursive */&#xA;        putchar(n % b + '0');&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that the declarations of a local variable (&lt;code&gt;auto a&lt;/code&gt;) and import of a global symbol (&lt;code&gt;extrn putchar&lt;/code&gt;) both follow the same &quot;kind-of-thing name-of-the-thing&quot; layout that C uses.  But in B, the &quot;kind-of-thing&quot; was just a simple choice from a predefined set of keywords, so caused no parsing problems.  Extending that to the complex syntax of data types is where the problem came in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, one can imagine that while designing C Ritchie would have noticed that the parsing for types in declarations was becoming more complex than a context-free grammar can handle.  Some developers may have been deterred by this fact, and would have accepted the loss of this aspect of similarity to B in favour of a simpler parser design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's hard to say exactly why this didn't happen, but it may be because of the culture of Bell Labs, where a large number of extremely talented programmers and computer scientists were congregating at the time.  Among them was &lt;a href=&quot;https://en.wikipedia.org/wiki/Alfred_Aho&quot; rel=&quot;noreferrer&quot;&gt;Alfred Aho&lt;/a&gt;, who had recently published &lt;a href=&quot;https://dl.acm.org/citation.cfm?doid=321479.321488&quot; rel=&quot;noreferrer&quot;&gt;his PhD thesis on the subject of Indexed Grammars&lt;/a&gt;, and would therefore have been quite familiar with the consequences of leaving the safety of Context-free Grammars and the kinds of techniques that could be used to efficiently parse such languages. (Along with another Bell Labs researcher, &lt;a href=&quot;https://en.wikipedia.org/wiki/Jeffrey_Ullman&quot; rel=&quot;noreferrer&quot;&gt;Jeffrey Ullman&lt;/a&gt;, he would go on to write &lt;a href=&quot;https://en.wikipedia.org/wiki/Principles_of_Compiler_Design&quot; rel=&quot;noreferrer&quot;&gt;the best-known book on the subject of compiler design&lt;/a&gt;).  It's just a hypothesis, as I have no evidence that they ever talked about the subject, but discussing any such troubles with Aho may have given Ritchie the confidence to continue with his design rather than rewriting to a more conservative type of grammar.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-03-13T18:00:45.947" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5978" PostTypeId="1" AcceptedAnswerId="5980" CreationDate="2018-03-13T19:39:58.560" Score="10" ViewCount="1764" Body="&lt;p&gt;If I remember correctly, you could ask DOS to load in upper memory by writing something like...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DOS=UMB&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...somewhere in the CONFIG.SYS file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the question is, how did DOS know what portions of the UMA where available?&#xA;Were there any BIOS functions that would report this info? (I know there's a INT 0x15, EAX = 0xE820 for this, but it only works for 32-bit machines).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If so, what if wanted to write a TSR that would monitor BIOS interrupts even before DOS is loaded? Would the OS overwrite my code or do I have any way to &quot;protect&quot; my TSR memory from being claimed later?&lt;/p&gt;&#xA;" OwnerUserId="8227" LastActivityDate="2019-11-29T16:18:04.143" Title="How did DOS know where to load itself in upper memory?" Tags="&lt;ms-dos&gt;&lt;memory&gt;&lt;bios&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5979" PostTypeId="2" ParentId="5978" CreationDate="2018-03-13T20:16:45.597" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But the question is, how did DOS know what portions of the UMA where available? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;DOS itself doesn't touch neither High-Mem (HMA) nor UMB without being ordered to do so. And even then it needs a driver capturing and providing these memory areas. Usually this is &lt;code&gt;HIMEM.SYS&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If so, what if wanted to write a TSR that would monitor BIOS interrupts even before DOS is loaded?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, it can't be a standard TSR, as there is no DOS to load it. But yeah, as soon as there is memory above 640KiB it can be used to store a program surviving a restart and monitor activity before (and during) DOS load.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Would the OS overwrite my code or do I have any way to &quot;protect&quot; my TSR memory from being claimed later?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, unless of course, you have it use &lt;code&gt;HIMEM.SYS&lt;/code&gt;, which in turn would not hesitate, but just grab whatever is available.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The first task is to find some memory. HMA might seem like a good idea, but as said before, then &lt;code&gt;HIMEM.SYS&lt;/code&gt;  and &lt;code&gt;DOS=HIGH&lt;/code&gt; can't be used at all. Better use a CGA as display adaptor, while installing some spare MDA (or vice versa), as they use different address areas in Upper Memory. OR even better, if at hand, use some (PC) memory card that allows the addition of RAM anywhere in the address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now boot into DOS and start your 'special' TSR, which moves itself up into one of these additional RAM areas. The real work will be to find a combination of trigger that allows your code to keep itself in the loop during all stages of reset and boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you found a way, it's all set to boot again and spy on DOS :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-29T15:48:39.107" LastActivityDate="2019-11-29T15:48:39.107" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="5980" PostTypeId="2" ParentId="5978" CreationDate="2018-03-13T22:49:57.503" Score="16" Body="&lt;p&gt;When configured to use upper memory (&lt;code&gt;DOS=UMB&lt;/code&gt;) or high memory (&lt;code&gt;DOS=HIGH&lt;/code&gt;) or both, the DOS “kernel” doesn’t find that memory itself; it relies on the services of a memory manager such as &lt;code&gt;HIMEM.SYS&lt;/code&gt;, and the (XMS) APIs it provides. The memory manager determines what memory is available using a variety of techniques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, what you’re trying to do doesn’t require messing around with that behaviour. To hook BIOS interrupts and monitor them before the operating system starts, you’d effectively need to write something like a boot sector virus. The technique there is to position your code somewhere at the top of memory, then “hide” by altering the memory information so that the portion you’re using is no longer considered to be part of the available memory. On an 8086-class device, you would call &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/04/6.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;interrupt 12h&lt;/a&gt; to determine how much memory is installed (in KiB), then hook that and return the amount reduced by however much you need — or better, change the value stored in a word in the BIOS information pages in segment 40h at offset 13h, which is used by the interrupt 12h handler. On a 286-class device with extended memory, you would hook &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/37/15.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;interrupt 15h function 88h&lt;/a&gt; and sit at the top of extended memory. On a 386-class device, you could use V86 mode instead and then have some real fun — that’s how QEMM for example was able to implement its Stealth memory management and its fast boot option which re-initialised DOS without going through the BIOS at all. Once you’ve implemented any of these options, you can boot DOS after loading your “virus” and it won’t touch the memory you’re using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that using upper memory (between 640KiB and 1MiB) &lt;em&gt;without&lt;/em&gt; a memory manager is rather complicated: there are no guarantees that memory is actually mapped there. Typical 386+ DOS installations use &lt;code&gt;EMM386&lt;/code&gt; or a similar memory manager to map memory using the 386’s paging features (in V86 mode). Another approach, which works with 286-class systems too, is to use a chipset-specific driver such as &lt;a href=&quot;http://www.uwe-sieber.de/umbpci_e.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;UMBPCI&lt;/a&gt; (on Pentium-class systems) or a chipset-aware memory manager such as The Last Byte Memory Manager; these generally work by enabling “shadow memory” and using it for UMBs. So in your case you really are limited to using the top of either conventional memory or extended memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you’re curious about the inner workings of all this, check out the memory managers in &lt;a href=&quot;http://www.freedos.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FreeDOS&lt;/a&gt;. For more advanced exploration of DOS and even Windows, I highly recommend &lt;a href=&quot;http://www.sudleyplace.com/swat/&quot; rel=&quot;nofollow noreferrer&quot;&gt;386SWAT&lt;/a&gt; which is a very sophisticated debugger. System startup, and the hoops DOS has to jump through to support the various low/UMB/high configurations it can encounter, are described in detail in chapter three of Geoff Chappell’s &lt;em&gt;DOS Internals&lt;/em&gt; (and memory management in general occupies a significant portion of the book as a whole).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-11-29T16:18:04.143" LastActivityDate="2019-11-29T16:18:04.143" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="5981" PostTypeId="2" ParentId="5978" CreationDate="2018-03-14T03:14:49.303" Score="3" Body="&lt;p&gt;DOS knows what memory is available because it requests this information from whatever upper memory manager you have installed via an XMS function call.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, EMM386 can be used to simulate upper memory using XMS memory (if you have an 80386 CPU or higher), and if it is doing so then it will also provide the needed XMS API functions to allow upper memory blocks to be requested.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The method used to communicate is via a particular interrupt function established by HIMEM.SYS (or a driver that provides similar functionality).  HIMEM.SYS itself manages only the high memory area, for upper memory all it does is allow an upper memory manager to register itself via a hook so that it may recognize and respond to upper memory requests to request/release blocks as needed (via XMS functions 10h and 11h).  For details consult the Extended Memory Specification, version 2.0 or higher (an Internet search for &quot;xms20.txt&quot; can be used to find this document).&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-03-14T03:14:49.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5982" PostTypeId="2" ParentId="5978" CreationDate="2018-03-14T04:38:34.267" Score="5" Body="&lt;p&gt;Real-mode MS-DOS didn't care where BIOS and expansion card memory locations were and really didn't have to because it generally made use of the interrupt system for system calls. EMM386 had to do its own detective work to detect memory: note that &lt;a href=&quot;http://www.uruk.org/orig-grub/mem64mb.html&quot; rel=&quot;noreferrer&quot;&gt;the documentation for INT 15h AX=E820h&lt;/a&gt; has many caveats about what memory it shows, and I don't think that it couldn't be relied on to exist on every machine when MS-DOS 6.22 came out. INT 12h/address 0:413h was used to establish its memory map, which was correct unless something like EMM386 came afterwards to &lt;a href=&quot;http://manmrk.net/tutorials/DOS/msdos7/emm386.htm&quot; rel=&quot;noreferrer&quot;&gt;to backfill memory&lt;/a&gt; or extend it (which you could do if you didn't use VGA: the A0000h-AFFFFh range could be mapped and added to contiguous conventional RAM, or A0000h-B7FFFh if you only used monochrome text.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC, EMM386 used the same system that the BIOS did to locate memory: &lt;a href=&quot;http://minuszerodegrees.net/5150/post/5150%20-%20POST%20-%20Detailed%20breakdown.htm&quot; rel=&quot;noreferrer&quot;&gt;walk through physical addresses C8000h-F5FFFh (see step 27 of the link)&lt;/a&gt; and find a ROM signature and length. You could override this by adding explicit &lt;code&gt;I=xxxx-yyyy&lt;/code&gt; and &lt;code&gt;X=xxxx-yyyy&lt;/code&gt; switches to include and exclude memory, and use &lt;code&gt;HIGHSCAN&lt;/code&gt; to use a more aggressive scan, but this was the general method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to run a program earlier in the boot process than DOS, you would have to alter the boot sector so that you could start before IO.SYS (@Stephen Kitt's answer details this.) The INT 12h method used by programs like &lt;a href=&quot;https://en.wikipedia.org/wiki/Disk_Manager&quot; rel=&quot;noreferrer&quot;&gt;hard disk manager drivers&lt;/a&gt; and (sadly) viruses continued to work because EMM386 had to honour the system configuration prior to going into protected mode and keep the memory map looking the same as much as possible: this is important as MS-DOS (and the expansion cards as well) were written to run in real mode and relied on memory addresses not to change.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2018-03-14T04:38:34.267" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5984" PostTypeId="2" ParentId="5971" CreationDate="2018-03-14T13:32:12.437" Score="1" Body="&lt;p&gt;As far I recall, most of those icons were saved in standard dll files. Most probably &lt;code&gt;SYSTEM32.DLL&lt;/code&gt; and &lt;code&gt;PIFMGR.DLL&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="3422" LastEditDate="2018-03-19T06:30:27.097" LastActivityDate="2018-03-19T06:30:27.097" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5985" PostTypeId="1" CreationDate="2018-03-14T18:28:49.853" Score="2" ViewCount="195" Body="&lt;p&gt;Am wondering how to use the keyboard from a Thinkpad 350.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zOJnX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zOJnX.png&quot; alt=&quot;Keyboard - showing connectors&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are three cables, with 6, 10, and 18 pins (but the big connector on the motherboard seems to have only 17).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume this is a grid of some sort. Perhaps the small cable is for the trackpoint and buttons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anybody know the details? Easiest way to use it now, with Linux?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clarification: &quot;use&quot; = with a computer other than TP 350.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="15334" LastEditDate="2020-10-03T14:16:27.347" LastActivityDate="2020-10-03T14:16:27.347" Title="Thinkpad 350 keyboard" Tags="&lt;ibm-pc&gt;&lt;keyboards&gt;&lt;old-hardware-adaptation&gt;&lt;thinkpad&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5986" PostTypeId="1" CreationDate="2018-03-15T06:17:02.093" Score="13" ViewCount="1958" Body="&lt;p&gt;The Commodore 64 has the following fixed palette of 16 colours:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/peXtP.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/peXtP.png&quot; alt=&quot;C64 Colour palette&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;(Your palette may vary due to tuning of screen, etc.)&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the reason for this selection of colours? Are these colours particularly easy to realise across a NTSC/PAL signal, or with the oscillator frequencies available in the C64?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Alternatively, were these colours chosen due to non-hardware factors?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://unusedino.de/ec64/technical/misc/vic656x/colors/&quot; rel=&quot;noreferrer&quot;&gt;This email from Robert 'Bob' Yannes&lt;/a&gt; indicates that the colours were arbitrarily selectable by the chip designers as a result of the design of the VIC-II.&lt;/p&gt;&#xA;" OwnerUserId="8244" LastEditorUserId="79" LastEditDate="2018-03-15T12:14:46.077" LastActivityDate="2018-03-15T12:14:46.077" Title="Why does the C64 have the following palette?" Tags="&lt;hardware&gt;&lt;commodore-64&gt;&lt;graphics&gt;&lt;color-display&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5987" PostTypeId="2" ParentId="5986" CreationDate="2018-03-15T08:00:57.260" Score="17" Body="&lt;p&gt;The email from Bob Yannes which you linked to gives the answer:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm afraid that not nearly as much effort went into the color selection as you think. Since we had total control over hue, saturation and luminance, we picked colors that we liked. In order to save space on the chip, though, many of the colors were simply the opposite side of the color wheel from ones that we picked. This allowed us to reuse the existing resistor values, rather than having a completely unique set for each color.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So basically it’s personal preference, with some consideration for technical constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One aspect which often played a role in colour selection on early micros was luminance: you wanted a palette which would be usable on black-and-white TVs and monitors, which meant you needed distinct luma levels. This was apparently taken into account in later versions of the Vic-II which had eight different luminance levels instead of the initial four.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/4896/79&quot;&gt;What&amp;#39;s with the Atari 2600 colors on SECAM?&lt;/a&gt; for a more “rational” palette construction.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-03-15T08:00:57.260" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5988" PostTypeId="1" AcceptedAnswerId="5990" CreationDate="2018-03-15T15:58:25.830" Score="2" ViewCount="799" Body="&lt;p&gt;I am trying to learn assembler on the various retro machines I own, or am about to buy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today I tried converting this 8080 routine (which worked, repeatedly):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;| START: | MVI A,0  | 8000 | 3e |&#xA;|        |          | 8001 | 00 |&#xA;| LOOP:  | INR A    | 8002 | 3c |&#xA;|        | CPI 10   | 8003 | fe |&#xA;|        |          | 8004 | 0a |&#xA;|        | JZ HALT  | 8005 | ca |&#xA;|        |          | 8006 | 0b |&#xA;|        |          | 8007 | 80 |&#xA;|        | JMP LOOP | 8008 | c3 |&#xA;|        |          | 8009 | 02 |&#xA;|        |          | 800a | 80 |&#xA;| HALT:  | HLT      | 800b | 76 |&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to run on my Epson HX-20, which has two Hitachi 6301 chips, using the datasheet available at &lt;a href=&quot;http://www.vintagecomputer.net/fjkraan/comp/hx20/doc/info.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;vintagecomputer.net&lt;/a&gt;. It was a lot of guesswork on my part with the mnemonics, but I came up with this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;| START: | LDA A 0  | 1000 | 86  |&#xA;|        |          | 1001 | 00  |&#xA;| LOOP:  | INC A    | 1002 | 4c  |&#xA;|        | CMP A 10 | 1003 | b1  |&#xA;|        |          | 1004 | 0a  |&#xA;|        | BEO      | 1005 | 27  | #Branch if = zero&#xA;|        |          | 1006 | 0b  |&#xA;|        |          | 1007 | 10  |&#xA;|        | JMP LOOP | 1008 | 6e  |&#xA;|        |          | 1009 | 02  |&#xA;|        |          | 100a | 10  |&#xA;| HALT:  | SWI      | 100b | 3f  | #Software interrupt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To my surprise, this worked first time, and I could see the A accumulator* now held 0a. To my greater surprise, it hasn't worked since, when I have changed the value of 1004. I tried turning the machine on and off, but due to the way the HX-20 works, this does not clear RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did this routine only work once? My guess is that branch is not quite the same as jump, and it is waiting to come back, or maybe I need to reset the zero flag?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, I can set the value of the A accumulator manually using LDA A, or the HX-20 Monitor x command, so it would not appear to be a malfunctioning RAM issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm now wondering if I'm going mad, and it didn't work the first time after all...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;* The HX-20 also has a B accumulator.&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="8072" LastEditDate="2018-03-15T16:46:39.600" LastActivityDate="2019-10-23T19:29:53.680" Title="Why did this Hitachi 6301 assembler routine only work once?" Tags="&lt;assembly&gt;&lt;8080&gt;&lt;hx-20&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5990" PostTypeId="2" ParentId="5988" CreationDate="2018-03-15T17:53:57.277" Score="10" Body="&lt;p&gt;There are several issues:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;BEQ&lt;/code&gt; is a two byte instruction, using a relative offset, not a 3 byte with an absolute address.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;code&gt;$6E&lt;/code&gt; &lt;code&gt;JMP&lt;/code&gt; you used is an indexed one, with two bytes length, not three. Its parameter is a relative offset added to the X register.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So for the &lt;code&gt;BEQ&lt;/code&gt; you want to use a two byte offset, as in &lt;code&gt;27 02&lt;/code&gt;, to jump around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the &lt;code&gt;JMP&lt;/code&gt;, &lt;code&gt;$7E&lt;/code&gt; would be the right encoding when using absolute, or rather use a &lt;code&gt;BRA&lt;/code&gt; (&lt;code&gt;$20&lt;/code&gt;) to keep the program short and relocatable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The final program would look more like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1000 86 00    LDAA #00&#xA;1002 4C       INCA&#xA;1003 B1 0A    CMPA #10&#xA;1005 27 02    BEQ  L1009&#xA;1007 20 F9    BRA  L1002&#xA;1009 3F       SWI&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Well, a real program one would change the &lt;code&gt;BEQ&lt;/code&gt; for a &lt;code&gt;BNE&lt;/code&gt; and scrap the &lt;code&gt;BRA&lt;/code&gt;, but that's a different story)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;If I may add, your assumption seams to be that a port can be done by just exchanging opcodes, but that's as frivolous as translating from English to German by swapping words according to some dictionary. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-10-23T19:29:53.680" LastActivityDate="2019-10-23T19:29:53.680" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="5991" PostTypeId="2" ParentId="5985" CreationDate="2018-03-15T18:59:11.600" Score="1" Body="&lt;p&gt;I've had a very similiar problem - I wanted to use a ThinkPad S30 keyboard with an arduino nano (or any atmel), and no docs were available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First things first, you'll need to figure out the keyboard matrix. I'd recommend using a multimeter with a beeper, and touching every single contact together with every other contact on those flex cables. It may be tricky, as you'll need to press every single key in order to know which one is which connections. After getting a beep, note &lt;em&gt;everything&lt;/em&gt; - to be exact, which pins were shortened and which key(s) gave you a beep.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, you'll need to create a prog that will translate keystrokes from the keyboard to USB HID or PS/2 interface. The testing process will be very, very hard, but I'm sure that with some courage you'll be able to do it. Please post results when you'll finish, I want to see it working :3&lt;/p&gt;&#xA;" OwnerUserId="5211" LastActivityDate="2018-03-15T18:59:11.600" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5992" PostTypeId="1" AcceptedAnswerId="5993" CreationDate="2018-03-15T20:32:58.817" Score="6" ViewCount="608" Body="&lt;p&gt;Does anyone have any information on what is the maximum speed for the gold ceramic z80 CTC? &lt;img src=&quot;https://i.stack.imgur.com/CcVUF.jpg&quot; alt=&quot;A gold ctc from ebay &quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="7356" LastActivityDate="2018-03-16T03:20:18.547" Title="Z80 ctc gold ICs speed" Tags="&lt;hardware&gt;&lt;z80&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5993" PostTypeId="2" ParentId="5992" CreationDate="2018-03-15T20:56:14.030" Score="13" Body="&lt;p&gt;Since it's labeled Z80-CTC, it's a 2.5 MHz type (Z80A-CTC would be 4 MHz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gold or not gold cap doesn't make any difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without a further marking its temperature range is 0-70°C. Wider temperature ranges where are avalable in ceramic but marked CE (Extended) and CM (Military).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Information taken from a Feb 1980 product sheet)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-03-16T03:20:18.547" LastActivityDate="2018-03-16T03:20:18.547" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5994" PostTypeId="1" AcceptedAnswerId="5998" CreationDate="2018-03-16T07:11:43.553" Score="7" ViewCount="2529" Body="&lt;p&gt;Looking at a timing diagram for the various kinds of memory access occurring on the Amiga &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node02D4.html&quot; rel=&quot;noreferrer&quot;&gt;http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node02D4.html&lt;/a&gt; it seems to be saying that video data is being fetched at the rate of one word per color clock = 280 ns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, my understanding is that early eighties RAM chips typically took 375 ns for a full access cycle. The amortized access time can be reduced by using page mode, but the timing diagram doesn't seem to suggest this is happening.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-10-26T12:32:19.413" Title="Amiga memory bandwidth" Tags="&lt;amiga&gt;&lt;memory&gt;&lt;performance&gt;&lt;chip&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5995" PostTypeId="1" AcceptedAnswerId="5997" CreationDate="2018-03-16T08:05:05.860" Score="1" ViewCount="99" Body="&lt;p&gt;I have a PowerBook 145 that boots up because I can hear the chime but the screen doesn’t come on. The back light is functioning but no data can be viewed on the screen. What can I do?&lt;/p&gt;&#xA;" OwnerUserId="7761" LastActivityDate="2018-03-16T08:34:22.993" Title="PowerBook 145 Screen Issues" Tags="&lt;apple&gt;&lt;screen&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5997" PostTypeId="2" ParentId="5995" CreationDate="2018-03-16T08:34:22.993" Score="2" Body="&lt;p&gt;Probably an issue with aging capacitors on the display driver board. These become defective over time and need to be replaced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=kg4ZyFLWYHo&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's&lt;/a&gt; a repair video.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-03-16T08:34:22.993" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5998" PostTypeId="2" ParentId="5994" CreationDate="2018-03-16T08:55:03.637" Score="13" Body="&lt;p&gt;The Amiga A500 used 41256-15 DRAM chips for its onboard memory.  According to the &lt;a href=&quot;http://matthieu.benoit.free.fr/cross/data_sheets/HYB41256.pdf&quot; rel=&quot;noreferrer&quot;&gt;datasheet&lt;/a&gt; these had a cycle time of 260ns, so could easily match the 280ns timing constraint with 20ns to spare (although the board had two banks of them, and switching between the banks likely used up most of that 20ns).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 375ns limit really only applied to the 4116 and 4164 type chips that were manufactured in huge bulk and were extremely cheap.  Faster chips were available even back to the early 80s, but cost more money so designers of low-end micros tended to avoid using them where possible (cf the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4863/cost-differential-between-2-and-4-mhz-ram-chips-in-1982&quot;&gt;4816A chips in the BBC micro we discussed previously&lt;/a&gt;, which were necessary in order to let a 6502 run at 2MHz with capacity left for video access between the CPU's accesses), especially when working with either 1MHz 6502 or 4MHz Z80 designs where faster RAM would have been useless.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-03-16T08:55:03.637" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5999" PostTypeId="2" ParentId="5994" CreationDate="2018-03-16T10:06:15.130" Score="3" Body="&lt;p&gt;A500 accesses its chip 16bit memory at 3.5MHz rate, therefore the bandwidth is 3.5*2=7Mbytes/second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In A1200 there is a page mode optionally used to access 2 words instead of one, and the memory itself is 32bit, while the access rate is the same. Therefore the bandwidth is 28Mbytes/second.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-03-16T10:06:15.130" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6000" PostTypeId="1" AcceptedAnswerId="6027" CreationDate="2018-03-16T17:34:20.107" Score="8" ViewCount="1310" Body="&lt;p&gt;Early consoles and home computers that were optimized for games, often provided sprites. From the viewpoint of a game developer, these were good to have, though one always wanted bigger sprites, to the extent that one sometimes placed two or more together, or at least on the Commodore 64, flipped the 'double width' bit despite this doing bad things to resolution. (In this discussion, I will always be talking about size in terms of width, since you can usually reuse sprites on subsequent scan lines, so height tends not to be an issue.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I asked in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5048/limiting-factor-on-sprite-sizes&quot;&gt;Limiting factor on sprite sizes&lt;/a&gt; what the limiting resource is, and there were some good explanations about how memory bandwidth and the size of on-chip memory to store sprite data are both issues. Supported by this pseudocode description of the NES sprite system &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/PPU_sprite_evaluation&quot; rel=&quot;noreferrer&quot;&gt;https://wiki.nesdev.com/w/index.php/PPU_sprite_evaluation&lt;/a&gt; which seems to be describing a process of reading data from all eight sprites into quickly accessible memory to be ready to deal with the worst-case scenario where all eight might partially overlay each other. Looking at that, it's certainly understandable how it taxes chip resources, making it impractical to provide more than eight small sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been thinking about how one might get around that limit, and it seems to me you could do it by thinking in terms of supplying, not sprites directly, but &lt;em&gt;transitions&lt;/em&gt;. That is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;At any given time, the video chip is rendering from a background or from some sprite.&lt;/li&gt;&#xA;&lt;li&gt;At a transition, the video chip switches to some (maybe different) sprite, or to the background.&lt;/li&gt;&#xA;&lt;li&gt;At each scan line, the video chip is given a list of transitions, their X coordinates and pointers to the data to be rendered.&lt;/li&gt;&#xA;&lt;li&gt;The list of transitions must have been sorted by the CPU.&lt;/li&gt;&#xA;&lt;li&gt;There is a minimum distance between transitions. (Maybe a couple of words? Enough that the video chip only has to deal with one transition at a time, basically.)&lt;/li&gt;&#xA;&lt;li&gt;There may be a maximum number of transitions per scan line.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This would require more active involvement from the CPU; in a sense it would be partway between the 'racing the beam' techniques on the Atari 2600, and the fully seamless (but resource-limited) sprite systems on the likes of the Atari 800, Commodore 64 and NES. But it would eliminate the limit on sprite sizes; in my opinion, that would be a worthwhile tradeoff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Did any historical computer or console ever implement a sprite system like the one I have outlined?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And if not, why not?)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-02-09T20:12:58.417" Title="A different kind of sprite system" Tags="&lt;history&gt;&lt;video&gt;&lt;chip&gt;&lt;sprite&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6001" PostTypeId="2" ParentId="6000" CreationDate="2018-03-16T23:17:49.533" Score="5" Body="&lt;p&gt;Most sprite systems allow for sprites to overlap, generally with either the first or last sprite having priority over the others.  If software allocates sprite resources in the required order of priority, this will avoid the need to have hardware manage priority in any other way.  While a display system that requires sprites to be listed in left-to-right order might be able to display more sprites than one which allows them to be listed in any order, such a design would make it necessary to add some other means of controlling sprite priority.  It would also require a lot of extra work by the main CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more interesting approach is used in the Atari 7800's MARIA chip.  While that particular chip suffers from some design missteps, the overall approach is a good one.  It has a specially-designed RAM with enough data to store a scan line and the ability to copy its contents to a shift register.  On each scan line, the MARIA reads a list of sprite commands from memory and, after reading each command, reads the memory for one line of that sprite's data and copies it into the scan line buffer starting at the appropriate X position.  This approach can accommodate either a large number of narrow sprites or a smaller number of wide sprites, without needing any per-sprite hardware.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-03-16T23:17:49.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6002" PostTypeId="2" ParentId="6000" CreationDate="2018-03-17T00:13:33.803" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I asked in Limiting factor on sprite sizes what the limiting resource is, and there were some good explanations about how memory bandwidth and the size of on-chip memory to store sprite data are both issues. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And these issues stay the same. In fact, your concept suffers even more from limited bandwidth. Storing character data (like on the C64) in a buffer just mitigates that issue - and even with a buffer the time isn't sufficient to read line data &lt;em&gt;and&lt;/em&gt; resulting pixel data, thus the CPU gets cut of every 8th line (to fill the buffer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One scan line is ~64µs with a visible length of ~52µs. A System using 1980s RAM chips - at least the kind that did make sense in home computers, hat a cycle time of ~350-450 ns, that means maximum access rate is two per microsecond. In a 6502 System that translates to one access for the CPU and one for Video. Or, if we clamp out the CPU we get two per microsecond.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in a system where we let the CPU operate in parallel, this allows 52 bytes to be read per scan line, or a maximum resolution of 416 b&amp;amp;w pixels. Or less. The amount of data read can not be more or less as timing is set by the memory clock. So even if we  somehow are able to load a transition list for each line, a transition can only happen at byte borders. So either the resolution is reduced to 52 pixel horizontally, or Spritescan only be positioned on multiples of 8. Not exactly allowing a smooth horizontal movement. Further sprite width can only be sized in multiples of 8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the whole memory bandwidth for video would also just double the data rate, but not solve the basic issue - and result in either a separate video memory and slow access (see TI's TMS9918) or some ZX81 alike slow mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make this work on a pixel level, you need way faster memory. Roughly 8 times faster, which would be like 60 ns RAM if the CPU should run in parallel (could be an 8 MHz 6502 now), or 120ns if the CPU gets stoped/fenced out. Both are note really a solution for that time frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I'd say the shortfall of the idea is, that you might have been thinking in pixel, where access is in bytes - and access time is quite limited.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No matter at what end you start to look at the idea, it all comes down to access rate - Just think, each entry in your transition table must be like 4 bytes at least (2 bytes X position and 2 bytes for sprite data start address). That's the same time as accessing data for 32 continuous pixels. Which of course, now can't be displayed, as the table entry is to be loaded. Having a long blank areas in front and after each sprite doesn't sound cool, does it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And no, there is no time to load it before each line - after all, there are only 12µs or 12 byte loading times. That's barely enough to load the first transition data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so on.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Grandpa story: I did design a somewhat similar video system. The focus wasn't about sprites, but merging display buffers of arbitrary size in real time ... well, thinking of it, it sounds exactly the same :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I solved it with real wide memory (32 Bit) and special fast RAM for the transition tables and a microprogram engine doing the data selection and blending (well, plus some bitbliting). In the end the project got scraped, as the hardware got way too expensive without really solving the problem.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Such a system will very soon use more memory bandwidth for management data and data manipulation than the whole picture data needs for display - which in turn is the the lower time limit it would take to compose it into a buffer (as it's the Memory bandwidth). And that's also the the solution to the problem - and why modern systems no longer use sprites - it's more versatile to have two buffers, one where the next picture is composed and one where the last composed one gets displayed from.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorDisplayName="user39" LastEditDate="2019-02-09T20:12:58.417" LastActivityDate="2019-02-09T20:12:58.417" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6004" PostTypeId="1" AcceptedAnswerId="6005" CreationDate="2018-03-17T17:26:15.553" Score="10" ViewCount="790" Body="&lt;p&gt;We all know that floppy disks are getting hard to find, and floppy drives are fragile to begin with (especially Commodore's 1541 drive).  I know that several companies and parties have released floppy drive replacements that will store floppy disk images on SD cards or USB flash drives, so that we, as users, can avoid having to use floppy disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What options are available to today's Commodore users?  I'm interested both in general comments about the options available, as well as specific comments about practical usage from users that have experience using specific models of floppy drive replacements.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastEditorUserId="11916" LastEditDate="2020-01-04T16:59:26.407" LastActivityDate="2020-01-04T16:59:26.407" Title="Commodore VIC-20/64/128/16/Plus 4 floppy disk drive replacement" Tags="&lt;commodore-64&gt;&lt;floppy-disk&gt;&lt;disk-drive&gt;&lt;commodore-128&gt;&lt;vic-20&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6005" PostTypeId="2" ParentId="6004" CreationDate="2018-03-17T19:19:59.620" Score="10" Body="&lt;h1&gt;&lt;a href=&quot;https://www.c64-wiki.de/wiki/SD2IEC&quot; rel=&quot;noreferrer&quot;&gt;SD2IEC&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;SD2IEC is a free software which turns an ATmega644 microcontroller into an emulated VC1541. It attempts a near-complete emulation (I think REL files aren't implemented, but nearly noone ever used them.) The emulation also supports some common fastloaders, most prominently that of &lt;em&gt;The Final Cartridge III&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You store .d64 disk images onto a FAT formatted SD card and can switch between them with toggle buttons or through the special &quot;CD:&quot; DOS command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware is so simple you can even build it yourself on a breadboard.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;&lt;a href=&quot;http://1541ultimate.net&quot; rel=&quot;noreferrer&quot;&gt;1541 Ultimate II Cartridge&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The latest incarnation is the 1541 Ultimate II+, and this floppy replacement is also builtin to the newly available Ultimate 64, which is a full C64 motherboard replacement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike the SD2IEC, the Ultimate II provides a cycle-exact re-implementation of the 1541 floppy drive in an FPGA. As such, it is compatible with any software that reprograms the 1541 hardware through the IEC interface, or which relies on exact hardware timing of the 1541.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, the Ultimate II provides many other functions like on-screen UI, instant PRG loading (using DMA), 2nd SID, REU, and cartridge emulation, including freezers.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastEditorUserId="4335" LastEditDate="2018-03-18T14:58:34.587" LastActivityDate="2018-03-18T14:58:34.587" CommentCount="3" CommunityOwnedDate="2018-03-17T19:19:59.620" ContentLicense="CC BY-SA 3.0" />
  <row Id="6006" PostTypeId="1" CreationDate="2018-03-17T21:20:34.330" Score="16" ViewCount="1005" Body="&lt;p&gt;While this is not a technical question per se, I finally found something I have no idea and couldn't find any answer online:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How many &lt;a href=&quot;https://en.wikipedia.org/wiki/Cambridge_Z88&quot; rel=&quot;noreferrer&quot;&gt;Cambridge Z88&lt;/a&gt;s were made and/or sold?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it's related, a sub-question would be &lt;strong&gt;How long was the Z88 in production?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Delivery started in Jun 1987 and lasted at least until late 1989, but when did production really stop?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;After much searching through real paper, I found a September 1987 issue of the UK magazine &lt;em&gt;Popular Computing Weekly&lt;/em&gt; mentioning a production capacity of 1000 units per week and an intention to double this 'soon' to 2000. The same issue also features a short article about a deal with SCI, a larger US manufacturing company, to set up production at their Scottish plant. Still no added up production numbers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Another hint, I just noticed, that one of my Z88s carries a 'Made in Scotland by SCI UK LTD' sticker with a serial number of 007092:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0SGfM.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0SGfM.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So there were at least 7000 units produced in the SCI plant. Also, since the contract was mentioned in the September 1987 issue in future form, it may be safe to assume that Cambridge LTD manufactured Z88s in their own works for at least 6 months, adding another 6-10k units. So ~20k can be seen as the absolute lowest limit.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7843" LastEditDate="2018-06-22T17:10:45.043" LastActivityDate="2020-06-11T01:31:01.850" Title="Cambridge Z88 Production Run" Tags="&lt;sinclair&gt;" AnswerCount="5" CommentCount="22" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6007" PostTypeId="1" AcceptedAnswerId="6008" CreationDate="2018-03-17T23:17:57.447" Score="8" ViewCount="307" Body="&lt;p&gt;In Applesoft BASIC, does combining statements into a single line speed up execution?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, would this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT &quot;HELLO WORLD&quot; : FOR I = 1 TO 100 : PRINT I : NEXT I&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Run faster than this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT &quot;HELLO WORLD&quot;&#xA;20 FOR I = 1 to 100&#xA;30 PRINT I&#xA;40 NEXT I&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="8250" LastActivityDate="2018-04-03T11:17:10.330" Title="In Applesoft BASIC, does combining statements into a single line speed up execution?" Tags="&lt;apple-ii&gt;&lt;applesoft-basic&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6008" PostTypeId="2" ParentId="6007" CreationDate="2018-03-17T23:23:29.383" Score="4" Body="&lt;h2&gt;Yes&lt;/h2&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Handling line end and a new lines start does take more time for the interpreter than skiping a colon.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-04-03T11:17:10.330" LastActivityDate="2018-04-03T11:17:10.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6009" PostTypeId="1" AcceptedAnswerId="6010" CreationDate="2018-03-18T01:53:53.923" Score="29" ViewCount="32183" Body="&lt;p&gt;I have an Amiga 500 that I'd like to get up and running again, but the 1084 monitor with which I used to use it has flyback transformer issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What options are available to hook it up to a modern display?  From what I understand, adapting the 23-pin Amiga analog video to VGA is difficult.  I'd like a solution that will display all the same video modes that a 1080/1084 monitor would display back in the day.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2021-02-24T00:05:13.723" Title="How can you connect an Amiga 500/600/1000/2000 to a modern monitor?" Tags="&lt;amiga&gt;&lt;display&gt;" AnswerCount="7" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6010" PostTypeId="2" ParentId="6009" CreationDate="2018-03-18T03:04:52.940" Score="27" Body="&lt;p&gt;The cheapest option is to use the composite output, so it's compatible with any monitor that supports composite but it's only black and white.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or if you have the A520 modulator (about $25 on eBay), you can get a color image through composite, RF (not recommended), or &lt;a href=&quot;http://members.iinet.net.au/~davem2/overclock/A520.html&quot; rel=&quot;noreferrer&quot;&gt;modify the A520 for S-Video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your TV has a standard definition tuner, you may also be able to connect your Amiga 500 through a &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B0014KKV7W&quot; rel=&quot;noreferrer&quot;&gt;third party RF Modulator&lt;/a&gt; (about $15) but again this is not recommended.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next up is a &lt;a href=&quot;http://amigakit.leamancomputing.com/catalog/product_info.php?products_id=183&quot; rel=&quot;noreferrer&quot;&gt;simple HD15 adapter&lt;/a&gt; ($10), but it outputs a 15kHz horizontal scan rate (VGA standard requires 31 kHz) so it only works with a &lt;a href=&quot;http://15khz.wikidot.com&quot; rel=&quot;noreferrer&quot;&gt;limited set of modern LCD monitors&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next is Kipper2K's S-Video adapter, but these are difficult to come by. Or &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2159/75&quot;&gt;make your own&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An option for component video is the &lt;a href=&quot;https://gglabs.us/node/983&quot; rel=&quot;noreferrer&quot;&gt;GGLabs A520HD&lt;/a&gt; (&lt;a href=&quot;https://www.ebay.com/itm/New-GGLABS-A520HD-Amiga-500-600-1200-2000-3000-4000-RGB-to-YPbPr-HDTV-converter-/401501469145&quot; rel=&quot;noreferrer&quot;&gt;$80&lt;/a&gt; or build your own with the supplied Gerbers). Like the other options above, it doesn't have a framebuffer so lag is minimized and the picture is sharp, but the Amiga outputs a nonstandard sync signal and so this may not work with all monitors that support component video. To test your monitor, hook up the composite output from your Amiga to the green (&quot;Y&quot;) component jack on your monitor and see if you get an image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a budget, the ubiquitous Chinese &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B06Y43RVLH&quot; rel=&quot;noreferrer&quot;&gt;SCART to HDMI adapter&lt;/a&gt; (it's sold under different brand names on Amazon and eBay but I think they're all the same) is probably your safest bet. It has good compatibility and gives a good picture but the framebuffer adds some lag so it may not be the best option for fast paced gaming. Just add an Amiga SCART cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your monitor takes VGA or component (YPrPb),  Tim Locke's answer is a less expensive alternative ($20-25) but requires a little DIY. It has a framebuffer so compatibility is good. Similarly, the &lt;a href=&quot;https://www.ebay.com/itm/Wei-ya-Brand-New-CGA-to-VGA-converter-ACV-011-/250772321837&quot; rel=&quot;noreferrer&quot;&gt;Wei-ya ACV-011&lt;/a&gt; ($65) takes some DIY and trial and error but produces a &lt;a href=&quot;https://www.reddit.com/r/crtgaming/comments/7veoj2/amiga_to_vga_with_the_gbs8220_review/duhfeaj/&quot; rel=&quot;noreferrer&quot;&gt;sharper picture with less lag&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, the &lt;a href=&quot;https://amigakit.amiga.store/catalog/product_info.php?products_id=918&quot; rel=&quot;noreferrer&quot;&gt;Indivision ECS&lt;/a&gt;, &lt;a href=&quot;https://www.videogameperfection.com/products/open-source-converter/&quot; rel=&quot;noreferrer&quot;&gt;OSSC&lt;/a&gt;, and &lt;a href=&quot;https://solarisjapan.com/collections/micomsoft/products/xrgb-mini-framemeister-compact-up-scaler-unit-eur-scart-adapter&quot; rel=&quot;noreferrer&quot;&gt;Micomsoft Framemeister XRGB-Mini&lt;/a&gt; provide the best picture quality and the lowest lag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But please keep in mind that the better-than-composite options won't look right with games that take advantage of &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2595/does-every-retrocomputer-and-console-with-ntsc-composite-output-have-artifact-c/2603&quot;&gt;composite artifacts&lt;/a&gt; to produce more colors. &lt;a href=&quot;http://eab.abime.net/showthread.php?t=78403&quot; rel=&quot;noreferrer&quot;&gt;Virtual Karting 2&lt;/a&gt; is one example.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-03-19T07:48:32.287" LastActivityDate="2018-03-19T07:48:32.287" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6011" PostTypeId="2" ParentId="6004" CreationDate="2018-03-18T11:24:33.440" Score="5" Body="&lt;p&gt;There is a series of cable variants called &lt;a href=&quot;http://sta.c64.org/xcables.html&quot; rel=&quot;noreferrer&quot;&gt;X1541&lt;/a&gt; collectivly, which have been used as an adapter of the PC parallel port (when PCs still had an parallel port) to the Commodore IEC bus interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This made it possible to connect a Commodore disk drive to an IBM PC, and also to &lt;a href=&quot;http://sta.c64.org/dosprg.html#1541emu&quot; rel=&quot;noreferrer&quot;&gt;emulate&lt;/a&gt; a Commodore disk drive by connecting the Commodore computer to the PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IEC bus protocol isn't that complex, and even though parallel ports are not common on modern PCs anymore, it shouldn't be hard to adapt the software to any other sort of hardware that can sense and drive a few lines.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-03-18T11:24:33.440" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6012" PostTypeId="1" AcceptedAnswerId="6016" CreationDate="2018-03-18T14:48:29.953" Score="4" ViewCount="464" Body="&lt;p&gt;These days, of course, we have the Internet, but back in the day, there was Unix to Unix Copy - UUCP.  In its heyday it was a terrific way to get email and other simple data moving across the world, through complex routes at time, to their destinations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days it's hard to justify using it for practical purposes, but for nostalgic reasons, I'd like to experiment with it, and it's still present in at least some modern Linux distributions, so it seems like it's perfectly possible.  I suspect there are Internet transports available for it (which are probably off topic for here, and that's okay) but I'm particularly interested in doing UUCP as it was done in the day - with actual modems.  (If necessary, I can experiment using a little inexpensive PBX system and keep it off real phone lines.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know there was a retro UUCP project at one point where hobbyists could exchange data using the protocol, but I can't seem to find it online so I think it's disappeared.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's involved with installing it and testing it?  How difficult would it be to deploy?&lt;/p&gt;&#xA;" OwnerUserId="6986" LastEditorUserId="6986" LastEditDate="2018-03-18T16:03:57.360" LastActivityDate="2018-03-22T13:13:20.733" Title="Setting up and using UUCP (with analog modems)" Tags="&lt;unix&gt;&lt;modem&gt;&lt;linux&gt;" AnswerCount="2" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="6013" PostTypeId="2" ParentId="6007" CreationDate="2018-03-18T14:55:17.580" Score="8" Body="&lt;p&gt;Yes. Replacing &lt;code&gt;NEXT I&lt;/code&gt; with &lt;code&gt;NEXT&lt;/code&gt; will also help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to evaluate this is to throw a speaker click (&lt;code&gt;PEEK -16336&lt;/code&gt;) into the loop and listen.  The faster the loop, the higher the pitch.  (Then try it with &lt;code&gt;SP=-16336&lt;/code&gt; outside the loop and &lt;code&gt;PEEK SP&lt;/code&gt; in the loop, and note the effect that has...)&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2018-03-18T14:55:17.580" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6014" PostTypeId="2" ParentId="4354" CreationDate="2018-03-18T14:56:46.097" Score="3" Body="&lt;p&gt;This answer doesn't win the contest at all, but I include it for interest's sake and the hope to inspire future readers to play with the hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Commodore VIC-20 shipped with 5 kB of RAM and officially expanded to 32 kB, but very easily, and even using hardware available in the first year or so of its existence, it could be expanded to 40 kB (3 kB expander or SuperExpander [the latter of which had BASIC language enhancements], 16 kB expander, and 2 x 8 kB expanders [with their DIP switches configured appropriately so that the RAM doesn't overlap).  That's an 8x multiplier over the stock RAM.  Unlike some of the other competitors, &lt;em&gt;all&lt;/em&gt; VIC-20s shipped with 5 kB so this would be a very normal multiplier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, it's even easier to expand a VIC-20 as there are many, many RAM expanders available.  32 kB expanders are very easy to find, and adding a 3 kB expander and a cartridge slot expander will attain the same result.  (There may even be single-cartridge ways of adding the entire 35 kB additional RAM required, but if there are, I'm not aware of them.)&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2018-03-18T14:56:46.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6015" PostTypeId="1" AcceptedAnswerId="6022" CreationDate="2018-03-18T15:39:25.977" Score="2" ViewCount="230" Body="&lt;p&gt;I am working through the exercises of Lance Leventhal's &lt;em&gt;6800 Assembly Language Programming&lt;/em&gt; on my Epson HX-20. My understanding is that the HX-20's Hitachi 6301 processor is compatible with the Motorola 6800.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first examples of Leventhal's book use direct referencing, and try to manipulate, for example, addresses 0040 and 0041. However, on the HX-20 addresses to 004D are protected for I/O routines and cannot be manipulated from the Monitor. Furthermore, according to chapter 14 of the technical reference manual (available &lt;a href=&quot;http://www.vintagecomputer.net/fjkraan/comp/hx20/doc/info.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;), the following addresses up to 00FF are also used by different processes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;004E to 007F: &quot;Real Time Clock&quot;&lt;/li&gt;&#xA;&lt;li&gt;0080 to 00FF: &quot;This area is used as a work area by the basic interpreter.&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My understanding is that direct addressing on the 6301 (as on the 6800) is only for addresses to 00FF, and (in contrast to the 6809) this behaviour cannot be modified - there is no DP register. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In this case, how can I safely modify such example routines to work on the HX-20?&lt;/strong&gt; What would be the effects of using either of the areas above? Or do I need to resort to a different type of addressing and use addresses from 0A40 to 3FFF, which seem to be the RAM areas left exclusively for user programs?&lt;/p&gt;&#xA;" OwnerUserId="8072" LastActivityDate="2018-03-19T14:05:54.000" Title="(How) can I safely use direct addressing for machine code routines on the Epson HX-20?" Tags="&lt;assembly&gt;&lt;hx-20&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6016" PostTypeId="2" ParentId="6012" CreationDate="2018-03-18T17:50:55.050" Score="5" Body="&lt;p&gt;I certainly used UUCP back in the day, for what most folks used it for back then: email and USENET. UUCP itself is mostly straightforward, albeit a bit cryptic, as was everything back then. But it's certainly something I'd file under &quot;be amazed it worked at all&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Point to point, UUCP is pretty basic. The craziness is the whole routing side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the Internet, routing is buried deep in the system. The vast majority of users are unaware of it, even at a basic level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With UUCP it was a first class concept. The whole point of the bang path was to describe not just where to go, how!to!get!there. Mind, this wasn't the absolute case. There was the idea of &quot;well known hosts&quot; where you could forward stuff (notably email) and it would find its way to its eventual destination, we used UUNET for that back then. There was this whole mess of processes of folks publishing public routing data. At the time, it was less about complaining about the warts of the system compared to simply praising that it worked at all!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a practical point of view, I had my own little USENET/email node tied up via a 2400 baud Hayes Smartmodem to A Guy who I think hooked up through UCLA. At the office, we used UUNET and we also set up our clients directly from our machines. UUNET was pretty much exclusively mail and news.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the office, we struggled getting UUCP to be seamless. We used it to move software over for installation on client system. It mostly worked, it sorta worked, but wasn't necessarily reliable for us. Or, we were just impatient. When we wanted to send a file, we typically wanted it &quot;now&quot;, not &quot;later&quot;, so not really wanting to wait for the retry timeouts to come around and have another go at it. All fine when things are working great, but when something goes awry, it's all timeouts and queues and other annoying &quot;not right now&quot; things. Our backup was typically shoving stuff over Kermit directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would have like to have been able to leverage the uuxqt (I think it was) capability of running remote scripts, that way we could have done remote installs and such.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ubiquitous connectivity pretty much spelled the demise of UUCP. Even with modems today, you're likely better off lighting up a SLIP or PPP connection and then just using normal TCP/IP protocols.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, that said, TCP/IP is still pretty heavy weight in comparison to a simple file transfer using a reliable protocol. UUCP didn't any of the common protocols of the day (X/Y/ZMODEM, Kermit, etc.). It COULD, it just didn't. You could extend it today to do it if you were so motivated. So, if you had a modem on an TCP/IP-less micro-controller, UUCP could certainly be leveraged to get data in and out of a network of such machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that said, I can see an interesting use case for it, even today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notably, because we have a lot of layering in our modern network systems. For example, you have a simple network: A &amp;lt;-&gt; B &amp;lt;-&gt; C. A can connect to B, and B to C, but not A to C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can see a contrived case where, using an IP based transfer mechanism, you can have someone uucp from A to b!c, A connects to B, moves the data, then, later, B connects to C (or vice-a-versa) and finishes the job. This makes the transfer an ostensibly &quot;single step&quot; process for the person on A, while the UUCP process manages the hurdling of firewalls an what not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now would someone use UUCP for that, vs, say, rsync via cron, or something else? Eh, who knows. But, that may more simply be unfamiliarity with the process more so than inappropriateness. If we have anything today, it's a 100 and 1 different ways to move data.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-03-18T17:50:55.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6017" PostTypeId="2" ParentId="6009" CreationDate="2018-03-18T18:47:49.877" Score="5" Body="&lt;p&gt;There exists a device called GBS-8220 that converts on-the-fly from 15kHz line frequency to 31kHz (and more) line frequency compatible with VGA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It features an on-screen menu to configure it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will have to buy an Amiga-compatible connector and solder 5 wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some references:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=q3J4QJsn0ig&quot; rel=&quot;nofollow noreferrer&quot;&gt;GBS-8220 Review&lt;/a&gt; shows how it works and some noise appearing&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=xqlrOcGZx38&quot; rel=&quot;nofollow noreferrer&quot;&gt;GBS-8220 Noise Fix&lt;/a&gt; basically add some copper tape shielding on some specific areas.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You can easily find sites to buy some (new and used) online.&lt;/p&gt;&#xA;" OwnerUserId="637" LastEditorUserId="637" LastEditDate="2018-03-23T20:49:53.647" LastActivityDate="2018-03-23T20:49:53.647" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6019" PostTypeId="1" CreationDate="2018-03-19T08:57:03.907" Score="10" ViewCount="1134" Body="&lt;p&gt;Are there any areas of the 64k RAM which are permanently unusable by anything, whether by the built-in monitor ROM or user programs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at $C000-C0FF, this is the &quot;softswitch&quot; area, and as far as I can determine, the 256 bytes of RAM that occupies this space may be completely unusable by anything. Apparently no RAM is required here as these are mapped to I/O control lines for system devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any special bank switch tricks to gain access to the RAM that occupies $C000-C0FF ?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2019-10-08T08:34:02.553" Title="Is all 100% of a 64k Apple II memory usable?" Tags="&lt;apple-ii&gt;&lt;memory&gt;&lt;memory-layout&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6020" PostTypeId="2" ParentId="6019" CreationDate="2018-03-19T10:24:51.043" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Are there any areas of the 64k RAM which are permanently unusable by anything, whether by the built-in monitor ROM or user programs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. All is usable. After all, Woz did it. He never wasted a single gate, even less RAM.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Looking at $C000-C0FF, this is the &quot;softswitch&quot; area, and as far as I can determine, the 256 bytes of RAM that occupies this space may be completely unusable by anything. Apparently no RAM is required here as these are mapped to I/O control lines for system devices.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is not RAM in the &lt;code&gt;$C000..CFFF&lt;/code&gt; area and never has been.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original Apple II had 'only' up to 48 KiB. Later the Language Card added 16 Kib in form of 12 KiB in parallel to the ROM at &lt;code&gt;$D000...FFFF&lt;/code&gt;(using &lt;code&gt;/INH&lt;/code&gt; to aquire the address space). Since using eight 16 Ki, 4116 type chips, was cheaper than 12 4 Ki ICs,the card ended up with 16 KiB. To not waste the additional 4 KiB (quite a lot back then), a logic was added to switch in the remaining 4 KiB again in parallel as &lt;strong&gt;Language Card Bank 2&lt;/strong&gt; at &lt;code&gt;$D000..DFFF&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While using 64 Ki RAMs, the Apple //e addressing logic (MMU) uses the same logical scheme.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Are there any special bank switch tricks to gain access to the RAM that occupies $C000-C0FF ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, as there is never RAM at that address. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Reading the softswitch at &lt;code&gt;$C08B&lt;/code&gt; flips in bank 1.&lt;/li&gt;&#xA;&lt;li&gt;Reading the softswitch at &lt;code&gt;$C083&lt;/code&gt; flips in bank 2.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In either case, &lt;code&gt;$E000..FFFF&lt;/code&gt; is always bank 1.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Reading the softswitch at &lt;code&gt;$C082&lt;/code&gt; disables the Language Card again.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There is also another bunch of combinations for reading ROM while writing the Language Cards RAM and so on, but I guess you get the picture.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Here some viualisation I used for a speech about RAM design.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/yn21s.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yn21s.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-08T08:34:02.553" LastActivityDate="2019-10-08T08:34:02.553" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="6021" PostTypeId="2" ParentId="6009" CreationDate="2018-03-19T11:12:02.670" Score="9" Body="&lt;p&gt;Use/buy a television instead of a computer monitor. They have a wider range of inputs and support 15kHz video on—in order of increasing picture quality—analogue UHF, composite, and RGB SCART. Many sets also support S-Video and YUV inputs but those would involve building extra interface circuitry and a SCART cable is much simpler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IME, modern televisions do not support 15kHz video on the VGA input, typically complaining that the signal is out of range even though the same signal is acceptable over other inputs. This won't affect you on the Amiga models you list, but is a heads-up for any A1200/A4000 users who are reading this answer and were hoping to use a modern TV as a multisync monitor. The YUV input may be a solution since it often supports both SD and HD video, but I have yet to explore this possibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The television will probably cost more money than a monitor. For example, when my PC monitor failed in early 2018 and I went looking for a replacement into which I could also plug an A1000, the candidate monitors (1080p, 22-24&quot;) were around the €110–130 mark, whereas the television I settled on was €170.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2018-03-19T11:12:02.670" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6022" PostTypeId="2" ParentId="6015" CreationDate="2018-03-19T13:18:34.677" Score="3" Body="&lt;p&gt;&lt;em&gt;Direct Addressing&lt;/em&gt; is what Hitachi used as a term for an addressing mode that takes immediate 8-bit values as address. Obviously, this can only be used to address the lower 256 bytes of memory/IO. Apparently, the HX-20 ROM already uses this memory area for internal purposes. If you don't want to interfere (or, knowing what you're doing, manipulate) these ROM routines, you should stay away from modifying these addresses (No harm done if you only read from there).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With direct addressing of the low memory variables, you could achieve such things as, for example, re-writing the vectors that are called when the BREAK key is pressed or the battery voltage is low to own machine code routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other immediate addressing mode the 6301 supports is &lt;em&gt;Extended Addressing&lt;/em&gt; that takes addresses from 0 to $FFFF - This works exactly the same as &lt;em&gt;Direct Addressing&lt;/em&gt;, but uses 2-byte long addresses and also uses the same mnemonics. Your assembler should be smart enough to assemble instructions that use short addresses into direct addressing modes and longer (&gt;$FF) addresses into extended addressing modes instructions automatically. Extended addressing has to use a 3-byte instruction format, because obviously the 16-bit address has to go somewhere, so your programs are a bit longer when using extended addressing.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-03-19T13:35:04.623" LastActivityDate="2018-03-19T13:35:04.623" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6023" PostTypeId="2" ParentId="6015" CreationDate="2018-03-19T14:05:54.000" Score="2" Body="&lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt;&lt;br/&gt;&#xA;&lt;em&gt;I remember the HX-20 being around but have never used one.&lt;br/&gt;&#xA;The following advice is &lt;strong&gt;untested&lt;/strong&gt;. Use at your own risk!&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr/&gt;&#xA;&#xA;&lt;p&gt;Working through information from &lt;a href=&quot;https://en.wikipedia.org/wiki/Epson_HX-20&quot; rel=&quot;nofollow noreferrer&quot;&gt;HX-20 Wikipedia page&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;You can enter the Monitor by pressing &lt;code&gt;1&lt;/code&gt; at the startup&#xA;menu.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the BASIC ROMs are absent (#2 and #3 from the Wiki page), then the machine works fine (but without the option of using BASIC, obviously).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;From those two points, I would be fairly confident in saying any RAM used by BASIC &lt;em&gt;when it is running&lt;/em&gt; (i.e. &lt;code&gt;0080&lt;/code&gt; to &lt;code&gt;00FF&lt;/code&gt;) would be safe to use &lt;em&gt;while you are in the monitor&lt;/em&gt; (i.e., the monitor does not make use of code in the BASIC ROMs, so shouldn't be dependent on any RAM that BASIC uses).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, if you were to go straight to the Monitor on startup, I believe you should be able to use the RAM between &lt;code&gt;0080&lt;/code&gt; and &lt;code&gt;00FF&lt;/code&gt; for your own purposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you used &lt;code&gt;MON&lt;/code&gt; to enter the monitor from BASIC, then it would probably be OK to use that RAM &quot;for the duration&quot;, but if you were to return to BASIC (using the &lt;code&gt;B&lt;/code&gt; command, if I'm reading that Wiki page correctly), then BASIC &lt;em&gt;may&lt;/em&gt; get confused – it would probably be safer to reset.&lt;/p&gt;&#xA;" OwnerUserId="731" LastActivityDate="2018-03-19T14:05:54.000" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6024" PostTypeId="2" ParentId="3194" CreationDate="2018-03-20T04:46:56.623" Score="6" Body="&lt;p&gt;MS-DOS 6.0 and 6.20 shipped with DoubleSpace. MS-DOS 6.21 removed it due to the Stac lawsuit, and MS-DOS 6.22 replaced it with DriveSpace with an incompatible algorithm and format. Soon after MS-DOS 6.22 was released, MS signed a settlement with Stac and Windows 95 shipped with an unified driver that supported both. And yes, they decided to default to DoubleSpace format with Windows 95 for new volumes:&#xA;&lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/123/Q123751/&quot; rel=&quot;noreferrer&quot;&gt;https://jeffpar.github.io/kbarchive/kb/123/Q123751/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8256" LastEditorUserId="8256" LastEditDate="2018-03-21T04:55:30.467" LastActivityDate="2018-03-21T04:55:30.467" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6025" PostTypeId="1" AcceptedAnswerId="6026" CreationDate="2018-03-20T11:02:51.593" Score="2" ViewCount="449" Body="&lt;p&gt;A 1994 book called 'The Design and Implementation of a Log-structured file system' contains the claim &quot;We have implemented a prototype log-structured file system called Sprite LFS; it outperforms current Unix file systems by an order of magnitude for small-file writes while matching or exceeding Unix performance for reads and large writes.&quot; That would seem on the face of it to constitute a compelling case to start using the file system in question, which raises the question of why this did not happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Unix Haters Handbook claims this is because Sprite LFS not only was not compatible with the Unix API, but could not be; that user-visible aspects of the Unix API &lt;em&gt;preclude&lt;/em&gt; high performance in any file system that retains compatibility. Granted that this book disclaims impartiality by its very title, I'm still interested in whether they are right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the classic Unix API indeed preclude high-performance file systems like Sprite LFS? If so, what features of the API were responsible for this? (And how was the problem eventually resolved? I haven't seen anyone claim modern Linux file systems lack performance, and I'm under the impression Linux retains a high degree of backward compatibility.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-03-20T11:20:22.883" Title="File system performance and the Unix API" Tags="&lt;unix&gt;&lt;performance&gt;&lt;file-system&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6026" PostTypeId="2" ParentId="6025" CreationDate="2018-03-20T11:20:22.883" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://web.stanford.edu/~ouster/cgi-bin/papers/lfs.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Sprite LFS paper&lt;/a&gt; explains some of the performance issues its designers were trying to solve:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lack of locality (even if FFS tries to keep individual files’ blocks contiguous on disk, they end up separated from the inode, and often separate from related files);&lt;/li&gt;&#xA;&lt;li&gt;synchronous writes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The first issue is indeed driven by Unix-like semantics: Unix-like file systems always end up with concepts representing directories, files, and inodes. The second issue has seen common practice move back and forth over the years, and isn’t intricately tied to Unix-like semantics (although the definitions of &lt;code&gt;sync&lt;/code&gt; operations do impose some constraints).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A variety of techniques have been used to address locality concerns, starting with &lt;a href=&quot;http://e2fsprogs.sourceforge.net/ext2intro.html#subsection:ext2fs:allocation&quot; rel=&quot;nofollow noreferrer&quot;&gt;block groups&lt;/a&gt; in &lt;code&gt;ext2&lt;/code&gt;, more “intelligent” pre-allocation (and additional APIs allowing programs to tell the file systems about their allocation patterns), and moving to tree-structured file systems more recently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Write performance has been addressed using a number of techniques too: for example, dropping fully-synchronous operations in favour of barriers, and using techniques from log-based file systems, re-implemented as the journal in journalling file systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As proof that logging file systems aren’t inherently incompatible with Unix-like semantics, you can look at real log-structured file systems which implement POSIX semantics, such as &lt;a href=&quot;https://en.wikipedia.org/wiki/NILFS&quot; rel=&quot;nofollow noreferrer&quot;&gt;NILFS2&lt;/a&gt;. I’m not actually convinced that Sprite LFS itself is incompatible with Unix-like semantics; the paper doesn’t support this, and the UHH doesn’t give enough detail...&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-03-20T11:20:22.883" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6027" PostTypeId="2" ParentId="6000" CreationDate="2018-03-20T21:25:55.530" Score="6" Body="&lt;p&gt;Expanding on my comment above:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a while I pursued efficient drawing of filled polygon graphics on 8-bit systems through differencing. My intention was that I would exit the 3d calculations with what amounts to a span buffer: for each line an ordered list of only the x positions at which a change of colour occurs, and the colour that is changed to. The advantage of that is that it's fairly trivial to do an O(n) comparison between the new list for a line and the last one that was drawn there and draw only the differences. So you're in effect only repainting the boundary changes. Since polygons tend to be large, that's a lot less drawing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Demos do that sort of thing all the time but are specialised to particular scenes, e.g. a single non-overlapping shape (because it's convex with hidden face removal, or originally 2d), or a scene that is entirely or overwhelmingly precomputed. I didn't want to produce a demo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what I wanted was essentially identical to what you're proposing: just an ordered list of transitions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Option one is to fill the thing from back to front. Naively assuming that my intermediate working set is the same as my final output set, to add a new span x1 to x2 I need to figure out where x1 should go in the existing list and insert it, and then I need to walk the list until x2 keeping track of colours and removing transitions, then insert one at x2 back to whatever I discovered the active colour to be there. I do that for every span, I'm done. It's a logarithmic search, then naively a linear one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Smarter is to store left colour and right colour at each transition. Then that's two logarithmic searches, one over a smaller data set than the other, plus arbitrary removals and usually two insertions (unless you fall exactly on an existing transition, that is).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, the amount of time you spend shuffling bytes back and forth in the list kills any advantage you might have hoped to get as soon as you have any number of polygons more than the amount you could just straight draw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I tried switching to drawing front to back. Therefore you may insert only that portion of a new span that would cover an area that is currently the background colour. That prima facie reduces inserts but makes walking the list obligatory. So you're back to logarithmic plus a linear walk. And, actually, it actually often increases inserts because you're often splitting the new span you're inserting. Though if you keep a proper tally you can spot when a line is already full and reject all further spans immediately, so looking directly at a wall suddenly becomes the optimal case rather than the worst.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a linked list rather than a linear makes the issues worse, not better, because it makes all searches linear rather than logarithmic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I abandoned the idea of creating the list in its output form and switched to front to back tree-based insertion, which is serialised only at the end. Each node is a complete span, and sticking with front-to-back means never splitting what's already in the tree, only splitting or discarding what's being inserted. An issue then is storage if you want any sort of speedy traversal. I was targetting a 256-pixel display window so I went with five bytes per node — start x, end x, link to left subtree, link to right subtree, colour, and allocated each output line its own 128-byte half-page aligned section of memory. So that's 24kb, ouch! And no more than 25 polygons on each line, though that's less troubling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inserts are then 'cheap' and the final serialisation is a simple stack-based in-order walk but that still very quickly became far and away the dominant processing cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can resolve the fixed-24kb issue by using seven-byte records but then you're talking about walking 16-bit pointers which is more hassle for a Z80 and not really practical at all for a game on a 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also resolve it by producing polygon spans on demand and having only a single-line buffer. That introduces a further potential optimisation: sort your span-producing objects from left to right and produce the sorted list 'directly'. The issue is that you've lost your front-to-back ordering. So actually what happens is that at each object edge you know which n objects are currently outputting pixels, you pick the frontmost, then proceed to the next transition point. Where you possibly make much the same decision, but after adding or subtracting from the active list.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That actually ended up being the most optimal thing, and was demonstrably smarter than brute forcing, but look at the steps I've had to perform:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;prepare a list of all objects that contribute to the scene up front;&lt;/li&gt;&#xA;&lt;li&gt;ideally, sort them by starting y position;&lt;/li&gt;&#xA;&lt;li&gt;step down the display one line at a time, keeping a note of which objects are active on that line without breaking the ordering;&lt;/li&gt;&#xA;&lt;li&gt;for that line, look at my indirect list of active objects and check that it is still properly sorted by x. If it isn't, adjust it;&lt;/li&gt;&#xA;&lt;li&gt;step through the transition points (i.e. start or end of object) of that that from left to right, at each making a decision about the new frontmost and writing a transition if it has changed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My case is actually slightly simpler than sprites: my objects were horizontally convex. Each had only one start and end per line. For sprites you're going to need to have an RLE version of their boundaries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I pursued it because it was interesting, but it was a major rabbit hole, the in-RAM requirements for doing anything in a feasible amount of time are large by the standards of the day, and it still cost quite a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you presented that to contemporaneous developers as an alternative for sprite output to the C64, NES, ColecoVision, etc school of just giving a list of sprites and accepting that they're limited to, often, 16x16 and four or eight per line, I don't think your platform would get much support. It's a lot of work, it burns a huge amount of your CPU advantage, and it's just too peculiar. Maybe you'd have found an audience for a brief while if you'd been able to leap in with that as the next development straight from the 2600, getting an audience of beam racers directly on board, but even then somebody like Coleco would have appeared and said 'we just made it simple and, look, we can port things reasonably well very quickly'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I like the idea, but it's actually much more complicated than it sounds, and I think that would have dissuaded development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll also note that for sprite graphics you've also probably substantially increased the necessary memory bandwidth because you need to write a transition each time a sprite switches from transparent to opaque. So you need a decent precision on where the display processor should start fetching from. So you're probably talking a worst case of 16 bits per pixel for anything regular and with decent precision. If you don't bucket the transitions then it's at least 24 bits per transition as you need to be explicit about location. Something like the C64 has bandwidth for only 40 byte fetches in a line (bad lines aside) so that's 13 whole transitions. Even with just rectangles, each has a transition in and a transition out. So that's 6 whole objects. You've done worse than with the 8 hardware sprites that machine actually has.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(bonus chatter: yes, preparing the scene as above would in principle allow it to be commuted to something like a Copper or ANTIC list rather than actual pixels; no, I'm insufficiently familiar with those machines to know whether that's actually helpful; I was just looking for the platform-neutral partial redraw possibilities)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;EDIT: having typed all that out, I realise there's something of a real example: PowerVR versus 3DFX. The former offered in theory much higher geometry rates through a process called tile-based deferred rendering, which required the programmer to track and bucket all geometry in a scene before submission. Whereas with the 3DFX one just see one polygon at a time. It's not exactly the same because the 3DFX was also generally considered to be better at filling polygons: the PowerVR lacked bilinear interpolation. So it was one type of looking better versus another type of looking better. The one that didn't really require any programming effort won.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-03-20T23:01:55.260" LastActivityDate="2018-03-20T23:01:55.260" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6028" PostTypeId="2" ParentId="6019" CreationDate="2018-03-20T23:23:10.063" Score="9" Body="&lt;p&gt;Yes, all 64kb of RAM is accessible. But you ask an interesting question, if we change one letter. ; - )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Address space and device mapping&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You asked about RAM, but how is RAM read? The CPU puts a 16-bit address on the address bus, puts the R/W' line in the desired state, and then expects a value on the 8-bit data bus within a certain time. What sends the data that comes back? Something else connected to these shared buses and configured to respond to the given address. It might be onboard RAM, ROM, a peripheral card, or something else. (I will document a few anomalies below.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point being that because the buses are shared, the 16-bit address space is shared, and parts claimed by various devices according to physical (cards etc) and logical (soft-switch) configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;RAM&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the original Apple II or II+ there is up to 48kb on the motherboard. The extra 16kb (or more) of the &quot;RAM device&quot; decoding is split between the motherboard and a RAM (e.g. Language) Card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 64kb Apple //e is very similar to the II+ with LC, except that the entire 64kb is onboard. In fact in the //e, $DXXX accesses to LC Bank 1 are converted to &quot;physical RAM device&quot; addresses in $CXXX. (For details see &lt;a href=&quot;https://archive.org/details/Understanding_the_Apple_IIe&quot; rel=&quot;noreferrer&quot;&gt;Sather's Understanding the Apple //e&lt;/a&gt;, page 5-24, third paragraph.) If a //e has 128kb or more then the Auxiliary Slot again divides the RAM &quot;device&quot; decoding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In most Apple IIs $CXXX only accesses peripheral card RAM (or card ROM etc) and onboard ROM, but the //c+ has &lt;a href=&quot;http://apple2.guidero.us/doku.php?id=mg_notes:apple_iic:mig_chip&quot; rel=&quot;noreferrer&quot;&gt;has 2k of &quot;secret&quot; RAM accessed through a $20 byte window at $CE00&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;ROM&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you replace the RAM in your question with ROM (one letter, as I said) the question becomes more interesting, and you have in fact suggested a good place to look: $C0XX. This address space is &lt;strong&gt;always&lt;/strong&gt; claimed by the softswitch decoding logic, and yet both the Apple //e and //c have ROMs called CD, EF or CF that are large enough to fully occupy $C000 to $FFFF. And in fact they do. You cannot read the $C0XX ROM area from inside the Apple, but if you dump any //c ROM (not //c+) and look at the beginning where $C000 to $C0FF would be, you find this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Peter Quinn, Rick Rice, Joe Ennis, J MacDougall, Ken Victor, E&#xA;  Beernink, JR Huston, RC Williams, S DesJardin, Randy Bleske, Rob&#xA;  Gemmell, Stan Robbins, Donna Keyes, Doug Farrar, Rich Jordan, Jerry&#xA;  Devlin, John Medica, B Etheredge, Dave Downey, Conrad Rogers&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Hidden in this inaccessible $C0XX ROM are the names of the creators of the //c.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Something else&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What if no device claims an address read? The Apple II was architected such that the CPU accesses the buses during one of its internal phases, and the video scanner uses the other phase to read video data from RAM to generate video. &lt;a href=&quot;http://rich12345.tripod.com/aiivideo/softalk.html&quot; rel=&quot;noreferrer&quot;&gt;Bob Bishop discovered in 1982 that reads at unclaimed addresses return the most recently scanned video data&lt;/a&gt;. Examples are softswitches that do not return data, and vacant slot memory in $CXXX. A few games used this &quot;floating bus&quot; data to sync their graphics page-flipping with monitor refresh to avoid flicker. The technique is sometimes referred to as &quot;vapor lock&quot;.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2018-03-22T22:36:28.847" LastActivityDate="2018-03-22T22:36:28.847" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6029" PostTypeId="1" AcceptedAnswerId="6030" CreationDate="2018-03-21T08:46:29.117" Score="2" ViewCount="1301" Body="&lt;p&gt;I remember all those video game boxes stamped with &lt;em&gt;IBM PC (and compatible)&lt;/em&gt;, while bringing good memories I felt this was rather incorrect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of these games would never run on such computers, i.e. they display 256 colors, output audio on sound cards and most importantly, have much higher CPU requirements; technologies that surfaced during AT era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the natural descendants of the PC are the XT then the AT, I believe that our PCs are in fact ATs, is that correct ?&lt;/p&gt;&#xA;" OwnerUserId="3282" LastActivityDate="2018-03-21T18:19:35.753" Title="What we commonly call PCs are in fact ATs, correct?" Tags="&lt;ibm-pc&gt;&lt;terminology&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6030" PostTypeId="2" ParentId="6029" CreationDate="2018-03-21T09:20:41.003" Score="12" Body="&lt;p&gt;First of all, the original IBM PC &lt;a href=&quot;https://www.youtube.com/watch?v=hNRO7lno_DM&quot; rel=&quot;noreferrer&quot;&gt;is capable of much more than is commonly believed&lt;/a&gt;, although that didn’t help with games back in the day of course (and the effects in that demo aren’t necessarily usable in a game anyway).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That’s not all that relevant to your actual question though. What is relevant IMO is the fact that game publishers were quite careful to document the real requirements of their games; see for example &lt;a href=&quot;http://www.mobygames.com/game/dos/adventures-of-willy-beamish/cover-art/gameCoverId,60566/&quot; rel=&quot;noreferrer&quot;&gt;this 286+ game (Willy Beamish)&lt;/a&gt; or &lt;a href=&quot;http://www.mobygames.com/game/dos/7th-guest/cover-art/gameCoverId,390080/&quot; rel=&quot;noreferrer&quot;&gt;this 386+ game (The 7th Guest)&lt;/a&gt;. This was important even in the early PC days: the very first PC itself existed in a variety of configurations, with different graphics adapters (commonly MDA, CGA, and then Hercules) and different amounts of memory. So stating that something required an “IBM PC (or compatible)” was never sufficient to know that any given computer would be able to run a specific piece of software...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many would argue that PC gaming only came into its own with the advent of the 386, VGA and sound cards, none of which were present in &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Personal_Computer/AT&quot; rel=&quot;noreferrer&quot;&gt;the “official” IBM PC AT&lt;/a&gt;. Back in those days people certainly differentiated AT-class computers from 386-class computers, so saying that “PCs are in fact ATs”, while correct in some ways, would have been considered misleading in others even when ATs were still (somewhat) relevant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It’s also worth considering that our PCs are now far, far removed from ATs, even if they’re still backwards-compatible with them (and even then, not for much longer). So “our PCs are in fact ATs” has become less and less true with time, and is now pretty much irrelevant.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-03-21T09:20:41.003" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6031" PostTypeId="2" ParentId="5974" CreationDate="2018-03-21T11:46:57.197" Score="8" Body="&lt;p&gt;I have seen this happen on several Nintendo systems:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the days of the G&amp;amp;W games, they were putting a rather thick polarizing layer in front of the LCD screen and not gluing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At some point, they started to use thinner films and then glue them to the screen and, in some cases, the glue produces some gas and it can bubble. I am not sure why it is happening, but it does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sure you're really comfortable with that kind of stuff before attempting to repair:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to disassemble the unit and remove the polarizing film. You will have to break the film, it will not be reusable, so don't worry about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To help removing it, you can use a bit of heat from a blow dryer and rubbing alcohol, it will not hurt the screen (which is glass).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One the film is removed, you have to remove all traces of glue and oil (from your fingers) from the screen, using rubbing alcohol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to get another polarizing layer; it's easy to get from an old LCD monitor; just cut it to the proper dimensions, no need to glue it in place and the system will work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's very easy to put fingerprints and dust everywhere, so be careful about that because otherwise you'll have to disassemble it again for some cleanup :)&lt;/p&gt;&#xA;" OwnerUserId="3884" LastEditorUserId="3884" LastEditDate="2018-03-21T11:55:51.990" LastActivityDate="2018-03-21T11:55:51.990" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6032" PostTypeId="2" ParentId="5071" CreationDate="2018-03-21T12:01:24.263" Score="3" Body="&lt;p&gt;It's either:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microfiler (Atari, C64)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/m58Ho.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/m58Ho.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KTbe2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KTbe2.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or, Vizastar (C64)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xetuh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xetuh.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2018-03-21T12:01:24.263" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6033" PostTypeId="2" ParentId="6029" CreationDate="2018-03-21T12:45:06.087" Score="2" Body="&lt;p&gt;Today's &quot;PCs&quot; (as in Windows/Linux/... x86-64 box) have little in common with an IBM AT. There's still some compatibility on the software level but the hardware is vastly different.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Shugart FDD interface - gone&lt;/li&gt;&#xA;&lt;li&gt;ST506/MFM HDD interface - gone&lt;/li&gt;&#xA;&lt;li&gt;ISA bus - gone&lt;/li&gt;&#xA;&lt;li&gt;DIN-style keyboard interface - gone (still somewhat common with the compatible PS/2 connector - but vanishing)&lt;/li&gt;&#xA;&lt;li&gt;parallel printer port - gone&lt;/li&gt;&#xA;&lt;li&gt;25-pin serial port - gone&lt;/li&gt;&#xA;&lt;li&gt;MDA/CGA/EGA video - gone&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Even several successors of these vanished interfaces have gone:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IDE/EIDE/PATA&lt;/li&gt;&#xA;&lt;li&gt;EISA bus&lt;/li&gt;&#xA;&lt;li&gt;VLB&lt;/li&gt;&#xA;&lt;li&gt;PCI bus&lt;/li&gt;&#xA;&lt;li&gt;parallel SCSI&lt;/li&gt;&#xA;&lt;li&gt;9-pin serial port (mostly)&lt;/li&gt;&#xA;&lt;li&gt;VGA video (15-pin) (mostly)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Even the AT's BIOS that has incredibly long worked as a core for later BIOSes is increasingly replaced by UEFI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anything substantial left?&lt;/p&gt;&#xA;" OwnerUserId="5200" LastEditorUserId="5200" LastEditDate="2018-03-21T17:44:29.917" LastActivityDate="2018-03-21T17:44:29.917" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6034" PostTypeId="2" ParentId="6029" CreationDate="2018-03-21T14:22:31.123" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Since the natural descendants of the PC are the XT then the AT, I believe that our PCs are in fact ATs, is that correct ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. If at all, they are &lt;a href=&quot;https://en.wikipedia.org/wiki/PC_System_Design_Guide&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-Standard Computers&lt;/a&gt;, as this group, lead by Intel andMicrosoft was the only standard body trying to define and standardize the advancements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of compatibility thay are no longer defined by some hardware API (*1), but software API's - thanks to an ever increasing CPU power enabeling the encapsulation of hardware to a great extend. The last of these common standards is &lt;a href=&quot;http://tech-insider.org/windows/research/2000/1102.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the PC-2001&lt;/a&gt; from, well, 2001. One reason for not adding any newer is that the 2001 standard did not only cover next to all common user related interfaces (and removal of obsolete), but also is seen as the point where the &lt;a href=&quot;https://en.wikipedia.org/wiki/Legacy-free_PC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Legacy-Free-PC&lt;/a&gt; came to be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was based on the fact, that individual interfaces where no longer developed. Standards like PCIe and USB covering all I/O connections with new deviced only added thru one of these. All together hiden by multiple levels of API - just this time way too complex for average programmers to hack around :)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 -in fact, the PC was never realy to be defined by hardware, it was just badly written software bypassing abstraction layers that resulted in hardware dependance.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-03-21T15:37:11.357" LastActivityDate="2018-03-21T15:37:11.357" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="6035" PostTypeId="1" AcceptedAnswerId="6040" CreationDate="2018-03-21T17:42:48.060" Score="20" ViewCount="5863" Body="&lt;p&gt;Early home computers and game consoles output video to TV sets. The NTSC color clock frequency is 3.58 MHz. This informed the design of some video systems:&#xA;&lt;a href=&quot;http://pineight.com/mw/index.php?title=Dot_clock_rates&quot; rel=&quot;noreferrer&quot;&gt;http://pineight.com/mw/index.php?title=Dot_clock_rates&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, the Atari 2600 and Intellivision have one pixel per color clock, which is an obviously reasonable way to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Apple II, the pixel clock is exactly twice the color clock. That makes sense because it has an option to turn &lt;em&gt;off&lt;/em&gt; the color clock to generate reasonably crisp black-and-white text, then turn it on for the ability to generate artifact colors. This arrangement is very economical on parts count, which was important at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Atari 800 also has a pixel clock exactly twice the color clock, but as far as I know, it does &lt;em&gt;not&lt;/em&gt; have the option to turn off the color clock. I'm trying to figure out what advantage it gains from this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, I know if you run at an exact multiple of the color clock you can generate artifact colors, but surely you would get strictly better results by running exactly at the color clock and spending the memory and bandwidth on coloring fewer pixels? For example, say the Atari is operating in a mode with 1 bit per pixel, and generating artifact colors. Would it not be better off halving the pixel resolution and using 2 bits per pixel to just generate the wider range of colors directly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a theory that says it makes sense to subsample the chroma information, in other words run the luma information at twice the frequency, because the luma information is more important, but as far as I can see based on e.g. &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II_graphics#Color_on_the_Apple_II&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Apple_II_graphics#Color_on_the_Apple_II&lt;/a&gt; the result of this is that the luma information simply gets converted into artifact colors, and you might as well have done this directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The situation with other machines like the NES looks even worse; it outputs somewhat more than one pixel per color clock, but less than two, so that the extra resolution will just convert into uncontrollable color fringing. On the face of it, the NES looks like a reduction of the resolution to 3.58 MHz pixel clock would produce better results for lower cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What advantage was there in going higher than one pixel per color clock (in machines that weren't going to turn off the color clock to generate black-and-white text like the Apple II), that I am missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2018-03-21T18:20:49.463" LastActivityDate="2020-02-22T22:28:07.903" Title="Why not one pixel per color clock?" Tags="&lt;graphics&gt;&lt;ntsc&gt;&lt;color-display&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6036" PostTypeId="2" ParentId="6035" CreationDate="2018-03-21T18:06:00.373" Score="12" Body="&lt;p&gt;The pixel clock has to be fast enough to generate the number of pixels you want to display horizontally within the 56 microsecond scan line interval.  At 3.58MHz, you only get about 200 pixels.  This was fine for the Atari 2600 et al, which had 160 horizontal pixels, but the other systems you mentioned had higher horizontal resolution, so had to use a faster pixel clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edited to clarify in response to comment:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is actually useful.  A standard definition TV is actually able to display more detail horizontally in terms of &lt;em&gt;luminance&lt;/em&gt; (i.e. brightness) than it can in &lt;em&gt;chrominance&lt;/em&gt; (i.e. &quot;colour&quot;).  An NTSC TV &lt;em&gt;is&lt;/em&gt; limited to approximately 200 transitions of colour in each horizontal line, due to the 3.58MHz colour signal bandwidth, but it can manage somewhere between 400 and 700 brightness transitions per line, depending on the quality of the electronics and how good the signal it's receiving is.  PAL and SECAM have slightly higher figures, but in the grand scheme of things the difference is small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is why the last generation of systems that were designed primarily for TV output tended to have between 256 and 320 horizontal pixels (e.g. the Commodore 64 or Sinclair Spectrum) -- these were the most convenient figures that could reliably be displayed.  480 or 512 pixels might have been interesting, but a lot of users would never have been able to see the detail added by such high resolutions, so it wasn't commercially useful to provide it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other end of the spectrum (no pun intended), DVD was designed with a horizontal resolution of 720 pixels because that was the &lt;em&gt;lowest&lt;/em&gt; convenient resolution that was universally acknowledged to be &lt;em&gt;beyond&lt;/em&gt; the capabilities of NTSC and PAL TVs.  But it still encoded the picture in a format that had a lower chrominance resolution than luminance - it uses &lt;a href=&quot;https://en.wikipedia.org/wiki/Chroma_subsampling#4:2:0&quot; rel=&quot;noreferrer&quot;&gt;4:2:0&lt;/a&gt; subsampling, which actually has less resolution in the vertical direction than a TV signal has (although it probably has more in the horizontal direction).&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-03-21T19:12:23.373" LastActivityDate="2018-03-21T19:12:23.373" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6037" PostTypeId="2" ParentId="6035" CreationDate="2018-03-21T18:06:45.450" Score="8" Body="&lt;p&gt;Not sure if you should call it an advantage, but the Apple II used the double color clock frequency to create colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider two bit patterns,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0101010101&#xA;1010101010&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On a monochrome display, they represent just a dotted pattern. On a color display, you have a signal with the frequency of the color clock, but with a &lt;em&gt;different phase&lt;/em&gt;. And the phases produce colors, so you get different colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The downside is that you can't assign colors to single pixels this way; it's the &lt;strong&gt;combination&lt;/strong&gt; of pixels that makes the color. Another downside is that you can't have black-white transitions anymore, these get the typical &quot;color fringes&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple goes even further, and uses one bit per seven pixels to allow another phase shift (90 degrees on top of the 180 degrees you get from the patterns), this way you get four colors, plus black and white.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is all you get in hires... (on an Apple II)&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-03-21T18:06:45.450" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6038" PostTypeId="2" ParentId="6029" CreationDate="2018-03-21T18:19:35.753" Score="1" Body="&lt;p&gt;A good metric of whether PCs still exist might be whether such a computer can run MS-DOS (or better, the successor OpenDOS which is actually still maintained).  The answer for many of the computers we have in front of us right now would be yes.  (There would be some hardware incompatibilities, as DOS drivers don't exist for a lot of hardware, but the machines would run, and some software could be loaded and executed.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other posters have clarified on the differences between the XT and the AT.  I have always casually thought of the XT as 8088/8086-class machines and the AT as being 80286-class machines, and if that's a reasonable line of thinking (and I think it is), anything 80386-based and newer stopped being a PC AT, even if it would satisfactorily run AT software.  (Bear in mind that the actual AT ran almost all XT software just fine, too.)&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2018-03-21T18:19:35.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6039" PostTypeId="2" ParentId="6035" CreationDate="2018-03-21T19:29:48.093" Score="9" Body="&lt;h1&gt;Short Answer:&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;There is no relation.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;What seems like a relaiton is non related coincidence.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Long Answer:&lt;/h1&gt;&#xA;&lt;p&gt;First of all, there is no colour clock. The mentioned frequency of 3.58 MHz is &lt;strong&gt;not&lt;/strong&gt; a colour clock, but the carrier frequency used to &lt;strong&gt;modulate&lt;/strong&gt; the encoded colour signal atop the basic B&amp;amp;W signal. There is no relation to RAM speed, pixel generation or alike. Especially nothing that needs to be adjusted to this clock, either direct or in any multiple thereof.&lt;/p&gt;&#xA;&lt;p&gt;Computers are digital and use digital clocking. TV isn't.&lt;/p&gt;&#xA;&lt;p&gt;The reason why this frequency is used that often in home computers is simple: cost. A 3.58 MHz crystal is &lt;em&gt;dirt cheap&lt;/em&gt; compared to more 'logical' values. And that's not just by some pennies. They where the single most produced value. For example, in 1980 (just checked some magazines) a 4 MHz crystal (and next to any other) was around 4-5 USD, while a 3.58 MHz could be acquired at 0.87 USD. That's quite a lot to be saved for a mere 10% less speed.&lt;/p&gt;&#xA;&lt;p&gt;Further, depending on the kind of video generation, the 3.58 MHz were needed to encode the colour signal. So instead of having two crystals, one for CPU and Memory, the other for signal generation, one was sufficient - saving even more.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Technical background: &lt;em&gt;lines and pixel&lt;/em&gt;, and &lt;em&gt;resolution vs. colour&lt;/em&gt;.&lt;/h1&gt;&#xA;&lt;p&gt;The colour signal in itself doesn't define any pixels, as it again is analogue. The colour carrier frequency is about 227.5 times the line frequency. Together with a usable line length of 52/64 this gives ~185 complete colour changes. In a digital system this would be the same as a maximum of 370 'colour' pixels.&lt;/p&gt;&#xA;&lt;p&gt;Now colour is just some frosting atop a b&amp;amp;w base signal. This signal gives us the intensity of a spot and is again analogue. There is no pixelation. Sure, on Y a 'pixel' is formed by the lines used to draw the picture. So while this makes discrete steps along the vertical, horizontally any stepping between 1 (one pixel per line) and infinite is possible (*1). Due to analogue available bandwidth in a real world transmission system it's for all existing (classic) TV systems on this planet less than 320 vertical lines (*2). In today's terms that may be described as 640 pixels. In reality there are usually less than 550 usable.&lt;/p&gt;&#xA;&lt;p&gt;So if we really want to talk about &lt;strong&gt;what amount of pixels is possible&lt;/strong&gt;, we need to take both numbers into account. Up to ~370 distinct, non interacting colour positions and up to ~550 distinct B&amp;amp;W positions are possible. As a result any system producing with up to 370 pixel can be displayed on a TV based CRT system. Each of these pixels will be able to have any (displayable) colour at any (possible) intensity (*3).&lt;/p&gt;&#xA;&lt;p&gt;With more than ~370 pixels per line, a classic colour TV will no longer be able to guarantee a distinct colour to each pixel. For example an orange pixel next to a yellow pixel might, even at 500 pixels per line, still come out well defined, while a blue instead will tend to look more like green. Now it depends on one pixel ahead if it will become blue over time or not. A sequence of blue and yellow dots will look like bluish green and yellowish green instead.&lt;/p&gt;&#xA;&lt;p&gt;(No, this is not the (in)famous NTSC colour bleeding, though looking similar.)&lt;/p&gt;&#xA;&lt;p&gt;(It also isn't the restriction of adjacent colours on an Apple II, as this is given through the encoding used by Woz.)&lt;/p&gt;&#xA;&lt;p&gt;So, long story short: &lt;strong&gt;there is no direct relation between pixel clock, memory clock and colour carrier.&lt;/strong&gt; If at all, it's within design decisions taken by whoever made a computer following certain design goals - usually price, thus reduction of components.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Okay, the X resolution is limited by the upper frequency the electron beam can be modulated, and even before that by the upper frequency the television signal allows. As a third limiter, usually somewhere in between, the colour mask further limits arbitrary changes.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Horizontal resolution is described in classic analogue TV as the number of vertical black lines on a white background that still can be displayed. Or in other words, that (sine) signal which still can be encoded as full transition between minimum and maximum intensity - which happens to be exactly the frequency assigned to a channel. For most TV systems something between 4 and 6 MHz&lt;/p&gt;&#xA;&lt;p&gt;*3 - Well, since an analogue signal can not flip from on state to the exact opposite in zero time, there will be, in both cases (colour and intensity) border effects, which will become more and more visible as frequency (changes) close in to maximum distance and maximum frequency.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-22T22:28:07.903" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6040" PostTypeId="2" ParentId="6035" CreationDate="2018-03-21T20:01:17.787" Score="19" Body="&lt;p&gt;I think you're conflating a few issues:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;being in-phase with the colour subcarrier;&lt;/li&gt;&#xA;&lt;li&gt;being sampled at a rate less than or equal to the colour subcarrier; and&lt;/li&gt;&#xA;&lt;li&gt;being sampled at an integer division of the colour subcarrier.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Being in-phase has exactly one effect: the artefacts on horizontal edges are consistent from one line to the next. The edges do not demonstrate chroma crawl.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being at a rate less than or equal to the colour subcarrier also has exactly one effect: the true colour is going to be displayed somewhere, at least instantaneously, for each pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being at any integer divisor of the colour clock rate buys a third separate advantage: the pixel looks identical no matter where you put it on the display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nothing you can do is going to get you sharp pixels. All you're doing is picking which sort of artefacts you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you buy yourself a substantial disadvantage for being in-phase: NTSC signals are not normally in-phase &lt;em&gt;by careful design&lt;/em&gt;. Being 50% out of phase makes the colour subcarrier's interference with the luminance signal &lt;em&gt;much less visible&lt;/em&gt;. This stems from the original design requirement that a colour signal be viewable on an unfiltered black and white set from before the specification of colour without undue ugliness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You buy yourself a substantial disadvantage for being less than or equal to the colour subcarrier frequency: low-resolution graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also buy yourself at least two substantial disadvantage if you optimise for being exactly on the colour subcarrier: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;your allegation that adding luminance information above and beyond the colour subcarrier frequency doesn't have a visible effect becomes true because the information you can add gets trapped in the vestigial parts of the subcarrier filtering. The actual rule is that with real-life filters, luminance information is liable to be lost only exactly when it is a multiple or divisor of the colour subcarrier — a comb filter is often considered the gold standard for chroma/luma separation and it has that name &lt;em&gt;exactly because&lt;/em&gt; its frequency domain response graph spikes at integer intervals; and&lt;/li&gt;&#xA;&lt;li&gt;you've optimised for something that isn't actually a constant supposing you ever want to ship in a PAL country.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A chip you didn't mention is the Texas Instruments TMS 9918, which is in-phase but uses a non-integer divisor of the colour subcarrier (specifically, each pixel is 2/3rds of an NTSC cycle long). TI considered the constancy of horizontal colour artefacts &lt;a href=&quot;http://spatula-city.org/~im14u2c/vdp-99xx/e1/Message_on_Modification_to_9918_from_1982.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;to be a bug not a feature&lt;/em&gt;&lt;/a&gt;, dubbing it the rainbow effect. The linked memo shows a suggested modification that switches to ordinary chroma crawl. The non-engineers were apparently filing it as a bug report.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to summarise, if you are at exactly the colour subcarrier rate:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you look much worse on old and/or cheap black and white sets that don't filter the chroma, which the NTSC spec says they shouldn't have to;&lt;/li&gt;&#xA;&lt;li&gt;you lose the fine luminance information as a simple practical consequence of the frequency response of ordinary separation filters;&lt;/li&gt;&#xA;&lt;li&gt;except in PAL countries of course, where all the software you optimised for the results of your decision suddenly has the opposite design decision. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And to throw in a bonus argument of lesser weight: the SCART connector dates from the '70s. Even by 1982 all but the very cheapest European micros offered full RGB output — cf. the Oric or the Electron. Fixating on the subset of users that have a magically clean RF connection or a TV with composite connectors but not a SCART or S-Video socket isn't a very long-sighted strategy.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-03-22T13:25:13.297" LastActivityDate="2018-03-22T13:25:13.297" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6041" PostTypeId="1" AcceptedAnswerId="6056" CreationDate="2018-03-21T23:12:43.113" Score="3" ViewCount="622" Body="&lt;p&gt;I'm trying to get the ay-3-8913 sound chip to work with my z80 but so far I haven't gotten any sound output yet. I know the chip, my amp circuit and the clock circuit work because it works when I connect it to my Arduino and run a program I found on the internet. I have tried running my z80 at 9.6MHz, 4.8MHz, 2.4MHz, 1.2MHz and 0.6MHz with no success. I've got the CS pin going to my pld which enables it when the address bus is in the correct range and when the IORQ is active and I've checked this is working, I have the BC1 going to A1 and BDIR going to A0 but I've also tried wiring BDIR to RD with no success.&#xA;This is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;test_ay3891x:&#xA;write_reg: macro LT VALUE ; LT=LocaTion &#xA;ld bc,AY3891X_LOCATION+0x3&#xA;ld a,LT&#xA;out (c),a&#xA;ld bc,AY3891X_LOCATION+0x2&#xA;ld a,VALUE&#xA;out (c),a&#xA;endm&#xA;&#xA;write_reg  0 0x28&#xA;write_reg  1 0x02&#xA;write_reg  2 0xee &#xA;write_reg  3 0x0e &#xA;write_reg  4 0xdb&#xA;write_reg  5 0x01&#xA;write_reg  6 0x1f&#xA;write_reg  7 0x2a&#xA;write_reg  8 0x0e&#xA;write_reg  9 0x00&#xA;write_reg 10 0x00&#xA;write_reg 11 0x00&#xA;write_reg 12 0x00&#xA;write_reg 13 0x00&#xA;ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I also have this in my config file &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;AY3891X_LOCATION: equ 0000000000010000B&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've tried setting those registers with my arduino and it does work so i know the values are right and they produce a tone, they are just not getting to the ay-3-8913 :(&#xA;what could be wrong with my setup?&#xA;&lt;a href=&quot;https://i.imgur.com/vOHuwaW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/vOHuwaW.png&quot; alt=&quot;schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7356" LastEditorUserId="7356" LastEditDate="2018-03-22T23:53:59.660" LastActivityDate="2018-03-22T23:53:59.660" Title="Can't get the AY-3-8913 sound chip to work with my z80 (added schematic)" Tags="&lt;hardware&gt;&lt;z80&gt;&lt;homemade&gt;&lt;sound&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6042" PostTypeId="1" AcceptedAnswerId="6043" CreationDate="2018-03-22T02:26:35.403" Score="7" ViewCount="3389" Body="&lt;p&gt;I picked up a Commodore 64 with about 1,500 floppy disks. Many of them are de-magnetised and there is currently only one disk I can run (been through about 100, I can see the files of 2 or 3 disks, but they don't load). I have ordered an old 5.25&quot; drive for the PC and I also bought a C64 to PC transfer cable.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Can the information be recovered? If so, what is the best software?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is there software to read all the accessible data, then rewrite the disk to recover it. Also, is there 1-click solution to save time?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are the disks still usable if I format and put the .d64 games on the disks? I do know about covering the sides of the disk to make them read only.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is there anything I should know when formatting?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is my first time doing anything like this.&lt;/p&gt;&#xA;" OwnerUserId="8261" LastEditorDisplayName="user39" LastEditDate="2019-02-02T08:39:34.553" LastActivityDate="2019-02-02T08:39:34.553" Title="Recovering old Commodore 5.25&quot; floppy disks" Tags="&lt;commodore-64&gt;&lt;floppy-disk&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6043" PostTypeId="2" ParentId="6042" CreationDate="2018-03-22T03:38:01.343" Score="2" Body="&lt;p&gt;I highly recommend The Star Commander.  It's a little tricky to get up and running but once you have the PC, cable, and 1541 all connected, you can transfer d64 images directly to floppy for use on your C64. If you're like me, half the fun is getting stuff to work... Anyway, you can check out the Star Commander web page here &lt;a href=&quot;http://sta.c64.org/sc.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://sta.c64.org/sc.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your disks may still be usable.  I've been imaging my disks from high school (30 year old floppies) with great success, but as I understand it, the magnetic media will eventually degrade and become unusable.  All you can do is try...&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2018-03-22T03:38:01.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6044" PostTypeId="2" ParentId="6042" CreationDate="2018-03-22T04:34:56.257" Score="11" Body="&lt;p&gt;Most likely it's not the disks that are bad but the drive. Try to get your hands on another 1541, 1570 or 1571 drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;old 5.25&quot; drive for the PC&lt;/em&gt; won't help you anything, as the Commodore drives have a special format at the bit level (GCR at four speeds, depending on the track number) which can only be read by those Commodore drives. PC drives use the MFM format at a single speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can connect a 1541, 1570 or 1571 drive to your PC through a &lt;a href=&quot;https://www.c64-wiki.de/wiki/X1541&quot; rel=&quot;noreferrer&quot;&gt;wiring adapter&lt;/a&gt; plus a standard USB&amp;lt;-&gt;Parport adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you just wanted to &quot;save&quot; those old games, it's not worth the effort – there are enough websites which have those already in their archives.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastEditorUserId="3459" LastEditDate="2018-03-22T14:03:50.700" LastActivityDate="2018-03-22T14:03:50.700" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6045" PostTypeId="1" CreationDate="2018-03-22T05:09:08.370" Score="20" ViewCount="9350" Body="&lt;p&gt;Can modern AI be used to program impressive graphics effects on very low performance home-retrocomputers, in particular  'A 3D-rotating-cube',  effects that would be too difficult for a human to program on the cheapest machines&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(  The time-range of the home-retrocomputers I'm refering to is approximately from 1975-1985 )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE : So I'm using 'A 3D-rotating-cube',  rotating / displaying,  satisfactorily,  as a type of benchmark of achievement to be achieved on very low performance home-retrocomputers( from 1975-1985 ), on many of these machines it seems impossible to satisfactorily achieve this effect on,  so therefore I am wondering if modern AI could succeed in the challenge( where humans have failed )&lt;/p&gt;&#xA;" OwnerUserId="8263" LastEditorUserId="8263" LastEditDate="2018-03-22T21:46:10.967" LastActivityDate="2018-03-24T22:58:42.220" Title="Can modern AI be used to program impressive graphics effects on very low performance home-retrocomputers, in particular 'A 3D-rotating-cube'" Tags="&lt;graphics&gt;" AnswerCount="9" CommentCount="22" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6046" PostTypeId="2" ParentId="6045" CreationDate="2018-03-22T05:26:27.160" Score="-2" Body="&lt;p&gt;A genetic algorithm paired with machine vision for feedback should be able to do the job.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-03-22T05:26:27.160" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="6047" PostTypeId="1" CreationDate="2018-03-22T06:08:36.917" Score="1" ViewCount="329" Body="&lt;p&gt;Didn't people 'back in the day', ever try 'Object-Tracking'( combined with RC ), via their retrocomputers, as 'Home-Projects'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(  I'm referring to a time range from say 1975 to 1985 )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(  Also, if there have been any modern attempts by using 'only' equipment available back then, then they should also qualify )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am referring to the following scenario( although some variation is OK ) :&lt;br&gt;&#xA;Your retrocomputer controls an RC-car, but because of wheel-slippage, the postion of the car on the computers map, does not match the position of the car on the actual floor-area meant to represent the computer's map .&lt;br&gt;&#xA;So, you would want to construct radio-signal-direction-detectors, or audio-signal-direction-detectors, or light-signal-direction-detectors, and have a signal-emitter on the RC-car, and then use 'triangulation' to determine the position of the car, or, use any other method to determine the actual position of the car on the floor .&lt;br&gt;&#xA;( obviously, this would allow you to point to any position on the computer's map where you would like the car to be, and the computer would be able to guide the car to that exact position, via steering and speed adjustments, just like in simple video-games where you played against an AI )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have never found any evidence that anyone ever tried this 'back in the day' as a 'Home-Project', and yet you'd think that for many people it would have been a main reason for buying a computer back then&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, does anyone know of any attempted 'Home-Projects' fitting this description 'back in the day', although, if there have been any modern attempts by using 'only' equipment available back then, then they should also qualify .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;( I can see that this question will not be allowed as it is too general etc, can any skilled moderator find an acceptable way of editing it to make it an allowed question )&lt;/p&gt;&#xA;" OwnerUserId="8263" LastEditorUserId="8263" LastEditDate="2018-03-22T20:20:46.407" LastActivityDate="2018-03-22T20:20:46.407" Title="Didn't people 'back in the day', ever try 'Object-Tracking'( combined with RC ), via their retrocomputers, as 'Home-Projects'" Tags="&lt;hardware&gt;" AnswerCount="2" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="6048" PostTypeId="2" ParentId="6045" CreationDate="2018-03-22T06:48:46.790" Score="25" Body="&lt;p&gt;This is perhaps obvious, but AI isn’t magic. This has two relevant consequences here: it can’t add new hardware capabilities, and it can’t find techniques which humans absolutely couldn’t.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What “AI” is good at is trying lots of things, fast, without getting bored. So it can try lots of different ways of implementing an algorithm, in the hope of finding one which is better than anything we’ve come up with so far (this is called super-optimisation). It can also try to find simplifications of a given algorithm or implementation which don’t have too bad effects on the result; this might be the most useful approach to find ways of doing “impossible” tasks on a retro-computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both cases the typical technique we’d use is known as genetic programming, or genetic algorithms: you view algorithms as a sort of DNA, and mutate and combine different DNA strands (algorithm implementations) to try to find one which has a lower “cost” (in this case, runs faster) while still producing the desired output. Evaluating the output &lt;em&gt;could&lt;/em&gt; involve machine vision, although using humans would likely produce more pleasing results (albeit with the speed and boredom issues alluded to above).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, don’t expect miracles — you won’t go from &lt;a href=&quot;https://www.youtube.com/watch?v=QyAngaNVx5Q&quot; rel=&quot;noreferrer&quot;&gt;Alley Cat&lt;/a&gt; to &lt;a href=&quot;https://www.youtube.com/watch?v=hNRO7lno_DM&quot; rel=&quot;noreferrer&quot;&gt;8088 MPH&lt;/a&gt; using AI...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-03-22T14:12:40.203" LastActivityDate="2018-03-22T14:12:40.203" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6049" PostTypeId="2" ParentId="6045" CreationDate="2018-03-22T08:13:05.697" Score="51" Body="&lt;p&gt;Modern AI on its own is not really advanced enough to be able to make a meaningful difference in this sense. However, there are many situations where the massive asymmetry between computational capabilities of modern computers and computational capabilities of the old computers can be exploited in ways that were not feasible decades ago.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, some types of modern AI are driven by, effectively, optimization algorithms (genetic algorithms etc). So, what if you use some vastly inefficient rendering strategies on old computers, but guide them by optimizing the results of their rendering by a modern computer? This gives you a vastly non-symmetric compression schemes, which were for example exploited by demoscener ilmenit who got his Atari XL/XE to generate this image&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pf3Vs.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pf3Vs.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using 128 bytes of data and less then 128 bytes of code. (You can read more about this, as well as find a link to the video recording, on &lt;a href=&quot;http://www.pouet.net/prod.php?which=62917&quot; rel=&quot;noreferrer&quot;&gt;Pouet&lt;/a&gt;.) I personally was so inspired by this demo that I created my own kind of a similar asymmetric compression scheme; you can, if you want, have a look at it &lt;a href=&quot;http://www.pouet.net/prod.php?which=63074&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my answer is yes, people do exploit the difference in processing power to create programs for retrocomputers that were not feasible before. However, I think that although the computational techniques to achieve this are often not dissimilar from the methods used for AI, most of the people doing asymmetric schemes of this kind would probably refuse to call them AI (and rightly so).&lt;/p&gt;&#xA;" OwnerUserId="5039" LastActivityDate="2018-03-22T08:13:05.697" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="6050" PostTypeId="2" ParentId="6047" CreationDate="2018-03-22T09:58:22.523" Score="4" Body="&lt;p&gt;Back when I was young (in the early 80's and still interested in computer shows, a feature of every major show would be a &lt;a href=&quot;https://en.wikipedia.org/wiki/Micromouse&quot; rel=&quot;nofollow noreferrer&quot;&gt;micromouse&lt;/a&gt; competition. The robots that used to compete didn't have radio control but were actually fully autonomouse. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A micromouse consisted of a motorised chassis, some sensors to tell the mouse where the walls are (usually infra red in those days IIRC) and a &quot;brain&quot; which would be a computer. When I first started watching, these werer often custom made because there were no off the shelf computers small enough to fit onto the chassis. However, after the appearance of the Sinclair ZX80, that all changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These don't strictly fit the criteria of your question , but it does show that people were thinking in terms of adding spacial awareness to things like R/C cars.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2018-03-22T09:58:22.523" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6051" PostTypeId="1" AcceptedAnswerId="6054" CreationDate="2018-03-22T10:33:26.270" Score="8" ViewCount="1080" Body="&lt;p&gt;I just discovered the fun of writing small programs (Basic/asm) for an emulated C64 for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, I cannot get used to the emulated C64 keybord, and would like to write the programs on the Host-PC (Linux or Windows, doesn't matter) instead, and simply load them to the emulator&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know an easy way to do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Or an emulator that simply accepts copy/paste of text dragged onto it?)&lt;/p&gt;&#xA;" OwnerUserId="5139" LastEditorUserId="6576" LastEditDate="2018-05-09T00:26:57.033" LastActivityDate="2021-01-25T15:08:49.303" Title="How to transfer files to C64 emulator quickly" Tags="&lt;commodore-64&gt;&lt;emulation&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6053" PostTypeId="2" ParentId="6012" CreationDate="2018-03-22T13:13:20.733" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What's involved with installing it and testing it? &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;How difficult would it be to deploy?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;On Debian: &lt;code&gt;apt-get install uucp&lt;/code&gt; and there are related packages &lt;code&gt;uucp-lmtp&lt;/code&gt; (lets you send using UUCP via local SMTP server) and &lt;code&gt;uucpsend&lt;/code&gt; (I suppose that is for sending files).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UUCP wants to contact systems (and receive contact) through a serial port that doesn't have PPP running, optionally by dialing first - dialing is accomplished by sending &lt;code&gt;AT&lt;/code&gt; style commands through the serial port.  These are in a &lt;code&gt;dial&lt;/code&gt; file.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each UUCP involved system needs a &lt;code&gt;getty&lt;/code&gt; running on the serial port for UUCP to log in and its login shell must be &lt;code&gt;/bin/uucico&lt;/code&gt;.  You will need to fiddle with &lt;code&gt;inittab&lt;/code&gt; or &lt;code&gt;systemd&lt;/code&gt; configuration if the &lt;code&gt;uucp&lt;/code&gt; installer doesn't do this automatically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For testing, you can:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;connect 2 systems with a serial port via null modem cable and use a blank &lt;code&gt;dial&lt;/code&gt; file (no modem = no dialing needed) I think -&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;have something that looks like a serial port to &lt;code&gt;uucp&lt;/code&gt; and converts it to TCP/IP.  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Not sure of anything that works as a locally installed program.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can use a second system connected via null-modem serial that takes incoming data from the serial port and forwards it over a socket.  The receiving system will need a matching second system.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I might be wrong and UUCP might actually support TCP/IP somewhere.  &lt;/p&gt;&#xA;" OwnerUserId="746" LastActivityDate="2018-03-22T13:13:20.733" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6054" PostTypeId="2" ParentId="6051" CreationDate="2018-03-22T14:58:11.000" Score="7" Body="&lt;p&gt;You can use petcat utility supplied with VICE emulator. Below is a .bat script which is smiliar to what I am using on my Windows machine.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SET VICE_PATH=&quot;C:\Program files\WinVICE\&quot;&#xA;&#xA;%VICE_PATH%\petcat -2 -o outfile.prg -- input.txt&#xA;&#xA;IF %ERRORLEVEL%==0 %VICE_PATH%\x64 outfile.prg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Of course a smiliar script can be written for Linux/BSD in bash.   &lt;/p&gt;&#xA;" OwnerUserId="3422" LastActivityDate="2018-03-22T14:58:11.000" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6055" PostTypeId="2" ParentId="6045" CreationDate="2018-03-22T15:24:18.607" Score="4" Body="&lt;p&gt;hmm why &lt;strong&gt;AI&lt;/strong&gt; I think that might be much more work to code an learn &lt;strong&gt;AI&lt;/strong&gt; to do something like that than write it on your own...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I usually use different approach. If the stuff I need to code gets hideous then I simply write a a small program that will create the source code for me. The same goes for data tables etc. For example this was coded by &lt;strong&gt;C++&lt;/strong&gt; on &lt;strong&gt;PC&lt;/strong&gt; but runs on &lt;strong&gt;AVR32&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8ZM6w.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8ZM6w.jpg&quot; alt=&quot;MCU2VGA&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;MCU&lt;/strong&gt; simply generate VGA image signal by using &lt;strong&gt;SDRAM&lt;/strong&gt; interface and &lt;strong&gt;DMA&lt;/strong&gt; the circuit consist just from &lt;strong&gt;MCU&lt;/strong&gt; few resistors capacitors and diodes stabilizator and crystal. The image is hard-coded as &lt;strong&gt;C++&lt;/strong&gt; source generated by the script I mentioned before (some of you can recognize it as a loading screen from one &lt;strong&gt;ZX&lt;/strong&gt; game).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another example of this approach is auto generated code/templates I use for &lt;strong&gt;GLSL&lt;/strong&gt; code running on &lt;strong&gt;CPU&lt;/strong&gt; (also coded on &lt;strong&gt;CPU&lt;/strong&gt;). Here vec2 template example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;template &amp;lt;class T&amp;gt; class _vec2&#xA;    {&#xA;public:&#xA;    T dat[2];&#xA;    _vec2(T _x,T _y) { x=_x; y=_y; }&#xA;    _vec2() { for (int i=0;i&amp;lt;2;i++) dat[i]=0; }&#xA;    _vec2(const _vec2&amp;amp; a) { *this=a; }&#xA;    ~_vec2() {}&#xA;    // 1D&#xA;    T get_x() { return dat[0]; } void set_x(T q) { dat[0]=q; }&#xA;    T get_y() { return dat[1]; } void set_y(T q) { dat[1]=q; }&#xA;    __declspec( property (get=get_x, put=set_x) ) T x;&#xA;    __declspec( property (get=get_y, put=set_y) ) T y;&#xA;    __declspec( property (get=get_x, put=set_x) ) T r;&#xA;    __declspec( property (get=get_y, put=set_y) ) T g;&#xA;    __declspec( property (get=get_x, put=set_x) ) T s;&#xA;    __declspec( property (get=get_y, put=set_y) ) T t;&#xA;    // 2D&#xA;    _vec2&amp;lt;T&amp;gt; get_xy() { return _vec2&amp;lt;T&amp;gt;(x,y); } void set_xy(_vec2&amp;lt;T&amp;gt; q) { x=q.x; y=q.y; }&#xA;    _vec2&amp;lt;T&amp;gt; get_yx() { return _vec2&amp;lt;T&amp;gt;(y,x); } void set_yx(_vec2&amp;lt;T&amp;gt; q) { y=q.x; x=q.y; }&#xA;    __declspec( property (get=get_xy, put=set_xy) ) _vec2&amp;lt;T&amp;gt; xy;&#xA;    __declspec( property (get=get_xy, put=set_xy) ) _vec2&amp;lt;T&amp;gt; xg;&#xA;    __declspec( property (get=get_xy, put=set_xy) ) _vec2&amp;lt;T&amp;gt; xt;&#xA;    __declspec( property (get=get_yx, put=set_yx) ) _vec2&amp;lt;T&amp;gt; yx;&#xA;    __declspec( property (get=get_yx, put=set_yx) ) _vec2&amp;lt;T&amp;gt; yr;&#xA;    __declspec( property (get=get_yx, put=set_yx) ) _vec2&amp;lt;T&amp;gt; ys;&#xA;    __declspec( property (get=get_xy, put=set_xy) ) _vec2&amp;lt;T&amp;gt; ry;&#xA;    __declspec( property (get=get_xy, put=set_xy) ) _vec2&amp;lt;T&amp;gt; rg;&#xA;    __declspec( property (get=get_xy, put=set_xy) ) _vec2&amp;lt;T&amp;gt; rt;&#xA;    __declspec( property (get=get_yx, put=set_yx) ) _vec2&amp;lt;T&amp;gt; gx;&#xA;    __declspec( property (get=get_yx, put=set_yx) ) _vec2&amp;lt;T&amp;gt; gr;&#xA;    __declspec( property (get=get_yx, put=set_yx) ) _vec2&amp;lt;T&amp;gt; gs;&#xA;    __declspec( property (get=get_xy, put=set_xy) ) _vec2&amp;lt;T&amp;gt; sy;&#xA;    __declspec( property (get=get_xy, put=set_xy) ) _vec2&amp;lt;T&amp;gt; sg;&#xA;    __declspec( property (get=get_xy, put=set_xy) ) _vec2&amp;lt;T&amp;gt; st;&#xA;    __declspec( property (get=get_yx, put=set_yx) ) _vec2&amp;lt;T&amp;gt; tx;&#xA;    __declspec( property (get=get_yx, put=set_yx) ) _vec2&amp;lt;T&amp;gt; tr;&#xA;    __declspec( property (get=get_yx, put=set_yx) ) _vec2&amp;lt;T&amp;gt; ts;&#xA;    // operators&#xA;    _vec2* operator = (const _vec2 &amp;amp;a) { for (int i=0;i&amp;lt;2;i++) dat[i]=a.dat[i]; return this; }                              // =a&#xA;    T&amp;amp; operator [](const int i)     { return dat[i]; }                                                                      // a[i]&#xA;    _vec2&amp;lt;T&amp;gt; operator + ()          { return *this; }                                                                       // +a&#xA;    _vec2&amp;lt;T&amp;gt; operator - ()          { _vec2&amp;lt;T&amp;gt; q;       for (int i=0;i&amp;lt;2;i++) q.dat[i]=      -dat[i];           return q; } // -a&#xA;    _vec2&amp;lt;T&amp;gt; operator ++ ()         {                   for (int i=0;i&amp;lt;2;i++)                 dat[i]++;     return *this; } // ++a&#xA;    _vec2&amp;lt;T&amp;gt; operator -- ()         {                   for (int i=0;i&amp;lt;2;i++)                 dat[i]--;     return *this; } // --a&#xA;    _vec2&amp;lt;T&amp;gt; operator ++ (int)      { _vec2&amp;lt;T&amp;gt; q=*this; for (int i=0;i&amp;lt;2;i++)                 dat[i]++;         return q; } // a++&#xA;    _vec2&amp;lt;T&amp;gt; operator -- (int)      { _vec2&amp;lt;T&amp;gt; q=*this; for (int i=0;i&amp;lt;2;i++)                 dat[i]--;         return q; } // a--&#xA;&#xA;    _vec2&amp;lt;T&amp;gt; operator + (_vec2&amp;lt;T&amp;gt;&amp;amp;v){ _vec2&amp;lt;T&amp;gt; q;       for (int i=0;i&amp;lt;2;i++) q.dat[i]=       dat[i]+v.dat[i];  return q; } // a+b&#xA;    _vec2&amp;lt;T&amp;gt; operator - (_vec2&amp;lt;T&amp;gt;&amp;amp;v){ _vec2&amp;lt;T&amp;gt; q;       for (int i=0;i&amp;lt;2;i++) q.dat[i]=       dat[i]-v.dat[i];  return q; } // a-b&#xA;    _vec2&amp;lt;T&amp;gt; operator * (_vec2&amp;lt;T&amp;gt;&amp;amp;v){ _vec2&amp;lt;T&amp;gt; q;       for (int i=0;i&amp;lt;2;i++) q.dat[i]=       dat[i]*v.dat[i];  return q; } // a*b&#xA;    _vec2&amp;lt;T&amp;gt; operator / (_vec2&amp;lt;T&amp;gt;&amp;amp;v){ _vec2&amp;lt;T&amp;gt; q;       for (int i=0;i&amp;lt;2;i++) q.dat[i]=divide(dat[i],v.dat[i]); return q; } // a/b&#xA;&#xA;    _vec2&amp;lt;T&amp;gt; operator + (const T &amp;amp;c){ _vec2&amp;lt;T&amp;gt; q;       for (int i=0;i&amp;lt;2;i++) q.dat[i]=dat[i]+c;                return q; } // a+c&#xA;    _vec2&amp;lt;T&amp;gt; operator - (const T &amp;amp;c){ _vec2&amp;lt;T&amp;gt; q;       for (int i=0;i&amp;lt;2;i++) q.dat[i]=dat[i]-c;                return q; } // a-c&#xA;    _vec2&amp;lt;T&amp;gt; operator * (const T &amp;amp;c){ _vec2&amp;lt;T&amp;gt; q;       for (int i=0;i&amp;lt;2;i++) q.dat[i]=dat[i]*c;                return q; } // a*c&#xA;    _vec2&amp;lt;T&amp;gt; operator / (const T &amp;amp;c){ _vec2&amp;lt;T&amp;gt; q;       for (int i=0;i&amp;lt;2;i++) q.dat[i]=divide(dat[i],c);        return q; } // a/c&#xA;&#xA;    _vec2&amp;lt;T&amp;gt; operator +=(_vec2&amp;lt;T&amp;gt;&amp;amp;v){ this[0]=this[0]+v; return *this; };&#xA;    _vec2&amp;lt;T&amp;gt; operator -=(_vec2&amp;lt;T&amp;gt;&amp;amp;v){ this[0]=this[0]-v; return *this; };&#xA;    _vec2&amp;lt;T&amp;gt; operator *=(_vec2&amp;lt;T&amp;gt;&amp;amp;v){ this[0]=this[0]*v; return *this; };&#xA;    _vec2&amp;lt;T&amp;gt; operator /=(_vec2&amp;lt;T&amp;gt;&amp;amp;v){ this[0]=this[0]/v; return *this; };&#xA;&#xA;    _vec2&amp;lt;T&amp;gt; operator +=(const T &amp;amp;c){ this[0]=this[0]+c; return *this; };&#xA;    _vec2&amp;lt;T&amp;gt; operator -=(const T &amp;amp;c){ this[0]=this[0]-c; return *this; };&#xA;    _vec2&amp;lt;T&amp;gt; operator *=(const T &amp;amp;c){ this[0]=this[0]*c; return *this; };&#xA;    _vec2&amp;lt;T&amp;gt; operator /=(const T &amp;amp;c){ this[0]=this[0]/c; return *this; };&#xA;    // members&#xA;    int length() { return 2; }  // dimensions&#xA;    };&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see the getters setters tend to be hideous to code so (this is just 2D now imagine 4D) the full code for &lt;code&gt;vec&lt;/code&gt; is around 228 KByte of source. Here the script that I generated it with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void _vec_generate(AnsiString &amp;amp;txt,const int n) // generate _vec(n)&amp;lt;T&amp;gt; get/set source code n&amp;gt;=2&#xA;    {&#xA;    int i,j,k,l;&#xA;    int i3,j3,k3,l3;&#xA;    const int n3=12;&#xA;    const char x[n3]=&quot;xyzwrgbastpq&quot;;&#xA;    txt+=&quot;template &amp;lt;class T&amp;gt; class _vec&quot;+AnsiString(n)+&quot;\r\n&quot;;&#xA;    txt+=&quot;\t{\r\n&quot;;&#xA;    for (;;)&#xA;        {&#xA;        if (n&amp;lt;1) break;&#xA;        txt+=&quot;\t// 1D\r\n&quot;;&#xA;        for (i=0;i&amp;lt;n;i++) txt+=AnsiString().sprintf(&quot;\tT get_%c() { return dat[%i]; } void set_%c(T q) { dat[%i]=q; }\r\n&quot;,x[i],i,x[i],i);&#xA;        for (j=0;j&amp;lt;12;j+=4) for (i=0;i&amp;lt;n;i++) txt+=AnsiString().sprintf(&quot;\t__declspec( property (get=get_%c, put=set_%c) ) T %c;\r\n&quot;,x[i],x[i],x[i+j]);&#xA;        if (n&amp;lt;2) break;&#xA;        txt+=&quot;\t// 2D\r\n&quot;;&#xA;        for (i=0;i&amp;lt;n;i++)&#xA;         for (j=0;j&amp;lt;n;j++) if (i!=j)&#xA;            {&#xA;            txt+=AnsiString().sprintf(&quot;\t_vec2&amp;lt;T&amp;gt; get_%c%c() { return _vec2&amp;lt;T&amp;gt;(%c,%c); } &quot;,x[i],x[j],x[i],x[j]);&#xA;            txt+=AnsiString().sprintf(&quot;void set_%c%c(_vec2&amp;lt;T&amp;gt; q) { %c=q.%c; %c=q.%c; }\r\n&quot;,x[i],x[j],x[i],x[0],x[j],x[1]);&#xA;            }&#xA;        for (i=i3=0;i3&amp;lt;n3;i3++,i=i3&amp;amp;3) if (i&amp;lt;n)&#xA;         for (j=j3=0;j3&amp;lt;n3;j3++,j=j3&amp;amp;3) if (j&amp;lt;n) if (i!=j)&#xA;            {&#xA;            txt+=AnsiString().sprintf(&quot;\t__declspec( property (get=get_%c%c, put=set_%c%c) ) _vec2&amp;lt;T&amp;gt; %c%c;\r\n&quot;,x[i],x[j],x[i],x[j],x[i3],x[j3]);&#xA;            }&#xA;        if (n&amp;lt;3) break;&#xA;        txt+=&quot;\t// 3D\r\n&quot;;&#xA;        for (i=0;i&amp;lt;n;i++)&#xA;         for (j=0;j&amp;lt;n;j++) if (i!=j)&#xA;          for (k=0;k&amp;lt;n;k++) if ((i!=k)&amp;amp;&amp;amp;(j!=k))&#xA;            {&#xA;            txt+=AnsiString().sprintf(&quot;\t_vec3&amp;lt;T&amp;gt; get_%c%c%c() { return _vec3&amp;lt;T&amp;gt;(%c,%c,%c); } &quot;,x[i],x[j],x[k],x[i],x[j],x[k]);&#xA;            txt+=AnsiString().sprintf(&quot;void set_%c%c%c(_vec3&amp;lt;T&amp;gt; q) { %c=q.%c; %c=q.%c; %c=q.%c; }\r\n&quot;,x[i],x[j],x[k],x[i],x[0],x[j],x[1],x[k],x[2]);&#xA;            }&#xA;        for (i=i3=0;i3&amp;lt;n3;i3++,i=i3&amp;amp;3) if (i&amp;lt;n)&#xA;         for (j=j3=0;j3&amp;lt;n3;j3++,j=j3&amp;amp;3) if (j&amp;lt;n) if (i!=j)&#xA;          for (k=k3=0;k3&amp;lt;n3;k3++,k=k3&amp;amp;3) if (k&amp;lt;n) if ((i!=k)&amp;amp;&amp;amp;(j!=k))&#xA;            {&#xA;            txt+=AnsiString().sprintf(&quot;\t__declspec( property (get=get_%c%c%c, put=set_%c%c%c) ) _vec3&amp;lt;T&amp;gt; %c%c%c;\r\n&quot;,x[i],x[j],x[k],x[i],x[j],x[k],x[i3],x[j3],x[k3]);&#xA;            }&#xA;        if (n&amp;lt;4) break;&#xA;        txt+=&quot;\t// 4D\r\n&quot;;&#xA;        for (i=0;i&amp;lt;n;i++)&#xA;         for (j=0;j&amp;lt;n;j++) if (i!=j)&#xA;          for (k=0;k&amp;lt;n;k++) if ((i!=k)&amp;amp;&amp;amp;(j!=k))&#xA;           for (l=0;l&amp;lt;n;l++) if ((i!=l)&amp;amp;&amp;amp;(j!=l)&amp;amp;&amp;amp;(k!=l))&#xA;            {&#xA;            txt+=AnsiString().sprintf(&quot;\t_vec4&amp;lt;T&amp;gt; get_%c%c%c%c() { return _vec4&amp;lt;T&amp;gt;(%c,%c,%c,%c); } &quot;,x[i],x[j],x[k],x[l],x[i],x[j],x[k],x[l]);&#xA;            txt+=AnsiString().sprintf(&quot;void set_%c%c%c%c(_vec4&amp;lt;T&amp;gt; q) { %c=q.%c; %c=q.%c; %c=q.%c; %c=q.%c; }\r\n&quot;,x[i],x[j],x[k],x[l],x[i],x[0],x[j],x[1],x[k],x[2],x[l],x[3]);&#xA;            }&#xA;        for (i=i3=0;i3&amp;lt;n3;i3++,i=i3&amp;amp;3) if (i&amp;lt;n)&#xA;         for (j=j3=0;j3&amp;lt;n3;j3++,j=j3&amp;amp;3) if (j&amp;lt;n) if (i!=j)&#xA;          for (k=k3=0;k3&amp;lt;n3;k3++,k=k3&amp;amp;3) if (k&amp;lt;n) if ((i!=k)&amp;amp;&amp;amp;(j!=k))&#xA;           for (l=l3=0;l3&amp;lt;n3;l3++,l=l3&amp;amp;3) if (l&amp;lt;n) if ((i!=l)&amp;amp;&amp;amp;(j!=l)&amp;amp;&amp;amp;(k!=l))&#xA;            {&#xA;            txt+=AnsiString().sprintf(&quot;\t__declspec( property (get=get_%c%c%c%c, put=set_%c%c%c%c) ) _vec4&amp;lt;T&amp;gt; %c%c%c%c;\r\n&quot;,x[i],x[j],x[k],x[l],x[i],x[j],x[k],x[l],x[i3],x[j3],x[k3],x[l3]);&#xA;            }&#xA;        break;&#xA;        }&#xA;    txt+=&quot;\t};\r\n&quot;;&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Half of the core of my &lt;a href=&quot;https://stackoverflow.com/a/18911590/2521214&quot;&gt;Z80 CPU emulator&lt;/a&gt; code is auto-generated this way and is fully configurable from MySQL database dumped to text file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In demo scene was usual to code some effects on better computer or in advance and encode the result so it can be &quot;played&quot; instead of generated in RT on target platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So as you can see there are more easier ways than AI to overcome brick-wall ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastActivityDate="2018-03-22T15:24:18.607" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6056" PostTypeId="2" ParentId="6041" CreationDate="2018-03-22T16:53:30.870" Score="5" Body="&lt;p&gt;Brief look shows that you use [A15:A8] in circuit feeding CS pin; Z80 is having only 256 distinctive ports controlled by OUT command family, thus you must drop [A15:A8] out of the equation. Please look into the Z80 manual/datasheet &lt;a href=&quot;http://www.zilog.com/manage_directlink.php?filepath=docs/z80/um0080&amp;amp;extn=.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, you will find the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The contents of Register C are placed on the bottom half (A0 through A7) of the address bus to select the I/O device at one of 256 possible ports. &lt;strong&gt;The contents of Register B are placed on the top half (A8 through A15) of the address bus at this time.&lt;/strong&gt; Then the byte contained in register r is placed on the data bus and written to the selected peripheral device.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In your current setup you do not need contents of register B. As B is most probably is not zero defined by &lt;code&gt;ld bc,AY3891X_LOCATION+0x3&lt;/code&gt;, your CS signal does not activate.&lt;/p&gt;&#xA;&lt;p&gt;Depending on value of &lt;code&gt;AY3891X_LOCATION&lt;/code&gt; you may just be writing to the wrong port. /CS pins is active low, thus per your current PLD equation correct port range is 010h to 017h (not consideting [A15:A8]).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;that's unfortunatly probably working&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You must make it right, not &lt;em&gt;probably right&lt;/em&gt;? You are lucky that this code works in this configuration; if B will happen to be other than 0 it will stop working.&lt;/p&gt;&#xA;&lt;p&gt;Next, formally you have no output on the /RESET wire. You just connect two inputs on the circuit.&lt;/p&gt;&#xA;&lt;p&gt;You must draw proper circuit diagram, with pin numbers and all connections. I bet you will find a mistake when doing it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I used to use AY8910; this AY8913 is having /CS pin, and there's nothing in the datasheet on the timing of this pin, and there's almost nothing about which event actually writes data into the chip's latch.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;/CHIP SELECT (Input): pin 24 (AY-3-8913 only)&lt;/p&gt;&#xA;&lt;p&gt;This input signal goes low to enable the PSG to read data on the data bus or write data from the data bus to one of the internal registers. For these above operations to occur, this signal must be true in addition to the current bus address being a valid PSG address. This signal must be valid for all read and write operations. This pin has an internal pull down to Vss.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cpcwiki.eu/index.php/Datasheet_AY-8913&quot; rel=&quot;nofollow noreferrer&quot;&gt;Readable web source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There's high probability that /CS signal goes inactive before BDIR and BC1 change (Z80 holds valid address for some time after deactivating /IORQ); thus if we imagine that write to PSG is performed on change of BDIR/BC1 to inactive state, then removing /CS before changing BDIR/BC1 will cancel the write operation.&lt;/p&gt;&#xA;&lt;p&gt;As a test I recommend you to pull /CS low (or leave it unconnected as it has internal pull-down); &lt;s&gt;in your current setup there should be no false positives&lt;/s&gt; no I am wrong here, there will be false positives because A0/A1 reading the ROM will drive PSG malfunction.&lt;/p&gt;&#xA;&lt;p&gt;I am afraid you will have to rewire BDIR/BC1 to the PLD and mix them with IORQ in there so that they go to INQACTIVE state (00) for PSG when IORQ is deactivated.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I still don't understand why it wouldn't work before though. BDIR is always 1 when CS is active so it wouldn't go to INACTIVE (00) right?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Glad that it works now. If you did what I recommended above, you have CS low (always active), and operation of PSG is controlled by the BDIR/BC1 signals. They must be of some specific combination to start operation, and changed to other combination (I guess to 0/0) to finish operation.&lt;/p&gt;&#xA;&lt;p&gt;Thus to latch address you must set BDIR/BC1 to 1/1, and when you switch to 0/0 (inactive mode) it stores the address. To latch register you set them 1/0, and then change to 0/0 and store happens. With read it should be differently, you change from 0/0 to 0/1 and data appears on data pins within specific timeframe.&lt;/p&gt;&#xA;&lt;p&gt;When you had /CS controlled, it was a combination of (/IORQ) OR A3 OR (NOT A4) ..., and was deactivating when /IORQ goes inactive. It happens &lt;strong&gt;before&lt;/strong&gt; A1/A0 (in your case BDIR/BC1) transition from 1/1 or 0/0, thus chip appeared to be deselect &lt;strong&gt;before&lt;/strong&gt; actual write operation is initiated.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-03-22T19:50:52.017" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6057" PostTypeId="2" ParentId="6047" CreationDate="2018-03-22T17:16:01.417" Score="1" Body="&lt;p&gt;I remember having seen a video on Youtube where &lt;em&gt;two&lt;/em&gt; vintage computers (because one would have been to slow) were used to detect position and speed of a marble in this game where you can tilt a wooden board with a kind of maze with two knobs, and make a marble run through it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It had a very crude kind of camera, that basically detect light/dark in a few areas, but that was enough to track the marble.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does that count? (No RC-car involved, sorry).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I find the video, I'll edit the question with the link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also vaguely remember a project for home-computers where you'd use a kind of arm made of some segments, equipped with potentiometers at the links, as a kind of input device for a 2D position. The computer had to do trigonometric calculations to get the coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess with the right mechanics (equip the RC car with some kind of vertical rod, the end of the arm with something with a hole, put the rod through the hole so the arm moves when the car moves) that could have been used to find the position of the car, at least in a limited area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sound-based and radio-based triangulation would have been too difficult because of the time-scales involved, you'd have to do the measurements with quite a bit of extra electronics.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-03-22T17:16:01.417" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6058" PostTypeId="2" ParentId="6042" CreationDate="2018-03-22T17:59:25.370" Score="6" Body="&lt;p&gt;If you are serious about recovering the disk images, I'd try to get a &lt;a href=&quot;https://www.kryoflux.com/&quot; rel=&quot;noreferrer&quot;&gt;Kryoflux&lt;/a&gt; or similar device. With that, you can image your floppy bit for bit, and try to correct any errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course that's a lot of work (no 1-click solution, on the contrary, at least of the floppy contents are damaged), and not cheap, so it may be easier to just download the floppy images from somewhere, and then either transfer them from the PC to the C64, or have the PC serve them with the cable you already ordered.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-03-22T17:59:25.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6059" PostTypeId="1" CreationDate="2018-03-23T00:59:15.680" Score="17" ViewCount="640" Body="&lt;p&gt;Everyone knows how important documentation is -- for a project to grow past a certain point, it's a must-have. However, almost every software project of any size nowadays comes with at least a README file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When did including a README file (specifically with that name) first become commonplace? It appears the &lt;a href=&quot;http://minnie.tuhs.org/cgi-bin/utree.pl?file=1BSD&quot; rel=&quot;noreferrer&quot;&gt;first BSD kernel&lt;/a&gt; had a &quot;READ_ME&quot; file, so it must be pre-1977. But at least in the software packages listed &lt;a href=&quot;http://minnie.tuhs.org/cgi-bin/utree.pl&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, it's not universal.&lt;/p&gt;&#xA;" OwnerUserId="724" LastActivityDate="2019-02-07T09:39:33.313" Title="When did README files start showing up in software?" Tags="&lt;history&gt;&lt;software-development&gt;" AnswerCount="2" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6061" PostTypeId="1" CreationDate="2018-03-23T03:37:12.920" Score="0" ViewCount="313" Body="&lt;p&gt;THE QUESTION&lt;br&gt;&#xA;Which home-retrocomputers had a 1 single-color( no shades ) monochrome mode, or were by default ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EXTRA DETAILS&lt;br&gt;&#xA;(  I'm referring to home-retrocomputers in a time range from say 1976 to 1984 )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(  And even better if they either had no sound-capability, or the sound capability could be turned off, which is a stupid thing to type I know )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;( My reason for asking is that in my opinion, 'maybe',  this is the type of computer that people who were interested in doing 3D animated graphics, e.g. a 3D rotating cube,  should have bought, since I think the graphics-generating-speed 'may' have been faster,  however many experts in this area disagree with this theory )   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE - The moderators put my question on hold for being too broad, and asked me to rewrite it&lt;/p&gt;&#xA;" OwnerUserId="8263" LastEditorUserId="8263" LastEditDate="2018-03-24T20:36:57.380" LastActivityDate="2018-03-24T20:36:57.380" Title="Which home-retrocomputers had a 1 single-color( no shades ) monochrome mode, or were by default?" Tags="&lt;hardware&gt;" AnswerCount="3" CommentCount="13" ClosedDate="2018-03-24T08:51:49.107" ContentLicense="CC BY-SA 3.0" />
  <row Id="6062" PostTypeId="2" ParentId="6061" CreationDate="2018-03-23T09:20:39.987" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;My reason for asking, is that I think that all things being equal, that a single-color-monochrome-mode or by default computer, should be faster for things like 3D moving graphics.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You asked a complex question, including some assumptions into it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You assume that reducing number of colors has direct positive effect on the image rendering. While it should be logically correct, it is not because of the computer architecture. As people in comments say, 8-bit computer operates bytes, not bits, and reducing pixel to one bit may make actually things harder to &quot;assemble&quot; correct 8-bit value for display from 8 distinctive values. From architectural point of view it is faster to operate 8-bit values rather than 1-bit values, thus 256-color &lt;em&gt;dynamic&lt;/em&gt; graphics may prove to be faster than monochrome - &lt;em&gt;unless there's hardware acceleration for it&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you assume saying &quot;3D moving graphics&quot;?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3D is drawing picture in perspective made up from 3 coordinates;&lt;/li&gt;&#xA;&lt;li&gt;moving assumes specific fps (frames per second);&lt;/li&gt;&#xA;&lt;li&gt;3D angle view can move.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Thus while games like Monster Maze for ZX or Black Onyx for MSX have 3D look, their frames per second are low, and angle can only be 90 degrees horizontal, so we can hardly compare them to the later games like DOOM which runs at 25 fps. I would say it is a kind of pseudo-3D graphics, however looking great for those times and still now in terms of how developers use capabilities of machines (not just video, but RAM and CPU).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3D graphics would be much faster if they have hardware acceleration - for example, video display processor (VDP) quickly reading data from its VRAM constructing image from various planes and set of coordinates and filling them with texture, but at those times, to my knowledge, these capabilities did not exist for home computers, however some 2D hardware acceleration was already in (e.g. look into the V99x8 VDPs used in MSX).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;they were so slow or incapable of satisfactorily displaying 3D moving graphics&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can not talk about performance of graphics without considering performance of whole system, and its resources.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;hardware acceleration;&lt;/li&gt;&#xA;&lt;li&gt;size of RAM or VRAM storing ready-to-use patterns and textures;&lt;/li&gt;&#xA;&lt;li&gt;CPU speed moving data from RAM or external devices to the video subsystem;&lt;/li&gt;&#xA;&lt;li&gt;other tasks CPU has to do in parallel (e.g. playing music, managing interrupts, or even actively driving output to the screen).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I think the 1-bit vs 1-byte thing is a bit of a red herring, to be honest.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;IMHO it is not for simple reason - processing of single bit for 8-bit computer 8 times takes more time than processing 8 bytes, and it hits performance badly if we talk about &lt;em&gt;moving graphics&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;3D graphics is all about drawing filled polygons ... it needs to be done in order to remove details from objects behind the object being drawn&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I was investigating the issue some time ago, wanted to make FPGA-base video accelerator. And I was told that modern 3D graphics is about triangles; the 3D drawing includes several stages to minimize excessive consumption of GPU power, and, to my understanding, the behind objects (triangles) must simply not appear to be rendered.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and the most useful way of doing that is enumerating the pixels along each edge and then filling across the scanlines from edge to edge&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is very logical, and before I started making my implementation I also thought it would be the best way. In real implementation it is not that straightforward though.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This is done most efficiently in a 1-bit-per-pixel bitmap&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Agreed if VRAM would be organized as 1 bit, for 8-bit data width RAM it will cause 8 RMW (read-modify-write) operations.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastEditorUserId="8258" LastEditDate="2018-03-23T10:14:10.783" LastActivityDate="2018-03-23T10:14:10.783" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6063" PostTypeId="2" ParentId="6061" CreationDate="2018-03-23T09:27:43.463" Score="4" Body="&lt;p&gt;Many machines particularly in the early portion of the period you ask about &lt;em&gt;only&lt;/em&gt; had monochrome graphics.  The Commodore PET, TRS-80, Sinclair ZX80 and ZX81 were all monochrome only.  Many colour machines also had monochrome modes, although usually these were high resolution so wouldn't have had higher performance.  The BBC Micro as mentioned in the question is one of these, as is the Amstrad CPC464 and the IBM PC (all 3 of these machines were based on the same display chip, the MC6845).  Also, some colour machines that didn't support multiple resolutions used a memory arrangement where monochrome pixels were stored in one area of memory and colours were assigned to them in another, which means that speed of making changes to the pixels if you weren't using colour was as fast as it would have been if the system were monochrome.  The Sinclair ZX Spectrum and I believe Commodore 64 used this approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This basically means that most of the colour machines of the early 80s had graphics modes that allowed 1-bit-per-pixel operations.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-03-23T09:27:43.463" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6064" PostTypeId="2" ParentId="6045" CreationDate="2018-03-23T11:18:00.463" Score="17" Body="&lt;p&gt;Cynically, the modern usage of &quot;AI&quot; is little more than marketing fluff, like &quot;cloud&quot; and &quot;blockchain&quot;. Doing a heavy handwave, it is the name that has been used for a lot of not-quite-there (or never-will-be-there) data-analysis techniques that attempt to get a useful answer in a timely manner from a large database of facts that would be prohibitive to do a brute-force search on. They tend to lose the &quot;AI&quot; moniker once they work and are routinely used. For example, most programs are too large for a compiler to brute-force search the optimal set of instructions, but it can certainly use tricks like &lt;a href=&quot;https://en.wikipedia.org/wiki/Simulated_annealing&quot; rel=&quot;noreferrer&quot;&gt;simulated annealing&lt;/a&gt; to get close.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They very much &lt;em&gt;can&lt;/em&gt; be used for throwing lots of modern CPU at optimisation for a very small machine. It is too extensive a field to list everything here, but I rather like the O'Reilly book &lt;a href=&quot;http://shop.oreilly.com/product/9780596529321.do&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Programming Collective Intelligence&lt;/em&gt;&lt;/a&gt; which is a nice introduction to a number of techniques which should give you plenty of ideas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your specific query, &quot;AI&quot; can (and is) used to heavily-optimise demos by throwing a lot of modern CPU at a relatively small problem. I've already given the compiler example, and in a similar vein one can skip writing the program in the first place and search for a suitable AST to generate the desired effect. It can also be used to perform extreme compression to get an image or video to fit in small hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to the likes of a 3D rotating cube, that is a simple problem which doesn't need AI. 3D games were not exactly uncommon in the early 1980s, with &lt;a href=&quot;https://en.wikipedia.org/wiki/Battlezone_%281980_video_game%29&quot; rel=&quot;noreferrer&quot;&gt;Battlezone&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Elite_%28video_game%29&quot; rel=&quot;noreferrer&quot;&gt;Elite&lt;/a&gt; being just two famous examples of the genre. The mathematics are not too strenuous on the CPU if one keeps the number of vertices down—a cube has just eight—and most of the time is spent drawing lines. Sometimes, you just need to sit down and &lt;em&gt;really&lt;/em&gt; understand the hardware and have a good hard think about the code you need to write rather than hope a computer can be convinced to write it for you.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2018-03-23T11:18:00.463" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6065" PostTypeId="1" CreationDate="2018-03-23T11:32:19.557" Score="3" ViewCount="515" Body="&lt;p&gt;I've seen that many TSRs installs themselves at the top of conventional memory. To do so they rely on the value at 0:413h/int 12h to tell how much conventional memory is available, and then update this value accordingly after accommodating in that region.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it seems that the transient part of command.com doesn't check this value and will overwrite whatever it's there when it regains control, thus overwriting the TSR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did these TSRs deal with this problem?&lt;/p&gt;&#xA;" OwnerUserId="8227" LastActivityDate="2018-10-09T11:20:08.210" Title="TSRs at top of memory conflicting with COMMAND.COM" Tags="&lt;ms-dos&gt;&lt;memory&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6066" PostTypeId="1" AcceptedAnswerId="6067" CreationDate="2018-03-23T11:59:58.763" Score="7" ViewCount="1114" Body="&lt;p&gt;This is a question that has been puzzling me for a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What happens with devices like graphic cards that have their own memory chips? Do these cards read/write from their own internal memory to/from existing physical memory in the motherboard? Or do CPUs access directly to the card's memory? (in which case no physical memory will be necessary in the motherboard for video, for example)&lt;/p&gt;&#xA;" OwnerUserId="8227" LastEditorUserId="6659" LastEditDate="2018-03-23T17:54:01.567" LastActivityDate="2019-10-28T12:22:46.383" Title="Is there really 1MiB of physical memory in the motherboard of a PC AT/XT?" Tags="&lt;graphics&gt;&lt;ibm-pc&gt;&lt;memory&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6067" PostTypeId="2" ParentId="6066" CreationDate="2018-03-23T12:30:28.483" Score="16" Body="&lt;p&gt;No, there isn’t necessarily 1 MiB of memory on a PC XT or AT’s motherboard. In fact the original PC (5150) only officially supported up to 64 KiB of memory, 256 KiB in later models; the original XT (5160) only supported 256 KiB, later models supported up to 640 KiB. Additional memory could be installed using expansion cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expansion cards, along with the system’s memory controller, sit on the system bus, which includes a number of address lines. When the CPU wants to read from or write to memory, it puts the address it’s interested in on the bus, and asserts the appropriate state using other pins; any interested party on the bus can respond appropriately to handle the read or write.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means the address space can cover a variety of different hardware. On a typical XT, you’d have up to 640 KiB of real memory, responding to the first 640 KiB’s worth of addresses; then one or two graphics adapters, then expansion cards, then the system ROM. The fact that addresses map to something all the way up to 1 MiB on a standard PC or XT doesn’t mean that it has 1 MiB of physical memory. The AT added memory up to 16 MiB, but it would typically have a hole from 640 KiB to 1 MiB (to leave room for expansion cards and ROM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/3061/79&quot;&gt;Who decides what is the memory address that the CGA video buffer will be mapped to?&lt;/a&gt; for some related information, and &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/7817/79&quot;&gt;Who set the 640K limit?&lt;/a&gt; for an explanation of the PC memory map.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-10-28T11:43:55.733" LastActivityDate="2019-10-28T11:43:55.733" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6068" PostTypeId="2" ParentId="6065" CreationDate="2018-03-23T12:43:16.490" Score="7" Body="&lt;p&gt;Allocating memory by reducing the amount of installed memory as indicated by 0x00413 is normally only used by resident software loaded before DOS. When DOS initialises itself, it sets up memory arenas covering all the available conventional memory starting with the DOS data segment. COMMAND.COM uses the arena structure to determine where to place its transient portion. TSRs tell DOS how much memory to keep for them when they terminate and stay resident using &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/36/41.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;interrupt 0x27&lt;/a&gt; or &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/34/27.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;service 0x31&lt;/a&gt;; that memory is permanently allocated to them (unless they remove themselves from memory). When COMMAND.COM re-installs its transient portion, it will also preserve those allocations...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more intricate TSR could always manipulate the DOS memory arenas to reduce the overall amount of memory DOS could use, but that’s fraught with danger. Some DOS versions did have support for something like this — for example, DR DOS’s MEMMAX could add unused graphics buffers to the arenas, and remove them again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Curious readers can trace the memory control blocks themselves by calling &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/95/29.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;interrupt 0x21 service 0x52&lt;/a&gt; to get a pointer to &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/it/27/16.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the list of lists&lt;/a&gt;, and looking at &lt;code&gt;ES:[BX-2]&lt;/code&gt; which is the first &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/it/28/16.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MCB&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-10-09T11:20:08.210" LastActivityDate="2018-10-09T11:20:08.210" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6069" PostTypeId="2" ParentId="6065" CreationDate="2018-03-23T12:44:33.450" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I've seen that many TSRs installs themselves at the top of conventional memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I can't remember any and I'm not so sure why they should, as that's against DOS' memory strategy and brings no advantage. In fact, it may even invoke many problems, depending on the way it's done. Then again, there are many strange people in DOS lands.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To do so they rely on the value at &lt;code&gt;0:413h&lt;/code&gt;/&lt;code&gt;int 12h&lt;/code&gt; to tell how much conventional memory is available, and then update this value accordingly after accommodating in that region.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's a strategy programs may use on (BASIC) home computers to protect themself. Under DOS it's useless, as DOS only checks this value once during boot to determite the available memory when seting up its memory management.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But it seems that the transient part of command.com doesn't check this value and will overwrite whatever it's there when it regains control, thus overwriting the TSR.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's not related to &lt;code&gt;COMMAND.COM&lt;/code&gt; at all not the transient nor the resident. Memory management is handled by DOS. &lt;code&gt;COMMAND.COM&lt;/code&gt; is just another application requesting or releasing memory via the usual management functions. Memory is handled by DOS as a series of blocks, linked via a series of MCB's (&lt;strong&gt;M&lt;/strong&gt;emory &lt;strong&gt;C&lt;/strong&gt;ontrol &lt;strong&gt;B&lt;/strong&gt;locks). DOS offers a series offunctions (Allocate/ Free/ Resize)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When loading (*1) a programm, and a TSR isn't anything else, a memory block, according to the requirements is allocated. This is the first one (lowest address) available, which is equal or greater than the amount of memory requested in the program header (*2). For &lt;code&gt;.COM&lt;/code&gt;Programs the program size is used.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How did these TSRs deal with this problem?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It isn't a problem at all. There is no advantage in moving code up in a DOS system, thus there is no need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When started, the (TSR) program is loaded at the lowest possible address Usually right after &lt;code&gt;COMMAND&lt;/code&gt;. Now it (should) frees all non essential memory blocks (*3), then do whatever setup is needed and terminate via &lt;strong&gt;&lt;em&gt;T&lt;/strong&gt;erminate and &lt;strong&gt;S&lt;/strong&gt;tay &lt;strong&gt;R&lt;/strong&gt;esident&lt;/em&gt;, (Function 31h) - hence the name. This function is much like the regular exit, except it also return the length of memory to be retained in the current program block.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Job done, TSR stays right above the resident part of &lt;code&gt;COMMAND.COM&lt;/code&gt;. There is no need to move it anywhere else, as it doesn't matter if memory is reservd for a TSR from the beginning or the end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;To do what the question implies&lt;/strong&gt; a TSR must either do a somewhat weired memory dance in requesting all memory, then shrinking the last (and highest) block by the amount of Memory needed (plus 16 bytes for the MCB), then requesting this block again, moving its routine there and then terminating with with that block resident (IIRC it still needs patching the MCBs PID). Or just screwing the memory management by manipulation the MCBs to create such an area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But again, it's total useless, and I can not remember any TSR acting that way.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;As an Afterthought&lt;/strong&gt;, could it be, that you either mixed this in (your) memory with the steps needed to build a safe area for assembly programms within a BASIC environment (aka home computer)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or did you maybe think of 'high loading' a programm/TSR into UMB or HMA? Before DOS 4 the usage of these areas did require 'some nudgeing' to the DOS. (Heavy nudging before DOS 3)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - BTW, not COMMAND is loading the program, but DOS is, as COMMAND is just parsing the command line and then issueing a Function 40h call to let DOS do it's work - the same way any program can load any other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Starting with DOS 3 Function 58h allowed to set the strategy used. Either &lt;em&gt;First Free&lt;/em&gt; block of memory large enough to satisfy the request (Like before and default) or &lt;em&gt;Best Fit Low&lt;/em&gt;  by searching for the smallest block large enough to satisfy the request or &lt;em&gt;Last Fit Low&lt;/em&gt;  by searching for the smallest block large enough to satisfy the request form the end of memory. Later (DOS 4) two modifiers to include UMB in the search or only search in UMB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3- Every programm gets two blocks by default: An environment block and a programm block. It's good style to free the environment block when no longer needed, as that hole can be used by the next program load again.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-08T18:46:26.727" LastActivityDate="2018-10-08T18:46:26.727" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="6071" PostTypeId="2" ParentId="6045" CreationDate="2018-03-23T14:23:00.900" Score="2" Body="&lt;p&gt;I'm not satisfied by the answers above. They either all assume that there's absolutly no room for optimization (either because the target CPU i too simple) or they present automated tools to produce better code, but leave out the AI part. Or they just state that AI is not magic. They're all leaving a part of the question out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the question is : &quot;Could &lt;strong&gt;&lt;em&gt;you&lt;/em&gt;&lt;/strong&gt; use AI to achieve this goal?&quot;, then the answer would be: Probably not. As an individual you would never have acces to the resources and knowledge to set up a complex AI able to achieve this incredible complex task for an AI. And even if you owned the resources, you'd be better off using your brain instead, or at worst you'd be better off using semi-automated tools to optimize the code -- which doesn't count as an AI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, if the question is : &lt;strong&gt;&lt;em&gt;&quot;What if Google or any heavyweight company suddenly decided that they want to produce the best possible code for a 1980 machine, and use AI to achieve this? Could they do it, would it help, would it work?&quot;,&lt;/em&gt;&lt;/strong&gt; then the answer is probably yes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The resulting code might only help moving from an &quot;almost completely optimized code&quot; to a &quot;completely optimized code&quot; (hence &lt;strong&gt;making the execution only 5% faster if you're extremely lucky -- maybe&lt;/strong&gt;), but it's still a &quot;yes, probably&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me explain how : &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;we know how automated tools can be used to produce extremely optimized code for old hardware. For example, there are tools to produce some extremely optimized compression ratios for hardware with tiny storage capability. Or compilers that produce the best assembly code for a given CPU. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the core of these techniques is that the machine producing the optimized code has huge memory or comptation capabilities compared to the target machine. But it's not enough. It all relies on &lt;strong&gt;&lt;em&gt;someone&lt;/em&gt;&lt;/strong&gt; who perfectly understood how the target machine works, and was able to provide the tool with some specialized pieces of code --&lt;strong&gt;templates&lt;/strong&gt; if you will-- that are the best in a given context. That person created algorithms that are &lt;strong&gt;abstracting&lt;/strong&gt; what's really needed in the end, doing the calculation on some inflated temporary data aiming at this goal, and in the last moment filling all the templates and keeping only the core of what's needed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In a way, they're &quot;&lt;strong&gt;rendering&lt;/strong&gt;&quot; the template just like you would render 3D, but instead you're &quot;rendering&quot; assembly or data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing to understand is that the person who created those tools provided to things: the so-called &lt;strong&gt;templates&lt;/strong&gt; and the &lt;strong&gt;ways&lt;/strong&gt; of using them. In other words, they spotted &lt;strong&gt;patterns&lt;/strong&gt; in what they think is the most optimized code or data, and then they created &lt;strong&gt;rules&lt;/strong&gt; to insert them in the right places with the right parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the question is : &lt;strong&gt;*&quot;Would an AI be able to spot those &lt;em&gt;patterns&lt;/em&gt; and create the &lt;em&gt;rules&lt;/em&gt; to inject the patterns?&quot;*&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, with &lt;strong&gt;machine learning&lt;/strong&gt;, it certainly would. You have a very simple heuristics at the end to evaluate the quality of the result : its execution speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The machine would need to learn to spot the coding patterns.&lt;/strong&gt; That it can do by feeding it lots and lots of well-optimizied existing code for the target machine, that you'd take from the software from back then. Then if you introduce mechanisms of randomness and genetic algorithms, the AI can try variations and find even better optimizations that no one had thought about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Then the machine would need to create its own rules&lt;/strong&gt; to wire all the patterns together and achieve the goal that you have set  (by the way, you'd need a &lt;strong&gt;language&lt;/strong&gt; to tell the AI what the goal actually &lt;em&gt;is&lt;/em&gt;, in abstract terms that it can &quot;understand&quot; and toy around. It's hard to tell a machine &quot;do me a rotating cube&quot; without actually doing it yourself -- but then again machine learning to the rescue to learn to recognize abstract concepts).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Finally you'd end up with a code that a human would hardly understand, and that would be litrally impossible to maintain&lt;/strong&gt; without breaking everything. Bout it would work -- you'd have the fastest code possible for this one specific task.&lt;/p&gt;&#xA;" OwnerUserId="8164" LastEditorUserId="8164" LastEditDate="2018-03-23T16:23:50.140" LastActivityDate="2018-03-23T16:23:50.140" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6072" PostTypeId="2" ParentId="6045" CreationDate="2018-03-23T15:15:57.513" Score="3" Body="&lt;h2&gt;Nope.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;All early home computers were fundamentally limited on graphics performance by their video outputs.  Pixel resolutions were generally low.  The ZX Spectrum managed 256x192, and the Commodore 64 managed 320x200.  Worse than that though, their colour depth was tiny.  6-bit colour (i.e. a palette of up to 64 colours) was normal, but graphics were often also limited to how many colours could be present in any given group of pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was certainly possible to draw wireframe 3D, and many games did.  However &quot;filled&quot; 3D graphics were completely beyond these machines, because they did not have the colour palette to shade different faces of a shape accurately enough.  It was not until the Acorn Archimedes, Commodore Amiga and Atari ST that regular home computers gained access to 16-bit and 24-bit colour which made this possible.  (Specialist graphics cards did exist for PCs - at enormous cost.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it doesn't matter what processing you use - or even if you hooked up a hybrid old-school home computer with a modern processor.  The video hardware on all old home computers simply was not up to the job.  Even the kind of images you'd get from an early-90s 486 with a basic graphics card were far beyond what an early/mid-80s home computer could manage.&lt;/p&gt;&#xA;" OwnerUserId="6749" LastActivityDate="2018-03-23T15:15:57.513" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6073" PostTypeId="2" ParentId="6061" CreationDate="2018-03-23T21:21:46.913" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;( I think the introduction of colors and sound to cheap( 1980 onwards&#xA;  ) home-computers from 1975 to 1985 was the reason( or a reason ) why&#xA;  they were so slow or incapable of satisfactorily displaying 3D moving&#xA;  graphics, and yet this was the sort of effect for which many people&#xA;  bought the machines, I have always wondered if there was a secret&#xA;  'Monochrome-Mode' available in many of these machines from 1975 to&#xA;  1985&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, no, and no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The demand wasn't there&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back then few people bought home computers for 3D graphics. 3D was used mostly in high CAD workstations, which were very expensive and not optimized for arcade games. If the demand for 3D was higher then manufacturers could have optimized their chipsets for it. But most people wanted fast &lt;em&gt;2D&lt;/em&gt; color graphics, which is why chips such as the VIC-II and TMS9918 were developed.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even after 1985 most home computers concentrated on producing good 2D graphics. The Amiga was the ultimate example. It had a hardware blitter which could draw lines, and the AGA chipset could produce 256 colors. But screens were built from multiple monochrome bitplanes, and the blitter (or CPU) could only work on one bitplane at a time. This was ideal for scrolling 2D backgrounds etc., but not so good for 3D graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only 80's machine I can think of that was designed specifically for 3D was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Vectrex&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vectrex&lt;/a&gt; video game system. It used true vector graphics (not bitmapped, the CRT beam was moved directly around the screen to draw lines) with plastic screen overlays to simulate color and static graphics. The main problem with this design was poor text and zero bitmap capability. It didn't last long and was a commercial failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Proper 3D graphics didn't become popular until the IBM VGA card became a standard. It had a 'chunky' 256 color graphics mode with 1 byte per pixel which made mapping surface textures easier. Games such as Wolfenstein 3D and Doom changed people's desires. But it wasn't &lt;em&gt;just&lt;/em&gt; the VGA card's chunky pixels that made these games work. They also needed lots of memory and a powerful CPU, things that were beyond the reach of home computers in the early 80's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The CPU was the bottleneck&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Colors could be reduced to speed up rendering. Sound was usually produced by independent hardware, or by toggling a bit in-between doing other stuff. But RAM was slow and expensive, and the CPUs were relatively inefficient. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without a floating point unit or even integer multiply/divide instructions, the CPU spends most of its time doing calculations. Setting pixels is just the final stage and only takes a few cycles. This is proven by the fact that true 3D games were much slower than complex 2D games, even on machines that had no hardware scrolling or sprites. Games that used &lt;em&gt;pseudo&lt;/em&gt; 3D techniques (eg. isometric 3D, scaled software sprites, multi-layer backgrounds) could be just as fast as 2D.       &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Any 'secrets' were soon discovered&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most machines at that time had monochrome graphics modes that were no secret, but color was more desired for games so the monochrome modes were used less. Some machines (eg. the Apple-II) were both mono and color at the same time, depending on what screen they were hooked up to. A few machines did have 'secret' graphic modes that were simply unintended side-effects of how their chipsets worked - most of them not particularly useful and perhaps even dangerous (eg. reprogramming the sync timing on a 6845 could blow up your monitor).   &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm thinking that a single-color-monochrome computer by default, would&#xA;  be faster than one which has single-color-monochrome only as a&#xA;  selectable mode( since the color capability would still be present etc&#xA;  )&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. The designers of these computers were acutely aware of the limitations and trade-offs that had to be made to get the best performance at lowest cost. Creating a screen mode that doesn't use color but suffers the slowdown of having it would be stupid. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main reasons for color slowdown are that the CPU has to write to more memory and/or the display controller steals more bandwidth. At the same resolution in monochrome mode the CPU has less work to do and bandwidth requirements are lower, so it can render faster. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some machines allocate the same amount of video memory no matter what the graphics mode. Resolution then increases as the number of colors decrease, negating the primary benefits of monochrome. However that doesn't make them any slower than a purely monochrome machine &lt;em&gt;at the same resolution&lt;/em&gt;.    &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2018-03-23T21:21:46.913" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6074" PostTypeId="2" ParentId="5601" CreationDate="2018-03-24T06:07:13.473" Score="4" Body="&lt;p&gt;Many cart-based games used battery-backed SRAM for storing saved game state. The RAM was usually powered by a lithium coin cell that could keep the RAM contents powered for a number of years. Once the battery died, the cartridge lost the ability to store game save data. While the cart was plugged in, the console would power the SRAM so the game would function normally, and even appear to allow a save, but as soon as you removed power, all saves would be lost. The game itself is still stored as permanent ROM, so a dead battery will usually not make the game unplayable, it'll just mean the game can't save stage that will survive between power-ups.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some carts used soldered versions of lithium cells (they made/make lithium cells with solder lugs permanently welded to the battery) while others, more rarely, used a socket, allowing the battery to be replaced easily after opening the cart. I have personally replaced the soldered cell on a few carts for myself and friends with a socket for a CR2032, the same cell used on most PC motherboards. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time these techniques were popular, flash memory was still new enough to be disproportionately expensive compared to SRAM + the battery. Flash also has the disadvantage of being slower than SRAM, so if the game used the SRAM for game logic, flash would have been impractical. Finally, if you think the write endurance on modern flash is bad, the endurance on early flash was even worse, so depending on how often the device wanted to write to NV storage, flash could easily have been worn out whereas SRAM has virtually unlimited write cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using batteries for nonvolatile memory was done in lots of devices in the 80s and 90s. I had a PDA that used a lithium coin cell for its main RAM, and after that cell died the PDA would &quot;hard reset&quot; each time you powered it off and back on. (I replaced that cell with a socket as well) Other devices that ran on user-replaceable batteries would often include a capacitor that could maintain the RAM contents for a few minutes to allow you to change the batteries without losing data. Others still included the lithium cell along with the user replaceable batteries; the lithium cell basically kicked in whenever the main batteries were low or missing.&lt;/p&gt;&#xA;" OwnerUserId="8287" LastActivityDate="2018-03-24T06:07:13.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6075" PostTypeId="2" ParentId="6045" CreationDate="2018-03-24T14:30:51.953" Score="4" Body="&lt;h2&gt;Your timeframe is huge&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The increase in home computer capability from 1975 to 1985 is massive - at least as much as the increase in capability in cell phones from 2000 to 2010, if not even greater.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1975 I don't think there were any home computers that had any bitmapped graphics capability at all, and even if they had, they wouldn't have had enough memory for the image anyway.  In 1985, on the other hand, you could buy an Amiga with a megabyte of RAM and near-VGA graphics which would be capable of a lighted, shaded rotating cube without any heroic effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers of the early 80s typically had limitations in their CPU and graphics that would make full-color 3D rendering impractical.  Realtime 3D lighting requires per-pixel calculations that just can't be done fast enough on 8-bit CPUs.  Without lighting, 3D rendering looks better in wireframe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wireframe rendering is much easier, as you need only a few calculations to project the vertices of the polygons you are rendering, and then you connect them with lines.  Line drawing is easily handled on all common 8-bit systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early 80s many computers were capable of realtime animation of wire-frame 3D.  The classic game &quot;Elite,&quot; released in 1984 and ported to the majority of common 8-bit platforms, demonstrated this.  This game could have theoretically existed in 1979 or so (the earliest you could get a 64K Apple), but most of the platforms it would be developed for would not exist until 1981 or later.  A simple wireframe rotating cube could have probably been made for a 16K Apple, available (if expensive) in 1977.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many demos for the Commodore 64 that appear to have full-color 3D elements, although I bet dollars to donuts they are done with various tricks rather than a true rasterizing renderer, OpenGL style.  A quick search for &quot;C64 demo&quot; will turn up several.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the 2D category, introspec's answer shows something good for Atari, but here's one for Apple II: &lt;a href=&quot;http://www.appleoldies.ca/bmp2dhr/&quot; rel=&quot;nofollow noreferrer&quot;&gt;BMP2DHR&lt;/a&gt;  This is closer to what you're asking, since it uses a modern PC's processing power to run advanced dithering algorithms in order to get high quality color (at the cost of contrast).  To the human eye, low contrast and high color just looks better than high contrast but inaccurate color.  GIF viewers for the Apple II were available, they took a significant amount of time to display an image, and they did not look that good.&lt;/p&gt;&#xA;" OwnerUserId="7775" LastActivityDate="2018-03-24T14:30:51.953" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6076" PostTypeId="1" AcceptedAnswerId="6079" CreationDate="2018-03-24T18:59:16.780" Score="8" ViewCount="417" Body="&lt;p&gt;I recently bought this portable Soviet Mikrolab KR580IK80. The chips are by design exposed, as it was a training computer, and although it is housed in a carrying case, it is extremely dusty as can be seen in the following picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FIetS.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FIetS.jpg&quot; alt=&quot;Dusty Mikrolab in working order&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it is generally functional, it has exhibited some unexpected behaviour, and I wondered if it might help to clean it. However, for obvious reasons I am afraid of doing more damage than good. For this reason I want to ask &lt;strong&gt;to what extent the following common ways of cleaning motherboards would be safe for this computer.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Compressed air&lt;/li&gt;&#xA;&lt;li&gt;Specialist contact cleaner&lt;/li&gt;&#xA;&lt;li&gt;Isopropyl alcohol&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="8072" LastActivityDate="2018-03-25T18:55:28.923" Title="How safe are modern motherboard-cleaning techniques for this 1987 Soviet portable computer?" Tags="&lt;maintenance&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6077" PostTypeId="2" ParentId="6076" CreationDate="2018-03-24T19:08:50.313" Score="3" Body="&lt;p&gt;Hard to tell anything without a hands on check of the materials.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With simple PCBs (just with IC and alike) I usually use regular water and soap, often in a kitchen dish washer. Rinsing it afterwards with demineralized water is a good idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there are other parts on the board, stickers or markings, one needs to be more careful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, pressured air and next a wet rug will already clean 90% of all dirt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would abstain from any specialized cleaners and/or alcohol, as they usually solve many paint/markings. Especially of 'non-standard' kind - here meaning boards made by different porcesses/materials than common in 'the West'.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;BTW: Awsome find. Something I'd love to study.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-03-25T18:55:28.923" LastActivityDate="2018-03-25T18:55:28.923" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6078" PostTypeId="2" ParentId="6076" CreationDate="2018-03-24T19:46:18.353" Score="2" Body="&lt;p&gt;Step 1: pressured air (inflow and/or outflow) with narrow nozzle. Should clean &quot;unbound&quot; dust out of the board and under the chips. Be very careful with buttons. I would not advise disassembling them as old plastic may crack;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Step 2: use &lt;a href=&quot;https://en.wikipedia.org/wiki/Shave_brush&quot; rel=&quot;nofollow noreferrer&quot;&gt;shave brush&lt;/a&gt; to clear &quot;bound&quot; dust, and then use vacuum cleaner again to remove remainders. While using brush, be careful not to perform too sharp moves as bristle may get between pins or plastic parts and by tearing it off you risk damaging the components. Be gentle and use the bristle along its axis rather than perpendicular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Step 3: use vodka. No, on the board. Do not use dissolvents. You can use isopropyl alcohol, but testing it on some area which is not exposed (e.g. on the bottom of the board). Aged materials (including silkscreen and colored polygons) may be subject to removal with spirits, thus if possible do not use spirit at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Step 4: keys can be cleaned by the soap and water, but that would be uneasy without pouring them inside the buttons. Be very careful, and use wet sponge a dozen of times on every button (instead of pouring everything into the water and then drying).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;it has exhibited some unexpected behaviour&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Cleaning may help here, but if issues continue after cleaning you will need to apply electronics specialist knowledge to find out the issue. However what you can definitely do after cleaning - taking magnifier and checking board and its components inch by inch looking for damaged conductors, cold solder joints and other damages.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2018-03-24T19:46:18.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6079" PostTypeId="2" ParentId="6076" CreationDate="2018-03-24T21:38:16.487" Score="5" Body="&lt;p&gt;The board looks like pressboard, which is essentially cardboard, and liquids don't do that any good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clean the switches on the front, and the area at the crystal at the left back first. If that fixes the glitches, don't clean the other parts.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2018-03-24T21:38:16.487" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6080" PostTypeId="1" AcceptedAnswerId="6081" CreationDate="2018-03-24T22:14:03.000" Score="15" ViewCount="4779" Body="&lt;p&gt;I am looking for a native C compiler for the Spectrum 128. I would like one which:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Has good support for the latest C standard at the time.&lt;/li&gt;&#xA;&lt;li&gt;Is not limited to compiling ridiculously short source code.&lt;/li&gt;&#xA;&lt;li&gt;Produces decently-optimized machine code*, especially for bitwise operations.&lt;/li&gt;&#xA;&lt;li&gt;Has an English interface.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Features that would be nice, but are not required:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Has a basic C library (for things such as &lt;code&gt;strcmp&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;Can run with 48K memory.&lt;/li&gt;&#xA;&lt;li&gt;Supports assembly as well for manual optimization.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What native C compiler fits these requirements?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;* I'll mostly be doing add, rotate, and XOR on arrays, and possibly polynomial multiplication over finite fields.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="8090" LastEditorUserId="8090" LastEditDate="2018-04-01T01:30:58.693" LastActivityDate="2019-04-15T07:54:24.473" Title="Native C compiler for Sinclair ZX Spectrum" Tags="&lt;programming&gt;&lt;zx-spectrum&gt;&lt;c&gt;&lt;compilers&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6081" PostTypeId="2" ParentId="6080" CreationDate="2018-03-24T22:44:35.533" Score="23" Body="&lt;p&gt;If you want it contemporary, use &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=0008252&quot; rel=&quot;noreferrer&quot;&gt;HiSoft C&lt;/a&gt;. Back then the standard compiler and compatible with other HiSoft Tools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a more up to date and rather comfortable (cross) compiler &lt;a href=&quot;https://www.z88dk.org/&quot; rel=&quot;noreferrer&quot;&gt;Z88dk&lt;/a&gt; with its &lt;a href=&quot;https://www.z88dk.org/wiki/doku.php?id=platform:zx&quot; rel=&quot;noreferrer&quot;&gt;Spectrum target&lt;/a&gt; might be a good choice. The detailed documentation is a great plus. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-03-24T22:44:35.533" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6082" PostTypeId="2" ParentId="6045" CreationDate="2018-03-24T22:58:42.220" Score="-1" Body="&lt;p&gt;It's not that we couldn't do it.  It's that we couldn't do it &lt;em&gt;in real time&lt;/em&gt;.  I have had 8-bit processors grinding for 12 hours to precompute graphic elements, data then used to &quot;do the impossible&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as exceeding hardware ability, we did a lot of stuff the designers never conceived, 4-way fine scrolling on VIC-20 for instance.  That was half the fun.  Now they don't let you play with bare metal anymore.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not seeing how &quot;AI&quot; would  have helped though. &lt;/p&gt;&#xA;" OwnerUserId="4330" LastActivityDate="2018-03-24T22:58:42.220" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6083" PostTypeId="2" ParentId="944" CreationDate="2018-03-25T16:59:48.577" Score="2" Body="&lt;p&gt;Downloading VT52.SYS from a virtual machine on pcjs.org requires a few steps that may not be obvious if you're unfamiliar with the website:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Go to a PCjs virtual machine (like &lt;a href=&quot;https://www.pcjs.org/disks/pcx86/os2/misc/football/87058/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the one&lt;/a&gt; that @john_e already posted)&lt;/li&gt;&#xA;&lt;li&gt;Make sure the desired disk, &quot;OS/2 FOOTBALL (v7.68.17)&quot;, is loaded in drive A:&lt;/li&gt;&#xA;&lt;li&gt;Click the &lt;strong&gt;Save&lt;/strong&gt; button&lt;/li&gt;&#xA;&lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt; on the &quot;Check your Downloads folder for FOOTBALL-76817.img&quot; alert message&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;At this point, the disk image should be in your Downloads folder, but some browsers (like Chrome) put up additional barriers.  In the latest release of Chrome (version 65), before the download is permitted, a message is displayed at the bottom of the window:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This type of file can harm your computer. Do you want to keep FOOTBALL-76817.img anyway?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Prior to Chrome 65, there used to be &lt;strong&gt;Discard&lt;/strong&gt; and &lt;strong&gt;Keep&lt;/strong&gt; buttons, but now Google makes it even harder: you must click &lt;strong&gt;Show All&lt;/strong&gt;, and &lt;em&gt;then&lt;/em&gt; you'll see both the &lt;strong&gt;Discard&lt;/strong&gt; and &lt;strong&gt;Keep&lt;/strong&gt; options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you finally have the .img file, you can mount it.  On macOS, that's as easy as double-clicking it.  On Windows, you may need to install some third-party software first, like OSFMount.&lt;/p&gt;&#xA;" OwnerUserId="8292" LastActivityDate="2018-03-25T16:59:48.577" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6084" PostTypeId="2" ParentId="6065" CreationDate="2018-03-26T09:38:39.913" Score="2" Body="&lt;p&gt;Going by (dim and fading) memory, it might be that some TSRs &lt;em&gt;temporarily&lt;/em&gt; moved themselves towards the top of normal memory before moving just the parts that needed to remain resident back down to the bottom of memory...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many/most TSRs (as they exist on disk) have two major components:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A &lt;em&gt;resident&lt;/em&gt; bit that needs to stay in memory to do whatever it is meant to do, and:&lt;/li&gt;&#xA;&lt;li&gt;A &lt;em&gt;transient&lt;/em&gt; bit that needs to install/configure the resident bit but can be thrown away afterwards.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you wrote a TSR directly in assembler, you (can) have full control over how these bits are laid out on disk, so that the resident part is loaded first in memory but execution transfers to the transient part that is loaded &lt;em&gt;after&lt;/em&gt; the resident part. When the transient part has done its job, it reports the end of the resident part to DOS and the memory the TSR consumes is minimised.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a TSR is written in a higher-level language, it may not be possible (or as easy) to achieve the &quot;ideal&quot; layout. I'm pretty sure I've seen / heard of TSRs that either:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;on loading relocate most of their code towards higher memory (freeing the original load address), perform initialisation/configuration and move the resident-only parts back to low memory, or:&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;directly load only a small loader. This could then load the initialise/config code into higher memory, which could then load the resident part into low memory.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In either case, the end result is that only the resident part is left in low memory to minimise the TSR's footprint as before.&lt;/p&gt;&#xA;&#xA;&lt;hr/&gt;&#xA;&#xA;&lt;p&gt;It's also &lt;em&gt;conceivable&lt;/em&gt; (my memory even more faded here) that the more complex TSRs only loaded a bare-minimum of their code into low memory – just enough to monitor anything they needed to, and to detect whatever condition should make them &quot;active&quot;. When they needed to activate, they then load the appropriate &quot;module&quot; into memory. It might be that these &quot;temporary&quot; bits of code were loaded into high memory (possibly not with &lt;em&gt;complete&lt;/em&gt; safety, but where it is least likely to cause problems).&lt;/p&gt;&#xA;" OwnerUserId="731" LastActivityDate="2018-03-26T09:38:39.913" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6085" PostTypeId="2" ParentId="6066" CreationDate="2018-03-26T10:37:10.253" Score="3" Body="&lt;p&gt;It is also a question of mother board BIOS as some areas are remapped by ROM/RAM memories of installed devices. Some motherboards can use the overlapped memory areas. For example you know the Shadow memory options in old BIOS SETUPs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The native MS-DOS (real mode) see only the 1 MiB space but you can configure some areas to page in/out different areas of memory. This is how VGA paging works. The same goes for XMS/EMS with which you can access even more than 1MiB of memory if present in system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the main access route in real mode MS-DOS was to use specific memory range (usually 64 KiByte) and map part of normally not accessible memory into it. When you done with its use page in another part of memory and so on ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How ever in MS-DOS you could switch to protected mode and have 32bit meory space available directly. But its a matter of perspective if you can consider such  program still a MS-DOS as you virtually turn it of and use your own OS like code.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-03-29T06:28:52.657" LastActivityDate="2018-03-29T06:28:52.657" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6086" PostTypeId="2" ParentId="944" CreationDate="2018-03-26T14:54:48.073" Score="1" Body="&lt;p&gt;MS-DOS Kermit had a terminal emulator built in.  It should be VT100 compatible, and thus VT52 backward compatible.  I don't know if Kermit was based on a driver or whether terminal emulation was part of the app.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might be able to download MS-DOS Kermit and check it out.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2018-03-26T14:54:48.073" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6087" PostTypeId="1" AcceptedAnswerId="6088" CreationDate="2018-03-26T20:07:45.207" Score="12" ViewCount="2298" Body="&lt;p&gt;There is probably an easy explanation for this based on some facet of how the TIA generates the display. As is readily visible in the image taken from a real Atari 2600 displayed on a modern LCD, the vertical resolution of the score area (where you see &quot;13&quot;) is higher than the vertical resolution of the game play area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8I7PG.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8I7PG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Details: 4-switch &quot;Darth Vader&quot; Atari 2600 with Asteroids cartridge is modified for S-video out and connected to the S-video input of a Sony DSC-1024 studio scan converter. Output of the DSC is 48kHz VGA (1024x768). This is connected to a VGA-HDMI encoder and then output to the LCD as HDMI and displayed with the 4x3 aspect ratio enabled on the LCD.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-08-31T23:55:15.773" Title="How does Atari 2600 TIA display multiple resolutions in Asteroids?" Tags="&lt;graphics&gt;&lt;atari-2600&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6088" PostTypeId="2" ParentId="6087" CreationDate="2018-03-26T20:23:09.803" Score="20" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;There is probably an easy explanation for this based on some facet of how the TIA generates the display. As is readily visible in the image taken from a real Atari 2600 displayed on a modern LCD, the vertical resolution of the score area (where you see &quot;13&quot;) is higher than the vertical resolution of the game play area.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it isn't.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Atari 2600 [...] is modified for S-video out and connected to the S-video input of a Sony DSC-1024 studio scan converter. Output of the DSC is 48kHz VGA (1024x768). This is connected to a VGA-HDMI encoder and then output to the LCD as HDMI [...].&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You get fooled by your converting hardware. Your hardware assumes this is a real TV signal, consisting of two half frames with half the vertical resolution each. This is called &lt;a href=&quot;https://en.wikipedia.org/wiki/Interlaced_video&quot; rel=&quot;nofollow noreferrer&quot;&gt;interlaced video&lt;/a&gt;. The first frame supplies all odd lines, the second all even lines. The first one is also marked by a different timing. Your hardware always connects two half frames into one (*1) - after all, your new 'progressive' display has at least doubled the vertical resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Atari Hardware doesn't do half frames, but always first frames, giving a real 60 Hz display with half the lines. A real (analogue) TV does just go by the syncing and displays it the way the VCS sends it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your 'more' sophisticated hardware looks for a standard TV picture with interlaced frames and puts always two into one new picture to be displayed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Objects that are drawn each picture now get their lines 'doubled', which makes them look solid on your hardware, while objects only drawn in one frame will be only displayed every other line, making it look spaced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: With your setup the signal gets not only displayed much sharper, but also timewise integrated (&lt;a href=&quot;https://en.wikipedia.org/wiki/Deinterlacing&quot; rel=&quot;nofollow noreferrer&quot;&gt;deinterlaced&lt;/a&gt;). Deinterlacing is a great thing for moving pictures, but not so much for TV Games using effects only possible on a 'real' TV.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, &lt;strong&gt;why does the VCS display objects every other frame?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While simple games with a low number of objects and/or simple computing needs are fast enough to display every object on a line in every frame. TV uses 30(25) frames per second, displayed as 60(50) half frames. Simple games now display the same picture in every frame, ignoring what 'half' it is. When such a game output is converted by your hardware it displays solid objects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More complex games, especially if they want/need to display more objects in a line than possible, split them up between frames. Here the first frame gets some objects while others are displayed the second one. On a real TV (CRT) this still gives a great and smooth picture. Only a little bit dimmed. Your digital setup now does not display these two pictures after each other, creating the same effect, but puts them into one frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the objects spread out over two (half) frames the number of items in one line can be doubled. There are even games known that split objects into three (half) frames. Fine (or better acceptable) on a TV, but your setup might display them in a rather weird flickering fashion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, splitting objects adds a little flickering, but it's the very same every classic TV picture has, so nothing out of the ordinary. Even with three frames for one picture it is playable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The by now classic book &lt;em&gt;&quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Racing_the_Beam&quot; rel=&quot;nofollow noreferrer&quot;&gt;Racing the Beam&lt;/a&gt;&quot;&lt;/em&gt;(*3) uses &lt;a href=&quot;https://books.google.de/books?id=DqePfdz_x6gC&amp;amp;pg=PA74&amp;amp;lpg=PA74&amp;amp;dq=VCS%20pacman%20flimmer&amp;amp;source=bl&amp;amp;ots=FSRmjXWtKA&amp;amp;sig=FciPmru8sTMxIXd_15W8ve2rZvU&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=0ahUKEwjQ8ofV1YzaAhXB6CwKHTAuDAwQ6AEIKzAA#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pac Man as an example&lt;/a&gt; for this technique, as it was eventually the first game to do so. In certain situations all 4 ghosts may run in the same horizontal line. Displaying 4 sprites in the same line is something the VCS couldn't do by default. There are only two 'Player' objects. Since Pacman could also be on the same line, he always got one, the other got shared by all 4 ghosts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Asteroids had the same problem. If you look close, there can be up to 4 asteroids in one line, plus the ship. Much like Pac-Man. They did eliminate the players need for a 'Player' object by using the background graphics for the ship, so now 4 asteroids could share the two objects by drawing two in each frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;And why are the top lines displayed in both frames?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cause there is nothing else to do. Generation of these big numbers is solely done by the background graphics. That's just 3 bytes to load every line - or more like every 4th line or so. So there is no time constraint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also having bold static elements at the top or bottom makes games with lots of objects more acceptable to the human eye. But that's a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So, why is it still playable?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same way as on analogue TV - the human eye is way too slow to really separate the frames. It just gets more and more flashy. In fact, the way your new hardware composes the always two into one does reduce the effect by half. Games like Pac-Man (and Asteroids) will look way less annoying than on a classic screen. Except for the black lines that is.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;BTW: Thanks for your detailed description of the data path, as this helped a lot to identify the problem.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - There is a whole bunch of additional computing within the deinterlacer to make camera swipes work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - In fact, much of the hassles of early digital (LCD/Plasma) creation where around finding algorithms to make the displays more 'blurry'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - A must read for anyone. While somewhat technical, it's written for the average reader and quite entertaining. &lt;a href=&quot;https://mitpress.mit.edu/books/racing-beam&quot; rel=&quot;nofollow noreferrer&quot;&gt;Go and get it.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-08-31T23:55:15.773" LastActivityDate="2018-08-31T23:55:15.773" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="6089" PostTypeId="2" ParentId="6087" CreationDate="2018-03-27T00:03:45.980" Score="4" Body="&lt;p&gt;On the 2600 vertical resolution — the number of unique pixels shown in a column — is the game author's choice. It can be anything less than the upper bound imposed by the video signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2600 has no DMA. It's TIA video chip cannot fetch anything. The entire display is push. The CPU pushes a new line of background and/or it pushes a new line of sprite data whenever it chooses. That line is then repeated until it receives something else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's perfectly possible to push any vertical resolution less than or equal to the number of lines in the display, and there's no need to be consistent across the frame. Every 2600 game consists primarily of a display kernel, which is a list of things for the CPU to push to generate a frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The programmer is even responsible for ensuring proper entry and exit from vertical sync which in practice leads to &lt;a href=&quot;http://www.digitpress.com/library/techdocs/vcs_scanlines.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;quite a lot of variability in the total number of lines per frame&lt;/a&gt; — despite Atari pushing for a standard 262, commercial NTSC titles of the era produce anything from 238 lines/frame to 290, neither of which is likely to be compatible with the complete range of televisions. A programmer could in theory produce interlaced video, making this a discussion of fields rather than frames, but no commercial titles did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely the only reason you'd likely see a difference in horizontal resolution is that the different layers are different resolutions. The background is 40 pixels across; sprites can be up to four times as dense, though you can display them at double or quadruple size, possibly reducing them to the same pixel density as the background.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-03-27T17:22:09.147" LastActivityDate="2018-03-27T17:22:09.147" CommentCount="19" ContentLicense="CC BY-SA 3.0" />
  <row Id="6090" PostTypeId="2" ParentId="944" CreationDate="2018-03-27T00:51:40.363" Score="0" Body="&lt;p&gt;The Vetusware abandonware site archives a copy of v3.12 of the vt52.sys driver.  I hesitate to link directly due to the somewhat uncertain legal nature of such sites, but it shouldn't be difficult to find should one want to.  &lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-03-27T00:51:40.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6091" PostTypeId="2" ParentId="6080" CreationDate="2018-03-27T08:25:38.960" Score="5" Body="&lt;p&gt;I'm afraid that with this: &quot;Produces decently-optimized machine code&quot; there will be no answer. Even contemporary cross-compilers (i.e. pc hosted) like sdcc or iar C produce miserably slow code for Z80 target.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-03-27T08:25:38.960" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6092" PostTypeId="1" CreationDate="2018-03-27T14:36:32.317" Score="6" ViewCount="827" Body="&lt;p&gt;Applied Engineering produced many advanced and unusual add-on devices for the Apple II product line. One of these was a 65C816 CPU card for the Apple IIe, which replaced the processor with a daughter card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware manual for the board:&#xA;&lt;a href=&quot;https://archive.org/details/AE_65816_16bit_Card_Software_Developers_Guide&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/details/AE_65816_16bit_Card_Software_Developers_Guide&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there any practical applications for this, or was it primarily just a novelty/toy for aspiring hardware engineers to play with?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the IIgs was based on the 65C816, programs from a IIgs would not necessarily run on this, since the AE board did not have the same ROM / toolbox routines, enhanced video, or other hardware. &lt;/p&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="6659" LastEditDate="2018-03-30T14:51:51.287" LastActivityDate="2018-04-05T13:35:48.850" Title="Practical uses for Applied Engineering 65C816 replacement for IIe?" Tags="&lt;apple-ii&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6093" PostTypeId="2" ParentId="6092" CreationDate="2018-03-27T14:54:00.910" Score="5" Body="&lt;p&gt;Simple answer: &lt;strong&gt;More RAM.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of flipping around Language Card and Aux Memory banks, the 65816 allowed (native) programs to address up to 16 MiB in an (almost) flat way. Programs no longer had to keep track with complicated addressing schemes about their data and (if larger than ~48 KiB) their program modules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side effect, using 16 Bit instructions could speed up the code a bit. While this isn't the same as having a way faster IIgs, it still adds - and simplifies programming again.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Were there any practical applications for this, or was it primarily just a novelty/toy for aspiring hardware engineers to play with?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The only real target where developer owning a maxed out IIe with some AE RAM Card. By buying the AE 65816 card they could go ahead and develop IIgs software while postponing the investment in a IIgs, which might have included the need for new drives and so on. It was a cheap intermediate solution for a few.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Inserting a 65802 was another common way to enable 65816 code for the Apple II. Even cheaper, but with a 65802 programs were still confined to the original 64Ki address space of the II, thus using the most important difference, large memory in 'flat' addressing was impossible.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4147" LastEditDate="2018-03-28T18:47:58.340" LastActivityDate="2018-03-28T18:47:58.340" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="6094" PostTypeId="2" ParentId="6092" CreationDate="2018-03-27T19:56:48.750" Score="3" Body="&lt;p&gt;Simple answer: &lt;strong&gt;Performance, and not more RAM&lt;/strong&gt;. ; - )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although some 16-bit options expanded RAM, the AE 65C816 16 Bit Card (&lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.apple2/4ir_au4zodM/yXyMY1eydecJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;which was not released commercially&lt;/a&gt;) connected to an &lt;em&gt;optional&lt;/em&gt; RAM card, one already used by existing applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main practical application would (eventually) have been running a more powerful development environment - e.g. Merlin 16 - to write software for the 8-bit Apple II series.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used Merlin 16+ on a IIgs for this purpose, but booting up GS/OS just to start Merlin was a pain. If you want to write IIgs software, you need a IIgs. But this card would've been fine for 8-bit software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even before the IIgs was released there were a number of options to upgrade existing Apple II computers with the 16-bit chips (65802 or 65816), in which case the only common ground would have been the 16-bit instructions - not more RAM - because only the products supporting the 24-bit addressing would provide that. It's obvious in retrospect that these fragmented products would remain a niche for development tools and tinkering, and that the IIgs would soon eclipse them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example the &lt;a href=&quot;https://archive.org/details/Open_Apple-Vol_2_No_07-AUG_1986&quot; rel=&quot;nofollow noreferrer&quot;&gt;August 1986 issue of Open-Apple&lt;/a&gt; lists these 16-bit options, two with RAM:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1. 65802 chip. No RAM benefits. $50.&#xA;2. Com Log Apple16 65816 Co-Processor Board. Onboard 256K RAM. $395.&#xA;3. Checkmate Technology MultiRAM EX 65816 Co-Processor Card. Optional RAM card. $189.&#xA;4. Applied Engineering 65C816 16 Bit Card. Optional RAM card. $159. (Not released.)&#xA;5. Checkmate Technology 65C816 upgrade for CX Board for //c. Requires CX Board. $119.95.&#xA;6. Applied Engineering Transwarp Card l6 bit option (65802). Requires Transwarp Card. $89.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Open-Apple also states that only three 16-bit capable assemblers were available at that time:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1. Merlin Pro&#xA;2. Orca/M&#xA;3. S.C Macro Assembler&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;These were all 8-bit applications that could assemble 16-bit code, but Merlin 16 (which required a 16-bit CPU) was already in beta when the above was published, so there was already a market for 16-bit //e or //c software. When it was released there is evidence that development productivity benefited from the 16-bit chips, and Roger Wagner Publishing &lt;a href=&quot;https://archive.org/details/now-available-merlin-8-16&quot; rel=&quot;nofollow noreferrer&quot;&gt;marketed 16-bit upgrade options without extra RAM to developers&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Apple IIe and IIc users can take advantage of [twice&#xA;  as fast] Merlin 16 assemblies, a more powerful Full Screen Editor and&#xA;  a newer, [five times faster] and more versatile Linker &#xA;  just by swapping their existing 6502 or 65C02 microprocessor&#xA;  with a replacement 65802 chip, available also from Roger Wagner&#xA;  Publishing, Inc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And ...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By special arrangement with Applied Engineering, Inc., Roger Wagner&#xA;  Publishing is offering the powerful and popular Transwarp Accelerator&#xA;  Card for the Apple IIe with a 65802 microprocessor already installed.&#xA;  Using this card, Apple IIe owners can run Merlin 16 and assemble&#xA;  programs faster than the Ilgs, in fact, four times faster than a&#xA;  standard IIe running Merlin 8&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2018-03-29T23:31:40.610" LastActivityDate="2018-03-29T23:31:40.610" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="6095" PostTypeId="1" AcceptedAnswerId="6108" CreationDate="2018-03-28T11:42:00.260" Score="85" ViewCount="33319" Body="&lt;p&gt;When reading some other questions about compiling C for the Z80, &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/223/how-much-benefit-should-be-expected-on-a-more-advanced-compiler-for-z80-r800-bas&quot;&gt;How much benefit should be expected on a more advanced compiler for z80/r800 based computers?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6080/native-c-compiler-for-sinclair-zx-spectrum&quot;&gt;Native C compiler for Sinclair ZX Spectrum&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I am getting the impression that it is hard to compile C to Z80 and end up with well-optimised code. Is that the case, and why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know more about the 6502. Here are some examples that shows why C fits 6502 badly:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;An array in C is indexed by an integer type. The 6502 is pretty quick at indexing arrays, but unfortunately only if the index is one byte wide. So something like &lt;code&gt;strcmp&lt;/code&gt; or &lt;code&gt;strlen&lt;/code&gt; might need to actually do a 16-bit add per character.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A stack is an ideal data structure for passing function parameters. The stack's limited to 256 bytes and the 6502 has rather limited stack addressing modes as compared to the PDP-11, so cc65 uses a second stack, implemented in software, to pass parameters IIRC.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;From what I understand of the Z80 these two examples do not apply. Z80 has these index registers and a much roomier stack. So what are the reasons C fits badly?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Summary of answers given thus far&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6095/why-do-c-to-z80-compilers-produce-poor-code/6100#6100&quot;&gt;Array indexing is inefficient&lt;/a&gt;&lt;/strong&gt; since there's no reasonable &lt;code&gt;base + offset&lt;/code&gt; addressing mode that can use a variable offset, which means the compiler needs to generate code to do the address calculation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Similarly, it's &lt;strong&gt;awkward to save and restore function arguments on the stack&lt;/strong&gt; because there's no &lt;code&gt;stackpointer + offset&lt;/code&gt; addressing mode. The &lt;strong&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6095/why-do-c-to-z80-compilers-produce-poor-code/6100#6100&quot;&gt;same goes for the local variables&lt;/a&gt;&lt;/strong&gt; of non-leaf functions.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6098/576&quot;&gt;Paucity of truly general purpose registers&lt;/a&gt;&lt;/strong&gt;. Most registers have specific uses which complicates register allocation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The ISA makes it &lt;strong&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6104/576&quot;&gt;difficult to mix 8-bit and 16-bit operations&lt;/a&gt;&lt;/strong&gt;. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-07-16T09:56:23.737" LastActivityDate="2018-10-02T22:32:42.730" Title="Why do C to Z80 compilers produce poor code?" Tags="&lt;z80&gt;&lt;c&gt;&lt;compilers&gt;" AnswerCount="8" CommentCount="12" FavoriteCount="29" ContentLicense="CC BY-SA 4.0" />
  <row Id="6096" PostTypeId="2" ParentId="6095" CreationDate="2018-03-28T15:48:23.770" Score="8" Body="&lt;p&gt;The answer to this question must be opinion-based anyway, and written by the specialist who was designing Z80 C compiler. I will give it a try though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used &lt;a href=&quot;http://msx.hansotten.com/software/msx-c-manual/&quot; rel=&quot;noreferrer&quot;&gt;MSX-C compiler&lt;/a&gt; made by &lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII_Corporation&quot; rel=&quot;noreferrer&quot;&gt;ASCII&lt;/a&gt; together with Microsoft back in old 80-90's days; the platform was MSX. I do not recall if it used stack to pass arguments, however it would be logical given compiler can use IX and IY assigning them to stack pointer and addressing arguments by bytes through (IX+n). I am more than sure Turbo-C version 2.0 for PC XT/AT I have used back in 90s was doing the same using register BP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One remarkable thing I recall from using MSX-C was that its output was not Z80 code, but 8080 code. Most probably compiler was originally designed for 8080, and then just ported to Z80, thus was not aware about IX and IY registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding (IX+n) and (IY+n) commands. N is signed byte, thus you can address -128 to +127 from the base of the index register. Then, &lt;code&gt;n&lt;/code&gt; must be a constant, thus changing it is possible within RAM by replacing byte of the executable code, which is another level of the optimization which most probably was not considered those old days.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So what are the reasons C fits badly&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;My personal opinion:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For old compiler software developed back on old days, compiler developers were (1) focusing on reliability of the compiler's job; (2) speed of compilation; also keeping in mind that (3) register set is not so big to have much optimization with it.&lt;/li&gt;&#xA;&lt;li&gt;For new compiler software it must be either developed by the real enthusiasts who are also experts in compilers (that is, to my knowledge, special field in computing), or have commercial interest (questionable if it is possible though these days).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So what are the reasons C fits badly&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In general I would like to see example. MSX-C did job in four steps (yes, four!).&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;CF.COM was parsing the C code, creating some output file;&lt;/li&gt;&#xA;&lt;li&gt;CG.COM was &quot;code generator&quot; which generated assembly language text file;&lt;/li&gt;&#xA;&lt;li&gt;M80.COM was creating .REL object file, which then&lt;/li&gt;&#xA;&lt;li&gt;linked by the L80 with other object code (e.g. libraries).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There're pros and cons for this architecture, and there should be also historical reasons. CF and CG are about 30-40KB each, thus you can not &quot;merge&quot; them into one executable because it will then simply not fit into the RAM (not talking about work area); M80 used human-readable assembly text files, thus programmer had an opportunity to look at assembly code and get an idea what real executable could look like and what s/he can do to improve it, or inject own assembler routines at the linking stage.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastEditorUserId="6659" LastEditDate="2018-03-29T20:16:32.237" LastActivityDate="2018-03-29T20:16:32.237" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6097" PostTypeId="1" CreationDate="2018-03-28T16:03:23.023" Score="8" ViewCount="176" Body="&lt;p&gt;I have a Master 128 that I am hoping to revisit now that I have retired. &#xA;It hasn't been used for about 25 years so I was wondering what would be the likelyhood of it working.&#xA;I am not a computer/electronics expert, but was once a very keen user of the BBC micro and BBC Basic. I have a large collection of educational software on 5.25&quot; floppy discs.&#xA;Are there any safety and/or other concerns I should be aware of before trying to use the kit?&lt;/p&gt;&#xA;" OwnerUserId="8302" LastActivityDate="2018-03-28T16:03:23.023" Title="BBC Master 128 not been switched on for over 20 years" Tags="&lt;bbc-micro&gt;" AnswerCount="0" CommentCount="7" ClosedDate="2018-03-29T19:53:18.967" ContentLicense="CC BY-SA 3.0" />
  <row Id="6098" PostTypeId="2" ParentId="6095" CreationDate="2018-03-28T16:51:35.247" Score="52" Body="&lt;p&gt;The main downside of &quot;historic&quot; CPU's (non?)-suitability for C programs is the lack of capability to form more than one register into an address without using the ALU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most more modern CPUs can use base + index + offset register addressing modes to address complex data structures like arrays and structures - The Z80 needs to painstakingly go through the 4-bit ALU to add an offset + an index to a base register like HL - most modern CPUs use separate address calculation instances for the various addressing modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another reason is the lack of real multipurpose registers - You simply cannot do everything with every register in the Z80 - Its pure register count is somewhat impressive, but using the alternate register set is probably too complicated for a compiler, and thus the possible choice of registers for a compiler is limited. This is even more valid for the 6502 that has even fewer registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet another downside is: You can't get a decently modern C compiler for the Z80 - &lt;em&gt;clang&lt;/em&gt; or &lt;em&gt;GCC&lt;/em&gt; with their aggressive optimizers don't bother for this old CPUs, and hobbyists' produces are just not that sophisticated. Even if you could, GCC and clang concentrate to optimize for &lt;em&gt;code locality&lt;/em&gt;, something a CPU without a cache can't even benefit from, but really boosts a modern CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally don't think (even non-optimal) compilers would be useless for old CPUs - There is always a lot of stuff in a program that isn't fun to do anyhow and just tedious to write in assembler (and after all, the only reason why we would still do this would be fun, wouldn't it?) - So I tend to write the boring, non-time-critical parts of a program in C, the other, the &quot;fun&quot; part in assembly. Perfect of both worlds.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-03-28T19:43:35.680" LastActivityDate="2018-03-28T19:43:35.680" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6099" PostTypeId="2" ParentId="6095" CreationDate="2018-03-28T17:38:33.713" Score="36" Body="&lt;p&gt;Simple answers one easily gets to this question are &lt;strong&gt;The Z80 Sucks&lt;/strong&gt; and &lt;strong&gt;C Sucks&lt;/strong&gt; - depending on the side someone is on. While they are of course, untrue (*1), there are real issues. A major argument for both sides is that&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;C is at core tied to a PDP-11(ish) CPU architecture and the Z80 isn't one.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Z80 is a rather special CPU, created with a focus on maxing abilities, not beauty.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;C is a language without, or at best a very minimum runtime (*2).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All these points are linked. Like the question mentioned, C implies a simple and rather symmetric pointer model which is originated in what the PDP-11 offered. This includes the direct conversion to a memory address which in turn allowed to skip the creation of a more sophisticated data model and the use of pointers to realize functions that would otherwise be handled by some language runtime.&lt;/p&gt;&#xA;&lt;p&gt;Now the Z80 is (like its predecessor, the 8080) quite able to perform everything needed. Due to its (inherited) structure of a single memory pointer it does, however, need to replace a single (PDP-11 based) C-operation with several machine instructions. So far not a real issue. Except, when an assembly programmer looks at the result, he immediately sees Z80 specific ways to improve the result - like holding two pointers and exchanging HL/DE when needed. That's hard to 'understand' for a C compiler, as it is based on semantics - the knowledge 'why' something is done - not just being told 'how' it's done.&lt;/p&gt;&#xA;&lt;h2&gt;It is not strictly a C problem,&lt;/h2&gt;&#xA;&lt;p&gt;but an issue with all high-level languages. They compile best to a simple symmetric CPU model with a set of equal resources, offering exactly the operations the abstraction layer needs. The higher the language's abstraction is, the better the underlying 'CPU' level can perform. That's why the UCSD P-Code System did perform so well across many platforms. The offering of its virtual CPU was exactly what a compiler wants. Despite being an interpreter at the core, performance was, on many machines, comparable to native code generated from the same language source. The reason for this platform optimization lies within the interpreter. Here, each rather abstract function gets performed by optimized routines. A string move might have the same invocation (due to the P-Code) across all platforms, but its implementation is CPU specific, using all advantages the specific CPU offers - like the mentioned working of 8-bit register pointers and only increasing memory base pointers every 256th cycle on a 6502. Operating on a greater abstraction in a language allows the compiler and/or runtime do employ greater optimization than fixing low level-detail within the source code.&lt;/p&gt;&#xA;&lt;p&gt;C, in turn, exaggerates this by being tied to very specific low-level operations and using them all over and in every application source. Much without an intermediate runtime layer. In this respect, C is way less a high -level language than others, and way more prone to CPU specific issues.&lt;/p&gt;&#xA;&lt;h2&gt;Learning from History&lt;/h2&gt;&#xA;&lt;p&gt;Looking back (*3), the last 30 years do show two developments to bridge the problems of less than 'simple' CPUs and too simple languages. The 8086 family is not only an important, but eventually the best, example for changes in CPUs, as it is a not a simple CPU at first. Sure, compared to the Z80, it is much more powerful and symmetric - still, not as simple as C assumes it to be.&lt;/p&gt;&#xA;&lt;p&gt;Over time, the x86 got not only instruction set additions such as scaling factors to move array indexing calculations into microcode, but the whole CPU got redesigned in a way that instruction sequences are analyzed, reordered and reformed to make C-like operations perform better. Bottom Line, the 8086 became more PDP-11ish. One way to close the gap.&lt;/p&gt;&#xA;&lt;p&gt;At the same time, the C Standard development worked hard to define a common set of data types and functions thereon that now can be used by the compiler to get a glimpse of the &lt;em&gt;why&lt;/em&gt; instead of the &lt;em&gt;how&lt;/em&gt;. These source statements (may) no longer be directly translated into function calls, but be used by the compiler to generate different, more specialized, target optimized code. In the end, a way to make C a bit more high level than originally intended.&lt;/p&gt;&#xA;&lt;h3&gt;What's the Lesson for Z80 Users?&lt;/h3&gt;&#xA;&lt;p&gt;Well, one might be not using C at all :) (*4)&lt;/p&gt;&#xA;&lt;p&gt;Another, more practical, way is to go the same path that standard C is doing: Use more task-specific high-level functions and optimize them (in assembly) for the Z80.&lt;/p&gt;&#xA;&lt;p&gt;The last would be to optimize existing C compilers for the Z80 to generate a more CPU-embracing code structure. For example with different ways of parameter passing depending on functions' use and so on.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;BTW: The 6502's short call stack is often cited here, but there is no relation to C. C doesn't require the usage of the return stack for parameters. It can as well be a separate parameter stack. In fact, strictly speaking, C doesn't require a stack at all.&lt;/p&gt;&#xA;&lt;p&gt;C does require a way of bookkeeping for nested calls, some way of parameter passing (with undefined length) and a way to handle local variables. How this is done is up to the compiler (or its creator). Using some hardware stack is one (simple) way, but not necessarily the best with a given CPU.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - As a 6502 and Assembly guy I do feel deep down they are not false :))&lt;/p&gt;&#xA;&lt;p&gt;*2 - No, the C-LIB isn't a runtime as part of the language: it is a collection of standard functions, itself (almost) completely written in C, and compiled/linked at compile time.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Looking back is rather rare in IT, but we are Retrocomputing - we not only play nostalgia but also try to learn from history, don't we?&lt;/p&gt;&#xA;&lt;p&gt;*4 - A serious choice could be &lt;a href=&quot;http://www.adaic.org/learn/materials/intro/&quot; rel=&quot;noreferrer&quot;&gt;Ada&lt;/a&gt;. Due its declarative nature, code generation can be way better optimized for individual CPUs. After all, it was one of the main goals of Ada's development to be able to produce good code no only for mainframes but also for little bastards like an 8048. There have been several special Z80 compilers during the 1980s; most prominent may be &lt;a href=&quot;http://www.rrsoftware.com/&quot; rel=&quot;noreferrer&quot;&gt;RR Software&lt;/a&gt;'s &lt;a href=&quot;http://www.rrsoftware.com/html/prodinf/janus83/j-ada83.htm&quot; rel=&quot;noreferrer&quot;&gt;Janus/Ada 83&lt;/a&gt;. While no longer mentioned, there was also a Z80 version.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-06-20T14:03:41.687" CommentCount="32" ContentLicense="CC BY-SA 4.0" />
  <row Id="6100" PostTypeId="2" ParentId="6095" CreationDate="2018-03-28T19:45:44.450" Score="57" Body="&lt;p&gt;If you try translating C into Z80, you'll see that Z80 index registers and stack don't behave quite as you expect. So, let us begin with&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Arrays&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose you have a standard C construction&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int c[10];&#xA;for (int i=0; i&amp;lt;10; i++)&#xA;    c[i]=0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Your compiler is pretty much required to use 16-bit value for i. So, you have &amp;amp;c somewhere, maybe even in your index register!, so let us have IX=&amp;amp;c. However, the operations with index registers only allow constant offsets, which are also single signed bytes. So, you do not have a command to read from (IX+16-bit value in a register). Thus, you would end up using things like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld ix,c_addr            ; the array address&#xA;ld de,(i_addr)          ; the counter value&#xA;add ix,de&#xA;ld a,0&#xA;ld (ix+0),a             ; 14+20+15+7+19 = 75t (per byte)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Most compilers will output code that is pretty close to what I wrote. Actually, experienced Z80 programmers know - IX and IY are hopeless for most operations with memory - they are far too slow and awkward. A good compiler writer would probably make his/her compiler do something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld hl,c_addr            ; the array address&#xA;ld de,(i_addr)          ; the counter value&#xA;add hl,de&#xA;ld a,0&#xA;ld (hl),a               ; 10+20+11+7+7 = 55t (per byte)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which is 25% faster without breaking a sweat. Nevertheless, this is far from great Z80 code even though I made my i variable static to make my - and the compiler's - life easier!.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good Z80 programmer would simply write the equivalent loop as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         ld hl,c_addr&#xA;         ld b,10&#xA;         xor a&#xA;loop:    ld (hl),a&#xA;         inc hl&#xA;         djnz loop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The actual full loop would take (7+6+13)*10-5 = 255/10 ~ 25.5 t-states per byte. And this is really not optimized code, this is a kind of code one writes where optimization does not matter. One can do partial unrolling, one can make sure that array c does not cross 256 byte boundaries and replace INC HL by INC L. The fastest filling is actually done using the stack. In other words, Z80 does not fit the C paradigm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, one can write a similar loop in C (using a pointer instead of an array, using countdown loop instead of counting up), which would then increase chances of it being translated into a decent Z80 code. However, this would not be you writing a regular C code; this would be you trying to work around limitations of C when it is meant to be translated into Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me give you another example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Local variables.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Raffzahn is correct when he says that one does not have to use stack for local variables. But there must be a stack of some kind if you want recursive functions. So let us try to do it the PC way, via the stack. How do you implement a call to something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int inc(int x) {&#xA;  return x+1;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Suppose even that current value for x is in one of your registers, say HL. So, you'd have something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;push hl&#xA;call addr_inc&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How do we actually recover the address (and value) of x? It is stored at SP+2. However, we have to be careful with SP, because we want to return back to the calling program, so maybe we do something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;addr_inc:   ld hl,2&#xA;            add hl,sp&#xA;            ld e,(hl)&#xA;            inc hl&#xA;            ld d,(hl)               ; 10+11+7+6+7 = 41t&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now we have x in DE. You can see how much work this was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, when people complain about C compilers for Z80, they do not mean it would not be possible to do. It is something else entirely. In any kind of programming, there are patterns, some are good, some are not so good. My point is, a lot of things that C does are simply bad patterns from the point of view of Z80 coding. One simply does not do things on Z80 that C pretty much requires you to be fluent at.&lt;/p&gt;&#xA;" OwnerUserId="5039" LastEditorUserId="5039" LastEditDate="2018-10-02T22:32:42.730" LastActivityDate="2018-10-02T22:32:42.730" CommentCount="29" ContentLicense="CC BY-SA 4.0" />
  <row Id="6102" PostTypeId="2" ParentId="6095" CreationDate="2018-03-29T15:16:07.363" Score="9" Body="&lt;p&gt;The Motorola 6809 is probably the only legacy CPU of the 80's&#xA;which is well suited for C compiler, thanks to several advanced&#xA;features (for the time) :&#xA;- orthogonal instruction set&#xA;- rich addressing mode&#xA;- hardware multiplier, to quickly compute addresses&#xA;- position independant code&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This kind of CPU (and the improved 6309) can be find in&#xA;some home computers (Vectrex, Tandy Coco, Thomson, ...)&#xA;and a lot of embedded systems.&lt;/p&gt;&#xA;" OwnerUserId="8309" LastActivityDate="2018-03-29T15:16:07.363" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6103" PostTypeId="2" ParentId="6095" CreationDate="2018-03-29T20:10:01.590" Score="9" Body="&lt;p&gt;Well, I personally find it annoying reading so many comments here about what modern compilers can and cannot easily do. It is terrible what wishful thinking does to your brain. OK. Let me show why people who still remember how to code Z80 hate C compilers. This is a trivial C code that I was hoping to compile:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int i,data[10];&#xA;main() {&#xA;  for (i=0; i&amp;lt;10; i++)&#xA;    data[i]=0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is the Z88DK output using &lt;code&gt;zcc -O3 -a trivial.c&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;._main&#xA;    ld  hl,0    ;const              ; i=0&#xA;    ld  (_i),hl&#xA;    jp  i_5&#xA;.i_3&#xA;    ld  hl,(_i)                     ; i++&#xA;    inc hl&#xA;    ld  (_i),hl&#xA;    dec hl&#xA;.i_5&#xA;    ld  hl,(_i)                     ; if i&amp;gt;=10 GOTO i_4&#xA;    ld  de,10   ;const&#xA;    ex  de,hl&#xA;    call    l_lt&#xA;    jp  nc,i_4&#xA;&#xA;    ld  hl,_data                    ; HL = data + i&#xA;    push    hl&#xA;    ld  hl,(_i)&#xA;    add hl,hl&#xA;    pop de&#xA;    add hl,de&#xA;&#xA;    ld  de,0    ;const              ; (HL) = DE&#xA;    ex  de,hl&#xA;    call    l_pint&#xA;    jp  i_3&#xA;.i_4&#xA;    ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am not counting t-states and not including the code in the case when &lt;code&gt;i&lt;/code&gt; and &lt;code&gt;data[10]&lt;/code&gt; are declared as &lt;code&gt;char&lt;/code&gt;, because I do not have a goal to embarrass the compiler authors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OK, maybe SDCC can do better? At least it can deal with char data type in a sane way. So we create&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;char i,data[10];&#xA;main() {&#xA;  for (i=0; i&amp;lt;10; i++)&#xA;    data[i]=0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and SDCC compiles it using &lt;code&gt;sdcc -mz80 --opt-code-speed&lt;/code&gt; into&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;trivial.c:21: for (i=0; i&amp;lt;10; i++)&#xA;    ld  hl,#_i + 0&#xA;    ld  (hl), #0x00&#xA;    ld  bc,#_data+0&#xA;00102$:&#xA;;trivial.c:22: data[i]=0;&#xA;    ld  hl,(_i)&#xA;    ld  h,#0x00&#xA;    add hl,bc&#xA;    ld  (hl),#0x00&#xA;;trivial.c:21: for (i=0; i&amp;lt;10; i++)&#xA;    ld  iy,#_i&#xA;    inc 0 (iy)&#xA;    ld  a,0 (iy)&#xA;    sub a, #0x0a&#xA;    jr  C,00102$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, the addition of char to pointer is done in 16 bits, the index registers are used for some unknown reason, but otherwise this at least begins to look like an assembly program. So, if I ignore the preamble and just count t-states per iteration of the main loop from &lt;code&gt;00102$&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;16+7+11+10 + 14+23+19+7+12 = 119 t-states per byte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As a comparison, this is what a relatively inefficient assembly code may look like (I wrote this very closely to what my C for-loop implies, so that compiler at least has a chance of getting this right):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         ld hl,data_addr&#xA;         ld a,0&#xA;loop:    ld (hl),0&#xA;         inc hl&#xA;         inc a&#xA;         cp 10&#xA;         jr nz,loop    ; 10+6+4+7+12 = 39t&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If counter is allowed to go in the opposite direction, a similar loop in my other answer to this question does the job in 25.5 t-states per byte. The fastest Z80 code for memory filling can average below 10 t-states per byte, but this is not an exercise in memory-filling, this is a simple test of what some trivially simple code tends to be compiles into.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, this is my brutally honest answer to your question why people like myself say that C compilers for Z80 produce poor code: BECAUSE THEY DO.&lt;/p&gt;&#xA;" OwnerUserId="5039" LastEditorUserId="7946" LastEditDate="2018-06-20T13:14:58.237" LastActivityDate="2018-06-20T13:14:58.237" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6104" PostTypeId="2" ParentId="6095" CreationDate="2018-03-30T04:03:26.590" Score="9" Body="&lt;p&gt;While the Z80 is definitely an 8-bit processor rather than a 16-bit one, the instruction set makes some operations easier with 16-bit values than 8-bit values.  For example, given something like: a=b+c+d; with all variables being 16 bit types and having static duration could be realized as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ld  hl,(_b)&#xA;    ld  de,(_c)&#xA;    add hl,de&#xA;    ld  de,(_d)&#xA;    add hl,de&#xA;    ld (_a),hl&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but trying to do it as 8 bits would require a different approach:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ld  a,(_b)&#xA;    ld  hl,_c&#xA;    add a,(hl)&#xA;    ld  hl,_d&#xA;    add a,(hl)&#xA;    ld  (_e),a&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's possible to generate efficient code if all operations use 8-bit math or if all use 16-bit math, but 8-bit and 16-bit operations require totally different approaches, and trying to combine them gets awkward (e.g. if &lt;code&gt;b&lt;/code&gt; and &lt;code&gt;c&lt;/code&gt; were 16-bit values, but &lt;code&gt;d&lt;/code&gt; was an 8-bit one, the most efficient way to add &lt;code&gt;d&lt;/code&gt; would be to load it and the following byte into DE, then clear D, and then add DE to HL).  If a compiler wants to try to handle 8-bit math efficiently, it will have to use code generation logic that's very different from what's needed for 16-bit math, and a lot of compiler writers aren't going to want to massively increase the size of their code generator for that.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="574" LastEditDate="2018-09-17T15:37:30.170" LastActivityDate="2018-09-17T15:37:30.170" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6105" PostTypeId="2" ParentId="4698" CreationDate="2018-03-30T10:44:44.173" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was there ever a commercially available hobbyist/teaching computer with the ability to single-step the processor?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The first Z80 hardware book by &lt;a href=&quot;https://en.wikipedia.org/wiki/Build_Your_Own_Z80_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Steve Ciarcia&lt;/a&gt; describes a circuit to provide single step capability. This is discussed in section 4, and a circuit provided in Figure 4.5. Most of the Z80 computers could do single stepping if only to help with debugging.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Maybe a Z80-based machine?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;At the moment, there are two machines, to my knowledge, that can do single stepping and are available for hobbyist / teaching purposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://rc2014.co.uk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RC2014&lt;/a&gt; with the optional Scott Baker &lt;a href=&quot;http://www.smbaker.com/z80-retrocomputing-5-single-stepper-for-rc2014&quot; rel=&quot;nofollow noreferrer&quot;&gt;Single Stepper&lt;/a&gt; is the first option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other option is the &lt;a href=&quot;https://github.com/feilipu/yaz180&quot; rel=&quot;nofollow noreferrer&quot;&gt;YAZ180&lt;/a&gt; for which printed circuit boards can be obtained on &lt;a href=&quot;https://www.tindie.com/products/feilipu/yaz180-pcb-modern-single-board-z80-computer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tindie&lt;/a&gt;. The YAZ180 has TIL311 Hexadecimal LEDs which show address and data contents when single stepping. The &lt;a href=&quot;https://github.com/feilipu/yaz180/blob/master/pcb/V21_20171011/YAZ180_V21_Schematic.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;schematic&lt;/a&gt; shows the circuit implemented.&lt;/p&gt;&#xA;" OwnerUserId="8313" LastActivityDate="2018-03-30T10:44:44.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6106" PostTypeId="2" ParentId="6092" CreationDate="2018-03-30T14:43:55.913" Score="3" Body="&lt;p&gt;I seem to recall there was some graphic spreadsheet program that would take advantage of an AE 65816 16 bit card if one was installed.  It was advertised in Apple II magazines back in the day (VIP Professional by Applied Engineering).  I personally have a Laser 128EX with a 65802 installed.  I had to write my own software to take advantage of its native mode capabilities which resulted in faster, denser code.  I was impressed with the smooth and fast scrolling in an editor I used for programming.  The disadvantage was that in order to use any firmware, emulation mode had to be switched in.  Firmware in this sense means the 6502 ROM routines for input, output etc that the computer originally came installed.  IRQs could be used in native mode if upper ram was switched in and native mode handler was called.  Fun times...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers!&#xA;Andy&lt;/p&gt;&#xA;" OwnerUserId="8317" LastEditorUserId="8317" LastEditDate="2018-04-05T13:35:48.850" LastActivityDate="2018-04-05T13:35:48.850" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6107" PostTypeId="1" CreationDate="2018-03-30T18:22:48.917" Score="4" ViewCount="85" Body="&lt;p&gt;On my old Compaq Contura 3/20 I can adjust the contrast, but there 's no effect using the brightness button. Is there something to do on this?&lt;/p&gt;&#xA;" OwnerUserId="8319" LastEditorUserId="6659" LastEditDate="2018-03-30T19:01:50.663" LastActivityDate="2018-03-30T19:13:01.757" Title="No Brightness Controll on a Compaq Contura 3/20 Laptop" Tags="&lt;screen&gt;&lt;compaq&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6108" PostTypeId="2" ParentId="6095" CreationDate="2018-03-30T18:29:57.333" Score="58" Body="&lt;p&gt;Quite often people don't know how to use the compilers or don't understand fully the consequences of code they write.  There is optimization going on in the z80 c compilers but it's not as complete as, say, gcc.  And I often see people fail to turn up the optimization when they compile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an example here in introspec's post that I am not allowed to comment on due to reputation points:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;char i,data[10];&#xA;&#xA;void main(void) &#xA;{&#xA;  for (i=0; i&amp;lt;10; i++)&#xA;    data[i]=0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are lots of problems with this code that he is not considering.  By declaring i as char, he's possibly making it signed (that is the compiler's discretion).  That means, in comparisons, the 8-bit quantity is sign extended before being compared because normally, unless you specify in code properly, the c compiler may promote to ints before doing those comparisons.  And by making it global, he makes sure the compiler cannot hold the for-loop index in a register inside the loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two c compilers in z88dk.  One is sccz80 which is the most advanced iteration of Ron Cain's original compiler from the late 70s; it's mostly C90 now.  This compiler is not an optimizing compiler - it's intention is to generate small code instead.  So you will see many compiler primitives being carried out in subroutine calls.  The idea behind it is that z88dk provides a substantial c library that is written entirely in asm language so the c compiler is intended to produce glue code while the execution time is spent in hand-written assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other c compiler is a fork of sdcc called zsdcc.  This one has been improved on and produces better &amp;amp; smaller code than sdcc itself does.  sdcc is an optimizing compiler but it tends to produce larger code than sccz80 and overuses the z80's index registers.  The version in z88dk, zsdcc, fixes many of these sorts of issues and now produces comparable code size to sccz80 when the --opt-code-size switch is used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what I get for the above when I compile using sccz80:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;zcc +zx -vn -a -clib=new test.c&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(the -O3 switch is for code size reduction but I prefer the default -O2 most of the time)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;._main&#xA;    ld  hl,0    ;const&#xA;    ld  a,l&#xA;    ld  (_i),a&#xA;    jp  i_4&#xA;.i_2&#xA;    ld  hl,_i&#xA;    call    l_gchar&#xA;    inc hl&#xA;    ld  a,l&#xA;    ld  (_i),a&#xA;    dec hl&#xA;.i_4&#xA;    ld  hl,_i&#xA;    call    l_gchar&#xA;    ld  de,10   ;const&#xA;    ex  de,hl&#xA;    call    l_lt&#xA;    jp  nc,i_3&#xA;    ld  hl,_data&#xA;    push    hl&#xA;    ld  hl,_i&#xA;    call    l_gchar&#xA;    pop de&#xA;    add hl,de&#xA;    ld  (hl),#(0 % 256)&#xA;    ld  l,(hl)&#xA;    ld  h,0&#xA;    jp  i_2&#xA;.i_3&#xA;    ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here you see the subroutine calls for compiler primitives and the fact the compiler is forced to use memory to hold the for-loop index.  &quot;l_lt&quot; is a signed comparison.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A zsdcc compile with optimization turned up:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;zcc +zx -vn -a -clib=sdcc_iy -SO3 --max-allocs-per-node200000 test.c&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;_main:&#xA;    ld  hl,_i&#xA;    ld  (hl),0x00&#xA;l_main_00102:&#xA;    ld  hl,(_i)&#xA;    ld  h,0x00&#xA;    ld  bc,_data&#xA;    add hl,bc&#xA;    xor a,a&#xA;    ld  (hl),a&#xA;    ld  hl,_i&#xA;    ld  a,(hl)&#xA;    inc a&#xA;    ld  (hl),a&#xA;    sub a,0x0a&#xA;    jr  C,l_main_00102&#xA;    ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;By default char is unsigned in zsdcc and it's noticed that the comparison &quot;i&amp;lt;10&quot; can be done in 8-bits.  C rules say both sides should be promoted to int but it's ok not to do that if the compiler can figure out the comparison can be equivalently done another way.  When you don't specify that your chars are unsigned, this promotion can lead to insertion of sign extension code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I now make the char explicitly unsigned and declare i inside the for-loop:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;unsigned char data[10];&#xA;&#xA;void main(void)&#xA;{&#xA;  for (unsigned char i=0; i&amp;lt;10; i++)&#xA;    data[i]=0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;sccz80 does this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;zcc +zx -vn -a -clib=new test.c&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;._main&#xA;    dec sp&#xA;    pop hl&#xA;    ld  l,#(0 % 256)&#xA;    push    hl&#xA;    jp  i_4&#xA;.i_2&#xA;    ld  hl,0    ;const&#xA;    add hl,sp&#xA;    inc (hl)&#xA;.i_4&#xA;    ld  hl,0    ;const&#xA;    add hl,sp&#xA;    ld  a,(hl)&#xA;    cp  #(10 % 256)&#xA;    jp  nc,i_3&#xA;    ld  de,_data&#xA;    ld  hl,2-2  ;const&#xA;    add hl,sp&#xA;    ld  l,(hl)&#xA;    ld  h,0&#xA;    add hl,de&#xA;    ld  (hl),#(0 % 256 % 256)&#xA;    ld  l,(hl)&#xA;    ld  h,0&#xA;    jp  i_2&#xA;.i_3&#xA;    inc sp&#xA;    ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The comparison is now 8-bit and no subroutine calls are used.  However, sccz80 cannot put the index i into a register - it does not carry enough information to do that so it instead makes it a stack variable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same for zsdcc:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;zcc +zx -vn -a -clib=sdcc_iy -SO3 --max-allocs-per-node200000 test.c&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;_main:&#xA;    ld  bc,_data+0&#xA;    ld  e,0x00&#xA;l_main_00103:&#xA;    ld  a, e&#xA;    sub a,0x0a&#xA;    ret NC&#xA;    ld  l,e&#xA;    ld  h,0x00&#xA;    add hl, bc&#xA;    ld  (hl),0x00&#xA;    inc e&#xA;    jr  l_main_00103&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Comparisons are unsigned and 8-bit.  The for loop variable is kept in register E.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about if we walk the array instead of indexing it?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;unsigned char data[10];&#xA;&#xA;void main(void)&#xA;{&#xA;  for (unsigned char *p = data; p != data+10; ++p)&#xA;      *p = 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;zcc +zx -vn -a -clib=sdcc_iy -SO3 --max-allocs-per-node200000 test.c&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;_main:&#xA;    ld  bc,_data&#xA;l_main_00103:&#xA;    ld  a, c&#xA;    sub a,+((_data+0x000a) &amp;amp; 0xFF)&#xA;    jr  NZ,l_main_00116&#xA;    ld  a, b&#xA;    sub a,+((_data+0x000a) / 256)&#xA;    jr  Z,l_main_00105&#xA;l_main_00116:&#xA;    xor a, a&#xA;    ld  (bc), a&#xA;    inc bc&#xA;    jr  l_main_00103&#xA;l_main_00105:&#xA;    ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The pointer is held in BC, the end condition is a 16-bit comparison and the result is the main loop takes about the same amount of time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the question is why isn't this done with a memset?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;string.h&amp;gt;&#xA;&#xA;unsigned char data[10];&#xA;&#xA;void main(void)&#xA;{&#xA;    memset(data, 0, 10);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;zcc +zx -vn -a -clib=sdcc_iy -SO3 --max-allocs-per-node200000 test.c&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;_main:&#xA;    ld  b,0x0a&#xA;    ld  hl,_data&#xA;l_main_00103:&#xA;    ld  (hl),0x00&#xA;    inc hl&#xA;    djnz    l_main_00103&#xA;    ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For larger transfers this becomes an inlined ldir.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general the c compilers cannot currently generate the common z80 cisc instructions ldir, cpir, djnz, etc but they do in certain circumstances as shown above.  They are also not able to use the exx set.  However, the substantial c library that comes with z88dk does make full use of the z80 architecture so anyone using the library will benefit from asm level performance (sdcc's own library is written in c so is not at the same performance level).  However, beginner c programmers are usually not using the library either because they're not familiar with it and that's on top of making performance mistakes when they don't understand how the c maps to the underlying processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The c compilers are not able to do everything, however they're not helpless either.  To get the best code out, you have to understand the consequences of the kind of c code you write and not just throw something together.&lt;/p&gt;&#xA;" OwnerUserId="8318" LastActivityDate="2018-03-30T18:29:57.333" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="6109" PostTypeId="2" ParentId="6107" CreationDate="2018-03-30T18:54:38.543" Score="3" Body="&lt;p&gt;According to the Service Manual, first check if you're not using any power saving mode, as they limit brightness. Next check all cables, and if that won't work, replace the display (where the lighting tubes are included).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chances are good that the CCFL-tubes are just worn out. So unless you intend to do some real low level work, you need to live with what's left.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finding an 'oficial' replacement might be hard, as that includes the whole LCD module. On the other hand,the CFL tubes are ratehr standardized and still in production. So if you're able to comlete disasemble your Display and extract the CCFL tube, you could as well replace it. Maybe even with a modern LED stripe based replacement. Not classic but for sure extending battery life.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, it won't be cheap. Expect something between 40 and 100 USD for the parts allone.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-03-30T19:13:01.757" LastActivityDate="2018-03-30T19:13:01.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6110" PostTypeId="2" ParentId="6080" CreationDate="2018-03-30T19:21:31.040" Score="6" Body="&lt;p&gt;There is one native z80 c compiler that I've found performs surprisingly well in benchmarks, and that's Hitech C v309 for CP/M.  Unfortunately it's for CP/M as the name suggests, but it's worth a mention because it is steps above the others.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is (nearly?) C90. But you do have to be careful to split really large programs into several source files to avoid running out of memory during compilation.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But today there's no reason except nostalgia to run a compiler on the native machine I don't think?&lt;/p&gt;&#xA;" OwnerUserId="8318" LastEditorUserId="576" LastEditDate="2019-04-15T07:54:24.473" LastActivityDate="2019-04-15T07:54:24.473" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6111" PostTypeId="2" ParentId="5844" CreationDate="2018-03-30T20:14:28.187" Score="0" Body="&lt;p&gt;I don't have anything official to back this up, but probably one significant cause of the death of loud clicky keyboards is gaming on the PC. Its main interest was for business professionals who type documents all day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can play games on a clicky mechanical keyboard just fine, but the clicking is loud and annoying and there is no way to silence it. Just imagine trying to play the &quot;first person sneaker&quot; game Thief with a storm of clicks from the keyboard as you stealthily move around, playing the game in a darkened bedroom. Annoying!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would probably throw the clicky mechanical keyboard out the window in frustration after trying to play Grand Theft Auto 3 on it and having it constantly clicking as I play the game.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2018-03-30T20:14:28.187" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6112" PostTypeId="2" ParentId="5994" CreationDate="2018-03-30T20:35:13.447" Score="7" Body="&lt;p&gt;To understand how Amiga memory bandwith should be calculated and how data fetching to Amiga Chipram works.&lt;/p&gt;&#xA;&lt;p&gt;The timingslot schematic that rwallace refering to does not tell anything about how individual chipram ic' operates or are supposed to operate;&#xA;it just explains how the Amiga timing system is layed out.&lt;/p&gt;&#xA;&lt;p&gt;The Amiga is a synchronized multiprocessor platform/architecture. It share same memory to some extension.&#xA;That shared memory is called chipram.&#xA;The shared memory require some rules to be followed to make it work and to avoid something called bus contention.&#xA;Bus contention occurs when more than one processor want access to the common address-, data-, or registerbus.&lt;/p&gt;&#xA;&lt;p&gt;To solve this Amiga has a nested (interleaved) access to the buses (and some other solutions too).&#xA;It means that the bus access is divided into odd and even timeslots.&#xA;The whole timeslot concept is based on duration of one video raster-scanline, and that one timslot has a duration of approximatly 280ns.&#xA;Why 280ns? Because it's the speed of the color clock driving the amiga chipset (Agnus, Paula, and Denise. Agnus contains the DMA controller&#xA;responsible for memory access to chipram).&lt;/p&gt;&#xA;&lt;p&gt;1000 000 000 / 3546895hz (colorclock) = 281.9367ns (PAL)&lt;/p&gt;&#xA;&lt;p&gt;Due to the interleave approach to solve the bus contention problem the individual processors does not fetch data from chip memory with a bandwidth of 7mb/s but instead&#xA;half of that amount - 3.5mb/s. Now this it not the whole truth. In graphic intensive tasks the amiga chipset can take full control of the buses&#xA;and run at full bandwidth (7mb/s) at the expense of the cpu not having any access at all (no timeslots to its disposal). The DMA sytem can also be turned off and let the cpu have&#xA;full access and do all the work (every other timeslot that is).&#xA;Note: horisontal and vertical blanking period is not included in these situations.&lt;/p&gt;&#xA;&lt;p&gt;To calculate the memory bandwidth for the cpu (mc68000):&lt;/p&gt;&#xA;&lt;p&gt;Following calculations applies to OCS/ECS (16-bit) chipset:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Master clock (MC): 28.37516Mhz (PAL), 28.63636Mhz (NTSC)&lt;/li&gt;&#xA;&lt;li&gt;Color ClocK (CCK): MC/8 = 3.546895Mhz (PAL), 3.579545Mhz (NTSC)&lt;/li&gt;&#xA;&lt;li&gt;CPU speed is (MC/4): 7.093790Mhz (PAL), 7.159090Mhz (NTSC)&lt;/li&gt;&#xA;&lt;li&gt;It takes 4 cpu cycles for main cpu (Motorola 68000) to fetch data from external memory (Fast or Chip mem) --&amp;gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;7.093790Mhz / 4 = 1.773448Mhz (PAL),&lt;/p&gt;&#xA;&lt;p&gt;7.159090Mhz / 4 = 1.789773Mhz (NTSC)&lt;/p&gt;&#xA;&lt;ol start=&quot;5&quot;&gt;&#xA;&lt;li&gt;Bandwidth:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;1.773448Mhz * 2byte = 3.546895mb/s (PAL)&lt;/p&gt;&#xA;&lt;p&gt;1.789773Mhz * 2byte = 3.579545mb/s (NTSC)&lt;/p&gt;&#xA;&lt;p&gt;It actually takes 560ns - two time slots (one time slot being 280ns)&#xA;for cpu to fetch data from memory (Fast OR Chip mem).&lt;/p&gt;&#xA;&lt;p&gt;An example:&lt;/p&gt;&#xA;&lt;p&gt;(PAL)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1000 000 000 / 7093790Mhz = 140.96837ns&lt;/li&gt;&#xA;&lt;li&gt;140.96837ns * 4 cpu clockcycles = 563.87347ns&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;How much is the different clock-speeds in terms of nanoseconds (ns)?&lt;/p&gt;&#xA;&lt;p&gt;Always divide the (Mhz) by 1000 000 000 (1000 000 000 / Mhz) and you will get ns.&#xA;When you read the inscription on memory ic's the access speed is written in nanoseconds e.g. 41256-15 means 150ns (access time).&lt;/p&gt;&#xA;&lt;p&gt;To increase bandwidth to chip memory three 'rules' must be fulfilled:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Cpu clock need to be synchronized with masterclock.&lt;/li&gt;&#xA;&lt;li&gt;Chip memory need to be fast enough to handle the new clockspeed.&lt;/li&gt;&#xA;&lt;li&gt;The cpu clock need to be at least four times as fast, i.e. at the same speed as masterclock to double the bandwidth. The synchronization require cpu clock to be a multiple of masterclock.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Why does cpu need to be four times as fast to increase the bandwith?&#xA;Because of the interleaved approach to chipram between cpu and amiga chipset; this together with the fact that - as mentioned above - it takes 4 cpu clock cycles to fetch data from chipram (and fastram). In other words; cpu access chipram (and chipregisters) every other timeslot and therefore it needs to be quadrupled in clockspeed.&lt;/p&gt;&#xA;&lt;p&gt;NOTE: This will only increase bandwidth between cpu &amp;lt;-&amp;gt; chip-ram and not the bandwidth between Amiga Chipset &amp;lt;-&amp;gt; chip-ram.&lt;/p&gt;&#xA;" OwnerUserId="6865" LastEditorUserId="6865" LastEditDate="2020-10-26T12:32:19.413" LastActivityDate="2020-10-26T12:32:19.413" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6113" PostTypeId="1" AcceptedAnswerId="6115" CreationDate="2018-03-30T22:29:22.363" Score="2" ViewCount="1789" Body="&lt;p&gt;When attempting to install Debian Linux 2.0 Hamm (m68k build) on a machine with a m68k (Motorola 68000) processor, I get a &lt;code&gt;Kernel image must be specified&lt;/code&gt; error. Why must a kernel be specified to boot from CD? During this age there were also i386 processors and Linux images build for i386 processors, but they don't require a kernel to be specified. I was able to install Debian Linux 2.0 (i386 build of the OS) on an i386 machine, and it doesn't prompt me for a kernel at boot time. Why is the Motorola 68000 series any different?&lt;/p&gt;&#xA;" OwnerUserId="1880" LastEditorUserId="10566" LastEditDate="2019-02-10T12:48:18.270" LastActivityDate="2019-02-10T12:48:18.270" Title="Why does the Motorola 68000 series require a kernel to be specified during Linux installation?" Tags="&lt;linux&gt;&lt;m68k&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6114" PostTypeId="2" ParentId="5814" CreationDate="2018-03-30T22:50:47.277" Score="4" Body="&lt;p&gt;(Not a definitive answer)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A plausible reason as to why a Jupiter Ace may have been sold in a local Radio Shack is that many Radio Shacks were independently owned and operated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My local Radio Shack also sold Sinclair and Timex/Sinclair computers in addition to the Tandy line.  But that was not a corporate level activity.  Drive a few miles to the next town and that town's Radio Shack did not sell other computer lines.&lt;/p&gt;&#xA;" OwnerUserId="8318" LastActivityDate="2018-03-30T22:50:47.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6115" PostTypeId="2" ParentId="6113" CreationDate="2018-03-30T23:02:56.450" Score="7" Body="&lt;p&gt;&lt;strong&gt;Simple answer:&lt;/strong&gt; Because there is no default kernel defined within the loader.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;More in depth answer:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Debian's m68k port is available for at least a dozen different machine (and CPU) architectures. This ranges from Apple, Amiga and Atari to embedded systems and rare workstations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linux is a monolithic machine specific system. Unlike the PC, these 68k machines feature a wide variety of hardware structures. In fact, already within just the Apple machines variations are rather huge. It would be a huge effort to build &quot;one&quot; that fits all kernels (if that's possible at all). At the same time, the number of developers working on the m68k port is rather small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looks like there are more important areas to work on than luxury functions eliminating a simple single line input occurring only once during installation.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;BTW, using a newer distribution might be more apropriate. I think I remember Debian supported 68k until at least 4.0&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-09-19T13:08:47.443" LastActivityDate="2018-09-19T13:08:47.443" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6116" PostTypeId="2" ParentId="5465" CreationDate="2018-03-31T09:36:46.890" Score="10" Body="&lt;p&gt;At secondary school I was dealing with &lt;a href=&quot;https://en.wikipedia.org/wiki/Agat_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Agat&lt;/a&gt; computers at school computer class (exactly, this was Agat-7), clones of Apple II series. Their 5″ diskette drives were also clone of Steve Wozniak and Shugart disks of Apple II, but with some misdesigns, as absense of zero track sensor. To seek to zero track (after reset or I/O error), it performed 160 steps of stepper motor, unconditionally. This caused gradual disbalancing of head positioner by regular hitting into seeking limiter (with a loud machinegun-like burst sound). As result, at my final class at the school, the computer class comprised of 3 groups of 3 computers each, so, one computer can easily read diskettes written by another one in the same group, but hardly from another group :( And, this issue was known over all Agat park.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To solve this, a program was developed (by a Moscow firm close to the mill produced these computers) to recover unreadable diskettes. It tried to read all sectors of a track in the following manner:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It applied short-timed affections to stepper motor to make it turn to an angle less than a single step, to position read-write magnetic head to offsets like &quot;1/4 of track interval&quot;. A sector was being read multiple times with different head offsets, to find a best reading.&lt;/li&gt;&#xA;&lt;li&gt;Besides (1), multiple readings were applied to find unstable bits and statistically find a most probable variant.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There were no algorithmic recovering due to lack of redundant bytes (as most current drives utilize Reed-Solomon or analog), only a single XOR CRC byte, but this was enough in most cases. After reading, user could command the program to write a track back to diskette, according to the current drive specifics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this weird magic was specific to so-called 140KB Shugart drive (35 tracks of 16 sectors of 256 bytes). Just after my graduation from the school (1990), it had got a few computers of a new model, with 840KB drive that was saved of this issue due to adding of zero track sensor. (But this was time of a speedy decline of Agat usage due to import of MSX and IBM PC series.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this will answer your question, despite this was not PC specific.&lt;/p&gt;&#xA;" OwnerUserId="8324" LastEditorUserId="8324" LastEditDate="2018-03-31T09:43:11.767" LastActivityDate="2018-03-31T09:43:11.767" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6118" PostTypeId="1" AcceptedAnswerId="6120" CreationDate="2018-03-31T19:17:13.110" Score="20" ViewCount="3113" Body="&lt;p&gt;Why does the VIC-20 have 5 KiB of RAM? Why not a multiple of 4 as any other systems, e.g 4 KiB or 8 KiB. Is there a technical reason for that?&lt;/p&gt;&#xA;" OwnerUserId="8047" LastEditorUserId="11916" LastEditDate="2019-10-17T06:15:53.583" LastActivityDate="2019-10-17T06:15:53.583" Title="Why does the VIC-20 have 5KiB of RAM?" Tags="&lt;hardware&gt;&lt;vic-20&gt;&lt;ram&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6119" PostTypeId="2" ParentId="6118" CreationDate="2018-03-31T19:38:58.777" Score="6" Body="&lt;p&gt;The VIC-20 has 1K of low memory ram containing room for the zeropage, the stack and kernal and basic working areas. ($000-$03FF) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4K of main RAM ($1000-$1FFF)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so the main ram is a multiple of 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sleepingelephant.com/denial/wiki/index.php?title=Memory_Map&quot; rel=&quot;noreferrer&quot;&gt;see memory map&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4853" LastEditorUserId="4853" LastEditDate="2018-03-31T19:45:27.960" LastActivityDate="2018-03-31T19:45:27.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6120" PostTypeId="2" ParentId="6118" CreationDate="2018-03-31T19:41:14.390" Score="23" Body="&lt;p&gt;&lt;strong&gt;Simple reason:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore had an overstock of 2114 Chips at that time (*1), so Jack Tramiel, then president of Commodore, ordered the project (*2) to use them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Yeah, but why 5 KiB? Why not just 4KiB?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due the nature of the 6502, RAM is needed at address 0, while the way the 6560 VIC (*3) was addressed called for RAM at $1xxx. So with a continous memory of 4 Kib would not have worked. As a result they decided to add one KiB (2x2114) at address 0, so the CPU got it's special areas (ZP/Stack), plus 4 KiB (8x2114) at $1000, thus having maximum flexibility with the video chip (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, when the overstock was used up and the VIC-20 still sold well, Commodore made the B revision using two 6116 2KiB RAMs (*5) instead of the 8 2114s, as now, buying two larger was quite less expensive than continuing with 2114s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And as a side note, the VC-20 didn't just have 5 Kib, but an additional 1 Ki Nibble (4 bit words) as Colour RAM at $9400 (or $9600 in maximum RAM mode).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Commodore/MOS did produce RAMs at that time, but reacted way too late when the market shifted away from these small sizes and static at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Which was anyway rushed to be completed due his need for a Spring 1980 CES presentation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - 6560 VIC - &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_VIC&quot; rel=&quot;noreferrer&quot;&gt;Video Interface Controller&lt;/a&gt;, the video controller used - hence the name for the machine. European Versions used the PAL Version 6561.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - The whole story here is tied to the unusual way the RAM expansion for different sizes are handled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - It still had to be static RAM, as they just wanted to make a new board, not redesign the whole system.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6986" LastEditDate="2018-04-01T20:41:36.897" LastActivityDate="2018-04-01T20:41:36.897" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="6121" PostTypeId="1" AcceptedAnswerId="6191" CreationDate="2018-04-01T17:34:03.037" Score="14" ViewCount="477" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Mostek&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia page on Mostek&lt;/a&gt;, one of the original fabricators of Z80 chips, includes the following claim:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When Vin Prothro, President, and L. J. Sevin, Chairman of the Board,&#xA;  discovered that Zilog had modified the recipe for Z80 chips to keep&#xA;  the yields low, thereby buying Zilog time to build their own fabs,&#xA;  Mostek sought a new microprocessor partner.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The article is poorly referenced, and I haven't been able to find any corroboration of that claim.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Computer History Museum's &lt;a href=&quot;http://archive.computerhistory.org/resources/text/Oral_History/Zilog_Z80/102658073.05.01.pdf&quot; rel=&quot;noreferrer&quot;&gt;Zilog oral history&lt;/a&gt; includes a little about the Mostek relationship and the genesis of Zilog's own fab, and briefly mentions a problem with the first wafer - but (perhaps unsurprisingly) this particular issue doesn't come up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, (1) is there any corroboration of this claim?&#xA;And (2) how might Zilog have 'modified the recipe'?&lt;/p&gt;&#xA;" OwnerUserId="8178" LastActivityDate="2018-05-30T10:14:51.020" Title="Zilog's relationship with Mostek" Tags="&lt;history&gt;&lt;z80&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6122" PostTypeId="2" ParentId="2949" CreationDate="2018-04-01T23:13:04.230" Score="5" Body="&lt;p&gt;The Compute's Gazette Disk menu used raster tricks to set the background color on a per-line basis, and the Demon Attack cartridge used a black character color as the &quot;apparent&quot; background while it changed the background color every scan line to achieve colorful demons like the Atari 2600 version.  My recollection is that the Compute's Gazette menu did not use interrupts (it simply busy-waited for a keystroke) but I'm not sure about Demon Attack.  There are some other cartridges from that era that used raster tricks, but I didn't have them back in the day and I'm not sure about the particulars.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If one did want to use interrupts, one would need to make use of the timers on the VIA.  The easiest way to exploit them would probably be to figure some number of regularly-spaced intervals near where an interrupt would be useful, set the timer to go off that often, and either busy-wait for the scan line one was interested in, or else return if it wouldn't come around until after the next interrupt.  Not a terribly efficient approach, but one that might still be better than simply busy-waiting all the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I ever port Toyshop Trouble to the VIC-20, it will make use of raster timing to set the background color register four times per scan line as toys move left and right.  With proper timing, it should be possible to cut the size of the &quot;conflict zone&quot; when a player is near a toy from 8 pixels wide to 4 pixels (I think writes to $900F can occur on arbitrary 4-pixel boundaries).  Making that work, however, would require busy-waiting for much of the display period, since a normal &quot;CMP/BNE&quot; loop would have six cycles worth of slop, and I don't know of any way to clean that up without burning two more scan lines.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-04-01T23:13:04.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6123" PostTypeId="2" ParentId="5465" CreationDate="2018-04-02T03:13:41.170" Score="3" Body="&lt;p&gt;Linux/Unix/Cygwin/winUnix utilities - has a command that will will read sector information regardless of it's integrity, security, purpose or format. If a storage device is physically capable of reading the data, the DD command will capture it. The DD command uses raw low level hardware requests directly to the storage devices hardware (when available) to get the information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://untitledfinale.wordpress.com/2007/10/09/create-mount-and-copy-floppy-disks-images-under-linux/&quot; rel=&quot;nofollow noreferrer&quot;&gt;copy floppies&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.linuxnix.com/what-you-should-know-about-linux-dd-command/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Linux dd cmd&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.howtoforge.com/tutorial/linux-dd-command-clone-disk-practical-example/&quot; rel=&quot;nofollow noreferrer&quot;&gt;dd disk cloning examples&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2018-04-04T10:55:30.347" LastActivityDate="2018-04-04T10:55:30.347" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6124" PostTypeId="1" AcceptedAnswerId="6125" CreationDate="2018-04-02T14:45:17.957" Score="45" ViewCount="16212" Body="&lt;p&gt;A lot of 70s era microprocessors were packaged in DIP packages with 40 pins.  This was a reasonably good fit for 8-bit processors: 16 address lines, 8 data lines, 2 power and clock are all absolutely essential, which leaves 13 lines for control signals, which is about what a processor needs.  However, other, larger processors &lt;em&gt;also&lt;/em&gt; sometimes used this form factor, including processors with 16-bit buses and larger address spaces, like the 8086, along with the General Instruments CP-1600, and National's PACE.  In order to achieve this, the designers resorted to cumbersome schemes that multiplexed multiple signals onto single pins, making the chips harder to incorporate into designs (e.g. requiring an external latch to track the address while data is supplied on the same pins).  Why did they do this, when they could realistically have used larger packages (e.g. some chips have been packaged in DIP-48 and DIP-56, which would have allowed plenty of room for all functions without multiplexing)?  &lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2019-05-30T07:43:35.993" Title="Why did CPU designers in the 70s prioritize reducing pin count?" Tags="&lt;hardware&gt;&lt;microprocessor&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6125" PostTypeId="2" ParentId="6124" CreationDate="2018-04-02T14:51:21.623" Score="43" Body="&lt;p&gt;Existing Machinery.&lt;/p&gt;&#xA;&lt;h3&gt;Reasoning about the usage of existing packages&lt;/h3&gt;&#xA;&lt;p&gt;Adding a few hundred transistors for multiplexing is approximately free compared to buying production machinery for several millions - way before the first chip can be made.&lt;/p&gt;&#xA;&lt;p&gt;Creating a new chip (family) is for sure a risky bet on the future and takes some investment. Keeping this investment down to a minimum reduces the risk taken.&lt;/p&gt;&#xA;&lt;p&gt;Ordering, building, integration and ramp up of new production equipment is a quite large investment. Requiring this for a new chip might endanger the whole project, as management might not be inclined to spend that money on some fancy and uncertain new stuff.&lt;/p&gt;&#xA;&lt;p&gt;So calling for new, larger packages not strictly needed to make a new chip would be a rather stupid move for engineers. Especially not if one can come up with schemes like multiplexing to make it work with the existing production environment.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;History for larger packages&lt;/h3&gt;&#xA;&lt;p&gt;The driver for DIP 40 package weren't CPUs, but rather memories, as their increasing pincount made 300 mil packages (TTL like DIP) impossible, so the switch for 600 mil was needed. Similar for I/O chips. With the need for devices like 8155 or 6820 as whole families (and the proven success of early CPUs) new machinery for DIP 40 could be justified.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Multiplexing as an advantage&lt;/h3&gt;&#xA;&lt;p&gt;Also, when looking at a whole family like the 8080, multiplexing isn't negative at all. It becomes an advantage. A 8155/56 offers three 8-bit ports and a 256 byte RAM (and a timer) in one single DIP40 package. With non-multiplexed lines, only two ports would have been possible. Similar the 8755 offered 2 KiB EPROM (ROM in the 8355) in addition to two ports. With these chips it was possible to build typical (small, embedded) systems without any demultiplexing at all.&lt;/p&gt;&#xA;&lt;p&gt;Connecting 8085+8156+8755 was a quite complete setup with 2 KiB EPROM, 256 bytes RAM, 41 bitwise I/O lines and a timer. The only external components needed is a crystal, a diode, one capacitor and three resistors. That's it.&lt;/p&gt;&#xA;&lt;p&gt;Similarly, the 8088 (and 8086) could enjoy the same benefits due using the same multiplexed bus structure.&lt;/p&gt;&#xA;&lt;p&gt;So on the whole, multiplexing is an advantage, and only comes with additional cost if one wants to build a maxed out system — which would be a pile of circuitry anyway — so a few demultiplexers won't hurt either.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-05-30T07:43:35.993" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="6126" PostTypeId="1" AcceptedAnswerId="6127" CreationDate="2018-04-02T20:15:21.787" Score="9" ViewCount="1329" Body="&lt;p&gt;On classic x86 machines the upper 384 KB of system memory contains video RAM and BIOS ROM Besides other things. Those areas overlay over conventional RAM, so that you can't use all upper memory, but only some areas. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this mean that on machines with 1 MB of RAM some parts of it (and hence the associated DRAM ICs) will never be used?&lt;/p&gt;&#xA;" OwnerUserId="8337" LastActivityDate="2018-06-14T21:00:55.913" Title="Unused RAM Chips on x86 machines" Tags="&lt;ibm-pc&gt;&lt;memory&gt;&lt;memory-layout&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6127" PostTypeId="2" ParentId="6126" CreationDate="2018-04-02T20:36:07.570" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does this mean that on machines with 1 MiB of RAM some parts of it (and hence the associated DRAM ICs) will never be used?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. For one, at this time Machines did not come with 1 MiB, but 640 KiB at max. Even when 1 MiBit chips where used, they where usually of the 256x4 kind, so 4 of them made up 512 KiB plus another 4 64x4 chips (256 KiBit) adding the remaining 128 KiB. For 8086/88/186 machines there was no reason in having more than 640KiB (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With upcoming 80286 machines usage for more than 640 KiB became possible. Early AT still had only 640 KiB Base Memory and everything above 1 MiB was to be added with add on cards. It wasn't until &lt;a href=&quot;https://en.wikipedia.org/wiki/Chips_and_Technologies&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chips and Technologies&lt;/a&gt; came up with their &lt;a href=&quot;https://en.wikipedia.org/wiki/NEAT_chipset&quot; rel=&quot;nofollow noreferrer&quot;&gt;NEAT chipset&lt;/a&gt;. NEAT being an Acronym for &lt;em&gt;'&lt;strong&gt;N&lt;/strong&gt;ew &lt;strong&gt;E&lt;/strong&gt;nhanced &lt;strong&gt;AT&lt;/strong&gt;'&lt;/em&gt;. Beside continuing the further integration of prior discrete components like Bus Controllers, Timers or DMA, the NEAT chipset also added logic to support 1 MiB of RAM (or more) with a mapping of 640 KiB at 0..9FFFFh (classic PC address Range) and what's left starting at 100000h (above 1 MiB) into the ATs extended address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Timewise this happened ~1986.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Successive chipsets added more features. For example shadowing of BIOS ROMs (*2) and LIM-EMS support with the LEAP chipset. Of course other companies also started to build integrated chipsets. Ultimately this was the start (*3) of today's well known &lt;a href=&quot;https://en.wikipedia.org/wiki/Northbridge_(computing)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Northbridge&lt;/a&gt; design of modern PCs. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - At least not while being compatible. Non or less compatible machines, like the SIEMENS PC-D did offer a continuous MiB or RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Already at this time ROM and even more EPROM chips where much slower than RAM. Every BIOS access did slow the machine down. With shadowing the BIOS content got copied into RAM, with write protection acting as fast ROM emulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The SuperXT chipset for 8086 machines was released &lt;em&gt;after&lt;/em&gt; the NEAT one, despite what the lower chip-id suggests.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-06-14T21:00:55.913" LastActivityDate="2018-06-14T21:00:55.913" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="6128" PostTypeId="2" ParentId="6124" CreationDate="2018-04-03T01:12:55.443" Score="15" Body="&lt;p&gt;Your question assumes that CPUs with more than 40 pins were a rarity in the 1970s, but this was common for early 16-bit CPUs. Both the TI TMS9900 and the Motorola 68000 had 16-bit external data busses, no multiplexing, and came in a 64-pin DIP package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing that was common at this time was DIP packaging. And the number of pins on a DIP package was limited by simple geometry - a rectangular package needs a progressively longer lead from the corner pins to the semiconductor chip as the number of pins increases. This geometry constraint limited DIPs to 64-pins, practically. This limitation also helped drive the transition from rectangular DIP to the various square packaging that followed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Intel 8086 came in a 40-pin DIP and relied on multiplexing for its 16-bit data bus (shared with address lines). The WDC 65C816 used the same 40-pin DIP and multiplexing scheme. Neither of these 16-bit CPUs were particularly successful in these packages. The 65C816 was repackaged for the SNES as the CPU core in a QFP package. The Intel 80286 was the more successful 16-bit successor to the DIP 8086 (and 8088) in 1982, and by that time square packaging was replacing DIPs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, the market did not want a 16-bit CPU in a 40-pin DIP package with external demux. Fortunately, DIP soon gave way to newer packaging geometries that supported far higher pin counts.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-04-03T01:24:39.030" LastActivityDate="2018-04-03T01:24:39.030" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6129" PostTypeId="2" ParentId="6126" CreationDate="2018-04-03T02:11:44.180" Score="0" Body="&lt;p&gt;&lt;strike&gt; The area between 640k and 1M was called the Upper Memory Area and could be used via various expedients in MSDOS &amp;amp; DRDOS, e.g. for TSR drivers, RAM disks and the like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See: &lt;a href=&quot;https://en.wikipedia.org/wiki/Upper_memory_area&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Upper_memory_area&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a working 1M 8086/8088 machine, you could look at booting MSDOS 5 and trying some HIMEM.SYS config - you should be able to shunt a lot of the OS stuff into high memory and see nearly all 640k free for a program. &lt;/strike&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only on a 386, apparently. Or a 286, maybe.&lt;/p&gt;&#xA;" OwnerUserId="5276" LastEditorUserId="5276" LastEditDate="2018-04-03T21:01:43.577" LastActivityDate="2018-04-03T21:01:43.577" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6130" PostTypeId="1" AcceptedAnswerId="6133" CreationDate="2018-04-03T04:41:38.830" Score="10" ViewCount="441" Body="&lt;p&gt;Why are video game and computer joysticks of the seventies and early eighties right-handed (eg. Atari 2600, Odyssey 2, Apple II), and game pads, since Nintendo Entertainment System to today, all left-handed?&lt;/p&gt;&#xA;" OwnerUserId="8047" LastEditorUserId="637" LastEditDate="2018-04-03T13:57:58.340" LastActivityDate="2018-04-03T13:57:58.340" Title="Why Game controllers changed from righthanded to lefthanded?" Tags="&lt;history&gt;&lt;joystick&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6132" PostTypeId="2" ParentId="6130" CreationDate="2018-04-03T07:50:40.450" Score="7" Body="&lt;p&gt;A gamepad is not ergonomically the same as a joystick. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A joystick's stick is normally operated with the dominant hand, while the other hand holds the body (where it can operate the fire button). Since most people are right-handed they prefer the stick on the right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A gamepad is held by &lt;em&gt;both&lt;/em&gt; hands, so it doesn't matter which side has what buttons. However since the direction controls are usually held down more than the fire button, having them on the left means that it is held more in the left hand - just like a joystick. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course there were exceptions. Some joysticks had buttons on both sides or in the middle, others on the top of the stick. I have a Mindscape Powerplay which is held from below by a handle. Even though I am right-handed, I prefer to hold it in my right hand and operate the stick with my left hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7zNGq.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7zNGq.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2018-04-03T07:50:40.450" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6133" PostTypeId="2" ParentId="6130" CreationDate="2018-04-03T08:33:25.147" Score="6" Body="&lt;p&gt;I asked the same question over at UX: &lt;a href=&quot;https://ux.stackexchange.com/questions/57630/why-are-most-game-controllers-left-handed&quot;&gt;https://ux.stackexchange.com/questions/57630/why-are-most-game-controllers-left-handed&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lots of speculation but no real answers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/LwyKx8TvRcE&quot; rel=&quot;noreferrer&quot;&gt;Larry Bundy claims&lt;/a&gt; the change was made to make arcade games more difficult, and thus increase revenue by making it harder for players to master each game. He doesn't offer any evidence or citations though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that there is no good answer for this. The earliest examples of left handed controls I can find are arcade machines and the Nintendo Game &amp;amp; Watch, but it's hard to know if they were the first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arguments claiming that more dexterity is required for operating buttons don't hold up - the original Famicom had only two buttons, not exactly a challenge to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've started building my own right handed controllers and can confirm that they are much, much easier to use and give me a significant edge. I am right handed.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-04-03T08:33:25.147" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6134" PostTypeId="1" AcceptedAnswerId="6135" CreationDate="2018-04-03T09:54:51.950" Score="14" ViewCount="3056" Body="&lt;p&gt;The ZX81 has a display file which is treated rather like a serial file. And the CPU generates addresses which the ULA uses to look up the characters' bitmaps from the ROM (Yes, I know the actual explanation is rather more complicated than this). I imagined that this arrangement means that the byte in the serial file really must correspond to one characters, so that the appropriate part of the bitmap will get sent to the raster beam; there can't be any way to get the byte in the display file to be sent to the raster beam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet, Some demos really do seem to address individual pixels. I've seen a video of Manic Miner, and a demo called &quot;No Limits&quot; which seem to make some kind of bitmap at a resolution of 256x192. &lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-04-03T10:20:18.077" LastActivityDate="2018-04-03T22:31:28.263" Title="How do high-resolution graphics work on the ZX81?" Tags="&lt;graphics&gt;&lt;zx81&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6135" PostTypeId="2" ParentId="6134" CreationDate="2018-04-03T11:21:05.173" Score="17" Body="&lt;p&gt;The normal process is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CPU attempts to fetch an op-code instruction byte from the video file. ULA steals that byte as a character code and feeds the CPU a NOP op-code byte instead. Immediately following that is a refresh cycle. The ULA uses the top part of the refresh address but substitutes the character code just read and the contents of an internal three-bit counter at the bottom to form a ROM address. Hence, a row of a character pattern is returned. It ends up in a shift register within the ULA and becomes video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All RAM is static, so this misuse of the refresh cycle isn't problematic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The three-bit counter can be reset by software, as can the top part of the refresh address — the Z80 uses the I register for it. For Manic Miner and some other titles, the trick is simply to point to an existing region of the ROM that has close to the full 64 range of possible characters sufficiently close to each other, reset the three-bit counter every line and use a mapping table. You'll notice it's not exactly perfectly mapped; weird distortions occur. That's partly because of the mapping from 256 input values to 64 character codes and partly because there's nowhere in the ROM that has all 64 possible byte sufficiently values near each other. So the game does its best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No Limits and others use a separate observation: that the unaltered refresh address is observed on the expansion bus and by internal RAM. The version with the character code and row counter imposed reaches the ROM chips only. So they set the refresh address outside of the ROM area and inside the RAM area. Assuming RAM responds during a refresh cycle, what then happens is: CPU attempts to read dummy display byte, it's latched and forwarded, mixed with the row counter and refresh address, to the ROM which doesn't respond. RAM responds to the refresh address instead. That value goes into the ULA's shift register and is output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not all third-party RAM expansions respond to the refresh cycle but it's usually a simple modification and most do, anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To follow along on a schematic, see e.g. the one redrawn by Ron Reuter &lt;a href=&quot;http://www.mainbyte.com/ts1000/&quot; rel=&quot;nofollow noreferrer&quot;&gt;available from here&lt;/a&gt;:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/TFcZT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TFcZT.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ROM is IC2, has its low nine address pins (three for the row counter, six for the character code) connected both to address lines coming out of IC1, the ULA, and IC3, the Z80. Resistors R18–R26 prevent the ULA's address input from flowing back towards the Z80. As both the internal RAM and the expansion port are on the same side of those resistors as the Z80, they see the address the Z80 is generating only — they're unaffected by the ULA. It's almost a prototype of the ZX Spectrum's floating bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chip selects are generated by the ULA; luckily they're independent of whether it knows it is expecting a character graphic. So when the generated refresh address is in RAM rather than ROM, the RAM chip select is active and the ROM isn't, and the ULA's mutation of the refresh address isn't visible to the RAM.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-04-03T22:31:28.263" LastActivityDate="2018-04-03T22:31:28.263" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6136" PostTypeId="1" AcceptedAnswerId="6138" CreationDate="2018-04-03T15:48:01.190" Score="10" ViewCount="640" Body="&lt;p&gt;I am currently experimenting with &lt;a href=&quot;http://wordpress.hertell.nu/?p=537&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chucky's re-engineered A3660 accelerator board&lt;/a&gt; for the Commodore Amiga (3000(T) and 4000(T)).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My ultimate goal is to add an additional 512kB EEPROM to the accelerator board at &lt;code&gt;$00F00000&lt;/code&gt;. According to the &lt;a href=&quot;https://www.amigacoding.com/index.php/Amiga_memory_map&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga Memory Map&lt;/a&gt;, the address range &lt;code&gt;$00F00000&lt;/code&gt; to &lt;code&gt;$00F7FFFF&lt;/code&gt; is reserved for extended ROMs and is checked by the Kernel (&lt;code&gt;exec.library&lt;/code&gt;) on boot time. As I understand; if a ROM is available on this address, &lt;code&gt;exec.library&lt;/code&gt; will automatically embed it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to add &lt;code&gt;68060.library&lt;/code&gt; and &lt;code&gt;workbench.library&lt;/code&gt; on the additional EEPROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here are my rookie questions regarding the hardware requirements:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.) How do I position the EEPROM at &lt;code&gt;$00F00000&lt;/code&gt;? Are the memory addresses stored along with the corresponding assembly code lines?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.) Do I need additional hardware components besides the 512kB EEPROM connected to (A0:A19) and (D0:D15) ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am sorry for these amateur's questions, but I need to build the prototype first in order to experiment with the Kickstart ROMs :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE 04/04/18:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks Brian for your great answer!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More on this topic at &lt;a href=&quot;http://eab.abime.net/showthread.php?p=1232256#post1232256&quot; rel=&quot;nofollow noreferrer&quot;&gt;this thread on EAB&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8348" LastEditorUserId="11916" LastEditDate="2019-11-20T23:11:00.040" LastActivityDate="2019-11-20T23:11:00.040" Title="How to integrate an 512kB EEPROM on a A3660 accelerator board at $00F00000?" Tags="&lt;amiga&gt;&lt;motorola-68000&gt;&lt;amiga-kickstart&gt;&lt;amiga-3000&gt;&lt;amiga-4000&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6137" PostTypeId="2" ParentId="6124" CreationDate="2018-04-03T16:43:52.470" Score="6" Body="&lt;p&gt;Just to remind what a big deal physical tooling and wiring was...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... the Mostek 6502 chip intentionally had the same electrical pinout as the Motorola 6800, despite completely different design, instruction sets, and even &lt;a href=&quot;https://fgiesen.wordpress.com/2014/10/25/little-endian-vs-big-endian/&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;endian&lt;/em&gt;-ness&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With 40-pin sockets, they were a commodity, not terribly more expensive than the same-width 24- or 28-pin sockets.  (when 28-pin first came out, they were pricier than 40s, a problem we solved with a mitre box and a razor saw).  However the larger (and wider) sockets were expensive enough for cost accountants to sit up and notice - they certainly cost more than a few latches (and their sockets). &lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2018-04-03T16:49:23.907" LastActivityDate="2018-04-03T16:49:23.907" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6138" PostTypeId="2" ParentId="6136" CreationDate="2018-04-03T18:36:28.330" Score="7" Body="&lt;p&gt;The Amiga Kickstart ROM is modular. As such, you can build custom ROM images containing whatever selection of libraries, devices, and handlers you would like to be ROM resident. And, as you indicated, the total ROM image can be up to 1MB in size, even though all original Amigas shipped with a maximum of 512KB of ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you build a custom ROM image, probably using the &lt;a href=&quot;http://www.mfilos.com/2010/12/guide-create-and-burn-custom-kickstart.html&quot; rel=&quot;noreferrer&quot;&gt;tools described in this guide&lt;/a&gt;, you just need to split up the binary image and write it to your 2 to 4 individual (E)EPROM chips, each chip containing the appropriate portion of the image depending on where it will appear in the memory map.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;1.) How do I position the EEPROM at $00F00000? Are the memory addresses stored along with the corresponding assembly code lines?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You position it &quot;electrically&quot;. It's not so simple as the &quot;ORG&quot; address in an assembly file. The Amiga's ROM is a sophisticated module representation and you must use sophisticated tools to build it, as described in link above. Then, you must make your 512KB visible at the correct address to the hardware...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2.) Do I need additional hardware components besides the 512kB EEPROM connected to (A0:A19) and (D0:D15)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. You will need some address decoding logic to properly select your new ROM when the Amiga addresses the range 0xF00000-0xF7FFFF. For a 68040/060 CPU, that would mean decoding (A20:A31).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As fas as the data bus, you wouldn't really want to hamstring the Amiga with 16-bit access to ROM. And I would assume that the ROM code is going to assume 32-bit access since that was the norm for Amigas that had a 32-bit bus. So you would probably need to either patch the ROM to work for 16-bit access on the A3000/A4000, or you should use 2x256KB EEPROMs and have them contain even/odd WORD data to allow 32-bit access.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-04-03T18:36:28.330" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6139" PostTypeId="2" ParentId="6124" CreationDate="2018-04-03T19:31:19.143" Score="10" Body="&lt;p&gt;Lead lengths inside a 64 pin package slowly get problematic, even at 1970s speeds. &#xA;Even a digital system working at a few MHz requires you to pay attention to things like routing signal lines close to their return (or a ground plane), and keeping power bypass capacitors connected to the die with short leads. There is a good reason modern CPU packages started including some of the bypass capacitors when &lt;em&gt;external&lt;/em&gt; signalling speeds went above ca. 50MHz (which is only ten times as much as a 5MHz 1970s CPU - and the modern package is still smaller than a 64 pin DIP. Including capacitors in a DIP package had only been done commonly with the expensive ceramic DIP packages in the 1970s. Being cavalier with these things is what probably accounts for many of the &quot;gremlins&quot; you tend to get in solderless-breadboard projects. The awkward electrical interfaces (asymmetric impedances, differences in rise time, sometimes low noise margins) you got when pairing NMOS and bipolar TTL technologies on a card did not exactly help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, a LOT of industrial automation style equipment (and quite a selection of commercial computers) used the &quot;Eurocard&quot; form factor (which prescribed a PCB size of 10x16 centimetres). A 64 pin DIP, of course, does fit on such a card, but signal routing gets unwieldy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Economical PCB manufacturing and design capabilities might also have played a big role in staying with DIP instead of just going to finer-pitch or quad-row packages - the DIP package was invented LATER than a predecessor of the SOIC package (the &quot;flat pack&quot; package, which was surface mountable and had 1.27mm / 20th of an inch lead spacing and can be made to match a SOIC footprint if you re-dress the leads). &lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-04-03T19:31:19.143" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6140" PostTypeId="1" AcceptedAnswerId="6142" CreationDate="2018-04-03T19:52:08.293" Score="5" ViewCount="140" Body="&lt;p&gt;I have an old mainboard, type PWA-286C, running a 10 MHz Intel 80286. I have no manuals, so I am looking for documentation on it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am especially wondering if there is a connector for the real time clock battery. Maybe J21? Also what the voltage for it might be. Also wondering about the large J17 near the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional question: The board is running a Phoenix 3.0 BIOS. I guess there is no internal setup program? Can I use GSETUP on this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a picture:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.imgur.com/kSR55NH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JH8Hnl.jpg&quot; alt=&quot;PWA-286C&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8337" LastEditorUserId="8337" LastEditDate="2018-04-03T21:35:47.280" LastActivityDate="2018-04-03T21:35:47.280" Title="Manual or jumper settings for mainboard PWA-286C" Tags="&lt;identify-this-computer&gt;&lt;80286&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6141" PostTypeId="2" ParentId="3314" CreationDate="2018-04-03T20:12:55.967" Score="5" Body="&lt;p&gt;I did a lot of work on the ZX Spectrum in the 80's using an assembler that I created myself, which ran on the Spectrum itself. I started out doing machine code, but it was not productive and made it hard to go back and change things later on (it was write-only, as &lt;a href=&quot;https://en.wikipedia.org/wiki/Philippe_Kahn&quot; rel=&quot;noreferrer&quot;&gt;Phillipe Khan&lt;/a&gt; once said).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Creating an assembler made it a lot more productive, especially as I added macros, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mostly I worked on games and hacker utilities, the latter being used to investigate games to discover pokes, etc.&lt;/p&gt;&#xA;" OwnerUserId="7808" LastActivityDate="2018-04-03T20:12:55.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6142" PostTypeId="2" ParentId="6140" CreationDate="2018-04-03T21:26:31.213" Score="4" Body="&lt;p&gt;The RTC on your motherboard is the Hitachi HD146818P DIP chip located SouthEast of the CPU in your photo. According to &lt;a href=&quot;http://www.alldatasheet.com/datasheet-pdf/pdf/115060/HITACHI/HD146818P.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the datasheet&lt;/a&gt; it uses a backup battery voltage that is nominally 3VDC. I suspect that J21 is &lt;em&gt;probably&lt;/em&gt; the battery jack, but I don't see any indication of polarity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;J17 is a 34-pin connection that is likely for the built-in Floppy Disk Controller (FDC). Use it to connect two standard PC floppy drives.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-04-03T21:26:31.213" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6143" PostTypeId="1" AcceptedAnswerId="6150" CreationDate="2018-04-04T08:15:41.130" Score="62" ViewCount="22308" Body="&lt;p&gt;While enjoying the response to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6124/why-did-cpu-designers-in-the-70s-prioritize-reducing-pin-count&quot;&gt;&quot;Why did CPU designers in the 70s prioritize reducing pin count?&quot;&lt;/a&gt; In 1979 IEEE was hard at work at coming up with a standard for handling floating point numbers, and math functions that dealt with them. I remember several early uses of external math chips i.e. 6502, Z-80, 8088.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples are AMD AM9511, AM9512, Motorola MC68881/2, Intel 8231, 8232, 8087, National 32081, TI TMS1018, Weitek WTL1032/1033, Micromega uM-FPU, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some are being re-purposed while others are still in production for current micro-controllers like the Arduino and Z-80 i.e. Micromega uM-FPU&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What was the rationale?&lt;/strong&gt; Heat, pin count, size, tooling, marketing &amp;amp; cost, die failures, something else?&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="3421" LastEditDate="2018-04-07T09:41:31.777" LastActivityDate="2019-07-05T17:32:43.137" Title="Why did some early CPUs use external math chips?" Tags="&lt;chip&gt;&lt;hardware-mods&gt;" AnswerCount="14" CommentCount="18" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6144" PostTypeId="2" ParentId="6143" CreationDate="2018-04-04T08:29:16.707" Score="142" Body="&lt;p&gt;Simple: Complexity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 8088 had about 29,000 transistor functions, while an 8087 with 45,000 is almost double that. Integrating the FPU within the CPU would have made it three times as big, putting production at a &gt;5 times higher failure rate, resulting in a price tag way higher than 3 times the CPU alone. More like 5-8 times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When closing in to what is possible in production, it's more efficient to do two smaller chips than one big. This greatly reduces the cost for a complete setup. Having two parts further allows you to skip the additional cost for users not needing the FPU - a majority at that time.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-05T17:32:43.137" LastActivityDate="2019-07-05T17:32:43.137" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6145" PostTypeId="2" ParentId="6143" CreationDate="2018-04-04T08:31:08.643" Score="64" Body="&lt;p&gt;So these math chips (I assume you're talking about floating point units, such as the 8087 and other coprocessors) were not always/usually included in the CPU because they were not required by most users. When you don't need floating point maths, you also don't need the FPU, and that was the commonest case. So to make the CPU cheaper they leave it out. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then as an upgrade/optional extra, you might add an FPU to do functions that would be a bit slow in software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In those days, an FPU was huge when compared to the CPU. Nowadays it's a little different. In a skylake or other typical desktop CPUs, the floating point logic is only a tiny tiny area on the CPU's die so to separate it doesn't make sense.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="784" LastEditDate="2018-04-04T14:46:18.797" LastActivityDate="2018-04-04T14:46:18.797" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6146" PostTypeId="2" ParentId="6143" CreationDate="2018-04-04T13:25:04.940" Score="11" Body="&lt;p&gt;Like anything else, in the end, it was &quot;ease of use&quot; for some value of &quot;ease&quot; and &quot;use&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The primary motivator was performance, the specialized processors are just an extension of the maturity of micro electronics and CPU design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recall that the original computer were just discrete components. Then, as the ICs evolved, gates out of transistors, and flip flops out of gates, the discrete components fell naturally in to functional integrated circuits. The &quot;first&quot; math co-processor is arguably the 4-Bit adder. Many old computer designs strung those off the shelf adders together as part of their ALU (Arithmetic Logic Unit).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, the first CPU IC combined much of the decode logic, counters, and the ALU on to a single IC. It's not that computers were new, but these ICs combined them all on a single chip. Thus the &quot;micro&quot; processor. Saving, well, everything: space, cost, heat, complexity, and gaining performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These math co-processor were just a natural specialization. The CPUs didn't have the real estate to combine all of those features on a single die. Plus the market wasn't mature enough or willing to spend the money for extravagances like FP Math, or multi-precision multiplication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;History is full of compromises and work arounds to get around &quot;doing math&quot; in CPUs. Fixed point math is a fine substitute for floating point math in many situations. Lookup tables if you can afford the memory. Shifting and adding instead of a general purpose multiplier. Also, most CPUs were, and still are, used for control purposes. Don't need a lot of trigonometry to run a sprinkler timer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, of course, most of the major CPUs bundle FP hardware on the die, but we still have things like GPUs now, off chip, doing their own thing. But there are some CPUs that integrate them today. Why not, it's &quot;Drag and drop&quot; in Verilog -- tada...CPU with integrated low end GPU.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-04-04T13:25:04.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6147" PostTypeId="2" ParentId="6143" CreationDate="2018-04-04T14:20:32.467" Score="38" Body="&lt;p&gt;It seems to me there are a number of factors involved, some of which have been addressed in other answers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;design complexity&lt;/li&gt;&#xA;&lt;li&gt;cost (which largely results from the complexity)&lt;/li&gt;&#xA;&lt;li&gt;feature necessity&lt;/li&gt;&#xA;&lt;li&gt;time-to-market&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Regarding complexity, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6144/79&quot;&gt;Raffzahn explains&lt;/a&gt;, early FPUs were much more complex than the CPUs they complemented. This meant that they needed more transistors, and had lower yields, which both contributed to higher costs, both for the manufacturer and at retail. &lt;a href=&quot;http://www.righto.com&quot; rel=&quot;noreferrer&quot;&gt;Ken Shirriff&lt;/a&gt; has been documenting &lt;a href=&quot;http://www.righto.com/search/label/8087&quot; rel=&quot;noreferrer&quot;&gt;some of the complexity&lt;/a&gt; involved recently — the 8087 was pushing the envelope in a number of ways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the late seventies and early eighties, micro-processors didn’t have floating-point support, so software was developed without needing hardware floating-point. Even once FPUs became available, the cost meant that few users bought them, which meant that (most) software had to continue working without them, which allowed most users to do without them, and so the cycle continued. Some markets used FPUs extensively, &lt;em&gt;e.g.&lt;/em&gt; for CAD; but even after Intel added them as standard to 486s, there continued to be a huge market for FPU-less CPUs (which Intel capitalised on with the 486SX). The killer app for FPUs in the x86 world ended up being Quake...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The time-to-market aspect is significant IMO. The 8086 was released in 1976, but the 8087 only became available in 1980; it was supported thanks to its designer’s foresight — even though the FPU was nowhere near designed, let alone ready, Bill Pohlman (who was in charge of the 8086’s development) added features to the 8086 so that it would be able to support a co-processor (not just FPUs too — see &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2421/79&quot;&gt;Were there 8086 coprocessors other than the 8087?&lt;/a&gt;). Likewise, the 386 was released in 1985, but the 387 only became available in 1987 — and at this point, users did know the value of an FPU (which wasn’t the case when the 8086 was released). If Intel had had to wait for their FPUs to be ready, they would have missed a lot of market opportunities (and we wouldn’t be running x86 PCs).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-10-17T07:55:41.050" LastActivityDate="2018-10-17T07:55:41.050" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6148" PostTypeId="2" ParentId="5965" CreationDate="2018-04-04T15:21:54.537" Score="5" Body="&lt;p&gt;Taking as given: software rendering uses the general-purpose CPU to paint pixels rather than a dedicated GPU; the general-purpose device has less ability because it's not optimised for the job; writing two sets of code rather than one is more work and GPUs became commonplace so the worse option died out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the specific flaws you're seeing in that image — to answer &quot;why they produce lower quality&quot; — are lack of texture filtering and very harsh geometry edges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When deciding which colour to make a screen pixel, both the CPU and the GPU know which point on the original textured surface is visible there. That's where processing diverges. It is very unlikely that the point on the original surface falls exactly on the centre of a pixel in the texture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 3d accelerator of the period is likely to have time to perform bilinear or trilinear filtering. Bilinear filtering samples all four texture pixels that surround the point being output, then calculates a weighted sum. So that's four texture lookups, six multiplies and a summation. Trilinear filtering does that twice with two different resolutions of texture and calculates the weighted sum of the results, for eight texture lookups and thirteen multiples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's far too much work for a CPU. So it just figures out which source pixel is closest to the point and outputs that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference is between textures that when stretched too large obviously show their individual pixels as boxes, and surfaces that just look very blurry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that era, harsher geometry edges result from the CPU just not being fast enough to draw the same number of pixels as a 3d accelerator. So a lower screen resolution is used. They also tend to run at a slower frame rate, which makes the effect more apparent. Several 3d accelerators of the period support edge blending as a way to eliminate rough edges, which uses per-pixel weighted transparency on each edge pixel, but that's not as useful as it sounds because it presupposes you're drawing all geometry from back to front and therefore doesn't interact very well with engines built around z-buffering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The posted screenshot doesn't show these problems, but other divergences you might see in contemporaneous titles:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the software renderer may use a lower colour depth. That's to reduce the amount of data that needs to be worked on and moved around. But it tends to severely deteriorate lighting;&lt;/li&gt;&#xA;&lt;li&gt;the software renderer may decide not to perform perspective calculations within polygon faces at every pixel, either not doing it at all (for the PS1 look) or just doing it less frequently (as per Descent and Quake; it tends to look a bit like walls are fabric strung on box frames that move with the player);&lt;/li&gt;&#xA;&lt;li&gt;the software renderer may use lower-resolution textures. That's just a simple effect of the difference between being a game that has to fit in 16mb of RAM and being a game that can stretch out to 16mb RAM plus an extra 4mb on the GPU.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-04-05T20:29:48.490" LastActivityDate="2018-04-05T20:29:48.490" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6149" PostTypeId="2" ParentId="6143" CreationDate="2018-04-04T16:54:45.193" Score="13" Body="&lt;p&gt;This simple answer is not enough room on a chip for the total transistor count given the limitations of the process technology of the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As per Wikipedia on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8087&quot; rel=&quot;noreferrer&quot;&gt;Intel 8087&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;The 8087 was an advanced IC for its time, pushing the limits of period manufacturing technology. Initial yields were extremely low.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This for the coprocessor all by itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At 45,000 transistors, attempting to integrate this on the same chip with the main CPU (29,000 counting all ROM and PLA sites) would have been beyond the maximum practical transistor count for the process technology of the day.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastActivityDate="2018-04-04T16:54:45.193" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6150" PostTypeId="2" ParentId="6143" CreationDate="2018-04-04T20:25:36.797" Score="50" Body="&lt;p&gt;Another point not addressed in the existing answers relates to the latency associated with accessing an external coprocessor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first math coprocessors, while much faster than doing the same work on a CPU, still took many clock cycles to complete each operation. The overhead (bus cycles) associated with transferring data between the two chips was &quot;lost in the noise&quot;. In other words, there was no &lt;em&gt;penalty&lt;/em&gt; for putting those functions in a separate chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, as coprocessors got faster, this overhead became a significant bottleneck on throughput, and this is what drove integrating them directly into the CPU chip.&lt;/p&gt;&#xA;" OwnerUserId="4183" LastActivityDate="2018-04-04T20:25:36.797" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6151" PostTypeId="1" AcceptedAnswerId="6153" CreationDate="2018-04-05T07:33:05.653" Score="6" ViewCount="5527" Body="&lt;p&gt;I am thinking of collecting Super Famicon/SNES games but one thing holding me back is the integrity of the cartridges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am aware of the issue of batteries running out of charge and not being able to save data anymore. For the purposes of this question, you can disregard this mode of failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How long will the console itself last before it is beyond repair?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How long will the cartridges work in the console before they are beyond repair?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume that the user can perform basic maintenance like cleaning contacts etc. and that the consoles and cartridges are stored in a typical household environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that it is impossible to give an exact number of years for the lifetime of these items, so a general ballpark figure would be acceptable. (i.e. 50 years, 100 years?)&lt;/p&gt;&#xA;" OwnerUserId="8365" LastActivityDate="2018-11-06T18:00:39.900" Title="How long will SFC/SNES consoles and cartridges last?" Tags="&lt;maintenance&gt;&lt;snes&gt;" AnswerCount="5" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6152" PostTypeId="2" ParentId="6143" CreationDate="2018-04-05T07:54:05.593" Score="5" Body="&lt;p&gt;One simply did not need a math co-processor. I could do double precision floating point operations in Basic on a computer with only an 8-bit Z80 CPU (at 1.66 MHz). Yes, it was slow, but we compensated for that by writing efficient algorithms ! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later I got a 16-bit 8088 (at 8 MHz). It was only when I started using AutoCad that I felt the need for a 8087 co-processor, so I paid for one. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the 486DX came the built-in co-processor, though you could still opt out with the 486SX and then back in with the 487. All your programs would still run without. But by then the software became dependent on more speed, so you had better opt in. Startiung with the Pentium, math was always included. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could argue the same for the graphics co-processor. We didn't have any but still we could play games, in 128 x 48 x 1 bit resolution... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am still surprised that my quad-core Xeon plus GTX feels no faster than my Z80 used to feel, despite running 4 x 2000 times faster. Apparently Windows has eaten up all progress. ;-) &lt;/p&gt;&#xA;" OwnerUserId="7685" LastActivityDate="2018-04-05T07:54:05.593" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6153" PostTypeId="2" ParentId="6151" CreationDate="2018-04-05T08:51:02.247" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I am thinking of collecting Super Famicon/SNES games but one thing holding me back is the integrity of the cartridges.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There must be two grades to the collecting: (1) collecting original hardware and (2) collecting original hardware which functions.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How long will the console itself last before it is beyond repair?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As you already said it is mostly impossible to project how long real hardware will live without any failures. However you have two ways to guide you:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Warranty period - when manufacturer guarantees you the operation of the device, and will perform replacements to return the device into working condition. This must not be applicable to the devices you are going to collect as their warranty must be void many years ago;&lt;/li&gt;&#xA;&lt;li&gt;Useful life of the (whole) device. You may be able to find such information in the marketing booklets, but you must understand it is &lt;em&gt;marketing&lt;/em&gt; term, and has nothing to do with guarantees from manufacturer;&lt;/li&gt;&#xA;&lt;li&gt;Trying to identify cumulative &lt;a href=&quot;https://en.wikipedia.org/wiki/Mean_time_between_failures&quot; rel=&quot;noreferrer&quot;&gt;MTBF&lt;/a&gt; (mean time between failures) for each component, and somehow mathematically estimate MTFB for whole device using probability theory. For example, &lt;a href=&quot;https://www.jaapsch.net/psion/pdffiles/Eprom064k_datasheet_27C512.pdf&quot; rel=&quot;noreferrer&quot;&gt;27C512 EPROM&lt;/a&gt; is said to retain data for more than 200 years.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Anyway, the applicable ways 2 and 3 above are assessments, and you must be ready that hardware fails sometimes. Old one as well as new one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the good thing is that if you store devices in proper conditions, and you have checked they are in working condition, the probability of old device being broken &quot;by itself&quot; (from age, not from misuse) is much lower than new just manufactured and bought device.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Assume that the user can perform basic maintenance like cleaning contacts etc. and that the consoles and cartridges are stored in a typical household environment.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Absolutely correct - store in cool dry place, with minimum of dust, ideally in anti-static bags and away from the heat (sun light or heating equipment).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I understand that it is impossible to give an exact number of years for the lifetime of these items, so a general ballpark figure would be acceptable. (i.e. 50 years, 100 years?)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The point of genuine hardware collection is (usually) having genuine devices, if they work or not, while should be very important, is a second question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And repairing old hardware is an art these days, it may happen that hardware which was professionally repaired can be valued more than original from dusty shelf, because repaired and properly maintained hardware should be perceived as the one potentially living for another 100 years :) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS. Last, but not least - there may be some components which degrade with the time - for example plastic cases or capacitors. You may not be able to know how much they will live until broke or become unusable, thus it would be a good idea to unpack some of cartridges and at least perform manual inspection, showing them to professional if in doubt.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2018-04-05T08:51:02.247" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6154" PostTypeId="5" CreationDate="2018-04-05T10:22:32.370" Score="0" Body="&lt;p&gt;For questions about the Sinclair ZX81.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-04-05T10:22:32.370" LastActivityDate="2018-04-05T10:22:32.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6155" PostTypeId="4" CreationDate="2018-04-05T10:22:32.370" Score="0" Body="For questions about the Sinclair ZX81." OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-04-05T10:22:32.370" LastActivityDate="2018-04-05T10:22:32.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6156" PostTypeId="2" ParentId="6151" CreationDate="2018-04-05T16:03:59.447" Score="4" Body="&lt;p&gt;Different cartridges will last different lengths of time, due to their different components. Factors that affect lifespan include:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Type of ROM&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game code and data is stored on a read-only memory chip, or ROM. Various kinds existed over the lifetime of the system. ROMs degrade through various means, such as&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Exposure to UV light, which may vary depending on the plastic used in the case, the label and the position of the chip in the cartridge.&lt;/li&gt;&#xA;&lt;li&gt;Heat produced by the console sitting under it, other parts in the cartridge and the ROM itself&lt;/li&gt;&#xA;&lt;li&gt;Electrical damage such as voltage spikes and over-voltage conditions, which given the nature of the SFC power supply are not that uncommon.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Fortunately repairing ROMs by replacing them is not difficult and essentially restores the game to as-new condition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Circuit boards&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cartridge circuit board will eventually deteriorate, with the tracks degrading and lifting away from the board. Due to their age they are unlikely to use very fine tracks so may last longer and be easier to repair.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Very cheap circuit boards will eventually de-laminate, especially if heat cycled (heated and then cooled) repeatedly. Repair is possible but can be tricky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Batteries&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some cartridges used battery backed memory. The battery can usually be replaced with some soldering ability, but if it leaks it can damage the PCB and other components beyond repair.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Case durability&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The plastic housing of the cartridge will degrade over time, as all plastics do. Again, exposure to UV light and heat will age it more rapidly. Discolouration will happen first, and while it can be chemically reversed it is difficult to do with the label in place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Replacement housings are possible, either from a donor cartridge or 3D printed or professionally made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edge connector&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cartridge connects to the console via an edge connector. These are notorious for getting worn or dirty. Cleaning is possible, and re-surfacing is possible, but eventually the PCB substrate itself will disintegrate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Typical lifespans&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A properly archived cartridge with any batteries removed or regularly replaced might expect to last 50+ years. If stored any other way, it will vary greatly but as an electronic engineer and based on experience with older systems I'd expect to see the failure rate start to rapidly increase in the next few years.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-04-05T16:03:59.447" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6157" PostTypeId="2" ParentId="6151" CreationDate="2018-04-05T16:05:13.813" Score="3" Body="&lt;p&gt;TL;DR Your console and cartridges are very likely to out-live you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Game consoles and cartridges are made from plastic, fiberglass, metal, and semiconductor material. None of these are biodegradable. They are likely to remain intact for centuries, so long as they are protected from the outside environment. Even without protection from the environment, complex retro-electronics have been known to survive for years and still be usable. &lt;a href=&quot;https://youtu.be/JM_eW7h07ew?t=8m&quot; rel=&quot;nofollow noreferrer&quot;&gt;This video&lt;/a&gt; describes a 1977 TRS-80 Model 1 rescued from the back of a rusted out pickup truck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a safe, indoor environment, the most vulnerable part of your collection is the chips themselves. Discrete components like capacitors may fail more often, but are also trivial to source replacement parts. Barring any chip manufacturing defects that would shorten their life, chips are susceptible to things like cosmic and terrestrial radiation and &quot;electromigration&quot; that will eventually cause them to cease to function. However, these failures are rare and with luck will not effect your console or cartridges. Even if they do, repairs should still be possible for many years to come, often using spare parts from the large pool of still-functioning devices. After all, nothing you are proposing to collect is particularly rare (barring a few obscure game cartridges that were commercial failures).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, for cartridges in particular, I think your worries are unfounded. The critical aspect of the cartridge is the actual data it contains, and most of this code/data has already been preserved on newer media across the Internet and on private, isolated, storage media. The data should be around for centuries. The actual &quot;collectible&quot; parts (IMHO) are the parts that degrade fastest - which is the labels and packaging. The only cartridge likely to remain very valuable is the &quot;boxed copy&quot; with the packaging being well-preserved. Protecting paper/cardboard/box art from long-term wear and damage is another topic, but I think the more pertinent one for serious collectors of retro game cartridges.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-04-06T16:49:41.730" LastActivityDate="2018-04-06T16:49:41.730" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6158" PostTypeId="2" ParentId="6143" CreationDate="2018-04-05T17:34:15.563" Score="2" Body="&lt;p&gt;There are already several excellent answers.  I'dd add that floating-point operations can be implemented in software.  For example, the BASIC ROM on my old Commodore 64 -- which was actually written by Microsoft -- included subroutines to perform floating-point arithmetic.  The VIC-20 had a nearly identical BASIC, so I'm assuming it had similar support.&lt;br&gt;&#xA;... and the interfaces were well documented.  So the FP support was available to assembly language and (in theory) to any compiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strike&gt;IIRC the Atari 400/800 models also had a Microsoft BASIC ROM, so I'm guessing they would also have had software-based floating-point support.  I can't speak to that generation of Apples.&lt;/strike&gt;&lt;br&gt;&#xA;Per the comments, the Atari 400/800 also had a Microsoft BASIC, but it was disk (not ROM) based.  Per &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; &quot;AppleSoft BASIC&quot; was also authored by Microsoft.  AppleSoft BASIC had FP support, I'd guess the Atari version did as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least, software floating-point support via an external library was also a common option on the PC (x86) compilers of the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Performing floating-point operations in software was obviously much slower than a numeric co-processor, but this was &quot;good enough&quot; for most users, especially compared with the additional cost of a dedicated &quot;co-pro&quot; -- if that was even an option with your hardware (I'm pretty sure it was not on most &quot;home&quot; computers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... and if there wasn't a compelling case (for many/most users) for an external numeric (co)processor, there was even less incentive for CPU manufacturers to integrate those functions onto the main/primary CPU.  As other answers have pointed out, there were engineering difficulties involved in doing so ... but my point is, there was very little incentive to try.&lt;/p&gt;&#xA;" OwnerUserId="3904" LastEditorUserId="3904" LastEditDate="2018-04-06T13:02:47.917" LastActivityDate="2018-04-06T13:02:47.917" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6159" PostTypeId="1" AcceptedAnswerId="6160" CreationDate="2018-04-05T21:49:35.323" Score="10" ViewCount="681" Body="&lt;p&gt;What is the type or model of cash registers used in Walmart in the mid to late 90's and early 2000's? See &lt;a href=&quot;https://www.youtube.com/watch?v=3uy-tsXdY9s&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt;. Note the strange sounds that Ann says is when the cash register is printing.&lt;/p&gt;&#xA;&lt;p&gt;Also note that I'm blind (no interview questions please) so I can't see if it shows the model of the cash registers. If anyone here has worked at a Walmart or remembers the cash registers there you can also help, I just posted the video to help you guys out in answering my question.&lt;/p&gt;&#xA;" OwnerUserId="8373" LastEditorUserId="6659" LastEditDate="2020-11-01T18:21:41.250" LastActivityDate="2020-11-02T13:57:10.157" Title="What is the model of the cash registers used in Walmart in the mid to late 90's and very early 2000's?" Tags="&lt;hardware&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6160" PostTypeId="2" ParentId="6159" CreationDate="2018-04-05T21:59:57.990" Score="8" Body="&lt;p&gt;IBM POS system. Maybe some SurePOS 700 or predecessor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The historic interesting part here is the OS, IBM 4690 OS. It was introduced arround 1993 or 1994, as a follow up to 4680 OS which in turn is based on FlexOS. No, that's not the FLEX system, but an RTOS variant of DRI's Concurent DOS. So efectivly a direct ofspring of good old CP/M :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the late 1980s/early 1990 FlexOS became somewhat of a standard for POS systems. Not only with IBM, but also Wincor Nixdorf or ICL. IBM later sold the 4690 OS to Toshiba, while switching to some Linux (IIRC Suse).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-04-05T22:51:50.967" LastActivityDate="2018-04-05T22:51:50.967" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="6161" PostTypeId="2" ParentId="6143" CreationDate="2018-04-06T06:03:05.530" Score="4" Body="&lt;p&gt;My very first job was an in-line weighing system using an 8085. At 6.14MHz it just did not have the speed to perform the necessary floating point calculations needed for doing the stats. I cannot remember the chip used but it was a co-processor. &lt;/p&gt;&#xA;" OwnerUserId="8374" LastActivityDate="2018-04-06T06:03:05.530" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6162" PostTypeId="1" AcceptedAnswerId="6164" CreationDate="2018-04-06T14:37:38.323" Score="4" ViewCount="301" Body="&lt;p&gt;When an interrupt happens on a PDP-10 right, as on many other architectures you get the program counter pushed onto the stack. Actually, the program counter includes many status bits in the upper half of the word, similar to early ARMs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well one of these bits is the &quot;First Part Done&quot; bit, which apparently may be set to 1 or 0 depending on if something was done or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is about that bit. What is the First Part of executing an instruction? Why service an interrupt after that thing, instead of after the entire instruction?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-11-19T07:05:43.457" Title="What is the FPD bit on the PDP-10?" Tags="&lt;interrupt&gt;&lt;pdp-10&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6163" PostTypeId="2" ParentId="6162" CreationDate="2018-04-06T15:02:34.750" Score="3" Body="&lt;p&gt;IIRC, this was set during very CISC-y instructions that could take many dozens of machine cycles and/or memory accesses. It was set so that if a page fault or other high-level interrupt occurred while the instruction was executing, the CPU would know not to restart the instruction from the beginning (although I'm a little hazy about how it knew where to restart it from if FPD was set).&lt;/p&gt;&#xA;" OwnerUserId="484" LastActivityDate="2018-04-06T15:02:34.750" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6164" PostTypeId="2" ParentId="6162" CreationDate="2018-04-06T17:15:25.733" Score="11" Body="&lt;p&gt;The &lt;em&gt;First Part Done&lt;/em&gt; bit is used to signal whether a specific part of an instruction (the &quot;first part&quot;) is done already or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is only set on instructions like &lt;code&gt;ILDB&lt;/code&gt; (&quot;Increment and load byte&quot;) and &lt;code&gt;ILDW&lt;/code&gt; (&quot;Increment and load word&quot;) that address a pointer to a byte/word in memory, increment that pointer, and then fetch the byte or word that is referenced by that pointer into a register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is the FPD bit simply signals whether the increment has been done yet or not, as the interrupt might occur before or after the increment has been done (this seems to be a sort of &quot;non-atomic&quot; machine instruction).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Outside the CPU itself (for example for a program) this bit has no use whatsoever according to the manuals. It simply tells the processor where to pick up after a return from the interrupt.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-04-06T17:27:40.123" LastActivityDate="2018-04-06T17:27:40.123" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6165" PostTypeId="2" ParentId="6143" CreationDate="2018-04-06T20:22:55.820" Score="5" Body="&lt;p&gt;IIRC, improved &lt;strong&gt;yield&lt;/strong&gt; was another factor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The number of properly functioning chips from a given wafer was confidential information, so this is anecdotal - yet, they were not that great.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80486#Models&quot; rel=&quot;nofollow noreferrer&quot;&gt;486&lt;/a&gt; could be made as a 486DX with a CPU and FPU, 486SX (CPU only) or 487 (FPU).  486DX chips that only passed 1 of the 2 tests could be sold as 486SX or 487.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Re-use/leap-frogging&lt;/strong&gt; Another factor was that the &lt;em&gt;new&lt;/em&gt; CPU and FPU halves need not become available at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Case: With a new 386 (CPU), lacking the FPU of the later 387, some motherboards allowed re-using a 287.  Although not as fast as the later 386/387, a 386/287 was certainly faster with FP than a 386 alone emulating FP math or a 286/287.&lt;/p&gt;&#xA;" OwnerUserId="4553" LastEditorUserId="6659" LastEditDate="2018-10-18T11:46:22.460" LastActivityDate="2018-10-18T11:46:22.460" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6166" PostTypeId="2" ParentId="6143" CreationDate="2018-04-06T22:19:01.020" Score="9" Body="&lt;p&gt;Many small CPUs available and used &lt;em&gt;today&lt;/em&gt; for embedded designs do not have an onboard floating point unit - most of the AVR and PIC series, MCS51, some ARM ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;8 bit single-chip microprocessors were meant at least as much, if not more, for the same market that microcontrollers and embedded CPUs target today. In that market, cost and power efficiency are paramount, and a lot of such applications are about &lt;em&gt;controlling&lt;/em&gt; equipment and not doing heavy &lt;em&gt;computing&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same might even apply to early 16/32 bit CPUs - the users that could afford the early examples would not that often have built general purpose desktop computers with them - but had aircraft, industrial equipment, laboratory equipment to equip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first CPUs that seem to be tailored ALMOST ONLY to desktop/server/workstation computing are probably those of the 486/early Pentium era: Complex electrical and cooling requirements, multimedia optimizations, consumer-focused marketing...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mind that floating point can ALWAYS be done in software on an integer only CPU, but with significantly lower performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, in an embedded application, you would usually have all your data inputs (eg from ADCs driven by sensors, or video data from a digitizer) represented as integers, and try to scale all your calculations accordingly so that floating point math is not NEEDED - and once you can break the problem down to fixed point math, you can simply scale your values by multiplication with either powers of 10 or powers of 2 (the latter being very efficient, but needing some more computing to make end result numbers &lt;em&gt;presentable&lt;/em&gt; to a decimal-system user) and work with integers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using floating point numbers for &lt;em&gt;controlling&lt;/em&gt; equipment is sometimes a bad idea anyway, since there are more complex, bug-prone rules about which &lt;em&gt;exact&lt;/em&gt; values a floating point data type can &lt;em&gt;actually&lt;/em&gt; represent - which can give you interesting surprises when trying to make &lt;em&gt;decisions&lt;/em&gt; by comparing numbers: Two seemingly different inputs (or a too-large number vs the same number given a too-small increment) might suddenly be represented identically, and always compare as identical, which is just perfect if nonequality is your loop exit condition. Also, some floating point formats know one or more &quot;undefined&quot; values, which also might be treated in ways that break expectations like  &lt;code&gt;&quot;(a&amp;lt;b &amp;amp;&amp;amp; a&amp;gt;b) will always be false&quot;&lt;/code&gt; . Add some of these features being subtly implementation dependent, and the fact that you are using someone else's implementation when you use hardware floating point, and try to make code reliably portable... and there is your perfect storm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same is true of early PC applications - games could work with fixed point math since they did not really have to work with arbitrary number inputs or high precision, database handling software did not need floating point for anything, spreadsheets were usually not used to handle large AMOUNTS of floating point numbers - and currency can be well expressed in fixed point formats (-&gt;integer calculations behind the scenes). Same applied to early multimedia formats.&#xA;Users that DID need the capability - eg for precision CAD, scientific software, large spreadsheets - bought math coprocessors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, there was likely a chicken-and-egg effect for a while: Since coprocessors weren't that widespread, software authors (of software that did not NEED the performance) often did not bother including support for them even if there was some performance advantage - so no one bought a coprocessor since most of their software made no use of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, increasing the die size of an IC can cause you big problems when your processes are not yet really high yield. Say you put 10 combined chips on one wafer. You put 10 CPUs and 10 coprocessors each on another. Now you discharge a shotgun at both wafers, each with a load that will blast 10 random holes through each wafer (and silicon defects seem to work just like that). You will not be selling many combined chips.&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="785" LastEditDate="2018-04-06T22:25:32.717" LastActivityDate="2018-04-06T22:25:32.717" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6169" PostTypeId="2" ParentId="6143" CreationDate="2018-04-07T04:04:18.903" Score="9" Body="&lt;p&gt;We're so used to hugely complex and dense chips these days it's easy to forget that  there was a time when the 8086, with &quot;only&quot; 29,000 transistors (no on-chip cache of any kind), was at the edge of what could be done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put it simply:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It wasn't feasible because the chip would be too big to produce cost-effectively (die size, yield)&lt;/li&gt;&#xA;&lt;li&gt;Everything a math chip can do could be done in software, just slower &lt;/li&gt;&#xA;&lt;li&gt;Most applications weren't that math-heavy; having a dedicated math chip to speed it up wasn't important enough to most users to justify the extra cost of even adding a co-processor, let alone the probable cost of a CPU with math integrated into it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It was only as Moore's law allowed for much larger transistor counts that engineers put it use by integrating the math co-processor, adding logic for instruction prefetching/pipelining/branch prediction, cache, and multiple cores that we see in today's chips.&lt;/p&gt;&#xA;" OwnerUserId="4561" LastActivityDate="2018-04-07T04:04:18.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6170" PostTypeId="1" AcceptedAnswerId="6200" CreationDate="2018-04-07T20:48:34.717" Score="6" ViewCount="536" Body="&lt;p&gt;The first time I ever heard of a dongle was when it was used on a text processor called Wordcraft on the Commodore 8032.  It was around 1980.  We had three machines and had to share the dongle amongst us, which I thought was a pain so I had a look at the code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a scrambled bit of code which got unscrambled whenever the system checked for the dongle.  So all I did was unscramble it, set the return value to true, jump to the end of the routine and allow it to rescramble. Then I found out what checksum it came up with and patched that in.  The printer module also had to be patched because it checked the checksum.   It only took 5 days to work that out the first time round.  The second time round, it took 2 hours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About 2 months later, I saw an article in PC World that raving about how brilliant they were and how it would be an end to piracy.  There was a similar article in a US publication.  I wasn't exactly a top notch computer science graduate but it only took me five days part time.  Did these reporters/computer experts even try bypassing the dongle or did they just copy each other?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The moral is, if you want to implement a secure system with a dongle, get a crap programmer to implement it because they won't just have one routine to do the security - they will have several, all written differently so a cracker like myself can't just go in and clobber one routine to bypass the dongle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway - that was two side stories.  Wiki talks about the ones on the IBM PC but I remember using them in 1980, way before the IBM PC was even invented.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Did wordcraft use them on the earlier versions or was it only on Version F onwards.&lt;/li&gt;&#xA;&lt;li&gt;Did dongles exist before then, say on the Apple ][ or TRS-80 or even CP/M machines?&lt;/li&gt;&#xA;&lt;li&gt;Did Wordcraft invent the word dongle?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I can't find any history on any of the above&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2018-04-10T11:48:21.310" Title="Origin of Dongles" Tags="&lt;apple&gt;&lt;commodore-pet&gt;&lt;trs-80&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6171" PostTypeId="2" ParentId="6170" CreationDate="2018-04-07T21:03:30.987" Score="6" Body="&lt;p&gt;The oldest dongle like thing I own is a ROM board for the Apple II from 1978, where the whole PCB with all chips was cast in opaque thermoseting resin. This was ment to secure the software and disencurage any duplication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But tieing Software to hardware to restict usage is much older than microcomputers. Unique identifiers for machines and/or CPUs where common with mainframes. For /370 for example the &lt;code&gt;CPUID&lt;/code&gt; instruction (&lt;code&gt;X'B202'&lt;/code&gt; - &lt;code&gt;STIDP&lt;/code&gt;in early manuals) delivered a dword with a 16 bit machine type and a 24 bit serial number unique for each CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This feature was available at least since 1970. Software manufacturers did modify their product before delivery to run only on certain customer machines it was sold for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, dongling software isn't something invented by micros.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-04-08T20:15:36.273" LastActivityDate="2018-04-08T20:15:36.273" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="6173" PostTypeId="2" ParentId="5883" CreationDate="2018-04-07T23:19:59.257" Score="3" Body="&lt;p&gt;1970s - as pointed out above, 1971 was the advent of the IBM 3270, which I think qualifies as what you are asking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you are still making assumptions about how things work which is leading you to wonder something that isn't quite true - i.e., didn't they need a microprocessor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3270 terminals had some intelligence in the terminal itself, but they were connected (meaning multiple ones) to a box called a 3270 controller.  That is where the real processing took place.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's really interesting to go back and look at the architecture of the old IBM mainframes, especially System/370.  The mainframe itself was focused on computing as much as possible, and tasks like IO were intentionally offloaded from the CPU as much as possible.  That architecture had one or two 'channel controllers', which actually did burst IO work inside the mainframe box.  So, the 3270 terminal did what it could locally; a lot of the real work was done in the 3270 controller, which aggregated a number of 3270s, and that controller received and sent data in a very bursty way from the channel controllers, which then put data in/out of the memory for the CPU.  &lt;/p&gt;&#xA;" OwnerUserId="8392" LastActivityDate="2018-04-07T23:19:59.257" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6174" PostTypeId="1" AcceptedAnswerId="6175" CreationDate="2018-04-08T02:37:29.313" Score="11" ViewCount="1708" Body="&lt;p&gt;Some early consoles like the NES and the Sega Master had a horizontal screen resolution of 256.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That sounds good for an 8-bit machine, until you consider that a sprite sometimes needs a slightly negative position in order to be partly off the left side of the screen. (Consider e.g. the bad guys in Super Mario Bros, who move onto the screen from the right, and if you and they miss each other, end up moving off the screen to the left.) The upshot is that you need to track an extra bit for sprite positions. Not a huge problem, but it's got to be annoying being &lt;em&gt;so close&lt;/em&gt; to being able to track positions in one byte, and just missing the mark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would seem that by reducing the resolution to 248, you could represent positions in one byte, without making any discernible change in the quality of the display. Why didn't they do this?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-10-28T03:34:03.167" Title="8-bit console horizontal resolution" Tags="&lt;graphics&gt;&lt;nes&gt;&lt;sprite&gt;&lt;sega&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6175" PostTypeId="2" ParentId="6174" CreationDate="2018-04-08T03:10:41.613" Score="19" Body="&lt;p&gt;The NES did not use an extra bit for sprite positions.  A sprite's X-position was the position of its left edge, which means that sprites cannot be placed partially off the left side of the screen:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7rWCS.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7rWCS.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the NES &lt;em&gt;did&lt;/em&gt; actually provide the feature you're suggesting, in a way: bits 1 and 2 of &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/PPUCTRL#Mask_.28.242001.29_.3E_write&quot; rel=&quot;noreferrer&quot;&gt;the &lt;code&gt;PPUMASK&lt;/code&gt; register&lt;/a&gt; can be used to keep the leftmost 8 pixels of the screen blank.  This not only allows sprites on the left side to be hidden, but also helps to reduce the mirroring glitches on the sides of the screen in some games.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example, here's a screenshot of Super Mario Bros. 3:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RX7Ys.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RX7Ys.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's especially obvious in areas where the background color configured in the PPU palette is different from what we humans would consider the background color:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ubOe7.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ubOe7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="409" LastActivityDate="2018-04-08T03:10:41.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6176" PostTypeId="2" ParentId="219" CreationDate="2018-04-08T03:45:41.227" Score="21" Body="&lt;p&gt;This was &lt;em&gt;intentional&lt;/em&gt; so that the CPU would support secure operating systems. In a secure operating system with rigorous memory access protections you could not allow any software - user or kernel extension or driver - to switch back to the full freedom of real mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They had a lot of interesting memory management hardware on the '286: rings and call gates - swiped nearly directly from the most secure hardware/software platform of the time: Multics.  And they had new extensions too: task segments and task gates for multiprocessing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These features never got used as they wanted.  One major reason was that due to compatibility with all the peripherals - including disk controllers and graphics hardware that in those days were nowhere near sufficiently standardized - OS and other software that needed computer model/manufacturer independence needed to use the BIOS to access peripherals - and the BIOS was real mode - and the hacked-up switch to real mode (as discussed in other answers) was &lt;em&gt;slow&lt;/em&gt;.  Another major reason was that calling through call gates, and using hardware tasks, was much much slower than just implementing normal procedure calls and concurrent threads.  Hardware task switching in particular  was several times slower than just saving/restoring register context with normal instructions.  So no OS software got written for these special modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These capabilities were also available when 32-bit processors were made - starting with the '386 (and they're still there in the x86 architecture to this day) - but with 32-bit addressing it turns out it is much easier to use paging hardware (address translation tables and so on) to get OS security - also much higher performance.  No 32-bit OS used the stuff:  Windows, OS/2, and all the Unixes used paging for process isolation and security.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was actually saddened by this back in the day: I loved Multics, and the Multics architecture.  The Intel designer's hearts were in the right place, and it was brilliant work sticking all that stuff in a commodity microprocessor, but it turned out to be the wrong solution for the problem.  Operating system engineering had progressed past the Multics days and all that special hardware just did not lead to an economic solution.&lt;/p&gt;&#xA;" OwnerUserId="332" LastEditorUserId="332" LastEditDate="2018-04-13T03:41:21.840" LastActivityDate="2018-04-13T03:41:21.840" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="6177" PostTypeId="1" AcceptedAnswerId="6186" CreationDate="2018-04-08T06:45:05.690" Score="6" ViewCount="720" Body="&lt;p&gt;I recently acquired an IBM 3481 terminal. It has a parallel port, a DB-15 port (I believe for a twinax-T connector), an 8P8C keyboard connector, and a PS/2 connector. Since I don't have a vintage IBM minicomputer or AS/400 to connect it to, I'd like to determine if it's possible to connect this to a modern device or network as a dumb terminal. I'm not averse to soldering or arduino, but I am averse to spending more than $200 on a solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: It's a twinax based 3486 variant, not 3481.&lt;/p&gt;&#xA;" OwnerUserId="8394" LastEditorUserId="8394" LastEditDate="2018-04-11T15:29:37.460" LastActivityDate="2020-06-12T17:46:37.370" Title="Connect IBM 3481 terminal to RS232?" Tags="&lt;ibm&gt;&lt;terminal&gt;&lt;serial&gt;&lt;mainframe&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6178" PostTypeId="2" ParentId="6177" CreationDate="2018-04-08T07:01:50.123" Score="3" Body="&lt;p&gt;Straight answer: No. Not usable for your purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 3481 is a block mode terminal to be connected to a cluster controller and running its own (3270) protocoll. It's anything but dumb and its protocols are anything but simple.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-04-08T07:01:50.123" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6179" PostTypeId="2" ParentId="6170" CreationDate="2018-04-08T12:15:19.847" Score="6" Body="&lt;p&gt;The oldest (smart) hardware &quot;dongle&quot; I know of is from 1985 in the ZX Spectrum 48K.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To curb Internet piracy and as a &quot;collateral side effect&quot; also having more 16KB (e.g. 64KB for the game), Mikro-Gen Ltd launched the game &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=0004424&quot; rel=&quot;nofollow noreferrer&quot;&gt;Shadow of the Unicorn&lt;/a&gt; with an external 16KB (EP)ROM board that mapped on top of the internal ROM address space.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This game came with the Mikro-Plus interface, containing a 16K shadow&#xA;  ROM and joystick port. The ROM image can be found in the 'Additional&#xA;  material' section below. Fraser Ross created a Shadow of the Unicorn&#xA;  ROM Loader for the +2A/+3, which loads this ROM into RAM, allowing&#xA;  playing the game without the additional hardware device.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/KSq220y.jpg&quot; alt=&quot;simg&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, I also heard early rumours of simple dongles which were no more than resistors in joystick, serial or printer ports...but never got more concrete data on them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, during the 80s, in the DOS and in the Amiga world, the concept of a &quot;dongle&quot; diskette as a low cost copy protection measure was pretty common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually the diskette was either damaged in a particular point which the software would try to read/format, with data hidden in non-standard sectors, and/or formatted in non-standard ways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I myself created similar diskette protections in assembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also dealt with dongles so far later on, and even had a demo kit based on RS-232 I think, that I misplaced or lost track of. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I once broke also a dongle protection in the 90 in a DOS accounting program but it was rather simple... I debugged the (client) program to find out they just had a heavily protected interface module that hooked an interrupt, and upon called it set carry = 1 if the dongle was present, c=0 if not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did not even bother to look at the TSR encrypted code from the vendor, I just wrote a replacement TSR that returned carry = 1 and presto, did not even need to patch the actual program, just load my 30 bytes TSR instead of the dongle vendor before invoking it.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2018-04-09T21:00:24.673" LastActivityDate="2018-04-09T21:00:24.673" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6181" PostTypeId="2" ParentId="6124" CreationDate="2018-04-08T12:48:55.210" Score="14" Body="&lt;p&gt;Coincidentally, I found this explanation reading through Microprocessor Interfacing Techniques 3rd Ed 1979 by Zaks and Lesea page 16:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/uBpcd.jpg&quot; alt=&quot;Zaks&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;h1&gt;The Standard Microprocessor System&lt;/h1&gt;&#xA;  &#xA;  &lt;p&gt;Throughout this book, reference will be made to a “standard microprocessor.” The “standard” microprocessor today is the &lt;em&gt;8-bit microprocessor&lt;/em&gt;. Examples are the Intel 8080, 8085, the Zilog Z-80, the Motorola 8600, the Signetics 2650, etc. In view of the pin number limitation on DIPs (dual-in-line packages), the 8-bit microprocessor has become the norm. The reason is simple:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The Number of pins is limited to 40 (or 42) by economic considerations. Industrial testers required to test components having more than 40 pins are either not available, or would be extremely expensive. All standard testers will accept only up to 40 or 42 pins. In addition, naturally, the cost of the package itself increases rapidly over 40 pins.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="8395" LastEditorUserId="8418" LastEditDate="2018-04-10T16:47:48.547" LastActivityDate="2018-04-10T16:47:48.547" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6182" PostTypeId="2" ParentId="6143" CreationDate="2018-04-09T01:48:16.970" Score="5" Body="&lt;p&gt;Professional production coder / former IBM dealer here.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;High Cost is the answer&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;And the fact that fairly few users needed them.  &lt;em&gt;That's it&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the rationale behind the high cost is that math coprocessors were more complex and harder to make, even than the main CPU, as discussed in other answers.  To the consumer it boiled down to a match coprocessor or a printer.  Not a hard decision. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PCs were a game-changer for small business, but in organizing and filing (not in hard scientific computation).  Killer apps were simple databases, word processing, early accounting, and &lt;strong&gt;spreadsheets&lt;/strong&gt;.  Spreadsheets sound like math but they're mostly organizing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember, a lot of spreadsheets deal in money, and &lt;strong&gt;floating-point for money &lt;a href=&quot;https://softwareengineering.stackexchange.com/a/62979&quot;&gt;isn't necessarily a good idea&lt;/a&gt;&lt;/strong&gt; especially in &lt;a href=&quot;https://en.wikipedia.org/wiki/Single-precision_floating-point_format&quot; rel=&quot;noreferrer&quot;&gt;32-bit with only 7.225 significant digits&lt;/a&gt;. Correct money arithmetic is what &lt;a href=&quot;https://thenextweb.com/finance/2017/04/10/ancient-programming-language-cobol-can-make-you-bank-literally/&quot; rel=&quot;noreferrer&quot;&gt;keeps COBOL relevant&lt;/a&gt;, after all.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;FP was perfectly possible without a math coprocessor.  It was just done in software, slower. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind most programmers were very accustomed to not having hardware FP. We coded a lot closer to the bare metal back then, and one &lt;em&gt;simply did not&lt;/em&gt; carelessly ask for a bunch of floating point calcs the way you do today -- instead you figured a way to do it in integer math (or to be more precise, fixed point, no disappearing pennies). &lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2018-04-10T02:05:12.357" LastActivityDate="2018-04-10T02:05:12.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6183" PostTypeId="2" ParentId="6174" CreationDate="2018-04-09T07:43:59.753" Score="3" Body="&lt;p&gt;the stuff you are describing has nothing to do with x resolution selection. In the 8 bit era CPUs didn't have &lt;code&gt;mul , div&lt;/code&gt;  instructions so computing &lt;code&gt;*,/&lt;/code&gt; was really expensive. That is why the x resolution is usually power of 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That allows to compute pixel address from &lt;code&gt;x,y&lt;/code&gt; coordinates using just basic ALU operations. For example on 256 pixels per line and 1 Byte per pixel and LFB:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;address = screen_start + x + (y&amp;lt;&amp;lt;8)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the screen is usually on some base address (not colliding with lower bits of screen range) so in such case you might rewrite to&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;address = screen_start | x | (y&amp;lt;&amp;lt;8)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and even the bit-shift can be replaced by adding/oring with higher BYTE instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now back to your problem. Handling 16 bit &lt;code&gt;x&lt;/code&gt; position is much faster than handling non power of two x resolution screen rendering. As you manipulate the &lt;code&gt;x,y&lt;/code&gt; few times per frame but rendering sprites wold require expensive computations on per scan line of each sprite.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-04-11T07:41:02.657" LastActivityDate="2018-04-11T07:41:02.657" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6184" PostTypeId="2" ParentId="6174" CreationDate="2018-04-09T08:25:39.640" Score="4" Body="&lt;p&gt;256 is the maximum number of pixels per row, but most games used fewer. Using fewer pixels allowed for partially off-screen sprites with only 8 bits of position information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most hardware of that era allowed some flexibility with screen resolutions. While the timing for the display (PAL or NTSC) was fairly well nailed down, the programmer could choose to start or end the actual display of pixels earlier or later on each scanline, and earlier or later in the vertical refresh cycle.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-04-09T08:25:39.640" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6185" PostTypeId="2" ParentId="6177" CreationDate="2018-04-09T16:26:40.733" Score="7" Body="&lt;p&gt;According to &lt;a href=&quot;https://www.argecy.com/3481&quot; rel=&quot;noreferrer&quot;&gt;this site&lt;/a&gt;, the 3481 uses the &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/3270/GA23-0059-4_3270_Data_Stream_Programmers_Reference_Dec88.pdf&quot; rel=&quot;noreferrer&quot;&gt;3270 protocol&lt;/a&gt;, which isn't &lt;em&gt;that&lt;/em&gt; difficult to parse and process, but definitely not dumb.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen &quot;middleman&quot; applications that allow to use a 3270-type terminal to interact with other applications (e.g. z/OS UNIX) which expect dumb terminals, but usage is quite different from what one is used to. It shouldn't be too hard to write such an application, but definitely time consuming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More difficult will be the link and physical side: I couldn't find any details about the interface of 3481, but if it uses 3270-style coax, it will probably use IBMs &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Systems_Network_Architecture&quot; rel=&quot;noreferrer&quot;&gt;SNA&lt;/a&gt; on OSI Level 3 and &lt;a href=&quot;https://en.wikipedia.org/wiki/Synchronous_Data_Link_Control&quot; rel=&quot;noreferrer&quot;&gt;SDLC&lt;/a&gt; on OSI Level 2. Which definitely means soldering and an arduino, and writing a good bit of some kind of network-stack for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Physical specs are for example &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/3270/3271-3272_to_Device_Interface_Spec_May74.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. There are/were chips (called USART) that act similarly as an UART for the RS232 interface, e.g. the Intel 8251A or Zilog     Z85230/Z80230/Z8523L/Z85233, but I think they'll be difficult to obtain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you manage to make it work somehow, please keep us informed; I'd be very interested.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-04-09T16:26:40.733" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6186" PostTypeId="2" ParentId="6177" CreationDate="2018-04-09T19:57:03.393" Score="6" Body="&lt;p&gt;Short answer is 'no', these are pretty sophisticated terminals that speak an IBM proprietary-ish protocol, not simple old async RS-232.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Longer answer is 'maybe', depending on what you want to get out of it.  Some folks pick up an IBM 3174-like controller, and if it's late enough model with new enough microcode, it can talk to something like the 'Hercules' mainframe emulator running on a Linux box.  While interesting in and of itself, and a good way to learn about IBM mainframes, this doesn't sound like exactly what you're looking for or want to pay for.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-04-09T19:57:03.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6187" PostTypeId="1" AcceptedAnswerId="6190" CreationDate="2018-04-09T19:58:58.793" Score="6" ViewCount="2190" Body="&lt;p&gt;Emulators from Gotek or HxC support 3.5&quot; floppies. However none seem to support 5.25&quot; PC drives. Are there any alternatives out there?&lt;/p&gt;&#xA;" OwnerUserId="8337" LastActivityDate="2019-01-17T03:02:52.340" Title="Availability of 5.25&quot; floppy emulators?" Tags="&lt;floppy-disk&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6188" PostTypeId="2" ParentId="5165" CreationDate="2018-04-09T20:13:00.290" Score="2" Body="&lt;p&gt;I don't recall if the 5162 had the same issue as the 5160, but in the latter the 8th slot had some sort of difference in timing, and some cards had an issue with that.  If your card doesn't work in slot 8, try it in another slot before giving up.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-04-09T20:13:00.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6189" PostTypeId="2" ParentId="5165" CreationDate="2018-04-09T20:21:02.287" Score="3" Body="&lt;p&gt;If you don't mind soldering and making/ordering custom PCBs, you can actually build your own VGA card. Sergey Malinov has schematics on his website: &lt;a href=&quot;http://www.malinov.com/Home/sergeys-projects/isa-supervga&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.malinov.com/Home/sergeys-projects/isa-supervga&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is based around a Trident TVGA9000 chipset, which you can get as New Old Stock off of eBay or similar sites. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The card even has a fix for IBM XTs which do not implement the ALE line correctly. &lt;/p&gt;&#xA;" OwnerUserId="8337" LastActivityDate="2018-04-09T20:21:02.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6190" PostTypeId="2" ParentId="6187" CreationDate="2018-04-09T20:36:42.753" Score="8" Body="&lt;p&gt;HxC/Gotek-type floppy emulators support any type of floppy image (or at least, a very large number of types of floppy images), including images of 5.25” disks. All you need to do is convert your disk image to the appropriate emulator format (HFE for HxC), place it on the emulator (or SD card etc.), and load it...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least with the &lt;a href=&quot;http://hxc2001.free.fr/floppy_drive_emulator/&quot; rel=&quot;noreferrer&quot;&gt;HxC&lt;/a&gt; you can even emulate 8” disks! It uses a standard 34-pin Shugart connector to connect to pretty much any floppy controller, supports drive-select signals to emulate two disk drives, and can handle any image with up to 255 tracks and two sides. There are a number of examples in the forums of people using the emulator to replace a 5.25” drive, &lt;em&gt;e.g.&lt;/em&gt; &lt;a href=&quot;http://torlus.com/floppy/forum/viewtopic.php?f=7&amp;amp;t=911&quot; rel=&quot;noreferrer&quot;&gt;on a Tandy 1000 EX&lt;/a&gt;, &lt;a href=&quot;http://torlus.com/floppy/forum/viewtopic.php?f=7&amp;amp;t=3082&quot; rel=&quot;noreferrer&quot;&gt;on a PC XT&lt;/a&gt;, &lt;a href=&quot;http://torlus.com/floppy/forum/viewtopic.php?f=7&amp;amp;t=1648&quot; rel=&quot;noreferrer&quot;&gt;again on a PC XT&lt;/a&gt;, &lt;a href=&quot;http://torlus.com/floppy/forum/viewtopic.php?f=7&amp;amp;t=1435&quot; rel=&quot;noreferrer&quot;&gt;on an original IBM PC&lt;/a&gt;...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-04-09T20:59:20.863" LastActivityDate="2018-04-09T20:59:20.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6191" PostTypeId="2" ParentId="6121" CreationDate="2018-04-10T07:25:14.740" Score="6" Body="&lt;p&gt;To quote @Jules's comments:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I've never heard of this before, and I think a Wikipedia editor has&#xA;  misremembered something here. There is a similar story, and it's&#xA;  included in one of Wikipedia's linked sources (&quot;&lt;a href=&quot;http://archive.computerhistory.org/resources/access/text/2013/05/102658285-05-01-acc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computer History&#xA;  Museum - Oral History of Robert Proebsting&lt;/a&gt;&quot;, pages 41-43), but it&#xA;  tells of Mostek engineering a chip (a DRAM in this case) such that&#xA;  when other manufacturers copy it their yields would be low, not the&#xA;  other way around.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Also worth noting: Mostek continued manufacturing Z80s for many years&#xA;  after Zilog had their own production in place. Mostek Z80s were used&#xA;  in many of the early Sinclair computers, for example - the Issue 3&#xA;  Spectrum I had used a Mostek processor, and I believe was manufactured&#xA;  in 1984/85, so they were still producing them quite a while after any&#xA;  such problems would have been discovered.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="8178" LastEditorUserId="7946" LastEditDate="2018-05-30T10:14:51.020" LastActivityDate="2018-05-30T10:14:51.020" CommentCount="0" CommunityOwnedDate="2018-04-10T07:25:14.740" ContentLicense="CC BY-SA 4.0" />
  <row Id="6192" PostTypeId="1" AcceptedAnswerId="6193" CreationDate="2018-04-10T07:30:50.770" Score="5" ViewCount="301" Body="&lt;p&gt;I have a 286 Board (Octek Fox II 286) which takes up to four 30 pin SIMM modules. The manual however (&lt;a href=&quot;http://www.minuszerodegrees.net/manuals/Octek%20-%20FOX-II%20286%20(12_16%20MHz%20versions).pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.minuszerodegrees.net/manuals/Octek%20-%20FOX-II%20286%20(12_16%20MHz%20versions).pdf&lt;/a&gt;) is silent about the speed of the RAM ICs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So do I need 120ns SIMMs (hard to come by), or are 70 or 80ns ICs good, too. &lt;/p&gt;&#xA;" OwnerUserId="8337" LastActivityDate="2018-04-10T08:21:40.580" Title="What kind of SIMMs can 286 PCs use?" Tags="&lt;memory&gt;&lt;80286&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6193" PostTypeId="2" ParentId="6192" CreationDate="2018-04-10T08:05:17.840" Score="5" Body="&lt;p&gt;70 or 80ns SIMMs are supported, and are in fact required if you wish to run your system with no wait states. 120ns SIMMs would require one wait state. Even though your motherboard manual doesn’t mention memory speeds, the fact that is supports disabling wait states indicates that it works fine with faster memory. (AFAIK faster memory shouldn’t cause issues in any case.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears that the Fox II uses a Headland HT12 chipset, and that chipset &lt;a href=&quot;http://www.vogonsdrivers.com/files/ht12a_user_manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;is documented as supporting 0-wait-state operation at 16MHz with 80ns DRAM&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might find &lt;a href=&quot;https://www.matrix-bios.nl/calc/waitstates.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this wait state calculator&lt;/a&gt; useful.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-04-10T08:21:40.580" LastActivityDate="2018-04-10T08:21:40.580" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6194" PostTypeId="1" AcceptedAnswerId="6195" CreationDate="2018-04-10T08:26:50.017" Score="33" ViewCount="5208" Body="&lt;p&gt;Originally, UNIX was written in PDP-7 assembly, and then in PDP-11 assembly, but then when UNIX V4 began to be re-written in C in 1973 and was run mostly on the PDP-11. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far as I can tell, there is no Ancient C compiler that targets the PDP-7, nor any provision for running UNIX V4 or later on the PDP-7. Or, for that matter, any of the other very similar 18-bit computers such as the PDP-9. Why not? Is C unsuitable for the PDP-7, or was there no demand for this setup?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-04-10T08:44:56.917" LastActivityDate="2018-04-10T08:45:03.020" Title="Why was UNIX never backported to the PDP-7?" Tags="&lt;unix&gt;&lt;c&gt;&lt;pdp-7&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6195" PostTypeId="2" ParentId="6194" CreationDate="2018-04-10T08:44:48.113" Score="30" Body="&lt;p&gt;The PDP-7 was too small and too slow; quoting Dennis M. Ritchie in &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/chist.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The Development of the C Language&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;On the PDP-7 Unix system, only a few things were written in B except B itself, because the machine was too small and too slow to do more than experiment; rewriting the operating system and the utilities wholly into B was too expensive a step to seem feasible. At some point Thompson relieved the address-space crunch by offering a “virtual B” compiler that allowed the interpreted program to occupy more than 8K bytes by paging the code and data within the interpreter, but it was too slow to be practical for the common utilities.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If the developers excluded rewriting everything in B, rewriting everything in C would probably never have been considered, especially since by the time C became useful, the PDP-7 was thoroughly obsolete. Quoting Ritchie again in &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/hist.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The Evolution of the Unix Time-sharing System&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By the beginning of 1970, PDP-7 Unix was a going concern. Primitive by today's standards, it was still capable of providing a more congenial programming environment than its alternatives. Nevertheless, it was clear that the PDP-7, a machine we didn't even own, was already obsolete, and its successors in the same line offered little of interest.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;By the time UNIX was &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/portpapers.html&quot; rel=&quot;noreferrer&quot;&gt;considered portable&lt;/a&gt;, in the late seventies, the PDP-7 was definitely no longer a target for porting...&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-04-10T08:44:48.113" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6196" PostTypeId="2" ParentId="6194" CreationDate="2018-04-10T08:45:03.020" Score="31" Body="&lt;p&gt;The team working on Unix at the time considered the PDP-7 to be obsolete, and had no interest in making Unix into a finished system to run on it; they only used it originally because the machine was available to them and they had little other use for it.  Plus, Bell had little interest in developing operating systems &lt;em&gt;per se&lt;/em&gt;, and only financed development of Unix because it was expected to provide useful applications -- apparently, no useful application had been found for the PDP-7.  Quoting from Dennis M Ritchie's &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/hist.html&quot; rel=&quot;noreferrer&quot;&gt;The Evolution of the Unix Time-sharing System&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By the beginning of 1970, PDP-7 Unix was a going concern. Primitive by today's standards, it was still capable of providing a more congenial programming environment than its alternatives. Nevertheless, it was clear that the PDP-7, a machine we didn't even own, was already obsolete, and its successors in the same line offered little of interest. In early 1970 we proposed acquisition of a PDP-11, which had just been introduced by Digital. In some sense, this proposal was merely the latest in the series of attempts that had been made throughout the preceding year. It differed in two important ways. First, the amount of money (about $65,000) was an order of magnitude less than what we had previously asked; second, the charter sought was not merely to write some (unspecified) operating system, but instead to create a system specifically designed for editing and formatting text, what might today be called a `word-processing system.' &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-04-10T08:45:03.020" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6197" PostTypeId="1" AcceptedAnswerId="6201" CreationDate="2018-04-10T10:51:18.437" Score="5" ViewCount="951" Body="&lt;p&gt;I am trying to identify a game from presumably the 80s. It was played with at least two players. Each player could set &quot;balls&quot; or &quot;chips&quot; on a 2 dimensional gameboard. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The balls or chips could be stacked, this stacking had a direct effect on adjacent chips set by the other player. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If e.g. 4 balls were set, the chips north, south, east and west got the player's color, the ultimate goal was to kick all opponents by transforming their stones.&lt;/p&gt;&#xA;" OwnerUserId="7605" LastActivityDate="2021-05-21T10:56:31.467" Title="Identifying a game from probably the 80s" Tags="&lt;identify-this-game&gt;" AnswerCount="6" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6198" PostTypeId="2" ParentId="6197" CreationDate="2018-04-10T11:03:06.533" Score="0" Body="&lt;p&gt;Could it have been Hexxagon and/or its sequel? They were DOS games in which two players alternatively place pieces and each piece placed converts all its neighbours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/aJFLL.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As per the comment below, this apparently has a rectangular predecessor in Ataxx. Is that an option?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/FXc7z.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-04-10T11:06:06.140" LastActivityDate="2018-04-10T11:06:06.140" CommentCount="5" CommunityOwnedDate="2018-04-10T11:06:06.140" ContentLicense="CC BY-SA 3.0" />
  <row Id="6199" PostTypeId="2" ParentId="6197" CreationDate="2018-04-10T11:16:30.890" Score="1" Body="&lt;p&gt;Was this game called Hexplode?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hexplode was a type-in game for the BBC Micro, I think. I would provide more information, but the Wikipedia article on it was recently deleted and the only reimplementation of it that I know of has also been removed from the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were many variants of this with different board topologies.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Gameplay&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You have a hexagonal board on which you can place dots. When there are enough dots to evenly fill all of the neighbouring tiles, the tile &quot;explodes&quot;, clearing the tile, capturing the neighbouring tiles and adding one to their dot counts. This can cause a chain reaction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some pictures of one implementation (not the BBC Micro version):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://web.archive.org/web/20120717090416im_/http://www.alinden.demon.nl/psion/hex2.gif&quot; alt=&quot;&quot;&gt;&lt;br&gt;&#xA;&lt;sup&gt;Image source Hexplode v1.1 below&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;More information&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I found a page which includes more information and a sample download: &lt;a href=&quot;https://web.archive.org/web/20120717090331/http://www.alinden.demon.nl/psion/hexplode.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hexplode v1.1&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2018-04-10T12:13:30.750" LastActivityDate="2018-04-10T12:13:30.750" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6200" PostTypeId="2" ParentId="6170" CreationDate="2018-04-10T11:48:21.310" Score="0" Body="&lt;p&gt;Found a wiki article on it&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Software_protection_dongle&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Software_protection_dongle&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wordcraft were the first ones to use it but they didn't create the word dongle.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2018-04-10T11:48:21.310" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6201" PostTypeId="2" ParentId="6197" CreationDate="2018-04-10T14:03:20.823" Score="14" Body="&lt;p&gt;It sounds like you're describing the game Atoms for the Amiga. It was common on magazine coverdisks and public domain collections in  the 90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.ytimg.com/vi/kEDjZyG2g-g/hqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this image, the explosion represents a fully occupied cell. The four atoms that were present in it will be added to the adjacent cells, turning them green. If any of those cells (such as the ones North and West) become fully occupied as a result, they will in turn explode.&lt;/p&gt;&#xA;" OwnerUserId="8419" LastActivityDate="2018-04-10T14:03:20.823" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6202" PostTypeId="2" ParentId="6197" CreationDate="2018-04-10T14:15:27.057" Score="3" Body="&lt;p&gt;&lt;em&gt;Critical Mass&lt;/em&gt; is a type-in game featured in &lt;a href=&quot;https://archive.org/details/cvg-magazine-015&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computer &amp;amp; Video Games issue 15&lt;/a&gt; (January 1983).  Originally for the TRS-80, but I ported it to run on a Spectrum and I dare say others did similar things at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The description from the magazine text:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It's a two player game based on a board game called Explosion [...] You are presented with a 6x6 grid and each player in turn introduces one of his counters either onto an empty square or a square occupied by one or more of his own counters.  However, each square has a point at which critical mass is reached and fission occurs.  Corner squares explode when two counters are on them, side squares explode when containing three counters, central squares go up when four counters occupy their space.&lt;br&gt;&#xA;  When an explosion occurs the counters on the exploding square are distributed across the board. Any enemy counters on the latter square are captured and become counters belonging to the mover. Should receiving squares attain critical mass further explosions will result.&#xA;  Any player having no counters left at the end of his opponent's move is the loser.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This seems very similar to the answer posted by wizzwizz4, except played on a square grid rather than hexagonal, which seems more like the description in the question.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-04-10T14:15:27.057" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6203" PostTypeId="1" AcceptedAnswerId="6217" CreationDate="2018-04-10T14:30:04.833" Score="6" ViewCount="636" Body="&lt;p&gt;What books would have been used to teach school aged kids BASIC in a classroom setting back when BASIC was in common use? 8-Bit computers commonly came with tutorials to learn BASIC, like &lt;a href=&quot;https://archive.org/details/A_Touch_of_Applesoft_BASIC_HQ&quot; rel=&quot;noreferrer&quot;&gt;A Touch of AppleSoft BASIC&lt;/a&gt; or &lt;a href=&quot;https://archive.org/details/Commodore_64_An_Introduction_to_Basic_Part_1&quot; rel=&quot;noreferrer&quot;&gt;An Introduction to BASIC&lt;/a&gt;. From the late 70's through the early 90's many schools taught BASIC and I would like to harness all their hard work instead of reinventing the wheel. David Brin wrote extensively about why BASIC programming is still useful in &lt;a href=&quot;https://web.archive.org/web/20090303091306/http://www.salon.com:80/tech/feature/2006/09/14/basic/&quot; rel=&quot;noreferrer&quot;&gt;Why Johnny Can't Code&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The &quot;scripting&quot; languages that serve as entry-level tools for today's&#xA;  aspiring programmers &amp;#8211; like Perl and Python &amp;#8211; don't make this&#xA;  experience accessible to students in the same way. BASIC was close&#xA;  enough to the algorithm that you could actually follow the reasoning&#xA;  of the machine as it made choices and followed logical pathways. &#xA;  Repeating this point for emphasis: You could even do it all yourself,&#xA;  following along on paper, for a few iterations, verifying that the dot&#xA;  on the screen was moving by the sheer power of mathematics, alone.&#xA;  Wow!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Clarification: I'm interested in US schools which general used the C64 or the Apple II.&#xA;Second Clarification: I've expanded the question to school aged since elementary school is aiming very low.&lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="175" LastEditDate="2018-04-11T15:23:45.243" LastActivityDate="2018-04-11T17:01:21.107" Title="What books did schools use to teach BASIC?" Tags="&lt;programming&gt;&lt;basic&gt;&lt;applesoft-basic&gt;&lt;books&gt;" AnswerCount="2" CommentCount="19" ContentLicense="CC BY-SA 3.0" />
  <row Id="6204" PostTypeId="2" ParentId="6203" CreationDate="2018-04-10T18:23:25.860" Score="4" Body="&lt;p&gt;Not a book but a (relatively) current website, with lesson plans, in AppleSoft BASIC: &lt;a href=&quot;http://www.hoist-point.com/applesoft_basic_tutorial.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;20 lessons to teach your 12-year old how to start programming&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-04-10T18:23:25.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6205" PostTypeId="1" AcceptedAnswerId="6206" CreationDate="2018-04-11T03:59:28.240" Score="27" ViewCount="15419" Body="&lt;p&gt;Suppose you have a program that is 2&lt;sup&gt;18&lt;/sup&gt; words long. However you are using a 16 bit machine and have 2&lt;sup&gt;16&lt;/sup&gt; words of RAM. (The RAM is directly addressed by the CPU). On the other hand, you have unlimited 'slow' storage where the full program can reside. How do you place in RAM the portions of your program that are currently needed (since you can't fit the whole thing)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did retro computers achieve this? Is it substantially different from the modern approach (if so how)?&lt;/p&gt;&#xA;" OwnerUserId="6672" LastEditorUserId="611" LastEditDate="2018-04-11T18:43:55.743" LastActivityDate="2018-04-11T23:23:14.200" Title="How can you run a program that is bigger than RAM?" Tags="&lt;programming&gt;&lt;memory&gt;" AnswerCount="7" CommentCount="11" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6206" PostTypeId="2" ParentId="6205" CreationDate="2018-04-11T04:28:27.713" Score="35" Body="&lt;p&gt;The method depends on whether you have the address space or not, regardless of the RAM limitation.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;If you already have a 32-bit address space, but simply not much RAM, then the answer is virtual memory.&amp;nbsp; Virtual memory is generally processor supported: the processor traps accesses to memory that isn't present, and allows the operating system to perform a swap (to/from disc) &amp;#8212; to perhaps flush something to disc in order to allow something else to be loaded.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;However, given the statement of having 2&lt;sup&gt;16&lt;/sup&gt; words of RAM, we will assume we do have only a 16-bit address space.&amp;nbsp; Here, the concepts here are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Overlay_(programming)&quot; rel=&quot;noreferrer&quot;&gt;Overlays&lt;/a&gt; &amp;#8212; for code&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These will allow you to keep your resident code to a minimum.&amp;nbsp; I remember using an overlay linker on the HP/1000 that took all night to compute the overlays.&amp;nbsp; It would even duplicate small functions in the call tree into different overlay segments so that it would not have to switch overlays.&amp;nbsp; Such mechanisms preclude function pointer comparison, but that was not really an issue with the languages back then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fundamentally, overlays keep a common base portion of code, and swap out the remainder as needed.&amp;nbsp; They must use an some additional state (usually another word) for holding return address on the stack; the mechanism may have to perform a segment swap on return as well as on call.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, &lt;em&gt;no way overlays will&lt;/em&gt; get you to 2&lt;sup&gt;32&lt;/sup&gt; sizes; they merely condense the code section so you have some more room for data within your existing (16-bit) address space.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Extended pointers &amp;#8212; for data&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The HP/1000 had a 15-bit address space (words, not bytes).&amp;nbsp; Using microcode to offer an extend addressing of 32-bit pointers, it would map 32-bit addresses into the last of several pages in the 16-bit address space.&amp;nbsp; So, the 15-bit address space memory would look something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;+-------------------------------------------+&#xA;|   code...       |   data...     |mp-1|mp-2|&#xA;+-------------------------------------------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The code was as much as needed by the maximum size of the compressed overlays.&amp;nbsp; The data for global fixed data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mp-1 and mp-2 are smaller chunks &amp;#8212; 2 pages each in case data crossed over a page boundary, where a page is ~1024 words or so.&amp;nbsp; The 2 pages ensured that after a mapping at least 1k was accessible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The HP/1000 was a microprogrammed machine, and in the later days had special microcoded instructions to map a 32-bit address/pointer into either the mp-1 area (2k) or the mp-2 area (also 2k).&amp;nbsp; After using the mapping instructions, then you could write code that would transfer or compute &amp;#8212; all using 15-bit addressing &amp;#8212; between regular &quot;data...&quot; and data in mp-1 and/or mp-2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These microcoded mapping instructions would consume a 32-bit pointer (in the 16-bit A &amp;amp; 16-bit B registers) and return you a 16-bit pointer (in the A register) to the item of interest (after mapping that into either mp-1 or mp-2 by the choice of opcode).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, at the cost of 4 pages (4k) of 15-bit address space, you could access 2&lt;sup&gt;32&lt;/sup&gt; bytes using the mappings.&amp;nbsp; Oh, and also the cost of inserting a mapping instruction before a 15-bit address space load or store.&amp;nbsp; And further of maintaining 32-bit pointers, but you would have those sizes anyway with any other scheme supporting larger addressing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't recall how virtual memory applied but I believe that would have been included along with the mappings, to access even more memory than both address space and real memory as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, if your program needs 2&lt;sup&gt;32&lt;/sup&gt; bytes, most of that will be data.&amp;nbsp; So, for a 16-bit computer, overlays get you into the range of 64k-128k or more of code, and 32-bit extended pointer mappings get you to very large data/heap sizes.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Other computer systems have also had extended pointers, e.g. the 80286 could access up to 1MB on a 16-bit architecture.&amp;nbsp; They used segment registers to complement 16-bit pointers.&amp;nbsp; You could use them in 2 different ways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first is to hold the segment registers fixed, with one pointing to code, one to data, one to heap, and one to stack.&amp;nbsp; You could then have 64k of code and maybe 64k the rest; or maybe 64k of each global data, heap, and stack, but that compromised the runtime model, since the language would have to simply know a priori where a 16-bit pointer referred (easy with code vs. data but not so easy with global data vs. heap vs. stack).&amp;nbsp; Usually you could get 128k programs out of that arrangement, sometimes a bit more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other approach uses constant remapping similar to the HP/1000 where the segment registers are reloaded as needed from 32-bit pointers used by the program.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastEditorUserId="7985" LastEditDate="2018-04-11T04:54:55.800" LastActivityDate="2018-04-11T04:54:55.800" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="6207" PostTypeId="1" CreationDate="2018-04-11T06:23:39.403" Score="8" ViewCount="434" Body="&lt;p&gt;From what I've read of &lt;a href=&quot;https://en.wikipedia.org/wiki/PLATO_(computer_system)&quot; rel=&quot;noreferrer&quot;&gt;PLATO&lt;/a&gt; it seems like it was a pretty powerful system, with some features that in retrospect seem way ahead of it's time, especially when compared to BBS which seemed to be far more popular. According to Wikipedia at least (super accurate, I know) the last production system was shut down around 12 years ago.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any known running versions of this system which can be access via retro machines today via WiFi modem or similar? &lt;/p&gt;&#xA;" OwnerUserId="107" LastEditorUserId="576" LastEditDate="2021-02-28T16:38:35.003" LastActivityDate="2021-02-28T19:56:16.917" Title="Is there something akin to PLATO still available?" Tags="&lt;network&gt;&lt;plato&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6208" PostTypeId="2" ParentId="6205" CreationDate="2018-04-11T08:09:50.140" Score="7" Body="&lt;p&gt;In the beginning there was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Turing_machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turing machine&lt;/a&gt; which did not have RAM in the way we recognize RAM today. You could look at it as a state register and all the stuff was done on the tape by a self-rewriting program (just a set of rules really). So that was the first principle of running a program bigger than RAM (using an external storage medium).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;strong&gt;16 bit&lt;/strong&gt; machine does not mean you get a 16 bit address space. For example &lt;strong&gt;8 bit CPUs&lt;/strong&gt; like &lt;strong&gt;Z80, I8080&lt;/strong&gt; have a &lt;strong&gt;16 bit&lt;/strong&gt; address space. So you need to look at how many bits your address bus has got and not how many bits your computer is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the days programmers knew how to program efficiently (as they had no other choice). So the programs were not that big that they would &lt;strike&gt;not&lt;/strike&gt; fit into &lt;strong&gt;RAM&lt;/strong&gt;. How ever with time and added data like sound and graphics and complexity of games some games were bigger than the &lt;strong&gt;RAM&lt;/strong&gt; space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what was done was that app was divided into functional blocks (in games, into levels and main menu) and you needed to reload the program from storage on each transition between those parts. IIRC &lt;strong&gt;ZX&lt;/strong&gt; games like &lt;strong&gt;North&amp;amp;South R-Type Myth&lt;/strong&gt; used this technique. As the storage was usually &lt;strong&gt;MG&lt;/strong&gt; tape this was very uncomfortable (as it needed user interaction) especially if your tape did not have a counter. Also the load times were IIRC &lt;code&gt;~35KByte/5min&lt;/code&gt; so you would need to wait a lot just to return to the menu or something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With more and more demands on the &lt;strong&gt;RAM&lt;/strong&gt; size some 8-bit computers with 16-bit address buses (64 KB) started to use more memory (80 KB, 128 KB, 192 KB) and that was used by paging it into a specific address space. So you got one configuration IO-mapped register which decided which chunk of memory is placed where. For example this was used in &lt;strong&gt;ZX128, Didaktik Gamma&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With faster and more automated storage media like &lt;strong&gt;FDD&lt;/strong&gt; and &lt;strong&gt;HDD&lt;/strong&gt; the same could be done with storage directly. Paging with storage was called swapping (maybe you remember the swap file on windows).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the need for multi tasking and memory protection the newer processors came up with the virtual memory which in a nutshell can programaticaly remap &quot;any&quot; physical address space to &quot;any&quot; virtual address space, according to the memory mapping rules of the used architecture. That is, however, far from my field of expertise and you should read &lt;code&gt;Erik Eidt's&lt;/code&gt; answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sad thing is that with the increased &lt;strong&gt;RAM&lt;/strong&gt; and storage capacity the programmers got really lazy and now our &lt;strong&gt;OS&lt;/strong&gt; is 15-50 GByte which is nonsense as there is not that much data and surely not relevant code. There are 1GB profi app exe files out there (without any sound or textures) too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another drawback of this devolution is that programs that ran fine on 386 once has new counterparts that do the same job but need a &lt;strong&gt;CPU&lt;/strong&gt; 1000x times faster (I am talking about text of course as in graphics the job is not the same).&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="836" LastEditDate="2018-04-11T13:11:06.613" LastActivityDate="2018-04-11T13:11:06.613" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6209" PostTypeId="2" ParentId="6205" CreationDate="2018-04-11T08:13:31.053" Score="4" Body="&lt;p&gt;There were two basic approaches to this. I've implemented both. Both rely on swapping data between RAM and backing storage (typically disk) as it is required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Application level&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many moons ago I wrote a raytracing system for DOS. Because it could not hold all the necessary image and spacial data in RAM at once, it would load/save one row at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Word processors did this too, for very large documents. Older operating systems like DOS were not sophisticated enough to assist the application, so they had to implement their own custom schemes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is extremely rare these days, because now almost every OS does it automatically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;OS level&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The OS can use a memory management unit (MMU) to intercept memory accesses to certain address ranges. Depending on the MMU there can be limitations such as detection only being down to a 4k page level, rather than individual bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MMU can trigger an interrupt, a special CPU feature where the currently executing code is halted and a special interrupt handler routine is run. The OS provides this routine and uses it to halt the running application while data is loaded from disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MMUs were not common in home computers until the 1990s, as they are somewhat expensive and complex devices.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-04-11T08:13:31.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6210" PostTypeId="1" AcceptedAnswerId="6211" CreationDate="2018-04-11T09:28:36.373" Score="9" ViewCount="590" Body="&lt;p&gt;1) Is S-100 still supported or available for serious home brew? Does anyone still actively sell &lt;strong&gt;&lt;em&gt;new&lt;/em&gt;&lt;/strong&gt; boards, cases, designing, support, etc? If not, then about what year did S-100 development stop?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) If S-100 is still supported what is the most popular OS and basic configuration (if there is one)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;[ I built my first computer as a Z-80/CPM based Altair system (~1978) and eventually donated it to a business in about 1990. As I remember it, a company named Morrow (or something like that) still was selling business systems at least to the 1987-88 period and I think S-100 was still going well enough for advertisers in the computer magazines. My system consisted of a case that supported about 20 cards and had a power supply that brought the weight to about 40-50lbs. I had another case that held two 8in floppy drives and weighed about the same. Both cases where approximately 18&quot; square and 10&quot; high!]&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2018-04-11T10:21:05.700" LastActivityDate="2018-04-11T10:21:05.700" Title="Is S-100 alive?" Tags="&lt;history&gt;&lt;z80&gt;&lt;s-100&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6211" PostTypeId="2" ParentId="6210" CreationDate="2018-04-11T09:49:28.733" Score="11" Body="&lt;p&gt;Yes, there are still a few communities using and developing S-100 boards. A good place to start is &lt;a href=&quot;http://www.s100computers.com/&quot; rel=&quot;noreferrer&quot;&gt;the S100 computers&lt;/a&gt; site, which lists &lt;a href=&quot;http://www.s100computers.com/My%20System%20Index%20Page.htm&quot; rel=&quot;noreferrer&quot;&gt;a number of new S-100 boards&lt;/a&gt; which can be ordered and used to build new S-100 systems. &lt;a href=&quot;https://groups.google.com/forum/?fromgroups#!forum/s100computers&quot; rel=&quot;noreferrer&quot;&gt;The corresponding forum&lt;/a&gt; is very active.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the most popular S-100 configuration is still a Z-80 with CP/M, albeit with newer peripherals — &lt;a href=&quot;http://www.s100computers.com/My%20System%20Pages/Console%20IO%20Board/Console%20IO%20Board.htm&quot; rel=&quot;noreferrer&quot;&gt;VGA output and PC keyboard input&lt;/a&gt;, and &lt;a href=&quot;http://www.s100computers.com/My%20System%20Pages/IDE%20Board/My%20IDE%20Card.htm&quot; rel=&quot;noreferrer&quot;&gt;IDE storage&lt;/a&gt;. You can also build DOS systems, &lt;em&gt;e.g.&lt;/em&gt; using &lt;a href=&quot;http://www.s100computers.com/My%20System%20Pages/80486%20Board/80486%20CPU%20Board.htm&quot; rel=&quot;noreferrer&quot;&gt;a 486 CPU board&lt;/a&gt; and &lt;a href=&quot;http://www.s100computers.com/My%20System%20Pages/80386%20-%2032MG%20RAM%20Board/32MG%20Static%20RAM%20Board.htm&quot; rel=&quot;noreferrer&quot;&gt;SRAM board&lt;/a&gt;, or even a PDP-11 clone with &lt;a href=&quot;http://s100computers.com/My%20System%20Pages/PDP11%20V2%20Board/PDP11%20Board%20V2.htm&quot; rel=&quot;noreferrer&quot;&gt;this PDP-11 CPU board&lt;/a&gt; and &lt;a href=&quot;http://s100computers.com/My%20System%20Pages/PDP11%20Support%20Board/PDP11%20Support%20%20Board.htm&quot; rel=&quot;noreferrer&quot;&gt;associated support board&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-04-11T09:49:28.733" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6212" PostTypeId="2" ParentId="6205" CreationDate="2018-04-11T11:01:36.130" Score="11" Body="&lt;p&gt;(Uiuiui - according to the rules this question should be out of scope as &lt;strong&gt;too broad&lt;/strong&gt;, but lets give it a try.)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How did retro computers achieve this? Is it substantially different from the modern approach (if so how)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As with any such broad question yes and no :))&lt;/p&gt;&#xA;&lt;p&gt;This calls for a lengthy definition phase.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;The History&lt;/h1&gt;&#xA;&lt;p&gt;The very first didn't even bother to distingush much between 'slow' and fast memory, as the 'slow' device was it. Either because all RAM except registers was drum memory (like &lt;a href=&quot;https://en.wikipedia.org/wiki/Z22_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Zuse's Z22&lt;/a&gt;) (*1) or part of the adress space was drum (&lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_1103&quot; rel=&quot;noreferrer&quot;&gt;Univac 1103&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;In fact, many early machines didn't have direct accessible external storage at all. For example a Univac 9200 (*2) only had punch card I/O and a printer.&lt;/p&gt;&#xA;&lt;p&gt;The first thing that got rare wasn't programm space but data RAM. Keep in mind, a punch card is already 80 bytes, and a mere 100 of them kept in memory is about 8 KiB. Quite a lot for early computers, resulting in a need to handle them on some fast way without enough memory. Early disks (*3) weren't so much used for permanent data storage, but temporary work files. They were small and way too expensive to be wasted for things that could be read from tape (*4).&lt;/p&gt;&#xA;&lt;p&gt;Data too large to be handled at once would be moved in and out under program controll. Either as records or blocks.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;More than Meets the Eye&lt;/h1&gt;&#xA;&lt;p&gt;Ofc, even back then there where tasks to complicated to fit into available memory. There are baisicly two methods to handle this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Chaining&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Overlays&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Both can be used for data or programs, although chaining is usually more associated with programs.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Chaining&lt;/strong&gt; is the most simple way of runing a task too large to fit into memory at once. It gets split up in a series of (somewhat) independant programs that get run after each other. A batch file is eventually the most simple way of chaning. Early on Mainfram OS did support more sophistiveted ways of chaining where successive parts got loaded into the same memory while keeping exverything but the newly loaded section intact, thus able to share data. Unix' idea of pipeing streams thru programms is somewhat of an inbetween here.&lt;/p&gt;&#xA;&lt;p&gt;As with mainframes before, early micro also supported chaining beyond a batch. Beside sinply loading a follow up programm (via &lt;code&gt;LOAD&lt;/code&gt;), Apple's Integer BASIC ofered a &lt;code&gt;CHAIN&lt;/code&gt; command, where another BASIC programm could be loaded to replace the existing, while all variables where kept intact. Applesoft was missing that feature, but programers soon developed &lt;a href=&quot;https://www.atarimagazines.com/compute/issue87/Chaining_Programs_In_Applesoft_BASIC.php&quot; rel=&quot;noreferrer&quot;&gt;some replacement code&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Unix like environments usually offer some kind of &lt;code&gt;EXEC&lt;/code&gt; function to implement chaining. While often called an overlay mechanism, it's strictly just chaining, as the whole program gets replaced.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Overlay_(programming)&quot; rel=&quot;noreferrer&quot;&gt;Overlays&lt;/a&gt;&lt;/strong&gt; on the other hand are a way where a program keeps running but exchanges parts of the code or data on an as-needed base. This can be large potions, like a word processor loading a spell checker or mail merger overlay, like MicroPro's &lt;a href=&quot;https://en.wikipedia.org/wiki/WordStar&quot; rel=&quot;noreferrer&quot;&gt;WordStar&lt;/a&gt; did. Or smaller parts like a single function. Ofc, loading each function seperatly when needed may prove inperformant compared to loading bundles of functions.&lt;/p&gt;&#xA;&lt;p&gt;Overlays are mostly a programing issue and support is done by the programming environment in use. A common feature of all overlay techniques is that there is a predefined memory area where the overlay gets loaded. There can be more than one overlay area, and ofc. more than one overlay per area. Overlays can be used with data as well. Data overlays may need to be copied back to the extended storage before the overlay area can be reused.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Dynamic_linker&quot; rel=&quot;noreferrer&quot;&gt;Dynamic Linking&lt;/a&gt;&lt;/strong&gt; can be seen as a special way to handle overlays. Especially when an unlink feature is offered. Unlike simple overlays memory can be used less wasteful with a thigher packing. Also the linker may offer recursive linking to handle dependencies. Where overlays (usually) need to be placed at a specific address when copied into RAM, dynamic liked modules can occupy any address - and with unlink available, a different address each time it is used even within a single program run.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Generalization&lt;/h1&gt;&#xA;&lt;p&gt;On a more generalized way there are two techiques to handle the management of an extended storege&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Swaping&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Paging&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For &lt;strong&gt;Swaping&lt;/strong&gt; programm and data areas of an application are organized in segments with each segment being a a unit to be moved out to extended storage or in from such. They can be of varying size. While most OS with swaping support only use these segments to organize a program (like code, data, stack, heap) and copy them in (or out) all at once, it can also be used as a way for programs to organize their overlays, but hand over thee management to some OS functionality.&lt;/p&gt;&#xA;&lt;p&gt;Unlike simple overlays segments can end up at a diffent address after beign copyed out and in again.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Pageing&lt;/strong&gt; in contrast splits up the memory (or a part thereof) in equal sized pages. Needed content (data or program) is moeved from background into RAM when needed. Unlike overlays, it's not done accoring to some module size, but as a (single or multiple) page. Also, much like with swaping, a page may end up ona different RAM address each time it is brought into RAM.&lt;/p&gt;&#xA;&lt;p&gt;Pageing is (much like swaping) often seen as synonym for virtual memory, but thats not strictly true. While virtual memory does need pageing, pageing doesn't need virtual memory.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Hardware&lt;/h1&gt;&#xA;&lt;p&gt;It need to be noted, that all of the mechanics discussed so far are &lt;strong&gt;not&lt;/strong&gt; dependant on any hardware (beside I/O from/to the background story). But as usual special hardware and/or the right CPU structure can simplify this a lot.&lt;/p&gt;&#xA;&lt;p&gt;For example a machine with register relative addressing (and sufficient registers) can handle all access (and thus calls) to dynamic areas with loading a register with a base address, allowing hasse free access (aka no address relocation needed) to a segment/overlay/page no matter what the actual load address is, and if it's changed.&lt;/p&gt;&#xA;&lt;p&gt;Another way can be banking hardware. This was especially popular with early (micro) computers (*5), when RAM became less expensive, but address space limited usage. Here a section of the (limited) CPU address space is reserved to map in segments form a (usually larger) background RAM. It's much like overlay's in hardware. To make one available to the CPU address space no lengthy copy operation is needed, but at simple change of address handling. Depending on the machine several such sections may exist, or even the whole address Space may be made up from such assignable areas.&lt;/p&gt;&#xA;&lt;p&gt;For all these methods a good book keeping is needed to manage what overlays are in RAM/address space and thus direct accessible, or need to be moved in. This can be done via an intermediate layer, or due programm structure - which brings us to the software part.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Or wait, a short interlude about virtual addressing might be right here:&lt;/p&gt;&#xA;&lt;p&gt;Many answer this question reflex like with some reference to virtual memory, but the question is explicit &lt;em&gt;not&lt;/em&gt; about such a system. Still, for this issue we need to remember that the sollllllution we commonly refer to as virtual memory is about threeseperate issues:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Offering a program a seamless impresion of more memory than realy is available&lt;/li&gt;&#xA;&lt;li&gt;Giving paralell loaded programs each the impression of owning all memory&lt;/li&gt;&#xA;&lt;li&gt;Enabling each programm the ability to use fixed addresses (starting at 0)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While the first is somewhat similarto the background of the question, none realy touches it, as all assume an address space equal or larger than existing RAM.&lt;/p&gt;&#xA;&lt;p&gt;Oh, and on a historic side note, IBM originally &lt;strong&gt;refused to add virtual memory&lt;/strong&gt; to their /360. After all, who in his right mind wants to slow down an expensive high performance computer to about half its thruput? An engineer would never think of this - only mathematicians do.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Software&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How do you place in RAM the portions of your program that are currently needed (since you can't fit the whole thing)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I assume your question is about how to handle this in programming - as hardwarewise it's just ordinary I/O.&lt;/p&gt;&#xA;&lt;p&gt;At the core overlay programming is just redefinition of the address space in use. Think of overlays as of a &lt;code&gt;UNION&lt;/code&gt; in C - or a redefinition in Assembler. One memory area where symbols for different data structures (and programs are nothign but data - with entry points as their elements). As long as only the elements with data loaded are accsses everythign is fine. Much like a union` with a float and a string - either definition sould only be used accoring to what is inside. In C such a union would often have a type associated, so an access function may first check the type before itnerpreting the data. For overlays it's much the same.&lt;/p&gt;&#xA;&lt;p&gt;It's all about book keeping. In general there are two ways: By structure or by checking (managed).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;By Structure&lt;/strong&gt;. One way to handle it are strict hirarchical programm structures. Each module only calls specific modules within a tree, and none of them calls any module outside his branch. Here no locking or checking is needed, as there is no way to screw up module order. This method is best for overlays with a large scope and rather closed functionality.&lt;/p&gt;&#xA;&lt;p&gt;The already mentioned WordStar is a great example here, as when, for example, the spellchecker (&lt;code&gt;SPELSTAR.OVL&lt;/code&gt;) is called, its modul gets loaded and takes over control until the job is finished. It will never call the form letter function (&lt;code&gt;MAILMRGE.OVL&lt;/code&gt;) function or vice versa. When it comes to&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;By Checking&lt;/strong&gt; - or managed. Here each call of a function in an overlay (except the one the caller is residing in) is preceded by a check if the target overlay is already loaded (and where). If yes, the function gets called, if no, an overlay loader function gets called and then the desired function. It might be handy to have this in some static module that never gets overwriten.&lt;/p&gt;&#xA;&lt;p&gt;This may sound rather complicated, and it is, but with functions of sufficient size the overhead gets acceptable. For sure it's better than not having a certain functionality.&lt;/p&gt;&#xA;&lt;p&gt;A great optimization is to make all (inter-) overlay calls indirect via a central management table. Each (external) callable function gets a number (or name) assigned. A central table is made up for all (callable) functions of all overlays. In the begining all entries are filled with the address of a management function. Whenever an overlay is loaded, all containing function entry points are copied into their table positions, when it gets unloaded, the entries are again filled with that management function.&lt;/p&gt;&#xA;&lt;p&gt;Now calling a function is no longer done as &lt;code&gt;name(...)&lt;/code&gt; but rather as &lt;code&gt;table[name](...)&lt;/code&gt; (*6). If the overlay is already loaded the function gets called right away, all overhead is reduced to an indexed pointer load. If the needed overlay is not loaded it calls the management function which now can determinate the overlay to be loaded, find a free memory location, or unload another overlay to free space, load the overlay and dispatches the call.&lt;/p&gt;&#xA;&lt;p&gt;And yes, this is exactly what one may call late binding :))&lt;/p&gt;&#xA;&lt;p&gt;All of this makes the overlay management nicely hideen while still performin well ... ofc, only as much as the calling structure allows. Two functions in different overlays calling each other can trash this quite fast. It all comes down to a proper organized programm structure and sufficient overlay areas/space.&lt;/p&gt;&#xA;&lt;p&gt;In fact, it shows again - and quite well - that a tidy structure will usually outperform any fancy hardware in a given context.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Z22/23 had an optional 'fast' memory as core of a few hundret bytes.&lt;/p&gt;&#xA;&lt;p&gt;*2 - An IBM /360 clone, lower End of the Univac 9000 line)&lt;/p&gt;&#xA;&lt;p&gt;*3 - And before them tapes. Yes, card data was read in, wtiten out onto tapes and processed &lt;em&gt;in random&lt;/em&gt; from there.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Until the end of the 1970s it wasn't uncommon for mainframes to boot the OS from tape and use disks only for temporary data.&lt;/p&gt;&#xA;&lt;p&gt;*5 - All the way from the Apple II's &lt;a href=&quot;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Language%20Cards/&quot; rel=&quot;noreferrer&quot;&gt;Language Card&lt;/a&gt; to &lt;a href=&quot;https://en.wikipedia.org/wiki/Expanded_memory&quot; rel=&quot;noreferrer&quot;&gt;LIM-Memory&lt;/a&gt; on PCs.&lt;/p&gt;&#xA;&lt;p&gt;*6 - C alike syntax used for simplicity.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-04-11T23:23:14.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6213" PostTypeId="2" ParentId="6207" CreationDate="2018-04-11T11:20:29.450" Score="5" Body="&lt;p&gt;Well, if scroll down to the &lt;a href=&quot;https://en.wikipedia.org/wiki/PLATO_(computer_system)#Cyber1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cyber1 section&lt;/a&gt; of said Wiki article, there is your answer.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Are there any known running versions of this system which can be access&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.cyber1.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cyber1&lt;/a&gt; is a service runing the PLATO software under &lt;a href=&quot;https://en.wikipedia.org/wiki/NOS_(software)&quot; rel=&quot;nofollow noreferrer&quot;&gt;NOS&lt;/a&gt; on an emulated CDC.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;via retro machines today&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not realy, unless you got a real PLATO terminal. Also the requirements may be a bit to high for classic machines.&lt;/p&gt;&#xA;&lt;p&gt;The available emulation called &lt;a href=&quot;https://www.cyber1.org/pterm.asp&quot; rel=&quot;nofollow noreferrer&quot;&gt;PTERM&lt;/a&gt; is available Windows XP and above, Mac OSX and various Linux/Unix machines. It's in (quite) active development.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;via WiFi modem or similar?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not sure how WiFi is related to retro, but thats more of a network issue of your machine, isn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2021-02-28T19:56:16.917" LastActivityDate="2021-02-28T19:56:16.917" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6214" PostTypeId="2" ParentId="6207" CreationDate="2018-04-11T12:58:41.313" Score="10" Body="&lt;p&gt;The Previous poster has inaccurate information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a PLATO installation that has been set up for retrocomputing users @ IRATA.ONLINE. If you go to the website, you'll find information about the service, how to connect, as well as a technical section that is full of information on creating terminals to use with the service. Thus far, we have a working terminal implementation for Atari 8-bit machines, with more on the way. We also provide two source code implementations in C, and a link to a disassembly of the Atari PLATO cartridge on GitHub.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, retro-computers can log onto both Cyber1.org and IRATA.ONLINE via an emulated internet modem, built from devices such as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A Lantronix MDS terminal server, or&lt;/li&gt;&#xA;&lt;li&gt;A Raspberry Pi running tcpser and an appropriate USB to RS232 cable, or&lt;/li&gt;&#xA;&lt;li&gt;A specialized device running on e.g. an ESP8266 or ESP32 microcontroller providing the TCP bridge to either RS232 or other native bus. One is being developed for the Atari 8-bit computers, now.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;IRATA.ONLINE also hosts multiple meets on the weekends, to demonstrate the system, and talk with potential users, authors, and systems programmers (the latter hopefully to help write terminals). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the combination of a rich and capable delivery protocol, a built in programming environment, and the pervasive inclusion of social networking features, retro-computing users will finally have a killer app that they can connect to, because an Atari 8-bit can't log onto Facebook, a Commodore 64 can't log onto twitter, nor can an Apple II go onto Instagram.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IRATA.ONLINE is being run as a pure labor of love, with zero commercial connection to it, there is no data gathering, no access or subscription fees, just a place to connect for retro-computers of all shapes and sizes.&lt;/p&gt;&#xA;" OwnerUserId="8428" LastActivityDate="2018-04-11T12:58:41.313" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6215" PostTypeId="2" ParentId="6205" CreationDate="2018-04-11T14:15:16.120" Score="3" Body="&lt;p&gt;The Macintosh 128kb is a machine with 2^16 words of RAM: words are 16-bit on the 68000. After a fashion, it can run software designed for a machine with 2^18 words of RAM — software designed primarily for the Macintosh 512kb. It has no MMU. It is an interesting case study because its mechanisms are documented in detail, and that documentation is &lt;a href=&quot;http://www.weihenstephan.org/~michaste/pagetable/mac/Inside_Macintosh.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;easily accessible&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The primary approach is a specific implementation of overlays, as code segments, which are handled by the jump table as described from the bottom of Page II-60, which is Page 628 in the PDF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code is partitioned into segments of at most 32kb in size. Only relative addressing modes are permitted, so any segment can be loaded anywhere. A segment contains some subset of the application's functionality. When it wants to jump to a routine that is in a different segment it actually jumps to that routine's entry in the jump table. At any time the jump table will contain either a jump to the actual code fragment, if loaded, or else a jump to the segment loader, if unloaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is implied but not particularly explicit that segments are placed onto the heap like any other piece of data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mechanism for heap handling is described from Page I-71, which is Page 81 of the linked PDF. It's not quite as relevant, but:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For most dynamic allocations, it uses two levels of indirection. You own a reference that you can use to ask where the allocated memory is. This differs from hardware virtual memory beyond merely that you're handling the extra indirection in software in that indirection is per allocated area, not per page — the mapping happens once per allocated area and then everything following that is physically contiguous, which potentially allows a few more bytes to be scraped upon a compaction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A caller can instead request non-relocatable memory, in which case its address will never change and you can always assume the physical address is the same as the last time you asked. You're being a bad citizen, but the option is there. You can also mark memory as purgeable, which gives the system the option of simply throwing it away if total available memory becomes constrained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the main special feature for fitting more into less is purgeable memory. It's data you'd like to keep around, but could do without if you had to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in net, the fixed memory requirements for your program are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the amount of heap space you request that isn't purgeable, keeping in mind that there's likely to be more available if you allow your allocations to be relocateable; plus&lt;/li&gt;&#xA;&lt;li&gt;the jump table; plus&lt;/li&gt;&#xA;&lt;li&gt;at least one segment of code.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I make that at most 64kb for the jump table plus one segment of code; the display is a bit more than 21kb and the OS is likely taking up a bit more space but is primarily ROM based so not as much as you might fear. The original Macintosh is (overwhelmingly) single tasking. So you need to keep your working data set sufficiently far below about 40kb.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same segment loading system is used for all other program resources, and was commonly used for Macintosh filetypes so your documents needn't fit into that space, subject to the same partitioning rules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This also partly explains why the 512kb Macintosh was considered so much better than the original: given the fixed costs of your jump table and the display file, you're actually increasing the amount of working space by a factor much larger than four.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-04-11T14:15:16.120" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6216" PostTypeId="2" ParentId="6205" CreationDate="2018-04-11T16:45:26.703" Score="-2" Body="&lt;p&gt;If you consider old 8086 and 286 PC as retrocomputers (even if they had 20-bits addreses), then expanded memory ( &lt;a href=&quot;https://en.wikipedia.org/wiki/Expanded_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Expanded_memory&lt;/a&gt; ) and extended memory ( &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Extended_memory&lt;/a&gt; ) may be of interest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Extended memory was used for compatibility with old design and used switching processor to 32-bit mode, copying some bytes from/to &quot;unreachable&quot; memory and then switch back to 20-bits mode and continue runing old programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expanded memory was totally other kind - there was a place in adress space (4 blocks of 16KB forming 64KB), where external card (with some memory on the card) could be placed. Sending some values to the card the card then &quot;swap in&quot; (mapped) some part of its internal memory. It allowed for storing as much as 32MB of data/program there on machine able address just 1MB at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote some program, that lived there in full (except 120 bytes, mainly header, which allowed it to use it from &quot;normal memory&quot;) - the pages actually in EMS was paged away, my program was paged in, used 2 windows for program code (and swapped like 60KB there, 4 pages) and other 2 windows for data (in total over 300KB, again swapped in on demand) and on finish it again swaped the old context there, waiting to next call. This way I used only 120 bytes of conventional memory, but was able to run 60KB program with 300+KB data invisibly from the &quot;normal program&quot;, I was supporting. (which took nearly all conventional memory just to run and there was a lot of problems to run it under DOS, as no big drivers could be loaded, otherwise the program would just crashed from insufficient memory).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a lot of pointer managing in C, but it made the main program run 2x faster on the main loop, which took couple of hours (as my program precompiled the computation instead of interperting it in the main). (It would run much faster, if there would not be the need to use the main for database access). Wrote it around 1990, computed salaries for big company upto like 2003 or so).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Another interesting case was BBC Micro with 6502 main processor and 32KB of RAM (video took 1K..22K depending of mode), which was later able to get &quot;coprocessor&quot; Z80 with 64KB RAM (and CP/M OS), where main program was run on Z80 with ovehelming 60KB RAM free (4K for system) still using the finest 22KB graphic mode of 6502 and all of its periferials (keyboard, mouse, joystick, disketes ...)&lt;/p&gt;&#xA;" OwnerUserId="8432" LastActivityDate="2018-04-11T16:45:26.703" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6217" PostTypeId="2" ParentId="6203" CreationDate="2018-04-11T16:51:29.753" Score="3" Body="&lt;p&gt;I will answer different question which is assumed by the original question; I am the author of the textbook in informatics, and think answering this way would be appropriate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is not that BASIC was great language to program, or people were just writing great books in the past, but now having difficulties with that. Consider the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;BASIC was one of the first &quot;consumer&quot; programming language. Programming the way explained in the book was new to the wide audience, and there was a big interest in that - because it was new and it was perceived as having great potential;&lt;/li&gt;&#xA;&lt;li&gt;If you would carefully examine the books of that time, they were focusing on content of the programming - algorithms - rather than quickly jumping to the button-pressing &quot;angry birds&quot; behavior in front of the keyboard. Programmer was that person who was able to devise working and more or less optimal algorithm to achieve the result using logic. These days programmer is the one who knows buzzword operators of buzzword programming language;&lt;/li&gt;&#xA;&lt;li&gt;People were willing to study basics of the programming, and were interested in programming as a science subject. Programs of those times are masterpieces doing a lot of stuff within constrained RAM, ROM, graphics, I/O etc. Modern programming is more about making up something &lt;em&gt;acceptable&lt;/em&gt; of the &quot;bricks&quot; of already existing functionality into the functional application.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So there're several mandatory things to get good future programmer -&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;genuine interest in the subject;&lt;/li&gt;&#xA;&lt;li&gt;knowing the basics of the logic and at least one programming language at low and high level;&lt;/li&gt;&#xA;&lt;li&gt;be set for the quality - not that perfection, but for the continuous quality in the whole process of software development involving not only coding, but also starting with proper and scalable architecture, proper platform/hardware selection, thoughtful requirements drafting, and execution (coding and testing).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Good book will not change the status quo unless targeted individual is exhibiting properties above.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastEditorUserId="8258" LastEditDate="2018-04-11T17:01:21.107" LastActivityDate="2018-04-11T17:01:21.107" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6218" PostTypeId="1" AcceptedAnswerId="6219" CreationDate="2018-04-11T18:41:33.757" Score="8" ViewCount="306" Body="&lt;p&gt;At the British Science Museum they have four different models of Charles Babbage’s difference engines (including his designs). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The display implied that he had at least three different designs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tjkTb.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tjkTb.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wis5o.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wis5o.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/f7DmB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/f7DmB.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qvNhv.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qvNhv.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vR15q.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vR15q.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o0Mhk.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o0Mhk.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This surprised me because I only recall reading about two different versions. I saw four different models (one was a partial implementation.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: &lt;strong&gt;Did Charles Babbage design three Difference Engines?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="3500" LastActivityDate="2018-04-12T01:32:16.140" Title="Did Charles Babbage design three Difference Engines?" Tags="&lt;hardware&gt;&lt;history&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6219" PostTypeId="2" ParentId="6218" CreationDate="2018-04-11T22:14:08.557" Score="9" Body="&lt;p&gt;No, there were only two &lt;strong&gt;Difference&lt;/strong&gt; engines. Babbage's son has assembled a demonstration of Engine No. 1, and the Scheutz engine is based on No. 1; however, there could have been variations of the overall design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Difference Engine No. 2 existed only in the form of drawings until the Museum has decided to build it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Babbage has also designed the &lt;a href=&quot;https://en.wikipedia.org/wiki/Analytical_Engine&quot; rel=&quot;noreferrer&quot;&gt;Analytical engine&lt;/a&gt;. Summarizing, he has designed three Engines, two of them Difference, and one Analytical.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-04-12T01:32:16.140" LastActivityDate="2018-04-12T01:32:16.140" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6220" PostTypeId="2" ParentId="6205" CreationDate="2018-04-11T23:07:37.120" Score="2" Body="&lt;p&gt;The 99/4A with expansion box had 48k of RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware didn't have any answers large programs you just ran out of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, most software developers, divided there programs into modules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, a calendar program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You start out, and enter all the details about the basic calendars.&#xA;It saved that to a file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Program 2 launches read the file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It allows you to enter text into each day, but has lag time where it saves and loads its information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data you entered was saved to a file, and then the main program was re-executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The picture selection program was too big to be loaded with the other software, so it too allow you to select a pictures, but then saved the information to a file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the whole calendar was done, and you want to print it.....You guessed it ... save the entire calendar data was saved to disk, and the print module was loaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They tried to make the program as seamless as possible but the giant load times were a dead give away what was happening.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That and ........&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Insert program disk&lt;/li&gt;&#xA;&lt;li&gt;font disk&lt;/li&gt;&#xA;&lt;li&gt;program disk&lt;/li&gt;&#xA;&lt;li&gt;picture disk #1&lt;/li&gt;&#xA;&lt;li&gt;picture disk #2&lt;/li&gt;&#xA;&lt;li&gt;program disk&lt;/li&gt;&#xA;&lt;li&gt;font disk&lt;/li&gt;&#xA;&lt;li&gt;..... rinse and repeat.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Even games had up to 6 ROM chips which were swapped between, and bits and pieces were loaded, as needed, from each ROM.&lt;/p&gt;&#xA;" OwnerUserId="7425" LastEditorUserId="7425" LastEditDate="2018-04-11T23:17:48.147" LastActivityDate="2018-04-11T23:17:48.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6221" PostTypeId="1" CreationDate="2018-04-11T23:49:42.997" Score="6" ViewCount="394" Body="&lt;p&gt;This question is NOT about single chip CPUs, but such that were built from many SSI/MSI logic ICs or using a bitslice configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 74F... or 74S... type TTL gate or flipflop, if you provide them with optimal conditions, will be able to handle 50..70 MHz raw signals; MECLIII and MECL10K went well into three-digit numbers here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems most CPU designs favored CISCish instruction sets that accumulated a lot of propagation delay on the long combinatorial logic paths needed for that. Which usually limited the overall CPU clock to a small fraction of the &quot;raw&quot; speed of the ICs used. The CISC-ness preference is also understandable for most applications, since there likely was much more need for the assembly language specification being something that a human programmer could make sense of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there exceptions (especially earlier or more radical), apart from the first Cray designs, where non-orthogonal instruction sets that kept the propagation delays short - and/or pipelining - were used?&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-04-12T09:48:29.060" Title="Did any pre-microprocessor CPUs have a clock near the toggle speed of the logic ICs used?" Tags="&lt;hardware&gt;&lt;architecture&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6222" PostTypeId="2" ParentId="6221" CreationDate="2018-04-12T00:09:31.153" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;A 74F... or 74S... type TTL gate or flipflop ... will be able to handle 50..70 MHz raw signals&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;74F and especially 74S are consuming a lot of power. Integrating them into CPU core is a problematic task. Heat dissipation increases with the speed of operation (switching speed), thus there must be a trade-off between size of the die, performance of the core and reliability of the chip and system in overall.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It seems most CPU designs favored CISCish instruction sets&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think there're simple reasons for it - scarce memory (RAM or ROM) and their organization in 8-bits, when you can fit CISC instructions in them; and performance of periphery - those RAMs, ROMs and I/O. The way microprocessor design historically moved may be considered to be kind of optimal, with RISC forking for special computational tasks and when technology allowed it to be feasible.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;where non-orthogonal instruction sets that kept the propagation delays short - and/or pipelining - were used?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I can give you mid-80s example - Yamaha V9938 VDP, the upgraded version of TMS99x8 video chip. While is it not microprocessor, it is using data pipelining and has very effective and efficient timing in managing its RAM and the CPU requests.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2018-04-12T00:09:31.153" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6223" PostTypeId="2" ParentId="6221" CreationDate="2018-04-12T00:54:11.863" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It seems most CPU designs favored CISCish instruction sets that accumulated a lot of propagation delay on the long combinatorial logic paths needed for that. Which usually limited the overall CPU clock to a small fraction of the &quot;raw&quot; speed of the ICs used.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;First of all, CISC doesn't require longer combinatorial delay. If at all, it usually results in more clock cycles per instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further when it comes to more complex combinatorial logic it's rather the other way arround. With a monotone clock, it's period must be as long or longer than the slowest element used. So if there are for example three stages with 5 ns, but one with 20ns, the system clock can't go past 50 MHz. An instruction going thru these 4 stages will take 80ns. Now if these 4 elements are part of a single 'complex' stage defined by their combinatorial speed, it will only take 35ns for an instruction to pass - more than double the speed of single stages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Creating many small stages is only a benefit if they are part of a pipeline - here more than one instruction can be in processing at the same time. While a single instruction will still take the same (often more) execution time, they work more thna one instruction can be in execution, thus increasign effective thruput.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The CISC-ness preference is also understandable for most applications, since there likely was much more need for the assembly language specification being something that a human programmer could make sense of.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not realy. Instruction sets where always made with a focus on a possible machine structure and the task to be solved, pleasing programmers always came second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As shown beore, the power of CISC comes from higher speed. This is even more true when considering that Memory of early machines - until the mid 1970s - was magnetic core. Core started out with cycle times of 6 to 9 &lt;strong&gt;micro&lt;/strong&gt;seconds. Even a true high speed machine like the CDC 6600 only managed a cycle time of arround 1 us. It didn't improve much from there on. the last generations arround 1975 where still 0.6 us or above. 600 ns is something where quite a lot of computation can be done.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Were there exceptions (especially earlier or more radical), apart from the first Cray designs, where non-orthogonal instruction sets that kept the propagation delays short - and/or pipelining - were used?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It wouldn't have made any sense. The bottleneck wasn't command execution but memory read. Thus shorter but more complex intructions where the way to increase performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CDC 6600 is in fact a great example how to work arround the memory problem. While the CPU clock was 10 MHz, the memory cycle was 1 us (1 Mhz). Similar the PPUs. There where 10 of them, each operating with a 1 MHz clock, but interleaved. To feed all of this memory was also build up as 32 interleaved blocks or 4096 words with 12 Bit each. Each PPUs could get each one word per turn as long a it was mostly consecutive. Well, it wasn't always, and thruput was quit dependent on the way instruction stream (and data) was aranged &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while the CDC was already somewhat RISCy, it was way more limited by memory speed than gate speed or clock rate. The whole idea behind this rather extreme design was to squeeze as much action arround the slow memory. Other, much simpler design where just condemed to wait for the momory most of the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it didn't feature any pipeline at all. Especially not one having different instructions in different stages of competion - like you question may assume.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now while the next step, the 7600 did crank up clock speed to 35 MHz, its memory was in fact &lt;strong&gt;slower&lt;/strong&gt; with about 1.4us. This got leveled by a more sopisticated structure, now including a pipeline - quite unlike a 'classic' instruction pipeline, more like a reordering buffer to find instructions that can be issued to some function unit in parallel. But even with this much more sophisticated structure, memory was still the bottleneck, not any clock speed or instruction set.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-04-12T09:48:29.060" LastActivityDate="2018-04-12T09:48:29.060" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6224" PostTypeId="1" AcceptedAnswerId="6226" CreationDate="2018-04-12T05:22:00.863" Score="28" ViewCount="11337" Body="&lt;p&gt;I have seen many examples, Harvard Mark 1, Manchester Mark 1, Colossus Mark 1 and 2. It is possible that this is a very obvious thing for native English speakers, but not entirely for me. Was this an old custom? Who started it? Why did it not continue afterwards?&lt;/p&gt;&#xA;" OwnerDisplayName="user8433" LastEditorDisplayName="user8433" LastEditDate="2018-04-13T00:01:00.420" LastActivityDate="2018-04-13T15:20:28.837" Title="Why were early computers named &quot;Mark&quot;?" Tags="&lt;history&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="4" ClosedDate="2018-04-13T15:45:01.663" ContentLicense="CC BY-SA 3.0" />
  <row Id="6225" PostTypeId="2" ParentId="6224" CreationDate="2018-04-12T07:39:55.103" Score="35" Body="&lt;p&gt;As mentioned in the comments, “Mark” here is used in a similar sense to “version”. The &lt;em&gt;name&lt;/em&gt; of the computer is the first word in the designation (“Harvard”, “Manchester”, “Colossus”); then follows the version, or revision — “Harvard Mark 1” is the first Harvard computer, etc. Note that in some cases this designation is used even though there was no “Mark 2” (or “Mark II”): for example, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Mark_1&quot; rel=&quot;noreferrer&quot;&gt;Manchester Mark 1&lt;/a&gt; was followed by the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ferranti_Mark_1&quot; rel=&quot;noreferrer&quot;&gt;Ferranti Mark 1&lt;/a&gt;. In some cases, the “Manchester Mark 1”-style name wasn’t the &lt;em&gt;official&lt;/em&gt; name (the Manchester Mark 1 was the Manchester Automatic Digital Machine), but computers were so rare at the time this naming practice was common that people simply referred to computers by their location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The practice of using “Mark” to identify computer revisions didn’t last long, and you’ve listed most of the models which are remembered in this way; I get the impression this was only used in the 1940s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This terminology is also commonly used, at least in the United Kingdom, for car models and aircraft; for example, &lt;a href=&quot;https://en.wikipedia.org/wiki/Ford_Escort_(Europe)&quot; rel=&quot;noreferrer&quot;&gt;the Ford Escort&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Volkswagen_Golf&quot; rel=&quot;noreferrer&quot;&gt;the Volkswagen Golf&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Supermarine_Spitfire&quot; rel=&quot;noreferrer&quot;&gt;the Spitfire&lt;/a&gt;...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-04-13T15:20:28.837" LastActivityDate="2018-04-13T15:20:28.837" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6226" PostTypeId="2" ParentId="6224" CreationDate="2018-04-12T07:40:37.613" Score="30" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was this an old custom?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;By now, &lt;strike&gt;this word has fallen into disuse, or it has at least fallen out of vogue&lt;/strike&gt;. In the context of computing at least, the word Mark followed by a Roman (or sometimes Arabic) numeral has fallen into disuse as a versioning scheme. And given the word's many uses and meanings, it's not surprising that this use is unfamiliar to you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &quot;mark&quot; really is just another word for &quot;version&quot;, or &quot;revision&quot;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Who started it?  Why it did not continue afterwards?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For the answer to these questions, better see the link &lt;a href=&quot;https://english.stackexchange.com/questions/83548/mark-in-generational-naming-of-products&quot;&gt;https://english.stackexchange.com/questions/83548/mark-in-generational-naming-of-products&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-04-12T14:34:39.687" LastActivityDate="2018-04-12T14:34:39.687" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6227" PostTypeId="2" ParentId="6224" CreationDate="2018-04-12T07:54:06.437" Score="12" Body="&lt;p&gt;It's basicly a variant designation. The custom is originated with English military and describes a variant of some equipment as &lt;strong&gt;mark&lt;/strong&gt;ing for (often) otherwise not distinguished items. As many other conventions it did spread from military use over to civilian engineering, like with railroad manufacturers naming improved wagoons as Mk2/3/4... In the mid 20th century it reached adbertisement and official naming, with a 'feeling' much like todays version numbering hype - like eating 2.0, Industry 4.0 and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern day equivalent (as used in the US) would be &lt;strong&gt;'Model'&lt;/strong&gt;. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-04-12T07:54:06.437" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6228" PostTypeId="1" AcceptedAnswerId="6229" CreationDate="2018-04-12T10:19:08.430" Score="5" ViewCount="626" Body="&lt;p&gt;I have a 286 mainboard here, which is I think very similar to this &lt;a href=&quot;http://stason.org/TULARC/pc/motherboards/U/UNIDENTIFIED-286-SUNTAC-286-12.html&quot; rel=&quot;noreferrer&quot;&gt;one here at stason.org&lt;/a&gt;. Below is an overview image, and a &lt;a href=&quot;https://m.imgur.com/a/zuqvm&quot; rel=&quot;noreferrer&quot;&gt;link to a album&lt;/a&gt; with details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there are still some discrepancies, so I wonder if someone has an actual manual for this device. I can't find any useful make or model, apart from that it was used by Peacock Computers, but they were just a PC manufacturer in the day, and the T90 label on the upper ISA slot. There are no FCC IDs or anything else identifying the supplier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8XLIi.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8XLIi.jpg&quot; alt=&quot;80286 Suntac mainboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8337" LastEditorUserId="8337" LastEditDate="2018-04-12T10:27:07.000" LastActivityDate="2018-06-20T18:06:24.247" Title="Jumper and switch settings for 286 Suntac mainboard" Tags="&lt;identify-this-computer&gt;&lt;80286&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6229" PostTypeId="2" ParentId="6228" CreationDate="2018-04-12T10:37:58.527" Score="6" Body="&lt;p&gt;Nice piece! Those days such boards were designed for specific chassis, with additional keys and LEDs like Turbo. Here're some manuals:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://minuszerodegrees.net/manuals/Suntac/Suntac%20HT-286.pdf&quot; rel=&quot;noreferrer&quot;&gt;HT-286&lt;/a&gt; - the one similar you found, but it is not yours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;http://toastytech.com/manuals/Magitronic%20B233%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;Super-286&lt;/a&gt; seems the one you need though.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2018-04-12T10:37:58.527" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6230" PostTypeId="1" AcceptedAnswerId="6231" CreationDate="2018-04-12T11:42:44.553" Score="8" ViewCount="663" Body="&lt;p&gt;On the Commodore 64, (and I believe also the VIC-20, PETs etc.) you may instruct BASIC to &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LOAD &quot;something&quot;,8&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to load a file to the start of BASIC's area (and that address may vary between machines), or&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LOAD &quot;something&quot;,8,1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to load a file to the address specified in the first two bytes of the file. The former option was mostly used for BASIC programs, and of course the latter is mostly used for machine code (which is not usually written to be relocatable), and I guess bitmaps and other static data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This goes for floppy disks, cassette tapes, hard disks, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But since it doesn't really make sense to save a file in one way and load it again the other way, then the user needs to remember per file how to load it again. It seems much more sensible to me to have a bit in the metadata somewhere that specifies how to load the file. Is anything known or understood about why this wasn't done?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-02-06T13:25:11.157" Title="Why did Commodore files not include metadata to say where in memory to load it?" Tags="&lt;commodore&gt;&lt;file-system&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6231" PostTypeId="2" ParentId="6230" CreationDate="2018-04-12T12:31:58.110" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did Commodore files not include metadata to say where in memory to load it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They are there. Every saved memory content starts with two bytes noting the address it's taken from. No matter if disk or tape, if BASIC or machine code.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But since it doesn't really make sense to save a file in one way and load it again the other way, then the user needs to remember per file how to load it again.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's not save it one way and load it another. Memory content, and that's true for machine or basic programs, are &lt;em&gt;always&lt;/em&gt; saved with their start address stored as the first two bytes. And the way to load them to the same address they where saved is by using the secondary address &lt;code&gt;1&lt;/code&gt; (*1). With this parameter the program gets loaded verbatim - exactly as saved. Without it gets relocated (and treated like a BASIC program).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no need to remember anything. Any BASIC program can also be loaded with or without - &lt;em&gt;as long as it's on the same machine in the same configuration&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It seems much more sensible to me to have a bit in the metadata somewhere that specifies how to load the file.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And what would it be good for? With a fixed mechanism always loading a program into the area where they where saved isn't really flexible, is it?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is anything known or understood about why this wasn't done?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;It's all about making life easy for users by setting the machines BASIC start address as default load address.&lt;/strong&gt; And as with all default mechanic, it is supposed to be the shorter notation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now users can load the most common files (BASIC programs) on any machine without fiddling with address changes. Different Commodore computers used different areas for BASIC programs (*2). With this default mechanism programs can (often) be exchanged between different machines (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, some machines even change the BASIC load address depending on the configuration. An unexpanded VIC20 loads programs at &lt;code&gt;$1000&lt;/code&gt;, while with a 3 KiB expansion it's &lt;code&gt;$400&lt;/code&gt;, but with 8/16/24 KiB expansion it will be &lt;code&gt;$1200&lt;/code&gt;. With a fixed load address saved within the file, users would no longer be able to use programs they've written before buying/changing memory expansion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside changing the load address, loading without not only adapts the load address, but also relocates the program. Yes, there's a need for that, as Commodore BASIC is stored in tokenized memory format, and here every line is preceded by the address of the next line. To make a program work from a different start address the loader needs to go thru the program, after placing it in memory, and recalculate all line address (*4).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - In fact it's not even a real secondary address, but only a marker for the loader to use the stored start address. The drive always gets opened with a secondary address of &lt;code&gt;96&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - For example classic PET at &lt;code&gt;$0400&lt;/code&gt;, VIC-20 at &lt;code&gt;$1000&lt;/code&gt; or C64 at &lt;code&gt;$0800&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Of course, only as long as only instructions are used that are common to both machines. &lt;code&gt;DLOAD&lt;/code&gt; from a BASIC 4.0 CBM will not compute on a straight C64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - That's also the reason why a disk drive is able to deliver a directory listing as pseudo BASIC program, without knowing anything about the computer handling of BASIC memory it is connected to: The 'program' gets relocated, so it can be listed on any Commodore. No matter if it's a PET with an 8050, or the same 8050 connected to a way later designed VIC-20&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-06T13:25:11.157" LastActivityDate="2020-02-06T13:25:11.157" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6232" PostTypeId="1" AcceptedAnswerId="6233" CreationDate="2018-04-12T15:13:59.393" Score="9" ViewCount="223" Body="&lt;p&gt;I have two large shoe boxes of old hard drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They range in size from tens of megabytes to tens of gigabytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a somewhat modern desktop PC that has a single PATA controller (alongside a SATA controller).  It's probably ATA-133 or something along those lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I expect even my oldest &quot;IDE&quot; drives (tens of megabytes!) to be addressable by the modern controller?  Or shall I have to go find a 386 in a yard sale?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have both 40-pin/40-conductor and 40-pin/80-conductor ribbon cables available.&lt;/p&gt;&#xA;" OwnerUserId="8447" LastActivityDate="2018-04-12T15:53:46.150" Title="Did PATA controllers break backwards compatibilty at some point?" Tags="&lt;ide&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6233" PostTypeId="2" ParentId="6232" CreationDate="2018-04-12T15:53:46.150" Score="9" Body="&lt;p&gt;The &lt;em&gt;controller&lt;/em&gt; shouldn’t cause problems, because the interface is largely backwards-compatible — so unless you have a drive which doesn’t quite adhere to the “spec”, it should be able to talk to the controller. (There wasn’t really a spec for the first IDE drives, so take that with a pinch of salt...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What will cause problems in anything vaguely recent (Pentium 4 or later), when trying to connect old drives, is that your system’s BIOS will probably expect to retrieve information about the drive from the drive itself. Drives older than ~1994 don’t support this, and need to be configured manually in the BIOS (this is where drive type 47 and such like comes in, along with the information written on the drive itself). I know for example that my P4P800 system doesn’t even boot if an old IDE drive is attached to it, and its BIOS setup doesn’t support any manual configuration of drive characteristics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You shouldn’t need to go as far back as a 386 to be able to read from the drives though; a Pentium, Pentium Pro or even Pentium II should be old enough to have the appropriate support in the BIOS. That way you can run a recent-ish Linux distribution (and avoid having to use an insanely slow system...).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-04-12T15:53:46.150" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6234" PostTypeId="2" ParentId="6230" CreationDate="2018-04-12T16:31:35.700" Score="5" Body="&lt;p&gt;Both tape and disk formats include the start address of the file.  Tape formats, but not disk formats, &lt;em&gt;also&lt;/em&gt; include a flag to force the file to be loaded at the address indicated on the tape regardless of the command used to load it, while disk formats did not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When loading a BASIC program, it is generally desirable to have it load at the start of BASIC memory, regardless of the address from which it is saved.  For example, on the VIC-20, if one types in a program without a memory-expansion unit and saves it, the start address will be 0x1000.  If one then powers off the machine, inserts a 3K expander, and powers the machine back on, the start of BASIC memory will be 0x0400.  If one wants to load the earlier-saved program, it will need to be loaded starting at 0x0400; loading it at address 0x1000 isn't likely to be useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might have been helpful for disk files to include more of a header than just a two-byte start address.  Adding a byte to indicate whether the file should be regarded as a BASIC program (in which case it should load at the beginning of BASIC memory, and it should update the end-of-BASIC-memory pointer once loading is complete) would have avoided some of the weirdness associated with using &quot;LOAD&quot; with binary files.  The design Commodore used probably seemed reasonable at the time, however.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-04-12T16:31:35.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6235" PostTypeId="1" AcceptedAnswerId="6239" CreationDate="2018-04-12T19:54:50.233" Score="2" ViewCount="699" Body="&lt;p&gt;Fitting to my 286 board I have a Multi IO card with IDE and FDC ports. It has a bunch of jumpers, but I have no ID on this. So far, stason.org search hasn't been conclusive. Here is a picture:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/O9RXP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O9RXP.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a FCC filing listed for the FCC ID on the board: &lt;a href=&quot;https://fccid.io/J3ITN-171&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://fccid.io/J3ITN-171&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Redford Company Inc I/O Card TN-171&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a reference to Anonymous' link: these are the jumper descriptions from the linked page:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;JP2 PTR PORT EN/DIS ENABLE DISABEL&#xA;JP3 SIO 0 PORT SELECT COM1 COM3&#xA;JP4 FDC EN/DIS ENABLE DISABLE&#xA;JP5 SIO 1 EN/DIS ENABLE DISABLE &#xA;JP6 PRINTER PORT SELECT 0378 0278&#xA;JP7 SIO 1 PORT SELECT COM2 COM4&#xA;JP8 GAME PORT EN/DIS ENABLE DISABLE&#xA;JP9 SIO 0 EN/DIS ENABLE DISABLE&#xA;JP10 IDE EN/DIS ENABLE DISABLE&#xA;JP11 IRQ 3 SIO 1 SIO 2&#xA;JP12 IRQ 4 SIO 1 SIO 2&#xA;JP13 IRQ 5 SIO 1 SIO 2&#xA;JP14 IRQ 2 SIO 1 SIO 2&#xA;JP15 PRINTER IRQ SELECT IRQ 7 IRQ 5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="8337" LastEditorUserId="8337" LastEditDate="2018-04-12T20:13:56.827" LastActivityDate="2018-04-13T12:35:53.693" Title="Jumper settings for IDE controller" Tags="&lt;identify-this-computer&gt;&lt;ide&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6236" PostTypeId="2" ParentId="6235" CreationDate="2018-04-12T20:05:34.420" Score="5" Body="&lt;p&gt;&lt;a href=&quot;http://www.driverforum.com/controller/6626.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;This document&lt;/a&gt; should tell you all. These jumpers configure state of the multi I/O card devices, and their port locations. The document states different chip UM82C865F, but the jumper functionality should be the same or similar. At the end of the day you can figure out yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: I found datasheet of the W83757 on the alldatasheet.com; there's some information about configuration pins, and if you have multimeter you can carefully trace conductors between chip and jumpers (in multimeter's voltrop &quot;diode sign&quot; mode) and guess about their exact purpose.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastEditorUserId="8258" LastEditDate="2018-04-12T20:19:52.730" LastActivityDate="2018-04-12T20:19:52.730" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6237" PostTypeId="1" AcceptedAnswerId="6238" CreationDate="2018-04-12T21:43:02.523" Score="5" ViewCount="178" Body="&lt;p&gt;I have rescued many retro computers from the hazards of leaky batteries, and occasionally replaced capacitors that were suspicious. Except for one still unusable Mac SE/30, all my repairs were done before the leakage created any serious damage to the traces on the motherboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After supporting this project to &lt;a href=&quot;https://www.gofundme.com/amiga-4000-replica-with-schematics&quot; rel=&quot;noreferrer&quot;&gt;recreate the Amiga 4000 motherboard&lt;/a&gt; schematics and build files, I got to thinking about what other options are available for amateurs trying to repair damaged motherboards like the A4000 or my SE/30. The typical damage I'm aware of would be one of these:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Corrosion of traces from a leaky battery or capacitor.&lt;/li&gt;&#xA;&lt;li&gt;Corrosion of traces from really bad storage conditions.&lt;/li&gt;&#xA;&lt;li&gt;Lifted solder pads from attempted repairs (probably re-capping) gone bad.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are probably other cases that an experienced tech could add to my list. For these types of repairs, what are the best ways to proceed in making a reliable repair? Also how do you know when a board is &quot;beyond repair&quot;?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-04-12T22:26:29.160" Title="What are best techniques for repairing a chemically damaged PCB?" Tags="&lt;repair&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6238" PostTypeId="2" ParentId="6237" CreationDate="2018-04-12T22:26:29.160" Score="5" Body="&lt;p&gt;Restoring to an as-new look is likely not possible with the damage described. Most western PCBs used for computers use solder mask (the green stuff) over the traces - if corrosion happened UNDER the solder mask, you would probably need to remove all the solder mask before treating the traces itself. Solder mask is available as a canned product for manual application from some suppliers, it is however questionable whether an original look can be restored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If any destructive corrosion has happened to inner layer traces in a multilayer board, it is unlikely you can do anything but replace the trace with a wire.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once a trace is bare and clean, you could improve it by tinning it (or even soldering down a wire parallel to it). Or, you could use some chemical plating (galvanics kits) method, however, you would need to apply voltage to some spot on the trace and work very precisely so as not to cause electrical damage to anything; Also, not every plating keeps well on every metal. Unless you want to work with actual electroless plating solutions, which - even if somebody is willing to sell them to you - are sometimes &lt;em&gt;extremely&lt;/em&gt; toxic compounds (there is raw cyanide in substantial amounts in some).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You best bet to deal with traces that are actually gone is using magnet wire, or small coaxial cables for really sensitive stuff (they can be salvaged from surplus VGA cables and the antennas in scrap laptops). If you need a stable pad to solder something to, cut out a small square of unetched PCB stock or even copper foil, roughen both the back of it and superglue it to an also roughened place on the PCB (where no traces are). Double check the mechanical stability after soldering to it, some super glues do not suffer soldering heat well. To hold things mechanically stable, kapton self-adhesive tape is a good option.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-04-12T22:26:29.160" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6239" PostTypeId="2" ParentId="6235" CreationDate="2018-04-13T07:39:35.560" Score="5" Body="&lt;p&gt;After some more digging I actually found the card on stason.org:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://stason.org/TULARC/pc/hard-disk-floppy-controllers/I-L/INFOMATIC-POWER-SYSTEMS-CORPORATION-Two-IDE-AT-Int.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://stason.org/TULARC/pc/hard-disk-floppy-controllers/I-L/INFOMATIC-POWER-SYSTEMS-CORPORATION-Two-IDE-AT-Int.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vxfv0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vxfv0.png&quot; alt=&quot;W83757 based Super I/O card&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The layout and jumpers match exactly, even though it is listed under a different manufacturer.&lt;/p&gt;&#xA;" OwnerUserId="8337" LastEditorUserId="8337" LastEditDate="2018-04-13T12:35:53.693" LastActivityDate="2018-04-13T12:35:53.693" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6240" PostTypeId="1" AcceptedAnswerId="6241" CreationDate="2018-04-13T11:19:45.037" Score="39" ViewCount="7484" Body="&lt;p&gt;The Difference Engine was built in the 90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why has nobody succeeded in building the Analytical Engine?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Charles Babbage designed the Analytical Engine as a general-purpose computer to succeed  his more limited difference engines. The Analytical Engine would be Turing complete and programmable in an assembler-like language (conditional branches and loops). Unfortunately, like the designs of his Difference Engine(s), it was not build in Charles Babbage's lifetime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am interested in reason for this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the design incomplete? If so, what is missing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mill (CPU) itself should be impressive enough (as shown in the &#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Analytical_Engine&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia article&lt;/a&gt;)!&lt;/p&gt;&#xA;" OwnerUserId="8195" LastEditorUserId="202" LastEditDate="2019-05-14T06:21:54.287" LastActivityDate="2019-05-14T06:21:54.287" Title="Why does nobody attempt to build Charles Babbage's Analytical Engine?" Tags="&lt;history&gt;&lt;analytical-engine&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6241" PostTypeId="2" ParentId="6240" CreationDate="2018-04-13T11:35:33.560" Score="58" Body="&lt;p&gt;&lt;a href=&quot;https://plan28.org/&quot; rel=&quot;noreferrer&quot;&gt;Plan 28&lt;/a&gt; is an ongoing effort to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it is hard. Nobody is actually sure how to build it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://blog.plan28.org/2016/05/winter-2015-project-report-to-computer.html&quot; rel=&quot;noreferrer&quot;&gt;Winter 2015&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There has been significant archive activity. The major historical source is the Babbage technical archive held by the Science Museum. The Science Museum digitised the archive in 2012 is now preparing to provide open access to the archive. The Analytical Engine project team has been the main user of the digitised archive under special licence. In the course of the project mismatches have been identified between the digitised material and the existing printed index compiled by the late Allan Bromley and published by the Science Museum in 1991. Referencing anomalies, identification of material omitted from digitisation exercise and other structural issues have become evident. Descriptions of these have been compiled and we are working with Science Museum archivists to resolve and correct these ahead of open access release. The work is detailed and, given the volume of material, substantial. Eye-strain is an ongoing hazard.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://blog.plan28.org/2016/05/spring-2016-report-to-computer.html&quot; rel=&quot;noreferrer&quot;&gt;Spring 2016&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;We have been pecking away at Babbage’s original design drawings for some while now and have found with regret that we are unable to reverse engineer a coherent and consistent understanding of the Analytical Engine from the mechanical drawings alone. There are some 300 drawings and some 2200 Notations – descriptions of the mechanisms using Babbage’s language of signs and symbols. There were three phases of design - early, middle, and late.There is overlap between these, there are ad hoc upgrades, and only fragmentary explanation, where there is explanation at all.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://blog.plan28.org/2016/10/autumn-2016-report-to-computer.html&quot; rel=&quot;noreferrer&quot;&gt;Autumn 2016&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Tim Robinson in the US has been trawling through the entire technical archive and compiling a searchable cross-referenced data base for all surviving technical material. In parallel with this I am conducting a fast-track survey of some twenty manuscript volumes of Babbage’s notebooks focussing on material on his notational language (the Mechanical Notation) that he used to describe his machines – this with a view to reading the notational description of the AE designs using the decoded Notation as an interpretative tool to achieve a deeper understanding of the designs. The data-base and trawling exercise is what has primarily occupied us over the last four months.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://blog.plan28.org/2018/03/march-2018-report-to-computer.html&quot; rel=&quot;noreferrer&quot;&gt;March 2018&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Cambridge manuscript belongs to Babbage’s later period (1850s and early 1860s) when he returned to refine and develop his earlier work. The most substantial single section consists of some 65 manuscript pages the transcription of which is now complete. Tim Robinson has vetted the transcriptions and incorporated them into the database. Preliminary review of this new material suggests that while cryptic in parts it is more coherent than previously thought and contains some potentially dramatic simplifications of implementation. This material will be the focus of close study in due course.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="278" LastActivityDate="2018-04-13T11:35:33.560" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="6242" PostTypeId="5" CreationDate="2018-04-13T15:58:49.453" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2018-04-13T15:58:49.453" LastActivityDate="2018-04-13T15:58:49.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6243" PostTypeId="4" CreationDate="2018-04-13T15:58:49.453" Score="0" Body="For questions relating to the analytical engine designed by Charles Babbage" OwnerUserId="8460" LastEditorUserId="278" LastEditDate="2018-04-13T16:12:15.027" LastActivityDate="2018-04-13T16:12:15.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6244" PostTypeId="2" ParentId="2491" CreationDate="2018-04-13T17:53:47.380" Score="2" Body="&lt;p&gt;Don't know how widespread it was - but IBM introduced variable record size on hard discs in 1961 and didn't create hard disks with fixed block size until 1979.  (Dates from Wikipedia, see below.)  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lots of their software was written to make use of this optimally - in fact, it was the design point around which IBM's ISAM - Indexed Sequential Access Mode - was developed, and that was the primary database access mechanism of the time.  (In fact, you may as well call it the &lt;em&gt;primary database&lt;/em&gt; of the time, not simply an access method.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Refs:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Fixed-block_architecture#Overview&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fixed Block vs Variable Record size on Wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ISAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM Indexed Sequential Access Mode on Wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="332" LastActivityDate="2018-04-13T17:53:47.380" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6246" PostTypeId="1" AcceptedAnswerId="6247" CreationDate="2018-04-13T18:50:31.007" Score="9" ViewCount="471" Body="&lt;p&gt;The SPC700's instruction set is derived from the 6502's, but moves the instructions around and adds a few. But is it &lt;em&gt;fully&lt;/em&gt; backwards compatible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming that the program fully separates data and code, such that opcodes are never used as data or operands, can a direct binary to binary transliteration be performed that leaves the SPC700 program operating identically to the 6502 version without changing any of the addresses of instructions?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="2123" LastEditDate="2018-04-14T01:17:56.907" LastActivityDate="2018-10-05T14:16:59.950" Title="Can 6502 programs be transliterated to the SPC700?" Tags="&lt;software&gt;&lt;nintendo&gt;&lt;6502&gt;&lt;compatibility&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6247" PostTypeId="2" ParentId="6246" CreationDate="2018-04-13T19:35:05.697" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The SPC700's instruction set is derived from the 6502's, but moves the instructions around and adds a few. But is it fully backwards compatible?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least not fully. The instruction set is mostly like a 65C02, but a few instructions (like BIT) are missing. Also, not all inner workings are the same (*1).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Assuming that the program fully separates data and code, such that opcodes are never used as data or operands, can a direct binary to binary transliteration be performed that leaves the SPC700 program operating identically to the 6502 version without changing any of the addresses of instructions?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;With some luck. For example if there's none of the missing instructions used (*2). And no decimal arithmetics - as the SPC700 doesn't offer that (*3). Similar direct manipulations of flags may be problemetic, as structure and meanings differs (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be a bit better when translating source code, but not much.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - No decimal mode but Half Carry handling; moveable ZP, and more&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Which could be detected by the translator&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Harder to detect, but &lt;code&gt;CLD&lt;/code&gt;/&lt;code&gt;SED&lt;/code&gt; could throw a warning&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Here it gets hard to manage, since a warning for every &lt;code&gt;PLP&lt;/code&gt; would just flood the conversion listing.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-04-13T19:50:31.220" LastActivityDate="2018-04-13T19:50:31.220" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6248" PostTypeId="2" ParentId="6240" CreationDate="2018-04-13T19:53:26.043" Score="4" Body="&lt;p&gt;The Difference Engine was built in duplicate; there are good YouTube videos of it. However, the Analytical Engine was a much-more ambitious project, and building any hardware for it must still be in the future.&#xA;Its layout reminds one of the Mandelbrot set at 1x scale, so to speak.&#xA;See also the mechanical computer made, built by Konrad Zuse, and rebuilt, after World War II.&lt;/p&gt;&#xA;" OwnerUserId="8364" LastActivityDate="2018-04-13T19:53:26.043" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6249" PostTypeId="1" AcceptedAnswerId="6255" CreationDate="2018-04-13T22:14:29.760" Score="16" ViewCount="2574" Body="&lt;p&gt;In the late MS-DOS era, what were the state of the art software tools for reverse engineering and patching binaries, i.e. .exe and .com files?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple list of the tools that were &quot;state of the art&quot;, widely used, or considered excellent, and what they were used for, for DOS would suffice. However, the answer to this question might also depend on the answer to &quot;What do you want to do with such a tool?&quot;. For this reason I have provided a concrete example with a use case, consider the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an old game I would like to run, but my DOS machine has too much RAM. The game issues a simple error: &quot;Program too big to fit in memory&quot;. I have reason to suspect that it is indeed extended memory which is &quot;insufficient&quot;, and not simply a lack of conventional memory which would typically be the case. This is beyond the point anyway, but this might be due to an integer overflow or similar issue. I want to find whatever code is doing this and just NOP it out, patch the binary, and see if that makes the problem go away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like a tool that allows me to search for strings in memory, in particular that above-mentioned error. It would be nice if the tool could list references to the string. Obviously I would want to be able to have basic debugging functionality as well, breakpoints, watchpoints, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I would like to be able to patch the .exe file and save it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, I could use modern tools for this particular problem, such as IDA pro, on a modern system, but I would like to do it on the DOS machine, partly just to play around with such tools.&lt;/p&gt;&#xA;" OwnerUserId="7413" LastEditorUserId="3290" LastEditDate="2020-05-01T07:24:13.863" LastActivityDate="2020-06-06T09:13:04.153" Title="What tools were used in late MS-DOS era for reverse engineering and patching binary executables?" Tags="&lt;ms-dos&gt;&lt;reverse-engineering&gt;&lt;executables&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6250" PostTypeId="2" ParentId="6249" CreationDate="2018-04-13T22:25:12.920" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I have an old game I would like to run, but my DOS machine has too much RAM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The most proper way to run DOS applications in Windows is using DOSbox.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;Program too big to fit in memory&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It may happen that you have corrupt executable.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Obviously I would want to be able to have basic debugging functionality as well, breakpoints, watchpoints, etc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In order to debug something, you must have an understanding of how it works. There were great disassembly tools, there was Turbo Debugger from Borland, however it is a good question if you will be able to use them properly without initial training.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2018-04-13T22:25:12.920" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6251" PostTypeId="2" ParentId="6249" CreationDate="2018-04-14T00:33:54.073" Score="5" Body="&lt;p&gt;The state of the art in assembly-level debugging of DOS programs is almost certainly &lt;a href=&quot;https://en.wikipedia.org/wiki/SoftICE&quot; rel=&quot;noreferrer&quot;&gt;SoftICE&lt;/a&gt;.  I've never used it, but my understanding is that it was for a very long time the tool of choice of software copyright protection scheme crackers, as well as low-level operating system/device driver developers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, it may well be overkill for your problem.  You do not specify how you have determined that the problem is not a shortage of conventional memory, but it should be noted that the error you quote is IIRC the standard error used by MSDOS when there is not enough conventional memory for the size specified in the &lt;a href=&quot;http://www.delorie.com/djgpp/doc/exe/&quot; rel=&quot;noreferrer&quot;&gt;.EXE file (&quot;MZ&quot;) header&lt;/a&gt;.  I would begin by opening the .EXE file in a hex editor and calculating:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;code_size = 512*(word at 0x0004)&lt;/li&gt;&#xA;&lt;li&gt;bss_size = 16*(word at 0x000A)&lt;/li&gt;&#xA;&lt;li&gt;total_size = code_size + bss_size&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and comparing that against your available memory (as reported by mem, if you're on DOS 4+).  If it's larger (or even quite close), you may well not have enough conventional memory, even if you seem to have quite a lot.  I've seen programs before that required very nearly &lt;em&gt;all&lt;/em&gt; of the conventional memory on a 640K system to load.  You may have one of these - or, as suggested by Anonymous above, you may have a corrupt file that has nonsense in one of these fields.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-04-14T00:42:23.320" LastActivityDate="2018-04-14T00:42:23.320" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6252" PostTypeId="1" CreationDate="2018-04-14T01:11:05.320" Score="10" ViewCount="439" Body="&lt;p&gt;On the 8080 there are many instructions with parallel forms. Three of these are &lt;code&gt;CALL&lt;/code&gt;, &lt;code&gt;RET&lt;/code&gt; and &lt;code&gt;JP&lt;/code&gt;, which all have conditional and immediate forms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I am using Z80 terminology because that is what I am familiar with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In octal:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;3p0&lt;/code&gt; - &lt;code&gt;RET  &amp;lt;cond&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;3p2&lt;/code&gt; - &lt;code&gt;JP   &amp;lt;cond&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;3p4&lt;/code&gt; - &lt;code&gt;CALL &amp;lt;cond&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;p&lt;/code&gt; - &lt;code&gt;&amp;lt;cond&amp;gt;&lt;/code&gt; represents a flag/value combination:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0 - NZ (Z=0, Non Zero)&#xA;1 - Z  (Z=1, Zero)&#xA;2 - NC (C=0, Non Carry)&#xA;3 - C  (C=1, Carry)&#xA;4 - PO (V=0, Parity Odd / non oVerflow)&#xA;5 - PE (V=1, Parity Even / oVerflow)&#xA;6 - P  (S=0, Sign Plus)&#xA;7 - M  (S=1, Sign Minus)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The immediate forms are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;311&lt;/code&gt; - &lt;code&gt;RET&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;303&lt;/code&gt; - &lt;code&gt;JP&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;315&lt;/code&gt; - &lt;code&gt;CALL&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of the &lt;code&gt;CALL&lt;/code&gt; and &lt;code&gt;JP&lt;/code&gt; instructions take the next two bytes as the 16-bit address to go to, but that is irrelevant to my question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8080 did not define instruction &lt;code&gt;313&lt;/code&gt;, which was later used by the Z80 to expand the instruction set. Why did the designers of the 8080 not use &lt;code&gt;313&lt;/code&gt; for JumP immediate, and leave &lt;code&gt;303&lt;/code&gt; undefined instead?&lt;/p&gt;&#xA;" OwnerUserId="2067" LastActivityDate="2018-04-14T02:10:47.050" Title="Why was the 8080's JumP immediate instruction placed where it was?" Tags="&lt;8080&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6253" PostTypeId="2" ParentId="6252" CreationDate="2018-04-14T02:10:47.050" Score="11" Body="&lt;p&gt;According to &lt;a href=&quot;https://groups.google.com/forum/#!msg/comp.os.cpm/TV739zw_UOw/29cIEi9-ZxYJ&quot; rel=&quot;noreferrer&quot;&gt;this newsgroup post&lt;/a&gt;, &lt;code&gt;0313&lt;/code&gt; (which is &lt;code&gt;0xCB&lt;/code&gt;) may in fact be an undocumented variant of JP on original 8080 processors.  Given this, the reason for the irregularity may be as simple as a documentation error that was never corrected due to the fact that the documented opcode did in fact work, even if it was never intended to (like many other processors of the early 70s, the 8080 only partially decoded opcodes, resulting in either copies of instructions or merged behaviours from multiple instructions appearing at opcodes that were not occupied intentionally).&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-04-14T02:10:47.050" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6254" PostTypeId="2" ParentId="6249" CreationDate="2018-04-14T06:57:23.917" Score="10" Body="&lt;p&gt;The simplest way to patch a .com file is &lt;code&gt;DEBUG&lt;/code&gt;, which comes with any DOS installation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;DEBUG is partially usable for .exe files as well, but cannot reverse their relocation process, and so cannot save them once they have been relocated (If you load them as a plain binary file instead of an executable, you can, however, save them, but have limitations with debugging them). &lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-04-14T06:57:23.917" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6255" PostTypeId="2" ParentId="6249" CreationDate="2018-04-14T11:40:56.953" Score="19" Body="&lt;p&gt;As others have mentioned, “Program too big to fit in memory” means that DOS can’t find a large enough memory block to fit the amount of memory that your program’s header requests. This can be either because you have too little available &lt;em&gt;conventional&lt;/em&gt; memory (extended memory isn’t taken into account), or because your executable is corrupted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your question about state-of-the-art tools which people would have used in the late DOS era to debug, disassemble and patch executables, here are a few which I would recommend:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://corexor.wordpress.com/2015/12/09/sourcer-and-windows-source/&quot; rel=&quot;noreferrer&quot;&gt;Sourcer&lt;/a&gt; was one of the best non-interactive disassemblers; it also included binary patching tools — so you’d disassemble your program, figure out where it needed fixing, and write a binary patch for it.&lt;/li&gt;&#xA;&lt;li&gt;IDA is an excellent &lt;em&gt;interactive&lt;/em&gt; disassembler, and early versions were available for DOS (see &lt;a href=&quot;http://www.dcee.net/Files/Programm/Utils/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;Debuggers would commonly be used to explore the inner workings of a program. The best debugger is the one you’re most familiar with, so for most people that would be the debugger included in their development environment — Turbo Debugger for Borland users, CodeView for Microsoft users, the Watcom debugger etc. There was some cross-over, and Turbo Debugger in particular seemed quite popular back then. Other famous debuggers include &lt;a href=&quot;https://en.wikipedia.org/wiki/SoftICE&quot; rel=&quot;noreferrer&quot;&gt;SoftICE&lt;/a&gt; and Periscope (which was a real ICE, &lt;em&gt;i.e.&lt;/em&gt; hardware-based). I tend to use &lt;a href=&quot;http://www.sudleyplace.com/swat/&quot; rel=&quot;noreferrer&quot;&gt;386SWAT&lt;/a&gt; nowadays; it wasn’t famous back in the late DOS days, since it was an internal Qualitas tool (used to develop the 386MAX memory manager), but it was released to the general public at the turn of the century and is very capable.&lt;/li&gt;&#xA;&lt;li&gt;Other useful tools include hex viewers and editors; examples include &lt;a href=&quot;http://www.enlight.ru/qview/main.htm&quot; rel=&quot;noreferrer&quot;&gt;QView&lt;/a&gt;, BIEW, HIEW etc. (see &lt;a href=&quot;http://www.reimagery.com/fsfd/filutil2.htm#hextools&quot; rel=&quot;noreferrer&quot;&gt;this list&lt;/a&gt;). Some of these also include disassemblers, and executable header viewers (which would allow you to easily view the required memory in your case, and perhaps patch &lt;em&gt;that&lt;/em&gt;). You could use one of these to actually patch your executable, after determining what byte sequence to look for, either in a disassembler or debugger.&lt;/li&gt;&#xA;&lt;li&gt;Once you’ve figured out what to patch, you might need an unpacker first — DOS executables were often compressed, so you wouldn’t be able to patch them directly. There were quite a few tools to handle this; I’d generally use UNP (see &lt;a href=&quot;http://www.reimagery.com/fsfd/arc2.htm#exepck&quot; rel=&quot;noreferrer&quot;&gt;this list&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-04-14T11:40:56.953" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="6256" PostTypeId="2" ParentId="6249" CreationDate="2018-04-14T17:55:57.690" Score="9" Body="&lt;p&gt;a bit off topic to your actual question but to make your game/exe whatever usable again:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Too much memory&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;common on MS-DOS for 32MByte and 64MByte (IIRC some versions use 32 some 64). The memory manager reports negative value of free or total memory causing this problem. To repair simply use Smart Drive and fill memory to it until only 32MByte or slightly less is left for the OS (IIRC the buffers could be incrementally increased). This work on all exe I used at the time even if 128 or 256 or 512 MByte of RAM memory was present.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case your out of memory error is due to missing memory manager like: himem.sys or emm386/qemm386 just install it into startup (config.sys).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;CRT runtime error 200&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;this is caused due to using old TP7 crt unit which on init use some CPU measuring loop. On fast computers it overflows and causes this error. There are 3  approaches to fix.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;use crt lib patch (not working for some packed executables) it was called &lt;code&gt;tppatch.exe&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;use &lt;code&gt;slow&lt;/code&gt; commandline tool (also not 100%)&lt;/li&gt;&#xA;&lt;li&gt;turn off CPU/MB caches in BIOS Setup (this has 100% success rate for me)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12111/why-did-ms-dos-applications-built-using-turbo-pascal-fail-to-start-with-a-divisi&quot;&gt;this dedicated question&lt;/a&gt; for more details.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;bad startup config&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;demanding MS-DOS programs where picky on the startup config you chose. Some programs need only himem.sys (to boost BASE memory) other need XMS/EMS. So if you know which one you need then configure your startup propperly. The easiest is to have startup boot menu in autoexec.bat/config.sys to select which one you want quickly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For more info on this topic see (my startup config included:):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/46521076/2521214&quot;&gt;Run Turbo C++ in Freedos&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now some additional tools you should have (the comments are opinion based!):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://vvv.kiev.ua/download/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Volkov Commander&lt;/a&gt; (file manager with file associations and context menus is a must)&lt;/li&gt;&#xA;&lt;li&gt;Hiew (txt viewer editor disassembler is a must)&lt;/li&gt;&#xA;&lt;li&gt;UniVBE (VESA driver for also non VESA gfx cards can enhance resolutions is amust) &lt;/li&gt;&#xA;&lt;li&gt;RAR,PKZIP,PKLITE,UC2,ARJ (packers/unpackers is a must especially pklite for executables)&lt;/li&gt;&#xA;&lt;li&gt;NEOPAINT (gfx editor)&lt;/li&gt;&#xA;&lt;li&gt;Derive (algebraic calculator and plotter now it is called derive for windows)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://studylibde.com/doc/2205125/beschreibung-zu-pv.exe-version-2.63-stand-02.05.97-w&quot; rel=&quot;nofollow noreferrer&quot;&gt;PV.EXE&lt;/a&gt; (gfx extractor/decoder and viewer from any files)&lt;/li&gt;&#xA;&lt;li&gt;QV (quick view - multimedia viewer can play also DivX,avi,mov,fli,flc,... the best I saw ever)&lt;/li&gt;&#xA;&lt;li&gt;QPV (image viewer also the best of its kind I know of)&lt;/li&gt;&#xA;&lt;li&gt;MODPLAY,DOSAMP (sound players)&lt;/li&gt;&#xA;&lt;li&gt;TCPP or TP7 (borland compilers nad IDE with turbo debuger and linkers is a must for some patching)&lt;/li&gt;&#xA;&lt;li&gt;tppatch (CRT error patcher is a must)&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;NASM (assembly compiler the best in its class)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;gmouse (genius mouse driver)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;load_sys (loader of drivers without restart during runtime is a must)&lt;/li&gt;&#xA;&lt;li&gt;DOS4GV (protected mode engine is a must)&lt;/li&gt;&#xA;&lt;li&gt;FAKECD (CDROM emulator is a must)&lt;/li&gt;&#xA;&lt;li&gt;MSCDEX (CDROM driver)&lt;/li&gt;&#xA;&lt;li&gt;UNERASE,UNDELETE&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;TBAV (the best antivirus of its class)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.philscomputerlab.com/western-digital.html#&quot; rel=&quot;nofollow noreferrer&quot;&gt;EZ Drive&lt;/a&gt;,NDD,PQ8,&lt;a href=&quot;https://ulozto.net/file/0ciHd2nJKcOK/fhformat-zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;FHFORMAT&lt;/a&gt; (HDD and FDD utilities)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There where also TCPP and TP7 disassemblers and discompilers (that recreate the source from compiled exe) but can not remember how they called.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is first link from Google with some of them included for download:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.osdos.net/download2.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;MS-DOS utilities&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here some stuff like &lt;code&gt;mouse,gmouse&lt;/code&gt; and USB drivers for w9x related to &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/8945/6868&quot;&gt;other question&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ulozto.net/!47n25rih7UxZ/usb-mouse-w9x-zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;MS-DOS (g)mouse and w9x USB stuff&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2020-06-06T09:13:04.153" LastActivityDate="2020-06-06T09:13:04.153" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6257" PostTypeId="2" ParentId="5465" CreationDate="2018-04-14T21:54:48.260" Score="2" Body="&lt;p&gt;If the actual task at hand is recovering such data at any cost and effort, there is still the possibility of directly recording the read head signal on some recording and visualization device, eg a secondary PC with an analog data acquisition card, or a storage oscilloscope, then decoding it manually. Triggering the recording at the right moment could prove tricky, forcing the computer into a repeated read attempt for that sector could help. If the recording device can hold the analog data representing a whole track, using the signal from the index hole sensor as a trigger and making sure the track the damaged data is on is seeked to and not left could help.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-04-14T21:54:48.260" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6258" PostTypeId="1" AcceptedAnswerId="6259" CreationDate="2018-04-15T18:15:54.957" Score="12" ViewCount="2066" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Nintendo_64_technical_specifications&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Nintendo_64_technical_specifications&lt;/a&gt; says that the N64 calculated with 24-bit color, but output 21-bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, &lt;a href=&quot;https://retrocdn.net/images/7/70/Nintendo_Ultra64_Programming_Manual_and_Addendums.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://retrocdn.net/images/7/70/Nintendo_Ultra64_Programming_Manual_and_Addendums.pdf&lt;/a&gt; contradicts this; on page 210, it says that the console indeed calculated with 24-bit color, but output 15-bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which of the two is accurate? I would guess the second, being an original source, but I might be missing something.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2018-04-15T22:58:14.427" LastActivityDate="2018-04-16T00:05:47.580" Title="Nintendo 64 Color Depth" Tags="&lt;nintendo-64&gt;&lt;color-display&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6259" PostTypeId="2" ParentId="6258" CreationDate="2018-04-15T19:05:12.030" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Nintendo_64_technical_specifications&quot; rel=&quot;noreferrer&quot;&gt;The Wiki Entry&lt;/a&gt; says that the N64 calculated with 24-bit color, but output 21-bit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Right,that's the way it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 15 or 24 Bit colour is what the &lt;em&gt;Reality Display Processor&lt;/em&gt; can produce (see &lt;em&gt;Video Interface&lt;/em&gt; on p.46). Internally it works with a 32 Bit RGBA based pipeline. Results are stored as 15 or 24 Bit values before being send to the DAC. This is where the 21 bit come into play, as the interface between the RDP and the DAC offers only 7 bit per colour. Here is a &lt;a href=&quot;http://members.optusnet.com.au/eviltim/n64rgb/n64rgb.png&quot; rel=&quot;noreferrer&quot;&gt;nice schematic&lt;/a&gt; showing how the data dan be decoded with standard IC can be used to decode the data stream (Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/75/traal&quot;&gt;traal&lt;/a&gt; for &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6260/6659&quot;&gt;finding a more information&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;However, &lt;a href=&quot;https://retrocdn.net/images/7/70/Nintendo_Ultra64_Programming_Manual_and_Addendums.pdf&quot; rel=&quot;noreferrer&quot;&gt;the programming manual&lt;/a&gt; contradicts this; on page 210, it says that the console indeed calculated with 24-bit color, but output 15-bit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;Framebuffer&lt;/em&gt; mentioned on page 210 isn't memory image of a whole picture. The closest equivalence of what is shown would be a sprite buffer. Although these sprites also have coverage and Z buffer information, so the RDP can decide if a pixel mentioned there is to be taken into account. And if, how the Colour Composer and Blender stages have to handle it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All colour computation is done with 32 Bit RGBA values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The resulting image is of course again stored in memory as a frame buffer, so the DMA can feed the DAC to generate a picture. It doesn't matter if the picture was stored in 15 or 24 bit format, it always get send as 21 bit RGB to the DAC. Since the N64s memory is organized as two 2 Mi by 9 RAMs, 15 bit format fits nicely into an 18 bit word, while 24 bit does need two words.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Switching to 15 bit format is effectively halving the memory need for a picture without losing much detail. With 'only' 4 MiB (9-bit-bytes) total RAM, the need for 'only' ~600 KiB instead of up to 1.2 MiB is a quite substantial saving. Even more helpful in full PAL with 900KiB/1.8MiB storage needed for a picture.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;And no, I have no idea why they didn't go with an 18 bit format which would have offered the same space savings. My only guess is that it nicely goes with the (also space saving) 16 bit RGBA data format for textures.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-04-16T00:05:47.580" LastActivityDate="2018-04-16T00:05:47.580" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6260" PostTypeId="2" ParentId="6258" CreationDate="2018-04-15T23:07:50.960" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The video is generated by the Reality Co-Processor and clocked into the DAC through a bus &lt;a href=&quot;http://members.optusnet.com.au/eviltim/n64rgb/n64rgb.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;7 bits wide&lt;/a&gt;. This video data consists of four (7 bit) bytes synchronised with the 50Mhz Clock signal. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Byte 0 is sync information, byte 1 is digital red, byte 2 is digital green, and byte 3 is digital blue. So the DAC itself is the limiting factor: only 7 bits per color channel.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-04-15T23:07:50.960" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6261" PostTypeId="1" AcceptedAnswerId="6264" CreationDate="2018-04-16T06:32:54.540" Score="12" ViewCount="2014" Body="&lt;p&gt;The Nintendo 64 GPU ('Reality Coprocessor') had microcode that could be loaded at runtime. Several standard microcodes were supplied with the development kit, and the easily findable documentation talks only in terms of using these, but it was possible to write your own, and some intrepid developers did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the format of the microcode, the actual hardware instruction set? I haven't been able to find any documentation on that.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-04-21T20:56:22.443" Title="Nintendo 64 microcode format" Tags="&lt;instruction-set&gt;&lt;nintendo-64&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6262" PostTypeId="1" AcceptedAnswerId="6263" CreationDate="2018-04-16T07:08:20.370" Score="6" ViewCount="477" Body="&lt;p&gt;The Nintendo 64 used RAMBUS memory, width 9 bits including parity; the latter would seem unnecessary for a console, but the machine actually uses it to store an extra bit of data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is an unusual design choice (relative to just omitting parity), and I'm curious about the reasoning. Is it that they particularly wanted exactly 18 bits per word, and this was the way to get it? Did it happen to be the case that the best deal they could get on memory modules included a parity chip for less than 1/8 extra money? Would the same idea also work on the more commonly used EDO RAM?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-04-16T08:14:21.843" Title="Repurposing the parity bit" Tags="&lt;memory&gt;&lt;nintendo-64&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6263" PostTypeId="2" ParentId="6262" CreationDate="2018-04-16T07:31:42.260" Score="9" Body="&lt;p&gt;RAMBUS was choosen for speed. They always came in 9 bit, which in turn was used for more precice storage by the graphics hardware by using 18 bit words for RGB/Coverage and Z/Delta-Z.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And no, it's not 'repurposing' a parity bit, as the RAMs are simply organized as 9 bit words. There is no special purpose of either bit - thats something external logic may apply - or not)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-04-16T08:14:21.843" LastActivityDate="2018-04-16T08:14:21.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6264" PostTypeId="2" ParentId="6261" CreationDate="2018-04-16T07:48:19.100" Score="14" Body="&lt;p&gt;As I understand it the GPU’s microcode was written for the RSP (Reality Signal Processor). The RSP’s instruction set is comprehensively documented in &lt;a href=&quot;http://ultra64.ca/files/documentation/silicon-graphics/SGI_Nintendo_64_RSP_Programmers_Guide.pdf&quot; rel=&quot;noreferrer&quot;&gt;the Nintendo Ultra64 RSP Programmer’s Guide&lt;/a&gt;, including detailed opcode format descriptions. &lt;a href=&quot;http://ultra64.ca/files/documentation/silicon-graphics/SGI_R4300_RISC_Processor_Specification_REV2.2.pdf&quot; rel=&quot;noreferrer&quot;&gt;The R4300 Processor Specification&lt;/a&gt; is also useful, as is &lt;a href=&quot;http://ultra64.ca/files/documentation/silicon-graphics/SGI_RDP_Command_Summary.pdf&quot; rel=&quot;noreferrer&quot;&gt;the Nintendo Ultra64 RDP Command Summary&lt;/a&gt;. The Ultra 64 project, which hosts these, provides &lt;a href=&quot;http://ultra64.ca/resources/documentation&quot; rel=&quot;noreferrer&quot;&gt;lots of documentation&lt;/a&gt; on the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The opcodes can be decoded using a relatively straightforward table-driven decoder; see Cen64’s decoder for example. The Cen64 project also has &lt;a href=&quot;https://git.cen64.com/?p=n64chain.git;a=tree;f=rspasm&quot; rel=&quot;noreferrer&quot;&gt;an RSP assembler&lt;/a&gt; you can use to build new microcode files.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-04-21T20:56:22.443" LastActivityDate="2018-04-21T20:56:22.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6265" PostTypeId="2" ParentId="4908" CreationDate="2018-04-16T11:32:25.477" Score="17" Body="&lt;p&gt;Commodore 64 uses two CIA (Complex Interface Adapter) chips. CIA#1 is responsible for the keyboard, joystick, paddles, datasette and IRQ control, while CIA#2 controls the serial bus, RS-232, VIC memory and NMI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you check the CIA#1 address map you will see that:&lt;br&gt;&#xA;Memory address &lt;code&gt;$DC00&lt;/code&gt; (Port A) is used for keyboard matrix columns and Joystick #2 at the same time, while address &lt;code&gt;$DC01&lt;/code&gt; (Port B) is used for keyboard matrix rows and Joystick #1. This means that there is no difference between joystick and keyboard inputs for the standard interrupt service routine. When there is a keyboard or joystick input, the service routine reads ports A and B and updates relevant addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory locations used during datasette and keyboard access (taken from the memory map provided at sta.c64.org (&lt;a href=&quot;http://sta.c64.org/cbm64mem.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://sta.c64.org/cbm64mem.html&lt;/a&gt;) are listed below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;== Memory Locations used during datasette access ==&#xA;$0090: Value of ST variable, device status for datasette input/output.&#xA;$0091: Stop key indicator&#xA;$0093: LOAD/VERIFY switch&#xA;$0096: End of tape indicator&#xA;$0097: Temporary area for saving original value of X register&#xA;$0098: Number of files currently open (0-10)&#xA;$009B: Parity bit&#xA;$009C: Byte ready indicator&#xA;$009D: System error display switch&#xA;$009E: Byte to be put into output buffer, block header type, length of file name during datasette input/output, error counter during LOAD from datasette. &#xA;$009F: Aux counter&#xA;$00A3: bit counter&#xA;$00A4: Parity&#xA;$00A5: Counter of sync mark&#xA;$00A6: Offset of current byte&#xA;$00AB: Computer block checksum&#xA;$00AC-$00AD: Pointer to current byte during SAVE &#xA;$00AE-$00AF: End address for LOAD/VERIFY or SAVE&#xA;$00B2-$00B3: Pointer to datasette buffer (Default: $033C)&#xA;$00B4: Bit counter&#xA;$00BD: Byte buffer&#xA;$00BE: Block counter&#xA;$00C0: Datasette motor switch&#xA;$00C1-$00C2: Start address during LOAD/VERIFY/SAVE&#xA;$00D7: Bit buffer during datasette input./Block checksum during datasette output.&#xA;&#xA;== Memory Locations used during keyboard access ==&#xA;$00C5: Keyboard matrix code of key previously pressed&#xA;$00C6: Length of Keyboard Buffer&#xA;$00C7: Reverse mode switch&#xA;$00C8: Length of line minus 1&#xA;$00C9: Cursor row&#xA;$00CA: Cursor column&#xA;$00CB: Matrix code of key currently pressed&#xA;$00CE: Screen code character under cursor&#xA;$00CF: Cursor phase switch&#xA;$00D0: End of line switch&#xA;$00D1-$00D2: Pointer to current line&#xA;$00D3: Pointer to current column&#xA;$00D4: Quotation mode switch&#xA;$00D5: Length of current screen line minus 1&#xA;$00D6: Current Cursor row&#xA;$00D7: Petscii code of character during screen input&#xA;$00D8: Number of insertions&#xA;$00D9-$00F1: High byte of pointers to each line in screen memory (25 bytes)&#xA;$00F2: Temporary area during scroll&#xA;$00F3-$00F5: Pointer to current line in COLOR RAM&#xA;$0277-$0280: Keyboard buffer (10 bytes)&#xA;$0289: Maximum length of keyboard buffer&#xA;$028A: Keyboard repeat switch&#xA;$028B: Delay counter during repeat sequence, for delaying between successive repeats&#xA;$028C: Repeat sequence delay counter, for delaying before first repetition&#xA;$028D: Shift key indicator&#xA;$028E: Previous value of shift key indicator.&#xA;$0291: Commodore-Shift switch&#xA;$0292: Scroll direction switch during scrolling the screen&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Apparently some the addresses are the same, e.g:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;$00AC&lt;/code&gt;-&lt;code&gt;$00AD&lt;/code&gt;&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;for datasette: Pointer to current byte during SAVE &lt;/li&gt;&#xA;&lt;li&gt;for keyboard: Pointer to line in screen memory to be scrolled during scroll&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;$00AE&lt;/code&gt;-&lt;code&gt;$00AF&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;for datasette: End address for LOAD/VERIFY or SAVE&lt;/li&gt;&#xA;&lt;li&gt;for keyboard: Pointer to line in Color RAM to be scrolled during scroll &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;$00D7:&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;for datasette: PETSCII code of character during screen input/output.&lt;/li&gt;&#xA;&lt;li&gt;for keyboard: Bit buffer during datasette input. / Block checksum during datasette output.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This means keyboard input (or joystick input misinterpreted as keyboard input) can easily interfere with the datasette loader. Some fast loaders are able to avoid this by using different memory schemes or by disabling keyboard input during loading. IMHO the Commodore engineers should have implemented it into the kernel from the beginning.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;TLDR:&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Because of the way the CIA chip interfaces with the rest of the system, the KERNAL interrupt service routine (which is located in &lt;code&gt;$EA31&lt;/code&gt; by default) doesn't differentiate keyboard and joystick inputs. When there is a joystick input the service routine updates memory locations associated with the keyboard. This interferes with the datasette operations as some of the keyboard addresses are shared with datasette.&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="6794" LastEditDate="2018-11-29T20:12:22.817" LastActivityDate="2018-11-29T20:12:22.817" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6266" PostTypeId="1" CreationDate="2018-04-16T17:33:57.120" Score="8" ViewCount="973" Body="&lt;p&gt;Parts of the 6502 opcode map are fairly regular, and parts of it aren't.  One bit that strikes me as really weird is the decoding of LD_ instructions, in relation to the decoding of other ALU instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, opcodes of the form xxxMMM01 or 10xMMMxx use addressing mode MMM, where mode 010 is immediate.  While processing 100010xx in that fashion would not be terribly useful [the pattern would suggest they should be ST_ #imm], processing 101010xx in that fashion would seem like the most straightforward way of handling LDY #imm and LDX #imm.  Curiously, though, those opcodes get mapped to TAY and TAX instructions, requiring LDY #imm and LDX #imm to be moved to opcodes 10100000 and 10100010.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did anything in the 6502's hardware make it easier to disable the &quot;load-immediate&quot; sequencing for &quot;101010x0&quot; but enable it for &quot;101000x0&quot;, while making the former instruction output the accumulator on the internal bus from which X and Y are latched, than to simply put &quot;LDX #imm&quot; and &quot;LDY #imm&quot; next to &quot;LDA #imm&quot; in a fashion similar to all the other supported operand forms?&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-02-21T16:15:39.400" Title="Was there any particular reason the 6502's LDX#imm and LDY#imm aren't opcodes A8 and AA?" Tags="&lt;history&gt;&lt;6502&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6267" PostTypeId="2" ParentId="6266" CreationDate="2018-04-16T19:00:57.330" Score="9" Body="&lt;p&gt;All of the instructions that use the A register and an immediate operand use an encoding matching the pattern of &lt;code&gt;xxx01001&lt;/code&gt;.  The rest of the immediate instructions use either X or Y as the register and are in the pattern &lt;code&gt;1xx000x0&lt;/code&gt;.  All opcodes that fit either of these patterns use immediates or are undefined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, TAY and TAX are grouped together with other instructions that have an implied operand, including the shift instructions that use the A register, all matching the pattern &lt;code&gt;xxxx10x0&lt;/code&gt;.  This pattern doesn't include all implied instructions, but all opcodes that match this pattern either have implied operands, shift the A register, or are undefined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the position of LDY immediate and LDX immediate opcodes doesn't seem weird to me, they're off in their own section of the opcode table separate from the immediate instructions that use the A register. Similarly TAX and TAY are in the section of the opcode table with other similar instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put it another way, the pattern you've noticed only works for opcodes that match the pattern &lt;code&gt;xxxMMM01&lt;/code&gt;. It doesn't work for &lt;code&gt;10xMMMxx&lt;/code&gt; where &lt;code&gt;MMM&lt;/code&gt; is &lt;code&gt;&lt;b&gt;010&lt;/b&gt;&lt;/code&gt; because none of the &lt;code&gt;xxx&lt;b&gt;010&lt;/b&gt;00&lt;/code&gt; and &lt;code&gt;xxx&lt;b&gt;010&lt;/b&gt;10&lt;/code&gt; opcodes use immediates, only the &lt;code&gt;xxx&lt;b&gt;010&lt;/b&gt;01&lt;/code&gt; opcodes do.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorUserId="2126" LastEditDate="2018-04-16T22:04:15.793" LastActivityDate="2018-04-16T22:04:15.793" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6270" PostTypeId="2" ParentId="6266" CreationDate="2018-04-16T23:35:58.367" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Parts of the 6502 opcode map are fairly regular, and parts of it aren't. One bit that strikes me as really weird is the decoding of LD_ instructions, in relation to the decoding of other ALU instructions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, for one, &lt;strong&gt;&lt;code&gt;LDX&lt;/code&gt;/&lt;code&gt;LDY&lt;/code&gt; do not use the ALU&lt;/strong&gt;, but more importantly, the way you decode it is a bit off. See below for a more detailed view on the 6500 encoding.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;LDX&lt;/code&gt;/&lt;code&gt;LDY&lt;/code&gt; immediate encoding is fine. The quirk within the transfer instructions is at &lt;code&gt;TYA&lt;/code&gt; which is &lt;code&gt;98&lt;/code&gt; instead of &lt;code&gt;88&lt;/code&gt;. And there is no technical reson why it has been done that way. There are similar other encodings, especially around the increment/decrement for the index registers.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;6500 Opcode encoding&lt;/h2&gt;&#xA;&lt;p&gt;The format isn't built the way you assume. While the general structure follows a 3-3-2 stucture like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;aaa-bbb-tt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;reading it requires to start at the end with&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;tt defining an instruction group&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is even visible the way the decoder hardware is done, as tt is not taken as seperate bits like all others, but turned into 3 lines for the three groups used, thus being the primary differentiation for all decoding.&lt;/p&gt;&#xA;&lt;p&gt;(To simplify this, lets push group 0 (tt=&lt;code&gt;00&lt;/code&gt;) to the end.)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Group 1 (tt=&lt;code&gt;01&lt;/code&gt;)&lt;/strong&gt; is the most simple. Here &lt;code&gt;aaa&lt;/code&gt; selects one of 8 instructions (&lt;code&gt;ORA&lt;/code&gt;, &lt;code&gt;AND&lt;/code&gt;, &lt;code&gt;EOR&lt;/code&gt;, &lt;code&gt;ADC&lt;/code&gt;, &lt;code&gt;STA&lt;/code&gt;, &lt;code&gt;LDA&lt;/code&gt;, &lt;code&gt;CMP&lt;/code&gt;, &lt;code&gt;SBC&lt;/code&gt;) and &lt;code&gt;bbb&lt;/code&gt; defines an addressing mode (&lt;code&gt;(ZP,X)&lt;/code&gt;, &lt;code&gt;ZP&lt;/code&gt;, &lt;code&gt;IMM&lt;/code&gt;, &lt;code&gt;ABS&lt;/code&gt;, &lt;code&gt;(ZP),Y&lt;/code&gt;, &lt;code&gt;ZP,X&lt;/code&gt;, &lt;code&gt;ABS,Y&lt;/code&gt;, &lt;code&gt;ABS,X&lt;/code&gt;). Drawing this up(*1) will give a filled table with one empty spot at &lt;code&gt;89&lt;/code&gt;, where the nonsensical &lt;code&gt;STA IMM&lt;/code&gt; would end up (*2).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Group 2 (tt=&lt;code&gt;10&lt;/code&gt;)&lt;/strong&gt; uses a similar encoding with &lt;code&gt;aaa&lt;/code&gt; as instruction and &lt;code&gt;bbb&lt;/code&gt; as addressing, just with different opcodes (&lt;code&gt;ASL&lt;/code&gt;, &lt;code&gt;ROL&lt;/code&gt;, &lt;code&gt;LSR&lt;/code&gt;, &lt;code&gt;ROR&lt;/code&gt;, &lt;code&gt;STX&lt;/code&gt;, &lt;code&gt;LDX&lt;/code&gt;, &lt;code&gt;DEC&lt;/code&gt;, &lt;code&gt;INC&lt;/code&gt;) and some addressing rearranged (&lt;code&gt;IMM&lt;/code&gt; replacing &lt;code&gt;(ZP,X)&lt;/code&gt; and &lt;code&gt;ACC&lt;/code&gt; &lt;code&gt;IMM&lt;/code&gt;) or not used (&lt;code&gt;IMM&lt;/code&gt;, &lt;code&gt;ZP&lt;/code&gt;, &lt;code&gt;ACC&lt;/code&gt;, &lt;code&gt;ABS&lt;/code&gt;, na, &lt;code&gt;ZP,X&lt;/code&gt;/&lt;code&gt;ZP,Y&lt;/code&gt;, na, &lt;code&gt;ABS,X&lt;/code&gt;/&lt;code&gt;ABS,Y&lt;/code&gt;). Here the &lt;code&gt;STX A&lt;/code&gt; and &lt;code&gt;LDX A&lt;/code&gt; are occupied exactly by &lt;code&gt;TXA&lt;/code&gt; and &lt;code&gt;TAX&lt;/code&gt;. Similarly, the 'unused' addressing &lt;code&gt;110&lt;/code&gt; is used with &lt;code&gt;STX&lt;/code&gt;/&lt;code&gt;LDX&lt;/code&gt; to form &lt;code&gt;TXS&lt;/code&gt; and &lt;code&gt;TSX&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Group 2 is also the point where they started to screw it up, as &lt;code&gt;9E&lt;/code&gt;, where &lt;code&gt;STX ABS,Y&lt;/code&gt; should be, is left out. And while the logical position for &lt;code&gt;DEC A&lt;/code&gt; is filled by &lt;code&gt;DEX&lt;/code&gt;, and &lt;code&gt;NOP&lt;/code&gt; resides where a &lt;code&gt;INC A&lt;/code&gt; could be (*3).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Group 3 (tt=&lt;code&gt;11&lt;/code&gt;)&lt;/strong&gt; is the most simple of all, as it doesn't exist :))&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Group 0 (tt=&lt;code&gt;00&lt;/code&gt;)&lt;/strong&gt; finally is where it gets crowded. At first it's much like group 2. The instructions are now  (na, &lt;code&gt;BIT&lt;/code&gt;, na, na, &lt;code&gt;STY&lt;/code&gt;, &lt;code&gt;LDY&lt;/code&gt;, &lt;code&gt;CPY&lt;/code&gt;, &lt;code&gt;CPX&lt;/code&gt;) while the general addressing modes are the same as with group 2 plus &lt;code&gt;REL&lt;/code&gt; and &lt;code&gt;FLAG&lt;/code&gt;(&lt;code&gt;IMM&lt;/code&gt;, &lt;code&gt;ZP&lt;/code&gt;, &lt;code&gt;ACC&lt;/code&gt;, &lt;code&gt;ABS&lt;/code&gt;, &lt;code&gt;REL&lt;/code&gt;, &lt;code&gt;ZP,X&lt;/code&gt;, &lt;code&gt;FLAG&lt;/code&gt;, &lt;code&gt;ABS,X&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So far everything is regular, group 0 holds the remaining instructions as well, sprinkled in in a less than regular way:&lt;/p&gt;&#xA;&lt;p&gt;Addressing &lt;code&gt;REL&lt;/code&gt; now overwrites (in a table for group 0) the instruction with &lt;code&gt;BRx&lt;/code&gt; and &lt;code&gt;FLAG&lt;/code&gt; with flag manipulation - with the exception, that &lt;code&gt;CLV&lt;/code&gt; ended up where &lt;code&gt;SEV&lt;/code&gt; would be if it existed - and &lt;code&gt;TYA&lt;/code&gt; taking up its space.&lt;/p&gt;&#xA;&lt;p&gt;Similarly, the stack operations lie diagonally to the encoding - and again &lt;code&gt;TAY&lt;/code&gt; is screwing up the somewhat regular placement of increment/decrement for the index registers.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;JMP&lt;/code&gt; does follow the scheme in so far as the &lt;code&gt;01x.011.00&lt;/code&gt; encoding used the &lt;code&gt;ABS&lt;/code&gt; addressing.&lt;/p&gt;&#xA;&lt;p&gt;The remaining instructions (&lt;code&gt;BRK&lt;/code&gt;, &lt;code&gt;JSR&lt;/code&gt;, &lt;code&gt;RTI&lt;/code&gt;, &lt;code&gt;RTS&lt;/code&gt;) fall completely out of context. But they show at least some inherent logic, especially when considering that &lt;code&gt;BRK&lt;/code&gt; is internally fed into the decoder also whenever a hardware interrupt occurs.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Drawing tables on SE sucks - so please use your imagination.&lt;/p&gt;&#xA;&lt;p&gt;*2 - A hole filled up by the 65C02 with &lt;code&gt;BIT IMM&lt;/code&gt;, since the 'rightful' spot &lt;code&gt;20&lt;/code&gt; was taken by the irregular &lt;code&gt;JSR&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*3 - as a result the 65C02 had to put &lt;code&gt;INC A&lt;/code&gt;/&lt;code&gt;DEC A&lt;/code&gt; onto new places.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-21T16:15:39.400" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6271" PostTypeId="1" AcceptedAnswerId="6274" CreationDate="2018-04-17T11:24:15.080" Score="36" ViewCount="7600" Body="&lt;p&gt;On the Apple II there's an interesting way to add a little color to the bitmap, since the high bit select the palette used for the three-and-a-half pixels represented by the byte. Like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0: Black, green, purple, white&#xA;1: Black, blue,  orange, white&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now this leaves room for three whole pixels, plus one bit which presumably forms half a pixel, the other half being formed by bit 6 of the next byte. Like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0 00 01 10 1 &#xA;1 1 00 01 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So that's a single pixel encoded by the &lt;code&gt;1&lt;/code&gt; at the end of the first byte and the &lt;code&gt;1&lt;/code&gt; adjacent to the MSB of the next byte. The two bytes encode seven pixels, I think they are black, purple, green, white, black, blue, orange.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since it crosses the boundary between two bytes, what determines which colors that pixel in the middle can be? &lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="6659" LastEditDate="2018-04-19T16:05:41.467" LastActivityDate="2018-10-27T15:26:30.763" Title="What determines the color of every 8th pixel on the Apple II?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;graphics&gt;&lt;video&gt;&lt;ntsc&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6272" PostTypeId="1" AcceptedAnswerId="6278" CreationDate="2018-04-17T12:11:11.337" Score="4" ViewCount="203" Body="&lt;p&gt;I tried to put a floppy disk into my IBM model number &quot;8525-001&quot; and it doesn't seem to be processing it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The light below the floppy drive blinks yellow every once in a while (such as when I turn the machine on). I've tried the &lt;code&gt;dir a:&lt;/code&gt; command to test the drive and only got an error message: It said something like &quot;General error reading drive A:&quot; and I could choose to abort, retry, or fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm hopeful that the drive isn't broken and I won't have to buy a new one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be greatly appreciated! &lt;/p&gt;&#xA;" OwnerUserId="8483" LastEditorUserId="202" LastEditDate="2019-07-13T09:25:01.967" LastActivityDate="2019-07-13T09:25:01.967" Title="My floppy drive in my IBM model 8525-001 doesn't seem to be working" Tags="&lt;floppy-disk&gt;&lt;ibm&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6273" PostTypeId="2" ParentId="6271" CreationDate="2018-04-17T14:59:43.847" Score="6" Body="&lt;p&gt;The simplest way to think about composite video on the Apple is to imagine that vertical colored stripes of red, blue, and green, and yellow are overlaid onto the picture.  These strips are half a pixel wide in hi-res mode, and 1/14 pixel wide in lo-res mode.  If memory serves, when the upper bit of a byte is clear, half the pixels will hit the red and blue sections (appearing purplish), and half will hit the green and yellow sections (appearing greenish).  If the upper bit is set, all pixels get shifted to the right half a pixel, so half will hit blue and green, while half will hit yellow and red (appearing orange).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most monitors have a circuit which amplifies the effect of these colors when the pattern repeats, but this is entirely under the control of the monitor, rather than the computer.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-04-17T14:59:43.847" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="6274" PostTypeId="2" ParentId="6271" CreationDate="2018-04-17T15:00:23.297" Score="53" Body="&lt;p&gt;A nice one - and coming up every now or then.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;TL;DR&lt;/h1&gt;&#xA;&lt;p&gt;The Apple IIs video logic produces a B&amp;amp;W bitstream at the right frequency to bedazzle an NTSC TV set in a way to make it 'see' colour. The colours produced are based on the way the bitstream creates interferences that are detected by the TV set as colour information.&lt;/p&gt;&#xA;&lt;p&gt;The encoding is rather a series of 7 bits that can be on or off, producing black when off and white when on. Due to the way colour is created in NTSC, fast switching a signal between black and white, at the right speed, creates an interference detected as colour signal. The effect is based on the pixel clock being exactly twice the NTSC colour carrier.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line, colour is not determinated by pixel groups at fixed positions, but by their sequence in the bitstream as a whole and its timing.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;A More Detailed Look at Apple IIs Highres Graphics.&lt;/h1&gt;&#xA;&lt;p&gt;Let's start wth the most fundamental misunderstanding here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The Highres Colour is NOT Based on Fixed Pixel Groups but a Bitstream&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;(The idea of fixed pixels forming colours will be called pixel theory)&lt;/p&gt;&#xA;&lt;h3&gt;It's All Black and White&lt;/h3&gt;&#xA;&lt;p&gt;Also, &lt;strong&gt;Apple II highres graphics aren't colour and never have been&lt;/strong&gt;. It's just a precisely timed B&amp;amp;W signal that makes the TV set believe there is some colour information, and it tries to go along.&lt;/p&gt;&#xA;&lt;p&gt;The primary data is stored in the lower 7 bits of each display byte. Combining the 40 bytes of each line gives 280 bits, forming a stream of 280 independent pixels. Try to fill the screen with values of &lt;code&gt;$2A77&lt;/code&gt; and it'll produce a series of 140 black and white columns. At least on a VBS (not CVBS) screen (monochrome composite fed CRT).&lt;/p&gt;&#xA;&lt;p&gt;If the 7th (highest) bit of one byte is set, all its 7 displayed bits are delayed by half a pixel time. Again a VBS screen is a good way to prove it. Filling one line (40 bytes) for example with &lt;code&gt;$05&lt;/code&gt; and the next one with &lt;code&gt;$85&lt;/code&gt; and so on will give a set of vertical wavy vertical lines, every other clearly shifted by half a pixel to the right. Try different values, the effect will stay the same as long as the top bit is alternating between lines.&lt;/p&gt;&#xA;&lt;h3&gt;Feeding B&amp;amp;W to a Colour Screen isn't always B&amp;amp;W&lt;/h3&gt;&#xA;&lt;p&gt;The fun part comes when this signal gets fed into an NTSC TV set (after being modulated to some channel) or an &lt;a href=&quot;https://en.wikipedia.org/wiki/Composite_video&quot; rel=&quot;noreferrer&quot;&gt;NTSC CVBS monitor&lt;/a&gt;, which will now show colours as  the sharp rising black to white flanks produce the right signal to make the colour circuit believe there is some colour information.&lt;/p&gt;&#xA;&lt;p&gt;It is still only the flank of a black to white or white to black transition, but rising fast enough at the right moment to triggers the circuit. That's why only &lt;code&gt;01&lt;/code&gt; or &lt;code&gt;10&lt;/code&gt; combinations will produce a colour, while sequences of consecutive &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt; will produce continous black or white. All of this is completely independent of any 'bitcell' or whatsoever and only based on the stream.&lt;/p&gt;&#xA;&lt;h3&gt;What Colour is Black and White?&lt;/h3&gt;&#xA;&lt;p&gt;What colour the circuitry sees (and displays) depends on the timing of the flank in relation to the colour burst signal at the start of each line. Since the pixel clock is exactly twice the NTSC colour carrier, a table can be made for all 4 states within the stream (*1) as they will be seen in the &lt;a href=&quot;https://en.wikipedia.org/wiki/YPbPr&quot; rel=&quot;noreferrer&quot;&gt;YPbPr&lt;/a&gt; space (*3):&lt;/p&gt;&#xA;&lt;p&gt;(Y is luminiscance, Pb/Pr are the colour components)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;`0` to `0` -&amp;gt; Y = 0.0; Pb = 0; Pr = 0&#xA;`0` to `1` -&amp;gt; Y = 0.5; Pb = 1; Pr = 1&#xA;`1` to `0` -&amp;gt; Y = 0.5; Pb = -1; Pr = -1&#xA;`1` to `1` -&amp;gt; Y = 1.0; Pb = 0; Pr = 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;As a result all sequences of zeros are black, all ones are white, only where the content changes is a colour produced. In case of &lt;code&gt;01&lt;/code&gt; it's full blue plus full red creating violet, while &lt;code&gt;10&lt;/code&gt; has no blue and no red, making it green (*2).&lt;/p&gt;&#xA;&lt;p&gt;Now, if we want to have a green line, we need to produce a bit pattern of consecutive &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;1&lt;/code&gt; changes, like &lt;code&gt;01010101010101...&lt;/code&gt;. Since there are only 7 bits used within a byte, this results in two alternating values:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;0.0101010&lt;/code&gt; and &lt;code&gt;0.1010101&lt;/code&gt; or &lt;code&gt;$2A&lt;/code&gt; and &lt;code&gt;$55&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;This gives a beautiful green line, doesn't it? And alternating black&amp;amp;white dots on a VBS screen.&lt;/p&gt;&#xA;&lt;h3&gt;Not all Colours Match&lt;/h3&gt;&#xA;&lt;p&gt;So, even before going into the second colour set (with bit 7 set), heck, even with just one byte, there's a problem when displaying two colours like green and violet next to each other. Let's take a value of &lt;code&gt;0.011001x&lt;/code&gt; (we're ignoring the last bit for simplicity). According to the 'pixel theory' this should result in two violet pixels with a green one in the middle. Right?&lt;/p&gt;&#xA;&lt;p&gt;Well, &lt;strong&gt;no&lt;/strong&gt;. It is a (bit)stream sent to an analogue circuit. This stream consists of five transitions, each changes the decoding done by the colour circuitry of an NTSC TV:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;`01` -&amp;gt; Green&#xA;`11` -&amp;gt; White&#xA;`10` -&amp;gt; Violet&#xA;`00` -&amp;gt; Black&#xA;`01` -&amp;gt; Green&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So what we get are not three but five coloured sections(*4) along the space of six B&amp;amp;W pixels. Usually this is called a &lt;em&gt;'fringe'&lt;/em&gt; or &lt;em&gt;'border'&lt;/em&gt; effect. Something well known from Apple games trying to produce filled graphics. Guess why so many games use kind of 'dithered' graphics?&lt;/p&gt;&#xA;&lt;p&gt;It's important to note, that this effect is not tied to even or odd bytes, but will happen whenever the bit stream consists of any of these combinations.&lt;/p&gt;&#xA;&lt;h3&gt;A Second Set of Colours&lt;/h3&gt;&#xA;&lt;p&gt;Now for the high bit and its second colour set. As we've already seen, setting the high bit shifts the timing of the B&amp;amp;W pixels sent out by half a pixel clock, or fourth of an NTSC colour carrier. Now the change happens not half way through a colour cycle but three quarters, resulting in a different interpretation table:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;`0` to `0` -&amp;gt; Y = 0.0; Pb = 0; Pr = 0&#xA;`0` to `1` -&amp;gt; Y = 0.5; Pb = 1; Pr = -1&#xA;`1` to `0` -&amp;gt; Y = 0.5; Pb = -1; Pr = 1&#xA;`1` to `1` -&amp;gt; Y = 1.0; Pb = 0; Pr = 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;As before, all sequences of zeros are black, all ones are white and only where the level changes, a colour is produced. In case of &lt;code&gt;01&lt;/code&gt; it's now full blue plus no red creating a clear blue, and &lt;code&gt;10&lt;/code&gt; having no blue but full red, making it orange.&lt;/p&gt;&#xA;&lt;p&gt;A line of &lt;code&gt;$2A&lt;/code&gt; and &lt;code&gt;$55&lt;/code&gt; will now be solid orange.&lt;/p&gt;&#xA;&lt;p&gt;Doing the same &lt;code&gt;0.011001x&lt;/code&gt; will produce the same 5 coloured regions as before, just with blue and orange swapped with violet and green.&lt;/p&gt;&#xA;&lt;h3&gt;Flipping the Bit&lt;/h3&gt;&#xA;&lt;p&gt;Having gone so far, it should be obvious what a change of bit 7 between two bytes should do. Nothing unexpected, right? It's the same stream effect as before, just across a byte region.&lt;/p&gt;&#xA;&lt;p&gt;No? Ok, let's just go through it once more, now using the example from the question. We've got two bytes, assuming at the begin of a line (or any even location):&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;0.0001101&lt;/code&gt; and &lt;code&gt;1.1000110&lt;/code&gt; producing a bitstream of &lt;code&gt;0001101.1000110&lt;/code&gt; with a shift of half a pixel clock after the 7th bit. Result:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;`00` -&amp;gt; Black&#xA;`00` -&amp;gt; Black&#xA;`01` -&amp;gt; Green&#xA;`11` -&amp;gt; White&#xA;`10` -&amp;gt; Violet&#xA;`01` -&amp;gt; Green&#xA;`11` -&amp;gt; White (shift happenes)&#xA;`10` -&amp;gt; Orange&#xA;`00` -&amp;gt; Black&#xA;`00` -&amp;gt; Black&#xA;`01` -&amp;gt; Blue&#xA;`11` -&amp;gt; White&#xA;`10` -&amp;gt; Orange&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;As expected, nothing happens, as the &lt;code&gt;11&lt;/code&gt; sequence at the border will still be white. Just the resulting colour section will be a half a clock pixel longer. Similar if there would be two zeros. So what's with a &lt;code&gt;01&lt;/code&gt; or a &lt;code&gt;10&lt;/code&gt;? Simple, it will always be the colour of the byte the 1 bit is in. Why? well, in case of &lt;code&gt;01&lt;/code&gt; the rising flank will be shifted (or not) depending of the high bit of the second byte, and in case of &lt;code&gt;10&lt;/code&gt; its flank is decoded according to the bit of the first byte.&lt;/p&gt;&#xA;&lt;p&gt;Simple, isn't it?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Conclusion:&lt;/h1&gt;&#xA;&lt;p&gt;The Apple IIs highres graphics (and similar lowres) isn't anything like traditional bitmap data, but more of a digital made B&amp;amp;W stream with fast raising flanks, made to fool the analogue colour circuit of an NTSC TV.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Keep in mind, this is &lt;em&gt;not&lt;/em&gt; a two bit pixel cell, but rather one position in a continous decoding - after all, TV is analogue, even when fed from a digital source.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Sounds confusing, but it's rather simple. We have 4 components, the mixture of the three colours and total brightness. Since they are connected we only need to transport three of them, as the fourth can be calculated from the others. So with a certain brightness and two of the colours given (here blue and red) the third can be calculated.&lt;/p&gt;&#xA;&lt;p&gt;*3 - I'm using YPbPr here as this is today the more common, discrete notation. Classic documentation would use a colour circle, an analogue way to describe the same data with a single value..&lt;/p&gt;&#xA;&lt;p&gt;*4 - Calling the colour sections 'pixels' at this stage isn't anymore appropriate, is it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-10-27T15:26:30.763" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="6275" PostTypeId="1" AcceptedAnswerId="6324" CreationDate="2018-04-17T22:50:10.040" Score="4" ViewCount="1634" Body="&lt;p&gt;Why is it ColecoVision AC adapter so big? I never had seen someting like this in any console of the era or even after it. What are the design choices made by the designers? Was it to turn the project cost effective? Back in the 80’s, with the technology then available, can the designers had taken a more standardized aproach? Why no other console design follow this path?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a link of a Youtube video from the AVGN making fun of this AC adapter size: &lt;a href=&quot;https://youtu.be/rBMO8F1I-h4&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/rBMO8F1I-h4&lt;/a&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/YsDgA.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="8047" LastEditorUserId="3290" LastEditDate="2020-08-08T02:25:02.397" LastActivityDate="2020-08-08T02:25:02.397" Title="Why is the ColecoVision AC adapter so big?" Tags="&lt;hardware&gt;&lt;coleco&gt;" AnswerCount="4" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="6276" PostTypeId="2" ParentId="6275" CreationDate="2018-04-18T06:43:46.807" Score="18" Body="&lt;p&gt;As others have noted in the comments, apart from some guy ranting uncivilly about it, for it's era it's hardly special.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The general reason power supplies of the past were so much bigger than today's (apart from the devices they powered also being less power efficient than today's) is that they they are linear not switching designs, thus requiring bigger transformers and more thermal room. &lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2018-04-18T06:53:13.140" LastActivityDate="2018-04-18T06:53:13.140" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6277" PostTypeId="2" ParentId="6275" CreationDate="2018-04-18T08:32:06.923" Score="7" Body="&lt;p&gt;As with most power supplies of the era, up to the early 90s, it is a linear supply. Linear supplies produce a fairly clean output that can be used directly by the computer, but need large transformers and produce a lot of heat. They are somewhat inefficient and generally only suitable for supplying a few tens of watts maximum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Newer power supplies are switch mode. They use a switching regulator that is highly efficient and thus produces much less waste heat. That allows them to use far smaller housings, and also avoids the need for a large transformer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days such power supplies are mostly contained in a single chip, with only a handful of cheap external components. But back in the 80s and late 70s they had to be constructed from discrete parts and were difficult to design due to the lack of suitable switch transistors and test equipment. The technology simply didn't exist.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-04-18T08:32:06.923" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6278" PostTypeId="2" ParentId="6272" CreationDate="2018-04-18T10:17:51.503" Score="5" Body="&lt;p&gt;&lt;code&gt;General failure&lt;/code&gt; is a catchall error. If that's the message you're getting, then its possible the floppy you tried is simply not formatted. You could try formatting the floppy disk (Obviously you'll lose anything that's saved on it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the floppy is shedding oxide, then that disk is a goner. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the heads are dirty you may have luck after cleaning them.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-04-18T10:17:51.503" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6279" PostTypeId="2" ParentId="5312" CreationDate="2018-04-18T12:16:29.323" Score="5" Body="&lt;p&gt;Yes, there is an experimental FID driver written by the same guy (Otivax) that made the DivIDE version. &lt;a href=&quot;https://www.va-de-retro.com/foros/viewtopic.php?f=62&amp;amp;t=5605&quot; rel=&quot;nofollow noreferrer&quot;&gt;This thread&lt;/a&gt; tells all the story about it. He uses a loader that is fired from a +3E environment. The loader loads some CP/M system files in memory, initializes the memory arrangement suitable for CP/M, patches those system files, and finally, it inits CP/M which in turn loads the FID driver, but from the SD card, not the floppy.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="7347" LastEditDate="2021-04-22T18:23:19.567" LastActivityDate="2021-04-22T18:23:19.567" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6280" PostTypeId="2" ParentId="6271" CreationDate="2018-04-18T14:01:50.477" Score="6" Body="&lt;p&gt;The &lt;em&gt;Apple II Reference Manual&lt;/em&gt; (Apple product number A2L0001A), published in 1979 by Apple Computer, Inc. for the Apple II and Apple II Plus computers, contains a few pages about the end-user data format of the high resolution graphics mode:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Each dot on the screen represents one bit from the picture buffer [a dedicated 8K region of memory]. Seven of the eight bits in each byte are displayed on the screen, with the remaining bit used to select the colors of the dots in that byte. Forty bytes are displayed on each line of the screen. The least significant bit (first bit) of the first byte in the line is displayed on the left edge of the screen, followed by the second bit, then the third, etc. The most significant (eighth) bit is not displayed. Then follows the first bit of the next byte, and so on. A totoal of 280 dots are displayed on each of the 192 lines of the screen.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;On a black-and-white monitor or TV set, the dots whose corresponding bits are &quot;on&quot; (or equal to 1) appear white; the dots whose corresponding bits are &quot;off&quot; or (equal to 0) [&lt;em&gt;sic&lt;/em&gt;] appear black. On a color monitor or TV, it is not so simple. If a bit is &quot;off&quot;, its corresponding dot will always be black. If a bit is &quot;on&quot;, however, its color will depend upon the &lt;em&gt;position&lt;/em&gt; of that dot on the screen. If the dot is in the leftmost column on the screen, called &quot;column 0&quot;, or in any even-numbered column, then it will appear violet. If the dot is in the rightmost column (column 279) or any odd-numbered column, then it will appear green. If two dots are placed side-by-side, they will both appear white. If the undisplayed bit of a byte is turned on, then the colors blue and red are substituted for violet and green, respectively. Thus, there are six colors available in the High Resolution Graphics mode, subject to the following limitations:&lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;&lt;p&gt;Dots in even columns must be black, violet, or blue.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Dots in odd columns must be black, green, or red.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Each byte must be either a violet/green byte or a blue/red byte. It is not possible to mix green and blue, green and red, violet and blue, or violet and red in the same byte.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Two colored dots side by side always appear white, even if they are in different bytes.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;On European-modified [PAL Region] Apples, these rules apply but the colors generated in the High-Resolution Graphics Mode may differ. (Apple Computer Inc. 19-20)&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, in summary, each pixel is 1 bit, and any color it has depends on its position, the state of the high bit, and any of its horizontal neighbors. &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6274/8491&quot;&gt;Raffzhan's answer&lt;/a&gt; goes into great depth about how this was implemented by hacking the NTSC (or PAL) color format, which gives us the rules we see here.&lt;/p&gt;&#xA;" OwnerUserId="8491" LastActivityDate="2018-04-18T14:01:50.477" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6281" PostTypeId="1" CreationDate="2018-04-18T14:43:32.150" Score="10" ViewCount="994" Body="&lt;p&gt;I remember reading (at the time when it was current) in a hobbyist magazine about a ZX Spectrum modification to map RAM into ROM (not unusual), and implementing CP/M for it. The author ended the article with the sentence (approximately) &quot;And now you can use CP/M (the cassette tape version) and its rich amount of software, but of course, you will use it up to its full potential if you invest into a floppy drive&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is: was there a (home) CP/M variant using cassette tapes, was it in any way standardized (even if unofficially), and how widespread was it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, I do not remember which computer was provided as an example of &quot;widespread use of existing CP/M floppyless variant&quot;, perhaps Sharp MZ-700?.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2020-08-10T13:14:17.707" Title="CP/M without floppy drive" Tags="&lt;cassette-tape&gt;&lt;cp-m&gt;" AnswerCount="8" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6282" PostTypeId="1" AcceptedAnswerId="6283" CreationDate="2018-04-18T17:41:29.293" Score="9" ViewCount="2251" Body="&lt;p&gt;Did Microsoft BASIC (or any of the OEM versions) ever use Z80 only instructions? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the purposes of this question I'm ignoring the equivalent of BIOS I/O layers which OEMs would have provided.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="7208" LastEditDate="2019-07-26T05:15:21.630" LastActivityDate="2019-07-26T05:15:21.630" Title="Did Microsoft BASIC ever use Z80 only instructions?" Tags="&lt;z80&gt;&lt;basic&gt;&lt;microsoft-basic&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6283" PostTypeId="2" ParentId="6282" CreationDate="2018-04-18T18:04:37.730" Score="16" Body="&lt;p&gt;If you mean if Microsoft BASIC's core ever used Z80 instructions at all, then I would say no - the code of BASIC is designed using 8080 compatible instructions, and all &quot;drivers&quot; are created as appropriate for the platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may happens that some vendors have modified the code to Z80 in order to &quot;compress&quot; it and free some space for special functions, but it must be considered case by case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples: looking to the MSX BASIC, which is designed for Z80 only, with BASIC core in 8080, and extension and BIOS using IX/IY, 0cbh instructions and alternate register set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; following George's answer I decided to take closer look into the MSX BASIC code (starting 4000 and ending approx 7400), and confirm his words:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IX is used 4 times, but it is clearly a patch to access BIOS;&lt;/li&gt;&#xA;&lt;li&gt;JR instructions are used a lot. I think they all also can be easily patched where possible (jumps -128 to +127) in order to save space;&lt;/li&gt;&#xA;&lt;li&gt;LD BC,(nn) and LD (nn),BC are not used at all;&lt;/li&gt;&#xA;&lt;li&gt;LD DE,(nn) is used 17 times, LD (nn),DE is used 15 times, quite a lot;&lt;/li&gt;&#xA;&lt;li&gt;LD SP,(nn) is not used at all, while LD (nn),SP is used twice;&lt;/li&gt;&#xA;&lt;li&gt;EXX is used 3 times;&lt;/li&gt;&#xA;&lt;li&gt;ADC HL,ss is not used, while SBC HL,ss is used 3 times;&lt;/li&gt;&#xA;&lt;li&gt;NEG is not used;&lt;/li&gt;&#xA;&lt;li&gt;RLD/RRD/RLC/RL/RRC are not used;&lt;/li&gt;&#xA;&lt;li&gt;CPI(R)/CPD(R) are not used;&lt;/li&gt;&#xA;&lt;li&gt;IN r,(c)/OUT r,(c) and outi/outd type instructions are not used (first two are used twice, but it is for sure a platform modification;&lt;/li&gt;&#xA;&lt;li&gt;LDI(R)/LDD(R) used only once;&lt;/li&gt;&#xA;&lt;li&gt;SET/RES/BIT n,r are used two times closer to the end of ROM, must be patch;&lt;/li&gt;&#xA;&lt;li&gt;SLA/SRA/SRL not used.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;One suspicious instruction more or less massively used is related to loading/storing DE into memory location, closer look into the code revealed the following cases:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DE is used in math with HL;&lt;/li&gt;&#xA;&lt;li&gt;DE is used to get error number/line number for error handling;&lt;/li&gt;&#xA;&lt;li&gt;or just as read/store word between two locations.&lt;/li&gt;&#xA;&lt;li&gt;some other local usage, including RST20 and RST28 where it can be easily compressed from EX DE,HL and LD (nn),HL.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Thus I would consider all this stuff to be special changes for the platform which is expected to have Z80 only.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastEditorUserId="8258" LastEditDate="2018-04-19T12:00:07.600" LastActivityDate="2018-04-19T12:00:07.600" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6284" PostTypeId="2" ParentId="6282" CreationDate="2018-04-18T18:31:07.940" Score="13" Body="&lt;p&gt;Yes, Z-80 instructions were used in Microsoft's Z-80 BASIC.  For example, look at the TRS-80 Model I or Model III ROM BASIC and you'll find a relative jump &lt;code&gt;JR NZ,0x871&lt;/code&gt; at location &lt;code&gt;0x88E&lt;/code&gt;.  The 8080 does not have relative jump instructions.  That instruction is part of a routine to shift &lt;code&gt;CDEB&lt;/code&gt; right by &lt;code&gt;L&lt;/code&gt; bits which is used by the floating point code.  Do a &lt;code&gt;PRINT SQR(1)&lt;/code&gt; and you'll see the instruction is hit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it is fair to say that no significant changes were made to the BASIC core when ported from 8080 to Z-80.  I don't recall any other Z-80 feature besides relative jumps being used in the core routines.  I speculate that they did a quick and perhaps automated pass over the code to take advantage of the byte savings from using &lt;code&gt;JR&lt;/code&gt; instead of &lt;code&gt;JP&lt;/code&gt; and then moved on to machine-specific code which does use Z-80 routines quite significantly.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2018-04-18T18:31:07.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6285" PostTypeId="2" ParentId="6281" CreationDate="2018-04-18T18:31:09.457" Score="5" Body="&lt;p&gt;I have been using CP/M for quite some years in the 1980s, and I never heard about a floppy-less implementation. CP/M relied heavily on the random access provided by floppy or hard disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simulating that on a tape drive would be a nightmare, so it's hard to imagine how someone would have done this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And running CP/M without its file system doesn't make sense, as then none of the popular applications would have been usable.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2018-04-18T18:31:09.457" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6286" PostTypeId="2" ParentId="6281" CreationDate="2018-04-18T19:30:11.207" Score="7" Body="&lt;p&gt;There were quite some diskless computers that could run CP/M from ROM (notable examples the Epson PX-8 and similar), but those computers booted CP/M from ROM instead of tape (even if the PX-8  had a microcassette drive. But that could only be used to store data). With regards to mass storage, the PX-8 would fit your definition - It doesn't have floppies or hard drives, storage is ROM and RAM (a floppy drive could be had as an option, though). Interestingly, both the optional external RAM disk and the floppy drives used their own CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M does have inbuilt support for tape drives (the AUX: and RDR: device, originally intended to be used for punch card readers could be misused for tapes), but these are expected to talk to a serial device. To my knowledge, there was no support to boot CP/M from tape. But after all, CP/M is nothing else but a binary - So with suitable support from a host OS, no problem: A Sinclair Spectrum could load it from tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PX-8 is interesting with respect to its cassette drive: It's CP/M implementation allocates to a drive H: able to hold max. 11 files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tape devices that were à la mode during the CP/M high tide were much more complicated devices than what you could expect from a standard home computer, and not comparable with these, not in capacity and not in transfer speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, no, I don't know any home computer that would operate CP/M with no disks and run from tape only.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-04-19T06:29:06.693" LastActivityDate="2018-04-19T06:29:06.693" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6287" PostTypeId="2" ParentId="6240" CreationDate="2018-04-18T20:19:37.037" Score="8" Body="&lt;h1&gt;It has been made already (as an emulator)&lt;/h1&gt;&#xA;&lt;p&gt;Thanks to &lt;a href=&quot;https://www.fourmilab.ch/babbage/&quot; rel=&quot;noreferrer&quot;&gt;https://www.fourmilab.ch/babbage/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following is a quote describing their emulator.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Since we're fortunate enough to live in a world where Babbage's dream&#xA;has been belatedly realized, albeit in silicon rather than brass, we&#xA;can not only read about The Analytical Engine but experience it for&#xA;ourselves. These pages include an emulator for The Analytical Engine&#xA;and a variety of programs for it. You can run the emulator within a&#xA;Web page or as a command-line application on your own computer&#xA;(assuming it is equipped with a Java runtime environment). These pages&#xA;are a museum, and its lobby is the Table of Contents, to which all&#xA;other documents are linked. Rather than forcing you to follow a linear&#xA;path through the various resources here, you can explore in any order&#xA;you wish, returning to the Table of Contents to select the next&#xA;document that strikes you as interesting. Every page has a link to the&#xA;Table of Contents at the bottom, so it's easy to get back when you've&#xA;finished reading a document or decided to put it aside and explore&#xA;elsewhere.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.fourmilab.ch/babbage/contents.html&quot; rel=&quot;noreferrer&quot;&gt;Here you can find the table of contents.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.fourmilab.ch/babbage/aem/&quot; rel=&quot;noreferrer&quot;&gt;Here you can run the actual emulator.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;I'm not knowledgeable enough to say how accurate this emulator is but I'd appreciate if someone from our fine community would comment below and explain how accurate this emulator is and I'll reflect that in my answer.&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;So go try it out! Enjoy computing in the 1800s! :)&lt;/p&gt;&#xA;" OwnerUserId="6990" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-04-18T20:19:37.037" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6288" PostTypeId="2" ParentId="6281" CreationDate="2018-04-18T21:04:01.123" Score="5" Body="&lt;p&gt;Couldn't you load CP/M from paper tape, at least in the really early days?  Maybe I misremember.&lt;/p&gt;&#xA;&lt;p&gt;I have used a few CP/M systems with OS in &lt;a href=&quot;https://en.wikipedia.org/wiki/Bubble_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;bubble memory&lt;/a&gt;.  One I recall specifically was an i8085 Multibus-1 system that used the Intel iSBX-251 bubble memory daughtercards.  For all practical purposes, the bubble memory (128Kb) emulated a floppy.&lt;/p&gt;&#xA;&lt;p&gt;There were also many ROM-based CP/M machines.  Epson made some, HP I think, and I've got an MSX ROM module around here with CP/M on it.  Lot's of homebrew folks put CP/M on PROM/Flash as well.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastEditorUserId="3290" LastEditDate="2020-08-08T02:36:37.403" LastActivityDate="2020-08-08T02:36:37.403" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6290" PostTypeId="1" CreationDate="2018-04-19T16:25:05.193" Score="4" ViewCount="658" Body="&lt;p&gt;I accidentally deleted my previous version of DOS on my IBM model 8525. I was messing around with it, not knowing much of DOS, and now I'm back to using &amp;quot;IBM BASIC&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Would I be able to install DOS 6.22 straight from BASIC, or do I need an even earlier version of BASIC to install DOS version 6.22? I do not have any other DOS version except 6.22.&lt;/p&gt;&#xA;" OwnerUserId="8483" LastEditorUserId="15334" LastEditDate="2021-05-22T07:07:30.137" LastActivityDate="2021-05-22T07:07:30.137" Title="Can I install DOS version 6.22 straight from IBM BASIC?" Tags="&lt;ms-dos&gt;&lt;ibm&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6291" PostTypeId="2" ParentId="6290" CreationDate="2018-04-19T16:35:56.803" Score="6" Body="&lt;p&gt;Well, a PS/2 Model 25 got only a floppy drive, so if you deleted the DOS on your only system disk, you might be out of luck. If there is a hard disk, where the DOS files got deleted, then boot from a Floppy with DOS. This now gives two options (assuming the HD got detected and is accessible):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use the Undelete utility to recover the files or&lt;/li&gt;&#xA;&lt;li&gt;Copy the missing files from the FD onto the HD.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It all of course, depends on what got deleted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way would be running the install disks. They should detect if the HD is already formatted before making any further damage and thus asks something like &lt;em&gt;&quot;Continue to replace existing DOS&quot;&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either way, you need a DOS system floppy to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any yes, of course one could do it from BASIC, but that's a rather masterly task - not recommended for people that need to ask about :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-04-19T18:13:11.463" LastActivityDate="2018-04-19T18:13:11.463" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6292" PostTypeId="1" AcceptedAnswerId="6293" CreationDate="2018-04-19T17:31:40.373" Score="16" ViewCount="1322" Body="&lt;p&gt;The Atari 2600 used a cut-down version of the 6502 called the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6507&quot; rel=&quot;noreferrer&quot;&gt;6507&lt;/a&gt;. The 6507 was cost reduced by not supporting interrupts and (more importantly) having fewer address lines resulting in that it only supported 8KB. While this had its limitations, it worked just like a regular 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Somewhat famously, the Atari 2600 had a ridiculously small amount of RAM: 128 bytes. This was provided by the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6532&quot; rel=&quot;noreferrer&quot;&gt;6532 RIOT chip&lt;/a&gt; and was sufficient for the primitive games that the VCS was originally designed for (basically a programmable Pong/Tank machine). Most of the address space for the 6507 would ultimately be provided by ROM cartridges which would be plugged into the Atari.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question I have is that the 6502 treats two pages of RAM in a special way:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;0x0000-0x00FF:&lt;/strong&gt; The zero page. Every RAM addressing command supported a zero page mode which not only saved an operand byte (since it only needed 8 bits of a 16-bit address) but also saved a processor cycle or two because of the simpler address decoding.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;0x0100-0x01FF:&lt;/strong&gt; The stack. Any push/pop/subroutine operations would leverage this space and the pointer was managed by one of the 6502's registers.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(I presume that these locations are hard-coded into the workings of the 6502)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm curious how the Atari 2600 mapped RAM considering these two special memory pages. You need a stack and I believe that would start at &lt;code&gt;0x01FF&lt;/code&gt; and work downwards with every push, but then you wouldn't get the benefit of the zero page. If you mapped into the zero page, the stack operations probably wouldn't work because I'd guess an address line would be tripped up. If you overlapped at the top of the ZP into the bottom of the stack page (e.g. &lt;code&gt;0x0080-0x017F&lt;/code&gt;), you'd have the problem of the stack register needing to be defaulted to &lt;code&gt;7F&lt;/code&gt; instead of &lt;code&gt;FF&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose you could give up zero page and run everything out of the top half of the stack page and just try to limit your stack usage to maximize available RAM which would start at &lt;code&gt;0x0180&lt;/code&gt;. Or was there something fancier going on in the hardware?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how did this work?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2018-07-09T11:31:01.480" Title="How did the Atari 2600's 6507 handle zero page and stack with only 128 bytes of RAM?" Tags="&lt;atari-2600&gt;&lt;mos-650x&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6293" PostTypeId="2" ParentId="6292" CreationDate="2018-04-19T17:42:47.033" Score="14" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I presume that these locations [Zero Page and Stack] are hard-coded into the workings of the 6502&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yup, they are.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So how did this work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simply by partial address decode. Address bit A8 was not decoded when RAM was accessed and A7 was used as chip select. This mirrored the 128 (&lt;code&gt;$80&lt;/code&gt;) bytes two times over ZP and Stack (at  &lt;code&gt;$0080&lt;/code&gt; and &lt;code&gt;$0180&lt;/code&gt;) (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So all 128 bytes could be used both as Stack and ZP at the same time. Of course, SP does crawl down and could overwrite other data - but in real life game application stack is only used in small and quite controlled portions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, this addressing scheme did allow several neat tricks. For example a background routine prepares screen data to be displayed in ZP. While ZP-addressing is already fast, it would still limit what can be displayed during a line. A loop using &lt;code&gt;zp,X&lt;/code&gt; addressing would need 6 clocks per byte (4 at &lt;code&gt;LDA&lt;/code&gt; plus 2 to increment X), but by setting SP at the bottom of the display data and popping the data the same process gets reduced to just 4 clocks (*2)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 6507 was cost reduced by not supporting interrupts [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I can't help, but this calls for some nitpicking, as it's not entirely true. There's still reset. Sure, a bit hard to handle, but still possible. The &lt;a href=&quot;http://www.sunrise-ev.com/6502.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;VCF badge&lt;/a&gt; is a great example showing how to use reset as interrupt to read a serial input signal :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, due the fact that the whole decoding for RAM just goes by A7=1 and A12=0, the RAM is mirrored at $80..$FF in every page of the first 4 KiB. Much like the TIA is occupying the other half of each page - here mirrored several times in every half page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Of course, unrolling the loop would reduce it to 3 clocks per byte (fixed address &lt;code&gt;LDA zp&lt;/code&gt;), but also double the code length. So there's always a trade-off.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-07-09T11:31:01.480" LastActivityDate="2018-07-09T11:31:01.480" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="6294" PostTypeId="2" ParentId="2811" CreationDate="2018-04-19T18:09:55.687" Score="2" Body="&lt;p&gt;I'm pretty sure the main reason for the slots was to keep the cards vertical, for cooling purposes. Airflow went straight up the slots and out the top.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In theory, they could have implemented this with two PCBs, and stacked them. This would trap significant heat trapped between the two. Recall that they had to take the packaging off the cards even in the 800 because of heat problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They could have put everything on the verticals, but you'd still need a backplane anyway, so you may as well use it for something other than just power.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-04-19T18:09:55.687" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6295" PostTypeId="1" AcceptedAnswerId="6296" CreationDate="2018-04-19T20:05:45.377" Score="6" ViewCount="800" Body="&lt;p&gt;The 80286 was released in early 1982. The IBM PC AT, which used it, was released in late 1984.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two and a half years is a long time to design a new computer that is a fairly modest upgrade on existing technology, and a long time for new technology as commercially important as the 286 to go unused. I'm conjecturing that IBM felt they could take it easy because their PC already had technical superiority over the competition, but according to InfoWorld, in August 1982 there were already an estimated 60-70 companies with or working on PC clones; surely at least some of them must have felt the pressure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there any computer, particularly but not limited to any PC clone, based on the 286 before the AT?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2018-04-19T22:12:22.660" LastActivityDate="2019-10-28T07:20:20.503" Title="First 80286 Based Computer" Tags="&lt;ibm-pc&gt;&lt;80286&gt;" AnswerCount="1" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="6296" PostTypeId="2" ParentId="6295" CreationDate="2018-04-19T20:42:58.840" Score="10" Body="&lt;p&gt;Well, one of the first will be for sure &lt;a href=&quot;http://www.computerhistory.org/collections/catalog/102652384_[1]&quot; rel=&quot;noreferrer&quot;&gt;Intels System 310/286&lt;/a&gt;. According to the CHM this would be 1981, but I think it was rather 1982/83 - that would also fit the &lt;a href=&quot;https://archive.org/stream/bitsavers_intelsysteGdeOct83_1335604/173441-001_310pubGde_Oct83#page/n0/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;original flyer&lt;/a&gt;. It's a Multibus system using the iSBC 286/10 single board computer running Xenix. The board was also used by several other manufacturers for early 286 based Unix sytems and real time applications - way until the 1990s - Intel even added a revised &lt;a href=&quot;http://www.bitsavers.org/pdf/intel/iSBC/147532-001_iSBC_286_10A_Hardware_Reference_Manual_Oct84.pdf&quot; rel=&quot;noreferrer&quot;&gt;iSBC 286/10A&lt;/a&gt; in 1985 to satisfy demand. &lt;a href=&quot;http://www.retrotechnology.com/herbs_stuff/386intel/i310_beech.html&quot; rel=&quot;noreferrer&quot;&gt;Here a nice report&lt;/a&gt; about someone reviving a 310. When searching the net for more information, be aware that the system 310 was also/originaly available with a 8086 board.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-04-21T09:34:44.190" LastActivityDate="2018-04-21T09:34:44.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6297" PostTypeId="1" AcceptedAnswerId="6307" CreationDate="2018-04-19T22:00:25.963" Score="6" ViewCount="609" Body="&lt;p&gt;On the mainframe OSes I was familiar with, and on UNIX to that day, when there is a prompt for a password in &quot;text mode&quot; (a command line session), the echo is suppressed, and there is no visual feedback for the entered characters at all. This makes it hard for an onlooker to figure out the number of characters in a password.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first OS that I remember seeing a visual feedback (asterisks) when entering passwords, was MS-DOS. While it is more convenient for the user who types the password, it is arguably less secure.  Nowadays the password fields in GUIs have visual feedback (bullets) by default, in applications (browsers) as well as in the system programs (graphical login screens); I'm not even sure if that's configurable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the rationale for deciding to provide a visual feedback for password entry, and what OS was the first to feature this mode in a system program?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2018-05-30T05:06:53.237" Title="What system pioneered displaying masking characters for password entry and why?" Tags="&lt;history&gt;&lt;terminal&gt;&lt;operating-system&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6298" PostTypeId="1" AcceptedAnswerId="6299" CreationDate="2018-04-20T05:54:48.037" Score="23" ViewCount="2988" Body="&lt;p&gt;Is &lt;code&gt;fork()&lt;/code&gt; older than C? What are its origins? I might think that &lt;code&gt;fork()&lt;/code&gt; was created along with C (1970s) but I recently read a reference to a 1963 paper where &lt;code&gt;fork()&lt;/code&gt; was mentioned. &lt;/p&gt;&#xA;" OwnerUserId="297" LastEditorUserId="79" LastEditDate="2018-04-20T09:13:01.827" LastActivityDate="2018-04-27T08:27:53.780" Title="The origins of fork()" Tags="&lt;operating-system&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6299" PostTypeId="2" ParentId="6298" CreationDate="2018-04-20T07:14:08.887" Score="29" Body="&lt;p&gt;The &lt;code&gt;fork()&lt;/code&gt; system call is definitely older than the C language because it already existed in the &lt;a href=&quot;http://doc.cat-v.org/unix/v0/UnixEditionZero.pdf&quot; rel=&quot;noreferrer&quot;&gt;UNIX v0&lt;/a&gt; draft, page 18 of the PDF, when the C language hasn't been conceived yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mechanism was different from what we're used to:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Except while UNIX is bootstrapping itself into operation, a new&#xA;  process can come into existence in only one way: by use of the&#xA;  &lt;code&gt;fork&lt;/code&gt; system call.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;processid = fork(label)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;When fork is executed by a process, it splits into two independently&#xA;  executing processes. The two processes have core images&#xA;  which are copies of each other, but they are not precisely&#xA;  equivalent: one of them is considered the parent process. In the&#xA;  parent, control does not return directly from the &lt;code&gt;fork&lt;/code&gt;, but instead passes to location &lt;code&gt;label&lt;/code&gt;; in the child process, there is a&#xA;  normal return. The &lt;code&gt;processid&lt;/code&gt; returned by the &lt;code&gt;fork&lt;/code&gt; call is the identification of the other, offspring process. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="6794" LastEditDate="2018-04-27T08:27:53.780" LastActivityDate="2018-04-27T08:27:53.780" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6300" PostTypeId="2" ParentId="6298" CreationDate="2018-04-20T07:43:17.983" Score="23" Body="&lt;p&gt;An article on the history of fork appeared in the &lt;a href=&quot;https://www.computer.org/csdl/mags/an/2016/03/man2016030084.html&quot; rel=&quot;noreferrer&quot;&gt;IEEE Annals of the History of Computing 2016 vol. 38&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This article states that fork was invented by Melvin Conway in 1962 when considering the allocation of tasks to processors in multi-processor systems.&lt;/p&gt;&#xA;" OwnerDisplayName="user7763" LastActivityDate="2018-04-20T07:43:17.983" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6301" PostTypeId="1" CreationDate="2018-04-20T09:21:23.660" Score="8" ViewCount="465" Body="&lt;p&gt;In the late 60s, the &lt;a href=&quot;http://gunkies.org/wiki/Incompatible_Timesharing_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;Incompatible Timesharing System&lt;/a&gt; ran on a &lt;a href=&quot;http://gunkies.org/wiki/PDP-6&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-6&lt;/a&gt; without any paging hardware (i.e. an MMU in modern terminology). See the &lt;a href=&quot;http://catb.org/jargon/html/B/BLT.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jargon entry for BLT&lt;/a&gt;, for example, which states (my emphasis):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;... one resource-intensive memory-shuffling operation done on &lt;em&gt;&lt;strong&gt;pre-paged&lt;/strong&gt;&lt;/em&gt; versions of ITS, WAITS, and TOPS-10 was sardonically referred to as &amp;quot;The Big BLT&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It was later moved onto a &lt;a href=&quot;http://gunkies.org/wiki/KA10&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-10&lt;/a&gt; and, &lt;a href=&quot;https://github.com/larsbrinkhoff/its-archives/raw/master/ailab/ITS_Hardware_Memo_2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;sometime around 1970&lt;/a&gt;, a paging system was installed and ITS was modified to use virtual memory.&lt;/p&gt;&#xA;&lt;p&gt;The MIT Dynamic Modeling group adopted ITS for their PDP-6 and PDP-10 (named MIT-DMS). Initially, there was no disk to provide swapping store, so they ran a non-paged ITS until around 1973.&lt;/p&gt;&#xA;&lt;p&gt;There is a copy of ITS for the AI lab PDP-10 from 1971, but there is no trace of support for running on a PDP-6 or any possibility of running without virtual memory.&lt;/p&gt;&#xA;&lt;p&gt;I believe the majority of software development in the non-paging era was done using DECtape so, if an pre-historic ITS was to be found, it would probably be on such a tape. Another possibility is paper tape, since this was often used to load software for booting.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know where this (a non-paging ITS) could be found?&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditorDisplayName="user6464" LastEditDate="2020-08-28T09:05:51.533" LastActivityDate="2020-08-28T09:15:48.947" Title="Is there a non-paging ITS for the PDP-6 or PDP-10?" Tags="&lt;history&gt;&lt;software&gt;&lt;dec&gt;&lt;pdp-10&gt;&lt;pdp-6&gt;" AnswerCount="3" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6302" PostTypeId="1" CreationDate="2018-04-20T11:22:17.650" Score="7" ViewCount="986" Body="&lt;p&gt;I have run into a condensed-matter-physics &lt;a href=&quot;https://www.tandfonline.com/doi/abs/10.1080/15421407308083384&quot; rel=&quot;noreferrer&quot;&gt;research paper published in 1973&lt;/a&gt;, from the Physics Department of Rutgers University, NJ, USA. The paper provides some numerical computations of condensed-matter physics, and I would like to had a &lt;strong&gt;rough&lt;/strong&gt; estimate of what was the computer power used to produce these results at that time, converted in number of Mhz for a single CPU of a today's computer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do know that the answer may depend on a variety of unknown factors, but I was wondering whether you could just give me your best guess. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks. &lt;/p&gt;&#xA;" OwnerUserId="8501" LastEditorUserId="6659" LastEditDate="2018-04-20T17:31:19.627" LastActivityDate="2019-01-03T16:05:53.310" Title="Power of university computer in the '70s?" Tags="&lt;history&gt;" AnswerCount="5" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6303" PostTypeId="2" ParentId="6302" CreationDate="2018-04-20T11:50:32.593" Score="10" Body="&lt;p&gt;As there is a large variation in computers, the operations they can perform and how they do it, a simple answer can only be done with more detailed information what you're looking for. Keep in mind, back then it wasn't all x86. Computers where much more 'colourful'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a guideline the 1969 introduced CDC 7600 could be useful. It had a maximum floating point thruput of ~36 MFLOPS (Million Floating Point Operations Per Second). In comparison, thats about the same as 1000 Intel 8087 of 1980 - or similar to a Pentium MMX' FPU of 1994 (P54C).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before that the crown did go to the CDC 6600 with 3 MFLOPS peak - like 100 8087 or a 100 MHz 80486-DX4 of 1994 (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 1972 ILLIAC-IV peaked at 50 MFLOP, and a 1974 STAR-100 at 100 MFLOP (Similar TI's ASC). Thats in the Pentium II 200-300 range of 1997. Finally in 1975 the Cray-1 offered up to 160 MFLOPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So these machines are the upper end of what was available in the time frame mentioned.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - So super computer wise switching in 1970 from a CDC 6600 to a 7600 was like choosing in 1994 between a top end 486 and a medium range Pentium MMX :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-12-31T23:46:03.967" LastActivityDate="2018-12-31T23:46:03.967" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6304" PostTypeId="2" ParentId="5274" CreationDate="2018-04-20T12:06:32.807" Score="1" Body="&lt;p&gt;Look for DefIcon on Aminet. It places an entry in the tools menu. You select the &quot;fake icon&quot; in Workbench and choose &quot;Tools-&gt;default icon&quot;. It will then create an .info file.&lt;/p&gt;&#xA;" OwnerUserId="8503" LastEditorUserId="8503" LastEditDate="2018-04-20T12:20:10.627" LastActivityDate="2018-04-20T12:20:10.627" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6305" PostTypeId="2" ParentId="1212" CreationDate="2018-04-20T14:41:17.787" Score="3" Body="&lt;p&gt;The actual CPU bus (which would be called the &quot;frontside bus&quot; on 686-era designs) on the 8086, 80386, 68000 and similar CPUs IS more or less a memory bus. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typical peripheral chips (UARTs, floppy controllers, CRTCs) and the (in case of a PC compatible machine) ISA cards using them have a very similar electrical interface to a bunch of memory chips, and are talked to in roughly the same way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same applies to the BIOS/BASIC ROMs - they are memory, and they are on the CPU bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some glue logic parts (bus buffers like the 74xx245, latches like the 74xx374, address decoders like the 74xx138) will be required to use that bus, but not a dedicated memory controller chip. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that era, there was another kind of device sometimes called a &quot;memory controller&quot;, which was actually a so called MMU (memory management unit). These provided virtual/swappable/remappable memory capability (IF your system design wanted it. The 5150 doesn't have one.) and WERE complex, additional chips, but they were integrated into CPUs relatively early (the 286 has one built-in, the 68000 and 8086/8088 do not).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also off-board DMA controllers, which are in effect another part that &quot;controls memory&quot;. These were, for a long time, dedicated chips or integrated into the chipset.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-04-20T14:41:17.787" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6306" PostTypeId="2" ParentId="1212" CreationDate="2018-04-20T23:41:35.823" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Wikipedia page for memory controller states that memory controllers are either part of the northbridge, or in more recent cases, integrated into the processor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A 'Northbridge' is a specific PC term for one or more integrated support chips to handle all address based access(*1). They are not something neccersarry per se for any CPU, not even a x86 in a PC.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But AFAIK, neither IBM 5150 nor Altair 8088 had a northbridge. So, how did these computers access memory?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A CPU does not need a memory controller. It just puts out a memory access and waits for data to return (or being taken). CPUs produce all signals to access memory (*2). The issue is just the other way around: Certain memory needs a additional circuitry to be accessable to a CPU. DRAM for example is the most prominent player here, as it (may) need several additional functionality, usually not supplied by a CPU.&lt;/p&gt;&#xA;&lt;p&gt;Functions needed (may) be:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Dynamic RAM does (*3) need multiplexed addressing. The non multiplexed address supplied by a CPU must be send thru a multiplexer before the RAM can decode it.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Dynamic RAM also (*3) needs refresh. Without they will loose their content quite fast. Some refresh circuit is needed to nurture the data. Usually thats some counter and a bunch of latches, as well as some ready/wait logic to keept the CPU from interfering.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Dynamic RAM offers (*3) an access feature called &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5964/6659&quot;&gt;Page Mode&lt;/a&gt; that can speed up access time quite a lot when accessing data within a certain region (page). To make it work some page register and glue logic is used.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Dynamic RAM with page mode can be aranged in groups with having different pages opened in each goup - nowadays called ranks. Ofc this needs additional page registers and glue logic.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Todays dynamic RAMs even offer protocols to open several pages within a single RAM (rank), which again needs external hardware to handle it.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;RAM content can be protected by using some parity scheme. To make it work a parity generator, compare logic and logic to issue a memory fault interrupt is needed.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All of these RAM features do need additional circuitry to offer/support these features/neccesarries. A CPU does not need to know about this at all, as it just puts out a memory request and waits for data.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;So why isn't it integrated within the RAM chips?&lt;/h2&gt;&#xA;&lt;p&gt;Cost. It's all about volume and money. A bare RAM design can be used in many more systems than specialized ones. Also using the advanced features is always dependant on CPU specific issues. RAM manufacturers didn't want to build Motorola or Intel specific chips but targetet the market at whole.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Again, how was it done on the PC?&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Where was the memory controller for these machines?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The original PC didn't use any of the advanced features mentioned above. Just address multiplexing and RAM refresh had to be done. The multiplexing was handled by a set of &lt;a href=&quot;http://www.ti.com/lit/ds/symlink/sn74ls157.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;74LS158&lt;/a&gt; multiplexers, while RAM refresh was done by a cyclic inserted DMA request using DMA chanel 4 of the &lt;a href=&quot;https://de.wikipedia.org/wiki/Intel_8237&quot; rel=&quot;nofollow noreferrer&quot;&gt;8237 DMA controller&lt;/a&gt;, triggered by Timer 1 of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8253&quot; rel=&quot;nofollow noreferrer&quot;&gt;8253 Programmable Interval Timer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So these components formed what you might call a memory controller. Over the years the seperate IC got integrated into more complex system components - starting with &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6126/unused-ram-chips-on-x86-machines/6127#6127&quot;&gt;Chips and Technologies NEAT chipset&lt;/a&gt; - leading to finally integrating them the into todays CPUs. On the way there more and more of the additional features got integrated.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;So no Memory Controllers Before the NEAT chipset?&lt;/h2&gt;&#xA;&lt;p&gt;No. There were controllers. Already way before the PC. Integrating the required seperate IC into more complex one to simplifying DRAM usage was done early on. For the 8088 IBM could have used Intels fiting 8208 DRAM controller instead, handling everything about DRAM, but they did go for a cheaper solution.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Address Based Access - huh? Well, I had to find a way to describe access of data via a combination of address lines, daa lines and controll ines - something (next to) every CPU features. It's not just memory, as this also includes I/O addressig and alike.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Like the 8088 features (in Minimal Mode) with 20 address lines, 8 data lines, ALE, RD, WR and IO/M every thing that is needed to connect memory or other memory/IO-mapped devices. A colplete system can be done with as little as 4 chips - 8088, 8284, 8755 and 8155 (or 8185).&lt;/p&gt;&#xA;&lt;p&gt;*3 - Here a bunch of adjectives like 'usually', 'originally' or 'mostly' may be inserted, as there are always special RAM versions available where such functions are already build in - ofc, these more complex/special purpose chips are more expensive and usually not found in PCs.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-04-20T23:41:35.823" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6307" PostTypeId="2" ParentId="6297" CreationDate="2018-04-21T09:34:36.810" Score="2" Body="&lt;p&gt;The question as phrased probably can't be answered, but a few related data points:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As mentioned in the comments, passwords on all IBM 3270-style terminals are usually entered in fields with an &quot;invisible&quot; attribute. In practice, that means you can see the cursor moving, and as the password field is usually below some other field, e.g. the username, it's also pretty easy to count characters. I would count this definitely under &quot;visual feedback&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/cdc/cyber/nos/60455250C_Interactive_Facility_Version_1_Reference_Aug79.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;NOS Interactive Facility&lt;/a&gt; would present a &quot;character salad&quot; on the teletype, which you'd then overtype with your password (see page 2-6). Which, like above, means you'd see the printing head move, so you could count characters, but you couldn't read the character you typed. I'd consider this as the same kind of &quot;visual feedback&quot;. This may or may not be the system mentioned in the comments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The manual is from 1979, but I would assume this feature was present in earlier versions as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, the &lt;a href=&quot;https://en.wikipedia.org/wiki/PLATO_%28computer_system%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Plato System&lt;/a&gt;, which ran on NOS, and had a special video terminal, displayed one or two &lt;code&gt;X&lt;/code&gt; for each character that you entered as a password. So this is a variant: visual feedback, but it doesn't allow an onlooker to count the characters in the password, but it also makes it harder for the user to verify if the password he types is correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, typing passwords only makes sense on multiuser timesharing systems, so the first such system (whatever it is) would provide a lower bound. Given that many teletypes had local echo, printing asterisks instead of chars (and removing them on backspace) makes more sense for videoterminals, so if you are applying stricter criteria, that's another bound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rationale for providing &lt;em&gt;any&lt;/em&gt; kind of feedback for password entry should be pretty obvious: It makes mistakes less likely. So the design space is somewhere between &quot;not implemented because there's always local echo, we must use some other way&quot; over &quot;let's provide an &lt;em&gt;invisible&lt;/em&gt; attribute in our video terminal&quot; to &quot;all echoing is done by the host anyway, and we've plenty of memory, so why not make it more comfortable for the user?&quot;&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2018-05-30T05:06:53.237" LastActivityDate="2018-05-30T05:06:53.237" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6308" PostTypeId="2" ParentId="6302" CreationDate="2018-04-21T09:45:37.223" Score="5" Body="&lt;p&gt;In that time frame, I was working with a Univac 1108. In 1968 you could pick up a 1.3 MHz CPU with half a megabyte of RAM and 100 megabyte hard drive for a mere US$1.6 million.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's some fascinating information on &lt;a href=&quot;http://www.fourmilab.ch/documents/univac/&quot; rel=&quot;noreferrer&quot;&gt;this site&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://archive.computerhistory.org/resources/text/Remington_Rand/SperryRand.UNIVAC1108II.1965.102646105.pdf&quot; rel=&quot;noreferrer&quot;&gt;Univac marketing material.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="736" LastActivityDate="2018-04-21T09:45:37.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6309" PostTypeId="2" ParentId="6271" CreationDate="2018-04-21T12:44:44.780" Score="6" Body="&lt;p&gt;No, not quite like that. Nobody pointed out to you that the pixel bits are stored in reverse order.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0 00 01 10 1 -&amp;gt; 0 1 01 10 00 = 58&#xA;1 1 00 01 10 -&amp;gt; 1 01 10 00 1 = B1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How can you see what it looks like? You could do it like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;HGR&#xA;CALL-151&#xA;2000:58 B1 N 2002&amp;lt;2000.3FF6M&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But then you'd see it doesn't look like what you expect, so I wrote you a little program. Twiddler:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;8000:20 2F FB 20 B7 80 20 E2 F3 A9 00 A8 85 02 A9 20&#xA;8010:85 03 A2 20 A5 00 91 02 C8 A5 01 91 02 C8 D0 F4&#xA;8020:E6 03 CA D0 EF 86 24 A9 15 85 25 A5 00 20 92 80&#xA;8030:A5 01 20 92 80 AD 00 C0 10 FB 8D 10 C0 C9 9B D0&#xA;8040:03 4C 2F FB C9 89 B0 16 29 0F 0A AA F0 02 CA CA&#xA;8050:BD DD 80 85 00 E8 BD DD 80 85 01 4C 09 80 C9 A0&#xA;8060:D0 0B A5 00 A6 01 85 01 86 00 4C 09 80 C9 D9 B0&#xA;8070:C4 C9 B8 08 29 0F A8 90 01 88 A9 01 88 30 03 0A&#xA;8080:D0 FA 28 B0 06 45 00 85 00 90 04 45 01 85 01 4C&#xA;8090:09 80 85 04 A9 80 AA 25 04 F0 04 A9 B1 D0 02 A9&#xA;80A0:B0 20 ED FD 8A 4A D0 EE A9 A0 20 ED FD A5 04 20&#xA;80B0:DA FD A9 A0 4C ED FD A2 00 A0 17 BD C6 80 20 ED&#xA;80C0:FD E8 88 D0 F6 60 8D 8D B7 B6 B5 B4 B3 B2 B1 B0&#xA;80D0:A0 A0 A0 A0 C8 C7 C6 C5 C4 C3 C2 C1 8D 00 00 2A&#xA;80E0:55 55 2A 7F 7F 80 80 AA D5 D5 AA FF FF&#xA;0:58 B1&#xA;8000G&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It edits the bytes in $00 and $01 and fills the hires screen with them. The bits are shown, and the keys to toggle the bits are printed above them. So 7 to 0 toggle the bits in byte 0, and H to A toggle the bits in byte 1. Ctrl-A to Ctrl-H set the bytes to hires colours 0 to 7, Space swaps the bytes, and Esc exits. Then if you like you can change $00 or $01 and restart with 8000G.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In AppleWin with NTSC emulation it looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oBhgX.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oBhgX.png&quot; alt=&quot;Twiddler editing bytes 58 B1 in AppleWin&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main reason it doesn't look as you expect is because adjacent 1's produce white, but with fringes of colour at the edges or tints in short runs. In this case the high bit of byte 1 extends the white produced by the adjacent bit 6 in byte 0 and bit 1 in byte 1. Why is it extended? That is covered in some detail in James Sather's &lt;a href=&quot;https://archive.org/details/Understanding_the_Apple_IIe&quot; rel=&quot;noreferrer&quot;&gt;Understanding the Apple IIe&lt;/a&gt;. From page 8-33:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Interference Between Adjacent Delayed and Undelayed HIRES40 Patterns&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The 7-dot, HIRES40 patterns fit snugly together if the adjacent&#xA;  patterns are all delayed or undelayed, but problems can be caused when&#xA;  they are mixed together. [...]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;A delayed HIRES40 pattern extends the trailing dot or black space of a&#xA;  preceding undelayed pattern by half of a dot width. [...]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;An undelayed HIRES pattern cuts off the trailing dot or black space of&#xA;  a preceding delayed pattern to half of a dot width.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The point of all this is that continuous undelayed or delayed patterns&#xA;  fit snugly together, but there is discontinuity between adjacent&#xA;  undelayed and delayed patterns.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Cutting off or extending a dot has the effect of slightly changing the&#xA;  dot pattern and, more noticeably, changing the coloring of the border&#xA;  dots. As a result, the HIRES programmer has one more thing that&#xA;  affects color to educate himself about and take into account. On the&#xA;  plus side, the programmer can draw vertical lines at pattern borders&#xA;  in eight colors that are not otherwise available in HIRES40 mode. He&#xA;  does this simply by turning on a right hand dot then extending or&#xA;  cutting it off via D7 of the following pattern. In some instances, no&#xA;  dots need be turned on in the following pattern.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Figure 8.14 (color section) is a photograph illustrating the&#xA;  generation of LORES colors at borders between delayed and undelayed&#xA;  7-dot HIRES patterns.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The program which generated this display is listed in Figure 3.11. The&#xA;  mixed LORES/HIRES display is created by switching screen modes in a&#xA;  8515-cycle loop as is discussed in an application note in Chapter 3.&#xA;  As the photo shows, any LORES color except dark blue-green (4) and&#xA;  dark magenta (1) can be produced at a limited number of screen&#xA;  positions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Rather than posting the photo from Sather's book, I've taken Sather's code - which was on hand (with a screenshot - have a look) at the website of another Apple II emulator, &lt;a href=&quot;http://mosher.mine.nu/epple2/#_split_screen_hires_lores_colors&quot; rel=&quot;noreferrer&quot;&gt;Epple II&lt;/a&gt; - and run it in AppleWin to demonstrate that it's a genuine effect of NTSC decoding. It's the same behaviour that made bit-twiddling in double-hires so valuable. For example, just look at the fine detail in Airheart's graphics on an NTSC monitor or in an emulator that supports true NTSC emulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2txs3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2txs3.png&quot; alt=&quot;Sather&amp;#39;s demo of LORES colors at borders between delayed and undelayed HIRES patterns, in AppleWin&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, it's not simple, and it's a lot more interesting than &quot;nothing happens&quot;!&lt;/p&gt;&#xA;" OwnerUserId="71" LastActivityDate="2018-04-21T12:44:44.780" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6310" PostTypeId="1" AcceptedAnswerId="6312" CreationDate="2018-04-21T16:39:09.473" Score="8" ViewCount="287" Body="&lt;p&gt;I am asking myself what is the best when storing a 3.5 disk drive for a long time but still planning to use it in the future, what is the best: Store it with a disk inserted, or leave it empts ?&lt;/p&gt;&#xA;" OwnerUserId="2123" LastActivityDate="2018-04-24T07:14:25.107" Title="Disk drive long storage, with or without disk inside?" Tags="&lt;floppy-disk&gt;&lt;disk-drive&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6312" PostTypeId="2" ParentId="6310" CreationDate="2018-04-21T17:54:20.140" Score="10" Body="&lt;p&gt;Leave it empty. In floppy drives, the read/write head &lt;em&gt;touches&lt;/em&gt; the disk’s surface, so leaving a disk inserted for long periods of time can cause problems — the head will tend to stick to the surface, pulling it off when the drive is next powered up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some drives shipped with a cardboard insert which was intended for use in shipping and long-term storage, but that was more common with 5.25” and older drives. Some drives also have shipping screws to lock everything in place, but I wouldn’t expect that on a 3.5” drive.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-04-21T17:54:20.140" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6313" PostTypeId="2" ParentId="5078" CreationDate="2018-04-22T22:55:50.087" Score="2" Body="&lt;p&gt;Why would one system be priced less than another system despite having better hardware? Due to the absence of a reason why not, basically.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible that a company prices systems in line with the cost or capability of the hardware, as other companies will be able to deliver similar capabilities with similar hardware at corresponding price points based on the cost of the hardware, but this is only one possibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bad pricing decisions are penalized only in a roundabout way if the company doesn't fix them on its own initiative -- if they go on for long enough maybe the company will underperform and the decision makers will lose their jobs, and someone else will get a turn to make the decision; repeat until a good decision maker is found, if the company is still in business.&lt;/p&gt;&#xA;" OwnerUserId="8508" LastEditorUserId="8508" LastEditDate="2020-02-23T21:57:21.757" LastActivityDate="2020-02-23T21:57:21.757" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6314" PostTypeId="2" ParentId="6310" CreationDate="2018-04-23T09:41:01.150" Score="6" Body="&lt;p&gt;in addition to &lt;strong&gt;Stephen Kitt&lt;/strong&gt; answer I need to add:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Do not store your FDD closed not even with the dummy carton/plastic disc!!!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For &lt;strong&gt;5.25&amp;quot;&lt;/strong&gt; floppy insert the carton dummy disc but &lt;strong&gt;leave the FDD open&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;For &lt;strong&gt;3.5&amp;quot;&lt;/strong&gt; do not even insert disc !!!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The carton or plastic sheets (dummy discs) are just for transport to prevent head crushing during unexpected G-force. But in case of long-therm storage You might damage your drive. However the head should be fine on the carton/plastic but the Head load mechanism might not due to two reasons:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;compressed head load springs lose strength over time&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The spring will change the shape when stored in closed/inserted position of the head load mechanism. (the same applies for any springs for example there are specific ways how to store bows for the same reasons)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;material damage&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Another downfall of the inserted/close storage is that on some &lt;strong&gt;FDD&lt;/strong&gt; drives some parts of the head load mechanism are from plastic which tend to change its properties if long therm force is applied. I have one drive damaged like this only after few years of storage (was necessary to reinforce one plastic bridge with metalic plate to repair the damage and make the head load working again. I got it as spare parts as it was inoperable and after repairing it I got fully functional &lt;a href=&quot;https://i.stack.imgur.com/hog6w.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;D40 FDD+FDC&lt;/a&gt; which was too expensive at that time for me and could move forward from tapes :) and it is still working till today)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Both problems are affecting the Head load force and position causing read/write errors making the drive inoperable (only due to mechanical reasons).&lt;/p&gt;&#xA;&lt;p&gt;So It is better to leave the heads in the open/non-inserted position and the best option is to use the fixating screws in open position if present (which is improbable).&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-04-24T07:14:25.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6315" PostTypeId="1" AcceptedAnswerId="6316" CreationDate="2018-04-24T08:54:44.370" Score="16" ViewCount="2711" Body="&lt;p&gt;The ELF file format has an &lt;code&gt;e_machine&lt;/code&gt; field in the header, which specifies which ISA the executable expects. And the &lt;code&gt;e_ident&lt;/code&gt; structure also has an &lt;code&gt;EI_OSABI&lt;/code&gt; field that specifies which ABI the executable is expecting. My guess is, that these fields are how my operating system knows not to go ahead and run a binary which was compiled for some other machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But how was this achieved on early UNIXes, early Linuxes, and others that used &lt;code&gt;a.out&lt;/code&gt;? &lt;code&gt;a.out&lt;/code&gt;, from what I can tell, has no equivalent field(s). &lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-04-24T09:07:23.810" LastActivityDate="2018-04-25T01:46:21.260" Title="What determines which architecture an a.out executable runs on?" Tags="&lt;unix&gt;&lt;file-format&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6316" PostTypeId="2" ParentId="6315" CreationDate="2018-04-24T09:08:59.000" Score="20" Body="&lt;p&gt;The &lt;code&gt;a_midmag&lt;/code&gt; field contains a machine identifier, which can be used on platforms which support that field. &lt;code&gt;a_midmag&lt;/code&gt; is a 32-bit value stored in host byte-order (fun already), and bits 16 to 23 give the machine type. The most comprehensive list of machine identifiers I’ve found so far is &lt;a href=&quot;https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=bfd/libaout.h;h=0a421e40e918050af44cc5673ccda53000df566f;hb=HEAD#l248&quot; rel=&quot;noreferrer&quot;&gt;the list used by &lt;code&gt;libbfd&lt;/code&gt;&lt;/a&gt;, which shows that the field has been used for quite a long time (values 1, 2 and 3 indicate 68010, 68020 and SPARC respectively). &lt;a href=&quot;https://github.com/file/file/blob/master/magic/Magdir/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;file&lt;/code&gt;&lt;/a&gt; also has a number of magic values, &lt;em&gt;e.g.&lt;/em&gt; for &lt;a href=&quot;https://github.com/file/file/blob/master/magic/Magdir/sun&quot; rel=&quot;noreferrer&quot;&gt;Sun systems&lt;/a&gt; and &lt;a href=&quot;https://github.com/file/file/blob/master/magic/Magdir/pdp&quot; rel=&quot;noreferrer&quot;&gt;the PDP-11&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately the “platforms which support that field” caveat means that it can’t be relied upon, and &lt;a href=&quot;https://www.freebsd.org/cgi/man.cgi?query=a.out&amp;amp;sektion=5&quot; rel=&quot;noreferrer&quot;&gt;the FreeBSD &lt;code&gt;a.out&lt;/code&gt; manpage&lt;/a&gt; highlights that fact:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Since not all of the supported architectures use the &lt;code&gt;a_midmag&lt;/code&gt; field, it&#xA;       can be difficult to determine what architecture a binary will execute on&#xA;       without examining its actual machine code.  Even with a machine identifier, the byte order of the &lt;code&gt;exec&lt;/code&gt; header is machine-dependent.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Historically, &lt;code&gt;a.out&lt;/code&gt; binaries were directly executable, their first bytes were a jump instruction to skip the header (see &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/man51.pdf&quot; rel=&quot;noreferrer&quot;&gt;the original documentation&lt;/a&gt;). So you &lt;em&gt;could&lt;/em&gt; try to recognise old binaries’ architecture by figuring out whether the first (two?) bytes are a valid jump instruction with a sensible offset... Later binaries are not directly executable by the CPU; for example the start of a Linux &lt;code&gt;a.out&lt;/code&gt; binary is &lt;a href=&quot;https://github.com/file/file/blob/master/magic/Magdir/linux&quot; rel=&quot;noreferrer&quot;&gt;a magic number&lt;/a&gt; such as 0x0064010b (see for example &lt;a href=&quot;http://oldlinux.org/Linux.old/bin/bash-1.14.2.linux.bin.tar.gz&quot; rel=&quot;noreferrer&quot;&gt;this old i386 &lt;code&gt;bash&lt;/code&gt; binary&lt;/a&gt;), which isn’t useful x86.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer to your question is really that to determine what architecture an &lt;code&gt;a.out&lt;/code&gt; executable runs on, you need to try to run it...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-04-24T09:38:18.633" LastActivityDate="2018-04-24T09:38:18.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6317" PostTypeId="2" ParentId="6315" CreationDate="2018-04-24T09:12:10.397" Score="2" Body="&lt;p&gt;The &lt;code&gt;a.out&lt;/code&gt; format is, in general, simply plain binary code. It contains no information whatsoever what platform it is intended for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, any &lt;code&gt;a.out&lt;/code&gt; binary will do &lt;em&gt;something&lt;/em&gt; on any platform (the CPU, after all, simply interprets the binary code in the file according to its make and type), but the &lt;em&gt;intended&lt;/em&gt; execution can only be achieved on the platform the a.out was built for.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-04-24T09:12:10.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6318" PostTypeId="2" ParentId="6315" CreationDate="2018-04-24T09:42:14.580" Score="8" Body="&lt;p&gt;edit:&lt;/p&gt;&#xA;&lt;h1&gt;Aaaargh - I just I answered something that wasn't asked for. Stupid me. I should not write answers in the early morning.&lt;/h1&gt;&#xA;&lt;p&gt;I still don't delete it, as it might help to find related information about the content of the fields. So feel free to downvote and/or complain about me not reading thruout.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;So this is about the ELF fields &lt;code&gt;e_machine&lt;/code&gt; and &lt;code&gt;e_osabi&lt;/code&gt; , not &lt;code&gt;a.out&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Both values are rather random and have been used incosistently when it comes to less than common CPUs/machines/OSes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;e_machine&lt;/code&gt; starts with&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;EM_NONE  0 No machine&#xA;EM_M32   1 AT&amp;amp;T WE 32100&#xA;EM_SPARC 2 SPARC&#xA;EM_386   3 Intel 80386&#xA;EM_68K   4 Motorola 68000&#xA;EM_88K   5 Motorola 88000&#xA;EM_860   7 Intel 80860&#xA;EM_MIPS  8 MIPS RS3000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But be aware, it's realy rather random, as some values have been reused (it's 'only' a 16 bit word) and/or independly assigned - luckyly for more uncommon CPUs.&lt;/p&gt;&#xA;&lt;p&gt;Similar &lt;code&gt;e_osabi&lt;/code&gt; starts with&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ELFOSABI_SYSV    0 System V&#xA;ELFOSABI_HPUX    1 HP-UX&#xA;ELFOSABI_NETBSD  2 NetBSD&#xA;ELFOSABI_LINUX   3 Linux&#xA;ELFOSABI_GNUHURD 4 GNU Hurd&#xA;ELFOSABI_SOLARIS 6 Solaris&#xA;ELFOSABI_AIX     7 AIX&#xA;ELFOSABI_IRIX    8 IRIX&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When analyzing old ELF binaries it's important to know, that &lt;code&gt;e_osabi&lt;/code&gt; is a later addition. Originally this area was padding (toward the full 16 Bytes). 'clean' old files should read 0 here, no matter what OS was used. Therefore ELFOSABI_SYSV is rather an asumption than a definitive marking.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Executable_and_Linkable_Format&quot; rel=&quot;noreferrer&quot;&gt;Wiki-article about ELF&lt;/a&gt; gives already away some common values found today. Linux' &lt;em&gt;&lt;a href=&quot;https://refspecs.linuxfoundation.org/elf/TIS1.1.pdf&quot; rel=&quot;noreferrer&quot;&gt;Portable Formats Specification&lt;/a&gt;&lt;/em&gt; lists some values (*1). A much &lt;a href=&quot;http://binaryanalysisplatform.github.io/bap/api/v0.9.9/type_Bap.Std.Elf.html&quot; rel=&quot;noreferrer&quot;&gt;longer and up to date list&lt;/a&gt; list can be found at the &lt;em&gt;&lt;a href=&quot;http://binaryanalysisplatform.github.io/about/&quot; rel=&quot;noreferrer&quot;&gt;Binary Analysis Platform&lt;/a&gt;&lt;/em&gt; Project (*2,3)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - It ofc, includes only values relevant for Linux at that time (1993!)&lt;/p&gt;&#xA;&lt;p&gt;*2 - Here now many older symbols/values are missing.&lt;/p&gt;&#xA;&lt;p&gt;*3 - A great source for poking into reverse engineering under Linux.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-04-24T12:04:13.237" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6319" PostTypeId="2" ParentId="6315" CreationDate="2018-04-24T14:57:25.393" Score="16" Body="&lt;p&gt;The short answer is: early Unix systems did not bother to track which architecture an executable was for.  In general, the architecture an executable was for, was the one the executable was found on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're on a PDP-11, /bin will contain PDP-11 executables.  If you're on a VAX, /bin will contain VAX executables.  Multiple architectures all trying to store their executables in the same file system was simply not a problem people were typically having, and therefore not a problem that needed fixing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you tried to run something for another architecture (e.g. you restored some files from a tape written on another system) the worst that would happen is the program would crash and give you a core dump.  If you were doing that kind of thing you were expected to know to either get the correct tape for your architecture, or recompile the software from source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In those rare cases where you needed to have binaries from multiple architectures co-existing (e.g. a file server storing files) the early solutions were to do things like having separate directories for each architecture, e.g. /nfs/vax/bin, /nfs/sun3/bin, /nfs/ibm_rt/bin.  Then each client would be configured to use the particular directory that was appropriate.  Only a fool would mix executables for different architectures in the same directory (absent some other way to track them, e.g. architecture-specific suffixes).&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-04-24T14:57:25.393" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6321" PostTypeId="2" ParentId="6315" CreationDate="2018-04-25T01:46:21.260" Score="3" Body="&lt;p&gt;There is no 100% sure way. For an earnest albeit somewhat futile attempt to recognize &lt;code&gt;a.out&lt;/code&gt; files, see &lt;code&gt;/usr/share/magic&lt;/code&gt; (on Linux; elsewhere your paths may vary) - the pattern file of the UNIX &lt;code&gt;file&lt;/code&gt; command. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There you can see that both &quot;386 executable&quot; and &quot;VAX executable&quot; have the same magic header (0407) and the same offset for the symbol table length, and there is no other way to tell them apart except by execution. The first matching pattern (&quot;386 executable&quot;, as in the file) will win, just because it is deemed more probable to encounter a 386 &lt;code&gt;a.out&lt;/code&gt; executable than a VAX one.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2018-04-25T01:46:21.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6322" PostTypeId="1" AcceptedAnswerId="6323" CreationDate="2018-04-25T12:43:21.317" Score="34" ViewCount="15841" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZF4p5.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZF4p5.jpg&quot; alt=&quot;diagram showing ASM to binary compilation&quot;&gt;&lt;/a&gt;The C Programming Language was originally developed by Dennis Ritchie who also co-designed the Unix operating system with which development of the language was closely intertwined. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a specific individual or research group credited with developing the assembler and assembly language syntax that we are now familiar with?&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="278" LastEditDate="2018-04-27T18:41:26.327" LastActivityDate="2018-04-29T05:30:38.170" Title="Who is credited for the creation of Assembly Language?" Tags="&lt;programming&gt;&lt;assembly&gt;&lt;software-development&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="6323" PostTypeId="2" ParentId="6322" CreationDate="2018-04-25T13:01:33.460" Score="70" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Assembly_language#Historical_perspective&quot; rel=&quot;noreferrer&quot;&gt;According to Wikipedia&lt;/a&gt;, the first assembly language was developed in 1947 by &lt;a href=&quot;https://en.wikipedia.org/wiki/Kathleen_Booth&quot; rel=&quot;noreferrer&quot;&gt;Kathleen Booth&lt;/a&gt; (née Britten). The language doesn’t look anything like “modern” assembly though (see the end of &lt;a href=&quot;http://mt-archive.info/Booth-1947.pdf&quot; rel=&quot;noreferrer&quot;&gt;this paper&lt;/a&gt;); it’s more a mathematical representation of computer operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first mnemonic-based assembler was developed by Maurice Wilkes and David Wheeler for the EDSAC, with single-letter mnemonics; see &lt;a href=&quot;http://www.davidsalomon.name/assem.advertis/asl.pdf#page=16&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Assemblers and Loaders&lt;/em&gt;&lt;/a&gt;, page 7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first symbolic assembler is credited to &lt;a href=&quot;https://en.wikipedia.org/wiki/Nathaniel_Rochester_(computer_scientist)&quot; rel=&quot;noreferrer&quot;&gt;Nathaniel Rochester&lt;/a&gt;, who developed an assembler for the IBM 701 &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/650.html&quot; rel=&quot;noreferrer&quot;&gt;in 1954&lt;/a&gt;. I can’t find an example of the mnemonics and syntax used then (in any case, mnemonics tended to be assembler-specific rather than machine-specific).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first modern-looking assembler was the GAS (Generalized Assembly System) for the IBM 7090, developed by a number of people (including Douglas McIlroy, later of UNIX fame, and George Mealy) in the early sixties.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-04-29T05:30:38.170" LastActivityDate="2018-04-29T05:30:38.170" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="6324" PostTypeId="2" ParentId="6275" CreationDate="2018-04-25T14:45:48.027" Score="10" Body="&lt;p&gt;The ColecoVision power supply is a multiple-voltage supply producing regulated +5V, -5V, and +12V output. To provide these multiple voltages it needs a more complex transformer which takes up a large portion of the AC adapter seen in this repair video:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=TfO1VFQBAvY&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=TfO1VFQBAvY&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the regulation is done inside the power supply and not in the ColecoVision itself additional components including a regulator and a heat sink have to be included. Take note of how large the heat sink is in that video in addition to the passive components within the walls of the heat sink.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In comparison most consumer electronics have the regulation handled inside the appliance and they expect unregulated DC output from the power supply. In that case all the power supply has to contain is a small transformer, bridge rectifier, and a few passive components so it can be much smaller. This is why your run-of-the-mill game console AC adapter is much more compact. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if a switching power supply was used it would still be fairly large due to the multiple tap transformer and the several switching circuits needed for each power rail. For this case you'd have more components (inductors, additional diodes, etc.) than in the linear design; the PCB would be more complex, more costly, and possibly larger than a linear design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So linear versus switching power supply design has nothing to do with this. It's a complex power supply that was implemented fairly efficiently, and the only unusual aspect is that they didn't have a cord going from the wall socket to the AC adapter, and instead hung the entire thing off the wall.&lt;/p&gt;&#xA;" OwnerDisplayName="user8526" LastActivityDate="2018-04-25T14:45:48.027" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6325" PostTypeId="1" AcceptedAnswerId="6328" CreationDate="2018-04-25T15:50:56.057" Score="14" ViewCount="2665" Body="&lt;p&gt;I have a few old programs/games which I'd like to run today. As there is Wine for running Windows programs, I wondered if there is a compatibility layer for CP/M. Obviously it would need to implement some kind of Z80 emulation too. Output would ideally be to the console so something like a ZX Spectrum emulator is not what I'm looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a computer running a recent Linux. Happy to compile the thing myself if need be.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="611" LastEditDate="2018-04-25T16:32:32.820" LastActivityDate="2018-05-02T21:38:02.940" Title="Is there a way to execute CP/M binaries on a modern Linux computer" Tags="&lt;cp-m&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6326" PostTypeId="2" ParentId="6325" CreationDate="2018-04-25T16:20:01.273" Score="10" Body="&lt;p&gt;There are numerous Z80 simulators out there. The Z80 simulator community is robust and mature. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.autometer.de/unix4fun/z80pack/&quot; rel=&quot;noreferrer&quot;&gt;Z80Pack&lt;/a&gt; is a solid first one stop shopping place to get started, but there are lots of others.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-04-25T16:20:01.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6327" PostTypeId="2" ParentId="6325" CreationDate="2018-04-25T16:36:26.203" Score="5" Body="&lt;p&gt;Because you're running code for a different CPU family (8080/Z80) as opposed to running code compatible with the CPU you are actually running, a compatibility layer will not do.  You need to emulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on your primary operating system, there are several different CP/M emulators available.  &lt;a href=&quot;https://superuser.com/questions/516833/emulating-cp-m-under-linux&quot;&gt;This answer on another Stack site&lt;/a&gt; discusses a good choice if you want to run under Linux, for example.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2018-04-25T16:36:26.203" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6328" PostTypeId="2" ParentId="6325" CreationDate="2018-04-25T17:16:23.277" Score="13" Body="&lt;p&gt;&lt;a href=&quot;https://github.com/jhallen/cpm&quot; rel=&quot;noreferrer&quot;&gt;jhallen/cpm&lt;/a&gt; is pretty close to a compatibility layer via emulation. It runs in a terminal and maps the current CP/M drive to the current Linux directory.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-04-25T17:16:23.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6329" PostTypeId="2" ParentId="6322" CreationDate="2018-04-25T18:10:35.340" Score="23" Body="&lt;p&gt;As an addition to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/79/stephen-kitt&quot;&gt;Stephen&lt;/a&gt;'s extensive &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6323/6659&quot;&gt;list&lt;/a&gt;, Zuse's &lt;strong&gt;'&lt;em&gt;Planfertigungsteil&lt;/em&gt;'&lt;/strong&gt; (a modern translation might be &lt;em&gt;Program Manufacturing Device&lt;/em&gt;) as implemented in 1942-1945 for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Z4_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Z4 computer&lt;/a&gt; might be worth mentioning. While not a program, but a hardware device, it allowed the use of abstract operation names as well as symbolic addresses. There was even functionality to check a program for valid operations during entry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course this 'assembler' was quite different from today's notation, but so was the machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z4 became fully operational for the first time in April 1945, just days before the war ended (in Europe).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if we include hardware based assemblers, Konrad Zuse is another candidate.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="79" LastEditDate="2018-04-25T21:03:52.597" LastActivityDate="2018-04-25T21:03:52.597" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6330" PostTypeId="1" AcceptedAnswerId="6337" CreationDate="2018-04-25T21:55:50.523" Score="16" ViewCount="1207" Body="&lt;p&gt;I was thinking about how &lt;a href=&quot;https://en.wikipedia.org/wiki/Williams_tube&quot; rel=&quot;noreferrer&quot;&gt;Williams Tubes&lt;/a&gt; worked and how one could hypothetically &quot;snapshot&quot; (quite literally!) the state of a computer's memory by simply taking a photograph of the phosphor end of a memory-CRT - then feeding the stored state back into the machine by pointing a TV camera at the photograph and having the CRT display from the camera for a single refresh cycle before reconnecting back to the computer for state to be persisted on the CRT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagine the technique could be used for any other computer that featured a visual display of its memory-state by way of &lt;em&gt;der blinkenlights&lt;/em&gt; - this would assume that all its memory is visible this way. If a photograph of this was taken then a kind-of fax-machine could &quot;scan&quot; a photograph and use that to re-set memory would avoid the trouble of &lt;a href=&quot;https://www.youtube.com/watch?v=FKNayPnZT54&quot; rel=&quot;noreferrer&quot;&gt;manually flipping switches to bootstrap a computer&lt;/a&gt; - I understand this is all within the realm of 1950s/1960s-era technology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know magnetic-tape and punch-cards predate computers and were used to store data (including bootstrapping) they share a considerable disadvantage: they cannot capture machine memory state in a &quot;snapshot&quot;: they require memory to be streamed out first, thus freezing the machine's execution until all data had been written. They also suffer from relatively poor data density: a punch card requires about 2x5mm (10mm^2) area for each bit, while 1950s magnetic tape (e.g. UNISERVO) could store 128 bits/inch (0.19mm per bit) albiet in one dimension. Whereas photographic film is theoretically capable of much higher resolutions (thinking about microfiche, for example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, were photographs ever used to store memory state?&lt;/p&gt;&#xA;" OwnerUserId="4331" LastEditorUserId="4331" LastEditDate="2020-05-06T06:37:11.710" LastActivityDate="2020-05-06T07:46:27.040" Title="Was photographic film ever used for digital data storage?" Tags="&lt;memory&gt;&lt;storage&gt;" AnswerCount="6" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6331" PostTypeId="2" ParentId="6330" CreationDate="2018-04-25T22:59:04.407" Score="19" Body="&lt;p&gt;It IS used in at least two places even today:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;QR codes. There is the possibility of the print media carrying it having been prepared involving photographic methods.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Digital sound in movie theaters, when projecting from actual film - even quite modern standards like Sony SDDS, Dolby Digital define how the sound can be carried as digital data encoded optically in an off-screen area of the film strip.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-04-25T22:59:04.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6332" PostTypeId="2" ParentId="6322" CreationDate="2018-04-25T23:26:45.257" Score="-2" Body="&lt;p&gt;While not actually built (at least not in its perfect, theoretical form), I'd propose the &lt;a href=&quot;https://en.wikipedia.org/wiki/Turing_machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turing Machine&lt;/a&gt; (1936) as the precursor of assembly languages. A machine with a given set of states and their transitions is controlled by the inputs received in the tape, which can move forward or backward. As for the &lt;em&gt;actually implemented&lt;/em&gt; assembly languages, I think it's all said in the other answers.&lt;/p&gt;&#xA;" OwnerUserId="8533" LastActivityDate="2018-04-25T23:26:45.257" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6333" PostTypeId="2" ParentId="6330" CreationDate="2018-04-26T01:45:36.977" Score="10" Body="&lt;p&gt;Sprocket-driven 35 mm photographic film stock was used to store data in the British &lt;a href=&quot;https://en.wikipedia.org/wiki/Elliott_803&quot; rel=&quot;noreferrer&quot;&gt;Elliott 803&lt;/a&gt; computer. It wasn't used optically, however: it was coated with iron oxide and used as magnetic media.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-04-26T01:45:36.977" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6334" PostTypeId="2" ParentId="6330" CreationDate="2018-04-26T08:44:56.737" Score="8" Body="&lt;p&gt;There were many optical readers used for punched paper tape; so in some sense holes in paper was treated as a photographic record of the dots on  the screen. The Colossus machine at Bletchley  Park used optical tape readers at very high speed and this pre-dated the Williams Tube.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/xeDyF4HviDE&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/xeDyF4HviDE&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="611" LastEditorUserId="611" LastEditDate="2018-04-26T10:56:05.973" LastActivityDate="2018-04-26T10:56:05.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6335" PostTypeId="2" ParentId="2998" CreationDate="2018-04-26T09:48:50.907" Score="10" Body="&lt;p&gt;In the original BBC BASIC versions for the BBC Micro, a large range of PLOT codes were reserved for the &lt;a href=&quot;http://mdfs.net/Docs/Books/Manuals/AcornGXR.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;Graphics Extension ROM&lt;/a&gt;, which was an optional extra.  The GXR included both a flood-fill function and a horizontal line-fill.  The BBC Master included half of the GXR as standard, omitting the &quot;sprite&quot; routines, but still included flood-fill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In BBC BASIC V, most of the commonly used PLOT codes gained convenience keywords, including quite a few associated with GXR functionality - and including flood-fills using the FILL statement.  A version of BBC BASIC V was available for late-model BBC Micros, but it is most often associated with the Acorn Archimedes which ran RiscOS.  On the Archimedes, GXR functionality was available as standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to run BBC BASIC V or VI (the latter uses IEEE-standard floating-point but is otherwise identical) is on a &lt;a href=&quot;https://www.riscosopen.org/content/downloads/raspberry-pi&quot; rel=&quot;nofollow noreferrer&quot;&gt;Raspberry Pi running RiscOS&lt;/a&gt;.  BeebEm in &quot;BBC Master&quot; mode gives access to flood-fill via &lt;code&gt;GCOL 0,128+POINT(X,Y) : PLOT &amp;amp;85,X,Y&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ju511.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ju511.gif&quot; alt=&quot;BeebEm capture&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The GXR manual indicates that the flood-fill routine accounts for 512 of the 768 bytes of RAM permanently claimed by GXR as workspace.  A command is provided to disable the flood-fill routine to reclaim this extra RAM, reducing GXR's overhead to one page (256 bytes).  The BBC Master's version of GXR used some of the shadow RAM for workspace (as well as the framebuffer), eliminating this overhead from user programs' perspective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With 768 bytes of RAM, the flood-fill routine is able to maintain a list of 256 pixels to process, but it is still possible to overflow this list with a complex pattern such as a fine grid; the routine exits gracefully instead of crashing in this case (tested on a BBC Master emulation).  Test case:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ikFVK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ikFVK.png&quot; alt=&quot;BeebEm screenshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RiscOS version, being less memory-constrained, should be much more robust, and my limited tests using RiscOS 3.5 (on an emulated ARM610 CPU with 32MB RAM) appear to confirm this; none of the three tests give it any trouble at 640x480 resolution (MODE 28).  It must be conceded that a 32-bit environment is very different from an 8-bit one.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2018-05-04T23:22:20.713" LastActivityDate="2018-05-04T23:22:20.713" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6336" PostTypeId="2" ParentId="6322" CreationDate="2018-04-26T13:54:23.100" Score="5" Body="&lt;p&gt;You might find it interesting to read Don Knuth and Luis Trabb Pardo's paper '&lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/stanford/cs_techReports/STAN-CS-76-562_EarlyDevelPgmgLang_Aug76.pdf&quot; rel=&quot;noreferrer&quot;&gt;The Early Development of Programming Languages&lt;/a&gt;' which lists a good number of early coding and programming systems. Precisely what you count as an 'assembly language' will influence which of these you take to be the first, but you should find a good candidate here.&lt;/p&gt;&#xA;" OwnerUserId="8544" LastActivityDate="2018-04-26T13:54:23.100" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6337" PostTypeId="2" ParentId="6330" CreationDate="2018-04-26T14:30:56.857" Score="22" Body="&lt;p&gt;Yes, the IBM 1360 used it. The wikipedia page suggests that it could store 0.5 terabits (64 GiB) of information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1360&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/IBM_1360&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fascinating design.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="79" LastEditDate="2020-05-06T07:46:27.040" LastActivityDate="2020-05-06T07:46:27.040" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6338" PostTypeId="2" ParentId="5080" CreationDate="2018-04-26T15:28:21.370" Score="9" Body="&lt;p&gt;The &lt;a href=&quot;http://www.fvempel.nl/pcw16.html&quot; rel=&quot;noreferrer&quot;&gt;Amstrad PCW16&lt;/a&gt; ran at 16MHz, using an NEC NZ70008H macrocell ('essentially a Z80', according to the &lt;a href=&quot;http://www.retroisle.com/amstrad/pcw/Technical/Firmware/ANNEASIC.RTF&quot; rel=&quot;noreferrer&quot;&gt;technical specification&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My port of CP/M to the PCW16 can be found &lt;a href=&quot;http://www.seasip.info/Cpm/software/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2018-04-26T15:28:21.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6339" PostTypeId="1" AcceptedAnswerId="6343" CreationDate="2018-04-26T20:16:53.390" Score="11" ViewCount="986" Body="&lt;p&gt;I'm an assembly newbie, but I'm curious about why the designers of the 6809 choose to use 2 stack in the microprocessor architecture. What is their original intent? The Wikipedia page says &quot;a user stack pointer (U) facilitated the creation of reentrant code.&quot;. Is that the intention of the design? if so can someone point me to an example of this?&#xA;I read about the &quot;stack blasting&quot; thing, but this is a consequence of the design, not an  intent.(&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/368/motorola-6809-stack-blasting/369&quot;&gt;Motorola 6809 Stack Blasting&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="8047" LastEditorUserId="576" LastEditDate="2018-04-26T21:04:48.360" LastActivityDate="2018-09-27T15:50:02.357" Title="Motorola 6809 two stacks design" Tags="&lt;assembly&gt;&lt;6809&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6341" PostTypeId="1" CreationDate="2018-04-27T01:59:14.730" Score="4" ViewCount="498" Body="&lt;p&gt;Most home computers of the 70s and early 80s were able to save and load data on audio cassettes.  Typically, in order to do this they encoded the data using frequency shift keying (FSK), i.e. for a '1' bit they might write a certain number of cycles at a certain frequency, while for a '0' bit they may use a different frequency and a different number of cycles (typically arranged such that both forms took the same length of time to write).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative to FSK is phase-shift keying (PSK), where instead of changing the frequency, the phase of the signal is altered.  This has a number of theoretical advantages, including a tighter frequency spectrum for the same symbol rate.  However, the circuitry required to use it is a little more complex (a phase-locked loop is practically required for this, which is a non-trivial circuit that I don't believe was readily available on standard ICs at the time).  I know that at least one computer used it (&lt;a href=&quot;https://en.wikipedia.org/wiki/Vector-06C&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Soviet-built Vector-06C&lt;/a&gt;), but (1) were there others, and (2) did it actually achieve any useful benefits over the simpler and cheaper FSK that was more commonly used?&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-04-27T08:17:49.940" Title="Use of PSK for storage of data on audio tape" Tags="&lt;cassette-tape&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6342" PostTypeId="2" ParentId="6341" CreationDate="2018-04-27T08:12:32.170" Score="4" Body="&lt;p&gt;Both the Sinclair ZX Spectrum's and the Sinclair QL's microdrives (their microtape units, which are basically the same thing in both computers) use Differential Manchester Encoding to store data on the tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, these devices didn't actually use audio cassettes, but rather much smaller microdrive cartridges that contained (presumably) high-quality video tape. So, apologies if this only marginally answers your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data is stored on alternate tracks. A 0 is encoded as a phase shift, a 1 as a non-shift. The microdrive encoding/decoding circuitry including the (assumed) PLL is realized in a custom ULA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4EdvR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4EdvR.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Picture courtesy of &lt;a href=&quot;http://qlforum.co.uk/viewtopic.php?t=1187&amp;amp;start=100&quot; rel=&quot;nofollow noreferrer&quot;&gt;QL-Forum&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-04-27T08:17:49.940" LastActivityDate="2018-04-27T08:17:49.940" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6343" PostTypeId="2" ParentId="6339" CreationDate="2018-04-27T11:43:01.760" Score="10" Body="&lt;p&gt;Well, the &lt;em&gt;intent&lt;/em&gt; behind the two-stack design we can only guess today. It was definitely not the same as the intent behind the later development of User and Supervisor Stack in the Motorola 68000. The 6809 has nothing comparable to a supervisor mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the implementation is different: The later 68000 uses both stacks as &lt;em&gt;system stacks&lt;/em&gt; (i.e. stores return addresses for JSR/BSR/TRAP and interrupts there) in user and supervisor mode, while the 6809 leaves the &quot;U&quot; stack to exclusive use by the application (i.e. the only instructions that put something there are the equivalents of &quot;push&quot; and &quot;pop&quot; and explicit data move instructions, subroutine calls and software interrupts won't affect the &quot;U&quot; stack)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most probably, the designers just thought a stack is a convenient data structure on assembler level (which is definitely true) and a separate stack, undisturbed by subroutine calls and (software) traps would be even more convenient (which is true in my opinion as well, working around data pushed by subroutine calls in assembler can be quite a nuisance and a source of subtle bugs at times). The various indexed and offset addressing modes of the 6809 make the U stack pointer even more convenient to use. Implementing a stack-based language like a Forth interpreter on the 6809 must have been pure joy over other 8-bit-CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apropos Forth: Forth really became en vogue end of the 70ies, beginning of the eighties - Maybe it was intended to support that (and other stack-based languages) language in a more ideal form than other CPUs. But that's pure guessing and maybe a coincidence.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-04-27T11:43:01.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6345" PostTypeId="2" ParentId="6339" CreationDate="2018-04-27T16:48:54.247" Score="2" Body="&lt;p&gt;Many high-level language compilers store local variables (or, as C calls them, &quot;objects with automatic duration&quot;), on the stack.  They also store temporary computation results and arguments of functions they're about to call there as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose a compiler sees &lt;code&gt;foo(x,y);&lt;/code&gt; when two-byte value x is sitting at a spot&#xA;4 bytes above the stack pointer and y is at a spot 12 bytes above, and a&#xA;language calling convention pushes arguments right to left.  In that case,&#xA;a compiler could start by pushing a word that's 12 bytes above the stack&#xA;pointer (for &lt;code&gt;y&lt;/code&gt;), but it would then have to push a word that's &lt;em&gt;6&lt;/em&gt; bytes above&#xA;the stack pointer (rather than 4) for &lt;code&gt;x&lt;/code&gt;, since the act of pushing &lt;code&gt;y&lt;/code&gt; would have just changed the stack pointer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding a second value that can be used as a &quot;frame pointer&quot; makes things a bit simpler.  At the start of a function, a compiler pushes the frame pointer on the stack, copies the stack pointer to it, and then moves the stack pointer to reserve space for any local variables the function will need.  At the end of the function, the stack pointer can be reloaded with the frame pointer and the old frame pointer can be popped off the stack.  Since the frame pointer won't move during the execution of the function, all of its parameters and local variables can be accessed at a fixed displacement from the frame pointer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some processors (e.g. the 8088) have frame-pointer-relative addressing but not stack-pointer relative.  On those which have both, I don't know how much real benefit the frame pointer would offer a compiler, versus having a compiler keep track of how much it has pushed on the stack since a function began.  I suspect the biggest benefit of a frame pointer comes when a program mixes a high-level language with in-line assembly or machine code [as was much more common in the 6809's heyday than it is now].  If a compiler lays things out consistently in memory, a programmer may be able to write machine code to access a particular parameter or variable and a frame-relative address without having to know how many additional bytes of information might be sitting on the stack.  Even if a compiler would know such things, it's much easier for a compiler to process a directive:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;__raw_code(0x43, 0x68, 0x92, 0x95, ...etc...);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;when the exact bytes to generate are all simple constants, than it would be to add ways of making the bytes vary depending upon other factors.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-04-27T16:48:54.247" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="6346" PostTypeId="1" AcceptedAnswerId="6349" CreationDate="2018-04-28T01:12:39.603" Score="6" ViewCount="467" Body="&lt;p&gt;I have tried to eliminate &quot;jail bars&quot; on the screen after UHF mod to video out (based on that: &lt;a href=&quot;http://zx81stuff.org.uk/zx81/ts1500_video.html&quot; rel=&quot;noreferrer&quot;&gt;http://zx81stuff.org.uk/zx81/ts1500_video.html&lt;/a&gt;) by adding 460uf 16V capacitor between +5V and GND but it didn't do anything to reduce them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any thought on that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how it looks on the screen: &#xA;&lt;a href=&quot;https://i.stack.imgur.com/QIcB5.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QIcB5.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8568" LastActivityDate="2018-04-28T13:17:51.073" Title="Timex Sinclair 1500 and screen &quot;jail bars&quot;" Tags="&lt;zx-spectrum&gt;&lt;video&gt;&lt;hardware-mods&gt;&lt;sinclair&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6347" PostTypeId="1" CreationDate="2018-04-28T04:56:27.657" Score="7" ViewCount="302" Body="&lt;p&gt;The NZVC condition codes scheme, and corresponding set of 14 conditions for branches, is the nearly only in current ISAs that utilizes condition codes at all. The first computer I know that used it is PDP-11 (1970).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is PDP-11 the truly first for this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How this scheme has been invented? I failed to find similar prototypes in earlier computers, and it looks like appeared &quot;from scratch&quot;. The condition codes themselves in Program Status Word register (whatever used name was) were, of course, known for more than decade, but no such elaborated scheme was present. This looks like a single genius strike. Are there any memories from DEC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE: more details: for example, to compare with System/360:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Signed arithmetic instructions produce condition code:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CC=0: no overflow, result == 0&lt;/li&gt;&#xA;&lt;li&gt;CC=1: no overflow, result &gt; 0&lt;/li&gt;&#xA;&lt;li&gt;CC=2: no overflow, result &amp;lt; 0&lt;/li&gt;&#xA;&lt;li&gt;CC=3: overflow, result sign/zero are irrelevant, compared with the overflow fact&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Unsigned (&quot;logical&quot;) arithmetic instructions produce condition code:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CC[0]: result is not zero&lt;/li&gt;&#xA;&lt;li&gt;CC[1]: carry out of result width&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;One should combine results of both types to a single condition code set, and this is the first part of &lt;em&gt;the&lt;/em&gt; leap I mean. The second one is using carry flag in combined 3-argument ADC/SBC operations (S/360 haven't done this despite carry bit in CC).&lt;/p&gt;&#xA;" OwnerUserId="8324" LastEditorUserId="8324" LastEditDate="2018-04-29T07:05:14.583" LastActivityDate="2018-04-29T07:05:14.583" Title="Origin of the NZVC condition codes scheme?" Tags="&lt;hardware&gt;&lt;dec&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6348" PostTypeId="2" ParentId="6347" CreationDate="2018-04-28T05:42:48.123" Score="8" Body="&lt;p&gt;My take is that this scheme has been invented the same way everything has been invented: Slowly, by evolution and combining existing ideas, and not &quot;from scratch&quot; by a strike of genius.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The carry flag has been around a long time before that (other PDPs, and previous computers). Branches or skips that test the carry flag have also been around (other PDPs, and previous computers). Branches or skips that combine testing the carry flag with testing the accumulator for the sign bit, or equality to zero have also been around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From there it's only a small step to add extra flag bits for the sign and zero to the carry flag, especially if you are about to make a program status word anyway. And while you are at it, you can also add on overflow bit for signed 2's complement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anything, I'd consider the overflow bit for signed 2's complement a strike of genius, because that (and its implementation) isn't really obvious.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-04-28T05:42:48.123" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6349" PostTypeId="2" ParentId="6346" CreationDate="2018-04-28T08:06:23.190" Score="4" Body="&lt;p&gt;Pokemon on the German ZX Forum has designed a number of video improvement circuits (ZX81CPP, ZX81SCP) that allow connection of a composite video monitor and produce a crystal clear picture once properly adjusted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sinclairzxworld.com/viewtopic.php?f=8&amp;amp;t=841&amp;amp;sid=9e23e93b43bfcc0bb782a80803430e70&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.sinclairzxworld.com/viewtopic.php?f=8&amp;amp;t=841&amp;amp;sid=9e23e93b43bfcc0bb782a80803430e70&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The circuit basically completely re-creates the video signal from the ULA output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Newer versions have an ATTiny(I think) on board that keeps the sync alive during fast mode which is a relief on modern LCD screens as they tend to get upset otherwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every once in a while he offers PCBs and completely built circuits (which, BTW, nicely fit into the modulator case if cleaned up a bit).&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-04-28T13:17:51.073" LastActivityDate="2018-04-28T13:17:51.073" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6350" PostTypeId="1" CreationDate="2018-04-28T21:36:32.653" Score="9" ViewCount="1509" Body="&lt;p&gt;I was wondering if floppy disks are ruined if, say, a terror of a 3 year old rips them apart...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had important pictures on a floppy disk.  I was doing some spring cleaning and came across it and threw it on my nightstand.   His awesome little 3 year old sister with a very curious nature decided to take it apart... I am completely devastated right now because, if my recollection serves me right, all the data on there is useless... and I &lt;em&gt;just&lt;/em&gt; ordered an external floppy drive...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone shed light and tell me if I am right or wrong?&lt;/p&gt;&#xA;" OwnerUserId="8573" LastEditorUserId="278" LastEditDate="2018-04-29T07:59:45.020" LastActivityDate="2019-02-07T16:16:58.923" Title="Is my opened floppy disk useless now?" Tags="&lt;floppy-disk&gt;&lt;data-preservation&gt;" AnswerCount="4" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="6351" PostTypeId="2" ParentId="6350" CreationDate="2018-04-28T22:01:56.513" Score="13" Body="&lt;p&gt;If the surface of the disk is not dented, kinked, torn or otherwise damaged, you may be able to recover the data on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering that five and a quarter floppies are long outdated, one can guess that you are referring to the more recent three and a half format diskettes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that in mind, you can consider to find another undamaged diskette and remove the metal slider and spring. Carefully pry it apart and remove the plastic film media inside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Replace it with the one from which you wish to recover the data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can secure the diskette covers with simple office tape, as you should only expect to get one chance at this. The sliding metal cover is not a requirement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the film media is damaged and mostly flat, you might get most of the data. If there is a hole or a tear, the data is lost.&lt;/p&gt;&#xA;" OwnerUserId="6925" LastActivityDate="2018-04-28T22:01:56.513" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6352" PostTypeId="2" ParentId="6350" CreationDate="2018-04-29T04:27:32.413" Score="5" Body="&lt;p&gt;I grew up on the Apple II, and I also remember other kids taking 5.25&quot; floppies out of the sleeve, and just putting them in the drive directly, and they worked. That may be more difficult with 3.5&quot; floppies, because the loading mechanism doesn't really leave much room, so I'd consider doing this with the external drive housing opened, so you can properly center the floppy. And maybe try it with some test disk first. Don't touch the surface if possible, use the edges or the hole.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-04-29T04:27:32.413" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6353" PostTypeId="1" AcceptedAnswerId="6354" CreationDate="2018-04-29T08:36:14.603" Score="7" ViewCount="1149" Body="&lt;p&gt;Before I knew about line endings, I used to open small executables in Notepad and ruin them completely. However, some more complex executables (e.g. Paint Shop) were too big for Notepad, and I was asked to open them in WordPad. This completely blew my mind; how could a simple text editor &lt;em&gt;not have space&lt;/em&gt; to open something that a more complex editor &lt;em&gt;could&lt;/em&gt; open?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, it occurred to me that, even in a really big text file, lines at the beginning of the file could change in length without slowing down the whole computer. And (with some help from the &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;A&lt;/kbd&gt; &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;C&lt;/kbd&gt; &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;V&lt;/kbd&gt; &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;V&lt;/kbd&gt; trick) I discovered that Notepad appeared to add a line break when the line was really long, though moving the cursor back and forth showed no evidence of a real line break existing. I can only speculate why this could be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How &lt;em&gt;does&lt;/em&gt; Notepad store the text buffer in memory, and why do these effects occur?&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2018-04-29T09:59:25.170" Title="How does Notepad store text files in memory?" Tags="&lt;memory-layout&gt;&lt;windows-95&gt;&lt;windows-3.x&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6354" PostTypeId="2" ParentId="6353" CreationDate="2018-04-29T09:59:25.170" Score="17" Body="&lt;p&gt;Notepad (at least originally) was implemented as a simple wrapper around the Windows EDIT control.  EDIT is not really designed to handle large amounts of text -- it stores text in a single block of memory allocated via &lt;code&gt;LocalAlloc&lt;/code&gt; (which, at least for 16-bit versions of Windows, means that it can't handle more than 64K of text in a single control, and in real-mode windows requires a contiguous block of memory to store all of it).  Even in 32-bit Windows, where the memory management no longer restricts it to 64K &lt;em&gt;backwards compatibility&lt;/em&gt; does, because the messages that are sent to it or received from it in order to allow the application to control it were only designed for the 16-bit system, and were never modified for 32-bit applications (Microsoft wanted Win32 to be source code compatible to Win16, so the existing messages had to retain the same layout[1]).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The line breaking issues you noticed are probably due to the fact that while it can support (nearly) 64K of text, the Windows EDIT control can't handle more than 32767 characters on a single line.  Copying and pasting a larger line can exceed this limit, but the line breaking algorithm seems to rely on signed integers[citation needed].  At a guess Notepad is reading lines out of the editor and storing them to the file one by one, and therefore gets a phantom line added where there is none in the buffer because the requested line is longer than the limit so is split into two by the edit control to pass the data back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More advanced editors like Write and its successor WordPad don't store the entire content in a single block; they typically used a linked list of lines, so were able to handle larger files even under 16-bit windows, and don't have backwards compatibility restrictions that prevented them from changing implementations when moving to 32-bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] - citation needed - I know there's an article about this on Raymond Chen's blog but I can't find it right now.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-04-29T09:59:25.170" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6355" PostTypeId="1" CreationDate="2018-04-29T11:56:20.243" Score="7" ViewCount="466" Body="&lt;p&gt;I got a Wangtek 5150EQ tape drive that connects to a dumb (made of a bunch of 74-series logic chips) 8-bit ISA tape controller card.  The controller card has a bunch of DIP switches which I used to configure it to port 300, IRQ 5, DMA 1.  Some research leads me to believe that drive and controller follow the QIC-02 interface standard.  I have ordered appropriate DC6250 and DC6150 tapes off ebay already.  Here is &lt;a href=&quot;http://micha.freeshell.org/qic36_qic02/5150EQ.html&quot; rel=&quot;noreferrer&quot;&gt;some information&lt;/a&gt; I found about the tape drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to use the tape drive in my 80286 PC (20 MHz CPU, 4 MB RAM) running MS-DOS 6.22 and Minix 2.0.3.   Some research showed that at least FreeBSD (through the &lt;code&gt;wt(4)&lt;/code&gt; driver) and Linux had support for this tape drive, however I have neither found DOS software nor a Minix driver for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any software for MS-DOS or Minix 2.0.3 I can use to talk to this drive, at least to confirm that it is functional?  The software should run on my 80286.&lt;/p&gt;&#xA;" OwnerUserId="24" LastActivityDate="2018-10-15T00:18:43.333" Title="What DOS software can I test a QIC-02 tape drive with?" Tags="&lt;ms-dos&gt;&lt;80286&gt;&lt;magnetic-tape&gt;&lt;minix&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6356" PostTypeId="2" ParentId="6330" CreationDate="2018-04-29T22:00:49.253" Score="7" Body="&lt;p&gt;Not exactly what you expect, but the &lt;a href=&quot;https://en.wikipedia.org/wiki/Z1_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Zuse Z1&lt;/a&gt; and its successors used photographic film as punched tape.  This design decision was made because Konrad Zuse was able to find large amounts of old film rolls on a nearby scrapyard, removing the need to make his own tape.&lt;/p&gt;&#xA;" OwnerUserId="24" LastActivityDate="2018-04-29T22:00:49.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6357" PostTypeId="2" ParentId="6330" CreationDate="2018-05-01T04:29:28.667" Score="6" Body="&lt;p&gt;Yes, of course photographic film was used for data storage, but not necessarily computer data storage.   A seismometry network has dozens&#xA;of stations reporting to a central site, and it used to be (deades ago)&#xA;common to see a Honeywell Visicorder (aka drippy-corder) in such an installation,&#xA;slowly reeling out 35mm film through a dark chamber where signals are&#xA;recorded with galvanometer (mirror/beam) or CRT onto the film, which continually advances and dips into developer, stop bath, and fixer,&#xA;making a continuous record for days between reel changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About ten channels (with circa +/- 1mm deflection) fit handily onto&#xA;the 24mm clear space between sprocket holes of 35mm movie film.&#xA;Other 'Visicorder' models used other (paper) recording techniques.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2018-05-01T04:29:28.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6358" PostTypeId="2" ParentId="6350" CreationDate="2018-05-01T09:25:19.153" Score="1" Body="&lt;p&gt;A friend of my mother's spilled coffee on a 5 1/4 inch floppy disk. Unfortunately, the data on it wasn't backed up anywhere. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;She carefully removed the disk from the jacket and washed it in soapy water. Then she rinsed it and let it dry. Finally, she sacrificed a new floppy disk so she had a clean jacket, put the disk in it and was able to read the data off the disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was a Commodore PET floppy disk so the data was pretty low density, but I don't see why the same procedure shouldn't work in principle with 3.5 inch disks although opening one of the plastic cases to put the disk in might be more difficult (my mother's friend simply slit one side of the jacket with a knife).&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2018-05-01T09:25:19.153" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6359" PostTypeId="1" CreationDate="2018-05-01T13:17:56.887" Score="12" ViewCount="1477" Body="&lt;p&gt;No, this is NOT the TRS-80...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the late 1970s, perhaps early 80s too, Radio Shack sold a sort of computer trainer kit. It had a hex keyboard and its output was primarily through a grid of LEDs on a raised stand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I seem to recall this was also sold through other companies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone recall this? My google-fu is failing me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; Lengthier description:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the base was white and had a hex keypad. I believe it also had one or two 7-segment LED displays.&lt;/li&gt;&#xA;&lt;li&gt;at the back of the base were two black plastic cylinders rising vertically a couple of inches&lt;/li&gt;&#xA;&lt;li&gt;on top of the two cylinders was the &quot;display area&quot;. among other things, in the center was a grid of conventional red LED lights, 4x4 IIRC, or perhaps 3x3.&lt;/li&gt;&#xA;&lt;li&gt;I recall playing a pong-like game on on the LED grid. It had a known bug that would sometimes lead to it looping the ball between two positions forever.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-05-02T15:15:20.433" LastActivityDate="2020-01-18T03:33:56.467" Title="Radio Shack computer trainer kit?" Tags="&lt;identify-this-computer&gt;&lt;radio-shack&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6360" PostTypeId="2" ParentId="6359" CreationDate="2018-05-01T13:41:33.773" Score="14" Body="&lt;p&gt;I think you're thinking of the Science fair microcomputer trainer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1985/h155.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.radioshackcatalogs.com/html/1985/h155.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which had a TMS1100 as the processor (if not there is the digital computer kit on the previous catalog page but I don't think that matches your description).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This page has some more details&#xA;&lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?c=1053&quot; rel=&quot;noreferrer&quot;&gt;http://www.old-computers.com/museum/computer.asp?c=1053&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other options I can think of might be the MZ-40K from sharp, Micro-Professor MPF-1 or one of lots of other single board computers.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2018-05-01T14:32:13.013" LastActivityDate="2018-05-01T14:32:13.013" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6361" PostTypeId="2" ParentId="2998" CreationDate="2018-05-02T05:25:10.200" Score="3" Body="&lt;p&gt;The &lt;strong&gt;Sharp MZ-800&lt;/strong&gt; is a little-known Z80-based micro which has to load its BASIC interpreter from disk or tape.  What it does have is a bank of dedicated VRAM behind a custom video controller, which makes plotting and querying pixels significantly easier for the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was able to put an emulated MZ-800 into &quot;mode 4&quot; graphics, which provide 4 colours at 640x200, and generate a similar fine grid which stumped all previous micros at this resolution.  Issuing PAINT on this grid successfully changed it from white to blue, leaving the black holes intact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The algorithm appeared to behave differently from usual, taking care of the whole scanlines first (outwards) and the vertical bars afterwards (inwards).  This suggests it is a scanline-stack algorithm which sets pixels only upon retrieving stack entries, not upon placing them.  This is very wasteful of memory and easily leads to unnecessary recursion steps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When faced with the herringbone pattern, progress became very slow indeed.  After several minutes, it had filled in only a few pixels, and it then gave a &quot;Memory capacity error&quot;.  So although it coped well with one &quot;difficult&quot; pattern, it was not robust enough to deal with another one.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2018-05-02T14:39:14.487" LastActivityDate="2018-05-02T14:39:14.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6362" PostTypeId="5" CreationDate="2018-05-02T08:20:11.183" Score="0" Body="&lt;p&gt;Minix (from Mini-Unix) is a small OS derived from Unix.  Launched in 1987 it is still supported.  Use this tag for questions regarding its use in retrocomputers.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2018-05-02T08:20:11.183" LastActivityDate="2018-05-02T08:20:11.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6363" PostTypeId="4" CreationDate="2018-05-02T08:20:11.183" Score="0" Body="For questions about the Minix operating system." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2018-05-02T08:20:11.183" LastActivityDate="2018-05-02T08:20:11.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6364" PostTypeId="5" CreationDate="2018-05-02T08:25:37.693" Score="0" Body="&lt;p&gt;Radio Shack, known as Tandy in many markets outside the USA, retailed microcomputers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please use the tags &lt;a href=&quot;/questions/tagged/trs-80&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;trs-80&amp;#39;&quot; rel=&quot;tag&quot;&gt;trs-80&lt;/a&gt; or &lt;a href=&quot;/questions/tagged/trs-80-model-iii&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;trs-80-model-iii&amp;#39;&quot; rel=&quot;tag&quot;&gt;trs-80-model-iii&lt;/a&gt; for questions regarding the TRS-80 models.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2018-05-02T08:25:37.693" LastActivityDate="2018-05-02T08:25:37.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6365" PostTypeId="4" CreationDate="2018-05-02T08:25:37.693" Score="0" Body="For questions regarding generic products of Radio Shack (aka Tandy) " OwnerUserId="276" LastEditorUserId="276" LastEditDate="2018-05-02T08:25:37.693" LastActivityDate="2018-05-02T08:25:37.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6366" PostTypeId="2" ParentId="2998" CreationDate="2018-05-02T15:31:12.173" Score="2" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari BASIC&lt;/a&gt; had a fill operation, but for some reason this was not mapped to a command called FILL, but instead one called XIO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The background here is that they couldn't fit the BASIC into an 8k ROM. The solution was to move some of the more generic operations out of BASIC into the OS ROM, which had some left-over room. So they moved the floating point routines and graphics over to the OS, and then wrote stubs in BASIC that accessed them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although they mapped most of these routines back into BASIC, like PLOT and LINETO, for whatever reason the didn't do a FILL. So in order to access it, you had to use the catch-all OS command, XIO (the IO is for input/output, which is what you would normally use it for). A little mystery to be solved there...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One upside to the code being relocated to the OS was that it was also available to other programming languages. One downside was that the floating point routines were very slow, so anyone that used them also got that slow performance.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-05-02T15:31:12.173" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6367" PostTypeId="2" ParentId="2731" CreationDate="2018-05-02T19:37:05.570" Score="4" Body="&lt;p&gt;The Epson HX20 from 1981 uses an LCD module which uses surface mount driver ICs.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-05-02T19:37:05.570" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6368" PostTypeId="2" ParentId="160" CreationDate="2018-05-02T20:44:11.120" Score="2" Body="&lt;p&gt;If electromechanical computers count, then it would be remiss to ignore Konrad Zuse's relay-based computers, built just before and during WW2.  These were, as I understand it, programmable digital computers, and can therefore be considered alongside the Heath Robinson and the Colossus as the first practical examples of such a thing.  I don't believe they were ever used by the German war machine, for which we can probably be grateful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though not what we'd now call a &lt;em&gt;programmable&lt;/em&gt; computer, the Bombe machines used to help crack Enigma were sophisticated electromechanical calculators, devoted to a specific (and quite vital) task which modern computers can perform only slightly faster.  Rather than relays, the active components were rotors with circular arrays of electrical contacts, very similar to the Enigma machine itself but on a much bigger scale.  The &quot;menus&quot; they were configured with could be considered programming of a sort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The oldest still-extant digital computer is the Harwell Dekatron, which uses then-standard Post Office relays for sequencing control, but which however uses cold-cathode and thermionic valves for the high-frequency (about 100Hz) pulse circuit, memory and some calculation circuits.  Although much slower than many of its contemporaries due to its heavy reliance on relays (Post Office relays are very big and slow), it was much more reliable and therefore useful, and probably cost much less to build and run.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2018-05-02T20:44:11.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6369" PostTypeId="2" ParentId="3070" CreationDate="2018-05-02T21:10:01.703" Score="3" Body="&lt;p&gt;The Harwell Dekatron, which is the oldest computer still in working order, has lights on its main control panel to indicate whether it completed its program successfully or halted due to an error.  (If it was still running, you would hear the relays clicking and/or the very loud tape reader.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its main output was either by punching a paper tape or printing on a modified teletype.  I don't think it could print text, only numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An unusual feature of the machine was that you could also read the contents of main memory and the arithmetic accumulator directly by eye, due to the ionisation path maintained by the Dekatron tubes.  This must have been a great help for troubleshooting.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2018-05-02T21:55:36.193" LastActivityDate="2018-05-02T21:55:36.193" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6370" PostTypeId="2" ParentId="6325" CreationDate="2018-05-02T21:38:02.940" Score="4" Body="&lt;p&gt;You can take a look at my project RunCPM.&#xA;Just go to &lt;a href=&quot;https://github.com/MockbaTheBorg/RunCPM&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/MockbaTheBorg/RunCPM&lt;/a&gt;&#xA;It builds on Windows, Linux, Mac, Arduino (DUE), etc.&#xA;It doesn't require a disk image, keeping all the files on the host operating system filesystem, which makes things easier, I believe.&#xA;Feel free to give it a try. I would love to hear back with test results.&lt;/p&gt;&#xA;" OwnerUserId="8583" LastActivityDate="2018-05-02T21:38:02.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6371" PostTypeId="2" ParentId="4382" CreationDate="2018-05-02T21:47:24.560" Score="4" Body="&lt;p&gt;It's reasonable to assume that a 64Kbit DRAM chip would have about the same die size as a 16Kbit DRAM chip, but be made on a more advanced CMOS process with half the feature size.  Manufacturing 16Kbit DRAMs on the new process would probably not be economic, and neither would making 64Kbit DRAMs on the old process once the new process existed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, at some point shortly after the introduction of that new CMOS process, the two chips would be about the same size and therefore price.  Furthermore, computers would then be able to use fewer chips to support useful RAM sizes, permitting a reduction in the size (and thus cost) of their PCBs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a data point, the difference in price between the BBC Micro Model A (16KB) and B (32KB) was £100 in 1982, when 16Kbit DRAM chips were standard.  The RAM quantity wasn't the only difference between these models, but it must have contributed significantly.  Let's be conservative and say it was £4 per KB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In 1984, the February edition of Acorn User featured a 16KB &quot;Sideways RAM&quot; expansion board, using 16Kbit DRAM chips, for £35, while the July edition featured a 128KB model (from the same manufacturer!) using 64Kbit DRAM chips, for £40.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's a reduction from about £2 per KB to £0.30 per KB within 5 months, and the time requested by the OP must lie within that range.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2018-05-02T22:44:51.647" LastActivityDate="2018-05-02T22:44:51.647" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6372" PostTypeId="2" ParentId="5820" CreationDate="2018-05-02T23:12:28.647" Score="1" Body="&lt;p&gt;If I am right with how you describe it I remember the app.  It was called TraceRoute and there are plenty of modern equivalents either online or for download which are easily found on Google using the TraceRoute name as a search.&lt;/p&gt;&#xA;" OwnerUserId="8584" LastActivityDate="2018-05-02T23:12:28.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6373" PostTypeId="2" ParentId="3010" CreationDate="2018-05-03T00:12:50.367" Score="2" Body="&lt;p&gt;The pattern, combined with the horizontal shadow effect visible in places, suggests to me that some EMI is getting into the video signal from some nearby clock signals.  It's also possible that the video cable has the wrong impedance relative to the high-frequency interfaces at either end, which may possibly be caused by age.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These effects might not have been visible on a lower-resolution, higher-contrast login screen for a variety of reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a new video cable doesn't fix the problem, you may need to look for faults (such as a missing shield connection) inside the machine and/or the display, near the video ports.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2018-05-03T00:12:50.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6374" PostTypeId="2" ParentId="2859" CreationDate="2018-05-03T00:16:51.557" Score="1" Body="&lt;p&gt;It's likely that parts of the drive mechanism are worn, out of adjustment, or need lubricating.  Tape cassette decks are all very similar to each other in principle, so I suggest looking for a generic repair guide.  Even some aspects of VCR repair guides are likely to be relevant.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2018-05-03T00:16:51.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6375" PostTypeId="2" ParentId="2181" CreationDate="2018-05-03T00:26:27.913" Score="6" Body="&lt;p&gt;In general, a wide ribbon connector attached to a keyboard implies that the physical row/column matrix is exposed there.  Additional wires in the ribbon may be used to control LEDs and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this particular case, &lt;a href=&quot;https://deskthority.net/wiki/Zenith_Supersport_SX&quot; rel=&quot;noreferrer&quot;&gt;an approximate pinout is readily available&lt;/a&gt;.  In other cases, you should be able to identify which pins are shorted together by which keys using a multimeter - tedious but not very difficult.  For keyboards with N-key rollover support (like this one), diodes mean that the polarity of the multimeter leads matters too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have the pinout and matrix layout, you should be able to adapt any of the many existing &quot;old keyboard to USB&quot; projects out there to your needs.  There are, for example, quite a few for the IBM Model M.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2018-05-03T00:26:27.913" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6376" PostTypeId="2" ParentId="1637" CreationDate="2018-05-03T02:21:12.353" Score="6" Body="&lt;p&gt;In the realm of microcomputers specifically, the BBC Micro of 1981 had &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_MOS&quot; rel=&quot;noreferrer&quot;&gt;a very sophisticated kernel in ROM&lt;/a&gt; for a machine of its class.  There were a number of defined entry points that both language ROMs and user programs were expected to use to interface with the hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programs which relied exclusively on these interfaces could expect to run correctly on future versions of the BBC Micro &lt;em&gt;and&lt;/em&gt; on the 6502-based incarnations of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Tube_(BBC_Micro)&quot; rel=&quot;noreferrer&quot;&gt;Second Processor expansions&lt;/a&gt;.  Much of this functionality was exposed in a programmer-friendly manner by the included version of BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, to draw text or graphics on the screen, you were expected to send ASCII characters, control codes and escape sequences to the VDU driver through the OSWRCH entry point at &amp;amp;FFEE - which was always present, even if the display memory had been remapped into the shadow bank (on the Master) or simply didn't exist in your memory space (on the Second Processor).  Most graphics operations could be specified through a six-byte escape sequence corresponding to the BASIC PLOT statement.  To check the colour of a pixel, or to perform a variety of auxiliary operations such as hiding the text cursor, the more general OSBYTE entry point could be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some games found this interface too restrictive for adequate performance, so they had to access display memory directly.  These games were consequently incompatible with the Second Processor and Shadow RAM, but could still be run on a machine so equipped, by temporarily disabling those features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other &lt;a href=&quot;http://mdfs.net/Docs/Comp/BBC/API/&quot; rel=&quot;noreferrer&quot;&gt;entry points&lt;/a&gt; dealt with handling a very basic command shell, filesystem operations (abstracted so that you didn't need to care about tape/floppy/HDD/network differences), and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This approach to constructing an operating system was considered so successful that it was copied very closely in the subsequent Acorn Archimedes series, which introduced the now-ubiquitous ARM CPU to the world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The story goes that a more professional microkernel-based OS (ARX) was being developed for the Archimedes, but that it was so slow and memory-hungry that it would have ruined the machine for its intended market.  A large part of that was because it was written in Modula-2 via an incredibly inefficient compiler; to multiply two integers it would emit 25 ARM instructions and &lt;em&gt;then&lt;/em&gt; call a subroutine.  (The ARM2 could already do that with a single instruction.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A demo was arranged, where the ARX devs proudly showed off sixteen clocks running on their desktop - under which load their top-of-the-line 4MB machine was swapping heavily, and each clock only updated every several seconds.  The other team came in with a 256KB machine running the MOS-derived OS (Arthur), and they had sixteen clocks written in BBC BASIC, all running smoothly.  ARX was cancelled the next day, and Arthur eventually became RiscOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, that means you can still &lt;a href=&quot;https://www.riscosopen.org/forum/forums/12/topics/9481&quot; rel=&quot;noreferrer&quot;&gt;call OSWRCH and OSBYTE natively&lt;/a&gt; on a Raspberry Pi!&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2018-05-03T02:21:12.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6377" PostTypeId="1" AcceptedAnswerId="6379" CreationDate="2018-05-03T05:30:38.420" Score="9" ViewCount="384" Body="&lt;p&gt;The HP/1000 was considered like a 16-bit &quot;expansion&quot; of the 12-bit DEC PDP-8.&amp;nbsp; Its addressing mode for loads and stores similarly used pages, base page and current page, and allowed for indirection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, during indirect load or store, the HP/1000 used only 15-bits of the memory word as pointer to address memory, reserving the high bit in the loaded pointer to request an additional indirection: as long as the loaded pointers had their high bit set the HP/1000 would continue indirection for that instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One architectural cost for this feature was 1 bit of address space, so given this feature, the computer could only access 2&lt;sup&gt;15&lt;/sup&gt; words instead of 2&lt;sup&gt;16&lt;/sup&gt; words &amp;#8212; effectively halving the potential address space.&amp;nbsp; This extra capacity and much more was in demand for many applications, and, like the PDP-8, they had to use alternative mechanisms to address larger capacities (they would have had to do this anyway, but an additional 32k of directly addressable words would have been put to good use).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interested in any code sequences that would have motivated architecting or would have benefited from using the multiple/repeating indirection feature.&amp;nbsp; (I did compiler work for the HP/1000 and never used that feature!)&lt;/p&gt;&#xA;" OwnerUserId="7985" LastEditorUserId="3748" LastEditDate="2018-11-26T20:15:13.187" LastActivityDate="2020-06-23T15:51:50.417" Title="What was the value of the HP/1000 repeated indirection capability?" Tags="&lt;hp&gt;&lt;architecture&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6378" PostTypeId="2" ParentId="6377" CreationDate="2018-05-03T07:06:05.360" Score="1" Body="&lt;p&gt;I'm not familiar with the HP/1000, so if you get an answer from someone with specific knowledge, you should accept that one. However:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In thirty-six years of programming, I have never heard of a situation where that feature would be particularly useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, I have seen a tendency of good engineers to reflexively generalize, i.e. to follow an implicit rule 'allow the general case whenever it won't cost much extra' rather than 'stick to the special case unless there is a need for the general case'. Certainly there is a use for a single level of pointer indirection, and the direct cost of providing N levels would be small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The indirect cost of sacrificing half the address space was, as you say, large. But according to Wikipedia, that machine was invented in 1966. Did address space look like a significant constraint at that time? Or did it look like 32K should be enough for anyone?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-05-03T07:06:05.360" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6379" PostTypeId="2" ParentId="6377" CreationDate="2018-05-03T07:28:09.573" Score="5" Body="&lt;p&gt;It's a very handy feature for linked lists (*1). One can access the last entry of a linked list in a single machine instruction, as if it was used directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets assume a list of blocks, where data always has to be added to the last one - like in a high throughput logging, where one (or more) tasks add data and another one writes it to disk. Adding data by the loggers needs to be fast, so with this instruction they seamlessly address the block to be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another application would be a stack organized as a linked list. Here also the last block is usually the one to be accessed. The addressing will do so without much management and at maximum speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Siemens X and Z CPUs (/370 compatible) had similar (even more more powerful) linked list instructions added. Using them within &lt;a href=&quot;https://en.wikipedia.org/wiki/BS2000&quot; rel=&quot;nofollow noreferrer&quot;&gt;BS2000&lt;/a&gt; (their Mainframe-OS) for stack handling did speed up the OS by ~20% over all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There where  microprocessors with the same features - like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Signetics_2650&quot; rel=&quot;nofollow noreferrer&quot;&gt;Valvo 2650&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Useless features get rarely implemented - especially not from multiple teams in different machines/processor. This allone should quality as a proof that it'll be useful.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-05-04T07:22:49.377" LastActivityDate="2018-05-04T07:22:49.377" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6381" PostTypeId="1" AcceptedAnswerId="6384" CreationDate="2018-05-03T15:21:26.360" Score="63" ViewCount="22185" Body="&lt;p&gt;Windows and MS-DOS use the control characters CR+LF (carriage return, line feed) for new lines, while Unix uses just LF.&lt;/p&gt;&#xA;&lt;p&gt;As far as I know CR+LF made sense for systems controlling a real teletypewriter, which has an actual carriage. LF only may makes sense for teletypewriter with automatic carriage return, or just as simplification on systems which do not need the physical interpretation of these characters anymore.&lt;/p&gt;&#xA;&lt;p&gt;Now I wonder why MS-DOS, being a rather recent OS, is using CR+LF while Unix, which was one of the OSes operated from teletypewriters, only uses LF. It seems like it should be the other way around.&lt;/p&gt;&#xA;" OwnerUserId="7966" LastEditorUserId="15334" LastEditDate="2021-02-12T14:37:31.823" LastActivityDate="2021-02-12T14:37:31.823" Title="Why is Windows using CR+LF and Unix just LF when Unix is the older system?" Tags="&lt;ms-dos&gt;&lt;unix&gt;&lt;design-choices&gt;&lt;character-sets&gt;" AnswerCount="4" CommentCount="13" FavoriteCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="6383" PostTypeId="1" AcceptedAnswerId="6385" CreationDate="2018-05-03T15:45:05.133" Score="13" ViewCount="515" Body="&lt;p&gt;I was just reading a &lt;a href=&quot;https://www.vogons.org/viewtopic.php?f=61&amp;amp;t=42113&quot; rel=&quot;noreferrer&quot;&gt;thread&lt;/a&gt; on Vogons about OnTrack and EZ-Drive setup, and it occurred to me that I have no idea how they work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please explain why the barrier existed and then how the overlay programs circumvented them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="81" LastActivityDate="2018-05-03T17:04:14.073" Title="How did Drive Overlay programs break BIOS disk barriers on older PCs?" Tags="&lt;software&gt;&lt;ibm-pc&gt;&lt;bios&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6384" PostTypeId="2" ParentId="6381" CreationDate="2018-05-03T15:46:46.233" Score="105" Body="&lt;p&gt;This is covered largely in &lt;a href=&quot;https://en.wikipedia.org/wiki/Newline#History&quot; rel=&quot;noreferrer&quot;&gt;the history section of Wikipedia’s entry on newlines&lt;/a&gt;. Basically there are two primary lineages of operating systems leading to modern-day desktop usage:  Windows on the one hand, and Unix-like systems on the other.&lt;/p&gt;&#xA;&lt;p&gt;Windows descends from MS-DOS (because initially it was implemented on top of DOS), which itself inherits much of its behaviour from CP/M. CP/M inherited its line-endings from DEC systems, which used CR+LF because that’s the character sequence required to move the cursor to the start of the next line on ASR-33 teletypes (among others), which were common teletypes used with DEC systems. On most teletypes, CR and LF do just what their names imply: carriage return returns the carriage (carrying the paper) to the right, so the hammers or type head are above the left of the page (or equivalently, it returns the type head to the left of the page, depending on which part of the assembly is mobile), and line feed feeds the page one line up. The order was important: carriage return takes some time to execute, so starting it first meant that the line feed would happen in parallel to the carriage return, and by the time the line feed was processed, the carriage had a decent chance of having finished, so the next character could be processed safely (otherwise it ended up smeared across part of the page as the carriage finished flying back).&lt;/p&gt;&#xA;&lt;p&gt;Unix was inspired by Multics, whose developers chose LF as the line-ending character, relying on device drivers to translate that to whatever character sequence was required on actual devices. LF is &lt;a href=&quot;https://doi.org/10.1145/1476936.1477030&quot; rel=&quot;noreferrer&quot;&gt;defined&lt;/a&gt; as&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;New Line. Move carriage to left edge&#xA;of next line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;and its developers wrote, in relation to control characters,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The objective of typewriter device independence&#xA;also has some implications for control characters. The&#xA;Multics strategy here is to choose a small subset of the&#xA;possible control characters, give them precise meanings,&#xA;and attempt to honor those meanings on every device,&#xA;by interpretation if necessary.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(I recall discussions on this topic where the idea was floated that the Multics developers did this in order to save disk space, which seems incorrect given the above. Another possible consideration is that relying on the device driver to handle this meant that each driver could adjust the timing as necessary, without the system having to care about it — CR+LF in particular was chosen partly for timing reasons. That ended up not being sufficient, and Unix &lt;code&gt;stty&lt;/code&gt; &lt;a href=&quot;https://danhalbert.org/more.html&quot; rel=&quot;noreferrer&quot;&gt;allows users to choose one of several CR durations&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;Some systems used other conventions (see &lt;a href=&quot;https://en.wikipedia.org/wiki/Newline#Representations_in_different_character_encoding_specifications&quot; rel=&quot;noreferrer&quot;&gt;this table&lt;/a&gt;); many systems, including all of Apple’s computers before OS X, used a single CR, and obviously non-ASCII systems had their own line-ending characters (this includes IBM mainframes and 8-bit Atari home computers).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-12T09:09:07.843" LastActivityDate="2021-02-12T09:09:07.843" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="6385" PostTypeId="2" ParentId="6383" CreationDate="2018-05-03T16:19:16.007" Score="16" Body="&lt;p&gt;The reference for this is &lt;a href=&quot;http://www.dewassoc.com/kbase/hard_drives/hard_drive_size_barriers.htm&quot; rel=&quot;noreferrer&quot;&gt;DEW Associates’ pages on the topic&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multiple barriers have existed in the history of hard drives on PC compatibles. The main ones are the barriers at 528 MB (504 MiB) barrier, 2.1 GB, 4.2 GB and 8.4 GB. They stem from various limitations in the interfaces used to talk to hard drives. Originally, these interfaces were based on an addressing scheme involving cylinders, heads and sectors (CHS). Early IDE supported up to 65536 cylinders, 16 heads, and 256 sectors, for up to 128 GiB; but the PC BIOS (see for example &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/13/6.html&quot; rel=&quot;noreferrer&quot;&gt;interrupt 0x13 function 2&lt;/a&gt;) supported 1024 cylinders, 256 heads, and 63 sectors, and the intersection of these capabilities led to a limit of 504 MiB (1024 cylinders, 16 heads, and 63 sectors). The other limits have similar causes. The ultimate limit for DOS is the 8.4 GiB barrier which corresponds to the maximum addressable size using the BIOS interrupt 0x13 functions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Drive managers such as OnTrack or EZ-Drive work by installing a new boot block on the hard drive, and installing a new interrupt handler for 0x13 which translates between an optimal geometry (from a DOS perspective), supporting up to 8.4 GiB, and whatever geometry the underlying drive actually supports. In many cases they can eschew geometry considerations altogether by using LBA, logical block addressing: this views hard drives as linear collections of blocks, and addresses those blocks using a single index (dropping the cylinder/head/sector split). In other cases, the head index is split across the cylinder and sector index (or even the cylinder index only), so that 256 heads (as supported by the BIOS API) can be used in spite of IDE’s 16-head limit. Once a drive manager is installed, it is loaded at boot, installs its interrupt handler, and proceeds to boot the operating system on the drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Drive managers could do this safely by “hiding” from the operating system; see &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/5978/79&quot;&gt;How did DOS know where to load itself in upper memory?&lt;/a&gt; for techniques to achieve this.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-05-03T17:04:14.073" LastActivityDate="2018-05-03T17:04:14.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6386" PostTypeId="2" ParentId="5921" CreationDate="2018-05-03T16:36:29.130" Score="4" Body="&lt;p&gt;Couldn't find an errata either but you can download the code as a TZX file from &lt;a href=&quot;http://www.worldofspectrum.net/infoseek.cgi?regexp=%5ESpectrum%20Machine%20Language%20for%20the%20Absolute%20Beginner$&amp;amp;pub=%5EMelbourne%20House$&amp;amp;loadpics=1&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;World of Spectrum&quot;&gt;World of Spectrum&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can either load that into an emulator and look at the code there (if you want to continue to type it in yourself...best way to learn!) or you can get WinTZX2TAP from &lt;a href=&quot;http://www.worldofspectrum.net/utilities.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;World of Spectrum Utilities&lt;/a&gt; to convert it to a TAP then get the basic listing using Tappeto (also on WOS Utils).&lt;/p&gt;&#xA;&lt;p&gt;One thing I noticed when I did all that was Tappeto shows a back-tick on line 130 (like the book listing) but when it's loaded into FUSE it appears as a UK pound sign (£). Not sure what that's about!&lt;/p&gt;&#xA;&lt;p&gt;EDIT: Just found this on Wikipedia: The ZX Spectrum character set is the variant of ASCII used in the British Sinclair ZX Spectrum family computers. It is based on ASCII-1967 but the characters ^, ` and DEL are replaced with ↑, £ and ©.&lt;/p&gt;&#xA;" OwnerUserId="1924" LastEditorUserId="1924" LastEditDate="2021-01-04T21:51:34.430" LastActivityDate="2021-01-04T21:51:34.430" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6387" PostTypeId="1" CreationDate="2018-05-03T16:55:12.770" Score="12" ViewCount="1106" Body="&lt;p&gt;Back in the day I had an Amiga 2500/30 with an A2286 as my &quot;swiss army knife&quot; home computer; not only did I have the ability to run MacOS (ShapeShifter) at native speed, but the 8MHz 286 bridgeboard allowed me to do anything IBM PC related. However, I was always disappointed that Windows was dog slow on the A2286. To make matters worse, it felt that whenever disk activity happened via the Amiga-hosted bridge (to a dedicated partition, not a hardfile) the speaker would beep a few times a second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember reading something about the A20 gate not being completely decoded and that there was a hardware fix by simply running a wire between two locations. Simple enough, but unfortunately it ended up frying a board for me so I'm not sure it ever really worked. (Regrettably, I ended up getting another A2286 instead of upgrading to the A2386)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was the performance so bad and why did it beep so much?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2020-09-13T19:15:08.313" Title="Why was Windows 3.1 so dreadfully slow on an Amiga A2286 bridgeboard?" Tags="&lt;amiga&gt;&lt;windows-3.x&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6388" PostTypeId="1" AcceptedAnswerId="6394" CreationDate="2018-05-03T12:42:05.773" Score="35" ViewCount="9803" Body="&lt;p&gt;As can be seen in the image below, the dungeons of &lt;em&gt;Legend of Zelda&lt;/em&gt; fit quite well together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ian-albert.com/games/legend_of_zelda_maps/zelda-dungeons.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MmtY8.png&quot; alt=&quot;A map of all Zelda dungeons&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Were they designed to be, or is this just a coincidence?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this make them easier to store, with the empty spaces used for caves for instance?&lt;/p&gt;&#xA;" OwnerUserId="44" OwnerDisplayName="SQB" LastEditorUserId="44" LastEditDate="2018-05-04T19:46:58.860" LastActivityDate="2018-05-04T19:46:58.860" Title="Were the dungeons in Legend of Zelda designed to fit together?" Tags="&lt;nes&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6389" PostTypeId="2" ParentId="6388" CreationDate="2018-05-03T17:24:47.823" Score="24" Body="&lt;p&gt;Typically in cases like this, they are designed to fit together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, it's not so much that they are separate maps that happen to fit together, but rather it's just one big map and each 'dungeon' is simply a piece of it.  This can simplify the game design because what appears to the player as moving to a new map can be coded internally as simply moving the player to a new place on the &lt;em&gt;same&lt;/em&gt; map.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2018-05-03T17:48:51.173" LastActivityDate="2018-05-03T17:48:51.173" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6390" PostTypeId="2" ParentId="6388" CreationDate="2018-05-03T19:33:13.617" Score="11" Body="&lt;p&gt;I don't know whether this was deliberate for Legend of Zelda, or whether it used any of these techniques, but here are some benefits of doing so:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It's easier to keep track of the levels if you're storing them like that in the ROM.&lt;/li&gt;&#xA;&lt;li&gt;You can draw the whole game on one big piece of paper.&lt;/li&gt;&#xA;&lt;li&gt;Going off the edges of the dungeons can be implemented more easily if they're stored like that in the ROM (dungeons don't need to store which dungeons they connect to).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="278" LastActivityDate="2018-05-03T19:33:13.617" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6391" PostTypeId="2" ParentId="6387" CreationDate="2018-05-03T20:35:46.343" Score="3" Body="&lt;p&gt;An educated guess - the video was really handled by the Amiga, so that it could appear in an Amiga desktop window.  (You could hook up a video card into one of the ISA slots, but then you'd need a monitor hooked to that video card's video port.)  Assuming you were not using a separate monitor, that would explain the poor performance.  In DOS mode, the graphical impact would be minimal to none most of the time, so you wouldn't notice the poor video performance.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2018-05-03T20:35:46.343" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6392" PostTypeId="2" ParentId="4693" CreationDate="2018-05-03T22:52:47.160" Score="3" Body="&lt;p&gt;The reason there needs to be a visible &quot;half carry&quot; bit is a combination of two factors.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;BCD support&lt;/li&gt;&#xA;&lt;li&gt;Interrupt handling.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;As other answers have pointed out the Z80 provided BCD support through an adjustment instruction run after the addition or subtraction operation (this constrasts with the 6502 that implemented it as a mode flag). This instruction needs to know whether or not there was a carry from the high nibble to the low nibble to correctly adjust the result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why does that flag need to be visible to the user as part of a status register rather than just an internal flag? the answer is interrupt handling. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider what happens if an interrupt happens between an arithmetic instruction and the corresponding DAA instruction. The interrupt must save the state of the half carry so it can be restored and correctly used by the DAA instruction after the interrupt returns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is why many flags that one would normally think of as &quot;internal&quot; are grouped together into a user-visible status register so they can be easilly saved and restored on interrupt.&lt;/p&gt;&#xA;" OwnerUserId="499" LastActivityDate="2018-05-03T22:52:47.160" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6393" PostTypeId="1" AcceptedAnswerId="8650" CreationDate="2018-05-04T01:02:10.377" Score="6" ViewCount="317" Body="&lt;p&gt;Has anyone else experienced that when running AmigaOS 4.1 inside WinUAE that they can't type the &lt;code&gt;&amp;lt;&lt;/code&gt; or &lt;code&gt;&amp;gt;&lt;/code&gt; characters? I have a mostly bog-standard American QWERTY keyboard, no special emulation settings for the keyboard, and have &quot;American&quot; set as the keyboard type in the OS. The unshifted &lt;code&gt;,&lt;/code&gt; and &lt;code&gt;.&lt;/code&gt; work just fine for these keys, it's only when shifting for the angle brackets that results in nothing being typed at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Versions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Amiga Forever 7 Plus Edition 7.2.*&lt;/li&gt;&#xA;&lt;li&gt;RetroPlatform Library 7.1.0.*&lt;/li&gt;&#xA;&lt;li&gt;WinUAE 3.6.* - 4.1.* (both 32- and 64-bit builds)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The characters can be properly typed with WinUAE directly, but I cannot recreate my configuration from Amiga Forever (I tried but I keep getting something wrong and I don't know what). So I need a solution that works with AF as opposed to WinUAE itself.&lt;/p&gt;&#xA;" OwnerUserId="6524" LastEditorUserId="6524" LastEditDate="2018-12-23T23:35:47.513" LastActivityDate="2019-01-03T17:24:49.260" Title="Can't type angle bracket characters in AmigaOS 4.1 on WinUAE" Tags="&lt;amiga&gt;&lt;emulation&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6394" PostTypeId="2" ParentId="6388" CreationDate="2018-05-04T02:00:16.450" Score="31" Body="&lt;p&gt;As seen in that incorrect&lt;sup&gt;&amp;dagger;&lt;/sup&gt; image, the levels seem to merge well.  This wasn't a case of &quot;Let's take these shapes, and see if they... whoa!  They fit together!&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was more like, &quot;Here's a big rectangle.  Let's cut away some shapes.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's kind of like starting with a big batch of cookie dough, or silly putty, and cutting shapes out of that.  Then, at the end, saying, &quot;Look at how all those shapes fit neatly together!&quot;  Well, yes, of course they do.  Because having all the pieces fit together was not an &quot;end product&quot; that they had to work to try to create; it was actually the starting point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;A HREF=&quot;https://tcrf.net/Prerelease:The_Legend_of_Zelda&quot; rel=&quot;noreferrer&quot;&gt;The Cutting Room Floor: Prerelease: The Legend of Zelda&lt;/A&gt; has some information, including those drawn maps, and interview info with Miyamoto about this.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Tezuka:&lt;/strong&gt; Basically, we were going to make lots of dungeons using one square per room, and lay them out like a jigsaw puzzle.&lt;BR&gt;&#xA;  &lt;strong&gt;Iwata:&lt;/strong&gt; In order to fit in as many dungeons as possible given the limited memory, you were making them like you were doing a puzzle.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Another spot on the web that discusses this is &lt;A HREF=&quot;http://www.siliconera.com/2010/01/26/thanks-to-a-mistake-the-legend-of-zelda-got-a-second-quest/&quot; rel=&quot;noreferrer&quot;&gt;Siliconera.com article: &quot;Thanks To A Mistake The Legend Of Zelda Got A Second Quest&quot;&lt;/A&gt;, which also shows the layout of the levels in the original hand-drawn maps seen at this article on the web.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;Mistake&quot; in question (as noted by &lt;A HREF=&quot;https://tcrf.net/Prerelease:The_Legend_of_Zelda&quot; rel=&quot;noreferrer&quot;&gt;The Cutting Room Floor: Prerelease: The Legend of Zelda&lt;/A&gt; and &lt;A HREF=&quot;http://www.siliconera.com/2010/01/26/thanks-to-a-mistake-the-legend-of-zelda-got-a-second-quest/&quot; rel=&quot;noreferrer&quot;&gt;Siliconera.com article: &quot;Thanks To A Mistake The Legend Of Zelda Got A Second Quest&quot;&lt;/A&gt;) is that during the game's development, half of the memory used for map layout got lost for a while.  So they crammed in the levels in the remaining space.  Then the memory got found again, but they determined that the game length felt pretty good after they crammed things into half the space, so instead of making the levels twice as wide to explore through, they just made other levels and made it so that you access them through the &quot;second quest&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having this &quot;mistake&quot; revealed helps to explain why there is a pre-release screenshot, that you can view on &lt;A HREF=&quot;https://tcrf.net/Prerelease:The_Legend_of_Zelda&quot; rel=&quot;noreferrer&quot;&gt;The Cutting Room Floor: Prerelease: The Legend of Zelda&lt;/A&gt;, that shows Level 2, Moon, that looks twice as wide.  At one point, the levels we have were apparently going to have about the same shape, but twice as many underworld rooms per quest (and half as many quests).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&amp;dagger;&lt;/sup&gt; So, yes, as noted above, the image used in the Question shows a layout that does not match how the game stores the levels in memory.  Level 9 is actually located west of levels seven and eight, not east of levels seven and eight.  We can see that in the hand-drawn maps shown in the articles mentioned above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the map layout is known.  Some software named &lt;A HREF=&quot;https://www.romhacking.net/utilities/605/&quot; rel=&quot;noreferrer&quot;&gt;Dungeon Master&lt;/A&gt;, a map editor makes clear that if you walk off of any of those five &quot;world&quot; maps, then you leave the area and go back to the overworld screen with the corresponding entrance. (If you leave the overworld, it brings you to the start screen where you get the Wooden Sword). So walking off the outer edges makes it pretty clear what the actual level layout is. Also, walking between levels 9 and 7 is possible with modified walls, so that makes it rather clear that the East side of Level 9 touches Level 7, not the edge of that area of underworld map data.&lt;/p&gt;&#xA;" OwnerUserId="419" LastEditorUserId="419" LastEditDate="2018-05-04T07:52:48.827" LastActivityDate="2018-05-04T07:52:48.827" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6397" PostTypeId="2" ParentId="6381" CreationDate="2018-05-04T15:41:18.550" Score="12" Body="&lt;p&gt;At the time the PC came out, there were at least five common approaches used by ASCII-based devices and systems:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Devices receiving a CR would advance to the start of the next line, and lines were delineated with just a CR.  An LF might behave identically, or might advance to the same spot on the next line, but it wouldn't usually matter because LF codes weren't used much.  This approach allowed arbitrary binary graphic data to be included within files to printed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Devices receiving an LF would advance to the start of the next line, while receipt of a CR would reset them to the start of the current line.  Lines were delineated with LF; CR would generally only be used if necessary to overprint the current line.  This approach allowed arbitrary binary graphic data to be included within files to printed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Devices receiving an CR would reset to the start of the current line, and devices receiving an LF would either advance to the start of the next line or the current position on the next line.  Lines were delineated with CR+LF--a mode of behavior which was inherently compatible with equipment of types #2 or #3.  This approach allowed arbitrary binary graphic data to be included within files to printed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Lines were delineated with just CR, but devices of types #2 and #3 would be accommodated by replacing any instances of CR with CR+LF.  &lt;em&gt;This approach would be prone to malfunction when printing files containing binary graphics data.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Lines were delineated with just LF, but devices of types #2 and #3 would be accommodated by replacing any instances of LF with CR+LF.  &lt;em&gt;This approach would be prone to malfunction when printing files containing binary graphics data.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Approach #4 was used by the Apple II among others; approach #5 was used by&#xA;Unix.  When the PC came out, however, many popular printers including the&#xA;Epson MX-80, were configurable to process CR and LF using approach #1 or #3, but not #2, and they also handled bitmap graphics with a command that&#xA;would take a specified number of bytes as binary pixel data that needed to&#xA;sent verbatim even if it contained the bit patterns 00001101 or 00001010.&#xA;The fact that printers would have problems with #2, #4, or #5 meant that&#xA;the if MS-DOS wanted to be suitable for use with such printers it would need&#xA;to adopt approach #1 or #3.  Of those choices, #1 is slightly more efficient&#xA;but #3 offers more efficient overprinting.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="70" LastEditDate="2018-05-04T15:49:29.267" LastActivityDate="2018-05-04T15:49:29.267" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6398" PostTypeId="2" ParentId="2998" CreationDate="2018-05-05T03:30:46.500" Score="2" Body="&lt;p&gt;As has been stated the problem with standard flood fill is that the buffer size can be enormous so it was somewhat rare for the 8 bit era computers to have a bundled fill routine that didn't impose limitations.&#xA;I remember playing with a diamond fill variation in the 80s - the Wiki article refers to it as &quot;4-way fill&quot;.&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Flood_fill&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Flood_fill&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disadvantage I found is that it executes somewhat slower than a flood fill.  But the advantage is that the memory requirement is a lot less - the maximum number of buffer entries would be about 4 times the longest possible 45 degree diagonal line supported by the bitmap mode you're using.&#xA;As a starting point I used the program provided as DATA within an article in Analog Computing #16 from Feb 1984 (an Atari centred magazine).&#xA;&lt;a href=&quot;https://web.archive.org/web/20060308092706fw_/http://www.cyberroach.com:80/analog/an16/default.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://web.archive.org/web/20060308092706fw_/http://www.cyberroach.com:80/analog/an16/default.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Full copy of the magazine here though it's ~ 130 Meg and very slow to download: &lt;a href=&quot;http://www.atarimania.com/mags/pdf/analog_no_16.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.atarimania.com/mags/pdf/analog_no_16.pdf&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In most applications a constrained flood fill isn't greatly useful.  It'd be OK for something like a drawing program but not so much for a realtime game e.g. Qix.  For something like a graphical adventure that does procedurally generated pics, it'd be OK since you'd obviously test and correct any anomolies during development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I downloaded the PDF I mentioned earlier - painfully slow and the text is hard to select and when you do grab some the OCR is full of errors.&#xA;So, I typed in the 6502 assembly routine for the 4-way flood fill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Someone started a thread over at AtariAge, so grab the routine from it here (hit Spoiler button in the linked thread to expand listing):&lt;br&gt;&#xA;&lt;a href=&quot;http://atariage.com/forums/topic/278446-flood-fill-test/#entry4021426&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://atariage.com/forums/topic/278446-flood-fill-test/#entry4021426&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I get time in the next few days I'll convert to &quot;Psuedo-code&quot; - to make sense of it you'd need to know 6502 assembly.  There's Atari specific stuff in there like pulling A to get passed parameters off the stack, and CIO calls.  The parameter stuff, easy to deal with.&#xA;The CIO stuff - the GET call just expects the pixel value of a given location to be returned in A so could be replaced with a sub call that performs that function, same with the PUT call.  Pixel values are just that - masked and shifted so that packed/chunky values equate to what a user would expect.&#xA;The routine with modification can work on other resolutions so long as they're 0-255 range.  Substantial modification to the program would be needed for larger values since 2 byte entries would be needed.&lt;/p&gt;&#xA;" OwnerUserId="8619" LastEditorUserId="8619" LastEditDate="2018-05-05T05:12:41.820" LastActivityDate="2018-05-05T05:12:41.820" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="6399" PostTypeId="2" ParentId="6377" CreationDate="2018-05-05T05:58:03.137" Score="2" Body="&lt;p&gt;Taking a look at &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_2100#2100_series_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Wikipedia article&lt;/a&gt;, it's pretty clear what the indirection bit was for: to access memory that was not in the current or zero pages (the current page was taken from the program counter register, and you chose which page to access with a page indicator.) It also appears that the HP 1000 didn't have a stack register, so procedure calls used this mechanism as well to store return addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, the indirect bit was a way to optimize for same-page memory accesses but still allow access to the entire memory space. It's pretty clever, IMO.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2018-05-05T05:58:03.137" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6400" PostTypeId="1" AcceptedAnswerId="6403" CreationDate="2018-05-05T09:33:36.553" Score="6" ViewCount="691" Body="&lt;p&gt;Quick question, as the title implies.  I'm in the process of writing an 'OS' for my DIY Z80 computer and one of the things I need to do to help debug any issues during the boot process is send a repeating sequence of data to an IO port in the event of a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem I'm catering for is a very specific one where there is no RAM present - &lt;strong&gt;obviously this means no stack&lt;/strong&gt;, either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what can I get away with in terms of program structure with no stack?  I'm assuming a simple &lt;strong&gt;JP&lt;/strong&gt; instruction and most opcodes that aren't CALL should work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code below doesn't seem to get executed - though this could be a problem specific to the failure mode of my setup, &lt;strong&gt;I just wanted to confirm that the code below will work with no stack?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the error routine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BOOT_ERROR:&#xA;            LD      A,C                 ; Move error code into E&#xA;            LD      E,A                 ;&#xA;            LD      A,%10101010         ; Load HALT code into L&#xA;            LD      L,A&#xA;&#xA;bterr_lp:   LD      A,L                 ; Get code to display&#xA;            OUT     (BASIC_IO),A        ; Update error display&#xA;            LD      BC,$FFFF            ; Set delay (1 sec approx.)&#xA;bterr_plp:&#xA;            NEG                         ; 8 T-states&#xA;            NEG                         ; 8 T-states&#xA;            NEG                         ; 8 T-states&#xA;            NEG                         ; 8 T-states&#xA;            DEC     BC                  ; 6 T-states&#xA;            LD      A,C                 ; 9 T-states&#xA;            OR      B                   ; 4 T-states&#xA;            JP      NZ,bterr_plp        ; 10 T-states&#xA;&#xA;            EX      DE,HL               ; Swap error code with HALT code&#xA;            JP      bterr_lp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="8623" LastActivityDate="2018-05-15T19:19:57.480" Title="Which Z80 opcodes can I use without a stack?" Tags="&lt;z80&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6402" PostTypeId="2" ParentId="6400" CreationDate="2018-05-05T14:39:17.177" Score="3" Body="&lt;p&gt;It's as obvious as you think: nothing other than &lt;code&gt;CALL/RST&lt;/code&gt;, &lt;code&gt;RET/RETI/RETN&lt;/code&gt;, &lt;code&gt;PUSH&lt;/code&gt;, &lt;code&gt;POP&lt;/code&gt;, &lt;code&gt;EX (SP), HL/IX&lt;/code&gt; and the entry into interrupts should use the stack, and the code you've posted should be fine with no stack. Interrupts should be disabled upon reset to avoid a hardware race condition, but obviously NMIs can't be disabled so make sure you've got that input under control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe the first things to check is whether your assembler has compiled for the correct address, and that you're properly decoding for access to your ROM?&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-05-05T14:39:17.177" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6403" PostTypeId="2" ParentId="6400" CreationDate="2018-05-05T15:01:44.603" Score="6" Body="&lt;p&gt;All commands are allowed actually, whether you have RAM or not. It is just the consequences of some of the commands that you have to bear in mind. E.g., using CALL is fine even if you have no RAM, but you need to remember that your current PC will not be saved, that SP will still be decremented twice and that RET will simply return to whatever word in memory is currently pointed to by the SP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More specifically, your code looks absolutely fine. Hence, I'd make sure you actually run it (Z80 executes from PC=0 after the restart - is this where your code is situated?) Also, interrupt processing is somewhat dangerous, especially in the IM 2 mode. If you allowed interrupts and have interrupts triggered by your hardware, the current PC won't be saved once again, and your interrupt processing code will have no default way of knowing where to return to after interrupt has been processed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and by the way, using NEG for time-wasting is not particularly memory efficient, because you are getting 8 t-states per 2 bytes of memory. INC BC : DEC BC will give you 12 t-states in the same memory; PUSH HL : PUSH HL will take 22 t-states and only modify the value of SP.&lt;/p&gt;&#xA;" OwnerUserId="5039" LastEditorUserId="5039" LastEditDate="2018-05-05T15:08:19.327" LastActivityDate="2018-05-05T15:08:19.327" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6404" PostTypeId="2" ParentId="2998" CreationDate="2018-05-06T07:14:06.370" Score="1" Body="&lt;p&gt;The answers specific to each micro are interesting, but I thought it might be useful to compare the classical algorithms from the point of view of theoretical memory requirements.  So I implemented a test harness in C and ran it on my MBP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The test cases are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Field of U's, 8x8 chars on a 640x256 canvas, starting from the top and the bottom.  This is very close to the animation in my BBC Micro answer.&lt;/li&gt;&#xA;&lt;li&gt;Fine grid, 320 columns and 128 rows on a 640x256 canvas.  Filling begins either from the corner, from a row in the centre, or from a column in the centre.  So far only the MZ-800 has passed this test convincingly, but it has a smaller screen resolution than the BBC Micro.&lt;/li&gt;&#xA;&lt;li&gt;Herringbone pattern on a 640x256 canvas, starting from either the first background pixel on the top row, or one in the centre.  Nothing has passed this test in the 8-bit category, except for the BBC Micro with reduced screen resolution (320x256).&lt;/li&gt;&#xA;&lt;li&gt;Yin-Yang symbol rendered 768 pixels across on a 1024x1024 canvas.  This provides several simple shapes which represent a plausible &quot;intended use case&quot; for a compact graphics library.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So far I've got six variants of classical flood-fill algorithms working correctly:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pixel Queue with painting before enqueue.&lt;/li&gt;&#xA;&lt;li&gt;Pixel Stack with painting before enqueue.&lt;/li&gt;&#xA;&lt;li&gt;Pixel Stack with painting after dequeue (this one has the simplest implementation).&lt;/li&gt;&#xA;&lt;li&gt;Scanline Queue with painting before enqueue.&lt;/li&gt;&#xA;&lt;li&gt;Scanline Stack with painting before enqueue.&lt;/li&gt;&#xA;&lt;li&gt;Scanline Stack with painting after dequeue.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Of these, there is a clear categorical difference between the Queue and Stack variants in terms of peak memory usage.  For &lt;em&gt;any&lt;/em&gt; of the test cases above, the Pixel Stack algorithms require such deep stacks that they would have severe difficulty fitting into an 8-bit micro.  For the &quot;grid&quot; and &quot;herringbone&quot; tests, the paint-after-dequeue version additionally requires twice the stack size of the paint-before-enqueue version - as many as 81154 entries for one of the &quot;fine grid&quot; fills, requiring over 240KB RAM just for the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, if we ignore the Yin-Yang test with its huge canvas, the Pixel Queue algorithm gets away with a 513-entry queue on the worst test case, which is starting the &quot;fine grid&quot; fill on a central row (starting on a column requires 512 entries).  If each queue entry requires 3 bytes (one for the Y axis, two for the X), that's a hair over 1.5KB.  One of the Yin-Yang fills requires 1160 entries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The scanline variants show a similar pattern in general, but differ in detail.  The Yin-Yang tests are really their forte, as even the most wasteful stack-based variant requires only 4 queue entries on those.  They struggle a bit more with the more complex tests, with Scanline Queue requiring 959 entries to cope with starting the &quot;fine grid&quot; fill on a central column, and 381 to fill the herringbone from the centre.  These queue entries would also be a bit bigger, requiring 4 bytes each if two X coordinates were packed into 3 bytes.  Memory usage could thus go up to 4KB, though performance is generally improved by dealing with runs of pixels in one go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC Micro (especially the BBC Master, in which the GXR extensions came as standard) has plenty of RAM to make either of the queue-based algorithms work.  However, the 6502 makes constructing queues more than 256 entries long a bit awkward, because it only has 8-bit index registers.  (Multi-byte queue entries can be split across pages, so you can always have 256 of them.)  To index into a longer queue, you need to explicitly construct a pointer in memory.  I assume that GXR implemented a 256-entry queue for ease of implementation and for performance reasons, and because it's far more than adequate (with the Scanline Queue algorithm) for the simple, solid shapes that most people want to fill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also implemented the Floor Painter algorithm, which uses neither a queue nor a stack and is therefore not memory-constrained.  On the Yin-Yang tests, it appears to be similar in performance to the Pixel Queue algorithm, but using less memory.  On the synthetic patterns, it still uses no extra memory, but is &lt;em&gt;very slow indeed&lt;/em&gt;.  I might port this one to the RiscPC instead of the BBC Micro for that reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There might still be a bug in the Floor Painter; filling the herringbone from the centre appears to hang, while filling it from the corner didn't take long compared to the fine grid tests.  I'll poke it some more with the debugger.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2018-05-06T18:41:40.410" LastActivityDate="2018-05-06T18:41:40.410" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6405" PostTypeId="1" CreationDate="2018-05-06T16:34:37.170" Score="2" ViewCount="3616" Body="&lt;p&gt;I have an original Game Boy, and I know that saving is broken because Tetris won’t save my scores. How does saving work in Game Boy games, and are there any games that save without the use of the built-in save system?&lt;/p&gt;&#xA;" OwnerUserId="8634" LastEditorUserId="4744" LastEditDate="2018-05-08T16:20:49.407" LastActivityDate="2019-01-05T22:12:57.373" Title="Game Boy save problem" Tags="&lt;game-boy&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6406" PostTypeId="2" ParentId="6405" CreationDate="2018-05-06T17:22:15.150" Score="6" Body="&lt;p&gt;Tetris didn't have any sort of save state for the high scores. According to &lt;a href=&quot;https://gamefaqs.gamespot.com/gameboy/916375-game-boy/faqs/7700&quot; rel=&quot;nofollow noreferrer&quot;&gt;this list&lt;/a&gt;, it appears that the high scores were effectively reset each time the Gameboy was powered off. It's not that there's some sort of save device in Tetris itself or the Gameboy that's broken, it's simply not designed to save the high scores.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The Gameboy itself has no usable internal storage for storing save data like the later systems do (with systems like the 3DS and Switch even including expandable storage via SD/MicroSD cards). The cartridges back then used a battery backup, which is to say that a portion of RAM was constantly powered by a small battery in the cartridge; as long as the cartridge was powered on periodically, the battery's life would be extended a bit. As these batteries would die, the ability to save after you turned the system off would disappear; you could keep your save data only as long as you could power the Gameboy continuously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since this was a problem, people eventually came up with a solution: external storage. There were devices made, like the Monster Brain, that sat between the cartridge and the system (a &lt;em&gt;dongle&lt;/em&gt;), which would manage that memory and save to a more reliable medium, typically flash storage. In addition, these dongles sometimes allowed you to have multiple save games (e.g. multiple save games of Pokemon were possible), and your save would work even if you used a different cartridge than the original where you started the save.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can fix a particular cartridge, but it requires disassembly of the cartridge and replacing the battery, which needed a security screw driver for the screws that Nintendo used, which you can get as part of a bundle from iFixIt and various hobby/specialist electronics stores. The batteries themselves are small button batteries, and pretty easy to replace, but buying a dongle can save the efforts of having to repair each cartridge individually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; If you have any cartridges that still have batteries in them, you should have the batteries removed or replaced, since cells that old have a chance of leaking, and a leak can easily destroy the motherboard and may present a health hazard if the leak isn't contained in the cartridge. If attempting to perform a repair yourself, you should be extra careful whilst opening the cartridge in case there was a leak, and have a plan to safely dispose of those batteries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each cartridge that offers persistent saves are independent from all others. So, while your Tetris cartridge might not be able to save ever again, it wouldn't affect your Pokemon's cartridge ability to save. There's no single point of failure in the Gameboy that would prohibit any game from saving, as long as the cartridge and system were in working order, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, there are games that do not use battery backup as a save feature; instead, they were called passwords. Games of this sort would require you to write down various letters, numbers, or symbols to &quot;save&quot; your game, and to &quot;load&quot; your game, you would input the password. Games like Mega Man and Prince of Persia had no internal battery, and depended on the player writing down the code correctly and entering it correctly in order to continue playing later. There's a &lt;a href=&quot;https://gamefaqs.gamespot.com/gameboy/916375-game-boy/faqs/7700&quot; rel=&quot;nofollow noreferrer&quot;&gt;complete list of games&lt;/a&gt; that lists the basic characteristics of all Gameboy games, and there are a total of 157 that use passwords as a method for saving and loading game state.&lt;/p&gt;&#xA;" OwnerUserId="2059" LastEditorUserId="2059" LastEditDate="2018-05-07T15:38:27.250" LastActivityDate="2018-05-07T15:38:27.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6407" PostTypeId="1" AcceptedAnswerId="6409" CreationDate="2018-05-06T19:10:39.853" Score="10" ViewCount="1286" Body="&lt;p&gt;I'm in the process of writing an emulator for the Intel 8080.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The description of the CMP instruction from &lt;a href=&quot;http://altairclone.com/downloads/manuals/8080%20Programmers%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;Intel's 8080 programming manual&lt;/a&gt; (see page 20) says the following:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The specified byte is compared to the contents of the accumulator. The comparison is performed by internally subtracting the contents of REG from the accumulator (leaving both unchanged) and setting the condition bits according to the result. In particular, the Zero bit is set if the quantities are equal, and reset if they are unequal. Since a subtract operation is performed, the Carry bit will be set if there is no carry out of bit 7, indicating that the contents of REG are greater than the contents of the accumulator, and reset otherwise.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The following example is given:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Example 1: Assume that the accumulator contains the number 0AH and the E register contains the number 05H. Then the instruction CMP E performs the following internal subtractions:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   Accumulator   = 0AH = 0 0 0 0 1 0 1 0&#xA;+  (-E Register) = -5H = 1 1 1 1 1 0 1 1&#xA;                         ---------------&#xA;                       1 0 0 0 0 0 1 0 1&#xA;                       ^&#xA;                       |&#xA;                       +---- carry = 1, causing the carry bit to be reset&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The accumulator still contains 0AH and the E register still contains 05H; however, the Carry bit is reset and the zero bit reset, indicating E less than A.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This makes sense to me. If there is a carry out as a result of adding the 2's complement of a number to the accumulator, the number is less than the accumulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seems to break however if you compare with zero. For example, suppose the accumulator contains 10 (0AH) and the E register contains 0. Then the instruction CMP E performs the following subtraction:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   Accumulator   = 0AH = 0 0 0 0 1 0 1 0&#xA;+  (-E Register) = -0H = 0 0 0 0 0 0 0 0&#xA;                         ---------------&#xA;                       0 0 0 0 0 1 0 1 0&#xA;                       ^&#xA;                       |&#xA;                       +---- carry = 0, causing the carry bit to be set&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here it seems that the carry bit would be &lt;strong&gt;set&lt;/strong&gt; due to there being no carry out of the high order bit position (as is the case with subtraction instructions on the 8080). This however would indicate that 0 is greater than 10.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that the carry bit should be reset in my example comparison above, but what's causing it to be reset? Is there some sort of internal circuitry in the 8080 that special cases 0 for subtraction operations?&lt;/p&gt;&#xA;" OwnerUserId="8636" LastActivityDate="2018-05-08T12:17:44.673" Title="Intel 8080 - Behaviour of the carry bit when comparing a value with 0" Tags="&lt;emulation&gt;&lt;intel&gt;&lt;8080&gt;&lt;instruction-set&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6408" PostTypeId="2" ParentId="6407" CreationDate="2018-05-06T22:11:13.813" Score="2" Body="&lt;p&gt;Exact answer to this question requires hardware developer knowledge on the 8080 and related CPU family, it may happen than even those dealing with emulation may not know it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two things come to mind:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;exception: second operand of CMP is zero (no need in subtraction at all -&gt; first operand goes to result), thus Carry flag will always be 0;&lt;/li&gt;&#xA;&lt;li&gt;sign extension: CPU may treat two's complement of the zero as 1_00000000, and this &quot;Carry from making 2's complement&quot; inverts the resulting Carry.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2018-05-06T22:11:13.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6409" PostTypeId="2" ParentId="6407" CreationDate="2018-05-07T00:04:44.447" Score="11" Body="&lt;p&gt;The documentation makes the mistake of trying to explain the compare instruction in terms of how the 8080 functions internally and then compounds it by getting that explanation wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out this &lt;a href=&quot;http://www.righto.com/2013/07/reverse-engineering-8085s-alu-and-its.html&quot; rel=&quot;noreferrer&quot;&gt;reverse engineering of the 8085 ALU&lt;/a&gt; for the low-level details of how it works.  The 8085 is very similar to the 8080 so I doubt the 8080 is any different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the key observation is that early ALUs on 8 bit CPUs are implemented as a collection of single bit ALUs.  The various arithmetic (and logical) instructions choose different settings of control lines to choose the ALU operation.  Note that a compare is the same as a subtract except that the result is not written back to &lt;code&gt;A&lt;/code&gt; register.  A subtract requests that the input bit to each single-bit ALU is flipped.  And since a compare is a subtract without carry the carry into bit 0 is set to 0.  However, the subtract also requests that the input carry be flipped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Put it all together and you'll see that a &lt;code&gt;CPI 0&lt;/code&gt; ends up adding &lt;code&gt;0xFF&lt;/code&gt; and carry = 1 to &lt;code&gt;A&lt;/code&gt; register.  This will always generate a carry which is then flipped as they described resulting in always yielding carry 0.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2018-05-07T00:04:44.447" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6410" PostTypeId="1" CreationDate="2018-05-07T07:36:43.670" Score="33" ViewCount="7290" Body="&lt;p&gt;In Pascal, &lt;code&gt;nil&lt;/code&gt; (the pointer value to &quot;nothing&quot;) is a reserved word.  Why wasn't it simply a predefined identifier as &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt; are, for example?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is stated in &lt;em&gt;PASCAL User Manual and Report&lt;/em&gt; p. 109, as well in the ISO documents ISO 7185:1990 (Pascal) and ISO 10206:1990 (Extended Pascal) both in section 6.1.2.&lt;/p&gt;&#xA;" OwnerUserId="8638" LastEditorUserId="4025" LastEditDate="2018-08-08T05:30:43.573" LastActivityDate="2021-02-19T08:28:22.507" Title="Why was nil defined as a reserved word in Pascal?" Tags="&lt;programming&gt;&lt;pascal&gt;" AnswerCount="5" CommentCount="22" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6411" PostTypeId="2" ParentId="6410" CreationDate="2018-05-07T08:04:43.220" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;null pointer has a value reserved for indicating that the pointer does not refer to a valid object&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Null_pointer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; is having good explanation of it. Thus null, or nil, is a value of pointer, chosen by the compiler, which, by default, is not valid within current application environment, or is not reachable by the user code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why this word &quot;nil&quot; ever exists? For convenience - many functions returning pointers sometimes need to return &quot;invalid pointer&quot; to the calling code, and this calling code will check for this making decision on successful execution of the function. Very good example is memory allocation routines. If there's enough RAM to allocate, they will return valid pointer to the area, if no more RAM - it will return value of null (nil), and calling program will know that malloc (for example) failed to find the space requested.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why wasn't it simply a predefined identifier as true and false are, for example?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because Boolean logic constant or variable can only be true or false, but pointer is having wider range of values (up to size of addressable CPU/MPU space).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@JeanPierre:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but I don't see how the range of pointer values affects the possibility to predefine an id with one specific value of this range&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The exact value is selected at the time of compilation by the compiler according to its settings and architecture of the target system. &lt;code&gt;nil&lt;/code&gt; or &lt;code&gt;null&lt;/code&gt; exists to inform compiler to apply this value to all pointer operations. Writing code like &lt;code&gt;if(ptr==0)&lt;/code&gt; may not be portable and not function properly because some systems may have pointer equal to 0 as valid addressable value.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastEditorUserId="8258" LastEditDate="2018-05-12T09:03:09.260" LastActivityDate="2018-05-12T09:03:09.260" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6412" PostTypeId="2" ParentId="6410" CreationDate="2018-05-07T11:07:39.390" Score="20" Body="&lt;p&gt;Unlike Boolean constants, the value of &lt;code&gt;NIL&lt;/code&gt; cannot be assigned a particular type. That's why it has to be parsed in a special way, that is, it has to be a keyword.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another reason for &lt;code&gt;NIL&lt;/code&gt; to be a keyword is to disallow explicitly dereferencing &lt;code&gt;NIL&lt;/code&gt; by writing &lt;code&gt;NIL@&lt;/code&gt;. If &lt;code&gt;NIL&lt;/code&gt; were a predefined constant of any pointer type, even a magic polymorphic pointer, it would have been syntactically allowed.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-05-10T05:48:08.633" LastActivityDate="2018-05-10T05:48:08.633" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6413" PostTypeId="1" AcceptedAnswerId="6990" CreationDate="2018-05-07T12:13:11.587" Score="8" ViewCount="576" Body="&lt;p&gt;For example, the 8250/16550 chip used to handle serial communication is still simulated by modern chipsets and is enumerated by ACPI as PNP0500/PNP0501. You can find datasheets for these chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, any information on how the chip is wired to other devices on the motherboard (e.g. to the PIC) seems to be only present on various hobbyist websites, I can't find anything official.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where do I find such documentation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I want to clarify my question. I understand that discrete chips aren't used for simple functions anymore. However, for compatibility, the hardware must still look the same from the software perspective. If I stay with the 8250 example, the chip has modem signal outputs, like DTR and RTS, but it also has two general-purpose outputs, OUT1 and OUT2. On ATs, OUT2 controlled a gate that enabled/disabled the connection between the INTR output of 8250 and the IRQ4 input of the PIC. As such, OUT2 served as master enable for the UART interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what I meant by wiring. Although there is no external wiring for modern chipsets, if the chipset emulates the old UART and enumerates it as PNP0500, the software must still set the (nowadays virtual) OUT2 output to enable interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I'd like to know where the authoritative documentation for this behavior is. Surely, an OS writer doesn't have to read the specs of all (even future) chipsets to get the driver for PNP0500 right, does he?&lt;/p&gt;&#xA;" OwnerUserId="8633" LastEditorUserId="8633" LastEditDate="2018-05-08T10:26:26.977" LastActivityDate="2018-07-09T00:39:16.133" Title="Where are the authoritative specs for legacy PC/AT devices still in use in today's PCs?" Tags="&lt;ibm-pc&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6414" PostTypeId="2" ParentId="6410" CreationDate="2018-05-07T12:52:33.390" Score="63" Body="&lt;p&gt;The definition of PASCAL is, above all else, intended to be &lt;em&gt;simple&lt;/em&gt;.  PASCAL was designed as a pedagogical language (with aspirations to be useful for commercial purposes, but that was a secondary concern).  For this purpose, the definition had to be &lt;em&gt;small&lt;/em&gt; and &lt;em&gt;orthogonal&lt;/em&gt; so that it could be explained simply and concisely.  For ease of implementation, the number of special cases had to be kept to a minimum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The boolean type is handled by the system as simply an example of an enumerated type.  It is effectively equivalent to having a definition&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;type boolean = (false, true)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;automatically included in the program.  Specficially: it can be implemented by entering &lt;code&gt;false&lt;/code&gt; and &lt;code&gt;true&lt;/code&gt; into the symbol table with associated type of &lt;code&gt;boolean&lt;/code&gt;.  They can then never be used for any other type, as PASCAL identifiers are associated with a single type only in any scope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;nil&lt;/code&gt;, however, could not be defined by an existing language mechanism.  The language simply does not provide any means of creating a pointer value other than via &lt;code&gt;new&lt;/code&gt;, which creates a value while &lt;code&gt;nil&lt;/code&gt; refers to an absence of value.  Therefore, a new language feature was required to implement it, so a new keyword was added for that feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, &lt;code&gt;nil&lt;/code&gt; does not behave the same way an identifier does: it does not have a predetermined type.  The type of a &lt;code&gt;nil&lt;/code&gt; expression is determined by its context -- it may become any type pointer that is required to make the expression type check.  If it were implemented as an identifier rather than a keyword, that would have required a special case for polymorphic identifiers, of which only a single instance was required for the language and no way provided of defining new ones: clearly not a useful way of approaching the problem.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-05-07T12:52:33.390" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="6415" PostTypeId="2" ParentId="6410" CreationDate="2018-05-07T13:55:45.350" Score="5" Body="&lt;p&gt;Because neither &lt;code&gt;0&lt;/code&gt; nor &lt;code&gt;false&lt;/code&gt; is a pointer. Pointers are pointers and not numeric values that can be used in directly in mathematical expressions. Assigning false to a pointer doesn't make any sense so Pascal assigns &lt;code&gt;nil&lt;/code&gt; to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Talking about &quot;sense&quot; there's a famous example in C++ where previously pointers were generally compared with the literal &lt;code&gt;0&lt;/code&gt; or macro &lt;code&gt;NULL&lt;/code&gt; and that posed several issues. For example &lt;code&gt;NULL*3&lt;/code&gt; would make no sense but it's valid. Using &lt;code&gt;0&lt;/code&gt; also creates some confusion/feeling that the null pointer always contains 0 value. &lt;a href=&quot;https://stackoverflow.com/a/2597232/995714&quot;&gt;That's not correct&lt;/a&gt;. A null pointer is just a pointer that points to nothing, the binary representation isn't important and there are architectures that use non-zero values to indicate a null pointer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since C++11 they created a new keyword for it: &lt;a href=&quot;http://en.cppreference.com/w/cpp/language/nullptr&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;nullptr&lt;/code&gt;&lt;/a&gt; which solves the problem and making pointer comparison a lot more sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So Pascal uses &lt;code&gt;nil&lt;/code&gt; right from the beginning and there was no similar problem. It also makes Pascal more typesafe. Other languages like Java or C# also have the &lt;code&gt;null&lt;/code&gt; keyword for the same reasons.&lt;/p&gt;&#xA;" OwnerUserId="1981" LastEditorUserId="1981" LastEditDate="2018-05-10T05:47:38.587" LastActivityDate="2018-05-10T05:47:38.587" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6416" PostTypeId="2" ParentId="6413" CreationDate="2018-05-07T18:20:06.743" Score="5" Body="&lt;p&gt;I don't think that there is a definitive ISA document: manufacturers generally went with &quot;whatever the PC/AT had.&quot; Looking at older computers which still have an ISA architecture, Super I/O chipsets (typically from the BIOS manufacturer) handled a lot of the glue logic, so discrete chips were already disappearing from the boards, probably as early as &lt;a href=&quot;https://www.computerhope.com/jargon/s/sio.htm&quot; rel=&quot;noreferrer&quot;&gt;the late 1980s&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On modern boards, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Low_Pin_Count&quot; rel=&quot;noreferrer&quot;&gt;LPC bus&lt;/a&gt; specifies a limited number of ISA-compatible devices (super I/O, audio, and some controllers) which are software-compatible with ISA but not hardware compatible. &lt;a href=&quot;http://www.ite.com.tw/uploads/product_download/IT8783_A_V0.5_062510.pdf&quot; rel=&quot;noreferrer&quot;&gt;Here's an example from ITE&lt;/a&gt; (don't worry about the &quot;CONFIDENTIAL&quot; watermark: I got it from &lt;a href=&quot;http://www.ite.com.tw/en/product/view?mid=74&quot; rel=&quot;noreferrer&quot;&gt;their Web site.&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in short, for almost the past 30 years the number of actual chips on the motherboard to support the ISA bus has dropped from dozens to possibly just one (or zero for UEFI-only) computers. It's not because it's a secret, but just because there's not much left to document.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2018-05-07T18:20:06.743" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6417" PostTypeId="2" ParentId="6407" CreationDate="2018-05-07T20:36:06.583" Score="0" Body="&lt;p&gt;CISC comparison (&lt;code&gt;CMP&lt;/code&gt;) is typically subtraction without carry/borrow that sets only condition flags, result is discarded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The subtraction-with-borrow style, used in Intel main CPU dynasty (8080, 8086 and so on), PDP-11 and many other computers (despite some of them call it as subtraction with carry), can be described as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let M is minuend, S is subtrahend, B is previous borrow flag (in Carry bit). Instead of calculating &lt;code&gt;M - S - B&lt;/code&gt;, it really calculates &lt;code&gt;M - S - B + 2^N&lt;/code&gt;, but as &lt;code&gt;M + (2^N-1 - S) + (1-B)&lt;/code&gt;, or, &lt;code&gt;M + ~S + ~B&lt;/code&gt;, where &lt;code&gt;^&lt;/code&gt; means power, &lt;code&gt;N&lt;/code&gt; is number of bits in arguments, &lt;code&gt;~&lt;/code&gt; is bitwise NOT. Then, (N+1) bits of result are split into lesser N bits of final result, and a single upper bit that is inverted again and put into Carry bit in Flags a.k.a. Program Status Word (PSW), meaning borrow happening.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples, using N=8 (a single octet arguments):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;M=5, S=3, B=0: 0000_0101₂ (5) + 1111_1100₂ (~3) + 1 = 1_0000_0010₂, so, difference is 2, borrow is 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;M=5, S=3, B=1: 0000_0101₂ (5) + 1111_1100₂ (~3) + 0 = 1_0000_0001₂, so, difference is 1, borrow is 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;M=5, S=8, B=0: 0000_0101₂ (5) + 1111_0111₂ (~-8) + 1 = 0_1111_1101₂, so, difference is 253, borrow is 1 (because MSB of 9-bit result was 0), meaning that result is negative and 1 shall be subtracted from the next higher byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and, for your question,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;M=10, S=0, B=0: 0000_1010₂ (10) + 1111_1111₂ (~0) + 1 = 1_0000_1010₂, so, difference is 10, borrow is 0 (because MSB of 9-bit result was 1). This is like 0 is converted to 256 before summation. (To compare with: case M=10, S=0, B=1 will result in difference = 9, borrow = 0. Here 0 is converted to 255, because of borrow=1 before subtraction.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some architectures, namely Mostek 6502 and all ARM CPUs, use &quot;true carry&quot; subtraction implementation that Carry flag from PSW is &lt;em&gt;not&lt;/em&gt; inverted before and after subtraction, so, C=1 means no borrow and C=0 means borrow.&lt;/p&gt;&#xA;" OwnerUserId="8324" LastEditorUserId="8324" LastEditDate="2018-05-08T12:17:44.673" LastActivityDate="2018-05-08T12:17:44.673" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6418" PostTypeId="1" CreationDate="2018-05-08T00:49:57.733" Score="5" ViewCount="146" Body="&lt;p&gt;Years ago I played a version of gomoku that was written in Lisp that learned as you played. After a few rounds, it became nearly unbeatable. This was on Unix System III on a small PDP-11.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have searched quite a bit for that Lisp code and haven't been able to find it. The versions I've found haven't been the one I'm looking for. Also, I'm not looking for one that requires Emacs. Unfortunately, I don't remember any more details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you know where I can find it?&lt;/p&gt;&#xA;" OwnerUserId="2057" LastEditorUserId="4025" LastEditDate="2018-05-08T01:17:47.487" LastActivityDate="2018-05-08T01:17:47.487" Title="a learning gomoku in Lisp" Tags="&lt;unix&gt;&lt;identify-this-game&gt;&lt;lisp&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6419" PostTypeId="2" ParentId="6413" CreationDate="2018-05-08T06:45:20.880" Score="0" Body="&lt;p&gt;In modern PCs, various legacy devices are implemented within the Southbridge chip, or possibly a SuperIO chip alongside it, or occasionally even on the CPU die.  There are therefore no actual wires connecting them to anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC, the ISA bus was originally just the 8086's main data bus brought out to expansion slots, so some of the interface on original hardware was specified by the 8086's datasheet.  Some of the cards you could put in those slots were RAM expansions.  Later PC-compatible CPUs got a lot faster, so an interface chip had to be inserted to buffer the ISA bus from the actual memory bus, and later the PCI bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the best documentation of these devices exists in the form of the Linux kernel's device driver source code.  Some of them also have actual, conventional documentation there.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2018-05-08T06:45:20.880" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6420" PostTypeId="2" ParentId="6413" CreationDate="2018-05-08T07:22:58.783" Score="0" Body="&lt;p&gt;For example, the 8250/16550 chip used to handle serial communication is still simulated by modern chipsets and is enumerated by ACPI as PNP0500/PNP0501. You can find datasheets for these chips.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;However, any information on how the chip is wired to other devices on the motherboard (e.g. to the PIC) seems to be only present on various hobbyist websites, I can't find anything official.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simple: There can't be any, as they are emulated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole idea of an emulation is to hide the real implementation, thus enabling the manufacturer to improve implementation and internal working. Otherwise they would need to implement outdated (internal) Interfaces over and over.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Where do I find such documentation?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If at all, check with each chip manufacturer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't an issue while chipsets still supported ISA - but already back then Intel implemented the LPC (&lt;a href=&quot;https://en.wikipedia.org/wiki/Low_Pin_Count&quot; rel=&quot;nofollow noreferrer&quot;&gt;Low Pin Count&lt;/a&gt;) Interface (&lt;a href=&quot;https://www.intel.com/content/dam/www/program/design/us/en/documents/low-pin-count-interface-specification.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Specs here&lt;/a&gt;) to cut down on wiring cost. It laid out a de-facto standard during the 2000s and can still be found on several CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays it's eventually all replaced by USB.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Regarding the Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not really sure what you're asking for. As the function is emulated by hard or firmware, one can still access the same registers and bits (at least on OS privilege level). Of course, it depends how deep the emulation goes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, OS developers &lt;em&gt;do&lt;/em&gt; have to read each spec of new CPUs and chipsets. After all, how else are new drivers to be developed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least, the PNP0500 driver you mention is some Windows specific thing, not really a hardware issue.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-05-08T18:09:03.963" LastActivityDate="2018-05-08T18:09:03.963" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6421" PostTypeId="1" AcceptedAnswerId="6424" CreationDate="2018-05-08T09:12:23.470" Score="3" ViewCount="2295" Body="&lt;p&gt;I'm implementing non-KERNAL joystick and keyboard controls for my Commodore 64 game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used to use the KERNAL SCNKEY routine earlier to read keyboard and it worked well with my joystick port 2 code.  However, I had to bank out ROM to implement stable raster IRQs and now I'm reading the keyboard matrix directly using &lt;code&gt;$dc00&lt;/code&gt;/&lt;code&gt;$dc01&lt;/code&gt; (code copied from &lt;a href=&quot;http://codebase64.org/doku.php?id=base:scanning_the_keyboard_the_correct_and_non_kernal_way&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://codebase64.org/doku.php?id=base:scanning_the_keyboard_the_correct_and_non_kernal_way&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the keyboard routine needs to write a row/column select bit into &lt;code&gt;$dc00&lt;/code&gt; when reading the keyboard state.  This seems to mess up joystick port 2 state (keyboard state leaks into joystick port reads).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I noticed that if I save and restore &lt;code&gt;$dc00&lt;/code&gt; contents before/after calling the keyboard routine, joystick state works fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it OK to do something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;lda $dc00&#xA;sta tmp&#xA;jsr Keyboard&#xA;lda tmp&#xA;sta $dc00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to preserve joystick state or is there some other way to do this?  This worked fine on VICE but I haven't tried on real C64 HW yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did try to read the KERNAL SCNKEY source code to see if they're doing a &lt;code&gt;$dc00&lt;/code&gt; save/restore and didn't find an obvious place where they'd be doing this register state save/restore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Cross posting from &lt;a href=&quot;https://stackoverflow.com/questions/50229204/reading-both-keyboard-and-joystick-with-non-kernal-code-on-c64&quot;&gt;https://stackoverflow.com/questions/50229204/reading-both-keyboard-and-joystick-with-non-kernal-code-on-c64&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;JeremyP's answer is right about DDR regs.  This code seems to work with joystick on port 2 and the keyboard code from &lt;a href=&quot;http://codebase64.org/doku.php?id=base:scanning_the_keyboard_the_correct_and_non_kernal_way&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://codebase64.org/doku.php?id=base:scanning_the_keyboard_the_correct_and_non_kernal_way&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;read_keyboard: {&#xA;    jsr Keyboard&#xA;    ldx #0&#xA;    stx $dc02 // put joystick port 2 register $dc00 to read mode&#xA;    rts &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="8648" LastEditorUserId="8648" LastEditDate="2018-05-08T12:26:23.067" LastActivityDate="2019-06-02T06:50:00.757" Title="Reading both keyboard and joystick with non-KERNAL code on C64" Tags="&lt;commodore-64&gt;&lt;programming&gt;&lt;6502&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6422" PostTypeId="2" ParentId="6421" CreationDate="2018-05-08T09:46:12.003" Score="2" Body="&lt;p&gt;Having read the &lt;a href=&quot;https://www.c64-wiki.com/wiki/CIA&quot; rel=&quot;nofollow noreferrer&quot;&gt;C64 wiki&lt;/a&gt; on the CIA chip, I would say that your code probably isn't doing enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The port at &lt;code&gt;DC02&lt;/code&gt; controls the mode of the bits of port &lt;code&gt;DC00&lt;/code&gt;. If a bit on &lt;code&gt;DC02&lt;/code&gt; is 1, the same bit of &lt;code&gt;DC00&lt;/code&gt; is in read/write mode and is used to control the keyboard and if it is 0, the bit on &lt;code&gt;DC00&lt;/code&gt; is in reads only mode and is used to read the joystick. &lt;code&gt;DC03&lt;/code&gt; provides the same function for &lt;code&gt;DC01&lt;/code&gt;.  I would expect your code.  to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;save the state of &lt;code&gt;DC02&lt;/code&gt;and &lt;code&gt;DC03&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;set &lt;code&gt;DC02&lt;/code&gt; and &lt;code&gt;DC03&lt;/code&gt; to &lt;code&gt;FF&lt;/code&gt; (read/write on all pins).&lt;/li&gt;&#xA;&lt;li&gt;scan the keyboard&lt;/li&gt;&#xA;&lt;li&gt;restore the states of &lt;code&gt;DC02&lt;/code&gt; and &lt;code&gt;DC03&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2018-05-08T10:26:55.250" LastActivityDate="2018-05-08T10:26:55.250" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6423" PostTypeId="2" ParentId="6413" CreationDate="2018-05-08T16:19:22.693" Score="4" Body="&lt;p&gt;ISA bus documentation is very vague and is mostly defined by a mix of the original PC/XT/AT schematics and 8288 / 82288 bus controller provided by Intel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was never an &quot;official&quot; timing diagram from IBM for either the PC or AT buses (I remember having to work out the best/worst case timings for the SBHE signal from the individual chips datasheets and the AT schematics). How hardware was connected to the bus originally was defined by the adapter schematics provided in the technical references.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Locations of devices in the IO space usually copied the IBM version with maybe an alternative address which was in a typically free space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going back to your example card for the &quot;IBM Asynchronous Communications Adapter&quot; the XT technical reference says this on page 1-218:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;One Interrupt line is provided to the system. This interrupt is IRQ4 for a primary adapter or IRQ3 for an alternate adapter, and is positive active. To allow the communications card to send interrupts to the system, bit 3 of the modem control register must be set to 1 high. At this point, any interrupts allowed by the interrupt enable register will cause an interrupt.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the behaviour in this case comes from the original PC design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh and PC bus designs ran at various speeds depending on the OEM/Chipset. I had very cheap AT clone that ran the bus at 12MHz (it's usually 6 or 8MHz for an AT) which was useful when testing other hardware for compatibility.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2018-05-09T09:59:57.903" LastActivityDate="2018-05-09T09:59:57.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6424" PostTypeId="2" ParentId="6421" CreationDate="2018-05-08T19:34:58.397" Score="1" Body="&lt;p&gt;An easy solution to my original problem of using &lt;a href=&quot;http://codebase64.org/doku.php?id=base:scanning_the_keyboard_the_correct_and_non_kernal_way&quot; rel=&quot;nofollow noreferrer&quot;&gt;this keyboard code&lt;/a&gt; while simultaneously reading joystick port 2 from &lt;code&gt;$dc00&lt;/code&gt; is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;read_keyboard: {&#xA;    jsr Keyboard&#xA;    ldx #0&#xA;    stx $dc02 // put joystick port 2 register $dc00 to read mode&#xA;    rts &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The idea (as explained in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6422/8648&quot;&gt;JeremyP's answer&lt;/a&gt;) is to put the CIA#1 port A into read-only mode.  &lt;/p&gt;&#xA;" OwnerUserId="8648" LastEditorUserId="8648" LastEditDate="2018-05-08T22:02:05.580" LastActivityDate="2018-05-08T22:02:05.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6425" PostTypeId="2" ParentId="6051" CreationDate="2018-05-08T20:38:49.727" Score="4" Body="&lt;p&gt;If you're up for assembly programming, I can very highly recommend using the &lt;a href=&quot;https://packagecontrol.io/packages/Kick%20Assembler%20(C64)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sublime Text 3 KickAssembler package&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This allows you to edit a .asm file in ST3 with syntax highlighting.  When you press F7 in the editor, it will compile your .asm file, start VICE and start executing your code in the emulator.  Or if you don't like or use ST3, you can inspect the package source code to pretty much do the same steps in a script or in another editor.&lt;/p&gt;&#xA;" OwnerUserId="8648" LastActivityDate="2018-05-08T20:38:49.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6426" PostTypeId="1" AcceptedAnswerId="6435" CreationDate="2018-05-08T21:22:15.190" Score="4" ViewCount="745" Body="&lt;p&gt;I have built a &lt;a href=&quot;http://www.malinov.com/Home/sergeys-projects/xt-cf-lite&quot; rel=&quot;nofollow noreferrer&quot;&gt;XT CF Lite v4.1&lt;/a&gt; to boot my 286 with a compact flash card. I have configured it via DIP switches to address 300h and I am using the XT-IDE Universal BIOS 2.0.0 beta 3. This is I think the latest version. However the google code site looks rather dead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have run xtidecfg and configured the EEPROM accordingly: XT CF Lite card with base 300h, BIOS at CE00h, 2864 style EEPROM. I can write it succesfully.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the CF card won't be detected upon bootup.&#xA;When I put the CF in an IDE to CF adapter on my Multi I/O card running at 170h, XT IDE Universal BIOS succesfully boots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess I might have made a mistake in soldering the CF socket? I have probed the solder pads and CF pins with a meter and they so far do look fine. But I might have to double check. Are there any other reasons why this might fail?&lt;/p&gt;&#xA;" OwnerUserId="8337" LastEditorUserId="8337" LastEditDate="2018-05-08T21:47:26.420" LastActivityDate="2018-05-10T15:40:27.943" Title="XT-IDE Universal BIOS does not find master drive on XT CF Lite card" Tags="&lt;bios&gt;&lt;xt-ide&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6427" PostTypeId="2" ParentId="4618" CreationDate="2018-05-09T00:08:13.680" Score="4" Body="&lt;p&gt;Pascal for the Apple /// actually used the SOS file format and was compatible with files written by Business Basic. SOS was adapted into ProDOS for the Apple II-series machines, but Pascal /// was never ported to it to my knowledge. And, yes, it's a darn shame Pascal and the other UCSD languages FORTRAN, BASIC, and MODULA/2 couldn't run together.&lt;/p&gt;&#xA;" OwnerUserId="8651" LastActivityDate="2018-05-09T00:08:13.680" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6429" PostTypeId="2" ParentId="6275" CreationDate="2018-05-09T11:30:31.787" Score="3" Body="&lt;p&gt;The Coleco power supply is normally not wall mounted. That is only for dedicated countries. It was actually a clever design, in comparison to other gaming systems of it's time: by isolating the power to a single external housing the requirements for different countries could be easily met. Shielding etc. was also required, so having all combined in one &quot;brick&quot; simplifies the remaining system. The problem for the console was mainly having 3 different voltages for their subsystem: 12V for VDP, -5V for memory subsystem and 5V for Z80 and remaining logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, there are replacement power supplies for Coleco Vision. Since it is not rocket science to reproduce the unique connector from power supply to console the door to deliver alternate modern designs was opened nearly 5 years ago. With a retail price of about $25 it is cheap, too.&lt;/p&gt;&#xA;" OwnerUserId="8655" LastEditorUserId="70" LastEditDate="2018-05-09T14:17:48.563" LastActivityDate="2018-05-09T14:17:48.563" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6430" PostTypeId="1" AcceptedAnswerId="6458" CreationDate="2018-05-09T15:51:23.923" Score="15" ViewCount="798" Body="&lt;p&gt;A &quot;Monitor&quot; driver for an Amiga is a file which, when placed in DEVS:Monitors, enables additional screenmodes. The standard PAL or NTSC driver, which provides screenmodes compatible with consumer TV frequencies, is built-in to the OS, but by adding further drivers, additional screenmodes become available. For example, adding the Multiscan monitor driver adds the &quot;Productivity&quot; screenmodes that are a higher resolution (640x480) and higher scan rate (closer to the PC VGA standard) but which require a compatible monitor to be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do these drivers work? How are they made?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They appear to be executable files that are simply run during startup. Therefore I assume that they execute some code which calls into the OS to add the new screenmodes to an in-memory table. How do they do this - where are screenmodes stored in the OS? Why are they executable rather than just a static data structure that the OS could load and parse?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put the question another way - say I've invented a new monitor which only accepts video frequencies that are not supported by any of the existing drivers, and I want to create a monitor driver for it. How do I do that?&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2018-05-11T19:59:42.953" Title="How do Amiga &quot;Monitor&quot; drivers work?" Tags="&lt;amiga&gt;&lt;video&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6432" PostTypeId="1" AcceptedAnswerId="6434" CreationDate="2018-05-10T08:16:41.613" Score="11" ViewCount="2544" Body="&lt;p&gt;Modern graphics cards are essentially miniature supercomputers in their own right, with their own memory and instruction sets, but in the eighties and late seventies, a very common kind of personal computer design had a single memory bank that was updated by the CPU and read by the video chip, with this being the primary method by which the two communicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were these video chips specific to the CPU they were designed to work with, or could they be used with a different one? For example, could you take the ANTIC from the Atari 800, the VIC-II from the Commodore 64 or the video system from the BBC Micro and put them in a Z80 computer? Could you take the Amiga chipset and put it in a 286 machine?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In most ways, I would expect the video chip to be indifferent to the model of CPU; it really just cares about what data gets written to what memory location. The concern I would have would be the bus protocol, which varied with CPU. For example, the 6502 has a predictable on-off cadence to memory access, which makes it easy for a video chip to access memory on alternate cycles, whereas the Z80 is more complicated. But then, even 6502 computers are not quite so simple in practice, as discussed in the answers to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4846/z80-and-video-chip-contending-for-random-access&quot;&gt;Z80 and video chip contending for random access&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So could an existing video chip be used as-is with a different CPU, or would it need small changes (design tweaks, extra/different glue logic, performance compromises like in the Amstrad 464 which simplified the Z80 memory access pattern by rounding every instruction up to 4 cycles), or would it need radical design changes?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-05-11T01:56:09.187" Title="Were video chips specific to the CPU?" Tags="&lt;video&gt;&lt;chip&gt;" AnswerCount="3" CommentCount="12" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6433" PostTypeId="2" ParentId="6432" CreationDate="2018-05-10T08:38:10.953" Score="6" Body="&lt;p&gt;The way that a (modern-day) CPU and a GPU communicate is (usually) over a PCI bus or some such device. That could be described as a loose connection because there are buffers and bus arbiters and that kind of stuff sitting between the CPU and GPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the retro machines you mention, the CPU and graphics chips communicated over the system bus. This is the same bus which connects RAM, ROM, perhaps a cartridge port or something, and that connection is &lt;em&gt;much tighter&lt;/em&gt;. That means that something like a VIC-II or an ANTIC chip will have been designed with the 6502 in mind, and works by cooperating with a 6502 that's connected to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to attach a VIC-II to a 8086 machine or whatever, I am sure that could be done. There's no magic which says you can't. But you would need to make sure that the VIC-II is communicating over a bus which has the same signals and timings as a 6502. That should be as simple as buffering memory writes from the CPU until the VIC-II is not reading, as then doing the write in that free cycle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, some computers used a chip designed to aid video output, such as the MC6845, instead of a custom ASIC or some such device. This particular chip apparently fits well with various different buses. It was used in the Z80 based ABC800 computer, as well as in the Commodore PET 4000 which as everyone knows used a 6502.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-05-10T08:47:24.380" LastActivityDate="2018-05-10T08:47:24.380" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6434" PostTypeId="2" ParentId="6432" CreationDate="2018-05-10T11:59:43.553" Score="14" Body="&lt;p&gt;A lot of the time the answer is &quot;not without difficulty&quot;: chips from 6502 machines tend to simply assume they have access to the bus every other cycle; you can't achieve that on a Z80 without stopping the clock every other cycle which would be hugely wasteful since memory accesses are only as-required. The Z80 devices tend to fiddle with the clock and/or use the WAIT line but the former will waste cycles and the latter has no direct 6502 equivalent — the 6502's RDY as used by the C64 for 'bad lines' (those in which the 6502 is stalled) takes effect only on read cycles, not writes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are exceptions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TMS9918 family breaks the assumption of shared memory. The video chip owns its own RAM. Originally coupled to the TMS9900, it was also deployed in both Z80 machines (such as the Colecovision) and 6502 machines (such as the Creativision).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6845 is just an address and sync generator. It doesn't actually access the bus. Therefore it does just enough to be universally useful without binding itself to any particular assumption about how to get at memory. So it occurs in the 6502 BBC Micro, the Z80 Amstrad CPC and the x86 CGA card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Comparing the BBC and the CPC is perhaps interesting as the latter was originally designed with a 6502 but switched to a Z80 during the period of design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a BBC the standard access-in-phase-1 approach is taken to CPU and video interleaving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a CPC the WAIT line is strobed for three out of four cycles. Due to the way the Z80 responds to WAIT, that guarantees that it won't access memory for two out of four cycles. Those two are used for video fetch, and one of the remainder is then used by the CPU. In processing times, the net effect is to round each machine cycle up to a multiple of four, which most commonly means adding a cycle to a memory access. So it's not a huge difference.  The rule of thumb averaged out is about an 18% speed reduction.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-05-10T20:22:16.970" LastActivityDate="2018-05-10T20:22:16.970" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6435" PostTypeId="2" ParentId="6426" CreationDate="2018-05-10T15:40:27.943" Score="2" Body="&lt;p&gt;For some reason the AT BIOS BIN file does not detect the CF cards. You have to use the XT BIN file.&lt;/p&gt;&#xA;" OwnerUserId="8337" LastActivityDate="2018-05-10T15:40:27.943" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6436" PostTypeId="1" AcceptedAnswerId="6444" CreationDate="2018-05-10T22:18:01.600" Score="2" ViewCount="446" Body="&lt;p&gt;On my 286 board, the CMOS battery is missing – as with most boards of that age. I see no other battery connector on the board. However I would love to fit a battery in there, so that I do not have to enter all the settings every time. What options are there? I guess I can't just solder any battery holder in there, since the original battery was probably a NiCd rechargeable. So what are my options? Are there 2032 button cell holders with charge protection or something like that?&lt;/p&gt;&#xA;&lt;p&gt;Also there is still a bit of corrosion on the traces as you can see. What do I best use for neutralizing it? A bit of vinegar?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/m0QB7.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/m0QB7.jpg&quot; alt=&quot;Missing battery on AT mainboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8337" LastEditorUserId="15334" LastEditDate="2021-01-23T17:55:07.977" LastActivityDate="2021-01-23T17:55:07.977" Title="How to replace battery for old AT mainboard?" Tags="&lt;maintenance&gt;&lt;battery&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6437" PostTypeId="2" ParentId="6432" CreationDate="2018-05-11T01:50:30.013" Score="2" Body="&lt;p&gt;Easy answer is &quot;anything is possible&quot;, but of course the real answer is more subtle.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe more interesting would be to ask &quot;were video chips specific to CPUs &lt;em&gt;with contemporary technology&lt;/em&gt;&quot;.  What I mean is that given a modern FPGA, one could probably mate any 1970/80/90 era video chip to any CPU of that era with a little bit of VHDL.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using contemporary tech is more difficult.  Common stuff like MC6845 (and descendants like the MSX chips) or TMS9918 are easy as reading the app notes.  ANTIC and VIC-II are pretty simple, so maybe not to hard; some PALs, a wad of TTL, limit the clock speed and a Z-80 could probably make it go.  But given contemporary tech, it would be tough to interface an Amiga Denise chip to, say, an 8086; you'd need to create the 8086 equivalent of an Angus ASIC out of discrete logic, PALs or CPLDs (assuming you didn't have access to ASIC fabs and expertise).  Similar to mate the Mindset video chips to a 68k.  Then the software initialization that these custom chips generally require would need to be reverse engineered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[edit for clarity]&lt;/p&gt;&#xA;" OwnerUserId="6904" LastEditorUserId="6904" LastEditDate="2018-05-11T01:56:09.187" LastActivityDate="2018-05-11T01:56:09.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6438" PostTypeId="2" ParentId="5883" CreationDate="2018-05-11T03:28:01.217" Score="2" Body="&lt;p&gt;The SABRE reservation system introduced 'smart' terminals, or at least semi-smart, block mode terminals (like 3270, but ALC bisync multidrop protocol) such as the Sperry Unimatic in the mid to late 60s.  One could argue as well that the operator console of SABREs progenitor, the SAGE early warning system, is a smart-terminal ancestor based on vector displays in the late 50s/early 60s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GE had a &quot;Data Editing Display&quot; terminal in 1964.  There's not a lot of info, but it supposedly was an early block mode terminal with some local smarts: &lt;a href=&quot;http://bitsavers.org/pdf/ge/terminals/GE_Data_Editing_Display_Dec64.pdf%20%22here%22.&quot; rel=&quot;nofollow noreferrer&quot;&gt;marketing slick&lt;/a&gt;.  GE also made ALC reservation terminals in this timeframe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Tektronix 4002 came out in 1969, I think, and was &lt;em&gt;really&lt;/em&gt; smart for the time because it was a vector display that required a lot of smarts to run.  But it used all it's smarts to paint the screen; it wasn't block mode or otherwise what we'd think of as a 'smart terminal' later on.  More like the SAGE console.  It evolved into the famous Tek 4010.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My personal fav, the Tek 4207, came along in 1986.  Would love to find one...or better a 4209.  Ah, well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just goes to show...some things are hard to define.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-05-11T03:28:01.217" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6439" PostTypeId="2" ParentId="6436" CreationDate="2018-05-11T03:43:45.553" Score="3" Body="&lt;p&gt;It is not uncommon to find a 4-pin battery connector on an AT-compatible motherboard, even if the board had a rechargeable battery on-board.  Such boards would also usually have a jumper to enable/disable the battery charging circuit.  If you connect a battery to the 4-pin connector you would normally disable the battery charging circuit since those batteries were normally not rechargeable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can locate the documentation for your board (or its jumpers are well-labeled) you can check to see if you have these connectors.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-05-11T03:43:45.553" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6440" PostTypeId="2" ParentId="4843" CreationDate="2018-05-11T06:10:10.790" Score="3" Body="&lt;p&gt;No original speccies used a SINGLE bank of 64k DRAM chips. 128k, +2 and +3 used TWO banks of 64k chips, having in total 128 kbytes. Many russian speccy clones used single bank of 64k chips, one early example is &lt;a href=&quot;https://translate.google.com/translate?hl=en&amp;amp;sl=auto&amp;amp;tl=en&amp;amp;u=http%3A%2F%2Fspeccy.info%2F%D0%9B%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3%D1%80%D0%B0%D0%B4_%28%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Leningrad&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly enough, the memory in the Leningrad works at 3.5 MHz (access cycles frequency), i.e. faster than in original speccies, however still the whole RAM memory is contended, although not as badly as in original speccy. The contention might be described as 'every Z80 command aligns to the even number of cycles', while it is not completely true (not true for commands like DD CB xx opcode), still gives fair understanding of the contention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, simple modifications within 3.5MHz access rate framework led to the wholly non-contended designs, like &lt;a href=&quot;https://translate.google.com/translate?hl=en&amp;amp;sl=auto&amp;amp;tl=en&amp;amp;u=http%3A%2F%2Fspeccy.info%2F%25D0%259F%25D0%25B5%25D0%25BD%25D1%2582%25D0%25B0%25D0%25B3%25D0%25BE%25D0%25BD&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pentagon&lt;/a&gt;, &lt;a href=&quot;https://translate.google.com/translate?hl=en&amp;amp;sl=auto&amp;amp;tl=en&amp;amp;u=http%3A%2F%2Fspeccy.info%2FScorpion&quot; rel=&quot;nofollow noreferrer&quot;&gt;Scorpion&lt;/a&gt; (only later models, as the first models inherited contended design from Leningrad) and &lt;a href=&quot;https://translate.google.com/translate?hl=en&amp;amp;sl=auto&amp;amp;tl=en&amp;amp;u=http%3A%2F%2Fspeccy.info%2FKAY&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kay&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="576" LastEditDate="2020-04-29T09:37:47.573" LastActivityDate="2020-04-29T09:37:47.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6441" PostTypeId="2" ParentId="6400" CreationDate="2018-05-11T06:18:54.100" Score="4" Body="&lt;p&gt;If your design has no RAM, that doesn't mean you haven't got the stack. Stack is not a write-only &quot;device&quot;, you can use it to read data as well. For example, you set SP to the table in ROM and then read data from there:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LD SP,table&#xA;POP HL&#xA;...do smth...&#xA;POP HL&#xA;...do smth...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Another option is to use table-driven jumps in the same way by using RET:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LD SP,jump_table&#xA;...&#xA;RET ;use first value from jump table&#xA;&#xA;... somewhere in the code jumped to:&#xA;RET ;use second value from jump table&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2018-05-15T19:19:57.480" LastActivityDate="2018-05-15T19:19:57.480" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6442" PostTypeId="1" AcceptedAnswerId="6443" CreationDate="2018-05-11T06:32:16.070" Score="11" ViewCount="1076" Body="&lt;p&gt;A Z80 on RESET, starts executing from 0x0000. This is why the ZX machines and so many others have ROM at the bottom of the address space. Presumably an 8080 is the same. But as I recall, a CP/M binary is loaded into memory from address 0x0100 and run from there. Why should these be so close together?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It means that someone who is just designing a new CP/M computer is forced to put some kind of bankswitching in place, just to be able to boot the thing. If I wanted to design an operating system, I wouldn't put the application's entry point in read-only address space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have I got this wrong? What is the rationale behind this decision?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-05-11T18:18:28.933" Title="Why did CP/M require RAM in the bottom part of the address space?" Tags="&lt;cp-m&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6443" PostTypeId="2" ParentId="6442" CreationDate="2018-05-11T07:59:44.617" Score="12" Body="&lt;p&gt;The 8080 that CP/M was originally designed for has very limited possibilities to produce code that can run anywhere in memory - Everything has to have fixed addresses. This results in the need that CP/M systems need to be recompiled for every new memory size and address map - It is convenient to do that for the &lt;em&gt;system&lt;/em&gt; only once and not for &lt;em&gt;applications&lt;/em&gt; that you want to be portable between systems, after all, you wanted one &lt;em&gt;WordStar&lt;/em&gt; binary running on any system - Thus, the applications need to go into low memory, starting from some fixed address, regardless of maker, memory size, and architecture of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first CP/M computers had RAM sizes starting from ~16kBytes (CP/M 2.2 needs about 20kB). So, CP/M, aiming to be a &lt;em&gt;portable&lt;/em&gt;, &quot;one-size-fits-all&quot; operating system, had to assume &lt;em&gt;some&lt;/em&gt; memory map. The main RAM area a bare-bone CP/M system needs for its own purposes is the sector buffer, sized 128 bytes, that has to end up somewhere. CP/M decided to put that at 080H by default. That left the first byte to be used by user code (thus, the TPA) at 0100H. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below that (0-80H), CP/M puts the BDOS vector and a stub for the reset code (8080 starts execution at 0 after reset), so you had to have a limited amount of ROM that could overlay at least the first three bytes (JMP into the BDOS). At 5CH, you would normally see an FCB (the second main CP/M data structure), also all the other administrative data structures CP/M needs reside in the lower 80H bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to sum it up, the space for applications had to start in low memory, at a fixed address that would be possible to implement in all architectures. They couldn't start at 0, because the OS had to be at 0 to be run after a reset, and they knew they needed at least the FCB, the vector area, and at least one sector buffer plus a minimum set of administrative variables - Thus 100H was simply the lowest possible address user code could start from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to have the CPU see ROM (thus, &quot;code&quot;) at address 0 at cold boot, you could use a number of tricks (well not tricks, but rather pretty common strategies). The luxury version was to have a paged-in cold-boot ROM (several kBytes) starting from 0 shadowed by writable RAM - This ROM would then load and set up CP/M from disk, and once done, be paged out, leaving an all-RAM system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;not-so-luxury&quot; version would have been a permanently paged in ROM at higher addresses (say, 08000H, for simplicity), and a piece of circuitry that would fiddle with the address lines at cold boot to trick the CPU into running that ROM (In my example, that would be a simple flip-flop that switched address line A15 to high). The first instructions in that ROM would then need to be a JMP to 08003H where you would find code that switches that flip-flop. That way you would be able to have the ROM permanently paged in (but obviously this part of the address map is now occupied and limits the amount of available RAM for CP/M and applications)&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-05-11T09:40:11.470" LastActivityDate="2018-05-11T09:40:11.470" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="6444" PostTypeId="2" ParentId="6436" CreationDate="2018-05-11T10:26:18.113" Score="3" Body="&lt;p&gt;If the board does not have an external battery connector, you can try connecting an external battery pack (for example, a 3 x AA holder containing alkaline batteries) to the original internal connector. The positive lead should be connected through a diode to stop the motherboard attempting to charge the battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?35576-3-6v-battery-on-286-motherboard&quot; rel=&quot;nofollow noreferrer&quot;&gt;thread on the Vintage Computer Forum&lt;/a&gt; is discussing a situation that appears similar to yours. It includes a &lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?35576-3-6v-battery-on-286-motherboard&amp;amp;p=263038#post263038&quot; rel=&quot;nofollow noreferrer&quot;&gt;diagram&lt;/a&gt; showing how the battery pack and diode should be arranged. There is also a recommendation to use a Schottky diode as the voltage drop is less.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2018-05-11T10:26:18.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6445" PostTypeId="2" ParentId="6442" CreationDate="2018-05-11T11:52:12.663" Score="5" Body="&lt;p&gt;Along with the specific reasons why CP/M needed to have the memory map it used, &lt;em&gt;in general&lt;/em&gt;, for an Intel 8080 or Z80 based computer to be &lt;em&gt;truly flexible&lt;/em&gt;, you must have RAM in the first 128 bytes.  This is because of (1) the &lt;code&gt;RST&lt;/code&gt; instructions supported by these processors, and (2) the method for interrupt handling the 8080 used (and which the Z80 continued to use by default) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;RST&lt;/code&gt; instructions are extremely useful.  There are 8 of them, &lt;code&gt;RST 08h&lt;/code&gt;, &lt;code&gt;RST 10h&lt;/code&gt;, and so on, all the way up to &lt;code&gt;RST 38h&lt;/code&gt; (I beleive under the Intel opcode scheme they're &lt;code&gt;RST 0&lt;/code&gt; ... &lt;code&gt;RST 7&lt;/code&gt;, but I learned with a Z80 so that's the way I remember them).  When executed, they effectively produce a call to one of a static set of locations, distributed every 8 bytes in the first 64 bytes of memory.  These instructions are very useful for writing code that stretches the limits of the system because (1) they save 2 bytes of code and (2) they save 6 clock cycles vs a standard &lt;code&gt;CALL&lt;/code&gt; instructions.  Being able to put frequently-used small functions into these locations can make a vast difference to performance of an application, so allowing for this is pretty important.  If you have ROM at the start of memory, you need to make the selection of available functions in advance, which can be limiting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, this is an optimisation, and one that wasn't &lt;em&gt;strictly&lt;/em&gt; necessary, so CP/M could have gotten away without allowing users to take advantage of it, except ... the way the Intel 8080 interrupt scheme works is that when a device wants to cause an interrupt, it pulls the INT processor line down, waits for the interrupt to be acknowledged, then puts on the data bus &lt;em&gt;the opcode of an instruction to execute&lt;/em&gt;.  Realistically, there are only 8 reasonable choices of instruction a device could use for this purpose: one of the &lt;code&gt;RST&lt;/code&gt; instructions.  Alternatively, a device could use the non-maskable interrupt, and pull the NMI line down instead -- there there is no selection of action to take, the processor always calls an interrupt handler at 66h.  Therefore, interrupt service routines &lt;em&gt;must&lt;/em&gt; be installed within the first 128 bytes of memory, so &lt;em&gt;for a machine that supports end-user installable peripheral devices&lt;/em&gt; and doesn't want to limit the performance of those devices by preventing them using a direct interrupt handler, that machine &lt;em&gt;must&lt;/em&gt; provide RAM at the first 128 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things are slightly better on the Z80, which provides configurable interrupt handling modes including &lt;code&gt;IM 2&lt;/code&gt; which uses a relocatable vector of interrupt handler routines, but remembering that CP/M was designed for the 8080 first, interrupt handling was almost certainly on the minds of the machine designers when they chose where to put RAM.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-05-11T11:52:12.663" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6446" PostTypeId="1" AcceptedAnswerId="6460" CreationDate="2018-05-11T12:15:33.973" Score="12" ViewCount="1705" Body="&lt;p&gt;This is a somewhat odd question. I teach a course on media history, and spend some time talking about digital data towards the end. I am interested in building a device to illustrate some basic ideas about digital data:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the binary character of digital data&lt;/li&gt;&#xA;&lt;li&gt;some sense of how it is materially stored and represented&lt;/li&gt;&#xA;&lt;li&gt;how binary data becomes recognizable/usable as, for instance, a numerical value, an ASCII character, part of an RGB value, through being interpreted by a variety of formats&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, imagine eight switches, each of which represents a bit&amp;mdash;the unit as a whole represents a single byte. By manipulating the switches we change the value represented by the byte; this device could be connected to a screen or television, and the value (binary, hex, decimal, and perhaps ASCII) could be displayed on a screen. I could imagine putting together some LEDs, some cheap switches, and an Arduino or a Raspberry Pi to make such a device. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, &lt;strong&gt;ideally&lt;/strong&gt;, I'd like to use vintage parts, so that this device could not simply illustrate binary, but also provide at least a glimpse of the  ways that binary data has been physically represented. My general understanding is that in early computing, pre-solid state technology, a bit would represented by a single vacuum tube. Is there a feasible way to build a byte using vacuum tubes, whose value could be changed with electrical switches, and then have some sort of interface to connect it to a Pi (or something else) to read its value and output it to a screen?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen, for instance, &lt;a href=&quot;https://youtu.be/hQWcIkoqXwg?t=2m14s&quot; rel=&quot;noreferrer&quot;&gt;this video&lt;/a&gt; with a device similar to what I'm interested in. I don't need it to be &lt;em&gt;as&lt;/em&gt; authentic; I can use newer vacuum tubes. I could also use something that &lt;em&gt;isn't&lt;/em&gt; a vacuum tube (I could use individual transistors for instance). I like the idea of vacuum tubes chiefly because it can help illustrate a longer history of computing technologies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, denizens of Stack Exchange, any ideas? Is this feasible?&lt;/p&gt;&#xA;" OwnerUserId="8664" LastEditorUserId="10260" LastEditDate="2021-05-12T03:14:09.043" LastActivityDate="2021-05-12T03:14:09.043" Title="Can I build a working(ish) vacuum tube byte?" Tags="&lt;history&gt;&lt;old-hardware-adaptation&gt;&lt;vacuum-tube&gt;" AnswerCount="7" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6448" PostTypeId="1" AcceptedAnswerId="6451" CreationDate="2018-05-11T13:28:14.333" Score="8" ViewCount="973" Body="&lt;p&gt;I was reading over a thread on BASIC speeds on various home computers and noticed an interesting point that was not explained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently, in MS BASICs, a loop using &lt;code&gt;FOR I= ... NEXT&lt;/code&gt; will run faster than &lt;code&gt;FOR I= ... NEXT I&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know why? I imagine that not having to read the &lt;code&gt;I&lt;/code&gt; would help a &lt;em&gt;tiny&lt;/em&gt; bit, but the time difference seemed far too great to be that alone.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-05-12T08:49:45.853" Title="In MS BASIC, why is NEXT faster than NEXT I?" Tags="&lt;microsoft-basic&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6449" PostTypeId="2" ParentId="3293" CreationDate="2018-05-11T13:44:19.680" Score="4" Body="&lt;p&gt;On WinVice 3.1 (certainly on other Vice-s as well), perfectly smooth scrolling is possible on the expense of severe sound glitches... which may not be acceptable, but here it is. If your monitor refresh rate is close to 50 (for PAL emulation) or 60 (for NTSC emulation), and you set &quot;Settings&quot;/&quot;Maximum speed&quot; to 101% (or maybe higher), and &quot;Settings&quot;/&quot;Refresh rate&quot; to &quot;1/1&quot; (not &quot;Auto&quot;), then the emulated vertical refresh will be perfectly aligned with the monitor refresh rate. If speed is at 100%, then duplicate frames will occur (quite often on my system), because when the emulation missed the real vertical blank then it can do nothing about it and have to show the same frame again (assuming VSYNC is used, which is needed for this whole thing to work). But if it reaches the emulated vertical blank too early (and that's what we try to consistently achieve with speed over 100%), it can still pause to wait for the real vertical blank (or whatever it's called on a modern display). But you will have a lot of odd sound distortions, the more you go over 100%, the more. (It's kind of expected, given how sound is programmed on Commodore 64, but I don't get why are they so dramatic)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this all assumes that Vice shows things with VSYNC (no mid screen tearing). For me by default it does, even if the related video setting is grayed out for some reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be also good to know that you don't have to change your desktop refresh rate to 50 (from the common default 60), as you can configure Vice to switch to 50 Hz in full screen mode (if your hardware supports it).&lt;/p&gt;&#xA;" OwnerUserId="8525" LastEditorUserId="8525" LastEditDate="2018-05-13T23:32:00.953" LastActivityDate="2018-05-13T23:32:00.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6450" PostTypeId="2" ParentId="6446" CreationDate="2018-05-11T13:56:05.813" Score="9" Body="&lt;p&gt;My suggestion would be to use relays. Still readily available, and while you wouldn't be using vintage parts, there were definitely some computers built with relays. Can't handle as high speed as well as good vacuum tubes, but that isn't an issue here. The good part is that even if you can't see much - which will depend on the relay, you can &lt;strong&gt;hear&lt;/strong&gt; every click. Audible feedback for every bit change.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2018-05-11T13:56:05.813" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6451" PostTypeId="2" ParentId="6448" CreationDate="2018-05-11T14:23:42.567" Score="12" Body="&lt;p&gt;The two statement forms are slightly different in meaning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The meaning of &lt;code&gt;NEXT&lt;/code&gt; is, roughly, &quot;increment the loop variable for the most nested loop and go to the next iteration of the loop&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The meaning of &lt;code&gt;NEXT I&lt;/code&gt; is, roughly, &quot;while the mentioned variable is not the loop variable for the most nested loop, abandon execution of that loop, then perform as &lt;code&gt;NEXT&lt;/code&gt;&quot;. The latter operation is more expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR I=1 TO 5&#xA;20 FOR J=1 TO 5&#xA;30 PRINT I-J&#xA;40 NEXT I&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;will print 0, 1, 2, 3, 4.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-05-11T15:04:54.523" LastActivityDate="2018-05-11T15:04:54.523" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6452" PostTypeId="2" ParentId="6446" CreationDate="2018-05-11T15:14:38.590" Score="4" Body="&lt;p&gt;I'm personally intrigued by the use of neon lamps for storage, and although neon logic wasn't employed for anything particularly complicated back in the day, this could be a good application for it.  A neon lamp will behave as a sort of switch that will not conduct until a certain voltage is applied, but once it does it will continue to conduct as long as a certain minimum current is allowed through.  An oscillator can be constructed easily using a neon bulb, 1-3 resistors, and a capacitor.  Adding additional resistors and capacitors will make it possible to produce things like counters and other forms of logic without any other kind of switching device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the switching characteristics of neon lamps aren't ideal for practical logic, they would offer an advantage for your scenario: their operation is nicely visible.  Relays could also work, and would have some other advantages, but most relays don't offer the same nice visual.  Perhaps the ideal would be to combine relay logic and neon logic.  I'm not sure whether such a thing could be made reliable without having to tweak every individual component,  but I think it would be possible to construct a neon-based RAM by placing lamps, each with a series resistor, on a grid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Idle rows would sit at about 30 volts, and idle columns at about 60.  To read a row, drive it to 0 volts and sense which columns have an increase in current (that would be the part I'm least certain about).  To set clear a row, raise it to 60 volts.  Then to set some bits in a row, drive it to 0 volts while driving some columns to 90 volts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if you couldn't manage to read anything from the neon storage arrangement, it might still be interesting as a write-only display device.  If you had an assembly with e.g. an 4x4 or 8x8 grid, a power supply input, and resistors to handle the idle row/column currents, along with a 10-pin or 20-pin connector to attach a controller board, you could demonstrate that the lights could hold their state even with the controller board disconnected.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-05-11T15:14:38.590" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6453" PostTypeId="2" ParentId="6446" CreationDate="2018-05-11T15:47:18.483" Score="2" Body="&lt;p&gt;You may be interested in &lt;a href=&quot;https://www.youtube.com/watch?v=zOlI1_i2HwQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt; about the restoration of a module with 8 vacuum tubes that looks very similar to the one in your video, but is a key debouncer. Details &lt;a href=&quot;http://www.righto.com/2018/01/examining-1954-ibm-mainframes-pluggable.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.righto.com/2018/01/ibm-mainframe-tube-module-part-ii.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's pretty unlikely that the module shown in your video is really &quot;8 bits&quot;, unless the mainframe had internal registers that really used vacuum tubes instead of something else. Usually, the vacuum tubes were used for logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, &quot;8 bits&quot; is an abstract concept: 8 switches already represent 8 bits, no other parts needed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to add some impressive-looking electronics, you could consider adding a 9th switch to store the value of the switches, this is called a &lt;a href=&quot;https://en.wikipedia.org/wiki/Flip-flop_%28electronics%29#Gated_D_latch&quot; rel=&quot;nofollow noreferrer&quot;&gt;D-Latch&lt;/a&gt; or D-Flip-Flop. You can implement one with vacuum tubes, relays, transistors, and it's not that difficult to do. So, certainly feasible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The details of that are probably better suited to an electronics forum than here, though.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-05-11T15:47:18.483" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6454" PostTypeId="2" ParentId="2095" CreationDate="2018-05-11T16:36:18.537" Score="5" Body="&lt;p&gt;I use a pre-July2005 Dell 2001FP and it works really well. S-video input, 4:3 aspect ratio, and best of all integrated amplified audio speakers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iYfD1.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iYfD1.jpg&quot; alt=&quot;Dell 2001FP flat-panel&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The integrated soundbar (optional) has a 3.5mm jack, so you'll need to adapt the C64 8-pin DIN mono audio-out to that jack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vumgB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vumgB.jpg&quot; alt=&quot;Rear has onboard power for the soundbar&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I like integrated speakers so there's less clutter on the desk. And since the C64 has such great games, the audio has to be good quality.  With onboard power, there's even less clutter (no AC-DC power adapter to plug into the wall and sit on the desk).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lYEVh.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lYEVh.jpg&quot; alt=&quot;2001FP ports&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of Dell monitors look like the 2001FP, but most do not have all the ports of the 2001FP.  2x USB-A, 1x USB-B, 12V DC out for soundbar, analog VGA, digital DVI, S-Video, Composite.  The right-most port is power-in to power the 2001FP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote an article about it with more details&#xA;&lt;a href=&quot;http://donnlee.com/2018/05/05/monitor-for-c64-s-video-in-43-ratio-soundbar/&quot; rel=&quot;noreferrer&quot;&gt;http://donnlee.com/2018/05/05/monitor-for-c64-s-video-in-43-ratio-soundbar/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8194" LastEditorUserId="8194" LastEditDate="2018-05-11T19:44:05.957" LastActivityDate="2018-05-11T19:44:05.957" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6455" PostTypeId="2" ParentId="6446" CreationDate="2018-05-11T17:57:25.603" Score="9" Body="&lt;p&gt;Nice idea. I like it.&lt;/p&gt;&#xA;&lt;h2&gt;Tubes et all.&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My general understanding is that in early computing, pre-solid state technology, a bit would represented by a single vacuum tube.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That would be a missconception to start with. A tube doesn't store anything. In 'tube based' computers, tubes (usually &lt;a href=&quot;https://en.wikipedia.org/wiki/Triode&quot; rel=&quot;noreferrer&quot;&gt;triodes&lt;/a&gt;) provide a &lt;code&gt;NOT&lt;/code&gt; functionality, as &lt;code&gt;AND&lt;/code&gt;/&lt;code&gt;OR&lt;/code&gt; are made up of resistors and diodes.&lt;/p&gt;&#xA;&lt;p&gt;But there where some specialized storage tubes, but different from what you imagine. One was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Williams_tube&quot; rel=&quot;noreferrer&quot;&gt;Williams tube&lt;/a&gt;, basicly a CRT where dots could be read back. The other was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Selectron_tube&quot; rel=&quot;noreferrer&quot;&gt;Selectron tube&lt;/a&gt;. also using the same effects, but with a more sohisticated and adapted design. Both vanished soon for core memory.&lt;/p&gt;&#xA;&lt;p&gt;Havin said that, regular tubes where of course used also to store bits - as part of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Flip-flop_(electronics)&quot; rel=&quot;noreferrer&quot;&gt;Flipflop&lt;/a&gt; - but it always (*1) needs two triodes.  The first (documented) one would be the &lt;em&gt;Eccles–Jordan trigger circuit&lt;/em&gt; (patent filed 1918).&lt;/p&gt;&#xA;&lt;p&gt;Since double triodes - two triodes in one glas tube - are usually used, the impression may arise that only one tube is needed.&lt;/p&gt;&#xA;&lt;p&gt;A tube based flipflop may look like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/x5pjm.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/x5pjm.gif&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;The Display (Background)&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I could imagine putting together some LEDs, some cheap switches, and an Arduino or a Raspberry Pi to make such a device.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Naa, uncool.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But, ideally, I'd like to use vintage parts, so that this device could not simply illustrate binary, but also provide at least a glimpse of the ways that binary data has been physically represented.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, that's the real way :))&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there a feasible way to build a byte using vacuum tubes, whose value could be changed with electrical switches,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, it is, and it isn't a lot of work.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and then have some sort of interface to connect it to a Pi (or something else) to read its value and output it to a screen?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Naa, that'll kill the whole effort. I'd strongly suggest to keep complete free of modern computing/controlling parts. Otherwise the pupils may come up with the idea that it's faked anyway. No hidden (or visible) modern devices should be harmed when making this demonstrator :))&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I could also use something that isn't a vacuum tube (I could use individual transistors for instance). I like the idea of vacuum tubes chiefly because it can help illustrate a longer history of computing technologies.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4921/manassehkatz&quot;&gt;Manassehkatz&lt;/a&gt; already &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6450/6659&quot;&gt;pointed out&lt;/a&gt;, relays do make a great demonstrator. Here the students can see the bits physically switch. It's even possible to add mechanical markers to display the state of each bit - providing a way to read the data without any electronic support :))&lt;/p&gt;&#xA;&lt;h2&gt;The Display (Suggestion)&lt;/h2&gt;&#xA;&lt;p&gt;Go with a set of &lt;a href=&quot;https://en.wikipedia.org/wiki/Relay&quot; rel=&quot;noreferrer&quot;&gt;relays&lt;/a&gt; displaying your data - maybe 4 for a number, or 8 for a byte - configured as a latch holding the last input. To set new data have 4 (or 8) flip switches where any new data can be configured, and a button enabling these setting so be transferred into the latch.&lt;/p&gt;&#xA;&lt;p&gt;This setup shows that the storage is real and not just the direct result of the switches (like light and lightswitch at home). Data can be changed as often as needed until it's transferred, and stored data won't change until a new transfer is initiated (button pressed).&lt;/p&gt;&#xA;&lt;p&gt;LEDs can be used in conjunction with the relays and the switches to show each state independently and continuously.&lt;/p&gt;&#xA;&lt;p&gt;As an addition (or alternative) a decimal input could be constructed (at least for the 4 bit/numeric version). Have 10 buttons (0..9) and a diode matrix to encode them as BCD. Here each switch would trigger the latch right away. Showing much functionality with next to no parts(*2).&lt;/p&gt;&#xA;&lt;p&gt;In fact, with the numeric version you could use the saved 4 relays to store a second number - like whenever a new input gets stored in the first 4 relays, their content gets transferred to the second first - thus showing even data transfer between latches - and a simple input routine - in pure clear, clicking and moving hardware.&lt;/p&gt;&#xA;&lt;p&gt;With sufficient contacts on your relays it would be rather easy to extend this with an adder function summing up both digits and displaying the result...&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;... I'm not getting carried away on that, am I?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Long story short, relays are an extremely handy tool to explain the basics. And you'll be surprised how versatile a large enough bunch of switches is :))&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Oh, and one more thing: Relays allow you to build all of this using low voltage, like all 5V (or even below), so no danger as with tubes and neon lamps. Not to mention the way simpler power supply to be used (*3).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - There are designs that can keep a bit with just one tube, but not for generic use&lt;/p&gt;&#xA;&lt;p&gt;*2 -  And no bloaty Java libraries just to convert some input :))&lt;/p&gt;&#xA;&lt;p&gt;*3 - With a small enough setup a standard USB wall-wart might be enough to supply the device.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-05-11T20:10:26.100" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="6456" PostTypeId="1" AcceptedAnswerId="6462" CreationDate="2018-05-11T18:09:46.070" Score="13" ViewCount="3129" Body="&lt;p&gt;Wikipedia gives a good summary of the AI winter of the late eighties and early nineties (the qualification is necessary since there has been more than one). Some aspects of it are clear enough, but here's one I'm still curious about:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/AI_winter#The_fall_of_expert_systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/AI_winter#The_fall_of_expert_systems&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;By the early 90s, the earliest successful expert systems, such as&#xA;XCON, proved too expensive to maintain. They were difficult to update,&#xA;they could not learn, they were &amp;quot;brittle&amp;quot; (i.e., they could make&#xA;grotesque mistakes when given unusual inputs), and they fell prey to&#xA;problems (such as the qualification problem) that had been identified&#xA;years earlier in research in nonmonotonic logic.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Okay, but all those things were just as true in 1980 as they were in 1990, yet XCON was very profitable in 1980 despite those problems, so why was it not still profitable in 1990? What changed?&lt;/p&gt;&#xA;&lt;p&gt;The thing that comes to mind that might have changed is the competitive landscape. Conjecture: in 1980, the alternative to XCON was pen, paper and the occasional subproblem set up in VisiCalc. In 1990, the alternative was increasingly sophisticated ERP systems written with conventional technology, and the occasional use of Excel. XCON would still have been useful in 1990 had it been the only game in town, but the conventional alternatives were now good enough that it was no longer necessary to pay for the maintenance of an unconventional program.&lt;/p&gt;&#xA;&lt;p&gt;Is that the reason, or is there something else I'm missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="11795" LastEditDate="2020-08-16T19:41:55.910" LastActivityDate="2020-08-16T19:41:55.910" Title="Why did expert systems fall?" Tags="&lt;history&gt;" AnswerCount="3" CommentCount="10" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6457" PostTypeId="2" ParentId="6442" CreationDate="2018-05-11T18:18:28.933" Score="2" Body="&lt;p&gt;In contrast to many other CPUs, a feature of the 8080 is the separate address space for I/O devices. Other CPUs (like the 6502) used memory mapped I/O.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result of this architecture, the entirety of the 64K address space is available to the CPU as normal memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since CP/M is designed at the outset as a disk based system, there's no heritage of having any real requirement for anything in ROM. It could all be loaded from disk. If you wanted to, you could bootstrap a CP/M system on an IMSAI or Altair with nothing but RAM and the front panel. (Not suggesting anyone did, just that's it's possible.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, given now that you can have a system with access to the entire memory map, it behooves a designer to put the minimal amount of requirements on the underlying system up front, and then work within those minimal constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, at a logical level, the system requirements for a CP/M system are a computer with RAM available from 0x0000-0x00FF, as this area is reserved by the OS, and then memory at 0x0100-0xXXXX.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The programs view of the OS is solely through the two entry points (JP 0000 and JP 0005), and the published memory map of the first page of RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's a pretty minimal surface requirement. The CP/M system &quot;requires&quot; very little. You could have a CP/M system with 2 pages of RAM (1 for CP/M, 1 for your application) and BIOS/BDOS, even the application, in ROM. You could have a CP/M system where the OS consumes 0 RAM (via crazy hardware architecture shenanigans banking in the BIOS whenever it sees &quot;JP 5&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point isn't whether these designs are practical, or that they were even considered, rather simply that they're possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, CP/M is a system that requires 1 page of RAM, offers it's list of services (i.e. disk file access etc via JP 5), and mandates that your application starts at 0x0100. That's it. The sky is that-a-way --&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, this minimal baseline turned out to be quite flexible. Most systems are 64K RAM machines, banking out a ROM boot loader, with BIOS/BDOS at high memory. That's because of how it was implemented and shipped from DR. Simple, useable, and practical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, it enabled general purpose systems with different amounts of RAM (including large amounts), different architectures, memory bank schemes, even the rise of MP/M which could run off the shelf CP/M binaries. As long as it LOOKS like CP/M to the binary, it IS CP/M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, having programs load at 0x0100 simply gives them the biggest opportunity to have as much access to the system resources as possible.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-05-11T18:18:28.933" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6458" PostTypeId="2" ParentId="6430" CreationDate="2018-05-11T19:59:42.953" Score="11" Body="&lt;p&gt;Amiga &lt;code&gt;.monitor&lt;/code&gt; files follow the same conventions as Exec Device Drivers. They are loadable shared libraries. Instead of providing an Open/CloseDevice interface, they provide Open/CloseMonitor. &lt;code&gt;OpenMonitor()&lt;/code&gt; can be called to get the &lt;code&gt;MonitorSpec&lt;/code&gt; data structure that defines the monitor's capabilities. This information then becomes part of the Amiga graphics.library &lt;code&gt;DisplayInfo&lt;/code&gt; database that is used by applications to query and setup different display modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At boot, AmigaOS scans DEVS: for various disk-based (as opposed to ROM-based) device drivers (i.e. shared libraries). DEVS:Monitors is just the sub-directory where &lt;code&gt;.monitor&lt;/code&gt; device drivers live. So AmigaOS can add them to the &lt;code&gt;DisplayInfo&lt;/code&gt; database and then make all the supported display modes visisble for the user to choose in the Preferences app. The common &lt;code&gt;.monitor&lt;/code&gt; drivers (NTSC, PAL) are present in ROM, so DEVS:Monitors is really just for specifying non-standard monitors that extend the available display modes.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-05-11T19:59:42.953" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6460" PostTypeId="2" ParentId="6446" CreationDate="2018-05-12T08:43:33.513" Score="12" Body="&lt;p&gt;&lt;strong&gt;Switching Tech&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tubes&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not recommend to use them because you would need to deal with high voltage and heat dissipation which can be potentially dangerous especially in class (pupils do not act with self preservation in mind sometimes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yI5Ge.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yI5Ge.png&quot; alt=&quot;tube&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Relays&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Very nice alternative. Easy to understand (switch with electromagnet) using single low voltage (5V,12V,48V). They are still used and produced so you might have no problem obtaining them. My best bet would be to use the transparent ones where you can see the coil and switches... They natively provide functionality of &lt;strong&gt;NOT&lt;/strong&gt;(&lt;code&gt;/&lt;/code&gt;),&lt;strong&gt;COPY&lt;/strong&gt;(&lt;code&gt;1&lt;/code&gt;) gates and more of them can be combined into &lt;strong&gt;AND&lt;/strong&gt;(&amp;amp;),&lt;strong&gt;OR&lt;/strong&gt;(1),&lt;strong&gt;NAND,NOR&lt;/strong&gt; gates easily in an understandable way even for people with almost no electric engineering knowledge. They usually have more than just single switch so in case of more complex logic circuits you do not need to add more relays per gate using the same input signal (unlike TTL) so the number of used relays is not proportional to number of logic gates (up to a point).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disadvantage is they are noisy (not an issue for low speeds and small number of relays) and current hungry (should prefer the low power ones) they will eat up significant amount of current so you need to have adequate power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nlQKy.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nlQKy.png&quot; alt=&quot;relay&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Transistors&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the best from performance and power consumption perspective but for your purpose they might not be as educational as the previous options. On the other hand with transistors you will need to add a lot of passive components to make hem work safely.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Diodes&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes even diodes are used for switching in some cases (See &lt;a href=&quot;https://en.wikipedia.org/wiki/Diode%E2%80%93transistor_logic&quot; rel=&quot;noreferrer&quot;&gt;DTL&lt;/a&gt; technology) but unless &lt;strong&gt;LED&lt;/strong&gt;s are used they might not be as educational too.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resistors&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;some gates are doable with passive component too like Wire OR ... might save you some active stuff... But not usable with power hungry switching like relays without amplification or serious heat problems.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Storage&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Flip-flop_(electronics)&quot; rel=&quot;noreferrer&quot;&gt;flip/flop circuit&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;usually contained with 2 switching parts looped together. They are booth either copy or negator gate. You might also add some diodes or other gates to decouple Read and Write signals.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ferrite memories&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using magnetization hysteresis where used in computer in the past (not just tapes and mag strips there where also hybrid ICs for this too)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic memory DRAM&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It uses capacitance to store data where the medium can be anything even heat (not just electric charge)... but needs a refresh cycle to maintain the data storage time to time&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mechanical memory&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where the data is stores as mechanical state of some moving part like rotation angle of a shaft, or linear position or whatever ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Display&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Numitron/Digitron&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Old glow-tube style character or numeric or combined single digit/character display. There are two types one is segmented (like 7-segment) and the other is layered having one electrode layer per each supported alphanumeric character. If you use tubes than this is the way for display. But it is a tube so read the Tubes topic too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PnCdU.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PnCdU.png&quot; alt=&quot;digitron&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/uQlmI.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uQlmI.png&quot; alt=&quot;numitron&quot;&gt;&lt;/a&gt;&#xA;[&lt;img src=&quot;https://i.stack.imgur.com/4pvF0.png&quot; alt=&quot;digitron[5]&quot;&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;7-Segment LED Display&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you need a proper decoder to convert binary to hex/dec for proper 7-Segment display output (there are ICs for that) but can be done with KLO using switching gates (even with relays). These displays are still in use so you should have no problem obtaining it. If you want old look you can even use light bulbs organized in a similar manner instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EbIEx.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EbIEx.png&quot; alt=&quot;7-segment&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Binary Coded Decimal &lt;strong&gt;BCD&lt;/strong&gt; is your friend.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ff7Yv.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ff7Yv.png&quot; alt=&quot;BCD to 7 segment decoder&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;LED&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;this is suitable for binary output of your Byte. Also you can use light bulbs instead. &lt;strong&gt;LED&lt;/strong&gt;s are combinable with any of the switching technologies you just add proper resistor. On the other hand Light bulbs are power hungry and require power switching so you would need to adjust the final gates for them.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;VGA&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use small &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6055/6868&quot;&gt;MCU to generate VGA signal directly&lt;/a&gt; with your &lt;code&gt;BYTE&lt;/code&gt; number (AVR32 like AT32UC3A is powerful enough for this task)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;PC&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can send the &lt;code&gt;BYTE&lt;/code&gt; to &lt;strong&gt;PC&lt;/strong&gt; and display it with simple app. You can use &lt;strong&gt;RS232&lt;/strong&gt; or &lt;strong&gt;USB&lt;/strong&gt; or even &lt;strong&gt;LPT&lt;/strong&gt; (if proper drivers are added to enable access) but this would also require &lt;strong&gt;MCU&lt;/strong&gt; usage.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If I where you I would chose low power &lt;strong&gt;5V&lt;/strong&gt; or &lt;strong&gt;12V&lt;/strong&gt; relays and 8 switches 2 x &lt;strong&gt;7 segment display&lt;/strong&gt; and &lt;strong&gt;BCD&lt;/strong&gt; 2x4 bit encoding. So you would have everything on single board with only single power supply requirement or even on battery power (for limited use) all the logic is doable with relays. You would need 16 for the memory and either 2x &lt;strong&gt;BCD to 7 segment decoder&lt;/strong&gt; or do it on your own (but that would be quite a lot of relays) Interesting would be do one digit with IC and the other with relays to visually show what ICs and integration are for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Btw may be using push buttons would be better than switches as the switches on it self are form of mechanical memory rendering your memory circuit needless. For example 8x set button and one reset for all bits.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-05-14T18:43:57.093" LastActivityDate="2018-05-14T18:43:57.093" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6461" PostTypeId="2" ParentId="6448" CreationDate="2018-05-12T08:49:45.853" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Does anyone know why? I imagine that not having to read the I would help a tiny bit, but the time difference seemed far too great to be that alone.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3&gt;Short Answer:&lt;/h3&gt;&#xA;&lt;p&gt;It's quite simple. Looking for a &lt;code&gt;NEXT&lt;/code&gt; stack entry with a specific variable takes more time then just looking up the last &lt;code&gt;NEXT&lt;/code&gt;- and beingpart of a loop makes it even more costly.&lt;/p&gt;&#xA;&lt;h3&gt;Detailed Answer:&lt;/h3&gt;&#xA;&lt;p&gt;Each &lt;code&gt;FOR&lt;/code&gt;/&lt;code&gt;NEXT&lt;/code&gt; loop creates a frame on the (BASIC) stack - like &lt;code&gt;GOSUB&lt;/code&gt;, &lt;code&gt;ON ERR&lt;/code&gt; or alike does. When a &lt;code&gt;NEXT&lt;/code&gt; without a variable name occures, the last next-frame is searched and handled.&lt;/p&gt;&#xA;&lt;p&gt;Now, if one (or more) variables are present, also the first &lt;code&gt;NEXT&lt;/code&gt; entry is searched, like before, but further the variable needs to be parsed from the command, then searched in the variable table and finally compared to the one used in the stack entry found (fine details see below). If not equel, it gets repeated. This difference might sound small, but it adds up with every iteration.&lt;/p&gt;&#xA;&lt;h3&gt;Deeper Details:&lt;/h3&gt;&#xA;&lt;p&gt;(MS-) BASIC stores variable names within the tokenized program as character strings. To look up a variable from the name the string need to be searched in the variable tab, resulting in a pointer to the entry (and thus the value).&lt;/p&gt;&#xA;&lt;p&gt;A for-stackframe stores, beside things like start value, sign or step value, the address of the variables value (within the variable table). So to compare if a variable given at &lt;code&gt;NEXT&lt;/code&gt; is the same, it has first to be searched and then the addresses to be compared.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;Finding a variable takes time&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;All of this is the reason why not only &lt;code&gt;NEXT&lt;/code&gt; without a variable is faster, but also why speed of &lt;code&gt;NEXT&lt;/code&gt; handling varies with the variable used. With an early declared variable, it will be faster than with a later one. Therfore a good old &lt;code&gt;1 LET I=0&lt;/code&gt; at the beginning of a program using &lt;code&gt;I&lt;/code&gt; as loop variable will speed up tings - the same way as the general habit of declaring often used variables in (MS-)BASIC will do.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-05-12T08:49:45.853" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6462" PostTypeId="2" ParentId="6456" CreationDate="2018-05-12T15:22:48.913" Score="17" Body="&lt;p&gt;They failed because they didn't live up to the hype. What was touted as a technology with broad applicability turned out not to be as generic and general purpose as was hoped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, expert systems are &quot;settled science&quot; and routinely employed in all sorts of fields. But, when they're used, they tend to be buried behind the scenes as support functionality, rather than a fundamental core idiom of development and design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, and I likely have the details of this anecdote incorrect, there is (was) a service in the Windows OS around the networking stack, and they chose to write that little piece in Prolog. Prolog is, essentially, a programming language with a built in &quot;expert system&quot;. The rule set for the task was a good match for Prolog.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it's not like &quot;Windows is written in Prolog&quot;, or any other grand thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expert systems have their place, and are a powerful tool. But a combination of over promising the hope behind AI, the performance of the AI systems, and then delivered end product simply didn't meet the expectations of the market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, you see headlines about how &quot;AI&quot; people are the experts in demand. Modern AI is focused on a completely different direction than the AI of the 80's. And only through the modern machines and, as important, the modern infrastructures of &quot;Big Data&quot; and massive multi-processing has modern AI been able to come to the fore front of the market.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-05-12T15:22:48.913" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6463" PostTypeId="1" AcceptedAnswerId="6467" CreationDate="2018-05-13T11:08:51.413" Score="4" ViewCount="190" Body="&lt;p&gt;I know that we have LTO tapes, which have really good longevity and are reliable. But they're still magnetic so they're not protected against big magnetic wave (e.g. from sun).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an option to store my data on punched tapes but the problem is that the information density is pretty low so storing a megabyte of data would be a pain. Maybe it would be useful to develop something like a QR code for big chunks of data which you could print on a paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: what is the best way to archive your computer data on some nonmagnetic storage so it will last as long as possible and will be as resistant as possible?&lt;/p&gt;&#xA;" OwnerUserId="8675" LastActivityDate="2018-05-15T08:10:17.687" Title="Archiving data on a nonmagnetic storage" Tags="&lt;storage&gt;&lt;backup&gt;&lt;archival&gt;" AnswerCount="2" CommentCount="3" ClosedDate="2018-05-17T15:50:28.970" ContentLicense="CC BY-SA 4.0" />
  <row Id="6464" PostTypeId="2" ParentId="476" CreationDate="2018-05-13T12:01:26.290" Score="10" Body="&lt;p&gt;I'll speak to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Atari BASIC&lt;/a&gt; issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS BASIC for the 6502 was ported &lt;a href=&quot;https://www.pagetable.com/?p=46&quot; rel=&quot;noreferrer&quot;&gt;directly from the original 8080 code&lt;/a&gt;. On the 8080, the code was well under 8 kB, which allowed the complete BASIC interpreter and a number of OS-related extensions to be burned onto a single 8 kB ROM chip. On the 6502, where the machine code is not as compact, the code came in at about 7900 bytes, which didn't leave much room for anything else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So MS decided to make two versions for the 6502, one at 7900 bytes with the original 6-byte floating point code, and a new version at about 8900 bytes that used a larger 9-byte format for floating point numbers. The later was intended to be used in 12 or 16 kB systems. These were known as the &quot;8K&quot; and &quot;9K&quot; versions, respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Atari licensed the 6502 version it was for a new console design that used 8 kB ROM cartridges. They decided to start with the smaller 7900 byte version, but they also wanted to add new commands to access the graphics and sound capabilities. In spite of (apparently) considerable effort through 1978, they failed to get all of this onto a single ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One interesting feature of the original Atari 800 was that it had two cartridge slots. This was originally intended to solve this problem; one would hold the basic interpreter, and a second optional cartridge would include another set of commands to extend it. At some point they dropped this concept - which is good because it would have meant that the extended commands would never be available, as most of the machines sold were 400's which didn't have the second slot. It was really not well thought out. Some time later such a cartridge did appear, the &lt;a href=&quot;http://www.atarimania.com/utility-atari-400-800-xl-xe-monkey-wrench-ii_17608.html&quot; rel=&quot;noreferrer&quot;&gt;Monkey Wrench&lt;/a&gt;, but these were very rare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So instead they went looking for 3rd party companies that could fit a BASIC into a single cart. Sheppardson Microsystems (SMI) eventually won the contract. To make it fit, they dropped MS's system for handling strings and replaced it with a much simpler system using character arrays. They also moved several portions of the code out of the cartridge and into a separate OS ROM. This left the original OS shipping on two ROMS, an 8k with most of the system, and a separate 2k with the floating point routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This worked fine, and let the BASIC come in at just under 8 kB even with extensions like GRAPHICS and SOUND. But it also meant the BASIC was incompatible with the MS varieties. For instance, there were no LEFT/MID/RIGHT functions, which made porting MS programs rather hard. Also, because strings &lt;em&gt;were&lt;/em&gt; arrays, you could not make &quot;an array of strings&quot;, which was another widely used concept in many MS programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original contract was signed sometime in the summer of 1978, and called for the final version to be delivered by April 1979. There was a bonus clause if they finished it early. Atari was planning on announcing the machines at the January 1979 CES show, so they were going to show their working-but-too-large MS version and then sell the machine starting that summer with the SMI version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what happened is that SMI worked hard and delivered a beta version in October so they could capture the bonus. Atari took that version to the CES. In the few months between delivery and CES, SMI found and fixed a number of bugs, one very nasty one in particular. However, when they delivered the update, they found that Atari had already started burning the October version to ROM, and so all the early machines shipped with the buggy version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that's the long version of why Atari BASIC is so different - basically because it is not from the same original code as most others which were licensed from the same original code base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;WAX ON&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the benefit of hindsight, we can say that the SMI supplied BASIC was terrible. In addition to being incompatible and buggy, it was, simply, very poor quality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many simple ways to speed up the code were not implemented, and the floating point routines were &lt;em&gt;extremely&lt;/em&gt; slow, as they were not ported from the somewhat better MS versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, Atari BASIC was by far the slowest of the 8-bit era. It always finished at the end of the Byte and &lt;a href=&quot;http://archive.org/stream/creativecomputing-1983-11/Creative_Computing_v09_n11_1983_November#page/n269/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;CC benchmarks&lt;/a&gt;, even below a number of hand-held calculators!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several replacements were offered over the years. Of particular note is &lt;a href=&quot;https://en.wikipedia.org/wiki/Turbo-Basic_XL&quot; rel=&quot;noreferrer&quot;&gt;TURBO-BASIC XL&lt;/a&gt;, which was fully compatible, offered a number of great extensions, and still fit into the same 8kB - in fact, you had about another 1700 bytes free for code! An unchanged Atari BASIC program would run &lt;strong&gt;three to five times faster&lt;/strong&gt; in TURBO, putting it near the top of those same benchmarks. And then there was the compiler...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A number of the concepts in TURBO have not been used in other BASICs, and it would be interesting to see them ported over.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-05-16T18:11:22.603" LastActivityDate="2018-05-16T18:11:22.603" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6465" PostTypeId="1" CreationDate="2018-05-13T12:02:36.043" Score="5" ViewCount="188" Body="&lt;p&gt;My Fox II 286 mainboard just blew a capacitor. I haven't yet powered it on, so maybe the cap was bad. How can I diagnose this problem, and eliminate other bad caps?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Gjz2i.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gjz2i.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8337" LastActivityDate="2018-05-13T12:40:05.310" Title="How to diagnose a failed capacitor on the mainboard?" Tags="&lt;repair&gt;&lt;maintenance&gt;&lt;80286&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6466" PostTypeId="2" ParentId="6465" CreationDate="2018-05-13T12:40:05.310" Score="4" Body="&lt;p&gt;The wear of solid electrolyte tantal caps as these are is neglectable. They are however extremely sensitive to overvoltage. As this is a cap right near the power connector, I suspect the power supply is broken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seems to be the +12V or -12V line. Check these on the power supply before reconnecting. Maybe you are lucky and nothing else got fried.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Chances you accidentally mixed up the two halves of the power connector? What you have there at the back of the photo also doesn't seem to belong to an AT power supply.)&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2018-05-13T12:40:05.310" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="6467" PostTypeId="2" ParentId="6463" CreationDate="2018-05-13T12:55:16.730" Score="3" Body="&lt;p&gt;There is soft for archiving on paper (&lt;a href=&quot;http://ollydbg.de/Paperbak/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;). See a discussion about archiving on paper &lt;a href=&quot;https://blog.codinghorror.com/the-paper-data-storage-option/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Even specialized soft for archival of cryptographic keys on paper exist (see &lt;a href=&quot;http://www.jabberwocky.com/software/paperkey/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Of course, this will nor survive a fire, but is much more reliable under the correct circumstances than magnetic tapes and even optic (printed paper can last centuries). Of course, this will not be good for the archival of massive amounts of data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;as long as possible&quot; part of the problem is, IMHO, with no easy solution. People who invested on some media to archive has no guarantee that readers will exist some time from now (remember zipdrives?). Cloud based storage? There is some cases of data loss (nothing big enough to scare) but security wise, that's another story...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that a backup &lt;em&gt;strategy&lt;/em&gt; is more important that a backup &lt;em&gt;media&lt;/em&gt; for all cases. Domestic users today count data with need for archival at the rate of gigabytes, and users with terabytes of data are not uncommon. Understanding the basics of cryptography, redundancy, reliability and security will do the difference, when a choice is made.&lt;/p&gt;&#xA;" OwnerUserId="225" LastActivityDate="2018-05-13T12:55:16.730" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6468" PostTypeId="1" AcceptedAnswerId="6481" CreationDate="2018-05-13T17:05:48.807" Score="6" ViewCount="395" Body="&lt;p&gt;Of the features that were &lt;em&gt;not&lt;/em&gt; copied from &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC-PLUS&quot; rel=&quot;noreferrer&quot;&gt;BASIC-PLUS&lt;/a&gt; to MS BASIC only one seems to be a good idea, and I'm not sure it really is. I'd like to hear from people that have opened the guts of MS BASIC to comment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those of you who have not heard of it, BASIC-PLUS was a version of BASIC for the PDP-11 machines that ran under the time-sharing &lt;a href=&quot;https://en.wikipedia.org/wiki/RSTS/E&quot; rel=&quot;noreferrer&quot;&gt;RSTS/E&lt;/a&gt; OS. It was copied almost verbatim as the original Altair BASIC. A few features were left out of MS, but anyone familiar with an 8-bit BASIC will be right at home in BASIC-PLUS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of the features left out were functions for working with matrices. For instance, if you &lt;code&gt;DIM A(10,10)&lt;/code&gt; and then at some point do &lt;code&gt;A = A + 1&lt;/code&gt;, it would add one to every item, or if you had another matrix you could &lt;code&gt;A = A + B&lt;/code&gt;. Very interesting, but ultimately not something I would personally put into the very core of the language, this seems esoteric enough for day-to-day use that functions would seem to be perfectly adequate. Likewise, the &lt;code&gt;CHANGE&lt;/code&gt; command just seems like a waste, it avoids a single loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;BUT&lt;/em&gt;, the one that I'm curious about is the ability to put branch- and loop-like operators inline with other code. For instance...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 A = A + 1 UNTIL A = 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now this is a silly example, but it illustrates the basic idea. You could place &lt;code&gt;IF&lt;/code&gt;, &lt;code&gt;FOR&lt;/code&gt;, &lt;code&gt;UNTIL&lt;/code&gt;, &lt;code&gt;WHILE&lt;/code&gt; or &lt;code&gt;UNLESS&lt;/code&gt; at the end of any line of code and it would replace the commands. For instance, the example above is equivalent to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 IF A = 10 GOTO 40&#xA;20 A = A + 1&#xA;30 GOTO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;At first glance, it would see there is little in this addition from a code perspective. Yes, writing it all on one line makes it run faster because it interprets line-at-a-time, but of course you could also...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 IF A = 10 GOTO 20 : A = A + 1 : GOTO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I suspect that would run exactly as fast? At least if it caches the line number for the GOTO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But perhaps I am missing some sort of additional advantage to this style?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-05-22T15:37:58.023" Title="BASIC-PLUS inline operators, do they actually make sense?" Tags="&lt;microsoft-basic&gt;" AnswerCount="4" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="6469" PostTypeId="2" ParentId="6468" CreationDate="2018-05-13T19:35:44.750" Score="4" Body="&lt;p&gt;As for &amp;quot;branch and loop like in-line operators are a waste, because they can be emulated with mutiple lines&amp;quot;: It's important to remember that on machines like the PDP-11, a user was restricted to 64 KB or less, and it wasn't particularly fast. And if you have a larger scientific program that needs lots of memory for matrices and arrays, you'll notice the difference. So everything that can make it a bit faster, needs less space and saves explicit loops (which are slow) helps. That holds for matrix addition as well.&lt;/p&gt;&#xA;&lt;p&gt;Also, in-line conditional and loops also appear in other languages, historical and modern, from ARM machine code to PERL&lt;/p&gt;&#xA;&lt;p&gt;Other languages like &lt;a href=&quot;https://en.wikipedia.org/wiki/MUMPS&quot; rel=&quot;nofollow noreferrer&quot;&gt;MUMPS&lt;/a&gt; that very also developed for the PDP-11 also have in-line conditionals (called &amp;quot;postconditionals&amp;quot; because they appear after the command word), so it's nothing unusual.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I did a little research and reverse engineering, and here are the results. First, a bit of &lt;a href=&quot;http://elvira.stacken.kth.se/rsts/rsts_80th_birthday.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;history&lt;/a&gt; (do look at the entries with more recent or future dates, they are quite funny. But I assume the old entries are accurate):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Enter the cavalry - a small specialised software house called Evans Griffith and Hart that had already established itself as a “star” with the worlds first LISP compiler. (The founders, like Ken Olsen, had also been at MIT.)&lt;/p&gt;&#xA;&lt;p&gt;Computerworld article, dated 05-Aug-70, describes an “IL” compiler written by Tom Evans.&lt;/p&gt;&#xA;&lt;p&gt;Dave Knight suggests that EG&amp;amp;H should contact Hank Spencer as it seemed likely that Digital would contract out a project to “implement the BASIC Editor/Compiler for a PDP-11 Multi-user BASIC”.&lt;/p&gt;&#xA;&lt;p&gt;[...]&lt;/p&gt;&#xA;&lt;p&gt;The original idea had been for EG&amp;amp;H to write the BASIC PLUS lexical analyser and create the “push pop” code. A Digital employee would have handled the actual execution of a program, ie what happened after you typed RUN.&lt;/p&gt;&#xA;&lt;p&gt;[...]&lt;/p&gt;&#xA;&lt;p&gt;In reality, EG&amp;amp;H were left to do everything-and Tim Hart (the H bit of EG&amp;amp;H) wrote the majority of the code and finished it during January 1971. The run only system was abandoned.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And in fact, the RSTS/E BASIC PLUS as provided by the &lt;a href=&quot;http://simh.trailing-edge.com/kits/rstsv7swre.tar.Z&quot; rel=&quot;nofollow noreferrer&quot;&gt;RSTS/E prebuilt system&lt;/a&gt; on the &lt;a href=&quot;http://simh.trailing-edge.com/software.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;simh software website&lt;/a&gt; does compile BASIC to a &amp;quot;push pop code&amp;quot;, or, in other words, and intermediate byte code for a stack-based virtual machine similar to UCSD p-Code (and probably many others). This can be easily seen by using &lt;code&gt;COMPILE&lt;/code&gt; and extracting or dumping the resulting &lt;code&gt;.BAC&lt;/code&gt; file with the &lt;code&gt;rstsflx&lt;/code&gt; extractor form &lt;a href=&quot;https://github.com/simh/simtools&quot; rel=&quot;nofollow noreferrer&quot;&gt;simtools&lt;/a&gt;. For example, the line&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;40 K=I+2.5+J&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;is compiled to&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;a3 ff 72    ; push float var I&#xA;78 41 20    ; push float const 2.5&#xA;80          ; add&#xA;a3 ff 6a    ; push float var J&#xA;80          ; add&#xA;a6 ff 7a    ; store float var K&#xA;0a          ; end of line&#xA;00          ; nop (to pad to even addresses)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Actually, &lt;code&gt;COMPILE&lt;/code&gt; dumps part of the work space, including besides the byte code the read buffer for entered lines, the buffer for file versions, line number tables and probably other stuff. New compiled code is added at the end; old code is kept (and probably garbage collected at some time)&lt;/p&gt;&#xA;&lt;p&gt;So code is compiled to byte code either when entered or when read from file, and &lt;code&gt;RUN&lt;/code&gt; executes the compiled byte code.&lt;/p&gt;&#xA;&lt;p&gt;This is confirmed by the &lt;em&gt;RSTS-11 SYSTEM USER'S GUIDE&lt;/em&gt;, page 2-15:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Normally, RSTS-11 accepts each line of the user program as it is entered and, if the line is syntacically correct, translates the line into a form understood by the RSTS-11 Run Time System. (The BASIC-PLUS Compiler produces an intermediate code which is then interpreted by the RSTS-11 Run Time System into a form executable on the PDP-11 computer). As the program is edited, only those lines which are changed are recompiled (i.e., translated).&lt;/p&gt;&#xA;&lt;p&gt;[...]&lt;/p&gt;&#xA;&lt;p&gt;Once a program is completely deveeoped and debugged, it may be desirable to avoid the time-consuming practice of compiling the program every time it is brought into memory. For this reason, the COMPILE command has been provided. COMPILE permits the user to save an image of his compiled program, rather than (or in addition to) the source text of the program.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So an IF-inline operator looks like this in bytecode:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;100 IF I&amp;gt;5 THEN J=6&#xA;&#xA;a3 ff 72    ; push float var I&#xA;78 41 a0    ; push float const 5&#xA;92          ; compare: greater&#xA;58 00 00    ; conditional jump&#xA;78 41 c0    ; push float const 6&#xA;a6 6a ff    ; store float var J&#xA;0a 00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The post-condition form is nearly indentical:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;110 J=6 IF I&amp;gt;=5&#xA;&#xA;a3 ff 72    ; push float var I&#xA;78 41 a0    ; push float const 5&#xA;92          ; compare: greater&#xA;d8 00 06    ; conditional jump&#xA;78 41 c0    ; push float const 6&#xA;a6 6a ff    ; store float var J&#xA;0a 00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The only difference is the conditional jump; I haven't found out yet why there are two, and why the latter form seems to include the size of the THEN-branch.&lt;/p&gt;&#xA;&lt;p&gt;Now a multi-line version of this with &lt;code&gt;GOTO&lt;/code&gt; would take up quite a few more bytes (both in bytecode, and in the additional bytes needed for the line number table entries). It also would be slower, because the lines would have to be looked up in the line number table, which points to the byte code. (Without this indirection, it wouldn't be possible to recompile just single lines as they are entered).&lt;/p&gt;&#xA;&lt;p&gt;So inline operators &lt;em&gt;do&lt;/em&gt; make sense: They are smaller and faster.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-05-22T09:58:02.670" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6470" PostTypeId="1" AcceptedAnswerId="6471" CreationDate="2018-05-14T09:08:39.690" Score="20" ViewCount="4764" Body="&lt;p&gt;It seems that right from the outset, the plan for Windows development was that it would be done with a separate set of compilers specifically equipped for that purpose. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Windows SDK comes with 7 diskettes, with &lt;strong&gt;all the tools you need including a special version of the Microsoft C Compiler version 3.0&lt;/strong&gt;,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(from &lt;a href=&quot;http://www.charlespetzold.com/etc/windows1/&quot; rel=&quot;noreferrer&quot;&gt;Windows 1.0&#xA;and the&#xA;Applications of Tomorrow, Petzhold, 2005&lt;/a&gt;) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Certainly, as a significant programming language implementation company, Microsoft had the capability to build the specialized tools and an interest in selling them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But was it actually &lt;strong&gt;necessary&lt;/strong&gt; to use Windows-specific tools? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 16-bit Windows API was provided through dynamic link libraries, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Dynamic-link_library#Background_for_DLL&quot; rel=&quot;noreferrer&quot;&gt;the initial versions Windows used a single address space&lt;/a&gt;, which suggests that it would be theoretically possible to use it with any code that could make appropriate calls to the known fixed addresses. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However it is unclear to me if this would be a problem in practice either due to practical issues with using the API or other compatibility issues.&lt;/p&gt;&#xA;" OwnerUserId="8508" LastEditorUserId="15334" LastEditDate="2021-01-14T10:09:16.777" LastActivityDate="2021-01-14T10:09:16.777" Title="Was it feasible to create Win16 software using pre-existing DOS development tools?" Tags="&lt;software-development&gt;&lt;windows-3.x&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6471" PostTypeId="2" ParentId="6470" CreationDate="2018-05-14T09:24:49.943" Score="21" Body="&lt;p&gt;Windows executables are in &lt;a href=&quot;http://program-transformation.org/Transform/NeFormat&quot; rel=&quot;noreferrer&quot;&gt;NE&lt;/a&gt; format rather than the &lt;a href=&quot;https://www.fileformat.info/format/exe/corion-mz.htm&quot; rel=&quot;noreferrer&quot;&gt;MZ&lt;/a&gt; format used by DOS, so a developer would need a toolchain capable of generating files in that format. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows functions are not accessed by calling known fixed addresses, but by a list of imported symbols which are populated when the program is loaded. So the tools used would also have to generate this list.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2018-05-14T09:24:49.943" CommentCount="22" ContentLicense="CC BY-SA 4.0" />
  <row Id="6472" PostTypeId="1" AcceptedAnswerId="6473" CreationDate="2018-05-14T10:14:32.233" Score="12" ViewCount="1949" Body="&lt;p&gt;See the beginning of &lt;a href=&quot;https://www.youtube.com/watch?v=hmfLBAtGAKk&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=hmfLBAtGAKk&lt;/a&gt;.  Here's a screenshot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vmMhu.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vmMhu.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It basically clears characters pixel by pixel both horizontally and vertically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use sprites for the pixel by pixel cover and then clear complete characters at the right time?  Or is there another way to do this?&lt;/p&gt;&#xA;" OwnerUserId="8648" LastEditorUserId="576" LastEditDate="2018-09-12T08:09:53.437" LastActivityDate="2018-09-12T08:09:53.437" Title="What's a good way to implement this &quot;fade&quot; effect on C64" Tags="&lt;commodore-64&gt;&lt;graphics&gt;&lt;programming&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6473" PostTypeId="2" ParentId="6472" CreationDate="2018-05-14T10:24:15.237" Score="11" Body="&lt;p&gt;You could do the sides with sprites, and clearing the characters at the right time, as you have said. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the top and bottom, I would use something more like raster bars to do the top and bottom. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would first prepare a tileset which is all blank, so that the characters won't show.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, when I get to the right scanline, (the one I want to cut off at the bottom that is), I would just set the background colour to be the same as the border, and also point the character map to this &quot;invisible tileset&quot;. And obviously set the colour and characters back up again where you want to characters to show, at the top. I think this is the fastest way. It'll leave enough time for you to do your decrunch or precalcs or whatever.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-05-14T15:21:52.957" LastActivityDate="2018-05-14T15:21:52.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6475" PostTypeId="2" ParentId="6470" CreationDate="2018-05-14T11:52:34.060" Score="14" Body="&lt;p&gt;After doing a bit of research (on Raymond Chen's blog) one of the better examples of things Windows compilers did on 16 bit Windows was to increment BP before pushing it on the stack in a far called function (and decrementing it afterwards) so the code that walked the stack knew the size of the return address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20110316-00/?p=11203/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://devblogs.microsoft.com/oldnewthing/20110316-00/?p=11203/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compilers did need to do some odd things to work with 16 bit Windows and I remember Microsoft at the time period (things got better during the OS/2 Windows 3.x era) being a bit of a pain to work with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So unless you were writing assembler, probably not.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="79" LastEditDate="2020-05-26T12:39:43.990" LastActivityDate="2020-05-26T12:39:43.990" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6476" PostTypeId="2" ParentId="6470" CreationDate="2018-05-14T12:03:04.673" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But was it actually necessary to buy Windows-specific tools?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As usual it depends on the value of &lt;em&gt;'actually necessary'&lt;/em&gt; used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Strictly all that was needed was a linker producing NE (Windows) binaries. Of course, when calling Windows functions (hard to avoid) its calling convention needs to be satisfied. So either some wrapper libraries where needed, or low level code had to be added to do do the calling, or just change your style to do so (as I did with Assembly (*1)).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you programs were already nicely modularized (read: used external symbolic addresses for linking), then switching to programming for Windows wasn't a big deal.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Jup, my first Windows programs were written in Assembly - as most stuff I did :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-05-14T19:49:13.360" LastActivityDate="2018-05-14T19:49:13.360" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6477" PostTypeId="2" ParentId="6472" CreationDate="2018-05-14T14:39:12.940" Score="7" Body="&lt;p&gt;The most simple way is to copy the lores screen on a hires screen (using the charactersetrom) and then just clear the pixels...&lt;/p&gt;&#xA;" OwnerUserId="4853" LastActivityDate="2018-05-14T14:39:12.940" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6478" PostTypeId="2" ParentId="6468" CreationDate="2018-05-14T15:09:22.277" Score="2" Body="&lt;p&gt;Later versions of BBC BASIC (V and VI on the Acorn Archimedes/RiscPC) have structured-programming constructs which, syntactically, look a lot like some of your examples.  For example, &lt;a href=&quot;http://www.bbcbasic.co.uk/bbcwin/manual/bbcwin7.html#while&quot; rel=&quot;nofollow noreferrer&quot;&gt;the following is legal&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;WHILE A &amp;lt;&amp;gt; 10 : A += 1 : ENDWHILE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, a construct like &lt;code&gt;A += 1 WHILE A &amp;lt;&amp;gt; 10&lt;/code&gt; would potentially be faster than the above while-loop.  This is because BASIC &lt;em&gt;interpreters&lt;/em&gt; - that word is crucial - must first work out what to do, statement by statement, immediately before actually doing it.  Although my while-loop is on a single line, it consists of three distinct statements which must be re-parsed on every iteration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(BBC BASIC uses a tokenised representation of the program, and a lookup table in the interpreter, which makes it quite a lot faster than most interpreters - but it &lt;em&gt;is&lt;/em&gt; still an interpreter.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BBC BASIC For Windows does support whole-array operations using a limited set of operators.  This facility is not available on the Acorn versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More relevant, I think, is the code size limitations that Microsoft BASIC had to contend with.  BBC BASIC V had a 32-bit RISC CPU to work with, and the generous memory sizes that went with it.  BBC BASIC II had to squeeze all its facilities into a 16KB ROM and an 8-bit 6502.  Microsoft BASIC was typically supplied on an 8KB ROM - either that, or it had to be loaded from disk or tape into an already constrained RAM array.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compared to that, a 64KB, 16-bit PDP-11 would have been pure luxury, and would certainly have allowed a more generous feature set.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2018-05-14T15:09:22.277" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6479" PostTypeId="2" ParentId="6468" CreationDate="2018-05-14T15:16:37.117" Score="1" Body="&lt;p&gt;This is a very wishy-washy answer, mostly from the realm of languages I know a little but not a lot, but similar syntax survives today in Python e.g.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;result = value1 if applicable(value1) else default&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which is conceptually similar to collection-creation syntax like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;evens_only = [value for value in source_array if iseven(value)]&#xA;doubles_mapping = {value : 2*value for value in source_array}&#xA;... etc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That do some specific types of loops-on-the-right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also argue that the ternary in C is the same train-of-thought on assignments — &lt;code&gt;result = applicable(value1) ? value1 : default&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The benefit in each case is that it gives the fact of the assignment the dominant syntactic position. So you read it as &quot;I'm definitely going to assign something, I just need to pick what&quot;. A more traditional if/else would have to repeat the fact of the assignment and might even inadvertently omit or distort it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'd argue that it is can be a stylistic advantage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to performance in a BASIC interpreter, one can imagine that forcing the statement that is the subject of the loop to be a single atom might allow an intermediate representation to be kept as a hard-coded special case. But that's probably about it.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-05-14T15:16:37.117" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6480" PostTypeId="1" AcceptedAnswerId="17476" CreationDate="2018-05-14T15:58:55.567" Score="28" ViewCount="2207" Body="&lt;p&gt;As I look over old versions of BASIC trying to piece together their history, I come across repeated indications that BBC Basic was &lt;em&gt;really&lt;/em&gt; fast. One list puts it running the Ahl benchmark (for all its warts) in 21 seconds, compared to just over 30 for the Apple II, 123 for the C64, and a whopping 400 for the stock Atari.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I know that the Atari issue is the terrible, terrible floating point. Replacing those improves it to 123 seconds. Much of the rest is due to the GOTO/NEXT issue, and replacing those improves it again to 101 for MS BASIC, and 41 for TURBO-BASIC, which caches the line numbers for GOTO/GOSUB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now TURBO was one of the fastest BASICs out there, yet here the BBC version is besting it by about 2x. I would really like to explore how it did this. I contacted some of the original authors, but have not heard back. I also did a bunch of googling, but it returns too many off-topic hits, I can't seem to find anything relevant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, does anyone know of a description, or can simply type one, of why this was so fast? Did it cache line numbers for GOTOs? Use a reverse parser (as in Altirra)? Use p-code (like FastBasic?). And what about it's math routines... did they unroll the loops?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="10566" LastEditDate="2019-04-09T11:00:14.100" LastActivityDate="2020-12-26T23:04:25.940" Title="BBC/Acorn BASIC, what made it so fast?" Tags="&lt;basic&gt;&lt;bbc-micro&gt;&lt;acorn&gt;" AnswerCount="4" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6481" PostTypeId="2" ParentId="6468" CreationDate="2018-05-14T16:59:03.357" Score="6" Body="&lt;p&gt;I honestly don't remember these structures when I ran BASIC-PLUS on RSTS/E, so I never used them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did, however, use them pretty heavily when I moved to BASIC-PLUS on the VAX. I loved BASIC-PLUS on the VAX. We used it mostly with its first class integration with RMS. My singular complaint at the time was its reliance on line numbers for ON ERROR GOTO, even though line numbers were optional. I'm sure if I tweaked my technique, I could have alleviated that a bit, but it certainly didn't feel idiomatic to me at the time, so it ended up a bit of a mixed mess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We used to call BASIC-PLUS &quot;BAS-CAL-TRAN&quot; because of it being a BASIC with the structured elements of Pascal as well as features of FORTRAN (notably the COMMON blocks).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was not uncommon for me to used structures like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SUM = SUM + A(I) UNLESS A(I) &amp;lt; 0 FOR I = 1 TO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It was not a large leap for me to find this really readable. I think when read aloud it's more &quot;english like&quot; than the alternative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't speak to what implementation advantage these offer. They, arguably, complicate the compiler (which means a slower and/or larger compiler, both resources which were quite limited at the time). That suggest someone simply liked the syntax better to make it worth supporting. Perhaps there was a tangible runtime boost to make it worthwhile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't find these syntaxes in MS-BASIC simply because MS-BASIC (most BASICs) are running an interpreted stream of tokens. You can visualize each statement being executed directly. For example, when &lt;code&gt;NEXT I&lt;/code&gt; is executed in a &quot;normal&quot; BASIC, the interpreter honestly doesn't know when it starts if there's even a FOR statement in effect, much less that it's using I. At execution, the &lt;code&gt;NEXT I&lt;/code&gt; is evaluated in situ, and goes hunting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, clearly, when you have something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SUM = SUM + I FOR I = 1 to 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;SUM&lt;/code&gt; statement can't be evaluated until the FOR statement is evaluated (in order to properly populate &lt;code&gt;I&lt;/code&gt;), but with a MS-BASIC like interpreter, it simply &quot;doesn't know&quot; that the &lt;code&gt;FOR&lt;/code&gt; is coming. Supporting such a syntax certainly complicates the runtime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VAX BASIC-PLUS was compiled (i.e. there was a compile phase, whether it was compiled to machine code, I can't say). BASIC-PLUS on RSTS/E, when I used it, was not compiled. At least, I never compiled it. It ran like MS-BASIC. Type in commands, hit &quot;RUN&quot;, rinse, repeat. Obviously, when lines are parsed, the parser could internally rewrite:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SUM = SUM + I FOR I = 1 TO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FOR I = 1 TO 10:SUM = SUM + I: NEXT I&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If it wanted to (if that's, indeed, how it was done).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I have no memory of &lt;code&gt;RUN&lt;/code&gt; taking any extraordinary amount of time to start up (as if it's running through the program and pre-compiling it, or anything like that). And we tended to write some large programs in BASIC on RSTS/E (we were always running out of memory).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One feature of MS-BASIC was simply that the when you typed &lt;code&gt;LIST&lt;/code&gt;, it was as much a &quot;decompiler&quot; as anything. When a line of code is entered in MS-BASIC, it is tokenized (for example &lt;code&gt;PRINT&lt;/code&gt; is store as some number, vs the text &lt;code&gt;P R I N T&lt;/code&gt;), and this representation is what it stored in memory. This saved memory. When you typed &lt;code&gt;LIST&lt;/code&gt;, it would see the token for &lt;code&gt;PRINT&lt;/code&gt;, and then dump out the text on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, rewriting the BASIC code from the alternate syntax to the &quot;normal&quot; syntax, internally, you can see that can sort of mess up a &lt;code&gt;LIST&lt;/code&gt; implementation like in MS-BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I don't know how on RSTS/E BASIC-PLUS manifested these statements internally. But, either way, clearly BASIC-PLUS was a more sophisticated environment, and more complicated runtime. It helps not being limited to 8K of ROM. Even still, historically, this syntax style never really made it in to the MS style systems. It wasn't brought forward to VB, for example (which essentially had &quot;unlimited&quot; resources in terms of compiler and runtime complexity, especially compared to a PDP-11).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Addendum:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To highlight on @dirkt comment, and to expand on this answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did some exploration, fired up RSTS on SimH, and poked around. Dug through some manuals to get a crash course in BASIC-PLUS I/O and TECO to write a crude hex dump program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key outcome, as Dirk mentioned, is that BP is compiled. Not in to machine code, but in to a &quot;p-code&quot;, apparently known as &quot;push/pop&quot; code. Stack &quot;machines&quot; were reasonably popular in the day, with the UCSD-P system probably being the most well known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distinction between a compiled language, and what the MS-BASIC model implements is important. The MS-BASIC model is, essentially, a parse tree and an interpreter. In BP, the language is compiled in to an actual machine language of its own, even if it's a p-machine. That means that the p-code is un-related to actual source code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In MS-BASIC, the parsed, tokenized form is essentially a 1:1 relationship with the what the interpreter actually executes, albeit in abbreviated form. In MS-BASIC, for example, were you to do something like: &lt;code&gt;A = 1 + 2&lt;/code&gt;, there's no opportunity for the language processor to convert that in to simply: &lt;code&gt;A = 3&lt;/code&gt; through constant folding. It doesn't have that opportunity because of the requirement that the intermediate form represents the original source code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a compiled language the compile does have opportunity to do these things, as the goal is semantic equivalence rather than strict interpretation. Now, I can't say whether BP performed anything like this kind of optimization, but rather it has an opportunity to if it chooses to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To the point of the statement modifiers, &lt;code&gt;S = S + I IF I &amp;gt; 0&lt;/code&gt; is, while not impossible, certainly more difficult to implement in the MS-BASIC model, since in that model it interprets the stream of tokens as it sees them, with little &quot;global&quot; knowledge. Whereas the compiler model of BP can readily rewrite those types of statement in to an internal canonical form, that is the compiled appropriately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider this program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT FNA(2)&#xA;20 DEF FNA(X)=X*3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If BASIC-PLUS, this is a legal program (much to my surprise), as COMPILING (which happens when the lines are entered) the &lt;code&gt;DEF FNA&lt;/code&gt; is, apparently, enough to register the function properly with the run time system. In contrast, in MS-BASIC this program causes an error on line 10, because the &lt;code&gt;DEF FNA&lt;/code&gt; has not yet been EVALUATED. One can quibble about the &quot;right&quot; or &quot;wrong&quot; of either of these.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the motivations behind the use of the statement modifiers are still not clear. I'm of the opinion that they're simply syntax sugar. While they offer a potentially more compact form at a source code level, it's not really clear to me that it's enough to complicate the runtime in order to support it. Whatever memory savings in source code is balanced by runtime costs in the compiler, which is also memory bound. The BP runtime system consumed 32K of the 64K available to user processes. If they were truly interested in memory conservation, then adopting a model similar to MS-BASIC would have lead to higher gains. Keeping the source separate from the compiled binary certainly had an impact on overall memory consumption.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to performance, at a gut level I think that the BP system would perform better than the MS-BASIC style interpreter. Simply because since its an actual compiler, it doesn't have to suffer many of the runtime constraints of an MS style interpreter, including things like scanning for line numbers and labels. At compile time, it can Just Know. Mind, that doesn't mean that it actually does. It still has to deal with the interactive nature of the system, and ad hoc editing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I had GOTO 10 someplace in my code, and it was magically pointed to &quot;line 10&quot;, what happens when I delete line 10? what happens when I add a line 5? Perhaps it maintains a lookup table of line numbers. There are all sort of things it can do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me, however, that the BP runtime is focused on runtime performance in balance with memory consumption (thus the p-code). But at the same time, it may simply have not occurred to the creators to do what the MS-BASIC implementors did in terms of an implementation model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be interesting to know of any other interactive BASIC systems the were implemented similar to BP vs the MS model. It would also be interesting to learn where the inspiration behind the MS model. Did they come upon it on their own, implement something they had seen before? Maybe a new question for the forum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Addendum 2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify for @MauryMarkowitz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We distinguish between p-code and tokenization. P-code is &quot;just like&quot; machine code, it's just machine code for an ideal, pseudo machine rather than a specific CPU. It's notable as typically, especially on the older architectures, to be more compact than actual machine code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tokenization is basically a step past parsing. Reducing commands to internal &quot;tokens&quot;, or ids (like the text &quot;PRINT&quot; to the value 123. Converting numeric source strings to binary, etc. Languages have, typically several phases of processing. The first two are commonly converting the text in to tokens (this phase is called &quot;lexing&quot;, lexicographic analysis), then parsing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lexing converts raw text in to higher level constructs (i.e. tokens), then the parse phase works off of tokens instead of raw text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, given a string:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IF &quot;BOB&quot; 123 FOR THEN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That's could lex into &lt;code&gt;&amp;lt;IF-KEYWORD&amp;gt;, &amp;lt;STRING&amp;gt;, &amp;lt;NUMBER&amp;gt; &amp;lt;FOR-KEYWORD&amp;gt;, &amp;lt;THEN-KEYWORD&amp;gt;&lt;/code&gt;. The lexer can identify all of these, it's up to the parser to enforce actual syntax.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-BASIC tends to do both when a line of code is entered. It lexes the string in to tokens, then it parses for syntax correctness. At the end, you end up with a stream of tokens, in fact you have the same string of tokens you started with. But now, at the end of the process, you &quot;know&quot; that the token list is syntactically correct. This can be sent to an evaluator without the need for it to do any extra error checking (beyond simple corruption).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end, this tokenized form is NOT &quot;compiled code&quot;. It's an intermediate state for use by the evaluator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P-code is &quot;compiled code&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider this example: (using contrived elements)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A = 1 + 2 * B&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As a token stream, this looks like: &lt;code&gt;&amp;lt;VAR-A&amp;gt; &amp;lt;ASSIGN&amp;gt; &amp;lt;NUMBER-1&amp;gt; &amp;lt;PLUS&amp;gt; &amp;lt;NUMBER-2&amp;gt; &amp;lt;MULTIPLY&amp;gt; &amp;lt;VAR-B&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what is sent to the evaluator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a P-code, it will look something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PUSH 2&#xA;PUSH &amp;lt;VAR-B&amp;gt;&#xA;MULTIPLY&#xA;PUSH 1&#xA;ADD&#xA;STORE A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is a simple stack machine. Like an HP calculator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A key thing to note is how different the equation looks. In the token stream, it's still roughly in &quot;algebraic&quot; form. The evaluator still needs to deal with issues of operator precedence, among other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the second form, the compiler has already dealt with that and created instruction stream appropriately. The compiler can actually rewrite the source code in to a form more suitable for it's efficient execution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using our IF-MODIFIER, as @Dirkt mentioned:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A = A + 1 IF A &amp;gt; 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The token stream is: &lt;code&gt;&amp;lt;VAR-A&amp;gt; &amp;lt;ASSIGN&amp;gt; &amp;lt;VAR-A&amp;gt; &amp;lt;PLUS&amp;gt; &amp;lt;NUMBER-1&amp;gt; &amp;lt;IF-KEYWORD&amp;gt; &amp;lt;VAR-A&amp;gt; &amp;lt;GREATER-THAN&amp;gt; &amp;lt;NUMBER-0&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taken at face value, an evaluator does not have enough information properly evaluate this. The compiler gets to process it as whole, and can rewrite it, into something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  PUSH &amp;lt;VAR-A&amp;gt;&#xA;  PUSH 0&#xA;  COMPARE&#xA;  BRANCH-LESS-THAN-EQUAL LBL1&#xA;  PUSH A&#xA;  PUSH 1&#xA;  ADD&#xA;  STORE A&#xA;LBL1:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You'll notice, again, this looks nothing like the source code or the token stream.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a key distinction between a tokenized stream and a compiled representation. There's nothing stopping MS-BASIC from going the compile to p-code route, it just turns out that the tokenized representation has memory savings over the compiled version. You get a &quot;running program&quot; for little more than the memory cost of the source code, vs the compiled version where you have to maintain both the source code and the compiled artifact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is notable for an interactive environment, obviously not an issue for a normal &quot;compiled&quot; system. But RSTS BP is an interactive system with a compiler, which makes it stand out in the world of BASICs.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="7493" LastEditDate="2018-05-22T15:37:58.023" LastActivityDate="2018-05-22T15:37:58.023" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6482" PostTypeId="2" ParentId="3134" CreationDate="2018-05-14T18:32:34.530" Score="4" Body="&lt;p&gt;Deleting and recreating the swap file is a really bad idea for reasons in comments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here follows an insane idea that would work if you pulled it off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Create Permanent Swap File; ensure its contiguous. This is best done with a disk editor to ensure you also align on a cylinder boundary. Thankfully defrag.exe is sane enough to not move the windows swap file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Create overlapping primary partition so that it aligns with the the swap file. I will now assume that this ends up on &lt;code&gt;D:&lt;/code&gt;; replace script references as necessary&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Add lines to autoexec.bat:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FORMAT D: /Q &amp;lt; Y.CHR &amp;gt; NUL&#xA;MD D:\TEMP&#xA;SET TMP=D:\TEMP&#xA;SET TEMP=D:\TEMP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;3) Make C:\WINDOWS\TEMP if it doesn't already exist&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) Rename win.com to runwin.com&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5) Create win.bat as follows&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;subst D: C:\WINDOWS&#xA;runwin.com&#xA;subst D: /D&#xA;FORMAT D: /Q &amp;lt; C:\Y.CHR &amp;gt; NUL&#xA;MD D:\TEMP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;6) Create Y.CHR&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;echo Y&amp;gt; C:\Y.CHR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;7) Reboot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The subst command can be used to mask off drives you don't want to be able to access. I've done this in the past when I had two paths to the same disk so I got two drive letters for it, and drove &lt;code&gt;smartdrv.exe&lt;/code&gt; bonkers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does it work? Yes. Are you going to regret it if you ever reconfigure your windows swap file again? Yes.&lt;/p&gt;&#xA;" OwnerUserId="418" LastEditorUserId="418" LastEditDate="2019-06-25T16:15:08.503" LastActivityDate="2019-06-25T16:15:08.503" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6483" PostTypeId="2" ParentId="6472" CreationDate="2018-05-14T22:27:44.677" Score="1" Body="&lt;p&gt;Couldn't you do with a custom character set? That is, you arrange the characters smartly to recreate your initial screen, and then slowly &quot;corrupt&quot; your characters.&lt;/p&gt;&#xA;" OwnerUserId="8682" LastActivityDate="2018-05-14T22:27:44.677" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6485" PostTypeId="2" ParentId="6463" CreationDate="2018-05-15T08:10:17.687" Score="0" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/M-DISC&quot; rel=&quot;nofollow noreferrer&quot;&gt;M-Disc&lt;/a&gt; claims to be an optical medium designed for long life (in the region of 1000 years). It's up to you how much credence you give to such claims until the thousand years have passed.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2018-05-15T08:10:17.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6486" PostTypeId="2" ParentId="6480" CreationDate="2018-05-15T09:22:44.443" Score="36" Body="&lt;p&gt;There are a number of optimisations which, in aggregate, will improve performance somewhat:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There are multiple linked lists for the variables, one per first letter of the variable name. This makes name lookup faster compared to a more typical implementation with one linked list.&lt;/li&gt;&#xA;&lt;li&gt;The integer variables @% through Z% have fixed memory locations and do not require a lookup at all.&lt;/li&gt;&#xA;&lt;li&gt;The existence of integer variables avoids using expensive floating point unnecessarily.&lt;/li&gt;&#xA;&lt;li&gt;The rich control flow primitives mean that one can avoid GOTO and GOSUB, which perform expensive linear searches across the program to find a line by number. PROC and FN locations were cached.&lt;/li&gt;&#xA;&lt;li&gt;The heap is never garbage-collected. This is why extensive string manipulation will cause BBC BASIC to quickly run out of memory.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="80" LastActivityDate="2018-05-15T09:22:44.443" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="6487" PostTypeId="1" AcceptedAnswerId="6491" CreationDate="2018-05-15T14:31:11.340" Score="16" ViewCount="1803" Body="&lt;p&gt;In the early 1990s, the new buzzword for PCs was &quot;Multimedia&quot;, and the gold standard for multimedia performance usually talked about was &quot;full-screen full-motion&quot; video playback. Many will remember early digital videos being played in tiny windows on Windows PCs. In contrast, the often-plugged aspiration was to have basically long-playing digital video on the PC at roughly the quality of a VCR / Standard-Definition Television, utilizing the full screen area, around 30 fps, and including realistic sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe that such capability became commonplace on new PC hardware around the middle of the 1990s. I remember CD-ROM games such as &quot;The 7th Guest&quot; becoming popular based on these sorts of abilities, though that particular game falls short of the quality mark described above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naturally, this whole endeavor revolves around hardware bandwidth and codec's, which includes software components. My question is, can it be pin-pointed the specific hardware/software technologies and when they went mainstream on new PC's to support this level of multimedia video?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-05-16T03:02:51.190" LastActivityDate="2020-06-14T17:22:11.960" Title="What specific technical advance(s) allowed PCs to play &quot;Full-screen full-motion&quot; video?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;video&gt;&lt;multimedia&gt;" AnswerCount="5" CommentCount="6" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6488" PostTypeId="2" ParentId="6487" CreationDate="2018-05-15T15:31:40.343" Score="13" Body="&lt;p&gt;I'm going to stick my neck out and argue, chronologically:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;QuickTime;&lt;/li&gt;&#xA;&lt;li&gt;Cinepak;&lt;/li&gt;&#xA;&lt;li&gt;MPEG1.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;QuickTime, which launched in 1991 and therefore predates Video for Windows by about a year, introduced a fairly general framework for containers and codecs, and an initial video codec which was a fairly simple thing. No motion compensation, just altering or not altering different 16-pixel parts of the display in each frame, with differing precisions (ranging between a single colour for all 16 to a different colour for each pixel).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cinepak, from 1992, was the first codec added to both QuickTime and Video for Windows that promised 'full-screen' (i.e. 320x240), 'full-motion' (15fps) video. It's actually broadly similar to QuickTime in just dividing the display into macroblocks and assigning each a particular fill, then modifying those fills frame-by-frame, but there's an extra level of indirection as to block contents, a fixed-size codebook and codebooks receive only sequential updates from one frame to the next, key frames aside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cinepak is the codec you're used to from the Saturn, Mega CD, 3DO, etc — everything that produced full-motion video in software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MPEG-1 was also standardised in 1992 and introduces a substantial number of new ideas:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;use of the frequency domain to describe macroblocks in terms of their significant frequency content (via DCT in this case);&lt;/li&gt;&#xA;&lt;li&gt;sampling luminance at a greater frequency than chrominance;&lt;/li&gt;&#xA;&lt;li&gt;motion estimation of macroblocks from frame to frame — macroblocks can now be updated from frame to frame not only by content but by position;&lt;/li&gt;&#xA;&lt;li&gt;bidirectional frames, which describe a frame not just as a mutation from the prior, but as a combination of mutations from the prior and the next.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That adds up to a substantial extra processing burden, and an extra buffering burden for bidirectional frames but it gets you &quot;VHS quality video&quot; (i.e. 320x240, 30fps) at CD-ROM read speeds, where Cinepak could do only half the frame rate at the same data rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A desktop PC could be equipped with something like a ReelMagic card for MPEG-1 playback; consoles like the Philips CDI, Saturn and 3DO tended to have a slot where one could add an after-the-fact MPEG decoder, primarily for playing Video CDs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Pentium can decode MPEG-1 in software; a 486-class machine can do something between Cinepak and MPEG-1.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-05-15T15:31:40.343" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="6489" PostTypeId="2" ParentId="6487" CreationDate="2018-05-15T15:33:44.857" Score="4" Body="&lt;p&gt;The first real &quot;Multimedia&quot; experience I had was with a Sigma Designs REALMagic MPEG decoder card that was one of the first that could full MPEG decoding in hardware. It had to be connected to the feature connector of your (S)VGA card to transport the picture to the screen. The PC itself didn't have to do much with these cards except maintaining a relatively constant data feed of 2 MBit/s into the card. The first cards of that type showed up in the mid-nineties and replaced rather low-quality software decoding of videos (AVI, Quick Time, Video for Windows)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PCs were far from being capable of doing real-time MPEG-2 decoding in software back then. They had to be supported with a bit of a hardware lift to play proper video.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-05-15T15:33:44.857" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6490" PostTypeId="2" ParentId="6446" CreationDate="2018-05-15T16:28:55.403" Score="1" Body="&lt;p&gt;Have done so long ago (RS F/F for a demonstration), &lt;em&gt;without&lt;/em&gt; introducing brutal voltages, have lost the schematics :( &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I remember is that I used an E88CC (6DJ8), with either 12V or 24V as an anode voltage and 6.3V as both heater and negative bias. Standard flip flop circuit. This was not capable of driving a standard LED directly (and low current LEDs weren't at hand), so a lamp driver had to be hidden in the set up. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need one tube per bit - tubes with more than two triode or higher order systems per bulb are rare (unless you count in VFD displays - these are actually vacuum tube arrays, though very low gain).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If running such low voltages with vacuum tubes, there might be a need to use variable resistors and tune the operating points just right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were special vacuum tubes for low voltage use: So called space charge tubes, and later some optimized designs for car radio use. Both are likely too rare for such a project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: non-multiplexed VFD displays might actually make the perfect indicator for your bytes - they need very low drive currents, and could share a, say, +30V or +48V environment with your tubes very comfortably. Unlike nixies, they do come in 7 segment styles and need no really lethal voltages - decoding circuitry could be tricky though :)&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="785" LastEditDate="2018-05-17T16:33:16.023" LastActivityDate="2018-05-17T16:33:16.023" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6491" PostTypeId="2" ParentId="6487" CreationDate="2018-05-15T18:01:49.733" Score="20" Body="&lt;ol&gt;&#xA;&lt;li&gt;An efficient motion video codec (such as MPEG-1, 1993) to make storage or transmission of digital video practical.&lt;/li&gt;&#xA;&lt;li&gt;Real-time motion video decoder chips such as the C-Cube CL4000 (1993), because efficient codecs are processor-intensive. Or a sufficiently fast CPU such as the Intel Pentium (1993) and a high resolution multimedia timer (I think the necessary circuitry was first incorporated in sound cards before moving to motherboard chipsets).&lt;/li&gt;&#xA;&lt;li&gt;A high speed path between the video decoder chip and the video memory or video output. On PCs, this is achieved either by placing the chip on the video card (such as the ATI Rage 3D, 1996), or as described by @tofro by connecting through a VGA card's high speed feature connector to access video memory directly (such as the Sigma Designs Reelmagic CD lite, 1993), or by switching from ISA to VLB (1992) or PCI (1993).&lt;/li&gt;&#xA;&lt;li&gt;15-bit color or better (late-'80s), to avoid palette issues.&lt;/li&gt;&#xA;&lt;li&gt;A redistributable high capacity storage medium (such as CD-ROMs (Yellow Book), 1988) or a high speed network (such as satellite Internet, mid-'90s) to get the video data into the PC.&lt;/li&gt;&#xA;&lt;li&gt;Buffered PCM audio such as a Creative Labs SoundBlaster sound card (1989).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To make fullscreen full motion video mainstream, the following technologies were needed:&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;7&quot;&gt;&#xA;&lt;li&gt;A software abstraction layer for video decoding such as DirectShow (1998).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="75" LastEditorUserId="10666" LastEditDate="2020-06-13T14:33:22.830" LastActivityDate="2020-06-13T14:33:22.830" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6492" PostTypeId="1" CreationDate="2018-05-15T19:49:08.587" Score="14" ViewCount="2693" Body="&lt;p&gt;After setting up Windows 95 in a virtual machine, I noticed that it could verify the product key without internet (no serial ports or network adapters).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From modifying a genuine key at the CoA (Certificate of Authenticity) screen, I noticed that it was &lt;em&gt;very&lt;/em&gt; sensitive about the first four digits of the first box of the OEM key (an OEM key for Windows 95 was 5 digits-OEM-7 digits-5 digits), and the entire 7 digits of the second box, but was very lax about the third: it even accepted 00000 and 99999.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did it know when a product key was invalid or not? If I typed in some random numbers, I got a pop-up that read &lt;code&gt;the Certificate of Authenticity you enter is not valid&lt;/code&gt;, so there was some verification.&lt;/p&gt;&#xA;" OwnerUserId="8680" LastActivityDate="2020-05-24T13:22:23.017" Title="How did Windows 95 verify the Certificate of Authenticity?" Tags="&lt;windows-95&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6493" PostTypeId="2" ParentId="6492" CreationDate="2018-05-15T20:05:59.803" Score="11" Body="&lt;p&gt;Key code verification was done by installer - without connecting to any server to verify if the key is valid / blacklisted. According to ViennaXP's answer on &lt;a href=&quot;https://www.betaarchive.com/forum/viewtopic.php?t=25550&quot; rel=&quot;noreferrer&quot;&gt;this thread on BetaArchive&lt;/a&gt;, Windows 95/NT keys must fit these constraints:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the first digit of the first 5-digit block must be a 1 or 2 &lt;/li&gt;&#xA;&lt;li&gt;the first 3 digits of the 7-digit blick must be 000&lt;/li&gt;&#xA;&lt;li&gt;the digit sum of the last 4 digits in the 7-digit block must be 7&lt;/li&gt;&#xA;&lt;li&gt;the 5 digits of the last block are irrelevant&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="156" LastActivityDate="2018-05-15T20:05:59.803" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6494" PostTypeId="1" AcceptedAnswerId="6495" CreationDate="2018-05-16T07:23:02.463" Score="2" ViewCount="285" Body="&lt;p&gt;I used to use the &lt;code&gt;BRK&lt;/code&gt; instruction when debugging on the C64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when I bank out ROM with...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;lda #$35        // Bank out kernal and basic&#xA;sta $01         // $e000-$ffff&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...the BRK instruction (unsurprisingly) doesn't take me to the BASIC screen anymore.  I bank out ROM to free up all available CPU cycles for my raster interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would you recommend for breaking either into the BASIC screen or into the monitor when ROM is not mapped?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use KickAssembler and run on the VICE emulator.&lt;/p&gt;&#xA;" OwnerUserId="8648" LastEditorUserId="576" LastEditDate="2018-05-16T08:31:58.470" LastActivityDate="2018-05-16T15:51:24.910" Title="Is it possible to use the BRK instruction when ROM is banked out?" Tags="&lt;commodore-64&gt;&lt;programming&gt;&lt;debugging&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6495" PostTypeId="2" ParentId="6494" CreationDate="2018-05-16T07:49:50.010" Score="4" Body="&lt;p&gt;You can still use the &lt;code&gt;BRK&lt;/code&gt; instruction. But the reason you're not getting to BASIC is because the KERNAL is banked out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the 6502 executes a BRK instruction, the processor jumps to a routine specified by an address stored inside the KERNAL ROM. If you look at addresses $FFFE-$FFFF, in the KERNAL ROM you'll find that these point to a routine. When &lt;code&gt;BRK&lt;/code&gt; is executed, the CPU will start running that routine. So what you need to do is when the turn the KERNAL off, you need to store the address of your interrupt handler in $FFFE-$FFFF. Then when you execute &lt;code&gt;BRK&lt;/code&gt; your interrupt handler will be the next thing to run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I wouldn't really recommend this approach to return to BASIC. If you are doing raster tricks or using interrupts for anything else, it can be tricky and wasteful for the interrupt handler to try and determine if it needs to return to BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To your question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What would you recommend for breaking either into the BASIC screen or into the monitor when ROM is not mapped?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I would recommend SHIFT+RESTORE. The RESTORE key performs an NMI, so it will invoke a routine of your choosing, (which is &lt;em&gt;not&lt;/em&gt; your interrupt handler). That routine can see if the SHIFT key is also pressed, and if so, can re-engage BASIC and KERNAL and jump to there. Of course, you can also jump to that routine under software control.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-05-16T15:51:24.910" LastActivityDate="2018-05-16T15:51:24.910" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6496" PostTypeId="2" ParentId="5740" CreationDate="2018-05-16T09:28:58.167" Score="2" Body="&lt;p&gt;I worked on Hypercom ICE credit card terminals in the noughties but the terminals date from the late nineties. They had dual Z80s running at approx 50mhz (one was used as the crypto engine). The terminals I worked on had 2MB of ram but were still constrained by the 64KB limit of the Z80. A paging scheme was used and the compiler supported the concept of long calls/jumps (24 bit, the upper 8 bits was a page number). The upper 32K was paged.&lt;/p&gt;&#xA;" OwnerUserId="1956" LastActivityDate="2018-05-16T09:28:58.167" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6497" PostTypeId="2" ParentId="5587" CreationDate="2018-05-16T09:33:22.840" Score="8" Body="&lt;p&gt;Was it an &lt;a href=&quot;http://www.ourcomputerheritage.org/ccs-e6x2.pdf&quot; rel=&quot;noreferrer&quot;&gt;Elliot-Automation 41xx&lt;/a&gt; system, an actual 24-bit contemporary of the 315 also sold by NCR during the mid-60s?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I came across one of these &lt;a href=&quot;http://uk.comp.vintage.narkive.com/2KuezQlW/what-vintage-pc-s-are-people-still-using#post27&quot; rel=&quot;noreferrer&quot;&gt;mentioned as a 32K word 24-bit system&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I started on an ICL 4120, which was upgraded to an Elliott 4130 (yes,&#xA;  the 40130 was made first, they were just at the time ICL for formed&#xA;  from Elliott and the others), the 4120 with rin core and the 4130 with&#xA;  plated wire storage (32K of 24 bit words!)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Wikipedia page for &lt;a href=&quot;https://en.wikipedia.org/wiki/Elliott_Brothers_(computer_company)&quot; rel=&quot;noreferrer&quot;&gt;Elliot Brothers (computer company)&lt;/a&gt; lists:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Elliott 4100 series (1966) A joint development with NCR Corporation. Elliott selling to the scientific market and NCR selling to the&#xA;  commercial market.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Assorted references mention NEAT in association with this series of systems. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In fact, Barbosa (1977, 2016) had collaborated with the engineer&#xA;  Azevedo Machado in the coding of extensive source codes in FORTRAN,&#xA;  ALGOL, and NEAT in an NCR/Elliot 4130 [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;https://books.google.ca/books?id=fa86DwAAQBAJ&amp;amp;lpg=PA173&amp;amp;ots=VOVWNlRFik&amp;amp;dq=%22elliot%204130%22%20%22neat%22&amp;amp;pg=PA173#v=onepage&amp;amp;q=%22elliot%204130%22%20%22neat%22&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;The Bloomsbury Handbook of Electronic Literature, 2017&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I've seen at least three different expansions for NEAT in association with NCR, so perhaps it shouldn't be taken as a reference to a single coherent language or technology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems the 41xx line &lt;a href=&quot;https://books.google.ca/books?id=Dhk9wHXfQMkC&amp;amp;lpg=PA328&amp;amp;ots=JTuHIIf4S8&amp;amp;dq=%22comparison%20of%20some%20competitors%20to%20ncr%20and%20elliott%22&amp;amp;pg=PA329#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;did not initially have a COBOL compiler&lt;/a&gt;, but &lt;a href=&quot;http://sw.ccs.bcs.org/iclarch/arch38.html&quot; rel=&quot;noreferrer&quot;&gt;eventually had one by the time it became part of ICL&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8508" LastEditorUserId="8508" LastEditDate="2018-05-16T09:39:22.733" LastActivityDate="2018-05-16T09:39:22.733" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6498" PostTypeId="1" AcceptedAnswerId="6508" CreationDate="2018-05-16T17:14:41.427" Score="6" ViewCount="304" Body="&lt;p&gt;In an Applesoft BASIC program you can use the standard MS-BASIC &lt;code&gt;ONERR&lt;/code&gt; statement to perform error trapping. For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10  ONERR GOTO 100&#xA;20  POKE 0, 400 : REM INVALID VALUE WILL CAUSE ERROR&#xA;30  END&#xA;100 PRINT &quot;ERROR!&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Of course, if you want to continue after the error you can use the &lt;code&gt;RESUME&lt;/code&gt; statement. But the question here is what if you wanted to disable ONERR checking and go back to the default behavior of having the interpreter crash with an error message?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would have hoped that simply an &lt;code&gt;ONERR&lt;/code&gt; statement with no arguments or even setting the 'goto' to some specific line number would do it, but I haven't been able to find this one. Hopefully it applies to all MS-BASIC derivatives as well?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="56" LastEditDate="2018-05-18T19:32:05.580" LastActivityDate="2018-05-18T19:32:05.580" Title="How can you reset the behavior of ONERR in AppleSoft BASIC?" Tags="&lt;apple-ii&gt;&lt;applesoft-basic&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6499" PostTypeId="1" CreationDate="2018-05-16T17:30:28.730" Score="16" ViewCount="689" Body="&lt;p&gt;Inspired by &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6492/how-did-windows-95-verify-the-certificate-of-authenticity&quot;&gt;this question&lt;/a&gt;, I recall that many of the older Microsoft products from Windows 3.1 through the late 90's / early '00s supported a 'test' activation code of all 1's. I did this a few times out of laziness on Windows 95/98 machines many years ago.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, if you installed Visual Basic 4 you would have had a certificate of authenticity with the product that contained a code you would enter to complete installation. However, it was possible to punch in simply all 1's to get things to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe all this changed in the early 2000s when Windows XP came out most likely due to the Microsoft activation service probably being made available by the OS. But that being said, was this '1s trick' possible with all their products until a particular year? Did it cover everything or just some types of product? Of course, perhaps it is possible that 1's wasn't intentional but just happened to satisfy whatever algorithm was being used!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*NOTE: I haven't done it in years, but I &lt;em&gt;think&lt;/em&gt; it was 1's.. might have been something else!&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2018-10-12T21:11:17.377" Title="How widespread was the 'test' activation code for Microsoft products?" Tags="&lt;windows-98&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6500" PostTypeId="1" AcceptedAnswerId="6501" CreationDate="2018-05-15T17:38:49.997" Score="24" ViewCount="5399" Body="&lt;p&gt;Why is it said that all modern Intel processors of the x86 family are said to descent from the Intel 8086 and not the Intel 8080? From the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8086&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article on the Intel 8086&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 8086 gave rise to the x86 architecture, which eventually became Intel's most successful line of processors.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But why start at the 8086 when the 8086 was source compatible with the 8080, had &lt;em&gt;some&lt;/em&gt; 16-bit operations? What is the defining feature that so set the two chips apart that the 8086 is said to start the architecture?&lt;/p&gt;&#xA;" OwnerUserId="8579" OwnerDisplayName="Evan Carroll" LastEditorUserId="3296" LastEditDate="2018-05-17T11:29:02.723" LastActivityDate="2019-10-16T15:50:36.637" Title="The start of x86: Intel 8080 vs Intel 8086?" Tags="&lt;intel&gt;&lt;8080&gt;&lt;8086&gt;&lt;80386&gt;&lt;x86&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6501" PostTypeId="2" ParentId="6500" CreationDate="2018-05-15T19:20:29.797" Score="52" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5121/why-are-first-four-x86-gprs-named-in-such-unintuitive-order&quot;&gt;8086 was designed to make &lt;em&gt;asm source&lt;/em&gt; porting from 8080 easy&lt;/a&gt; (not the other direction).  It is &lt;em&gt;not&lt;/em&gt; binary compatible with 8080, and not source-compatible either.  &lt;strong&gt;8080 is not an x86 CPU.&lt;/strong&gt;  8080 is a more distant ancestor that had some influence on the design of 8086, but it's not the same architecture.  As an analogy, all x86 CPUs are the same genus but different species, while 8080 is a different genus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;8080 itself &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6500/the-start-of-x86-intel-8080-vs-intel-8086#comment16983_6501&quot;&gt;has some ancestors&lt;/a&gt; like 8008, so if you're considering more-distant ancestors and not strict binary compat, then you definitely don't stop at 8080 as &lt;em&gt;the&lt;/em&gt; earliest ancestor.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Modern x86 CPUs &lt;em&gt;are&lt;/em&gt; binary compatible with 8086.  You can literally run 8086 binaries on a modern PC, in real mode.  (The species analogy is a stretch here, but works if you look at forward compat instead of backwards compat: old x86 chips can't run AVX / AVX2 / FMA / AVX512 code, so you could look at each ISA extension as a speciation event.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The 86 in x86 comes from 8086 / 80186 / 80286 / ...&lt;/strong&gt;, Intel's official CPU model numbers until they switched to names like Pentium (because you can't trademark a number).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern PC firmware usually still supports booting in legacy BIOS mode, supporting &lt;a href=&quot;http://www.ctyme.com/intr/cat-003.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;int 0x10&lt;/code&gt; / &lt;code&gt;int 0x13&lt;/code&gt; etc. &quot;BIOS&quot; system calls&lt;/a&gt; for keyboard/screen input/output, reading disks, and so on.  This is a PC software thing, going beyond 8086 binary compatibility, but it does mean you can still boot an 8086 kernel / bootloader on a modern PC.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;8080 machine code is completely different from 8086: reg,reg instructions are 1-byte long (&lt;a href=&quot;http://pastraiser.com/cpu/i8080/i8080_opcodes.html&quot; rel=&quot;noreferrer&quot;&gt;8080 opcode map&lt;/a&gt;), vs. most 8086 instructions specifying operands in a ModR/M byte.  In 8080, the destination register is always part of the opcode (and ALU ops are mostly only available with &lt;code&gt;A&lt;/code&gt; (the accumulator) as the destination).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;8080 asm source is also not the same as 8086 asm source: the register names are different, and so are many of the mnemonics.  e.g. &lt;code&gt;ADI 123&lt;/code&gt; for an add-immediate (implicitly to the accumulator, I think) or &lt;code&gt;ORA E&lt;/code&gt; to do &lt;code&gt;A |= E&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;8086 has segmentation but 8080 doesn't (just a flat 16-bit address space).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;You can write a program to mechanically translate from 8080 to 8086 asm source, but you can't just rebuild the same asm source for a different architecture&lt;/strong&gt;.  It's not even close to really being the same.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/50356269/the-start-of-x86-intel-8080-vs-intel-8086/50357742?noredirect=1#comment87732574_50357742&quot;&gt;MichaelPetch says&lt;/a&gt; &lt;strong&gt;there were assemblers that could read 8080 source and output 8086 machine code&lt;/strong&gt; (i.e. with the translation built in to the assembler, presumably with some fixed mapping between 8080 byte registers and 8086 AL/AH/BL/BH/...).  IDK if they would ever have to emit multiple 8086 instructions for any 8080 mnemonics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The manual for one such translator is &lt;a href=&quot;http://www.s100computers.com/Software%20Folder/Assembler%20Collection/Digital%20Research%20XLT86%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;XLT86™ 8080 to 8086 Assembly Language Translator USER'S GUIDE&lt;/a&gt;, from Digital Research, Inc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not what I'd call &quot;assembly-language compatible&quot;.  It's close enough to enable translating single instructions separately (I think), but that's about it.  You have to realize that by programming an 8086 using pure 8080 asm source, you're missing out on the power of 16-bit operations, and any 8086-specific optimizations.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Fun fact: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6500/the-start-of-x86-intel-8080-vs-intel-8086/6501#comment39402_6501&quot;&gt;Patrick Schlüter comments&lt;/a&gt; about chips that were &lt;em&gt;binary&lt;/em&gt; compatible, not just source compatible.  Contrast this with Intel chips which did &lt;em&gt;not&lt;/em&gt; do this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;NEC V20/V30 were 80186 compatible CPUs that could explicitly execute 8080 &lt;em&gt;binaries&lt;/em&gt;. They had 2 instructions that allowed to call and to trap into 8080 functions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's a similar idea to modern CPUs that support multiple machine-code formats, like ARM with Thumb vs. ARM, or early Itanium (IA-64) with hardware support for x86 machine code with some rules for mapping IA-32 register state onto the IA-64 registers.  Or x86 protected (and long) mode with far calls between 16-bit and 32-bit (and 64-bit) code segments.  (But not real mode; although it decodes the same as 16-bit protected mode, segment regs mean different things so real-mode code usually has to run inside vm86 mode, hardware virtualization under a 32-bit kernel.)&lt;/p&gt;&#xA;" OwnerUserId="3296" OwnerDisplayName="Peter Cordes" LastEditorUserId="3296" LastEditDate="2019-10-16T15:50:36.637" LastActivityDate="2019-10-16T15:50:36.637" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="6502" PostTypeId="1" AcceptedAnswerId="6503" CreationDate="2018-05-16T18:22:23.887" Score="7" ViewCount="549" Body="&lt;p&gt;Various histories state that there were at least three versions of Altair BASIC, 4k, 8k and Extended - plus modifications like Disk. I've found some listings of the 4k, but does anyone have a short list of the differences between these?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="7208" LastEditDate="2019-07-26T05:02:14.570" LastActivityDate="2019-07-26T05:02:14.570" Title="Differences between 4k, 8k and Extended Altair BASIC?" Tags="&lt;basic&gt;&lt;microsoft-basic&gt;&lt;s-100&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6503" PostTypeId="2" ParentId="6502" CreationDate="2018-05-16T18:34:35.940" Score="9" Body="&lt;p&gt;And I found the answer only moments later when I came across &lt;a href=&quot;http://altairclone.com/downloads/manuals/BASIC%20Manual%2075.pdf&quot; rel=&quot;noreferrer&quot;&gt;the original manual&lt;/a&gt;. The difference is that the 4k version (mainly) did not have strings (!!), lacked a number of math functions (ATN, etc), logical operators (AND, OR) and PEEK/POKE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATES:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And a short form of the differences can be found in the &lt;a href=&quot;http://www.virtualaltair.com/virtualaltair.com/vac_Altair_BASIC.asp&quot; rel=&quot;noreferrer&quot;&gt;original MITS brochure&lt;/a&gt;. Although no specifics are listed, it states that Extended adds &quot;double precision&quot; math (is this the 9-byte FP seen in later 6202 versions?), PRINT USING, and disk commands. The &quot;Disk&quot; versions add additional commands for working directly for the IO.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-05-17T21:14:58.593" LastActivityDate="2018-05-17T21:14:58.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6504" PostTypeId="2" ParentId="6500" CreationDate="2018-05-16T23:10:40.400" Score="25" Body="&lt;p&gt;To supplement @PeterCordes's excellent answer, I thought it would be worth going into the details of exactly how close to source code compatible the two processors are -- for example, how easy would it be to use textual substitutions (e.g. macros) to automatically translate 8080 code to 8086 code, and what the limitations would be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first point would be to examine how the registers in the architecture can be mapped.  Fortunately, the 8086 registers are effectively a superset of the 8080 registers, so we can map A to AL, BC to CX, DE to DX and HL to BX (this ends up with the registers in a non-intuitive order, as HL can be used for indirect memory addressing, which is better supported using BX than the other general purpose registers on the 8086 -- but note that &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5121/why-are-first-four-x86-gprs-named-in-such-unintuitive-order&quot;&gt;this unusual ordering of the registers is actually reflected in their conversion to machine code&lt;/a&gt;, suggesting that while the mnemonics for the registers weren't named with 8080 compatibility in mind, the design of the instruction set was).  Clearly SP and IP must map to the registers for the same purpose, as must the flag register, which conveniently &lt;em&gt;has the bits with the same meanings in the same locations&lt;/em&gt; when it is stored elsewhere.  But here we note the first incompatibility: the 8080 groups the A register with the flags register (referring to the combination as the 'processor status word') and handles them together as a unit (for example when pushing and popping to the stack), but in the 8086 both are expanded to a full 16 bits and handled individually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that the following 8080 instructions have no single instruction that can perform the same operation on the 8086:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PUSH PSW    ; &quot;push af&quot; for those who prefer Z80 syntax&#xA;POP PSW     ; &quot;pop af&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To emulate these operations on the 8086 you'd need multiple instructions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LAHF        ; Load AH from low-order 8-bits of flags&#xA;PUSH AX&#xA;&#xA;POP AX&#xA;SAHF        ; Store AH in low-order 8-bits of flags&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Again, I have a suspicion that the LAHF and SAHF instructions were specifically designed to allow this translation -- they're a pretty unusual operation to support in most respects -- and the choice of AH (when AL would be the more usual target for such an operation) seems strongly to indicate that these instructions were added to make 8080 translation easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking through the table of instructions supported by the 8080, few others stand out as not being easy one-to-one translations, although as Peter Cordes points out many 1-byte instructions become 2-byte instructions on the 8086 (e.g. &lt;code&gt;MOV C,M&lt;/code&gt; or Z80 equivalent &lt;code&gt;ld c,(hl)&lt;/code&gt; which is 4Eh on the 8080 would convert to &lt;code&gt;MOV CL,[BX]&lt;/code&gt; or 8Ah 0Fh on the 8086, or &lt;code&gt;PCHL&lt;/code&gt; load program counter with HL - equivalent to 8086 &lt;code&gt;CALL BX&lt;/code&gt; FFh D3h).  Also slightly tricky are the &lt;code&gt;RST n&lt;/code&gt; instructions, which could plausibly convert to &lt;code&gt;INT nn&lt;/code&gt;, although there are subtle differences on the &lt;em&gt;receiving end&lt;/em&gt; of the call ... but that would usually be system software, and I believe the intent was to allow easy &lt;em&gt;application&lt;/em&gt; compatibility but that a complete rewrite of system software would have been expected.  Another group of instructions that aren't supported are conditional calls and returns (e.g. &lt;code&gt;CNZ addr&lt;/code&gt; / &lt;code&gt;call nz, addr&lt;/code&gt;) which would need to be emulated in the 8086 by a conditional jump with the opposite condition skipping over the instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two issues that are caused by the expansion of single byte instructions into two bytes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Self-modifying code would end up hopelessly broken (although it would need substantial modification to work anyway)&lt;/li&gt;&#xA;&lt;li&gt;Code that only just fits into the 64K memory space of the 8080 may struggle to fit into a 64K &lt;em&gt;segment&lt;/em&gt; on the 8086.  In the majority of cases this can be mitigated by moving from the &quot;tiny&quot; memory model (i.e. code and data in the same segment) to the &quot;small&quot; memory model (i.e. one segment for code and one for data).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It therefore seems reasonably simple to perform an automated one-to-one translation of code from 8080 to 8086; a macro assembler may well have been able to handle the translation, even if dedicated packages (as mentioned above) weren't available.  It wouldn't work for &lt;em&gt;all&lt;/em&gt; programs, but with a small increase in memory required, it should be reasonably simple to make most programs work successfully.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another interesting question is to what extend the &lt;em&gt;extended&lt;/em&gt; variants of the 8080 are also compatible?  That is, either the 8085 or the Z80?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relevant 8085 extensions are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;RIM&lt;/code&gt; (read interrupt masks) and &lt;code&gt;SIM&lt;/code&gt; (store interrupt masks) - the operations here are entirely unsupported by the 8086; machines using the 8086 typically use an external programmable interrupt control that provides the same feature.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;DSUB&lt;/code&gt;, &lt;code&gt;ARHL&lt;/code&gt;, and &lt;code&gt;RDEL&lt;/code&gt; are undocumented 16-bit arithmetic instructions that are obviously well supported on the 8086&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LDHI&lt;/code&gt;, interestingly, is (an undocumented) equivalent to the 8086s &lt;code&gt;LEA DX, [BX+n]&lt;/code&gt; instruction, which I'd previously thought to be entirely unique to the 8086.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LDSI&lt;/code&gt; is a parallel to &lt;code&gt;LDHI&lt;/code&gt; but using SP as its source register: the 8086 equivalent &lt;em&gt;would&lt;/em&gt; be &lt;code&gt;LEA DX, [SP+n]&lt;/code&gt;, except that the 8086 doesn't support using SP like that ... you'd have to wait for the 80386 to get support for an equivalent instruction, and then only with 32-bit registers.  You'd probably encode this as &lt;code&gt;MOV DI, SP; LEA DX, [DI+n]&lt;/code&gt; instead.  Which is the first time I've seen a 4 byte instruction come out from a single byte instruction input...&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SHLX&lt;/code&gt; and &lt;code&gt;LHLX&lt;/code&gt; are 16-bit (undocumented) indirect memory operations, of a kind quite natural on the 8086.&lt;/li&gt;&#xA;&lt;li&gt;This leaves the remaining set of undocumented instructions: jumps based on the equally undocumented X5 and overflow flags.  The 8086 has no equivalent to any of these instructions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Z80 is harder still: it extends the 8080's register set with not just a new pair of index registers (IX and IY, which could be mapped to DI and SI ... although the undocumented I[X/Y]H and I[X/Y]L instructions would have no direct equivalent there) but an entire duplicate set of registers (which cannot be mapped to anything, because we've run out of registers now).  Any application using the Z80's &lt;code&gt;exx&lt;/code&gt; or &lt;code&gt;ex af, af'&lt;/code&gt; instructions would be difficult to translate automatically.  Other Z80 instructions are easier, e.g. &lt;code&gt;djnz&lt;/code&gt; has no exact equivalent (the 8086's &lt;code&gt;LOOP CX&lt;/code&gt; is a 16-bit equivalent, but there is no 8 bit version), and instructions like &lt;code&gt;ldi&lt;/code&gt;, &lt;code&gt;ldd&lt;/code&gt;, etc are broadly (although not precisely) equivalent to the 8086's string processing instructions (e.g. &lt;code&gt;MOVSB&lt;/code&gt;) and repeat prefix (&lt;code&gt;REP MOVSB&lt;/code&gt; being roughly equivalent to &lt;code&gt;ldir&lt;/code&gt;) -- although the precise details are different, meaning some register remapping may be necessary to make them work.  On the whole, the possibility of doing automatic translation of Z80 programs is a whole lot less convincing.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-05-17T07:16:46.293" LastActivityDate="2018-05-17T07:16:46.293" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="6505" PostTypeId="2" ParentId="6498" CreationDate="2018-05-17T02:44:23.307" Score="3" Body="&lt;p&gt;It’s been a while but...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS BASIC used “ON ERROR GOTO” as opposed to “ONERR GOTO”, and using a line number of 0 outside of the error handling code reset it to the non-trapped default behavior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In AppleSoft BASIC, you had to POKE 216,0 to reset to the default handler.&lt;/p&gt;&#xA;" OwnerUserId="4213" LastActivityDate="2018-05-17T02:44:23.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6506" PostTypeId="1" CreationDate="2018-05-17T03:27:27.107" Score="6" ViewCount="729" Body="&lt;p&gt;It's widely known that the Commodore 64 was the best-selling single model of personal computer. Which computer make &amp;amp; model got second place?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify, I'm looking for an objective answer about a particular make &amp;amp; model, not a nuanced answer arguing for backwards compatibility or what constitutes minor vs. major revisions. As an example of potential answers, not knowing where the numbers actually break out, I might list the following myself (in no particular order): Atari 800xl, Apple //e, Amiga 500, Commodore 128, IBM PC(5150), XT(5160), Macintosh Plus, ZX Spectrum, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(References with well-researched sales estimates will be nice.)&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-05-17T16:14:58.710" LastActivityDate="2018-05-19T08:52:50.793" Title="What was the 2nd best selling computer ever?" Tags="&lt;history&gt;&lt;commodore&gt;" AnswerCount="4" CommentCount="5" ClosedDate="2018-05-21T19:09:07.147" ContentLicense="CC BY-SA 4.0" />
  <row Id="6508" PostTypeId="2" ParentId="6498" CreationDate="2018-05-17T09:50:09.323" Score="7" Body="&lt;p&gt;ZP Location 216 ($D8) holds the ONERR Flag(s) it is non-zero whenever an &lt;code&gt;ONERR&lt;/code&gt; target is set. To reset just poke zero here. This is by the way also the recomended method to start any error handling so an Error within the errorhandler will not cause any deadlock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So your Programm might look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 ONERR GOTO 100&#xA;20 POKE 0, 400 : REM INVALID VALUE WILL CAUSE ERROR&#xA;30 END&#xA;100 POKE 216,0&#xA;110 PRINT &quot;ERROR!&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;Caveats&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;ONERR&lt;/code&gt; handler has some problems with the stack, as it leaves a bit garbage. Therefore additional code to fix this is needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your programm doesn't have any open &lt;code&gt;GOSUB&lt;/code&gt; or &lt;code&gt;FOR...NEXT&lt;/code&gt; items, or if you want to continue from the error handler without using &lt;code&gt;RESUME&lt;/code&gt; (and geting rid of whatever happened before), a simple stack reset by calling the stack initialization at &lt;code&gt;$F328&lt;/code&gt; will do it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;120 CALL -3288&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Continuing without will slowly fill up the stack each time an error occures, leting your programm crash after ~80 iteration in an uncatchable out of memory error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if you want to use &lt;code&gt;RESUME&lt;/code&gt; from anywhere, you need to do a little stack magic, as the &lt;code&gt;ONERR&lt;/code&gt; code screws the stack pointer this is described in the &lt;em&gt;Applesoft Basic Programming Reference Manual on page 136&lt;/em&gt; (*1):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR I=768 TO 777 : READ X : POKE I, X : NEXT&#xA;20 DATA 104, 168, 104, 166, 223, 154, 72, 152, 72, 96&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Establishes a machine-language routine at location 768, which can be used&#xA;  in an error-handling routine.  Clears up some &lt;code&gt;ONERR GOTO&lt;/code&gt; problems and&#xA;  &lt;code&gt;?OUT OF MEMORY ERROR&lt;/code&gt; messages.  Use the command &lt;code&gt;CALL 768&lt;/code&gt; in the error-&#xA;  handling routine.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What is does is pulling the last return address of the stack (the one to return from this &lt;code&gt;CALL&lt;/code&gt;), correcting the stack to what the stack pointer was when the error occured and puting the return address there (*2) and returning. So when &lt;code&gt;RESUME&lt;/code&gt;ing the stack again looks the way it was when the error occured.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this works since Applesoft saves the stack pointer in location $F8 (248) at the beginning of every &lt;em&gt;statement&lt;/em&gt; (*3), and copies it to location $DF (223) whenever an error is trapped by &lt;code&gt;ONERR&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;Locations related to Error handling:&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$D8    (216)     ONERR flag - if &amp;gt;127 then an error has occurred&#xA;$DA/DB (218/219) Line number last error occured in (LN=PEEK(218)+PEEK(219)*256)&#xA;$DC/DD (220/221) ONERR error address&#xA;$DE    (222)     Error Code&#xA;$DF    (223)     Stack pointer at the time of an error&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The BASIC code is sightly modified from the original &lt;code&gt;POKE&lt;/code&gt; pile, but produceing the same machine code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - To save you from pulling out your 6502 code tables (the weired decimal ones), here's the disassembly:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;300: PLA        * Pull Return Address (to BASIC) from Stack&#xA;301: TAY&#xA;302: PLA&#xA;303: LDX $DF    * Get Stack Pointer of Error Line&#xA;305: TXS        * Restore it&#xA;306: PHA        * Restore Return Address&#xA;307: TYA&#xA;308: PHA&#xA;309: RTS        * Return to BASIC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;*3 - Jup, every &lt;strong&gt;statement&lt;/strong&gt;, not line, as resume should also work with multi statement lines, shouldn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-05-17T20:06:00.330" LastActivityDate="2018-05-17T20:06:00.330" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6509" PostTypeId="2" ParentId="6506" CreationDate="2018-05-17T10:53:56.020" Score="9" Body="&lt;p&gt;Commodore famously inflated their sales numbers, so while you'll find many resources claiming 25 or 30 million 64's sold, it appears the number is closer to 17 million.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Behind that are two machines that sold about 5 million units:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the Apple II was on the market for years, with reasonable sales well into the IBM era&lt;/li&gt;&#xA;&lt;li&gt;the Spectrum was a huge seller in the UK&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And in third:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Atari 8-bit requires special mention here. During its main run, it is estimated to have sold about 2.5 million machines, mostly in the US. However, the line had several &quot;rebirths&quot; as it entered new markets, first in western Europe, and then again in eastern Europe. Estimates on sales during this late period are very hard to come by, and various commenters put the total during this period anywhere from 1 to 2 million, which would put total sales anywhere from 3 to 5 million.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Others were generally much less:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TI99 ~2.5mm&lt;/li&gt;&#xA;&lt;li&gt;Amstrad CPC ~2.5mm, Wiki says 3mm.&lt;/li&gt;&#xA;&lt;li&gt;VIC-20 ~2mm&lt;/li&gt;&#xA;&lt;li&gt;TRS-80 ~1.mm&lt;/li&gt;&#xA;&lt;li&gt;BBC Micro ~1mm&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Most of these numbers were compiled by Jeremy Reimer and are available in XL format on &lt;a href=&quot;http://jeremyreimer.com/m-item.lsp?i=137&quot; rel=&quot;noreferrer&quot;&gt;his site&lt;/a&gt;. However, I don't think he dove too deep into these numbers, so take them with some grain of salt.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-05-17T11:23:12.357" LastActivityDate="2018-05-17T11:23:12.357" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="6510" PostTypeId="2" ParentId="6405" CreationDate="2018-05-17T20:11:49.607" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;are there any games that save without the use of the built-in save&#xA;  system?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I can't find a list of any gameboy games that don't use a battery for saves. As for the gameboy color there are a few games that have persistent save with no battery. I don't know what they are. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For completeness I'm going to list GameBoy Advance&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Game Boy&#xA;  -- Ingame: Password (certain titles) On-Cart: SRAM (unknown type, likely CR1616)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Game Boy Color&#xA;  -- Ingame: Password (certain titles) On-Cart: SRAM (CR1616 or 2025 (the latter perhaps for titles with real-time clocks only?)), EEPROM&#xA;  (EEPROM is used by only a few titles)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Modem/Internet: Cell Phone Connector (Mobile Adapter GB) (Japan only)&#xA;  (Works with KDDI Cellphones and Pokemon Crystal JP version only –&#xA;  allows monster trading, a few other things)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Game Boy Advance&#xA;  -- Ingame: Password (certain titles) On-Cart: SRAM (CR2016) (32KB), EEPROM (0.5KB, 8KB), Flash RAM (64KB, 128KB), FRAM (32KB) (Type&#xA;  depends on game)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Tetris won’t save my scores.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's already been answered that Tetris doesn't have any save abilities. Use save states with an emulator or take a picture with your phone to save your high score. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Citations: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.sega-16.com/forum/showthread.php?5965-The-Great-Console-Save-Types-List&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.sega-16.com/forum/showthread.php?5965-The-Great-Console-Save-Types-List&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://zork.net/~st/jottings/GBA_saves.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://zork.net/~st/jottings/GBA_saves.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6990" LastActivityDate="2018-05-17T20:11:49.607" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6511" PostTypeId="2" ParentId="6506" CreationDate="2018-05-18T05:36:01.563" Score="8" Body="&lt;p&gt;I would say the raspberry pi would be, according to &lt;a href=&quot;https://www.techspot.com/amp/news/73709-raspberry-pi-model-b-arrives-time-pi-day.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.techspot.com/amp/news/73709-raspberry-pi-model-b-arrives-time-pi-day.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;To date, over 19 million Raspberry Pi computers have been sold. Out of which, the Raspberry Pi 3 accounts for over 9 million units&quot;&lt;/p&gt;&#xA;" OwnerUserId="7044" LastActivityDate="2018-05-18T05:36:01.563" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6512" PostTypeId="2" ParentId="6506" CreationDate="2018-05-18T15:24:43.940" Score="1" Body="&lt;p&gt;I would say that the Commodore 64 was probably the 2nd best selling computer ever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have the numbers to back this up, but I believe at least one model of the iPhone has outsold the Commodore 64. Apple doesn't release numbers for specific iPhone models so only they know for certain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of the list you gave, I'd say the Amiga 500, which sold 6 million units, putting the entire Apple II series and ZX Spectrum series in third and fourth place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II and ZX Spectrum series each sold no more than 5 million but individual models sold less than that obviously.&lt;/p&gt;&#xA;" OwnerUserId="637" LastEditorUserId="637" LastEditDate="2018-05-18T16:08:16.090" LastActivityDate="2018-05-18T16:08:16.090" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6513" PostTypeId="2" ParentId="4948" CreationDate="2018-05-18T18:29:01.213" Score="2" Body="&lt;p&gt;The original Altair BASIC came in three versions; 4k, 8k and Extended. The numbers referred to the amount of RAM required to run it, as BASIC was loaded to RAM from paper tape. The 4k version running in 4k of RAM had a whopping 790 bytes free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 4k and 8k versions used a 4-byte (6-digit) floating point format. The 4k version lacked string variables and some other less important features. The 8k version added strings, some more math functions, and peek and poke. Extended added a &quot;double precision&quot; floating point format. I &lt;em&gt;think&lt;/em&gt; the double was actually the 6-byte (9-digit) format found in later 6502 versions, but I'm not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; the double-precision system was a 64-bit format. The 40-bit format became the standard during the 6502 port, largely replacing both earlier formats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect, as you do, that the code was deliberately &quot;copied&quot; as much as possible with an eye to ease of porting rather than code size or performance. New processors were popping up continuously, and tuning for each one would not only be difficult but ultimately fruitless as some of these would be doomed to die. Like the 6800.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, supercat, are you playing with the source in your own versions?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2019-10-31T18:40:33.203" LastActivityDate="2019-10-31T18:40:33.203" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="6514" PostTypeId="2" ParentId="6506" CreationDate="2018-05-19T08:52:50.793" Score="2" Body="&lt;p&gt;Hard to be sure; the old translucent iMac G3 (gumdrop models)&#xA;were slightly different, but sold for five or six years, circa 2 million&#xA;per year.   Should we count colors as differences?  CPU speeds?&#xA;Included ports (graphite and later had the Firewire ports)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That was on the cusp of computing taking off in the mass market,&#xA;not just gamesters and enthusiasts.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2018-05-19T08:52:50.793" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6515" PostTypeId="1" AcceptedAnswerId="11222" CreationDate="2018-05-19T18:39:59.657" Score="17" ViewCount="841" Body="&lt;p&gt;All systems that use the Atari 9 pin joystick standard make use of the following pins in consistent ways, with each direction and the fire button being connected to the ground pin when pushed.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 - up&#xA;2 - down&#xA;3 - left&#xA;4 - right&#xA;6 - fire&#xA;8 - ground&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However the Sega Master System also has a second fire button that connects pin 9 to ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, the Kempston compatible interface available from ByteDelight for the ZX Spectrum (&lt;a href=&quot;http://benophetinternet.nl/ebay/Kempston%20Joystick%202013%20manual%20small.jpg&quot; rel=&quot;noreferrer&quot;&gt;http://benophetinternet.nl/ebay/Kempston%20Joystick%202013%20manual%20small.jpg&lt;/a&gt;) can read a second button that connects pin 9 to ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, (correct me if I'm wrong) the Commodore Amiga can also read a joystick button wired this way being pushed, as although it treats pin 9 as an analog input, the Amiga's analog pins are active low.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, although the Cheetah Annihilator joystick used with the Commodore 64 GS (and compatible with a regular Commodore 64) was a 2 button joystick that used pin 9 for the second button, it connected it to the 5 volts on pin 7 instead as the Commodore 64 analog pins are active high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some circuit I could create (maybe using 74 series logic gates, transistors, capacitors and resistors) that could detect the absence of a voltage on pin 9 when plugged into a c64 that would allow me to create a 2 button joystick that would automatically work in all these scenarios? Or at least one with a switch that if it were set incorrectly would at least not cause any damage to any system it might be plugged into?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I understand that many other systems also use a variant of the Atari standard, but I'm primarily interested in building a joystick that only needs to support the ones I've mentioned in my question. It seems most systems with more than 1 joystick button connected a pin to ground somehow anyway (other than the C64), so a simple rewired pass through adapter might be usable elsewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess the crux of my question involves how to detect the joystick is plugged into a C64 rather than something else and auto-switch accordingly without damaging any chips in the computer.&lt;/p&gt;&#xA;" OwnerUserId="7044" LastEditorUserId="7044" LastEditDate="2018-05-21T21:27:37.633" LastActivityDate="2019-06-03T23:57:55.267" Title="How to create a switchless multi-system 2 button Atari joystick?" Tags="&lt;amiga&gt;&lt;commodore-64&gt;&lt;zx-spectrum&gt;&lt;joystick&gt;&lt;sega&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6517" PostTypeId="1" CreationDate="2018-05-22T08:10:13.930" Score="3" ViewCount="1033" Body="&lt;p&gt;How can I replace/repair broken Atari 1040ST key caps using 3D Printer? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Switches are in good condition. Only the key caps are to be replaced. Did Atari followed any industry standards like Cherry MX, Alps or such to allow me to copy the dimensions? Are there any reliable 3D model for key caps? And which filament I should use?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit: Photo of the missing key and another one for reference is added &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pgFel.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pgFel.jpg&quot; alt=&quot;Missing Key&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BOcdB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BOcdB.jpg&quot; alt=&quot;Reference&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="3422" LastEditDate="2018-05-28T08:58:29.890" LastActivityDate="2018-05-28T19:00:24.460" Title="3D Printed Replacement Key Caps for Atari 1040ST" Tags="&lt;keyboards&gt;&lt;repair&gt;&lt;atari-st&gt;&lt;diy&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6518" PostTypeId="2" ParentId="6517" CreationDate="2018-05-22T15:53:05.210" Score="2" Body="&lt;p&gt;I don't know if Atari followed any industry standard for their key designs.  Also, I've never encountered a buckling spring ST keyboard; original ST keyboards used collapsing rubber dome switch contacts (&lt;a href=&quot;https://web.archive.org/web/20180528185116/https://www.picclickimg.com/d/l400/pict/162073354557_/10-x-Atari-520-1040-ST-STF-STFM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;domes&lt;/a&gt; from &lt;a href=&quot;https://www.ebay.co.uk/itm/162073354557&quot; rel=&quot;nofollow noreferrer&quot;&gt;ebay&lt;/a&gt;, no affiliation).  For the upper portion, your best bet is to copy one of the other keys in the same row.  You should be able to pop the caps off pretty easily with a flat-head screwdriver.  FWIW, all of the Atari keycaps I've seen (520 STFM, 1040STF, 1040STE) use the same design; not sure about the detached TT keyboard but going by feel, the non-function keys also appear to be the same design (the TT function keys feel totally different though).&#xA;&lt;p&gt;&#xA;  As far a creating a 3-D model, I'm not aware of any existing ones.  However, the external Atari key designs are much blockier than what you'd typically find on e.g. an IBM keyboard so should be much easier to model (no complex curves).  The Delete key on ST and TT keyboards is in the main block of keys (to the right of Return, below Backspace) and not on the numeric keypad.  The key labeled '. Del' on PC keyboards is just labeled '.' on the ST/TT.&#xA;&lt;p&gt;&#xA;AFAIR, the specfic key you're missing has a unique shape so you wouldn't be able to directly copy one of the other keys on that keyboard.  Honestly, your best bet might be to purchase a replacement key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HdiFD.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HdiFD.jpg&quot; alt=&quot;1040STF&quot;&gt;&lt;/a&gt;&#xA;Image source: Wikipedia (Bill Bertram, CC-BY-2.5)&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-05-28T19:00:24.460" LastActivityDate="2018-05-28T19:00:24.460" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6519" PostTypeId="1" AcceptedAnswerId="6520" CreationDate="2018-05-22T16:34:03.433" Score="9" ViewCount="1120" Body="&lt;p&gt;I clearly recall working with an object-oriented C derivative on the Mac but I cannot find any definitive references to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was back in the days of System 7 and later System 8. It had both constructors and destructors and, I think, method overloading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of its elegant features was the ability to define an object which could be put on the stack (yes, the &lt;strong&gt;object&lt;/strong&gt; was pushed, not its reference) which could capture a current state during construction (&lt;code&gt;getGWorld()&lt;/code&gt; rings a bell) and could automatically revert the state to its original on destruction when the method returned. This ensured that all changes to the state were reverted automatically on method exit, kind of like a modern &lt;code&gt;finally&lt;/code&gt; clause.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it was called &lt;code&gt;object-C&lt;/code&gt; and I &lt;em&gt;think&lt;/em&gt; it might have been a &lt;code&gt;Symantec&lt;/code&gt; product.&lt;/p&gt;&#xA;" OwnerUserId="3491" LastActivityDate="2021-01-19T10:13:38.563" Title="What was the name of the object-oriented C language I used in the 1980s on the Mac" Tags="&lt;apple-macintosh&gt;&lt;c&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6520" PostTypeId="2" ParentId="6519" CreationDate="2018-05-22T16:46:18.047" Score="11" Body="&lt;p&gt;This sounds like &lt;a href=&quot;https://en.wikipedia.org/wiki/THINK_C&quot; rel=&quot;noreferrer&quot;&gt;THINK C&lt;/a&gt;, originally known as Lightspeed C and eventually acquired by Symantec. It included object-oriented extensions to C, with single inheritance added to &lt;code&gt;struct&lt;/code&gt; in particular, and provided a class library wrapping the Macintosh UI. &lt;a href=&quot;http://preserve.mactech.com/articles/mactech/Vol.05/05.10/ThinkCTutor/index.html&quot; rel=&quot;noreferrer&quot;&gt;This MacTech review&lt;/a&gt; gives a decent summary of the features (before THINK was extended to support C++ and became Symantec C++).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many of the “nice” features of the object-oriented C model used here weren’t specific to THINK C and can be found in other systems using C; for example, &lt;code&gt;struct&lt;/code&gt; instances can be declared on the stack, and can contain function pointers. Making them nice to &lt;em&gt;use&lt;/em&gt; in practice does require extensions though.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-05-22T16:46:18.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6522" PostTypeId="1" AcceptedAnswerId="6525" CreationDate="2018-05-24T15:49:36.423" Score="3" ViewCount="750" Body="&lt;p&gt;The candidates are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Apple IIgs, with its 2.8 MHz 65816 CPU, running in 65C02 &quot;emulation mode&quot;&lt;/li&gt;&#xA;&lt;li&gt;Apple //c+, with 4.0 MHz 65C02, but overclocked to 8.0 MHz&lt;/li&gt;&#xA;&lt;li&gt;Laser 128EX with 3.6 MHz 65C02&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I want to know which is fastest for real world applications, like running AppleWorks, a BBS, terminal emulation, assembler/debugger, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I'm thinking the answer is not simply &quot;It's the 8 MHz one, dummy&quot; is because of memory architecture - i.e. How does each machine access standard program RAM and at what speed. I know the //c+ essentially has an on-board accelerator that relies on SRAM cache for full-speed CPU operation. The IIgs has no cache. I don't know about the Laser memory architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE 1: It's reported that the //c+ can be successfully overclocked to 10 MHz, but I have not had that working with any stability. 8 MHz seems stable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE 2: I'm sure we (meaning me personally) could try to validate the correct answer with a suitable benchmark run on all 3 machines. I don't know a good benchmark to use, and would welcome that info as part of an answer. The key is the benchmark would have to account for use of cache appropriately. Any benchmark that runs fully from cache would skew results in favor of the //c+. A realistic benchmarking suite probably existed at some point in the Apple II's lifespan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE 3: The correct answer is certainly NOT the IIgs running in native mode. That's not even an &quot;Apple II&quot;, since it wouldn't run the legacy software library in that mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE 4: I know this is a &quot;hard question&quot;. I've not found any information online about how the 65C02 was interfaced to main memory in these machines, and what impact that had on overall system performance. My gut feeling is that the SRAM cache is a hack, and high-speed access to main memory should be the big performance differentiator.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-05-24T16:39:58.847" LastActivityDate="2018-05-24T22:30:11.580" Title="What's the fastest Apple II (sans accelerator card)?" Tags="&lt;apple-ii&gt;" AnswerCount="2" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="6523" PostTypeId="2" ParentId="6522" CreationDate="2018-05-24T21:14:55.850" Score="0" Body="&lt;p&gt;&lt;strong&gt;Caveat:&lt;/strong&gt; This is not realy an answer, as above question can not be answered, as test (benchmarks) can be made up to show either as fastest - or not.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The machines have different features, which are not only defined by CPU speed:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A IIgs does have a large memory and can thus handle large amounts of data without any disk I/O. Of course only by using 65816 code.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Any 65816 programm will not run on a IIc+ so it can't be compared.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A programm using IIc+ memory expansion can also handle huge amounts of memory - but it needs to follow the IIc+' memory structure, thus it can't run (without substantial porting) on a IIgs using it's larger memory&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Just language card extension and the IIe's 128 KiB are available on all these machine - doing common code would restrict it to only the basic features.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Depending on the memory locations used the very same (6502) programm can run at 2.8 MHz, or 1 MHz speed - or somewhare inbetween on a IIgs.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On the IIc+ programm structure plays as well a huge role when going for speed - but based on different factors then with the IIgs&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It might be noteworth that even Apple themself only claim a &lt;a href=&quot;https://www.atarimagazines.com/creative/v10n7/116_Apple_announces_the_IIc.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;90% compatibility of the IIc with the earlyer models&lt;/a&gt; - so it might be even less for models mentioned here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A comparsion will always give an answer related to the task and its implementation - not just the machine it runs on - unless we restrict everything to some IIe comptible minumum - which ofc, leaves everything the newer machiens offer outside - like restricting a Ryzen based PC to 1 MiB :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But even then, programs can be constructed to let each machine win at will. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example by defining the fastest keypoll as benchmark, like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;KEYIN   BIT  $C000&#xA;        BPL  KEYIN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Running this we will note that all of them are the same, no matter what speed is set or if a cache enabled or not. So?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt; Come up with a real benchmark case, and people may be able to rank the machines - but don't show a surprised face when the next one reverses the list.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;For the notes:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;NOTE 1: It's reported that the //c+ can be successfully overclocked to 10 MHz, but I have not had that working with any stability. 8 MHz seems stable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It doesn't matter if overclocked or not, as differences are about the system structure. Especially not how much.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;NOTE 2: I'm sure we (meaning me personally) could try to validate the correct answer with a suitable benchmark run on all 3 machines. I don't know a good benchmark to use, and would welcome that info as part of an answer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Hint, there is none - but beside, if you want a ranking, you need to come up with the criteria. Otherwise it's fishing in the dark - or as it's called here: &lt;strong&gt;OPINION BASED&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;NOTE 3: The correct answer is certainly NOT the IIgs running in native mode. That's not even an &quot;Apple II&quot;, since it wouldn't run the legacy software library in that mode.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why it isn't? Mind to explain? A IIgs in native mode can run next to any IIe programm without much problems. Keep in mind, the CPU is 100% upward compatible.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;NOTE 4: I know this is a &quot;hard question&quot;. I've not found any information online about how the 65C02 was interfaced to main memory in these machines, and what impact that had on overall system performance. My gut feeling is that the SRAM cache is a hack, and high-speed access to main memory should be the big performance differentiator.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why should it? Beside being again &lt;strong&gt;too broad&lt;/strong&gt; &lt;em&gt;and&lt;/em&gt; &lt;strong&gt;opinion based&lt;/strong&gt; it depends very much on internal structure if a programm will harmonize great with a cache or not. A faster memory only wins in a worst case szenario - wich again could of course be produced with the 'right' benchmark. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-05-24T22:17:53.443" LastActivityDate="2018-05-24T22:17:53.443" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6524" PostTypeId="2" ParentId="6517" CreationDate="2018-05-24T21:22:33.380" Score="4" Body="&lt;p&gt;Rather than try to 3-D print replacement keycaps, you might consider &lt;a href=&quot;https://geekhack.org/index.php?topic=60403.msg1394043#msg1394043&quot; rel=&quot;nofollow noreferrer&quot;&gt;casting&lt;/a&gt; them in polyurethane resin. The advantages are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Lower initial cost (about $75 not including dye if you don't mind some minor imperfections, see below).&lt;/li&gt;&#xA;&lt;li&gt;No need to do any CAD modeling.&lt;/li&gt;&#xA;&lt;li&gt;The cast keycaps take the same texture as the original. No 3D print layer lines. A nearly perfect reproduction.&lt;/li&gt;&#xA;&lt;li&gt;Easy to repair broken keycaps by recasting the missing areas.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I successfully cast a missing Amiga key by copying another key this way, but the result had a bubble on the bottom lip of the keycap. To prevent bubbles, I would need a vacuum chamber to eliminate bubbles from the silicone when making the mold, and a pressure pot to eliminate bubbles from the resin when casting the part. Also an oven to bake the part after casting will add strength, but do not use the same oven to cook food!&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-05-24T21:22:33.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6525" PostTypeId="2" ParentId="6522" CreationDate="2018-05-24T22:30:11.580" Score="4" Body="&lt;p&gt;The simple answer is MHz wins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because otherwise, what's the point. What's the point of making a &quot;faster&quot; machine, if it is not, indeed, faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To specifically highlight the details of the question, the IIgs has &quot;slow RAM&quot; specifically designed to maintain compatibility with the the original Apple II. It down clocks to the 1MHz range for low RAM so as to better behave with legacy software and the legacy video. In this mode its as legitimate an &quot;Apple II&quot; as it can be. So, in this case, it's not faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IIc+ had to be started in either 4MHz or 1MHz mode. If you couldn't be running the &quot;popular software at the time&quot; (whatever that may be) at the faster rate, then, again, what's the value? I'll skip games, as games, especially during that era, were notoriously tied to the CPU speed. (Lode Runner at 8Mhz -- Whee!!) There's a reason IBM PCs came with &quot;Turbo Buttons&quot;, and it wasn't for word processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know anything about the Lazer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, simply, the IIgs was particularly sophisticated because it offered not just the new cpu, but the new video and other peripherals far and away above what the Apple II offered. It was truly a different computer, but had Apple II compatibility vs a &quot;better&quot; Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the IIc+, it WAS a &quot;better&quot; Apple II, so it didn't have the Chimera nature of the GS. It just had a switch to make it a faster Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any Apple II compatible benchmark, even a Sieves written in BASIC (since I don't think they updated the BASIC in all that time to where one was better than the other) would be a legitimate benchmark. In a perfect world, something that exercised the ram space in machine language (for example a thorough memory test, over the same amount of memory) would be a good candidate as well. CPU and Memory heavy.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-05-24T22:30:11.580" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6526" PostTypeId="1" AcceptedAnswerId="6527" CreationDate="2018-05-25T13:21:48.660" Score="10" ViewCount="666" Body="&lt;p&gt;On a recent trip to the London Science Museum I saw &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Charles_Babbage&quot; rel=&quot;noreferrer&quot;&gt;Babbage’s&lt;/a&gt; &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Analytical_Engine&quot; rel=&quot;noreferrer&quot;&gt;Analytical Engine&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jP1I7.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jP1I7.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GTUoh.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GTUoh.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently this had an ALU (or equivalent). I can build an ALU out of logic gates but I can’t conceptualise how to do it with gears. I’m trying to map across the concepts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get that the Analytical Engine &lt;a href=&quot;https://www.fourmilab.ch/babbage/&quot; rel=&quot;noreferrer&quot;&gt;is not completely understood&lt;/a&gt; - and we only have pieces of it, and we're still going through the notes. But should be able to infer enough from the few gears we have as to what sort of instructions it would take. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: &lt;strong&gt;Can we express the instructions to the Analytical Engine in terms of assembler or machine code?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="3500" LastActivityDate="2018-05-25T20:25:10.503" Title="Can we express the instructions to the Analytical Engine in terms of assembler or machine code?" Tags="&lt;history&gt;&lt;assembly&gt;&lt;undocumented-opcodes&gt;&lt;microprocessor&gt;&lt;architecture&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6527" PostTypeId="2" ParentId="6526" CreationDate="2018-05-25T16:09:27.847" Score="9" Body="&lt;p&gt;Yes. In fact, it is a very simple system in machine language terms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key to understanding the system is to look at the physical construction of the part you saw. This is what we would today would call the accumulator. It holds a single mathematical value. You can see it consists primarily of several vertical rods with gears spaced out along them. Each gear holds a digit in it's angle compared to the rod, I can't recall if each disk represented one or two digits?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a modern machine we would express this as a number of bits, &quot;this processor is a 64-bit design&quot;. In the case of the analytical engine, it used decimals, not bits, and had 40 digits. For comparison, it was common on 8-bit machines to perform math in &quot;binary coded decimal&quot;, often with two decimal digits stored as 4-bit values in a single byte. Thus, to represent the same numbers as the engine, you would need 10 bytes. Typical BASIC interpreters of the era, like those found in the Commodore line, used 9-byte formats, so pretty close!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original plan was that this ALU would be connected to a store consisting of another 1,000 such vertical rods, also holding 1 40-digit number each. So in modern terms, this is a 160-bit processor (40 digits / 2 digits per byte * 8 bits per byte), with 1,000 words of main memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Along the bottom you can see a number of odd bumpy-shaped disks arranged at right angles to the vertical rods, along a large shaft. These take the place of the clock drivers in a modern processor. As the shaft turns, the arms resting on top of the disks are raised and lowered, which connects and disconnects gearing under the vertical shafts. This is identical in purpose to the diode network that controls the operation of the functional units in early microprocessors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the shaft is driven by the large gear you can see on the right end. This connects it to the main driveshaft, which connects to most of the parts. The speed of the machine is basically how fast you turn that shaft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for instance, let's say you want to add the value on one of the rods in the store to the value in the accumulator. The Engine did this in steps, it was a &quot;fetch/execute/store&quot; design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the first step, a card would be read that had holes that turned off the accumulator, and caused the right memory location to become active. So this is similar to what we would do today with a &lt;code&gt;LOAD 500&lt;/code&gt;, although in a modern processor the memory would be physically copied to a register, whereas in the Engine the store location sort of &lt;em&gt;was&lt;/em&gt; a register (early core-based machines worked the same way).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that card would basically cause that location, 500, to be connected to the main drive shaft, while disconnecting everyone else. It would also cause that shaft to come into contact with a set of gears that were (going to be) connected to the accumulator. It's been over a decade so this is IIRC, but I think the horizontal rods you see in the image are those connections. In any event, there are gears on the bottom of each of the digit disks that connect to the transmission system, and then from that system to each of the digits in the accumulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you do the execute, in this case an &lt;code&gt;ADD&lt;/code&gt;. This is a card that re-connects the drive shaft to the accumulator, spins that set of disks on the front, and then makes both the store and accumulator shafts start turning. They turn until the store shaft has made one complete spin, but the digits stop turning when they get to zero, so in that complete spin a disk that was originally set to 1, which is 36 degrees, causes the same disk in the accumulator to spin the same amount. But that disk might have already held a value, so presto, you've added.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The brilliance of the design was twofold. One was that it carried out the math in parallel across all the disks. In comparison, if you've seen a typical mechanical calculator using disks you'll note you have to turn each digit's disk individually, so that would be a serial math unit compared to this parallel unit. But the other trick, originally developed on the calculating engine, was what to do about carries...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider if the ALU's first digit (the top one IIRC) was 9 and you add 1. This has to make the next digit go up by one as well. This is easy, you have a pin on the bottom of the disk that hits the disk below it and spins it one location. Ahh, but consider what has to happen when the ALU holds 9999999.... that top gear has to spin all the ones under it! The amount of force goes way up, and that is a Bad Thing for a machine with thousands of spinning parts. The design had a way to solve this, I seem to recall it used a separate set of carry bits that were added at the end of the cycle?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The language is very simple, and in modern terms would be considered a RISC design - or more accurately, a load/store design. The punch cards that fed the machine would connect to similar operational rods like the ones on the disks, to form the instructions. These were very simple, they consisted of a load, store, add, sub, mul, div, and in theory, sqrt. So using a bastardized modern assembler, you might do something like...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;READ 10, 500 ;put &quot;10&quot; into location 500&#xA;READ 5, 501  ;put &quot;5&quot; into 501&#xA;LOAD 500     ;load the value in 500 into the accumulator&#xA;ADD 501      ;add the value from 501&#xA;STORE 502    ;write the result to location 502&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And now you've added 10 and 5 to make 15, and then wrote that to the printer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Connected to the other side of the store was an output system consisting of a printer and a bell. It could be instructed to output the value in any one of the store's vertical shafts. When the program was complete, you told it to ring the bell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these, with the exception of the direct output, map directly onto any simple assembler. It had only one register and 1000 words of memory, making it very similar to many early machines like FERUT.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-05-25T20:25:10.503" LastActivityDate="2018-05-25T20:25:10.503" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6528" PostTypeId="2" ParentId="5497" CreationDate="2018-05-26T23:08:46.503" Score="3" Body="&lt;p&gt;Using Stella and Audacity is probably best after the next release of Stella. We are currently working on cycle-exact audio emulation, and already we have it to a point where certain games are working perfectly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Games like E.T. (where the ship landing sound shouldn't be so harsh) and Ms. Pac-man (where the sound channels interfere with each other and generate some weird effects) are working perfectly with the latest beta code.&lt;/p&gt;&#xA;" OwnerDisplayName="user8714" LastEditorUserId="278" LastEditDate="2018-11-18T11:45:07.843" LastActivityDate="2018-11-18T11:45:07.843" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6529" PostTypeId="1" CreationDate="2018-05-27T07:10:10.077" Score="45" ViewCount="14598" Body="&lt;p&gt;Today there are adapters available allowing you to connect historic floppy drives to a modern PC. This allows you to copy data from historic floppy disks to the PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the late 1980s and the early 1990s many users switched from an 8-bit system to a 16- or 32-bit system. So the problem of transferring data between systems should already have existed in that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How was data typically copied from a 8-bit system to a 16-bit system in that time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were similar adapters already available then?&lt;/p&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="75" LastEditDate="2018-05-27T08:23:35.873" LastActivityDate="2020-11-19T14:01:15.377" Title="How were files transferred between different systems in the late 1980s?" Tags="&lt;history&gt;&lt;data-transfer&gt;&lt;old-hardware-adaptation&gt;" AnswerCount="26" CommentCount="15" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6530" PostTypeId="2" ParentId="6529" CreationDate="2018-05-27T07:45:53.283" Score="18" Body="&lt;p&gt;No, there were no adapters for different floppies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data was typically copied by serial port, if it was copied at all: Programs on some 8-bit computer (e.g. Apple II, Commodore 64) wouldn't run on an 16-bit 8086 PC. There were no emulators (and the original 8086 PC would probably also have been too slow).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So stuff you'd like to copy were typically source files of your own code, so you could re-compile (after adaption) on the new computer. Businesses probably also would want to copy data, but I was too young to have witnessed how that was done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I actually transferred my source code from the Apple II to an IBM PC this way, and as I didn't have a serial card, I used the game port on the Apple II with a bit of external electronics to emulate a (slow) serial port. That was enough for my needs.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-05-27T07:45:53.283" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6531" PostTypeId="2" ParentId="6529" CreationDate="2018-05-27T11:47:28.323" Score="24" Body="&lt;p&gt;I personally did not do any data transfer from home 8-bit systems to other systems, but I did do transfers from several older proprietary systems to Unix and MSDOS systems back in the 80’s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We used a null modem cable (serial cable) and software called &lt;a href=&quot;https://en.m.wikipedia.org/wiki/BLAST_(protocol)&quot; rel=&quot;noreferrer&quot;&gt;B.L.A.S.T.&lt;/a&gt; which was a commercial product that was ported to a wide variety of systems. It is a serial transfer protocol, on the lines of xmodem/zmodem/kermit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We would use those more “open” protocols when possible, but the benefit of BLAST was that they did the ports to so many systems, so it was easier to just buy it for the systems you needed. For example we moved many customers from DG Nova systems to Unix, and used it to transfer their data files.&lt;/p&gt;&#xA;" OwnerUserId="4213" LastActivityDate="2018-05-27T11:47:28.323" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6532" PostTypeId="2" ParentId="6529" CreationDate="2018-05-27T12:49:22.543" Score="12" Body="&lt;p&gt;There were (and are) a few possibilities to transfer programs* and data between 8 bit Commodore systems and other platforms via floppy disks and other media.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Commodore 1541&lt;/strong&gt; floppy drives could be modified to read, and to a limited extent, write PC compatible floppies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Commodore 1571 and 1581&lt;/strong&gt; floppy drives for 8-bit Commodore home computers were able to read and write PC compatible floppy disks. No hardware modifications are needed, just some software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;X1541 Cable&lt;/strong&gt; and it's derivatives made it possible to connect a Commodore floppy drive to a PC parallel port, and read-write Commodore floppies in DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not limited to Commodore:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Serial modems&lt;/strong&gt; were used to transfer files between computers located far away from each other. One could upload files to a &lt;strong&gt;BBS&lt;/strong&gt; and download them to a different computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Cassette tapes&lt;/strong&gt; could be read on any platform that had an audio input. I can vaguely remember coding a tape loader for Commodore +4 that could display a picture saved on a ZX Spectrum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*Commodore emulators for the PC were already in development in 1990, they obviously needed the ROM images and as much test programs as possible.&lt;/p&gt;&#xA;" OwnerUserId="348" LastEditorUserId="348" LastEditDate="2018-05-27T13:09:32.437" LastActivityDate="2018-05-27T13:09:32.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6533" PostTypeId="2" ParentId="6529" CreationDate="2018-05-27T12:53:16.500" Score="6" Body="&lt;p&gt;on ZX (Zilog Z80) we usually used tape interface (save on ZX) which is a serial link in its core. We sometimes connected 2 ZX by it without the tape to  copy data for testing ... It can be also used to move data to new tech like PC by connecting tape output to LPT on PC and using emulator load into it (by using tape load...) Or even save the tape as wav/mp3 and play it in emulator... or use the PC soundcard input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Latter on with MDOS floppies (ZX+D40/80) we used a floppy file manager (IIRC it was this one &lt;a href=&quot;https://mts.speccy.cz/_mfc.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;MFC&lt;/a&gt; but not sure) and format floppy with it on ZX to enable PC usage (as MDOS and PC FDC are not compatible) and then we use the same manager to copy files. The floppy was formated as FAT but using sync markers compatible with booth sides FDC. But this was more like 1990.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of that I also created my own FDC (using AT32UC3A0512) which scan the whole MFM data of floppy and send to PC by USB and then on PC I decoded it into floppy images suitable for my emulator but this was relatively recent like 2012 as I decided to convert all of my FDDs (~100) for safe keeping before they got demagnetized after a long time of storage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers in around 1980 usually got directly accessible HW ports (usually done by i8255) which could be used in any way. Was really common to create own custom serial and or parallel links with protocols and everything in Software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example on older stuff like PMD85 (Intel i8080 or i8085) we usually used 2 wire serial link done purely on SW (no UART present).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We also used PROMs programmed on one type of computer and inserted as cartridge on a different one.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-05-28T07:36:05.917" LastActivityDate="2018-05-28T07:36:05.917" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6534" PostTypeId="2" ParentId="6529" CreationDate="2018-05-27T14:20:56.567" Score="12" Body="&lt;p&gt;I have done my share of transfers between incompatible systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were some service bureaus that could convert floppy disks between different systems, and I used some to convert CP/M-86 commercial software for an Altos 586 (my first computer) that had a floppy format not supported by all vendors, which was a common problem when new systems came out. But that was actually between compatible (architecture &amp;amp; operating system) systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For incompatible systems (whether 8-bit vs. 16-bit or minicomputer to PC-compatible or anything else), my first choice would be a proper communications program on both systems. My second choice, which I had to rely on quite a few times due to the old system being relatively proprietary - i.e., often customer didn't have access (or had access but not the knowledge) to do anything on the old system except run the application program - was to connect printer output from the old computer to a serial port on the new computer. Then I would run whatever reports I needed to retrieve all the necessary data, typically customers, accounts receivable and open orders, but it would depend on the particular situation. And finally, I would write some conversion routines to get the data into a format usable by the new system. In at least one case, the old system only had a parallel printer port configured (medical billing system, Alpha Micro if I remember correctly) and I had to throw a parallel-&gt;serial converter into the mix as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Resorting to manual data entry was always an extreme &quot;last resort&quot; due to the inevitable errors in that process.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2018-05-27T14:20:56.567" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6535" PostTypeId="2" ParentId="6529" CreationDate="2018-05-27T20:18:43.383" Score="8" Body="&lt;p&gt;I transferred a lot of text documents and spreadsheets/databases from my ZX Spectrum to my Sinclair QL using the Sinclair network, a 80kBps serial network that was inbuilt into the QL and provided by Interface 1 on the ZX Spectrum. This network could connect up to 64 QLs and ZX Spectrum. My Spectrum also had to serve as a print spooler for the QL, as I did not have a Centronics interface for the QL to connect it to my printer for quite some time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The network was compatible between the two machines as Sinclair planned to sell this as teacher/student (or, rather, server/client) setup for classroom use. Even though the ZX Spectrum and the QL used the same microdrives, their format was not interchangeable - Sinclair apparently decided for this incompatibility during the last few months of QL development, in favour to give the QL 20kBytes or so more storage on a cartridge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When later moving from the QL to the PC, I could use floppy disks, as the QL could be made to be capable to read and write PC floppies with the ATR (&quot;Atari floppy&quot;) driver.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-05-27T20:24:49.423" LastActivityDate="2018-05-27T20:24:49.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6536" PostTypeId="2" ParentId="6529" CreationDate="2018-05-27T20:21:03.340" Score="56" Body="&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The most classic serial solution here was ofc a direct serial connection and &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Kermit_(protocol)&quot; rel=&quot;noreferrer&quot;&gt;Kermit&lt;/a&gt;&lt;/strong&gt; the most versatile software solution. Developed at the &lt;a href=&quot;http://www.columbia.edu/kermit/index.html&quot; rel=&quot;noreferrer&quot;&gt;Columbia University, NYC&lt;/a&gt;, Kermit supported already in the early 1980s several hundred different systems. It's most prominent feature was the ability to run over non transparent and code converted connections.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Similar, but less comfortable and universal, &lt;a href=&quot;https://en.wikipedia.org/wiki/XMODEM&quot; rel=&quot;noreferrer&quot;&gt;X/Y/Z-Modem&lt;/a&gt; was used. With a straight, transparent 8 bit capable connection XMODEM and its follow ups, where easy to implement.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the target was a PC or PC-alike machine, and the source some machine able to write standard FM/MFM diskettes (usually CP/M and alike), foreign floppy reader utilities were availible. Most prominent back then &lt;a href=&quot;https://books.google.co.uk/books?id=0em3BRee75cC&amp;amp;pg=PA80&amp;amp;lpg=PA80&amp;amp;dq=xeno-disk%20vertex&amp;amp;source=bl&amp;amp;ots=3GfcExBZnc&amp;amp;sig=9uq4MR8WowqjF1Et1th1yMwwySM&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=0ahUKEwiOsaeN26bbAhXE1qQKHa3UAQ0Q6AEIKDAA#v=onepage&amp;amp;q=xeno-disk%20vertex&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;Xeno-Disk from Vertex&lt;/a&gt;. But also Sydex' &lt;a href=&quot;http://www.retrocomputing.org/cgi-bin/sitewise.pl?act=det&amp;amp;p=776&amp;amp;id=retroorg&quot; rel=&quot;noreferrer&quot;&gt;ANADISK&lt;/a&gt; (or 22DISK) and &lt;a href=&quot;http://www.willsworks.net/file-format/teledisk&quot; rel=&quot;noreferrer&quot;&gt;Teledisk&lt;/a&gt;. (*1,2)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For more exotic formats, like the Apple II, there where hardware solution, as Vertex' &lt;a href=&quot;https://books.google.co.uk/books?id=l9C7NnwCf1gC&amp;amp;pg=PA224&amp;amp;lpg=PA224&amp;amp;dq=turnover+disk+card+Apple+%5D%5B&amp;amp;source=bl&amp;amp;ots=rNtKdS_1yb&amp;amp;sig=0dYiyJIpJpz5ZTHIsSY8wXnmfmA&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=0ahUKEwifqO_b2abbAhWF6qQKHUDpAwwQ6AEIODAC#v=snippet&amp;amp;q=turnover%20vertex&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;Turnover Card for the PC&lt;/a&gt; of 1984. In &lt;a href=&quot;http://www.kultboy.com/magazin/3063/&quot; rel=&quot;noreferrer&quot;&gt;April 1984&lt;/a&gt; the German computer magazine mc published an article about using the Commodore VIC-1541 Floppy with other systems. As a follow up several solutions to connect a 1541 to PCs showed up. (*3)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Herb Johnson did dig a bit into the &lt;a href=&quot;http://www.retrotechnology.com/herbs_stuff/sydex.html&quot; rel=&quot;noreferrer&quot;&gt;actual situation about ANADISK&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - More recent developments are for example &lt;a href=&quot;http://www.webring.org/l/rd?ring=acorn8bitwebring;id=10;url=http%3A%2F%2Fwww%2Eshlock%2Eco%2Euk%2FUtils%2FOmniFlop%2FOmniFlop%2Ehtm&quot; rel=&quot;noreferrer&quot;&gt;OnmiFlop&lt;/a&gt; or &lt;a href=&quot;https://www.macdisk.com/lecten.php&quot; rel=&quot;noreferrer&quot;&gt;PC-Lect&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Nowadays there is also &lt;a href=&quot;https://www.kryoflux.com/?page=home&quot; rel=&quot;noreferrer&quot;&gt;Kyroflux&lt;/a&gt; an expensive but rather good solution for weird formats.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-05-31T16:46:47.677" LastActivityDate="2018-05-31T16:46:47.677" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6537" PostTypeId="2" ParentId="6529" CreationDate="2018-05-28T04:54:06.810" Score="20" Body="&lt;p&gt;I worked on a project quite a few years ago (late 80's) where a client purchased truckloads of surplus military electronics inventory that he intended to sell into the spare parts market. The inventory documentation came out of a mainframe computer and was printed onto a three inch stack of fanfold green bar computer paper. The project I was hired for was to move this data to PC type machine that was modern at the time.&lt;/p&gt;&#xA;&lt;p&gt;I implemented the project in the following stages:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;We burst the fanfold paper into separate sheets so we could make a backup photo copy of the data.&lt;/li&gt;&#xA;&lt;li&gt;We sent the paper stack to an OCR vendor to scan and convert to files on MS-DOS floppy disks. Note that this step was expensive because simple scanning and OCR technology was not mainstream at the time and uses sophisticated hardware. I seem to recall that the OCR house was paid some 3 to 5 USD per sheet.&lt;/li&gt;&#xA;&lt;li&gt;I got the raw ASCII text files off the floppys and merged them in the correct order onto a computer HDD. As I recall there was one file per OCR scanned sheet.&lt;/li&gt;&#xA;&lt;li&gt;I then wrote a first stage filter program that scanned the large ASCII text file and removed things like page headers, blank lines and page numbers. It required iterative development to add heuristic algorithms to deal with variations between sheets and special odd corner cases. The result of this stage was a file that had one line for each inventory record in the original listing.&lt;/li&gt;&#xA;&lt;li&gt;Then a second stage filter process was made to convert the raw ASCII text data into a comma delimited text file. The original listing had something like twenty or so fields per inventory record. Once again a whole slew of heuristics were applied to the filtering activity. Some examples of things that had to be done were to realign columns of the OCR scanner was not correctly aligned to the page. Another thing was to look for things like &amp;quot;B&amp;quot; characters in fields that were known to be numeric and convert to &amp;quot;8&amp;quot;. I recall that there were about 45 or 50 rules that were created in the filter program to deal with OCR type errors.&lt;/li&gt;&#xA;&lt;li&gt;Finally the resulting comma delimited data was imported to a dBase database file that the customer could use on his computers.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Out of the work I recall that there were only about 20 records that did not come across clean and the filter program rejected as not able to correct. Almost all of those were due to handwritten notations that had been made on the original computer printouts.&lt;/p&gt;&#xA;&lt;p&gt;In the end the result was way more reliable than if a data entry person would have had to spend a huge amount of time retyping thousands of records of data that had about 120 columns in each record. It took me about 4-5 days to do the task and probably cost the client less than hiring someone to hand type all that data.&lt;/p&gt;&#xA;" OwnerUserId="6873" LastEditorUserId="15334" LastEditDate="2020-11-13T21:23:41.023" LastActivityDate="2020-11-13T21:23:41.023" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6538" PostTypeId="2" ParentId="6529" CreationDate="2018-05-28T08:32:27.617" Score="1" Body="&lt;p&gt;Everybody has been talking about microcomputers, where serial lines was the best technology for the task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For larger computers, more professional networks were available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ethernet was introduced in 1980 and it was an instant hit.  There were also a number of alternatives that lost in competition to Ethernet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the late 80's/early 90's a number of competing protocols were in use that worked on top of Ethernet.  These allowed file sharing and other network services much like today.  Though obviously slower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, most of these were vendor specific and could not be used for cross-platform file transfer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This is probably a simplification. I am sure there were some cooperating vendors and some cross-platform networking)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enter the Internet Protocol.  IP version 4 was introduced in 1981 and deployed in the international Internet in 1983.  We still use IPv4 for most of the Internet though work is in progress to start using IPv6 instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IP was developed in part by the US government and in part by universities, and it was an open standard, available to every vendor.  This was one selling point, the other being it was scaled for a truly world-wide network with 4 billion addresses.  In short, they won.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At some point, PCs became powerful enough to use Ethernet and IP.  I am not sure when this happened, but I know I used it in 1991.  It was probably possible in the very late 80's.&lt;/p&gt;&#xA;" OwnerUserId="428" LastActivityDate="2018-05-28T08:32:27.617" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6539" PostTypeId="2" ParentId="6529" CreationDate="2018-05-28T14:09:28.210" Score="-1" Body="&lt;p&gt;The 8-bit machines were &lt;em&gt;mostly&lt;/em&gt; (in numbers at least) used non-professionally for home use. I found that most of the files from those machines found their way onto bulletin board systems. Much of that has been archived at &lt;a href=&quot;http://textfiles.com/bbs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://textfiles.com/bbs/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-05-28T14:09:28.210" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6540" PostTypeId="1" AcceptedAnswerId="6541" CreationDate="2018-05-28T14:10:36.983" Score="5" ViewCount="302" Body="&lt;p&gt;When I run a debug session using FreeDOS and &lt;code&gt;DEBUG.EXE&lt;/code&gt;, I get a session like the following.  I've added a description of what I saw as annotation on the image.  Each step, I've printed out the stack contents.  What's very confusing is why the stack is changing &lt;em&gt;at all&lt;/em&gt; given the commands I am running - such as simple moves between registers.&lt;/p&gt;&#xA;&lt;p&gt;Step 1: move AX into DS, and mysteriously, something starts eating the stack!  what gives?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MOV DS, AX&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Step 2: move a literal 0 value into DX, and weirdly a couple values on the stack start to change.  Why on Earth is this happening?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MOV DX, 0000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;... and so on.  Look closely at the image to see how things change from step to step.&lt;/p&gt;&#xA;&lt;p&gt;If anyone has a clue, I'd love to hear it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://imgur.com/k7fp7DN.png&quot; alt=&quot;debug session&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="4065" LastEditorUserId="15334" LastEditDate="2021-01-12T22:51:34.030" LastActivityDate="2021-01-12T22:51:34.030" Title="Mysterious things happening to stack when running a debug session" Tags="&lt;assembly&gt;&lt;x86&gt;&lt;debugging&gt;&lt;dos&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6541" PostTypeId="2" ParentId="6540" CreationDate="2018-05-28T14:31:05.063" Score="12" Body="&lt;p&gt;Note all your references to changing values are &lt;em&gt;below&lt;/em&gt; the stack pointer, actually a free space. You are not expected to care about this area (stack grows towards lower addresses), as this is of no concern to your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if your computer is sitting at a debugger prompt and apparently is inactive, it isn't. It constantly runs through interrupt service routines, like the timer (or other peripherals) interrupt routines that constantly use stack memory, others will be the result of the debugger itself frequently looking for keypresses - What you see is simply the leftovers of these frequent activities in the free space of the stack (which is absolutely irrelevant for your application - The part of the stack your application is working with is &lt;em&gt;above&lt;/em&gt; the stack pointer). Thus, the values you see are areas of free space that have been used and changed by such system routines, as you are sharing the stack with these routines. And, BTW, it is absolutely irrelevant what your appliction is doing in a debug step - These areas might also change if you are not even stepping through your own code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only thing you hopefully will never observe is &lt;em&gt;values changing at and above the stack pointer&lt;/em&gt; or intermittent changes &lt;em&gt;of the stack pointer itself&lt;/em&gt; because this is where your program's working memory is.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-05-28T14:36:34.603" LastActivityDate="2018-05-28T14:36:34.603" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6542" PostTypeId="2" ParentId="6515" CreationDate="2018-05-28T14:57:40.407" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Furthermore, (correct me if I'm wrong) the Commodore Amiga can also read a joystick button wired this way being pushed, as although it treats pin 9 as an analog input, the Amiga's analog pins are active low.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;All the &quot;early&quot; Atari-derived systems read pins 5 and 9 as analog. There may be later designs, like MSX, that work differently, but the Atari, C64 and Amiga all support this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The standard used connect-to-ground for the &quot;digital&quot; functions, including both the joysticks and fire buttons on both the sticks and pretty much everything else. So, normally-high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Atari, the only one I'm &lt;em&gt;really&lt;/em&gt; familiar with, the paddle controllers were wired to send the +5 into the potentiometers in the paddle, and then into the I/O port where they connected to a capacitor. The resistance in the POT controlled the charging rate of the cap, and when it reached a certain threshold (3.7V?) it triggered an interrupt. That simply copied the value of the color clock, the current horizontal location of the TV beam, into a RAM &quot;shadow register&quot;. Since the sprites used the same values for their horizontal position, simply copying that value to the sprite's X-axis register did all you needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in the Atari at least, the pins would be normally low. And you mention that the Amiga was the same. So the surprising thing about your post is that you state the C64 does not work this way. Are you &lt;strong&gt;sure&lt;/strong&gt;? I ask for two reasons; one is that I know people who use Atari pot controllers on the C64, and two, it seems &lt;em&gt;extremely&lt;/em&gt; odd they would change this, and then change it back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any event, I &lt;strong&gt;strongly&lt;/strong&gt; suspect there is no possibility of &quot;damage&quot; caused by plugging in a joy with this button into any Atari or Commodore, but I am less clear on what you mean by &quot;the systems you mention&quot;? The ZX interface was designed to work with CX40s, so I assume that is also compatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; According to &lt;a href=&quot;https://www.c64-wiki.com/wiki/Paddle&quot; rel=&quot;nofollow noreferrer&quot;&gt;the paddle page on the C64 wiki&lt;/a&gt;, the C64 is indeed normally low and works exactly like the Atari system with pots between pin 7 and 5/9 and caps to ground.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-05-29T11:15:52.687" LastActivityDate="2018-05-29T11:15:52.687" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6543" PostTypeId="2" ParentId="6529" CreationDate="2018-05-28T15:40:48.157" Score="4" Body="&lt;p&gt;In the late eighties I was financing my study in computing science as a sysadmin in the CS department.  We had a Data General Nova, a lot of Dec Rainbows, and an AT&amp;amp;T 3B2 Unix machine.&lt;/p&gt;&#xA;&lt;p&gt;We had all of these connected through a locally developed ring network, accessed through the RS-232 serial ports.&lt;/p&gt;&#xA;&lt;p&gt;Then in 1988 we purchased a couple of workstations and a server from Sun Microsystems, and got ethernet installed shortly after that.&lt;/p&gt;&#xA;&lt;p&gt;In order to transfer files between all of these machines we used C-Kermit, as it was free, and very portable.  It allowed us to transfer files in either binary (bit by bit) or as text.&lt;/p&gt;&#xA;&lt;p&gt;It was very effective. Throughput with the default settings was abysmal, but increasing the packet size from the default 64 characters improved that quite a lot.&lt;/p&gt;&#xA;" OwnerUserId="4674" LastEditorUserId="4674" LastEditDate="2020-11-19T00:11:18.737" LastActivityDate="2020-11-19T00:11:18.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6544" PostTypeId="1" AcceptedAnswerId="6546" CreationDate="2018-05-28T18:30:48.717" Score="5" ViewCount="1470" Body="&lt;p&gt;When I load a C64 .prg with the &lt;a href=&quot;http://www.hoxs64.net/default.aspx&quot; rel=&quot;noreferrer&quot;&gt;Hoxs64 emulator&lt;/a&gt;, my .prg loads pretty much instantly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when I load the same .prg file with VICE (&lt;code&gt;x64 app.prg&lt;/code&gt;) it takes quite a while (depends on memory map, but several seconds even for compact .prgs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to configure VICE to somehow load .prgs faster?&lt;/p&gt;&#xA;" OwnerUserId="8648" LastActivityDate="2018-05-28T20:11:22.590" Title="Is it possible to make VICE load .prg files faster?" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;programming&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6545" PostTypeId="2" ParentId="5202" CreationDate="2018-05-28T18:57:23.713" Score="0" Body="&lt;p&gt;If you wish to use ethernet instead of serial, there is a program that was obtainable from MS at one time called MSWGCN.exe (Microsoft Workgroup Connect).  It allowed a network to be set up on a DOS box.  It only works on the NETBEUI protocol so you'll have to install that on Linux too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once both sides have NETBEUI, it works quite well.  It is a bit slow but faster than either the serial or parallel cable (interlnk also worked on the parallel cable).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used it to transfer all my C sources from DOS to Linux, only to find that the linefeed-carriage return caused no end of problems with the compiler.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2018-05-28T18:57:23.713" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6546" PostTypeId="2" ParentId="6544" CreationDate="2018-05-28T20:11:22.590" Score="11" Body="&lt;p&gt;Setting the AutostartPrgMode to value 1 does exactly what I needed.  This will inject the .prg file directly into RAM and basically my app loads instantly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;&#xA;x64 -autostartprgmode 1 your_program.prg&#xA;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Need to integrate this into my ST3 x64 invocation.&lt;/p&gt;&#xA;" OwnerUserId="8648" LastActivityDate="2018-05-28T20:11:22.590" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6547" PostTypeId="2" ParentId="6529" CreationDate="2018-05-29T10:17:41.437" Score="3" Body="&lt;p&gt;Transporting data between larger machines was often done with magnetic tape. I was tasked with porting a system and the annual updates to various models and manufacturers' systems. The code was in Fortran IV and required very little customization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first step in the process was determining the specifics of the tape format the target system would accept. 800BPI/1600BPI, EBCDIC/Ascii, parity requirements (mark, even, odd, none), and maximum block/record size. I had a tape utility which would produce the requisite format on our local system, and I would write the source code and data to magnetic tapes. I would build the applications that built the databases and indices from the tape, run them, then build the interactive application. At the end of each unique installation, I would build a release tape for that system, which we would duplicate on demand for additional compatible machines.&#xA;Typical first port to a new system would usually take 4-5 days. Annual updates were completed in 1 or 2 days.&lt;/p&gt;&#xA;" OwnerUserId="8720" LastActivityDate="2018-05-29T10:17:41.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6548" PostTypeId="1" AcceptedAnswerId="6549" CreationDate="2018-05-29T10:27:31.310" Score="13" ViewCount="751" Body="&lt;p&gt;In older versions of Fortran, e.g. 77, variables did not need to be declared.  If the name starts with I, J, K, L, M, or N then it would be assumed to be an INTEGER.  Otherwise, it would be assumed to be REAL (float).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This might still be true of more recent versions but I have no experience of them and this is a retro group so I am not asking about them.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is on the origin of the convention.  I have heard one explanation that I and N are the first two letters of INTEGER.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, similar habits are common in maths.  i, j, k, l, m, and n are very popular for integers whereas as x, y, and z are very popular for real numbers.  Which influenced the other?  Did existing maths habits influence Fortran or did Fortran influence maths?&lt;/p&gt;&#xA;" OwnerUserId="7805" LastEditorUserId="79" LastEditDate="2018-05-29T10:50:23.610" LastActivityDate="2018-05-29T19:20:39.433" Title="Fortran variable type defaults - origin" Tags="&lt;programming&gt;&lt;fortran&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6549" PostTypeId="2" ParentId="6548" CreationDate="2018-05-29T11:29:22.860" Score="19" Body="&lt;p&gt;The use of such letters was common in mathematics long before programming existed. &lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt;, &lt;em&gt;z&lt;/em&gt; were used as variables &lt;a href=&quot;https://en.wikipedia.org/wiki/Variable_(mathematics)#Genesis_and_evolution_of_the_concept&quot; rel=&quot;noreferrer&quot;&gt;by Descartes in 1637&lt;/a&gt;; in his framework, &lt;em&gt;a&lt;/em&gt;, &lt;em&gt;b&lt;/em&gt;, &lt;em&gt;c&lt;/em&gt; and other letters towards the start of the alphabet represented known values, letters towards the end of the alphabet represented unknown values. The use of &lt;em&gt;i&lt;/em&gt;, &lt;em&gt;j&lt;/em&gt; etc. doesn’t go quite that far back, but it was common at least for summation and other such operations, where the variables represent indices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://archive.computerhistory.org/resources/text/Fortran/102679231.05.01.acc.pdf&quot; rel=&quot;noreferrer&quot;&gt;The original FORTRAN paper&lt;/a&gt; doesn’t give any specific arguments for the FORTRAN pattern, which is more than convention: variables in FORTRAN O could be of two types, fixed point (with a one- or two-symbol name starting with &lt;em&gt;i&lt;/em&gt;, &lt;em&gt;j&lt;/em&gt;, &lt;em&gt;k&lt;/em&gt;, &lt;em&gt;l&lt;/em&gt;, &lt;em&gt;m&lt;/em&gt;, or &lt;em&gt;n&lt;/em&gt;), or floating point (with a one- or two-symbol naming starting with any other character of the alphabet). &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/stanford/cs_techReports/STAN-CS-76-562_EarlyDevelPgmgLang_Aug76.pdf&quot; rel=&quot;noreferrer&quot;&gt;Knuth notes&lt;/a&gt; that “the names of variables were restricted to be at most &lt;em&gt;two&lt;/em&gt; characters long at this time; but this in itself was an innovation, FORTRAN being the first language in which a variable’s name could be larger than one letter, contrary to established mathematical conventions”. As can be seen in the rest of that paper, early programming languages closely followed mathematical representation, which explains the influence of the latter on the former.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There has been some amount of influence of computer programming notation on mathematical notation since then though; for example, some mathematical papers use words as variable names rather than single letters.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-05-29T19:20:39.433" LastActivityDate="2018-05-29T19:20:39.433" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="6550" PostTypeId="2" ParentId="6529" CreationDate="2018-05-29T12:33:18.650" Score="1" Body="&lt;p&gt;There were a couple basic strategies I remember employing for migrating data from one PC to another. The simplest of these was just moving disks from one PC to another. For small volumes of data, this could be done with built-in DOS commands (copy, etc.). For larger volumes of data, it was useful to use tools like ZIP and ARJ that could create coherent multi-floppy archive images. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was actually how I got my first copy of Linux... I found/downloaded disk images using telnet and FTP on my university's lab of 286 PS/2 machines, and then took the images home to install on my personal PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For faster and more efficient PC-to-PC transfers, there were also options like Copy 2 PC. In current terms, the best way to think of this is as something like a TUI version of rsync. You connect two machines together, select what you want to copy, press the button, and go. The inter-machine connection was either a null-modem cable or a parallel port link over a custom cable that was shipped in the box with the software. (Certain parallel ports could do, IIRC, bi-directional 4-bit-per cycle transfers that were much faster than a null-modem Serial connection.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For cross-platform transfers, the generally easiest mechanism was to use a network connection of some sort. This ranged in complexity from a simple null-modem link between two machines, to a modem connection, to full-fledged networking like we know today. For serial links, Kermit was standard, but slow... the BBS community ran through a series of progressively more efficient download protocols. XMODEM was one, but there were also YMODEM, ZMODEM, JMODEM, and others... These typically gained their efficiency by changing buffering paramaters, tweaking the handshaking, adding compression, etc. One other useful feature was the ability to resume a failed download mid-stream. That way, if you had to disconnect the phone line or otherwise lost the connection, you could pick back up where you left off rather than starting from scratch.&lt;/p&gt;&#xA;" OwnerUserId="4522" LastActivityDate="2018-05-29T12:33:18.650" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6551" PostTypeId="1" AcceptedAnswerId="6555" CreationDate="2018-05-29T14:54:27.487" Score="22" ViewCount="3674" Body="&lt;p&gt;The Z80 has an instruction &lt;code&gt;RLD&lt;/code&gt;, which apparently treats the lower 4 bits in the accumulator and the full 8 bits in &lt;code&gt;(HL)&lt;/code&gt; as a twelve bit integer which it then rotates left by 4 bits. The carry flag does not participate in the rotation and the rest of the accumulator is left alone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Correspondingly, there's an &lt;code&gt;RRD&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why would the designers put something like that in? I don't imagine it's was a simple by-product of some other part of the design, but I can't think of a use-case which the other shift/rotate instructions wouldn't do a reasonably good job at.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-08-11T08:30:59.957" LastActivityDate="2018-08-11T08:30:59.957" Title="Why does the Z80 include the RLD and RRD instructions?" Tags="&lt;z80&gt;&lt;instruction-set&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6552" PostTypeId="2" ParentId="6551" CreationDate="2018-05-29T15:40:08.407" Score="4" Body="&lt;p&gt;These instructions appear to be useful for converting between BCD numbers and their printed representation.  They would also be useful for printing numbers in hexadecimal format.  accessing a BCD or hex value 4 bits at a time corresponds to one input or output character.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-05-29T15:40:08.407" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6553" PostTypeId="2" ParentId="6551" CreationDate="2018-05-29T15:43:52.677" Score="3" Body="&lt;p&gt;I think the primary usage case for something like that would be shifting a multi-byte quantity left or right by four bits.  One could rotate a 56-bit value (e.g. the mantissa of a floating-point value) left by 4 bits by doing something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ld h,myThing &amp;gt;&amp;gt; 8  ; Assume it doesn't cross a page boundary&#xA;    ld bc,4&#xA;    and a ; Clear carry&#xA;loop:&#xA;    ld l,myThing &amp;amp; 255&#xA;    rl (hl)&#xA;    inc l&#xA;    rl (hl)&#xA;    inc l&#xA;    rl (hl)&#xA;    inc l&#xA;    rl (hl)&#xA;    inc l&#xA;    rl (hl)&#xA;    inc l&#xA;    rl (hl)&#xA;    inc l&#xA;    rl (hl)&#xA;    djnz loop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but it could be done much faster as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ld h,myThing &amp;gt;&amp;gt; 8  ; Assume it doesn't cross a page boundary&#xA;    xor a  ; Could use &quot;ld a,0&quot; if carry was important for some reason&#xA;&#xA;    ld l,myThing &amp;amp; 255&#xA;    rld (hl)&#xA;    inc l&#xA;    rld (hl)&#xA;    inc l&#xA;    rld (hl)&#xA;    inc l&#xA;    rld (hl)&#xA;    inc l&#xA;    rld (hl)&#xA;    inc l&#xA;    rld (hl)&#xA;    inc l&#xA;    rld (hl)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm not sure the value of that is greater than the value of other features that could have been provided for the same amount of effort and silicon, but I think something like the above would be the intended usage pattern.  Still, the feature would have value either in cases where things are being shifted by exactly four bits, or in performance-sensitive code (like floating-point math) where values may need to be shifted by N bits and it would not be uncommon for N to be 3, 4, or 5.  I'm not sure exactly how big the thing to be shifted would need to be to make such optimizations worthwhile, but the requirement that objects be stored in RAM might limit the value of such optimizations when shifting smaller things.  If a 32-bit value needed to be shifted, the first approach could be changed to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ld hl,(myThing)&#xA;    ld de,(myThing+2)&#xA;    ld bc,4&#xA;    and a ; Clear carry&#xA;loop:&#xA;    add hl,hl&#xA;    rl  e&#xA;    rl  d&#xA;    djnz loop&#xA;    ld (myThing),hl&#xA;    ld (myThing+2),de&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;greatly reducing the cost of the loop.  The fact that the rld form doesn't&#xA;need the loop would likely make it more efficient than running&#xA;the loop four times, but if &quot;rld&quot; had allowed code to specify a register rather than (HL) it could have been much more useful in the small-objects case.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2018-05-29T16:15:08.167" LastActivityDate="2018-05-29T16:15:08.167" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6554" PostTypeId="1" AcceptedAnswerId="6578" CreationDate="2018-05-29T16:42:03.640" Score="9" ViewCount="1192" Body="&lt;p&gt;S-100 bus machines normally had displays that had 64-chars-per-line. The VDM-1 used a 7x9 format, and I think most cards used that, so that would be 448 pixels. I understand that an NTSC television normally can't go much beyond 320 pixels. Yet it seems one could easily modify a B&amp;amp;W TV to use with these machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm wondering what's going on here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One possibility is that the extra resolution is there if you bypass the RF section, which I believe all the S-100 cards did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another is that it's the color information that limits the resolution, and if one ignores color, you can get higher resolutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know there were modifications for the Atari that added 80-column support, including color. So in this case I assume the monitors would have to be very different. But I also know they worked great with Commodore monitors. So how did these monitors extract the right scanning rates and such?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-05-31T01:04:27.660" Title="Is a normal B&amp;W TV good enough for 80-column text?" Tags="&lt;crt-monitor&gt;&lt;ntsc&gt;" AnswerCount="4" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="6555" PostTypeId="2" ParentId="6551" CreationDate="2018-05-29T16:45:19.020" Score="25" Body="&lt;p&gt;Per &lt;a href=&quot;http://z80.info/zip/z80cpu_um.pdf&quot; rel=&quot;noreferrer&quot;&gt;Zilog's Z80 user manual&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Two BCD digit rotate instructions (RRD and RLD) allow a digit in the accumulator to be rotated with the two digits in a memory location pointed to by register pair HL (See Figure 10). These instructions allow for efficient BCD arithmetic.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Given that &lt;code&gt;DAA&lt;/code&gt; exists for addition and subtraction, I'm going to hazard a guess that the motivation was long multiplication and division, permitting the shift-a-digit step with A acting as carry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;E.g. to derive long multiplication from first principles:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;3 * 29&#xA;= 3 * (2 * 10 + 9)&#xA;= (3 * 2) * 10 + 3 * 9&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;RLD&lt;/code&gt; will give you the &lt;code&gt;* 10&lt;/code&gt; step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it were &lt;code&gt;3 * 2983471&lt;/code&gt; there'd be six &lt;code&gt;* 10&lt;/code&gt; steps, manipulating what becomes a four-byte answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it were &lt;code&gt;23 * 2983471&lt;/code&gt; then that'd be twice as much work, to get &lt;code&gt;2 * 2983471&lt;/code&gt;, multiply that by ten, then calculate and add in &lt;code&gt;3 * 2983471&lt;/code&gt;. So twelve &lt;code&gt;* 10&lt;/code&gt; steps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd also be likely to have obtained the &lt;code&gt;2&lt;/code&gt; in isolation by a divide-by-ten step. Which &lt;code&gt;RRD&lt;/code&gt; would help with.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-05-29T17:29:18.143" LastActivityDate="2018-05-29T17:29:18.143" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6556" PostTypeId="2" ParentId="6554" CreationDate="2018-05-29T17:01:33.633" Score="11" Body="&lt;p&gt;A typical black and white television will be capable of displaying 80-column text that can be read, but such text will generally be sufficiently unpleasant to read that some other kind of display would be preferable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Among other things, a monitor which is adjusted to have extremely sharp focus and modulate the beam very sharply will generally produce a television picture which is less aesthetically pleasing than one which has a softer focus and slower transitions.  Displaying 80-column text doesn't require using any special scanning rates or doing anything that would be incompatible with a typical black and white television, but the amount of blur required to render 80-column text unpleasant to read (if not totally illegible) is only half that required to do likewise for 40 column text.  The amount of blur produced by many sets falls somewhere between those two levels.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-05-29T17:01:33.633" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6557" PostTypeId="2" ParentId="6551" CreationDate="2018-05-29T17:28:58.290" Score="11" Body="&lt;p&gt;RLD and RRD are simple 4-bit shifts of BCD-coded values. As they are shifting by one &lt;strong&gt;decimal&lt;/strong&gt; digit right or left, they effectively result in a multiplication (or division) by 10 (assumed A is 0) when used repeatedly on a multi-digit BCD value or a multiplication by 10 plus an addition of the lower digit in A. A acts as a sort of &quot;decimal carry&quot; in this operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use this in a multiplication (or division) routine for decimals parallel to the pen-and-paper method you learned at school.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multiplying a multi-digit packed BCD number at &lt;code&gt;DATA&lt;/code&gt; by 10, with the byte count (half the number of decimal digits) in &lt;code&gt;COUNT&lt;/code&gt;, would look like the below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        LD      HL, DATA&#xA;        LD      B, COUNT&#xA;        XOR     A&#xA;ROTAT:  RLD&#xA;        INC     HL&#xA;        DJNZ    ROTAT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Outside of BCD-coded decimals, you could be using these commands to scroll a   ZX Spectrum screen left or right by 4 pixels, for example.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-05-29T18:09:07.093" LastActivityDate="2018-05-29T18:09:07.093" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6558" PostTypeId="2" ParentId="6554" CreationDate="2018-05-29T17:39:23.750" Score="4" Body="&lt;p&gt;I once owned a black and white monitor (not sure if it was a computer monitor or CCTV monitor) that I hooked up via composite to a CGA card, and 640x200 (enough for 80 columns) was very sharp. But while it was NTSC, technically it wasn't a television in the normal sense, and if you hooked up through RF, I think you would not be very pleased with the results.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-05-29T17:39:23.750" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6559" PostTypeId="2" ParentId="6529" CreationDate="2018-05-29T18:44:56.093" Score="1" Body="&lt;p&gt;I mostly used direct serial connections, sometimes resorting to copying raw text files using BASIC programs. There were also utilities available for reading foreign floppy formats; I believe the one I used was called &quot;Uniform&quot;. There was little difficulty with 8 inch floppies, as virtually everyone used the same IBM standard for physical access. By the time PC's came along most 5 1/4 inch floppies were also using the same physical format, requiring only software (like Uniform) to convert file format. There were still some problem devices that used variable speed drives, hard sectors, and different track spacing; those you had to fall back on serial.&lt;/p&gt;&#xA;" OwnerUserId="8729" LastActivityDate="2018-05-29T18:44:56.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6560" PostTypeId="2" ParentId="6446" CreationDate="2018-05-29T19:15:30.993" Score="0" Body="&lt;p&gt;At one time I had several dozen vacuum tube flip flops. I have no idea of their original origin or use. They used 12AX7 tubes (a dual triode) and were packaged in a die-cast housing with an octal plug on the bottom so that the entire circuit could be easily replaced.&#xA;Nearly all digital circuitry I was involved with during the late 60's and early 70's involved counting and displaying pulses from nuclear counters. The most popular (and simplest) used the aforementioned dekatron tubes that combined counting and display functions in a single device; no help for your use, but in fact their circuitry DID require a single flip-flop.&#xA;I like the idea of using relays, but would suggest that you use individual incandescent light bulbs as displays for historic accuracy and &quot;coolness&quot;. LED's didn't exist alongside tubes, and were initially expensive. Also, don't get hung up on binary or byte oriented operation. Many of the devices of the day used base 10 counting/computing because the logic involved in converting from binary was prohibitive. (Hence the dekatron, which counted 0 to 9, and produced a &quot;carry&quot; pulse on the 9 to 0 transition.)&lt;/p&gt;&#xA;" OwnerUserId="8729" LastActivityDate="2018-05-29T19:15:30.993" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6561" PostTypeId="2" ParentId="6529" CreationDate="2018-05-29T20:29:18.650" Score="1" Body="&lt;p&gt;Back in the early 1980s, I wrote my dissertation on a CDC Cyber 170/750.  60 bit words, 6-bit characters... which of course meant that it had only upper case letters (and numbers and symbols).  Since dissertations don't look good in all upper-case, the typesetting system (using that term loosely) implemented lower case letters with escaped upper case letters, &lt;code&gt;\T\H\U\S\L\Y&lt;/code&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I dumped the final dissertation to a 9-track tape (the kind with the 10.5 inch reel that you used to see in movies that featured a computer in the 1960s).  The next computer I went to was a VAX, which of course had ASCII.  Someone wrote me a small C program to translate the escaped characters into ASCII lower case characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's how it was.  What an improvement over boxes of punch cards!&lt;/p&gt;&#xA;" OwnerUserId="8731" LastEditorUserId="278" LastEditDate="2018-05-30T18:32:14.197" LastActivityDate="2018-05-30T18:32:14.197" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6562" PostTypeId="2" ParentId="6554" CreationDate="2018-05-29T20:43:53.450" Score="4" Body="&lt;p&gt;I used several B&amp;amp;W television sets as 80 column monitors &quot;back in the day&quot; with acceptable results, but I always modified them to bypass all the RF stages. This required finding a point to inject the video signal into the video amplifier input. One problem was that virtually all B&amp;amp;W sets are &quot;hot chassis&quot;, meaning that the AC power cord is connected directly to the chassis. Being young and adventurous, I just measured the voltage at the chassis and made sure the cord was plugged in &quot;the right way&quot; to not get fried. Today, more cautious and with more money, I would add an isolation transformer to the mix.&#xA;I never tried to use a color set, but I do know your chances of success are much less. (Worked my way through college as a TV repairman. Remember those?) There is seldom perfect registry between the color guns, leading to ghosting. In addition, shadow mask in most picture tubes is coarse enough to be similar in pitch to the dot pitch of the characters, leading to moire patterns. High resolution color monitors of the era typically cost thousands of dollars and were FAR more complex than TV's. An 80's vintage CAD system monitor I worked with had 1024 X 1024 resolution and weighed over 100 pounds. It also had to be in a darkened room to be usable due the the very fine pitch shadow mask restricting most of the beam current. &lt;/p&gt;&#xA;" OwnerUserId="8730" LastActivityDate="2018-05-29T20:43:53.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6563" PostTypeId="2" ParentId="4376" CreationDate="2018-05-29T20:51:58.207" Score="8" Body="&lt;p&gt;In the early '80s I worked on a &quot;&lt;a href=&quot;https://books.google.com/books?id=-tNb_j8ivU0C&amp;amp;pg=RA1-PA44&amp;amp;lpg=RA1-PA44&amp;amp;dq=icci%20communications%20processor&amp;amp;source=bl&amp;amp;ots=kw6SeLcLwc&amp;amp;sig=l8Z2ADyFGjOmOlyfc_9xD6a0h6I&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=0ahUKEwjL5LDA5KvbAhXJHTQIHQ8pDx4Q6AEIJzAA#v=onepage&amp;amp;q=icci%20communications%20processor&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;communications processor&lt;/a&gt;&quot; which let you use ASCII terminals as an IBM 3270 display subsystem.  The Z80 was critically short of both RAM and program memory (27256 EEPROM chips, IIRC) for the task of emulating 8 displays.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To handle the RAM shortage the hardware got a 8kB bank setup in high RAM that was manually switched by the program. To handle the program space shortage, there was a &quot;shadow PC counter&quot; that worked with the M1 and a handful of gates to detect &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4377&quot;&gt;the conditions in @Tommy's answer&lt;/a&gt; so that program accesses went to the EEPROM chips and true data access went to RAM.  There were a handful of IX and IY instructions that we weren't allowed to use.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ugly, but it allowed the product to handle twice as many connections, which made it an economic winner.  &lt;/p&gt;&#xA;" OwnerUserId="8733" LastEditorUserId="8733" LastEditDate="2018-05-30T14:59:49.607" LastActivityDate="2018-05-30T14:59:49.607" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6564" PostTypeId="2" ParentId="4376" CreationDate="2018-05-29T22:16:30.203" Score="10" Body="&lt;p&gt;In the 80s and 90s some arcade games the M1 signal was used for anti-bootlegging measures. The developers used use a customized assembler that would allow him/her to mark code and data sections, and the assembled program was encrypted such that code sections were encrypted one way and data sections were encrypted another way. The resulting combination of encrypted code and data would be written to a single EPROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The arcade game hardware had a custom module containing a Z80 and support circuitry to execute the game program by applying one of two different decryption functions based on the state of the M1 pin. In theory this made it very difficult to duplicate a program, and to modify it (often copyright messages were removed by bootleggers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice bootleggers would duplicate games by dumping the Z80 address space twice after gaining physical access to the Z80 data/address/control bus in the module, once for each state of the M1 pin. This produced two copies of the EPROM contents, one with the content decrypted as if it were code, another with the content decrypted as if it were data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bootleg arcade game would have a regular Z80 and now two EPROMs and it would select which EPROM was being used based on M1 to pick the decrypted program or data. This essentially reversed the protection the original developers applied by de-interleaving the interleaved encrypted code and data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more dedicated effort was to manually merge the decrypted code and decrypted data back together into a single unified EPROM, but this was time consuming and error prone and was not commonly done, if at all, until modern times when arcade collectors wanted to replace the short-lived custom modules with a plain Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So M1 has some useful, if obscure, functionality.&lt;/p&gt;&#xA;" OwnerUserId="8734" LastActivityDate="2018-05-29T22:16:30.203" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6565" PostTypeId="1" AcceptedAnswerId="6567" CreationDate="2018-05-29T23:35:46.240" Score="7" ViewCount="876" Body="&lt;p&gt;I've got an old 386 laptop - specifically an OmniBook 300 - and I'm a little suspicious of the RAM. It's exhibited some very odd symptoms, such as memory-related crashes and boot failures, so I'd like to give it a thorough testing. It has 2 MB of RAM built in, plus an additional 6 MB on a Kingston memory module that looks a little bit like a small compact flash card that's just a bare PCB (3 DRAM chips and some capacitors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer boots from ROM, so I don't have the option of using any kind of testing boot disk. It would have to be something that can be run from MS-DOS 5.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What software exists for thoroughly testing memory on a system like this?&lt;/p&gt;&#xA;" OwnerUserId="4459" LastActivityDate="2018-05-31T07:48:37.247" Title="Testing RAM on a 386" Tags="&lt;hardware&gt;&lt;hardware-testing&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6566" PostTypeId="2" ParentId="6297" CreationDate="2018-05-30T04:07:42.843" Score="3" Body="&lt;p&gt;IITROS was a 1972-era Univac 1108 remote batch system using ASR 33 teletypes, written and hosted at the Illinois Institute of Technology.  The teletypes had half-duplex acoustic coupler connections, so everything typed was locally echoed on that paper.  To avoid the password being readable, it would print a bunch of characters (12?), CR, more characters, CR, a few more times to make a black blob on the line.  You'd type your password on the blob, where it wouldn't be visible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also had a cute prompt:  If it was waiting for input, it would periodically send an invisible character (I think it was NULL, but not sure) which would make the motor cycle and the typehead (the little cylinder that had the embossed characters) dip.  It was like the machine was sitting there tapping it's foot waiting for you to pay attention...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YJ9Yr.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YJ9Yr.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8733" LastActivityDate="2018-05-30T04:07:42.843" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6567" PostTypeId="2" ParentId="6565" CreationDate="2018-05-30T04:47:38.727" Score="8" Body="&lt;p&gt;The Omnibook has its own self-test which can be run by pressing &lt;kbd&gt;Esc&lt;/kbd&gt; when powering it up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best freely-available general-purpose memory checker is &lt;a href=&quot;http://memtest.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Memtest86+&lt;/a&gt;, and older versions are available as plain DOS executables (look for “Download - Pre-Compiled EXE file (Pure DOS - Obsolete)”). They are identified as obsolete but should be fine for your purposes; note however that version 4.10 might be the last one you can run on a 386, &lt;a href=&quot;http://forum.canardpc.com/threads/114093-386-support-broken-in-4-20&quot; rel=&quot;nofollow noreferrer&quot;&gt;more recent versions apparently fail&lt;/a&gt;. As mentioned by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/547/jules&quot;&gt;Jules&lt;/a&gt;, you should also be able to “boot” the pre-compiled bootable Memtest86+ binaries using &lt;a href=&quot;http://youpibouh.thefreecat.org/loadlin/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;loadlin&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another tool worth looking at is &lt;a href=&quot;ftp://ftp.sac.sk/pub/sac/utildiag/diags.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;Craig Hart’s PC Diagnostics ’95&lt;/a&gt; which includes decent memory tests. His &lt;a href=&quot;ftp://ftp.sac.sk/pub/sac/utildiag/testmem.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;Testmem&lt;/a&gt; is a dedicated memory tester that also works well but only tests extended memory.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-05-31T07:48:37.247" LastActivityDate="2018-05-31T07:48:37.247" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6568" PostTypeId="2" ParentId="4376" CreationDate="2018-05-30T09:18:35.810" Score="2" Body="&lt;p&gt;As indicated in other answers, &lt;code&gt;M1&lt;/code&gt; can't be used to implement a Harvard addressing scheme, as immediate operands are fetched from program memory in cycles subsequent to M1.  But it &lt;em&gt;can&lt;/em&gt; be used by hardware to detect parts of program execution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One use for this was on the ZX Spectrum's Interface One (for Microdrives and serial ports): it detects execution of I/O operations (using M1 + address), and in response, asserts &lt;code&gt;#ROMCS&lt;/code&gt; to disable the built-in ROM and enables its own Shadow ROM in the bottom 16K¹.  I can't remember how the return to the Spectrum ROM is achieved - it may be the same mechanism, but I no longer have my copy of &lt;em&gt;Spectrum Shadow ROM Disassembly&lt;/em&gt; with which to check.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹ IIRC, an 8K ROM that appears twice in the address space - A13 not decoded.&lt;/p&gt;&#xA;" OwnerUserId="7946" LastActivityDate="2018-05-30T09:18:35.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6569" PostTypeId="1" CreationDate="2018-05-30T14:46:01.167" Score="14" ViewCount="1424" Body="&lt;p&gt;I sort of &quot;have a thing for BASIC&quot; right now, which has led to a couple of great exchanges here in RSE about the variations &quot;back in the day&quot;. I'm wondering if anyone is aware of other &lt;em&gt;modern&lt;/em&gt; BASICs for the 6502?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm ultimately interested in seeing if there is a way to make a fairly universal BASIC for the platform that is a modern improvement on the MS standard. I know there are a number of examples like BBC and TURBO that have significant performance improvements, as well as complete re-implementations like &lt;a href=&quot;https://atariwiki.org/wiki/Wiki.jsp?page=FastBasic&quot; rel=&quot;noreferrer&quot;&gt;FastBasic&lt;/a&gt; that everyone should look at. And then there's the various potential improvements seen here, especially supercat's &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4948/was-the-design-of-ms-basic-for-6502-based-on-ms-basic-for-8080&quot;&gt;remarks on strings&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So are there other examples I should look at?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-11-25T02:19:40.207" Title="New 6502 BASICs?" Tags="&lt;basic&gt;&lt;6502&gt;" AnswerCount="7" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6570" PostTypeId="2" ParentId="4376" CreationDate="2018-05-30T15:30:34.543" Score="3" Body="&lt;p&gt;Another important function of M1 which isn't yet mentioned is to synchronize in-circuit emulators.  An in-circuit emulator is a device which contains a processor, a connector that plugs into a processor socket, and some circuitry between them.  The emulator can be set to behave like a processor, but it can at any point or when a certain breakpoint is triggered, disconnect its bus from that of the host system, save the state of registers, and then start executing its own code to provide a user interface with its own buttons and display.  That interface may allow individual memory reads and writes to be performed on the host system, and may also allow for operations to copy or fill a range of memory, scan a range of memory for a certain value, configure breakpoints, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While some low-cost debuggers may use interrupts to gain control, that could cause difficulties if a &quot;real&quot; interrupt happens at the same time as the debugger tries to gain control.  A better ICE will do do something like wait for the start of an instruction (perhaps figuring that a /M1 cycle which follows a write must be the start of an instruction), disconnect from the host bus and connect to its internal bus, replace the data from the bus with 0xFF (a RST 38h instruction), pretend that the upper address bits on the next two write cycles are all set (so the writes will go somewhere in the range 0xFFF0 to 0xFFFF regardless of the value of SP), and then start executing code from its own ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A proper &quot;start of instruction&quot; indication would have been more convenient than the Z80's &quot;some kind of opcode byte&quot;, but most code won't go very long without a write cycle, and once a write cycle occurs the state machine in the ICE should be able to follow things after that.  Perhaps an ICE could track things even without M1, but it would require a more complicated state machine that understands almost all Z80 opcodes rather than just a few prefix bytes.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-05-30T15:30:34.543" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6571" PostTypeId="2" ParentId="6569" CreationDate="2018-05-30T16:25:26.477" Score="7" Body="&lt;p&gt;There's EHBasic, which is (afaik) a re-invented BASIC (i.e. I do not believe it's a port from a vintage BASIC, but recreated out of whole cloth), but it seems pretty mundane and conventional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a reverse engineered, commented assembly listing of the Atari TURBO BASIC XL. It was noted for having some interesting features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have not looked at it in detail, so can't comment on that.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-05-30T16:25:26.477" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="6572" PostTypeId="2" ParentId="6569" CreationDate="2018-05-30T17:08:19.100" Score="4" Body="&lt;p&gt;I've toyed with the idea of doing my own attempt at a BASIC interpreter.  If you want to try your own, figure out how you can design things to deal with the following basic (pun intended) operations:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Accept a line of input preceded by a number and edit the program in memory to accommodate it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Convert a program which is stored in memory into human-readable form.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Run a program in memory.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The last operation is probably the most performance-sensitive, but you should try to make the first one be fast as well.  The second probably isn't likely to matter from a performance perspective, but you should ensure that the amount of code required to accomplish it is reasonable.  Having an input scanner convert something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;print a+b*(c+d)+e,f&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;into a sequence of tokens equivalent to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;var#1 var#2 var#3 var#4 add multiply add var#5 add printvalue printseparator&#xA;var#6 printvalue&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would not be overly difficult, and it would allow for very efficient&#xA;processing, but converting it back to the original form might be tricky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a general design, I would suggest that variables be converted to tokens&#xA;that identify a relative location within a symbol/value table (either an&#xA;index or a byte offset), and numbers should be converted to tokens that&#xA;store their value in binary.  While converting expressions to prefix or&#xA;postfix form may slightly expedite processing, keeping them in infix will&#xA;make listing much simpler.  If you store strings (literal or otherwise)&#xA;with a length prefix and ensure that each string in memory takes at least&#xA;three bytes total (perhaps by saying that a string pointer whose MSB equals&#xA;1 should be interpreted as a single-byte string) that may facilitate garbage&#xA;collection by allowing relocated strings to be replaced by a pointer to their&#xA;new address.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-05-30T17:08:19.100" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6573" PostTypeId="2" ParentId="6529" CreationDate="2018-05-30T18:35:23.473" Score="2" Body="&lt;p&gt;FTP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neworking was around before some people believe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was using FTP to transfer data between computers over TCP/IP networks from the early 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was reasonably easy between computers on a local network, known in those days as &lt;em&gt;an internet&lt;/em&gt;.  Access to the wider &lt;em&gt;the Internet&lt;/em&gt; was harder to get.  Part of my job involved exchanging data with laboratories in the USA.  We used FTP transfers both from the HP boxes in the office and from BBC Micros with Prism modems.  The latter ran in those days at 300bd, so transfers took a while.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2018-05-30T18:35:23.473" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6574" PostTypeId="2" ParentId="6569" CreationDate="2018-05-30T19:12:25.103" Score="15" Body="&lt;p&gt;In addition to FastBasic for the Atari, those interested in the Apple II line should take a look at &lt;a href=&quot;https://github.com/dschmenk/PLASMA&quot; rel=&quot;noreferrer&quot;&gt;PLASMA&lt;/a&gt;. PLASMA is not BASIC. It is its own language designed for the 6502 and focuses on being easier to read &amp;amp; maintain than assembly without sacrificing full access to the hardware. The syntax is familiar to Pascal, C, and 6502 assembly programmers. It also has a self-hosted compiler &amp;amp; editor, and generates compact and relocatable VM code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are early prototype ports of PLASMA aiming to support the Commodore 64 and BBC Micro.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-05-30T19:12:25.103" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6575" PostTypeId="2" ParentId="6569" CreationDate="2018-05-30T19:53:55.600" Score="6" Body="&lt;p&gt;There's &lt;a href=&quot;http://atariage.com/forums/forum/65-batari-basic/&quot; rel=&quot;noreferrer&quot;&gt;Batari BASIC&lt;/a&gt; which is specific to the Atari 2600. It's actually quite powerful.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-05-30T19:53:55.600" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6577" PostTypeId="2" ParentId="5756" CreationDate="2018-05-30T22:27:31.920" Score="1" Body="&lt;p&gt;Well, here's an example, IMHO, of how NOT to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a segment of the TRS-80 Model 1 schematic. (it's stitched together from two pages from &lt;a href=&quot;http://ts-inc.dyndns.org/TRS-80%20Model%201%20Schematics/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you find the BUSRQ pin in the upper left, it's tied to a TEST input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Follow the line around, and you'll find that it's connected to a set of Tri-State buffer chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As soon as you send the BUSRQ low, it tri-states out the entirety of the Address and Data bus. Immediately. It doesn't wait for the BUSAK, it doesn't wait for the CPU to finish, it just cuts the CPU completely off mid-anything and everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, this is labeled TEST, so they used it for testing purposes in an (ostensibly) controlled situation. My father discovered this when he wanted to do some expansion to the TRS-80, and perhaps some DMA, but found this little bit making the BUSRQ mostly unsuitable for actual expansion. Things like this went in to his &quot;They did WHAT?&quot; file. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not kind to the CPU to just up and yank it away from its whole world on a whim.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Si8cf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Si8cf.png&quot; alt=&quot;TRS Schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-05-30T22:27:31.920" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6578" PostTypeId="2" ParentId="6554" CreationDate="2018-05-31T00:49:23.240" Score="3" Body="&lt;p&gt;&quot;I understand that an NTSC television normally can't go much beyond 320 pixels&quot; ... this is an exaggeration of the issue. Try playing back an old 1980s era VHS video onto a TV versus a higher quality source (e.g. broadcast TV or DVD) and you should see a noticeable difference in quality. VHS (not the revised SuperVHS) has a horizontal resolution that is approximately equivalent to 320 pixels (352 is often quoted -- that's the resolution of SIF (or CIF, the PAL equivalent), a digital format intended to replicate VHS quality, and used for example in the Video CD format). Theoretically, an NTSC TV could manage up to 704 pixels horizontally, but this seems rare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SuperVHS has a horizontal resolution of about 400-420 pixels, and to my understanding this was usually fully displayable by most NTSC TVs, even when connected to the VCR through an RF connection, which I understand was by far the most common approach in the US market (I've only ever used it with PAL so can't comment directly, but PAL TVs could definitely exceed even the SuperVHS quality, and SCART was commonly used as an interconnect that provided better quality than RF). The 704 pixel figure is from 4SIF (or 4CIF for the PAL equivalent), a digital image format intended to be approximately equivalent to the best a standard definition TV could be. In reality, you're unlikely to ever see that, but it is at least a theoretical possibility (and can happen with a digital TV sampling an analogue input signal).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it seems that an NTSC TV, at least if it is reasonable quality, ought to be able to produce at least 420 horizontal lines.  The question is, is this enough for legible 80 column text?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer is probably, as long as your font is appropriately designed. 5x7 fonts are commonly used (e.g. in LCD displays on printers and similar equipment) and are perfectly legible.  These fonts usually don't include horizontal space, though, so you'll need 6 pixels per character to match them, meaning you should be using a display that provides 480 horizontal pixels.  This is potentially pushing the limits of what an NTSC TV can display, but as long as the quality of the TV and your connection to it are good enough, it ought to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's worth noting that the comments to the question mention an Amiga 60-character mode that worked well -- 60 characters and an 8x8 font would suggest that this used a 480 pixel wide display mode and therefore suggests that swapping to a 6x8 font should get you 80 columns working well enough.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-05-31T01:04:27.660" LastActivityDate="2018-05-31T01:04:27.660" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6579" PostTypeId="2" ParentId="6569" CreationDate="2018-05-31T02:30:27.707" Score="1" Body="&lt;p&gt;The Oric 1 and Oric Atmos had a good full featured basic language for the day.  Both machines used the 6502A in the old standard 40 pin package.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the day (the early 80's), a friend of mine disassembled the machine code from the ROM and then extended many of the commands and added a few new ones.  As I recall, the programming had to be very creative since the ROM was only 16K and the OS, as it was, only just fit within a few bytes.  But anyway, that machine had a pretty good BASIC language and I'm certain if you looked around you could find a simulator for the Oric and grab the ROM code from there.&lt;/p&gt;&#xA;" OwnerUserId="8743" LastActivityDate="2018-05-31T02:30:27.707" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6580" PostTypeId="2" ParentId="257" CreationDate="2018-05-31T03:34:24.320" Score="2" Body="&lt;p&gt;I have a 600XL which came to me with a red screen of death, one of the first things I did was to remove and reseat the MMU IC (CO61618) after that the computer runs ok, but if your Atari does not you could have a dead MMU or one of the other ICs or memory failing. MMU is a really hard to find piece of hardware so first check other components.&lt;/p&gt;&#xA;" OwnerUserId="8744" LastEditorUserId="278" LastEditDate="2018-05-31T09:23:18.887" LastActivityDate="2018-05-31T09:23:18.887" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6581" PostTypeId="2" ParentId="6529" CreationDate="2018-05-31T16:22:32.830" Score="1" Body="&lt;p&gt;Remote job entry was still very popular on large systems in the 80's, and many medium and small systems emulated the various RJE protocols to transfer data via network (sorta). Remote Job Entry was available as far back as the 60's and was very well established. It wasn't particularly fast, with lots of the modems used topping out at 2400 or 4800 baud, but it's not like it was your average fat programs and graphics going back and forth either. I do remember establishing remote networking between mainframes and midrange with a mix of 8/16/32/36 bit words. I remember talking to an Air Force Colonel and he wanted to know what was the fastest way to get new systems releases from Georgia to Utah and California now that they have the new fancy 9600 baud connections. I told him &quot;FedEx&quot;.&lt;/p&gt;&#xA;" OwnerUserId="8750" LastActivityDate="2018-05-31T16:22:32.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6582" PostTypeId="2" ParentId="6529" CreationDate="2018-05-31T19:00:04.660" Score="1" Body="&lt;p&gt;When I was moving stuff from an Apple IIe to a Mac SE, I ended up wiring the Mac's serial port to a couple of pins on the IIe's joystick port, then using a program that bit-banged serial output at like 300 baud. I used a terminal program on the Mac to capture the stuff to text files.&lt;/p&gt;&#xA;" OwnerUserId="4356" LastActivityDate="2018-05-31T19:00:04.660" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6583" PostTypeId="1" CreationDate="2018-05-31T19:24:28.403" Score="2" ViewCount="458" Body="&lt;p&gt;As you probably know, nothing really lasts forever in the human-made world of appliances, especially electronic ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether it stems from market evolution, technical advancements, newer paradigms, out of business  companies, scarcity of spare parts, (insert here anything relevant); the vast majority of platforms simply disappears over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the trend is accelerating for &quot;not yet retro&quot; hardware, e.g. it's much easier to get hold of an Amiga than, say, the Japan-only PSX.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question : Is emulation ultimately the future of retro computing ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though not perfect, emulation does well in the topic of historical archiving and while it also needs to be archived, it provides a glimpse of what a platform was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe this question is a good fit for the site but it might need some adjustments, so please suggest.&lt;/p&gt;&#xA;" OwnerUserId="3282" LastActivityDate="2018-05-31T21:38:00.360" Title="Is emulation ultimately the future of retro computing?" Tags="&lt;history&gt;&lt;emulation&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2018-05-31T22:27:31.087" ContentLicense="CC BY-SA 4.0" />
  <row Id="6584" PostTypeId="2" ParentId="6583" CreationDate="2018-05-31T20:28:17.313" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;My question : Is emulation ultimately the future of retro computing ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. Not any more than emulating a 1960s Mustang with a Beatle mod is the future of retro cars.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Easier? Sure! Totally useful? Absolutely! What people who care actually want? Never!&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-05-31T20:28:17.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6585" PostTypeId="2" ParentId="6583" CreationDate="2018-05-31T21:38:00.360" Score="6" Body="&lt;p&gt;No. Emulation &lt;em&gt;used&lt;/em&gt; to be a good contender as the barrier to writing software is relatively low. But in recent years the barrier to developing new &lt;em&gt;hardware&lt;/em&gt; has fallen significantly. It used to be the case that to do hardware development you'd need an upfront budget of thousands, if not hundreds of thousands of dollars. Now off-the-shelf FPGAs can be programmed to behave nearly identically to retro hardware, the cost of PCB fabrication has fallen significantly, and there are free software solutions for doing hardware design. Emulation is no longer a foregone conclusion for when the real hardware is gone - the ability to design new, compatible hardware is within reach of many more people than it used to be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Witness Dennis van Weeren's &lt;a href=&quot;https://en.wikipedia.org/wiki/Minimig&quot; rel=&quot;noreferrer&quot;&gt;Minimig&lt;/a&gt; which, in 2006, delivered an Amiga 500 compatible board, with almost everything implemented on an FPGA (the CPU being the notable exception; even then, a modern part which had near-perfect compatibility was available). Or efforts to reverse-engineer PCBs of retrocomputers, such as the &lt;a href=&quot;http://eab.abime.net/showthread.php?t=84906&quot; rel=&quot;noreferrer&quot;&gt;A1K Amiga 500+ mainboard&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It'll be very interesting to see where the amateur hardware development market innovation goes in the next 5-10 years but the retro computing community will undoubtedly benefit. To my knowledge FPGAs and their ilk have shortcomings that prevent a form-factor that is a drop-in replacement for DIP chips prevalent in the home computer revolution, but I've no doubt that this will become possible in the not-too-distant future! Maybe, just maybe, one day an FPGA will be able to replicate a SID chip &lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2018-05-31T21:38:00.360" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6586" PostTypeId="2" ParentId="2576" CreationDate="2018-06-01T00:07:24.807" Score="5" Body="&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=hTlNVUmBA28&quot; rel=&quot;noreferrer&quot;&gt;'Making of &quot;Reverse emulating the NES...&quot;' video on youtube&lt;/a&gt; (from &lt;a href=&quot;https://twitter.com/tom7&quot; rel=&quot;noreferrer&quot;&gt;tom7&lt;/a&gt;/suckerpinch) demonstrates the Raspberry Pi route working with additional chips and hackery to make the timing mostly work, but is glitchy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the tricks involved not being able to actually deliver the correct memory from the Pi in time to a read request, it would arrive a cycle late.  But the read requests are predictable given that the application software is also custom, and the entire NES can be emulated in the Pi while a real NES is running.  &lt;/p&gt;&#xA;" OwnerUserId="4808" LastEditorUserId="4808" LastEditDate="2018-06-04T22:40:11.407" LastActivityDate="2018-06-04T22:40:11.407" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6587" PostTypeId="2" ParentId="2576" CreationDate="2018-06-01T11:50:37.593" Score="4" Body="&lt;p&gt;As I understood, you want to make something that behaves like any possible NES cartridge and can be changed (at least for simulated ROM content) on the fly (in real time)?&lt;/p&gt;&#xA;&lt;p&gt;And it should be cheap and open source?&lt;/p&gt;&#xA;&lt;p&gt;Quick Answer: &lt;strong&gt;Dream On&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Full Monty&lt;/h2&gt;&#xA;&lt;p&gt;What you're asking for is something like test equipment for chip manufacturing. There are units that would satisfy sour requirements and speed - but they are neither open source, nor cheap - think 100k EUR for entry level. More important, none will fit in a NES cartridge.&lt;/p&gt;&#xA;&lt;p&gt;Of course such a beast would be able to not only react to all your needed transfers in time but also emulate next to any special circuitry.&lt;/p&gt;&#xA;&lt;h2&gt;Lets Shovel&lt;/h2&gt;&#xA;&lt;p&gt;It's a matter of speed (and memory). You already touch on this with your rough numbers&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(1.x MHz NES -&amp;gt; 1.79 * 72 * margin-factor MHz microcontroller? Or less because only a subset of all those pins are needed)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That would give some 128 Mbit/s (or 8 MByte). Except, that's only if all data is prepared in sequence or requests. In reality, the CPU sets up a request and wants a reaction within less than 200ns. So even when only looking at the data lines, it needs to transfer 72 bit to the emulation thingy, and 8 bit back all within 200 ns, cranking the needed connection up to ~800 Mbit/s.&lt;/p&gt;&#xA;&lt;p&gt;Just to transfer the data we are already near a PCIe 1.1 line not counting the overhead - and with no necessary processing on the PC side included. Not to mention all the various latencies a PC may have to feed the data in time.&lt;/p&gt;&#xA;&lt;p&gt;The fastest Pi Network is Gbit with the Pi 3 B+. So that alone wouldn't make it. Also a Pi wouldn't be able to do it locally.&lt;/p&gt;&#xA;&lt;h2&gt;A Smaller Size&lt;/h2&gt;&#xA;&lt;p&gt;Well, if we ignore all special hardware cartridges and go just for something with ROM and the ability to change that data at runtime, the picture becomes very different. One could use some dual port RAM and a microcontroller. One side connected to the NES interface, maybe with the usual banking logic added, while the other side can be filled (or read) from said microcontroller.&lt;/p&gt;&#xA;&lt;p&gt;To the NES this looks like a perfectly normal ROM cartridge, even (simple) RAM as with Super Mario Bros 3 can be done. From the PC side, each cell can be read or written.&lt;/p&gt;&#xA;&lt;p&gt;Of course, it's again a matter of speed. But now it depends more on the amount of data you want/need to change within a certain time. This again depends on the programs you want to write. A high speed USB 2.0 will already be able to deliver data faster than the NES can read it - as long as it's semi streamed, not totally random.&lt;/p&gt;&#xA;&lt;p&gt;In fact, if the data is read from only a few cells in sequence under program control even a USB 1.1 full speed can do the trick, as even with the fastest access a 6502 needs 4 clocks to read a single byte (&lt;code&gt;LDA &amp;lt;ABS&amp;gt;&lt;/code&gt;), and many more if it's doing something with the data. This turns the needed bandwidth down to less than 500 KiB/s - USB 1.1 full speed can deliver up to 1 MiB/s.&lt;/p&gt;&#xA;&lt;p&gt;With some thought it might be possible to write a low overhead protocol to deliver your data just in time.&lt;/p&gt;&#xA;&lt;p&gt;And no, Dual Port RAMs aren't overly expensive. 1 Mib (like in 128Kib x8) is around 30 Euro per piece. For a one off design, chip prices do not really matter in comparison to the time invested.&lt;/p&gt;&#xA;&lt;h2&gt;The Gist of the Matter&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The game would copy the same sprite or background tile from the same memory address but get something different than a previous cycle.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Hmm, when reading this, it sounds as a single pipe could also do the trick?&lt;/p&gt;&#xA;&lt;p&gt;So  why not doing some more common FLASH based ROM emulator (maybe with a Arduino for reload without unplugging) and a FTDI FT232x based USB-FIFO? From the NES side this could look like a single memory location delivering a new byte each time it is accessed, while the PC sees a high speed serial connection. The internal buffer of up to 2 KiB would cover next to all possible timing issues. And the back channel could be used to send commands to the PC.&lt;/p&gt;&#xA;&lt;h2&gt;In Lockstep&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(I'll worry about how to synchronize and not be in the middle of a memory copy later)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Synchronizing the game to the USB clock would make a great start.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-11-27T15:41:16.677" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6588" PostTypeId="1" AcceptedAnswerId="6590" CreationDate="2018-06-01T13:11:22.307" Score="8" ViewCount="2456" Body="&lt;p&gt;This isn't quite so much a question about how it was done &quot;back in the day&quot;, but what my options are today for source code/version control on an MS-DOS machine. I enjoy tinkering with Turbo Pascal, Turbo C, and Turbo Assembler on my HP 200LX, which runs MS-DOS 5.0 on an 80186-compatible processor, with 640 KB of RAM, plus a little bit of EMS. I would like to be able to keep past revisions of files to revert or track down bugs if/when I screw something up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the viable choices for source control on such a machine? I do &lt;em&gt;not&lt;/em&gt; require any kind of network support, simply a local file-based repository. If it compresses committed files, or stores only differences, that would be a plus, as I don't have tons of disk space on this thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've looked briefly at RCS in the past, but it's a bit clumsy to work with, since you have to commit/check out single files at a time (along with its bizarre default behavior of deleting the working copy when checking in), and I'm not sure if there's a &quot;commit all changes&quot; option akin to &lt;code&gt;git add .&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4459" LastEditorUserId="79" LastEditDate="2018-09-13T16:45:20.917" LastActivityDate="2018-09-18T21:33:15.097" Title="Source code control on an MS-DOS system" Tags="&lt;source-control&gt;" AnswerCount="8" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="6589" PostTypeId="1" CreationDate="2018-06-01T13:58:59.903" Score="8" ViewCount="10813" Body="&lt;p&gt;Am wondering what would be the easiest way to connect an Iomega &lt;a href=&quot;https://en.wikipedia.org/wiki/Zip_drive&quot; rel=&quot;noreferrer&quot;&gt;Zip drive&lt;/a&gt; (parallel port version) to a modern PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I note there are USB to IEEE 1284 adapter cables, but would be very surprised if this is a complete solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anybody done this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: the wiki page says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Parallel port external Zip drives are actually SCSI drives with an&#xA;  integrated Parallel-to-SCSI controller, meaning a true SCSI bus&#xA;  implementation but without the electrical buffering circuits necessary&#xA;  for connecting other external devices. Early Zip 100 drives use an AIC&#xA;  7110 SCSI controller and later parallel drives (Zip Plus and Zip 250)&#xA;  used what was known as Iomega MatchMaker.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So it seems to make more sense to use the SCSI bus directly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I believe the drive in question is a Zip 100.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;More&lt;/strong&gt;: parallel port cards also exist, but apparently they may only support printers, not disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Again&lt;/strong&gt;: ideally I would want to connect it to a Raspberry Pi (or something along those lines), so neither parallel port on MB nor PCI would be optimal.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2018-06-01T15:33:12.317" LastActivityDate="2018-06-06T22:48:58.840" Title="Connecting Iomega Zip (parallel port) to modern PC" Tags="&lt;disk-drive&gt;&lt;old-hardware-adaptation&gt;&lt;driver&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6590" PostTypeId="2" ParentId="6588" CreationDate="2018-06-01T14:17:19.570" Score="8" Body="&lt;p&gt;RCS should work for you. I used it in the past. But, as you noticed, it's a rather primitive tool set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That can be mitigate a bit with some custom scripting, which is what I did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CVS, in fact, started essentially as a scripting layer on top of RCS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ended up having a script that worked on a single directory. As all code at the time was that way, this wasn't a big deal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, we'd have a large source tree representing everything. Back then, I had several modules of source code, each in their own directory (mind, these were essentially stand alone modules with little dependency on each other), and within each directory was an RCS directory (I forget what the name was, for some reason something with &quot;,v&quot; comes to mind, or .rcs) that managed the source code. Actually I think it was a .rcs directory, and files were stored in a ,v file. So hello.c was hello.c,v -- something like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I had scripts that would &quot;check in&quot; and &quot;check out&quot; &quot;everything&quot;. By everything, I mean my source code and build files. It wasn't so much &quot;check in *&quot; but more &quot;check in Makefile, *.this, *.that&quot;. Then there was similar some introspection in to the RCS dir as to what to check out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My use case was mostly as a versioned back up. We didn't do things like merges and branching and all that, RCS is really just a primitive versioned file system like construct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I had to recover things, it was all done by hand, cherry picking files, and what not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only concern is I can't say if the DOS .BAT files are robust enough to do everything that needs to be done. It's been some time (decades!) since I've done this, and it was on a UNIX system. If not, you might need to write some simple wrappers in Pascal or C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it was possible, it was workable, and helped save my bacon more than once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't contrast RCS and SCCS, it just seemed at the time that the consensus was RCS was better than SCCS, so that's what I used. It was certainly newer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should clarify RCS's behavior (yes, it's coming back to me now...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I recall, what RCS did is when you checked something in, it changed the files to &quot;read only&quot;, when you check it out, it made them writable. This is in contrast to SVN and GIT which don't (at least by default afaik) do this. But DOS doesn't really have this permissions capability, but I'm not sure if this will be a real issue or not. I don't recall RCS deleting the files on check in, it simply locked them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RCS may have too may unix-isms in it to really work well with DOS. You'd have to try it and see. But the takeaway from my experience was that it was a usable toolset with a little bit of scripting to make the day to day work well, and perhaps worth experimenting with to see if you can get it work for you. But go in with the expectations of what it really is, basically a versioned file system more so than a complete source code control solution.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="7493" LastEditDate="2018-06-01T14:22:29.177" LastActivityDate="2018-06-01T14:22:29.177" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6591" PostTypeId="2" ParentId="6588" CreationDate="2018-06-01T14:27:06.093" Score="3" Body="&lt;p&gt;Not really fancy, but back in the days, I just zipped (*1) all source directories whenever I did any build that got handed to other developers/test users or when a release was due. It was done by a little script, that also incremented the build number and moved the archive onto a separate directory for backup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other scripts could compare two archives (or the last and the actual source tree) to find changed files or do a diff on a specific file. Without parameters, the actual tree and the last build was used, with one parameter that build archive and its predecessor, with two these too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since source files tend to be all text (with a lot of redundancies), the resulting archives where, even for large programms, small enough to fit a single floppy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe such a low-level approach could be a good start?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Or more correctly, I LHARC'ed it, as that was the tool I used back then.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-06-01T22:20:07.477" LastActivityDate="2018-06-01T22:20:07.477" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6592" PostTypeId="2" ParentId="6589" CreationDate="2018-06-01T16:45:28.490" Score="-1" Body="&lt;p&gt;Connecting the drive is easy, a parallel port is easy to add.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But getting it to work is probably not practical, because you need the proprietary device driver that knew how to interact with the drive, and that driver probably expected a legacy parallel port at the legacy I/O addresses.  So it probably wouldn't work using, say, a USB-to-parallel adapter.  But there's no harm in trying, so give it a shot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that there were Zip drives made that were Parallel/SCSI dual-mode, I believe they came with 2 cables or an auto-sensing cable so you could connect it to a parallel port on a PC, or a DB-25 SCSI port on a PC or a Mac.  If you can get your hands on one of these it will be much easier to get it working because in SCSI mode it should be much easier to get it working with modern SCSI adapters.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-06-01T16:45:28.490" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6593" PostTypeId="2" ParentId="6589" CreationDate="2018-06-01T17:01:53.253" Score="2" Body="&lt;p&gt;The easiest way to &quot;add&quot; a vintage storage device to a modern PC may be to acquire an old PC with which the device can communicate easily and then add a networking adapter that can allow the old PC to exchange information with the new PC.  I haven't followed the evolution of networking protocols well enough to know which protocols would be supported by both old new equipment, but I think there were PC implementations of NFS which should allow the old system to behave as a file server the new system could access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have something like a SCSI ZIP drive which would have been designed to operate smoothly with multiple SCSI-based computers, a USB-to-SCSI adapter may allow it to work smoothly.  The old-PC-as-server approach, however, should be adaptable to storage devices that use hardware in weird and exotic ways that newer systems can't emulate accurately.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-06-01T17:01:53.253" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6594" PostTypeId="1" AcceptedAnswerId="7053" CreationDate="2018-06-01T17:18:10.880" Score="10" ViewCount="698" Body="&lt;p&gt;There's an &lt;a href=&quot;https://en.wikipedia.org/wiki/Microprofessor_II&quot; rel=&quot;noreferrer&quot;&gt;Apple II clone from Taiwan&lt;/a&gt; which apparently forgoes the text mode and just has a graphics mode because it's simpler that way to render Chinese writing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It had a 16K ROM, of which 12K is a BASIC interpreter, which leaves 4K for whatever else. How did those 4K accommodate a Chinese font on top of whatever else it needed to do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I have the idea it might've done some kind of compression, for example 說, 話 and 語 all have identical left-hand sides. Hard to say if that's worth doing though.)&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-07-18T17:56:49.040" Title="How did the Microprofessor II have space for a Chinese font in the ROM?" Tags="&lt;apple-ii&gt;&lt;font&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6595" PostTypeId="2" ParentId="6588" CreationDate="2018-06-01T17:54:02.407" Score="6" Body="&lt;p&gt;The &lt;a href=&quot;https://www.cs.purdue.edu/homes/trinkle/RCShome/&quot; rel=&quot;noreferrer&quot;&gt;Official RCS Homepage&lt;/a&gt; has rcs binaries for DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;ci -l&lt;/code&gt; is the way to keep the source file around. As you can only change one file at a time under DOS, the RCS process works rather well.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-06-01T17:54:02.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6596" PostTypeId="2" ParentId="6540" CreationDate="2018-06-01T18:11:07.507" Score="1" Body="&lt;p&gt;The cause of this change is the fact that you are using the 't' command to step through instructions.  That command makes use of a CPU interrupt to regain control after the instruction completes.  That interrupt stores state on the stack before transferring control to the interrupt handler.  The state on the stack is what you are seeing.&lt;/p&gt;&#xA;" OwnerUserId="4476" LastActivityDate="2018-06-01T18:11:07.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6597" PostTypeId="2" ParentId="6594" CreationDate="2018-06-01T19:31:00.897" Score="4" Body="&lt;p&gt;The Wikipedia page on '&lt;a href=&quot;https://en.wikipedia.org/wiki/Chinese_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chinese BASIC&lt;/a&gt;' (which cites the Multitech Microprofessor as the article's most prominent example) depicts a traditional Chinese keyboard of the time, showing only 113 Chinese symbols on offer, plus 68 you'd expect on an English keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even at 32 bytes per symbol (i.e. 14x16 pixels on an Apple II if there's no reprocessing in between) I make that only 3,616 bytes for the Chinese symbols. If you used 28 bytes per symbol (i.e. 14x16 with the expectation of unpacking during drawing) then that's only 3,164 bytes, leaving more than enough space for the western 68 at 7x8 without overflowing 4kb.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The article mentions that all of the radicals of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cangjie_input_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cangjie input method&lt;/a&gt; are represented so I guess another way around of looking at it is that there was some kind of compression at play, but it's the sort that requires the human to map between characters and components.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-06-01T19:31:00.897" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6598" PostTypeId="1" CreationDate="2018-06-02T00:00:05.163" Score="4" ViewCount="378" Body="&lt;p&gt;I've found some code for reading an old image format, and I'm trying to figure out what format it is.  Attributes of the file format I've deduced from reading the code:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The image file begins with a two-byte header.  The first byte is one-eighth the image width, and the second byte is one-sixth the image height.&lt;/li&gt;&#xA;&lt;li&gt;It's a black-and-white format, one bit per pixel.&lt;/li&gt;&#xA;&lt;li&gt;Pixel data is run-length encoded: if the high bit of a byte is set, the low seven bits are a count of the number of times the next byte in the file should be repeated.  If the high bit is clear, the byte is interpreted literally.  Encoded pixel runs don't extend across rows of data.&lt;/li&gt;&#xA;&lt;li&gt;Possibly the most telling aspect of this format: each decoded byte represents &lt;em&gt;six vertical pixels&lt;/em&gt; with the low bit being the topmost pixel, while successive bytes represent horizontally-adjacent stacks.  Essentially, it's a vertical &quot;mini-raster-scan&quot; superimposed on top of the traditional horizontal raster scan.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Other, possibly relevant facts:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The format is called &quot;OO&quot; or &quot;OOFormat&quot; internally.&lt;/li&gt;&#xA;&lt;li&gt;Given the dates in the code comments, the format probably pre-dates 1996.&lt;/li&gt;&#xA;&lt;li&gt;The programmer who wrote the image-reading code considered an image more than 640 pixels wide or 600 pixels high to be &quot;unreasonable&quot;, and attempting to read larger images returns an error.&lt;/li&gt;&#xA;&lt;li&gt;Function names hint that this might be some sort of screen-dump format.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4" LastActivityDate="2018-06-02T05:07:35.930" Title="Identifying an old one-bit image file format" Tags="&lt;graphics&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6599" PostTypeId="2" ParentId="6589" CreationDate="2018-06-02T01:19:24.657" Score="6" Body="&lt;p&gt;If you're using Linux, there is &lt;a href=&quot;https://www.tldp.org/HOWTO/ZIP-Drive-4.html&quot; rel=&quot;noreferrer&quot;&gt;kernel support for the parallel ZIP disk&lt;/a&gt;, at least on Intel architectures; if you're willing to play with the dependencies, it might even be possible to compile the drivers on non-Intel architectures, but I make no guarantees! You'll need to enable the following drivers in &lt;code&gt;Device Drivers&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;parport_pc&lt;/code&gt; (under &lt;code&gt;Parallel port support&lt;/code&gt;&gt;&lt;code&gt;PC-style hardware&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;After enabling that, you'll see two drivers in &lt;code&gt;SCSI device support&lt;/code&gt;&gt;&lt;code&gt;SCSI low-level drivers&lt;/code&gt;:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&quot;IOMEGA parallel port (ppa - older drives)&quot;&lt;/li&gt;&#xA;&lt;li&gt;&quot;IOMEGA parallel port (imm - newer drives)&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In theory, that should be sufficient to get you access, but I'm not certain if a USB parallel port will work for this (glancing at the code, as long as the driver looks like a parallel port it should work.) The &lt;code&gt;ppa&lt;/code&gt; driver is for the original ZIP100, and &lt;code&gt;imm&lt;/code&gt; is for the ZIP Plus.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2018-06-02T01:19:24.657" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6600" PostTypeId="2" ParentId="6598" CreationDate="2018-06-02T04:10:11.990" Score="5" Body="&lt;p&gt;What you have there, sir, is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sixel&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sixel&lt;/a&gt; format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, actually you don't. Maybe you don't. But it sounds very close, as it was RLE as well, but not flagged with the hi-bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was designed as a format that could be transmitted over 7-bit ASCII and used by DEC terminals and printers.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="7813" LastEditDate="2018-06-02T05:07:35.930" LastActivityDate="2018-06-02T05:07:35.930" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6601" PostTypeId="2" ParentId="6588" CreationDate="2018-06-02T07:08:44.837" Score="-2" Body="&lt;p&gt;git is so much better than was available back then, so don't use those except for nostalgia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you want to commit, mirror your sources to a machine new enough to run git and do it there.  &lt;/p&gt;&#xA;" OwnerUserId="447" LastActivityDate="2018-06-02T07:08:44.837" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6603" PostTypeId="1" AcceptedAnswerId="6607" CreationDate="2018-06-02T13:18:56.263" Score="17" ViewCount="3574" Body="&lt;p&gt;While not strictly adhered to, this is somewhat of a generalization of computer listings found in the more popular magazines of the time - BYTE, Kilobaud, PC Computing, etc. This explains the exclusion of other versions of Basic, Pascal, C, Turtle etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;What caused the demise of BASIC/BASICA as the &lt;strong&gt;primary front end&lt;/strong&gt; development language in the late 1980's?&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2018-06-03T00:09:31.093" LastActivityDate="2019-04-29T10:54:43.480" Title="What caused the demise of BASIC/BASICA in the late 1980's?" Tags="&lt;basic&gt;&lt;software-development&gt;" AnswerCount="9" CommentCount="10" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6604" PostTypeId="2" ParentId="6603" CreationDate="2018-06-02T14:04:39.720" Score="8" Body="&lt;p&gt;As BASICA only lived on ROM, to be pedantic, GW-BASIC superseded it firstly. a Básica binary implementation which was used in PC clones and eventually in all PC compatibles, IBM or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides BASIC falling somewhat out of fashion with the development in capabilities of home computers, in the PC environment, the Borland utilities with their compilation speed and integrated IDE and single-step debugger where a major reason for people to start migrating to Pascal and C. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The speed,  and memory limits of the implementation itself, limiting itself to 64KB (can be wrong) also proved quite early a very damning shortcoming, and another reason to migrate to C or Pascal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The GW-BASIC implementation, also not being that modular, and not encompassing new modules for integrating graphical and sound hardware support for new hardware, also provided yet another reason to not develop more modern software on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also serious shortcomings in the language itself, such as weak file manipulation operations, non-existent database handling directives, weak input and error handling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also say that the strong Unix/Mainframes influence  also tipped the scales on the adoption of other languages as C or Cobol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally advancements in the computer science field also favoured other methods and techniques of programming that such as code abstraction and code reuse. Besides, programming in BASIC was not considered cool anymore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS. I would say BASIC demise however started in the mids 1980s. I am however partially suspect, as I had my first introduction to Unix somewhere around '87 and started working as a professional C and assembly programmer with Microsoft C compiler in 1988.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS2 I remember vaguely that, ignoring code quality, there were some issues with licenses that prevented GW-BASIC from being updated. Unfortunately did not find anything in Google. &lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2019-04-28T14:12:40.007" LastActivityDate="2019-04-28T14:12:40.007" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6605" PostTypeId="2" ParentId="6603" CreationDate="2018-06-02T14:07:35.743" Score="18" Body="&lt;p&gt;In my view, QuickBASIC caused the demise of GW-BASIC/BASIC(A). Microsoft had essentially ceased further development of GW-BASIC when they changed their focus to compiled BASIC in the mid-1980's: note that GW-BASIC never got VGA support, and Microsoft replaced it with QBASIC (a stripped-down version of QuickBASIC with just the interpreter) in MS-DOS 5+.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to why QBASIC became more popular, I can think of several reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The editor was far superior in every way (at least I thought so!)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The requirement for line numbers was removed: you didn't have to RENUM your program every time you made changes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Functions and subroutines became first-class citizens, with formal parameters and less of an &lt;em&gt;ad hoc&lt;/em&gt; feel to them.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Variables didn't require type characters for non-integers, and structures were introduced and arrays could change their starting index.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Flow control was completely overhauled, allowing for more than GOTO, FOR..NEXT, and WHILE..WEND.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Has BASIC died out since? Not really. QuickBASIC became Visual Basic, VBA and VB.NET: the last two are still in common use today.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2018-06-02T14:07:35.743" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6606" PostTypeId="1" CreationDate="2018-06-02T17:24:04.360" Score="9" ViewCount="693" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/X86_memory_segmentation&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia page on &lt;em&gt;X86 Memory Segmentation&lt;/em&gt;&lt;/a&gt; says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In real mode, the registers &lt;code&gt;CS&lt;/code&gt;, &lt;code&gt;DS&lt;/code&gt;, &lt;code&gt;SS&lt;/code&gt;, and &lt;code&gt;ES&lt;/code&gt; point to the currently used program code segment (&lt;code&gt;CS&lt;/code&gt;), the current data segment (&lt;code&gt;DS&lt;/code&gt;), the current stack segment (&lt;code&gt;SS&lt;/code&gt;), and one extra segment determined by the programmer (&lt;code&gt;ES&lt;/code&gt;). The Intel 80386, introduced in 1985, adds two additional segment registers, &lt;code&gt;FS&lt;/code&gt; and &lt;code&gt;GS&lt;/code&gt;, with no specific uses defined by the hardware.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Was there any technical or social reason to chose &lt;code&gt;FS&lt;/code&gt;/&lt;code&gt;GS&lt;/code&gt;/&lt;code&gt;ES&lt;/code&gt;? Was there a convention with regard to any of these?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="8579" LastEditDate="2018-06-02T17:31:09.610" LastActivityDate="2020-03-22T18:15:35.050" Title="Is there any reason to chose ES, FS, or GS over the others in real mode?" Tags="&lt;memory&gt;&lt;intel&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6607" PostTypeId="2" ParentId="6603" CreationDate="2018-06-02T18:00:45.537" Score="38" Body="&lt;p&gt;In my view, the brief popularity of BASIC in the 1980s is directly related to the popularity of Javascript today - Simply, it's the Runtime that is Everywhere. That is what BASIC was back then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the home computer revolution of the 1980s, every new system had to at least have a viable claim to be useful for something in terms of software. By providing a BASIC run-time in the firmware, the early home computers were instantly programmable and had access to a large body of relatively portable software previously written in BASIC. This made the machines exceptionally useful for hobbyists and budding programmers, and marginally useful for everyone else. If the machine gained a decent market share, then more professional software would follow and the reliance on BASIC would slowly fade, but it was an essential ingredient for the early adopters of the new hardware. Likewise, imagine how little market share a new web browser could hope to attain without Javascript support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As things progressed through the 1980s, the reliance on a built-in BASIC run-time for compatibility with existing software turned to reliance on IBM PC compatibility. The new question wasn't whether the new machine supports BASIC; rather, whether it was &quot;PC Compatible&quot; or not. Hobbyists became a much smaller segment of the market, and obtaining a run-time or development environment for a new machine became just another software choice.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-06-02T18:00:45.537" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6608" PostTypeId="2" ParentId="6606" CreationDate="2018-06-02T18:20:20.803" Score="10" Body="&lt;p&gt;TL;DR: &lt;strong&gt;No&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;By default all memory addresses are within DS. Exceptions are the destination addresses of STOSx/MOVSx and CMPSx where ES is used (*1). DS can be replaced by any other segment register in all instructions by adding a segment override prefix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So with the exception of ES when it comes to string destination segment any segment can be used (overwritten) at cost of an additional instruction byte. Which segment register to be used when leaving the default is rather arbitrary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The introduction of FS/GS eased the need to reload segment registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding one segment (FS) eased A=B+C type operations where each of the components resides in a separate segment, like when doing large amounts of data (tables), without constant reloading of segment registers. After all, each load needs not only to load all segment information, but also runs necessary privilege checks. It still requires reloading of DS after such sections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding a two (FS&amp;amp;GS) even removed that restriction, allowing a program to hold three arbitrary data segments in addition to Code, Programm Data and Stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Fire at Will&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - And then there are all addressing modes with BP and SP,as they are calculated with SS as base value - after all, BP is the stack frame pointer.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-22T18:15:35.050" LastActivityDate="2020-03-22T18:15:35.050" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="6609" PostTypeId="2" ParentId="6588" CreationDate="2018-06-02T18:25:41.383" Score="-2" Body="&lt;ol&gt;&#xA;&lt;li&gt;All source code revision control systems before 'git' sucked to various degrees.&lt;/li&gt;&#xA;&lt;li&gt;You are going to find many faults with the limited compatible choices.&lt;/li&gt;&#xA;&lt;li&gt;So, your best bet, by far, is to just &quot;roll your own&quot; simple, scripted process.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Roll your own is the way to go. When you break it down to the essentials, probably you can get by with a master and a dev &quot;branch&quot;, and &quot;tagging&quot; of checkpoint releases. So, I would create a master directory and a separate dev directory, and a script for &quot;merging&quot; dev into master. I would also create a way of affixing &quot;tags&quot; with a script that just creates an archive of the code in the working directory in a separate location and with appropriate file naming to identify the &quot;tag&quot;. 3 directories (master, dev, archive/tagged) and a couple simple batch files should do quite nicely, IMO.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-06-02T18:40:35.250" LastActivityDate="2018-06-02T18:40:35.250" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6610" PostTypeId="1" AcceptedAnswerId="6613" CreationDate="2018-06-02T20:58:00.013" Score="9" ViewCount="891" Body="&lt;p&gt;I have a partly-written emulation program for the 8086 CPU. And I'm not sure how to go about adding I/O capabilities to it. The emulator implements a subset of the 8086 instruction set described &lt;a href=&quot;https://codegolf.stackexchange.com/questions/4732/emulate-an-intel-8086-cpu&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I plan to implement bios routines for character I/O in &lt;code&gt;int 10&lt;/code&gt; and &lt;code&gt;int 16&lt;/code&gt;. But then I realized that the bios code is still just machine code, so I'll still need some extra step to peek outside of the VM and call &quot;host&quot; functions like &lt;code&gt;putchar()&lt;/code&gt; and &lt;code&gt;getchar()&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two option that occur to me are to use the &lt;code&gt;in&lt;/code&gt; and &lt;code&gt;out&lt;/code&gt; instructions and then implementation of those opcodes can do the file I/O; -or- I think I could use the &lt;code&gt;esc&lt;/code&gt; instructions and have a sort of &quot;watchdog&quot; on the instruction stream, and the watchdog can call extra code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which of these would be less headache in moving forward to a full emulator that can run dos programs? Is there another, better way I haven't thought of?&lt;/p&gt;&#xA;" OwnerUserId="509" LastActivityDate="2020-10-05T19:50:00.130" Title="How to do I/O with emulation code?" Tags="&lt;emulation&gt;&lt;8086&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6611" PostTypeId="2" ParentId="6610" CreationDate="2018-06-02T21:26:59.463" Score="10" Body="&lt;p&gt;There are quite a number of possibilities that you can use when emulating a system. Note, for screen emulation, I would rather try to detect memory accesses to the frame buffer address of your emulated video adapter than looking into I/O commands.  Following are some general example approaches:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Patch the BIOS&lt;/strong&gt; (or, in general, any piece of guest code that accesses specific hardware) Replace instructions in strategic places with, for example, an invalid opcode - This can then be caught by the CPU emulation and can trap out into host code doing the host I/O. For this, you need to have pretty exact knowledge of your guest OS and/or BIOS. Note, when guest code by-passes the OS or BIOS, you won't catch that. Your emulator wll only be able to run &quot;well-behaved&quot; code.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Monitor memory/I/O access&lt;/strong&gt; in your CPU emulation. This is the simplest, but the slowest method. For any memory or I/O access in your CPU emulation, check the target address - If it goes into a specific hardware  areas (screen memory, for example), leave the emulation, try to find out what guest code tried to do and call appropriate host functions. This can be quite cumbersome, tends to clobber up your emulation code with tests for addresses, and will also slow down your emulation significantly. This is, however, the best method to handle I/O (&lt;code&gt;in&lt;/code&gt; and &lt;code&gt;out&lt;/code&gt; instructions)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;mprotect&lt;/strong&gt; (or, in general, protect specific areas in your emulated hardware memory as read-only or even &quot;no read, no write&quot;). For console I/O, you would normally &lt;code&gt;mprotect&lt;/code&gt; (or, on Windows, the equivalent &lt;code&gt;VirtualProtect&lt;/code&gt; function) the area used for screen memory (depending in your emulated video adapter, this would be 0xB0000, for example, for an MDA adapter)  - This will cause a trap in your host code as soon as your guest code tries to write to that memory. Write a trap handler (or, on Unix-like systems, a signal handler) that can then check what the guest code tried to do and call appropriate host I/O mechanisms.&#xA;This has the added advantage that your emulation can also follow if the client code by-passes the BIOS and directly accesses hardware or memory. This is maybe the most advanced function, as it can detect hardware accesses in arbitrary guest code just like (2), but with much less overhead for &quot;normal&quot; accesses.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-06-03T09:50:25.943" LastActivityDate="2018-06-03T09:50:25.943" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6612" PostTypeId="2" ParentId="6610" CreationDate="2018-06-02T21:27:09.647" Score="13" Body="&lt;p&gt;It really depends on what you’re planning on emulating. If you want a precise emulation of a PC (like &lt;a href=&quot;http://pcem-emulator.co.uk/&quot; rel=&quot;noreferrer&quot;&gt;PCem&lt;/a&gt;), you’ll need to emulate all the peripherals too, which moves the problem away from the CPU and its instruction stream. If you’re interested (perhaps even as an intermediate step) in emulating I/O from the CPU’s perspective, there are a number of ways to go about it. Since you’re looking into adding support for BIOS routines, one simple way is to provide a special interrupt which requests services from the emulator — &lt;a href=&quot;http://www.dosemu.org/&quot; rel=&quot;noreferrer&quot;&gt;DOSEMU&lt;/a&gt; does this for some services with its interrupt 0xE6.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However since your goal is to be able to run DOS programs, you’ll need to do more than implement the BIOS routines using escapes: many DOS programs access the hardware directly. That “only” involves port I/O or memory accesses (including DMA); you’d certainly need to deal with that for sound support, floppy support, serial/parallel port I/O, and video (since most DOS programs accessed the video segments directly rather than go through the BIOS). You’d then implement your BIOS services on top of that hardware support. The big exception you could simplify is hard drive access, since all DOS programs you’d reasonably want to run in an emulator went through the BIOS for that.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-06-02T21:27:09.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6613" PostTypeId="2" ParentId="6610" CreationDate="2018-06-02T22:18:55.000" Score="8" Body="&lt;p&gt;Not sure what the goal of your emulator is, but the most simple way is just to trap the &lt;code&gt;INT&lt;/code&gt; instruction itself. So whenever an &lt;code&gt;INT 10h&lt;/code&gt; comes up, don't emulate the &lt;code&gt;INT&lt;/code&gt; instruction, but rather let the emulator handle the request instead of some BIOS code (within the emulation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much the same way as a CP/M-86 emulation layer atop DOS works, or a CP/M-80 emulation layer for a V20/V30.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on what you intend to do, a hybrid aproach could be possible as well. Here 'hooking' is only done for some sub functions, while others are still handeled by the BIOS within the sandbox.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-06-02T22:18:55.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6614" PostTypeId="1" AcceptedAnswerId="6619" CreationDate="2018-06-03T12:16:28.577" Score="16" ViewCount="3221" Body="&lt;p&gt;I've read in various places that an incorrect signal of the wrong refresh rate can cause physical damage to a CRT monitor, but I've never found an adequate explanation of why this is so. Is this true? And if it is, how?&lt;/p&gt;&#xA;" OwnerUserId="3776" LastActivityDate="2018-08-16T18:37:36.110" Title="Can the wrong sync frequency really destroy a CRT monitor?" Tags="&lt;hardware&gt;&lt;video&gt;&lt;crt-monitor&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6615" PostTypeId="2" ParentId="6614" CreationDate="2018-06-03T13:27:14.917" Score="8" Body="&lt;p&gt;Magnetic coils (the coils that magnetically deflect the electron beam in a CRT) have an electric resistance which is a direct function of the frequency of the current flow. If that resistance is getting too low (because the coils and circuitry are operated at a different frequency they are intended for), either the circuitry that regulates the current through the coil or the coil itself can be damaged.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-06-03T13:27:14.917" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6616" PostTypeId="2" ParentId="5578" CreationDate="2018-06-03T13:45:55.993" Score="2" Body="&lt;p&gt;The 128K model (and its Amstrad made successors) did use a tokenizer in 128 Basic mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this mode, you had to type in the command lines in full text, then syntax checking was made upon line validation rather than on the fly as with 48 Basic, and if correct, then the line was tokenized, then either stored (if preceded by a line number) or executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So there actually WAS a tokenizer in Sinclair Basic. In 128K mode, involving an additional ROM bank.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, it meant an additonal step had to be added to analyze the syntax and translate keywords into tokens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The token part itslef was necessary anyway, for several reasons : 1) shorten up the code ; 2) accelerate programs execution, as the necessary translation part was done at typing time, not execution time ; 3) since a lookup table is always needed to associate each machine code subroutine to each keyword, matching them at typing time once and for all is another way to accelerate programs execution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, yes, tokenization is always a good idea. BTW, whan you wanted to add new keywords, you just had to trigger an error that led to running your own code, using the existing &quot;hook codes&quot; mechanism originally intended for the Interface 1 additional keywords (that were printed on the keyboard, but not actually present in ROM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were two common ways to do so : either alter some of the existing commands syntax, or adding new parameters or new peripheral types (such as MGT disc interfaces), or leading new keywords by a character that could be typed in &quot;K&quot; cursor mode, for instance any symbol-shifted one (an &quot;!&quot; was usually used a header character).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point was to trigger a syntax checking error, trap it and redirect the command to your own code, so it would have the system to accept the line when typing it, and run your own subroutine at runtime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course new commands this style weren't tokenized, so they occupied more space and had to be reinterpreted at runtime, thus being slower than built-in ones (though since this was all done in machine code, I doubt you could notice anything).&lt;/p&gt;&#xA;" OwnerUserId="8761" LastActivityDate="2018-06-03T13:45:55.993" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6617" PostTypeId="2" ParentId="6588" CreationDate="2018-06-03T14:33:11.290" Score="2" Body="&lt;p&gt;If you have access to a very old MSDN CD-ROM set, you might find Microsoft Delta, which was a MS-DOS source control system that I had to use in the early 90's, at a client site.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was not very good and had obviously &quot;escaped&quot; from Redmond as some kind of April Fool's joke, but due to an apparent lack of alternatives, was adopted by a major UK-based enterprise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It started as DOS command line, then went GUI for a while (just a wrapper). Luckily, MSFT bought SourceSafe, which was vastly better.&lt;/p&gt;&#xA;" OwnerUserId="7808" LastActivityDate="2018-06-03T14:33:11.290" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6618" PostTypeId="2" ParentId="6603" CreationDate="2018-06-03T16:45:28.597" Score="3" Body="&lt;p&gt;Another, perhaps less obvious reason, was the advent of the mouse. In most, if not all, variants of Basic (until Visual Basic), mouse routines were very cumbersome to write, and while there were a few &quot;libraries&quot; proposed, they were far from perfect.&lt;/p&gt;&#xA;" OwnerUserId="8763" LastActivityDate="2018-06-03T16:45:28.597" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6619" PostTypeId="2" ParentId="6614" CreationDate="2018-06-03T22:42:51.817" Score="18" Body="&lt;p&gt;Horizontal deflection circuit is intended to make linearly increasing current in the deflection coil. At the end of ray scanning from left to right, the deflection coil should be re-magnetized in a short time by applying higher reverse voltage to it. Typical schematics for the circuit looks like this: &lt;a href=&quot;http://repairfaq.cis.upenn.edu/sam/deflfaq.htm#dsbdc&quot; rel=&quot;noreferrer&quot;&gt;http://repairfaq.cis.upenn.edu/sam/deflfaq.htm#dsbdc&lt;/a&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;L2 is the deflection yoke and T2 is the flyback transformer, that is also usually used to get high voltage for the CRT anode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the linear ray moving, the switch is open and the constant voltage supply causes the current to raise linearly in both L2 and T2. When the switch closes, the magnetizing energy in the inductance of T2 with the help of the capacitor C1 makes a short resonant high voltage spike, that remagnetizes deflection coil L2 to the initial ray-to-the-left position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the too low horizontal frequency, the period the switch is open becomes too long, that causes the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt; The flyback transformer T2, that is usually made of ferrite core with a little gap, may get saturated. Once its ferrite core is saturated, it virtually disappears from the circuit, thus greatly reducing the inductance of the T2 winding. As a result, in a very short time the current gets unboundly high and it could damage the switch or the power supply.&lt;/ul&gt;&#xA;&#xA;&lt;ul&gt;Even if T2 is not getting saturated, still the voltage spike during switch off time may get too much (as it is determined by the energy absorbed in the inductance of T2 during the switch on time), thus breaking down the switch, the capacitor C1 or the snubber diode.&lt;/ul&gt;&#xA;&#xA;&lt;ul&gt;A third option is to saturate the switch (usually an NPN transistor), which would lead to emitter-collector voltage rise and then to excessive heat dissipation at the switch.&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This all could happen if the controlling circuit inside the monitor allows it to operate at the inappropriate frequencies. This might happen on older (and simpler) CRT monitors.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2018-06-05T18:46:07.693" LastActivityDate="2018-06-05T18:46:07.693" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6620" PostTypeId="1" AcceptedAnswerId="6621" CreationDate="2018-06-04T02:06:28.260" Score="16" ViewCount="5988" Body="&lt;p&gt;Early computers of the 'all in one' form factors, such as the Commodore PET, the early IBM microcomputers and later models of the TRS-80, as well as the 'box' form factors such as the Altair, used a metal case; this continued through the IBM PC and all the clones thereof to the present day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, most early computers of the 'CPU in keyboard' form factor, such as the Apple II, Sinclair Spectrum and Commodore machines from the Vic-20 on, used plastic cases. (The one exception I can recall being the Atari 800.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A metal case is more robust, conducts heat better and acts as an RF shield. I'm given to understand it is also slightly cheaper. (I've seen a figure of $300,000 quoted for the injection molds for a plastic case in the late seventies, and that was a time when interest rates were much higher than they are today.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given all those advantages of a metal case, why did so many computers use a plastic case? I could put Apple down to Steve Jobs having strong aesthetic tastes that greatly differed from mine, but Jack Tramiel and Clive Sinclair were pragmatists; I would expect them to go with a plastic case only if it had cost or other practical advantages.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-07-16T01:14:10.763" Title="Why plastic cases?" Tags="&lt;hardware&gt;&lt;history&gt;&lt;case&gt;&lt;cost&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6621" PostTypeId="2" ParentId="6620" CreationDate="2018-06-04T03:18:01.353" Score="33" Body="&lt;p&gt;Cost, both in manufacturing and design. The basic metal cases are simply that -- basic. Even modern PC cases are pretty simplistic being a metal box, with a plastic facade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For home computers of the time, they're essentially self contained unit with &quot;no user serviceable parts inside&quot;. They were not designed to be opened by the consumer, instead having facilities to promote external expansion. Since they're not designed to be opened and closed, plastic is a perfect material.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, the Apple II was an exception to this, having a case designed to be opened. But it was in stark contrast to most everything else until the IBM PC showed up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With plastic, they were able to get not just &lt;strong&gt;lower per unit manufacturing costs&lt;/strong&gt;, but more interesting and consumer appealing case designs. With rounded shapes, acute angles, etc. Most certainly not a &quot;box&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These more aesthetic designs are much easier to create in plastic compared to metal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While injection molds are indeed expensive to make, the individual unit costs are vastly lower both from a material cost and a labor cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;10 billions McDonalds Happy Meal toys can't be wrong. The C64, Atari, and Apple computers sold in the millions of units. Easily enough to absorb the start up tooling costs of crafting injection molds.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="1989" LastEditDate="2019-02-15T23:09:24.493" LastActivityDate="2019-02-15T23:09:24.493" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6622" PostTypeId="2" ParentId="6603" CreationDate="2018-06-04T04:12:15.737" Score="6" Body="&lt;p&gt;Performance and tooling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless you go back and actually try to work on era appropriate hardware (or emulators at era appropriate speed), it's hard to appreciate just how good BASIC was for developing software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers were just flat slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time, my friend and I were trying to write a game, similar to Rogue, on a PDP 11/70 running RSTS. We had already done a BASIC version, but ran out of memory, and so decided to try Pascal instead -- as it had a working memory much larger than BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We would go in on weekends, and take over 3 terminals in the college computer lab. One terminal was for the editor, as the size of the source code was large enough to where the editor started with the message &quot;Loading file slowly...&quot;. It took several minutes to get the editor loaded. So, as a rule, once loaded, we never exited, we simply just repeated saved the file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second one was for running and testing the program. The third one was for compiling the program. We were constantly changing and compiling the program. When the compiler finished, we'd clean up our changes, and immediately start it up again, and then start testing the version we had just built. The compile took significant clock time -- several minutes, 10+, of turn around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point, I'll mention how big the file was. The file was about 25K in size. 25,000 characters (50 &quot;blocks&quot;) of code, simply took forever to compile and link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Constrast that to some line changes in BASIC, and typing &quot;RUN&quot;. The development cycle in BASIC, back then, was far, far, superior to pretty much anything else. The development environment, being able edit code in place, to STOP the code, PRINT variables, CONTinue execution. Very powerful. In contrast to 10-15 minute turn arounds for &quot;simple&quot; programs. It's well worth the lack of execution performance to be able to write the code at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once, I tried to compile a C program on an Atari 800. The combination of the slow computer, glacial floppy drives, and C -&gt; ASM -&gt; Object -&gt; Executable development cycle made it just simply unusable. 4MHz Z80s running CP/M weren't any better. The drives and CPUs were still slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Turbo Pascal was a breakthrough. It's ability to do much of its work in memory, plus the lack of the &quot;link&quot; phase, simply crushed the competing development systems. Now I get compiler runtime performance for almost BASIC development turn around, and a better language to boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM PC offered faster CPUs, more memory, faster disk drives (or, even, &lt;em&gt;GASP&lt;/em&gt; hard drives). From there, the machines were able to support much better development environments for better languages, and the advantages of BASIC started to no longer outweigh the costs of it. Make no mistake, BASIC's warts are famous for a reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it should also be noted, that while that was happening on the personal computer market, there was a still a very large amount of BASIC development happening in the mini computer market. Alpha Micros, PICK System, BASIC Four. There were several BASICs for different operating systems. BASIC-PLUS on DEC systems was notable as being one of two languages that had first class support for DEC RMS, Record Management System, their database record and index system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For writing business applications, BASIC was very popular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then, of course, there was Visual BASIC, phenomenally successful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, simply, as the computers got more capable, the development systems, not just compilers, but debuggers, link editors, etc. become more usable for more people. To the point that the features of interpreted BASIC were no longer as valuable as they once were.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-06-04T04:12:15.737" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6623" PostTypeId="2" ParentId="6620" CreationDate="2018-06-04T04:34:34.360" Score="22" Body="&lt;p&gt;Injection molding has a costly tooling cost but very low per-unit costs. This makes it cheaper to build a large number of cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Metal cases have a lower tooling cost but higher per-unit cost. This makes it cheaper to build a small number of cases.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-06-04T04:34:34.360" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6624" PostTypeId="1" AcceptedAnswerId="6631" CreationDate="2018-06-04T04:42:18.787" Score="35" ViewCount="12409" Body="&lt;p&gt;The Commodore 64 has a cartridge slot, but by the mid-eighties, cartridge games disappeared; everything was on tape or disk. Why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One answer that suggests itself is that by that time, a larger percentage of owners had disk drives. However, that was less true in Europe, and in America, if you ask why Nintendo replaced Commodore, one of the reasons usually given is the speed and convenience of cartridges over the slow and clunky 1541 disk drive, so why was there not a preference for the speed and convenience of cartridges on the 64?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's true that cartridges cost more per unit to produce, but they also eliminate piracy; would this not offset the increased cost, from the vendor's viewpoint?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-23T18:44:47.443" Title="Why did Commodore 64 cartridge games disappear?" Tags="&lt;history&gt;&lt;commodore-64&gt;&lt;game-cartridge&gt;" AnswerCount="7" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6625" PostTypeId="2" ParentId="6624" CreationDate="2018-06-04T05:44:51.760" Score="37" Body="&lt;p&gt;A cartridge was limited to 16 kbytes ROM, and some were only 8k.  There would be plenty of RAM to use, but the code and data must fit into the 16 kbytes.  As programs became more sophisticated, the desire to make full use of the C64's sound, graphics, and sprites, ROM size would often be a limiting factor.  OTOH, a program loaded from disk (or for the patient, tape) could use two to three times what a cartridge offered for code and data.  Also, disks allowed for overlays and other memory to be overwritten dynamically.  Imagine an RPG -- when you leave once city or cave and enter another, you can replace the artwork and music with that of the new place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I never felt that cartridges &quot;died&quot;.  They were still fine for a lot of arcade style games, even using advanced SID techniques that were not known to early C64 developers.  But as you alluded, disks and tapes were less costly to produce.  Cartridges only had two advantages.  Programs would load quickly, and cartridge programs were more awkward to pirate.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2018-06-04T05:44:51.760" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6626" PostTypeId="2" ParentId="6614" CreationDate="2018-06-04T06:11:40.317" Score="4" Body="&lt;p&gt;I worked on a variety of CRT terminals and monitors (and converted the former to the latter), and never had one fry, with two exceptions: (1) IBM-PC monitors, and (2) Exact clones of IBM-PC monitors.  Everything else maybe made strange noises, but were never damaged.  So it was certainly possible to design horizontal scan circuits that didn't burn out their drive transistor when given improper signals, and most were like that.  Lots more fear, uncertainty and doubt than is really called for.  Still, this is my empirical data rather than any industry-wide truth.&lt;/p&gt;&#xA;" OwnerUserId="4919" LastActivityDate="2018-06-04T06:11:40.317" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6627" PostTypeId="2" ParentId="6624" CreationDate="2018-06-04T09:35:20.110" Score="23" Body="&lt;p&gt;In addition to RichF's answer, tapes were a lot cheaper than cartridges to manufacture. Tape duplication in the 80s was very low cost due to the high volumes involved, not least thanks to music distribution on the format.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-06-04T09:35:20.110" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6628" PostTypeId="1" CreationDate="2018-06-04T10:15:58.877" Score="1" ViewCount="321" Body="&lt;p&gt;I was recapping my zx spectrum when after just replacing one specific capacitor it stopped working as before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The picture has multiple horizontal lines over the entire display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is especially noticable with yellow, cyan and magenta as they show the 2 colour that make each up repectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know how this problem can be solved?&lt;/p&gt;&#xA;" OwnerUserId="8770" LastActivityDate="2018-07-04T13:57:37.740" Title="ZX Spectrum fault" Tags="&lt;zx-spectrum&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6629" PostTypeId="2" ParentId="6603" CreationDate="2018-06-04T13:45:10.240" Score="3" Body="&lt;p&gt;I'm surprised that nobody seems to have mentioned Microsoft's BASIC compilers other than QuickBASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I started coding professionally straight out of college in 1982, we use Microsoft's BASIC compiler which was an absolutely no-frills version of BASIC.  The PC was out, but the company I worked for wrote a point-of-sale and inventory control system for a slew of computers, like the PC, but also other computers like Televideo, Zenith, NCR, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to say that first version of the compiler was 5.35 (how odd) and it was bare-bones, in that there was no CLS, or LOCATE, etc.  We wrote a separate set of includes or linked object files that would handle each computers specific commands to do things like clear screen, locate the cursor, etc., even if that meant resorting to ANSI.SYS sequences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think Microsoft first created a professional compiler (BASCOM) for the IBM PC around that time, but we could not use it because we needed to be able to work on multiple machines.  I wound up using that version whenever I changed jobs (for the next 30 years that same new employer) that was using the IBM version of the compiler.  I want to say it was version 1.0 but I can't be sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do remember a few years later Microsoft releasing their 6.0 version and I believe that's when they changed the name to Professional Development System (PDS) Basic 6.0, then later 7.0, and finally 7.1 which believe it or not I still use today on my 64-bit Windows 10 machine for the same code, accounting software, which was originally written for interpretive BASIC on a TRS-80 and ported to the PC before I came on board to be the sole programmer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I inherited the code in 2010 when the owner retired, and I had written a Windows version of our accounting system in 2005 (we were late to the game) but I still to this day have a handful of customers who continue to use the DOS BASIC version of my software, simply because it works and they're comfortable with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my case, BASIC was the predominant language I used.  I wrote lots of routines in assembler for speed (pop-up windows for browsing in DOS, etc.) and I had all the mostly dead languages I learned in college: COBOL, RPG, etc., and I learned PASCAL and wrote a commercial app in Turbo Pascal, and dabbled with C, but until 2015 I was pretty much exclusively BASIC. Not something one tends to brag about among his peers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've since taken on a full-time job in QA writing test automation and have learned (and love) Java, but I continue to support my DOS and Windows customers part-time with their accounting and other applications I've written through the years.&lt;/p&gt;&#xA;" OwnerUserId="5094" LastActivityDate="2018-06-04T13:45:10.240" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6630" PostTypeId="2" ParentId="6628" CreationDate="2018-06-04T13:47:56.490" Score="2" Body="&lt;p&gt;If this is what is displayed when the Spectrum is powered up, then it could be showing a memory problem. Without more information, it is not easy to say.&lt;/p&gt;&#xA;" OwnerUserId="7470" LastActivityDate="2018-06-04T13:47:56.490" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6631" PostTypeId="2" ParentId="6624" CreationDate="2018-06-04T13:50:08.403" Score="52" Body="&lt;p&gt;Time to market was another factor.   I worked in the games industry in the 1980s and when we were getting the final game from the developer, mastering to cassette and disk took just hours before they went into production and (typically leading up to Christmas) they were in the shops just 48 hours later.&lt;/p&gt;&#xA;&lt;p&gt;Often there would be a bug found and disks would be re-written with the new version and again in to the shops 48 hours later.&lt;/p&gt;&#xA;&lt;p&gt;Cartridge production had lead times of 12-16 &lt;strong&gt;weeks&lt;/strong&gt;.  Once you had a cartridge, it was a lot of money tied up in inventory that couldn't be reused or changed in the event of a bug being found.&lt;/p&gt;&#xA;" OwnerUserId="8773" LastEditorUserId="15334" LastEditDate="2021-01-23T18:44:47.443" LastActivityDate="2021-01-23T18:44:47.443" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6632" PostTypeId="2" ParentId="6624" CreationDate="2018-06-04T15:11:13.783" Score="17" Body="&lt;p&gt;I know you specifically asked about cartridge &quot;games&quot;. But another important factor in the market forces surrounding this was that the cartridge slot was ALSO the one &quot;expansion&quot; slot - A very limited resource on the C64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As users and the market became more mature, there were many other uses for the cartridge/expansion slot, and these became competition for the limited resource. The most notable use-case being the Kernal firmware upgrades like the Epyx Fast Load cartridge, and all the copycats that followed. But there were also many I/O interfaces, memory expanders, &quot;Freezers&quot;, and even high-speed disk interfaces competing for the same slot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is true that you could easily plug/unplug the various cartridges if you wanted to maintain access to some library of cartridge games too. And some people did this until it became widely known that the wear-and-tear on the slot was a common source of hardware failure. SO this practice fell out-of-favor fairly quickly.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-06-04T15:11:13.783" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6633" PostTypeId="2" ParentId="6624" CreationDate="2018-06-04T15:45:07.960" Score="3" Body="&lt;p&gt;I used multiple Commodore 64s in the past, and I do not remember any of them ever having a cartridge slot. If any of them did, I never noticed them nor used them, and nobody I knew ever even mentioned anything about cartridges on their C64s. Though it's possible I (and others) somehow completely overlooked a cartridge slot, I don't think we had them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of our gaming on the C64 was done on floppy disks. We had piles of them laying around, and we could even easily make our own. In fact, making my own games for the C64 was what got me into software engineering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So...&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Not everyone could use cartridge slots (even if only because they didn't &lt;em&gt;know&lt;/em&gt; they had one). Even if they all did have the slot, the tech will die if people don't know they have it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Indy game development (a.k.a: &quot;backyard&quot;, &quot;garage&quot;, or &quot;home brew&quot; game development) was a huge thing for the C64, so many game developers needed to be able to easily write to their medium and to have people copy it around, meaning floppies were used and not cartridges.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Also note that the trend seems to be the use of the cheapest media that is simple to mass produce. New releases these days are hopefully targeting millions of copies sold, so burning cheap optical discs for a penny or less each instead of paying a quarter or a dollar per cartridge (not sure how much it costs to mass produce them) can save a company millions of dollars. Though the dynamics were slightly different back then, the same principle likely applies.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I think my first point might be a lynch-pin though. If you ask people &quot;Why aren't you using a sprocket?&quot; and the response is &quot;Sprocket? What sprocket?&quot; then that does not bode well for you.&lt;/p&gt;&#xA;" OwnerUserId="5300" LastEditorUserId="5300" LastEditDate="2018-06-05T18:26:16.683" LastActivityDate="2018-06-05T18:26:16.683" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="6635" PostTypeId="2" ParentId="6624" CreationDate="2018-06-04T17:25:49.937" Score="4" Body="&lt;p&gt;Had it in about 1983 I think and I saw just one cartridge: &lt;a href=&quot;https://www.youtube.com/watch?v=q_sGBlox4fs&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jaw Breaker&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was really beginning games for c64; after few time, me and my friends immediately went for tape; slower, bigger, but with better titles. First one I've got (after frying power charger and a month delay) was an adventure game whose name I don't remember who took some 30+ minutes to load from tape... Initially it was worth the while, what a magic when you could type some &quot;go west&quot; commands while listening to auld lang syne and some eerie blotchy graphics painted...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway that doesn't in turn last for long as 1541 came in. In the beginning it was deadly slow it too but didn't care, I had been scrapping here and there just for buying it on the precise purpose of playing &lt;a href=&quot;https://www.youtube.com/watch?v=ivHFP3dJAkM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Impossible Mission&lt;/a&gt;, with all that luxury graphics and synthesized vocals and wonderful gameplay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a while, turbo loader for 1541 came in and everything went faster. No need to wait long times anymore. All this really happened in no more than 2 years I think, maybe less.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, the only other cartridge which I know of was a trap called &lt;a href=&quot;http://rr.c64.org/wiki/ISEPIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Isepic&lt;/a&gt;, but that's a different one, you know... Anyway it plugged in the cartridge port where you could lock a couple pin and force system restart... In then end the same system cartridge games used to autostart...&lt;/p&gt;&#xA;" OwnerUserId="8778" LastEditorUserId="4838" LastEditDate="2018-06-05T03:45:34.377" LastActivityDate="2018-06-05T03:45:34.377" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6636" PostTypeId="2" ParentId="6624" CreationDate="2018-06-04T19:31:40.543" Score="5" Body="&lt;p&gt;In my experience the cartridge port (AKA expansion slot) of a C64 was problematic by design. If you look at a schematic of the 64, there is no buffering of any kind between the port and everything else on the bus - particularly the notoriously static-sensitive MOS chips at the heart of the system (e.g. the 6510 CPU). Perhaps this (and the product costs associated with cartridges) had some influence on the drive to use floppies and tape versus masked ROMs.&lt;/p&gt;&#xA;" OwnerUserId="8781" LastActivityDate="2018-06-04T19:31:40.543" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6637" PostTypeId="1" AcceptedAnswerId="6644" CreationDate="2018-06-04T20:23:22.623" Score="21" ViewCount="1244" Body="&lt;p&gt;I've been puzzled by this for a while now. The (very old) game Phantasie comes with three small TSRs that are run prior to running the main game executable. This is the content of the file PH.BAT, used to start the game:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@echo off&#xA;r32768.com&#xA;m1.com&#xA;m2.com&#xA;phantasi.exe&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you try running phantasi.exe directly, the game refuses to run, and you immediately go right back to the command prompt. These programs that run first are extremely tiny; M1.COM and M2.COM are both 44 bytes, and R32768.COM is 86 bytes. I did a quick and dirty disassembly with DEBUG.EXE. Below is the source code for each, along with my interpretations, which could be incorrect (I'm not an 8086 assembly expert).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;M1.COM&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    CLI&#xA;    SUB AX,AX&#xA;    MOV ES,AX&#xA;    ES:&#xA;    MOV AX,[0188]&#xA;    CMP AX,49A7&#xA;    JZ  lbl_011A&#xA;    ES:&#xA;    MOV AX,[018A]&#xA;    CMP AX,49A7&#xA;    JZ  lbl_011A&#xA;    STI&#xA;    INT 20&#xA;lbl_011A:&#xA;    ES:&#xA;    MOV WORD PTR [0188],0000&#xA;    ES:&#xA;    MOV [018A],CS&#xA;    STI&#xA;    MOV DX,84D8&#xA;    INT 27&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This seems to disable interrupts, check if 0000:0188 = 49A7h or 0000:018A = 49A7h, and if neither one matches, it enables interrupts and quits back to DOS. Then, it stores 0 into 0000:0188, stores the current CS register value into 0000:018A, enables interrupts, and tells DOS it wants to terminate and stay resident, occupying memory through CS:84D8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;M2.COM&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    CLI&#xA;    SUB AX,AX&#xA;    MOV ES,AX&#xA;    ES:&#xA;    MOV AX,[018C]&#xA;    CMP AX,49A8&#xA;    JZ  lbl_011A&#xA;    ES:&#xA;    MOV AX,[018E]&#xA;    CMP AX,49A8&#xA;    JZ  lbl_011A&#xA;    STI&#xA;    INT 20&#xA;lbl_011A:&#xA;    ES:&#xA;    MOV WORD PTR [018C],0000&#xA;    ES:&#xA;    MOV [018E],CS&#xA;    STI&#xA;    MOV DX,84D8&#xA;    INT 27&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Basically the same as M1.COM, but with different addresses/values. It checks if 0000:018C = 49A8h or 0000:018E = 49A8h, stores 0 in 0000:018C, copies CS to 0000:018E, and TSRs, also asking for memory through CS:84D8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;R32768.COM&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    CLI&#xA;    SUB AX,AX&#xA;    MOV ES,AX&#xA;    ES:&#xA;    MOV AX,[0180]&#xA;    CMP AX,49A6&#xA;    JNZ lbl_011A&#xA;    ES:&#xA;    MOV AX,[0182]&#xA;    CMP AX,49A6&#xA;    JNZ lbl_011A&#xA;    STI&#xA;    INT 20&#xA;lbl_011A:&#xA;    ES:&#xA;    MOV WORD PTR [0180],49A6&#xA;    ES:&#xA;    MOV WORD PTR [0182],49A6&#xA;    ES:&#xA;    MOV WORD PTR [0188],49A7&#xA;    ES:&#xA;    MOV WORD PTR [018A],49A7&#xA;    ES:&#xA;    MOV WORD PTR [018C],49A8&#xA;    ES:&#xA;    MOV WORD PTR [018E],49A8&#xA;    ES:&#xA;    MOV WORD PTR [0184],0000&#xA;    ES:&#xA;    MOV [0186],CS&#xA;    STI&#xA;    MOV DX,8000&#xA;    INT 27&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Disables interrupts, then checks if 0000:0180 and 0000:0182 both equal 49A6. If they do, it enables interrupts and exits (contrary to the previous two programs, which quit if &lt;em&gt;neither&lt;/em&gt; one matches the test values). Then it writes 16 bytes starting at the locations 0000:0180 (notice that 0000:0184-0187 are written out of order, and 0000:0186 gets a copy of CS rather than the previous constant). Once finished, it TSRs, and reserves memory up through CS:8000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems like they're rewriting the interrupt vector table starting at around int 60h, but I can't really figure out what they're meant to accomplish.&lt;/p&gt;&#xA;" OwnerUserId="4459" LastActivityDate="2020-09-17T13:07:43.800" Title="What are these tiny TSRs doing?" Tags="&lt;ms-dos&gt;&lt;assembly&gt;&lt;8086&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6638" PostTypeId="2" ParentId="6614" CreationDate="2018-06-04T22:36:21.310" Score="11" Body="&lt;p&gt;I've witnessed a monochrome monitor (actually, two of them) fried through software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I worked with a friend who had a weak grasp of ethics.  He worked on an IBM PC/AT clone running DOS.  It had both a regular CGA card driving a color CRT, and a &lt;a href=&quot;https://en.wikipedia.org/wiki/Hercules_Graphics_Card&quot; rel=&quot;noreferrer&quot;&gt;Hercules card&lt;/a&gt; driving a monochrome CRT.  I no longer recall why he had an extra monitor; I can only guess that it was a useful setup for debugging, since he could have the program's output shown on one screen, and debugging output shown on the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My friend had written a small &lt;a href=&quot;https://en.wikipedia.org/wiki/Terminate_and_stay_resident_program&quot; rel=&quot;noreferrer&quot;&gt;TSR&lt;/a&gt;  (Terminate and Stay Resident) program that would, on demand, capture the contents of a text screen to memory, and then recall that screen using a hot key.  This was like the many so-called &lt;a href=&quot;https://en.wikipedia.org/wiki/Boss_key&quot; rel=&quot;noreferrer&quot;&gt;&quot;boss key&quot;&lt;/a&gt; programs available at the time, but instead of displaying a spreadsheet or some other generic work-like content, it displayed whatever had been previously captured, and the captured screen could be freely changed at any time by pressing a hot key.  You can see how this might be an advantage for a programmer, who doesn't generally use spreadsheets, and who wishes to sometimes not work while at work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I recall, when the &quot;boss key&quot; was pressed, the program needed to save the screen contents, which might be in a graphics mode, and replace them with the saved contents, which were in text mode.  I think (this was a long time ago) the program made the mode switch without the assistance of the BIOS, by directly hitting the CGA card's I/O ports.  I &lt;em&gt;think&lt;/em&gt; those ports had the ability to control the monitor's scan rate, as evidenced by the destruction the TSR caused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My friend found out the hard way that when the monochrome monitor attached to the Hercules card was in use, and the &quot;boss key&quot; TSR was triggered, it had a bug that could program the Hercules card with incorrect frequencies.  The evidence of this was:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Triggering the TSR by hitting its &quot;boss key.&quot;&lt;/li&gt;&#xA;&lt;li&gt;The monochrome monitor emitting a very loud, very high-pitched squeal&lt;/li&gt;&#xA;&lt;li&gt;The monochrome monitor's display contracting to a point&lt;/li&gt;&#xA;&lt;li&gt;The monitor ceasing its squeal with a &quot;pop&quot;&lt;/li&gt;&#xA;&lt;li&gt;A puff of smelly &lt;a href=&quot;https://en.wikipedia.org/wiki/Magic_smoke&quot; rel=&quot;noreferrer&quot;&gt;magic smoke&lt;/a&gt; escaping the monitor&lt;/li&gt;&#xA;&lt;li&gt;The monitor's permanent removal from the set of working monitors&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My friend tried to debug this, but after he fried the second such monitor, he decided it was too expensive a problem to work on and just stopped using the TSR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My friend and I worked very closely together, so I personally witnessed both of these monitors being fried.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My friend had a lousy grasp of ethics in his youth. We stay in touch, and I can now say with certainty that he would never consider doing such a thing, and is ashamed of having once done it.&lt;/p&gt;&#xA;" OwnerUserId="3324" LastActivityDate="2018-06-04T22:36:21.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6639" PostTypeId="2" ParentId="2111" CreationDate="2018-06-05T03:10:09.380" Score="8" Body="&lt;p&gt;The Amiga 3000 was offered in 4 configurations: 25MHz NTSC, 25MHz PAL, 16MHz NTSC, 16 MHz PAL. Besides the ID of &quot;A3000 N&quot; which appears on your A3000, the other possible ID is &quot;A3000 P&quot;. It might be considered an obvious conclusion that the &quot;N&quot; refers to NTSC and the &quot;P&quot; refers to PAL configurations. However, I think that requires some more explanation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only difference between NTSC &amp;amp; PAL for an A3000 is a jumper setting (J200). That seems like a relatively minor configuration setting to base your component labeling off of. Especially, given that the distinction between the 25MHz and the 16MHz configurations included not only many jumpers, but many expensive components soldered to the board (like 25MHz vs. 16MHz rated CPU and FPU).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of the above, I don't think the marking of &quot;N&quot; for NTSC and &quot;P&quot; for PAL was so much about the board configuration. Rather, it was intended to sort the systems heading West from Hong Kong (Europe) from those heading East from Hong Kong (California). So the &quot;N&quot;-marked boards should primarily originate from North America, while the &quot;P&quot; boards ought to primarily originate from European markets. I am over-simplifying, given that some A3000's might have shipped to non-European PAL regions. Sorting at the factory was probably based on destination country, not just my simplified East/West dichotomy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as &quot;HKC&quot; on the sticker, it refers to &quot;Hong Kong City&quot;. On most A3000 motherboards, and also the daughterboards, you can also locate a separate sticker that reads &quot;QC Assembled in Hong Kong PASS&quot;. This is a secondary confirmation of the location of assembly for the boards. Incidentally, the S/N sticker on the A3000 Daughterboard is the identical format to the motherboard S/N sticker, but uses &quot;DAUGHTER&quot; ID instead of the &quot;N&quot; or &quot;P&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the date of assembly, it is coded with the handwritten week of the year following the &quot;WW&quot;, and crossing out of the non-applicaple year. So, your example was assembled week 41 of 1990; pretty early in the A3000's life.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-06-05T03:10:09.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6640" PostTypeId="1" AcceptedAnswerId="6643" CreationDate="2018-06-05T04:50:51.797" Score="28" ViewCount="13755" Body="&lt;p&gt;How did 8 bit processors such as the Z80 and 8080 perform 16 bit arithmetic? They have an 8 bit data bus, so how does the ALU perform 16 bit arithmetic on the register pairs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z80 architecture diagram (from &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80#/media/File:Z80_arch.svg&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XkZjH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XkZjH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6672" LastActivityDate="2019-03-08T08:28:31.350" Title="How did 8 bit processors perform 16 bit arithmetic?" Tags="&lt;z80&gt;&lt;8080&gt;&lt;alu&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6641" PostTypeId="5" CreationDate="2018-06-05T04:52:49.930" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2018-06-05T04:52:49.930" LastActivityDate="2018-06-05T04:52:49.930" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6642" PostTypeId="4" CreationDate="2018-06-05T04:52:49.930" Score="0" Body="For questions related to Arithmetic Logic Units" OwnerUserId="6672" LastEditorUserId="6672" LastEditDate="2018-06-05T09:35:59.810" LastActivityDate="2018-06-05T09:35:59.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6643" PostTypeId="2" ParentId="6640" CreationDate="2018-06-05T05:49:31.030" Score="39" Body="&lt;p&gt;In the case of the Z80, the ALU is only 4 bits wide. That's no problem, since the internals of the CPU are controlled by a program internal to the processor, called the microprogram (or microcode), which is responsible for piping data around in the necessary way to execute some instruction. So if the Z80 gets an instruction like &lt;code&gt;ADD HL, BC&lt;/code&gt;, the microprogram probably goes something like this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Add the lowest half of the lowest bytes; no carry-in; carry-out to &lt;code&gt;H&lt;/code&gt; flag&lt;/li&gt;&#xA;&lt;li&gt;Add the upper half of the lowest bytes; carry-in from &lt;code&gt;H&lt;/code&gt; flag; carry-out to &lt;code&gt;C&lt;/code&gt; flag&lt;/li&gt;&#xA;&lt;li&gt;Add the lowest half of the upper bytes; carry-in from &lt;code&gt;C&lt;/code&gt; flag; carry-out to &lt;code&gt;H&lt;/code&gt; flag&lt;/li&gt;&#xA;&lt;li&gt;Add the upper half of the upper bytes; carry-in from &lt;code&gt;H&lt;/code&gt; flag; carry-out to &lt;code&gt;C&lt;/code&gt; flag&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The result is a 16-bit addition, just that it's done four bits at a time. Some Z80 compatibles had microcode that did what I describe, but microcode is not the only way to achieve this. The same procedure could have been controlled by a finite state machine or some other kind of sequencer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another example of an 8-bit processor is the 6502. It doesn't do any 16-bit arithmetic for you; the software needs to explicitly do a 16-bit operation in two halves; perhaps like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; Add $BEEF to a 16-bit variable stored at address $40&#xA;clc       ; Clear carry&#xA;lda $40   ; load first half of the 16-bit variable into memory&#xA;adc #$ef  ; Add the first half of the number&#xA;sta $40   ; save it&#xA;lda $41   ; load the other half&#xA;adc #$be  ; Add the other half of the constant, plus the carry&#xA;sta $41   ; and save it&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The principle extends to any width of ALU and any width of data. So the PDP-8 is a 12-bit computer. There's an implementation called PDP-8/S, which has a 1-bit ALU, and the hardware performs all 12-bit operations one bit at a time. Needless to say, it was much slower, and I believe it was rather unsuccessful commercially.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-03-08T08:28:31.350" LastActivityDate="2019-03-08T08:28:31.350" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="6644" PostTypeId="2" ParentId="6637" CreationDate="2018-06-05T06:58:05.150" Score="19" Body="&lt;p&gt;As others have mentioned this does indeed look like a strange attempt to allocate memory for the game.&lt;/p&gt;&#xA;&lt;h3&gt;What do the programs do?&lt;/h3&gt;&#xA;&lt;p&gt;The TSRs (and presumably the game executable) use interrupt vectors as global storage to hold flags and pointers to the allocated memory. The first program, &lt;code&gt;R32768&lt;/code&gt;, uses &lt;code&gt;49A6&lt;/code&gt; in &lt;code&gt;00180&lt;/code&gt; and &lt;code&gt;00182&lt;/code&gt; (interrupt vector &lt;code&gt;60h&lt;/code&gt;) as its signature. If those values are present, it considers that it’s already resident, and exits; otherwise it sets flags up for &lt;code&gt;M1&lt;/code&gt; and &lt;code&gt;M2&lt;/code&gt; (&lt;code&gt;49A7&lt;/code&gt; in &lt;code&gt;00188&lt;/code&gt; and &lt;code&gt;0018A&lt;/code&gt; (interrupt vector &lt;code&gt;62h&lt;/code&gt;), and &lt;code&gt;49A8&lt;/code&gt; in &lt;code&gt;0018C&lt;/code&gt; and &lt;code&gt;0018E&lt;/code&gt; (interrupt vector &lt;code&gt;63h&lt;/code&gt;) respectively), stores its location in memory in &lt;code&gt;00184&lt;/code&gt; (as a double word, interrupt vector &lt;code&gt;61h&lt;/code&gt;), and exits, &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/dos_kernel/27.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;staying resident with 32KiB allocated&lt;/a&gt;. &lt;code&gt;M1&lt;/code&gt; checks whether &lt;em&gt;its&lt;/em&gt; signature is present (&lt;em&gt;i.e.&lt;/em&gt;, &lt;code&gt;R32768&lt;/code&gt; has left it there), and if it is, replaces it with its location in memory, and exits, staying resident with 34,008 bytes allocated. &lt;code&gt;M2&lt;/code&gt; does the same.&lt;/p&gt;&#xA;&lt;p&gt;Then the main game executable can check whether &lt;code&gt;R32768&lt;/code&gt;’s signature is present in &lt;code&gt;00180&lt;/code&gt;, and whether &lt;code&gt;M1&lt;/code&gt;’s and &lt;code&gt;M2&lt;/code&gt;’s signatures &lt;em&gt;aren’t&lt;/em&gt; present in &lt;code&gt;00188&lt;/code&gt; and &lt;code&gt;0018C&lt;/code&gt;; if everything’s OK, it knows it can use the memory pointed at by the double words stored in &lt;code&gt;00184&lt;/code&gt;, &lt;code&gt;00188&lt;/code&gt;, and &lt;code&gt;0018C&lt;/code&gt; for its own purposes. Note that there is no (easy) way of freeing the memory that’s been allocated in this fashion, so you need to reboot after running the game. There isn’t any error handling either, so if there isn’t quite enough memory available, &lt;code&gt;R32768&lt;/code&gt; can succeed, &lt;code&gt;M1&lt;/code&gt; and &lt;code&gt;M2&lt;/code&gt; can run and fail, leaving an interesting setup for the main executable — it will probably end up running in the memory it thinks &lt;code&gt;M1&lt;/code&gt; or &lt;code&gt;M2&lt;/code&gt; allocated for it, leading to corruption in relatively short order.&lt;/p&gt;&#xA;&lt;h3&gt;What &lt;em&gt;should&lt;/em&gt; they do?&lt;/h3&gt;&#xA;&lt;p&gt;All this is completely unnecessary, in all versions of DOS. In DOS 1, only COM files were supported; these are allocated all the available memory at startup, and the amount of memory allocated to them is stored at offset 2 in the PSP (as the segment of the first paragraph following the last one allocated to the program). Thus COM programs never need to &lt;em&gt;allocate&lt;/em&gt; conventional memory for themselves, and they can determine how much memory they have to play with (and react accordingly if there isn’t enough). In DOS 2 and later, EXE files are supported too, and their headers describe how much memory they need to start (“MINALLOC”) and how much they want (“MAXALLOC”, which is usually &lt;code&gt;FFFF&lt;/code&gt; so that they are allocated the largest available block of memory). On top of that, programs running under DOS 2 and later can use &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/dos_kernel/2148.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;function 0x48 of interrupt 0x21&lt;/a&gt; to request more memory, if available. All the memory allocated using these different mechanisms is freed when the program exits.&lt;/p&gt;&#xA;&lt;h3&gt;Why are they doing this?&lt;/h3&gt;&#xA;&lt;p&gt;This part is speculation of course. A couple of details might help understand why the developers came up with this stratagem:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;PHANTASI.EXE&lt;/code&gt; is compressed with &lt;code&gt;LZEXE&lt;/code&gt;. Decompressing it yields a 34,561-byte executable with no relocations.&lt;/li&gt;&#xA;&lt;li&gt;A number of files look like they could be overlays: &lt;code&gt;MSTR1IBM.PAT&lt;/code&gt;, &lt;code&gt;MSTR2IBM.PAT&lt;/code&gt;, &lt;code&gt;OV1.OVR&lt;/code&gt;, &lt;code&gt;OV2.OVR&lt;/code&gt;. The uncompressed main executable contains strings pertaining to overlay handling (“&lt;code&gt;.ovr&lt;/code&gt;”, “Error %d loading overlay: %s$”; the &lt;code&gt;$&lt;/code&gt; at the end of the latter suggests a home-grown system rather than some library since that’s the DOS end-of-string marker).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;My theory is that the developer realised that the game was going to be larger than 64KiB, which is the limit for COM files. Not realising that they didn’t need to care about memory allocation (apart from checking that enough memory had been allocated to the program), or perhaps that COM programs could natively manage more than 64KiB of memory, they designed a COM-based overlay system using the three TSRs to allocate space for the overlays (and perhaps other data). At some point during development they also realised that the game was too big (as shipped, it barely fits on a 360KiB floppy), and decided to compress the main executable; this required converting it to a MZ-format EXE, probably using &lt;code&gt;COM2EXE&lt;/code&gt; (which accompanied &lt;code&gt;LZEXE&lt;/code&gt;).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-09-17T13:07:43.800" LastActivityDate="2020-09-17T13:07:43.800" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="6645" PostTypeId="2" ParentId="6640" CreationDate="2018-06-05T08:06:24.127" Score="36" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How did 8 bit processors such as the Z80 and 8080 perform 16 bit arithmetic?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Same way one adds multiple digit numbers on paper. &lt;a href=&quot;https://en.wikipedia.org/wiki/Carry_(arithmetic)#Manual_arithmetic&quot; rel=&quot;nofollow noreferrer&quot;&gt;One digit (-pair) at a time and iterating over all digits while incooperating any carry&lt;/a&gt;. With(in) a CPU the chunks are ALU sized units like 4/8/16 or 32 bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As with paper based addition this method can be used for numbers of arbitary length (number of digits). The difference between an 8 bit CPU processing 64 bit numbers and a 32 bit CPU doing 64 bit (*1) is just the number of iterations needed.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;They have an 8 bit data bus, so how does the ALU perform 16 bit arithmetic on the register pairs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As above. But I guess the question you wanted to ask is rather&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;How can a 8 bit ALU do 16 bit operations &lt;strong&gt;in a single instruction&lt;/strong&gt;&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Still as above, as two operations of 8 bit each, the second minding any carry of the first. Just now the iteration (with a count of 2) is hard coded within the CPU, thus only one instruction is needed. Again, still the same for any other CPU with hard coded operation for operands wider than its ALU size.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Further Reading:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Wiki article about &lt;a href=&quot;https://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arbitrary Precision Arithmetic&lt;/a&gt; offers a wider view on this topic, including some historic information.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Or a 1 bit CPU - Best granuality, worst performance :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-06-14T21:14:09.150" LastActivityDate="2018-06-14T21:14:09.150" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6646" PostTypeId="2" ParentId="6640" CreationDate="2018-06-05T08:14:40.823" Score="13" Body="&lt;p&gt;by using &lt;strong&gt;CARRY&lt;/strong&gt; flag. &lt;strong&gt;Bignum&lt;/strong&gt; (its common name for any large number lib like arbitrary size integer/fixed point/floating point numbers) &lt;strong&gt;algorithms&lt;/strong&gt; do the same thing (compute &lt;code&gt;m*n&lt;/code&gt; bit operations using only &lt;code&gt;n&lt;/code&gt; bit operations) for more info see&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/26603589/2521214&quot;&gt;Cant make value propagate through carry&#xA;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So operations like &lt;code&gt;+,-&lt;/code&gt; are done by sequencing from LSW to MSW (where word is the ALU  bitwidth).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;+: add,adc,adc,adc...&#xA;-: sub,sbc,sbc,sbc...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;so for example if we have 8 bit &lt;strong&gt;ALU&lt;/strong&gt; and want compute 16 bit &lt;code&gt;C = A + B&lt;/code&gt; it would be like this (sequencing 2 times 8 bit opeartion):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C.L = A.L + B.L&#xA;C.H = A.H + B.H + Carry&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;for the &lt;code&gt;C = A - B&lt;/code&gt; it would look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C.L = A.L - B.L&#xA;C.H = A.H - B.H - Carry&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;other operations like &lt;code&gt;*,/,...&lt;/code&gt; are a bit more complicated for more info see these:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/18465326/2521214&quot;&gt;Fast bignum square computation&lt;/a&gt; multiplication algorithms like Karatsuba,Schönhage-Strassen,NTT&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/19779753/2521214&quot;&gt;Addition and Shifting&lt;/a&gt; &lt;code&gt;O(n^2)&lt;/code&gt; multiplication&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/18398246/2521214&quot;&gt;Floating Point Divider Hardware Implementation Details&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now if you want to implement it inside CPU than that is done in microcode (the stuff in CPU controls how are its parts used and in which order it is like a small program for each instruction). Some HW architectures might even nest smaller &lt;strong&gt;ALU&lt;/strong&gt; blocks for speed ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-06-05T08:50:00.253" LastActivityDate="2018-06-05T08:50:00.253" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6647" PostTypeId="1" AcceptedAnswerId="6650" CreationDate="2018-06-05T09:31:21.540" Score="14" ViewCount="3082" Body="&lt;p&gt;The 68020 is an improvement over the 68000 because it includes new instructions, possibly better speeds and so on. The 68040 is an improvement over the 68020 again for the same reasons, as is the 68060 over the 68040. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But is there any incompatibilities which could keep code written for the 68000 from being run the same way on a later model? &lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-06-06T11:41:48.800" Title="Are later 68000 variants backward compatible with earlier ones?" Tags="&lt;compatibility&gt;&lt;m68k&gt;" AnswerCount="5" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6648" PostTypeId="2" ParentId="6647" CreationDate="2018-06-05T09:44:34.430" Score="3" Body="&lt;p&gt;To start with, the 68040 integrated the FPU and dropped some (68881/68882) instructions. Similarly, the 68060 dropped in addition some 68020 instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these changed/dropped instructions could be emulated on either CPU via dedicated traps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For CPU32 and 5200 (Coldfire) core based controllers the case is different and code may need to be reworked, but the basic 68000 code can run on all of these CPUs without change.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-06-05T12:02:00.317" LastActivityDate="2018-06-05T12:02:00.317" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6649" PostTypeId="2" ParentId="6647" CreationDate="2018-06-05T10:04:53.203" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But is there any incompatibilities which could keep code written for the 68000 from being run the same way on a later model?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. Any 68000 program that used the &quot;move from SR&quot; instruction in user mode will trap on any later version of the processor from the 68010 onwards because the instruction was made supervisor only in that processor. This was to support virtualisation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the exception handling was changed to make certain exception conditions recoverable e.g. bus error which is necessary to support virtual memory. The content of the exception stack frame was changed to make some instructions restartable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that any 68000 program that inspects the exception stack frame will break.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another backward compatibility issue - actually probably the biggest at the time - Was the size of the external address bus. In the 68000, it was 24 bits, but addresses in memory and in registers where 32 bits. In the 68000 the upper eight bits of any address were simply ignored when placed on the address bus. Programmers frequently took advantage of this by using those eight bits for tagging. Any program that did that (and there were many e.g. early Apple operating systems prior to System 7 and Microsoft Amiga Basic) would break on a processor with 32 external address lines (e,g, the 68020). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/8796/julie-in-austin&quot;&gt;Julie in Austin&lt;/a&gt; for reminding me about that last point.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2018-06-06T09:30:16.483" LastActivityDate="2018-06-06T09:30:16.483" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6650" PostTypeId="2" ParentId="6647" CreationDate="2018-06-05T10:12:54.247" Score="23" Body="&lt;p&gt;There are a few incompatible changes, but after the 68010, most of them are surmountable (with a performance penalty) or would only affect operating systems, not applications (at least, not applications written to spec, with no invalid or undocumented opcodes or addressing modes).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;68010:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;introduced support for the MC68451 MMU;&lt;/li&gt;&#xA;&lt;li&gt;“MOVE from SR” became privileged;&lt;/li&gt;&#xA;&lt;li&gt;the exception stack frame changed to support restarting the faulting instruction;&lt;/li&gt;&#xA;&lt;li&gt;the exception vector table became configurable (it’s at a fixed address in the 68000).&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;68020: fully backwards-compatible with the 68010 as far as I can tell; introduced support for FPUs (MC68881, MC68882) and the MC68851 PMMU (I don’t know whether the 68851 is backwards-compatible with the 68451, apart from the coprocessor interface which is different).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;68030:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;integrated the MMU, but the integrated MMU isn’t compatible with the MC68851;&lt;/li&gt;&#xA;&lt;li&gt;dropped a number of seldom-used instructions that had been introduced in the 68020.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;68040:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;integrated the FPU, which wasn’t as capable as the MC68882; unsupported instructions were emulated with a severe performance penalty;&lt;/li&gt;&#xA;&lt;li&gt;simplified the MMU, requiring changes in operating systems (as a result, as mentioned by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/75/traal&quot;&gt;traal&lt;/a&gt;, &lt;a href=&quot;https://virtuallyfun.com/wordpress/2013/01/13/amix/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga UNIX only works on the 68030&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;68060: dropped multiprocessor management instructions which had been introduced in the 68020.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;ColdFire is &lt;a href=&quot;http://microapl.com/Porting/ColdFire/cf_68k_diffs.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;a subset of the 680x0&lt;/a&gt; so 680x0 binaries can’t be expected to run there as-is (but ColdFire binaries should run on a 680x0).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As mentioned by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4335/brian-h&quot;&gt;Brian H&lt;/a&gt;, one other change which wasn’t supposed to be backwards-incompatible but which did end up causing a number of programs to fail is the extension of the address bus from 24 lines to 32 lines in the 68020. See &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6653/79&quot;&gt;this answer&lt;/a&gt; for details.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-06-06T11:41:48.800" LastActivityDate="2018-06-06T11:41:48.800" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6651" PostTypeId="1" AcceptedAnswerId="6654" CreationDate="2018-06-05T10:27:49.443" Score="6" ViewCount="1166" Body="&lt;p&gt;The Atari TT was based on the earlier ST line of computers but with a 32 MHz 68030 instead of an 8 or 16 MHz 68000.  There were a number of extensions made (e.g. new video modes) and the memory architecture had some differences as well.  Though largely backwards-compatible, some earlier software reportedly would not run on it.  What specifically caused some ST software to fail to run on the TT?&lt;/p&gt;&#xA;" OwnerUserId="7347" LastActivityDate="2018-06-05T13:19:36.997" Title="What changes made some Atari ST software incompatible with the Atari TT?" Tags="&lt;atari&gt;&lt;compatibility&gt;&lt;atari-st&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6652" PostTypeId="2" ParentId="6647" CreationDate="2018-06-05T10:45:59.883" Score="15" Body="&lt;p&gt;The 68k family is largely compatible between all the members. &quot;Normal&quot; application code can be written to easily run on all the members, unchanged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are, however, a number of subtle differences and pitfalls to watch out.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some instructions were made privileged after the 68000/68008/68010, so are only accessible in supervisor mode (notably &lt;code&gt;MOVE SR,&amp;lt;EA&amp;gt;&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;There were some differences even between the 68008 and 68000 in the IPL (interrupt priorities) supported, and even between different pinouts of the 68008 (3 vs. 7 possible interrupt priority levels)&lt;/li&gt;&#xA;&lt;li&gt;There are some subtle differences in the behavior when you push a byte to the stack (can't quite remember where and what exactly, just remembered &quot;don't do it&quot;)&lt;/li&gt;&#xA;&lt;li&gt;Some of the members (most of &gt;=68020, except CPU32) will happily access words and long words on unaligned addresses, some others will trap out.&lt;/li&gt;&#xA;&lt;li&gt;Cache handling, strategy, and size is different for all 68k members that have data or instruction caches. Also some cache-related opcodes were only available in &gt;68030&lt;/li&gt;&#xA;&lt;li&gt;Math co-pro support sort of was reduced from the original 68881/68882 towards the built-in co-processors on the later CPUs&lt;/li&gt;&#xA;&lt;li&gt;PMMU on-board support also varies significantly between the later members of the family&lt;/li&gt;&#xA;&lt;li&gt;Interrupt stack frame looks different starting from the 68020&lt;/li&gt;&#xA;&lt;li&gt;68020 added long relative addressing modes with larger offsets&lt;/li&gt;&#xA;&lt;li&gt;PC-relative branches could be farther away than only one word size starting from the 68020 (This and the above allowed flat 32-bit programs to be fully position-independent, which was not possible before without trickery) &lt;/li&gt;&#xA;&lt;li&gt;68020 and later had bitfield instructions&lt;/li&gt;&#xA;&lt;li&gt;68010 and later had a VBR to allow shifting the vector tables away from 0&lt;/li&gt;&#xA;&lt;li&gt;The CPUs that only had a 24-bit address bus (&amp;lt;=68010) obviously could (mis-)use the upper 8 bits of the address registers for other purposes because they were simply ignored for addresses - That clearly didn't work well on machines that had a full 32-bit address bus. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And some more I have probably long forgotten.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these were possible to work around if you kept them in mind. Most of them would not even be an issue in applications, but rather only in OS code. Some of them can be used by application code to find out what CPU we're running on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you count the &quot;68080&quot; (an FPGA-based re-engineered and much improved version of the 68k family) to the family built by the &lt;a href=&quot;http://www.apollo-accelerators.com&quot; rel=&quot;noreferrer&quot;&gt;Apollo team&lt;/a&gt;, there are even more changes to list, like an equivalent to the Intel MMX instruction set.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-06-05T14:18:04.190" LastActivityDate="2018-06-05T14:18:04.190" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6653" PostTypeId="2" ParentId="6651" CreationDate="2018-06-05T12:33:25.803" Score="5" Body="&lt;p&gt;The question is sort of broad, since there are many ways to write software that targets the specifics of ST hardware, and which leads to programmer assumptions that break when the hardware changes even slightly. That said, you identified one of the main issues for games: the faster CPU. Not being able to slow the CPU down to the expected speed of the ST would be an issue for any games that relied on precise instruction execution speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another likely culprit, which also affected lots of Amiga and Macintosh software in the transition from 68000 to 68020/030, was the programmer &quot;abuse&quot; of using the upper 8-bits of addresses to store additional data. Addresses on the 68000 are 32-bit, just like with the 020/030. But the 68000's address bus is only 24-bits (16M maximum memory). So it was very common for programmers to conserve some memory space by using the upper 8-bits of address data for purposes other than addressing memory. On the 68000, the extra bits were ignored by the hardware, but not so on the 020/030. This led to many unexpected crashes on the 32-bit machines, especially since the OS for these machines didn't include memory protection from user applications. On the Macintosh, the early system software had used this means of conserving memory, and that was one of the contributors to the lengthy push to get &quot;32-bit clean&quot; ROMs for 32-bit Macintoshes so that they could actually support &gt;8M of RAM.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-06-05T12:40:09.113" LastActivityDate="2018-06-05T12:40:09.113" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6654" PostTypeId="2" ParentId="6651" CreationDate="2018-06-05T13:19:36.997" Score="5" Body="&lt;p&gt;Beyond the usual TOS compatibility issues which affected all Atari STs, the TT add the following twists:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;its faster CPU meant that some programs (games) ran too fast; this wasn’t as much of a problem as on the PC since most games used the vertical blank interrupt for timing;&lt;/li&gt;&#xA;&lt;li&gt;its 32-bit address bus meant that programs which used the top eight bits of addresses suddenly stopped working, as detailed in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6653/79&quot;&gt;Brian H’s answer&lt;/a&gt; (the unofficial &lt;code&gt;24bit.prg&lt;/code&gt;, available &lt;a href=&quot;https://atariage.com/forums/topic/39983-mega-ste-tos-206-game-compatibility-listing/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, will program the MMU so those bits are ignored, so that games such as Ultima III will work);&lt;/li&gt;&#xA;&lt;li&gt;it dropped the blitter, emulating it in software instead (which turned out to be faster, using the 32MHz CPU, than the 8MHz blitter anyway); programs which address the blitter directly instead of using the TOS routines fail to work (so some ST&lt;sup&gt;E&lt;/sup&gt;-specific games won’t work);&lt;/li&gt;&#xA;&lt;li&gt;its list of supported resolutions doesn’t quite match the ST’s, which affects some programs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Atari wiki has &lt;a href=&quot;http://www.atari-wiki.com/?title=Compatible_games_for_TT&quot; rel=&quot;noreferrer&quot;&gt;a list of TT-compatible games&lt;/a&gt; which gives a good idea of what to expect. &lt;a href=&quot;http://www.atari-forum.com/viewtopic.php?f=26&amp;amp;t=20735&quot; rel=&quot;noreferrer&quot;&gt;This Atari forum thread&lt;/a&gt; also contains a lot of useful information for people trying to run games on the TT (it gives the impression that lots of games need patches, but many of those patches aren’t required, they allow the games to run from the TT’s hard drive).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-06-05T13:19:36.997" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6655" PostTypeId="2" ParentId="6647" CreationDate="2018-06-05T15:24:22.910" Score="6" Body="&lt;p&gt;In addition to the other excellent answers, sometimes the addition of caches could cause incompatibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 68010 had a single instruction cache that couldn't really cause any problems. The 020 increased this to 256 bytes, and later CPUs had both instruction and data caches which were even larger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main fault encountered with instruction caches is with self-modifying code. This is where the program re-writes part of itself. This was a common technique in the 80s. It could be used to make copy protection harder to crack (because any code dump might not reflect the code being executed, and I believe Rob Northern Copylock used that technique), or for performance reasons with data stored in the op-codes of instructions with immediate operands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the 020 and above changes to code in RAM that was also in the cache would not cause the cache to be updated or purged. This was an issue for some Amiga and Atari ST software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A related but less common issue is where data in the data cache does not reflect data written to RAM via DMA. Most systems avoided this by disabling the data cache for memory that could be accessed by DMA, such as chip RAM on the Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One Amiga specific issue was that on CPUs without cache or extra memory the operation of the blitter (an memory manipulation chip primarily used for graphics) could block the CPU entire so that no instructions were executed until the programmed blitter operation was finished, due to the CPU not receiving any memory access cycles. With the addition of an instruction cache the CPU could carry on executing instructions, for example re-programming the blitter mid operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond caches, due to architectural improvements and higher clock frequencies software on later parts would run faster, which could interfere with timing in badly programmed software. That was the reason for the &quot;turbo&quot; button on PCs of the era.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-06-05T15:24:22.910" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6656" PostTypeId="1" AcceptedAnswerId="6661" CreationDate="2018-06-05T18:29:15.997" Score="29" ViewCount="6548" Body="&lt;p&gt;How was microcode implemented in retro processors such as the Z80 or 8080?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was the microcode standard (for example a manual for the processor outlining all possible micro-instructions and the standard combinations to implement documented instructions)? If so, what are some keywords to use to find these manuals online?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or was the microcode custom written by each manufacturer of the processor (such that for example an ADD instruction might be slightly different between manufacturers)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could the microcode be read and changed by a user?&lt;/p&gt;&#xA;" OwnerUserId="6672" LastEditorUserId="276" LastEditDate="2018-08-01T10:58:50.587" LastActivityDate="2018-08-01T10:58:50.587" Title="How was microcode implemented in retro processors?" Tags="&lt;microprocessor&gt;&lt;microcode&gt;" AnswerCount="5" CommentCount="8" FavoriteCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="6657" PostTypeId="5" CreationDate="2018-06-05T18:31:27.553" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/q/110/276&quot;&gt;Do we need the CPU tag?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="276" LastEditDate="2018-08-01T11:09:18.440" LastActivityDate="2018-08-01T11:09:18.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6658" PostTypeId="4" CreationDate="2018-06-05T18:31:27.553" Score="0" Body="*** DO NOT USE THIS TAG ***" OwnerUserId="6672" LastEditorUserId="276" LastEditDate="2018-08-01T11:09:18.440" LastActivityDate="2018-08-01T11:09:18.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6659" PostTypeId="2" ParentId="6656" CreationDate="2018-06-05T18:51:17.033" Score="15" Body="&lt;p&gt;There are retro computers that have readable and writeable microcode, but not the ones you mentioned in your question. And the ability to change the microcode was extremely rare in the kinds of CPUs you are thinking about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll describe the way the microcode worked in the 6502, or the Decode ROM as it's usually called there (same concept, different name). It's not going to be an accurate description of 6502 internals since that's not what you're asking about, but just to give you an idea of how it &lt;em&gt;could&lt;/em&gt; work. When the 6502 reads an instruction, it's kept in a register. There is also a three-bit counter which counts from 0 to 7, increasing by one with each clock cycle, and resetting each time the 6502 starts a new instruction. That register and the counter are both inputs to a huge ROM. The outputs from that ROM are signals like &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&quot;put the accumulator on that bus&quot;&lt;/li&gt;&#xA;&lt;li&gt;&quot;get the ALU to add two numbers&quot;&lt;/li&gt;&#xA;&lt;li&gt;&quot;get the output from the ALU and save it in X&quot;&lt;/li&gt;&#xA;&lt;li&gt;&quot;fetch the next instruction and reset the counter&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any number of those signals might fire each time the counter increments. In the case of a 6502, these outputs mostly go straight to the random control logic, which takes these signals, does some random stuff I don't understand, and apparently controls various other parts of the chip. &#xA;If you are interested in how this might work, I'll refer you to the Visual6502 project. It's a reimplementation of every single transistor of the 6502.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or was the microcode custom written by each manufacturer of the processor (such that for example an ADD instruction might be slightly different between manufacturers)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No the microcode is part of the design. If the design was licensed and produced by someone else, then the microcode will usually be identical. Of course, the design might be extended to include new instructions; then the microcode will be added to allow that to happen. It's also happened that some chips have been microcoded to emulate some other completely different design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the PDP-11/60, certain configurations had writeable microcode. &lt;a href=&quot;https://ia801908.us.archive.org/12/items/bitsavers_decpdp1111codeListingApr81_5149506/EY-C3012-RB-001_Microcode_Listing_Apr81.pdf&quot; rel=&quot;noreferrer&quot;&gt;The microcode listings are only a quick google away.&lt;/a&gt; And as for the PDP-10, some &lt;a href=&quot;https://en.wikipedia.org/wiki/Control_store&quot; rel=&quot;noreferrer&quot;&gt;had a writeable control store&lt;/a&gt; (control store is yet another word for the same thing)&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-06-06T06:15:57.323" LastActivityDate="2018-06-06T06:15:57.323" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6660" PostTypeId="2" ParentId="6656" CreationDate="2018-06-05T19:28:12.207" Score="8" Body="&lt;p&gt;The canonical examples for early microcoded CISC microprocessors are probably the Intel 8086 and the Motorola 68000. Of the two, the 8086 is the simpler (29K transistors vs. 70K in the 68000). But both of these CISC processors will present challenges in terms of their complexity and in terms of finding resources about the proprietary internal microcodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Somewhat surprisingly, the RISC ARM1 microprocessor made use of microcode. Such approach was normally eschewed for a RISC CPU, but it was used in the ARM1 similar to how it was used in the MOS 6502. So, like the 6502 case, it is a limited use and thus more approachable as a learning aid. And, there is &lt;a href=&quot;http://www.righto.com/2016/02/reverse-engineering-arm1-processors.html&quot; rel=&quot;noreferrer&quot;&gt;this article&lt;/a&gt; that looks like a pretty good stepping off point. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Excerpt from linked article:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The ARM1's microcode is an order of magnitude smaller than other microcoded processors. The ARM1's microcode has a 42×36 microcode, for 1512 bits in total. The 8086 used a 504×21 microcode (over 10,000 bits) while the 68000 has a 544×17 microcode and 366×68 nanocode (over 34,000 bits).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-06-05T19:42:24.970" LastActivityDate="2018-06-05T19:42:24.970" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6661" PostTypeId="2" ParentId="6656" CreationDate="2018-06-05T23:04:47.603" Score="41" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How was microcode implemented in retro processors such as the Z80 or 8080?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;None of these chips (likewise 6800 and 6502) use microcode the same way as it's used today. The decoding isn't as strictly separated from execution logic.&lt;/p&gt;&#xA;&lt;h2&gt;Example 1: 6502&lt;/h2&gt;&#xA;&lt;p&gt;The 6502, for example, has a 'rather' simple structure built from a timing circuit counting instruction cycle and an instruction register, followed by a decoder PLA where instruction plus timing information is transformed into control signals which are fed into the execution units.&lt;/p&gt;&#xA;&lt;p&gt;The cycle counter starts at 0 and shifts (!) through the maximum 7 states. When an instruction ends, it gets reset to zero for the next one. The 6502 PLA is essentially a one-dimensional decoder transforming the combined instruction plus state into one or more control signals for the execution units. Since the PLA allows partial decoding, one entry can fire on different instructions. For example, all instructions loading the second byte as immediate share one single PLA entry (microcode line). In comparison with textbook microcode engines, this is equivalent to a kind of compressed microcode.&lt;/p&gt;&#xA;&lt;h2&gt;Example 2: Z80&lt;/h2&gt;&#xA;&lt;p&gt;The Z80, in contrast, is based around a more complicated structure. Here the instruction is sent through a (rather) simple decoder. The decoder is built from a PLA. Simple because 8080/Z80 code offer fewer variants (i.e. addressing modes) and is quite regular compared with a 6502. The decoder creates multiple line&lt;strong&gt;s&lt;/strong&gt; for each instruction or instruction group, which are fed into the second stage.&lt;/p&gt;&#xA;&lt;p&gt;Two counters are set up in parallel. One counting the &lt;strong&gt;M&lt;/strong&gt;emory (or Machine) states (M1..M5), the other &lt;strong&gt;T&lt;/strong&gt;ime states (T1..T5) within (*1). With a new instruction the M counter gets reset to 1, with each M state the T counter gets reset.&lt;/p&gt;&#xA;&lt;p&gt;The second stage of instruction decode is something that is much like another PLA, but built out of single gates (*2). The gates are set up much like a grid with the timing signals (M1..M5 &amp;amp; T1..T5) as horizontal input and the PLA output (instructions/instruction groups) as vertical input. The gate is built along the vertical line and combining its signal with one or more timing signals using AND/NOR logic (*3). The output of these gates again are fed into the discrete logic of the execution units.&lt;/p&gt;&#xA;&lt;p&gt;There are other differences between these CPUs that can be explained due to the different structure, but less relevant here.&lt;/p&gt;&#xA;&lt;h2&gt;Long Story Short&lt;/h2&gt;&#xA;&lt;p&gt;While both machines are kind of microprogrammed, only the 6502 can somewhat be compared to what today is told about microprogramming.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was the microcode standard (for example a manual for the processor outlining all possible micro-instructions and the standard combinations to implement documented instructions)? If so, what are some keywords to use to find these manuals online?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Simply no.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or was the microcode custom written by each manufacturer of the processor (such that for example an ADD instruction might be slightly different between manufacturers)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Together with the last sentence this sounds as if you believe that there is something like a standard microcode machine and that CPUs are just different microcode files for such.&lt;/p&gt;&#xA;&lt;p&gt;Sorry to disappoint you, but there ain't no such thing. CPUs are individual designs and microprogram engines are special for each. That's true not only for early microprocessors like above, but even more so today. Creating these mechanics are the core device to enable certain features and/or performance.&lt;/p&gt;&#xA;&lt;p&gt;Even with a much more 'standard' CPU like an ARM1, the instruction sequencer is a rather special circuit with only 4 states that get not just counted but also repeated or skipped according to a state machine supplied by the microinstructions. Nothing like your textbook micro instruction counter. The microcode ROM itself contains just 42 (?) instruction and are intervened in a rather unique way.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Could the microcode be read and changed by a user?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. There is not only no use case, but more important, it would bust the transistor count many-fold, not only for early chips.&lt;/p&gt;&#xA;&lt;h2&gt;Cost of Loadable Microcode&lt;/h2&gt;&#xA;&lt;p&gt;Lets take the more simple 6502 as example. Its PLA consists of 130x21 possible connections. That's 2730 points that each need (when set) a transistor (function). In reality, not all are populated, but for a loadable microcode each of these intersections need not only to have a transistor, but several: there must be, in addition to the one doing the connection, a static RAM cell for its value, made of 6 transistors. Additionally, address decoders and write lines are needed.  Calculating the equivalent of 10 transistors per bit could therefore be a good assumption.&lt;/p&gt;&#xA;&lt;p&gt;That's 27,300 transistors. That's about the same as a whole 8086 CPU. Considering that the 6502 has a total of less than 4000 transistor functions that's a total overkill and way outside everything possible back then.&lt;/p&gt;&#xA;&lt;h3&gt;But why do we have now loadable microcode?&lt;/h3&gt;&#xA;&lt;p&gt;With today's incomparably huge CPUs, the relation is different. A few thousand, even ten or hundred thousand additional transistor function aren't a big deal, but more than compensated by the ability for late time update.&lt;/p&gt;&#xA;&lt;h3&gt;Fine, but 1970s mainframes also had loadable microcode?&lt;/h3&gt;&#xA;&lt;p&gt;Yes, here again the ability for updates did justify the additional cost (*4) - just this time it was about the ability to sell new instructions / upgrades to existing customers.&lt;/p&gt;&#xA;&lt;h2&gt;Okay, But What About Second Source and Derivatives&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I was thinking more along the lines of second sources and derivatives such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80#Second_sources_and_derivatives&quot; rel=&quot;noreferrer&quot;&gt;these ones for the Z80&lt;/a&gt;. That is whether the microinstructions would be the same between them (some standard Z80 microinstruction set). But it sounds like the answer is no.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(This additional question has been taken from the comments - see below)&lt;/p&gt;&#xA;&lt;p&gt;Yes ... err .. no ... wait, lets split that.&lt;/p&gt;&#xA;&lt;h2&gt;Second Source&lt;/h2&gt;&#xA;&lt;p&gt;A second source usually is meant to produce exactly the same chip, so customers have a fall back in case the primary source had trouble to deliver (or wants a better price :). Many companies wouldn't even think to buy chips that weren't available from a second source to avoid any lock in. Especially in the beginning, chip manufacturers where eager to get a second source for their designs to attract large customers.&lt;/p&gt;&#xA;&lt;p&gt;Second sourcing was usually done by exchanging not only licences and schematics, but also all information down to masks. The resulting chips where supposed to be identical in workings, down to gate level. Only differences below, usually due to different manufacturing processes were (somewhat) acceptable. The intention was that second source chips can be ordered and used interchangeably with original ones.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: Yes, as it's exactly the same CPU.&lt;/p&gt;&#xA;&lt;h2&gt;Derivates&lt;/h2&gt;&#xA;&lt;p&gt;Derivatives are a different issue, these are chips made to work like the original but extend it, either electrically (like lower voltage) (*5), or with additional functionality. When not changing much (and done by a licensee) these extensions are often done by little additions without changing the basic structure. On the other end, chips with large extensions or such 'just' being binary compatible may have not only a different microcode, but also greatly different internal workings. So no, rather not the same micro instructions, not even the same format.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - this internal structure is also the reason for this otherwise unusual notation used throughout all Z80 documentation.&lt;/p&gt;&#xA;&lt;p&gt;*2 - The structure is quite similar to a gate array - except that only needed inputs/functions are cast into silicon.&lt;/p&gt;&#xA;&lt;p&gt;*3 - CMOS offers the feature to build rather complex gates with multiple inputs in a simple way - to some extend this is maybe the most unique feature about the Z80 design.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Well, for very early technology also loadable microcode was a way to speed up operation, but that's again a different story :)&lt;/p&gt;&#xA;&lt;p&gt;*5 - Here exists a grey area between simple second sourcing and extending.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-06-20T17:13:57.980" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="6662" PostTypeId="1" AcceptedAnswerId="6663" CreationDate="2018-06-05T23:05:21.643" Score="3" ViewCount="408" Body="&lt;p&gt;I was leafing through an old copy of CC when I came across a review of a game on the Apple II known as Escape. I immediately recognized it as one I have played in many variations on different machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic premise is simple, you are located in a field filled with a number of fixed obstacles and a number of enemies. At every move the player moves one space in eight directions, and then the enemies will move one step toward the player. The player attempts to escape by causing the enemies to collide with each other or the playfield obstacles. I recall playing one version in B&amp;amp;W on the Mac that was excellent. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to write a Wiki article on the topic, so if anyone knows of versions on various early platforms, and especially the name of the Mac version, please reply and I'll try to get as much info as I can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATES:&lt;/strong&gt; So far I've talked to Mac Oblesby, Bill Cotter, John McGeachie, Peter Doyle, Chris Walker, Stephen Garland and Art Luehrmann. Bill is the only one that even remembers it. Many on the list pre-date the switch to the GE-635, which is where I think it came from, but Art would have remembered it if anyone was going to. I'm trying to find Tony Dwyer out there, he seemed to be one of the main admins in the early 1970s period.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-07-31T21:27:19.753" LastActivityDate="2018-09-23T19:30:54.443" Title="Early game, &quot;Chase&quot; or &quot;Escape!&quot; and many others" Tags="&lt;identify-this-game&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6663" PostTypeId="2" ParentId="6662" CreationDate="2018-06-05T23:16:36.250" Score="3" Body="&lt;p&gt;There is a game called &lt;a href=&quot;http://macintoshgarden.org/games/escape&quot; rel=&quot;nofollow noreferrer&quot;&gt;Escape!&lt;/a&gt; for Classic Macintosh that seems to fit your description. As per the linked article, another Mac version is 1984's &lt;a href=&quot;http://macintoshgarden.org/games/daleks&quot; rel=&quot;nofollow noreferrer&quot;&gt;Daleks&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This answer is a Community Wiki. Feel free to edit &amp;amp; add additional variations of the game for other platforms below this horizontal line.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;This Space for Rent&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-06-06T17:42:46.280" LastActivityDate="2018-06-06T17:42:46.280" CommentCount="1" CommunityOwnedDate="2018-06-05T23:16:36.250" ContentLicense="CC BY-SA 4.0" />
  <row Id="6664" PostTypeId="2" ParentId="6640" CreationDate="2018-06-05T23:29:36.957" Score="4" Body="&lt;p&gt;Conceptually, this is a lot like how we (humans) do add, subtract, multiply, etc multi-digit numbers. An 8-bit processor has 8-bit &quot;digits&quot; that it can concentrate on one at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we want to add 1234+5678, we do as follows: we add the two lowest digits (4+8=12), we write down the 2 in the 1s column of the answer, carry the 1. We add 7+3, plus the carried 1, to get 11. We write down the 1 (second digit of 11) in the 10s column of our answer, carry the 1... and so forth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: in the following paragraph, all numbers are base 10; when broken down into bytes, the high byte is first, and they are still shown in decimal; they are in brackets to keep them together, seperated by a comma. So (4,211) means a high byte with the decimal value 4, and a low byte with decimal 211. 4*256+211=1235.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An 8-bit processor can do the same, but it has 256 digits, which we would call 1 through 255, and 0. Don't be confused by bytes being written as 2 hex digits; this just saves us from needing only 16 different digits; an 8-bit computer has 256 different digits; each byte is one digit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it wants to add 1235 + 5678, each stored as 2 bytes (4, 211) + (22,46), it would add the &quot;1s column&quot;, which here is 211+46=257. Since it's an 8-bit processor, only the lowest 8 bits are kept; this comes out as 1. The processor does remember that there is a &quot;carry&quot; by setting the carry flag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sum (without carry) is stored as the lowest byte of the answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It then adds the 2 &quot;digits&quot; (bytes) in the &quot;tens column&quot; (256s column). 4+22=26, don't forget to add the carry, making 27. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer should be  two bytes: (27,1). 27*256+1=6913, which is correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A similar process can be applied by subtraction (possibly &quot;with borrow&quot;), multiplication, and division. If you think how you might do these yourself, for long numbers, an 8-bit processor might do a similar thing for larger numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this does not just apply to 16-bit arithmetic, but can be extended to any size number (of a fixed size).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These steps, of course, are part of the (machine code) program. Adding a multi-byte number would take several instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the above only applies to integers; floating point (e.g. 0.1) is more complicated.&lt;/p&gt;&#xA;" OwnerUserId="8797" LastActivityDate="2018-06-05T23:29:36.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6665" PostTypeId="2" ParentId="6662" CreationDate="2018-06-06T00:49:09.967" Score="3" Body="&lt;p&gt;The Wikipedia article about the BSD Unix version of the game (&lt;a href=&quot;https://en.wikipedia.org/wiki/Robots_(1984_video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robots&lt;/a&gt;) has a comprehensive list of the versions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;In the Jan-Feb 1976 issue of Creative Computing, a game called Chase was&#xA;published that bears a strong resemblance to robots. The author was &#xA;originally listed as &quot;Unknown,&quot; with modifications attributed to Bill Cotter.&#xA;&#xA;In 1983, Tim Hartnell and Nathan Butcher wrote a game in BASIC called Robot&#xA;Minefield, which involved fleeing from four robots on a small field of &#xA;landmines. The game was more difficult than robots since the player lacked &#xA;the ability to teleport. Moreover, robots could merge into each other &#xA;without being destroyed. In addition, the player could only move in four &#xA;directions (North, South, East, West) while the robots had the ability to &#xA;move diagonally. The game was played in real time; as the player pondered &#xA;his move, the robots would continue converging toward him. This version was &#xA;published in the 1983 Giant Book of Computer Games.&#xA;&#xA;In 1984, Johan Strandberg published a game called Daleks, for the Macintosh.&#xA;&#xA;In May 1985, a very similar game also called robots, written by Allan R. &#xA;Black, was posted to the Usenet newsgroup net.sources.games.&#xA;&#xA;In 1985, Robert Paauwe of Softstar Software developed a derivative called &#xA;Daleks, for DOS.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;etc.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2018-06-06T00:49:09.967" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6666" PostTypeId="2" ParentId="6637" CreationDate="2018-06-06T01:02:53.993" Score="0" Body="&lt;p&gt;I've written similar stuff to this back in '86 on a Commodore-16.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I did that was because I needed to interact with BASIC and the command line, and not screw up any machine code that was written with the in-built 1-pass assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is whoever wrote this needed to protect certain areas of memory while requiring the use of DOS.  S/He was probably coding on a tight budget and lacked professional tools to achieve their goal, so they had to be ingenious with workarounds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Makes complete sense to me - but obviously, nowadays I'd use proper tools. &lt;/p&gt;&#xA;" OwnerUserId="8799" LastActivityDate="2018-06-06T01:02:53.993" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6667" PostTypeId="2" ParentId="6662" CreationDate="2018-06-06T05:30:29.657" Score="2" Body="&lt;p&gt;I found an Integer BASIC version of Robots for the Apple II.  It bears the following comment:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;100 REM        *** ROBOTS ***&#xA;110 REM IDEA TAKEN FROM &quot;MORE BASIC&#xA;120 REM COMPUTER GAMES&quot;, EDITED BY&#xA;130 REM DAVID H. AHL, BY NATE TRUHER&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The book, by Creative Computing, is available &lt;a href=&quot;https://archive.org/details/More_BASIC_Computer_Games_1980_Creative_Computing&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  The &quot;Chase&quot; game on page 28 appears to be the inspiration.  The article on that page attributes the original version to Mac Oglesby, which the &lt;a href=&quot;https://en.wikipedia.org/wiki/Robots_(1984_video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia article&lt;/a&gt; doesn't mention.  The book also says the game was modified by Bill Cotter and further improved by Arnold Loveridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The version I found uses lo-res graphics, and is played with the joystick in real time (slowly).  There was also a IIgs version of Daleks, released as shareware.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2018-06-06T05:30:29.657" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6669" PostTypeId="1" AcceptedAnswerId="6687" CreationDate="2018-06-06T11:40:24.430" Score="5" ViewCount="448" Body="&lt;p&gt;&lt;a href=&quot;https://faqwiki.zxnet.co.uk/wiki/ZX_Spectrum_ULA#AMI_SAGA&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; has a note about a chip called AMI SAGA. Apparently it does the same job as the Ferranti ULA, but saves a little circuitry and runs cooler. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was this chip? Some kind of uncommitted logic array? Why would it run cooler, and save the chroma circuitry, and then why wasn't it also used in more ZX Spectrums?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-06-08T16:27:44.183" Title="What was the AMI SAGA and why wasn't it used it all ZX Spectrums?" Tags="&lt;zx-spectrum&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6670" PostTypeId="2" ParentId="5733" CreationDate="2018-06-06T12:01:09.570" Score="2" Body="&lt;p&gt;The only way I could use a batch of unused 720k disks, designated as '3.5&quot; - 2D, 135TPI, Double Sided, Double Density, 1MB (720K)' was to use a FULL format, not a Quick format. This took 11.5 minutes for each disk! On checking the properties, the capacity was given as 1,457,664 bytes, 1.38MB, but the free space was shown as 799,744 bytes, 781KB, and the used space was shown as 657,920 bytes, 642KB. This was under Windows 10, build 1803. If it is imperative to use these disks, then it's a possible solution, but not very quick or practical.&lt;/p&gt;&#xA;" OwnerUserId="8803" LastEditorUserId="79" LastEditDate="2018-06-08T22:54:57.960" LastActivityDate="2018-06-08T22:54:57.960" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6671" PostTypeId="1" AcceptedAnswerId="6674" CreationDate="2018-06-06T12:43:48.270" Score="32" ViewCount="3755" Body="&lt;p&gt;Looking at the Z80's architecture diagram, there is the obvious register file in pink near the middle of the diagram. But four of those registers are not usable by programmers. Those are &lt;code&gt;W&lt;/code&gt;, &lt;code&gt;W'&lt;/code&gt;, &lt;code&gt;Z&lt;/code&gt; and &lt;code&gt;Z'&lt;/code&gt;. So what operations did these registers participate in if they were not part of any program that could run on the Z80?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XkZjH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XkZjH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-06-10T00:18:07.680" Title="What are the registers W and Z inside a Z80?" Tags="&lt;z80&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6672" PostTypeId="2" ParentId="6671" CreationDate="2018-06-06T13:14:06.153" Score="19" Body="&lt;p&gt;Found here, &lt;a href=&quot;http://www.righto.com/2014/10/how-z80s-registers-are-implemented-down.html&quot; rel=&quot;noreferrer&quot;&gt;Down to the silicon: how the Z80's registers are implemented&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The WZ temporary registers&#xA;  The Z80 (like the 8080 and 8085) has a WZ register pair that is used for temporary storage but is invisible to the programmer. The primary use of WZ is to hold an operand from a two or three byte instruction until it can be used.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Edit: also worth noticing:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The diagram shows a separate incrementer for the refresh register (IR), an adder for IX and IY offsets, and a W'Z' register but those don't exist on the real chip&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="5139" LastEditorUserId="5139" LastEditDate="2018-06-07T06:46:11.280" LastActivityDate="2018-06-07T06:46:11.280" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="6673" PostTypeId="2" ParentId="6529" CreationDate="2018-06-06T14:27:29.307" Score="3" Body="&lt;p&gt;Many companies implemented departmental mini-computers such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/VAX&quot; rel=&quot;nofollow noreferrer&quot;&gt;VAX&lt;/a&gt; running VMS or Unix. This was just one example of an 80s style minicomputer. These were classical big 32-bit systems typically using multiple serial connected terminals like the VT100. There were also 16 bit systems such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-11&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-11&lt;/a&gt;. Natively they used hard-disks and hierarchical file systems for storage. However they supported many other formats for storage and data interchange.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One method used was the floppy disk. At least one model of VAX came with an 8&quot; floppy disk drive that was typically used for initial boot media and diagnostics. With some messing around this could be used for copying files to and from the host file system. The disadvantage is that such computers were often remote and kept locked up in a computer room so you had to ask someone with access to do the job for you (always took time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The classic, already mentioned by others was &lt;a href=&quot;http://www.columbia.edu/kermit/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kermit&lt;/a&gt;, a program using a serial protocol that allowed you to use an eight bit system such as an early 8-bit computer as a terminal and to make reliable file transfers. Kermit had the advantage that there were plenty of free implementations available for different systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many other communication programs would provide terminal emulation but implemented protocols such as &lt;a href=&quot;https://en.wikipedia.org/wiki/XMODEM&quot; rel=&quot;nofollow noreferrer&quot;&gt;XMODEM&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/YMODEM&quot; rel=&quot;nofollow noreferrer&quot;&gt;YMODEM&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/ZMODEM&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZMODEM&lt;/a&gt; for file transfer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To simplify transfer and to reduce time, usually files were compressed first. This is how format like ZIP started although there were several predecessors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was theoretically possible to use other protocols like UUCP, but the programs tended to be rather big in those days and sometimes cost money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disadvantage of serial links is that they would be limited by the speed of the communications lines. Again, distance was a major factor, so it was seldom that you would get above 19200 bits per second which would be slowed by the protocol to 1920 characters per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;People would often do their work on the minicomputer as it typically ran reliably with a properly backed up file system and then use cross compilers to build software to be debugged and run locally on the 8-bit microcomputer.&lt;/p&gt;&#xA;" OwnerUserId="5164" LastEditorUserId="5164" LastEditDate="2018-06-08T09:15:56.573" LastActivityDate="2018-06-08T09:15:56.573" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6674" PostTypeId="2" ParentId="6671" CreationDate="2018-06-06T15:19:16.400" Score="24" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But four of those registers are not usable by programmers. Those are &lt;code&gt;W&lt;/code&gt;, &lt;code&gt;W'&lt;/code&gt;, &lt;code&gt;Z&lt;/code&gt; and &lt;code&gt;Z'&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;First of all there is no &lt;code&gt;W'/Z'&lt;/code&gt;. There is only one &lt;code&gt;W/Z&lt;/code&gt; pair (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, ofc they are usable by programmers. They get used with every 16 bit value, much like &lt;code&gt;Temp&lt;/code&gt; and &lt;code&gt;ACU&lt;/code&gt; or the &lt;code&gt;Instruction Register&lt;/code&gt; (all the way on the left side) is used with every instruction.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So what operations did these registers participate in if they were not part of any program that could run on the Z80?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;W/Z&lt;/code&gt; register pair is used for temporary storage. Without it, no program using a 16 bit address could be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The primary use of &lt;code&gt;W/Z&lt;/code&gt; is to hold an operand from a two or three byte instruction until it can be used. The mechanics around &lt;code&gt;W/Z&lt;/code&gt; are inherited from 8080 times as they feature the same design (*2) and work exactly alike (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instructions with an absolute (*4) address will have to read this address during M2/M3, but don't need it before M4. So they have to save them somewhere. Lets take the memory cycles of a &lt;code&gt;LD A,(1234h)&lt;/code&gt; (load &lt;code&gt;A&lt;/code&gt; from address) as example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;M1 -&amp;gt; Output 'PC'; Fetch Opcode (3Ah) into Instruction Register&#xA;M2 -&amp;gt; Output 'PC'; Fetch Lower Address Byte (34h) into `Z` Register&#xA;M3 -&amp;gt; Output 'PC'; Fetch Upper Address Byte (12h) into `W` Register&#xA;M4 -&amp;gt; Output 'WZ'; Fetch Data Byte at 1234h into `A` Register&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are a few special cases:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;jump (&lt;code&gt;JP&lt;/code&gt;)&lt;/strong&gt; instruction does not load &lt;code&gt;WZ&lt;/code&gt; into the &lt;code&gt;PC&lt;/code&gt;, but fetches the target instruction in M4 much like a data byte and &lt;strong&gt;then&lt;/strong&gt; loads  &lt;code&gt;PC&lt;/code&gt; with &lt;code&gt;WZ+1&lt;/code&gt; (through the PC incrementer). Call works similarly. (*5)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;16 bit loads (e.g. &lt;code&gt;LD HL,(1234h)&lt;/code&gt;)&lt;/strong&gt; do use &lt;code&gt;WZ+1&lt;/code&gt; to load the second (higher) byte in M5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All &lt;strong&gt;exchange with (SP) (e.g. &lt;code&gt;EX (SP), HL&lt;/code&gt;)&lt;/strong&gt; do load &lt;code&gt;W/Z&lt;/code&gt; with &lt;code&gt;(SP+1)/(SP)&lt;/code&gt; during the exchange.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(there might be more; I just don't remember).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Further Reading:&lt;/strong&gt; &#xA;Programming the Z80 by Rodney Zacks describes this in great detail on page 87-91 (Get the &lt;a href=&quot;http://www.z80.info/zaks.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDF here&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - This picture holds a number of errors, not just the doubled &lt;code&gt;W/Z&lt;/code&gt;, but also mispositioned incrementers and alike.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Intel's 8085 inherited them as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Differences are only due to Z80-specific extensions like additional 16-bit instructions, but also Interrupt Mode 2 where &lt;code&gt;W&lt;/code&gt; is loaded with &lt;code&gt;I&lt;/code&gt; and &lt;code&gt;Z&lt;/code&gt; with the external supplied vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - &lt;em&gt;Explicit&lt;/em&gt; in Z80 terms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - And both (&lt;code&gt;JP&lt;/code&gt;/&lt;code&gt;CALL&lt;/code&gt;) show a nice dance around the &lt;code&gt;WZ&lt;/code&gt;-pole when an interrupt happens. Now, instead of loading the PC with &lt;code&gt;WZ+1&lt;/code&gt; the increment will be suppressed and &lt;code&gt;WZ&lt;/code&gt; goes directly into &lt;code&gt;PC&lt;/code&gt;. Next &lt;code&gt;WZ&lt;/code&gt; is loaded with the interrupt vector to be used (depending on the interrupt mode active) - &lt;em&gt;before&lt;/em&gt; continuing with the execution exactly like a call i.e. by pushing &lt;code&gt;PC&lt;/code&gt;, fetching the first instruction via &lt;code&gt;WZ&lt;/code&gt;and transferring &lt;code&gt;WZ+1&lt;/code&gt;into PC (IFF1/2 handling happened during interrupt acknowledge) - what a beautiful move, isn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-10T00:18:07.680" LastActivityDate="2020-06-10T00:18:07.680" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6677" PostTypeId="2" ParentId="6656" CreationDate="2018-06-06T18:08:23.217" Score="10" Body="&lt;p&gt;I was in college when the 8086 and 6502 came out, and took a digital electronics course at that time in which I designed a simple CPU using microprogramming techniques.   From studying the 8086 and 6502, I could imagine that they were microcoded, but there was no way to tell for sure from the outside.   Microcode, if it existed, was all burned into the chip and was not available to the outside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did a lot of programming on the PDP11.   There were lots of different models of the PDP11.  Most were implemented with microcode, each model had a different micro architecture, but they all implemented the same PDP-11 instruction set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read an article back in the day about a project at (I think) Carnegie Mellon where they took a PDP11/45, removed the microcode (which was in ROM)&#xA;and replaced it with RAM into which they could download custom microcode.&#xA;I thought that was incredibly cool at the time, and wished I could work on&#xA;that project.  I ended up going to Cornell for grad school, where the CS department had  bought a couple of PDP11/60s, which we used to run Unix.   The 11/60 had user-programmable microcode.   I did a project where I added a couple of instructions to the machine, but we had to work on the machines during off hours because we couldn't run Unix at the same time we were hacking microcode.  (I don't remember whether this was just departmental policy or if there was a technical reason.)    Anyway, after the department got some Vaxes, the PDP-11s weren't used much, and someone converted them into terminal servers, and someone else took the inner loop of the terminal server code and converted it into microcode, so these PDP-11s ended up being able to handle ten times the number of terminals than they could before.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some years later, I read about a marketing project that DEC had done to analyze the need for custom microcode.   The PDP-11/60 sold well, and the number one reason people gave for buying it (instead of a different model of PDP-11) was because of the user-writable microcode.   However, only 5% of the PDP-11/60s had the feature used!   Cornell was in the 5%.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, PDP-11s were not microprocessors, at least not the ones I am talking about.   But this should give a sense of what the world was like back then.   Microcode was something that people who implemented CPUs cared about, and normal programmers didn't imagine that they could touch it or that they should even care.  A few companies let their customers change it, but most didn't.&lt;/p&gt;&#xA;" OwnerUserId="8810" LastActivityDate="2018-06-06T18:08:23.217" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6678" PostTypeId="2" ParentId="5733" CreationDate="2018-06-06T19:46:19.373" Score="8" Body="&lt;p&gt;I found that more recent versions of Windows no longer support the /F: parameter.  However, (with internal floppy drives at least) I've been able to format 720K with /T:80 /N:9 for 80 tracks and 9 sectors.&lt;/p&gt;&#xA;" OwnerUserId="481" LastActivityDate="2018-06-06T19:46:19.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6679" PostTypeId="2" ParentId="5733" CreationDate="2018-06-06T21:18:28.443" Score="11" Body="&lt;p&gt;Note: As I don't have a computer with Windows 10, I do not know whether it helps there as well, but this worked for me on Windows 7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do have a Fuji USB floppy drive (Not sure if this is the same type, but read on). It worked well with 1.44M floppies, but did &lt;strong&gt;not&lt;/strong&gt; work for 720k disks with the original driver. The following procedure made it work:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Go to Device Manager, select the drive&lt;/li&gt;&#xA;&lt;li&gt;Select &quot;Update driver&quot;&lt;/li&gt;&#xA;&lt;li&gt;Select &quot;Search Computer&quot;&lt;/li&gt;&#xA;&lt;li&gt;Select &quot;Choose from list&quot;&lt;/li&gt;&#xA;&lt;li&gt;Select &quot;Show all devices&quot; (first option in list)&lt;/li&gt;&#xA;&lt;li&gt;Select &quot;NEC Systems&quot;&lt;/li&gt;&#xA;&lt;li&gt;Select &quot;NEC floppy disk drive&quot; (or similar)&lt;/li&gt;&#xA;&lt;li&gt;Install this driver&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This driver enabled 720k disk handling on my Fuji Floppy drive (Note, starting from Windows 7, the FORMAT command will no longer accept the /F:720 parameter - You need to instead specify number of tracks and sectors yourself like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FORMAT A: /T:80 /N:9&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The very same driver works fine with a cheap Chinese USB drive as well - So, I suspect it should work on quite a number of drive types.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-06-06T21:18:28.443" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6680" PostTypeId="2" ParentId="6656" CreationDate="2018-06-06T21:51:24.250" Score="5" Body="&lt;p&gt;There is at least one documented example of one hardware design being used as two different processors via customer specific microcode: Some very small, late implementations of IBMs S/370 (eg those sold as PC expansion cards) used an 68000 with a different microcode as the main CPU.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-06-06T21:51:24.250" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6681" PostTypeId="2" ParentId="6620" CreationDate="2018-06-06T22:11:11.947" Score="3" Body="&lt;p&gt;Another reason: Simple home computers used relatively slow (both in risetime and in clock frequency) circuitry which was also contained in a relatively small area (making the wiring a less effective antenna), so the chance of becoming an EMI nuisance due to a a partially-shielded/unshielded plastic case was smaller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, some home computer systems were marketed as toys and/or educational appliances. There is a possibility that in some markets, customers will have (rationally or subconsciously) associated metal cased equipment with electric shock hazards. This isn't entirely unfounded: There were more TN-C type house wiring systems in the past than these days, and these have a worst-case failure mode of setting any metal cased equipment - even if it is perfectly intact - connected to a group of outlets LIVE.&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="785" LastEditDate="2018-06-06T23:04:31.693" LastActivityDate="2018-06-06T23:04:31.693" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6682" PostTypeId="2" ParentId="6589" CreationDate="2018-06-06T22:48:58.840" Score="0" Body="&lt;p&gt;If an USB-parallel bridge won't work, the most promising way that is likely to help without modifying kernel level stuff (to emulate either a parallel port or ISA-style bus on GPIO pins) is using this kind of (pricey....) device with an actual parallel port card: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://arstech.com/install/ecom-prodshow/usb2isar.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://arstech.com/install/ecom-prodshow/usb2isar.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2018-06-06T22:48:58.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6683" PostTypeId="2" ParentId="6671" CreationDate="2018-06-07T06:56:05.613" Score="9" Body="&lt;p&gt;And what is called &quot;WZ register&quot; here, is even programmatically visible, partially of course. In other places, that register is called &quot;MEMPTR&quot; and in some commands, some bits of that register may leak into otherwise unused bits of the flag register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, &lt;code&gt;BIT n,(HL)&lt;/code&gt; command is known to leak bits 11 and 13 of &quot;WZ&quot; or &quot;MEMPTR&quot; into (unused) bits 3 and 5 of the flag register, what gives a way to know which values are left into MEMPTR by the previously executed command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This topic is more or less thoroughfully studied and some results are for example here: &lt;a href=&quot;https://gist.github.com/drhelius/8497817&quot; rel=&quot;noreferrer&quot;&gt;https://gist.github.com/drhelius/8497817&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another interesting fact: there are subtle differences in MEMPTR setup for some commands in some Z80 clones. Thus it is a way to detect Z80 clones programmatically.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-06-07T06:56:05.613" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6684" PostTypeId="2" ParentId="5533" CreationDate="2018-06-07T15:22:04.300" Score="3" Body="&lt;p&gt;You can install xp in IDE mode and install the AHCI drivers afterwards, I did this on my netbook several times. I think it goes something like:&#xA;Set disk controller to IDE mode in bios, and install XP.&#xA;In device manager go to the disk controller and manually change the driver to the AHCI one.&#xA;Reboot into bios and change disk controller to AHCI mode.&#xA;Save and reboot, XP should now load sucessfully.&#xA;If you miss any step you will likely get the BSOD.&lt;/p&gt;&#xA;" OwnerUserId="8819" LastActivityDate="2018-06-07T15:22:04.300" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6685" PostTypeId="1" CreationDate="2018-06-07T15:35:00.800" Score="13" ViewCount="7097" Body="&lt;p&gt;Ok so I have an old laptop with only a floppy drive. It came with windows 95 on it but suffered from some terrible BSODs that I could not resolve. I figured I would just download some windows 95 install disks and reformat it, but apparently those disks were a special type and format that held more than 1.4mb. All the floppies I have are incapable of being formatted that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any other way to make windows 95 install disks that fit onto standard disks? Or is there some way I can split these into smaller files and then copy them all onto the hd and then join them up again and install it that way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I currently have windows 3.11 installed.&lt;/p&gt;&#xA;" OwnerUserId="8821" LastActivityDate="2018-06-08T06:31:52.723" Title="Installing Windows 95 by floppy?" Tags="&lt;floppy-disk&gt;&lt;windows-95&gt;" AnswerCount="4" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6686" PostTypeId="2" ParentId="6685" CreationDate="2018-06-07T16:15:07.597" Score="24" Body="&lt;p&gt;These are &lt;a href=&quot;https://en.wikipedia.org/wiki/Distribution_Media_Format&quot; rel=&quot;noreferrer&quot;&gt;Distribution Media Format&lt;/a&gt; disks, storing 1.68 MB of data instead of the usual 1.44 MB (on high-density 3.5” disks).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a couple of strategies you can use:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;You can create floppies with the original contents of the installation disks. If you’re running Windows, &lt;a href=&quot;http://www.winimage.com/winimage.htm&quot; rel=&quot;noreferrer&quot;&gt;WinImage&lt;/a&gt; is supposed to be able to write such images to floppies. Under Linux, you can format DMF disks using &lt;code&gt;fdformat&lt;/code&gt; and write the images directly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can copy the images’ contents to a directory (&lt;code&gt;W95INST&lt;/code&gt; for example) on the laptop’s hard drive, if you have some other way of copying files there, and then run &lt;code&gt;SETUP&lt;/code&gt; from the hard drive. To copy the files, you could for example use a serial or parallel cable with &lt;code&gt;INTERSRV&lt;/code&gt; and &lt;code&gt;INTERLNK&lt;/code&gt; under DOS, or extract the drive from the laptop and connect it to another system. Using floppies to do this is also possible but will be a bit more involved since most of the files on the installation disks are larger than standard floppies, so you’ll need to split them.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-06-07T16:15:07.597" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6687" PostTypeId="2" ParentId="6669" CreationDate="2018-06-07T16:19:31.950" Score="6" Body="&lt;p&gt;There doesn't seem to be an awful lot of information available about the AMI SAGA.  What we do know is this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It was designed as a replacement for the traditional Ferranti ULA that most Spectrums were based on&lt;/li&gt;&#xA;&lt;li&gt;It was produced by American Microsystems, Inc, who specialized in CMOS gate arrays, and is therefore presumably CMOS rather than the current-mode logic (!) design of the Ferranti ULA.  Current-mode logic is renowned for being fast but using a lot of power (its close relative, ECL, was used in the Cray-2 supercomputer, which used 150kW of power and had to be kept immersed in fluorinert for cooling), while CMOS logic is known for its low power consumption, which is probably why the AMI gate array runs cooler.&lt;/li&gt;&#xA;&lt;li&gt;The design was abandoned due to a &lt;a href=&quot;https://spectrumforeveryone.com/technical/zx-spectrum-models/&quot; rel=&quot;nofollow noreferrer&quot;&gt;timing issue with the DRAM interface&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-06-08T16:27:44.183" LastActivityDate="2018-06-08T16:27:44.183" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6688" PostTypeId="2" ParentId="6685" CreationDate="2018-06-07T20:09:38.040" Score="4" Body="&lt;p&gt;As Stephen Kitt mentioned, if you have enough floppies, you can make a ZIP file of the installation directory and span it over several floppies. This way you can use whatever disks you happen to have hanging around and don't have to worry if they contain bad sectors as much (those disks simply will hold slightly less.) As the CAB files are already compressed, don't worry too much about compression levels: the difference between level 0 and level 9 will be very small. An additional benefit is that PKUNZIP will tell you if there are errors in the archive, so you don't end up with corrupted installation files on the other end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, as you mentioned getting blue screen errors previously, I would look into why you got the the errors in the first place before installing Windows 95, as they could be indicative of hardware issues.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2018-06-07T20:09:38.040" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6689" PostTypeId="2" ParentId="6685" CreationDate="2018-06-07T23:25:14.907" Score="-5" Body="&lt;p&gt;I think you have a bigger problem here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The expected lifespan of computers is around 5 years. Parts may be designed to last 10 years or so. Your laptop though must be at least 25 years old. I'm frankly amazed that it works at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have all the data transferred off the hard drive? If not, do it now! Hopefully you can connect the hard drive to your regular PC, or you can back up files to floppies between BSODs. Either way, get that data somewhere else, because your entire laptop and all its data could die permanently at any time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And also think about how much you value your time. A new netbook costs peanuts, and even a moderate-spec laptop isn't that expensive. You could spend days fighting this and never have it working, because it's too far gone; or you could just buy another PC. If you're trying to get it working out of curiosity, I suggest you try Ubuntu Linux instead as an extra layer of curiosity, and also because you can get that freely, unlike Windows.&lt;/p&gt;&#xA;" OwnerUserId="6749" LastActivityDate="2018-06-07T23:25:14.907" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="6690" PostTypeId="2" ParentId="6685" CreationDate="2018-06-08T06:31:52.723" Score="5" Body="&lt;p&gt;You need the disk images that use 21 floppies, not 13.  Originally Win95 came on 21 1.44mb disks, and it wasn't until later that it moved to the 13 DMF format disks.  However, do you really not have an old external CD drive laying around?  That would be far easier.&lt;/p&gt;&#xA;" OwnerUserId="8825" LastActivityDate="2018-06-08T06:31:52.723" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6691" PostTypeId="2" ParentId="6529" CreationDate="2018-06-08T10:31:01.107" Score="1" Body="&lt;p&gt;&quot;Back in the day&quot; I remember trying to transfer code and data via a 300baud modem using a BBS which limited clients to a 45-minute connection time! Fortunately, I knew the &quot;sender&quot; and got him to split it up into workable chunks.&lt;/p&gt;&#xA;" OwnerUserId="8830" LastActivityDate="2018-06-08T10:31:01.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6692" PostTypeId="2" ParentId="6603" CreationDate="2018-06-08T12:07:03.033" Score="3" Body="&lt;p&gt;And I'll go in another direction...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the main reason BASIC was ever &quot;popular&quot; on micros was not that everyone wanted to program, but that there was no other way to cheaply distribute software. There were attempts, I've seen records with the Kansas City Format bound into magazines in the late 1970s, and in the later days of the 8-bit era you saw a variety of ways to type in assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But for a good portion of the home computer era, the only way to get a program into your machine was either buy a tape/disk, or to type it in from a magazine. BASIC was a simple format for the later, as it was easily printed in existing magazine formats. So you had a synergy; BASIC was available on every machine of the era because BASIC was available on every machine of the era...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is why did that change? Well, the big reason is programming got too large. New programs for platforms like the PC went on for pages and pages, and was totally unrealistic to type in. At the same time, the price of disks was falling rapidly and sneakernet was simple enough (thus the many &quot;user groups&quot; who's major value was the disk collection) and, later, BBS systems.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-06-08T12:07:03.033" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6693" PostTypeId="1" CreationDate="2018-06-08T13:35:45.690" Score="18" ViewCount="2828" Body="&lt;p&gt;I've got an HP 200LX, which runs DOS 5.0 from ROM, and I'm using EMM200 to provide some EMS from the C: RAM disk (it uses the memory controller to directly map the &amp;quot;disk&amp;quot; blocks into memory, and thus doesn't rely on disk I/O for swapping).&lt;/p&gt;&#xA;&lt;p&gt;What options do I have for doing simple multi-tasking on this system? Note that I don't need actual concurrent/background execution. Suspending one program and switching to another is perfectly fine. Ideally, I'd like something that can make use of EMS, both for keeping itself out of the lower 640 KB as much as possible (I know it would need at least a few KB for an interrupt handler), and potentially for actual task swapping, instead of dumping to disk.&lt;/p&gt;&#xA;&lt;p&gt;These are the ones I know of:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;DOSSHELL&lt;/strong&gt; – Functionally, not too far from what I'm looking for, but I don't think it takes advantage of EMS, and the startup time is unacceptably long as it reads the whole disk structure into memory whenever launching or switching back.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Software Carousel&lt;/strong&gt; – I know this was always a favorite among 200LX users, but it's commercial software, and seems to still be available from Thaddeus Computing for about $50. I want to make sure there aren't better/equal options before spending the money.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DESQView&lt;/strong&gt; – Can this even be used on anything prior to the 386? And is it useful on such chips?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Do any of the old file management shells like Norton Commander or X-Tree provide this kind of functionality?&lt;/p&gt;&#xA;" OwnerUserId="4459" LastEditorUserId="15334" LastEditDate="2021-01-23T18:08:49.890" LastActivityDate="2021-01-28T02:54:57.473" Title="What are my options for multitasking in MS-DOS 5.0 on an 80186 with EMS?" Tags="&lt;ms-dos&gt;&lt;software-recommendation&gt;&lt;multitasking&gt;" AnswerCount="6" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6694" PostTypeId="2" ParentId="6693" CreationDate="2018-06-08T13:42:32.717" Score="21" Body="&lt;p&gt;I think your best bet given the circumstances is DESQview; it works fine on pre-386 computers, especially if you have EMS. (There’s lots of confusion around the DESQview/386 terminology; that was DESQview bundled with QEMM386, and the 386-specific part was QEMM386, not DESQview.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?62341-DOS-Multi-Taskers&quot; rel=&quot;noreferrer&quot;&gt;This VCF thread&lt;/a&gt; has pointers to other tools, including concurrent versions of DOS, but they would be less useful in your case since you have DOS in ROM.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-06-08T13:42:32.717" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6695" PostTypeId="2" ParentId="6693" CreationDate="2018-06-08T13:42:35.890" Score="14" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Suspending one program and switching to another is perfectly fine &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;GEOS may be well suited to your purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It runs more famously on the Commodore 64, but it was ported to DOS also. It predates Windows IIRC so it should run nicely on your setup.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-06-08T13:42:35.890" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6696" PostTypeId="2" ParentId="6693" CreationDate="2018-06-08T18:24:59.110" Score="13" Body="&lt;p&gt;Windows 2.x or 3.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Real mode Windows is able to run DOS applications and switch between them, but not able to present them in a window or run them concurrently as the 386 version.  Also, don't trust Wikipedia on the shortcomings of Windows on an 80186: I used Windows 3.0 extensively on my school's 80186-based PCs and I can assure you that the assertion that &quot;[a]lmost all applications designed for Windows 3.0 had to be run in standard or 386 enhanced modes&quot; is false.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-06-08T18:24:59.110" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6697" PostTypeId="2" ParentId="6693" CreationDate="2018-06-09T00:25:38.630" Score="-2" Body="&lt;p&gt;You can try writing TSR program to achieve multitasking in some crude way ;-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Terminate_and_stay_resident_program&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Terminate_and_stay_resident_program&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8836" LastActivityDate="2018-06-09T00:25:38.630" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6698" PostTypeId="2" ParentId="5733" CreationDate="2018-06-09T10:12:31.427" Score="2" Body="&lt;p&gt;I worked for a commercial reseller of similar machines back in the early 90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The combination of BIOS and DOS of those machines at the time did not recognise/support formatting in 720KB, but the hardware/DOS was able to use those formats  &lt;em&gt;after&lt;/em&gt; the diskettes were formatted on those new formats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time, I wrote a routine for formating 720KB diskettes in assembly or C using BIOS calls (can't remember). My employer was more than happy pre-formatting diskette boxes for customers and charging a small additional fee.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect also @BrianKnoblauch idea of format with /T:80 /N:9 might work, &lt;em&gt;if&lt;/em&gt; max capacity checking does not get in the way.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2019-09-30T04:28:54.807" LastActivityDate="2019-09-30T04:28:54.807" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6699" PostTypeId="1" CreationDate="2018-06-09T19:38:12.587" Score="7" ViewCount="242" Body="&lt;p&gt;Among the many developed but never released software that Commodore developed for the Amiga there should be two applications, called AppShell and AppObject. What were these? Did anyone ever saw or used them?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2018-06-10T16:26:45.117" Title="What did Commodore's AppShell and AppObject do?" Tags="&lt;amiga&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6700" PostTypeId="1" AcceptedAnswerId="6701" CreationDate="2018-06-09T21:53:52.780" Score="10" ViewCount="3232" Body="&lt;p&gt;Ok, I'll admit I'm out of my element on this one.  I'm an Atari/Commodore/Apple guy, but I have this Tandy color computer kicking around and a spare Amdek Composite monitor and I thought they would make a nice pair.  Unfortunately, it seems that the Color Computer (which I think is a CoCo2) only outputs RF?  That can't be right, can it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the generally accepted best practice for connecting a composite monitor to an old Tandy?  I know I could get a TV for it, or loop the RF through a VCR, but I was looking for a more elegant solution - I'm game to homebrew if the circuitry isn't too complex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did some half-hearted googling, but its more fun to ask here.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2020-04-04T20:20:33.573" Title="How to connect a Tandy Color Computer to a Composite Monitor?" Tags="&lt;video&gt;&lt;coco&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6701" PostTypeId="2" ParentId="6700" CreationDate="2018-06-09T22:34:34.837" Score="12" Body="&lt;p&gt;The TRS-80 Color Computer 1 and Color Computer 2 only supported RF output to a TV. It wasn't until the CoCo 3 that both composite and RGB output were added - RGB being essential for the new 80-column text and higher resolution graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naturally, there are composite monitor-compatible signals inside the CoCo 2, upstream of the in built RF modulator. And some people have created &lt;a href=&quot;https://thezippsterzone.com/2018/10/28/coco2-composite-a-v-modulator-replacements/&quot; rel=&quot;nofollow noreferrer&quot;&gt;custom PCB adapters&lt;/a&gt; to output composite. This PCB is cool in that it replaces the RF modulator in the CoCo 2 and can be installed without modifications to the computer case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the CoCo 3 is superior in many ways, not just the video output ports and resolution. But if you have no aspirations to run &lt;a href=&quot;https://en.wikipedia.org/wiki/OS-9&quot; rel=&quot;nofollow noreferrer&quot;&gt;OS-9&lt;/a&gt; software, then the CoCo 2 is good for the native software library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are more interested in making significant investment in the CoCo 2, rather than searching for a CoCo 3, then you &lt;em&gt;might&lt;/em&gt; be able to acquire the new &lt;a href=&quot;http://cocovga.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;COCOVGA adapter&lt;/a&gt;. This is a much fancier video enhancer that also includes new graphics modes, more colors, and 64-column text.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-09-02T20:38:22.270" LastActivityDate="2019-09-02T20:38:22.270" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6702" PostTypeId="2" ParentId="3293" CreationDate="2018-06-10T12:03:17.387" Score="-1" Body="&lt;p&gt;the only way to get a perfect emulation is using a real crt tv with winvice and the correct modeline to output an &quot;original&quot; c64 video-signal.&#xA;&lt;a href=&quot;http://forum.arcadecontrols.com/index.php?topic=138847.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://forum.arcadecontrols.com/index.php?topic=138847.0&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8840" LastActivityDate="2018-06-10T12:03:17.387" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6703" PostTypeId="2" ParentId="6699" CreationDate="2018-06-10T16:26:45.117" Score="5" Body="&lt;p&gt;From AppShell's author, David N. Junod in &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.amiga.programmer/3yiSXQKIc7I/s9mGpsDwU1IJ&quot; rel=&quot;noreferrer&quot;&gt;comp.sys.amiga.programmer&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;AppShell was the next generation after ModEngine.  ModEngine was an&#xA;  AmigaMail article that I wrote about modular event programming, and thought&#xA;  was put on a Fish Disk (although I can't locate it right now).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;ModEngine was next generation to work I had done before going to C= (I don't&#xA;  think I ever heard of anything called &quot;VIC&quot;).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Basically, AppShell provide a user-interface independant method of writing&#xA;  applications.  You would write the functions of your application according&#xA;  to the AppShell way and you would &quot;magically&quot; get an ARexx interface, CLI&#xA;  interface (like TxEd) and GUI.  AppShell would also give you most of the&#xA;  functionality of the Amiga User Interface Style Guide without you having to&#xA;  write the code.  There was also a companion appobjects.library that&#xA;  contained a number of neato GUI objects (multi-column listview, image&#xA;  buttons, etc.)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;AppShell was given away on the DevCon disks---so if you have them, you have&#xA;  AppShell.  It never reached a release state, because when I moved from CATS&#xA;  to Engineering, it was basically dropped.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-06-10T16:26:45.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6704" PostTypeId="1" AcceptedAnswerId="6707" CreationDate="2018-06-10T18:57:43.727" Score="8" ViewCount="1322" Body="&lt;p&gt;I have a 1541 drive and I want to make it spin but I don’t have a Commodore computer. I don’t need to read data, I would just like the drive to spin. Can I manually tell it to spin using a raspberry pi or something? &lt;/p&gt;&#xA;" OwnerUserId="7761" LastActivityDate="2018-06-13T10:57:46.987" Title="How to spin up 1541 drive without C64" Tags="&lt;commodore-64&gt;&lt;floppy-disk&gt;&lt;commodore&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6705" PostTypeId="1" AcceptedAnswerId="6706" CreationDate="2018-06-10T19:15:59.997" Score="63" ViewCount="8873" Body="&lt;p&gt;Every copy of Windows comes with a file named MORICONS.DLL which was first distributed with Windows 3.0. As far as I know, this file has not been changed since Windows 3.0. Some of the icons include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Borland C++&lt;/li&gt;&#xA;&lt;li&gt;Kid Pix&lt;/li&gt;&#xA;&lt;li&gt;Quicken&lt;/li&gt;&#xA;&lt;li&gt;All the Lotus products available at the time (Freelance Graphics, cc:Mail, 1-2-3, Magellan)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://winworldpc.com/product/gazelle-q-dos/3x&quot; rel=&quot;noreferrer&quot;&gt;Gazelle Q-DOS&lt;/a&gt; (the blue, file tree-looking icon. It's a directory manager program)&lt;/li&gt;&#xA;&lt;li&gt;Over a dozen WordPerfect-related icons&lt;/li&gt;&#xA;&lt;li&gt;FoxPro&lt;/li&gt;&#xA;&lt;li&gt;Borland Sidekick &lt;/li&gt;&#xA;&lt;li&gt;Paradox 4.0&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However, there are some I only vaguely recognize:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Another Gazelle product: Back-It or OPTune?&lt;/li&gt;&#xA;&lt;li&gt;Two other directory managers&lt;/li&gt;&#xA;&lt;li&gt;A Digital product related to X-Windows&lt;/li&gt;&#xA;&lt;li&gt;An XcelleNet product&lt;/li&gt;&#xA;&lt;li&gt;An shaded icon with the letters &quot;ADOS&quot; on it -- possibly a predecessor to OS/2?&lt;/li&gt;&#xA;&lt;li&gt;Several different variations of extremely '90s-looking abstract squiggles&lt;/li&gt;&#xA;&lt;li&gt;Other completely mysterious icons, many proclaiming themselves to be Microsoft products for DOS&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If anyone can provide more details on any of these icons, please let me know. You can check your own copy of Windows for the MORICONS.DLL file.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="15334" LastEditDate="2021-01-24T20:33:01.217" LastActivityDate="2021-01-24T20:33:01.217" Title="What are the software logos in MORICONS.DLL?" Tags="&lt;history&gt;&lt;windows-3.x&gt;&lt;identify-this-software&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6706" PostTypeId="2" ParentId="6705" CreationDate="2018-06-10T19:35:56.723" Score="40" Body="&lt;p&gt;You’ll find the mappings for these icons in &lt;code&gt;SYSTEM\APPS.INF&lt;/code&gt; in Windows 3; this is the file which is used by Windows Setup to detect pre-existing DOS applications on the system, and set up icons for them in Program Manager. Look for “moricons.dll” and the index of the icon you’re interested in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example the ADOS icon, index 101, corresponds to Access for DOS.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-06-10T19:35:56.723" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6707" PostTypeId="2" ParentId="6704" CreationDate="2018-06-10T21:37:16.003" Score="11" Body="&lt;p&gt;One way to do this is to program a Raspberry Pi to simulate an IEC bus controller, then drive the 1541 that way, via the 6-pin IEC port on the drive.  This is very similar to using a PC parallel port with a specially wired parallel-to-IEC cable, just using a Raspberry Pi instead of a PC, and using some general purpose I/O pins rather than the parallel port.  Once that's done you can save files, load files, format disks, or whatever, just by sending the appropriate commands down the IEC bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're willing to open up the drive and tinker with the internals you could probably drive the 'motor on' line directly.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-06-10T21:37:16.003" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6708" PostTypeId="2" ParentId="6704" CreationDate="2018-06-10T22:01:47.097" Score="10" Body="&lt;p&gt;The procedure to enable the spindle motor of a disassembled 1541 drive is given in the Service Manual for the drive. This is the procedure you would use to calibrate the motor speed.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;_MTR output from the PLA is active &quot;low&quot;. This signal is passed, through the current driver UD2, to the motor control PCB. When _MTR is &quot;low,&quot; Q1 is biased off, and Q2, Q3, and Q4 are biased on, allowing current flow through the spindle motor coil. Attached to the shaft of the spindle motor is an inductive tachometer that generates low level AC voltages, as the motor spins. The output of the tachometer is rectified by CR1-CR4. IC 1 monitors the output of the rectifier and adjusts the bias to Q2, which changes the bias on Q3 and Q4 to regulate motor current for a constant velocity. VR1 is a manual speed adjustment. The speed can be adjusted by watching the 60Hz strobe as the adjustment is made or loading the system test from the diagnostic disc.&#xA;  The Newtronics Motor Speed PCB is electronically the same as the ALPS Motor Speed PCB, but some of the discrete components have been integrated.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And here is the link to the &lt;a href=&quot;http://personalpages.tds.net/~rcarlsen/cbm/1541/1541_Service_Manual%20(1985).pdf&quot; rel=&quot;noreferrer&quot;&gt;1541 Service Manual&lt;/a&gt;. Just search the document for &quot;_MTR&quot;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-06-10T22:01:47.097" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6709" PostTypeId="2" ParentId="6705" CreationDate="2018-06-11T00:53:06.263" Score="134" Body="&lt;p&gt;I wrote a short python script that extracted the icons, matched them with entries from &lt;code&gt;APPS.INF&lt;/code&gt; and generated an HTML file. Some entries were missing, so I entered them manually, except for the generic MS-DOS icons which I marked as &quot;(no entry)&quot;. One icon was blank. You can find my &lt;a href=&quot;https://gist.github.com/isanae/caee5d1c727fd9fdc48a3d80055d3600&quot; rel=&quot;noreferrer&quot;&gt;moricons.py script on GitHub&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ysPkF.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ysPkF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1928" LastEditorUserId="1928" LastEditDate="2018-08-18T02:01:48.360" LastActivityDate="2018-08-18T02:01:48.360" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6710" PostTypeId="1" CreationDate="2018-06-11T17:02:14.533" Score="4" ViewCount="418" Body="&lt;p&gt;A number of games from the early 1990s appear to be protected with a DRM system developed by Rainbow Technologies Ltd. The system allows content in the games to be unlocked by sending the manufacturer a code and getting one in return.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system appears to make use of information in &lt;a href=&quot;http://staging.patentbuddy.com/PatentBuddy/Patent/5737424&quot; rel=&quot;nofollow noreferrer&quot;&gt;this patent&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1998 &lt;a href=&quot;https://books.google.co.uk/books?id=PN95ntYZXZsC&amp;amp;lpg=PA296&amp;amp;ots=-eg2atYA37&amp;amp;dq=Rainbow%20Technologies%20Ltd%20dos&amp;amp;pg=PA296#v=onepage&amp;amp;q=Rainbow%20Technologies%20Ltd%20dos&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;it advertised the ability to sell software over the internet&lt;/a&gt; (typically shipped on CD, only the unlock codes were sent via the internet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears to be some kind of public key crypto. The game/app has a private key and an &quot;install key&quot; that is generated during installation. The user sends the install key plus money to the manufacturer, and they send back an unlock key that unlocks selected features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been unable to find any more information on the system, how it works and if it was ever cracked.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="79" LastEditDate="2018-09-13T16:46:33.680" LastActivityDate="2018-09-13T16:46:33.680" Title="Rainbow Technologies Ltd DRM system for DOS" Tags="&lt;software&gt;&lt;copy-protection&gt;" AnswerCount="0" CommentCount="17" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6712" PostTypeId="1" CreationDate="2018-06-12T14:22:01.317" Score="4" ViewCount="154" Body="&lt;p&gt;I'm continuing my effort to track down the original author of the early game Chase. I have pretty much concluded it was written on the &lt;a href=&quot;http://GE-600%20series&quot; rel=&quot;nofollow noreferrer&quot;&gt;GE-635&lt;/a&gt; running &lt;a href=&quot;https://en.wikipedia.org/wiki/Dartmouth_Time_Sharing_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dartmouth Time Sharing System&lt;/a&gt; (DTSS) and &lt;a href=&quot;https://en.wikipedia.org/wiki/Dartmouth_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dartmouth BASIC&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is anyone aware of a list of DTSS software? I've poked about on archive.org, but nothing is coming up.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-06-12T16:03:31.707" LastActivityDate="2018-06-12T16:03:31.707" Title="DTSS software list?" Tags="&lt;basic&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6713" PostTypeId="2" ParentId="6704" CreationDate="2018-06-13T10:57:46.987" Score="3" Body="&lt;p&gt;Since the main drive runs for a short moment on reset (POST), the easiest method to keep it spinning is to pull down /RESET on the serial port (pin 6, middle to pin 2 (GND), at 4 o'clock position).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can simply use a serial-port reset button intended for the C64.&lt;/p&gt;&#xA;" OwnerUserId="5200" LastActivityDate="2018-06-13T10:57:46.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6714" PostTypeId="2" ParentId="5080" CreationDate="2018-06-13T17:40:17.200" Score="4" Body="&lt;p&gt;CPU clock speed isn't the whole story when it comes to performance - the entire system must be optimised to avoid bottlenecks.&#xA;The fastest CP/M machine I ever used was an SC84.  Only a 6 Mhz processor - but it had a memory-mapped VDU and a 512K ram-disk - and ran like greased lightning.  Easily out-performed an IBM XT when running Wordstar.  Happy days ...&lt;/p&gt;&#xA;" OwnerUserId="8878" LastActivityDate="2018-06-13T17:40:17.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6716" PostTypeId="1" AcceptedAnswerId="7760" CreationDate="2018-06-14T03:15:43.207" Score="7" ViewCount="423" Body="&lt;p&gt;How much did the Radio Shack TRS-80 Model III weigh? I imagine it must have been quite a lot, with the computer, monitor, power supply and up to 2 disk drives all in the same case, but I haven't been able to find an actual number anywhere.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-10-07T09:35:30.060" Title="How much did the TRS-80 Model III weigh?" Tags="&lt;trs-80-model-iii&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6717" PostTypeId="1" AcceptedAnswerId="6722" CreationDate="2018-06-14T06:31:59.983" Score="19" ViewCount="3768" Body="&lt;p&gt;From 1985 to 1990 Borland's Turbo Pascal was at least as popular as C for DOS systems. Turbo Pascal was especially popular because of it's ground breaking BGI graphics interface while C was stalled in standardization committees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What caused the rapid decline of Pascal support and almost universal adoption of C?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="15334" LastEditDate="2020-12-19T20:44:50.060" LastActivityDate="2020-12-19T20:44:50.060" Title="What caused the downfall of Pascal?" Tags="&lt;history&gt;&lt;programming&gt;&lt;c&gt;&lt;pascal&gt;&lt;borland&gt;" AnswerCount="6" CommentCount="10" FavoriteCount="8" ClosedDate="2018-06-14T18:55:16.073" ContentLicense="CC BY-SA 4.0" />
  <row Id="6718" PostTypeId="2" ParentId="6717" CreationDate="2018-06-14T09:01:35.417" Score="6" Body="&lt;p&gt;I suspect it was, at least in part, due to the offerings from Microsoft getting a lot better. &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Foundation_Class_Library&quot; rel=&quot;noreferrer&quot;&gt;MFC&lt;/a&gt; was launched in 1992, I believe, and that, combined with C++, made a huge difference in productivity, compared to the painful old world of C and Windows API.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, &lt;a href=&quot;https://en.wikipedia.org/wiki/Visual_Basic&quot; rel=&quot;noreferrer&quot;&gt;Visual Basic&lt;/a&gt; arrived in 1991, although it was widely available before then in beta, and that made life very easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I think Microsoft did a very good job of convincing developers and IT Managers that these new tools were the standard going forward and other options were &quot;risky&quot; and not guaranteed to be compatible.&lt;/p&gt;&#xA;" OwnerUserId="7808" LastActivityDate="2018-06-14T09:01:35.417" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6719" PostTypeId="2" ParentId="6717" CreationDate="2018-06-14T09:41:20.547" Score="27" Body="&lt;p&gt;I think it’s worth looking at the rise of Turbo Pascal (in particular) to understand its “downfall”. When Turbo Pascal was released, it has a number of advantages over the competition, regardless of programming language: it was fast, it produced (reasonably) fast programs, it came with excellent documentation, it included a full development environment with an integrated editor and compiler, it had decent support for the underlying platform (BGI as you point out, although it wasn’t all that good really), and it was cheap ($49.95 at launch, with an extra $100 distribution royalty at first). As a result, it was great for hobbyists, where it competed with BASIC, as well as professional developers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It took a while for other development systems to catch up, and all the while Turbo Pascal was getting better: ever faster, with more units (including Turbo Vision of course), support for programs over 64K, and on the “professional” side, Turbo Profiler, Turbo Debugger, etc. Turbo C and then Turbo C++ brought all that to the C side of things on DOS of course, but slightly later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for a long time Turbo Pascal was the development tool of choice at least for hobbyists and teachers. (Pascal as a language was already popular in education before Turbo Pascal; UCSD Pascal in particular was fairly popular on some other platforms such as the Apple II. Turbo Pascal is still used in DOSBOX in many universities’ software development classes...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in the 90s, &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2386/79&quot;&gt;Windows took off&lt;/a&gt;, and Borland took just a little too long to make the transition with its Pascal products. Turbo Pascal for Windows was released in 1991, the same year as Visual Basic, but it wasn’t all that good, and developers had to wait for version 1.5 in 1993 for a usable platform. By that point, C and C++ had cemented their positions as the languages of choice for professional development (Microsoft C and its SDK of course, then C++ with MFC in 1992, Zortech C++, and Borland C++ with its Windows IDE, OWL and Turbo Vision in 1992), and Visual Basic as the development environment of choice for hobbyists and bespoke application development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Delphi did allow Pascal (in some form) to make a comeback later on, in 1995-1996, in particular thanks to its nice database integration and rapid application development model. Delphi &lt;a href=&quot;https://www.embarcadero.com/products/delphi&quot; rel=&quot;noreferrer&quot;&gt;is still being developed&lt;/a&gt;, along with its C++ counterpart, &lt;a href=&quot;https://www.embarcadero.com/products/cbuilder&quot; rel=&quot;noreferrer&quot;&gt;C++Builder&lt;/a&gt;, and is still in use, in particular in Eastern Europe; some universities use it to teach programming. Delphi aficionados aren’t even limited to Windows any more — the &lt;a href=&quot;http://www.lazarus-ide.org/&quot; rel=&quot;noreferrer&quot;&gt;Lazarus IDE&lt;/a&gt; is a cross-platform, Delphi-compatible development environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this is very PC-centric, and that’s another reason for Pascal’s downfall: outside education, it never really made it off micros, and even there, once PCs took over, only Borland developed it. It had been the language of choice on Apple computers, especially on Lisas with the Lisa Workshop, and Macs with the Macintosh Programmer’s Workshop which initially only supported Pascal, but that didn’t last much longer either — CodeWarrior took over in the late 90s, with no Pascal support, and then Objective-C was the default language for Mac OS X. (Wirth, the inventor of Pascal, moved on to Modula and Oberon.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-06-14T11:54:51.883" LastActivityDate="2018-06-14T11:54:51.883" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="6720" PostTypeId="1" AcceptedAnswerId="6723" CreationDate="2018-06-14T14:05:51.330" Score="60" ViewCount="10100" Body="&lt;p&gt;There was actually a pretty big push among some vendors in the 1980's to have a dedicated Help Key (conveniently labeled as &lt;kbd&gt;Help&lt;/kbd&gt;). Atari introduced it in 1983, and kept it to the end. The Commodore Amiga had it from the A1000 onward. I'm sure there are other vendors who tried. To my knowledge, the support for the dedicated Help Key in applications was kind of spotty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it was the &lt;kbd&gt;F1&lt;/kbd&gt; key that would become the defacto standard for quickly accessing a &quot;Help&quot; function, and which we still follow today. How did this standard become popularized?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-11-17T15:59:21.323" LastActivityDate="2019-11-17T15:59:21.323" Title="Why did F1 become the Help Key?" Tags="&lt;history&gt;&lt;keyboards&gt;" AnswerCount="4" CommentCount="11" FavoriteCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6721" PostTypeId="2" ParentId="6720" CreationDate="2018-06-14T14:26:26.833" Score="12" Body="&lt;p&gt;As Ross Ridge mentioned in a comment, it was part of IBM's Common User Access guidelines. These guidelines were based in part on the behaviour of existing &quot;killer apps&quot; for PC - which at the time mostly meant office applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The spreadsheet software Lotus 1-2-3 used &lt;kbd&gt;F1&lt;/kbd&gt; for help from its first release in 1983, as can be seen in the manual available &lt;a href=&quot;https://winworldpc.com/product/lotus-1-2-3/1x&quot; rel=&quot;noreferrer&quot; title=&quot;Lotus 1-2-3 downloads&quot;&gt;here&lt;/a&gt;, and in the four years between its release and IBM releasing the CUA would become the preeminent spreadsheet application (&lt;a href=&quot;https://en.wikipedia.org/wiki/Lotus_1-2-3&quot; rel=&quot;noreferrer&quot; title=&quot;Lotus 1-2-3 Wikipedia page&quot;&gt;source&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="8689" LastEditorUserId="79" LastEditDate="2018-06-14T14:29:40.133" LastActivityDate="2018-06-14T14:29:40.133" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6722" PostTypeId="2" ParentId="6717" CreationDate="2018-06-14T14:32:08.267" Score="11" Body="&lt;p&gt;I don't think the answer is very complicated, but the scope and time-frame of the transition was much bigger than you indicate. This wasn't so much about what was happening in DOS/PC programming as it was about the slow but steady unification of scientific computing and mainstream/business computing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C Language, along with the Unix OS, grew to dominate scientific computing at about the same time that PC hardware was taking off and dominating all of mainstream computing. The move from workstations to PC's was inevitable because of economies of scale, but it would take all of the 1990's for commodity PC hardware to gain the performance increases needed to make it &quot;respectable&quot; for scientific computing. So, this long-term trend from workstation to PC hardware moved professional programmers off of their various RISC Unix platforms (Sun, HP, DEC, etc.) and onto x86. The programmers simply brought their preferred tool - the C Language - with them. The growth in the population of professional C/C++ programmers using PC's would then cement those as the most influential development languages on their new hardware platform.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-06-14T15:01:35.857" LastActivityDate="2018-06-14T15:01:35.857" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6723" PostTypeId="2" ParentId="6720" CreationDate="2018-06-14T14:47:07.120" Score="53" Body="&lt;p&gt;While general purpose function keys are something that had already been introduced in the 60s by manufacturers like Friden (&lt;a href=&quot;https://en.wikipedia.org/wiki/Friden_Flexowriter#End_of_product_line&quot; rel=&quot;noreferrer&quot;&gt;Flexowriter, 1965&lt;/a&gt;) or HP (&lt;a href=&quot;https://en.wikipedia.org/wiki/HP_9800_series&quot; rel=&quot;noreferrer&quot;&gt;9810A, 1971&lt;/a&gt;), it wasn't until IBM's 3270 that function keys were widely available. 3270 terminals are block-orientated, which means all keystrokes, thus all editing, are local. Only the whole screen can be sent back (*1). The &lt;kbd&gt;PF&lt;/kbd&gt; (and &lt;kbd&gt;PA&lt;/kbd&gt;) keys are an exception to this as they deliver short predefined messages directly to the mainframe (*2), allowing the (mainframe) program to respond directly to such a request.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/CICS&quot; rel=&quot;noreferrer&quot;&gt;CICS&lt;/a&gt;&lt;/em&gt; (developed in the late 60s) added &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_3270&quot; rel=&quot;noreferrer&quot;&gt;3270&lt;/a&gt; support (~1974), a help utility was added and by convention activated via &lt;kbd&gt;PF1&lt;/kbd&gt;. Due to the asynchronous nature of &lt;kbd&gt;PF&lt;/kbd&gt; key messages this enabled the addition of help information/screens to an existing application without modifying it (*3). Using &lt;kbd&gt;PF1&lt;/kbd&gt; became the de facto standard for mainframe applications, not just with IBM and CICS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the PC became available, many professional programs did follow the same practice, but it wasn't until 1987 when IBM published their &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Common_User_Access&quot; rel=&quot;noreferrer&quot;&gt;Common User Access (CUA) guidelines&lt;/a&gt; as part of the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Systems_Application_Architecture&quot; rel=&quot;noreferrer&quot;&gt;Systems Application Architecture (SAA) standards&lt;/a&gt;, that &lt;kbd&gt;F1&lt;/kbd&gt; as &lt;em&gt;Help&lt;/em&gt; became the 'official' standard.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, not entirely true as a terminal can be ordered to send back either the whole screen, all fields, only modified fields, or marked regions. But that's part of the high art of block terminal programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Sending a message to the host - no matter if it's a full screen or a function key - always generates an input interrupt requesting attention and delivering the data (when served). A &lt;code&gt;PF&lt;/code&gt; key delivers only two bytes of information (plus some header) which makes transmission, moving and handling way faster than a whole screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - CICS is a Transaction Monitor, something that PC developers might call an application framework - or a program/window manager, or even an operating system. It offers a backbone structure where individual programs are 'just' function modules loaded into this framework and executed upon messages from the monitor program - like incoming screen (user input), network messages, lost connection or the like. In fact, they might only get loaded on demand and unloaded after handling such a message.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much like a window manager can handle certain UI functionality without activating a user program, CICS can offer to handle (some) function keys without activating any user module. Doing help screens is one of these offers. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-06-15T15:15:49.367" LastActivityDate="2018-06-15T15:15:49.367" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6724" PostTypeId="2" ParentId="6717" CreationDate="2018-06-14T14:59:44.473" Score="3" Body="&lt;p&gt;One factor leading to the downfall of Pascal is that even though the major Pascal vendors on the PC and Macintosh both extended Wirth's language in similar ways, there was never any kind of &quot;official&quot; standard.  By contrast, a document was published around 1989 which called itself an official standard for C, even though its quality as a &quot;standard&quot; (a document which defines categories of objects and conformance to each) is abysmal at best.  The C Standard describes four categories of objects:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A Hosted Implementation that can correctly process at least one (possibly contrived and useless) program that exercises each of the points in the &quot;Translation limits&quot; section can call itself &quot;Conforming&quot;.  A Conforming implementation may impose arbitrary &quot;translation limits&quot; on source texts (e.g. no program may contain more than one line which has exactly twelve characters) without any obligation to document them, and may behave in arbitrary fashion if such requirements are violated.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A Freestanding Implementation can call itself &quot;Conforming&quot; under similar circumstances.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A program which every implementation would be required to process identically in the absence of the One Program Rule, and which at least one (possibly contrived) implementation does process correctly, can call itself &quot;Strictly Conforming&quot;.  Note that because of the OPR there's no requirement that a Strictly Conforming Program will be actually usable on any non-contrived implementations (e.g. one could use trillion-level-deep recursion within a Strictly Conforming Program if one can determine what output it should produce and contrive an implementation which checks whether it's given that exact source text and, if so, produces the correct output).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A &quot;Conforming&quot; program is just about any blob of text which yields a desired behavior when fed to at least one (possibly contrived) Conforming C implementation.  There are a few additional constraints, but they don't mean much.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The C89 document was useful when it was interpreted as a set of baselines and guidelines which should be followed when practical.  On the other hand, looking at Pascal implementations on the Macintosh and PC, it's clear that their vendors had developed a common shared understanding about how that language should work as well.  The fact that C could claim to have an &quot;official standard&quot;, however, gave it an edge which allowed it to take over.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-06-14T14:59:44.473" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6725" PostTypeId="2" ParentId="6717" CreationDate="2018-06-14T16:41:15.110" Score="4" Body="&lt;p&gt;The singular problem with Pascal in contrast to C was that C is a much more generic language than Pascal with a more flexible typing system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Pascal, notably, I/O is a first class concept, with direct, and &quot;special&quot;, support in the language. The original Pascal typing system wasn't flexible enough to handle outliers such the I/O system which need to support multiple types. &lt;code&gt;nil&lt;/code&gt; is a keyword in Pascal because of the strict typing issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In C, there was no concept of I/O, and when implemented, it was done using the standard C structures, functions, and typing system that had no special support within the compiler. The I/O system was no different than any other function call.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This made C both more extendable, and more portable in the large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, later Pascal implementations added better support to the compiler to handle special cases like I/O, and loosening up the type system. But the competing implementations just did things in different ways, thus limiting portability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While you couldn't trivially port a Mac C application to Windows, due to the dramatically different interfaces to the overall environment, you could readily port the business logic parts that did not have those dependencies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, since C the language left things like I/O up to the implementors, there was the potential for the world to run a gamut of implementation of core functionality. In fact a lament from the author of BDS-C, for CP/M, is that when he had his first exposure to C, the library he had access to differed in significant ways from what K&amp;amp;R eventually published. That's why his BDS-C compiler can't necessarily compile K&amp;amp;R compatible C programs (he had other incompatibilities as well, not simply the library). So, that was an early example of that phenomenon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But K&amp;amp;R came out early enough, 1978 I think, and it was such a simple book, &quot;heck, why not just implement this and move on&quot;. We need an I/O library, here's a I/O library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet, Windows, Mac, and Unix, all had their own, internal I/O libraries upon which Standard I/O were implemented upon. This demonstrated the flexibility of the language to let developers expose the functionality that they wanted to offer, yet still retain some modicum of portability for those who were interested in that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The early Pascals were very good. Borland's work, Think/LightSpeed Pascal on the Mac, plus all the work Apple did. UCSD P-System was quite advanced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, as with everything else, they were just a bit too early. C became popular because the industry had experience with Pascal, and folks enjoyed the portability and flexibility that it offered.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-06-14T16:41:15.110" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6726" PostTypeId="2" ParentId="6717" CreationDate="2018-06-14T17:10:35.450" Score="1" Body="&lt;p&gt;Pascal was the implementation language for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Accent_kernel&quot; rel=&quot;nofollow noreferrer&quot;&gt;Accent&lt;/a&gt; operating system and, for most of the user-mode software that ran on &lt;a href=&quot;https://en.wikipedia.org/wiki/PERQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;PERQ workstations&lt;/a&gt; in the 1980s. Except...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...It wasn't Pascal, it was &lt;a href=&quot;https://stacks.stanford.edu/file/druid:xn259nk9455/xn259nk9455.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PERQ Pascal&lt;/a&gt; which was enhanced in ways that made it significantly more friendly to software developers, while possibly making it harder for computer science profs to explain to intro-to-programming students.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I never had much contact with &lt;em&gt;real&lt;/em&gt; Pascal, so I can't really say how much more of a pain it would have been to write the PERQ software if we'd been forced to use it.&lt;/p&gt;&#xA;" OwnerUserId="588" LastActivityDate="2018-06-14T17:10:35.450" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6727" PostTypeId="2" ParentId="1084" CreationDate="2018-06-15T08:18:26.137" Score="2" Body="&lt;p&gt;A computer, even a modern one, relies on its &lt;strong&gt;BIOS&lt;/strong&gt; program to initiate boot-up. The BIOS code tells the CPU what steps must be taken in order to &lt;em&gt;pass control of the boot process&lt;/em&gt; to the desired operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to function, the BIOS chip contains code. That code has, for some years now, been firmware code. In other words, where the early IBM compatible computers used a BIOS chip that could not be reprogrammed, modern BIOS chips can be flashed with a firmware upgrade. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the BIOS controls the hardware in the initial stage of the bootstrap process, it can only pass control to those hardware devices it recognises, such as a local hard disk, floppy disk, or CD-ROM drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way to initiate booting from a non-recognised device (i.e. one for which the BIOS firmware has no code) is to write your own firmware upgrade for your BIOS chip. Certainly not trivial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As user dirkt has pointed out, control is being passed back to the BIOS, so although he is correct in saying that you do need to load an operating system which understands how to run from a USB-attached device (any O/S written after USB was introduced in 1998 will already contain the necessary code for that, but MS-DOS v6.22 - which dates from 1996 so doesn't know what USB is - is not going to succeed), what he hasn't made clear is that the key to solving your problem is to upgrade the BIOS firmware, a task requiring someone with professional-level programming ability.&lt;/p&gt;&#xA;" OwnerUserId="7778" LastActivityDate="2018-06-15T08:18:26.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6728" PostTypeId="2" ParentId="6720" CreationDate="2018-06-15T17:59:30.457" Score="8" Body="&lt;p&gt;I was working as a programmer at WordPerfect in the late 80's and someone there decided to leave it where it had been on the DG machine and put the help key on the &lt;kbd&gt;F3&lt;/kbd&gt; key on the PC also. Microsoft put it on the  &lt;kbd&gt;F1&lt;/kbd&gt; key in all their Windows products and it seemed everyone else followed suit. In later versions, WordPerfect also moved to the &lt;kbd&gt;F1&lt;/kbd&gt; key and I have not seen any deviations since. I always thought the  &lt;kbd&gt;F1&lt;/kbd&gt; key made more sense.&lt;/p&gt;&#xA;" OwnerUserId="8902" LastEditorUserId="6794" LastEditDate="2018-06-20T18:34:04.033" LastActivityDate="2018-06-20T18:34:04.033" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6729" PostTypeId="1" AcceptedAnswerId="6733" CreationDate="2018-06-16T03:22:44.133" Score="19" ViewCount="6461" Body="&lt;p&gt;What was the halt instruction in early CPUs such as the Z80 and 8080 used for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a &lt;a href=&quot;http://www.z80.info/z80syntx.htm#HALT&quot; rel=&quot;noreferrer&quot;&gt;description of the Z80 instruction&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The HALT instruction suspends CPU operation until a interrupt or reset is received.&#xA;  While in the halted state, the processor will execute NOP's to maintain memory refresh logic.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What use is it to enter a state that can only be exited via an interrupt or reset? Does a NOP loop use less power? Did operating systems (CP/M, Acorn MOS) or Basic variants make use of it? Did people writing assembly programs for the CPUs make use of it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aside: How would an interrupt cause an exit of the halt state? After executing the interrupt service routine, would the CPU not return to its previous instruction - the NOP loop?&lt;/p&gt;&#xA;" OwnerUserId="6672" LastActivityDate="2021-05-26T06:43:00.470" Title="Uses for the halt instruction?" Tags="&lt;programming&gt;&lt;assembly&gt;&lt;instruction-set&gt;&lt;microprocessor&gt;" AnswerCount="8" CommentCount="3" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6730" PostTypeId="2" ParentId="6729" CreationDate="2018-06-16T05:45:48.223" Score="5" Body="&lt;p&gt;The NOP loop is implicit, not explicit.  When an interrupt is received, the processor wakes, runs the ISR, then continues with the instruction after the HALT.  I presume, but can't verify&lt;sup&gt;1&lt;/sup&gt;, that the CPU consumes less power when HALTed.  Since switching is typically what consumes power in a chip&lt;sup&gt;2&lt;/sup&gt;, when the CPU is mostly idle it should draw significantly less power&lt;sup&gt;3&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The obvious use-case for this instruction is embedded systems though at the time low-power design wasn't typically a priority.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; All the references I have list only maximum power requirements&lt;br&gt;&#xA;&lt;sup&gt;2&lt;/sup&gt; Unless you're dealing with e.g. &lt;a href=&quot;https://en.wikipedia.org/wiki/Emitter-coupled_logic&quot; rel=&quot;noreferrer&quot;&gt;ECL&lt;/a&gt;&lt;br&gt;&#xA;&lt;sup&gt;3&lt;/sup&gt; On the Z-80 though, the amount of DRAM and ROM in the system seems to be the main determinant of power consumption&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-06-16T08:01:22.190" LastActivityDate="2018-06-16T08:01:22.190" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6732" PostTypeId="2" ParentId="6729" CreationDate="2018-06-16T07:29:06.143" Score="2" Body="&lt;p&gt;It's a holdover from earlier systems, which turned out to still be useful in some cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a program has finished, to stop the processor is a reasonable thing to do, isn't it? Then you can examine memory and registers, to confirm your program did the right thing, or to check the results etc. The computer should be doing nothing at that time, but should still be on. This kind of practise was described in user manuals of early computers with front panels, such as the PDP-8 or Altair 8080. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, in handhelds like the Game boy, similar instructions really stop something or turn something off, until the CPU resumes operation with an interrupt on the following frame for example. That's designed to be good for battery life. &lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-06-16T07:29:06.143" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6733" PostTypeId="2" ParentId="6729" CreationDate="2018-06-16T07:32:29.367" Score="25" Body="&lt;p&gt;The HALT condition does not (at least on retro CPUs) consume considerably less power than normal execution does.&lt;/p&gt;&#xA;&lt;p&gt;One very obvious use case is &lt;em&gt;synchronizing program flow with external (hardware) events&lt;/em&gt;. The main use case of the HALT instruction is thus &amp;quot;wait for an interrupt&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;A prominent example outside embedded systems is synchronizing video output with the beam flyback phase on a CRT to prevent flicker. Before actually writing new information to the frame buffer, the CPU is put into the halt state. A vertical blank interrupt triggers the CPU to go on writing (leave HALT), making sure the write occurs in a phase where no screen output takes place.&lt;/p&gt;&#xA;&lt;p&gt;Other uses might be waiting for interrupts from other I/O like, for example,  disk controllers. The Sinclair microdrive system used HALT to wait for the next sector on the drive come by.&lt;/p&gt;&#xA;&lt;p&gt;Other uses of HALT can be multiprocessor systems, or communication with a second CPU: Send off a command to your second processor, put the first one in HALT to wait until the second CPU sends an answer and signals this with an interrupt. Then put the other one to a HALT state. The Commodore C128 used this with its Z80 co-processor. For this to work properly, another important trait of the HALT (or the-like) instruction is that it signals &lt;em&gt;i don't need the bus at the moment other than for refresh&lt;/em&gt; - The HALT signal can, be (and is, in many architectures) used to isolate the CPU completely from the bus, if needed during that state.&lt;/p&gt;&#xA;&lt;p&gt;On Motorola CPUs, the HALT instruction was called STOP and took an argument: A value written to the status register (which holds, among others, the Interrupt mask) - So you could specify for &lt;em&gt;which&lt;/em&gt; interrupt to wait (Or, rather, the &lt;em&gt;minimum IPL&lt;/em&gt; (Interrupt Priority Level) that has to occur before execution resumes).&lt;/p&gt;&#xA;&lt;p&gt;As you can see from the above examples, HALT is, even if it is rarely used in application programs, an important instruction for OS writers. The exact program flow may differ a bit between CPUs, but the main flow would be:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Initiate some external process going on (like sending a command to the disk controller)&lt;/li&gt;&#xA;&lt;li&gt;Put the CPU in HALT state, also releasing the bus.&lt;/li&gt;&#xA;&lt;li&gt;Hardware outside the CPU can access the bus, use memory,...&lt;/li&gt;&#xA;&lt;li&gt;Once done, the external hardware triggers an interrupt&lt;/li&gt;&#xA;&lt;li&gt;CPU leaves HALT state&lt;/li&gt;&#xA;&lt;li&gt;CPU executes the ISR (if any)&lt;/li&gt;&#xA;&lt;li&gt;CPU continues with the next instruction after the HALT and can access the external hardware for the results&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="780" LastEditorUserId="15334" LastEditDate="2021-05-26T06:43:00.470" LastActivityDate="2021-05-26T06:43:00.470" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6734" PostTypeId="2" ParentId="6729" CreationDate="2018-06-16T08:33:14.233" Score="17" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What was the halt instruction in early CPUs such as the Z80 and 8080 used for?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Stopping the system in a known state to allow a clean restart/react to external sources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a very useful feature for embedded systems that react to external sources, but also as idle state for a more conventional kind of multitasking environment.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What use is it to enter a state that can only be exited via an interrupt or reset?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Several:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Interrupt response is guaranteed to be the shortest possible.&lt;/li&gt;&#xA;&lt;li&gt;Interrupt response time will be within exact (short) boundaries.&lt;/li&gt;&#xA;&lt;li&gt;No need for complex schedulers.&lt;/li&gt;&#xA;&lt;li&gt;Easy chaining of (interruptable) cleanup and management tasks.&lt;/li&gt;&#xA;&lt;li&gt;Enabling special power saving (or otherwise idle) states.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Beside all the benefits for system design, in embedded the first two might be the most important. A Z80 interrupt response (until the first instruction of the interrupt routine is executed) takes 11, 13 or 19 cycles depending on the interrupt mode - &lt;strong&gt;plus&lt;/strong&gt; the execution time of the instruction already in process. That adds anywhere up to 23 cycles. When waiting on a &lt;code&gt;HALT&lt;/code&gt; it will always be a maximum of 4, thus making interrupt response faster and more predictable.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does a NOP loop use less power?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, at least not within the Z80 itself. Maybe a bit due to a reduced load on RAM and other perhipherals, but again, it's rather negligible. This may differ on other CPUs. Especially complex ones can save quite a lot using similar instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the CPU also outputs a &lt;code&gt;/HALT&lt;/code&gt; signal to tell when waiting (*1,2). This can be used to disable other components, ROMs for example, as it's guaranteed that no access will be done while active.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did operating systems (CP/M, Acorn MOS) or Basic variants make use of it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not the common ones and not as part of some regular OS handling. Then again it was used in 'drivers' like (IIRC) within the ZX80 video handling to wait for a screen to start. Similar other home computers (MSX?) did/could use it to synchronize animation with frame rate (VBL Interrupt) and/or screen manipulation with line or timer interrupts (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many embedded environments did use &lt;code&gt;HALT&lt;/code&gt; as core function within the scheduler.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did people writing assembly programs for the CPUs make use of it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, quite a lot - at least when it  came to control/embedded applications.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Aside: How would an interrupt cause an exit of the halt state? After executing the interrupt service routine, would the CPU not return to its previous instruction - the NOP loop?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nop (SCNR) - When returning from the interrupt, the CPU continues with the next instruction. Keep in mind, it's not executing NOPs, it's just &lt;em&gt;like&lt;/em&gt; executing NOPs. HALT is a single instruction, and the PC will already have advanced to the next instruction after it has been read in &lt;code&gt;M1&lt;/code&gt;. Thus an accepted interrupt will push the address of the next instruction and when POPed, execution continues there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is very handy for a real time/multi tasking system to seperate housekeeping from handling external requests.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - On a 8080 D3 is signaling a halt state during status word output in T1 of M1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - On a 8085 S0/S1=0/0 signal a halt condition. Unlike 8080 and Z80 the 8085 also tristates all data, address and bus control signals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - While the 6502 did not feature a halt instruction (not until the 65C02), Atari's TIA for the VCS did implement hardware to make the CPU go into a forced halt state when accessing certain addresses much like a 'Wait for Line'-Halt instruction.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="278" LastEditDate="2018-06-16T21:31:58.327" LastActivityDate="2018-06-16T21:31:58.327" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6735" PostTypeId="2" ParentId="6729" CreationDate="2018-06-16T08:33:58.797" Score="8" Body="&lt;p&gt;Appart &lt;strong&gt;tofro&lt;/strong&gt;'s answer there where also another usages of &lt;code&gt;halt&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On &lt;strong&gt;ZX&lt;/strong&gt; (&lt;strong&gt;Z80&lt;/strong&gt;) &lt;code&gt;halt&lt;/code&gt; was &lt;strong&gt;very often&lt;/strong&gt; used to &lt;strong&gt;synchronize&lt;/strong&gt; with time. It would halt until the 50 Hz screen refresh interrupt occurs (from &lt;strong&gt;ULA&lt;/strong&gt;). This way the code was synchronized with the screen and can do things like overscan, border effects, multiply resolution or multitech color techniques etc ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another reason for synchronizing was to avoid contention, stabilizing FPS with screen refresh, provide timing control, etc ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastActivityDate="2018-06-16T08:33:58.797" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6736" PostTypeId="1" CreationDate="2018-06-16T12:59:05.563" Score="0" ViewCount="288" Body="&lt;p&gt;Processors used to be mechanical, using macroscopic switches and gears. Then they began to use valve switches. Then they used microscopic circuitry that you could only see with a powerful magnifying glass or a microscope. Now, they're using nanoscale transistors and all manner of quantum tricks so the manufacturers can cram more power into a smaller area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same can be said of storage media: there was a time when modified televisions and sound waves travelling through mercury were used as volatile storage. Now we have tiny little SRAM chips that can only be viewed with an electron microscope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern integrated circuits are designed taking into account quantum effects, down to the electron. There must have been a starting point for this, when an effect discovered, identified, isolated or explained using quantum mechanics was first used in hardware as a result of this discovery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At what point were quantum effects first deliberately designed into classical computing hardware (as a result of their aforementioned discovery, identification, isolation or explanation using quantum mechanics) in order to accomplish a specific effect that could not have been predicted using scientific models not involving quantum mechanics, so that the quantum effect occurs in normal use of the hardware?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2018-06-16T14:28:58.203" LastActivityDate="2018-06-16T15:22:14.467" Title="What was the first piece of hardware to utilise quantum effects?" Tags="&lt;history&gt;&lt;hardware&gt;" AnswerCount="2" CommentCount="12" FavoriteCount="1" ClosedDate="2018-06-16T21:40:56.890" ContentLicense="CC BY-SA 4.0" />
  <row Id="6737" PostTypeId="2" ParentId="6736" CreationDate="2018-06-16T14:11:51.663" Score="5" Body="&lt;p&gt;The question makes it sound as if quantum effects were something that is a natural extension of miniaturization. It might seem like it since quantum effects are usually considered minor, but that's not related. Quantum effects - and their handling can well be observed in macroscopic systems and need to be accounted for. So throughout history, it was way more a fight to avoid quantúm effects in computing than to 'use' them. Given that, that fight got intensified a lot with shrinking dimensions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Already tube computers had to work around quantum effect - or more correct benefited from work done before. In this case, it's about the &lt;a href=&quot;https://en.wikipedia.org/wiki/Field_electron_emission&quot; rel=&quot;nofollow noreferrer&quot;&gt;field emission&lt;/a&gt;. In a vacuum tube, a sufficiently strong electric field can make electrons tunnel out of an unheated kathode. This effect was discovered (and documented) several times between the 1880s and 1930, but it wasn't until Fowler and Nordheim published their &lt;a href=&quot;https://en.wikipedia.org/wiki/Field_electron_emission#Fowler%E2%80%93Nordheim-type_equations&quot; rel=&quot;nofollow noreferrer&quot;&gt;equations in 1928&lt;/a&gt;, explaining its quantum nature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, it's one of many &lt;a href=&quot;https://en.wikipedia.org/wiki/Quantum_tunnelling&quot; rel=&quot;nofollow noreferrer&quot;&gt;quantum tunneling effects&lt;/a&gt; - and electron tunneling is, due to this, maybe the best researched of all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for practical tube design, this meant that any filament (not only kathodes) must avoid pointy areas, as this would lead to higher local voltage, resulting in increased tunneling. this has been discovered by trial and error. So next time you look at a tube you might see way more than just wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and it's not just a thing of the past. The constantly lowered voltage of modern CPUs is also due to this effect (*1) as otherwise too many electrons would just tunnel through the isolation - an effect called leaking, and one of the main features to be handled when designing a new process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many more such effects in electronics that had to be taken into account during the development of today's computers. So pick your choice.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Among others effects, as lowering the voltage for example also lowers the current thus reducing the generated heat and stoping circuits from melting.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="780" LastEditDate="2018-06-16T14:42:55.087" LastActivityDate="2018-06-16T14:42:55.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6738" PostTypeId="2" ParentId="6736" CreationDate="2018-06-16T15:16:52.777" Score="3" Body="&lt;p&gt;This is extremely hard to answer. Very probably the first computer actually using quantum effects was the first one that worked electrically:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everybody knows that in order to be able to use electricity, you need conductive and non-conductive materials (a conductor and an isolator), to guide the flow of electrons where you want them, and keep them away from places you don't want them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern Physics is only able to explain why some materials are conductors and some aren't (and some are semiconductors) using quantum mechanics (see Fermi Energy, valence, electronic bands theory, band gaps). The &lt;em&gt;why&lt;/em&gt;, however, was never really relevant to Engineering (and isn't even strictly necessary today). While Physicists want to know exactly why something behaves like it does, Engineering is happy when something can predictably work (like copper being conductive, rubber not). So, even if nobody could really explain exactly what happened and why, Volta and Galvani were able to successfully build isolators and conductors, building the foundations for modern electricity. Very often, in order to build something, you do not need to understand what exactly happens, it is enough to be able to reliably reproduce an effect.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Zuse Machines and the Eniac which are considered the first &quot;real&quot; computers both used electricity, based on conductors and isolators - So it could be said they also were the first to actively use quantum effects.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-06-16T15:22:14.467" LastActivityDate="2018-06-16T15:22:14.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6739" PostTypeId="1" AcceptedAnswerId="6740" CreationDate="2018-06-17T18:18:34.337" Score="10" ViewCount="620" Body="&lt;p&gt;I'm curious about the transistor count of the VIC-II, the video chip in the Commodore 64. According to &lt;a href=&quot;http://visual6502.org/wiki/index.php?title=Chips_in_our_collection&quot; rel=&quot;noreferrer&quot;&gt;http://visual6502.org/wiki/index.php?title=Chips_in_our_collection&lt;/a&gt; the Atari 2600 TIA chip has 6193 transistors; each of the custom chips in the Amiga has about 20,000; I would intuitively expect the VIC-II to be somewhere in between those two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It occurs to me that one possible line of reasoning is based on the existence of 'bad lines' when the video chip reserves more bandwidth to read character data (40 bytes) and color data (40 nibbles), or more specifically, the fact that these occur only once every eight scan lines. That means the data must be stored in the chip for the next seven scan lines, until the next row of characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;40x8 + 40x4 = 480 bits. The usual count of transistors to store a bit is six transistors in a flip-flop, so that's 2880 transistors. There will also be access circuitry; let's round it up to 3000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That wouldn't be very informative lower bound on the chip size, but it is also said that about 70% of the chip area is spent on sprites. That brings the lower bound (if sprites and character/color buffers were the only components) up to 10,000 transistors. In practice, there are also other components; the actual size might be something like 15,000 transistors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have a more accurate estimate? If not, does the above reasoning look sound and the above estimate look in the right ballpark?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-06-17T20:51:46.530" Title="VIC-II transistor count" Tags="&lt;history&gt;&lt;hardware&gt;&lt;commodore-64&gt;&lt;video&gt;&lt;chip&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6740" PostTypeId="2" ParentId="6739" CreationDate="2018-06-17T20:51:46.530" Score="7" Body="&lt;p&gt;Looking at &lt;a href=&quot;http://mail.lipsia.de/~enigma/vic2r1/fullvic_lowquality.jpg&quot; rel=&quot;noreferrer&quot;&gt;this image&lt;/a&gt; from the link Brian H provided, there is an array of memory cells in the top left -- but it's smaller than you predicted: I count 240 bits (12 rows of 20 columns), so 1520 transistors + decode logic = about 1700 transistors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also what I take to be a smaller array of registers at the bottom right of the image: 4 registers x 8 bits each (these are built with much larger transistors, so are potentially output buffers that need to supply large amounts of power).  Next to that there's what seems to be a small mask ROM (Looks like about 56 bytes). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To the left of that and stretching up to the memory area are 4 major, distinctly different functional units.  Each of them seems to operate with 8 bits arranged horizontally across the image, and they feed into each other in some kind of pipeline.  They have approximately similar size, and taking one of them and examining one of its apparently 8x8x3=192 units there are approximately 6 transistors in them, so lets estimate all 4 of those units as 2000 transistors each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's connection logic between each of the four units, probably totalling about another 1000 transistors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also a section of random logic in the top right and stretching down the right edge of the image.  This looks to me to contain roughly another 2000 transistors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd therefore guess at about 13000 transistors total, which agrees with your rough estimate quite well.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-06-17T20:51:46.530" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6741" PostTypeId="2" ParentId="5767" CreationDate="2018-06-18T13:07:26.580" Score="3" Body="&lt;p&gt;While the 6809 had (and still has) technical applications, it lost out badly in the consumer market in the “&lt;a href=&quot;https://www.theregister.co.uk/2007/08/02/alan_suagr_nostalgia/&quot; rel=&quot;nofollow noreferrer&quot;&gt;mug's eyeful&lt;/a&gt;” department: if you were buying your kid a computer for Christmas and didn't know any different, why buy the Dragon which only had 0.89 megahertz when the ZX Spectrum came with 3½ of them?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While folks here know that processor speed isn't remotely comparable, to people buying and selling computers without a technical background, it mattered. That's why Alan Sugar was so fond of his mug's eyeful, the extra bits that make it look to the buyer that they're getting a lot for their money.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-06-18T13:07:26.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6742" PostTypeId="1" AcceptedAnswerId="6743" CreationDate="2018-06-18T13:33:38.353" Score="9" ViewCount="2215" Body="&lt;p&gt;Were external floppy drives for Atari ST and Amiga inter-compatible? &#xA;For example, Commodore 1541* had its own serial bus protocol. But what about the external 3.5&quot; DD floppy disk drive on 23pins D-Connector?&#xA;I would like to have the same one to use both on Atari ST (1040STE) and on my Amigas (500+1200).&#xA;And finally, what about the Amiga 1010/1011? Could I use it on Atari ST?&lt;/p&gt;&#xA;" OwnerUserId="8912" LastActivityDate="2018-11-03T01:23:19.543" Title="Were external floppy drives for Atari ST and Amiga inter-compatible?" Tags="&lt;amiga&gt;&lt;floppy-disk&gt;&lt;atari&gt;&lt;commodore&gt;&lt;atari-st&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6743" PostTypeId="2" ParentId="6742" CreationDate="2018-06-18T13:59:11.957" Score="8" Body="&lt;p&gt;On both the Amiga and the Atari, external floppy drives don’t contain any “intelligence”, and the connectors are pin-to-pin. However the Amiga uses a 23-pin D connector whereas the Atari ST uses a 14-pin DIN connector, so the external drives aren’t directly compatible, and the drives themselves are setup differently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You &lt;em&gt;could&lt;/em&gt; build a custom cable (with circuitry) which would allow an Amiga drive to be connected to an Atari ST, or vice-versa; you’d need to account for &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/108/79&quot;&gt;the different expectations&lt;/a&gt; (that answer describes the differences between a PC floppy drive and an Amiga drive, the differences between Atari ST drives and Amiga drives are similar — see &lt;a href=&quot;http://atari.org/hosted/quickfaq/stfaq_3.htm#31&quot; rel=&quot;noreferrer&quot;&gt;this guide&lt;/a&gt; for details), and you’d need to provide power to the Amiga drive. (External Amiga drives receive power through the 23-pin connector, whereas Atari ST drives have a separate power connector.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays I would use a floppy emulator instead, or a PC floppy with an adapter. In both cases, an adapter such as &lt;a href=&quot;http://ianstedman.co.uk/Amiga/designs/Floppy_Adaptor_V2/floppy_adaptor_v2.html&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt; would allow you to use the same drive with either an Amiga or an Atari (as long as you remember to configure the solder jumpers appropriately).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-06-18T14:25:56.620" LastActivityDate="2018-06-18T14:25:56.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6744" PostTypeId="1" AcceptedAnswerId="6746" CreationDate="2018-06-18T14:14:05.297" Score="8" ViewCount="923" Body="&lt;p&gt;You can bank out Kernal ROM in C64 using $01 register. This was preferred by game/demo coders who wants to employ self tuned routines and wants to expose ram 'underneath'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do &lt;code&gt;lda #$35 : sta $01&lt;/code&gt; and immediately have 16k additional memory. This was a special feature of 6510 CPU. The question is: Is it possible to disable Kernal in similar manner in Commodore PET, VIC-20 or 264 Series (e.g. Plus/4, 116 or 16) Computers?&lt;/p&gt;&#xA;" OwnerUserId="3422" LastActivityDate="2018-06-18T22:35:39.327" Title="Is it possible to bank out Kernal in Commodore PET, VIC-20 or 264 series computers?" Tags="&lt;commodore-64&gt;&lt;commodore&gt;&lt;commodore-pet&gt;&lt;vic-20&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6746" PostTypeId="2" ParentId="6744" CreationDate="2018-06-18T14:40:17.137" Score="12" Body="&lt;p&gt;You cannot do that on the VIC-20; not only is no such feature provided by the built-in hardware but there's also no ROMDIS signal on the memory expansion bus or anything else similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PETs with a 64kb upgrade have a register at &lt;code&gt;$FFF0&lt;/code&gt; for memory selection that allows the ROMs to be paged out (see e.g. &quot;2.2 Control Register&quot; in &lt;a href=&quot;http://www.6502.org/users/andre/petindex/local/pet-io-2.txt&quot; rel=&quot;noreferrer&quot;&gt;this document&lt;/a&gt; — the 8096 is an official PET with 96kb of RAM that utilises that paging scheme).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TED machines (e.g. Plus/4, 116, or 16) permit selection of ROM or RAM at &lt;code&gt;$FF13&lt;/code&gt; (for more details see e.g. &lt;a href=&quot;http://mclauchlan.site.net.au/scott/C=Hacking/C-Hacking12/gfx.html&quot; rel=&quot;noreferrer&quot;&gt;this summary&lt;/a&gt; of the TED chip, particularly the register map at the bottom).&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-06-18T21:09:06.760" LastActivityDate="2018-06-18T21:09:06.760" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6747" PostTypeId="1" AcceptedAnswerId="6751" CreationDate="2018-06-18T14:58:32.187" Score="2" ViewCount="501" Body="&lt;p&gt;I have received a 386 mainboard with OPTI chipset. Possibly an early model, since it does not support cache.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chipset is labeled &quot;82C381P&quot; and &quot;Chipset2&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/f58Er.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/f58Er.jpg&quot; alt=&quot;OPTi 386 Mainboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8337" LastActivityDate="2018-06-18T20:17:35.217" Title="What make and model is this 386 mainboard?" Tags="&lt;identify-this-computer&gt;&lt;80386&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6748" PostTypeId="2" ParentId="2193" CreationDate="2018-06-18T15:05:07.690" Score="5" Body="&lt;p&gt;Static RAM is expensive in terms of size and early gate arrays didn't have much of it. In a fully custom ASIC design you could allocate more space for memory, but still uses up a large part of your die and you will need other various small memories too, so there's a trade-off to be made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In applications where a large palette was necessary, typically arcade games, they used external PROMs or RAMs to implement the palette as it was expected to occupy a large PCB. This relaxed the need for large memories in the custom parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For home computers and consoles the primary goal is to reduce cost (closely tied to pin count) and PCB space so it was more important to use on-chip memory for the palette.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To give you some idea of approximate memory sizes where the palette was on-chip:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Atari 2600 : 4 words of 7 bits (28 bits)&lt;/li&gt;&#xA;&lt;li&gt;SMS, NES : 64 words of 6 bits (384 bits)&lt;/li&gt;&#xA;&lt;li&gt;Amiga : 32 words of 12 bits (384 bits)&lt;/li&gt;&#xA;&lt;li&gt;Genesis : 64 words of 9 bits (576 bits)&lt;/li&gt;&#xA;&lt;li&gt;SNES : 256 words of 15 bits (3840 bits)&lt;/li&gt;&#xA;&lt;li&gt;PC Engine : 512 words of 9 bits (4608 bits)&lt;/li&gt;&#xA;&lt;li&gt;PC VGA video card's RAMDAC : 256 words of 18 bits (4608 bits)&lt;/li&gt;&#xA;&lt;li&gt;32X : 256 words of 16 bits (4096 bits)&lt;/li&gt;&#xA;&lt;li&gt;Saturn : 4096 words of 16 bits (64K bits)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On the whole they are all quite small due the competition of resources on the same die. It's worth noting that this spans a very long time in terms of technology, and the Saturn is definitely the odd one out. &lt;/p&gt;&#xA;" OwnerUserId="8734" LastEditorUserId="8734" LastEditDate="2018-06-18T15:30:48.357" LastActivityDate="2018-06-18T15:30:48.357" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6749" PostTypeId="2" ParentId="6742" CreationDate="2018-06-18T15:36:34.470" Score="5" Body="&lt;p&gt;The Amiga and Atari ST were not compatible on either the floppy media format or on their floppy drives. The wiring is completely incompatible between the computer and the external floppy drives, most notably because the Amiga external floppy gets power from the computer and the ST external floppy has in built power supply. Also the Amiga disk format is based on 11 sectors/track, whereas the ST uses 9 sectors/track (same as PC-DOS) To my knowledge, there were no manufacturers that ever came out with an external floppy drive to support both machines. My guess would be such a device was prohibitively expensive to produce and there was not much demand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, then, what are the alternatives? I would say the most convenient and low-cost configuration is an internal Gotek floppy emulator for the ST. Of course, you need an ST originally equipped with an internal floppy drive. The Gotek is a direct swap, and very inexpensive. You can pursue the same solution of replacing the Amiga's internal floppy too, and all models have one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to have the freedom to move the Gotek between multiple ST or multiple Amiga machines, then just acquire an external floppy drive compatible with the machine and swap out its internal floppy mechanism for the Gotek.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Really, these Gotek devices are a super solution for both machines. The only difference between them is the firmware loaded and possibly jumper settings. And the compatibility with disk images, and ease of copying between the Gotek and real floppy disks, is basically perfect.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-06-18T16:02:06.983" LastActivityDate="2018-06-18T16:02:06.983" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6750" PostTypeId="2" ParentId="2193" CreationDate="2018-06-18T16:12:51.020" Score="-1" Body="&lt;p&gt;The main limiting factor was memory bus bandwidth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both the Commodore 64 and Amiga are good examples of this. Their maximum resolutions are limited by the amount of memory bandwidth available - the system simply can't read data quickly enough to produce a higher resolution display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say that a hypothetical system can read 80 bytes per scanline. If each pixel requires one byte to select one of 256 colours, the maximum horizontal resolution is 80 pixels. If we reduce to 16 colours we only need 4 bytes per pixel, so a horizontal resolution of 160 is possible. At 4 colours we can manage 320 pixels per line, and at 2 colours we can do 640.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As well as the maximum amount of data that can be read, there is a trade off for performance. On the Amiga higher resolutions and more than 16 colours results in the video hardware needing more memory bandwidth, which is taken away from the CPU and graphics processor. Games and applications had to decide how much CPU and blitter performance they were willing to sacrifice to get more colours on screen.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-06-18T16:12:51.020" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6751" PostTypeId="2" ParentId="6747" CreationDate="2018-06-18T18:27:45.203" Score="8" Body="&lt;p&gt;This is my best guess, but it looks really close.  Could it be a Gigabyte GA-386PS?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This block diagram looks very similar:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Nj2wG.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Nj2wG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find the actual manual, but there are some jumper setting and connector details &lt;a href=&quot;http://stason.org/TULARC/pc/motherboards/G/GIGA-BYTE-TECHNOLOGY-CO-LTD-386-GA-386PS.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2018-06-18T18:27:45.203" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="6753" PostTypeId="2" ParentId="6744" CreationDate="2018-06-18T22:35:39.327" Score="1" Body="&lt;p&gt;While you can't do this on the VIC-20 at all, nothing is stopping you from programming your own ROM.  It would not be difficult to create a ROM-switching socket or adapter of some sort, &lt;em&gt;à la&lt;/em&gt; JiffyDOS, which does exactly this trick to let you switch from the custom high-speed-disk-I/O ROM to and from the standard ROM.  This trick would, of course, work on the other systems too if you did it correctly.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2018-06-18T22:35:39.327" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6754" PostTypeId="1" AcceptedAnswerId="6755" CreationDate="2018-06-19T00:39:13.473" Score="12" ViewCount="3875" Body="&lt;p&gt;The chronology of some early floppy standards was: 80&amp;nbsp;kB, 160&amp;nbsp;kB, 360&amp;nbsp;kB, 720&amp;nbsp;kB, 1.2&amp;nbsp;MB, finally 1.44&amp;nbsp;MB. (There were less common sizes such as 250&amp;nbsp;kB, 800&amp;nbsp;kB, 1&amp;nbsp;MB) mentioned by comments: 120&amp;nbsp;kB, 2.88&amp;nbsp;MB :) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last size (and still the most common today) is 1.44&amp;nbsp;MB. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Was the limitation speed, storage density, cost, format standards, user demands, royalties, patents, rivalry, something else?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Why did common floppies never advance past 1.4&amp;nbsp;MB in size?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/42lj4.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;5.25&amp;quot; disk and drive&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/42lj4.jpg&quot; alt=&quot;5.25&amp;quot; disk and drive&quot; title=&quot;5.25&amp;quot; disk and drive&quot;&gt;&lt;/a&gt;    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bFXKY.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;3.5&amp;quot; disk&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bFXKY.jpg&quot; alt=&quot;3.5&amp;quot; disk&quot; title=&quot;3.5&amp;quot; disk&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="637" LastEditDate="2018-08-19T20:04:30.130" LastActivityDate="2019-01-25T15:04:28.270" Title="Why did common floppies never advance past 1.4 MB in size?" Tags="&lt;hardware&gt;&lt;history&gt;&lt;floppy-disk&gt;" AnswerCount="8" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6755" PostTypeId="2" ParentId="6754" CreationDate="2018-06-19T01:33:30.417" Score="16" Body="&lt;p&gt;1.44 MB floppies actually had a maximum capacity of 2MB unformatted.  Getting anywhere close to that was impractical because slack had to be left at the end of each track to account for variations in motor speed, etc.  If you tried to pack too many sectors into a track you'd risk overwriting a first sector with its last one.  The same goes for sectors within a track and spacing between tracks.  By writing a complete track at a time using high-quality drives, higher densities could be achieved but this made the disk effectively read-only.  This was sometimes used by e.g. commercial software to pack more bits onto each disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Spinning the disks faster wasn't really an option due to the increased disk wear that would result coupled with the fact that the chips driving the drive couldn't keep up with the increased data rate (some systems streamed data to/from the floppy drive directly from the CPU).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As technology improved, higher densities disks such as the 2.88 MB ones you mentioned were later developed but the cost-per-bit just wasn't there.  By the time they came to market much larger and higher performance media such as Zip drives and CD-ROMs were being released.  Despite being technically feasible they just couldn't compete.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastActivityDate="2018-06-19T01:33:30.417" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6756" PostTypeId="2" ParentId="6754" CreationDate="2018-06-19T03:44:42.277" Score="1" Body="&lt;h2&gt;Backward Compatibility&lt;/h2&gt;&#xA;&lt;p&gt;In addition to the speed, capacity and other issues when comparing floppy drives to newer media such as Zip drives, floppy drives suffered from a need for backward compatibility. Anyone who worked with the AT 1.2M 5-1/4&amp;quot; floppies with their intermittent, at best, ability to write 360K floppies compatible with the XT knows what I am talking about.&lt;/p&gt;&#xA;&lt;p&gt;I suspect that may be why with 3-1/2&amp;quot; the increases were a straight doubling - 720K -&amp;gt; 1.44M -&amp;gt; 2.88M and not some odd jump like 360K -&amp;gt; 1.2M.&lt;/p&gt;&#xA;&lt;p&gt;Nobody wanted a drive that looked like it should be compatible and could read older media but couldn't reliably write older media so that it could be read by other (older) machines. I suspect much higher density floppies are possible but not with full backward compatibility.&lt;/p&gt;&#xA;&lt;p&gt;Zip drives didn't have this problem - you knew when you got one that the only way you could use it on another system was to install a Zip drive there too.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-06-19T04:29:13.033" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6757" PostTypeId="2" ParentId="6754" CreationDate="2018-06-19T08:35:53.770" Score="13" Body="&lt;p&gt;Increasing capacity to a couple of megabytes just wasn't worthwhile. By the time drives became good enough to reliably do it at low cost we were already well into the era of CD-ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Floppy disk's main advantage was that they were extremely cheap and widely compatible, and breaking that for the sake of a few hundred kilobytes just didn't make sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some did try, however. There was the &quot;SuperDisk&quot; format and the mildly popular LS-120 drive, which was a magneto-optical system. Zip disks were a similar form factor to floppies, and were also mildly popular for a time. But soon CD burners and eventually USB flash drives replaced them all at much lower cost and with near universal compatibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expanding on the cost issue, floppy drives are very simple and contain minimal electronics. They rely on a floppy drive controller in the computer itself to work. Almost all of those controllers didn't support higher densities so floppy drives with higher capacities usually had to use other interfaces, such as SCSI or IDE. That in turn meant that they were not well supported by the simple BIOS systems of the time and were usually not bootable. Again, CD and USB drives eventually gained BIOS boot capability due to being standardized and very common.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-06-19T08:35:53.770" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6758" PostTypeId="2" ParentId="6729" CreationDate="2018-06-19T10:49:29.860" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did operating systems (CP/M, Acorn MOS) or Basic variants make use of it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Sinclair Spectrum used the halt instruction in its &quot;event loop&quot;. After initialisation, it would execute a halt instruction that would be interrupted on every screen refresh until the user decided to run something. I've no idea why it used halt rather than a no-op loop, maybe they saved a few bytes, or it kept the bus free for other devices.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2018-06-19T10:49:29.860" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6759" PostTypeId="1" AcceptedAnswerId="6767" CreationDate="2018-06-19T11:14:45.143" Score="19" ViewCount="3732" Body="&lt;p&gt;I recently came across this question, &lt;a href=&quot;https://electronics.stackexchange.com/questions/16703/why-are-ic-pinouts-often-so-illogical&quot;&gt;Why are IC pinouts often so illogical?&lt;/a&gt;, which asks:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Another example - the Z80's data bus:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/L44Pn.png&quot; rel=&quot;noreferrer&quot; title=&quot;Z80 data bus&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/L44Pn.png&quot; alt=&quot;Z80 data bus&quot; title=&quot;Z80 data bus&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I mean, that one just makes no sense to me whatsoever. Not only are then in some seemingly random order, but you suddenly get +5V in the middle.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Unfortunately the question  is closed and locked, so no answer will ever be forthcoming.&lt;/p&gt;&#xA;&lt;p&gt;So, why &lt;em&gt;exactly&lt;/em&gt; was the power pin placed slap bang in the middle of the data pins? Does anyone who worked on the design know?&lt;/p&gt;&#xA;&lt;p&gt;Note: I'm not looking for a generic answer as supplied here &lt;a href=&quot;https://electronics.stackexchange.com/questions/8251/why-are-the-pinouts-of-lpc21xx-all-over-the-place&quot;&gt;Why are the pinouts of LPC21xx all over the place?&lt;/a&gt; but rather the precise reason given by the Z80 design team, with respect to the design of layer masks. Surely it can't have been that hard to get all of the data lines together, and in the correct order?&lt;sup&gt;1&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; What exactly got me to search out the above question was a recent board layout, that I was doing, which incorporated two &lt;a href=&quot;http://www.ti.com/lit/ds/symlink/cd4028b-mil.pdf&quot; rel=&quot;noreferrer&quot;&gt;CD4028&lt;/a&gt; ICs, and I found that the pin out of their data lines is just horrific.&lt;/p&gt;&#xA;" OwnerUserId="202" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-03-27T10:37:58.273" Title="Why is the Z80's supply pin in the middle of the data pins?" Tags="&lt;z80&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6760" PostTypeId="2" ParentId="6720" CreationDate="2018-06-19T12:48:30.490" Score="3" Body="&lt;p&gt;In addition to the 3270 terminals described by Raffzahn, there were also the 5250 range.  These were used by IBM's midrange systems: S/34, S/36, S/38, and AS/400.  The AS/400 lives on today but has been through many name changes: iSeries, System i, and now IBM i (that list might not be complete).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;They operated similarly to the 3270 terminals but they were not compatible.  They were also block oriented.  A typical screen contained a mix of literals, output fields, input fields, and both (input / output) fields.  The user could only enter to the input or both fields. The data would only be sent to the host when Enter or one of a limited number of other keys was pressed.  Depending on the key, all of the input data would be returned or just the event that the key had been pressed.  The Enter key always sends the data.  The function keys might or might not send the data at the programmer's choice.  A few other keys would cause the screen to be submitted, these would either always send the data (e.g. page keys) or never send the data (help key).  The reason that the help key did not send data is that sending triggered the simple local validation (e.g. required entry); if help triggered this then the user could not use help to find out why the data was invalid.  An annoying consequence was that when you exited help, you found that all of you entries had been lost.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All (at least all that I know) 5250 terminals had dedicated &lt;strong&gt;Help&lt;/strong&gt; keys.  SSA / CUA came in between the S/3x models and the AS/400.  Prior to that &lt;strong&gt;F1&lt;/strong&gt; was usually exit.  After that, &lt;strong&gt;F3&lt;/strong&gt; became exit and &lt;strong&gt;F1&lt;/strong&gt; typically duplicated &lt;strong&gt;Help&lt;/strong&gt; (but a mean programmer could define then differently).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most primitive of these terminals that I have encountered was the 5251.  Search for &lt;strong&gt;IBM 5251&lt;/strong&gt; for plenty of images.  These were huge and very heavy.  You could imagine driving a truck over them and they would survive.  We used to nickname them &quot;Russian TVs&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the older devices, some keys were odd by today's standards.  &lt;strong&gt;Enter&lt;/strong&gt; was where the right &lt;strong&gt;Ctrl&lt;/strong&gt; key is today.  The key in the position of the modern &lt;strong&gt;Enter&lt;/strong&gt; was &lt;strong&gt;Field Exit&lt;/strong&gt; which cleared the remainder of the current field and moved to the next.  It did not submit the screen to the host.  &lt;strong&gt;Page Up&lt;/strong&gt; and &lt;strong&gt;Page Down&lt;/strong&gt; were &lt;strong&gt;Roll Down&lt;/strong&gt; and &lt;strong&gt;Roll Up&lt;/strong&gt; with &lt;strong&gt;Roll Down&lt;/strong&gt; corresponding to &lt;strong&gt;Page Up&lt;/strong&gt; and vice versa.  The oldest models had no dedicated function keys.  There was a single key called &lt;strong&gt;Cmd&lt;/strong&gt;.  You pressed this followed by &lt;strong&gt;1&lt;/strong&gt; to &lt;strong&gt;9&lt;/strong&gt; (not on the numeric pad) for &lt;strong&gt;F1&lt;/strong&gt; to &lt;strong&gt;F9&lt;/strong&gt;.  Note followed by not together as &lt;strong&gt;Shift&lt;/strong&gt;, &lt;strong&gt;Alt&lt;/strong&gt;, or &lt;strong&gt;Ctrl&lt;/strong&gt; are typically used.  &lt;strong&gt;F10&lt;/strong&gt; was &lt;strong&gt;Cmd&lt;/strong&gt; and &lt;strong&gt;0&lt;/strong&gt;, &lt;strong&gt;F11&lt;/strong&gt; was &lt;strong&gt;Cmd&lt;/strong&gt; and &lt;strong&gt;-&lt;/strong&gt;, &lt;strong&gt;F12&lt;/strong&gt; was &lt;strong&gt;Cmd&lt;/strong&gt; and &lt;strong&gt;=&lt;/strong&gt;.    &lt;strong&gt;F13&lt;/strong&gt; through &lt;strong&gt;F24&lt;/strong&gt; were similar to &lt;strong&gt;F1&lt;/strong&gt; to &lt;strong&gt;F12&lt;/strong&gt; but shifted the second key.  So &lt;strong&gt;F16&lt;/strong&gt; was &lt;strong&gt;Cmd&lt;/strong&gt; and &lt;strong&gt;Shift+4&lt;/strong&gt; and &lt;strong&gt;F24&lt;/strong&gt; was &lt;strong&gt;Cmd&lt;/strong&gt; and &lt;strong&gt;Shift+=&lt;/strong&gt;.  This applied even on non-US keyboards where the shifted numeric keys might have different normal values.  In these days, it was typical to call then command keys rather than function keys.  Later terminals switched to a more modern style with a separate row of 12 keys labelled &lt;strong&gt;F1&lt;/strong&gt; to &lt;strong&gt;F12&lt;/strong&gt;.  Some had a second row for &lt;strong&gt;F13&lt;/strong&gt; to &lt;strong&gt;F24&lt;/strong&gt;.  &lt;/p&gt;&#xA;" OwnerUserId="7805" LastActivityDate="2018-06-19T12:48:30.490" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6761" PostTypeId="2" ParentId="6759" CreationDate="2018-06-19T14:01:14.990" Score="18" Body="&lt;p&gt;It's not a complete answer but per Ken Shirriff's hypothesis in &amp;quot;&lt;a href=&quot;http://www.righto.com/2014/09/why-z-80s-data-pins-are-scrambled.html&quot; rel=&quot;noreferrer&quot;&gt;Why the Z-80's data pins are scrambled&lt;/a&gt;&amp;quot;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[I]nstead of a single data bus, the Z-80 has a complex data bus that is split into 3 segments. [...] The motivation behind splitting the data bus is to allow the chip to perform activities in parallel. [...] The complex structure of the data buses is closely connected to the ordering of the data pins.&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;p&gt;The important thing to notice in the diagram above is that everything is packed together as tightly as possible to get the Z-80 to fit on the available silicon. The layout of the Z-80 was done by hand, with each transistor and connection manually positioned. Every possible trick was used to minimize space ...&lt;/p&gt;&#xA;&lt;p&gt;First, because the Z-80 splits the data bus into multiple segments, only four data lines run to the lower right corner of the chip. And because the Z-80 was very tight for space, running additional lines would be undesirable. Next, the BIT instructions use instruction bits 3, 4, and 5 to select a particular bit. This was motivated by the instruction structure the Z-80 inherited from the 8080. Finally, the Z-80's ALU requires direct access to instruction bits 3, 4, and 5 to select the particular data bit. Putting these factors together, data pins 3, 4, and 5 are constrained to be in the lower right corner of the chip next to the ALU. This forces the data pins to be out of sequence, and that's why the Z-80 has out-of-order data pins.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So you need 3, 4 and 5 in the lower right corner for efficient implementation of BIT, SET and RES. The rest he sort of hand waves away, but one could dare guess that 5v ends up in the middle because its just a lot easier for routing if power arrives in the middle of the die and that the other bits are arranged just as it was convenient to feed the random logic.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-06-19T19:30:15.777" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6762" PostTypeId="2" ParentId="6754" CreationDate="2018-06-19T14:39:30.970" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The chronology of some early floppy standards was: 80kb, 160kb, 360kb, 720kb, 1.2mb, finally 1.44mb. (There where less common sizes such as 250kb, 800kb, 1mb) mentioned by comments: 120kb, 2.88mb :)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There were not only many more, but also way relevant ones. Just think of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Disk_II#Disk_II&quot; rel=&quot;noreferrer&quot;&gt;Apple II's 140 KiB format&lt;/a&gt; which at one point might have been the most used one. Or Commodore's 1541 with its &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_4040&quot; rel=&quot;noreferrer&quot;&gt;170 KiB format&lt;/a&gt;, for sure outselling many PCs of the same time frame.&lt;/p&gt;&#xA;&lt;p&gt;Or &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_External_Disk_Drive#800K&quot; rel=&quot;noreferrer&quot;&gt;Apples 800 KiB format&lt;/a&gt; for the Mac - it took many years until the so called &lt;a href=&quot;https://en.wikipedia.org/wiki/SuperDrive&quot; rel=&quot;noreferrer&quot;&gt;SuperDrive&lt;/a&gt; could also read 1.44s - mainly for data transfer reasons.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The last size (and still the most common today) is 1.44mb.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really, as development already advanced when the 1.44s were making their way into the PC. At the time IBM introduced the 3.5&amp;quot; HD drives (1987) with their (somewhat) ill-fated PS/2, 2.88 ED drives where already available. It took many years to establish the 3.5&amp;quot; drive within the PC market, as its capacity increase over 1.2M drives was negligible, but more importantly they were incompatible - folding 5.25 disks wasn't a viable solution :))&lt;/p&gt;&#xA;&lt;p&gt;In fact, it may be useful to add machine type and region, as well as business area to qualify on what this claim is based, as for example in Japan the 2.88 drive is/was the most common one in PCs. Or take Apple's legacy-free iMacs, which was almost always sold with a SuperDisk able not only to do 1.44s, but also up to 31 MiB on standard floppies (and 120 or 240 MiB on dedicated diskettes). Similarly, certain business areas did see standard use higher density formats, like flopticals and Bernoulli (Zip) drives. Usually due to the fact that there was a great need for data exchange with large amount of data per item - most prominent here may be publishing.&lt;/p&gt;&#xA;&lt;p&gt;That's an incredible wide area putting atop a rather fuzzy definition (*1), so there may be many possible answers, so lets qualify it a bit and &lt;strong&gt;look at this in a greater detail.&lt;/strong&gt; The firstmost might be to clarify about what defines as a floppy &lt;em&gt;for this question&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;By Strict Compatibility&lt;/h3&gt;&#xA;&lt;p&gt;To qualify a followup must not only use the same technology (see below) but also the same media - or at least media that can be formatted and used with 'old' drives. I'm not really sure if this is intended by the question, as it obviously mentions 8&amp;quot;, 5,25&amp;quot; and 3,5&amp;quot; formats. Also by calling the 1.44s 'floppy', when, in other places &lt;a href=&quot;https://books.google.de/books?id=lDuHrN2rgVMC&amp;amp;pg=PA40&amp;amp;redir_esc=y#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;they where called 'stiffy'&lt;/a&gt; :))&lt;/p&gt;&#xA;&lt;h3&gt;By Technology Similar to the Mentioned Formats&lt;/h3&gt;&#xA;&lt;p&gt;This category would contain all devices using magnetic recording on exchangeable rotating media. There may be subcategories as to include exchangeable drives or not.&lt;/p&gt;&#xA;&lt;h3&gt;By Usage:&lt;/h3&gt;&#xA;&lt;p&gt;Here &lt;em&gt;any media that allows data exchange between machines by being physically carried (and meant to do so)&lt;/em&gt;. While this seams a bit wide and may even include punch cards, the addition of &lt;em&gt;allowing random access&lt;/em&gt; would already nail it down to what floppies where for practical purpose in the 80s and 90s.&lt;/p&gt;&#xA;&lt;h2&gt;A History of Exchange Media May Look Like This&lt;/h2&gt;&#xA;&lt;p&gt;(Starting with the 3,5&amp;quot;/1.44, and not counting tapes or large/mainframe removable drives that is)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;1981/2 3,5&amp;quot; Floppy got introduced/standardized&#xA;1982   10 MiB Bernoulli drive using flexible 5.25&amp;quot; media&#xA;1983          CD-ROM gets standardized by Sony/Philips&#xA;1984  720 KiB 3,5&amp;quot; drives became available to end users&#xA;1986          IBM used 720 KiB 3,5&amp;quot; drive with the IBM PC Convertible&#xA;1986   44 MiB Removable disk SQ555 introduced by SyQuest&#xA;1987 1440 KiB HD format introduced with the PS/2 line&#xA;1987 2880 KiB ED format introduced&#xA;1987   20 MiB Bernoulli II drives which later evolved up to 230 MiB&#xA;1990  650 MiB CD-R 'drive' from Philips (35,000 USD)&#xA;1991   20 MiB Floptical (sold as 21 MB)&#xA;1991   88 MiB SQ800 by SyQuest&#xA;1991          Creative Labs' SB Pro brings CD interfaces into mainstream PC&#xA;1994  100 MiB Iomega introduced the 100 MB ZIP drive&#xA;1995  135 MiB SQ135 by SyQuest&#xA;1995          HP introduced the 4020i as first CD-R writer under 1000 USD&#xA;1996  120 MiB LS-120&#xA;1996  230 MiB SyQuest EZFlyer&#xA;1996    1 GiB Jaz Drive (Removable Disk)&#xA;1997  240 MiB LS-240 - capable to write 30 MiB to a standard HD floppy&#xA;1998  144 MiB Caleb UHD144 drive&#xA;1999  200 MiB Sony HiFD&#xA;1999   40 MiB Iomega places the PocketZIP as media for consumer devices&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;After 2000, next to all development for floppy-like media dropped as CD-R and the upcoming DVD-R had taken over that niche.&lt;/p&gt;&#xA;&lt;p&gt;(A honorable mention should also go to MO drives as used in many professional backup solutions as well as the NeXT Cube - but not really much in the PC world. Together with CD-RW (Sony Mini-Disk and many solutions of easy to exchange disk drives under various *pack/*paq names)&lt;/p&gt;&#xA;&lt;p&gt;So even way before IBM adopted the 1.44 drive, floppies did reach not only higher densities, but also wide range use. And while the 1.44 HD format was often the basic drive, there were many differences even considering only 'simple' drives adhering to the 3,5&amp;quot; mechanics and compatibility with the HD format.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Already before 1990 the 2.88 ED format became the standard in Japan and most parts of Asia.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Floptical did gain some usage&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;During the late 90s and into the 2000s LS120/240 drives became widely used all around the world - again with great focus in Asia but also Europe. And as de facto standard drive for iMacs after 1998.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Last atempt here was the UHD144 and Sony's HiFD&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Unlike the 2.88and the LS drives, none of the later did gain any market hold.&lt;/p&gt;&#xA;&lt;p&gt;Similar in the non 3.5&amp;quot; HD compatible range of Syquest's removable disks and Iomega's Bernoulli/ZIP drives did gather a reasonable market share, but mostly as add on products (where 2.88 ans LS drives where also available as OEM choices).&lt;/p&gt;&#xA;&lt;p&gt;All of this development finally ended when CD-R (writable) - and especially their media - became available &lt;strong&gt;and cheap&lt;/strong&gt;. Mind you, where even the cheapest LS120 or UHD144 was 5 USD (and a ZIP still 10 USD), a (one time writable) CD-R got sold for less than 1 USD in a 25 pack.&lt;/p&gt;&#xA;&lt;p&gt;The same way price did help the ZIP drives to succeed over the more compatible and reliable LS120/240 drives, it got killed by the even cheaper CD-R. After all, outside serious and repeated data transfer, no one really needs to rewrite a disk.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was the limitation speed, storage density, cost, format standards, user demands, royalties, patents, rivalry, something else?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. Again, there were many improvements made, even when restricting it to the most narrow definition of a 3.5&amp;quot; media compatible with HD drives. And all of them have had a wide application selling hundreds of millions of drives, adhering to widely licensed and acknowledged standards&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;If at all, a business case can be made.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;For a serious look it might be good to rephrase from a seemingly technical question into one of usage. So when narrowing it down to the (more or less) standard PC and ignore most of the mentioned parts of the IT world, we may see three basic classes of users:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;(Large) Professional/Institutional installations where PCs were network connected. Here FDs were at most needed for initial installation and maintenance. In such installations FDs were often disabled or &lt;a href=&quot;https://www.arp.be/en/floppy-lock-9cm-3-5-drive-lock-20400-5050921&quot; rel=&quot;noreferrer&quot;&gt;otherwise locked&lt;/a&gt;. No need for any investment in bigger formats. (*2)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Small business (without the need for large chunk data exchange), here a FD was usually only needed for software installation. A rather rare task where handling of a dozen floppies was acceptable. While simple, incremental backup could be handled usually with compressed archives on floppies, only full backup might call for large removable media, but due the lack of any need for data exchange a wide variety of drives and standards have filled that nice. Ultimately CD and DVD writers have taken over the role for backup and data exchange - followed by an in-creep of network backup, formerly only found in large installations, due to the use of NAS systems.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Home use. To some degree similar to the small business case. Again it was the advent of the CD in 1991 that replaced the floppy as main installation media (And let's be serious, which home user did care enough to back up their machines?) - and in this case even as main run media when it came to games. After all, the inherent copy protection of a CD (at least before writers became cheap) was a major push to publish games on CD and for home users to buy machines with CD drives. Like before CD/DVD writers have taken, followed by flash drives (USB-Sticks) over plus various kind of online storage.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Again, not to forget, that flopticals (LS) and Bernoullies (ZIP) each sold many tens of millions of drives and quite a few companies (Dell, Compaq, Siemens, even IBM) offered such drives (usually LS) as standard setup with their machines. Not to mention the hundreds of millions of 2.88 drives sold in Japan and all over Asia.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why did common floppies never advance past 1.4mb in size?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Beside the fact that they did and there were other, larger standard exchange medias, depending on region, machine and business?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;, there was much development over all ranges in flexible magnetic media in 3.5&amp;quot; housings as well a with non flexible, non magnetic, non 3.5&amp;quot;, or even non rotating when it came to removable exchangeable media. And most of it was driven by open standards and patents, or closed but still successful designs, either accepted by major industrial players like IBM, Microsoft or Compaq.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Floppy is one of these seemingly simple and clear terms, that loses all definition when looking close.ly We all think we know what it is - until we go into details what is and what is not a floppy. Only 8&amp;quot; and 5.25&amp;quot;, where media and case is 'floppy' or may either be 'hard'? Does the head have to touch the surface or may it fly? And so on.&lt;/p&gt;&#xA;&lt;p&gt;*2 -  Even today this type stays without removable media - floppy drives are replaced by disabled drivers for storage over USB.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-25T15:04:28.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6763" PostTypeId="1" CreationDate="2018-06-19T14:39:58.330" Score="2" ViewCount="593" Body="&lt;p&gt;The building I work in has an MS-DOS computer that runs the building's air system. My boss has asked me to make it so that he can use smart devices to make adjustments remotely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How much would need to go into a solution for this? Is it possible? I assume I would either need to emulate the program on a more advanced computer or use some other more modern device to interact with the MS-DOS system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer is wired directly to the air system. In case it matters, it is a Dell Precision 386DX/33.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a software developer, but a wet-behind-the-ears one, so I'll understand technical responses despite being out of my depth.&lt;/p&gt;&#xA;" OwnerUserId="8918" LastEditorUserId="278" LastEditDate="2018-06-19T19:27:57.680" LastActivityDate="2018-06-19T21:57:22.270" Title="Smart computing into MS-DOS? Is it possible?" Tags="&lt;ms-dos&gt;&lt;old-hardware-adaptation&gt;" AnswerCount="4" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6764" PostTypeId="2" ParentId="6763" CreationDate="2018-06-19T14:58:41.197" Score="4" Body="&lt;p&gt;Caveat: I have a hard time to consider this an RC question, as it's as well about actual software development as it is about actual hardware and an actual job. Just because the target involves some 386 doesn't mean any retro knowledge is needed or a retro task at hand. Serial or network interfaces are still common technology, aren't they?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;First of all, as usual with this thing, you may want to define the ways that system can take/deliver information - in other words what are the measures to acquire data from and send commands to this machine?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have access to the source?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No? Then it may get time for hacking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any documented command interfaces (serial, Keyboard, Sensors)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No? That may need even more hacking and quite some prayers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without further knowledge about &lt;strong&gt;the whole system&lt;/strong&gt; in question - that is the total hardware (not just some base PC) as well as the software - it's at best guessing what can be done. Typical scenarios may be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If the application has interfaces for remote control (into the PC) use them - hopefully they are documented, otherwise add a few weeks of night shifts  (*1).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If not, does it at least accept keyboard commands and display information? If yes, writing a TSR capturing video data and inserting keyboard input on request from an external system (like via serial) might be a way ... hacking here we come.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If neither, maybe the PC is just controlling an embedded system to make it more versatile (nowadays called 'intelligent') - then your task could be replacing the PC with some newer machine offering the connections you need. Depending on the 'intelligence' of the application this might be anything but easy.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If everything fails, call someone who has done it before ... and ask you boss for a real budget first.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Bottom line, it depends on what system that is (again, &lt;em&gt;system&lt;/em&gt;, not just the PC model), what you want to do, what is supported thereof and most of all, what's your budget.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Don't forget to account for all of them when you want to get paid. Good documentation might be helpful, as this is the typical task of 'hey, coudn't you make X work with Y' where the person requesting it will be totally baffled that you worked a month or two on a simple 'make the heating go lower' Button.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-06-19T21:57:22.270" LastActivityDate="2018-06-19T21:57:22.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6765" PostTypeId="2" ParentId="6763" CreationDate="2018-06-19T16:20:32.257" Score="7" Body="&lt;p&gt;You said &quot;The computer is wired directly to the air system&quot;. I'm not sure exactly what this means, but I'd infer there is a cable between the PC and the air system, and that cable is most likely connecting RS-232 (or similar) serial ports on the two devices. I think the best starting point would be try to understand THAT interface as fully as possible. I'd begin with the reference manual for the air system that describes how it is remotely controlled by another device, most likely via its serial interface port. Adjust accordingly if it is some other type of port/interface/connection, but RS-232 serial is the usual common denominator for such systems, I think.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Armed with this knowledge, you can start to evaluate whether it is simpler to continue using the old PC, or replace it with a newer computer that will allow you to implement a new control application that just replicates the interface talking to the air system. In other words, you are deciding whether to continue interfacing to the air system through the old PC and its app, or bypass that altogether with a new app that can communicate with the air system. Theoretically, the old PC could be replaced with an IP-to-RS-232 interface, and the new app could actually run on the &quot;smart device&quot; tablet/phone/whatever. It would just send commands to the air system over the network, in that case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and don't forget to build in some security too.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-06-19T16:20:32.257" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6766" PostTypeId="1" AcceptedAnswerId="6769" CreationDate="2018-06-19T16:34:08.477" Score="14" ViewCount="1662" Body="&lt;p&gt;I am reading the article about the &lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M&quot; rel=&quot;noreferrer&quot;&gt;CP/M&lt;/a&gt; operating system and wonder which computers are displayed in this picture. I have recognized the &quot;IBM PC&quot; only - in the middle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/s3ChS.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/s3ChS.jpg&quot; alt=&quot;CP/M GRAPHICS ad with three computers pictured.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8915" LastEditorUserId="8845" LastEditDate="2018-06-19T21:42:08.353" LastActivityDate="2018-06-19T21:42:08.353" Title="What are the names of the computers, that were used in the CP/M advertisement?" Tags="&lt;identify-this-computer&gt;&lt;cp-m&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6767" PostTypeId="2" ParentId="6759" CreationDate="2018-06-19T16:37:57.447" Score="21" Body="&lt;p&gt;In addition to Tommy's answer: it is important in designing an IC that uses a lot of power and has large fast variations of power usage (the Z80 is nothing to today's chips in that regard, but it was pushing the boundaries of what could be done in the 70s) that any connection paths that carry a large amount of power are as short as possible, so that impedance caused by variations in power usage don't cause parts of the chip to be run either under or over specified voltage.  To this end, connecting VCC and GND is best performed in the middle of the edges (and better still in multiple places -- but the Z80 didn't have enough pins to allow for that).  Because of the way the die is aligned in the package, this means that the pins need to be roughly in the middle of the edge (at opposite corners is another approach, which would have the lines landing on the middle of the die on the edges that are mounted across the package width, but then the wires connecting the pins to the die are longer, which is also a potential problem).&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-06-19T16:37:57.447" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6768" PostTypeId="1" AcceptedAnswerId="6774" CreationDate="2018-06-19T16:50:19.387" Score="33" ViewCount="6661" Body="&lt;p&gt;In reading a related question about &lt;a href=&quot;/q/6754&quot;&gt;floppy drive capacity&lt;/a&gt;, I thought to ask a question I've had for a long time.  When I started programming, all PC hard drives used the 5¼&quot; platter size.  There were very large capacity drives available that used multiple platters / heads to reach &gt; 2GB but resulted in large enough devices that they mostly ended up in external enclosures.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I know that platters shrunk because of improvements in hardware and media; that is not my question.  As the density improved it was more convenient to put the added capacity in a smaller size so it would fit in smaller cases and even laptops; that is all well and good.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is if you can fit X number of tracks on a 3½&quot; platter, why not use the same density on a 5¼&quot; platter and have even more tracks?  I know there are trade-offs like latency due to head-travel or cost / complexity if you tried to put multiple heads on the same platter-side, but in any case you end up with a capacity that is unobtainable with the smaller platter.  &lt;/p&gt;&#xA;" OwnerUserId="7908" LastEditorUserId="7946" LastEditDate="2018-06-20T12:36:29.200" LastActivityDate="2020-05-18T17:39:59.153" Title="Why do hard drives not use larger platter sizes anymore?" Tags="&lt;hardware&gt;&lt;hard-disk&gt;" AnswerCount="6" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6769" PostTypeId="2" ParentId="6766" CreationDate="2018-06-19T17:01:02.067" Score="15" Body="&lt;p&gt;From left to right:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/vt100.html&quot; rel=&quot;noreferrer&quot;&gt;DEC VT100&lt;/a&gt; family terminal, which may have been connected to some other system or in &lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=605&quot; rel=&quot;noreferrer&quot;&gt;VT180&lt;/a&gt; form, which was a VT100 with a card that turned it into a standalone computer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=274&quot; rel=&quot;noreferrer&quot;&gt;IBM PC 5150&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=333&quot; rel=&quot;noreferrer&quot;&gt;NEC APC&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="749" LastEditorUserId="749" LastEditDate="2018-06-19T17:16:16.690" LastActivityDate="2018-06-19T17:16:16.690" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6770" PostTypeId="2" ParentId="6766" CreationDate="2018-06-19T17:01:48.373" Score="5" Body="&lt;p&gt;The right one looks like a NEC APC or N5200.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The middle, as you rightly say, is an IBM PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The left one, isn't even a computer - looks like a DEC VT100 terminal to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the computers in the picture would only run CP/M 86. No &quot;classic&quot; CP/M 80, unfortunately, and no CP/M 68k. &lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-06-19T17:01:48.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6771" PostTypeId="2" ParentId="6766" CreationDate="2018-06-19T17:12:25.957" Score="7" Body="&lt;p&gt;Left-to-right it looks like a &lt;a href=&quot;http://terminals-wiki.org/wiki/index.php/DEC_VT125&quot; rel=&quot;noreferrer&quot;&gt;DEC VT125&lt;/a&gt; &lt;sup&gt;1&lt;/sup&gt;, &lt;a href=&quot;http://oldcomputers.net/ibm5150.html&quot; rel=&quot;noreferrer&quot;&gt;IBM 5150&lt;/a&gt;, and &lt;a href=&quot;http://oldcomputers.net/nec-apc.html&quot; rel=&quot;noreferrer&quot;&gt;NEC APC&lt;/a&gt;.  One of the objects in the background appears to be an &lt;a href=&quot;http://www.hpmuseum.net/display_item.php?hw=73&quot; rel=&quot;noreferrer&quot;&gt;HP 7470A&lt;/a&gt; plotter (thanks to Mick for pointing that out).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; The VT125 had color bitmap capability.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-06-19T17:45:18.830" LastActivityDate="2018-06-19T17:45:18.830" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6772" PostTypeId="2" ParentId="6763" CreationDate="2018-06-19T17:14:53.807" Score="2" Body="&lt;p&gt;Step 0: Ask the people who set it up whether they know how the DOS program talks to the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Step 0.5: Check whether this system is going to be replaced within the next 5 years; the &quot;proper&quot; way is probably not worth the effort if it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that's not possible, the way I'd deal with this system is as follows:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The &quot;proper&quot; way&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Set up some sort of data logger in between the DOS machine and the system it's connected to. This will vary by connector; it's &lt;em&gt;probably&lt;/em&gt; RS-232 but it might not be.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Have a play around to gather some data about the protocol they're using to communicate. Try turning the fan up and down, or heating and cooling the temperature sensor on the cooling system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Carry a camera around with you while you do this, and keep it pointed at whatever you're interacting with. Make sure the camera's saving the time that it's recording the video. That'll make it a lot easier to work out what action correlates to what signal.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Unhook the data logger and read the data from it.&lt;/li&gt;&#xA;&lt;li&gt;Line the data up with the video.&lt;/li&gt;&#xA;&lt;li&gt;Inspect the data.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is there a frequent &quot;I'm still here&quot; signal?&lt;/li&gt;&#xA;&lt;li&gt;What is the default state of the pins?&lt;/li&gt;&#xA;&lt;li&gt;What voltage does it communicate with? This might be different for different pins.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Try to isolate a meaning to specific signals. You might need to do another few rounds of testing (see Step 1) to make absolutely sure you've got it right; getting it wrong can trash the equipment.&lt;/li&gt;&#xA;&lt;li&gt;Write a basic script on a [hardware protocol]-compatible device that sends a signal to the system. Does it work?&lt;/li&gt;&#xA;&lt;li&gt;See if you can get output from the system. Perhaps the DOS program was sending a &quot;give me your stats&quot; message to the system, or perhaps it is wired directly into the resistors.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If I &lt;em&gt;really&lt;/em&gt; couldn't understand what was going on, I'd watch the DOS program running, then pause and play back execution so I could see what it was doing. Step-by-step debugging is not really possible when communicating with a non-emulated device that is not designed for said debugging.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Now that you have a basic idea of the protocol, implement what you know and abstract it away. Create a RESTful API or similar on top of it. Make this code as simple as you deem reasonable.&lt;/li&gt;&#xA;&lt;li&gt;Get other things to talk to this.&lt;/li&gt;&#xA;&lt;li&gt;When you need to get that one bit working that you hadn't quite figured out, see Step 1.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2&gt;The hackish way&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Emulate the system on a newer device.&lt;/li&gt;&#xA;&lt;li&gt;Get a hardware connection working.&lt;/li&gt;&#xA;&lt;li&gt;Put together a system to stream the display to other devices and accept input from them (modified Shell in a Box might work if it's an in-terminal emulator; tinyVNC might work if it's graphical).&lt;/li&gt;&#xA;&lt;li&gt;???&lt;/li&gt;&#xA;&lt;li&gt;Profit.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="278" LastActivityDate="2018-06-19T17:14:53.807" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6773" PostTypeId="2" ParentId="6768" CreationDate="2018-06-19T17:18:12.693" Score="9" Body="&lt;p&gt;Like you said, seek time and latency are longer for larger-diameter platters.  Another factor higher is power usage at start-up due to inertia.  Lastly, for mature technologies smaller is very often cheaper to manufacture.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastActivityDate="2018-06-19T17:18:12.693" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6774" PostTypeId="2" ParentId="6768" CreationDate="2018-06-19T17:46:14.490" Score="36" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;My question is if you can fit X number of tracks on a 3.5&quot; platter, why not use the same density on a 5 1/4 platter and have even more tracks? I know there are tradeoffs like latency due to head-travel or cost / complexity if you tried to put multiple heads on the same platter-side but in any case you end up with a capacity that is unobtainable with the smaller platter.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are many factors, but I guess it all comes down to two: &lt;strong&gt;Technical&lt;/strong&gt; and &lt;strong&gt;Marketing&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;On the technical side&lt;/strong&gt;, a wider track area (assuming that's what you meant with larger platter) also means a longer distance covered (assuming the same disk technology). This has several drawbacks:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The head carrier (arm) needs to extend in size (get longer), which adds more flexibility and more deflection (at the same energy) due vibration.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A head carrier mounted on a single pivotal arm will have to cover a wider arc over an increased track area (even though it is mounted farther away) which leads to a greater misalignment of the head slot(s) at the inner and outermost tracks.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Increased part size &lt;em&gt;can&lt;/em&gt; come with increased tolerance.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Increased part size &lt;strong&gt;does&lt;/strong&gt; come with increased temperature related shrinkage/extension in absolute numbers. If head carrier and media are of different materials their coefficients will differ.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If a longer distance is taken by the head carrier moving between track there is a higher chance that it will over or undershoot, thus requiring re-positioning.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Since heads fly, the distance varies in relation to the speed of the rotating surface resulting in a changing head surface distance.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This is not an all encompassing list of issues, just the first that come to mind. Taking them into account would mean for each a reduction in track density (1,2,3,4), increase of access time (4,5) or decrease of bit density (2,6).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each of these issues can be addressed, but with that comes increased complexity and cost - with little return (e.g. density) or even negative results (increased access time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;On the Marketing/Sales side&lt;/strong&gt; of things issues are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Simple drives can be cheaper and therefore can be sold in larger numbers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With the right production numbers, two smaller drives may be less expensive than a larger cutting edge drive.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The PC market especially asks for smaller drives to fit ever smaller computers. That's why even 'double' height 3.5&quot; drives vanished despite offering more than double the room to stack platters.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Here it may be helpful to look at the range of disks offered. The majority of disks come in a middle of the road configuration - which usually hits the production price and capacity sweet spot. Increasing the capacity past this point comes with a steep increase of cost per capacity. Below that point capacity drops don't usually result in reasonable savings. The later drives tend to vanish soon from the market, while the former are reserved for markets where maximum capacity and/or access time is worth the additional money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be noteworthy, that for mainframes 13&quot; drives were developed way into 1990, and 5.25s at least until the 2010s - with capacities that might have sounded like a rip-off - unless other criteria, especially reliability where taken into account. Here drives were designed for 24/7 operations over more than a decade(!) without producing a single fault. All with low - and most importantly, repeatable - access times. Capacity was a criterion way down the requirement list.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-14T23:25:32.277" LastActivityDate="2018-09-14T23:25:32.277" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6775" PostTypeId="2" ParentId="6768" CreationDate="2018-06-19T20:38:13.270" Score="7" Body="&lt;p&gt;Smaller platter sizes let you fit more individual drives into the same space. Then you can setup RAID-5 or 6 to keep the data online when a drive or two fails (this also reduces the need to restore from backup), or you can use RAID-0 if your primary objective is performance. And because you can join multiple drives together to achieve larger volume sizes, there's really no need for larger platters, so why not take advantage of economies of scale by choosing a platter size that can be used for both business and home use?&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-06-19T20:38:13.270" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6776" PostTypeId="2" ParentId="6759" CreationDate="2018-06-19T20:51:53.297" Score="6" Body="&lt;h2&gt;The Whole Life is a Tradeoff&lt;/h2&gt;&#xA;&lt;p&gt;As always in a real life situation decisions must be made based on contradicting requirements. In this case optimal power supply and easy PCB design are an examples where both are good considerations but hinder each other.&lt;/p&gt;&#xA;&lt;h2&gt;Consideration #1 PCB layout&lt;/h2&gt;&#xA;&lt;p&gt;For simple PCB design it's quite handy if supply power and ground are on opposite 'ends' of a chip (*1). Having one at the 'upper' end (where the mark is) and the other at the lower end (*2) allows a design with a power bar running along one side and a ground one along the other. With a little luck when routing and the usage of rails (*3) it may allow the use of single sided boards with a minimum of discrete wiring (jumpers) - or at least keep a design within two layers.  Multiple rows of chips lead to a design with a pair power traces (or rails) running along the middle as seen on many boards.&lt;/p&gt;&#xA;&lt;h2&gt;Consideration #2 Power Supply Quality (Buffering Capacitor)&lt;/h2&gt;&#xA;&lt;p&gt;On the other hand, for a good power supply it's handy to have a right-sized capacitor as close as possible (short routing/wires) to the power supply pins to buffer switching needs. The higher switching frequencies get, the more important this is. Placing power and ground at two adjacent pins would allow adding a capacitor right next to them.&lt;/p&gt;&#xA;&lt;p&gt;Also, placing both of this pair near the middle of an edge further shortens the wire length, as the internal part of these pins (which in turn are bonded to the die) are here the shortest of all.&lt;/p&gt;&#xA;&lt;p&gt;Of course routing of power lines will now be rather complex among all the signals. But still manageable - especially when again using rails (*4).&lt;/p&gt;&#xA;&lt;h2&gt;Ok, But Then Why Opposite?&lt;/h2&gt;&#xA;&lt;p&gt;It is desirable to have the same voltage between ground and power across the whole chip area (or as much as possible at least). Unlike simplified assumptions, semiconductors have a rather high resistance, about 10 to 1000 times of copper. Increased by the fact that conductanc is not only defined by the material, but also conducting diameter, power distribution across a chip becomes a serious issue (*5). And no, impedance isn't of much relevance for power supply, as we do &lt;em&gt;not&lt;/em&gt; have an alternating voltage (6).&lt;/p&gt;&#xA;&lt;p&gt;If power was supplied by adjacent pins, the region where these pins are bonded in would enjoy full voltage, while the areas at the other 'end' would get a quite lower supply resulting at least in lower maximum performance if not worse. By placing them on opposite sides of the die, the voltage loss is &lt;em&gt;somewhat&lt;/em&gt; compensated over &lt;em&gt;most&lt;/em&gt; areas. None gets maximum voltage, but all get about the same (*7) which again is something easing circuit design of the chip.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Putting both on opposite positions (horizontal (*8) or diagonal) is therefore mandatory.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's important to note that pins using a 'diagonal' layout (like TTL or most other) also end up in the middle of opposite edges of the die - after all, it's square (mostly) and pins are bonded all around.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Bottom Line: Zilog's solution scales better with higher frequency and allows better signal quality, but requires a little more complex PCBs.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - At least for single voltage ones that is.&lt;/p&gt;&#xA;&lt;p&gt;*2 - I doesn't matter if both are on the same side (left or right).&lt;/p&gt;&#xA;&lt;p&gt;*3 - These are metal bands with pins in regular intervals like .6 inch or alike. With rails, the routing of power can be eliminated for major parts of a PCB. This was even more important with early automatic routing systems removing a whole dimension of complexity.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Now standard .6&amp;quot; or 1&amp;quot; rails may not work as well, but it's still better than routing them among all the signals.&lt;/p&gt;&#xA;&lt;p&gt;*5 - That's also the reason why these huge modern chips have not just one or a few pairs of power pins but sometimes hundreds.&lt;/p&gt;&#xA;&lt;p&gt;*6 - It is of course relevant if we look at digital lines.&lt;/p&gt;&#xA;&lt;p&gt;*7 - Yes, there is still variation due to routing and so on, but it's much less than without this consideration.&lt;/p&gt;&#xA;&lt;p&gt;*8 - The PIO breaks this a bit by using 11/26 instead of 11/29 in favour of keeping all Port B pins adjacent. A little variation doesn't kill the principle.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-03-27T10:37:58.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6777" PostTypeId="2" ParentId="6763" CreationDate="2018-06-19T21:19:52.813" Score="2" Body="&lt;p&gt;It all really depends on how the device operates the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Others here are telling you to tap the interface, and try to emulate it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As another approach, take a look at the at the program that is used to control the device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trick here is instead of decoding some protocol between the computer and the device, instead, tap in to the computer to drive the program that drives the device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A potential tact for this is to install a TSR (Terminate and Stay Resident). The TSR does several things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One, it intercepts the keyboard interrupts within DOS, and is thus able to &quot;send commands&quot; to the program. If &quot;turning the fan on&quot; entails going through a couple of menu options, then you can simply mimic the keyboard strokes necessary to navigate the menus, select the fan, and &quot;turn it on&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, say if you hit ESC 5 time from anywhere, you get back to the main menu. Then, to get to the fan controller, you go to &quot;Menu 2&quot; which brings up a form listing the fans. You want &quot;Fan 2&quot;, and when you arrow down, and hit enter, you get to a form that has a &quot;Fan Status&quot; box with a &quot;ON&quot; &quot;OFF&quot; toggle, which you can TAB to and then hit F2 (yes, I'm making this all up).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, send it ESC-ESC-ESC-ESC-ESC (gets to main menu from anywhere), 2 (Menu 2), Arrow Down (Fan 2), ENTER (fan screen), TAB (to the field) F2 (toggle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two, it can monitor the screen that's shown by the program and then &quot;screen scrape&quot; it to deliver output to your controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third, it can install a serial interrupt handler (assuming one is available) that can be used by you to send and receive commands from your controller to the PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the serial port is unavailable, the printer port might be open -- you can use that too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may also be able to install an Network card and a TCP stack (or NetBios, to something else).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's running a version of Windows (pretty much any version), it can be even easier as you can tap in to the event stream for the program, and simply send it messages -- mouse clicks, keyboard events, etc. Screen scraping is a little more difficult, but you can even read the values of controls (like text boxes and labels) on the Windows forms from a separate program. Reading the temperature from a bar chart graph is left as an exercise for the reader.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your controller can be something like a Raspberry Pi, with Wifi. It can present a simple web interface, and interact with the PC via the Serial port and the TSR. The DOS machine will, likely, &quot;never know what hit it&quot; or even know you're there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that said, &quot;it's a hack&quot; to be sure. But possible. It may or may not consume a bunch of time, lots of unknowns.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-06-19T21:19:52.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6779" PostTypeId="2" ParentId="5549" CreationDate="2018-06-20T04:26:42.493" Score="1" Body="&lt;p&gt;It sound like to me a power supply issue. You mentioned about imperfections on the edges. I had a very similar issue with a CRT computer screen. In my case it was a filter capacitor and a full wave bridge rectifier that went bad. 2 diodes were fried by a power surge and some AC was making it to the filter capacitor. When both were changed the screen was good as new. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It started as small ripple effects on the edges with changes in brightness which eventually became more like light and dark horizontal bars. When servicing most electronics check power supplies as they feed all the circuits .  &lt;/p&gt;&#xA;" OwnerDisplayName="user507" LastActivityDate="2018-06-20T04:26:42.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6780" PostTypeId="1" AcceptedAnswerId="6782" CreationDate="2018-06-20T07:19:12.160" Score="128" ViewCount="37664" Body="&lt;p&gt;One thing I remember very well from my childhood is the screen you got at the end of a shutdown process on old computers:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jbD97.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jbD97.png&quot; alt=&quot;It’s now safe to turn off your computer.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I don't know if this was a Windows 95/98/2000/ME only thing but I wonder why computers back in those days had to be turned off manually. Was it really that hard to implement a self shut-off? What is the reason it took quite long for computers to feature this?&lt;/p&gt;&#xA;" OwnerUserId="8923" LastEditorUserId="15334" LastEditDate="2020-08-28T07:50:21.717" LastActivityDate="2020-08-28T07:50:21.717" Title="It's now safe to turn off your computer" Tags="&lt;hardware&gt;&lt;history&gt;" AnswerCount="4" CommentCount="16" FavoriteCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="6781" PostTypeId="2" ParentId="6780" CreationDate="2018-06-20T07:30:13.577" Score="-1" Body="&lt;p&gt;This was purely a PC thing. Older retro computers (8/16 Bit Homecomputer) had always physical switches you needed to operate manually. Also as they were missing HDs, you could switch them off anytime (risking only to break the current floppy if it was just written to).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PC was build from standard components and a lot of manufacturers needed to cooperate: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;mainboards needed to support the feature&lt;/li&gt;&#xA;&lt;li&gt;cases needed to support that &quot;new powerswitch&quot;&lt;/li&gt;&#xA;&lt;li&gt;OS needs to have a &quot;driver&quot; to switch off and on&lt;/li&gt;&#xA;&lt;li&gt;CPU (?)&lt;/li&gt;&#xA;&lt;li&gt;may forgot more components here&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The first implementation was called APM (Advanced Power Management) and was defined by Microsoft and Intel in January 1992 (1.0), 1.1 was released in September 1993 and 1.2 was released in 1996.&lt;br&gt;&#xA;APM was succeeded by ACPI(Advanced Configuration and Power Interface) in December 1996 which also added functions for HW detection (for example Multiprocessor environment and Plug and Play). &lt;/p&gt;&#xA;" OwnerUserId="8195" LastEditorUserId="8195" LastEditDate="2018-06-22T09:33:52.640" LastActivityDate="2018-06-22T09:33:52.640" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6782" PostTypeId="2" ParentId="6780" CreationDate="2018-06-20T08:01:21.600" Score="163" Body="&lt;p&gt;TL;DR: it took a long time (on PCs) because the industry wasn’t ready to push it. Scroll down to “Why did it take so long?” for details.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Shutdown screens&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;That screen comes from Windows 95 and its successors, 98 and Me. Windows NT showed a plain dialog box with a “Restart” button. Other operating systems which cared about managing the shutdown process &lt;a href=&quot;https://guidebookgallery.org/screenshots/shutdowncomplete&quot; rel=&quot;noreferrer&quot;&gt;had equivalents&lt;/a&gt; — OS/2 for example, and all the Unix variants (sometimes it was only a text message on the console). Raymond Chen wrote &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20160419-00/?p=93315&quot; rel=&quot;noreferrer&quot;&gt;an amusing blog post&lt;/a&gt; illustrating the importance of the instructions in the shutdown screen.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Some history...&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Before 1995 and the adoption of &lt;a href=&quot;https://en.wikipedia.org/wiki/ATX&quot; rel=&quot;noreferrer&quot;&gt;the ATX standard&lt;/a&gt;, the vast majority of desktop PCs had power switches which were directly connected to the power supply, and acted as mechanical switches only, interrupting the electric circuit when opened. It was therefore impossible for software to control the state of the power supply. But that wasn’t much of a problem initially: when the IBM PC was designed, storage media (including hard drives) had no caches, so when the hardware told the operating system that a write was finished, it really was. Under DOS, the kernel and shell worked together to ensure that when the DOS prompt was displayed, all the buffers were flushed; when software caches appeared, they adhered to this too (at least, the well-behaved ones did). Users were taught to exit programs, wait for the prompt, and wait for drive lights to switch off before powering the system down. (They might also need to &lt;code&gt;PARK&lt;/code&gt; the drive heads but &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11547/79&quot;&gt;that’s another story&lt;/a&gt;.) Even with pre-95 versions Windows, users exited to DOS before switching the system off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 95 and other multi-tasking operating systems changed the picture: they didn’t “exit to DOS” on shutdown (either because they weren’t supposed to, or because there was no DOS to return to), so users couldn’t wait for a prompt to appear before switching off. In most truly multi-tasking systems there’s never really a quiescent state where the system is safe to power off, in normal operation; so most multi-tasking operating systems have a way for the user to say “I want to power the system down, prepare to do so”, and the operating system then needs to tell the user when it’s safe to power off. This ensures that all applications have finished writing the user’s files to disk, and that the system is in a consistent state (ignoring hard drive caches here...).&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Shutting down PCs&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Two features brought system power under operating system control: &lt;a href=&quot;https://en.wikipedia.org/wiki/Advanced_Power_Management&quot; rel=&quot;noreferrer&quot;&gt;APM&lt;/a&gt; on the one hand, and ATX on the other. APM, which was designed for laptops initially, provided mechanisms for software to request changes in the system’s power state: fully on, in standby, suspended, or off. ATX changed the physical connections in the system so that power control became possible everywhere: it required that the power button no longer be a switch directly connected to the power supply, but instead that it be connected to the motherboard, and that the motherboard control the power supply itself. The power supply was also changed so that it would supply a small amount of current all the time, allowing the system to be left in “soft off” status, &lt;em&gt;i.e.&lt;/em&gt; with enough capabilities to turn itself back on again when requested to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see an example of the use of APM to power off a PC in &lt;a href=&quot;http://www.opus.co.tt/dave/shut12.zip&quot; rel=&quot;noreferrer&quot;&gt;Shutdown&lt;/a&gt;, a small assembly-language program written for DOS. Operating systems such as Windows 95 (with the APM drivers installed) would do the same thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was quite exciting (to me anyway) to see APM and ATX roll out progressively in the second half of the nineties, and see systems suddenly acquire the ability to turn themselves off without human intervention, and to turn themselves back on at the press of a key on some systems. This was yet another sign of PCs “growing up” (“real” computers, &lt;em&gt;i.e.&lt;/em&gt; Unix workstations in my mind at the time, had had the ability for a while, as had Macs).&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Why did it take so long?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;All this doesn’t address the actual question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was it really that hard to implement a self shut-off? What is the reason it took quite long for computers to feature this.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you design it in from the start, it’s not all that hard to implement self shut-off, and many systems existed with this ability quite a few years before the PC acquired it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the main reason it took so long is industry fragmentation. IBM designed the first PCs, and the majority of clones in the eighties and early nineties followed the blueprint set by the AT (or rather, the Baby-AT variant and LPX power supplies). But IBM moved on to the PS/2, which was a rather proprietary derivative of the PC, and left the rest of the industry to fend for itself. There was no real driver for big changes for many years: people continued using DOS, on its own then with Windows, and while there were other operating systems, none of them was successful enough to be able to drive change. No hardware manufacturer was dominant enough either. Various ad hoc consortia were created, &lt;em&gt;e.g.&lt;/em&gt; for EMS (Lotus, Intel, and Microsoft), and more markedly when it comes to hardware, EISA (the “Gang of Nine”, led by Compaq), VESA, etc. Various de facto standards emerged, but no one was defining &lt;em&gt;the&lt;/em&gt; PC platform, and operating system-controlled power-off wasn’t an important enough feature to mobilise the industry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early nineties, surprising as it may seem now, there was a fair amount of uncertainty as to what the computing future held. Apple was making its comeback with cheaper Macs, workstation manufacturers were releasing lower-priced systems (or rather, not-so-expensive systems), a variety of operating systems and platforms were vying for attention (Be, RiscPC...), IBM was still pushing OS/2 and Taligent, Microsoft was pushing Windows NT, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually an alliance of companies took it upon itself to “remedy” this situation: Intel and Microsoft (referred to at the time as Wintel). This started in the early nineties, but wasn’t a done deal for quite a while; when ATX was published in 1995 (by Intel on its own), pundits liked it but weren’t sure it would convince the industry, although they were proved wrong fairly quickly. Windows 95 sealed the deal though and Intel and Microsoft became the definers of the PC platform (with the &lt;a href=&quot;https://en.wikipedia.org/wiki/PC_System_Design_Guide&quot; rel=&quot;noreferrer&quot;&gt;PC System Design Guide&lt;/a&gt; in particular).&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;On to the present day&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;APM is now obsolete, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface&quot; rel=&quot;noreferrer&quot;&gt;ACPI&lt;/a&gt; is the interface which provides access to the power state nowadays (and many other aspects of the system). Pressing the power switch now only informs the system that the button was pressed, and it’s up to whatever’s controlling the system at that point to decide what to do with that information — which is nice because you no longer risk losing your work if someone accidentally presses the button!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(PCs never acquired the other hardware feature I wanted from Macs and Unix workstations, which was the ability to eject floppies without human intervention. Oh well...)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-26T12:37:26.240" LastActivityDate="2020-05-26T12:37:26.240" CommentCount="36" ContentLicense="CC BY-SA 4.0" />
  <row Id="6783" PostTypeId="2" ParentId="6759" CreationDate="2018-06-20T08:17:30.647" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;get all of the data lines together, and in the correct order?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Data lines to RAMs have no correct order, they are all equal. The numbering is just a formality but has no real meaning. You can permutate them all you like, still the same data (bytes, words) will come back. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For ROMs (including character generators) it's a different matter, if they are programmed externally. If you swap data lines for reading then in theory you could compensate for that in the programming. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This holds for address lines too, but beware of messing with efficient addressing in pages. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For I/O ports, especially parallel and serial ports, the precise bits matter, but that's nothing that a double sided PCB can't solve. &lt;/p&gt;&#xA;" OwnerUserId="7685" LastActivityDate="2018-06-20T08:17:30.647" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6784" PostTypeId="2" ParentId="6780" CreationDate="2018-06-20T08:52:26.150" Score="9" Body="&lt;p&gt;The versions of Windows that displayed that message used the FAT filesystem. FAT does not have any atomic write capability - that is, if power is lost while data is being written it can corrupt the filesystem. This was such a common problem that Microsoft included a tool (chkdsk) that would detect and attempt to fix it every time the machine booted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To avoid this happening users were told not to simply turn their computers off. Other systems around at that time, such as the Amiga, Mac and DOS based PCs, could simply be turned off when the user was finished using them, with a few caveats such as waiting for floppy drive lights to go out. Windows 95 introduced virtual memory and write caching for performance reasons, which required a clean shut down to avoid filesystem corruption.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since older AT machines could not power themselves off like newer ATX ones could, Windows would display this message when it was ready to be switched off.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2018-06-20T10:11:52.903" LastActivityDate="2018-06-20T10:11:52.903" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="6785" PostTypeId="2" ParentId="2046" CreationDate="2018-06-20T13:39:06.167" Score="7" Body="&lt;p&gt;PAGE and HIMEM are what you might call &quot;system variables&quot; in BBC basics, they mark the bottom top of the memory available for Basic use, they are intiialised from OS-provided values but can be changed by the user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a regular BBC micro HIMEM will point to the bottom of screen memory, so it can change if you change screen modes (this BTW meant you couldn't change screen mode within a procedure, because the procedure stack grows down from HIMEM), but on a second processor it should always point to the bottom of the OS unless it is manually changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what I would do if writing a ram tester is manually change HIMEM to give my program a small workspace, the program can then test the space between the new HIMEM and the old HIMEM without worrying about being stepped on by BASIC. If you are using regular Basic you can also test the area between BASIC and the OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For testing the area with BASIC in it you could just run a checksum and compare the results running it on the copy of BASIC in the second processor to the copy in the machine itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure of any easy way to test the OS code area at the top and the workspace areas at the bottom.&lt;/p&gt;&#xA;" OwnerUserId="499" LastEditorUserId="499" LastEditDate="2018-06-20T13:55:21.540" LastActivityDate="2018-06-20T13:55:21.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6786" PostTypeId="2" ParentId="6768" CreationDate="2018-06-20T13:48:14.557" Score="-1" Body="&lt;p&gt;It simply doesn't make sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can slightly-more-than double the capacity by using a 5.25 instead of a 3.5 inch form factor. Doing so can be achieved by putting in one extra platter, too, but at a fraction of the technical problems introduced. Also, consider that in terms of density, during the last decade we're talking about improvement rates which make &quot;double&quot; look like a silly joke.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nobody really needs double-digit or triple-digit terabyte drives, but &lt;em&gt;those who do&lt;/em&gt; need them will use a redundant network of servers with RAID on each server anyway. Still, single-digit terabyte drives (which nobody truly needs either, if you are honest) are readily available in 3.5 inch form factor at neglegible cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, SSD is evolving much more rapidly than HDD, so you can expect HDD technology to eventually die out anyway. Terabyte SSDs are not precisely a bargain, but they do become kinda affordable. If thought and R&amp;amp;D goes somewhere, it'll be there, nobody will want to spend a lot of BD re-establishing 1960s technology. Go forward 10 years, nobody will be using a spinning, mechanical disk any more. Things need to be small and smaller, and they need to consume less and less energy (because virtually everything is going towards mobile one way or the other).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Among the technical problems with larger platters are not only the ones elaborated very well by Raffzahn and some others which are rather obvious (increased angular momentum in everyday situations, to name one). You also need to consider that in addition to wear being much higher and seek times being much more unreliable than they are already on 3.5 inch, the sequential data rate differs much more in a larger disk.&lt;br&gt;&#xA;That, or data density, if you are willing to give away most of the benefit of a larger disk. But then, if you are willing to give this away, why would you use a larger disk in the first place, that doesn't make sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in addition to having several very real mechanical problems, you also have some &lt;em&gt;practical&lt;/em&gt; problems. For example, you need to be capable of writing out data at much higher rates (or spin the drive slower overall) because more area moves under the head in the outer regions. You also need a lot more energy because the head &quot;touches&quot; (well it hopefully &lt;em&gt;doesn't&lt;/em&gt; touch!) the same area for a much shorter time.&lt;br&gt;&#xA;The larger a disk (assuming the same speed), the more pronounced everything gets. For example, the technical specifications of your drive get a lot more unreliable. It's nice when you can claim a (average) sustained rate of 200 MB/s, but if the actual rate varies from 80 to 300, that's not quite so cool. Same goes for access time. If you write 8ms on the box, and actual times go from 6 to 18 ms, that's not cool PR-wise.&lt;br&gt;&#xA;Access time is one of the most dominating factors nowadays, anyway. Throughput is rarely an issue. Anything that makes (or may make) access time worse is bad mojo, even moreso as SSD kinda guarantees a mostly-constant, low access time.&lt;/p&gt;&#xA;" OwnerUserId="8927" LastActivityDate="2018-06-20T13:48:14.557" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6787" PostTypeId="2" ParentId="6006" CreationDate="2018-06-20T14:59:17.270" Score="22" Body="&lt;p&gt;I know it's bad style to answer ones own question. Still,I feel the need to publish my findings (*1):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Over the last &lt;strike&gt;3&lt;/strike&gt; &lt;strike&gt;18&lt;/strike&gt; 26 months (*2), I've been able to collect serial numbers of 44 different Z88s, with &lt;strong&gt;62271&lt;/strong&gt; being the largest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the so called &lt;a href=&quot;https://en.wikipedia.org/wiki/German_tank_problem&quot; rel=&quot;nofollow noreferrer&quot;&gt;German Tank Formula&lt;/a&gt;, as &lt;a href=&quot;/q/6006&quot;&gt;traal&lt;/a&gt; suggested, yields &lt;strong&gt;63685&lt;/strong&gt; as a result. So it might be safe to assume that there were considerable less than 100,000 units, possibly even &lt;strong&gt;less than 65,000&lt;/strong&gt;. Unless there's some hidden stash with high serial numbers, that is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As with many statistical methods there are other approaches and concerns, but Michael Steil has already used it twice to generate rather believable numbers &lt;a href=&quot;https://www.pagetable.com/?p=547&quot; rel=&quot;nofollow noreferrer&quot;&gt;for the C64&lt;/a&gt; as well as &lt;a href=&quot;https://www.pagetable.com/?p=465&quot; rel=&quot;nofollow noreferrer&quot;&gt;for the Xbox&lt;/a&gt;, While others made a believable case for iPhones. So I'm inclined to go with it.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Fun part: As so often, &lt;a href=&quot;https://www.pagetable.com/?p=547#comments&quot; rel=&quot;nofollow noreferrer&quot;&gt;the comments&lt;/a&gt; of anything about the C64 does carry the outcry of the fanboys. This time it's &lt;em&gt;'nananana ... statistics are neat but &lt;strong&gt;I know better&lt;/strong&gt; and it's &amp;lt;beloved-fantasy-number&amp;gt;'&lt;/em&gt;  &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Beside, no-one has provided any answer so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - It's getting harder to find more - so Gents, please go thru your storage and pull out your Z88 (I know you got one - everyone has to have one) and post your serial number as comment. There are still many usable lines in my VisiCalc sheet:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kbczl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kbczl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-11T01:31:01.850" LastActivityDate="2020-06-11T01:31:01.850" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="6789" PostTypeId="2" ParentId="6768" CreationDate="2018-06-20T17:09:57.183" Score="11" Body="&lt;p&gt;Larger radius = lower RPM, which makes pretty much all timing specs worse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Quantum Bigfoot was limited to &lt;a href=&quot;https://web.archive.org/web/19970713072452/http://www.quantum.com/src/whitepapers/big_paper/BigPaper.htm&quot; rel=&quot;noreferrer&quot;&gt;3600 RPM&lt;/a&gt;.  Why not spin faster, like a Cheetah X15 (15 kRPM)?  &lt;a href=&quot;https://flashdba.com/2013/10/28/understanding-disk-mechanical-limitations/&quot; rel=&quot;noreferrer&quot;&gt;Flutter and buffeting&lt;/a&gt;.  Halving the radius gives four-times reduction in these effects (assuming no spindles -- real platters are on spindles and the coupling to these spindles provides more radial stiffness than just being a flat disk, so 3.5&quot; can be a bit larger than half of 5.25&quot;).&lt;/p&gt;&#xA;" OwnerUserId="3784" LastActivityDate="2018-06-20T17:09:57.183" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6790" PostTypeId="2" ParentId="6780" CreationDate="2018-06-20T17:30:56.683" Score="45" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was it really that hard to implement a self shut-off?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes.  Yes it was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Until Windows 95, all power switches were that - a switch.  On or off, nothing else, and there was no &quot;self shut-off&quot;.  Nor was there a requirement for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advent of Windows 95 and the possibility of the system saving state before shutting down cleanly &lt;strong&gt;&lt;em&gt;created&lt;/em&gt;&lt;/strong&gt; a market requirement for power-off to be controlled by software.  This led to the development of the standardised &lt;a href=&quot;https://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface&quot; rel=&quot;noreferrer&quot;&gt;ACPI&lt;/a&gt; interface and &lt;a href=&quot;https://en.m.wikipedia.org/wiki/ATX&quot; rel=&quot;noreferrer&quot;&gt;ATX&lt;/a&gt; power supplies to implement the new requirement, a year &lt;em&gt;after&lt;/em&gt; Win95 had exposed the need for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But until this had been designed, implemented in the OS, and implemented in the BIOS, of course the only way of powering off your PC was with the on/off switch.  Hence the famous message.&lt;/p&gt;&#xA;" OwnerUserId="6749" LastEditorUserId="6749" LastEditDate="2018-06-20T20:15:25.033" LastActivityDate="2018-06-20T20:15:25.033" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="6791" PostTypeId="2" ParentId="6228" CreationDate="2018-06-20T18:06:24.247" Score="0" Body="&lt;p&gt;To add to the other answer, stason.org also has this board as unidentified:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://stason.org/TULARC/pc/motherboards/U/UNIDENTIFIED-286-JS-128A.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://stason.org/TULARC/pc/motherboards/U/UNIDENTIFIED-286-JS-128A.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/gCAsZ.png&quot; width=&quot;400&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="8337" LastActivityDate="2018-06-20T18:06:24.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6792" PostTypeId="1" AcceptedAnswerId="6794" CreationDate="2018-06-20T20:13:40.930" Score="7" ViewCount="1370" Body="&lt;p&gt;I remember an old (90's) program, run in DOS, that allowed its user to create posters, invitations, cards, etc. It had mouse support and its own GUI with windows, bars, fields, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The work started with choosing a template (for example &quot;a poster&quot;) and then the user could place graphics and text with the mouse. Each element put in workspace could be edited, moved, deleted, resized. Just like in today's Inkscape or CorelDraw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, the user could print their work on a printer connected to the PC. And that was the awesomest part of this program: it guided the user how to put the paper into the printer in order to get a ready to use publication. For example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If the user wanted to create a folded invitation, the program printed pages 1 and 4 on one side of A4-paper, then asked the user to put the same paper upside down and printed pages 2 and 3 (in 90's it was great for me!)&lt;/li&gt;&#xA;&lt;li&gt;If you wanted a long banner with a text stretching on 3 A4-pages, you just chose something like &quot;long banner&quot;, chose desired size, put text and let the wizard guide you.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I remember myself creating cards for my mother and grandmother, banners and posters for school, but I don't remember the program's name. I believe it was something like just plain &lt;em&gt;&quot;Artist&quot;&lt;/em&gt;, but I'm not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to find this app many times -- always failed: &quot;Artist&quot; is too common name, I think so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know the application I'm thinking about?&lt;/p&gt;&#xA;" OwnerUserId="8933" LastEditorUserId="15334" LastEditDate="2020-10-15T09:50:51.557" LastActivityDate="2020-10-15T09:50:51.557" Title="An old DOS application that allowed to create cards, posters, invitations, etc" Tags="&lt;ms-dos&gt;&lt;graphics&gt;&lt;identify-this-software&gt;" AnswerCount="5" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6793" PostTypeId="2" ParentId="6792" CreationDate="2018-06-20T20:20:36.567" Score="3" Body="&lt;p&gt;Could be any of several.  PrintMaster fits the bill.  I think later versions of PrintShop had mouse support.  PFS First Publisher had templates that may have included those style.&lt;/p&gt;&#xA;" OwnerUserId="481" LastActivityDate="2018-06-20T20:20:36.567" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6794" PostTypeId="2" ParentId="6792" CreationDate="2018-06-20T20:27:12.213" Score="12" Body="&lt;p&gt;I believe you are thinking of &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Print_Shop&quot; rel=&quot;noreferrer&quot;&gt;The Print Shop&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm pretty sure I had a copy early on for one of my early PC's.  Never did find much use for it, but it was available practically everywhere.&lt;/p&gt;&#xA;" OwnerUserId="5094" LastActivityDate="2018-06-20T20:27:12.213" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6797" PostTypeId="1" AcceptedAnswerId="6798" CreationDate="2018-06-20T23:35:14.520" Score="30" ViewCount="9436" Body="&lt;p&gt;Green was traditionally the most common color for computer monitors; it combines strain-free readability with low cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given this, it's surprising that the first versions of the Commodore PET and TRS-80 came with bluish-white monitors, though mainframe terminals had been using green screens for many years. The PET at least, later switched to green.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Had just one of them used bluish-white, random chance might seem a likely explanation, but both at the same time suggests a systematic reason. So why did they not use green?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-10-06T19:53:21.007" Title="Why were early personal computer monitors not green?" Tags="&lt;history&gt;&lt;commodore-pet&gt;&lt;screen&gt;&lt;trs-80&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6798" PostTypeId="2" ParentId="6797" CreationDate="2018-06-20T23:58:44.903" Score="39" Body="&lt;p&gt;The reason was cost, since neither the original PET nor the TRS-80 required the extra high resolution and finer dot pitch found in more expensive computer monitors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Virtually all of the computer terminals of the time paired a CRTC with a high-resolution green or amber screen to generate an 80x24 text display, as that was the early standard. This required a relatively expensive monitor that could resolve the full horizontal resolution required for readable 80-column text (normally in the range of 560 to 640 pixels) without blurring adjacent pixels. The PET used 40 column text, and the TRS-80 used 64 column text. Therefore, neither required a high quality computer monitor to achieve their more modest resolution needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Radio Shack, in particular, rather famously repurposed a CRT from a B&amp;amp;W television that the company also sold. They removed the unnecessary tuner parts and added a monochrome input to turn it into a monitor. This no doubt greatly reduced their costs in comparison to using a more &quot;legit&quot; monitor. Commodore was likely motivated by similar economics and chose a lower resolution TV CRT as well.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-06-20T23:58:44.903" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6799" PostTypeId="1" AcceptedAnswerId="6800" CreationDate="2018-06-21T07:43:13.513" Score="3" ViewCount="206" Body="&lt;p&gt;Howdy Retro Computing Stack Exchange,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I semi-recently came into possession of an Osborne Turbomate IV computer with an Ipex monitor and Brother dot matrix printer (along with original Osborne mouse and keyboard and a few other goodies like spare ribbons for the printer and floppy disks). My question is whether anyone here has any information on these items (apart from the printer which returned decent results via Google searches) and their rarity or possible worth as all pieces are in fine working condition? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found an advertisement for a 286 processor version of this model which came from the Sydney Morning Herald however was unable to find much further online apart from a similar question in a forum about 10 years ago. For some clarification I live in Australia and apart from basic information on Osborne I have been able to find very little else on the model and the Australian branch of the company (or whether it differs from the US company).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure someone likely has this information as I have spoken to older people who used these machines who advised most local businesses used Osborne products until Windows became available. Apart from that information seems scarce but I have been told this was a common model used by businesses. I tried the monitor model number and came up empty and was not able to see a serial number or model number for the Turbomate. I posted on a Facebook group full of PC Enthusiasts but after bumping the post and a long wait have not had any responses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/F2cf4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/F2cf4.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oTsxu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oTsxu.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eFS6m.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eFS6m.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yax0f.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yax0f.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8944" LastActivityDate="2019-12-09T10:53:23.247" Title="Osborne Turbomate IV Information?" Tags="&lt;hardware&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6800" PostTypeId="2" ParentId="6799" CreationDate="2018-06-21T08:07:11.493" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;My question is whether anyone here has any information on these items &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, sorry to disappoint you, but it's just another Taiwanese 486 based AT. OCC (Osborne Computer Corporation) already folded in 1985. After that, the name got sold to some Finnish(?) company starting to sell PCs under the Osborne label, but not for long and it got sold again. The machine is, as far as I can tell from that pictures a standard board in a generic case with custom stickers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It almost seems as if these Osborne branded AT clones were somewhat common down under as already the first short search of YouTube turned up several videos like &lt;a href=&quot;https://www.youtube.com/watch?v=UmKr7lavRIQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;someone showing his old family PC&lt;/a&gt; or a more &lt;a href=&quot;https://www.youtube.com/watch?v=6uof6wrXnmY&quot; rel=&quot;nofollow noreferrer&quot;&gt;retro/fun hacker showing it off&lt;/a&gt;. Seams as if YouTube is a big thing with your people. Maybe that's a lead for further research.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both machines case differ from the case your pictures, but that's not uncommon for clone manufacturers, buying whatever comes along and slap the brand they acquired just atop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IPEX company shown on the CRTs sticker is, well was, an Australian assembler for generic PC components, usually sold under many brand names, but also their own.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and their rarity&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really anything collectable. As said it's a generic 486. The name may add a little obscurity factor, but not more remarkable as any other machine of the same configuration.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or possible worth as all pieces are in fine working condition?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;DISCLAIMER TYPE=STANDARD&amp;gt;&#xA;I'm known to be a cheap ass and dissing PCs anyway.&#xA;&amp;lt;/DISCLAIMER&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'd say if you're lucky it fetches get ~40 bucks ... but then, as usual, finding the right buyer may yield a way better deal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said that and while not really collectables, 486es are a real good tool to run old (pre 2000) software (DOS, Windows or more obscure) as their configurations are still much compatible with early PCs - at least at the AT level - especially speed wise. But they are as well fast enough to run more complex software. So whoever is really into running old games or alike - and preferring the real thing instead of an emulation - will have/need one.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-06-22T04:51:18.260" LastActivityDate="2018-06-22T04:51:18.260" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6801" PostTypeId="1" AcceptedAnswerId="6803" CreationDate="2018-06-21T08:30:38.853" Score="7" ViewCount="7424" Body="&lt;p&gt;I was not a PC user before Windows 98. But I remember one of my friends was using a boot menu in his 486 machine to select between Windows/DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The menu was like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1. EMS&#xA;2. XMS&#xA;3. Windows&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If we would be playing games, we would pick the EMS or XMS option. If we would play SimCity or Command &amp;amp; Conquer, we would pick Windows. To actually enter into Windows (3.1) we had to manually enter the &lt;code&gt;WIN&lt;/code&gt; command after picking option 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was this menu implemented in &lt;em&gt;autoexec.bat&lt;/em&gt; or &lt;em&gt;config.sys&lt;/em&gt;? What would be the difference of the Windows mode? Does anyone have any example of this kind of menu?&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="3228" LastEditDate="2018-06-21T19:29:55.243" LastActivityDate="2018-06-22T07:40:37.183" Title="How do I create a boot menu to select between Windows and DOS?" Tags="&lt;ms-dos&gt;&lt;ibm-pc&gt;&lt;windows-3.x&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6802" PostTypeId="2" ParentId="6801" CreationDate="2018-06-21T08:42:50.927" Score="14" Body="&lt;p&gt;It was an option in (afaik) MS-Dos 6.0 and later, where you were able to define different sections in config.sys&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[MENU]&#xA;REM syntax: Name, Descritopn&#xA;MENUITEM=DOS,   DOS w/o CD&#xA;MENUITEM=DOSCD, DOS with CD&#xA;MENUITEM=WIN,   Windows&#xA;&#xA;[COMMON]&#xA;DEVICE=C:\DOS\HIMEM.SYS&#xA;DOS=HIGH,UMB&#xA;&#xA;[DOSCD]&#xA;REM this is only loaded when &quot;DOSCD&quot; is selected&#xA;DEVICE=C:\DOS\EMM386.EXE NOEMS&#xA;DEVICE=C:\DOS\CDROMDRV.SYS /D:CD1&#xA;&#xA;[DOS]&#xA;REM this is only loaded when &quot;DOS&quot; is selected&#xA;DEVICE=C:\DOS\EMM386.EXE NOEMS&#xA;&#xA;[WIN]&#xA;REM and this for &quot;WIN&quot;, items can even be empty&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the configuration chosen was also promoted to autoexec.bat with the environment-Variable 'CONFIG':&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;...&#xA;&#xA;REM Uses the identifier from CONFIG.SYS to goto a label&#xA;GOTO %CONFIG%&#xA;&#xA;REM DOSCD: add mscdex&#xA;:DOSCD&#xA;LH C:\DOS\MSCDEX.EXE /D:CD1&#xA;GOTO EXIT&#xA;&#xA;REM no mscdex needed&#xA;:DOS&#xA;GOTO EXIT&#xA;&#xA;&#xA;REM right into Windows&#xA;:WIN&#xA;win :&#xA;&#xA;:EXIT &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="5139" LastEditorUserId="5139" LastEditDate="2018-06-21T14:15:32.037" LastActivityDate="2018-06-21T14:15:32.037" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6803" PostTypeId="2" ParentId="6801" CreationDate="2018-06-21T08:50:21.020" Score="11" Body="&lt;p&gt;Assuming this was a PC running MS-DOS 6 or later, this would typically be implemented using a &lt;code&gt;CONFIG.SYS&lt;/code&gt; menu:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[MENU]&#xA;MENUITEM=EMS&#xA;MENUITEM=XMS&#xA;MENUITEM=Windows&#xA;&#xA;[COMMON]&#xA;DEVICE=C:\DOS\HIMEM.SYS&#xA;&#xA;[EMS]&#xA;DEVICE=C:\DOS\EMM386.EXE&#xA;&#xA;[XMS]&#xA;&#xA;[Windows]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;with appropriate settings in the &lt;code&gt;[XMS]&lt;/code&gt; and &lt;code&gt;[Windows]&lt;/code&gt; blocks. The &lt;code&gt;[COMMON]&lt;/code&gt; block is taken into account in all cases, as long as it comes first; it can be repeated if necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; can use the &lt;code&gt;%CONFIG%&lt;/code&gt; variable to adjust its behaviour depending on the chosen entry:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@ECHO OFF&#xA;:: Common startup here&#xA;GOTO %CONFIG%&#xA;&#xA;:EMS&#xA;:: EMS-specific setup here&#xA;GOTO END&#xA;&#xA;:XMS&#xA;:: XMS-specific setup here&#xA;GOTO END&#xA;&#xA;:Windows&#xA;:: Windows-specific setup here&#xA;GOTO END&#xA;&#xA;:END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This kind of menu would typically be used to control the configuration of&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the memory manager: &lt;code&gt;HIMEM.SYS&lt;/code&gt; only (for games which wouldn’t work with a V86 memory manager), &lt;code&gt;EMM386.EXE&lt;/code&gt; with or without EMS (without EMS, you’d get 64K more UMBs)&lt;/li&gt;&#xA;&lt;li&gt;the amount of resources assigned to &lt;code&gt;FILES&lt;/code&gt;, &lt;code&gt;BUFFERS&lt;/code&gt; etc. (you’d need more for a multi-tasking environment; this could be what your friend’s “Windows” configuration changed)&lt;/li&gt;&#xA;&lt;li&gt;various drivers (&lt;em&gt;e.g.&lt;/em&gt; the CD-ROM driver, sound card setup with a PCI card, network drivers...)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SHARE.EXE&lt;/code&gt; when running Windows&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For older versions of MS-DOS, there were separate boot configuration tools available, including some which allowed for early-boot selection of &lt;code&gt;CONFIG.SYS&lt;/code&gt; directives. DR DOS 5 and later implemented its own menu system, in a more manual fashion.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-06-21T10:05:11.090" LastActivityDate="2018-06-21T10:05:11.090" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6804" PostTypeId="5" CreationDate="2018-06-21T10:55:25.227" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2018-06-21T10:55:25.227" LastActivityDate="2018-06-21T10:55:25.227" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6805" PostTypeId="4" CreationDate="2018-06-21T10:55:25.227" Score="0" Body="For questions regarding self-made hardware maintenance, upgrades or repairs done by hobbyist or enthusiast at home rather than employing a professional. (aka. Do It Yourself Projects)" OwnerUserId="3422" LastEditorUserId="3422" LastEditDate="2018-06-21T19:29:41.640" LastActivityDate="2018-06-21T19:29:41.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6806" PostTypeId="2" ParentId="6797" CreationDate="2018-06-21T11:04:33.947" Score="25" Body="&lt;p&gt;The answer, as always, was cost. 'White' CRTs were cheaper because they were used in B/W TV sets. The color itself has no impact on resolution, but TV tubes didn't need to be as sharp so they could be made cheaper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why were 'high resolution' monitors green or amber? Because these phosphors have a longer persistence so the image doesn't flicker as much, especially at the lower refresh rates commonly used to get higher vertical resolution. Paper-white is nicer, but requires a mix of different colored phosphors which is difficult to make with matched persistances (without which the image would change color as it faded). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The down-side of a long-persistance screen is horrible smearing of moving images - hopeless for action games or TV shows, and not good for scrolling text either. &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2018-06-21T11:04:33.947" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6808" PostTypeId="2" ParentId="6797" CreationDate="2018-06-21T16:49:28.350" Score="8" Body="&lt;p&gt;A few points to expand on previous answers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In those days, resolution wasn't limited by &lt;em&gt;phosphor&lt;/em&gt;, but by &lt;em&gt;video bandwidth&lt;/em&gt; (and video memory). A standard TV had a bandwidth around 2-3&amp;nbsp;MHz, enough to support a PET or APPLE ][ - style 40x24 text display, or about 320x240 dots. The TRS-80 Model I monitor had slight modifications to the video circuitry to allow a 64x16 text display, about 384 horizontal dots (characters were 5x7 in a cell that was 8 by... shoot, I don't remember how many vertical pixels per character).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Higher-quality monitors had higher bandwidth, and could support more horizontal resolution. (Vertical resolution was tied to NTSC/PAL video standards, which limited the number of scan lines; non-NTSC monitors got &lt;em&gt;really&lt;/em&gt; expensive &lt;em&gt;really&lt;/em&gt; quickly.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As others pointed out, long-persistence phosphors could let you get away with slower scans, but they were also less flickery at standard rates. Thus, they commanded a premium.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember more of this than I should, because I used &lt;a href=&quot;https://www.tinaja.com/ebooks/tvtcb.pdf&quot; rel=&quot;noreferrer&quot;&gt;Don Lancaster's &lt;em&gt;TV Typewriter Cookbook&lt;/em&gt;&lt;/a&gt; to build an outboard video card for my TRS-80, and I had to learn &lt;em&gt;all&lt;/em&gt; about video timing and dot-clocks. It ended up displaying 100x30 characters on an 800x240-pixel raster, on an amber monitor that's still out in the garage somewhere. Pretty luxurious, for the time...&lt;/p&gt;&#xA;" OwnerUserId="495" LastEditorUserId="202" LastEditDate="2018-06-22T08:48:23.583" LastActivityDate="2018-06-22T08:48:23.583" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6809" PostTypeId="1" AcceptedAnswerId="6810" CreationDate="2018-06-21T18:44:49.737" Score="5" ViewCount="857" Body="&lt;p&gt;Take the following machine code for the 65c816 for the SNES (Super Nintendo):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00000000  ea ea 78 18 fb c2 18 a2  ff 1f 9a 20 fa 80 e2 20  |..x........ ... |&#xA;00000010  a9 80 8d 00 21 a9 e0 8d  22 21 a9 00 8d 22 21 a9  |....!...&quot;!...&quot;!.|&#xA;00000020  0f 8d 00 21 ea ea ea ea  ea ea ea ea ea ea ea ea  |...!............|&#xA;00000030  ea ea ea ea ea ea ea ea  ea ea ea ea ea ea ea ea  |................|&#xA;00000040  ea ea ea ea ea ea ea ea  ea ea ea ea ea ea ea ea  |................|&#xA;00000050  ea ea ea ea ea ea ea 4c  57 80 40 00 00 00 00 00  |.......LW.@.....|&#xA;00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&#xA;00000070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&#xA;00000080  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&#xA;00000090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&#xA;000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&#xA;000000b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&#xA;000000c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&#xA;000000d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&#xA;000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&#xA;000000f0  00 00 00 00 00 00 00 00  00 40 e2 30 a9 8f 8d 00  |.........@.0....|&#xA;00000100  21 9c 01 21 9c 02 21 9c  03 21 9c 05 21 9c 06 21  |!..!..!..!..!..!|&#xA;00000110  9c 07 21 9c 08 21 9c 09  21 9c 0a 21 9c 0b 21 9c  |..!..!..!..!..!.|&#xA;00000120  0c 21 9c 0d 21 9c 0d 21  a9 ff 8d 0e 21 8d 10 21  |.!..!..!....!..!|&#xA;00000130  8d 12 21 8d 14 21 a9 07  8d 0e 21 8d 10 21 8d 12  |..!..!....!..!..|&#xA;00000140  21 8d 14 21 9c 0f 21 9c  0f 21 9c 11 21 9c 11 21  |!..!..!..!..!..!|&#xA;00000150  9c 13 21 9c 13 21 a9 80  8d 15 21 9c 16 21 9c 17  |..!..!....!..!..|&#xA;00000160  21 9c 1a 21 9c 1b 21 a9  01 8d 1b 21 9c 1c 21 9c  |!..!..!....!..!.|&#xA;00000170  1c 21 9c 1d 21 9c 1d 21  9c 1e 21 8d 1e 21 9c 1f  |.!..!..!..!..!..|&#xA;00000180  21 9c 1f 21 9c 20 21 9c  20 21 9c 21 21 9c 23 21  |!..!. !. !.!!.#!|&#xA;00000190  9c 24 21 9c 25 21 9c 26  21 9c 27 21 9c 28 21 9c  |.$!.%!.&amp;amp;!.'!.(!.|&#xA;000001a0  29 21 9c 2a 21 9c 2b 21  8d 2c 21 9c 2d 21 9c 2e  |)!.*!.+!.,!.-!..|&#xA;000001b0  21 9c 2f 21 a9 30 8d 30  21 9c 31 21 a9 e0 8d 32  |!./!.0.0!.1!...2|&#xA;000001c0  21 9c 33 21 9c 00 42 a9  ff 8d 01 42 9c 02 42 9c  |!.3!..B....B..B.|&#xA;000001d0  03 42 9c 04 42 9c 05 42  9c 06 42 9c 07 42 9c 08  |.B..B..B..B..B..|&#xA;000001e0  42 9c 09 42 9c 0a 42 9c  0b 42 9c 0c 42 9c 0d 42  |B..B..B..B..B..B|&#xA;000001f0  58 60 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |X`..............|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is almost verbatim the assembled source from &lt;a href=&quot;https://en.wikibooks.org/wiki/Super_NES_Programming/Initialization_Tutorial&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikibooks.org/wiki/Super_NES_Programming/Initialization_Tutorial&lt;/a&gt; The only difference is some NOP instructions inserted at various places to make it more readable to myself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to write an emulator and I'm working on the JSR instruction at the moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;http://www.6502.org/tutorials/65c816opcodes.html#6.2.2.1&quot; rel=&quot;noreferrer&quot;&gt;http://www.6502.org/tutorials/65c816opcodes.html#6.2.2.1&lt;/a&gt; this is what I have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;JSR pushes the 16-bit address (i.e. the program counter) of the JSR instruction plus 2 onto the stack, and jumps to an address within the current program bank. In other words, the address pushed is one less than the address of the next instruction. The high byte is pushed first, then the low byte is pushed.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this is fine. The problem is this. Look at this line:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00000000  ea ea 78 18 fb c2 18 a2  ff 1f 9a 20 fa 80 e2 20  |..x........ ... |&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;0x20 is the opcode for JSR. It takes a two byte argument, i.e. 0xfa and 0x80 (little endian), so it basically jumps to the absolute address 0x80fa within bank 0 and pushes the return address for the next instruction (the one after the JSR and its operand) onto the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, from looking at the source code, I know that the JSR should jump to somewhere here:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;000000f0  00 00 00 00 00 00 00 00  00 40 e2 30 a9 8f 8d 00  |.........@.0....|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This can be seen from this excerpt of the source:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; .MACRO Snes_Init&#xA;    sei         ; Disabled interrupts&#xA;    clc         ; clear carry to switch to native mode&#xA;    xce         ; Xchange carry &amp;amp; emulation bit. native mode&#xA;    rep     #$18    ; Binary mode (decimal mode off), X/Y 16 bit&#xA;         ldx    #$1FFF  ; set stack to $1FFF&#xA;         txs&#xA;&#xA;         jsr Init&#xA; .ENDM&#xA;&#xA; .bank 0&#xA; .section &quot;Snes_Init&quot; SEMIFREE&#xA; Init:&#xA;    nop&#xA;    sep     #$30    ; X,Y,A are 8 bit numbers&#xA;    nop&#xA;    lda     #$8F    ; screen off, full brightness&#xA;    sta     $2100   ; brightness + screen enable register &#xA;    stz     $2101   ; Sprite register (size + address in VRAM) &#xA;    stz     $2102   ; Sprite registers (address of sprite memory [OAM])&#xA;    stz     $2103   ;    &quot;&quot;                       &quot;&quot;&#xA;    ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From this it makes sense to me that the target address should be 0x00fa (within bank 0), not 0x80fa (within bank 0).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Address 0x80fa seems to be part of the ROM, but at this address there is nothing, only null bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is the machine code for &quot;jsr Init&quot; assembled to &quot;20 fa 80&quot;? I know this is little endian, again my question is why the operand address doesn't make sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can only assume I'm missing some fundamentals about how the 65c816 works, overlook something obvious, or that the address is relative to some other address. But the RESET vector in this particular case is 0, so I'm not getting what it should be relative to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a bonus question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is there a 0x40 (an RTI opcode, I believe) before the first nop at the Init: label?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More information:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The assembled and linked ROM runs fine in well-known emulators, there is nothing wrong with the assembled machine code itself. It was assembled using &quot;WLA 65816 Macro Assembler v9.8a&quot;, if it matters.&lt;/p&gt;&#xA;" OwnerUserId="7413" LastEditorUserId="276" LastEditDate="2018-08-01T11:08:35.510" LastActivityDate="2018-08-01T11:08:35.510" Title="How does JSR actually work on the 65c816 CPU for the SNES (Super Nintendo)?" Tags="&lt;assembly&gt;&lt;memory-layout&gt;&lt;snes&gt;&lt;65816&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6810" PostTypeId="2" ParentId="6809" CreationDate="2018-06-21T18:59:58.727" Score="11" Body="&lt;p&gt;&lt;code&gt;JSR&lt;/code&gt; works how you think — the program counter will head off to &lt;code&gt;80fa&lt;/code&gt; — but the SNES doesn't. The two most common memory mappers &lt;a href=&quot;https://en.wikibooks.org/wiki/Super_NES_Programming/SNES_memory_map#HiROM&quot; rel=&quot;noreferrer&quot;&gt;both mirror what's at &lt;code&gt;$00xx&lt;/code&gt; at &lt;code&gt;$80xx&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when the processor reads from $80fa it gets the same thing as if it read from $00fa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Per the linked article, in a 'HiROM' (i.e. one of the two common types):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Banks $80 - $FF can also be used for faster memory access. Many portions of memory &amp;lt;$80 are accessed at 2.68 MHz (200 ns). Accessing memory &amp;gt;$80 is done at 3.58 MHz (120 ns) if the value at address $420d (hardware register) is set to 1.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So the assembler is even likely to &lt;em&gt;prefer&lt;/em&gt; the mirrored addresses for speed.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-06-21T20:28:10.283" LastActivityDate="2018-06-21T20:28:10.283" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6811" PostTypeId="2" ParentId="6801" CreationDate="2018-06-21T19:18:39.077" Score="-3" Body="&lt;p&gt;I set up my Windows 95 machine to boot to DOS or Windows 3.1 or Windows 95.  I believe the machine initially booted via DOS, calling my autoexec.bat, which ran a user menu.  Choosing &quot;DOS&quot; exited to the DOS prompt.  Choosing one of the Windows installations would rename one of the directories to &quot;C:\windows&quot;, the other to something outside of the $PATH, and then the autoexec.bat file would call &quot;win&quot;.  I can't recall how that &quot;win&quot; call would start up 95 though; it's been 20 years.&lt;/p&gt;&#xA;" OwnerUserId="8963" LastActivityDate="2018-06-21T19:18:39.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6812" PostTypeId="2" ParentId="6797" CreationDate="2018-06-21T23:55:25.120" Score="2" Body="&lt;p&gt;Early research found that green or amber was easiest on the eyes of people looking at CRT monitors all day. Actually, I preferred amber, myself.&lt;/p&gt;&#xA;" OwnerUserId="8967" LastActivityDate="2018-06-21T23:55:25.120" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6813" PostTypeId="1" CreationDate="2018-06-22T04:52:25.353" Score="1" ViewCount="360" Body="&lt;p&gt;This might have been networked computers or people that took turns at a computer console. It may have been something like &lt;em&gt;Wolfenstien&lt;/em&gt;, &lt;em&gt;Frogger&lt;/em&gt;, &lt;em&gt;Pacman&lt;/em&gt;, or &lt;em&gt;Missile Command&lt;/em&gt; played on a PDP-11, home, or personal computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BymZN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BymZN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://phys.org/news/2017-09-olympic-daredevils-dont-video-games.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This excludes dedicated &lt;em&gt;pinball&lt;/em&gt;, &lt;em&gt;game consoles&lt;/em&gt;, or &lt;em&gt;arcade cabinets&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;When and where was the first home computer game convention held?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastActivityDate="2018-06-22T12:59:57.893" Title="When and where was the first home computer game convention held?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6814" PostTypeId="2" ParentId="6801" CreationDate="2018-06-22T07:16:00.083" Score="1" Body="&lt;p&gt;Yes &lt;strong&gt;MS-DOS&lt;/strong&gt; menu is in &lt;code&gt;autoexec.bat&lt;/code&gt; and &lt;code&gt;config.sys&lt;/code&gt;. These two files are use by &lt;strong&gt;MS-DOS&lt;/strong&gt; startup. The &lt;code&gt;config.sys&lt;/code&gt; is for loading drivers and &lt;code&gt;autoexec.bat&lt;/code&gt; is used to set prompt, variables, &lt;strong&gt;TSR&lt;/strong&gt;s and run desired apps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So up to &lt;strong&gt;w9x&lt;/strong&gt; it can be also used to select &lt;strong&gt;OS&lt;/strong&gt; as the &lt;strong&gt;Windows&lt;/strong&gt; was just an executable on top of &lt;strong&gt;MS-DOS&lt;/strong&gt;. So you add menu entry in &lt;code&gt;config.sys&lt;/code&gt; with drivers needed (windows has its own drivers but &lt;strong&gt;IIRC&lt;/strong&gt; it needed &lt;code&gt;himem.sys&lt;/code&gt; before running &lt;code&gt;win.exe&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are mine:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Autoexec.bat&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@echo off&#xA;PROMPT $P$G&#xA;PATH e:\rescue;e:\rescue\dos98;e:\rescue\vcnew;e:\rescue\pack;e:\rescue\views&#xA;e:&#xA;cd rescue&#xA;SET TEMP=e:\rescue\temp&#xA;SET BLASTER=A220 I5 D1 H5 P330 E620 T6&#xA;SET SOUND=e:\rescue\SB16&#xA;SET MIDI=SYNTH:1 MAP:E MODE:0&#xA;e:\rescue\SB16\DIAGNOSE /S&#xA;e:\rescue\SB16\AWEUTIL /S&#xA;e:\rescue\SB16\MIXERSET /P /Q&#xA;&#xA;goto %config%&#xA;:a&#xA;:b&#xA;:c&#xA;:d&#xA;:e&#xA;&#xA;lh gmouse&#xA;LH vc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Config.sys&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;devicehigh=e:\rescue\dos98\interlnk.exe&#xA;shell e:\rescue\dos98\command.com e:\rescue\dos98 /P&#xA;lastdrive=M&#xA;files=50&#xA;buffers=8&#xA;stacks=0,0&#xA;DOS=HIGH,UMB&#xA;&#xA;[menu]&#xA;menuitem=a,QEMM&#xA;menuitem=b,EMM EMS&#xA;menuitem=c,EMM NOEMS&#xA;menuitem=d,STANDART&#xA;menuitem=e,RAMDISK 32MB&#xA;menudefault=d,1&#xA;&#xA;[a]&#xA;device=e:\rescue\dos98\qemm386.sys RAM BE:N&#xA;[b]&#xA;device=e:\rescue\dos98\himem.sys &#xA;devicehigh=e:\rescue\dos98\emm386.exe rammax&#xA;[c]&#xA;device=e:\rescue\dos98\himem.sys&#xA;devicehigh=e:\rescue\dos98\emm386.exe noems&#xA;[d]&#xA;device=e:\rescue\dos98\himem.sys&#xA;[e]&#xA;device=e:\rescue\dos98\himem.sys&#xA;devicehigh=e:\rescue\dos98\ramdrive.sys 32767 /e&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;taken from: &lt;a href=&quot;https://stackoverflow.com/a/46521076/2521214&quot;&gt;SO/SE: Run Turbo C++ in Freedos&lt;/a&gt; where you can find also tips on how to run &lt;strong&gt;MS-DOS&lt;/strong&gt; on newer machines. Beware that from &lt;strong&gt;W95&lt;/strong&gt; the &lt;strong&gt;MS-DOS&lt;/strong&gt; is not fully compatible with the old &lt;strong&gt;MS-DOS 6.22&lt;/strong&gt; so some games and apps will not work properly or at all. The other answers here cover the &lt;strong&gt;MS-DOS&lt;/strong&gt; menu well enough so I see no point in describing the obvious mechanism...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;strong&gt;NT,W2K&lt;/strong&gt; and &lt;strong&gt;XP&lt;/strong&gt; there was no more &lt;strong&gt;MS-DOS&lt;/strong&gt; just console so for those you need to use &lt;code&gt;boot.ini&lt;/code&gt; like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[boot loader]&#xA;timeout=30&#xA;default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS&#xA;[operating systems]&#xA;multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=&quot;Microsoft Windows XP Professional&quot; /noexecute=optin /fastdetect /usepmtimer&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Each line in the &lt;code&gt;[operating systems]&lt;/code&gt; represents one &lt;strong&gt;OS&lt;/strong&gt; to boot from. You also need separate partition per &lt;strong&gt;OS&lt;/strong&gt; so have &lt;strong&gt;MS-DOS&lt;/strong&gt; on separate partition (or floppy) there are also utilities like &lt;strong&gt;Lilo boot&lt;/strong&gt; that can handle multi &lt;strong&gt;OS&lt;/strong&gt;. &lt;strong&gt;IIRC&lt;/strong&gt; the &lt;code&gt;boot.ini&lt;/code&gt; could be edited from &lt;code&gt;msconfig.exe&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above example is from &lt;strong&gt;XP&lt;/strong&gt;. The &lt;strong&gt;Vista,W7&lt;/strong&gt; and latter do not use &lt;code&gt;boot.ini&lt;/code&gt; anymore instead they have some kind of boot app (like Lilo boot).&#xA;The menu is usually created during Windows installation (as the installer detects &lt;strong&gt;OS&lt;/strong&gt; in the &lt;strong&gt;PC&lt;/strong&gt;) but nowadays &lt;strong&gt;HW&lt;/strong&gt; has usually boot menu directly in &lt;strong&gt;BIOS&lt;/strong&gt; of the &lt;strong&gt;MB&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the past I usually got &lt;strong&gt;MS-DOS 6.22 + W9X + W2K&lt;/strong&gt; on single machine as I got plenty of apps running only in those specific &lt;strong&gt;OS&lt;/strong&gt; that I was not able to part with... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PS.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At one time I even got &lt;strong&gt;5.25&quot; DD&lt;/strong&gt; Floppy with &lt;strong&gt;MS-DOS 6.22&lt;/strong&gt; system files (and all the rest was on &lt;strong&gt;HDD&lt;/strong&gt; hence the weird &lt;code&gt;e:\rescue\&lt;/code&gt; path as the floppy did not have enough space. That solution was great as even &lt;code&gt;command.com&lt;/code&gt; was on the &lt;strong&gt;HDD&lt;/strong&gt; so no speed problems due to booting from floppy. That is what&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;shell e:\rescue\dos98\command.com e:\rescue\dos98 /P&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;does in the &lt;code&gt;config.sys&lt;/code&gt; of mine ... And the &lt;code&gt;E:&lt;/code&gt; was just logical drive instead of separate partition ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case you are going for MS-DOS you should see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6256/6868&quot;&gt;How to patch binaries in DOS?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;on how to deal with &lt;strong&gt;runtime error 200&lt;/strong&gt; and for list of apps you should have in your OS (with link to archive where many of them are still available).&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-06-22T07:40:37.183" LastActivityDate="2018-06-22T07:40:37.183" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6815" PostTypeId="1" AcceptedAnswerId="6818" CreationDate="2018-06-22T09:30:44.360" Score="31" ViewCount="6693" Body="&lt;p&gt;The BBC News article &lt;a href=&quot;https://www.bbc.com/news/science-environment-44554891&quot; rel=&quot;nofollow noreferrer&quot;&gt;The 'Baby' that ushered in modern computer age&lt;/a&gt; along with the short embedded video begins with:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A machine that took up an entire room at a laboratory in Manchester University ran its first program at 11am on 21 June 1948.&lt;/p&gt;&#xA;&lt;p&gt;The prototype completed the task in 52 minutes, having run through 3.5 million calculations.&lt;/p&gt;&#xA;&lt;p&gt;The Manchester Baby, known formally as the Small-Scale Experimental Machine, was the world's first stored-program computer.&lt;/p&gt;&#xA;&lt;p&gt;It paved the way for the first commercially-available computers in a city known for centuries of science and innovation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A vignette within the short video shows a clip of someone writing the expression 2&lt;sup&gt;127&lt;/sup&gt; − 1 on a chalk board.&lt;/p&gt;&#xA;&lt;p&gt;Why would an expression like this be a good test  of an early stored-program computing device? It of course would not be the only test, and at some point perhaps computing pi would have also been tried, but why might this have been one important test?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xPoNz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xPoNz.jpg&quot; alt=&quot;Still image from the video: bespectacled man facing away from the camera writes 2¹²⁷ − 1 on a chalkboard; text below says ‘by being able to find out the answer to equations like this…’&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7118" LastEditorUserId="15334" LastEditDate="2020-11-24T16:44:44.443" LastActivityDate="2020-11-24T16:44:44.443" Title="Why was 2^127 − 1 an interesting problem for &quot;Baby&quot;?" Tags="&lt;history&gt;&lt;hardware-testing&gt;&lt;testing&gt;" AnswerCount="2" CommentCount="14" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6816" PostTypeId="2" ParentId="6815" CreationDate="2018-06-22T09:42:11.703" Score="31" Body="&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems as if &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/736/david-marshall&quot;&gt;David Marshall&lt;/a&gt; has &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6815/why-was-2127-1-an-interesting-problem-for-baby/6818?noredirect=1#comment18328_6816&quot;&gt;found the missing link&lt;/a&gt;: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The footage used in the clip is not just from the Manchester Baby, but also from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Mark_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Manchester Mark 1&lt;/a&gt; which became operational about a year after. As noted its &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Mark_1#First_programs&quot; rel=&quot;nofollow noreferrer&quot;&gt;first (useful) program&lt;/a&gt; was in fact a proof for Mersenne primes, a perfect fit for the chalkboard scene.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looks like the combined effort has revealed that this video features less than exact wording (equation vs. expression) and a mixture of pictures, not all belonging to the topic named.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;First of all, the clip does &lt;strong&gt;not&lt;/strong&gt; state that this problem was used, especially not used as a test for reliability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next a short look at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Baby&quot; rel=&quot;nofollow noreferrer&quot;&gt;Baby's Wiki entry&lt;/a&gt; would have revealed that one of the first problems used - and indeed used to prove reliability - was to find the highest (all) dividers for a rather large, but still manageable number, in this case 2&lt;sup&gt;18&lt;/sup&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The first of three programs written for the machine found the highest proper divisor of 2&lt;sup&gt;18&lt;/sup&gt; (262,144), a calculation that was known would take a long time to run—and so prove the computer's reliability—by testing every integer from 2&lt;sup&gt;18&lt;/sup&gt; downwards, as division was implemented by repeated subtraction of the divisor. The program consisted of 17 instructions and ran for 52 minutes before reaching the correct answer of 131,072, after the Baby had performed 3.5 million operations (for an effective CPU speed of 1.1 kIPS).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's all about what to test. In this case it might be not only correct workings, but more about reliability over longer durations. Doing one operation right isn't a big deal and can be tested while building. Doing it a million times under program control is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Useful programs need to fit several criteria; some may be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Finish&lt;/li&gt;&#xA;&lt;li&gt;Finish within a reasonable time&lt;/li&gt;&#xA;&lt;li&gt;Fit into program space&lt;/li&gt;&#xA;&lt;li&gt;Use as few instructions as possible&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;and, most importantly&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;5&quot;&gt;&#xA;&lt;li&gt;Have a well known answer&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;While #1 seems obvious and #2 simple, it isn't, as it needs a problem that scales well, so its input parameter can be used to adjust (expected) runtime. A problem solved in a few seconds doesn't test the machine well; one running for days may be already way outside even the most optimistic guesses about reliability. Being a 32-bit machine, anything between 2&lt;sup&gt;0&lt;/sup&gt; and 2&lt;sup&gt;31&lt;/sup&gt; may have been usable - the latter one with a runtime of maybe a year :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, #3, where again #4 is a crucial restriction, as it is less of an issue for a small program to prove its correctness as a transformation of the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, #5 is really obvious. In this case it was perfect as the answers were not only well known, but (back then) known to everyone and a pain in the ass - hence large volumes of books just listing divisors for numbers :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A problem like finding all divisors or the largest divisor fits well to all of these points and even offers secondary benefits like being repetitive but with changing data.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A vignette within the short video shows a clip of someone writing the expression 2&lt;sup&gt;127&lt;/sup&gt; - 1 on a chalk board.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, as usual with such an out-of-context picture, multiple explanations are possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First &lt;code&gt;2&lt;sup&gt;127&lt;/sup&gt;-1&lt;/code&gt; is not a problem but a number (the largest number that can be written using 127 bits). And we can only guess what it should mean. Then there is a question mark below, so maybe that is part of the notation? As in &lt;em&gt;&quot;What's the largest divisor for 2&lt;sup&gt;127&lt;/sup&gt;-1&quot;&lt;/em&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there's a &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Baby#First_programs&quot; rel=&quot;nofollow noreferrer&quot;&gt;separate section in the Wiki article&lt;/a&gt; naming the first three programs, with the third being one for long divisions (written by Turing), so maybe the above describes exactly this program as in allowing to &lt;em&gt;&quot;dividing (anything up to) 2&lt;sup&gt;127&lt;/sup&gt;-1 by some number&quot;&lt;/em&gt; (*1). This would, of course, mean that the pictures taken where not from first operation but at least 3-4 weeks later (*2) when Turing wrote that program (*3). Above clip being obviously edited and merged from original reels and pictures, this might be quite possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or it is, as so often when media report about something, a staged setup. Just a scientist writing something on a chalkboard to make it look good. After all, the reporter and film crew may have had - as so often - no idea what it's about and were just looking to make it work on the screen. The text &quot;...equations like this...&quot; might be another hint, as it's obviously not an equation - journalists often use words they believe to be fitting but not really words that describe what's shown or happening. Remember how often some stupid header files are dumped on screen when there is some reporting about programming or anything computer related? Not a new invention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make your pick, I would name the second one to be true - but I can't rule out the last one.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - 2&lt;sup&gt;127&lt;/sup&gt;-1 would be the largest number that can be packed into four 32-bit words while still leaving one bit for a sign or other markings (like NaN). Again a little hint on multi-word arithmetic as Turing obviously programmed. Of course, without more detailed information about how many words that program used (or maybe a variable number) for its 'BigNum' representation, it is just a little hint supporting this explanation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Back then that was well within the news cycle :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - More support for this comes by the fact be that it is hard to imagine that any other, more complex problem (like proving a Mersenne prime) is described, as such would clearly go beyond the abilities of the Manchester Baby. It was only a demonstrator with 32 words of memory, usable either as program or data storage. Already the (rather simple) first program used up 25 of them (17 instructions, 8 data).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further the machine offered only 3 ALU instructions (subtraction, negation and test for a negative number), so any higher function must be replaced by looping around these. I can see no chance to implement something as complicated as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lucas Lehmer Test&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-11-25T13:41:01.913" LastActivityDate="2019-11-25T13:41:01.913" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="6817" PostTypeId="2" ParentId="6813" CreationDate="2018-06-22T11:51:58.813" Score="2" Body="&lt;p&gt;Evidence about early informal meet-ups of game developers and gamers is probably lost to history, but there is plenty of documentation about the first major conventions that are still held annually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Game developers were an &quot;organized force&quot; in the industry long before the consumers. In 1988, the Game Developers' Conference (GDC) was first held. It was organized by developer Chris Crawford, and there were 28 folks in attendance. This annual developers' conference grew rapidly. It is held in San Francisco and considered one of the preeminent annual events of its kind. It also expanded into China in 2006.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the consumer side, computer video games began by being featured alongside other products at the major events like the Consumer Electronics Show (CES) in Las Vegas. With the growth spurt in the industry in the early 1990's, organizers were able to break away to form their own convention around only gaming - which by that time included games for the burgeoning consoles and PC platforms. E3 (Electronic Entertainment Expo) was first held in 1995. It takes place annually in Los Angeles and remains today as one of the most important of a large number of annual gaming conventions held around the world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't much later, in 1996, that QuakeCon held its first event. This is another annual event that still takes place in Dallas, TX, and is of the gaming tournament variety - id Software's Quake being the main franchise for its tournaments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To directly address your question, I don't know of any surviving evidence of a significant, early, computer-only gaming convention. By the time the consumer side of it was well-organized enough to hold events separate from the rest of the electronics industry, mainstream gaming had already moved on from home computers to consoles.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-06-22T12:59:57.893" LastActivityDate="2018-06-22T12:59:57.893" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6818" PostTypeId="2" ParentId="6815" CreationDate="2018-06-22T13:30:28.203" Score="45" Body="&lt;p&gt;It's hard to know for sure with just that picture, but that's a Mersenne number and a prime one at that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a mathematician writes a Mersenne number on a board they are not thinking about getting all the digits. By far the most interesting and likely question computationally speaking would have been &quot;prove that the number is prime&quot;. That could be used as a test since that number was known via e.g. Lucas–Lehmer primality test that indeed it was prime (Mersenne.org says this one was found by Lucas himself, 1876).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, running a test program that is not supposed to find a result is not necessarily the most robust of tests, because there are many ways the program could fail and still not find anything. Still, it might be helpful if they were able to monitor the progress steps as it ran.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That assumes the question was really used as a reliability test at all. I think it's just as likely that it was put on the board to show the newsreel crew &quot;what kind of problems are of interest to mathematicians, which this machine would be able to resolve a lot faster than humans could&quot;. The scientists might have explained how Lucas needed X days/weeks/months to prove that the number is prime but the machine could prove it (e.g. by computing the Lucas-Lehmer test) in seconds/minutes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take that and the rest of the reel to the editing room, and it can quickly morph into the narration we are presented with.&lt;/p&gt;&#xA;" OwnerUserId="4577" LastActivityDate="2018-06-22T13:30:28.203" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6819" PostTypeId="1" AcceptedAnswerId="6820" CreationDate="2018-06-22T14:23:13.033" Score="14" ViewCount="1134" Body="&lt;p&gt;I remember seeing the following a lot when I was younger, and recently saw it again in a DOSbox setting:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XKsaM.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XKsaM.gif&quot; alt=&quot;A gray Windows 3.x desktop, on top of which a single window without a title bar is displayed. Inside the window, there is a maze of red squiggles which shifts and changes size; below the maze there is a progress bar that starts empty and runs up to 10%, and the following caption typeset in the System font: Your program is testing for optimal display performance so that it will look its best on your system. This will take a few minutes, but you will only see it again if you change to new display settings. A Program Manager icon is seen in the bottom-left corner of the screen.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For those that haven't seen it, the squiggly red lines shift and undulate quite a bit, and it actually looks like it's doing something fairly complicated. &lt;strong&gt;What is the program actually doing here?&lt;/strong&gt; I don't actually know anything about graphics processing, so I assuming that it's performing some kind of stress test on the system, but I have no clue as to what it might be doing behind the scenes. &lt;strong&gt;And: If the software is trying to tune itself, how would it know what to change, especially on an older system?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="8978" LastEditorUserId="15334" LastEditDate="2021-04-12T05:43:40.580" LastActivityDate="2021-04-12T05:43:40.580" Title="&quot;Your program is testing for optimal display performance&quot; in older Windows games" Tags="&lt;gaming&gt;&lt;windows-3.x&gt;&lt;windows-95&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6820" PostTypeId="2" ParentId="6819" CreationDate="2018-06-22T15:03:43.077" Score="17" Body="&lt;p&gt;Well, turns out the &lt;a href=&quot;https://en.wikipedia.org/wiki/WinG#Implementation&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article&lt;/a&gt; has the answer already:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;WinG would also perform a graphics hardware/driver profiling test on the first execution of the program in order to determine the best way to manipulate the graphics hardware. This test showed a window full of red curved lines, sections of which would wobble as performance was tested. Once WinG had determined the fastest calls that did not cause graphics corruption, a profile would be saved so that the test would not need to be performed again.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Thanks to Stephen Kitt for the comment of what to look up, &quot;WinG&quot;&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-06-22T15:03:43.077" CommentCount="5" CommunityOwnedDate="2018-06-22T15:03:43.077" ContentLicense="CC BY-SA 4.0" />
  <row Id="6821" PostTypeId="1" AcceptedAnswerId="6824" CreationDate="2018-06-22T18:39:58.713" Score="9" ViewCount="655" Body="&lt;p&gt;It is tempting to say - and I have said - that Intel made a mistake in the design of the 8086 and 8088, in going from 16 bit addresses to only 20 bits; if they had even shifted the segment registers by 8 bits instead of 4, we could have had 24 bit addressing, which in the eighties would have been a dramatic improvement on the actual state of affairs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reasons for this have been discussed - &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1016/why-was-segment-register-value-scaled-by-such-a-small-factor-of-16-on-i8086&quot;&gt;Why was segment register value scaled by such a small factor of 16 on i8086?&lt;/a&gt; - the important and nonobvious point being that many more address bits would have required more pins on the CPU, therefore a larger package, which would have cost more. Indeed if we look at the pinout - &lt;a href=&quot;http://www.datasheetcafe.com/8088-datasheet-8-bit-hmos-microprocessor-intel/&quot; rel=&quot;noreferrer&quot;&gt;http://www.datasheetcafe.com/8088-datasheet-8-bit-hmos-microprocessor-intel/&lt;/a&gt; - we see that it is already pretty tight, with some address pins already being multiplexed with other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would there have been a substantial jump in cost associated with going even slightly beyond 40 pins? If so, was there any reasonable way to add even one or two extra bits of address?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-07-27T19:56:10.587" Title="8086 pinout and address space limit" Tags="&lt;hardware&gt;&lt;intel&gt;&lt;8086&gt;&lt;8088&gt;" AnswerCount="2" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="6822" PostTypeId="2" ParentId="6821" CreationDate="2018-06-22T20:24:38.850" Score="6" Body="&lt;h3&gt;Total System Cost = RAM + CPU + Everything Else&lt;/h3&gt;&#xA;&lt;p&gt;When you are going for the mass market - as opposed to workstations or other high-end systems - the key is total system pricing. Three of the biggest pieces - then and now - are RAM, mass storage and CPU. Mass storage varied quite a bit - floppies, hard drives, etc. - and, particularly with floppies, the storage was expandable at low cost by simply swapping media. So the core (pun intended) costs come down to RAM and CPU. While I know there are systems easier/cheaper to build with one architecture vs. another, in the end the RAM and CPU are two of the biggest factors in most systems, at least in 1978 through the 1980s.&lt;/p&gt;&#xA;&lt;p&gt;What does that really mean? RAM was a huge cost. If you only needed a little then the CPU architecture wasn't much of an issue. But if you needed a lot then the RAM pricing was more of an issue, except for the very high end, than CPU architecture.&lt;/p&gt;&#xA;&lt;p&gt;At the time the 8086 was released in 1978, typical machines had 64k and many had far less than that. Using &lt;a href=&quot;https://jcmit.net/memoryprice.htm&quot; rel=&quot;noreferrer&quot;&gt;this Memory Price history site&lt;/a&gt; as a guide, in 1978 a 64k board cost &amp;gt; $1,000. You couldn't, typically, get 1 Meg. for under $1,000 until ~ 1984, by which time the 80286 was in use in the IBM AT. The 80386, which could make use of a LOT more RAM came out just a year after that, in 1985.&lt;/p&gt;&#xA;&lt;p&gt;To put it another way, when the 8086 was introduced, jumping from 64k to 128k was expensive but possible - and provided a huge improvement over 8080/Z80 systems. But going to 1 Meg. was pie-in-the-sky for your typical system builder. A home computer - even a typical small business or departmental computer couldn't justify spending $10,000 on RAM.&lt;/p&gt;&#xA;&lt;p&gt;The target market, except for &amp;quot;real programmers&amp;quot; also didn't care about architecture. If it worked - running applications they needed or languages they needed to write their own software - that was good enough. Could a CPU address 16 Meg. instead of 1 Meg.? That would be great - but totally irrelevant if you couldn't even afford 1/2 Meg. Kind of like buying a house with enough land to expand from 3 bedrooms to 30 bedrooms. If you can't afford it, it doesn't matter - just use the 3 bedroom house as best as you can.&lt;/p&gt;&#xA;&lt;p&gt;So while Intel could have, perhaps at the expense of some other features or at a slightly higher chip cost, given the 8086 a wider address bus and larger memory space, the mass market would not have made use of it for several years. It was only with the incredible success of the IBM PC and its clones that we ended up with a single broad computing architecture that lasted for so many years in the microcomputer world. IBM with its mainframe 360, 370, etc. architecture was already well established, but micros varied quite a bit in the early days and I suspect many designers did not anticipate taking an architecture designed in 1982, and initially using a CPU designed in 1978, and using it to run the same applications in a Windows XP DOS box inside Windows 7 36 years later. And yes, that application is itself often still limited to 1 Meg. - or typically ~ 640k due to the original IBM PC memory structure. I still have, believe it or not, a few applications like that out there, and I know I'm not the only one.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-06-22T22:51:52.100" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6824" PostTypeId="2" ParentId="6821" CreationDate="2018-06-22T21:12:36.487" Score="9" Body="&lt;h2&gt;TLDR:&lt;/h2&gt;&#xA;&lt;p&gt;Yes, it would have been possible to extend it up to 22 bit with minimal changes, 21 or 23 bit by moving two 8086 specific signals and 24 with breaking 8086/88 hardware compatibility.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;p&gt;As usual with &lt;em&gt;What If&lt;/em&gt; questions, there is a huge area of possible answers. Same here. But I think we can concentrate on two issues: Changed packaging and signal multiplexing.&lt;/p&gt;&#xA;&lt;h2&gt;a) Different Packaging&lt;/h2&gt;&#xA;&lt;h3&gt;DIP64&lt;/h3&gt;&#xA;&lt;p&gt;Of course Intel could have gone with a different housing. For example like Motorola with 64 pin &lt;strong&gt;.9&amp;quot; DIP64&lt;/strong&gt;. But like Motorola this would require Intel to invest into new packaging machines to handle DIP64 (in large numbers), while DIP40 was plenty available (*1), thus increasing first time cost.&lt;/p&gt;&#xA;&lt;p&gt;Similar on the customer side it would increase cost by the need for increased PCB space (*21) plus more expensive sockets (if socketed) (*3). Not exactly a great sales pitch - especially when intending to get the 8088 out as a low cost (*4) replacement for 8085 designs that need more power.&lt;/p&gt;&#xA;&lt;p&gt;Last but not least DIP64 has longer leads (connections from pin to chip) thus more inductivity, resulting in lower maximum speeds (or more problems).&lt;/p&gt;&#xA;&lt;h3&gt;DIP48&lt;/h3&gt;&#xA;&lt;p&gt;Another way would have been the use of a .6&amp;quot; DIP48, which was used for some custom chips. While avoiding most of the PCB cost and inductivity problems, all other factors would be the same as for DIP64.&lt;/p&gt;&#xA;&lt;h3&gt;QIP&lt;/h3&gt;&#xA;&lt;p&gt;What's most interesting about your question is that Intel did, right at the time the 8086 was introduced, think about using QIP packages for their iAPX432 systems (*5). QIP (or QIL) is a format introduced by Rockwell around 1970 - even before their first CPU (&lt;a href=&quot;https://en.wikichip.org/wiki/rockwell_international/pps-4&quot; rel=&quot;noreferrer&quot;&gt;PPS-4&lt;/a&gt;,*6) - to waste less space on complex packaging and get shorter connections (*7).&lt;/p&gt;&#xA;&lt;p&gt;QIP orders pins in an alternating fashion in two rows on each side, using a 50 mil pitch (*8) between pins and 100 mil between rows thus keeping the through-holes as far apart as with standard DIL, but halving the lenth of a package while adding 'just' .2 inch to their width.&lt;/p&gt;&#xA;&lt;p&gt;In 1978 Intel joined with packaging manufacturer 3M to design a leadless QIP version called &lt;a href=&quot;http://www.brouhaha.com/%7Eeric/retrocomputing/quip/&quot; rel=&quot;noreferrer&quot;&gt;QUIP&lt;/a&gt;. The drawbacks of new tooling, more expensive production and a higher cost product wasn't a big concern for the iAPX432 line, as they where intended to be top of the line anyway.&lt;/p&gt;&#xA;&lt;p&gt;So Intel might have as well selected QUIP for the 8086 - but with it's target to fast fill a short time niche with great cost pressure, such a packaging would have been quite unwise.&lt;/p&gt;&#xA;&lt;h3&gt;Other Packagings&lt;/h3&gt;&#xA;&lt;p&gt;There have been other attempts to come up with more compact DIL. Most notable Japanese manufacturers with 2 millimeter DIP. Here a 64 pin DIP would take up the same PCB space as a conventional (2.54 mm) DIP40. Even retooling would be less expensive as most parts of existing packaging lines just need minor reconfiguration. Still, it never caught on.&lt;/p&gt;&#xA;&lt;h3&gt;Conclusion&lt;/h3&gt;&#xA;&lt;p&gt;While it would have been possible, any divergence from DIP40 would have made the product not only harder to sell but also require higher setup and manufacturing cost - not really worth for an in between design meant to bridge just a few years.&lt;/p&gt;&#xA;&lt;h2&gt;b) Signal Multiplexing&lt;/h2&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Caveat, I didn't go thru all timing diagrams and just used the manual to lookup the pinouts, so there might be hidden problems cancelling my findings.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;So while a different packaging was out of scope, putting different signals onto the same pin might be possible - after all, that has been done with the 8080 and 8085 and the 8088 was meant to replace the later one anyway?&lt;/p&gt;&#xA;&lt;p&gt;Again, there are multiple considerations.&lt;/p&gt;&#xA;&lt;h3&gt;Basic Considerations&lt;/h3&gt;&#xA;&lt;p&gt;While it is easy to say &lt;em&gt;lets multiplex some more interface lines onto the address lines,&lt;/em&gt; multiplexing does also put restriction on this. Each signal has to be available at the right time. Right now only status signals are multiplexed with address lines. Most notably only such that are new to the 8086 and not present on an 8085.&lt;/p&gt;&#xA;&lt;p&gt;To make room for more address lines we need to find some signals that are&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lines that are not address/data lines&lt;/li&gt;&#xA;&lt;li&gt;lines driven by the CPU (output)&lt;/li&gt;&#xA;&lt;li&gt;not needed during address transfer&lt;/li&gt;&#xA;&lt;li&gt;not already defined for 8085 peripherals (in minimal mode)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While the first seams obvious, it already takes away half of all, as 20 of the 40 pins carry ADxx lines. When taking away all inputs and 8085 compatible (minimum mode) signals, only three power supply lines and &lt;code&gt;/RD&lt;/code&gt;is left. And using &lt;code&gt;/RD&lt;/code&gt; as additional address pin would break 8085 compatibility.&lt;/p&gt;&#xA;&lt;h3&gt;Wait, that was &lt;em&gt;Three&lt;/em&gt; Power Lines?&lt;/h3&gt;&#xA;&lt;p&gt;Yup, two ground (#1 and #20) and one 5V (#40). And yes, here is one easy pick. It might have been possible to drop GND from pin#1 and use this as additional address line - so 2 Mib ... Jippieeee :) Then again, while not very likeable, this may complicate the chip design. Who knows.&lt;/p&gt;&#xA;&lt;h3&gt;OK, but what about maximum mode&lt;/h3&gt;&#xA;&lt;p&gt;Maximum mode may be seen as the 8086' native mode. Here the CPU doesn't generate 8085 compatible memory control signals, but needs an &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8288&quot; rel=&quot;noreferrer&quot;&gt;8288 bus controller&lt;/a&gt; to do so. This 'frees up' 8 pins which now carry different signals. While two are bidirectional for bus handling, the other 6 are output lines. Three of them (/S0, /S1, /S2) feed the 8288 and can not be used for multiplexing. Similar reassigning &lt;code&gt;/LOCK&lt;/code&gt; is a bad idea.&lt;/p&gt;&#xA;&lt;p&gt;This still leaves &lt;code&gt;/QS0&lt;/code&gt; and &lt;code&gt;/QS1&lt;/code&gt;. They allow to peek into the queue operation of the BIU. It's a function meant for co-processors, mot notably the 8087. They signal opcode fetch and queue status so a coprocessor can synchronise it's interpretation of the 8086 instruction stream - here especially detecting and grabbing ESC instructions (binary opcodes &lt;code&gt;1101 1xxx&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;While this signalling is essential for coprocessor integration, it should be possible to share this information with address lines.&lt;/p&gt;&#xA;&lt;p&gt;So here are 2 more pins to be used - but only in maximum mode.&lt;/p&gt;&#xA;&lt;h3&gt;And what about the 8088&lt;/h3&gt;&#xA;&lt;p&gt;Funny question, after all, the 8088 pinout is exactly as the 8086, except for the fact that there is no data transfer on the A8..A15. Well, and thus no need for &lt;code&gt;/BHE&lt;/code&gt;. Pin #34 carries on the 8088 an additional status signal (&lt;code&gt;/SS0&lt;/code&gt;) allowing a better bus cycle decode during minimal - and nothing in maximum mode.&lt;/p&gt;&#xA;&lt;p&gt;So here comes (in maximum mode) another usable pin.&lt;/p&gt;&#xA;&lt;p&gt;That easy? No, not really, as there is a drawback. Pin #34 of a 8088 in maximum mode is always high. That's exactly the behaviour of a 8086 only accessing the lower byte. This behaviour was added to make them 100% compatible replacements - at least control wise. It is possible to make a one board that can hold a 8086 or a 8088 without any changes in board design. Just when populating it with a 8088 half of the RAM (and ROM) can be left out. The system will work exactly the same, right out of the box (in maximum mode that is) (*9).&lt;/p&gt;&#xA;&lt;p&gt;Bottom line, we only get this bit if we break with this design advantage. Not cool.&lt;/p&gt;&#xA;&lt;h3&gt;So 24 Bit addressing would be possible?&lt;/h3&gt;&#xA;&lt;p&gt;Yes. But only in maximum mode and on a 8088. But let's add it up:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2 MiB (21 bit) address space for 8086 and 88 in all modes:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pin #1 (GND) becomes A20&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;8 MiB (23 bit) address space for 8086 and 88 in maximum mode:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pin #1 (GND) becomes A20&lt;/li&gt;&#xA;&lt;li&gt;Pin #25 (QS0) becomes A21&lt;/li&gt;&#xA;&lt;li&gt;Pin #24 (QS1) becomes A22&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;16 MiB (24 bit) address space for the 8088 in maximum mode:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Accepting broken compatibility)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pin #1 (GND) becomes A20&lt;/li&gt;&#xA;&lt;li&gt;Pin #25 (QS0) becomes A21&lt;/li&gt;&#xA;&lt;li&gt;Pin #24 (QS1) becomes A22&lt;/li&gt;&#xA;&lt;li&gt;Pin #34 (BHE) becomes A23&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;While I wouldn't recommend the last variation, as it breaks compatibility and offers more RAM only for the slower design, 23 bit address would have been possible with acceptable modifications, at least for maximum mode. And still two MiB in minimum mode. A granularity of 8 bit would have worked nice. Even accepting a ... well ... noo, don't read this footnote  (*10)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sub&gt;P.S. I really liked the question, as it made me think about something I didn't touch before: Is there still room within the 8086 pinout without breaking compatibility and reshuffling everything. Cool. Thank you &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4274/rwallace&quot;&gt;Rwallace&lt;/a&gt;.&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Tooling for chip packaging is also a reason why there are next to no chips outside the 24/28/32/40 pin range for .6&amp;quot; packages. It just doesn't pay. It's les costly to leave some pins NC (see 6502).&lt;/p&gt;&#xA;&lt;p&gt;*2 - A DIP 40 is 15,2 mm by 53,4 mm covering an area of ~810mm^2 while a DIP64 is 22.9 mm by 83.9 mm or ~1920 mm^2 - that's almost 2.5 times the area.&lt;/p&gt;&#xA;&lt;p&gt;*3 - The price of DIP sockets are (at equal quality) almost complete defined by volume. DIP 40 was already common while DIP64 was low quantity/high price.&lt;/p&gt;&#xA;&lt;p&gt;*4 - That is for design, programming and production.&lt;/p&gt;&#xA;&lt;p&gt;*5 - The &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_iAPX_432&quot; rel=&quot;noreferrer&quot;&gt;iAPX432&lt;/a&gt; was meant to be the great next generation 32 bit system, where Intel tried to leapfrog all 16 bit development. In fact, it was a great design, just the CPU world wasn't ready - much like 20 years later for &lt;a href=&quot;https://en.wikipedia.org/wiki/Itanium&quot; rel=&quot;noreferrer&quot;&gt;Itanium&lt;/a&gt; :))&lt;/p&gt;&#xA;&lt;p&gt;*6 - Rockwell continued to use it way into the 1990 for example for their &lt;a href=&quot;http://www.cpu-world.com/forum/viewtopic.php?t=4424&quot; rel=&quot;noreferrer&quot;&gt;6511AQ&lt;/a&gt; controllers. Or NEC for Z80-alike &lt;a href=&quot;http://www.cpcwiki.eu/index.php/UPD7810/uPD7811&quot; rel=&quot;noreferrer&quot;&gt;µPD7810/11&lt;/a&gt; controllers.&lt;/p&gt;&#xA;&lt;p&gt;*7 - And in fact not even invented by Rockwell, as RCA and SIEMENS used a similar design already in the mid 1960s - back then even for ICs with just 20 pins. The design is an incremental step from their first chips using &lt;em&gt;round&lt;/em&gt; pinouts.&lt;/p&gt;&#xA;&lt;p&gt;*8 - standard pitch for DIL packages id 100 mil (1/100th inch)&lt;/p&gt;&#xA;&lt;p&gt;*9 - OK, it might be useful to take this into account and have no word wide interfaces or interfaces on odd addresses and so on - then again, it is rather easy to connect the select and latch controls in a way, that a few jumpers can set this right. So again, a careful design can host both either CPUs on the same board, making it easy to switch to an 8086 when bloaty software slows it down. Or offer two systems from the same parts, saving a lot in manufacturing setup.&lt;/p&gt;&#xA;&lt;p&gt;*10 - Of course, a theoretical address space of 16 MiB with only 8 MiB usable would for sure have resulted in way more crappy PC software using the address wrap - or worse, using the high bit for some data - like people have done on the 68k (and /370). Pure compatibility horror.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-27T19:56:10.587" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6826" PostTypeId="1" AcceptedAnswerId="6829" CreationDate="2018-06-23T04:58:44.747" Score="4" ViewCount="1413" Body="&lt;p&gt;By the early eighties, it was starting to be considered desirable for computers to have color monitors. Home computers often made do with a TV set and accepted the consequent low resolution, but professional computers like the IBM PC were starting to try for color plus enough resolution for 80-column text at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One reason color TVs didn't have that much resolution is that (for reasons at least partly rooted in the need for backward compatibility with black and white TV) they lumped the color signal in with the luma signal (composite video). What was really needed was separate signals for red, green and blue, and connectors were invented for this, first with just one bit each, then with an analog signal for each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But SCART was invented in 1977, and the pinout on Wikipedia shows separate pins for red, green and blue, so it looks to be exactly what a color monitor needs. So why was it not used for such? Was it just some version of NIH, or was there a technical problem with it?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-12-13T12:01:32.610" Title="Why not SCART for early color monitors" Tags="&lt;display&gt;&lt;crt-monitor&gt;&lt;color-display&gt;&lt;scart&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6827" PostTypeId="1" AcceptedAnswerId="6830" CreationDate="2018-06-23T05:44:19.413" Score="3" ViewCount="556" Body="&lt;p&gt;The IBM 5153, the color monitor accompanying the original IBM PC, was designed to work with the CGA graphics card, vertical resolution 200 scan lines. This was quite unsurprising and straightforward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, as I understand it, the horizontal and vertical frequency conformed to NTSC (presumably in part to tap existing economies of scale on relevant electronic components, and in part to support the ability of CGA to output to a TV set, which looked necessary at the time though as far as I know, nobody ever ended up using).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NTSC actually provides for vertical resolution up to 240 scan lines (noninterlaced); it's only thought of as 200 because that's the title safe area; many old TV sets obscured much of the rest of the picture. But presumably if you were designing a monitor for the purpose, you could provide 240 visible scan lines. And as I understand it, this would not make the engineering any more difficult, because in each case the output of scan lines has the same frequency; you're just using more of each frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the above is correct and it would really have cost nothing extra to provide 240 scan lines, why did the 5153 only provide 200?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was it because CGA was designed to stay within the title safe area of a TV set?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was it because it would have bumped the video RAM over 16K, thereby requiring the use of more RAM chips and making the card more expensive?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was it just because people were used to 200, and nobody saw a need for more?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or was there some other reason?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-10-28T04:52:01.440" Title="IBM 5153 monitor vertical resolution" Tags="&lt;ibm-pc&gt;&lt;crt-monitor&gt;&lt;display&gt;&lt;ntsc&gt;&lt;cga&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6828" PostTypeId="2" ParentId="6826" CreationDate="2018-06-23T06:51:17.703" Score="6" Body="&lt;p&gt;As you know it's a French invention, and over here at some point, all TV sets that were to be sold in France must had such socket. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The indirect consequence is that any TV connected device sold here went this road too (video game console, personal computer, etc) very early as the other choice was RF because ironically, CVBS sockets on TVs started being widespread here only around the mid 90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course CVBS was possible from SCART, but with few notable exceptions such as VCRs, pretty much all devices were outputting RGB (right, there are a few VCRs that output RGB but they're extremely rare). Now the fact that some of these devices tricked by simply converting CVBS signal to RGB such as in the NES is another topic :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In regards to color monitors, if you look at the acronym that SCART is (from Syndicat des Constructeurs d'Appareils Radiorécepteurs et Téléviseurs, &quot;Radio and Television Receiver Manufacturers' Association&quot;), you can see that it specifically targeted TV sets, rather than monitors with a potentially higher scan rate than 15 Khz; read here that a significant rework of the norm would have been required for it to accommodate these, i.e. not the right tool for the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To sum it up, here in France, many personal computers (e.g. &lt;a href=&quot;https://fr.wikipedia.org/wiki/Oric_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oric-1&lt;/a&gt; (1984), &lt;a href=&quot;https://en.wikipedia.org/wiki/Canon_X-07&quot; rel=&quot;nofollow noreferrer&quot;&gt;Canon X-07&lt;/a&gt; (1983), &lt;a href=&quot;https://fr.wikipedia.org/wiki/Thomson_TO7&quot; rel=&quot;nofollow noreferrer&quot;&gt;Thomson TO7&lt;/a&gt; (1982); the French word for SCART is also &lt;a href=&quot;https://fr.wikipedia.org/wiki/P%C3%A9rit%C3%A9l%C3%A9vision&quot; rel=&quot;nofollow noreferrer&quot;&gt;Péritélévision&lt;/a&gt;) used TV sets as monitors through SCART as early as the 80s. Whether they were truly outputting RGB or cheating like the NES is another story (seeing that the TV automatically switches to AV is simply not enough).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end SCART was pretty much an alien like SECAM was, and with little doubt, the best implementation was in the country where it originated from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(making this answer as a community wiki, improvements are welcome)&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="148" LastEditDate="2018-06-23T08:18:51.490" LastActivityDate="2018-06-23T08:18:51.490" CommentCount="5" CommunityOwnedDate="2018-06-23T06:51:17.703" ContentLicense="CC BY-SA 4.0" />
  <row Id="6829" PostTypeId="2" ParentId="6826" CreationDate="2018-06-23T08:03:21.537" Score="10" Body="&lt;p&gt;Caveat: &lt;em&gt;'Why Not'&lt;/em&gt; questions are like &lt;em&gt;'What If'&lt;/em&gt; and rarely have a definite answer. It's an (educated) speculation at best.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In case of interface and connectors, NIH (Not Invented Here) is a big issue. Beside the fact that adding more interfaces costs money, manufacturers usually love to have closed systems where they control - and most important sell all parts. Just think why there is no common remote even though a majority uses the same technology and protocol, they assign the codes in different schemes - often even within the same brand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or think the many attempts of computer manufacturers to come up with proprietary connectors for standard interfaces. The most prominent example might be Apple and the switch for RS422 and mini DIN connectors for the Mac's serial interfaces. Sure, there can be many arguments made as being more reliable and so on, but all of them don't really matter in a desktop environment. What counts is that customers will have an easy way of using prepared Apple peripherals or will have to spend more (converter/cable) to connect standard devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/SCART#Origins&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCART story&lt;/a&gt; is even proving this as being a reverse NIH that backfired. Developed by the French TV makers' association in the 1970s (yes, Europe had still many TV manufacturers back then :)) as a common standard for interchange, they saw a chance to use it as a protectionist measure and 'supported' the government to adopt it as requirement for TVs sold in France. The 'rationale' was that foreign (non-French that is) manufacturers would avoid the additional cost of making special French-only TV-sets and thus leave them their market - while they could even save money by leaving the connector unpopulated on export units. Weird logic, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except that idea already hadn't worked some years before, when France selected SECAM as the colour standard to be. European manufacturers just modularized their TVs, eliminating next to all additional cost - while gaining more flexibility at the same time - leading to ultimately larger market shares overall &lt;em&gt;and&lt;/em&gt; in France.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So with SCART, TV manufacturers started to not only fit SCART connectors to sets designated for France, but to all of them - starting with their top line models. By the beginning of the 1980s, most new TV sets in (Western) Europe featured a SCART connector accepting always composite video but also more often than not RGB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While many of the upcoming home computers where designed primarily for the US market with a composite output meant to be used with a modulator, a SCART cable became a common add-on in Europe, eliminating the noise due to modulation and demodulation. Even more so for machines offering Y/C (like the C64) or full RGB. And French (Thomson et.al) home computers of course featured SCART out of the box :)) In the mid 1980s, SCART was the &lt;em&gt;de facto&lt;/em&gt; standard for a colour monitor. Atari sold their STs in many countries with a ST to SCART cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's that great, &lt;em&gt;why not&lt;/em&gt; in the US? Well, US and European markets were quite separated back then. Beside different technical norms (60 vs. 50 Hz and NTSC vs. PAL vs. SECAM) US customers where not only used to different designs, but also quite different user interfaces (*1). So except for few upper end models there was no common design. Even European manufacturers exporting to the US (quite a few) did set up separate production lines for special US designed models. As a result, SCART wasn't the ubiquitous interface it was in Europe, and thus not really interesting to US computer manufacturers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, if SCART is that good, why did it (mostly) vanish for computer use even in Europe? SCART is tied to TV signals, and while this is good to somewhere up to VGA/SuperVGA, by now it would have been replaced anyway. But the true story is again about closed systems. Professional computers where usually sold as a system. Locked in status was not really an issue, and connecting to a TV rarely a goal. So using a generic interface did not bring any advantage (and was not forced by law anyway) - in contrast overseas manufacturers (at that time mainly Taiwan) could offer lower cost by huge volumes when just offering the most common solution. In this case the VGA connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short, an inverted NIH being superseded by huge volume 'it works; who cares'.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Speaking of benefits of legal standards - USB for phone charging tells exactly the same story. People may have already forgotten, but less than 10 years ago next to every phone, PDA and alike had their own proprietary connector for charging, their own wall wart and often another proprietary cable for data exchange. It was due to force of the European Commission that the micro-USB connector became &lt;a href=&quot;https://en.wikipedia.org/wiki/Common_external_power_supply&quot; rel=&quot;nofollow noreferrer&quot;&gt;standard for charging of phones&lt;/a&gt;. Even Apple has to join by offering an adaptor. Beside reducing the need to carry several chargers, they also became dirt cheap (*2) not to mention that next to any computer can be used for charging. As a side effect the whole mobile business, from phones to tablets to cameras uses micro-USB. what a relief.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By now the Commission's force has run out (such measures are usually timed) - it's time for manufacturers to make the world incompatible again :(&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - For example it was even in the '80s still common for a TV to have a dial for selecting channels. Something that already went out of style in Germany somewhere in the early 1960s. We wanted to have function keys to sort the channels the way we liked them, not how they are aired.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - I still remember paying 30 Euro for a replacement charger in the early 2000s - now they are 5 Euro at most and can be bought everywhere.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-12-13T12:01:32.610" LastActivityDate="2018-12-13T12:01:32.610" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="6830" PostTypeId="2" ParentId="6827" CreationDate="2018-06-23T09:40:06.880" Score="9" Body="&lt;p&gt;&lt;strong&gt;TLDR: It's a soft spot for optimization around the ability to display 25 lines of text.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And why this is important has been discussed some time ago in an &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5899/6659&quot;&gt;answer to your question about why 80x25 became standard&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Preface: As usual with such decisions there are many factors involved - and most of them are not hard but variable within a certain frame and in relation to others. So there might be more details than covered here.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For CGA one goal was the ability to display 25 by 40/80 characters. With 200 this allows 8 scan lines per character cell. Something that nicely fits with binary counters addressing character ROMs, as well as RAM and ROM size and/or programs calculating screen addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's the same why the Apple II got 192 lines as Woz was targeting a 24 line text display. IBM in contrast needed to go for 25 lines to make it possible to have their mainframe screens displayed - the 3270 did offer 24 lines of user display plus one line of status information (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Offering more than 25 lines of text (like 30 with 240 scan lines) would make programs converted form common 24/25 line displays problematic, as it's not always easy to support the additional screen estate. Where a Text processor may benefit, a 3270 session would look odd - at least.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While adding more text lines is problematic from a compatibility side, adding more scan lines per text line would have been doable. Like in 9 at 225 lines or 10 at 250 (*2). While allowing greater details on screen, it would require a more complex hardware (*3), increasing the cost. In addition it would break the nice 8 by 8 character cell used. Something that again simplifies hardware and programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While extending a scan line to 720 pixels might have been possible as well (like with more lines), it would again require more complex hardware - not at least even bigger character ROMs - much like with the lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way could have been adding a default blank scan line each 8 lines. While this may have improved text display (a bit) it would have made continuous graphics impossible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With different goals (no graphics, only text) &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Monochrome_Display_Adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM's MDA&lt;/a&gt; did use a 720 by 350 with 9 by 14 pixel per character on quite similar hardware. Just here focus was on a clear text only display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So bottom line: 640/320 by 200 is a soft spot for optimizing a display around text and graphics within the capabilities of displays based on TV components.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - This 24 line user area of the 3270 is also the reason why Woz (and many other) did go for a 24 line text display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - 250 is still way within the ability of standard components. After all, CGA was meant to be displayed with a special made screen - just using standard (aka cheap) components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Counting to 9 or 10 instead of 8 requires more complex counters and comparators unlike the easy binary power of 2^3 where just a counter is needed - similar in software it would require a multiplication, while the value 8 just requires a shift operation. While the used 6845 can handle this, ROMs need to be larger - depending on the hardware design maybe even double the size to just accommodate a single additional scan line per character. Similar for an additional horizontal pixel per character, eventually resulting in quadrupled ROM size. And in full graphics mode addressing gets really weird.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorDisplayName="user39" LastEditDate="2019-02-09T20:13:32.160" LastActivityDate="2019-02-09T20:13:32.160" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6831" PostTypeId="1" AcceptedAnswerId="6943" CreationDate="2018-06-23T14:08:18.090" Score="16" ViewCount="649" Body="&lt;p&gt;Circa 1985 in our school BBC Micro lab, we wasted much time playing a tiny type-in game that looked a bit like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/26AcH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/26AcH.png&quot; alt=&quot;One Line clone &amp;quot;2D Star Dodge&amp;quot; on the Amstrad CPC&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The playfield was filled with a random arrangement of asterisks, and the player controlled a continuously-growing diagonal line that could be switch from falling down to going up by pressing a key. The game played similarly to later games like &lt;a href=&quot;http://www.sunflat.net/android/app/sfcave/?lang=en&quot; rel=&quot;noreferrer&quot;&gt;SFCave&lt;/a&gt; (Palm) and &lt;a href=&quot;https://en.wikipedia.org/wiki/Flappy_Bird&quot; rel=&quot;noreferrer&quot;&gt;Flappy Bird&lt;/a&gt;, except the screen didn't scroll. There were ports to other systems, such as one to the Dragon 32 (written by Alan Cook) and another to the Amstrad CPC (written by me, published in Amstrad Computer User in 1988).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to find the original. Here's all I know:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;It was written in BBC BASIC&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It was most likely called &quot;One Line&quot;, but I have a faint memory of it perhaps being called &quot;Whirly&quot;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It was one — quite long — line of BASIC&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It was most likely published in a UK computer magazine such as BEEBUG, The Micro User, Acorn User, etc&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The BBC version may not have been the original, as all the game required was a bitmapped screen and a single control key.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: if you have JavaScript enabled, you can try an emulated version here: &lt;a href=&quot;http://scruss.com/cpc/6128s.html?stardoj.dsk/run%22stardoj2&quot; rel=&quot;noreferrer&quot;&gt;http://scruss.com/cpc/6128s.html?stardoj.dsk/run%22stardoj2&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2018-06-29T03:23:53.660" LastActivityDate="2018-07-05T02:29:02.403" Title="Origin/source of &quot;One Line&quot; one-key game" Tags="&lt;basic&gt;&lt;identify-this-game&gt;&lt;bbc-micro&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6832" PostTypeId="2" ParentId="3105" CreationDate="2018-06-23T15:54:01.200" Score="0" Body="&lt;p&gt;In my experiance a master without a battery will drop you into a &quot;* commands&quot; prompt with the sideways roms disabled. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can re-enable the roms manually with *configure, set up your preffered languages etc. Apparently as another poster has said there is also a reset CMOS hotkey which is probablly quicker (but which I did not know about when I was last dealing with BBC masters)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally I would recommend fitting a battery holder in which you can use normal AA batteries.&lt;/p&gt;&#xA;" OwnerUserId="499" LastActivityDate="2018-06-23T15:54:01.200" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6835" PostTypeId="1" AcceptedAnswerId="6838" CreationDate="2018-06-23T22:41:49.957" Score="5" ViewCount="1996" Body="&lt;p&gt;Many early Texas Instruments calculators used a Z80 processor. The Z80 is &lt;a href=&quot;https://archive.is/2015.07.14-173053/http://sgate.emt.bme.hu/patai/publications/z80guide/part4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;notoriously limited&lt;/a&gt; when it comes to mathematical calculation. For example, while it can do addition, multiplication must be implemented as addition in a loop. While this may be fine for early home computers, it seems like it would be a &lt;em&gt;terrible&lt;/em&gt; choice for a machine designed for floating point arithmetic. Other contemporary processors such as the 68k were fully capable of integer multiplication and division, and floating point arithmetic could be implemented with reasonable efficiency even with no FPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why did early TI calculators, especially the TI-8x series, use the Z80?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="8090" LastEditorUserId="8090" LastEditDate="2019-12-14T03:20:21.120" LastActivityDate="2019-12-14T03:20:21.120" Title="Why did TI-8x calculator series use the Z80 processor?" Tags="&lt;z80&gt;&lt;calculator&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6836" PostTypeId="1" AcceptedAnswerId="6837" CreationDate="2018-06-23T23:12:56.593" Score="1" ViewCount="248" Body="&lt;p&gt;In 2006, the European Union passed the &lt;strong&gt;Restriction of Hazardous Substances Directive&lt;/strong&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Solder#Lead-free_solder&quot; rel=&quot;nofollow noreferrer&quot;&gt;RoHS&lt;/a&gt;) which pretty much restricted the use of traditional lead-tin solder. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it the case that all consumer electronics (with an emphasis on retro computing machines of course!)  originating from Europe and the US used lead free solder to join their components?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any notable machines that used lead free solder before this age?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is relevant to those wishing to modify hardware components of their old machines as lead-free solder usually have higher melting points. &lt;/p&gt;&#xA;" OwnerUserId="4251" LastActivityDate="2018-06-24T16:43:33.400" Title="Lead Free Solder in Pre-2006 Electronics" Tags="&lt;history&gt;&lt;hardware&gt;&lt;maintenance&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6837" PostTypeId="2" ParentId="6836" CreationDate="2018-06-23T23:57:58.680" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it the case that all consumer electronics (...) originating from Europe and the US used lead free solder to join their components?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;After 2006 yes - and not only in Europe, but next to everywhere. Modern production is global, devices from one production line and design are meant to be sold in many markets. No manufacturer wants to restrict the 'sellabiliy' of their products due to the use of parts that are banned in major markets. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(with an emphasis on retro computing machines of course!)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm not sure what this is supposed to mean. Also, really old computers were manufactured way before RoHS was even though about, they are of course not according to the standards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if you ask about modern devices used with old machines, or some of the emulation gadgets, they are (again of course) manufactured according to RoHS regulations.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Are there any notable machines that used lead free solder before this age?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not that I know of any - back then no one really cared - just think about all the organobromine compounds used as fire retardants in monitors.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This is relevant to those wishing to modify hardware components of their old machines as lead-free solder usually have higher melting points.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, as the higher temperatures are well within the tolerable range for parts used in the 70s or later. After all, one should only heat a solder joint for a minimum time. Set the temperature of your soldering station according to the solder used and handle the joint like trained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It only gets annoying when using older soldering irons without regulation or insufficient heating. This will result in slow heating and a higher temperature flow from the solder point into parts and/or PCBs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Throw away old tools - it always pays off to have the proper tool for the job.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="780" LastEditDate="2018-06-24T09:28:44.080" LastActivityDate="2018-06-24T09:28:44.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6838" PostTypeId="2" ParentId="6835" CreationDate="2018-06-24T00:22:07.593" Score="15" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The Z80 is notoriously limited when it comes to mathematical calculators.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not more than CPUs used in calculators before. Like any other device a pocket calculator is about sufficient speed, not maximum speed. A Z80 is more than capable to do several hundred up to a few thousand flotingpoint operations per second - way more than the average calculator user ever can use.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Other contemporary processors such as the 68k were fully capable of integer multiplication and division&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which doesn't make a big difference in real life application. Producing a square root after 1/1000 second instead of 1/100 second (or a two seconds) doesn't matter for the user, does it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not to mention that a 68000 wasn't much faster than a Z80 with comparable technology. The main advantage of 16 (or 32) bit processors wasn't about speed, but addressable memory.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and floating point arithmetic could be implemented with reasonable efficiency even with no FPU.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not so much better than a Z80. Especially when considering the increased price. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be serious, would you - and more important millions of parents - have been willing to pay like triple the price, just to have a different CPU, one the user (normally) never sees? For a speed increase 99.99% of all users never experience in real life?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did early TI calculators, especially the TI-8x series, use the Z80?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Seriously, why shouldn't they? The Z80 is a wide available CPU with many variations, has great tool collection, and most importantly is available for ASIC integration. Which is an incredible argument for system builders (like TI). Integration is the main source of cost savings. Including CPU, RAM, ROM, I/O and drivers in one package saves a fortune.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, when looking at this new generation of TI calculators using a standard - and non-TI - CPU the question is rather&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why did they switch to a standard CPU based design&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Until then TI calculators used CPUs based on special calculator designs. Well proven, all in house developed and handled. Diverting from such a well proven path is a rare decision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For TI the answer might have been that it was maybe no longer possible to deliver the increased requirements with sometimes 20+ year old designs. To make it work replacement had to be not only capable but also cheap. &lt;em&gt;Dirt Cheap.&lt;/em&gt; A complete restart like this costs a lot of money for development and production ramp up. And the resulting product must of course meet customer expectations - not the least of them will be the price. Sure, a new, way more capable model can fetch more money, but not a premium, as it still must be within school budget for most parents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result the component must be not only available but also low priced.  Selecting a well proven CPU that is available at a real low price per unit (when going for the expected sales) is a must. Sure, it must be capable to do the job. But only the job. There is no budget for something fancy only engineers may dream of. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of these machines, using a Z80 might have beaten even the use of CPU cores TI already produced at the time. That alone should be telling, shouldn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-03-30T07:58:23.880" LastActivityDate="2019-03-30T07:58:23.880" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6839" PostTypeId="1" CreationDate="2018-06-24T13:58:53.050" Score="4" ViewCount="2518" Body="&lt;p&gt;I want to buy a remake of an 8-bit computer, e.g. the ZX-Spectrum or c64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Must haves:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Modern monitor output(e.g. HDMI)&lt;/li&gt;&#xA;&lt;li&gt;Modern keyboard, no gum keys&lt;/li&gt;&#xA;&lt;li&gt;Modern storage, e.g. SD card or USB stick, etc...&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So far I have found the following options, the first is excluded due to the gum keys, the second is out of stock:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://sinclair.recreatedzxspectrum.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sinclair.recreatedzxspectrum.com/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.specnext.com/shop/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.specnext.com/shop/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://thec64.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://thec64.com/&lt;/a&gt; (&lt;strong&gt;Update&lt;/strong&gt; now has a functional keyboard)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any other options?&lt;/p&gt;&#xA;" OwnerUserId="8917" LastEditorUserId="8917" LastEditDate="2019-10-29T17:22:36.667" LastActivityDate="2019-10-29T17:22:36.667" Title="Where to buy an 8 bit computer remake?" Tags="&lt;commodore-64&gt;&lt;zx-spectrum&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2018-06-25T08:11:43.873" ContentLicense="CC BY-SA 4.0" />
  <row Id="6841" PostTypeId="2" ParentId="6836" CreationDate="2018-06-24T16:43:33.400" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Are there any notable machines that used lead free solder before this age?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Probably no, because there are NO any real advantages in lead-free solders over leaded ones. Lead-free solders have greater melting point, their mechanical characteristics are worse. Widely known is the problem of tin whiskers in lead-free solders, that grow from solder points, eventually causing short-circuiting and then the device fails.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today many devices that have reliability in the first place, are still soldered with a &lt;em&gt;leaded&lt;/em&gt; solder. Examples are military and aerospace devices.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This is relevant to those wishing to modify hardware components of their old machines as lead-free solder usually have higher melting points. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While repairing or modifying retro HW, you'd better use old good leaded solders, with lower melting points (that will preserve old ICs better) and with no risk of tin whiskers grow (short-circuiting caused by tin whisker might destroy the retro device)&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-06-24T16:43:33.400" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6842" PostTypeId="2" ParentId="6839" CreationDate="2018-06-24T19:05:05.877" Score="8" Body="&lt;p&gt;There are lots of 8-bit remakes in the market. Assuming you want an exact copy, the choice of makes gets smaller and smaller, if you want something that is ready to use out of the box and a complete unit (keyboard, case, storage), the choice gets even smaller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You did not write whether you care for a cycle-exact copy or a &quot;real&quot; 8-bit CPU (as opposed to FPGA re-makes or even software emulation). That makes your question a bit broad, and some people are a bit picky whether a Z80 computer that doesn't use the &quot;real thing&quot; can in fact be a Z80 computer. I am listing a number of Z80-based re-makes (software, FPGA, Z80) below:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In case you are fine with FPGA-based hardware, the &lt;a href=&quot;https://github.com/mist-devel/mist-board/wiki&quot; rel=&quot;noreferrer&quot;&gt;MiST&lt;/a&gt; is a nice option; it uses whatever USB keyboard you want, outputs VGA, and has Atari-style joystick connectors for retro peripherals. Existing &lt;a href=&quot;https://github.com/mist-devel/mist-board/wiki/CoreStatus&quot; rel=&quot;noreferrer&quot;&gt;loadable cores for this platform&lt;/a&gt; cover most of the classic systems from the 80ies, both 8-bit and &quot;better&quot;. This seems to be an advantage, but in my personal opinion is rather a disadvantage: The amount of cores available on this platform makes concentrating on one specific system extremely hard - I constantly find myself testing other cores instead of concentrating on one and tend to get lost in the variety of options. A large part of retrocomputing is &quot;living within the limits&quot; for me - The MiST pushes these limits too far, IMHO, by being able to &quot;be&quot; nearly anything. But, as you don't seem to have decided on a system yet, a platform that can be any system might fit well.&lt;/li&gt;&#xA;&lt;li&gt;A &lt;a href=&quot;https://www.bytedelight.com/?product_cat=harlequin&quot; rel=&quot;noreferrer&quot;&gt;Harlequin&lt;/a&gt; is a nice option for a ZX Spectrum re-make. It uses a &quot;real&quot; Z80-CPU and is a close copy to the ZX Spectrum 128 or late Amstrad Spectrum models. It is, however, not available as ready-to-use item, but rather as a kit and requires soldering (but see the &quot;Omni&quot; below&quot;). Re-made ZX Spectrum cases can be had from &lt;a href=&quot;http://retroradionics.co.uk&quot; rel=&quot;noreferrer&quot;&gt;Retro Radionic&lt;/a&gt;s.&lt;/li&gt;&#xA;&lt;li&gt;In case you are fine with pure software emulation, a &lt;a href=&quot;https://retropie.org.uk&quot; rel=&quot;noreferrer&quot;&gt;RetroPie&lt;/a&gt; might be an option - This is platform based on Raspberry Pi hardware and can emulate quite a number of 8-bit systems in one single distribution. Very similar to the MiST, even if totally different technology, but also with the same downsides, but very probably the cheapest option to get into retro-computing.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;http://retroradionics.co.uk/shop.html#!/RetroRadionics-OMNI-128HQ-desktop-&amp;amp;-laptop/c/29185006/offset=0&amp;amp;sort=normal&quot; rel=&quot;noreferrer&quot;&gt;Omni 128&lt;/a&gt; is a ZX Spectrum (Harlequin) clone complete in a case, ready-to-go. They are said to have quite long delivery leadtimes, but may be an option. The Laptop advertised on their website doesn't seem to be available.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://www.specnext.com&quot; rel=&quot;noreferrer&quot;&gt;Spectrum Next&lt;/a&gt; is one of the most ambitious projects in this space: An FPGA-Based ZX Spectrum re-make, beefed up with mass storage, HDMI-output, lots of hardware-add-ons in the FPGA, and plans for a very nice case designed by the late Rick Dickinson, the original designer of the ZX Spectrum. They have already delivered mainboards to backers, but the ready-to-go version seems to be delayed. The Next was a Kickstarter project, whether it will be available for non-backers is not entirely clear to me, although they have set up a &lt;a href=&quot;https://www.specnext.com/shop/&quot; rel=&quot;noreferrer&quot;&gt;web shop&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;In case you are happy with a plain-old CP/M 2.2 system and prepared to solder, the &lt;a href=&quot;https://rc2014.co.uk&quot; rel=&quot;noreferrer&quot;&gt;RC2014&lt;/a&gt; is another option. It does not really copy a &quot;classic&quot; design, but rather is a modern re-make of the &quot;typical 1980-ies CP/M system&quot; on modern hardware (but on a &quot;real&quot; Z80) - Available in kit form, requires soldering. Can be bought &lt;a href=&quot;https://www.tindie.com/stores/Semachthemonkey/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. &lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;http://www.8bits4ever.com/zx-uno-m.html&quot; rel=&quot;noreferrer&quot;&gt;ZX Uno&lt;/a&gt; is another FPGA-based ZX-Spectrum that can reproduce the complete ZX Spectrum range from early 48k models to the 2+. It comes with SD card storage, various extensions to the original and a 3D-printed case. Needs a PS/2 keyboard and a VGA monitor, then you are ready to get going.&lt;/li&gt;&#xA;&lt;li&gt;If you are prepared to solder, the &lt;a href=&quot;https://www.sellmyretro.com/offer/details/zxmore--_-%26quot%3Bstarter-kit%26quot%3B--_--for-zx80%2C-zx81%2C-zx-spectrum%2C-cp~~m-10247&quot; rel=&quot;noreferrer&quot;&gt;ZXmore&lt;/a&gt; is a very cheap option of a computer kit that can emulate the Sinclair ZX80, ZX81 and ZX Spectrum (monochrome only). The kit is frequently offered on sellmyretro.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Most of the above are enthusiasts' projects with supposedly more love and entusiasm than professional entrepreneurship going into them (though all of them seem nicely engineered and are said to work perfectly). Before buying something from the linked web-shops, you might want to inquire for terms, conditions, and especially availability and lead times - Some of the offerings are only built-to-order. Most of the above platforms have forums that provide user-to-user support, and I recommend you make yourself familiar with these before buying anything. There have been failed projects in the past that collected money from buyers and showed up as unable to deliver (The infamous &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum_Vega%2B&quot; rel=&quot;noreferrer&quot;&gt;ZX Vega plus project&lt;/a&gt; needs to be mentioned here. But consider this rather an exception than the rule).&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-06-24T21:17:40.527" LastActivityDate="2018-06-24T21:17:40.527" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6843" PostTypeId="1" AcceptedAnswerId="6863" CreationDate="2018-06-25T04:08:03.127" Score="3" ViewCount="483" Body="&lt;p&gt;Can I run Contiki on my Apple IIe without an Uthernet card?  For example, I was thinking that I could run my Raspberry Pi to emulate a network card through the serial port as a null modem.  Any examples of people doing this sort of thing would be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Yes, I know about &lt;a href=&quot;http://appleii.ivanx.com/prnumber6/category/a2cloud/&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;A2Cloud&quot;&gt;A2Cloud&lt;/a&gt; but that doesn't put the TCP/IP stack on A2, it just makes the A2 basically a dumb terminal which isn't so interesting to me.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: Looks like someone did the &lt;a href=&quot;http://jmp.no/blog/cheap-overkill-amiga-network-adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;same basic thing&lt;/a&gt; on an Amiga, but not with Contiki.&lt;/p&gt;&#xA;" OwnerUserId="8856" LastEditorUserId="8856" LastEditDate="2018-06-25T19:38:57.157" LastActivityDate="2018-07-01T21:24:44.687" Title="Contiki on Apple IIe without Uthernet card" Tags="&lt;apple-ii&gt;&lt;internet&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6845" PostTypeId="1" AcceptedAnswerId="6847" CreationDate="2018-06-25T12:49:25.133" Score="5" ViewCount="607" Body="&lt;p&gt;Very early C compilers, (mostly K&amp;amp;R C, as seen in &lt;a href=&quot;https://minnie.tuhs.org//cgi-bin/utree.pl?file=V6/usr/source/c/&quot; rel=&quot;noreferrer&quot;&gt;UNIX V6&lt;/a&gt;, or &lt;a href=&quot;https://www.atarimagazines.com/v5n5/megamaxc.html&quot; rel=&quot;noreferrer&quot;&gt;this compiler for the Atari ST called &quot;Megamax C&quot;&lt;/a&gt;) came with a &quot;code improver&quot;. This was apparently a separate binary, named &lt;code&gt;c2&lt;/code&gt;, and was not part of the C compiler. That's presumably because of memory constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means that middle-end optimisations like constant propagation or dead-code elimination must have either been left to &lt;code&gt;c1&lt;/code&gt;, or not done at all. And it means that the optimisations done by &lt;code&gt;c2&lt;/code&gt; were probably limited to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;very machine-specific micro-optimisations, such as seeing if an add should be replaced by an increment (or &lt;code&gt;addq&lt;/code&gt; on the m68k).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;various peephole optimisations like eliminating &lt;code&gt;push a; pull a&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;miscellaneous obvious and simple things, like replacing a jump, which targets a jump, with the instruction it points to.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Were these Code Improvers written with the output of &lt;code&gt;c1&lt;/code&gt; in mind? Or were they really written and intended as general-purpose object code improvers for the target platform? Could they, and were they, used with &lt;code&gt;f77&lt;/code&gt; or &lt;code&gt;as&lt;/code&gt; for example?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-06-25T19:40:16.403" Title="On the use of the &quot;Code Improver&quot;" Tags="&lt;unix&gt;&lt;compilers&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6846" PostTypeId="1" AcceptedAnswerId="6867" CreationDate="2018-06-25T14:35:58.143" Score="12" ViewCount="636" Body="&lt;p&gt;Why did early versions of the 65C816 CPU need a suffixed NOP to every SEP and REP instruction? I saw comments in some source code pointing at this. Looking around in official WDC's documentation and others didn't reveal even a hint on this subject.&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="276" LastEditDate="2018-08-01T11:08:19.320" LastActivityDate="2018-08-01T11:08:19.320" Title="Early 65C816 CPU's SEP and REP instruction are followed by a NOP?" Tags="&lt;assembly&gt;&lt;65816&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6847" PostTypeId="2" ParentId="6845" CreationDate="2018-06-25T14:41:02.283" Score="11" Body="&lt;p&gt;The 32V paper, &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/otherports/32v.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;A UNIX™ Operating System for the DEC VAX-11/780 Computer&lt;/em&gt;&lt;/a&gt; (by Thomas B. London and John F. Reiser) has a few interesting tidbits about &lt;code&gt;c2&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Two features of the VAX-11 architecture — three-address instructions and indexed addressing mode&#xA;  —  were  difficult  to  model  within  the  basic  structure  of  the  compiler.   The  full  implementation  of  three-address instructions  proved to  be  so  difficult  that  it  was  not  really attempted.   Instead,&#xA;  &lt;em&gt;c2&lt;/em&gt;,&#xA;  the  assembly&#xA;  language code improver,  tries to merge several instructions into an appropriate three-address instruction.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This suggests that &lt;code&gt;c2&lt;/code&gt; was somewhat akin to a second (or third, since the C compiler used &lt;code&gt;c0&lt;/code&gt; and &lt;code&gt;c1&lt;/code&gt;) pass for the C compiler, albeit assembly language-oriented: it makes up for lacunae in the main C compiler. (Its naming is consistent with this approximation, at least when compared with &lt;code&gt;as2&lt;/code&gt;, the second pass of the assembler.)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;c2.&lt;/strong&gt;&#xA;  The code improver for the assembly language generated by the VAX-11 C compiler is based on a&#xA;  similar program for the PDP-11.  A ’backwards’ register usage pass, performed once and before anything&#xA;  else, was a major addition.  Knowing that no temporary register is live across a backwards jump, the register usage pass introduces three-address instructions wherever possible.  It also recognizes situations where&#xA;  jump on bit (&lt;strong&gt;jbc, jbs, jlbc, jlbs,&lt;/strong&gt;) extract field (&lt;strong&gt;extzv, movzbl&lt;/strong&gt;) and move address (&lt;strong&gt;moval, movab, pushal, pushab&lt;/strong&gt;) instructions can be used.  The code for insertion of fancy loop control instructions&#xA;  &lt;strong&gt;sob, aob, acb&lt;/strong&gt;&#xA;  was also extended.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This also suggests that &lt;code&gt;c2&lt;/code&gt; was specifically written to process the code produced by the C compiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;as&lt;/code&gt; doesn’t support any option to invoke &lt;code&gt;c2&lt;/code&gt; (or any other improver); I imagine the authors wouldn’t have expected hand-written assembly language to need improving after assembly! &lt;code&gt;f77&lt;/code&gt; replaced the first pass of the C compiler, feeding into &lt;code&gt;c1&lt;/code&gt; and &lt;code&gt;c2&lt;/code&gt; (if the &lt;code&gt;-O&lt;/code&gt; option was provided), so &lt;code&gt;c2&lt;/code&gt; was used for compiled Fortran code which had been processed by the C compiler’s code generator anyway (see &lt;em&gt;Portability of C Programs and the UNIX System&lt;/em&gt; by S. C. Johnson and D. M. Ritchie, published in &lt;em&gt;The Bell System Technical Journal&lt;/em&gt;, volume 57, number 6, part 2, July/August 1978).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-06-25T19:40:16.403" LastActivityDate="2018-06-25T19:40:16.403" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6848" PostTypeId="2" ParentId="6846" CreationDate="2018-06-25T15:21:49.747" Score="6" Body="&lt;p&gt;I am not an expert on this processor or its history but this sounds like the sort of silicon bug that I have had to deal with on many processors over the years.  It is often the case that there are timing problems with early versions of the silicon for a given processor that then require a software workaround. These are normally detailed in a processor errata sheet published by the device manufacturer.  Typically compiler writers will fix their code generators to produce code that adds any extra workaround instructions automatically, some even have compile time switches that allow the programmer to specify which silicon revision their code is to use.  If the workaround is simple than the problem may never be fixed and it just becomes a &quot;feature&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have looked for a WDC errata sheet for their processor but without success.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ti.com/lit/er/slaz197h/slaz197h.pdf&quot; rel=&quot;noreferrer&quot;&gt;Example MSP430 errata sheet from Texas Instruments&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6554" LastActivityDate="2018-06-25T15:21:49.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6849" PostTypeId="1" AcceptedAnswerId="6853" CreationDate="2018-06-25T16:12:53.733" Score="2" ViewCount="769" Body="&lt;p&gt;I have looked this video - &lt;a href=&quot;https://youtu.be/l5CHGm1eOio&quot; rel=&quot;nofollow noreferrer&quot;&gt;Altair 8800 - Interrupt Acknowledge Cycle&lt;/a&gt; and have few questions (I have read wikipedia &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8080#Input/output_scheme&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel 8080&lt;/a&gt; article, Altair 8800 Operator's manual, Charles Petzold &quot;Code&quot; and few article on the internet, like &lt;a href=&quot;http://0xdemo.com/wpsite/blog/index.php/2017/09/26/an-introduction-to-modern-computers-part-8a-introducing-the-intels-8080-interrupts-and-the-new-stack/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; and didn't found answer yet):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Altair 8800 (and Intel 8080) have 8 RST, the first, RST 0 used by hard reset button, so only 7 RST we can use for peripherals (I think). Does it mean, that it couldn't be connected more than 7 peripherals to this computer? Because, how it will be work, if the CPU doesn't notice it? &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The excerpt from the &quot;Charles Petzold. Code: The Hidden Language of Computer Hardware and Software&quot;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The S-100 bus also includes 8 interrupt signals. These are signals generated&#xA;  by other devices when they need immediate attention from the CPU. For&#xA;  example (as we'll see later in this chapter), a keyboard might&#xA;  generate an interrupt signal when a key is pressed. A short program&#xA;  run by the 8080 can then determine what that key was and take some&#xA;  action. The board containing the 8080 also generally includes a chip&#xA;  called the Intel 8214 Priority Interrupt Control Unit to handle these&#xA;  interrupts. When an interrupt occurs, this chip generates an interrupt&#xA;  signal to the 8080. When the 8080 acknowledges the interrupt, the chip&#xA;  provides a RST (Restart) instruction that causes the microprocessor to&#xA;  save the current program counter and branch to address 0000h, 0008h,&#xA;  0010h, 0018h, 0020h, 0028h, 0030h, or 0038h depending on the&#xA;  interrupt.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Why Intel 8080 have 256 I/O port addresses, while it has only 8 RST instructions to handle 8 devices? How is it supposed to work with the other 248 devices?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Does each RST &quot;hardwired&quot; to specific socket on the S-100 bus? In other words, if I plug the keyboard controller to the second socket, do I need write my keyboard handler only to the specific memory address, for example &lt;code&gt;0008h&lt;/code&gt;? And if I change the keyboard controller place to the another bus socket, does the subroutine needs to be moved to another RST address? Or may be the mapping table can exists somewhere in the memory, but I don't see it in the &lt;code&gt;Altair 8800's&lt;/code&gt; video.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How the device port number are determined? That is, why the keyboard in the video has the &lt;code&gt;20Q&lt;/code&gt; port, why not &lt;code&gt;1Q&lt;/code&gt; for example? Is it caused by the socket number, the device type, something else?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="8915" LastEditorUserId="8915" LastEditDate="2018-06-25T16:50:58.613" LastActivityDate="2018-06-26T13:02:06.140" Title="Intel 8080 and Altair 8800. 256 I/0 ports, but only 7 free RST (interrupt subroutine) - how it works?" Tags="&lt;8080&gt;&lt;interrupt&gt;&lt;s-100&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6850" PostTypeId="2" ParentId="6849" CreationDate="2018-06-25T17:38:49.223" Score="2" Body="&lt;p&gt;The chip has 256 I/O ports, rather than some smaller number, because it was just as easy to provide 256 ports as it would be to provide eight.  The part supports eight restart vectors because the hardware to support eight was simpler than hardware to support more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that many I/O devices use a single interrupt but use multiple I/O register addresses (often between 2 and 16) to perform various functions.  If a system has seven I/O devices each of which use 16 addresses, that would require a total of 112.  Allowing for 256 would be more than sufficient, and is just as easy as providing for anything less, so why not?&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-06-25T17:38:49.223" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6851" PostTypeId="2" ParentId="6849" CreationDate="2018-06-25T17:55:47.257" Score="4" Body="&lt;p&gt;Manassehkatz is correct about the bus. All components can see all bus activity. So each picks for itself which bus cycles to respond to; ordinarily IO accesses to a particular address or range of addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8080 has a very direct interrupt system — it'll read an instruction off the bus and execute it. In practice it's easier to make these single byte instructions because that doesn't require any state to be maintained by the peripheral, though — as per Raffzahn's correction in the comments — the processor is smart enough to continue signalling that it's performing an interrupt response even if it needs to read multiple bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, the &lt;code&gt;RST&lt;/code&gt;s are then a natural choice, and I'd even be surprised if this isn't exactly why they exist. But if Intel had wanted to provide more &lt;code&gt;RST&lt;/code&gt;s then they'd have needed to remove other instructions to free up encodings and, in any case, encoding would have been tricky. 8080 instructions generally break down into two three-bit fields plus a two-bit part, and there are eight RSTs because one of those three-bit parts directly maps to the destination address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is one of the things that was extended on the Z80; one of its modes of operations allows external devices to supply an index into a vector lookup table rather than an instruction. So you're not alone in seeing a difficulty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there is no reason why two devices can't supply the same RST as long as the code it points to can perform some additional test to figure out which need attention. It's also possibly to use other instructions if the CPU knows to wait — e.g. it can spin in a tight loop on the carry flag and the instruction posted at interrupt could be set carry flag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of hardware has multiple IO ports rather than just one so a direct mapping between IO address and interrupt vector wouldn't necessarily make sense anyway, and even if it did then you'd eat a lot of address space if you reserved room for 256 unique interrupt routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think the S-100 bus makes any attempt to communicate location to things you install. It's just a hub. So cards should respond to the same IO addresses and produce the same interrupts no matter where physically installed.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-06-26T02:20:44.923" LastActivityDate="2018-06-26T02:20:44.923" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="6852" PostTypeId="2" ParentId="6849" CreationDate="2018-06-25T18:16:05.307" Score="6" Body="&lt;p&gt;1 I/O port &amp;lt;&gt; 1 hardware device&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1 RST vector &amp;lt;&gt; 1 interrupt from one device&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have read the datasheet under false assumptions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no such thing as a 1:1 correlation between these concepts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, I/O devices that hold only one single I/O port are pretty rare. A typical floppy controller, for example, the WD1772, has four registers (status/command, track, sector, data), thus occupies four I/O ports. A simple UART of the time, the 8250, occupies 7 I/O addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Restart Vector is actually a software interrupt and has nothing (at least not directly) to do with devices. The RST is rather something close to a CALL operation, or an interrupt triggered by software. The RST operation is only specific with regards to interrupts that it is the only opcode that generates a jump to a handler routine and occupies only one byte - Thus, external devices can push it onto the data bus during the interrupt acknowledge cycle of the CPU to cause a jump into an interrupt service routine. (The 8080 is pretty unique (simple?) in expecting interrupting devices to push &lt;em&gt;an instruction&lt;/em&gt; onto the bus during the interrupt acknowledge cycle that will then be executed by the device)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case you have more interrupting devices than interrupt lines (easy on the 8080, it has only one such line), there are a number of strategies you can take&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;wired-or of all interrupt lines from peripherals to the CPU, use a single RST vector and query (poll) all connected devices &quot;was it you?&quot; in the interrupt service routine. This has been done in simpler, cheaper computers. It adds a bit of latency but works well.&lt;/li&gt;&#xA;&lt;li&gt;Employ an interrupt controller (e.g. 8214). A separate chip that handles the various devices triggering interrupts and can push different RST instructions onto the data bus during the interrupt acknowledge cycle of the CPU and can &lt;em&gt;prioritize&lt;/em&gt; them. Note these different RST commands can be used as &quot;one per device&quot; in case you have no more than 8, or the RST vectors are used to handle more than one device per RST, thus a mixed approach between the previous method and this one is used: lower priority interrupts serve many, slow devices, while higher priority interrupts are dedicated to a single, fast device prioritized by the interrupt controller. After all, a terminal port running at 300 Baud doesn't need to be served with the same priority and latency as a high-speed interface to a hard disk, for example. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The eight available RST vectors are thus used to &lt;em&gt;prioritize and group&lt;/em&gt; various interrupting devices, rather than each of them handling only one device.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-06-25T21:29:12.167" LastActivityDate="2018-06-25T21:29:12.167" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6853" PostTypeId="2" ParentId="6849" CreationDate="2018-06-25T18:24:11.793" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I have looked this video - Altair 8800 - Interrupt Acknowledge Cycle and have few questions (I have read wikipedia Intel 8080 article, Altair 8800 Operator's manual, Charles Petzold &quot;Code&quot; and few article on the internet, like this and didn't found answer yet):&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Maybe to start with the obvious: Not every device needs to be interrupt driven.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;Altair 8800 (and Intel 8080) have 8 RST, the first, RST 0 used by hard reset button, so only 7 RST we can use for peripherals (I think). Does it mean, that it couldn't be connected more than 7 peripherals to this computer? Because, how it will be work, if the CPU doesn't notice it?&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, all it means that there are only 8 distinctive routines that can be called directly by issuing one of the RST instructions. It doesn't imply any relation to the number if interrupt serviceable devices or devices at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And it's 8, not 7, as RST0 can ofc be used for an interrupt handler)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An interrupt controller (like 8259 *1) can issue one RST for all interrupts, having them all initiate the same routine and then be polled by the routine to check which is the one to be served. Or they can have separate. Or a mixture of both. It's up to the systems requirements (and what style the designer preferred).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, instead of an RST, a CALL can be delivered (*2). When the 8080 (or Z80 in Mode 0) senses a CALL opcode during an interrupt cycle it will issue two additional cycles to fetch the address to be used. Thus there can be as many different entrypoints as one wishes (*3)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol start=&quot;2&quot;&gt;&#xA;  &lt;li&gt;Why Intel 8080 have 256 I/O port addresses, while it has only 8 RST instructions to handle 8 devices? How is it supposed to work with the other 248 devices?&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As said above, number of RST instructions, number of interrupt sources and number of I/O ports are not in any predefined relation to each other and to the number of 'devices'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To start with, there is no assumption if a device is represented by a single I/O address, or if it occupies several. A 8251 serial interface would occupy 4 I/O addresses, while a 16550 needs 8, and a 8250 can get alone with just two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, one I/O address could as well be shared by multiple devices due to whatever (hardware or software) protocol. Like accessing different devices when writing or reading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, a 'device' does not need to have an interrupt associated. It may or may not, depending on its purpose, structure and workings. This may even differ for the same type of device. For example a keyboard interface can be implemented interrupt driven - with issuing an interrupt for each keypress, or polled, where it' up to the CPU to look if a new keypress has occurred or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And last, an interrupt can be shared by two devices - like having a board with several 16550 sharing a single interrupt line, programmed to use the same RST. Resulting in one interrupt, one RST, two devices and 16 addresses.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol start=&quot;3&quot;&gt;&#xA;  &lt;li&gt;Does each RST &quot;hardwired&quot; to specific socket on the S-100 bus? &lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(I assume you mean &lt;em&gt;Slot&lt;/em&gt; when speaking about 'Socket')&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No. The S100 bus (in actual use, not as with the original Altair) supports three interrupt lines: /RESET, /NMI and /INT which connect all slots in parallel. Ignoring /RESET and /NMI, there is only one line, thus there can not be a slot specific assignment (*4). It all depends on the CPU used, the interrupt mode used and programming of the interrupt controller used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as there is only one interrupt, it is the same for all devices. The routine is selected by what instruction is placed on the bus during an interrupt cycle by the interrupt controller. In case of an 8080/85, it will be one of 8 possible RST instructions inserted by the 8259 interrupt controller as well an arbitary CALL instruction. In case of a Z80 (Interrupt Mode 3) it might also be one of 128 vector numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if your question is about the 8 seperate interrupt lines usually called &lt;code&gt;VI0&lt;/code&gt;..&lt;code&gt;VI7&lt;/code&gt;, then again, they are shared between all boards and it's up to the system configuration if they get assigned to seperate boards (usually by jumpers) or get used by multiple - in both cases again, they can be used by one or more devices on these boards. Wellcome to the wonderful world of S100 bus configuration :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember there is only one interrupt line on the CPU, so handling 8 lines from the bus means, that there must be an interrupt controller (8259) on the CPU board to encode and prioritize them. Otherwise they might be a bit hard to handle.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol start=&quot;4&quot;&gt;&#xA;  &lt;li&gt;How the device port number are determined? That is, why the keyboard in the video has the 20Q port, why not 1Q for example? Is it caused by the socket number, the device type, something else?&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Not sure what 20Q or 1Q should mean here)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As said, the assignment of I/O addresses to 'devices' is arbitrary and decoded at each I/O board. (hopefully) The right board will respond to an address (if not we got a configuration error). The assignment is usually hard coded or can be selected from a predefined range by jumpers. On the software side it depends as usual on the software used. It may be hardcoded in the drivers (BIOS) or due some kind of configuration file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all, that's why a system abstraction like CP/M is so handy as all these codings are hidden below and user programs only interact with symbolic devices.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Confused? Well, interrupt handling isn't the easyest lesson to learn when about a CPU, especially not with rather sophisticated mechanics like on the 8080/Z80 family. Just take your time an gnaw thru all the paper :)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Usually the 8259 is associated with vectored interrupts (RST or CALL). There are other chips, like the 8214, but they lack the ability to issue different vectors (or vectors at all).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - IIRC, any instruction can be issued, but only RST and CALL do make sense under normal circumstances as they both do a proper subroutine invocation. Then again, with a careful design other instructions could be useful in the right situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Within the reasoning of a system with only 64 KiB address space of course :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Keep in mind, S100 is a simple parallel bus utilizing an undefined number of slots. None is prioritized or special in any way. Any card can be placed in any slot. Much like the PC bus system. In contrast the Apple II bus uses geographical addressing, meaning while each slot is electrical the same (lets ignore #0 and #7 for this), they will be seen on different address ranges by the CPU. That would be geographical addressing - which S100 is not.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-06-26T13:02:06.140" LastActivityDate="2018-06-26T13:02:06.140" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6854" PostTypeId="1" AcceptedAnswerId="6856" CreationDate="2018-06-25T21:54:55.713" Score="28" ViewCount="7768" Body="&lt;p&gt;In MS-DOS (and FAT16), you could only have 8.3 file names (like &lt;code&gt;QUESTION.TXT&lt;/code&gt;) with only single-case letters and numbers (and a few symbols). The MS-DOS Editor also defaulted to 8.3 - typing &lt;code&gt;edit questiontxt&lt;/code&gt; in MS-DOS 6.22 would edit QUESTION.TXT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While everything used 8.3, were 9.2 names possible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, instead of the example above (&lt;code&gt;QUESTION.TXT&lt;/code&gt;), would &lt;code&gt;QUESTIONT.XT&lt;/code&gt; be an allowed filename (although it would not be practical)?&lt;/p&gt;&#xA;" OwnerUserId="8680" LastActivityDate="2020-11-13T21:10:28.707" Title="Were 9.2 file names possible in MS-DOS?" Tags="&lt;ms-dos&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6855" PostTypeId="2" ParentId="6854" CreationDate="2018-06-25T22:01:49.170" Score="28" Body="&lt;p&gt;No. The file extension is a first class concept in the DOS file systems, a legacy of CP/M, vs, say, Unix file systems where an extension is simply a naming convention.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-06-25T22:01:49.170" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6856" PostTypeId="2" ParentId="6854" CreationDate="2018-06-25T23:00:46.257" Score="128" Body="&lt;p&gt;No.  The FAT12/16/32 filesystems store the filename and extension together in a fixed-length 11 character field.  The first 8 characters of this field is the filename and the last 3 is the extension.  Trailing space characters in both the filename proper and its extension are ignored.  The '.' character between the filename and extension is implicit.  Additionally, the '.' character is not a valid character in either the filename or the extension.  Spaces, however, are permitted.  Note that the above does not apply to VFAT which is its own kettle of worms.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   on disk:          on screen:&#xA;┌───────────┐&#xA;│AUTOEXECBAT│  &amp;lt;=&amp;gt;  AUTOEXEC.BAT&#xA;│CONFIG  SYS│  &amp;lt;=&amp;gt;  CONFIG.SYS&#xA;└───────────┘&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="533" LastEditDate="2018-06-26T17:30:15.203" LastActivityDate="2018-06-26T17:30:15.203" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="6858" PostTypeId="1" CreationDate="2018-06-26T09:35:43.447" Score="1" ViewCount="265" Body="&lt;p&gt;I have a bunch of hard drives. From 500 megabytes to a few gigabytes from years around 2000-2006. I was wondering if those are still readable or are dead. Should I hurry up finding an adapter and try to save the most i can, or are safe where they are? (dark dry place)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="9019" LastEditorUserId="6986" LastEditDate="2018-06-26T18:32:32.953" LastActivityDate="2018-06-26T18:32:32.953" Title="Conventional Hard Drive life-span" Tags="&lt;hardware&gt;&lt;hard-disk&gt;" AnswerCount="2" CommentCount="9" ClosedDate="2018-06-27T23:11:42.477" ContentLicense="CC BY-SA 4.0" />
  <row Id="6859" PostTypeId="2" ParentId="6858" CreationDate="2018-06-26T10:28:11.863" Score="2" Body="&lt;p&gt;IME, the main reason a disk doesn't work when it comes out of storage is that it was basically knackered when it went into storage because it had been used heavily or was just junk to start with. You've probably heard the perjorative names people give to disk brands they've lost data to and don't trust any more: &quot;Seacrate&quot;, &quot;Necropolis&quot;, &quot;Minstor&quot; etc. We do not generally put lightly-used high-quality disks into archive storage, as they're expensive and we want to get our money's worth out of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you should still prioritise the data retrieval because there is also a gentle decline while in storage which will eventually push a marginal disk over the edge. Oil seeps out of drive bearings, the plastic packaging in chips eats into the silicon, and metal rusts. Entropy eventually claims its own no matter how hard you try to stop it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should not have any problems finding an adaptor for your disks as USB-PATA adaptors are still made and sold today and are backwards compatible to a surprising degree. I was able to read disks from the early 1990s with one such device. The only ones that wouldn't read were those that made some very sick-sounding noises indicating terminal mechanical failure.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2018-06-26T10:28:11.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6861" PostTypeId="2" ParentId="6858" CreationDate="2018-06-26T12:09:02.630" Score="2" Body="&lt;p&gt;For starters, you should definitely make a backup copy of anything you care about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anecdotally, the biggest issue you'll likely encounter is stuck bearings.  I've got 2 retro systems that have sticky spindles.  One can usually be started by giving it a sharp axial twist (or three) at power on (50MB, brand unknown).  For the other (105MB, I think) I ended up replacing the drive with a more recent SCSI disk.  Bearing will &quot;dry out&quot; eventually so it's best to make copies sooner rather than later.  (Both of these systems are 'workstation' class.)&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-06-26T12:32:54.507" LastActivityDate="2018-06-26T12:32:54.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6862" PostTypeId="1" AcceptedAnswerId="6866" CreationDate="2018-06-26T13:08:32.863" Score="9" ViewCount="912" Body="&lt;p&gt;As discussed in some previous questions here, 80-column text was established by IBM as the standard for business computing as early as the sixties, but monitors capable of displaying that resolution legibly were still somewhat expensive in the seventies, so early microcomputers that used TV sets, or monitors with off-the-shelf TV tubes, such as the trinity of 1977, settled for a lower resolution: 40 columns for the Apple II and Commodore PET, 64 columns for the TRS-80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I understand it, a black-and-white TV tube with no color burst signal and the RF stage skipped, while it could not quite reach 80 columns, could handle 64 columns well enough, which raises the question of why Apple and Commodore didn't try for that, or at least for something a bit beyond 40. 64x25 = 1600 bytes, not prohibitive even by the standards of the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get the impression memory bandwidth was a significant limitation, such that when the Apple II later added an 80-column option, the engineering of such involved the careful juxtaposition of two memory banks to provide data at the required rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was memory bandwidth the reason for Apple and Commodore sticking with 40 columns? If so, how did Tandy achieve 64 columns? Is it purely a coincidence that the 64-column machine is the only one of the trinity to use the Z80?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I'm assuming the Vic-20 later supplying only 22 columns, is not so much due to technical limitations as to the use of a video chip designed more for games than general purpose computing.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-06-28T21:59:29.583" Title="Columns of text in early microcomputers" Tags="&lt;apple-ii&gt;&lt;video&gt;&lt;memory&gt;&lt;commodore-pet&gt;&lt;trs-80&gt;" AnswerCount="4" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6863" PostTypeId="2" ParentId="6843" CreationDate="2018-06-26T13:18:31.467" Score="3" Body="&lt;p&gt;I reached out to &lt;a href=&quot;https://github.com/oliverschmidt&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oliver Schmidt&lt;/a&gt;, maintainer of Contiki for Apple 2 (among other things), and he suggested the following:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You can't &quot;emulate&quot; an Uthernet card with an RPi but you can -&#xA;  generally - use the RPi to get online with Contiki.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;* Warning *&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;I haven't tried what I describe below myself. And I have a report that&#xA;  it doesn't work reliably. And it's quite some effort. Nevertheless...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Instead of using an Ethernet card Contiki can be built to use a&#xA;  SuperSerialCard to connect to a SLIP server. There's no pre-built&#xA;  Contiki for SLIP, you have to build it yourself.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Read&#xA;  &lt;a href=&quot;https://github.com/contiki-os/contiki/blob/master/cpu/6502/README.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/contiki-os/contiki/blob/master/cpu/6502/README.md&lt;/a&gt;,&#xA;  especially&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&quot;The cpu/6502/ directory is used for targeting 6502-based machines&#xA;  using the cc65 compiler &lt;a href=&quot;http://cc65.github.io/cc65/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://cc65.github.io/cc65/&lt;/a&gt;.&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;WITH_SLIP Default: 0 Purpose: Use SLIP (based on RS232 driver coming&#xA;with cc65) instead of Ethernet.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;additionally read&#xA;  &lt;a href=&quot;https://github.com/contiki-os/contiki/blob/master/platform/apple2enh/README.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/contiki-os/contiki/blob/master/platform/apple2enh/README.md&lt;/a&gt;,&#xA;  especially&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&quot;The 'disk' make goal requires AppleCommander 1.3.5 or later. It is&#xA;  available at &lt;a href=&quot;http://applecommander.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://applecommander.sourceforge.net/&lt;/a&gt;.&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;You can either build the individual Contiki programs using e.e.g&#xA;  &lt;a href=&quot;https://github.com/contiki-os/contiki/blob/master/examples/webbrowser-80col/Makefile&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/contiki-os/contiki/blob/master/examples/webbrowser-80col/Makefile&lt;/a&gt;&#xA;  or build them all using&#xA;  &lt;a href=&quot;https://github.com/contiki-os/contiki/blob/master/tools/6502/Makefile&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/contiki-os/contiki/blob/master/tools/6502/Makefile&lt;/a&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Getting the RPi ready is supposed to be easy, e.g.&#xA;  &lt;a href=&quot;https://harizanov.com/2013/03/tcpip-over-rfm12b-and-raspberry-pi-as-gateway/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://harizanov.com/2013/03/tcpip-over-rfm12b-and-raspberry-pi-as-gateway/&lt;/a&gt;&#xA;  says that something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo modprobe slip  &#xA;sudo slattach -L -s 38400 -p slip /dev/ttyAMA0 &#xA;sudo ifconfig sl0 192.168.5.1 dstaddr 192.168.5.2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;is enough. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Please note that I don't know more about this then what I wrote above.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Good luck. Oliver&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I will update this with my progress doing so, and try to post the rebuilt Contiki binaries somewhere as well.  Thanks to Oliver for his assistance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I was having trouble with the compilation, so Oliver was kind enough to compile for me and send along.  &lt;a href=&quot;https://drive.google.com/file/d/1IyYqirYW92M2UFKKNJMr6lhAtbLm6Zc9/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here are the compiled binaries&lt;/a&gt; if you are interested.&lt;/p&gt;&#xA;" OwnerUserId="8856" LastEditorUserId="8856" LastEditDate="2018-07-01T21:24:44.687" LastActivityDate="2018-07-01T21:24:44.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6864" PostTypeId="2" ParentId="6862" CreationDate="2018-06-26T15:01:04.037" Score="4" Body="&lt;p&gt;This answer has the Commodore 64, the Amstrad and the Sinclair ZX Spectrum and QL series in mind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note these home computers did not have a real &quot;text&quot; mode (as opposed to the more professional systems like IBM MDA, for example). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means text needs to be displayed as graphics, and graphics needs resolution. A reasonably readable text font needs at least 5-6 pixels horizontal (business use would have required 8), and 8-10 pixels vertical size (including blank pixels to separate the characters from each other). Multiply that by 80 characters and you end up with resolutions &gt;400 pixels horizontal, &gt;200 vertical, which means at least 10k (better 16) of video memory, even with monochrome text, even more if you want more readable fonts, way more if you want at least four colors for your text. The Sinclair QL spent 32k of its scarce 128k for the video frame buffer, enabling it to display 85 characters by 25 lines in four colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With memory sizes from 16k to 48, maybe 64k on a typical home computer, 16k are not easily expendable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That was the one reason - Another one is, once you got the pixels in the frame buffer, you need to get them out onto the screen - once every video frame, you need to clock out all the pixel data to the monitor. While this is done, the video circuitry needs exclusive access to the framebuffer and, in principle, halts the CPU (on simpler designs like most home computers, on more complex designs, the lockout of the CPU may be restricted to the framebuffer and it would still be able to work on other memory). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that the higher the screen resolution gets on such simple designs, the more the CPU needs to wait for access to the memory because it is locked out by the video circuitry (so-called &quot;contended memory&quot;). Some designs get across this using dual-ported memory, or dedicated memory chips for the frame buffer, but that is expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Displays that work with a pure text mode storing characters in the frame buffer do not have this problems - Their video memory is much smaller (it doesn't need to store the pixels of a character, but rather only one byte for it's ASCII code), also their video output needs way less memory bandwidth. But again, home computers wanted graphics and a switchable graphics/text mode again uses circuity and thus costs money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, most 8 bit home computers restricted themselves to resolutions not much larger than 600 x 200 for these reasons.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-06-26T15:01:04.037" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="6865" PostTypeId="2" ParentId="6862" CreationDate="2018-06-26T15:20:11.463" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;As I understand it, a black-and-white TV tube with no color burst signal and the RF stage skipped, while it could not quite reach 80 columns, could handle 64 columns well enough,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It can do 80 as well, but that's already borderline.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;which raises the question of why Apple and Commodore didn't try for that, or at least for something a bit beyond 40. 64x25 = 1600 bytes, not prohibitive even by the standards of the time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/79/stephen-kitt&quot;&gt;Stephen Kitt&lt;/a&gt; already &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6862/columns-of-text-in-early-microcomputers#comment18511_6862&quot;&gt;mentioned&lt;/a&gt;, 1 KiB is a lot of memory, especially considering that the early machines like PET and Apple II were meant to work with as little as 4 KiB total RAM. The 'mere' 600 bytes needed for 64x25 would have been a rather deep cut.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where Commodore and Apple stayed with a 'traditional 24/25 line display, Tandy did go a different way by making the screen 'binary' compatible with a 64x16 resolution - thus staying within the 1 KiB needed for display memory but showing longer lines.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I get the impression memory bandwidth was a significant limitation, such that when the Apple II later added an 80-column option, the engineering of such involved the careful juxtaposition of two memory banks to provide data at the required rate.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not in any way. Simple math tells that a 1 MHz machine with video a video access window on every clock can deliver 1 MB/s. A 40x24 screen at 60 Hz needs less than 60 kB/s, that's less 6%. There's much room for a larger display, even when including other constraints like frame structure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with the Apple II was that its timing is built around the video timing. The CPU doesn't get a monotone clock rate, but a varying one to make it fit. While this was a quite clever design, it's somewhat inflexible when data needs to be accessed at double the rate. Ofc, they could have went along and redesigned the whole timing - or doubled the machines speed (which would have been nice). The least intrusive way to double accessed data within the existing timing was adding just another KiB and make video access 16 bits wide.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was memory bandwidth the reason for Apple and Commodore sticking with 40 columns?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. On the Apple side it's rather clear that WOZ intended the use of a TV set with (or without) intermediate RF. Thus 64 would be out of scope and 40 seams a nice thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the PET, I can only guess that they tried to stay on the safe side (*1) - and, maybe more important wanted to keep 24 lines. With 24 lines 42 would have been possible - but that's really odd, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We often forget here the other early machine, the Atari 400/800. Here, like with the Apple, a standard TV set was intended as main display, so 40x24 is a logical choice.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If so, how did Tandy achieve 64 columns? Is it purely a coincidence that the 64-column machine is the only one of the trinity to use the Z80?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As soon as one is willing to diverge from the 24/25 lines paradigm, 64x16 is a quite reasonable choice. Especially when it comes with an 'internal' screen&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(I'm assuming the Vic-20 later supplying only 22 columns, is not so much due to technical limitations as to the use of a video chip designed more for games than general purpose computing.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think that's a good assumption.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much like the TI 99/4 was designed around the use of a TV set. Here the standard mode was only 32x24 (a two color 40x24 was also available).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C64 later on benefited from the 40x24 decision for the PET.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I would like to think that they did keep an eye on the use of a TV during design - and before the decision was made to produce an all-in-one unit.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-06-26T18:32:24.810" LastActivityDate="2018-06-26T18:32:24.810" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6866" PostTypeId="2" ParentId="6862" CreationDate="2018-06-26T16:12:56.240" Score="6" Body="&lt;p&gt;Don't underestimate the cost of additional RAM for display memory!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TRS-80 used &lt;em&gt;seven&lt;/em&gt;, not eight, 1x1024 static RAM chips for its display memory. &lt;strong&gt;They left off the eighth chip to reduce cost.&lt;/strong&gt; Without it, the machine was limited to uppercase-only display -- one bit per character cell to specify whether that cell displayed a character or a 3x2 graphic tile, and the other bits to specify the character or the state of each graphic block.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was common to solder an eighth chip piggy-back onto one of the existing display chips. Once you connected that extra data bit to the bus, you could display lowercase -- the character ROM already had lowercase characters and special symbols in its map, it just needed the data to drive it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time these machines were introduced, I think a static 1K chip was still a few bucks. That's a significant chunk in a product like this. It would also have required more board space; in those days of medium-scale TTL DIPs, dual-layer boards, and coarse design rules, each additional part took up quite a bit of room. Bigger board, more expense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, imagine &lt;em&gt;doubling&lt;/em&gt; the amount of display RAM, &lt;em&gt;and&lt;/em&gt; requiring a more expensive higher-bandwidth monitor. In the late 1970s, it just didn't make economic sense.&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2018-06-26T16:12:56.240" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6867" PostTypeId="2" ParentId="6846" CreationDate="2018-06-26T16:47:39.160" Score="12" Body="&lt;p&gt;The original 65816 layout was done by hand and was &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.apple2/lw8eP8h-izA/jsGMZyxdjiUJ&quot; rel=&quot;noreferrer&quot;&gt;not amenable to high speeds&lt;/a&gt;. In particular, &lt;code&gt;REP&lt;/code&gt;/&lt;code&gt;SEP&lt;/code&gt; (perhaps &lt;code&gt;PLP&lt;/code&gt; as well) instructions didn't complete in 3 cycles when overclocked. (Even today, the data sheet notes, &quot;the MX [pin] output is invalid during the instruction cycle following REP, SEP and PLP instruction execution&quot;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Transwarp GS accelerator stretched clock cycles to work around that problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1992, a Sanyo redesign fixed the issues and enabled higher speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Sourced from comp.sys.apple2 archives and GEnie A2 Transwarp GS archives)&lt;/p&gt;&#xA;" OwnerUserId="3261" LastEditorUserId="71" LastEditDate="2018-06-28T01:43:33.723" LastActivityDate="2018-06-28T01:43:33.723" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6868" PostTypeId="1" CreationDate="2018-06-26T17:15:09.853" Score="4" ViewCount="297" Body="&lt;p&gt;Apple went to the trouble of designing a switching power supply at a time when they were still quite new and not widely used for consumer electronics, perhaps because Steve Jobs liked the aesthetics of putting the power supply within a plastic case that had a monitor sitting on top, which would have made a fanless computer prone to lethal overheating if it used a linear power supply (that would have generated more heat).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How much did this switching power supply cost, per unit, compared to the linear power supplies used by other manufacturers like Commodore?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-06-26T17:15:09.853" Title="Cost of Apple II switching power supply" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;power&gt;&lt;cost&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6870" PostTypeId="2" ParentId="6854" CreationDate="2018-06-26T19:53:54.700" Score="7" Body="&lt;p&gt;Setting aside the file system (other file systems besides FAT were possible on MS-DOS using redirector technology or via the shell approach (ie NetWare)), 8.3 was still a requirement due to the fact that a number of INT 21h functions used the FCB (file control block). (The FCB has hardcoded locations for filename and for the extension.) In particular functions 0Fh through 17h all used FCB(s). (See &lt;a href=&quot;http://www.ctyme.com/intr/int.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ralf Brown's interrupt list&lt;/a&gt;.) So a program using FCB functions would not be able to specify a 9 character filename or a 4 character extension.&lt;/p&gt;&#xA;&lt;p&gt;Additionally the &lt;a href=&quot;https://en.wikipedia.org/wiki/Program_Segment_Prefix&quot; rel=&quot;nofollow noreferrer&quot;&gt;Program Segment Prefix&lt;/a&gt; contained two FCBs, so any program examining PSP would need be able to interpret a non 8.3 filename.&lt;/p&gt;&#xA;" OwnerUserId="9035" LastEditorUserId="15334" LastEditDate="2020-11-13T21:10:28.707" LastActivityDate="2020-11-13T21:10:28.707" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6872" PostTypeId="1" AcceptedAnswerId="6874" CreationDate="2018-06-26T23:18:35.263" Score="9" ViewCount="1119" Body="&lt;p&gt;Apparently when the two Atari 8-bit machines were released, the 400 outsold the 800 2 to 1, which is unsurprising considering they were priced at approximately $500 and $1000 respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Indeed, the surprise is that the ratio was not higher. Granted the 800 had an extra cartridge slot; that doesn't jump out as being a very important feature; it at least looks like one in three customers were willing to pay an extra $500 largely or entirely for a better keyboard. Which would be very logical for a productivity machine, but more surprising for a machine whose primary selling point was games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were those one in three customers really paying for the better keyboard, or did the 800 have some other selling point I'm not taking into account?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="278" LastEditDate="2019-04-10T07:19:17.687" LastActivityDate="2019-04-10T07:19:17.687" Title="What were the selling points of the Atari 800 over the 400?" Tags="&lt;history&gt;&lt;keyboards&gt;&lt;atari-800&gt;&lt;cost&gt;&lt;atari-400&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6873" PostTypeId="2" ParentId="6872" CreationDate="2018-06-26T23:39:17.827" Score="6" Body="&lt;p&gt;The Atari 800 allowed a maximum of 48k of RAM, vs the 16k maximum in the Atari 400. After 1980, both models shipped with maximum RAM - so you were getting three times as much memory with the 800. (Details are on &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_8-bit_family#400/800_release&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="3328" LastActivityDate="2018-06-26T23:39:17.827" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6874" PostTypeId="2" ParentId="6872" CreationDate="2018-06-27T00:59:40.070" Score="14" Body="&lt;p&gt;There are a few improvements that made the 800 more valuable&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                           Candy     Coleen&#xA;                           (400)     (800)&#xA;RAM (original design 1979)   4 KiB     8 KiB&#xA;RAM (first delivered 1980)   8 KiB    16 KiB&#xA;Maximum RAM               (48) KiB    48 KiB (*1)&#xA;RAM (later models    1982)  16 KiB    48 KiB&#xA;ROM Slots                    1         2     (*2)&#xA;Expansion Slots              1         3&#xA;Free Slots                   0         2&#xA;Keyboard                   Membrane  Full Stroke&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;*1 - RAM on the 400 could only be extended by replacing the existing board after opening the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - ROM cartridges where meant to carry (up to) 8 KiB each. The 'left' slot was mapped at $8000, while the 'right' was mapped at $A000. A 'left' cartridge could also fill the whole 16 KiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When speaking about sales numbers, it might be worth  noting that according to Curt  Vendels book only about 35,000 400 &lt;em&gt;and&lt;/em&gt; 800 where sold until December 1980. So the 'big' difference shrinks to more reasonable numbers - not enough to really show a trend.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-06-27T01:25:12.940" LastActivityDate="2018-06-27T01:25:12.940" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6875" PostTypeId="1" AcceptedAnswerId="6876" CreationDate="2018-06-27T02:13:01.647" Score="5" ViewCount="390" Body="&lt;p&gt;On a Sun Ultra 10 system board, there is a plain 32-pin header next to the PCI riser connector that the documentation describes as ROMBO. What is that? What would connect here?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than the table for JP1, which allows selecting ROMBO instead of FPROM, there is no further reference to ROMBO in the Ultra 10 documentation I can find.  Assorted other &lt;code&gt;sun-4&lt;/code&gt; platforms have a similar connector, but I can't find any explanation of its use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fQF2v.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fQF2v.jpg&quot; alt=&quot;a picture of one corner of a Sun Ultra 10 mainboard, with the &amp;quot;ROMBO&amp;quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8508" LastEditorUserId="8508" LastEditDate="2019-04-21T22:07:36.217" LastActivityDate="2019-04-21T22:07:36.217" Title="What is the ROMBO header on a Sun system for?" Tags="&lt;sparc64&gt;&lt;workstation&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6876" PostTypeId="2" ParentId="6875" CreationDate="2018-06-27T02:30:33.633" Score="5" Body="&lt;p&gt;It appears to have been used for some kind of factory testing.  It seems to hook into the PROM bus so it's likely to allow reprogramming of the boot PROM, a socket for a ROM emulator, or to allow easy connection of an alternate (diagnostic) ROM.  The presence of a chip select line makes me suspect it's the latter.  The documentation I've seen is not really clear on this and it's possible that different versions had different functionality.  It's probably not for general QA or the like since the boards also have JTAG headers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have a 32-pin pinout but here are a couple of variants that should give you an idea of how they functioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;28-pin (SROMBOlite):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&#xA;        +5V 1    2 GND&#xA;    EB_RD_L 3    4 EB_WR_L&#xA;EB_SCC_CS_L 5    6 EB_LATCH&#xA;   EB_RDY_L 7    8 EB_DAT0&#xA;    EB_DAT1 9   10 EB_DAT2&#xA;    EB_DAT3 11  12 BRST_L&#xA;    EB_DAT4 13  14 EB_DAT5&#xA;    EB_DAT6 15  16 EB_DAT7&#xA; ROMBO_CS_L 17  18 EB_ADR0&#xA;    EB_ADR1 19  20 EB_ADR2&#xA;    EB_ADR3 21  22 SYNC_SER_IRQ_L&#xA;    EB_ADR4 23  24 EB_ADR5&#xA;    EB_ADR6 25  26 EB_ADR7&#xA;        +5V 27  28 GND&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the 34-pin SROMBO variant:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&#xA;ADR19 1   2 VCC&#xA;ADR16 3   4 ADR18&#xA;ADR15 5   6 ADR17&#xA;ADR12 7   8 ADR14&#xA; ADR7 9  10 ADR13&#xA;ADR6 11  12 ADR8&#xA;ADR5 13  14 ADR9&#xA;ADR4 15  16 ADR11&#xA;ADR3 17  18 RD_L&#xA;ADR2 19  20 ADR10&#xA;ADR1 21  22 ROMBO_CS_L&#xA;ADR0 23  24 DAT7&#xA;DAT0 25  26 DAT6&#xA;DAT1 27  28 DAT5&#xA;DAT2 29  30 DAT4&#xA; GND 31  32 DAT3&#xA;  NC 33  34 WR_L&#xA;&lt;/pre&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-06-27T04:04:31.127" LastActivityDate="2018-06-27T04:04:31.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6877" PostTypeId="2" ParentId="6875" CreationDate="2018-06-27T02:44:31.350" Score="5" Body="&lt;p&gt;It's a replacement for the FPROM (Flash PROM) which is the firmware that performs a power-on-self-test (POST) and then boots the operating system.  The ROMBO appears to be used by Sun during the development of the firmware, at least according to &lt;a href=&quot;https://docs.oracle.com/cd/E19127-01/blade150.ws/816-4379-10/816-4379-10.pdf&quot; rel=&quot;noreferrer&quot;&gt;Sun Blade 150 Service Manual&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There is a ROMBO connector for OpenBoot PROM and POST software development during initial bringup phase&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2018-06-27T02:44:31.350" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6878" PostTypeId="1" CreationDate="2018-06-27T07:50:09.400" Score="28" ViewCount="11992" Body="&lt;p&gt;Most home electrical appliances use a &lt;strong&gt;&lt;em&gt;fixed power cord&lt;/em&gt;&lt;/strong&gt; and have a on/off switch near the front.  I was in many government electronics labs and that cord and socket was not used i.e HP test equipment. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did computer equipment appear to start the trend? Why did some computers, monitors, printers and other equipment use a replaceable power code with a &lt;strong&gt;&lt;em&gt;non-standard socket?&lt;/em&gt;&lt;/strong&gt; (Often the power switch was at the back)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cAgmg.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cAgmg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2018-06-28T21:59:45.870" LastActivityDate="2018-07-01T02:12:26.003" Title="Why did computers use a power supply with a socket?" Tags="&lt;hardware&gt;&lt;history&gt;&lt;power&gt;&lt;case&gt;" AnswerCount="7" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6879" PostTypeId="2" ParentId="6878" CreationDate="2018-06-27T08:02:30.740" Score="0" Body="&lt;p&gt;In office and industrial environments the power cabling is often already installed, so users prefer to re-use the existing power cable by just plugging it in to a new machine when they upgrade. As Arvo points out, UPS units often use this type of cabling too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having a socket also helps sell the same hardware in different markets, only needing to supply the correct power cable with suitable plug rather than an entirely different model of hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Appliances often have stricter rules for safety reasons, e.g. because they are moved around a detachable cable might come loose. PCs don't have that issue.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2018-06-27T13:03:41.153" LastActivityDate="2018-06-27T13:03:41.153" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6880" PostTypeId="2" ParentId="6878" CreationDate="2018-06-27T08:03:40.563" Score="62" Body="&lt;p&gt;The socket (or rather inlet) is most definitely standard, it’s a &lt;a href=&quot;https://en.wikipedia.org/wiki/IEC_60320#C13/C14_coupler&quot; rel=&quot;noreferrer&quot;&gt;IEC 60320 C14 inlet&lt;/a&gt;. The standard was published in 1970. C6 and C8 are commonly used for laptop power supplies and smaller audio equipment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of reasons to use this arrangement on computer power supplies, monitors, audio equipment etc., including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;using a standard inlet with a detachable cable means the same hardware can be sold around the world, with no modifications (in the past, changes would have been necessary for 110V v. 220/230V, but that’s no longer the case);&lt;/li&gt;&#xA;&lt;li&gt;there’s enough room on the power supply to install an inlet rather than just a cable;&lt;/li&gt;&#xA;&lt;li&gt;keeping the switch close to the power supply means there’s less high-voltage wiring, and the high-voltage plane can be kept as small as possible, and interrupted close to the point of entry (alternative arrangements which keep this in mind include mechanical connections between a front-mounted switch and the PSU);&lt;/li&gt;&#xA;&lt;li&gt;the cables don’t have to be connected to home-use power sockets, they can be connected to UPSs or PDUs with type F outlets, or even PSUs with type F outlets (which were common in the 80s and early 90s: you plugged your monitor into the computer’s PSU).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Using a detachable cable is nice for users too since they can be easily replaced when damaged, and changed according to length requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of reasons &lt;em&gt;not&lt;/em&gt; to use this arrangement on other types of equipment such as TVs, washing machines etc., including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;regulatory requirements: toasters need high-temperature-resistant cabling, beyond what even a C16A-compliant cable can guarantee; washing machines and other wet environment equipment need need water-resistant cabling (which also places requirements on the sockets — they typically must be installed above a certain height); some countries require certain types of equipment to use non-removable ground connections;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;regional variations for other reasons, whose economic impact dwarfs the considerations around cabling: for example TVs are region- and even country-specific (this also applies when considering regulations since regulations vary geographically);&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;for high-volume, low-margin items (which covers lots of integrated audio equipment, TVs etc. — although as mentioned above, domestic audio equipment commonly uses C8 inlets) the balance between the cost of a socket and the labour savings may be different.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note that many retro systems had external power supplies with only a small connector on the system itself, and didn’t use C14 sockets at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(As an interesting aside, in some markets, &lt;em&gt;e.g.&lt;/em&gt; the UK, it was common in the 70s and 80s for home equipment to be sold with only a power cable, and no plug — it was up to the buyer to install a plug, or have one installed.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/1931/muzer&quot;&gt;Muzer&lt;/a&gt;, &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/779/plasmahh&quot;&gt;PlasmaHH&lt;/a&gt;, &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/9049/michael-harvey&quot;&gt;Michael Harvey&lt;/a&gt;, &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/9055/tkk&quot;&gt;TKK&lt;/a&gt;, and &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/7497/erikf&quot;&gt;ErikF&lt;/a&gt; for their comments which helped improve this answer.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-06-28T07:06:44.253" LastActivityDate="2018-06-28T07:06:44.253" CommentCount="23" ContentLicense="CC BY-SA 4.0" />
  <row Id="6881" PostTypeId="2" ParentId="6878" CreationDate="2018-06-27T12:05:53.640" Score="3" Body="&lt;p&gt;Smaller home appliances don't use such a socked to &lt;strong&gt;save on the price&lt;/strong&gt;. Many don't even require grounding, so they get a cheaper two-wire power cord, for which such a socket would be an overkill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet other, bigger home appliances have &lt;strong&gt;strict safety standards&lt;/strong&gt;, which exclude the use of the above power cord socket. Kitchen and bathroom appliances in particular require a ground connection fixed with a screw, so it cannot accidentally come loose:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dyBiI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dyBiI.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another case of safety requirements incompatible with the socket are appliances which can be expected to contact with water: a fixed power cord is essentially waterproof, while a socket isn't.&lt;/p&gt;&#xA;" OwnerUserId="3736" LastEditorUserId="3736" LastEditDate="2018-06-27T20:06:02.900" LastActivityDate="2018-06-27T20:06:02.900" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="6882" PostTypeId="2" ParentId="6878" CreationDate="2018-06-27T12:29:37.863" Score="15" Body="&lt;p&gt;(This is about motivation (the why) of defining and adding a standard socket to devices and ment as an addition to Stephen Kitt's &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6880/6659&quot;&gt;great explanation of the technical side&lt;/a&gt; - at some point a merge might be useful)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Most home electrical appliances use a fixed power cord and have a on/off switch near the front.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's due the fact that for appliances sold in large numbers to the same (restricted) market, it's less costly to have  fixed power cord.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did computer equipment appear to start the trend?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's not just computer and measuring devices but many others that are sold to markets with different standards in plugs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While there are only a small number of power standards regarding voltage and frequency that require different power supplies (before the switched PS that is), there are many different power plugs in use around the world - and most are mandatory by law or trade union standards in their region, thus can't be avoided.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Over the years, more than 30 different plugs for household usage did get some proliferation and &lt;a href=&quot;http://www.iec.ch/worldplugs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;about 15-20 are still in use&lt;/a&gt;. For a company with the intent to sell a product this would mean production and logistics for 15+ different versions of one device, just because of different power plugs. While this may be acceptable for huge markets like the US, Japan or Germany, it becomes expensive for smaller markets. If a product is also only sold in rather small numbers (not TVs, but measuring equipment), it's outright prohibitive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So devices smaller markets where usually delivered just with the right power supply, but no plug at the end of the cable. In fact, this was even in medium sized markets standard until the early 1960s. After all, back then, no supermarket (if existing at all) was selling electronics, nor were there huge electronics markets around. To buy a toaster or TV one would buy at a local electrician or TV salesman - who in turn did fit the right plug before selling. Back then fixing a plug was something considered doable for everyone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this vanished (at least in large markets) over time due to increased volume, it stayed a problem with professional equipment. I still remember in the late 70s applying plugs to newly delivered measuring equipment as part of my job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While mostly incompatible, some may interact with each other with some preparation. For example the French and German system of sockets can both be used by a single plug prepared for both sockets, as the difference is just how PE (protective ground) is handled (*1) &lt;strong&gt;and&lt;/strong&gt; both ways can be made into the same shell. There are similar combinations for some other countries (*2), but this still leaves ~10 different plugs to support when a company intends worldwide sales.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The plug is based on a German VDE standard for 'Kaltgerätestecker' (Cold Device Plugs). German industry has a strong export orientation, even more so, that after the war Germany itself was only a small market without much buying power. The many different European plugs therefore were a serious issue for sales and production. Already in the early 1960s a standard was developed for several classes of devices, including the C13 now used with most PCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These intermediate couplings are structured around several (*3) features:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2 or 3 wire&lt;/li&gt;&#xA;&lt;li&gt;Current&lt;/li&gt;&#xA;&lt;li&gt;Temperature&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The C13 is defined as 3 wire (power+PE), up to 10A and maximum of 70 degree environmental temperature (at the plug).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other well known ones are C1, the 'razor plug', 2 wire, 0.2A, or the C5 and C7, both at 2.5A with 2 (C7) or 3 (C5) wires. The C7 was quite common with home computers with integrated PS, while the C7 is today common with laptops or other low power devices with a need for PE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the plugs for the different (useful) combinations became different shapes, so no two could be exchanged by error. Basically an encoding of polarity, need for PE and material at the device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While in itself adding cost, the usage of these intermediate couplings did greatly reduce overall cost and were an instant success over manufacturer-specific solutions. Already in 1970 this VDE 0623 became an IEC standard.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did some computers, monitors, printers and other equipment use a replaceable power code with a non-standard socket?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To start with, it's not non-standard, but a well known and widely used standard. Already way before small computers became a thing. It was just lesser known in the US where the market was large enough to justify &lt;em&gt;not&lt;/em&gt; to use an intermediate connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers are a prime example for machines sold in many markets with (in the beginning) only a quite small number per plug region. And with today's just-in-time production and the need to keep costly storage of finished products low, it becomes even more important. A PC will no longer be built for a specific market, but as a general, worldwide sold unit, and only customized for a target country by adding the right language CD, Manuals and power cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, even looking at the 'big 3' early computers, Apple II, Commodore PET and Tandy Model 1, already shows the difference. Tandy and Commodore used a fixed cable, fine for the domestic market, while Apple did decide to use a switchable PS with C14 socket (for C13 plug). This decision made it quite easy to start worldwide sales. Where Tandy only had rather small sales outside the US (or better the 110V/60Hz) world and Commodore did set up factories in other countries, Apple could start worldwide sales right away from California (and later from their second plant in Eire).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One may guess that it was part thru Woz' desire to make use of a good PS, thus a switching one, but maybe more his acquaintance with professional measuring equipment, where power selectable PS and plugs at the device where already standard.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(Often the power switch was at the back)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That again is to save costs. Due the integration of switch and socket into one pre-made unit, no additional cabling is needed. The one shown in the picture even integrates a fuse, even more simplifying design and saving cost. Another benefit is that the wiring inside the computer (after the switch/socket unit, until the PS that is) is already switched, so no further protection for a hot wire even when switched off is need. And that's not only a good idea, but some countries would require additional measures for such a configuration, which thus can easy be avoided. A classic win-win in production.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Several European sockets are compatible in size, diameter and distance of the two main connectors, jut the way PE is handled differs. The French/German are also compatible in the defined area for the shell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Even more so when it's just about two prong connections for devices that don't need PE (encapsulated or Class II devices), leading to the so called &lt;a href=&quot;https://en.wikipedia.org/wiki/Europlug&quot; rel=&quot;nofollow noreferrer&quot;&gt;Europlug&lt;/a&gt; covering many more countries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - There are more deviations, like resistance to acid and spark-free plugging that are not really relevant here - including voltage, but all connectors we usually have are certified for 400V, so way above all regular two wire mains.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-06-29T13:48:54.877" LastActivityDate="2018-06-29T13:48:54.877" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6883" PostTypeId="1" AcceptedAnswerId="6884" CreationDate="2018-06-27T15:18:39.433" Score="4" ViewCount="433" Body="&lt;p&gt;I have this old card, a &lt;strong&gt;Future Domain TMC-1680 ISA SCSI&lt;/strong&gt; card that has a 34-pin floppy disk connector on it. I am trying to research that to see if I can make it work (before anyone asks - just for the hell of it!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FrSfd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FrSfd.jpg&quot; alt=&quot;ISA card&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't even know if it's a &quot;standard&quot; floppy interface. It certainly looks like one, and a standard floppy cable fits. But I've heard about SCSI floppies, so am not sure. And without any documentation I've had little success making the card do anything at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing that I have discovered about this card is that its driver has been &lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e184f2bf4d9f1a3c612a8c1d67e73e9cf8ab5ab9&quot; rel=&quot;nofollow noreferrer&quot;&gt;removed&lt;/a&gt; from the Linux kernel (after 4.16, so it's only recently happened). So I'll have to use a pre-4.17 kernel if I want to use this card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been unable to find any documentation for the card. If there is a source of documentation or other information that would be very welcome. &lt;/p&gt;&#xA;" OwnerUserId="9046" LastEditorUserId="276" LastEditDate="2019-12-18T18:53:48.813" LastActivityDate="2019-12-18T18:53:48.813" Title="Using floppy disk interface on Future Domain TMC-1680 SCSI ISA card" Tags="&lt;floppy-disk&gt;&lt;ibm-pc&gt;&lt;scsi&gt;" AnswerCount="1" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="6884" PostTypeId="2" ParentId="6883" CreationDate="2018-06-27T16:16:41.897" Score="6" Body="&lt;p&gt;It's a normal 8272-style floppy interface that just happens to be on the same card as the SCSI controller. It should work in any motherboard with ISA slots, provided the motherboard doesn't have an integrated floppy controller of its own - or, if it does, that the integrated FDC can be disabled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DIP switch is used to enable or disable the floppy controller, as can be seen on this photo of the rear of a TMC-1680, with a label describing the DIP switches:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B6g9p.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B6g9p.jpg&quot; alt=&quot;Read of a TMC-1680&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;https://www.ebay.co.uk/itm/332722224463&quot; rel=&quot;nofollow noreferrer&quot;&gt;Source&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="79" LastEditDate="2018-07-17T11:28:43.573" LastActivityDate="2018-07-17T11:28:43.573" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6885" PostTypeId="1" CreationDate="2018-06-27T17:43:26.770" Score="3" ViewCount="208" Body="&lt;p&gt;what would be the best way to display a PAL TV signal on a modern HDTV in the USA?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do HDMI upscalers do an acceptable job of getting PAL 50hz input out to a normal HDMI 1080p 60hz? &lt;/p&gt;&#xA;" OwnerUserId="9050" LastEditorUserId="75" LastEditDate="2018-06-27T20:36:47.520" LastActivityDate="2018-06-27T20:36:47.520" Title="PAL consoles to US HDTV" Tags="&lt;ntsc&gt;&lt;pal&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6886" PostTypeId="2" ParentId="6885" CreationDate="2018-06-27T17:46:44.217" Score="4" Body="&lt;p&gt;Simple answer: Yes, they all do (plus many US HDMI TVs accept 50 Hz anyway).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you may want to check if they are able to process PAL input, as there are some (usually older) who don't. Also, there are differences in their upscaling algorithms, so while this is no big issue for a movie it might be annoying on certain consoles/games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it might help to try before buying if it's about a more expensive one. On the other hand, not much damage with the cheaper (&amp;lt;40USD) offers.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="278" LastEditDate="2018-06-27T19:20:13.803" LastActivityDate="2018-06-27T19:20:13.803" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6887" PostTypeId="2" ParentId="6878" CreationDate="2018-06-27T19:59:42.680" Score="4" Body="&lt;h1&gt;The original PC was made by IBM&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The first device I ever saw with this style of power cord was an IBM Selectric typewriter.  The &quot;I&quot; in &quot;IBM&quot; stands for &quot;International&quot;, and this allowed them to make the same typewriter work with different countries' power cords.  So, when they got around to making what was widely considered the next generation of typewriter (or word processor), of course they continued to use the same system.&lt;/p&gt;&#xA;" OwnerUserId="6769" LastActivityDate="2018-06-27T19:59:42.680" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6888" PostTypeId="2" ParentId="6878" CreationDate="2018-06-27T20:34:14.007" Score="4" Body="&lt;p&gt;A lot of valid considerations before me, and here is another one:&#xA;Computers, and especially servers are usually installed in racks or spaces where it is easier to first install/mount the server and then connect the power cable to it.&#xA;Also a lot of people liked to tinker with their computers (it was common thing 15 years ago, but nowadays probably not so much). Common sense dictates you have to be able to disconnect any power cord easily before tinkering and in a lot of situations it is easier done at the back-plane of the computer/server, instead of searching the socket/PDU, which may be buried somewhere deep/behind the rack.&#xA;People open and tinker a lot less with ovens, washing machines, etc.&lt;/p&gt;&#xA;" OwnerUserId="9054" LastActivityDate="2018-06-27T20:34:14.007" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6889" PostTypeId="1" AcceptedAnswerId="6890" CreationDate="2018-06-27T21:14:24.003" Score="19" ViewCount="524" Body="&lt;p&gt;Back in the 1980's long distance telephone calls were ridiculously expensive.  This led more than one young aspiring geek to misuse the phone network when making those &lt;em&gt;oh so important&lt;/em&gt; calls to BBS's on the other end of the country.  But I remember sometime around 1988 that US Sprint offered a service where you could call a local number using your computer/modem and connect to some sort of network.  After authentication, it was possible to &lt;em&gt;route&lt;/em&gt; your connection to another city, and finally dial out like you were local in that city.  This resulted in the ability to make long distance connections at a fraction of the cost, and I seem to remember the bandwidth wasn't too shabby either.  Does anyone remember the name of this service, or any details about it?  I was just curious how it worked, what infrastructure it used, how popular it was, etc.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="4025" LastEditDate="2018-06-27T21:17:03.903" LastActivityDate="2018-06-27T21:36:02.713" Title="What was the service offered by US Sprint for long distance data connections in the late 1980's?" Tags="&lt;modem&gt;&lt;bbs&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6890" PostTypeId="2" ParentId="6889" CreationDate="2018-06-27T21:36:02.713" Score="19" Body="&lt;p&gt;It sounds like what you're looking for is &lt;a href=&quot;https://en.wikipedia.org/wiki/Telenet&quot; rel=&quot;noreferrer&quot;&gt;Telenet&lt;/a&gt; (renamed to &quot;Sprintnet&quot; when Sprint acquired it) or &lt;a href=&quot;https://en.wikipedia.org/wiki/Tymnet&quot; rel=&quot;noreferrer&quot;&gt;Tymnet&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tymnet did not survive and Sprintnet became part of what we now know as the Internet.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2018-06-27T21:36:02.713" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6891" PostTypeId="1" AcceptedAnswerId="6892" CreationDate="2018-06-28T06:44:11.390" Score="29" ViewCount="3923" Body="&lt;p&gt;In the old days, I remember we were told to never go beyond the 70'th column in the text editor (the actual value was usually something above 70, but less than 80).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, at least in the program I was using (the ISPF text editor) against an old mainframe, we also could not use the first three columns as these were reserved for system codes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it makes a difference, this was when programming COBOL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We were never told the reason behind this arbitrary limit; and for a while many modern programming languages also stick to this line length.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the history behind this number?&lt;/p&gt;&#xA;" OwnerUserId="9056" LastActivityDate="2018-07-31T02:28:18.597" Title="History behind the text column restriction" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;text&gt;" AnswerCount="6" CommentCount="12" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6892" PostTypeId="2" ParentId="6891" CreationDate="2018-06-28T07:24:09.277" Score="53" Body="&lt;p&gt;Old COBOL standards were based around 80-column punched cards, and columns beyond 71 (or 72) were reserved for line numbers. They were little used, but a numbered deck, if dropped, could be sorted by a collator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of this, some compilers would not parse beyond a certain column (which could be 70, 71, or 72). So, in the interests of compatibility, it was conventional not to use columns 71-80 for program code. On the system that I worked on (Honeywell Series 60 Level 62), the COBOL compiler would not parse beyond column 72. I no longer have my manuals and quick reference guides, but this IBM web page gives some idea of the various possibilities:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.f54em00/bounds.htm&quot; rel=&quot;noreferrer&quot;&gt;IBM Knowledge Center : Edit boundaries&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3278" LastActivityDate="2018-06-28T07:24:09.277" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6893" PostTypeId="2" ParentId="6891" CreationDate="2018-06-28T11:57:51.333" Score="17" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;In the old days, I remember we were told to never go beyond the 70'th column in the text editor (the actual value was usually something above 70, but less than 80). [...] If it makes a difference, this was when programming COBOL.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it doesn't, as it was more of a feature of the underlaying priciples and standards for handling punch cards. By default column 73..80 (*1) where reserved for a numbering. A feature quite handy not only when a stack got mixed up as so often told, but much more when one needs to insert a line (or more) between two existing. Just select a number (*2) between the cards you wanted to insert and voila (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here also lies the reasoning for using 8 columns. For sure noone back then did belive that there would be ever programms with millions of lines, and especially not 100,000,000 lines. Since the sort was done as (alpha)numeric left to right, it was fine to initial use only 4 digit left alligned line numbers:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0001____&#xA;0002____&#xA;0003____&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now a line between #2 and #3 could be easy inserted as 00025 (*5).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0001____&#xA;0002____&#xA;00025___&#xA;0003____&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Very soon, when Computers featured several KiB of usable memory, compilers became a feature to 'patch' source files. Now all cards of a stack where read and stored in memory before compiling. Lines where sorted in order of their line number durign read (so no more sort run) and when duplicate line numbers came in the newer (later read) line replaced any older (prior read) with the same number (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now programmers did not repunch the whole program over and over again, but composed a stack of the original programm with all cards added or replaced in chronological order. Only when it started to have more patches than program, or when editing became unreliable (as it relied on the programers memory) a new stack was punched. Again an automated process by feeding the cards into a programm reading and replacing them before outputing to a punch. And yes, that not only mimicks the process, it was a feature of many compilers to read in a programm, do all card processing regarding the 'patch' and then output the source again. Why doing a seperate utility if everything needed is already in place. Our forefathers hated work as much as we do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, not even the initial numbering had to be done by hand. Already in the pre-computer age it was common to punch cards without a numbering and then run the stack thru a routine that punched increasing numbers into specified columns. Man creates tools.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Further, at least in the program I was using (the ISPF text editor) against an old mainframe, we also could not use the first three columns as these were reserved for system codes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now that is unusual and may be system specific. There are in general five general formats for punch cards:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Application&lt;/strong&gt; - column 1..80 to be used as needed&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standard&lt;/strong&gt; - 1..72 is used for content, 73..80 is used for numbering. This was first widely used in Assembler and FORTRAN and became the standard for the IBM world&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Assembler&lt;/strong&gt; - 1..71 is used for content, 72 for continuation and 73..80 for numbering&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;COBOL&lt;/strong&gt; - 1..6 is used for numbering, 7 for continuation&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;IBM Cobol&lt;/strong&gt; - Like COBOL, but in addition column 73..80 is again reserved for IBM standard numbering&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The last case shows a nice dilemma between a languages standard and a system wide standard. As a result COBOL compilers could be set to use either number - or check them for having the same value (*6).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Less related, for later variable length formats the sort/numbering column ent int the first 8 characters. Still the big old three, Assembler, COBOL and Fortran, did keep the ability to work with fixed length.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Columns on a punch card are numbered 1..80, not 0..79.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The 'numbering' didn't have to be numbers as it was taken as an alphanumeric sort field according to the numeric value of each char. Later on, in memory sort used the full EBCDIC value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - And thanks to card sorters one didn't have to look for the right loction to slip in the card(s). Lust add them to the stack and run your (up to) 8 sort runs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Deleting was done by adding a card with the right line number and no program text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - It was a good idea to use a number somewhere inbetween to leave room for more line numbers. Then again, I once knew a guy who used to go just by one. So the line between 1__ and 2__ became 11_ the next insert was not 12_ but 111. Easy to see where that was going, right? No, he did ran into that problem over and over again :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - something that also happened with at least one Mainframe BASIC.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-06-28T15:12:38.587" LastActivityDate="2018-06-28T15:12:38.587" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6894" PostTypeId="2" ParentId="3047" CreationDate="2018-06-28T12:29:11.950" Score="1" Body="&lt;p&gt;I can answer for the Soviet computer BK-0010, which uses a clone processor of PDP-11. When a user's program would start, its atarting address would be &amp;amp;1000 and SP would be initialized to the same value as well (the stack would grow backwards while PC would grow forward).&lt;/p&gt;&#xA;" OwnerUserId="4552" LastActivityDate="2018-06-28T12:29:11.950" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6895" PostTypeId="2" ParentId="4661" CreationDate="2018-06-28T12:37:53.590" Score="7" Body="&lt;p&gt;As I remember, there were the following inconsistensies:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Jumping to an odd address could bring different results (trap or continuing from the closest even address)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Byte operations with the stack pointer. In some models this would be working as with any other register, decrementing/incrementing SP by one, in others only increment/decrement of SP by 2 was possible.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Byte move to a registry on some models would fill the other byte of the registry with sign.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Different behavior of some SWAB and bit mask operations, I do not remember details.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4552" LastEditorUserId="4552" LastEditDate="2018-06-28T13:02:25.690" LastActivityDate="2018-06-28T13:02:25.690" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6896" PostTypeId="2" ParentId="6891" CreationDate="2018-06-28T13:40:20.377" Score="2" Body="&lt;p&gt;Punched cards were, of necessity, a fixed number of columns (80, with fixed column use dependent on the language.  JCL, for example, used the entire card).  Many programming languages introduced at that time had a fixed format in which the column a character appeared in was significant, much like the invisible significance of position in modern programming languages such as Python today.  Language constructs could span more than the fixed number of characters usually by having a special character appear in a specific column, known as a &quot;continuation line.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When things progressed to using video display terminals, they too had a fixed number of columns, and by no small coincidence the number of columns (80) tended to match the number of columns on a punched card.  In fact, VDTs were sometimes referred to as &quot;glass keypunches.&quot;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Along comes the more recent decades with better display technology and free-format programming languages with context-free grammars.  These are better times and we are less constrained by the media and the limits of technology.  Turns out that we are actually limited by our feeble mortal bodies and that centuries of accumulated wisdom on the presentation of textual information is starting to come around again.  The art of compositing text, developed by ancient monks and scribes and refined by printers from the 12th century onwards tells us that our physical limitations mean we can better read and uderstand narrower columns of text with a half-ragged edge (for left-to-right text, a justified left and a ragged right).  Columns somewhere around 80 columns wide.  I think it is no coincidence.&lt;/p&gt;&#xA;" OwnerUserId="7510" LastActivityDate="2018-06-28T13:40:20.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6897" PostTypeId="2" ParentId="6891" CreationDate="2018-06-28T16:43:20.470" Score="17" Body="&lt;p&gt;On the basis that a picture is worth a thousand words, I include my scan of a punched card:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KLoAI.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KLoAI.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As amply described in the other answers, it shows  how the columns are visibly marked on the card for different purposes. It makes sense when you see a card. It makes less sense when you're using a computer display or are using paper tape!&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2018-06-28T16:43:20.470" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6898" PostTypeId="1" AcceptedAnswerId="6904" CreationDate="2018-06-28T20:26:19.120" Score="2" ViewCount="2226" Body="&lt;p&gt;This is an extension to the question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2576/nes-cartridge-rom-emulation-with-arduino-or-pi/&quot;&gt;NES cartridge rom emulation with arduino or pi?&lt;/a&gt;, which asked whether it would be possible to &lt;em&gt;physically&lt;/em&gt; emulate a NES cartridge using an Arduino/Raspberry Pi (RPi). By this I mean mapping part of the RPi's SDRAM to hold game ROM and RAM, interfacing to the Gameboy's 32 cart pins via the GPIO header, so that the Gameboy believes a normal cartridge is connected. It would also need MBC functionality to be able to emulate generic games. Unlike that previous question, I would like to know if there are any specific hardware limitations to trying this for a Gameboy (not NES) using a RPi (not a generic MCU). I'm assuming no OS is needed on the RPi, just some interfacing software which maps the memory addresses properly. There could also be some Gameboy software that is initially loaded to the Gameboy which allows you to select from a choice of stored game roms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an excellent set of blog posts here: &lt;a href=&quot;https://dhole.github.io/post/gameboy_cartridge_emu_1/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://dhole.github.io/post/gameboy_cartridge_emu_1/&lt;/a&gt; in which someone has done exactly this idea but using the STM32F4 MCU rather than an RPi. Assuming no OS overhead on the RPi, is there any reason why such a setup wouldn't work using an RPi instead? Naively my thinking is that even the RPi Model 1 B is clocked at 700 MHz (with the 3B at 1.2GHz), whereas the STM32F4 is 168 MHz, so just based on CPU cycle speed there shouldn't be an issue. My understanding of how that matches up with bus speeds etc. is limited though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motivation for doing such a thing, apart from the fun of trying, is that you could store multiple game roms, and perhaps design some Gameboy software that lets you choose a selection. As Gameboy games take ~64--1000 KB space, even the RPi Model 1B with 512 MB memory could hold a large number of games.&lt;/p&gt;&#xA;" OwnerDisplayName="user8833" LastEditorDisplayName="user8833" LastEditDate="2018-06-29T09:28:31.747" LastActivityDate="2018-06-29T10:14:45.190" Title="Physically emulate Gameboy cartridge using Raspberry Pi?" Tags="&lt;hardware&gt;&lt;game-cartridge&gt;&lt;hardware-mods&gt;&lt;game-boy&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ClosedDate="2018-06-29T15:10:03.687" ContentLicense="CC BY-SA 4.0" />
  <row Id="6899" PostTypeId="2" ParentId="6862" CreationDate="2018-06-28T21:59:29.583" Score="0" Body="&lt;p&gt;The Apple II is the only one of the 1977 trinity to have memory mapped bitmap graphics: 280x192.  With a terribly small font 5x3, you could achieve 70 columns by 32 rows using the &quot;hires&quot; graphics mode.  Thank goodness there was a plethora of 80 column text cards that came out in the early 80's for the Apple II. The late Apple //e (1983) model had 80 columns builtin, but that was long after the trinity.&lt;/p&gt;&#xA;" OwnerUserId="6741" LastActivityDate="2018-06-28T21:59:29.583" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6900" PostTypeId="1" AcceptedAnswerId="6902" CreationDate="2018-06-29T08:57:47.363" Score="10" ViewCount="1286" Body="&lt;p&gt;Inspired by &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6878/why-did-computers-use-a-power-supply-with-a-socket&quot;&gt;this question&lt;/a&gt; asking about &quot;regular&quot; power cables, I have been curious about (read: irritated by) the rise of &quot;Mickey Mouse&quot; power cables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently they come from the same &lt;a href=&quot;https://en.wikipedia.org/wiki/IEC_60320&quot; rel=&quot;noreferrer&quot;&gt;standards document&lt;/a&gt; (C14 and C6, respectively), but I cannot recall having seen the C6's for as many decades as the C14's. On the contrary, I do recall laptop power bricks using the same C14 socket as other IT equipment until &quot;somewhat recently&quot; (in a retro computing sense, that is).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone explain &lt;em&gt;why&lt;/em&gt; we started using this other socket shape?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hZi2P.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hZi2P.png&quot; alt=&quot;&amp;quot;Mickey&amp;quot; C14 on the left, &amp;quot;standard&amp;quot; C6 on the right&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;Mickey&quot; C6 on the left, &quot;standard&quot; C14 on the right&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="832" LastEditorUserId="5140" LastEditDate="2018-07-27T14:02:27.390" LastActivityDate="2018-07-27T14:02:27.390" Title="Why the switch to &quot;Mickey Mouse&quot; (type C14) power cables?" Tags="&lt;hardware&gt;&lt;power&gt;" AnswerCount="4" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6901" PostTypeId="2" ParentId="6900" CreationDate="2018-06-29T09:03:42.400" Score="4" Body="&lt;p&gt;I imagine it’s because the C6 inlet is smaller than the C14 inlet: using a C6 inlet means a laptop transformer brick rated at less than 2.5 A (input) doesn’t have to be made larger simply to accommodate the C14 inlet. The C14 inlet takes up a significant amount of space inside an enclosure, compared to a C6 inlet.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-06-29T09:03:42.400" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6902" PostTypeId="2" ParentId="6900" CreationDate="2018-06-29T09:56:50.637" Score="23" Body="&lt;p&gt;It's because the C14 connector is rated for higher current (10A, up to 2400W), which means that it must be attached to a thicker and thus more expensive and less flexible cable. The cable can't be rated lower than the connector for safety reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C6 can only supply 2.5A (600W in 240V countries) so can use a thinner, lighter and more flexible cable that is better for carrying around with a laptop and which is cheaper to manufacture. Most laptops require well under 100W, where as 600W is not enough for many computers.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2018-06-29T11:00:29.207" LastActivityDate="2018-06-29T11:00:29.207" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6903" PostTypeId="2" ParentId="6900" CreationDate="2018-06-29T10:00:51.370" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Can anyone explain why we started using this other socket shape?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's the power rating. Or more correct, a changed power rating&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DIN/IEC did original rate C14 at 10 Ampere and C6 at 2,5 Ampere. But the US standards and testing organisation &lt;a href=&quot;https://en.wikipedia.org/wiki/UL_(safety_organization)&quot; rel=&quot;nofollow noreferrer&quot;&gt;UL (Underwriters Laboratories)&lt;/a&gt; (*1) does considere the usage of C6 with up to 10 Ampere (C14 as 15A). Thus UL certified devices/power supplied may use  C6 instead of C14.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reasoning behind is in part based on the wattage of the device connected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This wouldn't be a big gain in itself, as the IEC standard also defines that the C5 socket has to have an inset with the same square footprint as the C14. Here as well UL did diverge and certified the usage of sockets (*2) without the inset, resulting in a somewhat smaler footprint, preferable for small external power supplies.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, it wasn't just them, but a combined action with the Canadian and Mexican standard bodies to create &lt;a href=&quot;https://en.wikipedia.org/wiki/North_American_Free_Trade_Agreement&quot; rel=&quot;nofollow noreferrer&quot;&gt;NAFTA wide&lt;/a&gt; standards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - IEC standard conforming cables will still fit both versions and where used by manufacturers. This resulted in a somewhat huge plug for a small socket. Soon the 'IEC part' of the plug got reduced to a slim shield covering the rectangular shape and finally (mostly) eliminated. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-06-29T10:13:29.173" LastActivityDate="2018-06-29T10:13:29.173" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6904" PostTypeId="2" ParentId="6898" CreationDate="2018-06-29T10:14:45.190" Score="5" Body="&lt;p&gt;In principle, there's certainly no reason it isn't possible.  The BCM2385 on the Raspberry Pi model 1 has 45 GPIO pins (you'll need 32 to interface with the Gameboy cartridge bus) that are (apparently) designed to operate at 125MHz (although the partial datasheet cautions that they may not run that fast when driving high capacitance outputs ... but you'll probably buffer the output with something like a 74HCT244 or similar which should resolve any such issues), which is slightly better than the 100MHz GPIOs on the STM32F4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real issue is that the Raspberry Pi (at least model 1 versions) are based on a microcontroller chip that is at least partially undocumented.  You'll need to run without a traditional operating system (because the latency introduced by a traditional OS would make it impossible to meet the timing constraints you'll have), but certain parts of the system, including the boot process, rely on functions that are considered proprietary by Broadcom and have (AFAIK) never been publicly disclosed.  This could cause issues during development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may find it easier to work with a different board, e.g. something like a CubieBoard, Orange Pi, or similar.  These are similar in capability to the RPi, but typically use processors that are fully documented, which would make development a bit easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An FPGA would make the process much easier, though, as they're able to handle timing constraints like this much more easily than microcontrollers.  FPGA boards with multiple megabytes of SDRAM can be acquired for $20 or less, and can also be easily interfaced with devices like MMC/SD cards or even hard disks very easily.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-06-29T10:14:45.190" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6905" PostTypeId="2" ParentId="6891" CreationDate="2018-06-29T12:11:58.400" Score="1" Body="&lt;p&gt;I an not answering with certainly (because it was not be making the decisions), however I have given 4 factors that are relevant. With a focus on making the decision today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are at least 4 reasons, however the people that came up with the rule may have only been thinking of the technical reason, and not discovered the others.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Technical reason: something to do with punch cards or monitors or … (see other answers, they can explain this better than me).&lt;/li&gt;&#xA;&lt;li&gt;Typography: Typographers have known for a long time (much longer that the 80 character standard) (200 years for the printing press, and longer for hand written texts), that texts, with more than one line, and with long lines are hard to read. Therefore you should have a single very long line (the cost of finding the start of the next line is very high, but there is no next line), or have multiple lines that are short, probably limit to &amp;lt; 60 characters.&lt;/li&gt;&#xA;&lt;li&gt;Long lines of code tend to be more complex, therefore it is better to keep them short.&lt;/li&gt;&#xA;&lt;li&gt;long lines will wrap as some arbitrary point, on someones screen. Thus making it hard to read. Therefore put in line breaks where they make sense.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The 2nd and 4rd rule are still relevant, however they are not hard limits, as is rule 1. Therefore use them as a guide.&lt;/p&gt;&#xA;" OwnerUserId="9036" LastEditorUserId="9036" LastEditDate="2018-06-30T09:14:26.977" LastActivityDate="2018-06-30T09:14:26.977" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6906" PostTypeId="1" AcceptedAnswerId="6907" CreationDate="2018-06-29T12:20:37.637" Score="3" ViewCount="2040" Body="&lt;p&gt;Software Failure on Commodore Amiga 600 when I insert a floppy in drive. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Software Failure. Press left mouse button to continue. Error: 8000 0004 Task: 000026D0&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Independent from the floppy I insert. Can't identify the error: is it a ROM error, or a floppy drive error? A virus, maybe (even if I think it's not plausible)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XZ5CQ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XZ5CQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8912" LastEditorUserId="11916" LastEditDate="2019-04-22T14:38:59.630" LastActivityDate="2019-04-22T14:38:59.630" Title="Commodore Amiga 600 Software Failure. &quot;Error: 8000 0004 Task: 000026D0&quot;" Tags="&lt;amiga&gt;&lt;floppy-disk&gt;&lt;rom&gt;&lt;amiga-600&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6907" PostTypeId="2" ParentId="6906" CreationDate="2018-06-29T12:37:14.013" Score="8" Body="&lt;p&gt;TL;DR: It's an illegal instruction error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most likely you're trying to boot code for a different CPU (like an 68020 or above).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Details for (early) errors are defined in the &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node065B.html&quot; rel=&quot;noreferrer&quot;&gt;exec/alerts.h&lt;/a&gt; file (*1,2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;80&lt;/code&gt; has the high bit set indicating a machine stoping error and &lt;code&gt;00&lt;/code&gt; indicating CPU errors directly taken from the coresponding &lt;a href=&quot;http://www.cse.dmu.ac.uk/~sexton/WWWPages/exceptions.html&quot; rel=&quot;noreferrer&quot;&gt;exception&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;00&lt;/code&gt; would be the general error/error class (here unspecified)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;0004&lt;/code&gt; means illegal instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 'Task' value is just the address it happened.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Here &lt;a href=&quot;http://www.amigahistory.plus.com/guruguide.html&quot; rel=&quot;noreferrer&quot;&gt;the list&lt;/a&gt; stripped of all programing noise&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Another &lt;a href=&quot;http://www.amibay.com/showthread.php?14510-Amiga-Error-Codes&quot; rel=&quot;noreferrer&quot;&gt;list with more error codes&lt;/a&gt;, mixing various sources&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="3297" LastEditDate="2018-06-29T13:51:54.590" LastActivityDate="2018-06-29T13:51:54.590" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6908" PostTypeId="2" ParentId="6900" CreationDate="2018-06-29T12:45:20.240" Score="3" Body="&lt;p&gt;Afaict laptop power bricks with C14 &quot;IEC&quot; were always unusual. It's an unnecessarily bulky connector for something that only draws a couple of amps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experience laptop power bricks mostly moved from the C8 &quot;figure 8&quot; to the C6 &quot;cloverleaf&quot; inlet. I am not 100% sure of the reason but I suspect that with  increasing laptop power requirements, tightening efficiency standards and concerns that &quot;touch currents&quot; even within the safety limits could potentially cause problems manufacturers decided it was easier to move to a class 1 design.&lt;/p&gt;&#xA;" OwnerUserId="499" LastActivityDate="2018-06-29T12:45:20.240" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6909" PostTypeId="1" AcceptedAnswerId="6919" CreationDate="2018-06-30T18:03:17.743" Score="9" ViewCount="2388" Body="&lt;p&gt;I recently acquired an IBM 5154 EGA monitor that works pretty well. The only minor problem is that the screen is slightly off-center. I decided to take it apart to adjust it, but discovered that many of the capacitors look as though they are leaking, including on the main board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this a leak or is it glue? I know it wasn't uncommon to glue capacitors like these down back then, but I have very little experience with electronics of this vintage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/73Ww9.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/73Ww9.jpg&quot; alt=&quot;capacitor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a little challenging to see in the picture, but whatever this is seems to be dribbling down the side from near the top. Most of the capacitors (at least the larger ones) look similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PSU definitely has a very busted tantalum capacitor, so I'll be recapping most of the PSU, but was hoping to not have to do the rest of the monitor as it's pretty difficult to take apart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; here's another pick from the PSU, after some capacitors were removed...&lt;a href=&quot;https://i.stack.imgur.com/xl6tN.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xl6tN.jpg&quot; alt=&quot;glue?&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7316" LastEditorUserId="7316" LastEditDate="2018-06-30T22:39:54.983" LastActivityDate="2018-07-01T16:45:31.057" Title="How to tell if glue or electrolyte leak from old capacitors?" Tags="&lt;ibm&gt;&lt;crt-monitor&gt;&lt;maintenance&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6910" PostTypeId="2" ParentId="6878" CreationDate="2018-07-01T02:12:26.003" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why?  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;It was cheaper for parts and labour&lt;/strong&gt; to build this way for a global market to standardize designs, parts and inventory for power supplies.  &quot;Economies of Scale&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1970 they used dual primary windings with an insert slider switch to set the power line voltage prior to shipment or 1st installation to select 120/240Vac.  The standard socket is the IEC 60320 C14 socket and mated with any cordset for the country of use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We just called them &lt;strong&gt;IEC cordsets&lt;/strong&gt; and they were also common to electronic lab instruments. &lt;a href=&quot;https://i.stack.imgur.com/v6Dvr.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v6Dvr.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9087" LastActivityDate="2018-07-01T02:12:26.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6911" PostTypeId="1" AcceptedAnswerId="6916" CreationDate="2018-07-01T05:52:01.067" Score="4" ViewCount="670" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JkJXA.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JkJXA.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;When was the external ROM cartridge first used and what home computer was the first to use it?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastActivityDate="2018-09-17T05:18:38.263" Title="What home computer was the first to use a external ROM cartridge?" Tags="&lt;history&gt;&lt;memory&gt;&lt;rom&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6912" PostTypeId="2" ParentId="6911" CreationDate="2018-07-01T06:37:01.667" Score="3" Body="&lt;p&gt;This question is difficult to answer, because &quot;external&quot; and &quot;home computer&quot; are more or less incidental: There were PROM cards used e.g. for BASIC for example for the Altair 8800 as &lt;a href=&quot;http://www.s100computers.com/Hardware%20Folder/MITS/8K%20PROM/8K%20PROM.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;S-100 bus card&lt;/a&gt; (about 1975). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now one could argue if the Altair 8800 was a &quot;home computer&quot;, and if an additional piece of hardware was &quot;external&quot; if the connector is inside that enclosure that makes up the computer, even if it can be opened up easily, but taking the same principle and applying it to &quot;real&quot; home computers and moving the connector to the outside of the box that represents the computer isn't that much intellectual effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And even before &quot;home computers&quot;, (P)ROM cards where used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this (like many things) is a continuous development of a single idea, and it's difficult to say which was &quot;first&quot;.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-07-01T06:37:01.667" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6913" PostTypeId="2" ParentId="6911" CreationDate="2018-07-01T10:14:14.373" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;When was the external ROM cartridge first used and what home computer was the first to use it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That question is problematic in several ways due to its unnecessarily narrow focus. For one, by restricting it to external, it would exclude machines that had their modules covered by a lid (like the Atari 800). Further is tying this to home computers excluding every machine using ROM modules that does not fall into this, and that's the next point, rather fuzzy definition of a home computer.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Now if we rephrase it as&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;quot;What was the first personal computer with an intended use of user pluggable ROM modules/cartridges&amp;quot;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;then we get a level playing field. The constraint as 'personal computer' is meant to restrict the answer to general purpose machines and exclude gaming and other special function devices. The 'intended' is meant that the feature was purposely built in, not later added by using an otherwise existing interface (like a bus connector) for ROM cartridges. The term 'module/cartridge' is meant to avoid haggling about the case format and naming conventions.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Now we get several candidates.&lt;/p&gt;&#xA;&lt;h2&gt;Prelude:&lt;/h2&gt;&#xA;&lt;p&gt;The first mass produced system with ROM cartridges is of course the &lt;em&gt;Channel F&lt;/em&gt; of 1976 followed by the &lt;em&gt;RCA Studio II&lt;/em&gt; in January 1977. While both being special (game) devices, they established the idea of ROM modules. It becomes more interesting when looking at the follow ups &lt;em&gt;Bally Home Library Computer&lt;/em&gt;, later to be known as &lt;em&gt;Bally Astrocade&lt;/em&gt; and &lt;em&gt;Atari VCS&lt;/em&gt; as both where available in a configuration that put them into (somewhat meager) home computers running BASIC. Here the Bally's BASIC setup predates the Atari.&lt;/p&gt;&#xA;&lt;h2&gt;'Real' Computers&lt;/h2&gt;&#xA;&lt;p&gt;1977-79 is also when 'real' computers where presented with an ability or even the necessity to use ROM cartridges&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1977 - The &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/VideoBrain_Family_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;VideoBrain Family Computer&lt;/a&gt;&lt;/em&gt; by Umtech&lt;/li&gt;&#xA;&lt;li&gt;1978 - Exidy's &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Exidy_Sorcerer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sorcerer&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;1979 - The &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/APF_Imagination_Machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;APF Imagination Machine&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;1979 - &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_8-bit_family&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari 400/800&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;1979 - Texas Instruments' &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TI-99/4A&quot; rel=&quot;nofollow noreferrer&quot;&gt;TI-99/4(A)&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The most remarkable here might be the TI, as it whole system design was built around the idea of cartridges. For software (herecalled Solid State Modules/Software), as well as for hardware with it's &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/3/30/Ti994_long.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;chaining expansion Modules&lt;/a&gt;. It would be fair to call it the bonfire of the cartridge age.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Caveat:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;One problem with this list is that it's only made up from machines sold primary in the US market. There have been more outside the US and it might take some additional research here.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-07-01T17:38:24.930" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6914" PostTypeId="2" ParentId="6906" CreationDate="2018-07-01T10:51:46.140" Score="1" Body="&lt;p&gt;That may be a floppy drive defect, since it errors on all your disks. Read errors in the bootblock may cause the illegal instruction.&lt;/p&gt;&#xA;" OwnerUserId="9081" LastActivityDate="2018-07-01T10:51:46.140" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6915" PostTypeId="1" AcceptedAnswerId="6917" CreationDate="2018-07-01T16:20:59.840" Score="21" ViewCount="2389" Body="&lt;p&gt;At the heart of the Atari 2600 was the TIA video chip, designed by Jay Miner, well known for his later work on the chips for the Atari 400/800 and the Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Who manufactured the TIA? As an in-house custom design, it couldn't be simply purchased off the shelf; I haven't seen any mention of Atari owning a chip fab, and hiring such wasn't as routine then as it became in later decades. Did they make a special arrangement with a chip company?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4073" LastEditDate="2018-07-02T12:59:33.217" LastActivityDate="2018-07-03T07:15:11.350" Title="Who made the Atari 2600 TIA video chip?" Tags="&lt;history&gt;&lt;chip&gt;&lt;atari-2600&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6916" PostTypeId="2" ParentId="6911" CreationDate="2018-07-01T16:27:22.063" Score="6" Body="&lt;p&gt;The Atari 400/800 and the original Texas Instruments TI-99/4 were both released at approximately the same time in 1979, and both featured a user-accessible edge connector designed to accept the plug-in ROM cartridges that are familiar to most 1980s gamers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both the Atari and the TI-99/4 clearly meet the common definition of &quot;home computer&quot;, but it should be noted that hardly any of the TI model were sold. The better known and successful TI-99/4A did not arrive until 1981. Also, strict limitations placed on 3rd Party Development by TI meant that very few software titles, including on cartridge, were ever released for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast, the Atari 400/800 went on to be one of the most successful home computers of the 1980s, spawning many compatible, enhanced, and cost-reduced successors. All of the 8-bit Atari home computers retained a slot for user-pluggable ROM cartridges.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-07-01T16:27:22.063" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6917" PostTypeId="2" ParentId="6915" CreationDate="2018-07-01T16:31:55.660" Score="22" Body="&lt;p&gt;The TIA chips were manufactured by a number of different companies, in a number of revisions over the years; &lt;a href=&quot;http://www.ataricompendium.com/faq/vcs_tia/vcs_tia.html&quot; rel=&quot;noreferrer&quot;&gt;the Atari Compendium’s page on the topic&lt;/a&gt; lists:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;American MicroSystems (“AMI” marking on the TIA)&lt;/li&gt;&#xA;&lt;li&gt;IMP&lt;/li&gt;&#xA;&lt;li&gt;Intersil&lt;/li&gt;&#xA;&lt;li&gt;MA (it’s not clear which manufacturer this is)&lt;/li&gt;&#xA;&lt;li&gt;Motorola&lt;/li&gt;&#xA;&lt;li&gt;National Semiconductor&lt;/li&gt;&#xA;&lt;li&gt;OKI Semiconductor&lt;/li&gt;&#xA;&lt;li&gt;Synertek&lt;/li&gt;&#xA;&lt;li&gt;TSU&lt;/li&gt;&#xA;&lt;li&gt;United Microelectronics Corp&lt;/li&gt;&#xA;&lt;li&gt;UN&lt;/li&gt;&#xA;&lt;li&gt;VTI&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;plus some others with no markings. (See the detailed photographs on the Atari Compendium.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not all of these chips were manufactured under contract with Atari; some of them were used in third-party clones, such as the Coleco Gemini (the VTI chips were all used in Coleco systems).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-07-01T16:44:44.810" LastActivityDate="2018-07-01T16:44:44.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6918" PostTypeId="2" ParentId="6915" CreationDate="2018-07-01T16:38:49.713" Score="7" Body="&lt;p&gt;There were 12 different versions of the TIA, and it was manufactured by a whole host of different manufacturers, some of which are well-known. The manufactures included AMI, Synertek, Motorola, and National Semiconductor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;http://www.ataricompendium.com/faq/vcs_tia/vcs_tia.html&quot; rel=&quot;noreferrer&quot;&gt;article&lt;/a&gt; has lots of details, including pictures of the many versions of the TIA IC with many different manufacturers' stamps.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-07-01T16:38:49.713" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6919" PostTypeId="2" ParentId="6909" CreationDate="2018-07-01T16:45:31.057" Score="8" Body="&lt;p&gt;There are basically two distinct &quot;tell-tales&quot; for electrolytic capacitor leakage:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Bulging pressure release plates at the top of the capacitor, with possible signs of leakage emanating from there.&lt;/li&gt;&#xA;&lt;li&gt;Fishy odor.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Absent both of those indicators, I'm inclined to think the staining of the PCB is from another source. Also, the electrolyte from the caps is highly corrosive to the PCB. If you don't see anything that looks like corrosion, then you are lucky, and also should not blame the stain on electrolytic leakage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another point worth noting is that caps that have leaked their electrolyte don't retain their rated capacitance. Naturally, that leads to symptoms of device failure. If you have a device that is working perfectly, and don't see any evidence of leaky caps, then removing and replacing caps is just a preventative measure - Many previously working retrocomputers have been rendered non-functional by preemptive re-capping using the wrong tools and technique.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-07-01T16:45:31.057" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6920" PostTypeId="1" AcceptedAnswerId="6922" CreationDate="2018-07-01T20:44:59.720" Score="7" ViewCount="4596" Body="&lt;p&gt;I've come across a couple of projects that manage to get VGA working with the Z80 and similar CPUs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://quinndunki.com/blondihacks/?p=1121&quot; rel=&quot;noreferrer&quot;&gt;Veronica&lt;/a&gt; (6502 CPU, VGA signal generation by AVR)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://tldr.fi/2014/09/27/zc160-vga-adapter1/&quot; rel=&quot;noreferrer&quot;&gt;ZC160&lt;/a&gt; (Z80 CPU, VGA signal generation by GAL)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ciernioo.wordpress.com/tag/z80-vga/&quot; rel=&quot;noreferrer&quot;&gt;c-Z80&lt;/a&gt; (Z80 CPU, VGA signal generation by AVR)&lt;/li&gt;&#xA;&lt;li&gt;and many others by searching for &quot;VGA + cpuName&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What I can't seem to understand is how the various adapters talk with the CPU. If we assume that VGA signal generation is a solved problem handled by a black box, how do you connect this black box to the CPU?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does one use the &lt;code&gt;INT&lt;/code&gt; and/or &lt;code&gt;IOREQ&lt;/code&gt; pins? The databus? Is most of the talking through assembly code using the &lt;code&gt;IN&lt;/code&gt; and &lt;code&gt;OUT&lt;/code&gt; commands? &lt;/p&gt;&#xA;" OwnerUserId="6672" LastActivityDate="2020-06-04T11:21:03.750" Title="How can a Z80/8080/6502 use VGA?" Tags="&lt;z80&gt;&lt;6502&gt;&lt;8080&gt;&lt;vga&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6921" PostTypeId="2" ParentId="6920" CreationDate="2018-07-01T21:39:59.963" Score="7" Body="&lt;p&gt;The Veronica uses an 8-bit memory mapped port to send commands from 6502 CPU to the AVR that generates VGA output. Commands can only be sent during the blanking periods and the port ca be read by the 6502 CPU to find out when that is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZC160 uses a second Z80 in combination with custom programmed GALs to generate the VGA output.  A comment says that it was planned for the main Z80 to communicate to this second Z80 through an shared 8K memory region, but the blog was never updated to indicate whether this was actually implemented.  The shared 8K region would also be only available during blanking periods and the main CPU would be sent an NMI when this occurs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The c-Z80 uses large range of I/O mapped ports to send commands to the ATMega. Each port represents a different 40x33 text character cell. Writing an ASCII character value using an OUT instruction to one of these ports displays that character at the corresponding screen position.  The c-Z80 VGA adapter can only process these writes during blanking intervals and so the Z80 CPU's /WAIT signal is used to prevent it from writing anything else until it ready again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly none of these VGA implementations use the same shared memory frame buffer solution most classic 8-bit retrocomputers used, or for that matter that modern video cards use.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2018-07-01T21:39:59.963" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6922" PostTypeId="2" ParentId="6920" CreationDate="2018-07-01T21:46:02.653" Score="13" Body="&lt;p&gt;Preface: The question sounds as if you're missing a basic understanding of interfacing and communication between different chips/systems. At the core it can't be answered without a whole course in digital electronics 101. So I can only try to give some hints to understand the various concepts presented.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I've come across a couple of projects that manage to get VGA working with the Z80 and similar CPUs [...] and many others by searching for &quot;VGA + cpuName&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To start with (*1), the term VGA is &lt;em&gt;very&lt;/em&gt; loosely used here in describing something with a resolution between 2000 and 500 lines at a line rate of (or near) 31.5 kHz with a horizontal resolution between ~300 and 700 pixels. So roughly what can be displayed on a VGA screen&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of the projects mentioned is using a 'real' VGA as the title of your question may imply. Even more, the term VGA is by no means meant to describe the interface toward the CPU or display capabilities as of a genuine VGA - and especially not tied to the 640x480 resolution that usually is assumed when speaking of a VGA. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What I can't seem to understand is how the various adapters talk with the CPU. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Like always via a fitting interface. Your three examples use different techniques:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A 'real' memory interface on the ZC160, where real RAM is filled by the CPU and outputted via some memory to screen interface&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A 'virtual' memory interface on the c-Z80, where circuitry is mapped into I/O space to take address bus information as text coordinates and data bus content as characters to be displayed. How this is done is hidden within the 'VGA' controller, read the AVR.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A single write-only port on the Veronica to send commands to the AVR, which again manages everything on its own - just this time with some external memory to store high resolution graphics (*2) &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It is easy to think of many more interfaces, not least IBM's own VGA with I/O registers &lt;em&gt;and&lt;/em&gt; memory planes - which again can be handled via a quite varying style of interfaces. After all, that's what a system designer does: inventing interfaces between chips to get the job done.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does one use the INT and/or IOREQ pins?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;None of these, but again, it can be done if it fits the design.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The databus?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Might be reasonable for most, but the c-Z80 already shows that the address bus can be used as well - or even instead.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is most of the talking through assembly code using the IN and OUT commands?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If the video interface is located in I/O address space then it will be IN and OUT instructions (if that CPU has some, that is). If it's in memory address space, then it will rather be a series of store (and maybe load) instructions. Whatever fits the interface.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Bottom line: There is no general description how all thinkable video interfaces work. You need to look at each and figure it out - and then decide if it's the right one for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all, coming up with a clever solution to handle VGA-like output on a rather restricted 8-bit system &lt;strong&gt;is&lt;/strong&gt; the real fun about designing such a system - that's what tickles the engineer sense of a hardware nerd.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - To really start with, a 6502 isn't anything similar to a Z80 - they both define opposite ways to build a 8 Bit CPU - especially bus wise, as the Z80 follows Intel's design, while the 6502 features a Motorola bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The AVR on the c-Z80 only does a character-based 40x33 display.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-02T12:39:00.527" LastActivityDate="2019-10-02T12:39:00.527" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6923" PostTypeId="2" ParentId="6920" CreationDate="2018-07-02T22:39:56.617" Score="2" Body="&lt;p&gt;The Amstrad PCW16 has a display that's VGA-compatible at a hardware level. The built-in mono monitor shows the green channel; there's also silkscreening on the circuit board for a DE15 VGA connector. At least one hobbyist has populated it so it's known to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the Z80's point of view, there's a table of 480 words at a fixed address (0x3C00 in RAM bank 3) giving, for each line, its start address and colour depth: mono 640 pixels, 4-colour 320 pixels or 16-colour 160 pixels.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2018-07-02T22:39:56.617" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6924" PostTypeId="1" AcceptedAnswerId="6927" CreationDate="2018-07-03T00:32:10.017" Score="5" ViewCount="796" Body="&lt;p&gt;When IBM developed the PC, they famously chose a bunch of off-the-shelf components. Besides making the machine relatively easy to clone, another effect of this was it used a lot of chips and board space. Consider that a usable IBM PC system with peripherals needed 3 to 4 expansion cards for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Video adapter&lt;/li&gt;&#xA;&lt;li&gt;Floppy and/or HD controller&lt;/li&gt;&#xA;&lt;li&gt;Serial and Parallel ports&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Effectively doubling the amount of board space over and above the already large slotted motherboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is what was the first 100% PC compatible with these basic I/O features built-in on the motherboard? Also, how did they &quot;fit it all&quot; given the legacy of off-the-shelf only components?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: If the answer is a PC with no ISA slots, then I'd also like to know which was the first that also retained expandability by including some slots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE 2 (Trying to define &quot;100% compatibility&quot; more pedantically): To my mind, 100% compatibility just means &quot;all the same software media&quot;. So the strict requirement is really binary compatibility, and even software that bypasses BIOS and &lt;em&gt;bangs the hardware directly&lt;/em&gt;, still works as expected. The secondary requirement would be ISA slots, if it has slots at all, to facilitate off-the-shelf hardware from the general PC expansion card market. So, yeah, you can buy software and hardware for the PC and it works just fine with your 100% compatible clone... This was the standard consumer's aspiration at the time, I think.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-07-03T15:06:01.937" LastActivityDate="2019-02-09T19:31:20.713" Title="What was the first integrated PC compatible computer?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;ibm-pc&gt;" AnswerCount="3" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="6925" PostTypeId="2" ParentId="2962" CreationDate="2018-07-03T04:49:01.583" Score="3" Body="&lt;p&gt;It's rather strange to me to hear people claim there are no atari monitors...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is, I had an 800XL in 1990. (I have one now too, but it's not the same one.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be more precise I had two of them (both 800XL), a bunch of games, and some accessories. (about 400 games, roughly)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two 1010 program recorders, a 1020 plotter, Atari touch tablet....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And an atari branded monitor!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to point out that this was in the Netherlands, but I'm quite certain the monitor was atari branded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For good measure it was a green monochrome monitor. (though obviously the 800XL has no chroma output anyway, so that makes sense. - a colour monitor for an unmodified XL machine would be pointless.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is, I used this monitor exclusively back then, to the point that up until recently I'd never actually seen a single atari game in anything other than monochrome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, what this monitor actually is, I couldn't tell you retrospectively. (I no longer own it, and I was about 7 when I did. My memory for stuff like model numbers simply isn't that good. XD)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, unless my memory is playing some very serious tricks on me, this means at least one dedicated atari monitor exists for their 8 bit line.&#xA;(monochrome with green phosphors) - given the systems I had it with, and all the other accessories I got with those systems, it's reasonable to assume this is a monitor that dates to the same period as the XL computers, though I have no proof of this.&#xA;(it also helps that the monitor housing, as far as I remember was beige with dark brown accents - in other words, the same colour scheme as the XL machines themselves.)&#xA;Unfortunately, unless I somehow get lucky and find a reference to it somewhere else, I guess I can't particularly prove it exists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, unless you find someone who has kept things for 30-40 years, it's a bit difficult to prove certain things even existed. (Especially if they're rare or obscure)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update:&#xA;As some extra information, I'll describe the monitor, and see if it seems at all familiar to anyone. Keep in mind I have no references for it. (pictures, model numbers, etc.). This is entirely going off my memory of things nearly 28 years later. As such it may not be entirely accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The display was monochrome green and the overall size was very similar to a 34 cm television we had at the same time. (suggesting a ~13 inch display, but obviously 12 and 14 are in the same bounds.)&#xA;It had audio capabilities, though I don't remember where the speaker was placed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the case was an cream colour, similar to an XL machine, with at least part of the front section and bezel being a darkish colour (in my memory it's the same shade as the brown on an XL machine)&#xA;All the controls were along the bottom of the display.&#xA;On the far right side you had either two or three knobs each about 2-3 cm across, where only the bottom half of the knob protrudes from underneath the case.&#xA;The rightmost knob was either brightness or volume (can't remember which), but also the power switch; From the off position, you rotate it a little, there's a rather strong 'click', and the monitor switches on. All further rotation controls brightness (or volume?). If it was two knobs then the other one was whatever the main knob wasn't. (eg if the main knob was volume, the other is brightness and vice versa.).&#xA;The third knob, if it was there, was contrast.&#xA;These knobs were in the darkish, brown colour.&#xA;In the centre, you had a fold down panel, just like a lot of CRT monitors and TV's had. (push the right hand side to release, then fold it down) This was, I believe beige. Right in the middle of it you had a small atari logo in rainbow colours.&#xA;If you opened the panel there were more rotating knobs, though these were long and thin.&#xA;I can't remember how many, but at a minimum it had horizontal and vertical hold controls. (and if there wasn't a third large knob, then contrast was in here too.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I said, my memory of things is a little dubious, but that's what I remember of it. If this sounds at all like a monitor anybody has seen, I'd be curious to know what you think it may have been...&#xA;I'm sure I'd know it if I saw it, but so far I haven't seen any pictures of atari monitors that look like what I remember.&#xA;If you &lt;/p&gt;&#xA;" OwnerUserId="9093" LastEditorUserId="9093" LastEditDate="2018-07-21T23:21:09.733" LastActivityDate="2018-07-21T23:21:09.733" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6926" PostTypeId="2" ParentId="6924" CreationDate="2018-07-03T05:38:11.950" Score="2" Body="&lt;p&gt;My guess is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Toshiba_T1100&quot; rel=&quot;nofollow noreferrer&quot;&gt;Toshiba T1100&lt;/a&gt;, released in April 1985. (&lt;a href=&quot;http://minuszerodegrees.net/manuals/Toshiba/Toshiba.htm#1100&quot; rel=&quot;nofollow noreferrer&quot;&gt;Another link&lt;/a&gt;.) The system board contains the CPU, memory, graphics controller, floppy controller, and printer port. Memory expansion and serial I/O cards were optional. It ran MS-DOS and is &quot;&lt;a href=&quot;http://minuszerodegrees.net/manuals/Toshiba/Other/Toshiba%20T1100%20-%20Information.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compatible with most software written for the IBM PC/XT using a color graphics adapter (CGA) display&lt;/a&gt;.&quot; However, the T1100 requires its own custom version of MS-DOS. (See the &lt;a href=&quot;http://www.minuszerodegrees.net/manuals/Toshiba/Other/Toshiba%20T1100%20-%20Maintenance%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-07-03T14:24:23.203" LastActivityDate="2018-07-03T14:24:23.203" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="6927" PostTypeId="2" ParentId="6924" CreationDate="2018-07-03T05:55:05.447" Score="4" Body="&lt;p&gt;A candidate for the first integrated PC-compatible &lt;em&gt;with expansion slots&lt;/em&gt; is &lt;a href=&quot;http://oldcomputer.info/gallery.php?p=Museum/PC/Amstrad_PC1512&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Amstrad PC1512&lt;/a&gt;, released in 1986. Its original configuration, with only floppy drives, didn’t use any expansion card; models with hard drives had a controller card (in fact the drive itself was usually mounted on the card). It had a number of custom chips (Amstrad were used to making their own chips, as demonstrated with the CPC range).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amstrad continued this trend in later models (PC1640, PPC512, PC20, PC2086 etc.).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-07-03T09:22:37.557" LastActivityDate="2018-07-03T09:22:37.557" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6929" PostTypeId="2" ParentId="6924" CreationDate="2018-07-03T12:53:53.233" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;My question is what was the first 100% PC compatible with these basic I/O features built-in on the motherboard?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This question is a bit tricky, as it adds several constrains. For example requesting a parallel port isn't all that logical, as back in the early 1980s the race for the 'right' printer interface wasn't as decided as 10 years later. But let's see the candidates.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.seasip.info/VintagePC/sanyo.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sanyo MBC-550&lt;/a&gt; of spring 1982 - calling it compatible might be borderline. It did feature parallel port, floppy controller and graphics direct on board, with the graphics partial CGA compatible. It did not feature an ISA bus, but a custom pin header for up to two stacked I/O (one offer was a true CGA compatible board). Missing an on board BIOS, software compatibility due the disk loaded BIOS was poor at first, but improved quite a lot later on. Another hurdle for full compatibility would be the slower CPU speed of 3.58 MHz.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Columbia_Data_Products&quot; rel=&quot;nofollow noreferrer&quot;&gt;Columbia Data Products MPC-1600&lt;/a&gt; of June 1982 - while being a true compatible and including parallel and serial interfaces and floppy controller on board, CRT was still handled via a standard ISA card.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Columbia Data Products MPC-VP in 1983 followed the same scheme, just this time portable.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Olivetti_M24&quot; rel=&quot;nofollow noreferrer&quot;&gt;Olivetti M24&lt;/a&gt; in 1983 - while highly compatible, it wasn't a 100% at least due it's 7 MHz 8086. Also the design wasn't a single PCB but kind of a stacked one with the main board on the bottom, the I/O board on top, both connected via the video board angled at 90 degrees. While it's not a single PCB, they are no separate available add-on cards either.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Compaq_Portable&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compaq Portable&lt;/a&gt; in March 1983 - a true compatible despite a somewhat different graphics 'card' design combining features of CGA and MDA. Notably the first with a BIOS as compatible as possible. The Compaq Deskpro moved that concept to the desktop.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PCjr&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM PCjr&lt;/a&gt; in March 1983 - while integrating many features like joystick ports, sound and a serial port, the floppy controller was still on a separate board - one of the bad design decision around the Peanut - even though not necessarily the reason for its failure.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And then there is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Tandy_1000&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tandy 1000 series&lt;/a&gt; which offered all in one machines in &lt;a href=&quot;https://ancientelectronics.wordpress.com/tag/tandy-1000/&quot; rel=&quot;nofollow noreferrer&quot;&gt;many configurations&lt;/a&gt;, starting in late 1984.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Before deciding, honourable mentions, due being less than compatible, should got to&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sirius_Systems_Technology&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sirius 1&lt;/a&gt; of 1981 - at the same time as the PC this machine already included a faster CPU, more RAM, &lt;a href=&quot;http://oldcomputers.net/victor-speech.mp3&quot; rel=&quot;nofollow noreferrer&quot;&gt;HD Audio&lt;/a&gt;, 800x400 graphics and 1.2 MB disk drives.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rainbow_100&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEC Rainbow 100&lt;/a&gt; of 1982 - as an example for ambition and failure of a large player&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Apricot_PC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apricot PC&lt;/a&gt; of 1983 - maybe the slickest of all (early) PC-alikes. Especially with the later F1 and Portable (*1,2)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PC1512&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amstrad PC1512&lt;/a&gt; of 1986, &lt;a href=&quot;https://www.seasip.info/VintagePC/prodestpc1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Olivetti Prodest PC1&lt;/a&gt; of 1988 and &lt;a href=&quot;http://www.spacereh.de/hc/ams/scheuropc.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Schneider EuroPC&lt;/a&gt; of 1988 as examples of later consumer/home computer orientated all in one PC-alikes&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, &lt;strong&gt;who was the first&lt;/strong&gt; to fit all these criteria?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hard to tell. Personally I'd vote for the &lt;strong&gt;CDP MPC-1600&lt;/strong&gt; by fulfilling the 100% criteria and integrating everything except the video card, which does make sense. Going by the wording it must be the &lt;strong&gt;Compaq Portable&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also, how did they &quot;fit it all&quot; given the legacy of off-the-shelf only components?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That wasn't a big deal, considering that the original PC was neither high integrated nor really dense packed. Much of the circuitry could have already back then improved by PALs and GALs without increasing the cost. The Sirius 1, debut the same time as the PC, is a prime example what was possible.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Most notably here the usage of an 8089 IO-processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - To some degree the later &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Archimedes&quot; rel=&quot;nofollow noreferrer&quot;&gt;Acorn Archimedes&lt;/a&gt; continued that design.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-02-09T19:31:20.713" LastActivityDate="2019-02-09T19:31:20.713" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="6930" PostTypeId="1" AcceptedAnswerId="6931" CreationDate="2018-07-03T13:47:17.640" Score="4" ViewCount="403" Body="&lt;p&gt;In the early days of the IBM PC, it was offered with a choice of four different operating systems including PC-DOS for $40 or CP/M for $240. Customers looked at what appeared to be essentially equivalent products, looked at the sixfold price difference, and we all know the rest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 version of CP/M, which did not have such competition, was much more popular. What was its retail price? Was it also $240, or a different figure, or was a separate deal with a separate price made for each hardware platform?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-07-04T16:18:44.137" Title="What was the retail price of CP/M?" Tags="&lt;history&gt;&lt;cp-m&gt;&lt;cost&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6931" PostTypeId="2" ParentId="6930" CreationDate="2018-07-03T14:18:33.833" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] operating systems including PC-DOS for $40 or CP/M for $240. Customers looked at what appeared to be essentially equivalent products, looked at the sixfold price difference, and we all know the rest.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that it was also about a new machine with a new CPU. There was no existing software base, except for conversions, usually offered for both OSes. In the 8080/Z80 World CP/M was (almost) a monopoly, buying anything else would have needed a very special reason - only vendor lock in like with TRS-DOS did feature a limited market.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Z80 version of CP/M, which did not have such competition, was much more popular. What was its retail price? Was it also $240, or a different figure, or was a separate deal with a separate price made for each hardware platform?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The later one. Or more correct, CP/M was available in two flavours.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Als a 'pure' package from DRI, targeted at system builders (and thus hobbyists), with just the OS and a sample BIOS in source to be adapted to whatever machine the buyer had (in mind). This version came with several binders of documentation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As a machine specific version sold with a computer. Documentation was, if at all, rather specific.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Well, maybe one can include a third, intermediate one:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A version preconfigured for rather standard configurations often sold with a floppy controller that needed just minor changes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;By flipping through several 1979 issues of Kilobaud a price rage arround 300 USD for a genuine CP/M can be found, while machine specific CP/M can be as cheap as 50 USD. Generic versions sold with floppy controllers ranged around 70 USD.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-07-04T16:18:44.137" LastActivityDate="2018-07-04T16:18:44.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6932" PostTypeId="1" AcceptedAnswerId="6933" CreationDate="2018-07-03T16:02:58.260" Score="15" ViewCount="3051" Body="&lt;p&gt;The standard for business computing in the seventies and eighties was 80 columns, and CP/M was primarily for business computing, so it's unsurprising that CP/M typically ran in 80 columns. For example, the Commodore 128 was nominally capable of running it in 40 column mode, but actually just used horizontal scrolling to simulate an 80 column display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was CP/M ever used, in practice rather than just as a tech demo, in less than 80 columns? Were any computers ever designed with less than 80 columns to run CP/M?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-01-10T13:03:45.207" Title="CP/M in less than 80 columns" Tags="&lt;history&gt;&lt;display&gt;&lt;cp-m&gt;" AnswerCount="7" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6933" PostTypeId="2" ParentId="6932" CreationDate="2018-07-03T16:41:40.443" Score="18" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was CP/M ever used, in practice rather than just as a tech demo, in less than 80 columns? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most prominent here may be the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple II&lt;/a&gt; with &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft#Logo&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micro- Soft's&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Z-80_SoftCard&quot; rel=&quot;nofollow noreferrer&quot;&gt;Softcard&lt;/a&gt;. While most users did use it with an additional 80 column card, it also worked well using the basic 40 character display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all, CP/M itself wasn't tied to any display size or a CRT at all. Various software in contrast did require a certain minimal display type, but that's much like graphics software requiring some VGA feature and therefore, while being a plain MS-DOS program, not able to perform on a PC without VGA (or better).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M itself didn't provide any information about the availability of a CRT or its dimensions or modes. BDOS only offered very basic calls to output a character. In so far its handling of a terminal is much like with Unix, where as well all screen handling was part of an application. Unlike Unix, CP/M never developed a standard solution, so many programs, including all standards like Wordstar et. al., included their own way to configure and command sequences to handle screen dimensions.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Were any computers ever designed with less than 80 columns to run CP/M?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Answering this might be fuzzy, as CP/M was per definition not meant for a special computer, nor were most computers running CP/M designed for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take the TRS-80 Model one. While maybe not 'designed' for anything that hasn't been produced by Tandy, it also needed a modification (ROM relocation) to run CP/M at all. Still, CP/M was not only available but also worked fine using the &lt;a href=&quot;http://www.trs-80.com/wordpress/cpm/&quot; rel=&quot;nofollow noreferrer&quot;&gt;64x16 display&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/576/wilson&quot;&gt;Wilson&lt;/a&gt; also &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6937/6659&quot;&gt;reminded us&lt;/a&gt; of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Osborne_1#Hardware&quot; rel=&quot;nofollow noreferrer&quot;&gt;Osborne 1&lt;/a&gt;, a computer build for the use of a software bundle based on CP/M. It originally featured a 52x24 display showing a window of a 128x32 virtual screen. All applications were, by default, configured for a 52x24 screen and, where useful, enhanced to take advantage of the virtual screen. For example, Wordstar and Supercalc did move the screen when the cursor reched the left or right border. When the document was set to be wider then 56 columns that is. Handling was done via a set of escape sequences &lt;em&gt;or&lt;/em&gt; 'special' (read: non-CP/M) BIOS calls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Short time after is introduction an update called &lt;em&gt;Screen-Pac&lt;/em&gt; became available to show 80 or 104 columns as well, on an external CRT. To make it run a new (patched) BIOS had to be installed via &lt;code&gt;SYSGEN&lt;/code&gt;. The new BIOS offered an additional call to set the visible screen size as well as the virtual.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="3481" LastEditDate="2018-12-20T21:21:36.133" LastActivityDate="2018-12-20T21:21:36.133" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6934" PostTypeId="2" ParentId="6932" CreationDate="2018-07-03T17:15:37.340" Score="8" Body="&lt;p&gt;CP/M plus works nicely on a ZX Spectrum +3 in the following terminal modes (it emulates a DEC VT52 Terminal in CP/M Plus using its very limited screen resolution)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mode 0: 24 x 32 screen (23 x 32 if status line enabled)&lt;/li&gt;&#xA;&lt;li&gt;Mode 1: 24 x 51 screen (23 x 51 if status line enabled)&lt;/li&gt;&#xA;&lt;li&gt;Mode 2: (jump)scrolling 24 x 80 screen (23 x 80 if status line enabled). This mode makes me a bit nervous, especially with programs that tend to move the cursor around a lot (this mode jump-scrolls the displayed part of the emulated 24x80 screen to the area that holds the cursor automatically, so I don't normally use it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;CP/M was never designed with specific terminal capabilities in mind. If at all, it was the &lt;strong&gt;applications&lt;/strong&gt; that couldn't cope with certain terminals and (lacking) terminal capabilities. Most CP/M applications can, however, (within limits) be adapted to smaller terminal sizes. Turbo Pascal or WordStar work nicely on the ZX Spectrum, for example, after some fiddling with their terminal setup programs.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-07-03T17:21:04.057" LastActivityDate="2018-07-03T17:21:04.057" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6935" PostTypeId="2" ParentId="6410" CreationDate="2018-07-04T05:21:57.800" Score="3" Body="&lt;p&gt;There are excellent answers in this thread.&lt;/p&gt;&#xA;&lt;p&gt;The clearest answer is that &lt;code&gt;nil&lt;/code&gt; cannot be a value because it has no type. Whereas &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt; are understood to be values of enumerated, i.e.,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;type boolean = (false, true);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What type of pointer would &lt;code&gt;nil&lt;/code&gt; be an instance of? Recall pointer definitions are:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;type p = ^integer;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;nil&lt;/code&gt;, if it is a value, is compatible with all pointer types.&lt;/p&gt;&#xA;&lt;p&gt;Second, there is no other fixed value that can be assigned to pointers. In the example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;type p = ^integer;&#xA;&#xA;var ip, xp: p;&#xA;&#xA;new(ip);&#xA;&#xA;xp := ip;&#xA;ip := nil;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Thus we can see:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;nil&lt;/code&gt; is typeless.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;nil&lt;/code&gt; is the only pointer value that is fixed and not generated at runtime.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So &lt;code&gt;nil&lt;/code&gt; does not behave like any other compiler constant, so it is not one, but is a keyword.&lt;/p&gt;&#xA;" OwnerUserId="9099" LastEditorUserId="1981" LastEditDate="2021-02-19T08:28:22.507" LastActivityDate="2021-02-19T08:28:22.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6936" PostTypeId="2" ParentId="3296" CreationDate="2018-07-04T05:47:43.717" Score="-3" Body="&lt;p&gt;Because break and continue are a form of goto. To see why lets review basic Pascal structures a bit (at least those that would be applicable to break and continue):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;while x do y;&#xA;   repeat y until x;&#xA;   for i := s to e do;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking one of them:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;while x do begin&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  s1;&#xA;  s2;&#xA;  s3;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;end;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using C breaks you could break anywhere in that sequence:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;while x do begin&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  break;&#xA;  s1;&#xA;  break;&#xA;  s2;&#xA;  break;&#xA;  s3;&#xA;  break;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;end;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can substitute &quot;continue&quot; for &quot;break&quot; anywhere in the above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All Pascal structured statements have the characteristics that:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;They have a single point of control entry.&lt;/li&gt;&#xA;&lt;li&gt;They have a single point of control exit.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thus with break and continue you change &quot;single point of exit&quot; to (basically) anywhere. Its only limitation is that it must be contained within the loop. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Structured programming is based on the idea that with a few simple single entry/single exit constructs you can write any program. It sometimes is not easy, which is why break and continue exist in C and other languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the above example is trivial, but imagine going through a loop that spans a page or more. It can be a challenge to find what is or is not executed within the loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, compilers can also have difficulty unwinding the different paths through the code, and what the compiler can not easily determine means that it cannot also readily optimize for it.&lt;/p&gt;&#xA;" OwnerUserId="9099" LastActivityDate="2018-07-04T05:47:43.717" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6937" PostTypeId="2" ParentId="6932" CreationDate="2018-07-04T07:34:57.393" Score="7" Body="&lt;p&gt;The Osborne 1 has a 56 column screen. Plenty of applications ran really well on that computer; M-BASIC, CHESS, are two I remember. I think Wordstar ran on the Osborne 1 as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer actually has 128 columns of addressable text. The user can scroll back and forth with &lt;kbd&gt;ctrl&lt;/kbd&gt;+&lt;kbd&gt;arrow keys&lt;/kbd&gt;. This feature was maybe not used that much. Most applications stayed in the 56 columns.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-07-04T07:34:57.393" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6938" PostTypeId="2" ParentId="6932" CreationDate="2018-07-04T15:48:20.223" Score="5" Body="&lt;p&gt;Another system which ran CP/M in other than 80 columns was the Exidy Sorcerer.  It had a monochrome text output that was 64x30.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;rwallace mentioned the C128 in the question, referring to a scrolling 80-column mode on a screen physically 40 columns wide.  I was not even aware of this mode.  Since my monitor supported both composite and digital RGB format, I'd use the latter whenever not in C64 mode.  This normally gave an 80x25 text resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I say &quot;normally&quot; because a knowledgeable user could program the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_8563&quot; rel=&quot;noreferrer&quot;&gt;8563 VDC&lt;/a&gt; (RGBI video chip) to give custom resolutions such as 100 columns.  If you hacked your 128 to double the 8563 video RAM, you could even run it at text resolutions such as 100x50.  Since CP/M doesn't really care about screen resolution (as far as it knew it was talking over a serial port to a video terminal), using such a large screen worked fine.  IIRC, even outside of CP/M, the C128-mode screen handled the larger size just fine as well.  I don't remember encountering software assumptions that the screen was exactly 80 columns wide.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2018-07-04T15:48:20.223" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6939" PostTypeId="2" ParentId="6932" CreationDate="2018-07-04T16:36:07.577" Score="3" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/VDM-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;original video displays&lt;/a&gt; for S-100 machines were normally 64x24 or 25. Practically every machine used this mode. 80-columns did not appear until well after CP/M was widely used.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-07-04T16:36:07.577" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6940" PostTypeId="1" AcceptedAnswerId="6942" CreationDate="2018-07-04T20:42:40.690" Score="8" ViewCount="3147" Body="&lt;p&gt;The ZX Microdrive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UhjlX.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;ZX Microdrive&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UhjlX.jpg&quot; alt=&quot;ZX Microdrive&quot; title=&quot;ZX Microdrive&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is well known that the Microdrive was introduced for the ZX Spectrum along with &lt;a href=&quot;https://www.oldcomputr.com/sinclair-zx-interface-1-and-zx-microdrive-1983/&quot; rel=&quot;noreferrer&quot;&gt;ZX Interface 1&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iRwRQ.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;ZX Interface 1&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iRwRQ.jpg&quot; alt=&quot;ZX Interface 1&quot; title=&quot;ZX Interface 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, who came up with the idea and the design? Was it Sinclair themselves, or did they steal/license the idea from someone else?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember the &lt;strike&gt;&lt;em&gt;wafers&lt;/em&gt;&lt;/strike&gt;&lt;sup&gt;1&lt;/sup&gt; cartridges being rather unreliable, and flimsy and prone to having tape spill out of them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7LksZ.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;Wafer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7LksZ.jpg&quot; alt=&quot;Wafer&quot; title=&quot;Wafer&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently, according to this article, &lt;a href=&quot;http://www.nostalgianerd.com/sinclair-ql&quot; rel=&quot;noreferrer&quot;&gt;Sinclair QL (Quantum Leap) System Review,&lt;/a&gt; Samsung took over the manufacture, which I didn't know previously, and then they became more stable:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Now, although these Microdrives were far cheaper than the new, fangled floppy disks, especially if you lack Alan Sugar’s haggling skills, they were notoriously unreliable, until Samsung took over their manufacture.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why were they chosen, and/or designed in the first place? Just the idea of them sounds terrible. If they were licensed, then surely Sinclair could see that they weren't particularly good (especially when compared to the established 5.25&quot; floppy - which were bad enough) in the build up to the license agreement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If they dreamed up the idea internally and designed them themselves, then it is a bit more understandable, and maybe they did not turn out as well as had been expected.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Wafer was the term used by Exotron to describe the media for the &lt;em&gt;Stringy floppy&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="202" LastEditorUserId="202" LastEditDate="2018-07-04T22:11:28.713" LastActivityDate="2018-07-05T17:55:08.393" Title="Who designed the Sinclair ZX Microdrive and why?" Tags="&lt;zx-spectrum&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6941" PostTypeId="2" ParentId="6940" CreationDate="2018-07-04T21:30:22.557" Score="14" Body="&lt;p&gt;It was designed in-house.  The tech was chosen to be inexpensive (~1/10 the cost of a floppy drive).  Unfortunately this made the drives unreliable (stretching tape, tape wear, etc.).  Attempting to get an already marginal technology to work with some semblance of reliability led to a very lengthy development process.  For the full story see &lt;a href=&quot;https://www.theregister.co.uk/2013/03/13/feature_the_sinclair_zx_microdrive_story&quot; rel=&quot;noreferrer&quot;&gt;this article&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastActivityDate="2018-07-04T21:30:22.557" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6942" PostTypeId="2" ParentId="6940" CreationDate="2018-07-04T22:11:28.257" Score="14" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;However, who came up with the idea and the design? Was it Sinclair themselves, or did they steal/license the idea from someone else?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Endless loop audio cassettes, or cartridges as they were called, were already an old and proven technology, way before Sinclair did the Spectrum. Evidently the first audio storage device to use this principle was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Tefifon&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tefifon&lt;/a&gt; of 1936. Here, an endless plastic ribbon carried grooves much like a record (vinyl) with a single groove going around the ribbon several times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first commercial successful magnetic tape version was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Fidelipac&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fidelipac&lt;/a&gt; of 1954, playing mono, which evolved into the &lt;a href=&quot;https://en.wikipedia.org/wiki/Stereo-Pak&quot; rel=&quot;nofollow noreferrer&quot;&gt;Muntz Stereo-Pak&lt;/a&gt; and finally into the well-known (in the US) &lt;a href=&quot;https://en.wikipedia.org/wiki/8-track_tape&quot; rel=&quot;nofollow noreferrer&quot;&gt;8-Track&lt;/a&gt; of 1964. There were many similar developments, like the &lt;a href=&quot;https://en.wikipedia.org/wiki/PlayTape&quot; rel=&quot;nofollow noreferrer&quot;&gt;Playtape&lt;/a&gt; of 1966. Even much later, when the Compact Cassette had taken over, Fisher-Price tried to use the concept with their &lt;a href=&quot;https://en.wikipedia.org/wiki/Pocket_Rockers&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pocket Rockers&lt;/a&gt;, despite already offering CC players for children (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX Microdrive was just another application of the principle of an endless tape wound around a single spool. There is no principal difference to using a compact cassette as many home computers did. Recording can be done as sound, or digital. Additionally, rewinding is not needed. It's a lot like a floppy disk with a large single track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Sinclair wasn't the first&lt;/strong&gt; to apply it to computers. Already at the beginning of the micro computer 'age' in the mid '70s, 'Stringy Floppies' were seen as a cheap alternative to the expensive floppy drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Exatron presented an &lt;a href=&quot;https://en.wikipedia.org/wiki/Exatron_Stringy_Floppy&quot; rel=&quot;nofollow noreferrer&quot;&gt;ESF drive&lt;/a&gt; for S100 and TRS-80 computers at the second West Coast Computer Fair in 1978. Compared to floppies that could easy surpass US$1000 including a controller, the US$250 Stringy Floppy was extremely appealing. Everything that was possible with a floppy could be done as well. Transfer speed was quite comparable, except that seek operations did take additional time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Sinclair's Story&lt;/strong&gt; starts with a suggestion by Andrew Grillet, who proposed to use a solution similar to the 8-track as storage for 'a' computer. This was already a long time before the ZX-80 and it's not really known if and how it stayed alive until 1982 when David Southward, managing the ZX Spectrum peripheral development, assigned Ben Cheese to work out the electronics and John Williams to do the mechanics for what later became the Microdrive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Microdrive was announced in 1982 with the Spectrum. It was meant to cost &lt;em&gt;only&lt;/em&gt; £50 - a Commodore 1540 disk drive was at that time still over £350. So like the Spectrum itself, it was incredibly cheap. It took until summer of 1983 until the drive really materialised with its buyers.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I remember the wafers being rather unreliable, and flimsy and prone to having tape spill out of them.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While they did need some TLC, there weren't as bad as it was said. I did work quite some time with Microdrives on a QL and was quite happy. From a user view they where quite comparable to floppies on home computers and even PC. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why were they chosen, and/or designed in the first place?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sinclair's lever was the price. He sold computers at rates that others couldn't even print the manual.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Just the idea of them sounds terrible.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The idea is great and worked reliably for decades in music as well as for computers. If at all, a point can be made that the designers wanted to make the wafers as small as possible, which was maybe a bit too small for the parts used.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If they dreamed up the idea internally and designed them themselves, then it is a bit more understandable, and maybe they did not turn out as well as had been expected.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As with their computers, they took an existing idea, one that others already had working (see Exatron) and then stripped it to the minimum to enable the cheapest possible solution to offer a certain performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One could have a Spectrum with a Microdrive for less than a VIC20 with a cassette drive. If that wasn't appealing, I don't know what would have been.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Another of the quite common attempts to create a locked-in product.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-07-05T13:35:35.233" LastActivityDate="2018-07-05T13:35:35.233" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="6943" PostTypeId="2" ParentId="6831" CreationDate="2018-07-05T02:29:02.403" Score="10" Body="&lt;p&gt;Well, the folks from &lt;a href=&quot;https://stardot.org.uk/forums/index.php&quot; rel=&quot;noreferrer&quot;&gt;stardot&lt;/a&gt; came &lt;a href=&quot;https://stardot.org.uk/forums/viewtopic.php?f=2&amp;amp;t=15319&amp;amp;p=207781#p207744&quot; rel=&quot;noreferrer&quot;&gt;through&lt;/a&gt;! It seems it's called &lt;strong&gt;Asterisk Tracker&lt;/strong&gt;, and was published in the December 1984 issue of &lt;em&gt;Beebug&lt;/em&gt; magazine. The author was &lt;em&gt;N. Silver&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1L=0:REP.L=L+3:MO.4:DR.1279,0:DR.1279,452:MOVE1279,572:DR.1279,1023:DR.0,1023:F.I=1TOL:V.31,RND(32)+5,RND(31),42,30:N.:P.(L-3)/3:X=0:Y=512:REP.PL.69,X,Y:X=X+4:Y=Y-(INKEY-74+.5)*8:U.PO.X,Y)=1ORX=1280:U.X&amp;lt;1280:V.7:REP.U.INKEY-99:RUN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This uses BBC BASIC's own special abbreviations, but expands out to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   10 L=0&#xA;   20 REPEATL=L+3&#xA;   30   MODE4&#xA;   40   DRAW1279,0&#xA;   50   DRAW1279,452&#xA;   60   MOVE1279,572&#xA;   70   DRAW1279,1023&#xA;   80   DRAW0,1023&#xA;   90   FORI=1TOL&#xA;  100     VDU31,RND(32)+5,RND(31),42,30&#xA;  110   NEXT&#xA;  120   PRINT(L-3)/3&#xA;  130   X=0&#xA;  140   Y=512&#xA;  150   REPEATPLOT69,X,Y&#xA;  160     X=X+4&#xA;  170     Y=Y-(INKEY-74+.5)*8&#xA;  180   UNTILPOINT(X,Y)=1ORX=1280&#xA;  190 UNTILX&amp;lt;1280&#xA;  200 VDU7&#xA;  210 REPEATUNTILINKEY-99&#xA;  220 RUN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here's the original running in an emulator: &lt;a href=&quot;https://bbc.godbolt.org/?autorun&amp;amp;loadBasic=https://gist.githubusercontent.com/scruss/8ba31a3fc154042285d21cf7ffdfff69/raw/9007afc9d252f4866f93cfc8f474b1d8ea6a76ee/ASTER&quot; rel=&quot;noreferrer&quot;&gt;Asterisk Tracker&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-07-05T02:29:02.403" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6944" PostTypeId="1" CreationDate="2018-07-05T13:51:25.670" Score="2" ViewCount="405" Body="&lt;p&gt;Is TI-86 calculator capable of producing sounds?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In what ways the sound is produced (like timers, beeper bits or alike) if yes?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If no, are there any mods that add this capability?&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-07-07T23:34:52.563" Title="TI-86 sound capabilities" Tags="&lt;z80&gt;&lt;calculator&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6945" PostTypeId="2" ParentId="6944" CreationDate="2018-07-05T13:59:57.810" Score="6" Body="&lt;p&gt;No, there is no speaker or buzzer integrated into the ti-86.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It does however have a jack port (2,5mm if I remember correctly) which can be used to transfer data between calculators. It is possible to control this output with a program written in assembly or Axeparser (i'm not sure about ti-basic). You can then connect a speaker to this port and play sounds with it. However this output is digital, not analog, so you will not be able to make anything pretty. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edit :&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://axe.eeems.ca/Commands.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://axe.eeems.ca/Commands.html&lt;/a&gt; for a reference of Axe Parser (my favorite language for programming on a ti) In the &quot;Link Port&quot; section, it describes the usage of commande &lt;code&gt;Freq(WAVE, TIME)&lt;/code&gt; to generate sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://www.ticalc.org/pub/text/calcinfo/86ports.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ticalc.org/pub/text/calcinfo/86ports.txt&lt;/a&gt; for a reference of how to control output to the port in assembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://converter.dev.artweb.ee/music/50335_raphaelgoulart_dancing_frantically_for_about_26_secs.mp3&quot; rel=&quot;nofollow noreferrer&quot;&gt;This is a really cool example of what can be achieved&lt;/a&gt; Thanks @tofro for this one.&lt;/p&gt;&#xA;" OwnerUserId="9104" LastEditorUserId="7813" LastEditDate="2018-07-06T21:10:23.093" LastActivityDate="2018-07-06T21:10:23.093" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="6946" PostTypeId="2" ParentId="6944" CreationDate="2018-07-05T16:01:35.037" Score="5" Body="&lt;p&gt;Back in the TI-58/59 days, there was some games that made sounds using the natural ambient RF leakage of the device. You put it next to an AM radio, and then it would do internal loops of varying types to make noises in the radio.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-07-05T16:01:35.037" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6947" PostTypeId="1" AcceptedAnswerId="6948" CreationDate="2018-07-05T16:49:11.413" Score="5" ViewCount="741" Body="&lt;p&gt;The usual thing today is a laptop (maybe desktop) PC (or Mac) connected to a video projector to display content from PowerPoint (or Keynote) slides. How was it done, in general, before this hardware and software was common in corporate offices and meeting rooms?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is &quot;Retrocomputing&quot;, so I'm asking about what computer software was commonly used to create the content, and how were computers involved in its production and/or presentation? (Or, did the corporate world just skip from whiteboards all the way to PowerPoint?...)&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-01-25T10:09:42.567" Title="How was corporate training done before PowerPoint?" Tags="&lt;history&gt;&lt;software&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6948" PostTypeId="2" ParentId="6947" CreationDate="2018-07-05T16:59:23.203" Score="9" Body="&lt;p&gt;Apart from whiteboards, blackboards and paperboards, &lt;a href=&quot;https://en.wikipedia.org/wiki/Transparency_(projection)&quot; rel=&quot;noreferrer&quot;&gt;transparencies&lt;/a&gt; were quite common, both pre-printed and written/drawn as the presenter gave the presentation (which was quite a difficult technique to master, but very effective).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transparencies could be prepared manually, or using word-processing software, or presentation software; under DOS, the dominant presentation tool was &lt;a href=&quot;https://en.wikipedia.org/wiki/Harvard_Graphics&quot; rel=&quot;noreferrer&quot;&gt;Harvard Graphics&lt;/a&gt; but there were quite a few others (notably &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Lotus_Freelance_Graphics&quot; rel=&quot;noreferrer&quot;&gt;Freelance Graphics&lt;/a&gt;). The Mac was used for this too; it had &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_PowerPoint&quot; rel=&quot;noreferrer&quot;&gt;PowerPoint&lt;/a&gt; in 1987... Printing to transparencies was possible using special transparencies with laser printers and then inkjets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another common presentation technique was to prepare videos, and slideshows were quite often recorded on VHS tapes and projected using high quality VCRs and projectors (Barco etc.). As their name suggests they were also presented as &lt;a href=&quot;https://en.wikipedia.org/wiki/Carousel_slide_projector&quot; rel=&quot;noreferrer&quot;&gt;35mm slides&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also dedicated presentation computers, but as far as I’m aware they weren’t very popular. LGR came across a 1988 Kodak DisplayMaker and &lt;a href=&quot;https://www.youtube.com/watch?v=ABOJLR7bRIA&quot; rel=&quot;noreferrer&quot;&gt;reviewed it&lt;/a&gt;, also briefly covering the more popular VideoShow system which was available in 1984. The DisplayMaker was an all-in-one system allowing users to create presentations and display them using a variety of outputs (to monitors, TVs or projectors); it could also grab still video frames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computer-driven projectors, and then laptops, changed the game, by making it possible for presentation software to be used to present the content as well as prepare it, but it took a long time for laptop-accessible projectors to become common (they were very expensive, bulky, noisy, and hard to maintain). There were some models of laptops whose screen back could be removed, so that they could be placed on a transparency projector, but the results weren’t great (such projectors didn’t have great levels of light output to start with, and adding an LCD screen didn’t help). Before laptops, there were specialised screens which could be used with transparency projectors; Kodak had one as early as &lt;a href=&quot;https://books.google.fr/books?id=5hdeC0k_JHwC&amp;amp;pg=PA52&amp;amp;dq=PC%20Magazine%20laptop%20transparency&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=0ahUKEwiJ7bnrt4jcAhXEuhQKHaS_DsUQ6AEIKzAB#v=onepage&amp;amp;q=PC%20Magazine%20laptop%20transparency&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;1986&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-01-25T10:09:42.567" LastActivityDate="2019-01-25T10:09:42.567" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="6949" PostTypeId="2" ParentId="6947" CreationDate="2018-07-05T17:07:56.407" Score="3" Body="&lt;p&gt;even &lt;em&gt;whiteboards&lt;/em&gt; aren't &lt;em&gt;that&lt;/em&gt; old...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experience, before computer projectors became commonplace, it was all analog -- transparencies with an overhead projector, or 35mm slides. (There was a brief period where you could buy LCD displays that sat on an overhead projector.) Content for those was generated in various old-fashioned ways, from hand-drawing to photographic reproduction to typesetting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the 1980s, once laser printers became widely accessible, it was common to print onto transparencies for presentations. You'd use the word processor or drawing program of your choice to generate the images, but you'd print them just as if you were printing to paper. In fact, a quick trip to Wikipedia indicates that early versions of PowerPoint expected to produce transparencies or 35mm slides.&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2018-07-05T17:07:56.407" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6951" PostTypeId="2" ParentId="6947" CreationDate="2018-07-05T18:17:04.210" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;This is &quot;Retrocomputing&quot;, so I'm asking about what computer software was commonly used to create the content, and how were computers involved in its production and/or presentation?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(*1)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm interested in the related usage of retro computers, so only if the media was created using a computer.&#xA;  (from a comment)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6948/6659&quot;&gt;Stephen Kitt&lt;/a&gt; has already given a great summary of presentation methods before the integrated use of computers from authoring to presentation. When concentrating on the computer side it might be useful to split this topic in two:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What use where computer before the widespread use of a computer driven display methods&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;and&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How did the use of computers to display presentations evolve&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The need to use at least computer output in presentations did arise quite early. Either to show products for sales purpose or training, but as well to use their abilities to easy create graphics from data that otherwise would require a lot of time to be drawn. As all of them had to be converted to &lt;a href=&quot;https://en.wikipedia.org/wiki/Reversal_film&quot; rel=&quot;nofollow noreferrer&quot;&gt;reversal film&lt;/a&gt; anyway (Using slides (*2) was &lt;em&gt;the&lt;/em&gt; way to go until the mid/late 1970s (*3)), why not taking them directly from the screen? Such camera setups where rather expensive but saved quite some time. (*4,5)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In companies with such equipment at hand, people soon used full screen editors to create slides, allowing a way shorter production cycles than typing the text on paper, sending the request to some office putting it into a form matching the corporate guidelines and turning the result into a slide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the advent of text processing, printers and the introduction of copiers, as well as a greater availability of overhead projectors (*7) it became standard to write presentations in a text system (or a typewriter) and copy it to a transparency (*6).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using WYSIWYG software for transparency creation does predate PowerPoint by many years. I personally remember using a Siemens 5800 system (OEM version of a Xerox Star) in 1980 to create slides and setting up a system to incorporate data from a mainframe system (*8).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programs like PowerPoint did evolve in the mid 1980s, when generally available computers gathered enough memory and 'high' resolution (aka VGA or better) displays to allow creation and handling of a whole page at once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is also where direct projection came to be. Have you ever wondered why some high price professional VGA /SuperVGA cards had an option for TV/S-Video output? Well, this allowed (among others) the direct use of a PC for presentation with a &lt;a href=&quot;https://en.wikipedia.org/wiki/CRT_projector&quot; rel=&quot;nofollow noreferrer&quot;&gt;CRT projector&lt;/a&gt; (Video Gun). Such a configuration was usually confined to special meeting rooms or lecture rooms, and limited to rough content within the capabilities of TV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real change came in the second half of the 1980s, when durable &lt;a href=&quot;https://en.wikipedia.org/wiki/Overhead_projector#LCD_overhead_displays&quot; rel=&quot;nofollow noreferrer&quot;&gt;LCD Overhead Displays&lt;/a&gt; became available. These are basically a LCD to be put atop an overhead projector so the display content gets projected like a transparency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike often assumed, they could not be used with (most) existing overhead projectors as they did need a better (brighter) light source than for ordinary transparencies. So usually a new projector was also needed. Still, their development was for several years ahead of integrated projectors, as later would require smaller and finer etched LCD for the same resolution which could at the same time endure greater heat due to the higher light density required for the same size picture. It wasn't until the mid 1990s that projectors like we know today really took over. Not least due TI's DLP technology.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(Or, did the corporate world just skip from whiteboards all the way to PowerPoint?...)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Bottom line: Yes - except it was from reversal film projections until the 1970s via overhead projectors and hand drawn or copied transparencies to ... well, PowerPoint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PowerPoint as a product to allow easy creation of slides &lt;em&gt;was&lt;/em&gt; the right product at the right time. Its rather easy handling allowed to create a presentation in WYSIWYG manner while laser printers enabled the desktop creation of overhead transparencies.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I'm a bit uneasy with the term 'retro' here, as I didn't understand the question to be specific of today's use of old computers for presentation? And the computers used 'back then' where anything but retro. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Well, in fact it goes way back until the &lt;a href=&quot;https://en.wikipedia.org/wiki/Magic_lantern&quot; rel=&quot;nofollow noreferrer&quot;&gt;Magic Lantern&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Value depending on the size of your company and the target audience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Likewise Polaroid offered special cameras for fast 'hardcopy' of screens. Remember, that was the time before huge (several kilobyte!) memory and affordable printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - I do remember several articles in computer magazines in the 1976-1979 frame suggesting the use of standard cameras as hardcopy / printout device by taking a photo of the screen. Better than writing down a program, and cheaper than a printer :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - A countless number of fixation stations of copiers died due the use of non heat resistant film.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - Still around 1980 overhead projectors were mostly considered nerdy, good for schools, but not in a business environment. With new generations already exposed to such in schools, the attitude changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - It was about manual creation and training documentation and involved writing a screen editor on the mainframe to fake user screens, a transfer utility to a (non-IBM, that was 1980) PC, writing a file system utility to create disks readable by the 5800 and finally transfer to that machine. But that's a different story.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-07-05T22:36:49.343" LastActivityDate="2018-07-05T22:36:49.343" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6952" PostTypeId="2" ParentId="6947" CreationDate="2018-07-05T19:09:01.830" Score="3" Body="&lt;p&gt;Just one addition from the mid 1980s. At our university, we had a room with some AutoCAD PC/AT workstations and a flatbed pen plotter (the ones with a real-ink pen moving across the media and drawing lines when lowered to touch the media).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And besides the technical drawings that this was originally meant for, we also prepared transparencies there and used them for presentations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still have some HP-GL plot files that I prepared for my thesis during that time.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2018-07-05T19:09:01.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6953" PostTypeId="1" AcceptedAnswerId="6954" CreationDate="2018-07-05T20:11:14.477" Score="25" ViewCount="1739" Body="&lt;p&gt;I've always read that Multics was a failed precurser of Unix, and was interested in seeing how it looks (as in, what features did Unix remove that Multics had, and did more modern Unixen bring them back when hardware improved).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multics code was &lt;a href=&quot;http://web.mit.edu/multics-history/source/Multics_Internet_Server/Multics_sources.html&quot; rel=&quot;noreferrer&quot;&gt;open sourced&lt;/a&gt; since then, but I haven't found any isos or imgs there, nor do I see any building instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there ISOs of Multics available?&lt;/p&gt;&#xA;" OwnerUserId="9107" LastEditorUserId="7347" LastEditDate="2018-07-05T20:53:33.010" LastActivityDate="2018-07-06T18:40:37.947" Title="Are there runnable Multics systems available?" Tags="&lt;emulation&gt;&lt;multics&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6954" PostTypeId="2" ParentId="6953" CreationDate="2018-07-05T20:34:37.470" Score="23" Body="&lt;p&gt;There are a number of ways to use Multics today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One option is to run it locally under an emulator.  The source code that's available should run (under emulation) on most Linux systems, Mac OS X, and Windows, even the RasPi. See the &lt;a href=&quot;http://multicians.org/simulator.html&quot; rel=&quot;noreferrer&quot;&gt;Multicians&lt;/a&gt; site for details (a &lt;a href=&quot;http://multicians.org/sim-inst.html&quot; rel=&quot;noreferrer&quot;&gt;cookbook&lt;/a&gt; is available).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to telnet (or ssh) to a public access system.  I don't know of any ones running on original hardware&lt;sup&gt;1&lt;/sup&gt; (IIRC a few years back there were two on the 'net, one in Texas and one in Germany).  One current system that I know of (running emulated on a Xeon server) is at &lt;code&gt;ssh dps8@m.trnsz.com&lt;/code&gt; or &lt;code&gt;telnet m.trnsz.com&lt;/code&gt;  Login using &lt;code&gt;login Guest&lt;/code&gt;  To log out use &lt;code&gt;logout&lt;/code&gt;  For more info see &lt;a href=&quot;https://ban.ai/multics/&quot; rel=&quot;noreferrer&quot;&gt;the website&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://livingcomputers.org/Discover/VintageComputers.aspx&quot; rel=&quot;noreferrer&quot;&gt;Living Computer Museum&lt;/a&gt; in Seattle also has a Multics system but (apart from the front panel) it is entirely emulated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; The last Multics site on original, physical hardware went offline in 2000.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-07-06T18:40:37.947" LastActivityDate="2018-07-06T18:40:37.947" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6955" PostTypeId="2" ParentId="6953" CreationDate="2018-07-05T20:39:06.697" Score="13" Body="&lt;p&gt;Yes.  The &lt;a href=&quot;https://github.com/charlesUnixPro/dps8m&quot; rel=&quot;noreferrer&quot;&gt;dps8m&lt;/a&gt; emulator simulates the GE-645 machines well enough to run Multics.  The open-sourced code has been successfully run under the emulator.  There's even &lt;a href=&quot;http://swenson.org/multics_wiki/index.php?title=Getting_Started&quot; rel=&quot;noreferrer&quot;&gt;a getting started guide&lt;/a&gt; with some bugfixes, meant specifically to be run under the emulator.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2018-07-05T20:39:06.697" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6956" PostTypeId="1" AcceptedAnswerId="6958" CreationDate="2018-07-06T03:51:19.620" Score="2" ViewCount="246" Body="&lt;p&gt;Is there a way to disable sound output on the Apple IIe from Applesoft Basic?  Can't seem to find this in any of the documentation or online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update:  Found this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;http://www.calormen.com/jsbasic/reference.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.calormen.com/jsbasic/reference.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;code&gt;POKE 49200,0&lt;/code&gt; — toggle speaker (no-op)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But that doesn't seem to work...&lt;/p&gt;&#xA;" OwnerUserId="8856" LastEditorUserId="8856" LastEditDate="2018-07-06T03:58:23.103" LastActivityDate="2018-07-06T04:12:52.463" Title="Turn off Apple IIe sound" Tags="&lt;apple-ii&gt;&lt;applesoft-basic&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6958" PostTypeId="2" ParentId="6956" CreationDate="2018-07-06T04:12:52.463" Score="10" Body="&lt;p&gt;In this case, to &quot;toggle&quot; the speaker means to move it from one position to the other. To make a sound, you repeatedly toggle the speaker (by poking that address) at a particular speed to make a sound of a particular frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no way to turn off this functionality using software. The easiest way is to pull the jumper connecting the speaker to the motherboard.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2018-07-06T04:12:52.463" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6959" PostTypeId="1" CreationDate="2018-07-06T08:42:37.957" Score="13" ViewCount="1029" Body="&lt;p&gt;From &lt;a href=&quot;https://stackoverflow.com/a/26323663/124486&quot;&gt;this answer&lt;/a&gt; by gsg about the &lt;a href=&quot;https://stackoverflow.com/q/26323215/2973400&quot;&gt;usage of certain x86 instructions&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Note that the x86 was originally designed as a Pascal machine&lt;/strong&gt;, which is why there are instructions to support nested functions (&lt;a href=&quot;https://c9x.me/x86/html/file_module_x86_id_78.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;enter&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://c9x.me/x86/html/file_module_x86_id_154.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;leave&lt;/code&gt;&lt;/a&gt;), the pascal calling convention in which the callee pops a known number of arguments from the stack (&lt;a href=&quot;https://c9x.me/x86/html/file_module_x86_id_280.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;ret K&lt;/code&gt;&lt;/a&gt;), bounds checking (&lt;a href=&quot;https://c9x.me/x86/html/file_module_x86_id_18.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;bound&lt;/code&gt;&lt;/a&gt;), and so on. Many of these operations are now obsolete.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What exactly does it mean to be a &quot;Pascal machine&quot; in that context? Is it limited to only that which is mentioned? I've never even heard of this term and would like to know more about it. Is there any good write up of &quot;and so on&quot; or historic Intel literature which talks about the relationship of x86 to Pascal?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="6659" LastEditDate="2018-07-06T18:03:00.733" LastActivityDate="2018-07-07T18:10:13.543" Title="x86 as a Pascal Machine?" Tags="&lt;x86&gt;&lt;pascal&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6960" PostTypeId="1" AcceptedAnswerId="6962" CreationDate="2018-07-06T09:00:50.280" Score="8" ViewCount="1199" Body="&lt;p&gt;What was the clock speed of the first generation of the PDP-11 with the KA11 cpu? This sounds like something that should be easily googlable but so far I have found nothing. I'm also interested in what the instructions per clock (or clocks per instruction) was for that.&lt;/p&gt;&#xA;" OwnerUserId="9080" LastActivityDate="2019-07-16T19:29:42.433" Title="What was the clock speed and ips for the original PDP-11?" Tags="&lt;pdp-11&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6961" PostTypeId="2" ParentId="6959" CreationDate="2018-07-06T09:04:48.387" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What exactly does it mean to be a &quot;Pascal machine&quot; in that context?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's close but not really the case. It starts with the term Pascal Machine being misused, as this usually describes a software and/or hardware to interpret &lt;a href=&quot;https://en.wikipedia.org/wiki/UCSD_Pascal&quot; rel=&quot;noreferrer&quot;&gt;p-code&lt;/a&gt;; today we would call it bytecode, like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pascal_MicroEngine&quot; rel=&quot;noreferrer&quot;&gt;Pascal Microengine&lt;/a&gt; or a &lt;a href=&quot;https://en.wikipedia.org/wiki/P-code_machine&quot; rel=&quot;noreferrer&quot;&gt;p-code&lt;/a&gt; interpreter. This virtual machine was called by its inventor, &lt;a href=&quot;https://www.research-collection.ethz.ch/handle/20.500.11850/68668&quot; rel=&quot;noreferrer&quot;&gt;Urs Ammann&lt;/a&gt;, p-Machine as in Pseudo-Machine. Users of the UCSD P-System, which translates to Pascal System, also tend to read p-Machine as Pascal-Machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With citing procedure function like &lt;code&gt;ENTER&lt;/code&gt;,&lt;code&gt;LEAVE&lt;/code&gt; and &lt;code&gt;RET n&lt;/code&gt; as original features it also screws the timeline, as these instructions where &lt;em&gt;not&lt;/em&gt; part of the original 8086 design, but introduced four years later with the EU (*1) of the 186/286 CPUs.  That part of the &lt;a href=&quot;https://stackoverflow.com/a/26323663/124486&quot;&gt;SO answer&lt;/a&gt; seams to try to establish a retro-fitted narrative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;But it is true&lt;/strong&gt; that the 8086 was built with high level languages in mind. The instruction set is made for easy compiler construction and to support generic high level structures. The ability to easily handle the addressing of stack frames (via BP) is eventually the best example. Others are the (mostly) symmetric addressing, handling of arrays and strings. Of course, all of this is handy for an assembly programmer, but it simplifies the life of compilers as well - and offers a reasonable speed up for their output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stephen Morse, the designer of the 8086 describes his approach in a worthwhile &lt;a href=&quot;https://www.pcworld.com/article/146917/components/article.html&quot; rel=&quot;noreferrer&quot;&gt;interview&lt;/a&gt; with PC-World:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;Now, for the first time, we were going to look at processor features from a software perspective. The question was not “What features do we have space for?” but “What features do we want in order to make the software more efficient?”&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In contrast to previous generations of CPUs, the 8086 was, much like the 6809 of the same time, designed with a clear goal to support HLL.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it limited to only that which is mentioned?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Only the mentioned instructions? No, as said, it's about basic aspects of the 8086's instruction set. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I've never even heard of this term and would like to know more about it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;'Cause he made it up - at least in the context used by him.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there any good write up of &quot;and so on&quot; or historic Intel literature which talks about the relationship of x86 to Pascal?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As there is no special relationship to Pascal, No. But there is information about its ability to support typical HLL structures - like the stack or arrays - within the 8086 manuals. These are structures found in next to all languages, especially all &lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL&quot; rel=&quot;noreferrer&quot;&gt;ALGOL&lt;/a&gt; descendants - like PASCAL or C. The fact that Mr. Morse did add chapters for PL/M and Pascal (*2) to his excellent book &lt;a href=&quot;https://stevemorse.org/8086/&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The 8086/8088 Primer&lt;/em&gt;&lt;/a&gt; does tell as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The aforementioned interview is a great start to learn about the history of the 8086. &lt;a href=&quot;https://www.pcworld.com/article/146917/components/article.html&quot; rel=&quot;noreferrer&quot;&gt;Give it a read&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Execution Unit, that part of the 8086 doing all computation. A 80186 combines a second generation EU with a real mode BIU (Bus Interface Unit) while the 80286 got a virtual addressing BIU. This split is eventually the real genius of the 8086's hardware design. Already laying the ground of today's multi function unit CPU design in 1978.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Already, the 8088 of 1979 made use of this design by combining a first generation (8086) EU with an 8 bit wide BIU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Book was originally published in 1980 with just the PL/M chapter. The Pascal chapter got added in the second edition in 1982. So if there was a specific language at all, it would have been rather PL/M than Pascal.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2018-07-06T15:44:10.120" LastActivityDate="2018-07-06T15:44:10.120" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6962" PostTypeId="2" ParentId="6960" CreationDate="2018-07-06T11:16:32.327" Score="11" Body="&lt;p&gt;&lt;a href=&quot;http://ed-thelen.org/comp-hist/pdp-11.html&quot; rel=&quot;noreferrer&quot;&gt;This link&lt;/a&gt; describes the PDP-11/20 as having a speed of 800 nanoseconds. That works out as 1.25 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because that speed is the speed of the memory, (which is tightly connected to the speed of the CPU), and because the databus is no wider than 16 bits, that means that the PDP-11 will &lt;em&gt;at most&lt;/em&gt; execute one instruction per clock cycle. And that speed precludes other memory accesses, like DMA or instruction operands, use of the stack or immediate data, etc. So many instructions will take somewhere between 1 and 5 clock cycles.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-01-08T18:33:20.117" LastActivityDate="2019-01-08T18:33:20.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6963" PostTypeId="1" AcceptedAnswerId="6966" CreationDate="2018-07-06T11:17:58.650" Score="18" ViewCount="2737" Body="&lt;p&gt;HGC cards on IBM PCs used to be able to run CGA software by using a CGA emulator. How exactly did those programs work? What were the limitations?&lt;/p&gt;&#xA;" OwnerUserId="8337" LastActivityDate="2019-10-28T06:49:32.177" Title="How do CGA emulators for Hercules graphics work?" Tags="&lt;graphics&gt;&lt;ibm-pc&gt;&lt;cga&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6965" PostTypeId="2" ParentId="6963" CreationDate="2018-07-06T11:48:26.743" Score="15" Body="&lt;p&gt;The basic idea is to exploit the fact that both CGA and Hercules use the 6845.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the source code of an emulator at hand, so I can say &lt;em&gt;what&lt;/em&gt; it does:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;it handles the mode-setting function of interrupt 0x10; for all non-Hercules modes, it includes tables of register settings to use to program the Hercules for the appropriate resolution and framebuffer layout;&lt;/li&gt;&#xA;&lt;li&gt;it piggy-backs on the timer interrupt to copy the framebuffers when an emulated mode is active (from 0xB800, which is where programs would write when using CGA, to 0xB000, the monochrome buffer).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are quite a number of different emulators with different levels of success with various programs, so there are no doubt different ways of implementing the emulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The limitations are mostly related to hardware handling. Any program writing to the CGA registers won’t work, and any program relying on the Hercules vertical blank interval won’t behave quite right (CGA refreshes at 60Hz, Hercules at 50Hz). The status registers are different too, so polling CGA-style won’t work on Hercules at all. As mentioned by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/780/tofro&quot;&gt;tofro&lt;/a&gt;, copying the framebuffers took a noticeable amount of time too (especially on CGA/Hercules-era systems), which would affect the system’s performance.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-07-06T12:26:20.410" LastActivityDate="2018-07-06T12:26:20.410" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6966" PostTypeId="2" ParentId="6963" CreationDate="2018-07-06T12:18:38.457" Score="21" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How exactly did those programs work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They were based on the ability of the Hercules card use the CGA's memory space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original &lt;a href=&quot;https://www.seasip.info/VintagePC/mda.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MDPA&lt;/a&gt; (*1) had (only) 4 KiB of memory mapped at B0000h, while the CGA had 16 KiB of Memory at B8000h. The Hercules card in contrast had 64 KiB of memory (*2), starting at B0000h. To avoid conflicts with a CGA in the same system the upper 32 KiB were by default disabled. By default the Hercules was 100% compatible. In fact, so compatible that the PCs BIOS did recognize and use it as MDA (with 4 KiB Memory). Unlike the MDA, the Hercules card did offer a full graphics mode of 720x348 (*3,4), which occupied 32 KiB Memory, thus offering up to two pages. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;CGA emulations used the fact that the second 32 KiB were not only free (when only the first graphics page was used) but also that memory could be located where the CGA's 16 KiB are, at B8000h..BBFFFh. Programs assuming a CGA (and direct screen access) would go ahead and paint their output into this memory instead. A timer controlled interrupt would now read the virtual CGA buffer at B8000h and transform its content into the real Hercules buffer at B0000h. On fast machines that could happen for every frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was also supported by the fact that while many programs did direct screen updates, configuration was mostly done via BIOS calls, which could also be intercepted by the emulation and handled accordingly. For games with direct control of the CGA's registers, patches were sometimes available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, some games even skipped programming a Hercules mode by using a built-in (third party) CGA emulation. &lt;a href=&quot;https://en.wikipedia.org/wiki/Accolade_(company)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Accolade's&lt;/a&gt; well known &lt;a href=&quot;https://en.wikipedia.org/wiki/Test_Drive_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Test Drive&lt;/a&gt; for example.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What were the limitations?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most are related to the fact that the conversion of colour and resolution was done in software. To make it happen, the emulator had to steal the cycles to do so from the game. While not an issue with later PCs, it was a deal breaker early on.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Most notable &lt;strong&gt;Speed&lt;/strong&gt; - Games got slowed down. While not much of an issue for round based or adventure games, it was real hurdle for real time/action games.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As well as &lt;strong&gt;Lag&lt;/strong&gt; - One way to reduce the impact on the game performance was to skip frames. Doing the conversion only every second, third or fourth frame, reducing the effective frame rate. Again sometimes to an unplayable low when it came to (re)action games.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Weird Screen Format&lt;/strong&gt; - Again due to the complexity of conversion, some emulators offered modes where less complex calculations were used by restricting the display area and colour resolution. As a result, only a part of the screen was used (or parts of the picture cropped) and colour information was dropped.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The other big drawbacks were &lt;strong&gt;ugly pictures&lt;/strong&gt; due to the fact that converting a colour picture to monochrome always loses information. Unlike on a TV, there was no grayscale. Depending on the software this was compensated by replacing the colours by fixed patterns. This worked fine on pictures with sharp contrasts (i.e. always black lines in between) but usually only gave a rough impression of different coloured areas. With graphics based on colours (like with 160x200 mode) and fine details the result was awful. Keep in mind, these were just replacement patterns and nothing like real dithering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And last, &lt;strong&gt;programs that manipulated the CGA's (6845) registers directly&lt;/strong&gt; did not work at all. There weren't many and some emulators even had patches for common ones, still another hurdle to take.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - &lt;em&gt;Monochrome Display and Printer Adapter&lt;/em&gt; as the original IBM MDPA also offered a parallel interface. Obviously IBM assumed that an office user would need a printer interface anyway, thus creating the eventual first &lt;em&gt;Multi-Function-Card&lt;/em&gt; :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The large memory was meant to support loadable character sets and full graphics, as its developer wanted to use Thai characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Descriptions often mention 350 lines, but the last two weren't visible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - 720x350 at 50 Hz is, BTW, what can be done with a standard CRT when tweaking within the (European) boundaries.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2019-01-04T10:42:41.093" LastActivityDate="2019-01-04T10:42:41.093" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6967" PostTypeId="5" CreationDate="2018-07-06T12:50:30.670" Score="0" Body="&lt;p&gt;For questions about &lt;a href=&quot;https://en.wikipedia.org/wiki/Multics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multics&lt;/a&gt; (Multiplexed Information and Computing Service),  an influential early time-sharing operating system.&lt;/p&gt;&#xA;" OwnerUserId="837" LastEditorUserId="837" LastEditDate="2018-07-06T13:31:29.047" LastActivityDate="2018-07-06T13:31:29.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6968" PostTypeId="4" CreationDate="2018-07-06T12:50:30.670" Score="0" Body="For questions about the Multics operating system." OwnerUserId="837" LastEditorUserId="837" LastEditDate="2018-07-06T13:31:35.007" LastActivityDate="2018-07-06T13:31:35.007" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6969" PostTypeId="2" ParentId="6959" CreationDate="2018-07-06T16:33:56.500" Score="1" Body="&lt;p&gt;Pascal was notable at the time for having nested scopes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You code have, for example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;program test;&#xA;&#xA;var&#xA;    t : integer;&#xA;&#xA;procedure p1(x:integer);&#xA;  function f1(y:integer) : integer;&#xA;    begin&#xA;      f1 := x + y;&#xA;    end;&#xA;&#xA;begin&#xA;  t := f1(10);&#xA;end;&#xA;&#xA;begin&#xA;  f1(6);&#xA;  writeln(t);&#xA;end.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, you can see here that in f1, there are 3 variables in scope: y (from the function), x (from the procedure), and t (the global environment).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not only are the variables in scope, but the nested functions and procedures as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, a CPU that supports dereferencing a chain of stack frames is much more &quot;Pascal&quot; friendly than one that does not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C doesn't have this issue, it's a flat namespace. You can certainly have functions call other functions, but the code itself can only reference the local and global scopes, none of the intermediate ones. So, there's a difference of simply doing address arithmetic against a local stack frame, and arithmetic against several that are chained together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UCSD has a p-code instruction that basically says &quot;give me the value from the 6th offset that's 3 stack frames up&quot;. In machine language, you would need to deference stack frame link pointers, repeatedly, to get handle these references.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-07-06T16:33:56.500" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6970" PostTypeId="2" ParentId="2962" CreationDate="2018-07-07T17:41:55.343" Score="2" Body="&lt;p&gt;Sony made a KV1311CR TV that has a digital and analog RGB input. The analog RGB input could be used with an Atari ST via a special cable. It had a 640x480 display. It also has a composite video input and analog audio input that will work with the Atari 8 bit computers.&lt;/p&gt;&#xA;" OwnerUserId="4660" LastEditorUserId="4660" LastEditDate="2018-07-07T18:00:59.643" LastActivityDate="2018-07-07T18:00:59.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6971" PostTypeId="2" ParentId="6959" CreationDate="2018-07-07T18:10:13.543" Score="1" Body="&lt;p&gt;One difference between Pascal and the C language as commonly implemented in the days before standardization is that every user-defined Pascal function will always be passed with a fixed set of arguments, while C functions might sometimes be passed more and sometimes fewer, and there was no need for a function to indicate, even retrospectively, how many arguments it had actually been passed.  One could thus do something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void test(mode, x)&#xA;  int mode,x;&#xA;{&#xA;  if (mode==0) &#xA;    printf(&quot;Hello there!\n&quot;);&#xA;  else&#xA;    printf(&quot;X was %d\n&quot;, x);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and safely invoke the function using either &lt;code&gt;test(0)&lt;/code&gt; or &lt;code&gt;test(1, 42)&lt;/code&gt;.  Or, if one liked, &lt;code&gt;test(0, 57)&lt;/code&gt; though the value 57 would be ignored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because Pascal functions always knew how what arguments would be passed, a called function could clean up the stack for the benefit of the caller.  Because there are usually more function calls than functions that are called, having the called function clean up the stack would generally save code.  When using common semantics, however, a C compiler couldn't generate a function epilogue that would clean up arguments passed by the caller because it wouldn't know how many bytes to pop.  While it would have been possible to pass such information as an extra argument, that would have been more expensive than simply leaving cleanup to the calling function.  *The 8086 includes a special form of the &quot;RET&quot; instruction, &lt;code&gt;RET n&lt;/code&gt;, to facilitate this by popping &lt;code&gt;n&lt;/code&gt; bytes of arguments off the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that in the days before standardization, there were some C implementations that used the Pascal-style calling convention.  On such implementations, a call to &quot;printf&quot; that didn't include enough formatting specifiers to consume all the arguments would jump the rails.  The C Standard opted to require that compilers handle calls to functions that are &lt;em&gt;declared&lt;/em&gt; as accepting variable argument lists in a way that will ignore extra arguments, perhaps by processing a function like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void variadicTest(int foo, ...);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;as though it were:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void variadicTest(int foo, char *__arguments);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and then having a call like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;variadicTest(1234, 1.2f, 23, &quot;Hello&quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;get processed as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct { double p1, int p2, char *p3} __temp24601 =&#xA;   {1.2f, 23, &quot;Hello&quot;};&#xA;variadicTest(123, (char*)&amp;amp;__temp24601;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Thus, a conforming C implementation for the 8086 could use the Pascal calling convention and take advantage of the &lt;code&gt;RET n&lt;/code&gt; instruction.  Functions generated by such an implementation, however, would fail if called from code that expects them to use the C calling convention.  The Standard requires that a call to a non-variadic function for which a prototype is visible be treated the same as one for which a prototype is not visible, thus making it impossible for compilers to use the principle &quot;use Pascal convention if a prototype or new-style definition is visible, or the C convention otherwise&quot;.  Some compilers did support a &quot;pascal&quot; keyword for that purpose, and use of it could improve performance, but it would make code non-portable.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-07-07T18:10:13.543" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6972" PostTypeId="1" CreationDate="2018-07-07T22:58:36.200" Score="7" ViewCount="340" Body="&lt;p&gt;I've been imaging old C64 floppies using a 1541 disk drive connected to my old Pentium III via a homebrew parallel cable and the Star Commander.  Given that my disks are 30+ years old, I am amazed they read as well as they do.  However, on occasion I get the odd Track/Sector error here and there...  When the imaging is complete, Star Commander asks if I would like to record an &quot;Error Info Block&quot; with my image, to which I always answer yes.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I view this error information in my image files after I transfer them to my windows machine where I am running WinVice?  If so, how?  &lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2020-07-12T12:04:08.883" Title="How can I view an Error Info Block in a D64 image?" Tags="&lt;commodore-64&gt;&lt;disk-image&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6973" PostTypeId="2" ParentId="6972" CreationDate="2018-07-07T23:18:54.100" Score="6" Body="&lt;p&gt;AFAIR the error info is just an attached block with one byte per sector of the imaged disk, tlling if that sector did produce a read error in the first place.&lt;/p&gt;&#xA;&lt;p&gt;Within the plethora of tools to handle D64 files several can show the error block. IIRC &lt;a href=&quot;http://georg-rottensteiner.de/en/c64.html#c64studio&quot; rel=&quot;nofollow noreferrer&quot;&gt;C64-Studio&lt;/a&gt; as a one stop solution for C64 development was one of them. Similar the &lt;a href=&quot;http://www.d64editor.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;D64-Editor&lt;/a&gt; as a tools just about D64 files.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-12T12:04:08.883" LastActivityDate="2020-07-12T12:04:08.883" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6974" PostTypeId="2" ParentId="6944" CreationDate="2018-07-07T23:34:52.563" Score="1" Body="&lt;p&gt;No, TI-86 does not have a purpose-built sound output. However, it has a &quot;link port&quot; (2.5mm Mono Jack connector). People seem to usually connect this jack to a piezo-buzzer or to a mono headphones, see e.g. &lt;a href=&quot;http://jgmalcolm.com/z80/advanced/soun&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. At the same time, it is actually possible to control the stereo channels separately, so you can, if you want to, connect it to stereo headphones and interpret it as a stereo-beeper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sound is produced via port #7 using direct CPU control. The wiring and relevant values to be outputted to the port are explained &lt;a href=&quot;http://paperlined.org/EE/microcontrollers/pic/projects/portable_VT_terminal/ti_86_link_port/link86all.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. The available interrupts are not useful for sound as they only happen at 200Hz rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally consider ZX Spectrum the most mature platform for beeper sound technologies. Beeper music has been very substantially explored both during the commercial era for ZX Spectrum, as well as during a sort of rebirth of the interest to 1-bit music during the last 10 years. The example of beeper track discussed in the other answer is cool, but is merely a single example. You can find many more ZX Spectrum beeper tracks, both old and new, &lt;a href=&quot;https://zxart.ee/rus/muzyka/poisk-po-baze/formatGroup:beeper/sortParameter:plays/sortOrder:desc/resultsType:zxitem/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least, higher CPU frequency in the TI-8x calculators, as well as the availability of the stereo outputs (with just a tiny bit of modding) actually makes TI-8x calculators a very nice platform for beeper music. So it may come as no big surprise to you that probably the most active beeper music coder and composer utz, who also goes under the label Irrlicht Project, created &lt;a href=&quot;http://irrlichtproject.de/houston/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a purpose-built tracker for TI-82, TI-83/82STATS, and TI-83+/84+/SE called HoustonTracker 2&lt;/a&gt;, see also &lt;a href=&quot;http://www.pouet.net/prod.php?which=66473&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Of course, TI-86 belongs to a different family and there is a certain amount of porting that would have to happen to replicate same results on TI-86. However, there is nothing to prevent your TI-86 to output, with a bit of perseverance, something akin to&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=I6G0CnBSWVk&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.youtube.com/watch?v=I6G0CnBSWVk&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5039" LastActivityDate="2018-07-07T23:34:52.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6975" PostTypeId="1" AcceptedAnswerId="6988" CreationDate="2018-07-07T23:39:08.937" Score="3" ViewCount="734" Body="&lt;p&gt;From this &lt;a href=&quot;https://stackoverflow.com/a/1464194/124486&quot;&gt;answer&lt;/a&gt;, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Hark back to the days of segmented 16-bit architectures for example: an array might be limited to a single segment (so a 16-bit &lt;code&gt;size_t&lt;/code&gt; would do) BUT you could have multiple segments (so a 32-bit &lt;code&gt;intptr_t&lt;/code&gt; type would be needed to pick the segment as well as the offset within it). ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This gives me a conceptual model of a type system whereby &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;uintptr_t = XXXsegment_t + size_t&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On a system that supports memory segmentation. Did a &lt;code&gt;XXXsegment_t&lt;/code&gt; or the like ever get standardized into a type on such systems? Was there ever a &lt;code&gt;segment_t&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="8579" LastEditDate="2018-07-08T00:35:01.960" LastActivityDate="2018-07-13T20:19:21.220" Title="Was there ever a compiler type that was just large enough to contain a memory segment?" Tags="&lt;programming&gt;&lt;c&gt;&lt;compilers&gt;&lt;segmentation&gt;" AnswerCount="4" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6976" PostTypeId="1" AcceptedAnswerId="6993" CreationDate="2018-07-08T01:54:05.290" Score="3" ViewCount="304" Body="&lt;p&gt;My IBM 5154 had some blown capacitors in the power supply (the AC line filters). It worked, though I decided I should replace the caps in the power supply just to be safe. I went ahead and replaced all of the electrolytic capacitors as well (they were out of spec).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Put it back together and it works, sort of. I can clearly see the picture that is supposed to be there but the blacks are not black in EGA graphics mode and there is an undulating wave. In non-graphics (text) mode, the blacks are black but the undulating wave is still there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's &lt;a href=&quot;https://photos.app.goo.gl/RmYJF2KSLEAMwD678&quot; rel=&quot;nofollow noreferrer&quot;&gt;a video&lt;/a&gt;. How can I further troubleshoot this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xJlt2.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xJlt2.gif&quot; alt=&quot;GIF capture by Spektre&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7316" LastEditorUserId="6868" LastEditDate="2018-07-08T07:17:37.843" LastActivityDate="2018-07-09T03:42:53.657" Title="Why does my IBM 5154 have an undulating wave?" Tags="&lt;repair&gt;&lt;crt-monitor&gt;" AnswerCount="1" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6977" PostTypeId="2" ParentId="6975" CreationDate="2018-07-08T03:30:29.017" Score="2" Body="&lt;p&gt;No; size_t has to cover every possible size of a data structure which could be defined; as soon as a model allowed an array larger than 64kb, size_t had to be a 32 bit type, and there was no point in having a separate segment type.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2018-07-08T03:30:29.017" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="6978" PostTypeId="2" ParentId="6975" CreationDate="2018-07-08T04:26:42.717" Score="3" Body="&lt;p&gt;To summarize what @traal linked to above, the recommended practice for DOS systems was as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pointers are 32 bit (&lt;code&gt;unsigned long&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;To get the segment for a pointer use the &lt;code&gt;FP_SEG&lt;/code&gt; macro from &lt;code&gt;DOS.H&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;To get a pointer's offset within a segment use the &lt;code&gt;FP_OFF&lt;/code&gt; macro, also from &lt;code&gt;DOS.H&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Both the segment and offset are &lt;code&gt;unsigned&lt;/code&gt; i.e. &lt;code&gt;uint16_t&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The macros are defined as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define FP_OFF(fp)  ((unsigned)(fp))&#xA;#define FP_SEG(fp)  ((unsigned)((unsigned long)(fp)&amp;gt;&amp;gt;16))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It makes sense if you think about it since a &lt;code&gt;pointer_t&lt;/code&gt;, well, points to a location in memory.  Without the segment information the actual value it points to is ambiguous.  Likewise, the segment number on its own is not terribly useful&lt;sup&gt;1&lt;/sup&gt;; it only becomes useful when paired with an offset.  In short, &lt;code&gt;segment_t&lt;/code&gt; was a &lt;code&gt;uint16_t&lt;/code&gt; but pointers were always&lt;sup&gt;2&lt;/sup&gt; 32-bit&lt;sup&gt;3&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Unless one is writing memory management code (e.g. paging to disk).  In that case you would probably be working strictly with &lt;code&gt;uint16_t&lt;/code&gt;s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; Unless you kept all of your data in a single 64kB segement&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;3&lt;/sup&gt; This is all a bit simplified but the gist of it is that the CPU's segment and offset registers are each 16 bits wide so it makes sense to treat memory addresses as atomic 32 bit values (at the C level) with (under the hood) the 16 MSBs of an address being the segment and the 16 LSBs being the offset.  Note that under this scheme a &lt;code&gt;pointer_t&lt;/code&gt;'s value is &lt;em&gt;not&lt;/em&gt; the physical linear address (except in the 0&lt;sup&gt;th&lt;/sup&gt; segment).&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-07-08T07:46:00.840" LastActivityDate="2018-07-08T07:46:00.840" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="6979" PostTypeId="1" AcceptedAnswerId="6989" CreationDate="2018-07-08T07:12:40.743" Score="49" ViewCount="9724" Body="&lt;p&gt;The 8086 used a segmented memory architecture where the linear address was computed from a 16-bit segment number and a 16-bit offset.  This greatly complicated things from a programming perspective.  The Motorola MC68000, designed at about the same time, used a flat 32-bit linear address space and was much easier to program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that source-level compatibility with the 8080 was a consideration but surely the CPU could have started up in, say, 8080 mode where the 16 MSBs of the address registers would be forced to zero then switch to full 32-bit (or 20-bit) addressing via a mode-switch instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What exactly were the reasons the designers of the 8086 chose a segmented memory architecture instead of a flat, linear one?&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="15334" LastEditDate="2021-02-21T14:14:46.697" LastActivityDate="2021-02-21T14:14:46.697" Title="Why didn't the 8086 use linear addressing?" Tags="&lt;memory-layout&gt;&lt;8086&gt;&lt;design-choices&gt;&lt;segmentation&gt;" AnswerCount="8" CommentCount="18" FavoriteCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="6981" PostTypeId="1" AcceptedAnswerId="7000" CreationDate="2018-07-08T08:35:39.673" Score="4" ViewCount="865" Body="&lt;p&gt;I am looking for a SID emulator that is open source, but not GPL. In particular, I am looking for something with a license that allows me to link it to a closed-source program; and also one that allows me to take its source code and rewrite it in a different language targeting a different platform, and then release that rewrite under an open source license. LGPL, or MIT/BSD would be examples of licenses that would work for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know of the following SID emulator engines, but all of them are GPL:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/robn/tinysid&quot; rel=&quot;nofollow noreferrer&quot;&gt;TinySID&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://vice-emu.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FastSID&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://sidplay2.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SIDPlay&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/jhohertz/jsSID&quot; rel=&quot;nofollow noreferrer&quot;&gt;jsSID&lt;/a&gt;, source rewrite of the above three&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then there's also&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://csdb.dk/release/?id=153597&quot; rel=&quot;nofollow noreferrer&quot;&gt;cSID&lt;/a&gt;/&lt;a href=&quot;https://csdb.dk/release/?id=156587&quot; rel=&quot;nofollow noreferrer&quot;&gt;cSID-light&lt;/a&gt;: source seems to be gone, can't find licensing info&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="115" LastActivityDate="2018-07-20T18:05:45.317" Title="Open source, non-GPL SID emulator" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;licensing&gt;&lt;mos-6581&gt;" AnswerCount="2" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="6982" PostTypeId="2" ParentId="6979" CreationDate="2018-07-08T09:55:23.113" Score="1" Body="&lt;p&gt;It is convenient to be able to address data as separate from code. It is convenient to be able to set aside space for the stack so that you can guarantee that it won't overrun anything too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This arrangement means that the same 16 bit pointer operations (save, load, 16 bit increment) can still be used as in the i8088, but the address space is still increased. &lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-07-08T09:55:23.113" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="6983" PostTypeId="2" ParentId="6979" CreationDate="2018-07-08T10:28:33.863" Score="26" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The 8086 used a segmented memory architecture where the linear address was computed from a 16-bit segment number and a 16-bit offset. This greatly complicated things from a programming perspective.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I beg to differ. Using segments doesn't 'complicate' things in any way. Sure, it may require a different style of structuring the data used and there are very few cases, in real world applications, where pointer arithmetic is needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole issue is a bit like a NYC cabby crawling bumper to bumper on the FDR and complaining about the speed limit on highways and how great the German Autobahn is. While right in theory, there is no practical implication as his job will never let him use this advantage - even if he moves to Europe and becomes a Taxi Driver.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Motorola MC68000, designed at about the same time, used a flat 32-bit linear address space and was much easier to program.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No so sure. Mind you, that not only Unix was originally designed segmented (and C still carries this over), but as well the (original) MacOS. Here a user application had to make OS calls for dereferenceation all the time to allow its memory management to work. The flat 68k address space is maybe nice for embedded programs or cases where the simple assumption of one programmer, one program and one machine works out, but not in a more sophisticated environment.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I understand that source-level compatibility with the 8080 was a consideration but surely the CPU could have started up in, say, 8080 mode where the 16 MSBs of the address registers would be forced to zero then switch to full 32-bit (or 20-bit) addressing via a mode-switch instruction.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That would have restricted the machine to an emulation mode, where converted Software could only use a single 64 KiB address space, leaving the rest of memory dormant. And only one such program could run at a time. So effectively removing every reason to switch away for an existing 8080/85 system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless one invents some kind of relocation mechanism that is. Like having a process pointer to give separate 64 KiB address spaces to each program, or the ability to address additional memory beyond 64 KiB with some banking or such... oh, wait, that's exactly what segments do. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that 8085 source compatibility is not a feature in itself, but a request to satisfy customer needs. And one of the biggest needs was to allow more code to be handled (and maybe a bit more data *1). The issue of source code compatibility is often seen as a rather easy thing. Just converting some instructions into equal and that's it. But software also and eventually foremost means data structures. A part that often needs more than a few key presses to be adapted. The instruction mix of the 8086 had for (next to) all 8080 instruction a functional equivalent. While the code representation (binary) may change not only in content but also in size, data structures and their interaction could be replicated without any change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding segment registers offered an easy way to port application with  only a few added lines to the 8086 and enabling the use of 64 KiB code &lt;em&gt;plus&lt;/em&gt; 64 KiB data (*2). Depending on the applications call structure this could be extended to several hundret KiB of code&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As well important is complexity of the CPU itself. The 8086 is a very clean 16 Bit CPU. There are no 32 bit operations (*3) except to optimize far pointer loading. Unlike the 68k with an outright bloated code requirement for handling 16 and 32 bit data types. Not the least reason why 8086 did outperform the 68k in real applications at comparable speed rates (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, why spending more than double the transistors (*5) on a more complex CPU design that yields less performance? For a feature that is hidden by compilers anyway?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What exactly were the reasons the designers of the 8086 chose a segmented memory architecture instead of a flat, linear one?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's easy to count several good reasons:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(A non exhaustive list what just came to mind. There might be many more to be found by spending more time to think about)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;First and most important, it's a clean 16 bit CPU. There is no need to handle any other data type (beside byte for memory access).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;KISS.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Easy port of existing 8080/85 software due a virtual maximum data type of 16 bit for pointers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Extension of available code space to full 64 KiB without modification&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Easy extension of available code space (with a minimal level of modularization) for existing (ported) software.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Extension of available data space to full 64 KiB without modification&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Speed. By reducing the majority of pointer operations to 16 Bit instead of 32 on a 68k (*6)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Speed. By reducing code size due a restriction of all code and data pointers to 16 bit. After all, more compact code needs less bus bandwith, leaving more for real work.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Simple memory management for multi tasking&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Simple memory management for multi programming&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Support existing complex OSes like Unix&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;and quite important (and to make the dozend full):&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;12&quot;&gt;&#xA;&lt;li&gt;(well behaving) 8086 application can run seamless in a (future) virtual memory environment without any modification.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It might be useful keep in mind that in 1977 mini systems were still build (and bought) with 64 KiB RAM &lt;strong&gt;or less&lt;/strong&gt;. Even a small memory model application (64 KiB for each segment), couldn't be handled by such. Here the 8086 was quite at the height of time. Segmented memory was the way to go. At that time next to all classic 'flat' architectures had reached their EOL. Eventually except the /370, but it might not count as realy flat due its general base+offset addressing scheme.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Long story short, the 8086's segmented scheme was not only on the heights of its time but also a very efficient and foreward looking design.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Addendum: There might be many details to critisize of Intels design decisions &lt;strong&gt;in hindsight&lt;/strong&gt;, like supercat (*7) favouring an 8 bit offset (instead of 4), and some may look quite appealing (*8), still the 8086 did include a remarkable lot of features in a very small and limited design, making it back then a huge success outside the (later) PC market. x86 Unix systems did outsale 68k based ones by a magnitude, especially due its early ability to handle a large physical address space via segmentation.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The main market for 8080/85 systems were not dektop computers, but embedded systems. Desktop users were in 1977 not only a real minority, but also still happy to have even &lt;em&gt;some&lt;/em&gt; memory, with full 64KiB being a dream for the wealthy. Complex embedded systems in contrast did already back then scratch the 64 KiB limit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The additional stack segment doesn't really count, as such application would only need a rather meagre amount of stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - For nitpicking, there is multiplication and division as 16x16 and 32x16&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - At the same clock rate a 80286 outperforms a 68000 by about 20%&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - An 8086 got ~29,000 transistor functions, while the 68k is said to have 68,000&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Not to mention that the 68k here always had to shovel a 33% overhead&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - Part of &lt;a href=&quot;https://chat.stackexchange.com/transcript/message/45335680#45335680&quot;&gt;this chat&lt;/a&gt;. mschaef did make a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2366/what-conventions-and-language-extensions-did-people-use-to-program-the-8086-and?rq=1#comment4756_2374&quot;&gt;similar comment&lt;/a&gt; as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6979/why-didnt-the-8086-use-linear-addressing/6985?noredirect=1#comment19084_6983&quot;&gt;Alex Hajnal reminded&lt;/a&gt;. Alex is a serious data archeologist :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - When thinking about the 8086 and its memory management I'm usually rather satisfied what has been made possible, as the segmented aproach is quite useful for multi programming (and multi tasking as well). I can only blame the designer(s) for not having thought a tiny little step ahead for a by adding support for a software managed MMU supporting memory protection and swaping. All the hardware needed would have been 4 segment size registers(SSR), 4 16-bit-wide OR gates and one comperator active during Effective Address (EA) generation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whenever an EA is calculated and the appropriate SSR register is non zero (checked via the OR gate) the resulting EA gets compared to its SSR. When low or equal processing continues, when higher a 'Segment Violation' Exception happens - much like INT 0Dh later on the 286. Now a some (OS) handler can decide what to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar all instructions loading any segment register (or SSR) would (when segment checking is active) issue a 'segment check' exception. Again like the 'Segment Not Present' (INT 0Bh) on a 286 (or the whole 0Ah/0Bh/0Ch group). As well an OS handler could check if the new segment value is one assigned to the program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whenever an exceptions happens the checking is disabled to allow the handler to act as needed (which also would make disabling it quite easy for an OS without memory protection by adding a NOP handler to kill any checking that got activated by 'accident') and must be switched on again before returning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this all need for a protected mode OS would be present. Sure, segement switching would be rather slow, compared with a hardware solution like with the 286, still better than noting and at minimal additional cost. Not to mention that if DOS had used this feature, many ugly programs and even less programming styles, would have prevailed :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-07T13:45:09.397" LastActivityDate="2020-05-07T13:45:09.397" CommentCount="30" ContentLicense="CC BY-SA 4.0" />
  <row Id="6984" PostTypeId="1" CreationDate="2018-07-08T11:37:13.787" Score="10" ViewCount="1569" Body="&lt;p&gt;I am studying an FLI routine in &lt;a href=&quot;http://codebase64.org/doku.php?id=base:fli_displayer&quot; rel=&quot;noreferrer&quot;&gt;http://codebase64.org/doku.php?id=base:fli_displayer&lt;/a&gt; and I noticed that the CLI instruction is being used in this IRQ routine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;irq0:   pha&#xA;        ...&#xA;        cli ; &amp;lt;&amp;lt;&amp;lt; ???&#xA;        nop&#xA;        nop&#xA;        nop&#xA;        nop&#xA;        ...&#xA;        pla&#xA;        rti&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As I know it probably does not have any effect on the IRQ routine. Or does it?&lt;/p&gt;&#xA;" OwnerUserId="7348" LastEditorUserId="836" LastEditDate="2018-07-09T12:28:50.193" LastActivityDate="2019-07-22T09:55:13.867" Title="Why do they use CLI in an IRQ routine?" Tags="&lt;commodore-64&gt;&lt;6502&gt;&lt;interrupt&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6985" PostTypeId="2" ParentId="6979" CreationDate="2018-07-08T11:46:11.853" Score="14" Body="&lt;p&gt;I am pretty sure the Intel engineers just weren't there, yet. And they were pressed by the market to push out a 16-bit CPU before all the others did to keep the market share they had already lost big time to small Zilog. (I am pretty sure that the design of the 8086 was much more driven by marketing pressure TTM and compatibility constraints than engineering creativity).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The x86 CPU was (opposed to the Motorola 68k) a backward-looking architecture that was designed to be able to re-use as much as possible from the 8-Bit 8080 world (both in terms of hardware, like peripheral chips and in terms of software, like the bulkload of CP/M software that was available for the 8080 - And - but this is only an assumption: As much as possible from chip-level building blocks. And such chip-level re-use is just much simpler achieved by a segmented approach than starting a flat-32-bit model from scratch like the 68k did). Note the Zilog 16-bit-CPUs chose a very similar approach that was even less radical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the best indication for how desperate people were looking to hold on to the CP/M ecosystem at that time is actually a non-Intel product: The NEC V20 that even 3 years after the 8086 came with a re-engineered 8086 core &lt;strong&gt;and&lt;/strong&gt; full 8080 emulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your claim the original 68000 were a &quot;non-segmented&quot; architecture is only partially true. If you wanted to use one of the main features of the 68k, fully position-independent code that was very important for systems not employing an (at that time) expensive external MMU (or wait for the 68020 that lifted the limitation to 16-bit index registers), you deliberately decided to segment your memory into 64k chunks that could be reached by register-relative addressing. MacOS did that initially, and other systems like the Amiga and the Sinclair QL as well.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-07-08T18:33:14.450" LastActivityDate="2018-07-08T18:33:14.450" CommentCount="24" ContentLicense="CC BY-SA 4.0" />
  <row Id="6986" PostTypeId="2" ParentId="6984" CreationDate="2018-07-08T11:48:26.980" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;As I know it probably do not any effect on IRQ routine. Or do it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it does not. Well, it does, but that depends.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before entering an interrupt routine the interrupt disable flag (&lt;code&gt;I&lt;/code&gt;) is set, preventing the CPU from accepting other interrupts so it can setup the environment needed to do its job without being interrupted again. Basically an implied &lt;code&gt;SEI&lt;/code&gt;, creating a semaphore (lock) around the (start of) the interrupt routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is (as always) good practice to keep locked sections as short as possible. So as soon as a routine has established itself and gathered whatever data is necessary to be collected undisturbed, for example detecting the source, it should enable interrupts again. After this, other interrupt sources can get served in parallel. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, all of this depends on the structure of the whole system, the program(s) in control, the number of concurrent interrupts and the like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without knowing more of either it's impossible to say if there are effects or not.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-07-08T14:03:25.307" LastActivityDate="2018-07-08T14:03:25.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6987" PostTypeId="2" ParentId="6984" CreationDate="2018-07-08T13:10:30.407" Score="20" Body="&lt;p&gt;Without issuing a CLI, no further interrupts can occur (until EOI, at least, where flags are restored by the RTI instruction). As this is a raster interrupt, you need to acknowledge that as well for another one to happen, which the seemingly benign $D019 manipulation achieves earlier in the interrupt handler, cf. the linked FLI routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this specific case, the idea is to let the raster interrupt occur again, while still being in the &quot;outer&quot; raster interrupt handler, such that the &quot;inner&quot; trigger will be interrupting a stream of NOPs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interrupt cannot happen in the middle of the CPU executing an instruction and gets deferred to the end of the current instruction. The clock cycles needed by various instructions the CPU might be executing at the point of interrupt varies, but knowing that what's interrupted is a NOP (2 clock cycles) means the timing of the raster interrupt at this point is much more predictable (only 1 cycle jitter possible).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any jitter in the raster IRQ timing is unacceptable for most advanced VIC effects on the C64, so most will include a similar kind of raster stabilization.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2018-07-08T21:31:36.573" LastActivityDate="2018-07-08T21:31:36.573" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6988" PostTypeId="2" ParentId="6975" CreationDate="2018-07-08T19:07:02.407" Score="5" Body="&lt;p&gt;There was never any integral type defined that corresponded to value of a segment the same way &lt;code&gt;uintptr_t&lt;/code&gt; corresponds to the value of a pointer defined in any C compiler targeting x86 CPUs that I'm aware of.  For that matter I don't know if any 16-bit segmented C compiler for x86 CPUs ever implement the &lt;code&gt;uintptr_t&lt;/code&gt; type. You just had to know if you assigned a 32-bit long integer value to a far pointer then the most significant 16-bits of the value would be used as the segment part of the address and the least significant 16-bit as the offset part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there was at least one implementation of pointer-like segment types, by Borland, and of segment-like pointer types, by Microsoft. Borland's implementation used the &lt;code&gt;_seg&lt;/code&gt; keyword to create segment pointer types while Microsoft's implementation used the &lt;code&gt;_based&lt;/code&gt; keyword to create something called based pointers. Microsoft's based pointers were also supported by Watcom's C compiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Borland implementation was the most straightforward. It allows the use of the &lt;code&gt;_seg&lt;/code&gt; keyword just like the &lt;code&gt;near&lt;/code&gt;, &lt;code&gt;far&lt;/code&gt; and &lt;code&gt;huge&lt;/code&gt; keywords in pointer types.  For example you could do something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;unsigned short _seg video_seg = 0xb800;&#xA;video_seg[80 * row + column] = character + attribute * 256;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The advantage of using a segment pointer over a far pointer here is that the variable only takes 2 bytes of space rather than 4.  Also it should help the fairly primitive Borland compiler generate better code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Microsoft implementation used the &lt;code&gt;_based&lt;/code&gt; keyword to based pointers. In theory these were more flexible and not specific in to the x86 segmented architecture.  In fact they're still supported by &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/57a97k4e.aspx&quot; rel=&quot;noreferrer&quot;&gt;current Microsoft compilers&lt;/a&gt;.  The basic idea is that you can use the &lt;code&gt;_based&lt;/code&gt; keyword to make a pointer &quot;based&quot; on some other variable.  So for example you can do:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void far *video_base = 0xb8000000;&#xA;unsigned short __based(video_base) *video_seg = 0;&#xA;&#xA;video_seg[row * 80 + column] = character + attribute * 256;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In practice though Microsoft implementation of based pointers in their 16-bit segmented compilers was pretty buggy and don't really offer an advantage over using far pointers to refer to segments. The were modestly used in combination with the &lt;code&gt;_segname&lt;/code&gt; keyword to specific which segment statically allocated variables should be allocated in. For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;unsigned char _based(_segname(&quot;OFFSCRBUF&quot;)) offscren_buffer[320U * 200];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The only other compiler that I know that did anything like this was Watcom's.  They took Microsoft's based pointers and added several extensions. In particular they created a &lt;code&gt;_segment&lt;/code&gt; keyword which is almost what you're asking for but much more inconvenient as you need to use it with both based pointers and a special &lt;code&gt;:&amp;gt;&lt;/code&gt; operator.  For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;_segment video_seg = 0xb800;&#xA;unsigned short _based(void) *offset = row * 80 + column;&#xA;*(video_seg:&amp;gt;offset) = character + attribute * 256;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note that all the above examples omit casts for brevity. Without the casts these code examples will all generate warnings but generate correct code.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2018-07-08T19:07:02.407" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6989" PostTypeId="2" ParentId="6979" CreationDate="2018-07-08T20:24:08.923" Score="93" Body="&lt;p&gt;For once, I do have a direct source for a &quot;Why didn't they ...?&quot; question.  Eric Isaacson, back in the late '80s and '90s, wrote a commercial assembler for the 8086, called A86.  (His homepage &lt;a href=&quot;http://eji.com/a86/index.htm&quot; rel=&quot;noreferrer&quot;&gt;still has a section&lt;/a&gt; offering it for sale for $50, $52 outside North America, and explaining why it's the best assembler on the market for DOS.  You can even download the extra patch supporting 80386 instructions for free.)  What's of interest to us is this story from &lt;a href=&quot;http://csn.ul.ie/~darkstar/assembler/manual/a10.txt&quot; rel=&quot;noreferrer&quot;&gt;chapter 10 of the manual.&lt;/a&gt;  The date on this copy is 1999, but the earliest versions of the document were written in 1986.  I've bolded one part of this.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The (grotesquely ornate) level of support&#xA;  for segmentation was dictated by Intel, when it specified (and&#xA;  IBM and the compiler makers accepted) the format that .OBJ files&#xA;  will have.  &lt;strong&gt;I attended the fateful meeting at Intel, in which the&#xA;  crucial design decisions were made.  I regret to say that I sat&#xA;  quietly, while engineers more senior than I applied their fertile&#xA;  imaginations to construct fanciful scenarios which they felt had&#xA;  to be supported by LINK.&lt;/strong&gt;  Let's now review the resulting&#xA;  segmentation model.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[...] The scenario is as follows: suppose you have a program that&#xA;  occupies about 100K bytes of memory.  The program contains a core&#xA;  of 20K bytes of utility routines that every part of the program&#xA;  calls.  You'd like every part of the program to be able to call&#xA;  these routines, using the NEAR form to save memory.  By gum, you&#xA;  can do it!  You simply(!) slice the program into three fragments:&#xA;  the utility routines will go into fragment U, and the rest of the&#xA;  program will be split into equal-sized 40K-byte fragments A and&#xA;  B.  Now you arrange the fragments in 8086 memory in the order&#xA;  A,U,B.  The fragments A and U form a 60K-byte block, addressed by&#xA;  a segment register value G1, that points to the beginning of A.&#xA;  The fragments U and B form another 60K-byte block addressed by a&#xA;  segment register value G2, that points to the beginning of U.  If&#xA;  you set the CS register to G1 when A is executing, and G2 when B&#xA;  is executing, the U fragment is accessible at all times.  Since&#xA;  all direct JMPs and CALLs are encoded as relative offsets, the&#xA;  U-code will execute direct jumps correctly whether addressed by&#xA;  G1 with a huge offset, or G2 with a small offset.  Of course, if&#xA;  U contains any absolute pointers referring to itself (such as an&#xA;  indirect near JMP or CALL), you're in trouble.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;It's now been over a decade since the fateful design meeting took&#xA;  place, and I can report that the above scenario has never taken&#xA;  place in the real world.  And I can state with some authority&#xA;  that it never will.  The reason is that the only programs that&#xA;  exceed 64K bytes in size are coded in high level language, not&#xA;  assembly language.  High-level-language compilers follow a very,&#xA;  very restricted segmentation model-- no existing model comes&#xA;  remotely close to supporting the scheme suggested by the&#xA;  scenario.  But the 86 assembly language can support it [...].  The LINK program is supposed to sort things out according to the scenario; but I&#xA;  can't say (and I have my doubts) if it actually succeeds in doing&#xA;  so.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note that this is discussing the software support for segmentation in the MS-DOS linker, rather than the hardware support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another reason that we have clear evidence for: Intel's previous chip, the 8080, supported a 16-bit, 64KiB, memory space.  The dominant operating system for it was CP/M.  Intel and Microsoft both made a serious effort to make the new environment as source-compatible with CP/M code as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will give examples from MS-DOS 1.0, because that was the most important and best-documented OS that took advantage of this feature.  Back when the ISA was being developed, IBM had not yet chosen the 8088 for its Personal Computer Model 5150, there was a large library of 8-bit CP/M software, and memory was even more expensive, all the considerations I am about to mention were even more crucial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The segmentation scheme allowed an OS for the 8088/8086 to emulate an 8080 running CP/M with minimal hardware resources.  Every MS-DOS program was initialized with a &lt;a href=&quot;https://en.wikipedia.org/wiki/Program_Segment_Prefix&quot; rel=&quot;noreferrer&quot;&gt;Program Segment Prefix&lt;/a&gt;, which just like it says on the tin, was loaded at the start of the program segment.  This was designed to emulate the Zero Page of CP/M.  In particular, the 8080 instruction to make a system call in CP/M was &lt;code&gt;CALL 5&lt;/code&gt;.  If you use that instruction in a MS-DOS program, it will still work.  The Program Segment Prefix will be loaded into CS, and &lt;code&gt;CS:0005h&lt;/code&gt; contains a jump to the system-call handler of MS-DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Segmentation effectively gave every legacy program its own 16-bit memory space, allowing it to use 16-bit pointers as it always had.  This both saved memory and saved 8-bit code from needing to be extensively rewritten.  (Recall that most software today runs on 64-bit CPUs, but ships as 32-bit programs because smaller pointers are more efficient; this was even more crucial on an original IBM PC model 5150.)  A &lt;code&gt;.COM&lt;/code&gt; program was based on the executable format of CP/M, and got by default a single segment for code, data and stack, so a program ported from CP/M could treat the 8086 as a weird 8080 where it had the whole 64KiB of memory to itself and the registers had different names.  MS-DOS 2.0 let programs start with separate segments for their code, stack, data and extra data, still using 16-bit pointers and offsets.  Of course, a program aware of the full 20-bit address space could request more memory from the OS.  In MS-DOS, it could request memory in 16-byte &quot;paragraphs&quot; (bigger than a word, smaller than a page) and would get them in a new relocatable segment, whose exact value it did not need to care about or waste a precious general-purpose register to store.  (Unlike shared libraries for the x86 and x86_64 today!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why not shift segment registers 16 bits to the left, instead of four, for even less complexity, and let programs use only the lower-order 8 or 16 bits of a 32-bit address space, for offsets within the current page of memory?  The apparent advantage is that it allowed segments to be aligned on any 16-byte boundary, instead of a 65,536-byte boundary.  Any program back then needed to use a lot less than 64KiB of memory, and exceptionally few computers even shipped with the 256KiB that the CS, DS, ES and SS registers could address.  The OS, the program in the foreground and every program to Terminate-and-Stay-Resident could not all have gotten their own 16-bit address spaces, much less separate ones for their code, data, and stacks, if every segment had needed to be on a 64KiB boundary.  But, with the memory model Intel used, programs could use 16-bit pointers with much smaller memory blocks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, remember that gigabytes of memory was a preposterous figure in 1976.  Intel correctly realized that they'd have plenty of time before it was ever worth worrying about needing 32 bits of address space.  Even their 80286, generations down the line, only supported a 16-MiB address space and allowed 16-bit near pointers.  What they didn't foresee was that their 8086 ISA would ever become as dominant as it did—and that they'd be stuck with it, in a market that demanded 100% compatibility.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2018-07-09T19:09:20.983" LastActivityDate="2018-07-09T19:09:20.983" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="6990" PostTypeId="2" ParentId="6413" CreationDate="2018-07-09T00:39:16.133" Score="7" Body="&lt;p&gt;The authoritative documentation for the legacy PC/AT hardware is the &quot;IBM Personal Computer Technical Reference manual&quot;, and the &quot;IBM Personal Computer AT Technical Reference manual&quot; These books were sold by IBM and can be found on eBay. Scans can be found online, however I don't know if IBM released the copyright. The books contain full schematics to the IBM PC and PC/AT, as well as the BIOS source code listings.  The IBM machines set the de facto standard the rest of the industry copied, so when you see a reference to legacy behavior in the ACPI or UEFI specs, the original IBM manuals is as authoritative as you get.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I grabbed my copy of the manuals and verified the information you want can be found in the &quot;IBM Personal Computer Technical Reference manual&quot; page 1-223 through 1-250. On page 1-226 the manual explains that &quot;bit 3 of the modem control register must be set to 1 (high)&quot; to enable interrupts. Oddly the description of bit 3 in the MCR on page 1-245 makes no mention of this. Also on page D-88 of that same manual you will find the schematic of the original &quot;Asynchronous Communication Adapter&quot; which shows OUT2 (pin 31 of the 8250) connected to the gate control of a 74ls125 which blocks the INTRPT signal (pin 31 of the 8250).&lt;/p&gt;&#xA;" OwnerUserId="9123" LastActivityDate="2018-07-09T00:39:16.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6991" PostTypeId="1" AcceptedAnswerId="7003" CreationDate="2018-07-09T01:03:52.047" Score="6" ViewCount="700" Body="&lt;p&gt;I have a kernel in my 6502 game that writes two dots to a sprite, so for example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;........&#xA;........&#xA;.XX..XX.&#xA;.XX..XX.&#xA;........&#xA;........&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Either 0, 1, or 2 dots can be on at a time. This is done one scanline at a time, so we're only looking at how to write the middle two lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I've implemented this by doing the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The accumulator is set to 0b01100000&lt;/li&gt;&#xA;&lt;li&gt;X is set to 0b00000110&lt;/li&gt;&#xA;&lt;li&gt;For the left dot, I use &lt;code&gt;STA $1B&lt;/code&gt; (3 cycles) to only turn that dot on.&lt;/li&gt;&#xA;&lt;li&gt;For the right dot, I use &lt;code&gt;STX $1B&lt;/code&gt; (3 cycles) to turn that dot on.&lt;/li&gt;&#xA;&lt;li&gt;For both dots, I can use the undocumented instruction SAX ($87) to write A | X to the value, so &lt;code&gt;SAX $1B&lt;/code&gt; (3 cycles) to turn both on.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;But if I need to turn both dots off, the quickest way I know of to write 0b00000000 to a register is to store $00 in Y and then write it. Of course, this means I can't use Y for other purposes in my code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't need a trick that takes 3 cycles (4 or 5 are fine) but are there any possibilities, without consuming a register, to write 0x00 to a memory location in zero page on the 6502?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; The above description of the problem is incorrect (see comments). I actually set A=01100000, X=00000110, Y=01100110, and use SAX to write $00. The question as posed (writing 0x00 to a register without storing 0x00 in a register) is still answered in the replies.&lt;/p&gt;&#xA;" OwnerUserId="9124" LastEditorUserId="9124" LastEditDate="2018-07-11T00:58:35.170" LastActivityDate="2018-07-11T00:58:35.170" Title="Fastest way to write 0x00 to a zero-page memory location? (6502, Atari 2600)" Tags="&lt;memory&gt;&lt;6502&gt;&lt;atari&gt;&lt;atari-2600&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="6993" PostTypeId="2" ParentId="6976" CreationDate="2018-07-09T03:42:53.657" Score="9" Body="&lt;p&gt;It was because I forgot to plug a jumper into a socket that switches it from a 240V AC input to 120V AC input (socket M5). I simply forgot to plug it in. That's not the ONLY thing I did wrong, but it's the one that mattered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a complete list of ways in which I nubbed this up, for future readers benefit:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I forgot the 120 V AC plug (see above)&lt;/li&gt;&#xA;&lt;li&gt;I tested the power supply without a dummy load, &lt;a href=&quot;https://electronics.stackexchange.com/questions/80547/operating-a-switched-mode-power-supply-without-a-load&quot;&gt;possibly damaging it&lt;/a&gt; and causing all of the output voltages to be way too high (~1.5x, once I corrected the above)&lt;/li&gt;&#xA;&lt;li&gt;I discharged the capacitors with my finger (ouch!)&lt;/li&gt;&#xA;&lt;li&gt;I discharged the capacitors with a screw driver a half-dozen times, &lt;a href=&quot;https://electronics.stackexchange.com/questions/13198/why-shouldnt-electrolytic-capacitors-be-short-circuited&quot;&gt;probably damaging them&lt;/a&gt; (I now made myself &lt;a href=&quot;https://electronics.stackexchange.com/questions/52289/how-to-safely-discharge-high-voltage-42-v-capacitors&quot;&gt;a discharging thingy&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;I forgot to clean off the flux&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The good news is, my monitor is as good as new! Well, as good as it was before I decided I would &quot;improve&quot; it by replacing the capacitors (granted, two line filter capacitors had actually blown up, so it wasn't without reason). The picture is still off-center and too blue, but I'll save those adjustments for another day...&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2018-07-09T03:42:53.657" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6994" PostTypeId="2" ParentId="6979" CreationDate="2018-07-09T04:50:34.053" Score="5" Body="&lt;p&gt;Source code compatibility (via assembly language translation) with the 8080/8085, as mentioned in the question, was a major design consideration with the 8086.  To bootstrap the usefulness of the processor and get it into real systems as quickly as possible, allowing producers of existing software (especially CP/M) to get that software to work on the 8086 almost effortlessly was critical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, as we've discussed here before, &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6500/the-start-of-x86-intel-8080-vs-intel-8086&quot;&gt;the conversion process needs to replace some single byte instructions on the 8080 with multiple byte instructions on the 8086&lt;/a&gt;.  Therefore, a program running on CP/M-80 that used the full 64KB of RAM couldn't run inside a single CP/M-86 16-bit segment, as its code may well expand to a large enough size that there's no longer enough space for its data.  In order to allow easy conversion, there needed to be a way of separating the code and data segments to allow more memory than 64KB to be used by a single process, without needing to change data formats by using pointers longer than 16 bits (which would disrupt source compatibility for programs written in assembly language, which many of the big CP/M programs were).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The segmented model allows a program to set its CS and DS/SS registers to different values and therefore trivially expand from 64KB maximum to 128KB maximum.  Doing so simply requires the addition of a very short piece of code to the process startup, making it easy to add without needing to disrupt the existing code.  Using a 32-bit offset register or something similar could have worked too, but would have been more complex and wouldn't necessarily have made the processor any more useful, at least in the near term.  And because nobody was expecting a microprocessor design to last as long as the 8086 eventually did (there had never been anything even remotely as long-lived designed before it), the near term was all that was considered.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-07-09T04:50:34.053" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6995" PostTypeId="1" CreationDate="2018-07-09T06:39:20.400" Score="10" ViewCount="3308" Body="&lt;p&gt;Most information online states that the 80286 (or iAPX 286 as it was initially known) was first available in February 1982.  But information about it from this time is hard to come by, and famously it was not used in PC-class computers for multiple years after this date.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, according to the &lt;a href=&quot;http://www.easy68k.com/paulrsm/dg/dg10.htm&quot; rel=&quot;noreferrer&quot;&gt;June 1982 issue of DTACK Grounded&lt;/a&gt;, it was not actually available at date of writing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to figure out when a homebrew computer designer would have first been able to get their hands on a 286, and roughly what kind of budget they'd need to build a system using one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When was the 286 first available for purchase by end users (by which I mean when were the chips themselves available, not when the first commercially produced computer using them became available), and what was its cost?&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="5154" LastEditDate="2018-07-10T12:20:28.680" LastActivityDate="2021-01-13T11:33:39.700" Title="80286 pricing and availability" Tags="&lt;history&gt;&lt;80286&gt;&lt;cost&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6996" PostTypeId="2" ParentId="6979" CreationDate="2018-07-09T07:30:13.437" Score="7" Body="&lt;p&gt;The 8086/8088 is designed to be a 16-bit CPU which means that its registers are all 16 bit wide. You can address 64kB with a 16-bit pointer, but the designers wanted to address more. So what are the options?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can add special registers that are larger than 16 bits. This would have complicated a lot of things: increasing all registers would have been expensive and hindered porting existing code (easy porting from 8080 was an explicit design goal), mixing 16-bit and larger registers would have been cumbersome (and likely also expensive and hindering portability). Further, a more complicated design would have delayed the project and Intel wanted the 8086 to get to market fast (the 8086 was seen as a temporary solution by Intel at the time, as far as I can remember).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you can divide pointers into two parts. This is what Intel has chosen: it was a simple solution to get 20 bit pointers. Theres a dedicated adder in the BIU (Bus Interface Unit) which simply shifts one 16-bit value by 4 to the left and then adds another 16-bit value. This was very simple to implement and also fast. As mentioned it other more detailed answers, it also made it easy to port 8080 code. It's a &quot;cheap&quot; solution to address more than 64kB on an 16-bit CPU and was a good fit for the design goals of the 8086.&lt;/p&gt;&#xA;" OwnerUserId="793" LastActivityDate="2018-07-09T07:30:13.437" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6997" PostTypeId="2" ParentId="6995" CreationDate="2018-07-09T07:47:09.217" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;When was the 286 first available for purchase by end users&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, this of course depends a lot on the values of &lt;em&gt;'Available for Purchase'&lt;/em&gt; and &lt;em&gt;'End User'&lt;/em&gt;. Is the question about the chip, boards with a 286, or polished turnkey systems including some IBM compatibility?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's about general availability of working boards, it may be as early as late 1982/early 1983 when Intel started selling their &lt;a href=&quot;http://www.nj7p.org/Computers/Multibus/SBC/Intel-286_10/286_10_computer.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;iSBC 286 Multibus board&lt;/a&gt;, as well as systems based thereon (30?). S.C.&amp;nbsp;Digital started selling their &lt;a href=&quot;http://www.s100computers.com/Hardware%20Folder/SC%20Digital/286%20CPU/286CPU.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;80286 S-100 board&lt;/a&gt; in January of 1983. Lomas introduced their S-100 based Lightning 286 in March 1983. There was a whole wave of 80286 S-100 boards in 1983-1984.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's safe to assume that turnkey 286 systems (S100 or Multibus) could be bought starting in Spring 1983.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and what was its cost?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That will need a bit more magazine flipping, as I assume you want real sales prices, not just announcements, right?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-07-09T14:44:44.880" LastActivityDate="2018-07-09T14:44:44.880" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6998" PostTypeId="2" ParentId="6995" CreationDate="2018-07-09T09:35:18.263" Score="11" Body="&lt;p&gt;&lt;a href=&quot;https://books.google.de/books?id=-Ukz6hjZEA4C&amp;amp;printsec=frontcover&amp;amp;hl=de&amp;amp;source=gbs_ge_summary_r&amp;amp;cad=0#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;PC Magazine 11/1984&lt;/a&gt; was first reporting about the PC/AT 5170. They quote a price tag of 3800 USD for the low end configuration with 256 KiB and 5800 USD for the high end configuration with 512 KiB RAM and 20 MiB HDD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PC clone manufactures to produce 80286 based AT compatibles would have taken at least until 1985. You can try to find the first ads in PC Magazine via Google Books...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue &lt;a href=&quot;https://books.google.de/books?id=D0O_-ER3Z_gC&amp;amp;printsec=frontcover&amp;amp;dq=pc%20magazine%2012/1984&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=0ahUKEwigoc-325HcAhXOC-wKHSu7Br8Q6wEILDAA#v=onepage&amp;amp;q=286&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;12/1984&lt;/a&gt; already has seller advertising the 80287 for 350 USD. At that time obviously intended as an upgrade for the IBM 5170.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By &lt;a href=&quot;https://books.google.de/books?id=wtckANahGXIC&amp;amp;printsec=frontcover&amp;amp;dq=pc%20magazine%206/1985&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=0ahUKEwjm0OWW3JHcAhVQyKQKHYW4DzAQ6wEIWTAI#v=onepage&amp;amp;q=286&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;August 1984&lt;/a&gt; Wave Mate was offering an 80286 upgrade board for the original IBM XT, starting at 1995 USD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By &lt;a href=&quot;https://books.google.de/books?id=9NSDMoEcJPcC&amp;amp;printsec=frontcover&amp;amp;dq=pc%20magazine%2012/1985&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=0ahUKEwilx-PS3JHcAhXDKewKHVGuATsQ6wEIKTAA#v=onepage&amp;amp;q=286&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;the end of 1985&lt;/a&gt; more XT clones with 80286 were announced. Still no AT compatibles, but obviously manufacturers were using XT tech to bridge the gap until true AT compatible mainboards became available. The Kaypro 286 reviewed in that same issue seems to be already AT compatible. It's entry price is stated at 3000 USD for the 512 KiB FDD only version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amusing side note: &lt;a href=&quot;https://books.google.de/books?id=9NSDMoEcJPcC&amp;amp;lpg=PP1&amp;amp;dq=pc%20magazine%2012%2F1985&amp;amp;hl=de&amp;amp;pg=PA136#v=onepage&amp;amp;q=286&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;p136&lt;/a&gt; talks about overclocking the 286 from 6 to 8 MHz...&lt;/p&gt;&#xA;" OwnerUserId="8337" LastEditorUserId="8337" LastEditDate="2018-07-09T09:41:41.117" LastActivityDate="2018-07-09T09:41:41.117" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6999" PostTypeId="2" ParentId="6995" CreationDate="2018-07-09T13:41:42.703" Score="-1" Body="&lt;p&gt;The first AT compatible was made by Kaypro, available July 1985.  Cost $4500 for the base model with 512K RAM and two 1.2Mb floppy drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.atarimagazines.com/creative/v11n7/25_Kaypro_286i_the_first_PC.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.atarimagazines.com/creative/v11n7/25_Kaypro_286i_the_first_PC.php&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9133" LastActivityDate="2018-07-09T13:41:42.703" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7000" PostTypeId="2" ParentId="6981" CreationDate="2018-07-09T13:59:22.737" Score="6" Body="&lt;p&gt;One open source, non-GPL SID emulator that I have found is another one also called jsSID, but completely independent of the one linked in the original question. This one is available from &lt;a href=&quot;http://hermit.uw.hu/index.php&quot; rel=&quot;noreferrer&quot;&gt;http://hermit.uw.hu/index.php&lt;/a&gt; (latest &lt;a href=&quot;http://hermit.uw.hu/software/jsSID-0.9.1-tech_comments.zip&quot; rel=&quot;noreferrer&quot;&gt;download link&lt;/a&gt;) and contains the following license in its &lt;code&gt;README.txt&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Licenses? The license is the popular WTF license, so 'do what the fukk you want with this code'. :)&#xA;   I'd be grateful if my name/credits won't be removed from it, but otherwise feel free to use it as you wish.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The emulator is written in JavaScript and includes its own 6510 emulator as well.&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2018-07-09T13:59:22.737" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7001" PostTypeId="1" CreationDate="2018-07-10T03:35:04.810" Score="8" ViewCount="2454" Body="&lt;p&gt;I have an old IBM 5154 monitor that works pretty well. It only has two issues: the screen is off-center and the color is too blue. I found a service manual for it that describes how to fix both of these problems: there is a H center adjustment and red/green/blue adjustments that can be made to fix the color/temperature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know how to discharge the high voltage, I have an isolation transformer, and I've even replaced all of the electrolytic capacitors in the power supply after two had blown up. But, it seems to me, the only way to make these final two adjustments is while the monitor is on...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, other than using a fully isolating transformer, keeping one hand in my pocket, and not touching anything I don't have to touch, what else should I know or do before attempting this? In particular, I don't see a good way to separate the tube itself from the rest of the electronics, so I may have to reach around them to get the adjustments... thinking I may find a really long plastic screw driver to avoid getting my hands anywhere near the tube.&lt;/p&gt;&#xA;" OwnerUserId="7316" LastActivityDate="2018-07-10T16:15:28.470" Title="Safely adjusting CRT while it's on?" Tags="&lt;crt-monitor&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7002" PostTypeId="2" ParentId="7001" CreationDate="2018-07-10T04:48:54.753" Score="10" Body="&lt;p&gt;Isolating transformer won't help; the HV parts just have to be avoided&#xA;when making the picture adjustments (mainly, that's not hard).&#xA;All the red/green/blue circuitry is innocuous circa 50VDC stuff,&#xA;on the cathode end of the picture tube neck, not as hazardous&#xA;as the focus adjustment (which is an insulated control) to the only&#xA;fat HV wire at the neck.   None of the bits you touch is anywhere&#xA;near the HV which is the tube anode (near the screen),&#xA;but are on the cathode (neck, lower-voltage end).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Few if any isolating transformers can handle the ~20kV that is used&#xA;on a color picture tube anode.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2018-07-10T04:48:54.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7003" PostTypeId="2" ParentId="6991" CreationDate="2018-07-10T15:43:01.317" Score="7" Body="&lt;p&gt;My second bite of the cherry: another of the &lt;a href=&quot;http://nesdev.com/undocumented_opcodes.txt&quot; rel=&quot;noreferrer&quot;&gt;undocumented opcodes&lt;/a&gt; is SYA/SHY/SAY which will:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;AND Y register with the high byte of the target address of the argument&#xA;  + 1. Store the result in memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you were willing and able to switch your usage of &lt;code&gt;X&lt;/code&gt; and &lt;code&gt;A&lt;/code&gt; then you could have &lt;code&gt;01100000&lt;/code&gt; in X, therefore the argument you supply to &lt;code&gt;SAY&lt;/code&gt; would be &lt;code&gt;001b - b01100000&lt;/code&gt; = &lt;code&gt;ffbb&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;9C bb ff          ; SAY $ffbb,x&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So that would store &lt;code&gt;Y &amp;amp; (ff+1)&lt;/code&gt; to &lt;code&gt;ffbb + b01100000&lt;/code&gt;, i.e. it would store &lt;code&gt;Y &amp;amp; 0 = 0&lt;/code&gt; to &lt;code&gt;1b&lt;/code&gt;, in five cycles. Your &lt;code&gt;Y&lt;/code&gt; can hold anything, and isn't affected.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-07-10T15:43:01.317" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7004" PostTypeId="2" ParentId="7001" CreationDate="2018-07-10T16:15:28.470" Score="6" Body="&lt;p&gt;The plastic screwdrivers you want are known as &lt;strong&gt;TV/radio alignment tools&lt;/strong&gt;. Searching on those terms will turn them up. Radio Shack (RIP) sold a kit for under ten dollars; Amazon has sets starting in the same range. The cheap ones wear out quickly, but they should last long enough for what you need to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These protect you from high voltage, and they also help keep your body's capacitance from throwing things off. That's especially important when you're adjusting a trimmer &lt;em&gt;capacitor&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2018-07-10T16:15:28.470" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7005" PostTypeId="1" CreationDate="2018-07-10T20:27:07.507" Score="7" ViewCount="6781" Body="&lt;p&gt;There's a rumor that there's something embedded in the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_5100&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 5100&lt;/a&gt; which makes it useful for codebreaking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the legitimacy of that claim?&lt;/p&gt;&#xA;" OwnerUserId="9146" LastEditorUserId="7347" LastEditDate="2018-07-11T11:33:05.257" LastActivityDate="2019-06-09T22:54:30.400" Title="Was the IBM 5100 ever used for codebreaking?" Tags="&lt;hardware&gt;&lt;architecture&gt;&lt;microcode&gt;&lt;ibm-5100&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7006" PostTypeId="2" ParentId="7005" CreationDate="2018-07-10T21:10:42.813" Score="19" Body="&lt;p&gt;The 5100 had programmable microcode which could be used to implement crypto-specific opcodes&lt;sup&gt;1,2,3&lt;/sup&gt;.  Then there's the whole &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Titor&quot; rel=&quot;noreferrer&quot;&gt;John Titor&lt;/a&gt;&lt;sup&gt;4,5&lt;/sup&gt; thing...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Hamming_weight&quot; rel=&quot;noreferrer&quot;&gt;population count&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; I'm unaware of anyone actually having done so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;3&lt;/sup&gt; &lt;i&gt;Certain agencies&lt;/i&gt; are very interested in such things though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;4&lt;/sup&gt; Perhaps it wasn't code-breaking in the traditional sense.  If you have software with extra opcodes along with the corresponding microcode for the added instructions (but no description of the CPU's wiring or non-custom microcode) it is conceivable that you would need original 5100 hardware to determine how it would run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;5&lt;/sup&gt; No, I don't think he's for real.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-07-11T07:34:44.647" LastActivityDate="2018-07-11T07:34:44.647" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7007" PostTypeId="2" ParentId="6981" CreationDate="2018-07-11T00:45:56.653" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://github.com/cybernesto/sid-arduino-lib&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;sid-arduino-lib&lt;/code&gt;&lt;/a&gt; is &lt;strike&gt;L&lt;/strike&gt;GPL. Its downside is that it is written targeting AVR microcontrollers, so porting it to a desktop setting would be more involved.&lt;/p&gt;&#xA;" OwnerUserId="115" LastEditorUserId="439" LastEditDate="2018-07-20T18:05:45.317" LastActivityDate="2018-07-20T18:05:45.317" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7008" PostTypeId="1" AcceptedAnswerId="7010" CreationDate="2018-07-11T02:55:34.893" Score="32" ViewCount="12120" Body="&lt;p&gt;As I understand it, PC was not really competitive with Home computers until the 90’s. The PCs rise in popularity in the 80s must have been mainly in the business world. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So during that time, what other options did people have for business computers? Was it mainly the Z80-CP/M machines, or were there decent 16 bit options?&lt;/p&gt;&#xA;" OwnerUserId="9150" LastActivityDate="2019-04-29T06:20:29.367" Title="What were the real competitors to the early IBM PC?" Tags="&lt;ibm-pc&gt;" AnswerCount="18" CommentCount="19" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7009" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T03:44:47.887" Score="12" Body="&lt;p&gt;At the time probably the Apple II (and 8bit CP/M) if you were mostly doing visicalc. By the mid 80s the original Apple Mac if you were rich or Atari ST / Commodore Amiga if not - although by this time clones were widely available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Worth mentioning that 'home' computers had a business niche, the Atari ST was used in music studios and the CBM Amiga in video production into the 90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Until probably the Pentium/NT4 era most industry desktop 'PC' work was done on Unix workstations, CAD, CAM, electronics design and any heavy data-analysis was done on SGI/Sun/HP machines. They were also very popular in finance - upto the end of 90s we had trouble sourcing Suns for university because they were so much in demand for Wall st.&lt;/p&gt;&#xA;" OwnerUserId="5131" LastEditorUserId="5131" LastEditDate="2018-07-13T16:53:25.780" LastActivityDate="2018-07-13T16:53:25.780" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7010" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T04:24:29.730" Score="52" Body="&lt;p&gt;The 80s weren't homogeneous computing-wise.  I'd break it down into roughly 3 eras:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Early 80s: Atari, Commodore, Radio Shack, and Sinclair 8-bit machines (and their clones) were the most common in homes.  For games consoles, Atari was king.  Small businesses were using CP/M or Apple IIs (for Visicalc).  Video is on dedicated CP/M systems.  The Apple II was found in more affluent homes.  Bulk data processing is on mainframes.  Scientific and engineering work is largely on HP and DEC machines (PDPs and VAXen).  CP/M and S-100&lt;sup&gt;1&lt;/sup&gt; systems are common for business use, even at the high end (the Chicago Mercantile Exchange, e.g. ran on Cromemco S-100 systems until 1992 and the US military was a heavy user for logistics).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ca. 1987: 8-bit machines were gone (apart from Apple IIs in schools) and Atari and Amiga 16/32 bit machines were the main home platforms.  PC clones and Macs were found in more affluent homes.  The NES revitalized the gaming industry.  Businesses were largely on PCs at this point except for DTP, advertising, etc. (MacIntosh, ST in Germany), music (Atari ST), and video (Amiga).  Mainframes continue to be used for bulk data processing.  Workstations (Sun, Apollo, etc.) become common in science and engineering.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;End of the 80s: Atari and Amiga have all but disappeared.  Most users have switched to DOS-based PC clones (even in the home&lt;sup&gt;2&lt;/sup&gt;).  Mac is struggling but still popular with creative types.  SGI is being used for high-end graphics and video.  Sun is dominant in the workstation arena.  Mainframes continue to be used for bulk data processing (notice a trend here?).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Terminal-based computing talking to minis or mainframes was common in many businesses throughout the decade (point-of-sale, airlines, logistics, etc.).  Small businesses generally went with what they could afford (e.g. an Apple II early in the decade or a PC clone late in the decade).  The various other non-home segments largely stuck with what they had already been using even if the physical platform changed a bit: CP/M on S-100 → DOS on IBM PC, Unix on VAX → Unix on workstations, room-sized mainframes → rack-sized mainframes, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've left out a lot of the more minor players (Data General, TI, Acorn, etc.), glossed over regional differences, and skipped a few details but that's the general gist of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Though originally based around the 8080 CPU and bus, S-100 systems could and did support other architectures including the Z-80, Z-8000 (16-bit) and m68k (16/32-bit), x86 (16/32-bit), and NS-32016 (32-bit).  S-100 systems continue to be built &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/6210/79&quot;&gt;to this day&lt;/a&gt; albeit primarily in a hobbyist setting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; As Stephen Kitt pointed out, this is likely due to the availability of second-hand PCs from companies that had upgraded their desktop computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Yes I know this is broader than the question asked.  Keeping it as-is because I think it provides a good overview of the decade.  The 80s were a complex time in computing and I feel it's grossly oversimplifying things to treat the decade as a monolithic, monocultural block.)&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-07-12T21:40:17.637" LastActivityDate="2018-07-12T21:40:17.637" CommentCount="27" ContentLicense="CC BY-SA 4.0" />
  <row Id="7011" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T04:41:36.107" Score="10" Body="&lt;h2&gt;Depended on the Size of the Business&lt;/h2&gt;&#xA;&lt;h3&gt;The Smallest Businesses and Individuals in Larger Businesses&lt;/h3&gt;&#xA;&lt;p&gt;When the IBM PC first came up, the primary business uses were the same as any other standalone single-user computer: Word processing, small databases, spreadsheets, etc. This evolved quickly over the course of a few years with new 16-bit applications - WordPerfect and eventually Word, Lotus 1-2-3, dBase III, etc. - which could handle larger files and do more with those files than the equivalent 8-bit programs (WordStar, Visicalc, dBase II, etc.). It really didn't take long for the PC to dominate the general office automation market, which was key for a lot of small businesses.&lt;/p&gt;&#xA;&lt;h3&gt;Larger Businesses Needed to Share Data and Applications&lt;/h3&gt;&#xA;&lt;p&gt;But there was another market - multi-user and networked systems - where the PC took quite a while to overtake other systems. This is the market of the minicomputer - Data General, DEC, IBM System 34 &amp;amp; 38. The initial competition for this market did not come from the IBM PC &amp;amp; clones but from other microprocessor based systems such as CompuPro (I used and sold a few), Altos and many others, some but not all S-100 based, running multi-user operating systems with a bunch of dumb terminals attached. Many of these were Intel-based and provided shared CP/M family (MP/M, MP/M-86, eventually Concurrent DOS) software compatibility and relatively high speed shared data access at a time when microcomputer networks were just beginning. As noted correctly by others, the Intel microprocessor based systems were most definitely not all in the CP/M --&amp;gt; MS/PC-DOS O/S family. Many ran Unix/Xenix or various other operating systems. The main point is that the competition was a mix of both minicomputers (i.e., very different architecture from PCs or other micros) or micros with hardware &amp;amp; operating systems designed for multi-user operation.&lt;/p&gt;&#xA;&lt;p&gt;It wasn't until the 80386 became popular that PC networks became fast enough &amp;amp; easy enough (10BaseT is a lot easier to handle than Thin Ethernet) - and the computers connected with them became powerful enough and cheap enough - that a network of PCs could really compete in point-of-sale and many other vertical markets. There was actually quite an overlap because the 80386 protected mode also enabled multi-user systems (e.g., Concurrent DOS and PC-MOS/386) to run PC-compatible (e.g., direct video RAM screen writes) software on dumb terminals.&lt;/p&gt;&#xA;&lt;p&gt;Windows 3.1 was the beginning of the end for both the multi-user PC-based systems and the minicomputers. Neither of those types of systems could realistically compete with a network of cheap PCs running Windows. GUI requirements, together with ever cheaper PC clones and faster networking (100 Meg. in the mid-90s) ended the reign of the minicomputer forever.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-07-11T14:45:29.670" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7012" PostTypeId="2" ParentId="7005" CreationDate="2018-07-11T06:46:42.947" Score="6" Body="&lt;p&gt;I think the original argument (both in the &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Titor&quot; rel=&quot;nofollow noreferrer&quot;&gt;John Titor&lt;/a&gt; hoax and in &lt;a href=&quot;https://en.wikipedia.org/wiki/Steins;Gate_(TV_series)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Steins;Gate&lt;/a&gt;) goes like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM 5100 can emulate the IBM mainframe ISA (that's true, and that's how the APL running on the IBM 5100 was implemented: They took the mainframe APL implementation, because they didn't have enough time to develop a native APL. That also makes it slow...), and therefore the IBM 5100 can help to break some other unspecified programs that were written for the IBM mainframes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While that in principle is also true, it's also not particularly clever: An emulator for IBM mainframes can also be written for any other available computer, see e.g. the &lt;a href=&quot;http://www.hercules-390.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hercules&lt;/a&gt; &#xA;emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Anime series, one of the characters then goes on to use the IBM 5100 to break into CERN's computers (CERN, or &quot;SERN&quot; in Japanese spelling, gets assigned the role of the evil enemy for some reason). So I guess that could be another source for the &quot;codebreaking&quot; meme. But that's of course entirely unfounded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've never heard the argument that the IBM 5100 microcode could be used to implement cryptographic primitives in that connection (though this is also true).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Details on how the IBM 5100 emulated the IBM mainframe ISA can be found in &lt;a href=&quot;ftp://ftp.informatik.uni-stuttgart.de/pub/cm/ibm/ibm5110/aplros.asm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; listing of the &quot;APL executable ROS&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One should also note that the &quot;Microcode&quot; is a 16-bit ISA with 16 registers, not that different from a modern microcontroller ISA, and not at all like the &quot;microcode&quot; on other CPUs with a large numbers of bits used to control the various elements of the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original John Titor &lt;a href=&quot;https://timetravelinstitute.github.io/TTI-Archive/threads/time-travel-paradoxes.943/page-2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;passage&lt;/a&gt; on why he needs an IBM 5100:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I was &quot;sent&quot; to get an IBM computer system called the 5100. It was one the first portable computers made and it has the ability to read the older IBM programming langages in addition to APL and Basic. We need they system to &quot;debug&quot; various lagacy computer programs in 2036. UNIX has a problem in 2038.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2018-07-11T17:00:52.693" LastActivityDate="2018-07-11T17:00:52.693" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="7013" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T07:56:43.757" Score="6" Body="&lt;p&gt;I think that the answer very much depends on the country. In Israel, the Apple 2E was strong in schools at the beginning of the 1980s, but I never heard of people having one in their home. PC clones were the norm - I bought my first one in 1985. The Mac wasn't an option in those days as it had no support for Hebrew (right to left, special characters) and was very expensive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in terms of the original question - there was no real competitor to the IBM PC in Israel, assuming that clones are considered to be 'IBM PC'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember using Olivetti M-24 (?) in a university in around 1986.&lt;/p&gt;&#xA;" OwnerUserId="4375" LastActivityDate="2018-07-11T07:56:43.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7014" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T09:11:30.163" Score="10" Body="&lt;p&gt;The market for computers was much less globalized than you might imagine today - Nearly any major country had their &quot;preferred supplier&quot; for business computers.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Europe, the UK had Apricot, Victor and GEC/Marconi, Germany Siemens, Nixdorf and Triumph-Adler, Italy had Olivetti, France had Bull who had recently acquired Micral for small business systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early eighties, most of this companies sold MS-DOS compatible systems (but, at least at the beginning, with only limited or no compatibility with the IBM PC, like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apricot_Computers&quot; rel=&quot;noreferrer&quot;&gt;Apricot&lt;/a&gt; or &lt;a href=&quot;https://de.wikipedia.org/wiki/Siemens_PC-D&quot; rel=&quot;noreferrer&quot;&gt;Siemens PC-D&lt;/a&gt;), while still CP/M and Z-80-based systems had a market.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-07-11T14:42:01.023" LastActivityDate="2018-07-11T14:42:01.023" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7015" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T10:37:10.713" Score="5" Body="&lt;p&gt;I began my career as a programmer in the mid 80’s programming accounting software for a small software company, and our market was small to mid size companies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PC was gaining a foothold at that time, but mainly for word processing and Lotus 1-2-3 (big time). Networking was not popular and files were stored and shared on floppies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I recall, in US business, Apple Ii was popular as a “personal computer”. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond that, before the PC and networking like IBM PC LAN Manager and Novell Netware became popular, we installed many Unix systems to run our multi-user accounting system, along with “green screen” dumb terminals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We ran on Data General Nova, and Unix systems like Sun, one from Zilog based on the Z8000, based on the We32100 (AT&amp;amp;T 3b2 and others). We even did a port to a DEC MicroVAX and there was also the DEC Rainbow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our competitors often ran on IBM System/34, System/38, and System/36. The System/36 was pretty popular in the market we competed in and from what I understand, a pretty nice, reliable, capable system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While these are not “PC’s”, as in “personal”, if you are looking at what businesses used before the PC got really ubiquitous, my experience was these minicomputers and dumb terminals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn’t until the popularity of 10mb Ethernet, especially over twisted pair cable, and Netware, did we see these systems being displaced by the PC.&lt;/p&gt;&#xA;" OwnerUserId="4213" LastEditorUserId="4213" LastEditDate="2018-07-11T14:55:19.840" LastActivityDate="2018-07-11T14:55:19.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7016" PostTypeId="2" ParentId="6470" CreationDate="2018-07-11T11:05:02.097" Score="1" Body="&lt;p&gt;I did all my early windows development using Borland Turbo C. One had to exit to dos, build the program, and then re-run windows to test it.!&lt;/p&gt;&#xA;" OwnerUserId="6626" LastActivityDate="2018-07-11T11:05:02.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7017" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T11:52:12.373" Score="6" Body="&lt;p&gt;To offer a couple of machines not yet called out by name:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Japan the most popular business machine was NEC's PC-9800 series; it's 8086-based but otherwise a distinct architecture: different graphics, different audio, different expansion slots. Windows was available for it, and when that became the dominant software platform the generic PC became the dominant hardware platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the UK the most notable business machine was probably the Amstrad PCW; it's z80-based and CP/M was supplied in the box but it was primarily used in a graphical environment for word processing. It even has hardware custom designed for the task: with no software effort, each scan line of pixels has a unique start address, making vertical scrolling of any constituent part of a bitmapped display trivial.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-07-11T13:20:48.807" LastActivityDate="2018-07-11T13:20:48.807" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7018" PostTypeId="1" CreationDate="2018-07-11T12:21:50.073" Score="2" ViewCount="270" Body="&lt;p&gt;In the mid 80's, several national news outlets showed people able to reproduce a computers monitors screen at least 100ft away. How were early computers compromised like this? &lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2018-07-11T13:22:24.107" LastActivityDate="2018-07-11T13:22:24.107" Title="Spying on old computer monitor RF signals" Tags="&lt;video&gt;&lt;crt-monitor&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="2" ClosedDate="2018-07-11T14:16:34.690" ContentLicense="CC BY-SA 4.0" />
  <row Id="7019" PostTypeId="2" ParentId="7018" CreationDate="2018-07-11T12:33:18.647" Score="7" Body="&lt;p&gt;It was a timing attack — the electron gun in a CRT is instantaneously lighting only a single point, and the region lit is only that point plus a very short slither of the screen behind it where the phosphors are not yet fully dark again. But each of those is substantially less bright than the current position. You see a full 2d image through a mixture of persistence-of-vision and psychology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So such an attack just samples the amount of light emanating from the monitor as a whole, e.g. through the amount falling on an operator's face or anything else in the room, at a very high rate and reconstructs the original scan from that. Some human intervention may be necessary as sync signals cannot reliably be detected — no electrons are fired during those periods so you could figure it out if the screen were otherwise entirely lit but anything like text on a black background spends a lot of time not generating light for reasons other than sync.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern monitors light the entire surface the whole time. So they're not susceptible to the same attack.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-07-11T12:33:18.647" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7020" PostTypeId="2" ParentId="6470" CreationDate="2018-07-11T12:43:57.787" Score="1" Body="&lt;p&gt;At a minimum, Borland quickly supported win3.xxx either at the same time or close to 1992 with their OOP release. I remember being able to make both Turbo C and Turbo Pascal programs with a module. Borland released a &lt;a href=&quot;https://en.wikipedia.org/wiki/Turbo_Pascal&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;&lt;em&gt;Win TPU Unit&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; for their older Borland DOS releases.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1992 Borland released two versions named &lt;strong&gt;&lt;em&gt;&quot;Turbo Pascal for Windows&quot; (TPW)&lt;/em&gt;&lt;/strong&gt;, for Windows 3.x: TPW 1.0, based on Turbo Pascal 6, and later TPW 1.5; they were succeeded by Borland Pascal 7, which had Windows support. The Windows compiler in Pascal 7 was titled &lt;strong&gt;'Borland Pascal for Windows'&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both versions built Windows-compatible programs, and featured a Windows-based IDE, as opposed to the DOS-based IDE in Turbo Pascal. The IDE and editor commands conformed to the Microsoft Windows user interface guidelines instead of the classic TP user interface. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Turbo Pascal was superseded for the Windows platform by Delphi; the Delphi compiler can produce console programs in addition to GUI applications, so that the use of Turbo and Borland Pascal became unnecessary. &lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2018-07-12T07:10:41.403" LastActivityDate="2018-07-12T07:10:41.403" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7021" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T13:33:52.160" Score="1" Body="&lt;h1&gt;Unix&lt;/h1&gt;&#xA;&lt;p&gt;In many of the more relaxed businesses on the Outer Eastern Rim of the Galaxy, the PC had already supplanted the great Unix as the standard operating system of all knowledge and wisdom, for though it has many omissions and contains much that is apocryphal, or at least wildly inaccurate, it scores over the older, more pedestrian work in two important respects. First, it is slightly cheaper; and secondly it has the words DON'T PANIC (&lt;strong&gt;IBM badge&lt;/strong&gt;) inscribed in large friendly letters on its cover.&lt;/p&gt;&#xA;&lt;h1&gt;Home computing&lt;/h1&gt;&#xA;&lt;p&gt;The PC had nothing to offer, except the sexy &lt;strong&gt;IBM badge&lt;/strong&gt;. It was slow and had poor graphics and poor sound, but slightly more RAM, to put the text into. Although the PC had 640Kbytes, as opposed to the Amiga 512Kbytes. It used most of this just to get started. 7 floppies of Dos (PC), less than one floppy for Amiga.&lt;/p&gt;&#xA;&lt;p&gt;The unmodified Amiga 1000 (1985) was still ahead, in the home market, and most of business in 1995. Most home users and business were still using windows-95, windows-98, windows-me in 2000. However OS2-Warp and NT, had much over the Amiga. It is hard to say when the PC overtook the Amiga, as the Amiga still (in 2018) has many features that are better then MS-Windows. For me it was the point that I installed Gnu/Linux on a PC, though back then, the fonts were so bad.&lt;/p&gt;&#xA;&lt;p&gt;In 1995 I did a blind trial of an Amiga the day win95 was released, people though it was win95. Then I trialled win 95. They were disappointed, and asked about the system they tried before.&lt;/p&gt;&#xA;" OwnerUserId="9036" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-07-11T19:17:30.040" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="7022" PostTypeId="2" ParentId="6972" CreationDate="2018-07-11T13:58:45.230" Score="6" Body="&lt;p&gt;The purpose of those error blocks is to emulate copy protection. It's not enough to do error recovery. You'd need to make copies in the &lt;code&gt;G64&lt;/code&gt; format which is made from the raw GCR stream.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The error block simply instructs the emulator to raise the error number when trying to access a sector that is tagged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd expect that any sector with a non-zero entry wouldn't contain any usable information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Detailed information about the &lt;code&gt;D64&lt;/code&gt; and &lt;code&gt;G64&lt;/code&gt; can be found here:&#xA;&lt;a href=&quot;http://unusedino.de/ec64/technical/formats/d64.html&quot; rel=&quot;noreferrer&quot;&gt;http://unusedino.de/ec64/technical/formats/d64.html&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.unusedino.de/ec64/technical/formats/g64.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.unusedino.de/ec64/technical/formats/g64.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2054" LastActivityDate="2018-07-11T13:58:45.230" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7023" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T15:17:47.677" Score="16" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;As I understand it, PC was not really competitive with Home computers until the 90’s. The PCs rise in popularity in the 80s must have been mainly in the business world.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes and no. Unlike often implied, the line between business and home/private is not only blurry but in fact never really existed. Even machines that were clearly meant for one 'side' ended up on the 'other'. For example, I knew several people during the early 80s who had outright professional systems at home as hobbyists. Like a 15 year old who got himself, in 1985, a multi-user Unix system to 'play' with - mind you, that thing was a large box with character based terminals. Real bulky ones, not emulations.&lt;/p&gt;&#xA;&lt;p&gt;Or ZX81 systems that have been used (and sold!) as POS systems for small shops. Similarly, there was a lot of professional use of computers like C64 or CPC. Just think Open/Libre Office - a package that started out as a collection of office application (starting with a text processor) for the Amstrad/Schneider CPC series.&lt;/p&gt;&#xA;&lt;p&gt;The most cunning example to me was a quite successful software (considering the special and small market) for wood farmers to mange their 'crop'. One may think this the typical environment for some mid-sized software house to deliver a custom solution. Well, no, it was C64-based and written by a farmer's son. The story goes that the farmer bought his sons a C64, and after a few weeks he started complaining that they should not play games so much but make something useful with their time. So one of the boys started to write a simple calculation program to add up harvested wood, from the usual measurements they brought home, to print out a sum sheet. This small BASIC program soon evolved to an application managing what's necessary to handle the woods as well as sales and, most important, accumulating and preparing all the numbers needed for reporting to various trade organizations and government offices - it's really hard to imagine the bureaucracy around something as seemingly simple as growing trees. That software soon became a standard application, and farmers were buying C64s all the way until they vanished to run that software. It got ported (and rewritten) to MS-DOS in the early 1990s, but there have been users known asking for service with their C64 version as late as 2012.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line, it is almost impossible to draw a rigid line between business or leisure based on the machine used. And even when one thinks there could be one, it gets busted when looking across country borders.&lt;/p&gt;&#xA;&lt;p&gt;For example during the second half of the 1980s, Amiga and Atari ST scored worldwide, but the usage differed greatly. In the US, both machines where mainly home computers with a clear leaning toward games. In Europe there was a clear differentiation. While the Amiga was mostly a home/game machine, The Atari ST was seen as a business computer, challenging not only the IBM in the small business market, but also Apple for desktop publishing.&lt;/p&gt;&#xA;&lt;p&gt;It's important to keep in mind that the term &amp;quot;Personal Computer&amp;quot; never was about IBM's PC in the first place. It describes a general purpose machine for personal use, even though the clever attempt by IBM to tie the term to its architecture did twist the views we have. It's just too convenient to see the IBM PC as a synonym to Personal Computer. Isn't it?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So during that time, what other options did people have for business computers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As today: whatever suits your needs - and is available.&lt;/p&gt;&#xA;&lt;p&gt;The offerings back then were much more diverse, as well as the expectation was much lower. At that time it was &lt;em&gt;no computer&lt;/em&gt; vs. &lt;em&gt;some computer&lt;/em&gt;. Having any computer for the job had much more impact than which computer it was.&lt;/p&gt;&#xA;&lt;p&gt;Not only were computers quite different and evolving back than, users were as well. In the early 1980s potential users still had to be convinced that a computer could be helpful. A &lt;em&gt;'what do I need a computer for'&lt;/em&gt; mindset was commonplace. People could not imagine what it means to have one (*1,2). While the word processing challenge was basically solved by micros in 1980, typewriters still outsold microcomputers by large margins. Heck, even IBM stayed in the typewriter business until 1991, when it finally sold the typewriter division (including small printers and keyboards), which in turn became &lt;a href=&quot;https://de.wikipedia.org/wiki/Lexmark&quot; rel=&quot;noreferrer&quot;&gt;Lexmark&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So, it must be asked what 'that time' is supposed to mean. 1977 or 1989? It's just 12 years, but the changes during that time where greater than during the following 30 years.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was it mainly the Z80-CP/M machines, or were there decent 16 bit options?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Due to the issues described (time, region and personal computer as generic machine), there can be no simple answer. Lets try to cover it by time. Also, I will exclude upper-end offerings like HP's 9100 or 9800 machines or IBM's 5100, as I think the scope of this question is rather about microcomputers and such available to a broader audience - especially less well funded ones :))&lt;/p&gt;&#xA;&lt;p&gt;Also it's helpful to keep in mind that this can only be a rough scratch thru what was available.&lt;/p&gt;&#xA;&lt;h3&gt;Pre 1980:&lt;/h3&gt;&#xA;&lt;p&gt;Next to any microcomputer could have been used as Business system. There was no clear distinction at all.&lt;/p&gt;&#xA;&lt;p&gt;For one, 8080/Z80 based S100 bus evolved quickly from a hobby concept into a viable line of open hard- and software. Much like the IBM PC and MS-DOS, S100 plus CP/M became a cornerstone of the market. Not as prevalent, but especially in the US a major force. Then again Apple with its Apple II (and ill fated III), Commodore with their PETs and Tandy's machines were major players. Similarly many (today lesser known) companies like &lt;a href=&quot;https://en.wikipedia.org/wiki/Ohio_Scientific&quot; rel=&quot;noreferrer&quot;&gt;Ohio Scientific&lt;/a&gt;, &lt;a href=&quot;http://www.bytecollector.com/the_digital_group.htm&quot; rel=&quot;noreferrer&quot;&gt;The Digital Group&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Exidy_Sorcerer&quot; rel=&quot;noreferrer&quot;&gt;Exidy&lt;/a&gt; had considerable shares 'on the Business Side'. Each with their own OS and their own software. Choosing 'the right' system was rather random, even when picking one of the larger firms.&lt;/p&gt;&#xA;&lt;p&gt;Outside the US the market was even more diverse. In (Western) Europe, Commodore is eventually the only one with a strong market impact. The PET/CBM computers were seen as iconic business machines, rarely sold as home computers. Others like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Nascom_(computer_kit)&quot; rel=&quot;noreferrer&quot;&gt;NASCOM 1/2&lt;/a&gt;, the &lt;a href=&quot;http://www.waltroper-aufbruch.de/Archiv/images/KISS_Helmut%20Wiertalla_Basis%20der%20P2.jpg&quot; rel=&quot;noreferrer&quot;&gt;KISS&lt;/a&gt; developed by &lt;a href=&quot;http://www.waltroper-aufbruch.de/Archiv/images/SKS_Karlruhe_1977Dipl-Ing%20Helmut_Wiertalla_web.jpg&quot; rel=&quot;noreferrer&quot;&gt;SKS&lt;/a&gt; (later sold by &lt;a href=&quot;https://de.wikipedia.org/wiki/Triumph-Adler&quot; rel=&quot;noreferrer&quot;&gt;Triumph-Adler&lt;/a&gt; as &lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?c=484&quot; rel=&quot;noreferrer&quot;&gt;Alphatronic P1/P2&lt;/a&gt;), the British &lt;a href=&quot;https://en.wikipedia.org/wiki/PSI_Comp_80&quot; rel=&quot;noreferrer&quot;&gt;PSI Comp 80&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Luxor_AB&quot; rel=&quot;noreferrer&quot;&gt;Luxor&lt;/a&gt;'s &lt;a href=&quot;https://en.wikipedia.org/wiki/ABC_80&quot; rel=&quot;noreferrer&quot;&gt;ABC-80&lt;/a&gt; made their way as well, together with individual imports of US machines.&lt;/p&gt;&#xA;&lt;p&gt;Further east there was (not least due to the nonexistence of individual small business) a wasteland and way far east Japan had their own culture of upcoming business computers. Eventually with &lt;a href=&quot;https://en.wikipedia.org/wiki/Sord_Computer_Corporation&quot; rel=&quot;noreferrer&quot;&gt;Sord&lt;/a&gt; as the most prominent early manufacturer with its &lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?c=469&amp;amp;st=1&quot; rel=&quot;noreferrer&quot;&gt;M100/200&lt;/a&gt; series, as well as Sharp with their MZ machines. NEC started into the SOHO market as well its very successful &lt;a href=&quot;https://en.wikipedia.org/wiki/PC-8000_series&quot; rel=&quot;noreferrer&quot;&gt;PC-8000&lt;/a&gt; series.&lt;/p&gt;&#xA;&lt;h3&gt;1980-1984&lt;/h3&gt;&#xA;&lt;p&gt;If the late 70s were the real punk age of computers (everyone able to hold a soldering iron started a computer company), the early 80s brought commercialization of punk. Punk computers where still everything but gray, just now made to business plans, not by enthusiasts growing into a business. In general Apple, Commodore and Tandy widened their sales and extended their proprietary machines. Compatible computers started to pop up. Not only the sheer endless number of Apple II clones, led by &lt;a href=&quot;https://en.wikipedia.org/wiki/Franklin_Electronic_Publishers&quot; rel=&quot;noreferrer&quot;&gt;Franklin&lt;/a&gt;, but also TRS-80 clones like Lobo's &lt;a href=&quot;https://en.wikipedia.org/wiki/Max-80&quot; rel=&quot;noreferrer&quot;&gt;Max-80&lt;/a&gt; or EACA's &lt;a href=&quot;https://en.wikipedia.org/wiki/Video_Genie&quot; rel=&quot;noreferrer&quot;&gt;Video Genie&lt;/a&gt;. All serious candidates for business use. Interestingly, where Commodore made its name in Europe as business computer, Apple gained an incredibly strong foothold in the US in education.&lt;/p&gt;&#xA;&lt;p&gt;In Europe Apple, in the form of Taiwanese clones, made some inroads among university students, especially in engineering. Professional microcomputer systems got continued and expanded, like Luxor's &lt;a href=&quot;https://en.wikipedia.org/wiki/ABC_800&quot; rel=&quot;noreferrer&quot;&gt;ABC-800&lt;/a&gt;, or new upper end developments like &lt;a href=&quot;https://de.wikipedia.org/wiki/Kontron_PSI_80&quot; rel=&quot;noreferrer&quot;&gt;Kontron's PSI-80&lt;/a&gt; (*3,4) became available. Many well known office (e.g. &lt;a href=&quot;https://de.wikipedia.org/wiki/Olympia-Werke&quot; rel=&quot;noreferrer&quot;&gt;Olympia&lt;/a&gt; with their &lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?c=95&amp;amp;st=1&quot; rel=&quot;noreferrer&quot;&gt;BOSS&lt;/a&gt; line) or engineering companies (&lt;a href=&quot;https://en.wikipedia.org/wiki/Kienzle_Computer&quot; rel=&quot;noreferrer&quot;&gt;Kienzle&lt;/a&gt;, &lt;a href=&quot;http://computermuseum.informatik.uni-stuttgart.de/dev/dds1/&quot; rel=&quot;noreferrer&quot;&gt;Diehl&lt;/a&gt; etc.) entered the market. Notable here may be Philips with their &lt;a href=&quot;https://en.wikipedia.org/wiki/Philips_P2000&quot; rel=&quot;noreferrer&quot;&gt;P2000 series&lt;/a&gt;. While the P2000T was targeted as a home machine, the P2000M was meant as a small business computer with its colour adaptor replaced by a 80x24 B&amp;amp;W. In addition the 1983 P2000C was a portable business machine much like the IBM or Compaq Portable of the same time frame - except being an exceptionally fast dual Z80 CP/M computer.&lt;/p&gt;&#xA;&lt;p&gt;While late 1981 also marked the introduction of the IBM PC, it  wasn't by any means set as a future success. Sure, a big brand, but there were many others, especially outside the US, competing with their machines. A notable competition was the Sirius 1 - at least in Europe - where it not only made IBM postpone the introduction of its PC, but also outsold the PC well into 1984.&lt;/p&gt;&#xA;&lt;p&gt;1984 can be seen as a turning point. For one it brought the (in Europe) quite successful CPC series which operated at the lower end of SOHO - not at least to the green monitor offered by default. It has been already mentioned, that the origin of Star Office, which later became Libre Office, was on the CPC. And machines like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apricot_Computers&quot; rel=&quot;noreferrer&quot;&gt;Apricot F1&lt;/a&gt;, notable for its attempt to be compatible to the IBM and advanced at the same time - not to mention its style. In the US Tandy finally turned their business onto the IBM PC track with their &lt;a href=&quot;https://en.wikipedia.org/wiki/Tandy_1000&quot; rel=&quot;noreferrer&quot;&gt;Tandy 1000&lt;/a&gt; series (After doing the &lt;a href=&quot;https://en.wikipedia.org/wiki/Tandy_2000&quot; rel=&quot;noreferrer&quot;&gt;2000&lt;/a&gt; in 1983).&lt;/p&gt;&#xA;&lt;p&gt;Oh, and then there was the Mac :))&lt;/p&gt;&#xA;&lt;h3&gt;1985-1990&lt;/h3&gt;&#xA;&lt;p&gt;1985 marks maybe the last time non-compatible machines were not only introduced but managed to get a considerable marketing share. Starting with Amstrad's &lt;a href=&quot;https://en.wikipedia.org/wiki/Amstrad_PCW&quot; rel=&quot;noreferrer&quot;&gt;PCW/Joyce&lt;/a&gt;, an all-in-one design based on a Z80 with 256 or 512 KiB Ram running &lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M#CP/M_Plus&quot; rel=&quot;noreferrer&quot;&gt;CP/M 3.0&lt;/a&gt; with floppies and printer and built-in screen. The machine was such a success in the small business market that it became the second best selling PC in all of Europe in 1985 and 1986 with a market share of 20% (IBM ~33%). In England it might even have been the absolute #1. Its success led to production until 1998(!) - a 4 MHz Z80 competing until a time when a 400 MHz Pentium II was state of the art in PCs (*5). The success was not at least due to the extremely competitive price. Usually less than a third of a similar configured PC-clone. Seems like it was a great choice for business.&lt;/p&gt;&#xA;&lt;p&gt;1985 is also the year of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_ST&quot; rel=&quot;noreferrer&quot;&gt;Atari ST&lt;/a&gt;. While this machine may have been more of a home computer in the US (*6), it was an instant success as a business machine in Europe. With the (for back then) incredibly good B&amp;amp;W screen, while at the same time way lower priced than a PC, but able to read/write its formats (*7), it became a first class choice for small business, not at least for text processing with software like &lt;a href=&quot;https://en.wikipedia.org/wiki/1st_Word/1st_Word_Plus&quot; rel=&quot;noreferrer&quot;&gt;1st Word&lt;/a&gt; and &lt;a href=&quot;https://de.wikipedia.org/wiki/Papyrus_Autor&quot; rel=&quot;noreferrer&quot;&gt;ROM-Papyrus&lt;/a&gt; up to full figured desktop publishing with titles like &lt;a href=&quot;https://en.wikipedia.org/wiki/Calamus_(DTP)&quot; rel=&quot;noreferrer&quot;&gt;Calamus&lt;/a&gt; and &lt;a href=&quot;http://www.pagestream.org/&quot; rel=&quot;noreferrer&quot;&gt;Pagestream&lt;/a&gt; (*8). Not to mention that several Autodesk products of today had their origin on the Atari during the 1980s, like 3dsMax and Animator.&lt;/p&gt;&#xA;&lt;h3&gt;After 1990&lt;/h3&gt;&#xA;&lt;p&gt;1990 brought something like a last push for different machines. Amstrad revitalized the CPC and Joyce line, Atari got the TT, Acorn the Archimedes ... and IBM the PS/1. All great machines for the SOHO market. Still, with the success of VGA and its successors, as well as with 486 systems, 1990 marks the point where IBM-compatible PC hardware had reached or surpassed the advantage of other designs, while at the same time prices, mostly due to Taiwanese competition, were driven so low, that the price advantage as well vanished.&lt;/p&gt;&#xA;&lt;p&gt;As a result, competing architectures went into a decline. New business was more and more made with compatible PCs, while non compatible mostly got sold to an existing user base for replacement of older generations. Usually to save existing user experience and (data) compatibility. Since many standard applications got ported to the PC during that time, this became less of an issue ... and the rest is history :))&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Well, or not:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3&gt;After 2000&lt;/h3&gt;&#xA;&lt;p&gt;The market for 'incompatible' systems isn't as dead as it may seem. Just think about Chromebooks, ARM/Linux based tablets and not at least phones and other handheld devices for business needs.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Somewhat reminiscent of the typewriter, when &lt;a href=&quot;http://articles.latimes.com/1988-09-12/business/fi-1396_1_electronic-typewriters&quot; rel=&quot;noreferrer&quot;&gt;people complained&lt;/a&gt; that it'll be so much more expensive and less flexible than handwriting :))&lt;/p&gt;&#xA;&lt;p&gt;*2 - &lt;a href=&quot;https://books.google.de/books?id=yS4EAAAAMBAJ&amp;amp;lpg=PA66&amp;amp;ots=SOcBY_mEIm&amp;amp;pg=PA66&amp;amp;redir_esc=y#v=onepage&amp;amp;q&amp;amp;f=true&quot; rel=&quot;noreferrer&quot;&gt;In a 1984(!) interview&lt;/a&gt; strategic director Steve Leininger of Tandy admitted  that &lt;em&gt;&amp;quot;As an industry we haven't found any compelling reason to buy a computer for the home. Word processing, yes. Real business type applications, financial modelling&lt;/em&gt; (aka Spreadsheets), &lt;em&gt;maybe&amp;quot;&lt;/em&gt;. A statement that quite well reflects the general attitude toward microcomputers in the early 1980s.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Not to be confused with the aforementioned PSI Comp 80.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Their OS is a quite interesting one. While offering a CP/M 2.2 compatible API, the OS itself was multitasking and multiuser based on hard time slices and optimized for real time response.&lt;/p&gt;&#xA;&lt;p&gt;*5 - The incredible success of the PCW/Joyce also made media suppliers to compete in the market for 3&amp;quot; disks. When Amstrad adopted the 3&amp;quot; for the CPC, supply of disks was rather meagre and only became reliable after 1985.&lt;/p&gt;&#xA;&lt;p&gt;*6 - And a unique success among musicians due to the built in MIDI. Today's &lt;a href=&quot;https://de.wikipedia.org/wiki/Logic_Pro&quot; rel=&quot;noreferrer&quot;&gt;Apple Logic Pro &lt;/a&gt; is directly based on Creator/Notator.&lt;/p&gt;&#xA;&lt;p&gt;*7 - After finding a PC with 3.5&amp;quot; disks that is :))&lt;/p&gt;&#xA;&lt;p&gt;*8 - A notable mention should go to &lt;a href=&quot;https://de.wikipedia.org/wiki/Signum_(Textverarbeitungsprogramm)&quot; rel=&quot;noreferrer&quot;&gt;Signum!&lt;/a&gt;, a word processor used still today via ST emulations on PCs, as it offered an unparalleled ability to write 'odd' and custom scripts. It has built-in functionality to define characters and fonts, something really handy for theologists who may need to cover several variations of long outdated letters within one script.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-04-28T20:56:10.283" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7024" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T15:58:20.010" Score="2" Body="&lt;p&gt;I remember a lot of dedicated DTP machines, I can't remember when these came in but they sort of bridged the gap between horrible systems like the Amstrad PCW and then Windows 3.1 when PC's reached affordable prices. I am thinking things like the Canon Starwriter which could be simply powered on and start desktop publishing in a matter of seconds. This also had spreadsheet, database, mail merge, a scanner, built in printer. They were basically the evolution of the electric typewriter (and many businesses made good use of those in the 80s, no need for PC's for simply typing up letters!) In bigger companies who had money to burn, PC's were still too luxurious and unnecessary, people who needed computing power got on terminal screens connecting to VAX (and later Alpha) servers, or in finance something like AS400 or HP3000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I miss the standalone machines and think they still have a place, once the PC's came into the office, so did solitaire...(and blue screens, and expensive IT support, and expensive software, and printers than always break down......)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://oldcomputer.info/others/canon95/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://oldcomputer.info/others/canon95/index.htm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5384" LastActivityDate="2018-07-11T15:58:20.010" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7025" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T17:06:37.270" Score="6" Body="&lt;p&gt;Interesting that all of the machines mentioned so far were contemporaries of the IBM PC, but were not competitors in how they were marketed, bundled with software, or used.&#xA;Most direct competitors of the IBM PC were produced by companies that manufactured calculators, cash registers, and other business oriented machines.  Victor, Texas Instruments, NEC, etc.  The computers were packaged as solutions for professions (medical, legal, education, etc.) and small business using word processing, spreadsheet, accounting, and vertical applications (usually still enhanced / converted and often hobbled accounting software) for customer data.&#xA;These business packages originally cost approximately $7000 to $10000 and so were hardly accessible to the consumer / home computing market.  That was left to the aforementioned Commodore, Atari, RadioShack, Apple boxes which were specifically targeted for entertainment or education use.    The relative capacity of the machines didn't really affect marketing of them nearly as much as software compatibility - &quot;IBM compatible&quot; and Microsoft were the essential seals of approval for commercial success.&lt;/p&gt;&#xA;" OwnerUserId="9157" LastActivityDate="2018-07-11T17:06:37.270" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7026" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T20:45:39.050" Score="3" Body="&lt;p&gt;Especially in the UK, the Amstrad PCW (also known as Joyce in other countries) was a popular choice for small businesses well into the 90's. While it used the aging CP/M operating system, it was an inexpensive, complete package sold with disk drive(s), printer and bundled software. The PCW being designed as a business machine only likely helped sales too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Germany, the ST was a decent PC competitor and was being marketed primarily for the education, music, publishing and scientist market. In 1987 there were already over 1000 business applications, some of them highly specialized. There were also companies (IBP, Rhothron) who specialised in &quot;disguising&quot; and upgrading the ST. One reason was to make the Atari more suitable for certain work environments, the other one was that some companies had prejudices towards anything that was not a PC or CP/M machine. Acceptance of Ataris and Amigas varied depending on the companies and the decision makers involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Businesses are also not fast in switching machines - German publishing house Burda used the Atari TT (with a special keyboard) long after Atari ceased to exist. The advantage for German businesses using Ataris was that most professional ST applications were written in Germany and with the German market in mind.&lt;/p&gt;&#xA;" OwnerUserId="5224" LastActivityDate="2018-07-11T20:45:39.050" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7027" PostTypeId="2" ParentId="7008" CreationDate="2018-07-11T21:51:52.073" Score="2" Body="&lt;p&gt;The problem with the PC early on was simply that it was a single user machine. Valuable, for sure, in its own right. But for many businesses, they needed something more. Sneaker-netting floppies get very old, very quickly as a mechanism to &quot;share&quot; data. (Anecdote, I knew a guy who was leasing a VAX 11/750 that replaced it with a PC running Lotus 1-2-3.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it came to vertical solutions (i.e. software for specific professions: auto part stores, veterinarian's, construction job costing and payroll, etc.), some kind of multi-user system was much more appropriate. Not as a need of just raw horsepower, just simply that the tasks were naturally divided up (such as the scheduling part of a dentist office done up front vs the billing and such done in the back).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M and MP/M machines rose up to fill those voids on the &quot;micro&quot; level, while a plethora of mini-computers (PICK systems, BASIC 4, Alpha Micro, along with a slew of other companies long dead) came in from above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The storm of Unix based computers had not hit yet, Unix was still coming in to its own in the early 80's. The proprietary systems ruled here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you must appreciate, the folks buying these systems really didn't &quot;care&quot; so much about the hardware, they cared about the overall solution, the software and the hardware combined. As long as the appointments got scheduled, the insurance forms filled out, and the invoices were sent and paid, the name on the box wasn't particularly important. IBM wasn't even in some of these markets, the solutions were &quot;too small&quot;. You don't roll in a IBM 4300 for 2-3 users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PC started taking up the single user market, competing most naturally with Apple and CP/M machines. Going after the Word Processing and Spreadsheet market. As a piece of hardware, the PC was a nice package, with a good pedigree. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what made the PC actually take off was the clone market. We had the early MS-DOS &quot;8088 but not a PC&quot; machines, trying to ride on the waves like the CP/M machines. But the PC was a more sophisticated machine than your generic CP/M machine. The PC offered not just the software compatibility, but hardware compatibility. The wide host of CP/M machines were quite diverse. When Compaq managed to come out with the clean room cloned PCs, the flood gates opened and the rest is history. Everyone could have the &quot;same machine&quot;, and the price wars began. (Ahh...Computer Shopper...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM PC never really penetrated the multi-user market until the late 80's and early 90's with the rise of networking, with the better processors (2-3-486s), now able to run Netware and Xenix/Unix. We ran our office on a 486/66 on SCO Unix, 10 users. No networking, just terminals plugged in to a card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other computers, the &quot;home computers&quot;, were in a different market. IBM wasn't targeting below the Apple II, going after flashy colors and sounds plugged in to a TV. It was not targeting the &quot;home&quot;, and the &quot;kids&quot;. IBM PCs were not &quot;cheap&quot;, they were more expensive than the Apple II (which, also, was not cheap).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If IBM didn't rush it out, if IBM protected the PC the way they did the PS/2 and it's MicroChannel Bus, who knows what would have happened. But they didn't.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-07-11T21:51:52.073" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7028" PostTypeId="2" ParentId="2922" CreationDate="2018-07-12T02:31:00.283" Score="-1" Body="&lt;p&gt;While Int 11h may have been able to return up to four drives available, in practice I think you'll find it extremely difficult to find a system with more than two drives.  Not impossible, just very difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason is that for the overwhelming majority of DOS systems, a floppy cable would only support two drives, see this super-user answer for the details of why: &lt;a href=&quot;https://superuser.com/questions/849079/what-is-the-little-twist-in-this-floppy-ribbon-cable-for&quot;&gt;https://superuser.com/questions/849079/what-is-the-little-twist-in-this-floppy-ribbon-cable-for&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that in this situation, with only a single 34 pin header, you're stuck with a maximum of two floppy drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd make a guess that the ability of BIOS to return up to four was due to the heritage of DOS, being basically a clean room implementation of a CP/M like operating system for the 8086.  CP/M did correctly support four drives on a single cable, since it didn't do the twist, but instead relied on setting jumpers on the drives.  And there are four drive select pins on the standard 34 pin floppy cable: &lt;a href=&quot;https://allpinouts.org/pinouts/connectors/data_storage/5-1-4-inch-floppy-34-pin/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://allpinouts.org/pinouts/connectors/data_storage/5-1-4-inch-floppy-34-pin/&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The decision to support four drives in the BIOS was quite possibly made before IBM made the decision to avoid the jumper issue, configure all drives as B:, and then throw a twist in the cable to get the far end drive to respond to drive select 0 (i.e. A: )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to get four drives on a DOS system, you'd need either a system that used a non-standard cable, i.e. straight through without the twist, and some fiddling with jumpers on the drives, or a motherboard with two floppy headers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Granted, I came fairly late to the MS-DOS party, getting my first DOS PC in 1991, by which time hard drives were commonplace.  However the fact that two floppies places the first hard drive partition at C: and the fact that this has been so for at least the last 30 years, and still is the de facto standard today, suggests very strongly to me that anything more than two floppy drives was extremely rare, if not non-existent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Certainly possible, DOS was incredibly good at dealing with changing setups, notice how it progressed with no trouble at all from DSDD 360K drives up through 1.2mb, 1.44Mb and later 2.88Mb floppies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Might be another interesting retrocomputing question to ask.  &quot;Did anyone ever make a DOS machine with more than two floppy drives?&quot; &lt;/p&gt;&#xA;" OwnerUserId="5272" LastActivityDate="2018-07-12T02:31:00.283" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7029" PostTypeId="2" ParentId="7008" CreationDate="2018-07-12T15:27:35.817" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;what other options did people have for business computers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most small to medium businesses in the 1970's and 1980's used &quot;turnkey&quot; systems based on 16 bit mini-computers like DEC PDP-11, HP 2100 series, Basic 4, Computer Automation, Data General Nova, ... . Generally &quot;value added resellers&quot; developed and modified software for particular businesses, and sold 16 bit mini-computer systems bundled with their software, which would be &quot;ready to run&quot; when delivered to a business customer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some industries like banks, a local hub with multiple terminals communicated to a mainframe offsite. For banks, the IBM 3270 block oriented terminal and it's related hub were popular. Some other businesses used remote job entry (RJE) systems, that might include card readers, printers, tape, ... . The 3270 type stuff got replaced by PC based networked systems, while RJE systems got replaced by client-server type environments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually all mini-computer based systems were replaced by PC based systems, with some type of networking to replace multi-terminal systems. Some of these systems still communicate with mainframes or servers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of what were &quot;turnkey&quot; systems, were replaced by PC's running Windows and with the main software based on something like Quickbooks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days, there are variations of PC's used in devices that you wouldn't expect to find a PC. I recall that not too long ago, in the USA, something like 400,000+ ATM machines were PC based systems still running Windows XP (they pay to get continued support, even though Microsoft dropped support for Win XP for regular users). There have been a few times where I was at some store or fast food place where the specialized customer display was showing some version of Windows due to some type of system failure or reboot.&lt;/p&gt;&#xA;" OwnerUserId="4660" LastEditorUserId="4660" LastEditDate="2018-07-12T15:39:26.533" LastActivityDate="2018-07-12T15:39:26.533" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7030" PostTypeId="1" CreationDate="2018-07-12T17:07:43.983" Score="68" ViewCount="8607" Body="&lt;p&gt;The Unix designers came from the GE/MIT Multics project, and Multics inspired some Unix features. In particular, Multics has a hierarchical filesystem, and so does Unix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On Multics, pathnames were of the form:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;dir1&amp;gt;dir2&amp;gt;dir3&amp;gt;filename&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but Unix uses&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/dir1/dir2/dir3/filename&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Is there any documentation of why they chose that syntax instead of copying Multics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought of this because &lt;code&gt;&amp;gt;&lt;/code&gt; has become common in modern day displays of other hierarchical paths, such as breadcrumb lists in web applications and CSS child selectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multics also used &lt;code&gt;&amp;lt;&lt;/code&gt; to represent upward motion in relative pathnames, e.g. Unix&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;../../foo/bar&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would be&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;&amp;lt;foo&amp;gt;bar&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This has a nice symmetry that &lt;code&gt;../&lt;/code&gt; lacks, although &lt;code&gt;..&lt;/code&gt; has the advantage of being implemented in the filesystem itself (it's simply a link to the parent directory). On Multics, &lt;code&gt;&amp;lt;&lt;/code&gt; is implemented in a user-mode library that canonicalizes pathnames before being passed to the kernel.&lt;/p&gt;&#xA;" OwnerUserId="5436" LastActivityDate="2019-04-25T09:21:42.937" Title="Why did Unix use slash as the directory separator?" Tags="&lt;unix&gt;&lt;multics&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="7031" PostTypeId="2" ParentId="7030" CreationDate="2018-07-12T18:03:19.670" Score="65" Body="&lt;p&gt;Primordial Unix on the PDP-7 was &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/hist.html&quot; rel=&quot;noreferrer&quot;&gt;in many ways very different&lt;/a&gt; from what we know today.  Directories existed but were very awkward to use; in practice most work was done in a single directory.  Most importantly, paths did not yet exist.  What was implemented early on though was a simple syntax for IO redirection on the commandline.  Whereas on Multics one would have to say&lt;sup&gt;1&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;iocall attach user_output file xx&#xA;list&#xA;iocall attach user_output syn user_i/o&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;on Unix one could simply say&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ls &amp;gt;xx&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;STDIN could similarly be redirected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When paths were eventually implemented (on PDP-11 Unix) &lt;code&gt;&amp;lt;&lt;/code&gt; and &lt;code&gt;&amp;gt;&lt;/code&gt; were already in use so a new syntax was needed.  I am unaware of the precise reason &lt;code&gt;/&lt;/code&gt; was chosen for this; it's likely that its convenient location on Teletype Model 37&lt;sup&gt;2&lt;/sup&gt; terminals was a consideration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; &lt;code&gt;iocall&lt;/code&gt; was an 'author-maintained' (i.e. non-standard) command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; The Model 37 could easily be adapted to handle mathematical symbols; this was important since early Unix was intended to be used for technical writing (see e.g. &lt;code&gt;roff&lt;/code&gt;).  The &lt;code&gt;/&lt;/code&gt; is next to right-shift on the Model 37, same as on most modern keyboards.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-07-12T18:08:38.830" LastActivityDate="2018-07-12T18:08:38.830" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7032" PostTypeId="2" ParentId="6975" CreationDate="2018-07-13T04:16:17.607" Score="1" Body="&lt;p&gt;For 80286 (or higher) processors, there is a Windows 3.x memory model that runs in protected mode to go beyond the real mode 1MB limit, using selectors instead of real mode segments. A block of selectors are used to access blocks of memory greater than 64KB, and incrementing a selector by 8 would point to the next 64KB block of memory. The increment value was set via a define named _AHINCR. (For real mode huge memory model, _AHINCR was 0x1000, used as the increment value for a segment register). _AHINCR - &quot;AH&quot; may have been used for the name because the command line switch for huge model with Microsoft compilers is /AH, while &quot;INCR&quot; is for increment value. For 80286, protected mode allowed for 24 bit addressing which translates into 16MB of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was superseded with 80386 and Windows 3.x support for 32 bit flat model (32 bit offsets) via win32s or winmem32. Watcom 10 C/C++ was the only compiler to support winmem32 as one of it's standard memory models.&lt;/p&gt;&#xA;" OwnerUserId="4660" LastEditorUserId="4660" LastEditDate="2018-07-13T20:19:21.220" LastActivityDate="2018-07-13T20:19:21.220" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7033" PostTypeId="2" ParentId="2994" CreationDate="2018-07-13T14:57:17.877" Score="2" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.zilog.com/manage_directlink.php?filepath=docs/z80/ps0178&amp;amp;extn=.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z84c datasheet&lt;/a&gt;, all timings are measured at 100 pF capacitive load. Since your surrounding chips are CMOS, you shouldn't worry, as already said, about DC loading, only capacitive one. The capacitance of single IC pin is in range of 5..10 pF, so if your board has fanout  less than ~10..15 IC pins per any Z80 output, here you have nothing to worry about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there is still some thing inherent to CMOS Z80 -- it makes very sharp signal changes so that even 20 cm of a PCB track connected to Z80 output could have significant ringing on every state change, up to the level other chips would accept that ringing as an extra signal changes.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-07-13T14:57:17.877" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7034" PostTypeId="2" ParentId="7030" CreationDate="2018-07-14T03:52:59.013" Score="2" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Dartmouth_Time_Sharing_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;DTSS&lt;/a&gt;, developed around the same time as Multics, and influenced by it, used &lt;code&gt;:&lt;/code&gt; as the directory separator. A leading &lt;code&gt;:&lt;/code&gt; was used for absolute paths (starting at the root directory). There was no easy way to indicate &quot;parent directory&quot; (Unix/Linux &lt;code&gt;..&lt;/code&gt;) — programs that needed to walk the directory tree had to keep track of things themselves.&lt;/p&gt;&#xA;" OwnerUserId="4311" LastActivityDate="2018-07-14T03:52:59.013" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7035" PostTypeId="1" AcceptedAnswerId="7037" CreationDate="2018-07-14T15:51:07.760" Score="5" ViewCount="2352" Body="&lt;p&gt;I discovered quite a number of videos on &lt;a href=&quot;https://www.youtube.com/watch?v=SVrElANZg2M&quot; rel=&quot;nofollow noreferrer&quot;&gt;youtube&lt;/a&gt; demonstrating the effectiveness of over-clocking the CPU of Sega Genesis/MasterDrive. The video features games that are known for their intensive rendering procedures such as Flash Back, Pebble Beach Golf and Hard Drivin'. As one might have guessed, the games ran at a much higher fps rate and looked smoother. It also appears that the actual modification of the console is surprisingly simple, involving connecting the clock pin of the 68000 to new crystal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This naturally made me wonder how such behavior was possible. It is &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/134/how-can-i-overclock-my-commodore-64/&quot;&gt;known&lt;/a&gt; that many older 8bit computers such as the C64 where unable to support over clocking since the CPU clock was also tied to the video clock. Any changing of video clock would result in unstable video output. For over clocking to be useful, a system that supports chips with different clocking rates would be needed. Hence, only game logic would be speed up and not core system I/O interface. The Genesis does in fact satisfy this precondition.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing a quick search for over clocking on SNES results in a limited success. I can only find examples with the SuperFX chip. At the hardware level, why has the SNES seen so little success in over clocking of games? &lt;/p&gt;&#xA;" OwnerUserId="4251" LastEditorUserId="357" LastEditDate="2018-07-15T20:13:39.060" LastActivityDate="2018-07-16T21:54:16.740" Title="If the Sega Genesis/MegaDrive could be overclocked so easily, why couldn't the SNES?" Tags="&lt;snes&gt;&lt;sega-genesis&gt;&lt;overclocking&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7036" PostTypeId="2" ParentId="2336" CreationDate="2018-07-14T18:25:25.043" Score="4" Body="&lt;p&gt;I'm surprised I haven't seen this thread before, and I know it's a while afterwards.....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I was very young at the time, I believe it was mid 80's where my older brother had saved enough money from mowing lawns and shoveling sidewalks that he purchased a kit for an Apple II.  I've asked him where he got it, but he barely remembers himself.  He went to a summer computer camp, that was on a nearby college campus in upstate NY.  I guess our father paid for a few hundred dollars for the purchase, but we're unsure if it was from the college campus, the company running the computer camp, or some other third party seller.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I do remember, is that it had no case.  I think we had a monitor that it was able to connect to.  I do remember my brother making his own case out of wood pieces from an old dresser, and the keyboard was held in with just a couple of roofing nails.  I do remember lifting up the keyboard one time, reaching in to touch some of the parts, and accidentally touching contacts on the power supply.  That's the first time I remember ever getting an electric &quot;bite&quot;.  That little buzz immediately made me respect electricity for the rest of my life.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also hazy if the floppy drive came with the kit, or if it was an additional item our father purchased.  I do know it was an Apple II, and not an Apple I.  I know it does not definitively answer if the Apple II was sold as a kit or not, but it was an Apple II, that required some assembly and had no case.  It was brand new parts.  At one time, I thought my brother may have still had the computer, but he apparently got rid of it about 20 years ago.  It was a little sad, as it was a big memory in my childhood.&lt;/p&gt;&#xA;" OwnerUserId="10185" LastActivityDate="2018-07-14T18:25:25.043" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7037" PostTypeId="2" ParentId="7035" CreationDate="2018-07-14T19:51:21.267" Score="13" Body="&lt;p&gt;The Super NES (SNES) has a much different hardware architecture than the Sega Genesis, and is built around the custom Ricoh 5A22 ASIC. As opposed to the discrete, stock, Motorola 68000 CPU employed in the Sega Genesis/MegaDrive, the SNES ASIC contains multiple components that internally operate at different clock speeds. The ASIC has the 65C816 CPU core, along with the interfaces to the coprocessors and I/O, which are designed to operate at different clock frequencies, but all under the control of the ASIC. So, unlike in the Sega console, where you can simply overclock the CPU, attempting to overclock the SNES ASIC actually affects the speed of multiple component interfaces. There's just no way to overclock the CPU core by itself, because of this high degree of integration within the single chip ASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides the fact that the Sega console uses a discrete component CPU, allowing its clock source to be substituted with a faster clock, it also has a split-memory design allowing asynchronous sharing of the bus and RAM between the CPU and the Video Display Processor (VDP). Access to VRAM (other than the VDP using it to draw the display) is fully asynchronous to the CPU and usually done either via the VDP's FIFO queue or through DMA. Thus, the 68000 running at a higher clock speed is only going to be accessing Program RAM or VRAM during blanking. For this reason, the faster CPU processing doesn't break the normal display handling, but does allow the game to run smoother since the CPU can do more when it is in control. Likewise, sound playback will also not be effected by the faster CPU since that is done asynchronously by the Z80 coprocessor, still running at its normal speed.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-07-15T20:04:21.693" LastActivityDate="2018-07-15T20:04:21.693" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7038" PostTypeId="2" ParentId="6979" CreationDate="2018-07-14T23:40:05.380" Score="4" Body="&lt;p&gt;There's another point I haven't seen anybody mention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Intel released the 8086, they were already working on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_iAPX_432&quot; rel=&quot;nofollow noreferrer&quot;&gt;iAPX 432&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel's intent was that the iAPX 432 would be the CPU that would become popular in the desktop market. They were putting an immense amount of time and effort into the design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least from what I've heard from a few former Intel designers, the 8086 design was a direct result of that--the 432 was taking quite a while, and Zilog was doing well with the Z80, so Intel thought they needed a follow-on to the 8085. At the same time, they wanted to ensure against the 8086 (and successors) from dominating the market to the point that the 432 would never be able to gain any significant market share.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To that end, they designed the 8086 specifically for higher-end embedded applications. Typical embedded applications rarely did the sorts of things that were clumsy and difficult with segments, and using segments usually allowed somewhat denser code, which was quite important for embedded use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to some extent they failed by succeeding, so to speak. Despite their attempt at crippling the 8086, when the 432 became available, it had exactly the problem they'd feared: the 8086 (and successors) already dominated to the the point that most people have never even heard of the 432, not to mention using it. Worse, the 432 was late to market, did poorly in benchmarks, and the early iterations were fairly buggy to boot. Intel didn't officially give up on selling the 432 until around the 386 time frame, but there's no real room for question that it was an absolute flop, for exactly the reason they'd feared and tried to plan against.&lt;/p&gt;&#xA;" OwnerUserId="808" LastActivityDate="2018-07-14T23:40:05.380" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="7039" PostTypeId="2" ParentId="7008" CreationDate="2018-07-15T16:45:01.957" Score="-1" Body="&lt;p&gt;While the IBM PC marketing was a major feat pulled out by IBM+Microsoft, the IBM PC hardware together with the DOS OS was a throwback at least 1 decade in the past for 8-bits hardware, CP/M compatibility, and terrible sound and graphics capability that still haunts us to this day. It was more designed for being a cheap machine to produce with tried components than for being an advanced piece of newer technology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was only sold due to the misguided mantra of &quot;compatibility&quot; and you &quot;will never be fired for buying IBM&quot;, and for domestic users under the assumption they needed one to be able to bring work home.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately, being such an obsolete technology was what also propelled a generation of clones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By mid-late 80s, the bulk of the years people buying those systems, you had much more far ahead complex systems for the domestic market. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga machines were vastly superior in nearly every conceivable angle, including price, except that Commodore made a row of bad marketing decisions. The Atari ST was also a very interesting machine. You also had later on the Sinclair QL, which again bad marketing and technical design killed it. Ditto as for the Acorn Archimedes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only contemporary competing brand that gained traction in some areas of the market were the Apple machines. Commodore and Atari were also popular in even more restricted niches of market and it was a shame such advanced machines never really tried seriously to beat IBM in their own game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately IBM did not win on technical merits both the small business market and the domestic computer market. It did win using the foothold on big business and taking advantage of the formidable reputation and marketing machine IBM had in the 80s.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2019-04-29T06:20:29.367" LastActivityDate="2019-04-29T06:20:29.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7040" PostTypeId="2" ParentId="2795" CreationDate="2018-07-15T21:27:37.910" Score="14" Body="&lt;p&gt;There are two well-documented computing devices that can lay claim to being the earliest examples of purpose-built Internet routers - The Stanford &quot;Blue Box&quot; router and the &quot;Fuzzball&quot; router.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;Blue Box&quot; is &lt;a href=&quot;https://en.wikipedia.org/wiki/Cisco_Systems#1984%E2%80%931995:_Origins_and_initial_growth&quot; rel=&quot;noreferrer&quot;&gt;associated with Cisco Systems&lt;/a&gt; because the two founders of Cisco were Stanford employees, and used it as the basis for their first commercial product. It was originally developed by &lt;a href=&quot;https://en.wikipedia.org/wiki/William_Yeager&quot; rel=&quot;noreferrer&quot;&gt;William Yeager&lt;/a&gt; as software for the PDP/11 to provide multi-protocol routing amongst networks on the Stanford Campus. Development began in 1981, but by 1985 the &quot;Blue Box&quot; router was running dedicated software developed by Yeager on dedicated Motorola 68000 CPU boards with 256KB of RAM also developed at Stanford by &lt;a href=&quot;https://en.wikipedia.org/wiki/Andy_Bechtolsheim&quot; rel=&quot;noreferrer&quot;&gt;Andy Bechtolsheim&lt;/a&gt;, a future cofounder of Sun Microsystems. Also by 1985, Stanford was one of the major nodes on the growing ARPANET/NSFNet/Internet. While not particularly designated as &quot;core&quot; routing nodes, the &quot;Blue Box&quot; routers at Stanford likely handled as much traffic at the time as a core router, since they were gateways for the biggest edge node.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Fuzzball_router&quot; rel=&quot;noreferrer&quot;&gt;&quot;Fuzzball&quot; router&lt;/a&gt; was also developed in 1985, and &lt;a href=&quot;https://web.archive.org/web/20050309205604/http://www.nsf.gov:80/about/history/nsf0050/internet/fuzzball.htm&quot; rel=&quot;noreferrer&quot;&gt;according to the U.S. National Science Foundation&lt;/a&gt; was the first true router for core usage. It was developed by &lt;a href=&quot;https://en.wikipedia.org/wiki/David_L._Mills&quot; rel=&quot;noreferrer&quot;&gt;David Mills&lt;/a&gt; under a grant from NSF and was used in backbone routing for NSFNet. Like with the &quot;Blue Box&quot;, it was a specialty OS (which has the namesake &quot;Fuzzball&quot;) purpose-built for routing and running on &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-11#LSI-11&quot; rel=&quot;noreferrer&quot;&gt;DEC LSI-11&lt;/a&gt; hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While both these early computers can satisfy being called the first dedicated router and a core router, it is mostly true that the &quot;Blue Box&quot; of 1985 was more of a dedicated router, having purpose-built hardware and software, and the &quot;Fuzzball&quot; was more of a core router, since it was in that role for the NSFNet, even though it ran on more generic hardware than the &quot;Blue Box&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should also be noted that these were very early examples, and pre-date the competitive push among companies like Cisco to make truly high-speed routers. Naturally, these later routers continued to use purpose-built OS software, but added ASIC and custom peripheral hardware to speed packet processing. Of course, Cisco Systems was a leader in this regard, and their device lineage clearly goes back to the Stanford &quot;Blue Box&quot;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-07-15T21:27:37.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7041" PostTypeId="2" ParentId="6932" CreationDate="2018-07-15T21:36:50.633" Score="4" Body="&lt;p&gt;Turbo Pascal's IDE layout is optimized for 40 columns.&#xA;However Borland made some kind of &lt;a href=&quot;https://en.wikipedia.org/wiki/Termcap&quot; rel=&quot;nofollow noreferrer&quot;&gt;termcap&lt;/a&gt;. You may change the patch area of every Pascal program, the Turbo Installer &lt;a href=&quot;https://hc-ddr.hucki.net/wiki/doku.php/cpm/turbo_pascal/tinst&quot; rel=&quot;nofollow noreferrer&quot;&gt;TINST.COM&lt;/a&gt; (German doc) is your friend. Offset $0168 for example defines the screen width, you don't need the source code!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least &lt;a href=&quot;http://canal.chez.com/CPM/ws3.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;WordStar&lt;/a&gt; and &lt;a href=&quot;http://canal.chez.com/CPM/mp-vt100.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multiplan&lt;/a&gt; have their own patch area. Finally &lt;a href=&quot;http://canal.chez.com/CPM/vt100dyn.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;CP/M Plus&lt;/a&gt; has application independent support...&#xA;see also &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8703/7534&quot;&gt;https://retrocomputing.stackexchange.com/a/8703/7534&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7534" LastEditorUserId="7534" LastEditDate="2019-01-10T13:03:45.207" LastActivityDate="2019-01-10T13:03:45.207" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7042" PostTypeId="1" CreationDate="2018-07-16T07:10:06.320" Score="7" ViewCount="237" Body="&lt;p&gt;As described in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7030/why-did-unix-use-slash-as-the-directory-separator&quot;&gt;this question&lt;/a&gt;, Multics used &lt;code&gt;&amp;gt;&lt;/code&gt; as the separator between components in pathnames, and &lt;code&gt;&amp;lt;&lt;/code&gt; as a parent directory indicator in relative paths.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, an &lt;a href=&quot;http://www.multicians.org/fjcc4.html&quot; rel=&quot;noreferrer&quot;&gt;early paper&lt;/a&gt; describing the implementation of the Multics filesystem uses &lt;code&gt;:&lt;/code&gt; instead (and provides no indication of how parent directories were referenced).  My understanding is that this paper describes the state of the Multics implementation as of &quot;phase 0.5&quot;, which was a simulation of components of Multics running under an emulator on a GE635 so that work could begin before the actual GE645 hardware was ready.  This work was completed in March 1967, and at some point after that work on the actual hardware begun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new syntax had been adopted by the time the system command language was described for the programmer's reference in &lt;a href=&quot;http://multicians.org/mspm-bx-1-00.html&quot; rel=&quot;noreferrer&quot;&gt;October 1968&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any available documentation as to when and why this change was made?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Motivation: it may be interesting to know, in light of &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7030/why-did-unix-use-slash-as-the-directory-separator&quot;&gt;this question&lt;/a&gt;, how long the '&gt;' convention had been in use at the time Bell Labs abandoned the Multics project)&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="7347" LastEditDate="2018-07-16T07:29:53.160" LastActivityDate="2018-07-16T07:29:53.160" Title="When did Multics begin using '&gt;' as a pathname separator?" Tags="&lt;history&gt;&lt;file-system&gt;&lt;multics&gt;" AnswerCount="0" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7043" PostTypeId="2" ParentId="7008" CreationDate="2018-07-16T10:09:34.550" Score="0" Body="&lt;p&gt;Digital Research was still a significant player in the mid-80s, not just with CP/M but with direct competitors to MS-DOS such as &quot;Concurrent DOS&quot;. They had a number of OEMs such as Siemens and ICL who built small business systems using this operating system. Probably had little impact in the US, where following IBM was always the most popular strategy, but had significant market in other countries including Japan.&lt;/p&gt;&#xA;" OwnerUserId="4915" LastActivityDate="2018-07-16T10:09:34.550" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7044" PostTypeId="2" ParentId="7035" CreationDate="2018-07-16T16:38:13.787" Score="5" Body="&lt;p&gt;It's an issue of integration. On the early Genesis systems the custom chips and CPU were physically separate from each other so it was easy to isolate the various clock signals and replace the CPU with a part rated for faster operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SNES has a more tightly integrated design where an ASIC contains both the CPU and other components, making it harder to isolate and control one clock domain (say the CPU) from another (video or sound). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The later revisions of the Genesis hardware have this same limitation as they started merging more custom parts, as well as the CPUs into a smaller amount of larger custom chips to reduce cost. So an overclock modification on a single-custom-chip Genesis 3 is difficult compared to the original hardware with three-custom-chips and a stock CPU.&lt;/p&gt;&#xA;" OwnerUserId="8734" LastEditorUserId="8734" LastEditDate="2018-07-16T21:54:16.740" LastActivityDate="2018-07-16T21:54:16.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7045" PostTypeId="2" ParentId="5069" CreationDate="2018-07-16T18:17:21.683" Score="7" Body="&lt;p&gt;The color RAM in the Genesis video chip is single ported such that at any given time the color RAM data bus either contains the data being read out of it for display purposes, or the data being written into the RAM by the CPU or by DMA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Outside of the active display area the overscan color can be defined by software. The video chip shows this color for each pixel in the display by continuously addressing and reading out the color RAM data at that address. Most games set the backdrop color to black, as in your picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically software will use DMA to load transfer palette data from system memory to color RAM during the vertical blanking period which starts right after the last line of the active display area ends. The exact point where DMA starts depends on the software, usually there is some housekeeping and setup to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to the single-ported nature of the color RAM the video hardware will attempt to show the overscan color during that time but will be interrupted every other pixel by DMA writes. This causes the video distortion you pointed out. The color data you are seeing is the new palette data for the next frame being written into color RAM over a short period of time. It isn't useful for the developers, it's just a limitation of the hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This also manifests in games that do mid-frame color RAM changes such as the water levels in the Sonic games. You will see stationary dots of a solid color that flicker a bit and move up and down with the water level. Those dots come from the CPU writing in new color data and the single-ported RAM being unable to show the normally visible color at that location because the write has priority.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As dual port RAM is expensive there isn't a good solution for this. The TurboGrafx 16/PC Engine has a work-around where the last valid color shown prior to a color RAM write is latched and continuously output until the write finishes. This works well in the overscan area and isn't too bad for mid-frame writes as the pixel affected during a write will be a copy of its neighbor.&lt;/p&gt;&#xA;" OwnerUserId="8734" LastActivityDate="2018-07-16T18:17:21.683" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7046" PostTypeId="1" AcceptedAnswerId="7047" CreationDate="2018-07-16T18:44:55.327" Score="1" ViewCount="196" Body="&lt;p&gt;I've just completed an obviously long-overdue article on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sol-20&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sol-20 for the Wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It really needs some images. Does anyone out there have images &lt;strong&gt;that they took&lt;/strong&gt; of this machine? Especially the interior!&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-07-16T19:59:32.927" Title="Anyone here with a Sol-20 or images thereof?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2018-07-16T21:48:03.043" ContentLicense="CC BY-SA 4.0" />
  <row Id="7047" PostTypeId="2" ParentId="7046" CreationDate="2018-07-16T19:59:32.927" Score="1" Body="&lt;p&gt;Just checked, there's one in the attic. So what kind of pics are needed. And no, I do not own any fancy camera - unless an Apple QuickTake 100 counts :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FAFPP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FAFPP.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(the black box in the lower right is way more interesting, as it's a rackmount (!) disk drive for an Atari ST.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-07-16T19:59:32.927" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7048" PostTypeId="1" CreationDate="2018-07-17T01:40:59.990" Score="5" ViewCount="299" Body="&lt;p&gt;The N64 SDK provides the &lt;a href=&quot;https://web.archive.org/web/20180810105831/level42.ca/projects/ultra64/Documentation/man/n64man/tools/makerom.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;makerom&lt;/code&gt;&lt;/a&gt; tool to create a ROM image given a file describing the ROM layout called &lt;code&gt;spec&lt;/code&gt; and the various object files it refers to such as the N64 OS, RCP microcode, and the game's code itself. Additionally, the manual recommends the use of &lt;a href=&quot;https://web.archive.org/web/20180810110618/level42.ca/projects/ultra64/Documentation/man/pro-man/pro10/index10.3.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;overlays&lt;/a&gt; due to the memory restrictions of the console. However, the example described in the overlay page above does not provide details for creating overlays which are relocatable; instead they are at a fixed location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seemed simple enough to do by setting the &lt;code&gt;RAW&lt;/code&gt; attribute so that any relocation info wouldn't be stripped. However, when doing this, the overlay and the boot segment were never linked by &lt;code&gt;makerom&lt;/code&gt;, and as such any references to functions contained in the boot file are never resolved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way to link my overlay with the boot segment as to resolve these references while keeping the boot and overlay segments separate without removing relocation information?&lt;/p&gt;&#xA;" OwnerUserId="10190" LastEditorUserId="7208" LastEditDate="2019-07-29T09:38:30.177" LastActivityDate="2019-07-29T11:43:44.373" Title="Link N64 object file while preserving relocation data" Tags="&lt;software-development&gt;&lt;compilers&gt;&lt;nintendo-64&gt;&lt;software-development-kit&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7049" PostTypeId="1" CreationDate="2018-07-17T22:20:36.707" Score="2" ViewCount="4477" Body="&lt;p&gt;This is my first post. I looked around on the net for awhile and came across this board - looks to be the most competent, so here goes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I managed to get my hands on an old computer monitor from my old school which I found in the celler one day I was looking around. Principle said I could take it. I am a very nostalgic person(sometimes!), so I was absolutely thrilled because this monitor is able to switch between green monochrome, amber, or normal colors which I thought was very cool, specially was DOS. Monitor was and still is in prestine condition. There is however one problem!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been unable to stretch the picture to the edges of my screeb. Vertically was no problem. The little knob or whatever for the vertical adjustment was simple not there! I finally came around to take the monitor apart and see what was what. I found out all the adjustments(which were in the back) had simillar mechanisms EXCEPT the vertical one..&#xA;Apparently also, someone else had also tried to adjust it, but they seem to have perhaps, I dont know, broken it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thougut I would ask my friend who fiddles with electricity whenever he has time to look at it. He thought it best to remove the part and see if we could find a replacement either at some TV/repair store or on the net. Problem is however we dont have a clue what the part is called so no results so far. Here is a picture of the part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More pictures of it below on why I think it is ruined/broken&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any information you could give me on how to fix - how it works. Or best; where I could get a new one would be sooo good. A name for it would most likely also help. I dont know how specific these parts need to be, if some of you have a couple in your spare parts drawer I would love to buy one of you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have obviously called all official product and customer help but without help as this is such an old screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope you can help! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/xMWi1.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &quot;behind&quot; it looks as an umbraco key would fit&#xA;&lt;img src=&quot;https://i.stack.imgur.com/iLYGS.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &quot;infront&quot; atempts to adjust the width have broken or ruined the part as it has what appears to be cracks and the umbraco fit looks just round.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/Gqit3.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other adjustments I spoke of have different mechanisms as seen here. More simple and can be turned with a normal screwdriver.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/SnoZ4.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this image on the net of an older model I think - same screen, different letter at the end, instead of 1390-E, this was the 1390-Z&#xA;It appears that the vertical adjustment(upper right corner) has a gray knob in it, which I am obviously missing&#xA;&lt;img src=&quot;https://i.stack.imgur.com/LBLNJ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="10191" LastEditorUserId="10191" LastEditDate="2018-07-17T22:31:53.800" LastActivityDate="2019-02-13T03:16:40.387" Title="Fixing the horizontal size(width) of an old CRT monitor (Zenith ZCM 1390-E)" Tags="&lt;crt-monitor&gt;&lt;repair&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7050" PostTypeId="2" ParentId="7049" CreationDate="2018-07-18T06:31:45.017" Score="4" Body="&lt;p&gt;Actually, your picture looks perfect in the video. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Old CRTs did never use the full extent of the tube screen because at the outer edges the picture would become blurry due to the electron beam(s) not hitting the fluorescent matter at a right angle - thus, the area that is lightened up by the beam becomes larger to on the tube edges, thus less sharp. This is intentional and caused by the geometrical limits of a CRT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From your video, I would assume the monitor is perfectly in order.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-07-18T06:51:23.250" LastActivityDate="2018-07-18T06:51:23.250" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7051" PostTypeId="2" ParentId="7049" CreationDate="2018-07-18T08:33:37.523" Score="-1" Body="&lt;p&gt;As others suggested the screen looks OK and poking with the monitor can permanently damage it. The part is a &lt;strong&gt;coil&lt;/strong&gt; but the part name depends on its purpose my bet is on the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;choke coil&lt;/strong&gt; or &lt;strong&gt;compensator&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;its used to dampen sharp too fast signals have 2 pins (all interconnected with some resistance)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;coil&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sv3bv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sv3bv.png&quot; alt=&quot;coil&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;its used to shift power factor and or to store/exchange energy in oscillators. Also its a crucial part of resonant circuitry. also have 2 pins but can have more ... (all interconnected with some resistance)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;transformer&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8hoPJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8hoPJ.png&quot; alt=&quot;transformer&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;two or more parallel coils on top of each other. Used to convert voltage/current ratio and or to decouple parts of circuitry. Have at least 4 pins but can have more. (the individual coils are not interconnected with resistance)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I see only one pin on your image (the one connected with wire) so my bet is you got just 2 such pins and it is not adjustable &lt;strong&gt;choke coil&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inside dark tube with cracks looks like a &lt;strong&gt;ferrite core&lt;/strong&gt; that enhances the inductance of the coil (&lt;code&gt;[mH]&lt;/code&gt;) many folds. Its relative position along the coil axis (coverage) can adjust the inductance (similarly like potentiometer adjust resistance). The cracks looks too regular so its a possibility the core was like this intentionally (magnetic core gaps are common stuff)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finding replacement for such will be near to impossible as those are usually custom build by the factory. You would need to repair or build a new one yourself and you are most likely not having circuitry diagram nor a working twin monitor to get/measure the inductance range of valid part nor the ferrite parameters (they differs a lot but looks all the same). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway &lt;strong&gt;Your others adjustments looks like trimmers&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RQJvy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RQJvy.png&quot; alt=&quot;trimmer&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xvIQu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xvIQu.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is completely different part. And it have 3 pins. &lt;strong&gt;My bet is your coil is not intended as adjustment at all !!!&lt;/strong&gt; So do not damage your working monitor on perhaps and maybes...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-07-18T08:59:08.960" LastActivityDate="2018-07-18T08:59:08.960" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7052" PostTypeId="2" ParentId="3090" CreationDate="2018-07-18T15:04:31.777" Score="12" Body="&lt;p&gt;It wouldn't have been outside the realm of consideration at the time, but your guys would face threefold problems in terms of cost and practicality:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;As others have stated, the cost of DACs and other high speed circuitry with which to build the image out of memory, especially if you want to combine high horizontal resolution AND high vertical resolution AND a decent scan rate. This is not insurmountable, real-world manufacturers found ways around the issue, but usually with methods that caused their own limitations on video modes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Ditto, cost and availability of high frequency scanning monitors. The vast majority of everything, even in applications wholly divorced from broadcast video like DEC's terminals, was just based off regular TV innards (either colour or b/w) as they were cheap and plentiful. Which put a hard limit on usable vertical resolution of around 200~240 lines progressive and 400~480 interlaced (for 60hz; 50hz rises to 256~288 and 512~576), and why you see those numbers so often. Bear in mind that 60hz progressive was only really tolerated on medium-persistence-phospor colour monitors because it was the least flickery mode possible on common equipment; 50p was sort of bearable but 50/60hz mode switchers were common on 16-bit computers for more than just the stretched out image height. 60hz interlace was a flickery mess, and 50hz even worse. IBM's MDA was something of a watershed in its introduction of a non-TV-compatible 18khz scan rate and general use of radar-like long-persistence phosphor in the image tubes to make its 50hz scan appear more stable (something they later did with the original XGA, which had an 87hz scan interlaced to 43.5hz effective and would have otherwise been unusable). So if you want to do 640x480 you're going to either have to put up with interlace flicker (how many people used the interlace mode of their Amiga long-term without a flicker fixer and high-frequency monitor? not many...), or have an expensive HF (and probably dual-frequency, which makes it even pricier) monitor, or at least specify long-persistence phosphors for the inside of the tube (which then have their own problem of unavoidable afterglow and &quot;traces&quot; across the screen with any moving image).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;MEMORY.&lt;/strong&gt; RAM was &lt;em&gt;expensive&lt;/em&gt; in 1980. 32kb wasn't simply a small indulgence, a luxury paid for by those who wanted a small upgrade to their computer. It was one of if not the most expensive component out of the whole machine, and a prime reason why, at the time, if you had a 16k computer you were quite the flash Harry. Atari, Apple and Commodore's 8-bit offerings offered typically 4 or 8k, the Sinclair ZX80 had just launched with ONE kb onboard (which the ZX81 would then replicate a year later, but with the option of a 16k upgrade cartridge that cost essentially as much as the entire main computer), and 16k wasn't really established as the bare minimum until '81-'82 when that became the baseline for the IBM PC, Sinclair Spectrum, and various other 8-bits... Commodore then causing a riot with the C64 at the end of '82, which they could only afford to do both because the price of memory had taken a severe tumble over the previous 18 months, and also because they owned a chip manufacturer (MOS tech). Giving over a good 32kb to video (which is the more likely thing that anyone trying to make a display of the class you describe would do, instead of 37.5kb - so, the then-common 320x200 and 640x400, not x240 and x480, though there's an alternative in the guise of the wide-pixeled 256x256 and 512x512 modes) would have been unheard of. IBM were pushing the boat out somewhat by cramming 16k onto their CGA board (which seemed a sensible alternative to installing 32k into the PC and then having half of it eaten by video), but their budget offering was the MDA with only 4k.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I mean, it would still have been doable. As others have mentioned, there are existing &quot;graphics workstations&quot; (and more commonly, graphics &lt;em&gt;terminals&lt;/em&gt; ) with that kind of definition and memory space. But they were expensive, specialist things. Sort of like the IBM PGC in '82, which was a full-on graphics terminal crammed into a triple-width expansion card, complete with a humongous 320kb RAM... and a $5000+ price tag just for the graphics adapter, never mind the rest of the computer (oh, and the external expansion bay the card had to go in).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your guys basically are caught in an odd position. On the one hand, the thing you're imagining them &quot;inventing&quot; &lt;em&gt;already existed.&lt;/em&gt; On the other, it only exists in the guise of ruinously expensive pieces of niche, technical, corporate (or more likely institutional) equipment. But the price tags on them aren't really all that gougey... a surprisingly large slice of the cost went directly into a) the memory buffers needed to support that large a bitmap (which is why vector based and high-resolution text-mode terminals were about as common - they could give as good a display or better, for the tasks to which they were optimised, as a bitmap model with probably 8~10x the RAM), b) the fancy high-resolution and/or long persistence display needed to display that many raster lines at a high enough speed to avoid flickering, and c) the uncommonly high frequency, wide data path electronics needed to connect the other two components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, hey, let's think about how the circle can be squared a little.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First up, choice of modes. You've essentially preempted the Atari ST, AT&amp;amp;T 6300, unexpanded EGA card, etc. Or a double RAM, double frequency CGA. But added extra scan lines to make it more VGA (or MDA)-like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, let's say, first step... ditch the extra lines. You don't need that extra 20% height to impress anyone, and if you do, you can compromise on horizontal resolution a little without going full VIC20. So we have modes along the lines of 320x200/640x200 (or 320x400)/640x400 (may as well have the medium-resolution, it can be useful), 288x224/576x224 (or 288x448)/576x448, or 256x256/512x256/512x512, with 4 bits, 2 bits, and 1 bit per pixel, fitting neatly within 32kb in all nine (eleven?) cases. That makes a whole load of things a hell of a lot easier from a 1980 electronics perspective, particularly limiting how many address lines are needed, and keeping a sensible lid on the capacity and number of RAM chips and on the required bandwidth (which also has implications for how &lt;em&gt;fast&lt;/em&gt; the memory has to be, and/or how wide a data path you need to pull data out of it quickly).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next up, the tube itself, or more accurately its drive circuitry. The faster you go, the better quality parts you need in order to deal with maintaining sharp, steady deflection yoke voltage waveforms and stronger drive voltages (including for the electron gun as it needs to be more intense due to moving faster side to side), as well as dealing with the usual effect of higher frequencies in electronics burning more power due to inductive filtering. If we were after full VGA (or PGC) resolution, and that same 60hz refresh rate, we'd need double the normal scan frequency, or about 31khz instead of 15-1/2. And there'd also be the issue of supporting two entirely different scan rates for the high and low line counts, as well as a pretty high pixel clock (25mHz in the VGA and PGC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the limiting of the memory size and thus pixel dimensions has a nice side effect; we don't need to go all the way up to 31k (or the unusually high 36k of the ST's high-resolution which was possibly one reason that the original NEC Multisync tapped out there). Nor will we have to interlace, or have quite as high a pixel clock. We &lt;em&gt;will&lt;/em&gt; need to exceed the 18kHz (and 16.3MHz) of MDA, though, and even the 22kHz of both EGA (1984 I think?) and the original Mac and Lisa (also all ~16MHz), because we need a higher line count and/or refresh rate than those variously supported. But, there's a middle ground that is exhibited by a now largely forgotten brace of early to mid-80s computers, especially those hailing from Japan (which needed high bitmap resolution to show Kanji alongside graphics) and 50hz areas (where a slightly less flickery image was desired, in combination with even more scan lines) as well as a lot of arcade machines and the Mac LC... the &quot;25kHz&quot; monitor (actually anywhere from 24.5 to 26.5k IRL, but the name stuck). 1980 is maybe a &lt;em&gt;little&lt;/em&gt; early for the introduction of an affordable example of the breed, but, heck, your guys can be the ones to introduce the idea maybe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;25kHz horizontal (nominal...) is just enough to squeeze in 400 active lines at 60hz, with the remainder between that and the 24kHz you might think it'd require disappearing into a fairly minimal blanking and sync/flyback area. You can also get away with a somewhat reduced pixel clock, in the region of 19 to 24MHz depending on how much blanking your horizontal sync circuitry requires. Realistically, though, it's a 21MHz minimum for safety; it might work to go for 21.48M, which is 6x the NTSC colourburst and so part of a fairly common and widely co-opted line of clock crystals, but maybe a cuspier compromise - on the edge of tolerance for everything involved, just from different directions depending on part - to use 20MHz, which would still give as much blanking as VGA and the Amiga or ST on full overscan, and bring it within the spec of a greater range of existing hardware including the very fastest Motorola CRTCs, if used with a set of quick 8-bit shift registers and slightly over-driving some then-cutting-edge 250ns memory chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thing is that then also causes problems if we want to use the lower resolutions with more colours; the lines have to be doubled up (by simply reading the same memory block twice) to preserve the sync rate. Which as it also doubles the necessary pixel clock at the same Hrez defeats the general tactic of having a steady data rate but dividing it up differently, trading off a lower pixel clock for more colour. For example in the CGA and more particularly PCjr we have 14.3MHz for 640x200 in 1bpp, 7.2MHz for 320x200 in 2bpp, and later 3.6MHz for 160x200 in 4bpp. For the ST it's similar with 32/16/8MHz and 640x400/640x200/320x200, with the different syncs required being covered by the requirement to use either two wholly separate monitors, or a multisync (or at least a dual sync, which is what the EGA and MCGA do). Other machines that have varying vertical resolutions but only one hsync rate suffer the same problem, which is why the VGA only has two colour depths (and it depends solely on the Hrez - 4bpp for 640, 8bpp for 320), and the AT&amp;amp;T exhibits similar just at one quarter the depth unless you add an expander card that progressively widens the effective data bus width with every additional 32k bank you install.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that would make it look like we either need to rearrange the memory to form a wider bus (using a larger number of lower density chips, though our practical minimum is 16x (single-bit) 2kb 4116s anyway; maybe we could use 32x 4108s, which were their half-functional low-cost cousins?), to provide a doubled 320x200 or raw 320x400 in 4bpp, as well as 640x200/400 in 2bpp instead of mono, or that we'd have to provide no better than 4 colours, or opt for an expensive dual-frequency monitor (which, hey, worked for IBM... several years later).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative does exist, however, in the form of installing a line buffer for the 200-line modes. A small 256-byte SRAM (or 512-nibble; preferably 160 or 192-byte/320 or 384-nibble if they exist... or 2x 128-byte in order to give 16-bit transfer, which then could even just be surplus Atari 2600 RIOT chips), either dual ported or double speed with circuitry providing interleaved R/W access, could work as a very high speed FIFO in a chase fashion, with data being written into it at half the speed it's read out on an approx half line delay (so data for the next line starts being written into the buffer just after the second repeat of the previous one starts being read out, and data for the second half finishes just before the first repeat of the next finishes, with the writes being jittered to start slightly earlier or later depending on whether it's an even or odd line). No idea how much it would cost in 1980, but I do know a lot of early micros used SRAM for their main memory instead of DRAM, so adding a quarter K of it shouldn't be prohibitive, and as far as the main data reading circuitry is concerned little has changed... its output is just being switched down a different path on the way to the actual output stage (essentially either going through the buffer, or bypassing it; similarly the output stage receives its data from a different source but one that's still addressed in much the same manner), and the counter that governs when each line starts being read out has its &quot;2&quot; bit flipped on or off dependent on whether the line counter's &quot;1&quot; bit is active. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is something I've been thinking of as an addition to an imaginary reworking of the Atari STe, and I think the Amiga included something similar in its own video chip (though only buffering a single line, building it up from a combination of bit planes, sprites and copper commands, and using the small dead area where the system was involved with memory refreshing on each line to start reading out the prepared line just before the next one started being built)... though that was itself a somewhat pricey machine in 1985, and IBM never seemed to bother with the idea even in the VGA, even though that could have made for a 640x200 8-bit and a 320x200 direct-colour 16-bit mode as early as 1987, so I do wonder if there's some part of the construction that makes it impractical for 1980.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway ... assuming that CAN be done, and we now have a base system that has sufficient memory, bandwidth, and buffering to be able to squirt data towards a monitor interface stage at a rate of approx 20Mbit/s (400 line unbuffered, 1 or 2 bits in parallel for an effective 20 or 10Mpixel/s switching rate) or even 40Mbit/s (200 line buffered and repeated, 2 or 4 bits in parallel, but the same 20 or 10Mpixel/s final rate). Where are we going to find a 20, or even 10MHz DAC from in 1980? At the basic level, converting binary data into analogue signal levels is a fairly simple affair, you just need a bunch of resistors in a ladder, but you have to make sure they're all switched at exactly the same time and with enough output power to create a relatively sharp edge to each pixel instead of being blurred by inductive filtering inherent to whole run of wiring between the DAC and the electron guns in the monitor (the same thing that puts an upper limit of about 350MHz on even the best VGA cables, and less than 100 on cheap ones or particularly long runs that don't include a booster &amp;amp; resynchroniser box, with everything higher rez than that suffering smearing and ghosting). At the time, there were precious few applications that demanded such a thing and the quality just wasn't there; even for broadcast video, your upper luminance bandwidth might be around 7 to 9MHz (in wholly analogue systems, equivalent to 14-18MHz digital... which itself was still barely managing half that frequency in the main), and colour information languished around the 4MHz realm. Plus with TV images you could get away with, if indeed you didn't straight up prefer, smoothly varying and smudged-together pixels, to give a more natural appearance to images. Great for photos or live video, not so good for sharp text or diagrams. Like the comparison between JPEG/MPEG and GIF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, again, we have a fairly simple answer, which was adopted by pretty much every IRL manufacturer of high-ish-end display equipment, including even the non-TV outputs of computers like the BBC Micro and, again, the IBM PC (including with CGA): TTL signalling, in Mono, RGB, RGBI, or RrGgBb mode. That is, we literally just send binary data out of the port, and let the monitor deal with it. With monochrome and straight 8-colour RGB (as used by the BBC, NEC PC88, and a few others), there's not even really anything to decode; the signal received is a simple gate saying &quot;turn the beam on&quot; or &quot;turn the beam off&quot;. The signal received is interpreted by a flip-flop transistor gate inside the monitor as being either above a certain voltage threshold (&quot;1&quot;, so &quot;on&quot;) or below it (&quot;0&quot;, so &quot;off&quot;) and triggers the appropriate electron gun(s) accordingly, making for a very sharp image even with a relatively fuzzy input signal. So long as it's able to reliably get the output from one state to the other within about half a pixel time, and without too much variation on how long it takes to move from one level to the other, it'll appear on screen with sharp and acceptably straight (in the vertical dimension; the raster beam takes care of the horizontal) edges from one line to the next. Of course, this rather restricts the range of colours we can produce. A monochrome monitor is exactly that - a single beam that's either on or off. RGB colour only offers 8 colours including black and white. No greyscales, no intermediates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course that wasn't really deemed acceptable so a little extra processing was off-boarded to the monitor's drive circuitry, in the form of the &quot;intensity&quot; bit, making most monochrome systems actually 2-bit, and most colour ones 4-bit. It wasn't exactly what you'd call an artist's palette (usually mono monitors only had three levels of brightness; 00 was off, 10 was &quot;on&quot;, 11 was &quot;even more on&quot; with the intensity bit causing the beam's drive voltage to be set a bit higher, and 01 caused a cursor-speed blinking effect between normal-voltage on and off... colour used a variation of this where turning intensity on just added about 50% of &quot;normal&quot; voltage to all three guns at once, so you had a bunch of slightly dim primary colours joined by a similar number of slightly desaturated bright pastels, as well as there being two shades of grey below white... IBM opting for a variation on this where non-intensified yellow also had its green channel attenuated by 50% to make brown), but it did the job in an age where any colour at all was pretty good going (and CGA's output was still a little more versatile than, e.g. the analogue output of a Sinclair Spectrum, and it sort-of still worked over composite video even though the actual clarity with colour encoding turned on was rather less than 320 pixels). And you could even get away without needing a palette register, which would either demand extra silicon die area in your custom display chip, or an additional small SRAM on the board; this is the reason why CGA's palettes are so weird - they're the best combinations the designers were able to come up with within the limitation of &lt;em&gt;directly feeding bits from memory into the output drivers;&lt;/em&gt; essentially, in low rez, the memory bits go straight into the R and G lines, with B and I being controlled by a combination of the palette choice (4 officially, but a fifth could be glitched in through a certain setting of other registers meant more for use with monochrome composite displays) and a single 4-bit-wide discrete-logic register that controlled the background colour (i.e. what appears when both memory bits are 0). In that way, they avoided having to find space for another 15 or even just 3 4-bit entries. Presumably if they'd had just a little more time, budget, or board space, they'd have included a mode which divided the clock down still further and put either 3 or 4 bits directly onto the RGB or RGBI lines to give a freer choice of colour at the expense of resolution on the TTL monitors (something that can be done over composite, but actually uses a tweaked version of the hi-rez mono mode)...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you don't mind losing the ability to choose from 64 colours, you can achieve 16-colour output rather more simply and elegantly by just sending the 4bpp data directly down four wires in the monitor plug, and maybe instead allowing the choice of any 4 of those 16 in the medium resolution modes (particularly useful to have 4 greyscales, 3 plus a highlight colour, or B/W plus 2 highlights, which is what a lot of interfaces on the ST and Amiga did in their 640x200 4c modes) with a relatively simple 4x4 bit SRAM or other register. Monochrome would most likely use a fifth wire, or re-use one (or two, in medrez or in a hirez text mode - possible, as demonstrated with the MDA and many older terminals, because pulling a character out of ROM at the same time as setting a few attribute bits for the whole cell is more practical than trying to do the whole thing as a bitmap) of the existing ones alongside a simpler signal wire that sets the monitor into mono or colour mode. Actual monochrome monitors of course could follow AT&amp;amp;T's example of, instead of operating exclusively in on/off (plus optional intensity) mode, being able to interpret incoming colour data into 4, 8 or 16 greyscales - which still needs a DAC tied to the electron gun, but it's a) only working on one channel, and b) has a much more direct line to the driven load, so can be engineered specifically to work well with it and doesn't have to deal with all the extra impedence of the wires between it and the video card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the 64-colour thing is a absolute deal-breaker for you, then you can go with the EGA setup; two wires per colour channel, essentially making each one into a separate monochrome TTL system, but in this case each bit contributes a certain amount of voltage to the connected gun (ie we have three very simple 2-bit DACs in the monitor, splitting the difference between the true monochrome or the RGBI systems which were on/off with a booster, and the multilevel monochrome reinterpretation of colour input), one twice that of the other, so it's either off, 33%, 67% or 100% - though each could still be quite discriminate over its own input and still produce a pretty sharp pixel without much blurring due to the cable. It's about the practical limit for TTL signalling, so for 1980 it'd be on the bleeding edge and you'd be unlikely to do better without brewing up your own high-speed, high-output DACs to connect to an analogue RGB monitor. You'd have a small advantage over EGA at least; whilst you'd still need a 16x6 register (or a 16x8 SRAM with two bits unused for each colour), and 6 lines in the cable (all being simple, robust TTL), you wouldn't need the additional circuitry the monitor contained to not only switch frequencies, but also change its colour mode according to said frequency... each EGA monitor contained both RrGgBb decoding circuitry, but also an RGBI stage, which emulated the CGA behaviour by putting certain bit patterns onto the RrGgBb part. For a connected monochrome monitor, we'd likely do away with the 64-colour palette and just use 4 (or 2, or 1) of the wires as straight intensity. Picking 16 greyscales out of 64 isn't the most useful thing in the world unless you really like doing smooth fades between different screens in your software, and even with only 16 greys you can produce remarkably photographic images with a bit of dithering, same as you can do the same for colour with only 4096 colours (and do an OK job with 64, though being limited to 16 out of those, or just 4 greys, does hamper you somewhat).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last unspoken thing is actually having enough storage and processing power in your machine to deal with those high colour, high rez displays. It didn't really become practical to move beyond the CGA or even C64 (which is only 8kb per screen) level until proper 16-bit processors (like 7~8MHz 68000 or 8086, not the 5MHz 8088 of the PC and certainly not the 1-2MHz 6502s or 3-4MHz Z80s that would be your 1980 targets), large amounts of system RAM (at least 128k, preferably 256 or 512, as per the Mac and original design layouts of the Amiga and ST, and the base level of most XTs and juiced-up PC/XT clones), and guaranteed floppy disc availability for storage (again, that's about 1982/83 onwards, with the arrival of the XT, as Cassette was still an option for the PC). You just need too much processor time, and too much backing store (and bandwidth of such) plus temporary memory space to hold and manipulate the graphics. A halfway house could be stringy floppies (i.e. high speed medium capacity endless loop tapes) and putting twice as much memory on the video system itself to allow multiple pages, or just allowing a reduction in colour depth in the lower resolutions to allow double buffering within the 32k - or, most particularly, building in a character-based (ie, text) mode, which for any application that's mainly text rather than graphics focussed can offer a huge saving in terms of memory and bandwidth (e.g. the MDA has a quarter the memory of CGA, but it can produce the exact same amount of text in terms of characters x rows, and does so with higher quality, smoother looking lettering as the character cells are 9x14 pixels instead of 8x8, making for a total of approx twice as many pixels painted to the screen; thus, about an 8x saving)... you're likely going to want to include a character ROM of some kind anyway so it doesn't have to be loaded from disc into RAM each time, and the output will almost certainly be mediated by some kind of CRTC (which can &lt;em&gt;do&lt;/em&gt; graphics, but would have almost certainly have been mainly engineered for text mode output), so the majority of the work will have been done for you, so you just need to set up the alternative way of addressing and translating memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But on the whole, what we're looking at here is something that would be installed into a minicomputer or a professional/institutional rackmount micro, such as the DEC PDP series, rather than something that's going to go into the home, or even into a premium professional desktop machine. All up I'd be surprised if you could put the entire system together for less than $10,000 in 1980 dollars, which would get you a pretty nice car at the time. You'd have to have been extremely committed to high quality computer graphics to consider buying such a thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mean, maybe that's your protagonists' intended market. But like I said, if that's the case, there were already competing systems with similar specifications out there. They'd not have been so much inventing anything, instead they'd have had to try and undercut the existing big players with some kind of innovation that meant they could do everything for a much lower price. Like, less Apple or Intel, more Commodore/MOS...&lt;/p&gt;&#xA;" OwnerUserId="10196" LastEditorUserId="278" LastEditDate="2018-07-18T17:14:18.333" LastActivityDate="2018-07-18T17:14:18.333" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="7053" PostTypeId="2" ParentId="6594" CreationDate="2018-07-18T17:56:49.040" Score="12" Body="&lt;p&gt;Check out this page &lt;a href=&quot;https://classictech.wordpress.com/computer-companies/acer-groupmultitech-electronics-inc-sunnyvale-calif/&quot; rel=&quot;noreferrer&quot;&gt;https://classictech.wordpress.com/computer-companies/acer-groupmultitech-electronics-inc-sunnyvale-calif/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Esp. the PDF at the end of the article, dated September 14th 1982: &lt;a href=&quot;https://classictech.files.wordpress.com/2010/03/1982-multitech-presskit-introduces-first-microcomputer-to-handle-chinese-9-14-82.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://classictech.files.wordpress.com/2010/03/1982-multitech-presskit-introduces-first-microcomputer-to-handle-chinese-9-14-82.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The MPF-II-C takes advantage of a new method of coding Chinese&#xA;  characters to decrease the amount of memory space used to store the complex&#xA;  symbols. Before this &quot;Dragon&quot; method of character coding was developed by&#xA;  Multitech, one average Chinese character would use 32 bytes of memory space.&#xA;  The MPF-II-C uses only 64K bytes of memory to store 22,000 characters.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[...]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The Micro-Professor II-C is comprised of a Chinese Character Controller&#xA;  (CCC) and the Micro-Professor II, a 6502-based, Apple-compatible microcomputer also manufactured by Multitech. Two special systems--the Dragon Chinese Alphabet Coding System and the Dragon Chinese Character Generating System are incorporated into the CCC. The MPF-II-C can process either Roman or Chinese characters, and it also can program in Chinese Basic computer language.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;By using the 24 keys on the MPF-II keyboard, the user can access the 24&#xA;  Chinese &quot;alphabets&quot;. Each character requires between one to five keystrokes&#xA;  to be input. With one month of training, an operator can input 30 to 50&#xA;  characters per minute, according to Chang.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10197" LastActivityDate="2018-07-18T17:56:49.040" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7054" PostTypeId="1" CreationDate="2018-07-19T00:26:27.400" Score="9" ViewCount="322" Body="&lt;p&gt;I (as so many people before me) am developing a software simulation of the 6502, mostly based on the often cited block diagrams and several other sources of information.&lt;/p&gt;&#xA;&lt;p&gt;Basically all the components are done and I am in the process of configuring the Decode ROM and the RCL (Random Control Logic), only to find some unexpected behaviour: &lt;code&gt;DEX&lt;/code&gt; affects the behaviour of the CPU, even after its 2 cycles have completed.&lt;/p&gt;&#xA;&lt;p&gt;Until now it was my understanding that instructions only control the CPU while they are actually being executed.&lt;/p&gt;&#xA;&lt;p&gt;But, as can be seen in this &lt;a href=&quot;http://www.visual6502.org/JSSim/expert.html?a=0000&amp;amp;d=a900caa90000&amp;amp;loglevel=1&amp;amp;logmore=Execute,TState,plaOutputs,DPControl&amp;amp;steps=14&amp;amp;graphics=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visual6502 example&lt;/a&gt;, the T0+T2 cycle of an &lt;code&gt;LDA#&lt;/code&gt; right before &lt;code&gt;DEX&lt;/code&gt; looks different from the T0+T2 cycle of an &lt;code&gt;LDA#&lt;/code&gt; right after the &lt;code&gt;DEX&lt;/code&gt;: RCL outputs an additional SB/X, which is necessary to transfer the decreased value back into the X register. So &lt;code&gt;DEX&lt;/code&gt; has an effect AFTER its last cycle completed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;DEX&lt;/code&gt; does not seem to have any lingering effect on the decode ROM/PLA outputs however, as they are identical for both &lt;code&gt;LDA#&lt;/code&gt;s, so there must be some kind of hidden state affecting RCL.&lt;/p&gt;&#xA;&lt;p&gt;How does this work and which instruction groups are affected? Are there any sources going into more detail about this?&lt;/p&gt;&#xA;&lt;p&gt;Edit:&#xA;Just for clarification. I am not talking about pipelining. Of course, the second &lt;code&gt;LDA#&lt;/code&gt; is prefetched during the last cycle of &lt;code&gt;DEX&lt;/code&gt; (T1). The SB/X signal that confuses me happens one cycle later, during T0+T2, which is the first cycle of actual execution of &lt;code&gt;LDA#&lt;/code&gt;, where &lt;code&gt;DEX&lt;/code&gt; has already been wiped from the IR register.&lt;/p&gt;&#xA;" OwnerUserId="10194" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2021-03-03T16:28:43.097" Title="DEX: How does a 2-Cycle instruction affect RCL outputs AFTER it completes?" Tags="&lt;6502&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7055" PostTypeId="2" ParentId="7054" CreationDate="2018-07-19T00:48:54.497" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Until now it was my understanding that instructions only control the CPU while they are actually being executed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;True, but always keep in mind that the 6502 operation is pipelined. This means that there is an 'overhang' of the last instruction where it gets finished while the next is in preparation (opcode fetch). In this case it's storing the decremented value back to X. That cycle is often called T+ cycle and is always in parallel to T1 of the next instruction (*1,2).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So DEX has an effect AFTER its last cycle completed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Congratulations, you discovered pipelining :=)&lt;/p&gt;&#xA;&lt;p&gt;This &lt;em&gt;is&lt;/em&gt; the last cycle of DEX - and it's in parallel to fetching the next instruction.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How does this work and which instruction groups are affected?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Next to all instructions are. As mentioned, it's the core idea of pipelining in the 6502 to finish one operation while the next gets fetched. Just change the first LDA to an ADC ($69), and see how it performs while the DEX is fetched.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Are there any sources going into more detail about this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The primal source here is the &lt;a href=&quot;http://archive.6502.org/books/mcs6500_family_programming_manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;6502 Programming Manual&lt;/a&gt; - always a good read - in Chapter 5.1 (p52ff) the pipelining is explained (*3).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Unless it's a jump - but that's a different story.&lt;/p&gt;&#xA;&lt;p&gt;*2 - So, depending the point of view, all 6502 manual lie, as every (well, most) instruction do take one more cycle than they tell - even though this cycle is well hidden and usually not seen :))&lt;/p&gt;&#xA;&lt;p&gt;*3 - IIRC the Hardware Manual also mentions it.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2021-03-03T16:28:43.097" LastActivityDate="2021-03-03T16:28:43.097" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7056" PostTypeId="1" AcceptedAnswerId="7057" CreationDate="2018-07-19T18:24:57.433" Score="11" ViewCount="1061" Body="&lt;p&gt;&lt;a href=&quot;https://pdos.csail.mit.edu/6.828/2005/pdp11/pdp11-40-000107.html&quot; rel=&quot;noreferrer&quot;&gt;The PDP-11 MARK instruction&lt;/a&gt; was intended to be used as part of the standard PDP-11 subroutine return convention. &lt;code&gt;MARK&lt;/code&gt; facilitated the stack clean up procedures involved in subroutine exit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To use it, the caller would put the &lt;code&gt;MARK&lt;/code&gt; instruction &lt;em&gt;on the stack&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MOV R5,-(SP)        ;place old R5 on stack&#xA;MOV P1,-(SP)        ;place N parameters&#xA;MOV P2,-(SP)        ;on the stack to be&#xA;                    ;used there by the&#xA;                    ;subroutine&#xA;MOV PN,-(SP)&#xA;MOV #MARKN,-(SP)    ;places the instruction&#xA;                    ;MARK N on the stack&#xA;MOV SP,R5           ;set up address at MARK N instruction&#xA;JSR PC,SUB          ;jump to subroutine&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;At this point the stack is as follows: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;OLD R5&#xA;P1&#xA;...&#xA;PN&#xA;MARK N&#xA;OLD PC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The subroutine would execute normally and return using the &lt;code&gt;RTS R5&lt;/code&gt; instruction. This causes the contents of &lt;code&gt;R5&lt;/code&gt; to be placed in the &lt;code&gt;PC&lt;/code&gt; which then results in the execution of the instruction &lt;code&gt;MARK N&lt;/code&gt;. The contents of the old &lt;code&gt;PC&lt;/code&gt; are placed in &lt;code&gt;R5&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;MARK N&lt;/code&gt; causes: (1) the stack pointer to be adjusted to point to the old &lt;code&gt;R5&lt;/code&gt; value; (2) the value now in &lt;code&gt;R5&lt;/code&gt; (the old &lt;code&gt;PC&lt;/code&gt;) to be placed on the &lt;code&gt;PC&lt;/code&gt;; and (3) contents of the old &lt;code&gt;R5&lt;/code&gt; to be popped into &lt;code&gt;R5&lt;/code&gt; thus completing the return from subroutine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;MARK&lt;/code&gt; instruction seems unique in several aspects:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It appears to be the only PDP-11 instruction which used the register R5 implicitly. Thus, similarly to the PC (R7) and SP(R6), R5 should have had a mnemonic name. Had it?&lt;/li&gt;&#xA;&lt;li&gt;It can only be used meaningfully when put on the stack (Now we know that an executable stack is a bad idea, but that was then). &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;From my recollection, the PDP-11 C/UNIX calling conventions did not use the &lt;code&gt;MARK&lt;/code&gt; instruction; calling special subroutines CSAV/CRET instead. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In what PDP-11 OS or programming environment was it actually used?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there other instruction set architectures with instructions designed specifically for use on the stack? Is it known who came up with the idea?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-07-20T07:11:11.377" LastActivityDate="2018-07-31T02:16:58.137" Title="What is the history of the PDP-11 MARK instruction?" Tags="&lt;history&gt;&lt;software-development&gt;&lt;pdp-11&gt;&lt;instruction-set&gt;&lt;architecture&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7057" PostTypeId="2" ParentId="7056" CreationDate="2018-07-20T14:55:02.787" Score="6" Body="&lt;p&gt;Partial answer: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you compare the PDP-11 calling convention using a stack as described e.g. &lt;a href=&quot;https://people.cs.clemson.edu/~mark/subroutines/pdp11.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   ! parameters passed on stack&#xA;       ...&#xA;       mov   parm1,-(sp)&#xA;       mov   parm2,-(sp)&#xA;       jsr   pc,subr2&#xA;       add   #4,sp       ! adjust stack to remove parameters&#xA;       ...&#xA;&#xA;   ! subroutine called with parameters on stack&#xA;   subr2:&#xA;       mov   r1,-(sp)   ! save r1 contents on stack&#xA;       ...&#xA;       mov   (sp)+,r1   ! restore r1 contents from stack&#xA;       rts   pc         ! return to instruction following jsr&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;with the one from the manual which makes use of &lt;code&gt;mark&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   ! caller&#xA;       mov   r5,-(sp)&#xA;       mov   parm1,-(sp)&#xA;       mov   parm2,-(sp)&#xA;       mov   #mark2,-(sp)&#xA;       mov   sp,r5&#xA;       jsr   pc,subr&#xA;&#xA;   ! callee&#xA;   subr:&#xA;       mov   r1,-(sp)&#xA;       ...&#xA;       mov   (sp)+,r1&#xA;       rts   r5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;one can see that the use of &lt;code&gt;mark&lt;/code&gt; is actually less efficient (three commands instead of just one) than just adjusting &lt;code&gt;sp&lt;/code&gt; after the call. If you add to this that, as remarked in the &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/clcs.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;report by Ritchie and Johnson&lt;/a&gt;, there are &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;special short instructions on the PDP-11 that are used to bump the &lt;code&gt;sp&lt;/code&gt; by two or four bytes; these instructions [...] apply [...] to procedures of one and two arguments.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(and they also mention an improvement with a slightly different calling convention), then the conclusion is that &lt;code&gt;mark&lt;/code&gt; was something the designers of the PDP-11 dreamed up before fully understanding stack-based calling conventions (other PDPs like the PDP-8 didn't use a stack, and stored the PC in front of the subroutine...), and &lt;code&gt;mark&lt;/code&gt; probably was never used in practice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another indication for this is that there are PDP-11 models that don't implement this instruction, and neither does the VAX in PDP-11 compatibility mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an aside: On the x86 there was a similar development, when the &lt;code&gt;ENTER&lt;/code&gt; and &lt;code&gt;LEAVE&lt;/code&gt; instructions fell out of favour and where replaced by manipulating &lt;code&gt;SP&lt;/code&gt; directly (in various ways).&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2018-07-21T07:19:15.980" LastActivityDate="2018-07-21T07:19:15.980" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="7058" PostTypeId="1" AcceptedAnswerId="7072" CreationDate="2018-07-20T15:17:18.923" Score="5" ViewCount="1019" Body="&lt;p&gt;Back in my early Amiga days (A500), I remember coding simple demos that would use the dual-playfield mode and scroll them around (at a sweet 60FPS).  It was pretty trivial to do with languages like Blitz Basic and AMOS.  My knowledge back then was pretty limited as to what the Amiga could really do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later on in life, I learn that games like Agony used tricks like putting a static 1-bit bit plane and simply altering the background color of that bit plane with a copper list.  Then, it would use the dual-playfield as normal with the exception that the background would now only have 2 planes instead of 3.  This effect gives the illusion of three layers of scrolling with little CPU overhead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is amazing!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, how were the individual bit planes controlled like that?  I originally thought that the grouped planes had to &quot;stick together&quot; when they move around.  But I was wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2018-07-24T17:21:15.760" Title="How were individual bit planes scrolled on the Amiga (OCS)?" Tags="&lt;amiga&gt;&lt;graphics&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7059" PostTypeId="2" ParentId="7058" CreationDate="2018-07-20T17:56:35.300" Score="6" Body="&lt;p&gt;It's as simple as you'd think; the individual bit planes have individual start addresses, set from &lt;a href=&quot;http://amiga-dev.wikidot.com/hardware:bplxpth&quot; rel=&quot;nofollow noreferrer&quot;&gt;DFF0E0 upwards&lt;/a&gt;, though the seventh and eighth planes listed there don't exist on the OCS or ECS Amigas, such as the A500 (OCS) or A500+ (ECS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So they don't need to stick together at all, they're all set individually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For scrolling finer than a word boundary (i.e. 16px), the Amiga offers two playfields. One is comprised of the even bit planes, the other of the odd. Each playfield can be hardware scrolled independently at pixel resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Agony squeezes a third layer of scrolling by shifting one bitplane in the opposite direction to its playfield, so that it remains static. This is achieved via the blitter. The affected playfield ordinarily scrolls at only 25fps so less than 10% of blitter bandwidth is used up.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-07-23T14:16:07.343" LastActivityDate="2018-07-23T14:16:07.343" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="7061" PostTypeId="1" AcceptedAnswerId="7062" CreationDate="2018-07-21T17:32:47.930" Score="21" ViewCount="2074" Body="&lt;p&gt;Please consider the code in &lt;em&gt;&lt;a href=&quot;https://en.wikibooks.org/wiki/Super_NES_Programming/Initialization_Tutorial%20/Snes_Init&quot; rel=&quot;noreferrer&quot;&gt;Super NES Programming/Initialization Tutorial/Snes Init&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an excerpt:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; stz     $2113   ; Plane 3 scroll x (first 8 bits)&#xA; stz     $2113   ; Plane 3 scroll x (last 3 bits) #$0 - #$07ff&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From the comments, this seems intuitive enough. However, when I look at the instruction set reference provided in &lt;em&gt;&lt;a href=&quot;http://www.6502.org/tutorials/65c816opcodes.html#6.5&quot; rel=&quot;noreferrer&quot;&gt;6.5 LDA LDX LDY STA STX STY STZ&lt;/a&gt;&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;STZ store zero into the memory location specified by the operand.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Note that no registers are affected by STZ.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From this it seems that STZ with some constant operand should yield the exact same result every time it is executed, so what is the point in executing it with the same operand immediately after the previous instruction?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the variable here? Time? 0x2113 is a hardware register, and according to &lt;em&gt;&lt;a href=&quot;https://en.wikibooks.org/wiki/Super_NES_Programming/SNES_Hardware_Registers&quot; rel=&quot;noreferrer&quot;&gt;Super NES Programming/SNES Hardware Registers&lt;/a&gt;&lt;/em&gt;, it is the &quot;BG 4 Horizontal Scroll Offset&quot;. This doesn't seem to match the comment in the source for it being &quot;Plane 3 scroll x&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, does 0x2113 perhaps map to different actual memory/hardware registers depending on time? E.g. at some horizontal scanline the 0x2113 points to a particular horizontal scroll offset?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But even if that were true, I don't see why issuing the instruction only twice like that (and apparently with no code to check timing) would do any good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clearly I'm missing something obvious, or there is something weird with the source. I'm pretty certain it is me though, since the source assembles and runs perfectly fine.&lt;/p&gt;&#xA;" OwnerUserId="7413" LastEditorUserId="276" LastEditDate="2018-08-01T11:02:44.657" LastActivityDate="2018-08-01T11:02:44.657" Title="Why use repeated STZ instructions with the same operand on the 65C816 for the SNES (Super Nintendo)?" Tags="&lt;assembly&gt;&lt;snes&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7062" PostTypeId="2" ParentId="7061" CreationDate="2018-07-21T18:05:55.597" Score="24" Body="&lt;p&gt;This is a “write-twice” register, a 16-bit register mapped into a single byte, which takes two 8-bit stores to populate. There are a number of these on the SNES, with varying write orders (high or low byte first). The Super Famicom Development Wiki describes the behaviour of this particular family of registers &lt;a href=&quot;https://wiki.superfamicom.org/registers&quot; rel=&quot;noreferrer&quot;&gt;thus&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note that these are &amp;quot;write twice&amp;quot; registers, first the low byte is written then the high. Current theory is that writes to the register work like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   BGnHOFS = (Current&amp;lt;&amp;lt;8) | (Prev1&amp;amp;~7) | (Prev2&amp;amp;7);&#xA;   Prev1 = Current;&#xA;   Prev2 = Current;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   BGnVOFS = (Current&amp;lt;&amp;lt;8) | Prev1;&#xA;   Prev1 = Current;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-07-21T18:05:55.597" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7063" PostTypeId="2" ParentId="7061" CreationDate="2018-07-21T18:15:10.553" Score="6" Body="&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7061/why-use-repeated-stz-instructions-with-the-same-operand-on-the-65c816-for-the-sn#comment19523_7061&quot;&gt;RichF already mentioned&lt;/a&gt;, it's a 16-bit register, which means there are two 8-bit values needed. Usually such a register would be mapped into two addresses. The NES is a bit special here, as it only uses one memory address which results in the need of two consecutive writes with the same address (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tutorial shows an example by &lt;a href=&quot;https://en.wikibooks.org/wiki/Super_NES_Programming/Initialization_Tutorial#Step_2:_Setting_the_Background_Color&quot; rel=&quot;noreferrer&quot;&gt;setting the background colour&lt;/a&gt; where two bytes are written into $2122, low byte first.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What is the variable here? Time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly, instead of spreading the halves across a spacial (address) dimension, they are separated temporal (sequence) on the same location. First low byte then high byte. The &lt;a href=&quot;https://en.wikibooks.org/wiki/Super_NES_Programming/Initialization_Tutorial/Snes_Init&quot; rel=&quot;noreferrer&quot;&gt;initialization example&lt;/a&gt; shows nicely (*2) that these writes can be mixed in-between other instructions, as long as the sequence of low first, high next is kept.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Anyway, does 0x2113 perhaps map to different actual memory/hardware registers depending on time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Within the graphics hardware, yes. Depending on the sequence to either 'half' of the full 11-bit register.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;E.g. at some horizontal scanline the 0x2113 points to a particular horizontal scroll offset?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. It's still just a simple register (pair). No complex issue beside saving address space that is.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The whole idea here is that an 8 bit CPU has to use multiple writes to fill any hardware registers with more than 8 bit. At the same time, writing such a register only partial doesn't make much sense (*3). Also, spreading them over multiple addresses won't save code. Therefore arbitrary large registers can be 'hidden' behind a single address to save address space without any negative effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, 76 registers could be squeezed into 62 ($3E) addresses, keeping the decoding simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, depending on the register it's possible to set up a general logic to buffer all writes (for such wide registers) until the last (here the second) and then commit the whole value at once. From a programing view this is not only handy, but mandatory for registers that change value fast (like counters) to exactly synchronize their start. While this also can be achieved with two addresses, it may save circuitry on the hardware side when handled in a generic fashion (*4).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - It's a bit like with configuring Intel style peripheral chips where a series of control words are written into a single register address for initialisation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - For example, register $210E vs. $210F&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - We're talking panned effects, not fine tuned hacks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - It's also a classic case for a &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Hedgehog_and_the_Fox&quot; rel=&quot;noreferrer&quot;&gt;fox vs. hedgehog&lt;/a&gt; design choice, this being the latter.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="535" LastEditDate="2018-07-21T18:59:52.383" LastActivityDate="2018-07-21T18:59:52.383" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7064" PostTypeId="2" ParentId="773" CreationDate="2018-07-22T00:44:43.617" Score="0" Body="&lt;p&gt;I also had problems getting my PC to work with OTLA on my 48+ model. What I did was play the .wav file through Video Lan Player (VLC) on full blast (125%) and it worked!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used a stereo to split channel lead using phono to jack adaptors (basically green line in to red/white phono audio connections). I'm sure there's an easier way but this is the way that worked for me.&lt;/p&gt;&#xA;" OwnerUserId="10203" LastEditorUserId="4251" LastEditDate="2018-07-22T08:28:42.530" LastActivityDate="2018-07-22T08:28:42.530" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7065" PostTypeId="1" CreationDate="2018-07-22T16:46:46.650" Score="5" ViewCount="380" Body="&lt;p&gt;In 1980's ROM (Apple IIe, Commodore 64, VIC-20, ...) which algorithm is used to compute exp(x), and where do the coefficients below come from? (Chebyshev, Remez, Pade, ...)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.byte   $71,$34,$58,$3E,$56 ; 2.14987637E-5&#xA;.byte   $74,$16,$7E,$B3,$1B ; 1.43523140E-4&#xA;.byte   $77,$2F,$EE,$E3,$85 ; 1.34226348E-3&#xA;.byte   $7A,$1D,$84,$1C,$2A ; 9.61401701E-3&#xA;.byte   $7C,$63,$59,$58,$0A ; 5.55051269E-2&#xA;.byte   $7E,$75,$FD,$E7,$C6 ; 2.40226385E-1&#xA;.byte   $80,$31,$72,$18,$10 ; 6.93147186E-1&#xA;.byte   $81,$00,$00,$00,$00 ; 1.00000000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;PS: See &lt;a href=&quot;https://math.stackexchange.com/questions/2858662/expx-approximation-in-old-1980s-computer-rom&quot;&gt;https://math.stackexchange.com/questions/2858662/expx-approximation-in-old-1980s-computer-rom&lt;/a&gt; in Mathematics.SE&lt;/p&gt;&#xA;" OwnerUserId="10206" LastEditorUserId="637" LastEditDate="2018-07-22T21:49:34.463" LastActivityDate="2018-07-23T02:57:13.343" Title="1980's ROM used which exp(n) algorithm?" Tags="&lt;commodore-64&gt;&lt;apple-ii&gt;&lt;applesoft-basic&gt;&lt;vic-20&gt;&lt;microsoft-basic&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7066" PostTypeId="1" CreationDate="2018-07-22T20:39:43.013" Score="1" ViewCount="395" Body="&lt;p&gt;This is on an IBM 5154.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iMlxE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iMlxE.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dark grey next to light grey produces a white line between the two. This is noticeable on a color bar test, but is even worse in SimCity (making the text impossible to read).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WjdyG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WjdyG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; Note the white vertical line down the center (there's also a bright line to the left of the light grey but it's not as bright).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I adjust contrast to the minimum, the white goes away, but then brown is no longer brown and the 'light' colors are identical to the 'dark' colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/s0vqj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/s0vqj.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thoughts on what this might be? I might try adjusting the red cut-off and LSB, since I notice it's on the boundary of where red is when I turn the brightness way down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dsBMM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dsBMM.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's SimCity with the blue and green cut-off at minimum:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WAk2u.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WAk2u.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit: I replaced ~9 or so electrolytic capacitors on the video board, all of them in the PSU, and tested those on the CRT board (all good). None that had any effect whatsoever.&lt;/p&gt;&#xA;" OwnerUserId="7316" LastEditorUserId="7316" LastEditDate="2018-07-29T23:20:33.287" LastActivityDate="2018-07-29T23:20:33.287" Title="CRT contrast issue: light grey on dark grey" Tags="&lt;crt-monitor&gt;&lt;maintenance&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7067" PostTypeId="2" ParentId="7065" CreationDate="2018-07-23T02:57:13.343" Score="7" Body="&lt;p&gt;Monte Davidoff's floating point routines for early Microsoft BASIC used Chebyshev Modified Taylor series for &lt;code&gt;EXP(x)&lt;/code&gt;. There's a very helpful disassembly of the &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_MC-10&quot; rel=&quot;noreferrer&quot;&gt;TRS-80 MC-10&lt;/a&gt; ROM here: &lt;a href=&quot;http://www.roust-it.dk/coco/mc10/romlist.txt&quot; rel=&quot;noreferrer&quot;&gt;http://www.roust-it.dk/coco/mc10/romlist.txt&lt;/a&gt;. It's 6800 assembly, and the whole commented routine (using the same constants) is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;TBLF59B FCB     $81,$38,$AA,$3B,$29 ;1.44269504 (CF) correction factor for EXP function&#xA;TBLF5A0 FCB     $07        ;eight coeff's...  tchebyshev modified taylor series coeffs for exp(x)&#xA;        FCB     $71,$34,$58,$3E,$56 ;0.00002150 1/(7! * CF^7)&#xA;        FCB     $74,$16,$7E,$B3,$1B ;0.00014352 1/(6! * CF^6)&#xA;        FCB     $77,$2F,$EE,$E3,$85 ;0.00134226 1/(5! * CF^5)&#xA;        FCB     $7A,$1D,$84,$1C,$2A ;0.00961402 1/(4! * CF^4)&#xA;        FCB     $7C,$63,$59,$58,$0A ;0.05550513 1/(3! * CF^3)&#xA;        FCB     $7E,$75,$FD,$E7,$C6 ;0.24022638 1/(2! * CF^2)&#xA;        FCB     $80,$31,$72,$18,$10 ;0.69314719 1/(1! * CF^1)&#xA;        FCB     $81,$00,$00,$00,$00 ; 1.0&#xA;&#xA;&#xA;                ; --- EXP function ---&#xA;LBLF5C9:&#xA;FNC_EXP LDX     #TBLF59B    ;Get correction factor&#xA;        BSR     LBLF604     ;Multiply FPA0 by X&#xA;        JSR     LBLF26C     ;pack fpa0 and store in fpa3&#xA;        LDAA    ramC9       ;get exponent of fpa0 and compare to max value&#xA;        CMPA    #$88        ; (128)&#xA;        BLO     LBLF5DA     ;br if fpa0 &amp;lt; 128&#xA;LBLF5D7 JMP     LBLF190     ;set fpa0 = 0 or ?OV ERROR&#xA;LBLF5DA JSR     FNC_INT     ;convert fpa0 to integer&#xA;        LDAA    ram80       ;get least significant byte of integer&#xA;        ADDA    #$81        ; =127?&#xA;        BEQ     LBLF5D7     ;  ?OV ERROR&#xA;        DECA            ;  adds bias of 80 (since 81 used above)&#xA;        PSHA            ;save exponent on stack&#xA;        LDX     #TBL00BA    ;point (x) to FPa3&#xA;        JSR     LBLEF72     ;subtract fpa0 from (x)&#xA;        LDX     #TBLF5A0    ;point x to coeffs&#xA;        BSR     LBLF607     ;eval polynomial for frac part&#xA;        CLR     ramDC       ;force mantissa to be positive&#xA;        PULA    &#xA;        JSR     LBLF179     ;calc exp of new fpa0 by adding exps of integer and frac'l parts.&#xA;        RTS     &#xA;LBLF5F8 STX     ramDE&#xA;        JSR     LBLF26C&#xA;        BSR     LBLF604&#xA;        BSR     LBLF609&#xA;        LDX     #TBL00BA&#xA;LBLF604 JMP     LBLF0EF&#xA;LBLF607 STX     ramDE&#xA;LBLF609 JSR     LBLF267&#xA;        LDX     ramDE&#xA;        LDAB    ,X&#xA;        STAB    ramCF&#xA;        INX    &#xA;        STX     ramDE&#xA;LBLF615 BSR     LBLF604&#xA;        LDX     ramDE&#xA;        LDAB    #$05&#xA;        ABX     &#xA;        STX     ramDE&#xA;        JSR     LBLEF7D&#xA;        LDX     #ramBF  &#xA;        DEC     ramCF&#xA;        BNE     LBLF615&#xA;        RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Your listing missed off the all-important correction factor, 1.44269504 or &lt;code&gt;1/LOG(2)&lt;/code&gt; in BASIC. The coefficients take the form&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 / ( n! * (1/LOG(2))^n)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-07-23T02:57:13.343" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7068" PostTypeId="1" CreationDate="2018-07-23T06:22:03.193" Score="11" ViewCount="762" Body="&lt;p&gt;Almost all old home computers tend to offer non-square pixels, from wide-pixel graphics modes on the C64/CPC/BBC Micro to CGA's weird not-quite-square 320x200 mode with a pixel aspect ratio of 5:6.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What software do people use nowadays for creating pixel art for such systems? Even Aseprite, the kitchen sink of retro image editors, &lt;a href=&quot;https://github.com/aseprite/aseprite/issues/1489&quot; rel=&quot;noreferrer&quot;&gt;doesn't support this&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10207" LastEditorUserId="10207" LastEditDate="2018-07-23T06:28:24.450" LastActivityDate="2018-07-23T20:45:47.980" Title="What modern image editors support non-square pixels?" Tags="&lt;graphics&gt;&lt;software-development&gt;&lt;software-recommendation&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7069" PostTypeId="2" ParentId="7066" CreationDate="2018-07-23T07:44:52.477" Score="3" Body="&lt;p&gt;You should inspect red HV amplifier (usually positioned on board that plugs on CRT) there should be some suspicios capacitors.&lt;/p&gt;&#xA;" OwnerUserId="7673" LastActivityDate="2018-07-23T07:44:52.477" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7070" PostTypeId="2" ParentId="7066" CreationDate="2018-07-23T08:51:39.310" Score="2" Body="&lt;p&gt;This is caused by the higher voltage swings needed for high contrast causing the RGB guns to go out of alignment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's usually due to ageing/leaking capacitors. As a first step I'd try replacing all electrolytic capacitors. Most hardware of this age is going to have bad caps in it. Replace with quality ones (e.g. Nichicon). You may then have to recalibrate the monitor a little using the pots inside, but with luck it might be work.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-07-23T08:51:39.310" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7071" PostTypeId="2" ParentId="7061" CreationDate="2018-07-23T09:12:12.657" Score="3" Body="&lt;p&gt;In addition to the other answers, I'd like to explain why write-twice registers exist on the SNES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SNES's CPU, a Ricoh 5A22, is 16 bit internally but has an external 8 bit data bus. Thus it can only write 8 bits at a time, meaning it needs two writes to update a 16 bit register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's often undesirable to have the possibility of a 16 bit register being half written. In this case it could cause the display to flicker or be momentarily corrupted. Having write-twice registers prevents this happening, by buffering the first write and only copying the whole 16 bit value into the real register on the second write.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some architectures implement this using two consecutive memory addresses, with writes to one being buffered. The SNES uses a single 8 bit register to save address space, as the chipset only has an 8 bit address bus (256 possible registers) between it and the CPU.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2018-07-23T15:55:07.397" LastActivityDate="2018-07-23T15:55:07.397" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7072" PostTypeId="2" ParentId="7058" CreationDate="2018-07-23T09:30:52.967" Score="8" Body="&lt;p&gt;Individual bitplanes can only be scrolled by 16 pixels at a time, because the bitplane start address is word aligned. To scroll less than 16 pixels, the scroll register must be used, but it applies to all bitplanes on a playfield equally. The maximum number of playfields is two in dual playfield mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Agony uses a &lt;a href=&quot;http://codetapper.com/amiga/sprite-tricks/agony/&quot; rel=&quot;nofollow noreferrer&quot;&gt;different technique&lt;/a&gt;. First, it uses dual playfield so that there are three playfields for the front scrolling layer and three for the back layer. That gives you two layers of parallax.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then it splits the back playfield into two layers, using a trick that keeps one of the three bitplanes stationary while scrolling the other two with the scroll reigster. To stop the stationary layer from moving due to the scroll register, the blitter is used to shift it back in the opposite direction. This results in around 4k/frame of data copying, which is not too bad. To understand how this works, you need to understand bitplanes and how a kind of fake parallax can be created with duplicate colours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A fourth layer of parallax is added with the rain effect that is created with sprites alone. Some games use sprites for background layers too by repeating them over a single line (Risky Woods is a good example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of all that, the game users the Amiga's co-processor (copper) to alter the colour palette at different vertical positions on the screen, and then alternates between two palettes at 50Hz as well to produce a display with dozens of colours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It really is a masterpiece of Amiga programming.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="7946" LastEditDate="2018-07-24T17:21:15.760" LastActivityDate="2018-07-24T17:21:15.760" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7073" PostTypeId="1" AcceptedAnswerId="7074" CreationDate="2018-07-23T15:04:00.427" Score="10" ViewCount="1898" Body="&lt;p&gt;What are the rules for Applesoft BASIC formatting for code? I've been doing some BASIC coding and noticed that:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 input &quot;some question?&quot;; name$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Will be reformatted as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10  INPUT &quot;some question?&quot;;NAME$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I did not notice this formatting before because BASIC was my first programming language. Coming back to BASIC from many different programming editors I'm more cognizant of the formatting that code gets. To my more experienced eyes the formatting copies some of how FORTRAN is arranged, which I'm sure is not an accident.&lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="5436" LastEditDate="2018-07-23T20:39:33.870" LastActivityDate="2018-07-23T21:37:25.883" Title="What are the rules for Applesoft BASIC formatting for code?" Tags="&lt;apple-ii&gt;&lt;programming&gt;&lt;basic&gt;&lt;applesoft-basic&gt;&lt;text&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7074" PostTypeId="2" ParentId="7073" CreationDate="2018-07-23T15:16:06.293" Score="16" Body="&lt;p&gt;This is an AppleSoft issue where it puts spaces either side of a token.&#xA;PET/CBM BASIC (based off the same code base) doesn't do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tokenising ignores spaces, this means it can be difficult on the PET to see some of the problems that the tokeniser can cause.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example &lt;code&gt;LET AFOR=ONER&lt;/code&gt; gets parsed as &lt;code&gt;LET A FOR = ON ER&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is very difficult to see on a PET, I suspect someone at Apple changed this (IIRC the 8080 Basic is the same as a PET).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the version I wrote in .Net I ended up only adding spaces on the left for Functions and both sides for Statements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I seem to recall the Apple displays &lt;code&gt;10  PRINT  SPC( 3)&lt;/code&gt; which I thought was quite ugly and distinguishing for functions meant I could get &lt;code&gt;10  PRINT  SPC(3)&lt;/code&gt; which does look nicer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the original 6502 basic code from Microsoft (using the DEC cross assembler syntax) looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    LDYI    255     ;LOOK AT RES'D WORD LIST.&#xA;RESRCH: DEX         ;IS THIS THE RES'D WORD?&#xA;    BEQ PRIT3       ;YES, GO TOSS IT UP..&#xA;RESCR1: INY&#xA;    LDA RESLST,Y,   ;END OF ENTRY?&#xA;    BPL RESCR1      ;NO, CONTINUE PASSING.&#xA;    BMI RESRCH&#xA;PRIT3:  INY&#xA;    LDA RESLST,Y&#xA;    BMI PRIT4       ;END OF RESERVED WORD.&#xA;    JSR OUTDO       ;PRINT IT.&#xA;    BNE PRIT3       ;END OF ENTRY? NO, TYPE REST&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But the AppleSoft version looks like this (I've tidied up some of the labels so it's a better match):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                    LDY #$FF&#xA;RESRCH              DEX                             ; SKIP KEYWORDS UNTIL REACH THIS ONE&#xA;                    BEQ PRIT3                       ; &#xA;RESCR1              JSR GETCHR                      ; BUMP Y, GET CHAR FROM TABLE&#xA;                    BPL RESCR1                      ; NOT AT END OF KEYWORD YET&#xA;                    BMI RESRCH                      ; END OF KEYWORD, ALWAYS BRANCHES&#xA;PRIT3               LDA #LOCHAR(' ')                ; FOUND THE RIGHT KEYWORD&#xA;                    JSR OUTDO                       ; PRINT LEADING SPACE&#xA;L_LIST_4_4          JSR GETCHR                      ; PRINT THE KEYWORD&#xA;                    BMI L_LIST_4_5                  ; LAST CHAR OF KEYWORD&#xA;                    JSR OUTDO                       ; &#xA;                    BNE L_LIST_4_4                  ; ...ALWAYS&#xA;L_LIST_4_5          JSR OUTDO                       ; PRINT LAST CHAR OF KEYWORD&#xA;                    LDA #LOCHAR(' ')                ; PRINT TRAILING SPACE&#xA;                    BNE LIST_1                      ; ...ALWAYS, BACK TO ACTUAL LINE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As can clearly be seen there are an extra couple of spaces printed.&#xA;Also worth pointing out that mathematical operators like +-/* are tokens, I think &lt;code&gt;&amp;lt;=&lt;/code&gt; double separates so comes out as &lt;code&gt;&amp;lt; =&lt;/code&gt;. Finally there is some weirdness when things go beyond column 33 (I'd guess 80 column mode doesn't update MON_CH zero page so it doesn't trigger).&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorDisplayName="user722" LastEditDate="2018-07-23T21:37:25.883" LastActivityDate="2018-07-23T21:37:25.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7075" PostTypeId="2" ParentId="7073" CreationDate="2018-07-23T15:22:32.217" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What are the rules for Applesoft BASIC formatting for code? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The most basic thein to know is that there is no source code in the sense of plain text files. Only the tokenized basic lines. When listing a programm. The tokens get converted back to their (uppercase) keywords with spaces being added after each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This even adds some quirks when using screen editing mode (moving the cursor via ESC sequences and copying parts of the screen into the input buffer).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-07-23T15:22:32.217" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7076" PostTypeId="2" ParentId="7073" CreationDate="2018-07-23T16:25:37.250" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;code&gt;10 input &quot;some question?&quot;; name$&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Will be reformatted as:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;10  INPUT &quot;some question?&quot; ; NAME$&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's not quite right (confirmed just now with an emulator).  It will be reformatted as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10  INPUT &quot;some question?&quot;;NAME$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;i.e. there are no spaces before and after the semicolon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see what the formatting algorithm looks like in C++ in &lt;a href=&quot;https://github.com/fadden/ciderpress/blob/master/reformat/BASIC.cpp#L99&quot; rel=&quot;noreferrer&quot;&gt;this formatter&lt;/a&gt;, which mimics Applesoft.  Note in particular &lt;code&gt;BufPrintf(&quot; %s &quot;, &amp;amp;gApplesoftTokens&lt;/code&gt;, i.e. each token is printed with a space before and after.  Non-tokens are printed as-is with no spaces, and Applesoft doesn't store spaces outside of strings and REM statements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@Peterl noted the oddness of SPC() formatting:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;20  PRINT  SPC( 3)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It comes out like this because &lt;code&gt;SPC(&lt;/code&gt; is a token, rather than &lt;code&gt;SPC&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're curious about the tokenizing process, a text-to-Applesoft converter in C++ can be found &lt;a href=&quot;https://github.com/fadden/ciderpress/blob/master/app/BasicImport.cpp#L180&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2018-07-23T16:25:37.250" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7077" PostTypeId="2" ParentId="7073" CreationDate="2018-07-23T17:24:47.113" Score="11" Body="&lt;p&gt;Here is a program I wrote several years ago in AppleSoft for the fun of it. What it simply does is disassemble itself from the tokenized storage into a listing. If you run it, it will look the same as if you did a &lt;code&gt;LIST&lt;/code&gt; command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, this gives you all the rules of AppleSoft formatting but in the form of a program :-)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0  REM  ** DISASSEMBLE MYSELF&#xA;1  REM  ** AUGUST 2012, BRIAN J. BERNSTEIN&#xA;9  REM  -- SETUP STORAGE AND MEMORY LOCATIONS&#xA;10  DIM T$(255): REM   TABLE OF TOKENS AND CHARACTERS&#xA;20 TS = 53456:TE = 53885: REM   TOKEN WORD TABLE START/END    &#xA;30 TP = 0: REM    LAST PRINTED A TOKEN; 0=NO, 1=YES &#xA;39  REM   PS/PE IS PROGRAM START/END MEM LOCATION   &#xA;40 PS =  PEEK (103) + ( PEEK (104) * 256):PE =  PEEK (175) + ( PEEK (176) * 256)&#xA;50 PE = PE - 4: REM   IGNORE LAST 4 BYTES&#xA;59  REM   -- BUILD UP CHAR AND TOKEN TABLE                 &#xA;60  FOR X = 31 TO 127:T$(X) =  CHR$ (X): NEXT X&#xA;70 TN = 128&#xA;80  FOR X = TS TO TE&#xA;90 T$(TN) = T$(TN) +  CHR$ ( PEEK (X))&#xA;100  IF  PEEK (X) &amp;gt; 128 THEN TN = TN + 1&#xA;110  IF TN &amp;gt; 255 THEN 130&#xA;120  NEXT X&#xA;130 PC = PS: REM   SETUP PROGRAM COUNTER TO START &#xA;200  REM   -- SETUP FOR NEW LINE&#xA;209  REM   LE IS MEMLOC FOR WHERE LINE ENDS, FOLLOWED BY PRINTING LINE NUMBER&#xA;210 LE =  PEEK (PC) + ( PEEK (PC + 1) * 256) - 1&#xA;220  PRINT  CHR$ (13);( PEEK (PC + 2) + ( PEEK (PC + 3) * 256));&quot; &quot;;&#xA;230 PC = PC + 4&#xA;300  REM   -- DISPLAY LINE&#xA;310  FOR X = PC TO LE&#xA;320  IF  PEEK (X) &amp;lt; 128 AND TP = 0 THEN  GOTO 340&#xA;330  PRINT &quot; &quot;;&#xA;340  PRINT T$( PEEK (X));&#xA;350 TP = 0: IF  PEEK (X) &amp;gt; 127 THEN TP = 1&#xA;360  NEXT X&#xA;370 PC = LE + 1&#xA;380  IF PC &amp;gt; PE THEN  END &#xA;390  GOTO 200&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="382" LastActivityDate="2018-07-23T17:24:47.113" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7078" PostTypeId="2" ParentId="7068" CreationDate="2018-07-23T17:26:25.567" Score="7" Body="&lt;p&gt;TL;DR&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It is not a trivial problem to solve because you need to use an image editor that allows you to display and edit based on a X,Y DPI for the image that is different than the X,Y DPI (aspect ratio) of your work display.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://gimp.org&quot; rel=&quot;noreferrer&quot;&gt;The Gimp&lt;/a&gt; is a possible solution, as it is a free, open-source, multi-platform tool that supports this type of image editing.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The key is that Gimp, and other similarly sophisticated image editors, will let you set the DPI (or, PPI, &quot;pixels-per-inch&quot;) for the image, then respect this in your display and editing of the image. You do this via the &lt;code&gt;Image | Print Size...&lt;/code&gt; menu option. So you unlock the PPI settings in the dialog, and set them to respect the 5:6 (or whatever) aspect ratio of the retro computer/display that you are targeting. So the X,Y PPI in this dialog will be different than your square pixel display you are working on. Then, you can toggle the &lt;code&gt;View | Dot for Dot&lt;/code&gt; menu option to edit your image in its native PPI, and to view the image in scaled mode on your modern display. Thus you can edit the native pixels and approximate the results easily on your modern display. When you eventually export the image, the PPI settings of the image should be respected, so you get an image that displays correctly on the retro system.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-07-23T17:26:25.567" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7079" PostTypeId="1" AcceptedAnswerId="7080" CreationDate="2018-07-23T17:33:25.847" Score="3" ViewCount="676" Body="&lt;p&gt;I'm assuming (but do not really know) that the original Macintosh used a two layer PCB.  So my question is, when did the Macs start using more complicated boards with four (or more) layers?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those that do not know, a PCB (Printed Circuit Board) is typically stacked in layers with copper traces separating them.  Two layer boards (top and bottom) are the simplest (not counting single layer boards) and were widely used back in the dawn of computers (even today, really).  So stacking more layers in a PCB helps reduce the overall size of the board.  Which saves money but complicates the design.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2018-07-25T03:00:13.287" Title="When did the Macintosh start using four (or more) layer PCB's?" Tags="&lt;hardware&gt;&lt;apple-macintosh&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7080" PostTypeId="2" ParentId="7079" CreationDate="2018-07-23T18:10:37.457" Score="8" Body="&lt;p&gt;They always did -- the &quot;original&quot; Macintosh 128k used a four-layer PCB. You can actually see the layer numbers marked to the left of the Apple logo at the bottom of the board. (Only the &quot;1&quot; is clearly visible in this photo, but if you held the board up to a light, you'd see layers 2, 3, and 4 marked in the other three boxes.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://farm3.staticflickr.com/2365/2391525329_a5f436d4cc_b.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4pd0P.jpg&quot; alt=&quot;Macintosh 128k motherboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="461" LastEditorUserId="461" LastEditDate="2018-07-23T18:15:55.167" LastActivityDate="2018-07-23T18:15:55.167" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7081" PostTypeId="2" ParentId="7068" CreationDate="2018-07-23T20:45:47.980" Score="1" Body="&lt;p&gt;GrafX2 (&lt;a href=&quot;http://grafx2.chez.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://grafx2.chez.com/&lt;/a&gt;) is an open-source palettized-color paint program in the style of Deluxe Paint. It also supports graphics modes with non-square pixel ratios of 1:2 or 2:1, and I believe in the latest version 3:4. (Though in the version I tried out, 2.3, support wasn't 100%; a circle drawn in tall mode was an ellipse)&lt;/p&gt;&#xA;" OwnerUserId="3776" LastActivityDate="2018-07-23T20:45:47.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7082" PostTypeId="5" CreationDate="2018-07-23T21:36:16.510" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2018-07-23T21:36:16.510" LastActivityDate="2018-07-23T21:36:16.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7083" PostTypeId="4" CreationDate="2018-07-23T21:36:16.510" Score="0" Body="Graphical user interfaces generally; use with the particular environment’s tag as appropriate." OwnerUserId="8680" LastEditorUserId="15334" LastEditDate="2021-02-25T11:18:04.940" LastActivityDate="2021-02-25T11:18:04.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7084" PostTypeId="1" AcceptedAnswerId="7085" CreationDate="2018-07-23T21:41:14.770" Score="3" ViewCount="528" Body="&lt;p&gt;Using coaxial cable, there was a really bad channel bleed - as shown in &lt;a href=&quot;https://drive.google.com/file/d/1Is1XM3PBH6VNIKSpYEl25caK7iyn_7oI/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt;, putting a NES on channel 3 caused distortion to the static on channels 2 and 4-7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This distortion was so bad, you could see glimpses of the game (Days of Thunder) through the static. It also made the screen shake like crazy (on a CRT).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the cause of this distortion? There was no wireless transmitting involved with the linked video (the NES was directly connected through coaxial, no antennas installed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(A similar issue happens with radio)&lt;/p&gt;&#xA;" OwnerUserId="8680" LastEditorUserId="8680" LastEditDate="2018-07-23T22:15:00.737" LastActivityDate="2018-07-26T01:03:43.230" Title="What made channel bleed so bad over coaxial cable?" Tags="&lt;graphics&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7085" PostTypeId="2" ParentId="7084" CreationDate="2018-07-23T23:36:12.677" Score="7" Body="&lt;p&gt;The problem is most likely the TV itself. Typical consumer grade equipment suffers from a rather poor ability to reject strong signals on nearby frequencies. Channel 2 and 4 through 7 are all pretty close to channel 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The coax is merely delivering a lot of signal. More than the simple tuning circuits can handle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is one reason that modulators often have isolation switches in them to protect the downstream receiver.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastActivityDate="2018-07-23T23:36:12.677" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7086" PostTypeId="2" ParentId="5401" CreationDate="2018-07-24T05:29:30.910" Score="1" Body="&lt;p&gt;There were much better things around in the old days of mine, even while not official releases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early 80s I owned a TRS80 Model 1 clone (that Z80-based thing looking like a silver C64, but years before the C64 was even thought of ...), built from a modified ECB-Bus industry computer CPU card originally meant for CP/M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That thing ran on the original ROMs and FDD OSes, featured 4 FDD drives in DS/DD with 80 tracks and a hand woven (!) graphics logic board, all sitting in a nice ECB-Bus aluminium case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its heart was a Z80H, as far as I remember, and it ran at 8MHz (instead of the original 1.77 MHz, which was still available on that box for games ... but switching over usually required a reboot). Was quite quick, that thing. But I sold it to an enthusiast long ago ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seems that actually an eZ80 CPU is still around with 50MHz clock ... would be fun to build such a box with that and play &quot;Arcade Bomber Scramble&quot; or &quot;Outhouse&quot; on it ;-)&lt;/p&gt;&#xA;" OwnerUserId="10195" LastEditorUserId="7946" LastEditDate="2018-07-24T15:41:28.030" LastActivityDate="2018-07-24T15:41:28.030" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7087" PostTypeId="1" AcceptedAnswerId="7091" CreationDate="2018-07-25T02:47:34.677" Score="10" ViewCount="4478" Body="&lt;p&gt;I'm building a Z80 home computer and I need color graphics for it similar to other home computers such as the C64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought that, like Motorola or MOS, Zilog would have a peripheral chip dedicated to Video Generation (like the VIC/VIC-II or Motorola 6847). But I couldn't find anything about such a Chip or Chipset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only thing I was able to find is that apparently most Z80 computers just connected to a TV via RF, but trying RF modulation on my own without any knowledge of it, would probably not be a good idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what kind of video chips would be compatible with the Z80 that wouldn't cause any major timing issues? Or maybe other projects where they already documented everything I could use for my own system. I couldn't really find anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd just like to know before I go out and buy some chips.&lt;/p&gt;&#xA;" OwnerUserId="10200" LastEditorUserId="2081" LastEditDate="2018-07-26T19:45:46.890" LastActivityDate="2019-11-23T20:14:10.063" Title="What Video Chips/Video generation techniques are usable for the Z80?" Tags="&lt;z80&gt;&lt;video&gt;" AnswerCount="7" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7088" PostTypeId="2" ParentId="7079" CreationDate="2018-07-25T03:00:13.287" Score="1" Body="&lt;p&gt;The original Mac had to use a 4 layer main logic PCB to meet FCC emission requirements.  The metal fence is on the PCB for similar reasons.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2018-07-25T03:00:13.287" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7089" PostTypeId="2" ParentId="7087" CreationDate="2018-07-25T03:11:06.100" Score="4" Body="&lt;p&gt;The TMS9918a and family were commonly paired with the Z80, e.g. in the ColecoVision, original MSX, Memotech, Sega SG1000 and elsewhere. It provides a Spectrum-esque background, albeit with 8x1 attributes, and hardware sprites but be warned that there's no hardware scrolling. It's tile-map based though so an 8px scroll is easy and speedy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's relatively unique amongst 8-bit solutions in having its own dedicated RAM though, which might mean a more complicated build than you were hoping for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both the MSX 2 and Sega Master System use different backwards-compatible developments of the same chip with improved scrolling and sprites, but they tend to be harder to come by, both having been approximately specific to a single machine. The MSX 2's Yamaha V9938 or the later V9958 are the more likely to be findable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A pin-up compatible FPGA implementation of the original is &lt;a href=&quot;http://codehackcreate.com/archives/30&quot; rel=&quot;nofollow noreferrer&quot;&gt;available in the form of the F18a&lt;/a&gt; supposing you wanted to stick to an authentic design but preferred not to try to pull 30-year old chips to build it.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;If you wanted to use one of the 6502 chips, the CPC's solution to bus sharing is simple and would work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Supply a 4Mhz clock to the Z80. Also build a WAIT generator, which has a four-cycle period. For the first three of those cycles, assert the WAIT line. On the fourth leave it alone. I'll number them for clarity:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;cycle 1: assert WAIT;&lt;/li&gt;&#xA;&lt;li&gt;cycle 2: assert WAIT;&lt;/li&gt;&#xA;&lt;li&gt;cycle 3: assert WAIT;&lt;/li&gt;&#xA;&lt;li&gt;cycle 4: don't assert WAIT.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That will have the effect of ensure the Z80 accesses memory only during cycles 4 and 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That allows you to run whatever you selected from 6502 land at 1Mhz, as they'd expect. Just signal PHI1 during cycles 2 and 3.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Similarly, don't rule out just not making shared usage transparent. Systems like the TRS-80 had the simple rule that if the CPU and video circuits both try to read the same physical chip at once then the CPU's address is the one communicated, and the video simply gets a value other than the one it wanted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vsync, etc, is then made visible to the programmer, and it's their job to avoid graphical interruptions.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Of the other Z80s, the only one that I'm aware of with shared memory but an asynchronous design is the Enterprise. That also would work with a 6502-esque chip and relatively simple arbitration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The logic is pretty simple: there is one clock for the video. There is another clock for the processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The arbitration logic sits between the CPU's crystal and the CPU itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reacting to CPU crystal clock transitions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if the CPU is accessing something other than the shared area, or the video processor is in a fallow cycle, it applies a clock transition to the CPU;&lt;/li&gt;&#xA;&lt;li&gt;otherwise it does nothing.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On that machine video data is fetched in two cycles out of three of the video clock; as many Z80 accesses as will fit then occur in the other one. With something like a 6847 it'd be every other cycle that the Z80 was allowed to access the shared resources in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This scheme scales to any CPU input clock. Also the pauses are never very long so even if your CPU weren't static (though Z80's classically were), it shouldn't be problematic. And if your processor can fit multiple memory accesses into the video gap, it will.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-07-25T18:00:05.907" LastActivityDate="2018-07-25T18:00:05.907" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7090" PostTypeId="1" CreationDate="2018-07-25T03:30:03.870" Score="6" ViewCount="258" Body="&lt;p&gt;I'm doing some research on the CDC 7600 supercomputer. I'm trying to find at least a general guess on the overall weight of the machine, preferably including the necessary cooling equipment. I know it wasn't a very popular machine and specs on the 6600 are easier to find, but the differences between the 6600 and 7600 are sufficient that the weight would be different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for anything you can find!&lt;/p&gt;&#xA;" OwnerUserId="10219" LastActivityDate="2018-08-08T03:27:28.660" Title="Total weight of the CDC 7600?" Tags="&lt;mainframe&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7091" PostTypeId="2" ParentId="7087" CreationDate="2018-07-25T07:52:16.293" Score="14" Body="&lt;p&gt;&lt;strong&gt;TLDR; - See below&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And I thought that like Motorola or MOS, Zilog would have a peripheral chip dedicated to Video Generation (like the VIC/VIC-II or Motorola 6847). But I couldn't find anything about such a Chip or Chipset.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Zilog never did any graphics chips, while MOS did a 6845 compatible CRTC - well, plus all the Commodore stuff.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The only thing i was able to find is that aparently most Z80 computers just connected to a TV via RF, but trying RF Modulation on my own without any knowledge of it, would probably not be a good idea.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;RF-Modulator is something independent of the graphics chip and related to display connection. Also not really rare. Ready-to-use units can be found all around the net (&lt;a href=&quot;https://www.ebay.de/itm/RCA-Composite-AV-HF-Koax-Koaxial-Signal-Konverter-Adapter-RF-Modulator-/222863224523&quot; rel=&quot;nofollow noreferrer&quot;&gt;Example&lt;/a&gt;). You'll still need a video source.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So what kind of Video chips would be compatible with the Z80 that wouldn't cause any major timing Issues?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The question is less 'what's compatible' but rather what's available. It sure is possible to use even a C64's VIC2 with a Z80 system, but acquiring one means taking a C64 apart (*1). Also, I think it's safe to assume you're not firm with designing of such systems, so the selection should be easy to implement and handle. There isn't much left in that fits these criteria.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd say the prime choice would be a &lt;a href=&quot;https://en.wikipedia.org/wiki/Yamaha_V9958&quot; rel=&quot;nofollow noreferrer&quot;&gt;V9958&lt;/a&gt;, as it is still available in good quantities at reasonable prices. Even more, there's a &lt;a href=&quot;https://www.msx.org/wiki/Yamaha_V9958&quot; rel=&quot;nofollow noreferrer&quot;&gt;good documentation&lt;/a&gt; and plethora of Z80 coding examples available, as it was the controller used in MSX2+ (*2) computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The V9958 is based on TI's iconic 9918 and fully compatible. So while that one is also still in supply, why go for the lesser? In addition to higher resolutions and more colors the V9958 even includes hardware accelerated commands for line draw and block operations. Even more important for your intended use is a plain RGB output, enabling an easy setup for VGA screens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally there's the &lt;a href=&quot;https://www.msx.org/wiki/Yamaha_V9990&quot; rel=&quot;nofollow noreferrer&quot;&gt;V9990&lt;/a&gt;. While mostly compatible with TMS9918 and V9958, it offers again improved resolutions (up to 640x480@4 colors), more speed and &gt;120 sprites on screen - a dream for classic tile based game programming. On the negative side it features a QFP package, so you have to like SMD (*3). Considering that most actual chips are SMD anyway not so much of a bad thing. The V9990 is also in good supply, so no need to crack open various game cartridges (*4) .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All TMS9918 family chips offer a great advantage simple (8 bit systems): Video RAM is separated and only a few ports are needed for communication. Address space is a premium on 8 bit systems and not needing some (usually a lot) for video buffers is heaven sent - or the reason why TI did id (beside simplifying access and DRAM control :)). &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In a nutshell:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Take a &lt;strong&gt;TMS9918&lt;/strong&gt; if you want to have the real good old feeling of many limitations and a wired video interface.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;strong&gt;V9958&lt;/strong&gt; for a great and simple solution with many features to play with&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Or the &lt;strong&gt;V9990&lt;/strong&gt; if you want to get something that may more fit today's needs - the maximum possible except building your own chip and/or slaughtering an Amiga.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For further reading you might want to take a look at these questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6432/were-video-chips-specific-to-the-cpu&quot;&gt;Were video chips specific to the CPU?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4831/video-chip-for-hypothetical-1988-arcade-game&quot;&gt;Video chip for hypothetical 1988 arcade game&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Or take a look at the &lt;a href=&quot;https://steckschwein.de/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Steckschwein&lt;/a&gt; project. &lt;a href=&quot;https://steckschwein.de/2018/03/17/v9958-es-ist-vollbracht/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Their new video card&lt;/a&gt; (*5) uses a V9958. Also a nice example that more generic chips, like video, are less CPU dependent, as the Steckschwein is a 6502 system, where the 9958 was designed for Z80 systems.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I wouldn't mind getting rid of one more of them - but even after selling the SID on ePay, there's still about the same amount of electronic waste left as before taking apart &amp;lt;/DuckAndCover&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The 9938 used in MSX2 got basically the same features, but might be harder to come by without taking an MSX2 apart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The V9958 also got a little quirk to take into account when doing a board, as it's a 2mm DIP (condensed DIP).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Though, getting a &lt;a href=&quot;https://www.msx.org/wiki/Sunrise_GFX9000&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sunrise GFX9000&lt;/a&gt; or a &lt;a href=&quot;https://www.msx.org/wiki/Tecnobytes_V9990_Powergraph&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tecnobytes Powergraph&lt;/a&gt; might be a good way to acquire an 8 bit compatible graphics card, as it's interface is based on the Z80 bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Their first card was TMS9918 based.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-23T17:47:53.843" LastActivityDate="2019-11-23T17:47:53.843" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="7092" PostTypeId="2" ParentId="7087" CreationDate="2018-07-25T07:54:11.717" Score="2" Body="&lt;p&gt;No, the Z80 did not have a preferred or Zilog-designed video controller. The Z80 was developed when integrated video circuitry was just about coming up and everyone was still using serial terminals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You didn't exactly specify what your requirements are. Graphics, text-only, resolutions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple text-only VGA video interface can be built from an AVR and some dual-ported RAM. There are various example projects out there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next stage of sophistication would be a text-only implementation based on a Motorola 6845 or one of its successors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you are looking into graphics, the memory map and 64k restriction of an 8-bit CPU comes into play - you need to decide how you want to address serious amounts of frame buffer memory, for relatively &quot;modern&quot; screen resolutions, you will definitely have to look into memory banking. You can build a graphics display based on a 6845, but that gets a bit complicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Yamaha chips for MSX and MSX-2 (V9938 and successor) would be a good starting point with some interesting concepts on framebuffer handling. &lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-07-25T07:54:11.717" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7093" PostTypeId="2" ParentId="7087" CreationDate="2018-07-25T08:06:30.590" Score="2" Body="&lt;p&gt;While it wasn't designed to be compatible, there were numerous machines that paired a Z80 with an MC6845 chip.  Typically these designs used a separate timing controller (perhaps built using some kind of programmable logic) to latch the 6845's output signals and either drive them onto the bus during periods when the Z80 is guaranteed not to use the bus (e.g. in the two empty bus cycles that always happen after an instruction fetch) or suspend the Z80 (typically by asserting WAIT) until the access is finished.  The best known of these was probably the Amstrad CPC464.  For a simple implementation, you could even just stop the processor while the screen is being drawn and only run it during retrace intervals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another alternative, albeit not a popular one, is the Intel 8275.  This is very similar to the 6845 in capability (i.e. it's designed for text mode output, but can be used for general raster graphics because it relies on an external character generator, which can be swapped for a graphical decoder if you prefer), except it's designed to integrate with an 8257 DMA controller in order to control access to the bus, and has memory buffers that read display data ahead of being required to make timing easier.  The 8257 DMA controller's protocol and timing is compatible with the BUSRQ/BUSACK signals of the Z80, which means if you don't need an external DMA chip it can be wired directly to a Z80.  One limitation, however, is that it supports a display of at most 80x64 blocks, and expects its data to be 7-bit ASCII with embedded attributes (allowing 5 bits of attribute control), so with a 2 byte sequence you can control 12 bits of output... this somewhat limits the total output resolution if used in graphics mode.  It would be sufficient for a 320x192 monochrome display.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-07-25T08:30:25.733" LastActivityDate="2018-07-25T08:30:25.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7094" PostTypeId="2" ParentId="7087" CreationDate="2018-07-25T11:45:51.900" Score="5" Body="&lt;p&gt;Partly as a joke: if you want you can rely on no specialized video chips. Take a look &lt;a href=&quot;http://sblive.narod.ru/ZX-Spectrum/Leningrad48k/Leningrad48k.htm&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; (&lt;a href=&quot;http://sblive.narod.ru/ZX-Spectrum/Leningrad48k/LeningradSCH180dpi.gif&quot; rel=&quot;noreferrer&quot;&gt;schematics&lt;/a&gt;), it is ZX spectrum clone that is able to generate TV video (either black-and-white or RGB) in about 30 TTL ICs, plus Z80 itself, plus ROM and eight DRAM chips.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-07-25T11:45:51.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7095" PostTypeId="1" AcceptedAnswerId="7099" CreationDate="2018-07-25T12:43:21.287" Score="28" ViewCount="8901" Body="&lt;p&gt;Many early computers use &lt;a href=&quot;https://en.wikipedia.org/wiki/Ones%27_complement&quot; rel=&quot;nofollow noreferrer&quot;&gt;ones' complement&lt;/a&gt; to represent some kind of signed integer. Examples include the PDP-1, the CDC-6600, and many other popular computers.&lt;/p&gt;&#xA;&lt;p&gt;The C standard is obviously written with ones' complement machine in mind; for example, it specifies that a signed integer may hold values −32767 to +32767.&lt;/p&gt;&#xA;&lt;p&gt;But I find that modern day examples of computers that use ones' complement rather hard to come across. I think it's safe to assume that anything you've got that runs a computer program and has signed integers of some kind uses two's complement. So what is the reason for the decline in popularity for ones complement architectures?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="15334" LastEditorDisplayName="user39" LastEditDate="2021-03-26T12:45:10.347" LastActivityDate="2021-03-26T15:32:22.843" Title="Why did ones' complement decline in popularity?" Tags="&lt;architecture&gt;" AnswerCount="6" CommentCount="14" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7096" PostTypeId="2" ParentId="7095" CreationDate="2018-07-25T13:01:40.767" Score="45" Body="&lt;p&gt;I imagine representations other than two’s complement (ones’ complement, sign/magnitude...) declined in popularity because two’s complement is simpler to implement; in particular:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;addition, subtraction, and multiplication of two signed input values of length &lt;em&gt;n&lt;/em&gt; can use the same implementation as the unsigned variants, modulo 2&lt;sup&gt;&lt;em&gt;n&lt;/em&gt;&lt;/sup&gt;;&lt;/li&gt;&#xA;&lt;li&gt;zero only has one representation, with all-zero bits, which means testing for equality with zero is straightforward (which has knock-on effects on implementations of equality testing etc. since the latter can be implemented using subtraction, which also works for ordering values).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Ones’ complement systems still exist, &lt;em&gt;e.g.&lt;/em&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_1100/2200_series&quot; rel=&quot;noreferrer&quot;&gt;the UNIVAC 1100/2200 series&lt;/a&gt;, but as you mention they are rare (and existent probably only for historical reasons).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-07-25T13:01:40.767" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7097" PostTypeId="2" ParentId="7095" CreationDate="2018-07-25T13:02:41.480" Score="16" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But I find that modern day examples of computers that use ones complement rather hard to come across.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I can only think of the Unisys Clearpath here - and even they are Itaniums at hardware level by now.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The C standard is obviously written with one's complement machine in mind; for example, it specifies that a signed integer may hold values -32767 to +32767.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Jup, that way either system of signed integer handling (within 16 bits) will conform.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So what is the reason for the decline in popularity for ones' complement architectures?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It was never really popular in the first place. Even with early computers the large majority did use two's complement due the much simpler handling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it is true that a ones' complement implementation can save circuitry due the fact that a subtraction is just an addition with the subtrahend being negated (*1,2), it also adds complexity to (micro) program design and adds pitfalls (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ones' complement offers advantages in multi-word multiplication and division (*4), as well as for certain mathematical tasks (nearing zero from either side). But it adds complexity to hardware and/or software as every operation crossing zero needs an adjustment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To a certain degree &lt;strong&gt;it's in use today almost everywhere&lt;/strong&gt;, as the IEEE 754 Floating Point standard is based around signed values including signed zero. So with a positive spin it can be said that modern CPUs use both: The core CPU's handling (read integer) is two's complement, while associated FPUs use the advantages of ones' complement.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - That's why the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pascal%27s_calculator&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pascaline&lt;/a&gt; uses nines' complement&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - But only if it's not negative zero and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Like the need to always know if a comparison is meant to be numeric and integer so a correction for +/- 0 is to be applied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - As no additional step for sign calculations is needed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-07-27T08:23:15.250" LastActivityDate="2018-07-27T08:23:15.250" CommentCount="21" ContentLicense="CC BY-SA 4.0" />
  <row Id="7098" PostTypeId="2" ParentId="5069" CreationDate="2018-07-25T22:04:31.420" Score="2" Body="&lt;p&gt;Developers did occasionally use the overscan color as a profiling/debugging tool. By setting the overscan to a different color at the start of each major section of the game loop code, it was possible to see what proportion of a frame period was taken by different sections of game logic. You could also see how much time margin you had at different points in the game. If there was a crash, the overscan color would hint at which major section of the code was running at the time of the crash — ordinarily a developer running under a debugger would have much more information at hand, but a tester running a cartridge build might not.&lt;/p&gt;&#xA;" OwnerUserId="352" LastActivityDate="2018-07-25T22:04:31.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7099" PostTypeId="2" ParentId="7095" CreationDate="2018-07-25T22:43:04.800" Score="20" Body="&lt;p&gt;Two's complement is generally simpler to implement in hardware than ones' complement, except for one thing: if one wants a &quot;live&quot; readout of register values using one set of lights for positive numbers and one set for negative numbers (blanking whichever set isn't appropriate) that can be accommodated very cheaply and easy with ones'-complement using one small transistor per bulb and a pair of large transistors to act as master enables for the positive and negative lights.  If the states of every register exist as continuously-accessible signals, adding a live readout that shows things in signed format is nice and easy.  If a system were to use two's-complement, the values displayed for negative numbers would be off by one, and a significant amount of extra circuitry would be needed &lt;em&gt;for each register's readout&lt;/em&gt; to correct it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the days when computers had register readouts, using ones'-complement could make the registers easier to read.  Two's-complement integer math is better in just about every other way, however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, ones'-complement would make sense with floating-point math if treats 0.1111111111111.... with an unending string of ones as equivalent to 1.00000000.  Viewed in that light, the sign bit controls the state not just of all otherwise-unspecified bits to the left of the number, but also the state of bits to the right.  ~0 would thus equal ....11111111.0 + 0.11111111....., i.e. -1+1, i.e. zero.  Two's-complement representations are asymmetric, but with integer math the asymmetry is consistently one unit.  In floating-point math, the two's-complement asymmetry would vary with scale, which is a bit more awkward.  Symmetry is more useful with floating point than with integer math, and thus ones'-complement would be advantageous there compared with two's-complement.  Sign magnitude also works (and is what many systems actually use) but ones'-complement could work essentially as well.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2018-07-25T22:50:55.573" LastActivityDate="2018-07-25T22:50:55.573" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7100" PostTypeId="2" ParentId="7084" CreationDate="2018-07-26T01:03:43.230" Score="3" Body="&lt;p&gt;A quality RF modulator will only produce signals within the frequency range of the selected channel.  On the other hand, an RF modulator which kinda-sorta works, but produces a fair mount of junk all over the spectrum (including on the channel of interest) can be built using less than a handful of transistors (if memory serves, Pong-style consoles used a single-transistor design, and the Atari 2600 used a two-transistor design).  Such a design would not be even remotely acceptable for broadcast use, but for feeding a signal directly into a television set via coaxial cable, even nasty horrible designs may be sufficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For most vintage devices which include both RF and composite outputs, feeding a composite output through a quality modern RF modulator will yield a much better picture than using the RF modulator built into the vintage device.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-07-26T01:03:43.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7101" PostTypeId="1" AcceptedAnswerId="7106" CreationDate="2018-07-26T07:22:17.937" Score="8" ViewCount="1784" Body="&lt;p&gt;Early microcomputers sometimes supported several peripherals in a 'daisy chained' arrangement, i.e. instead of the computer having several ports, one per peripheral, it had a single port, which each peripheral would pass through to the next one. For example, per Wikipedia, the Vic-20 had &quot;a serial CBM-488 bus (a serial version of the PET's IEEE-488 bus) for daisy chaining disk drives and printers&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the Vic-20 cassette drive was not daisy chained. It had a different, dedicated port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each added port had a nontrivial cost, not just in terms of manufacturing expense but development complexity, an extra thing that could go wrong, and increased difficulty of RF shielding. I would expect ports to be added only when there was compelling reason. Was there a reason it was difficult to daisy chain a cassette drive?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did any early microcomputer actually have a daisy chained cassette drive?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-02-09T19:06:21.953" Title="Daisy-chained cassette drive?" Tags="&lt;cassette-tape&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7102" PostTypeId="2" ParentId="7101" CreationDate="2018-07-26T09:27:38.693" Score="9" Body="&lt;p&gt;I’m not sure whether this counts as early enough, but the Atari 1010 cassette drive could be daisy-chained; it was produced from 1983 to 1985, replacing the earlier 410 which had to end the SIO chain. The XC11 (1986) could also be daisy-chained, but the XC12 couldn’t. (Although as &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/6659/raffzahn&quot;&gt;Raffzahn&lt;/a&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7101/daisy-chained-cassette-drive/7102?noredirect=1#comment19670_7102&quot;&gt;points out&lt;/a&gt;, you can’t use more than one cassette drive on an SIO bus; so the daisy-chaining ability only allows you to connect other devices to the chain &lt;em&gt;via&lt;/em&gt; the drive. Strictly speaking, only one “SIO motor control” device can be connected; cassette drives are motor control devices.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://www.atarimania.com/faq-atari-400-800-xl-xe-what-kinds-of-525--floppy-disks-can-i-use-with-my-atari-drives_24.html&quot; rel=&quot;noreferrer&quot;&gt;the Atari 8-bit FAQ&lt;/a&gt; for details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, unlike the VIC-20 cassette drive, the Atari cassette drives all used the SIO port; there was no dedicated port for cassette drives on Atari computers. The drives decoded the signal internally.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-07-26T12:18:39.350" LastActivityDate="2018-07-26T12:18:39.350" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7103" PostTypeId="2" ParentId="7101" CreationDate="2018-07-26T11:45:00.277" Score="9" Body="&lt;p&gt;You are talking about two different things, the Commodore Datasette, which had an idiosyncratic connector (like the Atari SIO as mentioned in another answer here), and ordinary cassette drives as used with other home computers (BBC Micro, Tandy TRS-80, MSX, Dragon, et al.).  The latter were &lt;em&gt;ordinary analogue audio equipment&lt;/em&gt;.  They weren't computer peripherals with digital data and control interfaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The connections from a home computer to a cassette player were the audio line out/earphone and line in/microphone connections, carrying monaural analogue audio, and a motor power relay control input line (as also used by hand-held microphones).  That one input (actually two lines) was the extent of the control interface, which not every home computer even employed; and the data were analogue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.ebayimg.com/images/g/L6IAAOSw~o5aZlJ1/s-l1600.jpg&quot; alt=&quot;A BBC Micro cassette lead&quot; /&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is simply no concept of daisy chaining or pass-through in such a system.  There &lt;em&gt;is no&lt;/em&gt; bus.  This is analogue home audio recording/playback.  The computer does not even get to command whether the player is playing or recording.  There is no concept of multiple peripherals addressable via commands from a controller of some kind.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Further reading&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Graham E. Kinns (1997).  &lt;a href=&quot;http://dragon32.info./info/pinouts.html#tape&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cassette recorder socket&lt;/a&gt;.  &lt;em&gt;Dragon Socket Pinouts&lt;/em&gt;. dragon32.info.&lt;/li&gt;&#xA;&lt;li&gt;Manuel Bilderbeek (2006).  &lt;a href=&quot;https://www.faq.msxnet.org./connector.html#cassette&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cassette connector&lt;/a&gt;. &lt;em&gt;The Ultimate MSX FAQ&lt;/em&gt;. msxnet.org&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1932" LastEditorUserId="1932" LastEditDate="2018-07-26T16:25:19.147" LastActivityDate="2018-07-26T16:25:19.147" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7104" PostTypeId="1" CreationDate="2018-07-26T12:29:43.503" Score="10" ViewCount="494" Body="&lt;p&gt;Microsoft GW-BASIC on IBM compatibles allowed flags to the &lt;code&gt;SAVE&lt;/code&gt; command, to indicate the manner in which a file should be written out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I recall, it allowed for no flag to write a standard tokenized format, &lt;code&gt;,A&lt;/code&gt; to write a plain-text ASCII BASIC listing, and &lt;code&gt;,P&lt;/code&gt; to write a &quot;protected&quot; file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Protected&quot; files looked like gibberish on disk even compared to the tokenized files, and the interpreter would at least refuse to &lt;code&gt;LIST&lt;/code&gt; the source code. As I recall the file size also wasn't the same. They did however run just fine when given to the interpreter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How were such &quot;protected&quot; files encoded?&lt;/strong&gt; What about them was different compared to an ordinary tokenized save (no flag)?&lt;/p&gt;&#xA;" OwnerUserId="357" LastActivityDate="2018-07-26T15:25:27.380" Title="How were Microsoft GW-BASIC &quot;protected&quot; files encoded?" Tags="&lt;microsoft-basic&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7105" PostTypeId="2" ParentId="7104" CreationDate="2018-07-26T12:37:41.917" Score="11" Body="&lt;p&gt;The files are encoded as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the first byte is 0xFE to indicate that it’s a protected tokenized file (0xFF for a regular tokenized file);&lt;/li&gt;&#xA;&lt;li&gt;the remainder of the file is encoded using exclusive-ors with two keys, embedded in the interpreter (or in the ROM, for BASICA).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The two keys are&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Key1    db    9Ah, 0F7h, 19h, 83h,  24h, 63h, 43h, 83h,  75h, 0CDh, 8Dh, 84h, 0A9h&#xA;Key2    db    7Ch,  88h, 59h, 74h, 0E0h, 97h, 26h, 77h, 0C4h,  1Dh, 1Eh&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When decoding, two counters are stored in &lt;code&gt;CH&lt;/code&gt; and &lt;code&gt;CL&lt;/code&gt;, starting respectively at 0x0D and 0x0B (the lengths of the keys); each stored byte is then replaced with (&lt;em&gt;encoded&lt;/em&gt; – &lt;code&gt;CL&lt;/code&gt;) ^ &lt;code&gt;Key1[CH – 1]&lt;/code&gt; ^ &lt;code&gt;Key2[CL – 1]&lt;/code&gt; + &lt;code&gt;CH&lt;/code&gt;, &lt;code&gt;CL&lt;/code&gt; and &lt;code&gt;CH&lt;/code&gt; decrementing every time a byte is processed until they hit 0 (after the calculation), when they are reset to their starting value (independently). Encoding is the opposite: with the same loop, each plain-text byte is replaced with (&lt;em&gt;decoded&lt;/em&gt; – &lt;code&gt;CH&lt;/code&gt;) ^ &lt;code&gt;Key1[CH – 1]&lt;/code&gt; ^ &lt;code&gt;Key2[CL – 1]&lt;/code&gt; + &lt;code&gt;CL&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the size of the files should be identical. The &lt;code&gt;LIST&lt;/code&gt; limitation is presumably implemented in the interpreter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://slions.net/threads/deciphering-gw-basic-basica-protected-programs.50/&quot; rel=&quot;noreferrer&quot;&gt;Deciphering GW-BASIC / BASICA protected programs&lt;/a&gt; for details.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-07-26T15:25:27.380" LastActivityDate="2018-07-26T15:25:27.380" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7106" PostTypeId="2" ParentId="7101" CreationDate="2018-07-26T12:49:05.587" Score="7" Body="&lt;h2&gt;TL;DR&lt;/h2&gt;&#xA;&lt;p&gt;Except for the high price area of HI-IL and HP-IB the answer is &lt;strong&gt;no&lt;/strong&gt;, as a single interface raises total system cost and is, especially for cassette drives, which need to be cheap, contraindicated.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The long read&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Early microcomputers sometimes supported several peripherals in a 'daisy chained' arrangement, i.e. instead of the computer having several ports, one per peripheral, it had a single port, which each peripheral would pass through to the next one.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;First of all daisy chained is only a special case for a bus system. The argument of having only one port (connector) also works for IEEE488.&lt;/p&gt;&#xA;&lt;p&gt;Second, it was not just early ones using such buses. Just take USB. One port and it replaced next to all others by now.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But the Vic-20 cassette drive was not daisy chained. It had a different, dedicated port.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As it got a different interface. The VIC20/C64 serial bus devices where connected using a serial interface, while the cassette drive did need a specific because of its audio nature.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Each added port had a nontrivial cost, not just in terms of manufacturing expense but development complexity, an extra thing that could go wrong, and increased difficulty of RF shielding.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. Separate ports simplified design a lot, as there was no need to have an integrated handling and an abstract protocol. This saved investment in hardware as an interface was directly controlled, well as in software due less complicated drivers.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I would expect ports to be added only when there was compelling reason.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Strictly cost and simplicity. A parallel or serial port, a mouse or joystickport is much cheaper if the main CPU drives these ports directly. Controlling them via a standardized, digital bus means the addition of this interface and a processors to each connected device.&lt;/p&gt;&#xA;&lt;p&gt;A built-in interface, only needs its controller integrated into the computer and a port connector. When doing the same via a bus like with the VIC-20, the interface-box requires in addition to the controller a local CPU  (plus RAM, ROM, etc., if not integrated) to drive the controller and another interface for host communication. This is true for any kind of device connected via the bus. No matter what device to be controlled. A serial or parallel interface  got the same cost burden than a serial, a video controller or a floppy drive.&lt;/p&gt;&#xA;&lt;p&gt;It becomes less of a 'bus tax' if the device does already need a local CPU, like for a printer, or a floppy (when it comes to slow computers). Still, an Apple Disk II had always a lower manufacturing cost (when including the controller) than a Commodore 1540 (*1). But that's a special case. In general, with such a peripheral bus total system cost is much increased.&lt;/p&gt;&#xA;&lt;p&gt;There are only three reasons why a designer would choose such a more expensive bus over separate interfaces:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Maximum flexibility with minimum configuration hassle - that's why HP introduced the HP-IB in the first place. Beside that their devices were high end priced anyway, it allowed flexible configuration of measurement and computing equipment.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Keeping the base unit price artificial low - which fits the VIC-20&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Create a lock in situation - similar here.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Today it has become different as adding a CPU to a peripheral is no big deal, and even the most primitive devices already got one.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was there a reason it was difficult to daisy chain a cassette drive?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It wasn't difficult, but costly. To make it work with a bus, the cassette drive would have need its own CPU and interface. This would have cranked the cost up to half way to a disk drive and way beyond 150 USD (early 80s). But to sell a cheap home computer (like the VIC) some cheap mass storage was esential to make it useful. So adding a separate connector and driving the cassette with as least additional hardware as possible was mandatory.&lt;/p&gt;&#xA;&lt;p&gt;Atari had the same issue as they (rightfully) believed that a computer cassette recorder may be priced higher than a similar audio device, but not 3-4 times as much. So the SIO connector is in fact a bastard of a dedicated cassette interface and a serial bus (*2). When operated as cassette port the serial lines are used different. Clock was not driven, but data-out carried a (square wave) audio signal when writing to cassette. For reading the recorder has a set of filters to directly convert the tones into a bitstream (*3) - which the CPU had to synchronize and decode. The whole operation was enabled by the MOTOR signal (*4). During cassette operation no SIO device could be operated interleaved (*5).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did any early microcomputer actually have a daisy chained cassette drive?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes - as usual depending on the value of early.&lt;/p&gt;&#xA;&lt;p&gt;The 1979 &lt;a href=&quot;https://en.wikipedia.org/wiki/HP-41C&quot; rel=&quot;noreferrer&quot;&gt;HP41C&lt;/a&gt; got in 1982 a &lt;a href=&quot;https://en.wikipedia.org/wiki/HP-IL&quot; rel=&quot;noreferrer&quot;&gt;HP-IL&lt;/a&gt; controler (&lt;a href=&quot;http://www.hpmuseum.net/display_item.php?hw=854&quot; rel=&quot;noreferrer&quot;&gt;82160A&lt;/a&gt;) enabling the use of a &lt;a href=&quot;http://hpmuseum.net/display_item.php?hw=264&quot; rel=&quot;noreferrer&quot;&gt;82161A&lt;/a&gt; Tape Drive. Likewise the HP150 (1983) and HP110 (1984) desktop computers featured default HP-IL enabling the use of the same tape deck.&lt;/p&gt;&#xA;&lt;p&gt;There where also (third party) cassette drives for IEEE 488 (HP-IB) - I remember one operating with a Commodore CBM (*6).&lt;/p&gt;&#xA;&lt;p&gt;Other than that I can't remember any.&lt;/p&gt;&#xA;&lt;p&gt;The Atari SIO did only support this in a mechanical sense as there could only be one cassette drive and that could only be operated alternating with SIO devices.&lt;/p&gt;&#xA;&lt;p&gt;Much like the cassette docking stations for Sharp's handheld computers. Here also a generic interface was fitted with some additional lines for cassette handling.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Now, when stretching this a bit, every computer bus can be used in daisy chain fashion. Just think of the TI99/4 (literally) wide extensions or Sinclair's rucksack devices.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - That Apple translated this advantage into an even higher profit is not a technical story.&lt;/p&gt;&#xA;&lt;p&gt;*2 - More correct so it started out as a cassette port that turned into a serial bus during development.&lt;/p&gt;&#xA;&lt;p&gt;*3 - The hardware frequency discriminator war also the reason why there where no &lt;em&gt;real&lt;/em&gt; fast speedtape formats for the Atari.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Well, not really, as regular SIO-Devices (non-cassette that is) did not monitor the motor line. To them nothing happened on the bus as there was no clock signal. While this should have been sufficient as locking, it could lead to a very strange problem with unfinished disk operations when starting a cassette read, resulting in locking up the disk drive until a reset is send out.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Yes, of course did clever programmers find a way to write low level routines to create some parallel operation, but that was confined to very special usecases.&lt;/p&gt;&#xA;&lt;p&gt;*6 - That setup was even more special, as it was used to control the nightly transmission of a radio station. The cassette decks (there where in the end several) weren't used for data storage as maybe intended, but to hold prerecorded shows/music and the Commodore did select which drive to operate at the right time. In the beginning it was only whole segments (a little less than 15 minutes each), later on the software got extended to select single songs of the repertoire (the collection of all cassettes in all drives) according to a classification system (they called it 'program colour') and shuffle them in random order while taking into account when a specific song has been played last time (avoiding twice the same within a few hours). But that's a separate story :))&lt;/p&gt;&#xA;&lt;p&gt;This might be fairly standard since some years, but in ~1981 it was revolutionary.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditorDisplayName="user39" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-02-09T19:06:21.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7107" PostTypeId="2" ParentId="7095" CreationDate="2018-07-26T16:12:54.377" Score="5" Body="&lt;p&gt;Not quite an answer but an observation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While ones' complement machines are now almost extinct, ones' complement computations are still here, and in large scales.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every IPv4 packet header has a checksum, that is calculated exactly as ones' complement sum of 16bit words of the header contents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same with TCP and (optionally) UDP packets, where the whole packet is checksummed in the same way.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-07-26T16:12:54.377" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7108" PostTypeId="2" ParentId="795" CreationDate="2018-07-26T22:31:52.787" Score="0" Body="&lt;p&gt;The way vector systems generally work is that the program positions the beam by loading the x and y locations and luminance into a quad 10 - 12 bit DAC.  A sample and hold circuit locks onto these and drives the beam via deflection amplifiers.  The line is then swept out using an analog integrator, which is essentially a type of operational amplifier which generates a linear voltage ramp until it reaches the stop point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information on these techniques read Jed Margolin's &quot;The Secret Life of Vector Generators&quot; here: &lt;a href=&quot;http://www.jmargolin.com/vgens/vgens.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.jmargolin.com/vgens/vgens.htm&lt;/a&gt;&#xA;(Jed was one of Atari's main engineers during the golden age of vector games (Asteroids, Tempest, Star Wars etc))&lt;/p&gt;&#xA;" OwnerUserId="10231" LastActivityDate="2018-07-26T22:31:52.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7109" PostTypeId="2" ParentId="795" CreationDate="2018-07-27T01:34:06.447" Score="11" Body="&lt;p&gt;The Vectrex' beam control is an odd beast.&lt;/p&gt;&#xA;&lt;h2&gt;It's all Relative&lt;/h2&gt;&#xA;&lt;p&gt;A vector to be processed is defined by four values, each of them 8 bit wide:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Brightness (0..+127) (*1)&lt;/li&gt;&#xA;&lt;li&gt;X direction  (twos' complement -128..+127)&lt;/li&gt;&#xA;&lt;li&gt;Y direction (twos' complement -128..+127)&lt;/li&gt;&#xA;&lt;li&gt;Scaling (0..255)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In first aproximation this looks like a resolution of 256 by 256 with a brightness of 128 levels. Right? Wrong! Sure, the brightness works that way, but everything else are not coordinates, but rather the directions and length or better 'speed' of a two dimensional vector (*2). The beam will travel for a certain time at the given 'speed'. The time (*3) is defined by the scaling factor. The traveled distance - and thus the reached location on the screen - is defined by the product of the vector components and the scaling.&lt;/p&gt;&#xA;&lt;p&gt;A vector of 5,10 with scaling 10 will have the same length and orientation as a vector of 50,100 with scaling 1. And three vectors of -127,-127 with the same scaling will end 381 'resolution units' toward the top and left of its origin.&lt;/p&gt;&#xA;&lt;p&gt;Thus the values of -128/+127 for X or Y are &lt;em&gt;not&lt;/em&gt; the edges of the screen. And there is also no direct relation between these numbers and how wide the screen is.&lt;/p&gt;&#xA;&lt;h2&gt;The Root of All Evil?&lt;/h2&gt;&#xA;&lt;p&gt;If everything is relative, then we need some root coordinate to start out. In case of the Vectrex this is defined as the center of the screen and can be reached by calling an EXEC (*4) function called ResetRef(erence). Having this, we could give this the absolute value of 0,0 and calculate from there. Right? Well, mostly, but only for a short time.&lt;/p&gt;&#xA;&lt;p&gt;All moves of the beam are 'added up' (integrated) into an analogue voltage, which acts as 'absolute' screen position/register. Except, it's not stable. The circuitry holding the added up value (basicly a capacitor) leaks and moves over time toward 0,0 again. And we're not talking long durations, it's already noticeable after a few miliseconds (*5). So no real absolute coordinates here.&lt;/p&gt;&#xA;&lt;p&gt;So if we stack two oposing vectors, like -50,-75 and 50,75, we will &lt;em&gt;not&lt;/em&gt; end up where we started, but a little bit moved toward the screen center (*6,7).&lt;/p&gt;&#xA;&lt;h2&gt;An Endless Universe?&lt;/h2&gt;&#xA;&lt;p&gt;This all means there is no 'hard' resolution. Leaving this aside, a  maximum archiveable positioning resolution is defined due the hardware and playing with some test programs will reveal that it can be said to be roughly 20,000 possible 'positions' with 'minimum' granuality (scaling 1).&lt;/p&gt;&#xA;&lt;h2&gt;Resolution != Resolution&lt;/h2&gt;&#xA;&lt;p&gt;Awesome, that's way beyond any modern super high dev screen, isn't it? Yes, it is. but at the same time it is only the resolution the beam can be positioned. The beam itself isn't a bodyless ghost - or at least infinit small, but has a considerable size. As the CRT is a regular TV one, it's safe to assume it's size at around 1/300th of the screen height (in case of the Vextrec the width) when at full brightness. A simple conclusion without any need to know the electronics.&lt;/p&gt;&#xA;&lt;p&gt;So the lower limit for resolution in non analogue terms would be &lt;strong&gt;at or above 300 by 400&lt;/strong&gt; (*8). Since the screen will not work at maximum brightness, a sensible minimum resolution for program design might be around &lt;strong&gt;480 by 640&lt;/strong&gt; (*9).&lt;/p&gt;&#xA;&lt;p&gt;I'd suggest that (or above) as guideline for your project.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;More Fun&lt;/h2&gt;&#xA;&lt;p&gt;Looking at these mechanics also tells us many details about Vextrex programing.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Most important, draw vectors always as fast as possible (lower scaling).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;But faster drawing also means a weaker image, so either we need to draw (visible) vectors multiple times (might look odd at least), or crank up brightness in relation.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Since brightness is also created via a the same DAC as position and stored in a similar capacitor circuit, it will also move toward zero (dark) over time. To get an equaly bright picture, brightness needs to be reloaded after a few vectors, even if it doesn't need to change - it already has!&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Technical it's also -128..+127, but negative values will not result in anything darker than off :))&lt;/p&gt;&#xA;&lt;p&gt;*2 - Make that 3D by adding brightness :)&lt;/p&gt;&#xA;&lt;p&gt;*3 - It's literally time, as the scaling value will be put into teh VIA's timer and counted down during drawing.&lt;/p&gt;&#xA;&lt;p&gt;*4 - EXEC is the what could be called the Vextrex' OS - or BIOS, whatever your taste is.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Thus the beam should be recalibrated more often - which in turn is not alway possible, as it again takes quite some time. If we want to maintain something like 50-60 Hz screen redraw (which is neccessary to maintain a picture, as the CRT is a standard TV one with a luminous layer designed for a similar timing) we only got about 30,000 CPU cycles per frame - ~30 or so clocks for recalibration (IIRC) is quite a lot. So graphics design on the Vextrex does also need to find a middle ground between exact drawing and timely display.&lt;/p&gt;&#xA;&lt;p&gt;*6 - The first lesson here is that closed shapes should be drawn with as lleast as possible strokes and as fast as possible.&lt;/p&gt;&#xA;&lt;p&gt;*7 - Second lesson is that the build in Asteroids clone is a great tool to forsee the future of the machine. Just look at a large asteroid drawn near the screen border - if its shape is not perfectly closed, heating up the soldering iron is in your future. Simply because the integrating capacitors are slowly going bad - and if these do, others might have aged as well.&lt;/p&gt;&#xA;&lt;p&gt;*8 - In TV terms that's 200 lines.&lt;/p&gt;&#xA;&lt;p&gt;*9 - Yes, we're always come down to the capabilities of TV :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-07-27T02:28:04.190" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7110" PostTypeId="2" ParentId="3090" CreationDate="2018-07-27T02:21:11.550" Score="5" Body="&lt;p&gt;You could buy such a system off the shelf in (late) 1980. You needed a large-ish S-100 machine like a &lt;a href=&quot;https://en.wikipedia.org/wiki/NorthStar_Horizon&quot; rel=&quot;nofollow noreferrer&quot;&gt;Horizon&lt;/a&gt;, and a couple of &lt;a href=&quot;https://en.wikipedia.org/wiki/MicroAngelo#Notes&quot; rel=&quot;nofollow noreferrer&quot;&gt;MicroAngelo cards&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each card held a single bitplane of 512 by 480. You could add more cards, one for each bitplane. The data was then read in parallel across the cards to make a multi-bit value, and then that color was displayed for that pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for your example you need a system with six cards to make 2^6 = 64 colors. The system could use any number of cards, from 1 to 8 cards, with a maximum of 256 colors. 64 was not a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These systems were widely used for making television graphics well into the mid/late-1980s.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-07-27T14:31:53.030" LastActivityDate="2018-07-27T14:31:53.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7111" PostTypeId="2" ParentId="7087" CreationDate="2018-07-27T09:06:28.750" Score="5" Body="&lt;p&gt;You could build your own relatively powerful video controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One option is to use dual port RAM to hold a bitmap display, and have a microcontroller on the video side that handles generating the actual video signal. It helps to clock the micro at some multiple of the video signal, or at least close to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can have the microcontroller produce the display by simply clocking words out of the RAM directly into a DAC or lookup table (EEP)ROM. The latter will give you a classic 8 bit fixed palette, the former could do 3:3:2 RGB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also have a command table in the dual port RAM that the microcontroller reads during the vertical blanking period, to allow for some graphics acceleration like line drawing and blitting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively you could use a Spectrum/C64 style set up where instead of bitmaps you use a combination of block attributes and bitmaps, again with the microcontroller. You have great flexibility to develop different modes with this system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to use something like an ARM or Propeller microcontroller with its own on-board RAM and some kind of interface with the Z80. A reasonably fast ARM with DMA for the display could connect directly to the Z80 bus, or you could use RS232 or similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, even a modern 8 bit microcontroller could connect to the Z80 bus with minimal hassle, when the clock speed is an order of magnitude higher than the Z80. A well crafted interrupt or DMA trigger could accept writes to the Z80 bus easily. Alternatively some PIC parts have a built in Z80/6800 compatible bus anyway.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-07-27T09:06:28.750" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7112" PostTypeId="1" AcceptedAnswerId="7113" CreationDate="2018-07-27T10:11:40.123" Score="29" ViewCount="5289" Body="&lt;p&gt;The BBC Micro used the extended variant of the classic 'computer in keyboard' design; like the Apple II, the case went back far enough that you were encouraged to put the monitor on top of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the electronics were in the back of the case underneath the monitor. There was a metal box around that part of the machine, but a plastic case around the metal. The BBC was noted for being very expandable, so there were a lot of chips in an expanded machine. The clock speed was double that of other 6502 computers. The power supply was inside the case, and early models used a linear power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was no cooling fan, no ventilation, and no easy way for heat to escape in any direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet the BBC Micro had a reputation for reliability, so failure from overheating cannot have been a common occurrence. Admittedly it was used on an island where the ambient temperature is usually quite low, but even so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given all of the above, how did it avoid overheating?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-23T15:29:48.310" Title="How did the BBC Micro stay cool?" Tags="&lt;hardware&gt;&lt;bbc-micro&gt;" AnswerCount="5" CommentCount="12" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7113" PostTypeId="2" ParentId="7112" CreationDate="2018-07-27T13:03:11.100" Score="32" Body="&lt;p&gt;First of all, though the vast majority of BBC Micros were supplied with a switch mode power supply, &lt;a href=&quot;https://martin-jones.com/2013/08/30/the-bbc-micro-linear-power-supply/&quot; rel=&quot;nofollow noreferrer&quot;&gt;anecdotal evidence suggests that the few that did have linear power supplies are actually more reliable&lt;/a&gt;. The surviving switch mode power supplies have almost universally required component replacements by now. But it seems at least some of the linear supplies are working without any replacement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The power supply is kept in a separate box inside the case. Its airflow is distinct from the main ventilation of the case, being ventilated by a series of slots on the rear of the case (as pointed out by Ross Ridge in comments below).  This means that most of the temperature produced doesn't influence the rest of the environment, which is somewhat better than many other micros. For example, the linear power supply of the Sinclair Spectrum 16K/48K was attached to a heat sink extending over a large proportion of the circuit board and caused various parts of the board to get quite warm in operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As well as the separated power supply, there's also quite a lot of space inside the BBC case. This can be seen from the second image on &lt;a href=&quot;http://blog.tynemouthsoftware.co.uk/2017/05/bbc-micro-repair.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt;. The case height is about 70 mm, meaning there's roughly 50 mm clearance above most components in there. And the main circuit board sits in the space behind the keyboard, not underneath it, which improves airflow substantially.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, it's worth noting that the 6502 runs quite cool. Even at 2 MHz, it only dissipates 450 mW. (Compare this with the Z80, which dissipates about 1W to reach comparable speeds.)  Outside of the PSU box, there probably isn't much that gets warm at all.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="5199" LastEditDate="2020-01-11T12:11:49.697" LastActivityDate="2020-01-11T12:11:49.697" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7114" PostTypeId="2" ParentId="7112" CreationDate="2018-07-27T13:08:59.050" Score="20" Body="&lt;p&gt;The chips on the motherboard were quite widely spaced.  This is still a design consideration when making boards more heat tolerant.  Also, the chips didn't generate the sort of heat that more modern, faster processors do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Air did circulate through the BBC case.  Entering through the ports on the underside and leaving via cooling slots at the back.  There was no need for forced cooling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, it was common to add a heat sink if you had updated your BBC.  Either by putting in a 65C02 CPU or additional sideways ROM / RAM - or both.  Other tricks were to put spacers at the back of the case to enlarge the cooling vents there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, as I said at the beginning, such tricks simply weren't needed in the standard configuration.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2018-07-27T13:08:59.050" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7115" PostTypeId="2" ParentId="7112" CreationDate="2018-07-27T16:19:29.027" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Given all of the above [now below], how did it avoid overheating?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Short answer: &lt;strong&gt;Not enough heat produced in the first place.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Long  read: (as usual only basic physics needed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Standard Disclaimer: I hope I did remember all the formulas right, didn't add (many) calculation errors and most important picked the right English words.)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heat in a device only builds up to a point where the energy put in (*1) put into than the device can is in equilibrium to the temperature needed to transfer exactly this amount of energy to the outside. It does not matter what kind of transport mechanism is used. Avection, convection, conduction or radiation, active or passive cooling is all the same and differ only by the resistance they provide - or not as we want to get it out without heating up much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's all about energy, and energy is counted in joule. Energy is power over time. Since it's sufficient to look at the BBC as static system (energy fluctuations are rather minor and equaled out over time), we can look at a fixed time interval and cancel out all time dependent calculation. Since one joule is one watt over one second, using one second is a good idea (*3), which now allows us to base further examination on power measured in watt (and equal watt with joule in all calculations). And number of watt is a value given to us by the manufacturer. Convenient, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC master's power supply was rated at (just) 35 watt (*4). This is what the PS was is supposed to deliver to the computer, its output. A PS is converting, and any conversion in this universe got losses. In case of a linear PS it's usually somewhere between 40 and 60%, while a switched delivers 80+%.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming 50% efficiency (for the linear), we get about &lt;strong&gt;70 watt&lt;/strong&gt; to be dissipated as a first number. But let's get that number up to &lt;strong&gt;100 watt&lt;/strong&gt;. That not only simplifies calculations, but it also takes into account the many modified and all pimped up units.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The task is now to get rid of 100 watt of power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heat transfer is based like any transfer on a flow, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rate_of_heat_flow&quot; rel=&quot;nofollow noreferrer&quot;&gt;heat flow Q&lt;/a&gt; (*2) again measured in watt. So we just let 100 watt flow out, right, and temperature inside will stay the same as outside? Nope. Any flow needs a difference in height (or pressure) for water and in temperature difference here. Further this difference defines how much energy can be transferred through a given barrier within a specific area. In theory this allows to transfer any amount we need. Except, to keep our BBC working we can define a maximum temperature we do not want to exceed. Above ~150&amp;nbsp;°C solder joints may start to fail. Even more chips are usually only specified to work up to 70-85&amp;nbsp;°C. Assuming that the operating environment is usually below 35&amp;nbsp;°C we get a &lt;strong&gt;maximum usable difference of 40&amp;nbsp;°C&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other important value is the surface the energy needs to pass. A BBC Master is roughly 40x35x6 cm^3 For the sake of simplicity we just use the top surface size, 40x35 or &lt;strong&gt;0.14 m^2&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Bottom line, we want to get 100 watt through a surface of 1/7th of a square meter with not more than 40 degree temperature difference. Right?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The underlaying formula here is Q = A times delta-T times k. With A as size in square meter, T in Celsius and k as a material specific value. Flipping the formula toward k gives k = Q / (A x dT) with or 100 / (0,14 * 40) which equals ~18. Thus the material(s) used should have a thermal resistance of 18 watt per square meter per Kelvin or less. For real material this is described by a material specific constant called lambda and defined as W/m*°C. By dividing that constant by our value we will get therefore the maximum thickness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So let's have a look at some materials and how thick a case made out of this can be to keep within the borders set above:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Material / lambda / thickness in cm&#xA;&#xA;Silver   / 429    / ~24,000&#xA;Steel    /  80    / ~ 5,500&#xA;Concrete /   2.1  / ~    12&#xA;Glass    /   0.75 / ~     4&#xA;ABS(*)   /   0.18 / ~     1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(*) Using ABS not only as middle of the road plastic, but also as it's one of the less thermal conductive ones (which makes it great to be used in 3D printers;). most others are better conductor - like PET with 0.24.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;With this number our case may have steel walls of like 55 meter, 12 cm concrete or 1&amp;nbsp;cm of ABS.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There was a metal box around that part of the machine, but a plastic case around the metal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The relation above already shows that the steel cover can be (almost) ignored as its conductivity is about 400 times higher than plastic. And unless the plastic is thicker than 1 cm it's all is good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC's case is less than 3&amp;nbsp;mm of plastic which again can be easy turned into the temperature difference due to its proportional nature. With 40 degree temperature difference (to transfer 100&amp;nbsp;W) through 10&amp;nbsp;mm (1&amp;nbsp;cm) plastic, using only 3&amp;nbsp;mm thereof will result in about 12 degree temperature difference (40/10*3)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or the other way around, with that 3&amp;nbsp;mm cover even a power consumption of 333&amp;nbsp;watt (100*10/3) would not damage the machine ... only typing might become a hot experience :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Result: &lt;strong&gt;Not enough heat produced to drive the internal temperature anywhere critical&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I love physics (and SI units).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, with using exact measurements and so on we will come to a difference of way less than 10 degree Celsius between machine and environment, making the BBC good for environmental temperatures of 60-70 degree. Keep in mind all calculations used where always rounded toward the 'bad' side using a rather large margin. Also, only conductivity between fluids (air) and a solid material was used. No special cases like radiation and so on.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Admittedly it was used on an island where the ambient temperature is usually quite low&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now considering the last few weeks I say living on an island might not make much difference - and more serious, while the BBC was a big player in the UK, it sold as well ok-ish in France and Germany - despite the almost non-existent support.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Energy put into a computer, gets almost completely turned into heat as other forms like EM radiation/light are quite low, and no mechanical output produced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Usually it's noted as uppercase Phi or Q with a dot above - here Q will do it. Similar for all other symbols.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - A second is always handy when calculating in SI units as being one of the fundamental units in &lt;a href=&quot;https://en.wikipedia.org/wiki/MKS_system_of_units&quot; rel=&quot;nofollow noreferrer&quot;&gt;MKSA&lt;/a&gt; :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Here is, BTW, &lt;a href=&quot;https://www.waitingforfriday.com/?p=794&quot; rel=&quot;nofollow noreferrer&quot;&gt;a real nice writeup&lt;/a&gt; about how to give more power to a fully loaded system - and stay within the original thermal specs as 60&amp;nbsp;W with 80% efficiency is about the same as 35&amp;nbsp;W with 50%. Nice, isn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-10T18:13:46.017" LastActivityDate="2020-01-10T18:13:46.017" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7116" PostTypeId="2" ParentId="3090" CreationDate="2018-07-28T03:46:14.910" Score="1" Body="&lt;p&gt;I had friends who worked with a system &lt;em&gt;kind of&lt;/em&gt; like that in a computer science lab sometime in the early '80s. I don't remember many details other than that the thing had 16 bits per pixel (5 red, 5 green, 5 blue, and 1 alpha), and it was interlaced. The alpha was because it had a video input, and it was capable of syncing with, and adding graphic overlays to a live video signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since it basically was professional video equipment, they used a professional video monitor made by Sony corp to display the output.&lt;/p&gt;&#xA;" OwnerUserId="588" LastEditorUserId="588" LastEditDate="2018-07-28T03:57:04.747" LastActivityDate="2018-07-28T03:57:04.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7117" PostTypeId="1" AcceptedAnswerId="7118" CreationDate="2018-07-28T11:36:43.467" Score="12" ViewCount="797" Body="&lt;p&gt;Some variants of the Commodore PET (e.g. the 8000 and 9000 series, as well as some other versions with an aftermarket add-on) produce an 80x25 character display.  Their character set is fixed in ROM using an 8 pixel by 8 pixel cell size.  At 60Hz, and with typical CRT timings, this means each scan line lasted about 40 microseconds, so the hardware needed to output a total of 2 characters per microsecond.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PET uses the 6545 CRT Controller chip, a MOS Technologies clone of the Motorola MC6845.  Like the 6845 it has a maximum clock speed of 1MHz (and the PET also runs its CPU at 1MHz, so presumably ties the 6545 to the same clock).  The CRT Controller addresses one character per cycle, which suggests that the maximum display width the PET should be able to produce is 40 characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did 80 character PETs work?  Did they overclock the 6545?  Or was there some trick to producing two characters of output in a single cycle of the CRTC?&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-07-28T17:46:07.250" Title="How did the Commodore PET 80 column display work?" Tags="&lt;hardware&gt;&lt;commodore-pet&gt;&lt;6845&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7118" PostTypeId="2" ParentId="7117" CreationDate="2018-07-28T12:55:28.710" Score="14" Body="&lt;p&gt;As Tommy wrote in the comment: There are two different RAM chips, one for even columns and one for odd columns. Both are read and latched in one cycle (&lt;code&gt;ESD&lt;/code&gt; and &lt;code&gt;OSD&lt;/code&gt; bus), and the latched output of each is then used in turn to drive the character ROM (&lt;code&gt;LSD&lt;/code&gt; bus).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see it in the schematics for the CMB 8032 &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/pet/8032/8032029-08.gif&quot; rel=&quot;noreferrer&quot;&gt;here (even)&lt;/a&gt; and &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/pet/8032/8032029-09.gif&quot; rel=&quot;noreferrer&quot;&gt;here (odd)&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple //e used the same scheme, with one video bank in main memory and one video bank in aux memory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there were simplifcations, like in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Videx&quot; rel=&quot;noreferrer&quot;&gt;Videx Videoterm&lt;/a&gt; 80 column card for the Apple II (&lt;a href=&quot;ftp://ftp.apple.asimov.net/pub/apple_II/documentation/hardware/video/Videx%20Videoterm%20Installation%20&amp;amp;%20Operation%20Manual_alt.pdf&quot; rel=&quot;noreferrer&quot;&gt;manual with schematics&lt;/a&gt;), which had its own RAM on the card. This avoids the latches and just puts the RAM outputs in parallel, so apparently the RAM could be enabled quickly enough to make this work.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2018-07-28T17:46:07.250" LastActivityDate="2018-07-28T17:46:07.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7119" PostTypeId="2" ParentId="7112" CreationDate="2018-07-28T13:23:00.610" Score="3" Body="&lt;p&gt;In general, computers of the day, even into the Pentium era (mid 1990s) and beyond, did not produce enough heat for it to be an issue - as long as the chips had basic ventilation. Simply the power draw was not enough. Even the first, second and third generation Pentium processors often did not need a cooling fan and instead relied on passive cooling via a heatsink. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally remember being astonished that we needed to put a cooling fan on our 486DX 33&amp;nbsp;MHz processor when we overclocked it from 33 to 100&amp;nbsp;MHz (try getting a stable 3x overclock with air-cooling today!). Similarly, I remember having a Pentium 3 450&amp;nbsp;MHz processor (released in 1999) with only passive cooling, although it did have a somewhat sizeable heatsink. It was only really (in my recollection, for home computers) from around 2000 onwards when Intel chips started to need a heatsink and fan as a standard thing. Commercial computers (servers etc.) would have had forced cooling significantly before this, though.&lt;/p&gt;&#xA;" OwnerUserId="10240" LastEditorUserId="535" LastEditDate="2018-07-29T17:20:36.193" LastActivityDate="2018-07-29T17:20:36.193" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7120" PostTypeId="5" CreationDate="2018-07-28T13:47:23.327" Score="0" Body="&lt;p&gt;The MC6845 was a timing and memory address generation controller chip for producing CRT displays, intended originally for text mode displays, but also used in various machines for producing graphical raster displays also.  There were clones produced by several manufacturers including MOS Technlogies and Rockwell (referred to as 6545 in this case). It was used in many computers, including the Commodore PET, BBC Micro, Amstrad CPC464, and in the MDA, CGA and EGA video cards for the IBM PC.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-07-28T13:47:23.327" LastActivityDate="2018-07-28T13:47:23.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7121" PostTypeId="4" CreationDate="2018-07-28T13:47:23.327" Score="0" Body="Questions about the Motorola MC6845 CRT Controller chip, or clones of it (e.g. MOS 6545)." OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-07-28T13:47:23.327" LastActivityDate="2018-07-28T13:47:23.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7122" PostTypeId="2" ParentId="953" CreationDate="2018-07-28T23:53:41.147" Score="2" Body="&lt;p&gt;OS-9, which NitrOS-9 is based on, could be either pre-emptive or not. If not, context switches could occur when the currently running process did a system call. To be pre-emptive, there has to be a source of periodic interrupts and a module, clock, with an interface that lets the OS use said source.&lt;/p&gt;&#xA;" OwnerUserId="10246" LastActivityDate="2018-07-28T23:53:41.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7123" PostTypeId="2" ParentId="188" CreationDate="2018-07-29T00:12:29.960" Score="3" Body="&lt;p&gt;To make sure you have a chip that will handle the needed clock rate, look for the letter between the 3 or 8 and the 0. A 68A09E or 63A09E can run at up to 1 MHz. A 68B09E or 63B09E can run at up to 2 MHz. There are 63C09Es that can run at up to 3 MHz.&lt;/p&gt;&#xA;" OwnerUserId="10246" LastActivityDate="2018-07-29T00:12:29.960" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7124" PostTypeId="1" AcceptedAnswerId="16755" CreationDate="2018-07-29T02:23:38.280" Score="8" ViewCount="740" Body="&lt;p&gt;How big was the original CP/M version of WordStar? As in, the size of the program itself? Presumably it was in the low tens of kilobytes (I don't think it's possible to cram a practical word processor into less than 10K) but I'm interested in an actual figure.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-02T13:31:57.687" Title="How big was WordStar 1.0?" Tags="&lt;cp-m&gt;&lt;wordstar&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7125" PostTypeId="2" ParentId="7124" CreationDate="2018-07-29T02:54:03.967" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How big was the original CP/M version of WordStar?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The oldest copy of WordStar (or Wordmaster) I could find is 1.01 (but with a date of 1980) sizing&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;30,080 bytes for WS&#xA;20,992 bytes for WSMSGS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Which both seem rather high, as Wordmaster, before being renamed to WordStar, did fit into mere 10 KiB. One of the core features of WordStar was its organization as overlays, thus the used memory might be lower.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I don't think it's possible to cram a practical word processor into less than 10k&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That might quite depend on your value for 'practical'. I can quite well think of a full screen word processor that can be cramped in way less than 10 KiB. As said, Wordmaster is just 10 KiB. And DR's TEX (where Wordmaster is somewhat based on) only uses 8 KiB.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;It's worth to keep in mind that even professional machines at the time (pre 1980) often only hat 16 KiB of RAM - full 64 KiB was rather rare. So size was even more a goal.&lt;/p&gt;&#xA;&lt;p&gt;Ofc RAM could be saved by making machine specific version using existing ROM routines (CP/M didn't really offer much here) - even more so by using a Program ROM. Examples may be:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Word Processor Pac, an 8k ROM for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Exidy_Sorcerer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Exidy Sorcerer&lt;/a&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7124/how-big-was-wordstar-1-0/7125?noredirect=1#comment56769_7125&quot;&gt;(*)&lt;/a&gt;, a custom version of &lt;a href=&quot;https://www.old-computers.com/museum/description/soft_spellbinder.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spellbinder&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Wordwise, an 8k EPROM for the BBC Micro &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7124/how-big-was-wordstar-1-0/7125?noredirect=1#comment19764_7125&quot;&gt;(*)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Texor, an 8k Module (&lt;a href=&quot;http://www.mpm-kc85.de/html/m012_texor.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;M012&lt;/a&gt;) for the &lt;a href=&quot;https://en.wikipedia.org/wiki/KC_85&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotron KC-85 series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;History repeated (somewhat) with home computers and their small memory. A great example might be &lt;a href=&quot;https://en.wikipedia.org/wiki/SpeedScript&quot; rel=&quot;nofollow noreferrer&quot;&gt;SpeedScript&lt;/a&gt; for C64 and VC-20. While needing an 8 KiB RAM expansion on the VIC (VIC-1110), the program itself was only about 5 KiB, leaving &lt;a href=&quot;https://www.c64-wiki.com/wiki/SpeedScript#Document_Editing&quot; rel=&quot;nofollow noreferrer&quot;&gt;3 KiB for text&lt;/a&gt; (The other 5 KiB were needed vor variables, screen and text buffer).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-02T13:31:57.687" LastActivityDate="2020-11-02T13:31:57.687" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7126" PostTypeId="1" AcceptedAnswerId="7127" CreationDate="2018-07-29T04:55:30.800" Score="8" ViewCount="888" Body="&lt;p&gt;It seems early on IBM, MS, and DOS clones established a standard of holding the F1 key down during boot to access the BIOS setup. Yes there were a few much less common combinations that used the DEL (perhaps the del key is the most common now) or CTRL+ALT+ESC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Who established the early F1 desktop BIOS key and why did laptops start using an entirely different key&lt;/em&gt;&lt;/strong&gt; - usually the F2 key? Who set the laptop standard for the BIOS key? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;If there is interesting history that lead to the F1 or F2 key it would be of interest too.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastActivityDate="2019-03-21T08:06:29.247" Title="Who established the original F1 desktop BIOS key and why did laptops use a different key?" Tags="&lt;history&gt;&lt;keyboards&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7127" PostTypeId="2" ParentId="7126" CreationDate="2018-07-29T13:36:33.473" Score="15" Body="&lt;h2&gt;Quick Answer:&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Who established the early F1 desktop BIOS key and why did laptops start using an entirely different key - usually the F2 key? Who set the laptop standard for the BIOS key?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;F2 came first, before any use of F1, as F1 was reserved for error recovery. And it was IBM that introduced F2 in the first place. F1 was later on chosen by IBM to simplify handling as both (error as well) ultimately did lead toward BIOS configuration. Except, at that point many compatible manufacturers had already chosen to follow IBM's original decision with F2.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Yes there were a few much less common combinations that used the DEL (perhaps the del key is the most common now) or CTRL+ALT+ESC.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This might again depend on your personal exposure to certain brands and computers, as the early majority was using multi key combinations, which soon changed to DEL. F1/F2 are rather confined to brand machines.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;History&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If there is interesting history that lead to the F1 or F2 key it would be of interest too.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here you go:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of, there is no standard, at least none set by IBM, as their way to access BIOS setup was thru a separate setup disk. It was when BIOS manufacturers enhanced their BIOS to include setup, each picked whatever they liked. And more important, each board manufacturer/system builder could/did modify this according to their ideas. When buying a BIOS customizing the setup key (and others) is one of the first options that where offered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Originally  the PC's setup was done via DIP-switches. When the AT introduced a battery backed up CMOS RAM, setup became a software, supplied by IBM on a floppy named &lt;em&gt;''Diagnostics for the IBM Personal Computer AT'&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Phoenix, who presented the very first clean room BIOS in 1985 (*1), offered the first AT compatible BIOS in 1985, still with a similar disk. Soon the BCU (BIOS Configuration Utility) got integrated into the BIOS ROMs. The first keystroke used to reach setup during POST (Power On Self Test) was CTRL-ALT-S. The key combination was chosen to minimize conflict with other utilities, and configurable by the licensee (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Award followed with CTRL-ALT-ESC and AMI later on with DEL. Which then got taken over by most manufacturers as AMI was quite successful with board manufacturers not at least due a low price. Phoenix got their main market with brand systems, likewise Award (*3)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When IBM introduced the PS/2 systems they finally also included setup into their BIOS (*4). Here F1 was still meant for error recovery if some part of the BIOS couldn't act as configured. That included not only the infamous &quot;Press F1 to continue&quot; on a non existent Keyboard but every error during POST (*5).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With build-in setup, most errors resulted in a switch to setup, effectively F1 and F2 went at some point into the setup screen, which let IBM join them for simplified handling (and manuals) - right when many compatible manufacturers have switched from DEL (or whatever) for F2. So in the end even IBM/Lenovo had to go for F2 again - isn't it ironic?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Common uses are/have been:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Yes, I have a quite torn up sheet with all the variation I encountered over the years. Written in pencil and touched many many times, so it's quite hard to read in some places:) *6)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;F1&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BIOS default:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Older AMI&lt;/li&gt;&#xA;&lt;li&gt;MR.BIOS&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Older Acer&lt;/li&gt;&#xA;&lt;li&gt;Some Dell&lt;/li&gt;&#xA;&lt;li&gt;IBM/Lenovo&lt;/li&gt;&#xA;&lt;li&gt;Older Toshiba&lt;/li&gt;&#xA;&lt;li&gt;Packard Bell&lt;/li&gt;&#xA;&lt;li&gt;(older) Gateway&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Fn-F1&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some Dell Laptop&lt;/li&gt;&#xA;&lt;li&gt;Lenovo Laptops&lt;/li&gt;&#xA;&lt;li&gt;Some HP&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;F2&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mainboards:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Intel mainboards&lt;/li&gt;&#xA;&lt;li&gt;Asrock mainboards&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;BIOS default:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Older AMI&lt;/li&gt;&#xA;&lt;li&gt;Inside BIOS&lt;/li&gt;&#xA;&lt;li&gt;DTK BIOS&lt;/li&gt;&#xA;&lt;li&gt;ALR PCI-BIOS (80486)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Many Asus brand computers&lt;/li&gt;&#xA;&lt;li&gt;Acer&lt;/li&gt;&#xA;&lt;li&gt;Fujitsu&lt;/li&gt;&#xA;&lt;li&gt;SIEMENS&lt;/li&gt;&#xA;&lt;li&gt;Most Dell&lt;/li&gt;&#xA;&lt;li&gt;Some HP&lt;/li&gt;&#xA;&lt;li&gt;IBM&lt;/li&gt;&#xA;&lt;li&gt;Lenovo&lt;/li&gt;&#xA;&lt;li&gt;Sony&lt;/li&gt;&#xA;&lt;li&gt;Sharp&lt;/li&gt;&#xA;&lt;li&gt;Samsung&lt;/li&gt;&#xA;&lt;li&gt;Most Toshiba&lt;/li&gt;&#xA;&lt;li&gt;NEC&lt;/li&gt;&#xA;&lt;li&gt;Gateway&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;F3&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some Dell&lt;/li&gt;&#xA;&lt;li&gt;Sony&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;CTRL+ALT+F3&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Lenovo (pre-IBM)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;F9&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Asus&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;F10&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Compaq&lt;/li&gt;&#xA;&lt;li&gt;Some ASUS&lt;/li&gt;&#xA;&lt;li&gt;Standard on most HP&lt;/li&gt;&#xA;&lt;li&gt;Samsung&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;CTRL-ALT-F11&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IBM Thinkpad - press when in DOS (!!!)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;F12&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some Dell&lt;/li&gt;&#xA;&lt;li&gt;Toshiba Equium series (joint with boot menu)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;CTRL-ALT-S&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BIOS default:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Early Phoenix&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;DEL&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mainboards:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ASUS mainboards&lt;/li&gt;&#xA;&lt;li&gt;ASUS brand laptops&lt;/li&gt;&#xA;&lt;li&gt;BFG mainboards&lt;/li&gt;&#xA;&lt;li&gt;Biostar mainboards&lt;/li&gt;&#xA;&lt;li&gt;Foxcon mainboards&lt;/li&gt;&#xA;&lt;li&gt;Gigabyte mainboards&lt;/li&gt;&#xA;&lt;li&gt;MSI mainboards&lt;/li&gt;&#xA;&lt;li&gt;EVGA mainboards&lt;/li&gt;&#xA;&lt;li&gt;ABit mainboards&lt;/li&gt;&#xA;&lt;li&gt;Shuttle mainboards/barebones &lt;/li&gt;&#xA;&lt;li&gt;Soyo mainboards&lt;/li&gt;&#xA;&lt;li&gt;Super Micro mainboards/serverboards&lt;/li&gt;&#xA;&lt;li&gt;Tyan mainboards&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;BIOS default:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;AMI&lt;/li&gt;&#xA;&lt;li&gt;Award&lt;/li&gt;&#xA;&lt;li&gt;Phoenix&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Packard Bell&lt;/li&gt;&#xA;&lt;li&gt;Acer&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;CTRL-ALT-SHIFT-DEL&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;(can't read anymore)&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;INS&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some ASUS&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;CTRL-ALT-INS&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BIOS default:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some Phoenix&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Lenovo&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;TAB&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;(Can't read)&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;ESC&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Many early Toshiba&lt;/li&gt;&#xA;&lt;li&gt;Many HP&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Fn-ESC&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some Dell Laptop&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;CTRL-ALT-ESC&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Older ASUS&lt;/li&gt;&#xA;&lt;li&gt;Older Acer&lt;/li&gt;&#xA;&lt;li&gt;Shuttle barebones&lt;/li&gt;&#xA;&lt;li&gt;BIOS default:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Early Award&lt;/li&gt;&#xA;&lt;li&gt;Some Phoenix&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;CTRL-SHIFT-ESC&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Tandon PC&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;CTRL-ALT-ENTER&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some old Dell&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Special Keys&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sony VAIO&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Assist&lt;/strong&gt; press when powered off&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Microsoft Surface&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Volume-Up&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Volume-Down&lt;/strong&gt; &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Lenovo/IBM&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;NOVO&lt;/strong&gt; button&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ThinkVantage&lt;/strong&gt; button (Thinkpad)&lt;/li&gt;&#xA;&lt;li&gt;or &lt;strong&gt;IBM Access&lt;/strong&gt; button (Pre Lenovo Thinkpad)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As shown, many manufacturers/brands changed their setting between machines or over time. Often when buying boards from a different supplier, or incorporating a new BIOS. HP is eventually the greatest example, using almost every key, including F1, F2, F3, F6, F10, F11, F12 and ESC over the years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the general pictures shows well that basic BIOS and thus bare boards are usually delivered with DEL for activation, while most system builders change it for F2 when integrating their logos and driver modifications.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In addition:&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;F10&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Start with default BIOS on ACER&lt;/li&gt;&#xA;&lt;li&gt;Network boot on many other&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;F11&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Boot menu on Sony and Intel&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Well, the usage of other keys and the function they access might fill a book on it's own.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, Compaq's BIOS was before and also clean room, but it was not only a PC one, but also not available to other PC manufacturers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Licensing fee for Phoenix BIOS was a whopping 290,000 USD. This not only included configuration support to adapt it to specific hardware, but also an insurance against being sued by IBM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Phoenix later on acquired Award - after buying some other manufacturers - so by now Phoenix and Award is about the same, and both based on a a third implementation :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Which in fact was written by Phoenix for IBM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Who remembers all the beep-codes anyway?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - What's also hard to read is the often displayed &lt;em&gt;&quot;Press &amp;lt;whatsoever&amp;gt; for Setup&quot;&lt;/em&gt; Surely there is a short display interval is adapted to the fast reading skill of today's nerds. Older ones like me will have to guess. But there's a secret trick for all of age: pressing SPACE during POST often stops the screen when all checks and setup is done, right before booting so even slow readers get a chance.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-03-21T08:06:29.247" LastActivityDate="2019-03-21T08:06:29.247" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7128" PostTypeId="1" AcceptedAnswerId="7131" CreationDate="2018-07-30T07:22:14.430" Score="11" ViewCount="4607" Body="&lt;p&gt;The VIC-II in the C64 outputs 320x200 pixels inside the borders. What is the full visible resolution including the borders? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify, I am interested in the full screen size in units of normal pixels, i.e. my question has nothing to do with whether you could possibly change just a single pixel in the border area.&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2019-02-09T20:13:40.897" Title="Visible resolution of C64 video output, including borders" Tags="&lt;commodore-64&gt;&lt;video&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7129" PostTypeId="5" CreationDate="2018-07-30T07:23:49.487" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2018-07-30T07:23:49.487" LastActivityDate="2018-07-30T07:23:49.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7130" PostTypeId="4" CreationDate="2018-07-30T07:23:49.487" Score="0" Body="Questons about the MOS 6581/8580 SID (Sound Interface Device) chip, used e.g. in the Commodore C64 home computer" OwnerUserId="115" LastEditorUserId="115" LastEditDate="2018-07-30T07:58:23.440" LastActivityDate="2018-07-30T07:58:23.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7131" PostTypeId="2" ParentId="7128" CreationDate="2018-07-30T07:54:30.720" Score="21" Body="&lt;p&gt;It's unclear what you mean by &quot;visible&quot;, since that's a feature of your monitor, not of the computer. That's because there's a fairly huge area which is not intended to be displayed, but could be. That's called the overscan area, and since that varies widely from TV to TV, that's why the home computers all had this border.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the Commodore 64 has 63 to 65 machine cycles per scanline, depending on if it's PAL or NTSC; each of those cycles is 8 hires pixels or 4 lores pixels. 40 of those cycles are the 320 pixels inside the borders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So 63 cycles would be 504 pixels, and 65 cycles would be 520 pixels. That's not quite the full story though, because the analog raster beam needs time to return to the left-hand side of the screen. That time is usually called HBLANK and takes around 101 pixels. So &lt;strong&gt;the total horizontal &quot;resolution&quot; is 403 pixels&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the vertical resolution, something similar goes on. You've got 200 scanlines inside the border, as you noted. There's 312 scanlines from VSYNC to VSYNC, but some of that is spent in VBLANK, which is the time it takes for the analog beam to reach the top of the screen. VBLANK seems to be around 30 scanlines, so that &lt;strong&gt;the total vertical &quot;resolution&quot; is 284 pixels&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These numbers were mostly taken from &lt;a href=&quot;https://dustlayer.com/vic-ii/2013/4/25/vic-ii-for-beginners-beyond-the-screen-rasters-cycle&quot; rel=&quot;noreferrer&quot;&gt;this web-page&lt;/a&gt; which is specific to a PAL C64. For NTSC and others, the details are going to vary of course.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-07-30T20:09:43.203" LastActivityDate="2018-07-30T20:09:43.203" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7132" PostTypeId="2" ParentId="7128" CreationDate="2018-07-30T10:13:48.833" Score="10" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The VIC-II in the C64 outputs 320x200 pixels inside the borders. What is the full visible resolution including the borders?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are no pixel outside the pixelated area. The border just fills the lines. And whats visible is - like always, defined by the adjustment of the monitor/TV. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To clarify, I am interested in the full screen size in units of normal pixels, i.e. my question has nothing to do with whether you could possibly change just a single pixel in the border area.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I believe your question is based on the idea to exactly reproduce a C64 output on a digital screen. Just TV never was digital, and even less an exact thing. There are no pixels and no pixel units. TV is defined by timing and assumption. And based around the fact that not two receivers will show the same portion of a transited picture. Therefore does every TV signal carry an &lt;a href=&quot;https://en.wikipedia.org/wiki/Overscan&quot; rel=&quot;nofollow noreferrer&quot;&gt;overscan area&lt;/a&gt;. That's a the part of the picture that might be shown but doesn't have to be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole thing starts with CRTs not being rectangular in the first place and includes many other effect that will make less than transmitted visible. Each show/movie is produced in a way that there is no relevant content in the direct border area - horizontal or vertical. For example the guideline for 'action safe' is that the action should happen at least 5% from each side. At the same time, 'title safe' is set at 10%. So no title, text element or logo should cover an area less than 5% away from the sides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And even in the age of digital TV this is relevant, as console manufacturers also set standards in that region for their products: Nothing game relevant (like controls) within 5-10% of the sides. That's why there's often a rather thick border around gauges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a C64 (and effectively any other machine), a useful (pixelated) picture is produced within the line timing of a TV. Some keep the area outside of this at black shoulder level, others allow it to be filled with a single colour - sometimes even on a line by line base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Analog_television#Structure_of_a_video_signal&quot; rel=&quot;nofollow noreferrer&quot;&gt;whole TV line&lt;/a&gt; is defined (NTSC, PAL in braces) as 63,6(64) µs. Thereof 10.9 (12) µs are used for synchronisation purpose and 52,7 (52) µs are for a potential visible signal. How much of that is really visible depends on the individual TV set (*1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ofc, one could now argue that of that by subtracting the time for the 320 pixels displayed we get the overscan area and by dividing this again by pixeltiming we get some pixel number. That gets tricky, so lets try:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A NTSC C64 runs at 1.022727 MHz, with 8 Pixels displayed per clock cycle. That's 0.122 µs per pixel. Thus a 52.7 µs line content (*2) does equal &lt;strong&gt;431.18 pixel&lt;/strong&gt; length.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For PAL the numbers are 0.98524 MHz and 0,127 µs per pixel, resulting in &lt;strong&gt;415,38 pixel&lt;/strong&gt; times.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So one &lt;em&gt;could&lt;/em&gt; state that the maximum C64 line is made of 431 (415) pixels, thus the border would be 431-320=111 pixel (415-320=95).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just, that it doesn't tell how much of these 'pixeltimes' are visible or not. On monitors (and dedicated TV) users usually blew up the picture until the corners of the square (useful) picture reached the round ones of the screen, we get a maximum sized useful picture. Easy to see when comparing different pictures of C64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vertical is less complicated, as lines are already a quantized resource. The content carrying portion of the first field (and homecomputers usually just produce first fields) ranges from line 20 (24) to 262 (310) resulting in &lt;strong&gt;242 (284) displayable lines&lt;/strong&gt;, thus it's a maximum of 42 (84) border lines (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, noone blows a TV pic up to the full extent. Especially not when home computer output is displayed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: What's called a border on the C64 is everything outside the pixelated display area (but within the line/frame) and what part thereof is shown or overscan does not depend on any definition but is how an individual TV set is adjusted.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're about to do some emulation or whatsoever, just pick a nice number, like 10 pixels/lines, for your border area, ignoring if it's a NTSC or PAL machine. This will give a nice and consistent user experience.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: There is a &lt;a href=&quot;http://hitmen.c02.at/temp/palstuff/&quot; rel=&quot;nofollow noreferrer&quot;&gt;great page&lt;/a&gt; about real life VIC-II behaviour, even though his calculations are based on assumptions and a bit off, his notes about colour behaviour are quite interesting.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - If you really want to dig into the TV's signal structure, maybe check this very good (and compact) &lt;a href=&quot;http://www.kolumbus.fi/pami1/video/pal_ntsc.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;clue sheet&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Many people often use the total line length here for calculation, not just the content part. While this is necessary when calculating C64 program timing, it's of no meaning about how much is displayable, as it includes all synchronizing parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - As a result, with a 'standard adjusted' TV-screen pictures of European C64 output should show a wider top and bottom margin than US models. Except, many promo pictures of commodore, that clearly show a European models output (no photoshop back then), don't show such ... as if they cranked up the picture to get a better image. Eventually the ultimate proof how irrelevant that calculations are.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorDisplayName="user39" LastEditDate="2019-02-09T20:13:40.897" LastActivityDate="2019-02-09T20:13:40.897" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7133" PostTypeId="1" AcceptedAnswerId="7144" CreationDate="2018-07-30T12:39:37.350" Score="8" ViewCount="1646" Body="&lt;p&gt;In Leningrad they developed a clone of the ZX Spectrum, replacing the ULA by some TTL logic. Some of my speculations:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;In the USSR, the analog TV sets used SECAM, not PAL, so I imagine that the timings will be different between the UK Spectrums and the Leningrad. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And I imagine that TTL logic is going to have a drastically different speed from a ULA anyway&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;They may have needed to leave some features out to keep the chip count low enough to be affordable.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Confirming or disconfirming my speculations, is anything precisely known about the differences that caused incompatibilities between the Leningrad and the Sinclair machines?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="3290" LastEditDate="2020-04-29T20:21:54.357" LastActivityDate="2021-04-11T16:56:03.843" Title="How compatible is the Leningrad clone with the &quot;original&quot; ZX Spectrum?" Tags="&lt;zx-spectrum&gt;&lt;compatibility&gt;&lt;ussr&gt;&lt;clone&gt;&lt;zx-spectrum-clones&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7134" PostTypeId="2" ParentId="7133" CreationDate="2018-07-30T13:07:14.597" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;In the USSR, the analog TV sets used SECAM, not PAL, so I imagine that the timings will be different between the UK Spectrums and the Leningrad.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;SECAM is, like PAL just the colour encoding and on top of the basic B&amp;amp;W TV signal. Basic timing is therefore not touched. It's just about how colours are put on top - which is done in the modulator circuit anyway, as the digital output is RGB plus composite sync for the Leningrad (YUV for the Spectrum).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And I imagine that TTL logic is going to have a drastically different speed from a ULA anyway&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not in a way that it mattered with the Z80 and RAM/ROM beefing incredibly slow compared to TTL or ULA signal timing. For all practical purposes they are equivalents.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;They may have needed to leave some features out to keep the chip count low enough to be affordable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;None that I know of. It would have been hard anyway, as the Spectrum doesn't exactly offer a lot of features at all :)) (*1) As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7133/how-compatible-is-the-leningrad-clone-with-the-original-zx-spectrum?noredirect=1#comment19788_7134&quot;&gt;tofro mentioned&lt;/a&gt;, there was no bus connector (*2), which may count as a missing feature (*3), though, more of a mechanical than an electronic one.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Confirming or disconfirming my speculations, is anything precisely known about the differences that caused incompatibilities between the Leningrad and the Sinclair machines?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Haven't heard of any (*4). Schematics are widely available. For example &lt;a href=&quot;https://k1.spdns.de/Vintage/Sinclair/82/Clones/Russia/LENINGRAD/Build%20your%20own!/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. So it's easy to check the workings - maybe against the &lt;a href=&quot;https://www.knaapic.nl/wordpress/zx-spectrum-issue-7&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spectrum Series 7&lt;/a&gt; project?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In fact, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7133/how-compatible-is-the-leningrad-clone-with-the-original-zx-spectrum?noredirect=1#comment19785_7134&quot;&gt;Tommy mentions&lt;/a&gt; mentioned, many SU/Russian spectrum clones got enhancements like a &lt;a href=&quot;http://www.benophetinternet.nl/hobby/vanmezelf/Kempston%20Joystick%202012%20manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kempston joystick interface&lt;/a&gt;. For the &lt;a href=&quot;https://k1.spdns.de/Vintage/Sinclair/82/Clones/Russia/LENINGRAD/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Leningrad&lt;/a&gt; this is true for second revision boards (Leningrad 2). Another, maybe even more appealing, was a breadboard area for free form interface building. Quite handy for a DIY computer. Last but not least, the RGB output (instead of YUV) did enable the use of professional CRTs. So maybe the question might be rather &lt;strong&gt;What Improvements Did the Leningrad Offer Compared With the Spectrum&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;*2 - Other SU/Russian clones, like the quite popular &lt;a href=&quot;https://k1.spdns.de/Vintage/Sinclair/82/Clones/Russia/BALTIK/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Baltik&lt;/a&gt; did feature an expansion port, even using real connectors instead of PCB-edge type.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Then again there might not have been many western expansion modules available at that time and less supply in edge connectors, as Eastern European designers usually preferred more reliable ways of plugging.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Except for slight differences in colour due different encoding effects only visible in side by side comparison.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2021-04-11T16:56:03.843" LastActivityDate="2021-04-11T16:56:03.843" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="7135" PostTypeId="1" AcceptedAnswerId="7136" CreationDate="2018-07-30T22:36:31.390" Score="24" ViewCount="2613" Body="&lt;p&gt;One of the more remarkable events in the history of personal computers was IBM contemplating basing their PC on Atari technology. That this was seriously considered, everyone agrees, but it's hard to pin down specifics. Some versions include:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.360doc.com/content/12/0124/10/28217_181627497.shtml&quot; rel=&quot;noreferrer&quot;&gt;http://www.360doc.com/content/12/0124/10/28217_181627497.shtml&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;At first, IBM thought about rebranding an existing computer, and had selected the Atari 800. However, after a visit to Atari headquarters, where IBM businessmen were literally put in a box and run through the assembly line by unorthodox and sometimes stoned Atari employees, the computing giant decided they would rather build their own computer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So that version suggests the deal would have gone ahead but for the difference in corporate culture, which admittedly was large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.thoughtco.com/history-of-the-ibm-pc-1991408&quot; rel=&quot;noreferrer&quot;&gt;https://www.thoughtco.com/history-of-the-ibm-pc-1991408&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;At one point, IBM considered buying the fledgling game company Atari to commandeer Atari's early line of personal computers. However, IBM decided to stick with making their own personal computer line and developed a brand new operating system to go with.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That version suggests they would have outright bought the company, which is not what they did with Microsoft or offered to do with Digital Research. (Also, I don't think I would call Atari still a fledgling company at that stage.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://arstechnica.com/gadgets/2017/06/ibm-pc-history-part-1/&quot; rel=&quot;noreferrer&quot;&gt;https://arstechnica.com/gadgets/2017/06/ibm-pc-history-part-1/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The machine that would become known as the real IBM PC begins, of all places, at Atari. Apparently feeling their oats in the wake of the Atari VCS' sudden Space Invaders-driven explosion in popularity and the release of its own first PCs, the Atari 400 and 800, they made a proposal to IBM's chairman Frank Cary in July of 1980: if IBM wished to have a PC of its own, Atari would deign to build it for them.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Far from being the hidebound mainframer that he’s often portrayed as, Cary was actually something of a champion of small systems—even if &quot;small systems&quot; in the context of IBM often meant something quite different from what it meant to the outside world. Cary turned the proposal over to IBM's Director of (data) Entry Systems, Bill Lowe, based out of Boca Raton, Florida. Lowe in turn took it to IBM's management committee, who pronounced it &quot;the dumbest thing we've ever heard of.&quot; (Indeed, IBM and Atari make about the oddest couple imaginable.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That version suggests the proposal was initiated by Atari, and that it was not in fact seriously considered by the people who would have had to sign off on the deal. It doesn't say why, but the tone suggests corporate culture is a likely reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of these versions points out that a 40-column computer would be unsuitable for business computing in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would love to know exactly what happened. Who was in favor of the proposal, and who turned it down? What exactly would it have consisted of; purchase of the company, technology license or something else? An Atari 800 with an IBM badge, or an IBM PC with some Atari technology in the guts, or something in between? How close did it get? What were the stumbling blocks? Why didn't they go to Apple or Commodore, whose technology and corporate culture would both have been closer matches?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are any more detailed and authoritative sources known to exist?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="9120" LastEditDate="2018-08-08T18:52:53.693" LastActivityDate="2019-03-30T16:43:04.297" Title="The almost-was Atari IBM PC" Tags="&lt;history&gt;&lt;ibm-pc&gt;&lt;atari-800&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7136" PostTypeId="2" ParentId="7135" CreationDate="2018-07-31T00:04:13.463" Score="22" Body="&lt;p&gt;We can no longer ask &lt;a href=&quot;https://www.independent.co.uk/news/obituaries/william-lowe-computer-engineer-whose-work-at-ibm-extended-the-reach-of-computers-from-big-8925246.html&quot; rel=&quot;noreferrer&quot;&gt;Bill Lowe&lt;/a&gt;, may he rest in peace.&lt;/p&gt;&#xA;&lt;p&gt;But here's a little more information:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0816013918&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Blue Magic&lt;/em&gt; by James Chposky and Ted Leonsis&lt;/a&gt;, when Entry Level Systems Lab Director Bill Lowe went to IBM's Corporate Management Committee in July 1980 to propose the project, he told them, &amp;quot;The only way we can get into the personal computer business is to go out and buy part of a computer company, or buy both the CPU (central processing unit) and software from people like Apple or Atari--because we can't do this within the culture of IBM.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And in the book &lt;em&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0985597402&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari Inc.: Business Is Fun&lt;/a&gt;&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;William Lowe would be the one to break from IBM's standard business methodologies and models. He knew if IBM was going to have a new class of product, then it couldn't be done through the normal bureaucracy channels of 'Big Blue.' So he looked at two avenues. One would be to set up an island, a totally separate team outside of IBM to build an entirely new system design. The other would be to evaluate existing computer companies and look to acquire them or their own technologies, and it was in this avenue that he took particular note of some intriguing new designs from a company out in California called Atari.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;William Lowe contacted Atari in 1979&lt;/strong&gt; [emphasis added] and requested a meeting to discuss their home computer systems. &amp;quot;We had two meetings actually, one in my office and another at my apartment in San Francisco with IBM,&amp;quot; recalls Ray Kassar. &amp;quot;I was asked to come down from the Cyan offices up in Grass Valley down to the Sunnyvale offices to meet with IBM. We discussed our computer systems with them. I think &lt;strong&gt;the two problems were, we had a closed proprietary design and also, because our systems had to work on televisions, we only had 40-column displays, and those factors just wouldn't work for IBM&lt;/strong&gt;,&amp;quot; [emphasis added] recalls Steve Mayer. For one brief shining moment, IBM had actually considered acquiring the Atari home computers to use as IBM's new personal computer systems. If that had happened, the open architecture personal computer landscape that made Bill Gates a multi-billionaire might have looked far different.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Both of these accounts agree that IBM's Bill Lowe initiated the conversation, although the dates disagree. The difference in corporate culture between IBM and Atari wasn't mentioned as a deal killer, only the closed nature of Atari's hardware and the issue with 40 columns.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-03-30T16:43:04.297" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7137" PostTypeId="2" ParentId="6729" CreationDate="2018-07-31T01:59:33.797" Score="4" Body="&lt;p&gt;PDP-11 had a 'halt' instruction which terminated execution until someone pressed a key on the front panel, and a 'wait' instruction which stopped execution until the next interrupt.  In the context of this question, we're obviously talking about the semantics of 'wait'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think about a system architecture where there's one bus used for memory and I/O devices (the Unibus, in the case of the PDP-11), and without cache, so that memory accesses are actually memory accesses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point of 'wait' is to get the CPU off the system bus so it's not competing with I/O devices for bus use.  The OS executes 'wait' in its idle loop, i.e., when there's no useful computation to be done.  Absent wait, you'd need a tight loop. This would access the bus repeatedly to fetch the branch instruction over and over, and those fetches are needlessly using some of the bus bandwidth.&lt;/p&gt;&#xA;" OwnerUserId="10254" LastActivityDate="2018-07-31T01:59:33.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7138" PostTypeId="2" ParentId="7056" CreationDate="2018-07-31T02:16:58.137" Score="0" Body="&lt;p&gt;I vaguely recall that MARK was added for Fortran, but I don't recall my source for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a long-time Macro-11 programmer, both kernel and user modes, I never used MARK. &lt;/p&gt;&#xA;" OwnerUserId="10254" LastActivityDate="2018-07-31T02:16:58.137" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7139" PostTypeId="2" ParentId="6891" CreationDate="2018-07-31T02:28:18.597" Score="0" Body="&lt;p&gt;FORTRAN was first released for the IBM 704; the 704 used as input the IBM 711 card reader.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 711 could only read 72 columns of an 80-column card, and that's why FORTRAN statements had to occupy columns 1 to 72.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www-03.ibm.com/ibm/history/exhibits/701/701_1415bx11.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www-03.ibm.com/ibm/history/exhibits/701/701_1415bx11.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naturally, this hardware limitation became enshrined as a standard.&lt;/p&gt;&#xA;" OwnerUserId="10254" LastActivityDate="2018-07-31T02:28:18.597" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7140" PostTypeId="2" ParentId="5674" CreationDate="2018-07-31T02:51:58.893" Score="10" Body="&lt;p&gt;In a similar vein, Algol-68R on ICL 1900 (a 24-bit machine) initialized memory to -6815700, which when displayed as text (four 6-bit characters), spelled 'F00L', as well as possessing numerous other virtues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL_68-R#F00L&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/ALGOL_68-R#F00L&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10254" LastActivityDate="2018-07-31T02:51:58.893" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7141" PostTypeId="2" ParentId="617" CreationDate="2018-07-31T07:35:47.007" Score="7" Body="&lt;p&gt;It is possible to read the discs using the original Philips player and connecting it to a PC but it requires a low level SCSI driver to be written as the communication is so slow and would time out using the standard comms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other option is to look at &lt;a href=&quot;https://www.domesday86.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Domesday86.com project&lt;/a&gt; that is trying to sample the discs using a standard laserdisc player by recording the laser direct and then decode the pits back into images / audio / data using some software (early days from what I can tell but they have images).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The emulator for the CAMiLEON project is &lt;a href=&quot;https://github.com/Domesday/BeebEm-AIV&quot; rel=&quot;nofollow noreferrer&quot;&gt;on GitHub&lt;/a&gt; but is incomplete as it requires frame grabs and data dumps from the discs. It will also only work on the Domesday discs. It won't work on any of the other discs that were produced for the system.&lt;/p&gt;&#xA;" OwnerUserId="10255" LastEditorUserId="79" LastEditDate="2018-07-31T11:27:36.970" LastActivityDate="2018-07-31T11:27:36.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7142" PostTypeId="2" ParentId="7128" CreationDate="2018-07-31T10:35:26.233" Score="8" Body="&lt;p&gt;&lt;a href=&quot;http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt&quot; rel=&quot;noreferrer&quot;&gt;http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt&lt;/a&gt;, section 3.4.:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;          | Video  | # of  | Visible | Cycles/ |  Visible&#xA;   Type   | system | lines |  lines  |  line   | pixels/line&#xA; ---------+--------+-------+---------+---------+------------&#xA; 6567R56A | NTSC-M |  262  |   234   |   64    |    411&#xA;  6567R8  | NTSC-M |  263  |   235   |   65    |    418&#xA;   6569   |  PAL-B |  312  |   284   |   63    |    403&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3777" LastActivityDate="2018-07-31T10:35:26.233" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7143" PostTypeId="1" CreationDate="2018-07-31T12:02:30.317" Score="13" ViewCount="639" Body="&lt;p&gt;On UNIX, the boot code is traditionally found in the directory &lt;code&gt;/usr/mdec&lt;/code&gt;.  Some modern UNIX variants keep this tradition up (e.g. OpenBSD) while others have changed the directory layout (e.g. FreeBSD).  I was able to find a &lt;code&gt;/usr/mdec&lt;/code&gt; directory in &lt;a href=&quot;https://minnie.tuhs.org//cgi-bin/utree.pl?file=V5/usr/mdec&quot; rel=&quot;noreferrer&quot;&gt;5th edition UNIX&lt;/a&gt;, but not in any of the incomplete earlier versions.  No explanation for the name is given.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where does the name &lt;code&gt;/usr/mdec&lt;/code&gt; come from and what does it mean?&lt;/p&gt;&#xA;" OwnerUserId="24" LastActivityDate="2019-08-15T19:43:59.113" Title="Where did /usr/mdec come from?" Tags="&lt;unix&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7144" PostTypeId="2" ParentId="7133" CreationDate="2018-07-31T12:58:58.263" Score="11" Body="&lt;p&gt;Leningrad is a primitive and not particularly compatible clone. However, it is pragmatic, so the incompatibilities are not always going to show up. The main differences are due to a completely different way in which timings are implemented in Leningrad, to an extent that I would not personally call Leningrad's circuitry &quot;an ULA clone&quot;. I am a coder, so I can give you a list of incompatibilities from the coder's prospective.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The sharing of memory accesses by ULA in ZX Spectrum and in Leningrad is done very differently. From the coder's prospective, ZX Spectrum delays slow memory accesses during screen drawing; the detailed specification of how it is done can be found here: &lt;a href=&quot;http://scratchpad.wikia.com/wiki/Contended_memory&quot; rel=&quot;noreferrer&quot;&gt;http://scratchpad.wikia.com/wiki/Contended_memory&lt;/a&gt;&#xA;In comparison, Leningrad delays the execution of Z80 at all times, during M1 CPU cycles, which manifests itself as, approximately, rounding up the execution times of commands requiring odd number of CPU cycles to even number of cycles. The resulting performance is about the same as in the real Spectrum, but the exact mileage depends on the specific inner loops and is not the same. This can lead to speed differences in games (I am not aware of any specific games exhibiting this incompatibility, but there will be some for sure); it also means that any exactly timed codes for ZX Spectrum cannot possibly work correctly on Leningrad (which means that pretty much every game/demo using multicolour will not work correctly). For example, &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=0007726&quot; rel=&quot;noreferrer&quot;&gt;Shock Megademo&lt;/a&gt; will not work correctly (assuming you managed to start it, which is not a given). Any modern game based on &lt;a href=&quot;https://faqwiki.zxnet.co.uk/wiki/NIRVANA_Engine&quot; rel=&quot;noreferrer&quot;&gt;Nirvana engine&lt;/a&gt; will not work. Beeper engines also rely upon precisely timed loops. Depending on the specific beeper engine, they will usually sound differently and, for some engines, can, at least in theory, go significantly out of tune.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In fact, Leningrad was often assembled as a kit, and since availability of the quartz resonators with correct frequency was for some reason limited at the time, there were also variations in the specific timing parameters of the generated video signal. The classic Spectrum 48K always has 224 CPU cycles per scanline; some home-made Leningrads can have 216 or 232 cycles per scanline. Once again, this will affect precisely timed loops.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Leningrad does not have the floating bus. Some ZX Spectrum games draw the image behind the raster beam. Since line interrupts are not available, coders of some commercial games implemented waiting loops that use floating bus to identify when the ULA begins drawing the screen. Arkanoid is probably the most famous example of such a game, but it also affects Cobra, Sidewise and Short Circuit. Without the floating bus, these games freeze on Leningrad, just like they freeze on Amstrad models of 128K ZX Spectrum. Russian mags described many hardware hacks implementing so-called port #FF, intended to rectify this issue.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Leningrad's frame interrupt does not happen in the right place. On ZX Spectrum frame interrupt happens 64 screen lines before ULA begins drawing the main screen. Because of this time gap, and also because the screen is drawn by ULA from top to bottom, line by line, this suggests a popular rendering strategy &quot;ahead of the beam&quot;, where sprites are pre-sorted by their vertical positions, drawn before the ULA renders them on the screen and then all deleted after the beam has passed in preparation for the next frame. Since, once again, line interrupts are not available, this whole setup hinges on spending about the right amount of time drawing sprites, and then about the right amount of time deleting them. On Leningrad the frame interrupt happens at the first scanline below the visible screen. This means that instead of starting drawing 64 lines before the start of visible screen, programs begin drawing 120 lines before the start of visible screen. This usually means that sprite removal begins way too early in relation to their display and many commercial games would work on Leningrad with flickering/disappearing sprites.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Kempston joystick on Leningrad reads 3 top bits as 1s. This must throw some programs off balance. Writing to every port would write to system port #FE, so programs attempting to access external hardware would produce beeper noises and changing border colours.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Basically, in contrast to what the other answer here suggests, Leningrad was one of the worst Russian clones compatibility-wise. What was going for it was its absolute simplicity. The resulting low price mattered a lot at the time when even such a cheap ZX Spectrum clone could cost a monthly salary.&lt;/p&gt;&#xA;" OwnerUserId="5039" LastEditorUserId="5039" LastEditDate="2018-07-31T14:50:25.273" LastActivityDate="2018-07-31T14:50:25.273" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7145" PostTypeId="5" CreationDate="2018-07-31T14:12:22.597" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2018-07-31T14:12:22.597" LastActivityDate="2018-07-31T14:12:22.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7146" PostTypeId="4" CreationDate="2018-07-31T14:12:22.597" Score="0" Body="For questions about words, phrases and definitions that are specific to classic computers and gaming systems." OwnerUserId="3748" LastEditorUserId="3748" LastEditDate="2018-07-31T18:06:29.210" LastActivityDate="2018-07-31T18:06:29.210" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7147" PostTypeId="2" ParentId="1908" CreationDate="2018-07-31T14:17:40.570" Score="1" Body="&lt;p&gt;Nothing like this game appears in &lt;em&gt;&lt;a href=&quot;https://www.atariarchives.org/basicgames/&quot; rel=&quot;nofollow noreferrer&quot;&gt;101 BASIC Games&lt;/a&gt;&lt;/em&gt; or any of its descendants like &lt;em&gt;&lt;a href=&quot;https://www.atariarchives.org/morebasicgames/&quot; rel=&quot;nofollow noreferrer&quot;&gt;More BASIC Computer Games&lt;/a&gt;&lt;/em&gt;. I can't find anything like it in &lt;em&gt;&lt;a href=&quot;https://archive.org/details/Whattodoafteryouhitreturn&quot; rel=&quot;nofollow noreferrer&quot;&gt;What To Do After You Hit Return&lt;/a&gt;&lt;/em&gt;. Nor is it in &lt;em&gt;Announcing: Computer Games&lt;/em&gt;, which is a good one to look in because it has a &quot;different&quot; collection than most books.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AFAIK, Byte did not publish a collection of games (?) so this seems like a likely suspect. They stopped printing type-ins after they sold to McGraw-Hill in 1981, so that gives you the 1975-1981 period to look in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do we have any other time constraints? The Wiki puts the release of the BESM-6 as 1968, but perhaps the BASIC was released later? That's assuming it was in BASIC and not ported to some other language the BESM supported.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: I'll edit this as I poke about on Archive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Added:&lt;/strong&gt; the comment currently above mine suggests a possible time-frame: when was the SM-1420 on the market?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-07-31T14:41:39.737" LastActivityDate="2018-07-31T14:41:39.737" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7148" PostTypeId="1" AcceptedAnswerId="11673" CreationDate="2018-07-31T14:26:17.900" Score="9" ViewCount="559" Body="&lt;p&gt;I'm looking for another PET game, which I cannot find on various sites. It was one of the earlier ones - it was available when I first got access to the PETs circa 1981/82.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The user starts in the center of the screen and is surrounded by a series of concentric rectangular walls, two or three sets I think. There are gaps in the walls in the four cardinal directions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enemies appear outside the walls and begin moving inward. They will bump into the walls and remove a small part of them, but generally attempt to move towards the gaps and then approach you. Over several waves, the slight damage would add up and eventually new holes would appear that they could move through.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recall that the characters used for the player and enemy were card suits? I think the player was the diamond?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't recall how the action between the player an the enemy happened, although I do recall there was some timing involved as you peeked out from behind the walls to make quick attacks.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-07-15T20:17:26.827" Title="PET game, enemies attempt to break through several concentric sets of walls" Tags="&lt;identify-this-game&gt;&lt;commodore-pet&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7149" PostTypeId="1" CreationDate="2018-07-31T16:24:21.397" Score="2" ViewCount="1422" Body="&lt;p&gt;I get A fatal exception 0E has occurred at 0028:FF02847B after trying to install windows 98 se on an hp pavilion zt3000. It does this right after is says searching for plug and play hardware.&lt;/p&gt;&#xA;" OwnerUserId="10256" LastActivityDate="2018-08-06T01:02:28.047" Title="A fatal exception 0E has occurred at 0028:FF02847B Installing Windows 98 SE" Tags="&lt;windows-98&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7150" PostTypeId="2" ParentId="7149" CreationDate="2018-07-31T17:26:16.950" Score="2" Body="&lt;p&gt;Between then and now, quite a bit of new extensions have been built into standard PC technology that Windows 98 wasn't even been thinking of. Depending on your possible BIOS setup, your mileage for success might vary:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing I would try is &lt;em&gt;disable ACPI completely&lt;/em&gt; - This has always been a problem with Win98.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also need to disable APM (Advanced Power Management) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then disable all &quot;enhanced parallel port&quot; support and make that plain and dumb, do the same for all other devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Upgrade the BIOS to the newest version&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-07-31T17:26:16.950" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7151" PostTypeId="2" ParentId="6729" CreationDate="2018-07-31T17:28:03.670" Score="2" Body="&lt;p&gt;The question asks specifically about microcomputers, but this answer addresses minicomputers, showing how halt was used in one minicomputer, and speculating that the nearly ubiquitous presence of halt in computers could have made its inclusion desirable in the microprocessor if for no other reason than to make the chip easier to sell.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The Z80 and 8080 are not early CPU's.  They are early microprocessors, however.  The halt instruction was used in many CPUs previous to the advent of the microcomputer.  This is relevant because one one could argue that an early microprocessor had better have a halt instruction in order to not surprise the buyer.  The early microprocessors were being sold to a generation of engineers and programmers who had usually had a halt instruction.  If you can easily include a halt instruction, then it would be beneficial when selling the chip to not surprise the buyer by not having one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One such earlier computer which had a halt instruction was the &lt;a href=&quot;https://en.wikipedia.org/wiki/MODCOMP&quot; rel=&quot;nofollow noreferrer&quot;&gt;Modcomp&lt;/a&gt; series of minicomputers.  These were popular through the 70's for industrial control, scientific computing, and instrumentation.  Like many minicomputers, the Modcomp had a front panel with switches and lights. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lights could indicate the address the computer was executing, the contents of various registers, and so-on.  This made the halt instruction perfect for handling an unrecoverable situation (what we might now call a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kernel_panic&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;kernel panic&quot;&lt;/a&gt;).  This is when the operating system encounters an unrecoverable error so severe that it cannot even print an error message on the system console (perhaps the error is in the console driver itself).  In that case, the operating system can load (for example) an error code into a register and then HALT.  When the CPU halts, all the lights stop blinking, so it is pretty obvious to the machine's operator that something happened.  The operator can then read out the address of the halt, or the contents of the register holding the error code.  These would be looked up in a manual which would explain that (to make up an example), code 1234H corresponded to &quot;console driver stall.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The halt instruction was also used in diagnostic programs.  The Modcomp series came with extensive diagnostic programs to self-check the CPU, memory, I/O subsystems... everything.  These programs used the console (a TTY type device) to display their status and report errors, but sometimes the console could not be written to.  For example, the CPU diagnostic may find an error at a basic level that makes writing to the console doubtful.  In that case, it would halt, and again the operator would look up the code in a manual to find out what went wrong.&lt;/p&gt;&#xA;" OwnerUserId="3324" LastActivityDate="2018-07-31T17:28:03.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7152" PostTypeId="1" AcceptedAnswerId="7153" CreationDate="2018-07-31T18:45:17.010" Score="4" ViewCount="409" Body="&lt;p&gt;As I understand it, in the early days of personal computers, strict FCC limits on RF emissions, were a factor limiting the speed at which data could be transmitted over wires, but I'm trying to understand exactly how that worked. In particular, I came across the following surprising comment at &lt;a href=&quot;http://atariage.com/forums/topic/239749-improving-800xl-sio-transfer-rate/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://atariage.com/forums/topic/239749-improving-800xl-sio-transfer-rate/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;The 400 and 800 were designed before the relaxed FCC rules, so SIO was bandwidth limited to work with 19.2 peripherals.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This referring to the SIO bus used to connect disk drives among other things to the Atari 8-bit computers, and 19.2 being in kilobits per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is actually a very severe restriction, less than 3 kilobytes per second, much slower than the maximum transfer rate of a 5.25&quot; floppy disk itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the Apple II accessed disks at 15 kilobytes per second. How was this possible without running into the same limit?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the Atari 800 was released in 1979. As I understand it, the new FCC rules came into effect in 1980, and were more restrictive rather than more relaxed (at least for class B, devices marketed for use at home, which would certainly include everything Atari sold); famously, the original TRS-80 generated so much RF interference that you could make up for its lack of sound hardware by putting it next to a radio and writing an appropriately crafted loop to generate the right pattern of interference to play music on the radio, but that model had to be discontinued at the end of 1980 for that reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what were the actual limits on data transmission speed before and after 1980? And why exactly was Atari limited to 19.2 kbits/sec?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-06-18T14:04:06.917" Title="FCC RF limits and wire transmission speeds" Tags="&lt;history&gt;&lt;performance&gt;&lt;atari-800&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7153" PostTypeId="2" ParentId="7152" CreationDate="2018-07-31T19:05:32.637" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;So what were the actual limits on data transmission speed before and after 1980?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There were no limits, at least no artificial and regarding the transmission speed. The only limits were set by technology and effort (aka money) spend to reach a certain speed.&lt;/p&gt;&#xA;&lt;p&gt;Transmission speed on corporate data lines was already at or beyond 64 kbps in 1980. No hassles there. So speed wasn't a concern.&lt;/p&gt;&#xA;&lt;p&gt;All limits set by FCC (and other regulatory bodies around the world) were about radio emission, which were supposed not to interfere with other equipment and not to disturb legal (licensed) transmissions.&lt;/p&gt;&#xA;&lt;p&gt;Radio interferences are defined by frequency and power used. If the power is low enough to not disturb standard equipment within usual distance, no regulation. Similar for frequencies, but since next to the whole spectrum is allocated, it again falls back to the power dissipated.&lt;/p&gt;&#xA;&lt;p&gt;So if at all, it was about the way interfaces are build and shielding. There is (next to) no radiation when using adequately shielded cables and conenctors - just think HP-IB of 1960, specified for up to one MHz without any FCC trouble. Similar Centronics' parallel printer port. There's a reason these cables had shielding and metal covers on all connectors.&lt;/p&gt;&#xA;&lt;p&gt;So if at all it's a question about what price they could charge for cables.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line, next to all these claims are rather unfounded and hot air ventilation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;the original TRS-80 generated so much RF interference that you could make up for its lack of sound hardware by putting it next to a radio&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Same was true for the Apple II, as it was also lacking all shielding, but it got sold way into the 1990s. The II and IIe never got any shielding until 1993. The discontinuation of the TRS-80 was rather thru its comparably high production cost while at the same time being notoriously unreliable. But that's a different story.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="11239" LastEditDate="2020-06-18T14:04:06.917" LastActivityDate="2020-06-18T14:04:06.917" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7154" PostTypeId="2" ParentId="3127" CreationDate="2018-07-31T19:51:18.927" Score="2" Body="&lt;p&gt;As others have said, you'll have about as much luck, and at least as much of a job, as trying to get ST Mono to display on a normal TV. The signals produced by the XE are fundamentally incompatible with what the SM range expect in almost every way - Horizontal frequency (35.8kHz vs 15.7kHz), vertical frequency (71.5Hz vs 50.0 or 59.9Hz) and line count (~501 progressive vs ~312 or ~262 progressive/~625 or ~525 interlaced), TTL (allegedly) pixel intensity instead of analogue, separate syncs instead of a composite signal (which is the case even with S-video), probably even things like sync polarity, active/visible proportion of the scanline/frame, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'd probably be better off trying to transplant the innards of a regular TV or (monochrome?) 15kHz composite monitor with the same size tube into the body of a dead SM or SC; the look would be almost completely unaffected, and you'd be able to plug the XE straight in and get a pure, authentic image out of it without any messing about with or image degradation caused by running the signal through a scaler. Plus you'd be in a position to adjust the raster size and position so it was nicely centred and just nudging the corners of the bezel (not at all guaranteed otherwise), and above all you'd be saving at least the shell of a classic monitor that would otherwise have been destined for the scrapheap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively if you can get hold of an SC, I've seen a diagram recently for connecting an ST (in low/med rez, ie the colour modes) to a monochrome 15kHz composite monitor, which essentially meant bridging all three colour lines (optionally through resistors to cap the total voltage and bias the appearance for the normal condition of green being the &quot;brightest&quot; primary and blue being the &quot;darkest&quot;) plus the Csync line (or H and V sync through a combiner for machines that lack it) onto the live pin of a composite cable, and the various grounds to the shield.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could probably, therefore, attempt the reverse; get a simple sync splitter chip, run the composite or luma (from SVideo) signal into that, then squirt the H/V syncs so produced onto the appropriate lines in the cable, and bridge the stripped composite or luma signal across all three of the colour lines unaltered (or just green if you want to run greenscreen, or with appropriate resistors onto red and green for amber). In both cases there might be a need for an inverter somewhere along the line otherwise the image might turn out negative (and the syncs might also be incorrect polarity), but that's not a particularly big ask. Other than for the fact that it runs negative intensity (IE zero volts is maximum brightness, and higher voltages make darker pixels), a monochrome composite video signal (ie colourburst disabled, or using only the luma of an S-video) is a pretty simple thing... over the active areas the voltage corresponds directly to the beam intensity as it sweeps across the raster, and the syncs are overlaid onto it (using &quot;blacker than black&quot; voltages) in the blanking areas. So there's no particular magic in converting it to/from a bridged-RGB pseudomonochrome image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You wouldn't get the completely smooth look of a true monochrome screen, that way, but it would certainly look sharp enough to fool the casual observer; the XE's maximum spatial resolution is a little less than that of the ST in low rez mode, and the SC had a fine enough dot pitch to make extended sessions in medium rez (ie 80 columns) perfectly comfortable. The phosphor is probably a little longer persistence than that of the SM, too, meaning 60Hz (which you may as well run even if your machine is PAL, because of the 192-line limit) shouldn't seem that much more flickery than 71Hz, and it will certainly be less flickery than an SM coerced into running at 60Hz...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're dead set on using the SM, you'll have to start with a decent scan converter/upscaler that can produce a genuine ~72Hz (not merely &quot;70Hz&quot;), ~36kHz (not &quot;31kHz&quot;, not &quot;31.5kHz&quot;, and probably not &quot;37kHz&quot;) VGA-esque signal from a composite input, preferably with full control over the scan characteristics. The SM's horizontal scanning frequency is akin to the original SVGA and XGA standards, but the line count is lower than almost any VGA standard other than the early 350- and 400-line EGA/CGA compatibility modes and some of the more exotic flavours of 72~85Hz not-quite-VESA enhanced refresh rate, and it's not quite 72Hz itself either. It might be able to adapt to a reasonably close preset, but if you can set the output frequency yourself that'd be better (pixel clock somewhere in the 25 to 32MHz range with around 80% of the total active including the XE's borders (you can expect maybe 72~75% to be visible as a minimum), ~35.8kHz, ~71.5Hz, about 501 lines). After that you'll at least need to bridge the RGB down to monochrome (or if you have absolutely mono input, you could just use e.g. the Green line), preferably with the resistors to tune the colour to a TV-like appearance (IE different hues of the same luminance produce different intensities on-screen), if not in fact convert the output to TTL levels. In the latter case, you'll only be able to get pure black-or-white output on the screen, but if it accepts analogue intensity you'll have greyscales.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mean, it's not outside the realm of possibility, but you might find it an expensive, frustrating exercise with a disappointing output quality. And after all that you'll likely still want to adjust the SM itself to expand the image a bit, especially in the vertical dimension (and perform some prophylactic modifications to prevent some of the more marginally specified parts, particularly some notoriously fragile power filtering capacitors, from dying in short order when pushed beyond their design specs), which is something best left to a CRT service engineer if you're not experienced with them. (Though a suitably flexible scaler might allow you to line-triple instead of line-double, and expand the XE's 192 active lines to 432 on the SM instead of what would be a quite markedly letterboxed 384...)&lt;/p&gt;&#xA;" OwnerUserId="10196" LastEditorUserId="10196" LastEditDate="2018-07-31T20:06:47.030" LastActivityDate="2018-07-31T20:06:47.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7155" PostTypeId="2" ParentId="7152" CreationDate="2018-07-31T19:58:27.697" Score="4" Body="&lt;p&gt;45MBits (a DS3) were not really a challenge any more over copper wires (for Telcos) in the 80ies. So, provided you had the money, speed was not a technical problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Raffzahn writes, you could (even back then) build data transmission equipment with much higher frequencies, provided you used appropriately shielded cables - which were obviously more expensive than non-shielded cables. Another method is to use parallel transfer with alternating signal and ground lines for shielding (that's what the Centronics printer standard did), or even differential pair connections that dampen interferences even more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_SIO&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;, a computer that included a TV modulator was technically considered by the FCC and other authorities &quot;TV equipment&quot; and fell under different rules as other home electronics - Something Apple avoided by not including a modulator.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-07-31T21:55:14.933" LastActivityDate="2018-07-31T21:55:14.933" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7156" PostTypeId="1" AcceptedAnswerId="7189" CreationDate="2018-07-31T22:32:54.473" Score="9" ViewCount="1476" Body="&lt;p&gt;One of Wozniak's greatest inventions was the Apple II floppy disk controller, which allowed Apple to avoid going the Atari/Commodore route of making each disk drive a computer in its own right; instead, the hardware overhead &lt;em&gt;per drive&lt;/em&gt; was very little beyond the drive mechanism itself. All this while achieving higher rather than lower performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It occurs to me to wonder about a possible downside: floppy disks were changing quite rapidly around that time, with several jumps in density, going from single to double sided, and a few years later, to 3.5&quot;. (There would also have been the transition from 8 to 5.25&quot; which Apple just missed.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could the same controller card handle any of those transitions, or did a new model of drive need a new controller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about the associated firmware? Was the code that knew how to handle a particular kind of drive, located in ROM on the controller card?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-08-05T13:57:42.510" Title="How specific was the Apple II floppy disk controller?" Tags="&lt;apple-ii&gt;&lt;disk-ii&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7157" PostTypeId="2" ParentId="7156" CreationDate="2018-08-01T00:00:02.167" Score="5" Body="&lt;h2&gt;TL;DR&lt;/h2&gt;&#xA;&lt;p&gt;It's wasn't any more specific than any other controller. Apple did in fact make the switch to 3.5&amp;quot; (for the Mac) using the Apple II controller - just now as a single chip implementation called &lt;a href=&quot;https://en.wikipedia.org/wiki/Integrated_Woz_Machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;IWM - Integrated Woz Machine&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In general, it doesn't matter and any controller could be used for any drive (size) - given they use a compatible plug. Like any 3,5&amp;quot; 300 rpm drive with standard (Shugart) interface can be used with a S100 5.25&amp;quot; controller. No conversion needed - except maybe the plug that is.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long Read&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It occurs to me to wonder about a possible downside: floppy disks were changing quite rapidly around that time, with several jumps in density, going from single to double sided, and a few years later, to 3.5&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's the same downturn for any other format - or none at all.&lt;/p&gt;&#xA;&lt;p&gt;To look at this one might want to separate four things here:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The Drive&lt;/li&gt;&#xA;&lt;li&gt;The Material&lt;/li&gt;&#xA;&lt;li&gt;The Controller&lt;/li&gt;&#xA;&lt;li&gt;The Driver/OS&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Drive capabilities&lt;/strong&gt; are &lt;em&gt;basically&lt;/em&gt; invariant to the recording scheme. Their technology doesn't differ much since big old (audio) tape machines. It's a head and a magnetic media. While these components set upper (and lower) limits for signal recording in speed (as length of media per time - usually in cm/s).&lt;/p&gt;&#xA;&lt;p&gt;Basically 8&amp;quot;, 5.25&amp;quot; or 3&amp;quot; drive don't differ at all. They are just motors spinning disks at a certain (sometimes variable) rate and a head to read or write from the media.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The disk material&lt;/strong&gt;  does define the density possible, they have no further say in recording format or how fast or slow recording will happen (within physical limits). Most important here density as fluxes per length, which, together with the rotation speed, defines the maximum transfer speed it can handle.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;A controller&lt;/strong&gt; again can work with any drive - given that they got the same interface - and any material. As long as the material in conjunction with the rotation speed can handle the transfer speed. The controller defines how recording is done. Wozniak's choice of GCR or 'standard' FM/MFM encoding for example. Usually a controller is defined for a certain transfer speed like 250 kbps (FM) or 500 kbps (MFM).&lt;/p&gt;&#xA;&lt;p&gt;These parts can interact in many ways but are in general interchangeable.&lt;/p&gt;&#xA;&lt;p&gt;Last part is the &lt;strong&gt;Driver/OS&lt;/strong&gt; as it might need some knowledge about the disk. Most likely rotation speed so it can accommodate track length as intended. Second might be maximum density per track, as it also does influence the amount of data that can be stored.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Could the same controller card handle any of those transitions, or did a new model of drive need a new controller?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It depends on how the new combination of above four factors is build. The switch  from 5.25&amp;quot; disks to 3.5&amp;quot; is a great case study about how it can be done.&lt;/p&gt;&#xA;&lt;p&gt;When the Shugart standard world of 300 rpm FM/MFM drives changed from 5.25&amp;quot; to 3.5&amp;quot; (*1), they had to wait until material with almost triple the density was developed. With that successfuly developed, controllers as well as OS and drivers could use these drives without any change.&lt;/p&gt;&#xA;&lt;p&gt;Apple, in contrast, did switch with the Mac as one of the first (major) users toward 3,5&amp;quot;. Years ahead of the 'standard' users. At that point disk material wasn't as developed, thus they used variable speed recording. A disk was partitioned into 5 zones with 8 sectors on the innermost tracks and 12 on the outermost, effectively now able to put 800 KiB on a smaller (3,4&amp;quot;) disk with unimproved media much like the one used for 5.25&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Apple also kept the same GCR controller Woz developed for the Apple II. Just now moved into a single chip and called &lt;a href=&quot;https://en.wikipedia.org/wiki/Integrated_Woz_Machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;IWM - Integrated Woz Machine&lt;/a&gt; and motor speed control (via PWM) added (*2). Except for motor control, the device interface was kept the same.&lt;/p&gt;&#xA;&lt;p&gt;So both strategies did work out well without (or rather minor) changes.&lt;/p&gt;&#xA;&lt;p&gt;Similar changing form 360 rpm 8&amp;quot; disks to 300 rpm 5.25&amp;quot; could be done by just adapting OS/drivers.&lt;/p&gt;&#xA;&lt;p&gt;So there are endless possibilities to switch over. All depending what the tools are, the ability to wait, or what is to be achieved.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What about the associated firmware? Was the code that knew how to handle a particular kind of drive, located in ROM on the controller card?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Depends much on the machine you're asking for. Anything possible here.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - This is always about capacity per track. Adding more tracks do not really need changes except for the number of tracks incorporated on OS level.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Well, there where other changes to simplify driver writing, like a bitstream buffer, relaxing the timing constrains for the CPU quite a bit. After all, years have passed, and the standard what consists minimal investment have shifted.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-08-05T02:06:01.553" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7158" PostTypeId="2" ParentId="2104" CreationDate="2018-08-01T02:40:19.950" Score="1" Body="&lt;p&gt;A Sinclair ZX81 / Timex Sinclair 1000 cost $149 when new, fully assembled, or $99 as a kit, and later $99 (even later $49) fully assembled. It'd easily do a couple hundred floating point operations per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps a VIC-20 might qualify, but I don't think a 1 MHz 6502 would actually do 300 flops (it was introduced in 1980 for $299).&lt;/p&gt;&#xA;" OwnerUserId="10261" LastActivityDate="2018-08-01T02:40:19.950" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7159" PostTypeId="2" ParentId="4419" CreationDate="2018-08-01T02:42:42.740" Score="1" Body="&lt;h1&gt;AT&amp;amp;T's 1984 official &lt;em&gt;The C Programming Handbook&lt;/em&gt; recognizes one compiler with 9-bit chars.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Plus another compiler in EBCDIC!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simply put, there is nothing inherent in C that would require word size to be a power of 2.  The reason we expect it today is because all modern systems do so, in turn related to computing history.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In one word: &lt;strong&gt;&lt;em&gt;packaging&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Summary&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;There is no absolute reason why word size has to be a power of 2.&lt;/li&gt;&#xA;&lt;li&gt;For mainframe/minicomputers, the size of an IC &lt;em&gt;package&lt;/em&gt; is irrelevant.  The computers are built from individual low-level logic chips, so they could (and often did) have strange word sizes.&lt;/li&gt;&#xA;&lt;li&gt;The first microprocessor was 4 bits because of &lt;em&gt;packaging&lt;/em&gt; constraints.&lt;/li&gt;&#xA;&lt;li&gt;For several reasons, microprocessor word size has grown by doubling.  Thus, microprocessor word sizes have become powers of 2.&lt;/li&gt;&#xA;&lt;li&gt;Microprocessor speed was severely limited by &lt;em&gt;packaging&lt;/em&gt; limitations, until they started using larger non-DIP packages.  Then microprocessor speed surpassed mainframe/minicomputers, leading to the demise of the latter.&lt;/li&gt;&#xA;&lt;li&gt;Because nearly every computer today is built from microprocessors, we mistakenly assume that word size always must be a power of 2.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2&gt;(1) No C requirement for a power of 2.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This manual was written in 1984 by AT&amp;amp;T Bell Labs to train programmers to write in C.  It was published in the time between the 1st and 2nd editions of Kernighan and Ritchie.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/yBHzW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yBHzW.png&quot; alt=&quot;C Programmer&amp;#39;s Handbook cover&quot;&gt;&lt;/a&gt;&#xA;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compilers have been written for at least one platform with a non-power-of-2 word size.  Examine the entry for the Honeywell 6000:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/6jA90.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6jA90.png&quot; alt=&quot;C Programmer&amp;#39;s Handbook page 8&quot;&gt;&lt;/a&gt;&#xA;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that C doesn't have to be in ASCII; the entry for the IBM 360/370 shows EBCDIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2nd edition of K&amp;amp;R reinforces this point:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Each compiler is free to choose appropriate sizes for its own hardware, subject only to the restriction that &lt;code&gt;short&lt;/code&gt;s and &lt;code&gt;int&lt;/code&gt;s are at least 16 bits, &lt;code&gt;long&lt;/code&gt;s are at least 32 bits, and &lt;code&gt;short&lt;/code&gt; is no longer than &lt;code&gt;int&lt;/code&gt;, which is no longer than &lt;code&gt;long&lt;/code&gt;.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Kernighan and Ritchie, &lt;em&gt;The C Programming Language&lt;/em&gt;, 2nd edition, 1988.  p. 36&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Do characters have to be individually addressable by hardware?  No, there have been plenty of systems that load/store whole words and then let the compiler do the magic.  On the Honeywell 6000, sometimes programmers would pack 5x 7-bit mixed-case ASCII, or 6x 6-bit upper-case ASCII, into one 36-bit word.  This was especially popular in COBOL programs to save memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do larger data sizes have to be a whole multiple of smaller data sizes?  In theory, no.  You could theoretically have 9 bit char, 15 bit short, and 33 bit longs.  In practice, either the processor or the compiler has to deal with this weirdness, and it's not a trivial task.  So in practice, every compiler ever made has simply made all data sizes a multiple of a char.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;(2) Mainframes and minicomputers&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Early computers were constructed from individual vacuum tubes, transistors, or small-scale integrated circuits (such as the 7400 and 74000 series).  Those that filled an entire room were generally called mainframes, whereas minicomputers were typically the size of one equipment rack or smaller.  The former usually had more memory, mass storage, and peripherals than the latter, hence the increased size and cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Designers of these systems picked a word size that was appropriate for their needs.  Many systems had word sizes that weren't powers of 2.  The GE 600 (and its successor the Honeywell 6000) had 36 bits.  The PDP 8 had 12 bits.  The Nicolet 1080 had 20 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the processor is not confined to one chip, it didn't matter how many pins were on the ICs that were used.  If one IC wasn't enough for your needs, you just wire up more.  That's why these computers took up so much space and cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, these computers could be quite fast.  With full-sized address and data buses, they could load or store an entire word in just one clock cycle.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;(3) The first microprocessor&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Microprocessors consolidate all arithmetic, logic, and control functions on to one integrated circuit.  The Intel 4004 is often cited as the first microprocessor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Side notes: Some claim the MP944 as the first microprocessor, but it was a military design that was classified until 1998, so it had no impact on future processor design.  Microcontrollers are one-chip solutions that also include ROM, RAM, and I/O on one chip; most of what I say about microprocessors also applies to microcontrollers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 4004 project was initiated by a customer who wanted to build a calculator.  Intel quickly realized that the customer's design would require a 40-pin package, when Intel had manufacturing equipment only for 16-pin chips.  Thus, the design was scaled back to using 4-bit words.  Conveniently, 4 bits is just enough to support the binary-coded-decimal used in a calculator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the 4004 is 4 bits wide externally, it uses 8-bit instructions and 12-bit addresses.  This is accomplished by multiplexing the external bus for both address and data.  Loading or storing data requires three cycles for the address and one cycle for the data; an instruction fetch uses three cycles for address and two for the instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &quot;bus bottleneck&quot; was a result of packaging limitations, made the 4004 much slower than a similarly-clocked minicomputer would be.  It also required extra hardware outside the chip to decode and latch signals.  These issues would continue for about another 25 years in further microprocessor architectures.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;(4) Word sizes double&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Four bits is simply not enough for most applications (especially not a calculator).  However, one can create larger data types by operating on multiple words.  For example, you can add two 8-bit numbers by combining the additions of two pairs of 4-bit numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could hypothetically use a similar process to add 12-bit numbers.  (This was in fact used in the 12-bit Intersil 6100 used by the PDP-8.)  However, as long as you have written the code to add two 8-bit numbers, why not re-use that code to add two 16-bit numbers?  And then re-use that to add 32-bit numbers?  You can see how this doubles the number of bits each time you increase the data size, leading to data sizes that are powers of 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another issue with the 4004 was that the instruction size was two words (8 bits).  Even later processor designs often required some multi-word instructions.  If you double the bits of the external bus, it will take fewer cycles to fetch instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Powers of 2 are also attractive to computer designers, as they are already familiar with them through other aspects of computing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, Intel's next processor (the 8008) had double the word size of the 4004: 8 bits.  The package now had 18 pins, again creating a bus bottleneck.  This was followed by the 8080, which had 40 pins, was much faster, and was easier to interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other processors entered the market after the 8008.  By then, the usefulness of word sizes that are powers of 2 had already been established, and processor designers eagerly accepted them.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;(5) New packaging overcomes limits&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Business users continued to purchase mainframes and minicomputers into the mid-1990s, as they were significantly faster than microprocessor-based machines.  The reason was the bus bottleneck imposed by microprocessor packaging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Until the 1990s, most processors were housed in dual inline packages (DIP).  Most designs had 40 pins or less, although the Motorola MC68000 is an impressive exception at 64 pins.  As the number of pins on a DIP grows, the package takes up a lot more board space, and the wires that connect the corner pins grow longer, which is a bad thing at high frequencies.  Thus, microprocessor designers did their best to limit pin count, even if this meant reducing the size of external buses.  This causes the bus bottleneck, previously described.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast, mainframes and minicomputers use as many chips as they need to build the processor.  Buses are the full width throughout the machine, so there is no bus bottleneck, making them faster than contemporary microprocessors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the 1990s, chipmakers began using other forms of packaging, such as quad flat packs, plastic leadless chip carriers, pin-grid arrays, and ball-grid arrays.  These new forms allowed more than 40 pins, enabling larger external microprocessor buses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Freed of the bus bottleneck, microprocessor instruction speeds increased dramatically.  Of course, there were other factors in play.  Tricks such as caching and pipelining were &quot;borrowed&quot; from mainframes.  Reduced Instruction Set Computing (RISC) made one-cycle instruction fetches.  Smaller transistor sizes and computer-aided chip design helped increase the number of transistors per chip, as well as boost clock speeds.  Compilers became smarter.  Regardless, microprocessors quickly outpaced the speed of mainframes and minicomputers.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;(6) Computers today&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Mainframes and minicomputers became obsolete by the end of the 1990s.  Why bother making a system out of discrete chips when a microprocessor is cheaper, smaller, and faster?  Of course, there are still room-sized computers -- but they are now server farms made of hundreds or thousands of microprocessors, not discrete chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Practically all computers today use microprocessors, which in turn have word sizes that are powers of 2.  Thus, we often assume that a processor's word size has to be a power of 2.  Although practical, it is not a requirement.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2018-08-01T02:42:42.740" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7160" PostTypeId="2" ParentId="5767" CreationDate="2018-08-01T04:34:27.027" Score="1" Body="&lt;p&gt;MC6809 did have a lot of instructions however (to be compatible with 6800 most one byte instruction codes were unavailable) to access them required multiple bytes (multiple instruction fetches) and the internal microcode (Motorola didn't improve the internal microarchitecture of the CPU) took many more CPU cycles to execute those instructions. Basically for the same clock speed other processors executed the same program function faster and with less code (memory was costly). &lt;/p&gt;&#xA;" OwnerUserId="10264" LastActivityDate="2018-08-01T04:34:27.027" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7161" PostTypeId="2" ParentId="5280" CreationDate="2018-08-01T04:47:41.520" Score="1" Body="&lt;p&gt;There were 80286 and 68000 MultiBus system boards. At the bus level they could be interchanged.&lt;/p&gt;&#xA;" OwnerUserId="10264" LastActivityDate="2018-08-01T04:47:41.520" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7162" PostTypeId="2" ParentId="2905" CreationDate="2018-08-01T04:59:26.137" Score="7" Body="&lt;p&gt;The 4 clock cycles per memory access was for instruction fetch and the 68000 could actually take longer. (Internal Architecture of 68000 was 3 16-bit Arithmetic Logic Units; 2 for Data registers and 1 for Address meaning that 32-bit addresses took longer to calculate. This was from IBM XT/370 info that used a 68000 microprogrammed to execute IBM mainframe code.) &#xA;Note that later computers loaded their O/S code into RAM. The 68000 era computers used MOS Program ROM which was quite a bit slower so wait cycles had to be added.&lt;/p&gt;&#xA;" OwnerUserId="10264" LastActivityDate="2018-08-01T04:59:26.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7163" PostTypeId="2" ParentId="7149" CreationDate="2018-08-01T06:12:44.897" Score="4" Body="&lt;p&gt;I would try to install from HDD or from USB Key (if your BIOS allows it) because CD-ROMs are often buggy on older laptops after few years and Win 9x  is really sensitive to such things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you need a MS-DOS bootable drive with FAT32 or FAT16 with all the Win9x installation files on it (~115MByte for W98SE).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So Boot to MS-DOS and run setup....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To install MS-DOS on a HDD you just:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;use &lt;code&gt;fdisk&lt;/code&gt; or any partition manager&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to create drive with FAT32 or FAT16 (FAT32 is better for Win98). Beware you can lose data on the HDD drive if you repartition already partitioned drive... For USB key use &lt;strong&gt;HP USB Disk Storage FormatTool&lt;/strong&gt;. If you already have FAT drive than this step is not needed. To make your drive boot-able its partition must be active or some boot-manager must be used instead (like lilo boot or BIOS boot menu)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;format&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Format your drive (probably &lt;code&gt;C:&lt;/code&gt;) with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FORMAT C: /S&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;that will format drive C with FAT32 or FAT16 depending on which MS-DOS version you got. And also it will copy system files so it will be boot-able with MS-DOS. The USB utility do this on its own... In case you just want to install MS-DOS on existing FAT drive then use SYS command instead of FORMAT.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;transfer w98 files&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;either use &lt;code&gt;COPY&lt;/code&gt; command or some file manager like &lt;code&gt;NC,VC,FAR&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So now just boot to MS-DOS from your drive and run w9x setup using &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CD c:\w98_install_path&#xA;setup.exe&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For more info see:  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6814/6868&quot;&gt;How do I create a boot menu to select between Windows and DOS?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;btw If this does not help try to install with disabled CPU caches and or limited CPUID in BIOS ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case your HDD is SCSI,SATA,AHCI you need specific drivers from the manufactor on a FDD drive !!!&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-08-05T20:18:26.553" LastActivityDate="2018-08-05T20:18:26.553" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7164" PostTypeId="2" ParentId="2494" CreationDate="2018-08-01T09:09:48.427" Score="8" Body="&lt;p&gt;I have never tried it, but there is apparently a third-party patch for the Windows 98 virtual memory manager kernel driver that enables it to support larger configurations, up to 4GB.  See &lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.os.msdos.misc/qNFKl_iJDP0&quot; rel=&quot;noreferrer&quot;&gt;this newsgroup post&lt;/a&gt; for details.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-08-01T09:09:48.427" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7165" PostTypeId="1" AcceptedAnswerId="7167" CreationDate="2018-08-01T13:15:13.233" Score="2" ViewCount="981" Body="&lt;p&gt;The SNES has a PPU (Picture Processing Unit) which comprises VRAM, OAM (Object Attribute Memory), and CGRAM (Color Graphics/Palette RAM). These are used to represent tiles, tile maps; attributes for sprites; and color palettes, respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VRAM contains a 2D array which represents a map of tiles that are displayed on the screen (in four background layers, depending on the current mode, not relevant here).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;a href=&quot;https://emu-docs.org/Super%20NES/General/snesdoc.html#Reg2116&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://emu-docs.org/Super%20NES/General/snesdoc.html#Reg2116&lt;/a&gt; there is a pretty good overview of how this works:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It states that each entry in the tile map contains this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;High     Low          Legend-&amp;gt;  c: Starting character (tile) number&#xA;vhopppcc cccccccc               h: horizontal flip  v: vertical flip&#xA;                                p: palette number   o: priority bit&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It then goes on to say that the following formula can be used to calculate the address of the character:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;address_of_character = (base_location_bits &amp;lt;&amp;lt; 13) + (8 * color_depth *&#xA;  character_number);&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is also an example:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, if base location 1 is selected, the color depth for the&#xA;  tile map is 4 bits (16 colors), and character number 1 is selected,&#xA;  the address will be (1&amp;lt;&amp;lt;13)+8*4*1 = 8224.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, it then states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Note that the word address entered into the VRAM address register will&#xA;  be half of that, or 4112.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;1: Why is it half?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2: Why is the color depth 4 bits in this example?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3: How is color depth selected or derived, in general?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've searched through the hardware registers: &lt;a href=&quot;https://en.wikibooks.org/wiki/Super_NES_Programming/SNES_Hardware_Registers&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikibooks.org/wiki/Super_NES_Programming/SNES_Hardware_Registers&lt;/a&gt; but I don't seem to find anything regarding color depth nor palette. This leads me to believe that the color depth is derived based on the current mode and perhaps something else. Please correct me.&lt;/p&gt;&#xA;" OwnerUserId="7413" LastActivityDate="2018-09-03T08:29:54.783" Title="How does the SNES (Super Nintendo) calculate the address of a character?" Tags="&lt;graphics&gt;&lt;snes&gt;&lt;architecture&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7166" PostTypeId="1" CreationDate="2018-08-01T13:25:27.547" Score="7" ViewCount="365" Body="&lt;p&gt;How was the Intel 80486 (from 1989) debugged? I'm assuming it was written in some HDL language, like Verilog. However, how was testing and debugging of the CPU carried out?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there several steps to this process, such as running it in an emulator at first, then simulating the Verilog code, then testing manufactured prototype CPUs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What tests were used?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a bonus question, are there big differences in how this was done in the late 80s to how it is done today?&lt;/p&gt;&#xA;" OwnerUserId="7413" LastActivityDate="2018-08-01T13:25:27.547" Title="How was the Intel 80486 debugged?" Tags="&lt;hardware&gt;&lt;intel&gt;&lt;debugging&gt;" AnswerCount="0" CommentCount="17" FavoriteCount="1" ClosedDate="2018-08-01T17:28:01.507" ContentLicense="CC BY-SA 4.0" />
  <row Id="7167" PostTypeId="2" ParentId="7165" CreationDate="2018-08-01T14:11:12.720" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;1: Why is it half?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Erm, half as in halving like in divided by two (aka shifted by 1)? As described it's a word address, not an address of a word (or a byte address). (*1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The example does illustrate this quite well by coming up with the (byte address) 8224, which turned into a word address (4112, exactly half, isn't it?) is to be stored in the register.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2: Why is the color depth 4 bits in this example?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Beside the obvious why not, it helps to create a nice result. In general, an example should always use different values for different parameters for readability and to avoid the usual 1*1=1 problem. In this case it also helps to underline and simplify the example about halving to make it easy to understand (only decimal digits and all power of two).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;3: How is color depth selected or derived, in general?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In what context? Basic colour depth is &lt;a href=&quot;https://en.wikibooks.org/wiki/Super_NES_Programming/Graphics_tutorial#Bit_Depths&quot; rel=&quot;nofollow noreferrer&quot;&gt;defined by the mode&lt;/a&gt; selected.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - &lt;strong&gt;Word Address&lt;/strong&gt; vs. &lt;strong&gt;Byte Address&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7165/how-does-the-snes-super-nintendo-calculate-the-address-of-a-character/7167?noredirect=1#comment19919_7167&quot;&gt;comments&lt;/a&gt; I got the impression that this is maybe hard to grasp for today's programmers, who never ever experienced anything but byte-addressable machines/CPUs. While this would be more of a topic for a (or several) separate question, lets try here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A word address numbers words as 0,1,2... A byte address does the same with bytes. A CPU with 16 bit memory and byte addressing will end up with the words 0,1,2... at address 0,2,4... In such a system, conversion between byte and word address is done by halving as one word occupies two bytes. Thus word address != address of a word. It has that been since the invention of memory addressing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or in other more 'modern' words (and I really hate to add it, as it's like explaining earth rotation using flat-earthers' vocabulary) think of memory like arrays in C. Some byte array at address 0 will number it's elements as 0,1,2... and they end up at a memory offset (address) of 0,1,2... A similar array with words will number them as well as 0,1,2... but now they end up at offset 0,2,4...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Defining such a 16 bit word, byte addressable memory in C might look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;union Memory&#xA; {&#xA;  short AsWords[4]; // The Word Memory &#xA;  char  AsBytes[8]; // overlayed with Byte Addesses&#xA; } foo;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;foo.AsBytes[4]&lt;/code&gt;will here resolve to an offset of 4, while &lt;code&gt;foo.AsWords[2]&lt;/code&gt; will also produce an offset of 4. In this example the first is a byte address and the second a word address, both resolved to a byte address withing a byte addressable word orientated memory. But a programmer using a word will always use an index &lt;em&gt;halve&lt;/em&gt; of what the bytewise memory address is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This also shows the reasoning for alignment, as with a 16 bit data path words can be read at the same timing as bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From today's perspective people often have a hard time to understand what a game changer the application of byte addressable word memory was, when Gene Amdahl made it a fundamental part of the /360 design. Today it's taken for granted that memory is seen not only as bytes, but words may reside anywhere. Completely ignoring that it took two major steps in CPU design to archive it: Byte addressing, available due a fitting ISA and misaligned data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the first is a real advancement in computer design, the latter not only required mostly useless (and back then large) hardware add-ons for minor gain, but also opened Pandora's box by encouraging to lazy programming, resulting in the need of even more hardware to cover the now common penalties associated.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-09-03T08:29:54.783" LastActivityDate="2018-09-03T08:29:54.783" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="7168" PostTypeId="1" CreationDate="2018-08-01T14:53:34.657" Score="4" ViewCount="271" Body="&lt;p&gt;There are many packages that let you use the enhanced graphics modes of the IIgs in AppleSoft BASIC. However most packages like &lt;a href=&quot;http://whatisthe2gs.apple2.org.za/iconix&quot; rel=&quot;nofollow noreferrer&quot;&gt;Iconix&lt;/a&gt; do not like &lt;a href=&quot;http://whatisthe2gs.apple2.org.za/system-6-0-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;System 6&lt;/a&gt; so they have to run off disks and not the hard drive. AppleSoft's built in graphics are quite inferior to the 320x200 and 640x200 modes the IIgs can use. 3200 color mode would be terrific for programming, but &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_16-bit_computer_hardware_palettes#Apple_IIgs&quot; rel=&quot;nofollow noreferrer&quot;&gt;320x200&lt;/a&gt; with a 16 color pallet and 640x200 dithered mode are fine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The final result should be a BASIC program launched from the Finder under System 6 with access to IIgs graphics and not restricted to running from ProDOS. I want a stable approach to graphics in AppleSoft that allows me to focus on the programming. I have a &lt;a href=&quot;http://whatisthe2gs.apple2.org.za/microdrive-ide&quot; rel=&quot;nofollow noreferrer&quot;&gt;MicroDrive IDE&lt;/a&gt; and want to launch BASIC programs from my hard disk using System 6.0.4.  What package can I use to program in AppleSoft with enhanced graphics and use my hard drive to boot System 6? &lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="175" LastEditDate="2018-08-01T16:15:45.907" LastActivityDate="2018-08-01T16:15:45.907" Title="How to use IIgs enhanced graphics modes in AppleSoft BASIC with System 6?" Tags="&lt;graphics&gt;&lt;programming&gt;&lt;hard-disk&gt;&lt;applesoft-basic&gt;&lt;apple-iigs&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7169" PostTypeId="1" AcceptedAnswerId="7170" CreationDate="2018-08-01T15:15:53.897" Score="11" ViewCount="2494" Body="&lt;p&gt;In 1975, MITS advertised the new Altair (not actually the first personal computer, but close enough that many historical accounts proclaim it as such) by mail order, and it sold very well by the standards of the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1984, Michael Dell started selling PC clones by mail order from his college dorm room, and founded a company that remains today one of the big names in the business.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the nine years between, I have found essentially no mention of anyone selling computers by mail order. There is much discussion of dealer networks e.g. Paul Terrell's Byte Shop (the first Apple dealer) and Tandy (which acted as its own dealer network with several thousand stores, helping to make the TRS-80 for some years the world's bestselling personal computer), and some of department stores e.g. Commodore's bold and surprisingly difficult move in getting Kmart to sell the Vic-20, but always brick and mortar retail. As far as the historical accounts I have read are concerned, the question of mail order sales simply does not arise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was anyone selling a significant number of computers by mail order? If not, why not?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; Raffzahn makes the excellent point that there were indeed plenty of mail order ads in the magazines of the time by small hardware companies, in many cases for computers now long forgotten. This hadn't really registered with me before, so let me rephrase my question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During those nine years, as far as I know, there were no mail order sales &lt;em&gt;of bestselling computers&lt;/em&gt;. The pattern was always that niche computers were sold by mail order, bestsellers by brick and mortar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One reason for this pattern, in one direction, was that brick and mortar dealers wanted to be selling the bestsellers, not the niche machines. Okay, that's logical enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did none of the big players supplement brick and mortar with mail-order sales? Were the extra sales (even at substantially increased profit margin) not enough to be worth alienating the dealers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did nobody between MITS and Dell make it big purely in mail-order sales? Conjecture: nothing changed after 1975; it was always the case that mail order would only get you a few thousand sales because mainstream customers were not comfortable buying expensive products that way; the big change came in the mid-eighties when the IBM PC clone industry started commoditizing computers enough that mainstream customers started feeling assured they knew in advance what they would be getting. Does that make sense?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2018-08-01T15:51:07.427" LastActivityDate="2018-08-03T19:20:52.730" Title="MITS to Dell: the mail order gap?" Tags="&lt;history&gt;" AnswerCount="6" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7170" PostTypeId="2" ParentId="7169" CreationDate="2018-08-01T15:29:18.220" Score="21" Body="&lt;p&gt;You might just want to flip up any computer magazine from that time period and you'll come across hundreds of mail order companies of different size, not to mention computer companies selling direct as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets for example open Kilobaud of February 1979 - right in the middle of your time frame. Already the very first two advertisements are for SWTP and OSI, selling their machines and addons directly. Across the magazine you'll fine many companies small or large selling machines via mail order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all, there weren't computer shops in every neighborhood during the 'early' years. They were the exception and mail order the standard way to get a machine. Next to every microcomputer manufacturer did direct mail order sales (like MITS before and Dell after).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, for most new machines it was the only way to start sales. There were no shops they could place them - keep in mind, even the big players had problems to get dealer contracts with department stores.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, flipping through this ads are a great way to discover &lt;a href=&quot;https://archive.org/stream/kilobaudmagazine-1979-02/Kilobaud_Microcomputing_1979_February#page/n109/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;forgotten machines&lt;/a&gt; which often not even made it to be talked about in magazines!&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I think the question you are looking for is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why did DELL have such a success with mail order when mail order was already around since the beginning&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it comes down to the fact that in 1984 computer stores were a common thing, and quite good in offering off-the-shelf configurations. Still, a brick and mortar shop with only local sales (even if the local area is a large city) can only supply a limited amount of configurations due storage cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mail order does have a larger catchment area - potentially the whole world, while still only needing one storage facility. This advantage has been used by others as well before. The difference now was that there was only one, rather large platform to be supported, resulting in even larger scaling effects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, Dell started out more like a brick and mortar business, by configuring PCs for other students at University of Texas at Austin and then transferred that business into general mail order. While this is like any other mail order PC shop, Dell added aggressive marketing early on to get his service known to a wider public. Even before offering their own PC designs, they advertised in many computer magazines, as well as in newspapers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, it was all about being the loudest market crier in town - and nation :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Up to this point Dell wasn't much different from others that did nationwide sales of generic PCs. Sure, the advertisements where good and worked, but so were others'. He might have vanished again a few years later as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next big change was turning into a brand &quot;manufacturer&quot;, but (almost) without development and completely without core component production. Instead of main boards or add on cards, Dell just designed cases - and even they got manufactured by contractors. Dell just configured the PCs. So unlike IBM, HP or any other big brand, he externalized (next to) all development cost, reducing the investment needed. At the core Dell still was a sales company, selling configurations of other manufacturers products with a new cover.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Their innovations were in the field of logistics, more like Amazon than IBM.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2018-08-02T00:23:47.120" LastActivityDate="2018-08-02T00:23:47.120" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7171" PostTypeId="2" ParentId="7169" CreationDate="2018-08-01T16:34:29.767" Score="10" Body="&lt;p&gt;I believe the reason you are asking this question is that you may be &lt;strong&gt;underestimating&lt;/strong&gt; the extent of the innovations in computer manufacturing and sales pioneered by Dell Inc. Dell was always envisioned as a high volume company. So, they have little if anything in common with MITS, which introduced the Altair as a low-volume niche product for hobbyists. By the time Dell was founded, IBM PC compatible computers were a well defined category of products aimed at regular consumers and businesses, and offering a great deal of customization to meet specific consumer needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mail-order sales was only the customer facing aspect of Dell. Most of the genuine innovation was in the build-to-order process. Dell reinvested all their early revenue to grow the business' capabilities in supply chain management, just-in-time procurement, customization, and fulfillment. They introduced automation in all these areas to improve production efficiency, profit margins, and customer experience. It was this massive investment and accompanying innovation that made Dell a large and successful company, not the fact that their early sales were through mail-ordering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can read much more about Dell's early history and innovation in &lt;a href=&quot;https://www.marsdd.com/mars-library/case-study-dell-distribution-and-supply-chain-innovation/&quot; rel=&quot;noreferrer&quot;&gt;this article&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-08-01T16:34:29.767" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7172" PostTypeId="2" ParentId="7169" CreationDate="2018-08-01T16:38:40.180" Score="6" Body="&lt;p&gt;A major mail-order retailer from the era was Heathkit.  They offered the:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Heathkit_H8&quot; rel=&quot;noreferrer&quot;&gt;H8&lt;/a&gt; (8080 s-100 bus, kit only) beginning 1977&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Heathkit_H8#H89&quot; rel=&quot;noreferrer&quot;&gt;H89&lt;/a&gt; (z80, kit or assembled) beginning 1978&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Heathkit_H11&quot; rel=&quot;noreferrer&quot;&gt;H11&lt;/a&gt; (DEC LSI-11, kit or assembled) beginning 1978&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;While Heathkit offered many other things besides computer-related stuff, and predated the home computer age by decades, I think it is fair to say that computer sales became a major part of their business.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding why major-name computer companies tended to avoid mail-order, I think a significant reason was their retailers did not wish to compete with their suppliers.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2018-08-01T16:38:40.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7173" PostTypeId="2" ParentId="7169" CreationDate="2018-08-01T16:43:45.543" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did nobody between MITS and Dell make it big purely in mail-order sales?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Sinclair ZX81 neatly refutes your statement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But more broadly, your claim depends entirely on your definition of &quot;big&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Certainly &lt;em&gt;lots&lt;/em&gt; of companies sold primarily or solely through mail order, and some of these are well known - Heathkit's H8, Northstar's Horizon, Comenco's Z2, IMSAI... these were all big companies (in their era) with no b-n-m presence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose you could go so far to say the same was partially true for the TRS-80, as their catalog sales was a major part of the company, in the 1970s anyway.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-08-01T16:43:45.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7175" PostTypeId="2" ParentId="7169" CreationDate="2018-08-01T18:53:58.197" Score="3" Body="&lt;p&gt;A good candidate for a mail-order computer is one that:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is cheap so people can afford to buy it sight unseen,&lt;/li&gt;&#xA;&lt;li&gt;People are already familiar with, and&lt;/li&gt;&#xA;&lt;li&gt;Is not too expensive to ship to homes (this rules out the Commodore PET!).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;These requirements favor computers like the Laser 128 clone of the Apple II built by cheap overseas labor, and the build-it-yourself-to-save-money Heathkit computers sold by a company with many loyal customers in the USA going back decades. Sears and Tandy computers which others have mentioned are also good examples for the same reasons.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-08-01T18:53:58.197" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7176" PostTypeId="2" ParentId="6792" CreationDate="2018-08-01T20:49:09.187" Score="1" Body="&lt;p&gt;There was also a program called NewsMaster that did these things:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XOwhJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XOwhJ.jpg&quot; alt=&quot;NewsMaster screen&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10266" LastEditorDisplayName="user8725" LastEditDate="2018-08-02T14:14:21.783" LastActivityDate="2018-08-02T14:14:21.783" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7177" PostTypeId="2" ParentId="6792" CreationDate="2018-08-01T21:09:12.663" Score="0" Body="&lt;p&gt;The program I used the most was called &lt;strong&gt;&lt;em&gt;Fontasy&lt;/em&gt;&lt;/strong&gt; but I do not remember any of the features other than it did very nice cards, banners and posters.&lt;/p&gt;&#xA;" OwnerUserId="7813" LastActivityDate="2018-08-01T21:09:12.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7178" PostTypeId="2" ParentId="2616" CreationDate="2018-08-02T16:53:28.257" Score="0" Body="&lt;p&gt;Interesting enough, that ARM, while not being the first, has kind of exposed pipeline. Specifically, ARMv3 32bit instructions that use contents of R15 aka PC, always have it incremented by 8 from the address of the instruction. In earliest ARM architecture revisions (like the one used in ARM7TDMI or earlier) that probably was an exposure of pipeline (in a way), but later certainly became just a feature emulated for compatibility.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-08-02T16:53:28.257" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7179" PostTypeId="2" ParentId="2616" CreationDate="2018-08-02T17:25:06.533" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The MIPS architecture was introduced in 1981&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Are you sure? To my information the first MIPS implementation was of &lt;strong&gt;1985&lt;/strong&gt; with the &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_MIPS_architecture_processors&quot; rel=&quot;nofollow noreferrer&quot;&gt;R2000&lt;/a&gt;. Of course, the project did start before (in 1981), but so did others.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It is my understanding that VLIW architectures which also have an exposed pipeline, came later. Is that true?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As far as I can tell, yes.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was MIPS really the first one?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. For (modern) microprocessors &lt;a href=&quot;https://en.wikipedia.org/wiki/Berkeley_RISC#RISC_I&quot; rel=&quot;nofollow noreferrer&quot;&gt;Berkeley RISC I&lt;/a&gt; (the foundation of later SPARC) was 2-3 years ahead of MIPS, as their first working chips came in &lt;strong&gt;1982&lt;/strong&gt;. Berkeley RISC did not only coin the name RISC (and vanished somewhat behind after it became the standard term), but also featured a &lt;a href=&quot;https://en.wikipedia.org/wiki/Delay_slot&quot; rel=&quot;nofollow noreferrer&quot;&gt;branch delay slot&lt;/a&gt; exposing the pipeline when branches where about. Here the compiler (or programmer) would place the last instruction to be done before a branch is taken &lt;em&gt;after&lt;/em&gt; that branch.&lt;/p&gt;&#xA;&lt;p&gt;But then there are minis, especially the IBM 801 (*1), which was defined in 1976.  It had it's first working implementation in 1978, first commercial usage in &lt;strong&gt;1980&lt;/strong&gt; and first single chip implementation (as &lt;a href=&quot;https://en.wikipedia.org/wiki/ROMP&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROMP&lt;/a&gt;) in 1981 (*2). Looking at their &lt;a href=&quot;http://bitsavers.org/pdf/ibm/system801/The_801_Minicomputer_an_Overview_Sep76.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1976 overview paper&lt;/a&gt; shows that they already incorporated almost every aspect what got 'invented' half a decade later as RISC. Including a separate set of branch instructions, called &lt;em&gt;branch and execute&lt;/em&gt; (*3), where the next instruction in sequence after a branch will be executed anyway - today called a branch delay slot.&lt;/p&gt;&#xA;&lt;p&gt;As of my understanding that makes the &lt;strong&gt;801 implementation of 1980 the first&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - It's debatable if that architecture really is a mini, as it is not only very /370ish, but also has been used as microcode engine for /370 implementations.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Fodder for what-if-freaks: What if IBM had used in 1981 their own 32 bit ROMP instead of Intel's 8088 for their PC (While also making the chip available to other manufacturers) :))&lt;/p&gt;&#xA;&lt;p&gt;*3 - By having two sets of branch instructions they even avoided the need of inserting a NOP if there was no usable instruction - like with two successive branches. In reality it was more like a bit in the branch opcode telling if the next instruction is executed or a virtual NOP is inserted.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-26T10:31:49.470" LastActivityDate="2021-02-26T10:31:49.470" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="7180" PostTypeId="2" ParentId="7169" CreationDate="2018-08-03T15:14:59.440" Score="2" Body="&lt;p&gt;Apart from the fact that I think your question is based on false assumptions (see some comments, Sinclair and Apple are good counter-examples, and AFAIR even the IBM PC Junior was sold via mail order), I think you fail to look into the &lt;em&gt;reasons&lt;/em&gt; companies had behind offering products by mail order - And those were entirely different between MITS and Dell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MITS was offering an absolute niche product to a small number of computer enthusiasts/hobbyists (just as Sinclair did with their home computers initially a few years later) where the volume really didn't justify a dealer network (that needs quite a bit of time anyhow) and a &quot;classic&quot; distribution channel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dell, on the other hand, offered mail order to the end customer to &lt;em&gt;eliminate&lt;/em&gt; dealership cost and margins from the consumer price when computers already were a mass-market product.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The (home) computer market had massively changed in the time span between MITS and Dell from a specialized, nerdy product with a very limited audience to a mass-market commodity every household had to have one of. &lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-08-03T19:20:52.730" LastActivityDate="2018-08-03T19:20:52.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7181" PostTypeId="1" AcceptedAnswerId="7185" CreationDate="2018-08-03T16:55:14.227" Score="23" ViewCount="3764" Body="&lt;p&gt;I had to wait about 5 years before hard drives (HDs) became affordable enough to begin moving off of floppies. During this time, I remember my desire for an HD being based on &lt;strong&gt;convenience&lt;/strong&gt;. All the software I used was designed to run fine from floppies, but an HD offered much faster loading plus access to all those applications without swapping floppy disks and (sometimes) rebooting. The combined speed and ready access translated to the convenience that made an HD highly desirable for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But many mainstream computer users weren't focused on running lots of different application like I was. They just needed one or two applications that were critical. The implication being that unless those applications required an HD, the HD would not be worth the significant added expense. I'd like to know what early, popular PC applications fell into the category of requiring an HD, based on the sheer size of the code and/or data they needed? Also is there evidence of any application being a &quot;market driver&quot; in the adoption of HDs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Out of the triad of word processing, spreadsheet, and database as the early &quot;sweet-spot&quot; for serious PC applications, it seems obvious that a database would be the most likely to require and benefit from an HD. So, I'd ideally like an answer that challenges or confirms that assumption by citing specific popular applications of the time.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="535" LastEditDate="2018-08-04T07:06:00.793" LastActivityDate="2018-08-21T17:11:12.000" Title="What were the early PC applications requiring a hard disk?" Tags="&lt;ibm-pc&gt;&lt;hard-disk&gt;" AnswerCount="8" CommentCount="15" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7182" PostTypeId="2" ParentId="7181" CreationDate="2018-08-03T18:02:24.247" Score="21" Body="&lt;p&gt;I cannot state for certain that it &lt;strong&gt;required&lt;/strong&gt; a hard disk, but using &lt;a href=&quot;https://en.wikipedia.org/wiki/AutoCAD&quot; rel=&quot;noreferrer&quot;&gt;AutoCAD&lt;/a&gt; (v1 released Dec.82) without one would have been awkward to well-nigh unbearable.  The program itself was huge for the time and used countless data files.  I can't imagine running it from floppy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if v1.0 &lt;em&gt;could&lt;/em&gt; do so, by the time v2 or v3 was released HD had to be required.  It pushed the PC to its limits, demanding &quot;high-res&quot; graphics and RAM beyond 640 kbytes.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4335" LastEditDate="2018-08-03T20:44:11.290" LastActivityDate="2018-08-03T20:44:11.290" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7183" PostTypeId="2" ParentId="7181" CreationDate="2018-08-03T18:33:01.753" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PC-File&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-File III&lt;/a&gt; is a database that works well even without a hard drive. I used to run it from a 1.2MB high density diskette.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know of any consumer applications that required a hard drive back then, only specialty programs like AutoCAD as @RichF mentioned. Windows 3.0 is probably what really drove the home market for hard drives, and what drove the market for Windows 3.0 was asked and answered in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2386/what-key-factor-led-to-the-sudden-commercial-success-of-ms-windows-with-v3-0&quot;&gt;another question&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-08-03T22:25:14.567" LastActivityDate="2018-08-03T22:25:14.567" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7184" PostTypeId="2" ParentId="7181" CreationDate="2018-08-03T19:00:56.087" Score="6" Body="&lt;p&gt;Like RichF, I have a hard time to remember any that &lt;strong&gt;required&lt;/strong&gt; a hard disk. On the other hand, it was conveniant to have a hard disk already early on. Swaping floppies, looking what to boot an where to put data might be a no-brainer for a tech nerd, Ordinary users, even if 'only' typing letters will get anoyed soon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example I remember an architecture company buying PC's with harddisk and &lt;a href=&quot;https://en.wikipedia.org/wiki/Bernoulli_Box&quot; rel=&quot;noreferrer&quot;&gt;Bernoulli drives&lt;/a&gt; already in 1982. The harddisk was ment to cover all software plus generic data, while the 5 MiB bernoulli disks did take all documents for a single project. The whole setup worked much like HD plus floppies, except the floppies being much larger (5 MiB vs. 360 KiB) and faster :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in this case it was less about the amount of data, as a handy process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While above is a well defined and good worked out use case (multipe PCs to share data collections on a project level), the same urge for steamlined data handling can be found in many businesses. The need for a harddisk is rarely about programs but always about &lt;em&gt;real world application&lt;/em&gt; thereof and the data involved/produced. Not some fancy data, but everyday stuff, just a lot thereof.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Engineers, architects, surveyors, assessors and many more needto handle quite large documents as part of their daily business. Servic specifications for a multi story building can easy count 500 and more pages. While spliting them up into a multitude of floppies is doable, it does take time thus can directly be calculated as valuable employe time - not to mention time lost by mixing up disks, one part exeding (again) a single floppy and all the issues with backup copies. These documents are the core business case for such companies, making every possible step to secure them important and cheap compared to what a lost section or dokument might mean.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Spending a few grands on a hard disk is an extreme cheap measure to improve productivity and security. Or to use a well known phrase: It's about the data, stupid.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-08-03T19:46:21.193" LastActivityDate="2018-08-03T19:46:21.193" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7185" PostTypeId="2" ParentId="7181" CreationDate="2018-08-03T21:37:29.533" Score="16" Body="&lt;p&gt;I started working for a newly-certified IBM PC dealer in the UK at the end of 1984. IBM thought we would be selling about 50% twin-floppy PC (PCG) and 50% XT with 10MB hard drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, I'm not sure we ever sold a PCG. Perhaps it's because we were focused on accounting and payroll applications for small businesses - not something you would consider with 2 x 360kB drives where the programs were about 4 or 5 diskettes and the data about the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We also sold a cheaper CP/M-86 machine and had some twin-floppy users who just did word processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time in the UK, a PC was not something you would buy other than for business - there were other architectures which were much better value for money. It was not hard to convince businesses of the value of a hard drive.&lt;/p&gt;&#xA;" OwnerUserId="4160" LastEditorUserId="4160" LastEditDate="2018-08-10T05:48:37.960" LastActivityDate="2018-08-10T05:48:37.960" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7186" PostTypeId="2" ParentId="7181" CreationDate="2018-08-03T23:08:13.600" Score="11" Body="&lt;p&gt;You can check the &lt;a href=&quot;https://ia601708.us.archive.org/7/items/Whole_Earth_Software_Catalog_1984_Point/Whole_Earth_Software_Catalog_1984_Point.pdf&quot; rel=&quot;noreferrer&quot;&gt;Whole Earth Software Catalog&lt;/a&gt;; I remember it listed a few apps as requiring hard disk. It came out in 1984, which would have been pretty early. For example DESQ does (pg 114). It's not a database btw, but a window switcher/proto-gui type of thing. Real World Accounting on pg. 103 is another, and there's even a program called Great Plains Hard Disk Accounting on the next page. It's for the Apple III though. &lt;/p&gt;&#xA;" OwnerUserId="10273" LastEditorUserId="10273" LastEditDate="2018-08-04T00:22:42.283" LastActivityDate="2018-08-04T00:22:42.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7187" PostTypeId="2" ParentId="7008" CreationDate="2018-08-03T23:58:01.327" Score="0" Body="&lt;p&gt;The Apple III was specifically marketed as the business Apple and IBM competitor.&lt;/p&gt;&#xA;" OwnerUserId="10273" LastActivityDate="2018-08-03T23:58:01.327" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7188" PostTypeId="2" ParentId="7156" CreationDate="2018-08-04T17:52:28.817" Score="5" Body="&lt;p&gt;The IWM chip, used in the prototype Mac with double sided &quot;Twiggy&quot; drives, and later in the original production Mac 128k with Sony 3.5&quot; diskette drives, is basically Woz's original disk controller design (converted by Wendell Sander and Bob Bailey to NMOS), with the addition of buffer registers to allow the processor to run a bit more asynchronously.  But, except for not having to run (* almost) synchronous with the disk data rate, the 68k CPU did all the raw data decoding (GCR nibbles to bytes, etc.) and head stepping in software, very similar to the 6502 code in the Apple II (DOS) RWTS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(* the 6502 in the Apple II did not actually run purely clock synchronous with an absolutely periodic disk data rate, but jittered a half clock every scan line to maintain pseudo-NTSC color timing, worsening the timing error budget by a fraction of a nibble time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga 1000 also did most of its disk data decoding and head stepping in software on the main CPU, but had the addition of DMA, and enough built-in timing to do MFM as well as GCR encoding/decoding.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2018-08-05T13:57:42.510" LastActivityDate="2018-08-05T13:57:42.510" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7189" PostTypeId="2" ParentId="7156" CreationDate="2018-08-05T02:59:27.933" Score="6" Body="&lt;p&gt;The Disk II controller in its original is effectively limited to the Disk II because of the connections offered; in particular it expects direct control of a four-phase stepper motor whereas the standard Shugart bus exposes only step and direction signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was also explicitly limited in terms of density, and effectively limited in terms of potential encoding unless you had a much faster processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Density&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The state machine which effects the drive's PLL is tuned to the GCR bit rate, which is the same as that of single density FM recording. So when reading you will not be able to detect flux transitions at a greater precision than that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, the output rate is fixed. Not only is it fixed, but it's so fixed that the state machine and the CPU each take it as so implicit that the Disk II doesn't look for explicit signalling from the CPU for each new byte of output: it assumes it knows exactly when the CPU will produce them and just samples the data lines then, without inspection of the CPU's control lines. You'd better be in the prescribed-length loop with properly-placed &lt;code&gt;STA&lt;/code&gt;s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Encodings&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The limiting rule introduced by the Disk II (rather than occurring unavoidably as a result of analogue media) is that all 8-window blocks of flux transitions must begin with a transition at the top. The state machine is heavily oriented around that scheme: it'll take a brief pause every time a 1 reaches the top of its shift register, to make sure the CPU doesn't miss the event, and clear the thing afterwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's still pretty broad, permitting both of Apple's GCR encodings and single density frequency modulation, but it's insufficient for double density MFM, even if the clock rate weren't wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A much faster processor might be able to learn more from watching the shift register as it accumulates its result, but it wouldn't be able to fix the controller shift rate issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Addendum&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As noted above, Apple developed further iterations of disk controller to broaden their support; the original certainly wasn't a dead end. But it shouldn't be considered as generic as something like the Amiga. The need to keep in sync with a processor adds additional constraints.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-08-05T02:59:27.933" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="7190" PostTypeId="1" AcceptedAnswerId="7194" CreationDate="2018-08-05T09:31:21.873" Score="9" ViewCount="869" Body="&lt;p&gt;Can anyone verify or correct my memory here?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long ago, I had access to a Commodore PET which I think had 8kB of memory.  Also slightly less long ago, I had a Commodore 64 with its &quot;elephatine&quot; 64kB.  Of course, not all of that was easily accesible through Basic but that is not the subject of this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My memory is that the O/S (for want of a better name) occupied the lowest memory followed by the code of your Basic program.  Variables were allocated at the highest available address.  So, as you wrote longer programs and used more variables, the two converged in the middle.  I don't recall any protection, eventually the two would meet and crazy things would happen.&lt;/p&gt;&#xA;" OwnerUserId="7805" LastEditorUserId="7208" LastEditDate="2019-07-26T04:59:47.363" LastActivityDate="2019-07-26T04:59:47.363" Title="Early BASIC memory management" Tags="&lt;memory&gt;&lt;basic&gt;&lt;commodore&gt;&lt;microsoft-basic&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7191" PostTypeId="2" ParentId="7190" CreationDate="2018-08-05T12:54:51.717" Score="2" Body="&lt;p&gt;I never spent much time using MS BASIC like the commodore systems, but for the Sinclair systems I'm most familiar with your description is essentially correct, except that I believe variables were stored immediately after the program and were moved whenever the program length changed. The machine code stack was at the top of memory (growing down from an address that could be controlled with the &lt;code&gt;CLEAR&lt;/code&gt; statement), and that could corrupt the variables if it got too large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However for a 6502 system, the machine code stack is unlikely to be a source of corruption - the 6502 stack can only exist in the 100-1FF hex range so is always below the location of any BASIC code in memory.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-08-06T08:05:17.257" LastActivityDate="2018-08-06T08:05:17.257" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7193" PostTypeId="2" ParentId="7190" CreationDate="2018-08-05T19:44:18.180" Score="6" Body="&lt;p&gt;What protection there was depended on whose BASIC interpreter you were running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applesoft BASIC had a check surrounding most things that pushed the limits of what had been allocated and would trigger an &lt;code&gt;OUT OF MEMORY&lt;/code&gt; error if there was going to be a collision.  You can see this in action in &lt;a href=&quot;https://github.com/cmosher01/Apple-II-Source/blob/master/src/system/applesoft/applesoft.m4&quot; rel=&quot;nofollow noreferrer&quot;&gt;the source code&lt;/a&gt; by looking at the code preceding jumps to &lt;code&gt;MEMERR&lt;/code&gt; and calls to &lt;code&gt;CHKMEM&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A quick look through &lt;a href=&quot;https://github.com/mist64/cbmsrc/blob/master/BASIC_PET2001/M6502.MAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;the PET BASIC sources&lt;/a&gt; with some help from a commenter reveals that it does similar checks for &lt;code&gt;FOR&lt;/code&gt; loops, &lt;code&gt;GOSUB&lt;/code&gt; and in the formula evaluator.&lt;/p&gt;&#xA;" OwnerUserId="749" LastEditorUserId="749" LastEditDate="2018-08-05T22:41:54.887" LastActivityDate="2018-08-05T22:41:54.887" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7194" PostTypeId="2" ParentId="7190" CreationDate="2018-08-05T20:19:08.400" Score="11" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;My memory is that the O/S (for want of a better name) occupied the lowest memory followed by the code of your Basic program. Variables were allocated at the highest available address. So, as you wrote longer programs and used more variables, the two converged in the middle&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You're right - well, BASICly (SCNR).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I don't recall any protection,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, there is. If variables and program collide an &lt;em&gt;'out of memory error'&lt;/em&gt; will occure.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;eventually the two would meet and crazy things would happen.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, there are no crazy things to happen. Or better, they only do if programmers tried to outsmart the interpreter and failed.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long story:&lt;/h2&gt;&#xA;&lt;p&gt;(Disclaimer: This is mainly about MS-Basics, as used for the Commodores, but most other behave similar)&lt;/p&gt;&#xA;&lt;p&gt;To understand the mechanics it's useful to differentiate memory management between program editing and runtime. And what's free memory means during either. Also that this is only about the memory available to BASIC (*1), not total system memory.&lt;/p&gt;&#xA;&lt;h2&gt;Case A) Editing.&lt;/h2&gt;&#xA;&lt;p&gt;Here the whole memory is used by the editor to compose the program in tokenized form. A line is entered into the line buffer (*2) and from there handed to be converted to tokenized line. If there's enough room to accommodate the line, it will be entered, otherwise an error is signalled. During editing no variables are stored. Whenever editing happens, existing variables are usually destroyed.&lt;/p&gt;&#xA;&lt;h2&gt;Case B) Runtime&lt;/h2&gt;&#xA;&lt;p&gt;Basic creates variables only dynamic during runtime and starts out with no variable memory assigned. Whenever a variable gets assigned (used) first time according space is reserved. If no space can be allocated, again an error (&lt;em&gt;out of memory&lt;/em&gt;) is signalled and the program is halted.&lt;/p&gt;&#xA;&lt;p&gt;During runtime the program text is considered static, which allows BASIC to handle the free area (between the last stored BASIC line and &lt;code&gt;highmem&lt;/code&gt;) from both 'ends'. Numeric variables and arrays grow from bottom up, while strings grow top down. Since this is done dynamic and strings changing in length may lead to free areas inbetween used strings, the runtime will, when running out of memory between the two blocks, first look to compress the string area to regain this space (*3), and, if unsuccessful, it'll break with an &lt;em&gt;out of memory error&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;Special Case of a Stopped Program&lt;/h2&gt;&#xA;&lt;p&gt;When a program gets stopped, either through a STOP command, or any error, it stays with the actual memory configuration regarding program and variables intact, allowing to inspect either. If the break was due a STOP or an recoverable error its execution might be continued via CONT. Even after changing some variables. In contrast, changing any part of the program will disable this due destruction of the variable tables and/or pointers therefore. A CONT command will usually now result in a &lt;em&gt;can't continue error&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;While it is possible to write a program so large that there is no room left vor even a single variable, BASIC is safe against collision between program and variable data.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Remarks&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Programs that use much of the space and do a lot of string handling will constantly run into garbage collection and slow down a lot. If they run at all.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It is one of the basic problems with BASIC variable handling that variables stay present after invocation until the end of a program run. So it's rather helpful to reuse variable the same variables as often as possible (i, j, k and so on) in different parts of a program - which then of course adds complexity and potential conflicts.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Original MS-BASIC garbage collection is rather poorly scaling on large programs, thus improved string handlers where great tools to add. Other BASICs did start out with already way improved garbage collectors - or even variable handling that avoided much need for garbage collection by producing less pollution than MS BASICS did.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Other BASICs also added mechanics that did allow to change program text during a break so a continuation was possible even after editing an offending line.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Available to BASIC is not the same as accessible by a basic program. Of course a program written in BASIC can access all memory via certain functions (like PEEK or POKE), but there we talk about what BASIC as an application accesses. Here (free) memory is one chunk that contains all program and variables, growing from either end, much like described in the question.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Residing outside the memory area. Like at $200 for an Apple or Commodore PET (only 80 bytes max for the PET, 250 for the Apple)&lt;/p&gt;&#xA;&lt;p&gt;*3 - Called a &lt;a href=&quot;https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)#BASIC&quot; rel=&quot;noreferrer&quot;&gt;Garbage Collection&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-23T20:54:03.257" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7195" PostTypeId="2" ParentId="7149" CreationDate="2018-08-06T01:02:28.047" Score="0" Body="&lt;p&gt;Try running memtest86. Also upgrade your BIOS if there's one available for your motherboard. And disconnect/remove anything you don't need to install Windows 98.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-08-06T01:02:28.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7197" PostTypeId="1" AcceptedAnswerId="7199" CreationDate="2018-08-06T12:24:39.133" Score="66" ViewCount="14798" Body="&lt;p&gt;Thinking about machines such as the PDP-7, PDP-10, CDC-160 and so on&lt;sup&gt;1&lt;/sup&gt;, these are machines which do not have a stack pointer which can quickly and easily change to point to a new stack frame, like the x86 or ARM machines we have today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C standard does not say anything about a stack, since C actually doesn't need one. I can see that local variables may &lt;em&gt;in most cases&lt;/em&gt; be placed somewhere in memory for most functions. The functions for which that doesn't work are the recursive ones and the mutually recursive ones, (which cannot be converted to iterative routines by an optimisation stage). But the linker won't know anything about that, will it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is a known compiler which does anything other than use or implement a stack, my question is to see a description of what it does &quot;instead&quot;, ideally with a link to source code.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1: Yes, the Parallax Propeller also fits in this category of machines, and I'm sure many microcontrollers do, and so this question is not purely about Retrocomputing. But still I think the question belongs here because early C porting efforts will have the answer to the question. &lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-11-09T09:10:51.740" Title="How was C ported to architectures that had no hardware stack?" Tags="&lt;compilers&gt;" AnswerCount="10" CommentCount="3" FavoriteCount="22" ContentLicense="CC BY-SA 4.0" />
  <row Id="7198" PostTypeId="2" ParentId="7197" CreationDate="2018-08-06T15:02:39.523" Score="6" Body="&lt;p&gt;A program stack is a very simple data structure that requires only&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;indexed or indirect memory addressing (pointers)&lt;/li&gt;&#xA;&lt;li&gt;indirect or computed jumps&lt;/li&gt;&#xA;&lt;li&gt;a designated register or global variable holding the stack pointer/index&lt;/li&gt;&#xA;&lt;li&gt;basic arithmetic, i.e. increment and decrement operations&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pushing a value means decrement the index, then store.&lt;/li&gt;&#xA;&lt;li&gt;Popping is loading a value at the index, then increment the index.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Of course one can swap decrement and increment to have an upward growing stack)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Calling a subroutine is pushing the return address (program counter plus some offset). If there is no other way to access the PC, the compiler could emit a direct register load followed by a push, and the linker can fix up the loaded value with the return address.&lt;/li&gt;&#xA;&lt;li&gt;Returning from a subroutine is popping the return address from the stack, and jump to it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Modern processors tend to implement these operations in single instructions simply because they are often used together, and doing so would save code space and speed up execution.&lt;/p&gt;&#xA;" OwnerUserId="348" LastActivityDate="2018-08-06T15:02:39.523" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7199" PostTypeId="2" ParentId="7197" CreationDate="2018-08-06T15:03:29.840" Score="74" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How was C ported to architectures that had no hardware stack?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Simply by implementing a dynamic memory management for subroutine calling, parameter passing and local memory.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If there is a known compiler which does anything other than use or implement a stack,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Now this is a completely different question than the one made in the headline&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Implementing a stack isn't anything special to porting C, nor is a stack at all an invention of C. C inherited its usage from &lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL&quot; rel=&quot;noreferrer&quot;&gt;ALGOL&lt;/a&gt;, which was first implemented (*1) by &lt;a href=&quot;https://en.wikipedia.org/wiki/Friedrich_L._Bauer&quot; rel=&quot;noreferrer&quot;&gt;Friedrich Bauer&lt;/a&gt; and Klaus Samelson (among others) - the same men who 'invented' the &lt;a href=&quot;https://en.wikipedia.org/wiki/Stack_(abstract_data_type)&quot; rel=&quot;noreferrer&quot;&gt;stack&lt;/a&gt; in 1955 (*2) and got a related patent in 1957.&lt;/p&gt;&#xA;&lt;p&gt;A CPU stack as we know it today (and is used by C) is just a very primitive implementation of the stack principle defined by them. It's a variant optimized for subroutine return address handling - not necessarily good for parameter passing or local variables.&lt;/p&gt;&#xA;&lt;p&gt;All languages that allow local variables and/or reentrant subroutine calling (*3) use some form of stack (*4). This includes such dinosaurs as Fortran or COBOL (*5). Bauer was eventually the most influential single person in early compiler development, writing several papers that defined the foundation for almost every language developed thereafter.&lt;/p&gt;&#xA;&lt;p&gt;In the beginning the stack was mainly seen as a software issue: a rather complex data structure that needs to suit the language, nothing to be supplied by the hardware. How much this is true can be illuminated by the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360&quot; rel=&quot;noreferrer&quot;&gt;/360&lt;/a&gt; design. While designed entirely after the stack had been introduced in programming languages and finished in 1965, it does not feature a stack pointer or any auto-indexing instructions that could be used for a stack. The hardware developers didn't think it would be of any good to implement such, especially as it would have been a quite complex instruction (*6), considering the different ways stacks were handled by different languages.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;my question is to see a description of what it does &amp;quot;instead&amp;quot;, ideally with a link to source code.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In addition, focusing on the stack here is in fact not just about the data structure, but the wider area of &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Calling_convention&quot; rel=&quot;noreferrer&quot;&gt;calling conventions&lt;/a&gt;&lt;/em&gt;. So let's split this up a bit between storage and parameter passing.&lt;/p&gt;&#xA;&lt;p&gt;The /360 is a prime example for a widely used architecture without, so let's use it.&lt;/p&gt;&#xA;&lt;h2&gt;Local Storage for Register Saving and Variables.&lt;/h2&gt;&#xA;&lt;h3&gt;Static Storage&lt;/h3&gt;&#xA;&lt;p&gt;The closest that comes to an 'instead' are maybe calling convention used on IBM /360. They were ubiquitous and survived with assembler code way into the 1980s.&lt;/p&gt;&#xA;&lt;p&gt;Here each subroutine also had a piece of private memory where all register content of the caller (*7) as well as local variables were stored. The register storage area was traditionally called &lt;code&gt;SAVEAREA&lt;/code&gt;. There was no separate handling of the return address, as it is stored in one of the /360 registers. On return the registers were restored and program flow was transferred back to the caller.  As a side effect, in these implementations all local variables are static and available for the next program run.&lt;/p&gt;&#xA;&lt;h3&gt;Stack Oriented Storage&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;(To understand this, it is useful to remember that the narrowed down version of a hardware supported word (or byte) orientated stack is just a special case of the general definition.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Another, more elaborated was the usage of a stack. For example, the COLUMBUS implementation (*8). Here a register, usually &lt;code&gt;R13&lt;/code&gt;, called &lt;code&gt;R@STACK&lt;/code&gt;, was pointing to the frame of the actual nesting level. It had to be word aligned (*9). The first (lowest) 16 words (64 bytes) where kept free as storage for the register set of the next level, again called &lt;code&gt;SAVEAREA&lt;/code&gt;, while everything above was used for local variables (*10). The stack was handled by the callee, not the caller. Thus a subroutine (function) call was simple:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;L    R15,=V(FUBAR)           * Linkable address of the function to be called&#xA;BALR R14,R15                 * Subroutine call (*11)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The subroutine's entry code depended on the way stack underflow was handled. For this example we assume the usage of guard pages (*12) to issue an addressing error when exceeding the available memory. So everything to be done is saving the caller's register content and establishing a new stack frame:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;STM  R14,R13,0(R@STACK)      * Store all registers in the save area (At R13)&#xA;SH   R@STACK,=Y(LLOCAL+64)   * Move the stack register down the the amount&#xA;                             * needed local storage plus room for a new SAVEAREA&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now the subroutine follows.&lt;/p&gt;&#xA;&lt;p&gt;At the end, all cleanup is done automagically by restoring the registers of the caller:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LM  R14,R13,LLOCAL+64(R13)   * Restore registers (*13)&#xA;BR  R14                      * And return&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And we're back.&lt;/p&gt;&#xA;&lt;h2&gt;Parameter Passing&lt;/h2&gt;&#xA;&lt;h3&gt;Static Procedures&lt;/h3&gt;&#xA;&lt;p&gt;Conventions for parameter passing and return codes where rather sparse on this and next to every program made up their own variations. In general R0 and R1 where used for parameter passing, often pointing to parameter blocks (*14), then again it was quite common to have a different list of parameters loaded into many registers with no structure at all.&lt;/p&gt;&#xA;&lt;p&gt;Similar, there were no conventions about parameter returns. Often R15 was used, but not really consistent.&lt;/p&gt;&#xA;&lt;h3&gt;Dynamic, Stack Using&lt;/h3&gt;&#xA;&lt;p&gt;While the COLUMBUS package did introduce a stack to assembler (and other languages), its calling convention was not necessarily stack based. In general, parameters where passed to a function as a memory reference. It was up to the programmer to build up the parameter list (*15), and pass its address in &lt;code&gt;R1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;L     R1,PARLIST_FOR_FUBAR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The called function now can move it wherever needed or address the parameters relative to &lt;code&gt;R1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Much like the stack frame itself, the parameter list was free form. If it was dynamically build, one would usually reserve some stack space (local variable) to hold it. If static, it could as well be located in some constant area (unless it includes a return value). Or as a combination of both - having a preformatted list in a constant area and move it over to the stack when needed and modified before calling&lt;/p&gt;&#xA;&lt;p&gt;Not relying on a push/pop mechanic offered a lot more flexibility and performance. In many function calls several, or maybe even all parameters are constant. With preformatted parameter blocks, only real variable parameters need to be stored at their position, reducing the amount of needed instructions thus runtime. The most high performance instruction is still one that doesn't get executed at all :))&lt;/p&gt;&#xA;&lt;p&gt;If the function was supposed to give a return code, this had to end in &lt;code&gt;R15&lt;/code&gt; of the caller - which was simply done by storing the return code into the save location of &lt;code&gt;R15&lt;/code&gt; within the &lt;code&gt;SAVEAREA&lt;/code&gt;. It's like having an automatic declared local return code variable that can be manupulated thruout the function and will be automatic loaded on return without any additional space requirement or  runtime cost :=)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Remarks:&lt;/p&gt;&#xA;&lt;p&gt;In real programming the assembly programmer never touched these instructions, as all was covered in macros. A program's structure looked more like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;@ENTR TYPE=M,NAME=MAIN&#xA;...&#xA;@PASS NAME=FUBAR,PLIST=(FCB,RECORD)&#xA;@IF   NE&#xA;LTR   R15,R15         * Return Code Not Zero?&#xA;@THEN&#xA;@EXIT RC=#UNSATISFIED * Finish Program with Return Code UNSATISFIED&#xA;@BEND&#xA;...&#xA;@EXIT RC=#HAPPYENDING * Finish Program with Return Code HAPPYENDING&#xA;@END&#xA;&#xA;&#xA;@ENTR TYPE=L,NAME=FUBAR,PLIST=(FCB,RECORD)&#xA;...&#xA;(do whatever needed with FCB and RECORD)&#xA;...&#xA;@EXIT RC=0            * Finish Function with Return Code Zero&#xA;@END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;And yes, that's assembly language - real one that is :)))&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - First named ZMMD on a Zuse Z22 in 1958&lt;/p&gt;&#xA;&lt;p&gt;*2 - Back then called &lt;em&gt;Kellerspeicher&lt;/em&gt;, which may be literally translated as &lt;em&gt;basement-storage&lt;/em&gt;. I always guess an American would have called it rather &lt;em&gt;attic-storage&lt;/em&gt; as they fill the same niche in the US, where basements are way less common.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Meaning the same subroutine can be called more than once without prior exiting it.&lt;/p&gt;&#xA;&lt;p&gt;*4 - With only static variables and non-reentrant calling conventions it is possible to come up with calling conventions using static memory. Here each subroutine gets its own memory to save registers and handle local variables - usually as part of the program memory, right after the code. Which is how FORTRAN or COBOL started out, before quite early switching for stack usage.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Around 1980 Siemens implemented two different sets of stack instructions in their /370 compatible mainframes (X-CPU). Nothing like a simple wordwise PUSH/PULL and one of them more like hardware implementations of linked list.&lt;/p&gt;&#xA;&lt;p&gt;*6 - As comments by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/588/james-large&quot;&gt;James Large&lt;/a&gt; and &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4345/t-e-d&quot;&gt;T.E.D.&lt;/a&gt; have underlined, the situation is a bit more complex, especially with FORTRAN. Recursion and thus reentrant enabled functions and non static local variables (i.e.on a stack) where not part of the language definition until FORTRAN 90 came along. In fact, many programs did rely on function variables to be static between calls. FORTRAN further issued a compile time error if a function was called within itself.&lt;/p&gt;&#xA;&lt;p&gt;But even before FORTRAN 90 there were compilers that did allow recursion and dynamic allocated variable space. Just not as standard.&lt;/p&gt;&#xA;&lt;p&gt;Then again, at least since FORTRAN 77, recursion was possible by using function pointers. Here the compiler couldn't check the calling tree and no run time checks did hinder the usage. I have a bookmark of a &lt;a href=&quot;https://sites.esm.psu.edu/%7Eajm138/fortranexamples.html&quot; rel=&quot;noreferrer&quot;&gt;nice page describing&lt;/a&gt; how it was done and what a programmer had to keep in mind.&lt;/p&gt;&#xA;&lt;p&gt;*7 - At least the ones that were to be overwritten.&lt;/p&gt;&#xA;&lt;p&gt;*8 - There were others - after all, software is ... well ... soft and allows many ways of implementation.&lt;/p&gt;&#xA;&lt;p&gt;*9 - At least. Aligning to doublewords of better was standard - and there's a nice story how alignment here did improve performance in a macroscopic way - but that's a different story.&lt;/p&gt;&#xA;&lt;p&gt;*10 - Depending on the configuration another 32 bytes were reserved for debugging information. In this case the entry consisted of a runtime call where frame information was checked, the new frame was build and debug information like the name of the called function was stored in the additional fields. Having function names as readable EBCDIC at the begin of each stack frame was just great when reading a dump.&lt;/p&gt;&#xA;&lt;p&gt;We had this feature enabled by default, as it also allows a function to return to some known caller within the calling sequence, bypassing all intermediate ones. Extremely handy in error handling. That way, one doesn't have to schlep some error from a function way down through all the whole calling sequence, with (more or less) specific error handling in each of them.&lt;/p&gt;&#xA;&lt;p&gt;*11 - Well, &lt;code&gt;BAL R15,FUBAR&lt;/code&gt; could as well, if FUBAR is within the address range of the current module. In everything but small demo programs it isn't.&lt;/p&gt;&#xA;&lt;p&gt;*12 - That's simply one read protected page above and below the available stack page. Accessing this as in case of over- or underrun will result in an address violation which in turn can be handles by the runtime according to what is intended. Like extending the stack memory, or cancelling the program run, or whatsoever.&lt;/p&gt;&#xA;&lt;p&gt;*13 - This implementation allows only a maximum stack size of 4 KiB minus 64 bytes. Which is natural as stack addressing based on the stack register can only address 4 KiB anyway. There are other implementations that allow more stack, but then again will also require more complex addressing. If a procedure needs that much memory it is more useful to get it from the heap anyway.&lt;/p&gt;&#xA;&lt;p&gt;*14 - Like having &lt;code&gt;R0&lt;/code&gt; point to a &lt;code&gt;FCB&lt;/code&gt; and &lt;code&gt;R1&lt;/code&gt; to a record buffer when doing a &lt;code&gt;READ&lt;/code&gt; or &lt;code&gt;WRITE&lt;/code&gt; call for a file.&lt;/p&gt;&#xA;&lt;p&gt;*15 - There where support functions for building parameter lists from an argument list, but that doesn't change the basic workings, so let's skip that for simplicity.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-09-10T13:05:03.113" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7200" PostTypeId="2" ParentId="7197" CreationDate="2018-08-06T15:15:13.340" Score="18" Body="&lt;p&gt;I've seen three common approaches to handling that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first approach is to have the compiler statically allocate an area of memory for use as a stack, and maintain a global pointer to the current &quot;stack pointer&quot;.  On a platform with a subroutine call/return stack that's too small to accommodate expected function nesting, something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int foo(int a, int b);&#xA;...&#xA;foo(1,2);&#xA;...&#xA;void bar(int);&#xA;int foo(int a, int b);&#xA;{&#xA;  int temp=a+b;&#xA;  a&amp;gt;&amp;gt;=1;&#xA;  bar(a);&#xA;  bar(temp);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;may be handled, absent optimization as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    *compilerSP++ = 1; // Push first arg&#xA;    *compilerSP++ = 2; // Push second arg&#xA;    CALL _foo   // Stores return address in a special register&#xA;    compilerSP -= 2; // Remove pushed args&#xA;    ...&#xA;_foo:&#xA;    *compilerSP++ = RETURN_ADDR;  // Get called function&#xA;    compilerSP++; // Reserve space for temp&#xA;    compilerSP[-1] = compilerSP[-4]+compilerSP[-3]; // temp = a+b&#xA;    compilerSP[-4] &amp;gt;&amp;gt;+ 1; // a&amp;gt;&amp;gt;=1;&#xA;    *compilerSP++ = compilerSP[-4]; // Push a&#xA;    call _bar&#xA;    compilerSP--; // Remove pushed arg&#xA;    *compilerSP++ = compilerSP[-1]; // Push temp&#xA;    call _bar&#xA;    compilerSP--; // Remove pushed arg&#xA;    compilerSP--; // Remove space for temp&#xA;    RETURN_ADDR = *++compilerSP;&#xA;    RETURN;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Performance of this approach is generally pretty bad, but it will support recursion and re-entrant functions without difficulty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A second approach which is not conforming but is generally more useful is to forbid recursion, compute what the worst-case stack usage would be for each function, and then have the linker statically allocate space for all arguments, local variables, and any temporary variables the compiler needed to make things work.  Beyond the fact that such an approach greatly improves performance on systems without stacks, it has a second major advantage even for systems with stacks - such a great advantage, in fact, that I think the Standard should have recognized a subset of C without recursion.  If recursion is disallowed, programs can be statically guaranteed never to have any kind of &quot;stack overflow&quot; at run-time.  If the linker can't produce a static allocation that's guaranteed to work, it will reject program at link time without it running at all.  Although some kinds of program need support for recursion and re-entrancy, waiving such support would allow implementations for safety-critical systems to guarantee that combination of inputs could bomb the stack--something that would be useful even on systems that use stacks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A third approach which is conforming, but still performs better than the first, is to statically allocate space for local variables and arguments whose address isn't taken, but also keep for each function a flag to indicate its level of nested invocations.  If the function is being invoked when it is called again, the second invocation should copy all of its associated automatic objects to a compiler-maintained &quot;pseudo-stack&quot; like the one used in the first approach before allowing it to be invoked recursively (variables whose address is taken would need to be allocated on the pseudo-stack whether code is invoked recursively or not).  When a function returns after having been invoked recursively, it should restore all saved automatic objects from that pseudo-stack.  This approach, unlike the second, conforms to the Standard, but will run slower because of the need to check whether functions are being invoked recursively.  Although I've used a compiler (Archimedes V4) that could be configured to employ this approach, I've never enabled it since it adds extra overhead to all code whether or not it uses recursion.  The overhead isn't as severe as with the first approach, but unless an application needs recursion, there's no reason to accept any overhead.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2018-08-07T20:35:18.457" LastActivityDate="2018-08-07T20:35:18.457" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7201" PostTypeId="2" ParentId="3119" CreationDate="2018-08-06T15:31:39.877" Score="3" Body="&lt;p&gt;What about the &lt;a href=&quot;https://en.wikipedia.org/wiki/Power_Mac_G4#Mirrored_Drive_Doors/FW800&quot; rel=&quot;nofollow noreferrer&quot;&gt;PowerMac G4 (Mirrored Drive Doors)&lt;/a&gt; which was discontinued in June 2004? This was last computer Apple sold that could boot Classic MacOS and use native MacOS drivers. The &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_macOS_components#Classic&quot; rel=&quot;nofollow noreferrer&quot;&gt;Classic Environment&lt;/a&gt;  provided with MacOS X 10.0-10.4 could not run some programs like &lt;a href=&quot;https://en.wikipedia.org/wiki/Roxio_Toast&quot; rel=&quot;nofollow noreferrer&quot;&gt;Toast&lt;/a&gt; which required driver support. Given that the last version of Classic MacOS 9.2.2 came out in 2001 it can be considered a retro operating system. &lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2018-08-06T15:31:39.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7202" PostTypeId="2" ParentId="7190" CreationDate="2018-08-06T15:35:24.647" Score="4" Body="&lt;p&gt;A typical MS-BASIC interpreter would allow configuration of two key addresses: the start and end of the memory space it was allowed to use.  The tokenized BASIC program was always expected to start one byte after the bottom address.  The interpreter would then maintain and update a few additional addresses:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The end of the BASIC program text and start of variables&lt;/li&gt;&#xA;&lt;li&gt;The end of variables and start of arrays&lt;/li&gt;&#xA;&lt;li&gt;The end of arrays&lt;/li&gt;&#xA;&lt;li&gt;The start of the space used for strings&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any time a BASIC program is edited, it would update the end pointer above, and copy it to the pointers for ends of variables and arrays.  It would update the start of string space to the end of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding a variable will move any existing arrays so as to make room for the new variable.  Creating a new string will cause it to be stored immediately preceding all existing strings and move the &quot;start of string space&quot; pointer to compensate.  Before any action is performed that would push pointers closer together, the system checks to see if they would collide.  If so, the system will initiate a &quot;garbage collection&quot; function by resetting the &quot;start of string space&quot; pointer to the end of memory and then iterating the &quot;cleanup one string&quot; function until it can't find any string to clean up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clean up one string, the interpreter will search through all variables and arrays to find the string with the highest address that is below the &quot;start of string space&quot; pointer.  If it doesn't find any, the routine exits.  Otherwise, it will then copy the highest string it found just below the &quot;start of string space&quot; address, update that pointer appropriately, and finally search through all variables and arrays, replacing any references to the old address with the new one.  After doing all that, it will loop back to handle the next string.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this approach is very memory-efficient, but slow.  For each run-time generated string that needs to be kept, the system will have to perform a scan through every variable and every element of every string array to find the string to keep, and a second scan to correct all references to the old one so they identify the new one instead.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-08-06T15:35:24.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7203" PostTypeId="2" ParentId="7197" CreationDate="2018-08-07T01:34:46.383" Score="-4" Body="&lt;p&gt;There is no such thing as a &quot;hardware stack&quot;; what you're calling a hardware stack is presumably just push/pop (and possibly call/ret) instructions that operate on a specific fixed register and memory addressed by it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike some other answers claim, no &quot;dynamic memory management&quot; is needed in the absence of such instructions. You just do the same thing you always do to implement call frames with a moving stack pointer, choosing a particular register for use as the stack pointer (at least at call time; if you need to support interrupts/asynchronous events, it probably has to be permentantly-reserved rather than just at call time. Then you just increment/decrement it and store/load at addresses based on it just like you would with a register that the ISA specifically designates as a &quot;stack pointer&quot;.&lt;/p&gt;&#xA;" OwnerUserId="2070" LastActivityDate="2018-08-07T01:34:46.383" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7204" PostTypeId="2" ParentId="1158" CreationDate="2018-08-07T02:52:58.367" Score="-3" Body="&lt;p&gt;In computers of that era, the MOS PROMs used for the initial program load were much slower than the RAM memory so Operating System would be loaded into RAM to be executed. This also allowed for adding features to the OS e.g. drivers for expansion cards. (Another reason is for &quot;self-modifying code&quot;, which today is considered a programming no-no.) Note that today's computers load that initiation software from an 8-bit PROM into 64-bit RAM to start the system.&lt;/p&gt;&#xA;" OwnerUserId="10264" LastActivityDate="2018-08-07T02:52:58.367" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7205" PostTypeId="2" ParentId="7197" CreationDate="2018-08-07T04:28:52.493" Score="2" Body="&lt;p&gt;Firstly the PDP-7 had autoincrement capability for some of its memory registers (addressing was direct or memory indirect); the PDP-11 also has autoincrement registers. Note that many CPUs of that era did not have a stack for subroutine calls but instead used a &quot;frame pointer&quot;, saving the old PC as an index to the calling routine's parameter data. Second, hardware features can be implemented in software, both in the original Assembly language version of Unix as well as Unix written in the C language. &#xA;The Unix clone, Minix, was written for the i8086 originally and has a software Virtual Memory Manager (most newer CPUs have a hardware one).&#xA;PDP-7 instruction set:&#xA;&lt;a href=&quot;http://simh.trailing-edge.com/docs/architecture18b.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://simh.trailing-edge.com/docs/architecture18b.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10264" LastActivityDate="2018-08-07T04:28:52.493" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7206" PostTypeId="2" ParentId="7197" CreationDate="2018-08-07T06:41:20.180" Score="3" Body="&lt;p&gt;Even nasty recursive stuff can be converted to iteration. For example, take a look at this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/45140313/2521214&quot;&gt;Reflection and refraction impossible without recursive ray tracing?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Which does exactly that on a platform where recursion is not allowed probably due to the same reasons you are asking about (not sure if a GPU have stack pointer or not).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, if a computer has memory access with variable addressing (like by register) then you can implement a stack on your own. It is easy, just a few lines of code ... For example, you can do basic stack emulation stuff in Z80 assembly like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;StackPtr: dw 0&#xA;&#xA;push_a:&#xA; ld hl,(StackPtr)&#xA; dec hl&#xA; ld (StackPtr),hl&#xA; ld (hl),a&#xA;&#xA;pop_a:&#xA; ld hl,(StackPtr)&#xA; ld a,(hl)&#xA; inc hl&#xA; ld (StackPtr),hl&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you do not have addressing by register then you need to do it by self-modifying code where you overwrite the memory access instruction address on a fixed memory position which is then used ... The same goes for &lt;code&gt;call,ret&lt;/code&gt; jumping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Ackermann function&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I mentioned before, even nasty recursive stuff can be converted to an iterative process. Here for example, the &lt;strong&gt;Ackermann function&lt;/strong&gt; in C++:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//---------------------------------------------------------------------------&#xA;// https://en.wikipedia.org/wiki/Ackermann_function&#xA;//---------------------------------------------------------------------------&#xA;DWORD ackermann_r(DWORD m,DWORD n)&#xA;    {&#xA;    if (!m) return n+1;&#xA;    if (!n) return ackermann_r(m-1,DWORD(1));&#xA;            return ackermann_r(m-1,ackermann_r(m,n-1));&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;DWORD ackermann_i(DWORD m,DWORD n)&#xA;    {&#xA;    const int sz=128;               // stack size&#xA;    int i=0;                        // stack pointer&#xA;    DWORD a[sz];                        // stack&#xA;    for (;;)&#xA;        {&#xA;        if (!m)&#xA;            {&#xA;            n++;&#xA;            if (!i) return n;       // final result&#xA;            i--; m=a[i];            // previous recursion level&#xA;            continue;&#xA;            }&#xA;        if (!n) { m--; n=1; continue; }&#xA;        if (i&amp;gt;=sz) return 0;        // recursion too deep&#xA;        a[i]=m-1; i++;              // new recursion level&#xA;        n--;&#xA;        }&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;_r&lt;/code&gt; means recursive and &lt;code&gt;_i&lt;/code&gt; means iterative. Of course, without bignum arithmetics we are limited to very small &lt;code&gt;m, n&lt;/code&gt; input here comparison of the two functions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[recursive Ackermann(m,n)]&#xA;  m\n      0      1      2      3      4 &#xA;    0      1      2      3      4      5 &#xA;    1      2      3      4      5      6 &#xA;    2      3      5      7      9     11 &#xA;    3      5     13     29     61    125 &#xA;&#xA;[iterative Ackermann(m,n)]&#xA;  m\n      0      1      2      3      4 &#xA;    0      1      2      3      4      5 &#xA;    1      2      3      4      5      6 &#xA;    2      3      5      7      9     11 &#xA;    3      5     13     29     61    125 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;DWORD&lt;/code&gt; is an unsigned 32 bit integer... As you can see, I am using my own stack/heap implementation inside the iterative function (but that does not make it recursive!!!) nor is it using stack-related instructions, just memory access ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The drawback is that you are limited with heap/stack size (this stuff grows really fast), but if you realize you can have a global heap/stack for all the functions even this limitation partially disappears ... But do not befouled; even recursion is limited in the same way as the stack/heap of a commonly compiled program is usually limited too...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to compute/estimate the needed stack size for example by some  series) and use dynamic allocation ... It's also doable without the estimation if we use a dynamic-linked list instead...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While testing, beware this stuff grows crazy. For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ackermann_i(4,1) = 65533&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;took 9.550399 seconds to compute and used &lt;code&gt;sz=65531&lt;/code&gt; DWORDs (while the recursive version stack overflowed already as iterative functions usually need less space than their recursive counterparts).&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="535" LastEditDate="2018-08-11T21:18:21.623" LastActivityDate="2018-08-11T21:18:21.623" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="7207" PostTypeId="2" ParentId="7197" CreationDate="2018-08-07T12:49:54.537" Score="7" Body="&lt;p&gt;On &lt;strong&gt;very&lt;/strong&gt; early computers there was &lt;strong&gt;no&lt;/strong&gt; hardware support for a stack, because it was not until they started to program it that they realised that they needed one. The solution was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Wheeler_Jump&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wheeler jump&lt;/a&gt; — invented by &lt;a href=&quot;https://en.wikipedia.org/wiki/David_Wheeler_(computer_scientist)&quot; rel=&quot;nofollow noreferrer&quot;&gt;David Wheeler&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h1&gt;The Wheeler jump&lt;/h1&gt;&#xA;&lt;p&gt;This involves modifying the program as it runs. So will work on a Von Neumann architecture, but not Harvard. (Harvard came later, and will always have mechanism to implement a stack).&lt;/p&gt;&#xA;&lt;p&gt;Before a subroutine is jumped to (branch/goto, type jump), the last instruction of the routine that is called is changed to a branch to the next instruction. This last instruction was left blank, for this use. The programmer, or loading tools, need to know the length of the routine that is called. It is a big pain.&lt;/p&gt;&#xA;&lt;p&gt;Recursion is impossible, because there is only one place (per routine) where the return address is stored. However it is possible to have a subroutine, call as subroutine, call a subroutine. This is all that most programmers do anyway, and &lt;strong&gt;most&lt;/strong&gt; recursion can be replaced by iteration.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;This answer is about earlier times, than those mentioned in the question, because it gives some context, and shows what can be done, in relation to the question, with poor hardware support.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="9036" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-11-09T09:10:51.740" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="7208" PostTypeId="2" ParentId="7197" CreationDate="2018-08-07T14:11:46.410" Score="10" Body="&lt;p&gt;Funny enough, some contemporary architectures, like ARMv4 do not have a hardware stack either. Any subroutine call/return is done through the link register that temporarily holds the return address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, what would be called a 'software stack' is still present: some other register is assigned the role of stack pointer: you save the link register where it points as soon as the subroutine is entered, you push and pop registers there through the use of multi-register moves that also pre- or post- increment or decrement register used as a stack pointer (however those instructions use equally any other register as a pointer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also worth noting is that a 'hardware stack' has also the meaning of a truly hardware, limited-size stack (made of shift registers or small memory block) that is used nowadays in 'big' CPUs as the predictor of the return address within the speculative execution framework.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="535" LastEditDate="2018-08-11T21:19:23.980" LastActivityDate="2018-08-11T21:19:23.980" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7209" PostTypeId="2" ParentId="7197" CreationDate="2018-08-07T16:02:23.397" Score="1" Body="&lt;p&gt;Looking at &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/dec/pdp7/F-75P_PDP7prelimUM_Dec64.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the manual for PDP-7&lt;/a&gt; (1964), it has:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Jump and copy program counter to accumulator (jsp)&lt;/li&gt;&#xA;&lt;li&gt;It also has memory indirect addresses, &lt;code&gt;dac i&lt;/code&gt; deposit indirect, &lt;code&gt;lac i&lt;/code&gt; load indirect.&lt;/li&gt;&#xA;&lt;li&gt;With up to 8 of these being auto incrementing (depending on memory size).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These last two can be used to implement a stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first uses the accumulator as a link register (the arm has a dedicated link register). The link register (accumulator) can be copied to/from the stack.&lt;/p&gt;&#xA;" OwnerUserId="9036" LastEditorUserId="535" LastEditDate="2018-08-12T09:35:10.010" LastActivityDate="2018-08-12T09:35:10.010" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7210" PostTypeId="2" ParentId="2833" CreationDate="2018-08-07T18:36:49.423" Score="0" Body="&lt;p&gt;How do you connect your Atari to your display? Is it the modulator that it comes with? I had the same experience with the &quot;modulator&quot;. I ended up getting a monitor cable - din to composite and got the video and audio signal that way.&lt;/p&gt;&#xA;" OwnerUserId="10280" LastActivityDate="2018-08-07T18:36:49.423" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7211" PostTypeId="1" AcceptedAnswerId="7213" CreationDate="2018-08-07T19:23:45.930" Score="2" ViewCount="283" Body="&lt;p&gt;What was the first home computer and file system that allowed users to choose freely between 3rd party applications?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was under the impression that early PC (manufacturer) bundled their own applications (like word processor or spreadsheet program) without any means to have another application be used instead. Was this the case? If so, what was the nature of the change toward allowing users to grant third party applications the same privileges?&lt;/p&gt;&#xA;" OwnerUserId="10296" LastEditorUserId="6659" LastEditDate="2018-08-07T23:28:32.877" LastActivityDate="2018-08-09T06:50:27.087" Title="First (3rd Party) Application-Agnostic Home Computer or OS for such" Tags="&lt;file-system&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7212" PostTypeId="1" AcceptedAnswerId="7259" CreationDate="2018-08-07T20:00:37.080" Score="5" ViewCount="330" Body="&lt;p&gt;TL; DR: How can I connect two old AS/400 machines via SNA when the only transport mechanism between the physical locations is IP? AnyNet isn't an option, see below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A friend of mine and I have two IP networks linked together with an IPSEC Site2Site-VPN utilizing Cisco-Routers. Works like a charm. Since I have more VPN uplinks, a Cisco ASA filters out unwanted traffic flows at my side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We also run two old IBM AS/400 9401-150 with OS/400 V4R5. One at my site, one at his'. We use distinct SNA network id names (instead of the default &quot;APPN&quot;). The two machines are linked together with the AnyNet-Capability of OS/400. Basically this works, &lt;code&gt;aping&lt;/code&gt; works, &lt;code&gt;sndnetf&lt;/code&gt; and &lt;code&gt;sndnetmsg&lt;/code&gt; are nice to play with. But I suspect that the Cisco ASA in between loses track of the established TCP or UDP session sometimes. Sometimes, the SNA-Session backed by IP recovers, sometimes not. To get the SNA connection to a working state again, I need to vary off the controller descriptions on both sides; most often with the force-parameter, since one side sometimes doesn't permit varying off the *ctld &quot;at this time&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, I want to get rid of AnyNet and use Enterprise Extender.&lt;br /&gt; Unfortunately, EE isn't available in V4R5, it's just too old. But Cisco IOS is capable of doing this, on certain platforms with a certain feature set in a firmware image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do have two Cisco 2500 at hand with the needed IBM Networking Image. So I  configured IOS to build a link via Ethernet LLC to my AS and the same mirror-like at my friends site. Configuration excerpt:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;snasw event implicit-ls port cpcp&#xA;snasw cpname POCNET.DSLRTR&#xA;snasw port LAN GigabitEthernet0/0.1&#xA;snasw port TFR hpr-ip Loopback0 vnname POCNET.POCNET&#xA;snasw link NIBBLER port LAN rmac 0004.acde.9369 nns&#xA;snasw link FRIENDRT port TFR ip-dest 172.31.178.65&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The APPC *ctld on the AS' are created automatically and run fine. I can successfully aping both adjacent routers from the respective AS/400.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also added two loopback interfaces on the router, defined another port (TFR) and built a link between these two. Link is up, no sessions are started. Somewhat expectable.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      SNA Links                                                            HPR&#xA;      Link Name   State    Port Name Adjacent CP Name  Node Type     Sess  Sup&#xA;      ---------  --------  --------- ----------------  ------------  ----  ---&#xA;   3&amp;gt; FRIENDRT   Active    TFR       FRIEND.FRIENDRT   End Node         0  Yes&#xA;   4&amp;gt; NIBBLER    Active    LAN       POCNET.NIBBLER    Network Node     2  Yes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is the point where I'm stuck. I expect to get LU6.2-Sessions from one AS via the adjacent router to the other router which get finally forwarded to the destination AS. This isn't happening.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I poked in the fog a bit, tested with &lt;code&gt;aping&lt;/code&gt; to the other side's cisco router and the other side's AS/400, but no avail:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Added an entry to the QAPPNRMT configuration lists of both machines to destination *any with the respective remote net id. The remote cpname is the adjacent cisco router.&lt;/li&gt;&#xA;&lt;li&gt;An APPC *devd is automatically created and varied on, though.&lt;/li&gt;&#xA;&lt;li&gt;Created an APPC *ctld type *vrtappn but didn't find how to tell this *ctld to route the session via the adjacent cisco router.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The configuration is in parts derived by studying IBM &quot;iSeries Networking&#xA;APPC, APPN, and HPR&quot; and Cisco &quot;Bridging and IBM Networking Configuration Guide 12.4&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, if I'm wrong here, please tell me which subsite of StackExchange is more appropriate. Since all components I use are nearly 20 years old, it made sense to me to ask here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please refrain from pointing out to use IP as transport between the machines. First, some applications just have no option to utilize IP as transport. Second and most important: These boxes are old and slow and a single ftp session over the 10Mbit/s NIC brings these boxes down to their knees. SNA transport is much more lightweight. That's the main intention for me, trying to utilize SNA, or to be more precise, a PU2.1 connection between the AS' and their routers while the data itself (utilizing LU6.2 between the AS') is transported via HPR/IP between the cisco routers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe I'm completely on the wrong track and that's just not how EE works. The entire SNA stuff is rather complicated and I still have an awful lot of puzzle pieces still waiting to fall in place to show a picture I can understand. :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would anyone please be so kind and create the tags AS400 and Cisco? Since I'm a newbie here, I'm not allowed (yet).&lt;/p&gt;&#xA;" OwnerUserId="10295" LastEditorDisplayName="user8725" LastEditDate="2018-08-10T11:45:04.123" LastActivityDate="2018-08-12T16:08:02.987" Title="IBM AS/400 connection via SNASW on Cisco Router" Tags="&lt;ibm&gt;&lt;sna&gt;" AnswerCount="1" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="7213" PostTypeId="2" ParentId="7211" CreationDate="2018-08-07T20:47:13.410" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;which allowed the user to choose freely between 3rd party applications in opening data files.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and (from a comment)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I was under the impression that early PCs bundled their own applications (like word processor or spreadsheet program) without any means to have another application be used in its place (or documented means?). Was this the case? If so, what was the nature of the change toward allowing users to grant third party applications the same privileges? Thanks&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Answer is simply &lt;strong&gt;every OS&lt;/strong&gt; and &lt;strong&gt;every PC&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in &lt;em&gt;ye good ol' days&lt;/em&gt; OSes were way too primitive to even try something like a closed system. They where merely loaders to start some application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early microcomputers were complete open systems. Home computers and later PCs even more so. The first such were bare hardware, delivered without an OS. If at all, only a monitor program was supplied – sometimes as small as 256 Bytes, offering nothing more than a chance to examine and change memory locations. The Altair for example was delivered completely without anything. Programs had to be entered bit by bit via switches. Not too much of a hassle considering that the main memory was just 256 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any OS would have to be either user written, or bought in addition. Even more so applications. While home computers like PET, TRS-80 or Apple II became soon more lavish, they still only supplied some frugal (by today's standards) monitor and BASIC as high level language and OS. OSes more like today only became available after disk drives where sold. Still manufacturers did only offer a DOS and, if at all, a very limited selection of software, mostly restricted to languages and tools. Or in case of home computers like Atari 800 maybe some games. The majority of applications where third party.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar there where OSes for each of these machines by third party suppliers. Usually due the fact that the original DOS was rather limited (*1). The market was quite open, and  maybe except for some strange people no one could imagine what a closed system would be good for. In fact, even the idea of bundling was not much thought about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first (successful) machine with an application package included was the (professional) &lt;a href=&quot;https://en.wikipedia.org/wiki/Osborne_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Osborne 1&lt;/a&gt; of 1981. Here &lt;a href=&quot;https://en.wikipedia.org/wiki/WordStar&quot; rel=&quot;nofollow noreferrer&quot;&gt;wordprocessor&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/SuperCalc&quot; rel=&quot;nofollow noreferrer&quot;&gt;spreadsheet&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/DBase&quot; rel=&quot;nofollow noreferrer&quot;&gt;database&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/CBASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASIC&lt;/a&gt; was bundled with an OS. Still, the OS was &lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M&quot; rel=&quot;nofollow noreferrer&quot;&gt;CP/M&lt;/a&gt;, an open, manufacturer independent OS, open to any kind of third party application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another kind fitting your idea would be early handheld LCD portables like the &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_Model_100&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kyotronic 85&lt;/a&gt; family (Tandy M100, Olivetti M-10, NEC PC-8201, NEC PC-8300). They came with applications preinstalled in ROM - much like todays phones. Again, it wasn't about convenience, but the convenience of instant on usability. They could as well install third party applications in RAM - some even got user accessible ROM slots to install third party ROM based applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without being open to third party software, computers might not have been the success they are at all.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Check for example &lt;a href=&quot;https://en.wikipedia.org/wiki/NewDos/80&quot; rel=&quot;nofollow noreferrer&quot;&gt;NewDOS&lt;/a&gt; for the TRS-80&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2018-08-08T13:12:55.693" LastActivityDate="2018-08-08T13:12:55.693" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7214" PostTypeId="2" ParentId="7090" CreationDate="2018-08-08T03:13:29.087" Score="7" Body="&lt;p&gt;It depends on the configuration, but here are some specs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Console: 390 lb&lt;/li&gt;&#xA;&lt;li&gt;MCU Disk units: 480 lb&lt;/li&gt;&#xA;&lt;li&gt;MCU Card reader: 1020 lb&lt;/li&gt;&#xA;&lt;li&gt;Central computer: 8800 lb&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;etc...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: the documents below are for the Cyber-76, which was the new branding of the 7600. The 6600 became a Cyber-74, and the 6400 became the Cyber-73.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, this was a rebranding effort and the new series, after these models, had a '1' at the beginning, so they moved to Cyber-170, 180 and 200; the new series used ICs instead of discrete transistors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a lot of parts, even a dew point recorder!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machine came with a whole manual about how to set up the room that will take it. It covers space, power, temperature, humidity, cooling, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/A1DYf.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/A1DYf.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/YxRh8.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YxRh8.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/VD61K.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VD61K.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/cEezs.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cEezs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/BR7Oc.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BR7Oc.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/cDlSZ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cDlSZ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/C790s.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C790s.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/wbX2H.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wbX2H.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/8McUc.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8McUc.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Jcmfx.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Jcmfx.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/dEEMv.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dEEMv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/skFUK.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/skFUK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/S0hzz.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S0hzz.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/F4EhQ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/F4EhQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/SR7HP.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SR7HP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/KQnCK.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KQnCK.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/FISqz.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FISqz.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I put the whole installation manual on my google drive. It's quite large (about 145mb of scans).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://drive.google.com/open?id=1jI2XJzr4ROOtWDPIRJ4vK0JtUkjV5xWb&quot; rel=&quot;noreferrer&quot;&gt;https://drive.google.com/open?id=1jI2XJzr4ROOtWDPIRJ4vK0JtUkjV5xWb&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3884" LastEditorUserId="3884" LastEditDate="2018-08-08T03:27:28.660" LastActivityDate="2018-08-08T03:27:28.660" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7215" PostTypeId="2" ParentId="2810" CreationDate="2018-08-08T04:34:56.993" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How much did it cost in 1980 to buy a tape drive capable of backing up 5 megabytes of data? Both for the drive itself and per tape?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The biggest issue here might be that in 1980 most users didn't have hard drives. Mind you, Tandy was at that time selling the Model II withoug hard disk, but 1-4 floppies as professional system. Even the lowest cost hard disk setup in 1980 was still way past 3000 USD, with the drive alone being way past 2000 USD - a well fited S100 system including a floppy would cost less.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Corvus S100 HD subsystem would be close to &lt;a href=&quot;https://archive.org/stream/byte-magazine-1980-12/1980_12_BYTE_05-12_Adventure#page/n155&quot; rel=&quot;nofollow noreferrer&quot;&gt;5000 USD&lt;/a&gt; - which isinteresting here, as Corvus already offered a tape backup solution in1980, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Corvus_Systems#Disk_drives_and_backup&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mirror Backup System&lt;/a&gt;, which could use a standard VCR to backup the harddrive. Several full backups could be made onto a single standard tape. This added another 800 USD for the option plus ~1000 USD for a VCR. Compared with a professional QIC backup system a real bargain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if one had already bought a Corvus disk system, &lt;strong&gt;adding backup would be somewhat less than 2,000 USD. Tape cost was that of a simple VCR cassette, less than 10 USD.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-08-08T04:34:56.993" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7216" PostTypeId="2" ParentId="2810" CreationDate="2018-08-08T09:43:00.650" Score="0" Body="&lt;p&gt;Your question implies &quot;proper&quot; tape storage, which would have been prohibitive for most computer users back then. Other answers give plausible price estimates for dedicated data tape products.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, back then, the home computers that us peasants could actually afford often had &lt;em&gt;only&lt;/em&gt; audio cassette tape as their storage medium. At a typical 1200 baud, 5MB is around 12 hours of tape, so a dozen or so C60s would suffice. Actually attempting to perform such a backup would be an exercise in boredom and frustration though. In practice, one would (or at least should) just save twice to two different tapes when creating the data in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recall that tape recorders were a few tens of pounds and tapes about a pound each. These prices would vary wildly depending on quality. You perhaps don't want to do anything business critical with those 5 for £2 tapes.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2018-08-08T09:43:00.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7217" PostTypeId="5" CreationDate="2018-08-08T10:07:09.027" Score="0" Body="&lt;p&gt;For questions regarding the use or installation of the Pascal language on retrocomputers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tag is not for debugging Pascal programs as such questions are not on topic here. &lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2018-08-08T10:07:09.027" LastActivityDate="2018-08-08T10:07:09.027" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7218" PostTypeId="4" CreationDate="2018-08-08T10:07:09.027" Score="0" Body="For questions regarding the use or installation of the Pascal language on retrocomputers." OwnerUserId="276" LastEditorUserId="276" LastEditDate="2018-08-08T10:07:09.027" LastActivityDate="2018-08-08T10:07:09.027" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7219" PostTypeId="2" ParentId="7197" CreationDate="2018-08-08T16:16:30.843" Score="4" Body="&lt;p&gt;The 6502 has only a stack of 256 bytes, so &lt;a href=&quot;http://cc65.github.io/cc65/&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;cc65&quot;&gt;cc65&lt;/a&gt; implements a stack in software.&lt;/p&gt;&#xA;" OwnerUserId="7534" LastActivityDate="2018-08-08T16:16:30.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7220" PostTypeId="1" AcceptedAnswerId="7225" CreationDate="2018-08-08T19:22:00.633" Score="36" ViewCount="8725" Body="&lt;p&gt;Currently reading an excellent book called &lt;em&gt;Blue Magic: The People, Power and Politics Behind the IBM Personal Computer&lt;/em&gt;, which is just what it says on the tin; highly recommended to anyone who wants to know the corporate politics behind the scenes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It makes a curious casual remark on a related topic. End of chapter 19, p112 in the hardback edition:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But in at least one other opinion bearing on the IBM versus Apple matter, Warren Winger, chairman of a chain of computer retail outlets in Texas and Illinois, told the New York Times that IBM's strategy for its PC was obviously geared to exploit the business and scientific markets that had inexplicably not been tapped by Apple. &quot;It appears that IBM has a better understanding of why the Apple II was successful than had Apple,&quot; Winger said.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now I'm really curious: what did he mean by that? What did Apple fail to do that they could have done to tap the business and scientific markets? (As I understand it, the key ingredients for Apple in business were the disk drive, VisiCalc and 80-column display, all of which were in place by then?) What did Winger and IBM understand that Apple did not?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="175" LastEditDate="2018-08-09T09:29:15.413" LastActivityDate="2018-10-09T22:56:56.273" Title="How did Apple fail to tap the business and scientific markets?" Tags="&lt;history&gt;&lt;apple-ii&gt;&lt;ibm-pc&gt;&lt;market&gt;" AnswerCount="7" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7221" PostTypeId="2" ParentId="7220" CreationDate="2018-08-08T19:40:58.200" Score="16" Body="&lt;p&gt;I personally don't believe that Winger understood anything that wasn't well understood by both Apple and IBM at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would say that this passage is pointing out the confusion that Apple's approach to &quot;computing in the workplace&quot; bore little resemblance to IBM's well-established approach to &quot;computing in the workplace.&quot; The commentary is attempting to dissect what is happening in two distinct markets by falsely viewing them as a single market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You first have to remember that computing for business and scientific work was nothing new in 1980. The computing business had been around for a couple of decades already, and IBM had grown to own the largest share of that established market. In contrast, Apple was a startup in the &lt;strong&gt;new business&lt;/strong&gt; of microcomputers for personal use. This was not the same market as IBM. You could certainly argue that microcomputers were already showing the promise that they'd revolutionize legacy computing by 1980, but that was much more a prognostication than an accepted fact. The typical corporate IT purchasing manager certainly had no reason to risk their job over speculation about the future of micros.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, when IBM finally entered the microcomputer for personal use business to compete with Apple, they weren't entering it as a startup. They already had legions of loyal customers who owned IBM products for business and scientific computing. The task for IBM was to simply guide those existing customers toward microcomputer adoption. Apple had no such opportunity to market in this way because they had no such existing customer base to whom they could direct this marketing. Had Apple made an attempt to do that earlier, they would have met with much resistance from the &quot;typical&quot; computing user thinking something along the lines of &quot;If this is the future of computing, then why isn't IBM selling it to me&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, it is not as if Apple was blind to the opportunities for micros in business and scientific computing, just as IBM was obviously not blind to it. They were already maturing their product line to address these exact markets with the Apple /// and the Lisa. These were to be higher end products that could be marketed to traditional computing users on their capabilities. They weren't just a low-end microprocessor in a personal package; but rather sophisticated systems with state-of-the-art OS software geared toward workplace uses and not toward playing &quot;Karateka&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple had every intention of leading the revolution in corporate and scientific computing and &quot;stealing&quot; IBM's legacy customers away from them. It didn't work out that way because IBM severely upset their Apple cart by executing rather brilliantly with a personal computer bearing their own trusted and established brand.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-08-09T15:17:27.697" LastActivityDate="2018-08-09T15:17:27.697" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="7222" PostTypeId="1" CreationDate="2018-08-08T20:05:47.337" Score="14" ViewCount="4183" Body="&lt;p&gt;I've read that modern OSes rely on hardware-powered process isolation to prevent processes (and/or users) from clobbering each others' RAM. But on Intel processors, this hardware was first included in the 80286 (protected mode), so Linux required a minimum of a 80386 to run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there a way to run a memory safe POSIX on a 8086 or 80286?&lt;/p&gt;&#xA;" OwnerUserId="9107" LastEditorUserId="7946" LastEditDate="2018-08-09T14:54:34.273" LastActivityDate="2019-07-18T15:20:00.877" Title="Can one isolate processes on a 8086?" Tags="&lt;8086&gt;" AnswerCount="10" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7223" PostTypeId="2" ParentId="7220" CreationDate="2018-08-08T20:07:35.367" Score="5" Body="&lt;p&gt;The Apple II was a computer targetting &lt;em&gt;nerds&lt;/em&gt; (probably even before that term existed in its current meaning). It implied taking things apart, tinker with it and, generally &quot;needs inside knowledge&quot; - A corporate image entirely different to Apple today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM was known as &quot;we'll not explain or require you to understand how it works, you simply pay us (a bit more) &lt;strong&gt;that&lt;/strong&gt; it works.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's quite clear to me why commercial (&quot;no one ever has been fired for buying IBM&quot;) and scientifical buyers (at least outside EE) preferred buying IBM. Apple had a completely non-compatible corporate image to attract buyers on the commercial and scientific markets.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-08-09T17:28:05.967" LastActivityDate="2018-08-09T17:28:05.967" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7224" PostTypeId="2" ParentId="7222" CreationDate="2018-08-08T20:18:48.957" Score="19" Body="&lt;p&gt;A computer using an 8086 can provide memory protection by using an external memory management unit.  This would be a chip or a circuit that sits between the CPU and the memory and provides an additional layer of memory translation, sends interrupts if out-of-range memory is accessed, and so on. I don't know if this was commonly done on the 8086 (I've never seen such a system described, but then I've not looked for one either), but was very common for workstations based on early revisions of the 68000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Edit: at least &lt;a href=&quot;http://chiclassiccomp.org/docs/content/computing/Altos/Marketing/Altos586Datasheet2.pdf&quot; rel=&quot;noreferrer&quot;&gt;some systems were produced that used this approach&lt;/a&gt;, although as @RossRidge points out in the comments it was a little easier on the 68000 due to specific support designed into the processor, which is probably why it was more common there.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an 80286, the standard 286 protected mode provides all the isolation that you'd need to run a POSIX compliant operating system with memory safety.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(It wouldn't be a very good POSIX system, because memory allocations would need to be limited to 64K to fit inside segment limits, but POSIX allows for sizes to be limited as low as &lt;a href=&quot;http://pubs.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html&quot; rel=&quot;noreferrer&quot;&gt;_POSIX_SSIZE_MAX, which is defined as 32KiB&lt;/a&gt;, so this is fine)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been a number of Unix-like operating system that run on the 8086 and 80286, including Minix, which is usually considered the forerunner of Linux (it is the system that Torvalds used at the time he developed the first versions of Linux and influenced the early development quite a bit) and Xenix.  There is also a port of Linux to 16-bit systems called &lt;a href=&quot;https://github.com/jbruchon/elks&quot; rel=&quot;noreferrer&quot;&gt;ELKS&lt;/a&gt;, although I don't know whether it supports memory protection or not (looking at the source suggests it probably does, but I've never really done anything with it so can't be sure).&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-08-08T21:00:15.847" LastActivityDate="2018-08-08T21:00:15.847" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7225" PostTypeId="2" ParentId="7220" CreationDate="2018-08-08T20:20:51.210" Score="39" Body="&lt;p&gt;The Apple II was a hobbyist's computer that unexpectedly found a business niche. Apple recognised that niche in its design of 1980's Apple III. Specifically, it thought that the following were necessary changes to produce a business computer relative to the contemporaneous II+:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a full-ASCII keyboard, with lowercase and uppercase entry;&lt;/li&gt;&#xA;&lt;li&gt;an 80-column display;&lt;/li&gt;&#xA;&lt;li&gt;a much larger quantity of RAM (up to 256kb rather than 48kb);&lt;/li&gt;&#xA;&lt;li&gt;a properly-rounded operating system with: expansion cards identified by name rather than location, a hierarchical filing system, support for large fixed disks, and a built-in real-time clock for time stamps; and&lt;/li&gt;&#xA;&lt;li&gt;enough backwards compatibility with the II to be able to run VisiCalc and other leading business software.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So I'd actually argue the opposite: that intellectually Apple understood business-user needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's the delivery that failed; initial batches of the III were extremely prone to failure, and they dragged the III brand down with them. The story is that Jobs himself insisted the machine operate without a fan, and hardware instability resulted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The comment in the book could be an obtuse reference to the fan — silence is a very consumer-centric decision and by killing the machine, eliminated Apple's business play.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Development of the III also caused Apple temporarily to cease work on the II, believing that the market would transition; the Apple IIe wasn't introduced until 1983 so at the time of the IBM PC's introduction Apple's best-selling machine — still the II+ — suffered by:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;offering an uppercase-only keyboard;&lt;/li&gt;&#xA;&lt;li&gt;supporting only 48kb of RAM for the overwhelming majority of applications;&lt;/li&gt;&#xA;&lt;li&gt;providing only a very basic disk operating system, without folders or hard disk support; and&lt;/li&gt;&#xA;&lt;li&gt;providing 40-column output only, with the various third-party 80-column adaptors having no well-supported standard.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Subnote: since the quote is about whether IBM recognised &quot;why the Apple II was successful&quot; better than Apple did, I've discounted questions of distribution and branding from the quoted chairman's reasoning. Things inherent to IBM being a business-oriented company with deep roots and Apple being a youthful upstart with relatively ad hoc distribution would have affected the Apple II just as much as the III.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I therefore do not think that the difference in brand appeal or sales channels — as relevant as they may be to the PC's success — could possibly substantiate the claim given. They cannot be what the chairman is referring to, so they do not answer the question.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-08-08T21:11:38.437" LastActivityDate="2018-08-08T21:11:38.437" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7226" PostTypeId="2" ParentId="7222" CreationDate="2018-08-08T20:21:12.493" Score="27" Body="&lt;p&gt;The short answer would be &quot;No&quot;, since there is no way to prevent a user process from accessing privileged address space (of the OS or other processes) without some form of memory protection. Usually, this memory protection has to be implemented in hardware of the processor, such as you pointed out with 80286 protected mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some alternatives would be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A hardware implementation of memory protection outside of the 8086 microprocessor. This was done, for example, with the &lt;a href=&quot;http://chiclassiccomp.org/docs/content/computing/Altos/Marketing/Altos586Datasheet2.pdf&quot; rel=&quot;noreferrer&quot;&gt;Altos Series&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;A strict software convention for user processes that would (barring coding bugs) ensure they only access parts of memory they specifically &quot;owned&quot;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Since POSIX is built on the older C-standard for heap usage (i.e. malloc/free), it would be possible to have user processes that cooperate on an 8086, through these API's, to guarantee they only access their own memory. Of course, bugs being a reality, this would not be as good as hardware protection of memory. Systems such as the Amiga and Macintosh (using the Motorola 68000) that used this strategy of software convention suffered with stability problems created by memory access bugs.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-08-25T19:14:38.570" LastActivityDate="2018-08-25T19:14:38.570" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7227" PostTypeId="2" ParentId="2477" CreationDate="2018-08-08T20:29:34.020" Score="2" Body="&lt;p&gt;The Platinum Edition //e did not have an option to run at 4 Mhz like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_IIc_Plus&quot; rel=&quot;nofollow noreferrer&quot;&gt;//c Plus&lt;/a&gt;, the 8k processor cache or the MIG with a 2k buffer cache. The Platinum Edition //e is a nicely upgraded //e, but without the &lt;a href=&quot;https://en.wikipedia.org/wiki/Laser_128&quot; rel=&quot;nofollow noreferrer&quot;&gt;Laser 128/128EX&lt;/a&gt; completing features of the //c Plus.&lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2018-08-08T20:29:34.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7228" PostTypeId="2" ParentId="7222" CreationDate="2018-08-08T20:53:35.133" Score="4" Body="&lt;p&gt;I would say no. Even if external memory protection hardware is added, the processor lacks the concept of a user and supervisor or privileged state. As a result, there's no way to stop a program from disabling interrupts or accessing I/O ports, like those in the MMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if we set aside the need to isolate a malicious program, the MMU might be enough. Only problem with that thinking is that buggy programs can be pretty malicious even if the author is not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it would seem that we are back to no!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want process isolation, you need something more modern and a well written operating kernel.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastActivityDate="2018-08-08T20:53:35.133" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="7229" PostTypeId="2" ParentId="7222" CreationDate="2018-08-08T21:54:54.867" Score="12" Body="&lt;p&gt;Technically yes because the 8086 instruction set is Turing-complete. &lt;a href=&quot;http://www.extremetech.com/extreme/124287-the-worlds-slowest-linux-pc&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; is Linux running very slowly on an ARMv5 emulation on an 8-bit RISC microcontroller (also mentioned &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4871/75&quot;&gt;here&lt;/a&gt;). But if you want process isolation, I would look for other, less extreme solutions first!&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-08-08T21:54:54.867" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7231" PostTypeId="2" ParentId="6339" CreationDate="2018-08-09T01:59:57.390" Score="24" Body="&lt;p&gt;&lt;strong&gt;From Byte Magazine article on 6809, by Terry Ritter:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Point 11:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Tell me again about the stack pointers: why two stack pointers?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Answer 11:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Good Point. The original reason for adding the user stack pointer was to facilitate the creation of a data stack in memory that is separate from the program stack. This avoids one of the serious problems of using a second generation processor in a modular programming environment -- that of returning parameters to a calling routine. We want to pass parameters in a position independent manner, of course, but the return from subroutine (&lt;code&gt;RTS&lt;/code&gt;) instruction uses the top element of the stack as a return address, and this address is placed on the stack &lt;em&gt;before&lt;/em&gt; the subroutine is entered. On the 6800 there will be a lot of stack rearrangement going on to get around this problem. The user stack pointer was created as a new stack unencumbered with return addresses (or interrupt state information) to allow data to be passed between routines of different levels in a reasonable manner. And since the new stack works exactly like the old, there is a relatively small silicon cost involved.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We do suspect, however, that many programmers will elect to accept the overhead involved with passing parameters on the hardware stack (note that the overhead problem is greatly reduced with the 6809). These programmers will be concerned with the access of parameters placed on the stack by higher level routines. Notice that, as more elements are added to the stack, these &lt;em&gt;same parameters&lt;/em&gt; are referred to by varying offsets with respect to the stack pointer itself: this is bad, since it becomes difficult to analyze exactly which value is being accessed by any given subroutine. Thus many programmers will use the &lt;code&gt;U&lt;/code&gt; register as a &lt;em&gt;stack mark&lt;/em&gt; pointer. All lower level modules will then be able to refer to the same data by identical offsets from the &lt;code&gt;U&lt;/code&gt; register.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zW6ed.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zW6ed.png&quot; alt=&quot;Stack Frame on 6809&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This was back in the days of Pascal, where you could have nested functions which can access their parents' local variables. The compiler does not know what call context the function is currently in, and thus how far up the stack its parents' local variables are; it must have a pointer to the previous stack frame, or some other way of accessing its parent's local variables. See &lt;a href=&quot;https://en.wikipedia.org/wiki/Nested_function#Implementation&quot; rel=&quot;noreferrer&quot;&gt;Nested Function&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Non-local_variable&quot; rel=&quot;noreferrer&quot;&gt;Non-local Variable&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For languages like C which don't allow nested functions, the user stack is less necessary, because the compiler can easily track the hardware stack pointer as it changes, and generate the correct offsets, thus allowing the &lt;code&gt;U&lt;/code&gt; register to be used as another index register like &lt;code&gt;X&lt;/code&gt; and &lt;code&gt;Y&lt;/code&gt;, as well as for &quot;blasting&quot; memory copies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's exactly analogous to the x86 &lt;code&gt;BP&lt;/code&gt;/&lt;code&gt;EBP&lt;/code&gt;/&lt;code&gt;RBP&lt;/code&gt; registers supplementing the &lt;code&gt;SP&lt;/code&gt;/&lt;code&gt;ESP&lt;/code&gt;/&lt;code&gt;RSP&lt;/code&gt; registers.&lt;/p&gt;&#xA;" OwnerUserId="10315" LastActivityDate="2018-08-09T01:59:57.390" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7232" PostTypeId="2" ParentId="7211" CreationDate="2018-08-09T06:50:27.087" Score="-1" Body="&lt;p&gt;While there were a few systems that associated data closely to integrated applications, they were few and far between, and generally speaking were, for the most part, not what you'd usually consider a &quot;home computer&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best known, I suspect, was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Star&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xerox Star&lt;/a&gt;.  The Star was the first truly commercial system to be built with what we'd recognise today as a standard GUI (it was the successor of Xerox's research system, the Alto, which was &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5114/why-would-xerox-not-try-to-market-the-alto-to-the-public&quot;&gt;never sold commercially in anything other than a half-hearted way&lt;/a&gt;).  It had many, many innovative new ideas (including a WYSIWYG word processor, a system for embedding objects produced by one application inside a document managed by another, a &quot;desktop&quot; interface, icons, and so on).  It also had a file system that tracked the creator of each file, so that if you clicked on the file's icon it would open it in the application that created it.  It was also designed to be supplied with a set of standard applications and not be end-user extendable, so it does exactly match the kind of interface you're looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only thing is, you wouldn't really call it a home computer: Xerox never really marketed it other than to large businesses, so they never became popular enough that individuals wanted to buy them.  They also cost well in excess of an average person's annual salary.  In the year the IBM PC went on the market at $1,600, they sold for $16,000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Alto and the Star had, however, inspired a number of other people to produce similar systems.  The most popular of these was the Apple Mac, which used the same system of associating a file with its creator in order to allow it to be automatically opened when the file's icon was clicked.  The Mac was much closer to what you'd call a home system, but didn't have the closed ecosystem: it allowed (and in fact Apple encouraged the development of) new applications, and as any application could register the types of data it could work with, the system would allow the user to change what application would be used for any particular file just by selecting them from a list.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other systems followed Apple's lead: Microsoft Windows switched from application-based interface to document-based in version 3 (IIRC), using file extensions to associate applications via a list stored in the win.ini file (which was, of course, easily modified to add new applications, but didn't provide any easy way of supporting a file type that could work with multiple applications), and other systems like the Commodore Amiga or Acorn's RiscOS also implemented similar mechanisms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another common type of system where data was associated directly with applications was in portable/&quot;palmtop&quot; computers, e.g. the &lt;a href=&quot;https://en.wikipedia.org/wiki/Psion_Organiser&quot; rel=&quot;nofollow noreferrer&quot;&gt;Psion Organiser&lt;/a&gt;, which (at least in early versions) either didn't support additional applications or were difficult to develop for so few applications became available.  Such systems only really became truly flexible in the 90s, with systems like the PalmPilot (which directly copied many parts of the Apple Mac user interface and API, including its use of 4-character codes to identify data types) and Microsoft's Windows CE being among the first to have many third party applications.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-08-09T06:50:27.087" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7233" PostTypeId="1" AcceptedAnswerId="7237" CreationDate="2018-08-09T11:12:56.747" Score="12" ViewCount="1639" Body="&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5581/576&quot;&gt;Tommy pointed out in my question about BASIC tokens on the ZX Spectrum&lt;/a&gt;, the ZX80 is a computer which does not produce a signal which is displayed steadily on the TV. It looks to me as if the CRT is losing sync, causing the picture to roll upward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The similar computers, the ZX81 and the Galaksija do not have this problem as far as I can tell. The Galaksija, though considerable effort was taken to keep parts count low, it at least uses some kind of hardware timer to generate an interrupt which sets the CPU drawing the screen from the top, and since that timer keeps firing, there's no problem keeping the display from rolling like that. And there is plenty of time to scan the keyboard during the vertical or horizontal blanking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is if my diagnosis of the Rolly Screen on the ZX80 is correct and why it was built that way. &lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-08-11T12:28:22.857" Title="Why does the ZX80 not produce a steady display signal?" Tags="&lt;zx80&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7235" PostTypeId="2" ParentId="7233" CreationDate="2018-08-09T13:13:06.597" Score="7" Body="&lt;p&gt;The ZX80 uses the CPU to generate the video display signals, and the timing is not perfect. It differs from the PAL spec slightly. In addition the clock controlling the CPU frequency is a &lt;a href=&quot;http://searle.hostei.com/grant/zx80/ZX80Iss2.jpg&quot; rel=&quot;noreferrer&quot;&gt;low cost resonator&lt;/a&gt; (see X1 in the lower right hand corner) which didn't produce the most stable frequency, and that signal is then buffered and transferred from one side of the PCB to the other which all adds jitter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX80 ROM doesn't use interrupts or timers, it simply dedicates itself to producing the video signal and runs at maximum speed in a loop while doing so. The timing is created by the execution time of the inner loops that generate the video signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's why the display blanks when you press a key or do any processing. The CPU simply stops generating the video signal while it handles the keypress or executes a BASIC instruction.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-08-09T13:13:06.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7236" PostTypeId="2" ParentId="7222" CreationDate="2018-08-09T13:22:58.540" Score="2" Body="&lt;p&gt;The 8086 is a 16-bit processor.  One possibility for implementing some form of process isolation is to use the processor's segment registers (CS, DS, SS, ES).  These allow a process's stack (SS), heap (DS, ES), and code (CS) reside in specific 64kB areas of a 1MB address space.  This works by left shifting the 16-bit segment register by four bits and adding to that the 16-bit stack pointer (&lt;code&gt;SS &amp;lt;&amp;lt; 4 + SP&lt;/code&gt;), instruction pointer (&lt;code&gt;CS &amp;lt;&amp;lt; 4 + IP&lt;/code&gt;), or data address (e.g. &lt;code&gt;CS &amp;lt;&amp;lt; 4 + SI&lt;/code&gt;), to obtain the 20 bits of the physical address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, through a suitable segment register setup one can isolate a process to at most 64kB, provided the process follows the &lt;em&gt;convention&lt;/em&gt; of not altering the segment registers.  For the requirements of C programs, where the heap and the stack must be addressable through the same 16-bit pointers, this convention restricts them to 64kB of data and 64kB of code.  Although this might sound overly restrictive, remember that early Unix run on a PDP-11 with 64kB of RAM.  Consequently, providing a 1MB memory for multiple processes with up to 64kB of code and 64kB of data is more than generous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, by manipulating segment registers and copying memory regions, a supervisor program can dynamically readjust memory regions as processes are created and destroyed in a way that's transparent to running processes.  Early versions of Andrew Tannembaum's &lt;a href=&quot;https://en.wikipedia.org/wiki/MINIX&quot; rel=&quot;nofollow noreferrer&quot;&gt;MINIX&lt;/a&gt; operating system relied on some of these ideas.&lt;/p&gt;&#xA;" OwnerUserId="10322" LastEditorUserId="10322" LastEditDate="2018-08-30T14:09:47.730" LastActivityDate="2018-08-30T14:09:47.730" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7237" PostTypeId="2" ParentId="7233" CreationDate="2018-08-09T13:43:59.347" Score="14" Body="&lt;p&gt;It's probably bad form to cite yourself, but I wrote up my understanding of the ZX80 and ZX81 hardware &lt;a href=&quot;https://github.com/TomHarte/CLK/wiki/The-ZX80-and-ZX81&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, scraped together from a few different sources but most notably &lt;a href=&quot;http://www.user.dccnet.com/wrigter/index_files/ZX%20Video%20Tutorial.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wilf Rigter's hardware and software summary&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your assessment is right. The standard ZX80 ROM loop outputs a screen, checks for keypresses, and repeats. That loop is exactly the length of a frame if no key is pressed. If a key is pressed then additional processing happens, so the start of the next frame is delayed. The TV is then out of sync.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interrupts are used during display generation to communicate the end of a line. The logic is trivial: during a refresh cycle bit 6 of the refresh address is echoed to the interrupt line. So when bit 6 is 0, an interrupt is signalled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the Z80 performs an interrupt if it is being signalled one cycle before the end of an instruction. Therefore &lt;strong&gt;an interrupt is communicated only if the final part of an instruction is a refresh cycle&lt;/strong&gt;; and&lt;/li&gt;&#xA;&lt;li&gt;when it is signalled is a function of the rate at which the refresh counter has increased. Which also depends upon the particular instructions being performed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Therefore the interrupt mechanism doesn't have reliable behaviour during arbitrary code. It can't be used for line counting or any other purpose anywhere other than during the output cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result &lt;strong&gt;the base ZX80 has no means to keep track of display position&lt;/strong&gt; outside of its display loop. So it doesn't even try; it just allows the display to lose sync.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Digressions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are &lt;a href=&quot;http://www.fruitcake.plus.com/Sinclair/ZX80/FlickerFree/ZX80_Kong.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX80 games which do not roll&lt;/a&gt; through very careful cycle counting of every possible execution path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interrupt logic isn't so much for keeping track of position, it's more to allow the compact display to work — a ZX80 will put a HALT at the end of any line that is less than 32 bytes wide, and not use any storage for the rest of the line. The Z80 will HALT when it gets there and then stay where it is until the interrupt is signalled. So rather than the display taking a fixed 32*24 = 768 bytes on a 1kb machine, it takes only 32 + (number of visible characters).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX81 remedies the situation with a horizontal counter that generates both NMI and WAIT. NMI is edge triggered, not level, so you don't need to worry about where the Z80 is in its stream when you signal it. Using WAIT as well overcomes the problem of phase: it's essentially true to say that there's a maximum amount of time it can take for an NMI to begin processing, and the NMI response honours WAIT so you can stretch the NMI response to a fixed time relative to the horizontal scan.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="10340" LastEditDate="2018-08-11T12:28:22.857" LastActivityDate="2018-08-11T12:28:22.857" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7238" PostTypeId="2" ParentId="7222" CreationDate="2018-08-09T14:02:24.990" Score="4" Body="&lt;p&gt;The 8086,80186,8088 and 80188 all lacked any real memory protection although switching segment registers would protect against accidental overwriting.    The 80286 did support protection so a POSIX OS with hardware enforced memory protection could be written.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NEC V20 and V30 were 8086 clones with a 8080 emulation mode.  Since it wouldn't be able to address more than 64K in 8080 mode one could presumably write a POSIX OS where the kernel ran in 8086 mode while userspace ran in 8080 mode switching between them to make system calls.   Presumably it would still be possible to address the first 256 I/O ports directly which would mean user process could talk directly to some fairly important hardware if the V20/V30 were embedded in a standard IBM PC clone.&lt;/p&gt;&#xA;" OwnerUserId="9022" LastEditorUserId="382" LastEditDate="2018-08-09T16:56:05.863" LastActivityDate="2018-08-09T16:56:05.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7239" PostTypeId="2" ParentId="7220" CreationDate="2018-08-09T15:56:52.857" Score="7" Body="&lt;p&gt;I would say that the Apple II &lt;strong&gt;did&lt;/strong&gt; tap the business and scientific markets!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the business side, VisiCalc on Apple II was a major driving force in many businesses. One could make the case that it was responsible for the majority of the sudden explosion of bond trading in the late 1970s. The ability to easily calculate spreads across hundreds of issues was an enormous leap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was in the sciences, and there were Apple II's everywhere. VisiCalc was a major factor here too. Various I/O boards also added to this, although that was also true for the S-100 machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think it's proper to say the Apple II failed, I think it's much more proper to say that the PC simply displaced it. Its larger memory, higher speed, generally greater storage and better displays meant it could simply handle more tasks than the Apple. That it found more uses as a result should not be surprising.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="357" LastEditDate="2018-10-09T17:43:16.553" LastActivityDate="2018-10-09T17:43:16.553" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7240" PostTypeId="2" ParentId="7181" CreationDate="2018-08-09T17:23:15.750" Score="0" Body="&lt;p&gt;I remember in the 1980's that if you wanted to run MS_dos, or MS_Windows you would need a hard disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1985 you could run AmigaDos (A multi-tasking windowing system) from a single floppy. Of from 1999 you could run QNX, A Unix system, with processes, windowing system, web-browser, internet dialer, etc, from one floppy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you wanted to run MS dos and MS Windows, then that was a around 10 disks (I have tried to find out, but the stuff I have found says 3 disks for dos, I saw the stack, it was more than that. There was two stacks of disks. A small stack (around 4 or 5), and a large stack, nearly twice the size, one was MS_dos, the other MS_Windows.&lt;/p&gt;&#xA;" OwnerUserId="9036" LastActivityDate="2018-08-09T17:23:15.750" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7241" PostTypeId="2" ParentId="7222" CreationDate="2018-08-09T17:37:35.703" Score="2" Body="&lt;p&gt;Yes, but it's not easy. There are at least two possible approaches:&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Option 1: software virutalization&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This one is the canonical/classical solution. Essentially, you write an emulator/interpreter for some sort of virtual machine that &lt;em&gt;does have&lt;/em&gt; kernel/user privilege modes and memory protection. You need to ensure (or assume) your interpreter has no vm-escape bugs.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Option 2: validating programs&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Write the program-loader not to accept arbitrary 8086 machine code, but instead only a highly structured subset with enforcement of memory safety. This requires designing such a subset, and again you need to ensure or assume your implementation doesn't have bugs that break the necessary invariants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either way, to do POSIX or even something POSIX-like you're going to need &lt;strong&gt;lots&lt;/strong&gt; of supplemental memory. There's no way to implement POSIX in the main memory size supported by the 8086, and both of these options will greatly further increase the required memory (and decrease speed).&lt;/p&gt;&#xA;" OwnerUserId="2070" LastActivityDate="2018-08-09T17:37:35.703" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7242" PostTypeId="5" CreationDate="2018-08-09T23:59:59.827" Score="0" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Systems_Network_Architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM Systems Network Architecture (SNA)&lt;/a&gt; is IBM's proprietary networking architecture, created in 1974.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 2008 an IBM publication said:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;with the popularity and growth of TCP/IP, SNA is changing from being a true network architecture to being what could be termed an &quot;application and application access architecture.&quot; In other words, there are many applications that still need to communicate in SNA, but the required SNA protocols are carried over the network by IP.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-08-09T23:59:59.827" LastActivityDate="2018-08-09T23:59:59.827" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7243" PostTypeId="4" CreationDate="2018-08-09T23:59:59.827" Score="0" Body="For questions related to the IBM Systems Network Architecture protocol stack." OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-08-09T23:59:59.827" LastActivityDate="2018-08-09T23:59:59.827" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7244" PostTypeId="1" AcceptedAnswerId="7249" CreationDate="2018-08-10T07:41:43.157" Score="6" ViewCount="498" Body="&lt;p&gt;Some early computers used a membrane keyboard (ZX80, ZX81, Atari 400), or semi-membrane with minimal keys (ZX Spectrum). This is because it was cheaper than a mechanical keyboard. Intuitively I would have thought it would be very reliable and robust (no moving parts).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But according to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1734/why-did-the-sinclair-zx-spectrum-use-a-membrane-keyboard&quot;&gt;Why did the Sinclair ZX-Spectrum use a membrane keyboard?&lt;/a&gt; the membrane was a very common failure point on Sinclair computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this because keyboard membranes are counterintuitively fragile, or did Sinclair just get a bad supplier? For example, what was the track record of the Atari 400 keyboard?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-08-10T15:27:19.230" Title="Membrane keyboard robustness" Tags="&lt;zx-spectrum&gt;&lt;membrane-keyboard&gt;&lt;atari-400&gt;&lt;zx81&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7245" PostTypeId="2" ParentId="7244" CreationDate="2018-08-10T08:15:38.407" Score="8" Body="&lt;p&gt;It depends on a number of factors, a major one being the material that the membrane is made from. Various types of plastics can be used, with different properties. Some will age and become brittle, or otherwise degrade over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The contact mechanism for each switch also varies. Some use metal domes that buckle for a somewhat tactile feel, and the metal can become fatigued and permanently deformed. Others use carbon pads which also degrade with age and use. Such contacts are also prone to getting contaminated with dust and the like.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-08-10T08:15:38.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7246" PostTypeId="1" AcceptedAnswerId="7251" CreationDate="2018-08-10T11:20:16.900" Score="2" ViewCount="449" Body="&lt;p&gt;Early personal computer keyboards could be membrane (Atari 400, ZX80, ZX81), chiclet (PET 2001, ZX Spectrum, Oric, IBM PC Jr) or mechanical/full-travel (later PET, Apple II, TRS-80, Vic-20, and most everything else), in increasing order of cost, quality and frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intuitively, I would be inclined to think either the keyboard matters more to your target market than cost or it doesn't, and in the latter case you might as well use a membrane keyboard, being the cheapest option, but empirically, chiclet keyboards were more common. I'm curious about the thought process that went into this; was it the case that a chiclet keyboard is still pretty cheap, or that a membrane keyboard was just considered too abominably bad to be tolerable?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We do have an estimate for the cost of a mechanical keyboard: &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_64#Manufacturing_cost&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Commodore_64#Manufacturing_cost&lt;/a&gt; puts it at $10. If the cost to the manufacturer of a chiclet keyboard was, say, $2, that would indicate one rationale for its use, and if the cost was $8, that would indicate another rationale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any known data for the cost of a chiclet keyboard, or estimate of how it compared to the other options?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-08-11T01:07:08.413" Title="Cost of a chiclet keyboard" Tags="&lt;history&gt;&lt;keyboards&gt;&lt;cost&gt;&lt;membrane-keyboard&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7247" PostTypeId="1" CreationDate="2018-08-10T12:09:48.367" Score="8" ViewCount="859" Body="&lt;p&gt;I have some ZX Spectrums, and in some of them I observe a kind of &quot;disintegration&quot; process of the main board. The connectors break away etc. During the tests one of the boards burned out :(.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I stop or slow down this ageing process?&lt;/p&gt;&#xA;" OwnerUserId="7409" LastEditorUserId="7946" LastEditDate="2018-08-13T14:17:22.263" LastActivityDate="2018-08-21T10:03:16.533" Title="How to protect a ZX Spectrum mainboard from &quot;ageing&quot;?" Tags="&lt;hardware&gt;&lt;zx-spectrum&gt;&lt;restoration&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7248" PostTypeId="2" ParentId="7247" CreationDate="2018-08-10T12:16:59.633" Score="6" Body="&lt;p&gt;This answer is not strictly related to your question: you can re-create PCB (nowadays PCB manufacturing is cheap) and then just resolder key components on the newer one (also replacing such things as electrolytic capacitors). If you already have a broken ZX, accurate soldering off of all components could be made, then the empty PCB could be both sides scanned -- like it is a piece of paper. After that, newer PCB drawing in some CAD would be next to trivial.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-08-10T12:16:59.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7249" PostTypeId="2" ParentId="7244" CreationDate="2018-08-10T12:41:49.847" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Some early computers used a membrane keyboard (ZX80, ZX81, Atari 400), or semi-membrane with minimal keys (ZX Spectrum).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not just early ones. Membrane keyboards are still made and used today, usually for industrial use, as they have inherent advantages - like every design.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This is because it was cheaper than a mechanical keyboard.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's right, at least for early, mass produced home computers. While a (custom) membrane keyboard has a higher setup cost, the production cost per unit is quite low compared to (back then standard) single switch keyboards. Also, they allow custom layouts and labeling with (next to) no additional cost. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Intuitively I would have thought it would be very reliable and robust (no moving parts).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, they are. Within their capabilities. And of course the materials used.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But according to Why did the Sinclair ZX-Spectrum use a membrane keyboard? the membrane was a very common failure point on Sinclair computers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;First of all, as with most anecdotal collection of 'failure', the 'knowledge' about is the usual mixture of different use cases and different ideas what is a failure.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is this because keyboard membranes are counterintuitively fragile, or did Sinclair just get a bad supplier?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'd say neither. There are many factors to consider:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Like any other keyboard they are designed for a certain use rate - pressing  WASD over 200 hours of game play wasn't part of the specs.&lt;/li&gt;&#xA;&lt;li&gt;Like any other switch there is a switching time and time in between 'key' presses. Membrane keyboards are not really made for fast typing.&lt;/li&gt;&#xA;&lt;li&gt;Material selection does play a role in durability, as for example the top layer may stretch and contact becomes less reliable over prolonged usage&lt;/li&gt;&#xA;&lt;li&gt;As mentioned, they are not really good for typing.&lt;/li&gt;&#xA;&lt;li&gt;Missing key travel&lt;/li&gt;&#xA;&lt;li&gt;Missing feedback&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All these factors (and more) will result in a less than good performance when used in an environment where other qualities are more sought after.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, the way the ZX80/81 input logic is set up, it is appropriate for a membrane keyboard. No dual key usage, only single keystrokes(usually) no typing flow and context sensitive meaning are all features that go well with membrane keyboards - not as much with traditional ones, where simultaneous pressed modifier keys would be appropriate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: If one expect from a lorry to handle (and perform) like a family car, disappointment is built in.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, what was the track record of the Atari 400 keyboard?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, I don't know of any real study here, so it stays anecdotal. Personally I had never an issue with a ZX81 or Atari 400. Worked as expected - and even way more long time stable than 'regular' keyboards, no matter how long they are in storage.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-08-10T15:27:19.230" LastActivityDate="2018-08-10T15:27:19.230" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7250" PostTypeId="2" ParentId="7247" CreationDate="2018-08-10T12:42:57.773" Score="7" Body="&lt;p&gt;The ULA chip in the ZX Spectrum (48K version at least) has been completely (100%) reversed engineered by Chris Smith.  He released the design to the public (look up his book...it's amazing) and since then, people have created new boards that will fit in a ZX Spectrum case.  These boards (along with off-the-shelf components) can recreate the functionality of the ZX Spectrum.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the keyboard membrane, keyboard connector and case have all been remade recently.  You can literally build a new ZX Spectrum in all kinds of colors and run 100% of the software (or so I've read).  All without emulation!  This is pretty amazing in my opinion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those boards are on eBay.  Look for &quot;Harlequin&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One example is here: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.malinov.com/Home/sergey-s-blog/buildingzxspectrumclone-harlequin-part1&quot; rel=&quot;noreferrer&quot;&gt;http://www.malinov.com/Home/sergey-s-blog/buildingzxspectrumclone-harlequin-part1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That site uses a 3D printed case but since then, there have been professional cases made using the original molds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if creating a modern version of the ZX Spectrum is not your cup of tea, then there is no reason why you can't recap the board and &quot;future proof&quot; it as best you can.  The ULA is about the only chip you need to worry about.  The others can be replaced pretty easy and there are tons of new equipment made for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest watching these videos on repairing ZX Spectrum's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/user/JoulesperCoulomb&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/user/JoulesperCoulomb&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He's pretty much the expert on repairing ZX Spectrum's.  Also, he sales (or at least he used to) a modern SRAM replacement for 16K/48K Speccy's.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="2081" LastEditDate="2018-08-13T12:27:43.400" LastActivityDate="2018-08-13T12:27:43.400" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7251" PostTypeId="2" ParentId="7246" CreationDate="2018-08-10T13:30:25.220" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Intuitively, I would be inclined to think either the keyboard matters more to your target market than cost or it doesn't, and in the latter case you might as well use a membrane keyboard, being the cheapest option, but empirically, chiclet keyboards were more common.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Target market &lt;strong&gt;is&lt;/strong&gt; cost. When targeting for example text entry as a business case, the keyboard &lt;em&gt;has to&lt;/em&gt; comply with the expectation and use case. Here one may use cheaper switches (and risk longtime maintenance cost) but can not in any way go for chiclet or membrane. Thus soemething like 100 USD or more on the keyboard alone is a must. And a reason why reliable long term business keyboards always have been of higher cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if the target is to build a computer &lt;em&gt;way&lt;/em&gt; below a 5000+ mark, removing parts is the first step, and what remains needs to be stripped down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of machines like the PET, Apple 2, Atari 400 or similar, the goal was to make a (mostly complete) basic computer available &lt;strong&gt;at all&lt;/strong&gt;. Any keyboard, as funny as it is, is better than no keyboard. Cutting down on keyboard cost is a way to go. Especially considering that a full ASCII keyboard with standard keystroke was in 1977 still more then 100 USD retail (*1). These machines have been constructed &lt;em&gt;prior&lt;/em&gt; to 1977, so selecting an affordable keyboard design is of great influence to the machines final price tag. Even including the hope to go for large quantities and get a hefty discount when ordering the parts.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm curious about the thought process that went into this; was it the case that a chiclet keyboard is still pretty cheap, or that a membrane keyboard was just considered too abominably bad to be tolerable?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For Commodore the choice was rather clear. It's the same keyboard design they already used for their desktop calculators. They already had a working relation with Mitsumi, and the PET keyboard was just a new variant to them (*2). No need to explore a different technology and pay (comparatively) large setup cost for a new machine where they weren't sure if they can sell more than a few hundred anyway. They did just run along with other keyboards made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for Commodore it was the cheapest way to start into microcomputers - much the same way as IBM did go with a keyboard based on others they were already manufacturing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or why the Apple 1 was sold without a keyboard - adding another 100 USD would have for sure killed the 666 USD sales price :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;We do have an estimate for the cost of a mechanical keyboard: &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_64#Manufacturing_cost&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Commodore_64#Manufacturing_cost&lt;/a&gt; puts it at $10.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, as that was the production cost after about 4-5 million pieces. Orders for new keyboards by Commodore were not made for a few hundred as in the beginning of the PET, but for next to &lt;strong&gt;100,000 per month&lt;/strong&gt;. The interesting issue here is that the C64 keyboards were &lt;strong&gt;still&lt;/strong&gt; at 10 USD at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cost at start must have been considerable higher. Even including the fact that it's 'just' a modified VIC-20 keyboard and the first batch was already set to 5,000 units.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If the cost to the manufacturer of a chiclet keyboard was, say, $2, that would indicate one rationale for its use, and if the cost was $8, that would indicate another rationale.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mind to explain what rationale you're implying?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there any known data for the cost of a chiclet keyboard, or estimate of how it compared to the other options?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, but considering that Commodore already had Mitsumi supplying their calculator keyboards, it must have been acceptably low - I'd say at that time (1976) already below 20 USD, making it a real bargain.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Even two years later, in 1979, 70+ USD was acceptable price when browsing thru late 1979 issues of Kilobaud and Byte. So the prices for keyboards were not only high but also only declining slowly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - A look at the &lt;em&gt;&lt;a href=&quot;https://www.voidware.com/calcs/com1540.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Advanced Scientific Calculator Model 1540&lt;/a&gt;&lt;/em&gt; tells much of the story. The 1540 was designed at the same time (1976) as the PET and features the same chicklet keys - much like other Commodore desktop calculators of the same time. Essentially it's an SR-1500 with larger keys and display for dektop use.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-08-10T17:01:50.120" LastActivityDate="2018-08-10T17:01:50.120" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7252" PostTypeId="1" AcceptedAnswerId="7253" CreationDate="2018-08-10T18:26:27.467" Score="9" ViewCount="667" Body="&lt;p&gt;I want to ask about the&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PDP-6&lt;/li&gt;&#xA;&lt;li&gt;PDP-10&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;various implementations KA-10, KI-10, KL-10&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;DECSYSTEM-20&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What are the differences between these? I'm not that interested in architectural differences, cache sizes, etc. I'm most interested in the differences that could feasibly trip up an assembly language programmer.&#xA;Things like the instruction set, register set and so on, how these varied from machine to machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bonus points if you also include the Foonly machines and other clones.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-02-26T19:59:29.100" Title="What are the differences between the various 36-bit computers from DEC?" Tags="&lt;pdp-10&gt;&lt;pdp-6&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7253" PostTypeId="2" ParentId="7252" CreationDate="2018-08-10T20:40:25.207" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What are the differences between these? I'm not that interested in architectural differences, cache sizes, etc. I'm most interested in the differences that could feasibly trip up an assembly language programmer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;TL;DR: No.&lt;/h2&gt;&#xA;&lt;p&gt;For user side assembly programmers next to none - at least until the KL. UUOs (*1) did hide add ons for backward compatibility or non existence anyway, and TOPS-10/20 did offer a whole bucket of duplicate system calls depending on which address mode was used, thus software compatibility was rather high from beginning to end.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;PDP-6&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The original design, notoriously unreliable and hard to sell.&lt;/p&gt;&#xA;&lt;p&gt;The main (hardware) design idea was kind of a bitslice implementation with 36 identical boards, each holding all circuitry needed for ALU and register and memory access for one bit plus communication in between and memory. About 100 transistors on a roughly A4 sized PCB.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;PDP-10&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Basically an unmodified update using improved components. PDP-6 programs could run unmodified. The new name was rather meant to get rid of the bad reputation the PDP-6 had, then based on (user side) differences.&lt;/p&gt;&#xA;&lt;p&gt;Main add on on the software side was the introduction of a high memory segment register pair, allowing a second memory region for every user program, usable for shared memory, or kind of user swappable data segments (*2).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;KA-10&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;First implementation. The main difference to the PDP-6 was being based on DEC Flipchip modules instead of the huge one board per bit design.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;KI-10&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;22 bit physical address, plus paged virtual memory. Again not incompatibility with existing user code. On the system side of course, the new features where available and 18 bit user addresses (*3)had to be mapped onto the 22 bit physical address space. Similar sorting tasks to either CPU of the biprocessor did need new code.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;KL-10&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;First to be called DECsystem-10. Also implemented in ECL. Through a changed internal structure some execution speed changed relative to others. But unless one counted cycles (in a virtual memory system somewhat fruitless anyway), no user level difference with KA or KI.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;DECSYSTEM-20&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really a different machine. When a KL-10 got sold with TOPS-20 it was called DECsystem-20. While DECsystem-10 system CPUs where named 10xx, the very same components did end up in DECsystem-20 CPUs (20xx). For example, a 1090 was essentially the same machine as a 2060. Then again, &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7252/what-are-the-differences-between-the-various-36-bit-computers-from-dec/7253?noredirect=1#comment20278_7253&quot;&gt;as James Large pointed out&lt;/a&gt;: &amp;quot;Different color cabinets though&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;A real user side visible difference came with the&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;MODEL B CPUs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here the 18 bit user address restriction was removed. All prior KL-10 CPUs cut of the address calculation at 18 bit. Now a user program could use the whole 36 bit address range. Due some kind of 'segments' which used the 4 register bits and the indirect bit(*4). A potential trap for old programs. This also lead to huge confusion with duplicate OS-calls depending on what address format was used and so on.&lt;/p&gt;&#xA;&lt;p&gt;The last variant would be the infamous&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;KS-10&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Essentially a Model B CPU without the segmented memory feature. Maybe they intended to replace older PDP-10 here or open up a low end market, in the end, no-one bought them, as the KS CPUs weren’t really cheap either, and could only run TOPS-10.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Bonus points if you also include the Foonly machines and other clones.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The Foonly-1 is basically a KA-10 on steroids. Much like the KL-10. In fact, they are quite related, as they come from partly the same team. It's a bit like as 8080 and Z80 - if some of the Z80 engineers would have returned to Intel again. The goal was to make the fastest PDP-10 possible. It was based on an advanced microprogram architecture and ECL logic. The result was about 4 times faster than the original KA series. And they made DEC working hard to compete with the KL-10 still being only half as fast. On the long run, they couldn't keep up. As usual with compatible manufacturers, where just making the faster the CPU isn't the whole business.&lt;/p&gt;&#xA;&lt;p&gt;While the Foonly was meant as a competition, next to all other clones were targeted as PDP-10 replacements, after DEC cancelled the line in 1983(?). &lt;strong&gt;Systems Concepts&lt;/strong&gt; with their SC-20/25/30 machines maybe the most well known. They where design was  100% compatible, faster than DEC (but slower than the Foonly-1), consumed less power and packed all in much smaller in size. Just they came late. At the time they could deliver, DEC had already convinced many users to switch for their VAX line. The only real success came with what was eventually the largest PDP-10 user of all times: Compuserve, as for them the cost of converting their software was way too high. AFAIR, Compuserve even started to build their own clones based on the SC-30 design to keep their business running way into the 1990s until their demise.&lt;/p&gt;&#xA;&lt;p&gt;Similar XKL's TOAD system of the mid 1990s was meant as a PDP-10 replacement for die hard users. I have no idea how well they sold.&lt;/p&gt;&#xA;&lt;p&gt;There where also other projects, but AFAIK they never reached commercial stage.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - UUO: Undefined User Operations. Opcodes not recognized by hardware did end up in a trap, so the OS could either handle the error or emulate whatever function was needed. Also OS-Calls where made that way.&lt;/p&gt;&#xA;&lt;p&gt;*2 - 'Virtual' memory was done with a set of two registers called base and boundary. Base did hold the real memory address that was mapped at program address zero, while boundary did hole the highest possible address (length). The PDP-10 just added  a second set, which was selected by the highest address bit.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Address calculation on the PDP-6/10 was an interesting beast. While a basic instruction address field featured a register/offset combination (plus indirect bit), much like on a IBM /360, just 4+18 here, the resulting address was again limited to 18 bits (256 KiWords). A feature inherently coded in many TOPS-10 OS calls, requiring a compatibility layer for TOPS-20.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Never really looked into it, so whoever knows more, please step forward.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-08-11T07:18:45.900" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7254" PostTypeId="2" ParentId="7246" CreationDate="2018-08-11T01:07:08.413" Score="4" Body="&lt;p&gt;As is usually the case with manufacturing, the selection of a component/construction type (the keyboard, in this case) is not so simple as just knowing the cost per manufactured unit. This is because the cost per manufactured unit is impacted by the scale of production. Generally speaking, larger volume production leads to lower per unit cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A corollary to this is that the difference in cost between different types of keyboards also narrows as production volume increases. So in asking &quot;How much cheaper is a chiclet keyboard compared to full travel keyboard?&quot; the answer is going to be, &quot;How many are you building?&quot;, roughly speaking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you can see exactly this dynamic at play in the particular history of the retrocomputers you mention. The ZX Spectrum and Plus were higher volume successors of Sinclair's earlier computers. All were designed to be inexpensive, but they were still able to go from matrix to membrane to molded keys as they ramped up production. Similarly, Commodore dropped the chiclet keys from the PET 2001 in its first revision and upon knowing they could take the risk to increase production. The VIC-20 and C64 were envisioned as high-volume products from the beginning, so they were able to include full-travel molded keys and better mechanisms. Even IBM quickly realized they MUST offer a better keyboard option immediately after shipping the early units, though that change wasn't enough to rescue the PCjr from obscurity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point is you can understand the design choices better by understanding the volume manufacturing constraints that the designers had in mind. For computer keyboards, the need for touch-typing was essential for a lot of the users. Nobody settled for a chiclet keyboard if they could afford something better, and affording something better was mostly dependent on the manufacturer having enough success (or confidence) to ramp the production higher.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-08-11T01:07:08.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7255" PostTypeId="2" ParentId="7222" CreationDate="2018-08-11T05:20:06.417" Score="0" Body="&lt;p&gt;The Minix operating system implemented Virtual Memory Management on 8086 in software. Minix source code is available.&lt;/p&gt;&#xA;" OwnerUserId="10264" LastActivityDate="2018-08-11T05:20:06.417" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7256" PostTypeId="1" AcceptedAnswerId="7645" CreationDate="2018-08-11T20:34:35.673" Score="6" ViewCount="578" Body="&lt;p&gt;Looking at the &lt;a href=&quot;http://www.classiccmp.org/cpmarchives/trs80/mirrors/pilot.ucdavis.edu/davidk/trs80/software/disk_dos.htm&quot; rel=&quot;noreferrer&quot;&gt;TRS-80 Disk Software Page&lt;/a&gt;, there's a rather extensive selection of DOS options that seem to work with the 4P and also claim high compatibility with the Tandy &quot;TRSDOS&quot; option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering that I have a 4P with two floppy drives, and I'd like to run Model III and Model 4 native software (not CP/M), is there a particular DOS which is considered superior? I think my main criteria are compatibility, ease-of-use, and easy booting into &lt;strong&gt;both&lt;/strong&gt; Model 4 and Model III modes. The 4P has no Model III ROM, so the DOS needs to support disk loading it for compatibility with Model III programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I'm not concerned about Y2K compatibility.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="3290" LastEditDate="2020-06-05T02:51:36.580" LastActivityDate="2020-06-05T02:51:36.580" Title="Which DOS for a TRS-80 Model 4P?" Tags="&lt;floppy-disk&gt;&lt;operating-system&gt;&lt;trs-80&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7257" PostTypeId="2" ParentId="3069" CreationDate="2018-08-11T21:35:54.547" Score="6" Body="&lt;p&gt;As I recall, X10 was mostly done as part of the MIT 'Athena' project with a lot of contribution from DEC WSL.  MIT is were we got our source tape from. At that time, we would have been running VAXStation IIs running a somewhat locally modified BSD 4.2/4.3 and Sun-3 running SunOS 3.5. So you'd be looking at a pre-POSIX BSD build environment (pcc or SunCC based) and the Athena source.  There are emulators for VAX (simh) and Sun-3 (simh or TME), the OSes can be found on TUTS, and you should still be able to find the Athena sources someplace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The mention of Apollo DN running X10 rings a bell.  I never saw it, though.&lt;/li&gt;&#xA;&lt;li&gt;I know that Bell Technologies sold an Intel i82786 based ISA bus video card that shipped with X10 running under Interactive SVR3 Unix on i386.  They did not, to my knowledge, ever disclose their source.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-08-11T21:35:54.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7258" PostTypeId="2" ParentId="2421" CreationDate="2018-08-12T03:29:50.003" Score="16" Body="&lt;p&gt;In addition to the i8087 &amp;amp; i8089, intel had the i80130 and i80150 &quot;Operating System Coprocessors&quot;.  These were single-chip bundled timers and irq controllers that had a subset of the iRMX-86 ('130) or CP/M-86 ('150) in ROM.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-08-12T03:29:50.003" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7259" PostTypeId="2" ParentId="7212" CreationDate="2018-08-12T16:08:02.987" Score="2" Body="&lt;p&gt;There are two changes necessary to the existing configuration to make this work (basically):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Change both AS/400 Network attributes so they are both &lt;code&gt;*ENDNODE&lt;/code&gt;,&lt;/li&gt;&#xA;&lt;li&gt;Change both AS/400 Network attributes so they're automatically selecting a Netserver (NN) to query for names: &lt;code&gt;NETSERVER(*LCLNETID *ANY)&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Remove one link configuration to the adjacent Cisco router &lt;strong&gt;on one side only&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Remove the link configuration on the other Cisco router. Wait a minute and re-add the connection with the &lt;code&gt;nns&lt;/code&gt; statement. This instructs the router to do name searches over this connection on the adjacent router.&lt;/li&gt;&#xA;&lt;li&gt;There's also no need to have a &lt;code&gt;QAPPNRMT&lt;/code&gt; configuration list (entry).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Let APPN do it's exchanges for peer discovery and after a minute or so the connection works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, the configuration &lt;strong&gt;must not&lt;/strong&gt; be symmetric; this was the main culprit. Even if IBM states APPN is true peer-to-peer networking, this isn't true for the topology at whole. The most important thing is to observe how both routers negotiate their adjacent peer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Passive side:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   SNA Topology Entries&#xA;    Dest. Node Name   Type  TG#      TG Type             TG Status&#xA;   -----------------  ----  ---  ----------------  ---------------------&#xA;1&amp;gt; FRIEND.FRIENDRT    Enpt   21  Downlink to BrNN  CP-CP sessions active &#xA;2&amp;gt; POCNET.NIBBLER     Enpt   21  Downlink          CP-CP sessions active&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Active side:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   SNA Topology Entries&#xA;    Dest. Node Name   Type  TG#      TG Type             TG Status&#xA;   -----------------  ----  ---  ----------------  ---------------------&#xA;1&amp;gt; POCNET.DSLRTR      Intr   21  Uplink            CP-CP sessions active &#xA;2&amp;gt; FRIEND.SLVRLAKE    Enpt   21  Downlink          CP-CP sessions active &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Unfortunately it seems that Cisco devices talking to each other in Enterprise Extender Mode isn't very reliable. Both Cisco-Routers sometimes throw errors that the link went down when it wasn't. The adjacent router didn't recognize this alleged outage, so the connection seems to be established but hangs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I replaced the EE-link over the VPN between the sites with Remote Source Route Bridging over TCP. This incorporates virtual ring interfaces which are surprisingly still available even on recent IOS versions. See this &lt;a href=&quot;https://kb.pocnet.net/images/b/bd/APPNv4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Network Diagram&lt;/a&gt; for better understanding. I renamed &lt;em&gt;FRIENDxx&lt;/em&gt; on the right side with &lt;em&gt;APPN&lt;/em&gt; so it's more readable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Changstein&lt;/em&gt; is a passive device for SNA, it just Source-Route bridges Ring 1 (where one AS/400 resides) into the &lt;code&gt;Virtual-TokenRing 0&lt;/code&gt; interface of &lt;em&gt;dslrtr&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Nibbler&lt;/em&gt; (left AS/400) creates an APPN connection with the MAC of &lt;code&gt;Virtual-TokenRing 0&lt;/code&gt; to the SNAsw facility on &lt;em&gt;dslrtr&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Viewed from right, &lt;em&gt;slvrlake&lt;/em&gt; also creates an APPN-Session to &lt;em&gt;rtka01&lt;/em&gt;. There's only Ethernet in that location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both &lt;em&gt;dslrtr&lt;/em&gt; and &lt;em&gt;rtka01&lt;/em&gt; participate in a virtual ring over RSRB/TCP. Both SNAsw-facilities on both routers connect to their adjacent counterpart via the appropriate &lt;code&gt;Virtual-TokenRing&lt;/code&gt; interface. Remember, only one router (here: &lt;em&gt;rtka01&lt;/em&gt;) must initiate the connection!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This configuration makes sure that bridged traffic stays as much local as possible. Cisco SNAsw works a a high-level protocol router for APPC sessions and also indirectly as protocol converter between SNA/APPN and IP, so the traffic can flow over the IP-only VPN.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also reduced the maximum frame size in several places (in the Cisco configuration only) because stock Ethernet cannot handle the large frame sizes which Token Ring permits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When experimenting with APPN, be aware that topology updates take their time. Stuff which doesn't work may work a few minutes later without touching anything. Recognizing this helped a &lt;strong&gt;lot&lt;/strong&gt; with proper debugging and repeatable outcomes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.cisco.com/c/en/us/td/docs/ios/bridging/configuration/guide/15-s/br-15-s-book/br_sna_swtich_svc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cisco SNAsw Guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.cisco.com/c/en/us/td/docs/ios/bridging/configuration/guide/15-s/br-15-s-book/br_srb.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cisco RSRB Guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10295" LastActivityDate="2018-08-12T16:08:02.987" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7260" PostTypeId="2" ParentId="4374" CreationDate="2018-08-12T16:21:29.973" Score="2" Body="&lt;p&gt;The LC (and LC II) power supplies are build very tight. When running, heat spots build up inside, especially with higher load (Ethernet card, fast disk, external floppy drive, term power for external SCSI termination, …).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a LC with no bad caps in the power supply but a lot of cracked soldering pins, especially around components which generate a lot of heat. This can result in a multitude of erratic behavior. I recommend to re-solder the whole board. Take care of component pins which have a thick oxide coating because of prolonged exposure to heat in a cracked solder spot. If re-soldering this particular component doesn't look as expected, take out the part and scratch the pin blank. Apply solder and put it in again.&lt;/p&gt;&#xA;" OwnerUserId="10295" LastActivityDate="2018-08-12T16:21:29.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7261" PostTypeId="2" ParentId="1667" CreationDate="2018-08-12T16:38:03.307" Score="0" Body="&lt;p&gt;I once tried to get rid of electrolyte residue on an SE/30 board. After recapping the board worked but after flooding it with denatured ethyl alcohol and carefully brushing it with a toothbrush, it was dead. Simasimac. (Yes, I let it dry overnight.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that my treatment allowed liquid to enter some ICs and did irrevocable harm.&lt;/p&gt;&#xA;" OwnerUserId="10295" LastEditorUserId="276" LastEditDate="2018-08-12T17:30:12.363" LastActivityDate="2018-08-12T17:30:12.363" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7262" PostTypeId="1" AcceptedAnswerId="10879" CreationDate="2018-08-13T03:52:26.673" Score="22" ViewCount="1295" Body="&lt;p&gt;It was in the movies &quot;Star Trek II: The Wrath of Khan&quot; (1982) and &quot;Serenity&quot; (2005). It resembles the Honeywell 6000 series but I can't find a photo of it that matches exactly. Could it be a custom design or a prototype that never went into production?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gW3QE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gW3QE.png&quot; alt=&quot;Star Trek II&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/rHsSo.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rHsSo.png&quot; alt=&quot;Serenity (1)&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/sf0uZ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sf0uZ.png&quot; alt=&quot;Serenity (2)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="7208" LastEditDate="2019-09-01T23:11:06.977" LastActivityDate="2019-09-01T23:11:06.977" Title="Identify this front panel" Tags="&lt;identify-this-computer&gt;&lt;front-panel&gt;" AnswerCount="2" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="7263" PostTypeId="1" AcceptedAnswerId="7266" CreationDate="2018-08-13T04:22:36.330" Score="31" ViewCount="9204" Body="&lt;p&gt;Which OS was the first to use &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;S&lt;/kbd&gt; and &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;Q&lt;/kbd&gt; on the console for pause and continue?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I first discovered &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;S&lt;/kbd&gt; in IBM PC DOS 1.1.&lt;/p&gt;&#xA;" OwnerUserId="10351" LastEditorUserId="10260" LastEditDate="2019-02-09T18:29:00.573" LastActivityDate="2020-11-13T18:40:24.000" Title="History of Ctrl-S and Ctrl-Q for flow control" Tags="&lt;history&gt;&lt;terminal&gt;&lt;ascii&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7264" PostTypeId="2" ParentId="7263" CreationDate="2018-08-13T05:14:09.150" Score="24" Body="&lt;p&gt;First &lt;strong&gt;OS&lt;/strong&gt; is hard to say. The codes go back to the 1960s with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletype_Model_33&quot; rel=&quot;noreferrer&quot;&gt;Teletype Model 33&lt;/a&gt;. I have a hunch the original usage was not part of an operating system but at a lower level. In later times, certainly by the 1980s, there were plenty of devices that functioned with software flow control at the hardware level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microcomputer operating systems that supported Ctrl-S/Ctrl-Q included CP/M 2.2. I found plenty of versions of the CP/M 2.2 manual with multiple copyright dates from 1976 through 1984 that included clear references to this feature, but it is not clear at what time it was actually added. I suspect it was very early on (closer to 1976), but I'm not sure.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2018-08-13T05:14:09.150" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7265" PostTypeId="2" ParentId="7263" CreationDate="2018-08-13T07:56:37.083" Score="15" Body="&lt;p&gt;It was nothing to do with an OS as such.  Ctrl-S and Ctrl-Q are simply XON and XOFF in ASCII.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These codes are used in serial communications to pause and resume sending.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With hardware handshake on RS232 and similar communications standards used the RTS (RequestTo Send) &amp;amp; CTS (Clear To Send) handshake lines.&lt;br&gt;&#xA;Many comms links were, and still are, three wire - send, receive and earth.  On these, you use &lt;a href=&quot;https://en.wikipedia.org/wiki/Software_flow_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;Software handshake&lt;/a&gt;.  The receiving end will send XOFF to tell the sender that its input buffers were nearly full and then XON to tell the sender to resume once the buffer had emptied a bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These codes go back to the dawn of RS-232 in 1960.  A standard that was deliberately OS-agnostic.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2019-08-05T13:39:10.567" LastActivityDate="2019-08-05T13:39:10.567" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7266" PostTypeId="2" ParentId="7263" CreationDate="2018-08-13T08:01:29.193" Score="55" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Which OS was the first to use Ctrl-S and Ctrl-Q on the console for pause and continue?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;p&gt;It's been developed independently of anything one might call an OS (*1). It's (nowadays) called &lt;a href=&quot;https://en.wikipedia.org/wiki/Software_flow_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;Software Flow Control&lt;/a&gt; and has been around since the early days of computers using ASCII I/O, as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletype_Model_33&quot; rel=&quot;nofollow noreferrer&quot;&gt;Model 33&lt;/a&gt; Teletype used the device control codes DC1/DC3 (CTRL-Q/CTRL-S) to make a sender stop or resume transmission.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long Read:&lt;/h2&gt;&#xA;&lt;p&gt;Today it's defined in the &lt;a href=&quot;https://www.itu.int/rec/T-REC-V.43-199802-I/en&quot; rel=&quot;nofollow noreferrer&quot;&gt;ITU-T V.43&lt;/a&gt; standard as &lt;em&gt;'Flow control by use of DC3/DC1 characters'&lt;/em&gt;, but has been around since even before the definition of ASCII. The oldest origins I know are the &lt;a href=&quot;https://en.wikipedia.org/wiki/Fieldata&quot; rel=&quot;nofollow noreferrer&quot;&gt;FIELDATA&lt;/a&gt; alphabet definitions starting in 1956. While itself based on the 5 bit &lt;a href=&quot;https://en.wikipedia.org/wiki/Baudot_code#ITA2&quot; rel=&quot;nofollow noreferrer&quot;&gt;International Alphabet No.2&lt;/a&gt; (ITA2), FIELDATA used 7 bit words (*2). Here for the first time two characters were officially (*3) defined to control transmission:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;RTR - Ready to Receive     (Code 49) &#xA;NRR - Not Ready to Receive (Code 50) &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;These characters were to be used by receiving equipment to signal non-ready conditions and make the sender stop (with a delay of up to two characters). This functionality was incorporated by &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletype_Corporation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Teletype&lt;/a&gt; in what they delivered for military use.&lt;/p&gt;&#xA;&lt;p&gt;FIELDATA also defined many more control characters, and while most made it into ASCII (*3), these didn't. Instead a set of four general-purpose &lt;em&gt;device control codes&lt;/em&gt; got added. When Teletype defined the Model 32/33, they decided to use two (*4) of these four codes for their start/stop feature. The result was:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DC1 - XON  (Code 17)&#xA;DC3 - XOFF (Code 19)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The Model 33 not only became much used with early computers, especially minis, it also gave the template for early terminals, AKA glass TTYs. Application and later device drivers learned to obey these commands codes to avoid overrunning slow equipment.&lt;/p&gt;&#xA;&lt;p&gt;As usual it was fast discovered by users, that it's possible to issue DC1/3 by pressing CTRL-Q/S, thus handy control of fast scrolling text output. Neat, isn't it? The rest, I guess, is history.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;More History&lt;/h2&gt;&#xA;&lt;p&gt;Already the &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletype_Model_28&quot; rel=&quot;nofollow noreferrer&quot;&gt;Teletype Model 28&lt;/a&gt;, originally designed for military use, had an optional way to use a received &lt;code&gt;.&lt;/code&gt; (or &lt;code&gt;#&lt;/code&gt;) to stop the (printing) motor. Thus sneaking in control function. This was part of the so called 'Stunt Box' where a character or a character sequence could be detected and a switch could be flipped. This not only meant closing an electric contact, but literally pushing a rod that could flip a switch or whatsoever needed.&lt;/p&gt;&#xA;&lt;h2&gt;The Beginning&lt;/h2&gt;&#xA;&lt;p&gt;This brings us to the introduction of the very first control characters with ITA2 of 1924 as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CR   - Carriage Return&#xA;LF   - Line Feed&#xA;BELL - Ring a Bell&#xA;WRU  - Who aRe You (*5)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Before that, teletype text didn't have any structure of lines and even with ITA2, the page was still not 'invented'.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Addendum:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7263/history-of-ctrl-s-and-ctrl-q#comment20316_7266&quot;&gt;A point&lt;/a&gt; has been made by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/780/tofro&quot;&gt;Tofro&lt;/a&gt;, that the concept of control characters is older, as &lt;a href=&quot;https://en.wikipedia.org/wiki/Morse_code&quot; rel=&quot;nofollow noreferrer&quot;&gt;Morse Code&lt;/a&gt; already uses &lt;a href=&quot;https://en.wikipedia.org/wiki/Prosigns_for_Morse_code&quot; rel=&quot;nofollow noreferrer&quot;&gt;prosigns&lt;/a&gt; ('Procedural Signs') for special messages, including flow control. For one, these are later additions grown out of custom, but more importantly, they are not separate control characters, but reuse of existing combinations which may or may not be understood by the context the receiver works in.&lt;/p&gt;&#xA;&lt;p&gt;For example &lt;em&gt;'Wait'&lt;/em&gt; uses the same code as ampersand &lt;code&gt;&amp;amp;&lt;/code&gt; which in itself is a digraph of &lt;code&gt;A&lt;/code&gt;and &lt;code&gt;S&lt;/code&gt; (Both letters sent consecutively without a letter space; (*6). Similar the signal used for &lt;em&gt;'Continue'&lt;/em&gt; is the letter 'K' officially called &lt;em&gt;'Over'&lt;/em&gt;. There is no hint in the encoding what meaning this letters are supposed to have.&lt;/p&gt;&#xA;&lt;p&gt;In a more general view it's a problem with in-band signalling. Here, protocol information needs to be transmitted together with a payload. To handle this on code layer, separate and unique codes for protocol handling are needed. Otherwise an additional encoding layer (escape sequences) atop the character encoding but before protocol must be added.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line, ITA-2 was the first to go that route, and FIELDATA the first to incorporate flow control - with Teletype bringing that into applied ASCII.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Well, then again, assuming that an OS is after all nothing more than a set of rules followed up by its components, then even handling such rules may qualify. No-one says an OS needs to have memory protection or a GUI at all ;)&lt;/p&gt;&#xA;&lt;p&gt;*2 - Or &lt;em&gt;Start-Stop Seven-Unit Code&lt;/em&gt; as they called it.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Like blocking, (not) acknowledgement, field separators or the 'Special Character'.&lt;/p&gt;&#xA;&lt;p&gt;*4 - The other two where used by the sender to control the paper tape punch. &lt;code&gt;DC2&lt;/code&gt; as &lt;code&gt;RION&lt;/code&gt;, &lt;code&gt;DC4&lt;/code&gt; as &lt;code&gt;RIOFF&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;*5 - Looks like Leetspeak or sounding letters as words aren't really a new invention after all, does it?&lt;/p&gt;&#xA;&lt;p&gt;*6 - Digraphs are a constant issue of problems in morse, as it's often hard to decide if a sequence is meant to be a digraph letter or two single letters. Usually it takes knowledge of the language to be safe here. More complicating it for native English speakers, as the rest of the world uses a huge number of digraphs for their language special characters. Even more, the simple joining of two letters in Morse may lead to various valid interpretations, so again, human knowledge is the only way to pick the most plausible interpretation&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-13T18:40:24.000" LastActivityDate="2020-11-13T18:40:24.000" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="7267" PostTypeId="1" AcceptedAnswerId="7269" CreationDate="2018-08-13T11:21:01.840" Score="13" ViewCount="702" Body="&lt;p&gt;I've been reading &lt;i&gt;&lt;a href=&quot;https://www.xlibris.com/bookstore/bookdetail.aspx?bookid=SKU-0051119050&quot; rel=&quot;noreferrer&quot;&gt;Achieving Accuracy: A Legacy of Computers and Missiles&lt;/a&gt;&lt;/i&gt; by M. W. McMurran, who helped develop the &lt;a href=&quot;https://en.wikipedia.org/wiki/D-17B&quot; rel=&quot;noreferrer&quot;&gt;Autonetics D-17&lt;/a&gt; guidance computer for the Minuteman ICBM in the early 1960s. For all its specialised features, the D-17 has at least a family resemblance to general-purpose magnetic drum computers like the IBM 650 (after the Minuteman I was retired, some surplus D-17s made their way to universities and &lt;a href=&quot;http://bitsavers.org/pdf/autonetics/d17/&quot; rel=&quot;noreferrer&quot;&gt;bitsavers.org&lt;/a&gt; has a good collection of documents from them).&lt;/p&gt;&#xA;&lt;p&gt;However, McMurran suggests that the D-17 was a break from Autonetics tradition, and its design was in part reaction to a competing proposal from TRW Space Technology Laboratories:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The STL &amp;quot;Blue Book&amp;quot; computer was to be a &amp;quot;compulsory-optimum&amp;quot;&#xA;programmed whole-value machine. [...] Autonetics computer designers&#xA;had virtually no experience with whole-value general-purpose real-time&#xA;systems. But [overnight we] blocked out a general-purpose alternative&#xA;to Blue Book. By then, we had developed very serious concerns about&#xA;the speed of any emerging serial whole-value computer [but those&#xA;concerns were addressed by features of the D-17 design]. (p. 276)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The part I'm struggling with here is &lt;b&gt;what is meant by whole-value computation, and why was it a problem for real-time systems?&lt;/b&gt;&lt;/p&gt;&#xA;&lt;p&gt;One possible answer comes from the fact that the first digital guidance systems were modelled after analogue computers, but were built around &lt;a href=&quot;https://en.wikipedia.org/wiki/Digital_differential_analyzer&quot; rel=&quot;noreferrer&quot;&gt;digital differential analysers&lt;/a&gt; (DDAs,&#xA;not to be confused with the graphics algorithm) which were&#xA;hard-wired elements for solving discretised differential equations at high speed. McMurran describes two Autonetics DDA guidance&#xA;computers that preceded the D-17, NATDAN (the North American Transistorized Digital ANalyzer, developed for the &lt;a href=&quot;https://en.wikipedia.org/wiki/SM-64_Navaho&quot; rel=&quot;noreferrer&quot;&gt;Navaho&lt;/a&gt; cruise missile), and Verdan (the VERsatile Digital ANalyzer):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[NATDAN] was rate-limited, but could solve an amazing array of&#xA;complex differential equations one pulse at a time, as long as the&#xA;solution moved at a rate NATDAN could handle. [...] Since NATDAN&#xA;had no whole value section, communication with guidance and control&#xA;systems was a lot easier for it than communicating with people.&#xA;(pp. 138-139)&lt;/p&gt;&#xA;&lt;p&gt;The [Verdan] design started with the NADAN (&lt;i&gt;sic&lt;/i&gt;) DDA. By 1955,&#xA;it had become clear that even embedded control computers frequently&#xA;needed to communicate with whole-value based systems, often with&#xA;people in the loop. (pp. 142-143)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because DDAs dealt with rates of change discretised into relatively small increments (e.g. integrating accelerometer output to compute vehicle velocity and hence position), I'm guessing this made them faster in a serial computer than dealing with full-precision variables representing physical quantities across a range of scales. However, I suspect that's too simplistic an answer: is the phrase &amp;quot;whole value&amp;quot; more than just a synonym for &amp;quot;general purpose&amp;quot; computation in this context?&lt;/p&gt;&#xA;&lt;p&gt;EDIT: Since posting I've found a couple of early papers on DDAs that give insight into the digital techniques used in systems like NATDAN and Verdan:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;R. E. Sprague, &lt;a href=&quot;https://www.jstor.org/stable/2002747&quot; rel=&quot;noreferrer&quot;&gt;Fundamental Concepts of the Digital Differential Analyzer Method of Computation&lt;/a&gt;. &lt;i&gt;Mathematical Tables and Other Aids to Computation&lt;/i&gt; v6n37 (Jan. 1952), pp. 41-49&lt;/li&gt;&#xA;&lt;li&gt;John F. Donan, &lt;a href=&quot;https://www.jstor.org/stable/2002550&quot; rel=&quot;noreferrer&quot;&gt;The Serial-Memory Digital Differential Analyzer&lt;/a&gt;. &lt;i&gt;Mathematical Tables and Other Aids to Computation&lt;/i&gt; v6n38 (Apr. 1952), pp. 102-112&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4243" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-08-16T21:43:32.960" Title="What was &quot;whole-value computation&quot; in early real-time systems?" Tags="&lt;history&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7268" PostTypeId="2" ParentId="7267" CreationDate="2018-08-13T14:00:10.127" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The part I'm struggling with here is what is meant by whole-value computation,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It means digital numeric system using integers, instead of analog or digital/analog systems. The D17 used 24 bit integer for all calculation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and why was it a problem for real-time systems?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It needs a lot of operations to do the job, thus considerable time and all done in a single computer (to reduce weight *1), while previous designs used two analog operating systems.&lt;/p&gt;&#xA;&lt;p&gt;A digital system has to go through the whole calculation for a new result, while an analog's reaction time is tied to the input difference, thus fast, practically instant, on small chances - which are the usual case - while also offering in-between correction.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;The Minuteman is somewhat of a turning point in US rocket development as it's the first major design that's no longer a variation of German WW2 technology (*2). This is not only due the use of solid fuel for a large scale guided missile, but also the guidance systems. The guidance systems until that point where derived from the basic designs as used in V1/V2 guidance. While much improved, these still consisted of separate modules of an autopilot 'planning' the route to follow and a correction unit comparing this with the flight data delivered by an inertial platform, with the result sent to motor/control surfaces.&lt;/p&gt;&#xA;&lt;p&gt;While developments previous to the D17 were greatly improved, in parts even digitalized, it was the D17 that replaced it by an integrated, all digital system. The digital nature made it possible to reduce the system in size and weight and also greatly reduce the setup time, as setting a new destination was now merely transferring a new data set onto the hard disk, which could be done in minutes instead of hours (*3)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Weight was a major design goal for the Minuteman, beside short reaction time. It grossed only about 1/6th of the competing Soviet designs. Just by sheer size the Soviets hat the luxury to load a full-blown tube computer onto a &lt;a href=&quot;https://en.wikipedia.org/wiki/R-7_Semyorka&quot; rel=&quot;noreferrer&quot;&gt;R-7&lt;/a&gt; - which BTW was effectively the first iteration of today's Soyuz design.&lt;/p&gt;&#xA;&lt;p&gt;*2 - In contrast the mentioned, in parallel developed Navaho missile is still a direct descendant of the V1 Buzz-Bomb, based on recommendations already made by German scientists during the war for future vehicles. Now beefed up in size and with improved engines and guidance systems, partly digital but still split in two.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Using air-cushioned gyroscopes further made it possible so save on spin-up time making all the other improvements count, but that's a different story.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-08-13T14:17:15.317" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7269" PostTypeId="2" ParentId="7267" CreationDate="2018-08-13T15:39:08.177" Score="11" Body="&lt;p&gt;This is fundamentally talking about how an analog input system (missile inertial guidance, in this case) can be interfaced to a digital computer whose sole purpose is the eventual output to another analog system (missile control surfaces, in this case).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An inertial guidance system consists of a gyroscope on gimbals that will mechanically create an analog output that measures acceleration in each of the 3 planes of 3d space. Summing these 3 output vectors would produced a single vector representing the total &lt;strong&gt;instantaneous&lt;/strong&gt; acceleration. The integral of that acceleration vector over time is the instantaneous velocity of the guidance system, and the second integral would be the guidance system's current position. Hitting a target downrange is just a computation of the path needed to traverse from the initial (launch) position to the target position. Such computations can be done by a digital computer, but those computers must maintain sufficient accuracy while also providing sufficient computational speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since a missile like the Minuteman is intended to be autonomous, it has to leave the launchpad already &quot;programmed&quot; with the flight path, and then it has to constantly guide itself to the target by comparing its current position, derived from gimbal vectors, with the programmed position along the flight path. All of this can be accomplished without digital computers, but using digital computers makes sense for portions of the system that might interface with other computers, like external targeting computers, or databases, or with human operators of such external systems. Also, there may be benefits in size, weight, power consumption, and (given a good enough digital computer) accuracy to using digital computers. Also a recognized first brought about with the use of a digital computer for the Minuteman was the flexibility to run other programs, like on-board status tests, when the missile was in the silo, and improve missile performance with software upgrades.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since digital computers can only work with digital values, the analog inputs must at some stage be &quot;digitized&quot; into &quot;whole values&quot; which are just binary numbers. Then computation can proceed. If the digitization happens at the gimbal output, then you represent 3 vectors as 3 complex number &quot;whole values&quot; (a + b&lt;em&gt;i&lt;/em&gt;) stored digitally. From there the computer can perform the necessary maths. Then, downstream, you need some D-to-A conversion to manipulate the missile control surfaces. This creates the necessary missile acceleration then used to fly back to the pre-determined path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the timeframe of early-1960s development, small transistorized computers obviously would have been limited in their computational power (precision and speed). And those are the issues the engineers would have to overcome. I suspect the book goes into considerably more details on how they did overcome those issues.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-08-14T15:44:51.407" LastActivityDate="2018-08-14T15:44:51.407" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7270" PostTypeId="1" CreationDate="2018-08-13T17:09:45.767" Score="18" ViewCount="1508" Body="&lt;p&gt;I couldn't find anything but is there any reason for choosing &lt;code&gt;%&lt;/code&gt; over &lt;code&gt;$&lt;/code&gt; like in *nix shells?&lt;/p&gt;&#xA;" OwnerUserId="1981" LastEditorUserId="15334" LastEditDate="2020-09-04T05:51:35.273" LastActivityDate="2020-09-22T08:49:56.310" Title="Why did MS-DOS choose the percent symbol to designate variables?" Tags="&lt;history&gt;&lt;ms-dos&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7271" PostTypeId="2" ParentId="7270" CreationDate="2018-08-13T17:34:02.833" Score="11" Body="&lt;p&gt;By using a &lt;code&gt;\&lt;/code&gt; as path separator, they needed a different marker for control character encoding, and did choose &lt;code&gt;$&lt;/code&gt; which in turn meant that the variable marker need to be another one, which turned out as &lt;code&gt;%&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So by choosing &lt;code&gt;%&lt;/code&gt; instead they could have kept &lt;code&gt;$&lt;/code&gt; for variables, but then again is the parser structured a bit different as it allows concatenated strings, thus needing a finishing marker at the end of named variables. So they didn't and the rest is history :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I'm not complete so sure right now about the full implications, but &lt;code&gt;$&lt;/code&gt; is used at least in three different ways on the MS-DOS command line and in batch.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Expand a batch variable to a full path name with &lt;code&gt;%~$PATH:&amp;lt;varnumber&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Defining special content for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Command-line_interface#Command_prompt&quot; rel=&quot;noreferrer&quot;&gt;PROMPT&lt;/a&gt; command like date and time as in &lt;code&gt;prompt $d $t$g&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Code the escape character in parameters as &lt;code&gt;$e&lt;/code&gt; like &lt;code&gt;echo $e[0m&lt;/code&gt; for screen reset.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Especially the does give the lead here, as marking special characters in Unix is done via a backslash &lt;code&gt;\&lt;/code&gt;, which in DOS marks a directory level. MS had to use &lt;code&gt;$&lt;/code&gt; instead, so &lt;code&gt;\e&lt;/code&gt; became &lt;code&gt;$e&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, but way later (DOS 5)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/DOSKEY&quot; rel=&quot;noreferrer&quot;&gt;DOSKEY&lt;/a&gt; used &lt;code&gt;$&lt;/code&gt; to indicate special functions in macro generation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Surprisingly, its predecessor CP/M did use &lt;code&gt;$&lt;/code&gt; as variable indicator as well as marker for special meanings in some commands (like privileges in &lt;code&gt;STAT&lt;/code&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In CP/M batch files are run with the &lt;code&gt;SUBMIT&lt;/code&gt; command, which will read a file (standard ending &lt;code&gt;.SUB&lt;/code&gt;) and feed each line to the OS, after replacing variables marked with &lt;code&gt;$&lt;/code&gt;. DOS has this feature build in and treats &lt;code&gt;.BAT&lt;/code&gt; files like programs.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-08-14T16:52:42.003" LastActivityDate="2018-08-14T16:52:42.003" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7272" PostTypeId="2" ParentId="7220" CreationDate="2018-08-13T20:27:02.640" Score="3" Body="&lt;p&gt;Apparently one of the sticking points of Apple achieving a foothold in an IBM workplace is that Apple did not compete with IBM to completely match the &lt;em&gt;professional business/scientific hardware capabilities&lt;/em&gt; that IBM offered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the particular nitpicks had to do with parity memory. IBM offered support for it on the PC/AT and Apple did not, and so the eggheads in a business dominated by IBM could say, &lt;em&gt;&quot;We are not going to trust our critical calculations to the unchecked memory system of Apple products.&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple did not offer support for memory parity until the development of the Macintosh IIci and Macintosh IIfx, and by this point IBM was very firmly established in the business and scientific market.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2018-08-13T20:27:02.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7273" PostTypeId="2" ParentId="7181" CreationDate="2018-08-13T20:58:07.443" Score="1" Body="&lt;p&gt;Schools used Apple II computers with a twisted pair cabling system known as &lt;strong&gt;DigiCard&lt;/strong&gt;, which had a dedicated server box with a SCSI drive. The MECC Apple II educational software library was available from any computer by simply turning it on without a disk in the drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another company had an Apple II school networking system called &lt;strong&gt;Mastery Development&lt;/strong&gt;, which used large 25-27 pin data cables strung in daisy-chain fashion from one Apple II to the next, and up to about 32 computers across the chain. The server was an Apple IIgs outfitted with the Apple High Speed SCSI controller, disk image data stored in ProDOS volumes, and memory expansion for caching. It offered similar capabilities to DigiCard, including the MECC software library, plus also student accounts and software written specifically for the MD platform for collecting student data from programs run on the network.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An older Apple II networking system used 6-pin data cables (I've seen the abandoned cables in a building, but not the complete system) to connect to a file server, and store a database of careers / job employment opportunities. It was also available on floppy disks, but needed a stack of something like 30-50 floppies in a huge binder.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2018-08-13T20:58:07.443" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7274" PostTypeId="1" AcceptedAnswerId="7275" CreationDate="2018-08-14T10:41:35.020" Score="16" ViewCount="2176" Body="&lt;p&gt;I had a ZX Spectrum 48KB, whose display was a 256*192 monochrome bitmap (plus separate per-block color attributes). I remember the display bitmaps scan lines were laid out in memory in a weird way - This was evident when trying to render to the screen via &lt;code&gt;poke&lt;/code&gt;, and also when loading games splash screens from tapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why was this layout chosen?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Layout:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Screen was divided into 3 parts - top/middle/bottom&lt;/li&gt;&#xA;&lt;li&gt;In each part, the memory would render the first lines in every 8-line &quot;text line&quot;, then the second lines etc.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For example, the layout of the top third would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Memory line  0 - Scan line  0&#xA;Memory line  1 - Scan line  8&#xA;...&#xA;Memory line  7 - Scan line 56&#xA;Memory line  8 - Scan line  1&#xA;Memory line  9 - Scan line  9&#xA;...&#xA;Memory line 15 - Scan line 57&#xA;(skip...)&#xA;Memory line 56 - Scan line  7&#xA;Memory line 57 - Scan line 15&#xA;...&#xA;Memory line 63 - Scan line 63&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10358" LastActivityDate="2018-08-14T11:55:32.027" Title="What was the reason for the ZX Spectrum's display bitmap layout?" Tags="&lt;zx-spectrum&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7275" PostTypeId="2" ParentId="7274" CreationDate="2018-08-14T11:55:32.027" Score="19" Body="&lt;p&gt;This is a (for the moment) a short answer:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The Spectrum was engineered with a character oriented display, as Sinclair wanted people to use it for business, not for games, so the screen is arranged so displaying a character (8x8 pixel character) is fast. Given a character position, each scan is separated 256 bytes from the previous one, so to draw a character you will use a 16 bit register as pointer to the display memory and increment the most significant byte to advance one scan. 8 bit increments are fast (4 clocks). A linear display address would have forced each scan to be separated 32 bytes from the previous one, thus making the display of a character a bit slower (the ADD instruction only works with A register, and with an inmediate operand it takes 7 clocks).&#xA;To get 256 bytes from one scan to the next one, the display must be divided into three thirds, each one using 8 character rows. At 32 characters per row, and being each character a grid of 8x8 pixels, this allows the desired 256 byte separation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The ULA uses DRAM page read so it reads two bytes faster than two separate reads of one byte each. The ULA needs for each scan of 8 pixels, one byte of bitmap and one byte of attributes. To be able to use page read, addresses must share either the most significant 7 bits, or the least significant 7 bits. If the ULA would were engineered so the addresses share the most significant 7 bits, that would mean that page reads would read consecutive addresses, and that would mean that the display would have to be arranged so bitmap and attributes would have to be interleaved, making impossible to have 256 bytes between two adjacent scans in the same char.&#xA;So page mode read addresses share the 7 least significant bits and change the 7 most significant ones, thus allowing the attribute zone to be completely separated from the bitmap zone.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="105" LastActivityDate="2018-08-14T11:55:32.027" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7276" PostTypeId="1" AcceptedAnswerId="7631" CreationDate="2018-08-14T13:36:30.023" Score="3" ViewCount="395" Body="&lt;p&gt;In the early days of personal computers, manufacturing was not as automated as it later became, and a factory would often consist of people sitting at tables placing components by hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interested in how much labor went into each computer. Not talking about what went into making the chips etc, or driving the trucks or selling on the retail floor, but just into the manufacturing of computers from components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be interested in figures for any of the early personal computers, but to pick one for the sake of definiteness, say the Apple II; one related account I did find for the Apple I, the very first batch of that first computer that company made, 50 machines to be assembled (though at that time that just meant the circuit board and components thereon) for Paul Terrell's Byte Shop in 30 days; this was just barely accomplished by Steve Jobs, Steve Wozniak, Ron Wayne, Patricia Jobs and Dan Kottke (exhaustive list?). Say they averaged five hours a day (some of them had day jobs), so that's 5 x 5 x 30 = 750 hours, divided by 50 machines is 15 hours per machine. Later machines were more complex, but processes became more efficient; would those factors more or less cancel each other out?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How much labor (in hours, dollars or as a percentage of parts cost, wholesale price or retail price) did it take to assemble an Apple II?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2018-08-14T13:44:54.300" LastActivityDate="2018-09-19T11:09:32.370" Title="Labor input for manufacture of early personal computers" Tags="&lt;history&gt;&lt;apple-ii&gt;&lt;cost&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7277" PostTypeId="2" ParentId="7276" CreationDate="2018-08-14T16:21:41.670" Score="5" Body="&lt;p&gt;I don't have exact figures, because as pointed out in the comments it will vary massively between different production lines, machines, and times, and manufacturers weren't eager to publish this kind of information.  However, it's likely to be less time than you think.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wave soldering makes assembling an entire board &lt;em&gt;very&lt;/em&gt; quick, and was starting to become popular in the 70s and 80s, so you can bet that anyone making complex products like computers would have been quick to switch to it.  The question then becomes how quickly can you place all of the correct components onto a board and clamp them in place (with a prebuilt jig to make sure they're in the right place)?  That's a very fast operation once you get the hang of it.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-08-16T07:56:44.377" LastActivityDate="2018-08-16T07:56:44.377" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7278" PostTypeId="2" ParentId="7263" CreationDate="2018-08-15T13:31:50.947" Score="1" Body="&lt;p&gt;As a user of teletypes and serial communications back in the 1970s - this is my understanding as well.  There were hardware signals for &quot;flow control&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was thinking you set bits on UART which then converted to voltages on communications cable.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example if Device A was sending to Device B - Device B needed a way to slow down the sending of data from Device A - so that Device A did not overrun the receive buffer of Device B.  There were hardware signals that Device B could set to tell Device A to stop sending.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was considered a huge improvement when they could embed software flow control like Ctrl-Q and Ctrl-S in the data and you no longer needed to set hardware flow control signals on the UART.  &lt;/p&gt;&#xA;" OwnerUserId="10364" LastActivityDate="2018-08-15T13:31:50.947" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7279" PostTypeId="1" AcceptedAnswerId="7293" CreationDate="2018-08-15T20:28:38.220" Score="1" ViewCount="739" Body="&lt;p&gt;It has been mentioned in a few places, that in the 8-bit era, schools preferred computers with a bulky all-in-one form factor, in the hope of reducing damage and theft, to the point where they preferred e.g. the Apple II and BBC Micro to the Vic-20 and C64, but considered still better the PET and TRS-80 3/4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But after that era, schools ended up using PCs in desktop (not all in one) or laptop (the whole unit is quite small and light) form factors. If schools still had a strong preference for all-in-one, I would expect some company to manufacture PCs in that form factor to capture that market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there a point at which they stopped caring? If so, when and why?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-08-19T10:38:45.313" Title="When did schools stop caring about form factor?" Tags="&lt;history&gt;&lt;market&gt;" AnswerCount="3" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="7280" PostTypeId="1" AcceptedAnswerId="7282" CreationDate="2018-08-16T07:19:21.487" Score="2" ViewCount="656" Body="&lt;p&gt;Suppose you wanted to take one of the 1977 trinity (Apple II, Commodore PET, TRS-80) and attach it to a hard disk &lt;em&gt;at that time&lt;/em&gt; - in 1977.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course this wouldn't be easy. Not only was there no packaged solution, there was no hard disk controller designed to connect to any kind of microcomputer. Those came years later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, suppose you were willing to take on the task anyway, design your own controller. What sort of hard disk could you buy on the market in 1977? Presumably something designed for a minicomputer? Was any hard disk available for separate purchase for, say, less than $5000?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2018-08-16T08:26:02.093" LastActivityDate="2018-08-17T02:34:30.983" Title="Hard disks in 1977" Tags="&lt;history&gt;&lt;hard-disk&gt;&lt;market&gt;" AnswerCount="4" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7281" PostTypeId="2" ParentId="7280" CreationDate="2018-08-16T08:16:20.893" Score="6" Body="&lt;p&gt;There were &lt;a href=&quot;http://apple2.info/wiki/index.php?title=A2_SCSI_Cards&quot; rel=&quot;noreferrer&quot;&gt;SCSI cards&lt;/a&gt; for the &lt;strong&gt;Apple II&lt;/strong&gt;, so you could attach a SCSI hard drive. Hard drives were also supported by &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_ProDOS&quot; rel=&quot;noreferrer&quot;&gt;ProDOS&lt;/a&gt;, with a volume size of up to 32M, and hierarchical subdirectories.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, it was easy, there were packaged solutions, and no need to design your own controller. :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the &lt;strong&gt;Commodore PET&lt;/strong&gt;, there were also harddrives available, e.g. the &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_D9060&quot; rel=&quot;noreferrer&quot;&gt;D9060&lt;/a&gt;, which was attached via the standard IEEE 488 bus. This bus was not available on the C64 and VIC-20, which is why people made &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_D9060#IEEE_488_bus&quot; rel=&quot;noreferrer&quot;&gt;IEEE 488 expansion cards&lt;/a&gt; for them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I had to design a controller, I'd probably also opt for SCSI even though it was much more complex than IEEE 488, because you'd need to buy harddrives somewhere which to attach them to the controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the question is mainly about what was possible in 1977: The &lt;a href=&quot;https://en.wikipedia.org/wiki/ST506/ST412&quot; rel=&quot;noreferrer&quot;&gt;ST-506&lt;/a&gt; is from 1980, SCSI was made public in 1981, so I guess it would have been very difficult to find affordable harddrives in 1977. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adapting, say, an IBM harddrive would have probably been cost prohibitive for the normal user of the &quot;1977 trinity&quot;. If you had that kind of money, and if IBM would sell or lease you a harddrive in the first place, you probably already had an IBM mainframe somewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A DEC harddrive like the &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/rp04.html&quot; rel=&quot;noreferrer&quot;&gt;RP04&lt;/a&gt; (from 1975) would have been easier, but still quite expensive.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2018-08-16T08:39:34.700" LastActivityDate="2018-08-16T08:39:34.700" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7282" PostTypeId="2" ParentId="7280" CreationDate="2018-08-16T09:48:37.543" Score="7" Body="&lt;p&gt;First of all, it's rather frivolous to ask for a hard disk with a microcomputer in 1977. If one could afford a hard disk, one would buy it with a mini. And even then it would be rather an &lt;a href=&quot;https://en.wikipedia.org/wiki/Storage_Module_Device&quot; rel=&quot;noreferrer&quot;&gt;SMD&lt;/a&gt; drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only hard drives (as in non-exchangeable, fixed closure) available in 1977 were the namesake Winchester drive (IBM 3340) and its direct follow up of 1975 (3350). A 3350 would cost you about 75,000 USD, offering ~630 MiB storage. So spending another 20 grand on a mini with controller might have been cheaper than building an interface to fit it to one of above micros - beside that, in 1977 even floppies where still considered optional on mini computers - and unavailable for either of the above micros.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1977 CDC's &lt;a href=&quot;http://chmhdd.wikifoundry.com/page/CDC+9760+%28SMD%29&quot; rel=&quot;noreferrer&quot;&gt;SMD drives&lt;/a&gt; were widely available, standardized and comparably cheap. A good example for 1977 would be buying the DEC RPJ04 bundle (RP04+RH11 Controller). This would offer 80 MB at 'just' 37,000 USD according to DEC's price list of 1977. Now your micro just needs to speak Unibus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DEC is a good marker, as they tried to be the cheapo, at least until the late 70s. A RK01/03 was already available at less than 3000 USD ... but also only holding 1.6..2.5 MiB, so not really much past what a (cutting edge) floppy could offer at a similar price.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then there was the &lt;a href=&quot;http://chmhdd.wikifoundry.com/page/DEC+RK05&quot; rel=&quot;noreferrer&quot;&gt;RK05&lt;/a&gt;, and its compatibles. In 1977 a RK05 (alike) would be around 5-8 grand, including DEC compatible controller while offering a whopping 5 MB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest bang for the buck would be a CDC hawk drive with 10 MB for under 3,000 - plus another 2,000+ USD for a controller. Plus cartridges, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short, connecting a hard drive to a micro in 1977 wasn't anything even the weirdest of all geeks would dream of. Give it 2-4 more years and then we start talking.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-08-16T10:30:14.920" LastActivityDate="2018-08-16T10:30:14.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7283" PostTypeId="1" AcceptedAnswerId="7285" CreationDate="2018-08-16T15:38:33.103" Score="35" ViewCount="9544" Body="&lt;p&gt;For those of us who grew up with personal computers in the 1970's or 1980's, the experience was a very gradual migration from floppy disks to hard disks as the primary persistent storage. So, based on this experience, it is a bit counter-intuitive that the invention of the hard disk preceded the floppy disk by many years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than the rather subjective &quot;It was just an accident of history&quot; answer, are there any objective technical reasons why floppies would have come after hard disks?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-08-30T02:03:06.457" Title="Why were floppy disks invented after hard disks?" Tags="&lt;floppy-disk&gt;&lt;hard-disk&gt;&lt;disk-drive&gt;" AnswerCount="8" CommentCount="8" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7284" PostTypeId="2" ParentId="7283" CreationDate="2018-08-16T15:51:17.943" Score="47" Body="&lt;p&gt;Floppy disks are harder to get right than hard disks. Early hard disks were enormous; the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_350&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 350&lt;/a&gt; used fifty 24-inch platters. They were also rather fragile and cumbersome (heavy and power-hungry). To go from a hard disk of this sort to floppy disks required a number of developments: in particular the ability to remove the platters (which came in 1962 with the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1311&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 1311&lt;/a&gt;), then reductions in sizes of all components while still providing useful storage capabilities: heads had to get smaller, actuators etc. had to get smaller, medium reliability with smaller quantities of material had to improve, storage density had to increase, and of course costs had to come down for all this to be accessible to mere mortals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This matches the evolutions seen in general in magnetic-disk-based storage: from early fridge-sized hard drives to 2.5” drives, and on the floppy side, 8” disks in huge drives with large PSUs, then 5.25” disks in full-height drives, then 5.25” disks in half-height drives, then 3.5” disks in still smaller drives... Many removable drives fit into this continuum (SyQuest cartriges, Zip and Jaz, Compact-Flash-sized micro-drives...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some issues are specific to floppy disks. One well-known example is that hard disks have a head which isn’t in contact with the platters, whereas floppy drives’ heads are kept in contact with the magnetic medium, which leads to rather different constraints. Another example which was pointed out to me recently is an issue which came up during development of the IBM 33FD and its floppy disks: &lt;a href=&quot;https://twitter.com/txgx42/status/1032311565486305282&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM discovered that the floppy enclosures warped&lt;/a&gt;, and eventually determined that using black enclosures was the only way to avoid this (at the time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It’s worth noting that magnetic-disk-based storage was expensive for a long, long time, and other forms of storage were favoured for a long time — paper initially, then magnetic-tape-based (the latter both in large computers and micros). Early attempts in the IBM project which led to the invention of the floppy disk tried to use tape rather than disks (see &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_the_floppy_disk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia’s page on the topic&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-08-28T14:26:48.523" LastActivityDate="2018-08-28T14:26:48.523" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7285" PostTypeId="2" ParentId="7283" CreationDate="2018-08-16T17:09:36.027" Score="37" Body="&lt;p&gt;While &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7284/6659&quot;&gt;Stephen Kitt's answer&lt;/a&gt; already hits the core, I believe it needs a bit more history, as direct access magnetic storage did start quite a while before the IBM 350.&lt;/p&gt;&#xA;&lt;h2&gt;Drums and Disks&lt;/h2&gt;&#xA;&lt;p&gt;First there were drums. Drums were huge cylinders with a magnetic surface, and a separate head for each track - something that would have been rather impossible with a disk. Drums are somewhat located at the the borderline between main memory and external storage. Except that the idea of external storage wasn't even formulated back then the way we see it today (*1). The drum was the main memory of early computers and the CPU was built around its timing. There was no memory to hold even a single track in direct access (*2).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_650&quot; rel=&quot;noreferrer&quot;&gt;IBM 650 Magnetic Drum Data-Processing Machine&lt;/a&gt; of 1953 is a good example. It was built around a drum with up to 80 tracks holding 50 words of 10 decimal digits each, so lets just make that 5 Bytes, giving ~20 KiB in today's units.&lt;/p&gt;&#xA;&lt;p&gt;Drums were in use way until the 1970s and gained sized up to 200 and more heads. while also enhancing data density per track, resulting in drives with several megabytes. On a drum, heads were neither flying nor movable. Each track had it's own head. Thus there was no seek time, no head settling, at maximum waiting for one turn to pass was needed. Which at 10,000 RPM (and more) wasn't much.&lt;/p&gt;&#xA;&lt;p&gt;It wasn't fun to adjust heads on a drum. A little too low and the drum was dead (head crash); a little too high, and there was no usable signal. This is something that carried over to disk (see later).&lt;/p&gt;&#xA;&lt;p&gt;While Univac added bigger (and additional) drums in 1956, IBM chose the lower-cost approach of a disk. Here only a small number of heads were needed and less electronics to handle a way bigger amount of data at lower cost. On the negative side, disks were incredibly slow compared to drums.&lt;/p&gt;&#xA;&lt;p&gt;When IBM then added the 355 disk unit (a variant of the mentioned 350) to the 650, a controller was also needed (653) which housed the first core memory to store (part of) a track, so access within a single track could be sped up.&lt;/p&gt;&#xA;&lt;p&gt;Unlike often assumed, the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_305_RAMAC&quot; rel=&quot;noreferrer&quot;&gt;IBM 305 RAMAC&lt;/a&gt; wasn't so much a disk based system. The CPU was still based around a drum. The 350 disk just added a layer of storage; faster than tape, slower than drum. Due to the (almost) standard disk, the 305 could operate with a smaller and cheaper drum, while handling data sizes similar or even bigger than the 650, albeit slower.&lt;/p&gt;&#xA;&lt;p&gt;From here on IBM walked the disk 'track'. While drums as main memory were replaced by core, drums as secondary storage vanished rather quickly, but not everywhere and not completely. In fact, DEC offered their faster PDPs (like the 11/45) with a drum as fast paging memory (*3) in addition to disks. To some degree drum plus disk was what hybrid disks (HD + Flash Cache) are today.&lt;/p&gt;&#xA;&lt;h2&gt;Disk technology&lt;/h2&gt;&#xA;&lt;p&gt;Early Disks used basically the same technology as drums with heads at fixed height. Part of the inherent adjustment problem was that they couldn't really go close to the surface and thus density was quite limited which again resulted in even lower speed. In comparison, the 650's drum did rotate at 12,000 rpm with about 2000 bits in one track (50 words á 10 decimal digits), that multiplies to roughly 400kbit/s transfer rate. The 355 disk rotated at 1,200 rpm (less than a 10th of the speed); data transfer rate was 8,800 characters per second - with 6 bits/character that's about 52 kbit/s, roughly an 8th of what the drum did. In addition there were only 3 head mounts (350 had two) with two heads each, all covering the same 100 surfaces. Track to track time (one track) was almost 100ms, surface to surface could reach 2s and above. So yes, faster than handpicking a punch card, but in no way even near how a drum performed.&lt;/p&gt;&#xA;&lt;p&gt;But boy were they cheap.&lt;/p&gt;&#xA;&lt;p&gt;In the end a way more capable technology was replaced by a cheaper, lower performing technology for fast storage. What followed was much like later small hard disks: a race for lower cost small drives, but also for more storage at the same cost. Just 5 years later the 353 reached a capacity of 16 MiB and a transfer rate of 8 Mbit/s. Much of this was possible due now self flying heads allowing a more than 10-fold storage density. Even access time was way down as every disk side got a dedicated head.&lt;/p&gt;&#xA;&lt;p&gt;Next step were &lt;a href=&quot;https://en.wikipedia.org/wiki/Storage_Module_Device&quot; rel=&quot;noreferrer&quot;&gt;Storage Module Device&lt;/a&gt; disks - a series of disks modeled after the IBM 1316 disk pack, a 6 deep stack of (now) 14 inch disks. Exchangeable in less than two minutes and whopping 2 MiB per stack. By 1964 the capacity had grown to 7 MiB and many companies provided compatible devices and for at least until 1980 they became standard - sizes increased up and beyond 300 MiB per stack.&lt;/p&gt;&#xA;&lt;p&gt;Exchangeable disk stacks were standard. Hard disks fell completely out of use (while drums were still made and used). It wasn't until 1973 that IBM changed the design with what was called the Winchester drive. And no, it wasn't meant as a fixed built-in in hard disk like we use today. It was still an exchangeable media, except that now the head mount (and heads) were part of the disk pack. The idea was to keep the disks away from dust by being completely encapsulated. Electronics, drive motor and head motor were still part of the drive, not of the disk pack. The main goal was again a higher density, not so much for faster transfer (but they didn't mind) but to make it cheaper. Capacity of these 'Data Packs' was 30 to 70 MiB.&lt;/p&gt;&#xA;&lt;p&gt;It took a few more years until the improved drives were made into a non removable setup with a tenfold increase in storage (&amp;gt;300 MiB). While SMD drives did compete size-wise this first generation of 'new' hard disks were faster - but users were not really convinced. With 'traditional' drives they could store a multitude of data on a few drives by exchanging packs, while not a drive had a fixed size. Large, but fixed, and no way for easy backup and restore by just putting in a disk pack (*4).&lt;/p&gt;&#xA;&lt;h2&gt;The Floppy&lt;/h2&gt;&#xA;&lt;p&gt;IBM developed (*5) the floppy as a way to replace punch cards at data entry stations. Here cost was the main concern, as punch cards were cheap, proven and equipment was existing. Outside this process, there was no real need for a diskette like media. For program and data exchange tapes were perfect; they were fast and held large amounts of data with small reels being handy to transport. A floppy wasn't smaller, but stored way less data and required new drives.&lt;/p&gt;&#xA;&lt;p&gt;It was the Minicomputer of the mid 1970s that made the floppy a basic media. While up to 1 MiB storage was negligible for mainframes, it was huge for minis. And while it was incredibly slow in mainframe terms (card readers were faster), it was an incredible gain for minis. And &lt;strong&gt;way&lt;/strong&gt; cheaper compared to disks.&lt;/p&gt;&#xA;&lt;p&gt;For the upcoming micros during the second half of the 1970s, the floppy was heaven sent. And that's why they started out with floppies - and mainframes didn't.&lt;/p&gt;&#xA;&lt;p&gt;And here history loops: With minis and micros growning in demand, it suddenly became feasible to develop small (in size), small (in cost), small (in capacity) hard drives again. 1979 the first 8&amp;quot; HD with 'just' 10..60 MiB and in 1980 Seagate with the 5 MiB 5,25&amp;quot; ST506.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The terminology classic IBM systems use do reflect this until today, as disk is still seen not as a separate entity, but another level of system memory. If at all, tape does qualify as such.&lt;/p&gt;&#xA;&lt;p&gt;*2 - The needed part of a track was sent directly into the corresponding registers as required by the instruction processed.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Guess why BSD's swap is traditionally on /dev/drum :))&lt;/p&gt;&#xA;&lt;p&gt;*4 - A common backup scheme was to copy the whole data disks onto a new disk pack  by reorganizeing the database, then store the old and continue work with the (now defragmented) new ones. In case of a deadly disk crash, the system could start from the old disk within minutes.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Developed is the key word here. While the original design was for a cheap way to load microcode for the Merlin, it was data entry that transformed it into a general purpose storage method.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-08-28T13:04:25.840" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7286" PostTypeId="2" ParentId="7283" CreationDate="2018-08-16T17:11:36.443" Score="11" Body="&lt;p&gt;Floppy disks solve a different problem from hard disks: They're cheap, and they're portable. A floppy disk (even an eight-inch floppy) slips into a brief case or a file folder in a way that reels of half-inch magtape and punched card decks just will not do; and if somebody asks you for a copy of that report you're working on, you can hand them a floppy disk without being too worried about whether you'll ever get your media back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hard disks existed before anybody ever imagined that &quot;that report you're working on&quot; would be a file that they could open on a computer.&lt;/p&gt;&#xA;" OwnerUserId="588" LastActivityDate="2018-08-16T17:11:36.443" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7287" PostTypeId="2" ParentId="6614" CreationDate="2018-08-16T18:37:36.110" Score="1" Body="&lt;p&gt;I fried the CRT of a friend of mine trying to setup the X11 a long time ago :(. Just a startx fried it.  That time I was using the Monkey Linux distribution. &lt;/p&gt;&#xA;" OwnerUserId="10370" LastActivityDate="2018-08-16T18:37:36.110" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7288" PostTypeId="2" ParentId="7280" CreationDate="2018-08-16T19:17:12.130" Score="10" Body="&lt;p&gt;In 1981 I acquired an IBM 5444 from an old mainframe computer. Luckily I also got the service manual for it, and so was able to design a controller board to interface it to my Sinclair ZX81. The interface circuit only used about a half dozen TTL chips and was quite simple, but the ZX81's clock frequency was slightly too low so I had to disable the drive's bit rate lockout (just had to cut a track on one of the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Solid_Logic_Technology&quot; rel=&quot;noreferrer&quot;&gt;SLT&lt;/a&gt; logic boards). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At a data transfer rate of ~6uS per Byte it took less than 120ms to load or save the ZX81's entire 18kB RAM, and that was the extent of my 'file system'. Each 15&quot; removable cartridge had ~2MB of storage capacity so it didn't matter that this method was somewhat wasteful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this setup worked well it was quite unwieldy. According to a warning label on the drive it weighed over 25kg, but it must have been a lot heavier than that because I almost put my back out trying to lift it. I also had to build a big power supply to produce the several voltages it required, including 24V at 6A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I dumped the drive many years ago, but here is a picture of a similar one.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WO3aV.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WO3aV.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2018-08-16T19:17:12.130" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7289" PostTypeId="2" ParentId="7279" CreationDate="2018-08-16T23:27:17.800" Score="9" Body="&lt;p&gt;This had nothing to do with schools but with political budgets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In many countries schools were equipped with computers manufactured there.&#xA;There was the BBC micro in the UK, Thomson TO7 and MO5 in French schools and Apple 2 in the United states.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some countries had several manufacturers; a non exhaustive list would be (from countries I know): UK had the BBC, Acorn, Amstrad and Sinclair, France had Thomson, Goupil, Oric and a few others and the USA had Apple, Atari, Commodore and IBM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the UK, the BBC was government funded, so having the BBC Micro in classrooms made sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In France, the government is a shareholder of Thomson, so again, having these computers in classrooms made sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the USA, Steve Jobs approached a congressman that drafted a bill to put computers in classrooms; it didn't pass congress and another congressman introduced a similar bill (but not for Apple computers). He managed to get a similar text passed in California, which opened the school doors to Apple.&#xA;After that, other schools just followed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can read the story here: &lt;a href=&quot;http://hackeducation.com/2015/02/25/kids-cant-wait-apple&quot; rel=&quot;noreferrer&quot;&gt;http://hackeducation.com/2015/02/25/kids-cant-wait-apple&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(To clarify things, I lived in France when I was a kid and then in the USA, so I've seen these two things; About the UK, it is merely what I learned later on)&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2018-08-16T23:27:17.800" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7290" PostTypeId="2" ParentId="7280" CreationDate="2018-08-17T02:34:30.983" Score="3" Body="&lt;p&gt;I worked circa 1978 at a company that was interfacing an DEC RK05/IBM 2315 type cartridge hard disk mechanism to a custom minicomputer.  They engineers in the next office were designing the interface boards.  IIRC,  The interface between the HD analog boards and and the computer memory bus was 2 boards, using TTL logic, that were each roughly 1.5 to 3 times the size of an Apple II motherboard.  (Maybe Woz could have done it in less chips?)&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2018-08-17T02:34:30.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7291" PostTypeId="2" ParentId="7283" CreationDate="2018-08-17T02:39:47.667" Score="2" Body="&lt;p&gt;The first hard disk drives were huge.  Thick platters were on the order of a meter in diameter.  The drive enclosures were larger than a kitchen refrigerator.  The magnetic domains (the bits) on the hard disk were large enough to see without a microscope. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It took awhile to miniaturize all that stuff, electronics, magnetics, including the R/W heads, get the bit density up, and figure out a magnetic substrate thin enough to use for something like a floppy disk that would hold a reasonable amount of bits of data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, just like Moore's law driving inventions that led to higher transistor densities, every couple years or so there was a roughly double improvement in HD magnetic bit density.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2018-08-17T02:45:44.933" LastActivityDate="2018-08-17T02:45:44.933" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7292" PostTypeId="2" ParentId="7283" CreationDate="2018-08-17T06:39:14.593" Score="2" Body="&lt;p&gt;Expanding on the &quot;cheap and portable&quot; comment about floppies, an IBM paper on their history [1] gives a nice summary of the problem they were initially intended to solve:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The introduction of semiconductor memory created a&#xA;  need for a low-cost device to load programs and information.&#xA;  The requirement was for a read-only device and, at minimum,&#xA;  a serial tape-like medium would have been acceptable.&#xA;  It was recognized, however, that direct access to a section&#xA;  of data and the ability to read a record repetitively&#xA;  would be useful in some applications. [...]&#xA;  Other characteristics that were requested included a medium&#xA;  that could be replaced without tools within fifteen seconds&#xA;  and that was small and light-weight to permit inexpensive shipment.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So at least in the eyes of their inventors, floppies served&#xA;a completely different purpose from hard disks (to the extent that&#xA;IBM called them &quot;diskettes&quot; rather than &quot;disks&quot;). Interestingly&#xA;they considered a variety of existing media, including dictation tapes,&#xA;audio cassettes, and even 45rpm vinyl records, before deciding that&#xA;something new was required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe the first application for the floppy within IBM was distributing&#xA;microcode (firmware, in modern terms) for the 2835 and 3830 disk storage controllers. Another paper [2] describes how their designers used the&#xA;medium:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] a miniature microprogram load, read-only disk drive, using a&#xA;  small interchangeable plastic disk, was selected. Data are entered&#xA;  on disks at the factory, providing very good control over the data.&#xA;  The disk is mailable and disposable, so that microprograms in the&#xA;  field can be updated easily and efficiently. (pp. 14-15)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think the comment about writing at the factory and reading in the field&#xA;is important - it made floppies cheap enough to throw away, and the drives&#xA;that read them could be installed in large number of shipped devices while&#xA;only needing a few expensive writers at the factory (similar to the early&#xA;days of CD-ROM, perhaps?). This also helps explain why floppies found&#xA;their way into the price-sensitive home computer market well before hard&#xA;drives did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] James T. Engh, &lt;a href=&quot;https://ieeexplore.ieee.org/document/5390601/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The IBM Diskette and Diskette Drive&lt;/a&gt;. &lt;i&gt;IBM Journal of Research and Development&lt;/i&gt;, v25n5 (Sep. 1981), pp. 701-710&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] G. R. Ahearn et al., &lt;a href=&quot;https://ieeexplore.ieee.org/document/5391521/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Design Innovations of the IBM 3830 and 2835 Storage Control Units&lt;/a&gt;. &lt;i&gt;IBM Journal of Research and Development&lt;/i&gt;, v16n1 (Jan. 1972), pp. 11-18&lt;/p&gt;&#xA;" OwnerUserId="4243" LastActivityDate="2018-08-17T06:39:14.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7293" PostTypeId="2" ParentId="7279" CreationDate="2018-08-17T08:47:07.913" Score="7" Body="&lt;p&gt;This is my take on the topic:&#xA;PCs became an off the shelf product and the case for special school computers diminished.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Thomas says, in the first half of the 80s several countries had their own big budget projects to introduce computers into the education. Custom hardware was built. In Sweden where I live we had Swedish made computers like Telenova Compis &lt;a href=&quot;https://en.wikipedia.org/wiki/Compis&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Compis&lt;/a&gt;, which was developed specially for education and ABC 80 &lt;a href=&quot;https://en.wikipedia.org/wiki/ABC_80&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/ABC_80&lt;/a&gt;, which was sold for general purpose but commonly used in education. The problem was that the computer business moved fast (as always) and these computers were obsolete in a couple of years. Many of these machines either used proprietary operating systems or operating systems that are now obsolete e.g: &lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/CP/M&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the projects to build specialized computers and use them in schools where finished and the PC had arrived as the standard I think that there were no new money assigned for using specialized hardware. Education generally do not have huge budget and specialized hardware is resource intensive to develop. It is always cheaper to buy a standard configuration. The fact that the old systems were more or less proprietary made their software unusable and their legacy faded. PC clones were just too cheap and the added value of specialized systems did not meet the extra investments needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple has been successful in selling computers to schools as they have special discounts for the education sector. In my children's school they use IPads and Mac laptops. I would say that we are moving away from the PC form factor in education.&lt;/p&gt;&#xA;" OwnerUserId="10378" LastEditorUserId="10378" LastEditDate="2018-08-17T09:00:50.000" LastActivityDate="2018-08-17T09:00:50.000" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7294" PostTypeId="2" ParentId="7283" CreationDate="2018-08-17T10:21:44.953" Score="2" Body="&lt;p&gt;Cost. For most hobbyists, in the 1980s, hard drives were out of reach, until eventually the cost dropped to affordable levels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had a VIC-20 and C64 with cassette tapes, an Amiga 500 with twin floppies and later an Amiga 500plus which I bought a 40Mb hard disk and RAM expansion for, because it cost less than what I paid for the Amiga itself.&lt;/p&gt;&#xA;" OwnerUserId="10335" LastActivityDate="2018-08-17T10:21:44.953" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7295" PostTypeId="1" CreationDate="2018-08-17T11:27:52.033" Score="6" ViewCount="1188" Body="&lt;p&gt;I'm building an retro emulator to connect to a PAL (&lt;code&gt;720x576i @ 50 Hz&lt;/code&gt;) CRT TV, and would like a perfect V-blank image, so the visuals are identical to original arcades and retro computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words,  the video card &lt;em&gt;must&lt;/em&gt; produce one perfect (albeit interlaced) image every 50th frame on the CRT display, with NO frame skipping/tearing/juddering, and no audio dropouts either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to hear from people who have succeeded with this earlier, or have the technical knowledge to know what is possible and how to achieve it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm considering the following possibilities:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Running the latest MAME or similar emulator on modern hardware such as a Mac or a Raspberry Pi. (Is this combination able to provide perfect visuals?)&lt;/li&gt;&#xA;&lt;li&gt;Running an emulator on an actual retro computer which has perfect native PAL output, such as an Amiga, unless someone knows a better choice.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update #2:&lt;/strong&gt; After some research, with MAME 0.199 on macOS, I changed &lt;code&gt;name.ini&lt;/code&gt; as shown below. Now Salamander &lt;strong&gt;seems&lt;/strong&gt; to be scrolling perfectly. However, the scrolling background on character selection in Samurai Shodown II is jumping a pixel every second. So it's not perfect. Also, it seems that &lt;a href=&quot;https://docs.mamedev.org/advanced/hlsl.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows&lt;/a&gt; has many more video effects than macOS/Linux (eg. scanline emulation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone has specific advice how to take this to 100% perfection, please post an answer.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;video                     opengl&#xA;waitvsync                 1&#xA;syncrefresh               1&#xA;filter                    0&#xA;gl_glsl                   1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10380" LastEditorUserId="10380" LastEditDate="2018-09-15T08:22:54.100" LastActivityDate="2019-01-09T14:10:11.307" Title="Retro emulation with perfect V-sync" Tags="&lt;emulation&gt;&lt;crt-monitor&gt;" AnswerCount="4" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="7296" PostTypeId="2" ParentId="7295" CreationDate="2018-08-17T12:40:42.360" Score="3" Body="&lt;p&gt;(Edited, as the focus of the questions has changed quite a bit).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, let me make clear that getting a &quot;perfect V-sync image&quot; is necessary, but far from sufficient for &quot;visuals identical to original arcades and retro computers&quot;. CRT TVs have a lot of artifacts due to the analog nature of the signal. Having proper v-sync will avoid tearing, which is a very obvious flaw when emulating, but that's all that it does. It won't give you an experience that's close to the original visuals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, to the various parts.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Using emulation systems with TV out&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Video cards with composite TV outputs exist, from quite a few manufacturers. The bulk of that would be AGP cards, with a few PCI cards thrown in. I think finding a PCIe card would be a challenge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So (1) is difficult, (2) definitely doable (if you have the right motherboard).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those cards used specific encoder chips (mostly Philips, Brooktree/Conexant, Chrontel) with varying capabilities; timing was often constrained (the Chrontel chips only support few modes). Later NVidia cards used their own proprietary TV encoder. Programming those chips is done via I2C bus, if you want a specific resolution, you'll need a datasheet (I still should have them somewhere).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative way that would need a considerable amount of hacking is to use a Fresco FL2000 VGA dongle. This have been &lt;a href=&quot;https://hackaday.com/2018/04/23/spoofing-cell-networks-with-a-usb-to-vga-adapter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;repurposed&lt;/a&gt; as general D/A converters, and the bandwidth should be enough for a composite TV signal, at least black and white (maybe also with color). With some use of the other two channels maybe one could even use something closer to the original VGA mode, and somehow put a SYNC signal in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That would be a fun project, but requires some good programming skills.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for (3): I wouldn't think an actual retro computer with TV composite output only has enough processing power to successfully emulate another retro computer of the same era at a reasonable speed.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Perfect V-Sync&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Perfect V-sync is easy, and is a problem of the emulator software communicating with the graphics card, and the graphics card producing an image with the correct (multiple of the PAL/NTSC) vertical sync frequency. For that, it doesn't matter if you use a CRT TV or an LCD monitor.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You could ask for an interrupt every frame and thus do things exactly once per frame. As long as you updated visuals after they were drawn (not during), you got a perfect picture. How does this work on modern hardware, eg. a Rpi? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In the same way, it's just that the graphics driver, kernel, OpenGL etc. put a lot more distance in between the hardware interrupts and the application problem.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does the CPU have access to something identical to a &quot;raster register&quot; or &quot;timer&quot; that lets it spit out exactly one picture per 1/50 second (1/60 for NTSC)? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, it has. However, the raster line counter and/or retrace interrupts are only accessible at the kernel/driver level. They get passed on to the application program via various APIs, depending on the OS, graphics library etc.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there any one or two way communication between CPU and video card? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That depends on what you mean by &quot;video card&quot;: The part responsible for the timing and framebuffer readout can be programmed by writing values to registers, and gives feedback by reading registers or interrupts. The various GPU (&quot;graphics CPU&quot;) are a different topic.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or is the CPU completely oblivious to the video card / connected monitor, and just does a &quot;best effort&quot; at trying to produce sequential images, which means that visuals will skip a frame sooner or later?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &quot;CPU&quot; isn't, but an application program like an emulator may be, in particular if it's not reprogramming the graphics mode, but using whatever mode is currently selected (which many emulators do, because it's more convenient).&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2018-08-18T08:45:05.073" LastActivityDate="2018-08-18T08:45:05.073" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7297" PostTypeId="2" ParentId="7295" CreationDate="2018-08-17T15:37:44.567" Score="2" Body="&lt;p&gt;Just an answer of scepticism: If you gonna support several different retro platforms, you are most probably unable to generate PAL composite signal indistinguishable from the originals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's consider, ZX 48k and C64. The first has 7.00 MHz pixel rate, the second -- 7.88 MHz (I might be wrong here). None are multiples of the PAL color subcarrier frequency, neither that frequency is a multiple of their pixel rates. Both, if connected to composite, leak color subcarrier into the luminance channel -- and vice versa, sharp luminance edges leak into the chrominance channel. Both machines do that in their own ways and give dissimilar artefacts. I'd suggest you won't be able to get such an accurate composite signal using ANY existing video card, that is capable of PAL output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even the differing pixel rates alone yield the problem to accurately emulate the composite signal, since the videocard most probably will have only a single possible pixel rate in PAL mode. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A suggestion: you could try to synthesize PAL signal directly using fast DAC (with, say, around 20 MHz sampling rate), somehow being able to prepare lots of data for it frame by frame.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2018-08-17T15:48:27.387" LastActivityDate="2018-08-17T15:48:27.387" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7298" PostTypeId="2" ParentId="7295" CreationDate="2018-08-17T16:11:56.047" Score="10" Body="&lt;p&gt;The two specific problems you've mentioned, frame skipping and tearing aren't a function of the video card. They're software and/or CPU problems so your choice of video card don't matter. All video cards capable of outputting a PAL composite signal will output a &quot;perfect&quot; 50 HZ PAL signal, probably even more &quot;perfect&quot; in terms of precise timing than what old consoles outputted. This isn't the problem with getting the best emulation quality of from emulators on a CRT TV or any display for that matter. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Frame Skipping&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Frame skipping is a problem that occurs when emulator can't draw each emulated frame fast enough to display the game in real-time, and so skips drawing frames in order to keep up. So for example, imagine you're trying to play a certain 50 Hz game on a slow CPU and/or slow emulator that can only render the game at bout 25 frames per second. The emulator will either have to run the game at half the intended speed or skip rendering frames (roughly every other one) so the game plays at its intended speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So frame skipping is a problem that can be avoided simply by using a fast enough CPU or an efficient enough emulator. In the later case cycle accurate emulators are the biggest thing you would have to worry about, as they can push the limits of even the fastest PCs, but cycle accurate emulators are only necessary to play accurate emulations of a very few games. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Tearing&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Screen_tearing&quot; rel=&quot;noreferrer&quot;&gt;Tearing&lt;/a&gt; is a problem caused by the emulator changing the emulated frame being displayed by the video card while it's in the middle of being output. This causes two different emulated frames to be output in the same display frame. The previous emulated frame is show at the top and the new emulated frame at the bottom, with the division between the two appearing as a visual tear.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tearing has a simple fix that all video cards support: only change emulated frame to display during the vertical retrace interval when nothing is being output by the video card. On a real CRT this is the time when the video raster moves from the bottom of the screen to the top in order to display a new frame. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Your Real Problems&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;So you can avoid these problems with any video card, you just need a fast enough CPU and you need an emulator, along with suitable operating system support, that can synchronize its output with the vertical retrace (V-sync). However trying to synchronize a emulated game this way can cause other problems: juddering and audio dropouts.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Juddering&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Juddering is a problem if the frame rate the game is supposed to be using doesn't exactly match output display rate. The game will either play faster or slower than it should or the emulator will have to periodically resync causing juddering. This most noticeable when smooth scrolling doesn't appear to be smooth. If you're playing a 50 Hz game on 50 Hz CRT TV this shouldn't be a problem, but if you're playing a 60 Hz game (eg. most arcade games) on a 50 Hz CRT TV this is unavoidable.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Audio Dropouts&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The audio dropout is problem is similar. While the emulator is rendering frames, it's also rendering the audio.  Most emulators actually synchronize the speed they run at to the output rate of the audio.  When they're synchronized to the video card's refresh rate instead they will likely end up providing audio too fast or too slow for the sound card, causing dropouts when it's forced to resync the audio. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a &lt;a href=&quot;http://emulation.gametechwiki.com/index.php/Vsync#Static_Rate_Control&quot; rel=&quot;noreferrer&quot;&gt;couple of possible solutions&lt;/a&gt; to audio drop out problem, but they require your emulator to implement them. &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Input Lag&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Another related issue you might want to worry about it is &lt;a href=&quot;http://emulation.gametechwiki.com/index.php/Input_lag&quot; rel=&quot;noreferrer&quot;&gt;input lag&lt;/a&gt;. This is the delay between pushing a button on the controller and the resulting action appearing on screen. Buffering in video drivers and flat panel TVs can make this delay long enough to be a noticeable problem. Since you're using a CRT TV you don't have to worry about buffering in the TV (unless it happens to be a rare HD CRT TV), but buffering in the video drivers and operating system may be a problem. While this is ultimately a software problem, your choice of video card may limit your options in terms of bypassing this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So really it's your choice of software, mainly the emulator and how you configure it that matters.  To a certain extent your choice of operating system may also matter, but both Linux and Windows should be fine.  &lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2018-08-17T16:11:56.047" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="7299" PostTypeId="1" AcceptedAnswerId="7304" CreationDate="2018-08-17T16:42:38.423" Score="19" ViewCount="4341" Body="&lt;p&gt;Tape storage is, in some sense, the most successful technology across all of IT, being first used in the 1950s and AFAIK still unbeaten today in its niche. Though the success is mostly because tape can be wound up so compactly, it also seems to be intrisically quite good to handle – unlike with big drums or disks, you don't need to carefully align the heads on a huge surface but can just let a small part of the tape come to the fixed head. And at any rate, the tape head technology had been well optimised since the beginning of audio recording.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Yeah, sure tape is also famous for its rip- and knottability, needs careful alignment too etc., but I think we can say it's an overall very good medium.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Spooled-up tape has the obvious problem of access time, which has always pretty much confined it to backups only, however that's not the only way to operate a tape – it's also possible to &lt;a href=&quot;https://en.wikipedia.org/wiki/Tape_loop&quot; rel=&quot;noreferrer&quot;&gt;close the tape to a loop&lt;/a&gt;, so each part periodically passes the head. This isn't only theoretical, it has been the standard way to achieve echo in audio production. And we might actually say that a drum storage is nothing but a bunch of closed &lt;em&gt;rigid&lt;/em&gt; tape loops in parallel, so if drums worked well for storage then tape loops should have worked well to. Except they would presumably have been cheaper, and the loops could be made much longer than a drum circumference, to trade in latency for capacity – at arbitrary ratio!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would certainly not have been as cheap as spooled tape because to get really high capacity you'd still need multiple loops, each with its own head. But that too is actually something that &lt;em&gt;was&lt;/em&gt; done in audio, in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Mellotron&quot; rel=&quot;noreferrer&quot;&gt;Mellotron&lt;/a&gt;. At least after audio cassettes became a consumer mainstay, the heads should have been cheap enough to make this viable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="4410" LastActivityDate="2018-08-20T06:12:23.653" Title="Why were closed tape loops never a popular storage medium (or were they)?" Tags="&lt;magnetic-tape&gt;" AnswerCount="7" CommentCount="13" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7300" PostTypeId="2" ParentId="7283" CreationDate="2018-08-17T18:04:29.840" Score="1" Body="&lt;p&gt;Fundamentally, they're both just magnetic storage media. Most of the challenges behind making platter-based media is common to both designs. You need to have engineered precisely moving heads, tracks/arms to move them, motors with very precise/steady rotation, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The big distinction is that the &quot;reader&quot; is integrated with the media, in the case of the hard drive. This lets you have rigid fixtures that exactly ensure alignment of the reader relative to the media and a clean atmosphere free of potentially damaging dust.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Floppy disks lower cost and increase portability by off-boarding the reading part, and making the media removable. This adds a new level of complexity, because you don't have as tightly controlled of an environment as with hard disks. Now you need a mechanism for accepting and ejecting the media, some way of ensure alignment between these loosely coupled parts (literally, physically), so that your drive head reads the correct data.&lt;/p&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2018-08-17T18:04:29.840" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7301" PostTypeId="2" ParentId="7299" CreationDate="2018-08-17T18:15:29.020" Score="3" Body="&lt;p&gt;An erstwhile popular closed tape loop analog storage medium (&lt;a href=&quot;https://en.wikipedia.org/wiki/8-track_tape#Other_use&quot; rel=&quot;nofollow noreferrer&quot;&gt;8-track tape&lt;/a&gt;) was used to carry digital signals, although only for toy purposes:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Milton Bradley's (MB) OMNI Entertainment System was an electronic quiz machine game first released in 1980, similar to Jeopardy! or later You  Don't Know Jack video game series, using 8-track tapes for playback     analog audio for questions, instructions and answers &lt;strong&gt;as well as digital signals in magnetic tape data storage&lt;/strong&gt; &lt;em&gt;[emph. mine - LeoB.]&lt;/em&gt; on remaining tracks to load the right answer for counting the score. In 1978, the Mego Corporation launched the 2-XL toy robot, which was similar.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, formally, there was a popular storage medium made of a closed tape loop which was used as data storage, albeit not for computing-related applications, and read-only.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-08-17T18:25:17.970" LastActivityDate="2018-08-17T18:25:17.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7302" PostTypeId="2" ParentId="7299" CreationDate="2018-08-17T20:09:19.887" Score="23" Body="&lt;p&gt;They &lt;em&gt;were&lt;/em&gt; used, but suffered from latency issues and complex electro-mechanical design challenges. Their brief day in the sun was around the mid-1950s: after that, it was likely cheaper to add another drum or disk platter rather than work out massive tape-loop logistics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of a large tape-loop system was the &lt;strong&gt;Machine Mathématique IRSIA-FNRS&lt;/strong&gt; (MMIF), built in Belgium in 1955-56:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The auxiliary memory consisted of six tape loops, each 100 meters long, and of a capacity of about one Mbits (10 bits per mm). The tapes stored data from input coding devices and for output printing machines. Each tape was wound around a hollow driving barrel which was covered by a cap. The tape movement was controlled by a pneumatic clutch. Air valves controlled the relative air pressures in the barrel and in the cap. A depression in the barrel pressed the tape against the barrel and drove it; on the contrary, an overpressure in the barrel – i.e. a depression in the cap - applied the tape against the cap and stopped it. Coming from a driving speed of about 1m/sec to a brutal halt and vice-versa took no more than about 2,5 msec&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(quoting from Courtois PJ. (2011) The Belgian Electronic Mathematical Machine (1951-1962): An Account. In: Jones C.B., Lloyd J.L. (eds) Dependable and Historic Computing. Lecture Notes in Computer Science, vol 6875. Springer, Berlin, Heidelberg)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later home-computer tape loop systems, such as the Exatron Stringy Floppy and the Sinclair Microdrive, only came into existence after floppy drive technology had been developed. They were only viable while they offered adequate performance for a far lower price than add-on floppy drives. Once floppies were cheaper, tape loop drives were quickly forgotten.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The University of Strathclyde had a large fleet of Sinclair QLs that it loaned to its students. These were perhaps the only machine that initially relied entirely on Microdrive tape loops. The pragmatic approach to unreliable tape media was to encourage students to buy more tapes, format them, and return the unreliable ones for refund. Since Microdrive tapes stretched as they were used, their capacity increased up to a generally stable value. Accepted practice at the time was to format tapes up to 10 times using a &lt;code&gt;FOR&lt;/code&gt; loop in SuperBASIC. If a tape stayed at the same capacity over the first few formats, it was likely to be reliable. If, however, the capacity kept increasing it meant that the tape was likely to break and that particular cartridge should not be used.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-08-17T20:09:19.887" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7303" PostTypeId="2" ParentId="7299" CreationDate="2018-08-17T22:00:19.823" Score="7" Body="&lt;p&gt;There are two ways to achieve a tape loop:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Keep all of the tape perpendicular to the same plane, and add enough rollers that the tape never has to wrap against itself.  This approach works well for things like tape echo units that have only a few seconds of tape, if even that much, but quickly gets bulky and unworkable for handling larger quantities.  If tape were stored in a cartridge that's 4cm on a side, it would be necessary to have about ten rollers for each meter of tape.  Perhaps not a problem if the loop is short, but a big problem if it isn't.  An advantage of this approach is that the tape can be kept under tension.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Have the tape loosely coiled up in the cartridge around a spool, and pull tape upward from the middle.  This approach can work (it's how 8-track tapes are constructed), but it requires that the tape slip against itself in the cartridge (causing excessive wear) and is prone to have problems if things don't wind and unwind themselves just right.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To achieve good reliability and capacity in a tape cartridge, tape needs to be coiled and uncoiled while staying in a common plane.  Non-looping cartridges can do that.  Looping cartridges may allow for slightly-simpler recording/playback equipment, but their downsides are too great to make them particularly competitive with other technologies.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-08-17T22:00:19.823" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7304" PostTypeId="2" ParentId="7299" CreationDate="2018-08-17T22:05:07.993" Score="28" Body="&lt;p&gt;Because a closed tape loop doesn't buy you anything in random access latency, which is presumably the problem you're trying to solve. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that large tape loops, like 8-track, only can wind one way. So on average, you need to wind the tape halfway through to get to a random piece of data. The worst case, you wind the entire tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Random access tape (IBM 3570 and the canceled LTO Accelis) keeps the tape at the midpoint by default. So in the average case, you wind a quarter of the tape, in the worst case you wind half the tape. This is a 2x improvement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a bi-directional tape loop, you can avoid this, but then you have a density problem because the tape is no longer wrapped in a spool, but on a series of rollers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fundamental problem with tape is that in order to get decent transfer rates, you need to move the entire reel of tape very fast, which is difficult, or spin the heads independently of the tape (helical scan), which brings its own set of alignment issues. A 7200 RPM hard drive gives you &gt;20 m/s linear velocity, exceeding tape (~7 m/s for LTO).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have the tape moving, the heads are contacting the medium, so it will wear out with every pass. Back when we used helical-scan DDS tape, it was rated for 2,000 passes, requiring 10 passes per read, so the tape was only good for 100 full read or write cycles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hard drives heads float on an air bearing, making their lifetime much greater and giving a much more stable head-disk interface. Because there's very little friction in the system, you can very precisely servo the heads to a track. Tape doesn't let you do this. The best tapes today (LTO-6) give you about 13,000 tracks per inch, where as hard drives exceed 400,000 tracks per inch, a 30x increase.&lt;/p&gt;&#xA;" OwnerUserId="7959" LastActivityDate="2018-08-17T22:05:07.993" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7305" PostTypeId="2" ParentId="7295" CreationDate="2018-08-17T22:14:44.727" Score="3" Body="&lt;p&gt;If an emulator is supposed to display a picture from an emulated computer that outputs 59.82 or 60.05 frames/second to a monitor that's going to display 59.94 fields/second and won't adapt to such incoming frame rates, it will need to do one of two things: 1. Occasionally duplicate or drop fields, or 2. Run the emulator about 0.2% faster or slower than actual speed.  Many systems' frame rates are close enough to standard video rates that making the emulated system run at a speed to match the frame rate wouldn't be a problem for most purposes, but a drift of more than 6 seconds per hour might cause trouble in applications intended for real-world time keeping.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-08-17T22:14:44.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7306" PostTypeId="2" ParentId="7299" CreationDate="2018-08-17T22:54:39.267" Score="12" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;unlike with big drums or disks, you don't need to carefully align the heads on a huge surface but can just let a small part of the tape come to the fixed head.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sounds a bit like you never had to do so ;) I started my professional life in tape/disk service And believe me, there's a lot to be adjusted at a 34xx compatible tape drive head - not to mention what's needed to adjust the capstan drive and the vacuum chambers :)) (*1)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Spooled-up tape has the obvious problem of access time, which has always pretty much confined it to backups only,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. that's maybe basic use of today – and what modern tape systems are optimized for. But there was a time when tape drives were a major component of external storage. In many cases the only one. If at all, disks where used for OS and software and &lt;em&gt;maybe&lt;/em&gt; paging. All data was done with tapes (*2).&lt;/p&gt;&#xA;&lt;p&gt;The heydays of tapes as main data media lasted through the whole 1970s with the IBM 3420 as cornerstone.&lt;/p&gt;&#xA;&lt;p&gt;A 3420-8 (the top model in 1973) could read, write and seek data at 200 inch per second at 6250 bpi - which, at 9 track was also a byte. This gave a raw speed of up to 1,25 MiB/second. A maximum sized spool of 2400ft could hold 100..130 MiB (depending on block size) and be read/written/seeked in about two minutes. Pure rewind was even shorter at ~45 seconds. Further, blocks could be read in either direction.&lt;/p&gt;&#xA;&lt;p&gt;These tapes  were not meant as backup, but work media. Usually not the tape, but the mainframes CPU and application speed was limiting throughput and when used for disk backup, the tape had to wait for disk seek.&lt;/p&gt;&#xA;&lt;p&gt;These tapes were blockwise rewritable (when keeping the same block size). From an applications view the differences to disk drives where rather minor - when keeping the tape nature in mind.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;however that's not the only way to operate a tape – it's also possible to close the tape to a loop, so each part periodically passes the head. This isn't only theoretical, it has been the standard way to achieve echo in audio production.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And as well for cheap microcomputer storage with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Exatron_Stringy_Floppy&quot; rel=&quot;noreferrer&quot;&gt;stringy floppy&lt;/a&gt; and its most well known incarnation, the &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Microdrive&quot; rel=&quot;noreferrer&quot;&gt;ZX Microdrive&lt;/a&gt;. A bit like the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7283/why-were-floppy-disks-invented-after-hard-disks/7285#7285&quot;&gt;floppy story&lt;/a&gt;, as mainframe drives were far ahead.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Except they would presumably have been cheaper, and the loops could be made much longer than a drum circumference, to trade in latency for capacity – at arbitrary ratio!&lt;/p&gt;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Beside that the fact that it has been done, that there is no speed gain.&lt;/p&gt;&#xA;&lt;p&gt;If the tape is longer than a few meters, it needs to be spooled which in all cases will make it only single direction, resulting in exactly the same &lt;em&gt;worst case&lt;/em&gt; access times as a bidirectional read standard tape, while being less effective in average seek time. Unless speed is greatly reduced, the mechanics would have needed the same effort as 3420 drives spend, thus being as expensive, without any improvement. With more simple mechanics, speed had to be greatly reduced to keep wear in check. Existing (cheap) stringy floppies did offer only 1/100 of the read sped of a 3420-8&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: What you wanted to do with loops was already achieved with standard tapes. They were a great storage (when used right), but did need exceptional effort to do so - and modern backup ones aren't in line with these requirements.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The Wiki got a rather good &lt;a href=&quot;https://en.wikipedia.org/wiki/9_track_tape#Typical_operation&quot; rel=&quot;noreferrer&quot;&gt;explanation of the workings&lt;/a&gt; in their 9-Track-Tape article - even though it's tied to a medium speed drive with vacuum chambers, but a conventional capstan.&lt;/p&gt;&#xA;&lt;p&gt;*2 - I remember several customers who even in 1980 refused to switch for disk storage. The mainframe could be booted from tape and as data storage tapes could work at similar speeds as disks. Given a useful data organization ofc.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-08-19T01:43:16.993" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7307" PostTypeId="2" ParentId="5341" CreationDate="2018-08-18T10:10:31.197" Score="3" Body="&lt;p&gt;If you are used to a modern editor then it is likely that using ed seems impossible but this applies to many modern items.  How did people cope before they existed?  You need to try to imagine that computers were new exciting things.  They could do things that were previously unimaginable.  ed didn't seem hard because we never dreamed of modern editors.  If you wanted to program then you learned ed or some similarly limited editor.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some ways, programs might actually have been bigger in those days, especially Cobol ones, as modular techniques were not so well supported or known.  Thousands of lines was not uncommon. We did not memorise whole programs, well at least I didn't, but nonetheless we could usually find our way around successfully.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have programmed with even more restricted editors. I used to own a Psion Organiser II and I programmed it on the device itself.  At the time, I travelled a lot on business and I often wrote programs to pass the time. The display was 2 lines of 16 characters so you typically could not even see a complete line of your program at once.  An example of a program that I wrote was a jet lag avoidance clock.  I would input the take off time and time zone and the landing time and time zone. It would then run the clock fast or slow depending on whether I was going east or west.  So, no sudden time change.  A larger program was a costs log for my car, petrol, service, etc, and even depreciation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Psion_Organiser&quot; rel=&quot;nofollow noreferrer&quot;&gt;Psion Organiser (Wikipedia)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7805" LastActivityDate="2018-08-18T10:10:31.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7308" PostTypeId="2" ParentId="6456" CreationDate="2018-08-18T12:15:06.663" Score="11" Body="&lt;p&gt;Expert systems didn't fail per se - the technology is still around in today's rule engines (e.g. Drools) and there are still plenty of applications for that technology.  The technology got a lot of hype in the 1970s-1980s as there was a lot of DARPA funding available for AI research at the time.  Like most 'next great thing' tech, expert systems&lt;sup&gt;1&lt;/sup&gt; found their real applications without changing the world as much as their proponents would have liked us to believe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer industry is driven by hype - the winner takes all nature of the industry means that there is a lot of money to be made in being the dominant player in a sector, and nothing much left over for second or third place.  This means that any product in a trending industry will get hyped by any means possible in order to attract customers and investors.  The hype tends to get picked up and echoed by lots of folks who don't really understand the technology.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see similar phenomena with big data or machine learning today or previous fads such as semantic web or any of the fads in I.T. that have come and gone over the past 50 years.  In this respect there's nothing special about expert systems.  Like many technologies that have trended in the past, they found their applications and the folks generating the hype got bored and moved on to other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; In the case of expert systems it might be better to say that the technology found its natural applications,  but the term 'expert system' died out.  It's certainly not the only technology in the history of computing to have acquired a different name over the years.&lt;/p&gt;&#xA;" OwnerUserId="3796" LastActivityDate="2018-08-18T12:15:06.663" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7309" PostTypeId="1" AcceptedAnswerId="7310" CreationDate="2018-08-18T16:32:22.890" Score="5" ViewCount="770" Body="&lt;p&gt;'The Home Computer Wars' has this to say about the development of the cartridge modem for the Vic-20:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The size of the case was another problem. Most modems came in bulky rectangular boxes about 10 X 4 inches. Too expensive. I suggested we put the modem on a cartridge and plug it straight into the VIC-20 user port. Again, they went back to the drawing board and somehow squeezed the circuitry into a case less than 3 X 6 inches. It was the first modem-on-a-cartridge. The best part was, our competitors couldn't duplicate it. Only the VIC-20 had the right combination of RS-232 interface and user port engineering.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I thought the RS-232 port on the Vic-20 was completely separate from the cartridge port, so a thing had to be plugged into one or the other, and if the modem was plugged into the latter then it could not use the former. What am I missing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to admit I don't recall hearing about cartridge modems for any other machine. Is this why?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-08-27T13:52:15.633" Title="Cartridge modems - was the Vic-20 a special case?" Tags="&lt;game-cartridge&gt;&lt;modem&gt;&lt;vic-20&gt;&lt;rs232&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7310" PostTypeId="2" ParentId="7309" CreationDate="2018-08-18T17:21:36.857" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I thought the RS-232 port on the Vic-20 was completely separate from the cartridge port, so a thing had to be plugged into one or the other, and if the modem was plugged into the latter then it could not use the former. What am I missing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Or better what is mixed up. The device (Serial IEC) bus is often called a serial port, but that one was driven by VIA#2 and handled by all device IDs 4 and greater. The serial interface he is refering two is the one on the unser port, produced by VIA#1 and answering to device ID 2. It's basicly the whole lower row of port B lines. While not mentioned in the VIC20 manual, the ROM did already hold all routines to bitbang a RS232 alike interface on PB of VIA#1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Vicmodem itself was basicly an application of Motorolas MC14412 Low Speed Modem circuit. The whole setup was minimized for cost, so, for example it had no way to take over a phone line from a phone, but the User had to plug the &lt;em&gt;handset&lt;/em&gt; cable into the mocem &lt;em&gt;after&lt;/em&gt; dialing.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have to admit I don't recall hearing about cartridge modems for any other machine. Is this why?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Technical there is no difference between a serial modem puged into the User port or one having a cable inbetween. Nor does the kind of connector (edge vs DB25 or whatsoever) make a difference. Maybe because of naming? TI's Modem was as well a box, this time pluged into the system bus, and having the same for an Apple II was called an internal modem/interface card. So just ask each companies marketing team why they went each way :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-08-18T18:19:49.357" LastActivityDate="2018-08-18T18:19:49.357" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7311" PostTypeId="2" ParentId="7299" CreationDate="2018-08-18T19:29:15.913" Score="8" Body="&lt;p&gt;Closed tape loops may not have been popular, but they were used occasionally. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Skw5a.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Skw5a.png&quot; alt=&quot;Colossus tape unit&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the first computers, Colossus, used a paper tape loop for read-only data storage (the ciphertext to be decoded was stored on the tape). This tape was stuck in a loop and driven at high speed (~45 km/h) past an optical reader. &lt;/p&gt;&#xA;" OwnerUserId="7159" LastActivityDate="2018-08-18T19:29:15.913" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7312" PostTypeId="2" ParentId="7270" CreationDate="2018-08-18T20:19:19.570" Score="2" Body="&lt;p&gt;I can't know for sure but I suspect one of the reasons was that &lt;code&gt;$&lt;/code&gt; was used as the string terminating character in the standard DOS &quot;print string&quot; API (&lt;a href=&quot;http://www.ctyme.com/intr/rb-2562.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;int 21h ah=9h&lt;/code&gt;&lt;/a&gt;), a convention apparently &lt;a href=&quot;http://seasip.info/Cpm/bdos.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;inherited from CP/M&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3783" LastActivityDate="2018-08-18T20:19:19.570" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7313" PostTypeId="2" ParentId="2181" CreationDate="2018-08-18T22:28:29.587" Score="5" Body="&lt;p&gt;I don't know if you managed to get this one working, but I can confirm that it's possible. I have a SupersPORT and I managed to map out the matrix and connect the keyboard to a Teensy 2.0 running the hasu TMK firmware, which let me use it as any other USB keyboard (disclosure: I am the one who posted the pinout and &lt;a href=&quot;https://deskthority.net/wiki/Zenith_Supersport_SX&quot; rel=&quot;noreferrer&quot;&gt;keyboard matrix on the Deskthority wiki&lt;/a&gt; posted before).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a working firmware build for the Teensy, so if you haven't already built this, you can message me your email and I'll send you what you need.&lt;/p&gt;&#xA;" OwnerUserId="3375" LastActivityDate="2018-08-18T22:28:29.587" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7314" PostTypeId="2" ParentId="7309" CreationDate="2018-08-19T10:14:15.147" Score="1" Body="&lt;p&gt;The VIC-20 was aimed at the home gaming crowd who wanted to play video games but needed an excuse to justify to their wives why it was OK to drop $400 on a computer.  The excuse was &quot;could use it for the kids homework&quot; or some such.  That's why the thing had a full keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However later when the C64 came out Commodore dropped the price on the 20's and quite a lot were sold to the hobby crowd (that was when I bought mine)  That crowd often owned older computers or bought used gear (such as modems) from company tech sales and so on and was highly resentful that Commodore expected them to fork over $100 for a modem that plugged into the user port.  Quite rapidly 3rd parties began selling TTL-to-real RS232 signal converters and plans were in general circulation (I built one myself on a breadboard) for them so that the hobby crowd could spend only $10 for the converter and plug in their Wargames-style 300 baud modems.  In addition many of the hobby crowd wanted to connect other serial devices not just a modem.  The blurb you quoted was pure salesdroid rubbish that was dumped out when Commodore realized the level converters plugged into used 300 baud modems were causing them to have warehouses of cartridge modems collecting dust.&#xA;Commodore later admitted that the engineers had wanted to put real +12 - -12v serial ports on the Vic-20 but the hardware UART chips simply were not ready when the VIC went into production so they hurriedly wrote up assembler to simulate a serial port on the user port.&lt;/p&gt;&#xA;" OwnerUserId="10398" LastActivityDate="2018-08-19T10:14:15.147" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7315" PostTypeId="2" ParentId="7279" CreationDate="2018-08-19T10:38:45.313" Score="3" Body="&lt;p&gt;Dell currently manufactures the AIO  (all in one) that is a single monitor/computer form factor.  Nobody in their right mind (in my opinion after working with them) buys them because they use laptop hard disks (that are much less reliable) and take a special tool to open (making their support much harder) and if the screen died the entire computer is scrap.  You can buy a micro form factor and a cheap $100 monitor that occupies the same space.  This is true today and it was also true back in '83 when I was in high school. (although they didn't have micro form factors back then)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original beige all in one Mac also took a special torx wrench to open.  And the original iMacs with the colors also took special tools and techniques to successfully open without breaking the little wires in them.  I supported school labs with these in them and we hated the things.  When the schools I supported started talking about upgrading I told them if they got another AIO style form factor my prices for maintaining those would jump significantly.  Many other IT consultants and admins said the same thing.   The shift to standard form factors was driven much more by the IT departments and consultants in these school districts wrenching control of computer purchasing away from the educators and into the hands of the dedicated IT departments, due to problems created by the computer manufacturers attempting to make AIO designs unserviceable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The focus today is on tablets but every education-related application out there that is released for the iPad is also available in Android.  And the Android tablets are dominating.  4 years ago when my son was in High School the district went to iPads only because Apple literally gave the devices to the district.  Then the district discovered how fragile they were and started demanding the parents buy insurance if they handed out a tablet.  I told my son he had a choice I'd pay the insurance for the ipad or I'd give him the money for the insurance and if he could find a cheaper Android tablet and run all the apps his teacher required he could keep the tablet and pocket the difference.  He showed up the first day in his classes with the tablet and some of the teachers squawked but I told them unless they could find an app that wouldn't run on the Android tablet I wasn't going to get him the iPad.  They never could.  He was the only kid with an Android tablet that first term.  But word spread quick and 4 years later when he graduated every kid in the school was bringing their own Android tablets and the iPads were collecting dust and the district was getting no insurance payments from anyone.  Last I heard they discreetly sold them all off to a used computer dealer.&lt;/p&gt;&#xA;" OwnerUserId="10398" LastActivityDate="2018-08-19T10:38:45.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7316" PostTypeId="1" CreationDate="2018-08-19T10:52:23.727" Score="0" ViewCount="449" Body="&lt;p&gt;The most common way retro machines made sounds were with programmable sound generators (PSG); there was a bunch of square waves, saw waves or noise channels at disposal. When technology evolved eventually FM-synthesis and sampling became most common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lesser common technique is an improvement of regular PSG, that instead of allowing only simple waveforms such as square wave, saw wave, etc... allows to load any waveform in RAM. Unfortunately I don't know the name (if there's one) for that technique. So far I know the following systems have that:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Gameboy but only for channel #3&lt;/li&gt;&#xA;&lt;li&gt;The Famicom Disk Sytem (used alongside normal Famicom sound)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://wiki.nesdev.com/w/index.php/Namco_163_audio&quot; rel=&quot;nofollow noreferrer&quot;&gt;Namco 163 's sound expansion chip&lt;/a&gt; for some rare Famicom games (used alongside normal Famicom sound)&lt;/li&gt;&#xA;&lt;li&gt;Some Konami arcade boards (I'm currently looking up as I don't remember the details)&lt;/li&gt;&#xA;&lt;li&gt;The PC-Engine (known as the Turbo-Grafx 16 in the United States)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I wonder if there are other system based on this principle ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note : I'm not looking for systems based on samples, but on custom waveforms (&quot;wavetable synthesis&quot; is unfortunately used for both) The differences are that for what I call &quot;waveform synthesis&quot; in this question is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There is no settable length or loop point, no (hardware) attack phase, only a &lt;strong&gt;fixed-size loop of samples&lt;/strong&gt;, typically of 16, 32 or at most 64 samples.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Memory for waveforms is small&lt;/strong&gt;, and typically part of the sound chip itself (the sound chip doesn't access RAM to read samples).&lt;/li&gt;&#xA;&lt;li&gt;Memory for waveforms is per-channel, i.e. each sound channel has it's own waveform defined somewhere fixed, and cannot &quot;point&quot; to different waveforms at runtime.&lt;/li&gt;&#xA;&lt;li&gt;Low bit-depth, typically 4 or 5 bits per sample instead of at least 8 bits for sampling synth&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The audio chip can play custom waveforms without CPU intervention.&lt;/strong&gt; While it might be possible to play advanced samples with CPU trickery and/or monopolizing the CPU at this task, just like in other, more classical Programmable Sound Generator (PSG) chips, this does not count.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2123" LastEditorUserId="2123" LastEditDate="2018-08-19T19:34:22.477" LastActivityDate="2018-08-19T19:34:22.477" Title="Which machines, other than the PC-Engine, uses custom-waveform synthesis for sound?" Tags="&lt;sound&gt;" AnswerCount="0" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7317" PostTypeId="2" ParentId="7247" CreationDate="2018-08-19T11:02:35.327" Score="1" Body="&lt;p&gt;There's no way to reverse the process.  Old wire PVC insulation age-hardens and the plastic used in connectors becomes brittle.  The plastic basically oxidizes - plastic rust, you might say.  If you wanted to stop the process you could keep the computer in a sealed tank of nitrogen.&lt;/p&gt;&#xA;" OwnerUserId="10398" LastActivityDate="2018-08-19T11:02:35.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7318" PostTypeId="1" AcceptedAnswerId="7319" CreationDate="2018-08-19T12:25:26.620" Score="5" ViewCount="421" Body="&lt;p&gt;A very interesting article about an interesting, late (in more senses than one) and little remembered computer:&#xA;&lt;a href=&quot;https://www.theregister.co.uk/2013/06/28/30_years_on_the_story_of_the_memotech_mtx/?page=3&quot; rel=&quot;noreferrer&quot;&gt;https://www.theregister.co.uk/2013/06/28/30_years_on_the_story_of_the_memotech_mtx/?page=3&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;says this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Coming as the MTX did from the SM1, it was decided very early on that it would measure up to the de facto standard width of a business computer, 475mm, and that it would be clad in Memotech’s trademark black anodised aluminium. The extra numeric keypad and function keys were added because the Qwerty deck alone looked lost among the acres of metal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I never heard of a de facto standard width of a business computer before. Where did that come from?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-03-17T17:24:35.623" Title="De facto standard width of a business computer" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7319" PostTypeId="2" ParentId="7318" CreationDate="2018-08-19T12:50:26.930" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I never heard of a de facto standard width of a business computer before.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No there wasn't one. Beside the  fact that defacto is quite vague if not said in conjunction with a specific example, there was no generally adopted. Especially not in 1983, when everyone was still making different machines with much differing features. The fact alone that Memotech did design their own layout does show that there wasn't a conform standard to follow.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Where did that come from?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most likely it's an euphemism to avoid saying 'IBM', as the PC/AT Keyboard did measure 47.5 cm (PC/XT was 45.5).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Many nice (read more than just the typewriter field) computer keyboards ranged between 40 and 55cm. Thus computer furniture is made to accomplish these sizes. Building a keyboard at or slightly below 50 cm is therefore a good idea, so why not just take it from the emerging machine made by this three letter company.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-08-20T12:59:32.090" LastActivityDate="2018-08-20T12:59:32.090" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="7320" PostTypeId="2" ParentId="6754" CreationDate="2018-08-19T13:51:36.487" Score="4" Body="&lt;p&gt;Magnetic 'floppy' disk technology did get used in larger formats such as the IOMega zip drive.  Floppies were obviously getting obsolescent by the back end of the 1980s but they got by as a 'good enough' default until CD-ROMs got cheap.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;CD-ROMs took over the role of installation media and by the mid 1990s most computers were networked so much of the requirement to shift files between machines was met by other tech.  It turned out that most folks didn't actually have a requirement to transfer large files by sneaker net.  Those folks that did used tech like Zip drives or removable hard disks but they were really a niche market item.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the back end of the 1990s recordable CD technology had hit the mass market, followed on in the 2000s by USB flash media.&lt;/p&gt;&#xA;" OwnerUserId="3796" LastActivityDate="2018-08-19T13:51:36.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7324" PostTypeId="2" ParentId="7299" CreationDate="2018-08-20T06:12:23.653" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Microdrive&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/ZX_Microdrive&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Microdrives used tiny (44 × 34 × 8 mm including protective cover) cartridges containing a 5-metre (200-inch) endless loop of magnetic tape, 1.9 mm wide, driven at 76 cm/second (30 in/second); thus performing a complete circuit in approximately 8 seconds.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Exatron_Stringy_Floppy&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Exatron_Stringy_Floppy&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rotronics_Wafadrive&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Rotronics_Wafadrive&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The former ZX owners would tell you stories about how unreliable these tapes were. Compared to audio compact cassette players (TRS-80 !), at least you didn't have to press the play-stop-forward-reverse-record buttons. &lt;/p&gt;&#xA;" OwnerUserId="7685" LastActivityDate="2018-08-20T06:12:23.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7325" PostTypeId="2" ParentId="7247" CreationDate="2018-08-20T09:02:50.680" Score="3" Body="&lt;p&gt;Preserving PCBs of that age is possible. Firstly, replace any components that might leak, such as capacitors. Plastic parts such as IC sockets and connectors can be replaced too. Then you can move on to the actual PCB itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PCB is made up of multiple layers. The most important one is the copper layer which carries electrical signals. It is protected by a top coating that stops it oxidizing and degrading, but the coating itself can get damaged or degrade over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to replace both the copper and upper layers with some work. The copper layer can be fixed by cutting strips of thin copper to patch damaged tracks. The solder resist layer on top of it can also be patched up manually.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-08-20T09:02:50.680" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7326" PostTypeId="2" ParentId="6754" CreationDate="2018-08-20T16:29:21.643" Score="0" Body="&lt;p&gt;Back when floppies were used as a primary working medium, increasing the size of a floppy would allow one to perform more tasks without having to switch disks &lt;em&gt;repeatedly&lt;/em&gt;.  At the time 1.44MB disks were being developed, many machines either had no hard drives, or had hard drives that were small enough that people would still keep working documents on floppies.  Going from a 720K drive to a 1.44MB drive thus offered a significant improvement in usability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Improvements beyond 1.44MB, however, would offer limited benefit in most cases even for people without CD-ROM drives.  The only situations where someone would generally need to swap disks many times would be either when installing software, or when performing a large-scale backup to floppies.  If a program just needs to be installed once, and will then be used a lot after that, there isn't really a huge difference between having to insert 10 disks once each or 20.  Someone who's doing large-scale backups might benefit from using a 2.88MB drive instead of 1.44MB, but would benefit even more from using a tape drive.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-08-20T16:29:21.643" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7327" PostTypeId="1" AcceptedAnswerId="7328" CreationDate="2018-08-20T19:55:34.860" Score="16" ViewCount="1685" Body="&lt;p&gt;This question expands on &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5369/how-does-the-6502-implement-its-branch-instructions?newreg=7b7d72b23dc94370b5b96bdd611240de&quot;&gt;How does the 6502 implement its branch instructions?&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm working on a cycle accurate VHDL implementation on an FPGA.  I have much of the program logic already written, but I can't wrap my head around how to logically calculate the relative addressing from the branch instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From everything I've read and reviewed, the only outputs of the ALU are: result, alucout, and aluvout.  I've read that the flag outputs from he ALU are routed to the control logic, even though it's not shown in the block diagram.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I built a truth table on several different scenarios for offsets, and it seems you can't just use carry and overflow to determine whether or not to carry to the high byte of the program counter.  I even thought to move the bit 7 logic from the flags register logic to the alu, and route that to the control logic, but that wouldn't help either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the resources I've been using are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.witwright.com/DonPub/6502-Block-Diagram.pdf&quot; rel=&quot;noreferrer&quot;&gt;Block Diagram&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://visual6502.org/JSSim/expert.html&quot; rel=&quot;noreferrer&quot;&gt;Visual 6502&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://apprize.info/programming/65816/11.html&quot; rel=&quot;noreferrer&quot;&gt;Programming the 65816 - Has a section on the relative addressing in conditional branching&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://nesdev.com/6502.txt&quot; rel=&quot;noreferrer&quot;&gt;NESDev 6502 Text File&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to put all of this madness into a question... How is the (signed)offset calculated against the (unsigned)program counter, and how do you determine if you need to add a cycle to calculate the high byte of the program counter?&lt;/p&gt;&#xA;" OwnerUserId="10405" LastActivityDate="2018-08-20T21:33:24.023" Title="6502 branch offset calculation" Tags="&lt;programming&gt;&lt;6502&gt;&lt;mos-650x&gt;&lt;microprocessor&gt;&lt;microcode&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7328" PostTypeId="2" ParentId="7327" CreationDate="2018-08-20T20:18:35.167" Score="16" Body="&lt;p&gt;Quick shot, without looking it up in Visual 6502 (which would be the authorative option):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sign extend the branch offset (replicate MSB of offset), that will tell you the ALU input for the PC high byte. Possible values are 0 and -1 (all 1s), these are available as constants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Carry and sign of the branch offset together determine if an extra cycle is necessary (for carry and positive offset, or no carry and negative offset). That's a simple XOR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The overflow flag shouldn't play a role.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-08-20T20:18:35.167" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7329" PostTypeId="2" ParentId="7327" CreationDate="2018-08-20T21:33:24.023" Score="3" Body="&lt;p&gt;AFAIR it's &lt;strong&gt;&lt;code&gt;Carry&lt;/code&gt; XOR &lt;code&gt;Sign&lt;/code&gt;&lt;/strong&gt; (of the offset).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this yields true, it's &lt;em&gt;increment&lt;/em&gt; when &lt;code&gt;Carry&lt;/code&gt;, otherwise &lt;em&gt;decrement&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-08-20T21:33:24.023" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7330" PostTypeId="2" ParentId="7247" CreationDate="2018-08-21T08:45:12.427" Score="2" Body="&lt;p&gt;Actually, there isn't much on a ZX Spectrum mainboard that would require specific care or couldn't be replaced with parts still available. The ZX Spectrum is simple enough to be easily replaced and all major parts are still available, so, if we're talking decades instead of centuries, the situation is quite good (The ZX Spectrum was made in such large quantities that, beyond off-the-shelf replacement mentioned in this answer, you can easily find a donor for parts. I'm not mentioning this because this would be my last resort for repair - Every ZX Spectrum which is still around deserves to be preserved). The only things that actually &quot;age&quot; significantly are the capacitors on the board and anything made from plastic:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The Spectrum is specifically annoying as it is known to sometimes literally self-destruct if you're unlucky and some of the electrolytic capacitors have lost capacity. See &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2172/when-or-should-we-expect-our-8-bit-motherboards-to-fail-due-to-the-capacitors/2188#2188&quot;&gt;this answer&lt;/a&gt; for details. That is probably what happened to one of your computers. So, before even switching on a ZX Spectrum new to you, replace the capacitors. This is a MUST.&lt;/li&gt;&#xA;&lt;li&gt;One specific component which might seem hard to replace is the ZX Spectrum ULA, but since recently, there are replacements available based on modern technology (Search for &lt;em&gt;NebULA&lt;/em&gt; or &lt;em&gt;ULAPlus&lt;/em&gt;, the latter not available in hardware atm, to my knowledge).&lt;/li&gt;&#xA;&lt;li&gt;Keyboard connectors are increasingly hard to find, they are, apparently, no longer made. So, treat them with some respect and don't abuse them.&lt;/li&gt;&#xA;&lt;li&gt;RAM replacement modules are available that replace the 4116 and 4164 RAM chips of the Spectrum with more modern (static RAM) chips.&lt;/li&gt;&#xA;&lt;li&gt;All other electronic components are still made or can be replaced with modern equivalents.&lt;/li&gt;&#xA;&lt;li&gt;The PCB itself is really hard to break (other than by horrible layman repair attempts), but even then it is possible to replace it with, for example, a modern Harlequin board.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, from an electronics point of view, the replacement situation is quite good, very probably better than with any other 8-bit computer. Mechanical components (especially the keyboard connectors) are a bit harder to replace, even if complete case and keyboard replacements are manufactured in China. Plastics are aging, and replacements have become rarer. An easy way to preserve a ZX Spectrum for a long time is to store it in proper conditions. Plastics are sensitive to extreme heat and UV (sunlight), the capacitors age much faster under temperature, the metal parts are allergic to humidity and might begin to corrode. Store the computer in a dry, cool and dark place and &lt;em&gt;use&lt;/em&gt; a replica, like the Harlequin, as an everyday machine.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-08-21T10:03:16.533" LastActivityDate="2018-08-21T10:03:16.533" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7331" PostTypeId="1" AcceptedAnswerId="7332" CreationDate="2018-08-21T11:12:08.857" Score="5" ViewCount="492" Body="&lt;p&gt;I stumbled across this computer in an article on hackaday, &lt;a href=&quot;https://hackaday.com/2014/12/15/home-computers-behind-the-iron-curtain/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Home computers behind the Iron Curtain&lt;/a&gt; and since it has this bizarre resolution, I looked closer into it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PMD_85&quot; rel=&quot;nofollow noreferrer&quot;&gt;Some claims from Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;288×256 resolution&lt;/li&gt;&#xA;  &lt;li&gt;4-level attribute (flickering, grayscale or colours, depending on model), selectable per 6-pixel-wide stripes&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I found these numbers rather strange so I tried to work out what was happening here. I managed to track down this memory map. According to this graphic, memory is laid out 48 bytes to a scanline, and scanlines are 64 bytes apart, so that there are 16 bytes' space available to the user, between those scanlines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SiAsO.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SiAsO.gif&quot; alt=&quot;The memory of the PMD-85, charted and described in Slovakian&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;48 bytes equal 384 bits, but if each byte has 6 pixels, that could explain where the horizontal resolution of 288 pixels comes from, and neatly coincides with the 6-pixel wide stripes that share an attribute. Now, this is all speculation, so I'd appreciate if anyone can confirm this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is how each byte is decoded. Those two left-over bits presumably encode an attribute of sorts, but that doesn't seem nearly enough to enable reasonable colour graphics.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="175" LastEditDate="2018-11-09T16:26:47.127" LastActivityDate="2019-12-09T12:12:37.237" Title="How does the PMD 85 display colour or greyscales?" Tags="&lt;graphics&gt;&lt;video&gt;&lt;memory-layout&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7332" PostTypeId="2" ParentId="7331" CreationDate="2018-08-21T11:21:09.160" Score="9" Body="&lt;p&gt;Well, original PMD85 was greyscale, so SECAM does not come into the picture (pun intended).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lower 6 bits display as pixels, and these are stored back-to-front. The upper two bits encode an attribute - originally flash (bit 7) and low intensity (bit 6), but in PMD 85-3 this was reinterpreted as 4 level greyscale, &lt;em&gt;or&lt;/em&gt; these 4 colours if using an RGB output:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;00 - Green&lt;/li&gt;&#xA;&lt;li&gt;01 - Red&lt;/li&gt;&#xA;&lt;li&gt;10 - Blue&lt;/li&gt;&#xA;&lt;li&gt;11 - Magenta&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://web.archive.org/web/20180319104610/https://pmd85.borik.net/wiki/VideoRAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt; (in Slovak) for more information.&lt;/p&gt;&#xA;" OwnerUserId="476" LastEditorUserId="7347" LastEditDate="2018-11-17T02:39:52.990" LastActivityDate="2018-11-17T02:39:52.990" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7333" PostTypeId="1" AcceptedAnswerId="7336" CreationDate="2018-08-21T05:08:14.170" Score="8" ViewCount="856" Body="&lt;p&gt;Telephone line modems were important in home and business computing for decades. Like a lot of people, I started with a Hayes Smartmodem 300. The modem came out in 1981 but I got mine about 1990. By then it was considered so slow that a lot of bulletin boards wouldn't let me call in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From when did installed 1200bps modems outnumber 300bps units?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5064/what-technological-factors-drove-the-rise-of-high-speed-modems-in-the-early-19&quot;&gt;What technological factors drove the rise of “high-speed” modems in the early 1990s?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10408" OwnerDisplayName="Aaron Brick" LastEditorUserId="4335" LastEditDate="2018-08-21T13:59:20.593" LastActivityDate="2018-08-23T22:30:01.993" Title="When did 1200bps become the modal speed of installed modems?" Tags="&lt;history&gt;&lt;modem&gt;" AnswerCount="4" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7334" PostTypeId="2" ParentId="7333" CreationDate="2018-08-21T13:13:07.577" Score="5" Body="&lt;p&gt;Short answer: Never  - as virtually every 1200 bps also speaks 300 bps :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside that, it's highly vague to pick any point in time, as the use of modems differed extremely over use cases which itself carried vastly different user numbers, so using any total might be distorting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, by 1990, when you got your 300 bps modem, I was already using a Trailblazer for 3-4 years. Depending on the connection switched, it's PEP protocol (*1) sustained data rates of 18 or 19 kbps, depending on the line switched (*2). And all my peers where equipped alike - and ofc, all BBSes we called.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a development point, 300 bps are around since the 1962 (Bell 103A), the 1200 bps 212A was introduced in 1976. Hayes did introduce their 300 bps Bell 103 compatible Smartmodem in 1981 and a 212 compatible Smartmodem 1200 in 1982. Internationally these standards were, in conjunction with other, similar ones, laid down as ITU-V.21 and V.22.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yes, even by only looking at the US, 1200 bps were around in consumer-grade devices almost 10 years before you got your modem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, worldwide (and in the US after 1985) 1200 didn't play a big role at all, as 2400 bps was standardized in 1984 as ITR V22bis (*3). Since Standards take some time to become official, manufacturers already offered V.22bis compatible modems operating at 300, 1200 or 2400 bps line speed. Hayes did so in early 1985. By 1987 the Smartmodem 2400 was the only one offered, and available at or even below 200 USD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, in 1990 acquiring a 1200 bps modem was only possible second hand, and even then it was like stone age equipment. Standard was 2400 bps or faster. Not many BBS operators accepted users who occupied the line 8 times longer than what was considered average.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - A protocol originally developed for military use in less than ideal conditions, with an emphasis to get a connection no matter how disturbed the line is - effectively the base of today's ADSL, pumping several megabits over classic phone lines :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - History insert: When in 1989/90 the iron curtain fell, we did help new BBSes popping up in East Germany with Telebit modems, enabling them to transfer at speeds never below 10 kbps - which is darn good, considering that much of the eastern phone network was basically pre-war technology - and often even from before then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The suffix &lt;code&gt;bis&lt;/code&gt; denotes a second, extended edition with new features - likewise &lt;code&gt;ter&lt;/code&gt; stands for a third one. Both taken from French, once the official language for telecommunication standards.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-08-21T13:47:36.073" LastActivityDate="2018-08-21T13:47:36.073" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7335" PostTypeId="2" ParentId="7331" CreationDate="2018-08-21T13:51:38.213" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Keep in mind, my speculations are based on my knowledge of how the Apple II works.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which is, graphics wise, a total different beast than any other computer on this planet. It's basically analogue display digital encoded.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It's not NTSC. Czechoslovakia used SECAM at that time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which only affects colour, which in turn wasn't used at all, so it's all about a classic European 50 Hz B&amp;amp;W picture.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;48 bytes equal 384 bits, but if each byte has 6 pixels, that could explain where the horizontal resolution of 288 pixels comes from, and neatly coincides with the 6-pixel wide stripes that share an attribute. Now, this is all speculation, so I'd appreciate if anyone can confirm this.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly that way it is. Each byte holds six on/off pixels plus two used for attributes. In grayscale mode it did set the intensity for these 6 pixels.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;memory is laid out 48 bytes to a scanline, and scanlines are 64 bytes apart,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That very much simplifies the design for the counters for a scan line length. All that's needed is a 6 bit counter, which is used generate the lower 6 bits of screen address, as long as its top bits are not  &lt;code&gt;11&lt;/code&gt;. Feeding this counter with half the CPU clock (2,048 MHz) produced a line length of 64 µs, exactly (*1) what a line should be, while the output carrying part will be 48µs, so close and well within the allowed 52 µs (*2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, the 256 lines are a way for needing only a single 8 bit line counter providing the address, and its carry as 'end of field' marker. An 8 bit line counter plus a 6 bit pixel (group) counter can now easily provide a 14 bit memory address. All what's needed to finalize is another counter (maybe even an analogue circuit) to define picture length.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;so that there are 16 bytes' space available to the user, between those scanlines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yup, much like the screen holes on the Apple II. After all, video logic is here  formed around the TV signal (just as in many machines). Just not as special as with the Apple.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So my question is how each byte is decoded. Those two left-over bits presumably encode an attribute of sorts, but that doesn't seem nearly enough to enable reasonable colour graphics.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure it does. It allows to either select two on/off attributes, or one with four values. On a colour output this can be used to give one colour to each switched on bit within that byte, and another to the next. Effectively giving 4 colours plus black on screen. So it's a bit like the restriction the Apple II got - just less weird.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Restricting colour to character positions has always been a common trick - just think C64 - here it's narrowed down to on colour selection per 6 horizontal pixel.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, it's a tiny bit less, but way within the tolerances defined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Using the whole line width would have allowed 312 pixels to be shown, but now the 'comparator' would have been more complex than a simple 1/4 7400.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-11-09T11:50:21.610" LastActivityDate="2018-11-09T11:50:21.610" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7336" PostTypeId="2" ParentId="7333" CreationDate="2018-08-21T14:07:57.307" Score="7" Body="&lt;p&gt;I don't think it is likely that there will be published numbers showing the relative usage of different modem connection speeds over any large population of users. The best we can provide is some historical perspective on the timeframe for transition from 300 baud to higher speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, 1200 baud modems enjoyed a fairly brief popularity because they were superseded quickly by low-cost 2400 baud models. Roughly speaking, 300 baud models dominated consumer purchases in the early 1980s, and 2400 baud models dominated consumer purchases in the late 1980s. There were a couple of years in the mid-1980s when 1200 baud modems were significantly cheaper and more widely supported than 2400 baud modems. More info is provided in the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5064/what-technological-factors-drove-the-rise-of-high-speed-modems-in-the-early-19&quot;&gt;related question&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-08-21T14:07:57.307" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7337" PostTypeId="2" ParentId="7181" CreationDate="2018-08-21T17:11:12.000" Score="2" Body="&lt;p&gt;I graduated in computer science in 1983, and worked for Robocom, a company that made the &quot;BitStik&quot; CAD system for Apple II machines, and later, RoboCAD, a system that eventually failed to compete with AutoCAD. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thinking back to those days, a major advantage of hard disks was &lt;em&gt;reliability&lt;/em&gt;. Working with floppy disks full-time, you'd expect to have one or two go bad each month. But if you just used floppies for backups, in proper rotating sets, backing up once every couple of days or so, they were almost completely reliable, simply because they weren't being used so hard. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Smoking was common in offices at the time, and ash is bad for floppy drives and disks. But sealed hard disks didn't notice. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2018-08-21T17:11:12.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7338" PostTypeId="2" ParentId="7333" CreationDate="2018-08-21T17:15:47.830" Score="3" Body="&lt;p&gt;It is hard indeed to answer the question, but I can share my Canadian anecdotal experience and I think it will give a general sense of the timeline, plus or minus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I acquired my first modem in 1984 - a Commodore VICmodem, which was the first sub-$100 modem on the marketplace.  At that time, 1200 bps modems already existed but were pretty much exclusively used by businesses (and the odd bulletin board system).  The vast majority of BBSes in my city ran at 300 bps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By 1986 Commodore had come out with the 1670 modem, a 300/1200 bps Hayes-style smartmodem, and other companies also had fairly inexpensive 2400 bps modems.  I would think that it was here or slightly after that 1200 bps started to outnumber 300 bps ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By 1987 when I got my first Amiga, I had migrated to 2400 bps modems, which had come down significantly in price thanks to companies like Practical Peripherals and Supra, and at this point, 1200 bps modems probably started becoming a minority.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things really changed when high-speed modems came out, and the paradigm shifter there was the Rockwell chipset and modems like the SupraFAXModem v.32bis (14.4kbps), but this is outside the scope of your question.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastEditorUserId="6986" LastEditDate="2018-08-23T22:30:01.993" LastActivityDate="2018-08-23T22:30:01.993" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7339" PostTypeId="2" ParentId="7309" CreationDate="2018-08-21T17:28:39.250" Score="2" Body="&lt;p&gt;So-called cartridge modems existed for a few different platforms:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Commodore - originally came out with the VICModem (1600) but also, later, the 1650, 1660, and 1670 modems, all of which fit onto the user port of the VIC-20, Commodore 64 or Commodore 128.  While not technically cartridges, they were cartridge-like in format, and simply connected to the computer's user port without a cable in between.  Third parties made modems also, that used a similar form factor, such as the Pocket Modem, HESmodem, Mitey Mo and others.&lt;/li&gt;&#xA;&lt;li&gt;Atari - while Atari's own modem used a cable, third party modems such the Pocket Modem (in Atari version) plugged right into the data port on the back of the floppy drive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Other companies may have had modems with this form factor, too, but I've not seen them.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2018-08-21T17:28:39.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7340" PostTypeId="1" AcceptedAnswerId="7342" CreationDate="2018-08-21T23:48:50.013" Score="2" ViewCount="308" Body="&lt;p&gt;I recently got my hands on a couple of Atari 800's and peripherals (disk drives, printer, cartridges, floppy disks). Before I start using this equipment, can someone point me in the right direction as to what are the most basic steps to do to remove dust and grime that's been accumulating since ~1985.  Could rubbing alcohol be used on the cartridges and the cartridge slots?  How to clean keyboards?  Anything to do to disk drive?  I'm guessing there might be a user group or articles addressing these questions but have not found them.&lt;/p&gt;&#xA;" OwnerUserId="10407" LastEditorUserId="621" LastEditDate="2018-08-22T02:06:48.650" LastActivityDate="2018-08-22T09:40:33.787" Title="How to clean (or prep) Atari 800 or any old computer" Tags="&lt;maintenance&gt;&lt;atari-800&gt;&lt;game-cartridge&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7341" PostTypeId="2" ParentId="7340" CreationDate="2018-08-22T00:42:08.713" Score="2" Body="&lt;p&gt;Just vacuum the big stuff, dust off with a soft tissue, rub sticky stuff with a wet towel and if necessary rinse with water. Use soap on plastic, and again rinse. If water in your area is particular, use demineralized for the last rinsing. Give it a good and thorough dry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, even using a dishwasher (after taking it (the computer, not the dishwasher) apart and removing bolts and metal pieces as well as cables) might be fine. Don't put it on hot and no detergent, or at maximum some soap. Rinse afterwards once more, dry throughout and enjoy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If PCB contacts are still malfunctioning (shouldn't), a rubber (*1) is best to remove potential thin layers of rust. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside that, checking other, alike questions (and answers) might help:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6077/6659&quot;&gt;How safe are modern motherboard-cleaning techniques for this 1987 Soviet portable computer?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1447/what-should-i-do-to-clean-up-a-power-mac-g3-thats-been-outside-for-two-years&quot;&gt;What should I do to clean up a Power Mac G3 that's been outside for two years?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/167/how-should-i-clean-the-plastic-exterior-of-my-computers-and-parts&quot;&gt;How should I clean the plastic exterior of my computers and parts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Just a quick selection, there are many more)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - that is a classic soft pencil eraser. Do &lt;em&gt;not&lt;/em&gt; use any other eraser, hard ones, or glas fiber based ones, as they will scrap away the cover (gold) layer and lead to massive rust.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-08-22T09:40:33.787" LastActivityDate="2018-08-22T09:40:33.787" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7342" PostTypeId="2" ParentId="7340" CreationDate="2018-08-22T07:58:42.213" Score="0" Body="&lt;p&gt;For surface dirt, I normally use &lt;em&gt;foam cleaner&lt;/em&gt;. It's kind of like soapy water in a can but has less crud in it and doesn't slop everywhere like actual soapy water. Spray on, and wipe off with a cloth. Don't be shy with it; it's hard to use too much. Way back in the 90s when I was working for a shifty TV dealer, we'd use it extensively to tart up old stuff for resale. It is sometimes also sold as whiteboard cleaner, however not all whiteboard cleaners are foam cleaner, so check the ingredients.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Foam cleaner can be used on PCBs, but only as a last resort due to so much grot and crud (e.g. it used to be owned by a smoker or has had a hard life in a factory) that they need cleaning. The problem seems to be that it is slightly conductive and/or capacitative so it interferes with the board's operation. It shouldn't cause it to blow up if you turn it on earlier, but I recommend you leave the board to dry out for a day or two before testing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For connectors and switches, you want &lt;em&gt;contact cleaner&lt;/em&gt;. It should come with a straw so you can direct it more accurately into the switch mechanism and along the edge connector. Use enough, but not too much, as the oil gets everywhere. You may need to dig the foam cleaner back out if you were too generous :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of these are cheap. I paid €5.24 for my last can of foam cleaner and about the same for contact cleaner.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2018-08-22T07:58:42.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7344" PostTypeId="2" ParentId="7309" CreationDate="2018-08-22T18:06:59.617" Score="3" Body="&lt;p&gt;The Atari's originally included a 12V feed that was passed out through SIO and could be used to drive RS-232. I think the only product that ever used it was the 835 modem, but I'm not sure, it might have had a separate power supply as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting from the 1200, the 12V was removed and people started to get creative. The later Atari modems were similar in size to the VIC's, especially the XM301:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n7zH2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n7zH2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The connector is the Atari SIO cable - not exactly a user port, but definitely not an RS-232 either. There were 3rd party versions without the cable that plugged directly into the port. The one on the left plugs directly into the cartridge port, so I guess it's an exact match for what you're looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HTuG7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HTuG7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other small-form, non-RS232 modems include the ADB examples from the Mac:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lIYDa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lIYDa.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was a particularly dumb solution, as the ABD was seriously limited in performance terms as it was a polled protocol and the CPU simply didn't spend a lot of time working it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;ps&lt;/strong&gt; I always found it amusing that we would take 5V TTL, convert to 12V RS-232, and then immediately convert back to TTL again in the device. A complete waste of effort that was reinforced by the IEEE's ham handed standards efforts that resulted in monstrosities like &lt;a href=&quot;https://en.wikipedia.org/wiki/RS-449&quot; rel=&quot;nofollow noreferrer&quot;&gt;RS-449&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-08-27T13:52:15.633" LastActivityDate="2018-08-27T13:52:15.633" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7345" PostTypeId="1" AcceptedAnswerId="7349" CreationDate="2018-08-22T18:15:33.210" Score="6" ViewCount="677" Body="&lt;p&gt;Can anyone offer some back-of-envelope sort of estimates of what sort of gate count was needed to add a multiplier to 8-bit CPUs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ask because I find it a bit odd that the 6809 had one, but none of the other chips of the era did. It seems that B or C models of the 6502 and Z80 would have the opportunity to add this, so I assume there is a good reason why they didn't?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-08-23T14:32:36.757" Title="Hardware multipliers on classic CPUs" Tags="&lt;z80&gt;&lt;6502&gt;&lt;6809&gt;" AnswerCount="2" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="7346" PostTypeId="1" AcceptedAnswerId="7348" CreationDate="2018-08-22T19:24:53.623" Score="29" ViewCount="5489" Body="&lt;p&gt;Over on the &lt;a href=&quot;https://twitter.com/TwoBitHistory&quot; rel=&quot;noreferrer&quot;&gt;twobithistory Twitter channel&lt;/a&gt;, I came across &lt;a href=&quot;http://gothamist.com/2015/10/15/grand_central_computer_video.php&quot; rel=&quot;noreferrer&quot;&gt;this post from Gothamist&lt;/a&gt; about a computer from 1913 under Grand Central that was purportedly developed by Westinghouse.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the tour guide who was giving the talk,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Westinghouse in 1913, before the first World War, built the first&#xA;  ever, ever, ever electronic computers that could actually compute that&#xA;  train’s exact location.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Does anyone have more information about this mystery computer?  I can't seem to find any other wiki or anything about it.  I'm a bit incredulous about how this would have worked, given it seems electric switches weren't really invented until about 10 years later.  I suppose it could have been an &quot;analog&quot; computer of some sort, maybe more like an electric calculator, but even the earliest of those weren't developed till much later as far as I can tell. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, this doesn't seem to appear in any other history of early computers.&lt;/p&gt;&#xA;" OwnerUserId="8856" LastEditorUserId="8856" LastEditDate="2018-08-22T19:36:05.313" LastActivityDate="2018-08-24T12:14:41.503" Title="1913 mystery computer below Grand Central Station" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7348" PostTypeId="2" ParentId="7346" CreationDate="2018-08-22T23:38:51.147" Score="39" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does anyone have more information about this mystery computer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sorry to disappoint you, it's not a computer and not even a computer-like fixed-function machine. It's simply a system of cables, switches, relays and Morse writers. There was no automated signaling. It was just a bunch of switches mounted at pillars along a track, cabled in parallel. Each switch could be pulled by said cable. When a train stopped, the engineer grabbed the cable and pulled. The first pull activated the bell and powered the Morse writer. Further pulls could then be used to send over the position manually. A little clockwork was triggered with every signal; when it ran out, the Morse writer was stopped again. It was built with a mercury switch timer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simple but effective by any time's standards - and a great achievement back then.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;given it seems electric switches weren't really invented until about 10 years later.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Reliable relays have been around since the 1850s. In theory, they could have been used to make a computer even back then - just at hard to imagine cost :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I suppose it could have been an &quot;analog&quot; computer of some sort, maybe more like an electric calculator, but even the earliest of those weren't developed till much later as far as I can tell.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There were many mechanical and electro-mechanical special-purpose machinery around at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, 1913 and the Grand Central Station are keywords to this, with the &lt;em&gt;Electric Interlocking Machine&lt;/em&gt; installed there. The whole Grand Central system between Grand Central station and Mott Haven (up in the Bronx) was all electric for control and handling of all switches and trains with a block based handling. Much like today. For back then, it was a masterpiece of unimaginable complexity - the whole system with several hundred sections was controlled by just 5 men in a single control room. Including a wall sized display of all sections indicating each switch and its position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't the first interlocking system, not even the first electric, but by far the biggest of its time. While for example the Berlin subway system was several times the size, it consists of dozens of independent operating small systems, many of them still mechanical. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the interlocking system was able to tell an assumed position down to about 1-3 miles, it was independent from above mentioned, way simpler system, and could not narrow the location down. Also it reported to the central switching room, not down to the works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Information mainly from memory and an article in Electric Railways Journal of 1914)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-08-24T12:14:41.503" LastActivityDate="2018-08-24T12:14:41.503" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="7349" PostTypeId="2" ParentId="7345" CreationDate="2018-08-23T00:09:06.090" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Can anyone offer some back-of-envelope sort of estimates of what sort of gate count was needed to add a multiplier to 8-bit CPUs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;An 8x8 array multiplier build from 6T adders comes down to 8x8x6=384 transistors. With buffers/drivers this easily reaches beyond 400 transistors, maybe even near 600 when latching is needed.  Further some decoding (PLA) and execution (random) might be needed, but that's just a few dozen transistors. In total this might increase the CPU by 20%.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The operation needs two 8 bit values as input and yields one 16 bit value. For a 6502 input would be naturally &lt;code&gt;A&lt;/code&gt; and a memory operand, but there is no 16 bit register. While storing the lower 8 bits again in &lt;code&gt;A&lt;/code&gt;might sound useful, &lt;code&gt;X&lt;/code&gt; or &lt;code&gt;Y&lt;/code&gt; could take the upper 8 bits - damaging the ability to use either in addressing. Or a new &lt;code&gt;E&lt;/code&gt;xtension register would be needed. Not a bad idea in general (*1), but that adds something like another 50 transistors (*2).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I ask because I find it a bit odd that the 6809 had one, but none of the other chips of the era did.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 6809 is a complete new design, and the next generation after a 6800 or 6502, more in line with upcoming 16-bit processors of the same time.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It seems that B or C models of the 6502 and Z80 would have the opportunity to add this,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;These were just faster speed selections, not really new (or enhanced) CPUs.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;so I assume there is a good reason why they didn't?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As so often it's the 'why' question. Why adding and complicating the CPU for such a minor add on? Sure, it'll speed up multiplying, but then again, it's not exactly the most needed operation. I can't remember having it used in all the years of 8086 programming. And even on /370 it was convenient, but not really necessary. Usually, multiplying by 2 or 4 is what's needed, and here a shift will always beat a multiply.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - This might open the opportunity for some quite nice new operations, not at least 16 bit load and store, enabling fast movement of pointers (into ZP).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Renesas for example did not only add an 8x8 multiply and divide instruction to their 6502 (740 Family), but also avoided the addition of a new register by pushing the upper 8 bits of the multiplication result onto the stack - similarly, with a division, the negated(!) remainder is pushed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2018-08-23T14:32:36.757" LastActivityDate="2018-08-23T14:32:36.757" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="7350" PostTypeId="2" ParentId="7345" CreationDate="2018-08-23T01:15:19.043" Score="6" Body="&lt;p&gt;The first production 6809 was fabricated around 3 years after the first production 6502, and thus, according to the Moore's Law rate of transistor density improvements, was likely fabricated using a small enough transistor geometry that more than double the number the number of transistors were available for the same initial die yield and cost, thus allowing room for adding multiply logic to the ALU (9k, vs. around 4k transistors per die).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A fast carry-save-adder (CSA) tree implementation (e.g. not just a microcoded shift-and-add) of an 8x8to16-bit multiplier requires (I'm guessing) roughly on the order of 5 times as many transistors as an 8-bit adder.  In NMOS technology of that vintage, a CSA-type multiplier implementation would very possibly not be done using strictly complete logic &quot;gates&quot;, but by also using a mix of pass transistor logic plus inverting amplifiers, even thru to the end of the final carry chain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No reason to add a mul instruction to later versions of the 6502 and Z80 (even if fabricated in a denser more advanced technology node), since software compatibility and cost reduction was the name of the game for those products.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2018-08-23T06:10:29.917" LastActivityDate="2018-08-23T06:10:29.917" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7351" PostTypeId="2" ParentId="7333" CreationDate="2018-08-23T06:01:51.497" Score="1" Body="&lt;p&gt;My old s-100 ~1978-1985 could use the 50 (teletype) and &quot;Kansas City Standard&quot; at 300baud but was capable to 2400baud; so &lt;strong&gt;&lt;em&gt;1200 never was &quot;the&quot; baud rate&lt;/em&gt;&lt;/strong&gt; of choice. &lt;strong&gt;&lt;em&gt;Through the 1970's&lt;/em&gt;&lt;/strong&gt; I worked on many ASCII terminals that used DEC, Wyse, and IBM protocols and could be set to communicate at least up to 9600 and some may have been capable up to ~32,000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 300, 1200, 2400, and eventually 9600baud were only limitations to the budget of home economics. From my own experience, much faster baud rates existed in the ($)commercial world at least 15-20 years earlier than 1980 - probably even sooner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The telephone companies would support what ever modem rate you wanted - for a price. As I remember it, telephone companies charged between $1000-3000 per month (plus a usage fee) for a T1/T2 line in the 1980's. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fast modems have been in existence since the stone age - just not affordable. In ~1991 the Govt hospital I worked for paid about $8000 (~$15k in today's money) for a T1 modem (available from ~1960). So, fast modems remained pricey and well above the average persons budget until the Internet.&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2018-08-23T06:21:16.957" LastActivityDate="2018-08-23T06:21:16.957" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7352" PostTypeId="1" AcceptedAnswerId="7357" CreationDate="2018-08-23T06:57:02.630" Score="14" ViewCount="5432" Body="&lt;p&gt;In the mid 1980's computers began to be advertised as having or being capable of &quot;Fuzzy&quot; logic. How was &quot;Fuzzy&quot; logic added to a computer and what was it suppose to do better than a computer without it?&lt;/p&gt;&#xA;" OwnerUserId="7813" LastActivityDate="2019-05-09T23:43:45.417" Title="What was computer &quot;Fuzzy&quot; logic?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;software-development&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7353" PostTypeId="2" ParentId="1479" CreationDate="2018-08-23T09:44:29.477" Score="4" Body="&lt;p&gt;Anecdotally, I would advise against removing it. My Amiga 500 started crashing when I did large movements in front of it (standing up from a sitting position or walking by) after having the shield removed. Putting it back in stopped the behaviour.&lt;/p&gt;&#xA;" OwnerUserId="10414" LastEditorUserId="10414" LastEditDate="2018-08-27T11:44:17.087" LastActivityDate="2018-08-27T11:44:17.087" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7354" PostTypeId="2" ParentId="7352" CreationDate="2018-08-23T10:34:48.697" Score="16" Body="&lt;p&gt;I came across Motorola HC12 and Hitachi SH2 series controllers in the 90s, intended for vehicle engine control units, that had some fuzzy logic capability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motorola had some new machine code instructions, notably &lt;code&gt;MIN&lt;/code&gt; and &lt;code&gt;MAX&lt;/code&gt;, useful for implementing &lt;a href=&quot;https://en.wikipedia.org/wiki/Fuzzy_control_system&quot; rel=&quot;noreferrer&quot;&gt;fuzzy control systems&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hitachi might had something more sophisticated, but my recollection is very vague here, perhaps a fuzzy logic unit, that could be programmed to apply a sequence of functions (min, max, power, root, absolute difference, perhaps saturated arithmetic too) continuously to some input channels, freeing the processor for other tasks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then AMD 3DNow! appeared in 1998, and Intel SSE shortly after, that had the same kind of instructions, but I don't remember them marketed as something fuzzy, but rather as enabling faster graphics calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the same function set was called something else then, perhaps based on what the target audience understood. Industrial and vehicle control customers wanted fuzzy logic, desktop users wanted fast graphics, and the marketing department created different names for these very similar technologies.&lt;/p&gt;&#xA;" OwnerUserId="348" LastEditorUserId="7946" LastEditDate="2018-08-23T14:52:13.197" LastActivityDate="2018-08-23T14:52:13.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7355" PostTypeId="2" ParentId="7352" CreationDate="2018-08-23T10:58:16.000" Score="10" Body="&lt;p&gt;&quot;Fuzzy logic&quot; is a fairly vague term, but is usually used to mean making decisions based on probabilities of events rather than hard true/false values.  It can also be used for other numeric decision making models that don't map so easily to probabilities, like neural nets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The critical thing, therefore, for hardware to be a good fit for implementing a fuzzy system, is that it needs to support fast numerical computations, using either floating point or fixed point fractions.  Multiplication is a common operation, as is summing large quantities of data (or the combination of the two, calculating a scalar product), so having support for the appropriate vector operations to accelerate these was useful for larger systems, and vector processors were a big deal in the 80s (and then we all got them in the form of MMX etc coming into the early 90s).&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-08-23T10:58:16.000" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7356" PostTypeId="2" ParentId="7352" CreationDate="2018-08-23T12:14:59.213" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How was &quot;Fuzzy&quot; logic added to a computer and&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It wasn't. At least not as logic in the same sense as digital logic to build a computer. It's more of an application concept, extending the realm of control systems. Instead of using fixed thresholds and base reactions thereon, thresholds get defined in a flexible way, usually by combining several input sources and/or recorded information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general it was used to describe that applications do not just switch at simple hard points by time or amount, but with more variability depending on circumstances. Like a washing machine using less water if only filled partially.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further fuzzy logic almost always include feedback loops and iterative approaches, not predefined curves.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;what was it suppose to do better than a computer without it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Real world decisions are usually not based on single facts, but a combination, with such combinations are normally not within a rigid framework.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example think about a reservoir. It gets filled with water coming from a river. It does let a certain amount of water go downstream to keep the river floating. In addition a simple spill over mechanism is needed to drain when the reservoir is filled and more water is coming in than the outflow is set to take(*1). But after a heavy rainfall upstream, more water will come in and the overflow will increase accordingly. Up to a point where even the spill over can't handle it alone. So gates need to be opened in addition. A simple, standard logic decision would be to open the gates automatic when the water level reaches 110% - as this shows that the spill over can't handle it alone - and we don't want the dam to break, do we?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A workable solution, but with an eventual catastrophic result to downstream villages. First the flow is kept constant all the time, but flash floods are handed down basically unhindered. Not exactly what the villagers expect the dam to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setting up a control system that measures incoming water, maybe already several km upstream, could be used to control the gates already before the reservoir is filled. This system will now monitor the water level in a non-binary way and do the same with incoming water. The decision on opening the gates will be made way ahead of fixed limits and in an adaptable way. With an almost empty reservoir, the gates stay closed (at standard rate) even if the supplying river starts to carry a lot more water. Opening the gates may come only late, maybe at 70%. But if the water level is maybe already at 80%, a way smaller increase in feeding might trigger a wider opening of gates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's fuzzy logic. No witchcraft, nothing really new, just more subtle reaction than simple on/of at certain fixed levels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As so often it's valid to state it isn't anything new, and that's true. With humans in between, all control applications were by default fuzzy - like a reservoir warden seeing the rain and opening the gates early. Even in theory it has been used around 1800 by Hegel by his concept of multiple median. What was new in the 1980s was for one that it was en vogue among mathematicians due to development of the fuzzy set theory, as well as increasing computing capacity made it possible to implement more complex behaviour in every day appliances, from washing machines to train control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The latter being a great example for the step taken. Driving a commuter train and stopping always at the same point along a platform isn't as easy as it seams. Brake distance differs a lot with the amount of passengers, weather condition, train conditions and much more. The engineer driving applies a lot of knowledge to even stop it within a few feet. Especially when at the same time fast transportation and thus late braking is a must. Automating this with simple pre-calculated control program needs (almost) unobtainable data and will still result in a lesser performance than done by a human engineer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using fuzzy logic now doesn't try to solve everything ahead, but defines a corridor of parameters, applying variable control to keep the train within to reach an approximated goal. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Sendai_Subway_Namboku_Line&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sendai Subway&lt;/a&gt; is known to be the first incorporating these ideas and showing great results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While being a buzzword of the late 1980s, it never went out of style - now the hype word is &lt;em&gt;Machine Learning&lt;/em&gt; and even less deterministic :)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - For this we just look at standard behaviour with a (mostly) filled reservoir, special situations like first fill and alike would just add without need.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2018-08-23T14:45:00.687" LastActivityDate="2018-08-23T14:45:00.687" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7357" PostTypeId="2" ParentId="7352" CreationDate="2018-08-23T15:57:14.167" Score="16" Body="&lt;p&gt;Fuzzy logic was a bunch of mathematical techniques or algorithms, popularized in the 1970’s by Lotfi Zadeh, former chairman of the U.C. Berkeley EECS department.  Forms of it depended on fuzzy sets, where set membership or logic state could be multi-valued or statistical, rather than just a binary 1 or 0. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some ways, fuzzy logic is a distant ancestor of some Machine Learning and Deep Neural Net algorithms, where a scattered mass of sparse low precision vector multiplies and non-linear activation functions can end up identifying a photo of a cat (etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fuzzy logic can run on any Turing complete computer.   So advertising Fuzzy Logic capability was just a bit of marketing.  (Similar to the current hype around almost every new processor chip or GPU doing ML and DNN inference.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The algorithms would likely run better on chips with faster math operations, non-linear math ops (min,max,saturate,etc.), and/or more numeric formats (floats, vectors, etc.).  So maybe it was a way of marketing that a certain processor could compute or do math ops fast enough for some fuzzy logic demo.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Or for current new processors, some ML demo.)&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2019-05-09T23:43:45.417" LastActivityDate="2019-05-09T23:43:45.417" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7358" PostTypeId="1" AcceptedAnswerId="7360" CreationDate="2018-08-23T17:19:50.620" Score="20" ViewCount="2330" Body="&lt;p&gt;As we all know, the Apple I computer didn't last very long as it was supplanted by the hugely successful Apple II about a year later. From what I've been able to find, it seems that since Woz was the sole engineer in those early days, once he finished whatever work was necessary to produce the 1, he went to work on the II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is to any citation or stories around the foresight that led the Steves to silk screen a '1' on the board as it suggests that there would be a '2' or a successor otherwise. I have found that when Woz finished the 1 he already had in mind what he wanted to do for the II, but from a marketing perspective (and even the uncertainty of the 1's success), it doesn't seem to be a good idea to label something as a '1' since it implies something better to come.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would have thought that the initial run of boards could have omitted the '1' and just been labeled the Apple Computer and when the II was in the works it could have been revised, but the only image I've ever seen has the digit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know more as to why it was labeled this way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JUSR8.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JUSR8.jpg&quot; alt=&quot;Motherboard label for the Apple Computer 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="7208" LastEditDate="2020-01-21T06:49:41.117" LastActivityDate="2021-02-12T02:17:26.490" Title="Why was the original Apple Computer labeled as the Apple I?" Tags="&lt;apple-1&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7359" PostTypeId="2" ParentId="7358" CreationDate="2018-08-23T17:55:47.870" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;As we all know, the Apple I computer didn't last very long as it was supplanted by the hugely successful Apple II about a year later.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Let's start with the fact, that it was labeled Apple &lt;strong&gt;&lt;code&gt;1&lt;/code&gt;&lt;/strong&gt; not &lt;strong&gt;&lt;code&gt;I&lt;/code&gt;&lt;/strong&gt;. Not only on the silk screen, but also throughout all manuals and advertisements. Similarly, the Apple II was originally named Apple 2. The II only came later, after Woz did come up with the 'graphical' play with square brackets (&lt;code&gt;][&lt;/code&gt;) as start message. Quoting the Apple 1 as Apple I was made by magazines in hindsight.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why was the original Apple Computer labeled as the Apple I&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a common practice to add a number to make things sound better. The case could not only be made for the Apple 1, but as well for KIM 1, Osborne 1, PET 2001, Atari 800, OSI Model 500, Altair 8800 and so on. These are arbitrary numbers to make it sound better. Just think &lt;a href=&quot;https://www.youtube.com/watch?v=Cf3RfidFKBw&quot; rel=&quot;noreferrer&quot;&gt;Anhilator 2000&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-08-23T20:23:40.187" LastActivityDate="2018-08-23T20:23:40.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7360" PostTypeId="2" ParentId="7358" CreationDate="2018-08-23T19:00:29.683" Score="21" Body="&lt;p&gt;Development happened very rapidly in the first two years of Apple. Wozniak did the Apple 1 in 1975 and the Apple ][ in 1976. When the Apple 1 was first presented to the world at the Homebrew Computer Club, it didn't have any name at all, since there was no company called &quot;Apple&quot; at the time. The original thought Woz had was simply to show off the computer he had designed to the club and share the schematics for the design - it was very much a &quot;hacker&quot; community project without thought of a commercial product.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the interest in the Apple 1 design amongst the hacker/hobbyist community, Steve Jobs suggested ordering PCB's and selling them at a profit. While pursuing buyers for the PCB, Jobs made the famous deal with the Byte Shop in Palo Alto, but that deal required fully assembled PCB's to be delivered. This led to Jobs seeking capital from banks, arranging for vendor credit, and other similar business activities needed to launch a real product. So the company was officially founded and named &quot;Apple&quot;, and shortly after &lt;a href=&quot;https://en.wikipedia.org/wiki/Mike_Markkula&quot; rel=&quot;noreferrer&quot;&gt;Mike Markkula&lt;/a&gt; got involved and formed Apple, the Corporation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this was happening, Woz was already well on his way to developing the successor Apple ][. So the &quot;Apple 1&quot; was named with full knowledge that a company was being formed and would, hopefully in short order, be able to offer the far-superior Apple ][ to its customers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This quote from a &lt;a href=&quot;http://openvault.wgbh.org/catalog/V_7CCEDE8F8CE246889EBAAB8BCB225EB5&quot; rel=&quot;noreferrer&quot;&gt;lengthy interview with Wozniak&lt;/a&gt; sums up the thinking of the Apple founders at the time:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I went to a store in Southern California, cause I was on vacation, showed them the Apple I, what it was, isn't that, demonstrated it. Got some orders out of that. But it was pretty much, you know, one person at a time, you know, getting small accounts. So we didn't sell very many in the period of a year. And by then, we had the Apple II. We even saw the Apple II coming and part of the Apple II introduction was, we said, you can turn in your Apple I for a real good refund or a discount on the Apple II.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Also, despite the fact that a successor to the Apple 1 was already planned, the company did exercise some discretion in not giving too much away when marketing the Apple 1. It was their only source of income for some months, so the little bit of marketing material that was created simply referred to the Apple 1 as &quot;&lt;a href=&quot;https://www.thevintagenews.com/wp-content/uploads/2016/02/Introductory-advertisement-for-the-Apple-I-Computer.jpg&quot; rel=&quot;noreferrer&quot;&gt;The Apple Computer&lt;/a&gt;&quot;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-08-24T00:03:00.947" LastActivityDate="2018-08-24T00:03:00.947" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7361" PostTypeId="1" AcceptedAnswerId="7362" CreationDate="2018-08-24T11:23:15.447" Score="11" ViewCount="2025" Body="&lt;p&gt;There are a lot of designs out there of modern home made relay computers (not just ALUs but real computers -let's call them Turing complete, although Turing complete is not enough for having an operational usable machine nowadays-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for the absolute minimum modern/hobby/home-made relay computer in the relay retro computers known uniserse. I will be as specific as I can, since my project is very specific:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By &quot;pure&quot; I mean no cheating with modern RAM chips, nor transistors.&#xA;LEDs are acceptable (most of the designs I've seen use LEDs for&#xA;output) but diode logic should be avoided. No modern oscillators.&lt;/li&gt;&#xA;&lt;li&gt;At least 4-bits as the size of its data words.&lt;/li&gt;&#xA;&lt;li&gt;I don't care about program word size if it's a Harvard architecture.&lt;/li&gt;&#xA;&lt;li&gt;If its a machine with very small amount of data memory it does not matter (a lot of microcontrollers a few years ago used to have 32 bytes of RAM and that was enough for some applications).&lt;/li&gt;&#xA;&lt;li&gt;It can even have a motorized clock (like old Harvard Mark computers, for example).&lt;/li&gt;&#xA;&lt;li&gt;By &lt;strong&gt;minimum&lt;/strong&gt;, I'm measuring it in relay-count.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For example, the following computers are awesome, but look at their relay counts:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://hackaday.io/project/18599-brainfuckpc-relay-computer&quot; rel=&quot;noreferrer&quot;&gt;https://hackaday.io/project/18599-brainfuckpc-relay-computer&lt;/a&gt;: &lt;strong&gt;800 relays&lt;/strong&gt;, but using a RAM IC (so it doesn't count).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://hackaday.com/2012/01/16/the-tim-8-is-the-smallest-8-bit-relay-computer-ever/&quot; rel=&quot;noreferrer&quot;&gt;https://hackaday.com/2012/01/16/the-tim-8-is-the-smallest-8-bit-relay-computer-ever/&lt;/a&gt;: &lt;strong&gt;152 relays&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://web.cecs.pdx.edu/~harry/Relay/&quot; rel=&quot;noreferrer&quot;&gt;http://web.cecs.pdx.edu/~harry/Relay/&lt;/a&gt;: &lt;strong&gt;415 relays&lt;/strong&gt;, although also using SRAM chip.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;One more thing: I don't care about the amount of poles in the relays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So does anyone know of the smallest one of this kind of machine? (I want to build it!). Thanks!&lt;/p&gt;&#xA;" OwnerUserId="4428" LastEditorUserId="10260" LastEditDate="2021-05-12T03:36:05.500" LastActivityDate="2021-05-12T03:36:05.500" Title="Smallest/Simplest, modern pure relay computer with at least 4-bits data words" Tags="&lt;hardware&gt;&lt;homemade&gt;&lt;relay-computer&gt;" AnswerCount="4" CommentCount="12" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7362" PostTypeId="2" ParentId="7361" CreationDate="2018-08-24T13:04:16.917" Score="11" Body="&lt;p&gt;How about a &lt;a href=&quot;https://machinedeturing.com/ang_fonctionnement.php?page=7&quot; rel=&quot;noreferrer&quot;&gt;Turing machine&lt;/a&gt; implemented with relays? If I didn't miscount, there are 8 relays plus 1 relay for each bit of the state (for a total of 12 with 4-bit state). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's see your conditions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It's Turing complete (obviously).&lt;/li&gt;&#xA;&lt;li&gt;No transistors, no RAM.&lt;/li&gt;&#xA;&lt;li&gt;Has small amount of memory (on the tape, no SRAM)&lt;/li&gt;&#xA;&lt;li&gt;Has a motorized clock.&lt;/li&gt;&#xA;&lt;li&gt;Will be hard to get below that in terms of relay count.&lt;/li&gt;&#xA;&lt;li&gt;Program storage is on a punch card.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's &lt;em&gt;not&lt;/em&gt; a register-based machine, so the 4-bit word width applies to the state, not to some register width.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-08-24T13:04:16.917" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7363" PostTypeId="2" ParentId="7361" CreationDate="2018-08-24T15:21:19.530" Score="7" Body="&lt;p&gt;Neither of these are quite what you're looking for, but I'm including them because I think they're worth looking at nonetheless, and I think both are more interesting than the designs you've linked already:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://relaysbc.sourceforge.net/arch.html&quot; rel=&quot;noreferrer&quot;&gt;http://relaysbc.sourceforge.net/arch.html&lt;/a&gt; is a single-board computer whose CPU is implemented using 83 relays (it does have some semiconductors for interfacing and to provide RAM, however).  It's 8 bits, rather than 4, so presumably could easily be beaten, and is a modified von Neumann architecture, which also makes it more complex than an equivalent Harvard architecture system would be, but with 83 relays it's very understandable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more capable but not-yet-finished 8 bit system is Yann Guidon's &lt;a href=&quot;https://hackaday.io/project/27280/gallery#acf7ba9afcb7d6c2b168875b00de19b9&quot; rel=&quot;noreferrer&quot;&gt;YGREC8&lt;/a&gt; 8-bit pipelined RISC architecture.  It'll be interesting to see what it's capable of when he's finished it, but it's a very interesting project, particularly as he's designing it using a bitslice architecture ... which means that it should be possible to produce a 4-bit variant of it very simply.  I'm not sure how many relay's he's expecting to use, but his estimate of the 16-bit variant was 3,000... he decided to shelve that in order to get a simpler system up and running first. It also uses semiconductor diodes in the control paths (he's effectively using the relay equivalent of diode-transistor logic) and for memory (he's building an interesting variant of DRAM that uses diodes rather than transistors in the cells).&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-08-24T15:21:19.530" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7364" PostTypeId="1" CreationDate="2018-08-24T16:24:31.800" Score="4" ViewCount="314" Body="&lt;p&gt;I have 3 European retro computers that I'm trying to run on North American power through a step-up transformer. So, I am using 220V/60Hz instead of the European standard of 220V/50Hz.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;BBC Master works 100%&lt;/li&gt;&#xA;&lt;li&gt;Commodore C128D works 100%&lt;/li&gt;&#xA;&lt;li&gt;Atari 1040ST fails to boot&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Obviously, my question mainly concerns the Atari. I am getting 5V and 12V from the PSU, but no video or any other indications of &quot;life&quot;. This Atari was reported to be working by the prior owner (in Europe). Does anyone know definitively whether a European ST can/should work on 60Hz power? Any additional advice/warnings about the other machines using 60Hz is also welcome.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-08-25T21:31:29.770" Title="Running European retrocomputers on 60Hz power?" Tags="&lt;power&gt;&lt;ntsc&gt;&lt;pal&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7365" PostTypeId="2" ParentId="7364" CreationDate="2018-08-24T16:47:49.987" Score="1" Body="&lt;p&gt;If you checked output power of the power supply to be ok, then it is a problem of computer electronics.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This Atari was reported to be working by the prior owner&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Do you think anyone would admit that? Problem may also happen during transportation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway you need to find someone to take a closer look onto the boards and troubleshoot them. At first take a very close look at the boards and connectors - ensuring connectors are seated well, there're no cut or unconnected wires, and no cold solder spots on the PCB. Use magnifier for inspection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: it was quite uneasy to find power supply unit circuit/photo as most manuals just show &quot;power in&quot; (show main board, but not power supply). &lt;a href=&quot;https://i.ebayimg.com/images/g/bcQAAOSwMmBVudxr/s-l1600.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;This pic&lt;/a&gt; shows switched power supply, if it is the right one that frequency does not matter much, and can not be the cause of failure.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastEditorUserId="8258" LastEditDate="2018-08-24T17:32:36.543" LastActivityDate="2018-08-24T17:32:36.543" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7366" PostTypeId="2" ParentId="7364" CreationDate="2018-08-24T17:54:29.440" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So, I am using 220V/60Hz instead of the European standard of 220V/50Hz.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which should be fine for most. Especially the ones with switching PS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further 220V is fine, as they are old machines from back when continental voltage was 220 (and Brits still used 240). &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;My question mainly concerns the Atari. I am getting 5V and 12V from the PSU, but no video or any other indications of &quot;life&quot;. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It definitely should. Is the power LED coming up? I assume you're using an Atari screen? SM124 or alike.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did find an &lt;a href=&quot;https://forum.atari-home.de/index.php?topic=13790.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;STFM PS drawing&lt;/a&gt;, but be aware, that Atari did use many different PS over the years. Some of them where even switchable for 110V and 220V&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Any additional advice/warnings about the other machines using 60Hz is also welcome.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really more warnings. The main concern is voltage. I'd only be careful with classic transformer based and linear regulated machines of high power consumption - but that's more the mini world, than anything late 80s.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2018-08-25T15:39:02.543" LastActivityDate="2018-08-25T15:39:02.543" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7367" PostTypeId="1" AcceptedAnswerId="7370" CreationDate="2018-08-24T18:08:48.587" Score="9" ViewCount="1537" Body="&lt;p&gt;The power of a computer is often effectively determined by the size the RAM can be expanded to. In many cases, this was even more important than CPU speed: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2822/memory-limited-workloads&quot;&gt;Memory-limited workloads&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early days, before SIMMs and DIMMs, this must presumably have been limited by the number of RAM chips that would fit on the motherboard. There were exceptions, e.g. the Atari 8-bits and Vic-20 would take RAM on cartridges; the IBM PC would take it on expansion cards. But not every computer could do that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am surprised, then, that one quantity I have never seen mentioned as a limiting factor is motherboard size. Looking at photos of e.g. the IBM PC motherboard, it looks pretty crammed. The BBC Micro and Vic-20 look like they could have been bigger. The ZX Spectrum would have needed a bigger case; how much would that have added to cost?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the largest practical motherboard size in the seventies or early eighties?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-06-09T11:21:11.447" Title="Largest practical motherboard for early computers" Tags="&lt;history&gt;&lt;hardware&gt;&lt;memory&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7368" PostTypeId="2" ParentId="7367" CreationDate="2018-08-24T18:39:16.693" Score="8" Body="&lt;p&gt;There were some large motherboards. However, a &lt;strong&gt;LOT&lt;/strong&gt; of computers relied on daughterboards to carry the load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of S-100 machines (from the original Altair on up) the CPU was simply one of the daughterboards and the motherboard was just for signal distribution, and RAM took one &lt;strong&gt;or more&lt;/strong&gt; daughterboards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of the Apple ][ and the IBM PC, almost anything - disk controllers, video cards (always in the case of the IBM PC, for more advanced than the standard in the case of the Apple ][), RAM expansion, etc. could go on daughterboards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the motherboard size was actually not that much of a limitation. The exceptions were machines like the C64, TRS-80, etc. that had (typically) just an expansion bus without an actual card cage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a long time before I saw machines in the IBM compatible world that had video, network, HDD &amp;amp; FDD controllers all on the motherboard the way they are typically designed today.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2018-08-26T05:40:32.820" LastActivityDate="2018-08-26T05:40:32.820" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7369" PostTypeId="2" ParentId="7367" CreationDate="2018-08-24T18:43:27.637" Score="14" Body="&lt;p&gt;To start with, a computer, especially back then, didn't necessary have a motherboard. Think S100 or Multibus. The SOL as motherboard based computer was an exception among S100 systems – and even it needed a separate memory board to be more than a limited terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, looking even a little bit further back, we'll see that not only motherboard based systems where virtually unknown, but memory was &lt;strong&gt;never&lt;/strong&gt; confined to such. After all, how to put a core stack on there? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Single board computers where a development that only started in the mid 1970s when microprocessors became available. And even then, bus systems with CPU boards and separate memory boards where the norm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Altair's &lt;a href=&quot;https://en.wikipedia.org/wiki/S-100_bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;S100&lt;/a&gt;, Intel's &lt;a href=&quot;https://en.wikipedia.org/wiki/Multibus#Multibus_I&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multibus I&lt;/a&gt;, SWTPC's &lt;a href=&quot;https://en.wikipedia.org/wiki/SS-50_bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;SS50&lt;/a&gt;, OSI's &lt;a href=&quot;http://www.technology.niagarac.on.ca/people/mcsele/hobby/vintage-ohio-scientific-computers/&quot; rel=&quot;nofollow noreferrer&quot;&gt;model 300/500 bus&lt;/a&gt;, Motorola's &lt;a href=&quot;https://archive.org/details/bitsavers_motorola68rBrochureJul76_40358776&quot; rel=&quot;nofollow noreferrer&quot;&gt;EXORciser&lt;/a&gt;, Digital Group's &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Digital_Group&quot; rel=&quot;nofollow noreferrer&quot;&gt;bus system&lt;/a&gt; and so on. Even first single board computers which could work as stand alone systems like &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_System_Development_Kit#SDK-80&quot; rel=&quot;nofollow noreferrer&quot;&gt;SDK80&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6800&quot; rel=&quot;nofollow noreferrer&quot;&gt;MEK6800D1&lt;/a&gt; did feature their company's system bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When independent and consumer focused machines became available the usually only had a minimal RAM capacity on board and featured either some expansion bus or a special memory connector for machine specific memory expansions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II was eventually the first machine that left that path by offering full memory expansion on the mainboard. &quot;Full&quot; means here up to what the CPU could handle by default. At that time 16 Kibit RAMs where available and 48 KiB was just 24 chips (the rest was occupied by ROM and I/O anyway). Not much compared to what the 'remaining' components occupied. Like with the IBM PC, the decision for the RAM size possible was more driven by the assumed market, than any size limitations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The size of RAM considered useful and/or needed depends a lot on the target market and application. A desktop machine didn't need much more than 64 KiB until the mid 1980s. A mini in contrast did – but then again, it wasn't motherboard based. Take this nice &lt;a href=&quot;https://en.wikipedia.org/wiki/Olivetti_M20&quot; rel=&quot;nofollow noreferrer&quot;&gt;Olivetti M20&lt;/a&gt; board of 1982. Clearly an upperclass (Z8000) workstation. The motherboard featured 'only' 128 KiB RAM (2 rows of 64 KIB). It wasn't really due to the board size (adding a few more rows of symmetric RAM would have been easy), but the assumption that 128 KiB is enough for most use cases. For expansion up to 512 KiB the memory bus could be used (black connectors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gw8cD.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gw8cD.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But not every computer could do that [take memory on expansion cards].&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The number of machines totally without a way for memory expansion was rather limited and usually within the extreme low cost segment – then again, even the ZX80 could do so. The only one that limited way beyond what's possible that comes to mind is the Atari ST series and the early Macs. Here again it was a use case decision – and a very specific market. No argument for a general case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: You haven't heard about, as it wasn't an issue – except in terms of money to pay for memory expansions.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On a side note, even before 1980 did mainframes feature backplane boards with sizes of 60 x 100 cm (make that 2x3 foot) – more than big enough for any mainboard an evil genius could have dreamed of in the late 70s. As a desktop computer its case may just have been less handy :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So PCB technology wasn't stopping anyone from making huge mainboards filling 64 KiB with 2102-price in contrast would have  (not to mention the needed PS :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-08-25T19:14:56.280" LastActivityDate="2018-08-25T19:14:56.280" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7370" PostTypeId="2" ParentId="7367" CreationDate="2018-08-24T21:59:15.507" Score="17" Body="&lt;p&gt;Even for single board computers (SBCs), capacitive loading of the DRAMs chips or SIMMs and timing delays thru any needed (re)buffering could limit DRAM capacity before board size (without extra chips or ASICs for distributed memory control and fan-in, as is done for the scale-out of big IBM Power 9 mainframe systems.  Projects with memory limited workloads often purchase “big iron”.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, large motherboards in pizza box form factor systems were common for (expensive) minicomputer workstations around the 1980’s.  But for high volume consumer systems, there were significant manufacturing cost savings in using the smallest possible PCB that would hold just the required components for the base model(s).&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2018-08-26T17:23:30.393" LastActivityDate="2018-08-26T17:23:30.393" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7371" PostTypeId="1" CreationDate="2018-08-24T22:15:04.483" Score="3" ViewCount="560" Body="&lt;p&gt;I have an old device that I am sure works on either 1200,2400,4800 or 9600 bauds (actual setting is controlled by physical switches that I don't have access to)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the most efficient method (other than brute force) to try all the possible permutations of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Baud rate&lt;/li&gt;&#xA;&lt;li&gt;Data bits&lt;/li&gt;&#xA;&lt;li&gt;Stop bits&lt;/li&gt;&#xA;&lt;li&gt;Parity&lt;/li&gt;&#xA;&lt;li&gt;Flow control&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What I'm really hoping is one of the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Do all settings matter? (If you can tell me that some settings are&#xA;optional I don't even have to permutate those in my trial and error)&lt;/li&gt;&#xA;&lt;li&gt;Do some settings give me an indication that I'm on the right track &#xA;(for example I got partial output on baud rate 9600 - continuous&#xA;solid white squares that looks like ascii 178 .. by the way how do I know what I'm getting in Putty other than visually trying to match it to ASCII table?  Is there a better tool that displays the raw bits coming in?&lt;/li&gt;&#xA;&lt;li&gt;Some other tricks that will help me figure it out (Ex. I'm using&#xA;putty on windows right now, but maybe there is linux script that can&#xA;connect to all different permutations one by one?)&lt;/li&gt;&#xA;&lt;li&gt;Some &quot;smell&quot; that tells me about what to try next.  Ex. Let's say I&#xA;get output that scrambled in a particular way, what does that tell&#xA;me that I need to try next?&lt;/li&gt;&#xA;&lt;li&gt;Relationship between settings and input/output functionality.  (For&#xA;example, my attempt with 9600 bauds gave me that scrambled output&#xA;upon hitting the enter key - but only once.  After that I had to&#xA;reboot the device to see that again.  It's almost as though input&#xA;stopped working after the first try.  Does that tell me anything?)&lt;/li&gt;&#xA;&lt;li&gt;Anything else that can help?  Special program?  Special tool? Some&#xA;kind of a measurement?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Note: Yes I tried looking for this information in the manual/online.  It's not documented for some reason.  And even if I find the actual answer, I'm still curious if this is a problem that can be fixed without a manual with enough perserverence.  This device was manufactured between 1990 to 2000 if that helps. (maybe some options were not common at that time and I can eliminate them from my permutations)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I left out the device name on purpose to see if I could get the most general response.  I'm not really THAT interested in figuring out this device, I am interested in steps to reverse engineer this in general. (So far I like the answers I'm getting - thank you!) Nevertheless this is a Liebert RAC2-8-EK auto changeover control panel.  Once I figure it out I will add the settings so that others don't have to fight with it.  The reason I can't change the baud rate switches is because even though they are listed in the manual, I just can't see them.  I see all the other switches, but not those ones.  I am guessing they are &quot;deeper in&quot; and I don't want to take it apart just to see.  Or maybe I'm just blind ... I spent one hour staring at the manual and at the board and I just can't see them.   I'm sure this is a text protocol (not binary).  About the echo question, it's weird because only reboot can show those white squares.  Once it's booted it's hit and miss.  Sometimes there is nothing echoed.  (Right now it's connected to live equipment so I can't keep rebooting it, but I will take it out of operation next week so I hope to be able to reboot it many times then).   I do not have a logic analyzer or oscilloscope.  All I have is USB-&gt;Serial adapter&lt;/p&gt;&#xA;" OwnerUserId="10428" LastEditorUserId="10428" LastEditDate="2018-08-26T03:01:29.013" LastActivityDate="2018-08-26T20:50:05.437" Title="What trial-and-error method to use for determining serial terminal settings (RAC2-8-EK)" Tags="&lt;terminal&gt;&lt;serial&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7372" PostTypeId="2" ParentId="7371" CreationDate="2018-08-25T04:31:54.480" Score="4" Body="&lt;h2&gt;Materials Needed&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Some other device (probably a computer) which we shall call &quot;the terminal&quot; to connect to your old device.  On DOS or Windows, the device file for serial devices are called &lt;code&gt;COM1&lt;/code&gt; through &lt;code&gt;COM4&lt;/code&gt;.  On Unix/Linux systems, they in the form &lt;code&gt;/dev/serial*&lt;/code&gt;, &lt;code&gt;/dev/tty*&lt;/code&gt;, or &lt;code&gt;/dev/ttyS*&lt;/code&gt;.  You can use the following command to discover the names of your serial devices:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sudo dmesg | grep 'serial|tty'&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may get some false positives for &lt;code&gt;/dev/tty*&lt;/code&gt;.   &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some kind of software on the terminal which you can configure the serial settings, send typed characters, and display the received characters.  Many Unix/Linux distributions include &lt;code&gt;cu&lt;/code&gt;, which simply copies standard input/output to the serial line -- there are no extra features -- but is sufficient for most of the instructions below.  The gold-standard program is &lt;code&gt;minicom&lt;/code&gt;.  It sounds like you're using PuTTY, which will also do just fine.  Whatever program you pick, read its &lt;code&gt;man&lt;/code&gt; page or documentation to find out how to configure and use it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;(Optional) A voltmeter or oscilloscope will help you check voltages and polarities.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;(Optional) A storage oscilloscope or logic analyzer will help you fully analyze the signals.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;General Solution&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Although standards such as RS-232, RS-422, and RS-485 existed, you can't rely on any device to follow them.  Standards were often incomplete, devices often evolved faster than the standards, and many developers simply ignored standards.  Thus, there are a small number of devices for which these instructions won't work.  (In fact, one of the many advantages of USB is the thoroughness of the standard leaves little room for variations, simplifying support for devices.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another consideration is the protocol being used.  Serial can be used as a way for humans to interact with a device (e.g. a remote login).  It can also be used for one device to send results to or control another device.  Using a text-based protocol makes it easier for debugging; a developer can simply &quot;talk&quot; to the device through a terminal rather than writing a special program to do that.  However, other devices use a binary protocol, as it is easier to program and more efficient of bandwidth.  Furthermore, some devices (such as point-of-sale terminals) have protocols that are intentionally kept secret.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without documentation, binary protocols are difficult to work with, and are beyond the scope of this answer.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Check the &lt;strong&gt;physical connector&lt;/strong&gt; on the old device.  If it is labelled &quot;Serial&quot; or &quot;RS-232&quot;, continue below.  If it is a 9- or 25-pin D-shaped connector, it &lt;em&gt;might&lt;/em&gt; be a proper serial port.  Your chances are better for consumer devices, but be warned that scientific and industrial devices often used the same connectors for non-serial uses.  Older Macintoshes had a circular DIN connector which could and was used for RS-232 and RS-422.  If you are tapping signals off a circuit board (with or without a header), there is a chance that it is only a logic-level signal (see next step).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;(Optional) Using a voltmeter or oscilloscope, with the old device powered up, check the &lt;strong&gt;voltage&lt;/strong&gt;.  Connect the minus lead of your meter/scope to the ground pin of the device, and the plus lead to the transmitted data pin.  If you get a negative voltage, you are good to go.  If you get +5 V or +3.3 V, these are logic-level signals, and you will need a level shifter (like a MAX232/233) to get the correct voltages.  Furthermore, (rarely) some logic-level need to be inverted before they are level-shifted.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Turn off &lt;strong&gt;hardware flow control&lt;/strong&gt; on your terminal.  Flow control was used in early systems that would otherwise lose characters if they could not keep up; for example, a printer might need time to move the print head during a carriage return, and would lose any characters that would be sent during this operation.  Systems that are sophisticated enough to buffer incoming characters (most computers by 1990 and increasingly in peripherals as time progressed) usually had flow control disabled (although often still available).  By turning off hardware flow control, this should assert the outgoing flow control signals and ignore the incoming flow control signals.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;We will avoid &lt;strong&gt;sofware flow control&lt;/strong&gt; by not sending any control-S (binary 0001 0011, DC3, XOFF, STOP) or control-Q (0001 0001, DC1, XON, QUIT) characters.  Also, if your terminal has an option for software flow control, disable it so that recieved ^S and ^Q are treated as normal characters.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A device's response to invalid parity and stop bits (&lt;strong&gt;framing errors&lt;/strong&gt;) can vary.  There are various flavors of errors, which some devices distinguish, but doesn't matter here.  Some devices drop all characters with framing errors.  Others ignore the error and process the character normally.  Some have a visual indicator or log the event to a file.  Set your terminal to ignore all framing errors.  (If there is no such option, don't worry about it.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;At this point, try &lt;strong&gt;9600-8-N-1&lt;/strong&gt;.  That is, 9600 baud, 8 data bits, no parity, and 1 stop bit.  This was a very common default among equipment.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;While the terminal is connected and running, &lt;strong&gt;reboot&lt;/strong&gt; your old device by powering it up or pressing its reset button.  What is printed on the terminal when you perform the reset?&#xA;  (a)  If it is readable text, congratulations -- you have have found the correct baud rate and may proceed to step 10.&#xA;  (b)  If something garbled appears, repeat this step with each of the other baud rates.  Should readable text appear, you have found the correct baud rate and may proceed to step 10.&#xA;  (c)  If every possible baud rate gives you garbled text, it is likely that this port uses a binary protocol.  You may try the other steps below, but be aware that you may fail to find the correct settings.&#xA;  (d)  If no text ever appears at any baud rate, the old device probably doesn't output text upon reboot.  Don't worry, continue to the next step.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you still haven't found the correct baud rate, set 9600-8-N-1 and try to send several space (binary 0010 0000) or 'U' (0101 0101) characters.  I have seen hardware that uses either character as an automatic baud-rate detection.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Still haven't found the baud rate?  Send '0' (binary 0011 000) and '?' (0011 1111) at each baud rate, until either is echoed back correctly.  If this still fails, you will have to give up.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;At this point, the only things left are the &lt;strong&gt;data bits, parity, and stop bits&lt;/strong&gt;.  By the 1990s, most equipment were 8 data bits (decline of wierd word sizes and an increase in international character sets), no parity (serial was reliable enough not to need it) and 1 stop bit (parity and extra stop bits are a waste of bandwidth).  Even if your old device uses something different, it won't matter unless your old device catches and handles framing errors.  So, you are probably good to go.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you &lt;em&gt;really&lt;/em&gt; want to know the data, parity, and stop bits, you will need a storage oscilloscope or logic analyzer.  You must make the device produce a known output (such as a boot message), and then analyze the signal produced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linux does have a programming interface for serial errors.  To my knowledge, no terminal software makes use of it.  You could try writing your own program, if so inclined.  Otherwise, you could also play around with sending/receiving characters and then &lt;code&gt;cat /proc/tty/driver/&amp;lt;driver_name&amp;gt;&lt;/code&gt;, but I think this is extremely tedious.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2&gt;Specific Solution&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The Liebert RAC2-8 is a unit to monitor and control heating and air conditioning in a building.  Sounds like a &lt;em&gt;cool&lt;/em&gt; project!  (Sorry for the shameful pun.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/G2E2g.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G2E2g.jpg&quot; alt=&quot;Liebert RAC2-8-EK&quot;&gt;&lt;/a&gt;&#xA;I got the manual &lt;a href=&quot;https://www.joepowell.com/wp-content/uploads/2016/06/sl-31027-1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  There are two 25-pin RS-232 serial ports; you want the one labelled &quot;Terminal&quot;, not the one labelled &quot;Modem&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears that 1200 baud is the factory setting.  Start there, and work your way up if things fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no mention of other serial settings, but the modem port requires Hayes-compatibility, and it sounds like it sends a status message when a terminal connected.  The latter is probably the cause of the white squares you are seeing, and is possibly triggered by sensing the flow-control signals.  My best guess is therefore 8 bits, no parity, one stop, and flow control on.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A terminal connected to an active RAC2-8 displays alarm and status messages when they occur. The prompt then asks the operator to press &amp;lt;space&gt;, &amp;lt;S&gt;, or &amp;lt;A&gt;.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&amp;lt;space&gt; displays Main Menu after a password is entered. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&amp;lt;S&gt; displays present status.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&amp;lt;A&gt; displays a list of alarms (up to 20).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you don't know the password, it can be changed from the menu system on the physical front panel.  Good luck!&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2018-08-26T20:50:05.437" LastActivityDate="2018-08-26T20:50:05.437" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7373" PostTypeId="2" ParentId="7371" CreationDate="2018-08-25T08:40:06.337" Score="3" Body="&lt;p&gt;First: Concentrate on one thing and one data direction at a time to be able to work systematically - Don't change more than one setting between tries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RS-232 interface lines work in pairs, TX/RX, RTS/CTS, DTR/DSR (and maybe DCD) are the pairs that need to be interconnected. DTR/DSR/DCD exchange somewhat &quot;static&quot; information (&quot;this device is switched on and ready to receive/send&quot;), while the RTS/CTS pair typically signals dynamic capability (&quot;ready to receive/send the next character&quot;). &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Get the wiring right. A serial device can work, in theory, with only three connected wires: TX, RX, Signal ground. In practice, it sometimes doesn't. Start with connecting these three wires in order to at least get &lt;em&gt;something&lt;/em&gt; across. We don't care for now whether the characters transferred are garbled or lost, we just want &lt;em&gt;something&lt;/em&gt; to show up. Make sure your known testing equipment (the PC you are testing with) is not the culprit. Locally connecting CTS and RTS, DSR and DTR should enable most PC interfaces to send and receive independently from the connected device. When sending and receiving now and nothing shows up on the other end, your device &quot;wants&quot; some more of the handshake lines to enable receive and send. (Remember we don't care yet &lt;strong&gt;what&lt;/strong&gt; shows up on the other end, we're happy if &lt;em&gt;something&lt;/em&gt; is transferred. Baud rate, XON/XOFF handshake, even garbled characters are irrelevant at this point.&lt;/li&gt;&#xA;&lt;li&gt;In case you don't get anything to transfer, do the same local bridging on the device end. If that doesn't help, add an additional local bridge between DCD and DSR on both ends. If you still can't receive or send, your device is either broken or uses non-standard lines for the handshake. Try various settings on your known device on parity bits and stop bits until you can get, again, &lt;em&gt;something&lt;/em&gt; back and forth.&lt;/li&gt;&#xA;&lt;li&gt;As soon as you can get &lt;em&gt;anything&lt;/em&gt; across the line with the above methods, you can start removing the local bridges one after the other and extend the signals to the corresponding remote end - start with RTS/CTS, remove the local bridges for these signals and connect them to the remote counterpart. As soon as the transmission stops working, revert that step.&lt;/li&gt;&#xA;&lt;li&gt;At this point, the wiring should be OK. We can start trying to work out getting characters across &lt;em&gt;properly&lt;/em&gt; by fixing baud rate, parity and stop bits to the proper values. Try baud rates of 300, 1200, 2400, and (on more modern devices) 9600 and 19200. Once you see at least some non-garbled characters, you very probably have the baud rate right. Older equipment tends to use 2 stop bits as the hardware needed the time to process the received character. Devices that simply stop working when overrun or detect framing errors are the most devilish - There's not much more you can do than to power cycle the device between tests and try out a new combination.&lt;/li&gt;&#xA;&lt;li&gt;After you got comms at least basically working, take note of te settings and wiring. If you don't experience any problems, even with higher data volumes, you are probably fine. In case the comms tend to lose character or characters are sometimes garbled, you need to fix the handshake. RTS/CTS or XON/XOFF come to mind - A good terminal program on the PC end should detect incoming XOFF characters and that should tell you whether you need to enable software handshake on the PC. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-08-25T12:03:31.600" LastActivityDate="2018-08-25T12:03:31.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7374" PostTypeId="2" ParentId="7364" CreationDate="2018-08-25T09:14:19.893" Score="1" Body="&lt;p&gt;well I would use oscilloscope and look if:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;clock is running&lt;/li&gt;&#xA;&lt;li&gt;data and address buss is alive&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;that can rule out CPU and MEMORY side problems.  If working measure the modulator input/output if it produces signal. If yes the problem is either in cables or in the monitor itself. Otherwise you might have problem with graphics ICs. However take in mind I am not familiar with ATARI so I do not know its internal architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What 60Hz over 50Hz means?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For linear transformers power supplies it means the inductance is usually higher than designed which could lead to over voltage. And also the inefficiency can be higher (more heating of the transformer) But most of the electronics have a voltage regulator unit so the output should be fine the problem is the regulator itself can heat quite a bit more than usually so check/upgrade heatsinks so they do not damage plastic casing nearby. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also some electronics use the frequency as timing. This was true for any TV in my region back in the day. If your monitor is the same that might by the problem as the video signal is out of sync with monitor. In such case the screen is either unstable (blinking scrolling skewing) or video signal is ignored by the monitor completely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the case you can try to use some kind of AC/AC converter. I think there was few APC/UPS power protection units that produces 50Hz 220V output from any input to protect electronics from bad power supply.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-08-25T21:31:29.770" LastActivityDate="2018-08-25T21:31:29.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7375" PostTypeId="1" AcceptedAnswerId="7576" CreationDate="2018-08-25T12:12:14.117" Score="7" ViewCount="331" Body="&lt;p&gt;Econet was a network used by the BBC Micro, conceptually similar to Ethernet, two orders of magnitude slower and correspondingly cheaper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Econet&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Econet&lt;/a&gt; it transmitted one bit per clock cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this mean every computer or other device on the same network needs to have the same clock speed? Or at least in a simple ratio? That is, given a network of BBC Micros (2 MHz), I would expect to be able to design a card to connect a Commodore 64 (1 MHz) to that network, but an Atari 800 (1.79 MHz) would seem hopeless (short of giving the Econet card its own clock and running asynchronously with the computer, but that would seem outside the scope of a network card for an 8-bit computer). Is my intuition on this correct?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10566" LastEditDate="2019-04-09T10:58:21.213" LastActivityDate="2019-04-09T10:58:21.213" Title="Do all Econet devices need the same clock speed?" Tags="&lt;hardware&gt;&lt;bbc-micro&gt;&lt;network&gt;&lt;econet&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7376" PostTypeId="2" ParentId="7375" CreationDate="2018-08-25T12:52:52.873" Score="8" Body="&lt;p&gt;In Econet, using synchronous serial transmission, the &lt;em&gt;sender&lt;/em&gt; provides the clock together with the data. The receivers need to synchronize with that clock. And the network clock doesn't (necessarily, although it might be somehow derived from the same clock) need to be connected in any way with the system clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the BBC Micro, this clock (and the whole Econet interface) is being provided by the Motorola 68B54 Data Link controller chip, which relies on an external baud rate generator that provides the clock.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-08-25T13:20:35.703" LastActivityDate="2018-08-25T13:20:35.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7377" PostTypeId="1" AcceptedAnswerId="7380" CreationDate="2018-08-25T19:38:47.767" Score="9" ViewCount="2465" Body="&lt;p&gt;For some time now I have been on a mission to get back into playing games on a Commodore 64. I have bought an original Commodore 64C. I got hold of a original 1541 disk drive. I also got hold of a tape datasette. I figured out how to get the image to a modern monitor with a VGA cable. It wasn't perfect, so I ended up buying a Commodore monitor. So I basically have everything working. I even got hold of some new (old stock) floppy disks and they work!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next step in this journey is to try and get some games. I was hoping that there is a way to download images online and then transferring them to a floppy disk. I think I sort of have figured out a way to do this. I am pretty determined to get this to work, and I am willing to spend more $$ to get this working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a bit of research I am thinking about the following&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Get older desktop with Windows 98 and parallel port and 3.5 inch floppy drive from Ebay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Get an X1541 cable to connect 1541 disk drive to desktop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Download Star Commander to modern desktop and transfer this to older desktop using USB key or using 3.5 inch floppy disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) Download the Commodore 64 disk images (.d64?) from internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5) Use Star Commander then finally to transfer/burn images to 5.25 inch floppy disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure I completely understand every single step, so before I do all this, I want to make sure that I am at least on the right track and that there is a high chance of success. I would also welcome suggestions on how to do this easier. The end goal is really just to play C64 games on my original system without any SD card adapters ans such. I would also welcome any recommendations or things to watch out for with the above approach.&lt;/p&gt;&#xA;" OwnerUserId="8158" LastActivityDate="2020-02-28T17:59:48.600" Title="Copying disk images to Commodore 64 floppy disks" Tags="&lt;commodore-64&gt;&lt;floppy-disk&gt;&lt;ms-dos&gt;&lt;windows-98&gt;&lt;software-recommendation&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7378" PostTypeId="2" ParentId="7364" CreationDate="2018-08-25T19:51:20.833" Score="3" Body="&lt;p&gt;A working power supply and a completely black screen hints to a memory problem in the lower banks or an MMU contact problem (which is way more likely with the computer traveling that far). The ST sees no memory at all and won't even display a (white) picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would first carefully remove the MMU from its PLCC socket and thoroughly but carefully clean the contacts with a cotton bud and some iso-alcohol - These sockets are known to corrode over time and create bad contacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that doesn't help and you have a socketed GLUE chip, do the same thing to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still no luck? Remove and re-seat all other socketed chips. If that doesn't help, you need to pull out the oscilloscope.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-08-25T19:51:20.833" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7379" PostTypeId="1" AcceptedAnswerId="7487" CreationDate="2018-08-26T00:21:50.640" Score="6" ViewCount="404" Body="&lt;p&gt;I'm trying to understand exactly why various chips were designed the way they were at different times, in the service of which I have a rather specific question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When did MOS Technology upgrade to 5µm process technology?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to a source quoted from &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/MOS_Technology_6502&lt;/a&gt; &quot;The first 6502 was fabricated with 8 micron technology&quot;; that would have been in 1975.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to a comment in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5048/limiting-factor-on-sprite-sizes&quot;&gt;Limiting factor on sprite sizes&lt;/a&gt; &quot;VIC-II and amiga OCS chipset were both using 5um technology&quot; so they reached that process node no later than 1982.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So presumably it was sometime between 1975 and 1982 they got the upgrade to 5µm, but which year?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="9120" LastEditDate="2018-09-06T08:29:36.943" LastActivityDate="2018-09-06T20:44:25.087" Title="When did MOS Technology upgrade to 5µm?" Tags="&lt;history&gt;&lt;chip&gt;&lt;commodore&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7380" PostTypeId="2" ParentId="7377" CreationDate="2018-08-26T01:11:49.083" Score="6" Body="&lt;p&gt;Your outline sounds exactly correct.  In fact, I am doing the exact same thing.  I run Windows 98, with star commander (I boot into dos when using star commander), I have a home brew 1541 cable attached to the parallel port and an original 1541 disk drive.  I also have an Ethernet card installed, so I can easily download files from the internet and transfer them to my older windows 98 system.  I primarily use the setup to image my own collection of floppies from high school, but the process works just as well for downloads.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I have been following a project called Pi1541 where the author is doing cycle exact emulation of a 1541 disk drive using a raspberry pi 3b, and standard d64 images on a SIM card.  You simply hook up the pi via a cable and home brew adapter to emulate the disk drive. It works pretty nice, and is a fun build if you are inclined.  &lt;a href=&quot;https://cbm-pi1541.firebaseapp.com&quot; rel=&quot;noreferrer&quot;&gt;https://cbm-pi1541.firebaseapp.com&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2018-08-26T01:11:49.083" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7381" PostTypeId="1" AcceptedAnswerId="7387" CreationDate="2018-08-26T02:53:45.010" Score="9" ViewCount="346" Body="&lt;p&gt;&lt;a href=&quot;http://atariage.com/forums/topic/172580-antic-decap-and-reverse-engineering/&quot; rel=&quot;noreferrer&quot;&gt;http://atariage.com/forums/topic/172580-antic-decap-and-reverse-engineering/&lt;/a&gt; contains an annotated die photo of ANTIC, the Atari 800 video chip. It's interestingly different from the VIC-II; in particular, there isn't the sheer bulk of sprite circuitry, presumably because it doesn't have as much in the way of sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The large regular block is identified by people on the thread as memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How much on chip memory does ANTIC have? What is it used for? Sprite data? Or does it have other stuff like the way the VIC-II has to store forty bytes of characters?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-08-26T15:43:37.227" Title="ANTIC on-chip memory" Tags="&lt;atari-800&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7382" PostTypeId="1" AcceptedAnswerId="7399" CreationDate="2018-08-26T03:56:21.677" Score="1" ViewCount="344" Body="&lt;p&gt;I recently got hold of an old Atari 800 and some peripherals.  Thanks to the answers to this question:&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7340/how-to-clean-or-prep-atari-800-or-any-old-computer?noredirect=1#comment20626_7340&quot;&gt;How to clean (or prep) Atari 800 or any old computer&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have it cleaned up and am using it.  One immediate problem I see is that I only have one joystick.  Can someone tell me how to buy or adapt something for use as an Atari 800 joystick?  I suspect the one I have will give out at some point (it's very old). Plus a second controller would be nice.  I'm not interested in a pristine original joystick particularly.  If there are plans around on what the configuration is (pin outs, etc.), I'm up for building something or adapting something.  Perhaps there is a dedicated vintage Atari group where this is better asked?&#xA;Thanks&lt;/p&gt;&#xA;" OwnerUserId="10407" LastEditorUserId="10407" LastEditDate="2018-08-27T01:40:41.877" LastActivityDate="2018-08-27T21:15:39.587" Title="New joystick (or build one) for Atari 800" Tags="&lt;atari-800&gt;&lt;joystick&gt;&lt;new-hardware-adaptation&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7383" PostTypeId="2" ParentId="7381" CreationDate="2018-08-26T05:56:22.420" Score="8" Body="&lt;p&gt;The &lt;a href=&quot;http://www.virtualdub.org/downloads/Altirra%20Hardware%20Reference%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;Altirra emulator manual&lt;/a&gt; describes the operation of the ANTIC in some detail, and says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A 48 byte buffer within ANTIC is used to store graphic data for a single scan line. Its purpose is to buffer data for&#xA;  use on repeated scan lines, reducing DMA overhead. For bitmap modes, it allows ANTIC to only read graphics&#xA;  data for a mode line once, during the first scan line. For character modes, it holds the character name data which&#xA;  is then repeatedly used to fetch each scan line of character data from the character set.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Because only character names are buffered in character modes and not character data, the two text modes that&#xA;  have double-height characters ­ modes 5 and 7 ­ must still fetch character data on every scan line even though&#xA;  half of the fetches are redundant.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you count the SRAM cells in the &lt;a href=&quot;http://atariage.com/forums/uploads/monthly_11_2010/post-6585-129022995006.jpg&quot; rel=&quot;noreferrer&quot;&gt;photo&lt;/a&gt;, you'll see 48 rows of 8 bits. So it is indeed 48 bytes SRAM. Yes, SRAM is huge.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-08-26T05:56:22.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7384" PostTypeId="1" AcceptedAnswerId="7386" CreationDate="2018-08-26T06:30:36.317" Score="8" ViewCount="1917" Body="&lt;p&gt;In the Periodic Table of Videos episode &lt;a href=&quot;https://www.youtube.com/watch?v=rXZscASelkc&quot; rel=&quot;noreferrer&quot;&gt;Tin (new) - Periodic Table of Videos&lt;/a&gt; while talking about the role of the element &lt;a href=&quot;https://en.wikipedia.org/wiki/Tin&quot; rel=&quot;noreferrer&quot;&gt;tin&lt;/a&gt; in solder, &lt;a href=&quot;https://en.wikipedia.org/wiki/Martyn_Poliakoff&quot; rel=&quot;noreferrer&quot;&gt;Sir Martyn Poliakoff&lt;/a&gt; shows a large circuit board tiled with a variety of chip sizes and calls it a &quot;a very old computer memory board&quot; at about &lt;code&gt;02:39&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chips are laid out in what I'd call &quot;Manhattan-style&quot; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Taxicab_geometry&quot; rel=&quot;noreferrer&quot;&gt;Taxicab Geometry&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But to me it's more reminiscent of a complete computer. Does anyone recognize this board or at least something similar for comparison?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/r4JLC.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/r4JLC.jpg&quot; alt=&quot;computer shown in Tin Periodic Table of Video&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7118" LastEditorUserId="-1" LastEditDate="2018-08-26T23:40:49.430" LastActivityDate="2018-08-26T23:40:49.430" Title="Is the circuit board in this video a memory board?" Tags="&lt;identify-this-computer&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7385" PostTypeId="2" ParentId="7384" CreationDate="2018-08-26T07:18:54.863" Score="3" Body="&lt;p&gt;Sadly the image is not clear to see the chips markings :(&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not recognize the board but the central DIL40? (I think AMD) chip looks like a CPU or MCU so it might be a whole computer or its just used to lower the IC count as a addressing mode selector/configurator or whatever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ICs with white label are most likely EEPROMs holding either firmware for the CPU/MCU or some custom stuff for the target computer (in case its a memory card).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other 2 DIL40? ICs on the right can be anything (from a FDC/DMA/PIO/SIO or simple multiplexers/demultiplexer or whatever else).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The connectors are for quite a few wide cables. Based on the count of connectors and the pins count it looks more like for connecting peripherials then a master computer BUS connection which implies this is not a memory card. All the memory cards I saw got a connector that fits into single BUS slot on a PCB without cables (You do not want too long BUS connections due to noise and signal degradation). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the Reset? button on the right nearby the Crystal suggest this is a Computer board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 3 pin IC with heatsink on the top should be a Voltage regulator suggesting this has its own power supply whitch also suggest whole computer board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vYDqJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vYDqJ.png&quot; alt=&quot;overview&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my educated guess is that you're right and this is a computer motherboard.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-08-26T07:25:23.577" LastActivityDate="2018-08-26T07:25:23.577" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7386" PostTypeId="2" ParentId="7384" CreationDate="2018-08-26T07:42:26.490" Score="18" Body="&lt;p&gt;The lettering to the right of the CPU identifies the board:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;NICOLET INST&#xA;000-8113-05&#xA;SMD CONTROL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's a &quot;SMD Control&quot; board for a Nicolet Instruments FT-IR spectrometer, not a memory board (that's a separate board). More details here: &lt;a href=&quot;https://se-source.com/nicolet-ftir-parts/&quot; rel=&quot;noreferrer&quot;&gt;https://se-source.com/nicolet-ftir-parts/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-08-26T07:42:26.490" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7387" PostTypeId="2" ParentId="7381" CreationDate="2018-08-26T10:23:51.327" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It's interestingly different from the VIC-II;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not at least, because they represent complete different concepts. ANTIC is just a half of the graphics system, G/CTIA being the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VIC-II is fixed in its capabilities, with its DMA being tied to simple display fetches. ANTIC's DMA is way more fexible and programable (Keyword here is Display List programing)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;in particular, there isn't the sheer bulk of sprite circuitry,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;These are within the 32 Registers of the G/CTIA, which in turn gets feed by DMA access from memory, controlled by the ANTIC.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;presumably because it doesn't have as much in the way of sprites.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It doen't need them. Where the VIC-II needs dedicated RAM to store limited sprites, the ANTIC/GTIA pair uses the whole CPU memory to produce unlimited sized (in height at least) sprites.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How much on chip memory does ANTIC have?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Dependign on how one counts 48 to more than 70, as the registers also data. The 'huge' 48 byte block is only the line buffer.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What is it used for? Sprite data? Or does it have other stuff like the way the VIC-II has to store forty bytes of characters?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Somewhat. For text display it's much like with the VIC, but it also works for grapic modes. Depending on the mode selected for that line 8 to 48 bytes are loaded with character (name) or grapics data. And kept for the following lines.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-08-26T15:43:37.227" LastActivityDate="2018-08-26T15:43:37.227" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7388" PostTypeId="1" AcceptedAnswerId="7392" CreationDate="2018-08-26T11:50:21.010" Score="3" ViewCount="938" Body="&lt;p&gt;According to &lt;a href=&quot;http://smithsonianchips.si.edu/augarten/p64.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://smithsonianchips.si.edu/augarten/p64.htm&lt;/a&gt; &quot;In 1981, they slashed the cost of 64K RAMs from some $25 each to about $5, and the price hovered at that level throughout the following year.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was a surprise to me; the Commodore 64 cost $595 on introduction in 1982, and answers to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4382/when-did-64k-ram-become-about-as-cheap-as-16k&quot;&gt;When did 64K RAM become about as cheap as 16K?&lt;/a&gt; basically discuss 64K becoming cheap in the 1982-84 timeframe. Ads in the back of Byte support my previous impression e.g. December 1982 doesn't even list a price for the 64k chips, just &quot;Call&quot; which suggests they are still scarce and expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the above quote inaccurate? Or is it that the wholesale price of 64k chips did indeed fall to $5 in 1981, but for some reason it took a couple of years for this to filter through to consumers? If the latter, why?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-08-26T14:24:35.653" Title="Were 64k RAM chips $5 in 1981?" Tags="&lt;history&gt;&lt;memory&gt;&lt;chip&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7389" PostTypeId="2" ParentId="7384" CreationDate="2018-08-26T12:48:32.690" Score="3" Body="&lt;p&gt;While traal's answer is definitive, there is a much quicker way to tell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm old enough to recognize that style of circuit board, and simply looking at it tells me that it is not a memory board. The lack of an array of identical chips in a uniform rectangular grid is sure tipoff. Trust me, RAM arrays look like nothing else.&lt;/p&gt;&#xA;" OwnerUserId="10436" LastActivityDate="2018-08-26T12:48:32.690" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7390" PostTypeId="1" AcceptedAnswerId="7393" CreationDate="2018-08-26T13:48:07.100" Score="4" ViewCount="954" Body="&lt;p&gt;I'm looking for the source code of short programs for the MITS Altair 8800 (let's say &amp;lt; 50 instructions to make the question more specific), so they can be entered by using only the front panel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best source I've found so far is &lt;a href=&quot;http://altairclone.com/altair_experience.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://altairclone.com/altair_experience.htm&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there are just a few programs there for the front panel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know of other small programs source that can reasonably be entered in the front panel?&#xA;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="4428" LastEditorUserId="7208" LastEditDate="2019-09-01T23:11:26.810" LastActivityDate="2019-09-01T23:11:26.810" Title="Source code of front-panel entered Altair 8800 programs" Tags="&lt;8080&gt;&lt;altair-8800&gt;&lt;application-program&gt;&lt;front-panel&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7391" PostTypeId="1" AcceptedAnswerId="7766" CreationDate="2018-08-26T13:57:45.770" Score="5" ViewCount="308" Body="&lt;p&gt;My understanding is that diodes (and other electronic components like vacuum tubes) started to be used in this line of Harvard machines, only with the Mark III computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have some information about the usage of this kind of component in the Mark I or II?&lt;/p&gt;&#xA;" OwnerUserId="4428" LastEditorUserId="10260" LastEditDate="2021-05-12T03:18:52.613" LastActivityDate="2021-05-12T03:18:52.613" Title="Were Harvard Mark I and Mark II using diodes?" Tags="&lt;history&gt;&lt;hardware&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7392" PostTypeId="2" ParentId="7388" CreationDate="2018-08-26T14:24:35.653" Score="4" Body="&lt;p&gt;In ‘81, $5 was closer to a negotiated large volume pricing than the “consumer” single unit retail price.  This phenomena is common during the roll out of a new technology to a new market, as channel arbitrage hasn’t yet matured.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2018-08-26T14:24:35.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7393" PostTypeId="2" ParentId="7390" CreationDate="2018-08-26T14:41:25.643" Score="4" Body="&lt;p&gt;A single example, but a neat one: Josh's 12-byte &lt;a href=&quot;https://just8bits.blogspot.com/2017/03/doing-it-in-less-than-bill-gates.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft 4K BASIC&lt;/a&gt; bootloader. Kind of needs a paper tape reader and 4K BASIC, but does save your fingers from those fiddly wee switches!&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-08-26T14:41:25.643" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7394" PostTypeId="2" ParentId="7367" CreationDate="2018-08-26T15:04:14.517" Score="1" Body="&lt;p&gt;Until bank-switching techniques arrived, the real limiting factor for system RAM was the maximum address space that the CPU could address.  In the 8-bit era, this was usually 64 kB, although some more restrictive CPUs (like the 6507 used in the Atari 2600) had fewer address lines (the 6507 could only address 8kB of memory).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROM and I/O chips would consume some of this space, so typically, that left 48 kB of practical RAM space for a simple 8-bit computer.  Even with bank switching, a typical 8-bit CPU can only address 64 kB of RAM, although in this configuration it won't have access to I/O or any ROM chips.  (The Commodore 64 is a great example of a machine with such a configuration; the RAM under the I/O or ROM can only be read when the overlying I/O or ROM is switched out.  RAM under ROM can be written to always, but RAM under I/O needs the I/O switched out first.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Commodore VIC-20 needed expansion cartridges for RAM primarily because the motherboard uses low-density RAM chips that take a lot of space.  Modern RAM expanders for the VIC use few chips, because higher-density RAM is not expensive now, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So certainly, practical considerations could limit how much RAM is put on a motherboard, but until you got to systems based on CPUs like the 8088, which could take 1 MB of RAM, the CPU addressing limitations are probably much more limiting than the physical space requirements to take the maximum addressable RAM.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2018-08-26T15:04:14.517" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7395" PostTypeId="1" AcceptedAnswerId="7396" CreationDate="2018-08-26T16:05:05.620" Score="12" ViewCount="1580" Body="&lt;p&gt;In the early eighties, you could buy half-bad 64k RAM chips at a discount. Some cost-conscious manufacturers such as Sinclair and Tandy took advantage of this, buying eight such chips to make a 32K memory bank.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intuitively it seems like this should be possible with other kinds of chips. For example, the VIC-II is a big complex chip for its time; at least in the early days, yield must have been significantly less than 100%. Most of the area of the VIC-II is used for sprites. That suggests the majority of reject chips would be perfectly usable for non-sprite display. Still useless for the C64, of course, but Commodore did (mistakenly, but still did) introduce the C16 as a spriteless lower-end machine. Instead of basing it on the Plus 4, could they not have given it reject VIC-II chips and saved money? But Commodore was a very cost-conscious company that was known to base designs on what kind of chip they currently had in surplus; if they didn't do that, is there a reason I am overlooking?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly the excellent SID (C64 sound chip). Intuitively it would seem a defect in one of the voices, say, should leave the chip still usable with a smaller repertoire in a lower-end machine like the C16. Is there a reason why this was not done?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The one historical case I know of where part-bad chips were successfully sold with reduced functionality (apart from the possibly apocryphal case of Soviet-made CPUs each coming with a list of instructions that particular chip would successfully execute) is the 486, where units with a defective FPU were sold as the 486SX. Are there are any other cases?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-18T16:27:07.060" Title="Part-bad chips other than RAM" Tags="&lt;history&gt;&lt;chip&gt;&lt;commodore&gt;" AnswerCount="7" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="7396" PostTypeId="2" ParentId="7395" CreationDate="2018-08-26T17:16:09.487" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, the VIC-II is a big complex chip for its time; at least in the early days, yield must have been significantly less than 100%.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, while the VIC-II had a transistor count a bit larger than the original 8µm NMOS 6502. Not a lot, but it was manufactured in a 5 µm process, resulting in a smaller size and higher yield. The 1981 65C02 had almost three times the transistor count of the NMOS CPU, but due to being manufactured in 3 µm, its size was only a little over 1/4th (6 vs 21 mm^2) and 5 µm was already considered outdated in 1980. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Most of the area of the VIC-II is used for sprites.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I wouldn't call the 40 bytes of line buffer insignificant&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;That suggests the majority of reject chips would be perfectly usable for non-sprite display.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The whole idea of using rejected chips, especially when it's about rather small (even at that time) chips like the VIC, isn't working out in a commercial way. At least not if you're the original manufacturer and/or customer for such a 'less function' version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets assume, for the sake of the argument, that the area used for sprites is one quarter (25%) of the chip, and the failure location is random. So of all chips with only one failure location, only the 25% with that failure can be used as 'without sprites' (again assuming given that it isn't a failure disabling disables the whole chip - like a contact between +5V and ground :))  For chips with two failures it's maybe another 5% that fall in the same area, therefore it isn't worth looking at even higher rates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, this is all in relation to the fault rate of the production. Here it is important that the 5 µm process on which the VIC-II was produced was well proven and established. Not anywhere near cutting edge - that would have been around 1-2µm at that time. I think it is safe to assume that Commodore did get a yield of way more than 80% already at the first run, and they would have been able to get this to 95+% within a few months.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With such numbers there is no business case for the manufacturer to go for 'less functional' versions. After all, at 80% good rate (which is rather bad), the best possible quote (if all failing chips had only a single failure) would be 5%. That's no production number even worth making a different stamp to mark them. Especially, as from a manufacturer's perspective, all to do is reducing the fault rate to improve sales of the main product.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least, thorough testing slows down production and costs a lot of money - much more when done into every detail like needed to select chips that are still working at a reduced level. Money that is wasted on good chips. So getting quality up and restricting tests to detect faults as fast as possible and then aborting makes the whole production more cost efficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a customer's perspective (in this case the Commodore computer factories), it's even worse, as your ability to build such a machine on a random output quota from the manufacturer of a product he doesn't want to make in the first place. So with every iteration the VIC-II output gets improved, your supply goes away. To further output machines you must go ahead and use full functional VIC-IIs - which would mean that there you earn less money (assuming the final customer pays less for a less capable machine) from the same resource (VIC-II chip production).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[But then why did the 32 KiBit RAM chips surface?]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A simple matter of scale. For one, 64 KiBit RAM chips are about 10 times more complex than a VIC-II, while at the same time their structure is way more symmetric, enhancing the chance that a faults impact is truly local. Even more important, they were produced in (almost) infinitely larger numbers than for example VIC-IIs - just think, each C64 already had 8 of them compared to only one VIC-II. Also there were many more manufacturers. Each of them trying to get their production running and quality up - each of them going through a cycle from many faulty chips to less of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, fault-wise it was more simple with RAMs, as any chip with only a single fault that is not located in control or interface (which is less than 2% of the surface) can be used as 32 KiBit one - that makes, using the above reasoning, 98% of single faulty and 49% of double faulty. Sounds like a way better quota doesn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's further a matter of scaling. With many millions of 64 KiB chips, each factory, especially during run up, produced hundreds of thousands of partial faulties, making it a good business for others to buy this waste at next to nothing and spend money in testing and repackaging then as 32 KiBit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, it's about numbers and Commodore wasn't going anywhere near this.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Still useless for the C64, of course, but Commodore did (mistakenly, but still did) introduce the C16 as a spriteless lower-end machine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I need to object here (even though not part of the core question). The C16 was neither a mistake, nor a bad idea. Its design was meant to counter Sinclair. Delivering a low end machine that could beat the &lt;em&gt;Monster from the Island&lt;/em&gt; :)) Serious, the US home computer industry was shocked by the ZX-80/81 and the prospect of an even more capable future colour machine. The TED as C116 was directly set against that - and the C16 only a fast byproduct of a cheaper 'real' computer using VIC20/C64 parts.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Instead of basing it on the Plus 4, could they not have given it reject VIC-II chips and saved money?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As noted above, there wasn't any real business case to save money. More importantly, the TED had a much higher gate count than the VIC-II. Not least due to its 75 (instead of 40) byte line buffer; it also had a 16-bit timer, a sound channel and an I/O port. Except for the sprites, all its graphic capabilities surpassed the VIC-II. While being more complex it was at the same time targeting a way lower priced market, this should tell how little transistor count meant - at least in this region of rather low integrated ones.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Similarly the excellent SID (C64 sound chip). Intuitively it would seem a defect in one of the voices, say, should leave the chip still usable with a smaller repertoire in a lower-end machine like the C16. Is there a reason why this was not done?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most likely again, not enough failing chips to make it worthwhile. See above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But more important, it would have meant that the C16 would have had two chips, like the C64, making production way more expensive than it was targeted for. Beside more board space and traces, also another 64 drillings would have been needed, well, plus having to produce two chips instead of one.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The one historical case I know of where part-bad chips were successfully sold with reduced functionality  is the 486, where units with a defective FPU were sold as the 486SX. Are there are any other cases?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If at all, only in the beginning. For most of their availability, 486SX were crippled on purpose to allow sales at lower prices without hurting the profits on 486DX sales.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-03-22T19:32:24.737" LastActivityDate="2019-03-22T19:32:24.737" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7397" PostTypeId="2" ParentId="7395" CreationDate="2018-08-26T19:48:33.117" Score="14" Body="&lt;p&gt;There was a brief fad in the early eighties for what's called &quot;Wafer Scale Integration&quot;.  That is to say, producing an entire wafer of silicon for a single circuit.  The best known example was Gene Amdahl's &lt;a href=&quot;https://en.wikipedia.org/wiki/Trilogy_Systems&quot; rel=&quot;noreferrer&quot;&gt;Trilogy Systems&lt;/a&gt;.  A Wafer Scale circuit can be used to build a massively powerful computer system in a single component, but as wafers are almost never produced without defects the concept relies on providing redundant units and being able to configure the system to use working ones and disable failed ones.  The idea turned out to be too difficult to implement successfully, and AFAIK has never really been repeated, but a lot of research was put into it, and yielded some very good ways of testing wafers and disabling failed components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, my understanding is that similar approaches are sometimes used with multicore processors: if you buy a two-core chip, it's entirely possible that what you actually get is a four-core chip with two of the cores disabled because they tested faulty.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-08-26T19:48:33.117" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7398" PostTypeId="2" ParentId="7371" CreationDate="2018-08-26T20:38:02.573" Score="1" Body="&lt;p&gt;The way I do it (and I've had to do it quite a few times) is to hook it up to a storage oscilloscope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then just hook onto pin 7 (ground) and 2 or 3 (TX or RX, one at a time) and type on the keyboard, or otherwise get the device to generate ASCII.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know how to use an oscilloscope, you can easily see the pulses, measure their timing (to figure out the bit rate) and count the number of bits and parity.&lt;/p&gt;&#xA;" OwnerUserId="10438" LastActivityDate="2018-08-26T20:38:02.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7399" PostTypeId="2" ParentId="7382" CreationDate="2018-08-27T08:54:43.973" Score="3" Body="&lt;p&gt;You can still buy replicas of the famous &lt;em&gt;Competition Pro&lt;/em&gt; joystick (search on Amazon, for example), albeit with a modern USB interface. These need to be &quot;de-modernized&quot; to use with a retro computer, which is, however, pretty simple (connect the cables directly to the microswitches, and fit a DE-9 [commonly known as DB-9, the joystick ports] to it). You can even leave the original USB cable intact to be able to use it with a modern PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way to build a proper joystick is to use a &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B075YZY1G4&quot; rel=&quot;nofollow noreferrer&quot;&gt;joystick kit intended for the RetroPie&lt;/a&gt; set of arcade replicas - These also come with a USB interface but can be modded to expose the switch contacts directly on the DE-9. You also need to build a simple case to house everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also every now and then find China-made replicas of the original Atari 2600 joysticks on eBay, that should be a &quot;plug in and go&quot;. These replicas are, however, known to break easily and not as sturdy as the originals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than that, you can still sometimes find original 80ies joysticks used from eBay - Those very probably have been used for 25+ years, however, and are sometimes of dubious quality. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that even if the connectors for joysticks are typically DE-9, every vendor developed their own ideas for the pinout - you need to carefully check the wiring before connecting a new joystick.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-08-27T11:26:21.023" LastActivityDate="2018-08-27T11:26:21.023" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7400" PostTypeId="1" AcceptedAnswerId="7403" CreationDate="2018-08-27T11:30:38.907" Score="6" ViewCount="1102" Body="&lt;p&gt;I would like to experiment with DOS and would like to create a bootable partition on my hard drive (SDA) SATA device.&lt;/p&gt;&#xA;&lt;p&gt;I created a 1G FAT32 formatted partition on my SATA hard drive (SDA) and tried to make a FreeDOS partition on it. I downloaded the FreeDOS CD-ROM. When I boot to the CD-ROM it does not see either of my two SDA or SDB devices :(&lt;/p&gt;&#xA;&lt;p&gt;I also made a bootable MS DOS 6.21 USB and tried to copy it to the hard drive using the &lt;code&gt;sys&lt;/code&gt; command. It can see the SATA (SDA) drive but when I attempt to copy the system to it, I get an error &amp;quot;wrong OS version&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;All the information I have found says DOS can only boot to HDA1 (IDE). Must it be a IDE device or can it be a (SD) SATA device?&lt;/p&gt;&#xA;&lt;p&gt;I have copies of MS-DOS, FreeDOS, RxDOS, and MxDOS. Would any of these be able to boot to a SATA device? Would any of these be able to boot to something other than the &lt;em&gt;&lt;strong&gt;first&lt;/strong&gt;&lt;/em&gt; partition?&lt;/p&gt;&#xA;&lt;p&gt;Another way to ask this question is &lt;em&gt;&lt;strong&gt;&amp;quot;How can I make a bootable DOS partition on a SATA (SD) hard drive device&amp;quot;&lt;/strong&gt;&lt;/em&gt; (it's a laptop with no floppy).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Update&lt;/h3&gt;&#xA;&lt;p&gt;After formatting to FAT16 as suggested below (thx Spektre), FreeDOS recognized my DOS partition and loaded. I am currently trying to configure GRUB 2 to boot to it and will update once I get it figured out. GRUB 2 instructions also says it can boot to another drive if it remaps the drive designation using the &amp;quot;map&amp;quot; command.&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="15334" LastEditDate="2021-01-12T20:09:45.753" LastActivityDate="2021-01-12T20:09:45.753" Title="Can DOS boot to a hard drive other than HDA1?" Tags="&lt;ms-dos&gt;&lt;boot&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7401" PostTypeId="2" ParentId="5052" CreationDate="2018-08-27T11:37:21.040" Score="3" Body="&lt;p&gt;The much more commonly used term for the same thing outside Eastern Europe might be &lt;strong&gt;&lt;em&gt;T-State&lt;/em&gt;&lt;/strong&gt;, which is (without the hyphen) used by the original Zilog manuals - Another term is &lt;em&gt;Instruction Cycle&lt;/em&gt;, which commonly notes the minimal instruction timing of a Z80, which consists of four T-states.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Takt&lt;/em&gt; is also used in German, but here we commonly use it as a synonym for &quot;clock&quot;. &lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-08-27T11:37:21.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7402" PostTypeId="2" ParentId="7400" CreationDate="2018-08-27T12:26:24.120" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;How can I make a bootable DOS partition on a SATA (SD) hard drive device&quot; (it's a laptop with no floppy).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;First of, SDx is just a naming convention under Linux, made to purposefully hide hardware details. It can be as well a USB drive, as it can be some IDE or many other ways of connection. The naming is not related to SATA, but meant originally SCSI-Drive (in contrast to IDE which where called originally HDx).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From an OS perspective, at least as long it's using BIOS routines, SATA looks exactly like any other drive. It only differs when the OSes own drivers take over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For booting the real connection used is important, and to be defined in your computer's BIOS setup. Here a drive can be selected (or a sequence thereof). It's fine to put up an SATA drive here for booting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like in the good old days of floppies, the BIOS will try to read the first sector and start any program found. One speciality is if there's a partition block, then it'll look thru the list of (up to four) primary partitions and try to load from the first one marked bootable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It gets even more complex, as there is a newer version, called GUID partition table. The later might be something the boot loader of the various DOSes you try does not understand - GUID is only in use since the mid/late 2000s. If your drive goes past 2 TiB, it most certainly has a GUID partitioning scheme.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GUID partitioning do feature a pseudo MBR table for compatibility, which marks the whole drive as used and unavailable. In combination with older OS this might result in not 'seeing' the drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To raise chances for older OS to boot, partition the HD either as one drive (like a floppy) or using an MBR. here also just put in a single partition, possibly with less than 32 MiB size, as depending on the age or the DOS used, it may not go well with some of the newer extensions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having done so should make it possible to install an old DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, under Linux, it might as well be less work to install a virtual machine, using a disk image from that DOS.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7866" LastEditDate="2018-08-28T10:05:00.203" LastActivityDate="2018-08-28T10:05:00.203" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="7403" PostTypeId="2" ParentId="7400" CreationDate="2018-08-27T14:54:59.557" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;All the information I have found says DOS can only boot to HDA1 (IDE). Must it be a IDE device or can it be a (SD) SATA device?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are two things to consider: whether the computer can boot from a device (which depends on its firmware), and whether DOS can access the device (which depends on “legacy” BIOS support in the shape of &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/ix/13/&quot; rel=&quot;noreferrer&quot;&gt;interrupt 0x13 services&lt;/a&gt;, ignoring the enhanced disk drive services which Windows can use, and the disk layout). On older PCs, DOS worked fine with MFM, RLL, IDE, EIDE, SCSI, SATA etc. drives, as long as the controller included an &lt;a href=&quot;https://en.wikipedia.org/wiki/Option_ROM&quot; rel=&quot;noreferrer&quot;&gt;option ROM&lt;/a&gt; to provide the necessary support when the motherboard BIOS didn’t include it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the trick is to configure the system’s firmware so that it provides the services DOS needs, and then set the disk up so that the computer can boot from it and DOS can access it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On modern systems using SATA, a boot environment compatible with DOS requires two specific items in the firmware: “legacy-mode” SATA support, and a &lt;a href=&quot;https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#CSM_booting&quot; rel=&quot;noreferrer&quot;&gt;Compatibility Support Module&lt;/a&gt;. Both of these are starting to disappear; some new PCs can no longer boot DOS on their own (notably, systems certified connected standby don’t include a CSM). On systems with a CSM, you need to go into your firmware setup, select legacy mode SATA support, and enable the CSM if necessary (the option to do this depends on your specific firmware; there might not even be an option, some systems load the CSM automatically if they find an MBR-partitioned disk). Note that changing the SATA mode may have adverse effect on Windows installations, and enabling the CSM will disable Secure Boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then comes the disk format. You’ll need to use MBR-style formatting, not GUID partition tables. If you have an empty disk, the best way to proceed is to boot DOS and let it set the disk up; this will ensure that it uses the disk layout it expects, and writes all the information it needs to the partition table. If you need to repartition, use &lt;code&gt;fdisk&lt;/code&gt; under Linux, with the &lt;code&gt;-c=dos&lt;/code&gt; option; read the manpage carefully, and instead of creating a DOS partition, move partitions around to leave free space at the start of the disk, then use DOS &lt;code&gt;fdisk&lt;/code&gt; to create a DOS partition in the free space.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-08-27T16:25:29.693" LastActivityDate="2018-08-27T16:25:29.693" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7404" PostTypeId="2" ParentId="7382" CreationDate="2018-08-27T21:15:39.587" Score="4" Body="&lt;p&gt;While you can still get 1980s-vintage joysticks, some of the PVC cable sheathing is beginning to de-plasticize with age, so the cable can effectively fall off. Before I realized they were basically unreplaceable, I threw out three Konix sticks that had that problem …&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Building your own isn't hard, though. I made a ridiculously over-engineered box out of 6 mm birch ply, and installed a Sanwa-compatible arcade joystick and two arcade buttons. I wired it all together with a terminal block leading to 8-way stranded cable with a DE-9 (DB-9) Female Socket Connector on the end. Not counting design time, it cost less than buying a NOS 80s joystick, and it's solid enough to outlive me.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-08-27T21:15:39.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7406" PostTypeId="2" ParentId="7395" CreationDate="2018-08-28T01:58:01.890" Score="2" Body="&lt;p&gt;If you include FPGAs and flash memory (SSD chips), etc., many designs are (still?) manufactured with extra rows or blocks of stuff on the chip, were some number are expected to be disabled after failing (or too many passing?) device test, with the devices then still being sold under the same generic part number. &lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2018-08-29T02:36:29.690" LastActivityDate="2018-08-29T02:36:29.690" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7407" PostTypeId="1" AcceptedAnswerId="7408" CreationDate="2018-08-28T10:56:13.843" Score="6" ViewCount="1017" Body="&lt;p&gt;&lt;a href=&quot;http://www.mailcom.com/besm6/instset.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;This page describing the БЭСМ-6 instruction set&lt;/a&gt; refers to a value called ω, which is stored inside a Mode Register. It appears to be set by certain kinds of instructions, so that ω can tell you which of the last executed multiply and the last executed addition and the last executed subtraction was executed last. Kind of like &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4693/why-does-the-z80-have-a-half-carry-bit&quot;&gt;how the Z80 has a bit&lt;/a&gt; that says whether an addition or subtraction happened last and is useful for the &quot;decimal adjustment&quot; operation.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Now the БЭСМ-6 has a Young Bits register&lt;sup&gt;1&lt;/sup&gt; and the precise semantics of fetching Young Bits into Accumulator depend on what's inside ω.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now the БЭСМ-6 has a Branch if Zero instruction and correspondingly a Branch if Not Zero instruction, and the thing which determines what &quot;Zero&quot; is&lt;sup&gt;2&lt;/sup&gt; is some kind of calculation based on the value ω.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm finding this whole business kind of bizarre and hard to grok. So my question is basically &lt;strong&gt;&quot;what's going on here?&quot;&lt;/strong&gt;. Can you explain why Zero is not &lt;code&gt;0&lt;/code&gt; and why this depends on ω and why loading Young Bits also depends on ω?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And bonus points also if you know the etymology. I have exactly no idea why this thing should be denoted by ω, the lower case omega.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Presumably, it's called Young Bits in this particular document because it's sometimes treated as an extension of the accumulator and the Russian word младший can mean &quot;younger&quot; and the same word also can mean &quot;least significant&quot; when talking about bits/bytes/digits, but I'm not aware that this use of the English word &quot;younger&quot; is in widespread use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; A hint: This Zero condition does not mean that Accumulator is numerically zero.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-08-28T15:52:25.443" LastActivityDate="2018-08-28T20:34:48.283" Title="What is the purpose of the ω register of the БЭСМ-6?" Tags="&lt;instruction-set&gt;&lt;besm-6&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7408" PostTypeId="2" ParentId="7407" CreationDate="2018-08-28T12:07:38.560" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm finding this whole business kind of bizarre and hard to grok. So my question is basically &quot;what's going on here?&quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a way to save on special case jump instructions. Or more general, to adapt certain instructions to work as needed due to prior executed ones. I guess today we would cover this on a programming level with a bunch of macro opcodes which then generate appropriate opcode pairs.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Can you explain why Zero is not 0 and why this depends on ω&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Zero&lt;/em&gt; as a name is more of a placeholder and in only true to its name for logical zero tests. &lt;em&gt;Omega&lt;/em&gt; saves what the last operation was. Multiply, Additive or Logical. The &lt;code&gt;Branch (Not) Zero&lt;/code&gt; instruction uses &lt;em&gt;Omega&lt;/em&gt; to determine what to check.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All 48 bits to be zero when &lt;em&gt;Omega&lt;/em&gt; is logical - much like a test for zero on canonical CPUs&lt;/li&gt;&#xA;&lt;li&gt;The sign (Bit 41) for being zero (positive) when &lt;em&gt;Omega&lt;/em&gt; is additive - Test for positive/negative result&lt;/li&gt;&#xA;&lt;li&gt;The highest bit of the exponent (Bit 48) for being one when &lt;em&gt;Omega&lt;/em&gt; marks a prior multiply - Effectively testing for overflow.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;Only two branch instructions are needed to test three different conditions, depending on what prior operation happened.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and why loading Young Bits also depends on ω?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because YTA is eventually (like Zero) not really describing the whole meaning? YTA is meant to bring the second 'half' of a prior result into A. In case of logical operation Y contains this, so all bits of Y are transferred to A. In all other (arithmetic) instructions the 'second value' is in Z, so YTA is transferring Z to A - or more exactly, the 40 bits of Z are moved while the rest is set according to the instructions EA to make it a FP value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom Line: &lt;strong&gt;Instead of two move instruction only one needs to be encoded, selecting the right source depending on what prior instruction happened&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4025" LastEditDate="2018-08-28T15:14:53.977" LastActivityDate="2018-08-28T15:14:53.977" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7409" PostTypeId="2" ParentId="7407" CreationDate="2018-08-28T20:34:48.283" Score="4" Body="&lt;p&gt;As a matter of fact, the page you refer to, which was authored by me a long time ago, is somewhat incorrect, and bases its notation on a colloquial use of ω.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the original documentation ω is the name of the 1-bit signal generated by the arithmetic unit and consumed by the control unit. The &lt;code&gt;UZA&lt;/code&gt; instruction takes the branch when ω=0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 3-bit field in the R register which is called ω on the page, should be properly called &quot;instruction group attributes&quot;. My excuse is that the names of these three signals in the documentation do include ω:&#xA;УПωЛ, УПωП, УПωМ, which can be glossed as &quot;Control Attribute ω Logical&quot;, &quot;Control Attribute ω Exponent&quot;, &quot;Control Attribute ω Mantissa&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Colloquially, &quot;ω is Logical&quot; means &quot;At the moment, the signal УПωЛ is high, and the observed value of ω had been computed according to the Logical mode rule&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm afraid that the etymology of ω is lost in the sands of time. The available BESM-6 documentation doesn't mention it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Latin-based instruction mnemonics had been devised in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Joint_Institute_for_Nuclear_Research&quot; rel=&quot;nofollow noreferrer&quot;&gt;Joint Institute for Nuclear Research&lt;/a&gt; with a multi-lingual cadre of researchers from various countries; as the extension register of the accumulator (A) was called Y (and not, say, B for the next letter of the alphabet, or L for the &quot;least-significant bits&quot;), it is likely that the choice of the mnemonic based on the term &quot;young(er) bits&quot; was well-understood and well-accepted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;YTA&lt;/code&gt; instruction in the Logical mode is a regular move instruction, and in the &quot;arithmetic&quot; (Additive or Multiplicative) modes it moves just the mantissa bits. That behavior is mostly (or only) geared toward facilitating extended precision arithmetic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that there is no explicit opposite instruction (&lt;code&gt;ATY&lt;/code&gt;); moving the accumulator to the Y register is achieved as a side effect of the &lt;code&gt;AEX&lt;/code&gt; (exclusive OR) instruction. &lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2018-08-28T20:34:48.283" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7410" PostTypeId="1" AcceptedAnswerId="7411" CreationDate="2018-08-28T22:59:21.900" Score="3" ViewCount="328" Body="&lt;p&gt;In the late seventies, Commodore sold the PET in Europe at a considerably higher price than in America; they could get away with this because there was less competition there. Some of the American dealers took advantage of this by surreptitiously shipping PETs across the Atlantic, much to Commodore's annoyance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technically, how did this work? The PET power supply was built into the case; it had a single power cable that expected ~115 volt (?) 60 Hz, not 220-240 volt 50 Hz. Even if you took out the power supply and replaced it with one suitable for Europe (was it an off-the-shelf item?), the 2001's monitor was a picture tube from a black-and-white TV set, which would presumably have been expecting 60 Hz power. How could an American PET work in Europe?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2018-08-31T23:59:34.873" LastActivityDate="2018-08-31T23:59:34.873" Title="Transatlantic gray market Commodore PETs and 220V/50Hz vs. 115/60Hz" Tags="&lt;history&gt;&lt;commodore&gt;&lt;power&gt;&lt;commodore-pet&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7411" PostTypeId="2" ParentId="7410" CreationDate="2018-08-28T23:24:06.163" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;In the late seventies, Commodore sold the PET in Europe at a considerably higher price than in America; they could get away with this because there was less competition there.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Let's say market structure was different.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Some of the American dealers took advantage of this by surreptitiously shipping PETs across the Atlantic,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Jup, and as well as many customers tried to buy direct. Here payment was the biggest hurdle, but there was a way to pay via the post office - but that's a different story. Well, and haggle with customs - but that's another :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Technically, how did this work? The PET power supply was built into the case; it had a single power cable that expected ~115 volt (?) 60 Hz, not 220-240 volt 50 Hz.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;First and most simple solution was using a transformer (like &lt;a href=&quot;https://www.voelkner.de/products/70540/VOLTCRAFT-AT-200-NV-Vorschalt-Transformator-Spannungswandler-230-115-V-AC-.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;). Not cheap, but still saving money - and usually cheaper than a new PS - at least when only converting a few units.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Even if you took out the power supply and replaced it with one suitable for Europe (was it an off-the-shelf item?),&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Such 1:2 transformers are stock items, so no need to worry about the PS. The lower frequency doesn't matter as the result is way within tolerances.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;the 2001's monitor was a picture tube from a black-and-white TV set, which would presumably have been expecting 60 Hz power.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why? It derives its timing from the video signal the PET supplies, which in turn is taken from the oscilators, not in any way taken from or synchronized by mains. The video signal is still the same with 50 Hz power, thus no adjustment needed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-08-31T23:57:51.263" LastActivityDate="2018-08-31T23:57:51.263" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7412" PostTypeId="1" AcceptedAnswerId="7414" CreationDate="2018-08-29T13:34:39.703" Score="35" ViewCount="8303" Body="&lt;p&gt;&lt;a href=&quot;http://s3data.computerhistory.org/brochures/cray.cray2.1985.102646185.pdf&quot; rel=&quot;noreferrer&quot;&gt;This Cray sales brochure&lt;/a&gt; details on page 4 that the Cray-2 uses 400 Hz power, and generates this from motors.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;400 Hz power from motor generators&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm not sure that in 1986, the state of the art used 400 Hz as a frequency for timing the signals and the circuits. I'm also not sure that if 400 Hz is needed, that motors are the best way to generate that. I'd guess it's too imprecise for timing a supercomputer.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-10-02T20:07:54.620" Title="Why does the Cray 2 use 400 Hz power, and why generate that from motors?" Tags="&lt;power&gt;&lt;cray&gt;" AnswerCount="6" CommentCount="6" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7413" PostTypeId="1" AcceptedAnswerId="15474" CreationDate="2018-08-29T14:52:11.477" Score="15" ViewCount="1560" Body="&lt;p&gt;My colleague and I have just had a conversation and we were wondering how the process of developing an application was done in the era of cassette tapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today we have HDDs, backup HDDs, FTPs, repositories in the cloud, etc. -- so we don't care: we just save, send and share our data, but...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I myself, as a child, had a Timex 2048 (ZX Spectrum clone) in the 90s and I remember that creating an application involved saving my work on the tape, then next day I loaded it into Timex's memory, made changes, saved on the tape again and so on. But I worked alone for my own happiness and the applications I created weren't complex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what about cases when there were two or more developers? How did they share their code?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about complex applications? Graphics (simple, but still) for games?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about the durability of their work? We all know that cassette tapes were very unreliable: errors during saving and reloading data were common. (Eventually FDDs became available for computers such as Spectrum, Atari and Commodore, but as far as I remember they were quite expensive; and they weren't available from the very first moment, were they?)&lt;/p&gt;&#xA;" OwnerUserId="8933" LastEditorUserId="836" LastEditDate="2018-08-30T13:33:39.560" LastActivityDate="2020-07-04T19:25:54.863" Title="Developing an application in the era of cassette tapes (audio-tapes)" Tags="&lt;software-development&gt;&lt;cassette-tape&gt;&lt;magnetic-tape&gt;" AnswerCount="8" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7414" PostTypeId="2" ParentId="7412" CreationDate="2018-08-29T15:26:34.133" Score="46" Body="&lt;p&gt;The reason for any higher frequency supply is almost always the same: you get to convert a single input to different voltages for less wasted heat in a smaller volume. Such systems were very common in applications where you have lots of different voltages downstream from the plug. The first small version I'm aware of was the motor-generator sets used for powering &lt;a href=&quot;https://en.wikipedia.org/wiki/AI_Mk._IV_radar&quot; rel=&quot;noreferrer&quot;&gt;AI radars in WWII&lt;/a&gt;, which was literally a guy unscrewing the DC alternator from an engine and saying &quot;make me an AC version exactly like this&quot;. But they were already very common at that point for industrial supplies in factories and such.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's very easy to make a synchronous motor that will run at a fixed RPM even under changing loads. A flywheel can go a long way. In a computer applications, or radar, the loads tend to be fairly even on any macroscopic time frame on the order of seconds (although not always, see &lt;a href=&quot;https://en.wikipedia.org/wiki/DRTE_Computer&quot; rel=&quot;noreferrer&quot;&gt;DRTE&lt;/a&gt;). You can then use that smoothed motor output to drive a generator for practically anything you might need. A motor running at fixed speed will get you well over 90% efficiency, as will a generator, so the end-to-end efficiency is very good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Switching power supplies, which are now basically universal, were always available, but not widely used. For one thing, the electronics were &lt;a href=&quot;https://en.wikipedia.org/wiki/Mercury-arc_valve&quot; rel=&quot;noreferrer&quot;&gt;very large&lt;/a&gt; (I've seen versions several feet tall) and very expensive. They also gave off enough UV to cause sunburns and had to be isolated in metal cabinets. By the 1970s you have solid-state versions which were good enough for low-end systems, like the famous example in the Apple II, but these were not nearly powerful enough for a mainframe. Some thyristors were large enough, but tended to have lower efficiency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't until about the 1990s that really large thyristors and IGBT's were available that could handle this sort of power. They &lt;em&gt;rapidly&lt;/em&gt; took over, and are now basically universal from the iPhone to the TGV train. As they allowed very rapid switching, which is basically their efficiency measure, modern examples are well into 95+ range - the inverters on my roof are 93%, but the same box made today after more 8 years is a whopping 97% efficient. That's still 10W out the window though...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its an interesting side-note that the emergence of the modern EV has as much to do with these electronics as it does with li-ion. Using older conversion systems, like the DC systems you used to see in experimental cars in the 90's, you were tossing out miles of range in warm electronics.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-08-29T15:33:26.477" LastActivityDate="2018-08-29T15:33:26.477" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="7415" PostTypeId="2" ParentId="7413" CreationDate="2018-08-29T16:14:31.607" Score="11" Body="&lt;p&gt;Obviously, you can just switch tapes as you go, but systems that used cassette tapes for storage weren't really viable for collaborative development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simply because with a cassette tape, you had &quot;what's in memory&quot; and &quot;what's on tape&quot;, and the occasional task of saving and loading from a tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you could have someone walk over with a cassette so they can work on it, but there was no effective way to &quot;merge&quot; work at the basic cassette level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since cassettes dominated the micro market, you're basically stuck with BASIC as a primary development tool. And some BASICs allowed you to read in text, possibly from tape, like an &quot;include&quot;, but it was rare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, the cassette tape was barely viable for individual development (being both very slow and absolutely notorious for unreliability, along with a whole host of other problems), much less collaborative work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, much of the &quot;professional&quot; development on such systems weren't done on those systems at all, but rather they were developed on mini computers with cross development environments. Those systems obviously were much more sophisticated.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-08-29T16:14:31.607" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7416" PostTypeId="2" ParentId="7413" CreationDate="2018-08-29T16:18:00.983" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What about complex applications?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You bought a floppy drive, or before that, used punch tape. The period where cassettes were the only form of storage on micros was basically zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Up to about 1976 the ASR33 was widely used as the main I/O system for micros, and it had a punch tape system. You could also buy stand-alone punches and readers, both RS232 and current loop. Recall that the first Microsoft BASIC was published on punch tape, and these were widely traded at the Homebrew meetings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cassette was developed after the Altair, notably by Processor Technology's CUPS system, and the later KSS, both from late 1975.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But floppies appeared &lt;em&gt;very&lt;/em&gt; quickly; MITS was advertising their 88-DCDD Pertec-based 8&quot; system in March 1976. Digital Systems apparently was shipping a similar &lt;a href=&quot;http://www.retrotechnology.com/dri/first_floppy.html&quot; rel=&quot;noreferrer&quot;&gt;system in 1975&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't afford a floppy for my Atari, so I used cassettes right through the early 1980s, but everyone else I knew had a floppy, no matter what platform.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-08-29T16:18:00.983" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7417" PostTypeId="2" ParentId="7412" CreationDate="2018-08-29T17:37:34.977" Score="25" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm not sure that in 1986, the state of the art used 400 Hz as a frequency for timing the signals and the circuits.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 400 Hz is not related to any kind of timing. It's about getting size and losses of transformers down. With increasing frequency, the efficiency of transformation increases, thus producing less waste heat. At the same time sizes of the transformers shrink for a given load, thus saving in cost and, equally important, size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's the same principle that gave us the switching power supply and its high efficiency and low losses. Here also the primary AC gets turned into a high frequency one so a rather tiny transformer can be used instead of the huge copper piles in a linear PS. Unlike the Cray, a modern power supply uses several kHz instead of 400 Hz.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm also not sure that if 400 Hz is needed, that motors are the best way to generate that.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's not so much about exact 400 Hz, as the conversion of a lot of power. In the mid-1980s power semiconductors weren't at a point where such loads could be handled fully electronically (*1). Coupling a motor running at mains frequency and a generator on its output shaft that emits a higher frequency current - basically the same as the motor, just more poles. Prior to power electronics this was the only way to transform frequency. For example, rail power in Germany (and others) is 16.6 Hz while mains is 50 Hz. Beside rail power stations with generators producing 16.6 Hz, there where also converters from main power using motor generator units.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside the advantage in lower copper cost, more compact design and higher efficiency, such a motor-generator inherently works as a UPS. Due to inertia, short interruptions on the input side are smoothed out, making the operation way more reliable. In fact, depending on the size of the motor-generator, it could even supply the whole machine (including disks) for several seconds. That's more than enough time to write a savepoint (*2) and have an orderly (emergency) shutdown. That's why mainframes often have a special power fail interrupt state.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'd guess it's too imprecise for timing a supercomputer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As said before, it's not about anything in timing, but size and efficiency of the power conversion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;400 Hz in particular was chosen, as this was already standard since the 1940s for certain military equipment and airplanes. It's always better to use some standard and standardized equipment that comes with it. So Cray didn't have to create their own converters.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Even today, as we can do it, we still use the same trick. Just now it first gets rectified, then turned into high frequency pulsed (several dozen kHz) current, which still gets transformed to whatever is needed and rectified again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - A savepoint is a recording of the actual state of a job under program control that allows restart when restored. It's not the same as freezing the program, more like an automated save to files when closed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-02T20:07:54.620" LastActivityDate="2019-10-02T20:07:54.620" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7418" PostTypeId="2" ParentId="7413" CreationDate="2018-08-29T17:46:03.047" Score="6" Body="&lt;p&gt;It depends a lot on the machine, the job and your team size and what time we're talking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Professional developers usually didn't work on the same minimal setup as their target user. Especially in the begining it was common to develop on a larger, somewhat compatible system (or total different with cross compilers) with 'real' mass storage, and usually better editors and so on. And even when workign on the target machine, it was common to have it souped up with disk drives and alike.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next most jobs where still in a region a single programmer could (and did) handle on his own, so no need to exchange data or files with others. Even if there was a team, theIr job was usually rather seperated, so they exchanged their parts on a regular base and each integrated what the others did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compared to today it was way more a world of single coding heroes than teams.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At a point when realy teams where build and multiple programmers (and designers) worked on the same project, disks, including centralized stores where already available. Much like today.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-08-29T17:46:03.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7419" PostTypeId="1" AcceptedAnswerId="7421" CreationDate="2018-08-29T19:42:04.033" Score="11" ViewCount="704" Body="&lt;p&gt;On early color computers, it was possible to add a feature by which you could turn off the color burst output, restricting the display to black and white but making it significantly sharper and clearer; this was useful for text. I don't know how much it cost to provide this feature, but I am inclined to think it would be useful for any machine intended for serious use rather than just games; its historical rarity suggests either the cost was nontrivial or there is another issue I'm not taking into account.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II had it from early on (including a useful mode where you could have most of a screen of color graphics, with four lines of crisp black and white text at the bottom).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Tandy CoCo tried to provide it, but the first version allowed the color burst to leak through, and a revised chipset that would have fixed this, was rejected in testing because it broke games that had been written to exploit the artifact colors in what was supposed to be black and white mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did any other early color computers (that output RF or composite video) allow the color burst to be turned off?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-07-25T19:25:56.440" Title="Turning off the color burst" Tags="&lt;history&gt;&lt;ntsc&gt;&lt;color-display&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7420" PostTypeId="2" ParentId="7412" CreationDate="2018-08-29T21:20:27.987" Score="8" Body="&lt;p&gt;As others have said, the choice of a higher frequency enables smaller transformers, but also smaller smoothing capacitors. 3-phase supplies were used to reduce the ripple even further. Don't forget we are talking about very high currents with ECL systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motor generators existed right from the earliest days of electrical distribution for AC-DC or DC-DC conversion - semiconductors were discovered later. The effect of a heavy flywheel between the two handled brownouts and switching to a backup generator very well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where I worked, we had motor generators on the 240V running the disks as well as a 400Hz set for the CPU. The 240V sets were about 30 years old when we replaced them with a UPS at the time we upgraded to a RAID cabinet from a room full of single-density disks and (slightly) downgraded to an IBM 9121-521 (IIRC) from a 3084Q.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1986 a semiconductor supply would have been feasible, but the prospective customer would probably already have the 400Hz MG set, so why make him pay more to replace something he already had ?&lt;/p&gt;&#xA;" OwnerUserId="4160" LastActivityDate="2018-08-29T21:20:27.987" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7421" PostTypeId="2" ParentId="7419" CreationDate="2018-08-29T22:50:42.820" Score="7" Body="&lt;p&gt;The V9938 video chip in the MSX2 home computer can be programmed to disable the color burst but I don't know if any utilities or applications provided such an option to the user. That would have certainly been beneficial for the 80 column text mode and 2-color high resolution bitmap mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some MSX2 variants had a V9958 instead which has no composite video output and no color burst control function so it depends on the particular manufacturer.&lt;/p&gt;&#xA;" OwnerUserId="8734" LastActivityDate="2018-08-29T22:50:42.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7422" PostTypeId="2" ParentId="7412" CreationDate="2018-08-29T23:30:16.827" Score="5" Body="&lt;p&gt;In addition to earlier answers, stating smaller transformers, less ripple on rectified voltage and motor-generator inherent momentary power losses sustainability, such a seemingly overengineered system also protects well from (rare) power line surges, which increases the machine stability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of such surges could pass rather well through inter-winding capacitance of the transformers as well as be not very well filtered by capacitors. When the only power link with the external world is a mechanical shaft, that could be as well dielectric and (almost) arbitrarily long, power surges could be easily defeated.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-08-29T23:30:16.827" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7423" PostTypeId="2" ParentId="7413" CreationDate="2018-08-29T23:43:01.493" Score="10" Body="&lt;p&gt;Probably, no &lt;em&gt;serious&lt;/em&gt; software development was done purely on tapes.&#xA;Floppies were used extensively, as well as cross-tools, ROM emulators etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://itsbehindyou.atwebpages.com/download.html&quot; rel=&quot;noreferrer&quot;&gt;This nice and free book&lt;/a&gt;, telling about the creation of the famous ZX Spectrum game named &quot;R-Type&quot;, has also some insights into the typical development process for ZX Spectrum.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-08-29T23:43:01.493" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7424" PostTypeId="2" ParentId="7283" CreationDate="2018-08-30T02:03:06.457" Score="0" Body="&lt;p&gt;Short answer - economics. There was a big gap to be filled in. Affordability and portability of the hard disks were the issues that floppy disks addressed.&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Floppy_disk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Floppy_disk&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10280" LastActivityDate="2018-08-30T02:03:06.457" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7425" PostTypeId="2" ParentId="7419" CreationDate="2018-08-30T02:26:50.990" Score="4" Body="&lt;p&gt;An Apple II did not turn off color burst for the 4 lines of black and white text at the bottom.  Instead, it output wide enough (low-res) pixels for an NTSC television or monitor to interpret the IQ phase (with respect to color burst phase) as equivalent to white or black.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2018-08-31T20:00:48.083" LastActivityDate="2018-08-31T20:00:48.083" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7426" PostTypeId="1" AcceptedAnswerId="7428" CreationDate="2018-08-30T05:35:36.163" Score="13" ViewCount="3835" Body="&lt;p&gt;When inserting an incompatible disc into a Playstation, after waiting awhile the screen will display very corrupt graphics and unsettling music will begin to play. This is unofficially referred to as &quot;Fearful Harmony.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't been able to find factual or even consistent information regarding what is actually happening to the Playstation when an incompatible disc is inserted. The resulting corrupt graphics makes it initially seem like this is purely a glitch; unintended behavior. However, the disturbing audio suggests otherwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is really happening inside the Playstation's BIOS when an incompatible disc is being read? How intentional is it, are graphics corrupted on purpose in an attempt to be unsettling? What about the audio, is it simply an unused sample happening to be output, or is it designed for this specific occurrence?&lt;/p&gt;&#xA;" OwnerUserId="4353" LastActivityDate="2021-03-11T18:55:57.833" Title="What happens when PS1's &quot;Fearful Harmony&quot; is triggered?" Tags="&lt;graphics&gt;&lt;sony-playstation&gt;&lt;bios&gt;&lt;cd-rom&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7427" PostTypeId="2" ParentId="7412" CreationDate="2018-08-30T11:20:31.500" Score="3" Body="&lt;p&gt;The Cray is not a home computer that deduces timing from the mains frequency - This is a shortcut cheap computers could take to save some components, but nothing that was done in the &quot;professional&quot; world. In a sufficiently professional computer (and the Cray, if anything, is one...), there is no coherence whatsoever between mains frequency and internal timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A short side note: The specific power requirements of the Cray 2 were in no way unique: Cray's earlier works, like the CDC 6600 designed in the 1960s, used the same supply voltage. Some of my earlier assumptions like that the supply voltage selection was based on specific Cray 2 features like its cooling system, are thus void. IBM celebrates their &quot;&lt;a href=&quot;https://www-03.ibm.com/procurement/proweb.nsf/7a84535a0acd580885256b3f000e250a/19e8311a7b8b506a002575200058c2d8/$FILE/5-%20Power_Symposium_09-27-08_Seminaro.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;eliminated the need for 400&amp;nbsp;Hz&lt;/a&gt;&quot; only as late as 1989.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not so convinced that the reasons for the selection of this specific power source in the Cray were the same as why it is an established standard in aviation technology. After all, the Cray is not a laptop, so space and weight requirements like in an aircraft weren't really so much of an issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I &lt;em&gt;suspect&lt;/em&gt; rather more other reasons for Cray towards this decision:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;400&amp;nbsp;Hz supply at 208&amp;nbsp;V simply was the standard as set by IBM, and what you would have expected to be faced with in a supercomputing data center that was the target customer for Cray machines. The IBM System/360 mainly relied on these voltage input characteristics, so you would expect any Cray machine to be set up according to these requirements - so, after all, this apparently has not been a Cray decision, (also not driven for their preference of small-scale design), but rather they had to adapt to an existing environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As of the &lt;em&gt;why&lt;/em&gt; behind original (apparently, IBM) design decision, most of the other answers will apply - mainly size and efficiency. Also, given the wide non-standardized power supply voltages in the world in the mid-1960s, one can assume mainframe and supercomputer vendors were pretty much free in their decision on input requirements and apparently 400&amp;nbsp;Hz was chosen, because the technology was available from the aviation and defense industry.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="535" LastEditDate="2018-09-07T17:11:33.677" LastActivityDate="2018-09-07T17:11:33.677" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7428" PostTypeId="2" ParentId="7426" CreationDate="2018-08-30T11:22:47.090" Score="18" Body="&lt;p&gt;Just a disclaimer: Most of this is based on observation and assumptions from experience and should be taken with a grain of salt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I've seen with this glitch, the audio being played is actually just a very stretched out version of the chimes that play over the second logo which you see when a disc is loaded, rather than a separate sample.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Judging by how the console behaves when the glitch happens, it seems that it is constantly attempting to read the disc for something it recognises, but never seems to be able to exit this state. While reading the disc it appears to slow down drastically, as all footage I've seen of these glitches show the logo very slowly fading in over the course of a few minutes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The audio of the two logos on the system are seemingly MIDI or MIDI-like sequences, as corrupted BIOS data can cause them to play differently or be missing one of the instruments. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you ever noticed that when a program playing non-MIDI audio crashes, the sound typically continues until it's over, whereas when MIDI audio crashes it simply loops the last sound it played? This seems to be the case with the glitch's audio - it gets stuck playing the first note of the chimes in a loop, but since it's simply running very slowly and not a crash, the system finally makes progress (when the logo fades in another step) and manages to move onto looping the next note. It then repeats this process until the original sound is finally over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the graphics, I highly doubt that it's anything intentional. Since the PS logo is a polygonal model and not pre-rendered, a corrupt BIOS can hide or displace some of the polygons. Since different footage of the glitch shows the logo glitched in many different ways, it's fairly safe to say it's unintentional and that the glitchy graphics are just that - a glitch.&lt;/p&gt;&#xA;" OwnerUserId="10464" LastActivityDate="2018-08-30T11:22:47.090" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7429" PostTypeId="2" ParentId="7413" CreationDate="2018-08-30T14:50:56.077" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What about complex applications? Graphics (simple, but still) for&#xA;  games?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You couldn't really &lt;em&gt;have&lt;/em&gt; that complex of a program on the small home computers that used audio tapes. For example, your Timex 2048 had 16k of RAM. Most of these programs were written in BASIC, which meant you had to store the entire program in source form, along with the interpreter. That gives you at best only 16,384 characters, which works out to about a 430 line BASIC program. I have C++ source files I'm working right now much longer than that. I don't even consider it &quot;code smell&quot; until a source file gets over 1000 lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most programs didn't use Assember directly, due to porting issues (porting between BASICs was bad enough, TYVM). But for ones that did, a &amp;lt;16K binary still meant the amount of source code that went into creating it really couldn't be too much more than a single person could handle.&lt;/p&gt;&#xA;" OwnerUserId="4345" LastActivityDate="2018-08-30T14:50:56.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7430" PostTypeId="2" ParentId="7412" CreationDate="2018-08-30T15:36:52.133" Score="8" Body="&lt;p&gt;The Cray needed stable DC power at extremely high current. By using a 3-phase 400&amp;nbsp;Hz system they could use &lt;strong&gt;high frequency transformers&lt;/strong&gt; in each power supply unit to generate 12 phases** which results in &lt;a href=&quot;https://cds.cern.ch/record/987551/files/p133.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;very little ripple voltage&lt;/a&gt; (about 1%) at relatively high frequency (4.8&amp;nbsp;kHz), so they did not need to use enormous capacitors (which wear out). The transformers were distributed and located under the card racks, so size was a factor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By using motor-generator sets (three according to &lt;a href=&quot;http://www.bitsavers.org/pdf/cray/CRAY-2/HR-0200-0D_CRAY-2_Computer_Systems_Functional_Description_Jun89.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this document&lt;/a&gt;) they could get some UPS-like hold-up time and get the benefits of higher frequency (proportionally smaller transformers). Only the 50 or 60&amp;nbsp;Hz three-phase motor had to be large, all the other components could be smaller. 400&amp;nbsp;Hz is a standard military/aerospace frequency (chosen because it represents the highest frequency practical with steel core materials), so it was a sensible choice, and the transformer vendors would have ready made solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;**That's assuming it's the same topology as the &lt;a href=&quot;http://www.textfiles.com/bitsavers/pdf/cray/CRAY-3/3207_CRAY-3_Hardware_Description_Manual_Jul93.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cray-3&lt;/a&gt; and &lt;a href=&quot;https://www.edn.com/design/power-management/4412360/Cray--1-super-computer--The-power-supply&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cray-1&lt;/a&gt; (Cray 1 described below). No regulation! ECL circuits draw essentially constant current, so that helped a lot.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There are twenty -5.2 volt supplies and sixteen -2.0 volt supplies. The supplies are divided into twelve groups of three. Each group supplies one column. The power supply design assumes a constant load. The power supplies do not have internal regulation, but depend on the motor-generator to isolate and regulate incoming power. The power supplies use a twelve-phase transformer, silicon diodes, balancing coil, and a filter choke to supply low ripple DC voltages. The entire supply is mounted on a Freon-cooled heat sink. Power is distributed via bus bars to the load.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The motor generator supplies 208&amp;nbsp;V, 400 cycle, three-phase power to the power distribution cabinet, which the power distribution cabinet supplies via a variac to each power supply.&lt;/p&gt;&#xA;" OwnerUserId="7683" LastEditorUserId="535" LastEditDate="2018-09-07T19:37:38.847" LastActivityDate="2018-09-07T19:37:38.847" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7431" PostTypeId="2" ParentId="7413" CreationDate="2018-08-30T15:58:56.787" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What about complex applications?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Some of the more complex applications were cross-assembled on larger (minicomputer) systems (see Basic, Gates and Allen, and Tiny, also Apple DOS, et.al.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some more complex applications (in ASM and Basic) were printed in multi-part magazine or newsletter articles, and typed in by the user by hand.  Cassette tape was used for checkpointing, just in case the cat got tangled in and pulled out the power cord after hours of typing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some FORTH systems may have allowed saving and loading of &quot;blocks&quot; (which could be used as modules for larger applications) to/from cassette tape.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2018-08-31T06:33:01.650" LastActivityDate="2018-08-31T06:33:01.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7432" PostTypeId="2" ParentId="7413" CreationDate="2018-08-30T17:01:52.770" Score="4" Body="&lt;p&gt;If you were really determined, you could develop a program in assembly, on a tape-based micro, where the program was too large for the source to fit in memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did this on a TRS-80 model I with...  I think 32KB of RAM.  It was a long time ago, but I think that's right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is to break the program up into modules, with each module having some related functions.  Each source file, small enough to fit in memory, contained the assembly source for one module.  Each module's object code was absolutely located in memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had to keep track each module's location in memory, and it's size.  I was serving the role normally held by a relocating linker.  When a module grew so large that it was going to impinge upon the following module, I would move modules around in memory, which would mean individually editing each module's source to change its start address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a fixed location in memory that did &lt;em&gt;not&lt;/em&gt; move around, I kept a jump table.  Each public function in a module wrote a JP instruction to a fixed location in that jump table.  So when function FOO needed to be called, instead of calling FOO direction, the calling code would CALL foo's entry in the jump table, which would in turn jump to the function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each module initialized its locations in the jump table when it was loaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The process of creating the program was:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assemble each module, writing its object to tape as absolutely located binary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now load each module's object, one after the other.  As each module loaded, it loaded its code into its proper place in memory, and also initialized its entries in the jump table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now run it.  If it's bad, debug it.  If it's good, write the combined RAM image of the program out to a tape.  That new tape is the complete program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only wrote one program like this.  It was a fairly OK rendition of the Atari two-player &quot;Tank&quot; game.&lt;/p&gt;&#xA;" OwnerUserId="3324" LastActivityDate="2018-08-30T17:01:52.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7434" PostTypeId="1" AcceptedAnswerId="7448" CreationDate="2018-08-30T19:21:45.917" Score="18" ViewCount="1564" Body="&lt;p&gt;The Atari 400/800 home computers were well-established and quite successful in the games market by the time the Atari 5200 console was released in 1982. The 5200 shared the chips and architecture of the 400/800, and it appears on the surface that it would have been a trivial matter to have the 5200 support games on cartridge that already existed for those machines. In fact, those game cartridges likely comprised the best quality home computer game cartridge library that existed in 1982, for any machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We know in retrospect that the 5200 was not a success. And it seems like launching with a whole bunch of high quality games would have been really helpful. That, and a better controller, would have probably saved the 5200 from mediocrity. We also know in retrospect that forsaking compatibility with the 8-bit computers was a mistake in Atari's mind as well, since they corrected this deficiency with the XEGS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did Atari forsake compatibility with the existing 400/800 game library? &lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-04-06T04:44:39.143" Title="Why did the Atari 5200 forsake compatibility with 400/800 game cartridges?" Tags="&lt;atari&gt;&lt;atari-800&gt;&lt;atari-400&gt;" AnswerCount="4" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="7437" PostTypeId="1" CreationDate="2018-08-30T23:55:14.883" Score="3" ViewCount="806" Body="&lt;p&gt;Did people back then build powerful computers out of multiple smaller machines ?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Build powerful computers out of &gt;1 smaller machines  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Time range - approximately 76-82 (I accept exceptions, especially earlier than this time range, but not more than approximately 90)   &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I'm referring mainly to hobbyists , although maybe very very small companies should be included   &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Could they just have connected multiple smaller/cheaper machines, via network cables, to build a supercomputer   &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Or could they have removed processors from multiple machines to make a supercomputer (parallel-processing)     &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Parallel processing/parallel computing back then by using &gt;1 smaller machines, from my limited knowledge it would not have been possible, or it would have been too difficult  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;EDIT - I'm more interested in this being done using affordable common home computers, and in fact the cheapest home computers, but almost any examples within the parameters of this question are OK &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10473" LastEditorUserId="576" LastEditDate="2018-08-31T06:56:40.587" LastActivityDate="2020-05-31T21:31:59.013" Title="Did people back then build powerful computers out of multiple smaller machines?" Tags="&lt;network&gt;" AnswerCount="8" CommentCount="15" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7438" PostTypeId="2" ParentId="7437" CreationDate="2018-08-31T01:39:15.527" Score="14" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did people back then build supercomputers out of multiple smaller ones?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What smaller ones?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there have been multiprocessor systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For one, multi processor systems have been around since the late 1960s. For example the IBM /370-168 could be ordered with a second processor unit. It was a for all computing parts symmetric, except only the first CPU could hand over I/O jobs to the I/O processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBMs 3033 of 1978 did away with this limitation by having two CPUs and two IO processors where each CPU could start each IOU and each IOU could interrupt each CPU. The 3033 could also come in a tight coupled dual system via a high speed connection – maybe think of it like two computers with dual core CPUs connected via a multi lane PCIe link.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Build supercomputers out of &gt;1 smaller ones&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Since there where no 'smaller ones', there was no real gain in doing so. Today's parallel systems rely on the fact that sufficient fast single chip CPUs are available at extremely low prices. Back then super computer (or basically any fast machine) CPUs where build from dedicated chips, developed especially for that machine. Gaining more throughput could be achieved by adding special function units and other optimizations in a way more effective way than piling up CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, it's important to keep in mind that parallel CPUs only speed up very special classes of jobs. Again it was more effective to construct a CPU in a way to gain functional parallelism than adding general purpose CPUs. The Basic principle of CDC and Cray machines revolve about the idea of  a set of (virtual) I/O processors feeding function units in a way to keep them as busy as possible.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Time range approximately 76–82 (I accept exceptions, especially earlier than this time range, but not more than approximately 90)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;We could as well start with the &lt;a href=&quot;https://en.wikipedia.org/wiki/ILLIAC_IV&quot; rel=&quot;nofollow noreferrer&quot;&gt;ILLIAC IV&lt;/a&gt; of 1973 (working) with 64 parallel FPU units. Ok, given, they where special purpose, so the next step might be the Connection Machine 1 of 1985. Here up to 65Ki independent CPUs, each with its own memory and communication where tied up in one supercomputer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been other attempts at massively parallel systems in the 1970s, but in all cases it was cheaper to get the same or even higher computing performance by improving existing architectures. Especially by not having the need to rewrite application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An early example of using a massive parallel system with (rather) standard processors was the BBN Pluribus networking system in 1978 build up from 128 PDP-11 (alike) nodes. Except, its job was message switching, not computing – and nowhere near in computing power what supercomputers of the same time delivered. Communication was done via a shared memory architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The follow-up BBN Butterfly with up to 512 CPUs of 1985 comes closer by using of the shelf 68k CPUs, but still it was a switching system, not a supercomputer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1983/84 the first of INMOS' &lt;a href=&quot;https://en.wikipedia.org/wiki/Transputer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Transputer CPUs&lt;/a&gt;, especially made for massive parallel systems (only 4D connections max), and companies like &lt;a href=&quot;https://en.wikipedia.org/wiki/Meiko_Scientific&quot; rel=&quot;nofollow noreferrer&quot;&gt;Meiko&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Parsytec&quot; rel=&quot;nofollow noreferrer&quot;&gt;Parsytec&lt;/a&gt; soon constructed machines using them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually the first machine that is quite similar to some architectures in use today would be the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_iPSC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel iPSC/1&lt;/a&gt; of 1985, based on 32–128 compute modules, each with an 80286/87, 0.5 MiB of RAM and 8 Ethernet ports for communication, wired up as a 5, 6 or 7D cube, depending on the number of nodes. Later, also 80386 nodes with Weitek (!) FPUs where available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;nCube did build a quite similar system, except being scaleable up to 1024 CPUs. They are btw a great example that the concept of massive parallel systems where mostly a solution without a need. After first attempts on scientific computing they soon turned into supplying massively parallel video servers, like for Hotels and alike.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually &lt;em&gt;the&lt;/em&gt; first system true to today's image of a massive parallel computer build from standard CPU nodes might be the &lt;a href=&quot;https://en.wikipedia.org/wiki/SUPRENUM&quot; rel=&quot;nofollow noreferrer&quot;&gt;SUPRENUM-1&lt;/a&gt; of 1990. This is not only true about the hardware, but even more so for software, as they where the first to supply a massively parallel capable FORTRAN compiler as part of the project, as well as many research about parallel algorithms and how to analyze and structure application for parallel computing. Many of their tools and libraries can be found are the core of today's software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again with special CPUs, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cray-3/SSS&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cray 3/SSS&lt;/a&gt; was delivered with up to 256k CPUs in 1995 – shortly before the original Cray Corp went belly up.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm referring mainly to hobbyists, although maybe very very small companies should be included.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why should any hobbyist do so? What would have been the need for that. I mean, beside the extreme cost. As a hobbyist one was happy to acquire &lt;strong&gt;a single&lt;/strong&gt; computer. Buying a dozen or more is &lt;strong&gt;way&lt;/strong&gt; outside a hobbyists reach. Which by the way, it still is. A somewhat capable CPU board is still several hundred bucks, and even buying a dozen of them will not make it as fast as a top end Ryzen board will be – at lower cost! And buying a dozen Ryzen boards each for like 4,000+ USD (CPU + sufficient fast RAM) catapults the project past the 50 grand mark – definitely not hobbyist territory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Combining a bunch of cheap boards – like a dozen RPi's – doesn't make a supercomputer, as their combined computing power will be dwarfed even by any of today's Office PC class CPU with integrated GPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same is true when going back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then in 1980? A hobbyist reachable CPU at that time was something like a 6502 or Z80 – even 100 of them wouldn't even come close to an average mainframe of the same time, even less a supercomputer.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Could they just have connected multiple smaller/cheaper machines, via network cables, to build a supercomputer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure they could, but like described before it wouldn't make a supercomputer, just a bunch of small cheap machines connected. In 1990 this premise would have been like taking several 8–10 MHz 80286/287. A 10 MHz 80286 reaches about 0.15 Whetstones. A top of the line 486 in 1990 would be a 50 MHz one delivering about 20–25 Whetstones – that's about 120–150 times what the 286/287 does. So to even replace one up to day 486 computer with at that time cheap computers would need &gt;150 of them. Besides that already the cabling and LAN cards will cost more, I do not want to pay the electricity bill for that setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while 150 80286 would barely make up a 80486, a real supercomputer of 1990, like a Fujitsu 2400 or a NEC 3/11 would play in a region of 2000 Whetstones or above. Or like again 100 times faster. And all that without taking the communication overhead into account such standard of the shelf solutions have compared to the highly optimized supercomputers of that time. There is a reason that it took another 15+ years until standard CPUs did really reach the top of super computer power – and even that only by using extreme amounts of them in very tight coupling – not just PC-Boards connected via some network.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or could they have removed processors from multiple machines to make a supercomputer (parallel-processing )&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And put them on what boards?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Parallel-Processing/Parallel-computing back then by using &gt;1 smaller machines, from my limited knowledge it would not have been possible/too difficult.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure it was possible – see the above examples about serious machines. But for a hobbyist it would have been as impossible back then, as it is today.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;EDIT – I'm more interested in this being done using affordable common home-computers, and in fact the cheapest home-computers, but almost any examples within the parameters of this question are ok.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line, there are none, as this question is based on an assumption that just doesn't add up. In all times since we have computers, and even more so since the microprocessor, there was never a use case to combine low power CPUs for more computing power, as using higher power versions of the same type will beat such a combination by at least a magnitude, while doing so at a fraction of the cost.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a reason even today's supercomputers are never built of middle of the road CPUs, but always the top end.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-31T21:31:59.013" LastActivityDate="2020-05-31T21:31:59.013" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="7439" PostTypeId="2" ParentId="7437" CreationDate="2018-08-31T07:16:08.200" Score="5" Body="&lt;p&gt;The average (and even far-above-average) computer user was actually pretty lucky &lt;em&gt;having one single&lt;/em&gt; computer at his disposal back in the days. So it was pretty unlikely they could connect more than one machine to something like a computing grid. I was maybe a bit special at the time, owning three computers, but for a very long time could only afford one single CRT, so there wasn't much point in running them in parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that affordable computers back in the days rarely had suitable networking equipment that would have been fast enough for a proper interconnect between machines that would actually have sped up things - In the 80ies, networking was still somewhat esoteric and mainly limited to government and science installations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some machines had limited (slow) networking support and sometimes were used to interconnect devices, but more for the sharing of expensive peripherals like floppy drives you could only afford one each rather than combining their computing power. (The Sinclair range of home computers, for example, provided simple networking using transfer rates below 100kbps to support file and printer sharing, other vendors had similar approaches. The limited bandwidth available didn't really allow load share between computers - Transferring task and result would in most cases have taken longer than calculating locally)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, some people were dissatisfied with the speed of their machines and tried to make them faster. Very often, by adding peripheral cards that added to (or replaced) the existing CPU with faster technology. A very notable example (and, maybe, the exception to the rule) supplied by a vendor that would fit your definition would be the &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_Transputer_Workstation&quot; rel=&quot;noreferrer&quot;&gt;Atari Transputer Workstation&lt;/a&gt;&lt;/em&gt; - This combined home computer technology with (at that time) leading-edge multiprocessing technology and might have been a unique off-the-shelf offering. While the original ATW-800 was pretty much out of the financial reach of the average user, some magazine projects of that time used the same technology to combine Transputer technology and home computers, some even compatible with ATW. Transputer link extensions (high-speed serial interfaces to connect to such a beast) were also available for the Amiga and other home computers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transputers were a short-lived hype in computing technology end of the 80ies. The Transputer provided the otherwise missing high-speed links, came with &lt;a href=&quot;https://en.wikipedia.org/wiki/Occam_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Occam&lt;/em&gt;&lt;/a&gt;, a language supporting parallel processing, and was a (somewhat) affordable technology entry into parallel computing (Even if most hobbyists weren't able to afford more than one Transputer...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do recall that the BBC micros had some similar cards with leading-edge CPUs of that time connecting into their Tube interface, not counting various projects for this and other machines that &lt;em&gt;replaced&lt;/em&gt; the inbuilt CPU with a compatible faster one.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-08-31T12:12:53.840" LastActivityDate="2018-08-31T12:12:53.840" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7440" PostTypeId="1" AcceptedAnswerId="7442" CreationDate="2018-08-31T09:59:20.590" Score="11" ViewCount="797" Body="&lt;p&gt;My understanding is that the Intel 8088 has this buffer which reads ahead in the instruction stream whenever it has a spare bus cycle or two, so that when the time comes to execute that instruction, if you're lucky, that instruction doesn't need to be fetched from DRAM because it's already done for you. So for each instruction there are two possibilities:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The instruction has been fetched already and is ready to be decoded&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The instruction has not been fetched, and therefore the processor must stall until it has&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's not just luck though, because if there has recently been a spare cycle of the appropriate kind here or there, that instruction is more likely to have been fetched. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So presumably there are/were peephole optimisers that reorder the instruction stream to increase the likelihood that some of the later instructions can be fetched ahead of time. So how does the instruction stream need to be reordered then, to decrease the latency of this instruction prefetch buffer?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-08-31T19:50:42.607" Title="How to keep the instruction prefetcher filled up" Tags="&lt;instruction-set&gt;&lt;8088&gt;" AnswerCount="3" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7441" PostTypeId="2" ParentId="7440" CreationDate="2018-08-31T11:13:11.233" Score="7" Body="&lt;p&gt;The 8088 and 8086 are microcoded CPUs, and need multiple cycles to execute each instruction.  The fastest instructions take at least 2 cycles to execute, and most take much longer.  Any instruction that accesses memory takes at least 8 cycles, and often more like 15-20.  On the other hand memory accesses occupy the bus for 4 cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It therefore follows that the only instructions that deplete the queue without chance to refill it are those short 2-3 cycle instructions.  These are basically only register-to-register operations, excluding multiplies and divides.  Register/immediate instructions take 4 cycles, but also fetch an extra instruction byte, so also deplete the queue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As long as you disperse reasonable numbers of longer operations (including anything that involves a memory access, or multiply/divide operations) in the instruction stream, it should be unlikely that the instruction buffer underruns other than immediately after a jump.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-08-31T11:13:11.233" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7442" PostTypeId="2" ParentId="7440" CreationDate="2018-08-31T11:39:36.837" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;My understanding is that the Intel 8088 has this buffer which reads ahead in the instruction stream whenever it has a spare bus cycle or two, so that when the time comes to execute that instruction, if you're lucky, that instruction doesn't need to be fetched from DRAM because it's already done for you.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The buffer isn't some kind of optional read ahead,it &lt;strong&gt;is&lt;/strong&gt; the instruction buffer. Before an instruction can be executed, it has to reside fully within the buffer. Only then it can be transfered, &lt;em&gt;as a whole,&lt;/em&gt; to the execution unit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What differentiates it from other machines with a similar fetch logic is that it doesn't start fetching when a new instruction is needed, but whenever there is empty storage within &lt;em&gt;and&lt;/em&gt; there is a memory cycle without an outstanding data read or write request.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The instruction has been fetched already and is ready to be decoded&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It will be already partially decoded by the BIU (&lt;strong&gt;B&lt;/strong&gt;us &lt;strong&gt;I&lt;/strong&gt;nterface &lt;strong&gt;U&lt;/strong&gt;nit), for example to decide about its length.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The instruction has not been fetched, and therefore the processor must stall until it has&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And the third one is a partially fetched instruction. Just it isn't a stall, it only means that now instruction fetches get priority over outstanding data fetches and the EU (&lt;strong&gt;E&lt;/strong&gt;xecution &lt;strong&gt;U&lt;/strong&gt;nit) waits for the next one to be fetched in full.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It's not just luck though, because if there has recently been a spare cycle of the appropriate kind here or there, that instruction is more likely to have been fetched.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And there are many such cycles where the EU is busy but there is no outstanding data request to be handled.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So presumably there are/were peephole optimisers that reorder the instruction stream to increase the likelihood that some of the later instructions can be fetched ahead of time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No need for such bloaty software as the likelihood for such 'holes' is rather large. Just keep in mind, every &lt;a href=&quot;https://web.itu.edu.tr/kesgin/mul06/intel/intel_eacalc.html&quot; rel=&quot;noreferrer&quot;&gt;address calculation&lt;/a&gt; on the x86 takes 6-12 clock cycles (T-states). So as soon as there is a memory operand (i.e. not immediate or register), already one fetch can be made. Plus, of course, the cycle time for the instruction itself, which is anywhere between 2 (register-to-register move) and 133 (16-bit multiplication) clocks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having the EU wait for the BIU isn't anything special or a problem and by no means a fault of the BIU or software. It just means that the memory bus is saturated by the combined need of transfer for instructions and data into and out of the CPU, beyond the amount of cycles needed to compute. In fact, this is the desired state. Useful bus utilization is at maximum. In comparison, even the much acclaimed pipelining of the 6502 results in up to 25% waste cycles where the bus stalls (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, unless the instruction stream is made up of all register-to-register instructions of the simple kind, there will be plenty of room for instruction fetch. And at least on a 8086, even then it rarely runs empty, as these instructions are (mostly) 2 or 3 cycles with 1 or 2 bytes encoding. 1-Byte encoding with two-cycle execution means the bus is fully occupied with instruction fetch (2 bytes at once) while the EU is fully occupied with executing them - two (single byte) instructions per two byte fetch. It needs a stream of several two-byte register-to-register instructions to have it run low. Assuming a filled buffer in the beginning, it will need a sequence of 5 two byte instructions until the EU has to wait for one cycle. Since even a simple register-to-memory compare (like in a search loop) is already 9 cycles, there isn't much to fear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now on the 8088, the situation is worse due the limited bus size delivering only half the bandwidth. Here a sequence of several register-to-register instructions will make the EU wait for new instructions, as its 5-byte buffer will run empty soon. Again, this is not something that happens a lot in average code, as memory address calculation (and more complex instructions than such simple) will leave enough space for fetching; even with just half the bandwidth the effective throughput does not fall down to 50% (of an 8086) but still delivers 60-70%. Not bad for requiring only half the RAM and ROM chips :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's always helpful to keep in mind that this is just a buffer for one instruction at maximum length, not some kind of cache or the like. All it does is improve the performance and allow more complex instructions while decreasing chip complexity to handle them. Instead of having fixed 'points' marked within an instruction to fetch (parts of) the next instruction, it's an abstraction layer, so a mechanic independent of the execution can handle fetch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, a 8086/88 EU waiting for fetches is just one utilizing the bus at maximum, thus achieving already the highest possible speed.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So how does the instruction stream need to be reordered then, to decrease the latency of this instruction prefetch buffer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mix in some memory access, at best with way complicated addressing, and there will be plenty of room to keep the buffer filled ahead of time. That's also why compiler code - which is usually way more memory focused than assembly - rarely runs into this barrier. Of course, this means in turn that it is not using the full memory bandwidth like hand written Assembly does :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does the same go for the 8086?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(From a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7440/how-to-keep-the-instruction-prefetcher-filled-up#comment20971_7440&quot;&gt;comment&lt;/a&gt; by Wilson)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, as described above. On the 8086 it's just even harder to get it to stall. The buffer on a 8086 is 6 bytes instead of 5 for the 8088. The maximum instruction in original 8086/88 code is 5 bytes long (*2), thus the buffer only needs to be 5 bytes to deliver a whole instruction. Since the 8086 operates on a 16 bit bus, fetches will always be two bytes at once, thus filling in a full instruction can result in 6 bytes fetched.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Most of them due the second cycle of a single byte instruction - much the same way as with an 8086, except for completely different reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - No, except for REP, no prefix is part of the instruction when the buffer is considered, as segment or lock prefixes are instructions for the BIU, not the EU.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-08-31T16:32:31.460" LastActivityDate="2018-08-31T16:32:31.460" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7443" PostTypeId="2" ParentId="7437" CreationDate="2018-08-31T13:12:32.243" Score="4" Body="&lt;p&gt;The really big question of building multiple-CPU machines is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How do the CPU's talk to each other?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In order to allow multiple CPU's to work together they need to exchange information, and the quicker this can be done, the more complex problems can be solved.   Before networking in form of ethernet arrived, the bandwith was basically too small between computers to have this make much sense at all.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good example is Doom (yes, the FPS game) which was introduced at a time where Ethernet was rare and Internet was still slow dial-up.  Communication could happen over serial ports and still could only be enough to have the multiple instances of the Doom program (one for each player) in sync.  Sharing the load was out of the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the 90's SGI (those used for Jurassic Park) did a lot of work with high-end multi-cpu machines where much of the effort was done in having a bus moving data around inside the machine.  (We had a 24-CPU Onyx).   Commodity Desktop PC's could be connected over ethernet using Beowulf to make a cheap multi-cpu cluster but again limited in bandwith limiting the problems that could be solved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today most large Linux supercomputers actually consist of multiple computers linked together and the problems that can be solved are limited by this.&lt;/p&gt;&#xA;" OwnerUserId="447" LastActivityDate="2018-08-31T13:12:32.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7445" PostTypeId="2" ParentId="7440" CreationDate="2018-08-31T16:02:01.693" Score="6" Body="&lt;p&gt;On the 8088 (which was used in the original IBM PC and early clones thereof), but not on any of the other processors used in subsequent machines, a typical two-byte instruction will take eight cycles to fetch and 2-3 cycles to execute.  Because of this disparity between instruction-fetch time and execution time, the memory bus will be almost never be idle except when executing long instructions like multiply/divide.  Thus, in many cases the simplest and most accurate way of the estimating execution time for a piece of code is to simply count the memory operations and multiply by four.  There are some cases that require more precise analysis of the timing relationship between the execution and bus-interface units, but in most of those the simplest way to determine execution time is to feed the code to an 8088 and measure it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, many books from the era when the 8088 was the dominant processor ignore instruction-fetch times.  Consequently, they give optimization advice which would tend to be reasonable on future machines using the 8086 and 80286, but is in many cases just plain wrong on the 8088.  For example, some such books suggest that if one needs to move DX to AX or vice versa, and don't care about what happens to the other register, using &quot;XCHG AX,DX&quot; will be smaller but slower than using &quot;MOV AX,DX&quot; or &quot;MOV DX,AX&quot;.  While that may have be a speed/space trade-off on some later CPUs, on the 8088 used in the PC the &quot;slower&quot; form is in practice almost always faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that even though effective address computation times may appear long, they are rarely sufficient to give the bus unit any idle time.  An instruction like &quot;add [bx+1234],ax&quot; is four bytes long, which means it will take 16 cycles to fetch, and it will have to perform four bus operations (tying up the memory unit another 16 cycles) when it executes.  One might look at the execution-unit time and think it's so huge that the bus unit would catch up, but since the instruction requires performing 8 bus operations, the time required for the effective address calculation really doesn't matter.  If one did nothing but memory operations using short instructions, the bus interface unit might catch up with the execution unit (many short instructions that access memory have execution times that are a cycle or two longer than the time required to perform all the memory accesses) but most two-cycle instructions that don't access memory give the execution unit a 5-6 cycle advantage, so for most typical instruction mixes the memory-access times will dominate.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2018-08-31T19:50:42.607" LastActivityDate="2018-08-31T19:50:42.607" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7446" PostTypeId="2" ParentId="7437" CreationDate="2018-08-31T16:22:15.873" Score="7" Body="&lt;p&gt;One example was &lt;a href=&quot;https://en.wikipedia.org/wiki/C.mmp&quot; rel=&quot;noreferrer&quot;&gt;C.mmp&lt;/a&gt; -- A cluster-computing machine built from sixteen PDP-11 minicomputers at Carnegie-Mellon University in the 1970s.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Note, the &lt;a href=&quot;https://en.wikipedia.org/wiki/C.mmp&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article&lt;/a&gt; ends with the sentence, &quot;The machine is now on display on the ninth floor of Wean Hall at Carnegie Mellon University.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's something of a joke.  The &quot;ninth floor&quot; of Wean hall contains nothing but HVAC and elevator machinery, and a few locked cages where obsolete capital equipment lingers until the University's accountants can be persuaded to allow it to be tossed into a dumpster.&lt;/p&gt;&#xA;" OwnerDisplayName="user10478" LastActivityDate="2018-08-31T16:22:15.873" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7447" PostTypeId="2" ParentId="7437" CreationDate="2018-08-31T16:53:16.670" Score="4" Body="&lt;p&gt;To echo previous posters: there would have been no point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the time frame you're talking about, a typical home computer cost anywhere from $500 to $2000, depending on feature set (especially disk drives or hard disks put the cost up towards the high end) when exactly you bought, and how much memory you got.  For your money you would have got a machine that could manage about 0.5 MIPS or so, and had between 16 and 64KiB of RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, you might think that you could usefully put 4 of them together, network them, and distribute a computation across them, but there would be little point because:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Networking hardware was unusual and expensive at the time, so would be difficult and costly to set up&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Your network speed would likely not be fast enough to manage your process.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Even if the above problems weren't showstoppers,  you would probably not have enough memory in a single node to perform any useful calculation that couldn't just be done in a single node.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Memory was a huge limiting factor. It was expensive (although starting to get reasonably cheap by 1982, but before then you'd have paid hundreds of dollars extra for a 64KiB system) and most systems couldn't handle more than 64KiB of it without needing to use paging (which made development hard).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other reason you'd not do this was that there was a far better approach. At least if you knew what you were doing. Minicomputers were far faster than micros, and while they cost a lot more to buy than micros, they were within the reach of a skilled hobbyist to design and build themselves, a project whose budget would likely have been similar to purchasing a handful of home computer systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a modern take at how such a project might have worked look at the &lt;a href=&quot;https://gigatron.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gigatron&lt;/a&gt; - this is a 6.25MHz computer that performs one operation per cycle using a handful of TTL chips and some fast RAM and PROMs ... It would have cost less than $1000 to build circa 1980 and is roughly 5 to 10 times faster than typical home computers of the day.  And its design scales up quite nicely. You could take its 8 bit design and make a 12 or 16 bit version quite easily.  Improve its memory architecture (which would be quite simple) and you could go from 64KiB up to being able to address however much memory you could afford with ease. Give it multiple memory banks and you could push its clock rate up to 12MHz pretty simply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason such systems were expensive to buy at the time wasn't that the components were costly. Its that designing them was hard, and writing the software for them was time consuming. But neither of those would deter a hobbyist who wanted to experiment with fast computers.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="357" LastEditDate="2018-09-06T15:15:35.417" LastActivityDate="2018-09-06T15:15:35.417" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7448" PostTypeId="2" ParentId="7434" CreationDate="2018-08-31T20:21:23.567" Score="14" Body="&lt;p&gt;At that point in time, Atari had separate divisions for the Home Computer market and the Consumer Electronics, or console, market.  There was a lot of competition between the divisions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Consumer Electronics division was the pride of the company due to all the cash that was rolling in thanks to the Atari VCS(2600), and it seems there was a bit of hubris involved in their design of the 5200.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rivalry between divisions manifested itself to the point where the same video game license was made by completely different programmers in the different divisions, despite the fact that the same code could have been highly reused between the two platforms.  I think Mario Bros. is a good example of this, the 5200 and the 8-bit versions are completely different games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe this situation is well documented in the book &quot;Atari: Business is Fun&quot; if you would like much more information about how Atari was being run at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The XEGS machine came later, under completely different management than had produced the 5200.&lt;/p&gt;&#xA;" OwnerUserId="10235" LastActivityDate="2018-08-31T20:21:23.567" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7449" PostTypeId="1" CreationDate="2018-09-01T00:52:24.787" Score="8" ViewCount="513" Body="&lt;p&gt;Caveat: This is maybe a borderline for RC, as it's about systematic data processing even before (and in parallel to) computers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Before (and parallel to) computer and/or tabulating machine punch cards there have been other systems for data processing. For example &lt;a href=&quot;https://en.wikipedia.org/wiki/Edge-notched_card&quot; rel=&quot;nofollow noreferrer&quot;&gt;Edge-Notched Cards&lt;/a&gt;. These systems where used for manual indexing, sorting and searching, and where not meant for automated processing (*1). While references to the Edge-Notched Card system are rather easy to come by, as they may have had large usage in the US, I wasn't able to find any about other systems - at least not in English language sources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;For a little side project I do need English names for the two other systems.&lt;/strong&gt; (Second and Third of the list)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most simple way might be to describe them in short:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;First ofc, the &lt;strong&gt;Edge Notch Cards&lt;/strong&gt; - German name &lt;em&gt;Kerblochkarte&lt;/em&gt;, literal &lt;em&gt;Kerf Hole Card&lt;/em&gt; (&lt;a href=&quot;https://en.wiktionary.org/wiki/kerf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kerf&lt;/a&gt; as Middle English for Notch) or &lt;em&gt;Randlochkarte&lt;/em&gt;, literal Edge Hole Card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here each card has a number of holes along one or more edges. For example 26 on the one edge to encode the 26 basic latin letters along an employee record, so the first letter of the name could be encoded and searched (*2). Selections would be made by piercing knitting needle like tools thru a stack encoding the search term and shaking it to have all matching cards fall out. Extrem handy, isn't it :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this system a lot of online information can be found with some variety of information.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next is the &lt;strong&gt;Schlitzlochkarte&lt;/strong&gt; - literal &lt;em&gt;Slit (Slot) Hole Card&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here the holes are not along the edges, but within the card. always as pairs. To mark (punch) information for one pair the land inbetween is to be removed. The system is similar to Edge-Notch Cards, but by using all (or much) of the surface, much more information can be encoded. Letter sized cards of this system could encode more than 100 information chunks (*3) to be searched with AND condition in a single operation, somewhat like the Edge-Notch Cards.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The third system are &lt;strong&gt;Sichtlochkarten&lt;/strong&gt; - literal &lt;em&gt;Sight (View) Hole Cards&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here a large array of hole positions where marked, depending on sheet size up to 10,000 per sheet. This time not the key words where marked, but the target ID of the matching item. Let's assume it's about the index for a library. All books get an ID 1..10,000. To form an index, for each keyword that should be searchable one punch card is prepared with a hole at each books number that fits the search term. Terms kan be anything from autor and topic to age specification or anything else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say there are cards prepared for differnt subjects like Astronomy, Mathematics, Physics, and so on, as well as book cathegories. To find a &lt;em&gt;Novel&lt;/em&gt; about a &lt;em&gt;Mathematician&lt;/em&gt; practising &lt;em&gt;Fortune Telling&lt;/em&gt; one only needs to pick these three cards, stack them and hold the stack against some light. Whereever there are a hole for the same book on all three cards the light will shine thru, and the book(s) marked are the ones we want to have a look at (*4).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So my question is : &lt;strong&gt;What are these punch card systems called in English&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bonus points for their name in other languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And as well for naming (and pointing to) any other system than the above (*5).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Funny sideshow: These systems where not only used way into the 1970s, but today it's mainly people from the humanities like librarians et.al who remember them, while engineers and CS people have forgotten them - or even never heared about.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Automated in the sense of tabulating machines or computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - This is just a simple first explanation, there are various strategies to make hash like encoding with multiple notches so even for a large company only a few hits would be returned, making it easy to weed out false hits - much like selecting the right hit from the first page of a Google search :)) Here's a very &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/1/1e/Randlochkarten_Verschl%C3%BCsselung_des_%C2%ABLochkarten_Werk%C2%BB%2C_Schlitz-Hessen.jpeg&quot; rel=&quot;nofollow noreferrer&quot;&gt;nice example&lt;/a&gt; about what could be done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - I try to be careful here, as encoding was neither binary in the sense we use it today nor that simple, so let's call it chunks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - By using part translucent paper even a fuzzy search can be implemented - but that (and many other variations) are a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - I'm not looking for applications of (more or less) standard punchcard systems from Jacquard to hotel key cards, but such with a fundamental different approach than binary.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-19T10:53:47.263" LastActivityDate="2019-06-19T10:53:47.263" Title="Non-Computer Punch-Card Systems other than Edge-Notched Cards" Tags="&lt;punched-cards&gt;" AnswerCount="3" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7450" PostTypeId="2" ParentId="7449" CreationDate="2018-09-01T03:57:00.157" Score="-1" Body="&lt;p&gt;Player pianos and knitting machines are two non-computer uses of punch card systems.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-09-01T03:57:00.157" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7451" PostTypeId="2" ParentId="7449" CreationDate="2018-09-01T07:54:12.293" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;First ofc, the Edge Notch Cards - German name Kerblochkarte, literaly _Kerf Hole Card (Kerf as Middle English for Notch) or Randlochkarte, literaly Edge Hole Card.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Pretty close to the German term, these are called &lt;a href=&quot;https://en.wikipedia.org/wiki/Edge-notched_card&quot; rel=&quot;nofollow noreferrer&quot;&gt;edge-notched cards&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Next is the Schlitzlochkarte - literaly Slit (Slot) Hole Card&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.bab.la/dictionary/german-english/schlitzlochkarte&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apparently,&lt;/a&gt; these are called &quot;slotted card&quot;, &quot;slit punch card&quot; or &quot;slit card&quot;. I've never heard any of those terms, nor the German one, and a quick web search didn't reveal anything relevant for these though.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The third System are Sichtlochkarten - literaly Sight (View) Hole Cards&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/4322582/?arnumber=4322582&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND(p_IS_Number:4322569)&quot; rel=&quot;nofollow noreferrer&quot;&gt;peek-a-boo cards&lt;/a&gt;, from the game played with very small children, where you hide your face behind your hands. That word &quot;peek-a-boo&quot; is associated with something suddenly or unexpectedly becoming visible&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-09-01T08:10:36.577" LastActivityDate="2018-09-01T08:10:36.577" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7452" PostTypeId="2" ParentId="7449" CreationDate="2018-09-01T09:39:46.227" Score="3" Body="&lt;p&gt;Your examples in German are the names of the &lt;strong&gt;paper medium&lt;/strong&gt;, which I have highlighted in bold below.  However, it was more common to create a specialized name for the device that reads the medium, rather than the medium itself.  So if you're expecting fancy English words for the medium, they don't exist.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Basile Bouchon, Lyon France, 1725.  Roll of &lt;strong&gt;paper tape&lt;/strong&gt; read by needles to control patterns in a loom.&lt;/li&gt;&#xA;&lt;li&gt;Jean-Baptiste Falcon, Lyon France, 1728.  Assistant to Bouchon who improved the loom with an endless loop of &lt;strong&gt;rectangular cards&lt;/strong&gt;, made of stiff pasteboard and chained together.  The stiffer cards were more durable than the paper tape.&lt;/li&gt;&#xA;&lt;li&gt;Jacques de Vaucanson, Lyon France, 1740.  &lt;strong&gt;Punched paper&lt;/strong&gt; wrapped around a perforated cylinder called the &quot;barrel&quot;.  Previous designs encoded one row of holes for each woven thread; Vaucanson's design used two rows of holes -- in essence, the first multi-word instruction set.  It was also the first design to automatically advance itself.  The design was never actually produced.&lt;/li&gt;&#xA;&lt;li&gt;Joseph Marie Jacquard, Lyon France 1804.  Combined Falcon's &lt;strong&gt;chain of cards&lt;/strong&gt; with Vaucanson's multi-row technique (this time, 8 rows of holes per thread).  Commercially successful.&lt;/li&gt;&#xA;&lt;li&gt;Semyon Korsakov, St. Petersburg Russia, 1832.  Inventions to analyze police statistics.  Holes were punched in a sheet of paper with a rectangular grid, called a &quot;&lt;strong&gt;table&lt;/strong&gt;&quot;.  A strip of wood called a &quot;homeoscope&quot; had pins inserted into the rows to be matched.  The homeoscope was rubbed across the paper, and any column where the pins fell through was a match.  Also invented a more sophisticated reader called an &quot;ideograph&quot;.&lt;/li&gt;&#xA;&lt;li&gt;Charles Babbage, Cambridge England, 1837.  Designed the &quot;Analytical Engine&quot;, a mechanical computer and the first general-purpose computer.  Three different types of &lt;strong&gt;punch cards&lt;/strong&gt; (load/store, operation selection, numerical constants), each with their own reader; some in card stacks and some in card chains.  In addition, a drum with pegs that acted as primitive microcode.&lt;/li&gt;&#xA;&lt;li&gt;Jules Carpentier, France, 1881.  Invented the &quot;Melograph&quot;, which recorded music played on a pump organ onto &lt;strong&gt;punched cards&lt;/strong&gt;.  The series of cards could be played back on a &quot;Melotrope&quot;.&lt;/li&gt;&#xA;&lt;li&gt;Herman Hollerith, United States, 1890.  The &lt;strong&gt;unit record card&lt;/strong&gt; was a punch card that represented the census information of one person.  By sensing the presence of a hole, a counter was electrically incremented, allowing census records to be counted.  Hollerith's company would eventually become IBM.&lt;/li&gt;&#xA;&lt;li&gt;Max Newman, Bletchley Park England, 1940s.  Invented the Heath Robinson and Colossus machines to decypher the German Enigma code.  Ciphertext and the proposed part of the key were punched onto two long loops of &lt;strong&gt;paper tape&lt;/strong&gt;, which were optically scanned and electronically processed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2018-09-01T09:39:46.227" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7453" PostTypeId="1" AcceptedAnswerId="7454" CreationDate="2018-09-01T22:12:43.273" Score="4" ViewCount="1461" Body="&lt;p&gt;I have acquired an Atari 130XE (no manual).  It has a power cord and it powers up!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there is no monitor/TV cable provided.&lt;a href=&quot;https://i.stack.imgur.com/Dt8W6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Dt8W6.jpg&quot; alt=&quot;Back of Atari 130XE&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully you can see the image I tried to attach.  Where can I get a monitor/TV cable or failing that, how do I build one?  As you can hopefully see from the picture, there are two slots, one marked &quot;Monitor&quot;, the other marked &quot;Television&quot;.  I'm guessing the &quot;Television&quot; would be easier to deal with but whatever gets me up and running is fine with me.  With the Atari 800 there is a cable already attached that leads to a little converter box that then goes into the coax connector on a TV.  But in the 130XE case, the cable much be attached.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update.  I'm suddenly much more concerned with the output to monitor as my wife is kicking me and my toys out of the house (where there is a TV) and into the garage (where I could use an existing monitor rather than buying a new TV).  Is there a name for the type of output I show in my photo?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update #2.  Still having trouble finding correct cables.  In fact my monitor (I suppose I could get another monitor!) supports only VGA input.  So I was looking for 5 pin DIN (180 degrees) to VGA. No luck.  Did find 5 pin DIN to Composite and thought I had a composite to VGA cable, but in fact, it was VGA to Composite and I haven't had any luck finding composite to VGA.&lt;/p&gt;&#xA;" OwnerUserId="10407" LastEditorUserId="10407" LastEditDate="2018-09-10T16:07:14.473" LastActivityDate="2018-09-11T07:06:18.863" Title="Monitor Cable for Atari 130XE. Where to buy or how to build?" Tags="&lt;atari&gt;&lt;atari-800&gt;&lt;connector&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7454" PostTypeId="2" ParentId="7453" CreationDate="2018-09-01T22:30:22.443" Score="4" Body="&lt;p&gt;Well, 'Television' is just a modulated TV signal on chanel 2 or 3 (see switch) which can be decoded by any analogue TV. A cinch (coaxial) cable to connect the computer to the antena input of the TV is all that's needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DIN connector carries more detailed signals like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(clockwise starting from the right)&#xA;Luminance&#xA;Composite Video&#xA;Ground&#xA;Chroma&#xA;Audio&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;http://www.hardwarebook.info/Atari_8-bit_Monitor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's&lt;/a&gt; a nice description)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on what your TV needs a cable can be made for composite, compont or even S-Video with low effort&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be useful to do a short Ebay search, as there are manyoffers for cables in any combination for less than 20 USD - so not realy worth to pull out the soldering iron. Just make sure to look for an XE cable, as above full signaly are only found on XE models - earlyer XL machines miss for whatever reason the Chroma signal (*1). There are also some small companies still offering (new) cables.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://atariage.com/forums/topic/248482-atari-800-monitor-jack-to-modern-tv-problem/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is&lt;/a&gt; an informative thread about cabeling the Ataris. It contains a lot of details and even a link showing in detailhow someone did build a &lt;a href=&quot;https://www.youtube.com/watch?v=CwomI7iGD3w&quot; rel=&quot;nofollow noreferrer&quot;&gt;cable for the 800XL&lt;/a&gt; (only composite, not S-Video)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also might want to take a look at this Question about &lt;em&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2962/what-monitor-did-atari-recommend-for-its-8-bit-product-line&quot;&gt;What Monitor did Atari Recommend for its 8 Bit Product Line&lt;/a&gt;&lt;/em&gt;, as it contains some helpful further information.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1- The 600 XL seams also to miss the Luminace signal - at least on all I've seen.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-02T12:20:12.043" LastActivityDate="2018-09-02T12:20:12.043" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7455" PostTypeId="1" AcceptedAnswerId="7456" CreationDate="2018-09-02T00:39:09.920" Score="3" ViewCount="313" Body="&lt;p&gt;For the purpose of debugging why the first start of Windows 3.1 after the installation crashes DOSBox, I was looking for a way to automate the installation process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Surprisingly, there is one, the &lt;code&gt;/H&lt;/code&gt; switch !&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vIWW6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vIWW6.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, I can't find any documentation about it on the web ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you know where I can find more information on setting up the feature ?&lt;/p&gt;&#xA;" OwnerUserId="3282" LastActivityDate="2018-09-02T04:52:10.333" Title="Where is the literature for Windows 3.1 Batch mode setup?" Tags="&lt;windows-3.x&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7456" PostTypeId="2" ParentId="7455" CreationDate="2018-09-02T04:52:10.333" Score="6" Body="&lt;p&gt;Search for the &quot;Windows 3.1 Resource Kit&quot;.  The information you want will be in Chapter 1.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-09-02T04:52:10.333" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7457" PostTypeId="1" AcceptedAnswerId="7458" CreationDate="2018-09-02T20:52:18.193" Score="2" ViewCount="294" Body="&lt;p&gt;From 'A Company on the Edge', page 545:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Commodore marketing scheduled the release of the TED computers for May 1984, but met with inevitable delays due to RAM shortages and problems with the supplier, Micron. &quot;We had to wait on the 16 kilobyte DRAMs, which were brand-new back then,&quot; says Herd. &quot;All of this wouldn't have mattered as it waited on the TED chip.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Temporary RAM shortages and delays in debugging a custom chip are commonplace enough, but I'm surprised at the remark that 16k DRAMs were brand-new in 1984; my understanding is that they were introduced in the mid-70s. What could Bil Herd have meant by this? Did the C16 and Plus 4 need RAM chips that were faster than those hitherto available?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-09-02T21:35:13.007" Title="TED computers and delayed RAM chips" Tags="&lt;history&gt;&lt;memory&gt;&lt;commodore&gt;&lt;ted&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7458" PostTypeId="2" ParentId="7457" CreationDate="2018-09-02T20:57:25.443" Score="5" Body="&lt;p&gt;You're getting confused, I suspect, between 16 kilo&lt;em&gt;bit&lt;/em&gt; DRAMs (eg 4116) which were introduced in the early 70s and 16 kilo&lt;em&gt;byte&lt;/em&gt; DRAMs (i.e. 128 kilo&lt;em&gt;bit&lt;/em&gt;) such as the 41128 ... I'm not sure when that line was introduced exactly, but TI's datasheet is dated April 85, although other manufacturers may have introduced it earlier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Although, having said that, neither the C16 nor the Plus/4 used 128kbit chips - the plus/4 used 8 x 4264 64kilobit chips, while the C16 used 2 x 4416 16k times 4 bit, i.e. also 64 kilobit chips, so I'm confused as to why they would have been waiting for them...?)&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-09-02T21:35:13.007" LastActivityDate="2018-09-02T21:35:13.007" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7459" PostTypeId="1" AcceptedAnswerId="7460" CreationDate="2018-09-02T21:09:46.817" Score="11" ViewCount="2317" Body="&lt;p&gt;When storing graphics in a non-sequential/planar format (like the SNES does), converting to an 8-bit value representation requires first accessing multiple bytes (amount depending on bits-per-pixel), then taking into account the place of each bit to get the final result. So for 4bpp graphics, the most common type on SNES, data from 4 bytes or 2 words in separate locations will need to be accessed and added to a single byte to get the palette index.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why are graphics stored this way when, if each bit of a pixel was stored sequentially (2 full pixels per byte), only one byte need be accessed and a simple &lt;code&gt;&amp;gt;&amp;gt; 4&lt;/code&gt; or &lt;code&gt;&amp;amp; 0x0F&lt;/code&gt; could get a pixel's value? This seems like it would be not only much faster (less bit/math ops and memory accesses) but also simpler in design.&lt;/p&gt;&#xA;" OwnerUserId="4353" LastEditorUserId="15334" LastEditDate="2021-03-05T12:32:10.833" LastActivityDate="2021-03-05T12:48:31.830" Title="Why aren't each pixel's bits stored sequentially on the SNES?" Tags="&lt;graphics&gt;&lt;snes&gt;&lt;color-display&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7460" PostTypeId="2" ParentId="7459" CreationDate="2018-09-02T22:38:56.517" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why aren't each pixel's bits stored sequentially on the SNES?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, to start with, they are always (!) 8 pixels sequentially within a byte - and multiple byte in parallel for extended colour depth.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Because it simplifies hardware when multiple colour depth is handled.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why are graphics stored this way when, if each bit of a pixel was stored sequentially (2 full pixels per byte), only one byte need be accessed and a simple &amp;gt;&amp;gt; 4 or &amp;amp; 0x0F could get a pixel's value?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure, on a simple, fixed colour depth system this would. But with variable (like 2,3 or 4 bpp) formats, a separate rendering pipe would be needed for each. At least when memory size is of concern.&lt;/p&gt;&#xA;&lt;p&gt;Going always 4 bpp wastes memory space and bandwidth when not needed (like when in mode 0 with 2 bpp). Using a  variable number of bits per pixel allows to reduce needed memory bandwidth and more important ROM space for the game - a direct influence in how complex a game can be at a given ROM size.&lt;/p&gt;&#xA;&lt;p&gt;To understand how this simplifies the chip, it's necessary to look beyond a single pixel or byte, and even more important, see the pixels as a stream. To display 8 pixels in a 4 bpp mode, 4 bytes have to be read, which is the same as with a two pixel per byte encoding. Just instead latching 4 bytes in sequence and outputting them as 4 bits toward the pixel engine via of masking and shifting (*1), now each of the 4 bytes gets loaded into 4 shift registers, and shifted in parallel into the pixel engine. Memory load is exactly the same, just data encoding a bit different.&lt;/p&gt;&#xA;&lt;p&gt;The very same hardware could now as well used to produce 1, 2 or 3 bpp graphics, by loading only 1, 2 or 3 bytes, and clear all other shift registers during load. The only difference is how to apply the clear signals (*2) and how much the address counter gets advanced (and registers loaded).&lt;/p&gt;&#xA;&lt;p&gt;In the end it's the same way and reasoning why the Amiga did use a similar graphics system. Here is a good write-up about t&lt;a href=&quot;http://www.amigamccc.org/journal/1504eric.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;he same facts for the Amiga&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;I'd say one simple video logic supporting 4 different colour depth is a great achievement.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This seems like it would be not only much faster (less bit/math ops and memory accesses) but also simpler in design.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not faster. At best equally fast - and at lower colour depth slower than an adaptive method like the used one. Also not really simpler in design - at least not when considering that it need to support different colour depth&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Well, rather muxing.&lt;/p&gt;&#xA;&lt;p&gt;*2 - The registers could be cleared every cycle, or be made to be cleared during mode set and then just never loaded.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-05T12:48:31.830" LastActivityDate="2021-03-05T12:48:31.830" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7461" PostTypeId="2" ParentId="7459" CreationDate="2018-09-03T07:57:36.147" Score="3" Body="&lt;p&gt;It simplifies the video generation hardware. When generating a pixel the hardware needs to determine its colour index into a palette.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The index value can have a variable number of bits depending on how many colours the individual element is using - 2, 4, 8 or 16 colours for 1, 2, 3 and 4 bit images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplest way to implement the loading of a variable number of bits from RAM is to separate out those bits into planes and simply turn the DMA for each bit on and off as needed. Unloaded bits are kept as zero so a 4 bit colour index with only 2 bits loaded from RAM will be in the range 0-3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it would be possible to store all bits sequentially in RAM this has two main disadvantages. Say you want to store 3 bits per pixel, you can either pack two bits per byte which is wasteful or 2 and 2/3rds of a pixel per byte which requires complex decoding hardware and makes DMA memory access less regular.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-09-03T07:57:36.147" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7462" PostTypeId="1" AcceptedAnswerId="7469" CreationDate="2018-09-03T09:27:54.460" Score="5" ViewCount="767" Body="&lt;p&gt;The CPU in the PlayStation 2 is essentially a MIPS-IV missing a few instructions and with a few proprietary extensions which Sony put in, and it's got some thing which apparently helps to decode MPEG streams.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But one thing I could not find is an etymology! So why call it an EmotionEngine? Emotion is not really a prominent word in Sony branding as far as I can tell. So there must be some kind of history behind this term.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-09-04T14:34:12.137" Title="What's with the name &quot;EmotionEngine&quot;?" Tags="&lt;sony-playstation&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7463" PostTypeId="2" ParentId="7459" CreationDate="2018-09-03T11:33:04.750" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why are graphics stored this way when, if each bit of a pixel was stored sequentially (2 full pixels per byte), only one byte need be accessed and a simple &gt;&gt; 4 or &amp;amp; 0x0F could get a pixel's value? This seems like it would be not only much faster (less bit/math ops and memory accesses) but also simpler in design.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You are clearly thinking as a software or emulator viewpoint. You should look at the problem in a hardware viewpoint. The address and data lines can be tweaked for whathever logic is required in order to fetch graphic tiles, and this has negligible hardware cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each clock cycle, a byte from VRAM can be read, and it makes absolutely no difference whether the bytes read are consecutive bytes in memory or not. Assuming 4BP graphics, 2 pixels per layer are fetched on each clock cycle, and it thus requires 4 cycles to fetch a full tile line (8 pixels). Whether those 4 bytes are in successive locations in memory or not is irrelevant.&lt;/p&gt;&#xA;" OwnerUserId="2123" LastActivityDate="2018-09-03T11:33:04.750" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7464" PostTypeId="2" ParentId="7437" CreationDate="2018-09-03T14:17:43.110" Score="2" Body="&lt;p&gt;A bit at the edge of the question's scope, and certainly not a cheap option: in about 1990, Radius introduced the &lt;a href=&quot;http://lowendmac.com/1991/radius-rocket-and-stage-ii-rocket/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rocket&lt;/a&gt;: a Mac computer on a NuBus card. You installed this into your Mac II to either accelerate your existing Mac or run two separate desktops from the same machine. It was even possible to stick multiple Rockets into one Mac, so you could end up with a 4-machine cluster on a single chassis (limited by available power).&lt;/p&gt;&#xA;" OwnerUserId="7159" LastEditorUserId="7159" LastEditDate="2018-09-03T14:41:05.500" LastActivityDate="2018-09-03T14:41:05.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7465" PostTypeId="2" ParentId="7462" CreationDate="2018-09-03T16:15:17.480" Score="6" Body="&lt;p&gt;The CPU core is only one of eight parts of the chip. It has two vector units, an image processor, DMA controller and various other components. Together they form the Emotion Engine, which I recall at the time being marketed as bringing procedural generation technology to games to make them more realistic and varied.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-09-03T16:15:17.480" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7466" PostTypeId="1" AcceptedAnswerId="7473" CreationDate="2018-09-03T16:20:43.143" Score="21" ViewCount="5099" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Apollo_Guidance_Computer&quot; rel=&quot;noreferrer&quot;&gt;Apollo Guidance Computer&lt;/a&gt; was used to control the command/service module and lunar module on the missions to the moon.  (Definitely a retrocomputer!)  As noted in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2869/10260&quot;&gt;this answer&lt;/a&gt;, programs were written in assembly language.  There are several emulators available today, including one which can be run in a web browser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though the AGC was invented before the C programming language, &lt;em&gt;is a C compiler possible for this architecture?&lt;/em&gt;  If not, why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the purposes of this question, a satisfactory compiler would support &lt;s&gt;all of the C operators (including arithmetic, boolean, structure, and pointer)&lt;/s&gt; the original purpose of the AGC: notably, &lt;strong&gt;real-time signal processing and control&lt;/strong&gt;.  It does not have to be a lunar mission; the AGC was also used in a Navy rescue submarine and in the first airplane with computer fly-by-wire control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Less important but nice to have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Originally I included structure and pointer operations as a requirement.  However, arrays with indices would probably suffice.&lt;/li&gt;&#xA;&lt;li&gt;Ability to act as a general-purpose platform.&lt;/li&gt;&#xA;&lt;li&gt;Compliance to one or more standards (including but not limited to K&amp;amp;R, ANSI, and Embedded C).&lt;/li&gt;&#xA;&lt;li&gt;Floating point.  The original software used fixed-point numbers, with subroutines for subtraction, multiplication, and division.  Such numbers can be declared with Embedded C's &lt;code&gt;fixed&lt;/code&gt; type.  We'll call that good enough, even if it is possible to implement IEEE floating point.&lt;/li&gt;&#xA;&lt;li&gt;Standard libraries or system calls (i.e. stdio should not be a concern).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The compiler would be hosted on another system, not on the AGC itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope these clarifications help!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Photograph of &lt;a href=&quot;https://en.wikipedia.org/wiki/Margaret_Hamilton_(scientist)&quot; rel=&quot;noreferrer&quot;&gt;Apollo Director of Software Engineering Margaret Hamilton&lt;/a&gt;, next to the source code of her team)&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/DL3vT.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DL3vT.jpg&quot; alt=&quot;Margaret Hamilton&quot;&gt;&lt;/a&gt;  &lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2019-08-27T18:36:23.837" LastActivityDate="2019-08-27T18:36:23.837" Title="Would a C compiler for the Apollo Guidance Computer be plausible?" Tags="&lt;compilers&gt;&lt;apollo-guidance-computer&gt;" AnswerCount="4" CommentCount="13" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7467" PostTypeId="2" ParentId="7466" CreationDate="2018-09-03T18:26:58.733" Score="21" Body="&lt;p&gt;A full conforming compiler would be impractical, but it would probably be possible to write a compiler for a subset of the language which a couple of features removed:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;While it would be possible for a compiler to emulate recursion, code that needs to support re-entrancy would likely be much less efficient that code which doesn't.  Given that the Standard imposes no requirement that compilers support recursion &lt;em&gt;usefully&lt;/em&gt; (there's no guarantee that it be possible to nest any particular function more than one deep without bombing the stack) simply refusing to support recursion would seem more practical than generating re-entrant code for functions, and more &quot;honest&quot; than accepting such code but behaving in goofy fashion if functions are invoked recursively.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Standard would require that an implementation support floating-point math on values with a mantissa of greater than 32 bits.  Limiting floating-point computations to a 32-bit or even 16-bit mantissa would allow them to be handled with smaller and faster code than would be possible with a standard-conforming &quot;double&quot;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Usable C compilers exist for microprocessors whose architecture is even less &quot;C-friendly&quot; such as the CDP1802 (interesting chip, but the code to accomplish something like &quot;ptr[index] = 1234;&quot; would take 21 instructions) so the Apollo computer, which has an INDEX instruction, doesn't look too bad by comparison, at least if code doesn't need to support re-entrant functions.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-09-03T18:26:58.733" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="7468" PostTypeId="2" ParentId="7466" CreationDate="2018-09-04T00:08:13.283" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Even though the AGC was invented before the C programming language, is a C compiler possible for this architecture?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To begin with it depends on the value of &lt;strong&gt;for&lt;/strong&gt; :))&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If the question is about that a compiler can be writen (on some computer) to produce code for the AGS (aka a crosscompiler), the &lt;strong&gt;answer is a clear Yes&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it asks for a compiler running on the AGS it gets harder. Not so much for having a compiler in it's 30 kWords of program ROM, but for &lt;em&gt;not so theoretical&lt;/em&gt; a way of inputing a source to be compiled. Here I would go for a theoretical yes, but, by all love for low level interfaces, in praxis &lt;strong&gt;the answer is No&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For the purposes of this question, a satisfactory compiler would support all of the C operators (including arithmetic, boolean, structure, and pointer). It would not need to support all of the standard libraries or system calls (i.e. stdio should not be a concern).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;Satisfactory&quot;&lt;/em&gt; is a nice word - just not very clear. Is it satisfactionary that it for example the only data type available is a 15 bit word, or is floating point mandatory? Does it only need to follow basic K&amp;amp;R, or is C99 (or C11) a goal?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The compiler would be hosted on another system, not on the AGC itself.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sounds good. So the answer is a clear &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to do a C compiler (even on contemporary computer to the AGC) following K&amp;amp;R, even including FP, whose output can be loaded (well, wired) into the AGC. For doing FP it might have to carry a considerable large runtime (library), so C without FP and only a 15 bit integer datatype might be the prefered solution to keep as much as possible ROM for useful code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;And then there is&lt;/strong&gt; the question asked in the title (emphasis by me) which somewhat got lost in the question text:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Would a C compiler for the Apollo Guidance Computer be &lt;em&gt;&lt;strong&gt;plausible?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here the answer is a clear &lt;strong&gt;No&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result of a C compiler will alway be inferiour to what an Assembler programmer can squeeze out. Considering the small code space (36 kWords) and complex job to handle, Assembly might have been the only way to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If at all, a language more suited to system programming than C would have been used - most likely something similar to &lt;a href=&quot;https://en.wikipedia.org/wiki/MOL-360&quot; rel=&quot;noreferrer&quot;&gt;MOL-360&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/PL/I&quot; rel=&quot;noreferrer&quot;&gt;PL/1&lt;/a&gt; (or rather its specialized cousin &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PL/S&quot; rel=&quot;noreferrer&quot;&gt;PL/S&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-04T01:45:49.773" LastActivityDate="2018-09-04T01:45:49.773" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="7469" PostTypeId="2" ParentId="7462" CreationDate="2018-09-04T14:34:12.137" Score="8" Body="&lt;p&gt;There's a &lt;a href=&quot;http://docencia.ac.upc.edu/ETSETB/SEGPAR/microprocessors/emotionengine%20(mpr).pdf&quot; rel=&quot;noreferrer&quot;&gt;pretty nifty article&lt;/a&gt; linked from the Wikipedia article on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Emotion_Engine&quot; rel=&quot;noreferrer&quot;&gt;Emotion Engine&lt;/a&gt; that discusses the details in the &quot;Emotion Is the Difference&quot; section on page 2:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But much of the EE’s compute power will go toward an even loftier&#xA;  goal: behavioral synthesis, or, as SCE calls it, &lt;strong&gt;emotion&#xA;  synthesis&lt;/strong&gt;. This technology gives game programmers the ability to&#xA;  accurately model all manner of physical systems, allowing realistic&#xA;  behavior of characters and objects. For example, the system will&#xA;  &lt;strong&gt;enable lifelike facial expressions&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's another description in &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.143.8576&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;noreferrer&quot;&gt;this paper&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Emotion synthesis means the real-time synthesis of a computer graphics&#xA;  animation scene that projects a great deal of atmosphere.&lt;/strong&gt; For example,&#xA;  when a female character walks into a video game scene, her motion must&#xA;  be determined by solving physical equations in response to interactive&#xA;  events instead of replaying prerecorded data. Moreover, differential&#xA;  equations with a large number of variables must be used to describe,&#xA;  for example, the waving motions of her hair in a breeze. For&#xA;  authenticity in emotion synthesis, the CPU must execute these&#xA;  calculations in real time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As far as I know there is no actual behavioral synthesis or emotion synthesis technology used in any PS2 games. It's a generic way of saying &quot;We have a lot of computing power so games will be more realistic&quot;. But for marketing purposes it makes a snazzy name that implies there's some special functionality to the EE that competitors don't have. &lt;/p&gt;&#xA;" OwnerUserId="8734" LastActivityDate="2018-09-04T14:34:12.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7471" PostTypeId="2" ParentId="1985" CreationDate="2018-09-04T15:04:20.983" Score="10" Body="&lt;p&gt;I know this answer isn't what you are waiting for, but I'm hoping it will help in some way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Text adventures, as beautiful and complex as they are, were not difficult to code. There were many non-commercial games that did the rounds, even prior to the internet. I was passed several un-released text adventures on cassette for early micros I owned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several of the more successful commercial text adventures were developed using an &quot;engine&quot; that was then used as the basis of multiple games. Some of these engines were shared openly for other writers to use, and for those who couldn't code at all, there were even various &quot;text adventure creator&quot; programs available on several formats. All of this meant there were lots of text adventure games out there that were non-commercial, so it isn't surprising that you are struggling to find this particular one you played.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather than search for the title (which you are not sure of anyway) or details you remember about the game like the werewolf or the haunted mansion (which are pretty generic and probably in a lot of early games as well as other media) you might have more luck researching software houses or indie programmers of text adventures and see if you can look through lists of their releases. Something might jump out at you. A couple that spring to mind are &lt;a href=&quot;https://en.wikipedia.org/wiki/Scott_Adams_(game_designer)&quot; rel=&quot;noreferrer&quot;&gt;Scott Adams&lt;/a&gt; (who wrote a game called &lt;em&gt;Mystery Fun House&lt;/em&gt; - that isn't it, is it? Sorry I never played it) and probably less likely &lt;a href=&quot;https://en.wikipedia.org/wiki/Brian_Howarth&quot; rel=&quot;noreferrer&quot;&gt;Brian Howarth&lt;/a&gt; who was more known for titles on the ZX Spectrum, not really PC. I played nearly all his games and was a bit star struck when I later met his son through my work!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possibly obvious thing I want to point out is that &quot;HAUNT.bat&quot; was, as you mention, a batch file that launched the game. Is it possible that &quot;Haunt&quot; was &lt;em&gt;not&lt;/em&gt; the name, or part of the name of this game? I say this because playing games on DOS and Windows 3.11 was a bit of a nightmare. You had to configure your hardware correctly, and this sometimes varied from game to game.I had several &quot;startup floppies&quot; that configured my memory and other hardware differently for different applications and games so they would perform optimally. My point is that HAUNT.bat may not have been the out-of-the-box launch command for this game. Someone may have created it to run a series of other system commands in order for the game to launch. You may be hung up on the details you remember and they actually be hindering you from finding it. &quot;HAUNT.bat&quot; could actually be a red herring if that wasn't a batch file created by the software install itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, many text adventures were written in languages other than English, and then translated. Even if you are right about the title, the name you know it by may not be the name it was originally released under! Again, browsing lists of titles may help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps in some way and you find your game!&lt;/p&gt;&#xA;" OwnerUserId="10492" LastEditorUserId="10492" LastEditDate="2018-09-05T09:10:50.040" LastActivityDate="2018-09-05T09:10:50.040" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7472" PostTypeId="2" ParentId="7459" CreationDate="2018-09-04T19:29:20.233" Score="0" Body="&lt;p&gt;The SNES architecture appears to have been developed roughly 8 years after the Amiga.  If Atari hadn't instigated the collapse of the video game industry around 1983, the Amiga would have been that 16-bit game machine (and more).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like Nintendo copied the idea of a bitplane architecture similar to the Amiga for the same reasons, to simplify the design work required for the multi-resolution data path of the chips/ASICs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of complex multiplexing into and out of all the pixel shift registers, only one block of memory-to-pixel shift logic needs to be designed for 1-bit of a pixel, and then these blocks can be replicated for as many bits per pixel as the design memory budget allows.  Thus each bitplane ends up in a separate memory block to allow the logic design of each block to be well separated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference today is (1) modern ASIC design tools allows far more complex logic to be designed, simulated, and have layout done and verified, and (2) the advance of Moore's laws allow a boatload more pixel memory to be put in affordable systems, which means almost nobody cares about low-res graphics.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2018-09-04T19:29:20.233" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7473" PostTypeId="2" ParentId="7466" CreationDate="2018-09-05T00:31:02.983" Score="6" Body="&lt;p&gt;One of the biggest problems with C for this architecture is the fragmented address space.&amp;nbsp; You would almost want some extensions for C that direct the compiler where to locate (global) data so that the various data would be accessible in an easy and known way from the code that uses it.&amp;nbsp; Somewhat reminiscent of FORTRAN Common Blocks...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider for a minute the 8086 extended, 20-bit addressing.&amp;nbsp; Compilers for that architecture had to choose a memory layout model for program execution. &amp;nbsp; There are basically three options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Stick with 16-bit pointers &amp;#8212; and forgo the larger memory for the program (i.e. everything fits in 64k), leaving that additional address space for running multiple programs (rather than for running larger programs).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use 32-bit pointers to store 20-bit addresses &amp;#8212; that means that every pointer dereference or array indexing operation required multiple instructions, involving swapping of segment registers and the like.&amp;nbsp; So, a simple &lt;code&gt;*p++ = *q++;&lt;/code&gt; becomes a dozen or more instructions, whereas it is ideally a single instruction.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use 16-bit spaces for each of code, global data, stack, and heap.&amp;nbsp; Thus programs of 256k are possible with 64k of each of the above.&amp;nbsp; This was a reasonable option for Pascal due to being a less pointer-oriented (by having reference parameters, for example), but not as much for C, which is much more pointer happy (e.g. using pointers instead of reference parameters).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Architectures with paged memory banks using segment-specifying registers are surprisingly easy to program by human in assembly but hard to work by a compiler.&amp;nbsp; These architectures typically use a common base page, perfect for some of the globals, but easy to overflow if you put all the globals there.&amp;nbsp; So, again, you would almost want some location directives in C to inform the compiler that these globals should go in the coveted base page, vs. elsewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently the AGC has two levels of memory segments, the second due to the expansion by the Block II (via the SBank/SuperBank bit).&amp;nbsp; These things tend to wreak havoc with models of code generation and C's expectation that a universal full-address-space-sized pointer can refer to anything: code, data, stack, heap...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's not to say it couldn't be done, but you'd want a number of language extensions, or else you'd find it extremely difficult to reach the efficiency of hand-written assembly.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastActivityDate="2018-09-05T00:31:02.983" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7474" PostTypeId="1" AcceptedAnswerId="7475" CreationDate="2018-09-05T02:11:40.767" Score="2" ViewCount="1368" Body="&lt;p&gt;From &lt;a href=&quot;http://www.6502.org/tutorials/65c816opcodes.html#6.1.1.2&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.6502.org/tutorials/65c816opcodes.html#6.1.1.2&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the CPX instruction:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;E0 3-x 3-x         imm       x.....xx . CPX #$54&#xA;E4 2   4-x+w       dir       x.....xx . CPX $10&#xA;EC 3   5-x         abs       x.....xx . CPX $9876&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What is the difference between these in terms of the addressing modes specified? At first glance I thought this was obvious to me, but then I realized I actually don't know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;imm&lt;/strong&gt; means immediate. If x (native mode) is set, then the length of the total instruction (including  operand) is 2, otherwise it is 3?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;dir&lt;/strong&gt; means direct? It always takes a one byte operand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;abs&lt;/strong&gt; means absolute? It always takes a two byte operand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'#' means the operand is immediate data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'$' specifies hexadecimal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what is the difference between them? My confusion is e.g. what the difference between E0 CPX with the native mode set and E4 CPX? Don't they both simply take a single byte operand? Same with E0 CPX and EC CPX, if the native mode flag is not set, then what is the difference?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do any of these work with relative addressing, e.g. comparing the value at an offset from the program counter? Are any of them indirect, as in holding a &quot;pointer&quot; value which is dereferenced? Is the seemingly duplicated behavior due to backwards compatibility with the 6502?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume this will become very clear to me as long as I can get a clear explanation of what &quot;imm&quot;, &quot;dir&quot;, and &quot;abs&quot; actually mean and how they are different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This section of the document talks about addressing modes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.6502.org/tutorials/65c816opcodes.html#5&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.6502.org/tutorials/65c816opcodes.html#5&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it doesn't make it any more clear to me, the section mostly deals with how addressing modes translate into page and bank boundary wrapping, not so much as explaining the basic differences between the various modes.&lt;/p&gt;&#xA;" OwnerUserId="7413" LastActivityDate="2018-12-17T13:06:48.840" Title="What do the addressing modes imm, dir, and abs mean for the 65c816?" Tags="&lt;assembly&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7475" PostTypeId="2" ParentId="7474" CreationDate="2018-09-05T04:40:05.717" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;imm means immediate. If x (native mode) is set, then the length of the total instruction (including operand) is 2, otherwise it is 3?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's right. That byte or those two bytes are the value you want to compare X with. It's either one or two bytes, because X is either one or two bytes, depending on whether native mode is set or not.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;dir means direct? It always takes a one byte operand.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That byte is the offset from the direct page. That means, the byte is added to the &lt;code&gt;DP&lt;/code&gt; register, and the result forms an address which points to the value you want to use.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;abs means absolute? It always takes a two byte operand.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Those two bytes form the address to the value you want to use. Can be anywhere in whichever bank of memory &lt;code&gt;b&lt;/code&gt; points to.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-12-17T13:06:48.840" LastActivityDate="2018-12-17T13:06:48.840" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7476" PostTypeId="2" ParentId="6281" CreationDate="2018-09-05T10:08:27.217" Score="1" Body="&lt;p&gt;I can't tell you which cassette-based micro was cited as an example in your magazine, but it could well have been the MZ-700. It was marketed in the UK as a &quot;clean machine&quot; and mainly targeted programmers. My enduring memory of buying software for this micro as an 8 year old is going into shops and asking &quot;got any MZ-700 games?&quot; and being presented with a small box from under the counter which contained mainly programming languages on cassette - Forth, Fortran, or some other BASIC variant. A quick bit of web research reveals that apparently both the Sharp MZ-800 and MZ-700 came with a &quot;PERSONAL CP/M 2.2&quot;, and while I believe a floppy drive could be fitted to the 800, the 700 expansions only allowed for the built-in cassette drive (which made your micro an MZ-701) and the plotter printer (with both installed you had an MZ-702).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not an authority on CP/M generally and have no experience with it but I'm sure you're aware it was &lt;a href=&quot;http://www.crashonline.org.uk/53/cpm.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;officially released on floppy for the Spectrum +3&lt;/a&gt;. And I'm not completely sure what you mean about &quot;mapping RAM into ROM&quot; but &lt;em&gt;all&lt;/em&gt; Spectrum 128K variants used a &quot;paging&quot; method of accessing the additional RAM over the original 48K Spectrum design. I imagine this led to better backwards compatibility with the 16/48K software catalogue. According the the linked article about the official +3 release, the OS took up about 67K and users were able to access the remaining 61K of fast memory without the need for &quot;paging&quot;. If a cassette-based CP/M solution was available as you are asking, it would have to have reworked the memory usage in a similar way to be able to reside in the 67K required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps this is somewhat of a partial answer, but I hope it helps.&lt;/p&gt;&#xA;" OwnerUserId="10492" LastEditorUserId="10492" LastEditDate="2018-09-05T10:30:24.627" LastActivityDate="2018-09-05T10:30:24.627" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7477" PostTypeId="1" AcceptedAnswerId="7479" CreationDate="2018-09-05T14:20:43.960" Score="46" ViewCount="11823" Body="&lt;p&gt;In many early computers, many of the chips were in sockets rather than soldered directly to boards, e.g. this series of pictures of the Tandy CoCo 1 has a note to the effect that all the chips are socketed: &lt;a href=&quot;http://tech.markoverholser.com/?q=node/50&quot; rel=&quot;noreferrer&quot;&gt;http://tech.markoverholser.com/?q=node/50&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can understand doing this with RAM chips, because it's often feasible and desirable to upgrade these; I think the CoCo 1 did often receive RAM upgrades.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what was the purpose of doing it with all the others? I would expect soldering all the other chips directly to the board, would both save money and improve reliability by eliminating one thing that can go wrong.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="56" LastEditDate="2018-09-05T14:53:13.613" LastActivityDate="2018-09-10T13:33:06.587" Title="Why were chips socketed in early computers?" Tags="&lt;hardware&gt;&lt;chip&gt;" AnswerCount="8" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7478" PostTypeId="2" ParentId="7477" CreationDate="2018-09-05T14:33:54.640" Score="9" Body="&lt;p&gt;I suspect this is down to quality engineering (QE) — in the early micro days many chips were susceptible to failures (during manufacturing) but wouldn’t be as well-tested as they are now, so the chances of getting bad batches were higher. If you finish assembling a micro and discover that one of its chips is bad, it’s easier to fix if it’s socketed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another aspect is that it’s easier to solder a socket than a component, or rather it’s harder to damage a socket when soldering it than it is to damage a component. That might not be relevant when manufacturing at scale though (I’m not sure when wave soldering became common).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="357" LastEditDate="2018-09-06T13:26:01.610" LastActivityDate="2018-09-06T13:26:01.610" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7479" PostTypeId="2" ParentId="7477" CreationDate="2018-09-05T16:57:08.063" Score="65" Body="&lt;p&gt;Caveat: It might be useful to distinguish between high volume low cost computers (like the mentioned CoCo) and low volume high cost machines (like Intel boards - or workstations). I assume the question to be rather about these high volume low cost machines.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why were chips socketed in early computers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are several reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Most important: Chips where not fitted by robots back then, but by hand. Thus any chip fitted wrong and soldered would make the whole board unusable (*1), while with sockets it's a simple swap to make it work.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Second, sockets can endure more abuse (in this case heat) than chips, thus having them inserted later increases acceptable tolerances during manufacturing and leads to a lower rate of failure (*2)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next, fitting sockets instead of chips decouples production. Boards can be prepared, ready made and stocked until the time there are orders to fill.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As a result investment can be reduced by ordering the most expensive single part(s) -- the chips -- as late as possible (*3).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Similarly, this is helpful to keep board production running even when some chips are not available for some time (*4).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I would expect soldering all the other chips directly to the board, would both save money and improve reliability by eliminating one thing that can go wrong.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes.  It does, as soon as there are automated placement machines and -- more importantly -- an order of sufficient size to keep capital cost in check.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I can understand doing this with RAM chips, because it's often feasible and desirable to upgrade these; I think the CoCo 1 did often receive RAM upgrades.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, as that's something users may want, not necessarily the manufacturer.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As said before, this is focused on high volume/low cost machines. While all of the reasons are as well valid for the high performance/high cost boards, labor and stock cost are somewhat less important due to labor which is already rather intensive for small production runs, and stock cost aren't that big in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, the repair aspect wasn't any consideration for cheap, mass produced machines. Commodores share of a C64 was less than 150 USD during most of the time (in the late 1980s even less than 50 USD). There is not enough money to be made in repairing defective units beyond a bare function check. Even more so with the lower priced CoCo. So serviceability wasn't a major concern.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Yes, they could have had people assigned to desolder the chip(s), clean the through-holes and have new ones fitted and soldered. Except, that would have cost possibly more than the wholesale price of that (cheap) computer would have been.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Wave soldering is a rather secure process and around since at least 1947 (oldest usage I know). It does require to have the whole board plus all of the placed components preheated to 130-160 degree Celsius (depending on the process) for several minutes. In combination with (somewhat) early chips, this may cause failure within the chips. So using sockets instead during soldering was a great idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - One reason why Commodore continued to use sockets for the more expensive chips even after using automated placement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Commodore is well know to have run into these conditions several time - for example with some batches of C16.      &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-09-10T13:33:06.587" LastActivityDate="2018-09-10T13:33:06.587" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7480" PostTypeId="2" ParentId="7477" CreationDate="2018-09-05T18:34:14.217" Score="8" Body="&lt;p&gt;A long time ago you could solder an entire Acorn Atom yourself. A hobbyist who was unsure about his soldering skills would use sockets, thinking that he was playing it safe. I helped diagnose a non-working board where the pin for the CPU clock made no contact with the socket.. The signal on the bottom of the board was good, it took us hours to find this. The customer had used cheap sockets with contacts only on the inside, on all ICs. Bending all pins inward before pushing the ICs in the sockets fixed that. You could even buy special DIP IC inserters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tin plated ICs with gold plated sockets (Garry/Augat) don't go well together, the gold dissolves in the tin and ultimately all contact is lost. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The added height due to the sockets increases the inductance of the tracks a lot, leading to bad HF behavior and bad EMC. This was OK when computers were slower and there were no FCC regulations, but not now. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All reasons why the CE industry uses no IC sockets anymore, except maybe for EPROMs which must be removed for erasing and programming. And for CPUs where the customer makes the choice, but then the socket is an expensive one. &lt;/p&gt;&#xA;" OwnerUserId="7685" LastActivityDate="2018-09-05T18:34:14.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7481" PostTypeId="2" ParentId="7477" CreationDate="2018-09-05T19:51:06.900" Score="19" Body="&lt;p&gt;One reason to use sockets at the beginning of a production cycle is to make it easier on the service technicians.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At one company making computer terminals, the techs would identify a bad chip and then give the board to the rework person to replace.  This destroyed the presumed-bad chip and risked damage to the board.  Before the techs were familiar with the board signals and failure modes, the false-bad rate would be pretty high.  With experience, the false-bad rate got really low, and all boards were built without sockets on all parts except the ROMs, which could be upgraded in the field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When times got busy and the bad boards piled up (the dog pile), some of us from engineering would volunteer to go to the factory and help fix boards.  I was really good at debugging design issues, but the techs were much faster than I was at debugging production problems.  I learned a lot from working with them.&lt;/p&gt;&#xA;" OwnerUserId="10500" LastActivityDate="2018-09-05T19:51:06.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7482" PostTypeId="1" AcceptedAnswerId="7490" CreationDate="2018-09-06T00:16:24.617" Score="3" ViewCount="361" Body="&lt;p&gt;I have a serial terminal that is not working. It's a VT525 using an external monitor (of course) and PS/2 PC keyboard. The self-test passes fine; setup works fine. I can echo characters when local echo is on. However I don't believe it is actually transmitting characters out of the serial port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started trying to get it working on a raspberry pi with a USA-19HS USB serial port according to several guides. Though the USB port was correctly recognised as ttyUSB0 the terminal does nothing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I tried the most basic test, loopback. Terminal is reset to factory settings and flow control (both hardware and software) is off. If you then use a loopback plug in the serial connector, simply bridging pins 2 and 3 (these are TD and RD on both DB25 and DB9, only reversed), shouldn't the terminal display any typed character just as if it had been sent and then echoed back bye a remote system? If you do this with local echo ON you should get duplicates of each character?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Terminal so far shows nothing when local echo is OFF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Really looking forward to playing Nethack again with genuine scanlines...&lt;/p&gt;&#xA;" OwnerUserId="6580" LastActivityDate="2018-09-06T10:59:57.863" Title="Basic test for a RS232 serial terminal" Tags="&lt;terminal&gt;&lt;serial&gt;&lt;rs232&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7483" PostTypeId="2" ParentId="7477" CreationDate="2018-09-06T00:30:36.557" Score="6" Body="&lt;p&gt;I am not to what extent this was a manufacturer consideration, however it made the machines much easier/cheaper to service. This meant customers would be more willing to &quot;invest&quot; what might be $1-2000 in today's money since they could continue using it for a longer period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As testament to this, having never touched an 8-bit machine before, I recently got my hands on two dead C64s and within twenty minutes I got one working by swapping chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Certainly in other manufacturing sectors, serviceability is a consideration so I find it likely the manufacturers did consider this.&lt;/p&gt;&#xA;" OwnerUserId="647" LastActivityDate="2018-09-06T00:30:36.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7484" PostTypeId="1" AcceptedAnswerId="7491" CreationDate="2018-09-06T02:04:40.813" Score="8" ViewCount="693" Body="&lt;p&gt;Many, if not all of the Performa and Quadra systems seemed to have two names. For example the LC 475 was also known as the Quadra 605.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2019-01-09T09:10:33.280" Title="Why did some Mac computers have two names?" Tags="&lt;apple-macintosh&gt;&lt;apple&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7485" PostTypeId="2" ParentId="7477" CreationDate="2018-09-06T02:09:38.847" Score="11" Body="&lt;p&gt;There was a time when many personal computer manufacturers did almost no incoming QA on components.  Sockets allowed swapping out chips when the assembled computer didn’t run, e.g. didn’t pass initial power on testing or burn-in.  Simply swapping out certain chips by trial-and-error was a very common debugging technique to find the bad ones, much harder to do if the chips are all soldered down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some personal computer models would not run with all worst case timing spec parts.  Swapping some parts was likely to mix in some parts not as slow and allow the system to meet the timing necessary to run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Socketing is no longer done today, as chip yields are higher, more testing and incoming inspection is done, sophisticated CAE tools allow far more complete worst-case timing analysis before a product goes into production, and modern automatic test equipment allows automatic pinpointing of many common faults.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2018-09-06T02:20:20.817" LastActivityDate="2018-09-06T02:20:20.817" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7486" PostTypeId="2" ParentId="7437" CreationDate="2018-09-06T03:11:27.227" Score="1" Body="&lt;p&gt;A few home computers at that time could be expanded with a coprocessor, although this was usually for compatibility, not faster performances.  Microsoft released a Z-80 Softcard in 1980 for the 6502-based Apple II, which enabled it to run CP/M programs, and Acorn had an interface, called Tube, that could add a second processor to the BBC Micro (either a 3 MHz 6502, Z80 or 32016).  The Commodore 128 was an 8-bit computer that shipped with two CPUs, but that was in 1985, past the time period of your question.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastActivityDate="2018-09-06T03:11:27.227" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7487" PostTypeId="2" ParentId="7379" CreationDate="2018-09-06T03:44:36.510" Score="6" Body="&lt;p&gt;Having found more datasheets, I’m going to push back the date I originally gave. The first major upgrade to the 650x line, probably representing a process upgrade, was to increase the speed from &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6501-6505_mpu_preliminary_aug_1975.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1MHz in 1975&lt;/a&gt; to to 2MHz, &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6500_mpu_preliminary_may_1976.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;announced as “Preliminary” in May 1976.&lt;/a&gt;  MOS made available the 3MHz models of its line &lt;a href=&quot;http://www.6502.org/documents/datasheets/mos/mos_6500_mpu_mar_1980.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;no later than March 1980&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://plus4world.powweb.com/hardware/MOS_75018501&quot; rel=&quot;nofollow noreferrer&quot;&gt;This site claims that&lt;/a&gt;, in 1984, MOS was manufacturing the 7501 in “HMOS-I” (which would be 3.5µm) and the 8501 in “HMOS-II” (2µm), implying that MOS had gone at least two steps past 5µm by 1984.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, MOS built its &lt;a href=&quot;https://en.wikichip.org/wiki/8_%C2%B5m_lithography_process&quot; rel=&quot;nofollow noreferrer&quot;&gt;8µm fab in 1974&lt;/a&gt; and probably upgraded its CPU manufacturing from 8µm to 5µm in late 1976, which was &lt;a href=&quot;https://en.wikichip.org/wiki/5_%C2%B5m_lithography_process&quot; rel=&quot;nofollow noreferrer&quot;&gt;three years after HP and around the same time as Intel.&lt;/a&gt;  (Or perhaps there was another step along the way?) It apparently then upgraded to a HMOS-I process in 1980 and HMOS-2 in 1984, so approximately once every four years.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2018-09-06T20:44:25.087" LastActivityDate="2018-09-06T20:44:25.087" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7488" PostTypeId="2" ParentId="7482" CreationDate="2018-09-06T06:57:18.377" Score="1" Body="&lt;p&gt;Get hold of a logic analyzer, e.g. one of the many low-cost Chinese products &lt;a href=&quot;https://www.banggood.com/USB-24M-8CH-24MHz-8Channel-Logic-Analyzer-Latest-Support-1_1_30-p-74101.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;like this one&lt;/a&gt;.  These can be used with the open source software &lt;a href=&quot;https://sigrok.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sigrok&lt;/a&gt;, which is able to decode serial protocols and show what is and isn't working.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-09-06T06:57:18.377" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7489" PostTypeId="2" ParentId="7484" CreationDate="2018-09-06T07:09:40.550" Score="3" Body="&lt;p&gt;To quote &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Quadra_605&quot; rel=&quot;nofollow noreferrer&quot;&gt;the wiki&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The model names reflect a decision made at Apple in 1993 to follow an emerging industry trend of naming product families for their target customers -- Quadra for business, LC for education, and Performa for home.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7347" LastActivityDate="2018-09-06T07:09:40.550" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7490" PostTypeId="2" ParentId="7482" CreationDate="2018-09-06T10:59:57.863" Score="4" Body="&lt;p&gt;As you surmised, a local loopback is your best diagnostic - and as you have mentioned, it avoids any interoperability issues with newer devices' &quot;best effort&quot; at RS-232 communication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As also described though, to be sure you've got a good connection you also need to add hardware signals, which means looping back output signals into inputs. A complete local loopback plug needs the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      RS-232        |      DB-25     |     DE-9&#xA; TX &amp;lt;-&amp;gt; RX          |  2 &amp;lt;-&amp;gt; 3       | 3 &amp;lt;-&amp;gt; 2&#xA;RTS &amp;lt;-&amp;gt; CTS         |  4 &amp;lt;-&amp;gt; 5       | 7 &amp;lt;-&amp;gt; 8&#xA;DTR &amp;lt;-&amp;gt; DSR &amp;lt;-&amp;gt; DCD | 20 &amp;lt;-&amp;gt; 6 &amp;lt;-&amp;gt; 8 | 4 &amp;lt;-&amp;gt; 6 &amp;lt;-&amp;gt; 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can safely ignore &lt;code&gt;RI&lt;/code&gt; (&lt;code&gt;22&lt;/code&gt; | &lt;code&gt;9&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the above does not echo what you type (or give two copies of the character if &quot;local echo&quot; is on), then you know there's a problem with the RS-232 interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original RS-232 specification says that the valid voltage range of each signal is ± 3-25V (yes, 25V!), although most early interfaces used 12V. That means that you could probe each of the output pins for that voltage range, but testing the input pins is harder.&lt;/p&gt;&#xA;" OwnerUserId="1980" LastActivityDate="2018-09-06T10:59:57.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7491" PostTypeId="2" ParentId="7484" CreationDate="2018-09-06T11:38:53.763" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Many, if not all of the Performa and Quadra systems seemed to have two names.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In the early 1990 Apple (re)named their machines as different lines, according to capabilities, to target different markets.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Macintosh LC&lt;/strong&gt; (for low cost *1). Introduced in 1990 as new low end Mac developed (*2) mainly for the education market, with a special focus to replace Apple II installations (*3,*4).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next (1991) the &lt;strong&gt;Quadra&lt;/strong&gt; line was introduced. All new, 68040 based machines marking the upper end and replacing the Macintosh II as the professional line&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;1992 the &lt;strong&gt;Centris&lt;/strong&gt; models were added. Meant to be the, well, center offering from Apple.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Starting in ~1993 the &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Performa&quot; rel=&quot;nofollow noreferrer&quot;&gt;Performa&lt;/a&gt;&lt;/strong&gt; line was added to cover the lower end / consumer market (the educational market was covered with the LC). Also, for sales through many general outlets (department stores and alike), it should avoid finding the same machine at lower prices than with a certified Apple dealership (where Centris and Quadra were sold).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And finally, mostly unknown, there was the &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Workgroup_Server&quot; rel=&quot;nofollow noreferrer&quot;&gt;Work Group Server&lt;/a&gt;&lt;/strong&gt; line. Basically re-badged Centris/Quadra models with larger/multiple hard drives and one or more network cards.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This scheme was kept even until after introduction of the PowerPC based Macintosh. At that time the 68k Centris models were phased out or better sold as Quadras.  Except for a few machines all new ones were named &lt;strong&gt;Power Macintosh&lt;/strong&gt;. At the time the naming scheme changed for &lt;strong&gt;Power Mac&lt;/strong&gt;, all of the old names were phased out.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Sidenote:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While above naming system was purely marketing related, the numbers were meant to give a rough classification - at least in the beginning, with&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2xx denoting the most basic (68020) based all in one machines&lt;/li&gt;&#xA;&lt;li&gt;4xx being the pizza box compact machines&lt;/li&gt;&#xA;&lt;li&gt;6xx denoting 'real' desktop&lt;/li&gt;&#xA;&lt;li&gt;7/8/9xx for tower/Workstation machines.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Later the 5xx got inserted to denote more powerful all in one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This numbering was kept (mostly) constant across all marketing lines and usually an indicator for the type of machine and its relative power. Between LC and Performa the numbers were often the same. The system even carried (mostly) over into the 4 digit power PC names. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For example the LC 475 was also known as the Quadra 605.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This isn't completely true. While they were technically close and had compatible boards, they were different machines. The LC475 had the tilted pizza box in the intermediate design between snow white (as LC/LCII had) and what the Quadra would be, while the Quadra 605 finished the transition with the new flat case with four wide feet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Designation wise there were four (or 9) siblings&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Quadra_605#Models&quot; rel=&quot;nofollow noreferrer&quot;&gt;LC 475&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Performa 475/6&lt;/li&gt;&#xA;&lt;li&gt;Quadra 605&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_LC_500_series#LC_575&quot; rel=&quot;nofollow noreferrer&quot;&gt;LC 575&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Performa 575/6/7/8&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This variety makes it one of the largest (the other being the 630-alikes (*5)) family of Macs - and eventually the best known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference (beside the price) was due to the case used and features included. The LCs were usually the very basic configuration, but always sold in a bundle with a colour screen (*6), while the Perfomas came without, but with &lt;em&gt;way&lt;/em&gt; larger disks and memory. The Quadras were usually available in similar configurations to the Performa, but with more options available and most importantly, only sold through authorized dealers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Effectively Sculley just adapted the same strategy car makers use to tap different markets. The same engine and undercarriage is complemented by different bodies to make different cars. Much like VW built the Jetta, Scirocco, Corrado, Caddy, New Beetle and Touran around the VW Golf 'core' with different bodies and configurations, Apple built several differently-housed and configured models under different names based on the same core components. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is, if I may add, a great strategy - at least as long there is something like a brand awareness and not just a huge sea of compatible parts like on the PC side.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Code name Elsie&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - AFAIR IIsi and Mac Classic are part of this line&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The original design asked for a machine much like the IIc, with an integrated keyboard, so all, except the monitor, would be in one case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - This includes the &lt;a href=&quot;http://www.vectronicsappleworld.com/archives/vintage/0002.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIe card&lt;/a&gt; for the LC PDS, so all/most Apple IIe software could still be used, even the 5.25 Drive could be attached (Which only works if the LC has 12 MiB RAM maximum - for more 32 Bit addressing must be enabled, making it incompatible with the IIe card). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Like Performa 630/1/5/6/7/8/DOS/CD, LC630/DOS, Quadra 630, LC580, Performa 580/8/CD, ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like with the 475 family there &lt;strong&gt;are&lt;/strong&gt; different board versions - like the double slot Performa 630CD DOS which is eventually the best 68k Mac board to have - up to 136 MiB of RAM and tweekable to 50 MHz. A true rocket - and I still have no idea how to fill so much RAM on an 68k Mac :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, there are versions of the 475 board that do accept some 128 MiB SIMMs, as well as being tweeked for 40 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Until the LC575 was introduced at least.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2019-01-09T09:10:33.280" LastActivityDate="2019-01-09T09:10:33.280" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7492" PostTypeId="1" CreationDate="2018-09-06T16:59:14.420" Score="16" ViewCount="546" Body="&lt;p&gt;I noticed that on the &lt;a href=&quot;http://www.visual6502.org/images/pages/Atari_10444D_TIA.html&quot; rel=&quot;noreferrer&quot;&gt;die shot of the Atari TIA chip&lt;/a&gt;, at the top you can see an Atari logo and at the bottom there are two initials: JM + AH. I assume that JM means &lt;a href=&quot;https://en.wikipedia.org/wiki/Jay_Miner&quot; rel=&quot;noreferrer&quot;&gt;Jay Miner&lt;/a&gt;, but who is the AH? I would have thought &lt;a href=&quot;https://en.wikipedia.org/wiki/Joseph_C._Decuir&quot; rel=&quot;noreferrer&quot;&gt;Joe Decuir&lt;/a&gt; would have been the other, but I guess I'm wrong :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Updated 2018-09-07 from 'RH' to 'AH' since it appears to be an 'A' rather than an 'R' if we go by the 'ATARI' label on the top of the die shot for font reference)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Update 2018-09-14: I received an email from Joe Decuir via Kevin Savetz that states:&#xA;“I think AH are the initials of the chip layout designer.&#xA;I wish I remembered his name.&#xA;Joe”.. so if someone can figure out the layout designers name, that would answer the question?)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2018-09-15T00:19:03.690" LastActivityDate="2019-09-22T02:34:36.723" Title="Who or what is the 'AH' credited on the die of the Atari TIA chip next to Jay Miner?" Tags="&lt;atari-2600&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7493" PostTypeId="2" ParentId="7477" CreationDate="2018-09-06T18:30:56.060" Score="-3" Body="&lt;p&gt;It's really quite simple; early computer MBs were designed to accept a number of different processors.  One could easily 'upgrade' their processor by simply swapping in a more powerful one.  &lt;/p&gt;&#xA;" OwnerUserId="10512" LastActivityDate="2018-09-06T18:30:56.060" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7494" PostTypeId="1" AcceptedAnswerId="7496" CreationDate="2018-09-06T19:01:51.710" Score="5" ViewCount="979" Body="&lt;p&gt;From what I understand, the original Apple Language Card was basically a RAM expansion card for the Apple II and Apple II+.  This expansion increased the on-board RAM by 16K.  Normally, if you needed this card, you would probably have the maximum of 48K on-bard.  Therefore, adding this card would bump you up to 64K.  Not only did the language card provide more RAM, I believe they also added more ROM such as Pascal compiler, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I understand it, the card allowed the user to switch between the normal high-ROM of 16K (top ROM of the 64K address space) to the 16K RAM the card added by using Apple's infamous &quot;soft switches&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the Apple IIe came out, it had 64K by default.  Plus, many models shipped with another 64K expansion card increasing the RAM to 128K.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, if I have an Apple IIe with 128K of RAM, and I install one of these language cards, will I see any benefit at all?  Meaning, will I have 144K of RAM?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, am I missing something?  I can't remember but maybe the language card only works in slot 0 and the Apple IIe used slot 0 for its 64K expansion.  Making both cards impossible to use at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for any information.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2018-09-07T04:02:19.770" Title="Is there any benefit of using an Apple Language Card in an Apple IIe?" Tags="&lt;apple-ii&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7495" PostTypeId="2" ParentId="7494" CreationDate="2018-09-06T20:14:29.850" Score="3" Body="&lt;p&gt;Well it's unlikely to work as the soft switches will be read by the builtin //e hardware (also the jumper to the 16K DRAM socket to steal the RAS/CAS will be an issue).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the FP/INT basic ROM card does work (a small patch to DOS is required according to Jim Sather in understanding the Apple //e).&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2018-09-06T20:23:03.173" LastActivityDate="2018-09-06T20:23:03.173" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7496" PostTypeId="2" ParentId="7494" CreationDate="2018-09-06T20:28:19.253" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Not only did the language card provide more RAM, I believe they also added more ROM such as Pascal compiler, etc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it just added 16 KiB of RAM. But this RAM could be mapped into the address range occupied by the ROM. Thus it allowed to load a different 'ROM'.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Normally, if you needed this card, you would probably have the maximum of 48K on-bard&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, it would be useful as well with less, due to the function of replacing the ROM. But yeah, before buying a Language Card, one usually had maxed out the RAM already :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So my question is, if I have an Apple IIe with 128K of RAM, and I install one of these language cards, will I see any benefit at all?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. In theory it would work but without any benefit. In reality, you can't install it in the first place, as the card doesn't have any logic to handle address transfer toward the RAMs - it relies on picking these signals from one RAM socket. Since the 64/128 KiB versions of the Apple IIe do not use 16 KiB RAMs, connecting the card will be ... lets say difficult :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Meaning, will I have 144K of RAM?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Rather the other way around. If you manage to install it, it would give less RAM, only 112 KiB, as the Language Card would respond to both upper RAM areas, not just the first one, as it again has no idea of handling a second 64 KiB Bank.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I can't remember but maybe the language card only works in slot 0&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it works in any slot, but slot 0 is a perfect match, as it doesn't offer I/O addresses and the card doesn't need any.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and the Apple IIe used slot 0 for its 64K expansion.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, the IIe needs a special slot, as it needs additional signals to detect if a memory access is dedicated to the main or auxiliary bank - the regular slots only offer access to the first 64 KiB.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Making both cards impossible to use at the same time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As shown it isn't impossible, it just doesn't make much sense.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-09-07T04:02:19.770" LastActivityDate="2018-09-07T04:02:19.770" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7497" PostTypeId="2" ParentId="2033" CreationDate="2018-09-06T21:44:32.763" Score="5" Body="&lt;p&gt;Before FPGAs were PALs (Programmable Array Logic) and PLDs (Programmable Logic Devices).  These had a programmable logic matrix of various forms, often followed by a flop to hold the result.  Many variations were made, each trying to find the best package.  These were roughly equivalent to MSI (medium scale integration) TTL circuits.  Your comparison with a bit-slice adder is apt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually, as integration increased, more complex devices were made.  I built some pretty useful logic around the AMD CPLDs (Complex Programmable Logic Devices), and also using some Atmel FPLAs (Field Programmable Logic Arrays).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FPGAs (Field Programmable Gate Arrays) went through a state where they contained every larger arrays of equivalent elements.  Some were programmable like FLASH parts, and some loaded their logic configuration each time they were powered up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The wheel of creation continues to turn, and now FPGAs often include processor cores, and special PHYs to connect with high-speed interfaces, such as USB, PCIe, DDR, and HDMI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the beginning, I designed programmable logic by drawing TTL diagrams and compiling that into fuse maps (sometimes by hand).  Now, I do FPGA designs in Verilog and leave it up to the tool chain.  Schematics as a representational tool don't scale as well as code.&lt;/p&gt;&#xA;" OwnerUserId="10500" LastActivityDate="2018-09-06T21:44:32.763" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7498" PostTypeId="1" AcceptedAnswerId="7499" CreationDate="2018-09-06T22:23:26.593" Score="5" ViewCount="584" Body="&lt;p&gt;When collecting retro computing related items you'll undoubtedly end up with a variety of different items, made from different materials and in a range of conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a recent snap of my collection which is made up mostly of games and consoles from the 16 bit era onwards (sorry, humble brag!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gtYu5.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gtYu5.jpg&quot; alt=&quot;Retro Computing Collection&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A single Megadrive game consists of fairly typical retro game packaging:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The plastic case and film cover&lt;/li&gt;&#xA;&lt;li&gt;The paper box art that sits outside the case but inside the cover&lt;/li&gt;&#xA;&lt;li&gt;The paper manual, contained inside the box&lt;/li&gt;&#xA;&lt;li&gt;The game cartridge which is a plastic case round an integrated circuit board with the metal pins exposed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then we have the boxes for the consoles which are usually:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cardboard for the actual box&lt;/li&gt;&#xA;&lt;li&gt;Polystyrene for the internal packaging &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And of course we have other medium as well:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Tapes for some of the older games&lt;/li&gt;&#xA;&lt;li&gt;CDs for some of the newer games&lt;/li&gt;&#xA;&lt;li&gt;Wires for the controllers&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is the optimal way a typical home user (*1) can store all these items, on display (*2) , to preserve them in their current state for future generations?&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - &lt;em&gt;By typical home user I mean within a reasonable budget and reasonable practicality. If cryogenic freezing in a pool the size of a football pitch is the absolute best way then please feel free to mention it but please offer it alongside some more feasible advice as well.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - &lt;em&gt;Note I'm primarily interested in answers that have them on display and useable, however if it makes significant difference, answers around sealing in air tight boxes and hiding at the back of the attic are welcome too.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="10234" LastEditorUserId="10234" LastEditDate="2018-09-24T22:00:23.663" LastActivityDate="2018-09-25T12:34:41.873" Title="What is the optimal way to store retro computing paraphernalia (games, consoles, accessories, books) on display at home?" Tags="&lt;hardware&gt;&lt;maintenance&gt;&lt;data-preservation&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7499" PostTypeId="2" ParentId="7498" CreationDate="2018-09-06T23:21:29.720" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What is the optimal way a typical home user can store all these items, on display, to preserve them in their current state for future generations?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Keep them in low temperature, dry and dark conditions.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Low temperature&lt;/strong&gt; in this context means around 15 to 20 °C.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dry condition&lt;/strong&gt; means a humidity of 50-55%.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dark&lt;/strong&gt; is relative, here a low UV is most important.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Almost more important&lt;/strong&gt; than the exact value is to &lt;strong&gt;keep these conditions constant&lt;/strong&gt; over year around. Especially temperature, as changing temperature causes condensation that will be harmful to many materials - especially paper and metals. Second  is the upper limit of humidity. Keep always below 55%&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This sounds much like room conditions for living, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the light, definitly no windows. If at all, special UV filter shades are a must. A closed room with artificial light, only when needed is best. Here usually (!) low colour temperature lighting means less UV. So classic incandescent light bulbs are to be prefered. Here again low power ones emit lower frequency light - so rather use two 40W than one 80W.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having a &lt;strong&gt;good ventilation&lt;/strong&gt; is also helpful. You want to move the shelf away from the wall at least 2-3 cm and not close up bottom or top. With a shelf system like in the picture this comes almost automatic - just make sure the computers/boxes/whatsoever are not pushed against the wall - maybe have a little stop lining atop each board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside that, have fun :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: Here is a good paper by the British Library about &lt;em&gt;&lt;a href=&quot;https://www.bl.uk/aboutus/stratpolprog/collectioncare/publications/booklets/managing_library_archive_environment.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;managing archive conditions&lt;/a&gt;&lt;/em&gt;. Not only due authority, but even more as it explains the relations between different conditions in simple words. It focuses primary on paper and alike, but these coditions are as well good for most other materials in your picture. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-25T12:34:41.873" LastActivityDate="2018-09-25T12:34:41.873" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="7501" PostTypeId="2" ParentId="7437" CreationDate="2018-09-07T05:48:05.630" Score="3" Body="&lt;p&gt;I can actually think of a single instance that fits your criteria:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hobbyists with a Commodore 64 used the second 6502 CPU in the 1541 floppy as a second processor for a few applications; the most well-known is calculating the Mandelbrot set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So we have (1) &gt;1 &quot;computer&quot; (at least something with a CPU), (2) hobbyists, (3) connected via a serial IEE-488 bus, (4) parallel computing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that was only feasible because many Hobbyists already had a 1541 floppy anyway, and Commodore constructed the floppy with its own CPU (which made it very expensive compared to floppy drives on other systems). It was also severely restricted: The floppy didn't have that much RAM, and communication between the machines wasn't that fast. So you needed applications that are very suitable for parallel computing, like the Mandelbrot set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.lemon64.com/forum/viewtopic.php?t=27911&amp;amp;start=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;This thread&lt;/a&gt; lists some other applications that use this trick, but they were all written in the 90s or later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, as the other answers already said, having multiple computers was just too expensive for hobbyists.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-09-07T05:48:05.630" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7502" PostTypeId="1" AcceptedAnswerId="19933" CreationDate="2018-09-07T12:25:11.573" Score="27" ViewCount="4630" Body="&lt;p&gt;The Atari 2600 has two 8-bit wide player sprites, and it appears to be these sprites which are used to draw these aliens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rmN5u.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rmN5u.jpg&quot; alt=&quot;Space invaders in the Atari 2600&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a few different ways to produce many copies of one sprite; controlled by &lt;code&gt;nusiz0&lt;/code&gt; and &lt;code&gt;nusiz1&lt;/code&gt;. If you don't want the sprite stretched, then there's a choice between:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;one copy of the sprite&lt;/li&gt;&#xA;&lt;li&gt;two copies of the sprite, close together, far apart, or medium.&lt;/li&gt;&#xA;&lt;li&gt;three copies of the sprite, close together, or medium&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I suppose it's possible they used player 1 and player 2, both together, three copies of each, to get the six aliens on a row. But what about when an alien gets shot down? Some kind of routine needs to work out how to configure each sprite, with number of copies and distance between changing every time. Has that ever been disassembled? I'd be interested to figure it out.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-05-24T14:50:19.000" LastActivityDate="2021-05-24T14:50:19.000" Title="How does Space Invaders on the Atari 2600 display all the aliens?" Tags="&lt;atari-2600&gt;&lt;sprite&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7503" PostTypeId="2" ParentId="7502" CreationDate="2018-09-07T12:48:24.290" Score="34" Body="&lt;p&gt;It's rather simple. Neither the multiple sprite mode, nor any secret trick is used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TIA doesn't have any directly-accessible register for storing a sprite position ahead of time. Sprites are drawn when they are enabled on the actual line (Y coordinate) and whenever &lt;a href=&quot;https://web.archive.org/web/20060924094927/http://www.howell1964.freeserve.co.uk/Atari/tia/addressdetails.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;RESPx&lt;/code&gt;&lt;/a&gt; is triggered (X coordinate). To display the 6 aliens, &lt;code&gt;RESPx&lt;/code&gt; gets triggered 6 successive times. To not draw an alien the corresponding player is just cleared for that activation — or, during an explosion, replaced by the appropriate sprite.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;You really want to read the by now classic book &lt;a href=&quot;https://mitpress.mit.edu/books/racing-beam&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Racing the Beam&lt;/em&gt;&lt;/a&gt;. A must-read for anyone interested in TIA workings — and way less work than crawling through disassemblies and guessing what happened :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-09-11T15:04:17.670" LastActivityDate="2018-09-11T15:04:17.670" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7504" PostTypeId="2" ParentId="7498" CreationDate="2018-09-07T13:45:15.023" Score="3" Body="&lt;p&gt;Rather than listing ideal conditions, I will try to answer by listing what negative influences are to be observed by specific non-optimal conditions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;Hardware&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All sorts of plastics contain softening ingredients that tend to evaporate over time. Excessive warmth accelerates this process and plastics become brittle over time. Similarly, light-coloured parts tend to yellow because a similar chemical used for whitening the plastics evaporates - exposure to UV light seems to add to the effect.&lt;/li&gt;&#xA;&lt;li&gt;The dielectric in electrolytic capacitors is also subject to drying out, capacitors tend to lose capacitance over time. Excessive warmth will speed up this process as well.&lt;/li&gt;&#xA;&lt;li&gt;Metals (connectors, key contacts, framing, ebven PCB coating...) are very susceptible to humidity, so should be kept in a cool, dry and non-condensing environment.&lt;/li&gt;&#xA;&lt;li&gt;Not exactly related to storage conditions, but: Before putting your equipment in long-term storage, make sure any batteries are removed and permanently installed batteries are checked for leakage and aging. It may make sense to replace PCB-mounted batteries with external battery packs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;Documents (Paper)&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Modern paper is designed in a way that it basically self-destructs over time. Acids in the paper make it eat up itself, heat and (mainly) light support yellowing. This can (like plastics aging) not be prevented, only been slowed down by keeping the materials cool (~20°C), dry and not exposed to light. Very valuable items can be kept as single sheets in acid-free paper (no PVC!) wrappers. Humidity is, obviously, one of the closest enemies to paper. Also think about rodents (mice, the non-computer type) when storing paper in the basement or attic. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;Storage Media&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Magnetic Media is sensible to humidity and excessive temperatures. Magnetic media surfaces can be destroyed in such an environment. Never store a disk in a drive. Verbatim recommended to &lt;em&gt;Disks not being used should be stored upright in a dustproof container. If they are stored on top of one another, there is a tendency for the jackets to become warped. Unlike cassette tapes, if a disk is in long-term storage, it is not necessary to give it a spin every once in a while.&lt;/em&gt; (This was for 5 1/4&quot; floppies). What you also see here, tapes should be given a wind every now and then - otherwise, the windings tend to adhere to each other.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Fortunately, all material used in retrocomputing is more or less susceptible to the same adverse conditions. So, storing computers and equipment in a dark (or at least UV-free), dry, relatively cool (20°C) and non-humid environment should slow done ageing as much as possible - You will, however, not be able to completely prevent ageing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some answers (but not really retro-related) can also be found &lt;a href=&quot;https://blog.superuser.com/2011/04/11/how-do-i-preserve-an-unused-computer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-09-10T12:33:14.490" LastActivityDate="2018-09-10T12:33:14.490" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7505" PostTypeId="1" AcceptedAnswerId="7511" CreationDate="2018-09-07T18:23:21.677" Score="5" ViewCount="477" Body="&lt;p&gt;I am talking about the earliest days of the first generation of 3d game consoles, such as the Playstation, N64 and Sega Saturn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now these consoles are like a pc, the ps3 (and 4?) run OpenGL, and Xbox 360 (and one?) running directX?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the first systems didn't run an OS like that?&#xA;So how graphics were programmed to these machines?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the companies developed and implemented their own graphics APIs (like OpenGL)?&lt;/p&gt;&#xA;" OwnerUserId="10522" LastActivityDate="2018-09-08T02:36:28.160" Title="Do 3d consoles run OpenGL?" Tags="&lt;graphics&gt;&lt;sony-playstation&gt;&lt;sega&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7506" PostTypeId="1" AcceptedAnswerId="7507" CreationDate="2018-09-07T20:41:38.953" Score="7" ViewCount="731" Body="&lt;p&gt;For example, consider the case of handling an &lt;strong&gt;INT&lt;/strong&gt; interrupt signal in the Z80. When the CPU makes the &lt;strong&gt;IORQ&lt;/strong&gt; signal active, it expects the requesting IO device to place a vector onto on the databus. And when it makes the signal inactive, for the IO device to stop driving the databus. (At least this is what I have infered from the timing diagram found in the technical manual).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/p4xup.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/p4xup.png&quot; alt=&quot;Z80 interrupt timing diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What stops the IO device from continuing to drive/assert the IO bus after the CPU makes the &lt;strong&gt;IORQ&lt;/strong&gt; signal inactive? Is it an &lt;strong&gt;assumption&lt;/strong&gt; that the IO device will behave correctly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, consider the case where the ISR routine has an &lt;code&gt;OUT&lt;/code&gt; instruction. This makes the CPU attempt to drive the databus which the misbehaving IO device is still driving. What happens here?&lt;/p&gt;&#xA;" OwnerUserId="6672" LastActivityDate="2019-05-09T14:39:34.053" Title="What stops an IO device from driving the databus longer than the CPU expects?" Tags="&lt;z80&gt;&lt;8080&gt;&lt;interrupt&gt;" AnswerCount="5" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7507" PostTypeId="2" ParentId="7506" CreationDate="2018-09-07T21:07:58.993" Score="13" Body="&lt;p&gt;An I/O device will monitor IORQ, M1, and the address bus to determine whether to respond to an I/O cycle. As soon as the CPU negates IORQ the I/O device will stop responding. This ensures the CPU is always in control of how long an I/O device is driving the bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If an I/O device continued to drive the data bus after IORQ was negated then it would be a faulty design that would likely be caught before the device was put into production (say a UART chip or something else). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if a slow I/O device needs more time to respond than normal available it can use the WAIT signal to request a delay. In this case a misbehaving device could stall the CPU for longer than is desirable, but a properly designed I/O device wouldn't allow that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case if your OUT example it would cause bus contention. Imagine in the next bus cycle a different I/O device or memory device attempts to drive the bus while the misbehaving I/O device is still doing so. Now both devices are trying to drive data on to the bus, and they will sink or source additional current as they &quot;fight&quot; with each other, up to the limit of how much current their data bus pins can deliver. This can lead to damage so it is an undesirable outcome, and hardware is designed to prevent these conflicts.&lt;/p&gt;&#xA;" OwnerUserId="8734" LastActivityDate="2018-09-07T21:07:58.993" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7508" PostTypeId="2" ParentId="7505" CreationDate="2018-09-07T21:28:51.753" Score="7" Body="&lt;p&gt;Those companies did implement their own graphics APIs that were very light weight and didn't have too much complex functionality. This was done because their libraries could be tailored to the strengths or weaknesses of their system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They also had very unique architectures that took different approaches to producing 3D graphics. Later on, consoles and PC video cards adopted a similar workflow for how 3D graphics are produced so they could fit better under a common API. That's why OpenGL is so widely supported today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in the early days it would be hard to develop a library that could be equally efficient across all three platforms, so you'd have to write your own.&lt;/p&gt;&#xA;" OwnerUserId="8734" LastActivityDate="2018-09-07T21:28:51.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7509" PostTypeId="2" ParentId="7506" CreationDate="2018-09-07T21:32:28.860" Score="5" Body="&lt;p&gt;Like with any other misbehaving bus user - it crashes one way or another. Such a behaviour is just not valid, thus there is no way to recover (in fact, it's even hard to detect it anyway).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, consider the case where the ISR routine has an OUT instruction. This makes the CPU attempt to drive the databus which the misbehaving IO device is still driving. What happens here?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nothing, as it would have been crashed already before. With the interrupting device still driving the bus, the Z80 wouldn't be able to read the interrupt routine address from memory, and even less the mentioned OUT instruction - or any other of the desired interrupt routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, there is only &lt;strong&gt;one&lt;/strong&gt; data and address bus which carries everything from instructions over data to interrupt information. All following the protocol, and if one participant screws the protocol, the system is irrecoverably broken.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2018-09-10T14:13:45.820" LastActivityDate="2018-09-10T14:13:45.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7510" PostTypeId="2" ParentId="7505" CreationDate="2018-09-07T21:39:43.957" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But the first systems didn't run an OS like that?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, they did, some kind of proprietary OS.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So how graphics were programmed to these machines?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Using functions of said OS, or bare bone.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did the companies developed and implemented their own graphics APIs (like OpenGL)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly. Just usually a lot less advanced than that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be useful to keep in mind, that early systems didn't have as much computing or rendering power as PCs of the same time. It's only rather recent, that console CPU and GPU are for most parts on the same functional level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much like 3D GPUs for PCs did take quite some time to accumulate all functionality known today. At first they did only support certain steps of a rendering pipeline. Similar interfaces like DirectX did evolve in parallel to this, not only moving more and more functionality into hardware, but also adding more. By now this development has slowed down a lot and allowed consoles to catch up in hardware (CPU+GPU), thus allowing the use of 'standard' solutions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-09-07T21:39:43.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7511" PostTypeId="2" ParentId="7505" CreationDate="2018-09-08T02:36:28.160" Score="11" Body="&lt;p&gt;The first generation of consoles use proprietary APIs; I can speak directly as to the PS1. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the PS1's case there's a vector coprocessor for performing 3d transformations and one is subsequently responsible for compiling and supplying list of triangles in direct screen coordinates for drawing. Usually calculated via the vector coprocessor, but it's up to you. Library functions are additionally provided for bucket sorting — the PS1 has no depth buffer — and triangle subdivision. Subdivision is particularly important on a PS1 as it's Sony's recommended solution for fine 3d polygon clipping and for reducing texture warping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's the fact that only screen coordinates are provided for rasterisation that prevents emulators from flawlessly avoiding the PS1's texture warping; the information necessary to do so isn't provided for rasterisation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specific case aside, OpenGL of the era would have been a pretty terrible fit for the 1993/1994 releases because it was a pretty terrible fit for everyone. This was OpenGL 1.0, so amongst other indiscretions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;there's no immediate API; everything is supposed to be supplied so as to be subject to the full fixed transformation and lighting pipeline;&lt;/li&gt;&#xA;&lt;li&gt;there's no indirection. Every vertex is supplied in full for every single polygon it contributes to. It is therefore retransformed and reprojected for every polygon it contributes to, unless you're going to start trying to implement caching within your OpenGL driver;&lt;/li&gt;&#xA;&lt;li&gt;the intended solution for that is display lists. The idea is that instead of making your drawing calls every time you want to draw, you tell OpenGL to record them once, then replay them later. It optimises in between. But that's an attempt to optimise at runtime — you're adding more code and data structure heft within the actual machine;&lt;/li&gt;&#xA;&lt;li&gt;in fact, the original designers of OpenGL were so enamoured with the idea that somehow they'd be able to optimise these display lists that OpenGL 1.0 &lt;em&gt;doesn't even yet have texture objects&lt;/em&gt;. I.e. each time you want to change which texture you're drawing from, you're supposed to reupload the entire thing (!). Again, the thought was that display lists would somehow optimise that away. But think about the specifics: if you have ten objects to compile into display lists with five shared textures, the OpenGL driver somehow needs to be in a position to recognise when the same texture is in use across different objects. Since there is no &quot;I'm done now with display list generation for all time&quot; call, it probably has to keep extra copies of all textures for all time;&lt;/li&gt;&#xA;&lt;li&gt;... and, in OpenGL the list of texture formats an implementation must support is defined as part of the API. It's not a function of the underlying hardware. The API has to translate at runtime. For yet more processing and copies of things.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The extensions to fix those things weren't defined until 1995, 1996 or so, and OpenGL 1.1 didn't incorporate many of those fixes into the base API until 1997.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: OpenGL would have been a terrible fit in the era.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-09-08T02:36:28.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7512" PostTypeId="2" ParentId="7506" CreationDate="2018-09-08T05:33:27.443" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What stops the IO device from continuing to drive/assert the IO bus after the CPU makes the IORQ signal inactive?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The protocol of the bus explained in the datasheet. If device is misbehaving, it causes CPU to malfunction.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This makes the CPU attempt to drive the databus which the misbehaving IO device is still driving. What happens here?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Machine hangs, reboots or anything else not expected. The malfunctioning device must be removed from the system and repaired (if it is defective) or put into the trash bin if it is designed to malfunction (in other words not designed up to CPU specifications).&lt;/p&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2018-09-08T05:33:27.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7513" PostTypeId="2" ParentId="7506" CreationDate="2018-09-08T09:11:51.820" Score="6" Body="&lt;p&gt;Here's the equivalent diagram from the Z84C00 datasheet (which applies to NMOS Z80s as well as the later CMOS versions), which is a little clearer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TCHWo.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TCHWo.png&quot; alt=&quot;Z84C00 datasheet IRQ timing&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing to notice is that it's actually different: the diagram you show has the bus being released by the device before the CPU deasserts ~IORQ.  This is actually wrong: here the timing is explicit, and shows that it must happen after.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This diagram also includes references to the table of timing requirements in the back of the datasheet.  (15) indicates that the data must be on the bus at least &#xA;TsD(Cr) ns before the positive clock edge - this varies depending on which exact processor you're using, but for a Z84C0004 it's 35ns. (16) indicates that the data must be left on the bus at least ThD(RDr) ns after the IORQ is deasserted, which is 0ns for all processor versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's no specification of how long it can hold on to the bus, because all that's necessary is it stops using it before the next operation starts.  In this case, that's slightly more than two clock cycles -- after the acknowledgement cycle the processor continues with the T3 and T4 states of the M1 bus cycle, in which the processor is performing a memory refresh operation which doesn't need the data bus.  After that, depending on the interrupt mode, it will either perform a standard M1 instruction fetch cycle or a memory read cycle, both of which give the device until at least 40ns after the negative edge of the clock in the next clock cycle to release the bus before the next request is made.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-09-08T09:28:48.393" LastActivityDate="2018-09-08T09:28:48.393" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7514" PostTypeId="1" AcceptedAnswerId="7515" CreationDate="2018-09-08T09:49:57.457" Score="4" ViewCount="1321" Body="&lt;p&gt;I ran a validation of an old disk, and it turns out this ruined a game (won't load) and deleted my old high score list on David's Midnight Magic. I would like to edit the code to get the high score list back, but when I load the program and type list, it displays &lt;code&gt;711 SYS(2069) DMM&lt;/code&gt;. What does this mean? I notice a similar message from Jumpman Jr. (which incidentally allows me to run the game by typing the sys command). Further, as per above, how can I move past this and actually view the code? The high score list must be there somewhere.&lt;/p&gt;&#xA;" OwnerUserId="10527" LastEditorUserId="10527" LastEditDate="2018-10-09T14:33:25.787" LastActivityDate="2018-10-09T14:33:25.787" Title="How can I view BASIC code hidden by SYS?" Tags="&lt;commodore-64&gt;&lt;basic&gt;&lt;copy-protection&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7515" PostTypeId="2" ParentId="7514" CreationDate="2018-09-08T10:21:31.180" Score="12" Body="&lt;p&gt;&lt;code&gt;SYS&lt;/code&gt; is the BASIC instruction to execute a routine written in machine code.  There is no more BASIC code to view, the entire game is implemented as a machine code program, and the BASIC only exists as a stub to make it easier to load and run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best approach to viewing what the code actually does and potentially being able to restore your table (if it is still there at all) is to load the program into an emulator that has an integrated machine-level monitor/debugger.  The most popular C64 emulator is &lt;a href=&quot;http://vice-emu.sourceforge.net&quot; rel=&quot;noreferrer&quot;&gt;VICE&lt;/a&gt; and although I've never used it so can't comment on how good it is, it definitely includes a monitor with the ability to disassemble code.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-09-08T10:21:31.180" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7516" PostTypeId="1" CreationDate="2018-09-08T13:51:33.817" Score="5" ViewCount="761" Body="&lt;p&gt;I just bought an SGI Indy computer off of Ebay. The computer works, but I do not know how to netboot one of the computers. Since I do not have an external disk drive (but I do have disk drives from old computers, but they do not plug into the computer with the correct ports), I cannot install them with some disks that I have. I, then, resorted to trying to install the machine over a network. I tried, first, to install it over the DIMA server, but the computer would not recognize it. I am not sure if the DIMA VM was not connecting to the internet. I then tried the netboot appliance on github, and that also did not work, because I could not find the IP address of the computer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;when I let the computer do it's normal boot when the ethernet cable is hooked up.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/XOA2M.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XOA2M.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I do not have a mouse, so I just use the keyboard to move the mouse around, or use the keyboard keys. I bought a USB to PS2 converter, but the motherboard is not supporting the mouse, so that is why I have to use the keyboard.....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a photo without the ethernet cable hooked up...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XYTth.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XYTth.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;ALERT:ec0&quot; reappears in a new line every few minutes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ports:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ub6nj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ub6nj.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The USB to PS2 converter:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gfrUM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gfrUM.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From these things, I am guessing that the computer already has Irix installed, but I want to reinstall it because I do not know how to fix the kernel error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ports with the ethernet cable:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ewnCl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ewnCl.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ethernet cable has been hooked into a Windows 10 laptop and an IMac, and I received the same results...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then ran to the DINA (deBugs IRIX Netboot Appliance), and I do not think it was connected to the Internet (feel free to ask about that). I really do not actually know how to use it, I just attempted to figure it out by watching &lt;a href=&quot;https://www.youtube.com/watch?v=V-7vCz7oxSg&amp;amp;t=3s&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt; (which did not give me much help because I did not see the ports or what he did before the video). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still, after the video do not know how to use the appliance. The computer works perfectly, with an R4X00. ALso, some helpful information could be that the timezone is PST8PDT. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The boot noise also works because I reset the environment variables (which did not do anything, it just turned the volume up a little bit in the computer). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are no (as I can see) IP addresses on the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please Help!&#xA;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="10529" LastEditorUserId="10529" LastEditDate="2018-09-08T23:00:20.123" LastActivityDate="2018-09-16T03:27:13.203" Title="I dont know how to install SGI IRIX operating system" Tags="&lt;sgi&gt;" AnswerCount="2" CommentCount="27" ContentLicense="CC BY-SA 4.0" />
  <row Id="7517" PostTypeId="2" ParentId="7514" CreationDate="2018-09-08T18:04:11.463" Score="3" Body="&lt;p&gt;As Jules said, SYS is the BASIC instruction to execute a routine in machine code.  Very much like GOSUB.  USR is the equivalent of DEF FN.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 2 ways in which machine code is loaded&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It is saved with the code.  This is great against piracy but it is a pain to modify.  Also any minor mod you make might wipe out the assembler.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There is a bunch of data statements with a whole bunch of numbers and somewhere in the code, there is a loop which reads the data and pokes it to consecutive locations.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If the second method is used, you're in luck.  Somewhere in the code, it will overwrite one of the data statements and resave the file.  All you have to do is convert the bunch of numbers to assembler to work out what it is doing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you haven't used 6502 assembler before be aware of the switch statement trick in 6502 assembler which jumps to the middle of the BIT instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also noticed that the instruction said&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;711  SYS(2069) DMM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;DMM probably means David's Midnight Magic.  There may be others using the same routine which pass different parameters across.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2018-09-08T18:04:11.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7518" PostTypeId="2" ParentId="7514" CreationDate="2018-09-09T01:10:34.740" Score="5" Body="&lt;p&gt;A lot of Commodore 8-bit computer games used a disk that had random-access files on them.  This means they were written directly to disk blocks, not via a program, sequential or relative file, which are the three ways Commodore DOS officially supports files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Random files are protected by having the programmer manually mark the blocks as being used.  This works perfectly well... unless you validate the disk like you did.  When this happens, Commodore DOS scans the disk and sees if any blocks (sectors) aren't tied to a file in the disk directory.  This means all PRG, SEQ and REL files will continue to be protected (or re-protected, if some of the blocks were accidentally de-allocated).  However, it means if there are any random file blocks, they will be marked as being available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even now, you still don't have a problem, but if you write a file to the disk, there is a chance DOS will use a block that had a random file on it, and this data will then be overwritten.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect this is what happened to you, in which case you'll need a backup to restore your high score list (now you've learned the importance of backups :) ).&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2018-09-09T01:10:34.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7519" PostTypeId="1" CreationDate="2018-09-09T05:18:12.163" Score="1" ViewCount="562" Body="&lt;p&gt;I am not sure if this question is &quot;on topic&quot; or not, but I'm asking it anyway...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was reading Hackaday.com a few months ago and I came across this article: &lt;a href=&quot;https://hackaday.com/2016/04/01/apple-introduces-their-answer-to-the-raspberry-pi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hackaday.com/2016/04/01/apple-introduces-their-answer-to-the-raspberry-pi/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nautraly, I thought that it was pretty cool, so I went to buy a unit, but I can't find at all, anywhere.There is nothing on Apple's website; There's nothing on google, duckduckgo, eBay, or Amazon. The only place that I ever saw it was on Hackaday.This makes me think its vapourwear?&#xA;Does anyone know different?&lt;/p&gt;&#xA;" OwnerUserId="10459" LastActivityDate="2018-09-09T14:58:31.980" Title="What happened to the Apple Device SBC that was supposed to compete with the linux SBCs?" Tags="&lt;apple-macintosh&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2018-09-09T12:08:26.767" ContentLicense="CC BY-SA 4.0" />
  <row Id="7520" PostTypeId="2" ParentId="7519" CreationDate="2018-09-09T05:34:27.300" Score="3" Body="&lt;p&gt;It is an &lt;a href=&quot;https://en.m.wikipedia.org/wiki/April_Fools%27_Day&quot; rel=&quot;nofollow noreferrer&quot;&gt;April Fool's Day&lt;/a&gt; article.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://hackaday.com/2016/04/01/apple-introduces-their-answer-to-the-raspberry-pi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hackaday.com/ &lt;strong&gt;2016/04/01&lt;/strong&gt; /apple-introduces-their-answer-to-the-raspberry-pi/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="348" LastEditorUserId="56" LastEditDate="2018-09-09T14:58:31.980" LastActivityDate="2018-09-09T14:58:31.980" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7521" PostTypeId="1" CreationDate="2018-09-09T15:33:03.960" Score="6" ViewCount="453" Body="&lt;p&gt;According to &lt;em&gt;Commodore: The Amiga Years&lt;/em&gt;, the reason the Commodore UNIX machine project in the early 80s used the Z8000 rather than the 68000 was an ongoing lawsuit with Motorola:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;With the Commodore-Motorola lawsuit over the 6500 line of microprocessors still ongoing, the plan remained to use the 16-bit chip from Zilog.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What was this lawsuit about? I know there was one in the early days of MOS Technology over the 6501 being a drop-in competitor to the 6800, but I thought this was resolved back in the mid-70s?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2018-09-09T20:33:04.863" LastActivityDate="2018-09-12T13:56:32.057" Title="Commodore-Motorola lawsuit in 1984" Tags="&lt;history&gt;&lt;commodore&gt;&lt;mos-650x&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7522" PostTypeId="2" ParentId="7477" CreationDate="2018-09-09T15:41:34.723" Score="1" Body="&lt;p&gt;One area that use to mandate the use of sockets (and still does to my knowledge) is in the area of huge-footprint chips (specialized processors, CCD arrays above a certain size, Array-Processor Logic for in-circuit AI boards, etc.) where the mechanical stresses of insertion and/or pick-and-place soldering across the face of the chip exceed a certain recommended threshold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In such cases, they're likely to use a ZIF-socket (Zero-Insertion-Force) where these high-dollar frequently upgraded components can be removed as needed, particularly in environments where ambient heat, vibration stresses, and radiation may cause gate degradation.  It still happens, and when your board costs $1.75 and your AI Gate-Array chip costs $20K, you'd prefer to protect your investment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other variable not addressed earlier is when chip failures are not entirely understood and diagnostics on specialty high-density chips differ between the actual (working) environment and the prefab test environment.  Soldering in these huge beasts (even when possible) usually means that the chip is destroyed during the desoldering process and therefore means it is no longer possible to analyze the casualties for failure modes after-the-fact.&lt;/p&gt;&#xA;" OwnerUserId="10535" LastActivityDate="2018-09-09T15:41:34.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7523" PostTypeId="2" ParentId="7521" CreationDate="2018-09-09T16:06:56.453" Score="6" Body="&lt;p&gt;The only issue that comes to mind was the original Motorola vs. MOS case about the 6501 being pin compatible to the 6800. Since MOS was by then part of Commodore, their settlement not to make a compatible CPU might be referenced here, as this was of course future binding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as the wording already suggests, the decision might be more based on a bias than real legal implications. Also consider that the Z8000 was anyway a rather good choice for a 16 Bit Unixoide system, which leaves lot of room to foster some grudge.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-09-10T07:29:13.320" LastActivityDate="2018-09-10T07:29:13.320" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7524" PostTypeId="1" AcceptedAnswerId="7526" CreationDate="2018-09-09T19:06:27.320" Score="40" ViewCount="5767" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2Y3mt.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2Y3mt.jpg&quot; alt=&quot;Me, typing on something&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I typing on?  Is it a peripheral for the ZX81 in the back, or is it a computer in its own right?&lt;/p&gt;&#xA;" OwnerUserId="5166" LastEditorUserId="5166" LastEditDate="2018-09-10T12:31:45.797" LastActivityDate="2018-09-10T16:04:41.910" Title="What kind of keyboard or computer am I typing on?" Tags="&lt;identify-this-computer&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7525" PostTypeId="2" ParentId="7524" CreationDate="2018-09-09T19:12:36.057" Score="9" Body="&lt;p&gt;It looks like a Timex Sinclair 1000 with a modded keyboard.  Possibly by Memotech.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2018-09-09T19:12:36.057" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7526" PostTypeId="2" ParentId="7524" CreationDate="2018-09-09T19:36:22.763" Score="29" Body="&lt;p&gt;Most likely &lt;a href=&quot;https://smuggsy.files.wordpress.com/2012/05/zx81-external-keyboard.jpg&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt; in a custom case. It was made/sold by now defunct &lt;a href=&quot;https://en.wikipedia.org/wiki/Maplin_(retailer)&quot; rel=&quot;noreferrer&quot;&gt;Maplin&lt;/a&gt; as one of their early own computer products in 1981. It was available as PCB only, Kit or Assembled product. Its larger cousin, the 'Full Size Keyboard' was described in detail in their &lt;em&gt;&lt;a href=&quot;https://www.americanradiohistory.com/UK/Mapelin/Maplin-Project-Book-03.pdf&quot; rel=&quot;noreferrer&quot;&gt;Maplin Projects Book Three&lt;/a&gt;&lt;/em&gt; of 1983 on p.28.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Excerpt from the Maplin price list of Nov/1982:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;XH58N Keytop Print ZX81 25&#xA;XG17T ZX81 Keyboard Case £4.95&#xA;GA83E ZX81 Ext Kyboard PCB £2.95&#xA;LW72P ZX8I Keyboard Kit £19.95&#xA;XG22Y ZX81 Keyboard £29.95&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;According to the price list it was listed on page 243 of the catalogue (p.303 for the 1984 catalogue).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The Computer is most likely a genuine &lt;em&gt;ZX81&lt;/em&gt; with Sinclair's &lt;em&gt;ZX 16K RAM&lt;/em&gt; 16 KiB RAM expansion and the &lt;em&gt;ZX PRINTER&lt;/em&gt;. A configuration much like on &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/4/45/ZX81_-_rampack_-_ZX_Printer.jpg&quot; rel=&quot;noreferrer&quot;&gt;this Wiki-picture&lt;/a&gt; - sans the keyboard of course.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-10T13:07:50.857" LastActivityDate="2018-09-10T13:07:50.857" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7527" PostTypeId="2" ParentId="7516" CreationDate="2018-09-10T01:04:31.813" Score="5" Body="&lt;p&gt;&lt;strong&gt;Note: This answer is a work in progress&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the info in your question it appears that the system powers on, starts to boot of the hard drive, and probably has a working network interface.  This is good since the hardware appears to be fully functional.  Regarding the boot messages you're seeing:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;lboot: WARNING: kernel seems current but has a modification time in the future&lt;/code&gt;&lt;br&gt;&#xA;This warning is probably shown because the system clock is returning an older date than the timestamp on the kernel file. This can happen, e.g., if the RTC battery is dead or simply if the RTC's date is set to a date older than the kernel. The system will likely run fine once it picks up the time and date from NTP. If the RTC always returns the same date and time at boot then the long-term fix would be to replace the RTC battery (typically a CR2032 coin cell).&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;add net default: gateway 192.168.1.1&lt;/code&gt;&lt;br&gt;&#xA;This is shown when the networking set-up script runs.  The system is saying that it thinks it's on the 192.168.1.n network and is sending all traffic destined for other networks to your router at 192.168.1.1. If this isn't your network and router address you'll want to adjust the network settings once the system has booted.  For a fresh install, Irix uses the address 192.168.1.2/24 as the system IP address.  This is consistent with the gateway address show above.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Booting into single-user mode&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that the system appears to be booting off the hard drive and at least some of the OS is coming up, it's likely that a reïnstall won't be necessary.  Given the reported network address, you're probably looking at a fresh install of Irix.  Since the system won't complete booting in its current state you'll want to try booting into single user mode so that you can poke around a bit and find out what state it's in, change settings, etc.  To do this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When booting you should see &lt;code&gt;stop for maintenance&lt;/code&gt;; at this point hit &lt;em&gt;&lt;code&gt;Escape&lt;/code&gt;&lt;/em&gt; then choose &lt;code&gt;Enter Command Monitor&lt;/code&gt;, type &lt;code&gt;single&lt;/code&gt; and hit &lt;em&gt;&lt;code&gt;Enter&lt;/code&gt;&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The system should quickly boot (with no network) then you should be prompted to enter the root password. In a fresh install there is no root password so just hit &lt;em&gt;&lt;code&gt;Enter&lt;/code&gt;&lt;/em&gt;.  If this doesn't work then you could also try some of the obvious password possibilities such as &lt;code&gt;root&lt;/code&gt;, &lt;code&gt;password&lt;/code&gt;, or maybe &lt;code&gt;wheel&lt;/code&gt;.&lt;br&gt;&lt;br&gt;Note: If none of the passwords work then you'll need to clear the root password in &lt;code&gt;/etc/passwd&lt;/code&gt; either by booting into SASH from the &lt;code&gt;stop for maintenance&lt;/code&gt; menu (which I believe needs a CDROM to function) or by pulling the hard drive and using a Linux system with a SCSI card to mount the drive's filesystem.  Alternatively, you might be able to netboot the Indy and edit the password file from there.   If none of this works and you still can't log in, you'll need to do a reïnstall of the system.&lt;/li&gt;&#xA;&lt;li&gt;At this point you should end up in a root shell. I'm not sure exactly what the prompt is for the Irix root shell but it should end in a &lt;code&gt;#&lt;/code&gt; character.  Take a look around and see what state the system is in.  The &lt;a href=&quot;https://web.archive.org/web/20180903233056/http://bhami.com/rosetta.html&quot; rel=&quot;noreferrer&quot;&gt;Unix Rosetta Stone&lt;/a&gt; might come in handy.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Network booting / DINA&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're having trouble getting the Indy working with DINA, the issue may be that your LAN's DHCP server is conflicting with DINA's.  Try putting the machine running DINA and the Indy on their own network (either through a switch or directly together using a crossover cable) and trying again.  &lt;a href=&quot;https://web.archive.org/web/20180910010626/https://sites.google.com/a/harrydebug.com/dina/&quot; rel=&quot;noreferrer&quot;&gt;A nice tutorial on using DINA can be found here&lt;/a&gt;.  See also &lt;a href=&quot;https://github.com/halfmanhalftaco/irixboot&quot; rel=&quot;noreferrer&quot;&gt;irixboot&lt;/a&gt; and &lt;a href=&quot;https://web.archive.org/web/20170621103651/http://software.majix.org/irix/install-network.shtml&quot; rel=&quot;noreferrer&quot;&gt;Installing IRIX over a Network&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Mouse&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;USB to PS2 converters are typically passive devices that only work with mice that are designed to speak both protocols. IOW, if the converter came with the mouse it should work fine with that mouse but might not work with others. If you have other mice you could try plugging them into the converter; one of them may work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Questions for the OP&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Are you able to log in in single user mode?  If not, do you have access to a SCSI CDROM drive that is compatible with the Indy (either externally or internally)?&lt;/li&gt;&#xA;&lt;li&gt;What exactly is the current state of the system?  e.g. Does it boot fully or does it get stuck after bringing up the network?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-09-10T02:18:40.700" LastActivityDate="2018-09-10T02:18:40.700" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="7528" PostTypeId="1" CreationDate="2018-09-10T12:20:55.953" Score="8" ViewCount="1112" Body="&lt;p&gt;Is the character set format same on every Commodore 8-bit computer or are there any character size, character order, or other differences between the machines?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm purely interested in the character set data: how the character data is organised in the set on each machine. I already know how the character data is laid out in the C64 and the 264 series (C16, Plus/4, etc.) computers and that the character set format is identical on those machines. I'm just lacking the information on the rest of the Commodore 8-bits.&lt;/p&gt;&#xA;" OwnerUserId="6918" LastEditorUserId="6918" LastEditDate="2018-09-12T15:10:21.683" LastActivityDate="2020-02-01T11:46:07.977" Title="Commodore 8-bit character sets" Tags="&lt;commodore&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7529" PostTypeId="1" AcceptedAnswerId="8686" CreationDate="2018-09-10T12:39:35.533" Score="17" ViewCount="971" Body="&lt;p&gt;The Commodore 64, and possibly others, I don't know, have character codes (These map integers to characters, in the same way that ASCII does) and there are screen codes (The offset which the VIC-II will use to look up the bitmap in the character set).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The character codes are used in file names, I guess BASIC tokens etc also. The screen codes are &lt;em&gt;only&lt;/em&gt; used when putting some letter on the screen! &lt;a href=&quot;http://codebase64.org/doku.php?id=base:petscii_to_screencode&amp;amp;s[]=screencodes&quot; rel=&quot;noreferrer&quot;&gt;Then there are routines to convert between them&lt;/a&gt;. Presumably, the ROM also needs to do exactly this thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is there a reason why not put the bitmaps in the character ROM in the same order that the characters are laid out by PETSCII? That would save people from having to do this daft, daft conversion.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-06-20T14:01:04.680" Title="Why the disparity between the screencodes and the character codes?" Tags="&lt;commodore-64&gt;" AnswerCount="5" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7530" PostTypeId="1" AcceptedAnswerId="7533" CreationDate="2018-09-10T13:25:19.820" Score="17" ViewCount="3349" Body="&lt;p&gt;I'm trying to remember the name of a PC DOS Combat Flight Simulator that I played around 1991/92.  I can give the following details:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;It was named after a US fighter plane that would have been in active service during the 1980's and 1990's. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It ran fine on 286 hardware, so may have seen an original release in the late 1980's&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It had a dogfight mode where 2 players could compete via a serial cable linkup&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you attempted to turn too quickly, you could experience a blackout/redout&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Can anyone identify the game?&lt;/p&gt;&#xA;" OwnerUserId="6461" LastActivityDate="2020-05-09T11:38:29.780" Title="Name this PC DOS Combat Flight Simulator" Tags="&lt;ms-dos&gt;&lt;identify-this-game&gt;&lt;simulator&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7531" PostTypeId="2" ParentId="7529" CreationDate="2018-09-10T14:13:33.730" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The Commodore 64, and possibly others, I don't know, have character codes (These map integers to characters, in the same way that ASCII does) and there are screen codes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To start with, this includes the Apple II - as well as several others.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So is there a reason why not put the bitmaps in the character ROM in the same order that the characters are laid out by PETSCII? That would save people from having to do this daft, daft conversion.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For one, isn't there an OS to do that job? (*1)&lt;/p&gt;&#xA;&lt;p&gt;The main reason is simple: &lt;strong&gt;Rearranging Them Saves Hardware.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The other is that rearranging them enables additional features.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;For example, the &lt;strong&gt;Apple II&lt;/strong&gt; had only a ROM for 64 different glyphs. Arranging them in a way to suit ASCII encoding, would mean that ROM space for 128 glyphs would be needed - or additional hardware to do the transformation on the fly. That would have asked for a ROM chip double the size (*2) or some clever logic doing the transformation on the fly. Replacing a rather expensive chip with a few lines of machine code seems like a good trade-off. Especially one in line with Woz' constant struggle to cut down the chip count. Isn't it?&lt;/p&gt;&#xA;&lt;p&gt;Similarly, &lt;strong&gt;Sinclair's &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX80_character_set&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX80&lt;/a&gt;/&lt;a href=&quot;https://en.wikipedia.org/wiki/ZX81_character_set&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX81&lt;/a&gt;&lt;/strong&gt; character set follow the same reasoning of cutting down the needed ROM space. Except here, 11 punctuation characters were switched for graphic symbols to allow for 4 pixel per character cell graphics.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;strong&gt;Sinclair ZX Spectrum&lt;/strong&gt; extends this to &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum_character_set&quot; rel=&quot;nofollow noreferrer&quot;&gt;128 codepoints&lt;/a&gt; to include full ASCII charset with lower case and all (*3) punctuation plus the drawing symbols.&lt;/p&gt;&#xA;&lt;p&gt;On the &lt;strong&gt;PET&lt;/strong&gt; the reasoning was a bit different. While it had a &lt;a href=&quot;http://www.6502.org/users/sjgray/computer/cbmchr/cbmchr.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;character ROM&lt;/a&gt; holding 256 glyphs, they were organized as two character sets of 128 each, so standard character handling could be kept as 7 bit. Further, the &lt;a href=&quot;http://www.aivosto.com/vbtips/petscii.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PETSCII encoding&lt;/a&gt; corresponded to what the keyboard delivered, and the ROM was organized accordingly.&lt;/p&gt;&#xA;&lt;p&gt;So while it made sense for the first PET, the C64 and other 8-bit Commodores only inherited it for compatibility.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Bottom line, by separating the functionality of having ASCII on the software side, while having a different hardware representation on the CRT controller side, enables ways of optimization - much like any other abstract interface does.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - &lt;strong&gt;NEVER. EVER. Assume&lt;/strong&gt; that a certain binary representation of your data is the same over all steeps of processing or across different devices and networks. This and assuming that binary will be unharmed in transmission are eventually the two main reason for bugs ... well, after off-by-one that is.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Never assume that binary representation of (character) data has a particular sequence or order.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There  are representations where he binary value of B is lower than the value for A, while C may be again lower, or higher or inbetween.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Always keep in mind that recoding can and will happen.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Never calculate between codesets. Use translation tables.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;*2 - Or at least an additional half the size answering to the missing 31/32 glyphs twice.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Within reason.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-20T14:01:04.680" LastActivityDate="2020-06-20T14:01:04.680" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="7532" PostTypeId="2" ParentId="6359" CreationDate="2018-09-10T14:22:23.187" Score="0" Body="&lt;p&gt;Perhaps you are referring to the Heathkit ET-3400 microcomputer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zyHud.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zyHud.jpg&quot; alt=&quot;via vintage-computer.com&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has the hex pad, the line of LEDs on the left, and a few 7 segment displays.&#xA;I don't see anything green, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many Radio Shack stores were privately owned franchises, where they would carry additional items other than the standard Radio Shack fare (often TV repair shops).  You may have seen a Heathkit/Zenith item in a store like this.&lt;/p&gt;&#xA;" OwnerUserId="4420" LastActivityDate="2018-09-10T14:22:23.187" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7533" PostTypeId="2" ParentId="7530" CreationDate="2018-09-10T14:35:34.260" Score="32" Body="&lt;p&gt;This sounds like &lt;a href=&quot;https://www.mobygames.com/game/f29-retaliator&quot; rel=&quot;noreferrer&quot;&gt;F29 Retaliator&lt;/a&gt;: it has low hardware requirements, supports head-to-head play, and has blackout/redout. Only its name doesn’t fit: it follows the US nomenclature for fighter planes, but the F-29 never existed (except as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Grumman_X-29&quot; rel=&quot;noreferrer&quot;&gt;X-29&lt;/a&gt; experimental plane).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.mobygames.com/game-group/falcon-series&quot; rel=&quot;noreferrer&quot;&gt;Falcon series&lt;/a&gt; nearly matches, but not quite: the original &lt;a href=&quot;https://www.mobygames.com/game/falcon&quot; rel=&quot;noreferrer&quot;&gt;Falcon&lt;/a&gt;, and its immediate successor &lt;a href=&quot;https://www.mobygames.com/game/falcon-at&quot; rel=&quot;noreferrer&quot;&gt;Falcon AT&lt;/a&gt;, run reasonably on 286s (with one or two enemies) and support head-to-head play, but they don’t have blackout/redout; that appeared in &lt;a href=&quot;https://www.mobygames.com/game/mig-29-deadly-adversary-of-falcon-30&quot; rel=&quot;noreferrer&quot;&gt;MiG-29&lt;/a&gt; and was retro-fitted to &lt;a href=&quot;https://www.mobygames.com/game/falcon-30&quot; rel=&quot;noreferrer&quot;&gt;Falcon 3.0&lt;/a&gt;, neither of which ran well on 286s at all.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-09-11T08:36:58.140" LastActivityDate="2018-09-11T08:36:58.140" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7534" PostTypeId="1" AcceptedAnswerId="7544" CreationDate="2018-09-10T15:56:31.437" Score="2" ViewCount="793" Body="&lt;p&gt;I can't seem to find out what the Sharp X68000 cost when it first available.  Is there a reliable source for this information?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for actual sales costs of a standard X68000 unit (preferably without monitor and accessories) when it was available.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2019-11-10T11:41:57.160" Title="What was the initial price of the Sharp X68000?" Tags="&lt;cost&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7538" PostTypeId="2" ParentId="7528" CreationDate="2018-09-10T22:39:04.983" Score="5" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PETSCII&quot; rel=&quot;noreferrer&quot;&gt;PETSCII&lt;/a&gt;'s very similar across all of the machines, but not quite identical. Some control codes differ depending on the particular machine's capabilities (the C64's colour codes would make no sense on a monochrome PET) but older codes generally appear very similar to newer ones.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-09-10T22:39:04.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7540" PostTypeId="1" AcceptedAnswerId="7542" CreationDate="2018-09-11T09:08:03.337" Score="4" ViewCount="274" Body="&lt;p&gt;As I recall, the original PDP-8 actually does a &lt;code&gt;jsr 0000&lt;/code&gt; when an interrupt happens, so that the interrupt service routine started at address 0001. I think that saves a few gates, since the instruction decoder can also be used to handle an interrupt, a bit like the 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But since space in the zero page is usually at a premium, and since the ISA encourages data to be put there, it makes no sense for this region of memory to also host an interrupt service routine. This I consider one of the mistakes in the design of the PDP-8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, about a much later implementation, the Intersil 6100, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intersil_6100&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page&lt;/a&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When the interrupt is tripped, the CPU stores the current PC in 0000, and then jumps to the location stored in 0001.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The wording is a little hazy, but seems to imply that 0001 contains a pointer to the interrupt service routine. So did the Intersil 6100 designers consider this design mistake, and correct that by letting location 0001 point to the ISR? Or am I reading this wrong, and the ISR actually starts at 0001 like the other PDP-8s?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-09-12T07:32:55.210" Title="Does the Intersil 6100 do interrupts differently from other PDP-8s?" Tags="&lt;interrupt&gt;&lt;pdp-8&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7541" PostTypeId="1" AcceptedAnswerId="8746" CreationDate="2018-09-11T12:14:47.983" Score="21" ViewCount="1142" Body="&lt;p&gt;&lt;a href=&quot;https://www.c64-wiki.de/wiki/Alternative_World_Games#Pillow_Fight&quot; rel=&quot;nofollow noreferrer&quot;&gt;This pillow fighting game set in Venice&lt;/a&gt;&#xA;depicts the two opponents fighting on a wobbly gondola on a canal. It was apparently known as &amp;quot;Pillow Fight&amp;quot; in English and as &amp;quot;Kissenschlacht&amp;quot; in German, and was part of a bundle called Alternative World Games.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oIjVQ.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oIjVQ.gif&quot; alt=&quot;C64 Pillow Fight&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm interested in the splashing water in the canal. That animation is five frames long; I have extracted the frames and cropped a small area. Most areas have five colours: white, gray, dark blue, and light blue. One of the blues is presumably the background colour, being shared with the sky. The shadow under the boat appears to replace the white by black.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MHED2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MHED2.png&quot; alt=&quot;Frame 1&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Veld8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Veld8.png&quot; alt=&quot;Frame 2&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/KK5z1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KK5z1.png&quot; alt=&quot;Frame 3&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/dVVD0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dVVD0.png&quot; alt=&quot;Frame 4&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/LUWSv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LUWSv.png&quot; alt=&quot;Frame 5&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'd like to know how to do that. The problems I foresee:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It doesn't seem to be tileset-based because the region does not fit the character cells.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It doesn't seem to be sprites because it's wider than eight sprites put together.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I don't think it's bitmap because it's moving too quickly for the 6502 to update the whole thing in time.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;doesn't seem to be a trick with the palette because there are more frames than possible colours in a multicolor image.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Well I think we've run out of (reasonable) options, so I guess I'm wrong somewhere! So does anyone know how this was accomplished? I'd very much appreciate:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An educated guess on how this &lt;em&gt;could&lt;/em&gt; have been done.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A source/disassembly on how this &lt;em&gt;actually was&lt;/em&gt; done.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="576" LastEditorUserId="-1" LastEditDate="2020-12-07T22:02:53.827" LastActivityDate="2020-12-07T22:02:53.827" Title="What's a good way to implement this &quot;splashing water&quot; effect on the C64?" Tags="&lt;commodore-64&gt;&lt;graphics&gt;&lt;programming&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7542" PostTypeId="2" ParentId="7540" CreationDate="2018-09-11T12:54:19.523" Score="4" Body="&lt;p&gt;The &lt;a href=&quot;http://www.bitsavers.org/components/intersil/Intersil_IM6100_12-Bit_CMOS_Microprocessor.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intersil 6100 manual&lt;/a&gt; on bitsavers clearly says&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Instruction fetch from 0001 of mem&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;in figure 11 (page 19). It doesn't say &amp;quot;data fetch, and instruction fetch from address just read&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;So it is indeed a &lt;code&gt;JMS&lt;/code&gt;, and the Wikipedia wording is misleading (well, it's Wikipedia).&lt;/p&gt;&#xA;&lt;p&gt;I also would have been very surprised if they had changed this in the Intersil 6100 - after all, the goal should have been to let existing software run unmodified. Having to rewrite everything that deals with interrupts is quite painful.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Following a suggestion by @tofro, there is an ISR example in the manual on page 96 where address 0001 just contains an &lt;code&gt;IOF&lt;/code&gt; (interrupt off) instead of the indirect jump that would normally be required. This only works together with the Parallel Interface Element (PIE) Intersil 6101 chip, and is described as follows on page 51:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The IM6100 activates the INTGNT signal high when an INTREO is acknowledged. The INTGNT is reset by executing any IOT instruction. The PIEs use the INTGNT signal to freeze the priority network and to uniquely specify the PIE with the highest priority interrupt request. The PIE with the highest priority request sends a unique vector address to the IM6100 when the processor executes the first IOT instruction after the INTGNT. It is recommended that the internal processor instruction, Interrupt Off (IOF - 6002_8) be used for vectoring. IOF, in this context, is a NOP, since the interrupt system is automatically disabled after an interrupt grant.&lt;/p&gt;&#xA;&lt;p&gt;The 12-bit vector address generated by the PIE consists of 10 high order bits from the vector register, defined by the user during system initialization, and two low order bits which indicate the sense input that generated the interrupt. Therefore, if the instruction in location 0001_8 is IOF - 6002_8, the processor will branch to 1 of 4 locations, depending on which of the sense lines within a PIE generated the request. Each one of these locations must contain a Jump instruction pointing to the specific service routine for the corresponding sense input.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So Intersil &lt;strong&gt;did&lt;/strong&gt; fix the zero page usage problem, and even allowed for chainable vectored interrupts, but with an additional chip (which would need custom software anyhow) instead of modifying the CPU, preserving software compatibility.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-09-12T07:32:55.210" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7543" PostTypeId="2" ParentId="7540" CreationDate="2018-09-11T12:54:27.497" Score="5" Body="&lt;p&gt;Wikipedia seems to be wrong here. From the &lt;a href=&quot;http://www.bitsavers.org/components/intersil/Intersil_IM6100_12-Bit_CMOS_Microprocessor.pdf&quot; rel=&quot;noreferrer&quot;&gt;Intersil Manual&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;b&gt;DEVICE INTERRUPT GRANT TIMING &lt;/b&gt;&#xA;  The current content of the Program Counter, PC, is deposited in location 0000 of the memory and the program fetches the instruction from location 0001... &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That clearly implies to me there is no address stored at 0001.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond that, there's not much of a difference between storing an &lt;em&gt;address&lt;/em&gt; at 0001 or a &lt;em&gt;JMP instruction&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-09-11T12:54:27.497" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7544" PostTypeId="2" ParentId="7534" CreationDate="2018-09-11T17:00:15.813" Score="3" Body="&lt;p&gt;These might not qualify as authoritative, but they do claim to be based on the original X68000 catalogs (over a few years):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.giantbomb.com/sharp-x68000/3045-95/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Giant Bomb page on the X68000&lt;/a&gt; says it launched at 369,000¥, approximately $2,500 (US) at the time;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://gamesx.com/wiki/doku.php?id=x68000:x68000_product_catalog&quot; rel=&quot;nofollow noreferrer&quot;&gt;GameSX has a price list&lt;/a&gt; which confirms this figure.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Two adverts show pricing information:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=eT4xBmc6iYM&quot; rel=&quot;nofollow noreferrer&quot;&gt;an ad for the first X68000 model&lt;/a&gt;, repeating the 369,000¥ figure;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=E4M0YNfRZCM&quot; rel=&quot;nofollow noreferrer&quot;&gt;an ad for the Expert HD and Pro models&lt;/a&gt;, with prices matching the GameSX list.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-11-10T11:41:57.160" LastActivityDate="2019-11-10T11:41:57.160" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7545" PostTypeId="2" ParentId="7541" CreationDate="2018-09-11T17:30:32.473" Score="8" Body="&lt;h2&gt;Like the Atari 2600, it recalculates each scanline right before it is drawn&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By reloading the VIC-II's control registers via machine code hooked into the raster interrupt routine (the scanline interrupt), one can program the chip to generate significantly more than 8 concurrent sprites (a process known as sprite multiplexing), and generally give every program-defined slice of the screen different scrolling, resolution and color properties.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&amp;#91;...&amp;#93;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Utilization of raster interrupts is an essential part of C64 game programming.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_VIC-II&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/MOS_Technology_VIC-II&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I speculate that this game is installing its own raster interrupt handler.  However, instead of manipulating the sprites (as the Wikipedia article suggests), the handler actually recalculates the background for &lt;em&gt;just that scanline&lt;/em&gt;.  It's not a lot of pixels, it can be done fairly quickly, and there are probably plenty of shortcuts to speed up the calculation.  The players are probably drawn by sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is basically how the Atari 2600 game console drew the screen.  The 2600 did not even have enough RAM for the whole screen -- just enough for the next scan line!  So at the end of each line, it would quickly calculate the contents of the next scan line.  Clever, but a pain to program!&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2018-09-12T01:00:36.577" LastActivityDate="2018-09-12T01:00:36.577" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7547" PostTypeId="1" CreationDate="2018-09-11T22:34:43.530" Score="2" ViewCount="1025" Body="&lt;p&gt;What are the features of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_MCS-51&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel 8051&lt;/a&gt; architecture that allow it to successfully act as a microcontroller? Hypothetically can the general-purpose 8-bit architecture like &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8080&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel 8080&lt;/a&gt; do everything the 8051 can? If not, why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, can the bit addressable IO ports of the 8051 be emulated by using bitmasking with the &lt;code&gt;IN&lt;/code&gt; and &lt;code&gt;OUT&lt;/code&gt; commands of the 8080? Or are the IO ports of the 8051 intrinsically different from the databus of an 8080? For example modern microcontrollers often have &lt;a href=&quot;https://electronics.stackexchange.com/questions/96932/internal-circuitry-of-io-ports-in-mcu&quot;&gt;dedicated circuitry&lt;/a&gt; for the IO ports, did the 8051 have to do this to become a microcontroller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume that the memory, UART, and timer/counter of the 8051 are made external. That is they are interfaced with as external devices as they would be in the 8080.&lt;/p&gt;&#xA;" OwnerUserId="6672" LastEditorUserId="4692" LastEditDate="2018-09-13T14:41:26.160" LastActivityDate="2018-09-13T14:41:26.160" Title="What is the difference between an 8080 and an 8051?" Tags="&lt;8080&gt;&lt;microprocessor&gt;&lt;8051&gt;" AnswerCount="1" CommentCount="17" ClosedDate="2018-09-12T21:56:43.733" ContentLicense="CC BY-SA 4.0" />
  <row Id="7548" PostTypeId="2" ParentId="7547" CreationDate="2018-09-12T05:00:16.203" Score="8" Body="&lt;p&gt;I'll keep this answer relevant to retrocomputing.  The remaining aspects of your question belong in Electronics.SE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without getting into those particulars, you ought to know that these chips are not at all related.  One is not the ancestor of the other.  They are entirely different architectures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8080 was the CPU for the Altair, the first popular microcomputer, the computer on which Bill Gates wrote his first BASIC interpreter, and an extremely important milestone in computing history.  However, that particular chip is now completely obsolete, although it was a major influence on architectures still in use such as the x86 and the Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8051 was never used as a main processor in a commercial system, but had some use in peripherals and embedded applications such as microwave ovens.  The architecture is still used today.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2018-09-12T16:44:58.907" LastActivityDate="2018-09-12T16:44:58.907" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7549" PostTypeId="1" AcceptedAnswerId="8750" CreationDate="2018-09-12T08:55:50.597" Score="15" ViewCount="983" Body="&lt;p&gt;Many games, for example, &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5042/how-to-check-the-c64-graphics-mode-used-by-maniac-mansion&quot;&gt;Maniac Mansion&lt;/a&gt;, or &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7541/whats-a-good-way-to-implement-this-splashing-water-effect-on-the-c64&quot;&gt;Kissenschlacht&lt;/a&gt;, use two screenmodes. Oftentimes, a bitmap mode for the main screen, and a text mode for the lower part which displays scores or whatever. Considering how the raster moves across the screen, it's not so hard to implement. It's basically, set up a raster interrupt, and then change the mode in the interrupt routine. Same way you open up the lower and upper borders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, with careful timing, the left and right borders may be opened up too. So I'm wondering if a similar technique can be used to change the screen mode partway across a line, so that the whole screen is divided into, say, a textmode left half and a bitmapped right half. Has this ever been done or could it be done?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-01-14T11:32:30.503" Title="Can a Commodore 64 use two screenmodes on one scanline?" Tags="&lt;commodore-64&gt;&lt;graphics&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7551" PostTypeId="1" AcceptedAnswerId="7553" CreationDate="2018-09-12T17:02:32.863" Score="33" ViewCount="5359" Body="&lt;p&gt;Some of the later NES/Famicom games contained not just ROM, but coprocessors for better sound and graphics than the original console hardware could provide, such as the MMC5: &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/MMC5&quot; rel=&quot;noreferrer&quot;&gt;https://wiki.nesdev.com/w/index.php/MMC5&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the console itself, the cartridge slot, do anything special to support these coprocessors, was it farsighted planning in the original design? Or is the ability to add such coprocessors later, an automatic consequence of the ability to address ROM? Looking at the pinout &lt;a href=&quot;https://forums.nesdev.com/viewtopic.php?f=9&amp;amp;t=14924&quot; rel=&quot;noreferrer&quot;&gt;https://forums.nesdev.com/viewtopic.php?f=9&amp;amp;t=14924&lt;/a&gt; the most suggestive thing I can see is IRQ; it does not seem that should be necessary just for ROM cartridges?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I get the impression that by the time the SNES was designed, they were explicitly thinking about later coprocessor support, but I would not have expected such thinking at the time of design of the original Famicom, which is why I am curious.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-09-13T14:33:24.653" Title="Did the NES do anything special to support coprocessors?" Tags="&lt;nes&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7552" PostTypeId="2" ParentId="7551" CreationDate="2018-09-12T17:18:38.953" Score="15" Body="&lt;p&gt;Yes and no. Since the cartridge slot contained a complete basic CPU bus (Address + Data + Clock + R/W), any memory mappable coprocessor can be implemented. No specific coprocessor handling lines are present - and the CPU wouldn't support such anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And the SNES was only specific in having designated lines to handle a game specific security chip - besides that it was again rather plain CPU/Memory design).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2018-09-12T19:47:28.793" LastActivityDate="2018-09-12T19:47:28.793" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7553" PostTypeId="2" ParentId="7551" CreationDate="2018-09-12T19:50:43.120" Score="24" Body="&lt;p&gt;You're correct about it being a consequence of cartridges being able to observe the PPU memory bus. The advanced video features of the MMC5 and other mappers might have been trivial to add if Nintendo provided more signals to expose the internal state of the PPU to the cartridge, but they didn't, so these chips function by carefully monitoring PPU memory accesses to infer what it is doing as there isn't a more direct line of communication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It takes a lot of logic to do that which is why the advanced features didn't show up in earlier cartridges made with discrete TTL parts (outside of bankswitching which is trivial) until they could justify the cost of adding semi-custom parts (gate arrays) to implement the PPU bus monitoring.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nintendo did have foresight to push the cost of graphics memory into the cartridges knowing memory gets cheaper over time, which allowed for interesting design choices like using RAM and large ROMs. But the special functions of the MMC2, MMC5, and scanline counting across various mappers were a consequence of the design rather than something intentional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For audio it's a different matter, the Famicom had a dedicated audio input pin so they always intended for that kind of feature expansion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SNES has a high speed channel for moving data from external memory into video RAM which was what made things like the SuperFX and SA-1 possible. I don't think they envisioned those exact uses but understood that having a way to shuttle in data quickly would be beneficial which it turned out to be.&#xA;It's rather unfortunate their CD-ROM peripheral never took off because slow access to video memory is what hampered streaming video on the Genesis and TurboGrafx CD systems.&lt;/p&gt;&#xA;" OwnerUserId="8734" LastActivityDate="2018-09-12T19:50:43.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7554" PostTypeId="1" AcceptedAnswerId="7556" CreationDate="2018-09-12T21:53:02.260" Score="1" ViewCount="859" Body="&lt;p&gt;I found a die photo of the NES video chip: &lt;a href=&quot;http://visual6502.org/images/RP2C02/NES_RP2C02_G_8F1_1B_20x_1600w.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://visual6502.org/images/RP2C02/NES_RP2C02_G_8F1_1B_20x_1600w.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the big block of fairly regular circuitry at the bottom left is the sprites? There is an 8x8-ness about it, and the NES has 8 sprites per scan line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The big block of even more regular circuitry at the top right looks like RAM. What did the PPU store, that would take up that much space?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The irregular circuitry at the top left, I'm guessing implements tiles, the other major feature of the PPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone have any idea what the semi-regular circuitry at the bottom right might be?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though it's hard to be sure about scale, the whole chip kind of looks smaller (in terms of eyeball guess at transistor count) than the VIC-II. As I understand it, the VIC-II came out a year earlier, implemented in 5-micron CMOS, was a big complex chip for its time (best guess maybe 15k transistors), had initial yield problems. Maybe Nintendo went for a smaller chip because they didn't feel they could have an interim period of charging $595 for the machine the way Commodore did? Having only one mode would also help some.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the thing I am most curious about is how small the sprite circuitry is compared to the VIC-II. Granted the sprites are smaller, but still 8 pixels 3 colors = 2 bytes, compared to 12 pixels 3 colors = 3 bytes, so I would've expected maybe 2/3 the size, but it's actually about 1/4 of the chip compared to 3/4, so that's more like 1/3 the relative size, and that of a chip that looks smaller. How?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-09-13T14:03:47.650" Title="NES PPU die photo" Tags="&lt;nes&gt;&lt;chip&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7555" PostTypeId="2" ParentId="7554" CreationDate="2018-09-13T02:00:48.710" Score="3" Body="&lt;p&gt;The RP2C02 was manufactured in 6µm As far as I know the regions are this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The regular structures in the top left should be at least two counters (vertical) and CPU address decoder (to the right)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Top Right are two symetric RAM blocks and its address decoder inbetween. Each seams to be 32x32 bits, or 128 Byte. This adds up to 256 bytes, or exactly what the &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/PPU_OAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;sprite data&lt;/a&gt; is. The structure to the left would be buffers for loading/reading them. Maybe it also includes the 32 byte of sprite attributes - I have a hard time counting them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rectangular block on the middle left side above the large area is again some RAM, maybe colour palette? That would be 32bytes, which would make it rather similar in density with the sprite RAM. To the top and right is decode/access logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lower right seams like something that combines data and serializes it. Maybe that's a the &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/PPU_rendering&quot; rel=&quot;nofollow noreferrer&quot;&gt;rendering pipeline&lt;/a&gt; combining the tile data read from RAM with prepared sprite data, before outputing it. There are two large counters atop which may handle (external) RAM access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for the huge block(s) on the lower left. While it looks RAM like, it contains way too much transistors and connections to be a simple RAM. That's a lot of logic. Even considering that it might be dual port (not so likely) wouldn't account for that. The structure direct above looks quite like a (priority) decoder. So my assumption would be that this is the secondary OAM holding the preprocessed 8 sprites that can be displayed on a line. The logic becomes plausible with the rather complex process of sprita data preperation the PPU does (see &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/PPU_sprite_evaluation&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/PPU_sprite_priority&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;). Ther is a lot of comparion and priority deciosions to be made in real time per pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Caveat: all above are just guesses from what I think I see in that scan, combined with what I know about the PPU.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-13T14:03:47.650" LastActivityDate="2018-09-13T14:03:47.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7556" PostTypeId="2" ParentId="7554" CreationDate="2018-09-13T03:33:16.830" Score="7" Body="&lt;p&gt;There's been a simulation of the RP2C02 chip created called &lt;a href=&quot;https://www.qmtpro.com/~nes/chipimages/visual2c02/&quot; rel=&quot;noreferrer&quot;&gt;Visual 2C02&lt;/a&gt;.  It based on the same code that is used to make Visual 6502. It's author provided &lt;a href=&quot;https://www.qmtpro.com/~nes/chipimages/?news=all#rp2c02&quot; rel=&quot;noreferrer&quot;&gt;several images of the chips layers&lt;/a&gt; including one describing the purpose of various &lt;a href=&quot;https://www.qmtpro.com/~nes/chipimages/rp2c02g/regions.png&quot; rel=&quot;noreferrer&quot;&gt;regions&lt;/a&gt; on the chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the text in the regions image can be very hard to read given the high resolution of the image, I've created a version of the Visual6502.org's chip scan in your question with the regions labelled:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.csclub.uwaterloo.ca/~rridge/rp2c02-scan-regions.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2OHdS.jpg&quot; alt=&quot;RP2C02 chip scan with marked regions&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So big block of regular circuitry on the bottom left is the Evaluated Sprite Data. The big block of even more regular circuitry at the top right is the Sprite RAM with the Sprite RAM Column Address Decoder in between. The irregular circuitry at the top left implements various functions, not all of which have been identified, but include regions labelled Analog Video Signal Generator, I/O Controller (?), Palette RAM, Horizontal and Vertical position counter, and CPU I/O Decoder ($2000-$2007). The semi-regular circuitry at the bottom right has also not been fully identified but the labels given there are VRAM Address (V), VRAM Address (T) + fine X scroll and Background render pipeline.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2018-09-13T03:33:16.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7557" PostTypeId="1" AcceptedAnswerId="7558" CreationDate="2018-09-13T10:16:33.030" Score="3" ViewCount="329" Body="&lt;p&gt;This is more a question to satisfy my curiosity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When looking at the original timing diagrams for reading and writing (e.g. for the 8255 and the 8250), these signals are never expressed in function of a clock. The 8255 doesn't even have a clock input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, is this done using level-sensitive latches?&lt;/p&gt;&#xA;" OwnerUserId="7388" LastActivityDate="2018-09-13T16:15:38.277" Title="Did the original Intel peripherals use latches as input registers?" Tags="&lt;8080&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7558" PostTypeId="2" ParentId="7557" CreationDate="2018-09-13T10:31:48.510" Score="5" Body="&lt;p&gt;Looking at the 8255 datasheet, timing is giving in reference the the &lt;code&gt;RD&lt;/code&gt; (read) and &lt;code&gt;WR&lt;/code&gt; (write) signals. The 8080, has &lt;code&gt;READY&lt;/code&gt; and &lt;code&gt;WRITE&lt;/code&gt; signals, which are described in the 8080 datasheet as&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;READY: The READY signal indicates to the 8080A that valid memory or input data is available on the 8080A data bus. This signal is used to synchronize the CPU with slower memory or I/O devices. If after sending an address out the 8080A does not receive a READY input, the 8080A will enter a WAIT state for as long as the READY line is low. READY can also be used to single step the CPU.&lt;/p&gt;&#xA;&lt;p&gt;WRITE: The WR signal is used for memory WRITE or I/O output control. The data on the data bus is stable while the WR signal is active low (WR = 0).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, yes, the timing is clockless. No, it doesn't use level-sensitive latches; instead the various latches (in the CPU and periphery) are triggered by edges on these signals or combinations that are produced by glue logic.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-09-13T14:31:04.650" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7559" PostTypeId="1" CreationDate="2018-09-13T12:40:57.790" Score="17" ViewCount="3274" Body="&lt;p&gt;Wikipedia says on &lt;a href=&quot;https://ru.wikipedia.org/wiki/TI-99/4A#%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80&quot; rel=&quot;noreferrer&quot;&gt;Russian page&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Однако к 16-разрядной шине были подключены только 256 байт статической памяти и системное ПЗУ. Остальная память (ОЗУ) и периферийные устройства были 8-разрядными и подключались через мультиплексор, что требовало удвоения числа циклов обращения к ним.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;which means&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So anyway the 16-bit bus was connected to only 256 bytes of static RAM, and the system's ROM. The rest of the memory and peripherals were 8-bit and were connected through a multiplexor, which means it takes twice as many cycles to access.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and on its &lt;a href=&quot;https://de.wikipedia.org/wiki/Texas_Instruments_TI-99/4A#Speicherchips_und_Speicherorganisation&quot; rel=&quot;noreferrer&quot;&gt;German page&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Auf diese Weise können alle 8-Bit-Systemkomponenten wie Grafikchip, Soundchip oder GROM-Chips von der CPU mit der entsprechenden Wortbreite angesteuert werden.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;which means&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In this way, all the 8-bit components such as the graphics chip, sound chip, and GROM chips may be controlled by the CPU with the corresponding wordsize.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now given that the TMS9900 has a 16 bit databus, it seems to me that they could have put all memory and all periphery on that bus. It would have saved the cost of the multiplexor, and made the computer a good deal faster too. Presumably it would have simplified the routing of the circuit board also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If some hardware register is only 8 bits wide, it's not a problem to ignore the upper 8 bits, is it? Writing - just ignore the bits. Reading - just let the line float. In this way, it would behave the same way as the upper bits of the Color RAM of the Commodore 64, which is 4-bit memory connected to an 8-bit bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is why the TI-99/4 had these two databuses. Why not put everything on a single databus.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-09-13T15:46:18.400" LastActivityDate="2018-12-28T04:50:21.657" Title="Why did the TI-99/4 have two databuses?" Tags="&lt;memory-layout&gt;&lt;ti-99&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7560" PostTypeId="2" ParentId="7559" CreationDate="2018-09-13T13:07:49.720" Score="9" Body="&lt;p&gt;If you look at the description of the databus multiplexer e.g. &lt;a href=&quot;http://www.unige.ch/medecine/nouspikel/ti99/architec.htm#mpx&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The TMS9900 being a 16-bit processor, it has 16 data lines and 15 address lines. However, only the console GROMs (&amp;gt;0000-1FFF) and the scratch-pad RAM (&amp;gt;8300-83FF) are accessed in this way. Peripheral memory in the range &amp;gt;2000-7FFF and &amp;gt;A000-FFFF is accessed via an 8-bit data bus, and a 16-bit address bus. A small circuit in the console multiplexes the data bus, creates the 16th address line (A15) and puts the TMS9900 on hold while the least significant byte (the one at the odd address) is processed.&lt;/p&gt;&#xA;&lt;p&gt;The VDP is hooked on the 16-bit bus, but only to lines D0-D7, i.e. it accesses the most significant byte only. The GROMs, the sound chip, and the speech synthesizer are hooked to the multiplexed 8-bit bus. However, their selection logic senses A15, so they only react to even addresses. In both cases the multiplexer (uselessly) puts the CPU on hold, since all these devices map in the range &amp;gt;8400-9FFF.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;you can see that the VDP is connected in exactly that way.&lt;/p&gt;&#xA;&lt;p&gt;However, it would have hurt too much to throw away half of the peripheral memory (a 64KB address range isn't that much in the first place).&lt;/p&gt;&#xA;&lt;p&gt;The multiplexer consists of a few chips, and isn't that expensive.&lt;/p&gt;&#xA;&lt;p&gt;As for why the peripheral memory doesn't have 16 bit databus: I don't know. Possibly they wanted to keep the peripherials more simple (at the cost of making the main board a bit more complex).&lt;/p&gt;&#xA;&lt;p&gt;Having an 8-bit databus instead of a 16-bit databus for the periphery has actually &lt;a href=&quot;http://www.unige.ch/medecine/nouspikel/ti99/pebox.htm#Bus%20multiplexing&quot; rel=&quot;noreferrer&quot;&gt;worse consequences&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[...] the data bus has to be multiplexed. This is achieved by a small logic circuit inside the TI console: any memory access to the range &amp;gt;2000-7FFF and &amp;gt;A000-FFFF is multiplexed. The least significant byte (odd address, D8-D15) is passed first, and this is signaled by a high level on the additional address line A15. For input operations, this byte is latched into the console by a 74LS373 D-type latch. Then the multiplexer puts the CPU on hold (with the READY line) and places the most significant byte on the data bus (even address, D0-D7), which is signaled by a low level on A15. The operation will only be completed after 4 clock cycles on Phi3*, by releasing the block on the TMS9900.&lt;/p&gt;&#xA;&lt;p&gt;Concretely, this means several drawbacks:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It is impossible to access only one byte: each read/write instruction actually consists in two read/write cycles, one for the odd byte and one for the even byte.&lt;/li&gt;&#xA;&lt;li&gt;While dealing with the second byte, the CPU is put on hold. Thus all peripheral access is of the 4 wait-state type.&lt;/li&gt;&#xA;&lt;li&gt;As the TMS9900 has a 16-bit data bus, it never deals with single bytes. Even an instruction like MOVB actually writes a 16-bit word. To avoid erasing the lower byte, the CPU reads the word first, changes the most significant byte and rewrites the whole word. For peripheral card it means that every write operations (4 wait cycles) is preceded by a read operation to the same pair of addresses (4 more wait cycles).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So the &amp;quot;an 8-bit processor was replaced by an 16-bit processor&amp;quot; explanation from wikipedia mentioned in another answer sounds very plausible.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-09-13T13:19:34.933" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7561" PostTypeId="2" ParentId="7559" CreationDate="2018-09-13T13:11:30.477" Score="22" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TI-99/4A#First_personal_computer_with_a_16-bit_processor&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The unusual architecture of the 99/4 series is documented to be due to the failure of the 9985, an 8-bit processor which was being created specifically for the machine. When it was abandoned, the 16-bit 9900 was selected to replace it, and a great deal of &quot;glue logic&quot; had to be added to fit the processor into the existing design, while no changes were made to take advantage of the 9900's strengths.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Surprisingly for Wikipedia, especially since this “is documented”, there is no reference to supporting documentation.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently the TI-99/4 was designed as a 8-bit system, but when its intended 8-bit CPU failed to materialise, the 9900 was retro-fitted into it. The 9900’s architecture, in particular its reliance on external registers accessed &lt;em&gt;via&lt;/em&gt; its 16-bit databus, meant that a 16-bit bus had to be added alongside the existing 8-bit bus.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-09-14T08:46:46.827" LastActivityDate="2018-09-14T08:46:46.827" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7562" PostTypeId="2" ParentId="7557" CreationDate="2018-09-13T14:24:10.443" Score="3" Body="&lt;p&gt;There are no clock inputs in 8255 but that does not mean that for example /RD and /WR strobes couldn't be used as clock inputs to some internal clocked flip-flops that latch incoming data or trigger some internal state machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The actual answer could be found through reverse-engineering the chips in question (check &lt;a href=&quot;http://visual6502.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;visual6502.org&lt;/a&gt; for similar reverse-engineering projects).&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-09-13T14:24:10.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7563" PostTypeId="2" ParentId="7551" CreationDate="2018-09-13T14:33:24.653" Score="1" Body="&lt;p&gt;Actually, there are features that allow cartridge coprocessor to alter completely screen of the NES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The picture data is constantly read from the cartridge during the display: specifically, the tile data is read.&#xA;So by replacing tile data seen by the PPU in NES in a clever way, one can display arbitrary pictures with less limitations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Famicom, the sound is also passed through the cartridge, so here arises the possibility to alter or even completely replace it inside the cartridge.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-09-13T14:33:24.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7564" PostTypeId="2" ParentId="7559" CreationDate="2018-09-13T14:43:36.210" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So my question is why the TI-99/4 had these two databuses. Why not put everything on a single databus?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The TMS9900 CPU only has three on-chip registers, none of them being so much as an accumulator.  I.e., &lt;strong&gt;every&lt;/strong&gt; mathematical and logical operation occurs in RAM registers.  From &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TI-99/4A&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Only the Program Counter, Status Register, and Workspace Pointer registers are on the chip; all work registers are kept in RAM at an address indicated by the Workspace Pointer. 16 registers are available at any given time, and a context switch instruction which changed to another workspace automatically allows fast context switches compared to other processors which may have had to store and restore the registers. For CPU RAM, the machine has only 256 bytes of &quot;scratchpad&quot; memory to support the storage of workspaces. This memory is placed directly on the 16-bit bus with zero wait states, making it much faster than any other memory available to the system. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The professional versions of the TMS9900 family had on-chip cache which handled the registers.  The home version instead used 256 bytes of &quot;scratchpad RAM&quot; to emulate cache.  While faster than other RAM on the system, the effectively registerless design led to one of the slowest 16-bit computers ever.  Proponents say that this design allowed for extremely quick context switches.  True.  But once in a context (i.e. actually doing something), all operations were off-chip.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2018-09-13T14:43:36.210" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="7565" PostTypeId="5" CreationDate="2018-09-13T15:52:47.703" Score="0" Body="" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-09-13T15:52:47.703" LastActivityDate="2018-09-13T15:52:47.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7566" PostTypeId="4" CreationDate="2018-09-13T15:52:47.703" Score="0" Body="For questions about the Texas Instruments TI-99 series of micro-computers, in particular the TI-99/4A." OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-09-13T15:52:47.703" LastActivityDate="2018-09-13T15:52:47.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7567" PostTypeId="2" ParentId="7549" CreationDate="2018-09-13T16:00:05.860" Score="6" Body="&lt;p&gt;I'm going to go out on a limb; after thorough reading of &lt;a href=&quot;http://www.cebix.net/VIC-Article.txt&quot; rel=&quot;noreferrer&quot;&gt;The MOS 6567/6569 video controller (VIC-II) and its application in the Commodore 64&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;graphics modes are directly selected by the bits in &lt;code&gt;d011&lt;/code&gt; and &lt;code&gt;d016&lt;/code&gt; (so e.g. they're not just latches that are copied somewhere else upon horizontal or vertical retrace); and&lt;/li&gt;&#xA;&lt;li&gt;most of the pipeline is common, and runs at a fixed clock — the selected mode affects address calculation for pushing to a shift register, which is always some translation of the same mode-independent global counters; and translation of whatever comes out of the register.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;No mention is made anywhere in the documentation of anything that would cause mode changes to take effect anything other than instantly, and the idea of raster effects that cause vertical boundaries is well-enough established that you can find &lt;a href=&quot;https://csdb.dk/forums/?roomid=10&amp;amp;topicid=76993&quot; rel=&quot;noreferrer&quot;&gt;the occasional argument about it&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several vertical raster split demos are available on Youtube but alas I was unable to identify one that I could definitively say was a mode change rather than a palette effect.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-09-13T16:00:05.860" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7568" PostTypeId="2" ParentId="7557" CreationDate="2018-09-13T16:15:38.277" Score="3" Body="&lt;p&gt;Many I/O devices, especially historically, had bus timing entirely controlled by transitions on chip-select and read/write lines.  Even devices like UARTs which need to have clocks for various purposes would often have bus timing which was independent of that clock, thus allowing them to be used on a wide range of CPUs with different clocking systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest difficulty with this approach is something called metastability, which wasn't thoroughly understood in the 1980s.  If a device on the bus initiates a read of UART's status almost the precise moment an incoming byte is completed, it would be equally acceptable for the device to report a zero in the &quot;is data ready&quot; bit [the data wasn't ready when the request was received] or a one [the data arrived just in time to be detected].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, there's a third possibility: the device might drive the data bus with a logic level somewhere between a high and low signal, or might start to drive it with a low level and switch to a high level sometime in the middle of a cycle.  While a CPU might regard that situation as equivalent to either outputting zero or outputting 1, it might also end up in a weird state, especially if different parts of the CPU grab the signal at slightly different times.  Many products in the 1980s didn't pay much attention to such issues, and would have occasional weird failures as a result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The normal way to prevent problems like this is to use a device called a &quot;double synchronizer&quot;.  This will ensure that an input transition that occurs near a clock edge will end up being regarded as having been either before it or after it, but at the expense of not being able to say what the signal level currently is--merely what it used to be two cycles ago.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, trying to use a double-synchronizer in a UART without requiring the use of a bus clock would require doing that some bus-initiated action occur before a cycle that's supposed to report UART status, and have the latter action report what the status was when the former action occurred.  For example, one could specify that each read of the status register reports the value it had at the previous read request, so code wanting current data would need to read the register twice consecutively.  I don't think I've ever seen a UART actually work that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other possibility is to require the use of a bus clock.  If serial transmission and reception use a different clock, a double synchronizer would still be necessary, but delaying data-readiness indications by two bus clocks is likely to be less irksome than requiring the use of two separate read events to capture it.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-09-13T16:15:38.277" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7570" PostTypeId="1" CreationDate="2018-09-13T17:43:27.900" Score="15" ViewCount="921" Body="&lt;p&gt;I'm having a hell of a time getting this to work. I've got a Casio fx-720p + FA-3 cassette interface, a TRS-80 PC-3 with its cassette interface and printer dock, and a Tandy 102 with a cassette cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried hooking all three of these to both a modern PC running Audacity, and a small Philips digital audio recorder that's equipped with a mic input and records as WAV (i.e. no mp3 compression artifacts). On all of the computers, I can SAVE/CSAVE a program, and get an audio file that &lt;em&gt;sounds&lt;/em&gt; like I would expect, i.e. lead-in tones, and separate bursts of data that sound like a file header and program data separated by a brief pause.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also checked continuity of audio cables with a multimeter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try as I might, I can't get &lt;em&gt;any&lt;/em&gt; of these computers to successfully load or verify the program that was just saved. I've tried a wide range of volume settings (the Philips recorder has 15 discrete volume levels, and I tried every single one with the Casio). The Tandy 102 passes the audio input through to its internal modem speaker when the input volume is above a certain threshold, but it juts sits there with the &quot;cload?&quot; command on the display, never reporting any success or failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I need to be concerned about the &lt;em&gt;recording&lt;/em&gt; volume level? The Philips recorder just has &quot;high&quot; and &quot;low&quot; sensitivity settings, which I'm guessing act as a coarse mic gain (either that or &quot;high&quot; sensitivity just compresses the dynamic range by boosting the low end; I haven't tested extensively, though I definitely hear a slight loudness difference between the two settings). What should the graph look like in Audacity? Just shy of clipping at +/-1.0? Hovering around +/-0.5?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I even tried hooking the Casio to my record player/cassette deck stereo system, using a sealed new-old-stock cassette tape, with similar (i.e. unsuccessful) results. I could hear the recorded data, but not actually load it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the tricks to making this work? I would expect these computers to be pretty forgiving about audio, given the immense variability in quality and speed/pitch regulation of the average 1980s tape recorder, but even near-flawless digital recordings are getting me nowhere. Does the fact that these are all mono plugs being used in stereo jacks have anything to do with it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FOLLOWUP: I acquired an adapter to split a 1/8&quot; stereo jack into independent left/right 1/8&quot; mono audio jacks. Still nothing from the Tandy 102; I've yet to test the other machines with it.&lt;/p&gt;&#xA;" OwnerUserId="4459" LastEditorUserId="4459" LastEditDate="2018-09-17T12:07:59.577" LastActivityDate="2020-12-21T23:46:53.320" Title="Using a modern PC or other digital audio recording device as a cassette recorder replacement" Tags="&lt;cassette-tape&gt;&lt;storage&gt;" AnswerCount="3" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7571" PostTypeId="1" CreationDate="2018-09-13T21:48:51.220" Score="2" ViewCount="151" Body="&lt;p&gt;Well, I've downloaded an old non-English textual adventure, which of course, &quot;for the sake of professionalism&quot; have list disabled. Even after entering pokes for enabling &quot;run-stop/restore&quot; and for enabling &quot;list&quot; it continually questions for an input (in-game). I've tried to enter listing even on starting screen but it regards an emulated &quot;run/stop-restore&quot; just as any other button. &quot;press any key&quot; (just in our language...) .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link with downloadable .prg:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://retrospec.sgn.net/users/tomcat/yu/C64/MiscGames/Html/BezMilosti.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://retrospec.sgn.net/users/tomcat/yu/C64/MiscGames/Html/BezMilosti.php&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S.: Because of auto-loading of .prg format when dragged over screen in V.I.C.E I've even made a new .d64 disk and as such, provoked the infamous &quot;Loading. Ready.&quot; state. From that place I've entered pokes indeed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. 2: I've posted a theme and thread about this problem under &quot;scene&quot; category on &quot;lemon&quot;, the top-ranked site dedicated to commodore:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*edit (importing of the link):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.lemon64.com/forum/viewtopic.php?t=69043&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.lemon64.com/forum/viewtopic.php?t=69043&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10564" LastActivityDate="2018-09-14T22:40:20.760" Title="Can't enable list even with “enable run-stop” poke" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;microsoft-basic&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7572" PostTypeId="2" ParentId="7559" CreationDate="2018-09-13T23:54:09.433" Score="18" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Now given that the TMS9900 has a 16 bit databus, it seems to me that they could have put all memory and all periphery on that bus. It would have saved the cost of the multiplexor, and made the computer a good deal faster too. Presumably it would have simplified the routing of the circuit board also.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes it would - if the computer had been intended to be built with a 9900 in the first place.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So my question is why the TI-99/4 had these two databuses. Why not put everything on a single databus.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR: The CPU operates a 16 bit bus, and the core components are on this bus. The 8 Bit bus is an extension or I/O bus - essentially what's accessible on the right side connector and the cartridge port&lt;/strong&gt;. Think of this like 32 Bit Local Bus vs. 16 Bit ISA on a 486 PC.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;For a thorough explanation this calls for a differentiated answer about a design and what happened.&lt;/p&gt;&#xA;&lt;h2&gt;The Design&lt;/h2&gt;&#xA;&lt;p&gt;The 99/4 was meant to be a low cost home computer design. The 9900 was, at that time, a top end 16 bit processor (*1) with great performance, but also a rather high price tag. 990 family CPU boards using a 9900 were priced close to and above 1000 USD. Building a home computer with a 9900 would have made a quite powerful, but also rather expensive machine - not least the fact that it would need 16 bit memory, making humongous (in 1977/78 (*2)) 32 KiB the basic RAM (*3). Similarly, ROMs must also offer 16 bit data, and so on. A machine like that would have been extremely expensive, and definitely not able to compete against other home computers - and consoles - at the same time.&lt;/p&gt;&#xA;&lt;p&gt;But there was also an 8 bit version, the TMS9980. It's basically to the 9900 what the 8088 is to the 8086. The same CPU, just with an external 8 bit bus and a memory interface splitting each word access into two byte wide accesses. On the downside, it would (almost) halve the CPU speed. Not really what engineers like to design.&lt;/p&gt;&#xA;&lt;p&gt;Without a closer look, this only leaves the choice between a great but expensive machine and a cheap(er) but quite slow one. Now, looking at the most common job for a home computer, running BASIC programs, reveals that most of the memory, where the BASIC code resides, is only accessed in 8 bit portions anyway. It also doesn't really matter if that access is slower than usual, as there will be many native instructions executed between each fetch of BASIC code. Furthermore, there are not many other RAM locations a BASIC interpreter (and an underlying BIOS) needs at all.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;So the idea was born to use a version of the 9980 with a 16 bit wide on-board ROM for some BIOS and BASIC, some 16 bit wide RAM (256 Bytes (*4)) and an external 8 bit bus to access user RAM and other I/O components.&lt;/em&gt; The core system could run at full speed, while slower and less frequently used components were accessed using the 8 bit I/O bus (*5), thus enabling the use of less expensive standard 8 bit components.&lt;/p&gt;&#xA;&lt;p&gt;The story could end here, but the TI engineers even went a step further and designed the whole machine around a streaming based access concept. External units that offered more than just a few port registers were supposed to offer a streaming access to their content. This means that after a start address (within the device) was set, each consecutive access should deliver the next byte - or take one when writing. Each of these streams were to be accessed by some (hard or dynamic) designated port, mapped into CPU address space, effectively enabling an almost unlimited amount of RAM or ROM. The latter being most important for game cartridges, as it was already obvious that limitation to 4 KiB as on the 2600 is a serious issue.&lt;/p&gt;&#xA;&lt;p&gt;The streaming concept was also used for video and BASIC RAM. Instead of just mapping 16KiB plain into the main address space and having that shared with some CRT controller, the 9918 was designed to manage all RAM and offer streaming access to the host system. This not only saved the design of a separate DRAM controller, but also let BASIC store the program within video memory, separating it from any limitations of the CPU address space. In theory the VDP RAM could be extended way beyond 16 KiB (*6) without ever colliding with any other component. A 1 MiB 99/4 would just have required an additional address register ... and there was plenty of unused address space in which to put it.&lt;/p&gt;&#xA;&lt;p&gt;A similar concept for streaming ROMs was devised, so called &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TI-99/4A#Graphics_Read-Only_Memory&quot; rel=&quot;noreferrer&quot;&gt;GROM&lt;/a&gt;. Without modification, a standard 99/4 could hold up to 16 external GROM with 40 KiB each (in default configuration). 640 KiB ROM for a 1977 machine does sound nice, doesn't it? (*7)&lt;/p&gt;&#xA;&lt;p&gt;They even pushed it a level ahead and didn't put BASIC into the 16 bit ROM, but a simple basic OS plus a collection of routines, from memory and screen management to floating point ... and an interpreter for a general purpose virtual machine. Today we would call such a bytecode interpreter like the one used by Java - just here the 'language' was called Graphic Programming Language or GPL. Beside the usual computing stuff it consists of a mechanism called XML (*8) to include complex operations like floating point or graphics as basic 'machine' operations. Using such GPL programs in cartridge GROMs resulted in rather high execution due to its interpreted and optimized nature. In fact, even the BASIC interpreter itself was a GPL application.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Bottom line, this was a great design choice to create an extremely versatile system at low cost with incredible options to expand. It could have been great ... except for what happened.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;What Happened&lt;/h2&gt;&#xA;&lt;p&gt;When the basic design was done, three (somewhat) custom chips where needed.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;9985 - CPU with ROM and 256 Bytes of RAM (and 8 bit I/O bus)&lt;/li&gt;&#xA;&lt;li&gt;9918 - Capable of acting as VDP, RAM controller and CPU accessible RAM&lt;/li&gt;&#xA;&lt;li&gt;9919 - A sound chip&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;During development VDP and Sound where prioritized due to their special features, while the 9985 could be substituted by a replacement circuit consisting of a board with a 9900, 16 bit ROM/RAM and multiplex logic to emulate the 8 bit Bus.&lt;/p&gt;&#xA;&lt;p&gt;The multiplex logic was straightforward, turning each 9900 access into two 8 bit ones. This was different from the planned 9985 which would have made only a single 8 bit access if it was for a byte instead of a word. This wasn't a big deal except for the VDP. A useless full memory cycle for each and every byte accessed on screen was a real stopper for program development, in particular games. So the VDP got moved to the 16 bit side of the development setup, despite being an 8 bit device. (*9)&lt;/p&gt;&#xA;&lt;p&gt;VDP and sound chips where delivered mostly on time, but even in early 1979, no 9985 was ready, while the machine was designated to premiere for Christmas 1979. So a decision was made to integrate the replacement circuit into the mainboard, use the full 9900 CPU plus the additional circuitry for a first batch, hoping that a few months later the 9985 would be ready.&lt;/p&gt;&#xA;&lt;p&gt;Well, it wasn't. To make it worse, management &lt;em&gt;canceled&lt;/em&gt; the 9985, as it didn't make much sense from the chip divisions point - and after all, the 99/4 did work 'fine' without, didn't it? So the 99/4 continued to be sold with a 9900. (*10) Instead, the 9940 and 9990 were produced.&lt;/p&gt;&#xA;&lt;p&gt;When the 99/4A redesign came along, only minor changes (beside the 9918A) where made. They skipped the chance to increase the 256 Bytes RAM to at least 1 KiB, or improve the 8 bit bus connection. :(&lt;/p&gt;&#xA;&lt;h2&gt;The Chips&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;9900 a full figured 16 bit CPU with plain 16 bit wide data bus.&lt;/li&gt;&#xA;&lt;li&gt;9940 an 8 bit version of the 9900 with 128 Bytes RAM/4KiB ROM, 16 bit wide&lt;/li&gt;&#xA;&lt;li&gt;9980 an 8 bit version of the 9900&lt;/li&gt;&#xA;&lt;li&gt;9985 Like the 9980 but with internal 256 Bytes RAM and 8KiB ROM,16 bit wide&lt;/li&gt;&#xA;&lt;li&gt;9990 an 8 bit Version, like 9980, but with 256 bytes 16 bit RAM (*11)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - this may seam strange to us, as we always associate the 9900 with the somewhat strange 99/4. But it was considered a serious competition for 68k and 8086. Not just because of similar performance (and being available very early - 1976), but more importantly due to the huge software library available, including mature operating systems. Not to mention the fully symmetric and straightforward instruction set.&lt;/p&gt;&#xA;&lt;p&gt;After all, the 9900 was the single chip implementation of the successful &lt;a href=&quot;https://en.wikipedia.org/wiki/TI-990&quot; rel=&quot;noreferrer&quot;&gt;990 series minis&lt;/a&gt;. Much like the LSI-11 implemented the PDP-11 - except the 9900 was a single chip implementation. It was used in several workstations and low end 990 minis.&lt;/p&gt;&#xA;&lt;p&gt;*2 - This is about design decisions, not when it got first sold&lt;/p&gt;&#xA;&lt;p&gt;*3 - At the same time, a PET was delivered with 4/8 KiB, a TRS-80 with 4 KiB and even the Apple II was able to run with just 4 KiB. 32 KiB as minimum memory would have been out of proportion for a home computer. That was a lot, even for professional machines/workstations.&lt;/p&gt;&#xA;&lt;p&gt;*4 - This isn't just coincidentally similar to the 6500's Zero Page. It's the very same idea to make certain common instructions faster. In case of the 6502 by shortening address encoding  for ZP (and enabling additional complex addressing modes), and with full wide access in case of the 99/4.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Quite similar to 32 bit PC CPUs (386ff) using 16 (or even 8) bit ISA bus for I/O.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Later 9918 follow up chips (9938/58) used in MSX2/3 did extended the VRAM up to 192 KiB.&lt;/p&gt;&#xA;&lt;p&gt;*7 - As usual, reality is cruel to us. While GROM can have any size between 1 Byte and 64 KiB (with two byte addresses - longer addresses could provide more), TI manufactured them only with 6 KiB. But at least, GROMs could be combined if not occupying the same base address. So the maximum external GROM data was limited to 6x5x16=480 KiB ... well, still not bad, but way down from the original possible 1 MiB.&lt;/p&gt;&#xA;&lt;p&gt;*8 - :)) No, not eXtensible Markup Language, but eXtensible Machine Language. Effectively a way to turn certain library functions like floating point or such into single virtual machine operations.&lt;/p&gt;&#xA;&lt;p&gt;*9 - The memory behaviour also became eventually the first speed-up mod for the 99/4 - but that's a different story.&lt;/p&gt;&#xA;&lt;p&gt;*10 - This was also the reason for the quite unusual move to &lt;strong&gt;raise&lt;/strong&gt; the price tag for the 99/4 by almost 20% - they had to make good for more than calculated cost of components - mainly the CPU.&lt;/p&gt;&#xA;&lt;p&gt;*11 - The 9990 was available much later, and used in compatible machines. Not to be confused with Yamaha's projected enhanced, MSX3 compatible VDP.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-12-28T04:50:21.657" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7573" PostTypeId="2" ParentId="7570" CreationDate="2018-09-14T07:23:01.470" Score="6" Body="&lt;p&gt;I am just guessing here (as I am used to ZX platform instead of yours).&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;MIC input&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;that is not a good idea. Mic input might have a band pass filtering circuitry that could mess up with the serial feed of yours. Also the coupling is different as Mic is either passive component which requires source current from the recording device or an active one with very low power output and requires significant amplification. Sound output from a computer has diametraly different properties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much better option is to use &lt;strong&gt;LINE IN&lt;/strong&gt; input. Also proper coupling might need some additional circuitry to ensure voltage ranges and removal of the &lt;strong&gt;DC&lt;/strong&gt; component. So you should check the manual/datasheets for both old and new device to crosscheck if they use the same voltages or not. If not add a voltage divider or amplifier depending on the difference.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Digital recording&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to chose sample rate at least twice as high than the top frequency recorded/used/probed. For example on ZX IIRC 35 KByte file was loaded in cca 5 mins. Just to be safe assume that 11 bits per BYTE was transfered (start/stop/parity) which will give us estimate of:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;35*1024*11 / 5*60 = 1314.1333 Baud&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So the sample rate should be at least 2630 Hz. Now depending on the loading routine on the target platform (how sensitive it is to timing...) the frequency needed might be even higher.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well the old computers where build to use the more powerful outputs of tape player (of that time) so using Speaker output should be fine. Sometimes even headphone output is good but not always. &lt;strong&gt;LINE OUT&lt;/strong&gt; will probably have not enough power to be usable without additional amplifier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beware that some devices have playback effects like 3D sound, dampening of noise, emphasize speech, etc. Each of these can mess up the serial data and you should disable them if you can.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;How should the recording look like?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure on your platform. I would however use oscilloscope on the output from your old computer during &lt;code&gt;SAVE&lt;/code&gt; and then compare that to what is coming from your digital recorder during playback. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case you do not have an oscilloscope available You can use your PC sound card as one. In the past when I did not have an oscilloscope and needed one I decided to code one at least for Low frequency signals like this and here the result:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/21658139/2521214&quot;&gt;plotting real time Data on (qwt )Oscillocope&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In the link there you will find Win32 executables for Oscilloscope,Generator and Spectral analyzer using preferred sound input device in Windows (You can change it in control panel).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the frequencies used should be more than enough for your purposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beware that volume settings is crucial for playback. Too low can dampen the signal beond recognition and too high can damage the dynamic range of signal up to the point it saturates to single voltage value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the output from my ZX emulator seen on the Oscilloscope I linked and captured by my GIF capturer (only 2 fps so the file fits in here):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LjtCv.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LjtCv.gif&quot; alt=&quot;ZX tape signal&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see it is a sharp rectangular signal (the spikes are due to coupling inductance) so you should see something similar ... I used LINE IN input of my sound card to connect the signal coming from speakers output (using stereo cable). Do not forget to set the default input device for recording in &lt;code&gt;control pannel/sound &amp;amp; devices&lt;/code&gt; ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-09-14T08:01:50.170" LastActivityDate="2018-09-14T08:01:50.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7574" PostTypeId="2" ParentId="7570" CreationDate="2018-09-14T07:54:32.790" Score="3" Body="&lt;p&gt;You mention using &lt;code&gt;CLOAD?&lt;/code&gt;  That is normally used to verify that the file saved on tape is identical to the one in memory (i.e., to verify that the program can be loaded).  You should just use &lt;code&gt;CLOAD&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the Model 102 give this page a look: &lt;a href=&quot;http://munk.org/typecast/2014/07/25/file-transfer-for-trs-80-model-100102200-using-a-digital-audio-recorder-the-road-less-travelled/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://munk.org/typecast/2014/07/25/file-transfer-for-trs-80-model-100102200-using-a-digital-audio-recorder-the-road-less-travelled/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has a link to a known good &lt;code&gt;.wav&lt;/code&gt; file and also mentions that &lt;a href=&quot;http://knut.one/PlayCAS.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Play Cas&lt;/a&gt; and the reverse direction &lt;a href=&quot;http://knut.one/wav2cas.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;wav2cas&lt;/a&gt; understand the Model 102 cassette format at the byte level.  They can display the data in a &lt;code&gt;.wav&lt;/code&gt; file but don't know how to interpret it as a BASIC program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've used Play CAS quite a number of times to play cassette files to my TRS-80 Model III.  I just hook the TRS-80 through the headphone jack.  Generally speaking the volume wants to be about 50% on the PC.  The article I mentioned about suggested that close to 100% volume was needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also done the same thing in the past with the TRS-80 PC-1 and PC-2 pocket computers.  As I recall their tape format was quite a bit different (more like the &quot;Kansas City Standard&quot; and definitely was not compatible with the TRS-80 Model 1 or 3.  I would guess that the PC-3 uses a similar format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an aside there many other ways to transfer files between a PC and a Model 102, especially with its RS-232 port.  But I'll stick to the question at hand for now.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2018-09-14T07:54:32.790" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7575" PostTypeId="1" AcceptedAnswerId="7579" CreationDate="2018-09-14T10:01:39.643" Score="23" ViewCount="2587" Body="&lt;p&gt;Many 8-bit computers had video systems that provided tiles, and when these were available, they were the obvious ways to display text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, some 8-bit computers such as the ZX Spectrum and Amstrad CPC, only had bitmap displays. If you are using a bitmap anyway, the possibility arises of using a proportional font. Sure, it would be a bit slower to render text, but for many purposes, surely worth it. Yet all the 8-bit programs I can find, still used a fixed width font.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there any 8-bit programs (other than font demos) that used a proportional font?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-02-21T17:13:07.340" Title="Proportional fonts on 8-bit computers" Tags="&lt;display&gt;&lt;text&gt;&lt;font&gt;" AnswerCount="6" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7576" PostTypeId="2" ParentId="7375" CreationDate="2018-09-14T11:01:08.077" Score="9" Body="&lt;p&gt;Econet networking was first developed for Acorn's System line, which had a 6502 CPU clocked at 1MHz. It was later used in their ARM-based Archimedes machines with 8-25MHz CPUs, as well as the RISC PC line which pushed into the hundreds of MHz. So the system clock clearly doesn't need to be identical for all stations on the network.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is, however, another clock needed on an Econet network: the network clock. This is a synchronisation signal transmitted to all Econet stations on the network, independently of data transmissions (which are carried on a separate pair of wires). System, Atom, and early BBC Micro Econet interfaces included a built-in clock generation circuit, but as only one clock signal is needed per network, it was removed from BBC Micros from Issue 4 onwards. The preferred approach was to generatle the clock signal with a separate device at the middle of the network, which was referred to as an Econet clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The frequency of the clock signal dictates the maximum transmission rate on the network. Naturally you'd want to use the fastest clock rate possible, but the length of your network and the processing speed of the connected stations will limit this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In their 1984 Econet Installation Guide, instructions are given for varying the clock speed between 31kHz and 500kHz, mainly by changing the length of the clock's low phase (space) relative to the high phase (mark). Acorn recommend a maximum clock speed of 200kHz in this guide. They note that for a 500m network that value should be reduced to 180kHz, but that 300m the speed of the station hardware is the limiting factor: the Acorn Electron is specifically mentioned as requiring a slower clock speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In later years, with the introduction of the faster Archimedes machines, faster clock speeds (and transmission rates) could be achieved, but only if slower devices were removed from the network. One solution was to run a separate, slower network for old Beebs, and connect it to the faster network via an Econet Bridge.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2018-09-14T11:01:08.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7577" PostTypeId="2" ParentId="7575" CreationDate="2018-09-14T11:05:46.887" Score="14" Body="&lt;p&gt;Just the first (of many) example of using proportional fonts on Commodore64: &lt;a href=&quot;https://youtu.be/k2NRlsopoOU?t=441&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/k2NRlsopoOU?t=441&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You couldn't really use a proportional font on the Spectrum because&#xA;  the colour attributes were one background and one foreground for each&#xA;  8x8 square. That meant that, practically speaking, each letter had to&#xA;  be by itself in an 8x8 cell.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;With the reasonable limit of every word of its own color, it is quite possible though. Just have the space between words wide enough to absorb attributes boundary or place color change in those spaces that do absorb the boundary. The previous example also shows that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: Commodore 64 also has the bitmap mode very close to the one ZX Spectrum has. It is exactly that mode shown in the link above.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-09-14T11:05:46.887" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7578" PostTypeId="2" ParentId="7575" CreationDate="2018-09-14T12:06:25.587" Score="9" Body="&lt;p&gt;No 8-bit computer (back then) did support proportional fonts out of the box, but there where some programs on next every bitmap capable 8 bit computer, I this might as well include the Spectrum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the Apple II support was added by Apple rather early. Already the &lt;em&gt;Apple DOS Toolkit&lt;/em&gt; included a utility called  HRCG or High Resolution Character Generator, which moved character drawing onto highres bitmap and into software (*1). While, AFAIR, it originally only supported fixed spacing fonts, soon other programs used this to display at least part of their output in proportional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the &lt;a href=&quot;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Apple_II_Mouse_Card.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple II Mouse&lt;/a&gt; was introduced, first for the IIc and later the basic II, it came with MousePaint, a MacPint clone for the Apple II using proportional text on screen and in menus (*2). The availability of a mouse also triggered a lot of other programs trying to do what the Mac showed on an Apple II. Most notably maybe MultiScribe for the II (*3) and &lt;a href=&quot;https://vintagegeek.wordpress.com/2018/04/01/mousedesk-2-0-for-apple-ii/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MouseDesk&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anotehr example for add on software enabeling proportional fonts would be &lt;a href=&quot;http://toastytech.com/guis/gsx.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;DR's GSX&lt;/a&gt;, the grapic extension (*4) for CP/M and and adapted to several Z80 machines like Amstrads CPC or Commodores 128. It was as well the core component for GEM on the Atari ST and PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then there was &lt;a href=&quot;https://en.wikipedia.org/wiki/GEOS_(8-bit_operating_system)&quot; rel=&quot;nofollow noreferrer&quot;&gt;GEOS&lt;/a&gt;. It enabled C64 programs to use proportional text and exchangeable fonts. Soon also ported to the Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, bottom line: &lt;strong&gt;No, it hasn't been used out of the box, but later tools added this capability to 8-bit computers.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 – It was slow (compared to textmode) it ate up memory, but it was also AWESOME.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 – Not to be confused with &lt;a href=&quot;https://en.wikipedia.org/wiki/MouseText&quot; rel=&quot;nofollow noreferrer&quot;&gt;MouseText&lt;/a&gt;, a character set change for the Apple IIc and Enhanced IIe introducing some graphic elements into the character set, allowing character based software displaying a simplified GUI. Funny part here, soon programms used HRCG with Mousetext to draw the same elements using the graphics characters, but also add other graphic elements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 – Which got a second life as &lt;a href=&quot;https://en.wikipedia.org/wiki/Beagle_Bros&quot; rel=&quot;nofollow noreferrer&quot;&gt;BeagleWrite&lt;/a&gt; after their company was bought by Apple and integrated into Claris.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - It was way more than just an average graphics library. Beside being made to the GKS standard, it also includes features for multiprogramming and windowing.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-14T21:43:29.723" LastActivityDate="2018-09-14T21:43:29.723" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7579" PostTypeId="2" ParentId="7575" CreationDate="2018-09-14T12:31:27.790" Score="20" Body="&lt;p&gt;Digital Research produced as one of their early attempts into graphical desktops (on their way to GEM) a basic portable graphics library - GSX. GSX did actually support proportional fonts, both in print and on-screen, and was included with the CP/M support in Amstrad machines running CP/M Plus. GSX was supported by two of DR's own applications, DR Draw and DR Graph that were available for the range of enhanced Amstrad machines (CPC6128, PCW), although at a pretty high price.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GSX later evolved into GEM, DR's MS Windows counterpart on CP/M 86 and Atari STs&#xA;&lt;a href=&quot;https://i.stack.imgur.com/2l5eM.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2l5eM.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, this is definitively &quot;out-of-the-box&quot; support for proportional fonts, both in applications and a system-wide extension.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technically, GSX is an &lt;em&gt;RSX&lt;/em&gt; (&lt;strong&gt;R&lt;/strong&gt;esident &lt;strong&gt;S&lt;/strong&gt;ystem e&lt;strong&gt;X&lt;/strong&gt;tension, the DRI, not the Amstrad Basic term) and will thus only work on CP/M 3.0&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-09-15T14:31:38.850" LastActivityDate="2018-09-15T14:31:38.850" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7580" PostTypeId="2" ParentId="7575" CreationDate="2018-09-14T15:32:55.743" Score="7" Body="&lt;p&gt;The games Skool Daze and Back To Skool used proportional fonts for text on the ZX Spectrum.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KWUWm.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KWUWm.gif&quot; alt=&quot;Skool Daze screenshot&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://www.worldofspectrum.org/pub/sinclair/screens/in-game/s/SkoolDaze.gif&quot; rel=&quot;noreferrer&quot;&gt;worldofspectrum.org&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="3776" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-02-19T22:25:38.470" CommentCount="3" CommunityOwnedDate="2018-09-14T15:32:55.743" ContentLicense="CC BY-SA 4.0" />
  <row Id="7581" PostTypeId="1" AcceptedAnswerId="7582" CreationDate="2018-09-14T15:50:12.083" Score="6" ViewCount="362" Body="&lt;p&gt;I'm looking for the article for a project. It is fairly recent, may have been a news article, or a blog. It in turn might have referenced a scholarly paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, the gist of the article was that because modern computers are so complex, it is very easy to introduce insecure hardware into a process. There was apparently an incident because some laptops brought to an inspection site (maybe NATO or UN) were being used to eavesdrop and funnel logged data to a hostile 3rd party.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The argument was to use Apple II or some other older technologies instead because it is much simpler and more easy to verify if correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this rings a bell with anyone, would really appreciate getting the link to it.&lt;/p&gt;&#xA;" OwnerUserId="10569" LastEditorUserId="175" LastEditDate="2018-09-14T18:05:10.137" LastActivityDate="2018-09-14T18:05:10.137" Title="Recent article about using Apple II for security purposes" Tags="&lt;hardware&gt;&lt;apple-ii&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7582" PostTypeId="2" ParentId="7581" CreationDate="2018-09-14T17:58:33.830" Score="8" Body="&lt;p&gt;&lt;a href=&quot;https://juiced.gs/index/v23/i2/&quot; rel=&quot;noreferrer&quot;&gt;Juice.GS in volume 23 issue 2&lt;/a&gt; had an article &quot;Vintage Verification&quot;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Researchers at Princeton University present the Information Barrier&#xA;  eXperimental II, or IBX II, used to obtain trusted gamma radiation&#xA;  measurements of nuclear weapons.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The article covers why an Apple II can be used to detect fissionable materials, and how the simplicity of vintage hardware along with the improbability of backdoors makes them a good choice.  &lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2018-09-14T17:58:33.830" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7583" PostTypeId="1" CreationDate="2018-09-14T20:23:16.437" Score="78" ViewCount="13419" Body="&lt;p&gt;My experience is that CLIs were typically shown with light text on a darker background. For example, the IBM PC would use white/light gray (depending on your point of view), amber or green (the latter two for monochrome monitors) on black unless the software did something to change that, and the Commodore 64 IIRC used white on blue, and &lt;a href=&quot;http://toastytech.com/guis/amiga1.html&quot; rel=&quot;noreferrer&quot;&gt;the original Amiga Workbench&lt;/a&gt; used white on blue for the CLI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet once GUIs started taking off, the typical color scheme seems to have been dark text on a light background. For example, even &lt;a href=&quot;http://toastytech.com/guis/win101.html&quot; rel=&quot;noreferrer&quot;&gt;early versions of Microsoft Windows&lt;/a&gt; used black on white; apparently, so did &lt;a href=&quot;http://toastytech.com/guis/c64g.html&quot; rel=&quot;noreferrer&quot;&gt;GEOS on both the C64&lt;/a&gt; and &lt;a href=&quot;http://toastytech.com/guis/a2geos.html&quot; rel=&quot;noreferrer&quot;&gt;on the Apple II&lt;/a&gt;; as well as &lt;a href=&quot;http://toastytech.com/guis/gem11.html&quot; rel=&quot;noreferrer&quot;&gt;Digital Research's GEM&lt;/a&gt;. The &lt;a href=&quot;http://toastytech.com/guis/amiga2.html&quot; rel=&quot;noreferrer&quot;&gt;Amiga soon switched to a black on grey&lt;/a&gt; color scheme. One major exception seems to have been &lt;a href=&quot;http://toastytech.com/guis/vision.html&quot; rel=&quot;noreferrer&quot;&gt;Visi On using a white on black color scheme&lt;/a&gt; for much of the UI, including &lt;a href=&quot;http://toastytech.com/guis/vision3.html&quot; rel=&quot;noreferrer&quot;&gt;the bundled applications&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do remember some time in the mid-1990s using a PC compatible which used black text on a white (or at least light) background for the MS-DOS CLI, and that really was the odd one out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why did early CLIs seemingly so predominantly use light on dark color schemes, and what drove the shift to GUIs using dark on light color schemes instead?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="357" LastActivityDate="2019-05-12T22:05:43.920" Title="Why were CLIs typically light text on dark background, whereas GUIs typically use(d) dark text on light background?" Tags="&lt;history&gt;&lt;video&gt;" AnswerCount="9" CommentCount="15" FavoriteCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="7584" PostTypeId="2" ParentId="7583" CreationDate="2018-09-14T21:09:00.763" Score="81" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did early CLIs seemingly so predominantly use light on dark color schemes, and what drove the shift to GUIs using dark on light color schemes instead?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simple: CRT technology (and, as so often, missing the need to do otherwise)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early CRT technology was not able to deliver black on white. Further it was more important to make a readable display early on, than a paper-like one – an idea that only became a topic many years later.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On a CRT the 'lightened' parts are the ones drawn by the electron gun. Writing the few strokes of a letter can be done with a beam whose focus is wider than a pixel, as the large dark areas will give a good contrast. In fact, this will even improve quality, as adjacent pixels will form a coherent line when spilling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Changing between off and on and back didn't need to happen exactly at the border of a pixel and as instantly as possible. If ramping up voltage to draw a pixel left a blur, it didn't matter, as long as the sufficient intense part was at least as wide as a pixel and (hopefully) smaller than two of them. CRTs, CRT controllers and analogue parts in between got thus a rather low requirement for exact justification and maximum switch frequency. And that's what the emerging technology could deliver. As a result, all early screens were white (or whatever the light emitting surface was) on black.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Illuminating the 'background' to produce black on white, on the other hand, does need a way faster ramp up (and down) time for the electron cannon to allow sharp borders, as well as way more exact focusing, as now a lighted pixel should not spill over (which would have made the black letters unreadable), but at the same time no black gap between pixels should be visible/produced. Last but not least, the gun, as well as the power electronics for the CRT, need to be sufficient sized to supply a screen that is mostly while (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the basic ideas of a GUI is the paper metaphor, presenting documents to the user that look as much as possible like the paper on his desk. And we're used to writing dark on white (or at least light coloured) paper. Thus the requirement for high quality screens came to satisfy this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a ~1980, GUI based workstation, the CRT did cost almost as much as the whole computer – but was necessary to provide an acceptable picture for daily professional use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Screens sold for early desktop computers, from Apple II to the PC, were not really made to satisfy the needs – even if the computer could supply a 'sharp' image (high switching frequency), the CRT couldn't display it. Trying black on white (or green) on an Apple II with an early 80s '80 column' display was quite painful. &lt;a href=&quot;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Apple_II_Mouse_Card.txt&quot; rel=&quot;noreferrer&quot;&gt;This screenshot&lt;/a&gt; of Mousepaint on a contemporary CRT gives a hint. Similar to doing so on a MDA/Hercules PC. Sure, it could be done, just not acceptably so for a professional environment (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's also the reason why not only Visi-On used a white on black output in their windowing, but also Apple for their GUI-ish programs on the Apple II (Mousetext). Heck, even Microsoft offered a (mostly) white on black screen layout for Windows. The colour pictures we get shown today were only that good on high end graphics cards and really good screens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The default white on blue colour scheme for the Amiga was not at least due to the need to look good on affordable screens. Atari flunked out by using a specially designed b&amp;amp;w screen. It took some time until higher resolution CRT controllers, together with better screens, became available for mainstream computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;... and no time in the world can change deep rooted habits, like wanting your CLI as white on black :))&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I guess everyone remembers pumping screens when content changed - and worse, such with not enough 'light' to really fill large areas resulting in a sludgy grey in grey display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - No, just because we did endure it out of coolness doesn't mean it was acceptable.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="202" LastEditDate="2019-05-12T22:05:43.920" LastActivityDate="2019-05-12T22:05:43.920" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="7585" PostTypeId="2" ParentId="7571" CreationDate="2018-09-14T22:40:20.760" Score="4" Body="&lt;p&gt;Those programs aren't BASIC&lt;sup&gt;*&lt;/sup&gt;. Detokeninzing them with &lt;code&gt;petcat&lt;/code&gt; produces:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ petcat bez\ milosti-inst.prg &#xA;&#xA;&#xA;;bez milosti-inst.prg ==0801==&#xA; 1991 sys2065 tmc&#xA;&#xA;$ petcat bez\ milosti.prg &#xA;&#xA;&#xA;;bez milosti.prg ==0801==&#xA; 1987 sys2065 fbg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So each of those prg files contains only one line of BASIC code: a &lt;code&gt;sys&lt;/code&gt; instruction that jumps into the machine code part of the program.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;* or if they were originally written in BASIC &lt;a href=&quot;http://commodore.software/index.php?option=com_jdownloads&amp;amp;view=category&amp;amp;catid=53&amp;amp;Itemid=126&quot; rel=&quot;nofollow noreferrer&quot;&gt;they were compiled&lt;/a&gt;, and so the original source/tokens have been replaced by machine code&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-09-14T22:40:20.760" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7586" PostTypeId="2" ParentId="4607" CreationDate="2018-09-15T00:29:15.653" Score="5" Body="&lt;p&gt;You might also try to start the BASIC program on a different location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is determined by the values of the bytes 43, 44. By default the BASIC starts at 2048, thus the values are 1 in 43 and 8 in 44. (The 1 might be some rounding reason ;-) ). But you can change it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More exactly:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;POKE 43, 1: POKE 44, 192&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;will move the start of the BASIC program to 49152, where you have free 4kB to load the directory. After you got your list, you can move the BASIC area back to 2048.&lt;/p&gt;&#xA;" OwnerUserId="129" LastEditorUserId="129" LastEditDate="2019-04-05T22:53:22.473" LastActivityDate="2019-04-05T22:53:22.473" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7587" PostTypeId="1" AcceptedAnswerId="7615" CreationDate="2018-09-15T02:05:16.290" Score="12" ViewCount="2971" Body="&lt;p&gt;The Nintendo Game Boy Advance had a Z80-like processor which was typically used for backwards compatibility with GB and GBC games. According to its &lt;a href=&quot;https://en.wikipedia.org/wiki/Game_Boy_Advance&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia page&lt;/a&gt;, an uncited comment claims that the Z80 was also used by GBA games to supplement audio (emphasis mine):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Backward compatibility for Game Boy and Game Boy Color games is provided by a custom 4.194/8.388 MHz Z80-based coprocessor &lt;em&gt;(Game Boy Advance software can use the audio tone generators to supplement the primary sound system)&lt;/em&gt;, while a link port at the top of the unit allows it to be connected to other devices using a Game Link cable or GameCube link cable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This brings up two questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is this true? Was the Z80 ever used by GBA games to supplement the audio?&lt;/li&gt;&#xA;&lt;li&gt;How did the Nintendo DS (which has no Z80) deal with this when running GBA games?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="8090" LastEditorUserId="8090" LastEditDate="2018-09-16T01:03:05.557" LastActivityDate="2020-02-18T13:08:06.433" Title="Role of the Z80 co-processor in GBA games" Tags="&lt;z80&gt;&lt;audio&gt;&lt;game-boy&gt;&lt;game-boy-advance&gt;&lt;nintendo-ds&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7588" PostTypeId="1" AcceptedAnswerId="7593" CreationDate="2018-09-15T02:29:08.763" Score="10" ViewCount="2384" Body="&lt;p&gt;Older systems, such as the NES, would often access the ROM in real-time rather than caching the data in system memory, sometimes even reading the same data every single frame. This would result in an immediate and dramatic effect when the connection to the cartridge was broken. Newer systems, such as the Nintendo DS, would instead load from the cartridge into memory&lt;sup&gt;*&lt;/sup&gt; only when needed. Because of this, breaking the connection to the cartridge would result in the system freezing the next time data needed to load (e.g. when a new entity is about to spawn).&lt;/p&gt;&#xA;&lt;p&gt;My understanding is that the older behavior was common when memory was slow enough that reading from ROM was not significantly slower than reading from memory, and limited enough in size that keeping an entire &amp;quot;scene&amp;quot; in memory was not practical. Only when memory capacities got larger and the RAM became significantly faster than ROM did this change.&lt;/p&gt;&#xA;&lt;p&gt;What did Game Boy Advance cartridges do? For example, was audio constantly streamed from the cartridge in real-time, or was it cached in memory and played from there? Is there any data that is read from ROM every single frame, rather than being read from memory? In other words, was data constantly being read from ROM, or only when &amp;quot;loading&amp;quot; new areas or entities?&lt;/p&gt;&#xA;&lt;p&gt;&lt;sub&gt;* Interestingly, it seems like the Nintendo DS was &lt;em&gt;unable&lt;/em&gt; to execute directly from ROM (it wasn't mapped to an address) and &lt;em&gt;needed&lt;/em&gt; to first copy to system memory. I believe this was due to copy protection.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="8090" LastEditorUserId="8090" LastEditDate="2021-02-07T22:26:55.663" LastActivityDate="2021-02-07T22:26:55.663" Title="Did GBA &quot;load&quot; from the cartridge, or was it read in real-time?" Tags="&lt;game-cartridge&gt;&lt;game-boy-advance&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7589" PostTypeId="2" ParentId="7583" CreationDate="2018-09-15T03:36:57.557" Score="8" Body="&lt;p&gt;The Raffzahn's answer perfectly desribed why white on black CLI was result of technical limitations, and better technology together with GUI went for black on white.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like say more about, why even now is CLI white on black.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main aspect of &lt;strong&gt;GUI&lt;/strong&gt; is, that it is designed mainly (mainly) for &lt;strong&gt;content consumers&lt;/strong&gt;. The screen should look &quot;nice&quot; and many times there are tone-in-tone colors used &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at this site: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the footer here is blue text on blue background, using 3 tones of blue and one grey, which does not stand out  (yes and black titles too) &lt;/li&gt;&#xA;&lt;li&gt;The header is grey on black mainly. &lt;/li&gt;&#xA;&lt;li&gt;The main page use lot of gray items on white and lot of light blue items too.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Web pages, GUI tools and such today looks decent, professional and all (but some people with bad seeing have problems to read those so much decent shades), they also use the bonus of having 24-bits colors and would not fit to old 16, or 256 colors paletes as good. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of it is mainly supposed to be processed by human eyes, so it prefere &quot;&lt;strong&gt;niceness&lt;/strong&gt;&quot;, knowing, that humans have extra strong &quot;autocorrection ability&quot; for reading, and that there is not problem, if some of similar characters (like .,;: or l1I|) looks nearly the same. Consumer will probably read the right version, even if actually wrong is used. The same goes for typos - many of them are just ignored or not recognized at first reading and it is not a problem - the right message will go thru anyway. Even if there are some elements to manipulate, they are typically big buttons or full words/phrases in different color (hyperlinks) and the consumer have just to choose from this selection offered and hit with mouse relatively big rectangle - somewhere. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And majority of text (if not all) is ment to be read fast, not preciselly deciphered to last character. Well, for exact copy there are Copy-Paste shortcuts, no need to make sure each character fits - just make sure, that the begin and end is right.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On the other hand &lt;strong&gt;CLI&lt;/strong&gt; is maily used by programmers to be read by &lt;strong&gt;computer&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And computers do not have good autocorrection (and it would not be typically used in CLI commands/programs anyway, as the each character counts and using other, just visually similar, would probably make an error in the best case, unwanted (but legal) difference in worse case. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Old good &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;rm -rf test *&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;shows how one more space give totally different and harmfull (but syntactically correct) effect. )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So CLI prefere &lt;strong&gt;exact results&lt;/strong&gt; and &lt;strong&gt;correctness&lt;/strong&gt; over nice look. And usually is even set to bigger font and syntax highliting and just few bright, distintive colors on black (or dark) background. All for making harder to any mistake slips. The small number of bright colors on black backgroud makes everything highlited to really stand out and be totally distinctive from any other kind of highlites. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those texts are supposed to be correct to last character and to be deciphered and weighted with extra care.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least me and every other programmer, who I know have its programming evironment set it similar high-contrast scheme, while &quot;normal web pages&quot; are in &quot;nice, decent tone&quot; at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dark background makes the bright collors (white, magenta, red, cyan ...) stand out more, then white backgroud, or even &quot;old sepia picture with hint of light blue here and light pink there&quot; background, which is to be seen an many webpages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relative small number of colors (and only few cases of inverted background on the most critical spots) make it easier to distinguish exact meaning of such marked phrases, words or even single characters.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So the result for &quot;darker gray on lighter gray&quot; GUI and &quot;bright on black&quot; CLI is not only result of nostalgia, but also (and mainly) result of different use (reading vs. programming) and different targets (readers vs. computer programs)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;BTW, if I remember correctly, than Spectrum BASIC was black on white (and bad readable too) as well as some other examples and lot of old BIOS screens. TurboPascal used Yellow on Blue for text and Black on White for menus in days, where Hercules cards was common here and lot of PCs had CGA graphic cards, just few had VGA one. So other approaches also existed in old good times :)&lt;/p&gt;&#xA;" OwnerUserId="8432" LastActivityDate="2018-09-15T03:36:57.557" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7590" PostTypeId="2" ParentId="7583" CreationDate="2018-09-15T05:24:25.880" Score="24" Body="&lt;p&gt;From the &lt;a href=&quot;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Joining_Apple_Computer&quot; rel=&quot;noreferrer&quot;&gt;Macintosh Folklore Site&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Apple II displayed white text on a black background. I [Bill Atkinson] argued that&#xA;  to do graphics properly we had to switch to a white background like&#xA;  paper. It works fine to invert text when printing, but it would not&#xA;  work for a photo to be printed in negative. The Lisa hardware team&#xA;  complained the screen would flicker too much, and they would need&#xA;  faster refresh with more expensive RAM to prevent smearing when&#xA;  scrolling. Steve listened to all the pros and cons then sided with a&#xA;  white background for the sake of graphics.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As white filled the screen (or green, or amber), any flicker became more obvious and annoying, and the inexpensive workarounds usually weren't much better. It was easier to just stick with white/green/amber letters on a black background. So black-on-white was an expense that wasn't justified in the era of the CLI but later became necessary for GUIs.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-09-16T08:39:43.940" LastActivityDate="2018-09-16T08:39:43.940" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7592" PostTypeId="2" ParentId="7575" CreationDate="2018-09-15T10:48:17.890" Score="10" Body="&lt;p&gt;Back in 1986, a company called Berkeley Softworks released a GUI desktop environment called &lt;a href=&quot;https://en.wikipedia.org/wiki/GEOS_(8-bit_operating_system)&quot; rel=&quot;noreferrer&quot;&gt;GEOS&lt;/a&gt; for the Commodore 64. It was later ported to the Commodore 128, the Commodore Plus/4, and Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jNIww.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jNIww.jpg&quot; alt=&quot;GEOS retail box&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XY5Gn.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XY5Gn.gif&quot; alt=&quot;GEOS desktop v2.0 running on the Commodore 64&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GEOS was obviously inspired by the classic Mac OS desktop. It implements all the basic elements one would expect from such environment, such as a pointer-driven UI with icons, windows, pull-down menus, a shared clipboard, and – yes – proportional fonts of many sizes, families and styles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It even had things like system-wide printer drivers, support for memory expansion cartridges, and input drivers for mice. (Mice were not common peripherals for the 8-bit home computers, but they were available, and if you purchased one, you could use the system pretty much just like a Mac or an Amiga. The hardware was, of course, more limited, but the basic feel to the desktop/GUI user experience was similar.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/h7WX8.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/h7WX8.png&quot; alt=&quot;A sample of proportional fonts as rendered by a GEOS application&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The font engine in GEOS is bitmap-based. Fonts come in many sizes but all sizes are pre-drawn/rendered bitmaps. Font editors and &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/geos/fonts/index.html&quot; rel=&quot;noreferrer&quot;&gt;additional font packs&lt;/a&gt; were also available. More about the technical details here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.lyonlabs.org/commodore/onrequest/geos/geos-fonts.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.lyonlabs.org/commodore/onrequest/geos/geos-fonts.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GEOS came bundled with geoWrite (a word processing application) and geoPaint (a paint program), and a number of utility programs, all of which used the font engine provided by the OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several additional applications were available as separate purchases, such as geoCalc (a spreadsheet application), or geoPublish (a desktop publishing application, i.e. a full-fledged page layout application for print design!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find a lot more information about GEOS on these sites:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.commodore.ca/history/company/turks_geos.htm&quot; rel=&quot;noreferrer&quot;&gt;https://www.commodore.ca/history/company/turks_geos.htm&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.lyonlabs.org/commodore/onrequest/geos/index.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.lyonlabs.org/commodore/onrequest/geos/index.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4893" LastActivityDate="2018-09-15T10:48:17.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7593" PostTypeId="2" ParentId="7588" CreationDate="2018-09-15T13:14:05.140" Score="9" Body="&lt;p&gt;It depends on how the game (or the program, if not running a game) is programmed. &lt;strong&gt;It does not depend on the system, but on where the memory where program is executed is physically located.&lt;/strong&gt; If a program is loaded in RAM that stays inside the system and uses RAM which is inside the system, it won't freeze when removing the cartridge. On the other hand, if the program is executed directly from ROM or RAM that is inside the cartridge, it will freeze when removing the cartridge, as the CPU will fetch instructions from a non-existing memory. This is applicable to both NES and GBA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NES&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the vast majority of cases there's no reason not to execute code from ROM directly, as code runs at the same speed constantly. There's no point copying code to RAM if there's no need to. It is however perfectly possible to load a program in the system's internal 2 KiB of RAM and execute it, if the ROM is not used anymore it is possible to make a program that does not crash when removing the cartridge(*). This technique is called &lt;em&gt;hotswapping&lt;/em&gt; and is actually used, for example to dump games or to test expansion audio chips from genuine Famicom cartridges without destroying them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Game Boy Advance&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system has more types of memory: In addition to cartridge ROM, there's on-system WRAM and on-system IRAM. Each type of memory is a trade-off between size and speed. Speed is indicated as (x / y), where x is the # of cycles per instruction in 16-bit Thumb mode, and y the # of cycles per instructions in 32-bit ARM mode. According to &lt;a href=&quot;http://problemkaputt.de/gbatek.htm#gbamemorymap&quot; rel=&quot;noreferrer&quot;&gt;GBATEK&lt;/a&gt;, when it comes to executing code&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cartridge ROM is the slowest (8 / 5 cycles) but also the largest&lt;/li&gt;&#xA;&lt;li&gt;WRAM is faster (6 / 3 cycles) but limited to 256 KiB&lt;/li&gt;&#xA;&lt;li&gt;IWRAM is fastest (1 cycle), but smallest, being limited to 32 KiB&lt;/li&gt;&#xA;&lt;li&gt;VRAM can also be used to execute code (2 / 1 cycle). It is however small, and using it removes space normally used for display, so using this limits graphic possibilities&lt;/li&gt;&#xA;&lt;li&gt;Cartridge RAM (8 cycles) could be used but there's really no point as it is normally dedicated to save games&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Whether code is executed from WRAM, IWRAM or VRAM, it will not crash when removing the cartridge. When it is executing from cartridge ROM (or from cartridge RAM - something almost completely useless) it will crash as soon as the cartridge is removed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In most cases, games runs the majority of the code directly from ROM as RAM is limited, and does so in 16-bit Thumb mode. Critical bottlenecks are loaded in IWRAM and executed in ARM mode. This is however not an absolute, any game can do whatever it likes to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can extend this concept to any other system using cartridges.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(*) However, as the cartridge is also used as a source for pattern assets, the graphics will be completely screwed up, but technically the program does not freeze.&lt;/p&gt;&#xA;" OwnerUserId="2123" LastEditorUserId="6659" LastEditDate="2020-02-18T17:57:34.320" LastActivityDate="2020-02-18T17:57:34.320" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7594" PostTypeId="1" AcceptedAnswerId="7827" CreationDate="2018-09-15T14:37:17.473" Score="6" ViewCount="364" Body="&lt;p&gt;On an Apple 3 the following pascal function&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function randu( High: integer): integer;&#xA;begin&#xA;  randu:= random mod High&#xA;end;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;will be translated to&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Proc    = 06&#xA;Typ     = P-Code&#xA;codeBeg = 02A6&#xA;Exitcode= 02AF&#xA;Paramet.= 0006&#xA;Data    = 0000&#xA;&#xA;procedure randu( param1, param2, param3);&#xA;02A6  00            SLDC 00&#xA;02A7  00            SLDC 00&#xA;02A8  CD 16 06      CXP 16,06&#xA;02AB  DA            SLDL 03&#xA;02AC  8E            MODI&#xA;02AD  CC 01         STL 01&#xA;loc1:= (random mod loc3);&#xA;02AF  AD 01         RNP 01&#xA;02B1  00            BYT  00&#xA;end (*randu*);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How can I recognise in the p-Code, that this is an integer function and has not 3 parameter values (6 bytes = 3 words data).&lt;/p&gt;&#xA;" OwnerUserId="3193" LastEditorUserId="56" LastEditDate="2018-10-01T20:15:19.500" LastActivityDate="2018-10-01T20:15:19.500" Title="Why is the following p-Code generated by the Apple 3 pascal compiler?" Tags="&lt;compilers&gt;&lt;pascal&gt;&lt;apple-iii&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7595" PostTypeId="1" AcceptedAnswerId="7961" CreationDate="2018-09-15T16:01:50.327" Score="4" ViewCount="471" Body="&lt;p&gt;The SP0256-AL2 Speech IC was a popular solution for text to speech translation but is now out of production. There where several other chips that entered the market but as far as I know did not have the popularity or quality of the SP0256-AL2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BhYbU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BhYbU.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Did any computers ship with the SP0256-AL2 speech chip or its equivalent?&lt;/li&gt;&#xA;&lt;li&gt;Were there any computers that provided native speech support?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7946" LastEditDate="2018-09-18T16:45:55.713" LastActivityDate="2018-10-14T15:32:41.793" Title="Did any retro computers ship with the SP0256-AL2 speech chip or its equivalent?" Tags="&lt;history&gt;&lt;sound&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7596" PostTypeId="2" ParentId="7587" CreationDate="2018-09-15T16:12:23.973" Score="7" Body="&lt;p&gt;I developed few game on the GBA back in the days and I remember that I looked into using the Z80 but found nothing in the official documentation.&#xA;Even if possible, it is an unsupported feature and therefore I doubt that any Nintendo approved game uses it.&lt;/p&gt;&#xA;" OwnerUserId="124" LastActivityDate="2018-09-15T16:12:23.973" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7597" PostTypeId="2" ParentId="7583" CreationDate="2018-09-15T16:23:17.860" Score="15" Body="&lt;p&gt;Since nearly all early computers used TV quality CRT screens, they suffered from phosphor burn in so the more you limited visible areas the longer your CRT would last. More expensive higher quality monitors had less of a problem but the price tag did not appeal to the mass market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The early TV quality monitors had pronounced flicker and many video card refresh rates were slow enough to be seen. Using a black screen helped hide these deficiencies. When graphics became more popular the switch was mandatory. With the exception of Apple, the first white on black screens I saw where X11 terminals the latter part of 1980's. &lt;/p&gt;&#xA;" OwnerUserId="7813" LastActivityDate="2018-09-15T16:23:17.860" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7598" PostTypeId="2" ParentId="7594" CreationDate="2018-09-15T16:33:34.297" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How can I recognise in the p-Code, that this is an integer function and has not 3 parameter values (6 bytes = 3 words data).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Has not? To be honest, I'm a bit confused about what you're asking. So here are my two (no, not cents) possible interpretations of this question.&lt;/p&gt;&#xA;&lt;h3&gt;If it's about how many parameters a function has:&lt;/h3&gt;&#xA;&lt;p&gt;In p-code functions always have (at least) two (16 bit) parameters even if there is none defined in source. Any defined ones come in addition. So &lt;code&gt;RANDU&lt;/code&gt; has one source level parameter, but three internal.&lt;/p&gt;&#xA;&lt;p&gt;That's nicely visible with the call for the &lt;code&gt;random&lt;/code&gt; function within your &lt;code&gt;RANDU&lt;/code&gt;. &lt;code&gt;CXP 16,6&lt;/code&gt; calls entry 6 in external segment 16 (which should be &lt;code&gt;random&lt;/code&gt;). Before doing so two constant 0 words are pushed - even though &lt;code&gt;random&lt;/code&gt; doesn't have a parameter.&lt;/p&gt;&#xA;&lt;h3&gt;If you want to know how to determinate function parameters and return from objectcode:&lt;/h3&gt;&#xA;&lt;p&gt;There is no direct way for a program to evaluate during runtime how many parameters a function (or procedure) has. The parameter list is prepared when the activation record is setup by the calling instruction (&lt;code&gt;C*P&lt;/code&gt;). It uses the 'Parameter Size' value stored in the attribute section of the jump table - or procedure header - to reserve that space above the Mark Pointer and copies as much bytes from the stack into this space. There is no information (in object code) hom many parameter there are and how they are structured.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;For further information you may want to read the &lt;em&gt;&lt;a href=&quot;https://archive.org/stream/Apple_Pascal_Operating_System_Reference_Manual#page/n0/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;Apple Pascal Operating System Reference Manual&lt;/a&gt;&lt;/em&gt; which contains all information. In addition Randall Hyde's &lt;em&gt;&lt;a href=&quot;https://archive.org/stream/Hyde_P-Source-A_Guide_to_the_APPLE_Pascal_System_1983#page/n0&quot; rel=&quot;noreferrer&quot;&gt;p-Source - a Guide to the Apple Pascal System&lt;/a&gt;&lt;/em&gt; might be helpful, as it explains it (mostly the same parts) in greater detail.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-10-01T17:53:43.690" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7599" PostTypeId="2" ParentId="7595" CreationDate="2018-09-15T17:17:47.257" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did any retro computers ship with the SP0256-AL2 speech chip or it's eqivilent?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Short answer: None.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least not with the SP0256 and not in reasonable numbers. The TI 99/8 was developed with a build TMS52xx Speach chip, but canceled before general delivery. Similar was the Atari 1400XL, equipped with an SC-02, was canceled early on and only sold in small numbers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;More detailed answer:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The SP0256-AL2 Speech IC was a popular solution for text to speech&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, it was used by several early machines, including the  Magnavox Odyssey2 or by Tandy for their TRS-Line.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There where several other chips that entered the market&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most notably Texas' &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_LPC_Speech_Chips&quot; rel=&quot;nofollow noreferrer&quot;&gt;LPC series&lt;/a&gt;, based on the same principle, and eventually sould most units of all, not at least due the omnipresent &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Speak_%26_Spell_(toy)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Speak &amp;amp; Spell&lt;/a&gt;/&lt;a href=&quot;https://en.wikipedia.org/wiki/Speak_%26_Math&quot; rel=&quot;nofollow noreferrer&quot;&gt;Math&lt;/a&gt;/&lt;a href=&quot;https://en.wikipedia.org/wiki/Speak_%26_Read&quot; rel=&quot;nofollow noreferrer&quot;&gt;Read&lt;/a&gt;&lt;/em&gt; series and the TMS5200 used in the Speech Module for the TI-99/4. It's still manufacured today, although they have recently stoped to take orders for new ROM designs, as better speech output can nowadays be generated by software on cheap microcontrollers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another line was Toshiba's T6721A as used in Commodore's &lt;a href=&quot;https://www.c64-wiki.de/wiki/Magic_Voice&quot; rel=&quot;nofollow noreferrer&quot;&gt;Magic Voice&lt;/a&gt; module. As well as OKI's MSM52xx series.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the GI didn't just make the SP0256. There was a SP0250 before and a SP0264 (*1) and SP1000 later on.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but as far as I know did not have the popularity or quality of the SP0256-AL2.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/General_Instrument_SP0256&quot; rel=&quot;nofollow noreferrer&quot;&gt;SP0256&lt;/a&gt; was early and quite successful, but soon became superseed by the way more flexible and natural &lt;a href=&quot;https://en.wikipedia.org/wiki/Votrax&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vortax&lt;/a&gt; system (SSI-263 / &lt;a href=&quot;http://www.redcedar.com/sc01.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;SC-01&lt;/a&gt; / SC-02). While the SP0256 used a special kind of compressed digital format - the same as TI did, but to a higher resolution), was the SSI263 system based on an analogue generator and filter system to generate its sounds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SP0256 was big in 1982, but the SSI-263 already took over in 1983/84 and sales lasted way into the 1990s. Cards where made for many systems from Apple and Commodore all the way to the IBM-PC.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;1 - Did any computers ship with the SP0256-AL2 speech chip or it's equivalent?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. At least no mainstream computer I know of (*2). There have been specialized appliences for the blind during the 80s and 90s, but nogeneral public ones.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2 - Where there any computers that provided native speech support?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That depends what one calls native speech support. TI did offer the speech synthesizer module for the TI 99/4 right from the start. Also the ill fated &lt;a href=&quot;https://www.ninerpedia.org/wiki/TI-99/8&quot; rel=&quot;nofollow noreferrer&quot;&gt;TI 99/8&lt;/a&gt;, due for release in 1983, had the TMS52xx speech snthesizer already build in (*3). Quite similar the Atari 1400/1450XL systems whichhad a SC-02 based speech synthesizer integrated and supported by the OS - again a project canceled early. (*4)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, speech could be done even on an Apple II speaker. (mostly) Software based solutions (like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Software_Automatic_Mouth&quot; rel=&quot;nofollow noreferrer&quot;&gt;SAM&lt;/a&gt;, the grandfahrer of many) are around since quite some time, but they where always third party add ons. Apple included a modified version called MacinTalk with the first MacIntosh, so while not hardware (beside the mono 8 bit DAC the Mac used for sound), it was supported native by the build in OS and out of the Box (*5).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1985 the Amiga OS included not only a TTS engine from &lt;a href=&quot;http://www.text2speech.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SoftVoice&lt;/a&gt; (a company founded by the oiginal Autors of SAM/MacinTalk), but also offered a great deal of OS integration to use this seamless from applications. So while the MacinTalk API was always considered 'internal' by Apple, the Amiga OS was eventually the first to offer a build-in TTS as standard service - and didn't close down before delivering :)) Possibly as a reaction to this Atari delivered in some markets also a SoftVoice based TTS with their ST series machines, so not realy native integrated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple later integrated MacinTalk during the 1990s into their &lt;a href=&quot;https://en.wikipedia.org/wiki/PlainTalk#The_original_MacInTalk&quot; rel=&quot;nofollow noreferrer&quot;&gt;PlainTalk&lt;/a&gt; speech recognition system. The original developers went on to create TTS software for the PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Soon after the success of the SC-02, next to all contemporary computers where able to do software based TTS (with a DAC type sound card). So the need for hardware add ons/build in circuitry vanished. From there on hardware solutions where only needed in loc cost specialized appliances (and TI's LPC series ruled the market) - wich eventually completly vanished in the early 2000s, when even controllers in the sub nickel price region where fast enough and had ROMs big enough to do it themself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line, these chips just held out in a small period of time (~1982-1985).&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Sidenotes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;SP0256 and other chips are still available. There is even a guy who opened a &lt;em&gt;new&lt;/em&gt; webshop selling them.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Sebastian Macke even &lt;a href=&quot;https://simulationcorner.net/index.php?page=sam&quot; rel=&quot;nofollow noreferrer&quot;&gt;ported SAM to the web&lt;/a&gt; - go and try it right away!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The SP0264 was obviously choosen to counter the huge success the SSI263 was - well, the chip also includes some of the extensions Vortax made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Which leaves quite a lot I do not know of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Only 250 boards where etched and less than 200 where made into working units - but &lt;a href=&quot;https://www.cnet.com/news/this-lovely-10mhz-home-computer-yours-for-only-3240/&quot; rel=&quot;nofollow noreferrer&quot;&gt;they are out there&lt;/a&gt;! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - In fact, both projects show that (biuld in) speech synthesis was considered the next big thing for (home) computers during the early 1980s. Sad for us, this was also the time of the great video console crash and the home computer price wars, destroying many great ideas and companies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Anyone remembers the '&lt;a href=&quot;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Intro_Demo.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;Glad to be out of that bag&lt;/a&gt;' statement during the &lt;a href=&quot;https://www.youtube.com/watch?v=2B-XwPjn9YY&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mac's presentation&lt;/a&gt;? That's why Jobs wanted MacinTalk to be part of the basic system.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-15T22:44:13.527" LastActivityDate="2018-09-15T22:44:13.527" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7600" PostTypeId="1" AcceptedAnswerId="7601" CreationDate="2018-09-15T18:06:41.027" Score="6" ViewCount="362" Body="&lt;p&gt;The standard cursor movement keys on the TI-99/4, /4A and apparently /8 were Function + E (for up), S (for left), D (for right), and X (for down).  These keys were also often used (without needing the function key) for games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;WordStar on CP/M used the same keys, albeit using Control rather than Function (as Function was a somewhat specific key to the TI keyboard).  A number of other CP/M and early DOS applications copied the WordStar combinations, so they were quite common for a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was this coincidental, did one of these copy the other, or did they both derive from some common older source that I'm not aware of?&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-09-15T18:34:38.057" Title="Use of E,S,D and X for cursor movement" Tags="&lt;keyboards&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7601" PostTypeId="2" ParentId="7600" CreationDate="2018-09-15T18:28:50.810" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was this coincidental, did one of these copy the other, or did they both derive from some common older source that I'm not aware of?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I wouldn't make a bet, but Wordstar is what I would have said as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the combination itself is not just an invention out of nowhere, but follows a logic based on common keyboard layouts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ESDX (and ESDF for games and DEC alike T-Bar cursors) is the first cursor like location that can be used across various keyboards. These letters are the same on English and German Keyboards (QWERTZ/QWERTY key order), an at least close to each other and also on the left side for French Keyboards (AZERTY). On terminals, where there is no scan code, but letters and letterwise assigned controll codes this avoides the need for country/keyboard dependant command routines - and equaly important manualy and key sheets. These three keyboard layouts &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Latin_keyboard_layouts_by_country_in_Europe_map.PNG&quot; rel=&quot;noreferrer&quot;&gt;cover a great deal in Europe&lt;/a&gt; and worldwide.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-15T18:34:38.057" LastActivityDate="2018-09-15T18:34:38.057" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7602" PostTypeId="2" ParentId="7587" CreationDate="2018-09-15T19:29:49.033" Score="17" Body="&lt;p&gt;None of the GameBoy series machine has a Z80, but instead a Sharp LR35902, which runs a &quot;GBZ80&quot; instruction set, which is if I'm not mistaking similar but incompatible with the genuine Z80, as it lacks the two registers sets (much like the 8080) and other instructions. Just like the 2A03 in the NES, the CPU is in the same chip as the sound generation hardware, even though both are separated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The GBA had to be backward compatible with GameBoy and GameBoy Color games, so it included the Sharp LR35902 CPU as well. However Game Boy Advance games can only use the sound generation hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The backward compatibility is actually a second machine in the same package. When inserting a Gameboy or Gameboy Color game in a Game Boy Advance, it presses a switch which change the voltage and which console is booted. It is possible to press that switch manually and boot as old Game Boy without inserting cartridge. Therefore completely different hardware is used when running a GB/GBC game in backward compatibility mode on a GBA, the sound generation and the input are the only things both systems have in common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Nintendo DS has only the sound generation hardware implemented, as the Sharp LR35902 &quot;Z80&quot; CPU wasn't needed anymore.&lt;/p&gt;&#xA;" OwnerUserId="2123" LastEditorUserId="2123" LastEditDate="2020-02-18T13:08:06.433" LastActivityDate="2020-02-18T13:08:06.433" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7603" PostTypeId="2" ParentId="7583" CreationDate="2018-09-15T22:25:42.537" Score="16" Body="&lt;p&gt;I won't get into details of why white on black, as others have explained that this mostly due to limitations of CRT technology at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the main reasons for the switch to black on white in GUIs, though, is &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Skeuomorph&quot; rel=&quot;noreferrer&quot;&gt;skeuomorphism&lt;/a&gt;&lt;/strong&gt;: GUIs (especially the early ones) tried very hard to emulate real-life, and have lots of things like folders, trash bins, and more that come from the original tools they're trying to replicate/replace, which obviously includes the existing (white) paper with (usually) black text printed on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the big keywords at the time was also &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/WYSIWYG&quot; rel=&quot;noreferrer&quot;&gt;WYSIWYG&lt;/a&gt;&lt;/strong&gt;: What You See Is What You Get, which was the big difference with text-based interfaces available till then. You had actual fonts, sizes, styles, etc, and it should look the same on screen and when printed. That meant black on white.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have most of the interface that is black on white (word processing windows, spreadsheets, technical drawings...), then it's quite natural that the rest of the GUI (menus, dialogs...) should be the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course there's a bit of a tendency to go back to white-on-black nowadays. Makes you look cool™.&lt;/p&gt;&#xA;" OwnerUserId="4329" LastEditorUserId="4329" LastEditDate="2018-09-17T14:09:04.630" LastActivityDate="2018-09-17T14:09:04.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7604" PostTypeId="2" ParentId="7583" CreationDate="2018-09-16T01:55:17.493" Score="1" Body="&lt;p&gt;Well, they weren't. Command-line interpreters typically dealt in characters - they'd send a character to the output device, and the output device displayed it. This might be an inky mark on paper, or a pattern of lit-up phosphor dots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it really turns into asking why the display component of a terminal is light-on-dark, and to my way of thinking, it's &quot;obviously&quot; because the screen is naturally dark. The hardware would light up some dots corresponding to the character being drawn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new-fangled VT100 did have a dark chars on light background mode, but to my eyes, it looked much less crisp.&lt;/p&gt;&#xA;" OwnerUserId="10254" LastActivityDate="2018-09-16T01:55:17.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7605" PostTypeId="2" ParentId="7516" CreationDate="2018-09-16T03:27:13.203" Score="2" Body="&lt;p&gt;I fixed the error. I had to plug in the ethernet cable, change the IP, then click install... I then had to quickly unplug the ethernet cable and throw it into the LAN port in my router. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks a million to those who helped, I would have never figured it out without you!&lt;/p&gt;&#xA;" OwnerUserId="10529" LastActivityDate="2018-09-16T03:27:13.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7606" PostTypeId="1" CreationDate="2018-09-16T03:40:08.290" Score="1" ViewCount="484" Body="&lt;p&gt;I have typed out a rather large file in C code that is defining OpenGL graphics and will draw a triangle on the screen. While I know all of the functions of the X Windowing System, I do not know how to compile the program on an IRIX system... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to see the limits of this computer, and I am prepared to program a whole OpenGL application if that is what it takes... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I create a &quot;make&quot; file and how do I include any files?&#xA;Do I just do the standard &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;GL/gl.h&amp;gt; &#xA;#include &amp;lt;GL/glu.h&amp;gt;&#xA;#include &amp;lt;GL/glx.h&amp;gt;&#xA;#include &amp;lt;X11/Xlib.h&amp;gt;&#xA;#include &amp;lt;X11/Xutil.h&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;includes, or do I need something else? I have a full install of IRIX ready for use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;have learned the C programming language and have programmed several projects in OpenGL Fixed Function Pipeline and Programmable Pipeline in many different languages. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I installed IRIX version 6.5, which was released in, I believe, 2003, so the OpenGL pipeline is still Fixed Function (the programmable pipeline not actually being available until 2.0, and being mandatory at version 3.0).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question in a nutshell is:&#xA;1) How do I create a make file for an IRIX shell.&#xA;2) Where are the files that I have above at in the computer?&#xA;3) Do I have to specify anything else such as environment variables, or is that done in the makefile?&#xA;4) Is there anything else I am missing from the files?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have some documentation that I have been reading, but it is not clear about if I should set any variables to include any of these files, or if I have to download any SDKs. While I do have netboot, it is annoying to deal with, and has a very high chance of not working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-rjhwinner03&lt;/p&gt;&#xA;" OwnerUserId="10529" LastActivityDate="2019-12-25T05:33:14.817" Title="How do I compile C code with the IRIX X Window System?" Tags="&lt;graphics&gt;&lt;unix&gt;&lt;c&gt;&lt;sgi&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7607" PostTypeId="1" AcceptedAnswerId="7608" CreationDate="2018-09-16T15:08:06.303" Score="11" ViewCount="916" Body="&lt;p&gt;I am trying to remember the name of a game I played on Apple II or Apple IIGS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I can remember, the beginning of the game you are looking for your lost uncle or something. You to another world where everyone is like 80's punk rockers. The enemy of the game is a huge punk alligator and if you aren't careful he will kidnap you (game over). Punk/rock music and records play a constant role in the storyline. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not 100%, but it may not have been in full color - just green/purple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be great.&lt;/p&gt;&#xA;" OwnerUserId="10580" LastActivityDate="2018-09-16T20:36:05.010" Title="Help identify old Apple game from 80s (Apple II, Apple IIGS)" Tags="&lt;apple-ii&gt;&lt;identify-this-game&gt;&lt;apple&gt;&lt;apple-iigs&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7608" PostTypeId="2" ParentId="7607" CreationDate="2018-09-16T15:47:52.607" Score="12" Body="&lt;p&gt;Sounds quite like &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Tass_Times_in_Tonetown&quot; rel=&quot;noreferrer&quot;&gt;Tass Times in Tonetown&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although, IIRC it was about saving Grampa and the antagonist was a kind of a croc with several other besats mixed in 'man', but otherwise it fits. And yes, it was 'punky' :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also had a remarkable user interface (that's why I remember it at all) combining the text based nature of classic adventures with a Lucasarts like point and klick structure - except, it had huge icons to klick instead of text. And a rather unique 'copy protection' scheme. To talk to people you had to call them by name - except the names of several important characters where not mentioned within the game (*1), but only in a (real paper) back story booklet packed with the game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was available on the II as well as the IIgs, Amiga, Atari ST and many others. On the Apple II graphics where a bit limited, but got as colorful as it can get on a basic II. Way better ofc, &lt;a href=&quot;http://www.whatisthe2gs.apple2.org.za/tass-times-in-tonetown&quot; rel=&quot;noreferrer&quot;&gt;when played on a IIgs&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardcore Gaming 101 got an &lt;a href=&quot;http://www.hardcoregaming101.net/tass-times-in-tonetown-apple-iigs-apple-ii-commodore-64-amiga-atari-st-ibm-pc-macintosh-1986/&quot; rel=&quot;noreferrer&quot;&gt;article with screenshots&lt;/a&gt; of several versions (scroll to the end), which make it look as if there where two sets of graphcs, one for the colourful 16 bit machines (IIgs, Amiga, ST) and one for the less fortunate 8 bit ones (Apple II, C64, IBM PC).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Ok, many were mentioned during dialogs about them, but never close to where you met them, so it was neccessary to look them up in the booklet.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-16T20:36:05.010" LastActivityDate="2018-09-16T20:36:05.010" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7609" PostTypeId="2" ParentId="4607" CreationDate="2018-09-16T17:34:48.983" Score="3" Body="&lt;p&gt;The best way is to have some sort of accessory program installed.  There are a few options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;on the Commodore 1541 test/demo disk there is a program called &quot;DOS WEDGE&quot;.  You can load and run this, and it will take a little memory (I think at $C000, 49152, but it might be in the cassette buffer instead) with a little machine language program that will let you do a directory.  I believe you type &gt;$ (it might just be $).  &gt; by itself will also let you read the disk drive error channel.  This test/demo disk came for free with the 1541 drive, and you should be able to find disk images of it online; all the contents are public domain and are freely redistributable.&lt;/li&gt;&#xA;&lt;li&gt;some fast load cartridges like Epyx Fast Load have a wedge-like capability too which will let you pull a directory.&lt;/li&gt;&#xA;&lt;li&gt;the Commodore 128, 16 and Plus/4 (plus PETs/CBMs that had BASIC 4.0) have a DIRECTORY command (you can also use CATALOG, which I tended to use instead because c-shift-A was the abbreviation instead of d-i-shift-R).  This lets you pull a directory without erasing an existing program in BASIC memory.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You can clear existing BASIC programs (and directories loaded via LOAD&quot;$&quot;,x) with the NEW command, and you can also reset the C64 entirely via the command SYS64738, which is the equivalent of a soft reset of the entire system and will reset things to the initial power-up screen.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastEditorUserId="6986" LastEditDate="2018-09-16T23:35:34.777" LastActivityDate="2018-09-16T23:35:34.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7610" PostTypeId="1" AcceptedAnswerId="7611" CreationDate="2018-09-17T01:13:51.870" Score="14" ViewCount="3195" Body="&lt;p&gt;I'm trying to identify a game I remember from the 1980s.  The game was shown from a bird's-eye viewpoint (or maybe isometric?), on Apple IIe, IIRC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You controlled a guy with an axe, who was constantly walking forward, but you could rotate him left or right. So was the other player. You had an axe in one hand, and each time you swung the axe through the other player, you damaged him - this was shown as darker area (and would eventually kill him, winning the match). If you got to one side of the screen it, would scroll (as only part of the playing area was shown at any time on the screen). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also (one or more?) flying discs, and if you stepped on one, you would fly forward at much higher speed (which could work for you, or against you, depending how good you were).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you could choose whether you wanted to play against another player or against the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Some of the details of my memory might be smudged by time, of course.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody remember the name of this game?&lt;/p&gt;&#xA;" OwnerUserId="4603" LastEditorUserId="7946" LastEditDate="2018-09-17T09:06:23.163" LastActivityDate="2018-09-25T23:10:12.550" Title="1980s game with a guy with an axe on a flying disc" Tags="&lt;apple-ii&gt;&lt;identify-this-game&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7611" PostTypeId="2" ParentId="7610" CreationDate="2018-09-17T02:48:04.633" Score="19" Body="&lt;p&gt;&lt;a href=&quot;https://www.mobygames.com/game/apple2/bilestoad&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Bilestoad&lt;/a&gt;. Axes, flying discs, and blood - kind of narrows it down. ; - )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But here's a screenshot with axes, a flying disc, and blood.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3pXBK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3pXBK.png&quot; alt=&quot;Screen capture of Apple II game &amp;quot;The Bilestoad&amp;quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/TheBilestoad4amCrack&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's a clean crack (playable in-browser)&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=MWtjiFfvDY8&quot; rel=&quot;nofollow noreferrer&quot;&gt;a video of the game&lt;/a&gt; and an &lt;a href=&quot;https://dadgum.com/halcyon/BOOK/GOODMAN.HTM&quot; rel=&quot;nofollow noreferrer&quot;&gt;interview with the author&lt;/a&gt;. This was a controversial game at the time, and possibly influential. &lt;a href=&quot;https://rome.ro/news/2015/12/13/gametales-the-bilestoad&quot; rel=&quot;nofollow noreferrer&quot;&gt;John Romero is apparently a fan.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2018-09-25T23:10:12.550" LastActivityDate="2018-09-25T23:10:12.550" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7612" PostTypeId="2" ParentId="6911" CreationDate="2018-09-17T05:18:38.263" Score="4" Body="&lt;p&gt;See &lt;a href=&quot;https://www.fastcompany.com/90147592/rediscovering-historys-lost-first-female-video-game-designer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rediscovering History’s Lost First Female Video Game Designer&lt;/a&gt; wherein&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Forty years ago, consumer electronics giant RCA released the Studio II, a programmable video game console that, along with the Fairchild Channel F, pioneered the use of ROM cartridges as interchangeable game media.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Reading through the article you'll find the first of the games were delivered in August 1976. The &lt;a href=&quot;https://en.wikipedia.org/wiki/RCA_Studio_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;RCA Studio II&lt;/a&gt; apparently missed the Christmas season in 1976 and sold from January 1977 through early 1978 (too low resolution and likely a bit slow for the 1978-79 season, a product that had missed it's market window). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember seeing ads for RCA 1802 CPUs for $1.80 likely as a result of the product collapse, distributors inundated with data books to give away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I had seen this question last week and reminisced over the Exidy Sorcerer's 8 track cartridge ROM conversions (circa 1978). I stumbled across this researching the COSMAC VIP and CHIP-8 today).&lt;/p&gt;&#xA;" OwnerUserId="9041" LastActivityDate="2018-09-17T05:18:38.263" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7613" PostTypeId="1" CreationDate="2018-09-17T09:10:18.223" Score="3" ViewCount="348" Body="&lt;p&gt;Blue LEDs in the cheap, practical form we know them today, arrived in the 90s; before that, the choices were red and green.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to say there was a time some years before that when green LEDs became cheap and practical, before which red was the color of choice, but I'm not quite sure why I have that feeling; it's true green has more energy per photon than red, but that fact alone does not say anything about dates. I do remember the Vic-20 having a red power indicator, but that could have been just an aesthetic choice for all I know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When did green LEDs get to the point where the only advantages of red were aesthetic and ergonomic, not cost or efficiency?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-09-17T09:10:18.223" Title="When did green LEDs become as cheap as red LEDs?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;cost&gt;" AnswerCount="0" CommentCount="18" ClosedDate="2018-09-17T09:50:42.820" ContentLicense="CC BY-SA 4.0" />
  <row Id="7614" PostTypeId="1" AcceptedAnswerId="7624" CreationDate="2018-09-17T12:22:42.440" Score="8" ViewCount="730" Body="&lt;p&gt;I picked up a nice Packard Bell Legend 245 over the weekend, and it works great apart from one issue so far: when dragging windows around the screen (Win 3.1), the screen gets corrupted with weird snow-like artifacting (see below).&lt;/p&gt;&#xA;&lt;p&gt;This only happens if I run Windows in 256-color mode. At 16 colors it seems totally fine. The corruption doesn't appear until you drag a window, save for the odd pixel that gets corrupted when rendering text, and it doesn't happen with every drag (but close to it). The snow remains static, and will travel along with the window if I drag it again, potentially worsening each time.&lt;/p&gt;&#xA;&lt;p&gt;According to MSD, the video BIOS is &amp;quot;LSI Logic Corp. BIOS Code, Version 10.05.03H&amp;quot;. There's a single VRAM chip soldered to the board, labeled &amp;quot;NEC 424170-80L&amp;quot;, and I can't find any information about it (such as size). I get the same results whether I pick the Super VGA 640×480 256 colors driver, or the Video 7 640×480 256 colors one.&lt;/p&gt;&#xA;&lt;p&gt;Does this indicate there's a problem with the VRAM? Or do I just need a different driver?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;SOME MORE TEST RESULTS:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I hit the turbo button to slow down the system (probably to around 8 MHz based on how horribly it runs), and the snow artifacts were totally resolved. I then adjusted the jumpers to underclock the CPU from 33 MHz down to 25 MHz. The artifacts were substantially reduced (probably by about 75%) but not gone completely. So whatever is going on, the CPU and main bus speed is definitely a factor. And I would assume the RAMDAC has to read the VRAM twice as fast in 256-color mode vs. 16-color mode.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wTmSL.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wTmSL.jpg&quot; alt=&quot;Let it snow&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4459" LastEditorUserId="15334" LastEditDate="2021-01-14T10:07:22.300" LastActivityDate="2021-01-14T10:07:22.300" Title="Strange &quot;snow&quot; artifacts when dragging a window in 256-color mode" Tags="&lt;hardware&gt;&lt;video&gt;&lt;windows-3.x&gt;&lt;vga&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7615" PostTypeId="2" ParentId="7587" CreationDate="2018-09-17T14:55:15.273" Score="11" Body="&lt;p&gt;The Wikipedia comment is misleading. The Game Boy CPU has several components in one chip, including the Z80-alike CPU core and a sound generator among others. These components may all be in the same chip but they are functionally independent; you don't need the Z80 CPU to be able to produce audio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Nintendo DS inherited the Game Boy sound generator circuitry and dropped the Z80 and other associated components. This allows GBA games to produce audio, but original GameBoy games won't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The GBA shares the sound generator between whichever CPU is control of the system; the ARM for GBA games and the Z80 for Game Boy games. Note that when the ARM is in control the Z80 is disabled and can't perform any multi-processing tasks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again the Z80 is so slow and the ARM is so fast that it is questionable how useful the Z80 could have been in that situation, and it would have required a lot of support circuitry to allow both to be active and share the bus without impacting the performance of each other. &lt;/p&gt;&#xA;" OwnerUserId="8734" LastActivityDate="2018-09-17T14:55:15.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7616" PostTypeId="1" AcceptedAnswerId="7618" CreationDate="2018-09-18T09:24:02.297" Score="4" ViewCount="858" Body="&lt;p&gt;I have an Old HDD Seagate Model ST4350N. I want to access the data on the Hard disk. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/cY08I.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cY08I.jpg&quot; alt=&quot;Seaget ST4350N&quot;&gt;&lt;/a&gt;&#xA;The Hard disk have 50 pin connector&#xA;&lt;a href=&quot;https://i.stack.imgur.com/UEVs0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UEVs0.jpg&quot; alt=&quot;Hard Disk Interface&quot;&gt;&lt;/a&gt;&#xA;I am hoping for guidance on how to even begin the process. What kind of controller and equipment do i need for reading the drive.&lt;/p&gt;&#xA;" OwnerUserId="10596" LastActivityDate="2018-09-18T11:42:44.360" Title="Accessing Old Seagate HDD Model ST4350N" Tags="&lt;hard-disk&gt;&lt;scsi&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7617" PostTypeId="2" ParentId="7583" CreationDate="2018-09-18T11:38:05.287" Score="3" Body="&lt;p&gt;As soon as multi colour printers became available the WYSIWYG paradigm required the background to be white.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was not possible to view &lt;strong&gt;white text and red borders&lt;/strong&gt; that would later print as &lt;strong&gt;black text and red borders&lt;/strong&gt; in a consumer market.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typesetters had suffered with whatever was available for a long time and did not wait for WYSIWYG before using computer typesetting.&lt;/p&gt;&#xA;" OwnerUserId="4275" LastActivityDate="2018-09-18T11:38:05.287" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7618" PostTypeId="2" ParentId="7616" CreationDate="2018-09-18T11:42:44.360" Score="13" Body="&lt;p&gt;This is a SCSI device, so it shouldn’t be too hard to get the data off the device. You need the following pieces of equipment:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a SCSI controller, known as a host bus adapter (HBA); these are available for most buses, including USB (getting rare though), PCI and PCI Express (the last two are still easy enough to find, especially second-hand; expect to pay a premium for new controllers);&lt;/li&gt;&#xA;&lt;li&gt;a SCSI cable, with appropriate connectors (we’ll get to that);&lt;/li&gt;&#xA;&lt;li&gt;depending on the cable, perhaps an adapter;&lt;/li&gt;&#xA;&lt;li&gt;depending on the cable and the drive specifics, perhaps a terminator (although since this would be the only drive on the bus, you should be able to get away without one).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The simplest option would be to find a computer with a PCI (not PCI Express) slot, and install a PCI SCSI HBA. Most of those still have 50-pin SCSI SE ports; you can then use a 50-pin internal SCSI cable to connect the drive directly. Set the jumpers for drive-provided termination (see &lt;a href=&quot;https://stason.org/TULARC/pc/hard-drives-hdd/seagate/ST4350N-WREN-300MB-5-25-FH-SCSI1-SE.html&quot; rel=&quot;noreferrer&quot;&gt;the settings here&lt;/a&gt;), and it should “just work”.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it doesn’t work, the drive might be a bit too old and not support the identification protocol. In that case, you’ll need to find an older HBA which doesn’t care too much about this; I have an old Adaptec 2940 for exactly this kind of situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don’t have a system with old PCI connectors, but with PCI Express connectors, then you’ll only find HBAs with Ultra320 buses and 68-pin connectors. In that case, you’ll need a 68-pin internal cable; these include terminators in most cases, but again that shouldn’t cause problems if you have a short cable and only one drive on the bus. You’ll also need a 68- to 50-pin female-to-female adapter such as &lt;a href=&quot;http://www.scsi4me.com/int-hd50f-hd68f.html&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt;. Set the drive jumpers for bus-powered termination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once all that’s done, a Linux setup should see the drive immediately; on Windows, you’ll need to install the drivers for the HBA, but if it’s old enough (and most of them are) there’s a decent chance the drivers will be built in. I’m not sure about macOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other possibilities, &lt;em&gt;e.g.&lt;/em&gt; placing the drive in an external enclosure and connecting that to the SCSI HBA; that opens even more possibilities for mis-matched cables and terminators. The above should get you going though...&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-09-18T11:42:44.360" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7619" PostTypeId="2" ParentId="7583" CreationDate="2018-09-18T12:42:48.323" Score="3" Body="&lt;p&gt;Exceptions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Tandy CoCo / Dragon 32&lt;/strong&gt;:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/InCs1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/InCs1.png&quot; alt=&quot;Coco DOS startup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;ZX Spectrum&lt;/strong&gt;:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/hC3DV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hC3DV.png&quot; alt=&quot;Speccy BASIC listing&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-09-18T12:42:48.323" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7620" PostTypeId="2" ParentId="7614" CreationDate="2018-09-18T15:27:23.567" Score="3" Body="&lt;p&gt;You've made good observations and experiments to start making some conclusions:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;it will switch to 800x600 256 color mode, but then the bottom ~25% of the screen is a clone of the top ~25% (in addition to the snow).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This means that video chip reads wrong location of the RAM. I suspect you do not see it in 640*480 because that location is not used. However it is a good question how VRAM is organized, and requires datasheet for the VDP. What is the video processor installed?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The snow remains static, and will travel along with the window if I drag it again, potentially worsening each time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Shot is good enough to see that colors are not arbitrary, but dots are kind &quot;out of context&quot; - they must be in some location of the screen, but they appear in wrong place. It means that VDP reads from wrong VRAM location, and, per my educated guess, when you drag windows driver uses hardware acceleration to move the screen area, which uses boosted clock (I am speculating here).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you say they are worsening each time it means not that VDP only reads data wrongly, it performs read-modify-write wrongly when running hardware acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would love if this issue can be solved by the replacing caps and marginal power problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing you must do is taking magnifier and look at the chip pins looking for cold joints or any defects related to conducting or non-conduct. In addition you can perform simple test - if you can run PC in disassembled shape try slightly pressing on chips - VRAM and VDP (probably other interface chips) dragging windows to see if action affects quality of operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually issue in 800*600 mode shows either broken component (issue in its logic of operation), or bad contact (or other way around - good contact when it should not be there - e.g. shortage of address lines to power supply rail through some resistance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But at the end it may happen that problem is wrong driver :) or its settings. Dig into driver settings, control panel (or how it was called in Win 3.11), and of course BIOS.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2018-09-18T15:27:23.567" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7621" PostTypeId="2" ParentId="6588" CreationDate="2018-09-18T17:10:29.110" Score="1" Body="&lt;p&gt;I once used a commercial revision control system called TLIB on DOS.  I don't remember liking it very much. Apparently, it's still being sold today, although I'm not sure if the current version will work in exclusively 16-bit mode. &lt;a href=&quot;http://www.burtonsys.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.burtonsys.com/&lt;/a&gt; has details.&lt;/p&gt;&#xA;" OwnerUserId="7619" LastActivityDate="2018-09-18T17:10:29.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7622" PostTypeId="2" ParentId="6588" CreationDate="2018-09-18T21:33:15.097" Score="0" Body="&lt;p&gt;You mention that RCS is not on the shortlist, but if you can get your hands on a later release of MKS RCS it has rudimentary changeset functionality that might be Good Enough. Given that all that MKS IP is owned by another company, and the older DOS stuff wasn't even supported for some time even before that, I can't suggest &lt;em&gt;how&lt;/em&gt; you might get your hands on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it was a surprisingly useful product for the time. It would be an easy turnkey solution if you could find it on eBay, for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Full disclosure: I used to work for MKS. &lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastActivityDate="2018-09-18T21:33:15.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7623" PostTypeId="2" ParentId="7583" CreationDate="2018-09-18T23:08:58.610" Score="0" Body="&lt;p&gt;I wanted to reinforce jcaron's excellent answer pointing to skeumorphism with its specific origin: the first commercial desktop system to offer a graphical interface was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Star&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xerox Star&lt;/a&gt;, and its development and design were tightly focused around the desktop metaphor, from folders for directories to sheets of paper for documents themselves. Indeed, there's an argument to be made that it was so effective in that regard that it served to 'lock in' the dominant metaphor for interacting with digital data for a generation and more. Apple's decision to xerox the Star's UI for their Lisa and then Macintosh UIs brought the metaphor into public prominence, and then Microsoft's own cloning put it on every desktop, further reinforcing that paradigm. And of course, as noted text printed on paper is for numerous reasons almost entirely black on white, so using the same visual style in the desktop metaphor was the natural choice.&lt;/p&gt;&#xA;" OwnerUserId="10599" LastActivityDate="2018-09-18T23:08:58.610" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7624" PostTypeId="2" ParentId="7614" CreationDate="2018-09-19T02:04:59.320" Score="5" Body="&lt;p&gt;Well, turns it it &lt;em&gt;was&lt;/em&gt; a driver issue, doing a really good impression of a hardware failure. I tried the suggestion of pushing on the chips to see if any pins were loose, but there was no visible effect. The thing that was throwing me off is that this is supposedly a Video 7 chip, but none of those drivers were actually working on this system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Closely examining the video chip indicated that the model is a Headland Technology HT216. After a &lt;em&gt;lot&lt;/em&gt; of Google searching and experimenting, I was able to track down a candidate driver package for it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.driverguide.com/driver/detail.php?driverid=66649&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.driverguide.com/driver/detail.php?driverid=66649&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: Beware of all their shady decoy links that try to get you to download their driver manager/agent. The driver is in a 1.16 MB zip file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Installation is slightly unusual for a Windows graphics driver. First, make sure you've got Windows configured and working with the basic &quot;VGA&quot; driver. Then exit to DOS, and after extracting &lt;code&gt;HTdriver.zip&lt;/code&gt;, run &lt;code&gt;SETUP.EXE&lt;/code&gt;. Choose the option to install Windows drivers, and point it to your &lt;code&gt;WINDOWS\SYSTEM&lt;/code&gt; directory. After installation is complete, launch Windows, go to Control Panel, and open the new HT Display control panel. In here, you can choose your resolution and color depth. Pick what you prefer, restart Windows when asked, and presto! 800x600 256 colors on a 33 MHz 486. (I should really track down one of those 486 Overdrive chips...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm guessing that this GPU uses an unusual framebuffer layout, and perhaps has to monopolize the VRAM bus a bit more than a typical VGA card to push 8bpp out to the monitor. That could explain the strange cloning of strips of the display, and VRAM read/addressing errors potentially caused by bus conflicts. So it was sort of a hardware problem, just thankfully not a &lt;em&gt;failed&lt;/em&gt; hardware problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the HT216 appears to have been used in multiple Packard Bell models, so if you've got an old Legend with the same chip in it, this could well be what you need to install.&lt;/p&gt;&#xA;" OwnerUserId="4459" LastEditorUserId="56" LastEditDate="2018-09-19T03:12:48.787" LastActivityDate="2018-09-19T03:12:48.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7625" PostTypeId="1" CreationDate="2018-09-19T05:12:14.297" Score="2" ViewCount="269" Body="&lt;p&gt;White got dirty pretty quick. Why would they chose that color?&#xA;And why MAC still keep it but other manufacturers do not.&lt;/p&gt;&#xA;" OwnerUserId="10603" LastActivityDate="2018-09-19T05:12:14.297" Title="Why the exterior of PC towers and monitors used to be white in the 90's and now is black?" Tags="&lt;history&gt;&lt;crt-monitor&gt;&lt;case&gt;" AnswerCount="0" CommentCount="8" ClosedDate="2018-09-19T16:47:07.153" ContentLicense="CC BY-SA 4.0" />
  <row Id="7626" PostTypeId="1" AcceptedAnswerId="7629" CreationDate="2018-09-19T06:31:54.193" Score="22" ViewCount="5016" Body="&lt;p&gt;It seems that 3D games, especially simulations like Falcon, were not faster (fps) on the Amiga than on the Atari ST - even a bit slower due to the CPU clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering why this is the case, since the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_Agnus&quot; rel=&quot;noreferrer&quot; title=&quot;Agnus&quot;&gt;Agnus&lt;/a&gt; seems to me as an early model of a GPU, capable of drawing vector lines and even fill out polygons. Was it not capable to display the typical number of 3D objects in those games or was it simply not used, since it would require a complete different codeline for the Amiga with respect to 3D rendering ?&lt;/p&gt;&#xA;" OwnerUserId="4176" LastEditorUserId="11916" LastEditDate="2019-04-07T12:32:34.283" LastActivityDate="2019-10-28T00:32:18.610" Title="Why were 3D games on the Amiga not faster than on similar 16 bit systems like the Atari ST" Tags="&lt;amiga&gt;&lt;graphics&gt;" AnswerCount="5" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7627" PostTypeId="1" CreationDate="2018-09-19T07:13:06.413" Score="5" ViewCount="2239" Body="&lt;p&gt;I've seen a lot of posts on BX. I believe today, it's a &quot;General Purpose Register&quot;. I'm confused at why people call it the Base Address Register,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Why it's called the Base Address register, historically.&lt;/li&gt;&#xA;&lt;li&gt;Is any of that still relevant today?&lt;/li&gt;&#xA;&lt;li&gt;Is there a convention to reserve it's use for base-addressing?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You can see it &lt;a href=&quot;https://youtu.be/ThUSyV81tIc?t=2m4s&quot; rel=&quot;noreferrer&quot;&gt;being called that here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8579" LastActivityDate="2018-09-19T18:29:18.960" Title="Is BX the Base Address Register, and if so why?" Tags="&lt;intel&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7628" PostTypeId="2" ParentId="7627" CreationDate="2018-09-19T07:29:22.403" Score="11" Body="&lt;p&gt;BX has always been one of the general registers, and it has always been called the base register (see for example &lt;a href=&quot;https://stevemorse.org/8086&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;The 8086 Primer&lt;/em&gt;&lt;/a&gt;, page 19). It is the base register because it can be used in various based addressing modes: storing an address in BX, and an offset in SI or DI (the source and destination index registers respectively), allows memory to be accessed at BX + SI or BX + DI (&lt;em&gt;ibid&lt;/em&gt;, page 31), or BX + SI + &lt;em&gt;immediate&lt;/em&gt;, or even BX + &lt;em&gt;immediate&lt;/em&gt;. It also serves as the base for &lt;code&gt;XLAT&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BP is similar, and supports all the above addressing modes. The difference between BX and BP is that BX defaults to the data segment (DS), whereas BP defaults to the stack segment (SS). (BX and BP each have their own specific instructions too — &lt;em&gt;e.g.&lt;/em&gt; &lt;code&gt;XLAT&lt;/code&gt; uses BX, &lt;code&gt;ENTER&lt;/code&gt; and &lt;code&gt;LEAVE&lt;/code&gt; use BP.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those addressing modes still exist today, so their use is still relevant, but indexed and indirect addressing &lt;a href=&quot;https://en.wikipedia.org/wiki/X86#Addressing_modes&quot; rel=&quot;nofollow noreferrer&quot;&gt;are available with any general, pointer or index register starting with 32-bit x86&lt;/a&gt;. While BX and BP are “special” on 16-bit x86, in that they are the only registers with which indirect or indexed addressing is possible, that is no longer the case on 32- or 64-bit x86 so EBX, EBP, RBX, and RBP aren’t quite so special. (BP, EBP, and RBP are still somewhat special since they select SS as the base register in 16- and 32-bit mode, and can’t be used as pointers without an offset, &lt;em&gt;i.e.&lt;/em&gt; there is no opcode for &lt;code&gt;MOV AX, [BP]&lt;/code&gt; and &lt;code&gt;MOV AX, [BP+0]&lt;/code&gt; ends up being used instead.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no convention I’m aware of to specifically reserve the use of BX for base-addressing; if you need to use it for base-addressing, you set it up appropriately and use it. If the calling convention in use mandates that BX is preserved, you need to ensure you take that into account (as caller or callee depending on the convention and the code you’re writing).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-09-19T14:34:18.700" LastActivityDate="2018-09-19T14:34:18.700" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7629" PostTypeId="2" ParentId="7626" CreationDate="2018-09-19T09:43:36.513" Score="30" Body="&lt;p&gt;There are a few reasons why multi-platform 3D games turned out to be no faster on the Amiga than on other 68000-based platforms without its blitter:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The developers may have targetted the lowest common denominator system and not taken advantage of the blitter when they ported to the Amiga. Early games and poor conversions tended to be like this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A naive implementation by somebody unfamiliar with the hardware may well fail to use the blitter's line-drawing and space-filling operations efficiently, thus losing the benefit. If one draws and fills individual polygons and then blits them to the framebuffer, that is a lot of wasteful work. AmigaOS itself didn't set a good example here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the blitter is a pure 2D device which offers no acceleration for 3D calculations, so the main CPU needs to do those. This involves a lot of matrix multiplication, and the 68000's MULU/MULS instructions are very slow, taking about 70 cycles. (The exact number of cycles is data-dependent because the microcode uses an iterative algorithm.) At 7.09MHz that's a shade over 100,000 multiplies per second, or 2,000 per 50Hz field. Even if the blitter was infinitely-fast, this still sets an upper limit of a few hundred points on screen or compromise on frame rate.&lt;/p&gt;&#xA;" OwnerUserId="80" LastEditorUserId="4335" LastEditDate="2018-09-19T16:45:42.770" LastActivityDate="2018-09-19T16:45:42.770" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="7630" PostTypeId="2" ParentId="7627" CreationDate="2018-09-19T10:21:44.690" Score="4" Body="&lt;p&gt;(This is in addition to Stephen Kitts answer)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why it's called the Base Address register, historically.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, it isn't. If it all, then it would be 'Base Index' (or better Index Base), as it was in original 16 bit addressing the only register that could be added as a 'Base' in all indexed addressing. Indexed with &lt;code&gt;SI&lt;/code&gt; or &lt;code&gt;DI&lt;/code&gt; that is. (*1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This addressing was symmetric with &lt;code&gt;BP&lt;/code&gt; as Base Pointer. The basic idea was that an array can be pointed at with BX and addressed via &lt;code&gt;SI&lt;/code&gt; or &lt;code&gt;DI&lt;/code&gt; without further ado - or BP when within the stack (*2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside that it's one of the original general purpose two byte registers. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is any of that still relevant today?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. At least not in 32/64 bit mode. &lt;code&gt;REX&lt;/code&gt; addressing allows the use of any of the 'classic' register as (index) base in 32 Bit mode - except &lt;code&gt;BP&lt;/code&gt;/&lt;code&gt;SP&lt;/code&gt; (*3). In 64 bit mode 12 of the 16 registers can be used the same way (Not &lt;code&gt;BP&lt;/code&gt;/&lt;code&gt;SP&lt;/code&gt;/&lt;code&gt;R12&lt;/code&gt;/&lt;code&gt;R13&lt;/code&gt; (*4)).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, having said that, 'Long' mode with 16 bit protected mode code segments comes along. Here classic (16 Bit) encoding is used together with 32/64 bit register size. &lt;code&gt;BX&lt;/code&gt; retains its encoding advantage, as &lt;code&gt;SIB&lt;/code&gt; is not needed. How much this rather forgotten mode is relevant is up for discussion.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there a convention to reserve its use for base-addressing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. Use as needed. After all, this is Assembly - there is no convention you don't want :)) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only issue to keep in mind is preserving it for your caller (unless it's explicitly not done)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You can see it being called that here.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Err ... lets say he's not wrong, but I would recommend looking for better in-detail description to learn about x86 (Check Wiki(books) or &lt;a href=&quot;https://wiki.osdev.org/Main_Page&quot; rel=&quot;nofollow noreferrer&quot;&gt;OSDEV-Wiki&lt;/a&gt;). Or if it is specific about classic (16 Bit) x86 programming, then there is only one book you to read: Steve Morse' &lt;a href=&quot;https://www.stevemorse.org/8086/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;8086 Primer&lt;/a&gt;. 32/64 Bit is different anyway and need to be learned without these classic assumptions to be really useful instead of a rucksack of special cases on special cases.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - If you want to assign mnemonic names to the 4 basic two byte registers, it might be &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;AX = &lt;strong&gt;A&lt;/strong&gt;ccumulator. Used for &lt;strong&gt;A&lt;/strong&gt;rithmetic (or &lt;strong&gt;A&lt;/strong&gt;lways the shortest encoding)&lt;/li&gt;&#xA;&lt;li&gt;BX = &lt;strong&gt;B&lt;/strong&gt;ase. Used as a pointer to data (structures)&lt;/li&gt;&#xA;&lt;li&gt;CX = &lt;strong&gt;C&lt;/strong&gt;ounter. Used in shift/rotate, string ops and loops.&lt;/li&gt;&#xA;&lt;li&gt;DX = &lt;strong&gt;D&lt;/strong&gt;ata. Used in arithmetic and I/O.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;*2 - Then again, in case of 'standard' programming &lt;code&gt;BP&lt;/code&gt; does hold the stack frame, so an index here is always an index into that frame, unless BP is temporarily moved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - &lt;code&gt;SP&lt;/code&gt; can also be used with &lt;code&gt;SIB&lt;/code&gt;encoding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - &lt;code&gt;SP&lt;/code&gt;/&lt;code&gt;R12&lt;/code&gt; again with &lt;code&gt;SIB&lt;/code&gt; encoding.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2018-09-19T13:13:07.143" LastActivityDate="2018-09-19T13:13:07.143" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7631" PostTypeId="2" ParentId="7276" CreationDate="2018-09-19T11:09:32.370" Score="2" Body="&lt;p&gt;It seems the answer is only a few percent of components cost. For example, Jef Raskin, &quot;Preliminary Cost Investigation&quot; (27 September 1979) in &quot;The Macintosh Project: Selected Papers from Jef Raskin (First Macintosh Designer), Circa 1979,&quot; gives an estimated cost in 1981 to build the Macintosh as then envisaged: total cost $346, of which labor to build and test $10, the rest being components. A note suggests that economies of scale and automation could end up reducing these figures to $212 and $2 respectively.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-09-19T11:09:32.370" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7632" PostTypeId="2" ParentId="7626" CreationDate="2018-09-19T11:31:36.123" Score="13" Body="&lt;p&gt;The thing the Agnus has that speeds up 3D games is the polygon fill feature. Blitting by itself is not so much a standard operation driving 3D performance. It can help 2D games and windowed GUIs a lot, however, one of the reasons the Atari ST got a (much simpler) blitter as well in later releases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3D Games are CPU-heavy, or rather performance is driven how fast you can do vector arithmetics and trigonometric functions (which would mainly be done by table lookups in older games) - Agnus doesn't help here, even a 68881 wouldn't help much, as fixed-point integer maths done by a 68k are still faster. We're talking mainly integer operations here, and that is driven by raw CPU speed and bus contention.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-09-19T11:31:36.123" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7633" PostTypeId="1" AcceptedAnswerId="7670" CreationDate="2018-09-19T12:24:20.183" Score="8" ViewCount="954" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7629/576&quot;&gt;pndc says about the 68000&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;the [...] MULU/MULS instructions are very slow, taking about 70 cycles. &#xA;   The exact number of cycles is data-dependent because the microcode uses an iterative algorithm.) &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, (assuming that pndc is correct and the 68000 is microcoded). What &quot;iterative algorithm&quot; is this? I can imagine something naive like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(let (mulu_impl (lambda (ct x y)&#xA;    (if (eq? ct 0) &#xA;        y&#xA;        (mulu_impl (decrement ct) x (add x y))))))&#xA;(mulu (lambda (x y) (mulu_impl x x y))&#xA;(* untested; could be full of brainfarts *)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which basically counts x downward, adding the old x to y each time. But this would be naive and slow for large values of x. They probably had a better trick up their sleeves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.faqs.org/faqs/motorola/68k-chips-faq/&quot; rel=&quot;noreferrer&quot;&gt;the comp.sys.m68k faq says about the 68060&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The chip is all hardwired - there is no microcode in it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I find this quote rather hard to believe, since I think that if you implement something so complex without microcode you end up decreasing the clock speed to allow for signal propagation delays; I could be wrong though. But if it is the case, then my guess is that &lt;code&gt;MULU&lt;/code&gt;/&lt;code&gt;MULS&lt;/code&gt; now need to be implemented differently from what I  did in Lisp up there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How was the multiplier(s) implemented in the 68000 and the 68060?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="6659" LastEditDate="2018-09-20T22:42:00.760" LastActivityDate="2018-09-20T22:42:00.760" Title="How did multiply instructions work in the various 68ks?" Tags="&lt;m68k&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7634" PostTypeId="2" ParentId="7633" CreationDate="2018-09-19T12:48:00.203" Score="8" Body="&lt;p&gt;Not an answer, but my contribution (found &lt;a href=&quot;http://oldwww.nvg.ntnu.no/amiga/MC680x0_Sections/timstandard.HTML&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, credit to &lt;a href=&quot;http://witbrock@cs.cmu.edu&quot; rel=&quot;noreferrer&quot;&gt;witbrock@cs.cmu.edu&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DIVS,DIVU - The divide algorithm used by the MC68000 provides less&#xA;        than 10% difference between the best and the worst case&#xA;        timings.    &#xA;MULS,MULU - The multiply algorithm requires 38+2n clocks where&#xA;        n is defined as:        &#xA;    MULU: n = the number of ones in the &amp;lt;ea&amp;gt;         &#xA;    MULS: n = concatanate the &amp;lt;ea&amp;gt; with a zero as the LSB;&#xA;          n is the resultant number of 10 or 01 patterns&#xA;          in the 17-bit source; i.e., worst case happens&#xA;          when the source is $5555&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Kind regards.&lt;/p&gt;&#xA;" OwnerUserId="7067" LastEditorUserId="576" LastEditDate="2018-09-19T12:54:13.577" LastActivityDate="2018-09-19T12:54:13.577" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7635" PostTypeId="2" ParentId="7626" CreationDate="2018-09-19T14:27:41.443" Score="10" Body="&lt;p&gt;Agnes doesn't help much with 3D acceleration. It has a blitter which is capable of filling polygons, but they must then be copied in to the display bitmap so it's actually slower than just filling with the CPU. Additionally the blitter requires the horizontal limits of the polygon to be rendered first, meaning an additional line draw per vertex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest performance limitation for 3D on the Amiga is memory bandwidth. In fact all 16 bit home machines of the time were the same, memory bandwidth was the biggest challenge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The maximum fill rate can be achieved by using unrolled CPU loops that write directly in to bitmaps. There is then no copy stage, and no need to line draw vertexes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The general strategy used by most high performance 3D on the Amiga is to calculate all vectors in one go, allowing as much data to be kept in CPU registers to avoid memory reads. The display is then rendered by the CPU alone as outlined above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the Amiga had the same CPU as the Atari ST running at a similar speed, but with actually a little bit less memory bandwidth performance was about the same. The Amiga could do some tricks to improve things, such as variable colour depth on different parts of the screen and sprites for low overhead overlays, but in practice they tended not to be that significant performance-wise.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-09-19T14:27:41.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7636" PostTypeId="1" AcceptedAnswerId="7637" CreationDate="2018-09-19T16:10:06.747" Score="6" ViewCount="4747" Body="&lt;p&gt;After reading around on the web, including the authoritative site &lt;a href=&quot;http://scanlines.hazard-city.de/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Scanlines Demystified&lt;/a&gt; I still am having trouble understanding the difference in signal between 240p and 480i. After reading the &lt;a href=&quot;https://en.wikipedia.org/wiki/NTSC#Lines_and_refresh_rate&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiki on NTSC&lt;/a&gt; it appears as though a tv will flicker 60 times per second, alternating between odd fields and even fields. 480i matches that standard, providing 240 lines of data in one draw and then another 240 for the next draw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is then that 240p is still a 480i signal, but it only sends half (one field) of data. So one field is full of color, and the next one is black. This results in the recognizable scanlines. Apparently the Framemeister &lt;a href=&quot;https://youtu.be/lHoOKLWIMKU?t=1489&quot; rel=&quot;nofollow noreferrer&quot;&gt;has difficulty&lt;/a&gt; with changing between 240p to 480i. Is this just because it has different processing techniques when it detects a 480i signal or a 240p signal?&lt;/p&gt;&#xA;" OwnerUserId="10609" LastEditorUserId="10609" LastEditDate="2018-09-20T13:59:45.780" LastActivityDate="2018-09-20T13:59:45.780" Title="Is my understanding right about the actual differences between 240p and 480i?" Tags="&lt;hardware&gt;&lt;video&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7637" PostTypeId="2" ParentId="7636" CreationDate="2018-09-19T16:28:54.177" Score="12" Body="&lt;p&gt;240p means a field is sent out 60 times a second. The scanline &quot;gap&quot; between lines is just a consequence of how the CRT beam sweeps across the display. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's colored black because the beam isn't illuminating the phosphors on the tube so they remain dark, though as you turn up the brightness the scanned area above and below will bleed into that area and make the dark area smaller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;480i means that two fields are sent out alternating at 30 Hz. The second field is offset in time such that it occupies the gap of the previous field. Due to persistence of vision we see this as a 480-line tall frame that updates at 60 Hz, though technically only the even or odd lines are updating at every 60 Hz interval.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is why if you play a game running at 480i and pan the camera around you will see every other line lag slightly, because one field shows the even lines with the camera at one position, and the other field shows the odd lines with the camera at a slightly different position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An uncommon variant is to output a 480i display but send the same field data on both frames. The resolution is effectively 240 lines, but it looks brighter as the second field is occupying the gaps between the lines of the first field. Some consoles can do this.&lt;/p&gt;&#xA;" OwnerUserId="8734" LastEditorUserId="8734" LastEditDate="2018-09-19T19:19:02.680" LastActivityDate="2018-09-19T19:19:02.680" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7638" PostTypeId="1" AcceptedAnswerId="7640" CreationDate="2018-09-19T17:19:27.563" Score="61" ViewCount="12045" Body="&lt;p&gt;According to a few tutorials I am seeing, DOS used dollar-terminated strings to write to the terminal. This seems to &lt;a href=&quot;http://spike.scu.edu.au/~barry/interrupts.html#ah02&quot; rel=&quot;noreferrer&quot;&gt;also be documented here on &lt;code&gt;INT 21H&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;AH = 09h - WRITE STRING TO STANDARD OUTPUT&#xA;Entry: DS:DX -&amp;gt; '$'-terminated string&#xA;Return: AL = 24h&#xA;Notes: ^C/^Break are checked&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can see this from the code in &lt;a href=&quot;https://www.youtube.com/watch?v=e0bMDc0lWAE&amp;amp;index=9&amp;amp;list=PLajZfknhluUSY6weDgx3xYuRsaXUwU8mh&quot; rel=&quot;noreferrer&quot;&gt;this tutorial here.&lt;/a&gt; What was the reason for going with dollar-terminated strings rather than NUL-terminated strings like C?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="8579" LastEditDate="2018-09-19T17:24:56.253" LastActivityDate="2019-06-28T11:44:14.917" Title="Why did DOS use dollar-terminated strings?" Tags="&lt;ms-dos&gt;&lt;assembly&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7639" PostTypeId="2" ParentId="7627" CreationDate="2018-09-19T17:26:37.517" Score="0" Body="&lt;p&gt;BX is the oldest indexing register. Typically an element in a struct would be accessed by &lt;code&gt;[BX + constant]&lt;/code&gt;; hence its name (or possibly the name comes from &lt;code&gt;[BX + SI]&lt;/code&gt;; only BX or BP could be used on the left side, and only SI and DI could be used on the right side).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find a particular thing about ebx/rbx except for it's the lowest register not clobbered by a specific instruction (mul/div/shl/shr) so it's a good place to put a pointer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, [esp+offset] is a longer instruction than [ebp+offset] so frame pointer elimination doesn't always generate shorter code.&lt;/p&gt;&#xA;" OwnerUserId="418" LastEditorUserId="418" LastEditDate="2018-09-19T18:29:18.960" LastActivityDate="2018-09-19T18:29:18.960" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7640" PostTypeId="2" ParentId="7638" CreationDate="2018-09-19T17:48:39.607" Score="96" Body="&lt;p&gt;The short answer is that DOS was designed to be similar to CP/M, and drawing a quote from &lt;a href=&quot;http://dosmandrivel.blogspot.com/2007/08/is-dos-rip-off-of-cpm.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;While 8-bit programs could not run on 16-bit computers, Intel&#xA;  documented how the original software developer could mechanically&#xA;  translate an 8-bit program into a 16-bit program. Only the developer&#xA;  of the program with possession of the source code could make this&#xA;  translation. I designed DOS so the translated program would work the&#xA;  same as it had with CP/M – translation compatibility. The key to&#xA;  making this work was implementing the CP/M API.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Or course this brings up the question as to why CP/M used the dollar sign.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.os.cpm/GrVgI0jk1HY%5B1-25%5D&quot; rel=&quot;noreferrer&quot;&gt;This discussion&lt;/a&gt; says CP/M got the idea from DEC, which used the &lt;a href=&quot;https://en.wikipedia.org/wiki/DEC_Radix-50&quot; rel=&quot;noreferrer&quot;&gt;RAD50&lt;/a&gt; character encoding.  With only 40 characters (50 octal), you only have uppercase, digits, space, period, dollar, and percent.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Both CP/M and RT-11 are evolved from earlier DEC OS's, most notably&#xA;  OS/8 (on the PDP-8) and DOS-11 (on the PDP-11).  The most obvious&#xA;  feature of all of these OS's is the presence of &quot;PIP&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So DEC probably chose dollar because it didn't have many options, CP/M got it from DEC, and DOS got it from CP/M.&lt;/p&gt;&#xA;" OwnerUserId="660" LastEditorUserId="4335" LastEditDate="2018-09-20T15:49:48.887" LastActivityDate="2018-09-20T15:49:48.887" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7641" PostTypeId="2" ParentId="7636" CreationDate="2018-09-19T19:54:08.817" Score="4" Body="&lt;p&gt;480i (480 lines interlaced) is when the even numbered rows are drawn on the screen in 1/30 second, then the odd numbered rows in the next 1/30 second, then the even rows again and so on. The even rows are one &quot;field&quot; and the odd rows are another field, and the two fields combine to form a &quot;frame,&quot; so it's 60 fields per second or 30 frames per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;240p (240 lines progressive) moves the even field down 1/2 row and the odd field up 1/2 row so now a frame is only 240 lines but it draws it 60 times per second. You can see scanlines because now nothing is being drawn between those 240 lines like with 480i.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's NTSC. PAL is 576i at 25 frames or 50 fields per second, and 288p at 50 frames per second.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-09-19T19:54:08.817" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7642" PostTypeId="2" ParentId="7638" CreationDate="2018-09-19T20:14:09.440" Score="12" Body="&lt;p&gt;So, what about the last part of the question, why not use nul as c?&#xA;As shown in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7640/10565&quot;&gt;an earlier answer&lt;/a&gt;, MS-DOS was influenced by CP/M, CP/M was influenced by DOS/11 on PDP-11 and that was an extension of OS/8 from PDP-8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OS/8 used a character set called DEC Radix-50.&#xA;After checking the link about the &lt;a href=&quot;https://en.wikipedia.org/wiki/DEC_Radix-50&quot; rel=&quot;noreferrer&quot;&gt;RAD50&lt;/a&gt; character set, the answer why OS/8 didn't use nul to terminate strings is quite simple. nul is Space in that character set.&#xA;Considering that apart from letters and digits you only had 3 punctuation marks &quot;.&quot;, &quot;%&quot; and &quot;$&quot; you had to choose one.&#xA;The question remaining is why they choose $ and not %.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides that, as commented below, C did not exist when the PDP-8 was constructed, so it could not have influenced the choice of string terminator.&lt;/p&gt;&#xA;" OwnerUserId="10565" LastEditorUserId="10565" LastEditDate="2018-09-20T15:22:17.440" LastActivityDate="2018-09-20T15:22:17.440" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7643" PostTypeId="2" ParentId="7636" CreationDate="2018-09-19T20:29:10.753" Score="5" Body="&lt;p&gt;On a CRT, the electron beam moves from top to bottom in a smooth continuous motion, then jerks quickly back to the top, about 60 times per second.  The beam moves left to right in a smooth continuous motion, then jerks quickly back to the left, about 15,750 times/second.  The jerk back to the left will occur if the start of a sync pulse is received roughly 60-70 microseconds after the previous horizontal jerk.  The jerk back to the top will occur if a sequence of long sync pulses are detected 16-17 milliseconds after the previous vertical jerk.  The electronics driving the CRT don't care about concepts like even and odd frames.  They simply performs the vertical and horizontal motions, &lt;em&gt;independently&lt;/em&gt;, as requested by the sync pulses.  When a horizontal sync pulse is received, the vertical position of the beam will depend upon the amount of time since the last vertical sync pulse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the electronics of a CRT don't care about even and odd frames, it would be possible to output 60 fields (one second) of interlaced video that were 262.5 lines long, then 59 fields (just under one second) of non-interlaced video that was either 262 or 263 lines long, and then 60 more frames that were 262.5 lines long, and a monitor would be perfectly happy.  The image would bounce vertically by a fraction of a scan line when switching between interlaced and non-interlaced modes, but would be relatively stable.  A device trying to digitize the video as interlaced frames, however, would have a problem since it would expect to interpret pairs of fields as frames, but there would only be 29.5 pairs of non-interlaced fields between the last frame of the first interlaced batch and the first frame of the next.  If a device could distinguish between &quot;even field first&quot; and &quot;odd field first&quot; frames, that could resolve the issue, but otherwise it would be impossible to accurately describe the video as a series of 30Hz frames.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-09-19T20:29:10.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7644" PostTypeId="2" ParentId="7636" CreationDate="2018-09-19T21:16:31.600" Score="8" Body="&lt;p&gt;I guess this builds on what others have said, but here goes anyway:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;there are two independent circuits controlling beam position, one controlling its horizontal position and one its vertical;&lt;/li&gt;&#xA;&lt;li&gt;they are genuinely independent, neither influences the other;&lt;/li&gt;&#xA;&lt;li&gt;the CRT will lengthen or shorten the period each one takes to sweep the entire display to match the pattern of incoming syncs (up to a point, but if your syncs are within that screen's tolerance of the specification, don't worry about it).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Suppose (0, 0) is the top left of the display, and (1, 1) is the bottom right. In that case the pattern the beam follows on the surface of the screen during a frame might be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the diagonal from (0, 0) to (1, just less than 1/525); then&lt;/li&gt;&#xA;&lt;li&gt;the diagonal from (0, 1/525) to (1, just less than 2/525); then&lt;/li&gt;&#xA;&lt;li&gt;the diagonal from (0, 2/525) to (1, just less than 3/525); etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you want progressive scan, your job is easy — make sure that vertical retrace completes at the same time as horizontal retrace. So each new frame starts at (0, 0).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a two-field interlaced scan, you can ensure your vertical retrace ends when horizontal deflection is halfway across the screen. So your next frame will include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the diagonal from (0.5, 0) to (1, just less than 0.5/525);&lt;/li&gt;&#xA;&lt;li&gt;the diagonal from (0, 0.5/525) to (1, just less than 1.5/525);&lt;/li&gt;&#xA;&lt;li&gt;the diagonal from (0, 1.5/525) to (1, just less than 2.5/525); etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Alternate between those two and you've got interlaced video. The two sets of diagonals have the same slope as each other, but one is 0.5 lines above the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two misconceptions tend to arise:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;that interlaced video at 60Hz is just a way of describing 30Hz motion in a different order; and&lt;/li&gt;&#xA;&lt;li&gt;that there must be gaps between the lines in a single field.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;On a real, analogue video camera, the brightness captured at location (x, y) is the brightness at that location at the exact moment the raster passed it. So each field is in total a representation of its subset of the image 1/60th of a second later than the previous. Each line is a representation of its subset of the image 1/15750th of a second later than the previous. Etc. It's not an instantaneous snapshot that is serialised, it's a continuous capture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's then no actual benefit whatsoever to putting gaps between the lines. There's no original static 535-line picture that the TV is seeking to reproduce. The primary concerns are (i) make the raster too fat and consecutive lines will overlap, causing blur; but (ii) make it too thin and you'll reduce screen brightness, which was a significant problem, especially so after colour introduced a shadow mask.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you'd normally aim for the raster to be almost large enough for scanlines that are consecutive in time to meet, but not so large that your engineering tolerances (on beam focus and guidance) meant the two might often overlap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As per Raffzahn's comments to another answer, the idea of thick blank in-between lines is fairly modern and primarily a fiction created by trying to rationalise analogue behaviour into a digital sampling.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-09-19T21:16:31.600" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7645" PostTypeId="2" ParentId="7256" CreationDate="2018-09-19T23:27:32.727" Score="5" Body="&lt;p&gt;Most TRS80 folks today run LSDOS 6.3.x as the main OS on the Model 4. The source is published, it's hackable and it is well supported by modern hardware like the M3SE and the FreHD. TRSDOS 6 was basically the same thing rebadged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Model III mode you need to get a copy MODELA/III and add it to a TRSDOS 1.3 or LDOS 5 diskette. It's documented in the Disk System Manual for the 4P.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need more help I would try somewhere like the Vintage Computer Forum (VCFED) forums as there are a fair number of Trash80 folks active on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alan&lt;/p&gt;&#xA;" OwnerUserId="8813" LastActivityDate="2018-09-19T23:27:32.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7646" PostTypeId="1" CreationDate="2018-09-19T23:33:41.700" Score="12" ViewCount="828" Body="&lt;p&gt;It seems to be common (at least among my section of the world's *NIX users) to refer to &quot;tape archives&quot; made with GNU tar or similar as &quot;tarballs&quot;.  I always thought this was a slightly odd choice, but the imagery does kind of make sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other day I was reading about S-100 systems and how they worked, and came across a note that one of the the most popular tape-drive controller cards for the home enthusiast was the &quot;tar&lt;strong&gt;bell&lt;/strong&gt;&quot;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A one-vowel difference seems like the kind of thing that couldn't just be a coincidence...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any evidence for or against the name of the modern tarball archive being descended from the name of the once-popular tarbell tape drive controller?  Or did the influence perhaps run in the opposite direction?&lt;/p&gt;&#xA;" OwnerUserId="7957" LastEditorUserId="6794" LastEditDate="2018-09-26T21:08:05.417" LastActivityDate="2018-09-26T21:08:05.417" Title="Origin of &quot;tarball&quot;" Tags="&lt;unix&gt;&lt;file-format&gt;&lt;terminology&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7647" PostTypeId="2" ParentId="5080" CreationDate="2018-09-20T00:14:04.800" Score="10" Body="&lt;p&gt;The fastest Z80 computer ever designed and built was almost certainly ZMOB, a 256 node Z80A cluster designed and built at University of Maryland as part of NASA NSG-7253. That's a total of 1GHz of Z80 power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fastest &quot;Z80&quot; computer I own is a Papillo Pro FPGA board running Will Sowerbutts 'SocZ80' FPGA firmware - T80 core @ 128Mhz and a cache fronting 8MB of DRAM also running at 128MHz - so a huge ramdisk and fast hardware SPI SD card interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sowerbutts.com/socz80/&quot; rel=&quot;noreferrer&quot;&gt;http://sowerbutts.com/socz80/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z280 does more per clock but cannot match it at the top clock available. The eZ80 is probably faster as it does more per clock and runs at a decent speed but it's not truely Z80 compatible as it reuses a tiny number of 'silly' instructions (loading a register with itself) for other things and doesn't have the illegals. Pretty much everything works however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both are good candidates coupled with the right other hardware.&lt;/p&gt;&#xA;" OwnerUserId="8813" LastEditorUserId="8813" LastEditDate="2018-09-21T08:38:39.177" LastActivityDate="2018-09-21T08:38:39.177" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7650" PostTypeId="2" ParentId="7636" CreationDate="2018-09-20T07:28:44.973" Score="2" Body="&lt;p&gt;480i is a variation of 240p, in the sense that both write almost 16000 lines per second and almost 60 fields per second. The difference is that 240p writes the same field twice, whereas 480i writes every second field in the space between the lines of the first field. Why repeat the same information twice, right ? This gives approximately 1.5 times vertical resolution, not 2 times. You have to balance the benefits against the &quot;line flicker&quot; artefacts. This does not work well with sharp graphics or text, then you may prefer 240p after all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The display knows that the signal is interlaced from the phase of the vertical sync signal: for one field it coincides with the horizontal sync, for the other field it lies midway between 2 hor sync pulses. Thus both fields are 525/2 lines long. This causes the vertical deflection of the CRT to nicely interleave the 2 fields, without any special effort, even with pre-WW2 technology. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cost of a CRT display application depends strongly on the (horizontal) line frequency. Thus 480i (interlaced) is somewhat superior to 240p (progressive), for the same cost. Also for the same cost you could have 480p at 30 frames per second, but that is unwatchable because of the flicker. 480p at 60 frames per second is superior to 480i, but it requires a line frequency of almost 32 kHz which runs very hot. This only became feasible somewhere in the 1970's-1980's. In Europe this was used for 100 Hz interlaced display, rather than 50 Hz progressive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then came flat matrix displays which are naturally progressive, like 480p. They require an up-conversion, or de-interlacing, and this is where the troubles began. Affordable de-interlacers create visible artefacts, giving 480i a bad reputation. On a CRT it did not look too bad, though. All modern digital video signals are progressive now: 720p, 768p, 900p, 1080p, 1440p, 2160p (UHD). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: I've spent more than half my life in a TV lab. &lt;/p&gt;&#xA;" OwnerUserId="7685" LastActivityDate="2018-09-20T07:28:44.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7651" PostTypeId="2" ParentId="7646" CreationDate="2018-09-20T08:22:07.150" Score="5" Body="&lt;p&gt;Any naming relation is very unlikely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inventor and manufacturer of the &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Tarbell_Cassette_Interface&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tarbell cassette interface&lt;/a&gt;&lt;/em&gt; simply had that name - I pretty much doubt he had his name changed for such a small pun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;tarball&lt;/em&gt;, however, derives from &lt;strong&gt;T&lt;/strong&gt;ape &lt;strong&gt;AR&lt;/strong&gt;chive, a very obvious acronym. No dependency from this direction as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Tarbell&lt;/em&gt; was a name used in the computer hobbyists scene, while Unix &lt;em&gt;tar&lt;/em&gt; thrived in the professional world. Even if both denominations first occured in roughly the same time (mid-end seventies), this looks like a real coincidence to me. Also, the technology used in those two worlds was rather different: The Tarbell interface connected to simple audio cassette recorders and wasn't even able to store a (then, professional Unix) tarball (pun intended). The computers that had a Tarbell interface fitted typically also had this as the only storage media and normally even lacked a floppy disk drive.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-09-21T13:41:39.710" LastActivityDate="2018-09-21T13:41:39.710" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7652" PostTypeId="1" AcceptedAnswerId="7654" CreationDate="2018-09-20T08:46:03.113" Score="48" ViewCount="13232" Body="&lt;p&gt;When I look at the following picture, it seems a bit awkward to me that personal computers ever supported 8&quot; floppies (unless the size of your computer case was as big as a fridge !):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/8/88/Floppy_Disk_Drive_8_inch.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I right or were there any personal computers that supported this size of floppies?&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="780" LastEditDate="2018-09-20T16:11:13.963" LastActivityDate="2019-01-25T05:25:13.637" Title="Did personal computers ever support 8&quot; floppies?" Tags="&lt;floppy-disk&gt;" AnswerCount="20" CommentCount="11" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7653" PostTypeId="2" ParentId="7652" CreationDate="2018-09-20T08:54:15.497" Score="12" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Altair_8800&quot; rel=&quot;noreferrer&quot;&gt;The Altair 8800 probably qualifies as a personal computer&lt;/a&gt;. It could certainly be used with 8-inch floppy drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine the size of a bog-standard desktop computer today. That's roughly the size of an Altair 8800. The floppy drive is a similar-sized unit sitting directly beneath it on the picture on the Wikipedia page.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-09-20T08:54:15.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7654" PostTypeId="2" ParentId="7652" CreationDate="2018-09-20T09:10:22.420" Score="58" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;When I look at the following picture, it seems a bit awkward to me that personal computers ever supported 8&quot; floppies&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As so often it depends on your definition of 'personal computer'&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's about a &lt;em&gt;personal&lt;/em&gt; computer, then many minis may fit, and they did often offer 8&quot; floppies like the &lt;a href=&quot;http://gunkies.org/wiki/RX0x_floppy_drive&quot; rel=&quot;noreferrer&quot;&gt;RX01/02 type&lt;/a&gt; DEC had.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's about (early) microprocessor based personal computers, like various &lt;a href=&quot;https://en.wikipedia.org/wiki/S-100_bus&quot; rel=&quot;noreferrer&quot;&gt;S100&lt;/a&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Altair_8800&quot; rel=&quot;noreferrer&quot;&gt;Altair&lt;/a&gt;,  &lt;a href=&quot;https://en.wikipedia.org/wiki/IMSAI_8080&quot; rel=&quot;noreferrer&quot;&gt;Imsai&lt;/a&gt;, etc.)  or &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_Model_II&quot; rel=&quot;noreferrer&quot;&gt;Tandy Model II&lt;/a&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Tandy_10_Business_Computer_System&quot; rel=&quot;noreferrer&quot;&gt;or 10&lt;/a&gt;), then there was no other choice (if floppy based), as the 5.25 wasn't available prior to the SA400 in 1976 – and it didn't really become a thing until like two years later.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now, if your question is about the &lt;em&gt;IBM&lt;/em&gt; PC, then no, they where not delivered with 8&quot; drives by default, but DOS did support them (as well as CP/M-86) and they could be ordered as an &lt;a href=&quot;https://www.recycledgoods.com/ibm-6360-dual-8-inch-external-floppy-drives-pn-4240516/&quot; rel=&quot;noreferrer&quot;&gt;add on&lt;/a&gt; – even as late as the &lt;a href=&quot;https://www.recycledgoods.com/ibm-9331-011-8-external-floppy-drive/&quot; rel=&quot;noreferrer&quot;&gt;mid 1990s&lt;/a&gt;. Given a PC with a floppy controller &lt;a href=&quot;http://synthroom.com/fairlight-cmi/fairlight-disk-imaging/&quot; rel=&quot;noreferrer&quot;&gt;it still does&lt;/a&gt; – all that's needed is a cable adapter (and maybe a stronger PS).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(unless the size of your computer case was as big as a fridge!):&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Maybe not fridge-sized. It worked well with desktop units. They weren't that big when put in a &lt;a href=&quot;http://planemo.org/retro/repairing-8-floppy-drive/&quot; rel=&quot;noreferrer&quot;&gt;sleek case&lt;/a&gt; (ofc, using &lt;a href=&quot;http://www.retrotechnology.com/herbs_stuff/zenithfd.jpg&quot; rel=&quot;noreferrer&quot;&gt;slim line drives&lt;/a&gt; did help a bit :)).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-21T22:35:43.230" LastActivityDate="2018-09-21T22:35:43.230" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7655" PostTypeId="1" CreationDate="2018-09-20T09:15:41.513" Score="4" ViewCount="1308" Body="&lt;p&gt;Considering the ZX Spectrum, part of the memory is accessible to both the ULA and the CPU, and the CPU is slowed down when it is using that area, so that the framebuffer can be read out. As I understand, some Amigas also have a region of memory which slows the CPU down when the CPU reads/writes to it, because it is connected not only to the CPU, but also to the video/sound/etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it's occurred to me, that the vast majority of interaction with the framebuffer on these systems will be to write something. Only rarely will it be necessary to read from the framebuffer. So it seems to me, that whenever the ZX Spectrum wrote a byte to the 8 KB containing the display file, instead of slowing the CPU down to allow that to happen, the value and the address could have been latched, and the write to the memory could happen later on -- say, when the Z80 is fetching the next instruction. It should be possible so long as the video memory is on a separate bus from the rest of memory. (Of course, it would require a little extra circuitry, and would possibly preclude being able to execute code from this region, but it's probably worth doing, right?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what's with this design decision? The ZX Spectrum, the Amiga, the Commodore 64, all slow the CPU down so that the video can be read! Did any retrocomputing system buffer the write so as to let the CPU run at full speed whenever it's not reading from the framebuffer (which is practically always)?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-09-20T09:24:21.937" LastActivityDate="2020-04-29T23:16:30.030" Title="A different way to share the memory bus between the CPU and the Video" Tags="&lt;hardware&gt;" AnswerCount="7" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7656" PostTypeId="2" ParentId="7655" CreationDate="2018-09-20T09:49:38.410" Score="4" Body="&lt;p&gt;Ultimately these computers were designed with price as a primary design goal, rather than squeezing the absolute maximum performance possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First you'd have to separate the video memory. The screen is 7k, not 8k, and the Spectrum uses a 16+32 configuration of RAM chips. So you'd have to go to 8+8+32. That alone would probably make this idea a non-starter as you're adding 8 more chips and their routing to the board area. And it &quot;wastes&quot; about a kilobyte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you'd have to do the write buffering somewhere. Maybe within the ULA, but if not you're adding yet more chips to the board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The Amiga &lt;em&gt;does&lt;/em&gt; make this distinction for addon memory between &quot;chip&quot; and &quot;fast&quot;: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1119/what-is-the-benefit-of-increasing-amiga-chip-memory?rq=1&quot;&gt;What is the benefit of increasing Amiga chip memory?&lt;/a&gt; )&lt;/p&gt;&#xA;" OwnerUserId="778" LastActivityDate="2018-09-20T09:49:38.410" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7657" PostTypeId="2" ParentId="7655" CreationDate="2018-09-20T10:12:32.420" Score="1" Body="&lt;p&gt;In addition to pjc50's answer (i.e. that performance simply wasn't a high priority design goal for these systems), there are more things to consider, at least for the Spectrum:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A cheaper way of increasing performance would have simply to have used the full performance of the CPU: the Spectrum ran at 3.5MHz but its processor is rated for 4MHz.  The modifications to allow this would have increased complexity, but would have done so less than the modification outlined in pjc50's answer to allow for separate framebuffer access.  This would have made a much larger improvement for lower cost.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Another simpler improvement would have been to use slightly faster memory and a small readahead buffer.  The Spectrum used 200ns memory, but if it had used 150ns memory it would have been able to squeeze all of its screen access operations into the gaps between Z80 memory accesses, allowing the CPU to run unimpeded.  It wouldn't be able to guarantee getting framebuffer data at exactly the right time, though, so it would have had to buffer a handful of bytes ahead in an internal buffer.  This would have had a minimal cost increase to the memory and only a small complexity increase in the ULA (I don't know how much of the available capacity of the ULA was used, so that may or may not have resulted in a cost increase for producing them).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And, at the end of the day, the 48K spectrum had 2/3 of its memory that didn't have the penalty on access anyway, so performance critical applications could simply use that memory and avoid it (and perform display updates during the retrace interval).  The 16K model only existed as a concession to the budget end of the market, and its performance was therefore a lot less critical.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="547" LastEditorUserId="1912" LastEditDate="2019-10-28T08:46:00.997" LastActivityDate="2019-10-28T08:46:00.997" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7658" PostTypeId="2" ParentId="7652" CreationDate="2018-09-20T10:13:45.883" Score="12" Body="&lt;p&gt;The old NEC APC was equipped with two 8&quot; floppies, with about&#xA;1.2 megabyte of storage on each. &lt;a href=&quot;http://www.thepcmuseum.net/details.php?RECORD_KEY%28museum%29=id&amp;amp;id(museum)=787&amp;amp;PHPSESSID=6cd5d70f8b01c34347b2e92bdce9361c&quot; rel=&quot;noreferrer&quot;&gt;Museum system here.&lt;/a&gt;  In the early 1980s, it was&#xA;considered a fine performer, but Macintosh and Windows graphics&#xA;and inexpensive hard disk drives were just around the corner.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2018-09-20T10:13:45.883" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7659" PostTypeId="2" ParentId="7652" CreationDate="2018-09-20T10:27:15.567" Score="14" Body="&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5391/547&quot;&gt;previously discussed in the comments to this answer&lt;/a&gt;, the BBC Micro was designed to support use with 8&quot; disks -- it was part of the design specification from the BBC, because a lot of their archives at the time used such disks.  It required a simple modification to do so (changing a solder link on the main board), so it wasn't common to use them, but it was certainly part of the original design process.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-09-20T10:27:15.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7660" PostTypeId="2" ParentId="7655" CreationDate="2018-09-20T10:58:58.663" Score="14" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So what's with this design decision? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;Not as helpful as it looks on first sight.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;For one, it does need at least three chips for latching the data (8 Bit Data and 11 to 16 bit address) plus a considerable number to handle the access whenever there is time, plus a some muxes to switch the busses, as the CPU still needs the ability for read data from screen memory. Quite a lot of pins to solder (and pay for).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, the gain is rather meager. It's only a single (write) access that gets buffered. As soon as there is a second (before the screen memory can be accessed again), the CPU gets halted … as without. Equally important, the CPU gets also still put on hold for a read access.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Timing&lt;/h2&gt;&#xA;&#xA;&lt;h3&gt;A Line&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;To validate this it helps to take a look at (average) screen timing. Lets assume a system where the video part needs the whole RAM bandwidth during display (or at least so much that there can't be any CPU access in between). During a picture this is only true while a scan line is displayed. Lets stay with 1980s TV sized picture. Here &lt;a href=&quot;https://en.wikipedia.org/wiki/Analog_television#Structure_of_a_video_signal&quot; rel=&quot;noreferrer&quot;&gt;a line is defined&lt;/a&gt; as 64 (63,6 for NTSC) µs. Thereof 12 (10.9) µs are used for synchronisation purpose and 52 (52,7) µs are for a potentially visible signal. Let's just assume the VDC uses all of that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;52 µs is quite some time in a CPU life – and especially more than enough to attempt to write more than one byte to screen memory. On a 1 MHz 6502 that equals up to 6–8 sequential writes in a tight copy loop. A 4 MHz Z80 can as well do up to 9 writes during that time (Let's for simplicity assume it tales 10µs per single meaningful write). That's about the maximum. And it'll of course overrun the single transaction buffer. To really use it some FIFO for address and data is needed. Increasing cost again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course even a FIFO would only postpone the access into the gap between lines. Then again, a memory good enough for either of these CPUs will be able to squeeze a good 20 write access into the line retrace. So yes, such a FIFO could resolve it and give the CPU seemingly unhindered access. As noted, that's only true as there is no intermediate read access, which would halt the CPU again. So no bitblit please. Not to mention that there needs to be some priority logic to maybe let a waiting read slip in at the beginning of a line gap before the buffered writes are done, so the CPU only needs to wait for a minimum … err … no, bad idea, as it would possibly deliver old, already changed data, which has just not been committed by now. Drats.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;The Whole Picture&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A picture isn't just lines, but also frame structure. There are 286 (243) &lt;em&gt;visible&lt;/em&gt; lines for a total of 18.3 (15.5) ms within a 20 (16.6) ms frame (50/60 Hz). With our model CPUs that allows for a maximum of ~170 (110) bytes written outside the visible part. In addition two writes per line can be done (*1), adding it up to 456 (353) accesses per frame or 22.8 (21.2) KiB/s (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding a single access buffer to this would increase this by ~62 (68) percent to 37.1 (35.7) KiB/s. Sounds not bad. A 10 entry FIFO will even get it up to close to full speed (something like 100 KiB/s). Even better, isn't it? Except, this will break down quite hard if the job is not just a tight copy loop, but maybe some bitblitting with decisions and transformations in between.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;So, What to do Instead?&lt;/h2&gt;&#xA;&#xA;&lt;h3&gt;Full Interleave&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;As long as the timing requirement isn't too tight (as in 'already using the fastest RAM affordable'), it's better to avoid a collision at all by using RAM with a bandwidth of double what's needed for screen refresh (or CPU, whatever is higher), so the CPU can access it with no (or little) speed penalty. Something very common on 6502 systems, where RAM anyway has to be twice as fast as the CPU. Now there are no additional cost for perfect access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the backside, this requires RAMs always being double the speed, even when not needed (during retrace).&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Only Partial Take Over&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The C64s VIC shows an in between solution, by mostly acting when the CPU isn't accessing the RAM and only stoping it when it needs additional bandwidth.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Just Live With It&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;As seen in the whole picture calculation, while we are talking about a 60+ percent speed up in tight loops, it is in absolute numbers still a meager transfer rate. A lot of Hardware to gain a little.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Better Improve the Rest&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Instead of spending a handful of TTLs on a little and often not reached gain, using the same amount of gates for a more capable VDC could be way more rewarding. Building a (very simple) DMA copy circuit can move like a 5 to 10-fold amount per time than the CPU can do (*3). Adding a full DMA controller to the system might cost even less. Then again, with a specific circuit additional benefits are possible – like bitblitting and so on.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did any retrocomputing system buffer the write so as to let the CPU run at full speed whenever it's not reading from the framebuffer (which is practically always)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Leaving the interleave/partial blocking systems apart, there are all machines using a 9918. It does buffer &lt;em&gt;one&lt;/em&gt; transaction and a 3.5 MHz Z80 could access it (virtually) without being stopped (*4). Similar systems that used a second CPU for I/O had that advantage. Though, not many where made.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 – Thats one lovely part – and crucial to memorize: Any access done during a line will stop the CPU (in basic configuration), and release it one memory cycle after the end of the line. Giving the lock the whole 12 (10.9) µs for another interaction, which can be done in a tight loop, making the next write happen instantly and then putting the CPU on hold again. So as soon as the horizontal retrace is longer than one loop iteration plus one memory cycle, always two will fit – already creating parallel action for up to 2/6th of a line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 – Here also lies one major reason why early computers had to use tile graphics and sprites (besides not enough RAM): not enough bandwidth. A CPU of that kind can not move even in a tight loop more than about ~2 KiB per frame – without being halted that is. Not enough to brute force an acceptable frame rate. Using tiles and sprites reduced the amount to (maybe) less than an 1/8th, making it possible again to sustain a good frame rate (still needing a good tile design :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 – No, using a Z80 LDIR is not the same as DMA. It takes 21 cycles to move a byte. With two cycles per memory access, DMA can do the same in merely 4 cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 – Calculation is a bit complex here, as for one the 9918 has a basic access time of 2 µs plus 0–6 µs wait, depending on internal action (frame or line) and within a line on what graphics mode is used. With a Z80 and LDIR as (a fast) use case, this comes down to a maximum effective CPU clock of 2–10 MHz depending on when the access happens. For all practical matters a 3.5 MHz Z80 can write to a 9918s screen memory virtually without being slowed down.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2018-09-20T15:51:36.123" LastActivityDate="2018-09-20T15:51:36.123" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7661" PostTypeId="2" ParentId="7655" CreationDate="2018-09-20T11:44:23.577" Score="0" Body="&lt;p&gt;You seem to assume a single latch could suffice buffering video memory writes from the CPU while the RAM is busy shifting out bits to the DAC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That would assume that a single CPU instruction is only capable of pushing out a single byte to video RAM - but this is not the case: 16-bit accesses (which you could buffer with two latches) or even more complex instructions like LDIR (that would need way more buffers) on a Z80 transfer lots more bytes in a single instruction fetch. In order to catch these, you would need more buffers, actually a second video RAM - This ends up in an actual component, &lt;em&gt;dual-ported memory&lt;/em&gt;, that you can actually buy, albeit at much higher prices than &quot;normal&quot; RAM. Dual-ported memory has been used as video memory on contemporary (expensive) computers and is even used today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dual-ported memory is actually the thing that you are describing, just extended to cover any real application.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-09-20T11:44:23.577" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7662" PostTypeId="2" ParentId="7655" CreationDate="2018-09-20T12:17:20.917" Score="6" Body="&lt;p&gt;Re: did any computer use this scheme, which I think is still unanswered; yes: several.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TMS9818[/a] was used by the TI99/4[/a], MSX, ColecoVision, and many more. It doesn't share RAM with the CPU, it has its own. The CPU isn't synchronised to the TMS's memory windows when it wants to read or write, it writes to (or reads from) a latch that is written to (/read from) video memory whenever there is next a spare slot to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that the access slots are far enough apart that you can't write to the latch at full speed or you'll start overwriting values that haven't been written yet. If you spend up the RAM so that slots were always available, you might as well eliminate the latch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, the chip has a diverse family tree, at least some of which block on write only if the latch is full; that's an effective strategy but starting to get a little electronically complicated for a machine of the Spectrum and C64 vintage.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-09-20T13:20:14.683" LastActivityDate="2018-09-20T13:20:14.683" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7663" PostTypeId="2" ParentId="7652" CreationDate="2018-09-20T12:29:39.857" Score="15" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Olivetti_P6060&quot; rel=&quot;nofollow noreferrer&quot;&gt;Olivetti P6060&lt;/a&gt; had 8&quot; floppy drives (two of them). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;About the size of a typewriter, and ran BASIC, so IMHO it qualifies as &quot;Personal Computer&quot;. The Wikipedia page even describes it as &quot;portable&quot;, but that's pushing it a bit - while one person is able to carry it around, unlikely, say, a DEC PDP-11 or PDP-8, it wasn't exactly lightweight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Wikipedia page also says &quot;first Personal Computer with a floppy disk&quot; (April 1975), but I guess that depends on the definition of &quot;Personal Computer&quot;.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2018-09-25T11:53:54.283" LastActivityDate="2018-09-25T11:53:54.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7664" PostTypeId="2" ParentId="7638" CreationDate="2018-09-20T12:57:20.073" Score="12" Body="&lt;p&gt;It's worth noting that CP/M was written originally in the PL/M-80 programming language (also developed by Gary Kildall)  (source &lt;a href=&quot;http://www.cpm.z80.de/source.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; )&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/intel/PLM/9800268B_PLM-80_Programming_Manual_Jan80.pdf&quot; rel=&quot;noreferrer&quot;&gt;PL/M-80 Manual&lt;/a&gt; on page 11 states that&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The character set used in PL/M is a subset of both ASCII and EBCDIC character sets.  The valid PL/M characters consist of the alphanumerics&lt;/p&gt;&#xA;&lt;p&gt;A B C D E F G H I J K L M N O P Q R S T U V W X Y Z&lt;/p&gt;&#xA;&lt;p&gt;a b c d e f g h I j k l m n o p q r s t u v w x y z&lt;/p&gt;&#xA;&lt;p&gt;0 1 2 3 4 5 6 7 8 9&lt;/p&gt;&#xA;&lt;p&gt;along with the special characters&lt;/p&gt;&#xA;&lt;p&gt;= . / ( ) + - ' * , &amp;lt; &amp;gt; : ;&lt;/p&gt;&#xA;&lt;p&gt;and the blank characters&lt;/p&gt;&#xA;&lt;p&gt;space  tab  carriage-return  line-feed&lt;/p&gt;&#xA;&lt;p&gt;If a PL/M program contains any character not in this set, the compiler may treat the character as an error&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's 80 characters.&lt;/p&gt;&#xA;&lt;p&gt;Interestingly there is no mention there of $ at all - yet on page 15 it is listed as a character that &amp;quot;may be freely inserted between the characters of a constant to improve readability&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I can't say whether or why this might have affected the decision to use $ as the string terminator for function 15 in CP/M, especially since page 16 is explicit that &amp;quot;character strings are denoted by printable ascii characters enclosed by apostrophes&amp;quot; which doesn't limit it to the same character set as the code body.&lt;/p&gt;&#xA;&lt;p&gt;I can say from personal experience that function 15 was almost never used, and CP/M / CP/M-86 / MP/M / Concurrent DOS / CDOS /… assembler programmers pretty well invariably used subroutines containing loops that called function 2, usually using either a byte count or a null terminator.&lt;/p&gt;&#xA;" OwnerUserId="10626" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-09-20T13:06:00.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7665" PostTypeId="2" ParentId="7652" CreationDate="2018-09-20T13:44:45.533" Score="31" Body="&lt;p&gt;Back in the day I used to use an Intel MDS-80 which had an 8 inch floppy beside the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rgEcU.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rgEcU.jpg&quot; alt=&quot;Intel MDS-80&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We often had a pair of expansion drives (also 8&quot;) in an expansion unit below the main system box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mm85z.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mm85z.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One problem that reared its head with great regularity was that a full map file, required so that we could find the address of a function and set a debug break point in our code, was too big to fit on the floppy disc meaning that we had to spool it to the printer during the build resulting in a stack of fanfold paper about an inch thick.&lt;/p&gt;&#xA;" OwnerUserId="6554" LastActivityDate="2018-09-20T13:44:45.533" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7666" PostTypeId="2" ParentId="7652" CreationDate="2018-09-20T13:59:13.563" Score="10" Body="&lt;p&gt;The &lt;a href=&quot;http://www.threedee.com/jcm/terak/&quot; rel=&quot;noreferrer&quot;&gt;Terak&lt;/a&gt; corporation sold personal computers. In the early 1980's I used one with UCSD Pascal to run experiments for my undergraduate research project. The 8-inch floppy was the only disk I had available.&lt;/p&gt;&#xA;" OwnerUserId="8207" LastActivityDate="2018-09-20T13:59:13.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7667" PostTypeId="2" ParentId="7652" CreationDate="2018-09-20T14:43:58.010" Score="66" Body="&lt;p&gt;The Radio Shack Model II had a built-in singled-sided Shugart 500k 8&quot; floppy drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_Model_II&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/TRS-80_Model_II&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tEBMy.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tEBMy.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5094" LastActivityDate="2018-09-20T14:43:58.010" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7668" PostTypeId="2" ParentId="7652" CreationDate="2018-09-20T16:38:06.230" Score="6" Body="&lt;p&gt;Even the TRS-80 Model 1 could use 8-inch floppy drives. All floppy drives for that system were &lt;em&gt;external&lt;/em&gt;, connected by ribbon cables. Configuring a DOS to control an 8-inch drive wasn't much different from configuring it to handle a double-density, double-sided or double-track-density 5 1/4-inch drive, as I recall. (I never had an 8-inch drive myself, though.)&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2018-09-20T16:38:06.230" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7670" PostTypeId="2" ParentId="7633" CreationDate="2018-09-20T22:34:18.927" Score="7" Body="&lt;p&gt;Although none of my databooks directly state how multiplication is done, we can infer several things from what they do say.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My copy of &lt;em&gt;M68000 8-/16-/32-bit Microprocessor User's Manual&lt;/em&gt; shows the execution times of the MC68000 multiply instructions on page 8-4:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MULS    70(1/0)+*&#xA;MULU    70(1/0)+*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where 70 is the number of processor cycles, 1 means one read cycle, 0 means no write cycles, &lt;code&gt;+&lt;/code&gt; means additional cycles to fetch the effective address should be added, and &lt;code&gt;*&lt;/code&gt; means that the number 70 is the &lt;em&gt;maximum&lt;/em&gt; number of cycles.  Below this is exactly the text that @DroidW quotes in his answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On page 10-5 of the same databook, the execution times for the MC68010 are listed:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MULS    42(1/0)+*&#xA;MULU    40(1/0)*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note how fewer clock cycles are needed for this processor.  I'm not sure why this &lt;code&gt;MULU&lt;/code&gt; instruction is missing the &lt;code&gt;+&lt;/code&gt; for effective address calculation (perhaps a typo).  Also, &lt;em&gt;this&lt;/em&gt; table is missing the text that @DroidW quotes in his answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MC68000 indeed uses &lt;a href=&quot;https://en.wikipedia.org/wiki/Microcode&quot; rel=&quot;noreferrer&quot;&gt;microcode&lt;/a&gt; (and in some cases nanocode).  The processor simply doesn't have enough combinational logic to perform a complete multiplication calculation in one cycle.  Instead, it repeats some basic operations, with a loop controlled by the microcode.  There are no barrel shifters, just single-bit shifts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's call the multiplicand &lt;em&gt;D&lt;/em&gt;, the multiplier &lt;em&gt;R&lt;/em&gt;, and the product &lt;em&gt;P&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To multiply &lt;strong&gt;unsigned&lt;/strong&gt; numbers (MULU), we perform a long multiplication algorithm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(1) Clear the product &lt;em&gt;P&lt;/em&gt; = 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2) Shift &lt;em&gt;P&lt;/em&gt; one bit left.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(3) Shift &lt;em&gt;D&lt;/em&gt; one bit left, and check the bit shifted out (the MSB).  If it is zero, skip to step 5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(4) Add &lt;em&gt;R&lt;/em&gt; to the product &lt;em&gt;P&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(5) Repeat steps 2 to 4 for each bit of &lt;em&gt;D&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the branch in step 3 jumps ahead to step 5, it makes sense that the number of cycles will be based on 2x(number of ones in the multiplicand).  This is confirmed in @DroidW's quote.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In later chips such as the 68010, we can add more logic to accomplish steps 2 to 4 in parallel.  Also, instead of the branch in step 3, we can mask &lt;em&gt;R&lt;/em&gt; with the bit from step 3, and then always add that result to &lt;em&gt;P&lt;/em&gt;.  These measures reduce the number of machine cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In later processors, you can unroll the loop and use a large number of adders.  It uses a lot more hardware and is harder to design, but is much faster.  For example, to multiply binary numbers &lt;code&gt;1101&lt;/code&gt; and &lt;code&gt;0101&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   1101  value of R&#xA;  1101   value of R&#xA; 0000    R is masked&#xA;0000     R is masked&#xA;=======&#xA;0100111&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To multiply &lt;strong&gt;signed&lt;/strong&gt; numbers (MULS), we use &lt;a href=&quot;https://en.wikipedia.org/wiki/Booth&amp;#39;s_multiplication_algorithm&quot; rel=&quot;noreferrer&quot;&gt;Booth's algorithm&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(1) Set &lt;em&gt;P&lt;/em&gt; to &lt;em&gt;D&lt;/em&gt;.  An additional bit is added to the right (a new LSB), which is initialized to zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2) Examine the two least significant bits of &lt;em&gt;P&lt;/em&gt;.  If 01, continue to step 3.  If 10, skip to step 4.  Otherwise, skip to step 5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(3) Add &lt;em&gt;R&lt;/em&gt; to the upper word of &lt;em&gt;P&lt;/em&gt;.  Jump to step 5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(4) Subtract &lt;em&gt;R&lt;/em&gt; from the upper word of &lt;em&gt;P&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(5) Arithmetically shift &lt;em&gt;P&lt;/em&gt; one bit right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(6) Repeat steps 2 to 5 for all bits of &lt;em&gt;D&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, there is more work to be done when bit patterns 01 and 10 are seen.  This is confirmed by @DroidW's quote.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In advanced processors, you can also unroll this algorithm using hardware.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2018-09-20T22:34:18.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7671" PostTypeId="2" ParentId="7652" CreationDate="2018-09-20T23:53:29.127" Score="8" Body="&lt;p&gt;&lt;strong&gt;This is the stone age we're talking about!&lt;/strong&gt;  Back when I was a kid and dinosaurs still roamed the Earth, I:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;bought a small colour TV, a keyboard, 64K of RAM, a Z80, an 6MHz crystal, a &lt;a href=&quot;https://i.stack.imgur.com/z0JEH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;wax pen&lt;/a&gt;, a &lt;a href=&quot;https://i.stack.imgur.com/6sAhM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;copper board&lt;/a&gt; and a second-hand 180KB single-sided 5 1/4&quot; floppy drive and some other related chips.&lt;/li&gt;&#xA;&lt;li&gt;had a friend that already had a computer download a motherboard schematic over a fast 1200 BAUD modem &lt;strong&gt;¹&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;drew the lines on the copper board with the wax pen, asked the chemistry teacher for some sulphuric acid, etched the excess copper away&lt;/li&gt;&#xA;&lt;li&gt;soldered everything together&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;and that was it!&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;An actual case was out of the question because that inhibited natural airflow!&lt;/em&gt; (this was a fanless design without heat sinks)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motherboard just sat straight onto the desk² with a &lt;a href=&quot;https://i.stack.imgur.com/rGj83.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;flat cable&lt;/a&gt; attached to the 5 1/4&quot; floppy drive also straight on the desk and when I could lay my hands on a &lt;strong&gt;whopping 1.2 MByte 8&quot; floppy drive&lt;/strong&gt; 6 months later, &lt;em&gt;that one now sat on the desk&lt;/em&gt; &lt;a href=&quot;https://i.stack.imgur.com/OhbXw.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;with the 5 1/4&quot; stacked on top!&lt;/a&gt; ³ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The colour TV sat on 2 nicely polished wooden blocks cut to &lt;em&gt;exactly&lt;/em&gt; eye height! &lt;strong&gt;:-)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;&#xA;&lt;strong&gt;Note ¹:&lt;/strong&gt; That's 1.2 Kbps.  And that was considered fast and 2400 BAUD was considered &lt;em&gt;too fast&lt;/em&gt; because you couldn't read that quickly while you were  downloading text files!&lt;br&gt;&#xA;&lt;strong&gt;Note ²:&lt;/strong&gt; OK, it had 6 rubber feet glued to the bottom&lt;br&gt;&#xA;&lt;strong&gt;Note ³:&lt;/strong&gt; OK, with a rectangular piece of wood in-between them&lt;br&gt;&#xA;&lt;strong&gt;Note ⁴:&lt;/strong&gt; I'll ask my dad if he has any pictures of this contraption, but as pictures were a luxury item at the time, I don't think he has any...&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="10632" LastEditorUserId="10632" LastEditDate="2018-09-21T10:09:46.357" LastActivityDate="2018-09-21T10:09:46.357" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7672" PostTypeId="2" ParentId="3191" CreationDate="2018-09-21T05:32:02.987" Score="1" Body="&lt;p&gt;To speed up disk operations most emulators intercept jumps to specific code in Atari ROM bypassing it and handling operation natively so loading is almost instantaneous and there is no accompanying sound. This is controlled by &quot;SIO Patch&quot; option. Beeping loading sound can be heard when this option is off, but loading would take significantly more time.&lt;/p&gt;&#xA;" OwnerUserId="10633" LastActivityDate="2018-09-21T05:32:02.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7673" PostTypeId="1" AcceptedAnswerId="7674" CreationDate="2018-09-21T07:40:58.633" Score="9" ViewCount="6381" Body="&lt;p&gt;In a movie that unfortunately I don't remember the name of, a monochrome monitor using red shade was visible. I found that quite fascinating back then !&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside green, amber and apparently gray, were other colors ever been in use by some obscure hardware ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Monochrome laptop screens rendering in negative  colors are welcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following participants to this question, some pictures of &lt;em&gt;less conventional than green&lt;/em&gt; monitors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An amber screen in all of its glory (&lt;a href=&quot;https://coredumpproject.tumblr.com/post/138003724917/dreemurr-the-dank-meemurr-ms-dos5-all-the&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QkmS8.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QkmS8.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Monochrome plasma of an IBM PS/2 Model P70 (&lt;a href=&quot;https://twitter.com/foone/status/912132808914518016&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W9scA.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W9scA.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Red color plasma (&lt;a href=&quot;https://twitter.com/kneehighspy/status/869163870614687744&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hG2Kd.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hG2Kd.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2018-09-21T17:21:55.793" LastActivityDate="2018-09-22T08:22:57.403" Title="What were other colors beside green and amber for monochrome monitors?" Tags="&lt;crt-monitor&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7674" PostTypeId="2" ParentId="7673" CreationDate="2018-09-21T07:56:54.860" Score="12" Body="&lt;p&gt;Non-CRT monochrome screens used various colours related to the underlying technology:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;monochrome plasma screens were reddish-orange; see for example &lt;a href=&quot;https://en.wikipedia.org/wiki/Plasma_display#History&quot; rel=&quot;noreferrer&quot;&gt;the PLATO terminals&lt;/a&gt; or &lt;a href=&quot;https://books.google.fr/books?id=iYmIeqES1fYC&amp;amp;lpg=PT6&amp;amp;dq=plasma%20display%20PC%20Magazine&amp;amp;pg=PT6#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;the Toshiba 4400SX&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;early LCD screens were bluish, some more than others; I particularly remember early Toshiba laptops being notably blue (see &lt;a href=&quot;https://books.google.fr/books?id=20tQCmhyNEMC&amp;amp;lpg=PA376&amp;amp;pg=PA132&amp;amp;redir_esc=y#v=onepage&amp;amp;q&amp;amp;f=true&quot; rel=&quot;noreferrer&quot;&gt;this photo of a T1000&lt;/a&gt;), and many “graphical” calculators exhibit this too.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Many monochrome laptops supported “negative” colours, often using a hotkey to flip from “normal” to inverted colours. See &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/5172/79&quot;&gt;Invert LCD screen in DOS 5.0&lt;/a&gt; for an example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Monochrome CRTs’ colour depended entirely on the phosphor used to coat the display; &lt;a href=&quot;https://en.wikipedia.org/wiki/Phosphor#Standard_phosphor_types&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia lists the standard phosphor types&lt;/a&gt;, of which there are many. Only a few were used in CRT monitors attached to typical computers, giving the typical green, amber or white displays, but other displays used different colours or phosphors with different decay properties: look for EKG monitors and radar screens in the list.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-09-21T08:04:53.170" LastActivityDate="2018-09-21T08:04:53.170" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7675" PostTypeId="2" ParentId="7652" CreationDate="2018-09-21T10:18:22.390" Score="6" Body="&lt;p&gt;I have an ATR8000 Z80 based CP/M system with two 8&quot; floppy drives (plus a 5.25&quot; floppy drive). I recently took it out of storage to pull some files from a set of 8&quot; floppy disks. This system is dual boot, as it has an 8088 &quot;coprocessor&quot; and 512MB ram add-on that allows me to also run MSDOS 2.11. (If running CP/M, I can use the 512MB of ram as a ram disk). I transfer files to DOS compatible 5.25&quot; floppy disks and from there transfer the files to a PC. I don't have the space to set it up permanently, and I was planning to give it away, but a friend is going to buy it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Decades ago, I worked with a Pertec PCC 2000 8085 based CP/M system, that included two half height 8&quot; floppy drives and also a 6MB hard drive. It was all in one case, that included the monitor, keyboard, serial port and printer port, and port that worked with those old 14 inch single platter hard drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen a few of the Radio Shack TRS 80 CP/M systems, Altair 8800's, and some S100 CP/M systems back in the &quot;olden&quot; days.&lt;/p&gt;&#xA;" OwnerUserId="4660" LastActivityDate="2018-09-21T10:18:22.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7676" PostTypeId="1" AcceptedAnswerId="7679" CreationDate="2018-09-21T11:20:39.790" Score="8" ViewCount="1337" Body="&lt;p&gt;As I recall, on the Commodore 64's text mode, if you chose certain colour combinations, the letters would be badly obscured by some kind of interference which seemed to affect each character cell individually. If you put a yellow &lt;code&gt;A&lt;/code&gt; atop of a blue background, it would put several yellow pixels inside that character cell beyond the ones which made up the &lt;code&gt;A&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other combinations looked well, some reasonable, some terrible. I had around three different Commodore 64s from different batches, revisions, which all exhibited this problem, all connected by RF to a small cheap TV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yellow on a blue background would be the worst affected, green on a blue background would be somewhat better, and light blue on a blue background would be splendid and clear. White or greys on a black background also would be clear. I'm sure I'm not misremembering the fact this happened, but I find VICE doesn't seem to emulate it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did certain color combinations cause bad interference in the textmode on the C64?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-09-26T07:47:10.817" LastActivityDate="2020-01-04T14:13:35.863" Title="Why did certain color combinations look terrible on the Commodore 64?" Tags="&lt;commodore-64&gt;&lt;video&gt;" AnswerCount="2" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="7677" PostTypeId="2" ParentId="7652" CreationDate="2018-09-21T11:53:47.933" Score="20" Body="&lt;p&gt;Adding another to the list, I received a free TRS-80 Model 12 from my high school in 1988, complete with internal 8&quot; floppy drive and external 12MB hard drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FSfzr.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FSfzr.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time, I was convinced that the 12MB drive would provide all the digital storage space I would ever need for the rest of my life.&lt;/p&gt;&#xA;" OwnerUserId="10636" LastActivityDate="2018-09-21T11:53:47.933" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7678" PostTypeId="2" ParentId="7646" CreationDate="2018-09-21T12:18:18.950" Score="11" Body="&lt;p&gt;Tar stood for 'tape archiver' so there is no real doubt where the 'tar' name itself came from. The V7 papers and manual pages are fairly explicit on it's origin replacing v6 tp.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other problem with the idea is that 'tarball' appears to be relatively modern as a term. I can't find a book reference before 1997 that uses the word 'tarball' - possibly not surprising since the use of 'tarball' in environmental science is also relatively modern. It was used on Usenet a little before (Clay Luther used it on comp.sources.unix in 1994) but on a trawl of Usenet I can't find anything pre 1990. Mid 1990s yes and by 1997 it's mainstream because FreeBSD used the term a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Jargon File also agrees mainstream use was 1990's and suggests it came from tar-baby but as is typically the case with that document offers no evidence for the claim of any kind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So although we think of 'tarball' as an old old word - it's not.&lt;/p&gt;&#xA;" OwnerUserId="8813" LastActivityDate="2018-09-21T12:18:18.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7679" PostTypeId="2" ParentId="7676" CreationDate="2018-09-21T12:50:44.053" Score="14" Body="&lt;p&gt;This is just the well-known &quot;AEC Glitch&quot; of the C64's video output, exacerbated by the additional analog distortion of the RF output to a TV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone who used a C64 on any kind of display is familiar with the vertical stripes that appear. This is caused by interference leaking into the Luma (aka Luminance, or Intensity) portion of the video output. The interference can occur from several of the bus control or clock digital signals on the motherboard, but it is most directly associated with the changing state of AEC (Address Enable Control). This is why it is commonly called the &quot;AEC Glitch&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the vertical stripes are due to regular variations in Luma as each horizontal line of the display is drawn, the distortion is minimized for text display by using colors that contrast on their Luma dimension. This maintains the necessary contrast between adjacent pixels to make the text more readable despite the Luma interference fluctuations. When you choose two colors that contrast on the Hue and Saturation, but not Luma, then the effect of the Luma interference is exacerbated. Adjacent pixels of similar Luma will tend to bleed together more dramatically with the interference pattern. This goes a long way to explaining the choice of light blue on a darker blue background for the default text screen. Also why contrasting intensity (luma) colors for foreground and background work best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should also be noted that this interference problem is frequently corrected by modders installing the so-called &quot;Luma Fix&quot;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-01-04T14:13:35.863" LastActivityDate="2020-01-04T14:13:35.863" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7680" PostTypeId="2" ParentId="7652" CreationDate="2018-09-21T13:16:31.127" Score="0" Body="&lt;p&gt;Yes they did, but not HOME personal computers. In the mid 80's I've been paid by a small company to format a lot of 8&quot; floppies (200 units or so) on a Commodore CBM, probably a 8096. Although used for business, this computer was a true Personal Computer for one user, not a terminal connected to a distant computer. Some people had 8032s at home, although you'd probably not bring this massive computer + double drive unit at home.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[EDIT] Damn memory. I checked, and the Commodore drive unit was using 5&quot;1/4 floppies. &lt;/p&gt;&#xA;" OwnerUserId="10638" LastEditorUserId="10638" LastEditDate="2018-09-21T13:37:17.780" LastActivityDate="2018-09-21T13:37:17.780" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7681" PostTypeId="2" ParentId="7676" CreationDate="2018-09-21T14:38:11.937" Score="7" Body="&lt;p&gt;I don't know the C64's special glitch problems, but to me the effect you describe can be explained by going over the RF signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The analog TV signal that gets modulated on the RF encodes Luma and Chroma very differently (for compatibility reasons when color TV was introduced).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Luma gets a bandwidth of about 3 MHz, meaning that on the visible part of a scan line (50 µsec), you get maximum 150 highs and 150 lows, meaning 300 pixels. So the 320 pixels of HiRes graphics or 40-characters text can be more or less distinguished if they have a good chroma contrast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chroma, on the other hand, only gets about 1.5 MHz bandwidth, meaning 150 pixels. So, if foreground and background color differ mainly in hue or saturation, the TV signal can't transport 320 different pixels in a line, and you get a badly blurred picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get a crisp picture (as far as you can call anything on an old-style TV &quot;crisp&quot;), you should choose a color combination that differs only in luminance, e.g. dark blue and light blue. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even combinations that are typically regarded &quot;good contrast&quot; like white letters on red background will get blurred in the chrominance, e.g. the vertical bar of an uppercase &quot;T&quot; will become more light-red than white, only the horizontal bar will be white in the middle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if the RF circuit isn't perfect (and I've never seen high-quality ones in the consumer market), the chroma changes often were out of sync with the luma ones, maybe lagging behind by a few pixels.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2018-09-21T14:38:11.937" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7682" PostTypeId="2" ParentId="7652" CreationDate="2018-09-21T14:38:11.973" Score="4" Body="&lt;p&gt;The original Convergent Technologies IWS supported 8&quot; storage media, both hard disk and floppy. These were professional office systems based on the 8086, predating the IBM PC, and generally rebranded by OEMs such as Burroughs (B21), NCR (one of the WorkSaver series), Pr1me (one of the Producer series), and others.&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2018-09-21T14:38:11.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7683" PostTypeId="1" AcceptedAnswerId="7684" CreationDate="2018-09-21T15:02:32.873" Score="7" ViewCount="1496" Body="&lt;p&gt;From the Art of Intel x86 Assembly, Page 149,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 80386 added four control registers: CR0-CR3. These registers extend the &lt;code&gt;msw&lt;/code&gt; registers of the 80286 [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The book says earlier that,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 80286 microprocessor adds one major programmer-visible feature to the 8086 protected mode operation. This text will not cover the 80286 protected mode of operation for a variety of reasons. First, the protected mode of the 80286 was poorly designed. Second, it is of interest only to programmers who are writing their own operating system or low-level systems programs for such operating systems. Even if you are writing software for a protected mode operating system like UNIX or OS/2, you would not use the protected mode features of the 80286. Nonetheless, it’s worthwhile to point out the extra registers and status flags present on the 80286 just in case you come across them.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Wikipedia says this about it,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Real mode also served as a more basic mode in which protected mode could be set up, solving a sort of chicken-and-egg problem. To access the extended functionality of the 286, the operating system would set up some tables in memory that controlled memory access in protected mode, set the addresses of those tables into some special registers of the processor, and then &lt;strong&gt;set the processor into protected mode&lt;/strong&gt;. This enabled 24 bit addressing which allowed the processor to access 2&lt;sup&gt;24&lt;/sup&gt; bytes of memory, equivalent to 16 megabytes.[9]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I believe today CR0 puts the CPU in Protected Mode. How did the 80286 do it?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="15189" LastEditDate="2019-09-05T18:32:24.183" LastActivityDate="2019-09-05T18:32:24.183" Title="How do you put a 286 in Protected Mode?" Tags="&lt;80286&gt;&lt;x86&gt;&lt;protected-mode&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7684" PostTypeId="2" ParentId="7683" CreationDate="2018-09-21T15:04:58.907" Score="11" Body="&lt;p&gt;Actually this is a lot easier than I thought, after trying to link to another &lt;code&gt;MSW&lt;/code&gt; note, I found it in the &lt;a href=&quot;https://web.itu.edu.tr/kesgin/mul06/intel/intel_msw.html&quot; rel=&quot;noreferrer&quot;&gt;Intel Instruction Set: Machine Status Word (286+ only)&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machine status word seems to be a predecessor to &lt;code&gt;CR0&lt;/code&gt;, and protected mode was set in first bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Of note, you can't return from Protected Mode on the 286.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MSW - Machine Status Word (286+ only)&#xA;&#xA;&#xA;      |31|30-5|4|3|2|1|0|  Machine Status Word&#xA;        |   |  | | | | +---- Protection Enable (PE)&#xA;        |   |  | | | +----- Math Present (MP)&#xA;        |   |  | | +------ Emulation (EM)&#xA;        |   |  | +------- Task Switched (TS)&#xA;        |   |  +-------- Extension Type (ET)&#xA;        |   +---------- Reserved&#xA;        +------------- Paging (PG)&#xA;&#xA;&#xA;        Bit 0   PE      Protection Enable, switches processor between&#xA;                        real and protected mode (no return on 286)&#xA;        Bit 1   MP      Math Present, controls function of the WAIT&#xA;                        instruction&#xA;        Bit 2   EM      Emulation, indicates whether coprocessor functions&#xA;                        are to be emulated&#xA;        Bit 3   TS      Task Switched, set and interrogated by coprocessor&#xA;                        on task switches and when interpretting coprocessor&#xA;                        instructions&#xA;        Bit 4   ET      Extension Type, indicates type of coprocessor in&#xA;                        system (386)&#xA;        Bits 5-30       Reserved&#xA;        bit 31  PG      Paging, indicates whether the processor uses page&#xA;                        tables to translate linear addresses to physical&#xA;                        addresses (386+)&#xA;&#xA;        - see   SMSW  LMSW&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also seems to be some good follow-up material on &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikibooks.org/wiki/X86_Assembly/Protected_Mode&quot; rel=&quot;noreferrer&quot;&gt;X86 Assembly (Wikibooks)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://wiki.osdev.org/Protected_Mode&quot; rel=&quot;noreferrer&quot;&gt;OSDev Protected Mode&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="780" LastEditDate="2018-09-21T16:30:43.253" LastActivityDate="2018-09-21T16:30:43.253" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="7685" PostTypeId="1" AcceptedAnswerId="7687" CreationDate="2018-09-21T15:34:02.460" Score="14" ViewCount="5395" Body="&lt;p&gt;When using &lt;a href=&quot;https://ss64.com/nt/diskpart.html&quot; rel=&quot;noreferrer&quot;&gt;diskpart&lt;/a&gt;, I can list all the drives by typing &lt;code&gt;LIST DISK&lt;/code&gt; or to select a specific drive I can type &lt;code&gt;select disk 1&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a reason why MS-DOS didn't use more English words to do tasks, for example, to list all of the files in a directory with no additional information, I can do this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dir /b&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Why couldn't the developers have made it so that I can type &lt;code&gt;view insertdirectorynamehere -bare&lt;/code&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a little longer to type, but it's a little more clear what exactly the code is doing. Insert it into a batch file that can take command line parameters and you can save yourself some typing.&lt;/p&gt;&#xA;" OwnerDisplayName="user10643" LastEditorUserId="535" LastEditDate="2018-09-22T13:02:13.023" LastActivityDate="2020-09-04T20:43:52.623" Title="Is there a reason why MS-DOS didn't use more English words for commands?" Tags="&lt;history&gt;&lt;ms-dos&gt;" AnswerCount="7" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7686" PostTypeId="2" ParentId="7685" CreationDate="2018-09-21T15:50:39.487" Score="3" Body="&lt;p&gt;Most of MS-DOS's commands were inherited from CP/M and UNIX, both of which used cryptic commands to conserve space (resources were at a premium in those days - 16K of RAM and 10MB of disk space was considered &lt;em&gt;A LOT!&lt;/em&gt; - and expensive to acquire). Since MS-DOS was also operating under resource constraints, it made sense at the time to use the same sort of compact commands, plus, it increased familiarity and made the transition from those older systems to MS-DOS easier. To this day, CMD.EXE on Windows maintains that compatibility/familiarity, even though resources aren't at that kind of premium. PowerShell, however, breaks that paradigm, and provides longer, more descriptive commands.&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2018-09-21T15:50:39.487" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7687" PostTypeId="2" ParentId="7685" CreationDate="2018-09-21T15:51:08.483" Score="38" Body="&lt;p&gt;MS DOS inherited many of its commands from CP/M. CP/M was designed with influences from classic minicomputer operating systems, especially those produced by DEC. Many of these systems dated back to the mid to late 1960s and were designed to run in very little space, e.g. DOS-11 ran on a PDP 11 with 8&amp;nbsp;KB of RAM. They were also mostly designed primarily for programmers, not end users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This meant that the influences drawn had terse command structures, often using as few characters as possible, and users were expected to understand and appreciate the precision of using technical terms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see the influence of this on &lt;code&gt;DIR&lt;/code&gt;, as in your example. It shows the directory of a disk (CP/M and early DOS versions only supported a single directory per disk - nested subdirectories were a feature added in DOS 2.0). &quot;&lt;code&gt;VIEW&lt;/code&gt;&quot; could have been ambiguous - it may have shown the contents of a file instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;TYPE&lt;/code&gt; is another good example, but for a different reason - it printed the contents of a file (early versions of CP/M were intended for use on a teletype, not a visual display). It's only because of changing technology in the interim that the choice of command became obscure.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="278" LastEditDate="2018-09-22T13:03:38.513" LastActivityDate="2018-09-22T13:03:38.513" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7688" PostTypeId="2" ParentId="7685" CreationDate="2018-09-21T16:40:34.323" Score="19" Body="&lt;p&gt;Because typing is awful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having to type &quot;select folder&quot; or &quot;change directory&quot; or anything else like that gets very tedious, very quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The commands are meant to be used to express the users wishes to the computer, they're not designed to be necessarily used to communicate between human beings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In truth &quot;change directory&quot; is no more intuitive than &quot;cd&quot; or &quot;wd&quot; or &quot;F1&quot; or double clicking on that folder thing in the window, especially when the user has no concept of what a &quot;directory&quot; is in the first place. It all needs to be trained up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, there's the usage of the programs. Consider the CP/M &lt;code&gt;pip&lt;/code&gt; command. &quot;Peripheral Interface Program&quot; (or something close). Regardless of what the command is called, this is a particularly arcane multitool to try and figure out and use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers are not the commands, they're concepts. The concepts are (demonstrably), even after all this time, quite difficult for folks to grasp. No matter how much lipstick you paint on these things, they're still computers underneath.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, we have the momentum of 40+ years of history, so there's motivation today to keep things &quot;similar&quot;. So as not to have to relearn vocabularies. Take a look at the UCSD P-System. It used &quot;English&quot; for everything (almost, it's menu driven), but to someone used to how things work today? It's not an intuitive system at all. It's assumptions and preconceptions don't match what we're used to today. However, to someone who never used a computer, I'm sure it may have been easier to adopt. But in the end, an advanced user isn't looking at commands at all. &quot;FC&quot; becomes F)ile -&gt; C)opy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you've ever watched someone learn a computer system, they, in general, do not know &quot;why&quot; they do something, only &quot;What to do&quot;. This was starkly demonstrated to me when I saw someone learning a hotel management system. The instructor described the interface, the menus, the organization, all this taxonomy of structure built in the system. Meanwhile, at the end, the student basically said &quot;So, to do XX I pre F6, right?&quot; That's all they wanted to know. All of the rest, none of that took.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, we want to express ourselves succinctly to the computer. Repeatedly typing long treatises to the machine is tedious, slow, and error prone. For the same reason we don't like listening to voice response menus at customer support, once we know the system, we don't like typing long strings of commands if we can possibly avoid it. And since any system needs to be trained upon anyway, in the end many of the commands don't matter, as long as they're remotely mnemonic. (But even that's not true, how is typing 'ant' to compile a program intuitive or mnemonic?)&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-09-21T16:40:34.323" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7689" PostTypeId="2" ParentId="7673" CreationDate="2018-09-21T18:30:31.230" Score="2" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Alto&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xerox Alto&lt;/a&gt; workstations and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Lisp_machine#Xerox&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xerox D-Machines&lt;/a&gt; shipped with monitors that had a long-persistence white phosphor. &lt;/p&gt;&#xA;" OwnerDisplayName="user10478" LastActivityDate="2018-09-21T18:30:31.230" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7690" PostTypeId="2" ParentId="7685" CreationDate="2018-09-21T18:32:45.353" Score="15" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Is there any reason why MS-DOS didn't use more English words to do tasks,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The most obvious one is that MS-DOS was in the beginning a rather plain CP/M clone, which itself was created with DEC systems in mind. Other, later (2.0) additions were taken from Unix. From a developer point of view it was more important to get the system running than to think about (maybe) more appealing command names.&lt;/p&gt;&#xA;&lt;p&gt;This as well worked with early users, as they were coming with a great majority from CP/M (and some from Unix) and didn't have to relearn everything, only the newer/different features. That's way less work than learning a whole new system.&lt;/p&gt;&#xA;&lt;p&gt;In the long run this is also quite important for international sales. While commands like &lt;code&gt;DIR&lt;/code&gt;, &lt;code&gt;CD&lt;/code&gt; or &lt;code&gt;DEL&lt;/code&gt; are based on English words, in itself they are just a few letters to memorize. No English required. In contrast to a command like 'SHOWALLFILESONDISK' is a nonsensical bloat - and equally hard to read/learn for anyone speaking English as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why couldn't the developers have made it so that I can type view insertdirectorynamehere -bare? It's a little longer to type, but it's a little clearer what exactly the code is doing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Wouldn't that be helpful just in the early learning stage? If at all?&lt;/p&gt;&#xA;&lt;p&gt;After all, the command line is to be used in direct dialog. Here, short easy memorable commands are king. Remember how often you screwed up typing even these short commands? Every additional letter 26-folds the chances of getting an error instead of a result.&lt;/p&gt;&#xA;&lt;p&gt;A good CLI is always a compromise between shortness and the support of memorizing them – and regularity to cross-reference (See story below)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Insert it into a batch file that can take command line parameters and you can save yourself some typing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which then again would get of course a short name, to make it applicable, right? Except it would be a different short name on different machines and resulting in a real Babylon effect of no-one being able to talk to a different computer than his own - as by then, the long names used during learning phase have been vanished from memory, and guessing about name and spelling starts over.&lt;/p&gt;&#xA;&lt;p&gt;Conclusion: &lt;strong&gt;Such a CLI wouldn't be forward looking.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;A little mainframe anecdote to add:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the late 1970s Siemens tried to push their mainframes (/370ish) into the mini range and targeting office applications. They invested almost more money into a creating good educational/user manuals then in downsizing the machines (*1). The basic idea was that DEC, DR or others successfully  made their users use some cryptic command line, so why not use the even more complex … err … powerful &lt;a href=&quot;https://en.wikipedia.org/wiki/BS2000&quot; rel=&quot;nofollow noreferrer&quot;&gt;BS2000&lt;/a&gt; (*2) command line :) The project flopped partly due to the hardware, but equally due to the fact that the targeted users weren't doing personal computing. They used company applications and never touched a command line.&lt;/p&gt;&#xA;&lt;p&gt;Forcing the micro/mini based concept of a command line to use separated, rather minimal applications instead of integrated software, did not only &lt;em&gt;not&lt;/em&gt; bring the promised cost cutting, but also produced unsatisfied users. As a last effort some really nifty menu system was created. While it eased usage for first time users, it became a lump foot for more experienced ones. Several revisions of the system happened in short time until it got buried with the whole project.&lt;/p&gt;&#xA;&lt;p&gt;So far the usual. Except (*3), the ones responsible stayed with the company, close/within OS development.&lt;/p&gt;&#xA;&lt;p&gt;Not much later complaints about an ever growing complexity of the command line (there were function with dozens of arguments) together with increasing costs to implement new commands and/or parameters needed for new functions resulted in a project to redo the command system/interpreter. A really nifty system to structure the command interpreter as well as command and parameter modules was developed. It  worked quite well and proved again, that a complete redo of something, that has been grown over years, is a great idea. Productivity of the OS development related to command execution did more than double with the new system.&lt;/p&gt;&#xA;&lt;p&gt;Except, management (guess who *4) also came up with the idea of a way more user friendly command language. Instead of stupid pseudo language commands (and those even abbreviated), a much more clearly readable, writeable and memorizable command language should be used. And of course with way less parameters to make it easy. As handy it is, there was also a project about that at a German university on how to create such a language in a systematic way, using tools to define and handle that. So that was also brought in.&lt;/p&gt;&#xA;&lt;p&gt;As a result, even simple things like getting the attributes of a file turned into a typing Session:&lt;/p&gt;&#xA;&lt;p&gt;Old:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/fs &amp;lt;filename&amp;gt;,all&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;New:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/show-file-attribues file-name=&amp;lt;filename&amp;gt; (*5)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;There were many good reasons to do this, not the least the interpreter structure. Now a command and all its parameters were defined in an unambiguous way (using a DSL) that could not only be used to check for valid commands, but also take these checks out of each function into a centralized command interpreter doing all needed syntax checks before the function gets invoked, thus relieving the function program of many, many statements. The improvement on the OS development side was unprecedented. And they couldn't understand why reaction on the user side was considerable less enthusiastic. Not at all.&lt;/p&gt;&#xA;&lt;p&gt;To be fair, they were aware that this is much to type, so the system also included a method to shorten commands to the least amount of letters needed to identify it correctly. Also, at least parameters that had to be always included (like the file name in above example) could be given without their identifier. In above case this would shorten that to:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/s-f-a &amp;lt;filename&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Great, except, this is an especially simple example, and even here it doesn't work as simply, as there is also a &lt;code&gt;set-file-attribute&lt;/code&gt; command, so abbreviation must be rather &lt;code&gt;sh-f-a&lt;/code&gt; And here lies the real issue for humans. To decide which abbreviation is possible and which not, one needs to know &lt;em&gt;all&lt;/em&gt; existing commands. There was no structure (as with MS-DOS or other hand made CLI). A human could deduct it, but it had to be learned. And relearned when new commands, conflicting with his memorized abbreviations came up.&lt;/p&gt;&#xA;&lt;p&gt;This proved even a true bug breeder for batch-jobs. While most 'official' jobs were done with the long form, the usual quickly typed scripts did more often than not use the abbreviation its programmer preferred (*6). We have all seen these scripts not used just once, but surviving for years in production environments. Haven't we? In case of the command syntax system in use this would mean each of them could fail with any new OS release without any prior warning. Not only hard to detect and to correct, still a dangling Damocles sword over all jobs.&lt;/p&gt;&#xA;&lt;p&gt;To make it worse, the now way longer commands made abbreviations almost mandatory. The command line is limited in length to 72 characters per line and allows only a certain amount of extension lines. With all these lengthy parameter names, this maximum was easy to reach. So not just quick and dirty procedures did sit below the sword.&lt;/p&gt;&#xA;&lt;p&gt;Creating a file (entry) with certain attributes about devices to use, access rights and the like was originally possible within a single &lt;code&gt;FILE&lt;/code&gt; command, making it not just compact (and hard to read), but also atomic on the file system.  Except for rather simple cases the new syntax &lt;em&gt;required&lt;/em&gt; several different commands to first create it, then assign attributes and the like, but also several of them, as complex cases couldn't fit a single command line. All while hoping that all other processes watching the file system would be able to cope with these intermediate states that could not have happened before (*7).&lt;/p&gt;&#xA;&lt;p&gt;Heck, it wasn't all that bad – or at least it wouldn't seem so at first sight:&lt;/p&gt;&#xA;&lt;p&gt;The systematic command definition allowed the addition of a help screen system not just showing general messages, but giving way detailed information what is wrong with the command typed - all without any involvement of the function. These screens even allowed menu driven point and click alike completion with nicely formatted fields for all usable parameters and so on. Except, to do so the terminal was switched from line into form mode. Something a CLI user hates. Not just because of a different handling metaphor (thing about a CLI window just popping up a modal box to be handled with the mouse) destroying the flow, but also because the screen was cleared afterwards, so no easy to use of any former line to copy and reuse. Some users really developed a neurosis about not getting the help screen (*8).&lt;/p&gt;&#xA;&lt;p&gt;Oh, and to close the circle, it also got a staircase wit: People introduced today (well, after 1990) complain a lot about the total unimaginative bureaucratic and unhandy nature of this CLI - and blame it on being typically mainframe-like complex.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Long story short: OS-development has been there and it turned out to be  less than desirable.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The later resulted in what was the most unreliable and least sold of all of their mainframes, the infamous CoCo - here meaning &lt;em&gt;Compact Computer&lt;/em&gt;, despite the fact still being the size of several table height refrigerators.&lt;/p&gt;&#xA;&lt;p&gt;*2 - BS2000 is still around, now owned by Fujitsu. In my opinion eventually the best OS design ever. Ok, given, I should limit this to 'best internal structure and design ever'.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Which again is usual in large companies.&lt;/p&gt;&#xA;&lt;p&gt;*4 - I don't have proof for that claim beside being told so back then. So while it sounds truth-ish, it might not be true&lt;/p&gt;&#xA;&lt;p&gt;*5 - Looks much like the OP asked for - even more readable with hyphens separating real words, doesn't it?&lt;/p&gt;&#xA;&lt;p&gt;*6 - It's much like the problem I mentioned in the answer about private naming conventions for batch files meant to shorten the typing.&lt;/p&gt;&#xA;&lt;p&gt;*7 - I had one case like that in a real customer application, where one (redone) job was creating a file in a transfer directory. The complete independent (and older) transfer process did not include handling for a file with attributes set only partly the way it was expecting them. As this software was third party and a (mostly) closed system it took me quite a while to figure out a sequence to make both of us happy.&lt;/p&gt;&#xA;&lt;p&gt;*8 - Later on it was made optional and regular error messages were displayed - but then again, instead of a simple line like &lt;code&gt;File name missing&lt;/code&gt; a structured analysis was presented over up to a dozend lines - again killing most of your screen.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-09-04T20:43:52.623" LastActivityDate="2020-09-04T20:43:52.623" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7693" PostTypeId="1" AcceptedAnswerId="7695" CreationDate="2018-09-21T18:57:53.617" Score="4" ViewCount="749" Body="&lt;p&gt;The TMS9918 video display processor was designed in the 70s to have its own memory connected directly to it, and provides an interface that allows the CPU to read or write the memory during cycles in which it isn't using it itself.  Unfortunately, in some modes the VDP uses the memory in 15 memory cycles out of every 16, which can limit throughput somewhat -- especially if connected to faster than average processors: a 3.5MHz Z80 (e.g. as used in the MSX) might need a small delay between each access in a tight loop [1], but the VDP was still used into the mid-80s, by which time 8MHz Z80s were commonly available, and such a delay would be very limiting for such a processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VDP is designed to use typical low-cost DRAM available in the mid-70s, and therefore has timing constraints that could be easily satisfied by that kind of chip: specifically, it needs RAM with an access time of at most 160ns (if I'm reading the timing diagrams on the datasheet correctly), and a cycle time of 372ns or less. By the end of the time period when they were commonly in use, fast RAM was available at much lower cost -- by mid 1985, for example, &lt;a href=&quot;https://archive.org/stream/byte-magazine-1985-06/1985_06_BYTE_10-06_Programming_Techniques#page/n529&quot; rel=&quot;nofollow noreferrer&quot;&gt;150ns 8KiB SRAMs were available for around $10 each&lt;/a&gt;, meaning that for $20 (plus a handful of &lt;a href=&quot;https://hackaday.io/project/160851-tms9918-vdp-with-sram-video-memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;extra logic chips&lt;/a&gt;) you could provide memory for the VDP that was only used for half the time, allowing you to also connect it to your CPU bus for nearly immediate access (your CPU may need to have a wait state added when it tries to access it sometimes).  As the 9918 itself cost $40 at the time, this wouldn't have been a significant increase in the cost of a system using one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there any systems that did this, or if not is there a reason I'm not seeing why they either couldn't do it or it would have been too difficult to do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1]: the common recommendation for a 3.5MHz processor (as in the MSX, among others) is to attempt a video access no more than once every 29 cycles, while the &lt;code&gt;LDIR&lt;/code&gt; / &lt;code&gt;OTIR&lt;/code&gt; instructions provided by the Z80 both use 21 cycles per byte transferred, meaning that a direct dump from system memory to video memory would be too fast.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2021-01-01T21:45:39.363" Title="TMS9918 with shared memory" Tags="&lt;hardware&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7694" PostTypeId="2" ParentId="7673" CreationDate="2018-09-21T19:03:57.487" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Beside green, amber and apparently gray, were other colors ever been in use by some obscure hardware ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Pick any colour you want. The colour is just defined by the emission scheme of the fluorescent material used for the CRT. In fact, doing white is more complex than just doing a single colour. Screens here available with anything from light red to pale blue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing a single colour is much simpler than doing white (or multi colour), as it means only one type of emission coating is needed (like phosphor for green) thus making production less expensive than for white. Also consistent molecule size (as in only one material) enabled a sharper focusing thus a better display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The spectrum between light (reddish) yellow (often called amber) and green (or more technical 600-500 nm) was a preferred one mainly due the way the human eye works:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The human green sensors a best at 530nm, while the red ones are best at detecting 560nm. Blue lies way of at450nm). In addition to this close and overlapping sensitivity the B&amp;amp;W receptors are fine tuned to 500nm for the highest differentiation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, lower frequency usually means lower energy input, thus the electrons need less acceleration which again results in less X-ray emission. Good for the user being bombarded with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, using the frequencies the eye is most sensible means the over all brightness (power used) can be turned down, further reducing manufacturing cost (and X-ray emission).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, while a monochrome screen is not only the over all lowest cost solution, it also brings several advantages, with yellow/greenish colours being the optimum and a win win situation. That's why other colours haven't been able to gain any hold.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="10260" LastEditDate="2018-09-22T08:22:57.403" LastActivityDate="2018-09-22T08:22:57.403" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7695" PostTypeId="2" ParentId="7693" CreationDate="2018-09-21T19:34:40.630" Score="7" Body="&lt;p&gt;The closest example I can think of relates to Sega's TMS9918 variant that used two pseudo-SRAMs instead of DRAM. It was intended as a low-cost chip for consoles but was later used in an arcade platform (System E) where high performance was needed. To get around the slow access to video memory they added all the extra logic necessary to share the PSRAMs with the CPU. However those parts accounted for about 1/4th of the PCB space used. This is from the late 80s so it was all DIP packages with no gate arrays or PLDs/CPLDs to integrate the design more tightly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case the shared memory required a lot more components which increased the PCB size and routing complexity. I think the home computers/consoles that used the TMS9918 probably could have done the same thing but it would have been hard to justify the cost, whereas for an arcade game it's understood that performance is critical to the success of the product so it's an easier argument for the design team to make.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also consider home computer/console games were more primitive back then and the performance may have seen as good enough without adding a shared memory system. Of course a MSX with shared memory on the TMS9918 would have been really great. :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an aside there seem to have been many successful efforts to use SRAMs instead of DRAM with the TMS9918 and Yamaha V99x8 parts with minimal extra components by hobbyists nowadays, so back then they could have moved to SRAMs easily. But that still requires more PCB space and more components. So total cost and saving money wherever you can probably drove a lot of the decision making to go with the stock TMS9918 setup instead of something better.&lt;/p&gt;&#xA;" OwnerUserId="8734" LastActivityDate="2018-09-21T19:34:40.630" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7696" PostTypeId="2" ParentId="7652" CreationDate="2018-09-21T20:25:54.987" Score="3" Body="&lt;p&gt;Well, this answer is not &lt;em&gt;exactly&lt;/em&gt; on point, however, I did have an IBM PC which I got and external dual-drive with it....a &lt;strong&gt;&lt;em&gt;Bernoulli Box&lt;/em&gt;&lt;/strong&gt;.  An 8&quot; 10 MB capacity HD replacement (&lt;a href=&quot;https://en.wikipedia.org/wiki/Bernoulli_Box&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Bernoulli_Box&lt;/a&gt;).  Yes, it was a &quot;floppy&quot; disk in there, not a hard platter.  Wow, brings back the memories!&lt;/p&gt;&#xA;" OwnerUserId="7667" LastActivityDate="2018-09-21T20:25:54.987" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7697" PostTypeId="2" ParentId="7693" CreationDate="2018-09-21T20:46:39.687" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The TMS9918 video display processor was designed in the 70s&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To start with, the 9918 was &lt;em&gt;not&lt;/em&gt; being designed as a general purpose chip, especially not with Z80 systems in mind. It was a special design, made to fit for the TI 99/4. Before the 9918, there was the &lt;a href=&quot;http://www.bitsavers.org/components/ti/TMS9900/TMS9927_TMS9937_Single-Chip_Video_Timers_Controllers_Data_Manual_Jun82.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;9917 VTC&lt;/a&gt; (Video Timers/Controlers). A device comperable to the 6845 VDC or similar, capable of reading character codes just in time from a screen RAM, filter them thru a character ROM and build a screen frame.&lt;/p&gt;&#xA;&lt;p&gt;To change content of the screen RAM from a CPU, that RAM needed to have a second port. And if that RAM should be a dynamic one, a third access path is needed for refresh. All much like with other contemporary VDC.&lt;/p&gt;&#xA;&lt;p&gt;For the TI99/4 its designer didn't want to add a complicated mux logic for dual port access as well as they shunned the idea of building/adding a DRAM controller. Also some graphics abilities would be nice - after all, a homecomputer would look better with then without.&lt;/p&gt;&#xA;&lt;p&gt;So the 9918 was born, integrating all of these components. Graphics, DRAM refresh and a second access port to make the RAM reachable by the CPU - plus some other components to reduce the 99/4s chip count. At it's core it's a special chip &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7572/6659&quot;&gt;to fit the 99/4 design&lt;/a&gt;, not targeted at other designs. Having it also generating the CRU clock for the GROMs is not the least hint (*1,2).&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;The 9918 isn't your of the shelf general purpose beefed up VDC, but a special to type design for the 99/4A.&lt;/strong&gt; Much like the VIC is made to fit the C64 - except that computer was a less advanced design. Imagine if Commodore hat used the VIC (or TED) not only in their machines, but also offered for sale like TI did.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;in 15 memory cycles out of every 16, which can limit throughput somewhat&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Keep in mind, these are VDP memory cycles, not CPU which in average were &lt;em&gt;way&lt;/em&gt; slower.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;especially if connected to faster than average processors: a 3.5MHz Z80 (e.g. as used in the MSX) might need a small delay between each access in a tight loop &lt;a href=&quot;http://www.bitsavers.org/components/ti/TMS9900/TMS9927_TMS9937_Single-Chip_Video_Timers_Controllers_Data_Manual_Jun82.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;, but the VDP was still used into the mid-80s, by which time 8MHz Z80s were commonly available, and such a delay would be very limiting for such a processor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really, this is a somewhat screwed assumption, as the 9918 memory is its own address space, not main memory. Of the 5 memory cycles of an ODIR (String output) of a Z80, which would be the appropriate use to shovel large amounts of data from or to VDP memory only one. that means only i one of 5 cases it has to wait. While that LDIR example may during some time break down effective speed to act more like a 3.5 MHz one, it even doesn't do so always (only in graphics mode and during line display).&lt;/p&gt;&#xA;&lt;p&gt;In a real setup a CPU doen't usually just shovel big amounts of data in a continuous stream. For example to move some (non sprite) block, it will read one (or two) bytes, do some bitblitting then write them back and continue the next line until the block is done. This includes many non video memory operations, where the VDP RAM access time is not involved. Even more so, for everything else like sprite moves or such only single access cycles are needed - inbetween many many other. So in a real word application an 8 MHz Z80 is virtually not slowed down at all.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;There is no essential performance gain in having a full dual port memory design, but a lot of additional cost.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The VDP is designed to use typical low-cost DRAM available in the mid-70s,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;At that time not low cost, but the only available ones.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[... Argument about using a different RAM architecture and hidden access ...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure, one could, but that would have made the 9918 a different chip with a different architecture. Plus needing to redo all software using the existing architecture - which is eventually way more expensive than 'just' a few chips.&lt;/p&gt;&#xA;&lt;p&gt;It also would have opened a whole snake bin about addressing. A 9918 can be used by any CPU that could handle a single port plus a single Mode (address). No matter if it's a microcontroller or a 16 Bit CPU. And for classic 8 bit machines with their 64 Ki address space it offered the great advantage of having a separate video memory not cluttering the main address space - in case of MSX allowing the machines to have a full 64KiB RAM and all of it available to OS and application. Video was essential just an I/O device like a terminal ... except faster.&lt;/p&gt;&#xA;&lt;p&gt;In case of MSX, that concept even enabled to soon reach 64 KiB of video memory and finally 192 with much improved capabilities and not taking away a single bit of main memory. Doing so in a shared memory with an 16 bit address space would have required rather complex and unsatisfying bank switching, adding slow software layers to make it available to anything but brute force assembly.&lt;/p&gt;&#xA;&lt;p&gt;Bottom Line: &lt;strong&gt;Switching the interface and access strategy would have increased cost, reduced usability and brought no real world performance gain.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Were there any systems that did this, or if not is there a reason I'm not seeing why they either couldn't do it or it would have been too difficult to do?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, the true question is why &lt;em&gt;should&lt;/em&gt; they? The dual port logic was already provided by the 9918, so access was possible, there is no real life penalty by using it, but a huge gain in upward compatibility and extension, not to mention preserving the full 64 KiB address for the main CPU.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;On a wider perspective than just the memory access issue, the TMS9918 can be seen as the genuine ancestor to all of today's video systems. While others like Apple, Atari, Commodore and Amiga extended a main memory concept (who needs 64 KiB anyway, lets use some for graphics), did the 9918 leapfrog all of this and offered a complete separated graphics subsystem. Much like IBM did with VGA (*2) and every of today's graphics cards provide a clear API and no display memory wrangling.&lt;/p&gt;&#xA;&lt;p&gt;Using a separate and well defined hardware interface not only enabled easy and independent upgrade for larger memory size, but also adding high level screen manipulation functions like window related coordinates and regional memory handling but also line drawing and alike. All without changing much in the interface or main CPU memory.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The 9918 was also tasked with generating the CPU clock (hence the &lt;code&gt;CPUCLK&lt;/code&gt; pin) for the planned single phase 9985 CPU, which should run at 3.58 MHz. Using the 9900 with it's 4 phase clock required a 9904, so the 'CPU'-clock was only used for the 9919 sound generator.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Another great hint is the missing of a wait signal (or &lt;code&gt;READY&lt;/code&gt; in case of the 9900 interface). With the CPU speed intended for the 99/4 it would have been impossible to overrun the access time anyway. If it would have been intended as a general purpose chip, outputing a wait signal would have been way more useful as CPU or GROM clock. Adapting other CPUs would have been made transparent due hardware toggling (wait cycles) instead of cycle counting.&lt;/p&gt;&#xA;&lt;p&gt;*3 Well, they did add a banked shared memory access, but here again the CPU was slowed down when video access was done - exactly the same way as with any other dual port design since 9918 :)&lt;/p&gt;&#xA;&lt;p&gt;Primary intention of the designers was for user s access graphics only thru their high level interface. Offering that banked access mode was shooting themself in the knee.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-01-01T21:45:39.363" LastActivityDate="2021-01-01T21:45:39.363" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7699" PostTypeId="2" ParentId="7685" CreationDate="2018-09-21T23:35:15.513" Score="4" Body="&lt;p&gt;The reason for short commands has been re-stated several ways here. But there's one critical detail missing from all of the answers: &lt;code&gt;diskpart&lt;/code&gt; was introduced after Windows NT was developed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows NT is based on many of the core concepts of Digital's &lt;a href=&quot;https://en.wikipedia.org/wiki/OpenVMS&quot; rel=&quot;nofollow noreferrer&quot;&gt;VMS&lt;/a&gt;. Dave Cutler - the chief system architect of VMS - quit Digital (DEC) in 1988, and Microsoft &lt;a href=&quot;https://www.itprotoday.com/compute-engines/windows-nt-and-vms-rest-story&quot; rel=&quot;nofollow noreferrer&quot;&gt;hired&lt;/a&gt; him and part of his team to develop a new enterprise-grade OS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In VMS, most complex commands could either be executed as interactive commands with their own shell, or by specifying the command with enough options from the terminal. MS-DOS had previously borrowed DEC's &lt;code&gt;/&lt;/code&gt; as an option specifier, so the convention was already familiar to PC users when it was used in Windows NT's shell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of VMS's commands could be shortened down to the shortest unique identifier (with occasionally puerile side-effects, especially for larval VMS admins like I was). While you could type out the commands in full (helpful in scripts you were going to reuse) it was usual to shorten commands down to the bone.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-09-21T23:35:15.513" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7701" PostTypeId="2" ParentId="7685" CreationDate="2018-09-22T07:37:24.060" Score="8" Body="&lt;p&gt;It seems that an important fact is missing in the answers here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Almost all commands in MS-DOS (and most other operating systems) are in fact filenames.&#xA;The length of filenames where restricted to 8 characters on MS-DOS (and CP/M, from where many commands where taken).&#xA;Up to MS-DOS 6.22 they still used only 8 character commands &lt;a href=&quot;https://www.lifewire.com/dos-commands-4070427&quot; rel=&quot;noreferrer&quot;&gt;List of all MS-DOS commands&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The filename is also an explanation why the commands are single words: space was for a long time a no-no in filenames, even when filenames longer that 8 chracter started to be used most systems had problem with space in a filename.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Historical note, some systems had even shorter filenames that restricted the length of commands even more. (RT-11 on PDP-11 is one example: 6+3 characters per filename)&lt;/p&gt;&#xA;" OwnerUserId="10565" LastActivityDate="2018-09-22T07:37:24.060" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7702" PostTypeId="2" ParentId="7652" CreationDate="2018-09-22T20:06:33.683" Score="3" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/qhMIy.jpg&quot; alt=&quot;my dad&amp;#39;s imsai 8080&quot;&gt;&#xA;Yes,  but not too common after the &quot;wire wrap it yourself&quot; era. By the time computers were sold in stores it went to 5.25.&lt;/p&gt;&#xA;" OwnerUserId="10665" LastActivityDate="2018-09-22T20:06:33.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7703" PostTypeId="2" ParentId="7652" CreationDate="2018-09-22T20:06:43.317" Score="3" Body="&lt;p&gt;My Rockwell AIM 65 supported 8&quot; Floppies, but I had to buy the disk drive from another company. I can't remember the name of the disk drive company. The expanded RAM was from a 3rd company, and the card reader was from a 4th company. The card reader was from Chatsworth Data Systems.&lt;/p&gt;&#xA;" OwnerUserId="10664" LastActivityDate="2018-09-22T20:06:43.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7704" PostTypeId="2" ParentId="79" CreationDate="2018-09-23T04:05:34.817" Score="0" Body="&lt;p&gt;I just started an eMac that has not run for 2 years.  Even at that time the battery was kaput; it couldn't keep time and you had to set the time.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It started just fine for me, several times over and over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However when I plugged in this eMac, the power strip happened to be in a location that is very dark.  I could see a minor arc flash as the plug made contact.  Something is powered up 24x7, and it has a capacitor! &lt;/p&gt;&#xA;" OwnerUserId="4330" LastActivityDate="2018-09-23T04:05:34.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7706" PostTypeId="1" AcceptedAnswerId="7708" CreationDate="2018-09-23T10:37:10.620" Score="11" ViewCount="918" Body="&lt;p&gt;Screen Mode 2 on the BBC micro is 160 x 256 with &quot;16&quot;* colours. This uses up 20Kb of memory. Horizontal-rectangular pixels ( 2 x squares each). 4 bits per pixel (0-15 values for 16 colours)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Screen Mode 1 on the BBC micro is 320 x 256 with 4 colours, again 20Kb.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A half height or half width Mode 1 can be programmed (I've done it) by VDU codes/pokes (&lt;code&gt;?&lt;/code&gt;)/&lt;code&gt;*fx&lt;/code&gt;s (if I vaguely recall). 2 bits per pixel (0-3 values for 4 colours)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the memory saving of that, (down to 10Kb)then it should be possible to set mode 1 to use more colours, i.e. 16 colours (4bpp instead of 2). This will double the memory required back to 20Kb but will still fit in the memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea how to program to get 16 colours. E.g. VDU command sequences and/or poking memory with the &lt;code&gt;?&lt;/code&gt; command, or &lt;code&gt;*fx&lt;/code&gt; command(s)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or was it a limitation of bandwidth with the 6845 chip that couldn't handle both 320 horizonal pixels and 4bpp?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point of this would be to achieve the higher resolution graphics, afforded by the square pixels in mode 1 but with more colours. So that it looked similar to ZX Spectrum games but with the advantage of full programmable individual pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*16 colours is actually only 8. With an additional 8 alternating between 2 colours. 8 colours are black white red yellow green cyan blue magenta&lt;/p&gt;&#xA;" OwnerUserId="8111" LastEditorUserId="8111" LastEditDate="2020-01-12T11:18:31.650" LastActivityDate="2020-01-12T11:18:31.650" Title="Can the BBC be programmed to a half-size mode 1 screen mode with 16 colours instead of 4?" Tags="&lt;hardware&gt;&lt;video&gt;&lt;bbc-micro&gt;&lt;color-display&gt;&lt;screen&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7707" PostTypeId="2" ParentId="7652" CreationDate="2018-09-23T13:23:40.427" Score="2" Body="&lt;p&gt;&lt;em&gt;Electrically&lt;/em&gt; (apart from the separate power plug, with some older 8&quot; drives even using a belt drive motor at mains power), an 8&quot; drive corresponded to 5¼ 1.2MB HD drive so a lot of home computers with external drive connectors would be formally 8&quot; compatible.  1.44MB 3½&quot; HD drives were different in that they had the same data rate but would be running at 300rpm (like normal SD or DD 5¼ drives) as opposed to the 360rpm of an 8&quot; drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turns out that even for some DD drives (like 5¼&quot; TEAC drives) you were better off switching a disk controller like the WD1797 into 8&quot; mode for stepping, resulting in a maximum stepping speed of 3ms per track rather than the 5¼&quot; maximum of 6ms per track since (even disregarding the significantly improved access times) stepping at the maximum rated speed of the drive was much quieter that the stop-and-go noise resulting from stepping it at half its rated maximum speed.&lt;/p&gt;&#xA;" OwnerDisplayName="user10668" LastActivityDate="2018-09-23T13:23:40.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7708" PostTypeId="2" ParentId="7706" CreationDate="2018-09-23T13:48:02.880" Score="11" Body="&lt;p&gt;&lt;em&gt;With all these 'or' in between and jumping between various points, requirements and conclusions, it's a bit unclear what your're looking for.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is about most colour with least memory, then the (unofficial) modes &lt;a href=&quot;http://beebwiki.mdfs.net/MODE_8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mode 8&lt;/a&gt; and &lt;a href=&quot;http://beebwiki.mdfs.net/MODE_13&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mode 13&lt;/a&gt; are your thing. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or was it a limitation of bandwidth with the 6845 chip that couldn't handle both 320 horizontal pixels and 4bpp?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Short answer no.&lt;/strong&gt; 320 pixel with 4 bits each equals to 1280 bit or 160 bytes per line. Double the maximum the Beeb design can do.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Long Answer:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes and No. The 6845 doesn't handle any content or colours. It was originally designed to support a character based screen. It's just a bunch of counters to create sync signals and addresses during a frame. The 6845 only generates the frame. All content generation is external. The addresses were meant to access a linear character screen memory which then gets translated via a character ROM into rows of a character to be shifted into the video signal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the BBC the content generation is handled by a custom gate array (usually called Video-ULA) that takes the byte addressed by the 6845 and interprets it according to what's set in its control register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the 6845 can be put to use with a large variety of screen formats, it always comes down to the amount of bytes read in a line (*1). In the BBC it can be used to read 10, 20, 40 or 80 bytes per line. That's a maximum of 640 (80x8) bits per line. Resolution and colour depth are factors to this number, so quite simple:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bits-per-Line divided by Colour-Depth equals Pixels-per-Line&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Bits      Colour  Pixels&#xA;per Line  Depth   per Line&#xA;&#xA;640       1       640&#xA;640       2       320&#xA;640       4       160&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;These are the absolute maximum resolutions per line at a given color depth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And while there is no secret trick possible to read more lines, we always can read less per line and fewer lines. &lt;strong&gt;And that's what accounts for the memory 'saving' mentioned&lt;/strong&gt;. As mentioned before, the system can be set to read less bytes per line, like only 40, which of course reduced the amount of bits read per line and thus memory needed - but also resolution as well. 40 bytes read mean 320 bits, which can be converted into 80 pixels in 16 colour mode and so on. The formula stays the same. Down to 10 byte per line mode giving twenty 16 colour pixels per line. Handy for some Pong or Breakout, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar, lines &lt;em&gt;could&lt;/em&gt; be skipped saving again memory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conclusion: &lt;strong&gt;Whatever resolution you want, you're restricted to a maximum of 640 bits per line to hold the data to be displayed.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Having said that, it may be possible to squeeze out a bit more by reprogramming the 6845 directly. Except, neither the OS nor BASIC will give you any support doing this - not to mention that it's not much and rather tricky to make it work within the timing of the Beeb's hardware.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Or more correct addresses prepared for a memory access.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-10T17:52:17.217" LastActivityDate="2020-01-10T17:52:17.217" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7709" PostTypeId="1" AcceptedAnswerId="7715" CreationDate="2018-09-23T18:34:50.867" Score="3" ViewCount="345" Body="&lt;p&gt;I have a 1702 monitor for my C64. I use a cable that splits the video/audio from the C64 to the Red/Yellow/White thing. Something like &lt;a href=&quot;https://www.ebay.com/itm/Cordon-Audio-Video-Cable-COMMODORE-64-C64-128-VIC-20-AV-Lead-New-6-7-12ft-/262846512046?hash=item3d32df7bae&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;. The white cable is the audio. I believe this is an RCA connection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an audio mixer that accepts line level. I would like to take the audio from the C64 to the audio mixer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I simply get a female RCA to 1/4 inch plug? (so something like &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B07D75BV1W&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="8158" LastEditorUserId="8158" LastEditDate="2018-09-23T19:02:50.590" LastActivityDate="2018-09-23T20:22:10.683" Title="Audio from Commodore 64 to line 1/4 inch line level" Tags="&lt;commodore-64&gt;&lt;audio&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7710" PostTypeId="2" ParentId="7610" CreationDate="2018-09-23T19:21:39.643" Score="4" Body="&lt;p&gt;Interesting side note on the Bilestoad... the source code was recently discovered and posted to the web. Ebay Seller has no idea what the discs were and but dug them out of a dumpster where the estate heirs had tossed them. Also in the discs were source files for some other Data Most games like Aztec and Swashbuckler. Twitter link here here.&lt;a href=&quot;https://twitter.com/Apple2Games/status/1043340704544645123?s=19&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://twitter.com/Apple2Games/status/1043340704544645123?s=19&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10671" LastActivityDate="2018-09-23T19:21:39.643" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7712" PostTypeId="1" AcceptedAnswerId="7714" CreationDate="2018-09-23T19:25:37.067" Score="19" ViewCount="2587" Body="&lt;p&gt;Windows, Macintosh, Unix/Linux: today, they all support a hierarchical directory structure. The differences are in the details (mount points vs drive letters), but all use a hierarchical directory structure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accepted answer to question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7685/is-there-a-reason-why-ms-dos-didnt-use-more-english-words-for-commands&quot;&gt;Is there a reason why MS-DOS didn&amp;#39;t use more English words for commands?&lt;/a&gt; says DOS 2.0 added hierarchical directory structure, so I believe Unix had it before DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But was the hierarchical directory structure invented for Unix? Or was there something before Unix that supported a similar hierarchical directory structure?&lt;/p&gt;&#xA;" OwnerUserId="6487" LastActivityDate="2020-09-04T15:56:48.760" Title="Where does the hierarchical directory structure originate from?" Tags="&lt;history&gt;&lt;operating-system&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7713" PostTypeId="2" ParentId="6662" CreationDate="2018-09-23T19:30:54.443" Score="0" Body="&lt;p&gt;I remember this on the PET computer circ 1978 and IIRC was more polished than the CC version in that it didn't require players to hit carriage return after putting in directions. &lt;/p&gt;&#xA;" OwnerUserId="10671" LastActivityDate="2018-09-23T19:30:54.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7714" PostTypeId="2" ParentId="7712" CreationDate="2018-09-23T19:35:28.800" Score="33" Body="&lt;p&gt;The first hierarchical system capable of supporting arbitrary directory structures was designed for &lt;a href=&quot;https://en.wikipedia.org/wiki/Multics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multics&lt;/a&gt;, which pre-dates Unix. It is described in &lt;a href=&quot;https://www.multicians.org/fjcc4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;A General-Purpose File System For Secondary Storage&lt;/em&gt;&lt;/a&gt;, although it should be noted that that paper is a design document and doesn’t quite reflect the file system actually implemented a few years later in Multics.&lt;/p&gt;&#xA;&lt;p&gt;Earlier systems had hierarchical file systems, but not capable of storing arbitrary layouts. &lt;a href=&quot;https://en.wikipedia.org/wiki/Compatible_Time-Sharing_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;CTSS&lt;/a&gt; (1961) had the concept of directories to some extent, or at least separate storage within the same file system for different users and projects (Dennis M. Ritchie wrote more generally that &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/retro.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;“a good case can be made that [Unix] is in essence a modern implementation of MIT’s CTSS system”&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-09-04T15:56:48.760" LastActivityDate="2020-09-04T15:56:48.760" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7715" PostTypeId="2" ParentId="7709" CreationDate="2018-09-23T20:22:10.683" Score="6" Body="&lt;p&gt;Yes. What you have on the RCA plug coming from the C64 is line level mono audio. You can connect it to a mixer using an RCA-to-phono adapter that fits your mixer. Often times, the phono jacks on mixers are for stereo input. So you might need an adapter that goes from Left+Right RCA inputs to a phono plug. Just plug the C64 output to either the Left or Right input, and adjust the mixer balance accordingly to filter the unused stereo input.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-09-23T20:22:10.683" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7716" PostTypeId="1" AcceptedAnswerId="7719" CreationDate="2018-09-23T22:38:42.747" Score="11" ViewCount="695" Body="&lt;p&gt;Ok, here's a tricky one. Being bored I picked out a Sorcerer and opened it to gloat over the chips. Doing so I noticed a strange slot: about 64mm long and 3mm wide, next to the type plate, basically below the power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks almost designed for a 50 wire flat ribbon cable. Except there is nothing on the inside that could support such an interface. I also can't remember any Sorcerer peripheral working that way (*1), a the flat ribbon used for the expansion box is located at the other end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Google-Fu equally failed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TIniz.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TIniz.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here for the bigger picture:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Rvzht.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Rvzht.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Ignoring for a moment that such a cable could only be factory installed, as no connector could be slipped through&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-09-25T21:10:18.690" LastActivityDate="2018-09-25T21:10:18.690" Title="What is that Slot on the Bottom of an Exidy Sorcerer" Tags="&lt;exidy-sorcerer&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7717" PostTypeId="1" AcceptedAnswerId="7723" CreationDate="2018-09-24T03:55:46.750" Score="17" ViewCount="9634" Body="&lt;p&gt;I have a DEC VT525 terminal base (&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/7482/6580&quot;&gt;recently repaired&lt;/a&gt;) that requires a PS/2 keyboard. The Digital OEM keyboard was a LK 411, with a PS/2 plug. There was also a PC-style keyboard available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could get lucky and find a good keyboard for $100 or so, factoring in shipping to Australia. But I have a lot of USB keyboards and rather than get another bulky keyboard, is there an adapter that takes a modern USB keyboard and converts this to a PS/2 male plug with correct PS/2 serial protocol? The one PS/2 keyboard that I have is the kind that used to cost about $5, works just well enough to show that the terminal is OK. Can't stand it for long.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a small plug-style converter around - I researched and found they should not work and I even wasted a couple of bucks getting one to be sure - and physical-only adapters, sure enough, do not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/K0IwE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K0IwE.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Before you think about whether this is a duplicate, there are many questions asking how to connect a PS/2 keyboard to USB. This is about going the other way. I've looked, so if it's really a duplicate, I missed it and will be happy to find I was wrong.)&lt;/p&gt;&#xA;" OwnerUserId="6580" LastEditorUserId="15334" LastEditDate="2020-11-08T03:05:39.413" LastActivityDate="2020-11-08T03:05:39.413" Title="How can I connect a modern USB keyboard to a system requiring PS/2?" Tags="&lt;keyboards&gt;&lt;new-hardware-adaptation&gt;&lt;usb&gt;" AnswerCount="6" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7718" PostTypeId="2" ParentId="7717" CreationDate="2018-09-24T05:13:41.690" Score="13" Body="&lt;p&gt;Not at all. Well, at least not with any simple plug / converter. USB works completely differently from PS/2; any converter will need an active component. And no, those pesky PS/2-USB plugs that were given away with many keyboards during the 2000s are not active, but just rearrange wires - the keyboard controllers themselves were able to handle either interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making an active component would mean to program an active system, like an RasPi, to do the conversion. Way more work than worth it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then again, PS/2 keyboards can still be bought new for anything between 10 and 30 Euro. Even in Shops. A quick browse through Aussi dealer websites and Ebay did show tons of offers for new PS/2 keyboards starting at AU$ 5. Give it a chance.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-02T23:27:50.897" LastActivityDate="2018-10-02T23:27:50.897" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7719" PostTypeId="2" ParentId="7716" CreationDate="2018-09-24T05:27:32.707" Score="22" Body="&lt;p&gt;Howell Ivy was always on the look out for a better power supply, he'd talk to switching power supply vendors now and again (and Apple managed to use one a bit later).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note the 5 ohm 10W wire wound resister across VR1 the +5V series regulator (an LM323 in a TO3 package). The transformer primary to secondary winding ratios were picked to allow 50Hz operation as well at 60Hz. The result was a lot of waste heat when powered by 120VAC. The resister reduced the power dissipated by the LM323 series voltage regulator, it could could go into thermal shut down otherwise. A switching power supply would cure all ills. The decision was driven by cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The slot in the bottom provides improved airflow for a bit more cooling around the power supply. The width of the slot, location and size of the exhaust grill holes picked to comply with Underwriters Laboratories requirements at the time, I recall seeing the report. We used to joke about the indentation above the power supply being intended for use as a coffee warmer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before my time someone at Exidy would have amused themselves with thermocouple wires, a router to cut slots and masking tape for determining where the location and size of a cooling slot should be (I recall seeing the case bottom test article). There'd have been a strong desire to minimize the number of rework steps with a long lead time on engineering changes to the case. A single channel would be preferable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was the product engineer for the Sorcerer for a while after adding the second row of DRAM before moving on to bigger things. (Cutting the two-layer DRAM footprint off a blank logic board and wiring it up to demonstrate signal integrity using T nets and the ability to stay in a two layer PCB.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's back panel access to the edge fingered logic board CPU bus for the S-100 expansion chassis (a real hit with the Micropolis dual floppies), the bottom slot was never intended for an expansion cable. There was also an aborted combined Monitor/floppy housing on a pivot-swivel which proved too expensive both in development and unit cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Addendum&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the logic board revision following adding the &lt;em&gt;second&lt;/em&gt; row of DRAM:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/oRpTC.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oRpTC.jpg&quot; alt=&quot;sorcerer_2nd_rev.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The slot in the bottom of the case would have been just to the front of the power connector and under the logic board. Here the big resistor is mounted through hole instead of hand-soldered. (I couldn't find an original logic board photo.) You can see the Corcom EMI filter added to the transformer assembly for 47 CFR Part 15 B compliance (FCC unintentional interference).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 CPU is in a 40 pin socket on the right hidden under the Expansion ROM pocket.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I confess to never having seen a SorcererII personally. I was off elsewhere by then. You can find case bottom images for it showing no slot and it used a mezzanine power board lending itself to potential replacement with a switching power supply. It also had RichF's three rows of DRAM with Bruce's cassette interface on the logic board:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/reL5Z.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/reL5Z.jpg&quot; alt=&quot;SorcererII_logic_board.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9041" LastEditorUserId="9041" LastEditDate="2018-09-25T01:04:39.200" LastActivityDate="2018-09-25T01:04:39.200" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7720" PostTypeId="1" CreationDate="2018-09-24T05:29:56.933" Score="7" ViewCount="1146" Body="&lt;p&gt;I'm just curious if there was ever other instructions that were more ASCII-centric than the CISC associated ones we're left with now?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, all the Binary Coded Decimal (BCD) instructions currently labeled &quot;ASCII&quot;,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;AAA&lt;/code&gt; : ASCII Adjust after Addition &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;AAS&lt;/code&gt; : ASCII Adjust after Subtraction &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;AAM&lt;/code&gt; : ASCII Adjust after Multiplication &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;AAD&lt;/code&gt; : ASCII Adjust before Division&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And even defined as &quot;ASCII Adjust&quot;?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="10260" LastEditDate="2019-02-09T18:34:38.360" LastActivityDate="2019-02-09T18:34:38.360" Title="Reason behind &quot;ASCII Adjust&quot; instructions being ASCII and not BCD?" Tags="&lt;assembly&gt;&lt;intel&gt;&lt;x86&gt;&lt;binary-coded-decimal&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7722" PostTypeId="2" ParentId="7720" CreationDate="2018-09-24T08:22:13.007" Score="11" Body="&lt;p&gt;The “ASCII” instructions are really about unpacked BCD, not ASCII. There is some justification for calling them “ASCII”, because unpacked BCD can easily be converted to and from ASCII, and in fact if only the lower nibble is considered, ASCII numerals are encoded using the exact same values as their unpacked BCD counterparts. &lt;a href=&quot;https://www.stevemorse.org/8086/index.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The 8086 Primer&lt;/em&gt;&lt;/a&gt; explains the naming thus:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The instructions that perform these four adjustments are called ASCII adjustment instructions (because ASCII is the most common example of unpacked BCD)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;but the instructions sequences involved in unpacked BCD arithmetic don’t deal with unpacked values whose top nibble is non-zero consistently, and the explanation thus ends up being more confusing than useful (and might explain why so many authors got this wrong). A better expansion might have been “accumulator adjust” instructions (as used &lt;em&gt;e.g.&lt;/em&gt; in &lt;a href=&quot;https://www.stevemorse.org/8086history/8086history.doc&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Intel Microprocessors: 8008 to 8086&lt;/em&gt;&lt;/a&gt; by Stephen P. Morse &lt;em&gt;et al&lt;/em&gt;) although that doesn’t help understand the nature of the adjustment. The ease of conversion to and from ASCII results from the fact that numerical digits are encoded as values from 48 (for 0) to 57 (for 9), &lt;em&gt;i.e.&lt;/em&gt; 48 + digit, and that 48 happens to fit entirely in the top nibble of a byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let’s work through an example, first as unpacked BCD, then as ASCII.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As unpacked BCD, to multiply 7 by 6, we’d store 7 in AL, and 6 in BL (since they’re single-digit values in decimal, there is no transformation involved). Integer multiplication (&lt;code&gt;MUL BL&lt;/code&gt;) results in 7×6 in AX. &lt;code&gt;AAM&lt;/code&gt; then splits AX into two unpacked BCD values in AH and AL, 4 and 2 respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As ASCII, we’d start with 55 in AL and 54 in BL (the ASCII codes for “7” and “6”). The rules for the ASCII adjust after multiplication instruction say that values should have their top nibble cleared; doing this to AL and BL results in ... 7 in AL and 6 in BL (magic!). Then the same sequence of operations as above results in 4 and 2 in AH and AL; to convert that to ASCII, we can &lt;code&gt;OR&lt;/code&gt; each value with 48, or better yet, &lt;code&gt;OR&lt;/code&gt; AX with 12336 (3030h), resulting in 52 in AH and 50 in AL, the ASCII codes for “4” and “2”.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that for multiplication and division, the top nibble must be zero, but that requirement doesn’t apply for addition and subtraction, so addition and subtraction can be performed on ASCII values directly (but you still need to convert the results back to ASCII).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It’s also interesting to note that AAM and AAD, as implemented, are generic 8-bit multiply and divide instructions: AAD multipies AH by its 8-bit immediate, adds AL, and stores the result in AL (so as defined, AL ← AH × 10 + AL, AH ← 0); AAM divides AL by its 8-bit immediate and stores the quotient in AH and the remainder in AL (as defined, AH ← AL ÷ 10, AL ← AL mod 10).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There aren’t any other x86 instructions dedicated to BCD operations. One of the x86 flags is BCD specific, AF (the auxiliary carry flag, which reflects carry or borrow on the lower nibble only). The x87 supports packed BCD operations.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-09-24T23:59:11.913" LastActivityDate="2018-09-24T23:59:11.913" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7723" PostTypeId="2" ParentId="7717" CreationDate="2018-09-24T09:14:52.923" Score="15" Body="&lt;p&gt;The short version of this answer boils down to something pretty simple and easy:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Cheap, easy: try more different keyboards with your passive PS/2↔USB pin adapter&lt;/p&gt;&#xA;&lt;p&gt;OR&lt;/p&gt;&#xA;&lt;p&gt;Not cheap, still easy: buy a really expensive, nice keyboard that also works over PS/2 and take it as an excuse to get yourself a nice keyboard for day-to-day computing!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The passive PS/2↔USB pin adapters not working may be merely a factor of your choice of USB keyboard to be converted being too new.&lt;/p&gt;&#xA;&lt;p&gt;If you have that many more USB keyboards stashed away, it might be worth trying the adapter on several different keyboards based on a few key factors.&lt;/p&gt;&#xA;&lt;p&gt;I'll try and communicate what I've noticed about this stuff as best I can. These aren't hard and fast rules for finding a PS/2 adaptable keyboard, as much as a short gist of guidelines that can hopefully point you at a compatible keyboard in your spare parts pile.&lt;/p&gt;&#xA;&lt;p&gt;In the below image, take notice of the styling of both the meta/&amp;quot;Windows&amp;quot; key - a flat modern icon of Microsoft's recent motifs, and the OEM Dell branding - indicating this keyboard likely came bundled as part of desktop system. Both of these points would suggest this keyboard is probably too new to utilize a multi-mode controller IC. Lacking a multi-mode controller IC, this keyboard would be incapable of detecting when it was plugged in to a PS/2 port with a passive pin adapter and would lack the internal logic circuitry to enable to function as anything but a USB keyboard.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/frn78.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;It also features an thematically darkened aesthetic common to a newer era of consumer computer hardware - probably the loudest indicator of a keyboard's age outside of chiclet keycaps.&lt;/p&gt;&#xA;&lt;p&gt;Supposing you have enough old USB keyboards around, finding one that's closer to the era of when PS/2 devices were still popular may allow the use of one of these passive adapters.&lt;/p&gt;&#xA;&lt;p&gt;In the image below, it can be seen that this keyboard features an older styling overall. The icon on the &amp;quot;Windows key&amp;quot; hails from the increasingly distant era of Microsoft's Windows Vista design motifs - an OS at it's prime in a time when PS/2 hardware was still in style. The OEM  Logitech indicates this keyboard is more generic than the Dell (or HP, Acer, etc...), and was probably purchased discretely for use with any given desktop system of the time. This keyboard also features a thematically lighter aesthetic that comes from a remarkably obsolete era of computing. These points don't add up to guarantee a cross compatible keyboard, but are positive indicators in that direction. This is a keyboard more likely to have a multi-mode controller IC which would function with the typical passive PS/2↔USB pin adapter.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/899RP.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;The second linked image could easily be a better example, but still illustrates the point.&lt;/p&gt;&#xA;&lt;p&gt;If you absolutely need a different but specifically PS/2 keyboard at the end of the day, good 'ol &lt;a href=&quot;https://www.ebay.com.au/itm/302883788667&quot; rel=&quot;nofollow noreferrer&quot;&gt;ebay&lt;/a&gt; tends to be an acceptable place to check.  In between all the random and poorly priced stuff one can sometimes find some good deals.  Please note, the above link is not in any way an endorsement of the listing or seller (and indeed I expect it to be well expired by the time this question is in google results for anything), but a mere example of the point.&lt;/p&gt;&#xA;&lt;p&gt;It may also bear worth reframing of the problem as an opportunity to buy a nice buckling spring Model M keyboard - they came in PS/2 natively back in the day, and are within the ballpark of $100-200AUD depending on various factors. If my understanding serves me, unicomp and cherry may also have some PS/2 compatible keyboards available which are generally well regarded. I would also not be surprised to learn of any modern &amp;quot;gaming&amp;quot; oriented keyboards on the market that have snuck a PS/2-compatible mode into their controller IC for use with the passive adapters, but that's far more web research than fits the scope of this answer.&lt;/p&gt;&#xA;&#xA;" OwnerUserId="10570" LastEditorUserId="15334" LastEditDate="2020-09-06T08:17:53.880" LastActivityDate="2020-09-06T08:17:53.880" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7724" PostTypeId="2" ParentId="7720" CreationDate="2018-09-24T11:25:47.820" Score="0" Body="&lt;h1&gt;Historical Prospective&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;You can see this mentioned on the &lt;a href=&quot;https://www.stevemorse.org/8086/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;8086 Primer&lt;/em&gt; page 58&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One example of unpacked BCD is the ASCII representation of digits. ASCII is a 7-bit representation of a set of characters. The ASCII representation of digits are shown in Table 3.6 The four most significant bits contain &lt;code&gt;0011&lt;/code&gt;, which is not relevant to the digit value.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I looked it up in the 4004 and the 8008 (MCS-8) and neither of these mention these instructions or any other instructions about ASCII.&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="8579" LastEditDate="2018-09-24T16:04:21.357" LastActivityDate="2018-09-24T16:04:21.357" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7725" PostTypeId="2" ParentId="7652" CreationDate="2018-09-24T12:20:15.237" Score="2" Body="&lt;p&gt;I hacked together a CPM machine using a bare surplus Xerox 820 (IIRC) Z80 circuit board, sometime in the late '70's (must have been...), and used 8&quot; drives with it. It was not an off the shelf computer, but after hand soldering several thousand connections, it was about as personal (to me) as a computer could get.&lt;/p&gt;&#xA;" OwnerUserId="6752" LastActivityDate="2018-09-24T12:20:15.237" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7726" PostTypeId="2" ParentId="7720" CreationDate="2018-09-24T15:45:53.470" Score="1" Body="&lt;p&gt;&lt;strong&gt;Preface:&lt;/strong&gt; Before writing anything that I got it wrong, it might be helpful to take a look at the &lt;a href=&quot;http://www.bitsavers.org/components/intel/8086/9800722-03_The_8086_Family_Users_Manual_Oct79.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;original documentations&lt;/a&gt; instead of refering some web page, as there are TONS out there who got that part wrong.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm just curious if there was ever other instructions that were more ASCII-centric than the CISC associated ones we're left with now?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure, while the Intel ones still left the number without its zone(*1) part, the IBM /360 did even add that in their unpackign instrucktions accoding to the mode set (ASCII or EBCDIC)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Specifically, all the Binary Coded Decimal (BCD) instructions currently labeled &amp;quot;ASCII&amp;quot;, [AAA/AAS/...]&lt;/p&gt;&#xA;&lt;p&gt;And even defined as &amp;quot;ASCII Adjust&amp;quot;?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Ok, this is maybe a tiny bit missleading, as they are not so much codeset specific, as they are about single byte BCD numbers. But then again, it's what is needed after adding/subracting/etc. two ASCII numbers. Last but not least the much nicer 'DECIMAL ADJUST x' names where already taken.&lt;/p&gt;&#xA;&lt;p&gt;The 8086 supports two set of adjust instructions the &lt;strong&gt;DAx&lt;/strong&gt; which are used to normalize the result of a binary add &lt;strong&gt;of single byte packed BCD numbers, that is two decimal digits per byte&lt;/strong&gt;, stored in each nibble. It's what most people usually see as BCD.&lt;/p&gt;&#xA;&lt;p&gt;But then there are also single byte BCD numbers, where only the lower nibble of a byte contains a BCD digit. The higher nibble may contain anything as it's not regarded useful. When some common character encoding is used it may contain a zone - like &lt;code&gt;3&lt;/code&gt; in case of ASCII of &lt;code&gt;F&lt;/code&gt; when it's about EBCDIC. The &lt;strong&gt;AAx&lt;/strong&gt; instructions are ment to adjust (correct) the result of an operation &lt;strong&gt;on such single digit BCD numbers&lt;/strong&gt; after being done in binary fashion.&lt;/p&gt;&#xA;&lt;p&gt;With these instructions it is possible two ASCII numbers (&lt;code&gt;30h..39h&lt;/code&gt;) without any prior conversion and adjust the result. It will yield a valid BCD number in the lower nibble of AL, while the higher is cleared. The get a valid ASCII number again &lt;code&gt;30h&lt;/code&gt; needs to be ORed onto AL ant the result sstored in an ASCII string again (*2). Similar for the other operations.&lt;/p&gt;&#xA;&lt;p&gt;These adjust operations allow direkt arithmetics on ASCII strings without prior conversion when done in a loop arbitary length ASCII strings can be handled - and by using string operation this gets quite performant.&lt;/p&gt;&#xA;&lt;p&gt;So while they are not exactly produceing ASCII, they do provide what's needed to directly calculate with ASCII numbers.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - While ASCII is a collection of various characters without much structure, IBM did organize it's 8 bit EBCDIC in a way that the upper nibble clearly defines what kind a character is, control, uppercase alpha, lower case alpha, symbol, number. That Nibble is called a 'Zone' as it defines the 'Zone' a code (character) belongs to.&lt;/p&gt;&#xA;&lt;p&gt;For example the &lt;code&gt;F&lt;/code&gt;- zone consists only of numbers &lt;code&gt;0..9&lt;/code&gt;, no other characters (no, &lt;code&gt;FF&lt;/code&gt; is not a character but high value mark).&lt;/p&gt;&#xA;&lt;p&gt;*2 - For example like this code to add two strings of up to 32768 ASCII digits (STRING2 onto STRING1)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    MOV   SI,OFFSET STRING2&#xA;    MOV   DI,OFFSET STRING1&#xA;    MOV   CX,STRINGLEN&#xA;    CLD&#xA;    CLC&#xA;LP:&#xA;    LODSB         * Get one (ASCII) number from STRING2&#xA;    ADC   AL,[DI] * Add one (ASCII) number from STRING1&#xA;    AAA           * Correst it for decimal overflow&#xA;    LAHF          * Flags sichern&#xA;    OR    AL,30h  * Make it ASCII again&#xA;    SAHF          * Restore flags&#xA;    STOSB         * Resulting ASCII Character to STRING1&#xA;    LOOP  LP      * Go for it Tiger.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-09-24T16:21:22.640" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7727" PostTypeId="2" ParentId="293" CreationDate="2018-09-24T18:22:33.277" Score="7" Body="&lt;p&gt;To expand on @RicoPajarola's comment, this is almost definitely the software not properly handling files with long (or lowercase / etc.) filenames on a FAT filesystem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Originally, the FAT filesystem only supported filenames of up to 8 characters (+ up to 3 characters for the extension).&lt;br&gt;&#xA;Also - lowercase letters, spaces and unicode weren't supported.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, long filename support was added to FAT in a way that will fit the longer names within the restrictive structure of the original FAT, thus allowing older programs and operation systems that aren't aware of long filenames to continue functioning, usually (but as you observed - not always) without any bugs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FAT stores a fixed-size entry containing the name and attributes (e.g. size, times) for each file in a directory.&lt;br&gt;&#xA;With long filename support, this fixed-size entry remains unchanged and contains the file's short name (E.g. turning &quot;MyLongFileName.dat&quot; to &quot;MYLONG~1.DAT&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, one or more special &quot;long filename&quot; entries are added before the &quot;real&quot; entry, and these contain the file's long name. These entries are marked as hidden, read-only, system, volume id entries - in the hopes that most existing software will realize it should not display them.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;As for why it's almost certain this is indeed the issue in your case&lt;/strong&gt; (despite the lack of details):&lt;br&gt;&#xA;Where a normal entry has its first three characters of the name, a long filename entry has:&lt;br&gt;&#xA; 1. The index of the long filename entry plus a &quot;this is the last such entry before the real entry&quot; indicator.&lt;br&gt;&#xA; 2. The least significant byte of the first character.&lt;br&gt;&#xA; 3. The most significant byte of the first character. (Since characters in long filename entries are in the UTF16 Unicode encoding, and thus take 2 bytes, compared to the 1-byte ANSI characters of the real entries)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the common case, when a long filename is in English and fits in 13 unicode characters, the above 3 characters are:&lt;br&gt;&#xA; 1. 'A' (which has a value of 0x41 (or 65 = 64 + 1), interpreted as index 1 with the last entry indicator (0x40 = 64) set.&lt;br&gt;&#xA; 2. The first character of the filename. (Since English Unicode characters match their ANSI/ASCII counterparts)&lt;br&gt;&#xA; 3. A null character (value of 0), which would cause most programs to assume the name is over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what gives names like the 'AD' and 'AF' you mentioned.&lt;br&gt;&#xA;These &quot;bad&quot; names will almost always (unless you're using non-English Unicode characters) be two character long and will often start with 'A'. (Though if longer long filenames are used, the bad names can also start with 'B', 'C', etc. - and perhaps also with some odd characters for the &quot;non-last&quot; entries whose first character is a control character)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These entries will likely have odd times and an odd size displayed as well, since long filename entries store more characters where the times &amp;amp; size normally are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;To summarize&lt;/strong&gt; - no, your filesystem is not corrupted, the software simply isn't able to handle it properly.&lt;br&gt;&#xA;It's best not to interact with the &quot;bad&quot; entries (it should be harmless in FAT12/FAT16 filesystems, but I'm not so sure about FAT32 since some of the characters are where it stores the offset to the file data), but it should most likely be fine to continue interacting with the good entries, ignoring the bad ones.&lt;br&gt;&#xA;(Of course, backing it up beforehand is always a good idea)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, you didn't give many details, so it is theoretically possible that 'AD' and 'AF' are just unfortunate examples and the actual filesystem and issue are different, but until other info comes to light, this is the overwhelmingly likely possibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Source: &lt;a href=&quot;https://staff.washington.edu/dittrich/misc/fatgen103.pdf&quot; rel=&quot;noreferrer&quot;&gt;Technical FAT specification&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="10686" LastEditorUserId="10686" LastEditDate="2018-09-24T18:30:01.123" LastActivityDate="2018-09-24T18:30:01.123" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7728" PostTypeId="1" AcceptedAnswerId="7729" CreationDate="2018-09-24T20:47:46.853" Score="3" ViewCount="818" Body="&lt;p&gt;I was reading on this &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5877/first-commercial-dos-game&quot;&gt;RCSE page&lt;/a&gt; about old PC games that you had to boot into to play. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously the machine that the game would run on would at least have enough RAM and necessary graphics capabilities to run the game, so why were games developed to run this way? How did the game save the players progress? Did it write the data to the computers hard drive?      &lt;/p&gt;&#xA;" OwnerDisplayName="user10643" LastActivityDate="2018-09-24T22:05:07.893" Title="How did PC boot games handle saving?" Tags="&lt;history&gt;&lt;software&gt;&lt;gaming&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7729" PostTypeId="2" ParentId="7728" CreationDate="2018-09-24T21:04:56.177" Score="5" Body="&lt;p&gt;Bootable games had to implement their own disk-handling routines (on top of the BIOS), if only to read the data from their disk(s) in order to boot and run in the first place. If you can read from a disk, it’s not much harder to deal with writes, especially if you use a fixed-layout disk format. The BIOS itself provides services to read from and write to disks, and it’s reasonably straightforward to use those to fulfill a bootable game’s requirements. Bootable games which needed to store data would write it to their own floppy disk, or sometimes to another floppy disk, not to a hard drive — many users of bootable games wouldn’t have had a hard drive anyway. (This data wasn’t necessarily players’ progress; often it would be high scores, as in for example &lt;a href=&quot;https://www.digger.org/download.html&quot; rel=&quot;noreferrer&quot;&gt;Windmill Software’s bootable games&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as the why is concerned, there are two main reasons I’m aware of: the first is that by skipping the operating system, the games had more memory available to them; and the second is that by using game-specific disk formats, they were slightly harder to copy, modify etc. (DOS couldn’t read the floppies.) Many if not most bootable PC games were copy-protected in one way or another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.digger.org/index.html&quot; rel=&quot;noreferrer&quot;&gt;Digger remastered&lt;/a&gt; web site has loads of information on that particular bootable game and a few others. &lt;a href=&quot;http://oldskool.org/pc/flopper&quot; rel=&quot;noreferrer&quot;&gt;Flopper&lt;/a&gt; is a nice little tool which can boot many such games using disk images rather than real floppies. The best overview of PC bootable games is &lt;a href=&quot;http://web.archive.org/web/20090206231858/http://retrograde.trustno1.org:80/index2.htm&quot; rel=&quot;noreferrer&quot;&gt;Retrograde Station&lt;/a&gt; (which now only exists as preserved on the Internet Archive, or &lt;a href=&quot;http://www.zimlab.com/wizardry/recovered/retrograde/sir-tech.htm&quot; rel=&quot;noreferrer&quot;&gt;partially mirrored&lt;/a&gt; on the &lt;a href=&quot;http://www.zimlab.com/wizardry/&quot; rel=&quot;noreferrer&quot;&gt;Wizardry Fan Page&lt;/a&gt;). &lt;a href=&quot;https://nerdlypleasures.blogspot.com/&quot; rel=&quot;noreferrer&quot;&gt;Nerdly Pleasures&lt;/a&gt; also covers &lt;a href=&quot;https://nerdlypleasures.blogspot.com/search/label/PC%20Booter&quot; rel=&quot;noreferrer&quot;&gt;a number of PC booters&lt;/a&gt; (including one non-game, &lt;a href=&quot;https://nerdlypleasures.blogspot.com/2015/02/electronic-arts-music-construction-set.html&quot; rel=&quot;noreferrer&quot;&gt;Will Harvey’s Music Construction Set&lt;/a&gt;) and &lt;a href=&quot;https://nerdlypleasures.blogspot.com/2015/11/ibm-pc-floppy-disks-deeper-look-at-disk.html&quot; rel=&quot;noreferrer&quot;&gt;PC floppy disk copy protection&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-09-24T22:05:07.893" LastActivityDate="2018-09-24T22:05:07.893" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7730" PostTypeId="2" ParentId="7720" CreationDate="2018-09-25T00:45:10.887" Score="3" Body="&lt;p&gt;On the 8086, an 8-bit quantity can represent a number in four ways.  &lt;em&gt;Of these four, unpacked BCD is the closest to direct representation by ASCII.&lt;/em&gt;  The AAx instructions are needed to use this representation.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Unsigned binary number&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bit format: 8 binary digits &lt;code&gt;dddddddd&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Represents values from 0 to 255.&lt;/li&gt;&#xA;&lt;li&gt;Addition: &lt;code&gt;ADD&lt;/code&gt; (or &lt;code&gt;ADC&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;Subtraction: &lt;code&gt;SUB&lt;/code&gt; (or &lt;code&gt;SBB&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;Multiplication: &lt;code&gt;MUL&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Division: &lt;code&gt;DIV&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Signed binary number&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bit format: Sign bit &lt;code&gt;s&lt;/code&gt; and data bits &lt;code&gt;sddddddd&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Represents values from -128 to +127.&lt;/li&gt;&#xA;&lt;li&gt;Addition: &lt;code&gt;ADD&lt;/code&gt; (or &lt;code&gt;ADC&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;Subtraction: &lt;code&gt;SUB&lt;/code&gt; (or &lt;code&gt;SBB&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;Multiplication: &lt;code&gt;IMUL&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Division: &lt;code&gt;IDIV&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Packed BCD&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bit format: &lt;code&gt;hhhhllll&lt;/code&gt; -- one decimal digit in the high nibble &lt;code&gt;hhhh&lt;/code&gt; and another decimal digit in the low nibble &lt;code&gt;llll&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Represents values from 00 to 99.&lt;/li&gt;&#xA;&lt;li&gt;Addition: &lt;code&gt;ADD&lt;/code&gt; (or &lt;code&gt;ADC&lt;/code&gt;), then &lt;code&gt;DAA&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Subtraction: &lt;code&gt;SUB&lt;/code&gt; (or &lt;code&gt;SBB&lt;/code&gt;), then &lt;code&gt;DAS&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Multiplication: Not directly supported.&lt;/li&gt;&#xA;&lt;li&gt;Division: Not directly supported.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Unpacked BCD&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bit format: &lt;code&gt;0000llll&lt;/code&gt; -- one decimal digit in the low nibble.&lt;/li&gt;&#xA;&lt;li&gt;Represents values from 0 to 9.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Can be coverted to/from its ASCII representation&lt;/strong&gt; by adding/subtracting 30h.&lt;/li&gt;&#xA;&lt;li&gt;Addition: &lt;code&gt;ADD&lt;/code&gt; (or &lt;code&gt;ADC&lt;/code&gt;), then &lt;code&gt;AAA&lt;/code&gt;.  This automatically zeroes the high nibble of the result.&lt;/li&gt;&#xA;&lt;li&gt;Subtraction: &lt;code&gt;SUB&lt;/code&gt; (or &lt;code&gt;SBB&lt;/code&gt;), then &lt;code&gt;AAS&lt;/code&gt;.  This automatically zeroes the high nibble of the result.&lt;/li&gt;&#xA;&lt;li&gt;Multiplication: &lt;code&gt;MUL&lt;/code&gt;, then &lt;code&gt;AAM&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Division: &lt;code&gt;AAD&lt;/code&gt; first, then &lt;code&gt;DIV&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2018-09-25T09:15:53.687" LastActivityDate="2018-09-25T09:15:53.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7733" PostTypeId="1" CreationDate="2018-09-25T03:24:29.837" Score="1" ViewCount="213" Body="&lt;p&gt;I just &lt;a href=&quot;https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries004.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;saw this&lt;/a&gt; after seeing &lt;a href=&quot;http://people.inf.elte.hu/kiss/09ab2/semijoins.ppt&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;MINUS&lt;/code&gt; in this powerpoint&lt;/a&gt; and looking for more information.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;MINUS&lt;/code&gt; Example The following statement combines results with the &lt;code&gt;MINUS&lt;/code&gt; operator, which returns only unique rows returned by the first query but not by the second:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SELECT product_id FROM inventories&#xA;MINUS&#xA;SELECT product_id FROM order_items;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'm just curious what's the historic reason for using &lt;code&gt;MINUS&lt;/code&gt; instead of &lt;code&gt;EXCEPT&lt;/code&gt;?  Does anyone else use &lt;code&gt;MINUS&lt;/code&gt;? I assume this predates the SQL Spec?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-09-25T03:24:29.837" Title="Why does Oracle use MINUS instead of EXCEPT?" Tags="&lt;terminology&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2018-09-26T12:58:07.747" ContentLicense="CC BY-SA 4.0" />
  <row Id="7734" PostTypeId="2" ParentId="7498" CreationDate="2018-09-25T09:22:18.820" Score="0" Body="&lt;p&gt;If you really want to preserve the original items then consider the following.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather than displaying the items, display the cover art. Print some large posters with all the box covers on them. Maybe include a little bit of info like the title (handy for imports if you don't read Japanese) and year of release. Something that is nice to look at and which you can add to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then store the items. Others have given good advice on this, I would only add that plastic boxes from IKEA are a good option. Throw in a bag of desiccant for good measure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For playing the games get some SD card based multi-carts and run the games from there. Unfortunately this isn't possible for all games, particularly ones with custom hardware in the cartridge, but for most it's fine.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-09-25T09:22:18.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7735" PostTypeId="1" AcceptedAnswerId="7947" CreationDate="2018-09-25T14:50:50.913" Score="5" ViewCount="724" Body="&lt;p&gt;Considering the PDP-8, PDP-7, PDP-9, PDP-1, even though they are completely different architectures (from a programmer's or compiler's point of view at least), they have some remarkable similarities in some details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the microcoded instructions on both the PDP-8 and PDP-7 have &lt;code&gt;cla&lt;/code&gt;, &lt;code&gt;cll&lt;/code&gt;, &lt;code&gt;cma&lt;/code&gt;, &lt;code&gt;cml&lt;/code&gt;, and single or double rotations, which conveniently build up small constants in the accumulator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same two computers also have exactly the same skip instructions, and a bit in the instruction to indicate an indirect memory access. The same operations are also available in the PDP-1 instruction set, as are, obviously, things like &lt;code&gt;add&lt;/code&gt;, and &lt;code&gt;load&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same two computers also have an optional EAE, which provides another register &lt;code&gt;MQ&lt;/code&gt; and some mathematical operations, though the size of &lt;code&gt;MQ&lt;/code&gt; obviously varies between 12 and 18 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So straight away, my mind is supposing that there's some kind of commonality in the implementation as well. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Maybe there's even a single part, which implements all these operations on a bit or group of bits, and which is installed in all these computers to implement a register and ALU. &lt;/li&gt;&#xA;&lt;li&gt;Maybe there's some part which takes a bitfield from an instruction, and determines which of these operations need to take place (and is thus part of the instruction decoder) and is installed in at least some of these computers.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Are there large subsystems in common between the implementations of both 12-bit and 18-bit PDPs, which are responsible for the patterns and similarities between these two groups of computers? &lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-10-17T20:57:50.443" Title="Did DEC build their early computers out of the same parts?" Tags="&lt;hardware&gt;&lt;dec&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7736" PostTypeId="2" ParentId="7735" CreationDate="2018-09-25T15:56:46.393" Score="7" Body="&lt;p&gt;There were obviously no same parts that were doing any of those operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DEC hardware evolved from transistor technology (PDP-1, PDP-8, etc.) to medium-scale IC logic like standard TTL (PDP-8/E, early PDP-11) and eventually to large-scale ASIC CPUs like LSI-11 or 6100 PDP-8 clone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The similarity of instruction sets has nothing to do with the actual implementation of the CPUs. Thus, even on discrete transistors, you can have just different implementations of flip-flops or latches, different implementations of the same logic gate like NAND or NOR (for example, DTL-like logic vs ECL-like logic), etc. Level up, you can have different logic implementations of the CPU, for example, PDP-8/S is a bit-serial CPU while all other PDP-8 machines are bit-parallel. On latter bit-parallel CPUs, the execution of the command might be microcoded or hard-wired which again results in completely different logic structures of the corresponding CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ISA (instruction set architecture) is the very top level of the CPU, and you can have two completely different CPUs executing just the same instructions. Therefore, similar or even coinciding instruction sets of two different CPUs yield &lt;em&gt;exactly no information of their internal structure&lt;/em&gt; and how they execute some specific instruction.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-09-25T15:56:46.393" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7737" PostTypeId="1" AcceptedAnswerId="7739" CreationDate="2018-09-26T10:13:59.530" Score="18" ViewCount="4473" Body="&lt;p&gt;I found a mention on page 777 of the &lt;a href=&quot;http://csapp.cs.cmu.edu/2e/home.html&quot; rel=&quot;noreferrer&quot;&gt;Second Edition of the book &quot;Computer Systems: a programmer's perspective&quot; [Bryant - O'Hallaron]&lt;/a&gt; stating that Cray supercomputers still do not use virtual memory (please note that the &lt;strong&gt;book is from 2011&lt;/strong&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I searched an found this quote attributed to Saymour Cray (see &lt;a href=&quot;https://en.wikiquote.org/wiki/Talk:Seymour_Cray&quot; rel=&quot;noreferrer&quot;&gt;Wikiquote&lt;/a&gt; -and also &lt;a href=&quot;http://hackersays.com/68b2b7&quot; rel=&quot;noreferrer&quot;&gt;Hakersays&lt;/a&gt;-) on virtual memory: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Memory is like an orgasm. It's a lot better if you don't have to fake it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So my question is actually two questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Did Cray supercomputers start using VM at some point?&lt;/li&gt;&#xA;&lt;li&gt;If answer to 1 is &quot;yes&quot;, which one was the last one that did not use VM?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4428" LastEditorUserId="4428" LastEditDate="2018-09-26T10:46:16.280" LastActivityDate="2018-09-28T01:12:35.517" Title="Did Cray computers use virtual memory?" Tags="&lt;cray&gt;&lt;virtual-memory&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7738" PostTypeId="2" ParentId="7737" CreationDate="2018-09-26T10:59:30.387" Score="9" Body="&lt;p&gt;The book &lt;a href=&quot;https://books.google.com.qa/books?id=y9Nxe0SPeVkC&amp;amp;pg=PA24&amp;amp;lpg=PA24&amp;amp;dq=cray%20virtual%20memory&amp;amp;source=bl&amp;amp;ots=dStFX3ihVJ&amp;amp;sig=6o2HlSS-6lftNZ19AbAWsbmNPhk&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=2ahUKEwjI36G4v9jdAhXRJSwKHbcWBBEQ6AEwBnoECAMQAQ#v=onepage&amp;amp;q=cray%20virtual%20memory&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Super Computers, by V. Rajaraman&lt;/a&gt; (of 1999) says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Cray computers, however, never provided a virtual memory system, as Cray designers were convinced that the virtual memory's disadvantages outweight its advantages. They try to provide as large a main memory as possible within the technological constraints prevailing at a given time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am with that - the main application of early Cray machines (later on, they built rather &quot;normal&quot; computers) was to work on one single complex number-crunching problem at a time. Such a task neither needs multi-user nor can it benefit from any of those users not using their memory right now because of their breakfast break. Using CPU cycles as expensive as those a Cray provided to simply swap around memory pages can be considered a serious waste of money.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-09-27T07:25:52.187" LastActivityDate="2018-09-27T07:25:52.187" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7739" PostTypeId="2" ParentId="7737" CreationDate="2018-09-26T11:46:03.293" Score="22" Body="&lt;p&gt;It is important to keep in mind that the Cray company name not only went through several hands, but it also built many vastly different machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'Classic' Cray machines in lineage since Cyber/CDC did not use nor support virtual memory. This goes all the way until 2003's &lt;a href=&quot;https://en.wikipedia.org/wiki/Cray_X1&quot; rel=&quot;noreferrer&quot;&gt;Cray X1&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1993 the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cray_T3D&quot; rel=&quot;noreferrer&quot;&gt;T3D&lt;/a&gt; of Cray Research Inc (Without Seymour Cray involved *1) marked the first Cray with standard, off-the-shelf microprocessors (Alpha 21064) and virtual memory capability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the &lt;a href=&quot;https://en.wikipedia.org/wiki/Silicon_Graphics#Acquisition_of_Alias,_Wavefront,_Cray_and_Intergraph&quot; rel=&quot;noreferrer&quot;&gt;SGI years&lt;/a&gt; (1996-2000) the company was focused to move customers to SGI's MIPS based systems based on the Cray T3 &lt;a href=&quot;https://en.wikipedia.org/wiki/HIPPI&quot; rel=&quot;noreferrer&quot;&gt;HIPPI&lt;/a&gt; communication system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Red_Storm_(computing)&quot; rel=&quot;noreferrer&quot;&gt;Project Redstorm&lt;/a&gt; in the early 2000s marked Cray's (Now &lt;em&gt;Cray Inc&lt;/em&gt;) final move to standard CPUs by using a massive number of AMD x86 Opteron CPUs. Naturally the ability for virtual memory came with that choice. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Cray_XD1&quot; rel=&quot;noreferrer&quot;&gt;XD1&lt;/a&gt;/&lt;a href=&quot;https://en.wikipedia.org/wiki/Cray_XT3&quot; rel=&quot;noreferrer&quot;&gt;XT3&lt;/a&gt; generally available version and all follow up machines were developments based on this design and using x86 CPUs.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On a historic note it might be interesting to know that Cray was not the only one to think that virtual memory is a bogus idea and only wasting resources. IBM engineers designing /360 machines were also refusing to add virtual memory as a standard feature. After all, who on earth would want to buy a large, upper end computer just to considerably lower its memory throughput for a feature that only adds a huge pile of software layers, making it even slower. It took massive pressure from marketing (and customers) to make it a default feature for /370 CPUs.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Cray himself was involved until the Cray-2 and Cray-3 machines with Cray Computer Corporation as a subcontractor. The company closed in the early 90s, when the Cray-3 didn't meet the demand expected. Next he set up a new company, &lt;a href=&quot;https://www.src-labs.com/&quot; rel=&quot;noreferrer&quot;&gt;SRC Computers&lt;/a&gt;, to go into the field of massively parallel computers, focusing on communication - which never got any product due his early death. The company still exists, focusing on research. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6812" LastEditDate="2018-09-26T20:03:56.990" LastActivityDate="2018-09-26T20:03:56.990" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="7740" PostTypeId="1" AcceptedAnswerId="7742" CreationDate="2018-09-26T16:20:20.847" Score="50" ViewCount="9499" Body="&lt;p&gt;Preemptive (rather than cooperative) multitasking was a highly-touted feature for PC's in 1996, with its inclusion in Windows 95 for the first time. It was also highly-touted for 2001 Macs when included with OS X. Earlier versions of both these mainstream consumer OS's supported cooperative multitasking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Meanwhile, preemptive multitasking was the default for more sophisticated OS's, like Unix and OS/2, even decades earlier. And the Amiga shipped with a consumer OS with preemptive multitasking in 1985.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notwithstanding the Amiga being 15 years ahead, why was it such a long time for preemptive multitasking to be supported by the mainstream consumer OS's? &lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-11-13T11:03:33.903" Title="Why was preemptive multitasking so slow in coming to consumer OS's?" Tags="&lt;amiga&gt;&lt;ibm-pc&gt;&lt;apple-macintosh&gt;&lt;unix&gt;&lt;operating-system&gt;" AnswerCount="10" CommentCount="9" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7741" PostTypeId="2" ParentId="7740" CreationDate="2018-09-26T18:31:39.583" Score="29" Body="&lt;p&gt;Memory protection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not that preemptive multi-tasking is expensive, or hard. It's not. It's easy. It costs (or can cost) essentially the same as cooperative multitasking. You have to save process state in both cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what was holding back the older systems was their early reliance on systems without inherent memory protection, and those legacies lasted long past the availability of hardware that actually had supported Memory Management Units (MMUs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take the Mac, for example. Its legacy was the 68000, which did not have direct MMU support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was not long before the Macs started coming out with 68020 CPUs (which &lt;em&gt;did&lt;/em&gt; have such support). But the OS has to run not just on the &lt;em&gt;new&lt;/em&gt; hardware, but also on the old. The two systems are quite incompatible. Plus the actual impact on software design on those systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you start from scratch (like OS/2) then, yes, it's easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MacOS heritage held it back for a long, long time before they were able to replace it with with MacOS X via it's Carbon compatibility layer for the software in the new, Unix-ish environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The OS for the Apple IIGS was actually a &quot;better&quot; MacOS in some ways, notably in process management and memory management. MacOS 2.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows suffered similarly. Recall early Windows ran on the 8088. Not the 80286, the 8088. That legacy also burdened it for quite some time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code has momentum, choices have consequences. Be amazed they worked at all.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorDisplayName="user6464" LastEditDate="2018-09-27T09:30:36.533" LastActivityDate="2018-09-27T09:30:36.533" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="7742" PostTypeId="2" ParentId="7740" CreationDate="2018-09-26T18:41:51.687" Score="21" Body="&lt;p&gt;Speaking for the Macintosh here.&lt;/p&gt;&#xA;&lt;p&gt;TL;DR: It wasn't possible to do this in a compatible manner after the hardware was capable enough. Compatible to the already existing application base.&lt;/p&gt;&#xA;&lt;p&gt;You'll need to see this in context with the heritage of the Macintosh Operating System itself. It was built to run in an considerably limited environment, regarding CPU power and available real memory. Add the fact that the initial release was certainly not production quality code, time pressure was high to get the whole thing running good enough for the highly anticipated release. See &lt;a href=&quot;http://www.folklore.org&quot; rel=&quot;noreferrer&quot;&gt;Folklore.org&lt;/a&gt; for details.&lt;/p&gt;&#xA;&lt;p&gt;(Lacking memory remapping support in the CPU plus initial floppy-only machines prevented to implement paging in a bearable manner. See &lt;a href=&quot;https://en.wikipedia.org/wiki/Memory_management_unit&quot; rel=&quot;noreferrer&quot;&gt;Memory Management Unit&lt;/a&gt; in Wikipedia for details.)&lt;/p&gt;&#xA;&lt;p&gt;When RAM got cheaper over time but floppies still were current as permanent storage medium, the &lt;a href=&quot;http://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Switcher.txt&quot; rel=&quot;noreferrer&quot;&gt;Switcher&lt;/a&gt; was born by chance. Applications were adapted to better behave with Switcher and vice versa.&lt;/p&gt;&#xA;&lt;p&gt;From there, &lt;a href=&quot;https://en.wikipedia.org/wiki/MultiFinder&quot; rel=&quot;noreferrer&quot;&gt;MultiFinder&lt;/a&gt; was the next step, coming out in 1987. It (also) takes advantage of the fact that there's relatively little to change in Applications for not only sitting in RAM, waiting to be switched to foreground but also being able to run in background. MultiFinder simply exploited the main loop every program was executing, mostly waiting for the user to do something. Applications mostly were stuck in a system routine which delivers an event (Keyboard entry, mouse click, …) to the application program to handle. MultiFinder kind of steals control from applications stuck in this routine and passes control to the next eligible Application. If an Application rarely calls this getNextEvent() routine, it behaves poorly in MultiFinder. Regardless if background or foreground. Best negative example is using Background Printing. Print Monitor searches the Network for the chosen (selected) printer. If the printer is switched off, the whole machine hangs for nearly a minute until Print Monitor returns with an error after a timeout, displaying error condition indicators and calling getNextEvent() so it can handle the user's input.&lt;/p&gt;&#xA;&lt;p&gt;Over time, developers made Applications more multitasking-friendly by adding getNextEvent() in internal processing routines, so lengthy processing didn't block other applications. This usually doesn't feel as fluent as cooperative multitasking in a graphical environment, though.&lt;/p&gt;&#xA;&lt;p&gt;(Novell Netware 3 and later also supported cooperative multitasking between extensions of the Kernel, server.exe. These NLMs were loaded at runtime and provided hardware services like drivers for mass storage adapters and network adapters as well as additional network protocols like AppleTalk and TCP/IP, and application support such as pserver.nlm, the print server or database support from Oracle, … I never programmed NLMs but Novell's implementation of cooperation was either very sophisticated and/or in a text based environment, the possibly non-monotonic time slices weren't as apparent as in a GUI environment like the Macintosh ones.)&lt;/p&gt;&#xA;&lt;p&gt;System 7 added some more code to smooth out multitasking further. I can't prove it but I think, Apple changed the way to decide which Applications were eligible to get CPU control. Kind of dynamic scheduling instead of a dumb cycle through all open Applications: Foreground Application gets control more often than background ones.&lt;/p&gt;&#xA;&lt;p&gt;In the meantime there were a lot of applications for the Mac. Commercial, free- and shareware. Apple's struggle to keep up with competition while trying to reimplement a new OS with features we today take for granted while keeping compatibility with this pool of Applications can be searched in online media archives of the late 1990s. Search terms include Taligent, Copeland, BeOS and finally NExTStep reborn as Mac OS X.&lt;/p&gt;&#xA;&lt;p&gt;Switcher was a quick hack; MultiFinder extended the possibilities and that's about it. I think, Apple was too busy creating the next big thing instead of trying to use bolts and nuts to add stuff which involves changing basic OS stuff in an possibly incompatible way.&lt;/p&gt;&#xA;&lt;p&gt;Btw., the Amiga had the advantage of it's coprocessors relieving the main CPU from certain tasks. I can't prove it but I think that in such an environment, preemptive Multitasking was a better way to exploit this seemingly-parallel execution environment.&lt;/p&gt;&#xA;" OwnerUserId="10295" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-09-27T20:03:54.680" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7743" PostTypeId="2" ParentId="7737" CreationDate="2018-09-26T19:45:46.497" Score="8" Body="&lt;p&gt;The claim that Cray supercomputers still did not support virtual memory in 2011 is not true.  For example, the &lt;a href=&quot;https://hack.org/~mc/texts/x1-overview.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cray X1 System Overview&lt;/a&gt;, dated 2002, states that the system supports virtual memory (page 29 and elsewhere).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cray vector supercomputers, including the machines designed by Seymour Cray himself, did not support virtual memory.  For example, Dennis Ritchie, &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/unicos.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;in a 1988 paper,&lt;/a&gt; wrote about virtualizing an OS on the Cray X-MP, “Another complicated aspect of a virtual machine system, paging and virtual memory, is avoided simply because the hardware doesn’t support it even for native systems.”&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fred Gannett’s “&lt;a href=&quot;http://0x07bell.net/WWWMASTER/CrayWWWStuff/Cfaqp1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cray Research and Cray Computers FAQ&lt;/a&gt;” claims that the T90 was the first Cray supercomputer to partially support virtual memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A prominent feature of Cray machines in the ’90s that might be considered a form of virtual memory was the SHMEM library, first introduced on the (DEC Alpha-based) T3D in 1993.  This used a virtual address space to make all CPUs share a portion of their memory space (containing global and static variables, but not stacks or dynamic memory) and communicate through shared memory.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2018-09-28T01:12:35.517" LastActivityDate="2018-09-28T01:12:35.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7744" PostTypeId="2" ParentId="7740" CreationDate="2018-09-26T20:03:28.897" Score="15" Body="&lt;p&gt;To start with, the only hardware needed for preemptive multitasking is an interrupt capable timer. Everything else can be done in software. Though, some memory management would be helpful. Besides custom solutions, that hardware was already ready available off the shelf for 8-bit CPUs. Beside more generic solutions like TI's 74610 series, more advanced solutions like Motorola's 6829 were available.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Notwithstanding the Amiga being 15 years ahead,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Let's skip that subjective part, OK :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;why was it such a long time for preemptive multitasking to be supported by the mainstream consumer OS's?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now, hold the horses. I hope you agree that CP/M was a mainstream consumer OS, wouldn't you? DR already offered its preemptive multitasking brother &lt;a href=&quot;https://en.wikipedia.org/wiki/MP/M&quot; rel=&quot;nofollow noreferrer&quot;&gt;MP/M&lt;/a&gt; in 1979. It would work with 'only' 32 KiB, but of course considerably better with several 64 KiB address spaces, one for each process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This 'huge' memory requirement also marks the primary reason why usage was limited: the price for such a computer. MP/M was targeted at 'power users' with an urgent need to have multiple applications running in parallel. While RAM prices did drop, this &lt;strong&gt;need for a use case&lt;/strong&gt; stayed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MP/M-86 was available right with the IBM-PC and turned later on into Concurent-DOS. Still it was the missing &lt;strong&gt;use case&lt;/strong&gt; that stopped a broader usage. Not least due to lacking software that would benefit from multitasking at all. Other more limited products like &lt;a href=&quot;https://en.wikipedia.org/wiki/DoubleDOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;DoubleDOS&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/DESQview#Desq&quot; rel=&quot;nofollow noreferrer&quot;&gt;Desq&lt;/a&gt; had more success in the general public by offering the chance to hold more than one program in memory, handy to reduce load times. Otherwise there was little gain, as these programs worked virtually separated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More problem-centric solutions like &lt;a href=&quot;https://en.wikipedia.org/wiki/Borland_Sidekick&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sidekick&lt;/a&gt; did gain much popularity, as they offered at least some (workflow) integration. Apple, on the other hand, did focus from the beginning on a more user centric approach. Already the original Finder supported clipboard exchange and accessories in addition to a (single) main application. With System 5's &lt;a href=&quot;https://en.wikipedia.org/wiki/MultiFinder&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multifinder&lt;/a&gt; more than one application could be loaded. Still, it took some time until this really got a foothold through better integration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom Line: It's about the application, stupid.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a user's perspective there is no real difference between cooperative and preemptive multiprocessing. It's all about what can be done. No matter how we engineering orientated people value these concepts, Multiprogramming, Multitasking, Multiprocessing and all the other Multi* are only tools to enable the user to do his tasks and no real value in themselves. Separated address spaces, preemptive multitasking and so on only became standard when supporting hardware came for free. And at first it only supported programmers in creating applications (or help handling their inability to do so), not offering any direct benefit to the user.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-02T23:26:32.993" LastActivityDate="2018-10-02T23:26:32.993" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="7745" PostTypeId="2" ParentId="7740" CreationDate="2018-09-26T20:09:06.977" Score="5" Body="&lt;p&gt;The &quot;classic&quot; Macintosh OS, as well as a lot of application software, made heavy use of what Inside Macintosh refers to as &quot;Handles&quot;.  Instead of keeping a pointer to a region of memory, application software would keep a pointer to a Master Record, whose first item was a pointer to a region of memory.  If code was e.g. using a region of memory to hold a 32-bit length, followed by a sequence of &lt;code&gt;short&lt;/code&gt; values and wanted to e.g. compute the total of all such values, it could do something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;long addHandleContents(long **h)&#xA;{&#xA;  long n = **h;&#xA;  long total=0;&#xA;  short *p = (short*)((*h)+1);&#xA;  while(n--)&#xA;    total += *p++;        &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Any time code performed any system call which might need to allocate memory, it would have to allow for the possibility that the storage associated with any handle that wasn't locked might get relocated.  Typically, code would accommodate that possibility by either locking the handles before making such system calls, or by re-fetching the addresses of handles' memory blocks after making such calls.  In cases where there were no such system calls (e.g. the code above), being able to access the storage associated with handles directly made things more efficient than would otherwise have been possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some systems avoid such issues by allocating blocks of storage whose address will be fixed throughout their lifetime.  Some (like .NET) require that programs contain metadata which would allow the memory manager to, at any time, find all the all the references that exist anywhere in the universe to any unpinned object that will ever be accessed.  The Macintosh approach allowed better memory utilization than fixed-address allocators, and didn't need all the extra metadata required of .NET, but requires that programs know when the system might need to relocate storage.  While limited preemptive multitasking might have been possible even under classic MacOS, any operation which would need to relocate any handle associated with an application would have to block until that application reaches a &quot;safe state&quot;, thus forfeiting much of the benefit of pre-emptive multitasking.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-09-26T20:09:06.977" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7746" PostTypeId="2" ParentId="7685" CreationDate="2018-09-26T21:29:29.263" Score="4" Body="&lt;p&gt;A lot of very good answers here, but one point that I haven't seen mentioned...&#xA;Back in the day, line editing was very primitive.  If you got one character wrong, your only option was to backspace to delete until your mistake.  And no opportunity to recall previous commands to edit and fix the mistake.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, input on a teletype was even more of a pain.  So short commands made sense.&lt;/p&gt;&#xA;" OwnerUserId="10702" LastActivityDate="2018-09-26T21:29:29.263" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7747" PostTypeId="2" ParentId="7740" CreationDate="2018-09-26T21:57:50.680" Score="11" Body="&lt;p&gt;If you look at early (small) computer operating system kernels like CP/M or MS-DOS, there actually isn't that much functionality supplied by those systems. Apart from a thin layer of drivers for keyboard and console, the main function supplied to the applications is the file system driver. CP/M and early MS-DOS didn't even have support for memory management. In an exaggerated sense, both CP/M and MS-DOS weren't much of a &quot;real&quot; OS, but rather very small pieces of code, thrown-together from small drivers and some utility programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An OS supporting preemptive multitasking needs to supply many more functions, memory management, interprocess communication, support to allow multiple processes to use the screen concurrently - A multitasking system can't allow programs to access the hardware directly and must instead block other tasks when one of them accesses hardware. So, it is simply a lot more effort to build such a system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first home computer to support preemptive multitasking was actually the Sinclair QL in 1984 - It implemented all the above and more in its OS QDOS, and its BASIC interpreter was just one of many possible jobs that could run concurrently. All of this was implemented in only 48 kBytes of ROM on this computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers like the Macintosh or Atari ST whose operating systems weren't built with multitasking in mind and had a considerable user base and applications suite were much harder to move to a preemptive multitasking system - compatibility with existing application was making the move extremely difficult - MacOS and Atari ST systems that, adopted preemptive multitasking in add-on developments like MultiTOS had large compatibility problems in the beginning and needed to take a lot of compromises to keep compatibility with existing applications (and, thus were obviously much more complicated to develop). The same is true for later PC-DOS multitasking systems like DesqView.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another reason might have been: It was hard to convince the normal non-power user what they could probably need preemptive multitasking for. The average user argued &quot;I can only work with one program at a time, so what?&quot;, and OS concepts that really created a tangible benefit for the end user from multitasking (preemptive or not) were only slowly evolving. Also, keep in mind, the &lt;em&gt;direct&lt;/em&gt; benefit an end user has from a preemptive multitasking system over a cooperative one are &lt;strong&gt;zero&lt;/strong&gt;. It's the software developer who gets all the benefits, and after all it is normally the former, not the latter who decides what computer is bought. Thus, as an engineer, it was presumably very hard to convince your marketing department you wanted to build such a system. &lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="7946" LastEditDate="2018-09-27T11:46:55.577" LastActivityDate="2018-09-27T11:46:55.577" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7748" PostTypeId="1" CreationDate="2018-09-27T00:03:53.933" Score="1" ViewCount="268" Body="&lt;p&gt;My computer is saying that my netscape file is being used by a host that says it is located in Boulder Colorodo. It is coming from a wierd IP address. I just plugged my ethernet cable to use the internet, and it worked, but I cannot find the lock file so I can delete it. Can I have some assistance?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Question is: How do I find and delete the lock file in the SGI Indy computers.&lt;/p&gt;&#xA;" OwnerUserId="10529" LastEditorUserId="10529" LastEditDate="2018-09-27T02:01:49.133" LastActivityDate="2018-09-28T16:51:42.823" Title="Netscape has detected a /.netscape/lock file" Tags="&lt;unix&gt;&lt;sgi&gt;&lt;netscape&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7749" PostTypeId="2" ParentId="7740" CreationDate="2018-09-27T00:24:32.123" Score="2" Body="&lt;p&gt;In the case of the Macintosh, Apple kept promising preemptive multitasking in the &quot;next&quot; release, going back as far as version 5 or 6 of the Mac OS, but it never happened until OS X. A version of A/UX (which is preemptive) for later Macintosh systems was released in 1988. Another gripe about Macintosh systems was they didn't have any DMA in the early years, although PC's and even some CP/M systems had it years before the first Macintosh in 1984, and third party vendors made DMA (bus-mastering) SCSI cards for the later Macintoshes long before Apple included that feature in Macs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For PC compatibles, there was OS/2, a version of which could run on 80286 systems, but many consumers got the impression that OS/2 would only run on IBM's PS/2 systems (and vice versa for some consumers), and not the 386 EISA PC clones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Windows, NT 3.5.1 was released in 1993, but NT didn't become popular until NT 4.0 in 1996, and at the time it wasn't as popular as Windows 95 or 98. Windows 98 was followed by Windows ME. Windows NT 4.0 was followed by Windows 2000, XP, Vista, 7, 10  Going back to 1993, Windows 3.11 wasn't preemptive, but did include support for 80386 32 bit flat address mode via win32s extension or winmem32 (only Watcom C/C++ 10.0 compiler supported winmem32 as one of it's memory models at that time).&lt;/p&gt;&#xA;" OwnerUserId="4660" LastEditorUserId="4660" LastEditDate="2018-09-27T16:09:56.673" LastActivityDate="2018-09-27T16:09:56.673" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7750" PostTypeId="1" CreationDate="2018-09-27T11:10:26.683" Score="2" ViewCount="305" Body="&lt;p&gt;I have in my possession a stack (like 7 or 8) DELL P60 desktop computers.  Unfortunately some idiot (cough, me, cough) thought it was a good idea (about 15+ years ago) to spray paint them all black.  Now I can repaint the metal cases easy enough, but the plastic 'face plates' on the front of the computers have a nice coat of black paint all over them.  They don't look &lt;em&gt;bad&lt;/em&gt;, but I would like to see if I can chemically strip the paint from the plastic, &lt;strong&gt;without&lt;/strong&gt; doing damage to the actual plastic.  Is this achievable or have I (in the shortsightedness of my youth) defaced them irreparably?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2018-09-27T12:45:19.027" Title="Is it possible to chemically remove spray paint from 1990's PC cases (specifically the plastic front covers)?" Tags="&lt;restoration&gt;&lt;case&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7751" PostTypeId="2" ParentId="7750" CreationDate="2018-09-27T11:46:56.030" Score="2" Body="&lt;p&gt;Oven cleaner is one recommendation from various modellers, I've had decent luck with non-acetone nail varnish remover in the past (although depending on the paint type you might want something with acetone). Brake fluid is another suggestion I've seen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these could damage the plastic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This thread has some suggestions you might want to look at.&#xA;&lt;a href=&quot;https://www.tapatalk.com/groups/airfixtributeforum/paint-removal-t3088.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.tapatalk.com/groups/airfixtributeforum/paint-removal-t3088.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;As always protect your skin and eyes in particular when working with chemicals.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2018-09-27T12:45:19.027" LastActivityDate="2018-09-27T12:45:19.027" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7753" PostTypeId="2" ParentId="7750" CreationDate="2018-09-27T12:37:29.227" Score="2" Body="&lt;p&gt;In a recent video, RetroManCave demonstrates stripping the paint off a plastic TRS-80 case using methylated spirits. This will remove all the paint, thus affording you the option to leave the plastic in its &quot;native&quot; color, or prep and paint it to try to match the original color. I don't know whether a shorter treatment with the same chemical would remove just the outer layer of spray paint, but that may be worth a try.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Xigwt-qaTkk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=Xigwt-qaTkk&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-09-27T12:37:29.227" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7754" PostTypeId="2" ParentId="7748" CreationDate="2018-09-27T13:04:36.580" Score="7" Body="&lt;p&gt;Netscape uses a lock file to prevent corruption of its internally-used files that would happen when two copies of the program are running at the same time.  This file is stored in the user's home directory under &lt;code&gt;.netscape/lock&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have an old enough system to test this out for myself, but Firefox, which adopted many of Netscape's habits, creates a lock file that's a symbolic link to a nonexistant file that contains the IP address of the host that created it and the process ID, like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% ls -lh .mozilla/firefox/*/lock&#xA;lrwxrwxrwx. 1 blrfl blrfl 17 Aug 23 20:33 .mozilla/firefox/angfgbte.default/lock -&amp;gt; 192.168.1.111:+1234&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the era when the Indy was built, it was common to have home directories served up to the workstations across the network so users could log into any of them and get at their files.  Storing the IP address where the first instance of Netscape was running would let a second instance inform its user where the first was running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What likely happened in your case is that the machine was running Netscape when it was last shut down or lost power before you got it, leaving the lock file in place.  (I don't remember if Irix of that vintage neatly terminated running processes during shutdown.)  When you started Netscape back up, it had no way of knowing that it wasn't on the same network, saw the lock file, refused to start and gave you the best information it had about where the other process might be running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way to solve the problem is to remove &lt;code&gt;~/.netscape/lock&lt;/code&gt; and start Netscape.&lt;/p&gt;&#xA;" OwnerUserId="749" LastActivityDate="2018-09-27T13:04:36.580" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7755" PostTypeId="2" ParentId="6339" CreationDate="2018-09-27T13:25:45.667" Score="1" Body="&lt;p&gt;For a compiler, or in Assembler, a procedure usually needs the stack. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But also the environment it is in, system or application calling it. So the are always (at least) 2 states in action: &#xA;The caller, and the present code being called.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For easy and safe access, both should be independent (separated).&#xA;What the Motorola designers had in mind, expressed but not limited to that, was the relation between system and application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of FORTH, while it is both the system and the application, the reason is another: It's personality reflects those 2 states as 2 different usages, therefore demanding 2 stacks for each use: Ret-Stk (system) and Dat-Stk (application). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In FORTH, it's a parallel of what is really at work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not mattering if an OS, an application, Forth or ASM, the use of stacks suggest at least 2. Because the first CPUs used one, inertia kept it, though inadequate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In such inadequacy, a single stack forces to tricks to deal with the limitations habit imposed...&lt;/p&gt;&#xA;" OwnerUserId="10709" LastEditorUserId="278" LastEditDate="2018-09-27T15:50:02.357" LastActivityDate="2018-09-27T15:50:02.357" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7756" PostTypeId="1" CreationDate="2018-09-27T13:27:39.037" Score="10" ViewCount="877" Body="&lt;p&gt;I have an 500+ rev8A, I added the missing 0.5 MB RAM and the U32 to the motherboard. I also have 512 KB in the trapdoor. This results in 1.5 MB chip RAM; but I want to have 1 MB chip RAM and 0.5 MB slow RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I arrange for this? That is, for the expansion to be used as slow RAM? What are the right jumper settings (JP2, JP3, JP4A, JP4B, JP7A — no U32) for this configuration?&lt;/p&gt;&#xA;" OwnerUserId="10541" LastEditorUserId="11916" LastEditDate="2019-04-07T12:32:25.823" LastActivityDate="2019-04-07T12:32:25.823" Title="Amiga 500+ rev8A, 1 MB chip RAM and 0.5 MB slow RAM" Tags="&lt;amiga&gt;&lt;memory&gt;&lt;memory-layout&gt;&lt;amiga-500&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7757" PostTypeId="1" AcceptedAnswerId="7759" CreationDate="2018-09-28T02:19:09.923" Score="14" ViewCount="3623" Body="&lt;p&gt;I'm not sure if this is the correct place to ask this question or Information Security, but here it goes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Certain storage mediums can also be bootable, for example USB drives or CD/DVDs. These storage mediums can carry and potentially transfer malware and viruses to a target computer to be executed.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As sort of a followup to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7728/how-did-pc-boot-games-handle-saving&quot;&gt;this&lt;/a&gt; question, were bootable discs, for example, bootable games, ever seen as a security risk for computers at that time? Or was the idea of a virus or malware being transferred when using bootable media implausible?&lt;/p&gt;&#xA;" OwnerDisplayName="user10643" LastActivityDate="2018-09-30T06:28:29.890" Title="Security Issues with Bootable Games" Tags="&lt;history&gt;&lt;software&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7758" PostTypeId="2" ParentId="7757" CreationDate="2018-09-28T02:29:51.593" Score="11" Body="&lt;p&gt;Absolutely. &lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_virus#Boot_sector_viruses&quot; rel=&quot;noreferrer&quot;&gt;Boot sector viruses&lt;/a&gt; were very common, like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Michelangelo_(computer_virus)&quot; rel=&quot;noreferrer&quot;&gt;Michaelangelo virus&lt;/a&gt;, which infected both the boot sector on a floppy and the MBR on a hard drive. Fortunately, many install disks and bootable games were write-protected, but that was no guarantee that the disk wasn't infected: it's really easy to make a disk read-write again!&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2018-09-28T02:29:51.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7759" PostTypeId="2" ParentId="7757" CreationDate="2018-09-28T02:34:44.147" Score="20" Body="&lt;p&gt;Bootable media were in fact the primary means of spreading certain kinds of viruses, but self-booting games on write-protected media were safe because no software company would distribute games with viruses on them, and if the viruses weren't on the disks when manufactured they were unlikely to get there later unless someone's drive had the write-protect mechanism bypassed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The normal means via which a virus would get onto a bootable disk would be by piggy-backing onto some other attempt to access the disk from an already-booted (and infested) system (since attempting to access a floppy when there was no reason for such access would have been quite noticeable).  Most self-booting disks would be inserted into the system before it was powered on or booted, and removed before booting into anything else, and thus weren't terribly likely to get infected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That having been said, the real security risk was having systems attempt to boot removable media by default.  At best, this needlessly increased startup time by a couple seconds.  It also meant that if one started the machine with a non-bootable floppy one would have to eject it before one could boot the hard drive. &#xA; Overall, this approach was in pretty much every way inferior to booting from the removable media unless a key was pressed (and would have been even without security issues), but relatively few systems took the latter approach.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2018-09-28T15:12:03.523" LastActivityDate="2018-09-28T15:12:03.523" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="7760" PostTypeId="2" ParentId="6716" CreationDate="2018-09-28T06:42:01.410" Score="7" Body="&lt;p&gt;An old acquaintence of mine that I used to buy a fair bit of kit from (and hope to again, possibly a Model 4 if he can source one) informs me that the TRS-80 Model III clocks in at about 20kg, boxed up. That's about 44lbs for those quaint people not wholly converted to metric :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't imagine the box and packing itself would be much more than a kilo or so, so I'd put the weight of the computer itself in the high teens.&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-07T09:35:30.060" LastActivityDate="2018-10-07T09:35:30.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7761" PostTypeId="1" AcceptedAnswerId="7780" CreationDate="2018-09-28T07:13:10.760" Score="4" ViewCount="496" Body="&lt;p&gt;We are having a &lt;em&gt;frank exchange of views&lt;/em&gt; here in the office.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We were discussing the heydays of home PCs, back in the early 80s, when there were a plethora to choose from, most running some form of BASIC, some, like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Jupiter_Ace&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jupiter Ace&lt;/a&gt;, running &lt;a href=&quot;https://en.wikipedia.org/wiki/Forth_(programming_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Forth&lt;/a&gt;, and someone claimed that there had been a home PC which ran &lt;a href=&quot;https://en.wikipedia.org/wiki/JOVIAL&quot; rel=&quot;nofollow noreferrer&quot;&gt;JOVIAL&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Give that it is a military language, that seems unlikely, but that person is adamant, albeit with a memory gap where the name of the PC should be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know of a(n early 80s) home PC which ran JOVIAL?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Btw, feel free to edit for better tags.&lt;/p&gt;&#xA;" OwnerUserId="3477" LastActivityDate="2019-04-01T20:51:31.033" Title="Was there ever a home PC which ran JOVIAL?" Tags="&lt;programming&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7762" PostTypeId="2" ParentId="7757" CreationDate="2018-09-28T07:30:56.743" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm not sure if this is the correct place to ask this question or Information Security, but here it goes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If I understand your answer correctly, you are asking about the situation in MS-DOS times. You are not asking about the situation today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And as far as I understand correctly the &quot;Information Security&quot; Stack Exchange site is only intended for questions about the current situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer however depends on the time you are referring to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Today:&lt;/strong&gt;&lt;br&gt;&#xA;Bootable games would be a &lt;strong&gt;very high&lt;/strong&gt; security risk.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MS-DOS times:&lt;/strong&gt;&lt;br&gt;&#xA;Bootable games &lt;strong&gt;maybe&lt;/strong&gt; even were &lt;strong&gt;a lower&lt;/strong&gt; security risk than other games.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Running (new) software on a computer &lt;strong&gt;always&lt;/strong&gt; means a security risk: Any kind of software might be infected with viruses or other kind of malware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the question is not:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Are bootable discs a security risk?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But the &lt;strong&gt;actual question&lt;/strong&gt; is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Which is the &lt;strong&gt;higher&lt;/strong&gt; security risk?&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Bootable discs or&lt;/li&gt;&#xA;  &lt;li&gt;software not coming as bootable disc (e.g. coming as &quot;.EXE&quot; file)?&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Modern operating systems (such as Linux or modern Windows versions) have a lot of security mechanisms. By booting software from a floppy disk you bypass these security mechanisms so today running bootable software would be a very high security risk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware of early PCs however did not even allow writing an OS that has such security mechanisms. Therefore MS-DOS could not have such security mechanisms. This is also true for early versions of MS Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that a malware-infected game that you started by double-clicking an &quot;.EXE&quot; file could do the same damage to your computer a malware-infected bootable game could do to your computer. (Including writing a boot sector virus to your hard disk!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(As far as I know this was still the case under Windows ME in September 2000!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So booting a bootable game from a floppy disk was not a higher risk than running a game that came as &quot;.EXE&quot; file under MS-DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you could even represent the position that bootable games were a lower security risk than games coming as &quot;.EXE&quot; files in MS-DOS times:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A bootable game could not access resources that required device drivers to be loaded - such as network drives or special disk drives. A game that came as &quot;.EXE&quot; file could access these drives.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="8712" LastEditDate="2018-09-30T06:28:29.890" LastActivityDate="2018-09-30T06:28:29.890" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7763" PostTypeId="2" ParentId="7757" CreationDate="2018-09-28T08:14:49.463" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;were bootable discs, for example, bootable games, ever seen as a security risk for computers at that time? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Apparently they were in some cases. In fact it might be described as &quot;this is how it all really started.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the Atari ST had many games bootable. And &lt;a href=&quot;https://www.exxoshost.co.uk/atari/mirror/UVK2000/viruses.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;some viruses&lt;/a&gt;. Another answer said &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but self-booting games on write-protected media were safe because no software company would distribute games with viruses on them&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;that ignores the proven mal-practice of vendors, for example &lt;a href=&quot;https://en.wikipedia.org/wiki/Sony_BMG_copy_protection_rootkit_scandal&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sony BMG copy protection rootkit scandal&lt;/a&gt; or that sometimes even well meaning manufacturers might slip up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the ST things were even scarier. One factor might have been that probably most games played didn't come from a manufacturer, but through shadier channels. But even original disks were seen as a potential risk as evidenced here:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;http://atariage.com/forums/topic/106814-virus-warning-on-game-disk-label/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Virus Warning on game disk label&lt;/a&gt;&#xA;  I recently acquired a small lot of ST disks. On the one's for Strider by U.S. Gold/Capcom there is printed &quot;Virus Warning - power off computer before loading this software&quot; I've tried looking up references to this both on here and all over the net but can not find the meaning of this admonition. Can anyone here explain exactly what that means?&lt;br&gt;&#xA;  Actually the disk, which is the first of two, is an original. The warning is printed on the part of the label that wraps around to the reverse side of the disk. It's only on the number 1 disk. The same space on the 2nd is blank.&#xA;  […]&lt;br&gt;&#xA;  Ah yes back then most virus would save themselves on the bootblock of disks and spread that way, then reload themselves into memory when you loaded the disk later. But some commercial software would have custom bootloaders and if the virus saved itself on it the game would not load. This was the case for Amiga and Atari ST disks.. That is what the warning is about.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Probably the most famous example of an original manufacturer delivering an infected floppy to its customers was the &lt;a href=&quot;https://en.wikipedia.org/wiki/MacMag&quot; rel=&quot;nofollow noreferrer&quot;&gt;MacMag or Peace virus&lt;/a&gt; for Macintoshes from 1988.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;http://virus.wikia.com/wiki/Macmag&quot; rel=&quot;nofollow noreferrer&quot;&gt;If Macmag is ru&lt;/a&gt;n from the original dropper, NEWAPP.STK, or if a clean disk is placed in an infected system, it will drop an INIT resource named DR. If the disk is booted, the virus will become resident in the memory and infect any disks inserted into the system.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The virus replicates until 1988.03.02. If the infected computer is booted on that date, it displays the message: &quot;RICHARD BRANDOW, publisher of MacMag, and its entire staff would like to take this opportunity to convey their UNIVERSAL MESSAGE OF PEACE to all Macintosh users around the world.&quot; After that, it deletes itself.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;One outbreak of the virus began when the president of MacroMind Inc. (later merged with another company to form Macromedia), Marc Canter, received a copy of the Mr. Potato Head game infected with the virus while visiting Canada. He claimed he used the game disk only once, but still managed to get other disks he used infected. These disks included a training program that was sent to the Aldus corporation.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;There, the virus infected disks of the program Aldus Freehand (now Macromedia Freehand) a popular vector graphics program. A large number of these disks were sold, causing a major outbreak of the virus. The disks had to be recalled.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Other clients of Marc Canter included Apple, Lotus, Microsoft and Ashton-Tate. The Apple and Lotus corporations could not be reached for comment at first, but later determined that none of their software was infected. The other company, Ashton-Tate declined to comment.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As these kind of infections are still not over, since is &lt;a href=&quot;https://security.stackexchange.com/questions/127065/boot-sector-virus-can-it-spread-only-through-floppy-disks&quot;&gt;not restricted to only bootable floppies&lt;/a&gt;, one more example that seems almost beyond belief:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;http://virus.wikidot.com/stoned&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stoned variant Angelina&lt;/a&gt;:&lt;br&gt;&#xA;  This virus has caused major embarrassments for several companies on two occasions. In 1995 October, Seagate 5850 (850MB) IDE hard drives which were factory-sealed were found to have the virus. Again in 2007 September, Medion laptops sold by the Aldi retail chain in Germany and Denmark were found to have been infected with the virus, which by then was over 13 years old. In addition to Windows Vista, the laptops came with Bullguard Antivirus preinstalled, which detected, but failed to remove the virus.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;One of the biggest virus epidemics involving games was &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.f-secure.com/v-descs/cih.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;Virus:​DOS/CIH&lt;/a&gt;&lt;/strong&gt;&#xA;  The CIH virus was first located in Taiwan in early June 1998. After that, it has been confirmed to be in the wild worldwide. It has been among the ten most common viruses for several months. CIH has been spreading very quickly as it has been distributed through pirated software.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;History&lt;/strong&gt;  It seems that at least four underground pirate software groups got infected with the CIH virus during summer 1998. They inadvertently spread the virus globally in new pirated softwares they released through their own channels. These releases include some new games which will spread world-wide very quickly. There's also a persistent rumor about a 'PWA-cracked copy' of Windows 98 which would be infected by the CIH virus but F-Secure has been unable to confirm this.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Later on, CIH was distributed by accident from several commercial sources, such as:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Origin Systems website where a download related to the popular Wing Commander game was infected.&lt;br&gt;&#xA;  At least three European PC gaming magazines shipped magazines where the cover CD-ROM was infected - one of them even included a note inside advicing users to disinfect their machines after using the CD-ROM.&lt;br&gt;&#xA;  Yamaha shipped an infected version of a firmware update software for their CD-R400 drives.&lt;br&gt;&#xA;  A widely spread demo version of the Activision game SiN was infected as well - this infection did not originate from the vendor.&lt;br&gt;&#xA;  IBM shipped a batch of new Aptiva PCs with the CIH virus pre-installed during March 1999, just a month before the virus activates destructively&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Payload&lt;/strong&gt;&#xA;  What makes the CIH case really serious is that the virus activates destructively. When it happens the virus overwrites most of the data on the computers hard drive. This can be recovered with recent backups.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;However, the virus has another, unique activation routine: It will try to overwrite the Flash BIOS chip of the machine. If this succeeds, the machine will be unable to boot at all unless the chip is reprogammed. The Flash routine will work on many types of Pentium machines - for example, on machines based on the Intel 430TX chipset. On most machines, the Flash BIOS can be protected with a jumper. By default, protection is usually off.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Back to the original question:     &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Elk_Cloner&quot; rel=&quot;nofollow noreferrer&quot;&gt;Elk Cloner&lt;/a&gt; is one of the first known microcomputer viruses that spread &quot;in the wild&quot;, i.e., outside the computer system or laboratory in which it was written. It attached itself to the Apple II operating system and spread by floppy disk. It was written around 1982 by programmer and entrepreneur Rich Skrenta as a 15-year-old high school student, originally as a joke, and put onto a game disk.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From which I conclude that &lt;a href=&quot;https://priceonomics.com/who-invented-the-computer-virus/&quot; rel=&quot;nofollow noreferrer&quot;&gt;sometime after 1982&lt;/a&gt; booting games &lt;em&gt;must&lt;/em&gt; have been a security concern for anyone interested. &lt;a href=&quot;http://www.skrenta.com/cloner/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Several outlets reported this widely&lt;/a&gt; over the years. In 1988 even the mainstream &lt;a href=&quot;http://content.time.com/time/magazine/article/0,9171,968490,00.html#paid-wall&quot; rel=&quot;nofollow noreferrer&quot;&gt;Time magazine&lt;/a&gt; ran a piece about the Brain virus ran a piece about it.&lt;/p&gt;&#xA;" OwnerUserId="6802" LastEditorUserId="6802" LastEditDate="2018-09-28T18:38:22.260" LastActivityDate="2018-09-28T18:38:22.260" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7764" PostTypeId="1" AcceptedAnswerId="7767" CreationDate="2018-09-28T10:23:39.913" Score="12" ViewCount="859" Body="&lt;p&gt;The classic game Breakout was developed in 1975-76; famously, the first version of the circuit board was designed by Wozniak over the course of four nights, though Atari subsequently redesigned it for the production version. This ended up informing the design of the Apple II; Wozniak felt a home computer worth its salt should be able to run a good game of Breakout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is documented that Breakout was released on either April 13 or May 13, 1976 (sources are split between those two dates; presumably one of them is a transcription error?) but I can't find exactly when it was developed, which is surprising because it was significant in the sequence of events leading to the formation of Apple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When exactly was Breakout developed?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4335" LastEditDate="2018-10-05T20:13:24.877" LastActivityDate="2018-10-05T20:13:24.877" Title="When was Breakout developed by Steve Wozniak?" Tags="&lt;history&gt;&lt;atari&gt;&lt;gaming&gt;&lt;apple&gt;&lt;arcade&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7765" PostTypeId="2" ParentId="7757" CreationDate="2018-09-28T11:42:31.683" Score="8" Body="&lt;p&gt;Yes, boot sector viruses were a very real threat.  In fact, up until the mid-90s they were probably the most common type of viruses on home computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The earliest types only infected &lt;a href=&quot;https://en.wikipedia.org/wiki/Floppy_disk&quot; rel=&quot;noreferrer&quot;&gt;floppy disks&lt;/a&gt;.  When a computer was booted off an infected floppy, the virus would copy itself into RAM and wait for the unsuspecting user to insert another, uninfected disk, at which point (unless the new disk happened to have the write protect tab engaged) it would copy itself onto the new disk, possibly marking it as bootable even if it wasn't already.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was actually a pretty effective spreading method, at least for its time.  Since a single floppy disk didn't really hold that much data, people were swapping floppies all the time to switch between programs or to access files saved on different disks.  And since floppies were also quite prone to failure for any number of reasons, from exposure to heat or magnets to just general wear and tear, people quickly learned to always make backup copies of them.  Which, of course, provided an excellent opportunity for a virus to infect the copy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A major factor the contributed to the success of these viruses was, of course, software piracy.  At the time, pirating software commonly meant sharing copied floppy disks with your friends, and if one person happened to have an infected computer, they could easily infect their entire school or workplace.  And of course, even perfectly legal sharing of public-domain software (which was also common) could spread viruses just as well.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;One feature that aided the spread of these viruses was the fact that some popular home computers at the time (including, notably, the Commodore Amiga) provided a mechanism for background code to survive a warm reboot.  The feature was presumably meant to allow software patches to the OS kernel (which was stored in ROM, and thus not easy to update directly) to persist over a reboot, and its description was &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_2._guide/node0383.html&quot; rel=&quot;noreferrer&quot;&gt;buried rather deep&lt;/a&gt; in the official documentation, but it was soon discovered and enthusiastically adopted by virus writers.  In fact, &lt;a href=&quot;https://en.wikipedia.org/wiki/SCA_(computer_virus)&quot; rel=&quot;noreferrer&quot;&gt;the very first Amiga virus&lt;/a&gt; used this feature to &lt;a href=&quot;https://www.atarimagazines.com/compute/issue94/P48_1_THE_AMIGA_VIRUS.php&quot; rel=&quot;noreferrer&quot;&gt;infect the next disk an infected computer was booted from&lt;/a&gt; &lt;em&gt;after&lt;/em&gt; a reboot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the virus could not survive a cold boot.  But even after this infection vector became widely known, few users would bother to always perform a proper cold boot, which involved physically switching the power supply off (and, if you really wanted to be sure, waiting half a minute or so to make sure the RAM really loses its content), when it was so much easier to just press a few keys (&lt;kbd&gt;Ctrl&lt;/kbd&gt; and both &lt;kbd&gt;Amiga&lt;/kbd&gt; keys for the Amiga) to trigger a warm boot.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Later on, as hard disks became more popular, many boot sector viruses acquired the ability to also infect them.  For the viruses, the introduction of hard disks was both good and bad.  On one hand, hard disks saved users from having to switch between floppies so much, reducing the opportunities for transmission, and booting from the hard disk made it harder for viruses to infect a computer in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, many users would still occasionally boot from floppies e.g. to run specific software that required it, or they might simply forget that they had a floppy in the drive while rebooting (BIOSes at the time being commonly set up to boot from a floppy by default, if one was present).  And once a virus did manage to infect the hard disk itself, it would then be loaded on almost every reboot, and thus had ample opportunities to infect new floppies (which people did, of course, still use e.g. for sharing files).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;That factors that eventually (mostly) killed off boot sector viruses were threefold:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The increasing popularity of hard disks during the mid to late 90s meant that fewer and fewer people were using floppy disks for anything except file sharing and installing new software.&lt;/li&gt;&#xA;&lt;li&gt;The introduction of CD-ROMs around the same time made floppies obsolete as install media.  As CD-ROMs were (originally) read-only, unlike floppies, they could not be infected even if used on an infected system.&lt;/li&gt;&#xA;&lt;li&gt;Finally, the popularization of home and office Internet access in the late 90s, and of USB flash drives a bit later, made floppies also obsolete as file sharing media.  They also opened up a lot of &lt;em&gt;new and more efficient&lt;/em&gt; pathways for viruses to spread, so that virus writers increasingly found the relatively slow (and increasingly ineffective, for the reasons mentioned above) boot sector route no longer worth using.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, basically, boot sector viruses died out together with their main vector, the floppy disk.  To some extent they were replaced by USB AutoRun viruses, which spread in similar ways, but even those could not truly compete in transmission efficiency with e-mail viruses, document-infecting macro viruses and their hybrids.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the old viruses never really disappeared, and I'm sure that plenty of people still have old infected floppies just sitting and gathering dust somewhere.  But very few if any new boot sector viruses are being written any more, and modern antivirus software tends to easily detect any remaining &quot;fossil&quot; infections (if they haven't dropped those ancient signatures from their database, that is).  Not to mention that, since custom boot sectors aren't commonly used any more, it's pretty easy for anti-virus software to heuristically detect that something funny is going on if they see a boot sector that doesn't match the few usual patterns.&lt;/p&gt;&#xA;" OwnerUserId="366" LastActivityDate="2018-09-28T11:42:31.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7766" PostTypeId="2" ParentId="7391" CreationDate="2018-09-28T12:27:09.500" Score="3" Body="&lt;p&gt;Compiling some information from the internet shows that the Harvard Mark I and Mark II were purely electromechanical machines. The main reason for this was actually financial: it was cheaper to build these conceptual machines using relays &lt;a href=&quot;http://history-computer.com/ModernComputer/Relays/Aiken.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Howard Aiken&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer introducing the control store concept using a diode matrix is the IBM Whirlwind in 1947.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Harvard Mark III was completed in 1949, but I can't seem to find when work on it started.&lt;/p&gt;&#xA;" OwnerUserId="7388" LastActivityDate="2018-09-28T12:27:09.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7767" PostTypeId="2" ParentId="7764" CreationDate="2018-09-28T17:10:38.783" Score="11" Body="&lt;p&gt;The biographical evidence for both Jobs and Wozniak indicates that Wozniak's version of Breakout (which is NOT the version Atari would release publicly) was likely developed in the first half of 1974.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the biography of Steve Jobs, we know that in early 1974 Jobs was working at Atari, having been hired in 1973 at the age of 18. We also know that he left Atari in mid-1974 for extended travels in India. Later, in 1975, Jobs would return to work at Atari. This would seem to narrow the possibilities to one of the two timeframes that Jobs worked at Atari - either 1973 through early 1974, or in 1975 after the return from India.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In deciding which of those two periods of Atari employment seem most likely for the 4-day Breakout development, there are three important additional facts:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The fact that Steve Jobs absconded with the $5,000 bonus paid for Breakout, without telling Wozniak.&lt;/li&gt;&#xA;&lt;li&gt;The fact that the compressed 4-day development schedule was invented by Jobs to ensure the work was done ahead of travel plans he was already making.&lt;/li&gt;&#xA;&lt;li&gt;The fact that by 1975, Wozniak's and Jobs' biographies indicate they were immersed in Blue Boxes, Homebrew Computer Club, and Woz making progress on the Apple I design.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Number 1 and #2 make it highly suspicious that the Breakout development was intertwined with Jobs' trip to India for the second half of 1974. Together with #3, development of Breakout during Jobs' second stint at Atari seems unlikely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason that Breakout's release was delayed for about two years can be accounted for by the fact that the game was completely redesigned from the Wozniak version and that there was a lawsuit between Fun Games Inc. and Atari throughout 1975 of which Breakout was one part of the legal issues to be resolved.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-09-28T17:10:38.783" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7768" PostTypeId="2" ParentId="7740" CreationDate="2018-09-28T21:44:24.717" Score="2" Body="&lt;p&gt;The PC platform did not get off its DOS compatibility crutch: while the 80286 had segmented protected address modes, they were incompatible with the &quot;real address mode&quot; that the CPU started in and since Intel envisioned real mode only to be interesting for booting, switching to protected mode was not reversible (&quot;triple fault&quot; as a quick way to get back to real mode was more an accidental discovery than a planned feature).  Real mode bogged the system down to somewhat more than 1MB of memory (expanded by chipset via EMM memory into what the processor could have addressed perfectly fine in protected mode) and running multiple applications on top of a Window system was not much of a priority given the large constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the operating system basis, DOS, did not even do cooperative multitasking: pipes, obvious candidates for that, were implemented by writing the output of the first program to disk and then running the second program with input from the temporary file created by the first.  This was actually worse than what MP/M (the successor of CP/M, the &quot;inspiration&quot; for DOS) could do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While there were some multitasking systems built off the protected mode of the 80286 (like Xenix and Eumel/Elan), those were not mainstream.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Apple side, Motorola processors did not bother a lot with memory protection.  While a separate MMU was supported from the start, it was optional and consequently rarely available except for machines explicitly intended for running UNIX.  The 68010 was actually the first CPU that saved enough information at a page fault to restart instructions: previous versions were not suitable for running copy-on-write schemes and similar demand-paging features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the 68012 with a larger physical address space and the 68020 with 32-bit data busses throughout and quite extended addressing modes still did not come with a built-in MMU.  It's just with the 68030 that the MMU became an on-chip feature (and with the 68040, the mathematical coprocessor, at least to a good degree).  However, either were considered mostly overkill for home computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel was faster with the 80386 which had a 32-bit mode (the 68000 was basically a &quot;32 bit&quot; mode from the start) and a fully virtualizable processor with a paged MMU.  This was so completely overkill with regard to the active market Intel was pitching that I have no idea how the engineers managed to push this approach (rather than integrating a mathematical coprocessor, for example) through into silicon.  Uptake was rather tepid at first, but it was what started Linux off the ground after a few consumer-level UNIXes like &quot;Interactive Unix&quot; and the proprietary clone &quot;Coherent&quot; were coming about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 95 eventually got to use the 80386 modes as well, but it required significant engineering and defining a Windows-3 like OS interface over the 32-bit protected mode.  The consumer Windows versions were bogged down by history, and just with Windows XP finally the more capable Windows NT approach replaced the consumer line completely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple had in the mean time successfully relied on cooperative multitasking, relocatable code, relocatable memory allocation and was getting long in the tooth with MacOS.  In fact, they were in dire straits, finally breaking free by basing MacOSX on a BSD running atop the Mach microkernel.  They managed to pull off this rather audacious move (under Jobs) while Microsoft spent decades getting its operating system struggling through compatibility issues.  Later on, Mac also managed switching to different CPUs (first PowerPC, later Intel and ARM) while Windows never managed to crawl away from binary compatibility with DOS systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in a nutshell: preemptive multitasking needed additional hardware for a long time, multitasking at all was not really in the DOS/Windows scheme for a long time, impressive built-in memory protection in consumer-level devices came late with the 80386 and even later with the 68030, and MacOS was rather successful with its cooperative multitasking schemes and almost missed jumping off.&lt;/p&gt;&#xA;" OwnerDisplayName="user10725" LastActivityDate="2018-09-28T21:44:24.717" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7769" PostTypeId="2" ParentId="2738" CreationDate="2018-09-28T23:41:16.503" Score="3" Body="&lt;p&gt;You can't create partitions with arbitrary contents, but programs like Glen Bredon's &lt;a href=&quot;http://www.apple2.org.za/gswv/a2zine/System/DosMaster_docs.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOS MASTER&lt;/a&gt; allow you to have multiple DOS 3.3 volumes on a ProDOS volume, including 3.5&quot; disks and hard drives.  I believe something similar was possible for Apple Pascal volumes.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2018-09-28T23:41:16.503" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7770" PostTypeId="1" CreationDate="2018-09-29T05:08:30.100" Score="0" ViewCount="404" Body="&lt;p&gt;I tried to install GCC on Irix, but it did not work. I tried to install Code::Blocks on Irix, and it did not work. The GCC gave me parse errors in iostream.h and streambuf.h, and NetScape does not support the HTML format that the sourceforge website has. What is the best IDE that I can use for an IRIX computer that was originally designed for IRIX?&lt;/p&gt;&#xA;" OwnerUserId="10529" LastActivityDate="2018-09-29T08:42:15.770" Title="Best IRIX Integrated Development Environment for C++ Programming" Tags="&lt;sgi&gt;&lt;ide&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7771" PostTypeId="2" ParentId="7770" CreationDate="2018-09-29T07:58:19.633" Score="3" Body="&lt;p&gt;SGI was one of the leading vendors to put a modern touch around X/Motif. IRIX came with ViewKit and OpenInventor, plus some SGI-specific libraries to handle desktop integration, all part of SGI's &lt;em&gt;DeveloperMagic&lt;/em&gt; development environment. To enable developers to build a fully IRIX-Integrated application, SGI provided a whole landscape of C++ libraries and development tools to developers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=mhJidzII_Fs&quot; rel=&quot;nofollow noreferrer&quot;&gt;SGI RapidApp&lt;/a&gt;&lt;/em&gt; was one of the first fully integrated interface builders /code generators and (sort of) IDEs in the Unix/X/Motif world. It is not exactly what you would expect from a modern IDE, but is an interface designer including callback editors and a build system. It knows about all the SGI extensions to Motif, and generates ViewKit code. If you want the &lt;em&gt;real deal&lt;/em&gt;, RapidApp is the way to go. You might, however, encounter some problems in finding the complete toolset on free download sites. I didn't check the license status of DeveloperMagic (I seem to recall that at least &lt;em&gt;ViewKit&lt;/em&gt; was owned, maintained and sold by &lt;a href=&quot;https://motif.ics.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;ICS&lt;/a&gt; for some time after SGI went bust).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond that, as IRIX is a relatively modern system, you should be able to build most modern IDEs (maybe in some older versions) for Unix on an SGI machine. But that would neglect a lot of the SGI-specific fun you can have. If you want something halfway modern, you could do worse than to look &lt;a href=&quot;http://retrogeeks.org/sgi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; (Retrogeeks, I think there's an SGI Eclipse IDE)&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-09-29T08:42:15.770" LastActivityDate="2018-09-29T08:42:15.770" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7772" PostTypeId="1" AcceptedAnswerId="7774" CreationDate="2018-09-29T10:05:11.537" Score="3" ViewCount="371" Body="&lt;p&gt;S-100 was, as I understand, a very popular way to connect various computer equipment together in the past. Also, from what I understand, S-100 closely matches the same signals as the Intel 8080, as does the Z80 which the ZX Spectrum etc have. The only thing I can see is that the S-100 needs some unregulated power lines that have different voltages than the ZX Spectrum provides, but that's not insurmountable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to me, it seems extremely obvious to expand a ZX Spectrum or ZX81 with an S-100 backplane, to use disk controllers, modems, RAM expansion and all of that, but it seems it never was done, at least not commercially. Even though both are in a similar kind of budget bracket. So I suppose there are technical reasons for that?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="10260" LastEditDate="2018-09-29T19:09:39.433" LastActivityDate="2018-09-29T19:09:39.433" Title="Can S-100 cards attach to the ZX machines?" Tags="&lt;zx-spectrum&gt;&lt;architecture&gt;&lt;s-100&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7773" PostTypeId="2" ParentId="7772" CreationDate="2018-09-29T12:15:54.570" Score="2" Body="&lt;h2&gt;not quite an answer to the question:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In our post-90ies and beginning-of-2000ies ZX practice, we were connecting ISA modems to ZX Spectrums here, used BBSes and FIDO via them (there is software for that, of course). Bus convertor was nothing more complex than /RD /WR etc. signals generator, address decoder and signal buffers.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;then the formal yes useless answer:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Using enough creativity you can build virtually any bus to any bus converter. Probably S-100 bus is CPU-cycles-centric and therefore the converted would be not very complex.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-09-29T12:15:54.570" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7774" PostTypeId="2" ParentId="7772" CreationDate="2018-09-29T12:58:28.000" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Can S-100 cards attach to the ZX machines?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That calls for a clear &lt;strong&gt;Yes, But&lt;/strong&gt; :)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;S-100 closely matches the same signals as the Intel 8080, as does the Z80 which the ZX Spectrum etc., have.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Adding a basic S-100 bus bridge for the ZX80/81 or Spectrum would in fact be no big deal - only some money to spend for bus board, cage, PS and so on. It would become a bit more troublesome when addressing schemes were considered, as the Sinclairs not only already fill the address-space with RAM, ROM and I/O, but also do not always fully decode such. As a result, the available address space is rather limited, and not compatible with many S-100 boards.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;it seems extremely obvious to expand a ZX Spectrum or ZX81 with an S-100 backplane,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, while S-100 was still a big thing when the ZX80/81 came, and still around for the Spectrum, it also was mostly a US issue. While the Sinclair mania was more confined to Europe (*1), with Britain being a famous hot spot :)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;to use disk controllers, modems, RAM expansion and all of that,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that people who bought a ZX machine weren't exactly buying at the upper end of the market - and each of the above S-100 products was rather expensive, especially when compared to expansions made to fit the Sinclair computers directly (and at the lowest possible cost).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but it seems it never was done, at least not commercially.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Right, to my knowledge there are no products for that. Everything that was available was using the ZX Bus directly as their expansion bus. Just think about all these pluggable &lt;a href=&quot;http://www.geocities.ws/peterochocki/computers/1980comp/company/memotech.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Memotech modules for the ZX 81&lt;/a&gt;. They were not only less expensive than similar S100 boards, but also didn't need the investment in a bus board and a cage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Wrong World Region&lt;/li&gt;&#xA;&lt;li&gt;Wrong Market ((Cheap) Home vs. Professional)&lt;/li&gt;&#xA;&lt;li&gt;Too Expensive&lt;/li&gt;&#xA;&lt;li&gt;Non Trivial Configuration&lt;/li&gt;&#xA;&lt;li&gt;Incompatible Resources (Address Ranges)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Especialy the last two would it make hard even for a dedicated hobbyist.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Sure, there was the TS1000/1500 in the US, but they never reached sufficient popularity to make anything worthwhile.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="3481" LastEditDate="2018-09-29T19:09:04.740" LastActivityDate="2018-09-29T19:09:04.740" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7775" PostTypeId="1" AcceptedAnswerId="7779" CreationDate="2018-09-29T17:54:57.940" Score="7" ViewCount="218" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The bi-directional 8-bit data bus of the Intel 8080 was split into two unidirectional 8-bit data buses. Later these two 8-bit busses would be combined to support a 16-bit data width for more advanced processors. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/S-100_bus&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/S-100_bus&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why were the data lines of the early S-100 bus split into these unidirectional lines?  Certainly the control signals provided were sufficient to allow cards to properly buffer a bidirectional signal.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2018-09-30T19:39:54.610" Title="Why were the data lines of the original S-100 bus unidirectional?" Tags="&lt;s-100&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7776" PostTypeId="2" ParentId="7740" CreationDate="2018-09-29T18:21:02.487" Score="1" Body="&lt;p&gt;Besides all the technical reasons, personally I think that there was a lot of company policy involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the 1980s, microprocessors like the 68000 and operating systems like Unix or OS-9 were there to build powerful multi-user machines, with the potential to become competitors to the established mainframe world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What happened then?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM, earning lots of money from their mainframe branch, launched a personal computer based on a limited processor with a limited operating system that surely wouldn't support multi-user or pre-emptive multi-tasking. This machine would surely not compete with their mainframe world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And all the IT world jumped onto this platform, no longer devoting resources to the more advanced processors and OSes. This prolonged the lifetime of the mainframe dinosaur world by at least a decade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I think it was a very clever business decision of IBM to launch such a limited machine like the IBM PC. I never understood how they convinced the software industry to nearly exclusively support this platform and nearly forget about Unix for the next decade.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2018-09-29T18:21:02.487" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="7777" PostTypeId="1" CreationDate="2018-09-29T19:00:55.767" Score="-3" ViewCount="957" Body="&lt;p&gt;How do I compile my code that I have typed on my SGI Indy computer? I have already tried to install the GCC/G++ compilers, but when I run my application, I get the error that says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;gcc: installation problem, cannot exec 'as': No such file or directory&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Do you know where 'as' would possibly be at so I can run my source code?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it tried to run the code, I typed &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;gcc -o Game Game.cpp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am having to use a C++ file for my C code because stdio does not exist in my computer, and cstdio uses stdio. IOStream was my last most bright option, so I error message above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not really know what I am doing when I installed gcc from SGI's website. I just winged it...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. the capitalization is exactly how it is written on the screen.&lt;/p&gt;&#xA;" OwnerUserId="10529" LastActivityDate="2018-10-12T10:02:41.883" Title="gcc: installation problem, cannot exec 'as': No such file or directory" Tags="&lt;compilers&gt;&lt;c&gt;&lt;sgi&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7778" PostTypeId="1" AcceptedAnswerId="7781" CreationDate="2018-09-29T20:04:48.270" Score="5" ViewCount="1058" Body="&lt;p&gt;I was reading an Wikipedia article named &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Microsoft_Flight_Simulator&quot; rel=&quot;noreferrer&quot;&gt;History Of Microsoft Flight Simulator&lt;/a&gt;&quot; and I noticed something weird about &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Microsoft_Flight_Simulator#Flight_Simulator_1.0&quot; rel=&quot;noreferrer&quot;&gt;Microsoft Flight Simulator 1.0&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;November 1982&lt;br&gt;&#xA;  sometime during 1981-82&#xA;   &lt;strong&gt;Microsoft obtained the license to port the simulator to IBM compatibles PCs&lt;/strong&gt;. This version&#xA;  was released in November 1982 as Microsoft Flight Simulator, and&#xA;  featured an improved graphics engine, variable weather and time of&#xA;  day, and a new coordinate system (used by all subsequent versions up&#xA;  to version 5).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Advertisements claimed &quot;&lt;strong&gt;If flying your IBM PC got any more&#xA;  realistic&lt;/strong&gt;, you'd need a license&quot;, and promised &quot;a full-color,&#xA;  out-the-window flight display&quot; &lt;strong&gt;Early versions of Microsoft Flight&#xA;  Simulator were used as a test for PC compatibility. If a computer&#xA;  could run MSFS 1.0 and Lotus 1-2-3, it was 100% IBM PC-compatible, and&#xA;  if it could not, it was not.&lt;/strong&gt;   &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Compatibility difficulty included the unusual use of the x86 assembly DIV command, where a &quot;DIVIDE BY ZERO&quot; command would be issued&#xA;  every time a screen refresh was needed. This technique often required&#xA;  hardware changes to assure compatibility with MSFS 1.0 software.&lt;/strong&gt;   &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As I understand the MSFS 1.0 was an compatibity checking software but there is something lot more intereseting.  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&quot;DIVIDE BY ZERO&quot;   &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was the &quot;DVZ&quot; was used to make sure the CPU had the ability to detect divide by zero commands and send it to the crash handler ?   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the day, not all CPU's had to ability to detect divide by zero commands and send it to the crash handler ? (Did Crash Handling even exist on IBM PC's back in the day?)    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks For Answering&lt;/p&gt;&#xA;" OwnerUserId="8033" LastEditorUserId="79" LastEditDate="2018-09-29T20:20:00.307" LastActivityDate="2018-09-29T20:25:20.517" Title="Microsoft Flight Simulator 1.0 &quot;DIVIDE BY ZERO&quot; command" Tags="&lt;ibm-pc&gt;&lt;software&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7779" PostTypeId="2" ParentId="7775" CreationDate="2018-09-29T20:17:03.487" Score="4" Body="&lt;p&gt;It's rather simple concerning the hardware. To operate the bus without the CPU (while plugged in), the databus needs to be separable from the CPU. That's why buffers are needed. While the processors direction signal (&lt;code&gt;DBIN&lt;/code&gt;) could have been used for CPU initiated transfers, it would not be possible to use that when the CPU is halted in any state. Also a simple override wouldn't have worked well, as changing memory when the data bus was driven by the CPU would have resulted in an undefined CPU behaviour (possible damage). A more complicated logic would have been needed to not only define direction but also validity. Further it would have been complicated due the fact that the front panel was not only meant to access memory insted of the CPU, but also be able to directly present data to the processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having two separate drivers and control for each was the only way to solve all the requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, after doing so it would have been possible to join these busses again. But then again, the selected 100 pin connector offered way more lines than needed anyway and keeping them separate might have opened other use cases as well. So not joining them again was a sensible decision.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2018-09-30T19:39:54.610" LastActivityDate="2018-09-30T19:39:54.610" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7780" PostTypeId="2" ParentId="7761" CreationDate="2018-09-29T20:22:09.907" Score="6" Body="&lt;p&gt;I recall something from 1983-4 which might be what your friend is remembering. It's an &lt;a href=&quot;https://en.wikipedia.org/wiki/Interactive_ALGOL_68&quot; rel=&quot;noreferrer&quot;&gt;interactive Algol-68 system&lt;/a&gt;, which has run on many platforms, including MS-DOS PCs. It was an incremental compiler, rather than an interpreter, but it presented the same kind of user interface as BASIC in ROM, in that you typed in statements and they were run immediately. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've never used JOVIAL, but I did a term paper on Algol-like languages in the early 1980s, and JOVIAL is much like Algol-60, except with better input-output. An Algol-68 environment would probably have been quite useful to a JOVIAL programmer, and the difference might have been obscured. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2018-09-29T20:22:09.907" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7781" PostTypeId="2" ParentId="7778" CreationDate="2018-09-29T20:25:20.517" Score="9" Body="&lt;p&gt;Some 8086/8088 software ends up calling interrupt 0, the divide-by-zero trap, during normal execution, either through programmer error, or intentionally. (Even when this happens through programmer error, there is some level of intent involved since the programmer would have to install a handler to avoid having the program exit.) On the 8086 and 8088, this acted like a “standard” interrupt, with a return address pushed to the stack containing the address of the instruction following the divide instruction. Examples of software which do this include &lt;a href=&quot;https://www.vogons.org/viewtopic.php?t=49954&quot; rel=&quot;noreferrer&quot;&gt;The Seven Cities of Gold’s World Maker&lt;/a&gt; and of course Flight Simulator 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don’t think however that this would cause issues with 8086/8088-based computers attempting to be PC-compatible, because this is handled by the CPU. It does cause problems with later CPUs though because the divide-by-zero error became a fault, not a trap, with the address on the stack pointing at the faulting instruction, not the one following it. Thus on World Maker or Flight Simulator 1, the divide-by-zero instructions would result in the interrupt 0 handler being called, but when that returned, the divide-by-zero instruction would run again, causing an infinite loop.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-09-29T20:25:20.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7782" PostTypeId="1" AcceptedAnswerId="7786" CreationDate="2018-09-30T00:42:25.790" Score="4" ViewCount="2278" Body="&lt;p&gt;The Z80 indirect I/O instructions are a little quirky: the instructions with the standard mnemonic &lt;code&gt;in r, (c)&lt;/code&gt; (where &lt;code&gt;r&lt;/code&gt; is a stand-in for any of the normal registers) actually puts the register pair &lt;code&gt;bc&lt;/code&gt; on the address bus, not just &lt;code&gt;c&lt;/code&gt; as implied in the mnemonic, and likewise for &lt;code&gt;out (c), r&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This capability is rarely used, but there are some instances (e.g. the keyboards of the &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX81&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX81&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX&amp;nbsp;Spectrum&lt;/a&gt; use the upper byte to select a row to scan) where it was used to good effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this behaviour intentional, in order to allow the Z80 to expand beyond the 256 port limit of the 8080 -- in which case, is the reason it wasn't documented known? -- or is it a result of a bug in the processor implementation (presumably a microcode error that wasn't detected prior to release)?&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="535" LastEditDate="2018-09-30T11:57:49.957" LastActivityDate="2018-09-30T18:05:51.753" Title="Z80 16-bit I/O port addresses" Tags="&lt;z80&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7783" PostTypeId="2" ParentId="7782" CreationDate="2018-09-30T03:13:31.263" Score="7" Body="&lt;p&gt;Well, the Z-80 CPU documentation that I have, &lt;a href=&quot;http://www.mouser.com/ds/2/450/ps0178-19386.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;a Zilog Z-80 product spec, PS017801-0602&lt;/a&gt;, on page 20, clearly shows the behavior you noted in your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, the traditional I/O instructions, such as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IN  A,(n)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;show the address bus as n to A0 ~ A7 and A to A8 ~ A15&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clearly this &quot;feature&quot; is documented. I suspect it was just not used much.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastEditorUserId="707" LastEditDate="2018-09-30T18:05:51.753" LastActivityDate="2018-09-30T18:05:51.753" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7784" PostTypeId="1" CreationDate="2018-09-30T04:48:13.003" Score="13" ViewCount="2981" Body="&lt;p&gt;I have a Panasonic &quot;Penwriter&quot; model RK-P400C electronic typewriter/plotter from circa 1985 I'd like to be able to connect to a modern PC. And hopefully even use to draw graphics! Bought in almost new condition from eBay in its original packaging, it looked basically unused, with all the original pens. Which still work fine after probably 30 years sitting in a box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think this was ever a big seller in the United States where I'm located, the pen-plotter gimmick may have been originally designed as a way to draw higher-quality Japanese characters prior to injket/laser printers being commonly available to consumers. I can find limited information about it online except some mediocre reviews in a couple archived PC mags from the mid 1980s and a brief mention in the &quot;Rainbow&quot; Tandy CoCo newsletter from around the same time. I'm having difficulty even finding a PDF format scan of the owner's manual.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has an RS-232 interface on the side on a female DB-25 connector so it can be connected to a PC or computer of some kind, but I haven't had any success getting it to print characters from Linux (Xubuntu 17.10), via either the &quot;screen&quot; command and attempting to directly connect to it at 300 baud  over an FTDI chip-based USB to serial cable, or configuring it as a generic &quot;IBM compatible&quot; serial printer in the printer setup utility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've heard from a knowledgeable source that it likely uses a variant of the ALPS/Tandy plotter engine &lt;a href=&quot;http://tandy.wiki/CGP-115&quot; rel=&quot;noreferrer&quot;&gt;CGP-115&lt;/a&gt; also used in the Atari 1020 pen plotter from around the same time, but that's all the intel they had on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has a switch labeled &quot;KBI, KBII, EXT&quot; and when &quot;EXT&quot; is selected the display says &quot;OFF LINE.&quot; pressing the key below labeled &quot;ON LINE&quot; changes the display to &quot;ON LINE.&quot; I've made all the attempts at communication in that mode as intuitively that seems like what you'd want but there's no response. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an ad for the Penwriter from Spin magazine, December of 1985. Wow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JQi61.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JQi61.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update 10/9/18:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was able to get my hands on a manual, however the only one I could find for a reasonable price was for a similar model, the RK-P200C. After some more head scratching and looking at a few pictures of the different models I think I understand the situation. It seems the RK-P200C was the budget model, it came with a 9 pin serial interface port on the side:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4Juca.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4Juca.png&quot; alt=&quot;RK-P200C&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They made an expansion box, the RP-K100 that allowed you to connect a PC with a Centronics/parallel port and provided a serial output, and also I guess provided a memory buffer so you didn't lose your print job if the PC went down:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/H5lmR.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/H5lmR.jpg&quot; alt=&quot;RP-K100&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The model I have is the RK-P400C, the &quot;flagship&quot; model (or perhaps just a later variant.) This one has some of the same controls as the interface box &quot;On Line&quot;, etc. integrated into its keyboard and so I'm guessing it's like the RK-P200C but with the RP-K100 features built-in, perhaps.  And that the 25 pin connector may just be a regular PC printer/parallel port, not RS-232 on a 25 pin connector as I thought originally, which could certainly explain why it's not responding that way. It's not labeled on the typewriter in any way and has no &quot;sheet of paper&quot; glyph which may have become common later, so what it was was just a guess and I may have guessed wrong. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 2: I may have been right the first time, I somehow managed to bring up a serial parameters display by mashing keys in &quot;Online&quot; mode. :)&#xA;The default baud rate is 600 bps, data 8 bit no parity&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Wa8B4.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Wa8B4.jpg&quot; alt=&quot;RK-P400C&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10733" LastEditorUserId="10733" LastEditDate="2018-10-10T02:06:53.337" LastActivityDate="2021-03-18T14:26:11.580" Title="Connecting Panasonic &quot;Penwriter&quot; RK-P400C to modern PC using USB to serial cable" Tags="&lt;hardware&gt;&lt;serial&gt;&lt;old-hardware-adaptation&gt;&lt;usb&gt;&lt;printer&gt;" AnswerCount="1" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7785" PostTypeId="1" AcceptedAnswerId="7788" CreationDate="2018-09-30T06:47:37.743" Score="5" ViewCount="545" Body="&lt;p&gt;I read in some forums that some 286 boards support UMBs and thus can load drivers and TSRs into the upper 384 KiB of conventional memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What chipsets support this and do I need special drivers?&lt;/p&gt;&#xA;" OwnerUserId="8337" LastActivityDate="2018-09-30T17:54:31.727" Title="What 286 chipsets support UMBs?" Tags="&lt;ms-dos&gt;&lt;memory&gt;&lt;80286&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7786" PostTypeId="2" ParentId="7782" CreationDate="2018-09-30T07:23:47.577" Score="3" Body="&lt;p&gt;Based on the fact that when you build a computer that evaluates the upper 8 address lines on an I/O cycle (and can use 16-bit I/O addresses), you can then unfortunately no longer use the block input and block output commands (as B is used as a repeat count), I think we can safely assume it was not intended that port address evaluation would take A8-A15 into account when the chip was designed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case a designer would decide to actually evaluate the upper address lines on an I/O cycle, the fact that &lt;code&gt;OUT &amp;lt;PORT&amp;gt;,A&lt;/code&gt; puts the contents of the accumulator on A8-A15 is not very useful, as A would hold the byte to output. &lt;code&gt;OUT (C),A&lt;/code&gt; could be useful and actually &lt;em&gt;is&lt;/em&gt; used sometimes, like on the ZX-81 and on the Amstrad CPC range that use 16-bit I/O addresses (thus generally inhibiting any use of the former, as well as the block I/O commands). The sad fact that the CPC doesn't really make good use of its &quot;enhanced&quot; 16-bit I/O port address range is a different story, though)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.zilog.com/force_download.php?filepath=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTk2T0RBdlZVMHdNRGd3TG5Ca1pnPT0=&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zilog Z80 manual&lt;/a&gt; of 2016 (!) clearly states&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In all Register Indirect input output instructions, including block I/O transfers, the contents of the C Register are transferred to the lower half of the address bus (device address) while the contents of Register B are transferred to the upper half of the address bus.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The same manual also very clearly states in the description of the /IOREQ signal (emphasis mine):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;IORQ. Input/Output Request (output, active Low, tristate). IORQ indicates that the &lt;strong&gt;lower half&lt;/strong&gt; of the address bus holds a valid I/O address for an I/O read or write operation. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The same manual shows A0-15 in the description of the I/O cycle and labels this &quot;I/O address&quot;, which is, at least, somewhat misleading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An older (1979) &lt;a href=&quot;http://datasheets.chipdb.org/Mostek/3880.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MOSTEK Z80 manual&lt;/a&gt; I found, shows only A0-A7 in the I/O cycle diagrams as port address, but &lt;em&gt;does&lt;/em&gt; state the fact that register B is put to the upper half of the address bus on an I/O cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would neither suspect a design bug nor a documentation problem: The behavior is very clearly documented, apparently even in early manuals. It is also implied you simply shouldn't evaluate the upper 8 address lines on an I/O cycle. You still can, but if you do so, you will not be able to make sensible use of some of the I/O instructions. &lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-09-30T07:37:09.693" LastActivityDate="2018-09-30T07:37:09.693" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7787" PostTypeId="2" ParentId="7785" CreationDate="2018-09-30T07:46:54.703" Score="4" Body="&lt;p&gt;In order to support UMBs without needing to use processor-based address remapping (which is only available from the 80386 onwards and is used, for example, by EMM386.SYS), you need either a motherboard with integrated support for EMS memory, or an add-on board that provides it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were a number of chipsets available that had this feature, e.g. the &lt;a href=&quot;https://en.wikipedia.org/wiki/NEAT_chipset&quot; rel=&quot;nofollow noreferrer&quot;&gt;NEAT CS8221 chipset&lt;/a&gt;, as did the popular &lt;a href=&quot;http://minuszerodegrees.net/manuals/Suntac/Suntac%20HT-286.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Suntac HT-286&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A variety of EMS add-on boards are available, e.g. &lt;a href=&quot;http://www.smbaker.com/8-bit-isa-ems-board-flash-disk-board&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Drivers were required to make use of this feature, and I believe would have been specific to the board in use.  If you have an EMS driver that doesn't support UMBs, you can apparently use a piece of software called &quot;The Last Byte Memory Manager&quot; (already linked in Stephen Kitt's answer) that, if it doesn't have specific capability of working with your hardware, will use your existing EMS driver to provide a UMB (although note that doing so makes EMS unavailable for other applications).&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-09-30T17:54:31.727" LastActivityDate="2018-09-30T17:54:31.727" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7788" PostTypeId="2" ParentId="7785" CreationDate="2018-09-30T08:04:22.123" Score="8" Body="&lt;p&gt;There are quite a few 286 chipsets which can be programmed to provide shadow RAM in the upper memory area in such a way that it can be re-used as UMBs. The most comprehensive list I know of is the list given in the &lt;code&gt;CHIPSET.DOC&lt;/code&gt; file in &lt;a href=&quot;http://files.mpoli.fi/software/DOS/UTILS/MISC/TLB_V252.ZIP&quot; rel=&quot;noreferrer&quot;&gt;The Last Byte Memory Manager&lt;/a&gt;. This includes the Suntac ST62C202 and ST62C251, which can provide 128 KiB of shadow RAM (at most half of which can realistically be used as UMBs) alongside the 128 KiB used for EMS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make use of that memory you will need a device driver of some kind, either a chipset-specific driver, or a memory manager which supports your chipset. You can find some chipset-specific drivers &lt;a href=&quot;http://ibm-pc.org/drivers/memory/memory.htm&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, including EMS drivers for Suntac chipsets, and UMM drivers for the C &amp;amp; T NEAT chipsets which were perhaps the most popular UMM-capable 286 chipsets, or at least the best-known (but with a NEAT chipset you might as well use &lt;a href=&quot;http://ibm-pc.org/drivers/memory/qram202.zip&quot; rel=&quot;noreferrer&quot;&gt;QRAM&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-09-30T10:42:53.740" LastActivityDate="2018-09-30T10:42:53.740" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7789" PostTypeId="2" ParentId="7740" CreationDate="2018-09-30T08:33:33.977" Score="2" Body="&lt;p&gt;You underestimate the power of existing programs.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time everybody was using MS-DOS/PC-DOS on PC's which for all practical purposes was a program loader for running one program at a time, which then was in full control of the whole machine.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For multitasking to be generally interesting you would need to be able to run multiple DOS programs simultaneously, or be restricted to a few select programs.  It was not until the 386 was in widespread use this could be done well, and the users could see the utility of &lt;em&gt;staying&lt;/em&gt; in Windows to run multiple programs at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Until then Windows was typically just something you started to fire up an application, and quit again when you needed to do something else - this changed with Windows 95)&lt;/p&gt;&#xA;" OwnerUserId="447" LastEditorUserId="447" LastEditDate="2018-11-12T21:37:42.110" LastActivityDate="2018-11-12T21:37:42.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7790" PostTypeId="2" ParentId="7782" CreationDate="2018-09-30T12:08:18.753" Score="2" Body="&lt;p&gt;16bit I/O addressing capability of Z80 is clearly an improvement over 8080 8bit I/O address space.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This capability is rarely used&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It was actually extensively used even in 80ies era computers. For example, ZX Spectrum 48k used addresses A15..A8 to select keyboard row to scan when CPU read #xxFE port. ZX Spectrum 128k, in addition, used 16bit I/O ports with addresses like #7FFD, #BFFD and #FFFD.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-09-30T12:08:18.753" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7791" PostTypeId="1" AcceptedAnswerId="7792" CreationDate="2018-09-30T13:44:27.507" Score="10" ViewCount="866" Body="&lt;p&gt;TL;DR: With what values are the I/O port registers (locations &lt;code&gt;$00&lt;/code&gt; and &lt;code&gt;$01&lt;/code&gt;) on the 6510 initialised when it is powered on?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm writing a Commodore 64 emulation. The Commodore 64 uses a 6510 microprocessor which has an I/O port built in. The I/O port is accessed at locations &lt;code&gt;$00&lt;/code&gt; (data direction) and &lt;code&gt;$01&lt;/code&gt; (data). I found lots of documents explaining how the thing works, but nothing so far on how it is initialised.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The I/O port is the main means of controlling the RAM bank switching, so how it is initialised is critical. For example, if bit 1 of the data direction register is 1 (for output), the ROM between &lt;code&gt;$E000&lt;/code&gt; and &lt;code&gt;$FFFF&lt;/code&gt; is controlled by bit 1 of the port (1 = ROM, 0 = RAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So on the Commodore 64, unless the data direction register is set for output and the I/O port bit 1 is set to 1, there is RAM at the top of the address map and crucially &lt;em&gt;the reset and interrupt vectors are not accessible&lt;/em&gt;. However, the designers of the 6510 probably would not do this because they wouldn't have known what I/O devices are connected to the port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The I/O port doesn't drive the RAM bank switching directly, but via a PLA so I'm guessing that the DDR and the port are initialised to 0 when the processor switches on and the PLA keeps the ROM selected until the C64 has set the direction and port data correctly. (Maybe there's some sort of tri-state thing going on with a pull up resistor or something.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my assumption correct?&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2018-10-01T08:50:52.833" LastActivityDate="2018-10-01T14:00:05.410" Title="6510 I/O port initialisation" Tags="&lt;commodore-64&gt;&lt;mos-650x&gt;" AnswerCount="2" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7792" PostTypeId="2" ParentId="7791" CreationDate="2018-09-30T14:39:31.997" Score="15" Body="&lt;p&gt;Yes, your assumption is correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like in any microcontroller design I know of, I/O lines with programmable direction are set to input on reset. The 6510 is no exception, its data direction register at address 0 is set to 0 on reset, all 6 I/O lines become inputs. The circuitry outside the processor includes a pullup resistor on the I/O lines controlling banking, so that they are in a known stable state even if the data direction is set to input.&lt;/p&gt;&#xA;" OwnerUserId="348" LastActivityDate="2018-09-30T14:39:31.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7794" PostTypeId="1" AcceptedAnswerId="7798" CreationDate="2018-09-30T19:33:49.197" Score="36" ViewCount="9675" Body="&lt;p&gt;The Z80 has the surprising feature of a second set of registers. I suppose these were intended to be used for rapid task switching or interrupt handling, though I think if I were programming a Z80 retrocomputer, I would be more likely to use them for fast access to global variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such small snippets of Z80 code as I have seen, do not use them, but then, that's not surprising; they are something that would be expected to be only used in large programs. Back in the day, I was on 6502 machines, so I never had occasion to write anything nontrivial on the Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did anyone ever use that second register bank, either for its intended purpose, or just to get more registers within a single task?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-06-17T11:36:17.733" Title="Did anyone ever use the extra set of registers on the Z80?" Tags="&lt;z80&gt;" AnswerCount="16" CommentCount="10" FavoriteCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="7795" PostTypeId="2" ParentId="2450" CreationDate="2018-09-30T19:39:13.220" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The &quot;dream machine&quot; would be to swap the 65CE02 with the 65C02 in the //c+ and overclock the system to 10 MHz.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Might be possible - at least as long as the IIc+ cache runs along.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Even just running the 65CE02 in an Apple //e at the stock 1 MHz speed would seem to provide some acceleration, because the 65CE02 is an improved CPU in a number of ways.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Beside new instructions (which are less fantastic than they sound - not to mention the possible problems added by the Z register), the most important improvement might be the saved 'dead' cycles on single byte opcodes. Since these are also among the most used (e.g. INC/DEC X/Y), an over all speed up of 10-15% is not impossible. Sounds great, but then again, anything below 50% is usually not really visible in everyday life.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the 65SC02 will do the same trick :)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is such a CPU swap for any Apple //e, //c, or //c+ possible and worthwhile?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes and no. Except for &lt;code&gt;WAI&lt;/code&gt; and &lt;code&gt;STP&lt;/code&gt; the instruction set is exactly the same and unless there are timing specific routines, it should work as well. Thus a IIc+ with it's 800k drive will work fine. Classic DISK II drives may not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And as said before, the over all gain just from the CPU is not really worth it from an objective POV. Not withstanding of course the pleasure from doing so (I did the same back in the early 80s by plugging a 65SC02 into my II+. I always had that good feeling of having an enormous fast machine - without any proof :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Raising the clock may gain more - visibly more. Then again, as the higher clock speed on the IIc is only partial (due being a cached system atop a basic 1 MHz design), going past 4 MHz won't be as effective than that step already brought. At least every write operation will slow down (and synchronize) the faster CPU with the 1 MHz backbone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, yeah, go for it and don't forget to tell the results :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-02-09T20:16:27.443" LastActivityDate="2019-02-09T20:16:27.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7796" PostTypeId="1" CreationDate="2018-09-30T20:06:31.737" Score="6" ViewCount="437" Body="&lt;p&gt;The title pretty much says it all.  I'm looking for information about an operating system called I/OS by a company called Infosoft in the early 1980's.  I think it might have been a CP/M variant and it definitely ran on a Z80 based microcomputer with an S100 bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some background:  Sometime in 1990 or 1991 I purchased 5 or 6 Sony LDP-1000 LaserDisc players from a salvage shop.  These were part of interactive video labs used by the Army in (I assume) the 1980's and were interesting enough that I purchased one of the labs in it's entirety.  A big wooden box with the laser disc player, a printer, Amdek color monitor, 1200 baud modem, and a strange little Z80 based computer to control the laserdisc player (via RS-232) and run whatever software / operating system it was supposed to run...  I only ever tried using the computer 1 time, and my memories from the time are quite fuzzy.  Years later, when I parted out the box, I took the power supply, PC boards, and everything interesting (except the floppy drive) and stored everything in my pile of junk.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recently, I just found the lab was called a C3 JOIN system, and that it ran &quot;I/OS Operating System version 2.36&quot;.  But my google-fu didn't turn up anything, so it's either really obscure - or I'm just not using the right terms (obviously the name I/OS is similar enough to iOS to skew the search results).&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2019-08-20T18:01:28.227" Title="Can anyone help provide more information regarding an operating system called I/OS by Infosoft in the early 1980's?" Tags="&lt;z80&gt;&lt;operating-system&gt;&lt;s-100&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7797" PostTypeId="2" ParentId="7794" CreationDate="2018-09-30T20:45:03.407" Score="23" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The Z80 has the surprising feature of a second set of registers. I suppose these were intended to be used for rapid task switching or interrupt handling,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Indeed they were intended for fast interrupt reaction. In a simple, general way, this saved the time to push the main process's registers onto the stack and restore them again. They even went so far to spend one of the very few available single-byte opcodes to get the absolute minimum execution time - as the Z80 Technical Manual states on p.26:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;OP code &lt;code&gt;08H&lt;/code&gt; allows the programmer to switch between the two pairs of &#xA;  accumulator flag registers while &lt;code&gt;D9H&lt;/code&gt; allows the programmer to switch&#xA;  between  the duplicate set of six general purpose registers. These OP&#xA;  codes are only one  byte in length to absolutely minimize the time&#xA;  necessary to perform the  exchange so that the duplicate banks can be&#xA;  used to effect very fast interrupt  response times.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;EX&lt;/code&gt; and &lt;code&gt;EXX&lt;/code&gt; only take 4 T-cycles, while even just pushing a simple 16-bit register would take 11 cycles, plus another 15 to load it again. 8 T-cycles instead of 25 or more cycles is a considerably faster reaction, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's also why there are two &lt;code&gt;EX*&lt;/code&gt; instructions, as very simple routines may only (use and) need to preserve the flags and &lt;code&gt;A&lt;/code&gt;. This leaves the whole second set (except &lt;code&gt;AF&lt;/code&gt;) for other purposes, such as being used in normal software, or for even more speedup in I/O.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all, the second set can not only be used for some kind of fast 'stack' but also be prepared for a certain I/O operation. Think maybe of a serial interface receiving at high speed. Loading things like the memory pointer where received data is to be placed, the number of bytes to receive and so on, does take quite some time (16 T-Cycles for a 16 Bit pointer, 13 for a byte value) - and they need to be stored later on as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If these values are placed in the second register set before the high speed interrupt-driven routine gets active, no loads and stores are to be executed. Interrupt service time gets reduced to the absolute minimum, not only causing less interruption of the main process but also working up to higher speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 design was quite focused on a more flexible, configurable and faster interrupt handling than the 8080.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;though I think if I were programming a Z80 retro computer, I would be more likely to use them for fast access to global variables.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I can't see much gain here. Sure, 6 additional bytes or 3 pointers, but at the same time, you can't access the other ones. So there are not many cases where the secondary register set is helpful - besides interrupts and 'dead end' subroutines.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Such small snippets of Z80 code as I have seen, do not use them, but then, that's not surprising; they are something that would be expected to be only used in large programs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, it's exactly the region where they are useful - to speed up small functions.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Back in the day, I was on 6502 machines, so I never had occasion to write anything non-trivial on the Z80.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Did both, and while they need different approaches, the result is usually quite similar.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did anyone ever use that second register bank, either for its intended purpose, or just to get more registers within a single task?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It was quite common to use them either for interrupts (mostly in embedded systems) or 'dead end' routines.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2020-02-17T10:42:37.817" LastActivityDate="2020-02-17T10:42:37.817" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7798" PostTypeId="2" ParentId="7794" CreationDate="2018-09-30T21:26:11.090" Score="36" Body="&lt;p&gt;The key to efficient programming on Z80 is to use registers as much as possible. I can easily believe that designers of Z80 intended the use of the alternative set of registers as an efficient way of context switching. However, the context switching does not tend to happen often enough to use the alternative set of registers only for that; the gains are simply not worth it most of the time. Hence, the good practice of Z80 programming is typically about using as many registers as possible and still use stack for saving registers during the interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, let me give you several ideas on how one would benefit from having two sets of equivalent registers. A typical pixel scrolling for 16 byte wide bitmap can look e.g. as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rl (hl) : dec l           ; repeated 16 times&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What if one needs to scroll by 2 pixels at a time?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rl (hl) : ex af,af' : rl (hl) : ex af,af' : dec l            ; repeated 16 times&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;is the fastest way. OK, this is only using the second accumulator. Let us consider fast copying. The obvious&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld a,(hl) : ld (de),a : inc hl : inc de        ; 26 t-states&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which is actually very slow. Unrolled&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ldi             ; 16 t-states&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;is better and, in fact, is often acceptably fast. However, the fastest copiers are based on (semi-)unrolled code loading and saving the data via the stack, e.g. as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld sp,.. : pop af : pop bc : pop de : pop hl&#xA;exx : ex af,af' : pop af : pop bc : pop de : pop hl&#xA;ld sp,.. : push hl : push de : push bc : push af&#xA;exx : ex af,af' : push hl : push de : push bc : push af&#xA;; 10+10*4 + 4*2+10*4 + 10+11*4 + 4*2+11*4 = 204 t-states per 16 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;i.e. 12.75 t-states per byte. And note that this is not esoteric; variations of this idea were used in a huge number of commercial games on ZX Spectrum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much non-trivial code, e.g. fast polygon fillers or texture mappers are only possible with decent speed if one uses both sets of registers simultaneously.&lt;/p&gt;&#xA;" OwnerUserId="5039" LastActivityDate="2018-09-30T21:26:11.090" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7799" PostTypeId="2" ParentId="7794" CreationDate="2018-09-30T21:42:37.353" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did anyone ever use that second register bank, either for its intended purpose, or just to get more registers within a single task?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This being one occasion when a personal experience answer will do, &lt;code&gt;EXX&lt;/code&gt; is ideal for the very specific task of multiplying a 16-bit 2d vector by a scalar, which makes it helpful for 2d vector graphics, and the projection part of 3d vector graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;use &lt;code&gt;A&lt;/code&gt; for the multiplier — rotate right from it into carry;&lt;/li&gt;&#xA;&lt;li&gt;use &lt;code&gt;BC&lt;/code&gt; and &lt;code&gt;BC'&lt;/code&gt; for the working copy of the multiplicands; these will need shifting left on each iteration;&lt;/li&gt;&#xA;&lt;li&gt;use &lt;code&gt;HL&lt;/code&gt; and &lt;code&gt;HL'&lt;/code&gt; to accumulate the result; perform &lt;code&gt;ADD HL, BC&lt;/code&gt; if carry is set after the &lt;code&gt;RRA&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So the specific convenient observations are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you're juggling four 16-bit quantities, but they interact only in pairs;&lt;/li&gt;&#xA;&lt;li&gt;and using &lt;code&gt;EXX&lt;/code&gt; lets you use the 16-bit arithmetic that's right there on the main instruction page.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-09-30T21:42:37.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7800" PostTypeId="2" ParentId="7794" CreationDate="2018-09-30T22:25:03.873" Score="12" Body="&lt;p&gt;A specific example is the chess program Sargon (written in 1978 or a bit earlier), which used them in a couple of leaf subroutines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Search the assembler listing at &lt;a href=&quot;http://smecers.appspot.com/govs/Oldies/Sargon.htm&quot; rel=&quot;noreferrer&quot;&gt;http://smecers.appspot.com/govs/Oldies/Sargon.htm&lt;/a&gt; for the EXX instruction. (It's in routines XCHNG and NEXTAD)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code is well documented, if anyone wants to explore the cost of alternative coding techniques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apart from Sargon, I'm pretty sure they were used in the code examples in some &quot;how to write interrupt routines&quot; books of the period, as a &quot;quick&quot; way to save all the registers, but I don't have any references or that.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2018-09-30T22:25:03.873" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7801" PostTypeId="2" ParentId="7794" CreationDate="2018-09-30T22:30:52.747" Score="14" Body="&lt;p&gt;The question asks if the alternate register set was &quot;ever&quot; used ... this answer is about a &lt;em&gt;modern&lt;/em&gt; use of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://github.com/z88dk/z88dk&quot; rel=&quot;noreferrer&quot;&gt;z88dk&lt;/a&gt; C compiler, &lt;code&gt;sccz80&lt;/code&gt;[1] uses a calling convention where the registers B', C', D', E', H' and L' are used to hold the first 48-bit floating point argument to a function, or a floating point return value.  &lt;a href=&quot;https://www.z88dk.org/wiki/doku.php?id=temp:front#benchmarks&quot; rel=&quot;noreferrer&quot;&gt;Benchmark results&lt;/a&gt; suggest that this is a very good strategy, as the results are similar in performance to the 32-bit floating point used by most other Z80 C compilers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] - actually, one of the two C compilers that are part of the z88dk toolchain, the other being a patched version of sdcc that uses 32-bit floats with a different calling convention&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-09-30T22:30:52.747" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7802" PostTypeId="2" ParentId="7796" CreationDate="2018-09-30T22:31:30.630" Score="4" Body="&lt;p&gt;The first page of the article &lt;em&gt;&lt;a href=&quot;http://www.classiccmp.org/altair32/pdf/Getting%20Compatible%20with%20CPM-Mini%20Micro-0881.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Getting Compatible with CP/M&lt;/a&gt;&lt;/em&gt;   implies it was an alternative name for Infosoft's TSA/OS, and was indeed a CP/M variant.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="7946" LastEditDate="2019-08-20T18:01:28.227" LastActivityDate="2019-08-20T18:01:28.227" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7803" PostTypeId="1" AcceptedAnswerId="7804" CreationDate="2018-10-01T00:07:32.413" Score="6" ViewCount="842" Body="&lt;p&gt;I know from &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/6500/8579&quot;&gt;this answer&lt;/a&gt; that, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Modern x86 CPUs are binary compatible with 8086. You can literally run 8086 binaries on a modern PC, &lt;strong&gt;in real mode.&lt;/strong&gt; (The species analogy is a stretch here, but works if you look at forward compat instead of backwards compat: old x86 chips can't run AVX / AVX2 / FMA / AVX512 code, so you could look at each ISA extension as a speciation event.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But I also know that &lt;em&gt;some&lt;/em&gt; instructions like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary-coded_decimal&quot; rel=&quot;nofollow noreferrer&quot;&gt;Binary-Coded Decimal (BCD)&lt;/a&gt; instructions by way of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_BCD_opcode&quot; rel=&quot;nofollow noreferrer&quot;&gt;BCD Opcodes&lt;/a&gt; are &quot;not supported in 64-bit mode&quot; (long mode).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What other instructions are not supported in 64-bit Long Mode?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="10260" LastEditDate="2019-02-09T18:38:19.063" LastActivityDate="2019-02-09T18:38:19.063" Title="What instructions for the 8086 and subsequent x86 CPUs are not available in Long Mode?" Tags="&lt;assembly&gt;&lt;intel&gt;&lt;8086&gt;&lt;binary-coded-decimal&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7804" PostTypeId="2" ParentId="7803" CreationDate="2018-10-01T00:59:22.613" Score="8" Body="&lt;p&gt;Other than changed immediate operand lengths (to support 64-bit addresses) and register encodings (to support the new registers), which obviously make practically all code incompatible at the binary level, there are a few other major changes in long mode:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Instruction prefix handling is changed; older processors allowed arbitrary sequences of prefixes (originally) or limited instruction length to 15 bytes (from the 80386 onwards, IIRC) but otherwise allowed any combination of prefixes.  Long mode only allows one prefix of each of 4 groups, and results are undefined if this restriction isn't followed.&lt;/li&gt;&#xA;&lt;li&gt;Handling of segmentation is completely replaced.  Attempts to load segment registers are effectively ignored, as are &lt;code&gt;CS&lt;/code&gt;, &lt;code&gt;DS&lt;/code&gt; and &lt;code&gt;ES&lt;/code&gt; segment override prefixes.  The meaning of &lt;code&gt;FS&lt;/code&gt; and &lt;code&gt;GS&lt;/code&gt; prefixes is also somewhat different (they refer to fixed base addresses defined in new registers).&lt;/li&gt;&#xA;&lt;li&gt;The single-byte encodings of the &lt;code&gt;DEC&lt;/code&gt; and &lt;code&gt;INC&lt;/code&gt; instructions are no longer valid (they are reused for prefixes that activate the new addressing modes)&lt;/li&gt;&#xA;&lt;li&gt;As noted in the question, the &lt;code&gt;AA*&lt;/code&gt; (ASCII Adjust) and &lt;code&gt;DA*&lt;/code&gt; (Decimal Adjust) instructions are not permitted and raise an exception if used.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;BOUND&lt;/code&gt; (array bounds check), &lt;code&gt;CALL FAR&lt;/code&gt; and &lt;code&gt;JMP FAR&lt;/code&gt;, &lt;code&gt;INTO&lt;/code&gt; (Interrupt Overflow), &lt;code&gt;LAHF&lt;/code&gt; (Load AH with Flags), &lt;code&gt;SAHF&lt;/code&gt; (Store AH into Flags), &lt;code&gt;LDS&lt;/code&gt;/&lt;code&gt;LES&lt;/code&gt; (load far pointer using DS/ES segment registers), &lt;code&gt;PUSH&lt;/code&gt;/&lt;code&gt;POP&lt;/code&gt; instructions with &lt;code&gt;CS&lt;/code&gt;, &lt;code&gt;DS&lt;/code&gt;, &lt;code&gt;ES&lt;/code&gt; or &lt;code&gt;SS&lt;/code&gt; as target, &lt;code&gt;PUSHA&lt;/code&gt;/&lt;code&gt;POPA&lt;/code&gt; (push/pop all 16-bit registers), and &lt;code&gt;PUSHAD&lt;/code&gt;/&lt;code&gt;POPAD&lt;/code&gt; (push/pop all 32-bit registers) are all likewise unavailable and raise exceptions if used.&lt;/li&gt;&#xA;&lt;li&gt;The 16-bit &lt;code&gt;JCXZ&lt;/code&gt; instruction isn't available (its opcode is used for &lt;code&gt;JRCXZ&lt;/code&gt; instead).&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ARPL&lt;/code&gt; (Adjust Requested Privilege Level) isn't available; its opcode is reused for &lt;code&gt;MOVSXD&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Instructions that load descriptors and tables have new extended data formats&lt;/li&gt;&#xA;&lt;li&gt;The behaviour of &lt;code&gt;SYSCALL&lt;/code&gt; and &lt;code&gt;SYSRET&lt;/code&gt; is substantially different.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-10-01T01:04:24.280" LastActivityDate="2018-10-01T01:04:24.280" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7805" PostTypeId="2" ParentId="7794" CreationDate="2018-10-01T02:13:08.567" Score="16" Body="&lt;p&gt;For my &lt;a href=&quot;http://www.bhabbott.net.nz/micro_expander.html&quot; rel=&quot;noreferrer&quot;&gt;Aquarius Micro-Expander&lt;/a&gt; I used the alternate register set to speed up text display. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Mattel_Aquarius&quot; rel=&quot;noreferrer&quot;&gt;Mattel Aquarius&lt;/a&gt; has a character based screen that is physically 40 characters by 25 lines, but to stay out of the overscan area it only uses 38 characters by 24 lines. With such odd dimensions calculating the cursor address takes a lot of code, and combined with other overhead makes printing to the screen quite slow. I wanted to reduce the overhead as much as possible, and also have more flexible line width and positioning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's my core code for putting a character on screen. HL' holds the current screen address and D' holds the cursor position on the line. Higher level routines test and manipulate these registers to wrap at line ends and scroll text in windows.   &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;WinPrtChr:&#xA;       EXX&#xA;       LD    (HL),A      ; poke char into screen memory&#xA;       INC   HL          ; HL' = next screen address&#xA;       INC   D           ; D' = next screen x&#xA;       EXX&#xA;       RET&#xA;&#xA;BackSpace:&#xA;       EXX&#xA;       LD    (HL),&quot; &quot;    ; poke SPACE into screen memory&#xA;       DEC   HL          ; HL' = previous screen address&#xA;       DEC   D           ; D' = previous screen x&#xA;       EXX&#xA;       RET &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using alternate registers was much faster than storing the variables in RAM, and kept the normal registers free for other uses. The result was fewer memory accesses and faster operation in general. My code prints text into windows of arbitrary size about 20 times faster than the system routines.          &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately the Aquarius system ROM also uses alternate registers when scanning the keyboard, so I had to wrap the keyboard routines with a pair of EXX's (to get back to the normal register set) and save the affected registers on the stack when getting keyboard input. However I didn't have to worry about interrupts (where the  alternate register set is often used for fast context saving) because the Aquarius doesn't have any!   &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2018-10-01T02:13:08.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7806" PostTypeId="1" AcceptedAnswerId="7816" CreationDate="2018-10-01T03:12:40.657" Score="1" ViewCount="406" Body="&lt;p&gt;I have this beast, the Canon X-07:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jUUJ3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jUUJ3.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The product by itself was of high quality, Z80 and RS-232 compatible and with a lot of peripherals available such as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;thermal printer&lt;/li&gt;&#xA;&lt;li&gt;4 colors tracer&lt;/li&gt;&#xA;&lt;li&gt;infrared interface&lt;/li&gt;&#xA;&lt;li&gt;video interface for TV output&lt;/li&gt;&#xA;&lt;li&gt;tape interface&lt;/li&gt;&#xA;&lt;li&gt;memory cards&lt;/li&gt;&#xA;&lt;li&gt;application cards&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There is quite some literature about it on the Internet and even emulators, however, little about how widespread its use was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How popular was the computer back then when it was released in 1984 ?&lt;/p&gt;&#xA;" OwnerUserId="3282" LastActivityDate="2018-10-01T16:37:55.490" Title="How popular was the Canon X-07?" Tags="&lt;canon&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7807" PostTypeId="1" AcceptedAnswerId="7808" CreationDate="2018-10-01T03:39:09.560" Score="17" ViewCount="3202" Body="&lt;p&gt;In the last century, a brand of video cards that rhymed with quality, &lt;strong&gt;Matrox&lt;/strong&gt;, was very popular and the choice for professional applications and to some extent for 3D gaming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The benefits of upgrading your computer with a Matrox Millenium were instantly visible, a very fast desktop on Windows, better-balanced colors, custom drivers for professional applications such as AutoCAD and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the mid-90s, 3D cards were all the rage and they managed to release an affordable, yet effective card for gaming, the Matrox Mystique.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometime after, they released (what I think) their best range of cards: the Matrox G200, followed by the Matrox G400. These back then were a popular choice as out of the box they provided dual screen, TV output, and accelerated video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back then, NVidia and ATI did exist but weren't as ubiquitous as they are now. Today, Matrox is mostly to be found in niche markets such as 'many displays' cards, the typical product you'll find used by public places with many displays such as airports&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What happened back then that such a popular brand vanished over time?&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="780" LastEditDate="2018-10-01T10:10:37.503" LastActivityDate="2018-10-01T18:22:00.357" Title="History of the demise of Matrox from the world of 3D graphics cards" Tags="&lt;history&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7808" PostTypeId="2" ParentId="7807" CreationDate="2018-10-01T04:57:19.377" Score="12" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/3dfx_Interactive#Voodoo_Graphics_PCI&quot; rel=&quot;nofollow noreferrer&quot;&gt;3DFX Voodoo graphics chip (1996)&lt;/a&gt; was superior to anything else at the time for 3D. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Matrox_Mystique&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matrox Mystique (1996)&lt;/a&gt; was a fine card, good 3D and 2D but not as good as the Voodoo for 3D (the Voodoo lacked 2D).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, the &lt;a href=&quot;https://en.wikipedia.org/wiki/RIVA_128&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nvidia RIVA 128 (1997)&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/ATI_Rage#3D_Rage_Pro&quot; rel=&quot;nofollow noreferrer&quot;&gt;ATI 3D Rage Pro (1997)&lt;/a&gt; competed with the Voodoo line, and Matrox was left behind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Matrox_G400&quot; rel=&quot;nofollow noreferrer&quot;&gt;Millennium G400 (1999)&lt;/a&gt; was another fine card, ahead of its time with &lt;a href=&quot;https://en.wikipedia.org/wiki/Bump_mapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;Environment Mapped Bump Mapping (EMBM)&lt;/a&gt; but at the time this feature was not well supported by the industry. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Radeon_R100&quot; rel=&quot;nofollow noreferrer&quot;&gt;ATI Radeon 7200 (2000)&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/GeForce_2_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nvidia GeForce 2 GTS (2000)&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Voodoo_5&quot; rel=&quot;nofollow noreferrer&quot;&gt;3dfx Voodoo 5 (2000)&lt;/a&gt; arrived later with the same feature but better performance and industry support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ultimate demise of Matrox in the consumer market came with the short-lived &lt;a href=&quot;https://en.wikipedia.org/wiki/Matrox_Parhelia&quot; rel=&quot;nofollow noreferrer&quot;&gt;Parhelia (2002)&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As had happened with previous Matrox products, the Parhelia was&#xA;  released just before competing companies released cards that&#xA;  completely outperformed it. In this case it was the &lt;a href=&quot;https://en.wikipedia.org/wiki/ATi_Radeon_R300_Series&quot; rel=&quot;nofollow noreferrer&quot;&gt;ATI Radeon 9700&lt;/a&gt;,&#xA;  released only a few months later. The Parhelia remained a niche&#xA;  product, and was Matrox's last major effort to sell into the consumer&#xA;  market.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-10-01T18:22:00.357" LastActivityDate="2018-10-01T18:22:00.357" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7809" PostTypeId="2" ParentId="7791" CreationDate="2018-10-01T08:17:32.237" Score="3" Body="&lt;p&gt;yes ddr register is set to input on reset and because of the pullup lines for charen loram and hiram its a logical 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;take a look at the Pitfall 2 cartdrige. it works with vice 3.1 but not in 3.2.&#xA;The init value of the data port register was changed from 0x3f to zero between both versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;whats happening in 3.2: the game changes ddr to output but not the data register at address 0x1. The cart sets a zero for game and exrom line. means all 5 pla pins become zero. that results in a ram only memory configuration. the game maps out by itself and can not write the data port anymore which results in an empty screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;it seems the data register at address 0x1 is not inited with zeros OR a input direction overwrites the data register with the external value for the appropriate pins. in case of charen, loram and hiram with a one because of the pullup resistors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;maybe a ddr change from input to ouput doesn't update the io lines with the current contents of the the data port register. by disabling this in vice the game works with zero initialized port register, because it writes the port register after it seted ddr to output.&lt;/p&gt;&#xA;" OwnerUserId="10741" LastEditorUserId="10741" LastEditDate="2018-10-01T14:00:05.410" LastActivityDate="2018-10-01T14:00:05.410" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7810" PostTypeId="1" AcceptedAnswerId="7811" CreationDate="2018-10-01T09:22:00.417" Score="48" ViewCount="19823" Body="&lt;p&gt;Considering all those early home computers, the ZX Spectrum, the Galaksija, the VIC-20, the Apple I/II/III, and all of those, they all have some 8-bit CPU which does integer arithmetic and no floating point. So these machines have some kind of floating point implementation in software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, why not use fractions? A fraction is just two numbers which, when divided by eachother, yields the number you are interested in. So picture a struct which holds one integer of whatever size, and one byte for each of divisor and dividend. And probably we all remember how to add or subtract fractions from school.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't really calculated it, but it seems intuitive that the advantages over floating point would be: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;faster addition/subtraction&lt;/li&gt;&#xA;&lt;li&gt;easier to print&lt;/li&gt;&#xA;&lt;li&gt;less code&lt;/li&gt;&#xA;&lt;li&gt;easy to smoosh those values together into an array subscript (for sine tables etc)&lt;/li&gt;&#xA;&lt;li&gt;easier for laypeople to grok&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;x - x == 0&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And the disadvantages:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;probably the range is not as large, but that's easy enough to overcome&lt;/li&gt;&#xA;&lt;li&gt;not as precise with very small numbers&lt;/li&gt;&#xA;&lt;li&gt;marketability?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It seems like such an obvious tradeoff (precision/speed) that I'm surprised I can't find any homecomputers or BASICs that did arithmetic in this way. What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-10-01T13:12:12.860" LastActivityDate="2018-10-04T19:11:03.640" Title="Why not use fractions instead of floating point?" Tags="&lt;software&gt;&lt;floating-point&gt;" AnswerCount="11" CommentCount="31" FavoriteCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="7811" PostTypeId="2" ParentId="7810" CreationDate="2018-10-01T09:44:32.233" Score="101" Body="&lt;p&gt;When adding or subtracting fractions, you need to find the least common multiple of the two denominators. That's an expensive operation, much more expensive than adding or subtracting floating points, which just requires shifts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multiplication is also more expensive, because now you need to multiply two numbers instead of just one. Similarly for division.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the numerator and denominator of a fraction will eventually grow large, which means you won't be able to store them in the limited memory of an 8-bit system. Floating point deals with this by rounding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: It's more expensive, there's no way to limit the memory used for truly general applications, and scientific applications are geared towards using floating point, anyway.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-10-01T09:44:32.233" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="7812" PostTypeId="2" ParentId="7810" CreationDate="2018-10-01T11:00:02.960" Score="27" Body="&lt;p&gt;There is a mathematical problem with your idea. If you choose to store fractions with a fixed-length numerator and denominator, that's works fine until you try to do &lt;em&gt;arithmetic&lt;/em&gt; with them. At that point, the numerator and denominator of the result may become much bigger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a simple example: you could easily store 1/1000 and 1/1001 exactly, using 16-bit integers for the numerator and denominator. But 1/1000 - 1/1001 = 1/1001000, and suddenly the denominator is too big to store in 16 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you decide to &lt;em&gt;approximate&lt;/em&gt; the result somehow to keep the numerator and denominator within a fixed range, you haven't really gained anything over conventional floating point. Floating point only deals with fractions whose denominators are powers of 2, so the problem doesn't arise - but that means you can't store most fractional values exactly, not even &quot;simple&quot; ones like 1/3 or 1/5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, some modern software applications &lt;em&gt;do&lt;/em&gt; store fractions exactly, and operator on them exactly - but they store the numerators and denominators using a &lt;em&gt;variable length&lt;/em&gt; representation, which can store &lt;em&gt;any&lt;/em&gt; integer exactly - whether it has 10 digits, or 10 million digits, doesn't matter (except it takes longer to do calculations on 10-million-digit numbers, of course).&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2018-10-01T11:00:02.960" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7814" PostTypeId="2" ParentId="7810" CreationDate="2018-10-01T11:32:59.347" Score="6" Body="&lt;p&gt;dirkt and alephzero provided definitive general responses.  Mine is focused on one element of your question, the structure used to store a fraction.  You proposed something on the order of:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct mixedFrac {&#xA;   int   whole;&#xA;   uchar dividend;&#xA;   uchar divisor;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that this pre-limits general accuracy; there is only so much precision an 8-bit divisor can depended on to provide.  On the one hand, it could be perfect; &lt;strong&gt;78 2/3&lt;/strong&gt; could be represented with no loss, unlike with floating point.  Or it could provide great (but not perfect) accuracy, such as pi at &lt;strong&gt;3 16/113&lt;/strong&gt; (accurate to 6 decimal places).  On the other hand, an infinite quantity of numbers would be far from accurate.  Imagine trying to represent &lt;strong&gt;1 1/1024&lt;/strong&gt;.  Within the structure, the closest you could get would be &lt;strong&gt;1 0/255&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The proposed structure could be easily simplified and improved with the use of a different structure:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct simpFrac {&#xA;   long  dividend;&#xA;   ulong divisor;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Since the divisor is now represented with much more precision, a much wider span of general accuracy is allowed.  And now that approximation to pi can be shown in traditional fashion, &lt;strong&gt;355/113&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as the others have pointed out, as you use these perfect to very accurate fractions, you lose precision quickly, plus the overhead of maintaining the &quot;best&quot; divisor for the result is quite costly, especially if a primary goal of using fractions was to keep things more efficient than floating point.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2018-10-01T11:32:59.347" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7815" PostTypeId="2" ParentId="7810" CreationDate="2018-10-01T11:41:46.567" Score="52" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;My question is, why not use fractions?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Too much code needed&lt;/li&gt;&#xA;&lt;li&gt;Dynamic storage needed&lt;/li&gt;&#xA;&lt;li&gt;Long representation even for simple numbers&lt;/li&gt;&#xA;&lt;li&gt;Complex and slow execution&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And most prominent:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Because floating point &lt;strong&gt;is&lt;/strong&gt; already based on fractions:&lt;BR /&gt;&lt;em&gt;Binary ones, the kind a binary computer handles best.&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Long Form:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mantissa of a floating point number is a sequence of fractions to the base of two:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1/2 + 1/4 + 1/8 + 1/16 + 1/32 + 1/64 + 1/128 ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Each holding a zero or one denoting if that fraction is present. So displaying 3/8th gives the sequence 0110000...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A fraction is just two numbers which, when divided by each other, yields the number you are interested in. So picture a struct which holds one integer of &lt;em&gt;&lt;strong&gt;whatever size&lt;/strong&gt;&lt;/em&gt;, and one byte for each of divisor and dividend.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That 'whatever size' is eventually the most important argument against. An easy to implement system does need a representation as short as possible to save on memory usage - that's a premium, especially early machines - and it should use fixed size units, so memory management can be as simple as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One byte each may not really be good to represent the needed fractions, resulting in a rather complicated puzzle of normalisation, which to be handled needs a rather large amount of divisions. A really costly operation (Hard or Softwarewise). In addition to the storage problem for the numbers, this would require even more address space to hold the non trivial handling routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Binary (*1) floating point is based on your idea of fractions, but takes it to the logical end. With binary FP there is no need for many complex operations.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Turning decimal FP into binary is just a series of shift operations.&lt;/li&gt;&#xA;&lt;li&gt;Returning it to decimal (*2) is again just shifting plus additions&lt;/li&gt;&#xA;&lt;li&gt;Adding - or subtracting - two numbers does only need a binary integer addition after shifting the lesser one to the right.&lt;/li&gt;&#xA;&lt;li&gt;Multiplying - or dividing - means multiplication - or division - of a these two fixed point integers and addition of the exponent.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All complex issues get reduced to fixed length integer operations. Not only the most simple form, but also exactly what binary CPUs can do best. And while that length can be tailored to the job (*3), already rather thrifty ones (size wise) with just 4 bytes storage need will cover most of everyday needs. And extending that to 5,6 or 8 gives a precision rarely needed (*4).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And probably we all remember how to add or subtract fractions from school.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, we don't really. To me that was something only mentioned for short time during third grade. Keep in mind most of the world already went (decimal) floating point more than a century ago.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Or similar systems, like IBM's base-16 floating point used in the /360 series. Here the basic storage unit isn't a bit but a nibble, acknowledging that the memory is byte-orientated and parts of the machine nibble-orientated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The least often done operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Already 16 bit floating point can be useful for everyday issues. I even remember an application with a 8 bit float format used to scale priorities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Yes, there are be use cases where either more precision or a different system is needed for accurate/needed results, but their number is small and special - or already covered by integers:)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-01T21:08:39.517" LastActivityDate="2018-10-01T21:08:39.517" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7816" PostTypeId="2" ParentId="7806" CreationDate="2018-10-01T12:11:50.177" Score="4" Body="&lt;p&gt;As usual it depends on what popular should mean, which usage area is ment to be used and what region of the world we are talking about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The X-07 is a typical member of the A4/letter sized portable/laptop computers. THe most prominent family here are the Kyotronic 85 family (Kyotronic 85, NEC 8201/8300, Olivetti M10, Tandy M100/M102) as well as the Epson HX-20 and Casio's FP200. Albeit a late comer to that market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AFAIK it got most use in Japan and some parts of Asia, much less in Europe, and comparable little in the US. Being quite late (1985, *1) the market was already quite saturated with other models - which in addition often offered larger screens and a greater software selection to the user. In addition, 1984/5 already brought the next generation, like the Tandy 200, and the market was moving toward units more like today's laptops (80 character per line displays, x86 CPU, etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Canon tried to position it as low end device for people who would not like to afford the 'bigger' ones and got some success at the low end/hobbyist market. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Judgeing form how often french language sites come up &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7806/how-popular-was-the-canon-x-07/7816#comment22329_7816&quot;&gt;when searching&lt;/a&gt; for the X-07, it might have had a good sale in France or French speaking countries in general.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - 1985 in Europe (1984 in Japan). That's three years after the HX-20 (1982) and two years after the various Kyotronics (1983).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-01T16:37:55.490" LastActivityDate="2018-10-01T16:37:55.490" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7817" PostTypeId="1" AcceptedAnswerId="7818" CreationDate="2018-10-01T12:57:29.240" Score="57" ViewCount="14088" Body="&lt;p&gt;We all know that &quot;&lt;em&gt;640K should be enough for everyone&lt;/em&gt;&quot;. But who actually set this limit? The quote is often attributed to Bill Gates, but it doesn't seem like a decision for an Operating System vendor to make. And does MS-DOS have some kind of 640K limit? Doesn't it just come from the hardware?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But maybe Bill Gates was consulted on the matter, perhaps? And if he was, &lt;strong&gt;&lt;em&gt;by whom?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I feel we need to establish a timeline of key decisions made in the IBM PC memory architecture. When did Microsoft become involved with the IBM PC design? Was the 8086 processor already designed? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, &lt;strong&gt;the 8086 has two magical addresses.&lt;/strong&gt; The first is the &lt;strong&gt;beginning of vectors&lt;/strong&gt;, which is address zero. The vectors need to be mutable, so RAM must be attached to this address. Thus each 8086 system needs RAM at address zero, the beginning of address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second magical address is the &lt;strong&gt;Instruction Pointer reset value&lt;/strong&gt;, the location from where the 8086 starts execution. Since that boot firmware must be fixed, there must be ROM at that address. The end of memory space was chosen for this location, address 0xFFFF0 to be exact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was Microsoft involved in these two decisions, which must have been done at Intel? I find that hard to believe. Who at Intel chose these addresses? Was it Stephen P. Morse, the 8086 principal architect?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This leads to the biggest question at hand, &lt;strong&gt;the 640K limit&lt;/strong&gt;. Who set it? Where does it come from? I know that EGA and VGA video cards have memory at that address, address 0xA0000 onwards. But didn't these cards come, like, a &lt;em&gt;decade&lt;/em&gt; after the release of 8086 and the first version of IBM PC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So, &lt;em&gt;was&lt;/em&gt; there a 640K limit in the original IBM PC?&lt;/strong&gt; Or did that come later? Was there something attached to the 0xA0000 address in the original PC? Some original video card that was used on the PC? Something else? Who designed that hardware and chose that it would use the memory at 0xA0000?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having designed quite a few embedded computers already back in the days when external logic was always needed for address encoding, I can kind of see how it could have happened. In my imagination it's like &lt;em&gt;&quot;Ok, I've got this RAM at zero and the BIOS eprom at 0xF0000 so where should I place the video RAM...? Hmm, somewhere near the end, I think, so I can expand the main RAM... but not at the very end so I can expand the video RAM too... let's put it a 0xA0000, it's a nice round figure... we can change it at the next PCB revision anyway... Ok, ship it.&quot;&lt;/em&gt; But would it have happened like this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there some early consencus on breaking the continuous memory address space at 0xA0000? Who chose it? Was it some clerk behind a typewriter, making history? Some engineers at a meeting, late for a lunch appointment?  Maybe some guy with a soldering iron or a wirewrap gun, hacking up the first prototype of... what?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We need to get to the bottom of this, &lt;strong&gt;the world needs to know!&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="4058" LastEditorUserId="637" LastEditDate="2020-02-17T15:56:57.487" LastActivityDate="2020-05-13T15:53:45.770" Title="Who set the 640K limit?" Tags="&lt;ibm-pc&gt;&lt;memory-layout&gt;" AnswerCount="3" CommentCount="13" FavoriteCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="7818" PostTypeId="2" ParentId="7817" CreationDate="2018-10-01T13:15:06.797" Score="76" Body="&lt;p&gt;There was a 640K limit on the original IBM PC, but it was the result of IBM’s design decisions, and nothing to do with Microsoft: it’s the largest contiguous amount of memory which can be provided without eating into reserved areas of memory. The &lt;a href=&quot;https://archive.org/details/bitsavers_ibmpcpc602renceAug81_17295874/page/n0&quot; rel=&quot;noreferrer&quot;&gt;IBM PC Technical Reference&lt;/a&gt; includes a system memory map (page 2-25):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6n1VV.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6n1VV.png&quot; alt=&quot;IBM PC system memory map&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is detailed on subsequent pages: the system is supposed to provide between 16 and 64K of RAM on the motherboard, then up to 192K as expansion, with an additional 384K possible in the future (providing 640K RAM in total); then there’s a 16K reserved block, 112K for the video buffers (of which 16K at B0000 were used for MDA, 16K at B8000 for CGA in the IBM PC), followed by 192K reserved for a “memory expansion area”, then 16K reserved, and 48K for the base system ROM at F4000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS itself isn’t limited to 640K. Any amount of RAM (within the 8086 memory model’s limitations, &lt;em&gt;i.e.&lt;/em&gt; up to slightly over 1MiB) could be used. This was the case in some DOS-compatible computers: the &lt;a href=&quot;https://en.wikipedia.org/wiki/Tandy_2000&quot; rel=&quot;noreferrer&quot;&gt;Tandy 2000&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Apricot_PC&quot; rel=&quot;noreferrer&quot;&gt;Apricot PC&lt;/a&gt; provided up to 768K, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rainbow_100&quot; rel=&quot;noreferrer&quot;&gt;DEC Rainbow 100&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Sirius_Systems_Technology&quot; rel=&quot;noreferrer&quot;&gt;Sirius Victor 9000&lt;/a&gt; provided up to 896K, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Siemens_PC-D&quot; rel=&quot;noreferrer&quot;&gt;Siemens PC-D and PC-X&lt;/a&gt; provided up to 1020K; the original SCP systems on which 86-DOS was developed &lt;a href=&quot;https://dosmandrivel.blogspot.com/2007/11/first-dos-machine.html&quot; rel=&quot;noreferrer&quot;&gt;weren’t limited to 640K either&lt;/a&gt;, and Microsoft kept one for a long time because it was the only DOS system they had which could run their memory-intensive linker build. On PC-compatible systems with memory available at 640K, typically provided by a VGA adapter, drivers could be used to add the memory from 640K up to 736K to the memory pool, increasing the maximum runnable program size. (This worked fine for programs which only used colour text mode, or CGA graphics.) Additional memory available in separate areas above 640K could also be added as separate memory pools, but that didn’t help run larger programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the 640K quote is likely apocryphal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to &lt;em&gt;why&lt;/em&gt; this limit was chosen, I don’t have a definitive answer, but there are a number of factors to consider:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the IBM PC wasn’t &lt;em&gt;designed&lt;/em&gt; as a family of computers, at least not past the 8086 and 8088;&lt;/li&gt;&#xA;&lt;li&gt;640K was huge compared to micro-computer memory sizes at the time, both in terms of program requirements and in terms of cost;&lt;/li&gt;&#xA;&lt;li&gt;the memory map was probably designed the way it was in order to provide a balanced set of expansion possibilities: a lot of memory, a decent amount of display buffers, and room for ROM expansion (in the IBM PC, there were no option ROMs; those appeared with the XT).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-13T15:53:45.770" LastActivityDate="2020-05-13T15:53:45.770" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="7819" PostTypeId="2" ParentId="7810" CreationDate="2018-10-01T13:29:00.077" Score="14" Body="&lt;p&gt;Point by point.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;faster addition/subtraction&lt;br&gt;&#xA;No: &lt;code&gt;8/15 + 5/7&lt;/code&gt; is evaluated as &lt;code&gt;131/105 [(8*7 + 15*5)/(7*15)]&lt;/code&gt;, so 3 multiplications for one single addition/subtraction. Plus possibly reduction&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;easier to print&lt;br&gt;&#xA;No: you have to print a human readable string of digits. So you must transform 131/105 to 1.247... Or are you proposing to simply display the fraction? Not so useful for the user.&lt;br&gt;&#xA;&lt;code&gt;PRINT 12/25 --&amp;gt; RESULT IS 12/25&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;less code&lt;br&gt;&#xA;No: floating point code is compact, it's just shifting all in all&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;easy to smoosh those values together into an array subscript (for sine tables etc)&lt;br&gt;&#xA;I don't understand what you mean. Floating point 32 or 64 bit values can be packed togeter easily &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;easier for laypeople to grok&lt;br&gt;&#xA;Irrelevant, laypoepole do not program the bios of microcomputers. And statistics tell us that most of laypeople do not understand fractions anyway&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;x - x == 0&lt;br&gt;&#xA;The same in floating point&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7540" LastActivityDate="2018-10-01T13:29:00.077" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7820" PostTypeId="2" ParentId="7810" CreationDate="2018-10-01T14:35:24.370" Score="19" Body="&lt;p&gt;Floating-point isn't just about representing numbers that have fractional parts.  It's also about representing numbers that are very large, or very small, in a way that allows extra range by sacrificing precision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider these examples:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1,000,000,000,000,000,000,000,000,000,000 (1 with 30 zeros after).  This number can be reasonably stored in floating-point format in 8 bytes with some loss of precision (reduced number of significant digits).  To store it as an exact fraction, you need considerably more space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, the fraction 1/1,000,000,000,000,000,000,000,000,000,000 has the same problem.  It's still 8 bytes in floating-point but much larger as a fraction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because floating-point has an exponent that's stored separately from the mantissa, this gives it the ability to represent a larger range of numbers, even if every number within that range cannot be represented exactly.  This is a valuable tradeoff because in many applications only a limited amount of precision (significant digits) is needed so this saves memory, which is especially at a premium on small systems (and in the beginning, all systems were small by today's standards).&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-10-01T14:35:24.370" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7821" PostTypeId="2" ParentId="7810" CreationDate="2018-10-01T14:51:22.610" Score="2" Body="&lt;p&gt;Consider fixpoint arithmetic, that is pretty much what you are looking for:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 32-bit value can, for example, be split in 2 16-bit values with an implicit &quot;binary point&quot; between them. π, for example, would then be expressed with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 * 2 + 1 * 1 + 0 * 1/2 + 0 * 1/4 + 1 * 1/8 + 0 * 1/16 + 0 * 1/32 + &#xA;1 * 1/64 + 0 * 1/128 + 0 * 1/256 + 0 * 1/512 + 0 * 1/1024 +&#xA;1 * 1/2048 + 1 * 1/4096 + ....&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That is pretty much a representation in fractions. The downside is a relatively small range of values, but if you can live with that, the upside is blazingly fast operations and a relatively good precision within the number range. &lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-10-01T15:00:59.897" LastActivityDate="2018-10-01T15:00:59.897" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7822" PostTypeId="2" ParentId="7810" CreationDate="2018-10-01T15:48:08.260" Score="11" Body="&lt;p&gt;In fact, fractions often &lt;em&gt;are&lt;/em&gt; used, especially by wise programmers on systems without hardware floating point capability.  However, generally this is done where the &lt;em&gt;same denominator&lt;/em&gt; can be used for all values to be considered in a particular computation.  For a fixed denominator to work, the programmer must start by figuring out the maximum range of values and the required precision, determine a denominator which supports this, and then write the relevant portions of the program in the context of that.  In simpler cases no actual manipulation of the denominator is needed - its just implicitly assumed all the way through, though when multiplying two fractional values adjustment is of course required.  Most often the denominators chosen are powers of two, so this adjustment typically ends up being a simple arithmetic shift - or in the simplest case, the denominator is the word width, so the shift is accomplished by not even bothering to perform the parts of the calculation which would produce the discarded part of the result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately, the choice between computation which uses a fixed denominator, verses the &lt;em&gt;variable&lt;/em&gt; binary exponents of floating point (when unassisted by hardware) is a &lt;em&gt;software&lt;/em&gt; decision, not a hardware one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programmers writing efficient, high performance code for such platforms would use integer or fixed fraction arithmetic, then and also today.  Programmers needing to deal with a wider range of values, or working on a program that would take longer to write than the amount of time users would ever spend waiting for it to run, might find floating point more suitable or more convenient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the &lt;em&gt;systems&lt;/em&gt; you mentioned had a norm, it was likely more with packaged languages, especially a ROM BASIC.  Typically, if someone is writing in BASIC, they want flexibility and approachability more than speed, and so many BASICs had their default variable type floating point (in effect, &quot;hey computer, figure out how to represent this for me&quot;).  However, it was not uncommon for a BASIC to also support explicitly declaring a variable as an integer type.  And of course some of the smaller/earlier ROM BASICs such as Apple's Integer BASIC didn't support floating point to begin with.&lt;/p&gt;&#xA;" OwnerUserId="1874" LastEditorUserId="1874" LastEditDate="2018-10-01T16:44:23.517" LastActivityDate="2018-10-01T16:44:23.517" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7823" PostTypeId="2" ParentId="7807" CreationDate="2018-10-01T16:50:18.370" Score="3" Body="&lt;p&gt;I think 3D (read: gaming) just wasn't their target market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing about Matrox cards was that they were always a bit more expensive, targeted at workstations and &quot;high reliability&quot; environments such as control rooms, security monitoring, emergency dispatch, power grid, traffic and light control, process automation and medical sector. Really any place that has a &quot;reliability component&quot; which requires a lengthy testing and validation process and where components can't fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AMD/ATi and nVidia didn't target this market in their 3D components because history has shown that they had no problem releasing cards that sounded like a vacuum cleaner and needed a ridiculously powered power supply. Matrox couldn't release these kinds of things and maintain their standing for reliability. It isn't to say that Matrox couldn't have (it could possible cheapen their brand image) nor is it to say that AMD/ATi and nVidia didn't release more reliable cards (they have), but the real cutting edge 3D gaming stuff is pushing the limits without regard for failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the turning point in the late 90's for &quot;king of the hill&quot; 3D GPUs, the thing that really separated the cards at the time was color depth and various 3D features (filtering, etc.). 3Dfx was the top, but ATi and nVidia ate their lunch simply by offering more features. I recall that reviews (e.g. Maximum PC) would state how Unreal looked so much better with the nVidia Riva TNT's 32-bit color in comparison to 3Dfx's 16-bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For what it's worth, the problem with 3Dfx and a bit of its downfall was that the TNT was a similar cost all-in-one solution which had equivalent performance to the 3Dfx Voodoo2. Yes, the Voodoo3 was an answer to that as a faster all-in-one card, but the problem is that it used the same chipset as the older Voodoo2. It competed on performance, but there were no new features. I don't recall enough of 3Dfx's history, but it might simply be when they started addressing color depth and other things, they had already lost the race. It is possible that they had been focusing too much their work with Sega as they were supposed to be the chipset for the Dreamcast, but that deal fell through as Sega went with NEC's PowerVR in the end.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2018-10-01T16:50:18.370" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7824" PostTypeId="2" ParentId="7817" CreationDate="2018-10-01T16:51:15.297" Score="22" Body="&lt;p&gt;Following up on the @StephenKitt answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M put BIOS and BDOS code at the top of RAM, and IBM decided to copy that idea.  Just like with CP/M systems, the plan was to raise the start of reserved memory from A0000 (640KB) to a higher value once newer chips like the 80286 arrived.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would have worked if end-user programmers like at Lotus obeyed MSFT's guidelines. However, they naturally wanted speed, and so wrote directly to memory addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This, of course, meant that all old programs -- which people paid a &lt;em&gt;lot&lt;/em&gt; of hard-earned money for -- would instantly break, and so the range A0000 to FFFFF got permanently baked into PCs.&lt;/p&gt;&#xA;" OwnerUserId="3683" LastActivityDate="2018-10-01T16:51:15.297" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7825" PostTypeId="2" ParentId="7810" CreationDate="2018-10-01T16:51:33.043" Score="13" Body="&lt;p&gt;Some modern programming languages do have a Rational or Fractional type, so your idea has merit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there are and were several different problems with it. It's worth noting that, even on systems where floating-point also needed to be implemented in software, fractional math wasn't widely-used as an alternative. Some possible reasons that applied at the time:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The 8-bit computers you list used either the Zilog Z80 or MOS 6502 CPU, which had no hardware multiply instruction. (The Motorola 6809, used in the Tandy CoCo, did.)&lt;/li&gt;&#xA;&lt;li&gt;Adding or subtracting rationals requires &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Binary_GCD_algorithm&quot; rel=&quot;nofollow noreferrer&quot;&gt;computing greatest common divisor or least common multiple&lt;/a&gt;, which could be done without division but still would have been very slow compared to the shift-and-add of floating-point numbers, and then both multiplication and division (which was even slower).&lt;/li&gt;&#xA;&lt;li&gt;Reducing fractions to their canonical form would also have involved calculating GCD and dividing.&lt;/li&gt;&#xA;&lt;li&gt;Multiplication and division of floating-point is also simpler: multiply mantissas, add exponents.&lt;/li&gt;&#xA;&lt;li&gt;While floating-point math needs only a few extra guard bits of precision, exact multiplication of rationals requires doubling the number of bits, so to be able to compute a/b + c/d where a, b, c and d have 16-bit precision, then find the GCD of ad+bc and bd and divide both the numerator and denominator, you would have needed 32-bit math on an 8-bit ALU with no hardware multiplier or divider.&lt;/li&gt;&#xA;&lt;li&gt;Many values that programmers want to work with are irrational, most famously &amp;pi; and the square root of 2.&lt;/li&gt;&#xA;&lt;li&gt;It wasn't how math had always worked on mainframes and minicomputers, and wouldn't have been acceptable for scientific computing.&lt;/li&gt;&#xA;&lt;li&gt;Fixed-point was a simpler alternative for most use cases. You typically know what an acceptable lowest common denominator for your problem domain is, and then you only need to store the numerators and the math becomes easy.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In the era of 16-bit microcomputers, floating-point coprocessors appeared on the market that were hundreds of times faster, systems that did not have the coprocessor emulated them, and their functionality became IEEE standards, although many games and applications continued to use fixed-point. In the late '80s, floating-point math became integrated into the CPU cores themselves.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2018-10-04T19:11:03.640" LastActivityDate="2018-10-04T19:11:03.640" CommentCount="25" ContentLicense="CC BY-SA 4.0" />
  <row Id="7826" PostTypeId="2" ParentId="803" CreationDate="2018-10-01T16:56:39.133" Score="4" Body="&lt;p&gt;&amp;emsp;My recommendation what be to use &lt;a href=&quot;http://tasvideos.org/BizHawk.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bizhawk&lt;/a&gt;. It's an Emulator that was originally designed for TASing (Tool Assisted Speedrunning, see &lt;a href=&quot;http://tasvideos.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;tasvideos.org&lt;/a&gt; for details), however it's come a long way since it was first being developed, and now is mostly used for emulating pretty much everything (at least that I can think of), including Nintendo 64DD games, assuming that you've downloaded and added the firmware (&lt;a href=&quot;https://www.retroroms.info/forum/topic/BizHawk-2-0-firmware.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.retroroms.info/forum/topic/BizHawk-2-0-firmware.htm&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;emsp;Keep in mind that a huge advantage to using Multi-Emulators is that you can get used to one menu/GUI, and have it there for everything you play.&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="10751" LastEditDate="2018-10-02T23:57:14.610" LastActivityDate="2018-10-02T23:57:14.610" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7827" PostTypeId="2" ParentId="7594" CreationDate="2018-10-01T17:49:59.533" Score="3" Body="&lt;p&gt;If you look at the return code in the function above &quot;RNP 01&quot; stands for &quot;return from nonbase procedure and return 1 word as a function result. Therefore this must be an integer/scalar/boolean function. As already mentioned by @Raffzahn the compiler always assigns 2 null bytes as extra parameters for any function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This function has 3 data words: loc1 = function result, loc2 = null bytes unused, loc3 = passed parameter.&lt;/p&gt;&#xA;" OwnerUserId="3193" LastActivityDate="2018-10-01T17:49:59.533" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7828" PostTypeId="1" CreationDate="2018-10-01T18:36:20.803" Score="2" ViewCount="194" Body="&lt;p&gt;Whilst working on a personal project, I discovered the existence of an old version of the XSLT specification, identified by the namespace &lt;code&gt;http://www.w3.org/TR/WD-xsl&lt;/code&gt; instead of the modern &lt;code&gt;https://www.w3.org/1999/XSL/Transform&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://stackoverflow.com/a/39602880/5223757&quot;&gt;this answer on Stack Overflow&lt;/a&gt;, this refers to the IE4 implementation of a working draft of the XSLT specification. This implementation differed substantially from the final version and is not compatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that people dealing with this would not have to &lt;a href=&quot;https://xkcd.com/1313/&quot; rel=&quot;nofollow noreferrer&quot;&gt;write XSLT to convert WD-xsl into conforming XSLT&lt;/a&gt;, apparently Microsoft wrote a tool to aid the transition. But I can barely find any information &lt;em&gt;at all&lt;/em&gt; that isn't just people complaining about WD-xsl.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What information about WD-xsl is there available? A schema? The version of the spec the IE4 team used to implement it? The possibly-fictional tool to convert it into compliant XSLT?&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2018-10-01T20:49:46.550" Title="What information exists about WD-xsl?" Tags="&lt;history&gt;&lt;internet&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7829" PostTypeId="2" ParentId="7828" CreationDate="2018-10-01T20:49:46.550" Score="3" Body="&lt;p&gt;WD-xsl is still available as &lt;a href=&quot;https://www.w3.org/TR/1998/WD-xsl-19981216&quot; rel=&quot;nofollow noreferrer&quot;&gt;a working draft specification on the W3C site.&lt;/a&gt; It appears to be a proto-XSLT/XSLT-FO, with many features, including their names, still in flux; the biggest issue that I see with it is that there's a lot of underspecification. For example, in the draft (&quot;2.7.6 Processing with Template Rules&quot;):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In the absence of a select attribute, the xsl:apply-templates&#xA;  instruction processes all of the children of the current node,&#xA;  including text nodes. However, text nodes that have been stripped as&#xA;  specified in Section 2.4.8: Whitespace Stripping will not be&#xA;  processed.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Ed. Note:&lt;/strong&gt; There is no WG consensus on the use xsl:apply-templates&#xA;  without a select attribute to process all children of a node.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Compare with the &lt;a href=&quot;https://www.w3.org/TR/1999/REC-xslt-19991116#section-Applying-Template-Rules&quot; rel=&quot;nofollow noreferrer&quot;&gt;XSLT 1.0 wording (&quot;5.4 Applying Template Rules&quot;):&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In the absence of a select attribute, the xsl:apply-templates&#xA;  instruction processes all of the children of the current node,&#xA;  including text nodes. However, text nodes that have been stripped as&#xA;  specified in [3.4 Whitespace Stripping] will not be processed. If&#xA;  stripping of whitespace nodes has not been enabled for an element,&#xA;  then all whitespace in the content of the element will be processed as&#xA;  text, and thus whitespace between child elements will count in&#xA;  determining the position of a child element as returned by the&#xA;  position function.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I didn't do a comprehensive check of the whole document, but it's extremely similar to the final XSLT/XSLT-FO 1.0 documents: my guess is the conversion tool did some mechanical changes to renamed items. In addition, my guess as to the number of documents affected by this was very small, given the time between the working document and the approved specification.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2018-10-01T20:49:46.550" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7830" PostTypeId="2" ParentId="7810" CreationDate="2018-10-02T01:06:21.697" Score="8" Body="&lt;p&gt;One more point on the topic. Floating-point was designed so that almost all bit patterns of a memory representation of a number were used meaningfully. With the exception of zeros, infinities and NaNs, every bit pattern is a different number. On the other hand, when using fractions, you get 1/2 == 2/4 == 3/6 == … etc. You either keep normalizing fractions (and end up never using bit patterns corresponding to non-normalized fractions), or having trouble even comparing numbers. So, in your proposed case of a byte for divisor and a byte for dividend, out of 2¹⁶ bit patterns available for two bytes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;there are at least 127 bit patterns that represent 1/2,&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;there are at least 85 bit patterns that represent 1/3 and 2/3 each,&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;there are at least 63 bit patterns that represent 1/4 and 3/4 each,&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;there are at least 51 bit patterns that represent 1/5, 2/5, 3/5, 4/5 each,&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;…and for these 9 fractions you're already using almost 1% of all possible bit patterns  (&quot;at least&quot; depends on defining corner case semantics, like: what number is represented when the divisor is zero?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's more, you're wasting close to half of all possible bit patterns on numbers where divisor &gt; dividend.&lt;/p&gt;&#xA;" OwnerUserId="8304" LastActivityDate="2018-10-02T01:06:21.697" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7831" PostTypeId="2" ParentId="7794" CreationDate="2018-10-02T05:21:50.613" Score="8" Body="&lt;p&gt;Following the spirit of personal examples, here's one from when I was in high school: I, like everyone else, used a Ti 84 calculator for my Math classes. Said calculator used a Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Out of a mixture of boredom and curiosity, I wrote a program that printed &quot;WOZ IS ALWAYS THE ANSWER&quot; any time the user hit the enter key. The program didn't need to be running for this to happen, and it could happen anywhere in the menu system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do that, I used the chip's interrupts to check the input every 1/140th second. The thing is, each time I checked, I &lt;em&gt;had&lt;/em&gt; to corrupt the A register. The input methods simply couldn't get around that. So, if I had just used A, the A register would be switching values for every other program run. That wouldn't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, I switched into the shadow registers, did the input checking, switched back, and waited for the next call. It worked out pretty well, and did the job!&lt;/p&gt;&#xA;" OwnerUserId="10763" LastActivityDate="2018-10-02T05:21:50.613" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7832" PostTypeId="2" ParentId="7810" CreationDate="2018-10-02T07:52:58.940" Score="-1" Body="&lt;p&gt;Old flight simulators used to use a system called binary scaling. This was a system where an imaginary binary point was set on an integer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What that meant was the numbers above the `binary point' were ascending powers of two, and those below descending.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use of fractions to represent any scale number to maximum accuracy of the integer!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It meant they could get away without using slow floating point processors. Also binary scaling means more accuracy, because some of the bits in a float/double/REAL are used to hold the scaling. Binary scaled values used the context to store this information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary_scaling&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Binary_scaling&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10707" LastActivityDate="2018-10-02T07:52:58.940" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7833" PostTypeId="2" ParentId="7794" CreationDate="2018-10-02T08:35:26.407" Score="10" Body="&lt;p&gt;As usual, the &lt;a href=&quot;http://archive.computerhistory.org/resources/text/Oral_History/Zilog_Z80/102658073.05.01.pdf&quot; rel=&quot;noreferrer&quot;&gt;Z80 Oral History&lt;/a&gt; provides some insight into the motivation behind the alternate registers and exchange instructions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Faggin] &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So I wanted to&#xA;  have a couple of index registers, more 16-bit operations, a better&#xA;  interrupt structure. The whole idea of doubling the number of&#xA;  registers. And I could exchange the register with an exchange&#xA;  instruction, the whole register set. That was an idea that I had used&#xA;  already on the Intel 4040. So that one could serve it up very fast if&#xA;  that was a necessity. And on and on.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;[Shima]&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Thirdly, in order to support the highspeed&#xA;  task switching, in the beginning I asked to complete two sets of register files including the program&#xA;  counter. But it was too complicated for customer. Then we gave up on [the idea] of the two sets of&#xA;  general purpose registers. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;... &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;And two instruction codes were used for the exchange, the set of&#xA;  general purpose register, and exchanging the set of accumulator and &#xA;  flags. Also those support the high-speed task switching.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(And while it may be obvious, it's worth pointing out that in the silicon implementation, the exchange instructions merely modify the state of the register file addressing logic.)&lt;/p&gt;&#xA;" OwnerUserId="8178" LastActivityDate="2018-10-02T08:35:26.407" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7834" PostTypeId="2" ParentId="2760" CreationDate="2018-10-02T13:14:01.007" Score="4" Body="&lt;p&gt;&lt;a href=&quot;http://archive.computerhistory.org/resources/text/Oral_History/Zilog_Z80/102658073.05.01.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z80 Oral History&lt;/a&gt; - the gift that keeps giving...&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Slater:&lt;/strong&gt; Who were the primary customers early on, and what was the&#xA;pricing strategy? You want to talk about those aspects, either of you?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Ungermann:&lt;/strong&gt; We went after the PC business as we know it today. And we&#xA;brought our prices down to allow us to do that very quickly. When we&#xA;came out with the product, we priced the Z80 at $200 a chip, and it&#xA;took us just a few days to understand from our customers that they&#xA;needed a lower price to be able to go after the market. However, we&#xA;also had a number of system companies that were thought that they&#xA;could get the IBM software to run on the Z80. They could crack a lot&#xA;of IBM markets, but that of course, didn’t ever happen, because the&#xA;Z80 was not designed to compete with a mainframe.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Slater:&lt;/strong&gt; Were there&#xA;important embedded applications also?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Ungermann:&lt;/strong&gt; Yes, there were many&#xA;embedded applications.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Faggin:&lt;/strong&gt; Yeah, one of the first customers that&#xA;we had was Cromemco In fact, Roger Mellon came to the office and I&#xA;remember personally selling him one Z80 for $200, and Ralph didn’t say&#xA;it, but NEC was actually our first customer, and I think you sold the&#xA;Z80 to the competition. &lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Ungermann:&lt;/strong&gt; When we were packaging the product up for&#xA;shipment, somebody knocked on the door of the office and it was an NEC&#xA;guy with four $100 bills for two chips. And then right after that a&#xA;very successful Japanese computer company came in with four $200&#xA;bills. That was just the start of the copying.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="8178" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-10-02T13:14:01.007" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7836" PostTypeId="2" ParentId="7794" CreationDate="2018-10-03T00:42:48.820" Score="3" Body="&lt;p&gt;Sorry to rain on any parades but, while it's been a long time since I did any serious Z-80 programming, I distinctly remember the alternate registers being one of the major broken features of the Z-80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You see, they could be used to either:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Speed up interrupt handling.&lt;/li&gt;&#xA;&lt;li&gt;Store alternate data in your main code.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The thing was you could not do both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if I was writing a device driver with an interrupt service routine, I could not use the alternate registers to save pushing and popping the main registers. I of course would need to avoid doing this in case the application programmer was using those registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if I was writing application code, I  could not use the alternate registers because an ISR could trample all over my data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The overall result was that most programmers stayed away from the alternate register sets so that there code would run on more machines without crashing and burning. Any savings was swamped by the risk of shipping non-working code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Safe code may be slower, but broken code does not run at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course if you have the luxury of controlling all aspects of the system and its coding, you were free to do as you please. I never had that luxury.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastActivityDate="2018-10-03T00:42:48.820" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7837" PostTypeId="1" AcceptedAnswerId="7854" CreationDate="2018-10-03T06:52:12.987" Score="14" ViewCount="528" Body="&lt;p&gt;I was just reading &lt;a href=&quot;https://web.archive.org/web/20170128060623/http://www.trilithium.com/johan/2005/08/linux-gate/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;What is linux-gate.so.1?&lt;/em&gt;&lt;/a&gt;, and it says this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Intel recognized this problem early on and introduced a more efficient system call interface in the form of &lt;code&gt;sysenter&lt;/code&gt; and &lt;code&gt;sysexit&lt;/code&gt; instructions. This fast system call feature first appeared in the Pentium Pro processor, but &lt;strong&gt;due to hardware bugs it's actually broken in most of the early CPUs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I did &lt;a href=&quot;http://www.os2museum.com/wp/sysenter-where-are-you/&quot; rel=&quot;nofollow noreferrer&quot;&gt;some research&lt;/a&gt; and it seems as if &lt;code&gt;SYSENTER&lt;/code&gt; was not documented until the Pentium II, and further, this bug that stopped its adoption until much later is hinted at again:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It seems likely that &lt;strong&gt;Intel discovered some problem with the &lt;code&gt;SYSENTER&lt;/code&gt; instruction very shortly before the chip was released.&lt;/strong&gt; And instead of documenting the problems and fixing them, Intel decided not to document the instruction at all.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The comments on the latter article suggest that the issue might lie in &lt;code&gt;SYSEXIT&lt;/code&gt; rather than &lt;code&gt;SYSENTER&lt;/code&gt;. What specific defects in the Pentium Pro and early Pentium II make it impossible to use &lt;code&gt;SYSENTER&lt;/code&gt; as intended?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="15334" LastEditorDisplayName="user722" LastEditDate="2021-01-19T09:49:48.543" LastActivityDate="2021-01-19T09:49:48.543" Title="SYSENTER/SYSEXIT broken on Pentium Pro and Pentium II?" Tags="&lt;assembly&gt;&lt;intel&gt;&lt;x86&gt;&lt;bugs&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7838" PostTypeId="1" AcceptedAnswerId="7840" CreationDate="2018-10-03T13:20:36.867" Score="48" ViewCount="8361" Body="&lt;p&gt;From what I read, most line printers have 132 columns. Also, the VT-220 and presumably other terminals may be switched between 80 columns (that's a usual width) and 132 columns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I recall, 80 columns was because of those Fortran punch cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what's special about 132? It's hardly more than 128, which has the advantage of being a power of 2.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="6794" LastEditDate="2018-11-18T17:06:04.557" LastActivityDate="2018-11-18T17:06:04.557" Title="Why did line printers have 132 columns?" Tags="&lt;history&gt;&lt;printer&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7839" PostTypeId="2" ParentId="7838" CreationDate="2018-10-03T13:46:59.543" Score="14" Body="&lt;p&gt;The United States has its own paper sizes, two of which are 11&quot;x17&quot; ('ledger/tabloid') and 8.5&quot;x11&quot; ('letter'), which are similar to A3 and A4 and have the same sort of predominance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early fixed-width font printers usually offered a 12 characters-per-inch typeface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;12*11 = 132; so 132 characters is the number you can fit on a landscape 'letter' page, or a portrait 'ledger' page.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-10-03T13:46:59.543" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7840" PostTypeId="2" ParentId="7838" CreationDate="2018-10-03T14:00:56.060" Score="62" Body="&lt;p&gt;As so often with basic measurements like this, the roots have been laid out way before today's computers, even before computers (non human that is) at all.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;From what I read, most line printers have 132 columns. Also, the VT-220 and presumably other terminals may be switched between 80 columns (that's a usual width) and 132 columns.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The number is a result of the paper originally used for tabulating machines and a common font size at some later point. In this case it's 14 inch wide paper and a  10 characters per inch printing, which resulted in 132 characters per line - the remaining 8 character positions are omitted for the transport tractor feed pin holes.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But what's special about 132? It's hardly more than 128, which has the advantage of being a power of 2.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As being developed way before the &lt;em&gt;binary&lt;/em&gt; computer, powers of two are not related in any way.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;It's about the paper.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;It begins with tabulating typewriters. Most notably they carry a quite wide carriage able to hold paper of 22 or sometimes more inches wide. Classic (pre-computer *1) ledger sheet size (in the US *2,3) is 22 inches wide (*4). To place &lt;a href=&quot;https://en.wikipedia.org/wiki/Tabulating_machine&quot; rel=&quot;noreferrer&quot;&gt;tabulating machines&lt;/a&gt; into accounting business, similar forms had to be used.&lt;/p&gt;&#xA;&lt;p&gt;Long story short(*5), the result was support for 10 characters per inch and 6 or 8 lines per inch, and a two paper formats based on a 'half ledger' of 11 inch:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8.5 x 11 inch with 80 characters per line and 66/88 lines per page&lt;/li&gt;&#xA;&lt;li&gt;14  x 11 inch with 132 characters per line and 66/88 Lines per page&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;plus a (later) 'condensed' format of&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;14  x 8.5 inch with 132 characters and 66 lines per page (only 8 lines per inch)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;When computers came along, their printers were not only built using the same components as tabulating printers, but more importantly had to adhere to these paper formats to be useful.&lt;/p&gt;&#xA;&lt;p&gt;Minis (as the mentioned VT terminals) and micros just carried it on - again to make their output useful to the businesses they where meant to be sold to.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Classic as in genuine handwritten thread-bound ledger books.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Jup, that's the sheet size where the ledger &lt;strong&gt;page&lt;/strong&gt; size comes from.&lt;/p&gt;&#xA;&lt;p&gt;*3 - European pre-DIN formats were similar, which opens the interesting notion that the printing press was already setting international standards way before any standardization organization. Just not as systematic.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Or better most used was 17&amp;quot; x 22&amp;quot;. Other common ledger sizes are, 17&amp;quot; x 28&amp;quot;, 19&amp;quot; x 24&amp;quot;, 24&amp;quot; x 38&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;*5 - There was much variation of character density and capability among early machines. For example a &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/405.html&quot; rel=&quot;noreferrer&quot;&gt;IBM 405&lt;/a&gt; only handled 8 character per inch and a total of 88 print bars (positions). At least it could also print letters, where the earlier &lt;a href=&quot;http://www-03.ibm.com/ibm/history/exhibits/vintage/vintage_4506VV4005.html&quot; rel=&quot;noreferrer&quot;&gt;285&lt;/a&gt; could only handle numbers.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-10-05T07:42:09.813" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7841" PostTypeId="1" CreationDate="2018-10-04T04:29:32.690" Score="12" ViewCount="4082" Body="&lt;p&gt;I'm trying to emulate programs from the 80s, but with an accurate clock-speed¹ (pretending its an 8086). Meaning that if a 8086 would take X ms/opcode, the emulator should take X ms (+- a bit of jitter as I'm not running a RTOS). If it should take Y ms to access RAM, the emulator should take Y ms to access RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there such an emulator (preferably running on Linux or web)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;¹ Which is why I can't use something like qemu.&lt;/p&gt;&#xA;" OwnerUserId="9107" LastEditorUserId="333" LastEditDate="2018-10-04T14:06:13.563" LastActivityDate="2018-10-04T19:48:29.810" Title="Is there a cycle-exact 8086 emulator?" Tags="&lt;emulation&gt;&lt;8086&gt;" AnswerCount="4" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7842" PostTypeId="2" ParentId="7841" CreationDate="2018-10-04T05:20:07.073" Score="0" Body="&lt;p&gt;A bit hard to answer with the little information you give. Since you especially mention the8086 (not 8088), it &lt;em&gt;may&lt;/em&gt; be safe you're not about to emulate an IBM PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://i8086emu.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;i8086emu&lt;/a&gt; might be right for you. It emulates a rather straight foreward 8086 singleboard computer with the somewhat generic name SBC8086 :)) That machine runs on 5 MHz, and the emulator is suppoesed to be close. It's made to run under Linux, using GTK2 as frontend, but also compiles for 32 bit Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The emulator got a quite remarkable software structure with interfaces for easy integration of 'new' simulated chips and I/O hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There might be a little hurdle, as most documentation is in German :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-10-04T05:20:07.073" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7843" PostTypeId="2" ParentId="7841" CreationDate="2018-10-04T06:21:59.520" Score="22" Body="&lt;p&gt;&lt;a href=&quot;https://pcem-emulator.co.uk/&quot; rel=&quot;noreferrer&quot;&gt;PCem&lt;/a&gt; aims to be an accurate emulator, and its 8086/8088 timings are accurate. It can emulate a wide variety of hardware, and can model specific PCs with their ROMs (such as the original IBM PC, the Amstrad 1640, and many others). It is available for Linux and Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its 8086 emulation is implemented in &lt;a href=&quot;https://bitbucket.org/pcem_emulator/pcem/src/3a9afaf8f184b106179a1dd7b176298c44d68f85/src/808x.c?at=default&amp;amp;fileviewer=file-view-default&quot; rel=&quot;noreferrer&quot;&gt;src/808x.c&lt;/a&gt; — you can see there that it keeps track of the cycles taken by each instruction, and each memory access, and takes into account memory prefetches and the cycles lost to memory refresh. It even emulates CGA snow!&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-10-04T07:45:48.687" LastActivityDate="2018-10-04T07:45:48.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7844" PostTypeId="1" AcceptedAnswerId="7845" CreationDate="2018-10-04T14:08:27.093" Score="14" ViewCount="1791" Body="&lt;p&gt;I'm building myself a floppy disk interface based on a microcontroller. I'm successfully reading the bitstream off the disk and (probably) decoding the MFM bitstream into actual bits, based on the documentation in &lt;a href=&quot;http://www.hermannseib.com/documents/floppy.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.hermannseib.com/documents/floppy.pdf&lt;/a&gt;, which is mostly excellent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there's one rather important bit which that document kind of glosses over, which is that I need to split the bitstream up into bytes, and I don't know where the byte boundaries are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best I can make out is that the disk controller looks for the special deformed sync bytes in the block headers --- 0xC2 in the track header, and 0xA1 in the ID and data record headers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this seems kinda weird, as it means that all the fill data which appears before the sync byte is unreadable; unless its only purpose is to allow the MFM decoder to sync to the data clock. It's particularly odd as the encoded bitsequence used to sync the data clock (two MFM cells of 00 01) is the mis-encoded sequence use to mark the sync bytes (three MFM cells of 10 00 10), so I need to know whether I'm looking for a sync byte or not in order to correctly sync the data clock (and likewise, I need to be able to detect the end of a block so I can start hunting for a sync byte again).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any definitive information on how this is actually supposed to work?&lt;/p&gt;&#xA;" OwnerUserId="6846" LastActivityDate="2018-10-05T06:16:47.980" Title="Finding byte boundaries in floppy disk MFM bitstreams" Tags="&lt;floppy-disk&gt;&lt;data-preservation&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7845" PostTypeId="2" ParentId="7844" CreationDate="2018-10-04T15:10:09.633" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But this seems kinda weird, as it means that all the fill data which appears before the sync byte is unreadable;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Aeh ... ok, but then again, why do you want to read it anyway?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fill data is what it says, just a meaningless filler. It if ment to provide some gap to allow different controllers (read with more or less timing difference) to interact. Otherwise Floppies wouldn't been exchangable, in fact, they could even be unreadable on the very same system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe take a look at &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4491/6659&quot;&gt;this answer&lt;/a&gt; regarding 'Whats between the sectors of a Floppy'.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It's particularly odd as the encoded bitsequence used to sync the data clock (two MFM cells of 00 01) is the mis-encoded sequence use to mark the sync bytes (three MFM cells of 10 00 10), so I need to know whether I'm looking for a sync byte or not in order to correctly sync the data clock&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To start with, &lt;code&gt;C2&lt;/code&gt;/&lt;code&gt;A1&lt;/code&gt; are &lt;strong&gt;not&lt;/strong&gt; sync bytes, but the access marks:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;IAM&lt;/strong&gt; - Index Access Mark (&lt;code&gt;C2C2C2FC&lt;/code&gt;) marking the start of an track (mostly useless)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;IDAM&lt;/strong&gt; - ID Access Mark (&lt;code&gt;A1A1A1FE&lt;/code&gt;) marking the start of a header field (Sector ID)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DAM&lt;/strong&gt; - Data Access Mark (&lt;code&gt;A1A1A1F8&lt;/code&gt; or &lt;code&gt;A1A1A1FB&lt;/code&gt;) marking the start of a Data field (Sector)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Syncbytes are (in MFM) a sequence of 12 bytes &lt;code&gt;00&lt;/code&gt; prior to the access marks. These are ment to synchronize your clock, so the rest gets readable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mark bytes &lt;code&gt;C2&lt;/code&gt;/&lt;code&gt;A1&lt;/code&gt; again are written &lt;strong&gt;with a sync error&lt;/strong&gt; (*1), making them non data encodings or &lt;a href=&quot;https://en.wikipedia.org/wiki/Signaling_(telecommunications)#In-band_and_out-of-band_signaling&quot; rel=&quot;noreferrer&quot;&gt;out-of-band&lt;/a&gt; (*2) formating codes on MFM level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Syncing essentially means reading bytes, forming bit cells until you get a sequence of several well formated &lt;code&gt;00&lt;/code&gt; bytes and then keeping that clock for all further reads - until the end of a block that is. On a lower level (*3) a sequence of &lt;code&gt;00&lt;/code&gt; bytes are just a monotone sequence of pulses with exactly halve the data frequence. So if the data written is for example 500 kBit/s, then this will be an exact 250 kHz signal. In this case 48 pulses. So whenever you see several pulses of equal distance, you need to take their timing to calibrate your detector (function). From there on it's reading bytes as synced (*4,5).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the next data read is a malformated mark, then continue (3 bytes) until the next right formated byte. If it's some mark qualifier (&lt;code&gt;FB&lt;/code&gt;/&lt;code&gt;FC&lt;/code&gt;/&lt;code&gt;FE&lt;/code&gt;), then you found either block and continue accordingly. Otherwise, go back and look out for the sync sequence again.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(and likewise, I need to be able to detect the end of a block so I can start hunting for a sync byte again).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The end of a block is defined in-band. All to do is reading the block as detected&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IAM - nothing&lt;/li&gt;&#xA;&lt;li&gt;IDAM - 6 bytes (Track, Head, Sector, Size, CRC)&lt;/li&gt;&#xA;&lt;li&gt;DAM - As many bytes as the leading header told plus two (CRC)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;After that, the hunt for sync bytes is open again :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Having just three (partitial) mal formated bytes will not influnce the clock enough to make the following byte (&lt;code&gt;F8&lt;/code&gt;/&lt;code&gt;FB&lt;/code&gt;/&lt;code&gt;FC&lt;/code&gt;/&lt;code&gt;FE&lt;/code&gt;) unreadable, especially when this (and all subsequent) is again well formed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - After all, if the MFM data stream would only consist of 256 legal byte encodings, how on earth should one detect what is user data and what's formating. The same problem all stream based communication without a signaling band has. Complex layers of framing just mitigate the erroe by adding more and more handling effort. Having an out of band signal simplifies that a lot. Forgoing a signaling chanel is main reason why the stream concept of Unix is nice, simple and error prone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Always keep in mind, these formats where not designed to be decoded by software using an unimaginable (back then) fast CPU, but simple and cheap logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - In fact, it's not even neccessary to count bits or bytes at that point, but only wait for a pattern change, as all bytes that follow a sync will always start with a one bit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - A real controller will use a PLL which gets readjusted with every bit read. doing so in software may not be as easy.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-04T15:38:23.323" LastActivityDate="2018-10-04T15:38:23.323" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="7846" PostTypeId="2" ParentId="7844" CreationDate="2018-10-04T15:10:25.443" Score="4" Body="&lt;p&gt;Haven't used &lt;strong&gt;MFM&lt;/strong&gt; and Floppy for a really long time... but around 2011 I was in process of converting all my physical floppies from ZX Spectrum and &lt;a href=&quot;https://cs.wikipedia.org/wiki/Didaktik_40&quot; rel=&quot;nofollow noreferrer&quot;&gt;D40/D80 (using MDOS)&lt;/a&gt; to images for my own ZX Spectrum emulator (in fear they got demagnetized and also to test my emulator). I did go the same way as you (using MCU AT32UC3A0512 as FDC and I succeded :) ). Its too long ago so I forgot the specifics but youre in luck I just found the project source codes so here is &lt;strong&gt;C++ source code&lt;/strong&gt; for raw MFM bitstream image handling (I am using to use the stored MFM images):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//---------------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;const char _MFM_map_GOOD        ='.';&#xA;const char _MFM_map_BAD         ='X';&#xA;const char _MFM_map_UNFORMATED  =' ';&#xA;const char _MFM_seq_UNFORMATED  =' ';&#xA;//---------------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;class _track_MFM&#xA;    {&#xA;public:&#xA;&#xA;    struct _sector_map&#xA;        {&#xA;        char map;&#xA;        BYTE seq;&#xA;        };&#xA;    DWORD sectors,heads,tracks,encodesectors;&#xA;    _sector_map *map;&#xA;&#xA;    BYTE *dat_MFM,*dat_bin;&#xA;    DWORD siz_MFM1,siz_MFM2,siz_bin,sector_size;&#xA;    DWORD adr;&#xA;    bool last_bit_wr;&#xA;&#xA;    DWORD _track;&#xA;&#xA;    #define _rd ((adr&amp;lt;siz_MFM1)?(((dat_MFM[adr&amp;gt;&amp;gt;3])&amp;gt;&amp;gt;(7-(adr&amp;amp;7)))&amp;amp;1):0)&#xA;    #define _wr(x) if (adr&amp;lt;siz_MFM1) { if (x) dat_MFM[adr&amp;gt;&amp;gt;3]|=    (1&amp;lt;&amp;lt;(7-(adr&amp;amp;7))); else   dat_MFM[adr&amp;gt;&amp;gt;3]&amp;amp;=255-(1&amp;lt;&amp;lt;(7-(adr&amp;amp;7))); }&#xA;&#xA;    _track_MFM()&#xA;        {&#xA;        map    =NULL;&#xA;        dat_MFM=NULL;&#xA;        dat_bin=NULL;&#xA;        siz_MFM1=0;&#xA;        siz_MFM2=0;&#xA;        siz_bin=0;&#xA;        sectors=0; encodesectors=0;&#xA;        heads=0;&#xA;        tracks=0;&#xA;        sector_size=0;&#xA;        _track=0xFFFFFFFF;&#xA;        }&#xA;&#xA;    ~_track_MFM() { _free(); }&#xA;&#xA;    void _free()&#xA;        {&#xA;        if (map    ) delete map    ; map    =NULL;&#xA;        if (dat_MFM) delete dat_MFM; dat_MFM=NULL;&#xA;        if (dat_bin) delete dat_bin; dat_bin=NULL;&#xA;        siz_MFM1=0;&#xA;        siz_MFM2=0;&#xA;        siz_bin=0;&#xA;        sectors=0; encodesectors=0;&#xA;        heads=0;&#xA;        tracks=0;&#xA;        sector_size=0;&#xA;        _track=0xFFFFFFFF;&#xA;        }&#xA;&#xA;    void _alloc(_disc_fs &amp;amp;fs,DWORD _track_size=0)&#xA;        {&#xA;        _free();&#xA;        if (_track_size) siz_MFM2=_track_size;&#xA;        else             siz_MFM2=siz_bin&amp;lt;&amp;lt;1;&#xA;        siz_MFM1=siz_MFM2&amp;lt;&amp;lt;3;&#xA;        sector_size=fs.sector_size;             if (!sector_size) sector_size=512;&#xA;        sectors=(siz_MFM2&amp;gt;&amp;gt;1)/sector_size;      if (sectors&amp;lt;fs.sectors) sectors=fs.sectors;&#xA;        encodesectors=fs.sectors;&#xA;        heads=fs.heads;                         if (!heads) heads=1;&#xA;        tracks=fs.tracks;                       if (!tracks) tracks=1;&#xA;        siz_bin=sectors*sector_size;&#xA;        map=new _sector_map[sectors*heads*tracks];&#xA;        dat_bin=new BYTE[siz_bin];&#xA;        dat_MFM=new BYTE[siz_MFM2];&#xA;        _track=0xFFFFFFFF;&#xA;        reset();&#xA;        }&#xA;&#xA;    DWORD header_rd(_disc_fs &amp;amp;fs,int hnd)&#xA;        {&#xA;        _free();&#xA;        DWORD i,i0;&#xA;        DWORD sz,tr,hd;&#xA;        sz=FileSeek(hnd,0,2);&#xA;           FileSeek(hnd,0,0);&#xA;        if (sz&amp;lt;16) return 0;&#xA;        FileRead(hnd,&amp;amp;i,4); if (i!='MFM ') return 0;&#xA;        FileRead(hnd,&amp;amp;i,4); tr=i;&#xA;        FileRead(hnd,&amp;amp;i,4); hd=i;&#xA;        FileRead(hnd,&amp;amp;i,4); sz=i;&#xA;        _alloc(fs,sz);&#xA;        return sz;&#xA;        }&#xA;    DWORD header_wr(_disc_fs &amp;amp;fs,int hnd)&#xA;        {&#xA;        DWORD i;&#xA;           FileSeek(hnd,0,0);&#xA;        i='MFM ';           FileWrite(hnd,&amp;amp;i,4);        //  0 ID&#xA;        i=tracks;           FileWrite(hnd,&amp;amp;i,4);        //  4 tracks&#xA;        i=heads;            FileWrite(hnd,&amp;amp;i,4);        //  8 heads&#xA;        i=siz_MFM2;         FileWrite(hnd,&amp;amp;i,4);        // 12 track size [Byte]&#xA;        }&#xA;    void track_rd(int hnd,DWORD tr)&#xA;        {&#xA;        if (_track==tr) return;&#xA;        FileSeek(hnd,int(16+(tr*siz_MFM2)),0);&#xA;        FileRead(hnd,dat_MFM,siz_MFM2);&#xA;        _track=tr;&#xA;        decode(tr/heads,tr%heads);&#xA;        }&#xA;    void track_wr(int hnd,DWORD tr)&#xA;        {&#xA;        if (_track==tr) return;&#xA;        encode(tr/heads,tr%heads);&#xA;        FileSeek(hnd,int(16+(tr*siz_MFM2)),0);&#xA;        FileWrite(hnd,dat_MFM,siz_MFM2);&#xA;        _track=tr;&#xA;        }&#xA;&#xA;    _sector_map getmap(DWORD tr,DWORD hd,DWORD sc)&#xA;        {&#xA;        if (map) return map[(((tr*heads)+hd)*sectors)+sc];&#xA;        _sector_map a;&#xA;        a.map=_MFM_map_UNFORMATED;&#xA;        a.seq=_MFM_map_UNFORMATED;&#xA;        return a;&#xA;        }&#xA;&#xA;    void reset()&#xA;        {&#xA;        DWORD sz,tr,hd;&#xA;        for (tr=0;tr&amp;lt;tracks;tr++)&#xA;         for (hd=0;hd&amp;lt;heads;hd++)&#xA;          reset(tr,hd);&#xA;        adr=0;&#xA;        _track=0xFFFFFFFF;&#xA;        }&#xA;    void reset(DWORD tr,DWORD hd)&#xA;        {&#xA;        DWORD i,i0=((tr*heads)+hd)*sectors;&#xA;        for (i=0;i&amp;lt;sectors;i++)&#xA;            {&#xA;            map[i0+i].map=_MFM_map_UNFORMATED;&#xA;            map[i0+i].seq=_MFM_map_UNFORMATED;&#xA;            }&#xA;        }&#xA;    bool search(AnsiString mfm)&#xA;        {&#xA;        int i,adr0=0;&#xA;        WORD s0=0,s1=0;&#xA;        for (i=1;i&amp;lt;=16;i++) s0=(s0&amp;lt;&amp;lt;1)|(mfm[i]-'0');&#xA;        AnsiString s=&quot;0000000000000000&quot;;&#xA;        for (;adr&amp;lt;siz_MFM1;)&#xA;            {&#xA;            s1=(s1&amp;lt;&amp;lt;1)|_rd; adr++;&#xA;            if (s0==s1) { adr-=16; return true; }&#xA;            }&#xA;        adr=adr0;&#xA;        return false;&#xA;        }&#xA;    void write(AnsiString mfm)&#xA;        {&#xA;        for (int i=1;i&amp;lt;=mfm.Length();i++,adr++) { last_bit_wr=mfm[i]-'0'; _wr(last_bit_wr); }&#xA;        }&#xA;&#xA;    BYTE _rd_bit()&#xA;        {&#xA;        BYTE a0=_rd; adr++;&#xA;        BYTE a1=_rd; adr++;&#xA;        if (( a0)&amp;amp;&amp;amp;(!a1)) return 1;&#xA;        if ((!a0)&amp;amp;&amp;amp;( a1)) return 0;&#xA;        if (( a0)&amp;amp;&amp;amp;( a1)) return 0;&#xA;        return 0;&#xA;        }&#xA;    void _wr_bit(bool x)&#xA;        {&#xA;        BYTE a0,a1;&#xA;        if (last_bit_wr)    { a0=1; a1=1; }&#xA;        else                { a0=0; a1=1; }&#xA;        if (x)              { a0=1; a1=0; }&#xA;        _wr(a0); adr++;&#xA;        _wr(a1); adr++;&#xA;        last_bit_wr=x;&#xA;        }&#xA;    BYTE _rd_byte()             { BYTE i,x; for (x=0,i=0;i&amp;lt;8;i++) x=(x&amp;lt;&amp;lt;1)|_rd_bit(); return x; }&#xA;    void _wr_byte(BYTE x)       { BYTE i;   for (i=0;i&amp;lt;8;i++,x&amp;lt;&amp;lt;=1) _wr_bit(x&amp;amp;128); }&#xA;&#xA;    void decode(DWORD _tr,DWORD _hd)&#xA;        {&#xA;        DWORD ma=(_tr*heads+_hd)*sectors;&#xA;        DWORD i,i0,a0,a1,sq,tr,hd,sc;&#xA;        adr=0;&#xA;        reset(_tr,_hd);&#xA;        for (i=0;i&amp;lt;siz_bin;i++) dat_bin[i]=0;&#xA;        // decode track&#xA;/*&#xA;        // find first start of sector exactly&#xA;        for (adr=0;adr&amp;lt;siz_MFM1;)&#xA;            {&#xA;            break;&#xA;            sc=adr; if (!search(&quot;0110110110101011&quot;)) break;         for (i=0;(adr&amp;lt;siz_MFM1)&amp;amp;&amp;amp;(_rd_byte()==0x4E);i++); adr-=16; if (i&amp;lt;10) continue;&#xA;            i0=adr;&#xA;            a0=adr; if (!search(&quot;0101010101010101&quot;)) break; a1=adr; for (i=0;(adr&amp;lt;siz_MFM1)&amp;amp;&amp;amp;(_rd_byte()==0x00);i++); adr-=16; if ((a1-a0&amp;gt;16)||(i&amp;lt;11)||(i&amp;gt;12)) { adr=i0; continue; }&#xA;            a0=adr; if (!search(&quot;1011101101110110&quot;)) break; a1=adr; for (i=0;(adr&amp;lt;siz_MFM1)&amp;amp;&amp;amp;(_rd_byte()==0xA1);i++); adr-=16; if ((a1-a0&amp;gt;16)||(i&amp;lt; 2)||(i&amp;gt; 3)) { adr=i0; continue; }&#xA;            if (_rd_byte()!=0xFE) { adr=i0; continue; }&#xA;            adr=sc;&#xA;            break;&#xA;            }&#xA;*/&#xA;&#xA;/*          // save decoded track to file for analysation&#xA;            for (adr=0,sq=0;sq&amp;lt;siz_bin;sq++) dat_bin[sq]=_rd_byte();&#xA;            sq=FileCreate(&quot;track_d40.bin&quot;);&#xA;            FileWrite(sq,dat_bin,siz_bin);&#xA;            FileClose(sq);&#xA;            adr=0;&#xA;*/&#xA;&#xA;        for (sq=0;adr&amp;lt;siz_MFM1;)&#xA;            {&#xA;            // start of sector id&#xA;&#xA;            if (!search(&quot;0110110110101011&quot;)) break; for (;(adr&amp;lt;siz_MFM1)&amp;amp;&amp;amp;(_rd_byte()==0x4E);); adr-=16; a0=adr;&#xA;            if (!search(&quot;0101010101010101&quot;)) break; for (;(adr&amp;lt;siz_MFM1)&amp;amp;&amp;amp;(_rd_byte()==0x00);); adr-=16;&#xA;            if (!search(&quot;1011101101110110&quot;)) break; for (;(adr&amp;lt;siz_MFM1)&amp;amp;&amp;amp;(_rd_byte()==0xA1);); adr-=16;&#xA;            if (_rd_byte()!=0xFE) continue;&#xA;            tr=_rd_byte();&#xA;            hd=_rd_byte(); hd=(hd&amp;gt;&amp;gt;1)&amp;amp;1;&#xA;            sc=_rd_byte()-1;&#xA;            // start of sector data&#xA;            a0=adr;&#xA;            if (!search(&quot;0110110110101011&quot;)) break; for (;(adr&amp;lt;siz_MFM1)&amp;amp;&amp;amp;(_rd_byte()==0x4E);); adr-=16;&#xA;            if (!search(&quot;0101010101010101&quot;)) break; for (;(adr&amp;lt;siz_MFM1)&amp;amp;&amp;amp;(_rd_byte()==0x00);); adr-=16;&#xA;            if (!search(&quot;1011101101110110&quot;)) break; for (;(adr&amp;lt;siz_MFM1)&amp;amp;&amp;amp;(_rd_byte()==0xA1);); adr-=16;&#xA;            if (_rd_byte()!=0xFB) { adr=a0; continue; }&#xA;&#xA;            if ((sc&amp;gt;=0)&amp;amp;&amp;amp;(sc&amp;lt;sectors)&amp;amp;&amp;amp;(map[ma+sc].map!=_MFM_map_GOOD))&#xA;                {&#xA;                i0=sector_size*sc;&#xA;                for (i=0;i&amp;lt;sector_size;i++) dat_bin[i0+i]=_rd_byte();&#xA;                map[ma+sc].map=_MFM_map_GOOD;&#xA;                if (sq&amp;lt;=9) map[ma+sq].seq='0'+sc;&#xA;                else       map[ma+sq].seq='A'+sc-10;&#xA;                sq++;&#xA;                }&#xA;            else for (i=0;i&amp;lt;sector_size;i++) _rd_byte();&#xA;            if ((adr+1&amp;gt;=siz_MFM1)&amp;amp;&amp;amp;(map[ma+sc].map!=_MFM_map_GOOD))&#xA;                {&#xA;                map[ma+sc].map=_MFM_map_BAD;&#xA;                continue;&#xA;                }&#xA;            }&#xA;        }&#xA;    void encode(DWORD _tr,DWORD _hd)&#xA;        {&#xA;        DWORD ma=(_tr*heads+_hd)*sectors;&#xA;        DWORD sc,i,src;&#xA;        adr=0; src=0;&#xA;        for (i=0;i&amp;lt;siz_MFM2;i++) dat_MFM[i]=0;&#xA;        for (sc=0;sc&amp;lt;encodesectors;sc++) // adr +=9328 per sector&#xA;            {&#xA;            for (i=0;i&amp;lt; 10;i++) write(&quot;0110110110101011&quot;); //0x4E&#xA;            for (i=0;i&amp;lt; 12;i++) write(&quot;0101010101010101&quot;); //0x00&#xA;            for (i=0;i&amp;lt;  3;i++) write(&quot;1011101101110110&quot;); //0xA1 - MFM tag&#xA;            _wr_byte(0xFE);&#xA;            _wr_byte(_tr);&#xA;            _wr_byte(_hd&amp;lt;&amp;lt;1);&#xA;            _wr_byte(sc+1);&#xA;            i=0;&#xA;            if (sector_size==256) i=1;&#xA;            if (sector_size==512) i=2;&#xA;            _wr_byte(i);        // sector size&#xA;            _wr_byte(0xCA);     // CRC - MFM tag&#xA;            _wr_byte(0x6F);&#xA;            for (i=0;i&amp;lt; 22;i++) write(&quot;0110110110101011&quot;); //0x4E&#xA;            for (i=0;i&amp;lt; 13;i++) write(&quot;0101010101010101&quot;); //0x00&#xA;            for (i=0;i&amp;lt;  3;i++) write(&quot;1011101101110110&quot;); //0xA1 - MFM tag&#xA;            _wr_byte(0xFB);&#xA;            for (i=0;i&amp;lt;sector_size;i++,src++) _wr_byte(dat_bin[src]);&#xA;            }&#xA;        decode(_tr,_hd);&#xA;        }&#xA;    #undef _rd&#xA;    #undef _wr&#xA;    };&#xA;//---------------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What you are looking for is the &lt;code&gt;void decode(DWORD _tr,DWORD _hd)&lt;/code&gt; function which decode single track from the stream into Bytes. Pay attention to lines using this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;search(&quot;0110110110101011&quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Its searching the bitstream for specific binary pattern which mark the stuff you are searching for. So the algo is to search binary pattern and then read out all the marker BYTEs used after it like &lt;code&gt;0x4E,0x00,0xA1&lt;/code&gt; depending on the format used by FDC the floppy was created with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its a part of a bigger engine supporting multiple file systems but should be enough to deduce the logic behind the markers and encoding/decoding of MFM stream.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Btw my controller looked like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GBHJU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GBHJU.png&quot; alt=&quot;FDC&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used &lt;a href=&quot;https://www.microchip.com/webdoc/evk1100/pr01.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;EVK1100&lt;/a&gt; for this (just added the 34 FDD connector and needed interconnections)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PS. I found 2 MFM streams so you got something for comparison and test with&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ulozto.net/!0Fz6shMeDTAW/images-zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;sample D40 (MDOS) 5.25&quot; DS DD floppy raw MFM stream images&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also I found this in help/notes files of the project of mine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ZX/PC         Floppy MFM&#xA;&#xA; bit              pulse&#xA;--------------------------------&#xA;X 1    ---|_|    111001&#xA;0 0    |_|---    100111&#xA;1 0    -------   111111&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cioK1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cioK1.png&quot; alt=&quot;WD2797 format&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So once you found the start of the sector in the stream you need to read synchronously whole sector. That means your timing must be stable and precise enough not to corrupt the sector during read...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-10-04T15:43:17.817" LastActivityDate="2018-10-04T15:43:17.817" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7847" PostTypeId="2" ParentId="2436" CreationDate="2018-10-04T15:27:54.910" Score="1" Body="&lt;p&gt;As others have stated, the big question is if you plan on keeping it forever, or selling it one day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, as morbid as it may sound, think about the people you leave behind when you visit the great computer museum in the sky (if that's your belief).  Will your loved ones be able to sell it?  Will they loose lots of money on its sale because you like it to look perfect?  Those are things to think about.  Remember, most family members don't share our love of retro computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, I personally have over 80 computers in my collection.  So during the 20+ years I've been collecting, I've developed a few simple rules I follow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those rules are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1)  I try to have multiple copies of each computer.  One copy for &quot;never touch, leave ugly, never mod&quot; so that &lt;em&gt;IF&lt;/em&gt; I decided to sell (or my family does after I kick the bucket), then it should (hopefully) be the most valuable.  I then have another copy that I may retro-bright, re-cap, mod, etc.   Now, that isn't possible all the time.  As much as I would like to have a few more PET's, for example, they are a little expensive so I only have one.  Same with my boxed Coleco ADAM.  In your case, you only have one (that you mentioned) of the NeXT Cube.  So this rule may not apply to you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2)  If the computer is &lt;em&gt;ALREADY&lt;/em&gt; altered before I got it, then the damage is already done.  For example, I only have one TRS-80 Color Computer 1 that I bought from eBay.  The seller painted it white to match the model 2 an 3.  So, the damage is already there.  I don't feel guilty about stripping that white paint and restoring to silver.  Or even adding a composite mod.  It's never going to be factory original anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3)  If the computer is so damaged that the damage is preventing it from being useful, then I may restore it as best I can.  Cracked cases, engraved initials, etc.  Again, damage has already been done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4)  If the computer (or component) isn't hard to find, isn't expensive and it's ugliness is so bad that I can't stand to look at it, I will restore.  Examples are yellowed Apple keyboards/mice, super orange 1541 drives, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those rules have served me well.  Granted, I'm biased as that I don't collect to make money.  But I realize my large collection will have to be &quot;dealt with&quot; by my family one day so I might as well leave a little bit of profit in it for them.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2018-10-04T15:27:54.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7848" PostTypeId="2" ParentId="4695" CreationDate="2018-10-04T18:59:05.947" Score="4" Body="&lt;p&gt;The &lt;a href=&quot;https://github.com/Microsoft/MS-DOS/blob/master/v2.0/source/README.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;README.txt file in the MS-DOS 2.0 source code&lt;/a&gt;, which was apparently intended to guide OEMs on how to build custom DOS builds for their hardware, indicates that the decision to use backslash was requested by IBM: Microsoft had been originally intending to use forward slash, and the change happened late in the development process.  This is probably why the kernel ended up supporting the use of either character -- it was, presumably, too late to change over fully.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The user manual contains some significant errors.  Most of these are&#xA;  due to last minute changes to achieve a greater degree of compatibility&#xA;  with IBM's implementation of MS-DOS (PC DOS).  This includes the use&#xA;  of &quot;\&quot; instead of &quot;/&quot; as the path separator, and &quot;/&quot; instead of &quot;-&quot;&#xA;  as the switch character.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-10-04T18:59:05.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7849" PostTypeId="2" ParentId="7841" CreationDate="2018-10-04T18:59:27.820" Score="2" Body="&lt;p&gt;Not an emulator but the &lt;a href=&quot;http://www.microcorelabs.com/mcl86.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MicroCore Labs MCL86&lt;/a&gt; is a 8086/8088 core which has the option to be &quot;cycle-compatible&quot; (accurate to within one or two clocks) with a 4.77 MHz 8088. I don't know if it accesses RAM cycle-accurately. A compatible board (Lattice MachXO2-7000HE) is about $30.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-10-04T19:43:08.283" LastActivityDate="2018-10-04T19:43:08.283" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7850" PostTypeId="1" CreationDate="2018-10-04T19:44:26.050" Score="12" ViewCount="2216" Body="&lt;p&gt;How did the vendors using copy protection create weak bits on the floppies?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This always fascinated me as a kid. I ended up finding a weak bit emulator that would intercept the floppy disk interrupt and substitute different values and would be configurable per game but that was clearly software. &lt;/p&gt;&#xA;" OwnerUserId="10818" LastActivityDate="2020-04-14T08:23:59.713" Title="Weak bits on floppy for copy protection" Tags="&lt;floppy-disk&gt;&lt;copy-protection&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7851" PostTypeId="2" ParentId="7841" CreationDate="2018-10-04T19:48:29.810" Score="0" Body="&lt;p&gt;it's not possible to be cycle-exact inside windows or linux because they both have pre-emptive multitasking.  You would have to build this emulator to run inside dos or unix.&lt;/p&gt;&#xA;" OwnerUserId="10819" LastActivityDate="2018-10-04T19:48:29.810" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7852" PostTypeId="2" ParentId="7794" CreationDate="2018-10-04T20:55:06.050" Score="8" Body="&lt;p&gt;Back in the early 90s I used the alternate registers in 3 different ways:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;For task switching in a dual task &quot;operating system&quot;.&lt;/li&gt;&#xA;&lt;li&gt;In a RAM-less control application, temperature sensors and relay control. (208 bits in total was enough).&lt;/li&gt;&#xA;&lt;li&gt;In a floating point library. The latter was also done by several others (and better than my attempt), see for example &lt;a href=&quot;http://www.andreadrian.de/oldcpu/Z80_number_cruncher.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.andreadrian.de/oldcpu/Z80_number_cruncher.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10821" LastActivityDate="2018-10-04T20:55:06.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7853" PostTypeId="2" ParentId="7850" CreationDate="2018-10-04T22:25:31.980" Score="16" Body="&lt;p&gt;&quot;Weak bits&quot; are a means of copy protection that generates areas on a disk that read back as &lt;em&gt;random values&lt;/em&gt;, without the floppy disk controller actually detecting an error. When copying such a weak bit to a new disk with a standard FDC controller, it will end up as a distinct 0 or 1 depending on the random state that it was read in and never change as long as the disk remains intact. The copy protection check will repeatedly read such locations and check whether the bit value actually changes on repeated reads. Obviously, that check needs to be well hidden in the software, otherwise, it could easily be deactivated by malicious people.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The apparently common conception that this would be done with &quot;weak magnetization&quot; or a change in magnetic flux that is &quot;smaller&quot; than normal, is wrong. While this might theoretically be possible (aging disks that can be read successfully after several re-tries seem to prove this), I very much doubt this could be reliably reproduced in mass-production of disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can simply generate such weak areas by &lt;em&gt;not formatting&lt;/em&gt; a specific track (or part of that track) on the disk at all. This will create a complete track of &quot;weak bits&quot; that are entirely unreadable by a normal FDC - Unfortunately, a software pirate can reproduce the same thing with a standard floppy disk controller by simply not formatting that track on his copied disk as well - So, this is maybe too simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's instead done is described in detail &lt;a href=&quot;http://dmweb.free.fr/?q=node/1429&quot; rel=&quot;noreferrer&quot;&gt;in this article&lt;/a&gt; that describes in-depth the analysis of a copy-protected game disk for the Atari ST (Dungeon Master) - Scroll down about 2/3 of the page to where the action starts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a nutshell, the PLL on a disk drive controller relies on somewhat evenly spaced sync bits on the disk to sync its read window (that is, where it expects to be able to read a valid data bit) to the specific RPM of the drive. By deliberately placing some out-of-sync clock bits on the disk, placing a magnetic flux transition exactly where the FDC would assume a stable state and determine a data bit value it can be confused so that it will in fact &quot;read&quot; a random value (within normal RPM variations of the drive it will either &quot;see&quot; a flux transition there or not). A standard floppy disk controller will not be able to write such a timing violation to the disk, thus not be able to copy the &quot;weak&quot; bit, but rather copy it as a &quot;normal&quot;, non-changing bit. You need a disk controller that can record a raw MFM data stream, complete with its timing. So, weak bits are actually not &quot;weak magnetization&quot;, but a violation of the MFM timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.awp1.com/st.html&quot; rel=&quot;noreferrer&quot;&gt;Standard disk copying machines&lt;/a&gt; will not use a standard floppy disk controller and simply copy the low-level MFM data stream with the standard-violating sync bits as-is. The master (at least the affected track) must obviously be written with a specific disk controller that can write such violations. Modern equipment like &lt;a href=&quot;https://www.kryoflux.com&quot; rel=&quot;noreferrer&quot;&gt;Kryoflux&lt;/a&gt; can do that, apparently. I would expect that back in the days similar equipment existed.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-10-04T23:09:30.120" LastActivityDate="2018-10-04T23:09:30.120" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7854" PostTypeId="2" ParentId="7837" CreationDate="2018-10-05T02:59:02.993" Score="10" Body="&lt;p&gt;In the &lt;a href=&quot;https://www.datasheetarchive.com/pdf/download.php?id=12645572424464be54583bf300f8fe6df79529&amp;amp;type=P&amp;amp;term=82459AB&quot; rel=&quot;noreferrer&quot;&gt;Pentium® II Processor Specification Update Release Date: October 1998&lt;/a&gt; errata for the Intel documentation, the entry for A62 states:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Plans - Errata&lt;/p&gt;&#xA;&lt;p&gt;NoFix - SYSENTER/SYSEXIT instructions can implicitly&#xA;load “null segment selector” to SS and CS&#xA;registers&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;SYSENTER would set wrong selectors, but that was okay, because you were still in kernel memory, but as soon as you tried to go back (via SYSEXIT), you would double-fault and crash the system. Linux users that &lt;a href=&quot;https://lists.gt.net/linux/kernel/380245&quot; rel=&quot;noreferrer&quot;&gt;experienced this problem&lt;/a&gt; would get SIGSEGV faults on kernel load, and had to either patch their kernel or roll back until an official patch was put out.&lt;/p&gt;&#xA;&lt;p&gt;In theory, a kernel that was aware of the problem might have been able to work around it, but I couldn't find any specific kernel source or documentation for an OS that used some other means of returning to ring 3 without crashing. SYSENTER/SYSEXIT was only meant as a performance boost over INT/IRET for calling the OS, so there really wasn't a reason to work around it for the potential performance gains.&lt;/p&gt;&#xA;" OwnerUserId="2059" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-10-05T02:59:02.993" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7855" PostTypeId="2" ParentId="7844" CreationDate="2018-10-05T06:01:28.160" Score="1" Body="&lt;p&gt;It functions exactly as you suppose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are no separate clock and data bits in the MFM coding, you have to keep your clocking in sync with the varying bits flow from the disk. Early disk controllers used expensive analog PLLs for that, some later ones, assuming that bit rate won't oscillate that much, used simpler digital PLL-like circuits or even simple counters that were restarted every time next bit came from the drive. In order for that circuitry to function, you need some sync-in period, that could be as small as single &quot;1&quot; bit (I mean here impulse from the drive meaning there was flux change on the disk) for digital circuits or longer amount of impulses for analog ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you've got the bit sync, next task is to get the byte sync, for what exactly IAM/DAM/etc. are used as an easily detectable marker. After getting the DAM, for example, you keep the byte sync you've just got until the end of the sector (incl. CRC byte to be sure you've accepted everything correct).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even in the machines where the burden of MFM decoding left for the software (for example, Commodore Amiga), the detection of 'broken' bytes is still the task of hardware.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2018-10-05T06:16:47.980" LastActivityDate="2018-10-05T06:16:47.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7856" PostTypeId="2" ParentId="2875" CreationDate="2018-10-05T06:49:18.583" Score="6" Body="&lt;p&gt;I use QPCPrint (as mentioned above) on my PC, but have also released my own ESC/P2 to PDF convertor - &lt;a href=&quot;https://github.com/RWAP/PrinterToPDF&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/RWAP/PrinterToPDF&lt;/a&gt;, written in C, which is designed to run on Linux&lt;/p&gt;&#xA;" OwnerUserId="10827" LastActivityDate="2018-10-05T06:49:18.583" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7857" PostTypeId="2" ParentId="6246" CreationDate="2018-10-05T14:16:59.950" Score="4" Body="&lt;p&gt;One can think of the SPC700 as a sort of hybrid 8-bit processor that tries to be a 6502, 65816 (16-bit) and Z80/80x86 (decrement-and-loop type instructions).  As such it does not fit nicely to any of the individual processor architectures.  It uses Z80 (and 80x86) style half-carry/DAA/DAS BCD semantics rather than a decimal mode (making it differ from 6502/65816) and does not have dedicated 16-bit registers (making it not a Z-80 either!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will be much better to hand convert 6502/65816 code into a SPC-700 assembly.  Automagic conversion is going to rely on too much magic to have reliable conversion of arbitrary 6502 code to SPC-700.  Just the decimal mode alone can be an issue if the 6502 code does not statically use CLD/SED around decimal mode logic but conditionally sets it or loads it from a computed-value flag pull (for example computing a value with logic that includes I/O reads into A that results in setting D-bit, PHA, PLP).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will find a lot of code that is cumbersome on 6502/65816 variants (COUGH bit manipulation COUGH) is a lot easier in SPC-700 assembly.  Need bit fields?  No problem!  The SPC-700 can set (SETB), clear (CLRB) and branch (BBC/BBS) on bits arbitrarily and even perform logic within the first 8K of RAM as a large individually addressed bit-field (AND1, OR1, EOR1, etc.)!  The Z-80 doesn't even have that one.  There are decrement-and-branch instructions too with likenings to Z80 (and 80x86)'s famous DJNZ and friends.  You even have cool extras like a multiply and divide operation!  There are also some 16-bit operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With all these extra architectural features it is simply sub-optimal to even attempt a 1-to-1 style conversion since the SPC-700 is going to nicely solve a lot of problems in far fewer instructions than the much larger 6502/65816/Z80 implementations, which will incur further overhead in an automated conversion.  Oh and did I mention the zero (direct) page can also use page one on the SPC-700 (by setting the P bit the direct page instructions will access page 1 meaning you can get a small amount of additional direct page from the bottom of the stack page where the stack never reaches and use the direct page addressing modes within a subroutine to easily handle stacked parameters).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short: the architectural differences are sufficient that any attempt at automated conversions will generate grossly inefficient SPC-700 assemblies.  A good overview of SPC-700 capabilities is here: &lt;a href=&quot;https://wiki.superfamicom.org/spc700-reference&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://wiki.superfamicom.org/spc700-reference&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10833" LastActivityDate="2018-10-05T14:16:59.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7858" PostTypeId="2" ParentId="2875" CreationDate="2018-10-05T14:30:34.747" Score="0" Body="&lt;p&gt;Converting the programs depends on&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;what platform you want to run the programs on;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;how much of the Epson command set you depended on.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you were doing fancy formatting relying on fixed width fonts and tabbing, that kind of formatting has mostly gone away. But if you're just doing bold and maybe centring, then outputting to HTML could be an option. The Epson's bold on/off could easily be replicated with HTML's &lt;strong&gt;&amp;lt;strong&gt; … &amp;lt;/strong&gt;&lt;/strong&gt; markup, for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking for a converter, &lt;a href=&quot;https://pd.spuddy.org/fs/source/usenet/compsrcs/misc/volume20/epsonps/&quot; rel=&quot;nofollow noreferrer&quot;&gt;epsonps&lt;/a&gt; is a basic Epson to PostScript filter. While it's limited it does have the advantage of being developed while dot-matrix printers were a thing, so it makes an attempt to handle most input gracefully.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-10-05T14:30:34.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7859" PostTypeId="1" AcceptedAnswerId="7860" CreationDate="2018-10-05T15:43:59.807" Score="13" ViewCount="3889" Body="&lt;p&gt;I have several retro machines and add-on cards for the Amiga that use ZIP RAM. This vertically mounted chip design enjoyed a brief popularity in the early 1990s, in between the original DIP DRAM and the rise of the SIMM memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage with ZIP over DIP was obvious - more RAM chips in the same board area. Of course, you needed different sockets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SIMM offered the same space advantage, but with a more complicated socket and with the RAM chips having to be soldered onto a PCB. Overall, seems like a more costly way to go than ZIP RAM, but SIMM obviously won in the market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why were the added manufacturing costs for SIMMs not an issue and why did they quickly replace ZIPs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I get that SIMM insertion and removal is relatively easy, but that ease-of-upgrade option only makes sense if it was a major consumer selling point. My recollection is that most motherboard RAM upgrades happened at the point-of-sale, with vendors likely choosing the cheapest solution.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-10-05T15:50:16.550" LastActivityDate="2019-08-31T05:33:13.847" Title="What happened to ZIP RAM?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;memory&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7860" PostTypeId="2" ParentId="7859" CreationDate="2018-10-05T15:55:15.433" Score="21" Body="&lt;p&gt;Right off the top, SIMM type modules have higher pin densities and are mechanically far more robust than that ZIP chip package. It'd be relatively easy to bend pins getting these things in an out (possibly worse than DIPs even), and protecting the pins in transport looks even harder than doing so with DIP chips. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that many retailers are unlikely to admit to having broken the pin off a chip - they'll return it as defective instead. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, each ZIP is one chip, no more, no less. With a SIMM module being a PCB with chips mounted on it, you can build modules in various ways to get the desired density and to use the most cost effective parts available at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, as busses widenened, the advantages of being able to use multiple chips probably were the final determinant.&lt;/p&gt;&#xA;" OwnerUserId="4356" LastActivityDate="2018-10-05T15:55:15.433" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7861" PostTypeId="2" ParentId="7859" CreationDate="2018-10-05T17:21:48.907" Score="15" Body="&lt;p&gt;Separate memory modules on a standardized interface provide several advantages:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Reduced overall production cost&lt;/li&gt;&#xA;&lt;li&gt;Greater flexibility in RAM selection&lt;/li&gt;&#xA;&lt;li&gt;expansion way beyond what a classic (pre-SIMM) motherboard would support.&lt;/li&gt;&#xA;&lt;li&gt;Reduced motherboard design cost&lt;/li&gt;&#xA;&lt;li&gt;Greatly reduced motherboard production cost&lt;/li&gt;&#xA;&lt;li&gt;Faster innovation cycles due to defined and spacious interface definition&lt;/li&gt;&#xA;&lt;li&gt;Move of RAM choice and investment to point of sales (or later)&lt;/li&gt;&#xA;&lt;li&gt;More option and reduced investment for retailers.&lt;/li&gt;&#xA;&lt;li&gt;Modules will be usable across different brands and boards.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And maybe most important&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Greatly reduced cost of memory cards (in addition to reduced mainboard cost)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The advantage with ZIP over DIP was obvious - more RAM chips in the same board area. Of course, you needed different sockets.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's why it was added, and especially used in graphics cards, where space was always a premium - at least when trying to provide upper end features - And RAM was (more often than not) already provided in full with the card.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;SIMM offered the same space advantage, but with a more complicated socket and with the RAM chips having to be soldered onto a PCB. Overall, seems like a more costly way to go than ZIP RAM, but SIMM obviously won in the market.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, as it reduced the amount of parts. Instead of having a socket for each and every ram chip a single socket was needed holding 8 (or sometimes up to 32) chips. Quite a reduction from the point of a motherboard manufacturer. The memory modules itself could carry the chips without any socket. Further it allowed to separate RAM mounting technology (thruhole or SMD) from motherboard manufacturing. A SIMM Module could use any kind of RAM, no matter if it is DIP, SIP, ZIP or SMD like TQFP or BGA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It further decoupled RAM pinout from motherboard layout. Now larger or smaller RAMs from various manufacturers could be incorporated. This include pinouts that were not known/available at the point the motherboard was designed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And most important, it removed the need to design a motherboard for a specific amount of memory and, as follow up, the design of specific memory cards. A motherboard can only hold sockets for a specific amount of RAM of a specific pinout. When they are filled, some kind of memory or I/O bus card must be made to add more memory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using memory modules is, well, modularization. Much like having a nice, clear API, designed with  an upgrade path in mind allows independent development and sales.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So why were the added manufacturing costs for SIMMs not an issue and why did they quickly replace ZIPs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because manufacturing costs were not higher but lower. Lower for all parties involved, Motherboard and RAM module manufacturers as well as retailers.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On the motherboard side, buying one (complex) socket is less expensive then adding 32 (or more) single chip sockets.&lt;/li&gt;&#xA;&lt;li&gt;Similar, placing one (or even 4) SIMM sockets is faster and less expensive than 32 separate sockets.&lt;/li&gt;&#xA;&lt;li&gt;For the RAM manufacturer the board design will be way less expensive than for a traditional (large) memory expansion board (like ISA Memory cards for the PC).&lt;/li&gt;&#xA;&lt;li&gt;Similar board production will cost &lt;strong&gt;way&lt;/strong&gt; less.&lt;/li&gt;&#xA;&lt;li&gt;For the retailer taking the RAM (socket/space) cost out of the motherboard reduces upfront investment on motherboards, as well as on RAM modules&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Note: I get that SIMM insertion and removal is relatively easy, but that ease-of-upgrade option only makes sense if it was a major consumer selling point. My recollection is that most motherboard RAM upgrades happened at the point-of-sale, with vendors likely choosing the cheapest solution.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The profit of vendors/resellers configuring a PC is quite dependent on the time invested to configure a PC to the customers specs, and inserting 8, 16 or more flimsy ZIP chips without bending a pin and good insertion and so on, is a great burden compared with clipping in one or two SIMMs. Time is money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stock cost is as well important for a vendor/reseller.  Modularized structure does enable a considerable lower stock by only holding a few different memory modules instead of many different chips and even more model specific memory expansion boards.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-08-31T05:33:13.847" LastActivityDate="2019-08-31T05:33:13.847" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7862" PostTypeId="2" ParentId="7859" CreationDate="2018-10-05T19:06:57.443" Score="6" Body="&lt;p&gt;The ZIP package was mostly replaced by better packages.  Ignoring for a moment the variety of memory modules (DIMM etc) most memories moved to SOP, SOIC, TSOP or BGA for higher pin density, improved mechanical stability and lower package height. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of the new packages suffer from the bending torsion that made ZIP packages prone to damage. Further they do not require the package to maintain the complex bending of pins that ZIP requires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these result in lower manufacturing costs and fewer system failures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you imagine trying to do a Raspberry PI with ZIP memory? Me neither.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastEditorUserId="4066" LastEditDate="2018-10-06T03:49:29.267" LastActivityDate="2018-10-06T03:49:29.267" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7863" PostTypeId="2" ParentId="7777" CreationDate="2018-10-05T20:38:28.273" Score="3" Body="&lt;p&gt;Here's the start of an answer. Run this command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;gcc -print-search-dirs | grep '^programs:'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That will tell you where gcc thinks &lt;strong&gt;as&lt;/strong&gt;, the assembler program, ought to be. Then run&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;find / -name as -print&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That will tell you where it actually is, if you have one installed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have an &lt;strong&gt;as&lt;/strong&gt; anywhere, you could try the downloadable MIPSPro CD ISO files on archive.org. It's not clear if you need a license file to run MIPSPro's &lt;strong&gt;as&lt;/strong&gt;, but if you do, you're probably stuck, because those license files have to be generated for specific machines, and I don't think anyone has the generator for that since the remains of SGI abandoned Irix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another place to try is &lt;a href=&quot;http://irix.cc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;irix.cc&lt;/a&gt;, which seesm to be where the Irix people hang  out these days. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet another is &lt;a href=&quot;https://winworldpc.com/product/irix/6522&quot; rel=&quot;nofollow noreferrer&quot;&gt;winworldpc.com&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2018-10-12T10:02:41.883" LastActivityDate="2018-10-12T10:02:41.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7864" PostTypeId="2" ParentId="7777" CreationDate="2018-10-05T23:23:50.920" Score="6" Body="&lt;p&gt;The SGI builds I have seen require you also have the MIPSpro tools installed on your Irix system as gcc does not include an assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to cross compile a gcc and binutils for Irix on a PC however you'll still need the headers and libraries so I am not sure you can avoid needing MIPSpro or the IDF/IDL developer library CD-ROMs even then. You will probably also need a matching libg++.&lt;/p&gt;&#xA;" OwnerUserId="8813" LastActivityDate="2018-10-05T23:23:50.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7865" PostTypeId="2" ParentId="3314" CreationDate="2018-10-05T23:41:48.307" Score="5" Body="&lt;p&gt;I can only answer authoritatively for Adventure International UK, as I worked there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX spectrum games were cross assembled on a TRS80 (model III or 4 I think III but it was a long time ago) with floppy disks using the standard rather nice TRS80 Z80 development tools. We had a magic cable that went from the TRS80 to the tape port of the spectrum and a tool that bitbanged the spectrum tape protocol.&lt;/p&gt;&#xA;" OwnerUserId="8813" LastActivityDate="2018-10-05T23:41:48.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7866" PostTypeId="1" AcceptedAnswerId="7867" CreationDate="2018-10-06T01:25:18.180" Score="7" ViewCount="1042" Body="&lt;p&gt;Have video game developers blocked the ability of &lt;a href=&quot;https://en.wikipedia.org/wiki/GameShark&quot; rel=&quot;noreferrer&quot;&gt;GameShark&lt;/a&gt; to find unused content in games (that they either didn't have time to remove unused, or plan to use in an updated version or sequel)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could only assume that developers weren't too pleased about the GameShark and it's capabilities, but I doubt there was anything they could do about it.  &lt;/p&gt;&#xA;" OwnerDisplayName="user10643" LastEditorUserId="3683" LastEditDate="2018-10-06T14:43:17.320" LastActivityDate="2018-10-06T14:43:17.320" Title="Was there any indication that video game companies tried to circumvent Game Shark?" Tags="&lt;history&gt;&lt;gaming&gt;&lt;game-cartridge&gt;&lt;nintendo-64&gt;" AnswerCount="2" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="7867" PostTypeId="2" ParentId="7866" CreationDate="2018-10-06T10:23:16.747" Score="8" Body="&lt;p&gt;Yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TV Tropes &lt;a href=&quot;https://tvtropes.org/pmwiki/pmwiki.php/Main/NoFairCheating&quot; rel=&quot;noreferrer&quot;&gt;NoFairCheating&lt;/a&gt; page lists a number of games that would react to the use of GameShark including Donkey Kong 64:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Using any Gameshark code in this game will cause DK to spasm uncontrollably throughout the game. Even in the opening. Also, your cartridge will be permanently damaged if you save. To such a level that you cannot pick up any items and you drop dead from taking a single hit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Developers have at least two options when faced with hardware like the GameShark that can modify RAM contents.  One is to obscure their code and data.  Make it so that critical variables are not stored in an obvious manner (e.g., store the number of lives N as N + 10000).  The other is to do tamper checks on the data.  For instance, keep checksums of data blocks as you change them and look to see that the checksum is still correct before you update.  These examples are trivial countermeasures but there are schemes much more difficult to circumvent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One side of the coin is making cheats difficult to discover.  The other is making them difficult to apply.  Ideally the difficulty is so high that the GameShark hacker cannot figure it out or the exploit is too complicated for the GameShark to apply.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2018-10-06T10:23:16.747" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7868" PostTypeId="2" ParentId="7866" CreationDate="2018-10-06T10:25:32.473" Score="5" Body="&lt;p&gt;As far as I see, this is rather two questions. One is &lt;em&gt;if companies tried to circumvent GameShark &lt;strong&gt;at all&lt;/strong&gt;&lt;/em&gt;, as the title suggests, the other if they &lt;em&gt;tried to obfuscate media content not needed&lt;/em&gt; as the question body suggests.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;'Handling' GameShark in General&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Yes, it's something done &lt;a href=&quot;https://en.wikipedia.org/wiki/Pinball#1933:_Electrification_and_active_bumpers_introduced&quot; rel=&quot;nofollow noreferrer&quot;&gt;since the first flipper adds a 'TILT' light bulb&lt;/a&gt;. Not only did game developers try to make their games tamper proof (handlingwise or via software/hardware add ons), but even more game console makers did include measures to (at best) prevent the use of such devices in their OS/standard routines.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Obfuscating Unused Media Content&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Suppose a video game company didn't have time to remove unused content in a game, [...] did any video game company try to block the use of the GameShark? Or at least make it harder for the GameShark to find hidden content?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Erm… doesn't that answer this the question already? If a company doesn't have resources/time to simply delete unused files (*1), from the generated environment before going gold, where should then the time come in to introduce complicated measures to hide this content?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing so would mean the developer (development tools) would have to touch &lt;em&gt;especially&lt;/em&gt; all unused files and cloud them with some sophisticated program. Issuing a simple delete (or skip transfer) for these files seems way more sensible than writing even more software to hide them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if we drop the question requirement about &lt;em&gt;unused&lt;/em&gt; files, but consider obscuring about &lt;em&gt;every&lt;/em&gt; media file, the situation may look different. Still, it would be some/a lot additional development to fit in an already tight schedule (*2). Not to mention, that doing so would put the same hurdle onto the game itself, slowing it down by the additional decoding that would have had to be done (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One could imagine it as, for whatever reason, planned feature to veil &lt;em&gt;all&lt;/em&gt; content to prevent players to peek ahead. In this case, it may be as well possible that InterAct (or who ever developed it at the time) just adds the same decoder to the next release/update (*4). Adding that sounds more like a loose/loose situation for game makers who usually already struggle to get the wonderful action they had imagined worked into a real game using the limited resources of a console.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I could only assume that developers weren't too pleased about the GameShark and it's capabilities&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Lets be serious, why shouldn't they? It's content they made, thus they may as well enjoy people appreciating it. But, as usual, marketing is way more relevant than any artistic part (or shame about unfinished parts). And marketing is always and everywhere quite happy about any news the game will create. A secret level… ooooh, shiney; hints about a follow up… cool; a hero selfie hidden in the game… what a great story. After all, each and every of such 'hidden' feature gets to sell more copies (*5).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but I doubt there was anything they could do about it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure, there is, just, as usual, it takes quite some knowledge and even more time to implement. And at least the later is a premium during game development, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - As I understand this is about the feature of (some) GameShark versions to browse CD content for pictures, videos and sounds/music.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Basic assumption was that there is not enough time to delete unused content before going gold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - At least wrappers to decode the obfuscated/encrypted format into standard before handing it over to relevant player functions of the OS – if that's possible at all due memory and CPU constrains.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Chances would be high that such a obfuscation scheme would not be used for only one game, so there's an opportunity for even more GameShark features, making it sell better (or even twice to the same customer :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - This may destroy some players image about developers, players and the industry at all, but most 'hidden' features are not discovered by energetic hard core gamers trying every lever combination in a dungeon with differently coloured hats worn, but simply given away to journalists (or today some web forum) at some point to increase sales.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2018-10-06T13:35:50.813" LastActivityDate="2018-10-06T13:35:50.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7869" PostTypeId="1" CreationDate="2018-10-06T11:45:13.600" Score="4" ViewCount="124" Body="&lt;p&gt;I'm building a FDD controller out of a $10 microcontroller. It's mostly working pretty well, and I can read both 720kB and 1440kB PC MFM disks (the only ones I have to test with).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;However&lt;/em&gt;... if I read a 720kB disk, then change disks to a 1440kB disk and try to read that, I get weird sporadic data dropouts in the pulse stream from the drive --- I mean, long sequences where I get no pulses at all. (And, very occasionally, sometimes no data shows up at all; READ DATA remains at 5V for the duration of the track.) I can detect these and retry and mostly they go away:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;&#xA;Track 68 side 0: 179 ms in 75904 bytes, 1 dropouts&#xA;Track 68 side 1: 179 ms in 75904 bytes, 1 dropouts&#xA;Track 69 side 0: 180 ms in 75904 bytes, 1 dropouts&#xA;Track 69 side 1: 84 data dropouts, retrying&#xA;Track 69 side 1: 179 ms in 75840 bytes, 0 dropouts&#xA;Track 70 side 0: 179 ms in 75904 bytes, 1 dropouts&#xA;Track 70 side 1: 179 ms in 75904 bytes, 0 dropouts&#xA;Track 71 side 0: 200 data dropouts, retrying&#xA;Track 71 side 0: 90 data dropouts, retrying&#xA;Track 71 side 0: 179 ms in 75904 bytes, 0 dropouts&#xA;Track 71 side 1: 180 ms in 75904 bytes, 0 dropouts&#xA;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This only happens the first couple of reads after changing disks. If I leave a 1.44MB disk in the drive for a while, the drive seems quite happy and I get reliable data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact that these go away on retry indicates that it's not anything to do with the &lt;em&gt;disk&lt;/em&gt; at all, and I'm nervous that there's some sort of calibration after media change which I should be doing but aren't. Some of my data sheets (e.g. &lt;a href=&quot;https://hxc2001.com/download/datasheet/floppy/thirdparty/Teac/TEAC%20FD-05HF-8830.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hxc2001.com/download/datasheet/floppy/thirdparty/Teac/TEAC%20FD-05HF-8830.pdf&lt;/a&gt;) mention autocalibration but don't actually explain what this is...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'm doing on disk change is a standard homing sequence, where I seek back to track 0, then I seek one more step (as one of my data sheets suggested that seeking to track -1 was necessary to reset the DISK CHANGE line), and then I seek to the track I want to read. I don't seek between retries. I always read a complete track at a time, from one index pulse to the next. I have generous delays at each stage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've played with the DENSITY SELECT line and it seems to make no difference --- I think my drive ignores it and figures it out automatically from the hole in the disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anything obvious I'm missing here?&lt;/p&gt;&#xA;" OwnerUserId="6846" LastActivityDate="2018-10-06T16:01:10.730" Title="FDD data dropouts after changing disks" Tags="&lt;floppy-disk&gt;&lt;data-preservation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7870" PostTypeId="1" AcceptedAnswerId="7872" CreationDate="2018-10-06T12:47:17.430" Score="20" ViewCount="2971" Body="&lt;p&gt;Basically any computers from the mid 90s and earlier perform a slow memory check on every single boot. The more memory there is present, the slower that process becomes, for example: &lt;a href=&quot;https://www.youtube.com/watch?v=A3Po8zneaLE&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=A3Po8zneaLE&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why are they doing that? Modern computers, as far as I am aware of, only check their memory when explicitly told to. What exactly are retro computers doing during that check that more modern computers seem to not do and why?&lt;/p&gt;&#xA;" OwnerUserId="10845" LastActivityDate="2018-11-28T12:55:31.263" Title="Why do old computers perform a long memory test on every boot?" Tags="&lt;hardware&gt;&lt;memory&gt;&lt;boot&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7871" PostTypeId="2" ParentId="7869" CreationDate="2018-10-06T12:47:20.363" Score="2" Body="&lt;p&gt;HD floppies (both 1.44MB 3.5&quot; HD and 1.2MB 5.25&quot; HD floppies) have a different coating with a different coercivity (for details see e.g. &lt;a href=&quot;http://www.retrotechnology.com/herbs_stuff/drive.html#data&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. At least for writing (and maybe also for reading, I am not sure) you need change the characteristics of the analog circuitry, and possibly also timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So there is a fundamental difference. Your drive may indeed take care of this detecting the hole in the floppy, but it additionally may also need a correct &lt;code&gt;density select&lt;/code&gt; line, because IIRC one could format HD disks for DD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dropouts could very well be related to the different coercitivity - if the signal is weaker because the analog circuits are set up for the wrong coercitivity, and especially weak in some parts of the disk, then the PLL (or whatever the drive uses) may not synchronize correctly, and you won't get a signal. OTOH, on a second attempt, it may just work fine depending on what state the PLL is in when it hits the weak part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So much at least for the background, I don't have a concrete suggestion how to fix this - in your place, I'd use a scope and see how the signals in various places look.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-10-06T12:47:20.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7872" PostTypeId="2" ParentId="7870" CreationDate="2018-10-06T13:23:32.307" Score="23" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why are they doing that?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The most important reason is that IBM introduced that check as part of the BIOS startup code, so everyone copied it to be compatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PC did differ from many other machines of the same era in that it did a thorough test of all components installed at power up to make sure the configuration was operable. Something carried over from mainframes or similar professional systems. Other machines just initialized components and let the user guess what the problem was when an error occurred.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Modern computers, as far as I am aware of, only check their memory when explicitly told to.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;RAM got more reliable over the years. Equally important, RAM size increased manyfold, making a thorough memory test anything but quick. Last but not least, memory design for PCs did split in the (late) 90s between consumer PC with error detection (like the first PC) and professional machines with error correction (ECC). Where consumer grade machines just let the process/OS die on the user, professional systems will not only correct starting RAM failure, but also report it which (hopefully) leads to preemptive RAM change.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What exactly are retro computers doing during that check that more modern computers seem to not do&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Various bit patterns are written to RAM and read again to detect cell failure or certain kinds of crossover. The test is split into two parts: base RAM (first 16/64 KiB, *1,2) and memory above 64 KiB. On AT (286+) class machines, a third (faster) test may be used for memory above 1 MiB (*3), together with an additional test in protected mode and even more diverging POST codes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conventional memory (up to 1 MiB ,*4) is checked in 4 KiB blocks (*5) and reported as such. The BIOS halts if there is an error in the first 16 KiB (original PC) or first 64 KiB (XT and above).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bit pattern used (*6) for the first 64 KiB is &lt;code&gt;AA&lt;/code&gt;, &lt;code&gt;55&lt;/code&gt;, &lt;code&gt;00&lt;/code&gt;, &lt;code&gt;FF&lt;/code&gt;, &lt;code&gt;01&lt;/code&gt;, &lt;code&gt;02&lt;/code&gt;, &lt;code&gt;04&lt;/code&gt;, &lt;code&gt;08&lt;/code&gt;, &lt;code&gt;10&lt;/code&gt;, &lt;code&gt;20&lt;/code&gt;, &lt;code&gt;40&lt;/code&gt; and &lt;code&gt;80&lt;/code&gt;. They are written (and read) in a way to not only detect single bit failures, but also address and data line mismatch/failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the remaining memory it is shortened to &lt;code&gt;AA&lt;/code&gt;, &lt;code&gt;55&lt;/code&gt;, &lt;code&gt;FF&lt;/code&gt;, &lt;code&gt;00&lt;/code&gt; and &lt;code&gt;01&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.esacademy.com/en/library/technical-articles-and-documents/miscellaneous/software-based-memory-testing.html&quot; rel=&quot;noreferrer&quot;&gt;Here is a nice explanation&lt;/a&gt; of basic bit walking and increment tests similar to what the PC does/did and what it will show.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and why?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To alarm the user of an imminent RAM problem &lt;em&gt;before&lt;/em&gt; it occurs so that they don't lose hours of work due to a flipped bit.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - 16 KiB on the first series of 5150 PCs (64 Kib Motherboard), 64KiB on the later (256 KiB motherboard and XT)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - On the XT there is a separate BIOS POST code for the first 32 KiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The beep codes do not distinguish between above 64 KiB and above 1 MiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Well, in reality on the early PCs only until 544 KiB. Later PCs would go until 640 KiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Looks like a hint as if they expected 4 KiB chips to be used - at least during early development stage - or that test was copied from some other device using them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Caveat: Bit patterns are taken from an old man's memory. To verify, browsing the BIOS would be helpful.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="1928" LastEditDate="2018-10-06T19:36:18.763" LastActivityDate="2018-10-06T19:36:18.763" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="7873" PostTypeId="1" AcceptedAnswerId="7878" CreationDate="2018-10-06T15:48:40.743" Score="8" ViewCount="1684" Body="&lt;p&gt;I was reading on &lt;a href=&quot;https://www.theinquirer.net/inquirer/news/2200600/rare-final-fantasy-ii-nes-demo-cartridge-selling-for-usd50-000-on-ebay&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; page about the Final Fantasy demo cartridge, and I wondered why more cartridge games didn't have demos. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;https://en.wikipedia.org/wiki/Game_demo&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; wiki page:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The availability of demos varies between formats. Systems that use&#xA;  cartridges typically did not have demos available to them, due to the&#xA;  cost of duplication, whereas systems supporting more cheaply produced&#xA;  media, such as tapes, floppy disks, and later CD-ROM and DVD-ROM have;&#xA;  the Internet has more recently been a source for demos, although&#xA;  typically this is in addition to other distribution media available&#xA;  for the system in question. Also the Xbox Live as well as other gaming&#xA;  services have demos available for download 24/7.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Was cost really the reason why cartridge games didn't have more demos? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The company still had to mass produce the full game, I don't see why they couldn't implement a system where if the player was interested they could produce them as needed. For example, special order a demo and get it in the mail.  &lt;/p&gt;&#xA;" OwnerDisplayName="user10643" LastActivityDate="2020-01-21T09:17:22.720" Title="Was cost the only reason why demo cartridge games weren't produced?" Tags="&lt;history&gt;&lt;gaming&gt;&lt;game-cartridge&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7874" PostTypeId="2" ParentId="7869" CreationDate="2018-10-06T16:01:10.730" Score="6" Body="&lt;p&gt;Solved:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Turns out that my microcontroller board, an otherwise excellent Cypress CY8CKIT-059 PSOC5LP, had a 1uF capacitor between DENSITY SELECT and ground. So, whenever that pin changed state, the value the drive saw would change quite slowly over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Crudely ripping it off the board made it all work. Frankly, I'm amazed it did anything useful at all without that fix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key insight here was observing that if I changed floppies, reads would fail for a certain wall clock time and then everything would be fine. At which point I remembered the capacitors. This is the third time I've been bitten by this for only two PSoC based projects...&lt;/p&gt;&#xA;" OwnerUserId="6846" LastActivityDate="2018-10-06T16:01:10.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7875" PostTypeId="2" ParentId="7873" CreationDate="2018-10-06T16:37:26.437" Score="12" Body="&lt;p&gt;It might be useful to define the term &lt;em&gt;demo&lt;/em&gt; first. To my understanding demo in the questions context means a in functional (level, etc.) restricted game meant to be given to end customers so they can test the game and buy the real copy later on (lets call it Demotype A), versus demo as in a not for resale demonstartion of the whole (or at least in stage of development whole) game given out to potential sales partners, development partners, or journalists for pre-gold reporting (lets call it DemoType B; *1).&lt;/p&gt;&#xA;&lt;h2&gt;Demotype B&lt;/h2&gt;&#xA;&lt;p&gt;As of this, the mentioned example is only a a demo of the later kind (Type B). For this kind per unit investment is rather irelevant, as doing a presentation where it gets used costs way more than the hardware needed to produce one (or a few) - which isn't cheap either (*2). For this kind of usage 'only' a development snapshoot (test version) is needed, as it's not intended for use by end users (*3). Everyone targeted will be aware that it's a preliminary, potential untested and buggy version. A restriction of features is not neccessary for this audience - saving to put additional time constrains to already stressed development (Is there any game development without?).&lt;/p&gt;&#xA;&lt;h2&gt;Demotype A&lt;/h2&gt;&#xA;&lt;p&gt;Producing demos of the first kind (Type A) in contrast must come with a cost comparable to other kinds of advertisement. Maybe a bit higher as it is more targeted, but not much. Making a CD, even with a run of just a few thousand, was already way below 50 cent per unit, including a printed cover. And with higher volume the cost dropped even further, making it feasible to use it as advertisement.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, making a cartridge involves not only the standard parts like PCB, plasic hull and sales cover (which in itself already go past the 1 USD mark in the 1990s) but also making a ROM. Doing a ROM has a base price of &amp;gt;20 grand for mask and run cost plus per chip cost. Switching to programmable technologies only saves for very small runs, as it only removes (most of) the setup cost, but adds higher per unit cost - not just because the devices used (PROMs) are more expensive than similar sized ROMs, but due the handling effort in programming them.&lt;/p&gt;&#xA;&lt;p&gt;So handing out a demo-CD will be not much cost to start with, demo-ROMs do have a hefty initial price tag. And while both decrease over volume, the starting cost for a cardridge are much higher than for a CD - and even in high volume will not reach a region even remote acceptable.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: Way too expensive.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Supercat's '&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7878/6659&quot;&gt;answer&lt;/a&gt;' reminds me that there is another possible meaning of 'demo', not targeted by this question: &lt;em&gt;Demo&lt;/em&gt; as an art form defind and nurtures by the &lt;a href=&quot;https://en.wikipedia.org/wiki/Demoscene&quot; rel=&quot;nofollow noreferrer&quot;&gt;demoscene&lt;/a&gt;. These demos are written for competition or fun, showing off the capabilities of machines and their programmers. While not realy related to the question asked, some of these demos get distributed as cardridges in (very) small production runs, but even for module based consoles, the usual distribution form is via archives on the net - an usually free to be copied anyway.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Keep in mind, we are talking cost for a company, not just cost of parts as some hobbyist may count. Each additional hour developers have to spend to prepare a snapshot, the time this snaopshot gets moved into an (E)PROM, someone dies a label and explains the dos and don'ts to whoever is doing the presentation costs hundrets of dollars, making the material bill cost irrelevant.&lt;/p&gt;&#xA;&lt;p&gt;*3 - &lt;em&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7873/was-cost-the-only-reason-why-demo-cartridge-games-werent-produced/7875?noredirect=1#comment22739_7875&quot;&gt;R..&lt;/a&gt;&lt;/em&gt; Asked about using such demos for potential customers in stores or at trade shows. In such situations a restricted version does not make much sense. When a game hits stores, a regular cardridge will do the same, so not worth any investment.&lt;/p&gt;&#xA;&lt;p&gt;Similar for trade shows after the game got published. Now for shows prior to release, game developers are rather relucant to let anyone in the general public play the game. Any bad user experiance due being unfinished will for sure result in a bad reputation of a game (happened almost always when developers tried that route). A marketing desaster no developer or even less publisher wants to create. Not to mention that, when going gold closes in, developers won't have much time to curate, test and debug a special demo version anyway.&lt;/p&gt;&#xA;&lt;p&gt;So, while the hardware may not be a big deal for such a small number of demo cardridges, their implications are way too dangerous to even think about.&lt;/p&gt;&#xA;&lt;p&gt;Last but not least, for pure in-store displays a recorded play video (real VHS video in the 80s and 90s :)) will be way more apropriate to shoow off features without risking bugs to damage the rep and without all the costs associated with it. The one playing the demo will be someone knowing to only use features that are already finished (and intended to be shown) - basicly replacing the whole eford to code the demo parts at all.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-10-07T07:00:05.727" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7876" PostTypeId="2" ParentId="6797" CreationDate="2018-10-06T19:53:21.007" Score="3" Body="&lt;p&gt;The biggest single problem with long-persistence green monitors is that they were extremely vulnerable to burn-in unless you kept the intensity relatively dim. Amber monitors were usually a lot brighter. Computers like the TRS-80 Model I and Commodore PET didn't use long-persistence grayscale... they used picture tubes literally manufactured for use in normal black &amp;amp; white TVs to cut costs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I recall, long-persistence white phosphors existed, and weren't outrageously expensive at the manufacturing level... but they had even bigger problems with burn-in than LP green phosphors did... partly, due to differences in the way people USED long-persistence black &amp;amp; white monitors vs the way they used green or amber. With green and amber, people generally used colored text on a black background. With long-persistence WHITE, people wanted black text on white backgrounds, which caused the monitor to visibly burn in even faster. White backgrounds on 60hz monitors with normal-persistence phosphors were kind of distracting... they didn't necessarily flicker while you were looking straight at them (though they did), but if you tried reading from a book in your lap while using one, you'd REALLY notice the flicker in your peripheral vision. 50hz was even worse... it flickered even if you looked directly at it, and almost felt like a strobe light if you tried reading a book in your lap with the screen visible in your peripheral vision (at least, on a Palbooted American Amiga with a color monitor in a room with 60hz incandescent lights, which might have made the strobing effect worse than it would have appeared to someone in a country where the room lights were flickering at 50hz as well).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I recall, green (and probably long-persistence monochrome monitors in general) had TWO intensity controls... a recessed one on the rear (that usually required a screwdriver to turn), and the &quot;official&quot; one near the front. The rear one established the maximum-allowed brightness... the front one allowed users to adjust the brightness between &quot;totally black&quot; and &quot;the limit established by the rear control&quot;. In most cases, the maximum-permitted intensity was WAY lower than users would have really preferred, especially in brightly-lit rooms. And despite their relative dimness compared to amber, green monitors STILL ended up with visible burn-in artifacts long before amber monitors of comparable age.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I was in college (circa 1992), the University had a mix of green, amber, and color monitors in the computer labs. The amber ones were generally less-preferred than the color monitors (unless it came down to, &quot;non-IBM clone with color monitor and mushy keyboard vs IBM VT-102 terminal with silicone-greased clicky-keyboard and amber monitor), but EVERYONE hated the green ones. They were dim, had burn-in artifacts, and just generally weren't nice to use.&lt;/p&gt;&#xA;" OwnerUserId="4169" LastActivityDate="2018-10-06T19:53:21.007" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7877" PostTypeId="2" ParentId="7873" CreationDate="2018-10-06T19:55:44.873" Score="2" Body="&lt;p&gt;To add to @Raffzahn's excellent answer, and considering that the question asks if &lt;strong&gt;cost was the &lt;em&gt;only&lt;/em&gt; reason&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are going to make a &lt;em&gt;demo with reduced functionality&lt;/em&gt;, then someone will need to decide what features are being taken out, implement that, and test it.  These tasks take extra developer time.  There would also be extra production time needed.  If you want to get your product to market as soon as possible, &lt;strong&gt;time would be a consideration&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naturally, these would also add to the costs, but would probably be less that the production costs.  I agree with Raffzahn that the cost is the main reason for not making demos.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;An &lt;em&gt;unrestricted demo&lt;/em&gt; (Raffzahn's second definition) depends on the audience:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Copies that are shared with business partners as the game is under development would often be on the medium of the development system, rather than the medium of the final product.  (Or just invite their people over to your office to try it on the development system.)&lt;/li&gt;&#xA;&lt;li&gt;Master copies used for production of the final product would be on whatever medium is accepted by the duplicator.&lt;/li&gt;&#xA;&lt;li&gt;Reviewer copies would be early productions (possibly proofs) of the final product.  They might be specially packaged or labeled to prevent resale.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Unrestricted demos therefore don't have much impact on the cost or time of the final product.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2018-10-07T00:20:36.413" LastActivityDate="2018-10-07T00:20:36.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7878" PostTypeId="2" ParentId="7873" CreationDate="2018-10-06T22:44:00.690" Score="2" Body="&lt;p&gt;For many demos, the vast majority of copies were produced not by the creators of the demos, but by other people who wanted to share them.  Consequently, someone writing a demo may have many thousands of copies distributed at essentially no cost.  Such a distribution approach works great with formats that can be reproduced by recipients; it doesn't really work with most cartridge formats, however.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-10-06T22:44:00.690" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7879" PostTypeId="1" CreationDate="2018-10-07T05:23:29.350" Score="2" ViewCount="606" Body="&lt;p&gt;I have an Indy running on IRIX 6.5. The main web browser cannot run very many websites. Are there any other more modern browsers that I can use to run websites such as wayback machine? When I try to run way back machine, I either get a HTML error message or the browser crashes. I have the internet working, and google works about 50%. Is there a better alternative for IRIX than this 1994 web browser?&lt;/p&gt;&#xA;" OwnerUserId="10529" LastActivityDate="2019-03-07T17:01:51.373" Title="Does IRIX 6.5 on an Indy support other web browsers other than Netscape? If so, where can I find them?" Tags="&lt;netscape&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7880" PostTypeId="1" AcceptedAnswerId="7884" CreationDate="2018-10-07T09:16:19.353" Score="62" ViewCount="14786" Body="&lt;p&gt;Recently, Microsoft published the &lt;a href=&quot;https://github.com/Microsoft/MS-DOS&quot; rel=&quot;noreferrer&quot;&gt;source code of old MS-DOS versions on GitHub&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is odd in my opinion is the use of x86 assembly language for everything. The assembly language would not be my first choice for implementing an operating system. At the time MS-DOS was created, the C programming language had already been invented in Bell Labs, offering a good compromise between low level and high level programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was this assembly language approach used also in the newest versions of MS-DOS in the 1990s?&lt;/p&gt;&#xA;" OwnerUserId="6487" LastEditorUserId="824" LastEditDate="2018-10-08T06:30:18.833" LastActivityDate="2020-11-15T12:05:18.727" Title="Were later MS-DOS versions still implemented in x86 assembly?" Tags="&lt;history&gt;&lt;assembly&gt;&lt;operating-system&gt;" AnswerCount="13" CommentCount="20" FavoriteCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="7881" PostTypeId="2" ParentId="7880" CreationDate="2018-10-07T10:29:50.857" Score="8" Body="&lt;p&gt;Yes - C has been around since 1972 but there were no MS-DOS C compilers until the late 80s.  To convert an entire OS from Assembler to C would be a mammoth task.  Even though it might be easier to maintain, it could be a lot slower.&lt;/p&gt;&#xA;&lt;p&gt;You can see the result of conversion when you compare Visual Studio 2008 to VS2010.  This was a full blown conversion from C to C#.  OK - it is easier to maintain from the Vendor's point of view but the new product is 24 times slower: on a netbook, 2008 loads in 5s, 2010 takes almost 2 minutes.&lt;/p&gt;&#xA;&lt;p&gt;Also, DOS was a 16-bit OS in a 20 bit address space.  This meant that there was a lot of segmented addressing and a few memory models to choose from (Tiny, Compact, Medium, Large, Huge): not the flat addressing that you get in the 32-bit/64-bit compilers nowadays.  The compilers didn't hide this from you: you had to make a conscious decision as to which memory model to use since changing from one model to another wasn't a trivial exercise (I've done this in a past life).&lt;/p&gt;&#xA;" OwnerUserId="5311" LastEditorUserId="15334" LastEditDate="2020-11-15T12:05:18.727" LastActivityDate="2020-11-15T12:05:18.727" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="7882" PostTypeId="1" AcceptedAnswerId="7886" CreationDate="2018-10-07T11:36:28.397" Score="10" ViewCount="1039" Body="&lt;p&gt;I'm trying to identify a game I remember from my first exposure to computers (the Apple II at secondary school back in the late '70s).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember two games I really enjoyed, the first a Star-Trek-like game which was a sneaky way of teaching us trigonometry (the 8-by-8 grids where the Klingons et al were had to be shot at by using degrees, so we had to convert in our head based on the non-hypotenuse sides of the triangle). I already have that one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the &lt;em&gt;other&lt;/em&gt; game I enjoyed was some form of space trading game. It had companies like Betelguese Bargains, Capella Corp and Eridani Enterprises (I made those first two up, my memory from forty years ago is &lt;em&gt;not&lt;/em&gt; pristine, but they all had some star name as the first word - I &lt;em&gt;think&lt;/em&gt; the Eridani one was accurate).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These were represented on text screen as the equivalent letter (like &lt;code&gt;B&lt;/code&gt;, &lt;code&gt;C&lt;/code&gt; or &lt;code&gt;E&lt;/code&gt;) and you expanded your company by selecting new (adjacent) co-ordinates in the galaxy to move in to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you encountered another company, it would result in some form of take-over operation, probably based on size with some minor random element.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The object, of course, was to be the last company standing by taking over all the others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any memories of this game or any idea what it might be called? None of the games in the &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Apple_II_games&quot; rel=&quot;noreferrer&quot;&gt;Apple II list&lt;/a&gt; seem to be a match.&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastActivityDate="2021-04-20T10:15:19.937" Title="Trying to identify an Apple II space trading game" Tags="&lt;apple-ii&gt;&lt;identify-this-game&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7883" PostTypeId="2" ParentId="7880" CreationDate="2018-10-07T12:39:39.027" Score="4" Body="&lt;p&gt;Answering the question - yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the rationale: there's very little gain in rewriting functioning code (unless for example you have portability specifically in mind).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;newest version&quot; of any major program generally contains much of the code of the previous version, so again, why spend programmer time on rewriting existing features instead of adding new features?&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2018-10-07T12:39:39.027" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7884" PostTypeId="2" ParentId="7880" CreationDate="2018-10-07T12:41:28.953" Score="75" Body="&lt;p&gt;C did exist when DOS was developed, but it wasn’t used much outside the Unix world, and as mentioned by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/1932/jdebp&quot;&gt;JdeBP&lt;/a&gt;, wouldn’t necessarily have been considered a good language for systems programming on micros anyway — more likely candidates in the late seventies would include Forth and Pascal. SCP developed DOS in assembly for a few &lt;a href=&quot;http://www.patersontech.com/dos/byte%E2%80%93inside-look.aspx&quot; rel=&quot;noreferrer&quot;&gt;very pragmatic reasons&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The last design requirement was that MS-DOS be written in assembly language. While this characteristic does help meet the need for speed and efficiency, the reason for including it is much more basic. The only 8086 software-development tools available to Seattle Computer at that time were an assembler that ran on the Z80 under CP/M and a monitor/debugger that fit into a 2K-byte EPROM (erasable programmable read-only memory). Both of these tools had been developed in house.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As you’ve seen from the code available for MS-DOS 1.25 and 2.11, these versions were also written in assembly language. That code was never &lt;em&gt;entirely&lt;/em&gt; rewritten, so there never was the opportunity to rewrite it in a higher-level language; nor was the need ever felt, I suspect — assembly was the language of choice for system tools on PCs for a long time, and system developers were as familiar with assembly as with any other language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other languages were used in MS-DOS releases. BASIC was used for a number of demos of various kinds over the years; but they hardly count as “core” utilities. Microsoft’s Pascal compiler (sold as IBM Pascal) was available early on, and could have been used — but it produces binaries with &lt;a href=&quot;https://slions.net/threads/detecting-a-signedness-bug-in-vintage-compiled-pascal-programs.34/&quot; rel=&quot;noreferrer&quot;&gt;tell-tale memory problems&lt;/a&gt; which none of the MS-DOS tools exhibit, as far as I’m aware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some tools added in later versions were developed in C; a quick look through MS-DOS 6.22 shows that, for example, &lt;code&gt;DEFRAG&lt;/code&gt;, &lt;code&gt;FASTHELP&lt;/code&gt;, &lt;code&gt;MEMMAKER&lt;/code&gt; and &lt;code&gt;SCANDISK&lt;/code&gt; were written in C (some of these tools were licensed from other companies such as Symantec). &lt;code&gt;FDISK&lt;/code&gt; is also a C program in 6.22; I haven’t checked its history to see if it started out in assembly and was rewritten (in early versions of DOS, it wasn’t provided by Microsoft but by OEMs). As &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4375/noam-newman&quot;&gt;No'am Newman&lt;/a&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7885/79&quot;&gt;mentions&lt;/a&gt;, the &lt;a href=&quot;http://www.os2museum.com/wp/dos/dos-3-0-3-2/&quot; rel=&quot;noreferrer&quot;&gt;OS/2 Museum page on DOS 3&lt;/a&gt; lists &lt;code&gt;ATTRIB.EXE&lt;/code&gt; as the first program provided with MS-DOS to have been written in C.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-10-11T10:54:53.457" LastActivityDate="2018-10-11T10:54:53.457" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7885" PostTypeId="2" ParentId="7880" CreationDate="2018-10-07T12:48:27.987" Score="34" Body="&lt;p&gt;From &lt;a href=&quot;http://www.os2museum.com/wp/dos/dos-3-0-3-2/&quot; rel=&quot;noreferrer&quot;&gt;The OS/2 Museum page&lt;/a&gt; about DOS3: &quot;The new ATTRIB.EXE utility allowed the user to manipulate file attributes (Read-only, Hidden, System, etc.). It is notable for being the first DOS utility written in C (up to that point, all components in DOS were written in assembly language) and contains the string “Zbikowski C startup Copyright 1983 (C) Microsoft Corp”, clearly identifying Mark Zbikowski’s handiwork.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realise that this doesn't really answer the question, but gives an idea of how DOS was implemented. Also remember that the operating system had to be as small as possible so as to leave room for user programs, so the resident part of COMMAND.COM would have stayed written in Assembly. &lt;/p&gt;&#xA;" OwnerUserId="4375" LastActivityDate="2018-10-07T12:48:27.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7886" PostTypeId="2" ParentId="7882" CreationDate="2018-10-07T14:42:54.733" Score="12" Body="&lt;p&gt;It's called Star Lanes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TVoXs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TVoXs.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first part of the listing shows details:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 10  REM THE GAME OF STARLANES - AN INTERSTELLAR COMMERCE GAME&#xA; 20  REM FOR 2 TO 4 PLAYERS - COPYRIGHT 1977 BY STEVEN FARBER&#xA; 30  REM WRITTEN IN ALTAIR BASIC 12/17/76&#xA; 31  REM MODIFIED FOR APPLESOFT II BY RICHARD NAPOLI - 6/24/79&#xA; 32  REM   LISTED IN INTERFACE AGE JUNE 1977&#xA;[...]&#xA; 70 M$(5) = &quot;ERIDANI EXPEDITERS&quot;: FOR I = 1 TO 5: FOR J = 1 TO 4:S(I,J) = 0&#xA; 75 D1(I) = 0:S1(I) = 100:Q(I) = 0:B(I) = 6000: NEXT J,I&#xA; 80 M$(3) = &quot;CAPELLA FREIGHT CO.&quot;:M$(4) = &quot;DENEBOLA SHIPPERS&quot;&#xA; 90 M$(1) = &quot;APPLE STARWAYS&quot;:M$(2) = &quot;BETELGEUSE, LTD.&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I found a copy &lt;a href=&quot;ftp://ftp.apple.asimov.net/pub/apple_II/images/games/collections/Game_Disks_Too/games6.dsk&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you google for it, you'll find a number of more &lt;a href=&quot;https://www.gsp.com/cgi-bin/man.cgi?section=6&amp;amp;topic=starlanes&quot; rel=&quot;nofollow noreferrer&quot;&gt;modern&lt;/a&gt; &lt;a href=&quot;http://www.barnsdle.demon.co.uk/game/starlanes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;implementations&lt;/a&gt;, with a bit of history... &lt;a href=&quot;https://github.com/oubiwann/star-traders&quot; rel=&quot;nofollow noreferrer&quot;&gt;one source&lt;/a&gt; claims it evolved out of &lt;a href=&quot;https://en.wikipedia.org/wiki/Star_Trader&quot; rel=&quot;nofollow noreferrer&quot;&gt;Star Trader&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorDisplayName="user6464" LastEditDate="2018-11-27T03:38:23.360" LastActivityDate="2018-11-27T03:38:23.360" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7887" PostTypeId="2" ParentId="7880" CreationDate="2018-10-07T14:51:24.460" Score="4" Body="&lt;p&gt;High level languages are generally easier to work with.  However, depending on what one is programming, and one's experience, programming in assembler is not necessarily all that complex.  Remove the hurdles of graphics, sound, inter-process communication, and just a keyboard and text shell for user interaction -- it's pretty straight-forward.  Especially with a well-documented BIOS to handle the low level text in / text out / disk stuff, building a well-functioning program in assembler was straight-forward and not all that slow to accomplish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking backward with a 2018 mindset, yeah it might seem strange to stick with assembler even in the later versions of DOS.  It was not, though.  Others have mentioned that some tools were eventually written in C.  Still most of it was already written and known to operate well.  Why bother rewriting everything?  Do you think any users would have cared if a box containing the newest DOS had a blurb stating, &quot;Now fully implemented in the C language!&quot;?&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2018-10-07T14:51:24.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7888" PostTypeId="2" ParentId="7880" CreationDate="2018-10-07T14:56:49.750" Score="23" Body="&lt;h3&gt;Low Memory ==&amp;gt; Assembly Language&lt;/h3&gt;&#xA;&lt;p&gt;In the early days every byte mattered. MS-DOS was, in many ways, an outgrowth of CP/M. CP/M had a fairly hard limit of 64K. Yes, there were some bank switching in later versions, but for practical purposes for most its popular lifetime it was a 64K O/S. That included O/S resident portion + Application + User Data.&lt;/p&gt;&#xA;&lt;p&gt;MS-DOS quickly increased that to 1 Meg. (but 640K in practical terms due to IBM's design decisions) and it was relatively easy to use the 8086 segmented architecture to make use of more than 64K memory, as long as you worked in 64K chunks.&lt;/p&gt;&#xA;&lt;p&gt;Despite the 1 Meg./640K limit, plenty of machines started out with a lot less RAM. 256K was typical. The original IBM PC motherboard could hold from 16K to 64K, though most (and all the ones I ever worked with myself) could hold from 64K - 256K. Any more RAM went on expansion cards. RAM was still rather expensive in the early days - plenty of machines did plenty of useful work with 256K (or less!), so keeping the resident O/S components to a minimum was very important to allow for larger applications and more user data.&lt;/p&gt;&#xA;&lt;p&gt;Can an optimizing C compiler get really close to hand-coded assembly language in memory usage? Absolutely. But they weren't there in the early days. Plus, compilers (in my mind, until Turbo Pascal came along) were big &amp;amp; clunky - i.e., needed plenty of RAM and disk space and took a long time to compile/link/etc. which would make developing the core of an O/S even harder to do. MS-DOS wasn't like a strip of paper tape loaded in via a TTY to an Altair (the first Microsoft Basic) but it was small and efficient for what was needed at the time, leaving room for applications on a bootable floppy and in RAM.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-10-08T14:10:55.983" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="7889" PostTypeId="2" ParentId="7880" CreationDate="2018-10-07T15:34:59.660" Score="14" Body="&lt;p&gt;C would have been really inefficient to write the operating system for a number of reasons:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, initial compilers for high level language used 16-bit pointers on MS-DOS, only later adding support for 32-bit pointers.&amp;nbsp; Since much of the work done in the operating system needed to manage and work with a 1MB address space, this would have been impractical without larger pointers.&amp;nbsp; Programs that took advantage of compiler-support for larger pointers suffered significantly on 8086 since the hardware doesn't actually support 32-bit pointers nicely!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So second, code generation quality was poor on 8086, in part because compilers were less mature back then, in part because of the irregular instruction set of the 8086 (re: many things, including the above mentioned 32-bit pointer handling), and in part because in assembly language a human programmer can so simply use all the features of the processor (e.g. return value in CF flags (Z-bit) along with return value in AX, as is done with the int 21h system calls).&amp;nbsp; The small register set also makes the compiler's job harder, which means it would tend to use stack memory for local variables when a programmer would have used registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compilers only use a subset of a processor's instruction set, and accessing those other features would have required an extensive library or compiler options and language extensions that were yet to come (e.g. __stdcall, others).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As hardware has evolved it has become more friendly to compilers; while also, compilers have improved dramatically.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastActivityDate="2018-10-07T15:34:59.660" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7890" PostTypeId="1" AcceptedAnswerId="7891" CreationDate="2018-10-07T17:57:36.517" Score="6" ViewCount="2440" Body="&lt;p&gt;I've got ImageDisk installed on my old 486, and I've been ripping some disks for archival purposes (some 3.5&quot;, some 5.25&quot;). It spits out .IMD files, which contain some amount of header and metadata, and some basic compression. Is there a simple utility for converting these to a format that could be used with VirtualBox or other virtualization software, dd, or WinImage, in cases where the disk in question is FAT? I see many references to BIN2IMD, which converts raw images to ImageDisk format, but I'm not finding anything for doing the reverse.&lt;/p&gt;&#xA;" OwnerUserId="4459" LastActivityDate="2018-10-08T00:11:44.467" Title="How can I use ImageDisk (.IMD) images with VirtualBox, WinImage, etc.?" Tags="&lt;floppy-disk&gt;&lt;disk-image&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7891" PostTypeId="2" ParentId="7890" CreationDate="2018-10-07T18:23:43.383" Score="6" Body="&lt;p&gt;Keir Fraser’s &lt;a href=&quot;https://github.com/keirf/Disk-Utilities&quot; rel=&quot;nofollow noreferrer&quot;&gt;Disk Utilities&lt;/a&gt; include an analysis and conversion program, &lt;code&gt;disk-analyse&lt;/code&gt;, which can convert to and from ImageDisk files (among others). To convert an ImageDisk file to a plain MFM disk image suitable for use with virtualisation software, run&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;disk-analyse image.imd image.img&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It might take a little while, and the program is silent at first which can be surprising.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-10-07T22:55:35.843" LastActivityDate="2018-10-07T22:55:35.843" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7892" PostTypeId="2" ParentId="7880" CreationDate="2018-10-07T18:58:32.447" Score="31" Body="&lt;p&gt;MS-DOS (by which I mean the underlying IO.SYS and MSDOS.SYS files) was written in assembly through the first half of the 1990s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1995 for Windows 95, which was bootstrapped by what you would call MS-DOS 7.0 (although nobody ran DOS 7.0 as a stand-alone OS), I did write a small piece of code in C and included it in the project. As far as I know, it was the first time C code appeared in either of those .SYS files (yes I know one of those SYS files became a text file and all the OS code ended up in the other one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember sneaking a look at the Windows NT source code at the time to see how they had solved some issue, and I was impressed at how even their low level drivers were all written in C. For instance they used the _inp() function to read I/O ports on the ISA bus. &lt;/p&gt;&#xA;" OwnerUserId="10860" LastActivityDate="2018-10-07T18:58:32.447" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7893" PostTypeId="2" ParentId="6499" CreationDate="2018-10-07T20:30:48.387" Score="11" Body="&lt;p&gt;You will generally find that the all ones method works for Microsoft software released before 2001-2003.  Microsoft's 25-character product keys (which were alpha-numeric and cryptographic in nature) first appeared in the Windows XP and Office XP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, not all of Microsoft's products switched to the 25-character product key approach right away, but as new releases came out, the older keys (which only use check-digit protection) were phased out.&lt;/p&gt;&#xA;" OwnerUserId="10861" LastEditorUserId="10861" LastEditDate="2018-10-07T20:36:23.377" LastActivityDate="2018-10-07T20:36:23.377" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7894" PostTypeId="2" ParentId="7890" CreationDate="2018-10-08T00:11:44.467" Score="6" Body="&lt;p&gt;&lt;a href=&quot;http://www.seasip.info/Unix/LibDsk&quot; rel=&quot;noreferrer&quot;&gt;libdsk&lt;/a&gt; can convert IMD to a raw disc image. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dskconv -otype raw file.imd file.img&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or in versions prior to 1.5.5:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dsktrans -otype raw file.imd file.img&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2018-10-08T00:11:44.467" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7895" PostTypeId="2" ParentId="6499" CreationDate="2018-10-08T01:35:53.350" Score="2" Body="&lt;p&gt;I am not sure I've heard of it being a &quot;test&quot; feature, especially since it was in release versions.  I would suspect it was simply a loophole in the activation hash.  I remember there being another one that also worked (either 1 to 9 in sequence or 0 to 9 I forget which).  It was incredibly wide-spread.  I reported a local college because their office computers had pirated versions of Microsoft software on them.  Hopefully I'm one of the reasons they closed.  It's definitely notable though because since all the numbers are the same, it was easy to remember.  I haven't installed vb6 in years and I remember it.  As a side note:  Microsoft STILL has versions of all their software that does not require online activation.  You can't assume a corporate computer will have online access so their software only takes a valid key.  Actual businesses (Indiana Business College/Harrison College being an exception) usually have a budget allowing legit software so Microsoft is more lax with their registration hoops.&lt;/p&gt;&#xA;" OwnerUserId="10819" LastActivityDate="2018-10-08T01:35:53.350" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7897" PostTypeId="5" CreationDate="2018-10-08T06:03:45.400" Score="0" Body="&lt;p&gt;The IBM 5100 is a portable computer, introduced in 1975. It was the evolution of a prototype called the SCAMP (Special Computer APL Machine Portable) that was developed at the IBM Palo Alto Scientific Center in 1973.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM announced the IBM 5110 in 1978 and the IBM 5120 in 1980. The 5100 was withdrawn in 1982.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the IBM PC was introduced in 1981, it was originally designated as the IBM 5150, putting it in the &quot;5100&quot; series, though its architecture was not directly descended from the IBM 5100.&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-08T06:29:58.580" LastActivityDate="2018-10-08T06:29:58.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7898" PostTypeId="4" CreationDate="2018-10-08T06:03:45.400" Score="0" Body="The IBM 5100 is a portable computer introduced in September 1975, some six years before the IBM Personal Computer (originally designated the IBM 5150). Use this tag for any questions related specifically to the 5100 computer and related items (peripherals, software, and so on)." OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-08T06:30:13.440" LastActivityDate="2018-10-08T06:30:13.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7899" PostTypeId="5" CreationDate="2018-10-08T06:08:37.700" Score="0" Body="&lt;p&gt;The Intel MCS-51 (more commonly known by the name 8051) is a single chip microcontroller series developed by Intel in 1980 for use in embedded systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel's original versions were popular in the 1980s and early 1990s and enhanced binary-compatible derivatives remain popular today. It is an example of a complex instruction set computer, and has separate memory spaces for program instructions and data (Harvard architecture).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more detail, refer to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_MCS-51&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-08T06:28:22.967" LastActivityDate="2018-10-08T06:28:22.967" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7900" PostTypeId="4" CreationDate="2018-10-08T06:08:37.700" Score="0" Body="Use this tag for questions related to the Intel MCS-51 (commonly called 8051) and derivative chips." OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-08T06:27:03.360" LastActivityDate="2018-10-08T06:27:03.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7901" PostTypeId="5" CreationDate="2018-10-08T06:15:18.323" Score="0" Body="&lt;p&gt;Examples when using this tag are&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What was the cost in Australia for the Sinclair ZX80 when it first came out?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm looking to buy a TRS-80 Model 4D to round out my collection. What can I expect to pay for such a beast?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-08T06:30:32.617" LastActivityDate="2018-10-08T06:30:32.617" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7902" PostTypeId="4" CreationDate="2018-10-08T06:15:18.323" Score="0" Body="Use this tag if you are enquiring about the cost of systems, either at a specific time-point in the past (such as when they were released) or now (if you're looking to purchase)." OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-08T06:27:39.970" LastActivityDate="2018-10-08T06:27:39.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7903" PostTypeId="5" CreationDate="2018-10-08T06:19:52.460" Score="0" Body="&lt;p&gt;BIOS, an acronym for basic input/output system, is non-volatile firmware used to perform hardware initialization during the booting process and to provide runtime services for operating systems and programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BIOS firmware generally comes pre-installed in computers, and it is the first software to run when powered on.&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-08T06:27:48.703" LastActivityDate="2018-10-08T06:27:48.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7904" PostTypeId="4" CreationDate="2018-10-08T06:19:52.460" Score="0" Body="To be used when asking questions about the Basic Input/Output System found on many computers." OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-08T06:30:02.923" LastActivityDate="2018-10-08T06:30:02.923" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7905" PostTypeId="2" ParentId="7880" CreationDate="2018-10-08T08:38:32.070" Score="12" Body="&lt;p&gt;Aside from the historical answer, which is just &quot;yes&quot;, you also have to keep in mind that DOS is magnitudes smaller than what we'd call an &quot;OS&quot; today.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What is odd in my opinion is the use of x86 assembly language for everything.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;On the contrary; using anything else would have been odd back then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS had very few responsibilities - it handled several low level components in a more or less static way. There was no multi-user/-tasking/-processing. No scheduler. No forking, no subprocesses, no &quot;exec&quot;; no virtualization of memory or processes; no concept of drivers; no modules, no extensability. No USB, no PCI, no video functionality to speak of, no networking, no audio. Really, there was very little going on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the &lt;a href=&quot;https://github.com/Microsoft/MS-DOS/tree/master/v2.0/source&quot; rel=&quot;noreferrer&quot;&gt;source code&lt;/a&gt; - the whole thing (including command line tools, &quot;kernel&quot;...) fits into a handful of assembler files; they aren't even sorted into subdirectories (as Michael Kjörling pointed out, DOS 1.0 didn't have subdirectories, but they didn't bother adding a hierarchy in later versions either).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you count the &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS_API&quot; rel=&quot;noreferrer&quot;&gt;DOS API&lt;/a&gt; calls, you end up at roughly 100 services for the 0x21 call, which is... not much, compared to today. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the CPUs were much simpler; there was only one mode (at least DOS ignored the rest, if we ignore EMM386 and such).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suffice it to say, the programmers back then were quite used to assembler; more complex software was written in assembler on a regular basis. It probably did not even occur to them to rewrite DOS in C. There simply would have been little benefit.&lt;/p&gt;&#xA;" OwnerUserId="4235" LastEditorUserId="4235" LastEditDate="2018-10-08T14:17:44.733" LastActivityDate="2018-10-08T14:17:44.733" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7906" PostTypeId="1" CreationDate="2018-10-08T13:54:28.140" Score="5" ViewCount="1810" Body="&lt;p&gt;If I attach a 16 KIB EEPROM to a 6502 or similar, and put some kind of operating system on it, it will run fine, but won't have access to any other chips. So, when a Commodore VIC20 had 5k of ram and 8+8k of ROM, how did it make the rom/ram chips know that its their turn and how did it translate the 16 bit adress signal into a signal in their range? And if it accomplishes that, that explains how memory mapping worked, because it can easily switch chips.&lt;/p&gt;&#xA;" OwnerUserId="10868" LastEditorUserId="6659" LastEditDate="2018-10-09T14:00:58.573" LastActivityDate="2019-07-21T07:06:59.243" Title="How does memory addressing/mapping work in 8-bit systems?" Tags="&lt;memory&gt;&lt;8-bit-microcomputers&gt;&lt;vic-20&gt;" AnswerCount="4" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7907" PostTypeId="2" ParentId="7880" CreationDate="2018-10-08T14:11:38.157" Score="14" Body="&lt;p&gt;You need to understand that C &lt;em&gt;wasn't&lt;/em&gt; a good compromise between low-level and &quot;high-level&quot;. The abstractions it offered were tiny, and the cost of them was more important on the PC than on machines where Unix originated (even the original PDP-11/20 had more memory and faster storage than the original IBM PC). The main reason why you'd choose C wasn't to get useful abstraction, but rather to improve portability (this in a time where differences between CPUs and memory models were still huge). Since the IBM PC didn't need portability, there was little benefit to using C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, people tend to look at assembly programming as some stone-age level technology (especially if you've never worked with modern assembly). But keep in mind that the high-level alternatives to assembly were languages like LISP - languages that didn't even pretend to have any relation to the hardware. C and assembly were extremely close in their capabilities, and the benefits C gave you were often outweighed by the costs. People had large amounts of experience and knowledge of the hardware and assembly, and lots of experience designing software in assembly. Moving to C didn't save as much effort as much as you'd think.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, when MS-DOS was being developed, there was no C compiler for the PC (or the x86 CPUs). Writing a compiler wasn't easy (and I'm not even talking about optimizing compilers). Most of the people involved didn't have a great insight into state-of-the-art computer science (which, while of great theoretical value, was pretty academical in relation to desktop computers at the time; CS tended to shun the &quot;just get it working, somehow&quot; mentality of commercial software). On the other hand, creating an assembler is pretty trivial - and already gives you lots of capabilities that early compilers for languages like C did. Do you really want to spend the effort to make a high-level compiler when what you're &lt;em&gt;actually&lt;/em&gt; trying to do is write an OS? By the time tools like Turbo Pascal came to be, they might have been a good choice - but that was much later, and there'd be little point in rewriting the code already written.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even with a compiler, don't forget how crappy those computers were. Compilers were bulky and slow, and using a compiler involved flipping floppies all the time. That's one of the reasons why at those times, languages like C usually didn't improve productivity unless your software got really big - you needed just as much careful design as with assembly, and rely on your own verification of the code long before it got compiled and executed. The first compiler to really break that trend was Turbo Pascal, which took very little memory and was blazing fast (while including a full-blown IDE with a debugger!) - in 1983. That's about in time for MS DOS 3 - and indeed, around that time, some of the new tools were already written in C; but that's still no reason to rewrite the whole OS. If it works, why break it? And worse, risk breaking all of the applications that already run just fine on MS-DOS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The API of DOS was mostly about invoking interrupts and passing arguments (or pointers) through registers. That's an extremely simple interface that's pretty much just as easy to implement in assembly as in C (or depending on your C compiler, much easier). Developing applications for MS DOS required pretty much no investment beyond the computer itself, and a lot of development tools sprung up pretty quickly from other vendors (though on launch, Microsoft was still the only company that provided an OS, a programming language and applications for the PC). All the way through the MS-DOS era, people used assembly whenever small or fast code was required - compilers only slowly caught up with what assembly was capable of, though it usually meant you used something like C or Pascal for most of the application, with custom assembly for the performance critical bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OSes for desktop computers had one main requirement - be small. They didn't have to do much stuff, but whatever they had to keep in memory was memory that couldn't be used by applications. MS-DOS targeted machines with 16 kiB RAM - that didn't leave a lot of room for the OS. Diminishing that further by using code that wasn't hand optimized would have been a pointless waste. Even later, as memory started expanding towards the 640 kiB barrier, every kiB still counted - I remember tweaking memory for days to get to run Doom with a mouse, network and sound at the same time (this was already with a 16 MiB PC, but lots of things still had to fit in those 640 kiB - including device drivers). This got even worse with CD-ROM games; one more driver to fit in. And throughout all this time, you wanted to avoid the OS as much as possible - direct memory access was the king if you could afford it. So there wasn't really much of a demand for complicated OS features - you mostly wanted the OS to stand aside while your applications were running (on the PC, the major exception would only come with Windows 3.0).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But programming in 100% assembly was nowhere near as tedious as people imagine today (one notable example being Roller Coaster Tycoon, a huge '99 game, 100% written in assembly by one guy). Most importantly, C wasn't significantly better, especially on the PC and with one-person &quot;teams&quot;, and introduced a lot of design conflicts that people had to learn to deal with. People already had plenty of experience developing in assembly, and were very aware of the potential pitfalls and design challenges.&lt;/p&gt;&#xA;" OwnerUserId="542" LastActivityDate="2018-10-08T14:11:38.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7908" PostTypeId="2" ParentId="7880" CreationDate="2018-10-08T14:39:36.900" Score="4" Body="&lt;p&gt;It's interesting to note that the direct inspiration for the initial DOS API, namely CP/M was mostly written in PL/M rather than assembly language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PL/M being a somewhat obscure language and the original Digital Research source code being unavailable due to copyright and licensing reasons anyway, writing in assembly language was the most straightforward course for direct binary compatibility.  In particular since the machine-dependent part of the operating system, the BIOS, was already provided by IBM (it was very common to write the BIOS in assembly language anyway, even for CP/M, for similar reasons).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original CP/M structure consisted of BIOS, BDOS, and CCP (basically what COMMAND.COM does) with BIOS implementing the system-dependent parts, BDOS implementing the available system calls on top of that, and the CCP (typically reloaded after each program run) providing a basic command line interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much of the BDOS layer was just glue code, with the most important part that was more complex being the file system code and implementation.  There were no file ids indexing kernel internal structures: instead the application program had to provide the room for the respective data structures.  Consequently there was no limitation on concurrently open files.  Also there was no file abstraction across devices: disk files used different system calls than console I/O or printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the core of MS-DOS corresponds just to what was the BDOS in CP/M, reimplementing it in assembly language was not that much of a chore.  Later versions of MS-DOS tried adding a file id layer and directories and pipes to the mix to look more like Unix, but partly due to the unwieldy implementation language and partly due to a lack of technical excellence, the results were far from convincing.  Other things that were a mess were end-of-file handling (since CP/M only had file lengths in multiples of 128) and text line separators vs. terminal handling (CR/LF is around even to these days).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So doing the original implementation in assembly language was reasonable given the system call history of CP/M that DOS initially tried to emulate.  However, it contributed to drawing the wrong project members for moving to a Unix-like approach of system responsibility and mechanisms.  Microsoft never managed utilizing the x286 16-bit protected modes for creating a more modern Windows variant; instead both Windows 95 and Windows NT worked with the x386 32-bit protected modes, Windows 95 with DOS underpinnings and Windows NT with a kernel developed new.  Eventually the NT approach replaced the old DOS-based one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NT was renowned for being &quot;enterprise-level&quot; and resource consuming.  Part of the reason certainly was that it had bulkier and slower code due to &lt;em&gt;not&lt;/em&gt; being coded principally in assembly language like the DOS-based OS cores were.  That led to a rather long parallel history of DOS- and NT-based Windows systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to answer your question: later &quot;versions of DOS&quot; were written in higher languages, but it took them a long time to actually &lt;em&gt;replace&lt;/em&gt; the assembly language based ones.&lt;/p&gt;&#xA;" OwnerDisplayName="user10869" LastEditorUserId="-1" LastEditDate="2018-10-09T15:31:25.983" LastActivityDate="2018-10-09T15:31:25.983" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7909" PostTypeId="2" ParentId="7906" CreationDate="2018-10-08T14:41:28.520" Score="8" Body="&lt;p&gt;I'm not really sure how this question is meant, so this is maybe less of an answer as an attempt to understand the question first and answer accordingly.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If I attach a 16 KiB EEPROM to a 6502 or similar, and put some kind of operating system on it, it will run fine, but won't have access to any other form of memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You may still need logic to assign the ROM to some memory location, as well as to access other memory or I/O (which is memory-mapped on a 6502 anyway). Also, a 6502 won't be of much use without at least a little bit of RAM. Similarly, some I/O to let it spread its message (*1) may be a good idea.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So, when a Commodore VIC20 had 5k of ram and 8+8k of ROM, how did it make the rom/ram chips know that it's their turn, and how did it translate the 16-bit address signal into a signal in their range?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(*2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each of these needs only a part of the default address range on a 6502 (or other CPU with 16 bit address space). 5+8+8 KiB = 21 KiB, which fits nicely into 64 KiB even leaving much space unused. Each of these memory chunks (RAM, ROM, ROM) need only a maximum 13 bit wide address (2^13 = 8096). So the remaining 3 bits of an address (usually the highest value ones) can be used to generate a select signal to each of these areas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most common is the use of a &lt;a href=&quot;http://ranger.uta.edu/~carroll/cse2341/spring99/chapter4/sld007.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;74138 1-of-8 decoder&lt;/a&gt;, which turns these 3 bits into 8 lines that could select either memory (or I/O) chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, on a 6502 ROM must go up (for Reset vector access) and RAM down (for ZP and Stack). So RAM would be the uppermost two. So the lowest output would be fine to select the RAM, while the ROM needs to be hooked to the uppermost. As for now, the use of 8 KiB may be well enough - and simplify the setup much - so the highest address bit will be unused and should be grounded (*3,4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next to add RAM, for example a 6264 which gives you convenient 8 KiB that could be directly hooked up to the lowest 74138 output without further logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The remaining 74138 output lines could be used as a very crude output logic by attaching six LEDs. Now every access between &lt;code&gt;2000&lt;/code&gt; and &lt;code&gt;DFFF&lt;/code&gt; would light one of these diodes for a little moment. Doing this in a loop will make them light continuously. Really is a simple 4 chip 6502 system able to tell you its existence with Blinkenlights :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And if it accomplishes that, that explains how memory mapping worked, because it can easily switch chips.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No idea what you want to ask here.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Read some display, even if it's just a few led and inputs - or a keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Using the VIC20 as an example is a bit dangerous, as its specific memory decoding is a bit complicated, and its use even more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Using a switch instead of grounding would even allow to have two 8 KiB ROM versions online and accessible in a flip of a switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And replacing the switches by some latch would make a first step to ROM or more general memory management. But that's a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - To assign the full 16 KiB EEPROM, two 74138 lines need to be joined as CS (chip select). Since they are low active, an AND gate will do the trick.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2018-10-09T14:00:11.840" LastActivityDate="2018-10-09T14:00:11.840" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7910" PostTypeId="2" ParentId="4647" CreationDate="2018-10-08T15:54:37.580" Score="3" Body="&lt;p&gt;A major complication with core memory is that while it can retain its contents for a long time without being accessed, it can't be read even once without being erased.  The process of reading a core requires writing a known value to the bit to be read while watching a sense wire to see if a pulse is received.  If a pulse was received on the sense wire, that means the act of trying to write to the bit caused its value to change (if no pulse is received, that means the bit already held the value being written).  If core was being treated as non-volatile RAM, whose content would be considered meaningless when the machine was power-cycled or reset, this wouldn't be a problem.  It meant, however, that if there was an area of memory that was supposed to hold its contents through such events, it would be necessary to ensure that operations that were supposed to read a storage location and write back its contents must not be interrupted under &lt;em&gt;any circumstances&lt;/em&gt;.  While many flash or EEPROM chips include a &quot;write-protect&quot; signal and may be safely powered on and off at any time while they are write-protected, such an approach won't work with core memory.  The only way to read it is to force the cores to a known state and sense whether this causes a change in the magnetic field.  Unless that change is properly recorded, the information that had been stored in the cores will be lost.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-10-08T15:54:37.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7911" PostTypeId="1" AcceptedAnswerId="7912" CreationDate="2018-10-08T17:00:27.123" Score="11" ViewCount="1933" Body="&lt;p&gt;According to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6797/#7876&quot;&gt;this answer&lt;/a&gt; to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6797&quot;&gt;Why were early personal computer monitors not green?&lt;/a&gt; they had a severe disadvantage in that you had to choose between 'too dim' and 'rapid burn-in' whereas amber could display decent brightness without burn-in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used Commodore PET's with green monitors in the early 80s and DEC terminals with amber monitors in the late 80s, in school and college computer labs respectively, both with 50 hertz fluorescent lights, and I don't remember the former having a problem with either dimness or burn-in, but obviously my eyesight was better then than it is now, and I'm not sure exactly how much to trust that memory. So say green monitors did indeed have that problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If amber was that much better, why did anyone use green?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Phosphor#Standard_phosphor_types&quot; rel=&quot;noreferrer&quot;&gt;Wikipedias list of Phosphor Types&lt;/a&gt; green is P1 and amber is P3, which might mean amber was simply not invented until later. However, according to that table, black and white TV is P4, which would suggest amber was invented long before monochrome monitors became common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there any other reason to prefer green over amber?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2018-10-08T18:21:12.377" LastActivityDate="2018-10-09T13:57:48.983" Title="Why green phosphor instead of amber?" Tags="&lt;history&gt;&lt;screen&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7912" PostTypeId="2" ParentId="7911" CreationDate="2018-10-08T17:41:29.860" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;/a/7876&quot;&gt;According to this answer&lt;/a&gt; to a question about the early use of green monitors  they had a severe disadvantage in that you had to choose between 'too dim' and 'rapid burn-in' whereas amber could display decent brightness without burn-in.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's be rather careful in accepting the conclusions made there. I can show you several green screens that have been used for more than a decade without burning in. There is no real difference between either coating. Of course if one pulls up the volume to excessive bright, all screens will burn in.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If amber was that much better, why did anyone use green?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Maybe because green is way better? The human eye has its highest sensitivity near to the red side of green (*1,2) thus a (somewhat) yellowish green is about the best colour. At the same time the sensitivity for brightness (*3) is to the blue side of green. In turn, orange/yellowish colours are as good for fine colour separation, but less sensitive to differences in brightness. So when it is about a monochrome screen, green outclasses amber.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: The highest over all sensitivity, as in ability to separate levels of brightness and detect colour, lays right around green.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was there any other reason to prefer green over amber?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Does it need any other than that?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The P Numbers you cite are not really related to any date of 'discovery'. They where an attempt of the RMA together with the US Army to standardize the components used for CRTs in the mid 1940s. The original order of the first few, declared at once, was in time of their persistence. That means how long the image would stay without being refreshed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example P1 and P2 have a quite close colour (P1 covers P2), but P1 continues to emit considerably longer than P2, so P1 is the classic green for early radar (and oscilloscopes used for low periodical signals), while P2 is used only for oscilloscopes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, P1 is most definitely not the one used for green computer CRTs. It got a decay time (*4) of about 100ms. Any refresh frequency past like 15 Hz or so would result in an extreme blurred screen. Its low writing speed is another no-go (*5).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For most green screens in the 1970s and later, P31 was used. It is not only about three times brighter than P1 (at the same energy *6), but also has only about 30ms decay time, which goes well to display 'fast' content at 50-60 Hz without starting to flicker.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The colour sensitivity has &lt;a href=&quot;/a/7694&quot;&gt;already been discussed&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - I guess that's a result of us having evolved in a green coloured environment ... well, at least back when we still climbed trees :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The majority of information our eyes deliver aren't about colour, but black &amp;amp; white.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Decay time is the time a once initiated spot needs to go from 100% of its (specific) brightness down to 0.1% which is considered off. It is usually in reverse relation to absolute brightness - as the brighter a given coating is when ignited (at a given energy, like 10kV), the faster it decays - as  a rough guideline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Having said that, P1 &lt;em&gt;has&lt;/em&gt; been used for some screens until the mid 1970s. Some may remember screens (mostly vector in addition) that had an incredible blur when scrolling. It felt like an age until the old picture vanished under the new.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Less energy for a given/intended brightness also means less radiation (X-Rays) toward the user.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2018-10-09T13:57:48.983" LastActivityDate="2018-10-09T13:57:48.983" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7913" PostTypeId="1" CreationDate="2018-10-08T19:18:52.247" Score="4" ViewCount="483" Body="&lt;p&gt;I have a working C128 desktop that I'm using to troubleshoot a non-working C128D-CR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspected a problem with CIA 2 on the C128D, so I swapped its chip labelled &quot;6526A&quot; with a 1988 year stamp with the &quot;6526A-1&quot; from the flat C128 which has a 1986 year stamp. I was expecting these two chips to be interchangeable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The suspect chip from the C128D failed to boot in the flat C128, thus confirming it is &quot;bad&quot;. However, there was no change to the C128D when I installed the known good CIA in it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SO I am left to wonder if there are TWO faults in the C128D. But before assuming that, I'm also wondering if these two &quot;versions&quot; of the 6526A are actually suppose to be interchangeable?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-10-09T13:53:43.770" LastActivityDate="2020-03-15T23:11:50.663" Title="Commodore C128 MOS 6526A interchangeability?" Tags="&lt;commodore&gt;&lt;repair&gt;&lt;commodore-128&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7914" PostTypeId="1" CreationDate="2018-10-08T23:26:17.273" Score="1" ViewCount="439" Body="&lt;p&gt;I have one of these things gathering dust at home: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_System_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Acorn System 1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the original manual (when I find it?) too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It did work, the last time I powered it up, 35 years ago.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I throw it in the bin or sell it?&lt;/p&gt;&#xA;" OwnerUserId="4676" LastEditorDisplayName="user6464" LastEditDate="2018-10-09T07:09:18.253" LastActivityDate="2018-10-09T07:09:18.253" Title="Acorn System 1 - is it a collectable?" Tags="&lt;6502&gt;&lt;acorn&gt;" AnswerCount="2" CommentCount="7" ClosedDate="2018-10-09T07:31:55.147" ContentLicense="CC BY-SA 4.0" />
  <row Id="7915" PostTypeId="2" ParentId="7914" CreationDate="2018-10-09T00:06:17.990" Score="3" Body="&lt;p&gt;Someone would most certainly be interested in this. Whether it's worth your while is the next question.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-10-09T00:06:17.990" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7916" PostTypeId="2" ParentId="7914" CreationDate="2018-10-09T06:36:33.167" Score="4" Body="&lt;p&gt;Ebay have a special category for retro computers&#xA;There is also the UK based &lt;a href=&quot;https://www.sellmyretro.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.sellmyretro.com/&lt;/a&gt; were you can try to sell it.&#xA;I am sure that most countries also have their local sites where to sell things like this.&#xA;Also, serach the web i your local area for Acorn user groups. Even if they probably are more into the slightly newer Acorn computers, there is a big chance at least some one there is interested in a Acorn System 1 to get a complete set on the shelf at home.&lt;/p&gt;&#xA;" OwnerUserId="10565" LastActivityDate="2018-10-09T06:36:33.167" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7917" PostTypeId="2" ParentId="7220" CreationDate="2018-10-09T07:54:14.060" Score="4" Body="&lt;p&gt;One thing that I heard is that IBM dealers got a discount on &lt;strong&gt;all&lt;/strong&gt; products they sold based on the number of units they sold.  The discount on a mini computer due to &quot;selling&quot; a PC could be more then the cost of the PC. Hence there were very large discounts for small companies that bought PCs from some of the dealers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another factor is that a PC with a mainframe terminal card in it did not cost much more then a mainframe terminal. Apple clearly did not have the same access into mainframe users, and there was not a IBM mainframe terminal card for Apple computers. (The Mac did not even have expansion slots.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then Lotus 123 came...... &lt;/p&gt;&#xA;" OwnerUserId="538" LastEditorUserId="4921" LastEditDate="2018-10-09T16:20:01.790" LastActivityDate="2018-10-09T16:20:01.790" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7918" PostTypeId="2" ParentId="7906" CreationDate="2018-10-09T08:14:51.167" Score="0" Body="&lt;p&gt;The most common solution was to have a bank switching register. The register would act like extra address lines, switching RAM and ROM and other chips in and out of the CPU's address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some systems had the bank switch register mapped into memory somewhere, meaning they could only use part of the available address space for switching. Others used extra ports on the CPU designed for this kind of thing, effectively adding an extra bus separate from the main memory one that was used for bank switching and other important functions that the CPU might need to access often.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of this is the Commodore 64. It has a 16 bit address space covering 64k, and also 64k of RAM. A bank switch register allows part of that space to be switched between RAM and ROM/video registers.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-10-09T08:14:51.167" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7919" PostTypeId="2" ParentId="7906" CreationDate="2018-10-09T09:45:23.383" Score="10" Body="&lt;p&gt;First note that in &quot;real&quot; retro computers the amount of address lines on a memory chip is generally much lower than the address lines the CPU has. This means that you won't be able to &quot;fill&quot; the CPU's address space without using some more logic, and, obviously, multiple memory chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond its address and data lines, every memory chip has some more control lines that define its bus interface and are intended to connect to some &lt;em&gt;address decoding logic.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;/CE&lt;/strong&gt; - Chip Enable. This is the line that allows the CPU to signal &quot;Yes, I'm talking to YOU&quot; to the memory chip. If this line is not asserted, the chip won't do anything at all, just silently sit on the bus.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;/OE&lt;/strong&gt; - Output Enable. This line allows the CPU to actually read from the memory chip. When asserted, the memory chip will evaluate the address lines and put the bits addressed by the address lines onto the data bus&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;/WE&lt;/strong&gt; - Write enable. This line, if present (on writable memory), will tell the chip to put the contents of the data lines to the adrerss as signalled &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;An example:&lt;/b&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/iuHu3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iuHu3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you see here is the pinout of a 28C16, a 2K x 8 EEPROM. As you can see here, this guy has 11 address lines that connect directly to the CPU's address bus and 8 data lines intended for the data bus. If you connect only those, the chip won't do anything. The important bits are with the /W, /E, and /G lines (/W, /E, and /G are vendor-selected synonyms for the above /WE, /OE, and /CE signals).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;/W is the /WE from the explanation above - It tells the chip the CPU wants to write&lt;/p&gt;&#xA;&#xA;&lt;p&gt;/E is the /CE from above, enabling the chip (&quot;Yes, I'm talking to YOU&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and /G is the /OE from above, telling the chip to put data on the data bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's assume you want to place 2 of these chips into the upper address range of the 6502, the first one covering the address range from 0xF800-0xFFFF, the second one directly below that, from 0xF000-0xF7FF. Obviously, we need to look at the CPU's address lines &lt;strong&gt;not connected&lt;/strong&gt; to the memory, and generate some logic to provide the /CE signals of the chips (/WE and /OE can trivially be connected with some logic to the 6502's R/W signal).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 5 upper address lines you cannot connect directly to the memory will have a value of 0b11111 for the upper ROM and  0b11110 for the lower one. A circuit like the following would provide the /CE lines for the upper and lower ROM (Note this is non-optimized and very probably non-practical, just explaining the concept):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UWzEb.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UWzEb.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you put these two pictures together, you'll end up with a system that has two EEPROMs of 2kBytes each in the upper address space of the 6502.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-10-09T14:46:58.367" LastActivityDate="2018-10-09T14:46:58.367" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7920" PostTypeId="1" AcceptedAnswerId="7922" CreationDate="2018-10-09T16:39:18.857" Score="8" ViewCount="734" Body="&lt;p&gt;Before integer multipliers in silicon, several cpus had some support for multiplication. For instance SPARCv7 has the &lt;em&gt;MULScc&lt;/em&gt; multiply-step instruction (several other cpus also have this). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, PA-RISC computers before PA-7100 (probably) had no hardware for integer multiplication, but support for multiplication with a constant was enhanced beyond the usual &lt;em&gt;shift&lt;/em&gt; and &lt;em&gt;add&lt;/em&gt; instructions. Multiplication by a constant could be given by a sequence of instructions &lt;em&gt;add&lt;/em&gt;, &lt;em&gt;sub&lt;/em&gt;, &lt;em&gt;sl&lt;/em&gt;, &lt;em&gt;sh1add&lt;/em&gt;, &lt;em&gt;sh2add&lt;/em&gt;, &lt;em&gt;sh3add&lt;/em&gt;, &lt;em&gt;neg&lt;/em&gt; and &lt;em&gt;shl&lt;/em&gt;, see &lt;a href=&quot;https://patents.google.com/patent/US5764990A/en&quot; rel=&quot;noreferrer&quot;&gt;https://patents.google.com/patent/US5764990A/en&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there other cpus, earlier or later, that used the strategy of PA-RISC (&lt;em&gt;sh1add&lt;/em&gt;, &lt;em&gt;sh2add&lt;/em&gt;, &lt;em&gt;sh3add&lt;/em&gt;)?&lt;/p&gt;&#xA;" OwnerUserId="10821" LastEditorUserId="10821" LastEditDate="2018-10-09T16:47:29.737" LastActivityDate="2018-10-09T23:48:08.993" Title="Instruction set support for multiplication with a constant" Tags="&lt;instruction-set&gt;&lt;hp&gt;&lt;cpu&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="7921" PostTypeId="2" ParentId="7920" CreationDate="2018-10-09T17:57:23.867" Score="5" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/VAX&quot; rel=&quot;noreferrer&quot;&gt;VAX&lt;/a&gt;, sold first in 1977, has a &lt;a href=&quot;https://www.cs.auckland.ac.nz/references/macvax/indexed-address-mode.html&quot; rel=&quot;noreferrer&quot;&gt;scaled indexed&lt;/a&gt; addressing mode, which offers indexReg*constScale+baseReg address computation.&amp;nbsp; When used with an LEA instruction (load effective address), this offers a shift and add.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68020&quot; rel=&quot;noreferrer&quot;&gt;68020&lt;/a&gt; (released 1984) introduced &lt;a href=&quot;http://tack.sourceforge.net/olddocs/m68020.html#2.2.2.1.%20Address%20Register%20Indirect%20With%20Index%20(Base%20Displacement)&quot; rel=&quot;noreferrer&quot;&gt;scaled indexed&lt;/a&gt; addressing mode, which when accomplishes indexReg*constScale + constOffset + baseReg; the 680x0 series also has LEA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And one comment mentioned LEA on x86; the 80386, introduced 1985, supports a scaled indexed addressing mode as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You noted PA-RISC already, which was first released in 1986.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastActivityDate="2018-10-09T17:57:23.867" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7922" PostTypeId="2" ParentId="7920" CreationDate="2018-10-09T18:14:48.853" Score="8" Body="&lt;p&gt;In the original ARM instruction set there are no dedicated shift and roll instructions; instead the second operand of each instruction always passes through the barrel shifter, so shifts and rolls are always applied as prefixes to other operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can make the instruction a simple &lt;code&gt;MOV&lt;/code&gt; to get the same result as a traditional shift or rotate operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you could make the instruction an &lt;code&gt;ADD&lt;/code&gt; to get the same functionality as any of the listed &lt;code&gt;sh?add&lt;/code&gt;s, or equivalents that shift or roll by any other amount in either direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess in a literal sense that's not the processor seeking to implement the same strategy as PA-RISC, it's a natural outcome of allowing rolls and shifts everywhere, but it gives the programmer the tools necessary to reach exactly the same outcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Design of the ARM began in 1983, it was first fabricated in 1985 and was on sale to the public within the ARM evaluation kit second processor for the BBC Micro either that year or in 1986 — the sources I found seemed to disagree. So it's at worst a simultaneous implementation to the PA-RISC; ARM's inclusion of both &lt;code&gt;SUB&lt;/code&gt; and &lt;code&gt;RSB&lt;/code&gt; (reverse subtraction, which switches the order of the operands) suggests that making sure the shifter could be used for the argument on either side of a subtraction was something that the designers realised would be useful.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-10-09T23:48:08.993" LastActivityDate="2018-10-09T23:48:08.993" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7923" PostTypeId="2" ParentId="7220" CreationDate="2018-10-09T22:56:56.273" Score="4" Body="&lt;p&gt;&lt;strong&gt;The times we are talking about, late 70's to early 80's, were crazy with new uses for technology.&lt;/strong&gt; Nobody understood it fully. Looking back today, it is easy to see that computers were valuable to business. It is easy to spot the uses and advantages. In fact, as time passed, they became indispensable to successful business endeavors.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;I was young then, but I lived through this special time.&lt;/strong&gt; When I was 8 years old, I wrote my first program. It was a simple 'hello&#xA;  world' with some geometry calculations added in. Then I wrote programs&#xA;  on the first IBM PC. I wrote programs on the Apple II. My dad was a&#xA;  computer science professor and had introduced me to the punchcards,&#xA;  the air conditioned tombs with loud printers and whirling tape, and&#xA;  the precious scrolls of knowledge that were the new program listings. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;I used to read the college textbooks when I was 12.&lt;/strong&gt; My dad gave me a great gift, a wonderful advantage in life. I wrote code in BASIC,&#xA;  assembler, FORTRAN, Pascal, C, and others. I watched the news. I went&#xA;  with my dad on his side consulting calls to businesses. I knew what&#xA;  was happening at the college. I felt the pulse of the industry from&#xA;  its birth. There were no computers ... until there were. There was no&#xA;  internet ... until there was. I feel privileged to have been a part of&#xA;  it and I continue to be amazed to this day.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The trends were never in Apple's favor&lt;/strong&gt;, honestly, but I'm typing this on a Macbook, I have an iPad in my bag, and even my music collection is on Apple. The Apple of Steve Jobs made the best software and hardware in the world for personal use, created with love and intended for the most discerning and innovative people in the world. But it isn't works of art that big business seeks, it is efficient tools that do the job and have service techs available in case of issues.     &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;There are several factors that play into this situation that probably aren't obvious from a distant point of view:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;- Steve Jobs was a hippie.&lt;/strong&gt; He was completely unconventional. He had peculiar bathing and grooming habits. He had strange schedules and unusual plans. I'm not bashing him. I think he was a visionary. I am quite unconventional myself and I count him as a role model. But ... he was so different from the typical 'businessman' that it was anything but natural for the average business to accept him seriously. It was also completely within his character to avoid fraternizing with big business. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;- Steve Jobs was a visionary.&lt;/strong&gt; His vision was of a personal computer for the creative souls of the world. He saw himself serving artists, teachers, inventors, writers, and any number of other creative people. Sure, there was business software, tax software, etc. available, but it was not the first priority. It was not part of the mission statement of Apple. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;- The business of creativity&lt;/strong&gt; was something Steve Jobs saw coming, but it took a while getting here. Even today, you can see the results of this strong sense of mission: the people who use apple products are much more likely to be creatives. Artists, developers, teachers, content producers, entrepreneurs, etc. make up a remarkably high percentage of Mac and 'iStuff' users. As the demand for creative workers has risen over the last 30 years, the lucky (or visionary - depending on how we look at it) side effect for Apple was that the creative people are the rich ones now, not the 'starving artists' of the 70s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;- The installed base of 'business' computers in the 1970s&lt;/strong&gt; was made up of a of mainframes, some 'mini' computers, typewriters, calculators, and other technology from the previous generation. In addition, It took a long time before the marvelous devices that were the first personal computers were actually competitive with the less glamorous business class hardware. Even though they were amazing to home users, they were thoroughly unimpressive to big business for quite a while. I would venture a guess that most businesses would have preferred to keep the mainframes and terminals to this day, with regular technology updates as time passed, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;- The businesses that were first to adopt&lt;/strong&gt; were the ones who either had a tremendous need or had high operating budgets. These were businesses that had very high standards and were less likely to adopt 'personal' computers that needed finicky operating procedures, had questionable longevity, and had no reliable software (not in BASIC, but in COBOL, which is still the most widely used language in the world by sheer lines of code). They needed high uptime, skilled support personnel, and solid backup methods. A game file getting erased on a personal computer is annoying; a database of million dollar transactions being lost is a train wreck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;- Big Blue has always hired the best&lt;/strong&gt; salespeople and engineers in the world. IBM regularly displays exhilarating examples of design and engineering prowess, much of it from the esoteric realm of basic research ... where all true creativity lives. Their sales and marketing teams are so consistently skilled that you can confidently set your corporate budgets by their projections. IBM is serious engineering, serious design, and serious business. This is their mission. Just as Apple was built from the ground up to serve creatives, IBM was designed to serve big business.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;- So the Business and Scientific users&lt;/strong&gt; mentioned are those who would want a computer, who could afford a computer, and who would actually use a computer ... those people are going to go with what they know. The business people know IBM ... for many 'business' people, the PC wasn't real until IBM made one. It was a toy until it was for real. A computer cost as much as a new car back then. It was a serious decision.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;And then there are the geeks&lt;/strong&gt; among us, the scientists, engineers, and tinkerers of the world, including me, who preferred the open&#xA;  architecture and the variety. For business, downtime is a frustrating&#xA;  expense. For a creative technophile and tinkerer, it is an opportunity&#xA;  to take the computer apart once again, to reformat the hard drive for&#xA;  the millionth time, to upgrade the CPU with the latest gadget. It is a&#xA;  joy I have pursued for over thirty years and I wouldn't change a&#xA;  thing.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If everything isn't super compatible, I'll make do. If the drivers&#xA;  aren't quite ready yet, I'll find an old one. If the OS is full of&#xA;  backward compatible hacks, segmented memory management gimmicks, and&#xA;  interrupt cascades, I'll figure it out. It's all great fun! It is a&#xA;  great puzzle. It is my old pickup up on blocks in the backyard. I get&#xA;  to drive it sometimes, to play the latest RPG or shooter game ... in&#xA;  between repairs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;For a person who likes to fix things ... a computer and OS that is broken a lot can be a gift.&lt;/em&gt;&lt;/strong&gt; That is what the Windows PC is today and has been for a long time. For those times when I need a solid business system that will just keep working, with low cost of ownership and minimal hassles, it is a linux box. And for those times when I need to get things done, when I just want it to work, flawlessly and beautifully, I have my MacBook and iPhone.&lt;/p&gt;&#xA;" OwnerUserId="10792" LastActivityDate="2018-10-09T22:56:56.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7924" PostTypeId="1" AcceptedAnswerId="7928" CreationDate="2018-10-10T04:33:28.780" Score="5" ViewCount="594" Body="&lt;p&gt;Having managed to source a TRS-80 Model III that I'm told hasn't been powered on for quite some time (and I suspect this is a massive understatement), I'm worried that the first thing that might happen when I apply power is that there will be a large flash and/or bang, followed by not much at all :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although it &lt;em&gt;is&lt;/em&gt; a specific machine, I'm happy if some answers are generic, so as to cover a wider audience (or is it visience when you're reading rather than listening?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is &lt;em&gt;hopefully&lt;/em&gt; a simple one. Given its unknown condition, the high liklihood that it may not power up correctly, and my innate paranoia about destroying something I just bought, what should I check before I even plug in the power?&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-10T10:17:03.100" LastActivityDate="2018-10-10T10:17:03.100" Title="What to check before powering on TRS80 Model III in unknown condition" Tags="&lt;power&gt;&lt;trs-80&gt;&lt;trs-80-model-iii&gt;" AnswerCount="3" CommentCount="2" ClosedDate="2018-10-10T10:41:34.300" ContentLicense="CC BY-SA 4.0" />
  <row Id="7925" PostTypeId="2" ParentId="7924" CreationDate="2018-10-10T06:45:08.500" Score="2" Body="&lt;p&gt;This is not a full answer, feel free to improve it.&#xA;Let's start with the basics:&#xA;Use ESD protection when touching any PCBs.&#xA;Clean the PCBs.Inspect for any physical damages.&#xA;Inspect all capacitors to see if any is leaking.&#xA;Check any batteries.&#xA;If possible, check the function of the power supply when it is not connected to any PCBs.&lt;/p&gt;&#xA;" OwnerUserId="10565" LastActivityDate="2018-10-10T06:45:08.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7926" PostTypeId="2" ParentId="7880" CreationDate="2018-10-10T07:58:35.533" Score="2" Body="&lt;p&gt;I see many factors that make C programming uncomfortable for MS-DOS development:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Many of the interface MS-DOS offered was targeted at assembly language anyway, like direct use of AX-DX registers to pass arguments and replies to system calls&lt;/li&gt;&#xA;&lt;li&gt;direct use of the (software) interrupts to call system services&lt;/li&gt;&#xA;&lt;li&gt;use of the 'carry flag' to report error during system calls, which can be efficiently set/cleared/tested at assembly level and is missing from the C programming model altogether.&lt;/li&gt;&#xA;&lt;li&gt;all of the above also applies to calls to the BIOS functions that the MS-DOS will have to do to use low-level &quot;drivers&quot;.&lt;/li&gt;&#xA;&lt;li&gt;it has to run real mode programs, which had to split code among multiple segments. The C execution environment model assumes one segment for the code and one for stack+data. C compilers of the era had complex behaviour to emulate that, sometimes by restricting the program to 64K. As a service to third-party software, MS-DOS must be able to work with buffers/strings located anywhere, forcing it to use exotic FAR pointers and the like all over the code.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Later versions of MS-DOS will still be facing the same constraints about BIOS, established interfaces and real mode addressing, so assembly might still be preferable over C for them.&lt;/p&gt;&#xA;" OwnerUserId="10893" LastEditorUserId="10893" LastEditDate="2018-10-10T14:04:28.167" LastActivityDate="2018-10-10T14:04:28.167" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7927" PostTypeId="2" ParentId="7924" CreationDate="2018-10-10T08:08:39.610" Score="4" Body="&lt;p&gt;First, do a visual inspection. Make sure it's reasonably clean, no liquid damage etc. Check for foreign objects and possible shorts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then check the power supply. It's easier with external types but some internal ones can be disconnected from the main board and tested individually. At the very least, check for shorts between the supply rails and ground. Also visually inspect capacitors for leaks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your country has fuses in plugs make sure its the right fuse, generally the smallest available. 3A is more than enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then finally carefully power it up and be ready to switch it off again if it smokes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do more if you have the right equipment and time to go over it in detail, but that should generally be enough for most machines.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-10-10T08:08:39.610" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7928" PostTypeId="2" ParentId="7924" CreationDate="2018-10-10T09:04:18.667" Score="5" Body="&lt;p&gt;The TRS-80 Model III is a pretty robust machine but there is one common problem -- the RIFA capacitors on the power supply.  These were paper-type and very often short out producing lots of smoke though generally don't cause any damage to the machine itself.  There is an excellent page devoted to that procedure:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.akhara.com/trs-80/psrepair/index.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.akhara.com/trs-80/psrepair/index.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that some care must be taken when opening the machine as it is easy to damage the CRT neck when doing so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other common problems that are troublesome but not dangerous to the machine.  Stuck brightness/contrast knobs.  Keys that don't work.  Disk drives that need lubricating.  I highly recommend this video as a how-to guide:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=76bVeQP8m3Y&quot; rel=&quot;noreferrer&quot;&gt;TRS-80 Model III checks before powering up&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2018-10-10T09:04:18.667" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7929" PostTypeId="2" ParentId="7880" CreationDate="2018-10-10T09:44:13.650" Score="1" Body="&lt;p&gt;&lt;em&gt;In response to a few comments, I revised my answer to contain a short version without my personal interests included.&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;: Was this assembly language approach used also in the newest versions of MS-DOS in the 1990s?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR version:&lt;/strong&gt; &lt;em&gt;(I also give my 'rant' below for anyone interested. I thought it might spur some good discussion.)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;No ... but they kept it as long as they could.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This is akin to &quot;Would you cut off your legs just because you bought a new car?&quot;&lt;/li&gt;&#xA;&lt;li&gt;Assembly was &lt;em&gt;preferred&lt;/em&gt; for optimizing efficiency and would not have been discarded without good reason. Nearly every line of code mapped directly to a machine code instruction. This was a marvel and allowed intimate control over the computer's resources.&lt;/li&gt;&#xA;&lt;li&gt;It was 'normal' for programmers to use assembly back then. Assembly closely mirrored machine code and was as close as most humans could get to communicating directly with the computer. For anything that constantly made calls directly to hardware, this was the 'go to' language.&lt;/li&gt;&#xA;&lt;li&gt;Higher level languages with convenient syntax and builtin help for common functions all had to be interpreted or compiled. This step could introduce errors, or at the very least would use general algorithms or methods that likely would not be the most efficient in every situation.&lt;/li&gt;&#xA;&lt;li&gt;Constraints were different then - memory and storage were very scarce. Processing power and bus speeds were never enough. Optimized, bug-free code was the main goal.&lt;/li&gt;&#xA;&lt;li&gt;Because assembly was common, it was easy. People thought in terms of interrupts, memory addresses, and flags. Still time consuming, but not particularly difficult.&lt;/li&gt;&#xA;&lt;li&gt;This was cutting edge stuff. It was the best that could be done within the constraints of cost and materials that came with the ambitious of goal of an actual working computer that people could have in their home or office.&lt;/li&gt;&#xA;&lt;li&gt;Programs were small enough that one person could write, debug, and optimize if needed. There were no huge communities of coders, no internet, and few minimal BBS forums. It was a frustratingly solitary activity. Portability and reusability were not quite as important.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Things have changed dramatically since then ... it has been exciting to be a part of it so far. After all these years, questions like this bring up 'big picture' thoughts for me. Maybe it's just me ... if watching the cultural shifts that mirror the computer revolution is too dull, I'll delete this and move on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I suppose it is hard to imagine nowadays&lt;/strong&gt;, but programmers were used to writing in assembly language, even straight machine code sometimes. For many tasks, there just wasn't anything else. It was the way things happened and it was miles better than punchcards or hand wiring circuits. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;You have to imagine the context&lt;/strong&gt;. It is something like people today trying to understand just how important the library was before there was internet or even modems. You could not just &quot;google&quot; something. If you wanted to know, you had to a) figure it out, b) find a book, or c) ask an expert. If you happened to be in a small town, you were stuck with (a) and &quot;reinventing the wheel.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is the cost of this convenience?&lt;/strong&gt; People back then were much better at figuring out how to learn something. This is something I know for sure. I've been a teacher for nearly 20 years. I've seen it happen. I even have data, but any glance at the forum topics will give you the answer. Because it was a challenge to find information or knowledge about a subject, it took a lot more thinking and planning. People gained some wicked high level thinking skills just learning how to change spark plugs, testing a capacitor, or even trying over and over to find the best way to fix a flat on a bicycle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The easy availability of information&lt;/strong&gt; has led to less developed information gathering and information assessment skills. People 'just google it' but have no idea how to judge which information is true or reliable. Without frustration, failure, and practice, they don't know what to value and many end up valuing nothing at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;We have a tragic subset of depressing people now&lt;/strong&gt; who are so unwilling to put forth even the smallest amount of effort that they won't even use Google to look something up. They answer, &quot;I don't know!&quot; This answer isn't allowed anymore. &quot;I don't know&quot; just doesn't make sense when anything that is known or has ever been known is at our fingertips. Willful ignorance must be the insidious disease of the people whose lives are just too easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I'm suggesting&lt;/strong&gt; that coding has become something similar. There are tons of front end tools, font services, tag managers, and huge libraries available ... all just to make a website. In back end services, there are tons of resources to manage databases, do scientific calculations, and manage systems. Cars can drive themselves. Social media accounts can be completely automated. Soon, computers will be coding themselves ... and they will do it better than us almost immediately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In many modern situations&lt;/strong&gt;, programmers don't have to really concern themselves with memory management, device access, reading ports, managing interrupts, optimizing hard drive access times, or any of the lower level things that actually make a computer work. It has become more and more 'symbolic' and 'virtual.' Programmers are nestled cozily in a soft bed of libraries and environments that take a lot of the critical thought and creativity away from the activity. I suppose soon we will just sit in front of a computer, or have a conversation while walking in the mall with one, and just ramble on about our creative ideas while the computer implements them in real time somewhere around the world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I'm not sure whether it is better or worse&lt;/strong&gt;, but it is definitely different. Would I prefer to code a modern application in assembly language? Nope. Not even a little bit. Do I find it handy that there are software libraries and wonderful communities of open source developers working together? Yes! What used to be a frustratingly solitary activity is now something that is shared.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;In the sharing, something beneficial has been added. Extra value has&#xA;  been created that wasn't there before. Just like in the Youtuber&#xA;  community, the rising tide lifts all boats.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;BUT, &lt;strong&gt;&lt;em&gt;for the people who never had to&lt;/em&gt;&lt;/strong&gt; do all that thinking and make it fit in 4k of RAM, my anecdotal observations say that they have lost something valuable and I don't know if anything has been put back into the system to replace those lost critical thinking skills. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;We have gained a wonderful social commodity but at the cost collective creativity and problem solving skills.&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How it will work out ... I certainly do not know, but it is a fun ride. &lt;/p&gt;&#xA;" OwnerUserId="10792" LastEditorUserId="10792" LastEditDate="2018-10-11T16:47:27.520" LastActivityDate="2018-10-11T16:47:27.520" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7930" PostTypeId="1" AcceptedAnswerId="7933" CreationDate="2018-10-10T14:31:24.450" Score="11" ViewCount="1231" Body="&lt;p&gt;&lt;a href=&quot;https://link.springer.com/article/10.1007/s00287-013-0717-9&quot; rel=&quot;noreferrer&quot;&gt;I am able to find a few instructions&lt;/a&gt;, such as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Fin&lt;/code&gt; (presumably &quot;Fine&quot;, as in the end of a musical score, ends a program),&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Fin'&lt;/code&gt;, (a conditional &lt;code&gt;Fin&lt;/code&gt;), &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;St&lt;/code&gt; (possibly &quot;Start&quot; -- the need for this is unclear),&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Up&lt;/code&gt; (My guess is &quot;Unterprogramm&quot; which means subroutine, since it apparently invokes subroutine At&lt;sub&gt;1&lt;/sub&gt;,&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;x =?&lt;/code&gt; (Apparently checks the subroutine's return value, which is stored in location 63),&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But I cannot find a complete reference to the Z4 instruction set, nor does anyone seem to have implemented any emulator. I hope this information has not been lost to obscurity! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the complete instruction set of the Z4?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-04-17T15:48:13.367" LastActivityDate="2019-04-17T15:48:13.367" Title="What is the instruction set of the Z4?" Tags="&lt;instruction-set&gt;&lt;zuse&gt;&lt;early-computer&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7931" PostTypeId="2" ParentId="7930" CreationDate="2018-10-10T14:41:11.147" Score="5" Body="&lt;p&gt;&lt;a href=&quot;http://history-computer.com/ModernComputer/Relays/Zuse.html&quot; rel=&quot;noreferrer&quot;&gt;Konrad Zuse—the first relay computer&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Z4 made use of a unit called a Planfertigungsteil (program construction unit),which was used to produce punch tapes, containing instructions for the Z4 in a very easy way. For this reason, it was possible to learn the programming of the Z4 in as little as three hours. The Z4 had a large instruction set in order to calculate complicated scientific programs. The arithmetic processor was a powerful binary floating processor. The set of instructions is as follows:&lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;&lt;p&gt;Instructions for Input: &amp;lt;-, At1, etc.: These allow numbers to be read from the punch tape.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Instructions for Output: -&gt;, D, L, etc.: These instructions cause binary numbers to be converted into their decimal equivalents and the results to be displayed with lamps, on the MERCEDES typewriter as floating or fixed point numbers, or on the punch tape.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Instruction for reading from memory: A n. For example A 17. This reads the contents of memory cell 17 into the Register R1. If Register R1 is occupied, then the contents are loaded into Register R2.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Instruction for writing to memory: S n. For example S 18. This writes the contents of Register R1 into the memory cell 18.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Dyadic operations: +, -, x, /, MAX, and MIN.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Monadic operations: x2, SQR(x), 1/x, | x | , sign(x), x*1/2, x*2, x*(-1), x*10, x*3, x*1/3, x*1/5, x*1/7, x*Pi, x*1/Pi.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Instructions for comparison: x = 0, x &gt;= 0, | x | = infinity test the value in Register R1 and set Register R1 to +1 if the condition is fulfilled, if not, then the contents of Register R1 are set to –1.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;A conditional branch instruction: SPR. The instruction SPR skips the punch tape to the instruction ST, if Register R1 contains +1 (if Register R1 contains –1 then there is no impact).&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Instructions for switching the punch tape readers (the Z4 had two punch tape readers).&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;  &#xA;  &lt;p&gt;Like the Z3, the Z4 supported powerful arithmetic exception handling. The computing times were: addition and memory access, half a second; multiplication, 3 seconds; division and square root, 6 seconds; overall performance, 2000 instructions, or 1000 arithmetic operations per hour.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10565" LastActivityDate="2018-10-10T14:41:11.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7932" PostTypeId="2" ParentId="7930" CreationDate="2018-10-10T14:58:33.757" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://www.horst-zuse.homepage.t-online.de/Konrad_Zuse_index_english_html/rechner_z4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;This page&lt;/a&gt;, put online by his son, gives a good overview of the Z4 instruction set - most important, it's in English as well :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I know, this is a link only answer, but I'm on the run, more detailed later on)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-10-10T14:58:33.757" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7933" PostTypeId="2" ParentId="7930" CreationDate="2018-10-10T15:36:30.913" Score="12" Body="&lt;p&gt;&lt;em&gt;Horst Zuse&lt;/em&gt; (Konrad Zuse's son, a computer science professor by trade) has a &lt;a href=&quot;http://www.horst-zuse.homepage.t-online.de/neu.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;homepage&lt;/a&gt; where he supplies (and sells) various pieces of information, booklets and CDs and DVDs about his father's work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z4 had two floating point registers, &lt;code&gt;R1&lt;/code&gt; and &lt;code&gt;R2&lt;/code&gt;, that were used for calculations. Monadic operations operated on &lt;code&gt;R1&lt;/code&gt; only, dyadic operations on &lt;code&gt;R1&lt;/code&gt; and &lt;code&gt;R2&lt;/code&gt;. Results always went to &lt;code&gt;R1&lt;/code&gt; while &lt;code&gt;R2&lt;/code&gt; was deleted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;Instruction set&quot; of the Z4 was as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;Ablesebefehl&lt;/em&gt;, &lt;code&gt;A n&lt;/code&gt; (e.g. &lt;code&gt;A 17&lt;/code&gt;) - reads a memory cell into &lt;code&gt;R1&lt;/code&gt;, or &lt;code&gt;R2&lt;/code&gt; if &lt;code&gt;R1&lt;/code&gt; is in use (though it is a bit blurry for me what &quot;is in use&quot; is supposed to mean here. It could mean there is a sort of flip-flop in here that switches between target registers on every A operation and is reset by any of the calculation instructions)).&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Speicherbefehl&lt;/em&gt;, &lt;code&gt;S n&lt;/code&gt; (e.g. &lt;code&gt;S 18&lt;/code&gt;) - stores &lt;code&gt;R1&lt;/code&gt; in to a memory cell.&lt;/li&gt;&#xA;&lt;li&gt;Dyadic operations, such as &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;MAJ&lt;/code&gt; (Maximum) and &lt;code&gt;Min&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Monadic operations, such as &lt;code&gt;x^2&lt;/code&gt;, &lt;code&gt;SQR(x)&lt;/code&gt;, &lt;code&gt;1/x&lt;/code&gt;, &lt;code&gt;IxI&lt;/code&gt;, &lt;code&gt;sgn(x)&lt;/code&gt;, &lt;code&gt;x*½&lt;/code&gt;, &lt;code&gt;x*2&lt;/code&gt;, &lt;code&gt;x*(-1)&lt;/code&gt;, &lt;code&gt;x*10&lt;/code&gt;, &lt;code&gt;x*3&lt;/code&gt;, &lt;code&gt;x*1/3&lt;/code&gt;, &lt;code&gt;x*1/5&lt;/code&gt;, &lt;code&gt;x*1/7&lt;/code&gt;, &lt;code&gt;x*pi&lt;/code&gt; and &lt;code&gt;x*1/pi&lt;/code&gt;, performed the equivalent operations.&lt;/li&gt;&#xA;&lt;li&gt;Comparison operations with zero, positive, or infinite (i.e. &lt;code&gt;NaN&lt;/code&gt;) test the number in &lt;code&gt;R1&lt;/code&gt; and return &lt;code&gt;+1&lt;/code&gt; if the condition matches, &lt;code&gt;-1&lt;/code&gt; if not. Note there is apparently no comparison against arbitrary constants beyond these.&lt;/li&gt;&#xA;&lt;li&gt;The conditional jump &lt;code&gt;SPR&lt;/code&gt; was a later addition and included on specific request of the Zürich University (ETH), the first commercial customer. It allows to jump forward over code sequences when &lt;code&gt;R1&lt;/code&gt; is &lt;code&gt;+1&lt;/code&gt;, the jump will not be executed when &lt;code&gt;R1&lt;/code&gt; is &lt;code&gt;-1&lt;/code&gt;. Instructions up to the instruction &lt;code&gt;ST&lt;/code&gt; will be skipped if the jump is taken. &lt;code&gt;SPR&lt;/code&gt; was normally combined with the comparison operations above.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;UP&lt;/code&gt; (change punch reader, &lt;em&gt;Unterplan&lt;/em&gt;) is something that might look like an I/O operation, but actually is much more. The next instructions after &lt;code&gt;UP&lt;/code&gt; are read from  the secondary punch tape reader, until a &lt;code&gt;FIN&lt;/code&gt; instruction is encountered there (which switches back to the primary reader). As the Z4 didn't have loop or backwards jump instructions, this could be used to program subroutines on the secondary reader, or even loops by glueing the secondary punch tape into a (physical) loop and run it around.&lt;/li&gt;&#xA;&lt;li&gt;Output instructions (&lt;code&gt;D&lt;/code&gt; and &lt;code&gt;L&lt;/code&gt;) transfer register contents into human-readable form and emit them to the &quot;display&quot; (a set of lamps), secondary punch tape (external storage), or typewriter.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Z4, like the Z3, handled floating point exceptions in a pretty &quot;modern&quot; way. Numbers that exceed the supported floating point range (&lt;code&gt;1E-20&lt;/code&gt;-&lt;code&gt;1E20&lt;/code&gt;) were stored as &lt;em&gt;overflow&lt;/em&gt; (&quot;sehr groß&quot;) or &lt;em&gt;underflow&lt;/em&gt; (&quot;unbestimmt&quot;). Once a number is stored as that, any follow-up calculation with that number was guaranteed to never reach a valid value again (just like the &lt;code&gt;NaN&lt;/code&gt;s in modern FPUs do).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some fun-facts:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The ETH Zürich, the first commercial customer, leased out the machine to third parties at one Swiss Rappen per instruction. &lt;/li&gt;&#xA;&lt;li&gt;During its whole lifetime at ETH Zürich, the Z4 executed about 100,000 operations (although that seems highly unlikely for a total time over 5 years, but that is what the &lt;a href=&quot;http://www.horst-zuse.homepage.t-online.de/z4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zuse page says&lt;/a&gt;). &lt;/li&gt;&#xA;&lt;li&gt;If you want to visit the machine, it's still there in the &quot;Deutsches Museum München&quot; (in Munich).&lt;/li&gt;&#xA;&lt;li&gt;Operating frequency in today's measures was about 40Hz.&lt;/li&gt;&#xA;&lt;li&gt;The machine operated on 32-bit words and registers.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="780" LastEditorUserId="6659" LastEditDate="2018-10-25T09:55:25.433" LastActivityDate="2018-10-25T09:55:25.433" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7934" PostTypeId="2" ParentId="7879" CreationDate="2018-10-10T17:45:42.593" Score="2" Body="&lt;p&gt;One step further would be to go to Firefox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As one comment says there was an attempt to run Firefox 3 on Irix, but those pages are now offline without snapshots at archive.org.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But via  &lt;a href=&quot;http://www.irix.cc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;IRIX Network!&lt;/a&gt; at least version 1.5.0.7 is on an &lt;a href=&quot;ftp://ftp.irisware.net/nekoware/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FTP mirror&lt;/a&gt; and this is the latest I found: &lt;a href=&quot;http://mirror.larbob.org/nekoware/current/neko_firefox3.0.19.tardist&quot; rel=&quot;nofollow noreferrer&quot;&gt;Firefox 3.0.19&lt;/a&gt; (&lt;a href=&quot;http://mirror.larbob.org/nekoware/diegel/&quot; rel=&quot;nofollow noreferrer&quot;&gt;more&lt;/a&gt;) – That would bring you from 1994 to &lt;a href=&quot;https://website-archive.mozilla.org/www.mozilla.org/firefox_releasenotes/en-US/firefox/3.0.19/releasenotes/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Firefox 3 Release Notes&#xA;v3.0.19, released March 30th, 2010&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or compared to Netscape, maybe &lt;a href=&quot;http://mirror.larbob.org/nekoware/diegel/dillo-3.0.4.1-complete.tardist&quot; rel=&quot;nofollow noreferrer&quot;&gt;dillo&lt;/a&gt; 3.0.4.1? With all the awkwardness that comes with dillo as such, that would brig you to &lt;a href=&quot;https://hg.dillo.org/dillo/raw-file/default/ChangeLog&quot; rel=&quot;nofollow noreferrer&quot;&gt;dillo-3.0.4 [April 09, 2014]&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6802" LastEditorUserId="6802" LastEditDate="2019-03-07T17:01:51.373" LastActivityDate="2019-03-07T17:01:51.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7935" PostTypeId="1" AcceptedAnswerId="7945" CreationDate="2018-10-11T02:10:34.260" Score="14" ViewCount="305" Body="&lt;p&gt;I am trying to recall the name of a peripheral I use to have for my C64 in the 1980s.  I believe it was called Exchange or X-Change.  You hooked it up to your cable TV service and it would decode a signal that would allow you to capture wire news service.  You connected it to the C64 via RS-232, I believe.  I think it was a one time purchase, you bought the box and that was it.  I want to say the box was made by somebody like Jerrold or another box manufactured from the 80s. Anyone remember this? I’d like to see if I can find anything online about it but haven’t had much luck and wonder if I have the name even right. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit/Update&lt;/strong&gt;: I lived in the United States, Ohio at the time.  I can't recall what cable company we used back then.  The box didn't come from the cable company, I believe you had to order it and your cable company had to transmit the signal (anyone remember getting FM over cable, it was sort of like that)  I want to say I purchased this in about 1986 or 1987, the box was the size of a cable box but was much lighter weight. I remember after I owned one, seeing a write up about the device in at least one Commodore magazine at the time.  I later got an Amiga 500 and I think it worked with that too, but I am not 100% sure. Finally the software was similar to RSS where you could subscribe to different topics and the device would catch them and show them in a reader.  I am having a hard time remembering if you had to have the computer always running to get stories throughout the day or just the device. It was just an odd device for the time and I recently recalled it and wanted to try to read up on it if I i could.&lt;/p&gt;&#xA;" OwnerUserId="10899" LastEditorUserId="10899" LastEditDate="2018-10-11T12:46:42.160" LastActivityDate="2018-10-11T20:26:22.683" Title="C-64 Exchange News Service" Tags="&lt;commodore-64&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7936" PostTypeId="2" ParentId="7784" CreationDate="2018-10-11T02:41:46.797" Score="11" Body="&lt;p&gt;I successfully got the RK-P400C printing from a serial console (minicom on Linux) today. Here's how to do it for future reference...;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DB25 connector on the right side is a 25 pin serial port. At the top right of the typewriter there are sets of switches to select font and size, at the far right of those are two switches with the labels &quot;KBI, KBII, EXT&quot; and &quot;DP, LL, COMMAND&quot;. For printing from the serial port set the first to &quot;EXT&quot; and the second to &quot;DP&quot; (direct print) mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the switch is flipped to &quot;EXT&quot; the display will show &quot;OFF LINE.&quot; On this screen by pressing return on the typewriter keyboard it will show the baud rate, parity, and line feed settings. Pressing space when a given setting is on the screen will adjust it. The possible baud rates are 110, 150, 300, 600, 1200, and 2400, with the choice of either 8 bit no parity or 7 bit even parity. A USB to 25 pin serial port adapter with an FTDI chipset works fine for me, but it seems to require a crossover-type cable or null modem adapter cable. No hardware flow control or software flow control enabled. Toggle the blue &quot;ON LINE&quot; key at the bottom right of the typewriter keyboard and it's ready to receive commands/ASCII characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's it for now, I haven't had a chance to experiment with the graphics commands yet but this should print plaintext OK.&lt;/p&gt;&#xA;" OwnerUserId="10733" LastActivityDate="2018-10-11T02:41:46.797" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7937" PostTypeId="1" AcceptedAnswerId="7940" CreationDate="2018-10-11T09:31:47.480" Score="33" ViewCount="10067" Body="&lt;p&gt;I am old enough to remember computers that were not octet oriented.  E.g. the first that I used was an ICL 4120.  It had 24 bit words which were, when necessary, divided into four 6-bit characters.  There were operations to support extracting the 6 bit characters from the words.  There were no corresponding operations to extract three 8 bit sub-units.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am excluding computers which can address memory in octets even if their word size is larger e.g. 16, 32, 64, etc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To narrow down the question and exclude specialized chips, I will require that the computer be capable of some level of text I/O to a human, more than just a limited set of fixed messages. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do any remain in production?  If not which was the last?  Two interpretations of last are interesting: the last to be launched and the last to remain on sale (as new).  I am not asking for the last to be used as that is probably an impossible question.  &lt;/p&gt;&#xA;" OwnerUserId="7805" LastEditorUserId="7805" LastEditDate="2018-10-13T11:36:10.963" LastActivityDate="2018-10-13T11:36:10.963" Title="Last computer not to use octets / 8-bit bytes" Tags="&lt;memory&gt;" AnswerCount="7" CommentCount="31" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7938" PostTypeId="2" ParentId="7937" CreationDate="2018-10-11T12:40:50.863" Score="19" Body="&lt;p&gt;Such a question is a bit difficult, or rather impossible, to answer. While it is true that most mainstream computers today use units of 8 bits for bytes and and, at least Latin, characters, there always have been and still are exceptions. So, the answer to your &quot;the last one&quot; question probably is &quot;there is none&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of widespread embedded MCUs with Harvard architecture that use 12-, 14- (PIC) or 16-bit wide (AVR) program memory and disallow 8-bit access to this memory. A &quot;byte&quot; in program memory for those MCUs thus has the above width.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same thing applies for a lot of DSPs - They have byte widths of typically between 16 and 24 bits and very rarely allow (8-bit-)byte extraction from this memory. Typical examples would be the TMS 32000 (TI) or DSP56000 (Motorola/Freescale/NXP) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is disputable whether systems based on either of these MCUs/DSPs should be considered &quot;computers&quot;, but in my book they have to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a less strict sense, even relatively modern CPUs like MIPS could be considered to use, in this specific case, 32-bit &quot;bytes&quot;. While the MIPS architecture has the concept of &quot;8-bit bytes&quot; in internal registers, MIPS CPUs technically cannot do less than 32-bit data transfers from and to memory. A similar restriction applies to the address registers in the Motorola 68k, and even your trusty PC's FPU will not work with anything that's 8-bit only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What seems to have evolved as a kind of standard, though, is that register and data bus width on &lt;em&gt;most&lt;/em&gt; of today's CPUs typically is a &lt;em&gt;multiple of eight&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-10-12T08:23:42.507" LastActivityDate="2018-10-12T08:23:42.507" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7939" PostTypeId="2" ParentId="7937" CreationDate="2018-10-11T14:37:40.990" Score="13" Body="&lt;h3&gt;Univac 36-bit&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_1100/2200_series&quot; rel=&quot;noreferrer&quot;&gt;Univac 1100/2200 series&lt;/a&gt; used a 36-bit word. Many models had functions to work with a word as 4 9-bit &quot;bytes&quot; - using the term byte but fitting your definition of a non-byte computer based on not using 8-bit bytes. I had a few courses on an 1100/80 at the University of Maryland in the early 80s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2200 series appears to have carried on the 36-bit architecture, which in theory means up to at least 1997 according to the Wikipedia article. But the ClearPath series, while compatible with the 1100/2200, also included Xeon which would, by definition, mean it included plenty of 8-bit byte oriented instructions.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2018-10-11T14:37:40.990" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7940" PostTypeId="2" ParentId="7937" CreationDate="2018-10-11T15:40:52.267" Score="35" Body="&lt;p&gt;In the early 1990's CDC sold a line of Cyber 180 mainframes. These machines were descendants of the CDC 6600 and supported that machine's 60-bit word size and 6-bit characters. Notably, one of the innovations of the 180 over the 170 is that the 180 added support for 64-bit words and 8-bit characters, and could run software written for both modes simultaneously. So this is probably towards the tail end of sub-8-bit character oriented computing, at least at commercial data processing scale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the other end of the spectrum, HP calculators used a series of fully custom four bit CPUs that shipped as late as the early 2000's. These started out as custom multi-chip devices and evolved into what we'd now consider a system on a chip, with some mixed analog and digital logic on the same die. CPU characteristics are what you'd expect from a custom chip for this purpose: highly optimized for calculator operations.  This means 4-bit data paths and and ALU that has both BCD and Binary modes. There were also 64-bit wide registers (16 digits) for numbers and 20-bit wide registers for the 1M-nybble address space. Also, there were a number of CPU operations for specific fields of the larger registers (mantissa, exponent, etc.) Around 2002-3, HP switched to using a commodity ARM part running an emulator of the older custom CPU. (And I believe that was their final calculator architecture.)&lt;/p&gt;&#xA;" OwnerUserId="4522" LastEditorUserId="4522" LastEditDate="2018-10-11T21:01:41.463" LastActivityDate="2018-10-11T21:01:41.463" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7942" PostTypeId="2" ParentId="7937" CreationDate="2018-10-11T16:59:45.770" Score="28" Body="&lt;p&gt;Unisys continued shipping 36-bit systems far more recently than 1997. The last new 36-bit Dorado - the 800 series -- was released in 2011, and superseded - per my recollection - by the Xeon-based, emulation-oriented 8300 series in 2015. (Xeon emulating the Dorado ISA had made up a progressively larger part of the Dorado product line since the late 1990s, but Unisys CPUs persisted at the high end. A similar story happened with Libra, Unisys's name for the Burroughs Large Systems 48-bit a architecture.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Groupe Bull released the last of their 36-bit line in 2004, the DPS-9000/TA300; it was subsequently superseded by Itanium systems running an emulator called V9000.&lt;/p&gt;&#xA;" OwnerUserId="10909" LastActivityDate="2018-10-11T16:59:45.770" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7943" PostTypeId="2" ParentId="7937" CreationDate="2018-10-11T18:27:11.280" Score="9" Body="&lt;p&gt;The PDP-8 and its derivatives were 12-bit machines using (at least sometimes) 6-bit characters.  While the last actual PDP-8 ceased production in 1980, by that time other systems existed that used microprocessors based on the architecture, and they continued to be produced for many years (the DECmate word processing system, for example, was produced until 1990).  Also, as many PDP-8s found their way into industrial control systems and other applications that change infrequently, they have been very long-lived.  It's not clear to me whether any are still in actual production use today, but certainly they were in use relatively recently, and &lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=780&quot; rel=&quot;noreferrer&quot;&gt;this site suggests they were definitely in use as recently as 2000&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-10-11T18:34:18.640" LastActivityDate="2018-10-11T18:34:18.640" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7944" PostTypeId="2" ParentId="7937" CreationDate="2018-10-11T19:51:51.853" Score="3" Body="&lt;p&gt;The Intel 4040 processor may well have been the last commonly used sub-8bit processor.    Intel produced this series 1974 and 1981.   It had a 4-bit architecture (i.e. register size) and generally used Binary Coded Decimal (BCD) arithmetic and I/O.  &lt;a href=&quot;https://i.stack.imgur.com/rnS9t.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rnS9t.png&quot; alt=&quot;Intel 4040 architecture&quot;&gt;&lt;/a&gt;  (Diagram from Wikipedia)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Intel &lt;a href=&quot;http://www.retrotechnology.com/restore/4040_doc.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intellec MCS 4/40 Microcomputer Development System&lt;/a&gt; was based on a 4040 processor, had text I/O based on a TTY interface, and PROM program memory.  Note that the program memory &lt;em&gt;was&lt;/em&gt; 8-bit, but the data RAM was only 4 bit, as were the registers and ALU.   Intel referred to both addressable the 4-bit and 8-bit memories as bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to last computer in active use, who knows? There are definitely working examples of several of these architectures in places like &lt;a href=&quot;https://livingcomputers.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://livingcomputers.org&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S.  Other 4-bit processors are still available for purchase today, e.g. &lt;a href=&quot;https://www.renesas.com/us/en/doc/products/mpumcu/001/rej03b0148_4508ds.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Renesas 4508 group.&lt;/a&gt;   &lt;/p&gt;&#xA;" OwnerUserId="10861" LastEditorUserId="10861" LastEditDate="2018-10-12T21:37:42.987" LastActivityDate="2018-10-12T21:37:42.987" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7945" PostTypeId="2" ParentId="7935" CreationDate="2018-10-11T20:18:02.767" Score="11" Body="&lt;p&gt;It was called &lt;a href=&quot;https://en.wikipedia.org/wiki/X*Press_X*Change&quot; rel=&quot;noreferrer&quot;&gt;X*Press X*Change&lt;/a&gt; and was in operation from late 1986 until 1997. Participating cable providers would receive the data by satellite, then broadcast it on their networks. The service was available for the Apple II series, Amiga, Atari ST, C64/C128/Plus4, Macintosh, and MS-DOS. The Commodore version used a special cartridge while other versions connected through RS-232. The service provided news, sports, weather, stock ticker quotes and so on at 9600 baud. It was available in the USA and &lt;a href=&quot;http://www.grot.com/xpress/xpress-list-1992/0036.html&quot; rel=&quot;noreferrer&quot;&gt;Canada&lt;/a&gt;. &lt;a href=&quot;https://www.atarimagazines.com/compute/issue78/017_1_X_Press_Information_Service.php&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; is an article in Compute! magazine (issue #78, Nov. 1986) about the service.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-10-11T20:26:22.683" LastActivityDate="2018-10-11T20:26:22.683" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7947" PostTypeId="2" ParentId="7735" CreationDate="2018-10-12T04:34:00.687" Score="9" Body="&lt;p&gt;Yes, at a physical level there was some commonality, but not at as high a level the question references.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mid 1960s, DEC sold a line of simple logic modules, known as flip chips. The PDP-7 and the original PDP-8 were built (at least partially) out of the R-series modules, though there were some custom modules created just for them (e.g. a W130 specific to the PDP-8.   These were interconnected through a wire-wrap backplane, &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:DEC_PDP-8S_Flip-Chip_handle_row,_at_Goodwill_Computer_Museum.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;as illustrated&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These modules preformed fairly simple logic function that were highly reusable, for example a R107 module implemented seven inverters (NOT gates) using discrete transistors.   You can find the datasheets and documentation for the flip-chip modules in the &lt;a href=&quot;http://www.bitsavers.org/pdf/dec/handbooks/Digital_Logic_Handbook_1968.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Digital Logic Handbook&lt;/a&gt;.&lt;a href=&quot;https://i.stack.imgur.com/ugd6B.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ugd6B.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later versions of DEC processors were more integrated, with more functionality on one custom board, and as integrated circuit technology developed, a SSI digital logic chips could do everything a flip-chip could, in much less space.   For comparison, a SN7404 IC implemented a six bit inverter function similar to the R107 flip-chip.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By 1969, new DEC designs began using integrated circuits rather than the discrete transistors of the older flip chip modules.   The modules however remained in use for some time after this.  If memory serves, the early PDP-10 and PDP-11  models also used the red-handled R-series modules as well.   Those machines were in use well into the 1970s and early 1980s, so spare modules for repair were common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes just reseating or cleaning the contacts on a module's card edge connector would fix a problem, the modules were fairly robust, and a Pink Pearl brand pencil eraser was commonly used for cleaning (with modules removed from the backplane.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may also be of interest to note that in the 1970s, Texas Instruments ICs such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/74181&quot; rel=&quot;nofollow noreferrer&quot;&gt;74181 ALU bit-slice&lt;/a&gt; were used in processors produced by several different vendors, including DEC.   But these did not influence the instruction sets much either.   &lt;/p&gt;&#xA;" OwnerUserId="10861" LastEditorUserId="10861" LastEditDate="2018-10-16T15:56:55.467" LastActivityDate="2018-10-16T15:56:55.467" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7948" PostTypeId="2" ParentId="7937" CreationDate="2018-10-12T17:35:29.340" Score="5" Body="&lt;p&gt;There are plenty of chips around today that don't use 8-bit bytes. For example, some architectures of the Kalimba DSP used in CSR/Qualcomm chips use 24-bit words and 24-bit bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is an important distinction that a 'byte' is not 8 bits but &lt;em&gt;at least&lt;/em&gt; 8 bits, and is determined by the minimum addressable unit of a processor. That's because there are operators in 'C' that specifically return the answer in bytes, not octets (&lt;em&gt;sizeof&lt;/em&gt; being the most obvious).&lt;/p&gt;&#xA;" OwnerUserId="10924" LastActivityDate="2018-10-12T17:35:29.340" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7949" PostTypeId="1" AcceptedAnswerId="7952" CreationDate="2018-10-12T21:02:48.120" Score="9" ViewCount="976" Body="&lt;p&gt;Reading this &lt;a href=&quot;http://sta.c64.org/cbm64mem.html&quot; rel=&quot;noreferrer&quot;&gt;page on Commodore 64 memory structure and usage&lt;/a&gt; I stumbled across a cell where the table claims that this memory is unused. What exactly does this entail?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this mean that if you wanted to put something in that address you can put whatever you want? Confused, and would appreciate all answers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GTqIx.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GTqIx.png&quot; alt=&quot;picture&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10920" LastEditorUserId="6659" LastEditDate="2018-10-12T21:14:50.443" LastActivityDate="2018-10-12T22:01:33.003" Title="What is an &quot;unused&quot; memory address?" Tags="&lt;assembly&gt;&lt;commodore&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7950" PostTypeId="2" ParentId="6499" CreationDate="2018-10-12T21:11:17.377" Score="3" Body="&lt;p&gt;Microsoft's license-key scheme in those days was actually pretty laughable by today's standards, but it kept honest people honest. Essentially, any key where the sum of the digits was zero modulo seven (IIRC) would activate the product.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No Activation, no public-key crypto (which would've been possibly non-exportable in those days), just some simple modulus math. It was a much simpler time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 25-character public-key-based license key was more secure, but that just meant that if you were of a piratical bent, you had to find someone with a license you could copy. It wasn't until Activation was implemented that Microsoft really got a grip on license-sharing.&lt;/p&gt;&#xA;" OwnerUserId="6617" LastActivityDate="2018-10-12T21:11:17.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7951" PostTypeId="2" ParentId="7949" CreationDate="2018-10-12T21:13:05.750" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I stumbled across a cell in the table that claims that the memory address is unused. What exactly does this entail?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, exactly as it's described, it's not used by any of the ROM routines.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does this mean that if you wanted to put something in that address you can put whatever you want?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly - it's one ZP address that can be used in yout programs without causing any conflict with KERNEL or BASIC ROM&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-10-12T21:13:05.750" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7952" PostTypeId="2" ParentId="7949" CreationDate="2018-10-12T21:25:41.127" Score="16" Body="&lt;p&gt;Back in the day, it meant that present versions of the Commodore BASIC and Kernel did not use those locations, but Commodore said nothing about whether future versions of the ROM might do so.  Addresses 251-254, by contrast, were specifically marked as available for user programs and Commodore guaranteed that nothing in present nor future versions of the BASIC nor Kernel would do anything to conflict with such usage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, every version of the BASIC and Kernel ROMs that will ever be produced by Commodore, has been produced by now, and any locations which haven't been used by any versions released to date won't be used by any future versions, ever.  Back in the day, however, programmers would have had no way of knowing that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In official documentation, storage locations which aren't currently used, but which might be used in future, will often be marked &quot;reserved&quot;.  I don't remember whether Commodore documented the indicated addresses that way.  Third-party documentation, especially written after the C64 was discontinued, will be more likely to regard unused locations as &quot;unused&quot; for the reasons indicated above.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2018-10-12T22:01:33.003" LastActivityDate="2018-10-12T22:01:33.003" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7953" PostTypeId="1" AcceptedAnswerId="7954" CreationDate="2018-10-13T09:16:00.793" Score="15" ViewCount="2170" Body="&lt;p&gt;This is a nerd question but I can’t find anything in google. So, in which programming language did the classical memory management system first be implemented?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mean the division into value types (ordinary Int, Bool, etc.) and reference types, for which we must use alloc / malloc to initialize and free to free up memory in C (as I heard it is called heap). I called it a classic, because I met this approach in many other languages ​​and thought it was almost a standard. But it became interesting to me in which languages ​​this mechanism was implemented for the first time, or maybe it completely depends on the type of OS. I'm not sure that in some integral BASIC, for example, was something like that.&lt;/p&gt;&#xA;" OwnerUserId="10928" LastEditorUserId="10928" LastEditDate="2018-10-13T09:53:49.467" LastActivityDate="2018-10-13T21:04:11.897" Title="First language with C-like memory management" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7954" PostTypeId="2" ParentId="7953" CreationDate="2018-10-13T09:50:11.137" Score="22" Body="&lt;h2&gt;Stack&lt;/h2&gt;&#xA;&lt;p&gt;At least for the Stack, as used for subroutine handling (return address as well as parameter passing and local variables) ZMMD might be the first.&lt;/p&gt;&#xA;&lt;p&gt;Bauer and Samelson, at the University of Munich started building a Compiler using the recent 'invented' stack principle in 1955 for the PERM, a back then tube computer. The stack principle was not only used to manage subroutines, but also as a method to compile the source code. This led in 1956 to a cooperation between the Universities of Zurich, Munich, Mainz and Darmstadt (hence the name). The idea was to create a language that could be used to compile programs for various machines from a single source.&lt;/p&gt;&#xA;&lt;p&gt;In 1958 this led to an ACM conference in Zurich, where the concept was formalized and agreed as a standard called &lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL_58&quot; rel=&quot;noreferrer&quot;&gt;International Algebraic Language&lt;/a&gt; (IAL), later to be known as ALGOL-58.&lt;/p&gt;&#xA;&lt;p&gt;First implementations where made for&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/ERMETH&quot; rel=&quot;noreferrer&quot;&gt;ERMETH&lt;/a&gt; (Zurich)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PERM_(computer)&quot; rel=&quot;noreferrer&quot;&gt;PERM&lt;/a&gt; (Munich)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Z22_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Zuse Z22&lt;/a&gt; (Mainz)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/Siemens_2002&quot; rel=&quot;noreferrer&quot;&gt;Siemens 2002&lt;/a&gt; (Mainz)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/Darmst%C3%A4dter_Elektronischer_Rechenautomat&quot; rel=&quot;noreferrer&quot;&gt;DERA&lt;/a&gt; (Darmstadt)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_650&quot; rel=&quot;noreferrer&quot;&gt;IBM 650&lt;/a&gt; (Darmstadt)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In fact, for the Zuse, Algol became somewhat like BASIC on later home computers, as it stayed true to the idea of not using binary code, but compilation at execution. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Z23_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Z23&lt;/a&gt; (transistorized version of the Z22) was delivered by default with an Algol compiler as part of the OS memory (Drum). Programs to be executed were loaded from external memory (punch card, punch tape, magnetic tape) and compiled each time they were used.&lt;/p&gt;&#xA;&lt;p&gt;Algol is often named the first 'modern' language. C is a true descendant of Algol with its change of keywords into symbols and some hardware-specific addons as notable differences.&lt;/p&gt;&#xA;&lt;h2&gt;Heap&lt;/h2&gt;&#xA;&lt;p&gt;Memory management like the C heap was also envisioned with Algol, but not implemented, as the very first machines simply hadn't enough memory available to make frivolous use of precious global memory :) But it did allow to allocate dynamic stack memory at runtime (*1).&lt;/p&gt;&#xA;&lt;p&gt;This changed dramatically during the early 1960s, as computers switched from drums to core - and core in huge sizes, sometimes 64 KiB and more :)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PL/I&quot; rel=&quot;noreferrer&quot;&gt;PL/1&lt;/a&gt;&lt;/strong&gt; might be the first, at least the first major language to implement a heap management. It got introduced in 1966 with IBM's PL/1 for the /360 (*2). Algol added &lt;a href=&quot;https://link.springer.com/article/10.1007%2FBF01935562&quot; rel=&quot;noreferrer&quot;&gt;support for dynamic allocation&lt;/a&gt; about the same time, officially with it's &lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL_68&quot; rel=&quot;noreferrer&quot;&gt;Algol-68&lt;/a&gt; standard, where also a &lt;code&gt;heap&lt;/code&gt; keyword was added to allocate heap memory for a structure (*3).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Fun fact for C: There is next to no C program without an ASCII backslash (&lt;code&gt;\&lt;/code&gt;) character, but it was Algol that made ANSI to &lt;a href=&quot;https://en.wikipedia.org/wiki/Backslash#History&quot; rel=&quot;noreferrer&quot;&gt;introduce it to its September 1961&lt;/a&gt; version, so the special Algol operators &lt;code&gt;∧&lt;/code&gt; (AND) and &lt;code&gt;∨&lt;/code&gt; (OR) could be spelled using a digraph of ASCII characters (&lt;code&gt;/\&lt;/code&gt;, &lt;code&gt;\/&lt;/code&gt;) - not to mention that C, as Algol's grandchild, did support them in addition to &lt;code&gt;&amp;amp;&lt;/code&gt;/&lt;code&gt;|&lt;/code&gt; -- at least in early versions.&lt;/p&gt;&#xA;&lt;p&gt;Which in turn shows why Unicode is such a great idea, as it gave back all the great &lt;a href=&quot;https://en.wikipedia.org/wiki/Mathematical_Operators&quot; rel=&quot;noreferrer&quot;&gt;mathematical operators&lt;/a&gt; early programming languages used, including Ac and Vel.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - This did not only go well with its creators idea of a nicely nested program and data structure, but also was highly efficient and provided automatic garbage collection. Everything allocated on the stack was automatically cleaned when leaving a procedure, so any need for dynamic memory was satisfied by the stack, due to this nature of only being accessible to code on the same or lower level of nesting, and automatic cleaning when leaving.&lt;/p&gt;&#xA;&lt;p&gt;After all, the heap is as evil as any other global variable, isn't it?&lt;/p&gt;&#xA;&lt;p&gt;*2 - An early example how bloaty software developed by committee can be - to fit the compiler into back then well suited 64 KiB machines, it had to be split into almost 100 overlays swapped in during a single compile run.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Unlike next to all of its offspring, Algol could allocate dynamic runtime memory from the stack as well as from a heap.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;REF ASTRUCT foo = LOC ASTRUCT;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;allocates an ASTRUCT size chunk on the (local) stack, while&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;REF ASTRUCT bar = HEAP ASTRUCT;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;requests a similar one from the (global) heap.&lt;/p&gt;&#xA;&lt;p&gt;There was only one heap. Allocation from user pools wasn't supported (as always it could be handled as some kind of array of structures by the program itself).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-10-13T20:29:35.250" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7955" PostTypeId="1" CreationDate="2018-10-13T19:30:44.397" Score="2" ViewCount="256" Body="&lt;p&gt;According to the question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7638/why-did-dos-use-dollar-terminated-strings&quot;&gt;Why did DOS use dollar-terminated strings?&lt;/a&gt; DOS uses dollar-terminated strings, inherited from CP/M which used them because DEC also used dollar as the string terminator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, DOS is not the only context where dollar is a string terminator. It is well-known that parsing theory within computer science also uses dollar as a special character meaning the end of input. As an example, the Wikipedia page about LL parsing refers to $ as the end of input: &lt;a href=&quot;https://en.wikipedia.org/wiki/LL_parser#Parser&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/LL_parser#Parser&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any connection in the use of the dollar sign as the end of string in DOS and the end of input in parsing theory? If there is a connection, which one was first: parsing theory? Or DOS / CP/M / DEC?&lt;/p&gt;&#xA;" OwnerUserId="6487" LastActivityDate="2018-10-14T07:28:27.270" Title="Was parsing or operating systems the first user of dollar sign as end of string/input?" Tags="&lt;ms-dos&gt;&lt;compilers&gt;&lt;cp-m&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7956" PostTypeId="2" ParentId="7955" CreationDate="2018-10-13T19:57:31.980" Score="2" Body="&lt;p&gt;It is basically any character that is not part of the syntax.  There is no connection with parsing theory.  It depends on the definition of what is being parsed.  $ is usually used to reference the stack.  The LL example just uses the $ to mean push into the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Principles of Compiler Design by Aho (1977), in the shift-reduce parsing example, $ is also used to mean push on the stack.  In Compiler Construction for Digital Computers by Gries (1971), # is used for the same purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ was used for all sorts of things in languages.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In BASIC, it denotes strings&lt;/li&gt;&#xA;&lt;li&gt;In BCPL it is a kind of bracket ($ and $)&lt;/li&gt;&#xA;&lt;li&gt;In Intel Fortran (also MS, DEC and Compaq) it is a directive&lt;/li&gt;&#xA;&lt;li&gt;In makefiles it is a variable or passed in parameter&lt;/li&gt;&#xA;&lt;li&gt;In bash, TCL and DEC command language it is the value of a variable&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The other commonly used ones are %, # and &amp;amp;&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2018-10-13T19:57:31.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7957" PostTypeId="2" ParentId="7955" CreationDate="2018-10-13T20:28:21.953" Score="1" Body="&lt;p&gt;In context of the description of LL-Parsers (and others) $ is not the &lt;code&gt;$&lt;/code&gt; character, but a &lt;em&gt;symbol&lt;/em&gt; representing End of Input (EOI). It's a symbol like all the others within the set of formulas describing what a (LL) parser does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take a look at the C example for such a parser, you'll easy see the lexer looking for a null char as the EOI character, not $:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        case '\0': return TS_EOS; // end of stack: the $ terminal symbol&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-13T21:41:22.080" LastActivityDate="2018-10-13T21:41:22.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7958" PostTypeId="2" ParentId="7953" CreationDate="2018-10-13T21:04:11.897" Score="4" Body="&lt;p&gt;This question starts of with a wrong premise. C does no have this distinction between &quot;value types&quot; and &quot;reference types&quot; at all. However, &lt;a href=&quot;https://en.wikipedia.org/wiki/Simula&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Simula&lt;/strong&gt;&lt;/a&gt; significantly predates C, being developed in 1965, and Simula does have &lt;code&gt;Ref&lt;/code&gt; types. &lt;/p&gt;&#xA;" OwnerUserId="10933" LastActivityDate="2018-10-13T21:04:11.897" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7959" PostTypeId="1" CreationDate="2018-10-13T23:29:19.320" Score="1" ViewCount="189" Body="&lt;p&gt;By use, I mean are they still actively being developed for. I know this is the case in New Zealand and USA. In particular, is ALGOL code still being written on them?&lt;/p&gt;&#xA;" OwnerUserId="10937" LastActivityDate="2018-10-13T23:29:19.320" Title="Are Unisys ClearPath Libra mainframes still in use in Australia?" Tags="&lt;mainframe&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="7960" PostTypeId="2" ParentId="7955" CreationDate="2018-10-14T07:28:27.270" Score="2" Body="&lt;p&gt;It has already been mentioned that in &quot;parsing theory&quot;, &lt;code&gt;$&lt;/code&gt; isn't necessarily used as the end-of-input marking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, Unix was developed first on DEC machines, esp. the PDP-11, and at that time results from parsing theory (e.g regular expressions) were implemented (e.g. &lt;code&gt;grep&lt;/code&gt;). So it was natural to choose the end-of-input symbol DEC was already using, namely &lt;code&gt;$&lt;/code&gt;. And that's still the case today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This in turn probably influenced whoever wrote the wikipedia page to use &lt;code&gt;$&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-10-14T07:28:27.270" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7961" PostTypeId="2" ParentId="7595" CreationDate="2018-10-14T15:32:41.793" Score="2" Body="&lt;p&gt;The CEMCORP / Burroughs / Unisys &lt;a href=&quot;https://en.wikipedia.org/wiki/Unisys_ICON&quot; rel=&quot;nofollow noreferrer&quot;&gt;ICON&lt;/a&gt; (Ontario, Canada - 1984) had a TMS5220 on the main board. Fairly advanced for its time (80186, 384 KB RAM, colour [EGA] graphics, multitasking, running QNX) this educational computer is now extraordinarily rare to find in working condition, for several reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The ICON workstation is useless without the accompanying server connected over &lt;a href=&quot;https://en.wikipedia.org/wiki/ARCNET&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARCnet&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Very little software was written for the ICON&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The entire educational fleet of ICONs was scrapped in 1994, and Ontario's archives refused to preserve any of the systems.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are a couple of known-working ICON systems left, but no emulators or disk images available. Later machines were PC-compatible and mostly ran MS-DOS or Windows.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-10-14T15:32:41.793" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7962" PostTypeId="1" CreationDate="2018-10-14T17:15:42.207" Score="8" ViewCount="743" Body="&lt;p&gt;I am reading the book &lt;a href=&quot;https://www.stevemorse.org/8086/index.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;&quot;The 8086 / 8088 Primer Second Edition&quot;&lt;/em&gt; by Stephen P Morse&lt;/a&gt;. In it on page 54, it says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 8086 provides instructions to facilitate the task of sign extension. These instructions were initially named &lt;code&gt;SEX&lt;/code&gt; (&lt;em&gt;s&lt;/em&gt;ign &lt;em&gt;ex&lt;/em&gt;tend) but were later renamed to [...] &lt;code&gt;CBW&lt;/code&gt; (&lt;em&gt;c&lt;/em&gt;onvert &lt;em&gt;b&lt;/em&gt;yte to &lt;em&gt;w&lt;/em&gt;ord), and &lt;code&gt;CWD&lt;/code&gt; (&lt;em&gt;c&lt;/em&gt;onvert &lt;em&gt;w&lt;/em&gt;ord to &lt;em&gt;d&lt;/em&gt;ouble word).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What Intel chip provided the primitive &lt;code&gt;SEX&lt;/code&gt; (as documented) and what was the last chip produced before Intel underwent the &lt;code&gt;SEX&lt;/code&gt; change documenting the new &lt;code&gt;SEX&lt;/code&gt;-equivalent differently.&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="8579" LastEditDate="2018-10-15T01:37:01.690" LastActivityDate="2018-10-15T12:05:06.100" Title="When did Intel undergo the SEX change?" Tags="&lt;assembly&gt;&lt;intel&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7963" PostTypeId="2" ParentId="7962" CreationDate="2018-10-14T17:24:57.860" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What Intel chip provided the primitive &lt;code&gt;SEX&lt;/code&gt; and what was the last chip produced before Intel underwent the &lt;code&gt;SEX&lt;/code&gt; change?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;None, as that's a function which is only needed if a CPU operates on words longer than 8 bit - something no previous 8 bit (intel) CPU did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a new instruction created for the 8086, so a 8 bit value could be sign extended to 16 bit for further 16 bit operations. Mr. Morse, who did the whole instruction level design for the 8086, named it &lt;code&gt;SEX&lt;/code&gt; in his design, but got overruled later on.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So if you excuse extending the pun, it was never a girl, the proud father just hoped for one :)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As a side note, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/8712/martin-rosenau&quot;&gt;Martin Rosenau&lt;/a&gt; reminded me &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7962/when-did-intel-undergo-the-sex-change/7964?noredirect=1#comment23100_7963&quot;&gt;in his comment&lt;/a&gt;, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6809&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motorola 6809&lt;/a&gt;, released the same year as the 8086, did call their sign extension operation &lt;code&gt;SEX&lt;/code&gt;, which extended an 8 bit value in accumulator &lt;code&gt;B&lt;/code&gt; into the 16 bit accumulator &lt;code&gt;D&lt;/code&gt; (where &lt;code&gt;B&lt;/code&gt; is the lower half anyway).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-15T12:05:06.100" LastActivityDate="2018-10-15T12:05:06.100" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7964" PostTypeId="2" ParentId="7962" CreationDate="2018-10-14T17:36:46.200" Score="1" Body="&lt;p&gt;The first CMOS microprocessor, the CDP1802, has a 4-bit &quot;X&quot; register which is used to select one of 16 registers for use with many opcodes including those for arithmetic and bitwise operations.  That particular chip uses 16 opcodes 0xE0 through 0xEF, called &quot;SEX 0&quot; through &quot;SEX 15&quot;, to set X to one of 16 values.  I'm unaware of any Intel chips making use of that mnemonic, however.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-10-14T17:36:46.200" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="7965" PostTypeId="2" ParentId="899" CreationDate="2018-10-14T18:20:06.737" Score="1" Body="&lt;p&gt;If you are driving a non-multiplexed LCD display, there will typically be one wire per segment, plus one common wire.  The common wire needs to be driven alternately high and low, with the other wires being driven in phase with the common wires when they should be &quot;off&quot;, and out of phase when they should be &quot;on&quot;.  A display with three digits and two decimal points could be wired to three 8-bit latches, provided that code flips the states of the wires as appropriate.  One hazard of this approach is that if the latches are left in a state other than &quot;all on&quot; or &quot;all off&quot; for an extended period of time, it could damage the LCD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative approach would be to use two sets of three latches that have output enables fed by the CPU, and have three inverting latches that also have output enables connected with their outputs tied to their inputs, and have the output enables and latching control for the second latches generated by an oscillator or cycle-counter circuit which runs independently of the CPU.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-10-14T18:20:06.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7966" PostTypeId="2" ParentId="6355" CreationDate="2018-10-14T19:17:27.697" Score="1" Body="&lt;p&gt;I don't know where you'd get a copy, and there were multiple non-interoperable backup solutions,  but from memory, the TIP (Tape Interchange Program) backup program was one of the most popular for QIC02 tapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Common sense says it should have been called TIP-02, but memory insists (possibly fallibly) that it was called TIP-20.&lt;/p&gt;&#xA;" OwnerUserId="10626" LastActivityDate="2018-10-14T19:17:27.697" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7967" PostTypeId="2" ParentId="6355" CreationDate="2018-10-15T00:18:43.333" Score="2" Body="&lt;p&gt;First, don't know anything about Minix; if it's anything like early x86 Unix/BSD/Linux it will have a Wangtek driver that Just Works (caveat: haven't tried a non-SCSI QIC drive in 20 years...YMMV).  Second, there's two parts to this one for DOS:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Driver - you'll need a driver for the card.  This will dictate a lot about what runs.  Since it's not SCSI, you'll need the one specific to the card/drive combo.  Some stand-alone backup programs had their own driver, but Wangtek also shipped a generic driver, that many programs used.&lt;/li&gt;&#xA;&lt;li&gt;Software - There were dozens of mostly proprietary backup programs that could use this combo.  That said, when I was involved in this era of tape tech, Sytos seemed to be the the most common, followed by Central Point and (distantly) EzTape.   I recall Wangtek bundled a basic version of Sytos with the drive for quite a while.  I've never heard of TIP mentioned above.  I &lt;em&gt;think&lt;/em&gt; the MKS Unix utilities for DOS software could use the generic Wangtek driver for dd/tar/cpio, etc., but I could be misremembering.  I know I used a DOS tar on QIC-02/36 in the late 80s to move files to SCO Unix machines.  You can probably find all sorts of gems on whatever is left of the Simtel archives or equivalent.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Please note that QIC tapes are somewhat notorious for the rubber drive bands in the cassettes and drive having turned to goo or dried out.  Consider replacing them before you try to read/write anything important.  &lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-10-15T00:18:43.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7968" PostTypeId="1" AcceptedAnswerId="7969" CreationDate="2018-10-15T03:31:37.043" Score="15" ViewCount="1368" Body="&lt;p&gt;The RCA 1802 processor was used in a number of systems such as the ELF and COMX-35, and also apparently in the US space program (with its hardened variant).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From memory, it had a rather unusual set of instructions for doing function calls and returns. Can anyone detail how this actually worked in practice?&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-18T00:53:18.617" LastActivityDate="2020-07-31T22:23:54.450" Title="How did the RCA1802 'call' and 'return' instructions work?" Tags="&lt;rca-1802&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7969" PostTypeId="2" ParentId="7968" CreationDate="2018-10-15T03:58:56.707" Score="18" Body="&lt;p&gt;The 1802 used a method known as SCRT, the standard call and return technique. The chip was actually endowed with a full complement of sixteen 16-bit general-purpose registers&lt;sup&gt;(a)&lt;/sup&gt;, but no &lt;em&gt;dedicated&lt;/em&gt; stack pointer or program counter. The SCRT was one method for doing calls using this limitation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could actually use &lt;em&gt;any&lt;/em&gt; register as the program counter with the &lt;code&gt;SEP Rn&lt;/code&gt; instruction (where &lt;code&gt;n&lt;/code&gt; was a value &lt;code&gt;0..F&lt;/code&gt; indicating which of the registers was to be used). This basically said to start using &lt;em&gt;that&lt;/em&gt; register for the program counter, leaving whatever register was &lt;em&gt;previously&lt;/em&gt; being used with its last contents (one byte beyond the &lt;code&gt;SEP&lt;/code&gt; instruction that switched the program counter over).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, by using some of those sixteen registers in a dedicated manner, you could easily &quot;emulate&quot; the more conventional instructions found on other processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the details below are from rather distant memories, they may not be exact (in terms of what registers were used for what, for example), but they should give you the basic idea.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;There was a &quot;usual&quot; program counter (&lt;code&gt;R3&lt;/code&gt;), and the &lt;code&gt;R4&lt;/code&gt; and &lt;code&gt;R5&lt;/code&gt; registers were set respectively to the addresses of the SCRT &lt;code&gt;call&lt;/code&gt; and &lt;code&gt;return&lt;/code&gt; functions. &lt;code&gt;R2&lt;/code&gt; was used as a stack pointer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to &lt;em&gt;call&lt;/em&gt; another function, you therefore encoded a &lt;code&gt;SEP R4&lt;/code&gt; followed by the address that you wanted to call. This immediately started using &lt;code&gt;R4&lt;/code&gt; as the program counter, leaving &lt;code&gt;R3&lt;/code&gt; pointing at the memory containing the address that you were calling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SCRT &lt;code&gt;call&lt;/code&gt; code running at &lt;code&gt;R4&lt;/code&gt; would:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;store the return address (&lt;code&gt;R3&lt;/code&gt;, to be adjusted on return to skip over the address) onto the stack (controlled by &lt;code&gt;R2&lt;/code&gt;);&lt;/li&gt;&#xA;&lt;li&gt;load the address you wanted to call (pointed at by &lt;code&gt;R3&lt;/code&gt;) &lt;em&gt;into&lt;/em&gt; &lt;code&gt;R3&lt;/code&gt;; then finally&lt;/li&gt;&#xA;&lt;li&gt;execute &lt;code&gt;SEP R3&lt;/code&gt; to continue execution at that new address.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It would, of course, have to ensure &lt;code&gt;R4&lt;/code&gt; was set back to the start of the SCRT &lt;code&gt;call&lt;/code&gt; function and, from memory, this was done by placing the &lt;code&gt;SEP R3&lt;/code&gt; instruction immediately &lt;em&gt;before&lt;/em&gt; that function and then jumping to that as the final step. This would auto-magically leave &lt;code&gt;R4&lt;/code&gt; set to the correct value for next time.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Similarly, a &lt;code&gt;SEP R5&lt;/code&gt; (return) in your code would start running the &lt;code&gt;return&lt;/code&gt; function which would:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;pull the return address off the stack at &lt;code&gt;R2&lt;/code&gt;, into &lt;code&gt;R3&lt;/code&gt;, and adjust it to skip over the address.&lt;/li&gt;&#xA;&lt;li&gt;do &lt;code&gt;SEP R3&lt;/code&gt; (using the same jump trickery mentioned above to ensure &lt;code&gt;R5&lt;/code&gt; once again pointed to the &lt;code&gt;return&lt;/code&gt; function) to return to the original code.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So, in terms of implementation, the set-up was something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ScrtCallDone:&#xA;    sep r3&#xA;ScrtCall:&#xA;    ; code for doing reg/mem manipulations for call&#xA;    br ScrtCallDone&#xA;&#xA;ScrtRetDone:&#xA;    sep r3&#xA;ScrtRet:&#xA;    ; code for doing reg/mem manipulations for ret&#xA;    br ScrtRetDone&#xA;&#xA;macro fcall %address:&#xA;    sep    r4&#xA;    dw     address&#xA;endmacro&#xA;&#xA;macro fret:&#xA;    sep    r5&#xA;endmacro&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, in terms of what you would see in your code, it would be as simple as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    fcall subfunc&#xA;    ; do other stuff then return&#xA;&#xA;subfunc:&#xA;    ; do sub-function stuff&#xA;    fret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;(a)&lt;/sup&gt; This rather massive (at the time) register bank was actually one of the big selling features of the chip, despite the fact you immediately lost a large chunk of them (SCRT, DMA and interrupts, from memory). Truly the triumph of marketing over reality :-)&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-11-14T07:36:12.817" LastActivityDate="2018-11-14T07:36:12.817" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="7970" PostTypeId="5" CreationDate="2018-10-15T06:48:17.453" Score="0" Body="&lt;p&gt;The RCA CDP1802 is an 8-bit CMOS microprocessor introduced by RCA in early 1976. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a 40-pin integrated circuit CPU, implemented using a &quot;Complementary Symmetry Monolithic Array Computer&quot; architecture, and therefore commonly referred to (along with the 1801, its two-chip equivalent) as COSMAC, at least within RCA. Hobbyists tended to just call it the 1802.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was used in, for example, the COSMAC Elf and the COMX-35 computer.&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-15T09:33:37.093" LastActivityDate="2018-10-15T09:33:37.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7971" PostTypeId="4" CreationDate="2018-10-15T06:48:17.453" Score="0" Body="Use this tag for questions related to the RCA 1802 and related CPUs." OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-15T09:33:40.177" LastActivityDate="2018-10-15T09:33:40.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7972" PostTypeId="2" ParentId="6266" CreationDate="2018-10-15T07:30:12.413" Score="6" Body="&lt;p&gt;If you &lt;em&gt;really&lt;/em&gt; want to understand why things were the way they were on the 6502, I'd suggest looking into &lt;a href=&quot;https://www.youtube.com/watch?v=fWqBmmPQP40&quot; rel=&quot;nofollow noreferrer&quot;&gt;27c3: Reverse Engineering the MOS 6502 CPU&lt;/a&gt; on YouTube (or search for that text if the video ever disappears).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting at about 25 minutes into the video (but I urge you to watch the whole thing), it details the impressive work of Greg James, Barry and Brian Silverman and Ed Spittles, in deconstructing the inner workings of the 6502. This involved the use of hot acid to remove the plastic, taking &lt;em&gt;massively&lt;/em&gt; high resolution photos of the chip at multiple layers, splicing them together, and analysing and debugging all the tracks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The end result of all that hard work can be found at &lt;a href=&quot;http://visual6502.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;visual6502.org&lt;/a&gt;. This isn't your garden-variety 6502 emulator that does what the opcode map says it should do. No, &lt;em&gt;this&lt;/em&gt; emulator reaches into the guts of the 6502 internal hardware (the transistors and electrical signals) to accurately perform the same operations as the original chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the important information is still in the video at about 34.5 minutes in, in part III.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this section based on the Visual6502 work, the presenter details how the 6502 logic works in terms of the T-states (timing states) and opcodes to control the individual bits of hardware &lt;em&gt;within&lt;/em&gt; the 6502. Basically, the CPU uses a decode ROM to translate these two inputs into a series of outputs which cause other bits of hardware (via a &quot;random control logic&quot; controller) to weave their magic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it's &lt;em&gt;this&lt;/em&gt; driving of the other hardware bits which shows why certain operations exist at specific opcodes and what the outcome is of using the roughly 40% of unused opcodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any further description I could give would be inadequate next to the presentation, it does a &lt;em&gt;great&lt;/em&gt; job of ripping apart the mystique. Seriously, go and watch the video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of your &lt;em&gt;specific&lt;/em&gt; question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did anything in the 6502's hardware make it easier to disable the &quot;load-immediate&quot; sequencing for &quot;101010x0&quot; but enable it for &quot;101000x0&quot;?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The answer is yes. The decode ROM (which you will hopefully understand once you've seen the video) looked at the top six bits of the opcode and used that to select which internal operation sets were carried out in each T-state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in all honesty, they could have been two &lt;em&gt;totally&lt;/em&gt; different operations (such as &lt;code&gt;LDA&lt;/code&gt; and &lt;code&gt;NOP&lt;/code&gt;, all it would have taken was a slightly modified decode ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your contention that &quot;opcodes of the form xxxMMM01 or 10xMMMxx use addressing mode MMM, where mode 010 is immediate&quot; is valid only if you assume very simple interpretation of the bit values in an opcode. The presence of the decode ROM makes the interpretation able to be arbitrarily complex.&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-10-15T13:00:56.390" LastActivityDate="2018-10-15T13:00:56.390" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7973" PostTypeId="1" AcceptedAnswerId="7974" CreationDate="2018-10-15T12:51:45.820" Score="20" ViewCount="3359" Body="&lt;p&gt;I have a vague recollection from my earliest days that the ZX80 only shipped with 1K of RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this RAM was used to store both the program &lt;em&gt;and&lt;/em&gt; the contents of the 32x24 screen, wouldn't that mean only about 256 bytes were available for programming?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or was there some trick used for video memory, such as a separate section of memory dedicated to the screen, apart from the advertised 1K RAM?&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastActivityDate="2018-10-16T09:21:23.440" Title="How did the ZX80 store both a useful program and screen memory?" Tags="&lt;memory&gt;&lt;zx80&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7974" PostTypeId="2" ParentId="7973" CreationDate="2018-10-15T13:03:17.497" Score="29" Body="&lt;p&gt;Both the ZX80 and the ZX81 had a variable-size display file (DFILE). They didn't store the complete screen contents, but rather only the characters per line up to a terminating newline.  This &lt;em&gt;collapsed DFILE&lt;/em&gt; is activated when the ZX detects less than 3 1/4kB of memory on startup. A collapsed DFILE can thus be as small as 24+1 bytes (initial HALT, 24 NEWLINEs, or HALT instructions) for an empty screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because ZX-80 and ZX-81 &quot;execute&quot; the DFILE in the display output routine as NOPs, the terminating newline character has to be the opcode of a HALT instruction (76h). This stops the CPU fetching bytes from the DFILE and makes it internally execute NOPs until interrupted (which happens at the end of each scanline, 8 times per character line). The video hardware simply generates white space pixels for the rest of the line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This results in much less screen memory used than the 768 bytes you would otherwise need for a full screen, at least if you did not fill the complete lines with 32 characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://searle.hostei.com/grant/zx80/zx80ScopePics.html&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; is a detailed description of how this works (on Grant Searle's great Z80 pages).&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-10-16T09:21:23.440" LastActivityDate="2018-10-16T09:21:23.440" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="7975" PostTypeId="2" ParentId="7693" CreationDate="2018-10-15T13:34:10.833" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Were there any systems that did this, or if not is there a reason I'm not seeing why they either couldn't do it or it would have been too difficult to do?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There was no business case for it. No real applications which may bring revenue comparable to the investments into further R&amp;amp;D, testing and warranty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The device performance, at that time of its usage &lt;strong&gt;in new designs&lt;/strong&gt;, was enough not to lead to improvement of the circuitry around VDP. Later designs used chips like V99x8.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2018-10-15T13:34:10.833" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7976" PostTypeId="1" CreationDate="2018-10-15T17:03:32.547" Score="5" ViewCount="402" Body="&lt;p&gt;The C64 expansion port can and does support multiple IO devices without conflicts. There is 0.5 KiB that is decoded for $DE00-$DFFF, using /IO1 and /IO2 on the expansion port. As long as the devices do not step on conflicting addresses, a multi-card expansion extender can be used to allow connection of multiple cards which could be active simultaneously. You just need to not exceed the ports power budget.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firmware for such cards isn't as straightforward. The expansion port ROM is mapped to $8000-$BFFF, and there is no inbuilt way to arbitrate multiple IO expansion cards wanting to share that ROM space for firmware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's sort of like the Apple ][ bus where there's 256 bytes of potential firmware space for each IO expansion card, but without the sophisticated means to arbitrate access to additional firmware space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, it seems that the 256 bytes of space for IO1 and IO2 on the C64 expansion &quot;bus&quot; could be used to bootstrap loading a device driver into the main system RAM. As far as I know, the C64 has nothing to prevent it from running code in the dedicated IO space $D000-$DFFF (when IO is banked in). So initializing an IO card could be done with a simple BASIC command like &quot;SYS 56832&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question: Is there either a &quot;de facto&quot; or &quot;recommended&quot; way of providing firmware on a C64 IO card so that it can be used alongside other IO cards? Are there any examples of cards that do this?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-02-27T03:37:23.720" Title="Method for adding firmware to a Commodore 64 expansion card?" Tags="&lt;hardware&gt;&lt;commodore-64&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7977" PostTypeId="1" AcceptedAnswerId="7978" CreationDate="2018-10-15T17:21:33.960" Score="8" ViewCount="3398" Body="&lt;p&gt;I am trying to code in 6502 assembly and for some reason the CMP instruction doesn't work. For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   CLD&#xA;   LDY #$03&#xA;   LDA #$00&#xA;   LDX #$05&#xA;   CMP Y&#xA;   BEQ Equal&#xA;   STX $0200&#xA;Equal:&#xA;   BRK&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This should place a green square on the screen if I am correct but it doesn't, it skips right over the STX line because apparently the equal flag is raised. I'm new to 6502 assembly so I could just be making a mistake.&lt;/p&gt;&#xA;" OwnerUserId="10945" LastEditorUserId="447" LastEditDate="2018-10-15T22:50:23.250" LastActivityDate="2019-05-28T09:35:26.357" Title="6502 CMP instruction doesn't compare as expected" Tags="&lt;assembly&gt;&lt;6502&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7978" PostTypeId="2" ParentId="7977" CreationDate="2018-10-15T17:31:19.193" Score="23" Body="&lt;p&gt;The code you've posted:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;loads the immediate value 0 into A;&lt;/li&gt;&#xA;&lt;li&gt;loads the immediate value 3 into Y;&lt;/li&gt;&#xA;&lt;li&gt;then compares the 0 in A to whatever is in memory at the address you've given the label Y.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are no register-to-register comparisons on the 6502.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-10-15T17:52:53.410" LastActivityDate="2018-10-15T17:52:53.410" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7979" PostTypeId="2" ParentId="7977" CreationDate="2018-10-15T18:09:41.697" Score="12" Body="&lt;p&gt;There are no register/register operations on the 6502 (except for transfer). The 6502 follows a strict accumulator/memory scheme (with a few extensions for index-register/memory).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your example is a bit useless, as comparing two constants doesn't make sense - one needs to be a variable at least, right? Let's assume the first (#$03) is a memory location called &lt;code&gt;VALUE&lt;/code&gt; instead. So a useful check for &lt;code&gt;VALUE&lt;/code&gt; holding &lt;code&gt;00&lt;/code&gt; would work like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   LDX #$05    * Prepare X&#xA;   LDA VALUE   * Value to compare&#xA;   CMP #$00    * Compare with this&#xA;   BEQ Equal   * Do not store X when equal&#xA;   STX $0200   * Store X&#xA;Equal:&#xA;   BRK&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In a real life 6502 program the CMP instruction can be left out completely, as loading a value already performs a test for zero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Further, &lt;code&gt;CLD&lt;/code&gt; is not needed, as decimal mode has no influence beside addition/subtractions and there is no need to use X, as storing a constant value (or moving one) can be done by using &lt;code&gt;A&lt;/code&gt; after the &lt;code&gt;BEQ&lt;/code&gt; - same program length but fewer cycles when not needed. And so on :)))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="836" LastEditDate="2018-10-16T21:03:39.290" LastActivityDate="2018-10-16T21:03:39.290" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7980" PostTypeId="2" ParentId="7976" CreationDate="2018-10-15T23:34:34.203" Score="4" Body="&lt;p&gt;It sounds dumb but I think &lt;strong&gt;all&lt;/strong&gt; the multi-module base plates had mechanical switches for the –ROML line of each individual slot. (And one for the –GAME line, of course.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You needed this in any case, because almost no &quot;standard&quot; software was aware about the fact $8000 to $9fff could be anything else than RAM. No one bothered to set up the processor port correctly before accessing that area.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2018-10-15T23:34:34.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7981" PostTypeId="1" AcceptedAnswerId="7983" CreationDate="2018-10-16T00:03:35.190" Score="2" ViewCount="949" Body="&lt;p&gt;I am currently learning about 6502 assembly. One of the documents I am learning about it from is a super mario bros. disassembly document. When I was reading the code I noticed part of the code had directives in it, here is that part:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   .index 8&#xA;   .mem 8&#xA;&#xA;   .org $8000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://gist.github.com/1wErt3r/4048722&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://gist.github.com/1wErt3r/4048722&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know what directives are and what they do in other assembly languages but I have never heard of these directives. Is there some kind of reference document out there that has all of these 6502 directives on it with an explanation as to what they do?&lt;/p&gt;&#xA;" OwnerUserId="10945" LastEditorUserId="6659" LastEditDate="2018-10-19T20:35:18.627" LastActivityDate="2018-10-19T21:13:12.613" Title="Resource for 6502 assembly directives?" Tags="&lt;assembly&gt;&lt;6502&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7982" PostTypeId="2" ParentId="7981" CreationDate="2018-10-16T00:06:09.343" Score="3" Body="&lt;p&gt;What you're calling &quot;directives&quot; are not related to the actual CPU instructions. That is, they are not &quot;6502 directives&quot;. Instead, each specific assembler had different ways of specifying things like code origin and memory configuration. There was some common notation, but the details of exactly what directives meant was contained in the assembler documentation.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2018-10-16T00:06:09.343" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7983" PostTypeId="2" ParentId="7981" CreationDate="2018-10-16T00:29:38.340" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;One of the documents I am learning about it from is a super mario bros. disassembly document.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It would have been great, if you had included a link to the source, and especially for what system the source was meant - after all, &lt;em&gt;Super Mario Bros.&lt;/em&gt; has been ported to many many different systems. Also, what assembler the source was meant for, as each has its own directives. Saves a lot of guessing.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.index 8&#xA;.mem 8&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Well, this looks quite like a setup for a 65816 (*1), doesn't it? (*2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I guess the system is a SNES? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 65816 can operate in various combinations of 8 and 16 bit wide data modes. These are set by the &lt;code&gt;m&lt;/code&gt; (accumulator and Memory width) and &lt;code&gt;x&lt;/code&gt; (indeX width) status register bits. Instructions behave differently depending on how these bits are set and code generation has to be made accordingly (*3). Since the assembler got no idea of the state of these bits (*4), the programmer must give some hint to the assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;.index 8&lt;/code&gt; tells the assembler to generate code as if the index register (X/Y) width is set to 8 bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;.mem 8&lt;/code&gt; likely advises the assembler to generate code as if memory access is 8 bit wide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;.org $8000&lt;/code&gt; now just means to assemble the following code starting at Address $8000.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have never heard of these directives.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I've got some doubt, as ORG is about the most basic directive that every assembler does support.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there some kind of reference document out there that has all of these 6502 directives on it with an explanation as to what they do?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You may want to read a bit about assemblers in general and the manual for the one you are about to use - and eventually the one the source is meant for as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here for example, &lt;a href=&quot;http://www.defence-force.org/computing/oric/coding/annexe_2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a very brief introduction of the 65816&lt;/a&gt; for already experienced 6502 programmers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then again, &lt;a href=&quot;http://6502.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;6502.org&lt;/a&gt; is always a good start and should be your first stop for everything about the 6502. In particular the &lt;a href=&quot;http://6502.org/tutorials/&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorials page&lt;/a&gt;. &lt;em&gt;Some assembly required.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - While WDC did try to standardise the 65816 assembler syntax (See section 6 of the &lt;a href=&quot;http://www.westerndesigncenter.com/wdc/documentation/w65c816s.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet&lt;/a&gt;), they did not provide any guideline for the new directives needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - No, it isn't, as the later added &lt;a href=&quot;https://gist.github.com/1wErt3r/4048722&quot; rel=&quot;nofollow noreferrer&quot;&gt;source link&lt;/a&gt; shows, it's rather clean 6502 (even NMOS) code, but the original author used an 65816 assembler (&lt;a href=&quot;https://www.romhacking.net/utilities/956/&quot; rel=&quot;nofollow noreferrer&quot;&gt;x816&lt;/a&gt;, a somewhat dated assembler for MS-DOS) that requires these directives to make sure 8 bit code is produced. Adding references is a great way to avoid false guessing, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Explaining all the details are way out of scope here, get some 65816 manual/lecture and spend some time reading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - They are dynamic at runtime and set/reset by &lt;code&gt;SEP&lt;/code&gt;/&lt;code&gt;REP&lt;/code&gt; instructions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-19T21:13:12.613" LastActivityDate="2018-10-19T21:13:12.613" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7984" PostTypeId="2" ParentId="5435" CreationDate="2018-10-16T05:22:12.903" Score="9" Body="&lt;p&gt;For what it's worth: In the late 80s to early 90s, I remember writing a DOS floppy driver (a TSR) that allowed formatting a few more tracks/sectors on a 3.5&quot; drive in order to boost the capacity of the 3.5&quot; floppy drives past 1.44MB.  I kept it to myself and it was not released to the public (though it was shared with some coworkers at Epyx Games).  If my (fuzzy) memory is accurate, my boosted capacity was still under 2MB, and was rather sensitive as to the quality of the media.  I believe I also encountered issues with certain BIOS / drives doing error checking of the read/write parameters (or just not being able to physically move where requested) and vomiting with &quot;too big&quot; numbers. One advantage of working at Epyx Games is there were a wide variety of drives and systems to play with ( &quot;test on&quot;) because much of the game testing was done in-house.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A variation of this notion was used for one of Epyx's copy protection schemes on a few different platforms.  A game's floppy disk sector was marked for the BIOS as 'bad', but contained key data that the game looked for.  Normal disk duplication would only read/write the good sectors, resulting in what appeared to the user (and many disk copy programs) to be identical disks that behaved differently.  The game was able to use low-level coding to read the 'bad' sector (as raw data) to determine if the disk was an original or not.&lt;/p&gt;&#xA;" OwnerUserId="10949" LastActivityDate="2018-10-16T05:22:12.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7985" PostTypeId="2" ParentId="7976" CreationDate="2018-10-16T08:03:36.043" Score="4" Body="&lt;p&gt;Simple answer: No, there isn't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The long read:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic issue here isn't address space, but management thereof.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II not only defines a separeate 16+256 byte address space for each card, it also sets up a protocol to share the 2 KiB extended ROM space and equally important access and entry points to the 256 Byte Area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the C64 it's the missing support on the OS (Kernel) level. The only handler provided is detecting and starting an expansion ROM (aka Module). So any reasonably sufficient strategy would need an expansion ROM of it's own, which in turn installs a selector/handler to manage the hardware needed to switch between different modules at run time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Missing an OS supported Standard also means that no expansion card is made to coexist on a general level. They all assume all of the I/O (and/or ROM) space to be theirs. Effectively requiring a strategy much like the 2KiB ROM selection on the Apple II, but switching all possible components. Eventually even the ROM, which may make cooperation even more complicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, unlike &lt;a href=&quot;https://en.wikipedia.org/wiki/Baron_Munchausen&quot; rel=&quot;nofollow noreferrer&quot;&gt;Münchhausen&lt;/a&gt;, even such a switcher needs some foothold in the address space to allow it's use. This will in itself collide with some cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7980/6659&quot;&gt;Janka already pointed out&lt;/a&gt;, only simple either/or switches, controlled by external input will be compatible with all possible extension. Everything else will be a case by case issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, &lt;em&gt;Commodore never really thought about extensibility of the C64 systems beside simple cartridge swap.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-02-27T03:37:23.720" LastActivityDate="2019-02-27T03:37:23.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7986" PostTypeId="2" ParentId="7973" CreationDate="2018-10-16T08:23:41.270" Score="-1" Body="&lt;p&gt;It did not (at least not without ugly tricks). In addition to tofro's answer, a simple program at ZX-81 looking something like this (writing from memory):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR Y=1 TO 24&#xA;20 FOR X=1 TO 32&#xA;30 PRINT AT Y,X;&quot;X&quot;&#xA;40 NEXT X&#xA;50 NEXT Y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;... was enough to achieve Out-of-memory error, because there was not enough room in memory for this measly program, system variables and a full display.&lt;/p&gt;&#xA;" OwnerUserId="10952" LastEditorUserId="576" LastEditDate="2018-10-16T09:11:01.467" LastActivityDate="2018-10-16T09:11:01.467" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7987" PostTypeId="1" CreationDate="2018-10-16T13:58:03.063" Score="4" ViewCount="365" Body="&lt;p&gt;The Apple II architecture supported 7 memory-mapped expansion cards which could be optionally installed towards the rear of the motherboard in individual expansion card connectors. On the Apple //e, there was an additional 8th &quot;AUX&quot; connector which was an expansion connector typically used for adding bank switched RAM that also enabled the ability to use 80-column and double lo/hi-res graphics modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a memory-mapped systems point of view, the AUX slot was accessed in the same way that one would access the standard &quot;slot 3&quot;. As a result of this, there are very few cards which would work in slot 3 when there was also an expansion card installed in the AUX slot since they could conflict in their memory-mapped address space. An increasingly now common example of this exception is the &lt;a href=&quot;http://a2retrosystems.com/products.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Uthernet II card&lt;/a&gt; is capable of being usable in the slot 3 of an 80-column enhanced //e since the Uthernet II card does not use the memory-mapped ROM space that the 80-column card requires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this background being said, the original NTSC / North American release of the Apple //e had the &lt;a href=&quot;http://www.classiccmp.org/dunfield/apple2/h/eboard.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;AUX slot off to the left of the motherboard&lt;/a&gt; next to the power supply. It had no physical interference to the front or rear of it, so some cards designed for this slot could extend nearly the whole length from the keyboard to the rear of the machine. However, the PAL / European release was slightly different in that the AUX slot was &lt;a href=&quot;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Computers/Apple%20II/Apple%20IIe/Photos/Apple%20IIe%20-%20Motherboard%20Front.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;inline with the standard slot 3&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I'm sure there were circuitry differences to support PAL video, I'm not sure why this required (or the designers chose) to move the AUX slot from its original uninhibited location near the PSU? Does anyone know a reason for this? &lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2018-10-16T21:03:25.853" Title="Why did PAL Apple //e motherboards have the AUX slot inline with Slot 3 instead of near the power supply?" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7988" PostTypeId="1" AcceptedAnswerId="7989" CreationDate="2018-10-16T17:10:36.913" Score="3" ViewCount="210" Body="&lt;p&gt;My goal is to recreate the TurboGrafx at gate-level, however there isn't much documentation of the system, probably due to its relative obscurity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want to know is how long one word (processor instruction) is, for the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, I'm not expecting a flat number, just a general explanation.&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="10751" LastEditDate="2018-11-01T16:56:55.063" LastActivityDate="2018-11-01T16:56:55.063" Title="How big is one word in TG16 hardware?" Tags="&lt;reverse-engineering&gt;&lt;turbografx-16&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7989" PostTypeId="2" ParentId="7988" CreationDate="2018-10-16T17:35:38.030" Score="4" Body="&lt;p&gt;The processor is a modified 6502 so one word is 8 bits. Many instructions are encoded as multiple words but for those the processor just fetches them in sequence when required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe the graphics processors use a wider bus, hence the '16' part of the name.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-10-16T17:35:38.030" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7991" PostTypeId="1" AcceptedAnswerId="8132" CreationDate="2018-10-16T18:55:09.150" Score="4" ViewCount="443" Body="&lt;p&gt;What is the general format of TurboGrafX processor instructions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, and this is made up: one word for opcode + two words for flags + one word for every parameter listed under that instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please be specific.&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="10751" LastEditDate="2018-11-01T16:57:16.487" LastActivityDate="2018-11-02T06:46:26.260" Title="What is the format of a TurboGrafX instruction (modified 6502 instruction set)?" Tags="&lt;6502&gt;&lt;reverse-engineering&gt;&lt;turbografx-16&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7992" PostTypeId="2" ParentId="7987" CreationDate="2018-10-16T21:03:25.853" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm not sure why this required (or the designers chose) to move the AUX slot from its original uninhibited location near the PSU? Does anyone know a reason for this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I had the same question back when the IIe was new, and I've been told by the lady responsible for PR at Apple Germany, that it was made to avoide people using their old 80 column cards while an aux card was plugged in.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It had no physical interference to the front or rear of it, so some cards designed for this slot could extend nearly the whole length from the keyboard to the rear of the machine. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nor is there any interference when it's in line with slot #3. The connectors are both of equal height, thus any card that would extend all the way back could fit as well in a PAL unit - ok, it may have like 2cm less space, as the aux slot also moved a bit toward the back - then  again, I can't realy remember any card for the aux slot ever extending all the way back.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-10-16T21:03:25.853" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7993" PostTypeId="2" ParentId="1367" CreationDate="2018-10-16T21:49:51.847" Score="0" Body="&lt;p&gt;This is code of sim65:&lt;pre&gt;&#xA;/* Opcode $6C: JMP (ind) */&#xA;{&#xA;    unsigned PC, Lo, Hi;&#xA;    PC = Regs.PC;&#xA;    Lo = MemReadWord (PC+1);&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (CPU == CPU_6502)&#xA;{&#xA;     /* Emulate the 6502 bug */&#xA;    Cycles = 5;&#xA;    Regs.PC = MemReadByte (Lo);&#xA;    Hi = (Lo &amp;amp; 0xFF00) | ((Lo + 1) &amp;amp; 0xFF);&#xA;    Regs.PC |= (MemReadByte (Hi) &amp;lt;&amp;lt; 8);&#xA;&#xA;    /* Output a warning if the bug is triggered */&#xA;    if (Hi != Lo + 1)&#xA;    {&#xA;        Warning (&quot;6502 indirect jump bug triggered at $%04X, ind addr = $%04X&quot;,&#xA;                 PC, Lo);&#xA;    }&#xA;}&#xA;else&#xA;{&#xA;    Cycles = 6;&#xA;    Regs.PC = MemReadWord(Lo);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;}&lt;/pre&gt;&lt;/p&gt;&#xA;" OwnerUserId="7534" LastActivityDate="2018-10-16T21:49:51.847" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7994" PostTypeId="2" ParentId="4604" CreationDate="2018-10-17T01:52:31.200" Score="3" Body="&lt;p&gt;Back in the mid-70s (obviously earlier than the HCF setting), we just used disks to backup disks on the Apple IIs the teachers used at (secondary) school - you did say old &lt;em&gt;school,&lt;/em&gt; didn't you?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since our nerd cadre was in good with the maths teachers, we were tasked to write an automated tool to actually do this for the staff. You would basically insert the backup tool to run then, each original and backup disk would be placed into the two drives. It would simply erse the current backup then copy all the files one by one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From memory, these backup disks were then labelled and kept in an inflammable cardboard box near the staff heater :-)&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastActivityDate="2018-10-17T01:52:31.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7995" PostTypeId="1" AcceptedAnswerId="7996" CreationDate="2018-10-17T12:26:49.790" Score="13" ViewCount="12776" Body="&lt;p&gt;I have a Compaq desktop computer running Windows 98 SE. It's been handed down a few times, and I don't recollect it ever being online but it does have a version of Firefox from 2007 so I could be wrong about that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently tried using the internal modem on the computer - a 56k Compaq modem - for the first time. The modem shows up in certain system dialogs but none of the dialers - HyperTerminal, Phone Dialer, etc. would successfully connect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought perhaps the modem was broken. I had a Dell Dimension 8200 laying around that had Windows XP, so I opened it up and took out &lt;em&gt;its&lt;/em&gt; internal modem, and the NIC, for good measure. I installed both in the Compaq computer. It didn't boot the first time but I cycled the power and it booted up fine, more or less.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;Add New Hardware&quot; wizard did not open by default. I ran the wizard but it didn't detect any new hardware. Nowhere in the system was either the NIC or the second modem recognized.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought perhaps maybe I didn't have the right drivers, so I decided to load some on. The problem is, since this computer is 20+ years old, it only works with USB 1.1. My research shows that there are third-party drivers available that allow Windows 98 SE to work with USB 2.0 devices including flash drives. I have a PS/2 keyboard and mouse so flash drives here are my main concern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I loaded the following drivers onto a floppy disk, and brought it home:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.technical-assistance.co.uk/kb/win98se-usb-mass-storage-drivers.php&quot; rel=&quot;noreferrer&quot;&gt;http://www.technical-assistance.co.uk/kb/win98se-usb-mass-storage-drivers.php&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.driverguide.com/driver/detail.php?driverid=53512&quot; rel=&quot;noreferrer&quot;&gt;https://www.driverguide.com/driver/detail.php?driverid=53512&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To test it out, I plugged a flash drive into the computer and the Add New Hardware Wizard opened and prompted for drivers. I then loaded the floppy disk and manually ran the .exe file for the first driver. It installed and rebooted. But when I plugged a flash drive in again, the Add New Hardware Wizard no longer opened automatically, and the flash drive was still not recognized in my computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have nothing against floppy disks, really, but being able to use USB flash drives would be far more practical. This wouldn't be as important if I could get one of the modems to work, but right now neither is working. I believe someone is getting an external US Robotics 56k modem for me on eBay at the moment, and my hunch is external modems are more reliable than internal modems so that one may work more seamlessly. I'm not so sure though, given my problems so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I extracted the files for the second driver but I found just a bunch of &quot;.sys&quot; files. I didn't do anything after that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am following the procedures available online for getting Windows 98 to work with USB 2.0. What else could I do to get my Windows 98 SE PC to work with USB flash drives? Do I just need drivers, or is some other change required?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My main reason for needing USB 2.0 support is so I can load drivers onto a flash drive and transfer them to the Windows 98 computer to load drivers for the modem. I have a feeling I may need to do trial and error to get the right drivers, and given the capacity of a floppy disk that route would not really be practical. At the moment, however, floppy disks are the only thing working perfectly for me.&lt;/p&gt;&#xA;" OwnerUserId="5371" LastEditorUserId="5371" LastEditDate="2018-10-17T23:19:27.823" LastActivityDate="2021-03-10T13:07:34.370" Title="How to use USB flash drives with Windows 98 SE?" Tags="&lt;windows-98&gt;&lt;usb&gt;&lt;compaq&gt;" AnswerCount="5" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="7996" PostTypeId="2" ParentId="7995" CreationDate="2018-10-17T13:45:45.310" Score="13" Body="&lt;h3&gt;File System&lt;/h3&gt;&#xA;&lt;p&gt;Windows 98 typically uses FAT32, whereas later versions of Windows support NTFS. While it &lt;strong&gt;should&lt;/strong&gt; recognize a flash drive at the low-level hardware no matter what file system is installed, it will likely not show it 100% correctly if it is using NTFS instead of FAT32.&lt;/p&gt;&#xA;&lt;p&gt;My advice is to format the flash drive on a newer computer/OS using FAT32 (&lt;a href=&quot;https://serverfault.com/questions/52640/how-to-format-as-fat32-from-windows-7-vista&quot;&gt;instructions for 7 &amp;amp; Vista&lt;/a&gt;), put a few files on it and try it on the Windows 98 machine.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-10-18T20:35:03.810" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="7997" PostTypeId="2" ParentId="7995" CreationDate="2018-10-17T18:25:35.433" Score="7" Body="&lt;p&gt;One solution is to use a USB-to-Floppy interface adapter. One brand of these is Gotek. You can even mount it in a drive bay, perhaps in place of the original floppy drive. The computer will think it's reading a floppy disk when it's actually reading a floppy image file on a USB stick.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-10-17T19:49:31.627" LastActivityDate="2018-10-17T19:49:31.627" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7998" PostTypeId="1" AcceptedAnswerId="8000" CreationDate="2018-10-17T18:41:41.230" Score="16" ViewCount="5182" Body="&lt;p&gt;Right now I am learning 6502 assembly. Currently I am using the MADS assembler to program for the Atari 800. This program is just a small tutorial program that came with the assembler zip file I downloaded. The only piece of this program I did't understand is the &lt;code&gt;jmp *&lt;/code&gt; operation, what does the '*' mean? Full program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sm_ptr  = $58&#xA;ch  = $2f4  &#xA;chr = $2400 &#xA;rom_chr = $e000 &#xA;org $2000&#xA;.proc main  &#xA;mva #&amp;gt;chr ch    &#xA;ldx #0      &#xA;copy_loop&#xA;mva rom_chr,x chr,x&#xA;mva rom_chr+$100,x chr+$100,x&#xA;mva rom_chr+$200,x chr+$200,x&#xA;mva rom_chr+$300,x chr+$300,x&#xA;inx&#xA;bne copy_loop&#xA;ldx #0      &#xA;space_loop&#xA;mva charset.space,x chr,x&#xA;inx&#xA;cpx #8&#xA;bne space_loop &#xA;ldy #0       &#xA;loop    &#xA;tya&#xA;sta (sm_ptr),y&#xA;iny&#xA;bne loop&#xA;jmp *&#xA;.local charset&#xA;space   &#xA;.byte %01000100 &#xA;.byte %00101000&#xA;.byte %01111100&#xA;.byte %01010100&#xA;.byte %11111110&#xA;.byte %10101010&#xA;.byte %10111010&#xA;.byte %00000000&#xA;.endl&#xA;.endp   &#xA;run main&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10945" LastEditorUserId="611" LastEditDate="2018-10-17T19:51:20.350" LastActivityDate="2018-10-17T20:00:14.370" Title="What does &quot;jmp *&quot; mean in 6502 assembly?" Tags="&lt;assembly&gt;&lt;6502&gt;&lt;atari-800&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7999" PostTypeId="2" ParentId="7998" CreationDate="2018-10-17T18:59:34.077" Score="14" Body="&lt;p&gt;I suspect the &lt;code&gt;*&lt;/code&gt; means the current instruction/location, as it does in some other assemblers, like PDP-8.&amp;nbsp; Often it would be used in an expression like &lt;code&gt;*-label&lt;/code&gt; in the data section to get something's size, or &lt;code&gt;*+3&lt;/code&gt; perhaps, in code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that's the case for 6502 assembly, then &lt;code&gt;jmp *&lt;/code&gt; means branch to self, or, infinite loop, which would be a form of halting the program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This makes some sense as it comes at the end of main, which presumably has nothing to return to for a bare metal program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some assemblers (e.g. masm, Microsoft's x86 assembler) use $ for the same meaning.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastActivityDate="2018-10-17T18:59:34.077" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8000" PostTypeId="2" ParentId="7998" CreationDate="2018-10-17T19:14:55.497" Score="33" Body="&lt;p&gt;&lt;a href=&quot;http://mads.atari8.info/&quot; rel=&quot;noreferrer&quot;&gt;MADS&lt;/a&gt; uses &lt;code&gt;*&lt;/code&gt; in three ways (See &lt;a href=&quot;http://mads.atari8.info/mads_eng.html#kom&quot; rel=&quot;noreferrer&quot;&gt;MADS &quot;Manual&quot;&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Using the current assembly address for calculation of an address, i.e. the one the actual statement is assembled to.&lt;/li&gt;&#xA;&lt;li&gt;Multiplying in expressions.&lt;/li&gt;&#xA;&lt;li&gt;Mark the beginning of a comment (until line end)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In above listing it will be interpreted as the address the &lt;code&gt;JMP&lt;/code&gt; instruction is assembled to, so  it will form an &lt;a href=&quot;https://www.wired.com/story/apple-infinite-loop-oral-history/&quot; rel=&quot;noreferrer&quot;&gt;infinite loop&lt;/a&gt;, effectively halting the machine until Reset.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="357" LastEditDate="2018-10-17T20:00:14.370" LastActivityDate="2018-10-17T20:00:14.370" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8001" PostTypeId="2" ParentId="7735" CreationDate="2018-10-17T20:57:50.443" Score="3" Body="&lt;p&gt;As I recall, the PDP 1 through 6 were built from system modules, and these came out before flip-chips.  The 7 was like the 4, only the 7 had flip chips. The 8 was like the 5, only the 8 had flip chips.  The 10 was like the 6 only the 10 had filp chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 11 was a departure in architecture in several ways.  Word size,  instruction set, memory addressing, and so on.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2018-10-17T20:57:50.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8002" PostTypeId="2" ParentId="7995" CreationDate="2018-10-18T16:13:33.063" Score="4" Body="&lt;p&gt;Back in the days of Windows 9x, the USB drives needed a special driver from their manufacturers (usually on small ~200 MByte format CD). But not many manufacturers provided them, limiting usable USB drives. The USB drives usually work in USB 1.1 ports too without any problems (apart the speed). Some of the newer USB drives still work with Windows 9x (usually those no-names 1-4 GByte).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still have my ancient Windows 9x compliant PQI Travel Disk (128 MByte USB Flash + SD card reader) working, so in case I need to transfer large amount of data to an old PC being repaired, I usually use its SD card reader as it supports cards up to 2GB and I still have some.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If nothing works, there are also different alternatives like CF/IDE adapters (really just a few connectors) like &lt;a href=&quot;https://www.reichelt.com/de/en/compactflash-drive-ide-delock-91620-p57406.html?&amp;amp;trstct=lsbght_sldr::120193&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HWTkL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HWTkL.png&quot; alt=&quot;CF2IDE&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You just use the CF card as a removable Hard drive. Old game consoles and some laptops use them instead of real HDDs. I still have one working in here. So you use one such adapter in your old computer and in the new one you just need a card reader, or another adapter if PATA is still an option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also use a network to copy stuff (COM/LPT LAPLINK/INTERLING or file sharing with TCP/IP LAN).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In your case, I would&lt;/strong&gt; first try the on-board USB 1.1 ports and look for a USB flash drive driver and also for compatible USB key that works. The usual stuff that I installed was:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;VIAUSB2V244&lt;/li&gt;&#xA;&lt;li&gt;Via_USB_AMD_fix&lt;/li&gt;&#xA;&lt;li&gt;PQI_TravelDisk drivers (these are the vendor drivers for my flash mentioned above)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You can find those in here &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6256/6868&quot;&gt;How to patch binaries in DOS?&lt;/a&gt; look for &lt;code&gt;MS-DOS (g)mouse and w9x USB stuff&lt;/code&gt; link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such a configuration usually made workable a lot of no-name USB drives too (not just PQI).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes it also helps if you set USB support in the BIOS (some BIOSes have multiple support settings for USB keyboards and drives I encountered once that wrong settings was messing up USB usage in Windows 9x).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also do not forget that you can use only &lt;strong&gt;FAT16/FAT32&lt;/strong&gt; formats.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-01-25T12:03:57.960" LastActivityDate="2019-01-25T12:03:57.960" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8003" PostTypeId="1" CreationDate="2018-10-19T01:51:35.073" Score="8" ViewCount="1004" Body="&lt;p&gt;Much like the VAX, the 6809 and 6309 have a preponderance of indirect addressing modes (in VAX parlance, &quot;deferred&quot;), though neither go so far as to include a VAX-like doubly-indirect mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;To what extent were these modes useful/actually used?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can obviously think of contrived instances where these would be a good fit, but it's difficult to determine whether these would show up in the &quot;real world&quot;. It's worth noting that the 6809's cousin, the 68HC12, removed all but two of these indirect modes.&lt;/p&gt;&#xA;" OwnerUserId="10966" LastEditorUserId="4921" LastEditDate="2018-10-19T02:04:06.300" LastActivityDate="2018-10-19T20:02:46.680" Title="How useful were the 6809/6309's indirect addressing modes?" Tags="&lt;assembly&gt;&lt;6809&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8004" PostTypeId="2" ParentId="8003" CreationDate="2018-10-19T02:28:03.117" Score="13" Body="&lt;p&gt;The 6809 offers to combine indirect with either a fixed extended (16 Bit) address or all indirect indexed modes. These modes are extremely useful for all kinds of linked list and/or table processing. Essentially the basics for any operating system, thus simplifying and speeding up OS programming including any kind of list defined I/O. Especially the latter is quite powerful in a concurent setup (*1). And that's where the 6809 was targeted at: modular multi-process environments. Such an environment is filled with dynamic structures that are built and managed at runtime, usually not holding many predefined addresses and structures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 68HC12 was optimized as a single-chip controller, not a general purpose CPU. Unlike a general-purpose environment, a controller does usually operate on predefined structures with no or just a small amount of dynamic structures.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Think for example an I/O subsystem where each pending request is defined with a control block holding the address of a data buffer and a pointer within. During an interrupt to send or receive a character, X could point to the control block for the actual operation (so no need to move that block into a fixed address) and use the actual buffer pointer within the structure with [X+offset] in a single operation. Increment (or decrement) it the same way and finish the I/O routine.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="2126" LastEditDate="2018-10-19T20:02:46.680" LastActivityDate="2018-10-19T20:02:46.680" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8006" PostTypeId="1" AcceptedAnswerId="8008" CreationDate="2018-10-19T05:25:46.987" Score="14" ViewCount="4077" Body="&lt;p&gt;The 6809 was released in 1978, but looking at the usual source for price quotes for old computer components, Byte magazine, I cannot find any quotes for 1979. December 1980 lists it at $38, compared to its closest competitor, the Z80A, for $14.50.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transistor counts for the Z80 and 6809 were 8500 and 9000 respectively, a very small difference. It sometimes happens that a new chip will be expensive for the first little while after release because the manufacturer is still debugging yield problems, but this was two full years later. Why was the 6809 still so much more expensive than the Z80?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-10-19T08:43:20.103" Title="Why was the 6809 so expensive?" Tags="&lt;history&gt;&lt;z80&gt;&lt;market&gt;&lt;6809&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8007" PostTypeId="2" ParentId="7995" CreationDate="2018-10-19T08:24:36.293" Score="10" Body="&lt;p&gt;Windows 98 doesn't come with any drivers built-in for the USB Mass Storage class. Fortunately, there are some generic drivers available, such as &lt;a href=&quot;https://web.archive.org/web/20180319084915/http://www.technical-assistance.co.uk/kb/usbmsd98.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;from here&lt;/a&gt;. I found this site by searching the web for &amp;quot;windows 98 usb mass storage driver&amp;quot; - other sites are available with similar drivers.&lt;/p&gt;&#xA;&lt;p&gt;You'll need the version for Second Edition. This particular driver is a self-installing EXE file, so it's just a case of running the downloaded file and rebooting afterwards. I used them myself some years ago and can attest to the fact that they work, although there is a warning on the website that they may not work with all available USB mass storage devices.&lt;/p&gt;&#xA;" OwnerUserId="10678" LastEditorUserId="6659" LastEditDate="2021-03-10T13:07:34.370" LastActivityDate="2021-03-10T13:07:34.370" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8008" PostTypeId="2" ParentId="8006" CreationDate="2018-10-19T08:26:04.823" Score="17" Body="&lt;p&gt;The price was defined obviously by marketing team, therefore their decisions are out of reach for the logical engineering mind :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably they were relying on the marketing company (like this one &lt;a href=&quot;https://cdn.hackaday.io/files/460001968064000/byte_6809_articlesx3.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://cdn.hackaday.io/files/460001968064000/byte_6809_articlesx3.pdf&lt;/a&gt;) and thought people would be immediately convinced by cool features and buy 6809 whatever the price was, as there were no perceived alternatives in 8bit cpu market -- at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Previously Motorola had to drop the price for 6800 after the release of 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I personally think people tend to recur -- and they were either to drop price if anything comparable would emerge or to keep it -- again. To my taste, however cool 6809 was -- it came a bit late, and the only thing that could make it a sound competitor was the appropriate price.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-10-19T08:26:04.823" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8009" PostTypeId="2" ParentId="8003" CreationDate="2018-10-19T08:41:46.030" Score="10" Body="&lt;p&gt;Although not too obvious, almost every feature of 6809 looks like specially made for high level languages like C and for 'serious' systems like OSes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, indirect addressing is convenient to dereference the pointers (like &lt;code&gt;a=*b&lt;/code&gt; in C), stack-offset addressing simplifies working with local stacked variables, position-independent code simplifies linking executables and loading them into the memory before they are run (no need to fix myriads of absolute addresses).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;68hc12 is an embedded controller, and while still having features for high level languages (indirect addressing, stack-offset addressing), has no need for position-independence (as the embedded system executes code from a fixed ROM).&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-10-19T08:41:46.030" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8010" PostTypeId="2" ParentId="8006" CreationDate="2018-10-19T08:43:20.103" Score="16" Body="&lt;p&gt;It was just standard market positioning. The 6800 was still a current product and in use in many systems at the time, so they priced the 6809 as a more powerful alternative to both that and the Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6809 was expected to be used in higher end systems that cost more anyway, so Motorola naturally wanted their cut of that.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-10-19T08:43:20.103" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8011" PostTypeId="2" ParentId="5497" CreationDate="2018-10-19T15:36:18.623" Score="2" Body="&lt;p&gt;Many old systems don't have sounds in the way you think of them. Instead, the game has several pre-recorded notes (recorded as in written by hand, probably not more than a byte or three), which the game or program can use in succession.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get these notes, I suggest using &lt;a href=&quot;https://www.sounds-resource.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;TheSoundsResource&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that what you're doing may have copyright issues, as others have commented.&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="10751" LastEditDate="2018-10-29T16:47:20.493" LastActivityDate="2018-10-29T16:47:20.493" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8012" PostTypeId="1" AcceptedAnswerId="8013" CreationDate="2018-10-19T15:47:46.263" Score="8" ViewCount="700" Body="&lt;p&gt;I hope this is the right place to ask this and that it is &quot;retro&quot; enough.  I have a Socket 7 machine that I am working on.  It's my 1st PC from childhood that I restored, and now I would like to upgrade it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system is a FIC VT-502 with a Cyrix 6x86MX PR166 and (currently) 48MB of SIMM memory.  The motherboard supports both EDO SIMM and SDRAM DIMM, as seen here: &lt;a href=&quot;https://www.vogonswiki.com/index.php/Socket_7_Builds#Choosing_RAM&quot; rel=&quot;noreferrer&quot;&gt;https://www.vogonswiki.com/index.php/Socket_7_Builds#Choosing_RAM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to upgrade to using 128MB of RAM and, if possible, use SDRAM (because I can, and because it seems to be cheaper).  I found some SDRAM on a site called MemoryX (or MemoryTen), but when I installed it, each stick was only read as 16MB, for a total of 32MB!  Here's what I bought, claiming to be 64MB each stick: &lt;a href=&quot;https://photos.app.goo.gl/SurvJWmKxdrPbZ5Q8&quot; rel=&quot;noreferrer&quot;&gt;https://photos.app.goo.gl/SurvJWmKxdrPbZ5Q8&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing some research, I found &lt;a href=&quot;http://redhill.net.au/b/b-98.html#ram&quot; rel=&quot;noreferrer&quot;&gt;http://redhill.net.au/b/b-98.html#ram&lt;/a&gt; which explains this issue:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;most older mainboards do not understand 64Mbit [megabit] chips and see a standard 64MB [megabyte] DIMM as eight 16Mbit [megabit] chips&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, my question is what should I be looking for when trying to buy 128MB (2x64MB) of SDRAM for my system?  Do I want single-sided or double-sided RAM?  How many chips should be on the stick?  Or should I just stick with SIMM and get 128MB (4x32MB) of SIMM?&lt;/p&gt;&#xA;" OwnerUserId="4902" LastActivityDate="2018-10-19T18:26:58.473" Title="RAM for Socket 7 Motherboard - 64MB sticks appearing as 16MB" Tags="&lt;hardware&gt;&lt;memory&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8013" PostTypeId="2" ParentId="8012" CreationDate="2018-10-19T18:26:58.473" Score="9" Body="&lt;p&gt;The change from DRAM to SDRAM changed how addresses are communicated from the processor to the RAM.  In DRAM, addresses are divided up as a row and column address, each using roughly half the bits supported by the chip. The row is sent whenever it changes and the column for every access; its an arrangement designed to reduce the number of address pins required for any given address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In SDRAM an extra part is added, the bank address.  This address usually has only a few bits, and in small DIMMs is entirely unused.  However, starting at 32MiB there are no longer enough address lines on a DIMM to work with just row and column addresses, so the system must use bank addresses.  As the specification supports up to 4 banks, this means 64MiB is the largest 168 pin DIMM available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What this means is that early machines that supported DIMMs but weren't designed with this kind of memory size in mind only implemented the logic to work with a single bank, so could only use up to 16MiB per DIMM. This was likely especially common on boards that also supported SIMMs, simply because then the way of working with the two types of memory is more similar.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-10-19T18:26:58.473" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8014" PostTypeId="1" AcceptedAnswerId="8021" CreationDate="2018-10-20T06:43:31.797" Score="11" ViewCount="1513" Body="&lt;p&gt;According to &lt;a href=&quot;https://stackoverflow.com/a/664779/5394409&quot;&gt;this answer,&lt;/a&gt; the stack grows downward. It's in §4.4 of the cited document:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As another example, the DEC PDP11 range  has  a  hardware&#xA;  stack which grows with decreasing store addresses.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now, but the way this works is by the pre-decrement and post-increment addressing modes. We can just use &lt;code&gt;(r6)+&lt;/code&gt; for pop or &lt;code&gt;-(r6)&lt;/code&gt; for push. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But isn't that just convention? From what I understand we could equally well reverse the direction and use &lt;code&gt;(r6)+&lt;/code&gt; for push or &lt;code&gt;-(r6)&lt;/code&gt; for pop. Yet every document I see says the stack grows downward on the PDP-11. So what am I missing?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-04-22T08:11:41.057" LastActivityDate="2019-04-22T08:11:41.057" Title="PDP-11 stack may grow in either direction?" Tags="&lt;pdp-11&gt;" AnswerCount="5" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8016" PostTypeId="2" ParentId="8014" CreationDate="2018-10-20T07:35:35.527" Score="22" Body="&lt;p&gt;It seems that JSR and RTS expected a down growing stack. &#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-11_architecture#Stack_addressing_modes&quot; rel=&quot;noreferrer&quot;&gt;Stack addressing modes&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;R6, also written SP, is used as a hardware stack for traps and&#xA;  interrupts. A convention enforced by the set of modes the PDP-11&#xA;  provides is that a stack grows downward—toward lower addresses—as&#xA;  items are pushed onto it. When a mode is applied to SP, or to any&#xA;  register the programmer elects to use as a software stack, the&#xA;  addressing modes have the following effects:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-11_architecture#Jump_and_subroutine_instructions&quot; rel=&quot;noreferrer&quot;&gt;JSR and RTN&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The JSR instruction could save any register on the stack. Programs&#xA;  that did not need this feature specified PC as the register (JSR&#xA;  PC,address) and the routine returned using RTS PC. If a routine were&#xA;  called with, for instance, &quot;JSR R4, address&quot;, then the old value of R4&#xA;  would be on the top of the stack and the return address (just after&#xA;  JSR) would be in R4. This let the routine gain access to values coded&#xA;  in-line by specifying (R4)+, or to in-line pointers by specifying&#xA;  @(R4)+. The autoincrementation moved past these data, to the point at&#xA;  which the caller's code resumed. Such a routine would have to specify&#xA;  RTS R4 to return to its caller.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, as long as you use the stack pointed to by R6 (or SP) and anywhere in your program uses any of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;JSR (jump to subroutine)&lt;/li&gt;&#xA;&lt;li&gt;RTS (return from subroutine)&lt;/li&gt;&#xA;&lt;li&gt;MARK (support of stack clean-up at return)&lt;/li&gt;&#xA;&lt;li&gt;EMT (emulator trap)&lt;/li&gt;&#xA;&lt;li&gt;TRAP, BPT (breakpoint trap)&lt;/li&gt;&#xA;&lt;li&gt;IOT (input/output trap)&lt;/li&gt;&#xA;&lt;li&gt;RTI &amp;amp; RTT (return from interrupt)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;you have to follow the growing down idea, since they all expect the CPU controlled stack to be growing downwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you never use any commands that uses the CPU controlled R6 (SP) stack, do as your like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also set up your own data stack growing upwards. I've seen things like that on some systems. Two stacks sharing the same RAM area, one growing from bottom up, the other growing from top down. If they ever overlap the same area, you will get interesting results.&lt;/p&gt;&#xA;" OwnerUserId="10565" LastEditorUserId="10565" LastEditDate="2018-10-20T09:06:45.653" LastActivityDate="2018-10-20T09:06:45.653" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8017" PostTypeId="2" ParentId="5497" CreationDate="2018-10-20T08:11:10.520" Score="0" Body="&lt;p&gt;As others suggested by riping sound,graphics,... from games you are hitting some legal issues. Similarly like using emulators with ROM files. Anyway there are more option how to do this...&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;specific file format&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not familiar with Atari but on &lt;strong&gt;Z80 + AY-8912&lt;/strong&gt; based sounds there is the:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://vgmrips.net/wiki/AY_File_Format&quot; rel=&quot;nofollow noreferrer&quot;&gt;AY file format for sound&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Which contains sounds related stuff (both Z80 sound routines and sound data). There where some tools for sound extracting to an AY files. Here first hit in google I found just now:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.worldofspectrum.org/projectay/tech.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Project AY&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;May be on Atari there is something similar. I would start with searching for sound chip / circuitry ID and relevant fileformat for it. If found then its just a matter of google search...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;sound engine&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If no such atari related file format found then you need to either identify sound program with what the sound was created. Back in the days there where common known sound engines that where widely used so usually by identifying the type of sound or number of channels or specific effects you already know the music routine ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the sounds where usually a mix of polyphony syntethizer (usually 3 channels) and PCM effects (1 or 2 bits) and PCM Noise it can be sometimes converted to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MIDI&lt;/li&gt;&#xA;&lt;li&gt;MOD or STM wavetable based formats&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;so WAV/MP3 is not the only option here. But without a proper tools for your platform it would need big effort to do such thing...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know the sound program then you can more easily locate the sound data and subroutines for playback easing up the extraction (by automating it).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Record the sound from emulator or real HW&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For arbitrary sound you need to play the game/program record everything and hope you did not miss too much sounds.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open source&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some cases some games have been converted to OpenSource over the years in such case its easier to download the source code with data and use that than extracting the stuff from binaries ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-10-20T08:20:37.037" LastActivityDate="2018-10-20T08:20:37.037" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8018" PostTypeId="2" ParentId="8014" CreationDate="2018-10-20T09:58:12.273" Score="-3" Body="&lt;p&gt;Doesn't it really depend on how you draw your memory.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;     ________               ________&#xA;FFFF|        |         0000|        |&#xA;    | map 1  |down         | map 2  | ^&#xA;    |        | v           |        |up&#xA;0000|________|         FFFF|________|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If it is a decreasing address, then in map1, it grows downwards but in map2, it grows upwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Map1 is typically drawn like a normal graph, where 0 is at the bottom and the higher address is on top.  Hardware engineers and mathematicians would normally draw the memory graph like this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Map2 is typically drawn by software people who normally sort things in ascending order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also depends on the person's background.  Some people find it difficult to visualise if the graph is drawn &lt;em&gt;upside down&lt;/em&gt; from what they are used to thinking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at the hardware manual - I have seen manuals where the map is drawn both ways. &#xA; Some manufacturers draw it with 0 on top, others draw it with 0 at the bottom.  Sometimes, both conventions are used by the same manufacturer (Intel): typically chapters written by different people.  It really depends on which convention you are used to when you say the stack grows upwards or downwards.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2018-10-20T09:58:12.273" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8019" PostTypeId="2" ParentId="8014" CreationDate="2018-10-20T11:12:37.283" Score="4" Body="&lt;p&gt;On a PDP-11, stacks can grow both upwards and downwards according to the choice of the programmer. As any of the GPR (General Purpose Registers) can be a stack pointer, they generally behave all the same, stacks can grow upwards or downwards in memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the PDP-11 is servicing an interrupt or trap, however, the implementors of the machine had to save the PSW and current PC somewhere to be able to return to the user program after the ISR, they decided to use R6 for that, which thus became SP. And they also had to make a design decision how they wanted to use this stack, and they decided to grow it downwards. As SP must be able to push and pop words at any time (because the CPU needs to be able to push a word address and PSW when servicing an interrupt), they also had to make sure SP is word-aligned at any time, thus, when you push a byte to SP, SP will be decremented by 2 to keep it word-aligned, unlike all other registers that are used as stacks. All other instructions that implicitly use R6/SP (like JSR and traps, for example) also use to the same convention. R6/SP is thus special in that any user program needs to comply with this decision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just for completeness: There are actually some CPU architectures where it is the choice of a system implementor to have the stack used by the CPU itself for storing intermediate state grow upwards or downwards (generic ARM, or HPPA, for example). The PDP-11 is not one of them.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-10-20T11:28:03.127" LastActivityDate="2018-10-20T11:28:03.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8020" PostTypeId="2" ParentId="8014" CreationDate="2018-10-20T11:40:44.523" Score="7" Body="&lt;p&gt;The PDP-11 was especially designed to allow code to be written in either of the three common addressing schemes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Zero Address (Stack)&lt;/li&gt;&#xA;&lt;li&gt;On Address (Acumulator)&lt;/li&gt;&#xA;&lt;li&gt;Two Address&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There's a quite nice paper Gordon Bell (et. al) wrote &lt;a href=&quot;https://gordonbell.azurewebsites.net/CGB%20Files/New%20Architecture%20PDP11%20SJCC%201970%20c.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;describing the PDP-11 architecture&lt;/a&gt; (*1), which in great detail talks about the ability to handle a stack machine using either register - except R6 and R7 that is, as they are predefined as Hardware Stack and PC. It is the combination of features (*2) for their new mini-computer (*3), that may confuse a bit.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[...]the stack grows downward. [...] But isn't that just convention? From what I understand we could equally well reverse the direction[...]. Yet every document I see says the stack grows downward on the PDP-11. So what am I missing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's the hardware stack. While each register (*4) can be used to manage a stack structure, R6 is tied to certain instructions and hardware functions manipulating &lt;em&gt;this&lt;/em&gt; stack. To keep it manageable two assumptions are common to all of them:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The (R6) stack is word sized&lt;/li&gt;&#xA;&lt;li&gt;The (R6) stack grows downward&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For example &lt;code&gt;JSR&lt;/code&gt; pushes the return address down on R6, while &lt;code&gt;RTS&lt;/code&gt; pulls it upward. Similar all hardware interrupts/trap will use the same fashion. So, unless one can take the risk of having the top of stack destroyed by any of those, going along and using R6 is a downward fashion is a must.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, this does not hinder any programming (language) to let the hardware stack run for itself and use any other Register (R0..R5) for their own purpose - like one (or more) software stacks managing procedure passing and local data structures. Forth may be the best known example here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mentioned paper goes into great detail that the PDP-11 is well suited to handle stack orientated programming so due its auto-indexing instruction set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, while the handling of a data stack can easy be implemented using any other register, the return stack is hard to be moved, as there are no simple instructions replacing &lt;code&gt;JSR&lt;/code&gt;/&lt;code&gt;RTS&lt;/code&gt;. Sure, one could use some /360-like mechanics, but missing a LINK type instruction each call would be something like &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MOV [Rmystack]+,PC&#xA;JMP subroutine&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;while returning would translate to&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MOV R0,-[Rmystack]&#xA;ADD R0,2&#xA;MOV PC,R0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Doesn't look great with just the little memory they had back then, not to mention execution time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: The Hardware Stack (R6) is quite useful due it's implied use of R6 but ties it's working to being downward and word sized.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, why do we then not use a different software stack for parameter passing, growing upward or being of different (byte) size? Well, as so often 'Hail C' is the answer. When C was developed, they decided to accept the limitations and go with the hardware stack. It removes the need to use a separate register and, at least for simple issues, it's as good as any other. As a result we got stuck with a downward growing word sized stack and the evil mix-up of program flow management and data management.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Made for a speech during the &lt;a href=&quot;https://dblp.org/db/conf/afips/afips70s.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Minicomputers - the profile of tomorrow's components&lt;/em&gt; track&lt;/a&gt; at the &lt;a href=&quot;https://en.wikipedia.org/wiki/American_Federation_of_Information_Processing_Societies&quot; rel=&quot;nofollow noreferrer&quot;&gt;AFIPS&lt;/a&gt; Spring &lt;a href=&quot;https://en.wikipedia.org/wiki/Joint_Computer_Conference&quot; rel=&quot;nofollow noreferrer&quot;&gt;Joint Computer Conference&lt;/a&gt; in May 1970 in Atlantic City and published in &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B000F9W2WK&quot; rel=&quot;nofollow noreferrer&quot;&gt;Volume 36&lt;/a&gt; of their proceedings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - They tried to dance on as many weddings as possible. Process control as well as scientific computing and general purpose. Hardware supported CISC structure as well as simple and symmetric instruction set for high level (synthetic) programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The paper starts with a real nice definition of what a micro-, mini- and midi-computer is by defining them by number of registers, word length, memory size, memory speed and cost. A worthwhile metric to be copied here to not only show that these terms weren't (and aren't) as settled as one assumes today, as well, as it's about capabilities, not size. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;       Address     Word         CPU        Cost  Data&#xA;         Space     Size       State              Types&#xA;       (Words)   (Bits)  (Register)  (1970 USD)&#xA;Micro       8k     8~12           2          5k  Integer, bit Vector&#xA;Mini       32k    12~16         2-4       5~10k  Indexing&#xA;Midi   65~128k    16~24        4-16      10~20k  Floating Point&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It also shows that even the most basic of today's microcontrollers (AVR, PIC, not to mention ARM) may well be placed in the Midi category of 1970, if not Mainframe :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Using R7 can as well be a bit ... well, lets say complicated :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-10-23T08:15:40.023" LastActivityDate="2018-10-23T08:15:40.023" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8021" PostTypeId="2" ParentId="8014" CreationDate="2018-10-20T14:17:25.710" Score="9" Body="&lt;p&gt;Apart from the R6 mechanisms in the hardware that expect the R6 stack to grow downwards (including the stack limit register),  there's an implied bias for downward stack growth due to the predecrement/postincrement address modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's preferable to have your stack pointer point to the logical top-of-stack rather than the next free word on the stack, for code-size reasons. With a downwards-growing stack,&lt;code&gt;MOV thing,-(SP)&lt;/code&gt; results in the last pushed quantity being addressable as &lt;code&gt;(SP)&lt;/code&gt;.  With an upwards-growing stack, &lt;code&gt;MOV thing,(SP)+&lt;/code&gt; results in the last pushed quantity being addressed as &lt;code&gt;-2(SP)&lt;/code&gt;, which is two bytes longer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a 16-bit machine one tends to obsess about a couple of bytes.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2018-10-20T14:17:25.710" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8022" PostTypeId="1" AcceptedAnswerId="8023" CreationDate="2018-10-20T15:47:36.470" Score="9" ViewCount="1356" Body="&lt;p&gt;I am learning how to program the Atari 800 by examining some tutorial code that came with the IDE/Assembler I am using. I am using the MADS assembler for this. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;putchar_ptr = $346&#xA;csrhinh     = 752&#xA;character = $80&#xA;rowcrs  = $54&#xA;colcrs  = $55&#xA;    org $2000&#xA;&#xA;    .proc main&#xA;    mva #1 csrhinh&#xA;    mva #6 rowcrs&#xA;    mva #16 colcrs&#xA;    mva #0 character&#xA;&#xA;next_character&#xA;    ldx character&#xA;    cpx #.len text&#xA;    beq stop&#xA;    lda text,x&#xA;    jsr putchar&#xA;    inc character&#xA;    jmp next_character&#xA;&#xA;stop    jmp stop&#xA;&#xA;    .proc putchar&#xA;    tax&#xA;    lda putchar_ptr+$1&#xA;    pha&#xA;    lda putchar_ptr&#xA;    pha&#xA;    txa&#xA;    rts&#xA;    .endp&#xA;&#xA;    .local text&#xA;    .byte 'Hi there!',$9b,'new line'&#xA;    .endl&#xA;&#xA;    .endp&#xA;&#xA;    run main&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I did reference the Atari 800 manual and the MADS-Assembler manual but I didn't find anything. The specific question I am asking is, in the putchar procedure, why is the accumulator pushed onto the stack? From what I can tell all it is loaded with is the location of the routine pointer on the first push and the put pointer on the second. A few possibilities I see are that I could be mistaken on what the routine actually is (the atari 800 manual wasn't very informative about that) or the push might point to something else other than the stack. I would say the latter is true but then we aren't pushing the character we are trying to print because of the txa instruction and the accumulator being reloaded.&lt;/p&gt;&#xA;" OwnerUserId="10945" LastEditorUserId="6659" LastEditDate="2018-10-20T19:05:26.747" LastActivityDate="2018-10-22T20:14:13.850" Title="Why does this 6502 code push a function address onto the stack before calling?" Tags="&lt;assembly&gt;&lt;6502&gt;&lt;atari-800&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8023" PostTypeId="2" ParentId="8022" CreationDate="2018-10-20T16:05:35.350" Score="18" Body="&lt;p&gt;That's a usual way to an indirect &lt;code&gt;JSR&lt;/code&gt; with a 6502. The 6502 does not support indirect subroutine calls (*1), so it has to be done in software. Indirect subroutine calls are a useful tool for function calls into OS/library functions which may change during runtime or by configuration - like when redirecting output to a different driver. By using a routine pointer for certain calls it's easy to overload/replace them by just changing that pointer (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lacking the indirect call the 6502 needs to emulate an indirect subroutine call in software by calling a subroutine which in turn pushes the pointer onto the stack (high first) and then jumping there by 'returning' to it. Adds some cycles, but also preserves the flexibility (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In detail it works like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LDA ptr+1     * high byte of target routine pointer&#xA;PHA           * push down the stack&#xA;LDA ptr       * low  byte of target routine pointer&#xA;PHA           * push down the stack&#xA;RTS           * 'returning' to the address at TOS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;TAX&lt;/code&gt;/&lt;code&gt;TXA&lt;/code&gt; around is just to preserve the parameter (character to be printed) around the stack handling code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NES-Dev Wiki offers a nice &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/RTS_Trick&quot; rel=&quot;nofollow noreferrer&quot;&gt;page about this topic&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Above routine is in itself a waste of time (23 cycles) and code (9 bytes) compared to a &lt;code&gt;JSR&lt;/code&gt; pointing to an indirect jump. Just when the OS table is, like in this case, prepared for being executed using this, it will hold the routine addresses minus one, so an indirect jump won't work.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Further, I'm not so sure that just grabbing the routine from IOCB 0 is a great idea. While it should work, as IOCB 0 is usually associated with the screen, it's definitely &lt;em&gt;not&lt;/em&gt; fault resistant. It might be way better to go thru the CIO first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Caveat: My Atari knowledge is only small and rather rusty)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - One of the few really missing instructions that could have been added rather easily. And a major hint that the 6502 wasn't designed with a general purpose CPU in mind, but rather a microcontroller with its fixed address locations, where such redirection is done during compile/linkage time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Always keep in mind to use target address minus one, as &lt;code&gt;RTS&lt;/code&gt; will increment the address before fetching the next instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Some OS did speed up this by putting a &lt;code&gt;JMP&lt;/code&gt;-opcode in front of every callable pointer, allowing a user programm to just &lt;code&gt;JSR&lt;/code&gt;ing via the pointer-1 address, greatly reducing the overhead to 3 cycles.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-22T20:14:13.850" LastActivityDate="2018-10-22T20:14:13.850" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8024" PostTypeId="1" AcceptedAnswerId="8030" CreationDate="2018-10-21T16:37:04.197" Score="10" ViewCount="481" Body="&lt;p&gt;I'm trying to find a software ad in a comic book style that I remember from one of my father's computer magazines in the early 1990s. I know this is a long shot, but somebody might recall it or even still have a magazine with that ad.&lt;/p&gt;&#xA;&lt;p&gt;The details I remember:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The ad was full page, landscape. It contained a single scene and was drawn in a colorful comic book style, in technique similar to Tintin.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://wallpapers-all.com/uploads/posts/2017-03/6_the_adventures_of_tintin.jpg&quot; alt=&quot;&quot; /&gt;&#xA;It featured two humans on a busy platform, overlooking a futuristic city. The platform was full of funky aliens (think Mos Eisley cantina clientele, but friendly).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The two humans had a speech balloon each. One was full of technobabble (for me at that time a least; it must have been a list of software features), the other bubble contained just the name of the product. I can't shake the feeling it was &lt;a href=&quot;https://en.wikipedia.org/wiki/Clipper_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;Clipper 5.01&lt;/a&gt;, but I'm pretty certain it was in the form &amp;quot;product_name version_number&amp;quot;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I'm pretty certain it was a German magazine, because that's what we had access to. The ad was on the back cover. I browsed through the &lt;a href=&quot;https://archive.org/details/computermagazines&quot; rel=&quot;noreferrer&quot;&gt;Internet Archive&lt;/a&gt; to at least find the name of the magazine. The only one that I found familiar there is &lt;a href=&quot;https://archive.org/details/ct-magazine&quot; rel=&quot;noreferrer&quot;&gt;c't&lt;/a&gt;, but there are only issues from the mid 1980s. I'm hoping the ad was running in other magazines as well.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I would place the timeframe in the early 1990s. If the ad was in fact for Clipper 5.01, which was released in April 1991, the magazine would be from from around that time.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7325" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-13T13:55:33.000" Title="Colorful print ad in ca. 1990 magazine" Tags="&lt;software&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8025" PostTypeId="1" CreationDate="2018-10-21T19:09:11.467" Score="7" ViewCount="2020" Body="&lt;p&gt;I have a Macintosh SE/30 with a formatted Disk. I'd like to install the latest System 7 on it that will run. According to Wikipedia that should be 7.5.5. According to several sources Apple has made it available for free. Where can I find it and how can I get it onto 1.44MB floppies for installation (the mac has a drive that supports them)?&lt;/p&gt;&#xA;" OwnerUserId="10845" LastActivityDate="2018-10-21T20:23:40.957" Title="How to install System 7.5.5 on a Macintosh SE/30 using floppies?" Tags="&lt;floppy-disk&gt;&lt;apple-macintosh&gt;&lt;mac-os-classic&gt;&lt;operating-system&gt;&lt;boot&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8026" PostTypeId="2" ParentId="8025" CreationDate="2018-10-21T20:18:30.520" Score="6" Body="&lt;p&gt;These used to be available at &lt;a href=&quot;ftp://ftp.download.info.apple.com&quot; rel=&quot;noreferrer&quot;&gt;ftp.download.info.apple.com&lt;/a&gt; but that site's been down for ages.  Most (possibly all) of the files previously hosted there are available &lt;a href=&quot;https://archive.org/details/download.info.apple.com.2012.11&quot; rel=&quot;noreferrer&quot;&gt;from archive.org&lt;/a&gt; either as a 7.4GB zip file or as &lt;a href=&quot;https://ia600501.us.archive.org/zipview.php?zip=/8/items/download.info.apple.com.2012.11/download.info.apple.com.2012.11.zip&quot; rel=&quot;noreferrer&quot;&gt;individual files&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll probably need to start with System 7.5.3 then update to 7.5.5&lt;sup&gt;1&lt;/sup&gt;.  Note that these assume you already have System 7 on your Mac though there is a work-around for older OSes&lt;sup&gt;2&lt;/sup&gt;.  Since you're it sounds like you're dealing with a bare system you'll also need to find a way to write the disk images onto physical floppy disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; These files can be found, e.g., under the following paths (replace &quot;English-North_American&quot; or &quot;English-International&quot; with the desired language):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/English-North_American/Macintosh/System/Older_System/System_7.5_Version_7.5.3/&lt;/li&gt;&#xA;&lt;li&gt;download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/English-North_American/Macintosh/Full_Installs/System_7.5_Version_7.5.3.part/&lt;/li&gt;&#xA;&lt;li&gt;download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/English-North_American/Macintosh/System/System_7.5.5_Update/&lt;/li&gt;&#xA;&lt;li&gt;download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/English-International/Macintosh/System/Full_Installs/&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; From one of the readme files:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This software is available as 19 parts of a self-mounting Disk Copy&#xA;  image. Download all 19 parts to your hard drive and then double-click&#xA;  on the first part to mount the compressed disk image on your desktop.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Note that self-mounting Disk Images require Mac OS version 7.0.1 or&#xA;  later. If you are using a version of Mac OS prior to this, you can&#xA;  download the System 7.5 Network Access floppy disk and boot your&#xA;  Macintosh from that to use this software.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-10-21T20:23:40.957" LastActivityDate="2018-10-21T20:23:40.957" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8027" PostTypeId="1" AcceptedAnswerId="8029" CreationDate="2018-10-21T21:18:40.597" Score="9" ViewCount="1275" Body="&lt;p&gt;Researching the Nascom 2 computer, I found &lt;a href=&quot;http://www.nascomhomepage.com/pdf/Nascom2.pdf&quot; rel=&quot;noreferrer&quot;&gt;these schematics&lt;/a&gt; for the system.  Interestingly, after the schematics for the computer itself, there is an added schematic for a disk controller to use with it.  This schematic has a copyright statement describing it as owned by &quot;Lucas Logic Limited&quot;, a company that I can find no references to in any of the Nascom related material I've looked at.  I would assume that it was simply a third party adapter, except that the details on the schematic give an address for this company, and it is the same address (in Wedgenock Industrial Estate, Warwick, UK) that is widely published as the primary contact address for Nascom computers; it appears that Nascom was a trading name of Lucas Logic Ltd (although whether this was always the case I have been unable to ascertain).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lucas Logic Limited was later renamed, and is currently called &lt;a href=&quot;https://beta.companieshouse.gov.uk/company/00492334&quot; rel=&quot;noreferrer&quot;&gt;Artemis International Corporation Limited&lt;/a&gt; and apparently specialises in enterprise investment management software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lucas Logic's branding (visible in the schematics linked above) was similar to the current branding of automotive parts manufacturer &lt;a href=&quot;http://www.lucaselectrical.co.uk/index.html&quot; rel=&quot;noreferrer&quot;&gt;Lucas Electrical&lt;/a&gt;, which like Lucas Logic is also based in the UK Midlands.  But as of today, there doesn't appear to be any actual association between these entities.  Is it known how they were related?&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2020-08-27T20:08:18.303" Title="What's the relationship between the Nascom computers and the company Lucas Electrical?" Tags="&lt;history&gt;&lt;nascom&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8028" PostTypeId="2" ParentId="8027" CreationDate="2018-10-21T21:33:14.063" Score="8" Body="&lt;p&gt;According to &lt;a href=&quot;https://nascom.wordpress.com/history/&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; website , Lucas Logic bought Nascom in 1981, after the unsuccessful introduction of the Nascom-2:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Nascom was finally sold to Lucas Logic (August? 1981), being renamed Lucas Nascom. Guy Kewney commented in PCW when the acquisition was announced that he doubted that Lucas could operate this sort of business. He was to be proved right! &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2018-10-21T21:33:14.063" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8029" PostTypeId="2" ParentId="8027" CreationDate="2018-10-21T22:57:26.400" Score="10" Body="&lt;p&gt;Lucas Logic was part of the Lucas Industries group, which was a major UK manufacturing conglomerate during much of the 20th century. See &lt;a href=&quot;https://books.google.co.uk/books?id=5Nj8BAAAQBAJ&amp;amp;pg=PA527&amp;amp;lpg=PA527&amp;amp;dq=lucas+logic+UK+company&amp;amp;source=bl&amp;amp;ots=uTnfZPXnp_&amp;amp;sig=Rv_qGwomrcc09BU3WA8bvb4qsuY&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwjx2eKqz5jeAhUlKcAKHVpaAeo4ChDoATACegQICBAB#v=onepage&amp;amp;q=lucas%20logic%20UK%20company&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;this trade directory&lt;/a&gt; from 1990: (unfortunately that link only shows part of the complete Lucas Industries group structure).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lucas Industries was much more wide-ranging than an automotive electrical components business - for example in the 1950s it started a semiconductor manufacturing plant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1996 Lucas Industries merged with the US Varity Corporation to form LucasVarity plc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, there are other UK companies named &quot;Lucas&quot; - it would be better to have a definitive statement that the &quot;Lucas Logic&quot; mentioned in the Artemis website is actually the same company.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="1989" LastEditDate="2018-10-22T06:36:51.473" LastActivityDate="2018-10-22T06:36:51.473" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8030" PostTypeId="2" ParentId="8024" CreationDate="2018-10-23T02:28:46.913" Score="24" Body="&lt;p&gt;Funny, I do remember this ad. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just found some images from the clipper 5.0 advertising campaign on&lt;br&gt;&#xA;&lt;a href=&quot;http://brand-history.com/nantucket-gmbh/nantucket&quot; rel=&quot;noreferrer&quot;&gt;brand-history.com/nantucket-gmbh/nantucket&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second last one seems to be it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NSWnj.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NSWnj.jpg&quot; alt=&quot;screenshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has been designed for Nantucket Germany back in 1992...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...and does indeed have that comic book style you mentioned!&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Google Translate gives: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Saint Newton! When I see this galactic chaos here, I think of tons of&#xA;  tasks. For which I absolutely need a super-capable development system!&#xA;  No memory limit at 640 K. and I want to be able to extend the&#xA;  linguistic scope by UDF's and UDC's. Can you give me a tip?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10980" LastEditorUserId="11795" LastEditDate="2020-04-13T13:55:33.000" LastActivityDate="2020-04-13T13:55:33.000" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8031" PostTypeId="1" AcceptedAnswerId="8034" CreationDate="2018-10-23T13:01:07.010" Score="28" ViewCount="8898" Body="&lt;p&gt;This question is about the Macintosh 128k, but if you can give an answer which describes one of the other very similar machines, that's good too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bitmap was 512 by 384 pixels. Assuming that one byte stores eight pixels, so that the CPU can read or update 16 bits in a single bus cycle, that means it would take 10 944 bus cycles to re-write the entire display. Assuming it used something like a &lt;code&gt;move.w a0+, a1+&lt;/code&gt; which is 12 cycles, I calculate that to take around 0.3 seconds to copy a bitmap onto the screen, at 8 MHz. Add to that a variable number of &lt;code&gt;roxl&lt;/code&gt; or &lt;code&gt;roxr&lt;/code&gt; instructions (in case you want to scroll or move something some pixels to the left or right), and overhead for even a generously unrolled loop, you've got a dog slow GUI. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another problem is that we have a mouse, but apparently no sprite hardware. So now we need to copy around a (partial) shadow of the bitmap, overlaying the cursor with &lt;code&gt;and&lt;/code&gt; and &lt;code&gt;or&lt;/code&gt;, whenever the user moves the mouse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20080514165755/http://docs.info.apple.com/article.html?artnum=112162&quot; rel=&quot;noreferrer&quot;&gt;This link&lt;/a&gt; does not list any hardware which was obviously intended to alleviate these problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how did this line of &quot;classic macs&quot; address the problem of scrolling and moving large areas, or rendering a mouse cursor?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="851" LastEditDate="2018-10-25T08:45:11.897" LastActivityDate="2018-10-26T14:17:28.790" Title="How did the early Macintosh computers update the display?" Tags="&lt;graphics&gt;&lt;apple-macintosh&gt;" AnswerCount="6" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8032" PostTypeId="2" ParentId="8031" CreationDate="2018-10-23T13:29:01.563" Score="47" Body="&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Exactly as you assume. The CPU shovelled the data around, even way slower than your calculation suggests, and everyone was happy about the high speed with which it happened :)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To be honest, I'm not complete sure what your question is. It was a plain bitmap display (like you assumed) and quite sufficient to be handled by the CPU. After all, no-one was thinking of real time video back then. Just a UI and whatever the running application wants to display. And for this a CPU is quite sufficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving a mouse cursor needs at maximum the manipulation of twice 16 bytes (in case of an 8x8). One for undrawing the existing one, one for drawing it at a new position. That's few enough when done every frame for a fast moving one. In reality the mouse doesn't move at all most of the time, so no redraw is needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar, the display doesn't get changed a lot. Sure, every time a key gets pressed a character is to be drawn. Not a big deal. Several can be done between frames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Worst case here would be scrolling up at the end of a line, or inserting a character in the topmost line of a window. This may take time to (re)draw the entire window, but then again, it's a rare case and even if it lags by like .2 seconds, it's way acceptable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, the Mac &lt;strong&gt;was&lt;/strong&gt; slow in drawing a whole screen, but it wasn't exceptionally slow, or slower than other machines of that time. Especially not considering the nice look it had :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just compare it to similar machines of about the same time frame. Inserting a character at a top line and wrapping the rest down equals a redraw of the whole text screen. On a 9,600 bps terminal that equals to more than &lt;strong&gt;two whole seconds&lt;/strong&gt;. An Apple II with its built-in 40x24 screen needed about 0.04 seconds (already more than 2 frames) to do the same (*1) and with an 80 column card it may have taken as much as .1 seconds. So while one could notice a little lag when scrolling on a Mac, it was way within its competition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today we are used to instantly updated of humungous high resolution screens, no matter what happens. Back then no-one watched videos on a PC. Heck, simple animations of a few pixels were already considered awesome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line, there was no such problem.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - That's hand written assembly optimized for that case.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-23T14:13:54.117" LastActivityDate="2018-10-23T14:13:54.117" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8033" PostTypeId="2" ParentId="8031" CreationDate="2018-10-23T15:37:57.573" Score="20" Body="&lt;p&gt;As others have said, refreshing the whole screen in a fraction of a second was considered &lt;em&gt;blindingly fast&lt;/em&gt; at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Mac's biggest early advantage, though, was the &lt;a href=&quot;https://en.wikipedia.org/wiki/QuickDraw&quot; rel=&quot;noreferrer&quot;&gt;QuickDraw framework&lt;/a&gt;. This was leaps and bounds ahead of other graphics packages of the day, both in functionality and efficiency. With QuickDraw, you rarely &lt;em&gt;had&lt;/em&gt; to rewrite the whole display -- instead, you'd work within a GrafPort representing a window's content pane, and manipulate Regions that touched only affected pixels, not an entire rectangular bounding box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time the Mac was introduced, a 16-bit 8-MHz 68000 was actually respectably fast in comparison to its competition. But it &lt;em&gt;felt&lt;/em&gt; AMAZINGLY fast.&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2018-10-23T15:37:57.573" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8034" PostTypeId="2" ParentId="8031" CreationDate="2018-10-23T16:08:42.893" Score="30" Body="&lt;p&gt;There were three important design aspects of the original Macintosh that allowed the relatively limited video display hardware to provide a pleasing user experience in terms of the performance of its GUI.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Vertical blanking hardware interrupt - this provided the necessary    timing for software to synchronize display updates to the CRT    refresh cycle. Thus, smooth animation could be achieved, especially    when combined with #2.&lt;/li&gt;&#xA;&lt;li&gt;Double-buffered display support - the hardware supported two independent display buffers that could be rapidly toggled. This allowed redraws that took longer than the blanking interval to appear synchronous with the CRT refresh cycle.&lt;/li&gt;&#xA;&lt;li&gt;Highly-optimized QuickDraw - about 1/3 of the Macintosh ROM firmware was used to give programmers reusable, highly-optimized, assembly language drawing routines for primitives like lines, ovals, rectangles, and fonts. These drawing routines were in turn used by the ROM GUI routines, which were used by virtually all applications programmers.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In summary, QuickDraw was a rather brilliant inclusion that made it easy for applications to &lt;strong&gt;quickly&lt;/strong&gt; &lt;strong&gt;redraw&lt;/strong&gt; only those &lt;strong&gt;regions&lt;/strong&gt; of the display that they modified. When this optimization was not enough for performance, synchronization with the video display allowed the lag in re-drawing the display to still appear sufficiently smooth and &quot;unbroken&quot; so that a responsive user feel was evoked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; 1: The visible display was actually 342 lines, not 384.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; 2: Since the display hardware shares access to DRAM with the CPU during each horizontal drawing cycle, the CPU effectively runs at ~6 MHz, not ~8 MHz.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-10-23T16:08:42.893" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8035" PostTypeId="2" ParentId="8031" CreationDate="2018-10-23T16:57:44.313" Score="10" Body="&lt;p&gt;Basically all early 68k Home Computers (Classic Mac, early Atari ST, Sinclair QL) would update the display using the CPU only. The Amiga with its Blitter Chip was an exception (somewhat copied by the Atari ST when that one later on got a - simpler - Blitter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without support from specific graphics or DMA chips, there were still some ways to speed up graphics operations:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Double(/multiple) buffering - This didn't really make the shoving around of pixels faster, but made it &lt;em&gt;look fast&lt;/em&gt; (because updates were basically instant). The CPU could write in one memory bank while the video circuitry displayed the other. Mac, Atari ST and Sinclair QL used / could use this technique. &lt;/li&gt;&#xA;&lt;li&gt;Make use of vast amounts of memory - Some Atari ST games used up to 8 pre-shifted screens and switched between them with the above method to implement fast pixel-wise horizontal scrolling (not an option for the early Mac because of its memory limits).&lt;/li&gt;&#xA;&lt;li&gt;Vertical scolling by changing the start address of the displayed video buffer - This technique was often used by the Atari ST that was able to modify the address of the first line displayed from video memory in scanline granularity (I do think, however, that the Mac screen banks were fixed)&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Highly optimized machine code screen drivers - The fastest way to shove video memory around using a 68000 CPU is actually the &lt;code&gt;MOVEM&lt;/code&gt; instruction - Free up as much registers as you can, then move memory around with some code like the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;     lea.l sourceAddr,a6&#xA;     lea.l destAddr,a5&#xA;     move.w #count-1,d0&#xA; lp: movem.l (a6)+,d1-d7/a0-a4&#xA;     movem.l d0-d7/a0-a4,(a5)+&#xA;     dbra d0,lp&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, you can actually do faster than your code examples imply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seen from today's viewpoint, Mac or Atari ST screen handling isn't really fast. Back in the days, however, it was - It was way faster than most of what people were used from 8-bit CPUs.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-10-23T22:52:11.620" LastActivityDate="2018-10-23T22:52:11.620" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8036" PostTypeId="1" AcceptedAnswerId="8057" CreationDate="2018-10-23T19:36:27.727" Score="6" ViewCount="442" Body="&lt;p&gt;As a speedrunning fan, I've watched hours of Super Mario Bros speedruns, and have heard the term &quot;lag frame&quot;. I don't think it's similar to typical computer lag, but instead an extremely technical reason why the game skips a frame at a specific point in the game for seemingly no reason.&#xA;In speedrunning, this is most commonly known as the &quot;lag frame&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is if games on the TurboGrafX16 suffer from lag frame in any way, and if this can be avoided in a future re-implementation of the machine using modern technology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;sources:&lt;br /&gt;&#xA;&lt;a href=&quot;https://www.speedrun.com/smb1/thread/yxs3c/1#gz6jx&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.speedrun.com/smb1/thread/yxs3c/1#gz6jx&lt;/a&gt;&lt;br /&gt;&#xA;&lt;a href=&quot;https://kotaku.com/world-record-for-super-mario-bros-broken-by-a-single-f-1787319130&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://kotaku.com/world-record-for-super-mario-bros-broken-by-a-single-f-1787319130&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="10751" LastEditDate="2018-10-31T23:13:03.103" LastActivityDate="2018-10-31T23:13:03.103" Title="Do TG16 games and software suffer from lag frame similar to NES Super Mario Bros?" Tags="&lt;hardware&gt;&lt;nes&gt;&lt;reverse-engineering&gt;&lt;turbografx-16&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8037" PostTypeId="2" ParentId="8031" CreationDate="2018-10-23T20:29:29.880" Score="4" Body="&lt;p&gt;In those old macs, the CPU was basically it.  There was no screen controller, no floppy controller, nothing.  Drawing the screen was job 1.  Handling the floppy and watching for mouse/keyboard interrupts was job 2, and running your program was job 3. Mostly you got time when the electron gun was pulling back from the bottom of the screen to the top after it drew a page, and when it was pulling back horizontally after it drew a line. It felt responsive, but if you wanted to do something compute intensive you had the wrong machine.&lt;/p&gt;&#xA;" OwnerUserId="10983" LastActivityDate="2018-10-23T20:29:29.880" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8038" PostTypeId="2" ParentId="5733" CreationDate="2018-10-23T22:16:04.387" Score="1" Body="&lt;p&gt;Get a used IBM usb Floppy drive from ebay.  Tested year 2003 and 2009 version MPF82E. Both of them can read/write/format 720k disks.  Works with windows 10 1803 and windows 7/xp.&lt;/p&gt;&#xA;" OwnerUserId="10908" LastActivityDate="2018-10-23T22:16:04.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8039" PostTypeId="1" AcceptedAnswerId="8055" CreationDate="2018-10-23T22:16:39.933" Score="5" ViewCount="284" Body="&lt;p&gt;System 6 is not officially supported on 68040 Macintoshes, but has anyone successfully run System 6 on an early Quadra, e.g. the Quadra 700?&lt;/p&gt;&#xA;" OwnerUserId="7486" LastActivityDate="2018-10-24T19:13:35.437" Title="Macintosh System 6 on Quadra?" Tags="&lt;apple-macintosh&gt;&lt;apple&gt;&lt;mac-os-classic&gt;&lt;motorola-68000&gt;&lt;m68k&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8040" PostTypeId="1" AcceptedAnswerId="8041" CreationDate="2018-10-23T22:18:04.577" Score="17" ViewCount="2022" Body="&lt;p&gt;In S. P. Morse's 1980 allegory, &lt;a href=&quot;https://stevemorse.org/beginning.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;&quot;In The Beginning&quot;&lt;/em&gt;&lt;/a&gt;, he writes&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And Intel said, &lt;em&gt;&quot;Let there be an 8085 with an oscillator on the same chip as the processor, and let an on-chip system controller separate the data from the control lines.&quot;&lt;/em&gt;  And Intel made a firmament and divided the added instructions which were under the firmament from the added instructions which were above the firmament.  And Intel called the first set of instructions &lt;code&gt;RIM&lt;/code&gt; and &lt;code&gt;SIM&lt;/code&gt;.  &lt;strong&gt;And the other instructions Intel never announced.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Given the context of the creation of the &quot;Intel 8085&quot;, I think to satisfy this claim all of the following must be applicable,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;instructions in the Intel 8085&lt;/li&gt;&#xA;&lt;li&gt;instructions not present in the Intel 8080&lt;/li&gt;&#xA;&lt;li&gt;instructions that are not documented&lt;/li&gt;&#xA;&lt;li&gt;instructions that are neither &lt;code&gt;SIM&lt;/code&gt; nor &lt;code&gt;RIM&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What instructions is Steven Morse referring to?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="5199" LastEditDate="2019-10-16T08:51:07.810" LastActivityDate="2019-10-16T08:51:07.810" Title="Which undocumented 8085 instructions is Steven Morse referring to in &quot;In The Beginning&quot;?" Tags="&lt;intel&gt;&lt;instruction-set&gt;&lt;8085&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8041" PostTypeId="2" ParentId="8040" CreationDate="2018-10-23T23:03:35.500" Score="22" Body="&lt;p&gt;Ken Shirriff has, as so often, a &lt;a href=&quot;http://www.righto.com/2013/02/8085-instruction-set-octal-table.html&quot; rel=&quot;noreferrer&quot;&gt;nice table&lt;/a&gt; to start with - especially nice to detect the 'undocumented' ones. All opcodes in lower case are 'undocumented'. With sorting his table according to the 'octal' (2-3-3) decoding logic the 8085 uses (*1), the first are nicely grouped where the 8080 only decoded &lt;code&gt;NOP&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(&lt;code&gt;NOP&lt;/code&gt; - Not undocumented, but on the 8080 it filled the whole 0-x-0 group)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;DSUB&lt;/code&gt; - 16 bit subtract &lt;code&gt;HL - BC&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ARHL&lt;/code&gt; - &lt;strong&gt;A&lt;/strong&gt;rithmetic &lt;strong&gt;R&lt;/strong&gt;ight shift &lt;strong&gt;HL&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;RDEL&lt;/code&gt; - &lt;strong&gt;R&lt;/strong&gt;otate (shift) &lt;strong&gt;DE&lt;/strong&gt; &lt;strong&gt;L&lt;/strong&gt;eft into carry, fill in zero&lt;/li&gt;&#xA;&lt;li&gt;(&lt;code&gt;RIM&lt;/code&gt; - Not undocumented, but added with the 8085) &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LDHI&lt;/code&gt; - &lt;strong&gt;L&lt;/strong&gt;oad &lt;strong&gt;D&lt;/strong&gt;E with &lt;strong&gt;H&lt;/strong&gt;L plus &lt;strong&gt;I&lt;/strong&gt;mmediat8 (HL+i8-&gt;DE)&lt;/li&gt;&#xA;&lt;li&gt;(&lt;code&gt;SIM&lt;/code&gt; - Not undocumented, but added with the 8085)  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LDSI&lt;/code&gt; - &lt;strong&gt;L&lt;/strong&gt;oad &lt;strong&gt;D&lt;/strong&gt;E with &lt;strong&gt;S&lt;/strong&gt;P plus &lt;strong&gt;I&lt;/strong&gt;mmediat8 (SP+i8-&gt;DE)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The others are scattered in remaining holes for 16 bit operations and jumps (where they belong anyway)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;RSTV&lt;/code&gt; - &lt;strong&gt;R&lt;/strong&gt;e&lt;strong&gt;ST&lt;/strong&gt;art if &lt;strong&gt;V&lt;/strong&gt; is set&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SHLX&lt;/code&gt; - &lt;strong&gt;S&lt;/strong&gt;tore &lt;strong&gt;HL&lt;/strong&gt; inde&lt;strong&gt;X&lt;/strong&gt;ed by DE &lt;code&gt;[DE]=HL&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;JNK&lt;/code&gt; - &lt;strong&gt;J&lt;/strong&gt;ump on &lt;strong&gt;N&lt;/strong&gt;ot &lt;strong&gt;K&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LHLX&lt;/code&gt; - &lt;strong&gt;L&lt;/strong&gt;oad &lt;strong&gt;HL&lt;/strong&gt; inde&lt;strong&gt;X&lt;/strong&gt;ed by DE &lt;code&gt;HL=[DE]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;JK&lt;/code&gt; - &lt;strong&gt;J&lt;/strong&gt;ump on &lt;strong&gt;K&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;JK&lt;/code&gt;/&lt;code&gt;JNK&lt;/code&gt; are about the (equally undocumented) &lt;a href=&quot;http://www.righto.com/2013/02/looking-at-silicon-to-understanding.html&quot; rel=&quot;noreferrer&quot;&gt;K-flag&lt;/a&gt; (*2), while &lt;code&gt;RSTV&lt;/code&gt; is about the (similarly undocumented) V-Flag (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/547/jules&quot;&gt;Jules&lt;/a&gt; did already a great write-up about those and how they may these may be translated into x86 in his &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6500/the-start-of-x86-intel-8080-vs-intel-8086/6504#6504&quot;&gt;answer&lt;/a&gt; to a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6500/the-start-of-x86-intel-8080-vs-intel-8086&quot;&gt;related question&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These instructions would have made &lt;code&gt;DE&lt;/code&gt; a quite versatile register for 16 bit address calculation in indirect operations (*4). These instructions were present in all 8085, including second source, I ever tested (*5).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I seriously have no idea why they where kept 'secret', as they would have improved HLL handling a lot. Morse offers an explanation in his paper &lt;a href=&quot;https://stevemorse.org/8086history/8086history.doc&quot; rel=&quot;noreferrer&quot;&gt;Intel Microprocessors: 8008-8086&lt;/a&gt; (MS-Word Document) published in IEEE Computer, Vol 13, No. 10, page 46, October 1980 &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Several other instructions that had been contemplated were not made available because of the software ramifications and the compatibility constraints they would place on the forthcoming 8086.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is not only incorrect, as these instructions were available, but, to me it sounds quite like hindsight, as the 8085 was delivered a full two years before the 8086, about the time the 8086 project started. Further all of the 16 bit instructions are (in some form) present in the 8086 (as well as the Overflow Flag) and translation would have been as straight forward as with the rest. Even more so, the only two instructions officially added, &lt;code&gt;RIM&lt;/code&gt; and &lt;code&gt;SIM&lt;/code&gt;, are among the ones explicit not supported by the 8086. (*6)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Less obvious in Pastraiser's &lt;a href=&quot;http://pastraiser.com/cpu/i8085/i8085_opcodes.html&quot; rel=&quot;noreferrer&quot;&gt;8085 opcode table&lt;/a&gt; in classic hex notation - but maybe more like we're used to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Which might have been the one intended for signed comparison, but that's a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The V-Flag signals overflow, much like the V flag on the 6502. With &lt;code&gt;RSTV&lt;/code&gt; this might have been intended for easy insertation of overflow exception handling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - I really used them a lot, as &lt;code&gt;DE&lt;/code&gt; now became a quite useful register instead of being a mere second &lt;code&gt;HL&lt;/code&gt; usable via &lt;code&gt;XHNG&lt;/code&gt;. Address calculation for structures became quite doable without bloating the instruction set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Mostly SIEMENS SAB8085, but also Toshiba, NEC, AMD and maybe others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - My personal &lt;em&gt;speculation&lt;/em&gt; is that it wasn't, as so often, not a technical or design decision but made on management level to keep it '100%' 8080 compatible (whatever that meant for management blurb at that time) and thus suppressing the nice add ons engineering had made (*7). &lt;code&gt;RIM&lt;/code&gt; and &lt;code&gt;SIM&lt;/code&gt; eventually as exception, as they where needed to support the new interrupt feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - Which leads to another thought: Having the ability for fast offset calculation to a memory (&lt;code&gt;HL&lt;/code&gt; or stack pointer, 16 bit left shift for word address calculation and 16 bit indexed loads) is quite pleasing for HLL programming. So while Mr. Morse does rightfully deserve credit for making the 8086 with HLL in mind, these instructions indicate that others at Intel already tried to push into that direction before him and he knew about - and joined the trek.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-15T22:13:35.890" LastActivityDate="2019-10-15T22:13:35.890" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8042" PostTypeId="2" ParentId="6995" CreationDate="2018-10-24T00:28:57.357" Score="0" Body="&lt;p&gt;There was no 'homebrew computer designer' at the time to deal with the huge requirements of an 80286 cpu. You couldn't do this in your basement. Radio shack came out with the Tandy 2000, using the 80186 in the early 80's. You don't get to this level of production single handedly. By this time, CPU/computer development was beyond the reach of most nerds playing with trash-80's. &amp;lt;- which I loved. &lt;/p&gt;&#xA;" OwnerUserId="10987" LastActivityDate="2018-10-24T00:28:57.357" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8043" PostTypeId="1" AcceptedAnswerId="8044" CreationDate="2018-10-24T08:11:03.087" Score="3" ViewCount="646" Body="&lt;p&gt;In the days before Visual Basic for Applications, the macro language for Microsoft Excel was called XLL. The syntax was similar to that of ordinary Excel formulas, except for two things:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Macros were executed cell by cell until a &lt;code&gt;=RETURN()&lt;/code&gt; or &lt;code&gt;=HALT()&lt;/code&gt; statement.&lt;/li&gt;&#xA;&lt;li&gt;XLL functions could have side-effects, like loading DLLs (&lt;code&gt;REGISTER&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;XLL has a documentation file called &quot;macrofun.hlp&quot;, the presence of which in the correct location would reenable the XLL wizard until at least Excel 97. Trouble is, Microsoft have &lt;a href=&quot;https://www.microsoft.com/en-us/download/details.aspx?id=9253&quot; rel=&quot;nofollow noreferrer&quot;&gt;taken the downloads down&lt;/a&gt; and &lt;a href=&quot;https://support.microsoft.com/kb/128185&quot; rel=&quot;nofollow noreferrer&quot;&gt;removed the online reference&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is macrofun.hlp still available? How can I find it?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2018-10-24T10:54:34.307" LastActivityDate="2018-10-24T13:58:30.583" Title="Where can I find macrofun.hlp?" Tags="&lt;programming&gt;&lt;application-program&gt;&lt;documentation&gt;&lt;microsoft&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8044" PostTypeId="2" ParentId="8043" CreationDate="2018-10-24T08:21:10.950" Score="5" Body="&lt;p&gt;The help file is still available &lt;a href=&quot;https://www.microsoft.com/en-us/download/details.aspx?id=1465&quot; rel=&quot;nofollow noreferrer&quot;&gt;elsewhere on Microsoft’s site&lt;/a&gt;. The &lt;code&gt;macrofun.exe&lt;/code&gt; file there is a self-extracting cabinet file containing &lt;code&gt;macrofun.hlp&lt;/code&gt;, the table of contents (&lt;code&gt;macrofun.cnt&lt;/code&gt;) and a README file with usage and installation instructions.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-10-24T13:58:30.583" LastActivityDate="2018-10-24T13:58:30.583" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8045" PostTypeId="5" CreationDate="2018-10-24T11:45:35.330" Score="0" Body="" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-10-24T11:45:35.330" LastActivityDate="2018-10-24T11:45:35.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8046" PostTypeId="4" CreationDate="2018-10-24T11:45:35.330" Score="0" Body="For questions regarding Microsoft products (hardware or software). If more specific tags exist, please use those instead; in particular, MS-DOS and Windows have their own tags." OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-10-24T11:45:35.330" LastActivityDate="2018-10-24T11:45:35.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8047" PostTypeId="2" ParentId="1796" CreationDate="2018-10-24T14:45:15.853" Score="7" Body="&lt;p&gt;The letter 'i' is an abbreviation of &quot;index&quot;, which refers to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Index_notation&quot; rel=&quot;noreferrer&quot;&gt;index notation&lt;/a&gt;, that is, specifying elements of an ordered collection by numbers. Another popular letter in math is 'n', abbreviating the word &quot;number&quot;. These two became popular in math books long before programming (&lt;a href=&quot;https://www.maa.org/press/periodicals/convergence/mathematical-treasures-lacroixs-calculus-of-probability&quot; rel=&quot;noreferrer&quot;&gt;example from 1816&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When loops and arrays were introduced in programming languages, the index notation was  carried over from math along with preferred letters to denote indexes.&lt;/p&gt;&#xA;" OwnerUserId="3736" LastActivityDate="2018-10-24T14:45:15.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8048" PostTypeId="2" ParentId="8031" CreationDate="2018-10-24T15:33:08.310" Score="4" Body="&lt;p&gt;Other answers cover QuickDraw pretty well.  The lack of a hardware mouse cursor was something of a problem from a UI perspective, however, which deserves additional detail.  The cursor drawing could be handled by the vertical-blank interrupt at times when nothing was going on.  The cursor was 16x16, and the CPU could load and store 32-bit registers at any 16-bit boundary, so for 16 lines of the display the CPU would load 32 bits (two 16-bit words), store them to a backup area, mask with the cursor, and write back.  Then the next time it would draw the cursor, it would first restore the part of the screen under the old one.  The cursor and mask could be stored shifted to line up with the current cursor position (so if the cursor moves right three pixels, they'd need to be shifted in the buffer before the next time they're drawn), so that unless the cursor moves by 8 pixels in a single frame it would never be necessary to perform an 8-bit shift (the worst-case value).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem arises if the cursor is moved while content is being drawn.  In early versions of the Macintosh firmware, before anything could be drawn on the screen, it was necessary to first hide the cursor (restoring what was behind it), then perform the graphical operation, and then restore the cursor.  The system would do this automatically if the cursor was enabled when drawing was attempted, but doing so imposed a huge speed penalty.  Most programs instead called &lt;code&gt;HideCursor&lt;/code&gt; before doing a sequence of operations, and then &lt;code&gt;ShowCursor&lt;/code&gt; afterward.  Calling &lt;code&gt;HideCursor&lt;/code&gt; would increment a counter and &lt;code&gt;ShowCursor&lt;/code&gt; would decrement it, so if the cursor was hidden while a function was called that would also hide and restore the cursor, the cursor would still be hidden after the function returned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A later version of the OS added a major improvement: &lt;code&gt;ShieldCursor&lt;/code&gt;.  This function took a rectangle, would hide the cursor immediately if it was within that rectangle, and &lt;em&gt;would also cause the vertical-blank interrupt to show or hide the cursor based upon whether it was within that rectangle&lt;/em&gt;.  This was a major win from both a performance and user-experience standpoint.  If code was going to draw some stuff in a rectangular region of the screen and the cursor wasn't there, there was no need to spend time erasing and redrawing the cursor.  Further, if a program called &lt;code&gt;ShieldCursor&lt;/code&gt; to guard one area of the screen where the cursor happened to be, and later used it to guard another, there was no need to redraw the cursor immediately.  If the first area needed to be re-shielded and the cursor hadn't been redrawn, there would be no need for an extra redraw/erase cycle.  But if the cursor was moved before that area was re-shielded, the cursor could be made visible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early versions of the Macintosh OS and programs for it tended to have the cursor disappear quite a lot, which significantly degraded the user experience.  I don't remember exactly when ShieldCursor was added, but I think it was around the time of the Macintosh II, and it made things much nicer.  I think the mechanisms are simple enough that it probably could have been included within the first Mac OS if anyone had thought of it, but hindsight is of course 20/20.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="357" LastEditDate="2018-10-26T14:17:28.790" LastActivityDate="2018-10-26T14:17:28.790" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8049" PostTypeId="1" AcceptedAnswerId="8054" CreationDate="2018-10-24T15:39:38.277" Score="18" ViewCount="2565" Body="&lt;p&gt;In case you have never seen it, 1991's &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Hellcats_over_the_Pacific&quot; rel=&quot;noreferrer&quot;&gt;Hellcats&lt;/a&gt;&lt;/em&gt; was a seminal release on the Mac. It ran at full 8-bit color and could, on a newish machine, drive three 1024x768 screens at the same time. Nothing on the Mac or PC came remotely close.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recall when I learned how the magic worked... I got up from the game for a moment and returned with the &quot;screen saver&quot; (ahh, the old days) was running. I flicked the mouse to clear it and unpause the game, and noticed the only part of the screen that updated was the horizon. It was reaching high speeds by carefully designing the screen so only certain portions would change as the aircraft moved, and then updating only those portions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can imagine, in 1991 this was no trivial task on its own. Graphics cards were generally frame buffers driven by the CPU, actual accelerators were just coming to market. So I was always curious how he managed this trick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long after I had an email exchange with &lt;a href=&quot;https://www.mobygames.com/developer/sheet/view/developerId,49740/&quot; rel=&quot;noreferrer&quot;&gt;the author&lt;/a&gt; and he explained it. He set aside two screen buffers in memory, and drew into alternate frames. He then compared the two and sent only the diffs over the bus to the card. Because the CPU was much faster than the bus, this provided greatly improved performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He also noted that the idea came to him on the SPARC1. This platform had the general problem of having a fast CPU but with a slowish bus. His first app spun a cube at 60 fps. He ended up doing Hellcats on the Mac because it shared this limitation, whereas PCs of the era generally used 320x240 for color, and the advantage of this technique was washed out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the question..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that this idea of incremental updating may pre-date Mr. Parker's 1989-ish Sun version. Does anyone know of examples of this being used earlier?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="175" LastEditDate="2018-10-25T15:23:02.907" LastActivityDate="2018-10-25T15:23:02.907" Title="Was 1991's Hellcats the first instance of incremental screen updates?" Tags="&lt;history&gt;&lt;graphics&gt;&lt;apple-macintosh&gt;&lt;gaming&gt;&lt;memory-layout&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8050" PostTypeId="2" ParentId="8049" CreationDate="2018-10-24T16:02:57.057" Score="7" Body="&lt;p&gt;Basically all graphical user environments (MS Windows [1985], X11 [1984], Atari GEM [1984] send a running application a list of screen regions that need to be re-drawn when one of this application's windows is un-obscured (This list of screen regions is typically attached to some sort of WM_PAINT message).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is up to the application wether it goes the hard way and only updates the parts of its windows that actually need an update, or wether it decides to go easy and collapses all these regions and redraws all of its window area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this standard technique is built in practically all WIMP environments that showed up in the early 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Outside WIMPS, double buffering has obviously always been a standard technology for games, especially on computers that didn't have hardware sprites (move partial sprite-sized window background to offscreen buffer, display software sprite, move background back from offscreen buffer). Such offscreen buffers could be as large as a screen and be switched to the display via one single register transfer (video circuitry that can display more than one framebuffer, for example Atari ST) or much smaller for computers with a fixed framebuffer address like the ZX Spectrum.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-10-24T16:10:11.203" LastActivityDate="2018-10-24T16:10:11.203" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8051" PostTypeId="2" ParentId="8049" CreationDate="2018-10-24T16:03:05.840" Score="4" Body="&lt;p&gt;It definitely predates 1989, e.g. Apple II games like &lt;a href=&quot;https://en.wikipedia.org/wiki/Bolo_%281982_video_game%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bolo&lt;/a&gt; (1982) and &lt;a href=&quot;http://www.computinghistory.org.uk/det/31821/Star-Maze/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Star Maze&lt;/a&gt; also used double buffering with incremental updates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is pretty obvious once you have hardware that can do double buffering, so I wouldn't be surprised if it was used much earlier already.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-10-24T16:03:05.840" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8053" PostTypeId="2" ParentId="8049" CreationDate="2018-10-24T17:10:36.880" Score="13" Body="&lt;p&gt;The idea is as old as memory-mapped display hardware is. After all, memory bandwidth was for most of the time the limiting factor. Every character based text screen only updates what needs to be changed and similar each and every game - maybe with an exception of the Atari VCS 'Racing the Beam' :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar double buffering. As soon as a machine supports multiple pages it's the best (or even only) way to generate a flicker free and complete update when game logic runs asynchrone to the screen refresh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The double buffering of complete renderings and only transferring changed parts into a display buffer only makes sense in an environment where the CPU (and local CPU accessible memory) is &lt;em&gt;way&lt;/em&gt; faster than access to screen memory, as each transfer needs at least two local memory access cycles (for comparison) instead of one access as with a simple transfer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it has been done on mainframes already in the late 1970s (*1) for text screens. Applications are usually form based, so even accessing/handling different data sets, a good part of the screen stays the same, so many screen handlers offered modes to only transfer the data section by default. Similar terminals offered modes to only return changable data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For one, rather large application we even increased that by keeping a complete image of the terminal screen in main memory and used a terminal mode that only returned changed field content. Similar, only data that has been changed on the host side since the last input was transferred toward the terminal. In average this reduced an input transmission to less than 100 bytes, while average output was less than 500 bytes instead of more than 3 KiB for a whole 80x25 screen (including format control).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The effect was quite notable - even on 240 kBit inhouse hookups. In addition the terminal also didn't clear the screen when updating, but updated in place, giving an even greater impression of quick response :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;em&gt;&quot;Im Westen nichts Neues&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Personal experience, I bet others had done that already before.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-25T11:02:35.737" LastActivityDate="2018-10-25T11:02:35.737" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8054" PostTypeId="2" ParentId="8049" CreationDate="2018-10-24T17:57:25.167" Score="12" Body="&lt;p&gt;Since my interpretation of the question differs from other answers posted, I think the primary topic is inter-frame video compression. It's about historical precedents for a pipeline that starts with the complete contents of frame n and frame n+1 in some representation, determines the differences between them, and communicates only the differences to a third party. That's as distinct from doing active calculation on only portions of an image because it is innately true that whatever isn't touched will be preserve — such as a video game that redraws only the moving sprites — because there are two complete frames, and their entirety is inspected to calculate a diff without a priori knowledge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In which case, I'm going to nominate &lt;a href=&quot;http://www.freepatentsonline.com/3679821.html&quot; rel=&quot;noreferrer&quot;&gt;“Transform coding of image difference signals”, M R Schroeder, US Patent 3679821, 1972.&lt;/a&gt;, which emanated from Bell Labs, as the first public reference I can find to digital image differencing; as per the name it's most heavily invested in transforming the differences for transmission, but &quot;worthwhile bandwidth reduction&quot; is the very second advantage it proposes in its abstract (emphasis added):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Immunity to transmission errors &lt;strong&gt;and worthwhile bandwidth reduction&lt;/strong&gt; are achieved by distributing the difference signal, developed in &lt;strong&gt;differentially coding an image signal&lt;/strong&gt; ... and other economies are achieved, &lt;strong&gt;particularly for relatively slowly varying sequences of images.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The filing date for the patent is given as the 30th of April 1970; it lists prior art but is the first thing I can find that is explicit about processing a digital signal rather than being purely analogue — in column 2, near the very bottom of the page and rolling over into column 3:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Moreover, the signals may be in analog form although preferably they are in digital form to simplify subsequent processing. Assuming for this illustrative embodiment that the signals are in digital form they are [pulse-code modulated].&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-10-24T18:35:37.797" LastActivityDate="2018-10-24T18:35:37.797" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8055" PostTypeId="2" ParentId="8039" CreationDate="2018-10-24T19:13:35.437" Score="5" Body="&lt;p&gt;Quadra 700's had a ROM-version which was 32-bit-clean (not using one byte out of all 32-bit-addresses anymore to allow addressing of more than 16MB RAM). Therefore it is quite unlikely, that anyone succeeded in running any System 6.x on a Quadra 700 computer. At least this version of System 6 needs to bring its own 24-bit-memory manager in RAM with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just be curious: why is System 7.0.1 no option for you?&lt;/p&gt;&#xA;" OwnerUserId="3193" LastActivityDate="2018-10-24T19:13:35.437" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8056" PostTypeId="1" CreationDate="2018-10-24T19:40:19.500" Score="2" ViewCount="177" Body="&lt;p&gt;Nascom computers had a wide range of software distributed in EPROM; as the Z80 didn't really have very good support for relocatable code, however, this means that each program is required to be installed at a particular location.  As a choice of 0xD000 seemed to be particularly popular (likely because the built-in monitor has a shortcut for executing the program at this location) there are many conflicts in software at this address, particularly the NAS-DOS operating system, and a variety of programming languages (e.g. BLS Pascal, the predecessor of Turbo Pascal).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did users of these computers handle software with conflicting addresses?  I presume they didn't generally open up the system and swap multiple chips in and out (the system used 2716-type 2KiB EPROMs, so a program like BLS Pascal, which was roughly 16KiB, would have been distributed on 8 of them).  Were there add-ons that made switching EPROMs easier?  Or some other solution?&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2019-06-04T17:11:17.603" Title="EPROM software at conflicting addresses on Nascom computers" Tags="&lt;nascom&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8057" PostTypeId="2" ParentId="8036" CreationDate="2018-10-24T21:24:39.550" Score="6" Body="&lt;p&gt;I don't know if any TurboGrafX16 games suffered from this problem, but they were not fundamentally immune. Any game pushing the limits of a console in this era could have lag frames, even if the limits are higher. A bug could cause it even in a game that doesn't come anywhere near to pushing the limits. A NES with a faster CPU could potentially fix the lag frames in Super Mario Bros but it would likely cause compatibility problems with a wide range of games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The explanation for the lag frame is actually not that complex.  Console games of the pre-3D era were all tightly synchronized to the TV screen refresh rate.  Games needed to fully update the display in a single screen refresh (1/60th of a second on NTSC consoles, 1/50th of a second on PAL consoles). If took longer than this then the game would display the same frame for twice as long as normal (or more if it took even longer), but the game's internal logic would behave as if only a single frame had elapsed.  So if Mario was moving across the screen at the rate of one pixel every frame, a lag frame would cause Mario to stop moving for one frame. In a second he would move 59 pixels across the screen instead of the 60 he should have, assuming an NTSC console and just one lag frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every 1/60th of a second (1/50th PALs) the console would start the process outputting a frame to the TV. This process would end with the vertical retrace, where the CRT beam would be turned off and moved back up to the top of the screen.  At this time games would read the player's controller and update the display as necessary.  Normally most games wouldn't have to do much to update the display, just move a few sprites, and change a few tiles. On most consoles, the Atari 2600 a notable exception, the actual output of the display was handled in the background by the graphics chip. After updating the display, the game program would simply wait until the next vertical refresh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pseudo-code for the logic of most games looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while not game_over:&#xA;    wait_for_vertical_retrace()&#xA;    read_controller()&#xA;    update_display()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If updating the display took so long that the vertical retrace happened during the update then the game would simply not notice. The game logic would assume the &lt;code&gt;update_display&lt;/code&gt; code was being called after each and every vertical trace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know what would cause Super Mario Bros to sometimes take longer than normal to update the display. Normally games try to finish updating the screen by the time the vertical retrace reaches the top in order to prevent tearing, leaving a lot of extra time left over. It could be that there's a lot that needs updating, or it maybe its unpacking graphic or audio data from ROM into RAM. It could just a bug that causes something to take much longer than it should. Given that the lag frames you mention appear to be the result of glitches exploited by speed runners, it's probably the later.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2018-10-25T02:19:01.590" LastActivityDate="2018-10-25T02:19:01.590" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8058" PostTypeId="2" ParentId="8056" CreationDate="2018-10-24T21:58:26.953" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;As a choice of 0xD000 seemed to be particularly popular (likely because the built-in monitor has a shortcut for executing the program at this location)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;AFAIR this was added in the second version of the NAS-SYS monitor, as a service for the parallel delivered new ZEAP editor/assembler (*1,2), not so much for general purpose (*3).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;there are many conflicts in software at this address, particularly the NAS-DOS operating system, and a variety of programming languages (e.g. BLS Pascal, the predecessor of Turbo Pascal).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The conflict may not be as real as you may assume. Software isn't all the same, nor is its usage situation.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;For one, people who &lt;em&gt;bought&lt;/em&gt; a ROM based PASCAL system don't neccessary switch for a different one ur another language on a daily base - if at all. These decisions where usually long term. Nervous flipping between versions and even more so languages is a rather new issue (*4).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Especialy the conflict with DOS isn't one, as people adding Disk drives and DOS in ROM, of course switch for a more flexible, disk based software (*5). After all, why permanent wasting precious address space for a compiler that can as well be loaded into RAM - and removed after it done its task.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Last but not least, next to all ROM application software was also available on cassette (includng BLS Pascal), to be loaded into RAM (*6). With Pascal (or some extended BASIC) installed the situation was no diferent form any other system in the need to load an assembler from cassette to write some subroutine in all comfort (*7,8).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm prety sure, that many of the seamingly conflicts will vanish when thinking it from common usage szenarios of back then.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Conveniant named &lt;em&gt;&lt;strong&gt;Z&lt;/strong&gt;80 &lt;strong&gt;E&lt;/strong&gt;ditor-&lt;strong&gt;A&lt;/strong&gt;ssembler &lt;strong&gt;P&lt;/strong&gt;ackage&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The older version was made to work with the original NASBUG.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Similar &lt;code&gt;J&lt;/code&gt; was reserved to start BASIC residing at &lt;code&gt;E000h&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Remember the computer/manufacturer and language wars? People were comited to their environment way more than today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - The ROM Pascal, like the BASIC, only supported cassette as storage - not realy useful with disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Thanks to Jules for reminding me about that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - Then again, instead of going thru all of this, one wrote it by hand and poked it from the HLL program later on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - Not to mentioned, that one of the claims of Pascal was to generate code good enough to not needing any Assembly modules :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-25T09:00:41.833" LastActivityDate="2018-10-25T09:00:41.833" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8059" PostTypeId="1" CreationDate="2018-10-25T07:35:41.420" Score="2" ViewCount="511" Body="&lt;p&gt;How to use floating point kernal routines for 16 bit arithmetics such as: $1234*$ABCD or $1234/$ABCD ?&lt;/p&gt;&#xA;" OwnerUserId="7348" LastEditorUserId="6659" LastEditDate="2018-10-25T14:46:15.507" LastActivityDate="2018-10-26T12:49:53.427" Title="Using C64 floating point kernal routines with 16 bit integer" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;floating-point&gt;" AnswerCount="2" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8060" PostTypeId="2" ParentId="8036" CreationDate="2018-10-25T09:01:14.420" Score="4" Body="&lt;p&gt;Yes, all machines of the era could have this kind of lag frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue here is that under certain very specific circumstances the Nintendo console can't finish all the processing it needs to do in one frame. Normally the game limits the amount of processing to be done so that it all finishes in one frame, but if a particular glitch used in speed running (the &quot;Bullet Bill glitch&quot;) happens when the player's score contains certain digits it takes slightly longer to update the score display, and processing spills over into the next frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This results in the game having a duplicate &quot;lag&quot; frame, where the in-game timer does not advance. That timer controls how Bowser acts at the end of the game. In reality N frames have been displayed, but because one was a duplicate lag frame the game behaves as if N-1 frames had passed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many games of the era used this scheme for timing, on all 8 and 16 bit systems. Any game that could occasionally slow down could experience lag frames. PC Engine / TG16 games were not immune.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-10-25T09:01:14.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8061" PostTypeId="2" ParentId="8049" CreationDate="2018-10-25T11:24:07.677" Score="4" Body="&lt;p&gt;An interesting example, or possibly variation, of this is the Amiga &quot;ANIM&quot; format used by Deluxe Paint. It only stores changes between frames, rather than whole frames. It first appeared in 1988.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Differences between frames were determined by the application creating the file. In the case of Deluxe paint it was based on user input, rather than examining frame-to-frame differences, so could sometimes produce very large files even though the visible changes were relatively small.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-10-25T11:24:07.677" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8062" PostTypeId="2" ParentId="8059" CreationDate="2018-10-25T12:44:35.643" Score="13" Body="&lt;p&gt;There's a great and much detailed &lt;a href=&quot;https://www.c64-wiki.com/wiki/Floating_point_arithmetic&quot; rel=&quot;noreferrer&quot;&gt;description&lt;/a&gt; at the C64 Wiki (*1) describing the basic structures and workings, as well as all functions involved to use the ROM routines for floating point (*2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cookbook:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use &lt;code&gt;GIVAYF&lt;/code&gt; to &lt;a href=&quot;https://www.c64-wiki.com/wiki/Floating_point_arithmetic#Routines_for_converting_between_floating_point_and_other_formats&quot; rel=&quot;noreferrer&quot;&gt;convert&lt;/a&gt; a 16 Bit number in A:Y into an FP in FAC&lt;/li&gt;&#xA;&lt;li&gt;If multiple numbers are involved, &lt;a href=&quot;https://www.c64-wiki.com/wiki/Floating_point_arithmetic#Routines_for_moving_.28copying.29_numbers&quot; rel=&quot;noreferrer&quot;&gt;move FAC&lt;/a&gt; to memory using &lt;code&gt;MOVMF&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Repeat for all numbers&lt;/li&gt;&#xA;&lt;li&gt;Do &lt;a href=&quot;https://www.c64-wiki.com/wiki/Floating_point_arithmetic#Routines_for_performing_calculations&quot; rel=&quot;noreferrer&quot;&gt;whatever function&lt;/a&gt; is needed, like &lt;code&gt;FMULT&lt;/code&gt; for multiplication (FAC times saved value)&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;code&gt;FACINX&lt;/code&gt; to convert the result from FAC back into a 16 bit in A:Y&lt;/li&gt;&#xA;&lt;li&gt;Or &lt;code&gt;QINT&lt;/code&gt; if you expect the result to need a 32 bit integer - like with a 16x16 multiplication.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As usual, countless variations thereof are possible, depending on the task at hand and requirements set.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/3297/jeremyp&quot;&gt;JeremyP&lt;/a&gt; for that link&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Which BTW are not part of the Kernel, but belong to BASIC &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8059/using-c64-floating-point-kernal-routines-for-16-bit-values?noredirect=1#comment23392_8059&quot;&gt;as Wilson pointed out&lt;/a&gt; :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-25T13:13:57.887" LastActivityDate="2018-10-25T13:13:57.887" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8064" PostTypeId="1" AcceptedAnswerId="8065" CreationDate="2018-10-25T18:56:08.877" Score="6" ViewCount="1815" Body="&lt;p&gt;What are the roots of the endless analogies to Eastern philosophy,&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.jagregory.com/abrash-zen-of-asm/&quot; rel=&quot;nofollow noreferrer&quot;&gt;1990: Zen of Assembly Language: Volume I, Knowledge&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0134529146&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;1995: Zen and the Art of the Internet: A Beginner's Guide (Prentice Hall Series in Innovative Technology)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.python.org/dev/peps/pep-0020/&quot; rel=&quot;nofollow noreferrer&quot;&gt;2004: Zen of Python&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B00YQ6XTW0&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;2010: Zen of Analog Circuit Design&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Etc. I don't see this in any other industry? When did this theme start and what kicked it off?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="15334" LastEditDate="2021-01-22T13:32:42.187" LastActivityDate="2021-01-22T13:32:42.187" Title="When did &quot;Zen&quot; in computer programming become a thing?" Tags="&lt;history&gt;&lt;books&gt;" AnswerCount="3" CommentCount="17" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8065" PostTypeId="2" ParentId="8064" CreationDate="2018-10-25T20:27:00.817" Score="14" Body="&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8064/when-did-zen-in-computer-programming-become-a-thing#comment23425_8064&quot;&gt;Ross Ridge already mentioned&lt;/a&gt;, it's a stream of titles started with  &lt;a href=&quot;https://en.wikipedia.org/wiki/Robert_M._Pirsig&quot; rel=&quot;noreferrer&quot;&gt;Robert Pirsig&lt;/a&gt;'s book &lt;a href=&quot;https://en.wikipedia.org/wiki/Zen_and_the_Art_of_Motorcycle_Maintenance&quot; rel=&quot;noreferrer&quot;&gt;Zen and the Art of Motorcycle Maintenance&lt;/a&gt; of 1974. This book was a rather unique mixture of fiction, autobiography and philosophy focusing on what quality might be, how it's defined and what it means to people.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was quite influential to the generation that later founded IT development during the 1980s and 1990s. So no wonder that some took the freedom to tie their works with this iconic title.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And no, it's not so much about far eastern philosophy as it seems. Beside being a fiction, it centers around classic, western philosophy.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Somewhat OT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I don't see this in any other industry?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Oh, don't hold your breath, there are Zillions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.amazon.de/Zen-Art-Recording/dp/1480387436&quot; rel=&quot;noreferrer&quot;&gt;Zen and the Art of Recording&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.amazon.de/Zen-Art-Producing-Mixerman/dp/1458402886&quot; rel=&quot;noreferrer&quot;&gt;Zen and the Art of Producing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.amazon.de/Zen-Art-Mixing-REV-2/dp/1480366579&quot; rel=&quot;noreferrer&quot;&gt;Zen and the Art of Mixing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.amazon.de/Zen-Art-Guitar-Path-Artistry/dp/0739028170&quot; rel=&quot;noreferrer&quot;&gt;Zen and the Art of Guitar&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Just a few picks from music business and there's more from &lt;a href=&quot;https://www.amazon.de/Zen-Art-Poker-Timeless-Transform/dp/0452281261&quot; rel=&quot;noreferrer&quot;&gt;poker&lt;/a&gt; to &lt;a href=&quot;https://www.amazon.de/Zen-Art-Foosball-Beginners-Soccer/dp/0595217052&quot; rel=&quot;noreferrer&quot;&gt;table football&lt;/a&gt;. A great panpoticum of writers who wanted to play in the same league as the original. No need to say only that very few are worth being mentioned in the same sentence with mr. Pirsig.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-26T13:49:37.110" LastActivityDate="2018-10-26T13:49:37.110" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8066" PostTypeId="2" ParentId="8064" CreationDate="2018-10-25T22:42:30.247" Score="20" Body="&lt;p&gt;Pirsig's title (ZatAMM) is a quote from &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zen_in_the_Art_of_Archery&quot; rel=&quot;noreferrer&quot; title=&quot;Zen in the Art of Archery&quot;&gt;Zen in the Art of Archery&lt;/a&gt;, by Herrigel, from 1948.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many programmers, artists, and writers (myself included) find that their best work comes when they are in a state of complete un-self-consciousness, their mind fully engaged with the task. No ego, no id, just a mental model that goes from mind to hand. Surfacing, after hours in that state, is incredibly satisfying, just like meditation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ZatAMM may well have been the source of the reference specifically for programming. But there was already a pivot to meditative practice, since the 60's, I'd suppose. Many in the west who either dabbled with eastern religion, or independently discovered the pleasure of perfect concentration in the egoless state, made the same association, thus &quot;Zen and {mumble}&quot;.&lt;/p&gt;&#xA;" OwnerUserId="4150" LastEditorUserId="4150" LastEditDate="2018-10-29T23:26:52.390" LastActivityDate="2018-10-29T23:26:52.390" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8067" PostTypeId="1" AcceptedAnswerId="8068" CreationDate="2018-10-25T23:03:09.740" Score="6" ViewCount="643" Body="&lt;p&gt;I have a Mac OS Classic application (a game) that I want to &quot;debug&quot;.  It has data files in a unique format than I am attempting to reverse-engineer.  I've made some progress with a hex editor, but really need to see the code to work out the algorithm.  I have been able to get the program running in Basilisk II, and it plays without issue.  It runs under Mac OS Classic 7.5.3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am familiar with using OllyDbg and other Windows tools to add breakpoints to a running application, trap I/O, step through code, and disassemble memory.  Is there a similar tool for Mac OS Classic?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternately, since it is running under an emulator, are there any emulators that have a built-in debugger function for the applications running inside it?&lt;/p&gt;&#xA;" OwnerUserId="4882" LastActivityDate="2018-10-26T15:35:30.820" Title="How can I debug a Mac OS Classic application?" Tags="&lt;apple-macintosh&gt;&lt;mac-os-classic&gt;&lt;file-format&gt;&lt;reverse-engineering&gt;&lt;debugging&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8068" PostTypeId="2" ParentId="8067" CreationDate="2018-10-26T00:22:59.873" Score="7" Body="&lt;p&gt;Back in the day, MacNosy was the go to disassembler tool to attack things like that. He also wrote a debugger. I can't speak to its status today. Apparently the web site still exists: &lt;a href=&quot;https://www.jasik.com&quot; rel=&quot;noreferrer&quot;&gt;https://www.jasik.com&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(We are talking 68K code, right?)&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-10-26T00:22:59.873" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8069" PostTypeId="2" ParentId="8064" CreationDate="2018-10-26T00:29:49.013" Score="7" Body="&lt;p&gt;On a related note, I clearly remember The Tao of Programming making the rounds on BBS in the late 80's and early 90's.  According to Wikipedia, it was written in 1987 as a bit of a spoof.  A year later the same author wrote The Zen of Programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/The_Tao_of_Programming&quot; rel=&quot;noreferrer&quot;&gt;https://en.m.wikipedia.org/wiki/The_Tao_of_Programming&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus spake the master programmer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Let the programmers be many and the managers few - then all will be productive.&quot;&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2018-10-26T00:29:49.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8070" PostTypeId="2" ParentId="8067" CreationDate="2018-10-26T07:21:24.257" Score="1" Body="&lt;p&gt;I remember MacsBug as a System wide debugger &quot;INIT&quot;. It could be activated by pressing the NMI-Button on the programmer's switch on real hardware (or else by keyboard with Cmd-PowerOn, if I remember right).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See Wikipedia for details.&lt;a href=&quot;https://en.wikipedia.org/wiki/MacsBug&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10295" LastActivityDate="2018-10-26T07:21:24.257" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8071" PostTypeId="2" ParentId="1798" CreationDate="2018-10-26T07:42:11.410" Score="4" Body="&lt;p&gt;I have Crowther's original game compiled with the DEC F40 compiler and running on ITS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The files, advent.f4 and advent.dat, are here:&lt;br&gt;&#xA;&lt;a href=&quot;https://github.com/PDP-10/its/tree/master/src/games&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/PDP-10/its/tree/master/src/games&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The build script is here:&lt;br&gt;&#xA;&lt;a href=&quot;https://github.com/PDP-10/its/blob/1e4a80b7dee1db11d1ba58e65cb53366a586e087/build/build.tcl#L1067-L1079&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/PDP-10/its/blob/1e4a80b7dee1db11d1ba58e65cb53366a586e087/build/build.tcl#L1067-L1079&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2019-04-10T11:54:38.707" LastActivityDate="2019-04-10T11:54:38.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8072" PostTypeId="2" ParentId="8059" CreationDate="2018-10-26T10:05:58.740" Score="4" Body="&lt;p&gt;Consider this an addendum to &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8062/6659&quot;&gt;Raffzahn's answer&lt;/a&gt;. If you are going to accept one, accept his.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code for your first multiplication might look like this (note I haven't tested this)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;lda #$12&#xA;ldy #$34&#xA;jsr GIBAYF&#xA;lda some_memory_loc_low_byte&#xA;ldy some_memory_loc_highbyte&#xA;jsr MOVEFM&#xA;lda $AB&#xA;ldy $CD&#xA;jsr GIBAYF&#xA;lda some_memory_loc_low_byte&#xA;ldy some_memory_loc_highbyte&#xA;jsr FMULT&#xA;jsr FACINX ; Answer in A:Y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That's going to be a lot slower than doing the 16 bit multiplication directly though.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="6659" LastEditDate="2018-10-26T12:49:53.427" LastActivityDate="2018-10-26T12:49:53.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8073" PostTypeId="2" ParentId="8067" CreationDate="2018-10-26T15:35:30.820" Score="2" Body="&lt;p&gt;While the Jasik Debugger is probably the most capable tool, and appears to still be available for purchase, there is also TMON.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TMON has more capability than MacBugs, and is designed to explore the structure of memory and executing programs. It also seems to provide hints on parameters for system calls used by the program, making the code potentially much easier to trace than a pure disassembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen TMON available for download in Classic Macintosh archives, such as macintoshgarden.org.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-10-26T15:35:30.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8074" PostTypeId="1" AcceptedAnswerId="8076" CreationDate="2018-10-26T20:36:13.033" Score="14" ViewCount="724" Body="&lt;p&gt;Suppose I have an Amiga computer without any working boot disks. Is it possible to trigger the built-in ROM monitor (RomWack or SAD, see &lt;a href=&quot;https://theamigamuseum.com/amiga-kickstart-workbench-os/guru-meditation/&quot; rel=&quot;noreferrer&quot;&gt;https://theamigamuseum.com/amiga-kickstart-workbench-os/guru-meditation/&lt;/a&gt;) and then somehow send a program over the serial port to, say, write a disk image to disk? Would it require any hardware modifications to do this?&lt;/p&gt;&#xA;" OwnerUserId="3776" LastActivityDate="2019-10-11T09:19:51.427" Title="Can I trigger the Amiga ROM debugger from the boot prompt?" Tags="&lt;amiga&gt;&lt;rom&gt;&lt;serial&gt;&lt;boot&gt;&lt;debugging&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8075" PostTypeId="1" CreationDate="2018-10-27T02:11:42.183" Score="5" ViewCount="808" Body="&lt;p&gt;The problem is basically as the title stated. I have a Compaq Presario PC from the late 90s running Windows 98 Second Edition. It was handed down so I'm not exactly sure what it went through in its original years. I'm trying to get it to network one way or another now. I have USB support working, so I can plug in flash drives, which is nice, but I'd like to use the NIC and/or a modem with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried using the original Compaq 56k internal modem but could not get it work. I spent hours trying. I would get &quot;Could not connect to COM port&quot; when doing modem diagnostics (it was on COM2). HyperTerminal would throw errors too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Didn't have a NIC so I installed a DAVICON 9102 10/100 Mbps network adapter from a Dell Dimension 8200 running a corrupted installation of Windows XP. The light on the NIC lights up when the computer is on (and both if a cable is plugged in) but nowhere in the computer can I get network or Internet access. Yes, I played with the firewall settings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently got an external US Robotics 5686E modem to see if that would work more seamlessly. Plugged it in, didn't work. The modem is in &lt;em&gt;perfect&lt;/em&gt; condition. When I try doing diagnostics I see lights on the modem flickering but the computer hangs and then says could not communicate with modem. Yes, proper drivers were installed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, also, before that I installed the modem that was on that aforementioned Dell computer and that also didn't work, even with the proper drivers installed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Someone suggested possibly Windows needs to be repaired using the upgrade disc. I suppose that's plausible, but I'd like to pinpoint the actual cause of the issues. I reinstalled the USR modem numerous times before realizing that was going nowhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it helps, after I installed the NIC/internal Dell modem (I installed at the same time so not sure which) I now get some kind of network error upon each boot that says something like &quot;NDISHLP.SYS not found&quot;. Not sure if this is related or not. Seems to be a possible NIC issue but not sure why that would be affecting the computer's ability to communicate with internal and external modems. Here is what I get from that:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C:\&amp;gt;C:\WINDOWS\net start&#xA;  Invalid value for binding specified&#xA;  Invalid value for binding specified&#xA;&#xA;Error loading device driver NDISHLP.SYS.&#xA;&#xA;Error 7323: One or more network transport drivers failed to load.&#xA;&#xA;&#xA;C:\&amp;gt;&#xA;C:\&amp;gt;&#xA;C:\&amp;gt;&#xA;C:\&amp;gt;PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;&quot;C:\Program Files\Mts&quot;&#xA;&#xA;C:\&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Here are some more pictures:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o3PA9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o3PA9.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rTN7f.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rTN7f.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yesterday, I burned a retail Windows 98 SE disc and used that to run &quot;sfc&quot;, and I also manually re-copied over NDISHLP.SYS - I now have all the stuff I was told I need except for the LANMAN directory and protocol.ini and the elink thing, both pertinent to the NIC. I also removed the two Ndis2 adapters in Device Manager with yellow exclamation points. When trying to update driver it said most recent driver is already installed, and if reinstalled it doesn't change at all. &lt;strong&gt;However&lt;/strong&gt;, the modem is &lt;em&gt;still&lt;/em&gt; NOT working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ignoring the NIC, for the present, the computer is still not communicating with the modem. The modem works, and lights DO light up when I click &quot;More info&quot; in Diagnostics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Upon boot, I no longer see &quot;The network resource cannot be found&quot;, I just see this now:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C:\&amp;gt;rem - By Windows 98 Network - C:\WINDOWS\net start&#xA;&#xA;C:\&amp;gt;&#xA;C:\&amp;gt;&#xA;C:\&amp;gt;&#xA;C:\&amp;gt;PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;&quot;C:\Program Files\Mts&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="5371" LastEditorUserId="357" LastEditDate="2018-11-04T18:15:37.900" LastActivityDate="2018-11-04T18:15:37.900" Title="Windows 98 SE PC refusing to network using NIC/modems" Tags="&lt;windows-98&gt;&lt;modem&gt;&lt;network&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8076" PostTypeId="2" ParentId="8074" CreationDate="2018-10-27T09:48:11.363" Score="6" Body="&lt;p&gt;It is possible, but not simple. The ordinary boot process which brings a working machine up from cold to the prompt for a Workbench disk doesn't offer an opportunity to drop into the debugger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A dodgy and potentially hardware-damaging approach is to cause an unexpected CPU exception by e.g. wiggling the trapdoor memory in an A500 -- execbase disappearing is sure to cause a crash -- or shorting the interrupt lines to cause an NMI. It'll crash, and while the power LED is blinking, you can take control over the serial port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An arguably somewhat more &quot;correct&quot; approach is to add an expansion card of some sort which will hook the system and call Debug() on command. Building one from scratch would be more effort than it's worth, but existing cards could be presssed into service with similar effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming an A500 or A1000, you can use an Action Replay cartridge. The one I had allowed me to format disks and install a custom bootblock, which gives enough of an edge to to bootstrap a working system from a machine that didn't come with Workbench disks. Earlier Action Replays might not be so featureful, but should at least let you break the running OS in such a way that it'll crash and drop into the debugger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another kind of expansion card is a hard disk controller. You can use an Amiga emulator to partition and install Workbench onto a hard disk which can then be transplanted into the real Amiga, which should then just boot off it. This is easier on a machine with built-in IDE since USB-IDE controllers are still easy to find, but SCSI is uncommon on modern machines. From here you can then just call Debug() directly, but since your bootstrap problem has already been solved, it's unnecessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also just get one of those GoTek USB-to-floppy adaptors, which also nicely sidesteps the problem of having no boot floppies.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2018-10-27T09:48:11.363" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8078" PostTypeId="1" CreationDate="2018-10-27T19:41:33.953" Score="2" ViewCount="354" Body="&lt;p&gt;I have a MS-DOS 3.22 laptop that will receive simple text data over serial COM1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can make it save to file by doing &lt;code&gt;TYPE COM1 &amp;gt;&amp;gt; data.log&lt;/code&gt; and I can make it show the data on the console with &lt;code&gt;TYPE COM1 &amp;gt;&amp;gt; CON&lt;/code&gt; but I can't do this simultaneously as the &lt;code&gt;TYPE COM1&lt;/code&gt; is a never ending command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way for me to both display the COM data on my console and to save it to file simultaneously?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;thx!&lt;/p&gt;&#xA;" OwnerUserId="11013" LastEditorUserId="357" LastEditDate="2018-10-29T18:06:21.503" LastActivityDate="2018-10-29T18:06:21.503" Title="MS-DOS, save data from COM1: to file and display on console at the same time" Tags="&lt;ms-dos&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8079" PostTypeId="2" ParentId="8078" CreationDate="2018-10-27T20:41:00.533" Score="4" Body="&lt;p&gt;The ideal tool for this is some DOS version of the Unix &lt;code&gt;tee&lt;/code&gt; command; once you have that,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;TEE data.log &amp;lt; COM1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;will read data from the first serial port and write it to both &lt;code&gt;data.log&lt;/code&gt; and the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS versions of &lt;code&gt;tee&lt;/code&gt; are available from a variety of sources:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.4dos.info/v4dos.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;4DOS&lt;/a&gt; (a replacement shell) includes a built-in &lt;code&gt;TEE&lt;/code&gt; command;&lt;/li&gt;&#xA;&lt;li&gt;Ian Stewartson’s Unix utilities include &lt;code&gt;TEE&lt;/code&gt; in &lt;a href=&quot;http://www.retroarchive.org/garbo/pc/unix/uxutl23d.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;part D&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;I see &lt;a href=&quot;http://www.retroarchive.org/garbo/pc/unix/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Garbo&lt;/a&gt; has a few other implementations, which I haven’t tried (or don’t remember using).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Other, Unix-style uses of &lt;code&gt;TEE&lt;/code&gt; won’t have the same immediate effect under DOS since programs can’t run simultaneously: &lt;code&gt;TYPE COM1 | TEE data.log&lt;/code&gt; would fail because under DOS, pipes work by redirecting the output to a temporary file, waiting for the command feeding the pipe to finish, then running the next command with its input redirected from the temporary file.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-10-27T20:53:40.160" LastActivityDate="2018-10-27T20:53:40.160" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8080" PostTypeId="2" ParentId="7361" CreationDate="2018-10-28T03:05:30.457" Score="8" Body="&lt;p&gt;I just found this discussion and I wanted to correct a few mistakes by Jules about one of my projects, the YGREC8 (I'm the YG of YGREC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many relay-based projects, look at &lt;a href=&quot;https://hackaday.io/project/11798-relay-based-projects&quot; rel=&quot;noreferrer&quot;&gt;https://hackaday.io/project/11798-relay-based-projects&lt;/a&gt; (but it's not exhaustive). Every project uses relays in a particular way, and by far the best choice is DPDT relays (2 coil pins and 6 signal/switch pins). YGREC8 uses SPDT and it has its own challenges, but it's still way better than SPST ! (some lost souls on Hackaday are trying and are forced to use diodes). More poles, more flexibility and creative design !&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have experimented with &quot;CC-PBRL&quot; : Capacitively-Coupled Pre-Biased Relay Logic : there is no diode there :-) In fact a SPDT relay acts as a multiplexer, which is one of the most powerful simple logic functions and it can emulate many other functions. This is the basis of the Actel A1xxx series of FPGA, which didn't use LUT : all the functions are implemented with MUX :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I have used diodes (old russian point-contact germanium style) only for the decoding arrays of the 7-segments hexadecimal display modules. The rest of the YGREC8 should use almost no diode, though they are necessary for certain circuits of the memory (data and program). In my experience, diodes are life-savers and they have been discovered at the end of the 18th century :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;YGREC8 is not pipelined, though it could eventually be implemented with a 4-phases clock (thus requiring buffers at 4 stages in the datapath). It would work nicely with a single clock cycle per instruction on a FPGA (another target).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relay count is dominated by the register set : 64 bits of data to store, with hysteretic latching (1 relay per bit), and 1 relay per port (1 write and 2 reads). That's in the ballpark of 256 relays for the whole register set, though it's more subtle than that (memory is register-mapped). The instructions are straight-forward to decode (no diode rom there ! only some ANDs to detect corner cases) and the execution units are basic so the total number would be around 700 relays, as much as the gates count of the first FPGA tests. I/O will need more and I plan a well-featured debug system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Relays are slow and power-hungry but very fun to use and design with, they force you to think &quot;out of the box&quot; :-D However I doubt a 4-bits architecture would go anywhere, I have found that 8 is the first sweet spot. Early &quot;minicomputers&quot; such as the CDC160, used 6 and 12-bits wide data, but this might not be really convenient...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;nbloqs : I hope you'll share your own design and I'd be happy to add your link to the list I mentioned in the beginning :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;YG/whygee&lt;/p&gt;&#xA;" OwnerUserId="11016" LastActivityDate="2018-10-28T03:05:30.457" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8082" PostTypeId="1" CreationDate="2018-10-28T05:26:50.680" Score="2" ViewCount="268" Body="&lt;p&gt;I have an IBM ThinkCentre 8187KUR desktop system. It has a bay for 5.25-inch floppies but no support in the BIOS. My question is, can I put in a PCI card to support floppy drive access and run the 5.25-inch floppy drive on this system, theoretically bypassing the BIOS?&lt;/p&gt;&#xA;" OwnerUserId="11017" LastEditorUserId="10566" LastEditDate="2019-04-18T09:36:10.490" LastActivityDate="2019-04-18T09:36:10.490" Title="Support for 5.25-inch floppy drives on IBM Thinkcentre 8187 KUR" Tags="&lt;bios&gt;&lt;floppy-drive&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8083" PostTypeId="2" ParentId="8078" CreationDate="2018-10-28T06:57:02.453" Score="0" Body="&lt;p&gt;I do not know of any command or app to do as you ask. Instead I would use Borland Turbo C++ and code it myself... Its been ages I code something for MS-DOS so I am not confident to do it for you. But you're in luck I found something in my C++ archives I coded back in the days and will help I think:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//---------------------------------------------------------------------------&#xA;//--- Includes: -------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;#include &amp;lt;iostream.h&amp;gt;&#xA;//----------------------------------------------------------------------------&#xA;//--- Global data: -----------------------------------------------------------&#xA;//----------------------------------------------------------------------------&#xA;typedef unsigned char byte;&#xA;typedef unsigned int word;&#xA;word far *memw=0x00000000;&#xA;byte far *mem=0x00000000;&#xA;char    key;&#xA;word    keyhi;&#xA;&#xA;word    com;&#xA;//----------------------------------------------------------------------------&#xA;//--- I/O: -------------------------------------------------------------------&#xA;//----------------------------------------------------------------------------&#xA;void inkey()&#xA;    {&#xA;    key=0;&#xA;    keyhi=0;&#xA;    asm {&#xA;        mov ax,256&#xA;        int 0x16&#xA;        jz  esc&#xA;        mov ax,0&#xA;        int 0x16&#xA;        mov key,al&#xA;        mov keyhi,ax&#xA;        }&#xA;esc:&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void inkeyw()&#xA;    {&#xA;    asm {&#xA;        mov ax,0&#xA;        int 0x16&#xA;        mov key,al&#xA;        mov keyhi,ax&#xA;        }&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;byte in(word adr)&#xA;    {&#xA;    byte    x;&#xA;    asm {&#xA;        mov dx,adr&#xA;        in  al,dx&#xA;        mov x,al&#xA;        }&#xA;        return x;&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void out(word adr,byte x)&#xA;    {&#xA;    asm {&#xA;        mov dx,adr&#xA;        mov al,x&#xA;        out dx,al&#xA;        }&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;//--- com: ------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;void com_init(word x)&#xA;    {&#xA;    com=memw[(0x400&amp;gt;&amp;gt;1)+x-1];   // COM IO address from DOS TAB 0000:0400h&#xA;    out(com+1,0);           // no interrupts&#xA;    out(com+3,3);           // 1 start, 8 data, 1 stop, 0 parity&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void com_speed(word f)&#xA;    {&#xA;    word x,h,l;&#xA;    x=115200/f;&#xA;    h=(x &amp;gt;&amp;gt; 8) &amp;amp; 255;&#xA;    l=x &amp;amp; 255;&#xA;    x=in(com+3) &amp;amp; 127;&#xA;    out(com+3,x+128);&#xA;    out(com+0,l);&#xA;    out(com+3,x+128);&#xA;    out(com+1,h);&#xA;    out(com+3,x);&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;byte com_in()&#xA;    {&#xA;    byte s;&#xA;//  do s=in(com+5); while ((s&amp;amp;1)!=1);&#xA;    s=in(com+0);&#xA;    return s;&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void com_out(byte d)&#xA;    {&#xA;    byte s;&#xA;    do s=in(com+5); while ((s&amp;amp;32)!=32);&#xA;    out(com+0,d);&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;//--- Subroutines: ----------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;void couthex(word x)&#xA;    {&#xA;    word    a,i;&#xA;    char    c;&#xA;&#xA;    for (i=0;i&amp;lt;4;i++)&#xA;        {&#xA;        a=(x &amp;gt;&amp;gt; 12) &amp;amp; 15;&#xA;        x=x &amp;lt;&amp;lt; 4;&#xA;        if (a&amp;lt;10) c=a+'0';&#xA;        if (a&amp;gt;=10) c=a-10+'A';&#xA;        cout &amp;lt;&amp;lt; c;&#xA;        }&#xA;    cout &amp;lt;&amp;lt; 'h';&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;//--- Main: -----------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;void main()&#xA;    {&#xA;    asm {&#xA;        mov ax,3&#xA;        int 0x10&#xA;        }&#xA;&#xA;    char    x=0;&#xA;&#xA;    com_init(1);&#xA;    com_speed(9600);        // set to speed used by source device&#xA;    cout &amp;lt;&amp;lt; &quot;COM adress = &quot;; couthex(com);  cout &amp;lt;&amp;lt; endl;&#xA;&#xA;    do      {&#xA;        inkey();&#xA;        x=com_in(); // this reads 1 BYTE from COM&#xA;        couthex(x); // this write it as hex on screen&#xA;        cout &amp;lt;&amp;lt; endl;&#xA;        } while (keyhi==0);&#xA;&#xA;&#xA;    cout &amp;lt;&amp;lt; &quot;COM adress = &quot;; couthex(com);  cout &amp;lt;&amp;lt; endl;&#xA;    inkeyw();&#xA;&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;//--- End. ------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So you just modify the main loop to write the BYTE &lt;code&gt;x&lt;/code&gt; as a character and also store to some file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure if on such old MS-DOS version is the configuration table in the same place so you might set the COM IO address manually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if you do not have turbo C++ just google it its still being used in some schools so it should not be any problem finding it. Here first link I found by google just now:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://winworldpc.com/product/turbo-c/3x&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turbo C++&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;IIRC I used 3.2.2.0 version on MS-DOS 6.22. As you want older MS-DOS then older version of C may be required too...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;File access is also a common practice assignment so there should be no problem finding any examples of it but just in case:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//============================================================================&#xA;//=== includes: ==============================================================&#xA;//============================================================================&#xA;#include &amp;lt;iostream.h&amp;gt;&#xA;#include &amp;lt;fstream.h&amp;gt;&#xA;#include &amp;lt;ctype.h&amp;gt;&#xA;//============================================================================&#xA;//=== main: ==================================================================&#xA;//============================================================================&#xA;void main()&#xA;    {&#xA;    // IIRC this just clears screen into 80x25 text mode&#xA;    asm {&#xA;        mov ax,3&#xA;        int 16&#xA;        }&#xA;&#xA;    ofstream out;&#xA;    out.open(&quot;some_file_name.txt&quot;,ios::out);&#xA;    out &amp;lt;&amp;lt; &quot;some text&quot; &amp;lt;&amp;lt; endl; // endl adds CR,LF&#xA;    out.close();&#xA;&#xA;    // IIRC this just clears screen into 80x25 text mode and clears keyboard buffer&#xA;    asm {&#xA;        mov ax,0&#xA;        int 0x16&#xA;        mov ax,3&#xA;        int 16&#xA;        }&#xA;    }&#xA;//============================================================================&#xA;//=== end. ===================================================================&#xA;//============================================================================&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-10-28T07:15:16.897" LastActivityDate="2018-10-28T07:15:16.897" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8084" PostTypeId="2" ParentId="2811" CreationDate="2018-10-28T07:29:35.733" Score="2" Body="&lt;p&gt;I know this is a bit of an old thread, but just wanted to note that the design also allowed for expedited repairs should a consumer so request - the defective board would be swapped (or the motherboard if it were the culprit) and the unit returned rather rapidly. The defective board would then be refurbed for a future repair.&lt;/p&gt;&#xA;" OwnerUserId="11019" LastActivityDate="2018-10-28T07:29:35.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8085" PostTypeId="1" CreationDate="2018-10-28T17:54:30.523" Score="9" ViewCount="540" Body="&lt;p&gt;While revisiting this question: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2111/seeking-details-relating-to-amiga-3000-serial-numbers&quot;&gt;Seeking details relating to Amiga 3000 serial numbers&lt;/a&gt; I began to wonder how many actual Amiga 3000's were produced by Commodore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect (like most production numbers) this isn't easily answered, and is probably further complicated by various configurations (16/25Mhz) and additional models like the A3000T and A3000UX.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any actual data, estimates, or wild guesses?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="79" LastEditDate="2019-04-07T22:08:56.543" LastActivityDate="2019-04-07T22:08:56.543" Title="How many Amiga 3000's were produced?" Tags="&lt;history&gt;&lt;amiga&gt;&lt;commodore&gt;&lt;amiga-3000&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8086" PostTypeId="2" ParentId="7361" CreationDate="2018-10-29T03:22:32.683" Score="0" Body="&lt;p&gt;I am sorry if this message goes here (it doesn't answer your question directly) but I am totally new here and I might have misconfigured something. I have now registered this (apparently different) account. You can downvote or I can erase later :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We seem to be aiming in the same direction (technology-wise). The YGREC8 in SPDT version is aimed at showing kids (of all ages ;-) ) how computers work &lt;em&gt;without using any software&lt;/em&gt;, and so they can get a &quot;physical feeling&quot; of what things mean. They'll love the clicking and the unusual aspect but I aim first at a VHDL/FPGA version to debug the ISA then a relay version for a large version (more expensive so I don't want to respin boards all the time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also work on the User Interface with the most convenient inputs and outputs that 50s technology affords. I don't want people to be scared of binary codes, so instead of toggle switches and blinking bulbs, I chose Numitron displays and rotary encoders. Look at &lt;a href=&quot;https://www.youtube.com/watch?v=TT664Mcjypk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=TT664Mcjypk&lt;/a&gt; for a short presentation of the display modules. Maybe you'll want to use them for your own system (despite the ROM made of germanium diodes, which were quite common in the 40s, for example in radar receivers on both sides). Numitrons look really cool !&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if all my technical choices interest you (I don't go the the absolute minimum possible number of relays because programming would be a nightmare, like with the PIC16F family, and that would scare people) but I'd be more than happy to discuss with you and throw ideas at each others ! For example we could discuss the merits of the clock sources, either mains-derived (stable and strong, through a transformer, but often requires a frequency divider, which is another interesting type of relay circuit) or relay-based (I have played with relay-based ring oscillators).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where do you intend to share your design ?&lt;/p&gt;&#xA;" OwnerUserId="11020" LastEditorUserId="276" LastEditDate="2018-10-29T12:40:47.723" LastActivityDate="2018-10-29T12:40:47.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8087" PostTypeId="1" AcceptedAnswerId="8088" CreationDate="2018-10-29T10:22:54.583" Score="16" ViewCount="2346" Body="&lt;p&gt;An Amiga 1200 exposes the entire CPU bus on the expansion port, so that an accelerator only needs to assert &lt;code&gt;BR&lt;/code&gt; which causes the onboard CPU to stop all computation and electrically disconnect from the bus entirely, and then wait for &lt;code&gt;BG&lt;/code&gt; which should mean that the CPU on the accelerator is ready to consider itself the Master Of The Bus. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And in the case of the Commodore 64, the VIC-II asserts the &lt;code&gt;BA&lt;/code&gt; so that it can completely take over the bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is, I don't see anything like &lt;code&gt;BA&lt;/code&gt;, &lt;code&gt;BR&lt;/code&gt; or &lt;code&gt;BG&lt;/code&gt; on the &lt;a href=&quot;https://allpinouts.org/pinouts/connectors/buses/apple-ii-slot/&quot; rel=&quot;noreferrer&quot;&gt;Apple II&lt;/a&gt; slot. So what's unclear to me is, when a CPU is added to the Apple II, how it takes over the control. I suppose it would be problematic if the 6502 was still running. Take the &lt;a href=&quot;https://en.wikipedia.org/wiki/Z-80_SoftCard&quot; rel=&quot;noreferrer&quot;&gt;Z-80 Softcard&lt;/a&gt;. It's got a CPU obviously, and a handful of TTL for glue logic. But it does not have any RAM. It just uses the same RAM which is already installed in the computer. This means that if some application is running on the Z80, its state might get clobbered by whatever the 6502 is doing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR how do CPU cards work on the Apple II if there's no way to take the bus over?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-10-29T14:38:24.040" LastActivityDate="2018-10-29T16:56:05.983" Title="How do accelerators and CPU cards work on the Apple II?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;cpu&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8088" PostTypeId="2" ParentId="8087" CreationDate="2018-10-29T11:52:33.737" Score="24" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;how do CPU cards work on the Apple II if there's no way to take the bus over?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's what &lt;code&gt;/DMA&lt;/code&gt; (pin 22) is good for. It halts the CPU and tristates the bus. Now any card can take over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike its daddy, the 6800 (and many other CPUs as well), the 6502 can be halted in at any clock state by pulling &lt;code&gt;/RDY&lt;/code&gt;. It will extend the actual cycle (*1). This doesn't tristate the bus or anything else, and is primarily meant to allow singlestepping and support slow memory, but can do DMA as well. Not very sophisticated, but it does the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Apple II Woz added a bunch of buffers to tristate the address bus when needed. When DMA gets pulled, the CPU will get its &lt;code&gt;/RDY&lt;/code&gt; pulled and the buffers will tristate the address/data lines.`&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Video update and RAM refresh will continue as before - &lt;strong&gt;The Card May Only Access the Bus During &lt;code&gt;Phi0&lt;/code&gt;&lt;/strong&gt;, even with DMA pulled continuous, as video and refresh logic will access the RAM during &lt;code&gt;Phi1&lt;/code&gt; (*2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there are Apples fited with a NMOS 6502 (*3). Due its dynamic nature (*4) it needs to do some workout to keep the register content intact. In general, one successful cycle every 10 cycles will do it (*5, 6). Each card needs a appropriate solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be some counter halting the card every 4th, 8th or 16th cycle and hand one cycle to the 6502, or maybe there are times where the card's CPU doesn't need the bus, which may be always handed over to the 6502 (*7)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 card is doing the later, as the CPU needs an internal cycle after each opcode fetch (signaled by &lt;code&gt;M1&lt;/code&gt;), where no bus activity happens. relinquishing that to the 6502 makes it happen often enough (*8) without throttling the Z80 at all.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Apple has published a detailed information about DMA handling in their &lt;a href=&quot;http://www.apple-iigs.info/doc/fichiers/Apple%20IIe%20Technical%20Notes.pdf&quot; rel=&quot;noreferrer&quot;&gt;Technical Note&lt;/a&gt; Nr.2 for the Apple IIe. While there are some differences with the Apple II, and even more with the IIgs, it does give a good base to understand the workings without traceing schematics.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, it shouldn't be pulled within a write cycle, as the CPU will not repeat such. Then again, when pulled during &lt;code&gt;Phi1&lt;/code&gt;, it will always stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - So no, there is no chance to access the RAM at 2 MHz from an I/O card. Would have been nice, wouldn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - so if the card needs only to work with a CMOS like in an enhanced IIe, it will be possible to use all cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - The registers are basically dynamic memory and need refresh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - It's said that a MOS/Rockwell chip can do 10-17 cycles without, while a Synertec is guaranteed to do 40.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - yes, this means the 6502 is active running at maybe 5-10% speed. So here's your chance for real dual CPU action.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - If these holes are common, the 6502 may get even more usable CPU time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - Well, going by the books there are some instructions (most notably all modifying with index register + displacement addressing like &lt;code&gt;INC&lt;/code&gt; or &lt;code&gt;RES&lt;/code&gt;) which need 23 cycles. Since the Z80 runs at double the 6502 clock (*9), this ends up being 12 cycles, thus still on the good side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*9 - Well, it's &lt;strong&gt;way&lt;/strong&gt; more complicated than that, but also a great example of clever hardware design. The Z80 runs from the Apples 7 MHz clock, divided by two but only during &lt;code&gt;Phi1&lt;/code&gt; which will result in a full and a half cycle in the first 6/7th of &lt;code&gt;Phi1&lt;/code&gt; plus the other half of the second stretching over the rest of &lt;code&gt;Phi1&lt;/code&gt;and all of &lt;code&gt;Phi0&lt;/code&gt;. Effective clock speed is 2.04 MHz, with a non symetric clock (*10). Some instructions are extended by one of the 'short' cycles to synchronize for memory access, making it a little less than 2 MHz in average. Not much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*10 - Needing a 3.5 MHz Z80 to do so.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-29T16:56:05.983" LastActivityDate="2018-10-29T16:56:05.983" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="8089" PostTypeId="1" AcceptedAnswerId="8090" CreationDate="2018-10-29T16:53:01.627" Score="4" ViewCount="626" Body="&lt;p&gt;So recently, I've been playing &lt;a href=&quot;https://www.youtube.com/watch?v=i9IOnosRPvU&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gyromite&lt;/a&gt; (which sucks), with &lt;a href=&quot;https://en.wikipedia.org/wiki/R.O.B.&quot; rel=&quot;nofollow noreferrer&quot;&gt;R.O.B.&lt;/a&gt; (which also sucks), and I noticed that he comes with sunglasses that he doesn't actually need to work properly. This was the case when tested on several different monitors, as well as brightnesses. Where they just added in to look cool?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;R.O.B. w/out sunglasses (I do not own this image):&#xA;&lt;img src=&quot;https://scontent-atl3-1.cdninstagram.com/vp/592af0588126570f8534a92215f80221/5C4805CF/t51.2885-15/e35/41279383_687614758271855_6140206145088142850_n.jpg&quot; alt=&quot;R.O.B. w/out sunglasses&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;R.O.B.'s removable sunglasses (I do not own this image):&#xA;&lt;img src=&quot;https://cld.goliath.com/image/upload/t_cn,f_auto,q_auto,$w_800/go/2018/05/712YEbD0ubL._AC_SL1500_-730x336.jpg&quot; alt=&quot;R.O.B.&amp;#39;s sunglasses&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="6659" LastEditDate="2018-10-29T18:47:41.837" LastActivityDate="2018-11-01T15:10:07.503" Title="Why does R.O.B. wear &quot;glasses&quot;?" Tags="&lt;nes&gt;&lt;nintendo&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8090" PostTypeId="2" ParentId="8089" CreationDate="2018-10-29T17:10:07.853" Score="7" Body="&lt;p&gt;If this is about the filters supplied with the physical &lt;a href=&quot;https://en.wikipedia.org/wiki/R.O.B.&quot; rel=&quot;nofollow noreferrer&quot;&gt;R.O.B. Unit&lt;/a&gt;, that came with the US only Deluxe &lt;a href=&quot;https://en.wikipedia.org/wiki/Nintendo_Entertainment_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;NES&lt;/a&gt; set, then it was meant for use with overly bright TV settings. Something that was found necessary after tests had been made in department stores with their often very bright screen settings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most important: It looks cool :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="2126" LastEditDate="2018-11-01T15:10:07.503" LastActivityDate="2018-11-01T15:10:07.503" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8091" PostTypeId="2" ParentId="7717" CreationDate="2018-10-29T17:49:05.020" Score="4" Body="&lt;p&gt;This is not the elegant solution you are requesting, but it will solve the problem:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Buy a Tripp-Lite B042 series KVM switch.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Specifications: &lt;a href=&quot;https://assets.tripplite.com/product-pdfs/en/b042008.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://assets.tripplite.com/product-pdfs/en/b042008.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This has two USB inputs for a keyboard and mouse, and outputs to USB or PS/2. There is an adapter that connects to the USB output connector to make it work as a PS/2 keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also works the other way, accepting PS/2 input to output USB keyboard/mouse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The downside to this is that the KVM is a huge rackmount black box and you now have a pile of additional wire to manage.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2018-10-29T17:49:05.020" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8092" PostTypeId="1" AcceptedAnswerId="11748" CreationDate="2018-10-29T20:05:32.897" Score="11" ViewCount="763" Body="&lt;p&gt;I recently acquired a Commodore 128. It worked fine for about an hour, in both C64 and C128 mode, at the exception of some coloured bars, before displaying garbage and not booting anymore into any mode, displaying very faint dark blue columns.&lt;br&gt;&#xA;The failure event wass initiated when I took the fully-assembled computer off the desk and on my lap.&#xA;Here is a picture of the coloured poles, please pardon the angle, I cannot really take another one now that the unit plays dead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UbviO.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UbviO.jpg&quot; alt=&quot;The once working state of the computer&quot;&gt;&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The garbage was dynamic in some rows, and had the habitual borders.&lt;br&gt;&#xA;The unit will not boot up in any mode. Typing &lt;code&gt;SOUND&lt;/code&gt; commands into BASIC does not seem to have an effect, and &lt;code&gt;LOAD&lt;/code&gt; does not seem to switch the motor supply either.&#xA; The supply rails seem nominal, at &lt;s&gt;4.6&lt;/s&gt; 4.8 (kranked up my lab PSU a bit to compensate wire loss and enter +/- 5% tolerance) and 12.4 respectively.&#xA;&lt;strong&gt;The 5 volts rail measures 175 ohms to ground in both directions.&lt;/strong&gt; Volt drop mode displays 200 - 300 mV in both directions as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chips' heating conforms to &lt;a href=&quot;https://www.google.fr/url?sa=t&amp;amp;source=web&amp;amp;rct=j&amp;amp;url=http://mirror.thelifeofkenneth.com/sites/remotecpu.com/Commodore/Reference%2520Material/Books/C128%2520General%2520Books/Troubleshooting%2520And%2520Repairing%2520Your%2520Commodore%2520128.pdf&amp;amp;ved=2ahUKEwiDwYCM863eAhVIhxoKHQBpB1QQFjAOegQIAxAB&amp;amp;usg=AOvVaw3f47TP0U9aO2mAN7darfaE&quot; rel=&quot;noreferrer&quot;&gt;this troubleshooting guide&lt;/a&gt;&#xA;page 37 (according to the internals of the book, not of the PDF) except at three oddities :&lt;br&gt;&#xA;- The character ROM is only &quot;weakly&quot; warm.&lt;br&gt;&#xA;- ROM4 and ROM1 are somewhat warmer than the other ROMs.&lt;br&gt;&#xA;- The MMU is not very warm either.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note : &lt;em&gt;the VIC has not been tested yet, as it is under the video shield which I have not yet taken off, but the video shield itself gets warm, which indicates that the VIC is hot.&lt;/em&gt;&lt;br&gt;&#xA;Removing ROM4, for I believe that it is not needed for a basic boot (at least some picture) does not fix the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the unit worked, the datasette port did not, but that may be another problem.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect the 8701 clock generator chip might be at fault, according to &lt;a href=&quot;ftp://www.zimmers.net/pub/cbm/documents/repair/troubleshooting-c128.txt&quot; rel=&quot;noreferrer&quot;&gt;this source&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;U28&lt;br&gt;&#xA;  251527-09 (8701) Clock gen. (Master oscillator)&lt;br&gt;&#xA;      Dead chip: no bootup in any mode.&lt;br&gt;&#xA;  Partial failure: diagonal lines on&#xA;  monitor or TV (horizontal sync bad), no color in 40 column mode, or&#xA;  &quot;barber pole&quot; colors. Check also crystal Y2&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I however do not know if those lines could be considered &quot;barber poles&quot;.&#xA;Please note that all outputs shown are from the A/V port, as I am not able to use the RF or RGBI outputs.&#xA;The main board (excepted from the video and modulator boxes) can be seen here : &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.imgur.com/RM53tjA.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/RM53tjA.jpg&quot; alt=&quot;Picture of the motherboard&quot;&gt;&lt;/a&gt; &#xA;&lt;a href=&quot;https://i.imgur.com/VhU1Frn.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/VhU1Frn.jpg&quot; alt=&quot;Back of the motherboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I would like to avoid tampering with the unit any more than I need to, and as I do not have a lot of experience with it :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What could explain the given symptoms ?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="7056" LastEditorUserId="7056" LastEditDate="2018-10-30T14:42:20.007" LastActivityDate="2019-09-21T07:59:44.723" Title="Possible cause for C128 A/V output containing faintly coloured columns and failing shortly after?" Tags="&lt;video&gt;&lt;commodore&gt;&lt;repair&gt;&lt;commodore-128&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8093" PostTypeId="2" ParentId="7262" CreationDate="2018-10-29T20:19:00.497" Score="6" Body="&lt;p&gt;I came across this thread while doing the same type of image search (to ID the panel in &lt;em&gt;Wrath of Khan&lt;/em&gt;). The &lt;em&gt;Serenity&lt;/em&gt; panel is not the same one as the &lt;em&gt;Wrath of Khan&lt;/em&gt; &quot;deflector grid&quot; panel the &lt;em&gt;Star Trek&lt;/em&gt; screen grabs are from. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;Serenity&lt;/em&gt; one appears to be made out of several different panels. One of which was from the H6180 CPU Maintenance panel (third full-size panel down in &lt;a href=&quot;http://ana-3.lcs.mit.edu/~jnc/tech/multics/jpg/LCMMulticsCPUPanel.jpg&quot; rel=&quot;noreferrer&quot;&gt;this image&lt;/a&gt;) which matches the black vertical &quot;data scroll&quot; wheel on the left of the panel and the upper and lower light rows separated by the middle &quot;window&quot; between the to bit-register light rows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't seem to run down the panel below it in the &lt;em&gt;Serenity&lt;/em&gt; shot (the one with he black knob on the left).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have had no luck not he &lt;em&gt;Star Trek&lt;/em&gt; panel. It is maddeningly close to the Honeywell 6000 series front panels, but none of them match perfectly. I was thinking it might be the GE version before being rebadged by Honeywell, but can't seem to run down any good front panel images to compare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is frustrating because I am 99% sure that this has to be a found item and not a built prop.&lt;/p&gt;&#xA;" OwnerUserId="11025" LastEditorUserId="11025" LastEditDate="2018-10-29T20:24:41.570" LastActivityDate="2018-10-29T20:24:41.570" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8094" PostTypeId="2" ParentId="5911" CreationDate="2018-10-29T21:45:48.157" Score="16" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The photographs I found seem to be evenly divided between showing it as a compact unit that looks maybe one foot high&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It is most likely, based on sales numbers, that you're describing a PDP-8/e or PDP-8/I. What you're seeing is just the front panel. The PDP-8/e front panel is &lt;a href=&quot;http://www.pdp8online.com/miscdocs/pdp8e-sales.pdf&quot; rel=&quot;noreferrer&quot;&gt;10.5 inches high&lt;/a&gt; (PDF!), or 6 &lt;a href=&quot;https://en.wikipedia.org/wiki/Rack_unit&quot; rel=&quot;noreferrer&quot;&gt;rack units&lt;/a&gt;. The PDP-8/I front panel is a bit shorter, 5U high, or 8.75 inches. Another way to come to these values is by inference from the fact that DEC used standard 19 inch wide racks, that being the width of a panel mounted across the front of the rack. You can get an accurate aspect ratio from an undistorted photograph, which lets you determine panel height.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The front panel on the earliest PDP-8s was a separate unit, only a few inches deep, since it's only the switches, indicators, enclosure, and direct support electronics.¹ Indeed, some PDP-8s offered a choice of different front panels, such as a version with very few switches and indicators for embedded applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early rack-mounted PDP-8s were made of many separate components, interconnected with ribbon cables and wiring harnesses, so the layout within the rack cabinet was flexible. The front panel was connected to the CPU proper and the power supply in this way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's get concrete and focus on the PDP-8/I, the model I'm most familiar with.² Here's a dimension diagram from the &lt;a href=&quot;http://dustyoldcomputers.com/pdp-common/reference/drawings/cpus/pdp8i.html&quot; rel=&quot;noreferrer&quot;&gt;PDP-8/I Maintenance Manual, volume 1&lt;/a&gt;, page 2-2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q5JMU.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q5JMU.png&quot; alt=&quot;PDP-8/I rack layout diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;console&quot; in the diagram's upper left corner is what I've been calling the &quot;front panel,&quot; and it's often all that's shown when you search for a picture of a PDP-8/I, even though it's really only one small-ish part of the whole computer. It's the sexy bit.³&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see in the diagram, some of the space left behind the front panel is taken up by the top end of the CPU proper, which was roughly 2 feet high by two feet deep and took up about half the rack width. The other half of that space was taken by the power supply.⁴ You can see that layout in &lt;a href=&quot;http://www.ricomputermuseum.org/Home/equipment/pdp-8-i&quot; rel=&quot;noreferrer&quot;&gt;these photographs&lt;/a&gt;. The diagram doesn't show the core memory as a separate component, since it was mounted within the processor chassis.⁵&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Over their two decade span of development (1965-1985) PDP-8s moved from discrete transistors to ICs, then to denser and denser ICs, so they became smaller and more power-efficient. By the time of the &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-8/E&quot; rel=&quot;noreferrer&quot;&gt;PDP-8/e&lt;/a&gt; (1970), the CPU, core memory, power supply, and expansion slots were entirely behind the front panel. Its close relatives the PDP-8/f and 8/m used shallower chassis, but were the same basic idea.⁶ These systems were only self-contained within that 6U space if your application didn't require any sort of durable storage or I/O peripherals; add that in, and you're still talking about taking over a large portion of a full-size rack, at least.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The front panel would usually be mounted about halfway up the rack, since that's a convenient height for a seated person, who would normally sit at a &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletype_Model_33&quot; rel=&quot;noreferrer&quot;&gt;Teletype Model 33 ASR&lt;/a&gt;, the standard terminal for DEC computers of the time. Since this is an essential component in many PDP-8 systems, it should also be considered part of the size of the computer: it's roughly the same width and depth as a rack cabinet, and about half the height. (&lt;a href=&quot;https://www.pdp8.net/asr33/asr33.shtml&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whereas the CPU proper is normally mounted below the front panel on the PDP-8/I and behind it on the PDP-8/e, it was mounted above the front panel on the original PDP-8. The original PDP-8 front panel + CPU + core + power supply assembly was about the same size as the PDP-8/I discussed above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rack cabinets usually used for PDP-8s were 5 or 6 feet high. The rest of the space in the CPU rack would be used for peripherals: &lt;a href=&quot;https://en.wikipedia.org/wiki/DECtape&quot; rel=&quot;noreferrer&quot;&gt;TU56 DECtape drives&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/RK05&quot; rel=&quot;noreferrer&quot;&gt;RK05 removable platter hard disks&lt;/a&gt;, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was not uncommon for a PDP-8 computer of the era to require a second rack for more peripherals: A/D conversion hardware, paper tape punch/reader units, more tape and disk storage, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually, the PDP-8 escaped the rack with the &lt;a href=&quot;https://en.wikipedia.org/wiki/DECmate&quot; rel=&quot;noreferrer&quot;&gt;DECmate series&lt;/a&gt;, which packed a single-IC PDP-8 CPU, memory and a dual floppy drive into a large video terminal cabinet, not unlike early consumer-focused microcomputers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Digressions&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The front panel electronics consisted of simple circuits like lamp drivers so that the power to drive the lamp didn't have to come from the CPU, only the low-current signal to turn it on.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I'm the current maintainer of the &lt;a href=&quot;https://tangentsoft.com/pidp8i/&quot; rel=&quot;noreferrer&quot;&gt;PiDP-8/I software project&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;That's one reason &lt;a href=&quot;http://obsolescence.wixsite.com/obsolescence/pidp-8&quot; rel=&quot;noreferrer&quot;&gt;the PiDP-8/I DIY project&lt;/a&gt; is basically just the front panel. Cloning the other parts hidden away by the rack isn't of general interest.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;According to the same page in the manual where I found the above rack layout diagram, the power supply for a PDP-8/I is rated to provide about 1.7&amp;nbsp;kW of power, but &lt;a href=&quot;http://www.pdp8.net/pdp8i/pics/pdp8i_powersupply.shtml?small&quot; rel=&quot;noreferrer&quot;&gt;another source&lt;/a&gt; says it only provides 380&amp;nbsp;W. I assume the latter is a measurement of steady-state current draw, and that the computer could surge into the kW range in some conditions. Other sources I've read say that a complete PDP-8 computer would draw roughly 1&amp;nbsp;kW, depending on the type and number of peripherals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may be reading this on a computer with a several hundred watt power supply which is much smaller than all of this and may be wondering at the discrepancy. There are many factors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;These early PDP-8 power supplies are inefficient &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_regulator&quot; rel=&quot;noreferrer&quot;&gt;linear-regulated&lt;/a&gt; power supplies rather than the &lt;a href=&quot;https://en.wikipedia.org/wiki/Switched-mode_power_supply&quot; rel=&quot;noreferrer&quot;&gt;switching-regulated&lt;/a&gt; power supplies that became universal for computers after this early PDP-8 era. They throw off more heat per unit power delivered to the point of load, so they need bigger heat sinks and more space for cooling air to circulate.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Modern power supplies are much more densely-packed than the DEC 704A.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;These PDP-8 power supplies relied more on big transformers and big capacitors to provide clean DC output power than on clever electronics.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;They were designed with discrete transistors rather than integrated circuit regulators, which were &lt;a href=&quot;https://electronics.stackexchange.com/a/192289/2523&quot;&gt;brand new technology&lt;/a&gt; at the time. IC regulators weren't capable of delivering the loads required by such computers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In the PDP-8/I, the first field (4&amp;nbsp;kWords) of core memory is mounted close to the CPU proper because the timing of the CPU was based on the speed of core memory access. Indeed, the early PDP-8 CPUs weren't rated in MHz, but in core memory cycle times, with instruction times given as the number of core cycles they took. Memory reference instructions took more processing time than purely in-CPU operations. Core memory on a PDP-8 was like L1 cache in a modern CPU: tightly integrated and the fundamental limit on CPU processing speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-8/I then allowed a second 4&amp;nbsp;kWord field of core to be mounted on the CPU backplane along with a memory controller, the assembly being called the MC8I. This would then control rack-mounted MM8I core memory modules, each adding another 4&amp;nbsp;kWord field, for a maximum of 8 fields total, or 32&amp;nbsp;kWords.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above details differ across the 20-year commercial history of the PDP-8. For example, the later PDP-8/a had the MS8C option which provided 16&amp;nbsp;kWords of solid-state static RAM in the form of an expansion bus card. The PDP-8/a was also the first to provide a way to get past the 32&amp;nbsp;kWord memory limit of all earlier PDP-8 models.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The PDP-8/f and 8/m were the first PDP-8s based on a switching power supply, rather than the linear-regulated supply of the PDP-8/e and earlier.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11024" LastEditorUserId="11024" LastEditDate="2019-02-17T00:53:39.693" LastActivityDate="2019-02-17T00:53:39.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8095" PostTypeId="1" AcceptedAnswerId="9063" CreationDate="2018-10-29T21:52:33.970" Score="7" ViewCount="701" Body="&lt;p&gt;When an ALU performs a floating point division operation using the &lt;a href=&quot;https://en.wikipedia.org/wiki/Division_algorithm#Non-restoring_division&quot; rel=&quot;noreferrer&quot;&gt;non-restoring&lt;/a&gt; or the &lt;a href=&quot;https://en.wikipedia.org/wiki/Division_algorithm#SRT_division&quot; rel=&quot;noreferrer&quot;&gt;SRT algorithm&lt;/a&gt;, it maintains the current value of the &quot;remainder&quot; (in quotes, because it is not a true non-negative remainder) in a scratch register. After the operation, the quotient is presented in a user-visible location, and the contents of the scratch register are of no consequence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if a user-visible register is used as the scratch, specifying its contents in all cases is too bothersome. For example, in the BESM-6, the instruction set manual leaves the contents of the accumulator extension register, normally holding the least significant bits of the mantissa after the FP additions or multiplications, unspecified after a division operation (another source explicitly says that it is undefined). I have not heard of attempts to reverse-engineer the value of that register after a division operation and to use it to speed up computation of the remainder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A narrow-scope question: Is it possible to use the scratch register of a non-restoring or SRT division to figure out the remainder?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My main question is, has there been another case of an unspecified data register contents after any arithmetic operation in another CPU architecture and were there any attempts to reverse-engineer them for a good use?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-11-02T21:55:53.217" LastActivityDate="2019-02-09T18:55:24.420" Title="Which CPUs had instructions leaving data registers in an unspecified state?" Tags="&lt;instruction-set&gt;&lt;alu&gt;&lt;besm-6&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8096" PostTypeId="2" ParentId="8095" CreationDate="2018-10-30T06:53:44.880" Score="5" Body="&lt;p&gt;One example are the two &lt;a href=&quot;http://www.righto.com/2013/02/looking-at-silicon-to-understanding.html&quot; rel=&quot;noreferrer&quot;&gt;undocumented 8085 flags&lt;/a&gt; that can be found by reverse-engineering the silicon (well, it's part of a register, not a complete register). They have uses for signed overflow in arithmetic operations and signed comparison. There are actually a few undocumented opcodes that make use of at least the K flag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They were put in deliberately (so it's not a chance effect like in the undocumented opcodes for the 6502 - one could argue that the contents of the BESM-6 scratch register would also be a &quot;chance effect&quot;, though a deliberate one that depends on the internal algorithm), but not documented for &quot;political&quot; reasons.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-10-30T06:53:44.880" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8097" PostTypeId="1" AcceptedAnswerId="8098" CreationDate="2018-10-30T16:26:56.310" Score="9" ViewCount="1745" Body="&lt;p&gt;Out of all the operating systems for the 80286 processor I found, only two make use of the protected mode's ability to load more than one segment for text and one for data. These are MS-DOS (through various DOS extenders) and Windows.  All other operating systems I checked would only give one text segment and one data segment to each process and call it a day.  Were there any other operating systems that made full use of protected mode segmentation on the 80286?&lt;/p&gt;&#xA;" OwnerUserId="24" LastEditorUserId="4813" LastEditDate="2018-10-30T21:24:33.503" LastActivityDate="2018-10-30T22:05:10.530" Title="Which operating systems for 80286 computers allowed a process to use more than 128k data?" Tags="&lt;operating-system&gt;&lt;80286&gt;&lt;segmentation&gt;" AnswerCount="1" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8098" PostTypeId="2" ParentId="8097" CreationDate="2018-10-30T16:50:18.913" Score="19" Body="&lt;p&gt;OS/2 supported “huge memory” on 286s. The &lt;a href=&quot;https://en.wikipedia.org/wiki/New_Executable&quot; rel=&quot;noreferrer&quot;&gt;New Executable&lt;/a&gt; format used for 16-bit OS/2 executables (and 16-bit Windows executables) supports multiple segments. At runtime, using the &lt;code&gt;DosAllocHuge&lt;/code&gt; function, programs could allocate more than 64KiB of memory at a time, and would get a sequence of segment selectors which could be used to easily access all the allocated memory. The process is detailed in section 9.2.2 of Gordon Letwin’s &lt;em&gt;Inside OS/2&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Xenix 286 also supported multiple text and data segments; processes with multiple segments were called “large model processes” (the same terminology as was used with C compilers under DOS). See &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/intel/system3xx/xenix-286/174385-001_Overview_of_the_XENIX_286_Operating_System_Nov84.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Overview of the Xenix 286 Operating System&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/FlexOS&quot; rel=&quot;noreferrer&quot;&gt;FlexOS&lt;/a&gt; 286 (and perhaps Concurrent DOS 286) also allowed programs to allocate multiple segments. &lt;code&gt;malloc&lt;/code&gt; could only allocate up to 64KiB at once, but programs could call it multiple times to allocate more than 64KiB in total in multiple segments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspected Coherent 3 might have supported multiple segments, but it turns out that’s not the case, at least according to &lt;a href=&quot;https://www.tuhs.org//Archive/Distributions/Other/Coherent/documents/CohFAQ.v3.2&quot; rel=&quot;noreferrer&quot;&gt;the Coherent 3.2 FAQ&lt;/a&gt; (question 7).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-10-30T22:05:10.530" LastActivityDate="2018-10-30T22:05:10.530" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="8099" PostTypeId="1" AcceptedAnswerId="8100" CreationDate="2018-10-31T09:46:21.760" Score="6" ViewCount="530" Body="&lt;p&gt;A number of a different computer systems use a tape encoding based on either the Kansas City or CUTS standards.  There's a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kansas_City_standard&quot; rel=&quot;noreferrer&quot;&gt;very brief overview on Wikipedia&lt;/a&gt;, but it's not clear what the difference between these two formats is.  The Kansas City 300bps format is defined in the Wikipedia article, but it doesn't give useful descriptions of how the other formats mentioned varied.  So what were these formats?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I've seen indications that there was more to the format than just the frequency selection / start / stop / parity bit choices that are discussed on the Wikipedia page -- what was the block format used?  Was there a common format for headers that could be used to identify data types / names / etc?&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-10-31T23:36:49.713" Title="What's the difference between Kansas City tape standard and CUTS?" Tags="&lt;cassette-tape&gt;&lt;kansas-city&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8100" PostTypeId="2" ParentId="8099" CreationDate="2018-10-31T12:14:46.367" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What's the difference between Kansas City tape standard and CUTS?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;C&lt;/strong&gt;omputer &lt;strong&gt;U&lt;/strong&gt;ser &lt;strong&gt;T&lt;/strong&gt;ape &lt;strong&gt;S&lt;/strong&gt;ystem (not Standard) was what Mr. Felsenstein and Mr. Marsh of Processor Technology developed for their &lt;a href=&quot;https://en.wikipedia.org/wiki/Sol-20&quot; rel=&quot;nofollow noreferrer&quot;&gt;SOL systems&lt;/a&gt; (*1) and proposed as future standard at the Byte sponsored meeting in Kansas City. It got agreed on as common format regarding encoding and hardware needs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;CUTS is more or less a synonym for KCS. Since it also was associated with Processor Technology, the term KCS was preferred by other manufacturers, much the same way they called it S100 Bus instead of Altair-Bus. Also, Byte as major proponent for the standard only used the term KCS, thus making it the more popular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CUTS, as delivered by Processor Technology, also includes a 1200 Bd mode, which was not adopted in KCS (but recognized), as well as more specific definitions about data formats carried by this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mr. Marsh wrote, right after the meeting, a nice article called &quot;&lt;a href=&quot;https://www.sol20.org/articles/img/CUTS_PE_Mar_76.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computer User Tape System&lt;/a&gt;&quot;, for Popular Electronics Issue March/76, describing the whereabouts and consideration for this format.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Kansas City 300bps format is defined in the Wikipedia article, but it doesn't give useful descriptions of how the other formats mentioned varied. So what were these formats?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That is way to broad for a single question, as many (Home) Computers used their own format, or varied the KC-Standard (*2). So you may want to ask separate questions for each you like to know.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also, I've seen indications that there was more to the format than just the frequency selection / start / stop / parity bit choices that are discussed on the Wikipedia page -- what was the block format used?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It would be nice if you could give links to these 'indications', as there wasn't anything defined beside&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Frequencies used (1200/2400 Hz)&lt;/li&gt;&#xA;&lt;li&gt;Cell length (3,33 ms -&gt; 300 Bd)&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Mark&lt;/em&gt; (logical One) consists of eight full 2400 Hz waves&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Space&lt;/em&gt; (logical Zero) consists of four full 1200 Hz waves&lt;/li&gt;&#xA;&lt;li&gt;Byteframe (1 &lt;em&gt;Startbit&lt;/em&gt; as &lt;em&gt;Space&lt;/em&gt;, 8 &lt;em&gt;Databits&lt;/em&gt;, 2 &lt;em&gt;Stopbits&lt;/em&gt; as &lt;em&gt;Mark&lt;/em&gt;)&lt;/li&gt;&#xA;&lt;li&gt;A &lt;em&gt;Parity&lt;/em&gt; can be added after the last data bit&lt;/li&gt;&#xA;&lt;li&gt;The total number of bits (&lt;em&gt;Dataword&lt;/em&gt; + &lt;em&gt;Parity&lt;/em&gt;) may not exceed 8&lt;/li&gt;&#xA;&lt;li&gt;Shorter &lt;em&gt;Datawords&lt;/em&gt; are to be filled with &lt;em&gt;Mark&lt;/em&gt; to a length of 8&lt;/li&gt;&#xA;&lt;li&gt;Time between &lt;em&gt;Frames&lt;/em&gt; has to be filled with a continuous 2400 Hz tone (aka a arbitrary number of &lt;em&gt;Stopbits&lt;/em&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Data is organized as &lt;em&gt;Blocks&lt;/em&gt; of arbitrary length.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Blocks&lt;/em&gt; can be of variable length&lt;/li&gt;&#xA;&lt;li&gt;A &lt;em&gt;Block&lt;/em&gt; is lead in by 5 seconds of &lt;em&gt;Mark&lt;/em&gt; (for synchronisation)&lt;/li&gt;&#xA;&lt;li&gt;A &lt;em&gt;Block&lt;/em&gt; is ended with the trailing stop bit of the last &lt;em&gt;Frame&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;A &lt;em&gt;Block&lt;/em&gt; should not start before at least 30 seconds after the first clear signal.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Everything else was up to each implementation, as it was considered Software. The Standard was only meant to standardize whatever is needed to make compatible hardware, much like V.24 doesn't standardize what kind of messages or blocks are to be transferred over a serial line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Byte did publish the findings of its &lt;em&gt;Audio Cassette Standards Symposium&lt;/em&gt; as &lt;em&gt;Provisional Audio Cassette Data Interchange Standard&lt;/em&gt; &lt;a href=&quot;https://archive.org/details/byte-magazine-1976-02/page/n73&quot; rel=&quot;nofollow noreferrer&quot;&gt;on p.72 of Issue 6 of February 1976&lt;/a&gt;. This is the only 'Official Standard Document' about the KCS at all (*3).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was there a common format for headers that could be used to identify data types / names / etc?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simply No. That's out of scope for the standard. It's something every system, in fact every application, could have handled differently. And many did not adhere to KCS at all (*4).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Sol-PC / Sol-10 / Sol-20 as well as their Subsystem-B boards for other S100 machines&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Acorn's 1200 bd format for example works by using only one 1200Hz wave for Zero and two 2400 waves for a One. It also changes the two stop bits to a single. So, while always quoted as '1200 Bd KC Standard', it merely used the same frequencies, but is otherwise rather a CUTS derivative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - A typical case of classic engineering. Forget about development process papers and all the bureaucracy - all needed to fly to the moon are some handwritten notes :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Apple, Atari, TI and many more.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-10-31T23:36:49.713" LastActivityDate="2018-10-31T23:36:49.713" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8101" PostTypeId="1" AcceptedAnswerId="8102" CreationDate="2018-10-31T17:02:41.277" Score="5" ViewCount="911" Body="&lt;p&gt;As you may be aware, developers used unregistered machine codes in their games, as discussed in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1591/use-of-undocumented-opcodes&quot;&gt;this thread&lt;/a&gt;. My question isn't why they would do this, but instead if these instructions yielded a difforent result on the NES than it did on the Famicom. Keep in mind that these codes were tested to work on the Famicom, but Nintendo probably  didn't care to make sure they had the same behavior on the NES, which was, in a way, a remake of the Famicom for American consumers.&lt;/p&gt;&#xA;" OwnerUserId="10751" LastActivityDate="2018-11-01T19:00:56.067" Title="Does the NES handle unlisted processor instructions differently from the Famicom?" Tags="&lt;nes&gt;&lt;nintendo&gt;&lt;undocumented-opcodes&gt;&lt;famicom&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8102" PostTypeId="2" ParentId="8101" CreationDate="2018-10-31T18:42:08.467" Score="8" Body="&lt;p&gt;To my knowledge, the NES and the Famicom had the exact same CPU (a Ricoh 2A03). So, it's unlikely there were any differences in behavior between the two with regards to undocumented opcodes. As the Ricoh had a 6502 core, you could also expect it has the same undocumented opcodes as the 6502 (not your question, though) - And &lt;a href=&quot;http://www.nesdev.com/2A03%20technical%20reference.txt&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; document seems to confirm this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than that, there were some peripheral differences like the cartridge and controller ports, but these would not relate to your question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To my knowledge, there is no NES game that wouldn't run on the Famicom or vice versa (except the ones that are incompatible with the changed slot design)&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-10-31T19:03:46.413" LastActivityDate="2018-10-31T19:03:46.413" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8103" PostTypeId="2" ParentId="8089" CreationDate="2018-10-31T22:22:32.360" Score="2" Body="&lt;p&gt;Back in the day, adjustable lenses were either rare, or nonexistent, so R.O.B.'s glasses were basically just his own removable lenses for brighter TV screens. (As stated in TheGamingHistorian's &lt;a href=&quot;https://youtu.be/w2FuHErzhVE?t=760&quot; rel=&quot;nofollow noreferrer&quot;&gt;video on R.O.B.&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="11030" LastActivityDate="2018-10-31T22:22:32.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8105" PostTypeId="1" AcceptedAnswerId="8113" CreationDate="2018-10-31T22:51:37.650" Score="18" ViewCount="3730" Body="&lt;p&gt;To my knowledge, an emulator turns machine code for a console into something that your computer can understand. For example, assembly code from a Gamecube game is not the same as from a .exe file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, why are multiple emulators needed to run games that are on platforms that run 6502 code? Shouldn't there just be a 6502 emulator that runs all 6502 platforms?&lt;/p&gt;&#xA;" OwnerUserId="11030" LastEditorUserId="4921" LastEditDate="2018-11-01T03:07:18.643" LastActivityDate="2021-04-29T20:40:28.443" Title="Why are different emulators needed to run platforms that use 6502 assembly code?" Tags="&lt;emulation&gt;&lt;6502&gt;&lt;microprocessor&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8107" PostTypeId="1" CreationDate="2018-10-31T22:59:46.837" Score="2" ViewCount="354" Body="&lt;p&gt;I've got a Packard Bell Legend 245 that's been running a 486 DX at 33 MHz. The board is Socket 2, and says Intel Overdrive Ready. I bought a 66 MHz DX2 under the assumption that it's just a drop-in upgrade. When booting the machine with the DX2, the message &quot;Unexpected Interrupt In Protected Mode&quot; will usually pop up once or twice (not consistent) sometime between the memory test starting, and the &quot;Starting MS-DOS...&quot; message appearing. It &lt;em&gt;will&lt;/em&gt; boot DOS after that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I've checked so far:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Booted with the 16 MB SIMM removed (leaving only the 4 MB on the board), to make sure it wasn't faulty RAM.&lt;/li&gt;&#xA;&lt;li&gt;Dropped the bus speed down to 25 MHz, thus running the CPU at 50 MHz, in case it had drifted out of spec due to age/damage.&lt;/li&gt;&#xA;&lt;li&gt;Looked at the board/jumper reference sticker inside the case to make sure there aren't any jumpers that have to be changed for a DX2.&lt;/li&gt;&#xA;&lt;li&gt;Looked up the chip details and confirmed the DX2 is 5V.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I have &lt;em&gt;not&lt;/em&gt; yet tried pulling out the sound card, ethernet card, or CD-ROM IDE controller card, and I have never seen this message appear when using the original 33 MHz DX with everything else remaining the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm gunshy about doing too much with the machine, even if it &lt;em&gt;does&lt;/em&gt; appear to start DOS okay, in case of causing disk corruption. What does this error message suggest that I should try doing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the markings on the two CPUs, as well as the 33 MHz 486 SX that originally came with the machine (which I replaced with the DX). All three are the same type of package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SX: A80486SX-33 / L3041692 / SX680&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DX: A80486DX-33 / L2522713 / SX419&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DX2: A80486DX2-66 / C4250445 / &amp;amp;E5V1X SX807&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update after some more experimentation:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After making sure I had a fresh backup, I popped the DX2 in and did some testing. After the usual errors that popped up during the memory test (which still passed just fine), I didn't notice any further problems. I started up Windows, copied some files over the network, hopped on IRC for a bit, tested a few games (still a little sluggish; probably a memory or I/O bottleneck that needs some L2 cache), etc. Then I went out to DOS and tried Doom. High-detail mode ran much more smoothly than with the 33 MHz CPU, and I had no problems playing, outside of getting myself killed by falling off a ledge like an idiot. :P&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, it &lt;em&gt;seems&lt;/em&gt; like everything was working fine, apart from that strange error message that pops up intermittently during POST. I'm still a bit nervous about running with it full time until I can be more certain that this doesn't indicate potential for data corruption.&lt;/p&gt;&#xA;" OwnerUserId="4459" LastEditorUserId="4459" LastEditDate="2018-11-05T18:21:09.453" LastActivityDate="2018-11-05T18:21:09.453" Title="&quot;Unexpected interrupt in protected mode&quot; after installing 486 DX2" Tags="&lt;hardware&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8108" PostTypeId="2" ParentId="8105" CreationDate="2018-10-31T23:03:18.177" Score="32" Body="&lt;p&gt;There are many answers to this and none might satisfy you.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;First of all, an emulator doesn't just do a CPU, but a machine. The same way you can't run an NES game on an Apple II. So while one emulator may do multiple machines, different emulators can do the job as well.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Furthermore, there are different target platforms. Linux isn't Windows which again isn't MacOS and so on. Like any other application, an emulator needs to interact with the platform it's running on - especially for tasks like timing and graphics on frame level a rather tight integration is needed - using functions that vary greatly on each OS.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Similarly, not only OSes do provide an environment to adapt to, generic Emulators (like Mame), or Browsers do as well, requiring similar adaptions.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Last but not least, since when has the existence of an implementation (here a 6502 emulator) ever stopped a developer from writing his own implementation?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2021-04-29T20:38:28.013" LastActivityDate="2021-04-29T20:38:28.013" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8109" PostTypeId="2" ParentId="8107" CreationDate="2018-10-31T23:12:29.063" Score="4" Body="&lt;p&gt;What processor did you buy/use exactly? A DX2 isn't the same as an Intel 486- Overdrive. It got a different power regulation and ignores certain settings. Also the &lt;em&gt;pinout&lt;/em&gt; differs, as there are two versions ODP and ODPR, depending on the mainboard. As said before, both are &lt;strong&gt;not&lt;/strong&gt; regular 486DX2 CPUs but special variants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if this System is a Socket 2 System it doesn't run with a 486-Overdrive, but needs a Pentium-Overdrive version of a P54C, made to run with the 32 Bit 486 Bus and a single 5V power supply (instead of the 3.3V of a regular Pentium).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The markings (&amp;amp;E5V1X) tell it as SL Enhanced (&amp;amp;E) 5 Volt (5V) Desktop (1X) processor.  Packaged in June 1994 in the US (C425).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As supected. It's not an Overdrive but a regular 486. So the BIOS will mistake it as DX (they share the same CPUID), thus it should work. Of course not faster than the original one, as the clock multipliers may not be set accordingly. In fact, this might also be the reson, if these pins are not handled by the board as the CPU expects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, as usual, it's just broken in a freaky way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short, you want to look for a Pantium Overdrive, not a 486. Or some third party faster 80486 - like a 100 or 133 MHz AMD - with an apropriate PCB for multipliere setings.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Further:&#xA;The SX419 is the original, first DX-33 of ~1990 (this one is of December 1992).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SX680 is again the original first series SX-33 (here of January 1993) without SL enhancement&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-11-01T14:11:12.163" LastActivityDate="2018-11-01T14:11:12.163" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8110" PostTypeId="5" CreationDate="2018-10-31T23:14:43.597" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2018-10-31T23:14:43.597" LastActivityDate="2018-10-31T23:14:43.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8111" PostTypeId="4" CreationDate="2018-10-31T23:14:43.597" Score="0" Body="For questions regarding Hudson's TurboGrafX-16 (also known as the TG16 or PC Engine)" OwnerUserId="10751" LastEditorUserId="10751" LastEditDate="2018-11-01T06:47:08.217" LastActivityDate="2018-11-01T06:47:08.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8112" PostTypeId="1" CreationDate="2018-11-01T06:01:29.027" Score="7" ViewCount="305" Body="&lt;p&gt;While at Uni in the 90’s in England, we learnt and used Modula-2 extensively as our high-level programming language. Just restoring a Mac SE/30, which is also from that era, and would love to be able to run a decent Modula-2 compiler on it.&lt;/p&gt;&#xA;&lt;p&gt;Reading StackExchange, it seems that the &lt;strong&gt;Metrowerks Modula-2&lt;/strong&gt; compiler was the preferred dev environment for the Mac at this time. It appeared to be delivered in two versions: the Professional Standalone Edition and the MPW version (and in addition, a student ‘StartPak’ edition)&lt;/p&gt;&#xA;&lt;p&gt;Does anyone still have any of these Mac dev tools archived away anywhere, or can point me to a source? I’ve trawled the Internet extensively, but can find no active resources.&lt;/p&gt;&#xA;&lt;p&gt;Also, any tips for books which cover use of early versions of MPW and CodeWarrior, which seem to have also been active at the time. Don’t think there was a book on use of Metrowerks Modula-2, but would be very happy to be proven wrong!&lt;/p&gt;&#xA;" OwnerUserId="11033" LastEditorUserId="8268" LastEditDate="2020-08-20T08:08:08.683" LastActivityDate="2020-08-21T11:56:41.180" Title="Metrowerks Modula-2 Dev Environment on Mac/SE30 (68030)" Tags="&lt;mac-os-classic&gt;&lt;software-development-kit&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8113" PostTypeId="2" ParentId="8105" CreationDate="2018-11-01T10:54:10.517" Score="49" Body="&lt;h1&gt;The 6502 CPU is just one piece of the puzzle&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Emulators emulate entire machines, not merely CPUs. Even the likes of QEMU emulate an entire generic computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It helps if you think of the Apple II and NES not as singular units but as networks of components. The CPU, graphics unit, RAM and so on all have communications to each other and do so at a very fast rate. In order to emulate these machines, you need to emulate each and every one of these components as well as the network itself. &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;The overall network of components in the NES and Apple II are fundamentally different&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The Apple II and the NES had different and incompatible ways of handling graphics, memory, sound data, and so on. Even the network with which the components communicate are different and incompatible. These all need to be emulated seperately from the CPU, and while the emulators &lt;em&gt;could&lt;/em&gt; share 6502 emulation code, they can't do so for the rest of the network of components as they are fundamentally different.&lt;/p&gt;&#xA;" OwnerUserId="11037" LastActivityDate="2018-11-01T10:54:10.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8114" PostTypeId="2" ParentId="8075" CreationDate="2018-11-01T13:42:54.270" Score="2" Body="&lt;p&gt;Things you need for real-mode Network access in Windows 98:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;\AUTOEXEC.BAT&lt;/strong&gt;: Autostart file, should contain a proper &lt;code&gt;NET START&lt;/code&gt;, e.g &lt;code&gt;NET START WORKSTATION&lt;/code&gt; command.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;\CONFIG.SYS&lt;/strong&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;\MSDOS.SYS&lt;/strong&gt; should contain a &lt;code&gt;HostWinBootDrv&lt;/code&gt; statement in the &lt;code&gt;Paths&lt;/code&gt; section to tell where to load the network driver stuff, and a &lt;code&gt;Network=1&lt;/code&gt; statement in the &lt;code&gt;Options&lt;/code&gt; section to activate networking. The file is read by &lt;code&gt;NET.EXE&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;\LANMAN\PROTOCOL.INI&lt;/strong&gt; Configuration file for &lt;code&gt;PROTMAN.EXE&lt;/code&gt;. This is where you tell the system about your NIC driver (example for a 3Com card, yours may vary):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[ELNK3$] &#xA;  DriverName=ELNK3$ &#xA;  IOAddress=0x300 &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[protman$] &#xA;  priority=ndishlp$ &#xA;  DriverName=protman$ &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[ndishlp$] &#xA;  DriverName=ndishlp$ &#xA;  Bindings=ELNK3$ &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[data] &#xA;  version=v4.00.950 &#xA;  netcards=ELNK3$,*PNP80F7 &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[NETBEUI$] &#xA;  DriverName=NETBEUI$ &#xA;  sessions=10 &#xA;  ncbs=12 &#xA;  Bindings=ELNK3$ &#xA;  Lanabase=0 &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[nwlink$] &#xA;  DriverName=nwlink$ &#xA;  Frame_Type=4 &#xA;  cachesize=0 &#xA;  Bindings=ELNK3$ &lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;\WINDOWS\ELNK3.DOS&lt;/strong&gt; NIC-specific driver, referred to in &lt;code&gt;PROTOCOL.INI&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;\WINDOWS\NDISHLP.SYS&lt;/strong&gt; Networking support, loaded by PROTMAN. You &lt;strong&gt;&lt;em&gt;need&lt;/em&gt;&lt;/strong&gt; this, and it should be with your Windows installation files. Get it from somewhere, that is the first problem on the list&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;\WINDOWS\NET.EXE&lt;/strong&gt; User-level Network application, you seem to have that&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;\WINDOWS\NET.MSG&lt;/strong&gt; Resources for the above&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;\WINDOWS\NETH.MSG&lt;/strong&gt; More resources for the above&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;\WINDOWS\PROTMAN.DOS&lt;/strong&gt; Real-mode driver for PROTMAN&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;\WINDOWS\PROTMAN.EXE&lt;/strong&gt; Protocol manager, loaded by NET.EXE&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The rest of the network configuration sits in the registry. You should be finding these keys, and if not, create them (but don't ask me about the values... Most of these should be set by Network Config dialogs in Settings):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[HKEY_LOCAL_MACHINE\Enum\Network]&#xA;[HKEY_LOCAL_MACHINE\Enum\Root\Net]&#xA;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Network] &#xA;[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net]&#xA;[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetClient]&#xA;[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetService]&#xA;[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans]&#xA;[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\NWLink]&#xA;[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\NWREDIR]&#xA;[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VREDIR]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Windows 95 and 98 didn't come with as many drivers for expansions as later systems like XP or Windows 7 did - You normally got the drivers with the hardware and had to install them manually. You should be looking for a DAVICOM 9102 driver install disk, and a similar disk for the modem - Install these and you should be one step further.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-11-01T21:14:53.373" LastActivityDate="2018-11-01T21:14:53.373" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8115" PostTypeId="2" ParentId="8105" CreationDate="2018-11-01T14:07:13.573" Score="6" Body="&lt;p&gt;If you look at something like MAME it's basically a container for all of the different parts that would make up an arcade machine - each chip has code dealing with it and each ROMs file contains the game code and then the actual machines themselves would have had standard motherboards that'd run multiple different ROMs for different games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As has been said the CPU is one part of the puzzle but there's no reason that means those chips can't be modules of an overall system implemented once. As to whether that is the case for any particular emulator is another matter - part of writing emulators for old systems is the challenge and joy and communities that develop around supporting older machines. There are no commercial entities I'm aware of doing such things so these hobbyists are preserving part of computing history. Often these are individuals or small groups doing this.&lt;/p&gt;&#xA;" OwnerUserId="11038" LastActivityDate="2018-11-01T14:07:13.573" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8116" PostTypeId="1" AcceptedAnswerId="8117" CreationDate="2018-11-01T14:18:15.977" Score="3" ViewCount="663" Body="&lt;p&gt;Have an old(ish) laptop with a Pentium T4400 @ 2.20 GHz processor, and some old software&lt;sup&gt;1&lt;/sup&gt; that requires Windows 95 or NT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a view to running this software on that hardware, I tried installing Windows 95, 98, ME, 2000, and NT from CD-ROM with no success whatsoever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can it be a configuration problem? Which is the latest processor I can use for this software?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC, Windows 98 &amp;amp; ME are versions of 95, and 2000 is a version of NT? Later Windows versions are more different?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; The software in question, which does not run on Windows 7 or 10, is &lt;a href=&quot;https://en.wikipedia.org/wiki/Nationalencyklopedin&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nationalencyklopedin&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In 1997, the first digital form of the encyclopedia was released on 6 CD-ROMs...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2019-07-22T08:49:24.653" LastActivityDate="2019-11-05T20:45:49.287" Title="Combination of processor and Windows version" Tags="&lt;software&gt;&lt;windows-95&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8117" PostTypeId="2" ParentId="8116" CreationDate="2018-11-01T14:32:18.090" Score="3" Body="&lt;p&gt;Windows 2000 is the latest (5.0) version of NT. Last Update was 2005, EOL in 2010. The Laptop isn't anywhere near being old (or OT here), as its at maximum from 2010. While this seem late, it should be possible to install Win2k, update it to SP4 and include drivers for the Laptop from XP, as the original XP driver model is still compatible with NT/Win2k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, without more information why installation failed, it's hard to even randomly guess why it doesn't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, software made for NT should, in most cases, run on XP and even Windows 10. Of course, depending on what OS services it uses. So again, without a more detailed information about it's impossible to give a real answer.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="8258" LastEditDate="2018-11-01T15:47:53.290" LastActivityDate="2018-11-01T15:47:53.290" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8118" PostTypeId="2" ParentId="8112" CreationDate="2018-11-01T14:33:53.677" Score="4" Body="&lt;p&gt;Hi and welcome to Retrocomputing StackExchange.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two good archives for Classic Macintosh software, both of which include some Modula-2 dev environments for 68K Macintoshes like the SE/30.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://macintoshgarden.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;macintoshgarden.org&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://macintoshrepository.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;macintoshrepository.org&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Searching either one for &quot;Modula-2&quot; has some results, but nothing from Metrowerks, unfortunately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;p1 Modula-2&quot; appears to have been around since the 1990s, integrates with the MPW, and is still supported today for modern Intel Macs and Xcode. They offer a free demo version on their &lt;a href=&quot;http://modula2.awiedemann.de&quot; rel=&quot;nofollow noreferrer&quot;&gt;web site&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-11-01T14:33:53.677" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8119" PostTypeId="1" AcceptedAnswerId="8131" CreationDate="2018-11-01T16:43:57.713" Score="16" ViewCount="6040" Body="&lt;p&gt;As you may know, the classic NES controller was not the only NES controller that Nintedo released with the NES. These included the &lt;a href=&quot;https://en.wikipedia.org/wiki/NES_Advantage&quot; rel=&quot;noreferrer&quot;&gt;NES advantage&lt;/a&gt;, the &lt;a href=&quot;http://nintendo.wikia.com/wiki/NES_Max&quot; rel=&quot;noreferrer&quot;&gt;NES Max&lt;/a&gt;, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Nintendo_Entertainment_System_(Model_NES-101)&quot; rel=&quot;noreferrer&quot;&gt;Dogbone&lt;/a&gt;. All of these new controllers featured turbo buttons (buttons for frame perfect spam). The thing that confuses me about this is that the controllers had no way of knowing when the NES changed frame, so how how did it know when to switch from on to off or vise versa? The reason I don't think the NES communicated this information to the controller is because controllers with turbo buttons came out after the NES, so Nintendo hadn't even thought of the concept yet, and wouldn't have been able to design the NES to work with it.&lt;/p&gt;&#xA;" OwnerUserId="10751" LastActivityDate="2018-11-03T23:51:52.030" Title="Are NES turbo buttons internal to the controller?" Tags="&lt;nes&gt;&lt;nintendo&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8120" PostTypeId="2" ParentId="8119" CreationDate="2018-11-01T16:52:54.187" Score="21" Body="&lt;p&gt;In the case of the NES Advantage at least, the Turbo rate was adjustable, by turning the dial at the top of each button.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are right in assuming that the NES does not communicate the start of a frame to the controller. But also, these buttons do not need to know when the frames are. All they need to do is open and close the circuit; the software will usually treat each opening and closing as an individual button press. It does not matter if this device oscillates every n frames exactly, it just needs to open and close the circuit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A similar device exists on some modern gaming controllers as well. They include a very simple circuit which just &quot;make it look like&quot; the user is mashing the button.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-11-02T10:39:10.710" LastActivityDate="2018-11-02T10:39:10.710" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="8121" PostTypeId="1" AcceptedAnswerId="8123" CreationDate="2018-11-01T17:10:38.007" Score="38" ViewCount="5718" Body="&lt;p&gt;Based on my understanding, an emulator is necessary because the machine with the emulator on it (say Windows), doesn't execute the same machine code as the target platform (6502, for example). So what an emulator does is it interprets the code line by line and executes it itself, similar to how an interpreter works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this in mind, would it be possible to create the equivalent of a compiler, that would convert (for example) a .PCE file into a .exe file, so that it could run on Windows without an emulator?&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="6659" LastEditDate="2018-11-01T18:43:32.300" LastActivityDate="2018-11-01T21:18:07.550" Title="Is it possible to make a ROM converter?" Tags="&lt;emulation&gt;&lt;nes&gt;&lt;compilers&gt;&lt;turbografx-16&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="8122" PostTypeId="2" ParentId="8121" CreationDate="2018-11-01T17:35:50.603" Score="13" Body="&lt;p&gt;The problem is that the emulator is emulating a LOT more than just the CPU. So in addition to transpiling the 6502 code to Intel code (and don't think that's simple - making the timing come out right would be a fascinating problem), you also need to provide code (analogous to the standard libraries that any program uses) that provide an emulated I/O environment that the 6502 code can manipulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It'd be much easier to just bundle the emulator and program into one binary and ship that. This is what Ian Bogost did with &lt;a href=&quot;http://bogost.com/games/aslowyear/&quot; rel=&quot;noreferrer&quot;&gt;A Slow Year&lt;/a&gt; - the 6502 binary is just wrapped up into a binary with the emulator.&lt;/p&gt;&#xA;" OwnerUserId="4356" LastActivityDate="2018-11-01T17:35:50.603" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="8123" PostTypeId="2" ParentId="8121" CreationDate="2018-11-01T18:19:59.453" Score="75" Body="&lt;p&gt;&lt;sup&gt;Note: This answer mainly focuses on the NES, since that's what I'm most familiar with.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes; this is called static recompilation or &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary_translation&quot; rel=&quot;noreferrer&quot;&gt;static binary translation&lt;/a&gt;, and it is theoretically possible -- &lt;a href=&quot;https://andrewkelley.me/post/jamulator.html&quot; rel=&quot;noreferrer&quot;&gt;jamulator by Andrew Kelly does it&lt;/a&gt;.  However, recompilation can be incredibly difficult (to the point that falling back to interpretation at runtime may be required in some cases).  Additionally, the system's non-CPU hardware (such as graphics and sound hardware) still must be emulated.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Statically recompiling machine code is incredibly difficult; determining the behavior of a program by analyzing its code ahead-of-time is in some cases &lt;a href=&quot;https://en.wikipedia.org/wiki/Halting_problem&quot; rel=&quot;noreferrer&quot;&gt;provably impossible&lt;/a&gt;.  Some of the problems faced when statically recompiling a retro video game ROM include:&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;How do we determine what parts of the ROM are executable code and what parts are data?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The &quot;obvious&quot; way to recompile a NES ROM is to take a single pass, reading a stream of 6502 instructions and outputting a stream of x86 instructions.  However, the ROM also includes data bytes, which will produce garbage if interpreted as instructions.  These garbage instructions should never be executed, since the program would never jump to that address, but the presence of non-instruction data poses two problems:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The program must be able to read its own ROM.  This isn't really a hard problem at all; we just need to include an uncompiled copy of the ROM in the compiled program binary to read data bytes from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) We can't write a simple single-pass recompiler.  Instructions can be multiple bytes wide, so if we try to recompile a block of non-executable data, we might end up misaligned when recompiling subsequent instructions.  (As a simple (somewhat contrived) example, in 6502 machine code, the sequence of bytes &lt;code&gt;69 09 0A&lt;/code&gt; is &lt;code&gt;ADC #09; ASL&lt;/code&gt;, while the sequence of bytes &lt;code&gt;A5 69 09 0A&lt;/code&gt; is &lt;code&gt;LDA $69; ORA #0A&lt;/code&gt;.  The point at which we start executing drastically affects our results.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this means we have to perform much more complex code analysis in order to determine the &lt;a href=&quot;https://en.wikipedia.org/wiki/Basic_block&quot; rel=&quot;noreferrer&quot;&gt;basic blocks&lt;/a&gt; of the program and compile them individually.  &lt;a href=&quot;https://andrewkelley.me/post/jamulator.html&quot; rel=&quot;noreferrer&quot;&gt;jamulator&lt;/a&gt; does this by starting at the interrupt vectors and following all possible branches from there.  However, this approach &lt;em&gt;still&lt;/em&gt; has problems with:&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Dynamic jumps&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This is where the address to execute is computed at runtime.  In some cases, the runtime-computed address can be looked up and the corresponding x86 code can be found.  However, if the &lt;em&gt;only&lt;/em&gt; way to access a basic block is via an indirect jump, the recompiler would likely have assumed that block was not executable code and thus not compiled it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;jamulator mitigates this problem using a hack: &lt;a href=&quot;https://andrewkelley.me/post/jamulator.html#detect-jump-table&quot; rel=&quot;noreferrer&quot;&gt;hard-coded support in the recompiler to recognize jump table implementations in specific games&lt;/a&gt;.  This works, but is clearly not a general-purpose solution.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Bank switching&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Although jamulator only supports NROM games, many NES games with more complicated mappers could switch regions of code and data in and out of the accessible address space.  This means that each jump could go to dozens of different locations in the ROM, depending on which bank is mapped to that address at runtime.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Dynamically generated code/self-modifying code&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Although this was uncommon for NES games due to the small amount of RAM, if I remember correctly C64 software would occasionally generate and execute code at runtime, or modify code mid-execution.  This would be nearly impossible to statically predict.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Other hardware such as graphics and audio&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The NES Picture Processing Unit and Audio Processing Unit still must be emulated.  jamulator includes an emulator for the non-CPU hardware in a runtime library, and the generated x86 code calls a library function to handle writes to memory addresses mapped to I/O operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many NES games relied on precise timing between the CPU and PPU, so the generated CPU code must count the number of 6502 clock cycles taken by the executed code.  &lt;a href=&quot;https://andrewkelley.me/post/jamulator.html#parallel-systems&quot; rel=&quot;noreferrer&quot;&gt;jamulator implements this relatively simply&lt;/a&gt;: after each NES instruction, it calls out to a runtime library which runs the rest of the hardware for a specific number of cycles.  This approach is simple to implement, but has a few disadvantages:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CPU writes don't quite happen on the &lt;em&gt;exactly&lt;/em&gt; correct cycle relative to the rest of the hardware.  The timing is only accurate to the nearest instruction, not the nearest cycle.&lt;/li&gt;&#xA;&lt;li&gt;Emulating the PPU and APU after every CPU instruction greatly impairs performance, since the recompiler loses opportunities to remove, combine, or reorder instructions for better performance.  Frequent switching between operations also harms the x86 CPU's cache performance and branch prediction accuracy.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A more efficient (but much more complex) approach is to predict the times at which accurate synchronization between the CPU and the rest of the hardware is needed, and use these predictions to switch between fast and cycle-accurate emulation modes as needed.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Although static recompilation is often possible, it can be extremely difficult.  &lt;a href=&quot;https://andrewkelley.me/post/jamulator.html#dirty-assembly-tricks&quot; rel=&quot;noreferrer&quot;&gt;jamulator sometimes falls back to interpretation&lt;/a&gt; when the game does something not properly handled by the static recompiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accuracy of static recompilation could be improved by running the game inside of something like FCEUX's code-data logger, which emulates the game while recording the code paths it takes.  Data from an actual run of the game can be used to greatly improve the accuracy of static recompilation.  However, the &quot;test run&quot; recorded by the code-data logger must comprehensively exercise the possible code paths taken by the game in order to be useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Emulators of newer systems, such as the &lt;a href=&quot;https://dolphin-emu.org&quot; rel=&quot;noreferrer&quot;&gt;Dolphin Emulator&lt;/a&gt; (which emulates the GameCube and Wii) frequently use &lt;a href=&quot;https://en.wikipedia.org/wiki/Just-in-time_compilation&quot; rel=&quot;noreferrer&quot;&gt;just-in-time compilation&lt;/a&gt;, where the emulator recompiles sections of the game's code &lt;em&gt;at runtime&lt;/em&gt;.  This generally provides the best of both worlds: we get the performance improvements of recompiled code, and the improved insight of being able to analyze the game's code at runtime.&lt;/p&gt;&#xA;" OwnerUserId="409" LastEditorUserId="409" LastEditDate="2018-11-01T21:18:07.550" LastActivityDate="2018-11-01T21:18:07.550" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8124" PostTypeId="2" ParentId="8121" CreationDate="2018-11-01T18:32:20.833" Score="4" Body="&lt;p&gt;Whether or not it's possible isn't the only defining factor that goes into development. Keep in mind that the quality of an emulator is very much connected to it's ability to create TAS, Savestate, use RAMWatch, and so on, all of which would not be possible if the ROM was converted to a .EXE file. With this in mind, developers haven't been interested in creating such a thing, which is the very reason why it isn't &quot;possible&quot; with the knowledge that the community is likely to have.&lt;/p&gt;&#xA;" OwnerUserId="11042" LastActivityDate="2018-11-01T18:32:20.833" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8125" PostTypeId="2" ParentId="8121" CreationDate="2018-11-01T18:36:22.033" Score="2" Body="&lt;p&gt;Compiling the instructions of an arbitrary processor (e.g. a 6502) into code that will run on a modern PC should be pretty easy.  After all, it's not far different from what's done by any just-in-time compiler for a language that's distributed as bytecode (e.g. Java, .NET, and so on) and simpler than a JIT compiler for a language that needs non-trivial parsing (e.g. Javascript).  The easy way would be to use an existing code generator (e.g. LLVM or gcc) and just add a very simple front end that read the machine code and generated the appropriate intermediate instructions...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are three things that make this much more complex than it seems:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;First, you'd need to emulate the hardware other than the CPU, so the graphics system, the audio system, etc.  Along with this you'd need to provide a pre-translated version of any firmware that's expected to be present on your target system so that it can be linked in to the code you're compiling.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Second, you need to identify what parts of the ROM are actually instructions to be executed, and what parts are data (e.g. sprites, audio tracks, game level maps, etc).  The data parts need to be handled differently -- ideally, translated into a more easily accessed format (especially multi-byte numbers, either integers or floating point, which could easily be in a format that the host processor doesn't natively understand).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Third, and possibly more interestingly, all of this may in fact be somewhat less legal than just using interpreted emulation.  Many software and hardware vendors have granted permission to allow their code (either firmware or games) to be used in emulators, as long as they remain unchanged (e.g. I know that this is the situation with the ROMs for the Sinclair ZX Spectrum, which have been released under terms like these by their current copyright holder, Amstrad PLC).  But recompiling it for a new system does change it.  Even when copyright permission hasn't been granted, there are a variety of exceptions to copyright that allow minimal copying to be performed (e.g. copying the contents of a cartridge ROM onto disk for easier access) if that's necessary to make it work -- but recompiling isn't necessary, so even where there's no explicit licence grant available it may be less legal to recompile for a new architecture than just to emulate the old one.  (I'm not a lawyer, so take this with a very large pinch of salt, but I have spent a reasonable amount of time learning about copyright law, and I'm pretty confident this position)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-11-01T18:36:22.033" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8126" PostTypeId="2" ParentId="8121" CreationDate="2018-11-01T18:44:43.613" Score="2" Body="&lt;p&gt;Not quite a complete answer; however, many emulators of the consoles like playstation and alike do in some sense the same you are asking about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of precisely executing the code and precisely emulating the hardware, some typical code pieces (mostly connected with 3D transformations and rendering) are recognized as a whole and the end result is just inserted in the machine state or rendered using host 3D capabilities. The reason in doing so is probably lack of detailed hardware information and the speed of host CPU being not enough to emulate everything precilesy.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-11-01T18:44:43.613" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8127" PostTypeId="2" ParentId="8101" CreationDate="2018-11-01T19:00:56.067" Score="0" Body="&lt;p&gt;A clarification to @tofro answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NES CPU chip does contain 6502 as a whole (probably also shrinked a bit with some minor changes like removal of pads), but it is also surrounded by sound and sprite DMA hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like this:&#xA;&lt;a href=&quot;http://visual6502.org/images/6502/6502_top_op10x_BF_4677.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://visual6502.org/images/6502/6502_top_op10x_BF_4677.png&lt;/a&gt; -- original 6502,&#xA;&lt;a href=&quot;http://www.visual6502.org/images/RP2A/Nintendo_RP2A03G_die_shot_1a_6500w.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.visual6502.org/images/RP2A/Nintendo_RP2A03G_die_shot_1a_6500w.jpg&lt;/a&gt; -- 2A03 (note the 6502 is in the lower right part of the image).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also it is known that 6502 in 2A03 was unlicensed and to limit patents infringement the decimal mode in 6502 was intentionally broken, as per this: &lt;a href=&quot;https://forums.nesdev.com/viewtopic.php?f=9&amp;amp;t=9813&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://forums.nesdev.com/viewtopic.php?f=9&amp;amp;t=9813&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-11-01T19:00:56.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8128" PostTypeId="2" ParentId="8119" CreationDate="2018-11-01T20:50:46.220" Score="3" Body="&lt;p&gt;I don't know about these controllers, but according to &lt;a href=&quot;http://www.taylorbooth.com/NESController.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;, you could know when to toggle buttons by watching the shift register clock pin. &#xA;Example: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;set button to on&lt;/li&gt;&#xA;&lt;li&gt;wait 8 clock pulses&lt;/li&gt;&#xA;&lt;li&gt;set button to off&lt;/li&gt;&#xA;&lt;li&gt;wait 8 clock pulses&lt;/li&gt;&#xA;&lt;li&gt;go to step 1&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11045" LastActivityDate="2018-11-01T20:50:46.220" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8129" PostTypeId="2" ParentId="8116" CreationDate="2018-11-01T22:54:00.213" Score="3" Body="&lt;h3&gt;Windows XP Mode&lt;/h3&gt;&#xA;&lt;p&gt;Quite a bit of older software will NOT run natively in Windows 7 or above. However, most of this software, whether DOS-based or older Windows software, will run just fine in &lt;a href=&quot;https://www.microsoft.com/en-us/download/details.aspx?id=8002&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows XP Mode.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, Windows XP Mode is not available for Windows 10. I have quite a few customers where I have stuck with Windows 7 specifically in order to run Windows XP Mode to run older software. Actually, most of them (and many of my other customers) prefer the &amp;quot;classic&amp;quot; Windows interface used from 95 through 7 to the newer 8/10 interface anyway, but I digress.&lt;/p&gt;&#xA;&lt;p&gt;Other than the now very rare (for me at least) hardware issues requiring older systems to run properly, I have not had any significant problems getting the oldest software - including much that would quality as Retro (&amp;gt; 20 years old) running well in Windows XP Mode in Windows 7.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-11-01T22:54:00.213" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8130" PostTypeId="1" AcceptedAnswerId="8658" CreationDate="2018-11-02T02:07:23.300" Score="6" ViewCount="2686" Body="&lt;p&gt;For those of you who don't know, dead zones are a (usually) intentional effect with most controllers' analog sticks, where if the amount that it's being moved is too small, the controller doesn't register the movement at all. This is so that if you were to let go of the thumbs tick while playing (for example) SM64, the thumbstick would be at its resting pose, but not exactly, since nothing is 100% exact. So, to keep Mario from moving ever so slightly, very minor thumbstick inputs are ignored. My question is wethe or not the N64 was the first console to pull this off.&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="10751" LastEditDate="2018-11-02T16:39:11.157" LastActivityDate="2019-01-04T18:46:52.873" Title="How do N64 controller deadzones work?" Tags="&lt;nintendo&gt;&lt;nintendo-64&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8131" PostTypeId="2" ParentId="8119" CreationDate="2018-11-02T03:30:50.303" Score="13" Body="&lt;p&gt;According to &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/Standard_controller#Turbo&quot; rel=&quot;nofollow noreferrer&quot;&gt;Standard controller#Turbo - Nesdev wiki&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A turbo controller such as the NES Max or NES Advantage is read just&#xA;  like a standard controller, but the user can switch some of its&#xA;  buttons to be toggled by an oscillator. Such an oscillator turns the&#xA;  button on and off at 15 to 30 Hz, producing rapid fire in games.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here are the pictures of the controller from &lt;a href=&quot;http://ijk.wz.cz/dendy/dendy.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;an overview of Dendy Junior&lt;/a&gt;, a Chinese Famiclone, the most popular model sold in Russia in the 90s, which was stocked with turbo controllers out of the box:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/78IJE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/78IJE.jpg&quot; alt=&quot;controller&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/alqbI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/alqbI.jpg&quot; alt=&quot;controller board&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/8xFQ5.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8xFQ5.jpg&quot; alt=&quot;controller board backside&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And these are schematics of encoder circuits compatible with these controllers (images are links to the origin articles). The 2nd one is a scan from the &lt;em&gt;Radio&lt;/em&gt; journal, the top Soviet journal for radio and electronics enthusiasts that was famous for publishing hard-to-find information, including schematics for various devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://habr.com/post/191936/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qhcea.jpg&quot; alt=&quot;schematics 1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.radioway.ru/1996/06/remont_dzhoistika__dendi_.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AJYXI.gif&quot; alt=&quot;schematics 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the schematic for К561ИЕ10 which is DD1 in the 2nd scheme:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.microshemca.ru/M.K561IE10/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EIn5z.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 1st one, &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8119/are-nes-turbo-buttons-internal-to-the-controller/8131?noredirect=1#comment23753_8131&quot;&gt;according to @duskwuff&lt;/a&gt;, is a free-running RC oscillator with the frequency of about 8 Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2nd one uses a 4-digit counter on D triggers, thus switching the button each 8 controller's clock cycles. Since the triggers are edge-triggered by the same clock signals and &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/Standard_controller#Output_.28.244016.2F.244017_read.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;it takes exactly 8 clock cycles to read the controller's state&lt;/a&gt;, this effectively switches the button between every two controller state packets.&lt;/p&gt;&#xA;" OwnerUserId="8121" LastEditorUserId="8121" LastEditDate="2018-11-03T23:51:52.030" LastActivityDate="2018-11-03T23:51:52.030" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8132" PostTypeId="2" ParentId="7991" CreationDate="2018-11-02T06:37:48.320" Score="4" Body="&lt;p&gt;The HuC6280 used an instruction set and architecture which was largely identical to the 65C02 -- each instruction is represented by a one-byte opcode, followed by up to three bytes of immediate data. The amount of immediate data is implied by the opcode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The flags are a CPU register, not part of an instruction.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The HuC6280 appears to support all instructions which existed on the 65C02, plus some additional instructions. Some of these instructions are specific to the PC-Engine hardware, while others are more general-purpose:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;BSR&lt;/code&gt;: A form of &lt;code&gt;JSR&lt;/code&gt; which uses a relative address.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;CLA&lt;/code&gt;, &lt;code&gt;CLX&lt;/code&gt;, &lt;code&gt;CLY&lt;/code&gt;: One-byte instructions to set specific registers to zero.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;CSH&lt;/code&gt;, &lt;code&gt;CSL&lt;/code&gt;: Instructions to change the speed of the processor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;SAX&lt;/code&gt;, &lt;code&gt;SAY&lt;/code&gt;, &lt;code&gt;SXY&lt;/code&gt;: Swap values between the &lt;code&gt;A&lt;/code&gt;, &lt;code&gt;X&lt;/code&gt;, and &lt;code&gt;Y&lt;/code&gt; registers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;SET&lt;/code&gt;: Acts as a prefix, causing the next instruction to use &lt;code&gt;(X)&lt;/code&gt; -- that is, a zero-page memory value -- instead of &lt;code&gt;A&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;ST0&lt;/code&gt;, &lt;code&gt;ST1&lt;/code&gt;, &lt;code&gt;ST2&lt;/code&gt;: Store immediate values to VDC control registers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;TAM&lt;/code&gt;, &lt;code&gt;TMA&lt;/code&gt;: Store and retrieve values to/from memory mapper registers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;TIA&lt;/code&gt;, &lt;code&gt;TDD&lt;/code&gt;, &lt;code&gt;TIN&lt;/code&gt;, &lt;code&gt;TII&lt;/code&gt;: Control memory-move operations.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="461" LastEditorUserId="461" LastEditDate="2018-11-02T06:46:26.260" LastActivityDate="2018-11-02T06:46:26.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8133" PostTypeId="2" ParentId="8119" CreationDate="2018-11-02T07:39:30.047" Score="6" Body="&lt;p&gt;To read a controller, the NES says to the controller &quot;Save the current state of the buttons&quot; then says &quot;Send me the saved value for the next button&quot; eight times. Each time, the controller sends the saved value for one of the buttons to the NES. The controller sends the button values in the following order: A, B, SELECT, START, up, down, left, right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of the &quot;request and report&quot; nature of the signals, it's possible for a turbo controller to keep track of how many requests have been sent and report buttons as being on or off for an exact number of requests.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note about frames: Games will usually get a full report from the controller once a frame, but be aware that there is no requirement to get exactly one report per frame. Some games don't bother requesting reports from the controller during parts of the game you can't control. Some games need to request multiple reports in a frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Details:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nesdev Wiki has several documents:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://wiki.nesdev.com/w/index.php/Controller_port_pinout&quot; rel=&quot;noreferrer&quot;&gt;https://wiki.nesdev.com/w/index.php/Controller_port_pinout&lt;/a&gt;&#xA;&lt;a href=&quot;https://wiki.nesdev.com/w/index.php/Controller_port_registers&quot; rel=&quot;noreferrer&quot;&gt;https://wiki.nesdev.com/w/index.php/Controller_port_registers&lt;/a&gt;&#xA;&lt;a href=&quot;https://wiki.nesdev.com/w/index.php/Standard_controller&quot; rel=&quot;noreferrer&quot;&gt;https://wiki.nesdev.com/w/index.php/Standard_controller&lt;/a&gt;&#xA;&lt;a href=&quot;https://wiki.nesdev.com/w/index.php/Input_devices&quot; rel=&quot;noreferrer&quot;&gt;https://wiki.nesdev.com/w/index.php/Input_devices&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Putting the information in these documents together, I gather the process works like this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The game writes a 1 to memory address hex 4016.&lt;/li&gt;&#xA;&lt;li&gt;The NES sends a 1 on the OUT pins of both controller ports.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;While the OUT pin is 1, the controller(s) will continually save the current state of the buttons.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The game writes a 0 to memory address hex 4016.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;The NES sends a 0 on the OUT pins of both controller ports.&lt;/li&gt;&#xA;&lt;li&gt;The controller(s) will stop continually saving the current state of the buttons, but keep the last saved values.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Repeat 8 times:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The game reads memory address hex 4016 (for controller 1) or hex 4017 (for controller 2).&lt;/li&gt;&#xA;&lt;li&gt;The NES sends a 1 then a 0 on the CLK pin of the controller port.&lt;/li&gt;&#xA;&lt;li&gt;The controller changes the D0 pin to the saved value of the next button in the sequence.&lt;/li&gt;&#xA;&lt;li&gt;The NES reads the value from the D0 pin and presents it as the lowest bit value of the memory address being read by the game.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(The other data lines, D3 and D4, are used by other kinds of controllers like the Zapper and Power Pad. These values show up in other bits of the memory address being read by the game.)&lt;/p&gt;&#xA;" OwnerUserId="7397" LastActivityDate="2018-11-02T07:39:30.047" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8134" PostTypeId="1" AcceptedAnswerId="8142" CreationDate="2018-11-02T11:23:07.810" Score="11" ViewCount="1346" Body="&lt;p&gt;As compared with the 68000, which also was available from 1979, and which also started off quite popular in desktop-sized UNIX machines, it apparently has a much more sophisticated memory model, which I suppose means that process isolation etc would be more easily implemented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also it looks like I would prefer the Z8000's register file to work with. If you're working with a lot of small values, on the 68k you'd run out of &lt;code&gt;d&lt;/code&gt; registers before you'd run out of &lt;code&gt;rh&lt;/code&gt; and &lt;code&gt;rl&lt;/code&gt; registers on the Z8000. And for whatever reason, the GDR engineers chose to reverse-engineer or clone this one over the 68k. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From 20 000 feet, it looks like a reasonable upgrade path coming from the Z80 too. If you have experience writing Z80, my guess is you'd easily get used to the Z8000. Maybe compilers are easy to convert as well; but I don't know that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when the Macintosh, the Amiga, the Atari ST, the Sun-1 etc etc all flooded the market in the mid to late eighties, why did none of these use the Z8000? Or to put it another way, why does this generation of computers not feature any well-known example which uses the Zilog as its CPU?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="4335" LastEditDate="2018-11-03T00:43:24.323" LastActivityDate="2019-04-24T09:57:39.167" Title="What limited the use of the Z8000 (vs. 68K and 8086) CPU for 16-bit computers?" Tags="&lt;motorola-68000&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8135" PostTypeId="1" AcceptedAnswerId="8287" CreationDate="2018-11-02T14:34:42.883" Score="7" ViewCount="432" Body="&lt;p&gt;I wanted to write a simple hello world program in DOSBox, so I downloaded Bruce's C Compiler from &lt;a href=&quot;http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/repos/pkg-html/bcc.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. And wrote this program (using &lt;code&gt;edit.exe&lt;/code&gt;):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;int main() {&#xA;    printf(&quot;Hello, World!\n&quot;);&#xA;    return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I ran bcc like this: &lt;code&gt;bcc -o hello hello.c&lt;/code&gt;, but I get this error every time:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C:\BCC\DEVEL\BCC\BIN\LD86.EXE: HELLO.C has bad magic number&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I tried &lt;code&gt;bcc hello.c -o hello.exe&lt;/code&gt; and got the same error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know why this is happening, if anyone can tell me please do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm running DOSBox 0.74 on 64-bit Windows 10.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I ran bcc with filenames in all uppercase (as what you would get from autocomplete), but if you type it out in lowercase the compiler seems to work just fine.&lt;/p&gt;&#xA;" OwnerUserId="11051" LastEditorUserId="15334" LastEditorDisplayName="user6464" LastEditDate="2021-02-18T10:14:38.183" LastActivityDate="2021-02-18T10:14:38.183" Title="BCC LD86 file has bad magic number" Tags="&lt;compilers&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8136" PostTypeId="1" AcceptedAnswerId="8137" CreationDate="2018-11-02T16:18:50.950" Score="20" ViewCount="1692" Body="&lt;p&gt;So a while back, I heard that MS-DOS was originally named QDOS (Quick and Dirty Operating System), and that it was later changed is MS-DOS (Microsoft Disk Operating System). This was probably a marketing strategy to fix a rather unappealing name. My question is when did this change take place, and why did it take place specifically then?&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="15334" LastEditDate="2020-11-13T20:41:14.590" LastActivityDate="2020-11-13T20:41:14.590" Title="When was QDOS changed to MS-DOS?" Tags="&lt;history&gt;&lt;ms-dos&gt;&lt;microsoft&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8137" PostTypeId="2" ParentId="8136" CreationDate="2018-11-02T16:21:41.343" Score="25" Body="&lt;p&gt;MS-DOS was indeed originally known as QDOS. The change in name occurred as a result of a change in ownership — from Seattle Computer Products to Microsoft.&lt;/p&gt;&#xA;&lt;p&gt;Tim Paterson, QDOS’ author, has &lt;a href=&quot;http://www.patersontech.com/dos/byte%E2%80%93history.aspx&quot; rel=&quot;noreferrer&quot;&gt;documented this&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The first versions of the operating system, called QDOS 0.10, were shipped in August 1980. QDOS stood for Quick and Dirty Operating System because it was thrown together in such a hurry (two man-months), but it worked surprisingly well. [...]&lt;/p&gt;&#xA;&lt;p&gt;In the last few days of 1980, a new version of the DOS was released, now known as 86-DOS version 0.3. [...]&lt;/p&gt;&#xA;&lt;p&gt;In July 1981, Microsoft bought all rights to the DOS from Seattle Computer, and the name MS-DOS was adopted. Shortly afterward, IBM announced the Personal Computer, using as its operating system what was essentially Seattle Computer's 86-DOS 1.14. Microsoft has been continuously improving the DOS, providing version 1.24 to IBM (as IBM's version 1.1) with MS-DOS version 1.25 as the general release to all MS-DOS customers in March 1982.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;IBM provided DOS with their PC as “PC DOS”.&lt;/p&gt;&#xA;&lt;p&gt;An interesting artifact came to light earlier this year: &lt;a href=&quot;https://twitter.com/Foone/status/1059174200970141696&quot; rel=&quot;noreferrer&quot;&gt;a copy of Seattle DOS 3.1&lt;/a&gt;! As part of the sale of 86-DOS to Microsoft, SCP were granted a royalty-free license to DOS, for use with their computer hardware, and evidently continued to produce OEM versions of MS-DOS at least until version 3.1. (Microsoft bought the license back at the end of 1986.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-11-08T13:03:18.630" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8138" PostTypeId="2" ParentId="8134" CreationDate="2018-11-02T18:36:52.023" Score="3" Body="&lt;p&gt;To start with, there was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Olivetti_M20&quot; rel=&quot;nofollow noreferrer&quot;&gt;Olivetti M20&lt;/a&gt; of 1982 (*1). It wasn't only a Z8001 based computer, but also rather successful all over Europe. Olivetti also used the Z8000 in their Linea 1 systems, more mini like multi user systems. All with their own OS PCOS. In fact, the Z8000 systems where so popular, that they produced a Z8000 subsystem for their later DOS compatible M24 (*2,3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zilog did promote ZEUS, a Version 7 compatible Unix, and several manufacturers used it in OEM systems. It was as well used in East Germany with their P8000 Unix systems. After all, they did manufacture the Z8000 as 'second source'&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What limited the use of the Z8000 in personal computers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most notably Zilog being late to deliver and needing more than 3 years to fight all (known) bugs.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Byte Magazin got a &lt;a href=&quot;http://www.kranenborg.org/z8000/m20-byte-review.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;M20 Review&lt;/a&gt; in their June 1983 issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Better known in the US as AT&amp;amp;T 6300 and Xerox 6060.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Olivetti was also among the few Z80,000 users, building a new Z80,000 based machine as late as 1989 to replace the upper end Linea 1 systems, as well as offering an upgradepath for M20 users. The system got canceled short before introduction &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2019-04-24T09:57:39.167" LastActivityDate="2019-04-24T09:57:39.167" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="8139" PostTypeId="2" ParentId="6742" CreationDate="2018-11-02T19:21:42.703" Score="0" Body="&lt;p&gt;You'll find that the ST floppy drive works well in an Amiga...im using one on an A500 with no modification at all. The only issue is that it has no disk change click as the Amiga does.&lt;/p&gt;&#xA;" OwnerUserId="11060" LastActivityDate="2018-11-02T19:21:42.703" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8140" PostTypeId="1" AcceptedAnswerId="8141" CreationDate="2018-11-02T22:02:19.960" Score="3" ViewCount="976" Body="&lt;p&gt;I discovered that games are not on my Windows 98 SE computer, including Solitaire. I thought I could use a Windows 98 upgrade disc to install the games but apparently I cannot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am considering burning a regular Windows 98 SE disc from WinWorld: &lt;a href=&quot;https://winworldpc.com/product/windows-98/98-second-edition&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://winworldpc.com/product/windows-98/98-second-edition&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am here faced with a number of options that are not explained. Just looking at English, the following are available:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Update (FE to SE)&lt;/li&gt;&#xA;&lt;li&gt;OEM Full&lt;/li&gt;&#xA;&lt;li&gt;Retail Full&lt;/li&gt;&#xA;&lt;li&gt;Retail Upgrade&lt;/li&gt;&#xA;&lt;li&gt;Select&lt;/li&gt;&#xA;&lt;li&gt;VMWare&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The site also notes: Important: Only the OEM Full version is bootable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am thinking I currently have the Retail Upgrade disc and the update FE to SE disc is obviously not what I want either. I am guessing VMWare is only compatible with VMWare as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That leaves OEM Full, Retail Full, and Select. I know a bit about OEM vs. Retail (although not sure if either would work to install the games) but I have never heard of Select before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What &lt;em&gt;is&lt;/em&gt; Select, and which version(s) would work?&lt;/p&gt;&#xA;" OwnerUserId="5371" LastActivityDate="2018-11-02T22:11:29.040" Title="What does &quot;select&quot; mean in a Windows 98 install disc?" Tags="&lt;windows-98&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8141" PostTypeId="2" ParentId="8140" CreationDate="2018-11-02T22:11:29.040" Score="4" Body="&lt;p&gt;Select was one of Microsoft’s volume licensing programmes; the corresponding CD image is unlikely to be appropriate for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either the OEM or the retail full image should work for your purpose. You can install the missing components from the Control Panel: in the Start menu, select Settings, then Control Panel; open “Add/Remove Programs”, click on the Windows Setup tab, and choose the components you want to install. Solitaire is in Accessories, Games. Windows will prompt for a CD if it needs one (I’ve seen quite a few Windows 98 systems where the installation files were copied on to the hard drive).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(If you haven’t tried doing the above with your upgrade CD, you might want to try it before downloading an image...)&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-11-02T22:11:29.040" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8142" PostTypeId="2" ParentId="8134" CreationDate="2018-11-03T00:32:45.120" Score="14" Body="&lt;p&gt;The Zilog Z8000, Motorola 68000, and Intel 8086 all arrived at roughly the same time-frame and each represented the new 16-bit architecture of their respective CPU designers. They differed markedly in their approach to hardware memory addressing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z8000 and the 8086 used a segmented memory approach, whereas the 68000 was a flat address space, and focused on addressing as much memory as was realistic without segmentation boundaries (or any of the protection or paging features segmentation might offer!) In short, Zilog especially and Intel to a lesser extent were already implementing simple memory management features in a manner integral and internal with their CPU's instruction architecture. Conversely, Motorola was eyeing sophisticated memory management as an external function provided by a coprocessor, which would monitor and intercede the CPU's memory access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These two differing CPU architecture &quot;philosophies&quot; were then handed to the systems engineers of the time, whose main focus was to use the new 16-bit processors to introduce sophisticated new computers with capabilities not possible on the earlier 8-bit systems, which had much more limited memory capacity and bus bandwidth. And it is not as if these systems engineers were aiming at merely imaginary goals, either. They were already becoming acquainted with sophisticated systems like the Xerox Alto, with its large bitmap display, mouse, and GUI abilities. And they were also already aware that gaming would be a major part of the consumer software market, in which sophisticated graphics and sound capabilities would be a key hardware differentiator. &lt;strong&gt;NOTE&lt;/strong&gt;: I'm talking about systems engineers who were focused on computing's future here. The IBM PC's systems engineers, and others seeking mass-market business computer appeal, had a different agenda which was more distinctly looking backwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is where the rubber meets the road because these forward looking systems engineers were designing systems in which the &quot;forced&quot; memory management architecture appearing in the Z8000 (and the 8086) were mostly a hindrance to their designs. This is mostly because managing large data structures, including bitmaps that could exceed the 64K segment size of the Z8000, was integral to the advanced features they wanted to deliver. They wanted access to a lot more memory (compared to 8-bit systems) and they wanted the added freedom to design their systems so that access to that big memory by both the CPU and external hardware (e.g. DMA) wasn't subjected to complicated memory management and segmentation constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can see the affects of the above engineering thought process in the products you mention. Can you imagine trying to design the Amiga, with its 25 DMA channels, to coexist cleanly with a CPU architecture that needed to deal with CHIP memory segment boundaries? That's the extreme case; but even the simpler hardware of the Macintosh having to design its memory map and large bitmap display buffers around the constraints of segmentation would have added needless hardware complication and an extra burden for programmers to worry about. Contrast this with the simple, flat, large (24-bit today, 32-bit tomorrow) addressing of the 68000!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The case of the Sun-1 is somewhat unique. Here the designers were aiming toward a sophisticated OS (Unix) that would enforce memory protection, and they needed a sophisticated MMU to support it. But, at least in the minds of the Sun engineers, the Z8000's integral MMU was not the best approach. So they opted for the flat addressing of the 68000 and added their own custom external MMU. This was a common approach for the earliest workstations using the 68000 and 68010.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could make an argument that the problem with the Z8000 was that it was just &quot;&lt;strong&gt;ahead of its time&lt;/strong&gt;&quot; in adding fairly sophisticated memory management features integral to the CPU. Perhaps this aggressive attempt at innovation was partially responsible for the bugs that plagued the Z8000 early on. In any event, for the engineers designing the Atari, Amiga, and Mac, those features were not helpful as none of them had any aspirations to run an OS as sophisticated as Unix. And for the early graphical workstation engineers, the Z8000 just wasn't powerful enough on its own to satisfy their CPU needs.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-11-03T00:42:55.863" LastActivityDate="2018-11-03T00:42:55.863" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8143" PostTypeId="2" ParentId="6742" CreationDate="2018-11-03T01:23:19.543" Score="2" Body="&lt;p&gt;While both contain a standard floppy drive mechanism, Amiga external drives also have a control circuit which latches the /MTR signal and detects the drive. Without this circuit an Amiga will not know that the drive is connected or be able to keep the motor going between accesses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apart from changing the plug, to make an external Atari ST drive compatible with Amiga you would have to add a circuit like &lt;a href=&quot;http://www.rowery.olsztyn.pl/wiki/autorzy/narg/amiga/dysk&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;:-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/68FDj.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/68FDj.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To use an Amiga external drive on an ST you could bypass its control circuit with a double pole switch which disconnects it from the /RDY and /MTR lines, and connects /MTR to /MTRX. You would also have to connect an external power supply, and of course make a cable to convert from 14 pin DIN to 23 pin D. &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2018-11-03T01:23:19.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8144" PostTypeId="1" CreationDate="2018-11-03T07:21:18.000" Score="5" ViewCount="563" Body="&lt;p&gt;The famous &lt;a href=&quot;https://en.wikipedia.org/wiki/Konami_Code&quot; rel=&quot;noreferrer&quot;&gt;Konami cheat code&lt;/a&gt; is the sequence&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;up, up, down, down, left, right, left, right, B, A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;What original algorithm was used to detect that the code was entered?&lt;/em&gt;  I can think of two possible ways:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Keep an array of the last button presses.  When a new button is pressed, add it to the array and check for a matching sequence.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use a finite state machine.  When a new button is pressed, determine the next state based on the current state and which button was just pressed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2018-11-03T20:54:50.583" Title="How did Konami games recognize the famous cheat code?" Tags="&lt;nes&gt;&lt;snes&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8145" PostTypeId="2" ParentId="8144" CreationDate="2018-11-03T20:54:50.583" Score="4" Body="&lt;p&gt;Of course, there are many ways in which this could be implemented. So the question is most interesting if we consider the earliest usage for Gradius on the NES. For an 8-bit console like the NES, the programmer would take into account both execution and space efficiency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The algorithm is trivially implemented using only two bytes of RAM and some simple bitwise shift and OR operations. This would seem appropriately efficient for the NES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NES has 4 directions so Up, Down, Left, and Right are each represented by 2 bits. This means the the full sequence corresponding to UUDDLRLR can be stored in two bytes. So in the ROM we have the value for that sequence and we need to OCCASIONALLY compare that known sequence with the last 8 directional inputs to see if it matches. The last 8 inputs would be stored in the 2 bytes of RAM, using shift and OR to remove the oldest and add the newest each time there is a new input. It's basically a 16 bit array, and we are adding the newest 2-bits at one end while removing the oldest 2-bits at the other end using our shift + OR operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The comparison between the last 8 inputs and the secret code in ROM is only required when the user presses &quot;A&quot; after having pressed &quot;B&quot;. This is best described as a really simple Finite State Machine having only two states.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;State 'B': activate when the input is B.&lt;/li&gt;&#xA;&lt;li&gt;State 'Check': If State 'B' is active, and input is A, then activate.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So when you activate the 'Check' state, you just need to compare the two bytes representing the last 8 direction inputs with the secret ROM code for UUDDLRLR. If it matches, then the code checks and you grant the cheat/reward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is only a little additional logic for resetting  directional input buffer to $0000 after an A input, and for toggling whether State 'B' is active or not. You might use an additional single-byte variable for that, or you might save memory space by using some branching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All said, it can be done this way with little execution overhead and very little RAM, which is good for the NES. And you were on the right track, but I think the solution is really a combination of a simple array for the directions and a simple FSM for the A/B buttons.   &lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-11-03T20:54:50.583" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8146" PostTypeId="1" AcceptedAnswerId="8156" CreationDate="2018-11-03T21:09:50.697" Score="9" ViewCount="1027" Body="&lt;p&gt;Some languages like Python, Lua, and Tcl are designed with the intention that you can easily embed the interpreter into some other native program.  For example, many VFX applications like Nuke, Maya, and Houdini have an embedded Python script editor that executes the Python scripts in-process so they can manipulate the host application.  Lua is popular as a language embedded in some games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the first such scripting language that was specifically intended to be hosted inside of some other large host process, rather than just being invoked externally by shelling out the way you might execute a typical Bash or Perl script?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Later edit:  LISP was mentioned in the comments, but not specifically as an answer.  I have accepted the Forth answer as being a really interesting language that wound up in all sorts of interesting places, was quite early, and met all the requirements of what I was looking for.  That said, it seems LISP definitely at least deserves the &quot;honorable mention&quot; that it got in the comments, and pre-dates forth quite a bit.&lt;/p&gt;&#xA;" OwnerUserId="5309" LastEditorUserId="6659" LastEditDate="2019-03-20T13:00:30.797" LastActivityDate="2019-03-20T19:49:44.570" Title="First language designed to be embedded?" Tags="&lt;programming&gt;" AnswerCount="4" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="8147" PostTypeId="1" AcceptedAnswerId="8152" CreationDate="2018-11-03T23:09:07.337" Score="22" ViewCount="5123" Body="&lt;p&gt;The way I understand it, ROMS are like virtual games, and emulators are like virtual game consoles, or handhelds. What I don't understand is how there are ROMs for arcade games, which don't have removable cartridges. All arcade machines are different (at least to my knowledge), so wouldn't an arcade ROM have to record the entire arcade machine's hardware? And if it does, what is the emulator for?&lt;/p&gt;&#xA;" OwnerUserId="10751" LastActivityDate="2019-01-12T13:45:58.730" Title="How do arcade ROMs work" Tags="&lt;emulation&gt;&lt;rom&gt;&lt;arcade&gt;" AnswerCount="6" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8148" PostTypeId="2" ParentId="8147" CreationDate="2018-11-03T23:29:28.377" Score="7" Body="&lt;p&gt;The ROM is the software, in all cases. It stands for &quot;Read Only Memory&quot; and it stores the static code and the data needed for the game (i.e. the Software).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The arcade cabinet is the hardware. It's the same as any computer or game console, and so it needs Software (ROM) to do anything useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An &quot;emulator&quot; is a piece of software that runs on one piece of hardware (i.e. your PC) and emulates another piece of hardware (old computer, game console, arcade machine, etc.). Without these definitions, I can see where it might be confusing.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-11-03T23:29:28.377" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8149" PostTypeId="2" ParentId="8147" CreationDate="2018-11-04T01:01:48.333" Score="39" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The way I understand it, ROMs are like virtual games,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. ROMs are a piece of hardware storing a bit image. Like a disk, a tape or a punch card. It holds an &lt;em&gt;image of the game's software.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and emulators are like virtual game consoles, or handhelds.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Basically yes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What I don't understand is how there are ROMs for arcade games, which don't have removable cartridges.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;These machines still have ROMs. Where else should the game's software be stored (*1) and without software, there would be no game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your confusion might come from a different use of the term ROM in a gamer (emulation) context compared to real hardware. With emulators the term ROM is used in a somewhat translated and abbreviated way. Instead of saying &lt;em&gt;'file with the ROM image of game XYZ'&lt;/em&gt; people just say &lt;em&gt;'XYZ ROM'&lt;/em&gt;. Within this subculture it is a mostly understandable term, outside it may seed confusion with the basic term ROM describing a piece of hardware, not the image within (copied into a file).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;All arcade machines are different (at least to my knowledge),&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes and no. Some arcade boards could be used for different games - when fitted with new ROMs (for software but also graphics encoding as well (*2)).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;so wouldn't an arcade ROM have to record the entire arcade machine's hardware?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A ROM does not record the hardware - nor does it record anything.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And if it does, what is the emulator for?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For running the game stored in the ROM? Someone has to 'do' the hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Hmm...&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;thinking of it, &lt;em&gt;could it be that your confusion comes from playing various games of different machines on MAME without the need to specify some hardware and have MAME magically running whatever image it gets presented?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MAME is, as the name &quot;&lt;strong&gt;M&lt;/strong&gt;ulti &lt;strong&gt;A&lt;/strong&gt;rcade &lt;strong&gt;M&lt;/strong&gt;achine &lt;strong&gt;E&lt;/strong&gt;mulator&quot; implies, an emulator made to emulate many different machines. In its actual implementation it features a system of databases to identify various game images via fingerprinting. It's basically doing some checks/checksums over the image and then looking up if the result is known. If so, the information about what machine and which settings are needed is retrieved from the database, and used to configure the needed emulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using fingerprinting and its database enables MAME to offer zero effort configuration without falling into a copyright trap of delivering the images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this will of course not work with a game image unknown to its database. In this case one can setup several configuration files with all the needed information and run it... except, that's something 99.99% of all users never experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Emulator-wise, MAME is a framework offering an API to handle synchronized emulation of specific emulators for hardware (like CPUs, graphic controllers and so on), which are configured to act like the machine in question. If there is new hardware to be emulated, programmers still have to sit down and add a program for each missing piece and a configuration for a whole machine (or several thereof), but no longer build the framework.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After about 20 years of development, the number of components without a fitting emulation is rather small.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, some do have different means, but that's a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Some even had a cartridge system to make them fast field upgradeable.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-01-12T13:45:58.730" LastActivityDate="2019-01-12T13:45:58.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8150" PostTypeId="2" ParentId="8146" CreationDate="2018-11-04T02:30:49.833" Score="7" Body="&lt;p&gt;TCL was invented in the late 1980s explicitly as an embedded command language.  Its author, John Ousterhout, claims embeddability as a 'unique aspect' (at the time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.tcl.tk/about/history.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.tcl.tk/about/history.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2018-11-04T02:30:49.833" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8151" PostTypeId="2" ParentId="8146" CreationDate="2018-11-04T03:20:29.573" Score="12" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rexx&quot; rel=&quot;noreferrer&quot;&gt;REXX&lt;/a&gt; is a scripting language designed in the late 70s/early 80s, and which has frequently been used in embedded applications.  Its design goals are very similar to TCL and Python's -- to provide an easily extensible language that can be used to integrate functions provided by a variety of third-party software easily.  That it is also easy to embed in that third-party software is essentially a by-product of that decision (as it is in Python's case too, although TCL did specifically intend that outcome in its design).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;REXX's most popular incarnation was almost certainly &lt;a href=&quot;https://en.wikipedia.org/wiki/ARexx&quot; rel=&quot;noreferrer&quot;&gt;ARexx&lt;/a&gt;, the standard scripting language of the Amiga OS, and which was first released the year before work began on TCL.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-11-04T03:20:29.573" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8152" PostTypeId="2" ParentId="8147" CreationDate="2018-11-04T04:21:11.763" Score="21" Body="&lt;p&gt;The other answers already covered a lot, but there is something else that is important but which hasn't already been addressed in detail:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Despite appearances to the contrary, arcade machines are quite frequently not built with unique hardware.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, &lt;a href=&quot;https://en.wikipedia.org/wiki/Namco_Galaga&quot; rel=&quot;noreferrer&quot;&gt;the hardware originally designed for Galaga&lt;/a&gt; was used for several additional games, including well known titles like &lt;a href=&quot;https://en.wikipedia.org/wiki/Dig_Dug&quot; rel=&quot;noreferrer&quot;&gt;Dig Dug&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Xevious&quot; rel=&quot;noreferrer&quot;&gt;Xevious&lt;/a&gt;.  The system can be changed to play a different game by taking the ROM chips out of its board and putting different ones in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting in the late 90s/early 2000s, many arcade systems were based either on PC hardware or rebadged consoles (e.g. you'll find quite a few arcade machines based on PlayStation hardware from various vintages), so the concept of a ROM for these is much more like a standard console emulator, rather than actually being ROM chips as in the older systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, while in your question you assume that arcade machines don't have removable cartridges, in actual fact at least in many instances there is a concept very similar to the cartridge of a console system -- the only difference is that it isn't exposed to the user, and only really exists to simplify design and production of multiple games that require hardware with similar capabilities.  But fundamentally, it works the same way: the majority of the hardware in the machine stays constant, but you can pull a module out of it and plug and new one in, and it will change what game is played by the machine.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-11-04T04:27:16.770" LastActivityDate="2018-11-04T04:27:16.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8153" PostTypeId="2" ParentId="8147" CreationDate="2018-11-04T05:52:51.880" Score="10" Body="&lt;p&gt;A ROM, short for Read-Only Memory, is computer chip with bits stored in it. Unlike RAM chips, the bits are persistent (remain when the power is turned off) and (usually) require a special programming process to change them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An arcade machine of 80s or 90s vintage is just a computer (often a custom-built, somewhat special-purpose computer) which reads the code for the game from these ROM chips and executes it. The ROM chips may be plugged directly into the system board or plugged into a cartridge that's plugged into the system board. In the latter case these work like 80s and 90s home video games such as the Nintendo NES, but you don't usually see the cartridge because it's locked inside the cabinet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the ROMs just contain bits, these can be stored in a different way; in the emulation community the sequence of bits is often stored in a file. This is called a &quot;ROM image,&quot; but some people may just call it a &quot;ROM&quot; for short.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So no, a ROM in this sense is not really a &quot;virtual game&quot; any more than a PlayStation disc is a &quot;virtual game&quot;; a more reasonable definition is that it &lt;em&gt;is&lt;/em&gt; the game, or at least the non-hardware part of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware, emulated or original, when applied to the code from the ROM, runs the game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This explanation has been simplified to better communicate the main point; don't take this as exactly describing all systems.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2018-11-04T22:31:51.187" LastActivityDate="2018-11-04T22:31:51.187" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8154" PostTypeId="2" ParentId="4925" CreationDate="2018-11-04T09:07:28.113" Score="2" Body="&lt;p&gt;You've already read the &lt;a href=&quot;http://wilsonminesco.com/6502primer/addr_decoding.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Address Decoding&lt;/a&gt; page of the 6502 Primer, so you have the basics of what you need to understand how to handle reading/writing multiple devices. Let's do a quick summary of what's going on with address decoding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Roughly, when the CPU intends to read an address, it places it on the its &lt;code&gt;A0-15&lt;/code&gt; pins, sets &lt;code&gt;R/WB&lt;/code&gt; high, waits around for a bit, and then reads the data bus for the value. It neither knows nor cares what what put the data on the bus or how it was selected. In particular, it doesn't know or care what addresses anything else saw; it just knows what it put out on its own address pins.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;A Simple Configuration&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;In a really simple configuration of 32 KB RAM and 32 KB ROM, one could set up the decoding as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CPU &lt;code&gt;A0-14&lt;/code&gt; connected directly to RAM &lt;code&gt;A0-14&lt;/code&gt; and ROM &lt;code&gt;A0-14&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;CPU &lt;code&gt;A15&lt;/code&gt; connected to:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RAM &lt;code&gt;/CS&lt;/code&gt; (chip select) pin, and&lt;/li&gt;&#xA;&lt;li&gt;an inverter, which in turn is connected to:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ROM &lt;code&gt;/CS&lt;/code&gt; pin, which sees low when &lt;code&gt;A15&lt;/code&gt; is high and high when &lt;code&gt;A15&lt;/code&gt; is low.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When the CPU reads address &lt;code&gt;$7FFF&lt;/code&gt;, both the RAM and ROM will see &lt;code&gt;$7FFF&lt;/code&gt; on their address pins, &lt;code&gt;A0-14&lt;/code&gt;. (Neither has an &lt;code&gt;A15&lt;/code&gt; pin because they're only 32K devices.) But &lt;code&gt;/CS&lt;/code&gt; will be low for the RAM because &lt;code&gt;A15&lt;/code&gt; is low, causing it to read address &lt;code&gt;$7FFF&lt;/code&gt; and put its value on the data bus, and &lt;code&gt;/CS&lt;/code&gt; will be high for the ROM (because it gets inverted &lt;code&gt;A15&lt;/code&gt;) which means the ROM will do nothing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When CPU reads &lt;code&gt;$FFFF&lt;/code&gt;, again both the RAM and ROM will see &lt;code&gt;$7FFF&lt;/code&gt; on their address pins (because neither has an &lt;code&gt;A15&lt;/code&gt; pin; they see only the bottom 15 bits of the address). But in this case &lt;code&gt;/CS&lt;/code&gt; will be high for the RAM (because &lt;code&gt;A15&lt;/code&gt; is high) and low for the ROM (because inverted &lt;code&gt;A15&lt;/code&gt; is low) and this time the RAM will ignore the access and the ROM, being selected, will place the contents of its location &lt;code&gt;$7FFF&lt;/code&gt; on the data bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key takeaway here is that each device has its own address and select pins, and what they see there and how they react to it depends on how the address decoding logic is set up. The devices don't necessarily see the actual address on the CPU's address bus: in the ROM read example above it saw address &lt;code&gt;$7FFF&lt;/code&gt; even though the CPU's address bus had &lt;code&gt;$FFFF&lt;/code&gt; (an address that the ROM doesn't have) on it.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Bank Switching&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Now let's say you have two 32K RAM chips and a 32K ROM chip. Since this is 96K of memory, it can't all be accessed directly via setting &lt;code&gt;A0-15&lt;/code&gt;, since that gives you only 64K addresses. But what you could do is have another device that stores a bit determining whether the top half of memory will access the RAM or ROM. (For simplicity we'll leave out here the details of exactly how you talk to that device.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calling that the 'bank bit', you could then set up your decoding as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;A0-14&lt;/code&gt; connected directly to &lt;code&gt;A0-14&lt;/code&gt; of RAM0, ROM and RAM1.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;A15&lt;/code&gt; connected:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;directly to &lt;code&gt;/CS&lt;/code&gt; (chip select) of RAM0.&lt;/li&gt;&#xA;&lt;li&gt;to an inverter whose output is connected to:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;bank bit device &lt;code&gt;/CS&lt;/code&gt;. That in turn has separate connections to:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ROM &lt;code&gt;/CS&lt;/code&gt;, held high when the bank bit device is not selected, and&lt;/li&gt;&#xA;&lt;li&gt;RAM1 &lt;code&gt;/CS&lt;/code&gt;, also held high when the bank bit device is not selected.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When the bank bit device is selected:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If the bank bit is 0, it lowers ROM &lt;code&gt;/CS&lt;/code&gt;, selecting it, and leaves RAM1 &lt;code&gt;/CS&lt;/code&gt; high.&lt;/li&gt;&#xA;&lt;li&gt;If the bank bit is 1, it leaves ROM &lt;code&gt;/CS&lt;/code&gt; high and lowers RAM1 &lt;code&gt;/CS&lt;/code&gt;, selecting it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now if the system starts on reset with the bank bit set to 0, reads will work just as in the simple configuration above. But if your code sets the bank bit to 1 (though magical undescribed means in this example, but via more decoding and an I/O address in the real world), the CPU will now be reading RAM1 in the higher addresses. In this way you can switch back and forth between ROM and RAM1 under CPU control whenever you like.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;More Complexity&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Obviously this general idea can be expanded to any degree you like: given any arbitrary number of 32K memories you can use &lt;code&gt;A0-14&lt;/code&gt; as the address for each device, and &lt;code&gt;A15&lt;/code&gt; and other information external to the address bus to decide which device gets accessed. And of course you are not restricted to 32K banks: you can do this remapping in arbitrarily small chunks, to the point where a sufficiently complex device (a full memory management unit) might translate all of &lt;code&gt;A0-A15&lt;/code&gt; from the CPU to any arbitrary addresses for other devices that vary depending on its current settings. (E.g., at one point in time a CPU read of &lt;code&gt;$FFFF&lt;/code&gt; might read &lt;code&gt;$00FF&lt;/code&gt; of RAM7, and at another point read &lt;code&gt;$1234&lt;/code&gt; of RAM19.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that's address decoding: mapping arbitrary addreses on the CPU's &lt;code&gt;A0-A15&lt;/code&gt; pins to any other arbitrary addresses on any other devices.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Timing&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Address decoding logic doesn't work instantly; it takes time for the devices doing the address mapping (no matter how simple) detect the signals from the 6502, translate them, and set up the desired output signals. For example, the inverter we used above might be a &lt;a href=&quot;http://www.ti.com/lit/ds/symlink/sn74ls04.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;74LS04&lt;/a&gt; which takes up to 5 ns to produce the proper inverted output after its input changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of the remapping has to be done quickly enough that the device being accessed can still have the data on the data bus by the time the 6502 is going to read it. The &lt;a href=&quot;https://laughtonelectronics.com/Arcana/Visualizing%2065xx%20Timing/Visualizing%2065xx%20CPU%20Timing.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visual Guide to 65xx CPU Timing&lt;/a&gt; describes this in a lot more detail; I find the section &quot;How the CPU Interacts With the Outside World&quot; and its first diagram very helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At lower speeds and with simple address decoding there are usually no problems, but at 4 MHz (which you mentioned you were aiming for) the time it takes to do the decoding could well become a problem, especially if you're using the rising edge of φ2 to enable things. You'll notice in the diagram I mentioned above that at 5 MHz you have only 90 ns between φ2 going high and when your devices must have their data stable on the data bus: if you're using a &lt;a href=&quot;https://datasheet.datasheetarchive.com/originals/scans/Scans-067/DSA2IH00212377.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;74LS610&lt;/a&gt; it may need 40 ns to do its thing, leaving not a lot of time for your device to read the address and set the data values. (That exact number may be wrong because I'm probably not reading the data sheet properly, but but you get the general idea. All the access numbers for that part are in that range.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So think about how much decoding you really need! There's a lot of good discussion of both decoding and timing in &lt;a href=&quot;http://forum.6502.org/viewtopic.php?f=12&amp;amp;t=3620&amp;amp;sid=4c12bb500e4de4611e2dd902aed40ec7&quot; rel=&quot;nofollow noreferrer&quot;&gt;this forum thread&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2018-11-04T09:07:28.113" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8155" PostTypeId="2" ParentId="8147" CreationDate="2018-11-04T09:16:47.843" Score="4" Body="&lt;p&gt;The arcade ROM contains only the software that runs on the arcade machine. The hardware part is written into the emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. Arcade machines don't have removable cartridges but they do have removable ROMs. This means arcade motherboards can support multiple games just by replacing the ROM chip(s) (see Jules' answer for examples).&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2018-11-04T15:04:49.763" LastActivityDate="2018-11-04T15:04:49.763" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8156" PostTypeId="2" ParentId="8146" CreationDate="2018-11-04T14:16:58.650" Score="16" Body="&lt;p&gt;Probably &lt;a href=&quot;https://en.wikipedia.org/wiki/Forth_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;Forth&lt;/a&gt;. Forth was initally a stack of Fortran punch cards Chuck Moore would carry around with him in the late 60s to simplify his programming jobs, which eventually evolved into it's own language (or a native implementation). However a Forth is so simple it can be implemented in practically any language, and so powerful it is worth doing. The popularity is currently at what I would assume to be an all-time low, but it's picking up again. In the 70s and 80s you could get a Forth for pretty much any system and embed one in any application. &lt;/p&gt;&#xA;" OwnerUserId="11073" LastActivityDate="2018-11-04T14:16:58.650" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8157" PostTypeId="1" AcceptedAnswerId="8163" CreationDate="2018-11-04T15:07:17.197" Score="19" ViewCount="6204" Body="&lt;p&gt;The rise in popularity of home PCs with modems in the U.S. coincided with the rise of America Online. Of course, many of us in America were online for years before this - using Compuserve, GEnie, and BBS's mostly. But for mainstream America first acquiring home computers in the early-1990s, AOL was basically the &quot;killer app&quot;. Subsequently, this national &quot;addiction&quot; to AOL led to rapid growth in Internet as most Americans got their introduction to the Internet via AOL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the uniquely American roots of AOL, my assumption is that it was not so dominant or important in Europe and Asia as it was here in the U.S. So what online services, if any, led the way in other regions' inhabitants deciding to get online in the first place, and eventually get on the Internet?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2021-02-24T12:21:06.163" Title="What was the equivalent of &quot;America Online&quot; (AOL) outside America?" Tags="&lt;internet&gt;" AnswerCount="9" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8158" PostTypeId="2" ParentId="8157" CreationDate="2018-11-04T16:31:59.087" Score="21" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Given the uniquely American roots of AOL,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why should AOL be anymore unique American than a C64 - selling quite well in all of Europe and some other parts.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;my assumption is that it was not so dominant or important in Europe and Asia as it was here in the U.S. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It was. As by the amount of xxx-hours-free-internet-CDs attached to magazines and dropped in each mailbox. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So what online services, if any, led the way in other regions' inhabitants deciding to get online in the first place, and eventually get on the Internet?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Online systems for average users started in Europe around 1980. For example, GeoNet in Germany - which in some sense became the prototype for character-based online systems. In fact, the year 1980 was in Germany a serious backlash for BBS systems, as local calls where no longer free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1984/85 is when the BBS scene became real vibrant, with several networks popping up. Like &lt;a href=&quot;https://de.wikipedia.org/wiki/MausNet&quot; rel=&quot;noreferrer&quot;&gt;Mausnet&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Z-Netz&quot; rel=&quot;noreferrer&quot;&gt;Zerberus&lt;/a&gt; - &lt;a href=&quot;https://en.wikipedia.org/wiki/FidoNet&quot; rel=&quot;noreferrer&quot;&gt;Fido&lt;/a&gt; as well. Especially Zerberus or &lt;a href=&quot;https://de.wikipedia.org/wiki/Datei:Z-Netz_ZMapMap_1993_01.svg&quot; rel=&quot;noreferrer&quot;&gt;Z-Net&lt;/a&gt; as it was called later on, played an important role, as it was the first system that allowed the use of a common infrastructure for vastly different content systems. Unlike Fido, where such systems had to setup their own network structure. Similar developments happened in other European countries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In parallel (almost) each European countries telecom offered some online system based around the idea of using a TV set as terminal. Success varied greatly: where the UK &lt;a href=&quot;https://en.wikipedia.org/wiki/Prestel&quot; rel=&quot;noreferrer&quot;&gt;PRESTEL&lt;/a&gt; barely attracted 100k users, did the German &lt;a href=&quot;https://en.wikipedia.org/wiki/Bildschirmtext&quot; rel=&quot;noreferrer&quot;&gt;Bildschirmtext&lt;/a&gt; peak out at 1 Million users - about the time the service got merged into a new one with internet integration. The French &lt;a href=&quot;https://en.wikipedia.org/wiki/Minitel&quot; rel=&quot;noreferrer&quot;&gt;Minitel&lt;/a&gt; eventually did beat them all with 15 million users - that's 25% of the total population, including babies and grannies. It even existed in parallel for several years after general availability of internet access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar systems where available all over Europe:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bildschirmtext in Germany and Austria&lt;/li&gt;&#xA;&lt;li&gt;Ibertex in Spain&lt;/li&gt;&#xA;&lt;li&gt;Minitel in France and Belgium&lt;/li&gt;&#xA;&lt;li&gt;Teledata in Denmark,&lt;/li&gt;&#xA;&lt;li&gt;Teleguide in Sweden&lt;/li&gt;&#xA;&lt;li&gt;TeleSampo in Finland&lt;/li&gt;&#xA;&lt;li&gt;Viditel in the Netherlands&lt;/li&gt;&#xA;&lt;li&gt;Videotel in Italy&lt;/li&gt;&#xA;&lt;li&gt;Videotex in Switzerland&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And so on. Most systems followed either the French or German standard. For example the Austrian, Danish, Spanish and Swiss systems where German BTX.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike often imagined, looking back they weren't confined to set-top boxes and TVs but also included (home-)computers early on. &lt;a href=&quot;http://www.zimmers.net/cbmpics/ouser5.html&quot; rel=&quot;noreferrer&quot;&gt;The BTX module by Commodore&lt;/a&gt; for the C64 maybe being the most prominent example - except it wasn't the only one. There were almost a dozen different interface solutions for the C64 alone. And many more for other machines, including Amiga, Atari ST or as well the PC. While in France databases, with the phone book as free example could be considered the door opener, Germany's killer application for BTX was online banking (*1). The eventual reason why the system was kept alive for almost 10 years after no longer accepting new customers - it was essential for many banks and their customers :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These systems where the big players during the 1980s into 1990s. About the time when national telecoms started to offer internet access in the early 90s, AOL also entered the new liberalized markets and became a considerable player - alas not an overwhelming success as in the US. For one, the still well-performing Btx/Minitel systems were only slowly declining, while the internet, thanks to the WWW, became the choice for progressive users. The time of walled gardens was gone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the rest is history.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Keep in mind, we are talking early 1980s. That's pretty early. When was the first time you used online banking on your account?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-11-05T03:43:44.520" LastActivityDate="2018-11-05T03:43:44.520" CommentCount="25" ContentLicense="CC BY-SA 4.0" />
  <row Id="8159" PostTypeId="1" AcceptedAnswerId="8164" CreationDate="2018-11-04T17:40:51.383" Score="14" ViewCount="3190" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wVLIp.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wVLIp.jpg&quot; alt=&quot;fanfold paper&quot;&gt;&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Fanfold_paper&quot; rel=&quot;noreferrer&quot;&gt;Fanfold paper&lt;/a&gt; was commonly used for computer printouts from the 1950s to the 1980s.  What was the typical thickness of such paper?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;The answer must be a measure of thickness, not weight.&lt;/strong&gt;  I am well aware that paper is typically sold by weight.  Nonetheless, that is not at all what the question is asking.&lt;/li&gt;&#xA;&lt;li&gt;Paper is sold in various thicknesses.  I'm looking for the kind that was typically used for program listings, the cheap &quot;green-bar&quot; stuff, like in the picture above.&lt;/li&gt;&#xA;&lt;li&gt;Specialty paper such as carbon- or carbonless-forms or checks should be excluded.&lt;/li&gt;&#xA;&lt;li&gt;The pages must be continuous (&lt;em&gt;un&lt;/em&gt;-separated) when measured.  So, simply stating the thickness of non-fanfold paper is not acceptable.&lt;/li&gt;&#xA;&lt;li&gt;There are many ways to express the answer, such as the thickness of one page, the thickness of 1000 pages, how many pages in one inch, and so on.  Use whatever method you want, as long as &lt;strong&gt;the answer clearly specifies how the measurement is being made&lt;/strong&gt;.  Either inches, cm, or mm are acceptable units.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A printout of the Apollo spacecraft source code:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/DL3vT.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DL3vT.jpg&quot; alt=&quot;Apollo software listings&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2018-11-04T18:09:41.417" LastActivityDate="2018-11-06T05:06:53.157" Title="What was the typical thickness of fanfold printer paper?" Tags="&lt;printer&gt;" AnswerCount="9" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="8160" PostTypeId="2" ParentId="8157" CreationDate="2018-11-04T17:46:43.857" Score="9" Body="&lt;p&gt;Can only speak for myself: I never wanted the limited, cut-down internet access provided by AOL or my national telco. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM offered the first &quot;real&quot;, non-proprietary internet access as a package with OS/2 Warp that got me into the internet. You could use the IAK (Internet Access Kit) that was the killer app of Warp and buy a monthly service through IBM network services (The &quot;IBM Global Network&quot;). If you were lucky to have a PoP near you, it was actually one of the cheaper options to get full unlimited internet access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before that, I was using Fidonet internet gateways for mail.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-11-04T18:08:38.567" LastActivityDate="2018-11-04T18:08:38.567" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8161" PostTypeId="2" ParentId="8159" CreationDate="2018-11-04T17:54:28.750" Score="0" Body="&lt;p&gt;The fanfold paper I used varied from about 100 g/m², in stuff sold for home computer use, and thus for writing letters, to really thin, maybe 40 g/m², at penny-pinching employers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The g/m² unit means &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Grammage&quot; rel=&quot;nofollow noreferrer&quot;&gt;grams per square meter&lt;/a&gt;&quot;, which is the standard measure for paper weight in the UK and the EU. Ordinary photocopier paper is usually 80 g/m², nice letterhead paper is up to 200gsm. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="6659" LastEditDate="2018-11-05T19:22:54.257" LastActivityDate="2018-11-05T19:22:54.257" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8162" PostTypeId="2" ParentId="8159" CreationDate="2018-11-04T18:00:40.317" Score="5" Body="&lt;p&gt;In the US, paper is normally measured in pounds (lbs.) with the actual measurement defined a little differently depending on the type of paper - &quot;cover&quot;, &quot;text&quot;, etc. That is a very long discussion, and not that relevant here, &lt;a href=&quot;https://www.jampaper.com/paper-weight-chart.asp&quot; rel=&quot;noreferrer&quot;&gt;here is one sample chart comparing types of paper/weights&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The end result is the usual way to refer to office paper, including, in my experience, fan-fold computer printer paper, is in lbs. for &quot;bond&quot; paper, with 20 lbs. being &quot;typical ordinary copier paper&quot;, 15 lbs. being &quot;lightweight&quot; and 24 lbs. being &quot;a little heavier, often for stationery&quot;. I remember typically 15 or 20 lbs. for fan-fold paper. You wouldn't normally go heavier than 20 lbs., but sometimes you would go lighter to save money and space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.staples.com/Staples-Green-Bar-Computer-Paper-14-7-8-x-11-1-150-Box-ST489121-177163/product_489121&quot; rel=&quot;noreferrer&quot;&gt;Staples still sells green-bar paper&lt;/a&gt; and it is 15 lbs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as overall thickness, a ream (500 pages) of paper is about 2&quot; thick, or ~ 250 pages /inch. 15lb. paper should be ~ 3/4 as thick, or around 330 pages/inch.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2018-11-04T18:00:40.317" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8163" PostTypeId="2" ParentId="8157" CreationDate="2018-11-04T18:17:19.173" Score="22" Body="&lt;p&gt;In the UK, CompuServe, &lt;a href=&quot;https://en.wikipedia.org/wiki/CIX&quot; rel=&quot;noreferrer&quot;&gt;CIX&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Demon_Internet&quot; rel=&quot;noreferrer&quot;&gt;Demon Internet&lt;/a&gt; were the most influential early ISPs, but there were plenty more, such as Dircon, &lt;a href=&quot;https://en.wikipedia.org/wiki/Pipex&quot; rel=&quot;noreferrer&quot;&gt;Pipex&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Freeserve&quot; rel=&quot;noreferrer&quot;&gt;Freeserve&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Freeserve built by far the largest customer base, and may be the nearest UK equivalent to AOL in the US. However, it was rather different in that it gave you access to the Internet in general, with no &quot;walled garden.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AOL had customers, but was not terribly successful. The determination its UK marketing team had to make sure everyone got at least two AOL CDs every month was counter-productive, in that if you keep trying to force something that's free on the British, they'll assume it's worthless. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2018-11-04T20:22:44.570" LastActivityDate="2018-11-04T20:22:44.570" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8164" PostTypeId="2" ParentId="8159" CreationDate="2018-11-04T18:18:38.987" Score="37" Body="&lt;p&gt;The paper I used in my dot-matrix printers (and still buy and use today) has 60g/m2 for the cheaper green-lined type and 70g/m2 for the pure white version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a rough guideline in the paper industry to calculate paper thickness from weight per square meter: t = 1.3 * wsqm / 1000&lt;/p&gt;&#xA;&#xA;&lt;p&gt;60g/m2 roughly ends up at 0.08mm, 70g/m2 around 0.09mm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Just verified the pure white (I had a page at hand) with a micrometer: it is indeed just a tad under 0.09mm per page.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-11-04T19:02:56.177" LastActivityDate="2018-11-04T19:02:56.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8165" PostTypeId="2" ParentId="8147" CreationDate="2018-11-04T19:46:16.587" Score="1" Body="&lt;p&gt;A ROM cartridge is a cartridge that contains ROM chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although arcade machines do not have ROM cartridges, they do have ROM chips. You PC or Laptop also has ROM chips (usually EEPROMs now; electronically erasable &amp;amp; programmable ROM. These are the chips you rewrite when you do a BIOS update).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A ROM doesn't store the entire architecture of the machine it runs on,any more than a software CD doesn't include a copy of your PC. If you try to run it on a different processor than it's made for, the bytes in the ROM mean different instructions, so it won't run. I was going to say &quot;it assumes you have the right CPU &amp;amp; hardware&quot;, but it doesn't assume anything. It's just a series of bytes. How those bytes are interpreted (music, images, games) is up to the device.&lt;/p&gt;&#xA;" OwnerUserId="8797" LastActivityDate="2018-11-04T19:46:16.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8166" PostTypeId="1" AcceptedAnswerId="8177" CreationDate="2018-11-04T20:20:11.793" Score="11" ViewCount="2124" Body="&lt;p&gt;As I understand, neither the Amstrad CPC or the Sinclair Spectrum had any support for hardware scrolling, and arcade conversions struggled compared to the C64 or NES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, isometric  3D games such as 'The Great Escape' leveraged the fast Z80 chip on the Spectrum to give an impression of smooth scrolling in 8 directions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagine this was due to the Spectrum's small video memory map and some efficient double buffering. These games performed very poorly on the Amstrad machines. Why was this? Poor programming, or other limitations of the CPC?&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="4921" LastEditDate="2018-11-04T20:22:16.507" LastActivityDate="2021-04-02T07:52:38.283" Title="Why was the Amstrad CPC slow at scrolling" Tags="&lt;zx-spectrum&gt;&lt;cpc&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8167" PostTypeId="2" ParentId="8159" CreationDate="2018-11-04T20:26:51.837" Score="23" Body="&lt;p&gt;There is an old carboard box that used to contain fanfold paper right next to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the label on the box for the number of sheets and a ruler to measure the box, a stack of 2200 sheets was 7 1/2 inches thick, which is near enough 300 sheets per inch. or 0.085mm per sheet if you prefer those units.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would have been plain white paper, the stuff we used by the ton for program listings, core dumps, etc - and probably the thinnest grade that would work reliably with high speed line printers.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2018-11-04T23:22:29.993" LastActivityDate="2018-11-04T23:22:29.993" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8168" PostTypeId="2" ParentId="8166" CreationDate="2018-11-04T20:43:03.820" Score="9" Body="&lt;p&gt;The two machines had very different video memory layouts. The Spectrum had only &lt;a href=&quot;http://www.breakintoprogram.co.uk/computers/zx-spectrum/screen-memory-layout&quot; rel=&quot;noreferrer&quot;&gt;6144 bytes of video bitmap&lt;/a&gt;, plus 768 bytes of colour attributes for it. The bitmap was monochrome, but one could set foreground and background colours for 8x8 pixel blocks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amstrad had much more video memory, at 16384 bytes, and it was a &quot;proper&quot; colour bitmap, with two, four or eight pixels per byte. The video memory layout was rather complicated, as demonstrated at &lt;a href=&quot;http://www.cpcmania.com/Docs/Programming/Painting_pixels_introduction_to_video_memory.htm&quot; rel=&quot;noreferrer&quot;&gt;this website&lt;/a&gt;. That made code for scrolling the display much more complicated and thus slower, and there wasn't really room in memory for a second screen buffer. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2018-11-04T20:43:03.820" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8169" PostTypeId="2" ParentId="8159" CreationDate="2018-11-04T22:15:29.327" Score="1" Body="&lt;p&gt;Approximately 0.1mm, based on the first fanfold printout I could lay my hands on in my office (vintage early 1970s). This has 10 sheets and squeezes down to 1mm, as near as I could eyeball it with a desk ruler. As far as I can recall, this was a fairly sturdy paper as such papers went. The printout was from an ICL 1903A computer, I never knew the printer's designation.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2018-11-04T22:15:29.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8170" PostTypeId="2" ParentId="8157" CreationDate="2018-11-04T22:18:53.583" Score="11" Body="&lt;p&gt;In Australia we had AOL and their CD (and floppies) was everywhere, in your snail mail, shop counters, on covers of magazines, in newspapers, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Prior to Win 95 being released Microsoft and Telstra owned the Bigpond network (ISP) and Microsoft and Channel 9 owned Ninemsn (content). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Telstra also had their own useless network in 1989 called the Discovery Network. I used it for one month. It was very BBS like. The entire network was about 100 pages in total.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both Bigpond and AOL were private networks and tried to compete with the internet. Eventually they allowed portals from their networks onto the public internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Australia previous prime minister owned OZEmail, an early ISP. He made hundreds of millions selling it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also BHP-Billiton (Australia's largest company) maintained a mirror of all the worlds internet files at the Port Kembla Steel Works so Australians could quickly download. This was early to mid 90s.&lt;/p&gt;&#xA;" OwnerUserId="11076" LastEditorUserId="11076" LastEditDate="2018-11-04T22:24:31.627" LastActivityDate="2018-11-04T22:24:31.627" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8171" PostTypeId="2" ParentId="8159" CreationDate="2018-11-05T00:38:21.057" Score="2" Body="&lt;p&gt;The typical stuff we used to use for program listings, etc., came 3000 sheets, fanfolded, to a box that was 12 inches high. That would make one sheet 0.004 inches or about 0.1 mm thick. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This jibes well with Dave's answer, which refers to paper that's already been out of the box, through the printer, refolded, and squeezed. If it had not been squeezed it would have &quot;measured&quot; a bit thicker. So I think this is a pretty good answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;n.b.: Personally I preferred blue-space-bar to green-space-bar. It disappeared when copied better than the green did, at least on the copiers we had at the time. &lt;/p&gt;&#xA;" OwnerUserId="3705" LastActivityDate="2018-11-05T00:38:21.057" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8172" PostTypeId="1" AcceptedAnswerId="8174" CreationDate="2018-11-05T02:38:23.867" Score="8" ViewCount="1195" Body="&lt;p&gt;Programming languages like C, where any function has the potential to be called recursively, are effectively designed on the assumption that it's okay for all local variables to go on the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the 6502, this is not a good assumption. The stack is of limited size, it's awkward to access things on it, and you miss out on zero page addressing; if you really put everything on the stack, your code will be a lot slower, apart from the risk of running out of stack space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To what extent is this also true on the Z80? It doesn't have zero page addressing, and does make it easier to access stuff on the stack using an index register, but I think variables at absolute memory addresses are still more efficient to access?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2018-11-10T13:36:33.593" Title="How costly is it to put things on the stack with the Z80?" Tags="&lt;z80&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8174" PostTypeId="2" ParentId="8172" CreationDate="2018-11-05T04:25:43.737" Score="12" Body="&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How costly is it to put things on the stack with the Z80?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Very costly as there are no neat instructions to access stack at all, only 8 bit instructions to access indexed memory and only accessing the stack pointer allone is a already mess.&lt;/p&gt;&#xA;&lt;p&gt;When going into details the 6502 almost looks good in comparsion. For both a seperate parameter stack may be a better solution.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;p&gt;(Caveat: I did look up the timing for the instructions here, but I didn't look up the deatails, so there might be cases and side effects I missed out)&lt;/p&gt;&#xA;&lt;p&gt;I assume your question is about accessing data on the stack, not push or pop operations (*1). Looking at the basic load instruction and its timing should give a good overview how indexed memory access can be done:&lt;/p&gt;&#xA;&lt;p&gt;Loading from memory&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LD A,(nn)   13&#xA;LD HL,(nn)  16&#xA;LD rr,(nn)  20&#xA;LD r,(rr)   07&#xA;LD r,(ix+n) 19&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Storing to memory&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LD (nn),A     13&#xA;LD (nn),HL    16&#xA;LD (nn),rr    20&#xA;LD (rr),r     07&#xA;LD (ix+n),r   19&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Several issues can be noted:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There are no instruction to load or store 16 bit values (pointers) from an address pointed to by a register pair&lt;/li&gt;&#xA;&lt;li&gt;There is no way to load an index register from an indexed location, it needs to be loaded bytewise.&lt;/li&gt;&#xA;&lt;li&gt;Using the index registers is extremely slow (*2)&lt;/li&gt;&#xA;&lt;li&gt;Indexed access by register pairs don't allow the use of an offset.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Additional 'quirks' in the instruction set are degrading the use of index registers in general, which influences the use to access stack based data a lot:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There is no way to just move SP to any other register&lt;/li&gt;&#xA;&lt;li&gt;Accessing SP can only be done by adding it to &lt;code&gt;HL&lt;/code&gt; or &lt;code&gt;IX&lt;/code&gt;/&lt;code&gt;IY&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;There is no way to copy register pairs then pushing/poping them or use two 8 bit register moves&lt;/li&gt;&#xA;&lt;li&gt;There is no way to combine &lt;code&gt;HL&lt;/code&gt; and &lt;code&gt;IX&lt;/code&gt; or &lt;code&gt;IY&lt;/code&gt; in one instruction (*3)&lt;/li&gt;&#xA;&lt;li&gt;There is no way to include &lt;code&gt;IX&lt;/code&gt; and &lt;code&gt;IY&lt;/code&gt; in one instruction (*3)&lt;/li&gt;&#xA;&lt;li&gt;There is no way to load &lt;code&gt;IXH&lt;/code&gt; (&lt;code&gt;IYH&lt;/code&gt;) addressed by &lt;code&gt;IX&lt;/code&gt; (&lt;code&gt;IY&lt;/code&gt;) (*3)&lt;/li&gt;&#xA;&lt;li&gt;There is no way to load &lt;code&gt;H&lt;/code&gt; or &lt;code&gt;L&lt;/code&gt; from &lt;code&gt;IXH&lt;/code&gt;/&lt;code&gt;IXL&lt;/code&gt; or vice versa. (*3)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It's further important to keep the stack structure in mind:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The only instruction directly accessing the stack are &lt;code&gt;PUSH&lt;/code&gt; and &lt;code&gt;POP&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;The stack is 16 bit 'wide'&lt;/li&gt;&#xA;&lt;li&gt;Only register pairs or index registers can be pushed/poped (*1)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So loading a 16 bit value (pointer) from stack into &lt;code&gt;DE&lt;/code&gt; (*4), for further addressing, requires:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Clearing one of the index registers  (4B/14C)&lt;/li&gt;&#xA;&lt;li&gt;Adding SP to it (2B/15C)&lt;/li&gt;&#xA;&lt;li&gt;Loading &lt;code&gt;D&lt;/code&gt; and &lt;code&gt;E&lt;/code&gt; with bytewise loads (3B/19C each)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That adds up to 6B/19C setup and 6B/38C for each pointer thereafter.&lt;/p&gt;&#xA;&lt;p&gt;Loading &lt;code&gt;DE&lt;/code&gt; by using &lt;code&gt;HL&lt;/code&gt; requires.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Moving the offest into &lt;code&gt;HL&lt;/code&gt; (3B/10C)&lt;/li&gt;&#xA;&lt;li&gt;Adding &lt;code&gt;SP&lt;/code&gt; to &lt;code&gt;HL&lt;/code&gt; (1B/11C)&lt;/li&gt;&#xA;&lt;li&gt;Loading the first byte (1B/7C),&lt;/li&gt;&#xA;&lt;li&gt;Incrementing &lt;code&gt;HL&lt;/code&gt; (1B/6C)&lt;/li&gt;&#xA;&lt;li&gt;Loading the second (1B/7C)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Now we need 4B/21C for setup and 3B/20C to load the pointer.&lt;/p&gt;&#xA;&lt;p&gt;Not using the index registers is already on the first word faster (-16C) and more compact (-4B) than doing so. And it gets worse when more parameters need to be accessed.&lt;/p&gt;&#xA;&lt;p&gt;As usual, YMMV depending on the tast, just not much, as the underlaying problem is the way the index registers have been implemented. A great idea at first sight, but (more often than not) degrading in real world applications.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Interesting sidenote:&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8041/6659&quot;&gt;undocumented 8085 instructions&lt;/a&gt; would have been way more useful here. Most notably &lt;code&gt;LDSI&lt;/code&gt; which in just 10 clocks loads &lt;code&gt;DE&lt;/code&gt; with &lt;code&gt;SP&lt;/code&gt; and adds an 8 bit constant.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Push register pair is 10 clocks, poping it is 11, while the same operation for index registers takes an additional 4 clocks (to read the prefix)&lt;/p&gt;&#xA;&lt;p&gt;*2 - They all have at least one prefix byte accessed in 4 cycles, plus a displaccement byte to be read (if needed), adding 4 more.&lt;/p&gt;&#xA;&lt;p&gt;*3 - &lt;code&gt;IX&lt;/code&gt; and &lt;code&gt;IY&lt;/code&gt; related opcodes are implemented by overriding &lt;code&gt;HL&lt;/code&gt; in an instruction via a prefix byte into &lt;code&gt;IX&lt;/code&gt; or &lt;code&gt;IY&lt;/code&gt;. Thus there are no opcodes that can include both&lt;/p&gt;&#xA;&lt;p&gt;*4 - It has to be a register pair, as none of the index registers can be loaded using the other - and using itself can't work due the bytewise nature.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-11-10T13:36:33.593" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8175" PostTypeId="1" CreationDate="2018-11-05T07:18:05.870" Score="4" ViewCount="910" Body="&lt;p&gt;I'm trying to allocate a 64 KiB buffer in Watcom C 16-bit DOS. I'm using the &amp;quot;compact&amp;quot; memory model which &lt;a href=&quot;https://users.pja.edu.pl/%7Ejms/qnx/help/watcom/compiler16/wmodels.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;defines&lt;/a&gt; the code segment to be limited to 64 KiB and addressed by near pointers (just offset), but the data segment to be addressed through far pointers (segment:offset).&lt;/p&gt;&#xA;&lt;p&gt;From the documentation I also get the impression that using &lt;code&gt;malloc&lt;/code&gt; in the compact memory model is simply an alias for &lt;code&gt;_fmalloc&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;However, when I try to allocate 64 KiB, or as close as I can get (1024 × 64 − 1, the maximum representable with a 16-bit &lt;code&gt;size_t&lt;/code&gt;) the &lt;code&gt;malloc&lt;/code&gt; fails. But when I allocate 64 KiB minus 32 bytes (i.e. 1024 × 64 − 32), the &lt;code&gt;malloc&lt;/code&gt; succeeds.&lt;/p&gt;&#xA;&lt;p&gt;How can I allocate 64 KiB (1024 × 64 − 1, i.e. 65535/FFFFh bytes)? And why does my &lt;code&gt;malloc&lt;/code&gt; succeed when I subtract 32 bytes?&lt;/p&gt;&#xA;" OwnerUserId="11075" LastEditorUserId="15334" LastEditDate="2020-11-24T17:43:23.970" LastActivityDate="2020-11-24T17:48:34.740" Title="Allocate 64 KiB in Watcom C 16-bit DOS" Tags="&lt;ms-dos&gt;&lt;memory&gt;&lt;c&gt;&lt;16-bit&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8176" PostTypeId="2" ParentId="8175" CreationDate="2018-11-05T07:27:37.487" Score="14" Body="&lt;p&gt;Typically memory allocators need some extra data in addition to the requested allocation size. This is for maintaining a list of allocated blocks on the heap, it's usually a linked-list node along with a couple of other bits of info like if the block is currently allocated or free. This tiny structure usually goes behind the pointer returned to you by &lt;code&gt;malloc&lt;/code&gt; and is typically rounded up to some power-of-2 size to ensure pointers returned by &lt;code&gt;malloc&lt;/code&gt; are aligned.&lt;/p&gt;&#xA;&lt;p&gt;Because of this, you cannot allocate exactly the size of your heap because we need additional space for that block's link structure.&lt;/p&gt;&#xA;&lt;p&gt;For example, eight &lt;code&gt;malloc(8192)&lt;/code&gt; calls would also fail on the 8th call because each allocation would occupy, in your case, 8 KiB + 32 bytes.&lt;/p&gt;&#xA;" OwnerUserId="8786" LastEditorUserId="15334" LastEditDate="2020-11-24T17:45:03.843" LastActivityDate="2020-11-24T17:45:03.843" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8177" PostTypeId="2" ParentId="8166" CreationDate="2018-11-05T11:20:50.153" Score="11" Body="&lt;p&gt;The fundamental issue with scrolling is that, unless your hardware does it for you, it involves moving around the contents of your whole video memory. In other words, scrolling is the type of video programming task that is mainly limited by your system's fillrate. And, unfortunately, the fillrates of the majority of retro platforms are not particularly good.&lt;/p&gt;&#xA;&lt;p&gt;The video memory size on ZX Spectrum is 6912 bytes (this is bitmap + colour attributes together). The fastest way to copy on Z80 is about 12.5 T-states per byte. ZX Spectrum has 70K T-states per single video frame. Thus, one cannot copy more than 70000/12.5 ~ 5600 bytes per frame. Therefore, most smooth scrolls you'd see would be done by filling i.e. constantly re-drawing pre-generated content. Filling is possible at 5.5 T-states per byte; hence, it at least gives you a theoretical chance to fit into a frame.&lt;/p&gt;&#xA;&lt;p&gt;I keep talking about frames because the only way to get truly smooth scrolling is by updating your screen every frame, at 50Hz framerate. The challenges involved in this are such that during the commercial life of the Spectrum, I am not aware of a single 50Hz scroller released. Zynaps was famous for 25Hz updates (which were sometimes slower than this). There were several other scrolling platformers at 25Hz, each considered a massive engineering feat. R-Type runs at 12.5 updates; I never measured the frame rates in isometric games, but I can guarantee that they will not run faster than 12.5-18.7 frames per second. It is simply impossible to do it faster due to the limited fill-rate of the platform.&lt;/p&gt;&#xA;&lt;p&gt;Now, the reason why I gave you all these numbers is as follows: Amstrad CPC has the same CPU as ZX Spectrum and 16Kb video memory. Essentially, Amstrad CPC has a similar fillrate and twice as large screen. Thus, any code trying to work with video memory as originally designed for ZX Spectrum is going to be automatically delayed by a factor of 16Kb/6.75Kb &amp;gt; 2. Zynaps slowed down by a factor of two would only be as smooth as R-Type was on Spectrum; R-Type, not an icon of smoothness by itself, would become properly jerky if slowed down this much.&lt;/p&gt;&#xA;&lt;p&gt;Of course, modern demo-scene for Amstrad CPC shows that some of the fillrate issues can be addressed by getting help from the video chip. I believe that, for example, people can generate repeated scanlines, so that only half or quarter of scanlines would need to be actually updated. This would tilt the fillrate balance into somewhat more tolerable situation.&lt;/p&gt;&#xA;" OwnerUserId="5039" LastEditorUserId="7946" LastEditDate="2021-04-01T16:30:35.897" LastActivityDate="2021-04-01T16:30:35.897" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="8178" PostTypeId="2" ParentId="8159" CreationDate="2018-11-05T15:11:11.140" Score="1" Body="&lt;p&gt;I have half of a box of Moore Paragon Paraflow 12-inch pin-feed fanfold for ASR 43 Teletypes. 400 sheets measures 37mm. It will compress only a little, to 36mm,but only when pressed hard at the point of measurement. So THIS paper is 0.0036 inches thick, but no thinner than 0.0035 inches. And it feels about the same as the wider line printer paper (enough of which I do not have, for accurate thickness measurement).&#xA;Kevin T, Sydney, Australia.&lt;/p&gt;&#xA;" OwnerUserId="11088" LastActivityDate="2018-11-05T15:11:11.140" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8179" PostTypeId="1" AcceptedAnswerId="8190" CreationDate="2018-11-05T16:00:29.560" Score="40" ViewCount="9601" Body="&lt;p&gt;For those of you who don't know, Billy Mitchell, the former Donkey Kong world record champion &lt;a href=&quot;https://www.youtube.com/watch?v=234Y76_3YPE&quot; rel=&quot;nofollow noreferrer&quot;&gt;was caught cheating&lt;/a&gt; due to differences between the original Donkey Kong format, and MAME. In other words, he had been using an emulator to fabricate his scores. Whether or not this is the case is not an issue to be discussed on StackExchange, however, I would like to ask why the Donkey Kong transition screen is so atypical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here here is an image of what I mean:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/j1Auo.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Animation of curtain closing&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/j1Auo.gif&quot; alt=&quot;Animation of curtain closing&quot; title=&quot;Animation of curtain closing&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice how the screen loads kind of like a curtain closing animation. This is not a part of the game's code, and is not present in M.A.M.E.. What causes this?&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="202" LastEditDate="2019-05-13T11:35:18.773" LastActivityDate="2019-05-13T11:35:18.773" Title="Why does the original Donkey Kong update the screen in a curtain closing pattern?" Tags="&lt;nintendo&gt;&lt;arcade&gt;&lt;mame&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8180" PostTypeId="2" ParentId="8179" CreationDate="2018-11-05T16:36:29.113" Score="38" Body="&lt;p&gt;This isn't a deliberate animation, it's an accident of the way the screen is being photographed, combined with the fact that a Donkey Kong arcade machine uses a CRT turned on its side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A typical CRT draws an image by drawing many successive horizontal lines, starting at the top and working towards the bottom.  The &quot;refresh rate&quot; indicates how many times this is done per second, so a 60Hz refresh means the screen is redrawn 60 times per second.  A 60Hz refresh also means that it takes around 1/60th of 1 second to draw 1 &quot;frame&quot;.  During this 1/60th of a second, the electron beam needs to paint the entire screen top to bottom, then move back up to the top of the screen in time for the next frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Donkey Kong cabinet, the CRT is turned sideways so that instead of drawing frames from top to bottom, it's done side to side.  When you take a picture of the screen, you might see that only a part of the screen is drawn; how much appears drawn depends on when precisely the picture was taken compared to where on-screen the electron beam happened to be.  Cameras are typically fast enough to capture this, but the human eye won't notice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the 'curtain' effect is actually due to a slight timing mismatch between how fast the camera is capturing images of the screen, compared to the rate at which the screen is being redrawn.  Sometimes the camera will capture the screen mid-frame, which is what you're seeing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: There is an additional factor at work here.  While the CRT is scanning from one side to the other (reading display memory as it goes), the CPU in the arcade machine is updating that same display memory in the opposite direction.  If a photo is taken of the screen when the electron beam is halfway across, one side will show the current frame being drawn, while the other side will show the previous frame which hasn't completely faded from the CRT yet.  This effect is clearly visible when the girders are being drawn and makes it look like the screen is being painted from both edges towards the middle.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2018-11-05T23:24:51.870" LastActivityDate="2018-11-05T23:24:51.870" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8181" PostTypeId="2" ParentId="4529" CreationDate="2018-11-05T16:39:28.097" Score="4" Body="&lt;p&gt;Galaksija is a Yugoslavian DIY 8-bit home computer somewhat similar to ZX80/81 in concept (that it's somewhat cheap and its video output is mostly software-generated).&#xA;There's a Galaksija &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=0017550&quot; rel=&quot;nofollow noreferrer&quot;&gt;emulator&lt;/a&gt; running on a ZX Spectrum, although it requires either a Spectrum that can map RAM pages into lower 16k (i.e. +3), or use of some kind of expansion that can do that (i.e. DivMMC or DivIDE, probably others). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's &lt;a href=&quot;http://atariage.com/forums/topic/153463-petari-commdore-pet-emulator-for-atari-xlxe/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PETARI&lt;/a&gt;, a Commodore PET emulator for Atari XL/XE machines. That thread also mentions an Apple ][, ZX Spectrum 16k and Chip8 emulators...&lt;/p&gt;&#xA;" OwnerUserId="11090" LastActivityDate="2018-11-05T16:39:28.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8182" PostTypeId="2" ParentId="8172" CreationDate="2018-11-05T16:46:49.973" Score="12" Body="&lt;p&gt;Putting automatic objects on the stack is a horribly inefficient way of handling them on the 8080 and Z80 unless it is necessary to support recursion or reentrancy.  Copying the stack pointer to IX on function entry and then using IX to access automatic objects is somewhat reasonable from a code-size perspective, but the Z80's 4-bit ALU makes it very slow to process address arithmetic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a function does not need to support reentrancy, performance can generally be massively improved by having the function start by popping the return address and parameters and storing them into registers or statically-assigned addresses.  If one can use the Pascal calling convention (called function cleans up the stack), simply leave the arguments off the stack.  Otherwise, either save the stack pointer someplace on and restore it after the function returns, or else push some dummy values on the stack.  Either approach will be wasteful compared to using the Pascal convention, considering that the caller will then have to spend effort removing the junk the called function just put back onto the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a function takes no arguments, it can simply use a RET to return, for a cost of 10 cycles.  The function prologues and epilogues necessary for functions that use arguments are much more expensive, especially if arguments need to be left on the stack when a function returns.  If one can use the Pascal calling convention where a called function cleans up arguments, then a prologue/epilogue for a function that takes e.g. two words of arguments could be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pop HL ; Return address&#xA;pop DE ; Arg #1&#xA;ld  (arg1),DE&#xA;ex  (sp),HL   ; Fetch arg#2 and put return address back on stack&#xA;ld  (arg2),HL&#xA;...&#xA;ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So in addition to the 10 for the ret, add 20 for the two pops, 19 for the ex, and 32 for the two LD, so an extra 71 cycles plus an extra 26 cycles for each additional argument.  That's pretty nasty, but cheap compared with the approach used for code that must support re-entrancy.  If local variables are required:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;push ix&#xA;ld   ix,numBytes&#xA;add  ix,sp&#xA;ld   sp,ix   ; If function needs any additional local variables&#xA;...&#xA;pop  ix&#xA;ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That's 29 for the push/pop, 14 and 8 for the ld, and 15 for the add (even if numBytes would be zero, there's no way to copy sp to ix in less than 29 cycles).  So 66 plus the ret.  If no local variables are required, one can omit the second load, reducing the cost to 58, but the six-byte 29-cycle sequence &quot;ld ix,nn / add ix,sp&quot; is required even when nn is zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it may seem like an extra 58 cycles for prologue/epilogue would be cheaper than the Pascal approach, trying to actually work with arguments on the stack is much more expensive than using statically-allocated objects.  For example, if &quot;x&quot; and &quot;y&quot; are 16-bit values, &quot;x=y;&quot; would be 6 bytes and 32 cycles if x and y are statically allocated (&lt;code&gt;ld hl,(y) / ld (x),hl&lt;/code&gt;.  If x and y are on the stack accessed via ix, however, then &lt;code&gt;ld l,(ix+y) / ld h,(ix+y+1) / ld (ix+x),l, / ld (ix+x+1),l&lt;/code&gt; will cost 12 bytes and 76 cycles.  If there are a lot of arguments but a function never uses them, the prologue/epilogue that sets up ix may be cheaper than popping arguments and copying them to statically-allocated space, but if a function uses its arguments even once, any savings in the prologue/epilogue will be wiped out by the extra cost of accessing things through IX.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-11-05T16:46:49.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8183" PostTypeId="2" ParentId="5843" CreationDate="2018-11-05T19:15:01.127" Score="20" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The PDP-8 was a 12-bit computer with a deliberately simple instruction set. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's part of your answer right there: the 6502 was in many ways more complex than the PDP-8: the 6502 has 56 machine instructions, but the PDP-8 has only 24.¹&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The base configuration of the original PDP-8 simply offered less power in its &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8094/11024&quot;&gt;half rack of space&lt;/a&gt; than the 6502 does in its little 40-pin DIP package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's some of what was missing in the PDP-8 relative to the 6502:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Subtraction&lt;/strong&gt;: The 6502 had both an &lt;a href=&quot;https://www.masswerk.at/6502/6502_instruction_set.html#ADC&quot; rel=&quot;nofollow noreferrer&quot;&gt;add with carry instruction (ADC)&lt;/a&gt; and a &lt;a href=&quot;https://www.masswerk.at/6502/6502_instruction_set.html#SBC&quot; rel=&quot;nofollow noreferrer&quot;&gt;subtract with borrow instruction (SBC)&lt;/a&gt;. &lt;a href=&quot;https://www.youtube.com/watch?v=ue7wM0QC5LE&quot; rel=&quot;nofollow noreferrer&quot;&gt;Luxury!&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only arithmetic instruction in the PDP-8 is a &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/man/mri.html#tad&quot; rel=&quot;nofollow noreferrer&quot;&gt;two's complement add instruction (TAD)&lt;/a&gt;. To subtract two integers, you had to do one of several tricks:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;For arbitrary operands, you could complement the subtrahend and add 1 to it using a &quot;complement and increment accumulator&quot; instruction (CIA) then TAD it to the minuend, which is what a &lt;a href=&quot;https://en.wikipedia.org/wiki/Two%27s_complement&quot; rel=&quot;nofollow noreferrer&quot;&gt;two's complement&lt;/a&gt; subtraction is.² &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the subtrahend is a constant known at assembly time, some PDP-8 assemblers had a feature that would let you negate it in the assembly code and store it as an in-page constant in the generated machine code, which you could reference from the TAD instruction. &quot;Add the negative value stored in page offset 42 to the accumulator.&quot; Basically, it shifts the cost of the CIA instruction from run time to assembly time.³&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those without assemblers that could do this automatically might take the time to manually work out the arithmetic to save the cost of a CIA instruction. I've seen many PDP-8 assembly programs with this sort of magic constant embedded, often with no explanation for why that particular value was used!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Sometimes you'd get lucky and the two's complement of the constant you needed to subtract would happen to be equal to one of the instructions in the same page. That's right, PDP-8 programs would sometimes reuse executable machine code as data in other parts of the code!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If both operands were constants known at assembly time, some PDP-8 assemblers could do the subtraction for you and just store the difference in the machine code as a constant.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Non-destructive store&lt;/strong&gt;: The PDP-8 &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/man/mri.html#dca&quot; rel=&quot;nofollow noreferrer&quot;&gt;deposit and clear accumulator instruction (DCA)&lt;/a&gt; was a double-edged sword. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the plus side, it gave the programmer something like the 6502's &lt;a href=&quot;https://www.masswerk.at/6502/6502_instruction_set.html#STA&quot; rel=&quot;nofollow noreferrer&quot;&gt;store accumulator in memory instruction (STA)&lt;/a&gt; without requiring an equivalent to the 6502's &lt;a href=&quot;https://www.masswerk.at/6502/6502_instruction_set.html#LDA&quot; rel=&quot;nofollow noreferrer&quot;&gt;load accumulator from memory instruction (LDA)&lt;/a&gt;: because DCA clears the accumulator after storing it in memory, you could just &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/man/mri.html#tad&quot; rel=&quot;nofollow noreferrer&quot;&gt;TAD&lt;/a&gt; a new value from memory to the just-zeroed accumulator, giving the same effect as LDA without requiring more transistors in the CPU to achieve the effect. (&lt;em&gt;n + 0 = n&lt;/em&gt;) The dual use of TAD instructions for &quot;two's complement add&quot; and &quot;load zeroed accumulator with new value&quot; makes these instructions much more common in PDP-8 assembly code than you'd guess from the acronym.⁴&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The downside is that if you wanted to store a copy of the accumulator somewhere but keep working with it in the accumulator, you had to TAD it back into the accumulator from memory after storing it in that same memory cell! This pathological case runs about 3&amp;times; slower on a PDP-8 than the equivalent code on a 6502. (We'll see this happen in the &quot;exclusive or&quot; program below!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When evaluating this design choice, consider the counter-pressures on the PDP-8's design that forced it:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The PDP-8's designers wanted 12-bit words.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;They wanted every instruction be just one word, because although variable-length instructions lift a lot of limits on the design, they also require more transistors to decode.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Given the choice to have fixed-length words, the designers of the PDP-8 then had to decide how many bits to dedicate to the instruction's operation code and how many to the operand. They chose to dedicate &amp;frac14; of the bits to the op-code, 3 bits, giving the official 8 &quot;true&quot; instructions.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The PDP-8 designers wanted memory reference instructions (MRI) like TAD to be able to address zero-page, indirect, current-page, and zero-page-indirect memory references, which requires 2 bits in the instruction word: 00, 10, 01, and 11, respectively.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;That leaves 7 bits for MRI instructions, which gives the PDP-8 page size of 2⁷ = 128 words.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of which means that if we wanted to have a &quot;load accumulator&quot; instruction in the PDP-8 like that in the 6502, we'd either have to reassign one of the address bits in the instruction, shrinking the page size to 64; or increase the word size, requiring a wider CPU and thus more transistors; or allow variable-width instructions, requiring more transistors to decode the more complicated instructions.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Registers&lt;/strong&gt;: The 6502 has many similarities to &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/man/registers.html#mq&quot; rel=&quot;nofollow noreferrer&quot;&gt;the PDP-8 register setup&lt;/a&gt;. Both CPUs have only one general-purpose register called the accumulator,⁵ and both have a program counter, for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also many differences, some of which are responsible for the lower transistor count in the PDP-8 CPU:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The 6502 has two dedicated index registers, X and Y. The PDP-8 sets aside 8 of its &lt;a href=&quot;https://en.wikipedia.org/wiki/Zero_page&quot; rel=&quot;nofollow noreferrer&quot;&gt;zero page&lt;/a&gt; memory locations as auto-increment registers instead. Every time you accessed one of those special core memory locations, the processor would increment them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a roughly neutral tradeoff in terms of speed: where a 6502 program would need explicit &lt;a href=&quot;https://www.masswerk.at/6502/6502_instruction_set.html#INX&quot; rel=&quot;nofollow noreferrer&quot;&gt;INX&lt;/a&gt; and &lt;a href=&quot;https://www.masswerk.at/6502/6502_instruction_set.html#INY&quot; rel=&quot;nofollow noreferrer&quot;&gt;INY&lt;/a&gt; instructions to do indexed RAM lookups, the equivalent PDP-8 code could leave those instructions out but would need to do indirect core memory accesses through zero page, which is slower than indexed RAM access. A 6502 program that says &quot;load the X register with Z, load AC indirectly via X, then increment X and jump&quot; is equivalent to &quot;store index X in zero page core location 010, load AC indirectly via 010, then jump&quot; in a PDP-8.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;About half the bits in the 6502 status register have no equivalent in the PDP-8. This is no accident: bits were nearly free when it came to microprocessors, but when you're constructing registers from discrete transistors, diodes, and resistors, each bit costs real money.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;...which is why two of the precious few registers in the PDP-8 are only 3 bits long: Instruction Field (IF) and Data Field (DF).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coupled with the 12-bit native word size, IF and DF allow the PDP-8 to address up to 32&amp;nbsp;kWords of core memory, half the amount the 6502 can directly address. IF and DF are basically a form of &lt;a href=&quot;https://en.wikipedia.org/wiki/Bank_switching&quot; rel=&quot;nofollow noreferrer&quot;&gt;bank switching&lt;/a&gt;, hard-limited to 8 banks in the PDP-8. (2³&amp;nbsp;=&amp;nbsp;8.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More or less the same technique allows 6502-based computers to escape the 64&amp;nbsp;kB addressing limit of the processor. I had 640&amp;nbsp;kiB of RAM in my Apple //c: the 128&amp;nbsp;kiB of on-board RAM plus a &lt;a href=&quot;https://archive.org/details/AE_Z-RAM_Ultra_Users_Manual_v1.1&quot; rel=&quot;nofollow noreferrer&quot;&gt;512&amp;nbsp;kiB Applied Engineering Z-RAM Ultra&lt;/a&gt;. Few programs made good use of that extra memory, but then, there were plenty of PDP-8 programs that were confined to a single 4&amp;nbsp;kWord core memory field, too.⁶&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Exclusive OR&lt;/strong&gt;: The 6502 provides this directly via the &lt;a href=&quot;https://www.masswerk.at/6502/6502_instruction_set.html#EOR&quot; rel=&quot;nofollow noreferrer&quot;&gt;EOR instruction&lt;/a&gt;, whereas a PDP-8 required seven instructions to provide that operation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DCA TMP     / save AC to a temporary location, zeroing AC&#xA;TAD TMP     / pull value back into AC&#xA;AND M       / bitwise AND value from core memory location M&#xA;CIA         / two's complement negate AC&#xA;CLL RAL     / clear LINK bit and rotate AC left == 2 * AC&#xA;TAD TMP     / add TMP and M values to AC&#xA;TAD M&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Program source: &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/man/mri.html#logic&quot; rel=&quot;nofollow noreferrer&quot;&gt;Douglas W. Jones' PDP-8 Programmer's Reference Manual&lt;/a&gt;. There's a less efficient alternative in the &lt;a href=&quot;https://archive.org/details/bitsavers_decdecuspdVol1_2703461/page/n24&quot; rel=&quot;nofollow noreferrer&quot;&gt;DECUS PDP-8 Cookbook, volume 1&lt;/a&gt; on page 23.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's a great illustration of the cost of the tiny PDP-8 instruction set: it's &lt;a href=&quot;https://en.wikipedia.org/wiki/Turing_completeness&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turing complete&lt;/a&gt;, so technically there's nothing we can't do with the instruction set, given enough CPU time and memory. But that's the trick: we don't have infinite CPU time or infinite memory.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stack&lt;/strong&gt;: The 6502 has a built-in hardware 256 byte &lt;a href=&quot;https://en.wikipedia.org/wiki/Call_stack&quot; rel=&quot;nofollow noreferrer&quot;&gt;stack&lt;/a&gt; — and a stack pointer register to go with it — a feature entirely missing from the PDP-8 architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might therefore wonder how (or whether!) a PDP-8 program could have subroutines. Yes, subroutines did exist on the PDP-8, but they worked entirely differently from those on the 6502 and more modern processors. Instead of pushing the program counter and any registers that need saving onto the stack, the PDP-8's &quot;jump to subroutine&quot; instruction (JMS) stores the current program counter in the core memory location referenced by the jump, then sets the PC to the next memory location and begins executing from there. There is no &quot;return&quot; instruction in the PDP-8: the called subroutine just makes an indirect JMP through its first core memory location, which is set to 0 by convention when the program first loads into core. (&lt;a href=&quot;https://people.cs.clemson.edu/~mark/subroutines/pdp8.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;More detail here.&lt;/a&gt;) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For simple call graphs, the PDP-8's JMS instruction is roughly equivalent to the 6502's more powerful JSR instruction. Because there is no stack, the PDP-8 doesn't need an equivalent to the 6502's &quot;return from subroutine&quot; (RTS) instruction: it can press the plain JMP instruction into service to get that ability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this means that &lt;a href=&quot;https://en.wikipedia.org/wiki/Recursion_(computer_science)&quot; rel=&quot;nofollow noreferrer&quot;&gt;recursion&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Reentrancy_(computing)&quot; rel=&quot;nofollow noreferrer&quot;&gt;reentrancy&lt;/a&gt; could not be done on the PDP-8 through the normal calling convention. An assembly language programmer that wanted to do recursion needed to write extra code to maintain a software call stack. It was a mixed bag for those writing in high-level languages: the &lt;a href=&quot;https://en.wikipedia.org/wiki/Fortran#FORTRAN_IV&quot; rel=&quot;nofollow noreferrer&quot;&gt;FORTRAN IV&lt;/a&gt; system for OS/8 didn't allow recursion, but the &lt;a href=&quot;https://archive.org/details/bitsavers_decpdp8focogrammingManualJan70_3994072&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEC FOCAL-8&lt;/a&gt; implementation did!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So far, I've explained away 5 of the &quot;missing&quot; instructions in the PDP-8 relative to the 6502. (INX, INY, LDA, EOR, and RTS.) I could keep going, but this answer is already plenty long. Suffice it to say, I'm confident I could come up with ways to replace all of the other 27 &quot;missing&quot; instructions. (56 - 24 - 5 = 27.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 takes &lt;a href=&quot;http://www.6502.org/documents/datasheets/mos/&quot; rel=&quot;nofollow noreferrer&quot;&gt;at least two cycles to do anything&lt;/a&gt;, so at 1&amp;nbsp;MHz, it can execute up to 500000 instructions per second, or 500&amp;nbsp;kIPS. Core memory based PDP-8s can do purely in-CPU operations in one memory cycle time, but anything involving core memory takes at least 2 core memory cycles due to the need for core memory to be re-magnetized after each read. This means that the PDP-8/I's &lt;a href=&quot;https://tangentsoft.com/pidp8i/doc/trunk/README-throttle.md#under&quot; rel=&quot;nofollow noreferrer&quot;&gt;1.5&amp;nbsp;µs core memory cycle time&lt;/a&gt; equates to 333&amp;nbsp;kIPS for the fastest sort of operations involving core memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, when it comes to the question of overall performance and value delivered, what actually matters is how the systems were configured:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Most computers in the PDP-8 line either had the &lt;a href=&quot;https://archive.org/details/bitsavers_decpdp8pdpendedArithmeticElement1969_2084407&quot; rel=&quot;nofollow noreferrer&quot;&gt;Extended Arithmetic Element&lt;/a&gt; (EAE) option available or had it integrated from the factory, giving it capabilities not in the 6502, such as integer multiply and divide instructions. Add in the &lt;a href=&quot;https://archive.org/details/bitsavers_decpdp8pdpMaintSep76_8224098&quot; rel=&quot;nofollow noreferrer&quot;&gt;Floating Point Processor&lt;/a&gt; (FPP) option and you now get hardware &lt;a href=&quot;https://en.wikipedia.org/wiki/Floating-point_arithmetic&quot; rel=&quot;nofollow noreferrer&quot;&gt;floating-point arithmetic&lt;/a&gt;. I'm not aware of a direct equivalent for the 6502; even if there were math coprocessors for the 6502, the EAE and FPP were commonly installed options in the PDP-8 world, being required for some programs.⁷&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding the EAE to a PDP-8 could easily swamp the 6502's IPS rate advantage for some applications. The &lt;a href=&quot;https://archive.org/details/bitsavers_decpdp8pdpendedArithmeticElement1969_2084407&quot; rel=&quot;nofollow noreferrer&quot;&gt;KE8/I EAE&lt;/a&gt; can complete an integer multiply or divide in two core memory cycles, whereas it could take &lt;a href=&quot;http://www.6502.org/source/integers/32muldiv.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;dozens of instructions each taking 2+ cycles&lt;/a&gt; on a 6502 to get similar functionality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage can swing the other way, though. A program making heavy use of a recursive call stack would likely run faster on a 6502 due to the explicit hardware support for it, whereas the PDP-8 equivalent would require extra instructions and core memory references to emulate the facility.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For the PDP-8, multiple serial terminals — either &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletype_Corporation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Teletype model 33 ASRs&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_terminal#Early_VDUs&quot; rel=&quot;nofollow noreferrer&quot;&gt;glass TTYs&lt;/a&gt; — were common, whereas color bitmapped output was common on 6502 based microcomputers and rare on the PDP-8. Which is more valuable? It depends on your application. For games, the 6502 micros would win hands down over a PDP-8. But a mid-sized PDP-8 system could reasonably provide 8 terminals of BASIC for a small computer lab, whereas you'd need 8 individual micros to give the same level of service. (Such a thing was in fact sold as the &lt;a href=&quot;https://archive.org/details/bitsavers_decpdp8tssan73_27528274/page/n226&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEC EduSystem 20&lt;/a&gt;.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Terminals commonly used with the PDP-8 were inherently 80-column devices, whereas that was usually an extra-cost add-on for 6502-based microcomputers, where available at all, and where absent, usually left you with 40 column or less output, because they had to be usable with a standard low-resolution television as the monitor.⁸&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A PDP-8 would usually have more high-speed storage than a 6502-based microcomputer. PDP-8s contemporaneous with microcomputers also used floppy disks, and instead of audio cassette tapes, they'd use the much more capable DECtape system. Hard drives were not uncommon with PDP-8s, but they were very rare with 6502 microcomputers, even into the mid-1980s.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I give these examples because once you add all of the I/O cards, coprocessors, and such involved in all of this, the actual number of transistors in use within a large PDP-8 system might well exceed the number of transistors inside a well-rounded 6502 microcomputer. The PDP-8 would cost more, of course, but it would probably also be delivering more measurable value.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did the PDP-8 not distinguish between data and address widths like the microprocessors?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because it made the instruction set simpler, which simplifies the CPU needed to interpret those instructions, which reduces the number of transistors you need to implement the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cost of this was a &lt;a href=&quot;https://tangentsoft.com/pidp8i/wiki?name=PDP-8+Memory+Addressing&quot; rel=&quot;nofollow noreferrer&quot;&gt;complicated memory model&lt;/a&gt; that makes the segmented memory architecture of the 8086 look simple.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;for early microprocessors, pins and board traces were expensive, but early minicomputers were made of discrete components which means they were effectively made of wires, so saving a few wires on the data bus wouldn't help&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. While both IC-based and wire-wrapped CPUs are expensive to design and prototype, PCBs and ICs are cheap to manufacture in volume, while wire-wrapped CPUs — the style used for the earliest PDP-8s — are expensive to produce, requiring either expensive hand-wrapping or really expensive programmable wire-wrapping machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there's a virtue to wire-wrapped CPU backplanes, it's that a skilled technician can rewire one at need, whereas to fix a design error in a mid-1970's style microcomputer, you often had to re-spin the IC or the PCB involved, which was expensive. Once you got the design working, a microcomputer tended to stay more static than a wire-wrapped computer did. It was not uncommon for field technicians to apply fixes to machines by reworking the backplane. It was common for one color of wire to be used for the stock design from the factory, another color for factory modifications, and another for field repairs and modifications. This is where the term &quot;blue wire&quot; comes from.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Digressions and Footnotes&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Officially, the PDP-8 has only &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/faqs/#instrs&quot; rel=&quot;nofollow noreferrer&quot;&gt;8 true instructions&lt;/a&gt;, but I prefer to consider the &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/man/micro.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;17 portable microcoded OPR instructions&lt;/a&gt; as separate instructions, since many of them map directly to distinct instructions in more modern instruction sets, including that of the 6502. The fact that you can combine select subsets of those 17 instructions into a single OPR instruction is an optimization, not a useful distinction in our comparison here. That count leaves out BSW and the Group 3 OPR instructions, because they're not portable between PDP-8 models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I choose not to consider the various &lt;a href=&quot;http://gunkies.org/wiki/PDP-8_architecture#IOT_.28Input-Output_Transfer.29_instructions&quot; rel=&quot;nofollow noreferrer&quot;&gt;IOT&lt;/a&gt; sub-instructions separately, since that would drag all of the PDP-8 peripherals into the discussion. We're interested in comparing CPUs only here. I'm making an exception for the EAE and FPP peripherals, which were accessed with IOT instructions, since we'd consider them CPU coprocessors today.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The CIA instruction is one of those microcoded instructions: it's actually an OPR instruction with the &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/man/micro.html#cma&quot; rel=&quot;nofollow noreferrer&quot;&gt;complement accumulator (CMA)&lt;/a&gt; and &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/man/micro.html#iac&quot; rel=&quot;nofollow noreferrer&quot;&gt;increment accumulator (IAC)&lt;/a&gt; bits set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;CIA&quot; is just the common mnemonic assigned to this combined instruction: &lt;a href=&quot;https://tangentsoft.com/pidp8i/wiki?name=A+Field+Guide+to+PDP-8+Assemblers&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-8 assemblers&lt;/a&gt; predefined several of these as a convenience, so you didn't have to list the individual operations:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CMA IAC     / two's complement negate AC in one instruction&#xA;CIA         / same thing, in most PDP-8 assemblers&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Because the set of possible combinations of OPR bits was rather large, though, the particular operation you wanted might not have a predefined mnemonic, so PDP-8 assemblers let you create custom instructions by binding a mnemonic to a 12-bit value:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;TCN=    CMA IAC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Nothing stopped you from assigning a nonstandard name to any instruction, so you could use this in a program if the &quot;CIA&quot; acronym bothers you: two's complement negate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some programmers would also use this feature for primitive macros:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;NL0002=  CLA CLL CML RTL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That loads the constant 2 into the accumulator in a single instruction: clear accumulator, clear link, complement link, rotate link left by 2 bits. Now you can use &quot;NL0002&quot; as single instruction opcode to load the constant 2, avoiding the need for a separate CLA instruction and in-page constant.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;That saves about 3µs and one of the 128 locations per core memory page, both of which can be a significant savings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The core memory location was especially precious, given not only how few of them there are, but also the cost of spanning pages. For instance, it's cheaper to &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/man/mri.html#jmp&quot; rel=&quot;nofollow noreferrer&quot;&gt;jump&lt;/a&gt; to an in-page location than to one in a neighboring page, since that required an indirect jump via an in-page constant, called a &quot;link&quot; in PDP-8 assembler jargon. (Not to be confused with the processor's 1-bit LINK register!) The indirect jump not only cost a core memory location, it's slower to execute than an in-page jump.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When not preceded by a DCA, a TAD instruction used for &quot;load accumulator&quot; would be preceded by a &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/man/micro.html#cla&quot; rel=&quot;nofollow noreferrer&quot;&gt;clear accumulator (CLA)&lt;/a&gt; instruction of some sort. A lot of effort in optimizing PDP-8 code goes into arranging instructions in a way that results in a CLA OPR instruction happening just before a TAD needs the accumulator to be zeroed to work properly. This is why there is a CLA instruction in OPR groups 1, 2 &lt;em&gt;and&lt;/em&gt; 3: if your TAD instruction happened to be preceded by a group 2 OPR instruction such as &lt;a href=&quot;http://homepage.divms.uiowa.edu/~jones/pdp8/man/micro.html#szl&quot; rel=&quot;nofollow noreferrer&quot;&gt;SZL&lt;/a&gt;, you might be able to set the group 2 CLA bit to clear the accumulator as a side effect of the SZL, rather than have the first instruction of the jump target be a separate &quot;CLA&quot; instruction, which would normally be in group 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that this was all before we had modern notions of good software engineering practices. Side effects and actions separated from their causes by considerable distance in the code were &lt;em&gt;good&lt;/em&gt; practice at this time: you almost certainly had less core memory than you wanted, so saving an instruction here and there was important.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The PDP-8/e and later integrated parts of the EAE option so they also had the MQ register, but that wasn't fully general-purpose. Code that didn't need the EAE could use it as a faster scratch-pad than core memory, but few PDP-8 instructions work with MQ directly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The popular &lt;a href=&quot;https://en.wikipedia.org/wiki/TSS-8&quot; rel=&quot;nofollow noreferrer&quot;&gt;TSS/8 operating system&lt;/a&gt; for the PDP-8 presented a virtual 4&amp;nbsp;kWord PDP-8 to each logged in user. With some clever swapping code, it could support up to 24 users on a 32k machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another example were the several multi-user &lt;a href=&quot;https://en.wikipedia.org/wiki/FOCAL_(programming_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;FOCAL&lt;/a&gt; systems, where a common scheme was to run the interpreter in the first 4k of core and swap individual user programs or user code libraries in and out of available 4k fields above that. One such system (LIBRA FOCAL-8) ran in only 8k of core and could support up to 7 users!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The OS/8 FORTRAN IV system is notable in this regard, as its loader was smart enough to detect the presence of the EAE and FPP options and switch from slow software emulations of them to direct hardware access. You wrote your program the same either way. Doubtless some sites started off without the EAE and FPP, then later added it to make their programs run faster.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Once video terminals started to displace paper teletypes, a common PDP-8 application was word processing, where 80 columns of text maps nicely to the width of office paper. The &lt;a href=&quot;https://en.wikipedia.org/wiki/DECmate&quot; rel=&quot;nofollow noreferrer&quot;&gt;DECmate series&lt;/a&gt; was basically a DEC VT52 terminal with an embedded PDP-8 compatible IC CPU and a dual floppy drive, loaded with a variant of OS/8, and usually sold as a word processor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11024" LastEditorUserId="11024" LastEditDate="2019-03-01T13:09:05.013" LastActivityDate="2019-03-01T13:09:05.013" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8184" PostTypeId="2" ParentId="8159" CreationDate="2018-11-05T20:33:10.463" Score="1" Body="&lt;p&gt;This question makes a lot of unnecessary and more harming non related assumptions. Most notably the exclusion of its grammage as base value, as that &lt;em&gt;is&lt;/em&gt; the way paper handling is done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For all practical purpose &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8164/6659&quot;&gt;Tofro's answer&lt;/a&gt; already covers a good estimation as a bit less than 0.1 mm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Paper thickness is related in a linear fashion to its weight. All it needs to go from the ubiquitous notation of grammage (weight per surface size) to thickness is to include its specific weight (weight per volume). Dividing these will easily deliver thickness. 4th grade math assumed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With grammage in &lt;em&gt;g/m^3&lt;/em&gt; and specific weight in &lt;em&gt;g/cm^3&lt;/em&gt; this gets transformed into a simple&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;grammage&lt;/em&gt; * &lt;em&gt;specific weight&lt;/em&gt; / 1000&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;specific weight&lt;/em&gt; of a certain paper is defined by its style and how 'smooth' (*1) it is. For most practical purpose it ranges from 0.6 to 1.3 ) g/cm^3. As a result 80g/m^2 paper may range at 0.048 to 0.104 mm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, having done the basic math, there is also a less theoretical way. People like to have simple numbers, so paper maker also came up with a simple definition system for thickness of standard papers, defining a standard &lt;em&gt;'Volume'&lt;/em&gt; specifier which gets given out by paper makers to further define their paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It got set (*2) to 1 for a paper of a specific weight of 1 g/cm^3. Sounds superfluous, but using the term &lt;em&gt;Volume&lt;/em&gt; as unit less classification instead of a &lt;em&gt;specific weight&lt;/em&gt; with a complex unit seems to improve usage by non-nerds (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For practical purposes, a volume 1 paper has a thickness in mm at exactly its grammage divided by 1000. So a volume 1 paper with 80 g/m^2 will have a thickness of 0.08 mm. Similarly, a 100 g/m^2 paper will have a thickness of 0.1 mm. Paper of different thickness is noted with a different 'Volume' like 1.5 for a thicker one, which with the same 80 g/m^2 will measure 0.12 mm. (80*1.5/1000)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is especially great, as average office paper is of 'Volume' 1 type.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: Just take the grammage, divide it by 1000 and apply the 'Volume' specifier.&lt;/strong&gt; If none is given then 1 is a good value to start with for fine office paper, while cheaper and/or simple recycles one goes up to 1.2-1.4 (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Classic) Printer use, they are made to work well with paper of 0.2 mm or more (0.17 being a punch card type paper) and more importantly, several layers of such. Usually the transport mechanics (straight vs. bend over some rollers) and the stiffness was more important than thickness itself. Mainframe chain printers could work well with forms with fanfold 'paper' of 8 (!) layers paper and 7 intermediate carbon layers (*4) - although, one had to be rather exact when positioning the paper box and quite careful mounting the paper.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The German term paper makers use here is 'Gestrichen'. I have heard the term 'coated' in similar situations in English. Thicker papers are often called double or triple gestrichen/coated. Keep in mind, I'm definitely no expert about paper making, especially not in multiple languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Yes, as with everything there's a DIN fixing it, just don't ask me about the number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - It's also a real great example why the metric system is so easy. If everything is noted down using the same unit system, conversion usually breaks down to simple shifts - in this case shift right by 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Yes, that felt more like a diaper than printing paper:)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2018-11-06T01:35:52.163" LastActivityDate="2018-11-06T01:35:52.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8185" PostTypeId="1" AcceptedAnswerId="8186" CreationDate="2018-11-05T23:02:41.400" Score="6" ViewCount="1074" Body="&lt;p&gt;My recently restored Mac SE/30 has System 7.0 running on it at present, booting from an original SCSI HDD. I’m missing a few key features, like disk image mounting, which I understand were added in later system versions, and some software I’ve tried to install says it requires system 7.5&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on this, I’m thinking of upgrading to a later version of OS. It seems that &lt;strong&gt;System 7.5.5&lt;/strong&gt; is the latest I can run on an SE/30 from what I’ve read here: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8025/how-to-install-system-7-5-5-on-a-macintosh-se-30-using-floppies&quot;&gt;How to install System 7.5.5 on a Macintosh SE/30 using floppies?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Others advocate not going beyond System 7.1, and some articles claim it is possible to run versions of &lt;strong&gt;System 8&lt;/strong&gt; on an SE/30 if you have the correct ROMs fitted in your machine! (How would I know if I have the required ROM versions, and is there any benefit in running &gt; System 7.5.5 on such a machine??)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would love to hear the views of those who have researched this, especially if they have first-hand experience of installing on their own SE/30!&lt;/p&gt;&#xA;" OwnerUserId="11033" LastEditorUserId="6659" LastEditDate="2018-11-05T23:05:11.883" LastActivityDate="2018-11-06T19:59:34.327" Title="What is the highest version of System 7 that can be run on a Mac SE/30?" Tags="&lt;apple-macintosh&gt;&lt;mac-os-classic&gt;&lt;operating-system&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8186" PostTypeId="2" ParentId="8185" CreationDate="2018-11-06T00:00:10.123" Score="5" Body="&lt;p&gt;Well, it seems as if you have already researched everything there is to know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Installable systems:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Originally the SE/30 was introduced with 6.0.3&lt;/li&gt;&#xA;&lt;li&gt;Official support for the SE/30 goes until 7.5.5&lt;/li&gt;&#xA;&lt;li&gt;Since 7.6(.1) it is still just a minor update. It can be easily  installed.&lt;/li&gt;&#xA;&lt;li&gt;System 8.0/8.1 does work as well, by copying a few files from 7.5 (*1)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The choice which System to use is mainly defined by the machine configuration.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Without a hard drive only 6.0.7 makes any sense&lt;/li&gt;&#xA;&lt;li&gt;Similar with less than 4 MiB RAM, as 6.0.7 only needs like 3-500 KiB RAM, leaving acceptable amounts RAM for an application&lt;/li&gt;&#xA;&lt;li&gt;With 4 MiB or more System 7.1 may be the best choice, as most software will run under 7.1, while it is still somewhat lean (*2)&lt;/li&gt;&#xA;&lt;li&gt;With 8 MiB or more the newer systems may be acceptable (*3).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But there are also software issues, as System 7.5 introduced a lot of new and quite handy improvements (like a scripting ability for Finder operations). 8.x added even more nice stuff, like multithreaded Finder (background copy) or the neat platinum UI. On the back side, everything after 7.5 does need clean 32 bit ROMs. Further, 8.1 is the last system supporting 68k Macs (*4). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ROM issue is a bit more complex - and tied to RAM size as well. The Mac ROM includes large parts of the basic system code, thus relieving the need of RAM to load this code from disk. Originally no-one envisioned a Mac with more than 24 bit addressing (*5) like the original 68000 offered. Thus many routines either didn't really take care of the uppermost 8 bits, or worse, used the top 8 bit in every 32 bit word for some bookkeeping. Such code was present in the ROM code and not fully removed until the early 1990s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All SE/30 are equipped with such ROMs, originally preventing the use of more than 8 MiB RAM. Since the machine can be fitted with up to 128 MiB (Awesome for an 68k Mac) Apple had to come up with a solution to satisfy complaining customers. Instead of supplying them with clean ROMs they bought a &lt;a href=&quot;https://en.wikipedia.org/wiki/MODE32&quot; rel=&quot;nofollow noreferrer&quot;&gt;MODE32&lt;/a&gt; called third party utility, offering a 32 Bit layer around 24 Bit functions. Of course nothing comes with a backlash, in this case, a few programs relied on these functions operating as they did before - leading to crashes:(&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while 7.5 runs fine with MODE32, 8.x directly checks the ROM ID and refuses to work. There are ways to make 8.x boot with MODE32, except they are not really legal. The only legal way is acquiring a clean ROM. Lucky here the Mac II (IIsi, IIfx, etc.) family machines use the same ROM module format. So acquiring one from eBay (or any scraper in your neighborhood) will do the trick. Except no it'll fail in some programs compiled for an 68040. This can for most parts be resolved by swapping in 7.6 files, but it might be a rather large effort even for people custom to this.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Plus clean ROMs or an emulation thereof.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - If you got more then 8 MiB and the Finder tells you that the System needs like 12 MiB or alike, than you might want to install/activate 32 Bit addressing - as without only the first 8 will be used. The larger number displayed for System is due the fact, that everything that can't be accounted for otherwise is declared as 'system :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Of course there is always a chance to try to slim it down to what is needed - still, it wouldn't change the general notation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - It is said that with a lot of extensions hacking it should still be possible to run 8.5 on a 68k system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - In reality only 23 Bit (8 MiB) as the top bit was used for management.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2018-11-06T19:59:34.327" LastActivityDate="2018-11-06T19:59:34.327" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8187" PostTypeId="1" AcceptedAnswerId="8189" CreationDate="2018-11-06T00:09:58.047" Score="3" ViewCount="182" Body="&lt;p&gt;What is the size of each cache block in a SPARCstation 1+?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only information I found about the cache was that it is &quot;64K write-through cache, direct-mapped, virtually indexed, virtually tagged, 16-byte lines; 50ns cycle&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming that, since it's direct-mapped, the size of the block can be calculated by dividing the size of the cache by the size of the lines, which would be 65536 / 16 = 4096 Bytes = 4K&#xA;Is this correct? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, how would one determine it's L1 cache miss penalty time?&lt;/p&gt;&#xA;" OwnerUserId="11093" LastActivityDate="2018-11-06T08:15:52.380" Title="SPARCstation 1+ cache block size" Tags="&lt;sparc64&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8188" PostTypeId="2" ParentId="8159" CreationDate="2018-11-06T05:06:53.157" Score="1" Body="&lt;p&gt;I measured the program listing from my master's degree project, printed on a line printer at London University in 1975. It is 44 sheets. The total thickness is 4.19 mm, giving 0.095 mm per sheet. I made no special requests, so the paper was typical line printer paper of its time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has been stored, usually flat, for over 40 years. I don't know whether that will have affected the thickness.&lt;/p&gt;&#xA;" OwnerUserId="3769" LastActivityDate="2018-11-06T05:06:53.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8189" PostTypeId="2" ParentId="8187" CreationDate="2018-11-06T08:15:52.380" Score="4" Body="&lt;p&gt;&quot;line&quot; is exactly the cache block size you are asking about. So it had 4096 blocks of 16 bytes each.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-11-06T08:15:52.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8190" PostTypeId="2" ParentId="8179" CreationDate="2018-11-06T11:22:33.573" Score="33" Body="&lt;p&gt;Ken's answer is close but not quite right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the real arcade hardware the signal sent to the CRT monitor is read directly from RAM as the electron beam scans over the screen. That means that whatever is shown on screen is whatever is in RAM at the moment the beam passes that area. The game's CPU takes a few frames to draw the entire play area (the girders, ladders and other graphics) and during those frames the video signal will be created from the partially drawn data in RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's actually even more subtle than that though. Look carefully at this frame:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/os3u7.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/os3u7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see that girders 3, 4 and 5 on the right are partially drawn. Ignore the ones on the left, they are actually from the &lt;em&gt;next&lt;/em&gt; frame. The beam is scanning left to right, and the CPU is rendering the girders top to bottom. The strange diagonal tear is actually due to the way the camera scans top to bottom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Girders 1 and 2 are fully rendered by the time the beam scans over them. Girder 3 was about half way drawn, so the left half of it is not visible. At the time the beam was scanning over that area and the video signal was being generated the graphics for that girder had not been written in to RAM yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Girder 4 was drawn next, and you can see that the beam has moved a little further to the right by the time it began rendering. Same thing with girder 5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MAME works a little differently. Because it is both difficult to implement and requires a great deal of processing power, rather than simulate the way the video signal is generated as the beam moves the emulator generates the entire image simultaneously. When the emulated beam is at the left hand side and about to begin generating the display, MAME reads the entire video RAM in one go. So the effect of the beam reading the RAM as it moves across the screen is lost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some emulators do simulate this effect, notably Amiga emulators.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-11-06T11:22:33.573" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8191" PostTypeId="2" ParentId="8175" CreationDate="2018-11-06T15:08:04.543" Score="6" Body="&lt;p&gt;I have not tried it but the following trick might work:&lt;/p&gt;&#xA;&lt;p&gt;You can use &lt;code&gt;halloc(0x1000, 0x10)&lt;/code&gt; to allocate a &amp;quot;huge&amp;quot; memory block of 0x1000 × 0x10 bytes (= 64 KiB) size. According to the manual this block will be 0x10-byte aligned if the second argument is 0x10.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;halloc()&lt;/code&gt; can allocate more than 64K but returns a &lt;code&gt;huge&lt;/code&gt; memory pointer, not a &lt;code&gt;far&lt;/code&gt; memory pointer (see below).&lt;/p&gt;&#xA;&lt;p&gt;In &amp;quot;Real Mode&amp;quot; (&amp;quot;normal&amp;quot; MS-DOS) the linear address is calculated as &lt;code&gt;0x10*segment+offset&lt;/code&gt; so if the offset is a multiple of 0x10 (if the address is aligned to 0x10 bytes) you can calculate a &lt;code&gt;far&lt;/code&gt; pointer that points to the same memory using the following method:&lt;/p&gt;&#xA;&lt;p&gt;You take the offset, divide it by 0x10 and add the result to the segment. Then you set the segment to 0.&lt;/p&gt;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;union {&#xA;    struct {&#xA;        unsigned short off;&#xA;        unsigned short seg;&#xA;    } s;&#xA;    void far *ptr;&#xA;} u;&#xA;&#xA;u.ptr = (void far *)huge_pointer; // Example: 0x1234:FED0&#xA;u.s.seg += u.s.off &amp;gt;&amp;gt; 4;&#xA;u.s.off = 0;&#xA;far_ptr = u.ptr; // should be 0x2221:0000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Both &lt;code&gt;0x1234:FED0&lt;/code&gt; and &lt;code&gt;0x2221:0000&lt;/code&gt; point to the same memory.&lt;/p&gt;&#xA;&lt;p&gt;However there are two differences between the pointers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;hfree()&lt;/code&gt; and similar memory management functions must be called with the &amp;quot;original&amp;quot; pointer returned by &lt;code&gt;halloc()&lt;/code&gt;, not with the &amp;quot;calculated&amp;quot; one&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The difference between &lt;code&gt;huge&lt;/code&gt; and &lt;code&gt;far&lt;/code&gt; memory pointers is that &lt;code&gt;far&lt;/code&gt; pointers do not allow crossing segment boundaries: A &lt;code&gt;far&lt;/code&gt; pointer to &lt;code&gt;X:Y&lt;/code&gt; can only access (0x10000 − Y) bytes of memory. So a &lt;code&gt;far&lt;/code&gt; pointer to &lt;code&gt;0x1234:FED0&lt;/code&gt; can only access the first 304 bytes of the memory block (0x10000 − 0xFED0 = 304) while a &lt;code&gt;far&lt;/code&gt; pointer to &lt;code&gt;0x2221:0000&lt;/code&gt; can access the first 64 KiB (note that &lt;code&gt;halloc()&lt;/code&gt; can allocate more than 64K).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="15334" LastEditDate="2020-11-24T17:48:34.740" LastActivityDate="2020-11-24T17:48:34.740" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8192" PostTypeId="2" ParentId="8157" CreationDate="2018-11-06T15:27:32.123" Score="6" Body="&lt;p&gt;In Italy one of the very first and most known ISP was &lt;a href=&quot;https://it.wikipedia.org/wiki/Video_On_Line&quot; rel=&quot;noreferrer&quot;&gt;Video On Line (VOL)&lt;/a&gt;. I remember that in 1994 it opened an &quot;Internet Point&quot; in Cagliari, Sardinia where people could freely surf and discover the Web for 30 minutes. At the same time it offered dial-up subscription for those lucky folks with  a modem at home.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://it.wikipedia.org/wiki/Galactica_(azienda)&quot; rel=&quot;noreferrer&quot;&gt;Galactica&lt;/a&gt; and &lt;a href=&quot;https://it.wikipedia.org/wiki/MC-link&quot; rel=&quot;noreferrer&quot;&gt;Mc-Link&lt;/a&gt; are even older ISPs, but they were born as BBS, before the birth and early stages of the World Wide Web.&lt;/p&gt;&#xA;" OwnerUserId="4737" LastActivityDate="2018-11-06T15:27:32.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8193" PostTypeId="2" ParentId="8185" CreationDate="2018-11-06T15:45:23.497" Score="1" Body="&lt;p&gt;Based on my experience with the SE/30 and the Mac IIci/IIsi, I'd recommend System 7.1, and I'd also recommend installing it alongside a 32-bit clean ROM using the &lt;a href=&quot;https://www.bigmessowires.com/shop/product/mac-rom-inator-ii-mega/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mac ROM-inator II&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The benefit of System 6 is the small size, low RAM requirements, and quick boot up. However, lots of software specific to the era will need System 7 plus System 7 is just far more capable. So to address these shortcomings, you use the bootable ROM disk of the ROM-inator II. It boots instantly and allows for sufficient customization based on the hardware you have (i.e. extra RAM, networking, built-in HD).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will not be able to run the software you mention that requires at least System 7.5. For me, this is not an issue because such software frequently works best with these additional capabilities that were prevalent by the time System 7.5 was out:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Color display&lt;/li&gt;&#xA;&lt;li&gt;Minimum 640x480 resolution&lt;/li&gt;&#xA;&lt;li&gt;Faster processor, such as 25MHz 030 or an 040.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, for System 7.5 stuff I'd recommend a newer Mac than the SE/30, which has the above capabilities.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-11-06T15:51:09.110" LastActivityDate="2018-11-06T15:51:09.110" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8194" PostTypeId="2" ParentId="6151" CreationDate="2018-11-06T16:28:06.913" Score="2" Body="&lt;p&gt;Capacitors and batteries are the main culprits.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Caps remove noise and ripples from DC voltage lines; without them, those circuits behave like antennae and pick up any and all EMF such as microwaves from cellphone towers and radio station carrier signals, nearby solenoids and other coils, etc.  So caps are important.  Also they are part of the voltage regulation; when you have a 9VAC input and a circuit converts that to 5VDC, you typically have a 7805 IC chip in a 3-pin &quot;TO-220 package&quot; maybe with a heat sink but always a large capacitor nearby.  The large capacitor helps convert the remainder of the AC signal to DC, and without it you'll have an oscillating voltage riding on 5VDC which can fry any sensitive chips using that voltage.  Some game systems or retro computers often are working fine and then die suddenly when you use it one day, often because of the power supply or the regulation circuitry.  Most often because a power capacitor dried out.  Replacing the caps, system is still fried... you burned a chip because of a faulty capacitor.  Always replace the large electrolytic capacitors in old systems, and also in cartridges!  Now, keep in mind, there are two main uses for electrolytics in these systems: for power and for decoupling.  The large ones are for power regulation.  The smaller ones are to &quot;decouple&quot; AC from DC, which you'll see all over the board every couple of inches, connecting + to - DC, so that any noise in the DC gets shorted to ground through the capacitor.  So they're basically noise filters.  For those, I prefer to use tantalum electrolytics, they last forever and should never need replacing again.  I mean, if you love the system and never want to lose it... put in quality parts.  While you're at it, replace the voltage regulators with beefier ones that have built-in protections.  Not all 7805's are the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Batteries.  Three main aspects here: they die and you lose your saves, or they die and rot and ruin your cartridge, or they're about to die and you want to preserve your game.  They rot because they continue to try providing current by eating through their own casing.  &quot;Eating&quot; is more like a chemical reaction as elements exchange electrons.  I've seen people suggest you can replace the battery and keep your save if you do it fast enough.  This is only because of the &quot;5-tau&quot; charge and discharge timing of RC circuits, where basically the nearby capacitor(s) maintain enough electrons to your memory chip while the battery is replaced.  So if your battery is near dead and you're replacing capacitors too... You will definitely lose your saves.  You can figure out where your + and - are on the board, away from the battery to give you working room.. Temporarily solder wires to run to an external battery, such as a CR2032 in a holder, to provide power while you replace the onboard battery and caps.  Keep in mind that the two batteries will be in conflict, the new one will try to charge the dead one, so be quick to cut the dead one out.  Those old batteries have welded tabs on them, making it a pain to find proper replacements.  But the holders that fit properly (the soldering tabs are 18mm apart, which is 2mm short of the 20mm diameter of a CR2032) was a SMD/throughhole combo holder.  The SMD tabs need to be bent down to become throughhole tabs.  It also has to be low-profile (less than 5.5mm height above board).  I looked at many coin holders and none fit properly without some silly contrivance to make it work, until I found these: digikey part# 952-1737-1-ND or manuf# S8421-45R by Harwin Inc.  Be advised that the tabs are brittle from work-hardening and must be &quot;annealed&quot; to bend the tabs down without them breaking.  You can do that by applying a hot iron to the bend until the copper starts to discolor.  Then let it cool.  Then bend it down.  Solder it in, insert coin and you're good to go.&lt;/p&gt;&#xA;" OwnerUserId="11104" LastActivityDate="2018-11-06T16:28:06.913" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8195" PostTypeId="2" ParentId="6151" CreationDate="2018-11-06T18:00:39.900" Score="0" Body="&lt;p&gt;In addition to the all previous answers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can assume that capacitors, resistors, batteries etc. are replaceable, PCBs losing contact are fixable too, no E(E)PROMS, just mask ROMs, mechanical failures are generally not important for electronics to function, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The things left are ICs itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First thing to consider: degradation of plastic case could eventually lead to bonding wires being teared off the crystal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, ICs are not something that would last infinitely, especially in powered on state. Basically there are atomic diffusion processes, that after a hundred of years may make IC unrealiable and then completely failing. When powered on, in addition to increased diffusion rates (because of temperature), &lt;a href=&quot;https://en.wikipedia.org/wiki/Electromigration&quot; rel=&quot;nofollow noreferrer&quot;&gt;electromigration&lt;/a&gt; becomes another concern.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-11-06T18:00:39.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8196" PostTypeId="1" AcceptedAnswerId="11652" CreationDate="2018-11-06T18:05:01.847" Score="6" ViewCount="349" Body="&lt;p&gt;For those of you who don't know, the Game &amp;amp; Watch handhelds were a series of LCD handhelds released prior to the Gameboy that featured one (and sometimes two) player games.  Some of these games (like Donkey Kong II or Mario's Cement Factory). Other games, however, all featured the same looking character, who later got the name Mr. Game &amp;amp; Watch in Masahiro Sakurai's Super Smash Bros. series. My question is if there were ever any hints during this era that suggested that Mr. Game &amp;amp; Watch was an original, recurring character.&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="10751" LastEditDate="2018-11-06T23:56:41.810" LastActivityDate="2019-07-13T10:07:48.450" Title="Was the character in the Game &amp; Watch series supposed to be his own unique character?" Tags="&lt;history&gt;&lt;nintendo&gt;&lt;game-and-watch&gt;" AnswerCount="1" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="8197" PostTypeId="1" CreationDate="2018-11-06T18:27:59.567" Score="3" ViewCount="551" Body="&lt;p&gt;I am trying to move my project from xa (which I found rather buggy) to crasm, which is the other 6502 assembler that comes with debian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My project contains a lot of lines like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ldx #&amp;lt;pname&#xA;ldy #&amp;gt;pname&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;pname&lt;/code&gt; is a label where a string may be found. How is that done in crasm? I couldn't find any such thing as &lt;code&gt;&amp;lt;&lt;/code&gt; and &lt;code&gt;&amp;gt;&lt;/code&gt; in the man page.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-11-06T18:54:21.363" Title="How to express hi/lo byte of a label in crasm" Tags="&lt;assembly&gt;&lt;6502&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8198" PostTypeId="2" ParentId="8197" CreationDate="2018-11-06T18:53:15.860" Score="6" Body="&lt;p&gt;CRASM is .. well ... lets say frugal - and works more or less along a C like expression syntax. And as with C, there are no seperate operators for low/high byte of an address. So&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;&amp;gt;label&lt;/code&gt;  needs to become &lt;code&gt;(label &amp;gt;&amp;gt; 8)&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;while&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;&amp;lt;label&lt;/code&gt; is to be changed to &lt;code&gt;(label &amp;amp; $FF)&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(the last can, AFAIK, be obmitted - but keeping it makes it way more readable)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-11-06T18:53:15.860" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8199" PostTypeId="2" ParentId="8197" CreationDate="2018-11-06T18:54:21.363" Score="3" Body="&lt;p&gt;It doesn't appear that crasm has shorthand for getting the high and low byte of a value.  You'll have to do it explicitly with the &lt;code&gt;&amp;amp;&lt;/code&gt; and &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; operators:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;High byte:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ldx #pname&amp;gt;&amp;gt;8&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Low byte:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ldx #pname&amp;amp;255&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="301" LastActivityDate="2018-11-06T18:54:21.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8200" PostTypeId="1" AcceptedAnswerId="8201" CreationDate="2018-11-07T12:28:17.373" Score="4" ViewCount="303" Body="&lt;p&gt;How does effective address calculation work on the PDP-10?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that the instruction code contains an 18-bit address or offset, one bit for indirect, and a register code that's 4 bits. This probably means that the offset is added to the register, and the sum is the address (or the address of an address, depending on the indirect bit). And since you can't add an offset to R0, I guess that's somehow special cased to encode absolute addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My confusion is about what happens next. It's gotta fetch that word from memory, right? Is that word actually the datum that's treated in whatever way by the instruction? Or is this word again treated in the same way as that 23-bit part of the instruction, adding the offset to a (possibly different) register, and maybe keep going like that?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="6794" LastEditDate="2018-11-14T21:15:52.420" LastActivityDate="2018-11-14T21:15:52.420" Title="PDP-10 effective address calculation" Tags="&lt;memory-layout&gt;&lt;pdp-10&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8201" PostTypeId="2" ParentId="8200" CreationDate="2018-11-07T12:55:36.160" Score="5" Body="&lt;h2&gt;TL;DR: Yes&lt;/h2&gt;&#xA;&lt;p&gt;A (calculated) address (from an instruction) is always used to fetch a word (36 Bit), which, if the I bit was set, is interpreted again the same way - thus allowing indefinite addressing chaining - otherwise used at face value for the operation.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read:&lt;/h2&gt;&#xA;&lt;p&gt;All instructions always an effective address, usually an operand in memory (*1)&lt;/p&gt;&#xA;&lt;p&gt;As you already described, the effective address is calculated by using the three address fields of an instruction to calculate an 18 bit effective address (*2):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The indirect bit (I).&lt;/li&gt;&#xA;&lt;li&gt;The 4 bit index field (X),&lt;/li&gt;&#xA;&lt;li&gt;The basic 18 bit address field (Y)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If the X field is zero, the effective address is simply the contents of the address field (Y).&lt;/p&gt;&#xA;&lt;p&gt;If the index field X is nonzero, then it names an accumulator to use as an index register. Any accumulator except 0 can be so used. The lower half of the contents of that register is added to the address field (Y) from the instruction.&lt;/p&gt;&#xA;&lt;p&gt;A set I bit now specifies indirection. If set the first step is taken as before, but the resulting (18 bit, no overflow), is used to address a word (36 bit that is). Of this word the bits 13..35 (the lower 23 bits) are interpreted exactly as if taken from an instruction&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - For immediate instructions, it's not a memory address memory, but used directly, as a operand. Like ANDI, ADDI, MOVEI, etc.&lt;/p&gt;&#xA;&lt;p&gt;*2 - The whole instruction format is&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;9 bit OP&lt;/li&gt;&#xA;&lt;li&gt;4 bit Accumulator&lt;/li&gt;&#xA;&lt;li&gt;1 bit Indirect&lt;/li&gt;&#xA;&lt;li&gt;4 bit Index&lt;/li&gt;&#xA;&lt;li&gt;18 bit Address&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-11-07T13:23:47.003" CommentCount="29" ContentLicense="CC BY-SA 4.0" />
  <row Id="8202" PostTypeId="2" ParentId="8175" CreationDate="2018-11-07T14:33:55.893" Score="3" Body="&lt;p&gt;A community wiki answer because it includes a lot of useful evidence, but I seem to flub the numbers somewhere:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Per OpenWatcom, the definition of &lt;code&gt;_fmalloc&lt;/code&gt; is &lt;a href=&quot;https://github.com/open-watcom/open-watcom-v2/blob/e69458539e84de181d5f23065e9024587b656f88/bld/clib/heap/c/fmalloc.c#L68&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;. Notably:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if( amt == 0 || amt &amp;gt; - ( sizeof( heapblk ) + TAG_SIZE * 2 ) ) {&#xA;        return( NULL );&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Allowing for integer rounding and &lt;a href=&quot;https://github.com/open-watcom/open-watcom-v2/blob/38bcff831948ff2defc26e0fca319a670c0a5717/bld/hdr/size_t.sp&quot; rel=&quot;nofollow noreferrer&quot;&gt;given that &lt;code&gt;size_t&lt;/code&gt; is 16-bit&lt;/a&gt;, that asserts that if the block you asked for is larger than &lt;code&gt;65536&lt;/code&gt; minus &lt;code&gt;sizeof( heapblk ) + TAG_SIZE * 2&lt;/code&gt; then the allocation will fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;heapblk&lt;/code&gt; &lt;a href=&quot;https://github.com/open-watcom/open-watcom-v2/blob/1c28685ea1d868e63d325897876b59be59daa7dd/bld/clib/heap/h/heap.h#L131&quot; rel=&quot;nofollow noreferrer&quot;&gt;is a struct&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct heapblk {&#xA;    tag                 len;                /* size of heap (0 = 64K) */&#xA;    heapptr             prev;               /* segment selector/offset for previous heap */&#xA;    heapptr             next;               /* segment selector/offset for next heap */&#xA;    freeptr             rover;              /* roving pointer into free list */&#xA;    unsigned int        b4rover;            /* largest block before rover */&#xA;    unsigned int        largest_blk;        /* largest block in the heap  */&#xA;    unsigned int        numalloc;           /* number of allocated blocks in heap */&#xA;    unsigned int        numfree;            /* number of free blocks in the heap */&#xA;    freelist            freehead;           /* listhead of free blocks in heap */&#xA;#if defined( __WARP__ )&#xA;    unsigned int        used_obj_any :1;    /* allocated with OBJ_ANY - block may be in high memory */&#xA;#endif&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And from line 50 of the same file, &lt;code&gt;TAG_SIZE&lt;/code&gt; is just &lt;code&gt;sizeof(tag)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On line 106 &lt;code&gt;tag&lt;/code&gt; turns out to be a typedef for &lt;code&gt;unsigned int&lt;/code&gt; so it's also 16 bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;heapptr&lt;/code&gt; is a union defined on line 115, of a &lt;code&gt;__segment&lt;/code&gt; and a &lt;code&gt;heapblk_nptr&lt;/code&gt; (a.k.a. a &lt;code&gt;_WCNEAR&lt;/code&gt;). So it's two bytes as &lt;code&gt;nptr&lt;/code&gt; means near pointer, and a &lt;code&gt;__segment&lt;/code&gt; means 16 bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;freeptr&lt;/code&gt; is a union defined on line 120, of a &lt;code&gt;freelist_nptr&lt;/code&gt; and an &lt;code&gt;unsigned int&lt;/code&gt;. So also two bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;freelist&lt;/code&gt; is a struct defined on line 125 consisting of a &lt;code&gt;tag&lt;/code&gt;, and two &lt;code&gt;freeptr&lt;/code&gt;s. So six bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So a &lt;code&gt;heapblk&lt;/code&gt; is 22 bytes of meaningful storage:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8 bytes for the four &lt;code&gt;unsigned int&lt;/code&gt;s;&lt;/li&gt;&#xA;&lt;li&gt;2 bytes for the &lt;code&gt;tag&lt;/code&gt; (because it's another &lt;code&gt;unsigned int&lt;/code&gt;);&lt;/li&gt;&#xA;&lt;li&gt;6 more for the &lt;code&gt;freelist&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;2 for the &lt;code&gt;freeptr&lt;/code&gt;; and&lt;/li&gt;&#xA;&lt;li&gt;4 in total for the &lt;code&gt;heapptrs&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That plus another 4 for the 2*TAG_SIZE is 26.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore as posited elsewhere, you cannot allocate a full 64kb because some storage is reserved for heap management; however I seem to total that to 26 bytes, not 32.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-11-07T17:37:40.237" LastActivityDate="2018-11-07T17:37:40.237" CommentCount="3" CommunityOwnedDate="2018-11-07T14:33:55.893" ContentLicense="CC BY-SA 4.0" />
  <row Id="8203" PostTypeId="1" AcceptedAnswerId="8204" CreationDate="2018-11-07T14:48:02.730" Score="4" ViewCount="576" Body="&lt;p&gt;On NES games such as The Legend of Zelda and Metroid, entities that get to close to the edge of the screen, whether that be the top, bottom, left, or right side wrap around to the other side of the screen. This only happens as a result of glitching, and was clearly not an intended feature of the games that are effected by it. What causes this? Is it a fault of the Object Attribute Memory (OAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zelda screen wrap glitch: &lt;a href=&quot;https://youtu.be/2gTvKmBQGyQ?t=34&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/2gTvKmBQGyQ?t=34&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Metroid screen wrap glitch: &lt;a href=&quot;https://youtu.be/vXMhSsJ50MU?t=37&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/vXMhSsJ50MU?t=37&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not own these videos.&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="75" LastEditDate="2018-11-07T22:11:41.387" LastActivityDate="2018-11-09T16:02:24.630" Title="Is screen wrap on the NES a fault of the OAM?" Tags="&lt;graphics&gt;&lt;nintendo&gt;&lt;nes&gt;&lt;sprite&gt;&lt;glitches&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8204" PostTypeId="2" ParentId="8203" CreationDate="2018-11-07T17:36:21.137" Score="6" Body="&lt;p&gt;After looking at the posted videos, I think that OAM layout may be the cause of the Zelda right-to-left glitch, but not the Metroid top-to-bottom glitch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Zelda if you frame step you can see at least one frame where the left half of Link is on the right hand side of the screen and his right half is on the left. The OAM accepts only 8 bits to specify sprite x position even though the screen is 256 pixels wide, and sprites are only 8px wide — Link himself is built out of at least two sprites. So what you're seeing is consistent with code that does something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;set_link_sprite1(x, y)&#xA;set_link_sprite2(x+8, y)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where x was in the range 248—255, meaning that &lt;code&gt;x+8&lt;/code&gt; overflows an 8-bit integer. The game logic isn't affected because Link's actual position is still safely within the 8-bit range, but setting the sprite location for his right half causes integer overflow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Metroid example, Samus jumps off the top of the screen and reappears on the bottom — but not just graphically, play actually continues from there. So whatever overflow occurs affects game state. It's therefore unlikely to be a mere figment of output. I would imagine there is an internal variable that holds her position as an offset of the current screen position, and that internal variable underflows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OAM y positions are also limited to 8 bits in size but the screen is only 240 pixels tall (224 'visible'; see comments), so portions of objects may appear to wrap if they are at least 32 pixels tall (which is two sprites, as they can be 16px tall) and drawn at a sufficiently low position with code like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;set_sprite1(x, y)&#xA;set_sprite2(x, y+16)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Or sufficiently close to the top of the screen with code more like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;set_sprite1(x, y)&#xA;set_sprite2(x, y-16)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Given that she's tall, part Samus reappearing on the top or bottom when she's close to the bottom or top would also be unsurprising.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="10751" LastEditDate="2018-11-09T16:02:24.630" LastActivityDate="2018-11-09T16:02:24.630" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8205" PostTypeId="1" AcceptedAnswerId="8206" CreationDate="2018-11-07T23:01:47.253" Score="12" ViewCount="1286" Body="&lt;p&gt;I currently have a ton of QIC-250MB tapes that I would like to read from (its been 30 years). I have a Tandberg TDC 3600 SCSI interfaced tape drive but I am lost how to connect it. In the past, with the computers then, they had a SCSI port where I could directly connect it. However, with computers today, SCSI interfaces appear to be obsolete. To be more specific, this is how it looks from the front:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/X6zhZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/X6zhZ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and from the back:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Z6WNY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z6WNY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The back looks like a 50 Pin Centronics. I am just not sure how I can connect such a device using modern computers, if at all. Any suggestions or guidances would be much appreciated! I am essentially starting from scratch, and would be interested in purchasing an old computer unit, if necessary. &#xA;Finally, I have one of these iomega SCSI to USB adapters that were made back in the day. The interface on this looks like a SCSI-2 interface. Is there a way to perhaps convert the 50 pin HD to the SCSI-2 then to USB?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OG9b6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OG9b6.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would something like this allow the IOMEGA to connect to the 50 pin internal without use of ribbons?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Q3o8e.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q3o8e.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT (12-6-2019):&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to all the comments. I ended up buying the adapter above and was able to get it working by connecting the drive to the adapter, then the iOmega adapter to convert to usb. The biggest thing was getting the terminator power correct. This was done by setting the pins in the drive correctly. The first drive I used wasn't able to be used since it was older and didn't have terminator power pin controls. The second drive did work. I actually then plugged the usb into my Macbook Pro, booted into a flash drive version of Linux (Ubuntu 18.04), and then used the &lt;code&gt;mt&lt;/code&gt; command to control the tape drive and was able to read it all out.&lt;/p&gt;&#xA;" OwnerUserId="11115" LastEditorUserId="11115" LastEditDate="2019-12-07T04:21:46.883" LastActivityDate="2019-12-07T04:21:46.883" Title="What is the best way to connect an old Tandberg QIC tape drive using today's computers?" Tags="&lt;scsi&gt;&lt;magnetic-tape&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8206" PostTypeId="2" ParentId="8205" CreationDate="2018-11-07T23:14:15.393" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The back looks like a 50 Pin Centronics. I am just not sure how I can connect such a device using modern computers, if at all. Any suggestions or guidances would be much appreciated!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, it seems to be a classic 50 Pin SCSI-1 interface - or at least compatible. So do it the same way it always has been done: &lt;strong&gt;Get yourself an SCSI interface card&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jup, it's as easy as that, as there are SCSI cards are well in production, just nowadays for PCIe. I will not add any sellers, but just key in &lt;code&gt;SCSI PCIe&lt;/code&gt; into your favorite search engine. Similarly, there are controllers for USB (try &lt;code&gt;SCSI USB&lt;/code&gt;) or SATA (&lt;code&gt;SCSI SATA&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whatever fits your machine best. Costwise they are all in the 50 USD region. Well, brand new ones may be more than that, but then there is still the used market.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit, since you already found an USB to SCSI one.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The interface on this looks like a SCSI-2 interface. Is there a way to perhaps convert the 50 pin HD to the SCSI-2 then to USB?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;SCSI-2 is exactly like SCSI-1, just with a double width data bus (*1). SCSI-2 introduced &lt;em&gt;Wide SCSI&lt;/em&gt; with doubling the data path (thus needing more pins) and &lt;em&gt;Fast SCSI&lt;/em&gt; which doubles the data rate - or both, &lt;em&gt;Fast Wide SCSI&lt;/em&gt;, quadrupling the data rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, they are all compatible, even different devices operating in either mode (Standard, Fast, Wide, Fast-Wide) can be combined at the same controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So all you now need is a 68 pin to 50 pin header (not Centronics) cable. More likely this will be two cables, 68 to 50 (Centronics) and 50 (Centronics) to 50 (Pin header).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to check the manual for the adaptor, as it may as well be an &lt;em&gt;Ultra SCSI&lt;/em&gt; one (also 68 pin). Not all SCSI-1 drives will be compatible, but more important, you may need a converting cable, as Ultra is using twisted pair cableing - and no terminators.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The wide part wasn't as often used, despite the connector.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-11-07T23:54:29.287" LastActivityDate="2018-11-07T23:54:29.287" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8207" PostTypeId="2" ParentId="2193" CreationDate="2018-11-08T07:41:43.237" Score="2" Body="&lt;p&gt;Having a larger palette range is not necessarily without issue either. If you look at the Amstrad CPC+/GX4000 models, they increased the palette range from 27 to 4096 colours. While that certainly allows for better graphics, only being able to have a very limited subset of those colours onscreen limits how effectively you can use them for shading effects etc. And since palette entries become two bytes long, it is no longer possible to make an atomic change to any given palette entry (since the Z80 only has an 8-bit data bus, a 16-bit write happens in two parts) changing colours mid-frame causing artifacting effects with the red/blue level of a colour changing before the green level, unless you are very careful with timing.&lt;/p&gt;&#xA;" OwnerUserId="11119" LastActivityDate="2018-11-08T07:41:43.237" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8208" PostTypeId="1" AcceptedAnswerId="8209" CreationDate="2018-11-08T11:58:14.463" Score="16" ViewCount="2493" Body="&lt;p&gt;I distinctly remember, on the computer I had in the 90's, being able to type &lt;code&gt;cdd D:\bla\bla&lt;/code&gt; in the MS-DOS command prompt, to change both the current directory &lt;em&gt;and&lt;/em&gt; drive (avoiding having to type &lt;code&gt;D:&lt;/code&gt; then &lt;code&gt;cd \bla\bla&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I regularly still type it in the Windows command prompt, which complains that no such command exists. Then I remember I must do it with &lt;code&gt;cd /d D:\bla\bla&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it likely means this specific command wasn't actually part of MS-DOS. Did it come from some set of third-party utilities? I remember I might have something like Norton Utilities installed, but I couldn't find information about this specific tool in its &lt;a href=&quot;https://en.wikipedia.org/wiki/Norton_Utilities&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or is my memory weak and I just made this up? &lt;/p&gt;&#xA;" OwnerUserId="4614" LastEditorUserId="6794" LastEditDate="2018-11-14T19:24:44.260" LastActivityDate="2020-09-24T08:16:47.980" Title="Where was the DOS cdd utility from?" Tags="&lt;ms-dos&gt;&lt;file-system&gt;&lt;utilities&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8209" PostTypeId="2" ParentId="8208" CreationDate="2018-11-08T12:13:39.577" Score="33" Body="&lt;p&gt;I remember &lt;code&gt;CDD&lt;/code&gt; as a &lt;a href=&quot;https://www.4dos.info/&quot; rel=&quot;noreferrer&quot;&gt;4DOS&lt;/a&gt; command, which would have been available in the Norton Utilities as &lt;a href=&quot;https://en.wikipedia.org/wiki/4DOS#NDOS&quot; rel=&quot;noreferrer&quot;&gt;NDOS&lt;/a&gt;. JP Software’s other shells also implement &lt;code&gt;CDD&lt;/code&gt;, so 4OS2 and 4NT users would probably recognise it too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is at least one batch file implementation of &lt;code&gt;CDD&lt;/code&gt; too, developed by Gary Mays in 1996, and provided as part of his “M” batch file enhancer (which I can’t find on the Internet right now).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Under Windows you could use &lt;a href=&quot;https://jpsoft.com/products/take-command.html&quot; rel=&quot;noreferrer&quot;&gt;Take Command&lt;/a&gt; or &lt;a href=&quot;https://jpsoft.com/products/tcc-cmd-prompt.html&quot; rel=&quot;noreferrer&quot;&gt;TCC&lt;/a&gt;, the descendants of 4DOS, which still include &lt;a href=&quot;https://jpsoft.com/help/cdd.htm&quot; rel=&quot;noreferrer&quot;&gt;CDD&lt;/a&gt;, or write a command file to implement it.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-11-09T09:56:42.477" LastActivityDate="2018-11-09T09:56:42.477" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8210" PostTypeId="2" ParentId="8157" CreationDate="2018-11-08T12:44:05.887" Score="5" Body="&lt;p&gt;In Brazil one of most famous ISPs was &lt;a href=&quot;https://pt.wikipedia.org/wiki/Universo_Online&quot; rel=&quot;nofollow noreferrer&quot;&gt;Universo Online&lt;/a&gt;. They, just like AOL, would send CDs with newspapers, magazines and when you bought a new computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We had a bunch of smaller ISPs but they eventually faded away (or they became broadband, either wireless or fiber, ISPs) when people stopped using dial-up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AOL never caught on here.&lt;/p&gt;&#xA;" OwnerUserId="1953" LastEditorUserId="1953" LastEditDate="2020-01-09T17:19:30.900" LastActivityDate="2020-01-09T17:19:30.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8211" PostTypeId="2" ParentId="8134" CreationDate="2018-11-08T14:28:37.747" Score="7" Body="&lt;p&gt;I was at college 1979-83, studying computing, and remember being told in a microprocessor course that the Z8000 wasn't very good. After a browse through the &lt;a href=&quot;http://www.bitsavers.org/components/zilog/z8000/Z8000_CPUrefMan_1982.pdf&quot; rel=&quot;noreferrer&quot;&gt;user's manual&lt;/a&gt; I can see why. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The memory model seems to have been designed by a hardware engineer who didn't think very much about software. Indeed, the whole architecture seems designed to do the same jobs as the Z80, only better, unlike its more successful competitors. The crucial difference was that most 8-bit software was written in assembly languages, while 16-bit and later software was mostly written in compiled high-level languages. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 68000 family was clearly designed with an eye towards high-level language programming. The architecture was 32-bit in concept, although the original implementations were 16-bit. It had &quot;flat&quot; unsegmented memory addressing, which is always easier for compilers, and could address 16MiB of RAM, which increased to 4GiB in later members of the family. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8086 family was less ambitious, but was practical. It could only address 1MiB of RAM, and it dealt with it in 64KiB segments, but you could place those segments anywhere in memory. This made it practical, if inconvenient, to deal with data structures larger than 64KiB. Once 16-bit MS-DOS had begun to dominate the business microcomputer market, there was plenty of motive to improve the programming tools. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z8000 family came in two models. The Z8002 could only deal with 64KiB RAM, although you could stretch that by using separate 64KiB address spaces for code, data and stack. However, writing an operating system that works with that is gratuitously difficult. Operating systems have to be able to handle program code as data when they load programs. The multiple address space trick is mostly useful for embedded systems without general-purpose operating systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z8001 was the large memory version, able to handle 8MiB RAM in each address space. It deals with the memory in 64KiB segments, but it has a crucial flaw. &lt;em&gt;The segments are at fixed addresses.&lt;/em&gt; Segment 0 is at address 0, segment 1 is at address 64Ki, segment 2 is at address 128Ki, segment 3 at address 192Ki, and so on. The segments &lt;em&gt;can't&lt;/em&gt; overlap, and you &lt;em&gt;can't&lt;/em&gt; change their positions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This makes handling data structures larger than 64KiB very cumbersome. It also restricts the use of smaller data structures, because you really don't want them to cross segment boundaries. This creates arbitrary restrictions, makes linkers and loaders more complicated, and generally reduces your flexibility in the use of memory. Operating system people hate that, and so do compiler writers. The combination of that, plus buggy initial chips, doomed the Z8000. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zilog acknowledged the memory model had been a mistake with the Z80000, which had a mode with a 4GiB linear address space. It also supported Z8002 and Z8001 modes, with more and larger segments available in the Z8001 mode. However, by the time it appeared in 1986, the x86 and 68000 were well-established and the fashion in new processors was RISC. The Z80000 was very much non-RISC, and doesn't seem to have got anywhere. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2018-11-08T14:51:50.950" LastActivityDate="2018-11-08T14:51:50.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8212" PostTypeId="2" ParentId="8205" CreationDate="2018-11-08T16:01:14.137" Score="6" Body="&lt;p&gt;The first thing you need to do is to open the front door of the drive and inspect the rubber roller that drives the tape.  It is not uncommon for the roller on old drives to have deteriorated into a black goo.  You don't want that stuff fouling your tapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, you need to inspect your tapes and ensure that the belts are still good.  These belts develop dry-rot over time, and if they're broken (or so weak that they're likely to break when you read the tape) you will have problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once that's done, your simplest path forward is probably to install a SCSI host adapter in one of the expansion slots of your computer.  Try to find a card that supports single-ended SCSI, such a card will have the same 50-pin connector on the card and a simple ribbon cable will connect the card to the tape drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to find a SCSI enclosure for your tape drive, this will convert the internal ribbon connector to an external connector that you're more likely to be able to find a cable or adapter for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that you will need to worry about software too.  Once the drive is hooked up, how will you read from it?  If your tapes were written using NTBACKUP.EXE (aka Windows Backup) then keep in mind that modern versions of Windows no longer include that utility.  You may need to set up a retro system running older software to be able to read your tapes.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-11-08T16:01:14.137" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8213" PostTypeId="1" AcceptedAnswerId="8215" CreationDate="2018-11-08T16:25:29.273" Score="2" ViewCount="170" Body="&lt;p&gt;I'm poking about in the usual places, but not having any luck, does anyone have any good introductory information for HP's AGL, &quot;A Graphics Language&quot;?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-11-08T17:28:14.647" Title="Sources for HP's A Graphics Language?" Tags="&lt;hp&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8215" PostTypeId="2" ParentId="8213" CreationDate="2018-11-08T17:28:14.647" Score="7" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/HP-GL#AGL&quot; rel=&quot;noreferrer&quot;&gt;AGL&lt;/a&gt; was an extension to BASIC and FORTRAN, which was implemented on &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_9800_series#Programming&quot; rel=&quot;noreferrer&quot;&gt;several&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_2640#Models&quot; rel=&quot;noreferrer&quot;&gt;HP&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_2100#Operating_systems&quot; rel=&quot;noreferrer&quot;&gt;systems&lt;/a&gt;. It was used to describe what you wanted drawn, and the BASIC/FORTRAN system would generate HP-GL to drive a plotter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most accessible manuals seem to be &lt;a href=&quot;http://www.series80.org/Manuals/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. The &lt;a href=&quot;http://www.series80.org/PDFs/HP86-Plotter.pdf&quot; rel=&quot;noreferrer&quot;&gt;HP-86/87 Plotter ROM Manual&lt;/a&gt;, describes the changes to the HP-86 BASIC when using a plotter. These don't seem to be very extensive, suggesting that you also need to look at an HP-86 BASIC manual to learn how the graphics commands worked. However, that manual doesn't seem to be on that site, although the HP-85 manual is. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2018-11-08T17:28:14.647" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8216" PostTypeId="1" AcceptedAnswerId="8217" CreationDate="2018-11-08T18:29:16.850" Score="8" ViewCount="535" Body="&lt;p&gt;I'm curious how the original (Model 1) TRS-80 generated video.  I understand that an RF modulator was used but what kind of circuitry did it use to feed the RF modulator?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TRS-80 Color Computer used an MC6847 IC but I can't find any references to what the original TRS-80 used.  Was it an IC or did it generate video in a similar way the Apple I or Apple II did?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A schematic would be very helpful as well.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="6659" LastEditDate="2018-11-08T18:44:19.190" LastActivityDate="2018-11-10T13:52:15.373" Title="How did the original TRS-80 generate video?" Tags="&lt;video&gt;&lt;trs-80&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8217" PostTypeId="2" ParentId="8216" CreationDate="2018-11-08T18:43:55.543" Score="14" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I understand that an RF modulator was used but what kind of circuitry did it use to feed the RF modulator?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To start with, the TRS-80 did &lt;em&gt;not&lt;/em&gt; use an RF modulator. It delivered composite video (*1) as it was meant to be used with its own brand monitor - which basically was an RCA TV set with the RF part removed.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The TRS-80 Color Computer used an MC6847 IC but I can't find any references to what the original TRS-80 used.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Like many others, just a bunch of counters and muxes (*2).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was it an IC or did it generate video in a similar way the Apple I or Apple II did?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Somewhat, except it was rather straightforward to make it simple instead of squeezing out the max as with the Apple II.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A schematic would be very helpful as well.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's even something way better, the original &lt;a href=&quot;http://www.1000bit.it/support/manuali/trs/TRS-80%20Technical%20Manual%20%281978%29%28Radio%20Shack%29%28pdf%29.pdf&quot; rel=&quot;noreferrer&quot;&gt;TRS-80 Technical Manual&lt;/a&gt; which includes a detailed description of each stage (*3).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, not really, as the output signal wasn't a standard (1V) composite signal, but generated and transferred at TTL level (5V). The TV set had not only the RF part carved out, but also a little board with an optocoupler added, which not only transposed the signal in level (Again not standard, but this time the 2V signal the remaining logic wanted), but also served as shock protection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - After all, a 6845 or similar is nothing other than a bunch of counters integrated into a single ... well, &lt;strong&gt;I&lt;/strong&gt;ntegrated &lt;strong&gt;C&lt;/strong&gt;ircuit :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - But there are, in addition, many sources for TRS-80 schematics online available ... like &lt;a href=&quot;http://ts-inc.dyndns.org/TRS-80%20Model%201%20Schematics/&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-11-08T22:03:55.820" LastActivityDate="2018-11-08T22:03:55.820" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8218" PostTypeId="1" CreationDate="2018-11-08T19:45:32.473" Score="4" ViewCount="467" Body="&lt;p&gt;One of the tricks many of the early machines allowed was the ability to record an audio track on one of the tape channels, and then turn it on or off using the deck control. I believe the Ataris may have been the first to use this &quot;in production&quot; but I also saw it on the CoCo and I believe the C64 could do it too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that got me thinking... did anyone use the second channel for storage? Looking over what I can find, the answer appears to be &quot;no&quot;. None of the early S-100 systems did, KCS or CUPS et all, nor any of the microcomputer systems I can find.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And why not? I can imagine that machines that used normal user-supplied decks might have mono input, but surely even then one could find a suitable portable device with stereo in, or even use a nice Akai or something. These weren't exactly the most complex circuits, I can't believe it would add anything material to the cost of the AD/DA circuitry at least.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And those with digital interfaces, like the Atari and Commodore decks, one could send data to the deck at a higher rate, split the bits in the AD, and write them out two at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then I thought, why not use FSK at several frequencies? Looking over the standards I see frequencies from around 600 to 6000 being used, often at one end or the other. For instance, Atari used relatively high-end frequencies at 3995 and 5327 Hz, while KCS was 1200 and 2400. This implies one has safe usage from 1200 to 5300 at a minimum. So why not both, or several?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have some insight here? And were there any really advanced systems that did these sorts of things?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-11-13T02:52:50.470" Title="Cassettes that used stereo?" Tags="&lt;cassette-tape&gt;&lt;kansas-city&gt;" AnswerCount="4" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8219" PostTypeId="2" ParentId="8218" CreationDate="2018-11-09T03:39:36.753" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Does anyone have some insight here?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Preface: Since it hasn't been done, everything that follows is of course only a list of possible reasons. Each may have been overcome at some point, so there is no reason to pile possible solutions to the points called here.&lt;/p&gt;&#xA;&lt;p&gt;This is basically two questions in one:&lt;/p&gt;&#xA;&lt;h2&gt;Why weren't not both channels used?&lt;/h2&gt;&#xA;&lt;p&gt;There are several factors&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Double the hardware. Even if it's not much, it adds to cost and complexity&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Way&lt;/em&gt; more complex software. It did not only need to decode two channels simultaneously, but also check for errors on either side, and separate error handling&lt;/li&gt;&#xA;&lt;li&gt;More prone to misalignment&lt;/li&gt;&#xA;&lt;li&gt;Slow CPUs. Keep in mid, coding was done in software in early machines. There is not much time left to do two channels simultaneously.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Less important but still valid reasons might have been:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;inability to use cheap mono recorders&lt;/li&gt;&#xA;&lt;li&gt;inability to use cheap tapes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Considering that most cassette formats didn't even use mono recording to it's full ability, using both channels seems far fetched.&lt;/p&gt;&#xA;&lt;p&gt;Even a cheap recorder could go up to 12 kHz. That would have enabled a recording speed of about 4800 bit/s (using just two tones of 9600 and 4800 Hz). Sure, maybe a bit more error correction might have been useful, still, it wouldn't be so far fetched. And with a single channel this could have been handled with an 8 bit CPU alone.&lt;/p&gt;&#xA;&lt;h2&gt;Why were only two straight frequencies used?&lt;/h2&gt;&#xA;&lt;p&gt;For one all of the above also applies here. It would have needed way more complex hardware and/or even more software and thus more powerful CPUs. So again, there is no need to go for more complex encoding when single frequency recording wasn't fully used.&lt;/p&gt;&#xA;&lt;h2&gt;The most important reason...&lt;/h2&gt;&#xA;&lt;p&gt;... might have been that there was no need to do so. Cassette recording was only important for a very short period. When floppies became available, they where so much more convenient with their maned and random access, not to mention the &lt;em&gt;way&lt;/em&gt; higher speeds, that cassette wasn't worth any further investment.&lt;/p&gt;&#xA;&lt;p&gt;A good hint here is that several faster cassette systems were developed and offered around 1980 (not at least the stringy floppies :)) and none of them caught on. The manufacturers had no intention to speed up cassettes beyond the initial speed, as they wanted to sell their floppies, and third party manufacturers couldn't sell their add on devices, as the price was rather high when compared with the more expensive but also way more convenient floppies.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;There is also one misconception, which is that any 'digital' system would change the situation, as the hardware is still the same, no matter if it's installed within the drive or the computer.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-11-09T08:52:19.880" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8220" PostTypeId="1" CreationDate="2018-11-09T08:20:21.263" Score="6" ViewCount="2444" Body="&lt;p&gt;I recently got this copy of Pokemon Red (JP). After an indeterminate amount of time (anywhere from 30 seconds to 30 minutes), it will cause my GB Player to crash. I have functional copies of Yellow and Green that don't cause this, so I know it's the cartridge, not the system. The system appears to believe I'm ejecting the game mid-playthrough (it gives me the &quot;please shut off the console before ejecting&quot; message). There's no discernible in-game trigger for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dmu9e.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dmu9e.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked inside the cartridge and noticed a few things:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The battery is replaced and the soldering job looks a bit sloppy.&lt;/li&gt;&#xA;&lt;li&gt;The ROM card is a different model from my other cartridges, and it appears to be replaced (signs of epoxy glue).&lt;/li&gt;&#xA;&lt;li&gt;The pins appear to be significantly more worn than my other cartridges.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Does this evidence (or anything else you notice) make it appear that this cartridge has been tampered with in such a way as to cause the aforementioned crashes? Would any of this justify returning a cartridge as defective or damaged?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="11128" LastActivityDate="2019-04-09T14:38:23.313" Title="Is my Japanese Pokemon Red cart fake or damaged?" Tags="&lt;repair&gt;&lt;game-cartridge&gt;&lt;game-boy&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8221" PostTypeId="2" ParentId="8218" CreationDate="2018-11-09T08:25:59.890" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So that got me thinking... did anyone use the second channel for storage?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well yes, everyone - They simply used the same signals for both channels. But that was obviously not your question.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You simply could not assume everyone had a stereo recorder. While it might seem &quot;normal&quot; today, it wasn't in the 80ies&lt;/li&gt;&#xA;&lt;li&gt;Coding and decoding &lt;em&gt;one&lt;/em&gt; channel already max out a typical 6502 or Z80 of the time&lt;sup&gt;1&lt;/sup&gt;. Doing two in parallel, (and for cost reasons, the de-/encoding is typically done by the CPU only) would not be possible without much more complex electronics&lt;/li&gt;&#xA;&lt;li&gt;Increasing information density decreases reliability and also compatibility across and between a wide range of recorders and tape material.&lt;/li&gt;&#xA;&lt;li&gt;Market erosion for more complex storage devices. Tape storage was low-end, low-cost technology. It had to stay there in order to still be able to sell floppy drives.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;: While not a standard cassette drive: The Sinclair microdrives actually used &lt;strong&gt;both&lt;/strong&gt; tracks on the drives to increase data density and speed. In order to still be able to use relatively simple hardware, even there the tracks were not used in &lt;em&gt;parallel&lt;/em&gt;, but rather &lt;em&gt;alternating&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closest you are looking for is maybe the Atari 410 - This actually used one of the stereo tracks for separate audio recording.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-11-09T18:02:45.860" LastActivityDate="2018-11-09T18:02:45.860" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="8222" PostTypeId="1" AcceptedAnswerId="8226" CreationDate="2018-11-09T15:09:40.707" Score="10" ViewCount="2086" Body="&lt;p&gt;So as many fans are aware, the N64 era was a jump for many games into the third dimension. Games like Mario and Zelda were impacted in a positive way. Others... not so much. While it may seem odd that Nintendo chose for every last one of their properties released on the N64 was transformed into 3D. Until you consider the possibility that the N64 may have been incapable of 2D graphics. It makes sense; Even opening logos and GUIs are made up of 3D objects. Did the N64 hardware make it impossible for developers to create 2D games? I'm asking seriously.&lt;/p&gt;&#xA;" OwnerUserId="10751" LastActivityDate="2018-11-17T22:56:10.027" Title="Is the N64 incapable of 2D graphics?" Tags="&lt;hardware&gt;&lt;nintendo&gt;&lt;nintendo-64&gt;" AnswerCount="4" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8223" PostTypeId="2" ParentId="4883" CreationDate="2018-11-09T15:31:24.593" Score="5" Body="&lt;p&gt;&lt;code&gt;POKE19,32&lt;/code&gt; just before issuing the &lt;code&gt;INPUT&lt;/code&gt; statement.&lt;/p&gt;&#xA;" OwnerUserId="11129" LastEditorUserId="621" LastEditDate="2018-11-09T15:56:52.417" LastActivityDate="2018-11-09T15:56:52.417" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8226" PostTypeId="2" ParentId="8222" CreationDate="2018-11-09T15:57:39.093" Score="10" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;While it may seem odd that Nintendo chose for every last one of their properties released on the N64 was transformed into 3D.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why odd? Being all-3D was &lt;strong&gt;the USP&lt;/strong&gt; (*1) for the N64. Since games had to be rewritten anyway, why not making them fit the new dogma?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Until you consider the possibility that the N64 may have been incapable of 2D graphics.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Just because something isn't &lt;strong&gt;obviously&lt;/strong&gt; used, doesn't mean it's impossible.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It makes sense; Even opening logos and GUIs are made up of 3D objects.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Or is it just because the whole system made it so easy to do 3D, that no-one wanted to go through all the hassles of 2D programming? (*2)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did the N64 hardware make it impossible for developers to create 2D games?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Of course not. The N64 still featured a classic frame buffer (what else) which got filled by the &lt;em&gt;Reality Coprocessor&lt;/em&gt; (RCP) and read by the &lt;em&gt;Video Interface&lt;/em&gt; (VI) when outputting. So a program could as well put the RCP on hold (well, let it run NOP loops) and have the CPU manipulate the frame buffer as simple bitmap graphics. Or any combination thereof (*3). Depending on the VI mode this would be like a plain 320x200@24b bitmap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just again, why go that way of 'manually' do all the bitblitting and timing and transformations needed to make a game look good in 2D, when the RCP could do the same with no (or at least way less) effort in real time and in 3D?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just think of a simple explosion: where in 2D the artist would have to pre-render a series of different tiles in various sizes to be shown in an accordant timing, when the same in 3D can be done with a simple cloud, modified by color and shader arguments and let the RCP do the work, not only simplifying programming but also outputting a way better result.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - &lt;a href=&quot;https://en.wikipedia.org/wiki/Unique_selling_proposition&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unique Selling Point&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Occam's Razor might be helpful in cutting through :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Many games are known that to add effects by postprocessing the frame buffer. Or even better have the RCP (pre-)renver various 3D game parts into memory and then feed them again in as textures, use them to overlay parts of the frame buffer or even combine them by CPU before feeding the VI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some emulators were at first rather disappointing recreating it. The developer of the &lt;a href=&quot;https://code.google.com/archive/p/glidehqplusglitch64/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Glide64&lt;/a&gt; renderer plugin for N64 emulators has writen a multi part series (&lt;a href=&quot;http://gliden64.blogspot.com/2013/10/frame-buffer-emulation-intro.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intro&lt;/a&gt;, &lt;a href=&quot;http://gliden64.blogspot.com/2013/11/frame-buffer-emulation-part-i.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;P.1&lt;/a&gt;, &lt;a href=&quot;http://gliden64.blogspot.com/2014/01/frame-buffer-emulation-part-ii.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;P.2&lt;/a&gt;, &lt;a href=&quot;http://gliden64.blogspot.com/2014/01/frame-buffer-emulation-part-iii.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;P.3&lt;/a&gt;) of blogposts about his work to emulate the frame buffer in a way that as many as possible frame buffer tricks can be emulated. A must read to get an idea how colourful that can be.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-11-16T15:54:52.830" LastActivityDate="2018-11-16T15:54:52.830" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8227" PostTypeId="1" AcceptedAnswerId="8228" CreationDate="2018-11-10T08:03:33.080" Score="12" ViewCount="1055" Body="&lt;p&gt;&lt;a href=&quot;http://codebase64.org/doku.php?id=base:combination_sort_8-bit_elements&amp;amp;s[]=phx&quot; rel=&quot;noreferrer&quot;&gt;Code written for the Commodore 64 sometimes uses the &lt;code&gt;PHX&lt;/code&gt; opcode&lt;/a&gt;, which should push X onto the stack. There also are &lt;code&gt;plx&lt;/code&gt;, &lt;code&gt;phy&lt;/code&gt;, &lt;code&gt;ply&lt;/code&gt;. &lt;a href=&quot;http://singularcrew.hu/64tass/&quot; rel=&quot;noreferrer&quot;&gt;These were apparently added on the CMOS versions of the 6502&lt;/a&gt;; very old processors do not have these codes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;64tass assembles a &lt;code&gt;phx&lt;/code&gt; as &lt;code&gt;$da&lt;/code&gt;, but that opcode does not seem to be emulated by x64, which is the Commodore 64 emulator that comes with VICE. It  even gets disassembled as a NOOP in the VICE debugger, and correspondingly, the emulated CPU leaves registers unchanged when it encounters this opcode:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.C:4048  68          PLA            - A:06 X:02 Y:06 SP:f5 .V-.....   22053498&#xA;.C:4049  DA          NOOP           - A:84 X:02 Y:06 SP:f6 NV-.....   22053502&#xA;.C:404a  6A          ROR A          - A:84 X:02 Y:06 SP:f6 NV-.....   22053504&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-11-11T17:02:11.253" Title="Does the Commodore 64 have the PHX opcode?" Tags="&lt;commodore-64&gt;&lt;assembly&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8228" PostTypeId="2" ParentId="8227" CreationDate="2018-11-10T08:43:58.400" Score="20" Body="&lt;p&gt;The C64 does not have these opcodes.  The 6510/8500 CPU it uses was never produced in a CMOS variant, so it cannot even be upgraded to support these opcodes.  The NMOS/HMOS versions interpret this opcode as a NOP instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure why the code you linked to uses them, but it is not possible to do so on a physical C64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update - the article in question was apparently copied from &lt;a href=&quot;http://www.6502.org/source/&quot; rel=&quot;noreferrer&quot;&gt;http://www.6502.org/source/&lt;/a&gt; -- it was never intended to be C64 specific, and the site operators presumably did not notice when copying it that it wouldn't work on a C64.&lt;/p&gt;&#xA;" OwnerUserId="547" LastEditorUserId="547" LastEditDate="2018-11-10T08:52:41.190" LastActivityDate="2018-11-10T08:52:41.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8229" PostTypeId="2" ParentId="8227" CreationDate="2018-11-10T12:57:18.813" Score="7" Body="&lt;p&gt;As Jules &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8228/6659&quot;&gt;correctly stated&lt;/a&gt;: &lt;em&gt;The C64 does not have these opcodes&lt;/em&gt; (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More important, the source does clearly point out this fact:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; UPPERCASE opcodes are 6502 codes&#xA;; lowercase opcodes are 65C02 codes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And lower case ones (65C02) used are not only stack related, but as well &lt;code&gt;lda (zp)&lt;/code&gt; and &lt;code&gt;stz&lt;/code&gt;. So that program should have failed way before reaching the &lt;code&gt;PHX&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: No need to read manuals - &lt;strong&gt;&lt;a href=&quot;https://img-9gag-fun.9cache.com/photo/aB0rByZ_460s.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inline Documentation is Your Friend&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, the C65 or a 65816 (SuperCPU) equipped C64 does. So there are C64 applications out there using them. Obscure but possible.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-11-11T17:02:11.253" LastActivityDate="2018-11-11T17:02:11.253" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8231" PostTypeId="1" AcceptedAnswerId="8233" CreationDate="2018-11-10T16:22:56.447" Score="33" ViewCount="5860" Body="&lt;p&gt;I have this MS-DOS 6.22 machine which maps a network drive to a &lt;a href=&quot;https://serverfault.com/questions/871239/can-group-policy-deny-access-to-non-domain-shares&quot;&gt;SAMBA share on a Raspberry PI&lt;/a&gt;. The PI is powered by a USB lead from the DOS machine, so the two power up together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mapping starts when this happens near the end of AUTOEXEC.BAT&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;net logon samba mypassword /yes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can imagine there is a bit of a race with both computers booting up, and often the mapping will be attempted before Samba is ready.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Googling for &quot;delay in batch file&quot; gives links like &lt;a href=&quot;http://www.robvanderwoude.com/wait.php&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt;, but quickly going through the options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;PAUSE&lt;/code&gt; - needs a key-press, no keyboard is attached on site&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SLEEP&lt;/code&gt; - not in this version of DOS&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;TIMEOUT&lt;/code&gt; - ditto&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;PING 127.0.0.1 -n 10&lt;/code&gt; - this ping ignores -n&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The other suggestions listed are all for Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I put a delay in, or otherwise wait for Samba to become ready?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(It may be possible to get the PI to boot quicker - that's off topic here but if there's interest in that I'll open another question over &lt;a href=&quot;https://raspberrypi.stackexchange.com/&quot;&gt;here&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="7904" LastEditorUserId="7904" LastEditDate="2018-11-10T17:31:22.573" LastActivityDate="2018-11-13T16:15:25.080" Title="How to put a delay in AUTOEXEC.BAT" Tags="&lt;ms-dos&gt;&lt;boot&gt;" AnswerCount="8" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8232" PostTypeId="2" ParentId="8231" CreationDate="2018-11-10T16:40:24.940" Score="13" Body="&lt;p&gt;If you do any programming, it would probably be trivial to create a small C executable that calls Sleep() to pause the thread for a specified timeout.  However, it stands to reason you are not the first person to need such a tool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some very quick googling turned up this page: &lt;a href=&quot;https://www.computerhope.com/dutil.htm&quot; rel=&quot;noreferrer&quot;&gt;https://www.computerhope.com/dutil.htm&lt;/a&gt; which, if you scroll down, offers a Sleep.exe that will work on MS-DOS 5.x or higher.  I am not endorsing this page or the Sleep.exe utility it hosts; if it deletes your hard drive, don't blame me.  ;-)&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2018-11-10T16:40:24.940" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8233" PostTypeId="2" ParentId="8231" CreationDate="2018-11-10T18:08:24.000" Score="57" Body="&lt;p&gt;Since you are using MS-DOS 6.22 you can abuse the &lt;a href=&quot;http://www.robvanderwoude.com/choice.php&quot; rel=&quot;noreferrer&quot;&gt;CHOICE&lt;/a&gt; command to introduce a set timed delay by piping the output of a REM statement to the choice command, leaving it with no way to complete other than via the /T timeout option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example from &lt;a href=&quot;http://www.robvanderwoude.com/wait.php#CHOICE&quot; rel=&quot;noreferrer&quot;&gt;Rob van der Woulde's Scripting Pages&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;REM | CHOICE /C:AB /T:A,10 &gt;NUL&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The CHOICE command never actually gets to complete with either of the choices defined with the /C parameter because the piped input is a REM statement.  Instead, it will wait for the defined /T timeout parameter (in seconds) to elapse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This command is available natively in MS-DOS 6 through MS-DOS 7, and is also available for use in Windows NT 4, 2000, and XP if you install the &lt;a href=&quot;https://winworldpc.com/product/windows-resource-kit/nt-40&quot; rel=&quot;noreferrer&quot;&gt;Windows NT 4 Resource Kit&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2018-11-10T18:08:24.000" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8234" PostTypeId="2" ParentId="8218" CreationDate="2018-11-11T00:33:35.087" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I can imagine that machines that used normal user-supplied decks might&#xA;  have mono input, but surely even then one could find a suitable portable device with &gt; stereo in, or even use a nice Akai or something.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, almost all consumer tape recorders (except for expensive component stereo decks) had mono inputs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;only&lt;/em&gt; reason for using cassette tape was to lower the cost of the computer, and being able to use a recorder that the customer already had was cheapest of the lot. Back then this was vitally important for breaking into the consumer market, because disk drives and controllers were hideously expensive. It made no sense to produce an interface for expensive stereo recorders because that wasn't the target market.   &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;These weren't exactly the most complex circuits, I can't believe it&#xA;  would add anything material to the cost of the AD/DA circuitry at&#xA;  least.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Look at the tape interface circuit of a Sinclair ZX81 or Spectrum - do you see &lt;em&gt;any&lt;/em&gt; AD/DA converter? These computers were designed to use the smallest number of components they could get away with, to keep costs as low as possible.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...why not use FSK at several frequencies? Looking over the standards&#xA;  I see frequencies from around 600 to 6000 being used, often at one end&#xA;  or the other. For instance, Atari used relatively high-end frequencies&#xA;  at 3995 and 5327 Hz, while KCS was 1200 and 2400. This implies one has&#xA;  safe usage from 1200 to 5300 at a minimum. So why not both, or&#xA;  several?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Conventional FSK is actually not a good choice for audio cassette recorders (I suspect it was only popular because engineers were trained to believe that's how you do it). Atari's use of high frequencies is bad, and any system that tries to generate sine waves or filter frequencies is counterproductive. To use multiple frequency bands at once you would need to separate them with filters, and then distortion and noise become even more of a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Better schemes ignore individual frequencies and just time transitions, realizing that the data is recorded on the tape as flux transitions which become a series of spikes when played back. They don't try to resolve high frequencies which are attenuated by head azimuth alignment and tape-head gap, and they take into account the frequency changes and random jitter caused by motor speed variations and tape stretching. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And those with digital interfaces, like the Atari and Commodore decks,&#xA;  one could send data to the deck at a higher rate&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The CPU in many retro computers is fast enough to encode and decode modified FSK at &lt;em&gt;much&lt;/em&gt; higher rates than a consumer tape recorder can handle. &lt;a href=&quot;https://code.google.com/archive/p/otla/wikis/OtlaPlayer.wiki&quot; rel=&quot;nofollow noreferrer&quot;&gt;Project O.T.L.A.&lt;/a&gt; creates audio files which load on a ZX Spectrum, Amstrad CPC or MSX at 12600 bps, but only when played by a device which has sufficient frequency stability and linearity to reproduce the signal accurately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with consumer tape recorders isn't just bandwidth, but also motor speed variations, phase noise, distortion, dropouts etc. Using a mono head or both sides of a stereo head improves signal-to-noise ratio and reduces dropouts compared to using one side of a stereo head. Using both sides of a stereo head independently would make it much worse. Cassette stereo is an awful format!  &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2018-11-11T00:33:35.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8235" PostTypeId="2" ParentId="8231" CreationDate="2018-11-11T04:16:59.447" Score="3" Body="&lt;p&gt;I'm not sure if the version of the NET command you're using returns meaningful error codes, but if it does you can use something like this in your AUTOEXEC.BAT:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;net logon samba mypassword /yes&#xA;if NOT ERRORLEVEL 1 goto :noerror&#xA;net logon samba mypassword /yes&#xA;if NOT ERRORLEVEL 1 goto :noerror&#xA;net logon samba mypassword /yes&#xA;if NOT ERRORLEVEL 1 goto :noerror&#xA;:noerror&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Repeat the first two lines as many times as necessary to ensure enough attempts are made.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2018-11-11T04:16:59.447" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8236" PostTypeId="2" ParentId="8222" CreationDate="2018-11-11T05:31:30.883" Score="2" Body="&lt;p&gt;Mischief Makers was primarily a “2D game” for the N64, and has a bit of a cult following.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any UI or HUD you might see on a 3D game (the number of lives, stars, coins, etc in Super Mario 64, for instance) are typically presented as 2D elements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if a particular console doesn’t directly support the concept of “2D sprites,” these can always be implemented by a textured pair of triangles and a the right “2d projection matrix.”&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Historically, it was common in that era for Sony to deny publishing of 2D games on the original PlayStation for US territories, so few 2D games made it out of Japan on that platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It’s very possible this was the same story with Nintendo, or at the very least, it might have been common in the industry at the time to move away from 2D since 3D home console games were now for the first time, truly viable.&lt;/p&gt;&#xA;" OwnerUserId="5079" LastEditorUserId="5079" LastEditDate="2018-11-12T04:37:11.200" LastActivityDate="2018-11-12T04:37:11.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8237" PostTypeId="2" ParentId="2995" CreationDate="2018-11-11T05:42:15.413" Score="1" Body="&lt;p&gt;&lt;strong&gt;HotPaw2, the &quot;best answer&quot; is probably incorrect:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This allowed only 32 kB of DRAM, and 8 bit plane layers was far more than fit in memory. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;4 Hi-Res bitplanes take up the exact same amount of memory as 8 Low-Res bitplanes.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At Max overscan, the NTSC Amiga can fetch 768 pixels, and in PAL mode can do at least 566 lines, which adds up to 54,336 bytes, not 32K.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Claims that there would be problems with copper, blitter and 68K are inaccurate, since we have all see 16 color, Hi-Res Amiga OCS screens. That's the exact same same amount of data as an 8 bitplane low-res display. In short, if you can do 4 bitplanes in high-res, you can do 8 in low-res. The color register count is the real issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, &quot;CLUT&quot; does not really apply to the Amiga. &quot;Lookup tables&quot; is a crass PC concept used by software people who don't understand hardware. You know, the kind of guys who think everything is a Sprite. The Amiga uses Indirection to gate RGB values from the color registers. Even the Sprite output goes through the same circuit. There is no &quot;lookup&quot;. There is no table. A 5 bit value selects which of the RGB registers have their bit patterns gated out to the DACs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the OCS chipset has the bandwidth for 6, 7 or 8 planes in Low_res mode, there are only 32 color registers. Sure, the cycles for 8 bitplanes are there. But the difference between 5 bitplanes and 8 bitplanes, means you go from needing 32 color registers to 256 registers. That's 8X as much space on die!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should have been done. But at the time, 32 color regs, whose RGB levels you could change, plus a HAM mode must have seen like a ton when the specs were set in 1984. Hell it was still viable in 1994. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore seemed to realize that more was better, and EHB mode was added. I can't recall if this was an OCS revision or only in ECS and later. It used 6 bitplanes but was saddled by having only 32 color registers, so they used the 6th plane for a half-as-bright modification to the register define by planes 1-5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have to wonder why they didn't add more color registers- it should have been doable without blowing compatibility.&lt;/p&gt;&#xA;" OwnerUserId="11137" LastActivityDate="2018-11-11T05:42:15.413" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8238" PostTypeId="2" ParentId="8231" CreationDate="2018-11-11T20:17:46.277" Score="1" Body="&lt;p&gt;There's a DOS version of perl 4 that fits on a floppy.  It is the handiest thing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perl is a scripting language designed to replace and extend shell scripting on Unix, which is itself more powerful than shell scripting in DOS (such as autoexec.bat). You can use for just that, except it's literally designed to save you from that moment where you say &quot;I can't quite do this in shell&quot;. When you need a little more, it extends and extends clear up into a proper computing language. Perl 5 even has OO.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously &lt;code&gt;C:\perl4\perl.exe -e &quot;sleep 10&quot;&lt;/code&gt; is no trouble at all, but you can do a lot of other stuff. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once, we were doing a network rollout with 50 machines with Win3.1 and a third party IP stack or WFW3.11, the former did not support DHCP, so IP addresses were hardcoded into /wherever/etc/hosts.  It was on me to change all the config and hosts files.  &lt;em&gt;On the same weekend as an unmissable festival&lt;/em&gt;.  I used perl 4 to make a boot floppy that would find and read the config and hosts file, and rewrite it with corrected IPs. Gave my staff 20 of those disks... and said &quot;power up the machine with this floppy in&quot;.  Made sure they all could boot a floppy.  I was sure it would work, and it did. Great festival!  &lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2018-11-11T20:34:23.137" LastActivityDate="2018-11-11T20:34:23.137" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8239" PostTypeId="1" CreationDate="2018-11-11T21:03:26.367" Score="3" ViewCount="237" Body="&lt;p&gt;As stated &lt;a href=&quot;https://www.ssec.wisc.edu/~billh/bp/repgl.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, repGL (a library to emulate SGI's IrisGL on top of OpenGL) can be found at this address: &lt;a href=&quot;ftp://ftp.informatik.uni-oldenburg.de/pub/grafik/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ftp://ftp.informatik.uni-oldenburg.de/pub/grafik/&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can see the file, indeed (it's named &lt;code&gt;repGL-0.2.tar.gz&lt;/code&gt;), but I can't download it since I always get a 551 error from the FTP server, therefore I was wondering if anyone knows of any other server providing this archive.&lt;/p&gt;&#xA;" OwnerUserId="11140" LastEditorUserId="79" LastEditDate="2018-11-14T10:20:29.150" LastActivityDate="2018-11-22T06:20:52.153" Title="Cannot find repGL source anywhere" Tags="&lt;graphics&gt;" AnswerCount="1" CommentCount="9" ClosedDate="2018-11-12T21:45:57.003" ContentLicense="CC BY-SA 4.0" />
  <row Id="8240" PostTypeId="1" CreationDate="2018-11-11T22:39:48.300" Score="2" ViewCount="96" Body="&lt;p&gt;I currently have some QIC-150 tape cartridges. These are the Imation DC6250 250 MB tapes. I understand that this came out in the late 1990's. I'd like to read these using a tape drive but want to find the last and newest model that could still read them. For example, I read somewhere that the SLR1 line was equivalent to the QIC-150?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am wondering if anyone would know if there are any resources detailing conversion and backwards compatibility with these tapes.&lt;/p&gt;&#xA;" OwnerUserId="11115" LastEditorUserId="6659" LastEditDate="2018-11-11T23:07:26.853" LastActivityDate="2018-11-11T23:18:08.557" Title="Which tape drives were the last to offer backward compatibility with QIC-150 Tape Cartridges?" Tags="&lt;storage&gt;&lt;scsi&gt;&lt;magnetic-tape&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8241" PostTypeId="2" ParentId="8231" CreationDate="2018-11-11T22:56:42.177" Score="1" Body="&lt;p&gt;Many DOS PCs have the Norton Utilities suite of software installed.  Norton Utilities includes a program called &quot;Batch Enhancer&quot; (&lt;code&gt;BE.EXE&lt;/code&gt;) that includes a number of facilities for use from batch files, including delays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have this utility, you can add a delay like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BE DELAY nn&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;nn&lt;/code&gt; is the length of the delay in units of 1/18.2 of a second.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-11-11T22:56:42.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8242" PostTypeId="2" ParentId="8240" CreationDate="2018-11-11T23:18:08.557" Score="1" Body="&lt;p&gt;To start with, &lt;a href=&quot;https://en.wikipedia.org/wiki/Scalable_Linear_Recording&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLR1&lt;/a&gt; is what Tandberg called &lt;a href=&quot;https://en.wikipedia.org/wiki/Quarter-inch_cartridge#3M_Data_Cartridge_(DC)&quot; rel=&quot;nofollow noreferrer&quot;&gt;QIC-150&lt;/a&gt;. They may as well have been one of the last manufacturers of QIC-150 compatible drives. Next, QIC-150 was defined (and first offered) in 1984. THe last standard document is dated &lt;a href=&quot;https://www.qic.org/html/qicstan.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;June 1991&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, there is no real sense in looking for a 'latest' drive, as that may be an IBM device with a mainframe interface. I think I'm safe to assume that you're rather would like to look for any drive adhering to the standard with an interface supported by whatever computer can handle.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-11-11T23:18:08.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8243" PostTypeId="2" ParentId="8239" CreationDate="2018-11-12T01:13:27.900" Score="3" Body="&lt;p&gt;It looks like wherever they're storing that stuff is in what's known as a serious but stable condtion. Serious as in it doesn't work, but stable inasmuch as it's consistent in not working. Maybe that server is buried deep in the basement somewhere and hasn't actually been &lt;em&gt;maintained&lt;/em&gt; since 1995.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't get much information when accessing it through a browser but the command line output is a solid indication that the storage medium is on its last legs. The large amount of time it takes to generate a file listing (large even for the normally slow-ish FTP) is the first clue but the below transcript seems to show that the media is corrupt or flaky in some way:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pax@paxbox$ ftp -p ftp.informatik.uni-oldenburg.de&#xA;Connected to ftp.informatik.uni-oldenburg.de.&#xA;220-&#xA;    FTP.Informatik.Uni-Oldenburg.DE&#xA;    Moin!&#xA;220 ftp.Informatik.Uni-Oldenburg.DE FTP server (FreeBSD) ready.&#xA;Name (ftp.informatik.uni-oldenburg.de:pax): anonymous&#xA;331 Guest login ok, type your name as password.&#xA;Password:&#xA;230-&#xA;230 Guest login ok, access restrictions apply.&#xA;Remote system type is UNIX.&#xA;Using binary mode to transfer files.&#xA;&#xA;ftp&amp;gt; cd /pub/grafik&#xA;250 CWD command successful.&#xA;&#xA;ftp&amp;gt; ls&#xA;227 Entering Passive Mode&#xA;150 Opening ASCII mode data connection for '/bin/ls'.&#xA;total 3&#xA;drwxr-xr-x  2 ingo  14    1536 Jun  5  1996 format-docs&#xA;drwxr-xr-x  2 ingo  14     512 Jun 30  2001 jpeg&#xA;drwxr-xr-x  4 ingo  14     512 Aug 29  1995 netpbm&#xA;drwxr-xr-x  6 ingo  14     512 Jun 30  2001 png&#xA;-rw-r--r--  1 ingo  14   59523 Aug 29  1995 repGL-0.2.tar.gz&#xA;drwxr-xr-x  2 ingo  14     512 Jul 25  1996 seminar&#xA;drwxr-xr-x  2 ingo  14     512 Aug 29  1995 test-images&#xA;-rw-r--r--  1 ingo  14  573908 Jun  5  1996 tiff-v3.4-tar.gz&#xA;-rw-r--r--  1 ingo  14  673234 Nov 24  1994 urt-3.1.tar.gz&#xA;226 Transfer complete.&#xA;&#xA;ftp&amp;gt; get repGL-0.2.tar.gz&#xA;local: repGL-0.2.tar.gz remote: repGL-0.2.tar.gz&#xA;227 Entering Passive Mode&#xA;150 Opening BINARY mode data connection for 'repGL-0.2.tar.gz' (59523 bytes).&#xA;551 Error on input file: Input/output error.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In terms of getting access, I can see two immediate possibilities. The first is to contact the university itself. The second is to try and locate the author, who seems to be one Michael Krause. The author is proving difficult to find using my normal methods (though I'm &lt;em&gt;not&lt;/em&gt; the NSA) so I suspect the university may be the more useful approach.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Alternatively, a bit of dedicated research by one &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/7347/alex-hajnal&quot;&gt;Alex Hajnal&lt;/a&gt; has turned up &lt;a href=&quot;https://github.com/irixxxx/igl&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt;, which purports to be &quot;an Open Source drop-in replacement for IrisGL using OpenGL under X11&quot;. That may well be suitable for your needs if the original cannot be found.&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-11-22T06:20:52.153" LastActivityDate="2018-11-22T06:20:52.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8244" PostTypeId="1" AcceptedAnswerId="8245" CreationDate="2018-11-12T04:00:39.847" Score="9" ViewCount="1058" Body="&lt;p&gt;First, I am NOT asking how to use the BIOS Setup utility. I'm asking how to OVERRIDE the built-in settings my BIOS Setup supports for the HD geometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a 1991 NCR PC with a 386SX, on-board IDE, and IBM ROM with &quot;IBM Setup 4.0.0&quot; built-in. As is common for PC BIOS ROM of the era, it offers a fixed table containing the C/H/S (Cylinder/Head/Sector) geometry for 47 different IDE Hard Disk &quot;Types&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of the 47 HD Types match the geometry of my IDE DOM (Disk on Module), though all of the options are smaller capacity than the DOM.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;fdisk.exe seems to work, creating a partition matching the disk type selected in the BIOS Setup.&lt;/li&gt;&#xA;&lt;li&gt;format.exe seems to work, resulting in a volume of the right size.&lt;/li&gt;&#xA;&lt;li&gt;copying system files over, or running the MS-DOS installer seems to work for a few drive types.&lt;/li&gt;&#xA;&lt;li&gt;BUT, in the end, the written files cannot be read back and the drive cannot be booted.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I suspect if the BIOS C/H/S parameters actually matched the C/H/S parameters of the IDE DOM, then things would work fine. The correct settings are 493/16/63 (it's 242MB).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With all that background, my question is whether there is some way to override the geometry settings that are in the fixed table. I'm imagining I could boot from floppy and use a DOS program to change the CMOS to the right HD parameters. That assumes the CMOS actually stores C/H/S, rather than just the type number from the ROM table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose if editing the CMOS is not possible or would only be useful to change the type number of the drive, then would it be possible to patch my BIOS ROM to replace one of the existing fixed types with the C/H/S values that I actually require?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: XT-IDE Option ROM is not a possibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Someone will probably suggest XT-IDE ROM extension, but I have not been able to get this machine to recognize it when plugged into an ISA card.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-11-12T04:06:17.157" LastActivityDate="2019-01-21T07:32:35.770" Title="How can I edit CMOS hard drive geometry settings on a 1991 PC?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;hard-disk&gt;&lt;bios&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8245" PostTypeId="2" ParentId="8244" CreationDate="2018-11-12T08:15:51.730" Score="10" Body="&lt;p&gt;In all the BIOS setups I was dealing with that have similarly 47 drives to chose from the first or the last one was editable directly in BIOS SETUP for manual settings. Sometimes the manual settings was done in different menu entry (near formatting utility ... but beware do not accidentally format IDE !!!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC DOS uses BIOS routines for HDD access so if BIOS SETUP utility does not support settings you have even overriding geometry data could prove FATAL. I would explore other means:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;using smaller HDD size matching compatible geometry&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;there might be one of the 47 HDD drive settings that work but produce smaller size of the drive. This is the safest but rather limiting solution.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;upgrading BIOS&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;this one is &lt;strong&gt;very dangerous&lt;/strong&gt; as if anything goes wrong or you got incompatible BIOS you may render your motherboard unusable (unless have means to revert to original BIOS). So I would do this only as a last resort and also backup the BIOS image. If your BIOS is socketed you might still resurrect it from dead in case of failure if you got a programmer compatible with it. Hot swap is also a possibility Booting from original chip but programing different one but you have to be careful not to short circuit something or blow anything by electrostatic charge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;btw having a backup copy of the BIOS somewhere is always a good idea as a protection from Černobyl virus ... that one was nasty one&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;EZ Drive&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is your &lt;strong&gt;best option&lt;/strong&gt;. Back in the days when the HDDs starts to go bigger utilities like EZ Drive rises. They are installed into Boot sector and overrides the BIOS HDD access interrupts allowing use of bigger HDDs. Not sure if works also without LBA but I think it does (it was ages ago). IIRC it also worked well with win 9x not just MS-DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There might be also different utilities out there,... But I was using this one and was very happy with it. Beware some BIOSes boot sector protection can prevent you from installing it properly (the same goes for Windows installations) so I would temporarily disable it ... and when working enabling it again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here the &lt;a href=&quot;https://www.philscomputerlab.com/western-digital.html#&quot; rel=&quot;nofollow noreferrer&quot;&gt;EZ-Drive link&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-01-21T07:32:35.770" LastActivityDate="2019-01-21T07:32:35.770" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8246" PostTypeId="2" ParentId="8222" CreationDate="2018-11-12T12:16:55.923" Score="6" Body="&lt;p&gt;All consoles with 3D capability are able to do 2D graphics, simply by rendering flat polygons on a fixed plane. Nintendo provided libraries to do this with the N64, which were used for things like 2D menus and the HUD in otherwise 3D games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the popular game Goldeneye featured 2D menus and a 2D HUD overlaid on the 3D game display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Gjoqy.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gjoqy.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The N64 did have one big limitation that made it somewhat unsuitable for 2D games though: the 4k texture buffer. As can be seen in the screenshot above, the quality of the 2D graphics is not great, with low resolution repeating textures and somewhat poorly defined text. Compared to contemporary machines fully 2D games would have looked poor on the system, so were rare.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-11-12T12:16:55.923" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8247" PostTypeId="2" ParentId="8166" CreationDate="2018-11-12T13:21:06.717" Score="7" Body="&lt;p&gt;The Amstrad CPC was not slow at scrolling.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Hardware scrolling as originally intended&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Ever since the Amstrad CPC was released, even BASIC programs could use vertical hardware scrolling of the whole screen by just printing text past the bottom line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is true, though, that when used in the simplest way, the granularity of the hardware scrolling is a bit big: 2 bytes horizontally (which makes 16, 8 or 4 pixel columns depending on mode) and 8 lines vertically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding directions, all are possible.  Actually, you can jump to any of 2048 position at each frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relatively high granularity caused a number of game programmers to use alternate solutions, either double buffering or software scrolling with redraw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the scene to display can afford high speed, it can render beautifully, here is an example scrolling above 3D isometric color mountains: &lt;a href=&quot;https://www.youtube.com/watch?v=nX6-WXT60NA&amp;amp;feature=youtu.be&amp;amp;t=164&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;(1) Isometrikum Vanity - YouTube&quot;&gt;(1) Isometrikum Vanity - YouTube&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eyLGd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eyLGd.png&quot; alt=&quot;Isometrikum by Vanity&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Refined hardware scrolling&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Advanced tricks by reprogramming the CRTC while displaying a video frame allow to overcome those limitations: scrolling with finer granularity, scrolling only part of the screen, scrolling several areas of the screen independently. Some tricks highly impact CPU availability, but in some cases one can keep CPU available for other work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More details on: &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Programming:Hardware_scrolling&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Programming:Hardware scrolling - CPCWiki&quot;&gt;Programming:Hardware scrolling - CPCWiki&lt;/a&gt; and &lt;a href=&quot;http://www.cpcwiki.eu/index.php?search=scrolling&amp;amp;title=Special%3ASearch&amp;amp;go=Go&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Search results for &amp;quot;scrolling&amp;quot; - CPCWiki&quot;&gt;more on CPCWiki&lt;/a&gt; including a reference to a 1987 game that uses one-line-by-one-line vertical hardware scrolling &lt;a href=&quot;https://www.youtube.com/watch?v=j1YpQUVD8fE&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;(1) Mission Genocide - Amstrad CPC (Firebird, 1987) - YouTube&quot;&gt;(1) Mission Genocide - Amstrad CPC (Firebird, 1987) - YouTube&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Combining tons of clever use of what is originally intended as hardware scrolling capability, highly spectacular effects are possible. Some recent examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Original CPC &lt;a href=&quot;https://www.youtube.com/watch?v=22wSm4y27Wk&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;(1) Amstrad CPC demo : Logon&amp;#39;s run - 3D meets the aging bits - YouTube&quot;&gt;(1) Amstrad CPC demo : Logon's run - 3D meets the aging bits - YouTube&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CPC+ (where extras keep the overall architecture of the original CPC) &lt;a href=&quot;https://www.youtube.com/watch?v=CPCyF71098o&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;(1) GX4000 / Amstrad Plus demo: Eerie Forest (&amp;quot;Shadow of the Beast&amp;quot; one-screen intro) - YouTube&quot;&gt;(1) GX4000 / Amstrad Plus demo: Eerie Forest (&amp;quot;Shadow of the Beast&amp;quot; one-screen intro) - YouTube&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Many other prods for original CPC use those tricks in one form or another, see &lt;a href=&quot;http://www.pouet.net/prodlist.php?platform%5B0%5D=Amstrad+CPC&amp;amp;page=1&amp;amp;order=thumbup&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;prodlist :: pouët.net&quot;&gt;prodlist :: pouët.net&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="574" LastEditorUserId="574" LastEditDate="2018-11-13T10:43:59.867" LastActivityDate="2018-11-13T10:43:59.867" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8250" PostTypeId="1" CreationDate="2018-11-12T22:07:40.047" Score="14" ViewCount="819" Body="&lt;p&gt;I have a Windows 95 Upgrade 3.5&quot; DMF installation disk set where several disks were infected by the boot sector virus known as &quot;Chance.A&quot;. I'm interested in restoring these to their original contents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before rewriting the disks using disk images from another source, I imaged the contents, and started to compare those images with the other set. The affected Disk 1 has&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;an altered region at the beginning of the disk including the boot sector, &lt;/li&gt;&#xA;&lt;li&gt;a partial backup of the original boot sector code in the normally-zeroed area at relative offset 0x3e00&lt;/li&gt;&#xA;&lt;li&gt;a different last 9 digits of the string &quot;/U:xxxxx-xxx-xxxxxxx&quot; (where &quot;x&quot; is a decimal digit) at offset 0x131376, which looks suspiciously like a Product ID although I cannot confirm this, and&lt;/li&gt;&#xA;&lt;li&gt;a binary difference around offset 0x15d960.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The first two of these are both things that I would expect to result from the modifications by &quot;Chance.A&quot;, but the string difference especially makes me suspect that the disks' contents were different even without the involvement of &quot;Chance.A&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What did Microsoft customize, if anything, on different installation disk sets, either at time of manufacture individually or across different batches / production runs, or through having the installer itself modify the disk contents?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; In Microsoft's terminology, a product ID is a sort of serial number that should not be confused with the product key a.k.a. CD-key that must be entered at install time, although for CD-based products the product ID is usually determined by the product key&lt;/p&gt;&#xA;" OwnerUserId="8508" LastEditorUserId="8508" LastEditDate="2018-11-13T02:11:41.433" LastActivityDate="2018-11-13T17:26:55.760" Title="What did Microsoft customize on Windows 95 installation floppy disks?" Tags="&lt;floppy-disk&gt;&lt;windows-95&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8251" PostTypeId="2" ParentId="8250" CreationDate="2018-11-12T23:00:32.777" Score="9" Body="&lt;p&gt;Neat question ... and I may have found only a partial answer when looking through my notes. I did find some information about Win95 product/activation keys to be entered when installing from CD. Basically 3 formats.&lt;/p&gt;&#xA;&lt;h2&gt;10 Digit Key&lt;/h2&gt;&#xA;&lt;p&gt;For one there is the basic 10 digit number in 3-7 format, where the first group (3) are not checked, while the second (7) has to have a digit sum modulo 7 (*1)&lt;/p&gt;&#xA;&lt;h2&gt;20 Digit Key&lt;/h2&gt;&#xA;&lt;p&gt;OEM versions (starting with 95B) had a 5-3-7-5 format with&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;5 digits as &lt;em&gt;dddyy&lt;/em&gt; marking the day and year the Version got produced&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;3 characters, always &lt;code&gt;OEM&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;7 digits again checked as digit sum modulo 7, but the frist two now &lt;strong&gt;must&lt;/strong&gt; be zero&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;5 digits as kind of serial number, this time the first may &lt;strong&gt;not&lt;/strong&gt; be zero&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;11 Digit Key&lt;/h2&gt;&#xA;&lt;p&gt;There seems also to be another 11 digit key, coded as 4-7, much like the fist, but now the first group defines if it's meant as a full install (&lt;code&gt;0401&lt;/code&gt;) or an update (&lt;code&gt;0402&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;h2&gt;What Version will be Checked&lt;/h2&gt;&#xA;&lt;p&gt;A further step would be to lookup &lt;code&gt;SETUPPP.inf&lt;/code&gt; which should have an entry &lt;code&gt;ProductType=n&lt;/code&gt;. Its value defined the ID to be checked. Here &lt;code&gt;1&lt;/code&gt; notes a volume install media (no install key to be entered), &lt;code&gt;2&lt;/code&gt; (*2), &lt;code&gt;5&lt;/code&gt; and &lt;code&gt;6&lt;/code&gt; make install ask for a 10 digit number, while &lt;code&gt;9&lt;/code&gt; marks an OEM version using a 20 digit key. Everything else is invalid.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Considering the above information, is it possible that your data starts with something like 12095 or 15096 (Both numbers I had noted, but there may be others)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - That is adding up all seven digits and dividing them by 7 must result in Zero.&lt;/p&gt;&#xA;&lt;p&gt;*2 - I have &lt;em&gt;'update'&lt;/em&gt; scribbled across the &lt;code&gt;2&lt;/code&gt;, so &lt;code&gt;2&lt;/code&gt; may be marking disks reserved for update installation, where a previous windows is checked.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-11-13T17:26:55.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8252" PostTypeId="2" ParentId="8231" CreationDate="2018-11-13T00:30:28.963" Score="8" Body="&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; you can create a tiny text file, and use a tiny comes-with-DOS utility to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a lovely utility called &lt;code&gt;DEBUG.COM&lt;/code&gt; which I believe is included in &lt;em&gt;every&lt;/em&gt; version of DOS, that lets you turn assembly language instructions into machine code, shove them into memory, and execute them. It's very lightweight—early versions of &lt;code&gt;DEBUG&lt;/code&gt; were about 7kb ;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BIOS provides a &quot;system call&quot; to get current system time; details are &lt;a href=&quot;http://stanislavs.org/helppc/int_1a-0.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; or &lt;a href=&quot;http://www.ctyme.com/intr/rb-2271.htm&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. So you can construct a loop that checks this over and over until a certain number of seconds have passed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is how you do it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A&#xA;xor ax, ax  ; zero out ax&#xA;int 1a      ; timer -&amp;gt; DX&#xA;mov bx, dx  ; initial timer value -&amp;gt; BX&#xA;hlt         ; don't waste CPU cycles&#xA;xor ax, ax  ; zero out ax&#xA;int 1a      ; timer -&amp;gt; DX&#xA;sub dx, bx  ; elapsed time -&amp;gt; DX&#xA;cmp dx, 222 ; THIS IS IN HEX! 0x222 = 546 == 30 seconds * 18.2 ticks per second&#xA;jl 0106     ; if not enough elapsed time repeat loop&#xA;ret ; return control to DEBUG.COM&#xA;&#xA;U 0100 0120&#xA;G =0100&#xA;q&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Save this to a file (e.g. &lt;code&gt;DELAY.TXT&lt;/code&gt;) and put the following into your &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DEBUG &amp;lt;DELAY.TXT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This will assemble and run the code every time you boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The U command is just for debugging purposes - it disassembles what previously went into RAM. You can remove it. The A command actually does the assembly, and the G command means &quot;go&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adjust the 222 to however much time you need. It is in hex, and needs to be the number of seconds * 18.2 because that is the clock frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This method allows you to add any functionality you want—break on keyboard input, keep trying to open a network file in a loop, display a countdown timer... there's an interrupt (BIOS or DOS function) for reading from the keyboard, another for reading a file, another for printing a string.&lt;/p&gt;&#xA;" OwnerUserId="647" LastEditorUserId="647" LastEditDate="2018-11-13T11:37:58.320" LastActivityDate="2018-11-13T11:37:58.320" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8253" PostTypeId="1" AcceptedAnswerId="8261" CreationDate="2018-11-13T00:59:01.887" Score="3" ViewCount="441" Body="&lt;p&gt;TL:DR&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the reason my kernel_read() function ignoring file errors? &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I'm trying to understand how to work with files in cc65 using CBM specific functions. My target is Commodore 64 with 1541 drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below code works as I expected except the last part where I'm trying to get error message by attempting to read non existing file. Instead of giving error message, program continues as if there was no problem. Where am I wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the output for the last part is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Reading with cbm.h again&#xA;Opening data file...&#xA;Reading...&#xA;Done.&#xA;&#xA;data 3 : 2&#xA;&#xA;              data 4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and some additional garbage characters in screen, I assume due to some memory trashing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;cc65 code is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;conio.h&amp;gt;&#xA;#include &amp;lt;stdio.h&amp;gt;&#xA;&#xA;char data1[12] = &quot;Test Data 1&quot;;&#xA;char data2[12] = &quot;Test Data 2&quot;;&#xA;char data3[12] = &quot;\0&quot;;&#xA;char data4[12] = &quot;\0&quot;;&#xA;&#xA;void std_write(unsigned char * file_name);&#xA;void std_read(unsigned char * file_name);&#xA;void kernel_read(unsigned char * file_name);&#xA;void kernel_getin(void *ptr, unsigned char size);&#xA;&#xA;void main(void)&#xA;    {&#xA;        clrscr();&#xA;&#xA;        // File read &amp;amp; write with stdio functions&#xA;        cputs(&quot;Writing with stido.h\n\r&quot;);&#xA;        std_write(&quot;testfile&quot;);&#xA;&#xA;        cputs(&quot;\n\rReading with stido.h\n\r&quot;);&#xA;        std_read(&quot;testfile&quot;);&#xA;&#xA;        cprintf(&quot;\n\rdata3 : %s\n\r&quot;,data3);&#xA;        cprintf(&quot;data4 : %s\n\r&quot;,data4);&#xA;        cprintf(&quot;\n\r&quot;);&#xA;&#xA;        cgetc();&#xA;        clrscr();&#xA;&#xA;        // Trying to read with cbm specific functions&#xA;        data3[0]='\0';&#xA;        data4[0]='\0';&#xA;&#xA;        cputs(&quot;\n\rReading with cbm.h\n\r&quot;);&#xA;        kernel_read(&quot;testfile&quot;);&#xA;&#xA;        cprintf(&quot;\n\rdata3 : %s\n\r&quot;,data3);&#xA;        cprintf(&quot;data4 : %s\n\r&quot;,data4);&#xA;        cprintf(&quot;\n\r&quot;);&#xA;&#xA;        // Trying to read non exiting file&#xA;        data3[0]='\0';&#xA;        data4[0]='\0';&#xA;&#xA;        cputs(&quot;\n\rReading with cbm.h again\n\r&quot;);&#xA;        kernel_read(&quot;testfile2&quot;);&#xA;&#xA;        cprintf(&quot;\n\rdata3 : %s\n\r&quot;,data3);&#xA;        cprintf(&quot;data4 : %s\n\r&quot;,data4);&#xA;        cprintf(&quot;\n\r&quot;);&#xA;&#xA;    }&#xA;&#xA;&#xA;void std_write(unsigned char * file_name)&#xA;    {&#xA;        FILE *file;&#xA;        unsigned char n;&#xA;&#xA;        cputs(&quot;Opening data file...\n\r&quot;);&#xA;        _filetype = 's';&#xA;        if(file = fopen(file_name, &quot;w&quot;))&#xA;            {&#xA;                cputs(&quot;Writing...\n\r&quot;);&#xA;                n = fwrite(data1, sizeof(unsigned char)*11, 1, file);&#xA;                n = n + fwrite(data2, sizeof(unsigned char)*11, 1, file);&#xA;&#xA;                if(n != 2)&#xA;                {&#xA;                    cputs(&quot;Error: File could not be written.\n\r&quot;);&#xA;                    fclose(file);&#xA;                }&#xA;                else&#xA;                {&#xA;                    cputs(&quot;Done.\n\r&quot;);&#xA;                    fclose(file);       &#xA;                }&#xA;            }&#xA;        else&#xA;            {&#xA;                cputs(&quot;File could not be opened\n\r&quot;);&#xA;            }&#xA;    }&#xA;&#xA;void std_read(unsigned char * file_name)&#xA;    {&#xA;        FILE *file;&#xA;        unsigned char n;&#xA;&#xA;        cputs(&quot;Opening data file...\n\r&quot;);&#xA;        _filetype = 's';&#xA;        if(file = fopen(file_name, &quot;r&quot;))&#xA;        {&#xA;            cputs(&quot;Reading...\n\r&quot;);&#xA;            n = fread(data3, sizeof(unsigned char)*11, 1, file);&#xA;            n = n + fread(data4, sizeof(unsigned char)*11, 1, file);&#xA;&#xA;            if(n != 2)&#xA;            {&#xA;                cputs(&quot;Error while reading!\n\r&quot;);&#xA;                fclose(file);&#xA;            }&#xA;            else&#xA;            {&#xA;                cprintf(&quot;Done.\n\r&quot;);&#xA;                fclose(file);&#xA;            }&#xA;        }&#xA;        else&#xA;        {&#xA;            cputs(&quot;File could not be opened\n\r&quot;);&#xA;        }&#xA;    }&#xA;&#xA;void kernel_read(unsigned char * file_name)&#xA;    {&#xA;        unsigned char error_channel;&#xA;&#xA;        // Open error channel&#xA;        cbm_k_setlfs(15,8,15);          &#xA;        cbm_k_setnam('\0');&#xA;        error_channel = cbm_k_open();&#xA;&#xA;        cbm_k_setlfs(2,8,0);            &#xA;        cbm_k_setnam(file_name);             &#xA;&#xA;        cputs(&quot;Opening data file...\n\r&quot;);&#xA;        if(!cbm_k_open()) &#xA;        {&#xA;            _filetype = 's';&#xA;            cputs(&quot;Reading...\n\r&quot;);&#xA;            cbm_k_chkin(2);&#xA;            kernel_getin(data3, sizeof(unsigned char)*11);&#xA;            kernel_getin(data4, sizeof(unsigned char)*11);&#xA;&#xA;            cbm_k_chkin(15);&#xA;            if(!cbm_k_getin())&#xA;            {&#xA;                cputs(&quot;Error while reading!\n\r&quot;);&#xA;                cbm_k_clall();&#xA;            }&#xA;            else&#xA;            {&#xA;                cprintf(&quot;Done.\n\r&quot;);   &#xA;                cbm_k_clall();&#xA;&#xA;            }&#xA;        }&#xA;        else&#xA;        {&#xA;            cputs(&quot;File could not be opened\n\r&quot;);&#xA;        }   &#xA;    }&#xA;&#xA;void kernel_getin(void *ptr, unsigned char size)&#xA;    {&#xA;        unsigned char * data = (unsigned char *)ptr;&#xA;        unsigned char i;&#xA;&#xA;        for(i=0; i&amp;lt;size; ++i)&#xA;        {&#xA;            data[i] = cbm_k_getin();&#xA;        }&#xA;        data[i] = '\0';&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; I've changed the kernel_read and kernel_getin functions following the tofro's and Stavr00's suggestions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now kernel_read function produce &quot;File could not be opened.&quot; error as intended. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void kernel_read(unsigned char * file_name)&#xA;    {&#xA;        cbm_k_setlfs(2,8,0);            &#xA;        cbm_k_setnam(file_name);&#xA;&#xA;        cputs(&quot;Opening data file...\n\r&quot;);&#xA;        cbm_k_open();&#xA;        if(!cbm_k_readst()) &#xA;        {&#xA;            _filetype = 's';&#xA;            cputs(&quot;Reading...\n\r&quot;);&#xA;            cbm_k_chkin(2);&#xA;            kernel_getin(data3, sizeof(unsigned char)*11);&#xA;            kernel_getin(data4, sizeof(unsigned char)*11);&#xA;&#xA;            if(!cbm_k_readst())&#xA;            {&#xA;                cputs(&quot;Error while reading!\n\r&quot;);&#xA;                cbm_k_clall();&#xA;            }&#xA;            else&#xA;            {&#xA;                cprintf(&quot;Done.\n\r&quot;);   &#xA;                cbm_k_clall();&#xA;            }&#xA;        }&#xA;        else&#xA;        {&#xA;            cputs(&quot;File could not be opened\n\r&quot;);&#xA;        }   &#xA;    }&#xA;&#xA;unsigned char kernel_getin(void *ptr, unsigned char size)&#xA;    {&#xA;        unsigned char * data = (unsigned char *)ptr;&#xA;        unsigned char i;&#xA;        unsigned char st=0;&#xA;&#xA;        for(i=0; i&amp;lt;size; ++i)&#xA;        {&#xA;            st = cbm_k_readst();&#xA;            if (st) break;&#xA;            data[i] = cbm_k_getin();&#xA;        }&#xA;        data[i] = '\0';&#xA;        size = i;&#xA;        return st;&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Notice I changed previous &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if(!cbm_k_open())&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;with &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cbm_k_open();&#xA;if(!cbm_k_readst())&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and also removed, now unnecessary, open error channel part completely.&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="7208" LastEditDate="2019-11-12T01:32:32.100" LastActivityDate="2019-11-12T01:32:32.100" Title="How to read disk files using CBM specific functions in cc65 with proper error checking" Tags="&lt;commodore-64&gt;&lt;programming&gt;&lt;c&gt;&lt;cc65&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8254" PostTypeId="2" ParentId="8218" CreationDate="2018-11-13T02:52:50.470" Score="1" Body="&lt;p&gt;Two channel cassettes were quite common in the minicomputer and data acquisition fields. These “&lt;a href=&quot;http://obsoletemedia.org/streamer-cassette/&quot; rel=&quot;nofollow noreferrer&quot;&gt;streamer cassettes&lt;/a&gt;” were single-sided, with data being recorded in mono on one full track and the other track (side 2 if the tape were flipped) contained an index timing track. The drives were servo-controlled, and could seek fairly quickly to read and write random blocks. One manufacturer was MFE Computer Access Systems of Salem, NH, USA. Here's a brochure on one of their transports: &lt;a href=&quot;http://www.retrotechnology.com/mcm800/mfe260_transport.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MFE Model 260&lt;/a&gt;. They were used in the Canadian &lt;a href=&quot;http://www.retrotechnology.com/mcm800/mcm800_tape.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MCM/800&lt;/a&gt; systems. A similar control scheme was used in early desktops including the HP 9800.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: not stereo, but definitely two tracks.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2018-11-13T02:52:50.470" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8255" PostTypeId="2" ParentId="8231" CreationDate="2018-11-13T09:54:59.143" Score="0" Body="&lt;p&gt;I used to (ab)use PING.exe to solve this, I'm not aware of any Windows without this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ping 127.0.0.1 -w 1000 -n 3 &gt; null&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oops just read the question and notice -n is ignored. Obviously you could put it into a FOR loop and deal with multiples of 4.&lt;/p&gt;&#xA;" OwnerUserId="11150" LastActivityDate="2018-11-13T09:54:59.143" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8256" PostTypeId="2" ParentId="7740" CreationDate="2018-11-13T11:03:33.903" Score="2" Body="&lt;p&gt;Mostly legacy reasons. Early affordable computers didn't have enough RAM to make multitasking worthwhile, so they used monotasking operating systems like DOS and MacOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1985 the Amiga was launched with a preemptive multitasking operating system, but it was a brand new system starting from scratch. Lack of business software meant it struggled to gain a footing in offices, it was mostly sold for games and creative uses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PCs and Macs had a lot of existing software written for their non-multitasking operating systems, and adding preemptive multitasking without breaking those apps was going to be very difficult. Before multitasking many apps accessed hardware directly and didn't even consider things like shared filesystem access, and of course were not event driven.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsoft took the path of running older apps in a partially virtualized DOS environment. MacOS introduced cooperative multitasking as an option and spend many years laying the groundwork for preemptive multitasking, so that when the time came the switch over was easier. MacOS also had less commercial software to support, particularly vertical apps, and was able to get most of the big ones updated.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-11-13T11:03:33.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8257" PostTypeId="2" ParentId="8231" CreationDate="2018-11-13T15:21:22.000" Score="2" Body="&lt;p&gt;What I actually would try is to check if the device you're connecting to is available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can try something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;:reset&#xA;ping 127.0.0.1&#xA;&#xA;IF NOT ERRORLEVEL 1 net logon samba mypassword /yes&#xA;&#xA;IF ERRORLEVEL 1 goto :reset&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This way, it will ping the machine until it is available and will try to mount the share.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it fails, it will keep trying until it mounts successfully.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This way, the &lt;code&gt;autoexec.bat&lt;/code&gt; won't do anything else until the required server is up and guarantees that the share is mounted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that, if, for example, the Pi takes 2-3 more seconds to boot (due to, say, updates or whatever), the share will still mount.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't need to guestimate how long it will take to boot and have the service started in the Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing you can also do, with this method, is to count how many times the &lt;code&gt;net logon&lt;/code&gt; command failed and ask for a decision or abort with a message to run the command later.&lt;/p&gt;&#xA;" OwnerUserId="4858" LastEditorUserId="4858" LastEditDate="2018-11-13T16:15:25.080" LastActivityDate="2018-11-13T16:15:25.080" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8258" PostTypeId="1" AcceptedAnswerId="8259" CreationDate="2018-11-13T15:45:20.603" Score="21" ViewCount="2880" Body="&lt;p&gt;All I can remember of the game is that:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It was a platformer game&lt;/li&gt;&#xA;&lt;li&gt;The game might have been made in the 90's&lt;/li&gt;&#xA;&lt;li&gt;I &lt;em&gt;think&lt;/em&gt; it was a DOS game&lt;/li&gt;&#xA;&lt;li&gt;It was a very colored game&lt;/li&gt;&#xA;&lt;li&gt;The main character was human (I think it was a female character)&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;I think I had to collect letters or some item to transform into animals and progress in the game -&gt; A fish to explore the water, a bird to fly, etc.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I barely remember the word &lt;strong&gt;JILJ&lt;/strong&gt; but I'm not able to find anything about this in a web search engine.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11154" LastActivityDate="2018-11-14T20:25:15.733" Title="Looking for a platformer game" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8259" PostTypeId="2" ParentId="8258" CreationDate="2018-11-13T15:50:50.550" Score="29" Body="&lt;p&gt;This sounds like &lt;a href=&quot;https://www.mobygames.com/game/dos/jill-of-the-jungle&quot; rel=&quot;noreferrer&quot;&gt;Jill of the Jungle&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It is a platform game where the player takes the role of the titular character: an amazon woman who takes the untypical role of monster-slaying, leather-wearing feminist warrior. Jill's most distinguishing ability is morphing into various creatures, such as a bird, a fish, and others, which allow her to explore specific areas.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is a DOS game, released in 1992 (as shareware). It is indeed very colourful, and its main character is a woman. You need to find “icons” to turn into various animals, and to turn back into Jill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It’s available &lt;a href=&quot;https://www.gog.com/game/jill_of_the_jungle_the_complete_trilogy&quot; rel=&quot;noreferrer&quot;&gt;for free on GOG&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-11-13T15:53:36.613" LastActivityDate="2018-11-13T15:53:36.613" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8260" PostTypeId="2" ParentId="351" CreationDate="2018-11-13T18:05:00.173" Score="6" Body="&lt;p&gt;It depends what you mean by &quot;run off the real carts&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you mean dump the cart and then immediately run the dump, that is perfectly possible, though in some cases dumping the cart requires prior knowledge of the carts internals (IIRC there is a big database of known NES carts and how to dump them). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you mean actually reading the cart in real-time as the game runs, that isn't really practical for software emulators (though it's perfectly possible for a FPGA based reimplementation of the hardware).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is emulators don't run in real-time. Some aspects of the original hardware are slow to emulate and the host OS can take away the CPU from you for far longer than the clock period of the thing you are emulating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution to this is to separate &quot;emulated time&quot; from &quot;real time&quot;. When emulating regular code, emulated time advances significantly faster than real time, this makes up for the inevitable stalls in emulation due to the OS, complex to emulate hardware, IO processing etc. To keep the overall execution speed correct the emulator will pause periodically (most likely once per frame).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But that renders running directly off the cart impractical, when the emulator is racing ahead it will be reading the memory very quickly, almost certainly quicker than the cart and its reader can cope with.&lt;/p&gt;&#xA;" OwnerUserId="499" LastEditorDisplayName="user39" LastEditDate="2019-02-09T19:22:56.873" LastActivityDate="2019-02-09T19:22:56.873" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8261" PostTypeId="2" ParentId="8253" CreationDate="2018-11-13T21:15:43.317" Score="3" Body="&lt;p&gt;Adding this to the code as per @tofro's suggestion:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;unsigned char kernel_getin(void *ptr, unsigned char *size)&#xA;{&#xA;    unsigned char * data = (unsigned char *)ptr;&#xA;    unsigned char i;&#xA;    unsigned char st=0;&#xA;&#xA;    for(i=0; i&amp;lt;*size; i++)&#xA;    {&#xA;        st = cbm_k_readst();&#xA;        if (st) break; &#xA;        data[i] = cbm_k_getin();&#xA;    }&#xA;    data[i] = '\0';&#xA;    *size = i;&#xA;    return st;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Check the return value to detect errors / end-of-file, and the by-ref parameter &lt;code&gt;size&lt;/code&gt; to see how many bytes read.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;unsigned char n  =0;&#xA;unsigned char st =0;&#xA;unsigned char sz =0;&#xA;&#xA;sz = 11;&#xA;st = st | kernel_getin(data3, &amp;amp;sz);&#xA;n = n + sz;&#xA;sz = 11;&#xA;st = st | kernel_getin(data4, &amp;amp;sz);&#xA;n = n + sz;&#xA;&#xA;if(n != 22)&#xA;{&#xA;    cputs(&quot;Error while reading!\n\r&quot;);&#xA;    cbm_k_clall();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2054" LastEditorUserId="2054" LastEditDate="2019-01-08T15:23:37.497" LastActivityDate="2019-01-08T15:23:37.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8262" PostTypeId="2" ParentId="8200" CreationDate="2018-11-13T23:17:02.893" Score="3" Body="&lt;p&gt;Execution of all PDP-10 instructions first involves the computation of an &quot;effective address&quot; E.  This computation is identical for all instructions, regardless of how they will use the result, and regardless of whether it's actually going to be used as an address, or used at all. The instruction format contains 3 relevant fields: Y (an 18-bit value), X (a 4-bit index field), and I, the indirect bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term &quot;modified address&quot; is useful here. If the X field is zero, then the modified address is just the value in the Y field.  If the X field is non-zero, then it names an accumulator (1 to 15) whose low-half content is added to Y to give the modified address (truncated to 18 bits). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the I bit is zero, then the effective address E is equal to the modified address. If the I bit is one, then the word of memory (an &quot;indirect word&quot;) addressed by the modified address is fetched. This indirect word has Y, X, and I fields that are then subject to the same effective address calculation. The iteration continues until a word with I bit zero is fetched, at which point we exit the computation with an effective address E computed from the Y and X values in this, the last-fetched indirect word.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instructions that actually reference memory (e.g., MOVE from memory, MOVEM to memory) then E is the address of the operand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instructions that don't reference memory (e.g., MOVEI immediate), E may be the actual operand, a mask, a shift count, etc., depending on the instruction. In these cases &quot;effective address&quot; is a misnomer, though note that what the PDP-10 calls &quot;move immediate&quot; is called &quot;load address&quot; on other architectures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a trivial example I coded up and ran on a simh-emulated PDP-10 to demonstrate indirection. It's an intentionally preposterous example (not realistic).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;a: z @b&lt;br&gt;&#xA;  b: z @c&lt;br&gt;&#xA;  c: z @d&lt;br&gt;&#xA;  d: 43  ; '#'  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;start: movei 1,@a&lt;br&gt;&#xA;   outchr  1&lt;br&gt;&#xA;   exit&lt;br&gt;&#xA;   end start  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note: 'z' is a pseudo-instruction that has opcode zero. It's useful for constructing address words such as this. '@' signifies setting the indirect bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first instruction executed is &quot;move immediate, indirect through location a, into accumulator 1&quot;. The I-bit is set in the instruction so we fetch the indirect word from 'a'.  But that has a set I-bit so we fetch the indirect word from 'b'. But that has the I-bit set so we fetch the indirect word from 'c'. But that has the I-bit set so we fetch the indirect word from 'd'.  That does not have the I-bit set so we're done, and the effective address E will be 43 octal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the instruction is move-immediate, so E is not really a memory address, it's the actual value.  So accumulator 1, the target of the movei, is set to 43 octal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From there we use a monitor call to output the content of acc 1 interpreted as an ASCII character: 43 octal is hash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the execution:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;.exec foo&lt;br&gt;&#xA;  LINK:   Loading&lt;br&gt;&#xA;  [LNKXCT FOO execution]&lt;br&gt;&#xA;  #&lt;br&gt;&#xA;  EXIT&lt;br&gt;&#xA;  .&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If I had coded the move instruction as 'move 1,@a' (normal move, not move immediate) then the effective address 43 octal would have been used as the address of the operand; we'd have output the low 7 bits of location 43 (whatever might be there) as a character.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In real life I'd probably have written the simple form 'move 1,d' and not have used any indirection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is clearly possible to set up infinite loops in effective address calculation. The simplest is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Z @.  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&quot;Dot&quot; is the current location, so the infinitude should be obvious. As far as I recall, Z is not a valid opcode, but that does not matter; the CPU does not get as far as figuring that out.  This burns CPU and memory cycles and executes no instructions. However, the sequence is interruptible. When I tried this long ago, the monitor (TOPS-10 6.03) would abort the program after some number of seconds of CPU had been squandered.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2018-11-14T00:13:03.870" LastActivityDate="2018-11-14T00:13:03.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8263" PostTypeId="2" ParentId="4551" CreationDate="2018-11-14T02:30:49.170" Score="6" Body="&lt;p&gt;You could start with the &lt;a href=&quot;http://microtechm1.blogspot.com/p/understanding-iris.html&quot; rel=&quot;noreferrer&quot;&gt;Understanding IRIS&lt;/a&gt; section of the Microtech blog.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's quite a few articles on there about this OS, including a &lt;a href=&quot;http://microtechm1.blogspot.com/2016/05/help-from-one-of-original-iris.html&quot; rel=&quot;noreferrer&quot;&gt;2016 interview&lt;/a&gt; with one of the original designers, Dan Paymar. He may well still be contactable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact he even &lt;em&gt;mentions&lt;/em&gt; the guy who worked with him on the BASIC interpreter, a name that sounds like Bira Waxter, Zira Faxter, or something like that :-)&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastActivityDate="2018-11-14T02:30:49.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8264" PostTypeId="1" AcceptedAnswerId="8266" CreationDate="2018-11-14T10:10:32.450" Score="3" ViewCount="307" Body="&lt;p&gt;I faintly remember playing a 16 bit game as a kid, which is some sort of hardcore run and gun game. I don't remember if it was on a Sega Genesis or a Super Nintendo.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You take control of some bird / human hybrid, who can switch between four weapons, which the protagonist shoots from his hands.&lt;/li&gt;&#xA;&lt;li&gt;There is some weird counter move where you can make health appear, but I don't remember how it works.&lt;/li&gt;&#xA;&lt;li&gt;You can float in place.&lt;/li&gt;&#xA;&lt;li&gt;You have a short range teleport move that can go only horizontally. Sometimes you turn into a fireball, but I'm not sure when that occurs.&lt;/li&gt;&#xA;&lt;li&gt;There were less regular enemy encounters and more bosses. In fact, the game was full with bosses, with not that many actual levels.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11162" LastActivityDate="2018-11-14T19:06:08.853" Title="Run and Gun game with bird creature as the protagonist" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8266" PostTypeId="2" ParentId="8264" CreationDate="2018-11-14T19:06:08.853" Score="3" Body="&lt;p&gt;I took a look at &lt;a href=&quot;https://8bitbudgies.com/2018/03/12/top-10-retro-video-games-featuring-birds/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article&lt;/a&gt; and found a few games similar to what you're describing, perhaps it's worth glancing at those in case this answer isn't what you're looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closest match I could find is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;The NewZealand Story&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is a &lt;strong&gt;sidescrolling run-and-gun&lt;/strong&gt; released in 1988. It has a &lt;strong&gt;bird-human hybrid protagonist&lt;/strong&gt;, a flightless humanoid kiwi named Tiki, and features &lt;strong&gt;four weapons&lt;/strong&gt; which the protagonist &lt;strong&gt;shoots from his hands&lt;/strong&gt;: arrows, bombs, lasers and fireballs. However, it was not released on the SNES as far as I can tell, and it doesn't seem to have the floating in place or counter move you're describing. &lt;a href=&quot;https://www.youtube.com/watch?v=YViBVvjn5K4&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's some gameplay&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WsnE0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WsnE0.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next best thing I found after a bit more searching is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Alien Soldier&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A &lt;strong&gt;sidescrolling run-and-gun&lt;/strong&gt; that also has a &lt;strong&gt;bird-human hybrid protagonist,&lt;/strong&gt; Epsilon-Eagle. The eagle has a double jump, uses six different weapons, and can &lt;strong&gt;hover in the air.&lt;/strong&gt; He also &lt;strong&gt;shoots fireballs from his hands.&lt;/strong&gt; However, it was only released for the Sega Mega Drive. &lt;a href=&quot;https://www.youtube.com/watch?v=LA03WAjg6ic&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's some gameplay.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PoeNQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PoeNQ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are either of these what you're looking for?&lt;/p&gt;&#xA;" OwnerUserId="11170" LastActivityDate="2018-11-14T19:06:08.853" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8267" PostTypeId="5" CreationDate="2018-11-14T19:25:14.067" Score="0" Body="" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2018-11-14T19:25:14.067" LastActivityDate="2018-11-14T19:25:14.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8268" PostTypeId="4" CreationDate="2018-11-14T19:25:14.067" Score="0" Body="For questions regarding file systems and software interfaces to them." OwnerUserId="278" LastEditorUserId="278" LastEditDate="2018-11-14T19:25:14.067" LastActivityDate="2018-11-14T19:25:14.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8269" PostTypeId="5" CreationDate="2018-11-14T19:41:43.973" Score="0" Body="&lt;p&gt;Describe the glitch as fully as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Include details of the equipment or software on which the glitch occurred, such as the version or release number.&lt;/p&gt;&#xA;" OwnerUserId="11170" LastEditorUserId="11170" LastEditDate="2018-11-14T21:16:05.980" LastActivityDate="2018-11-14T21:16:05.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8270" PostTypeId="4" CreationDate="2018-11-14T19:41:43.973" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2018-11-14T19:41:43.973" LastActivityDate="2018-11-14T19:41:43.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8272" PostTypeId="1" AcceptedAnswerId="8273" CreationDate="2018-11-14T20:52:04.180" Score="11" ViewCount="1223" Body="&lt;p&gt;I've begun to recall a game I played as a child with my brother, and I can't remember what it was called for the life of me. The reason I'm asking for identification is because I remember how much he loved it. Christmas is coming up and I want to see if I can get it for him, along with a few other PC games we loved as kids, and rig up some hardware that can still run the game as a present for him. I would really appreciate if you guys can help me out in time for the holidays!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's everything I can remember about this game:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It was an old &lt;strong&gt;PC game&lt;/strong&gt;, probably for &lt;strong&gt;Windows XP&lt;/strong&gt;, since I think that was the computer we had at the time. For reference on the time frame, we also owned the old Lego Island games, the other half of my potential Christmas present.&lt;/li&gt;&#xA;&lt;li&gt;It involved what I believe were either &lt;strong&gt;Tonka trucks&lt;/strong&gt; or other non-branded &lt;strong&gt;construction vehicles&lt;/strong&gt;. I seem to remember you could drive them around a &lt;strong&gt;3D or 2D&lt;/strong&gt; environment, destroying and building things. You could control dump trucks, cranes and other heavy construction equipment.&lt;/li&gt;&#xA;&lt;li&gt;There was definitely a &lt;strong&gt;space or moon base level&lt;/strong&gt; where you could &lt;strong&gt;drill into walls&lt;/strong&gt; and find secret tunnels using a drill truck of some kind, and I think the goal was to find a certain amount of a mineral which was hidden in the walls. I remember it being one of the more difficult stages, so it probably occurred later in the game.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Does anyone remember the name of this game?&lt;/strong&gt; I've done a bit of research around the Internet but nothing I can find jogs my memory. If this question is too vague, I'll see what else I can remember about it and add more information.&lt;/p&gt;&#xA;" OwnerUserId="11170" LastEditorUserId="11916" LastEditDate="2019-10-22T09:34:50.230" LastActivityDate="2019-10-22T09:34:50.230" Title="What is this old PC truck game?" Tags="&lt;ibm-pc&gt;&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8273" PostTypeId="2" ParentId="8272" CreationDate="2018-11-14T22:09:14.150" Score="11" Body="&lt;p&gt;There's &lt;a href=&quot;https://www.youtube.com/watch?v=mEB7TDKdoz0&quot; rel=&quot;noreferrer&quot;&gt;Tonka Construction 2 (1999)&lt;/a&gt; and similar games in the &lt;a href=&quot;http://tonka.wikia.com/wiki/Category:Video_Games&quot; rel=&quot;noreferrer&quot;&gt;series&lt;/a&gt;, including one called Tonka Space Station, but that one looks like a racing game, not a mineral hunting game.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-11-14T22:09:14.150" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8274" PostTypeId="2" ParentId="7528" CreationDate="2018-11-15T00:11:49.193" Score="6" Body="&lt;p&gt;If by &quot;character set&quot; you mean the visual appearance of the characters (which is the typical meaning of this term in documentation contemporary with 8-bit machines) then no, it is not identical on all Commodore 8-bit machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One difference is that the VIC and PET computers use a different typeface from the 64 and later machines. Compare the text in these images from a PET and VIC-20:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cH1Ye.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cH1Ye.png&quot; alt=&quot;PET (emulated) screenshot&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/EtGIE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EtGIE.png&quot; alt=&quot;VIC-20 (emulated) screenshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to the text on a 64:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JyUnp.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JyUnp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PET and VIC machines use a 1-pixel wide &quot;stroke&quot;, and certain characters use a serif, while the 64 and later machines use a 2-pixel wide stroke when possible, and are sans-serif. Compare the &quot;B&quot; and the &quot;D&quot; in the above screeshots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another difference is that certain machines released in Japan had Katakana in their character sets, including &lt;a href=&quot;https://www.masswerk.at/misc/vic-1001-kana.html&quot; rel=&quot;noreferrer&quot;&gt;the VIC-1001&lt;/a&gt; (the Japanese VIC-20) and &lt;a href=&quot;http://www.zimmers.net/cbmpics/c64js.html&quot; rel=&quot;noreferrer&quot;&gt;the Japanese release of the Commodore 64&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-11-15T00:57:56.973" LastActivityDate="2018-11-15T00:57:56.973" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8275" PostTypeId="1" AcceptedAnswerId="8564" CreationDate="2018-11-15T00:23:29.757" Score="8" ViewCount="1120" Body="&lt;p&gt;I've been trying to track down a 3D game from the late '80s/early '90s.  It was on the Atari ST and featured simple polygonal (space)ships&lt;sup&gt;1&lt;/sup&gt; floating over flattish polygonal ground with the occasional berm that one could fly over.  It was definitely not sprite-based.  IIRC it was mouse controlled and the ships moved only in the plane (rise and fall but no tilting or banking).  It used a third-person viewpoint, fixed relative to the ship (low/ground level and behind IIRC) and the gameplay  was (to at least some extent) open world (i.e. not restricted like e.g. Zaxxon).  The version I saw was a demo (probably off of a cover disk) and I believe it was a shooter (pretty sure it wasn't Elite or anything similar).  I've looked through ST Format and ST Action and some of the online gaming sites but haven't found it.  Does this ring a bell for anyone?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Simple as in under 10 vertices per ship, flat shaded but not texture mapped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rough drawing (from memory) of what it sort of looked like; the actual graphics were much nicer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4tQfa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4tQfa.png&quot; alt=&quot;Mockup screenshot of craft over landscape&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Update 2018-11-16:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It &lt;em&gt;may&lt;/em&gt; have been an early preview of &lt;a href=&quot;https://en.wikipedia.org/wiki/Starglider_2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Starglider 2&lt;/a&gt;.  Its graphics are the closest match for what I recall but there are still many major differences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following don't match what I recall (differences listed):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;The Sentinel&lt;/strong&gt; Landscape is rendered close to what I recall however the demo I played did not have any non-ship objects (trees, towers, etc.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Zarch/Virus&lt;/strong&gt; Landscape is totally different (not full screen, wrong POV, very varied terrain), ships can tilt, heavy use of particles, non-ship objects (trees, buildings, etc.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Frontier Elite II&lt;/strong&gt; Much more advanced graphics than what I recall.  I had a (non-playable) demo of it and its style was quite different.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Update 2018-11-17:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm starting to think this was either a very early preview of a work-in-progress or, as LangLangC &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8275/name-of-atari-st-3d-game#comment24363_8277&quot;&gt;pointed out&lt;/a&gt;, possibly a game that never ended up being sold commercially.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One other obvious possibility is that I am completely misremembering the details.  Memory is, after all, notoriously inaccurate.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-12-19T19:39:45.943" LastActivityDate="2019-10-28T06:38:14.927" Title="Name of Atari ST 3D game?" Tags="&lt;gaming&gt;&lt;identify-this-game&gt;&lt;atari-st&gt;" AnswerCount="5" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8276" PostTypeId="1" AcceptedAnswerId="8343" CreationDate="2018-11-15T00:35:52.910" Score="2" ViewCount="323" Body="&lt;p&gt;I'm seeking the source code for an old Atari ST game &lt;a href=&quot;http://www.atarimania.com/game-atari-st-balls_31189.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;STFBalls&lt;/a&gt;&lt;sup&gt;1&lt;/sup&gt; a.k.a STBalls a.k.a. Balls which was released as shareware back in the early '90s.  According to the author, anyone making a shareware donation would get a copy of the game's STOS Basic source code.  Does anyone know where the source code might be found today, know how to contact the author (Simon Carter), or have a copy of it lying around?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I can find a copy of the source code I'd like to try porting it to something more modern (probably HTML/Javascript).  The levels and graphics would be pretty easy to extract from the binary version; determining the behavior of the various &quot;widgets&quot; in the game would need either the source code, a disassembler, or playing the game all the way through ;^).&lt;sup&gt;2&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;The binary, levels file, and readme are available as a floppy disk image on the linked site; the source code is not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; Reverse engineering by editing the levels file might also work but only if all of the widget behavior is deterministic and not context-dependent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Screenshots:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kgZ6r.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kgZ6r.png&quot; alt=&quot;Title screen&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/WrVK0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WrVK0.png&quot; alt=&quot;Level 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="6659" LastEditDate="2018-11-15T03:00:11.307" LastActivityDate="2018-11-20T00:26:09.220" Title="Seeking source code for Balls (Atari ST/STOS game)" Tags="&lt;gaming&gt;&lt;atari-st&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8277" PostTypeId="2" ParentId="8275" CreationDate="2018-11-15T00:39:06.927" Score="8" Body="&lt;p&gt;I'd say &lt;a href=&quot;https://en.wikipedia.org/wiki/Zarch&quot; rel=&quot;noreferrer&quot;&gt;Zarch&lt;/a&gt; or as it was way more popular &lt;strong&gt;Virus&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game was originally conceived for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Archimedes&quot; rel=&quot;noreferrer&quot;&gt;Acorn Archimedes&lt;/a&gt;, but soon ported to basically all platforms of the late 80s 16-bit era. There was a real hype.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, it was first distributed as a demo called &lt;em&gt;'Lander'&lt;/em&gt; with every new Archimedes computer, Making a really good case for buying one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3dCih.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3dCih.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some &lt;a href=&quot;https://www.mobygames.com/game/atari-st/virus__/screenshots&quot; rel=&quot;noreferrer&quot;&gt;screenshots of the Atari ST&lt;/a&gt; version, looking way less detailed, more 'flat' and rough. Still a great game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/blC2h.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/blC2h.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-11-15T17:12:09.030" LastActivityDate="2018-11-15T17:12:09.030" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8278" PostTypeId="2" ParentId="7528" CreationDate="2018-11-15T11:57:34.993" Score="4" Body="&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; I just reread the question and have realised the questioner already knows how the C64 character set data is organised, but I'm going to leave this answer here anyway for other people who maybe don't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can speak for two machines: The PET and the Commodore 64. Both machines organise the characters on an 8x8 grid of pixels in terms of how they look. In the PET, the programmer has no access to how the character data is organised. It's in a ROM somewhere and the hardware picks the data by reference to an index which it gets from the screen memory. If you &lt;code&gt;POKE 32768,1&lt;/code&gt; you will put an &lt;code&gt;A&lt;/code&gt; in the first location of screen memory. Note that the screen code is not ASCII or PETSCII but a modified version thereof. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mfcJg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mfcJg.png&quot; alt=&quot;Commodore PET screen codes&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You put a number in a location on the screen and the character generator hardware looks up the relevant character internal and puts the right bit pattern on the screen. The character generator has two possible character sets - one with upper case and graphics and one with lower case and upper case - and these are selected by one of the control lines on the PET's VIA chip, which is, in turn controlled by the PCR register on the VIA that is mapped into the PET's memory at location 59468 ($E84C). That's why &lt;code&gt;POKE 59468,12&lt;/code&gt; and &lt;code&gt;POKE 59468,14&lt;/code&gt; select the different character sets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Commodore 64 is different in that the character set ROMs can be mapped into the 6510's address space so you can see them. Each character on screen takes 8 x 8 pixels. In the character ROM, each character takes 8 consecutive bytes, one byte for each row of pixels. The picture below is a hex dump of the first twenty eight characters in the C64 character ROM. The row highlighted in blue, is the character that appears on screen when you poke a screen location with 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gQRpS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gQRpS.png&quot; alt=&quot;Screen shot of the start of character ROM&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we take the bytes:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;18 3C 66 7E 66 66 66 00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Each byte is a row, so stack them one on top of the other&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;18&#xA;3C &#xA;66 &#xA;7E &#xA;66&#xA;66&#xA;66&#xA;00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If a bit is 1, then the pixel in that position is on. So expand the hex numbers above using an &lt;code&gt;X&lt;/code&gt; for 1 and a &lt;code&gt;.&lt;/code&gt; for 0&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;...XX...&#xA;..XXXX..&#xA;.XX..XX.&#xA;.XXXXXX.&#xA;.XX..XX.&#xA;.XX..XX.&#xA;.XX..XX.&#xA;........&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The aspect ratio is wrong, but you can see it is an A. For comparison, the equivalent PET character looks like this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;...XX...&#xA;..X..X..&#xA;.X....X.&#xA;.XXXXXX.&#xA;.X....X.&#xA;.X....X.&#xA;.X....X.&#xA;........&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The vertical strokes are thinner. The reason why the vertical strokes on the C64 are two pixels wide is that the characters are designed to be displayed on an ordinary television and it makes them more readable. &lt;a href=&quot;https://www.commodore.ca/manuals/c64_programmers_reference/c64-programmers_reference_guide-03-programming_graphics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Commodore Programming Guide&lt;/a&gt; says this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For best results, always make any vertical lines in your characters at least 2 dots (bits) wide. This helps prevent CHROMA noise (color distortion) on your characters when they are displayed on a TV screen.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are 256 possible numbers you can poke into a screen location, so there are 8 x 256 bytes = 2K bytes needed to represent a whole character set. The C64 character ROM contains two character sets, one for upper case and graphics, the other for lower and upper case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VIC chip can take its character &quot;ROM&quot; from pretty much any 2Kbyte aligned slot in the C64 address space, so you can copy the character ROM to RAM, modify it as you see fit and then point the Vic at it to get your own custom characters. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2020-02-01T11:46:07.977" LastActivityDate="2020-02-01T11:46:07.977" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8279" PostTypeId="1" CreationDate="2018-11-15T13:22:13.100" Score="17" ViewCount="1038" Body="&lt;p&gt;Most adventure games, to keep the parser simple, might just have some simple rules,  which accepts verb + noun or a cardinal direction, and simple things like that. That's almost a CFG, so in Backus-Naur Form, a simple parser might look like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;s =&amp;gt; D&#xA;s =&amp;gt; VERB&#xA;s =&amp;gt; VERB object&#xA;object =&amp;gt; NOUN&#xA;object =&amp;gt; ADJ NOUN&#xA;ADJ =&amp;gt; {red, big, sharp, wooden}&#xA;NOUN =&amp;gt; {stick, sword, mailbox, goon}&#xA;VERB =&amp;gt; {take, fight, open, ...}&#xA;D =&amp;gt; {north, east, south, west}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Empirically, this is the kind of parser that many adventure games had in them, to accept simple sentences like &lt;code&gt;open mailbox&lt;/code&gt; or &lt;code&gt;north&lt;/code&gt; or &lt;code&gt;take wooden sword&lt;/code&gt; or &lt;code&gt;exit&lt;/code&gt;. That works well enough, and doesn't take much more memory than the list of words. It's essentially the same grammar as a very primitive computer language like an assembler, just with English words.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now when the Hobbit came out, for the ZX Spectrum (it needed the 48K version), it had a much more advanced parser, allowing it to accept sentences in an impressive subset of English which they called Inglish, like &lt;code&gt;&quot;ask Gandalf about the curious map then take sword and kill troll with it&lt;/code&gt;. That's some tricky pronoun resolution right there (did you mean to kill the troll with the sword, or the map&lt;sub&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Instrumental_case&quot; rel=&quot;noreferrer&quot;&gt;instrumental&lt;/a&gt;&lt;/sub&gt;? Or even with Gandalf or the troll&lt;sub&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Comitative_case&quot; rel=&quot;noreferrer&quot;&gt;comitative&lt;/a&gt;&lt;/sub&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if you don't give the object, the dialogue might go something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt; OPEN&#xA;Open what?&#xA;&amp;gt; ALL&#xA;You open the green door. You open the chest and a bat flies out. Gandalf closes the chest.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;... which means that context is stored in between each entry (in order that the game knows what to do to &lt;code&gt;all&lt;/code&gt;), and it also means that there is a one-to-many mapping between pronoun and object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm impressed that this all fits into 48K, which also houses input-output routines (for some reason the game didn't use the ones in ROM), plenty of graphics, all characters, objects and prose, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did this parser work, to allow it to be so small, and yet understand such intricate syntax?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Instrumental means &quot;using the thing to accomplish the task&quot; &#xA;&lt;sup&gt;2&lt;/sup&gt; Comitative means &quot;accomplishing the task together with someone&quot;. It's an ambiguity in the English word &quot;with&quot;.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-02-13T08:55:09.680" LastActivityDate="2019-05-15T16:02:35.543" Title="Inglish parser on the Hobbit (1982 video game)" Tags="&lt;zx-spectrum&gt;" AnswerCount="1" CommentCount="13" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8280" PostTypeId="2" ParentId="8279" CreationDate="2018-11-15T13:44:33.527" Score="1" Body="&lt;p&gt;&quot;Open all&quot; is simple action and target syntax searchable through keywords given the current context (e.g. room player is in). ALL here means that machine will look though all &quot;openable&quot; object, and will report back (or will take only first one it finds).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;ask Gandalf about the curious map then take sword and kill troll with it&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This one is also easily parseable, as has same structure as action + target (ask Gendalf, take sword, kill troll), having object for specific action (about, with) and object (curios map, &quot;it&quot;=sword), separators and order keywords (&quot;and&quot; and &quot;then&quot;).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How did this parser work, to allow it to be so small, and yet understand such intricate syntax?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Syntax is not intricate. It is subject to logic and easy syntax parsing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How it works... ask developers who designed algorithm for it, or perform disassembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To see how complex parser is, try different syntax, for example the following:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;ask Gandalf curious map and take sword and kill troll&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;curious map Gandalf ask and sword take and troll kill&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and see the results. Most probably parser knows words &quot;and&quot; and &quot;then&quot;, and all others are just a combinations of allowed keywords corresposind to allowed actions in the specific context, thus their order may not matter and &quot;the&quot;, &quot;with&quot; and &quot;about&quot; are discarded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feeding various data in and looking at result is the only way for finding out how black box actually works.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2018-11-15T13:44:33.527" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8281" PostTypeId="1" CreationDate="2018-11-15T17:32:25.597" Score="3" ViewCount="890" Body="&lt;p&gt;The title says it all. I'm puzzled if there is a technical (Hardware/Software) reason behind the weird mixture of metric (&lt;em&gt;Celsius&lt;/em&gt; for temperature) and non metric (like &lt;em&gt;psi&lt;/em&gt; for pressure) in the Aston Martin Lagonda Series II (and later) dashboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is especially noteworthy as distance and speed measurement can be adjusted between metric and imperial, while others can't. Also, with the Series III vector screens labelling wasn't an issue anymore, but despite the throughout redesign, the limitations where kept.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YIabB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YIabB.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;(Series III dashboard. Note not only the screens but also the sensor button field)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Since assumptions did come up, about it 'just' being some display, The whole car electronics are computer controlled. It's not like some (later) manufacturers adding superfluous systems complementing the workings, here everything runs thru the system (much like today). Every switch and every light. The only non-computer device was an additional mechanical odometer beside the engine for legal reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system itself being a discrete &lt;a href=&quot;https://archive.org/details/bitsavers_nationaldaet_782440&quot; rel=&quot;nofollow noreferrer&quot;&gt;National Semiconductor PACE&lt;/a&gt;, an early 16 bit system&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="3748" LastEditDate="2020-03-20T21:11:23.663" LastActivityDate="2020-03-20T21:11:23.663" Title="What's the reason for the the Lagonda Series II dashboard to use a mixture of metric and imperial?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2018-11-16T09:03:20.937" ContentLicense="CC BY-SA 4.0" />
  <row Id="8282" PostTypeId="1" CreationDate="2018-11-15T19:40:26.423" Score="5" ViewCount="273" Body="&lt;p&gt;I am looking into buying myself an original iMac, as I want to mess with the older system a little bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it even remotely possible to change the RAM in the system to being over 256 MB? I am willing to do it even if it means changing out other parts to allow it to be possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I asked this question at the Ask Different Stack Exchange, but I was referred to here for better help).&lt;/p&gt;&#xA;" OwnerUserId="11176" LastEditorDisplayName="user6464" LastEditDate="2018-11-19T06:58:39.640" LastActivityDate="2018-11-23T03:33:52.097" Title="Is it possible to upgrade original iMac (1998) memory (RAM) to above 256 MB?" Tags="&lt;hardware&gt;&lt;memory&gt;&lt;apple&gt;&lt;imac-g3&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8283" PostTypeId="2" ParentId="8282" CreationDate="2018-11-15T19:53:27.550" Score="5" Body="&lt;p&gt;It would appear so. &lt;a href=&quot;http://lowendmac.com/1998/original-imac-rev-a/&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; indicates that it may be possible to go up to 768MB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might have some work ahead trying to find those obsolete RAM modules, though...&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2018-11-15T19:53:27.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8284" PostTypeId="2" ParentId="7252" CreationDate="2018-11-15T20:00:26.997" Score="5" Body="&lt;p&gt;This is only a partial answer, and I hesitate to post it because it's going to primarily be a link, but...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some real, programmer-visible differences between the PDP-6 and the KA10, though for the most part the KA10 can run code intended for the PDP-6.  Here is a pretty comprehensive list of differences - there are just too many to copy into a Stack Exchange post...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://pdp10.nocrew.org/docs/pdp6-ka10.diffs.txt&quot; rel=&quot;noreferrer&quot;&gt;http://pdp10.nocrew.org/docs/pdp6-ka10.diffs.txt&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the primary differences are the differences in floating point handling between the PDP-6 and KA10, lack of user in-out mode in the PDP-6, the presence of the PC Change flag in the PDP-6 which doesn't exist in the KA10, he lack of the high memory segment in the PDP-6, and fact that all UUOs on the PDP-6 are MUUOs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some differences between the KA, KI, KL, and KS, which I think are adequately described in the &lt;a href=&quot;http://www.bitsavers.org/pdf/dec/pdp10/1982_ProcRefMan.pdf&quot; rel=&quot;noreferrer&quot;&gt;1982 Processor Reference Manual&lt;/a&gt;, and most of them are not really programmer-visible anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, one thing on the KS10 that could definitely be programmer visible, is that I/O on the KS10 is &lt;em&gt;completely&lt;/em&gt; different than on the PDP-6, the KA, the KI, or the KL (all of which share a common I/O architecture).  The traditional I/O instructions like CONO, CONI, DATAO, DATAI, etc., do not exist on the KS10, and the instructions that are used for I/O on the KS10 don't exist on any of the other members of the DEC 36-bit family.  If memory serves correctly, I believe I/O on the XKL TD-1 is all different, too.&lt;/p&gt;&#xA;" OwnerUserId="10764" LastActivityDate="2018-11-15T20:00:26.997" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8285" PostTypeId="2" ParentId="8281" CreationDate="2018-11-15T21:59:59.087" Score="14" Body="&lt;p&gt;This does not seem to about computer systems (retro or otherwise) but cultural assimilation of different standardised measurement systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me, as a UK based user of &lt;a href=&quot;https://www.popularmechanics.com/cars/a8075/what-good-is-a-halo-car-anyway-12206624/&quot; rel=&quot;noreferrer&quot;&gt;halo cars&lt;/a&gt; it seems clear. In the UK we just use a mish-mash of units. I buy petrol in litres and measure distance in Miles. In fact it annoys me that my trip computer does not give me Miles/Litre and insists on Miles/Gallon or Km/Litre. Temperature is in Celsius and so on ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All pressure gauges show PSI at the garage not Pascals. I weight in Kg but measure in inches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aston-Martin Lagonda is a UK based British marque. This would be normal for them then and now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nothing strange in my mind. Nothing retro, nothing computing.&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2018-11-15T21:59:59.087" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8286" PostTypeId="2" ParentId="7838" CreationDate="2018-11-16T00:03:54.907" Score="5" Body="&lt;p&gt;132 column printers were a defacto standard decades before it became common to print on sheet-fed A-size (8.5x11 inch) paper, let alone in sheet-fed in landscape orientation, so an explanation based on 12 CPI and 11-inch long paper in landscape orientation certain is not the &lt;em&gt;origin&lt;/em&gt; of the 132-colum standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, most models of the IBM type 1403 printer, one of the most common high-speed printers in the 1960s and 1970s, had a tractor feed mechanism intended for a paper width 14 7/8 inches, and printed at 10 characters per inch horizontally, spanning 13.2 inches of the paper width, leaving a little less than 7/8 inch margin on both sides, which included the tractor feed holes. There were individual print hammers for each character position, so the character pitch could not be changed, though the number of lines per inch vertically could.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible that the IBM 1403 printer was the main device that popularized 132-column printing on 14 7/8 inch wide paper. Certainly IBM's competitors did their best to copy it. IBM's earlier accounting machines might have used the same paper size, but they didn't print 132 columns. Some of them had a much smaller number of fixed-position columns. The 407 accounting machine, contemporary with the 1403 printer, used 120 columns.&lt;/p&gt;&#xA;" OwnerUserId="11178" LastActivityDate="2018-11-16T00:03:54.907" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8287" PostTypeId="2" ParentId="8135" CreationDate="2018-11-16T01:39:45.713" Score="11" Body="&lt;p&gt;This has to do with the way &lt;code&gt;bcc&lt;/code&gt; handles file extensions. First, a note: code in this answer may be &lt;em&gt;slightly&lt;/em&gt; modified from the original (for simplicity, readability and to aid understanding), but the basic idea is preserved. Having said that, let's begin the analysis.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In &lt;code&gt;bcc.c&lt;/code&gt;, the file names on the command line (i.e., all those arguments not starting with &lt;code&gt;-&lt;/code&gt;) are parsed in &lt;code&gt;getargs&lt;/code&gt;, called from &lt;code&gt;main&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for(ar=1; ar&amp;lt;argc; )&#xA;    if (argv[ar][0] != '-') {&#xA;        append_file(argv[ar++], 0);&#xA;        file_count++;&#xA;    } else ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can see that &lt;code&gt;append_file&lt;/code&gt; is being called with &lt;code&gt;0&lt;/code&gt; as the second argument for each of the files. Following the code down to there (still in &lt;code&gt;bcc.c&lt;/code&gt;), we see what happens when this is the case:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void append_file (char *filename, int ftype) {&#xA;   struct file_list *newfile = xalloc(sizeof(struct file_list));&#xA;   char *s, *name;&#xA;&#xA;   newfile-&amp;gt;file = copystr(filename); name = copystr(filename);&#xA;&#xA;   char *s = strrchr(name, '.');&#xA;   if (ftype) {&#xA;      newfile-&amp;gt;name = copystr(name); newfile-&amp;gt;filetype = ftype;&#xA;   } else if (s &amp;amp;&amp;amp; s == name + strlen(name) - 2) {&#xA;      newfile-&amp;gt;filetype = s[1]; *s = 0; newfile-&amp;gt;name = copystr(name);&#xA;   } else ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Since &lt;code&gt;ftype&lt;/code&gt; is zero, it skips the first &lt;code&gt;if&lt;/code&gt; block and enters the &lt;code&gt;else if&lt;/code&gt; block (it finds the &lt;code&gt;.&amp;lt;extension&amp;gt;&lt;/code&gt; exactly two characters before the string terminator, meaning &lt;code&gt;&amp;lt;extension&amp;gt;&lt;/code&gt; is a single character).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it simply stores the character &lt;em&gt;as-is,&lt;/em&gt; in all its case-sensitive glory:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  newfile-&amp;gt;filetype = s[1];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you then look back in the &lt;code&gt;main&lt;/code&gt; function, you'll find it acts on the file extension, performing specific actions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for (next_file = &amp;lt;all-files&amp;gt;) {&#xA;    if (next_file-&amp;gt;filetype == 'o') continue;&#xA;&#xA;    /* Assembler that's not to be optimised. */&#xA;    if (do_preproc &amp;amp;&amp;amp; next_file-&amp;gt;filetype == 'x') run_aspreproc(next_file);&#xA;    if (do_preproc &amp;amp;&amp;amp; next_file-&amp;gt;filetype == 'S') run_aspreproc(next_file);&#xA;    if (do_as      &amp;amp;&amp;amp; next_file-&amp;gt;filetype == 's') run_as(next_file);&#xA;&#xA;    /* C source */&#xA;    if (do_preproc &amp;amp;&amp;amp; next_file-&amp;gt;filetype == 'c') run_preproc(next_file);&#xA;    if (do_unproto &amp;amp;&amp;amp; next_file-&amp;gt;filetype == 'i') run_unproto(next_file);&#xA;    if (do_compile &amp;amp;&amp;amp; next_file-&amp;gt;filetype == 'i') run_compile(next_file);&#xA;    if (do_optim   &amp;amp;&amp;amp; next_file-&amp;gt;filetype == 's') run_optim(next_file);&#xA;    if (do_as      &amp;amp;&amp;amp; next_file-&amp;gt;filetype == 's') run_as(next_file);&#xA;}&#xA;&#xA;if (do_link &amp;amp;&amp;amp; !error_count)&#xA;    run_link();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that first line following the &quot;C source&quot; comment, it checks for &lt;em&gt;lower-case&lt;/em&gt; &lt;code&gt;c&lt;/code&gt; only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each &lt;code&gt;run_&amp;lt;phase&amp;gt;&lt;/code&gt; function is responsible for removing the original file from the list and adding a newly generated file. For example, &lt;code&gt;x.c&lt;/code&gt; may be turned into &lt;code&gt;x.i&lt;/code&gt;, the original file removed from the list and the generated file added.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, &lt;code&gt;run_preproc&lt;/code&gt; is &lt;em&gt;only&lt;/em&gt; being called for any file with a &lt;em&gt;lower-case&lt;/em&gt; &lt;code&gt;c&lt;/code&gt; extension. Indeed, &lt;em&gt;no&lt;/em&gt; &lt;code&gt;run_&amp;lt;phase&amp;gt;&lt;/code&gt; function gets called for the upper-case variant of &lt;code&gt;C&lt;/code&gt;, meaning that file is left in the file list for the linker.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So, in short:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the extension is identified as upper-case &lt;code&gt;C&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;this is not considered a C file (or &lt;em&gt;any&lt;/em&gt; type of file the compiler can handle) by the file type detector in &lt;code&gt;main&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;it is therefore be left in the file list to be passed to the linker for resolution.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then, of course, the linker has &lt;em&gt;no&lt;/em&gt; idea what to do with a C source file so it rightly complains bitterly - the magic it's looking for is almost certainly the header at the start of an object or library file, neither of which the C source file contains.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, in fact, this is further supported by the fact you &lt;em&gt;can&lt;/em&gt; use an upper-case source file, just not for the extension bit:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C:\SRC&amp;gt; BCC -O HELLO.EXE HELLO.C&#xA;C:\BCCBIN\LD86.EXE: HELLO.C has bad magic number&#xA;&#xA;C:\SRC&amp;gt; BCC -O HELLO.EXE HELLO.c&#xA;C:\SRC&amp;gt; hello&#xA;Hello, World!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;One way to &lt;em&gt;fix&lt;/em&gt; this would be to just treat upper-case &lt;code&gt;C&lt;/code&gt; as a valid extension for C source code as well, something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (do_preproc &amp;amp;&amp;amp; tolower(next_file-&amp;gt;filetype) == 'c') run_preproc(next_file);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-11-22T13:23:59.447" LastActivityDate="2018-11-22T13:23:59.447" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8288" PostTypeId="2" ParentId="8275" CreationDate="2018-11-16T06:08:43.320" Score="2" Body="&lt;p&gt;Was it The Sentinel? Surprised I didn't think of this when I up voted your question yesterday! &lt;a href=&quot;http://www.atarimania.com/game-atari-st-sentinel-_25061.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;More info at Atari Mania&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OwpBM.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OwpBM.gif&quot; alt=&quot;Map screen&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/LKCL0.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LKCL0.gif&quot; alt=&quot;Gameplay&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/uG33t.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uG33t.gif&quot; alt=&quot;Title Screen&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2018-11-16T06:08:43.320" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8289" PostTypeId="1" AcceptedAnswerId="8290" CreationDate="2018-11-16T12:44:57.727" Score="17" ViewCount="2684" Body="&lt;p&gt;Nowadays there is quite some debate and controversy over whether Linux distributions should use &lt;code&gt;systemd&lt;/code&gt;, GNU Shepherd etc. But all these systems are relatively new - for these examples dating back to 2010 and 2003 respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the whole point of the term &quot;GNU/Linux&quot; is that GNU was (at that time) a complete operating system without a kernel, what init system was used in early distributions, for example in the 90s? It seems that &lt;code&gt;init&lt;/code&gt; (or equivalent) is a pretty fundamental thing to have in any UNIX-based system. Also, what was wrong with the systems used at that time that led to the creation of &lt;code&gt;systemd&lt;/code&gt; et al?&lt;/p&gt;&#xA;" OwnerUserId="7981" LastEditorUserId="7981" LastEditDate="2018-11-17T18:59:22.557" LastActivityDate="2018-11-17T18:59:22.557" Title="What init system was used in early Linux distributions?" Tags="&lt;history&gt;&lt;boot&gt;&lt;linux&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8290" PostTypeId="2" ParentId="8289" CreationDate="2018-11-16T13:37:32.063" Score="26" Body="&lt;p&gt;Early Linux distributions, including &lt;a href=&quot;http://www.oldlinux.org/Linux.old/distributions/MCC/&quot; rel=&quot;noreferrer&quot;&gt;MCC&lt;/a&gt; and &lt;a href=&quot;http://www.oldlinux.org/Linux.old/distributions/TAMU/TAMU-1.0D/&quot; rel=&quot;noreferrer&quot;&gt;TAMU&lt;/a&gt;, used Miquel van Smoorenburg’s &lt;code&gt;sysvinit&lt;/code&gt; package (&lt;a href=&quot;http://git.savannah.nongnu.org/cgit/sysvinit.git/tree/doc/Changelog&quot; rel=&quot;noreferrer&quot;&gt;which was originally written for Minix in February 1992 and ported to Linux in July 1992&lt;/a&gt;; it is now maintained &lt;a href=&quot;http://savannah.nongnu.org/projects/sysvinit&quot; rel=&quot;noreferrer&quot;&gt;on Savannah&lt;/a&gt;). This came with built-in examples for two styles of init setup, both based on &lt;code&gt;/etc/inittab&lt;/code&gt; and runlevels: “simple” RC, with a few monolithic &lt;code&gt;rc&lt;/code&gt; scripts taking care of the various runlevel transitions, and System V-style &lt;code&gt;init.d&lt;/code&gt; scripts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This continued in Slackware and Debian, the oldest surviving distributions: &lt;a href=&quot;http://www.oldlinux.org/Linux.old/distributions/slackware/&quot; rel=&quot;noreferrer&quot;&gt;Slackware&lt;/a&gt; used an RC-style setup on top of &lt;code&gt;sysvinit&lt;/code&gt;, &lt;a href=&quot;http://archive.debian.org/debian/dists/Debian-0.93R6/&quot; rel=&quot;noreferrer&quot;&gt;Debian&lt;/a&gt; an &lt;code&gt;init.d&lt;/code&gt;-style setup also on top of &lt;code&gt;sysvinit&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also, what was wrong with the systems used at that time that led to the creation of systemd et al?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That’s a rather contentious topic, opinion-based, so I won’t answer it here. JdeBP has written &lt;a href=&quot;https://jdebp.eu/FGA/system-5-rc-problems.html&quot; rel=&quot;noreferrer&quot;&gt;an FGA on the topic&lt;/a&gt; which provides some insight.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-11-16T17:38:02.630" LastActivityDate="2018-11-16T17:38:02.630" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8291" PostTypeId="1" CreationDate="2018-11-16T13:40:31.037" Score="51" ViewCount="14288" Body="&lt;p&gt;Next year I'm going to teach a 2-semester microprocessors class to third-year undergraduate EE students. In order to sign up for the class, students need to have completed programming and digital systems classes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to motivate the students with a real-world application of the concepts taught in class, I am considering the possibility of tasking the students with creating an emulator for an older system from scratch, as a group project to be completed until the end of the class (which is, as pointed out, 2 semesters long).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to choose a good target system for this project, with the main goal being that it should be fairly simple to emulate. The less peripherals to be emulated, the better. The less quirks and bugs that need to be replicated, also the better. I'm looking to expose the students to the important concepts of assembly language, instruction encoding, addressing modes, CPU registers, memory-mapped hardware registers, etc., and not necessarily the trickery required for rendering sprites quickly enough to make an interesting videogame with the semiconductor technology that was available in the 1980s at acceptable cost. I understand this was necessary at the time; I'm just trying to find a system that didn't abuse these tricks too much. Ideally the system in question shouldn't require cycle-accurate emulation or tricks like chasing the scanline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A second requirement pertains to performance. The students certainly aren't familiar with software optimization techniques, so trying to emulate even the first Playstation or the Nintendo 64 will probably run into performance issues (perhaps even the SNES and Genesis). At this point the students only need to be worried with implementing the emulator correctly, not efficiently. CPU emulation will certainly be implemented by an interpreter, not a translator/recompiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I don't think the students would find the emulator interesting if it, say, just displayed register values after the execution of a toy program (although this would make the project much much simpler). I'd like to choose a system for which games were made, even if said system wasn't a dedicated video game console. I feel that being able to run games on the emulator would be very motivational for the students.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, right now I'm looking at the &lt;a href=&quot;http://www.nesdev.com/NESDoc.pdf&quot; rel=&quot;noreferrer&quot;&gt;NES&lt;/a&gt;, but it still feels a little bit complicated, especially the PPU. Are there simpler options?&lt;/p&gt;&#xA;" OwnerUserId="11180" LastActivityDate="2018-12-01T15:55:41.400" Title="Simplest system to create an emulator for" Tags="&lt;hardware&gt;&lt;emulation&gt;&lt;gaming&gt;" AnswerCount="17" CommentCount="14" FavoriteCount="25" ContentLicense="CC BY-SA 4.0" />
  <row Id="8292" PostTypeId="2" ParentId="8291" CreationDate="2018-11-16T14:01:08.857" Score="11" Body="&lt;p&gt;Can I suggest the &lt;a href=&quot;https://en.wikipedia.org/wiki/SG-1000&quot; rel=&quot;nofollow noreferrer&quot;&gt;SG-1000&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system is little more than a grouping of three off the shelf chips - the Z80, the TMS9928A for graphics and the SN76489 for sound, with the controllers as dumb groups of NO (normally open) switches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In software or hardware you could simulate or emulate any part of this in isolation or all together to produce the complete system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system uses simple non bankswitched ROMs for its games, and they usually don't rely on any tricks such as mid screen interrupts or cycle counting to produce their effects. Just a single tile map and a number of sprites on top. I suggest that this is much more straightforward than a system containing many interacting internal components and intelligent cartridges like the NES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You ought to provide your &lt;em&gt;own&lt;/em&gt; games to emulate rather than distributing unlicensed copyrighted material of course.&lt;/p&gt;&#xA;" OwnerUserId="11181" LastEditorUserId="278" LastEditDate="2018-11-17T18:23:15.857" LastActivityDate="2018-11-17T18:23:15.857" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8293" PostTypeId="2" ParentId="8291" CreationDate="2018-11-16T14:19:07.037" Score="42" Body="&lt;p&gt;I'm putting &lt;a href=&quot;https://en.wikipedia.org/wiki/CHIP-8&quot; rel=&quot;noreferrer&quot;&gt;CHIP-8&lt;/a&gt; forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This system is essentially a virtual machine developed for some reason. There are games written for the CHIP-8. It has a few opcodes, a stack, a couple of timers, and a low resolution bitmapped display, but it's simple enough that the first few emulators fit in a few kilobytes on early 8-bit computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are more than a few reference implementations you could use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are games and so on which are in the public domain already, like &lt;a href=&quot;https://github.com/dmatlack/chip8/tree/master/roms/games&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; so that you needn't provide your own games.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-11-18T03:22:52.607" LastActivityDate="2018-11-18T03:22:52.607" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8294" PostTypeId="2" ParentId="8291" CreationDate="2018-11-16T14:27:40.143" Score="7" Body="&lt;p&gt;Are you looking for a system that has not been emulated much? I suggest to stay within 8-bit computers (or early simple 16/32 bit ones), ZX Spectrum 48k is such a relatively simple system - very well documented, no sprites, no audio chip, no RAM banks, simple I/O, simple graphics (though with a weird layout), no cycle perfect emulation required, well known CPU, easy cassette handling (could be made even easier by ROM traps). There is &lt;em&gt;tons&lt;/em&gt; of games, many of them with permissive licensing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disadvantage: there is an enormous amount of available emulators, many themselves the retro category, and many with source code available, so the danger of cheating and copying other code is high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course, working on an emulator of a previously not emulated system would provide additional benefit of the feeling of accomplishment.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2018-11-16T14:27:40.143" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8296" PostTypeId="2" ParentId="8291" CreationDate="2018-11-16T15:16:07.693" Score="3" Body="&lt;p&gt;The ZX Spectrum option has beed already told: its strength is the utterly simplistic IO hardware and the fact that many existing games do NOT require precise, cycle-correct emulation of all the quirks with the only exception of sound (no anything near to correct sound without cycle-exact emulation of the CPU and correct downsampling of the intermediate 1-bit sound stream produced by the CPU).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any other option of gaming hardware like NES, Genesis and all the similar sprite-based machines is not an option, obviously, as lots of time needed to learn the complex hardware, develop ways to emulate it, work around deficiences in the emulation etc. For example, even &quot;simple&quot; Super Mario game on NES won't work unless sprite collision bit in PPU is correctly emulated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The remaining options IMHO are the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;early text-mode based IBM PC&lt;/li&gt;&#xA;&lt;li&gt;any one of the existing CP/M machines&lt;/li&gt;&#xA;&lt;li&gt;(not including any &quot;big&quot; machines before &quot;micro&quot; era)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The key point here is text-mode display, that is not that hard to emulate and much simpler to show on the host machine (even no need to display pixelled graphics, work with windowing system/SDL/etc.!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, some investigation is still needed as to collect proper programs to work with, including games. There are some text-mode games in CP/M, and equally should be some for IBM PC.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2018-11-16T15:24:40.347" LastActivityDate="2018-11-16T15:24:40.347" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8297" PostTypeId="2" ParentId="8291" CreationDate="2018-11-16T16:16:03.480" Score="17" Body="&lt;p&gt;There are some good ideas so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But something to consider.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do something like a CP/M machine, they're really quite basic and simple, especially since everything is isolated by not just the BIOS, but also the IN/OUT nature of the 8080/Z80 family.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It does not seem untoward to me to have a CP/M machine be the goal of the first semester. (I don't know your syllabus)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, for example, a basic CP/M machine doesn't need cycle accuracy, it doesn't need interrupts, the most complicated thing it has to do is poll the keyboard to see if a key has been pressed. (In contrast to monitoring keydown and keyup or anything else.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, in the second semester, you can add the requirements such as interfacing to a graphics chip. The instance above of the SG-1000 could easily be a CP/M machine in the first semester, and then readily transformed in to the SG-1000 in the second (since you've got the Z80 part all done in the first semester).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I think it behooves your class to have an acceptance program that students can run to verify their CPU. Few things more exciting than debugging a bad CPU, especially with machine language you may not be familiar with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 community has test programs that can check that a CPU executes all of the instructions properly, I'm not sure what's available to the other CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if it's any consolation to scope, I wrote both a simulator and an associated assembler off and on over a 2 week Christmas holiday, if that gives you any help on how big the actual projects are. Basic CPUs are pretty simple.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="7493" LastEditDate="2018-11-16T17:30:25.577" LastActivityDate="2018-11-16T17:30:25.577" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8298" PostTypeId="2" ParentId="8291" CreationDate="2018-11-16T16:30:28.297" Score="9" Body="&lt;p&gt;A simple, straightforward computer like the ZX Spectrum sounds reasonable - But there are simply too many good emulators around already to make this a useful option. I also think the 6502 is more easy to emulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, a possible option could be the &lt;a href=&quot;https://en.wikipedia.org/wiki/Oric&quot; rel=&quot;noreferrer&quot;&gt;Oric-1&lt;/a&gt; or Atmos by Tangerine systems, that used a 6502, non-banked memory, no custom chips except simple video, and a relatively straightforward frame buffer. It is also by far not as well-known as the Spectrum, still, there is software (games) available to bring along some simple compatibility tests (I think, some &quot;sense of achievement&quot; is extremely important for students). There are a number of emulators already available for the Atmos (three, to my knowledge), but their number is limited, which makes it easy to find out if someone cheated and simply copied code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of the Oric games were so sophisticated to my knowledge that you would need a 100% cycle-exact emulation to run the games, &lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-11-16T20:07:52.333" LastActivityDate="2018-11-16T20:07:52.333" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8299" PostTypeId="2" ParentId="8291" CreationDate="2018-11-16T16:43:24.937" Score="21" Body="&lt;p&gt;Oh. Nice question. I'll try to give a few hints, but I would consider the issue  way to broad to be answered here instead of a more meaningful conversation. Nonetheless:&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[...]tasking the students with creating an emulator for an older system&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Quite cool.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;from scratch,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If this is supposed to be really from scratch and in software, it would not really consider it a task fit for freshmen in such a limited time. Unless there's a way to take out real time requirements (which are even more relevant to games), I would rather be careful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, since it's about EE, why not do real hardware? It's still easy to get (some) classic CPUs and related devices. Combined with like a modern LCD the hardware effort is quite doable in a few weeks in great detail.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;as a group project to be completed until the end of the class (which is, as pointed out, 2 semesters long).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which might be the most tight condition.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm trying to choose a good target system for this project, with the main goal being that it should be fairly simple to emulate. The less peripherals to be emulated, the better. The less quirks and bugs that need to be replicated, also the better. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sounds like a good attempt. And more important it removes some seemingly simple systems (like singleboarders) from the list, as they rely on complex handling of I/O devices (like real time access to ports to drive LED segments in seemingly continuous way).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm looking to expose the students to the important concepts of assembly language, instruction encoding, addressing modes, CPU registers, memory-mapped hardware registers, etc.,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Something that can be done with a real hardware as well as an emulation, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Ideally the system in question shouldn't require cycle-accurate emulation or tricks like chasing the scanline.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Together with the implied requirement for a video output, this calls for a simple non accelerated bitmap logic.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A second requirement pertains to performance. The students certainly aren't familiar with software optimization techniques, so trying to emulate even the first Playstation or the Nintendo 64 will probably run into performance issues (perhaps even the SNES and Genesis).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I wouldn't fear much here, as actual PC hardware is quite fast. The real issues here are not speed of emulation, but real time aspects - synchronizing various emulation parts - which require a very careful and fine tuned software design. Not to be expected here. Quite the 'racing the beam' part you mentioned.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;At this point the students only need to be worried with implementing the emulator correctly, not efficiently. CPU emulation will certainly be implemented by an interpreter, not a translator/recompiler.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Still, even for the most primitive ones, real time synchronisation is necessary to play a game. At least a screen retrace synchronisation is a must - not at least to speed toggle the simulation itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inherent need of games to use timing effects - and synchronized screen manipulation on a finer level than frames - is something that will make running any real world game on the proposed emulator a challenge. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'd like to choose a system for which games were made, even if said system wasn't a dedicated video game console. I feel that being able to run games on the emulator would be very motivational for the students.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I wholeheartedly agree here. Much of the success of &lt;a href=&quot;https://en.wikipedia.org/wiki/Andr%C3%A9_LaMothe&quot; rel=&quot;noreferrer&quot;&gt;Andre LaMothe&lt;/a&gt;'s experiment and learning systems is based on the foremost ability to do games.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For instance, right now I'm looking at the NES, but it still feels a little bit complicated, especially the PPU. Are there simpler options?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It gets hard as the basic requirements are contradicting each other. Only successful consoles/computers got a large selection of games, but these are also such having a more complex hardware structure allowing great games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's check some well known systems. I would like to separate them in 'simple' and 'complex' systems along the complexity of their video logic (*1)&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Simple Systems&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In first iteration these are all systems without a dedicated VDC/CRTC.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Atari VCS - eventually the ultimate system to be used to learn assembler, work on an extreme basic level with no in-between and not much to take care of. At the same time it's the namesake for the 'racing the beam' term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said that, it may still be a system to look for, as the timing dependant parts are well defined and (compared to any other video) extreme simple and easy to emulate - except it's not freshmen stuff. Also, it's extremely well documented on general available sources.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Commodore PET - A rather simple system, especially since the whole video part can be emulated quite abstract, still the VIAs need to be, at least in part, emulated. Most important it contains only two timing sources (beside clock).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A great plus for the PET (and follow ups) is the good documentation (also due its simplicity). Also, while it features a CRTC, almost no game (or other software) made use of reprogramming it at all, making a way simple and an incomplete (abstract) emulation possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the backside, there is only a rather small number of games and most of them are written in BASIC, which may require some research to find the amount of abstraction vs. detail in emulation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Apple II - Again, an incredible well documented system with lots of software. Much of it Assembly based. While the Hardware is fully documented and build from only TTL, it's workings aren't really simple and since some games heavily rely on quirks and counting loops for exact timing, emulation may get way more complicated then assumed at first sight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A plus for you might be that the Apple II was quite popular in Brazil (well back then).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;TRS-80 - Here as well the video logic is build up from TTL but way more simple than on the Apple. Similar other I/O is quite simple. On the negative side is again a rather small number of games.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So far the real ancients, but also some later systems can be classified as simple:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Sinclair Spectrum - While the logic does offer a few tricks, bells &amp;amp; whistles, it is a straight forward tiled bitmap design. So far, chances are good for an emulation, except , as usual, games did rely very much on timing, something complicating emulation again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As well as with the Apple II, there where quite some clones in Brazil.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A similar case can be made for the ORIC family&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Atari ST - It may be a surprise from todays point of view, but the Atari ST did not feature any sophisticated video hardware. Merely 3 graphics resolutions and a 9 bit CLUT for up to 16 concurrent colours. A few synchronisation points and a single timer. Plus a more modern CPU and a dedicated sound chip. Sounds like a match made in heaven, if, well if it wouldn't be for the programmers of games again. Here as well, software did imply a whole plethora of tricks to create awesome games (*2).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A first conclusion for 'simple' systems is, that while the hardware may be less complex, software did go a great length to overcome this. In consequence it &lt;em&gt;may&lt;/em&gt; be said that less complex systems don't necessary make an emulation less complex, as not more different hardware is to be emulated, but the simple hardware needs to be followed very close timing wise to make existing game code run. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Complex Systems&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;These are in general all systems with a sophisticated VDC&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TMS9918&quot; rel=&quot;noreferrer&quot;&gt;9918 ff&lt;/a&gt;. - This isn't so much about a single system, but eventually the most common used VDC (TI called it VDP). While conceived for the TI 99/4, TI did sell it to anyone who was interested. It resulted in the majority of all systems (*3) using a 9918 or one of its follow up designs (9928/38/58/...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Game consoles like &lt;a href=&quot;https://en.wikipedia.org/wiki/ColecoVision&quot; rel=&quot;noreferrer&quot;&gt;Coleco Vision&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/SG-1000&quot; rel=&quot;noreferrer&quot;&gt;Sega SG-1000&lt;/a&gt; all the way to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Master_System&quot; rel=&quot;noreferrer&quot;&gt;Master System&lt;/a&gt; a well as computers from &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TI-99/4&quot; rel=&quot;noreferrer&quot;&gt;TI 99/4&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Memotech_MTX&quot; rel=&quot;noreferrer&quot;&gt;Memotech MTX&lt;/a&gt; all the way to the whole &lt;a href=&quot;https://en.wikipedia.org/wiki/MSX&quot; rel=&quot;noreferrer&quot;&gt;world of MSX&lt;/a&gt; machines did use this family.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sounds great, doesn't it? Well, for sure there is a lot of games to be used. Further, such a VDP does help to simplify emulation as it offers a clear separation between CPU and display and limits what 'tricks' a game can use to what the VDP offers, which in turn is clearly defined. And again, it's the existing software that makes emulation hard, as, again of course, programmers did use timing tricks to manipulate the screen at the right time. Did anyone mention 'Racing the Beam'?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Commodore VC20, C64, C16, etc. - The same is true for all of Commodores home computers. While they differ in complexity by having  sprites or not, offering timers or not and sound or not, the basic issue is the same as with the 9918 family: Software using certain timing situations to create game effects.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;6847 Systems - Tandy CoCo, Matra Alice and alike feature the same issue.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I could go on with game systems like NES or MegaDrive, but I'll end that list here, as the principle should be clear by now: While some systems may seam like more complex to be emulated, the real issue is not the complexity of video hardware, but whenever a programmer 'improves' what can be done by clever programming (*4). So the real issue for your project isn't (so much) the hardware (*5), as it's the software, &lt;strong&gt;especially the tricks and tools used in real existing games.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's especially bad, as you want to use (as I read it) existing games as motivation. There won't be many running on a less hard real time emulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reducing this dependance will reduce the number of games that run correct. Reducing it to a level that allows it to be handled in a time constrained course, will make it almost impossible to find suitable games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conclusion: &lt;strong&gt;Finding the right tradeoff is a way, but one that will take considerable research while still limiting the usability.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Now, maybe it's possible to attack this from a slightly different angle. Lets try some:&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use of existing old hardware:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this is proven (*6) to work, offers highest compatibility and ease of use due open development environments, it may miss the 'build' appeal for EE students.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use existing educational games systems:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Systems like Andre LaMothe's &lt;a href=&quot;https://en.wikipedia.org/wiki/XGameStation&quot; rel=&quot;noreferrer&quot;&gt;XGS&lt;/a&gt; are great tools to dive into detailed hardware build and programming. Sure, some soldering required (there are ready build available), they are almost complete software defined systems, throughout documented and offer a huge library of Games. Not to mention his books about game programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A great bonus is that students may be able to take the system home and play even after the course has ended.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build your own simple system:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a classic CPU (6502 for example), some RAM, FLASH and a VIA plus an FPGA to implement a very basic CRTC and done. Students will solder it, can learn about the components and their interaction, including FPGA usage (which might be a must anyway today) and then run their software on real hardware. Even with small numbers it should be possible to produce such a board around 50 Euro or less. Like the XGS idea it'll work after the course has ended - including the feeling of ownership as being &lt;em&gt;their&lt;/em&gt; system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course students will have to write their own games, but simple games can be done in a rather short time - not to mention that follow up courses may as well use games the prior class did write.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Do an emulation of 'your own' system&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much like before, except everything is virtual. It got the advantage of being a well defined and closes system, especially one where there are no limitations of due a less 'perfect' emulation - the Emulation is perfect by definition and all its quirks are the one the system has. Disadvantage is again the Software part.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use 'soft' hardware:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a project by Neil Franklin creating a number of generalized system components much like classic computers had, but using micro controllers instead of dedicated chips. It combines emulation with real hardware. While components are still developed as emulation, these are meant to run in a micro controller and be used much like 'real' chips. One system might be set up by using a SoftCPU module emulating for example a 6502 with some RAM and ROM, combined with a SoftVGA delivering a terminal like video interface and a SoftPS2 emulating Keyboard and Mouse. All are connected via a parallel or serial (SPI) bus allowing the addition of other components that can be presented to the emulation as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside being all about emulation, it does feature a limited amount of hardware that can be done on a breadboard (Still, it's never to early to start soldering), it also shows a quite typical task of todays engineering — replacing traditional logic by micro controllers - in practical use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result is a system offering the touch and feel of a real (old) computer while being build with modern hardware running parallel emulations.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use of a configurable emulator:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No, this is not about MAME or alike, but an emulator framework written in JavaScript, that handles the generic parts (including timing), where your students will add their emulations (which was a goal, wasn't it?) to form a whole system. Since JS is delivered in source, even the Framework itself can be modified.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the quality of each emulation, this may be usable for anything from a simple demonstration system up to a full figured recreation of a 1980s computer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, maybe some of the above variations may be a good start?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I will focus only on video (and CPU) to keep it simple. Also video alone will already work well to weed out to complete systems. Sound will add another dimension and may complicate it way beyond the scope of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Just take a look at Xenon. A groundbreaking vertical scroller with multiple shifting layers many animated objects, all running super smooth in software. In fact, it was so fine tuned, that porting it to the (usually) more capable Amiga (graphics wise) took quite some time and resulted in a somewhat lesser game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Systems designed not necessary units sold. Then again, some game consoles where more than just successful, so it may even get the majority in numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - The blogposts of the main developer of the &lt;a href=&quot;https://code.google.com/archive/p/glidehqplusglitch64/&quot; rel=&quot;noreferrer&quot;&gt;Glide64&lt;/a&gt; renderer plugin for N64 emulators has written a multi part series (&lt;a href=&quot;http://gliden64.blogspot.com/2013/10/frame-buffer-emulation-intro.html&quot; rel=&quot;noreferrer&quot;&gt;Intro&lt;/a&gt;, &lt;a href=&quot;http://gliden64.blogspot.com/2013/11/frame-buffer-emulation-part-i.html&quot; rel=&quot;noreferrer&quot;&gt;P.1&lt;/a&gt;, &lt;a href=&quot;http://gliden64.blogspot.com/2014/01/frame-buffer-emulation-part-ii.html&quot; rel=&quot;noreferrer&quot;&gt;P.2&lt;/a&gt;, &lt;a href=&quot;http://gliden64.blogspot.com/2014/01/frame-buffer-emulation-part-iii.html&quot; rel=&quot;noreferrer&quot;&gt;P.3&lt;/a&gt;) of blogposts about the hurdles he had to climb to make the video emulation part work - all of them not about the complexity of emulating the hardware, but all due ways the CPU did modify and tweak the output &lt;strong&gt;beside&lt;/strong&gt; the video logic. This is even more remarkable considering the N64 is already a rather absract and closed system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - In fact, I would consider more complex video hardware as a great lesson for EE students, as it well shows what can be done with a few gate instead of piles of software - even more so as they are about to do hardware later on, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Stefan Höltgen at FU Berlin for example uses old game systems in his classes to introduce (non-EE) students to real hardware and real programming and their implication for every day tasks (and games).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2018-11-16T22:28:12.780" LastActivityDate="2018-11-16T22:28:12.780" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="8300" PostTypeId="2" ParentId="8291" CreationDate="2018-11-16T16:47:58.913" Score="3" Body="&lt;p&gt;A system with the least amount of custom chips would probably be a cleaner target to emulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An Apple II is one of the simplest systems (no LSI except for the 6502 CPU) for which vast amounts of (easily available) games were written.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have also been tons of (vintage) books and articles published on the system architecture of the Apple II and the 6502 CPU.  Thus the system has been fairly well documented by multiple (cite-able) sources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Emulators for an Apple II can be on the order of 10K lines of C code, possibly slightly less, which might fit within your course time frame.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2018-11-16T17:53:44.527" LastActivityDate="2018-11-16T17:53:44.527" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8301" PostTypeId="2" ParentId="1558" CreationDate="2018-11-16T16:51:18.453" Score="1" Body="&lt;p&gt;I have an 800XL that does this once in a while though the keyboard in my rig seems 100% mechanical.  Others seem to be less so with a sheet of mylar in there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anywho - in my case I'll simply pop the keycap and use compressed air to clean out the switch.  I do this a few times and magically the key starts working again.&lt;/p&gt;&#xA;" OwnerUserId="11184" LastActivityDate="2018-11-16T16:51:18.453" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8302" PostTypeId="2" ParentId="8291" CreationDate="2018-11-16T17:57:04.080" Score="8" Body="&lt;p&gt;Creating an Emulator from scratch is relatively huge task especially for inexperienced students and might prove problematic. So you really have to be careful about what platform to emulate and what info to share/use. For me the best choice is a &lt;strong&gt;ZX 48K platform&lt;/strong&gt; as I was growing on it and am familiar with its inner workings so the answer will be biased by that... But we must take in mind that nowadays students usually did not see/use/know it as much as we do... What you need to achieve is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;correct CPU iset emulation&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;even if there are tons of instruction sets docs out there You have to be careful as for example on Z80 the 99.99% of them are containing mistakes. So you should chose some tested reference iset for them you now its correct (or at least basicaly functional).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example here is mine Z80 iset passing ZEXAL with 100% success:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://ulozto.net/xGYKSRRs/zilog-z80-instruction-set-zip&quot; rel=&quot;noreferrer&quot;&gt;my Zilog Z80A complete instruction set with machine cycle timing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;br&gt;Z80 platform has one major advantage and that is there are extensive testers for it like &lt;a href=&quot;http://mdfs.net/Software/Z80/Exerciser/&quot; rel=&quot;noreferrer&quot;&gt;ZEXALL Exerciser&lt;/a&gt; which can help debug the emulator a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think there where also versions for &lt;code&gt;i8080&lt;/code&gt; but I do not know of any such testers for different CPU family.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Timing&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;well for basic emulation the clock tics method (or throttling) is enough which is well known and used... I see no problem here. Nowadays computers have relatively good resolution for timing (on PC: RDTSC, on Windows PerformanceCounter, ...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic emulator can ignore the CONTENTION of the emulated platform but beware some OS/games/apps could be rendered unusable if not emulated properly. This goes not just for demos. The usual timing on old computers was derived from some interrupt (usually video refresh) and limited number of cycles where able to execute before it. But with contention the number of instructions executed for the same time can be very different and some programs might overflow and damage them self or freeze. The CONTENTION is the hardest thing to implement with clock tics so You should avoid it at all costs... On the other hand with MC level timings its really easy and just a few lines of code.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sound&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;this is platform dependent problem and you should chose the API used for sound input/output correctly. For example on windows the only usable option is WAvEIN/WAVEOUT due to low latency and easy usage. DirectX is unusable (at least was at time I was trying to use it for such task) due HIGH latencies and not working callbacks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would used buffered approach instead of direct speaker driving so your emulation can be bursting the execution time instead of &lt;a href=&quot;https://stackoverflow.com/a/33317202/2521214&quot;&gt;MC level correct execution&lt;/a&gt; (which I do anyway but I doubt students would be able to do it in the time at hand).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Video&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This one is also platform dependent ... and you should use API your students are familiar with. Even beam tracing is relatively easy to implement with simple bitmap ... On computers like ZX the Scanline order has special meaning and can be very distracting for newbie coders so its better to use translation LUT tables converting between address and y coordinate back and forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most older platforms used 50Hz/60Hz refresh rate and relatively small resolution so nowadays computers even with not well optimized emulation should still be fast enough for it. If not Skipping frames is an option too...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;other HW and peripherials&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The absolute minimum is RAM/ROM memory and keyboard. Memory is usually very easy just static array and or some page switching stuff... The keyboard can be emulated by setting I/O according to keys pressed. The I/O can be also memory mapped to some array just like memory. Trapping ISR routine is also an option but that make keyboard unusable for custom key handlers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would not bother with FDC,AY,etc peripherials as the emulator should be kept as simple as posible. But if you're lucky there might be some students that will be way ahead of others with this project. For those you might suggest to implement exciting features like FDC, DMA, even real soundcard sound (for real tapes or any audio players) which enables much nice features for example see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4859/6868&quot;&gt;Z8410 DMA chip as GPU?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Files&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would go for Z80/SNA file formats at start. Using TAP/TZX is nice but from start the emulator would be quite buggy hence loading routines may not work properly making using and debugging very hard.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;ROM&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;this is the most problematic part as many platform ROMs are still not free and by extracting/downloading/using them for emulation you might risk legal issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From some comments here it looks like ZX ROMs are public domain now... and there are also Commented ROM prints out there making it much easier to debug the first steps of the emulator (when nothing yet works).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you should always consider &lt;a href=&quot;http://www.worldofspectrum.org/permits/&quot; rel=&quot;noreferrer&quot;&gt;Emulation and legal stuff&lt;/a&gt; especially if the emulators will be placed somewhere on the internet&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Here some related QA links of mine:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4689/6868&quot;&gt;How to obtain CPU and other hardware specs for emulator development&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/19218993/2521214&quot;&gt;Writing a graphical Z80 emulator in C or C++&lt;/a&gt; I strongly recommend to read this one (especialy for your students) will save them a lot of time and nerves&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/18911590/2521214&quot;&gt;What's the proper implementation for hardware emulation?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-11-17T08:19:23.587" LastActivityDate="2018-11-17T08:19:23.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8303" PostTypeId="2" ParentId="8291" CreationDate="2018-11-16T18:28:26.843" Score="6" Body="&lt;p&gt;PET or TRS80 might work well. Simple hardware with text on screen so they could be emulated with straight text ouput initially adding code for their odd character sets later and unlikely to contain much in the way of exact cycle counting code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bonus idea after if you go for a PET adding C64 support would give graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 is probably simpler to emulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Final thought might be the Ohio Scientific Superboard II or in it's UK incarnation the UK101 as I don't think it has reprogrammable video hardware.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2018-11-16T18:28:26.843" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8304" PostTypeId="2" ParentId="8291" CreationDate="2018-11-16T18:30:32.180" Score="9" Body="&lt;p&gt;Based on your criteria, and the need to keep the project interesting for your students, I'd recommend seriously considering the &lt;a href=&quot;https://en.wikipedia.org/wiki/Vectrex&quot; rel=&quot;noreferrer&quot;&gt;Vectrex&lt;/a&gt; Arcade System, which was sold by Milton Bradley in the early 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ChLqv.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ChLqv.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the Vectrex is unique in using a vector display, rather than a raster display, it does not require any complicated video hardware to be emulated. The display is managed by the CPU, and the display itself is simple to emulate on a modern system and with good performance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides emulating the vector display, the CPU (Motorola 6809), and the I/O chip (MOS 6522), don't represent too much of a challenge as they are simple 8-bit parts that are very well documented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The memory model is also very simple with no banking schemes that I'm aware of. There is a common PSG sound chip in the Vectrex, but emulating it could be considered as &quot;Extra Credit&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike other simple game consoles of the early 1980s, the Vectrex games have held up rather well, given its ability to render smooth monochrome graphics including 3D wire-frame. This is farther evidenced by the popularity of the modern &quot;home brew&quot; development, in which developers continue to create new Vectrex games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One final advantage for the Vectrex is that the original system ROM is freely distributable.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-11-16T22:02:07.177" LastActivityDate="2018-11-16T22:02:07.177" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8306" PostTypeId="2" ParentId="8289" CreationDate="2018-11-16T21:54:33.510" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Also, what was wrong with the systems used at that time that led to the creation of systemd et al?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It was too simplistic. At that time, basically, the RC scripts would be run sequentially, only sorted alphabetically/numerically, everything managed manually. This meant:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Order was somewhat arbitrary, not intrinsically enforceable by the scripts itself. The admin needed to to take care. Better not start &lt;em&gt;that&lt;/em&gt; service before the NFS script has run...&lt;/li&gt;&#xA;&lt;li&gt;There was no explicit connection between the thing started by a script, and the script itself. The script starting an Oracle database system might just be called &lt;code&gt;/etc/init.d/db&lt;/code&gt;. The script starting &lt;code&gt;httpd&lt;/code&gt; might be called &lt;code&gt;apache&lt;/code&gt;. Worse, you might have &lt;code&gt;apache&lt;/code&gt; &lt;em&gt;and&lt;/em&gt; &lt;code&gt;apache2&lt;/code&gt;. And so on. Have fun finding it (and good luck being sure you got the correct one).&lt;/li&gt;&#xA;&lt;li&gt;Every script was free to bring its own subcommands (&lt;code&gt;start&lt;/code&gt;, &lt;code&gt;restart&lt;/code&gt;, &lt;code&gt;reload&lt;/code&gt;, &lt;code&gt;graceful&lt;/code&gt;...) with sometimes arbitrary semantics.&lt;/li&gt;&#xA;&lt;li&gt;As far as I can recall, one of the largest drawbacks at the time was the sequential initialization. It took &lt;em&gt;ages&lt;/em&gt; to boot up the system. Good riddance if a script had to wait on some external piece of hardware...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;At the end of the day, it was just natural progression to look for more capable systems.&lt;/p&gt;&#xA;" OwnerUserId="4235" LastActivityDate="2018-11-16T21:54:33.510" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8308" PostTypeId="2" ParentId="8289" CreationDate="2018-11-16T23:46:02.090" Score="3" Body="&lt;p&gt;System V was released in 1983 and thus the concept of &quot;System V init&quot; is at least as old. A &lt;a href=&quot;https://minnie.tuhs.org//cgi-bin/utree.pl?file=SysIII/usr/src/man/man8/init.8&quot; rel=&quot;nofollow noreferrer&quot;&gt;similar predecessor&lt;/a&gt; was already found in System III &lt;a href=&quot;https://archive.org/stream/byte-magazine-1983-10/1983_10_BYTE_08-10_UNIX#page/n133/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;as early as 1981&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linux early used an &lt;a href=&quot;https://www.linux.it/~rubini/docs/init/init.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;init system developed by Miquel van Smoorenburg which was inspired by the init from System V&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides the problems already mentioned in the other answers, one big problem with System V init is that it's rather &quot;static&quot; - it was invented in a time when most Unix computers  were comaratively &quot;big&quot; (by those days standards) continuously running multi-user machines with a static hardware configuration. The machines and peripherals were initialized during boot up and stayed operative until shutdown.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This doesn't scale well to todays battery-equipped portable machines where stuff like USB and Thunderbolt devices are continuously plugged and detached, systems are put to standby at random times and wake up again with totally different peripherals attached.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This calls for a more dynamic and possibly event-driven init system and lead to the design of eg. upstart and ultimately systemd, which is somewhat inspired by MacOS' launchd.&lt;/p&gt;&#xA;" OwnerUserId="11187" LastEditorUserId="11187" LastEditDate="2018-11-17T09:51:29.897" LastActivityDate="2018-11-17T09:51:29.897" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8312" PostTypeId="2" ParentId="2907" CreationDate="2018-11-17T21:33:45.163" Score="4" Body="&lt;p&gt;Assorted additions to the existing answers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Robocom BitStik CAD system &lt;a href=&quot;https://stardot.org.uk/forums/viewtopic.php?t=3386&quot; rel=&quot;nofollow noreferrer&quot;&gt;required a 6502 second processor&lt;/a&gt;, as a basic BBC micro didn't have enough RAM: it had been written in assembler for the 48KB Apple ][. It was fairly sophisticated for CAD on an 8-bit system, but being written in assembler meant it quickly became obsolete. There was also an enhanced version of the original BBC Micro Elite that required a 6502 second processor, and could be played with the BitStik 3-axis joystick. That joystick plugged into the ordinary BBC joystick port, using three of its four A-D channels for the three axes. The Apple ][ version of the Bitstik was mechanically the same, but had different electronics and connectors to fit the Apple ][ joystick port. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Panos_(operating_system)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Panos was pretty simple&lt;/a&gt;. It was basically intended for running compilers and scientific programs on the NS32016, but the Acorn-influenced world gave up on 32016 in favour of ARMs, which were faster, cheaper and simpler. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2018-11-17T21:40:20.310" LastActivityDate="2018-11-17T21:40:20.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8313" PostTypeId="1" AcceptedAnswerId="8315" CreationDate="2018-11-17T22:47:38.273" Score="8" ViewCount="902" Body="&lt;p&gt;I have an A600 Rev 2D (&lt;a href=&quot;https://www.amigawiki.org/dnl/schematics/A600_R2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;schematic&lt;/a&gt;), which is dead as a doorknob. It was that way when I acquired it some years ago, and it's mostly been in storage since.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Between the 5V rail and GND I measure a low resistance, only around 115 to 140 Ω, and that doesn't seem right. Removing all the electrolytic capacitors did not help. There has been some slight electrolyte leakage from the 10 μF caps, as evidenced by a fishy smell when I desoldered them, but no visible corrosion on the board. After removing the caps, I cleaned the surrounding PCB areas with isopropyl.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unloaded, the PSU gives out all the right voltages, and it works fine with my A500. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I connect the PSU to the A600 motherboard, the 5V rail drops to near zero. I have tried feeling the temperature of the chips while they're powered, but nothing gets noticably hot. Maybe the PSU goes into some safe shutdown when it sees overcurrent? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I feel kind of stuck at this point, all I can think of is to start desoldering chips until the short disappears. But that seems like a ham fisted approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone experienced similar symptoms? Any tips on how to continue troubleshooting this problem?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Update: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried the alcohol test. I set the current limit to ~1A, which limited the voltage to a bit over 2V. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Agnus, Denise and both of the CIAs dried up somewhat quickly in the center, but that I suppose is to be expected. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the DRAM was acting odd: U17 (which is optional according to the datasheet) stayed cool, while U16 (which I suppose is the main DRAM chip then) dried up very quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;U22, which is a 74LS245 octal bus transceiver also dried somewhat quickly. While U21, also a 74LS245, stayed wet. Both of these sit between the CPU and the DRD bus (DRAM Data Bus) that goes to Agnus, Denise, Paula, and both DRAM chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure what to make of it all yet. Perhaps I should increase the current to 2A to really see the effect, but I'm afraid of cooking something that shouldn't be cooked. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess my primary suspect at this point is the U16 DRAM chip.&lt;/p&gt;&#xA;" OwnerUserId="11193" LastEditorUserId="11916" LastEditDate="2019-04-22T17:35:57.980" LastActivityDate="2019-04-22T17:35:57.980" Title="How to troubleshoot Amiga 600 power issue?" Tags="&lt;amiga&gt;&lt;power&gt;&lt;amiga-600&gt;" AnswerCount="2" CommentCount="12" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8314" PostTypeId="2" ParentId="8222" CreationDate="2018-11-17T22:56:10.027" Score="1" Body="&lt;p&gt;If you'd like an example of the N64 producing 2D graphics comparable to the SNES, look at the interface of the Action Replay / Gameshark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/IaI31.png&quot; alt=&quot;Gameshark n64&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[&lt;a href=&quot;https://m.youtube.com/watch?v=4tkI6aofPjE]&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://m.youtube.com/watch?v=4tkI6aofPjE]&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It shows a text screen and a scrolling looping background, similar to, say, the menus in &lt;em&gt;Tetris Attack&lt;/em&gt; or &lt;em&gt;Kirby's Dream Course&lt;/em&gt;. I don't know off-hand if these effects are produced by 3d elements (quadrilaterals in space) or 2d hardware acceleration (tilemaps and sprites), but as you can see, the system is able to produce output of that style if instructed to.&lt;/p&gt;&#xA;" OwnerUserId="11194" LastActivityDate="2018-11-17T22:56:10.027" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8315" PostTypeId="2" ParentId="8313" CreationDate="2018-11-18T00:48:36.053" Score="2" Body="&lt;p&gt;Here are a couple of things you could do to try to localize the issue:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;See what the current flowing out of the PSU is during and after power-on.  That will tell you whether it's sensing a short and shutting itself down.  Since you've already determined that there's anomalous resistance between +5V and GND you can probably skip this.&lt;/li&gt;&#xA;&lt;li&gt;Hotspots on the board may indicate shorts.  Power on the the system and use an IR camera to look for hotspots.  If you don't have one, try putting some 90% denatured alcohol on the chips, etc. and power the system on.  The alcohol will evaporate the quickest on any hotspots.&lt;/li&gt;&#xA;&lt;li&gt;With the power unplugged, move along the VDD and ground lines with a multimeter set to resistance mode.  The measured resistance should drop as you near the fault.  Obviously, you won't be able to measure through the solder mask so just choose pins/leads that are along the rails.  Note that diodes may appear as shorts using this method; if you run into this just switch your probes between the two rails.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Somewhat related, Dave at EEVBlog did a &lt;a href=&quot;https://www.youtube.com/watch?v=HKNVIgsbYrA&quot; rel=&quot;nofollow noreferrer&quot;&gt;teardown/attempted repair of an A500&lt;/a&gt; (Youtube) that might be worth a watch.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-11-18T09:28:55.647" LastActivityDate="2018-11-18T09:28:55.647" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8316" PostTypeId="2" ParentId="8291" CreationDate="2018-11-18T01:40:05.913" Score="2" Body="&lt;p&gt;I think using graphical games as a target is possibly stretching your students too far.  Running a game generally requires good emulation not only of the majority of the processor's functions but also a lot of hardware, not least the video circuits (which are often quite complex and in many cases introduce a lot of fiddly timing issues).  If anything doesn't work quite right, the results are likely to be very disappointing.  I'd suggest starting with an easier target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd aim for a system that has a text mode interface, rather than graphical, because such interfaces are usually much simpler, and may have no particular timing requirements that need to be satisfied (i.e. they often work entirely in parallel to the processor's access to memory without affecting the processor at all).  I would also recommend a system that has an integrated machine level monitor program, because this will help debugging programs running on the machine without needing to implement a debugger at the emulation level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A suggestion based on my current personal research project is the Nascom 2 computer.  This is a relatively simple Z80 based machine with text mode hardware that doesn't interact with the CPU (if there is contention, it's resolved in favour of the CPU, meaning that theoretically a handful of pixels in each frame may not be shown if the screen is being accessed at the same time as refresh is occuring, but this is not likely to be particularly noticeable or even frequent, so gives a usable result with very simple hardware).  Precise timing is therefore not likely to be especially difficult or important for this machine.  The machine hardware is both simple and well documented.  Integrated peripherals are a UART (which can be used either for a remote terminal/printer or for cassette loading and saving .... which means no need to actually emulate cassette handling at the audio level, thus saving a good deal of implementation time) and a parallel IO module. The available tools also encourage experimentation in assembly language, which I imagine is a desirable goal for your course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One interesting thing about this machine is that there is a gap in the available emulation options: the &lt;a href=&quot;http://www.nascomhomepage.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;best known web page about the machine&lt;/a&gt; has requested a javascript-based emulator that they can embed on the page, but as yet nobody has provided one.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-11-18T01:40:05.913" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8317" PostTypeId="1" CreationDate="2018-11-18T05:32:24.397" Score="0" ViewCount="287" Body="&lt;p&gt;Robots have a long history from the (not so) simple mechanical creations of &lt;a href=&quot;https://en.wikipedia.org/wiki/Hero_of_Alexandria#Inventions&quot; rel=&quot;nofollow noreferrer&quot;&gt;antiquity&lt;/a&gt; up to today's &lt;a href=&quot;https://www.youtube.com/watch?v=wXxrmussq4E&quot; rel=&quot;nofollow noreferrer&quot;&gt;fully autonomous models&lt;/a&gt;.  The earliest ones could only carry out scripted actions, modern ones adapt to their environments.  Where was this line crossed?  What is the earliest example of an intelligent digital robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The criteria:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Must make decisions&lt;/strong&gt;&lt;br&gt;&#xA;The system must do more than blindly follow prescripted actions.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Digital control system&lt;/strong&gt;&lt;br&gt;&#xA;The control logic must be fully digital (though not necessarily binary).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Must be intelligent&lt;/strong&gt;&lt;br&gt;&#xA;Must use &quot;advanced&quot; methods of decision-making.  This should be something more complex than simply-connected logic gates, lookup tables or &lt;a href=&quot;https://en.wikipedia.org/wiki/Cellular_automaton&quot; rel=&quot;nofollow noreferrer&quot;&gt;cellular automata&lt;/a&gt;&lt;sup&gt;1&lt;/sup&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Must be fully autonomous&lt;/strong&gt;&lt;br&gt;&#xA;Remote controlled vehicles, &lt;a href=&quot;https://en.wikipedia.org/wiki/Remote_manipulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;waldos&lt;/a&gt;, fly-by-wire, and the like are excluded.  Rough guidance (e.g. &quot;go to such and such waypoint&quot; or &quot;flip over each widget passing by on the assembly line&quot;) is permitted but the robot should do more than blindly perform an action.  The control logic can be external to the robot (e.g. on a cable-connected minicomputer) but should take only very limited human input.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Have at least two sensors&lt;/strong&gt;&lt;br&gt;&#xA;An array of sensors (e.g. a CCD camera) counts as multiple sensors.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Must control at least two independent actuators&lt;/strong&gt;&lt;br&gt;&#xA;Simply turning something on and off like a thermostat doesn't count.  A robot with two independently controlled wheel motors does count.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Must be &quot;robot-like&quot;&lt;/strong&gt;&lt;br&gt;&#xA;It must be capable of moving through its environment in some fashion.  This includes autonomous vehicles, industrial robot arms, etc.  It does not include thermostats, &lt;a href=&quot;https://en.wikipedia.org/wiki/Programmable_logic_controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;PLCs&lt;/a&gt; on an assembly line, etc.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Not a simulator&lt;/strong&gt;&lt;br&gt;&#xA;It must do something productive: e.g. move through its environment, identify and pick something up, etc.  Full-motion flight sims and their ilk are excluded.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Not a weapon&lt;/strong&gt;&lt;br&gt;&#xA;No missiles and the like (because I said so).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I suspect the answer is something not much more interesting than a thermostat but who knows.  What was the earliest intelligent digital robot?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Cellular automata might be permitted if you can make a good case for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To potential down-voters: If you feel this question is e.g. too broad, please explain why in the comments below.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="576" LastEditDate="2018-11-26T13:16:39.470" LastActivityDate="2018-11-26T13:16:39.470" Title="What was the first intelligent digital robot?" Tags="&lt;history&gt;&lt;robotics&gt;" AnswerCount="3" CommentCount="15" FavoriteCount="1" ClosedDate="2018-11-27T16:08:34.310" ContentLicense="CC BY-SA 4.0" />
  <row Id="8318" PostTypeId="2" ParentId="8317" CreationDate="2018-11-18T08:46:21.637" Score="5" Body="&lt;p&gt;I think the first robot to meet your criteria is &lt;a href=&quot;http://www.ai.sri.com/shakey/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Shakey the robot&lt;/a&gt;, developed between 1966 and 1972 at the Stanford Research Institute:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;it could make decisions (it included a planner, and could break down complex commands into individual steps on its own);&lt;/li&gt;&#xA;&lt;li&gt;its control logic was digital, running initially on a SDS-940 computer, later replaced by a PDP-10;&lt;/li&gt;&#xA;&lt;li&gt;as mentioned above, it used a planner; it was also an early adopter of route planning, and led to the development of the A* search algorithm;&lt;/li&gt;&#xA;&lt;li&gt;it was autonomous: once given its high-level instructions, it would construct a plan and execute it autonomously, building its own model of its environment;&lt;/li&gt;&#xA;&lt;li&gt;it had multiple sensors, including at least a camera, range finder, and bump sensors;&lt;/li&gt;&#xA;&lt;li&gt;it could navigate, so it must have had at least two independently-controlled motors;&lt;/li&gt;&#xA;&lt;li&gt;it could move through its environment;&lt;/li&gt;&#xA;&lt;li&gt;it was not a simulator;&lt;/li&gt;&#xA;&lt;li&gt;it was not a weapon.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Another interesting pair of robots of similar vintage are &lt;a href=&quot;http://www.aiai.ed.ac.uk/project/freddy/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Freddy and Freddy II&lt;/a&gt;, developed from 1969 to 1976 at Edinburgh University; in particular, Freddy II had an actuator arm which it could use to assemble models from component parts.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-11-18T16:53:56.837" LastActivityDate="2018-11-18T16:53:56.837" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8319" PostTypeId="1" CreationDate="2018-11-18T14:06:11.497" Score="0" ViewCount="350" Body="&lt;p&gt;What was the earliest date a home-computer or home-robot could be interfaced with a  commercially available tv-camera or digital-camera .&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Although I'm asking this question for the purpose of computer-vision, answers such as just for image-editing or aesthetic purposes are ok ( see the solid-state-memory point below ).&lt;/li&gt;&#xA;&lt;li&gt;I'm referring to hobby or home computers or robots, not university or factory.&lt;/li&gt;&#xA;&lt;li&gt;I'm referring to commercially available tv-cameras or digital-cameras, not to home-made cameras .  &lt;/li&gt;&#xA;&lt;li&gt;The image has to be held in any type of solid-state-memory which is part of the computer or robot, not just a live-stream being displayed on screen.&lt;/li&gt;&#xA;&lt;li&gt;Note - robots were often based on home-computer hardware .&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;UPDATE - I intended this question to refer to commercially available tv-cameras or digital-cameras, not to home-made cameras .&lt;/p&gt;&#xA;" OwnerUserId="11197" LastEditorUserId="11197" LastEditDate="2019-06-09T19:00:27.903" LastActivityDate="2019-06-09T19:00:27.903" Title="The earliest a home-computer or home-robot could be interfaced with a commercially available camera?" Tags="&lt;hardware&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8320" PostTypeId="2" ParentId="8319" CreationDate="2018-11-18T14:37:48.667" Score="0" Body="&lt;p&gt;Not related to image capture or processing, but the first &lt;em&gt;actuator&lt;/em&gt; in the home computing market was maybe the &lt;a href=&quot;http://www.computinghistory.org.uk/det/20994/Penman-Robotic-Turtle-Plotter-Printer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Penman Plotter&lt;/em&gt;&lt;/a&gt; of 1984. It &quot;&lt;a href=&quot;https://www.youtube.com/watch?v=mR8enP09RPI&quot; rel=&quot;nofollow noreferrer&quot;&gt;walked&lt;/a&gt;&quot; around a flat surface plotting traces in multiple colours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the time it showed up it was a revolutionary robotic device, and surprisingly accurate with its simplistic technology.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-11-18T14:51:31.677" LastActivityDate="2018-11-18T14:51:31.677" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8321" PostTypeId="2" ParentId="8319" CreationDate="2018-11-18T15:33:11.587" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What was the earliest date a home-computer or home-robot could be interfaced with a tv-camera or digital-camera .&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Depends on the definition of 'interfaced', as a case can easily be made for the 1975 Altair &lt;a href=&quot;https://en.wikipedia.org/wiki/Cromemco_Cyclops&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cyclops&lt;/a&gt; &lt;a href=&quot;http://www.s100computers.com/My%20System%20Pages/Dazzler%20II%20Board/Cyclops_history.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Camera/TV-Dazzler set&lt;/a&gt;, as it combines a TV input with modifiable output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were many more before the Cyclops, but it would hard to make a case about the associated computers as home computers(*1). In the following years an incredible number of video input devices for microcomputers were developed(*2,3). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most notable one may be the &lt;a href=&quot;https://www.msx.org/wiki/Sony_HB-701FD&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sony HB-701FD&lt;/a&gt; MSX computer of 1984, as it is essentially the first consumer grade machine (*4) to include a video digitizer and real-time superimposing by default.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With MSX2 (and later the HBI-V1 module) video capture became a standard &lt;a href=&quot;http://www.msxblue.com/manual/digitization_c.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;OS feature&lt;/a&gt; of MSX.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Robots were often based on home-computers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really - not even nearly a historical fact. Sure, there were some robotic devices &lt;em&gt;for&lt;/em&gt; home computers, robots themselves were either based on distinct microprocessor systems or microcontrollers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, a case could be made even against S-100 as being mostly business systems, and the genuine home computer not being invented until the TI99 and Atari 400. Then again, its founding system, the Altair, was definitely targeted to hobbyists, so maybe we just read home computer as hobby computer and go along with that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Just check this blog-post showing &lt;a href=&quot;http://blog.retro-link.com/2013/02/a-quartet-of-c64-video-digitizers.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;four different digitizers for the C64&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Including one by yours truly in 1983 - not for the C64, rather targeted at a professional audience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Upper end that is - with some variations targeted at professional video/small TV stations.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-11-26T11:34:35.803" LastActivityDate="2018-11-26T11:34:35.803" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8322" PostTypeId="2" ParentId="8319" CreationDate="2018-11-18T16:16:16.580" Score="1" Body="&lt;p&gt;I now found a camera from '83     &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.digicammuseum.com/en/cameras/item/microneye-camera&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.digicammuseum.com/en/cameras/item/microneye-camera&lt;/a&gt;     &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MicronEye Camera from '83&lt;br&gt;&#xA;- Resolution 256x128&lt;br&gt;&#xA;- The two versions, could be used with many popular home-computers    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This may mean that people back then may have tried projects such as the following thread -&lt;br&gt;&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6047/didnt-people-back-in-the-day-ever-try-object-tracking-combined-with-rc?rq=1&quot;&gt;Didn&amp;#39;t people &amp;#39;back in the day&amp;#39;, ever try &amp;#39;Object-Tracking&amp;#39;( combined with RC ), via their retrocomputers, as &amp;#39;Home-Projects&amp;#39;&lt;/a&gt;   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This one would surely be the first one designed more for the home / hobby customers, if anyone finds an earlier one, please post it .   &lt;/p&gt;&#xA;" OwnerUserId="11197" LastEditorUserId="11197" LastEditDate="2018-11-25T19:35:15.967" LastActivityDate="2018-11-25T19:35:15.967" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8323" PostTypeId="2" ParentId="8291" CreationDate="2018-11-18T18:39:58.487" Score="6" Body="&lt;p&gt;The Digital PDP-8 is a very simple architecture that can be easy to write an emulator for. Some reasons for this include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Only 8 basic instructions&lt;/li&gt;&#xA;&lt;li&gt;No video interface etc. to emulate, only terminal I/O&lt;/li&gt;&#xA;&lt;li&gt;No need for cycle accuracy, the actual series of machines themselves didn't guarantee the same behaviour across the different implementations&lt;/li&gt;&#xA;&lt;li&gt;Can start with a simple setup (e.g. a 4Kword machine running FOCAL-69), and gradually make the emulator more complex (e.g. a 32Kword machine with extended arithmetic, running OS/8 from an RK05 disk)&lt;/li&gt;&#xA;&lt;li&gt;Lots of manuals available online&lt;/li&gt;&#xA;&lt;li&gt;The MAINDEC diagnostics and their instructions are available online, which can be used to test that the emulation is working correctly&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This might not cover all your requirements, e.g. memory-mapped I/O, but it certainly includes things like instruction decoding and addressing modes. Much of the documentation goes right down to the basic hardware level which might be appropriate for an EE course. &lt;/p&gt;&#xA;" OwnerUserId="10678" LastActivityDate="2018-11-18T18:39:58.487" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8324" PostTypeId="2" ParentId="8291" CreationDate="2018-11-18T23:34:50.493" Score="7" Body="&lt;p&gt;May I suggest taking a look at some early arcade games? Specifically these two 8080/Z80 platforms:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.system16.com/hardware.php?id=594&quot; rel=&quot;noreferrer&quot;&gt;Midway 8080&lt;/a&gt; - Developed in 1975 and powers &lt;a href=&quot;https://en.wikipedia.org/wiki/Space_Invaders&quot; rel=&quot;noreferrer&quot;&gt;Space Invaders&lt;/a&gt;. Uses a 256x224x1 bit black-and-white frame buffer in RAM.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://segaretro.org/Sega_VIC_Dual&quot; rel=&quot;noreferrer&quot;&gt;VIC Dual&lt;/a&gt; - Sega/Gremlin's platform designed in 1977 -- the best known game is &lt;a href=&quot;https://www.arcade-museum.com/game_detail.php?game_id=7286&quot; rel=&quot;noreferrer&quot;&gt;Carnival&lt;/a&gt;. The video is a 32x28 array of 8x8 characters (all in RAM) and can support a simple color palette, mapped to a PROM.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These are very simple to emulate once you get the Z80 emulation working. There are no funny scanline tricks or weird CPU wait states. Player controls are available via bitmapped I/O ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can play with these platforms interactively on &lt;a href=&quot;http://8bitworkshop.com/&quot; rel=&quot;noreferrer&quot;&gt;http://8bitworkshop.com/&lt;/a&gt; (Full disclosure: I run this site and am the author of the books linked on the site which describe these platforms)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple ][ is also a good choice for a 6502-based platform, although the video subsystem is more complicated than in the two arcade platforms.&lt;/p&gt;&#xA;" OwnerUserId="7827" LastActivityDate="2018-11-18T23:34:50.493" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8325" PostTypeId="2" ParentId="8317" CreationDate="2018-11-18T23:40:31.787" Score="2" Body="&lt;p&gt;The word &quot;intelligent&quot; makes this a philosophical question. Here's one possible answer: scientists mapped out the brain of a worm and in 2014 they recreated it digitally and &lt;a href=&quot;https://singularityhub.com/2014/12/15/worm-brain-simulation-drives-lego-robot/amp&quot; rel=&quot;nofollow noreferrer&quot;&gt;put it into a fully autonomous robot&lt;/a&gt; as part of the OpenWorm project. They didn't even have to teach it or give it any instructions.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2018-11-18T23:40:31.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8326" PostTypeId="2" ParentId="8317" CreationDate="2018-11-19T01:03:36.637" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8318/6659&quot;&gt;Stephen's answer&lt;/a&gt; is already a good good one, at least when viewed by today's nomenclature. As usual, there's a grey area before such a clear point, one somewhere between the first, completely analogue versions of &lt;a href=&quot;https://en.wikipedia.org/wiki/Elmer_and_Elsie_(robots)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Elmer and Elsie&lt;/a&gt; or &lt;a href=&quot;http://cyberneticzoo.com/cyberneticanimals/1949-wieners-moth-wiener-wiesner-singleton/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiener's Palomilla&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Shakey_the_robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;Shakey&lt;/a&gt;, the modern style robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some good candidates may be &quot;&lt;a href=&quot;http://cyberneticzoo.com/cyberneticanimals/1954-la-tortue-tortoise-amouriq-french/&quot; rel=&quot;nofollow noreferrer&quot;&gt;La Tortue Cybernetique&lt;/a&gt;&quot; of 1951 by Paul-Alain or Zemanek's (*1) &quot;&lt;a href=&quot;http://cyberneticzoo.com/cyberneticanimals/1954-vienna-turtle-eichler-zemanek-austrian/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vienna Turtle&lt;/a&gt;&quot; of 1954, as both control their machinery with relays, and thus binary decisions. Both (and Wiener as well) are influenced by W. Grey Walter's Elmer and Elsie turtles, but changed the implementation away from completely analogue circuitry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short, it may be a good idea to lighten up this grey area to find a satisfying answer.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - &lt;a href=&quot;https://en.wikipedia.org/wiki/Heinz_Zemanek&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zemanek&lt;/a&gt; is a quite important figure in computing history, not least through his lead of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Mail%C3%BCfterl&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mailüfterl&lt;/a&gt; project.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-11-26T11:32:58.237" LastActivityDate="2018-11-26T11:32:58.237" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8327" PostTypeId="2" ParentId="6162" CreationDate="2018-11-19T06:29:53.850" Score="3" Body="&lt;p&gt;Just a quick supplement to the other answers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PC does &lt;em&gt;not&lt;/em&gt; get pushed automatically.  When an interrupt happens, the processor operates in a special mode where instructions are fetched but the PC stays the same as before the interrupt.  If you want the PC saved (which is not always necessary), you should use a JSR instruction to explicitly do that.&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2018-11-19T07:05:43.457" LastActivityDate="2018-11-19T07:05:43.457" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8328" PostTypeId="1" AcceptedAnswerId="8333" CreationDate="2018-11-19T07:34:40.413" Score="34" ViewCount="8869" Body="&lt;p&gt;Back in the days when COMECON (RVHP) was cloning digital ICs usually the first wave of such ICs were in a ceramic package with a glass window (similar to EPROM) to check for bugs and stuff while used. Some chips were very sensitive to light and the window was usually covered by a sticker (also similar to EPROM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is first image of similar package I found in Google images taken from &lt;a href=&quot;https://global.kyocera.com/prdct/semicon/semi/std_pkg/&quot; rel=&quot;noreferrer&quot;&gt;Kyocera: Standard Ceramic Packages&lt;/a&gt; :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PWQfB.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PWQfB.png&quot; alt=&quot;IC package with glass&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were rumors the DRAM chips like MHB4116 (16384x1bit clone of &lt;a href=&quot;https://console5.com/techwiki/images/8/85/MK4116.pdf&quot; rel=&quot;noreferrer&quot;&gt;MK4116&lt;/a&gt;) in such a package could be used as simple BW camera (similar to CCD as they are just parasitic MOS capacitors and incoming light can charge them to saturation or dissipate them more quickly). Back in the days having a camera interfaced with a computer was unheard of due to lack of interfaces, ICs and expensiveness. I was trying to get my hands on some chips like that myself but was not lucky (I got just a few Russian CPUs Multiplexors etc but no DRAM)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I am curious if someone managed to do this and what parameters the camera had:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;resolution (I assume fairly limited due to speed of control system theoretical max is 128x128 pixels)&lt;/li&gt;&#xA;&lt;li&gt;color depth (I really think just BW or few shades of gray)&lt;/li&gt;&#xA;&lt;li&gt;fps ?&lt;/li&gt;&#xA;&lt;li&gt;what was the interface and which computer (I assume Z80 or 8080 based)&lt;/li&gt;&#xA;&lt;li&gt;also the control circuitry could be interesting&lt;/li&gt;&#xA;&lt;li&gt;how was the blanking done (physical shutter or just writing zero was enough to discharge the cell?)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;btw. just to spit of my frustration that I did not found any suitable DRAM chip back in the day for this I managed to do at least a Scanner instead ... and it sort of fired up my carrier ... that I am doing still now...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-11-21T21:50:33.033" LastActivityDate="2019-05-28T11:12:33.467" Title="Using DRAM as a camera sensor?" Tags="&lt;hardware&gt;&lt;graphics&gt;&lt;4116&gt;&lt;dram&gt;" AnswerCount="6" CommentCount="14" FavoriteCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8329" PostTypeId="5" CreationDate="2018-11-19T07:36:58.763" Score="0" Body="&lt;p&gt;famous 16348x1 bit DRAM chip used in early computers&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://console5.com/techwiki/images/8/85/MK4116.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-11-19T09:13:15.737" LastActivityDate="2018-11-19T09:13:15.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8330" PostTypeId="4" CreationDate="2018-11-19T07:36:58.763" Score="0" Body="famous 16348x1 bit DRAM chip used in early computers" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-11-19T09:13:00.957" LastActivityDate="2018-11-19T09:13:00.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8331" PostTypeId="5" CreationDate="2018-11-19T07:39:17.957" Score="0" Body="&lt;p&gt;DRAM Dynamic Random Access Memory&lt;/p&gt;&#xA;&#xA;&lt;p&gt;first mass capacity memory available for computers. It uses parasitic capacity of a MOS to store information. It needs periodic refresh not to lose stored data.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-11-19T10:50:24.627" LastActivityDate="2018-11-19T10:50:24.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8332" PostTypeId="4" CreationDate="2018-11-19T07:39:17.957" Score="0" Body="DRAM Dynamic Random Access Memory" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-11-19T09:13:06.137" LastActivityDate="2018-11-19T09:13:06.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8333" PostTypeId="2" ParentId="8328" CreationDate="2018-11-19T08:52:48.297" Score="43" Body="&lt;p&gt;That sounds a lot like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cromemco_Cyclops&quot; rel=&quot;noreferrer&quot;&gt;Cromemco Cyclops&lt;/a&gt;.  Released in 1975, it used a modified&lt;sup&gt;1&lt;/sup&gt; MOS 1kbit DRAM&lt;sup&gt;2&lt;/sup&gt; to capture a 32×32 black and white or greyscale image.  The memory cells were initially set to all &lt;code&gt;1&lt;/code&gt;s.  As they were exposed to light they would progressively switch to &lt;code&gt;0&lt;/code&gt;s; the more light hitting a cell, the faster the transition&lt;sup&gt;4&lt;/sup&gt;.  By making multiple read passes, a greyscale image could be read.  The camera was sold with a case, lens, etc. along with controller cards for use in an S-100 bus computer.  Given that the system was comprised entirely of off-the-shelf parts (with only one minor modification) and included complete source code it would have been trivial to clone both in the Eastern Bloc and elsewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Modified meaning replacing the opaque die cover with a transparent one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; The same technique would probably also work fine with higher density &lt;em&gt;non-buffered&lt;/em&gt;&lt;sup&gt;3&lt;/sup&gt; DRAMs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;3&lt;/sup&gt; Thanks to Raffzahn for pointing that out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;4&lt;/sup&gt; This results in a negative image when it is read out: &lt;code&gt;0&lt;/code&gt;s in the bright areas, &lt;code&gt;1&lt;/code&gt;s in the dark portions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The image sensor chip:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zXGBM.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zXGBM.jpg&quot; alt=&quot;Cromemco Cyclops sensor chip&quot;&gt;&lt;/a&gt;&#xA;Source: Wikimedia Commons (Public domain)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reading through &lt;a href=&quot;https://web.archive.org/web/20150924025020/http://www.hartetechnologies.com/manuals/Cromemco/Cromemco%2088%20ACC%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;the camera manual&lt;/a&gt; it seems the camera itself comprised of a case, lens, and 3 circuit boards.  The front board had the image sensor, a sequential address generator for reading out the values, and two bias LEDs used to improve sensitivity in low-light situations.  The second board contained support circuitry, and the third board contained the power supply and IO transceiver.  Communication with the camera was over a pair of differential lines (one input pair and one output pair).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no mention of frame rate in the camera manual, however in the interface manual (see below) there is a mention of a clock signal (1µs per pixel) and initialization time (5µs for regular capture, 17µs for capture with the bias LEDs active); it took as long to reset the memory cells as it did to read a single monochrome frame.  Ignoring the setup time, the capture time for a single monochrome frame is 1024µs or ~976 frames per second.  For full bit-depth greyscale images the sensor would be read 15 times in 15.36ms resulting in a maximum frame rate of ~65 frames per second (16.39ms or ~61 frames per second including initialization).  The interface supported four exposure settings which modified the capture rate&lt;sup&gt;5&lt;/sup&gt;; these resulted in greyscale frame rates of ~61, ~22.5, ~14, and ~10 frames per second.  15 reads per greyscale frame means the final, processed images were probably 4 bits per pixel (2&lt;sup&gt;4&lt;/sup&gt; = 16).  I'd have to read the camera and controller schematics and driver code more closely to be sure about any of the above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://web.archive.org/web/20150924025022/http://www.hartetechnologies.com/manuals/Cromemco/Cromemco%2088%20CCC%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;computer interface&lt;/a&gt; used a pair of cards that plugged into an i8080-based S-100 bus system.  These cards consisted almost entirely of 74-series ICs.  Each card set could control up to 16 cameras.  DMA was used to transfer images to the controlling system's RAM and an interrupt could be generated for each captured frame.  Use of this card set was optional; the camera manual (mentioned above) describes the interface in detail and gives an example of displaying the image directly on an oscilloscope.  The sample code provided is for an i8080-based system but I see no reason why the card set couldn't be adapted to S-100 systems using different CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of the above-linked documents include complete schematics, parts lists, and IO protocol descriptions.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;5&lt;/sup&gt; By adding a delay of 0, 2, 4, or 6 ms between each complete read of the memory (i.e. every 1024 bit reads).&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-11-20T11:19:46.780" LastActivityDate="2018-11-20T11:19:46.780" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8334" PostTypeId="1" AcceptedAnswerId="8335" CreationDate="2018-11-19T09:04:09.090" Score="18" ViewCount="2847" Body="&lt;p&gt;A lot of older (ceramic) ICs have a gold-plated line extending from the die cover to the edge of the package.  Did this serve a practical purpose or was it just bling?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that it might be what's left of the lead frame leading to the pad under the soldered die cover.  It would hold the pad in position while the package was molded.  Similarly, the gold plating on the pin-1 notch in the photo below is part of the trimmed lead frame.  This is just a hypothesis; can anyone confirm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/T4Mph.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/T4Mph.jpg&quot; alt=&quot;XC68000 DIP package&quot;&gt;&lt;/a&gt;&#xA;Source: Wikipedia/Arnold Reinhold (CC/A-SA)&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-11-19T12:59:51.943" LastActivityDate="2018-11-20T08:44:14.170" Title="Reason for gold lines on old ICs?" Tags="&lt;hardware&gt;&lt;chip&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8335" PostTypeId="2" ParentId="8334" CreationDate="2018-11-19T09:21:23.150" Score="20" Body="&lt;p&gt;It's a ground wire. The way ICs were manufactured back then had the metal cover placed over the die as the last step, and grounding it helps protect the die from static shock and interference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look closely you can see the solder that bonds the strip to the die cover. If you check continuity you will find that both are connected to the IC's ground plane and ground pin(s).&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-11-19T09:21:23.150" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="8336" PostTypeId="2" ParentId="3036" CreationDate="2018-11-19T09:29:19.750" Score="3" Body="&lt;p&gt;As others have explained this pin allows the 68000 to select an individual byte to read/write rather than a 16 bit word. However, they haven't explained why it was designed this way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 68k was designed for a 16 bit bus, with 16 bit RAM and ROM and peripherals. Byte addressing is not used with such a system, the smallest addressing unit is a 16 bit word. If the 68k wants to read/write a byte it handles it internally, e.g. reading a word and discarding 8 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This technique is problematic for 8 bit peripherals. A read operation can have consequences as some parts alter their state on a read, e.g. a FIFO, so having to read an unrelated register or do a read-modify-write cycle would make the 68000 incompatible with them. The solution was the byte select pin, which acts as an additional address pin for 8 bit devices on the bus.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-11-19T09:29:19.750" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8337" PostTypeId="2" ParentId="8328" CreationDate="2018-11-19T14:23:40.427" Score="13" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8333/6659&quot;&gt;Alex Hajnal's answer&lt;/a&gt; pretty well describes what I believe is the first and eventually only commercial available camera that directly used RAM chips, the Cyclops (*1). It started out as a hobby level project, about the same time chip manufacturers did build the first dedicated CCD camera elements. CCDs were like the super hype of the 70s - at least to electronic freaks. For chip manufacturers, it wasn't a big deal to add secondary circuitry (like counters and DAC) directly on chip, and it does make a lot sense to layout the die to support the purpose, doesn't it? DRAMs are &lt;em&gt;not&lt;/em&gt; laid out that way, but to simplify structure and speed up access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CCD effect was discovered 1969 independent of DRAM development and based on the implementation of 1960s bucket based delay lines in silicon. The later DRAM development was based around the same idea of using a capacitor to hold a charge. Since silicon is prone to photon reception, the use as detectors is quite obvious.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An important part is that the whole setup only works if the analogue structure of the storage cell (capacitor) is directly available at the output pin, not hidden by digital line drivers. This is only true for some very early DRAM circuits, as later (including 4116) do use buffering drivers. Also their organization is no longer as a simple square matrix, like with 1 KiBit DRAM, but organized as at least two different blocks with sense amplifiers and decoders in between, thus making them in addition unusable for camera purpose (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20180408075309/https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-mostek-mk4096-4kilobit-dram&quot; rel=&quot;noreferrer&quot;&gt;Mostek's MK4096&lt;/a&gt; 4 KiBit RAM is about the last generation with only a single RAM cell array organized as 64x64 bits (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short, there is no luck for you to make it happen with a 4116. At least not the same way as the Cyclops. A pure B&amp;amp;W may still work with a lot of fine tuning.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Here is a &lt;a href=&quot;https://web.archive.org/web/20181004233237/http://www.s100computers.com/My%20System%20Pages/Dazzler%20II%20Board/Cyclops_history.pdf&quot; rel=&quot;noreferrer&quot;&gt;nice timeline and description&lt;/a&gt; of the basic workings in non-electronicsese.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - A picture where only the upper and lower 40% are captured isn't very useful either - and using only one side would result in only about 25% of all cells used (*4), thus making a 16 KiBit RAM-CCD no more useful than a 1 KiB one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is BTW also the reason why chip designers used a physical structure of two blocks with 128x64 cells each - thus the wiring, to reach each cell, for a 16 KiBit RAM wasn't more complex and space consuming than for a 4 KiBit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The 64x64 array isn't as square as it seems, but almost 16:9 ... did they plan ahead for HDTV?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - 31% with a 4:3 picture format. Then again, with some lens tricks the entire half might be used - though 128x64 is a weird resolution, isn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7347" LastEditDate="2018-11-19T16:59:17.580" LastActivityDate="2018-11-19T16:59:17.580" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8338" PostTypeId="2" ParentId="8291" CreationDate="2018-11-19T19:42:41.733" Score="3" Body="&lt;p&gt;Supposing it's any contribution, these are my direct notes on the machines for which I have written emulators, in approximate launch chronological order, hopefully to offer some colour on file formats, etc:&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Atari 2600&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The distinguishing feature of the Atari 2600 is the synergy between processor and graphics output; games are implemented a real-time function that supplies graphical components to the video output as the raster runs. So I think this is a bad choice for the purpose stated — the real hard work of writing a 2600 emulator is the timing and interplay outside the microprocessor.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Apple II&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Relatively simple hardware, but very nuanced, with multiple graphics modes, and you need to edge towards teaching NTSC video to be able to decode its colour output. Emulating the Disk II is also pretty much a must, but that's a bit of a quest in itself as the most common file formats expect you to provide an Apple GCR encoder.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;ZX80/81&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Also probably overly-complicated for the stated purpose, the central conceit is repurposing the CPU's refresh cycle and a subset of instruction fetches in order to scan video. If you chose not to reimplement that mechanism like the original, you'd end up with only the ROM-default text mode.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Commodore Vic-20&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This is a plain bitmapped machine with a simple processor in the 6502 and a decent quantity of games, some of which were supplied on cartridge, absolving you from the need to emulate a tape or disk drive. The only fly in the ointment is its 6522s; these are combination timer/shifter/input/output chips with a whole bunch of quirks. But a neat advantage of the Vic-20 is that it will boot as far as the BASIC prompt without functioning 6522s, and BASIC itself will function with only the timers of the 6522 implemented, even inexactly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its short time as the market leader before the arrival of the C64 also limits the number of titles that make advanced use of the hardware — there are contemporaneous examples of raster racing such as the Imagic titles, but they're in the minority.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The file formats that data is preserved in are a mess, but limiting yourself to cartridge support and being careful to use only those titles that were supplied on cartridge should obviate that problem.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;ZX Spectrum&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Covered elsewhere; I think a good choice. Especially if you stick to the snapshot file formats.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Oric 1/Atmos&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Covered elsewhere; a decent choice, but there's another of those pesky 6522s in there. Most games are available on tape, you'll need to support all that.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Acorn Electron&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Bitmapped, a 6502 plus relatively simple external logic, but six different graphics modes and timing would be a hassle — the cost of each cycle is a function of the area being accessed (ROM versus RAM), the graphics mode (40-column versus 80-column modes) and possibly the current graphics output state (80-column modes block RAM accesses during the pixel region; 40-column modes don't). But you can just model it as a 1Mhz machine for most games, and mostly get away with a line-centric version of graphics output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a slender number of games available on ROM but luckily the tape hardware will mostly permit a very low-quality emulation: it's of the ilk that raises an interrupt upon byte receipt, with only two titles that I can think of doing deeper introspection than that.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Amstrad CPC&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Probably one to avoid for the stated purpose — it has a 6845 CRTC, which makes for very configurable graphics output and therefore lots of titles that race the raster. Disk usage was also fairly pervasive, but its 8272 disk controller is a whole additional level of headaches compared to the WD1770 you'll often see elsewhere.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;MSX and/or ColecoVision/SG1000&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Different sound chips, same CPU and video. I actually think you can get pretty far ignoring timing interplay because the video chip keeps its own RAM at arm's length. But it's tiles and sprites, and four different graphics modes, for probably too substantial an undertaking for a microprocessing course.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Master System&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Technically an enhanced SG1000, being everything that machine does plus an extra graphics mode, but the extra graphics mode is so much better than the others that only one title uses anything else. So it actually simplifies things somewhat if you're happy within the realm of mostly ignoring timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you're still talking about factoring in sprite priorities, checking for per-pixel collisions, etc. Probably too much.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Footnote: cheating with tape access&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;For a bunch of the home computers mentioned above, you can actually skip tape emulation for anything that is encoded in the default ROM format by just inserting an appropriate trap into the system ROM and spooling in from the source file. Many, but not all, titles rely entirely on the built-in ROM for tape IO so that can get many titles loaded with no real attempt at hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In every case it's a bodge-job hack, but it'll do if that side of emulation isn't important to you — you'd rather just remove it from the equation and ignore what doesn't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Vic-20:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if the program counter gets to 0xf7b2, copy the next tape header to the location indicated by b3:b2, zero out 0x90 and 0x93, and continue from 0xf7b5 (as you're avoid a JSR);&lt;/li&gt;&#xA;&lt;li&gt;trap 0xf90b, check for X = 0xe, if so then get the next tape data body and write to emulated memory from c2:c1 but no further than af:ae regardless of the size of the body, then set bit 6 at 0x90, clear the carry and interrupt flags, and continue from 0xfccf.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Oric:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For ROM 1.0, trap the PC at address 0xe630. For 1.1, watch for address 0xe6c9.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Upon catching that, load A with the next byte from the tape, and set the zero flag according to its value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then RTS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also a flag at 0x67 on the original ROM, or 0x24d which discerns between the machine's fast and slow tape encodings, but the usual tape file format just has the decoded bytes so for a quick and dirty emulation don't worry about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Electron:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Install NOPs at 0xf4e5, 0xf6de, 0xf6fa and 0xfa51 to disable the tape branches. The OS will now try to load tape data as if it were on a serial ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cat the PC at 0xf0a8 and check that the X register is equal to 14 and the value at address 0x247 is zero. Then you'll know that the ROM is trying to fetch the next byte from tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Put the next byte in Y, set A to 0 and RTS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The primary tape file format mostly allows you to spool bytes directly from the file (after some trivial chunk navigation, and via ZLib or another GZ decompressor, though you could just gunzip in advance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;ZX Spectrum:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This one is transcribed from very old notes; it might be worth confirming against a ROM disassembly)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trap the PC reaching 0x056c in the 48kb ROM. Grab the next block from tape (if you use a TAP file, you'll be directly given it; I'd argue you shouldn't bother trying to support TZX in this sort of project).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If its length is less than the value in DE, reset carry and return.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare the first byte of the block to the value of B. If they don't match, reset carry and return.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise spool the first DE bytes you did get to the address pointed to by IX and set the low bit of C and set carry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then either directly perform a RET or else just skip the PC ahead to 0x05e2, which is the RET that normally ends tape loading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 128kb machines segue into the 48kb ROM for tape loading so the same hack applies subject to checking what's paged.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-11-19T21:57:05.817" LastActivityDate="2018-11-19T21:57:05.817" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8339" PostTypeId="1" AcceptedAnswerId="8341" CreationDate="2018-11-19T20:36:19.707" Score="2" ViewCount="581" Body="&lt;p&gt;I was wondering if there are any significant differences between a plain old ARM7TDMI processor and the ARM7TDMI the GBA console uses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interested in learning to program a GBA or an ARM7 type processor, and if there are differences, it would change the compiler and equipment I need to use.&lt;/p&gt;&#xA;" OwnerDisplayName="user11207" LastActivityDate="2018-11-20T09:00:54.447" Title="Differences between normal ARM7TDMI and ARM7TDMI used in GBA" Tags="&lt;arm&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ClosedDate="2018-11-20T11:43:23.550" ContentLicense="CC BY-SA 4.0" />
  <row Id="8340" PostTypeId="2" ParentId="8339" CreationDate="2018-11-19T20:55:17.720" Score="1" Body="&lt;p&gt;I believe there are no differences whatsoever; it's a little hand-wavey but e.g. &lt;a href=&quot;http://problemkaputt.de/gbatek.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;the GBATEK document&lt;/a&gt; (in that link reformatted into NoCash style) appears to describe an ordinary ARM7TDMI.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-11-19T20:55:17.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8341" PostTypeId="2" ParentId="8339" CreationDate="2018-11-19T21:11:44.227" Score="4" Body="&lt;p&gt;Well, if it's an ARM7TDMI, then it's an ARM7TDMI - what else?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ARM7 - &lt;a href=&quot;https://en.wikipedia.org/wiki/ARM_architecture#32-bit_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;32 Bit base&lt;/a&gt; architecture with &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;T - &lt;a href=&quot;https://en.wikipedia.org/wiki/ARM_architecture#Thumb&quot; rel=&quot;nofollow noreferrer&quot;&gt;Thumb instruction set&lt;/a&gt;, therefore an ARMv4T micro architecture, so no more 26 bit addressing.&lt;/li&gt;&#xA;&lt;li&gt;D - Debug extension (JTAG-Port)&lt;/li&gt;&#xA;&lt;li&gt;M - Fast multiplier&lt;/li&gt;&#xA;&lt;li&gt;I - enhanced ICE support&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That's what ARM sold and Nintendo bought. Or more precisely, they bought an ARM7TDMI-S core, the synthesizable version, one that can be integrated with other parts into a single chip. And that's what they did :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good one stop shops for information to start might be&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.gbadev.org/docs.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;GBADEV.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://problemkaputt.de/gbatek.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;GBATEK&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For more information RC might not be the perfect forum, as it's still actual technology.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-11-20T09:00:54.447" LastActivityDate="2018-11-20T09:00:54.447" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8342" PostTypeId="2" ParentId="8328" CreationDate="2018-11-19T21:38:10.907" Score="8" Body="&lt;p&gt;&lt;strong&gt;We tried it in the lab, circa 1984.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I worked with a hardware team and somewhere they'd read an article, the gist of which was something like:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;write all 1s to the DRAM&lt;/li&gt;&#xA;&lt;li&gt;ensure you don't have any hardware dynamic RAM refresh going on&lt;/li&gt;&#xA;&lt;li&gt;expose it for a given period&lt;/li&gt;&#xA;&lt;li&gt;read the decayed bits back&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I believe that we ended up having to write 1s or 0s depending on the bit position as some of the RAM bits were inverted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sadly we never tried it with a lens, but I definitely remember we showed it was light-sensitive, and fiddly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We did it on a single board computer our company designed, which was a 160 x 100 mm, 6809 CPU with 64 Kbyte DRAM.  Out of cost-engineering, there was no dynamic RAM refresh circuitry.  Instead we used a non-maskable interrupt to run through enough addresses to keep the DRAM refreshed; from memory it was something like 64 or 128; this made it easy to do the test.  We would have written a special test program in EEPROM, with the NMI generator disbled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe with did it with US-made milspec chips: I certainly remember we had very few chips in ceramic packaging other than EEPROM and the occasional CPU.  The chips didn't have a window: we ground off the top and the chip was open to the air.&lt;/p&gt;&#xA;" OwnerUserId="11208" LastEditorUserId="11208" LastEditDate="2018-11-20T11:39:01.703" LastActivityDate="2018-11-20T11:39:01.703" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8343" PostTypeId="2" ParentId="8276" CreationDate="2018-11-20T00:26:09.220" Score="1" Body="&lt;p&gt;Per an anonymous commenter, the author (Simon Carter) appears to be on Twitter as &lt;a href=&quot;https://twitter.com/bbbscarter&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;@bbbscarter&lt;/code&gt;&lt;/a&gt; with a blog at &lt;a href=&quot;https://bbbscarter.wordpress.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;bbbscarter.wordpress.com&lt;/a&gt;  The person who did the graphics (Dene Carter) also appears to be on Twitter as &lt;a href=&quot;https://twitter.com/Fluttermind&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;@Fluttermind&lt;/code&gt;&lt;/a&gt; with a website at &lt;a href=&quot;http://www.fluttermind.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;www.fluttermind.com&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7347" LastActivityDate="2018-11-20T00:26:09.220" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8344" PostTypeId="1" AcceptedAnswerId="8345" CreationDate="2018-11-20T03:28:19.907" Score="44" ViewCount="7108" Body="&lt;p&gt;As is well-known, Microsoft's negotiations with IBM to deliver PC-DOS 1.0 with the original IBM PC resulted in:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;IBM licensing the OS from Microsoft, as opposed to purchasing it outright.&lt;/li&gt;&#xA;&lt;li&gt;Microsoft retaining the rights to license PC-DOS to others.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The fact that PC-DOS (e.g. MS-DOS) would be licensed to IBM's hardware competitors by Bill Gates famously allowed the PC clone makers to overwhelm IBM, effectively taking over the PC market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen the story told by several historical commentators that this was somehow a grand, &quot;4D Chess move&quot;, by Bill Gates, as he foresaw the huge opportunity for DOS if he retained all the rights and non-exclusivity for IBM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also know from other historical commentators that IBM's PC team (known as &quot;Project Chess&quot;) was committed to outsourcing everything they reasonably could with the PC to ensure they got it to market quickly and in spite of internal IBM bureaucracy and politics. So, this could have factored into the negotiation too, and would fit with other decisions IBM made at the time re: PC hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the question is whether the licensing arrangement was IBM's idea, or was it Bill Gates' foresight to ensure MS-DOS dominance no matter the hardware platform that prevailed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Conflicting sources seem likely, so I think &lt;strong&gt;extra weight for sources privy to the negotiation&lt;/strong&gt; is appropriate.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-11-20T14:54:51.667" LastActivityDate="2019-11-26T20:44:00.193" Title="Did IBM encourage Bill Gates to retain the rights over PC-DOS?" Tags="&lt;history&gt;&lt;ms-dos&gt;&lt;ibm-pc&gt;&lt;ibm&gt;&lt;microsoft&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8345" PostTypeId="2" ParentId="8344" CreationDate="2018-11-20T04:29:41.580" Score="50" Body="&lt;h1&gt;TL;DR: It was IBM's idea.&lt;/h1&gt;&#xA;&lt;p&gt;IBM never intended to buy any of the software they acquired for the PC - and MS never intended to supply any OS beside Xenix.&lt;/p&gt;&#xA;&lt;p&gt;But MS (Paul Allen) soon recognized the potential business and acted accordingly.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;The Long Read&lt;/h1&gt;&#xA;&lt;p&gt;IBM had no interest whatsoever in setting up a basic software development for the PC. The strategy was to licence as many off-the-shelf products as possible, to level the playing field with existing competition - mostly seen as the Apple II and CP/M world - and give the PC a comparable start. Keep in mind, that, at the time, the PC group wasn't any big scale operation, but rather a small project trying the market against much internal resistance.&lt;/p&gt;&#xA;&lt;p&gt;The main marketing idea was to premiere the PC as an all around supported middle of the road product, fully developed, covering everything others had, including support by major brand name products. The PC should be recognised as an established force instead of a newcomer.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;It was all about speed, cost and a complete offering.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;They neither had the manpower nor the money to make everything on their own, so they went full licensing. When licensing, there are basically three strategies:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Buying the product at whole&lt;/li&gt;&#xA;&lt;li&gt;Buying an unlimited, one time license&lt;/li&gt;&#xA;&lt;li&gt;Licensing it on a royalty scheme&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The first would have meant that IBM would need to set up the capacity to maintain and further develop the product. Not exactly what the rather small team with an unclear future could do. Also it's the most costly solution.&lt;/p&gt;&#xA;&lt;p&gt;The third would have kept them reliant on continuous support by the manufacturer and complicate calculations, while at the same time keep investment small.&lt;/p&gt;&#xA;&lt;p&gt;Their choice for the second was to keep risk small and investment definable.&lt;/p&gt;&#xA;&lt;p&gt;This strategy created also the only caveat they placed on the whole process: Whoever wanted to license his product for the PC at startup had to sign an NDA to abstain from any, even the slightest comment about the project and his or IBM's involvement. It's often said that this was what killed CP/M as OS choice, as they didn't want to sign up the NDA at first. The real factor was that Kildall insisted on royalty based licensing.&lt;/p&gt;&#xA;&lt;p&gt;In fact, IBM was almost ready to bite and go that way, as CP/M was de facto the OS for next to every software package they intended to use, with no viable alternative in sight. And that's where Microsoft joined the picture.&lt;/p&gt;&#xA;&lt;p&gt;Microsoft had no intention to go into the OS market (*1). Their business was languages. They were selling for years successfully CP/M with their SoftCards and happy about the deal. Continuing their language business with the PC - even better, without the investment to do SoftCards and reselling CP/M, was all they wanted.&lt;/p&gt;&#xA;&lt;p&gt;Before the first machines where handed out, IBM did only share &lt;em&gt;some&lt;/em&gt; specs, including CPU Type, RAM configurations, and some BIOS information. Next to all developers did start working on 8086/88 S100 bus systems and working on BIOS level, or using some in-house done CP/M alike - or CP/M-86 as well, as it was available already about 8 months before the PC. Microsoft did use S100 bus systems from Seattle Computer Products - as well as their CP/M ripoff called QDOS - a combination many others used as well. SCP was one of the early suppliers of x86 S100 systems.&lt;/p&gt;&#xA;&lt;p&gt;So when Bill Gates had a meeting with some IBM representatives, and heard about their problems with Kildall's idea of a royalty based system, he jumped in (somewhat pushed by Paul Allen), and offered to supply a CP/M-like system, since they figured  licencing it from SCP should go without much trouble. This would not only make sure that the languages deal went through, but also reduce development effort, as it was already the environment they developed for. For Gates it was only meant to be a pass-through job with the chance to make a few more bucks atop of what SCP would ask.&lt;/p&gt;&#xA;&lt;p&gt;He bought a single non-exclusive one-time payment license from SCP, turned around, and sold it to IBM. That way IBM got a mostly CP/M compatible operating system they could even brand as their own (PC-DOS) to allow software companies to port their existing CP/M software. Perfect solution for MS as well as IBM.&lt;/p&gt;&#xA;&lt;p&gt;Most important, MS could sell their languages to IBM as well as in addition direct to customers. MS-DOS as a business was only picking up after the PC and slow. It wasn't until about a year later, that MS did actively market MS-DOS (*2) This MS-DOS 1.25 deal also included GW-BASIC for the first time as complete replacement for the IBM BASICA.&lt;/p&gt;&#xA;&lt;p&gt;It's important to note, that it wasn't until 1985 (!) That MS-DOS 3.2 was available as first stand alone boxed product by Microsoft for (compatible) generic PCs (via manufacturers). Until then, each PC manufacturer had to license their DOS especially for their machine. No matter how compatible or not (*4). And it wasn't until DOS 5, before it became an end-customer product.&lt;/p&gt;&#xA;&lt;p&gt;Well, it was all against their policies and sheer luck... and the rest is history.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Well, not entirely true, they just had no intention of making something as primitive as their existing MS-DOS again. MS was, at that time, heavy focused on Xenix. Gates believed that Unix was the future and Xenix was his bet. It was published in summer of 1980 for 8086, 68k, and PDP-11 machines (I think Z8000 as well later on). That's even before IBM contacted MS, and MS licensed QDOS.&lt;/p&gt;&#xA;&lt;p&gt;All the work put into DOS 2.0 making it more Unix-like was meant to position it as a gateway product toward Xenix. DOS 2.0 should make users comfortable with Unix and software portable toward Xenix. They didn't foresee that implementing the most user notable parts of Unix (directories and redirection) to DOS would make it less likely for them to move anyway.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Well, there were two contracts with Lifeboat (*3) for Generic x86 machines and Sirius for the Victor 9000. And it wasn't until again much later when Columbia Data Products bought MS-DOS for their MPC, the eventually first (mostly) PC-compatible system.&lt;/p&gt;&#xA;&lt;p&gt;*3 - it might have been the Lifeboat deal that made Gates realize the potential, as they originally tried to by the whole QDOS rights form SCP at ~200k, which did not work out, so they just licensed MS-DOS on a per-copy basis.&lt;/p&gt;&#xA;&lt;p&gt;*4 - I still remember making good money translating DOS 3.0 manuals for some Taiwanese company into German. Of course I did &lt;em&gt;never&lt;/em&gt; peek into the existing German copies of other manufacturers... that would have made the job way too easy:) Yes, back then each, and every had their own manuals and their own translations:)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-11-26T20:44:00.193" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8346" PostTypeId="2" ParentId="8334" CreationDate="2018-11-20T08:44:14.170" Score="0" Body="&lt;p&gt;Definitely not &quot;bling&quot;. Since gold is (obviously) expensive, there is only one reason it's used in electrical circuits: it's because it doesn't corrode (oxidize), and therefore it makes for the best interconnects. There are better conductors out there, such as silver (the best), but they all have issues with corrosion to some extent or another. Think of the &quot;tarnish&quot; that quickly builds-up on any silver that gets exposed to oxygen. But you can drop a piece of gold in the ocean and come back a year later and it still won't have any oxidation on it whatsoever.&lt;/p&gt;&#xA;" OwnerUserId="11213" LastActivityDate="2018-11-20T08:44:14.170" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8347" PostTypeId="2" ParentId="8344" CreationDate="2018-11-20T11:13:27.780" Score="22" Body="&lt;p&gt;My wife began work at MSFT in the downtown Bellevue office in late 1981 (approx employee #90-ish) just a couple weeks before the company's move to the highway 520 building next to the Burger King on everyone's speed-dial.  She worked with Jeff Raikes and Trisha in CorpComm.  Though not software developers, CorpComm people interfaced with many departments and based on those conversations and other reading of mine, this is what I have come to understand regarding MSFT's involvement with the early IBM PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, most of PC-DOS was based on SCP's CP/M like OS &quot;QDOS&quot;(?).  Mr. Gates III's mother Mary Gates was on the same non-profit board as an important IBM exec.  I believe that is originally how Bill found out about the unpublicized work a small team at IBM was doing to develop the IBM-PC.  Aside: It's always &quot;IBM-PC&quot; to me because I had a DG-PC: Digital Group Inc personal computer in 1977.  A non-S100 motherboard using the Z-80 CPU.... but I digress.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not think the owner of SCP: Mr. Kidall, got along all that well with Mr. Gates so Paul Allen (RIP) acted as the intermediary for most of the licensing negotiations between MicroSoft and Seattle Computer Products.  SCP was expecting to receive a lump sum fee AND a royalty from MicroSoft to license the SCP version of CPM which Mr. Gates would modify somewhat before in turn supplying it to IBM, receiving Mr. Gates - hoped an ongoing royalty as well.  Bill being Bill he ultimately wanted to keep the royalty stream for himself and so at the 11th hour Paul Allen delivered a final draft contract to Mr. Kidall with the lump sum payment but sans any royalty ... take it or leave it.  &quot;Iced&quot; SCP had little choice and signed over non-exclusive use of QDOS to MicroSoft, receiving only one payment rumored to be approx $50k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here now is where I think things get interesting and my understanding of events differs again from narratives posted above.  White dress shirt IBM contract negotiators had no interest in giving little MicroSoft from Podunk NW Washington ANY in-perpetuity royalty payments ... full stop.  MicroSoft would receive a one time payment of approx $250k.  MicroSoft was contracted by IBM to supply some modifications to a version of CPM so it would run on the new IBM-PC using IBM's BIOS which IBM held exclusive copyright to.  BIOS was the key. And as we shall learn Bill knew it even as the white dress shirt IBM negotiators did not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mr. Gates very much wanted a royalty, really really really wanted the risk free, work free, manufacturing free stream of revenue pouring into MicroSoft, from the sweat of IBM's manufacturing prowess, but IBM would have none of it.  I mean are you kidding, Big Blue paying tiny MicroSoft a forever royalty for a quick onetime software mod job ?  Cash the check kid and pretend to be grateful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, Bill being Bill, he cajoled and annoyed until when asked if MicroSoft could at least sell PC-DOS to other personal computer manufacturers also running BIOS, IBM relented and said sure, why not, believing (mistakenly) that because IBM owned every part of the BIOS and had no intentions of ever allowing any other company to use it, Bill would own the rights to a Black Swan.  And yet Bill indeed was Bill and knew some clever software geeks could and would someday reverse engineer IBM's crown jewel BIOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enter our Black Swan:COMPAQ, which did indeed reverse engineer IBM's BIOS in a clean room, at a cost of $1-million, and some could argue at a cost to IBM of monopoly control and profits in PC's, relinquishing the future of computing profits to WinTel. MicroSoft having won the right to sell PC-DOS to others now became MSFT.  The business genius of Mr. Gates was seeing around corners others could not combined with corporate ruthlessness (stiffing, Icing SCP and Kidall, head faking IBM).  COMPAQ changed everything and Bill knew arrogant IBM could be expected to miss it entirely.  Last minute, seemingly adhoc but precisely calibrated contract changes are a talent of Mr. Gate's in my opinion.  His father Mr. Gates Senior is a very good attorney, while his mother Mary Gates worked tirelessly with many non-profits in the Seattle/Bellevue area.  I think Bill's admirable devotion to effective philanthropy is a testament to both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is my rough understanding of the events.    &lt;/p&gt;&#xA;" OwnerUserId="11216" LastEditorUserId="11216" LastEditDate="2018-11-20T11:28:15.847" LastActivityDate="2018-11-20T11:28:15.847" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8348" PostTypeId="2" ParentId="8291" CreationDate="2018-11-20T15:10:30.833" Score="2" Body="&lt;p&gt;I have done two and a bit from scratch emulations for the Mac using Swift. These are my personal observations based on my experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of my emulations are completely cycle accurate which leads to a few problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Commodore PET&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was the first emulation I wrote. You need, at a minimum a 6502 emulation, a PIA emulation, a VIA emulation and a video emulation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 is really simple and an excellent processor to start with. It's also pretty well documented. The Visual6502 site was invaluable for working out the exact behaviour of instructions where documentation was ambiguous. As an aside, I wrote an emulation of a slightly later processor (I forget which one) that filled in some of the gaps in the instruction set. This made writing 6502 test code a lot easier (even just &lt;code&gt;PHX&lt;/code&gt; and &lt;code&gt;PHY&lt;/code&gt; make some things simpler. On the other hand, any software that used the &quot;undocumented instructions&quot; of the original 6502 will break on my emulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PIA and VIA are relatively simple IO chips to emulate. The video driver can be as simple as reading the screen RAM, translating to ASCII or a close approximation and drawing the resulting text in a window. Eventually, I created a set of bitmaps that were accurate copies of the PET character set. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My chief resource for the PET was &quot;Programming the PET/CBM&quot; by Raeto West. I have an original copy, but there are PDF versions on line. Also, important is the availability of BASIC and KERNAL ROMS. You don't want to be rewriting the operating system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Emulating the tape drive was a PITA. My software version was less reliable than the real one, which PET owners will know is really saying something. The main problem, i thought, is that it relies on cycle accurate timing pulses and, although my emulator counts clock pulses, it didn't necessarily invoke the timer interrupt at exactly the right time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had more success writing an emulation of the dual disk drives. This required a robust IEEE 488 emulation as well, but the disk drive emulation was quite easy. It's not a hardware emulation, it just takes the commands sent by the PET and executes them using flat files on the Mac's hard disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, I wrote some code that would stop the emulator, directly inject a program file into memory and then start the emulator again. This turned out to be so much more convenient than emulating disks or tapes that I quit working on them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My emulator works well enough with most PET code. Unfortunately, there is an issue with PET Space Invaders - probably caused by the keyboard code - so it doesn't recognise key presses properly. Also, I didn't try to address sound generation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Sinclair ZX Spectrum&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some ways, this is even easier than the PET. You need to write a Z80 emulator which is more complex than the 6502 but there is a CPM test suite that you can use for verifying a lot of its functionality, you just need to emulate CPM's character output subroutine to make it workable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only other chips you need to emulate are the ULA and you don't need to do much of that if you are prepared to forgo a tape drive. Also, the video generator, which is a bit weird in the way it addresses the Screen RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The really nice thing about the Spectrum is that the screen is always in bitmap mode and the OS creates characters by directly writing the write pixel patterns. You don't have to worry about a character set because it is magically there when you boot up the emulator with the Spectrum ROMs loaded. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got the Spectrum to the point where I could load and run Manic Miner and it was playable, albeit without sound. It took about three months working perhaps eight hours a week from start to finish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Commodore 64&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a work in progress. Obviously, I already had a 6502, which I modified to give me the IO port of the 6510. So far, it does the bank switching correctly, some of the CIA functionality is implemented and enough VIC II functionality is emulated to give me a PET equivalent i.e. the normal text mode is working. Also the border and character colour memory are working. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still have the more complicated graphics modes to emulate and sprites and I should be able to do something with the sound because that is a separate chip, I'm not reliant on accurate CPU timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest emulation, apart form the CPU was the Spectrum. I'd probably start with that, although an old CP/M 8080 based computer might be even easier if you can get hold of CP/M. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Further Observations&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll probably need a good cross assembler for your target platform. It gets very tedious hand assembling code for unit tests. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, a disassembler will be useful. I didn't have to disassemble the Commodore BASIC ROMs because disassemblies are freely available on the Internet. But when I was trying to get Space Invaders to work, it didn't work at first and the disassembler was invaluable for trouble shooting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this reason, cc65 suite makes a strong case for starting with a 6502 based machine. It's got a good assembler and an excellent disassembler included. The Z80 situation wasn't so good, but I did find a reasonable assembler in the end called z80asm. I think I had to compile it from source though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, you'll need good solid documentation. Again the 6502 documentation is online is virtually unparalleled. Docs are less forthcoming for the Spectrum, but it's so simple, you can get away with quite a shoddy ULA emulation.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2018-11-20T15:57:00.333" LastActivityDate="2018-11-20T15:57:00.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8349" PostTypeId="2" ParentId="8328" CreationDate="2018-11-20T17:42:39.270" Score="2" Body="&lt;p&gt;As others have pointed out, the Cromemco Cyclops turned this into a (hobbyist) product.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also found I could get reproducible transient bit flips in an unprogrammed EPROM. Shine a laser pointer onto the chip, and the cells under the light will flip, then flip back when the light goes away. I'm not sure of the mechanism, and I don't even remember whether it was 0 -&gt; 1 or 1 -&gt; 0 (it was definitely only one of those, though). Sensitivity was VERY low (needed a direct hit from the beam).&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2018-11-20T17:42:39.270" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8350" PostTypeId="1" AcceptedAnswerId="8352" CreationDate="2018-11-20T21:05:09.047" Score="3" ViewCount="432" Body="&lt;p&gt;The technique of creating special characters by overstriking i.e. superimposing two characters on top of each other was common on typewriters. This was carried over to printer terminals and was used heavily in a language called &lt;a href=&quot;https://en.wikipedia.org/wiki/APL_(programming_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;APL&lt;/a&gt; on the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360&quot; rel=&quot;nofollow noreferrer&quot;&gt;S/360&lt;/a&gt; using a &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2741&quot; rel=&quot;nofollow noreferrer&quot;&gt;2741&lt;/a&gt; terminal; see &lt;a href=&quot;https://www.youtube.com/watch?v=_DTpQ4Kk2wA&quot; rel=&quot;nofollow noreferrer&quot;&gt;APL demonstration 1975&lt;/a&gt; for an example of this (5:20 and 20:00 into the video).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, how was this handled by the terminal and computer? For example after entering the four characters &lt;kbd&gt;⎕&lt;/kbd&gt; &lt;kbd&gt;BS&lt;/kbd&gt; &lt;kbd&gt;÷&lt;/kbd&gt; &lt;kbd&gt;CR&lt;/kbd&gt; i.e. quad,backspace,divide,carrier return to create the  symbol for matrix division &lt;code&gt;⌹&lt;/code&gt;, did the terminal interpret this as a special sequence and replace &lt;code&gt;quad&lt;/code&gt;,&lt;code&gt;backspace&lt;/code&gt;,&lt;code&gt;divide&lt;/code&gt; with a character for matrix division before sending it to the computer, or did the terminal send all four characters unmodified and let the computer figure out where to look for overstruck characters?&lt;/p&gt;&#xA;" OwnerUserId="11219" LastEditorUserId="11219" LastEditDate="2018-11-22T02:02:33.200" LastActivityDate="2018-11-26T11:31:38.347" Title="How did overstriking on printer terminals work?" Tags="&lt;ibm&gt;&lt;terminal&gt;&lt;text&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8351" PostTypeId="1" AcceptedAnswerId="8353" CreationDate="2018-11-20T21:22:43.993" Score="4" ViewCount="308" Body="&lt;p&gt;Where could I find a list of all of the microchips released by Intel, including microprocessors, Rams, roms, storage devices. Etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have checked Wikipedia, and they have the processors, but not any of the RAM, ROM, or other chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found &lt;a href=&quot;http://www.cpushack.com/wp-content/uploads/2018/06/VintageIntelMicrochipsRev4.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the collectors guide to vintage Intel microchips&lt;/a&gt;&#xA;But that only covers 1969 to 1975.&#xA;And in 1995 their website launched. So I need the time period from 1975-1995.&lt;/p&gt;&#xA;" OwnerDisplayName="user11220" LastEditorUserId="-1" LastEditDate="2018-11-20T21:52:36.940" LastActivityDate="2018-11-22T16:19:48.433" Title="List of Intel microchips" Tags="&lt;memory&gt;&lt;intel&gt;&lt;rom&gt;&lt;chip&gt;&lt;cpu&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8352" PostTypeId="2" ParentId="8350" CreationDate="2018-11-20T21:54:48.717" Score="4" Body="&lt;p&gt;I assume your question is specifically about the 2741 - as otherwise the question would be way too broad (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2741 operated in a basic line mode using a simple handshake protocol to switch between sending and receiving (*2). Everything except the handshake characters was a possible input, thus &lt;code&gt;BS&lt;/code&gt; as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When in user input mode everything typed was sent toward the controller (2701 or equivalent) and collected the characters, in sequence of being entered, until a &lt;code&gt;(C)&lt;/code&gt; (*3) is received. At this point a /360 I/O Request is generated and all collected characters are transmitted. Whatever happened in local editing will now be &quot;replayed&quot; to generate the input line and processed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same protocol was used in reverse direction. Thus producing a domino (*4) required sending Quad, BS, Division.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;BTW: &lt;a href=&quot;https://www.youtube.com/watch?v=_DTpQ4Kk2wA&quot; rel=&quot;nofollow noreferrer&quot;&gt;The video&lt;/a&gt; is a real neat find. Thanks.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Effectively all methods one can imagine have been used over the years with various input devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Unlike with like a teletype or most 'standard' printing terminals this secured that the host could not interfere with the print line, while the user was inputing anything. It's a simple handover protocol using two character codes (&lt;code&gt;(C)&lt;/code&gt;and &lt;code&gt;(D)&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - &lt;code&gt;(C)&lt;/code&gt;, noted as letter &lt;code&gt;C&lt;/code&gt; in a circle, is effectively &lt;code&gt;EOT&lt;/code&gt; (EBCDIC X'37', ASCII X'04' in 2741 line code X'1F').&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Domino is what the matrix division symbol was usually called.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-11-26T11:31:38.347" LastActivityDate="2018-11-26T11:31:38.347" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8353" PostTypeId="2" ParentId="8351" CreationDate="2018-11-20T22:14:03.750" Score="10" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Where could I find a list of all of the microchips released by Intel, including microprocessors, Rams, roms, storage devices. Etc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Oh, that's a simple one: &lt;strong&gt;Get the Databooks&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel, like any other manufacturer, has a good history of publishing big volumes of databooks and even more datasheets. At least all basic chips that ever made it into production (and many that didn't) are listed there. This only excludes special customer versions and developments - but usually these are 'only' variations of otherwise available ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside having them on shelf (*1), there's always Bitsavers Component Archive. In the case of Intel they offer next to &lt;a href=&quot;http://www.bitsavers.org/components/intel/_dataBooks/&quot; rel=&quot;nofollow noreferrer&quot;&gt;all databooks between 1975 and 1996&lt;/a&gt;. Download and enjoy :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Seriously, there is almost nothing as satisfying as a whole wall covered with databooks :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-11-22T16:19:48.433" LastActivityDate="2018-11-22T16:19:48.433" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8354" PostTypeId="1" AcceptedAnswerId="8356" CreationDate="2018-11-21T02:54:31.217" Score="5" ViewCount="666" Body="&lt;p&gt;Is it possible to use a system with a modern, multi-core CPU with older operating systems that only support single core operation?  Is this something that needs to be set in the BIOS?  Does it depend on the CPU, the BIOS, the OS, or something else?&lt;/p&gt;&#xA;" OwnerDisplayName="user11220" LastEditorUserId="7347" LastEditDate="2018-11-21T03:28:05.740" LastActivityDate="2018-11-26T08:40:28.473" Title="Starting a multi core CPU as single core" Tags="&lt;operating-system&gt;&lt;bios&gt;&lt;cpu&gt;" AnswerCount="2" CommentCount="3" ClosedDate="2018-11-21T09:00:12.983" ContentLicense="CC BY-SA 4.0" />
  <row Id="8355" PostTypeId="2" ParentId="8354" CreationDate="2018-11-21T03:05:35.953" Score="5" Body="&lt;p&gt;Preface: I assume the question to be deleted or moved soon, as this is not in any way RC related. After all, the issue in question is not the classic OS, but workings modern hard- and software.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Since every multi core CPU starts up in single core mode, it is basically possible to use any old, single core OS. As long as the CPU is compatible - which no longer always is true - but that's less due having multiple cores (or threads) but changes in basic CPU design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In compatibility mode even a modern BIOS &lt;em&gt;should&lt;/em&gt; be able to to initiate classic upstart procedures. With modern (UEFI) BIOS, you may have to activate CSM mode (Compatibility Support Module).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Past that hurdle it depends much on the OS to be used. Emulation on BIOS level for like Kbd/Mouse and basic Video will work fine. Even basic Disk may work (Size and filesystem may of course be a bigger issue).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As soon as direct hardware drivers are installed, the chances will reduce. While chipsets do emulate several classic ports one way or another, they are not really foolproof. In fact, they are usually only tested to boot some minimal DOS for BIOS updates, not so much for OS support in all possible configurations. So DOS 1.25 may work better than 5.0 with its GUI. Similar systems that rely on special, no longer supported processor modes - like 286 protected mode and alike got a high chance of failure. So I wouldn't really try for OS/2 - not even 1.2 without any GUI.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-11-26T08:40:28.473" LastActivityDate="2018-11-26T08:40:28.473" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8356" PostTypeId="2" ParentId="8354" CreationDate="2018-11-21T07:46:13.850" Score="7" Body="&lt;p&gt;The previous answer talks about various issues that may arise when attempting to run an older OS on a modern system, but doesn’t really focus on the questions asked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a multicore CPU powers on, a single core is activated. The BIOS typically has a configuration option to control how many additional cores should be activated. If this BIOS setting is set to a single core, then any OS that boots will see only that one core.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the BIOS starts up the boot loader, followed by the OS itself, again that is done with only a single core active. The BIOS reports the number of cores available to the OS. If the OS supports multicore operation, the OS activates the additional cores. If not, the OS will proceed on the original single core. Operating systems such as Linux have a boot option to specify the number of cores to activate, so the OS can be limited to one core. This is useful for debugging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a processor with hyperthreading, every place I wrote “core” above can be replaced with “hardware thread”.&lt;/p&gt;&#xA;" OwnerUserId="7419" LastActivityDate="2018-11-21T07:46:13.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8358" PostTypeId="2" ParentId="8291" CreationDate="2018-11-21T13:28:28.930" Score="2" Body="&lt;p&gt;Along with all the other fine suggestions, as an alternative to Z-80 and CP/M, you might consider a generic &lt;strong&gt;Motorola 6809&lt;/strong&gt; system to run &lt;strong&gt;FLEX&lt;/strong&gt; or possibly &lt;strong&gt;OS-9&lt;/strong&gt;, both Unix-inspired.  As a CLI-based system there's no need to get any timing accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if you're building the simulator, it's rather like building the hardware; porting the operating system was a &lt;em&gt;real task&lt;/em&gt; -- which I did in the 1980s -- as opposed to a clone-something-for-education task.  &quot;Does it boot the operating system and run the programs?&quot; is a very realistic target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it's running a portable operating system which ran on many different manufacturers' hardware, it means the students don't have just one way of doing it.  Student A might build a bit-map display; Student B might make a UART and have a serial interface.  Some might try to get every cycle right; some might try just to get every operation correct.  Therefore instead of simply trying to copy something without necessarily understanding the original design constraints, the students are engaged in a proper engineering question: what is a good way to do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The 6809 was unique at the time in that it was possible to write entirely position-independent code, which would run identically wherever it was in memory.&lt;/li&gt;&#xA;&lt;li&gt;The instruction set was almost entirely orthogonal&lt;/li&gt;&#xA;&lt;li&gt;As a 8-bit CPU with 16-bit address bus, it's pretty simple&lt;/li&gt;&#xA;&lt;li&gt;The exception mechanism and effective-address manipulation are very much like modern processors&lt;/li&gt;&#xA;&lt;li&gt;As a Motorola design, it had memory-mapped IO rather than special IO instructions&lt;/li&gt;&#xA;&lt;li&gt;Easier to do than Z-80 (many fewer instructions) or 6502 (fewer special cases)&lt;/li&gt;&#xA;&lt;li&gt;Material via &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6809&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Motorola_6809&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;FLEX&lt;/strong&gt; was designed as a Unix-inspired system for 8-bit CPUs&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It was specifically designed for portability, and to get it to boot required very few system calls to be implemented -- I think just character read/write, floppy block read/write and some kind of boot (read sector and jump to it).&lt;/li&gt;&#xA;&lt;li&gt;Hardware-agnostic for these basic functions, which makes simulation much much easier&lt;/li&gt;&#xA;&lt;li&gt;It's exhilarating to write just a few functions and boot a whole operating system&lt;/li&gt;&#xA;&lt;li&gt;No graphics to fret about (which is positive or negative depending on your view)&lt;/li&gt;&#xA;&lt;li&gt;Much available material, find via &lt;a href=&quot;https://en.wikipedia.org/wiki/FLEX_(operating_system)&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/FLEX_(operating_system)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;OS-9&lt;/strong&gt; similar in intent&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;More Unix-like than FLEX, slightly harder to port, as far as I remember&lt;/li&gt;&#xA;&lt;li&gt;Later ported to 68000&lt;/li&gt;&#xA;&lt;li&gt;Much available material, find via &lt;a href=&quot;https://en.wikipedia.org/wiki/OS-9&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/OS-9&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11208" LastEditorUserId="11208" LastEditDate="2018-12-01T15:55:41.400" LastActivityDate="2018-12-01T15:55:41.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8359" PostTypeId="1" AcceptedAnswerId="8360" CreationDate="2018-11-21T18:17:14.347" Score="3" ViewCount="3172" Body="&lt;p&gt;Has there been any attempt to emulate a system that could run the IRIX operating system? &lt;/p&gt;&#xA;" OwnerDisplayName="user11220" LastActivityDate="2018-11-21T21:06:25.147" Title="Emulating IRIX on a modern system" Tags="&lt;emulation&gt;&lt;operating-system&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ClosedDate="2018-11-22T03:15:18.160" ContentLicense="CC BY-SA 4.0" />
  <row Id="8360" PostTypeId="2" ParentId="8359" CreationDate="2018-11-21T21:06:25.147" Score="1" Body="&lt;p&gt;There is MIPS support in QEMU which can be used along with &lt;a href=&quot;https://github.com/irixxxx/qemu&quot; rel=&quot;nofollow noreferrer&quot;&gt;SGI userland emulation&lt;/a&gt; and an Irix disk image to emulate Irix under Linux.  The &lt;a href=&quot;https://github.com/irixxxx/qemu-irix-helpers&quot; rel=&quot;nofollow noreferrer&quot;&gt;qemu-irix-helpers&lt;/a&gt; may also be useful.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastActivityDate="2018-11-21T21:06:25.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8361" PostTypeId="1" CreationDate="2018-11-22T07:11:23.573" Score="21" ViewCount="1827" Body="&lt;p&gt;I heard recently that the process model in very &lt;em&gt;early&lt;/em&gt; variants of UNIX was quite a bit different to the &lt;code&gt;fork/exec&lt;/code&gt; model used nowadays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did it differ from the current state?&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastActivityDate="2018-11-22T07:27:03.670" Title="Process model in early UNIX" Tags="&lt;unix&gt;&lt;operating-system&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8362" PostTypeId="2" ParentId="8361" CreationDate="2018-11-22T07:11:23.573" Score="28" Body="&lt;p&gt;If you search for the seminal 1979 paper from Dennis Ritchie, entitled &lt;a href=&quot;http://www.read.seas.harvard.edu/~kohler/class/aosref/ritchie84evolution.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The Evolution of the Unix Time-Sharing System&lt;/em&gt;&lt;/a&gt;, it covers this (amongst a few other things like incredibly difficult-to-use file-system links, only being able to create directories at boot time, and why the password file has a GECOS field).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, we'll recap the current model. A &lt;em&gt;process&lt;/em&gt; is one type of execution unit within UNIX while a &lt;em&gt;program&lt;/em&gt; is a runnable item that lives &lt;em&gt;within&lt;/em&gt; a process (when it's running). That distinction is important.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A running process that wants to start a new process will call &lt;code&gt;fork&lt;/code&gt; and this gives you two nearly identical processes running the same program (at the same point), where only one existed before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that point, one of them (usually the child) &lt;em&gt;may&lt;/em&gt; choose to &lt;code&gt;exec&lt;/code&gt; a new program to perform some other work - this &lt;code&gt;exec&lt;/code&gt; basically replaces the program in the current process with a whole &lt;em&gt;new&lt;/em&gt; program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should the original process wish to wait until the child exits, it can call &lt;code&gt;wait&lt;/code&gt; to do so.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The old model was a little similar but it only ever had a limited number of processes, one for each of the terminals hooked up to the machine. These processes were created at boot time and there was therefore no &lt;code&gt;fork&lt;/code&gt;. A shell ran in each of these processes, interacting with the user on the given terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the user specified a program to run, the shell would:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Create a link to the file in the current directory (this has to do with the &quot;incredibly difficult-to-use file-system links&quot; mentioned earlier).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Open the file.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Remove the link.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Copy a small bootstrap program to the top of memory and jump to it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;This bootstrap program would read in the already-open file &lt;em&gt;over&lt;/em&gt; the current shell code, then jump to the first location of the command (exec).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;After the command had done its work, it called &lt;code&gt;exit&lt;/code&gt;. But this isn't the &lt;code&gt;exit&lt;/code&gt; we know and love nowadays. What &lt;em&gt;this&lt;/em&gt; &lt;code&gt;exit&lt;/code&gt; did was simply to reload the shell program into the process in much the same way as the shell had loaded the program in the first place.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;At that point, you would be back in the shell, ready to type in another command. As you may imagine, this had no support for pipeslines/filters but, interestingly, had I/O redirection from a very early stage - all the shell had to do was connect the standard handles to specific files rather than the terminal device.&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorUserId="7347" LastEditDate="2018-11-22T07:27:03.670" LastActivityDate="2018-11-22T07:27:03.670" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8363" PostTypeId="1" CreationDate="2018-11-22T08:38:56.977" Score="7" ViewCount="471" Body="&lt;p&gt;This is primarily about VDP from the Sega Master System game console and video chip from the MSX 2 series computers.&#xA;Specifically about Yamaha YM2602 (aka Sega 315‑5124) and Yamaha V9938 respectively.&#xA;Deep analysis of chip architecture, instruction set, bus and memory configuration (including on-chip linear buffers from sprite engine), chips floor-plan...&lt;/p&gt;&#xA;" OwnerUserId="11231" LastEditorUserId="11231" LastEditDate="2018-11-22T08:48:31.637" LastActivityDate="2019-03-12T22:01:55.387" Title="Is there a comparative analysis of the evolution paths of chips inheriting from TMS9918?" Tags="&lt;hardware&gt;&lt;graphics&gt;&lt;video&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8364" PostTypeId="1" AcceptedAnswerId="8365" CreationDate="2018-11-23T00:37:21.987" Score="40" ViewCount="4272" Body="&lt;p&gt;I seem to recall from my high-school days that certain Apple II programs protected themselves from being listed and therefore modified.&lt;/p&gt;&#xA;&lt;p&gt;If you tried to do it, the machine would simply reboot.&lt;/p&gt;&#xA;&lt;p&gt;How did they achieve this, and can it be bypassed to get at the code?&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorUserId="15334" LastEditDate="2020-11-10T20:28:21.787" LastActivityDate="2020-11-10T20:31:10.790" Title="How did Apple II BASIC programs protect against listing?" Tags="&lt;apple-ii&gt;&lt;copy-protection&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8365" PostTypeId="2" ParentId="8364" CreationDate="2018-11-23T00:49:50.223" Score="40" Body="&lt;p&gt;One way was to place an in-line reboot command into the actual listing.&lt;/p&gt;&#xA;&lt;p&gt;Apple II DOS had a feature that would monitor the output stream and, if it found a special character output at the start of a line, the rest of the line would be treated as a command. This character was &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;D&lt;/kbd&gt;, meaning you could get a disk listing from your program with something like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PRINT CHR$(4);&amp;quot;CATALOG&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You could &lt;em&gt;also&lt;/em&gt; use the slot activation command &lt;code&gt;IN#6&lt;/code&gt; which would generally reboot the machine, assuming your disk controller was in slot 6 (it usually was).&lt;/p&gt;&#xA;&lt;p&gt;But, of course, that would only work with a &lt;code&gt;print&lt;/code&gt; command if you were &lt;em&gt;running&lt;/em&gt; your program. For protecting against someone &lt;em&gt;listing&lt;/em&gt; it, an extra layer of trickery was required.&lt;/p&gt;&#xA;&lt;p&gt;To do this, you would create a line at the start of your program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 REM XXIN#6&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and then use &lt;code&gt;POKE&lt;/code&gt; commands to change the &lt;code&gt;XX&lt;/code&gt; into a &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;M&lt;/kbd&gt; (to start a new line) and &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;D&lt;/kbd&gt; (to flag a command), before saving.&lt;/p&gt;&#xA;&lt;p&gt;After that, an attempt to &lt;code&gt;LIST&lt;/code&gt; the program would result in the machine rebooting. So this is probably something you wanted to do once development was done, just before shipping :-)&lt;/p&gt;&#xA;&lt;p&gt;In order to bypass it, it's a simple matter of working out the errant line and just deleting it. In the case above, that would be achieved by just entering the stand-alone:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;on the command line and, voila, the program is unprotected. To stop this, some developers started numbering the programs with less &amp;quot;normal&amp;quot; line numbers such as &lt;code&gt;2718&lt;/code&gt;. However, since the line numbers are stored in memory as well, you could &lt;code&gt;PEEK&lt;/code&gt; at the program to work out what the first line number was, and then delete that one.&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorUserId="15334" LastEditorDisplayName="user6464" LastEditDate="2020-11-10T20:31:10.790" LastActivityDate="2020-11-10T20:31:10.790" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8366" PostTypeId="1" CreationDate="2018-11-23T02:05:51.763" Score="5" ViewCount="360" Body="&lt;p&gt;I was prompted to ask this by another recent question about early Unix process structure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more-or-less contemporaneous systems I'm aware of (built 1960s to 1970s) mostly gave you a software structure, often called a 'job', when you signed on through a terminal.  For commands not built in to the command interpreter, core would be allocated to the job, and the command program executed within the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think Multics counts; my understanding is that the multiprocess approach was designed but not used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TENEX used a multiprocess structure but I'm not sure it qualifies as first.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2018-11-27T09:48:30.787" Title="What was the first interactive OS to run each command in a new process?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8367" PostTypeId="2" ParentId="8366" CreationDate="2018-11-23T02:35:59.150" Score="6" Body="&lt;p&gt;The idea of having a hierarchy of child processes(*1) and using a Fork like mechanic is quite tied to Unix as an operating system, but not originated there. To my knowledge it was &lt;a href=&quot;https://en.wikipedia.org/wiki/Melvin_Conway&quot; rel=&quot;nofollow noreferrer&quot;&gt;Melvin Conway&lt;/a&gt; who first wrote in 1962 about a possible software structure based on a concept of &quot;forking&quot; and &quot;joining&quot; of processes to achieve parallel execution on multiprocessor systems. While forking one does not need any bookkeeping of process relation, the later process of joining (synchronizing) the execution does greatly benefit thereof.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linus Nyman and Mikael Laakso mention in their 2016 paper &lt;em&gt;&lt;strong&gt;&lt;a href=&quot;https://helda.helsinki.fi/dhanken/bitstream/handle/123456789/167488/Nyman_Laakso_2016.pdf?sequence=1&amp;amp;isAllowed=y&quot; rel=&quot;nofollow noreferrer&quot;&gt;Notes on the history of fork-and-join&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt; that Conway did remark that &lt;em&gt;&quot;the fork-join notion has&#xA;been around for a while&quot;&lt;/em&gt; before he wrote his paper. The first real implementation of this father-son relation was eventually done with &lt;a href=&quot;https://en.wikipedia.org/wiki/Project_Genie&quot; rel=&quot;nofollow noreferrer&quot;&gt;Project Genie&lt;/a&gt; in 1964 by &lt;a href=&quot;https://en.wikipedia.org/wiki/L._Peter_Deutsch&quot; rel=&quot;nofollow noreferrer&quot;&gt;Laurence Peter Deutsch&lt;/a&gt; (*2) on a 24 bit &lt;a href=&quot;https://en.wikipedia.org/wiki/SDS_940&quot; rel=&quot;nofollow noreferrer&quot;&gt;SDS 940&lt;/a&gt; machine. Project Genie inspired many others not at least &lt;a href=&quot;https://en.wikipedia.org/wiki/TOPS-20&quot; rel=&quot;nofollow noreferrer&quot;&gt;TOPS-20&lt;/a&gt;. And the rest is history.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or not. As to come to Unix' process structure it might be important to understand Multics view of process and memory. A process was for the most part a list of segments mapped into its address space. So far it may sound like any other OS, but Multics also tried to remove the idea of different storage levels by not acknowledging RAM as something in its own right, but always being a representation of a disk file. So not just Code, but each and every memory segment (during lifetime of a process) had to have an associated file. One where it could be saved to and loaded from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside providing a stringent structure, it had several advantages. Libraries or utilities could be just called by dynamically creating a new segment assigned with the file name of the library in question and right away calling a function. The OS would then map the code, and execution continued. Having this, it was no big deal to invoke a new process the same way, by setting up a list of segments with associated file names (at least one with the code) and then initiating a new process with this segment list - while staying in memory and waiting for a return - or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sounds complex and it is. Ken Thompson once called it &quot;&lt;em&gt;overdesigned and overbuilt and over everything&lt;/em&gt;&quot; (*3) and I think he's right. Multics was conceived top-down with a huge theoretical overhead. Then again, he did like the idea of having an exchangeable shell (contrary to an OS built-in EXEC) and executing programs as separate processes while the shell (and thus all prior programs) stay in memory and wait. So long story short, the easy creation of new processes was kept while the tight coupling of memory and disk was thrown overboard for Unix.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - There are many other ways to handle processes other than the Unix way, usually more loosely bound and/or using threading or interrupt level like scheduling, avoiding the hierarchical problems of fork-join.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Most well known due to his free Postscript implementation &lt;a href=&quot;https://en.wikipedia.org/wiki/Ghostscript&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ghostscript&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - P.463 on Peter Seibel's book &lt;em&gt;&lt;a href=&quot;http://www.one-shore.com/aaron/books/coders-at-work.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Coders at Work&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="3297" LastEditDate="2018-11-27T09:48:30.787" LastActivityDate="2018-11-27T09:48:30.787" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8368" PostTypeId="2" ParentId="8282" CreationDate="2018-11-23T03:33:52.097" Score="2" Body="&lt;p&gt;Yes, it is certainly possible. Bondi iMac (233 MHz) takes two SO-DIMM memories,&#xA;of the PC100 type, one of which must be low-profile (circa one inch high)&#xA;while the other may be high-profile (two inches).   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple only tested this&#xA;machine with the available modules at time of manufacture, which included&#xA;256M high-profile and 128M low-profile, so the official recommendation&#xA;for maximum memory was 384 MB.  After a few years, though, low-profile&#xA;SODIMMs were available so that (with non-Apple modules) the early iMac&#xA;machines could take two 256MB modules, for a total of 512MB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were variants in later years, and some similar-looking&#xA;iMacs could take more memory, of PC133, but the original Bondi&#xA;233MHz iMac models required the organization variants that matched&#xA;PC100.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typical memory offerings distinguished (and charged extra) for the&#xA;low-profile 256M variant modules &lt;a href=&quot;https://web.archive.org/web/20060318194308/http://eshop.macsales.com/Catalog_Page.cfm?Parent=1382&amp;amp;Title=iMac%20G3%20144%20Pin%20SO-DIMM%20Memory%20Upgrades&amp;amp;Template=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;archived memory advertisement&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2018-11-23T03:33:52.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8369" PostTypeId="2" ParentId="8364" CreationDate="2018-11-23T06:55:29.720" Score="21" Body="&lt;p&gt;If I recall correctly, there were lots of variations to implement this scheme. Besides embedding characters in the listing that would reboot, or clear the screen every so often, a particular one I remember worked roughly like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The listing only consisted of a single &lt;code&gt;CALL&lt;/code&gt;. The internal structure of the BASIC program was carefully changed so the listing was stopped there, but there was a lot of stuff after this single command. This call would be to an embedded machine program somewhere in the BASIC listing, which would re-arrange the structure to make the whole program visible, and also register itself with some hooks to make it invisible again. You could defeat this protection by disassembling the machine code and running part of it. Or even by pressing RESET or something at a proper time, I forgot the details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not all BASIC programs that consisted of a single &lt;code&gt;CALL&lt;/code&gt; were like this. There were also pure machine programs which disguised itself as BASIC programs in this way for some reason I never understood.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="4838" LastEditDate="2018-11-25T09:33:24.873" LastActivityDate="2018-11-25T09:33:24.873" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8370" PostTypeId="2" ParentId="5767" CreationDate="2018-11-23T10:55:54.593" Score="2" Body="&lt;p&gt;One of the missed opportunities, in the United Kingdom, was the BBC Micro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1979 Acorn was selling 6502-based eurocard kit computers, and quickly brought out a successor based on the 6809 -- often omitted from descriptions of Acorn, but you can see one here &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_6809_CPU.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_6809_CPU.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was vastly better board: CAD designed while the previous 6502 was hand-drawn, and the 6809 obviously gave access to professional operating systems Flex and OS/9.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specification for the BBC Micro was being drawn up, and my understanding was that the discussions were between Best (68000 or whatever) and Current (Z80/6502), with not much credence for Good (6809).  As the 68000 products would take too long, Acorn won with developments on its existing 6502 experience.  I have heard it rumoured that the design was done right up to the deadline and the 6809 team at Acorn lost out for very ordinary internal reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the BBC had chosen a 6809-based design, I think it would have had enormous impact on the wider deployment of this CPU. &lt;/p&gt;&#xA;" OwnerUserId="11208" LastActivityDate="2018-11-23T10:55:54.593" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8371" PostTypeId="1" AcceptedAnswerId="8376" CreationDate="2018-11-23T12:03:20.557" Score="6" ViewCount="630" Body="&lt;p&gt;From what I understand, with floating point arithmetic, shifting values up and down is important, since a floating point value essentially is an equation like 2&lt;sup&gt;e&lt;/sup&gt;×m. This supposition may be supported by &lt;a href=&quot;http://6502.org/source/floats/wozfp1.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;browsing the floating point library for the 6502, which woz written by Steve Wozniak and Ray Rankin&lt;/a&gt;. I can see that there are a few loops that go round and round and &lt;code&gt;lsr&lt;/code&gt; and &lt;code&gt;lsr&lt;/code&gt;, to prepare the mantissas for a straight addition, and then normalises the result which involves going round and round again, this time with &lt;code&gt;asl&lt;/code&gt; and &lt;code&gt;rol&lt;/code&gt;. Of course, if the 6502 could shift by more than 1, that would mean a reduction in the number of shifts required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To reduce the number of shifts in this whole process, the MANIAC-II stored only four bits for the exponent, implicitly filling to the right with zeroes. This means that the mantissa will be shifted around much further at once, which will reduce the number of loop iterations. In other words, floating point on this machine is not an equation like 2&lt;sup&gt;e&lt;/sup&gt;×m, it's an equation like c&lt;sup&gt;e&lt;/sup&gt;×m, where c is some constant power of two. &lt;a href=&quot;http://www.quadibloc.com/comp/cp0201.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Because apparently&lt;/a&gt;, on vacuum tube computers it's advantageous to reduce shifting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about relay computers? A relay has a much slower switching speed than a transistor (not sure how this compares with vacuum tubes), so I think some effort will have gone into reducing the number of shifts/rotations, like with the MANIAC-II. Konrad Zuse's computers all did floating point in hardware. I am interested in implementation details here. Did these computers need to shift numbers up and down, like the software implementation I linked to does? If yes, do the Zuse machines take any &quot;shortcuts&quot; like the MANIAC-II does?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="10260" LastEditDate="2021-05-12T03:39:34.650" LastActivityDate="2021-05-12T03:39:34.650" Title="Floating Point on Konrad Zuse's computers" Tags="&lt;floating-point&gt;&lt;zuse&gt;&lt;relay-computer&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8372" PostTypeId="5" CreationDate="2018-11-23T12:34:18.577" Score="0" Body="" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-11-23T12:34:18.577" LastActivityDate="2018-11-23T12:34:18.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8373" PostTypeId="4" CreationDate="2018-11-23T12:34:18.577" Score="0" Body="Floating point arithmetic: number formats, instruction sets, software and hardware implementations." OwnerUserId="576" LastEditorUserId="15334" LastEditDate="2021-02-19T23:02:15.387" LastActivityDate="2021-02-19T23:02:15.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8374" PostTypeId="2" ParentId="8105" CreationDate="2018-11-23T12:42:59.220" Score="5" Body="&lt;p&gt;The 6502's 16-bit address bus can address 65536 (64K) different memory locations. This memory space is shared by RAM, program code (ROM) and all input/output (video processor, sound generator, keyboard interface, etc).&lt;/p&gt;&#xA;&lt;p&gt;There are some restrictions imposed by the 6502's design: on reset it looks at the top of the address space for a pointer to executable code, so this area must be ROM. The bottom of the address space is used for zero-page registers and the CPU stack, so this must normally be RAM. The rest of the memory layout is a blank canvas, and can be defined by the designer of the computer system.&lt;/p&gt;&#xA;&lt;p&gt;Different computer designers placed components in different memory locations. On the Apple I, the cassette interface was at &amp;amp;C100, whereas on the BBC Micro it was &amp;amp;FE08. Programs would be written with explicit references to these memory locations in their code. The result of this is that they wouldn't run on other machines without being rewritten.&lt;/p&gt;&#xA;&lt;p&gt;In the same manner, an emulator needs to place these components in the memory locations used on the original machine, as that's where the software will expect to find them.&lt;/p&gt;&#xA;&lt;p&gt;It is possible to use the same 6502 CPU emulator with different interface chips and memory maps, to simulate different machines. The MAME emulator is a good example of this.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="576" LastEditDate="2021-04-29T20:40:28.443" LastActivityDate="2021-04-29T20:40:28.443" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8375" PostTypeId="2" ParentId="8371" CreationDate="2018-11-23T16:15:40.583" Score="3" Body="&lt;p&gt;there are more solutions to speed up the bit shifts in general:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;align shifts to data word&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simply use your platform WORD bit width and align your shifts to it... That means if I have an 8-bit data type I can do any multiple of 8 bit shift just by copying memory... And do the remaining bit shift one by one...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if our number to shift has 8*n bits and we want to shift by &lt;code&gt;m&lt;/code&gt; bit it will lead to single array copy with relative offset of &lt;code&gt;m/8&lt;/code&gt; and &lt;code&gt;m%8&lt;/code&gt; single bit shifts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here example using nibbles:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1111 0001 1010 1100 1101 bin &amp;lt;&amp;lt; 7&#xA;1111 0001 1010 1100 1101 bin &amp;lt;&amp;lt; (4+3) // ... so copy 1 Byte ahead&#xA;0001 1010 1100 1101 0000 bin &amp;lt;&amp;lt; 3&#xA;0011 0101 1001 1010 0000 bin &amp;lt;&amp;lt; 2&#xA;0110 1011 0011 0100 0000 bin &amp;lt;&amp;lt; 1&#xA;1101 0110 0110 1000 0000 bin&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;LUT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can have stored all the rotations in some LUT instead of rotation .. To manage modularity we can have 2 LUTs one that contains bits for the current WORDs and the second for the shifted out part ... so we can combine the results back into resulting number using OR operation...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The LUT can be small for example we can divide the number to 4bit chunks (nibble) so we need 16 possible numbers times 4 possible shifts so 64 entries and construct any bit-shift using &lt;strong&gt;#1&lt;/strong&gt; from that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;here some entries as example again for nibbles and 3 bit shift left&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// sh  value         H   L&#xA;LUT[3][0000 bin] = 0000 0000&#xA;LUT[3][0001 bin] = 0000 0100&#xA;LUT[3][0010 bin] = 0000 1000&#xA;LUT[3][0011 bin] = 0000 1100&#xA;LUT[3][0100 bin] = 0001 0000&#xA;LUT[3][0101 bin] = 0001 0100&#xA;LUT[3][0110 bin] = 0001 1000&#xA;LUT[3][0111 bin] = 0001 1100&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;both #1 and #2 can be combined leading to single pass &lt;code&gt;O(n)&lt;/code&gt; complexity (single &lt;code&gt;n&lt;/code&gt; iterations loop without any conditions just a memory access + AND of H,L parts to connect the chain... )&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;parallel demultiplexors&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These do the bit-shifting of a bus between source and target buffer in one clock cycle... These were used also back in the Relay days for telephone dialing see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.technology.niagarac.on.ca/people/mcsele/interest/telephone-switches/&quot; rel=&quot;nofollow noreferrer&quot;&gt;single-axis stepping relay switch&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Digital demultiplexors are common and if we have enough gates to spare its possible to implement fast bit-shifts with them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The draw back of this implementation is that you need to have additional buffer/register which is not the case in daisy chained bit-shift register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ylfuM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ylfuM.png&quot; alt=&quot;parallel demultiplexors&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2018-11-23T22:01:42.083" LastActivityDate="2018-11-23T22:01:42.083" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8376" PostTypeId="2" ParentId="8371" CreationDate="2018-11-23T16:44:57.307" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Konrad Zuse's computers all did floating point in hardware. I am interested in implementation details here.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The very best way here would be Raul Rojas books. Most important:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.springer.com/de/book/9783642719455&quot; rel=&quot;nofollow noreferrer&quot;&gt;Die Rechenmaschinen von Konrad Zuse&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which goes into great details about Z1/Z3 (*1) architecture, of course focusing on the FP part, but uses mostly today's notation (*3). I'm not sure if there is an English language version available. But then there is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://mitpress.mit.edu/books/first-computers&quot; rel=&quot;nofollow noreferrer&quot;&gt;The First Computers - History and Architectures&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a truly great collection of information about the earliest machines (*4). There is also a chapter about Z1/Z3 including a dozen or so pages about the internal/ALU structure. Not as detailed as the 'Rechenmaschinen' book, but still covering the parts you ask about.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did these computers need to shift numbers up and down, like the software implementation I linked to does?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, as they are integral to binary floating point.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If yes, do the Zuse machines take any &quot;shortcuts&quot; like the MANIAC-II does?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. Or rather, it was done in a more basic and general way by adding a &lt;a href=&quot;https://en.wikipedia.org/wiki/Barrel_shifter#Uses&quot; rel=&quot;nofollow noreferrer&quot;&gt;barrel shifter&lt;/a&gt; (*5). There where shifters that could move the significand up to 16 positions in a single cycle (*6). So instead of making clever workarounds to reduce shifting, he just eliminated the timing malus serial shifting carries :)) (*7)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/9041/user9041&quot;&gt;user9041&lt;/a&gt; did &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8371/floating-point-on-konrad-zuses-computers?noredirect=1#comment24881_8371&quot;&gt;point out&lt;/a&gt; two PDFs by Raul Rojas covering the Z1/Z3:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://arxiv.org/ftp/arxiv/papers/1406/1406.1886.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Z1: Architecture and Algorithms of Konrad Zuse’s First Computer&lt;/a&gt;, 2014. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://page.mi.fu-berlin.de/rojas/1996/Konrad_Zuses_Legacy.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Konrad Zuse's Legacy: The Architecture of the Z1 and Z3&lt;/a&gt;, 1996.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Maybe notable here, the Z3 is a straightforward relay implementation of the fully mechanical Z1. Something I always find striking, as it not only includes many parts that have been 'great discoveries' of later developers (*2), but also prove that a modern style binary floating point computer would have been possible even before electricity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Not just binary FP, but microprogramming, overlapping pipeline, single-step carry, barrel shifter, and more. All done by one man on a kitchen table prior to everyone else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - And explains them, when using Zuse's terms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - I think I mentioned it already but it needs to be repeated: GET THAT BOOK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - One of the speedups Intel gave to the 186/286 EU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Again it's a bit more complex, as there are multiple shifters. Further, it was 16 positions up, 15 down. Which again may sound a bit weird considering that the significand was only 14 digits - it was used (AFAIR) for sign comparison. But I may need to check again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - Comparing the solutions is almost like looking at today's software design. If there's a problem with the implementation of a task, some will add much afterthought to build quite clever workarounds, while others just tackle the underlying issue.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-11-25T09:59:14.500" LastActivityDate="2018-11-25T09:59:14.500" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8378" PostTypeId="2" ParentId="2672" CreationDate="2018-11-23T18:55:59.673" Score="9" Body="&lt;p&gt;Like others already answered: old CPUs does not have enough MIPS, and/or they are lacking instructions that would helped in MP3 decoding algorithm (remember that MP3 is standardized in 1995.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nice example of 1992. computer that can play MP3 out-of-box is e.g. Atari Falcon030 from 1992. Despite slow main CPU, MC 68030 at 16 MHz, Atari Falcon also have Motorola 56001 DSP chip (16 MIPS at 32 MHz) and he can replay MP3 at 16 bit and 44.1 kHz, even in multitasking: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two examples from Youtube:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=eFtRj79RyNo&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari Falcon 030 16Mhz MP3 Playback&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ycHGQQYoWZQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari Falcon030 play MP3 in multitasking&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11238" LastEditorUserId="6659" LastEditDate="2020-05-11T13:32:53.427" LastActivityDate="2020-05-11T13:32:53.427" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8379" PostTypeId="2" ParentId="8364" CreationDate="2018-11-24T02:52:32.250" Score="16" Body="&lt;p&gt;There were multiple ways of protecting the program, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;order of line numbers could be altered to produce:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;circular listings;&lt;/li&gt;&#xA;&lt;li&gt;missing lines;&lt;/li&gt;&#xA;&lt;li&gt;out-of-order lines;&lt;/li&gt;&#xA;&lt;li&gt;out-of-bounds addressing;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the &quot;resume&quot; flag could be set such that any command could cause the program to run again;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;the start-address for the program could be altered so that another (or none) listing would show;&lt;/li&gt;&#xA;&lt;li&gt;line-linking could be altered to run &quot;unreachable&quot; lines;&lt;/li&gt;&#xA;&lt;li&gt;the DOS interpreter accepts special characters so that slot code can be run (&quot;PR#6&quot; being the most common, but &quot;DELETE HELLO&quot; works equally well).&#xA;This sounds like what you were seeing.&lt;/li&gt;&#xA;&lt;li&gt;the code could be self-modifying as it ran.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There was also a modification to the KBDIN routine to point to the reset routine, so that if you achieved a prompt and tried to type something, the machine would reboot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a more detailed description, see section 7.20 in &quot;A Brief Description of Some Popular Copy-Protection Techniques on the Apple ][ Platform&quot; (&lt;a href=&quot;http://pferrie.host22.com/papers/apple2_prot.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://pferrie.host22.com/papers/apple2_prot.pdf&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="4476" LastActivityDate="2018-11-24T02:52:32.250" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8380" PostTypeId="2" ParentId="7148" CreationDate="2018-11-25T02:10:57.317" Score="0" Body="&lt;p&gt;Sounds like Dodgems:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OEJZG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OEJZG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was a race car game where you go around and try to pick up diamonds.&lt;/p&gt;&#xA;" OwnerUserId="548" LastActivityDate="2018-11-25T02:10:57.317" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8381" PostTypeId="1" AcceptedAnswerId="8386" CreationDate="2018-11-25T21:28:51.267" Score="5" ViewCount="505" Body="&lt;p&gt;The Apollo Guidance Computer, was built on RTL which apparently can let off a lot of heat, and deployed in environments where we cannot rely on convection to pull the heat away (not only in low gravity conditions, but also it was hermetically sealed for some reason)!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't appear to have featured a fan or anything. Yet I can not figure out if anything was done to discard the heat generated by the AGC. Or was that even necessary?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="10260" LastEditDate="2019-08-27T18:36:53.287" LastActivityDate="2019-08-27T18:36:53.287" Title="Apollo Guidance Computer and heat dissipation" Tags="&lt;apollo-guidance-computer&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8382" PostTypeId="1" AcceptedAnswerId="8383" CreationDate="2018-11-25T23:06:08.560" Score="14" ViewCount="1041" Body="&lt;p&gt;I haven't been able to find an easily comprehensible description of the super hi-res, dithered 16-color, 640x200 mode of the Apple ][gs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can tell from the references I did locate, this is a hardware supported mode of the VGC. So, the dithering effect is done in the hardware, not via software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that only 2 bits-per-pixel are used to create the sixteen colors on screen, but some of the colors aren't dithered (text foreground and background, for instance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does this work, how do you program it, and what are the limitations on palettes and adjacent pixels?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-11-26T04:14:50.437" Title="How does Apple ][gs hardware dithering work?" Tags="&lt;graphics&gt;&lt;apple-iigs&gt;&lt;color-display&gt;&lt;dithering&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8383" PostTypeId="2" ParentId="8382" CreationDate="2018-11-26T00:52:33.393" Score="9" Body="&lt;p&gt;The Apple IIgs Hardware reference explains it:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In 640-pixel mode, color selection is more complicated. The 640 pixels in each horizontal line occupy 160 adjacent bytes of memory, each byte representing 4 pixels that appear side-by-side on the screen. The 16 colors in the palette are divided into four groups of 4 colors each. The first pixel in each horizontal line can select one of 4 colors from the third group of 4 in the palette. The second pixel selects from the fourth group of 4 colors in the palette. The third pixel selects from the first group of 4 colors, and the fourth pixel selects from the second group, as shown in Table 4-21. The process repeats for each successive group of 4 pixels in a horizontal line. Thus, even though a given pixel can be one of 4 colors, different pixels in a line can take on any of the 16 colors in a palette.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;------------------------------------------------------&#xA;                 Palette                      Palette&#xA;Pixel    Value   color       Pixel    Value   color&#xA;------------------------------------------------------&#xA;3         0      0           1         0      8       &#xA;          1      1                     1      9       &#xA;          2      2                     2      10       &#xA;          3      3                     3      11       &#xA;4         0      4           2         0      12       &#xA;          1      5                     1      13       &#xA;          2      6                     2      14       &#xA;          3      7                     3      15       &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Apple IIgs Toolbox Reference Volume II explains the standard 640 mode palette:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;------------------------------------------------------------------------&#xA;                       Minipalette                         Minipalette&#xA;Offset  Color   Value  offset       Offset  Color   Value  offset&#xA;------------------------------------------------------------------------&#xA;0       Black   000    0            8       Black   000    0            &#xA;1       Blue    00F    1            9       Blue    00F    1            &#xA;2       Yellow  FF0    2            10      Yellow  FF0    2            &#xA;3       White   FFF    3            11      White   FFF    3            &#xA;4       Black   000    0            12      Black   000    0            &#xA;5       Red     D00    1            13      Red     D00    1            &#xA;6       Green   0E0    2            14      Green   0E0    2            &#xA;7       White   FFF    3            15      White   FFF    3           &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Note: The entries in the minipalettes for the standard 640-mode color table are set up so black and white appear in the same positions in each palette. This provides pure black and white at full 640 resolution, allowing crisper text display.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The standard color dither together to form these 16 colors:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;------------------------------&#xA;Pixel                    Dithered&#xA;value   Name             components&#xA;-------------------------------&#xA;0       Black            black, black&#xA;1       Dark blue        black, blue&#xA;2       Olive            black, yellow&#xA;3       Grey1            black, white&#xA;4       Red              red, black&#xA;5       Purple           red, blue&#xA;6       Orange           red, yellow&#xA;7       Pink             red, white&#xA;8       Green            green, black&#xA;9       Aquamarine       green, blue&#xA;10      Lime green       green, yellow&#xA;11      Light green      green, white&#xA;12      Grey2            white, black&#xA;13      Cornflower blue  white, blue&#xA;14      Light yellow     white, yellow&#xA;15      White            white, white&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PpW4d.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PpW4d.png&quot; alt=&quot;Dithered colors&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/XkItE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XkItE.png&quot; alt=&quot;Dithered colors, enlarged&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To summarize, 320 mode uses a palette of 16 colors.  640 mode splits it up into 4 mini palettes of 4 colors. The palette used is based on the pixel position.  With dithering, you can pretend to have 16 colors (but at a 320 resolution). With the standard desktop colors, black and white are available in all 4 mini palettes so they are available at any pixel for true 640 resolution.&lt;/p&gt;&#xA;" OwnerUserId="3261" LastEditorUserId="3261" LastEditDate="2018-11-26T04:14:50.437" LastActivityDate="2018-11-26T04:14:50.437" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8384" PostTypeId="1" AcceptedAnswerId="8391" CreationDate="2018-11-26T09:46:39.720" Score="17" ViewCount="2090" Body="&lt;p&gt;The Commodore 1541 disk drive and other IEC devices are self-contained computers. The operating system runs on the drive itself. This setup significantly improves the flexibility. As a side effect, if there is an error during a disk operation, the computer doesn't know about it. Only the drive knows. You had to open the error channel and listen for error codes to check errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you open the error channel and multiple files at the same time, all open files are closed when you close the error channel. Thanks to this fail-proof mechanism, if you encounter a disk error while working with several files, you can close the error channel and safely quit the program without knowing which files are open. You don't have to keep track of open files, since they all will be closed automatically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the 1541 user manual says that automatically closing files in this way is dangerous because BASIC doesn't know they were closed and &lt;strong&gt;this is a very dangerous situation!&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is the danger involved in trying to write a file that's already closed? The only risk I see is getting a write error.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've copied the warning from the 1541 users manual below:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If you close the error channel while other files are OPEN, the disk&#xA;  drive will CLOSE them for you, but BASIC will still think they are&#xA;  open (unless you CLOSE them properly), and let you to try to write to&#xA;  them.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;NOTE: If your BASIC program leads you into an error condition, all&#xA;  files are CLOSED in BASIC, without CLOSEing them on your disk drive!&#xA;  This is a very dangerous condition. You should immediately type the&#xA;  statement CLOSE 12: OPEN 15, 8, 15: CLOSE 15. This will re-initialize&#xA;  your drive and make all your files safe.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="576" LastEditDate="2018-11-26T09:59:59.497" LastActivityDate="2018-11-27T19:57:00.197" Title="What is the danger involved in trying to write already closed file with Commodore 1541 disk drive?" Tags="&lt;disk-drive&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8385" PostTypeId="2" ParentId="8384" CreationDate="2018-11-26T11:29:00.850" Score="20" Body="&lt;p&gt;Just based on the reading, I think you may be misunderstanding the &lt;em&gt;sense&lt;/em&gt; of the warning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You appear to think that the problem is with the &lt;em&gt;disk&lt;/em&gt; system closing the files (because you have closed the error channel) and &lt;code&gt;BASIC&lt;/code&gt; not knowing about it. I suspect in that case you probably &lt;em&gt;would&lt;/em&gt; just get an error if you later tried to access them&lt;sup&gt;(a)&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the &quot;danger&quot; bit looks like it's the &lt;em&gt;other&lt;/em&gt; sense, with &lt;code&gt;BASIC&lt;/code&gt; erroring out (closing its files) but without having closed the files on the disk system. If you re-read the warning (my bold), that may be clearer:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;NOTE: If your &lt;strong&gt;&lt;em&gt;BASIC&lt;/em&gt;&lt;/strong&gt; program leads you into an error condition, all files are &lt;strong&gt;&lt;em&gt;CLOSED in BASIC, without CLOSEing them on your disk drive!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This, I'd hazard to guess, &lt;em&gt;may&lt;/em&gt; be dangerous because the disk still has them open and it's unclear what would happen then if they were reopened by &lt;code&gt;BASIC&lt;/code&gt;, or if they were cached and you powered down, or if the administrative information on the disk weren't updated, or possibly half a dozen other suspect scenarios I could come up with if I had the time and inclination :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;That's&lt;/em&gt; why it's suggesting you execute that (rather arcane) sequence of commands, to safely re-initiliase the disk system and put it in a known state. And, &lt;em&gt;before&lt;/em&gt; you go trying this, you should be aware that there's no &lt;code&gt;file # 12&lt;/code&gt; involved anywhere. The reset command is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CLOSE 15: OPEN 15, 8, 15: CLOSE 15&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;(a)&lt;/sup&gt; Though I can't be &lt;em&gt;sure,&lt;/em&gt; having never had the opportunity to even own a C64 - my babies were ZX80, TRS-80, Apple ][ and the very-little-known COMX-35. However, I'm considered &lt;em&gt;reasonably&lt;/em&gt; good at decoding documentation, hence my answer.&lt;/p&gt;&#xA;" OwnerDisplayName="user6464" LastEditorDisplayName="user6464" LastEditDate="2018-11-27T00:44:26.783" LastActivityDate="2018-11-27T00:44:26.783" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8386" PostTypeId="2" ParentId="8381" CreationDate="2018-11-26T15:45:05.953" Score="12" Body="&lt;p&gt;Both guidance computers (command module and lunar module) were essentially the same.  They were the first flight computers built with integrated circuits, all dual 3-input NOR gates.  The top sides of the chips were attached to &quot;cold plates&quot; which were attached to extruded aluminum &quot;cold rails&quot; which had channels for a glycol coolant to flow through.  The primary and backup coolant loops were part of the ship-wide environmental control system:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2.1.2.4   GN&amp;amp;CS - ECS Interface.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The Environmental Control Subsystem (ECS) provides thermal stability for the temperature-sensitive electronic equipment of the GN&amp;amp;CS.  The electronic equipment (except the IMU) is mounted on cold plates and rails through which ECS coolant (ethylene glycol-water solution) is routed to remove heat. To cool the IMU, the coolant flows through its case.  The heat that is removed from the equipment is vented overboard by the ECS sublimators.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Apollo Operations Handbook: Lunar Module&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Although the paragraph quoted above is for the lunar module, the command module has the same computer and glycol cooling loops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, the early plan for Apollo was to carry spare computers that the astronauts could swap out in case the computer failed.  However, during testing, the above-noted liquid coolant would leak and was difficult to re-seal.  This contributed to the decision to keep the computers permanently wired (along with weight considerations and the excellent reliability of the hardware).  The swapable units that were already built were used on the unmanned Apollo test flights, with hardwired units for all of the manned flights.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2018-11-26T15:45:05.953" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8388" PostTypeId="1" CreationDate="2018-11-27T09:13:50.757" Score="4" ViewCount="531" Body="&lt;p&gt;Here is the Valvo 2650. (Also known by other names, in the UK as Signetics 2650).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What struck me about this image is the amount of empty space! If you look at a modern-day chip, say a Skylake or whatever, there are not going to be large gaps between the gates. The 555 has a lot of space also. I looked at the ARM 1 die, and though not as extreme, I saw similar spaces. It doesn't appear to be for manufacturing reasons; they clearly have a high enough &quot;resolution&quot; (is that the right word) to make intricate structures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's more as though the traces were laid out manually, and arranged neatly. I guess that's because the traces actually &lt;em&gt;were&lt;/em&gt; laid out manually, and arranged neatly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in the picture below, it looks to me as though they could easily have bunched things up a bit to take less space. I believe that would have meant they could fit another few dies on the wafer, increasing yield and decreasing cost. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what is the reason they used to leave those spaces, and why does that reason not hold now? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/X10Uy.jpg&quot; alt=&quot;Valvo 2650&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-11-27T11:50:18.053" LastActivityDate="2018-12-07T02:18:19.987" Title="What's with the empty space on this die?" Tags="&lt;hardware&gt;&lt;chip&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8390" PostTypeId="2" ParentId="8388" CreationDate="2018-11-27T15:38:35.900" Score="10" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What struck me about this image is the amount of empty space!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have a hard time seeing much empty space here. These are mainly a lot of small areas each defined through the gate structure. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If you look at a modern-day chip, say a Skylake or whatever,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I guess you have some pictures in mind where a whole Skylake is shown about the same size than the 2650. This leads to some easy misconceptions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just think of it, the 2650 is what? 10µm or maybe 8µm and is maybe 20mm² big? A 2014 Skylake is more like 14nm and 200+mm². So that's ~10 times the chip size with ~250,000 times smaller gates. So if the picture above is maybe 20cm wide (on your screen or when printed), to get a similar view of Skylark structures, you need to print it out 10,000 cm wide - that's 100m or 300 ft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compared it at that scale, you will notice, that 'seemingly' unused areas on a Skylark are &lt;em&gt;way&lt;/em&gt; larger than with the 2650 above. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;there are not going to be large gaps between the gates.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's not between, rather within.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It doesn't appear to be for manufacturing reasons;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, there are those as well. The main reasons are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Most importantly, (for small ones) the number of pads. Pads have to have a certain minimum size to make sure the bonding (soldering) machine can put a connection wire without damaging any surrounding structures.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It is a &lt;em&gt;very&lt;/em&gt; good idea to reduce corners to a minimum (*1). Each corner does not only introduce noise and reduce speed, but is as well a critical area for etching errors. Less bends mean higher yield.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Then there is signal travel time. in silicon we reach less than half of light speed, on a chip with like 5mm across, a signal already takes about ~7ps to go from one end to the other. Doesn't sound like much, but it adds up when signals have to get routed several times across to pack a structure tighter.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Last but not least, back then most had only two metallic layers (*2). Today, even the cheapest low density processes offer 4 metallic layers, most have 6+ and high end process have 8 or more. It's exactly the same as with PCB design (*3). The more layers, the denser the packaging can be, as less space is required for routing connections (*4).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I guess that's because the traces actually were laid out manually, and arranged neatly.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Neat layouts are usually also the best (*5). It's a situation where our sense for beauty meets with usefulness.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But in the picture below, it looks to me as though they could easily have bunched things up a bit to take less space.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It wouldn't have freed up much space, so no space to squeeze in more functionality.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I believe that would have meant they could fit another few dies on the wafer, increasing yield and decreasing cost.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;First of all, that's only a straight payout if increased cost for design, testing and potential higher defects (due more complex structure).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the above photo it's rather clear that there wouldn't have been much size reduction possible. Even when ignoring the size request for pads, there is in each direction a structure that will need the full height or width. Layout of this structure is defined by it's working, so mirroring it or flipping it to combine 'holes' in one area would result in a greatly increased surface need, as now busses would have to be rerouted. Not to mention speed decrease due a longer signalling path. The 2650 seems to be already a very neat one with its few and clean bus structures.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So what is the reason they used to leave those spaces, and why does that reason not hold now?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again a misconception. Today, the relative gaps are way larger. Not at least due the use of premade, laid-out blocks. It's just due to the much smaller structures that it doesn't show up as obviously.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - No matter if it's with PCBs or chips - in the latter it's even more important.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - At least in the affordable range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - after all, the metallic connection layers &lt;strong&gt;are&lt;/strong&gt; the PCB of a chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Which again is a way to achieve (or keep) high speeds, possible because of connections being as direct as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - This does &lt;em&gt;not&lt;/em&gt; include such with additions made for beauty. Like everywhere, form follows function - and adding to that will reduce the synergy.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-11-27T16:07:03.067" LastActivityDate="2018-11-27T16:07:03.067" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8391" PostTypeId="2" ParentId="8384" CreationDate="2018-11-27T19:45:23.050" Score="6" Body="&lt;p&gt;In what might be borderline as acceptably a separate answer from paxdiablo, cf. &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#DB02&quot; rel=&quot;noreferrer&quot;&gt;the 1541 ROM disassembly&lt;/a&gt;. It's fully commented, so the following comments are a companion's guide to draw your attention to what I think are the relevant bits, see the full thing for a more thorough treatment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main dispatch loop, which listens to the serial bus and acts upon incoming commands, starts at &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#E85B&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;E85B&lt;/code&gt;&lt;/a&gt;. Notice at &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#E8CE&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;E8CE&lt;/code&gt;&lt;/a&gt; that it'll segue to &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#DAC0&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;DAC0&lt;/code&gt;&lt;/a&gt; if a &lt;code&gt;CLOSE&lt;/code&gt; is received.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That code treats &lt;code&gt;15&lt;/code&gt; as a special case — if that's received it'll just count down from 14 to 0 calling close file on each; that's the loop that is seeded at &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#DAEC&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;DAEC&lt;/code&gt;&lt;/a&gt; and then consists of &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#DAF0&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;DAF0&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#DAF3&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;DAF3&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#DAF5&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;DAF5&lt;/code&gt;&lt;/a&gt;. For any regular channel it jumps straight to the close file routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The close individual file routine is at &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#DB02&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;DB02&lt;/code&gt;&lt;/a&gt; but an immediate corollary:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the ROM itself treats a request to close all as a simple sequence of &lt;code&gt;CLOSE 14&lt;/code&gt;, &lt;code&gt;CLOSE 13&lt;/code&gt; ... &lt;code&gt;CLOSE 0&lt;/code&gt;. The outer loop doesn't check whether the files are open, and it ends up at exactly the same place as if you'd typed &lt;code&gt;CLOSE X&lt;/code&gt;. &lt;strong&gt;Therefore one can assume a priori that it is safe to close files that aren't open&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;One doesn't really need to assume though; check out the test from &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#DB04&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;DB04&lt;/code&gt;&lt;/a&gt;: is there actually anything associated with this channel? If not, stop harmlessly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Re: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;all files are CLOSED in BASIC, without CLOSEing them on your disk drive! This is a very dangerous condition.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and the implication that CLOSEing does something meaningful on the disk drive, skip ahead to &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#DB20&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;DB20&lt;/code&gt;&lt;/a&gt;. From there there's a sequence of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;write last block;&lt;/li&gt;&#xA;&lt;li&gt;write entry in directory and block;&lt;/li&gt;&#xA;&lt;li&gt;write BAM (the table of which blocks on the disk are unoccupied);&lt;/li&gt;&#xA;&lt;li&gt;close channel and exit this routine.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Followed by a separate:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;get buffer number;&lt;/li&gt;&#xA;&lt;li&gt;write block.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The various selection parts between &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#DB04&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;DB04&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#DB20&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;DB20&lt;/code&gt;&lt;/a&gt; just make a selection about which of those they start with. But all paths go through at least one 'write'; specifically:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the last block and directory are skipped if you're involved in direct access, i.e. not performing file operations; and&lt;/li&gt;&#xA;&lt;li&gt;the get buffer number/write block path is taken, ignoring the directory and BAM, if you're dealing with a REL file, which are specially allocated to be contiguous so there's no further global bookkeeping once the thing exists.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So for non-REL files, failure to close may lead to the data at the end potentially being missing, and the directory and BAM not being updated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For REL files, failure to close may lead to the particular section of the file you were working on not being updated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Re: attempting to write to a file that isn't open, start at &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#CFF1&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;CFF1&lt;/code&gt;&lt;/a&gt;; that jumps to &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#C1C8&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;C1C8&lt;/code&gt;&lt;/a&gt; if no such file is open, which does as you expect by heading off to &lt;a href=&quot;http://www.ffd2.com/fridge/docs/1541dis.html#E645&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;E645&lt;/code&gt;&lt;/a&gt; harmlessly to report an error.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2018-11-27T19:57:00.197" LastActivityDate="2018-11-27T19:57:00.197" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8392" PostTypeId="2" ParentId="8328" CreationDate="2018-11-27T22:56:36.943" Score="7" Body="&lt;p&gt;Sorry to come late to this party.  One thing to note is that, in order to use the DRAM in the way that the Cromemco Cyclops does, it must be a design with a non-destructive read.  The 4008 parts (both AMI and Mostek) are three transistor per cell DRAM designs with non-destructive reads.  One other piece of information that I can provide is that, on an S-100 bus system with a 2MHz 8080 processor, transferring the captured image real time to a Dazzler display, the frame rate tops out at about four frames per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see some additional information and pretty pictures at:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wsudbrink.dyndns.org:8080/cyclops/index.html&quot; rel=&quot;noreferrer&quot;&gt;http://wsudbrink.dyndns.org:8080/cyclops/index.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11257" LastActivityDate="2018-11-27T22:56:36.943" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8393" PostTypeId="1" CreationDate="2018-11-28T00:09:43.553" Score="3" ViewCount="332" Body="&lt;p&gt;A robot I can't find information on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;CORRECTION&lt;/strong&gt;&lt;br&gt;&#xA;  -  The article and or advertisement was in 1986 ( not 1985 ) .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I noticed an article and or advertisement in 1986, in the main city-wide newspaper ('mercury') in the city where this robot-factory was located.&#xA;( I don't have access to archives, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there was also an advertisement, it was not in the small-ads, it was on a page the same as or near the article .&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Here's their webpage with some of their robots, in the page-source-code for that page you can see more text about the robot-pictures: &lt;a href=&quot;http://www.southcom.com.au/~robot/robot.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.southcom.com.au/~robot/robot.html&lt;/a&gt;  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The robot in the article and/or advertisement in 1986,  was a  home-hobby-robot  or  home-robot  that had one or two cameras built-in.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;It claimed (from memory, not sure if I'm 100% correct) to have object-recognition using the camera/cameras-?, and various other things.&lt;/li&gt;&#xA;&lt;li&gt;I don't know if it also included the area-mapping that some of their other robots did.&lt;/li&gt;&#xA;&lt;li&gt;It may or may not, have looked like their Chester or T-Bot robot or some type of similar looking robot.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Both the advertisement and or article, were published in the same paper/publishing-date.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;This company also made various other hobby or home robots, that I know nothing about.&#xA;They were on a similar level to the Androbot company robots like &lt;a href=&quot;https://en.wikipedia.org/wiki/Topo_(robot)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Topo&lt;/a&gt;, which were RC or infrared controlled from home-computers, however, the robots from the company in the newspaper article seemed to be more advanced since they were autonomous.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A copy of that article and or advertisement is the reason for posting this question, it would confirm what I remember .&lt;/p&gt;&#xA;" OwnerUserId="11197" LastEditorUserId="11744" LastEditDate="2019-03-07T08:26:06.183" LastActivityDate="2019-03-07T08:26:06.183" Title="Can you tell me more about this robot?" Tags="&lt;robotics&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8394" PostTypeId="2" ParentId="7870" CreationDate="2018-11-28T12:55:31.263" Score="3" Body="&lt;p&gt;In the era of the original IBM PC (early 1980s), home computers would often use many chips of RAM (eight or more) to provide the system's memory. These would either be soldered directly to the motherboard, or fitted in individual sockets. (The inline memory modules or SIMMs/DIMMs we see today, with several RAM chips soldered to a removable board, came years later.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory chips can fail in a variety of different ways. For example, they might always output some fixed value, fail to retain or refresh stored data, write or read data to/from the wrong location, or something else entirely. Some errors will stop the operating system from booting correctly, others may only show up later when running your software (and potentially corrupting your important data!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To avoid this happening, the IBM PC's BIOS runs a series of read and write tests on its memory during the Power ON Self-Test (POST), before handing over to the operating system. If an error is detected, a message is displayed on-screen which a technician can use to determine the faulty chip. (In a fully expanded IBM PC, there'd be 36 AM9016 memory chips; finding a faulty chip by trial-and-error would be time consuming.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As mentioned in the question, the more RAM fitted to a machine, the longer it takes to test all memory locations in that RAM. Because nobody enjoys waiting for their computer to boot, the option to skip the extended memory test was included. Improved manufacturing techniques meant fewer RAM chip errors, and it was often the case that a detected RAM fault was caused by a RAM chip that had become loose in its socket, a phenomenon known as &quot;chip creep&quot;. Frustration with this situation led to the introduction of SIMMs, which were held in position more reliably, and also saved space on the motherboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because memory tests were becoming slower, and faults were becoming rarer, manufacturers changed the default to &lt;em&gt;not&lt;/em&gt; running a memory test during POST. (A faster boot-time would be a marketing advantage.) The BIOS option is still available on modern machines, usually named &quot;fast boot&quot; or similar.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2018-11-28T12:55:31.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8395" PostTypeId="1" AcceptedAnswerId="8400" CreationDate="2018-11-28T17:18:06.760" Score="2" ViewCount="526" Body="&lt;p&gt;The way I understand it, Nintendo's engineers couldn't figure out how to design a disk system for the SNES, so they commissioned Sony to do it for them. Why would Nintendo do this if they already had this technology in the Famicom (which had a disk system)?&lt;/p&gt;&#xA;" OwnerUserId="10751" LastActivityDate="2018-11-28T20:33:32.393" Title="Why did Nintendo commission Sony to create a disk reader if the Famicom already had one?" Tags="&lt;nintendo&gt;&lt;disk-drive&gt;&lt;snes&gt;&lt;famicom&gt;&lt;sony&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8396" PostTypeId="1" AcceptedAnswerId="8403" CreationDate="2018-11-28T17:22:55.630" Score="5" ViewCount="789" Body="&lt;p&gt;I am a computer science student.  I mostly work with computers and I am really wondering about the layout of keys in a keyboard.  It is comfortable and easy.  My question is this: what is the basic logic behind the key layouts in keyboard?  Who presented this concept?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Clarification:&lt;/strong&gt; Let's limit the scope of this question to the QWERTY keyboard layout.  This is consistent with the two answers already given.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To avoid the question from being too broad, the history of AZERTY, Dvorak, and other commercially-sold layouts ought to be separate questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One could also design their own custom layout.  The question of how one would make the choices to do that is primarily opinion-based, and therefore unsuitable for a StackExchange question.&lt;/p&gt;&#xA;" OwnerUserId="11260" LastEditorUserId="10260" LastEditDate="2018-11-29T20:12:14.040" LastActivityDate="2018-12-04T11:15:25.967" Title="What is the basic logic behind the setting or ordering of keys in a keyboard?" Tags="&lt;hardware&gt;&lt;keyboards&gt;" AnswerCount="4" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8398" PostTypeId="1" AcceptedAnswerId="8402" CreationDate="2018-11-28T17:53:21.633" Score="6" ViewCount="242" Body="&lt;p&gt;I currently have Apple Pascal (and Fortran, and PILOT) running on an Apple IIgs emulator on Windows. As near as I can tell, it's UCSD p-System II.something. I also have a DOS-hosted UCSD p-System, IV.something, running in DOSBox. I have tools to extract and inject files from both systems' emulated disk volumes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will CODE (pcode 'executables') files from the II. p-System run correctly on the IV. p-System? I understand that there may be IV. capabilities that programs written with the II. compilers may not be able to access.&lt;/p&gt;&#xA;" OwnerUserId="4088" LastEditorUserId="15334" LastEditDate="2021-02-18T10:11:10.620" LastActivityDate="2021-02-18T10:11:10.620" Title="Cross-Compatibility of UCSD p-Machine Versions?" Tags="&lt;file-format&gt;&lt;pascal&gt;&lt;ucsd-p-system&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8399" PostTypeId="2" ParentId="8396" CreationDate="2018-11-28T18:23:53.730" Score="7" Body="&lt;p&gt;The keyboard layout was invented before computers - it was already used with mechanical typewriters that did not even use electricity!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read that such mechanical typewriters could get problems (maybe even get damaged) when certain keys were pressed quickly after each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say the first two keys (&quot;Q&quot; and &quot;W&quot; on modern keyboards) are such a pair of keys which may cause problems if pressed quickly after each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the keyboard layout was &quot;QUERTY&quot; instead of &quot;QWERTY&quot; it would happen very often that the keys &quot;Q&quot; and &quot;U&quot; are typed quickly after each other (because in European languages every &quot;Q&quot; is followed by an &quot;U&quot;) while it nearly never happens that a &quot;Q&quot; is following a &quot;W&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So using a mechanical typewriter you would have problems very, very often using a &quot;QUERTY&quot; layout but a &quot;QWERTY&quot; layout does not cause problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've read that typewriter manufacturers investigated which letters often occur after each other and designed the keyboard layout in a way that such letters are explicitly placed on keys which could be pressed shortly after each other without causing problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later on - when electrical typewriters and computers were introduced - they did not change the keyboard layouts because people were already used the existing layouts.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2018-11-28T18:23:53.730" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8400" PostTypeId="2" ParentId="8395" CreationDate="2018-11-28T18:54:53.103" Score="3" Body="&lt;p&gt;The two disk systems' technology were completely different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Famicom's disk system used a magnetic-storage floppy disk, which (according to Wikipedia) had a total capacity of 112 kilobytes (56kB per side). These were also known as &lt;strong&gt;Super Disks&lt;/strong&gt;. Even when launched in 1986, this was relatively small: since 1984 IBM's PC-AT could store 1.2MB on a 5 1/4&quot; floppy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Nintendo approached Sony to design a CD-based expansion for the Super Nintendo, they were looking at a medium that could hold &lt;em&gt;hundreds&lt;/em&gt; of megabytes of data, potentially including in-game audio and video tracks. The data format developed for this add-on was confusingly known as &lt;strong&gt;Super Disc&lt;/strong&gt;, but the underlying technology bore no similarity to the Famicom's add-on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to why Nintendo chose to work with an external company to develop a CD-based system, that is another matter entirely. It is notable that Sega developed such an add-on (known as the Sega CD or Mega-CD) in-house, and it was successfully manufactured and sold worldwide, though the games for it met with mixed reviews.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2018-11-28T20:33:32.393" LastActivityDate="2018-11-28T20:33:32.393" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8401" PostTypeId="2" ParentId="8082" CreationDate="2018-11-28T20:31:23.683" Score="1" Body="&lt;p&gt;One hurdle in your way is finding a suitable PCI card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early days of PCs, most interfaces such as serial ports, hard drive controllers and floppy disk controllers were on separate ISA expansion cards. In the 386 and 486 era, miniaturisation meant that many of these functions could be provided on a single expansion card, commonly known as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Super_I/O&quot; rel=&quot;nofollow noreferrer&quot;&gt;Super-IO&lt;/a&gt; card. Manufacturers of SCSI interface cards, such as Adaptec, included floppy controllers on some of their cards, such as the &lt;a href=&quot;https://adaptec.com/en-us/support/_eol/isa/aha-1542/&quot; rel=&quot;nofollow noreferrer&quot;&gt;AHA-1542&lt;/a&gt;. This meant that the user didn't need a separate card for their floppy drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the times of the PCI bus, most motherboard manufacturers had started to include a Super-IO chip on the motherboard itself. There was thus no demand for PCI Super-IO expansion cards, and there would likewise be no need for SCSI interface manufacturers to include a duplicate floppy interface on their cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've spent a few years looking for a PCI-based floppy solution, and have come to the conclusion that no such card was ever manufactured.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternative solutions include using a USB floppy controller such as the &lt;a href=&quot;http://www.deviceside.com/fc5025.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;FC5025&lt;/a&gt;, which can read (but not write) 5.25&quot; floppies, or developing your own solution, combining a &lt;a href=&quot;http://www.voxtechnologies.com/embedded-solutions/pc-104/ar-b104a&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCI-ISA bridge&lt;/a&gt; with an old ISA floppy controller card. Or getting an older motherboard that still supports 5.25&quot; drives.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="3748" LastEditDate="2019-04-18T09:32:04.060" LastActivityDate="2019-04-18T09:32:04.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8402" PostTypeId="2" ParentId="8398" CreationDate="2018-11-28T20:33:48.067" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Will CODE (pcode 'executables') files from the II. p-System run correctly on the IV. p-System?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Quick answer: &lt;strong&gt;No&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The roman numeral (I..IV) of the p-code system denotes the underlying p-code engine. They are incompatible with each other. Even though they are quite similar, the binary representation changed with each version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making them not (upward) compatible is eventually the real reason why the UCSD system vanished. After all, the major benefit of a virtual machine is binary portability across generations and machines.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I understand that there may be IV. capabilities that programs written with the II. compilers may not be able to access.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, they really rearranged opcodes. Programs are (mostly) upward portable on source level, but not the binary produced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the POV of an academic project, this incompatibility may be a minor issue, as it was always about the features, but for a commercially viable standard environment, it'll be like a death sentence.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorDisplayName="user6464" LastEditDate="2018-11-28T22:51:50.173" LastActivityDate="2018-11-28T22:51:50.173" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8403" PostTypeId="2" ParentId="8396" CreationDate="2018-11-28T21:24:22.873" Score="9" Body="&lt;p&gt;An article from the Smithsonian museum suggests a more complex history, and describes the &quot;avoiding common letter pairs&quot; as debunked by the fact that ER is a very common pairing.  It suggests that perhaps the profitable training courses helped lock the users to particular manufacturers, and also describes some 2011 research which suggests that Morse code transcribers, an important early set of users, drove some of the design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.smithsonianmag.com/arts-culture/fact-of-fiction-the-legend-of-the-qwerty-keyboard-49863249/?no-ist&quot; rel=&quot;noreferrer&quot;&gt;https://www.smithsonianmag.com/arts-culture/fact-of-fiction-the-legend-of-the-qwerty-keyboard-49863249/?no-ist&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The history of typewriters is well studied by industrial historians.  For a trail into that world, this academic journal article covers the literature&#xA;Kroemer, K. UAIS (2001) 1: 99. &#xA;&quot;Keyboards and keying An annotated bibliography of the literature from 1878 to 1999&quot;&#xA;&lt;a href=&quot;https://doi.org/10.1007/s102090100012&quot; rel=&quot;noreferrer&quot;&gt;https://doi.org/10.1007/s102090100012&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11208" LastEditorUserId="11208" LastEditDate="2018-11-29T16:49:32.567" LastActivityDate="2018-11-29T16:49:32.567" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8405" PostTypeId="1" AcceptedAnswerId="8407" CreationDate="2018-11-29T15:27:04.217" Score="9" ViewCount="1783" Body="&lt;p&gt;I recently discovered the &lt;a href=&quot;https://en.wikipedia.org/wiki/Osborne_1#Operating_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;Osborne 1&lt;/a&gt; computer, and I noticed it had two floppy disc drives. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the purpose of including two drives? &lt;/p&gt;&#xA;" OwnerDisplayName="user11265" LastEditorUserId="447" LastEditDate="2018-11-30T14:44:46.083" LastActivityDate="2018-11-30T14:44:46.083" Title="Purpose of two disk drives on the Osborne 1" Tags="&lt;hardware&gt;&lt;floppy-disk&gt;&lt;cp-m&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8406" PostTypeId="2" ParentId="8405" CreationDate="2018-11-29T15:46:16.057" Score="1" Body="&lt;p&gt;Since the computer only has disk drives and no hard-disk, the normal usage was to have the system programs and a word processor or database handler on one diskette and using the other for data or documents.&#xA;Those drives were single side, single density as standard, which gave a storage capacity of somewhere around 100 kBytes each.&lt;/p&gt;&#xA;" OwnerUserId="10565" LastActivityDate="2018-11-29T15:46:16.057" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8407" PostTypeId="2" ParentId="8405" CreationDate="2018-11-29T15:46:45.203" Score="26" Body="&lt;p&gt;Remember that these systems (not only the Osborne 1) didn't have harddisks. Everything ran from floppies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So usually you had one floppy where the program was on, together with OS related files. And another floppy for your data, texts and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That was workable with two drives, but still was impractical if you wanted to copy data. Usually there was some way to load a program and then use the first drive for a second data disk while doing the copying, but then you had to re-insert the system disk etc. So a third drive wouldn't have been too bad (but few systems had one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TL;DR: You could never have enough floppy drives. Working with one floppy drive was a pain sometimes because you often had to switch disks; working with two was enough for most cases; and sometimes more than two would have been nice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same was true for other systems like the DEC PDP-8, which used DEC tapes pretty much the same way floppies were used on CP/M systems. And there were tape controllers which allowed for four tape drives. This was there for a reason...&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2018-11-29T15:46:45.203" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8408" PostTypeId="2" ParentId="8405" CreationDate="2018-11-29T15:51:07.980" Score="2" Body="&lt;p&gt;The Osborne 1, like many computers of the time, had no means of data storage other than floppy disks. On powering up, the user would be prompted to insert the operating system disk, so the machine could boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even when running other software, the computer would need to access and run parts of the OS periodically. If you only had one floppy drive, you'd have to continuously eject and insert the OS disk and your data disk when running some commands. It was far more desirable to have two drives available, so the OS disk could be left in one drive for most of the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having two floppy drives also speeds up copying files between different disks, but this is a secondary benefit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The provision of two floppy drives was also common with other machines, such as the IBM PC and the BBC Micro (though the latter had its OS in a ROM on the motherboard). When hard drives were installed in computers, the OS could be installed there, and there was no longer such a benefit from having a second floppy drive.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2018-11-29T15:51:07.980" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8409" PostTypeId="1" AcceptedAnswerId="8419" CreationDate="2018-11-29T16:29:51.470" Score="3" ViewCount="288" Body="&lt;p&gt;In (S)GML ancestor's IBM SCRIPT/VS, what does DSM stand for in macros DSMFIG, DSMLIST... ?&lt;/p&gt;&#xA;" OwnerUserId="11266" LastActivityDate="2018-11-30T13:11:57.820" Title="In IBM SCRIPT/VS, what does DSM stand for in macros DSMFIG, DSMLIST" Tags="&lt;ibm&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8410" PostTypeId="2" ParentId="8405" CreationDate="2018-11-29T16:32:13.017" Score="5" Body="&lt;p&gt;Note CP/M (the Operating system of the Osborne) didn't have subdirectories as we know today (which more or less forced you to dedicate a disk for a specific purpose in order to keep the overview), it also had very limited storage capacity per disk drive (~180k on a SS/SD disk as on the Osborne 1). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means you typically held the application (for example &lt;em&gt;WordStar&lt;/em&gt;, with a typical disk footprint of ~50-60kBytes) on one drive on a write-protected disk (in case it had to load overlays or messages) and the actual text you were working on on a disk in the other drive (the &lt;em&gt;working disk&lt;/em&gt;). If you didn't want to be forced to constantly swap disks, you also put the operating system files on your program disk which also took some of the capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You &lt;em&gt;could&lt;/em&gt; have worked with only one drive, but that was much more cumbersome and carried the risk of destroying your program disk (because that could not be write-protected, then) or you had to change disks occasionally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously copying between disks was much simpler with a 2-drive setup, as others have mentioned.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2018-11-29T16:37:26.580" LastActivityDate="2018-11-29T16:37:26.580" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="8412" PostTypeId="1" CreationDate="2018-11-29T20:22:09.987" Score="8" ViewCount="1747" Body="&lt;p&gt;I came across my old Zip drive and some Zip disks.  I am curious what is on the disks, but my Windows system won't run them.  Back in the day I thought that these would be the ultimate in archive storage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is there an OS (Linux?) that might still be able to run Zip drives and read the data?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seems like my question should be a Haiku:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Old Zip Drive Don't run&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;once was nice choice of Archives&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;How Much have we lost?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Or&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Perfect OS is Needed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(I am better at limericks.)&lt;/p&gt;&#xA;" OwnerUserId="11268" LastEditorUserId="4921" LastEditDate="2018-11-30T02:23:40.377" LastActivityDate="2018-11-30T15:04:18.390" Title="what OS runs Zip drives?" Tags="&lt;hardware&gt;&lt;storage&gt;&lt;archival&gt;" AnswerCount="3" CommentCount="4" ClosedDate="2018-11-30T08:37:44.047" ContentLicense="CC BY-SA 4.0" />
  <row Id="8413" PostTypeId="2" ParentId="8412" CreationDate="2018-11-29T20:49:07.587" Score="10" Body="&lt;p&gt;ZIP drives come with many different types of interfaces. The most prevalent were:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Internal ATAPI version, most commonly installed in PCs. (An IDE version also existed, but was rather uncommon.)&lt;/li&gt;&#xA;&lt;li&gt;External Parallel port version, most commonly connected to PCs.&lt;/li&gt;&#xA;&lt;li&gt;Internal SCSI version, most commonly installed in early Macs.&lt;/li&gt;&#xA;&lt;li&gt;External SCSI version, most commonly connected to Macs, or other computers that commonly had DB-25 external SCSI ports (i.e. Amiga).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, the first thing you need to determine is which version you have. Actually, it's not so easy to visually distinguish the external SCSI from the external parallel port version. ZIP also made an external drive that supported both of these.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming you have an external drive, it's not a trivial matter to use it today. You are unlikely to find a modern computer with an external SCSI port. Some modern PCs do have the old Parallel Port, but it will need to be specifically configured for the ZIP and you will need the Driver that was designed to use it. Which means you will need to be running the OS that supported that driver - probably an old versions of Windows 9x.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only ZIP drives that are easily supported with a modern computer is the internal ATAPI version, simply because you can attach it to a modern USB&amp;lt;-&gt;IDE converter and use it from a USB port. Then, the only issue is having an OS that supports whatever filesystem is present on your ZIP disks.&#xA;The internal IDE version might also work. The difference between those versions is that the IDE version didn't require any drivers, it worked just like a hard disk. Obviously changing media didn't work so well since the software might not recognize the change. The ATAPI version worked with a driver, similar to CD-ROM-drives. Later BIOS releases often offered an option to boot from an ATAPI drive, and later Windows versions also supported these natively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More specific answers will require a better description of what you have:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Which version of ZIP drive hardware?&lt;/li&gt;&#xA;&lt;li&gt;Which filesystem is used on the ZIP disks?&lt;/li&gt;&#xA;&lt;li&gt;What kind of computer/OS do you have that may support the right interface or be able to use some USB converter?&lt;/li&gt;&#xA;&lt;li&gt;Are you willing to setup a special computer, or at least a virtual machine, to try to read your ZIP disks?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="10757" LastEditDate="2018-11-30T15:04:18.390" LastActivityDate="2018-11-30T15:04:18.390" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8414" PostTypeId="1" AcceptedAnswerId="8417" CreationDate="2018-11-29T21:16:53.990" Score="5" ViewCount="864" Body="&lt;p&gt;As you probably know, in the technology world, smaller is generally considered to be better. Companies compete to make the most portable phone, or the smallest laptop, but apparently Nintendo didn't get the memo on this back in the '80, because if you take a look inside an NES cartridge you may notice they were opting for the exact opposite:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bMg7C.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bMg7C.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, the case is massive compared to the internals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why would they do this? Why would anyone do this? Am I missing something?&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorDisplayName="user6464" LastEditDate="2018-11-30T01:29:47.177" LastActivityDate="2018-11-30T01:29:47.177" Title="Why are the internals of NES Gamepaks so small compared to the case?" Tags="&lt;nintendo&gt;&lt;nes&gt;&lt;chip&gt;&lt;game-cartridge&gt;" AnswerCount="2" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8416" PostTypeId="2" ParentId="8414" CreationDate="2018-11-29T21:35:28.107" Score="6" Body="&lt;p&gt;The mechanical aspects of the NES require that all NES Gamepaks be about the same size.  NES could not predict with certainty everything that game designers might want to include in a Gamepak, and were more interested in ensuring that the cartridges could handle the worst-case need than in making them as small as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making the cartridges larger would also cater toward an attitude that increased size correlates with more sophistication, and made it easier for people to acquire an impressive-looking collections of games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which looks more impressive: a stack of 10 NES cartridges, or a stack of 20 Nintendo DS cartridges?&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorDisplayName="user6464" LastEditDate="2018-11-29T21:38:48.200" LastActivityDate="2018-11-29T21:38:48.200" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8417" PostTypeId="2" ParentId="8414" CreationDate="2018-11-29T21:39:10.590" Score="10" Body="&lt;p&gt;Under the hood, the NES was almost identical to the Famicom, its Japanese counterpart released in 1983:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Nintendo-Famicom-Console-Set-FL.png/1024px-Nintendo-Famicom-Console-Set-FL.png&quot; alt=&quot;Famicom&quot;&gt;&#xA;&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:Nintendo-Famicom-Console-Set-FL.png&quot; rel=&quot;noreferrer&quot;&gt;image source&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Famicom console itself was much smaller that the NES, and it had a traditional top-loading cartridge slot instead of the NES's notoriously unreliable front-loader.  It's cartridges were also more reasonably sized:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://media.wired.com/photos/5a5bd424e5ee3c6a50ce5417/master/w_660,c_limit/FAGiet2KDLkdngYk.huge_1.jpeg&quot; alt=&quot;Famicom with cartridge&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://media.wired.com/photos/5a5bd431f11e325008172d18/master/w_660,c_limit/vXQOkirBm5O1MTAV.huge_1.jpeg&quot; alt=&quot;Inside of cartridge&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&lt;a href=&quot;https://www.wired.com/2010/09/nintendo-famicom-teardown/&quot; rel=&quot;noreferrer&quot;&gt;Image source&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time the NES was released in the United States, &lt;a href=&quot;https://en.wikipedia.org/wiki/Video_game_crash_of_1983&quot; rel=&quot;noreferrer&quot;&gt;the North American video game market had just crashed&lt;/a&gt;.  Consumers were unwilling to buy video game systems, and retailers were unwilling to sell them.  The Nintendo Entertainment System made quite a few unusual design decisions in an effort to market the NES as an &quot;entertainment system&quot; rather than a video game console.  According to the Wikipedia article &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_the_Nintendo_Entertainment_System#Redesign_as_the_Nintendo_Entertainment_System_(1985)&quot; rel=&quot;noreferrer&quot;&gt;History of the Nintendo Entertainment System&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Nintendo purposefully designed the system so as not to resemble a video game console, and would avoid terms associated with game consoles, using the term &quot;Pak&quot; for cartridge, or &quot;Control Deck&quot; instead of &quot;console&quot;. Renamed the &quot;Nintendo Entertainment System&quot; (NES), the new version lacked most of the upscale features added in the AVS, but retained many of its design elements, such as the grey color scheme and boxy design. In avoidance of an obvious video game connotation, NES replaced the top-loading cartridge slot of the Famicom with a front-loading chamber for software cartridges that place the inserted cartridge out of view. The revised design includes design flaws which have the side-effect of making the NES more prone to breakdown. The loading mechanism became notorious for slowly failing. The Famicom's pair of hard-wired controllers was replaced with two custom 7-pin sockets for detachable controllers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nintendo knew they couldn't sell a video game system, so they made something that looked futuristic and &lt;em&gt;not like a video game system.&lt;/em&gt;  The design decision of inserting a large cartridge into a slot on the front of the system &lt;a href=&quot;https://en.wikipedia.org/wiki/Nintendo_Entertainment_System#Design_flaws&quot; rel=&quot;noreferrer&quot;&gt;was an effort to resemble something like a VCR&lt;/a&gt; rather than a game console.&lt;/p&gt;&#xA;" OwnerUserId="409" LastActivityDate="2018-11-29T21:39:10.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8418" PostTypeId="2" ParentId="8412" CreationDate="2018-11-30T03:11:51.213" Score="3" Body="&lt;p&gt;A not too long time ago I tried these combinations, without any problems (or any special sw installations).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;External USB, Linux &amp;amp; Windows 7/10&lt;/li&gt;&#xA;&lt;li&gt;Internal (I belive) IDE, Linux &amp;amp; Windows XP&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Linuxes were some current version of Ubuntu.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastActivityDate="2018-11-30T03:11:51.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8419" PostTypeId="2" ParentId="8409" CreationDate="2018-11-30T03:12:28.710" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;what does DSM stand for in macros&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In principle nothing. It's &quot;just&quot; a string used to mark all (well, most) APF (&lt;em&gt;Application Processing Function&lt;/em&gt;) that are part of the system. IBM provides in no place a meaningful interpretation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In an informal way I was given &lt;em&gt;&lt;strong&gt;D&lt;/strong&gt;ocument &lt;strong&gt;S&lt;/strong&gt;tructure &lt;strong&gt;M&lt;/strong&gt;acro&lt;/em&gt; as an explanation ... but that was &lt;em&gt;quite&lt;/em&gt; a long time ago and I doubt that there will be any reference anywhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like so often it's a naming convention to manage symbols of different origin within a single name space. This continues within the DSM macros as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;DSM@&lt;/code&gt; marking all attribute handling macros&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;DSM#&lt;/code&gt; indicating internal macros that get called by others or the profile&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;DSME&lt;/code&gt; for end tag macros&lt;/li&gt;&#xA;&lt;li&gt;Any other &lt;code&gt;DSM&lt;/code&gt; Macro will handle one or more start tags&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;BTW, as so often with IBM, names aren't as sharply defined as one may assume. Depending on context the language is &lt;a href=&quot;https://en.wikipedia.org/wiki/SCRIPT_(markup)&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCRIPT&lt;/a&gt; or &lt;a href=&quot;https://de.wikipedia.org/wiki/IBM_Generalized_Markup_Language&quot; rel=&quot;nofollow noreferrer&quot;&gt;Generalized Markup Language&lt;/a&gt; (GML).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SCRIPT defines a set of very basic, serially processed output formatting commands to be embedded in text, with each command starting a new line (*1). SCRIPT/VS is one of many extensions, like SCRIPT/370 before. It offered extensions to support IBM's 3800 laser printer. It was also ported to the PC, and gained thus some audience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GML on the other hand is a format using a tag based system, much like today's SGML (or HTML). It uses start and end tags, encapsulated between a colon (&lt;code&gt;:&lt;/code&gt;) and a period (&lt;code&gt;.&lt;/code&gt;), much like the &lt;code&gt;&amp;lt;&lt;/code&gt; and &lt;code&gt;&amp;gt;&lt;/code&gt; in HTML. Except, GML doesn't really exist at all. What exists is the GML Starter Set, a set of macros that handle the conversion of block based encoding into the serial format of SCRIPT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and then there is EasyScript - a simplified GML version, that gets directly interpreted with other SCRIPT  commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not to mention that IBM did create many dialects or extensions like ISIL, the &lt;em&gt;&lt;strong&gt;I&lt;/strong&gt;nformation &lt;strong&gt;S&lt;/strong&gt;tructure &lt;strong&gt;I&lt;/strong&gt;dentification &lt;strong&gt;L&lt;/strong&gt;anguage&lt;/em&gt;, a GML extension/version used to write most of their manuals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another variant is &lt;em&gt;Bookmaster&lt;/em&gt; which as well enriches GML for publishing purpose, here with regards to modern printers and graphic displays to support more complex and visually appealing layouts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Together with &lt;em&gt;Bookmanager&lt;/em&gt; it creates a PDF like environment to render such documents on graphic devices. It comes with a server product to manage libraries of  ... well, E-Books :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes it seems there isn't anything that IBM didn't develop ahead of time just to not be able to make it standard later on when the world was ready.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - SCRIPT itself is close related to &lt;a href=&quot;http://web.mit.edu/multics-history/source/Multics/doc/info_segments/runoff.info&quot; rel=&quot;nofollow noreferrer&quot;&gt;RUNOFF&lt;/a&gt; - better known due it's unix clone &lt;code&gt;roff&lt;/code&gt; :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2018-11-30T13:11:57.820" LastActivityDate="2018-11-30T13:11:57.820" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8420" PostTypeId="2" ParentId="8412" CreationDate="2018-11-30T07:41:08.827" Score="2" Body="&lt;p&gt;They made USB Zip drives for all three size variants (100, 250, 750) that are all standard USB Mass Storage devices. They are simple plug-and-play on a modern OS. I suggest you purchase one on eBay, where they are widely available. The 250 model seems prevalent since it was at the overlap of USB and when Zip was still relevant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zip drives can always read media of smaller sizes. If you care, I recall the only incompatibility is the 750 drive can't write to 100 media.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went through the same exercise as you, recovering old media, in 2014 with a USB 250, and it worked fine on Windows and a Mac.&lt;/p&gt;&#xA;" OwnerUserId="7959" LastActivityDate="2018-11-30T07:41:08.827" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8421" PostTypeId="2" ParentId="2244" CreationDate="2018-11-30T14:49:41.767" Score="3" Body="&lt;p&gt;Speaking of the 1980s, if that counts as &quot;early&quot;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The standard reference for this was Donald Knuth's &lt;em&gt;The Art of Computer Programming, 2. ed. (1981), Volume 2, Seminumerical Algorithms&lt;/em&gt;, of which Chapter 3 is &quot;Random Numbers&quot;.  The 177-page chapter give a mathematical treatment, beginning with linear congruential pseudorandom generators, and how to pick the parameters, and continues through spectral and other statistical tests.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When we needed pseudorandom numbers, and didn't want a built-in poor or unknown-quality generator, that's how we made them in the 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were they &quot;cryptographically secure&quot;?  Not by today's standards.  However, the microcomputers of that period were single user and didn't normally have any communications: business users would just lock up the accounting floppies in a drawer/safe.  Multiuser minicomputers (PDP11s, VAXes etc) were unusual except in research places, but still would often have one-way hashes for passwords.  The first time I saw one cracked it took a few hours of CPU circa 1985, and normally you had to have both legitimate access (to get anything to crack) and physical access to terminals as dial-up access was rare.  Very few people had hours of CPU time available without leaving a lot of evidence.  You'd look for motive, means and opportunity amongst a few hundred people; not like today where it might be anybody on the internet and digital banking is open to pretty much everywhere.&lt;/p&gt;&#xA;" OwnerUserId="11208" LastEditorUserId="11208" LastEditDate="2018-11-30T18:49:44.853" LastActivityDate="2018-11-30T18:49:44.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8422" PostTypeId="1" AcceptedAnswerId="8423" CreationDate="2018-11-30T15:25:16.283" Score="62" ViewCount="20316" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Digital_rights_management#Computer_games&quot; rel=&quot;noreferrer&quot;&gt;Several ways&lt;/a&gt; exist to protect against the copying of games but, when CD-ROM games were first introduced, were there any measures taken by video game developers to prevent the copying of games? &lt;/p&gt;&#xA;" OwnerDisplayName="user11265" LastEditorUserId="-1" LastEditDate="2018-12-01T00:10:04.443" LastActivityDate="2018-12-03T17:32:49.897" Title="How was copying prevented when the first CD-ROM games were introduced?" Tags="&lt;history&gt;&lt;gaming&gt;&lt;cd-rom&gt;" AnswerCount="8" CommentCount="12" FavoriteCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8423" PostTypeId="2" ParentId="8422" CreationDate="2018-11-30T15:34:50.707" Score="111" Body="&lt;p&gt;When CD-ROM games were first introduced, game developers didn’t take any measures to prevent users from copying them, for two main reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CD-ROMs could contain more data than most hard drives at the time;&lt;/li&gt;&#xA;&lt;li&gt;CD writers were rare, and extremely expensive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/CD-R&quot; rel=&quot;noreferrer&quot;&gt;The Wikipedia page on CD-R&lt;/a&gt; gives some idea of the expense involved: in 1990, CD recording systems cost over $35,000; by 1992, that had dropped to around $10,000, and the $1,000 barrier was crossed in 1995.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In those days, a hard drive large enough to store a copy of a CD-ROM (assuming the latter was filled to capacity) cost a significant amount too (&lt;a href=&quot;https://web.archive.org/web/20150714062141/http://www.jcmit.com/diskprice.htm&quot; rel=&quot;noreferrer&quot;&gt;$2,000 in 1992&lt;/a&gt;) — and you’d need one, on a SCSI system, to have any chance of copying a CD correctly. Blank CDs were also quite expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another limiting factor initially was that CD writers wrote CDs at the nominal speed, so copying a full CD would take over an hour (not counting the time it took to read it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many CD games did however rely on some CD characteristics to make them harder to copy to another medium: they’d check that their CD was present, or rely on audio CD tracks.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-12-01T15:22:21.627" LastActivityDate="2018-12-01T15:22:21.627" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="8424" PostTypeId="2" ParentId="8422" CreationDate="2018-11-30T17:49:59.023" Score="11" Body="&lt;p&gt;In addition to Stephen Kitt's answer:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Copy protection existed long before CDs; most of these techniques could be applied to CD-ROMs too. Many games that were shipped on floppies had copy protection - sometimes a question in the beginning that asked you to look at the booklet it came with, Monkey Island had a disk with 2 parts that you needed to set according to instructions to get the right answer.  &lt;/li&gt;&#xA;&lt;li&gt;It was obviously much harder to distribute pirated copies then than it is now. The internet wasn't a thing so you were fairly limited in what you could acquire. Generally one of your friends had to actually buy the game. Sharing of games was fairly common, though.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11272" LastEditorUserId="278" LastEditDate="2018-12-03T17:32:49.897" LastActivityDate="2018-12-03T17:32:49.897" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8425" PostTypeId="1" AcceptedAnswerId="8430" CreationDate="2018-11-30T19:00:32.027" Score="9" ViewCount="646" Body="&lt;p&gt;The first Apple PowerBook laptops were delivered in 3 versions in 1991: PowerBook 100, 140, and 170. These initial PowerBooks were overall a tremendous commercial success for Apple, and are regarded historically as setting the precedent for the form factor that most laptops would follow - notably the overall size and placement of keyboard and pointing device. So it was a significant innovation for the industry at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerBook#PowerBook_100_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; and other sources, Sony was responsible for the design of the PowerBook 100, but (I think) that means the design of the internal electronics; as opposed to the industrial design of the product. If this is to be believed, it seems odd. If Apple had already designed the 140 and 170, and managed to equip them with more features and a 32-bit processor (68030), why would Apple need Sony to &quot;miniaturize&quot; the 16-bit PowerBook 100 just to fit in the same form factor? Apple already fit a 68030 system, so the PB 100's 16-bit 68000 should not have presented any technical challenge at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the following (unfortunately, low-res) photos of the PB 100 and PB 170 motherboard proves a common development. The basic approach of a main board combined with a CPU+memory board and an additional memory board is shared. I can't tell from these images if any of the chips on the mainboard are shared, but they look remarkably similar. Perhaps the main board and the ASICs were pretty much the same between all three laptops, and the result of Sony's work for Apple? Though that is hard to prove without some better photos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WNalw.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WNalw.jpg&quot; alt=&quot;PowerBook 100 internals&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vOpGU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vOpGU.jpg&quot; alt=&quot;PowerBook 170 internals&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question basically comes down to whether the historical account is correct? And, if it is correct, what was the &quot;miniaturization&quot; effort done by Sony and why would it only affect the PB 100 and not be reused for the 140/170?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-12-01T16:17:29.607" LastActivityDate="2018-12-01T16:17:29.607" Title="What exactly did Sony contribute to the original Apple PowerBook?" Tags="&lt;history&gt;&lt;apple-macintosh&gt;&lt;apple&gt;&lt;sony&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8426" PostTypeId="2" ParentId="8422" CreationDate="2018-11-30T19:12:58.710" Score="47" Body="&lt;p&gt;We had some software delivered on a CD in which the vendor purposely put a defect on a specific track. If that defect wasn't there, the software could say it wasn't an original CD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since defects are not copied, even on low level track copies, an exact replica could not be created.&lt;/p&gt;&#xA;" OwnerUserId="11276" LastEditorUserId="3683" LastEditDate="2018-12-01T07:55:13.977" LastActivityDate="2018-12-01T07:55:13.977" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8427" PostTypeId="2" ParentId="8422" CreationDate="2018-11-30T19:48:42.167" Score="23" Body="&lt;p&gt;&lt;em&gt;(preface: While &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8423/6659&quot;&gt;Stephen's answer&lt;/a&gt; already covers the basic points, I would like to put a different emphasis here - and merge in some private history :))&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Short answer:&lt;/h2&gt;&#xA;&lt;p&gt;It was the game's size and the need to copy it to a CD again, combined with expensive and unreliable writers. Further, the CD itself was used as a copy protection. While games often got installed completely onto HD, they did check every now and then if the CD was still present in a drive connected, so people could not install and run it on multiple (friends') systems.&lt;/p&gt;&#xA;&lt;p&gt;All of this is based around the fact, that copying CDs was expensive and unreliable - at least until the early 2000s.&lt;/p&gt;&#xA;&lt;p&gt;In general, it's a bit like it was with floppies in the very beginning (my fist 10-pack did cost me 80 Marks), where copying to tape was prohibitive, just to be repeated in the mid 2000s when DVDs where rolled out when CD writing became cheap and reliable.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;p&gt;To start with, CD production was, at that time mostly confined to 'real' CDs and in a factory setup, as writeables not only where prohibitively expensive, but also did not always produce a result readable on (cheap) CD-ROM drives. When looking at prices it may be helpful to see that CDs weren't a thing for computer users until 1991's Soundblaster Pro got sold with a special interface for the Mitsumi CD Drive (and often packaged with one). Keep in mind this is about games. Here only mass market counts, not some high power users like many of us may have been.&lt;/p&gt;&#xA;&lt;p&gt;CD as a game medium only started after that. &lt;strong&gt;At this time their sheer size was the most relevant copy protection.&lt;/strong&gt; Game companies where often accused of adding unnecessary content to explicitly bloat the size of data used - including lots of clips and cut scenes together with purposely non-compressed data, to make it hard to copy games onto disks. In fact, numerous game reviews did test games that where delivered as a 'basic version' on floppies as well as their 'enhanced' CD counterpart and found that the CD-version didn't add anything useful.&lt;/p&gt;&#xA;&lt;p&gt;While the cost for a CD writer in the mid-90s dropped close to 1000 USD, that's still above the usual juvenile threshold. And writers still suffered from compatibility issues with regular (cheap) players. Even if daddy did invest in the son's future by buying a PC with a well-fitted SCSI based machine including a writer, media prices were comparably high. When bought as a 25 pack, a single writeable CD was close to 10 USD. Thus copying did still bear high cost.&lt;/p&gt;&#xA;&lt;p&gt;The time argument doesn't matter so much on the hobbyist side, as waiting an hour for the CD to complete (*1) could be filled with whatever teenagers do anyway :))&lt;/p&gt;&#xA;&lt;p&gt;It doesn't matter on a 'professional' scale as well. Just remember all the copying that was going on during early 80s with pirated video tapes. People had a dozen VCRs in their garage, hooked up to a 'Master' and copied in real time. More or less the same way with CDs in the mid to late 90s. Machines did run multiple drives at once, just this time the master was a hard disk. 8-12 drives per machine and 2-3 machines did make it a full time job. Heck, they even developed robotic handling (*2). Again, the media price was more of a limiting factor (and readability) than time.&lt;/p&gt;&#xA;&lt;p&gt;At a 'professional' level the danger for game companies was rather on the side of real CD manufacturing, as a standard CD manufacturing machine could be bought for less than some high-end PCs. The only costly part was acquiring the glass master.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Whoever could at that time cash out for a writer, would always also buy a simple reader that goes with it, so transfer can be done in a single run.&lt;/p&gt;&#xA;&lt;p&gt;*2 - A good friend of mine was into this. He did the garage business for video tapes in the early 80s, and after some ... err ... troubles, slipped again into it with CDs. He had an awesome setup with two small robot arms handling the CDs of two drives connected to a single machine. That way he could have it run 24/7. He said it was good business, but I still think if he had invested the time it took to develop the software and handling mechanics in a start-up for robotics, he'd be a wealthy man by now. I just wish I had secured that machinery for my collection.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-12-01T19:18:27.187" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8428" PostTypeId="2" ParentId="8422" CreationDate="2018-11-30T19:50:15.993" Score="13" Body="&lt;p&gt;It's probably not exact but Sony back in the day had a really cool way of Protection against pirates:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=XUwSOfQ1D3c&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/XUwSOfQ1D3c/mqdefault.jpg&quot; alt=&quot;&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simply said they changed the CD itself... and made it &quot;Wobble&quot; in a certain way in the beginning so the reader knew it's an OEM Disk.&lt;/p&gt;&#xA;" OwnerUserId="11279" LastEditorUserId="7069" LastEditDate="2018-12-01T10:48:41.880" LastActivityDate="2018-12-01T10:48:41.880" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8429" PostTypeId="2" ParentId="8422" CreationDate="2018-11-30T19:56:49.280" Score="8" Body="&lt;p&gt;A quick review of the games consoles suggests that the Saturn and PlayStation were the first to implement copy protection as a firmware-level feature; between the 3DO, Mega CD and PC Engine there are some measures to ensure games are from licensed developers but no built-in protection against copies. I was also unable to find any evidence of software for those platforms implementing its own protection schemes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer seems to be: during the first wave of dedicated games hardware, no substantial effort was put into copy protection; one can guess that it just wasn't considered to be likely to be feasible within the usual commercial lifetime of a console prior to about 1994.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="9114" LastEditDate="2018-12-02T09:05:26.100" LastActivityDate="2018-12-02T09:05:26.100" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8430" PostTypeId="2" ParentId="8425" CreationDate="2018-11-30T21:16:01.057" Score="7" Body="&lt;p&gt;According to the &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerBook_170&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article on the PB 170&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Though released at the same time as the PowerBook 140 and PowerBook 100, both the 140 and 170 were designed entirely by Apple, while the 100 was being miniaturized by Sony from the full-sized Macintosh Portable.&lt;/p&gt;&#xA;&lt;p&gt;As a result, the 170 represents the very first PowerBook created by Apple, with the 100 actually representing the first design improvements, though its internal architecture is the oldest in the series.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Hence the PB-100 was indeed a shrunken &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Portable&quot; rel=&quot;noreferrer&quot;&gt;Macintosh Portable&lt;/a&gt;, vs the PB-140 and 170. Notable about the Portable and the PB-100 were the sealed, lead acid batteries that they carried, giving them some heft.&lt;/p&gt;&#xA;&lt;p&gt;Apparently Apple contracted with Sony to redesign the Portable into the PB-100, as a lower entry level laptop while they built the PB-140/170 from the ground up.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="-1" LastEditorDisplayName="user6464" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-11-30T23:45:29.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8431" PostTypeId="2" ParentId="8422" CreationDate="2018-11-30T23:56:27.357" Score="5" Body="&lt;p&gt;Besides the measures against copying the CD-ROM there were other things. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pretty popular were &lt;strong&gt;dongles&lt;/strong&gt;: specific hardware devices put one the parallel port. The game (or other software) did not run without those dongles. The dongles could not be copied easily.&lt;/p&gt;&#xA;" OwnerUserId="11284" LastActivityDate="2018-11-30T23:56:27.357" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8433" PostTypeId="2" ParentId="8422" CreationDate="2018-12-01T22:35:59.263" Score="1" Body="&lt;p&gt;From what I remember - most successful was the Serial Number approach when every CD copy had a unique hash to verify the unit copy. Verification process would request a hash to validate the copy and flag it useable. Serial number was included as a sticker inside the CD package.&lt;/p&gt;&#xA;" OwnerUserId="11293" LastEditorUserId="11293" LastEditDate="2018-12-02T18:11:56.153" LastActivityDate="2018-12-02T18:11:56.153" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8434" PostTypeId="2" ParentId="8396" CreationDate="2018-12-02T12:09:55.083" Score="0" Body="&lt;p&gt;Reason is simple: this layout had shown the best typing performance using typewriter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As typist is measured by the speed of typing and low error rate, the best layout which was selling best at that time is the one modern keyboards are having.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read about it somewhere a time ago, I am sure you can find this research on the internet.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;That is totally logical. And totally wrong.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;@manassehkatz - I suspect that you are 100% totally right, and I am totally wrong! Thank you for comment!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the &quot;defense&quot; of my answer I would say that originally I said about &quot;speed of typing and low error rate&quot;, thus &lt;em&gt;maybe&lt;/em&gt; this layout allowed achieving balance of both to some practical extent.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastEditorUserId="8258" LastEditDate="2018-12-02T15:44:39.907" LastActivityDate="2018-12-02T15:44:39.907" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8436" PostTypeId="1" AcceptedAnswerId="11862" CreationDate="2018-12-02T15:22:19.127" Score="8" ViewCount="7840" Body="&lt;p&gt;I don't really know if this is the correct place to ask this, if not let me know where I should. I would like to know if it would be possible to run Ngage games on an existing Symbian emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no emulator for Ngage games, however, some games had support for Nokia N97 and probably other Nokia phones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the answer is affirmative, what software would I need?&lt;/p&gt;&#xA;" OwnerUserId="11298" LastActivityDate="2020-10-25T15:27:57.853" Title="Symbian emulator to run Ngage games" Tags="&lt;emulation&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8437" PostTypeId="1" CreationDate="2018-12-02T16:41:58.443" Score="3" ViewCount="202" Body="&lt;p&gt;I am going to buy an old iMac G3 Over the next couple of days/weeks, and I want to make sure that I am buying a system with no problems. I usually ask for the serial number and good pictures before buying, but I want to know what to do when I physically meet the person I decide to buy from. What should I do when with the buyer to test the system to know what defects it may have? The system would either be running Mac OS 8 or 9 (classic), or OS X. If there is a set of things I should do, or a program I should run what would that be?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uppzR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uppzR.jpg&quot; alt=&quot;Generic iMac G3 Picture&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11176" LastActivityDate="2018-12-02T16:52:01.337" Title="Ways To Test iMac G3 Before Buying" Tags="&lt;hardware&gt;&lt;software&gt;&lt;apple&gt;&lt;mac-os-classic&gt;&lt;imac-g3&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8438" PostTypeId="2" ParentId="8437" CreationDate="2018-12-02T16:52:01.337" Score="3" Body="&lt;p&gt;I rarely look at more than these 3 things when purchasing a &quot;new&quot; retrocomputer from a local seller:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Cosmetic &amp;amp; mechanical condition: I prefer clean &amp;amp; undamaged cases, keyboards, mouse, etc. Of course, dirt and grime is usually present but easily removed. However, cleanliness is also a good indication of proper storage.&lt;/li&gt;&#xA;&lt;li&gt;Operational condition: Does it turn on and boot up. If the internal HD is not working, can you at least boot from external media (floppy, or CD-ROM installer disk in the case of the iMac).&lt;/li&gt;&#xA;&lt;li&gt;Specifications: I like to know what's inside the box before I buy it. For many machines this means popping the lid and having a look inside. Not all sellers have patience for this, but most will not care, if the case is easily opened. For an iMac, forget about opening it, but you can look at the System Profiler to see all the details of the internal electronics.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Of course, you could spend a lot of time quizzing the seller about the history of the machine and trying to pick their brain to see what they can remember about it. This can be entertaining, but its ultimately unnecessary once you confirm the above 3 items. As with any purchase, if the price seems too high, or you feel insecure about the purchase, then just pass. There will be others.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-12-02T16:52:01.337" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8439" PostTypeId="1" CreationDate="2018-12-02T18:00:46.613" Score="9" ViewCount="2058" Body="&lt;p&gt;In my loft there is a computer with no branding that needs a new CMOS battery, and one that has the branding 'Tri Data' which I can't find anywhere on the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kSXlM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kSXlM.jpg&quot; alt=&quot;Luggable computer (front)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It just shows a white screen as well and the keyboard doesn't want to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The motherboard says HM386SX Rev 1.1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7syjw.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7syjw.jpg&quot; alt=&quot;Rear panel, showing connectors&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11300" LastEditorUserId="276" LastEditDate="2018-12-17T11:47:37.023" LastActivityDate="2018-12-17T14:07:28.933" Title="Can anyone help me identify this computer?" Tags="&lt;identify-this-computer&gt;&lt;portable&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8440" PostTypeId="2" ParentId="8439" CreationDate="2018-12-02T19:32:35.100" Score="12" Body="&lt;p&gt;This is one of dozens (hundreds?) of luggable designs that came out of Taiwan and other far east nations in the late 80s/early 90s before everything reverted back to the AT case style. The case was generic and you could put in any compatibly sized mobo, which were also widely available. The &quot;Tri Data&quot; might be a local company or computer shop, anyone could build these and put their label on them. Around 1989 I was selling something similar, but without the knobs at the bottom. IIRC I was called &quot;Compall&quot;, and was not related to the modern Compal.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-12-02T19:32:35.100" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8441" PostTypeId="2" ParentId="8439" CreationDate="2018-12-02T19:55:23.923" Score="7" Body="&lt;p&gt;This looks like a generic, Compaq style schlepable build from standard components with the &lt;a href=&quot;http://www.ecs.com.tw/ECSWebSite/index/EN/Home&quot; rel=&quot;nofollow noreferrer&quot;&gt;Elitegroup&lt;/a&gt; &lt;strong&gt;HM386SX&lt;/strong&gt; as a typical generic Heatland 386SX chipset based motherboard. I would date it as early to mid 1990s. BIOS should be an AMI one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TriData is probably the name and label the involved PC confectioner did slap on after fitting the components ... usually dreaming to be on par with DELL - and outgrowing them soon :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2018-12-17T14:07:28.933" LastActivityDate="2018-12-17T14:07:28.933" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8442" PostTypeId="1" CreationDate="2018-12-02T22:49:19.867" Score="10" ViewCount="1696" Body="&lt;p&gt;Back when I had a ZX Spectrum 48K, I had a friend that had a 128K and we would swap games for the weekend from time to time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We did try and make duplicates of the tapes (yes, I know, but we were ten and had no concept of piracy).  I had two of those external 5-1/4 inch-drive sized tape units (this &lt;a href=&quot;https://www.google.co.uk/search?q=zx%20spectrum%20tape%20player&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ved=0ahUKEwii2tSpnILfAhXrVBUIHRa-CfwQ_AUIDygC&amp;amp;biw=1230&amp;amp;bih=698#imgrc=jJPhRmpncHV2xM:&quot; rel=&quot;noreferrer&quot;&gt;kind of thing&lt;/a&gt;). I connected them up and tried to make a copy but they would bum out soon after starting.  From memory they would suffer from &quot;flutter&quot;, I think it is called, or was it wow (or both).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Strangely I seem to remember being able to make a copy of something I had written in BASIC, saved to tape, duplicated, and then had no problems loading. It may be that it was very short or my bad memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Out of interest, if one had access to a good hi-fi unit (I did not) could one actually make a duplicate, or did they have other protecting in place?  I note there where some very sophisticated tape units available at the time (or soon after) which I understand could give CD a run for its money (e.g. the Nakamichi Dragon or the Pioneer CT-F1250).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just for the record, I do not condone any such conduct but, for experimental and interest reasons, I wanted to ask.&lt;/p&gt;&#xA;" OwnerUserId="11305" LastEditorUserId="6659" LastEditDate="2018-12-03T01:34:00.933" LastActivityDate="2019-11-17T12:42:31.300" Title="Copying tapes &quot;back in the day&quot;" Tags="&lt;cassette-tape&gt;&lt;8-bit-microcomputers&gt;&lt;copy-protection&gt;" AnswerCount="6" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8443" PostTypeId="2" ParentId="8396" CreationDate="2018-12-02T23:05:15.690" Score="0" Body="&lt;p&gt;My understanding was that typewriters where originally laid out as ABC....etc but the typists became very quick at doing this.  On a mechanical typewriter very quick sequences of key strokes would end up with letter &quot;heads&quot; or &quot;stamps&quot; (not sure what they are called) being swung towards the page at nearly the same time which would end up with them jamming together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The QWERTY style keyboard was made to slow the user down, of course this did not work as muscle memory does not care about such things and users quickly adapted to using the new layout - but by the time this mattered things had moved on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put it another way, it was simply not possible to type as fast on an old style mechanical swing arm typewriter as it is with a modern keyboard so they tried to find ways to slow them down.  I also believe that the QWERTY layout was actually picked to be as awkward as possible and NOT (as has been suggested) because it made it quicker or more sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did not research my answer so this may be myth but would be nice to see if right or wrong.&lt;/p&gt;&#xA;" OwnerUserId="11305" LastEditorUserId="11305" LastEditDate="2018-12-04T11:15:25.967" LastActivityDate="2018-12-04T11:15:25.967" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8444" PostTypeId="2" ParentId="8442" CreationDate="2018-12-02T23:32:04.457" Score="12" Body="&lt;p&gt;No, you won't need any 'HiFi' like recorders. After all, these were the very same devices you also used to record your own programs and/or data. While copying from recorder to recorder does always carry a loss in quality, this is of no big influence on a first or second degree copy (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most important factor is volume. It's much the same as when recording and re-reading data. If the level during recording is too high (*2), reading may not work. Just about every computer manual back than included a paragraph or more to explain level setting and how to find the right level during playback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is even more important when using just the recorder as level and sensitivity on both sides are an unknown quantity (*3). The output of the source recorder now has to be adjusted that the cassette is played back at a level which, in conjunction with the input sensitivity of the other recorder, places it somewhere in the middle of the road.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So all needed is spending some time adjusting both recorders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, having said this, there are of course ways to improve the signal, and people did spend money to buy such, to make sure copying went well (*4), but for most cases it was waste of money. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: The drive shown has nothing to do with any PC standard, like 5.25 inch drive bays or alike. It's just an average cassette recorder, like they were ubiquitous back then.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - As in numbers of consecutive copies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Or too low, but that's rarely the reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - When recording from the computer, the level is (usually) set well within the defined working range for tape recorders. Only when reading back is adjustment needed. Usually, this is done by turning a litle dial next to the ear/line-out plugs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Of course, only for archiving purpose, never to duplicate cassette-based software for resale :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-12-06T18:37:50.433" LastActivityDate="2018-12-06T18:37:50.433" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8445" PostTypeId="2" ParentId="8442" CreationDate="2018-12-02T23:45:23.037" Score="3" Body="&lt;p&gt;It's now well publicized how people used to record programs for their machines, from their radio,  which were transmitted by radio-stations .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So maybe you could have played the program on an audio-speaker, and then used the microphone on a cassette-recorder to copy the tape.&#xA;   That may have bypassed the flutter problem .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about the volume level when you tried copying, it's an issue for people today, when playing these old tapes to their modern-hardware for emulators etc, or is it vice versa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe games from shops were stored in a finer-detail-format( or machine-code ? ) to prevent copying, don't know .&lt;/p&gt;&#xA;" OwnerUserId="11197" LastActivityDate="2018-12-02T23:45:23.037" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8446" PostTypeId="1" AcceptedAnswerId="8449" CreationDate="2018-12-03T06:44:55.543" Score="15" ViewCount="1437" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Transmeta&quot; rel=&quot;noreferrer&quot;&gt;Transmeta Corporation&lt;/a&gt; produced the &lt;a href=&quot;https://en.wikipedia.org/wiki/Transmeta_Crusoe&quot; rel=&quot;noreferrer&quot;&gt;Transmeta Crusoe&lt;/a&gt; Processor architecture. (Transmeta was also famous for &lt;a href=&quot;https://www.theregister.co.uk/2003/06/17/linus_torvalds_leaves_transmeta/&quot; rel=&quot;noreferrer&quot;&gt;having Linus Torvalds work there&lt;/a&gt; at the time.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can see from the wikipedia article that the Crusoe processor appears to implements &lt;a href=&quot;https://en.wikipedia.org/wiki/Code_Morphing_Software&quot; rel=&quot;noreferrer&quot;&gt;Code Morphing Software&lt;/a&gt;.  This gives it the ability in theory to &lt;a href=&quot;https://en.wikipedia.org/wiki/Transmeta_Crusoe&quot; rel=&quot;noreferrer&quot;&gt;execute instructions from other architectures&lt;/a&gt;. (eg RISC or Java VM instructions.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We see a similar pattern in Apple's MacOS &lt;a href=&quot;https://en.wikipedia.org/wiki/Rosetta_(software)&quot; rel=&quot;noreferrer&quot;&gt;Rosetta binary translation software&lt;/a&gt;. This enabled software binaries compiled for PowerPC to continue running on the new x86 architecture. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: &lt;strong&gt;Did the transmeta processor architecture work by &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary_translation#Dynamic_binary_translation&quot; rel=&quot;noreferrer&quot;&gt;binary translation&lt;/a&gt;?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="3500" LastActivityDate="2018-12-04T07:06:36.970" Title="Did the transmeta processor architecture work by binary translation?" Tags="&lt;chip&gt;&lt;binary-translation&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8447" PostTypeId="5" CreationDate="2018-12-03T06:46:05.447" Score="0" Body="&lt;p&gt;Dynamic binary translation looks at a short sequence of code—typically on the order of a single basic block—then translates it and caches the resulting sequence. Code is only translated as it is discovered and when possible, and branch instructions are made to point to already translated and saved code (memoization).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dynamic binary translation differs from simple emulation (eliminating the emulator's main read-decode-execute loop—a major performance bottleneck), paying for this by large overhead during translation time. This overhead is hopefully amortized as translated code sequences are executed multiple times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More advanced dynamic translators employ dynamic recompilation where the translated code is instrumented to find out what portions are executed a large number of times, and these portions are optimized aggressively. This technique is reminiscent of a JIT compiler, and in fact such compilers (e.g. Sun's HotSpot technology) can be viewed as dynamic translators from a virtual instruction set (the bytecode) to a real one.&lt;/p&gt;&#xA;" OwnerUserId="3500" LastEditorUserId="3500" LastEditDate="2018-12-03T07:05:03.147" LastActivityDate="2018-12-03T07:05:03.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8448" PostTypeId="4" CreationDate="2018-12-03T06:46:05.447" Score="0" Body="Binary translation looks at a short sequence of code—typically on the order of a single basic block—then translates it and caches the resulting sequence. Code is only translated as it is discovered and when possible, and branch instructions are made to point to already translated and saved code (memoization)." OwnerUserId="3500" LastEditorUserId="3500" LastEditDate="2018-12-03T07:04:46.187" LastActivityDate="2018-12-03T07:04:46.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8449" PostTypeId="2" ParentId="8446" CreationDate="2018-12-03T10:14:14.963" Score="16" Body="&lt;p&gt;In the Wikipedia article on &lt;a href=&quot;https://en.wikipedia.org/wiki/Transmeta#Code_Morphing_Software&quot; rel=&quot;nofollow noreferrer&quot;&gt;Transmeta&lt;/a&gt; there's a good example for the Code Morphing process, taken from a &lt;a href=&quot;https://web.archive.org/web/20010602205826/http://www.transmeta.com:80/crusoe/download/pdf/crusoetechwp.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDF document&lt;/a&gt; (Wayback archived) with even more details:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The operation of Transmeta's code morphing software is similar to the final optimization pass of a conventional compiler. Considering a fragment of 32-bit x86 code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;add eax,dword ptr [esp] // load data from stack, add to eax&#xA;add ebx,dword ptr [esp] // ditto, for ebx&#xA;mov esi,[ebp]           // load esi from memory&#xA;sub ecx,5               // subtract 5 from ecx register&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;This is first converted simplistically into native instructions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld %r30,[%esp]       // load from stack, into temporary&#xA;add.c %eax,%eax,%r30 // add to %eax, set condition codes.&#xA;ld %r31,[%esp]&#xA;add.c %ebx,%ebx,%r31&#xA;ld %esi,[%ebp]&#xA;sub.c %ecx,%ecx,5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;The optimizer then eliminates common sub-expressions and unnecessary condition code operations and, potentially, applies other optimizations such as loop unrolling:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld %r30,[%esp]     // load from stack only once&#xA;add %eax,%eax,%r30&#xA;add %ebx,%ebx,%r30 // reuse data loaded earlier&#xA;ld %esi,[%ebp]&#xA;sub.c %ecx,%ecx,5  // only this last condition code needed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;Finally, the optimizer groups individual instructions (&quot;atoms&quot;) into long instruction words (&quot;molecules&quot;) for the underlying hardware:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld %r30,[%esp];  sub.c %ecx,%ecx,5&#xA;ld %esi,[%ebp];  add %eax,%eax,%r30;  add %ebx,%ebx,%r30&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;These two VLIW molecules could potentially execute in fewer cycles than the original instructions could on an x86 processor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So it indeed translates the x86 binary code into the native VLIW binary code. You can call this &quot;binary translation&quot;, and it's not an &quot;interpreter&quot;, and it's not a &quot;virtual machine&quot; (though this notion is a bit fuzzy; a virtual machine can use various methods to execute actual code, including translating it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that modern x86 CPUs all use a similar scheme: They translate x86 binary into a more simple, RISC-like code, and then schedule and execute it.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="6640" LastEditDate="2018-12-04T07:06:36.970" LastActivityDate="2018-12-04T07:06:36.970" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8450" PostTypeId="2" ParentId="8446" CreationDate="2018-12-03T12:56:27.303" Score="6" Body="&lt;p&gt;From a comment:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You could argue those components add up to a virtual machine not a translator.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A virtual machine IS a translator. The virtual ISA is translated to run on the physical ISA. The only real distinction is whether and for how long the translations are saved for reuse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any microcoded CPU is a virtual machine, in which every instruction is translated on the fly (&quot;interpreted&quot;) every time it is encountered &amp;mdash; there is no attempt to reuse the translation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I once worked on the design of a machine (in the early 1980s) that did the translation (from a zero-address &quot;stack machine&quot; ISA to a three-address RISC ISA) when moving instructions from main memory to the instruction cache. As long as the cache line was not replaced, the translation could be reused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC, the Transmeta actually writes the translations out to a separate area of main memory, allowing them to persist indefinitely. The translation is done by software, rather than hardware, and as long as the original executable file is not modified, the translation can be reused.&lt;/p&gt;&#xA;" OwnerUserId="4183" LastEditorUserId="4183" LastEditDate="2018-12-03T13:54:27.010" LastActivityDate="2018-12-03T13:54:27.010" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8451" PostTypeId="1" AcceptedAnswerId="8452" CreationDate="2018-12-03T20:12:16.717" Score="6" ViewCount="314" Body="&lt;p&gt;I was given a funny, obscure game for Mac sometime in the 1994 to 1996 timeframe.  Unfortunately I have no idea what the game was called, but I'd like to track it down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game, which was in color, had a single play screen which showed two areas: a home (kitchen and bedroom) where you and your mother live, and a bar which was shown above the home.  The object of the game was to sneak out of your bedroom and go to the bar and get a beer.  From time to time, the mother would walk from the kitchen to your bedroom to check on you, and punish you if you were found not to be in your bed.  You scored points for getting a beer, and lost a life when you got caught out of your bedroom by your mother.  The more beers you had, the more often you would trip, which would make it more difficult to get back into the bedroom in time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game was entirely in Swedish.  One phrase from the instructions that I remember distinctly was &quot;Springa vanster&quot;, which I believe means &quot;run left&quot;.  One of the notable features of the game was that when you snuck out of your bedroom, your character left the game window entirely and ran/climbed across your Mac desktop until he reached the bar area, where he climbed back in the game window.  For that era, it was pretty slick graphics coding to do that.&lt;/p&gt;&#xA;" OwnerUserId="11314" LastEditorUserId="6794" LastEditDate="2018-12-04T08:23:09.237" LastActivityDate="2018-12-04T08:23:09.237" Title="Searching for Swedish Mac game from the early 1990's where you try to sneak out of the house" Tags="&lt;identify-this-game&gt;&lt;mac-os-classic&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8452" PostTypeId="2" ParentId="8451" CreationDate="2018-12-04T07:00:12.363" Score="7" Body="&lt;p&gt;It seems to be &quot;&lt;a href=&quot;https://www.macintoshrepository.org/5297-dubbelmoral-&quot; rel=&quot;noreferrer&quot;&gt;Dubbelmoral&lt;/a&gt;&quot; (&lt;a href=&quot;https://sv.wikipedia.org/wiki/Dubbelmoral_(datorspel)&quot; rel=&quot;noreferrer&quot;&gt;Swedish wikipedia&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="7265" LastActivityDate="2018-12-04T07:00:12.363" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8453" PostTypeId="1" AcceptedAnswerId="8457" CreationDate="2018-12-04T11:14:25.423" Score="11" ViewCount="1467" Body="&lt;p&gt;I'm porting CP/M to a new/old machine (the Amstrad NC200 laptop). Running programs on it is no problem, but running &lt;em&gt;interesting&lt;/em&gt; programs (i.e. WordStar, Turbo Pascal and Ladder) involves implementing a terminal emulator of some description.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was originally planning on implementing a VT52 but from exploring the Walnut Creek CP/M archive it seems that most CP/M software come preinstalled for other terminal types --- the Kaypro uses escape sequences similar to the ADM-3A, for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My device only has an 80x16 screen so some configuration would be required no matter what terminal type I implement, but I should be able to save a lot of grief if I just used a terminal type which was already well supported by CP/M software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what &lt;em&gt;was&lt;/em&gt; the most common CP/M terminal type?&lt;/p&gt;&#xA;" OwnerUserId="6846" LastActivityDate="2018-12-05T15:31:34.383" Title="What was the most popular CP/M terminal type?" Tags="&lt;terminal&gt;&lt;cp-m&gt;" AnswerCount="5" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8454" PostTypeId="1" AcceptedAnswerId="8462" CreationDate="2018-12-04T14:20:28.793" Score="20" ViewCount="4499" Body="&lt;p&gt;During the 1980s, it was quite common to see unofficial ports of popular arcade games released on home computer systems. For instance, Acornsoft (the software division of Acorn Computers) released many titles that were clearly unofficial ports (Snapper/Pacman, Meteors/Asteroids, Monsters/Space Panic, etc.). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did these companies get away with what looks like clear cases of copyright infringement? The legal dispute between Philips and Atari over KC Munchkin shows that companies were prepared to protect their IP in certain circumstances. Was it simply the case that the big arcade companies didn't see the home computer market as a threat, or were there other factors in play?&lt;/p&gt;&#xA;" OwnerUserId="6461" LastEditorUserId="4335" LastEditDate="2018-12-04T17:43:52.717" LastActivityDate="2018-12-05T22:15:50.107" Title="Unlicensed home computer ports of arcade games" Tags="&lt;game-cartridge&gt;&lt;arcade&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="4" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8455" PostTypeId="2" ParentId="8453" CreationDate="2018-12-04T14:47:37.460" Score="3" Body="&lt;p&gt;There were plenty of CP/M systems that had the terminal built in and just as many that shipped with no terminal at all and had a user-selected model at the end of a serial cable.  That makes &lt;em&gt;the&lt;/em&gt; most-common terminal type difficult to nail down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fortunately, publishers of terminal-intensive programs knew this and provided the ability to configure without requiring a particular type of terminal.  &lt;em&gt;WordStar&lt;/em&gt;, for example shipped unconfigured from MicroPro with a program called &lt;code&gt;WINSTALL.COM&lt;/code&gt; that had simple text menus for doing that.  It was also common for computer vendors (e.g., Osborne, Kaypro) to license OEM versions of popular programs and ship them preconfigured for their systems, allowing that step to be skipped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to get some idea of what terminal you should support, start with a dumb emulation, run the setup programs for products you're likely to use and find the ones they support.  You might also dig through old issues of &lt;em&gt;Byte&lt;/em&gt; available on the Internet Archive and see what terminals were offered for sale alongside systems that didn't have their own console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is further complicated by the fact that many terminals could be configured to emulate others.  The Visual 50 I used in my first job didn't have its own control sequences but could be a DEC VT-52, LSI ADM-3A, Hazeltine Esprit and ADDS Viewpoint.  It would be hard to go wrong with the VT-52/100 or ADM-3A.&lt;/p&gt;&#xA;" OwnerUserId="749" LastEditorUserId="749" LastEditDate="2018-12-04T15:22:20.973" LastActivityDate="2018-12-04T15:22:20.973" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8456" PostTypeId="2" ParentId="8454" CreationDate="2018-12-04T14:52:50.557" Score="5" Body="&lt;p&gt;For the most part these games were just not big enough to be noticed or cared about. Acorn computers were mostly sold in the UK and were never as popular as their rivals, for example. If the arcade developers, most of whom were Japanese or American, even knew of those knock-offs they would have had to take legal action in the UK. In the 80s that was even harder than it is today with modern communications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Atari were more concerned about Munchkin because it was released in their home market (the US) and PacMan was supposed to be their exclusive. The game was for a rival console too, where as Acornsoft's games were for computer systems only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also consider that at the time video games were new and courts not familiar with them, and it wasn't even well established that gameplay could be copyrighted in that way. In fact the Munchkin lawsuit established that &quot;look and feel&quot; of software could be subject to copyright, opening the door for other lawsuits in the US.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-12-04T14:52:50.557" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8457" PostTypeId="2" ParentId="8453" CreationDate="2018-12-04T15:08:53.273" Score="11" Body="&lt;p&gt;Apologies for a non-definitive answer; while implementing a CP/M emulator for the Mac I find a fairly even split in the terminals that software available via Walnut Creek, etc, was configured for out of the box between the ADM-3a, VT-52, Hazeltine 1500 and Osborne control sets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking to do a really thorough job, I found that simple statistical autodetection worked pretty well for all the software I tested: whichever terminal is detecting the largest number of control codes that pass basic validation (like not trying to move the cursor outside of its meaningful range) is invariably the one the software believes itself to be talking to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I used a simple generic page buffer, two bytes per character to cover both terminals with modal attributes as well as those with serial attributes, and the user sees only that of the terminal that is statistically most likely. After a certain confidence threshold is crossed, that choice is locked in and no further emulation of the other terminals occurs.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-12-04T15:08:53.273" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8458" PostTypeId="1" AcceptedAnswerId="8460" CreationDate="2018-12-04T15:56:52.803" Score="3" ViewCount="646" Body="&lt;p&gt;Many years ago I was watching the news when I saw someone on a Sun workstation controlling the display using an external input device consisting of a series of rotary dials. Turning them rotated and scaled the images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have since seen these in images connected to other systems dating into the 1960s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do these controllers have a unique name?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="15334" LastEditDate="2021-02-20T07:12:55.017" LastActivityDate="2021-02-20T07:12:55.017" Title="Name for rotary dial controllers?" Tags="&lt;terminology&gt;&lt;input-devices&gt;" AnswerCount="7" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8459" PostTypeId="2" ParentId="8458" CreationDate="2018-12-04T16:01:21.483" Score="0" Body="&lt;p&gt;They could have been &lt;a href=&quot;https://en.wikipedia.org/wiki/Paddle_(game_controller)&quot; rel=&quot;nofollow noreferrer&quot;&gt;paddles&lt;/a&gt;. Paddles were often used for games like Pong, and are a one-dimensional control which is manipulated by a circular dial. Of course, usually they have a button or something attached also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They measure the time it takes to charge a capacitor, which varies by the resistance in the dial.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-12-04T16:01:21.483" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8460" PostTypeId="2" ParentId="8458" CreationDate="2018-12-04T16:37:36.593" Score="5" Body="&lt;p&gt;I have always heard them called &quot;dial boxes&quot;.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2018-12-04T16:37:36.593" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8461" PostTypeId="2" ParentId="8458" CreationDate="2018-12-04T16:42:30.813" Score="0" Body="&lt;p&gt;There are a number of traits that controllers based on a rotating component can have.  The axis can be perpendicular to the mounting surface, or it can be vertical or horizontal relative to it.  The range of motion can be unlimited, or the controller can be free-floating with end stops, or it can be spring loaded to the end, or toward the center.  Those traits alone would describe twelve different kinds of controllers, all of which I've seen in various places.  I think the term &quot;paddle controller&quot; or &quot;potentiometer knob&quot; would would be understood as referring to a controller with an axis perpedicular to the surface and a limited range of free-floating motion, and &quot;rotary encoder&quot; would be understood as referring to a control with the same orientation that allowed continuous rotation.  The term &quot;vertical scroll wheel&quot; would likely be understood as being similar to the control found on many mice (with or without a clicker), and &quot;horizontal scroll wheel&quot; would be understood as a similar control oriented differently.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-12-04T16:42:30.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8462" PostTypeId="2" ParentId="8454" CreationDate="2018-12-04T17:39:33.273" Score="33" Body="&lt;p&gt;To understand what was going on with licensed and unlicensed ports of popular arcade games in the 1980s, you have to understand two critical factors.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The video gaming culture of the time, and the preeminence of coin-op arcade games.&lt;/li&gt;&#xA;&lt;li&gt;The role of trademarks and legal trademark protections, which was the more crucial law pertaining to arcade game ports at the time.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;First off, the rapid growth of home console and computer gaming in the early 1980s was directly associated with the rising popularity of arcades. The arcade experience was the main gaming experience that people (kids, mostly) had prior to this time. And popular arcade games like Space Invaders, Asteroids, Centipede, and (of course) Pac-Man had already captured the attention of kids in every town large &amp;amp; small that had an arcade. The entire promise of the early console/home computer gaming market was in bringing this &quot;arcade experience&quot; into the home, minus the quarters, and preferably with the games that kids already knew and loved. It was distinctly NOT about introducing the public to unfamiliar computer games that had been around academia for over a decade. Those types of games didn't have the market clout of the popular arcade games, and wouldn't convince a mass market to invest in consoles of home computers at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has been argued by early game console historians, I think quite effectively, that the reason for the early growth of the Atari VCS platform was that Atari delivered a credible, playable, fun port of &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Space_Invaders_video_games&quot; rel=&quot;noreferrer&quot;&gt;Space Invaders&lt;/a&gt; for the platform. Before that, it was not clear why the mass market would buy into owning a VCS. Space Invaders was immediately recognizable, and the ability to have the same basic arcade experience on a device at home was what sold the mass market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you wanted to sell a successful home gaming platform at the time, your best marketing advantage was the availability of good quality ports of popular arcade game titles. And, to make this truly effective, you would want the home version of the game to share not just the game play aesthetics, but also the NAME of the arcade title. This is where trademarks, and trademark infringement comes into the focus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Trademark_infringement&quot; rel=&quot;noreferrer&quot;&gt;Trademark infringement&lt;/a&gt; was already a very-well established legal framework at this time, and was easily applied to arcade game titles. Copyright was not so relevant initially, because software was something new, and it wasn't yet clear how to correctly apply copyright beyond just not being allowed to pass off someone else's source code as your own. The rule for Trademarks is simple: You cannot use someone else's Trademark on your own product, especially when your product purports to be the same thing as the other's product. So, creating a &quot;Space Invaders&quot; video game using that trademarked name (without permission) was out of the question. You would likely be slapped with an injunction from the Trademark owner, and then they would come after you for all your profits from the infringement plus punitive damages. It was simply way too risky and potentially business-destroying to infringe the trademarks of popular arcade games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This situation begs the question of how to make recognizable, high-quality ports of popular arcade titles available for your budding home gaming platform, given that all such arcade titles were protected by trademarks, and infringing on the trademark was legally untenable. The solution pursued by most publishers (Acorn, Commodore, small third-party) was to make a knock-off of the arcade title instead. Clearly, you could not use the trademarked name for your game, so you made up some new name that sort of sounded related while offering plausible deniability. Then, to farther strengthen your plausible deniability, you changed some details about the games visuals and back-story. The essential game play would remain the same, thus capitalizing on the players' main affinity to the game. So an actual gamer would still recognize the game and want to own it, but the trademark infringement attorneys would have a much harder case to make in court.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &quot;loophole&quot; was exploited for several years. Some legal claims were made here &amp;amp; there against those trying to exploit the &quot;loophole&quot;. Usually these cases were easily settled since neither side had a very strong case and the money involved was usually not much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the same time, the larger publishers with the deeper pockets simply struck trademark licensing deals and legally created ports with the same name as the arcade title and with audio/visual content matching as closely as possible. It turned out that these gaming platforms were the most successful. The follow-up was that more makers of arcade games got into the home video game market to offer their own ports. This allowed them to maximize the lifespan and profitability of their IP. &lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-12-04T17:57:02.317" LastActivityDate="2018-12-04T17:57:02.317" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8463" PostTypeId="1" CreationDate="2018-12-04T18:57:18.700" Score="3" ViewCount="404" Body="&lt;p&gt;How significant and pioneering was the &lt;a href=&quot;https://en.wikipedia.org/wiki/TV_Typewriter&quot; rel=&quot;nofollow noreferrer&quot;&gt;TV Typewriter&lt;/a&gt;,&#xA;in light of things like&#xA;&lt;a href=&quot;http://www.vintagecalculators.com/html/calculator_displays.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;calculators with CRT's&lt;/a&gt; from 1964 and various other things?&#xA;I recently read that the TV Typewriter established the standard for the cassette-data-storage format (for storing pages of text), and also had a modem eventually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question may be too broad, but I have been as specific as I know how.&lt;/p&gt;&#xA;" OwnerUserId="11197" LastEditorUserId="576" LastEditDate="2018-12-10T16:00:38.747" LastActivityDate="2018-12-13T15:20:02.483" Title="How significant/pioneering was the TV Typewriter?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;cassette-tape&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8464" PostTypeId="2" ParentId="8458" CreationDate="2018-12-04T19:30:30.683" Score="4" Body="&lt;p&gt;I worked on a medical imaging platform about 25 years ago that was based on Sun-3 workstations, which used them to manipulate the &quot;window&quot; and &quot;level&quot; of medical images (radiologist-speak for contrast and brightness).  They are called &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotary_encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;rotary encoders&lt;/a&gt;.  Some also have a switch that can be activated by pressing down on the knob.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Old-style mechanical mice had a pair of these -- working at right angles -- to measure the movement of the mouse ball.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://proxy.duckduckgo.com/iu/?u=https%3A%2F%2Fcircuit-diagramz.com%2Fwp-content%2Fuploads%2F2017%2F02%2FArduino-Rotary-Encoder-Wiring-pinout-comparison.jpg&amp;amp;f=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://proxy.duckduckgo.com/iu/?u=https%3A%2F%2Fcircuit-diagramz.com%2Fwp-content%2Fuploads%2F2017%2F02%2FArduino-Rotary-Encoder-Wiring-pinout-comparison.jpg&amp;amp;f=1&quot; alt=&quot;rotary encoder&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HwdiT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HwdiT.jpg&quot; alt=&quot;rotary encoder with knob&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2018-12-04T19:30:30.683" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8465" PostTypeId="2" ParentId="8458" CreationDate="2018-12-04T19:30:37.030" Score="4" Body="&lt;p&gt;Sun called these &quot;SunDials&quot;, these units had 8 dials.  They also had an input device with 32 buttons, called &quot;SunButtons&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a description of the SunDials device taken from section 9.4 of the &lt;a href=&quot;http://www.bitsavers.org/pdf/sun/sunos/4.1/800-3802-10A_SunOS_4.1_Release_Manual_199003.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SunOS 4.1 Release Manual&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;SunDials is an image-manipulation input device for Sun-3 and Sun-4&#xA;  workstations, using an RS-232 serial interface. The desk-top dialbox&#xA;  is compact, measuring 8.63&quot;xS&quot;x1.1S&quot;.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The dials can be programmed to change colors and manipulate images.&#xA;  SunDials is designed to perfonn CAD image manipulation such as&#xA;  scaling, translating, rotating, and zooming.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Sun View directs SunDials input to the process owning the window&#xA;  (where the cursor is located). SunDials extends the interactivity of&#xA;  the display controller beyond the current capabilities of a mouse or&#xA;  digitizing tablet.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The SunDials device driver is integrated into the GENERIC kernel. No&#xA;  optional software or kernel reconfiguration is required, but kernel&#xA;  reconfiguration is recommended for optimal performance.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;See the dialtest(6) manual page for details&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sun's documentation uses the terms &quot;dialbox&quot; and &quot;dials&quot; to refer to these generically.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-12-04T19:30:37.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8466" PostTypeId="2" ParentId="8463" CreationDate="2018-12-04T19:32:31.993" Score="1" Body="&lt;p&gt;The TV Typewriter was the first popular device to transcribe digital output into a standards-compliant raster scan that could be fed directly to an off-the-shelf TV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That contrasts with:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;preceding CRT calculators, which were vector rather than raster based — often dedicated circuits produced the specific deflection pattern for each character; e.g. start from &quot;The beam of the CRT was swept across the screen to write the strokes that made up the individual characters; it was a vector scan, not a raster scan.&quot; in &lt;a href=&quot;http://www.vintagecalculators.com/html/friden_ec-130.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this description of 1964's EC-130&lt;/a&gt;; and&lt;/li&gt;&#xA;&lt;li&gt;teletypes such as 1969's Datapoint 3300 that were dedicated, expensive devices, no more readily available that the computers of 1969.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So its significance — like the Altair, the trinity of 1977, and the other notables of the home computer boom — lies in the massive broadening of potential users.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2018-12-04T19:32:31.993" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8467" PostTypeId="1" CreationDate="2018-12-04T21:25:24.233" Score="9" ViewCount="442" Body="&lt;p&gt;Before the formats of floating point numbers have been standardized in &lt;a href=&quot;https://en.wikipedia.org/wiki/IEEE_754&quot; rel=&quot;noreferrer&quot;&gt;IEEE 754&lt;/a&gt; in 1985, different vendors had used many different floating point formats, some of them listed on the &lt;a href=&quot;https://nssdc.gsfc.nasa.gov/nssdc/formats/&quot; rel=&quot;noreferrer&quot;&gt;Data Format and Conversion Information for Heritage Data at the National Space Science Data Center&lt;/a&gt; page. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most &amp;mdash; but not all &amp;mdash; of those formats define a &quot;double precision&quot; format, initially for the sake of the FORTRAN &lt;code&gt;DOUBLE PRECISION&lt;/code&gt; type. It is my understanding that in most configurations, a computer either didn't have a FPU at all, and all floating point operations were emulated using integer instructions in the CPU, or the FPU had hardware support for both formats; in both cases the performance ratio between single and double precision computations being in the low single digits. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;on the platforms for which the double precision format is not defined (e.g. CDC), was FORTRAN lacking the &lt;code&gt;DOUBLE PRECISION&lt;/code&gt; type? &lt;/li&gt;&#xA;&lt;li&gt;was there a Western&lt;sup&gt;1)&lt;/sup&gt; computer for which the double precision format was defined, but whose FPU only implemented single precision, necessitating &lt;a href=&quot;https://hal.archives-ouvertes.fr/hal-01351529v3/document&quot; rel=&quot;noreferrer&quot;&gt;software emulation of the double precision f. p. arithmetic&lt;/a&gt; (thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4692/lvd&quot;&gt;lvd&lt;/a&gt;), using single precision f. p. instructions whenever possible, of course, but still resulting in a substantial performance degradation for double precision computations?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1)&lt;/sup&gt; BESM-6 suffered from exactly that; its software-emulated double precision was at least 10x slower than the native floating point.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-12-25T03:14:33.570" LastActivityDate="2018-12-25T05:43:47.767" Title="Which pre-IEEE computers had a single precision FPU and implemented double precision floats in software?" Tags="&lt;history&gt;&lt;performance&gt;&lt;floating-point&gt;&lt;fortran&gt;" AnswerCount="1" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8468" PostTypeId="2" ParentId="8453" CreationDate="2018-12-04T22:04:25.170" Score="3" Body="&lt;p&gt;Back in the 1980s, at our university we've been using CP/M machines with real serial terminals a lot, and most of them ADM-3A or compatible ones. I don't remember any incompatibility. Many screen-oriented programs had to be configured to use the correct escape sequences, but ADM-3A was always supported or could easily be configured.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And I liked programming with the ADM-3A escapes: they were a lot more compact than the VT-100 family ones, meaning much faster over a 9600-baud serial line.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2018-12-04T22:04:25.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8469" PostTypeId="2" ParentId="8453" CreationDate="2018-12-04T23:33:47.087" Score="3" Body="&lt;p&gt;Another common command format was TVI-950 which IIRC was the basis for the later Wyse-50.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1985, I wrote a DOS CON: driver terminal emulator for use with a networked CPM 2.2 ISA card to run WordStar. I chose to emulate TVI-950 because it had line insert and delete which VT52 didn't (and I don't think ADM 3A had either).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I agree with Ralf Kleberhoff that the ANSI emulation (VT100 and later DEC models) was verbose and more difficult to parse in assembler.&lt;/p&gt;&#xA;" OwnerUserId="4160" LastActivityDate="2018-12-04T23:33:47.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8470" PostTypeId="2" ParentId="8454" CreationDate="2018-12-05T01:45:00.080" Score="3" Body="&lt;p&gt;From our perspective today, it seems surprising that major companies engaged in wholesale copying of the basic designs of each other's games and only really bothered changing the names of them, but the simple fact is that &lt;em&gt;at the time, it had not been legally determined that such behaviour actually could be copyright infringement&lt;/em&gt;.  Every country had its own history of judgments, but really the US ones were the ones everyone cared about, and the the idea that the screen layouts and sequences of actions that are what we think of as making a copy of a game feel like the original were actually subject to copyright themselves (as a standalone concept rather than as part of a whole program) wasn't legally tested until the mid 1980s.  &lt;a href=&quot;https://en.wikipedia.org/wiki/Whelan_v._Jaslow&quot; rel=&quot;nofollow noreferrer&quot;&gt;Whelan vs Jaslow&lt;/a&gt; (1986) is generally considered the first real case that supported the idea that such high level user interface details could be subject to copyright.  Before that decision, it is likely that game designers never expected the details that were being copied to be legally protectable.&lt;/p&gt;&#xA;" OwnerUserId="547" LastActivityDate="2018-12-05T01:45:00.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8472" PostTypeId="2" ParentId="8453" CreationDate="2018-12-05T06:10:13.470" Score="2" Body="&lt;p&gt;As noted in various ways by others, the ADM-3A was very popular (I used them at the University of Maryland in the early 1980s), but more importantly they were one of a handful of de facto standards. Most of the Wyse terminals (starting with the Wyse 100 - I had two of those - my first video terminals, beautiful machines, but I digress), plus quite a few others. The escape sequences were fairly straightforward and easy to use &amp;amp; to emulate, which should make it a good choice for a memory-constrained emulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My impression of the VT-52 and VT-100 is that the control codes were better designed, but also more verbose - e.g., many functions Escape + a printable character where the ADM-3A (and Wyse, etc.) would use a single non-printable (&amp;lt; 32) control code and particularly direct cursor position - on the ADM-3A (and Wyse, etc.) 4 characters: Escape = row col - where row &amp;amp; col are single bytes, but on the VT-100: Escape [ row ; col H - if row &amp;amp; col &gt;= 10 then that's 8 characters instead of 4, and to emulate it you have to convert decimal (text) to binary. That also makes a significant difference on a low-speed (e.g., 300bps modem) but it helps a little even with a direct connection at 9600bps.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2018-12-05T15:31:34.383" LastActivityDate="2018-12-05T15:31:34.383" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8473" PostTypeId="1" AcceptedAnswerId="8475" CreationDate="2018-12-05T09:09:48.777" Score="5" ViewCount="673" Body="&lt;p&gt;Am trying to run Latex + Emacs under DOS 5.0, and would currently seem to need long filenames. I have tried &lt;a href=&quot;http://sta.c64.org/dosprg/doslfn.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;the DOSLFN driver&lt;/a&gt; but it prevents Emacs from running. I have 4 MB RAM in total.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any smaller LFN driver? Any other solution?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;MEM&lt;/code&gt; shows&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;408688 largest executable program size&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;without DOSLFN, and&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;396896 largest executable program size&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;with it, so DOSLFN only takes 11792 bytes, but still, Emacs does not run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;MEM&lt;/code&gt; shows&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;655360 bytes total conventional memory&#xA;640000 bytes available to MS-DOS&#xA;[...]&#xA;3407872 bytes total contiguous extended memory&#xA;0 bytes available contiguous extended memory&#xA;3341312 bytes available XMS memory&#xA;64Kb bytes High Memory Area available&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and I am using GNU Emacs 19.34 on an Omnibook.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried running Emacs without DOSLFN and with less memory (396K), and it works. I have also managed to free more memory (460K), yet Emacs still fails to run when DOSLFN is loaded. It fails with no output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: apparently the solution is to reinstall Emacs after loading the LFN driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;More&lt;/strong&gt;: no, that did not work either.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2020-02-16T18:56:41.407" LastActivityDate="2020-02-16T18:56:41.407" Title="Minimal DOS long filename driver" Tags="&lt;ms-dos&gt;&lt;memory&gt;&lt;file-system&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8474" PostTypeId="1" CreationDate="2018-12-05T09:25:06.213" Score="3" ViewCount="464" Body="&lt;p&gt;Was there ever a case of a spreadsheet application introducing intentional floating-point errors when it detected that it had been pirated? Particularly errors that were small enough to go unnoticed until multiple calculation steps made them add up?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some reason I thought that there was but I can't find anything about it now.&lt;/p&gt;&#xA;" OwnerUserId="1969" LastActivityDate="2018-12-05T23:03:08.893" Title="Pirated spreadsheet software introducing intentional errors?" Tags="&lt;software&gt;&lt;copy-protection&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8475" PostTypeId="2" ParentId="8473" CreationDate="2018-12-05T10:06:46.650" Score="8" Body="&lt;p&gt;DOSLFN is the smallest LFN driver I’m aware of, short of built-in support in operating systems — but kernels with LFN support built-in take more memory than DOS 5. DOSLFN itself only needs 12K of memory. Since you’re trying this on an Omnibook, changing the operating system isn’t trivial anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The symptoms you show suggest that Emacs is failing to start not because it doesn’t have enough memory available (it’s a 32-bit protected mode application anyway, so it only cares about conventional memory in so far as it needs some to be able to load). Presumably there’s some incompatibility between Emacs and DOSLFN, at least on MS-DOS 5 on an Omnibook...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could try the LFNDOS driver instead; it’s available from &lt;a href=&quot;http://sta.c64.org/lfnemu.html&quot; rel=&quot;noreferrer&quot;&gt;the same location&lt;/a&gt; as you presumably got DOSLFN.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, I think it should be possible to run LaTeX and Emacs under DOS with short filenames; at least, I used to, back in the nineties, before long filenames were available on FAT. The DJGPP project is careful about ensuring that “user” programs work without long filenames (they should only be required if you want to rebuild parts of DJGPP).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-12-05T15:34:58.687" LastActivityDate="2018-12-05T15:34:58.687" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8476" PostTypeId="2" ParentId="4998" CreationDate="2018-12-05T14:28:02.897" Score="0" Body="&lt;p&gt;And of course, let us not forget the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_Mindlink&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari Mindlink&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-12-05T14:28:02.897" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8477" PostTypeId="2" ParentId="8474" CreationDate="2018-12-05T17:02:45.603" Score="1" Body="&lt;p&gt;Although I've only seen such things in games rather than in professional software, the same principle could apply to both: if the program is not &lt;em&gt;altered&lt;/em&gt;, it will either behave correctly or refuse to run at all, but attempts to alter the program &lt;em&gt;to bypass the protection&lt;/em&gt; will cause other parts of the program to occasionally malfunction in possibly-subtle ways.  If one uses a compiler and linker that can treat values of the form &lt;code&gt;someConstant+(uintptr_t)&amp;amp;someObject&lt;/code&gt; as link-time-resolvable constants, one can arrange things so that the parts of the code that use easy-to-find copies of addresses will automatically be kept synchronized with &quot;hidden&quot; ones every time the program is linked, but someone who tries to patch the machine code would cause the copies to get out of sync.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even here, I would think going for subtle behavioral variations would be a bad idea, because people might equate flakiness of a pirated version of the code with flakiness of the original.  On the other hand, it may be good to write such code in such a way that it will often work for awhile, but occasionally fail &lt;em&gt;with a report that it has been tampered with&lt;/em&gt;, using code written in such a way that someone encountering the message would have a hard time finding the code that produced it.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-12-05T17:02:45.603" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8478" PostTypeId="2" ParentId="8442" CreationDate="2018-12-05T21:28:46.180" Score="16" Body="&lt;p&gt;In theory, it is fairly simple duplicating a tape.&lt;/p&gt;&#xA;&lt;p&gt;The problem with &lt;em&gt;analog&lt;/em&gt; tape-to-tape copies is that sound quality lowers and spurious noises are also copied and more are generated into each new consecutive copy generation.  It did not contribute to improve the situation, that later tape copy protection methods/turbo loaders (SpeedLock, Alcatraz...) were more sensitive to noise, either due to the higher speeds, and also due to routines listening to noise that was not supposed to be in an &amp;quot;original copy&amp;quot; - or conversely, as @scruss correctly points out, listening to sounds that were supposed to be in the original copy.&lt;/p&gt;&#xA;&lt;p&gt;To further complicate matters, also later Spectrum/clone models, notably some Spectrum+ models in Spain and Portugal, and the Timex clones were made more &amp;quot;hard of hearing&amp;quot;, as a brain-damaged strategy idea to curb piracy (actually the Timex TC2048 clone I owned, had a 10x stronger resistor than the original speccy, in the circuit connected to EAR - e.g. a 10K resistor instead of a 1K resistor, known as R37 in the official ZX Spectrum electronic schematics).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/ZiigOSP.jpg&quot; alt=&quot;ear&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;That hardware change meant that often tapes that did load well in a regular ZX 48K Spectrum, did not load in a equivalent machine affected by that change, and would cause additional problems in using copied tapes.&lt;/p&gt;&#xA;&lt;p&gt;High-stereos hifi devices often did not cut it, due to the technology they had to improve the listening experience. I bought a HiFi stereo double deck tape recorder/radio for listening to music, with a mixer/stereo sound equaliser and never managed to load games from there, let alone copying ZX Spectrum tape/data copies. Ironically, one of the best tape recorders I owned for loading games, was a modest/mono one my father got from contraband from the (now former) Eastern block, made not with ICs but (still) with transistors.&lt;/p&gt;&#xA;&lt;p&gt;Besides copying tape-to-tape, people back then also used software methods for copying programs saved on tapes, to get better quality/&amp;quot;fresh&amp;quot; copies. From the humble &amp;quot;Pirate&amp;quot; for &amp;quot;normal speed tapes&amp;quot;, if memory does not fail me, to the famous &amp;quot;Lerm Tape Copier&amp;quot;, &amp;quot;Omnicopy 2&amp;quot;, and &amp;quot;The Key&amp;quot;, that understood several types of turbo loaders.&lt;/p&gt;&#xA;&lt;p&gt;Other common strategy, was cracking the protections of turbo loaders, if you had the knowledge, using a Spectrum Z80 debugger like Mons3, and saving them via the Spectrum with normal speed. I still have preserved a copy of &amp;quot;Popeye&amp;quot; where I cracked the turbo loader+related encryption routines, and added a boot menu that asks if I want a normal game play or with infinite lives. ( All done in a modest Spectrum 48K clone and a lot of pacience, free time, intuition and mons3)&lt;/p&gt;&#xA;&lt;p&gt;Later on, you also started having in the market hardware interfaces - &lt;a href=&quot;http://www.thespectrumshow.co.uk/Feature14.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multiface one&lt;/a&gt;, &lt;a href=&quot;http://bitbandit.org/20141231/disassembling-the-micro-pokeer-rom-firmware/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micro-Pokeer&lt;/a&gt;, that dumped all the Speccy memory for tape with a small initial loader. We knew they existed, but they were too expensive and out of reach for us as poor teenagers. Nevertheless, people used them to break heavily protected games, simply by pressing a button as soon they had finished loading a protected game, often still in the presentation/loader screen, if well timed. The latest pirated games that we got, before we abandoned the Spectrum, were software saved with those hardware interfaces. The late titles we got were thus saved in normal speed, and were much easier to copy, even with simple software tape copy programs.&lt;/p&gt;&#xA;&lt;p&gt;Disclaimer: I wrote a bit later on &lt;a href=&quot;http://ruka12.tripod.com/wspecem.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;TAPE2TAP&lt;/a&gt; for digitalising Speccy tapes on the PC, and &lt;a href=&quot;http://ruka12.tripod.com/wspecem.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;TAPE2TAP&lt;/a&gt; assembly routines were used as basis for the tape loader of the Warajevo ZX Spectrum emulator. In 1995, I digitised my entire tape collection to Z80 and TAP files, using my own software, together with a printer port-&amp;gt;tape connector.&lt;/p&gt;&#xA;&lt;p&gt;PS: Tried to save experimental radio broadcasts of Spectrum software in Portugal twice, and whilst some data got in, always got an error before loading the entire program (in the checkum, most probably). But then I lived in almost near line of sight with more than one radio/TV broadcasting antennas for the entire city on the other side of the river for our national channels (and illegal transmitters for Spanish TV channels, but that is a story for another day). So the conditions were less than ideal for saving data programs broadcasted from radio.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-11-17T10:37:15.893" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8479" PostTypeId="2" ParentId="8467" CreationDate="2018-12-05T21:31:00.960" Score="7" Body="&lt;p&gt;The compilers I produced or helped produce (40-50 years ago) produced code that kept all floating point numbers as simple 2's complement mantissa/exponent form. It converted them to hardware FP representation and invoked the FP unit to process the arithmetic, then on return converted them back. You have to remember, back in those days FP hardware had a very complex interface with highly limited functionality in how you could use it and the FP processing time was fantastically different to linear flow of your program. Fortran, as you state, was king because back then you would have multiple FP units at your disposal at a hardware level so mathematics had to be done in a special way to try to utilize them together (the first step to parallel processing). You had no idea of how long each FP operation was going to take, so the compiler had to produce some really clever code. Fortran's grammar allowed this. Years later with local storage, the grammar of the language was not important because we could do one parse and the door opened on many aspects of computing. If this subject interests you, research transcendental processing - this was the birthplace of FP representation and discussion.&lt;/p&gt;&#xA;" OwnerUserId="11338" LastEditorUserId="4921" LastEditDate="2018-12-25T05:43:47.767" LastActivityDate="2018-12-25T05:43:47.767" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8480" PostTypeId="2" ParentId="8474" CreationDate="2018-12-05T21:57:06.303" Score="1" Body="&lt;p&gt;Perhaps you're remembering &quot;copyright trap&quot;: small and inconsequential errors acting as a fingerprint.  A product with the same errors must have been copied; if there's no licence, some kind of infringement.  I have heard of software with this kind of thing, but don't know of any spreadsheet software.  Also some map copyright cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related idea is that of &quot;calculator forensics&quot;, from a researcher trying to find similarities in the exact behaviour of various calculators, specifically tabulating the result of calculating asin(acos(atan(tan(cos(sin(9)))))) in degrees.&#xA;&lt;a href=&quot;https://www.rskey.org/~mwsebastian/miscprj/algorithm.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.rskey.org/~mwsebastian/miscprj/algorithm.htm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11208" LastActivityDate="2018-12-05T21:57:06.303" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8481" PostTypeId="2" ParentId="8454" CreationDate="2018-12-05T22:15:50.107" Score="-4" Body="&lt;p&gt;They did it because it was easy! Back in those days there were no microsoft bloatware libraries, a decent programmer could disassemble an entire 10-16k game in under a week and have it ported from any platform to any other. The game was written such that all the code was at the start and the text, images etc neatly grouped at the end so it came apart very easily. We had access to some amazing tools that showed the program flow and within a day you would have all the subroutines mapped out and the basic functionality spread out on your lounge floor. Enough time has probably passed to openly discuss it but back then espionage was rife, I was into systems programming and we pioneered the copying and porting of Atari software (and cracking all their hardware security) making the information and technology 'freely available(ish)', it was not to make money, it was to screw Atari. Nowadays you would go to jail but back then this was how business worked! In those days the programming industry was small, quite often games were ported not by disassembly or copying but by disgruntled employees joining competitors or even disgruntled departments that left and formed their own games company taking with them the entire history, contact list and future R&amp;amp;D on a few floppies, I know it happened to us! Nowadays there's laws, case history, anti-trust, privacy, protection, digital copy-write... &lt;/p&gt;&#xA;" OwnerUserId="11338" LastActivityDate="2018-12-05T22:15:50.107" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8482" PostTypeId="2" ParentId="8474" CreationDate="2018-12-05T23:03:08.893" Score="-4" Body="&lt;p&gt;In the 80s-90s, nobody would design anything that would bugger their own software, copy protection was physical, remember, telephone support only nothing online! However, it would not be unusual if you discovered that after you saved your data it mysteriously started to get the odd auditing error here and there causing huge frustration. Before virus's etc software sometimes incorporated what we called TSJ or TSV 'Target Specific Trojan', these would tamper with your competitors data not in an obvious or dramatic way but in a very subtle impossible to realise what is going on type of way, the attack was not random but highly targeted to mimic bugs (such as items in an order being lost, an auditing Z-read to not balance with itself etc). The clever bit is quite often the Trojan was incorporated into the copy protection sector itself so continued doing its job even after all the software was erased! This was not software written by a self taught hacker in Mumbai, these were developed by highly skilled systems programmers with years of experience and in those days highly detailed specialist hardware knowledge! I always thought it was amusing that it took about 10-15 years before virus scanners got clever enough to report 'suspicious activity', by then everybody had moved on and the wars and battles long forgotten!  &lt;/p&gt;&#xA;" OwnerUserId="11338" LastActivityDate="2018-12-05T23:03:08.893" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8483" PostTypeId="1" AcceptedAnswerId="8484" CreationDate="2018-12-05T23:07:56.013" Score="1" ViewCount="179" Body="&lt;p&gt;Based the the specs I found for the TG16, it has 8 KB of RAM. I also found notes in the documentation of many opcodes that there is data stored in several &quot;flags and switches&quot; are these stored in RAM or in a designated register?&lt;/p&gt;&#xA;" OwnerUserId="10751" LastActivityDate="2018-12-06T00:37:06.747" Title="Does the TurboGrafX16 store switches and/or flags in RAM?" Tags="&lt;memory-layout&gt;&lt;turbografx-16&gt;&lt;ram&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8484" PostTypeId="2" ParentId="8483" CreationDate="2018-12-06T00:37:06.747" Score="5" Body="&lt;p&gt;You are probably referring to the status register. This is a hardware register in the CPU, and is not stored in RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, the HuC6280 is similar to a 6502-family CPU. You may want to acquaint yourself better with those parts; familiarity with them will make the HuC6280 easier to understand.&lt;/p&gt;&#xA;" OwnerUserId="461" LastActivityDate="2018-12-06T00:37:06.747" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8485" PostTypeId="1" CreationDate="2018-12-06T17:06:49.257" Score="4" ViewCount="362" Body="&lt;p&gt;I've read that the PCjr supports a 320x200 pixel mode with 16 colors.  But what I can't seem to find is how much memory that takes, how it's organized (chars?) or where it's located in memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure my searching skills are just rusty but I can't seem to find real info on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can this mode be addressed in a similar method as Mode 13h?  (linear)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;General information on how to program this mode would be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2018-12-06T17:19:10.340" Title="How is the 320x200x16 graphics mode mapped in the IBM PCjr?" Tags="&lt;graphics&gt;&lt;memory-layout&gt;&lt;ibm-pcjr&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8486" PostTypeId="2" ParentId="8485" CreationDate="2018-12-06T17:19:10.340" Score="6" Body="&lt;p&gt;The PCjr and Tandy 1000 both support graphics modes which take each byte of display memory which display each byte as two pixels, the first of which takes its color from the four upper bits and the second of which takes its color from the four lower bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 160x200 16-color mode maps memory like the CGA's graphic modes.  The 320x200 mode divides the screen into 4-pixel-high stripes, somewhat like the 2-pixel stripes of CGA graphics modes, where the bottom three stripes of each group each use memory 8192 bytes past the previous one.  This mode requires reserving a 32768-byte region of memory for use by the display controller (normally the system only reserves 16384 bytes).  Once that memory is reserved, the Tandy 1000 will allow all of it to be accessed at either its actual location or 0xB800:0; the PCjr, however, will only allow the first 16384 bytes to be accessed at 0xB800:0, so some programs for the Tandy 1000 that are written to use the 0xB800:0 mapping will leave two scan lines out of each quartet blank if run on a PCjr (IIRC, Tandy's Christmas demo would do that).&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-12-06T17:19:10.340" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8487" PostTypeId="1" AcceptedAnswerId="8489" CreationDate="2018-12-06T20:35:44.403" Score="27" ViewCount="6352" Body="&lt;p&gt;What was the first mainstream development toolchain that provided advanced debugging facilities?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By &lt;em&gt;&quot;mainstream&quot;&lt;/em&gt; I mean something that was available on home computers, not mainframes or super-expensive workstations. It also implies that it was commercially available (not custom-developed tools that never escaped the garage of some mad scientist).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My definition of &lt;em&gt;&quot;advanced debugging facilities&quot;&lt;/em&gt; includes at least the following features:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Setting breakpoints without having to define them explicitly in the source code (e.g. using the STOP statement in the middle of a gwbasic program does not qualify)&lt;/li&gt;&#xA;&lt;li&gt;Running step-by-step at the source code level statements (not having to resort to low-level single-machine-instruction stepping)&lt;/li&gt;&#xA;&lt;li&gt;Dumping the call stack, showing the actual function names from the source code&lt;/li&gt;&#xA;&lt;li&gt;Show values of global and local variables without having to look at the raw memory / CPU registers, and know the ABI specs by heart&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any language qualifies (well, any language that supports function calls, given the requirement on being able to view some call stack).&lt;/p&gt;&#xA;" OwnerUserId="4614" LastActivityDate="2019-02-04T09:43:41.597" Title="What was the first mainstream advanced debugger?" Tags="&lt;software-development&gt;&lt;debugging&gt;" AnswerCount="9" CommentCount="14" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8488" PostTypeId="2" ParentId="8487" CreationDate="2018-12-06T20:52:51.683" Score="7" Body="&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/a/853482/369446&quot;&gt;THINK Pascal&lt;/a&gt; had an integrated debugger that meets all your criteria. You could mark stop points in the editor and then debug your compiled code using them. The debugger supported stepping, a meaningful call stack display, and a good list of the variables as structured typed information.  &lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2018-12-06T20:52:51.683" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8489" PostTypeId="2" ParentId="8487" CreationDate="2018-12-06T20:59:28.090" Score="37" Body="&lt;p&gt;The &quot;Basic Programming&quot; cartridge for the Atari 2600 came out in 1980 and it supports all of those except the first one.  It had windows for the program, stack, variables, and output which could individually switched on and off (the cartridge would vertically stack as many enabled windows as would fit, stopping when all enabled windows were shown or it reached the bottom of the screen).  Unfortunately, it had to fit in 4K of code space and run on a machine with 128 bytes of RAM (so the program, variables, stack, and output were limited to a total of 64 bytes), but I don't think I've seen anything that sophisticated on any more powerful machines prior to that.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-12-06T20:59:28.090" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8490" PostTypeId="2" ParentId="8487" CreationDate="2018-12-06T23:09:13.323" Score="11" Body="&lt;p&gt;This is less of a definitive answer than a musing about some seemingly underlying assumptions within the question. For the question itself Supercat has already given a &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8489/6659&quot;&gt;near perfect answer&lt;/a&gt;. While it is of the typical kind where everyone know it's wrong, it does tick all boxes. I seriously would love to give it double points :)&lt;/p&gt;&#xA;&lt;h2&gt;Different Computer Classes&lt;/h2&gt;&#xA;&lt;p&gt;The most obvious issue with the question may be that it separates different 'classes' of computers - and more important implies important advancements made by them in prior. While it is true, that mainframes implemented many solutions first, they where still tied to their repertoire of tools - like command line operation on terminals in next to all cases. And even within the mainframe world solutions weren't developed for the fun of it, but when needed. Much like with minis and micros in parallel or later.&lt;/p&gt;&#xA;&lt;p&gt;For example the AID facility of BS2000 (a /370ish OS) did already support quite complex interactive debugging in the early 80s. But all based on very cryptic command line arguments.&lt;/p&gt;&#xA;&lt;p&gt;Need for more comfortable (I would prefer that term over 'advanced, which is more of a marketing blurb) debuggers grew out for one of more capable systems and more complex software, but more important due changes in software development. This includes especially the need to dive into large chunks of code generated by less then well known tools (compilers), imported from libraries or worst of all, inherited form prior developers.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;This development happened independent of machine type or 'class'.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Source Level Debugging&lt;/h2&gt;&#xA;&lt;p&gt;Already early microcomputer systems offered basic debuggers that did go past all hex handling of Hex-Kits. For example the original Apple II Monitor included convenient single-stepping and breakpoints with disassembling the instructions. And with the introduction of disk drives and Assemblers many additional tools came to hand, including source level debuggers. That's the 1978..1980 time frame. Eventually with the ORCA system as a first plateau supporting very convenient Assembly as well as Pascal and C - noteworthy here, that is wasn't until the mid 1980s that C became a professional supported choice on Apple II (or similar) systems.&lt;/p&gt;&#xA;&lt;p&gt;In general it was not only missing need, but more so missing capabilities of the systems in use that prevented the use of more comfortable features. To access join binary and source code the later needed to be at least indexed, a feature the quite limited memory of these systems could, if at all, only support for extreme small programs. Even more so if the source code had to be displayed. Impossible without multiple disk drives.&lt;/p&gt;&#xA;&lt;p&gt;Beside Assembly (and the all omnipotent BASIC) PASCAL was the only other choice. Here the UCSD system was eventually the best known - and it made a great case how to provide high level support on small machines. The p-code did include many references to the source/module structure already by default, and due its module structure parts of the system could be swapped in on demand.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;It wasn't until affordable machines by default had a RAM size of 512 KiB or more and hard drives that more comfortable features as requests became possible for most programming environments.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Workstations are Anything But PCs&lt;/h2&gt;&#xA;&lt;p&gt;When comparing machines, that have been sold as 'workstations' at their time, with other available it becomes clear, that there is no basic difference to other machines of the same time -- except they usually represent an upper end configuration.&lt;/p&gt;&#xA;&lt;p&gt;A Sinclair QL of 1984 used a 7.5 MHz 68008 with 128 KiB RAM and micro-drives, while a SUN 2/50 of the same year had a 10 MHz 68010 with 8 MiB RAM and (at least) one HD. The same point can be made for any other computer sold as Workstation - not to mention todays Gamer PCs that outclass what many manufacturers sell as workstation :)&lt;/p&gt;&#xA;&lt;h2&gt;Home Computers are Computers at Home&lt;/h2&gt;&#xA;&lt;p&gt;While this sounds nice at first, it's a classic post-hoc fallacy. After all, that would make any computer someone may have at home a &amp;quot;home computer&amp;quot;. Of course including any mainframe, mini or workstation running zOS or Unix. It's obvious this won't work as a portable classification - most definitely as porting the same computer into an office would right away turn it into an office computer - wouldn't it?&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;The location a computer is set up can not retroactive define a class.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;The question contains a lot on unnecessary constrictions and implied assumptions that are neither clear nor helpful at all, and at the same time an unclear definition what environment exactly is asked for.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;It may be useful to drop these restrictions and clarify what kind of functions and their representation is asked for.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-12-07T13:07:48.607" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8491" PostTypeId="2" ParentId="8388" CreationDate="2018-12-06T23:11:44.247" Score="2" Body="&lt;p&gt;Chips of that era were done by hand layout, typically colored pencil on mylar.  Hand layout is not automatic, and thus not fast, neither completely predictable in die area in advance.  Portions of a layout might be done by different people at different times and/or with different skill levels.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Floor planning was done before layout, and was thus based on estimates of the various sub-block sizes, so some breathing room might be left to be conservative about how well the layout specialist might be able to fit their sub-block into the layout.  Sub-blocks might also have been allocated to layout in nice rectangles, even though those rectangles might not pack at maximum efficiency in the final die size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, even high volume consumer chips might end up with gaps between blocks, or even large holes in the middle of a layout, especially when a layout specialist exceeded her/his budgeted component density.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There may also be reasons to be conservative about density at the planning stage for reasons of thermal spreading, capacitive coupling, package pinout limitations, and etc.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2018-12-07T02:18:19.987" LastActivityDate="2018-12-07T02:18:19.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8492" PostTypeId="2" ParentId="8487" CreationDate="2018-12-07T02:11:45.653" Score="15" Body="&lt;p&gt;The earliest innovator I know of was Manx. Manx made 'C' programming environments for early, low-cost computers like Apple ][, CP/M-80, MS-DOS, and Motorola 68000. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Aztec_C&quot; rel=&quot;noreferrer&quot;&gt;Manx Aztec C&lt;/a&gt; v1.06 had symbolic (source code) debugging support when released in early 1984. Manx provided a utility &quot;SIDSYM&quot;, which was used along with their linker's ability to generate symbol tables, to feed source code and symbols into &lt;a href=&quot;http://www.classiccmp.org/cini/pdf/Digital%20Research/CPM%20SID%20Symbolic%20Instruction%20Debugger%20User&amp;#39;s%20Guide.pdf&quot; rel=&quot;noreferrer&quot;&gt;SID&lt;/a&gt;. SID was a debugger from Digital Research for CP/M-80 that supported symbol tables. The &lt;a href=&quot;http://www.aztecmuseum.ca/docs/Aztec_C_Data_Sheet_Mar83.pdf&quot; rel=&quot;noreferrer&quot;&gt;Aztec C data sheet&lt;/a&gt; from 1983 mentions this feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system above was still pretty primitive by modern standards. The &quot;killer feature&quot; was a source-code level debugger that hid most of the machine code details and allowed you to interact with your 'C' code as written, and access run-time variables easily, and set conditional and regular breakpoints with ease. This is the basic user experience we all expect today in Visual Studio, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Manx continued to evolve the source debugging feature. By 1988, their 'C' compiler for the Amiga included a fully visual GUI source debugger that was probably the most advanced for any low-cost PC or home computer at the time. The MS-DOS versions of Aztec 'C' for the 8086 also supported source debugging at the same time, but with a less advanced UI. This feature is described in the &lt;a href=&quot;https://ia801902.us.archive.org/4/items/bitsavers_manxAztecClApr88_25693545/Aztec_C_MSDOS_4.10C_Commercial_Apr88.pdf&quot; rel=&quot;noreferrer&quot;&gt;manual available online&lt;/a&gt;. This was before Borland first shipped their initial version of &lt;a href=&quot;https://en.wikipedia.org/wiki/Borland_Turbo_Debugger&quot; rel=&quot;noreferrer&quot;&gt;Turbo Debugger&lt;/a&gt; for MS-DOS, as an add-on product to their compilers. Other 3rd parties also made symbolic debuggers for Turbo Pascal, but none that I know of offered as advanced a solution as Manx Aztec C at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Needless to say, Source-level debugging was a &quot;killer feature&quot; for low-cost development environments by 1989. It was not long after that the major players like Borland and Microsoft would catch up and begin offering compilers with IDE's and integrated source debugging as we know today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can download Manx Aztec C for various retro computers from the &lt;a href=&quot;http://www.aztecmuseum.ca/index.htm#topmenu&quot; rel=&quot;noreferrer&quot;&gt;Aztec Museum.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-12-07T13:17:05.187" LastActivityDate="2018-12-07T13:17:05.187" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8493" PostTypeId="1" CreationDate="2018-12-07T08:18:14.597" Score="12" ViewCount="1040" Body="&lt;p&gt;My first earliest experiences with &quot;large&quot; computers were an HP-2100 and a sigma-7, using a teletype and punch cards/line printer respectively. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've stumbled upon an old image of a PDP-6 and PDP-6 &lt;a href=&quot;https://emptysqua.re/blog/grok-the-gil-fast-thread-safe-python/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; which had a large (16 inch) circular CRT monitor (and it seems a light pen as well). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where these experimental devices or special graphics applications, or were these used to program and/or operate the computers routinely? If so, how?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;below:&lt;/strong&gt; from ultimate.com &lt;a href=&quot;http://www.ultimate.com/phil/pdp10/pdp6-serials.html&quot; rel=&quot;noreferrer&quot;&gt;PDP-6 serials&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bQf7n.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bQf7n.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;below x3:&lt;/strong&gt; from &lt;a href=&quot;http://www.computer-history.info/Page4.dir/pages/PDP.1.dir/&quot; rel=&quot;noreferrer&quot;&gt;PDP-1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sL7eZ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sL7eZ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/H0PcX.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/H0PcX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZBIPO.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZBIPO.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;below x2:&lt;/strong&gt; from archive.computerhistory.org &lt;a href=&quot;http://archive.computerhistory.org/resources/still-image/DEC/PDP-1_Online/&quot; rel=&quot;noreferrer&quot;&gt;PDP-1_Online&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AznMY.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AznMY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BSlrO.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BSlrO.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7118" LastEditorUserId="3748" LastEditDate="2019-08-04T10:08:14.770" LastActivityDate="2019-08-04T10:08:14.770" Title="What were the main uses of the large CRT and light pen on early PDP computers?" Tags="&lt;input-devices&gt;" AnswerCount="7" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8494" PostTypeId="2" ParentId="8487" CreationDate="2018-12-07T11:48:46.083" Score="10" Body="&lt;p&gt;Microsoft Codeview shipped in 1985 and has most of the features you're asking about (its been a while so I can't be certain it has everything e.g. call stack walking), when I was doing Turbo C support for Borland in 87/88 support for it was possibly the most requested feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could do source level stepping with Turbo C &amp;amp; symdeb but it wasn't as nice.&#xA;Version 2 of Turbo C had a debugger (shipped late '88?) which used the 386 hardware support. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of these had dual monitor support which was nice.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2018-12-07T12:43:39.717" LastActivityDate="2018-12-07T12:43:39.717" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8495" PostTypeId="1" AcceptedAnswerId="8497" CreationDate="2018-12-07T12:03:26.333" Score="8" ViewCount="697" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Hobbit_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Hobbit is a Soviet computer&lt;/a&gt; which was built to be compatible with the ZX Spectrum, but with some extensions. For example it has more memory and can run CP/M. The Hobbit had favourable reviews in the Your Sinclair magazine, and was briefly marketed in the UK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why was it withdrawn from the UK market so quickly? Seems like it would have had more than enough customers, even in 1990; the ZX Spectrum itself was still selling well at that time.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-12-09T17:47:33.967" Title="Why was the Hobbit withdrawn from the UK market?" Tags="&lt;zx-spectrum&gt;&lt;ussr&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8496" PostTypeId="2" ParentId="8487" CreationDate="2018-12-07T14:27:58.630" Score="10" Body="&lt;p&gt;I'm including this answer in response to a couple of suggestions, although it does not meet some of the criteria laid out in the question. DDT for the DEC PDP-1 has to be recalled as probably the very first interactive debugger, and most interactive debuggers that came later were indirectly inspired by DDT. (see &lt;a href=&quot;http://archive.computerhistory.org/projects/pdp-1/text/DEC.pdp_1.1964.102650078.pdf&quot; rel=&quot;noreferrer&quot;&gt;DDT Writeup&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DDT was built in late 1961 or early 1962 at MIT shortly after the arrival of the PDP-1 (serial number two).  The author was Alan Kotok, who later went on to be the principal engineer of the DEC PDP-10, one of the main timesharing systems before the microcomputer made a single user machine economical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DDT allowed the user to set a breakpoint, examine variables in several convenient formats, alter variables, disassemble instructions,  and patch code. This allowed the human to make efficient use of the very scarce machine time available.  Some of the features mentioned in the question are lacking, but DDT was very advanced for its timeframe. A more advanced version of DDT was later built for the PDP-6 and the PDP-10.  The VAX debugger was probably inspired by these.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-1 (&lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-1&quot; rel=&quot;noreferrer&quot;&gt;wikipedia&lt;/a&gt;) was probably the first commercial interactive computer intended as such.  Even though only 53 were built, it had an enormous impact on later industries like video gaming  (see &lt;a href=&quot;https://archive.org/details/pdp1_spacewar&quot; rel=&quot;noreferrer&quot;&gt;Spacewar&lt;/a&gt;), Word Processing (see &lt;a href=&quot;https://en.wikipedia.org/wiki/Expensive_Typewriter&quot; rel=&quot;noreferrer&quot;&gt;Expensive Typewriter&lt;/a&gt;), and even computer hacking  (see &lt;a href=&quot;https://hackaday.com/2017/06/27/the-pdp-1-the-machine-that-started-hacker-culture/&quot; rel=&quot;noreferrer&quot;&gt;Hackaday&lt;/a&gt;).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Steve Russell, author of Spacewar, later introduced a couple of prep school kids (Paul Allen and Bill Gates) to the PDP-10.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-1 computer predates the microchip, which made mainstream computing viable.  But mainstream computers of the 1970s and beyond owe an enormous debt to the PDP-1.  Without it, mainstream computing might have taken a very different path.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2018-12-07T14:58:33.197" LastActivityDate="2018-12-07T14:58:33.197" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8497" PostTypeId="2" ParentId="8495" CreationDate="2018-12-07T15:56:00.153" Score="11" Body="&lt;p&gt;As already said (&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8495/why-was-the-hobbit-withdrawn-from-the-uk-market#comment25355_8495&quot;&gt;in the comments&lt;/a&gt;) it will take more than just a few interviews to get an idea &lt;em&gt;why&lt;/em&gt;. It's the crux of this kind of questions as there is rarely a definitive answer. Looking at the timeframe, it seems obvious: &lt;strong&gt;The time for a mass marketed, simple 8-bit system designed in 1982 had passed by 1991&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But why was it withdrawn from the UK market so quickly?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The first question would be: Was it even marketed active - thats beyond a few adds and some shops serving a shrinking fan base?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first guess would be: Not a viable business anymore.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Seems like it would have had more than enough customers, even in 1990; the ZX Spectrum itself was still selling well at that time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Of course, 'well' depends much on an individual POV. At that time even the C64 was on it's way down. While there was a last surge in 1990, due to the opening of the iron curtain, with about 1 million units worldwide, it was on a decline. The C64 being without any doubt the #1 8-bit machine had already reached its end in the late 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar things can be said about the Spectrum itself. After all, production ended already in 1992, which is not only two years prior to the C64, but also rather short after the attempt to place the Hobbit. Unlike the latter, all production, development and marketing costs where long payed back. Despite that, Spectrums could be produced at an incredibly low price, it seems as if it wasn't worth any business anymore. Unlike that the Hobbit had a way more costly design and needed to make its inroads against super cheap sales of the genuine system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heck, even the &lt;a href=&quot;https://en.wikipedia.org/wiki/SAM_Coup%C3%A9&quot; rel=&quot;nofollow noreferrer&quot;&gt;SAM Coupé&lt;/a&gt;, introduced in 1989 as an upward path from the Spectrum ceased sales in 1992. It was much more praised than the Hobbit, still it was too late.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it was not only technology-wise, but also on simple monetary terms. 300 GBP (~1000 Mark at that time) could buy you a basic 286 PC with 512 KiB RAM and two floppies (400 GBP with a HD) - so why paying ~150 GBP to get a a strange 64 KiB Computer with a single floppy?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Hobbit had favourable reviews in the Your Sinclair magazine, and was briefly marketed in the UK.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, in a fan magazine made to cheer Sinclair products. One that, BTW, stopped publishing shortly thereafter (1993), after being sold around 1990, probably not because being such a great investment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't get me wrong, I'm not putting this down. Still such magazines are not really a measurement for success and especially not for objectivity. I like to see the various Amiga publications after 1990 as a window into a parallel world that never existed. Maybe we should not read them as computer magazines, but fantastic literature, an art form in its own right :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-12-09T17:47:33.967" LastActivityDate="2018-12-09T17:47:33.967" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8498" PostTypeId="2" ParentId="8493" CreationDate="2018-12-07T21:16:33.790" Score="12" Body="&lt;p&gt;I got a job in the summer of 1965, programming a PDP-6 to put a model of a protein molecule on the display, as a stick figure.  The molecule was 3D and the display was of course 2D, so I had to simulate depth.  I used perspective, shading, and motion.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea of the display was to allow a human crystallographer to evaluate the actions of another computer program, to see if they seemed real.  The other program, running on an IBM 7094, was bending and twisting the molecule so as to optimize something like bonding energy.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was hard,  and I only had a couple of computer courses and a little random hacking under my belt at the time.  The hardest part was programming the modem that was networked to the IBM 7094.  It took me all summer just to get something going.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; There are a number of applications that used the CRT on either the PDP-1 or the PDP-6.  These were all much more impressive than my efforts.  A partial list follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SHRDLU.  This is a program that could manipulate a virtual set of blocks using a virtual robotic arm.  It acted on the blocks, based on natural language input from the user.  The CRT was just to let the user see what SHRDLU was doing with the blocks.  The main focus of SHRDLU wasn't the display.  It was early exploration of natural language recognition.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expensive Desk Calculator.  This was a predecessor of VisiCalc, Lotus 1-2-3, Excel, or any of the electronic spreadsheets.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expensive Typewriter.  This was a predecessor of Word*Star, Word Perfect, Word, or any of the word processors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Spacewar.  My favorite, and already mentioned in another answer.  Often used as a demo of the capabilities of the CRT. Predecessor of Space Invaders, Asteroids, or any of the video games.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Project PEPR.  (Precision Encoding and Pattern Recognition)  This was about automating the scanning and evaluation of millions of bubble chamber photographs.  The CRT was used for, among other things, showing the user an image of the current photograph.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know whether the Harmony Compiler belongs in this list or not.  I'm not sure it used the CRT.  But it sure used the speakers!  This was a predecessor to the audio CD, MP3, and all that.  &lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2018-12-12T12:27:46.980" LastActivityDate="2018-12-12T12:27:46.980" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8499" PostTypeId="2" ParentId="8495" CreationDate="2018-12-07T22:05:55.723" Score="3" Body="&lt;p&gt;In 1991 places buying 8-bit machines were decidedly not the UK or &quot;the west&quot; in general. In contrast, this was precisely when Atari found a new life in Poland.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I suspect the basic story here is that they introduced this machine in the fSov block because those people were still buying them - largely due to exchange rates I'd guess. And then someone in the UK thought &quot;well the Spectrum was a hit, so this will be even better!&quot; thereby missing the point that the PC had already taken over the market so completely that they were even driving Apple out of the industry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at it another way, what 8-bit machine was a success in the 1991 time frame in the 1st world? Some leftover MSX in Japan and South America... and?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-12-07T22:05:55.723" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8501" PostTypeId="1" AcceptedAnswerId="8503" CreationDate="2018-12-08T08:40:06.623" Score="4" ViewCount="328" Body="&lt;p&gt;In 2001, Eyring Corporation released a 32-bit reconfigurable RTOS called EYRX. I remember downloading the documentation and programmer guide from their Web site. Strangely, no traces of that OS can be found anywhere on the Internet (except for the &lt;a href=&quot;http://mil-embedded.com/products/id/?1419&quot; rel=&quot;nofollow noreferrer&quot;&gt;brief mention on a defunct site&lt;/a&gt;). The system is not even on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Comparison_of_real-time_operating_systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;list of real-time operating systems&lt;/a&gt;, as if it never existed. Does anyone know what happened to EYRX?&lt;/p&gt;&#xA;" OwnerUserId="6803" LastEditorUserId="6803" LastEditDate="2018-12-09T19:36:00.913" LastActivityDate="2018-12-09T19:36:00.913" Title="What happened to EYRX?" Tags="&lt;operating-system&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8502" PostTypeId="2" ParentId="8487" CreationDate="2018-12-08T11:17:27.493" Score="6" Body="&lt;p&gt;The extremely popular &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_Micro&quot; rel=&quot;nofollow noreferrer&quot;&gt;BBC Micro&lt;/a&gt; (1981-1986, still in retro use today) had an exceptionally powerful debugger, &quot;Beebmon&quot; by Watford Electronics, capable of breakpoints, IRQ trapping, code stepping, and so on. From a summary:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;BEEBMON&lt;/em&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;em&gt;A ROM based machine code monitor for BBC Micro. &#xA;  It enables machine code programs to be debugged &#xA;  and altered easily and quickly. Being a ROM, its&#xA;  commands are always readily available and occupy no &#xA;  user memory. Appears to take no base page and only one page of relocatable workspace (256 bytes) and &#xA;  no more anywhere in RAM. Beebmon can do more than any other machine code monitors currently on the market. The special features include facilities like: TABULATE, MODIFY, FILL, COPY, COMPARE, &#xA;  SEARCH (HEX &amp;amp; ASCII) CHECKSUM, &#xA;  DISASSEMBLE, RE-LOCATE and, by emulating the 6502 processor, SINGLE STEP, BREAK POINTS ON &#xA;  READ/WRITE/EXECUTE OF LOCATION. Also BREAKPOINTS ON A, X &amp;amp; Y REGISTERS are provided . &#xA;  HAS WINDOWS INTO MEMORY &amp;amp; TEST WINDOWS. All this and more...&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I used this to trace IRQ handling in the OS and other ROMs, and to reimplement disk and keyboard handlers for software which required modified handling. I think it came out very early on, around 1982, and certainly by 1983 (according to the source).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Description source: &lt;a href=&quot;https://www.4corn.co.uk/archive/showpdfs/01%20Micro%20User-Electron%20User%20Dec%201983%20-%20Westminster/Watford%20Electronics%20-%20Catalogue%20-%20Late%201983.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Watford Electronics flier, 1983, on 4corn.co.uk&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6472" LastEditorUserId="2134" LastEditDate="2018-12-10T18:20:17.113" LastActivityDate="2018-12-10T18:20:17.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8503" PostTypeId="2" ParentId="8501" CreationDate="2018-12-08T11:29:28.210" Score="8" Body="&lt;p&gt;What, &lt;a href=&quot;https://web.archive.org/web/20020408094251/http://www.eyrx.com:80/online.html&quot; rel=&quot;noreferrer&quot;&gt;this documentation&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this by searching for Eyring on the Internet Archive, finding Eyring.com, going to their earliest 2002 snapshot and clicking on the EYRX link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the operating system itself was hosted on an FTP server, and those aren't archived by the Internet Archive. So we'll see if somebody else can find it.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2018-12-08T11:29:28.210" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8504" PostTypeId="1" AcceptedAnswerId="8506" CreationDate="2018-12-09T21:11:15.083" Score="9" ViewCount="949" Body="&lt;p&gt;'Blue Magic: The People, Power and Politics Behind the IBM Personal Computer' is an excellent book, but it makes one claim I cannot quite make sense of. Page 13 of the hardback edition says:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Lowe soon realized that the success of IBM's projected line of personal computers would depend on their compatibility with the company's established line of medium-sized and mainframe machines. IBM was obviously in a position to make a linkup of machines a reality; Apple was not. Because IBM had extensive patent protection on its machines, Apple was restricted to operating within its smaller product universes.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM PC was in no way compatible with the company's mainframes. The CPU instruction set, hardware architecture and operating system were all completely different; the programming languages were assembly, Basic and Pascal versus FORTRAN, COBOL and PL/I; you couldn't even use it as a terminal because while it had a serial port, 360 series terminals used a weird proprietary connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I'm aware, Apple never seriously contemplated a mainframe connection, because Steve Jobs didn't see the value; he famously remarked at one point that he saw no reason why you would need an umbilical cord to connect your computer to your company.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, none of the other microcomputer companies did anything along those lines either. Was that just because mainframes were a different universe and they didn't think of crossing the chasm, or were there relevant patent barriers?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="3783" LastEditDate="2019-08-02T08:56:03.230" LastActivityDate="2019-08-02T08:56:03.230" Title="Patent barriers to IBM mainframe compatibility?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;mainframe&gt;" AnswerCount="3" CommentCount="15" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8506" PostTypeId="2" ParentId="8504" CreationDate="2018-12-10T04:44:52.297" Score="5" Body="&lt;p&gt;&lt;em&gt;(I have to admit, my first impulse here was to have the question closed for being unspeakably broad - then again, I guess RC.SE isn't as narrowly focused, and more important, it gives a chance for a nice rant :))&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;It would be quite helpful to narrow this question down, not only to a single topic (or close group), but also to add some reasonable reference for the claim it implies. Also, some research about the claims added (like Assembly being a PC thing - whereas it was and still is a relevant Mainframe language - after all, being 100% assembly language compatible back to the 1960s is still a major sales point for new mainframes - and that's not only in some emulation like on PCs, but down to the user visible ISA and OS interfaces).&lt;/p&gt;&#xA;&lt;p&gt;Compatibility can mean several things from 'just' connecting as a terminal all the way to running applications of the system it is compatible with. And all of that had already been reached with microcomputers early on.&lt;/p&gt;&#xA;&lt;h2&gt;Running Application?&lt;/h2&gt;&#xA;&lt;p&gt;Many commercial applications on mainframes were written in COBOL, and next to all mini and micro manufacturers offered some COBOL environment as early as possible - or welcomed third party suppliers. Like Micro Focus, a company that's still around, which was formed in the mid 1970s to supply IBM or standard compatible COBOL. Their CIS COBOL (*1) was available on next to everything from a 6502 Apple II and&#xA;8080 system under CP/M to the same with MP/M and PDP-11 with RT11 as well as Unix on other CPUs. In addition they offered several libraries and tools (like FORMS and FILESHARE) that offered interfaces compatible with IBM products for data or terminal handling.&lt;/p&gt;&#xA;&lt;p&gt;Then again, applications on mainframes were seldom about a single user with a single loaded application working on private data (which is the PC mantra) but dozens or even hundreds of users working with the same data in a single application. Something the mini and micro world just did not supply in hardware.&lt;/p&gt;&#xA;&lt;p&gt;There was no way to connect hundreds of terminals to a micro (or mini) and have them operate at reasonable speed over long distance lines. Similarly, adding storage capabilities of mainframes (as in several tapes and disks in 100+ MiB range) would soon push the cost into the same region as the mainframe would be - but adding cost to maintain a second incompatible hardware base and a second software version. Not easy to sell to management.&lt;/p&gt;&#xA;&lt;p&gt;Sure, there was always some lonely but important accounting guy as a single user, and these applications had a good chance to be moved, and small multi user systems could handle some of the absolute lower end workload - the reason why Micro Focus focused more on multi user systems (MP/M, RT-11 or Unix) than single user micros.&lt;/p&gt;&#xA;&lt;p&gt;Lesson 1: &lt;em&gt;Transferring applications to minis and micros wasn't so much a hurdle, as it was was about missing large scale capabilities of mainframes&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Replacing Terminals?&lt;/h2&gt;&#xA;&lt;p&gt;Sure, this has been done many times. 3270 family emulations with according communication cards have been available for many (somewhat professional) micros and next to all minis. Again, this was more of a market for third party offers than from the machines' makers. Like with application support, customers not only wanted hardware, but a plug and play solution, where the focus is on support of their special needs.&lt;/p&gt;&#xA;&lt;p&gt;Heck, there was so much of a market, that even Apple itself created the Apple Communications Protocol Card (*2) to join the 3270 emulation, as well as the 2780/3780 remote job entry market. With a price of 700 USD for the hardware and 300 USD for the emulation (*3), Apple did cut a nice slice of the profit.&lt;/p&gt;&#xA;&lt;p&gt;Again as with the application, doing the hardware (or compiler) is just a tiny part of the job. To make a micro a viable option to replace a genuine (or third party) 3270 it did need a very specific application environment and adaption. Like the ability to load data prepared in a VisiCalc sheet into some existing mainframe application or more often leech mainframe data to be incorporated in local applications. Which again is something only a few people need in very specific settings. Good, but not big business - and not really visible either.&lt;/p&gt;&#xA;&lt;p&gt;Or turning the micro into a cashier system with direct inventory booking to a mainframe, effectively making it a very special terminal, which IBM did not deliver, or a kind of a decentralized subsystem (see below) - there's much room for definition where one ends and the other starts.&lt;/p&gt;&#xA;&lt;p&gt;Lesson 2: &lt;em&gt;Use as terminal or basic RJE has been done with many micros and all the time - it was just not as visible as some joystick sale.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Micros as 'Partner' Systems?&lt;/h2&gt;&#xA;&lt;p&gt;One very remarkable part about IBM is that they always worked with open interfaces. Each and every possible interface was well defined (*5) and usually not covered by any patents. At least not during the 60s and 70s when the essential mainframe interfaces were defined. Heck, the whole plug compatible industry was based thereon. Just because the later minis and micros used less sophisticated interfaces and/or didn't bundle interface and protocol in a tight fashion as IBM did doesn't make them less standard or less common. If we ignore the standard channel interface (aka the plug on the mainframe), this meant for most part serial interfaces based on &lt;a href=&quot;https://en.wikipedia.org/wiki/Synchronous_Data_Link_Control&quot; rel=&quot;nofollow noreferrer&quot;&gt;SDLC&lt;/a&gt;/&lt;a href=&quot;https://en.wikipedia.org/wiki/High-Level_Data_Link_Control&quot; rel=&quot;nofollow noreferrer&quot;&gt;HDLC&lt;/a&gt; (*5) or but also &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary_Synchronous_Communications&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bisync&lt;/a&gt; (*6), which is basically 3270 (*7).&lt;/p&gt;&#xA;&lt;p&gt;SDLC and Bisync are framing protocols, SDLC also with addressing capabilities, which means that multiple connections and partners can communicate over a single line. Think of it as similar to IP (*8). By handling an SDLC interface, all it needs is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Virtual_Telecommunications_Access_Method&quot; rel=&quot;nofollow noreferrer&quot;&gt;VTAM&lt;/a&gt;-alike API for an application to enable communication between a micro application and some running on a mainframe.&lt;/p&gt;&#xA;&lt;p&gt;Based on this, micros can easy replace classic RJE stations, as well as 'outsourcing' smaller application (using a compatible COBOL compiler), access central databases, but more so build high level client server systems with the micros handling most local I/O while the host does the processing. After all, client-server is no different from intelligent terminals anyway :))&lt;/p&gt;&#xA;&lt;p&gt;Applications like this have been made already starting in the 70s with minis and later micros. IBM's VTAM was, when introduced in 1974 (?), right away called for such connections to be made. And third party developers delivered. The IBM PC had SDLC/HDLC (and Bisync) cards and drivers available from day one - one of the hidden reasons for its success - it could deliver connectivity out of the box - which in turn was way more important than speed or any other feature for professional applications in a company environment.&lt;/p&gt;&#xA;&lt;p&gt;Again, like with before, these are applications that popular magazines didn't talk about a lot, and suppliers who didn't advertise in Byte or alike. No wonder it's unknown to everyone who grew up outside the mainframe world.&lt;/p&gt;&#xA;&lt;p&gt;Lesson 3: &lt;em&gt;Decentralized processing using mainframe couplings were quite common during all time of mini and micro usage, just not as visible to Joe Basementhacker.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Bottom Line&lt;/h2&gt;&#xA;&lt;p&gt;While the IBM-Mainframe-Compatible Market is huge and turns a lot of money, it is also way different from what hardware-only manufacturers experience. It's all about solution and integration. After all, that's why IBM is still a big number. For their customers it doesn't really matter what code is used, what plugs or if bits are numbered from left to right or vice versa. They want solutions, and if IBM provides the base to run their applications in their environment it doesn't matter if it's done on a classic /370 mainframe or in a Linux cluster.&lt;/p&gt;&#xA;&lt;p&gt;It was a less public market - microcomputer people didn't have the most contacts or inside information - much like the majority of people in the 80s had no idea what these home computers were good for, their kids (and peers) did interact with them.&lt;/p&gt;&#xA;&lt;p&gt;For microcomputer manufacturers who focus mainly on hardware this is no market at all. Sure, they could earn good money per unit, but they would have to spend some effort on selling a few hundred or maybe thousand machines to a customer that could at the same time produce a million to a less demanding public. And that's where they where heading.&lt;/p&gt;&#xA;&lt;p&gt;The 'Micro-on-Mainframe' Market is what smaller, quite valuable third party companies managed. This market is again so special, that an average micro could have been constructed and produced as part of a software project. Which happened multiple times.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;It's about the solution, stupid&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Compact Interactive Standard COBOL&lt;/p&gt;&#xA;&lt;p&gt;*2 - No, not the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II_serial_cards#Apple_II_Communications_Card_%E2%80%93_Apple_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple Communications Card&lt;/a&gt; (A2B0003) which was the first serial card for the Apple II, but the &lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102641953&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple Communications &lt;strong&gt;Protocol&lt;/strong&gt; Card&lt;/a&gt; (A2B2070).&lt;/p&gt;&#xA;&lt;p&gt;*3 - 1984 price - at that time a genuine 64 KiB IIe with 80 col card and one disk drive was already less than 1200 USD - not to mention any well stuffed clone&lt;/p&gt;&#xA;&lt;p&gt;*4 - well, mostly that is, or better it was well defined, but IBM itself didn't always follow the specs. I remember one case of an SDLC line where one of our customers always had issues of interrupted transfers. Highly sporadic. IBM didn't spend much time or effort to search for problems. They replaced the buffer (IBM term for interface card) twice, and since the protocol was HDLC and they where IBM, it was stated that the problem must be on the other side - after all, we were a less reliable third party.&lt;/p&gt;&#xA;&lt;p&gt;Our buffers were fine, a brand new development using an 8080 system. Quite powerful for back then. So we had to sit down for more than two weeks with extensive line debugging equipment (keep in mind, these are the late 70s, even high class protocol analyzers could only save a few KiB of data) until we could reproduce the situation. And who would have guessed, it was an error in &lt;em&gt;IBM's&lt;/em&gt; implementation of their very own SDLC protocol. So much for the 'standard' part.&lt;/p&gt;&#xA;&lt;p&gt;*5 - SDCL - Synchronous Data Link Control; HDLC - High-Level Data Link Control. A protocol with framing over various serial lines an offering addressing capabilities, so communication was not just between the endpoints, but multiple connections can be handled via a single line. Think of it similar to IP - in fact, chances are good that your DSL/Cable modem uses some PPPoE, where the PPP part is nothing else than a subset of SDLC :)))&lt;/p&gt;&#xA;&lt;p&gt;*6 - What is most remarkable from today's perspective is the similarity of Bisync and USB. Except for line turn and character stuffing, the Bisync protocol is exactly like USB, starting with the SYNC sequencing all the way to alternating ACK0/ACK1 packets.&lt;/p&gt;&#xA;&lt;p&gt;*7 - Or more correctly, Bisync is the base for RJE or 2780/3780&lt;/p&gt;&#xA;&lt;p&gt;*8 - In fact, chances are good that your DSL/cable modem uses PPPoE to connect, where the PPP part is nothing else than a subset of SDLC :)))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-12-10T10:06:00.460" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8507" PostTypeId="1" AcceptedAnswerId="8512" CreationDate="2018-12-10T13:08:41.383" Score="6" ViewCount="589" Body="&lt;p&gt;I'm in the process of restocking a lost collection of retro machines, including a couple of A500s, a 500+ and 2 A2000s (rev 4.1 and 6) in various states of disrepair.  For one of the 2000s I would like to have the ability to transfer existing data and programs from a SCSI hard disk to an IDE unit but I really can't work out how I can have 2 mass storage controllers in a single machine, either on a 500 or a 2000.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, I have an A500+ with a Wicher accelerator installed, along with an A590 hard drive.  I can only access one mass storage controller at a time - if the Wicher is in, the A590 isn't available.  In my head this is something like device ID conflicts and I would love to be able to archive off all this lovely stuff from both the A590 and the internal SCSI drive in one of the 2000s (Wicher experiments pending) - and I may get to a point where I want CD/DVD storage and more hard disks in the 2000 than the Wicher can provide.  Does anyone have any pointers or hints, or even better any experience of doing the same without resorting to SCSI &amp;lt;-&gt; IDE adaptors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT : The A590 is using an XT drive, NOT a SCSI drive!&lt;/p&gt;&#xA;" OwnerUserId="3896" LastEditorUserId="3896" LastEditDate="2018-12-10T15:11:25.537" LastActivityDate="2018-12-10T17:19:42.997" Title="Multiple mass storage controllers on Amiga 500 or 2000" Tags="&lt;amiga&gt;&lt;storage&gt;&lt;scsi&gt;&lt;ide&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8508" PostTypeId="2" ParentId="6826" CreationDate="2018-12-10T14:59:29.283" Score="5" Body="&lt;p&gt;As a counter-example, SCART connectors &lt;em&gt;were&lt;/em&gt; used on some computer monitors. I own a Phillips CM8833, which accepts RGB or CVBS input through a SCART connector (or separate connectors). This particular monitor was bought for use with an &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Archimedes&quot; rel=&quot;noreferrer&quot;&gt;Acorn Archimedes&lt;/a&gt; computer via SCART (TTL RGB), but it was also popular for Atari and Spectrum machines. There are pictures of a CM8833 (including the rear connectors) &lt;a href=&quot;http://www.bigbookofamigahardware.com/bboah/product.aspx?id=879&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As others have implied, SCART was a European standard, and the PC-compatible market was led by IBM in the USA. It is notable that these examples of SCART monitors are all non-IBM-compatible machines. Once everything became &quot;PC&quot; (or Mac) in the 1990s, SCART monitors were an irrelevance.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2018-12-10T14:59:29.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8509" PostTypeId="2" ParentId="977" CreationDate="2018-12-10T15:12:30.800" Score="0" Body="&lt;p&gt;At least 2400 bps requires no special hardware but extra software, see &lt;a href=&quot;https://github.com/nanoflite/c64-up2400-cc65&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/nanoflite/c64-up2400-cc65&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7534" LastActivityDate="2018-12-10T15:12:30.800" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8510" PostTypeId="2" ParentId="2931" CreationDate="2018-12-10T15:57:09.187" Score="5" Body="&lt;p&gt;Early laptop computers with LCD displays, such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Grundy_NewBrain&quot; rel=&quot;noreferrer&quot;&gt;Grundy Newbrain&lt;/a&gt; or the &lt;a href=&quot;https://en.wikipedia.org/wiki/Epson_PX-8_Geneva&quot; rel=&quot;noreferrer&quot;&gt;Epson PX-8&lt;/a&gt; were designed for displaying text. They were described in terms of the rows and columns of characters that would be displayed. These early machines prioritised wide displays (in order to show the same 40 or 80 characters per line as desktop machines), and could only display a few lines of text without scrolling. As LCD technology developed, more rows could be added, and the aspect ratio of the displays became steadily &quot;squarer&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the IBM-compatible PC market, computer manufacturers had to use display adapters (video cards) that were compatible with IBM's, in order to run the software written for them. IBM thus created a number of standards that others copied, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Monochrome_Display_Adapter&quot; rel=&quot;noreferrer&quot;&gt;MDA&lt;/a&gt; Monochrome Display Adapter (1981): text only, 720×350 pixels&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Color_Graphics_Adapter&quot; rel=&quot;noreferrer&quot;&gt;CGA&lt;/a&gt; Color Graphics Adapter (1981): up to 640×200&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Enhanced_Graphics_Adapter&quot; rel=&quot;noreferrer&quot;&gt;EGA&lt;/a&gt; Enhanced Graphics Adapter (1984): up to 640×350&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Multi-Color_Graphics_Array&quot; rel=&quot;noreferrer&quot;&gt;MCGA&lt;/a&gt; MultiColor Graphics Adapter (1987): up to 640x480&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Video_Graphics_Array&quot; rel=&quot;noreferrer&quot;&gt;VGA&lt;/a&gt; Video Graphics Adapter (1987): up to 640x480&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So on this basis, the earliest we should expect to find a PC-compatible laptop with 640x480 resolution is 1987. (Laptop resolutions also tended to lag behind desktops: The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PC_Convertible&quot; rel=&quot;noreferrer&quot;&gt;IBM PC Convertible&lt;/a&gt; of 1986 had a resolution of 640x200.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In 1988, the New York Times published a &lt;a href=&quot;https://www.nytimes.com/1988/10/23/business/the-executive-computer-compaq-finally-makes-a-laptop.html&quot; rel=&quot;noreferrer&quot;&gt;review&lt;/a&gt; of Compaq's first* laptop computer, the SLT/286. They note:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The machine offers a bright high-resolution display that supports the VGA video standard, the first laptop with that feature.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note that this would be a monochrome display: colour LCDs were still several years off. Thus, excepting a non-IBM-compatible laptop getting there first, it appears that the first laptop capable for displaying a 640x480 resolution was the &lt;strong&gt;Compaq SLT/286&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*Compaq had entered the market in 1982 with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Compaq_Portable&quot; rel=&quot;noreferrer&quot;&gt;Compaq Portable&lt;/a&gt;, but this was a &quot;luggable&quot;, suitcase-sized computer with a CRT display.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2018-12-10T15:57:09.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8511" PostTypeId="1" AcceptedAnswerId="8525" CreationDate="2018-12-10T16:25:09.500" Score="19" ViewCount="2319" Body="&lt;p&gt;I just got burned by the &lt;a href=&quot;https://stackoverflow.com/q/1880321/369446&quot;&gt;260 character path limitation&lt;/a&gt; in &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#file-and-directory-names&quot; rel=&quot;noreferrer&quot;&gt;Windows&lt;/a&gt;. Why did Microsoft decided to limit paths to 3 characters for drive + 256 characters + 1 character for the terminator? Mac OS of the same vintage has a 31 character filename limit but no path limit since the FSSpec stored volume number, refnum, and 31 character filename (Pascal string as length byte + 31 characters). &lt;a href=&quot;https://en.wikipedia.org/wiki/Hierarchical_File_System&quot; rel=&quot;noreferrer&quot;&gt;HFS&lt;/a&gt; running on 512k of RAM could support long paths, but Windows 3.1 and 95 cannot. Newer versions of Windows can under some limited circumstances break the 260 character path limit, but they are limited by compatibility to Win32 headers.&lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2018-12-12T19:00:06.490" Title="Why did Windows pick 260 characters as the maximum path length?" Tags="&lt;windows-3.x&gt;&lt;windows-95&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8512" PostTypeId="2" ParentId="8507" CreationDate="2018-12-10T17:19:42.997" Score="6" Body="&lt;p&gt;The Amiga can support multiple mass storage controllers, subject to the following necessary limitations:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Any time multiple controllers are using AutoConfig, each controller must &lt;strong&gt;correctly&lt;/strong&gt; support the AutoConfig protocol. This means it must &lt;em&gt;pass the token&lt;/em&gt; to other controllers on the bus so that each controller gets a chance to configure itself.&lt;/li&gt;&#xA;&lt;li&gt;Each mass storage controller needs a device driver, and the name of the device drivers should not conflict.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I suspect you have an issue with #1 on your A500 because the CPU socket AutoConfig board does not allow other AutoConfig boards to co-exist on the Zorro bus. That's why the Amiga does not see the A590 when the CPU socket board is installed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga OS has a specific solution for unique naming of the device drivers when you have both the internal IDE and a Commodore SCSI controller installed. The IDE interface will use &quot;scsi.device&quot;, and the SCSI controller will use &quot;2nd.scsi.device&quot;. Lots of 3rd party IDE controllers also use &quot;scsi.device&quot;, making it compatible with this solution. And, lots of 3rd party SCSI controllers use their own driver (e.g. &quot;gvpscsi.device&quot;) to also avoid naming conflicts when there are multiple mass storage controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the usual way of cloning HDD's on an Amiga is by having multiple HDD's connected up to a single controller. That does not seem to be an easy option for your circumstances, since you have a mix of ST-506 and SCSI HDD's and limited no ability to move the controllers between machines. I think you are best off getting a second SCSI HDD for backing up the A2000 using its existing controller, whilst simply using floppies to backup the A590 without the CPU socket board installed.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-12-10T17:19:42.997" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8513" PostTypeId="2" ParentId="2931" CreationDate="2018-12-10T23:25:47.613" Score="1" Body="&lt;p&gt;I was going to mention devices like the Compaq Portable III in 1987, which has a gas plasma display in a &quot;luggable&quot; configuration. We used to call this a Lunch Box computer. It was not battery powered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this display is only 640x400.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We bought one of these cases as an empty clone case, and loaded up SCO Unix. We'd take it to demos, and I'd used it on trips. The idea of having a &quot;portable&quot; Unix workstation was novel for us at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just carry this thing and a 9600 baud modem! :)&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-12-10T23:25:47.613" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8514" PostTypeId="2" ParentId="977" CreationDate="2018-12-10T23:59:38.760" Score="0" Body="&lt;p&gt;The design of a software UART on the 6502 involves some compromises between code size, RAM usage, and CPU loading.  The Kernel's UART routines are designed to minimize code size and RAM usage at the expense of CPU loading.  At higher baud rates, it's necessary to minimize CPU loading which in turn requires using code which is bigger and uses more RAM than would be needed at slower speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, I'm not sure why the UART pins are laid out as they are.  If the receive data pin were located at bit 7 and transmit on bit 0, that would eliminate the need for any manual register saves or restores most of the times the interrupt fires.  Even while transmitting and ready for reception, a typical invocation of the NMI could look like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;lsr txBuffer&#xA;rol $DD01&#xA;bit $DD0D ; Reset interrupt flag&#xA;bcc startBit1&#xA;inc $FFFB ; Service next interrupt with a routine 256 bytes higher&#xA;rti&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;One would need to have many different interrupt service routines placed to allow code to switch among them efficiently, but the performance could be much faster than if code had to save and restore the values of the A, X, and/or Y registers every time the interrupt fires.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-12-10T23:59:38.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8515" PostTypeId="1" AcceptedAnswerId="8516" CreationDate="2018-12-11T13:07:19.993" Score="27" ViewCount="4282" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_650&quot; rel=&quot;noreferrer&quot;&gt;IBM 650&lt;/a&gt; seems to be a load-store machine. One advantage of a load-store machine is that the instruction can be shorter because there's less pressure to pack more information into it. But the IBM 650 has two addresses in each instruction: the operand, and the address of the next instruction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, after every instruction, the next one needs to be read from somewhere else. That's true of all stored-program computers. It's just that the obvious way to do that is to implement some kind of counter which implicitly gets incremented after each instruction, and then also may be used by the hardware as a pointer to fetch the next one. Then, if ever that value needs to be modified, well that's what &lt;code&gt;jmp&lt;/code&gt; is for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ... &quot;interesting&quot; approach of the IBM 650 means that &lt;code&gt;jmp&lt;/code&gt; is basically replaced by &lt;code&gt;no-op&lt;/code&gt;, and every instruction incurs the cost of specifying the address of the next instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the use of this? Maybe they expected users to modify the next instruction field to allow for Real Goofy control flow (structured programming hadn't been invented yet, nor had GOTO Considered Harmful been written)? Or was the logic to increment and dereference a program counter not feasible for some reason?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-04-17T15:50:20.880" LastActivityDate="2019-04-17T15:50:20.880" Title="Why does an instruction include the address of the next instruction on the IBM 650?" Tags="&lt;ibm&gt;&lt;instruction-set&gt;&lt;early-computer&gt;&lt;ibm650&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8516" PostTypeId="2" ParentId="8515" CreationDate="2018-12-11T14:29:42.860" Score="46" Body="&lt;p&gt;Very simple: Because there was room for an address and it improves performance a lot. Or as the manual puts it:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It is important, however, for the programmer to realize that the simplest method of programming (using sequential drum location for succeeding instructions) causes the machine to waste a large amount of time waiting and searching.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To start with, the 650 is not a load store architecture, as that would imply multiple registers, but an accumulator machine. Further, it might be useful to keep in mind that it's still in between a punch card computer and a computer as we know it today. We tend to always look at it as a CPU with a memory stored program, as now canonical, but its operation relies as much on the plug-board programming it had in addition.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Back to the question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 650's main storage was a drum with 50 words of 10 digits (plus sign) per track (band) and 20, 40 or 80 tracks. An instruction consisted of a two digit opcode and a 4 digit operand address. Of course they could have left the remaining 4 digits unused, or use it to encode the address of a second operand, making it a two operand machine, except that would have required a more complicated and expensive logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using them to store the follow-up address improves things on several levels:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;First it saves on the need of a separate incrementer for the program counter: only a load circuit is needed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;This in turn also implements jump instructions without any further effort.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On the software side, it allows many strategies to use this chaining for simplifying code and/or creating logic otherwise hard to implement.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And last but certainly not least, it did offer a great way to improve performance to the max, as the instructions could be spread out in a way to have the next always ready when the current one is done.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The last point is (as always) quite obvious when doing the math (*1). The drum rotated at 12,500 rpm; that's about 4.8 ms per turn, or 9.6 µs per word. Each instruction can, as usual, be described by the time it takes. For simplicity this can be done in word time (which equals 9.6 µs). Even the most simple instruction like an add will take 3 word times. So if we assume just the instruction timing (for simplicity), then the machine won't be ready to read a follow-up instruction until the fourth word thereafter. Placing the next instruction in a consecutive location would therefore add a whole rotation before it could be read and executed. That's 4,800 µs compared to zero when spacing the two sequential instructions three words apart, making it like &lt;strong&gt;16 times slower&lt;/strong&gt; than it could be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if it were that simple, they could have just put in a skew of 3 on the hardware level when addressing words as instructions (*2,3), but it isn't. Not only do instruction timings range from 3 to 17 word times (*4), but access also depends on the place the data is stored. Almost every instruction addresses some data (which the first address is meant for). Since data are stored on the same drum, and all heads are aligned, it means that an instruction has first to wait for the according data to come by, then execute and then fetch the next instruction. So there are two access timings (waits) to be incorporated into each instruction layout, plus its execution time (*5).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optimum program structure means staggering instructions and data in a way around the drum that minimizes wait times for the data cell to come around and the next instruction to follow. And we are not talking a few percentage plus or minus, but up to 50 fold slower - as it may degrade a single word access to a whole drum turn.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In fact&lt;/strong&gt;, a case can be made, that including the address of the next instruction is exactly the same case as for including the data address, as both are random access operations within the same framing of a memory access. Thus both should have the same freedom of determination within the program context.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Reducing that to an implied next address as of the following word is a simplification that's only free in a system with zero (or next to zero) access time.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 . In fact, the manual spends a whole section on what it calls &lt;em&gt;&quot;Optimum Programming&quot;&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - And adding an incrementer for the PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - But then again, this skew would also screw the access of the very same words as data ... not cool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Plus exceptions like Table Lookup with its very own timing issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - It gets even more complex due the fact that the accumulator adheres to drum timing, so execution time also relies on the instruction in question residing on an even or odd address. Also instruction search and data search can be in parallel if the circumstances are right.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2018-12-13T11:52:05.697" LastActivityDate="2018-12-13T11:52:05.697" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8517" PostTypeId="2" ParentId="8504" CreationDate="2018-12-11T19:50:23.920" Score="3" Body="&lt;p&gt;I always thought that the biggest hurdle was getting a legal operating software. A huge mainframe is worthless without a supported operating system, and those were often bundled with the hardware and not sold (or leased) separately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least that was what I was told hanging out at the University Data Center in 1981.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastActivityDate="2018-12-11T19:50:23.920" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8518" PostTypeId="2" ParentId="8493" CreationDate="2018-12-11T21:11:06.213" Score="4" Body="&lt;p&gt;On the PDP1 at least they were used to play video games! Specifically SpaceWar, a predecessor to Asteroids (and every other top down game, really)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.masswerk.at/spacewar/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.masswerk.at/spacewar/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11372" LastEditorDisplayName="user12" LastEditDate="2018-12-11T21:45:30.770" LastActivityDate="2018-12-11T21:45:30.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8519" PostTypeId="1" CreationDate="2018-12-11T21:29:47.747" Score="15" ViewCount="764" Body="&lt;p&gt;To improve &quot;authenticity&quot; of a mainframe simulator and for an additional nostalgic effect, I'd like to add sounds of a line printer to it. They should be similar enough to the original sounds for people to recognize familiar cadences of standard headers and/or footers of printouts.&#xA;Before I attempt to write my own, I'd like to try and find an existing one; I'm unlikely the first person who'd want something like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, searches for &quot;line printer sound simulator&quot; return nothing of relevance; a few printer sound effects in the form of MP3 files at best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know of an open source mainframe simulator with line printer sound? I have a drum printer in mind, but a chain printer sound simulator would do as well. &lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2018-12-14T16:51:38.633" Title="Is there a line printer sound simulator?" Tags="&lt;emulation&gt;&lt;mainframe&gt;&lt;printer&gt;&lt;sound&gt;" AnswerCount="3" CommentCount="21" ContentLicense="CC BY-SA 4.0" />
  <row Id="8520" PostTypeId="5" CreationDate="2018-12-11T21:34:16.890" Score="0" Body="" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-12-11T21:34:16.890" LastActivityDate="2018-12-11T21:34:16.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8521" PostTypeId="4" CreationDate="2018-12-11T21:34:16.890" Score="0" Body="For questions concerning use, maintenance, restoration or emulation of printers used along with retrocomputers." OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2018-12-11T21:34:16.890" LastActivityDate="2018-12-11T21:34:16.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8522" PostTypeId="2" ParentId="8519" CreationDate="2018-12-11T21:55:26.127" Score="5" Body="&lt;p&gt;Well, having a separate sound file will be a challenge. beside the fact, that you'll always get the way louder base level of a computer room with it, it also depends a lot on the type and model of line printer. Equally important, the sound isn't much impressive as long as the cover is closed - yes, it did make a huge difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe try this video &lt;a href=&quot;https://www.youtube.com/watch?v=LtlrITxB5qg&quot; rel=&quot;nofollow noreferrer&quot;&gt;The IBM 1401 mainframe runs &quot;Edith&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside several printouts (sorry, always covered) including two very similar spaced but with different amount of characters printed, which is relevant for the specific noise, it also gives impression of basic sound level as well as card readers and keypunch in 'DUP' mode&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FiEGoVzmyvs&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; are &lt;a href=&quot;https://www.youtube.com/watch?v=kEWcvmUIuyE&quot; rel=&quot;nofollow noreferrer&quot;&gt;more&lt;/a&gt;, this time showing the printer without cover, but different cameras and different loudness setting. Not the basic noise the chain i making when the printer is in ready to print.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it would be a good idea to take a look at the &lt;a href=&quot;http://bitsavers.org/pdf/ibm/1403/&quot; rel=&quot;nofollow noreferrer&quot;&gt;1403 printer manuals&lt;/a&gt; as they not only provide basic estimations about printing time for a line, but also take form advance according to form control into account - plus describing the allowed processing time for the CPU to feed the next line. A perfect line printer emulation would also have to include this part. This includes as well the I/O load on a given channel - don't we all remember printers having hiccups on machines with too many devices on a channel, just because the owner didn't want to buy more?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-12-13T09:36:15.553" LastActivityDate="2018-12-13T09:36:15.553" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="8523" PostTypeId="2" ParentId="8515" CreationDate="2018-12-11T22:45:59.987" Score="10" Body="&lt;p&gt;If your primary memory is not random access, in the sense that at any instant some addressed words will take longer than others to be read, then you can potentially improve performance by having each instruction specify where the next instruction is located.  The programmer is then coerced to figuring out where that next instruction ought to be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This applies to any rotating memory, whether it's a drum surface or pulses in a mercury tank. The cost, as pointed out, was relatively low.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instruction bits to some extent were not in short supply in those days, since memories were very small and expensive, so a memory address didn't need many bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much programmer effort was spent on 'optimal programming', though Wilkes refused to countenance such a scheme for the &lt;a href=&quot;https://en.wikipedia.org/wiki/EDSAC#Memory_and_instructions&quot; rel=&quot;noreferrer&quot;&gt;EDSAC&lt;/a&gt;, rightly perceiving that this was just a temporary need until better memory technology arrived.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2018-12-11T22:45:59.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8525" PostTypeId="2" ParentId="8511" CreationDate="2018-12-12T09:36:04.807" Score="15" Body="&lt;p&gt;In the Windows world, the &lt;code&gt;MAX_PATH&lt;/code&gt; 260-character limit dates back to the introduction of the Win32 APIs; it is for example documented in &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectorya&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;GetWindowsDirectory&lt;/code&gt;&lt;/a&gt;. Before that, Windows (at least in version 3) documented a 144-character limit; see for example &lt;code&gt;GetSystemDirectory&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as why the path limit is 260 characters, the general answer you’ll find on the Internet is backwards compatibility. OK, that’s often the case in computing in general, and on Windows in particular (which is why many 30-year-old Windows programs can still be made to run on modern Windows, at least on 32-bit systems). The question then becomes, backwards compatibility with what?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The obvious answer would be DOS, and perhaps Win16. But DOS has a maximal &lt;em&gt;path&lt;/em&gt; limit of 66 characters, constrained by its CDS (current directory structure) which has room for a 67-byte nul-terminated string to store each drive’s path (including drive letter, if appropriate). DOS-based versions of Windows couldn’t change this, since they had to maintain compatibility with DOS programs — imagine being able to store a file in a deeply-nested directory, only to have it be inaccessible from DOS! So the DOS limit doesn’t explain the 256-character limit in Win32. (I’m ignoring network drives here.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Incidentally, you can achieve the latter effect by mounting a FAT drive under Linux: Linux allows much longer paths on FAT than DOS or Windows can handle, so you can create directories which are so deeply nested that DOS can’t handle them properly.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Digging further reveals something interesting; old Windows headers define, in &lt;code&gt;stdlib.h&lt;/code&gt;,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#if defined(__OS2__) || defined(__WIN32__)&#xA;#define _MAX_PATH       260&#xA;#define _MAX_DRIVE      3&#xA;#define _MAX_DIR        256&#xA;#define _MAX_FNAME      256&#xA;#define _MAX_EXT        256&#xA;#else&#xA;#define _MAX_PATH       80&#xA;#define _MAX_DRIVE      3&#xA;#define _MAX_DIR        66&#xA;#define _MAX_FNAME      9&#xA;#define _MAX_EXT        5&#xA;#endif&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The 80-byte &lt;code&gt;MAX_PATH&lt;/code&gt; makes sense for DOS and Win16, based on the CDS above: that’s just enough room for a 66-byte path, &lt;code&gt;\&lt;/code&gt;, 12-byte filename (&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6856/79&quot;&gt;11 bytes stored on disk and &lt;code&gt;.&lt;/code&gt; separator&lt;/a&gt;), and a nul terminator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interesting part is the other definition: the famous 260-byte limit... defined for Win32, and for OS/2! Reading through the OS/2 APIs doesn’t help much, because they’re all designed to not have documented limits (programs are supposed to call &lt;code&gt;DosQuerySysInfo&lt;/code&gt; with &lt;code&gt;QSV_MAX_PATH_LENGTH&lt;/code&gt; to find the maximum path length), as are in fact most of the Windows APIs (&lt;em&gt;e.g.&lt;/em&gt; &lt;code&gt;GetCurrentDirectory&lt;/code&gt; which takes a buffer and allocated length, and indicates the required length if the buffer isn’t big enough). But &lt;em&gt;Inside OS/2&lt;/em&gt;, in its description of the file system name space, says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;All OS/2 filename and pathname interfaces, such as &lt;strong&gt;DosOpen&lt;/strong&gt;, &lt;strong&gt;DosFindNext&lt;/strong&gt;, and so on, are designed to take name strings of arbitrary length. Applications should use name buffers of at least 256 characters to ensure that a long name is not truncated.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So I get the impression that the 256-character limit is part of OS/2’s legacy, and that when it was chosen, 256 characters was considered sufficient for “name strings of arbitrary length”.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2018-12-12T09:46:19.860" LastActivityDate="2018-12-12T09:46:19.860" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8526" PostTypeId="2" ParentId="104" CreationDate="2018-12-12T10:28:08.600" Score="5" Body="&lt;p&gt;&lt;a href=&quot;http://jope.fi/drives/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; (&lt;a href=&quot;http://web.archive.org/web/20180924214916/http://jope.fi/drives/&quot; rel=&quot;nofollow noreferrer&quot;&gt;archive.org copy&lt;/a&gt;) is a site with specific instructions for converting PC drives from several manufacturers to Amiga replacement drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that getting the disk ready signal to work is necessary for most games that didn't use AmigaDOS for floppy I/O but that accessed the floppy controller directly. These games typically waited for the disk ready signal before continuing with floppy I/O and will thus stall if the signal isn't working.&#xA;Booting the Workbench on the other hand and running applications or games that use AmigaDOS for I/O will work fine even without working disk ready signal. Ironically, AmigaDOS (1.x at least, I haven't tested other versions) is ignoring Commodore's own recommendation to check this signal.&lt;/p&gt;&#xA;" OwnerUserId="11374" LastEditorUserId="11374" LastEditDate="2018-12-15T19:26:27.793" LastActivityDate="2018-12-15T19:26:27.793" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8527" PostTypeId="1" AcceptedAnswerId="8534" CreationDate="2018-12-12T14:02:33.177" Score="14" ViewCount="2292" Body="&lt;p&gt;Back in the DOS days of gaming (more specifically, 80286 - 80486 era), developers typically needed to choose between using the chunky and easier &lt;a href=&quot;https://en.wikipedia.org/wiki/Mode_13h&quot; rel=&quot;noreferrer&quot;&gt;Mode 13h&lt;/a&gt; or the more complex &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Mode_X&quot; rel=&quot;noreferrer&quot;&gt;Mode X&lt;/a&gt;&quot; that provided hardware scrolling and VGA memory-to-memory copies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I understand, Mode 13h has a simple memory layout where all 320x200 pixels are arranged in a linear fashion.  While this mode was simple, it had a smaller resolution than Mode X and was limited to 64K of VGA memory.  Which means the CPU must copy new information over the slower external bus (such as ISA).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mode X was more complicated because it used planar graphics (bitplanes).  But it also supported a higher resolution of 320x240 pixels.  Which are also square vs. the slightly &quot;stretched&quot; pixels of Mode 13h.  Another advantage of Mode X was it supported hardware panning (scrolling) across the entire 256K of VGA memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it seems to me that Mode X would always be the mode to use when you want fast scrolling games like Jazz Jackrabbit.  Despite the more complex memory layout it seems to be a superior mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I recently read that the VLB (VESA Local Bus) eliminated much of the advantages of Mode X because it supports a direct connection to a 486 processor.  While the CPU would have to drive more pixels for scrolling, a mid-range 486 could easily handle the task.  Which means that using a simpler graphics mode such as Mode 13h would now be preferable because it could greatly increase development productivity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my two-part question becomes, is there ever a circumstance where Mode 13h is a better choice for fast scrolling DOS games over Mode X?  Second, how (if at all) did the VLB standard affect this decision?&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="2081" LastEditDate="2019-01-09T13:27:13.857" LastActivityDate="2019-01-09T13:27:13.857" Title="For fast scrolling DOS games, when was Mode13h preferred over Mode X?" Tags="&lt;ms-dos&gt;&lt;graphics&gt;&lt;performance&gt;&lt;vga&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8528" PostTypeId="2" ParentId="8515" CreationDate="2018-12-12T14:05:44.217" Score="9" Body="&lt;p&gt;Yes, it WAS due to the fact that with a rotating drum memory, you wanted the next instruction to be at a location that was just about to come under the read/write heads rather than in the next sequential location, where it could take &lt;em&gt;a full revolution&lt;/em&gt; of the drum to be able to read the instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All was not lost for the programmer, however.  The 650 came with the &lt;em&gt;Symbolic Optimizing Assembly Program&lt;/em&gt; (SOAP) which arranged the instructions to the best advantage for you.&lt;/p&gt;&#xA;" OwnerUserId="11378" LastActivityDate="2018-12-12T14:05:44.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8529" PostTypeId="1" CreationDate="2018-12-12T15:17:10.097" Score="4" ViewCount="315" Body="&lt;p&gt;I have a IIgs that I clipped the battery out of a few years back. I'm thinking I want to replace a battery in there, but before I spend money on a product like &lt;a href=&quot;https://www.reactivemicro.com/product/battery-iigs-rom0-1-caddy/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;, I'm trying to figure out if I can re-purpose an old AA cell caddy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Does the IIgs charge the battery or just draw from it? I'm concerned if I need to install a diode or can I just directly wire the AA cells to the IIgs motherboard.&lt;/li&gt;&#xA;&lt;li&gt;I know the battery should be more like 3.2v, so should I use a 2 cell or 3 cell caddy for standard 1.5v AA alkalines?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I've always been under the impression that you shouldn't attempt to charge alkaline batteries, but I don't know if the IIgs does that in the first place or perhaps is the charge level too low to matter to the batteries. Looking at the caddy for sale as linked above, I cannot tell if there is a diode or something to make it more special than just a straight-wire job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;thanks&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2018-12-12T16:21:20.753" Title="Can you replace an Apple IIgs battery with regular AA alkalines?" Tags="&lt;apple-iigs&gt;&lt;battery&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8530" PostTypeId="2" ParentId="8529" CreationDate="2018-12-12T15:26:13.187" Score="1" Body="&lt;p&gt;According to &lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.sys.apple2/3mh5_J2Zl0U&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://groups.google.com/forum/#!topic/comp.sys.apple2/3mh5_J2Zl0U&lt;/a&gt; yes, you can...but I'd urge caution and would use a protection diode anyway.  Or even better, go for the specific product - if a diode is required, it should be included.  I'd be going &#xA;for whatever provides the voltage and current over it's life as close to the original spec as is possible.&lt;/p&gt;&#xA;" OwnerUserId="3896" LastActivityDate="2018-12-12T15:26:13.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8531" PostTypeId="2" ParentId="8529" CreationDate="2018-12-12T16:21:20.753" Score="4" Body="&lt;p&gt;You can replace with alkaline batteries, but will need a diode to prevent them being charged. Charging alkaline batteries, even very slowly, is risky and can cause them to leak.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the original battery is a 3.6V lithium cell. You could replace it with 3x NiMH cells which are 1.2V nominal each, and would be charged by the machine just fine. Use Eneloop or other Japan-made cells (all NiMH from Japan are actually Eneloops now, even the IKEA brand ones), because they have lower self-discharge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to use alkaline then 2 cells for a nominal 3V might be a bit low, especially with a diode. You could try 3 cells with two diodes, giving about 3.3V if you select a common 1N4001 (0.6V drop at low current, times 2).&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2018-12-12T16:21:20.753" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8532" PostTypeId="2" ParentId="8527" CreationDate="2018-12-12T16:54:20.197" Score="1" Body="&lt;p&gt;It really depends on what/how you are updating.  Yes, planar modes had some simple &quot;coprocessing&quot; advantages for copies/bulk sets.  Plus the scrolling regions.  However, simple sets incur extra setup overhead.  For the types of graphics I did back in those days pure bitmap tended to outperform planar modes.&lt;/p&gt;&#xA;" OwnerUserId="481" LastActivityDate="2018-12-12T16:54:20.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8533" PostTypeId="2" ParentId="8527" CreationDate="2018-12-12T17:52:13.897" Score="6" Body="&lt;p&gt;On some video cards, using Mode X could be used to improve the performance of copy operations that take place within video memory, but techniques which would improve performance on some cards would severely degrade it on others.  In particular, mode X made it possible to copy four bytes of memory using a single byte read and a single byte write.  While that would seem like it should be faster than writing four bytes, that was only really true with early VGA cards.  Among other things, copying 8 pixels with the parallel-load technique required the sequence &quot;read a byte; write a byte; read a byte; write a byte&quot;, even when using a 16-bit card, while 16-bit cards could use &quot;write 2 bytes; write 2 bytes; write 2 bytes; write 2 bytes&quot;.  So the parallel write features of mode X no longer saved any operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More significantly, on most display cards it's only possible for the CPU to access memory at certain specific times.  On older cards, any time the CPU wrote or read data, it would have to wait for the next access opportunity before it could do anything else, but newer cards could capture write requests into a buffer and allow the CPU to continue with other operations while the card held the data for processing at the next opportunity.  Such buffering was possible with writes because the CPU had no reason to care about when data actually got written.  Such a technique couldn't really be used with reads, however, because the CPU needed to know the result of a read request before it could ask for any other request.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-12-12T17:52:13.897" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8534" PostTypeId="2" ParentId="8527" CreationDate="2018-12-12T18:10:31.443" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;[I]s there ever a circumstance where Mode 13h is a better choice for fast scrolling DOS games over Mode X?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure, to start with,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;any single pixel operation on in Mode X is slower than for Mode 13, as the desired plane needs to be set first (*1)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next, the latch-trick (*2) can only move horizontal by 4 pixels at once. So any horizontal scroller will be jumping in mode X - or slower than mode 13&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Copying from main memory (program) into a Mode X screen is slower than Mode 13, as the desired plane needs to be handeled (*1)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[rhetoric follow up question] But if Mode X is basicly worse than Mode 13h, why was it apraised so much and used as well?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Beside the attraction of using some 'hidden secret' that is?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mode X did&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;allow a resolution with square pixels, great for drawing without the need for pixel distortion compensation&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;support double buffering and page flipping, which is  quite handy for dynamic games as it&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;removes flicker (half drawn animation) &lt;/li&gt;&#xA;&lt;li&gt;decouples drawing from displaying, thus&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;allocates the whole screen time to drawing in the non displayed page&lt;/li&gt;&#xA;&lt;li&gt;allows skipping of a frame (*3) if drawing gets too slow due too many objects/details&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;allows the usage of memory beyond 64 KiB (as in Mode 13h) for additional pages or icon/data storage&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;speeds up copying objects between screen parts, screens and non displayed buffers (along the 4 pixel borders) by 4 compared to main memory to VGA moves&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Especially the double buffering parts where what a game like DOOM desperatly needed.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Second, how (if at all) did the VLB standard affect this decision?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;It made the whole 256 KiB direct accessible by the CPU, without the need to set map registers or banks or whatsoever, no matter what mode is used. Thus effectivly making Mode X addressing like Mode 13h.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It also removed the advantage of the 'latch-trick', as now VGA memory could be accessed by the CPU in 32 bit chunks without using that logic, making the improvement available to all modes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;By doing so (CPU direct accessing) it allowed the speed up for horizontal scrolling with arbitrary distance, not just in steps of 4&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Last but not least, VLB did speed up every thing with access at CPU bus clock instead of ISA clock. Not to mention larger screen modes due more memory accessible without banking.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - When multiple pixels are to be manipulated, like in a block operation, this can be offset by splitting the operation in four consecutive ones handling each plane separate - this of course only works on blocks, less or not at all on other drawing operations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The 'latch-trick' uses the plane buffers of the VGA to copy data around. Internally the VGA operates (in plane mode) on 32 bit wide memory when the CPU reads a single byte of any plane all 4 bytes got read and stored in 4 latches and the one marked by the &lt;em&gt;read map register&lt;/em&gt; gets transferred to the CPU when writing, the byte writen by the CPU gets stored to all planes marked by the &lt;em&gt;map mask register&lt;/em&gt;. Due the 32 bit nature all other planes get writen as well, sourced by the previous latched content&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means a read of any byte in a group of four consecutive pixels fills the latches and a write to any byte of another 4 pixel group with a map mask register of zero will store the previous read pixels there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's the base for fast scrolling or data move. Instead of 4 single byte read and write operation, only one is needed, making moves that fit this scheme 4 times faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - This ofc also needs a 'sense' by the game about time to advance all objects accordingly in the following frames.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2018-12-12T18:10:31.443" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8535" PostTypeId="2" ParentId="8463" CreationDate="2018-12-12T18:18:54.310" Score="4" Body="&lt;p&gt;The real, lasting, significance of the TVT was to inspire &lt;a href=&quot;https://en.wikipedia.org/wiki/Lee_Felsenstein&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lee Felsenstein&lt;/a&gt; to actually sit down and design his Tom Swift Terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lee was a sysop on the first BBS, Community Memory. The main problem with the system is that it used a $1,500 &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletype_Model_33&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASR-33&lt;/a&gt; terminal and a $300 modem. He had already fixed the modem problem by inventing the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pennywhistle_modem&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pennywhistle modem&lt;/a&gt;, which cost about $100. But the terminal remained a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When he saw the TVT, he began adapting it as the basis for a low-cost glass terminal. He called and asked Lancaster why he hadn't made it into a terminal, and Lancaster replied he just didn't think of it. So Lee did, combining the TVT with a 1k RAM and a serial and (4-bit?) parallel interface. The idea was that you would put a TV on the TVT output, a keyboard on the parallel, a Pennywhistle on the serial, and then you could connect to Community Memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, by the time he was getting interested in this, Community Memory was going through its death throws. He released the plans in 1974, but in the end no one ever built a Tom Swift. But the timing was just so that in less than a year of Felsenstein passing around the Tom Swift design, the Altair 8800 was launched.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Felsenstein had recently decided to share the rent on a garage with Bob Marsh so he could make a Tom Swift. Marsh wanted to make LED clocks, but when he saw the Altair he got Felsenstein to convert the TVT into the world's first video card, the &lt;a href=&quot;https://en.wikipedia.org/wiki/VDM-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;VDM-1&lt;/a&gt;. This was done by adding 1k of memory and interface circuits to the TVT. 1k was why S-100 machines had the &quot;odd&quot; layout of 64-column by 16-row text display, as 64x16=1024=1k. The agreement was that if he did that, Marsh would fund the development of the terminal as a whole.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the same time, Les Solomon decided someone should convert the TVT into a low-cost terminal for Altair owners - at that point a glass terminal cost about the same as a brand new VB Bug (Super no less). His first attempt did not go well - he took Lancaster to meet MITS, and a shouting match broke out. So he approached Marsh, and March approached Felsenstein again, and now, at long last, the Tom Swift was definitely, totally going to happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when March priced out the design using an 8080, and Felsenstein did the same with his original discrete components, the difference was $10. They decided to go with the 8080, and would make it into a terminal using a terminal program in a ROM. The then packaged a generic 8080 mobo along with a VDM-1, I/O card and a power supply into a case and called it the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sol-20&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sol-20&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Sol-20 was first true personal computer, IMHO, as previous machines required separate terminals for output. So... depending on your point of view, although the TVT was likely only used by a few hundred people for a couple of months of playing around, it indirectly helped spawn the home computer.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2018-12-13T15:20:02.483" LastActivityDate="2018-12-13T15:20:02.483" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8536" PostTypeId="2" ParentId="8527" CreationDate="2018-12-12T20:44:09.347" Score="8" Body="&lt;p&gt;For tile-based scrolling games of the &quot;platformer&quot; genre, it was certainly an advantage to use ModeX. This is especially true if you wanted to support slower 80286 or 80386SX CPUs with the early 8-bit VGA cards and which lacked VRAM. Here was a &quot;triple whammy&quot; of slow(ish) CPU, limited bus bandwidth, and limitations on shared access to the display DRAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you partially answered your own questions when you stated:&#xA;&lt;code&gt;Mode X was more complicated because it used planar graphics (bitplanes).&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More to the point, planar graphics are more complicated and CPU intensive if you are rendering everything in real-time. But tile-based games rely on stamping down pre-rendered tiles, which can easily be encoded ahead of time for display in a planar memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the prerequisite of using tiles that are rendered ahead-of-time, the advantages of smooth hardware scrolling, VGA memory copies, and using all the available graphics memory become both easily accessible and highly desirable. You would want to leverage that, unless you knew you had plenty of CPU AND graphics memory BANDWIDTH to spare. Most games would seek to make the display update as efficiently as possible to achieve a &quot;silky&quot; high frame rate whilst leaving plenty of CPU cycles available between frames for the game logic, sound, player responsiveness, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So ModeX is the way to go for tile-based games if you want/need to conserve CPU cycles or achieve a better frame rate. For everything else, Mode 13h allows for simpler real-time computation of byte-oriented pixel data, and would most likely offer the programmer less &quot;friction&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is also worth mentioning that rendering texture mapped 3D and compressed video frames (usually compressed with an expectation of chunky pixels) is a known challenge for planar bitmap display devices. The Amiga, well-known for excellent 2D and vector 3D graphics, needed a very fast CPU to render these sorts of graphics because the planar display hardware introduced computational overhead for transforming textures and FMV. Commodore specifically remedied this in hardware by inserting the &quot;Akiko&quot; custom chip into the Amiga CD32 console, which was intended to support the new breed of games that worked much better with a chunky frame buffer. Akiko removed the extra overhead by converting chunky pixels to planar pixels in hardware, similar to VGA Mode 13h.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-12-12T21:14:14.803" LastActivityDate="2018-12-12T21:14:14.803" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8537" PostTypeId="2" ParentId="8519" CreationDate="2018-12-13T00:03:30.547" Score="4" Body="&lt;p&gt;Not a simulator as such, but the BBC has just released an archive of its sound effects library which contains a couple of &quot;line printer&quot; recordings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Explore &lt;a href=&quot;http://bbcsfx.acropolis.org.uk/?q=printer&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bbcsfx.acropolis.org.uk/?q=printer&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try the two tracks labeled &quot;General computer room atmosphere with printer in foreground&quot; - one on the first page of the list, the other on the second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To quote from the web page, &quot;The Sound Effects are BBC copyright, but they may be used for personal, educational or research purposes...&quot;&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2018-12-13T00:03:30.547" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8538" PostTypeId="2" ParentId="5289" CreationDate="2018-12-13T01:26:09.233" Score="12" Body="&lt;p&gt;The minimal version of IBM PC, also known as cassette version, was shipped with 40KB ROM and 16KB RAM as outlined in &lt;a href=&quot;http://classiccomputers.info/down/IBM/IBM_PC_5150/IBM_5150_Technical_Reference_6025005_AUG81.pdf&quot; rel=&quot;noreferrer&quot;&gt;IBM 5150 Technical Reference&lt;/a&gt; (SECTION I. HARDWARE OVERVIEW in the reference):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The System Board is a large board which fits horizontally in the base&#xA;  of the System Unit and includes the microprocessor, 40KB ROM and 16KB&#xA;  memory. The memory can be expanded in 16KB increments to 64KB. The&#xA;  System Board also includes an enhanced version of the Microsoft&#xA;  BASIC-80 Interpreter without diskette functions. The BASIC Interpreter&#xA;  is included in the ROM. The System Board also permits the attachment&#xA;  of an audio cassette recorder for loading or saving programs and data.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 40KB ROM is split between IBM Cassette BASIC and BIOS ROM:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The System Board is designed to support both ROM and Read/Write&#xA;  Memory. The System Board contains space for 48K x 8 of ROM or EPROM.&#xA;  Six module sockets are provided, each capable of accepting an 8K x 8&#xA;  device. Five of the sockets are populated with 40 KB of ROM. This ROM&#xA;  contains the Cassette BASIC interpreter, cassette operating system,&#xA;  Power-on Self-test, I/O drivers, dot patterns for 128 characters inn&#xA;  graphics mode, and a diskette bootstrap loader. The ROM is packaged in&#xA;  24-pin modules and has an access time of 250 ns and a cycle time of 375&#xA;  ns.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 40KB are mapped at the end of SYSTEM MEMORY MAP below 1 MB from F6000 to FFFFF (see 2-24 in &lt;a href=&quot;http://classiccomputers.info/down/IBM/IBM_PC_5150/IBM_5150_Technical_Reference_6025005_AUG81.pdf&quot; rel=&quot;noreferrer&quot;&gt;the reference&lt;/a&gt;). 8KB area from FE000 to FFFFF belongs BIOS program, according to BIOS MEMORY MAP (see Figure 24 in &lt;a href=&quot;http://classiccomputers.info/down/IBM/IBM_PC_5150/IBM_5150_Technical_Reference_6025005_AUG81.pdf&quot; rel=&quot;noreferrer&quot;&gt;the reference&lt;/a&gt;). CASSETTE BASIC INTERPRETER takes 32KB from F6000 to FE000 just below the BIOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 16KB RAM is mapped at the beginning of SYSTEM MEMORY MAP from 0000 to 3FFF. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;CPU starts at the reset vector FFFF0 (16 bytes below 1MB) in the BIOS part of the ROM. BIOS performs Power-On Self Tests (including set up of interrupt vectors in the beginning of low memory) and then jumps to BOOT_STRAP routine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;--- INT 19 -----------------------------&#xA;;BOOT STRAP LOADER&#xA;;   IF A 5 1/4&quot; DISKETTE DRIVE IS AVAILABLE&#xA;;   ON THE SYSTEM, TRACK 0, SECTOR 1 IS READ INTO THE&#xA;;   BOOT LOCATION (SEGMENT 0, OFFSET 7C00)&#xA;;   AND CONTROL IS TRANSFERRED THERE.&#xA;;&#xA;;   IF THERE IS NO DISKETTE DRIVE, OR IF THERE IS&#xA;;   IS A HARDWARE ERROR CONTROL IS TRANSFERRED&#xA;;   TO THE CASSETTE BASIC ENTRY POINT.&#xA;;&#xA;; IPL ASSUMPTIONS&#xA;;   8255 PORT 60H BIT 0&#xA;;   = 1 IF IPL FROM DISKETTE&#xA;;-----------------------------------------&#xA;    ASSUME  CS:CODE,DS:DATA&#xA;BOOT_STRAP  PROC    NEAR&#xA;&#xA;    STI                 ; ENABLE INTERRUPTS&#xA;    MOV AX,DATA         ; ESTABLISH ADDRESSING&#xA;    MOV DS,AX&#xA;    MOV AX,EQUIP_FLAG   ; GET THE EQUIPMENT SWITCHES&#xA;    TEST    AL,1        ; ISOLATE IPL SENSE SWITCH&#xA;    JZ  H3              ; GO TO CASSETTE BASIC ENTRY POINT&#xA;&#xA;;------ MUST LOAD SYSTEM FROM DISKETTE -- CX HAS RETRY COUNT&#xA;&#xA;    MOV CX,4            ; SET RETRY COUNT&#xA;H1:                     ; IPL_SYSTEM&#xA;    PUSH    CX          ; SAVE RETRY COUNT&#xA;    MOV AH,0            ; RESET THE DISKETTE SYSTEM&#xA;    INT 13H             ; DISKETTE_IO&#xA;    JC  H2              ; IF ERROR, TRY AGAIN&#xA;    MOV AH,2            ; READ IN THE SINGLE SECTOR&#xA;    MOV BX,0            ; TO THE BOOT LOCATION&#xA;    MOV ES,BX&#xA;    MOV BX,OFFSET BOOT_LOCN&#xA;    MOV DX,0            ; DRIVE 0, HEAD 0&#xA;    MOV CX,1            ; SECTOR 1, TRACK 0&#xA;    MOV AL,1            ; READ ONE SECTOR&#xA;    INT 13H             ; DISKETTE_IO&#xA;H2: POP CX              ; RECOVER RETRY COUNT&#xA;    JNC H4              ; CF SET BY UNSUCCESSFUL READ&#xA;    LOOP    H1          ; DO IT FOR RETRY TIMES&#xA;&#xA;;------ UNABLE TO IPL FROM THE DISKETTE&#xA;&#xA;H3:                     ; CASSETTE_JUMP:&#xA;    INT 18H             ; USE INTERRUPT VECTOR TO GET TO BASIC&#xA;&#xA;;------ IPL WAS SUCCESSFUL&#xA;&#xA;H4:&#xA;    JMP BOOT_LOCN&#xA;BOOT_STRAP  ENDP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, if the system didn't have a diskette or diskette drive (which wasn't present on entry-level IBM PC), &lt;code&gt;BOOT_STRAP&lt;/code&gt; routine starts BASIC via &lt;code&gt;INT 18H&lt;/code&gt;. The interrupt vector for &lt;code&gt;18H&lt;/code&gt; defines beginning of the 40KB ROM as the entry point to the BASIC:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DW  00000H              ; INTERRUPT 18H&#xA;DW  0F600H              ; ROM BASIC ENTRY POINT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;16KB of RAM was enough to run BASIC programs according to &lt;a href=&quot;http://classiccomputers.info/down/IBM/IBM_PC_5150/IBM_5150_Technical_Reference_6025005_AUG81.pdf&quot; rel=&quot;noreferrer&quot;&gt;the reference&lt;/a&gt; (SYSTEM BOARD. 2-4):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A minimum system would have 16 KB of memory with module sockets for an&#xA;  additional 48 KB. In a cassette version of the system, approximately 4&#xA;  KB is used by the system leaving approximately 12 KB of user's space&#xA;  for BASIC programs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11376" LastEditorUserId="11376" LastEditDate="2018-12-13T14:20:57.050" LastActivityDate="2018-12-13T14:20:57.050" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="8540" PostTypeId="1" CreationDate="2018-12-13T16:16:42.757" Score="12" ViewCount="1227" Body="&lt;p&gt;I just came across &lt;a href=&quot;http://s100computers.com/Hardware%20Manuals/Processor%20Technology/CUTS_PE_Mar_76.pdf&quot; rel=&quot;noreferrer&quot;&gt;this excellent article&lt;/a&gt; on cassette tape storage formats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing confuses me though... in the &quot;all digital&quot; examples, like Figure 1C, what exactly ends up on the tape? That is, if I were to simply play the tape, what would I hear?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This article also poses the question as to why everyone didn't just use CUTS. It seems like the most resistant to noise, operates at higher speeds (including 2400bps in later versions) and can be played over a telephone! Yet following machines almost always used their own format, notably Commodore and Atari.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2018-12-13T22:47:28.343" Title="Cassette tape storage formats" Tags="&lt;cassette-tape&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8541" PostTypeId="2" ParentId="8540" CreationDate="2018-12-13T18:43:06.307" Score="15" Body="&lt;p&gt;The simple reason is that interoperability was not a primary drive for this kind of storage, especially at the consumer level. Honestly, what's the point of reading a Commodore cassette on an Atari for 99% of the use cases?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I look at the hardware on the sample diagram and, you know what? It's a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most interfaces are a few bits of analog components like op-amps and some diodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UARTs? That's money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cassette was &quot;cheap and easy&quot;. Some worked great, some were fiddly. While it's nice that some groups were able to send programs over radios to some machines, that was hardly a primary design requirement for most implementations. Local, cheap storage was the driver. Reliable storage is a bonus. Fast storage is extra double plus good, but lower on the list.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2018-12-13T18:43:06.307" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8542" PostTypeId="1" AcceptedAnswerId="8544" CreationDate="2018-12-13T20:11:47.143" Score="12" ViewCount="1194" Body="&lt;p&gt;When you power up a Commodore 64 you are greeted with a friendly message telling the user it has &lt;code&gt;38911 BASIC bytes free&lt;/code&gt;.  38,911 is one byte shy of a 38 KiB (1,024 * 38 = 38,912).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the reason for this &quot;missing&quot; byte?&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="6659" LastEditDate="2018-12-13T23:45:18.253" LastActivityDate="2019-01-12T21:14:39.763" Title="Why was BASIC on the Commodore 64 one byte shy of 38KiB?" Tags="&lt;commodore-64&gt;&lt;basic&gt;&lt;ram&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8543" PostTypeId="2" ParentId="8540" CreationDate="2018-12-13T22:38:37.277" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;in the &quot;all digital&quot; examples, like Figure 1C, what exactly ends up on the tape? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Varying levels of magnetization? SCNR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in all seriousness, that's all a magnetic tape will carry.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;That is, if I were to simply play the tape, what would I hear?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;On what kind of device? Different kind of recording means different amplifiers and heads as well (*1). Not to mention transport speed and tape material. Just because the compact cassette mechanics are used (*2) does not make any other part exchangeable or even compatible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, assuming that a standard head is used when recording on standard spaced tracks of a compact cassette compatible mechanic; playing such back will result in ... well ... &lt;strong&gt;noise&lt;/strong&gt; :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What noise? Now that again depends as much on the recording format and speed the tape (the tape itself) and the amplifiers used. As combinations are endless, it's only possible do calculate some samples. First approximation here is to assume tape speed is constant (*3) CC speed is 4.7625 cm/s (or 1.875 inch/s). Next, lets assume a digital write density of 1600 bit/inch (*4) this gives us 1600 bit cells per inch, or 3000 over the length played in a CC player over a second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This results in a first asumption of a &lt;em&gt;basic&lt;/em&gt; 1500 Hz sound with encoding A and more like 3000 with G and somewhere inbetween with C. After all, the signal is no diferent from a port connected to a speaker and flipped the same way. Now, flipping that fast will result in reception of more than just a single frequency, as, depending on amplifier and speaker this will result in a PWM like aproximation (*5)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And at that point it's best to stop wild guessing, as the number of influences is, as described, rather high and whatever conclusion we come up with, it will be way off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, beside all of the theoretical part here, there is a very simple way to listen to a digital recording on standard cassette: The TI 99/4 does already use a digital scheme. It's a Manchester encoding like H, at 1400 Bd. According to &lt;a href=&quot;http://www.unige.ch/medecine/nouspikel/ti99/cassette.htm#Cassette%20tape%20format&quot; rel=&quot;nofollow noreferrer&quot;&gt;this (remarkable) site&lt;/a&gt; it results in an equivalent with roughly 690 and 1380 Hz.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This article also poses the question as to why everyone didn't just use CUTS.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because they already had different solutions, often FSK as well? After all, CUTS itself was a company standard - in this case the one used by &lt;em&gt;Processor Technology&lt;/em&gt; for the &lt;em&gt;SOL&lt;/em&gt; as well as the &lt;em&gt;Subsystem-B&lt;/em&gt; board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, that article is a report about the Byte Magazin initiated meeting in Kansas City in 1976 (see the &lt;a href=&quot;https://archive.org/details/byte-magazine-1976-02/page/n73&quot; rel=&quot;nofollow noreferrer&quot;&gt;original Byte article&lt;/a&gt;), a competing magazine. Using the CUTS name was a way around that dilemma (see also &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8100/6659&quot;&gt;this answer&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It seems like the most resistant to noise, operates at higher speeds (including 2400bps in later versions) and can be played over a telephone!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No it isn't. Using this format does not pose any recordinge advantage over many other FSK combinations. For all of them its all about selecting the right frequencies that need to be sufficient distinguishable as well as - and that's even more important, within the frequency range of the storage/transport media. Preferably frequencies where the media has it's highest sensitivity (*6)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Within this range any frequency pair can be used - as long as the decoder can seperate them. So 1500 and 2000 could have been used as well, even allowing more density. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compact Cassettes had for example a usable range form ~20 Hz to 12 kHz (*7). Depending on the amplifiers and filters the usable range for FSK recording is somewhere between 0,2 and 8 kHz - ofc depending on the tape material used - after that it'll slip fast (Signal level shrinking while noise increasing). So for a computer recording a pair like 5 kHz and 7 would have made a better recording.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ofc this would require more sophisticated software - or hardware filters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For telephone connection the standard frequency range is 300 to 3000. Usability of CUTS for this is therefore just a nice side effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so on. Bottom line: CUTS as defined has no specific advantage over any other FSK system when looking at the recording itself. It does have advantages due it's simple structure of the higher frequency being exactly double the lower and being slow enough even for under powered micros. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Yet following machines almost always used their own format, notably Commodore and Atari.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Add Apple and TI to this list. Still, many later on did follow KSC or an improved KSC (like Acorn). Somehow thats a feature more often found in non US computers (*8).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Commodore also inherited the format from MOS and compatibility over the various machines was more important (*9)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Atari in turn used 3995/5327 Hz for a way better security (detection rate) than KSC would support. Enabled as well due a filter for detection&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;TI's interface is already digital.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;http://www.applevault.com/hardware/apple/apple2/apple2cassette.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple II uses also two frequencies&lt;/a&gt;, but for each only a single cycle is recorded. Thus somewhat between a digital and FSK code. A zero bit is half the size of a one, resulting in a variable length recording, with a speed between 1 KiBit when only ones are recorded and 2 KiBit for zeroes. Again compatibility as well as higher bitrate are reasons here.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Obvious, there are good reasons to not follow KSC - and foregiving compatibility in turn. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Ofc, head selection depends as well on the price range targeted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - To keep cost low.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Compact cassette tape transport speed varies with being slower at the begining of a tape and increasing over the length - all due constant angular speed while the radius of the pulling ...err... pully increases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - This might sound high for home computers, but it is rather on the lower end what tapes could do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Real world heads, amplifiers and more so speakers will work on integrating the signal into a continuous signal, which then again is turned into discrete frequencies in our ear to be synthesised again .... many ways to slip of in prediction. (This BTW reminds me of a real nice and quite short program for the Apple II to play two sounds at once by calculating an envelope and realize it as PWM :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - That's for example why Ferrochrome (Typ III) tapes often where problematic with home computers. While being great in recording very low (Iron) and very high (Chrome) frequencies, the over all frequency run was quite different to other, more centered types - which in turn needs different amplifiers. Recorded/played on drives not made acordingly resulted in a distorted recording.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - the upper frequency is defined head gap. Standard is good for 12 KHz. High quality decks use a smaller gap allowing up to 16 kHz recording.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - Looks like the usual case of US style &lt;em&gt;'Not invented here'&lt;/em&gt; vs. European tendency to improve cooperation by following standards :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*9 - Commodore took care from the begining to make BASIC programs transferable. Check &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6231/6659&quot;&gt;this answer&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-12-13T22:47:28.343" LastActivityDate="2018-12-13T22:47:28.343" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8544" PostTypeId="2" ParentId="8542" CreationDate="2018-12-13T23:04:16.853" Score="22" Body="&lt;p&gt;Well, it's a 'trick' to simplify the editor as well as the BASIC editor. After Reset (or &lt;code&gt;NEW&lt;/code&gt;) three bytes of Zero are placed at the beginning  of the basic RAM. They make it look to the basic interpreter as this looks like the tokenisation of a single, empty BASIC line. Consisting of&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;One byte &lt;code&gt;00&lt;/code&gt; as line end marker and&lt;/li&gt;&#xA;&lt;li&gt;Two bytes &lt;code&gt;00&lt;/code&gt; as pointer to the next BASIC line - zero means end of program&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(For more details &lt;a href=&quot;https://www.c64-wiki.com/wiki/BASIC_token#Example&quot; rel=&quot;noreferrer&quot;&gt;check here&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To display the amount of free memory the startup code then uses the &lt;a href=&quot;https://www.c64-wiki.com/wiki/FRE&quot; rel=&quot;noreferrer&quot;&gt;FRE function&lt;/a&gt; (*1), which in turn walks through BASIC memory ($0800..$9FFF) to see what's unused. Its logic counts the byte at $0800 as part of the current program, as it's the last byte of the line stored here (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So basically a Commodore with no program holds a NULL-program :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As weird as this seems, it saved the addition (and management) of another zero page pointer, thus simplifying the Interpreter (*3) by allowing all parts to assume that there's always a valid program loaded.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The displayed value is also corrected for values greater than 32767 which would seem negative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Now, why the two bytes Zero aren't counted as well is weird, as they are always present as well. The whole issue can as well be seen as the usual +/-1 Error programs often show.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - At least when intending to keep the advantage of not having to manage the various variable pointers (&lt;code&gt;VARTAB&lt;/code&gt;, &lt;code&gt;ARYTAB&lt;/code&gt;, &lt;code&gt;STREND&lt;/code&gt;) during edit (they just get reset by &lt;code&gt;RUN&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plus the side effect to be able to reserve space between the program end and variables for additional machine code, allowing tricks to load it from tape in one turn.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-01-09T21:34:16.247" LastActivityDate="2019-01-09T21:34:16.247" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8545" PostTypeId="2" ParentId="269" CreationDate="2018-12-14T00:48:06.047" Score="2" Body="&lt;p&gt;Here, actual screen shot with source, and proper way to reset timer and measure time... all run on 1979 Atari 800 (with Incognito board on Personality slot, enabling all available OS and Basic loads in existence, all the way up to XE/XEGS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In reality, it is much faster than most of the samples posted here, even with Interpreter-based Basic on 8K rom-space):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6RCH8.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6RCH8.jpg&quot; alt=&quot;Atari 800 / XE OS&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Above results with Antic DMA turned OFF. If turned ON, result is 0.66 secs&lt;/p&gt;&#xA;" OwnerUserId="11392" LastActivityDate="2018-12-14T00:48:06.047" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8546" PostTypeId="1" CreationDate="2018-12-14T01:43:33.520" Score="8" ViewCount="1435" Body="&lt;p&gt;Recently I have been trying to compile CP/M 2.2 from source. When I try to assemble, everything works except for the instructions &lt;code&gt;ADD A,M&lt;/code&gt; and &lt;code&gt;SBC A,M&lt;/code&gt;, which the assembler returns a syntax error. I have not done much Z80, so I am a little confused on what the source code means by &lt;code&gt;M&lt;/code&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using the CP/M 2.2 Source (Z80 Mnemonics) from the &lt;a href=&quot;http://www.cpm.z80.de/source.html&quot; rel=&quot;noreferrer&quot;&gt;Unofficial CP/M Website&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11393" LastEditorUserId="7347" LastEditDate="2018-12-14T03:57:49.020" LastActivityDate="2018-12-14T11:26:20.647" Title="What is the meaning of M in the Z80 statement ADD A,M" Tags="&lt;z80&gt;&lt;assembly&gt;&lt;cp-m&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8547" PostTypeId="2" ParentId="8546" CreationDate="2018-12-14T01:50:44.187" Score="18" Body="&lt;p&gt;In 8080 Assembler &lt;code&gt;M&lt;/code&gt; is the memory referenced to by &lt;code&gt;HL&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the assembler used this would be written as&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ADD M&lt;/code&gt; (Original Intel 8080 syntax) or &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ADD A,M&lt;/code&gt; (Later Intel syntax as used for example by &lt;a href=&quot;http://www.cpm.z80.de/randyfiles/DRI/ASM.pdf&quot; rel=&quot;noreferrer&quot;&gt;CP/M's own ASM&lt;/a&gt; (*1))&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Z80 assembler equivalent would be&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ADD A,(HL)&lt;/code&gt; (Zilog notation)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Are you sure the source you're compiling made for the Z80 (and a Z80 assembler) at all?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M is by default written in 8080 Assembly, not Z80 or any other substitute. It would make sense that the source you got is meant to be compiled with ASM, as this was the default assembler for CP/M. It would be unusual if it's formatted for any later (Z80) assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wiki got some condensed &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80#New_syntax&quot; rel=&quot;noreferrer&quot;&gt;remarks about the changes Zilog made&lt;/a&gt; to the 8080 Assembly Syntax, like the usage of full register as you might have expected in this example. DR's ASM was an inbetween product, adhering (mostly) to Intel syntax while supporting the Z80 as well.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Later assemblers where often able to compile 8080 as well as Z80 but using 8080 notation.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-12-14T11:26:20.647" LastActivityDate="2018-12-14T11:26:20.647" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8548" PostTypeId="2" ParentId="8546" CreationDate="2018-12-14T06:45:53.377" Score="4" Body="&lt;p&gt;Depending on the compiler you use, you may need to explicitly state using preprocessor directives that you use 8080 commands. M80 uses &lt;code&gt;.z80&lt;/code&gt; and &lt;code&gt;.8080&lt;/code&gt; to instruct using respective instruction set mnemonics. See &lt;a href=&quot;https://www.classic-computers.org.nz/system-80/software-manuals/manuals-Macro-80-Assembler.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.classic-computers.org.nz/system-80/software-manuals/manuals-Macro-80-Assembler.pdf&lt;/a&gt; page 20 (16 on the document's page).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it will not compile in 8080 mode (due to Z80 directives in the source), then it means that sources are altered.The easiest way is to replace &lt;code&gt;M&lt;/code&gt; with &lt;code&gt;(HL)&lt;/code&gt;, but I would not be surprised if resulting executable will not work properly at all.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2018-12-14T06:45:53.377" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8549" PostTypeId="1" CreationDate="2018-12-14T16:29:22.153" Score="5" ViewCount="531" Body="&lt;p&gt;I got BMOW's floppy emulator and have been pulling a bunch of files from 30 year old floppies (which have a miraculously low rate of failure) onto my SD card. One of the things I wanted to copy was a piece of software a friend and I made in high school. I was unable to copy it in Finder, which says &quot;that cannot be duplicated or copied.&quot; When I did get a copy of the application off the disk, it wouldn't run without the original floppy disk inserted! I'm sure we thought we were very clever. Anyway, next attempt was going to be a disk image that I can run in an emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I'm having trouble creating disk image on my Mac Plus with 1 MB of memory. Disk Copy 4.2 tells me &quot;there is not enough available memory&quot; to image an 800 kB disk. I've been unable to find any other software that will run on the Plus, let alone make a successful image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any tools for imaging a floppy that will run on a 1 MB Mac Plus with System 6?&lt;/p&gt;&#xA;" OwnerUserId="8132" LastEditorUserId="8132" LastEditDate="2018-12-14T23:31:58.940" LastActivityDate="2018-12-15T00:26:28.247" Title="Tools for creating disk images on Mac Plus" Tags="&lt;floppy-disk&gt;&lt;apple-macintosh&gt;&lt;software-recommendation&gt;&lt;disk-image&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8550" PostTypeId="2" ParentId="8519" CreationDate="2018-12-14T16:51:38.633" Score="1" Body="&lt;p&gt;The dominant sound from a line printer is likely to be that of hammers firing.  If one has something close to the sound of a single hammer firing, and plays that sound with the proper timing, that would probably give a pretty good overall impression of the printer's sound.  To determine when hammers fire, identify the spacing of characters around the chain, figure out where the chain will be when the paper arrives in position to print a line, figure out which character on the chain will be the next one eligible for printing each column, and then figure out how far that character will have to move to get into position.  Once one determines the maximum time required for a character to get into position, that will indicate when the carriage mechanism can start advancing to the next line.  Based upon the character control character (distance to advance) one can figure out how much further the chain will move while the paper is advancing and where the chain will be when it gets there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Getting a clean recording of a hammer-strike sounds might be a little tough, but perhaps not too bad if it would be possible to temporarily disconnect a hammer from its associated electronics and operate it directly from a charged capacitor while everything else was switched off.  Alternatively, one may be able to find something that sounds close and tweak the sound suitably.  Depending upon what the simulator is for, the cadence of the hammers may be more important than the exact impulse response of each hammer strike.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-12-14T16:51:38.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8551" PostTypeId="1" CreationDate="2018-12-14T19:00:42.120" Score="0" ViewCount="528" Body="&lt;p&gt;Does anybody know how I can go from an analog RGB signal to a TTL RGBI signal?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a good circuit for this out there somewhere?&lt;/p&gt;&#xA;" OwnerUserId="11397" LastActivityDate="2018-12-15T06:49:59.153" Title="VGA to CGA (RGBI) signal" Tags="&lt;cga&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8552" PostTypeId="2" ParentId="5609" CreationDate="2018-12-14T20:46:34.917" Score="4" Body="&lt;p&gt;The &lt;a href=&quot;https://www.serdashop.com/MCE2VGA&quot; rel=&quot;nofollow noreferrer&quot;&gt;MCE2VGA&lt;/a&gt;, based on &lt;a href=&quot;https://sites.google.com/site/tandycocoloco/mda-cga-ega-to-vga&quot; rel=&quot;nofollow noreferrer&quot;&gt;Luis Antoniosi’s design&lt;/a&gt;, can convert CGA, EGA, MDA and Hercules signals to VGA: connect a TTL output to it, and it will produce a VGA-compatible signal. It can even emulate composite CGA! The first link includes video reviews so you can see it in action.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2018-12-14T20:46:34.917" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8553" PostTypeId="2" ParentId="8549" CreationDate="2018-12-14T22:31:32.340" Score="2" Body="&lt;p&gt;I recommend trying Copy II Mac, but not to make a disk image. Rather, use it to successfully copy your original floppy disk to the floppy emulator/drive. You may even be able to use it to edit the sectors of the original floppy and undo whatever cleverness your younger self added.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like most other System 6 MacOS software, Copy II Mac can be found on &lt;a href=&quot;http://macintoshgarden.org/apps/copy-ii-mac&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Mac Garden&lt;/a&gt;. The link also lists a handful of other disk duplicating tools that might be useful. Of which &lt;a href=&quot;http://macintoshgarden.org/apps/dart&quot; rel=&quot;nofollow noreferrer&quot;&gt;DART&lt;/a&gt; is especially interesting. It can work with ~200K of RAM to create an image file, if you really don't want to rely on the floppy emulator doing that for you.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2018-12-14T22:31:32.340" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8554" PostTypeId="2" ParentId="8549" CreationDate="2018-12-15T00:26:28.247" Score="1" Body="&lt;p&gt;IIRC, the way I did this a couple decades ago was to write a bit of 68000 assembly language code that called the RWTS (read-write-track-sector) routine in the Mac ROM.  If you could boot a Mac OS System, there was also a low-level OS routine that could be called (documented in Inside Mac?). Then I would poke those bytes in from Basic (or perhaps Forth?) and call RWTS.  Bytes from each diskette sector could then be retrieved and sent out the serial port (with a checksum?) to whatever was trying to record what was on the diskette (a newer Mac with no diskette drive), sector by sector, track by track.  This works to perhaps recover some partial data even if the diskette directory is damaged.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2018-12-15T00:26:28.247" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8555" PostTypeId="2" ParentId="8551" CreationDate="2018-12-15T06:49:59.153" Score="6" Body="&lt;p&gt;I assume you want to connect machine emulating CGA image through VGA to the native CGA monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is of course possible, but mind cost and quality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To formally downgrade VGA to CGA you need scan frequency go down from 31 kHz to 15 kHz, and thus dot clock will half too, but you will need to read two rows and perform intelligent generation colors of the single CGA row out of two VGA rows (similar operation to be done on dots located within the same row).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, color encoding will be lossy, but it will not be a very big problem if you output CGA image onto VGA - you will only need proper conversion table, however this may require tuning or adjustment within various setups in regard to analog signal integrity, strength and noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The device, at its complexity level, should be the same complex as RGB to VGA converter (&lt;a href=&quot;http://elm-chan.org/works/sc/report.html&quot; rel=&quot;noreferrer&quot;&gt;example&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am sure that off the shelf devices do not exist for simple reason: there's no enough market demand. Probably you can simplify things by using VGA to RGB converter which outputs 15 kHz, then you will only need to convert analog to TTL using conversion table (as converter will perform clock halving and frequency conversion). But note: you &lt;strong&gt;must&lt;/strong&gt; use active converter which halves the clock rate (the box), just direct cable will not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I think this question relates more to &lt;a href=&quot;https://electronics.stackexchange.com&quot;&gt;SE.EE&lt;/a&gt; rather than SE.RC.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2018-12-15T06:49:59.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8556" PostTypeId="2" ParentId="2494" CreationDate="2018-12-15T15:51:32.100" Score="3" Body="&lt;p&gt;I managed to get my 2GB RAM dual Pentium III vintage rig project to use 1100MB RAM.&lt;br&gt;&#xA;Built up the Windows 98SE software on VirtualBox first.&lt;br&gt;&#xA;Then I just transferred the virtual disk to a physical one with 7-zip and sys command to make it bootable on the vintage.&lt;br&gt;&#xA;Runs like new, AGP aperture is much more stable. Come to think of it, 1GB RAM on a virtual machine with 4GB RAM-Disk as a swap disk really works well too.&lt;br&gt;&#xA;Perhaps someone could make a RAM-Disk for DOS for say 3GB RAM in XMS as a scratch disk.&lt;br&gt;&#xA;Anyhow, there is no way Windows will use more RAM unless system files are replaced with better ones that are either in a different language or some dope decided to put a price tag on.&#xA;Windows millennium can run with 2gb ram perhaps someone could port these parts to 98se&lt;/p&gt;&#xA;" OwnerUserId="11403" LastEditorUserId="11403" LastEditDate="2019-04-23T14:06:48.583" LastActivityDate="2019-04-23T14:06:48.583" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8557" PostTypeId="2" ParentId="8458" CreationDate="2018-12-17T04:14:21.070" Score="2" Body="&lt;p&gt;They're known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Jog_dial&quot; rel=&quot;nofollow noreferrer&quot;&gt;jog wheels&lt;/a&gt;, and by a few different variations of that name. Then there are jog-and-shuttle controllers: these combine a central jog controller with an outer ring, the shuttle controller, which provides joystick-like rate control over (usually) the same axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This concept is also far from being abandoned nowadays: the &lt;a href=&quot;https://www.contourdesign.com/product/shuttlexpress/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Contour ShuttleXpress&lt;/a&gt; is probably the flagship for jog-and-shuttle controllers as mainstream modern USB devices, while the &lt;a href=&quot;https://www.microsoft.com/en-us/p/surface-dial/925r551sktgn&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft Surface Dial&lt;/a&gt; is a recent (c. 2016) high-profile product which adds things like force feedback.&lt;/p&gt;&#xA;" OwnerUserId="11151" LastActivityDate="2018-12-17T04:14:21.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8558" PostTypeId="2" ParentId="8458" CreationDate="2018-12-17T16:11:58.160" Score="1" Body="&lt;p&gt;I've always known them as &quot;dial boxes&quot;.  My guess would be that they originated on the &lt;a href=&quot;https://en.wikipedia.org/wiki/LINC#Knobs&quot; rel=&quot;nofollow noreferrer&quot;&gt;Linc&lt;/a&gt;, &lt;em&gt;circa&lt;/em&gt; 1962.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2018-12-17T16:11:58.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8559" PostTypeId="1" AcceptedAnswerId="8560" CreationDate="2018-12-18T09:30:31.103" Score="3" ViewCount="391" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4955/why-did-blanking-of-screen-on-c64-sam-enable-better-quality-speech-synthesis&quot;&gt;From the comments on this question&lt;/a&gt;, the SAM on the Apple II seemed to use some proprietary hardware to produce the waveform. (I am not counting the option to produce a horrendous 1-bit PWM using the clicker).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why not use the Mockingboard? That has an AY-3-8910 which has a master volume control just like the SID does. That means a only a little modification from the C64 version would be needed. And I suppose, that using hardware which was already widely available would have meant a cheaper product and/or a wider audience.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-12-18T16:54:48.320" Title="Why did SAM on the Apple II use its own DAC?" Tags="&lt;apple-ii&gt;&lt;sound&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8560" PostTypeId="2" ParentId="8559" CreationDate="2018-12-18T16:54:48.320" Score="3" Body="&lt;p&gt;In addition to having a volume control, it's also necessary that an audio chip have a means of forcing a waveform generator to produce a DC output, it's necessary that setting the volume be quick, and it's necessary that the volume control be linear.  On the SID chip, I think there's a &quot;test&quot; function that can be used for that, and if not I think setting a PWM width to maximum at a high frequency and passing that through a low-pass filter should yield something that's basically a DC level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know of any way to make the AY-3-8910 wave generators produce a solid &quot;on&quot; signal.  The volume control is by design not linear.  If one didn't mind limiting volume to 1/6 of maximum, it might be possible to program one of the channels for a maximum-frequency square wave (32,000Hz) and amplitude-modulate that, but the even if one used a translation table the non-symmetric distribution of output steps would likely make it impossible to get good results.  Using multiple generators could improve overall volume, but would require storing four stores or six to the I/O port to select the first channel amplitude register, write a value to it, select the second channel output register, and write a value to that.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2018-12-18T16:54:48.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8562" PostTypeId="1" AcceptedAnswerId="17162" CreationDate="2018-12-19T20:29:33.903" Score="6" ViewCount="1239" Body="&lt;p&gt;The ZX Spectrum (and therefore the &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_ZX_Spectrum_clones#Harlequin&quot; rel=&quot;nofollow noreferrer&quot;&gt;Harlequin&lt;/a&gt;) has its ROM from &lt;code&gt;$0000&lt;/code&gt; to &lt;code&gt;$3FFF&lt;/code&gt;, while RAM further up to &lt;code&gt;$5AFF&lt;/code&gt; is used for the screen (see &lt;a href=&quot;http://www.breakintoprogram.co.uk/computers/zx-spectrum/memory-map&quot; rel=&quot;nofollow noreferrer&quot;&gt;Memory-Map&lt;/a&gt;). As CP/M expects RAM from &lt;code&gt;$0000&lt;/code&gt; upwards the two are incompatable by default, but CP/M is available  for the ZX Spectrum +3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How might it be possible to easily modify a Harlequin to add RAM paging so CP/M could run?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe with a &lt;a href=&quot;https://en.wikipedia.org/wiki/Beta_Disk_Interface&quot; rel=&quot;nofollow noreferrer&quot;&gt;Beta 128 disk interface&lt;/a&gt;?&lt;/p&gt;&#xA;" OwnerUserId="7044" LastEditorUserId="3290" LastEditDate="2020-05-01T07:23:36.650" LastActivityDate="2020-12-06T09:47:15.390" Title="Can a Harlequin ZX Spectrum clone be modifed to run CP/M?" Tags="&lt;floppy-disk&gt;&lt;zx-spectrum&gt;&lt;cp-m&gt;&lt;zx-spectrum-clones&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8563" PostTypeId="2" ParentId="8562" CreationDate="2018-12-19T20:57:59.940" Score="8" Body="&lt;p&gt;The hardware modifications are possible, and actually already done. The &lt;a href=&quot;http://trastero.speccy.org/cosas/JL/Harlequin/superfo1.html&quot; rel=&quot;noreferrer&quot;&gt;&quot;SuperFoo Harlequin 128&quot;&lt;/a&gt; is an all-RAM design based on the original Harlequin that should be capable of running CP/M (Just like the +2 and +3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't heard of someone actually running CP/M on such a machine, but based on its +3 compatibility, it shouldn't be too hard. Some of the boards based on this design come with a built-in DIVMMC - See my question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5312/are-there-any-drivers-available-to-use-divmmc-on-the-spectrum-3e-with-cp-m-plus&quot;&gt;here&lt;/a&gt; (that is unfortunately still missing a definitive answer) related to this and CP/M.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2018-12-19T20:57:59.940" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8564" PostTypeId="2" ParentId="8275" CreationDate="2018-12-20T01:43:49.340" Score="6" Body="&lt;p&gt;I'm virtually positive the game was &lt;a href=&quot;https://www.mobygames.com/game/atari-st/thunderstrike&quot; rel=&quot;noreferrer&quot;&gt;Thunderstrike&lt;/a&gt; released in 1990 for the ST, Amiga, and DOS.  The version I had was probably an early demo since I don't recall the various splash screens (besides the loading screen).  The design of the loading screen, world and ships, the POV, as well as the gameplay are very close to what I recall and the ship selection screen (which I had forgotten) definitely rings a bell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a &lt;a href=&quot;https://youtu.be/XnahB4dmBLQ?t=201&quot; rel=&quot;noreferrer&quot;&gt;Youtube video&lt;/a&gt; showing the gameplay (rewind to see loader, config screens, etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9OEwY.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9OEwY.png&quot; alt=&quot;Ship selection screen&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/LEpU4.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LEpU4.png&quot; alt=&quot;In-game shot showing terrain and ships&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both screenshots from Moby Games.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Thanks to Matt Lacey for prompting me to take another look for this game.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2018-12-20T02:12:17.000" LastActivityDate="2018-12-20T02:12:17.000" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8565" PostTypeId="2" ParentId="8562" CreationDate="2018-12-20T05:16:25.257" Score="10" Body="&lt;p&gt;well even old &lt;strong&gt;ZX 48K&lt;/strong&gt; and clones have exposed the &lt;strong&gt;AD/DB/CB&lt;/strong&gt; buses along with &lt;code&gt;/ROMCS&lt;/code&gt; signal which can actively disable inbuild &lt;strong&gt;ROM&lt;/strong&gt;. So you can make a small HW that has 16 KByte of &lt;strong&gt;SRAM&lt;/strong&gt; that replaces the ROM with a jumper or switch or programaticaly using some flip/flop and address decoder.&lt;/p&gt;&#xA;&lt;p&gt;This technique is used by any HW peripherial with its own &lt;strong&gt;ROM&lt;/strong&gt; for example like this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://cs.wikipedia.org/wiki/Didaktik_40&quot; rel=&quot;nofollow noreferrer&quot;&gt;D40/D80 FDC+FDD&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/hog6w.png&quot; alt=&quot;D40 image&quot; /&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Developing such HW should be quite easy for anyone with the EE knowledge as its really just a connection between BUSes and the IC. I would also add some LED indicating the state of &lt;code&gt;/ROMCS&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;However I think there should be some HW peripherial capable of this already out there so just look may be some &lt;strong&gt;DivIDE&lt;/strong&gt; or MMC card interface for ZX ...&lt;/p&gt;&#xA;&lt;p&gt;I am not familiar with &lt;strong&gt;CP/M&lt;/strong&gt; (other than that it requires 64 KByte of RAM in full AB range which actively mess up running its stuff on ZX and need some porting) but I think it would need some tweaking or adding driver for the display as there is not much options to move the SCREEN file from its location.&lt;/p&gt;&#xA;&lt;p&gt;For example here schematic for D40 taken from &lt;a href=&quot;https://mts.speccy.cz/doc_zxs.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;mts.speccy.cz&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pkANo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pkANo.png&quot; alt=&quot;D40 MDOS 1.0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The IC11 (27128) is the EPROM mapped instead of ZX original ROM The &lt;code&gt;CE&lt;/code&gt; chip enable signal is connected to the adress decoder (that is active in address range &lt;code&gt;&amp;lt;0-16383&amp;gt;&lt;/code&gt;)  The &lt;code&gt;/RD&lt;/code&gt; is connected to &lt;strong&gt;Z80 CPU&lt;/strong&gt; &lt;code&gt;/RD&lt;/code&gt; and you woul dneed just replace &lt;strong&gt;EPROM&lt;/strong&gt; with &lt;strong&gt;SRAM&lt;/strong&gt; and also connect the &lt;code&gt;/WR&lt;/code&gt; signal.&lt;/p&gt;&#xA;&lt;p&gt;The only thing left to see in the circuit is the &lt;code&gt;/ROMCS&lt;/code&gt;  on the image is called &lt;code&gt;ROMOFF&lt;/code&gt; on the image its the open collector of transistor T1 just above the EPROM (the text is not recognizable but I am confirming this with my own paper version of the circuit)&lt;/p&gt;&#xA;&lt;p&gt;so in the nutshell I see it like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ANSXd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ANSXd.png&quot; alt=&quot;full RAM mode&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Where &lt;strong&gt;jp1&lt;/strong&gt; will switch between FULL RAM mode and normal ZX ROM operation. If you want to switch programatically then remove the jumper and add a flip flop + I/O space address decoder instead of it.&lt;/p&gt;&#xA;&lt;p&gt;I assume you want to load some stuff like OS into some memory first (using in build ZX ROM), than switch to FULL RAM and move the OS to desired locations and run it. So you would also need to write a small probably assembly loader that do this for you.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;[Edit 1] I just found this:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://cs.speccy.cz/programs/CPM_v2.2.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;CP/M 2.2 on ZX spectrum&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Which looks like contain ROM file,CP/M 2.2 TZX file and PDF with description and Schematics for the RAM extention which more or less covers this answer fully.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2020-12-06T09:47:15.390" LastActivityDate="2020-12-06T09:47:15.390" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8566" PostTypeId="2" ParentId="6932" CreationDate="2018-12-20T10:39:21.853" Score="2" Body="&lt;p&gt;Some Memotech systems ran CP/M in 56 column mode, courtesy of a modifed boot ROM with an alternate screen driver.&#xA;&lt;a href=&quot;http://www.nyangau.org/bootrom/bootrom.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.nyangau.org/bootrom/bootrom.htm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11415" LastActivityDate="2018-12-20T10:39:21.853" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8567" PostTypeId="1" AcceptedAnswerId="8569" CreationDate="2018-12-20T15:28:09.157" Score="9" ViewCount="390" Body="&lt;p&gt;In the &lt;a href=&quot;http://www.witwright.com/DonPub/6502-Block-Diagram.pdf&quot; rel=&quot;noreferrer&quot;&gt;Block Diagram&lt;/a&gt; the Stack Pointer Register (S) has a HOLD command in addition to the  LOAD and BUS ENABLE commands. The HOLD command is linked to the S/S output of the Random Control Logic. What is the purpose of that line ?&lt;/p&gt;&#xA;" OwnerUserId="11416" LastActivityDate="2018-12-21T08:29:44.107" Title="What's the purpose of HOLD command in 6502 stack pointer" Tags="&lt;hardware&gt;&lt;6502&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8568" PostTypeId="2" ParentId="8275" CreationDate="2018-12-20T21:14:51.657" Score="3" Body="&lt;p&gt;Your description make me think of &lt;a href=&quot;https://en.wikipedia.org/wiki/Alpha_Waves&quot; rel=&quot;nofollow noreferrer&quot;&gt;Alpha Waves&lt;/a&gt; (&lt;a href=&quot;https://www.mobygames.com/game/continuum&quot; rel=&quot;nofollow noreferrer&quot;&gt;a.k.a. &quot;Continuum&quot; outside of Europe&lt;/a&gt;) I had as a cover disk of a special issue of &quot;ST Magazine&quot; called &quot;ST PC Disquette n°1&quot; in France. Unfortunately I don't have the booklet anymore but I still have this floppy, which was playable on both ST and PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a &lt;a href=&quot;https://youtu.be/QzRALehDIJI?t=89&quot; rel=&quot;nofollow noreferrer&quot;&gt;Youtube video&lt;/a&gt; of the gameplay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: the &quot;ship&quot; can be changed in different shapes with more vertices which isn't shown in the video, here is an example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yH1Z9.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yH1Z9.gif&quot; alt=&quot;Alpha Waves ST &amp;quot;springy&amp;quot; ship&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11417" LastEditorUserId="11417" LastEditDate="2018-12-22T12:41:08.990" LastActivityDate="2018-12-22T12:41:08.990" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8569" PostTypeId="2" ParentId="8567" CreationDate="2018-12-21T08:29:44.107" Score="7" Body="&lt;p&gt;A few years ago there was a reverse-engineered schematic of the 6502 available in the internet which shows the single transistors. (Maybe it is still available now.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back then I had downloaded that schematic so I could compare the &quot;S&quot; register to the &quot;X&quot; and &quot;Y&quot; registers right now:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;S&quot; has three input lines (named &quot;x1&quot; to &quot;x3&quot; in the reverse-engineered schematic) while &quot;X&quot; and &quot;Y&quot; have two input lines (&quot;x4&quot; and &quot;x5&quot; respectively &quot;x6&quot; and &quot;x7&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This makes me think that the block diagram is not correct because &quot;hold&quot;, &quot;load&quot; and 2x&quot;bus enable&quot; are four inputs while there are only three inputs in the schematic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are more oddities in the block diagram...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I simply assume that this diagram is not correct.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2018-12-21T08:29:44.107" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8570" PostTypeId="1" AcceptedAnswerId="8571" CreationDate="2018-12-21T09:56:39.590" Score="13" ViewCount="2183" Body="&lt;p&gt;From what I understand, SRAM is more expensive than DRAM, but takes less support circuitry. That doesn't matter though, since the Z80 includes everything needed to refresh and support DRAM, doesn't it. That's why a lot of computers in the 80's (considering the C64, the ZX Spectrum, etc) all used DRAM instead of SRAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Galaksija_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Galaksija&lt;/a&gt;, so here are two alternatives than a Z80 + SRAM combination:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Intel 8080 + SRAM (advantage: a cheaper CPU)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Z80 + DRAM (advantage: cheaper memory)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My understanding could easily be off! I haven't a clue about this kind of thing yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why was SRAM chosen in the Galaksija design? Could have been supply issues in &lt;a href=&quot;https://en.wikipedia.org/wiki/Socialist_Federal_Republic_of_Yugoslavia&quot; rel=&quot;nofollow noreferrer&quot;&gt;Yugoslavia&lt;/a&gt;, which was rather different from a lot of Europe. Or was there a technical reason to do with the way the machine is built? &lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="4766" LastEditDate="2018-12-23T13:47:20.643" LastActivityDate="2019-02-28T16:49:18.047" Title="Why does the Galaksija use SRAM instead of DRAM?" Tags="&lt;memory&gt;&lt;galaksija&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8571" PostTypeId="2" ParentId="8570" CreationDate="2018-12-21T10:27:30.640" Score="23" Body="&lt;p&gt;Many low cost computers of the era used SRAM instead of DRAM, including the ZX80, TRS-80 Model 100 and VIC-20. There were a few advantages.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Much simpler to interface to, which is particularly important for hobby machines where the complexity of DRAM makes the PCB or hand wiring significantly more complex. The Galaksija used a single sided PCB that already needed many wire jumpers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;SRAM is much easier for beginners to understand in terms of timing. The address and data buses don't need to be multiplexed, the timing is trivial.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The computer can be halted and the CPU single stepped for ease of debugging. At the time debugging software was very limited and expensive and people would single step their CPUs and watch the bus activity. Due to needed constant refreshing you can't single step a Z80 CPU with DRAM.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Galaksija used software to generate the video display. To incorporate DRAM refresh requires the refresh cycled to be timed to interlace with the display drawing code, complicating the design significantly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;At the time SRAM was more easily available and even cheaper than DRAM in some instances, simply because it was an older technology and very widely used. I don't know the situation in Yugoslavia at the time, but given that DRAM based home computers were relatively new in the west I'd think availability and cost was a big factor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Z80 + SRAM is a classic combination for hobby computers of the era (and even now), and based on what Wikipedia says about the development of the machine it seems likely that the designer used a tried and tested and straightforward scheme.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="576" LastEditDate="2019-02-28T16:49:18.047" LastActivityDate="2019-02-28T16:49:18.047" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8572" PostTypeId="2" ParentId="8570" CreationDate="2018-12-21T11:14:33.363" Score="6" Body="&lt;p&gt;&lt;em&gt;This is a question that can't get a definitive answer, as design decisions, especially in such minor areas are not driven by singular logic - or logic at all.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, in 1983 noone would have used a 8080 anymore. If at all, it would have been an 8085 (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, by 1983 the price difference was marginal at best - especially when considering that it is meant as a home built computer where the builder acquires the parts - both priced below 4 USD. So why not use the better CPU (*2)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same is true for the RAM. DRAM only gets less expensive for larger sizes. By late 1983, 2 KiB 6116 were about 4 USD apiece, while a 16 KiBit 4116 cost 1.50 USD or 12 USD for a set. While the prices for sure were different in Yugoslavia, the general ratio should have been quite similar. The Galaksija was meant to run with 2 KiB RAM as a standard (minimum) configuration - offering two more RAM location to expand to whopping 6 KiB (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More importantly, DRAM needs, as mentioned, support circuitry for address multiplexing and refresh. So while the refresh part is simplified on the Z80, the multiplexer is still needed (*4) - plus a satisfying clock source to do so. Thus DRAM increases complexity of a design. Not exactly a good thing when targeting a self builder hobbyist market (*5).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but definitively not least, the Galaksija was supposed to use a single sided PCB. Each and every intersection of traces thus needs soldering a wire to bridge either. A lower chip count will in next to all cases result in less wires and less intersection, thus making the job of soldering way less frustrating.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Single 5V supply is a definitive plus for any design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - At least as assumed by the general public.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Keep in mind, it uses character based graphics, so no need for large screen buffers, 512 Bytes is all that is needed. A Spectrum in contrast needs already more than 6 KiB for the display file alone. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Now, if Zilog had this as well build in, it would have made a killer feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - For the implied question, why next to all mass produced machines use DRAM, size is the most obvious answer. Eight 4164 give a full 64 KiB (and 41464 even reduce it to two). At that size it's way cheaper than SRAM. Sheer volume and factory production vs home build also changes the rules.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2018-12-21T12:08:56.347" LastActivityDate="2018-12-21T12:08:56.347" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8573" PostTypeId="1" AcceptedAnswerId="8588" CreationDate="2018-12-21T11:40:30.620" Score="6" ViewCount="1447" Body="&lt;p&gt;Just for fun, I wrote my own Chip8 interpreter/emulator and it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point is that it works in the terminal, meaning that a pixel is rendered using curses and a &lt;code&gt;#&lt;/code&gt; character.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the Chip8 that's easy because the resolution is 64x32, but now I wanted to try something different but still in the terminal (again: this is just for fun and learning).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the questions is: what systems were there for which the resolution would fit with no problems in a terminal?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that the Gameboy is something like 160x144, which could probably fit, but you'd have to shrink your font quite a lot to make it work.&lt;/p&gt;&#xA;" OwnerUserId="11332" LastActivityDate="2019-09-03T23:38:32.257" Title="What systems had the lowest resolution ever that still allowed games to be made?" Tags="&lt;graphics&gt;&lt;emulation&gt;" AnswerCount="7" CommentCount="21" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8574" PostTypeId="5" CreationDate="2018-12-21T12:13:47.357" Score="0" Body="" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-12-21T12:13:47.357" LastActivityDate="2018-12-21T12:13:47.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8575" PostTypeId="4" CreationDate="2018-12-21T12:13:47.357" Score="0" Body="For questions about the 1984 Yugoslav computer, Galaksija" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2018-12-21T12:13:47.357" LastActivityDate="2018-12-21T12:13:47.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8576" PostTypeId="1" AcceptedAnswerId="8578" CreationDate="2018-12-21T20:55:14.537" Score="12" ViewCount="1061" Body="&lt;p&gt;Anyone that's seen an Atari 400/800 next to a VIC-20 or C64 will know what I'm talking about - the Atari display was much, &lt;em&gt;much&lt;/em&gt; sharper. It had a similar advantage over the Apple II, and I seem to recall the CoCo being somewhere between the Atari and C64s.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know why? I suspect it might have something to do with all the shielding, which would imply later models in the XL series would lose some of the sharpness, but I did not use those machines either.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="15334" LastEditDate="2021-04-01T12:14:07.933" LastActivityDate="2021-04-01T13:22:43.850" Title="Why did the Ataris have such clear displays?" Tags="&lt;display&gt;&lt;atari-800&gt;" AnswerCount="1" CommentCount="13" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8577" PostTypeId="2" ParentId="1360" CreationDate="2018-12-21T21:57:29.677" Score="3" Body="&lt;p&gt;The autobooting feature that Kickstart 1.3 added allowed e.g. booting from the RAM drive &lt;code&gt;RAD:&lt;/code&gt; after a reset (&lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_Fast_File_System#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia link&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One could e.g. boot Workbench 1.3 on a Kickstart 1.2 Amiga and create &lt;code&gt;RAD:&lt;/code&gt;, but it wouldn't boot from it after a reset (own experiment many years ago).&lt;/p&gt;&#xA;" OwnerUserId="11374" LastEditorUserId="11374" LastEditDate="2018-12-22T00:15:03.357" LastActivityDate="2018-12-22T00:15:03.357" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8578" PostTypeId="2" ParentId="8576" CreationDate="2018-12-22T01:02:27.730" Score="16" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why did the Atari's have such clear displays?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I suspect it might have something to do with all the shielding&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. As usual it's about the effort the designers did put into the display. To reduce cost, the &lt;a href=&quot;https://de.wikipedia.org/wiki/MOS_Technology_VIC_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;VIC-II&lt;/a&gt; outputs an already internally mixed B&amp;amp;W signal and chroma. While this is basically like S-Video, the quality is defined by the internal generator - and doing analogue on a primary digital process is always a challenging task - especially if one want's to save money like Commodore did. In addition the &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c64/manual-html/large/Page_09.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;external circuit&lt;/a&gt; is rather frugal.&lt;/p&gt;&#xA;&lt;p&gt;In contrast the Atari's &lt;a href=&quot;https://en.wikipedia.org/wiki/CTIA_and_GTIA&quot; rel=&quot;nofollow noreferrer&quot;&gt;CTIA/GTIA&lt;/a&gt; output is fully digital and gets further 'sharpened' by a 4050 CMOS inverting buffer. Thus these signals are already way more 'clean' before geting mixed in a somewhat more elaborate diskrete analogue section. Here is a nice &lt;a href=&quot;http://ftp.pigwa.net/stuff/collections/atari_forever/Extension/Super%20Video%202.1XL/supervid2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;page showing the circuitry in detail&lt;/a&gt; for the purpose of an easy modification to get an S-Video compatible output.&lt;/p&gt;&#xA;&lt;p&gt;Also the modulator used, at least for the 800 is of a better quality than the one for the C64 - but that's only relevant for TV, which is less than desirable anyway - still, here the Atari outperforms the Commodore as well.&lt;/p&gt;&#xA;&lt;p&gt;I guess it pays out that Atari designers had quite some experience with TV/colour when creating the 400/800 output circuit.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-01T13:22:43.850" LastActivityDate="2021-04-01T13:22:43.850" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8579" PostTypeId="1" CreationDate="2018-12-24T12:08:07.117" Score="8" ViewCount="2583" Body="&lt;p&gt;After discovering my old Commodore 64 in the garage, I wanted to test if it still works. The power light comes on but the video connection to a modern TV is obviously an issue, as mentioned &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2095/commodore-64-to-modern-tv&quot;&gt;here&lt;/a&gt;. Well I bought &lt;a href=&quot;https://www.ebay.com.au/itm/253588976114&quot; rel=&quot;nofollow noreferrer&quot;&gt;this cable&lt;/a&gt; from ebay, and although it is red and white, it is sold as an audio/video cable, and not just audio. But I'm not picking up a signal, so either the item was misleading in its description of video, or my commodore 64 isn't working. Does anybody have experience with this cable?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.ebayimg.com/images/g/WZUAAOSwaGBbhgIn/s-l1024.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.ebayimg.com/images/g/WZUAAOSwaGBbhgIn/s-l300.jpg&quot; alt=&quot;A circular plug with five adjacent pins, spaced in a circle in a way that would be even were there three additional pins; attached to two (probably) 3.5mm jacks. One jack is red, and the other is white.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Thanks for everyone's contribution on this. So based on the C-64 AV jack pinout as provided by Janka, each pin was tested using a multimeter to see which pin may be connected to which colour lead, and it seems red is video and white is audio. I think this confirms Brian's suspicion that the cable is OK, and I remember basing my purchase on similar ideas. Hence it does seem most likely that there is an issue with my C64 video. I can actually hear a faint sound when I turn it on, so the audio may be OK. Of course it's difficult to say definitively without having a working C64, but currently I'm going through some options, including all those suggested by Brian.&lt;/p&gt;&#xA;" OwnerUserId="11433" LastEditorUserId="278" LastEditDate="2018-12-26T13:49:22.007" LastActivityDate="2020-05-21T11:55:56.867" Title="Commodore 64 with red and white RCA cable" Tags="&lt;commodore-64&gt;&lt;video&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8580" PostTypeId="2" ParentId="8579" CreationDate="2018-12-24T13:15:30.990" Score="7" Body="&lt;p&gt;You have to check if this is the correct cable. Unfortunately, the DIN connector the C64 uses for it's A/V output is similar to the DIN connector used for tape playback/record on old audio hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C-64 AV jack pinout:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Yoaf3.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Yoaf3.gif&quot; alt=&quot;C-64 audio and video jack pinout&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Audio Out (Pin 3) is line level (2V peak-to-peak) and Video Out (Pin 4) is composite video (either NTSC or PAL).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pin 3 and Pin 4 of the DIN jack have to go to the center pins of the RCA jacks and Pin 2 to the outside of both jacks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More details on the jack and its signals can be &lt;a href=&quot;https://www.c64-wiki.com/wiki/A/V_Jack&quot; rel=&quot;nofollow noreferrer&quot;&gt;found here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastEditorUserId="7347" LastEditDate="2018-12-26T02:00:39.993" LastActivityDate="2018-12-26T02:00:39.993" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8581" PostTypeId="1" AcceptedAnswerId="8584" CreationDate="2018-12-25T14:51:51.173" Score="31" ViewCount="2813" Body="&lt;p&gt;When I was in college, I remember IBM representatives trying to sell OS/2 Warp to students and teachers by saying that there were no (known) viruses for OS/2.  (Of course, that didn't stop the makers of &lt;em&gt;IBM AntiVirus for OS/2&lt;/em&gt; and &lt;em&gt;Norton AntiVirus for OS/2&lt;/em&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper &quot;&lt;a href=&quot;https://web.archive.org/web/20110604175403/http://www.research.ibm.com/massive/vb95a.html&quot; rel=&quot;noreferrer&quot;&gt;The effect of computer viruses on OS/2 and Warp&lt;/a&gt;&quot; (presented in September 1995 by John F. Morar and David M. Chess of the IBM Thomas J. Watson Research Center) mentions that there &quot;are currently only two OS/2 viruses known to us.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any reference that states how many native OS/2 viruses there were by the time IBM discontinued its support for OS/2 (on December 31, 2006)?&lt;/p&gt;&#xA;" OwnerUserId="11421" LastEditorUserId="4222" LastEditDate="2019-12-25T06:15:42.817" LastActivityDate="2019-12-25T06:15:42.817" Title="How many OS/2 viruses were there?" Tags="&lt;ibm&gt;&lt;operating-system&gt;&lt;os2&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8582" PostTypeId="2" ParentId="8579" CreationDate="2018-12-25T19:28:18.373" Score="4" Body="&lt;p&gt;You most likely have a problem with your C64 video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the fact the eBay seller of the cable in question has apparently sold over 100 of them, and has a high positive feedback score, I think it's a reasonable bet that the cable is fine. I will also give you the benefit of the doubt for having tried both RCA plugs into your TV's video, since the red/white coloring gives no clue about which plug is video and which is audio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a couple of common faults that you may check, since the combination of a retro computer's relatively low quality composite video signal, and a poor electrical connection, can easily conspire to defeat the sensibilities of many modern displays (e.g. HDMI flat screens that include composite video input). On the off chance you have access to an older  CRT with composite input, you should also try it.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use contact cleaner on the C64's DIN plug. This may clear any corrosion inside the plug. Doing several insertions/removals of the DIN plug may also help.&lt;/li&gt;&#xA;&lt;li&gt;Take off the C64 cover and inspect the video output plug. Ensure it has a good physical and electrical connection to the C64 motherboard. Check for any cracked solder joints. Again, the goal is a good electrical connection between computer and cable.&lt;/li&gt;&#xA;&lt;li&gt;Push down firmly on all the socketed chips in the C64, which will include the VIC-II video chip. Make sure the chips are firmly seated in their sockets.&lt;/li&gt;&#xA;&lt;li&gt;Pull the VIC-II out of its socket, and clean the chip leads and the socket with contact cleaner, then re-insert it.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If none of the above fixes the video output, then you have a more serious problem that requires more serious troubleshooting. At that point, it may be most economical to just acquire a working C64. Then, you have a second, known-working C64, which is very helpful in continuing the troubleshooting.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-12-25T19:42:05.580" LastActivityDate="2018-12-25T19:42:05.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8583" PostTypeId="2" ParentId="8581" CreationDate="2018-12-25T21:17:25.607" Score="25" Body="&lt;p&gt;I have not found a reference, but here's a &lt;a href=&quot;https://www.trendmicro.com/vinfo/us/threat-encyclopedia/search/os2&quot; rel=&quot;nofollow noreferrer&quot;&gt;search for OS/2&lt;/a&gt; on Trend Micro's virus encyclopedia. That finds 30 entries, some of which are actual OS/2 viruses, and some of which are interesting OS/2 security vulnerabilities. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks as if there are five OS/2 viruses in that list, but it's unknown if any of them are multiple names for the same virus, or virus variants. The number five also came up in the other answer: that may well be the total. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-01-02T23:58:38.523" LastActivityDate="2019-01-02T23:58:38.523" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8584" PostTypeId="2" ParentId="8581" CreationDate="2018-12-25T21:20:15.067" Score="26" Body="&lt;p&gt;The cited source from the question is the source for the English Wikipedia page as well, that claims that there are only very few known viruses for that system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the low amount of viruses seems to be &lt;em&gt;much&lt;/em&gt; bigger.&lt;br&gt;&#xA;Not two, but at least five viruses are well known. That's more than double.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;http://virus.wikidot.com/arelocs&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Arelocs&lt;/strong&gt;&lt;/a&gt; also known as Aep is one of a few viruses for IBM's OS/2 operating system. It is considered &quot;the first known virus that affects OS/2 files in the 'right way'&quot; as it writes itself to the file and modifies the NewEXE header and other system areas.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Type  File virus&#xA;Creator Mark Ludwig&#xA;Date Discovered 1995&#xA;Place of Origin Show Low, Arizona, USA&#xA;Source Language &#xA;Platform    OS/2&#xA;File Type(s)    .dll, .exe&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;http://virus.wikidot.com/jiskefet&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Jiskefet&lt;/strong&gt;&lt;/a&gt;&#xA;  Jiskefet is a rare example of an OS/2 virus. It was coded by Masud Khafir, who named it after a Dutch comedy troupe.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Type    File virus&#xA;Creator Masud Khafir&#xA;Date Discovered 1994&#xA;Place of Origin The Netherlands&#xA;Source Language Assembly&#xA;Platform    OS/2&#xA;File Type(s)    .exe&#xA;Infection Length    2,048 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;http://virus.wikidot.com/myname&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Myname&lt;/strong&gt;&lt;/a&gt; is an OS/2 virus. When executed, the virus infects OS/2 NewEXE files, overwriting them. While the virus has no malicious payload, the overwriting of the files damages them irreparably.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Type  File virus&#xA;Creator &#xA;Date Discovered 1993.12&#xA;Place of Origin United States&#xA;Source Language &#xA;Platform    OS/2&#xA;File Type(s)    .exe&#xA;Infection Length    2,048 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;http://virus.wikidot.com/rexx&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Rexx&lt;/strong&gt;&lt;/a&gt; is a virus for OS/2. Very little information is available about the virus. Our tests seem to show it overwrites files it infects.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Rexx is also the name of a scripting language. It predates OS/2 appearing in 1979 and it was the primary scripting language for that OS, along with Amiga and a few others.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Type  File virus&#xA;Creator &#xA;Date Discovered &#xA;Place of Origin &#xA;Source Language &#xA;Platform    OS/2&#xA;File Type(s)    .exe&#xA;Infection Length    38,620 bytes&#xA;Reported Costs  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;http://virus.wikidot.com/uxia&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Uxia&lt;/strong&gt;&lt;/a&gt; is an OS/2 virus. All that seems to be known about it any more is that it is 7,200 bytes long and for IBM's OS/2.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Type  File virus&#xA;Creator &#xA;Date Discovered &#xA;Place of Origin &#xA;Source Language &#xA;Platform    OS/2&#xA;Infection Length    7,200 bytes&#xA;Reported Costs  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As we know there is something like &#xA;&lt;a href=&quot;http://www.os2ezine.com/v1n12/ibmav.htm&quot; rel=&quot;noreferrer&quot;&gt;IBM AntiVirus Version 2.5&lt;/a&gt; running on OS/2. Advertised as:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So, tell me how does it work really?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In a nutshell, pretty darn well. Over the years as a network administrator, I have taken a few viruses prisoner. Since I found these in &quot;the wild&quot; I used them for my &quot;live&quot; testing. The FORM virus is probably the most common boot sector virus in the wild.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But what is FORM? A DOS virus:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;http://virus.wikidot.com/form&quot; rel=&quot;noreferrer&quot;&gt;Form&lt;/a&gt; is a boot sector virus from the 1990's. It often topped charts for the most common virus. Form was extremely long-lived, on the list of viruses in the wild up until 2006, 16 years after its initial release.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Type  Boot sector virus&#xA;Creator &#xA;Date Discovered 1990.02&#xA;Place of Origin Zurich, Switzerland&#xA;Source Language Assembly&#xA;Platform    DOS&#xA;Infection Length    3 disk sectors&#xA;Reported Costs  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That seems to narrow down the viruses truly and specifically targeting OS/2 only to be quite small. But:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.os2ezine.com/v2n1/drsol.htm&quot; rel=&quot;noreferrer&quot;&gt;Dr. Solomon's Anti-Virus Toolkit for OS/2&lt;/a&gt;&lt;/strong&gt;    - by Noah Sumner (1997)&#xA;  If you are like the vast majority of OS/2 users you think you don't need an anti-virus program. We all know that DOS viruses can't affect OS/2, right? Wrong. The experts tell me that there are probably somewhere around 200 viruses that can and will affect you even if you are running OS/2 under HPFS. If you are running under FAT that number is much higher.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Well, at least none of them will really attack OS/2, right? Wrong again. There are currently three known viruses that are designed to attack OS/2 users only, and if Warp 4 is a success that number will start to rise.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Now you are probably saying, &quot;Well, maybe I should protect myself from viruses.&quot; That is where our good friend from Dr. Solomon comes in to play. Why should you use Dr. Solomon's Anti-Virus for OS/2? Here are three good reasons:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;it detects the OS/2 viruses (IBM's Anti-Virus doesn't)&#xA;  it has a nice PM interface&#xA;  it is truly 32 bit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="6802" LastEditorUserId="4921" LastEditDate="2018-12-25T22:35:25.197" LastActivityDate="2018-12-25T22:35:25.197" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8585" PostTypeId="2" ParentId="1001" CreationDate="2018-12-26T05:42:39.903" Score="3" Body="&lt;p&gt;Fundamentally, just economics.  All modern CPU's are just faster versions of old architectures.  But, through decades of competition, not all of the architectures survived.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PC's are basically still 8086 in a hyperevolved state.  IBM sells PowerPC systems that can trace a lineage back to the architecture in 1994.  Phones run ARM CPU's that evolved from the ARM-1 in 1985.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you had 10 billion dollars a year to spend on buying faster versions of your favorite defunct old architecture, I am sure they'd be happy to spin up a project to make it for you.&lt;/p&gt;&#xA;" OwnerUserId="5309" LastActivityDate="2018-12-26T05:42:39.903" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8587" PostTypeId="2" ParentId="8573" CreationDate="2018-12-26T22:03:54.217" Score="12" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Nokia_3310&quot; rel=&quot;noreferrer&quot;&gt;Nokia  3310&lt;/a&gt; had a monochrome screen resolution of 84x48, and the game Snake II:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mfAsY.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mfAsY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4298" LastActivityDate="2018-12-26T22:03:54.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8588" PostTypeId="2" ParentId="8573" CreationDate="2018-12-27T00:31:53.887" Score="14" Body="&lt;p&gt;Here are a couple contenders:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Microvision&quot; rel=&quot;noreferrer&quot;&gt;The Microvision&lt;/a&gt;, with a 16x16 pixel display. To emulate this one you might need to have both Intel 8021 and TI TMS1100 cores.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Game_Master_(console)&quot; rel=&quot;noreferrer&quot;&gt;Hartung Game Master&lt;/a&gt;, with 64x64 pixel display. This one is already emulated by MESS in case you want to consult a reference implementation&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="576" LastActivityDate="2018-12-27T00:31:53.887" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8589" PostTypeId="2" ParentId="8573" CreationDate="2018-12-27T16:32:31.287" Score="2" Body="&lt;p&gt;Disregarding systems with serialized text output that can be said to have a &quot;resolution&quot; of 1 character at time (or, strictly speaking, 5 to 8 bits) and of course it would &quot;fit&quot; in a terminal, there is a whole class of games for the visually impaired (sometimes called &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Audio_game&quot; rel=&quot;nofollow noreferrer&quot;&gt;audiogames&lt;/a&gt;&lt;/em&gt;) that do not need video output at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of perhaps the first well known ones was &lt;a href=&quot;https://ja.wikipedia.org/wiki/%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%B5%E3%82%A6%E3%83%B3%E3%83%89&quot; rel=&quot;nofollow noreferrer&quot;&gt;Real Sound: Kaze no Regret&lt;/a&gt; for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sega_Saturn&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sega Saturn&lt;/a&gt;. However, although the video output is not necessary for the game, the hardware still has rather decent video output - the same is valid for audiogames running on &quot;typical&quot; PC's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, there is a game hardware with no graphical output at all (and thus the &quot;lowest&quot; resolution possible) - the &lt;a href=&quot;https://en.wikipedia.org/wiki/Bop_It&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bop It&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2018-12-27T16:32:31.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8590" PostTypeId="1" CreationDate="2018-12-27T17:42:15.340" Score="4" ViewCount="371" Body="&lt;p&gt;What operating systems would you recommend for this type of hardware?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though I keep the question text generic because answers can work for many others, but my specific case is a Laptop Siemens Nixdorf PCD-4ND 486 /DX4/75 (24Mb RAM, 420Mb HD, Res. max. 640x480)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The laptop has diskette drive and a ethernet card, so this are the way to install or move data in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the moment I have 2 harddrives, one with windows95 and the other one with a very old and outdated Debian Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would prefer OSes including graphical interface but also actively supported CLI OSes are welcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I am sure that there are opensource/not main stream projects and distributions which are still supporting this old platform (i.e freeDOS), so if you are no aware of the scene please don't answer saying that there is nothing)&lt;/p&gt;&#xA;" OwnerUserId="11438" LastActivityDate="2018-12-28T14:56:27.753" Title="Operating systems (on support or recent) to install on a i486 processor computer" Tags="&lt;ibm-pc&gt;&lt;operating-system&gt;&lt;80386&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ClosedDate="2018-12-28T11:43:09.103" ContentLicense="CC BY-SA 4.0" />
  <row Id="8591" PostTypeId="2" ParentId="3343" CreationDate="2018-12-27T22:30:57.817" Score="1" Body="&lt;p&gt;Much useful and relevant information is here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.toptensoftware.com/tapetool/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.toptensoftware.com/tapetool/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;&quot;&quot;Tape Tool 2 (aka tapetool2) is a command line utility for converting and repairing Microbee, TRS-80 and Sorcerer audio tape recordings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TapeTool2 might also be useful for other retro tape recordings - especially those that are similar to the Kansas City standard but hasn't been tested in these cases.&quot;&quot;&quot;&lt;/p&gt;&#xA;" OwnerUserId="11442" LastActivityDate="2018-12-27T22:30:57.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8592" PostTypeId="1" CreationDate="2018-12-28T04:36:48.103" Score="3" ViewCount="125" Body="&lt;p&gt;Fujitsu named its late 80s/90s personal computer FM Towns after physics Nobel prize winner &lt;a href=&quot;https://en.wikipedia.org/wiki/Charles_H._Townes&quot; rel=&quot;nofollow noreferrer&quot;&gt;Charles Townes&lt;/a&gt;. According to the sources (&lt;a href=&quot;https://en.wikipedia.org/wiki/FM_Towns&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://web.archive.org/web/20101121042646/http://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=968&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;) I could find, using Nobel prize winners as code names was typical at Fujitsu during that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which other Nobel prize winners did Fujitsu pay tribute to by code naming their computer products after them?&lt;/p&gt;&#xA;" OwnerUserId="11374" LastActivityDate="2018-12-28T04:36:48.103" Title="Which Nobel prize winners names besides Townes were used as code names for Fujitsu computers?" Tags="&lt;history&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8593" PostTypeId="2" ParentId="8590" CreationDate="2018-12-28T11:33:15.663" Score="1" Body="&lt;p&gt;You should try NetBSD. It would be somewhat bearable with 24mb. Provided you'll recompile the kernel, removing unnecessary drivers and subsystems.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2018-12-28T11:33:15.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8594" PostTypeId="1" CreationDate="2018-12-28T15:53:50.993" Score="1" ViewCount="154" Body="&lt;p&gt;I'm trying to get an old C128 working again. Lacking a C128 power supply, I've attached a C64's power supply's 9VAC and am supplying 5VDC from a bench power supply (with a 2A limit at the moment).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's an old CRT TV attached to the Composite output and an old Commodore 1404 screen (which might or might not be working) is attached to the DB9 socket. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Switching the C128 on immediately draws 2A. Neither screen shows any kind of output. As far as I can tell with a quick check, the only IC that gets warm (but not hot) is the 7812. There are no funny noises or smells.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question at this point is mainly whether it might make sense to try with a 3 amps limit?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(In case anyone happens to be hanging around 35C3, I'm at doubleoctothorpbuero (just type &quot;double&quot; in the C3Nav and it'll autocomplete). Thankful for any hints or pointers! :-))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: thank you for the comments. I've added a question that should make it clear what I'm asking. But please keep it on hold for now as I'm trying to follow @'Brian H''s suggestion of finding a known-good device to test monitor and power supply with. Given that there's a PDP11 standing down the hall, there should also be plenty of at least C64 around here.&lt;/p&gt;&#xA;" OwnerUserId="11445" LastEditorUserId="11445" LastEditDate="2018-12-28T17:22:26.697" LastActivityDate="2018-12-28T17:22:26.697" Title="Old C128 - normal to straight away pull 2 amps?" Tags="&lt;commodore&gt;&lt;commodore-128&gt;" AnswerCount="0" CommentCount="9" ClosedDate="2018-12-28T16:03:32.483" ContentLicense="CC BY-SA 4.0" />
  <row Id="8595" PostTypeId="1" CreationDate="2018-12-28T17:05:27.703" Score="2" ViewCount="329" Body="&lt;p&gt;I'm trying to find an old game:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Played on an old computer, not sure which kind. (early/late 1990s?)&lt;/li&gt;&#xA;&lt;li&gt;Graphics were grid-based and &quot;8-bit-seeming&quot;. Locations included plains and caves.&lt;/li&gt;&#xA;&lt;li&gt;Movement was grid-based as well. I think the game was turn-based?&lt;/li&gt;&#xA;&lt;li&gt;The main character - which you moved around - might've been a gnome? Maybe not, though.&lt;/li&gt;&#xA;&lt;li&gt;One of the enemies which I remember clearly is a snake which usually does not move but &quot;wakes up&quot; when you're on the same row or column as it (unobstructed). It would then move (in a straight line only?) towards you. EDIT: Or actually - it might've killed you instantly in this case?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Edit2: I think you could move between &quot;screens&quot; freely. (Aka either it wasn't level-based, or the levels were larger than a single screen)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's it for any reliable memories, I'm afraid.&lt;/p&gt;&#xA;" OwnerUserId="10686" LastEditorUserId="10686" LastEditDate="2019-06-06T20:28:15.827" LastActivityDate="2019-06-06T20:28:15.827" Title="Old grid-based puzzle game with snakes that wake up when on the same row/column as you" Tags="&lt;identify-this-game&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8596" PostTypeId="2" ParentId="2361" CreationDate="2018-12-28T17:24:45.640" Score="2" Body="&lt;p&gt;As far as I know the Z80 only runs at the same 2MHz the 8502 runs at. Which, internally, works out to 2/4=0.5MHz. Which is just plain slow. Source: a guy who came to visit our desk last night and knew everything else about the machine. So take with a grain of salt and downvote as much as you like.&lt;/p&gt;&#xA;" OwnerUserId="11445" LastActivityDate="2018-12-28T17:24:45.640" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8597" PostTypeId="1" AcceptedAnswerId="8599" CreationDate="2018-12-28T19:19:13.917" Score="8" ViewCount="514" Body="&lt;p&gt;Back in the days of Parallel ATA (a.k.a. IDE) it was possible to connect two drives with a single cable. The ATA standard defines a number of modes with different speeds which the drives and the controller use to communicate over the ATA cable. Controllers could support a feature called &quot;independent device timing&quot; to allow each drive to communicate at its fastest speed, instead of both drives being slowed down to the speed of the slowest drive. How did that work at the electrical and protocol level?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naively I would think that the slower drive would get confused by the higher clock speed data transfer for the faster drive, and if not locking up outright it would not be able to detect when the transfer for the fast drive would be finished and so when it could expect a next transaction directed at itself. But apparently that didn't happen, so how was independent device timing implemented?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;edit: clarify I'm talking about ATA interface transmission speed, not the drive's own read/write speed&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="9080" LastEditorUserId="9080" LastEditDate="2018-12-28T22:51:40.910" LastActivityDate="2018-12-28T23:04:08.570" Title="How did Parallel ATA/IDE Independent Device Timing work electrically?" Tags="&lt;hardware&gt;&lt;ide&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8598" PostTypeId="1" CreationDate="2018-12-28T20:46:41.397" Score="11" ViewCount="771" Body="&lt;p&gt;&lt;a href=&quot;http://wiki.ultimacodex.com/wiki/Quirks_of_the_Ultima_VII_Engine&quot; rel=&quot;noreferrer&quot;&gt;http://wiki.ultimacodex.com/wiki/Quirks_of_the_Ultima_VII_Engine&lt;/a&gt; vaguely talks about this room being &quot;necessary&quot; to place seemingly &quot;dead&quot; NPCs and it was result of some challenge that programmers had to solve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can imagine dozens of simple solutions including a simple one bit &quot;dead&quot; flag that would just prevent NPC from being drawn and interacted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering extensive recollections on everything Ultima, was it ever documented what problem this approach solves and how it is any better than simpler solutions?&lt;/p&gt;&#xA;" OwnerUserId="8726" LastActivityDate="2019-01-02T15:39:23.667" Title="Why have &quot;room of dead&quot; in Ultima VII?" Tags="&lt;gaming&gt;" AnswerCount="3" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="8599" PostTypeId="2" ParentId="8597" CreationDate="2018-12-28T22:47:02.200" Score="10" Body="&lt;p&gt;I think I found the main part of the answer by searching through a standards document.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IDE connectors have some dedicated and re-purposed signal lines specifically for DMA. Some of these stay asserted for as long as a DMA transfer is in progress, allowing the other device to see when a DMA has finished and thus when new commands can be sent by the host. [1] I saw somewhere that DMA cannot be used if the other device on the cable does not support at least some DMA mode (so that it understands the meaning of the control signals), but I cannot find the reference back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For sending commands there are similar signal lines that indicate if a command is in progress or if the command is done. When writing the command there are dedicated signal lines that indicates the target device and register. Writing a command is limited to the speed of the slowest device, writing data can be done at the target device speed as long as the device selection and register signal lines don't change. [2]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1]: The ATA standard (&quot;Information Technology - AT Attachment with Packet Interface – 7 Volume 2&quot;) of which I found a draft &lt;a href=&quot;http://t13.org/Documents/UploadedDocuments/project/d1532v2r3c-ATA-ATAPI-7.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;; section 8: Parallel interface signal assignments and descriptions, 8.1, 8.2 (p 61-63).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2]: idem section 12.2: transfer timing. Table &quot;Register transfer to/from device&quot; note 4 (p 148):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Mode shall be selected no higher than the highest mode supported by the slowest device.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Table &quot;PIO data transfer to/from device&quot; note 4 (p150):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Mode may be selected at the highest mode for the device if CS(1:0) and DA(2:0) do not change between read or  write  cycles  or  selected  at  the  highest  mode  supported  by  the  slowest  device  if  CS(1:0)  or  DA(2:0) do change between read or write cycles.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9080" LastEditorUserId="9080" LastEditDate="2018-12-28T23:04:08.570" LastActivityDate="2018-12-28T23:04:08.570" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8600" PostTypeId="1" CreationDate="2018-12-29T02:38:30.310" Score="3" ViewCount="138" Body="&lt;p&gt;I have a file transfer program (sterm) that I want to load from audio cassette, but I need to load it into CP/M.&lt;/p&gt;&#xA;&lt;p&gt;Is this possible?&lt;/p&gt;&#xA;&lt;p&gt;Any suggestions how to do it? When CP/M is running either I don't have access to the monitor commands, or I don't know how to get access to the monitor commands.&lt;/p&gt;&#xA;&lt;p&gt;Normally I would do:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;SE T=1&lt;/p&gt;&#xA;&lt;p&gt;LOG&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;and the program then starts loading from cassette.&lt;/p&gt;&#xA;" OwnerUserId="11442" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2018-12-29T12:48:53.047" Title="Exidy Sorcerer: how can I load a program from cassette whilst within CP/M?" Tags="&lt;exidy-sorcerer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8601" PostTypeId="2" ParentId="4718" CreationDate="2018-12-29T07:06:08.070" Score="6" Body="&lt;p&gt;The following is the list of typewriters in order of appearance: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Underwood No. 3 (manual, 1900-1931)&lt;/li&gt;&#xA;&lt;li&gt;Royal Model No. 10 (manual, 1913-1934)&lt;/li&gt;&#xA;&lt;li&gt;IBM Model C (electric, 1958-1967)&lt;/li&gt;&#xA;&lt;li&gt;Underwood Golden Touch Deluxe (manual)&lt;/li&gt;&#xA;&lt;li&gt;Smith Corona Cornet Super 12 (electric, 1960-1968 for Cornet 10&quot; electric model)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Dates found from The Typewriter Database (&lt;a href=&quot;https://typewriterdatabase.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://typewriterdatabase.com/&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="11449" LastEditorUserId="11449" LastEditDate="2018-12-30T06:29:20.123" LastActivityDate="2018-12-30T06:29:20.123" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8602" PostTypeId="2" ParentId="8600" CreationDate="2018-12-29T08:04:15.890" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I want to load from audio cassette, but I need to load it into CP/M.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Is this possible?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Everything is possible with a computer :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, much depends on your meaning of &lt;em&gt;'load it into CP/M'&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First try:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;What about using the Monitor from CP/M's DDT?&lt;/h2&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Caveat: This is no definite way, just an idea how it &lt;em&gt;could&lt;/em&gt; work. Also, as so often, there are traps in details - and of course many more ways to do so. This seems to be the least complicated I can think of.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This would go roughly along the lines of&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Boot CP/M&lt;/li&gt;&#xA;&lt;li&gt;Start DDT&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Save the low storage below DDT (Address at 0006h) (*1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;D6,7&lt;/code&gt; To get the DDT base address (top of TPA)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calculate new Highmem for the Exidy Monitor as &lt;code&gt;address-100h&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;M0,FF,&amp;lt;Highmem&amp;gt;&lt;/code&gt; Save low storage&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Warmstart the Monitor with a Highmem setting below that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;XH&lt;/code&gt; Display and ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;&amp;lt;Highmem&amp;gt;&lt;/code&gt; ... change HL to hold Highmem&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;GE006&lt;/code&gt; Start the Exidy Monitor&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Load your program&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;SE T=1&lt;/code&gt; Tape Spee 300 Bd&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;LO&lt;/code&gt; Load the program&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here lies the first big hurdle, if the program loads below 0100h, or above what has been set as Highmem (later being rather unlikely - as the machine does have large RAM, does it?) - It is assumed neither applies&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Restore low storage&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;MO &amp;lt;Highmem&amp;gt; 0 100&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Execute RST 7 to restart Debug.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;G38&lt;/code&gt; (*2)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Examine/Change/Save your program&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would most definitely start here with saving the program to disk (*3) so you may restart for here with just loading from disk&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Normally I would do:&lt;/p&gt;&#xA;  &#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;SE T=1 LOG&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That would mean you want to run that program right away? Hmm. Well, that might hold plenty of possible traps. Most around memory usage. At least if you intend to return to CP/M afterwards.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - DDT replaces CCP after start, and sets the BDOS entry address (JMP at 0005h) to its lowest address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Note these two steps could be replaced by just G+38. IIRC&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Terminate DDT by &lt;code&gt;G0&lt;/code&gt; (or &lt;code&gt;ctrl-C&lt;/code&gt;) and write its memory with &lt;code&gt;SAVE &amp;lt;number of pages&amp;gt; prog.COM&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="10678" LastEditDate="2018-12-29T12:48:53.047" LastActivityDate="2018-12-29T12:48:53.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8603" PostTypeId="1" AcceptedAnswerId="8604" CreationDate="2018-12-29T21:14:25.657" Score="40" ViewCount="5534" Body="&lt;p&gt;In a certain section of World 8's map, the screen is black except for a small circle surrounding Mario (as seen below during &lt;a href=&quot;https://youtu.be/tmnMq2Hw72w?t=459&quot; rel=&quot;noreferrer&quot;&gt;this speedrun&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/KQMVB.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After doing a little research, I discovered that the game's cartridge contains a special &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/MMC3&quot; rel=&quot;noreferrer&quot;&gt;mapper chip&lt;/a&gt;.  This mapper, labeled MMC3, allows the generation of raster interrupts which are normally unavailable on the NES.  In other words, the CPU can be interrupted, at most, once per scanline.  Code may then be placed inside this interrupt to adjust certain PPU registers on a per-scanline basis, allowing for visual effects such as (presumably) the tunnel vision effect seen above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I don't understand, however, is how this specific effect was achieved (i.e., exactly what PPU registers the raster interrupts modified, if raster interrupts were even used at all).&lt;/p&gt;&#xA;" OwnerUserId="8077" LastActivityDate="2018-12-31T07:23:16.727" Title="How did Super Mario Bros. 3 create this tunnel vision effect?" Tags="&lt;nintendo&gt;&lt;nes&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8604" PostTypeId="2" ParentId="8603" CreationDate="2018-12-29T22:08:22.980" Score="58" Body="&lt;p&gt;No MMC3 tricks are used for this effect; just standard background and sprite manipulation.  Tiles that are completely invisible are replaced with a blank tile, while black sprites forming a circle outline cover the partially-visible tiles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can make the effect more obvious by drawing background and sprites separately (and coloring the circle sprites white instead of black):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/K8CiV.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K8CiV.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="409" LastActivityDate="2018-12-29T22:08:22.980" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8605" PostTypeId="1" CreationDate="2018-12-30T00:41:25.583" Score="19" ViewCount="3394" Body="&lt;p&gt;In current time, when a TCP connection is initiated, the initial sequence number is required to be random.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am wondering, when TCP was first invented, was the initial sequence number required to be random, or was this requirement added later?&lt;/p&gt;&#xA;" OwnerUserId="11455" LastEditorUserId="6794" LastEditDate="2019-01-02T21:19:11.457" LastActivityDate="2019-01-02T21:19:11.457" Title="When TCP was first invented, was the initial sequence number required to be random?" Tags="&lt;history&gt;&lt;network&gt;&lt;internet&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8606" PostTypeId="2" ParentId="8573" CreationDate="2018-12-30T01:03:34.033" Score="5" Body="&lt;p&gt;An honourable mention for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Fairchild_Channel_F&quot; rel=&quot;noreferrer&quot;&gt;Fairchild Chanel F&lt;/a&gt;, which had 102 x 58 pixels visible, out of 128 x 64 in the 2KiB frame buffer, and only 64 bytes of RAM usable by programs. Software (all games) was provided as ROM cartridges. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2018-12-30T17:57:39.117" LastActivityDate="2018-12-30T17:57:39.117" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8607" PostTypeId="1" AcceptedAnswerId="8609" CreationDate="2018-12-30T02:47:23.920" Score="1" ViewCount="286" Body="&lt;p&gt;I have several IBM ThinkPads with an RJ-11 port that can be used for dialup internet connections. Currently I have one ThinkPad connected to a dialup modem, that connects to the internet through a modern ThinkPad with Ethernet. What would be the recommended solution for connecting multiple computers with dialup, without using a dialup modem for every ThinkPad?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I would like to have a star topology with an RS-232 uplink to a modern internet connected device. What is the recommended equipment to buy?&lt;/p&gt;&#xA;" OwnerUserId="11429" LastActivityDate="2018-12-31T18:28:27.127" Title="Connecting multiple computers through dialup" Tags="&lt;internet&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8608" PostTypeId="2" ParentId="8605" CreationDate="2018-12-30T03:53:06.420" Score="13" Body="&lt;p&gt;It is not actually required that the TCP initial sequence number be random.  It would be more correct to say that it is chosen arbitrarily, or to put it another way, that there is no rule specifying how the starting value must be chosen.  This means that it can start at 0 for every connection, or at any other number.  That same starting value can be used for every new connection, or a new value may be chosen for each one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For security reasons it's a good idea to choose an actual random value for every individual connection, but there is no actual requirement that it must be done this way.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-12-30T03:53:06.420" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8609" PostTypeId="2" ParentId="8607" CreationDate="2018-12-30T04:06:45.767" Score="5" Body="&lt;p&gt;Dialup Internet connections are point-to-point connections; every client system connecting using a modem requires a server-side modem to accept the call.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to skip the modems and just use direct RS-232 links that is possible but you will still need a bank of RS-232 ports on the server instead of a bank of modems.  You can use a bunch of individual USB serial port adapters for this, or you can get a multiport serial adapter on your gateway machine.  PPP is the protocol commonly used nowadays for such connections, but SLIP used to be popular and may be an option for you as well.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2018-12-30T04:06:45.767" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8610" PostTypeId="2" ParentId="8605" CreationDate="2018-12-30T09:22:08.510" Score="31" Body="&lt;p&gt;The first standard specifying modern TCP is &lt;a href=&quot;https://tools.ietf.org/html/rfc793&quot; rel=&quot;noreferrer&quot;&gt;RFC793&lt;/a&gt; from 1981 (with predecessors dating back to 1974), which says about initial sequence number selection:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To avoid confusion we must prevent segments from one incarnation of&#xA;  a    connection from being used while the same sequence numbers may&#xA;  still    be present in the network from an earlier incarnation. We&#xA;  want to    assure this, even if a TCP crashes and loses all knowledge&#xA;  of the    sequence numbers it has been using.  When new connections&#xA;  are created,    an initial sequence number (ISN) generator is employed&#xA;  which selects a    new 32 bit ISN.  The generator is bound to a&#xA;  (possibly fictitious) 32    bit clock whose low order bit is&#xA;  incremented roughly every 4    microseconds.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So they recognized that the sequence number has to be relatively unique, to avoid accidental collision between separate sessions. It didn't, however, consider &lt;a href=&quot;https://en.wikipedia.org/wiki/TCP_sequence_prediction_attack&quot; rel=&quot;noreferrer&quot;&gt;deliberate attack&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Possible attacks against TCP sequence numbers were first described in 1985, and there were various vendor-specific fixes for it. Finally in 1996, &lt;a href=&quot;https://tools.ietf.org/html/rfc1948&quot; rel=&quot;noreferrer&quot;&gt;RFC1948&lt;/a&gt; standardized one fix, which uses a cryptographic hash of ports, addresses and secret key to decide the initial sequence number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is still the method that is used in e.g. Linux kernel &lt;a href=&quot;https://elixir.bootlin.com/linux/v4.20/source/net/core/secure_seq.c#L127&quot; rel=&quot;noreferrer&quot;&gt;secure_tcp_seq&lt;/a&gt;. So it is not really random (which would risk random collisions), but just difficult to predict without knowing the secret key (&lt;code&gt;net_secret&lt;/code&gt; in Linux kernel).&lt;/p&gt;&#xA;" OwnerUserId="8014" LastActivityDate="2018-12-30T09:22:08.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8611" PostTypeId="2" ParentId="8607" CreationDate="2018-12-30T12:34:33.730" Score="1" Body="&lt;p&gt;What OS are you running?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can run Windows 98 SE or Windows 2000 or XP, you can use ICS (Internet Connection Sharing).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It lets you use a dial up (or other type) of connection to the Internet on one computer and share it over LAN with others, basically implementing a rudimentary DHCP server and NAT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Internet_Connection_Sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.m.wikipedia.org/wiki/Internet_Connection_Sharing&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4213" LastActivityDate="2018-12-30T12:34:33.730" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8612" PostTypeId="2" ParentId="2361" CreationDate="2018-12-30T16:16:54.287" Score="3" Body="&lt;p&gt;Others have pointed out the slowness causes, but here I will point out some solutions. Firstly, switch to &lt;a href=&quot;http://csbruce.com/cbm/ftp/c128/os/cpm/zpm-README.NOW&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZPM&lt;/a&gt; which is a Z80 BDOS replacement for the 8080 based CP/M BDOS. &lt;a href=&quot;https://github.com/csoren/c128cpm&quot; rel=&quot;nofollow noreferrer&quot;&gt;CPMFAST&lt;/a&gt; is another option to speed up the general OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a programmers' perspective you can bypass BDOS and BIOS and drive the VDC directly as I've done in &lt;a href=&quot;https://github.com/sgjava/garage/tree/master/commodore/cpm/sgctools&quot; rel=&quot;nofollow noreferrer&quot;&gt;SG C Tools&lt;/a&gt; (also turn off 40 column display). Although this will not help existing programs such as Wordstar it does dramatically speed up programs specifically written for the C128. The C code looks like the following to draw a string at x,y:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;uchar invdc(uchar RegNum)&#xA;{&#xA;  outp(vdcStatusReg,RegNum);                  /* internal vdc register to read */&#xA;  while ((inp(vdcStatusReg) &amp;amp; 0x80) == 0x00); /* wait for status bit to be set */&#xA;  return(inp(vdcDataReg));                    /* read register */&#xA;}&#xA;&#xA;void outvdc(uchar RegNum, uchar RegVal)&#xA;{&#xA;  outp(vdcStatusReg,RegNum);                  /* internal vdc register to write */&#xA;  while ((inp(vdcStatusReg) &amp;amp; 0x80) == 0x00); /* wait for status bit to be set */&#xA;  outp(vdcDataReg,RegVal);                    /* write register */&#xA;}&#xA;&#xA;/* fast vdc string print given x and y offset in current page */&#xA;&#xA;void printstrvdc(uchar X, uchar Y, uchar Attr, char *TextStr)&#xA;{&#xA;  register uchar I, TextLen;&#xA;  ushort DispOfs;&#xA;&#xA;  TextLen = strlen(TextStr);&#xA;  if(TextLen &amp;gt; 0)&#xA;  {&#xA;  DispOfs = Y*vdcScrHorz+vdcDispMem+X; /* calc disp mem offset */&#xA;  fillattrvdc(X,Y,TextLen,Attr);       /* use block fill for attrs */&#xA;  outvdc(vdcUpdAddrHi,(uchar) (DispOfs &amp;gt;&amp;gt; 8));&#xA;  outvdc(vdcUpdAddrLo,(uchar) DispOfs); /* set addr of first char */&#xA;  for(I = 0; TextStr[I]; I++)          /* send str to vdc disp mem */&#xA;    outvdc(vdcCPUData,TextStr[I]);&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11462" LastEditorUserId="11462" LastEditDate="2018-12-31T03:10:42.250" LastActivityDate="2018-12-31T03:10:42.250" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8613" PostTypeId="1" CreationDate="2018-12-30T19:32:00.213" Score="3" ViewCount="597" Body="&lt;p&gt;&lt;a href=&quot;http://www.geekometry.com/2013/11/amiga-juggler-demo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Amiga Juggler&lt;/a&gt; was the 2nd very popular demo to appear for the Amiga Computer early in its lifespan. The demo was created by Eric Graham (who went on to develop Sculpt3D) using raytracing to both render the scene and play the animation on a stock 512K Amiga 1000. Unlike the earlier &lt;a href=&quot;http://www.geekometry.com/2014/07/blast-from-the-past-the-amiga-boing-ball-demo-animated-gif/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Boing!&lt;/a&gt; demo, which barely tapped the Amiga's graphics abilities and was widely aped on other computers, Juggler does not seem to have ever been ported.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While Juggler was a tech demo of both raytracing and animation of the resulting frames, I'm not concerned with the rendering process simply because any computer with enough RAM could do it given sufficient time. But the actual playback of the animation was an impressive use of Amiga graphics unmatched in other low-cost computers of the time. Consider:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A high color-depth framebuffer capable of 4,096 simultaneous colors at 320x200.&lt;/li&gt;&#xA;&lt;li&gt;Sufficient graphics memory/bandwidth to play at a smooth 30 fps.&lt;/li&gt;&#xA;&lt;li&gt;Nearly full-screen animation, since a relatively large portion of the scene must be modified between each frame.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any port that was attempted would need to target a machine with the above attributes, at minimum, in order to &lt;strong&gt;faithfully recreate&lt;/strong&gt; the Juggler demo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that by the late 1980's, there were Macintosh II and PC w/ SVGA computers available. These were not only much more expensive than Amigas, but they were normally limited to 256 on-screen colors and did not have an architecture supportive of full-screen 30 fps animation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An Amiga 1000 cost $1,495 with 512K in 1986 and an Amiga 500 with 512K was $699 ('87). So, I'd say approximately $1,000 is a suitable metric for an inexpensive system that might match the Amiga. How long was it before another roughly $1,000 computer was available with the palette, resolution, and graphics bandwidth to &lt;strong&gt;faithfully recreate&lt;/strong&gt; Juggler?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2018-12-31T19:03:36.213" LastActivityDate="2018-12-31T23:56:14.130" Title="When were other inexpensive computers able to recreate &quot;The Amiga Juggler&quot;?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;graphics&gt;" AnswerCount="1" CommentCount="13" ClosedDate="2019-01-01T13:37:05.547" ContentLicense="CC BY-SA 4.0" />
  <row Id="8614" PostTypeId="1" AcceptedAnswerId="8615" CreationDate="2018-12-30T22:11:18.637" Score="4" ViewCount="361" Body="&lt;p&gt;What was the first publication to document what is (now) known as AT&amp;amp;T syntax assembly language?&lt;/p&gt;&#xA;" OwnerDisplayName="user11467" LastEditorDisplayName="user11467" LastEditDate="2018-12-30T22:31:08.220" LastActivityDate="2018-12-31T12:50:06.900" Title="What was the first publication documenting AT&amp;T syntax assembly language?" Tags="&lt;history&gt;&lt;assembly&gt;&lt;unix&gt;&lt;x86&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8615" PostTypeId="2" ParentId="8614" CreationDate="2018-12-30T23:03:44.187" Score="3" Body="&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/11467/sampablokuper&quot;&gt;sampablokuper&lt;/a&gt; (OP) has noted, the UNIX Programmer's Manual cites PAL-11R as the source of the syntax, with only minor changes. So I've found a published book from &lt;a href=&quot;https://ia600602.us.archive.org/9/items/bitsavers_decpdp11do11RAssemblerProgrammersManualMay71_2572677/DEC-11-ASDB-D_PAL-11R_Assembler_Programmers_Manual_May71.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;May 1971, the PAL-11R Assembler Programmer's Manual&lt;/a&gt; that describes the syntax. Given that the syntax was probably around in 1969, this is still almost definitely not the earliest.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The earliest I can find with a casual web search is &lt;a href=&quot;http://www.bitsavers.org/pdf/bellLabs/unix/UNIX_ProgrammersManual_Nov71.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the UNIX Programmers Manual of November 1971&lt;/a&gt; (&lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/man71.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;better version&lt;/a&gt;). If you scroll to page 195 (page 5), you'll see this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;173700: mov      $177472,r0                   12700;177472&#xA;        mov      $3,—(r0)                     12740;3&#xA;        mov      $140000,—(r0)                12740;140000&#xA;        mov      $54000,—(r0)                 12740;54000&#xA;        mov      $—2000,—(r0)                 12740;176000&#xA;        mov      $5,—(r0)                     12740;5&#xA;        tstb     (r0)                         105710&#xA;        bge      .—2                          2376&#xA;        jmp      *$5400Q                      137;54000&#xA;&#xA;173740: mov      $177350,r0                   12700;177350&#xA;        clr      —(r0)                        5040&#xA;        mov      r0,—(r0)                     10040&#xA;        mov      $3,—(r0)                     12740;3&#xA;        tstb     (r0)                         105710&#xA;        bge      .—2                          2376&#xA;        tst      *$177350                     5737;177350&#xA;        bne      .                            1377&#xA;        movb     $5,(r0)                      112710;5&#xA;        tstb     (r0)                         105710&#xA;        bge      .—2                          2376&#xA;        clr      pc                           5007&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That, if I'm not mistaken, is AT&amp;amp;T syntax!&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The earliest paper on UNIX, according to &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/hist.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this source&lt;/a&gt;, is &lt;a href=&quot;https://pdos.csail.mit.edu/6.828/2014/readings/ritchie78unix.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt;. This document is from July 1974, so it's no good as a first, and does not include any AT&amp;amp;T syntax anyway. It does, however, state that the first version of UNIX was made circa. 1969&amp;ndash;1970. This isn't necessarily a limit on the earliest that the syntax could've been described in a publication, since it might predate UNIX; I don't know.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2018-12-31T12:50:06.900" LastActivityDate="2018-12-31T12:50:06.900" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="8616" PostTypeId="2" ParentId="8613" CreationDate="2018-12-31T02:29:30.670" Score="5" Body="&lt;p&gt;This is only indirect an answer, but rather targeted at what it seams are misconceptions about Amiga (RAM) bandwidth and inner workings of its HAM (Hold and Modify) graphics mode.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Amiga advantage for Juggler was both the size of the colour palette and the bandwidth efficiency of HAM&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(From a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8613/when-were-other-inexpensive-computers-able-to-recreate-the-amiga-juggler#comment26836_8613&quot;&gt;comment&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, to start with, while HAM mode could display 12 bit colour (4096) on screen, these weren't independent of each other. Only the 16 colours of the basic palette can be used at any given position (*1). Every other pixels colour is generated by modifying one (RGB) channel's 4 bit value. So if a colour is needed that is not one of the 16 base colours, up to two intermediate pixels with somewhat similar colours are needed (*2). Effectively reducing the horizontal colour resolution to a third - 106x200.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to this dependence between successive pixels manipulating HAM for animation is rather complex and needs quite some CPU to avoid unintended effects - if they can be adverted at all. Since HAM's memory representation is also tied to the plane structure of all Amiga graphics, each pixel manipulation (may) take six separate write operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, the assumed 'bandwidth efficiency' is less of a general advantage but rather a way to overcome limitations of the Amiga hardware. Chip RAM - the area where graphics reside - is shared between chipset and CPU. Each access to generate video does slow down the CPU. Increased resolution and colour depth can slow down the CPU from the nominal 7 MHz to an almost full stop. So using less bandwidth doesn't exactly help to display a picture. It just leaves the CPU running (almost) unharmed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of memory bandwidth a plain (no additional tasks) 320x200 is always the same, no matter if 64 colour mode or HAM is used. Thus the only advantage of HAM is a possible higher colour usage (within the defined limits).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Bottom line: HAM is a nice idea, if the output is destined for a TV-like device and displaying more or less TV like, static pictures.&lt;/em&gt; (*3)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking all of this into account, then it's obvious that the juggler is less of a great example of what can be done in HAM mode on an Amiga, but rather a splendid exercise to overcome the built-in limitations ... well, if it would have been in real time. But it has been pre-rendered. So the demo isn't about doing all the complex tasks to generate a HAM image, but just a player loading the frames into display memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here again the lower bandwidth usage for graphics isn't as important as it may seem. Sure, it leaves more room for the CPU to transfer frames into chip memory. So lets see what data rates we need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 320x200 HAM picture needs 6 planes of 64000 bit each, or short of 47 KiB each. Lets make that 48 KiB for easy calculation. At 30 frames/s (*4) this is up to 1,440 KiB/s (*5) - that's roughly 40% of what the 68k has available in this mode. Tight, but no big deal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further more the animation format used by Juggler was a delta encoding, only storing stripes of content changed between successive frames, reducing the data to an average of 10 KiB (*6,*7) or ~20%. Giving less than 250 KiB for the full animation. Now it's even less a deal for the 68k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Easy to see that this compression has way more influence on bandwidth (80%) saving than HAM mode vs. some hypothetical full 12 bit colour mode (50%) (*8).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The good compression ratio also allows for even the smallest Amiga to hold all animation data in RAM, eliminating any wait for the floppy drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This reduces the task of displaying to a sustained memory to memory move of 250 KiB/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Bottom line: Selecting the right animation, plus conventional delta encoding, plus holding all data in RAM reduces the task way below any critical threshold.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what could other system do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sure, the arch enemy, the &lt;strong&gt;Atari ST&lt;/strong&gt; could only do 16 colours at 320x200 but also used only 32 KiB to do so. As a result, the task gets even faster on the ST: A third less data (*9) to be moved and at the same time ~15% more bandwidth for the CPU to do so (8 MHz instead of 7). This even leaves plenty room to use palette tricks and use 512 colours (still not more than 40 per line).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, in 1987 a &lt;strong&gt;VGA equipped IBM-PC&lt;/strong&gt; may even beat both. A 320x200 mode is default. Sure, only 256 simultaneous colours, but these are taken from an 18 bit range. Depending on the picture this may give a higher quality colour display than Amiga's HAM mode. And while it needs whooping 64,000 bytes per full frame, the resulting delta frame (*10) may average around 10-11 KiB, thus stay within the same space requirement as with the Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course the PCs memory bandwidth on the ISA BUS is rather slow compared to on-board memory or Atari/Amiga video memory. A (1986) PC AT would do about 1.2 MiB/s (*12) maximum transfer rate on an 8 bit VGA (as the IBM one was). That's about 4 times the transfer rate needed to play the Juggler video. A 16 Bit (*13) VGA could do even close to 5 MiB/s due 16 bit access plus less wait states. So most definitely no bottleneck here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar calculation can be made for other contemporary machines. (*14,*15) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: The Juggler Demo was quite cool for its time, but not out of the ordinary or something only the Amiga could do.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S.: Here some &lt;a href=&quot;http://www.randelshofer.ch/animations/anims_atari/martin_doudoroff/JGLR512_Logo.anim.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;contemporary Atari&lt;/a&gt; ports.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - For the first pixel of a line it is assumed that the border colour (colour 0) is already set, so any colour that can be done by modifying a single channel can be generated here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - If that colour is still relevant at this position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Yes, in this context a TV-picture (or the Juggler player) &lt;strong&gt;is&lt;/strong&gt; a static display. Its content is pre-rendered to perform the necessary colour optimization needed to circumvent HAM's limitations. A dynamic would mean that a picture is rendered on the fly, which is clearly not node.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Except, (AFAIK,) Juggler was a 24 frame loop over one second. This is not only relevant for speed considerations, but more so for space requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Isn't it niche how some numbers always show up :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - See &lt;a href=&quot;http://www.etwright.org/cghist/juggler.html#tech&quot; rel=&quot;nofollow noreferrer&quot;&gt;format description&lt;/a&gt; from the questions link&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - It's easy to see that most of the screen isn't changed at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - Not to mention that 12 bit colour to HAM is not lossless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*9 - This reduction due the use of only 4 planes instead of 6, not only reduces over all data by a third, but also compression overhead in form of unchanged pixel that get stored to improve decoding speed. So a frame shrinks to ~7 KiB&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*10 - To simplify and speed up animation delta sequences for HAM mode are best restricted to 16 pixel chunks (and juggler did so), while VGA's plain video memory works at byte borders. Thus no unnecessary bytes need to be stored. As a result each run on the Amiga will &lt;em&gt;on average&lt;/em&gt; have to transfer 16 unchanged pixel (8 on each side) in addition, while on the PC it's zero. Even if we use word transfers to optimize further, it's only 2 per run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the juggler figure covers almost all screen lines, it's safe to assume close to 200 runs per frame (usually it'll be more, as there may be several runs per line). 16 pixel (12 byte) per run give 2400 bytes overhead per 10 KiB frame. On the PC this would be just 2 pixel ( 2 bytes) per run or 400 bytes total. That's almost 20% less per frame due no need to use planes (*11). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*11 - And no, it would be no good idea to store the data in a similar 'flat' format for the Amiga, as now the player would need to do a lot of bit operations on all 6 planes. Way too much to be done within a frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*12 - Which is even slower then the original IBM PC could do. And Word Access was further slowed down. The XT/286 introduced the same time as the AT was over all up to 20% faster due not inserting (as many) wait states.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*13 - 16 bit in combination with VGA is a delicate matter, as not only the original VGA was only 8 Bit, but also many so called 16 bit third party cards used 8 bit chipsets but added a pseudo 16 bit interface to use the faster 16 bit cycle and serialise the bytes afterwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*14 - In fact, I wouldn't rule out an unmodified PC to be able to display the Juggler in acceptable speed video using a 8 bit VGA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*15 - It could even be fun to try the Sinclair QL - sure, colour is quite restricted ... still :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2018-12-31T23:56:14.130" LastActivityDate="2018-12-31T23:56:14.130" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8617" PostTypeId="2" ParentId="6302" CreationDate="2018-12-31T03:04:20.367" Score="2" Body="&lt;p&gt;In terms of a &lt;em&gt;modern&lt;/em&gt; CPU:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 36 double-precision MFLOPs that @Raffzahn mentions for a CDC 7600 (1969)  is about equivalent to a single-core 2.25 &lt;em&gt;MHz&lt;/em&gt; Haswell or Skylake (not GHz).  i.e. &lt;strong&gt;less than one thousandth of a single core of a modern desktop/laptop Intel CPU at 2 to 4 GHz,&lt;/strong&gt; with theoretical max FP throughput.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pentium MMX is not a great comparison: its FPU is weak compared to modern x86.  It was fully pipelined 3c latency / 1c throughput &lt;code&gt;fmul&lt;/code&gt; / &lt;code&gt;fadd&lt;/code&gt; / etc.  (&lt;a href=&quot;https://agner.org/optimize/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://agner.org/optimize/&lt;/a&gt; instruction tables), but in-order execution plus the x87 stack register design made it hard for compilers to take advantage, and the x87 stack registers often required extra &lt;code&gt;fxch&lt;/code&gt; instructions which hurt practical throughput.  Modern x86 has SIMD, and even scalar FP is done with SSE2 using a flat set of registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Theoretical max FP throughput on Pentium / Pentium MMX is not bad at 1 FLOP per clock, but @Raffzahn is using much more conservative numbers which puts a 150 to ~200MHz(?) Pentium at 36 MFLOPs for some practical benchmark.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Skylake's absolute max FP throughput is 16 DP FLOP / clock, using AVX and FMA.  (2x 256-bit SIMD vector FMAs per clock, counting an FMA as two FP ops: a multiply and add).  Or 32 single-precision FLOP / clock, because twice as many elements per SIMD vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;It's hard to take advantage of this much FP throughput without bottlenecking on the front-end or load/store throughput, but a well-tuned SIMD matmul can come pretty close&lt;/strong&gt;.  Most other code can't come close; maybe a factor of 10 lower FLOPs would still be fairly reasonable for some code, especially if it's not compiled to use FMA instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This is without considering AVX512, which on CPUs with two 512-bit FMA units doubles the theoretical max FLOP / clock throughput.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I don't know how hard it was to write code for a CDC that actually bottlenecked on its peak FP throughput, rather than memory, instruction-throughput, or something else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd guess that modern x86, especially Intel, has a lot more raw computational throughput available relative to other system bottlenecks, so it's harder to get close to theoretical max throughput in &quot;normal&quot; code.  (modern AMD has about half the raw FMA throughput per core per clock vs. Intel).  FP computation throughput has grown even faster than most other throughput resources, comparing a Pentium MMX to a modern Haswell/Skylake for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But still, I think we can be pretty confident that most FP code compiled for a modern x86 will usually run at least 100 times faster than when compiled for a CDC 7600, even without spending a lot of effort manually vectorizing.  Some tuning for cache sizes / contiguous memory access may make a much big difference on modern CPUs than on older ones: good/bad memory access patterns are critically important for CPU cache to hide DRAM latency/bandwidth.  The mismatch between CPU and RAM speed has grown a &lt;em&gt;lot&lt;/em&gt; since the 1970s, and the round-trip latency is hundreds of core clock cycles these days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Compilers have advanced a lot since then, too, in terms of loop optimizations and FP transformations, especially if you compile with &lt;code&gt;-ffast-math&lt;/code&gt; to allow the compiler to pretend that &lt;code&gt;(a+b) + c&lt;/code&gt; is equivalent to &lt;code&gt;a + (b+c)&lt;/code&gt; and similar approximations that FP rounding error makes not quite true.)&lt;/p&gt;&#xA;" OwnerUserId="3296" LastEditorUserId="3296" LastEditDate="2018-12-31T03:19:49.787" LastActivityDate="2018-12-31T03:19:49.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8618" PostTypeId="2" ParentId="5048" CreationDate="2018-12-31T06:56:29.417" Score="0" Body="&lt;p&gt;The way that sprites were mostly generated by the video chip and over-imposed on a background image, together with the fact that screens are rendered line by line by the video chip lead so some interesting concepts, like doubling of sprites by switching between different sets of sprites at a certain scan line. A number of professional games on the Commodore 64 were using this technique. Which opened up a new set of limitations, based on the speed to manipulate the chip registers in the beam return gap.&#xA;Using this technique you could for example use the same sprite multiple times on the screen in different positions. Further advanced you could even change the look of sprites, but this was so CPU time consuming that it would mostly require you to have a &quot;empty&quot; space (like a cockpit frame) to give you enough time to change the sprite look and not just double up on positions, sometimes resulting in some sprite tearing at the switchover line.&#xA;The ultimate limiting factor to what you could do with your sprites was the CPU speed since all of the clever ways to get more use out of sprites required highly optimized machine code and without any reasonable fast way to manipulate the &quot;Background&quot; video, most of you moving objects had to use sprites.&#xA;Due to the different architectures you can not easily compare the trade-offs of the different system sprites, since they had inherently different limitations. &#xA;All in all sprites were great because they allowed developers to program games with moving objects that were otherwise not possible due to the slow CPU and missing GPUs of that time hardware.&lt;/p&gt;&#xA;" OwnerUserId="11471" LastActivityDate="2018-12-31T06:56:29.417" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8620" PostTypeId="1" AcceptedAnswerId="8621" CreationDate="2018-12-31T11:50:49.253" Score="2" ViewCount="571" Body="&lt;p&gt;According to &lt;a href=&quot;https://snescentral.com/article.php?id=0088&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://snescentral.com/article.php?id=0088&lt;/a&gt; the SNES has the following memory banks:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Work RAM for CPU - 128 Kilobytes (CPU temp. storage) &lt;/li&gt;&#xA;&lt;li&gt;Video RAM for PPU - 64 Kilobytes (temp. storage for the PPU) &lt;/li&gt;&#xA;&lt;li&gt;Sound Memory: 64 Kb&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Why a bank of RAM for sound? I would've expected that if the sound chip is playing samples, it would fetch them directly from ROM where they are stored. Was it customary to first copy them into the sound RAM? If so, why?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="382" LastEditDate="2019-01-08T18:01:12.303" LastActivityDate="2019-01-08T18:01:12.303" Title="Why does the SNES have a separate memory bank for sound?" Tags="&lt;hardware&gt;&lt;snes&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8621" PostTypeId="2" ParentId="8620" CreationDate="2018-12-31T12:21:55.267" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why a bank of RAM for sound?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because the SPC-700 is not just some DMA driven DAC unit, but a separate CPU working on its own 64 KiB address space. It's a greatly enhanced 6502 executing a program loaded from the main CPU to produce sound. In the most simple way this can be just a sample, but already here it can start/stop/chain and modify it according to messages send over by the main CPU. Or, on the other end of capabilities synthesize sound complete on its own.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I would've expected that if the sound chip is playing samples, it would fetch them directly from ROM where they are stored.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's the same basic reason, why the Video system also has its own 64 KiB RAM. Performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sure, copying each sound whenever played (and played and played) from ROM would work if it was only a simple DAC based system. But even then, fetching will collide with program (and data) fetches of the main CPU, thus dragging down system performance. Keep in mind, the SNES is still a classic 8 bit system with a rather meagre memory performance (1.8..3.5 MiB/s maximum bandwidth) (*1). Using a separate sound RAM is much like the use of sprites for such systems: saving on bandwidth of the main system. Only in this case we have a rather late design with comparable huge resources assigned to the task.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was it customary to first copy them into the sound RAM? If so, why?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As said, it relieves the main CPU bus from data/program fetches of the sound CPU. Only one access during setup, and zero load thereafter. It can't get better, can it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, some games even double buffer the transfer by bringing sound data first into main RAM (as ROM may be slow) and then transfer it at high speed into sound RAM. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Nonetheless, with its PPUs it can be seen as a quite advanced one.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2018-12-31T15:20:47.943" LastActivityDate="2018-12-31T15:20:47.943" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8622" PostTypeId="2" ParentId="6302" CreationDate="2018-12-31T15:42:05.590" Score="2" Body="&lt;p&gt;In 1974 undergraduate computing at the University of Leeds was based mainly on a KDF9, which was generally considered to be &quot;one third of Atlas&quot; in computing power, which I'd guess put it at about 0.25 MIPS, and which ran a 30-teletype multiple-access timesharing system.  This was replaced in 1975/76 by a DEC KI-10 which I'd guess to be somewhere in the 0.5 to 1.0 MIPS range.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2018-12-31T15:42:05.590" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8623" PostTypeId="2" ParentId="8607" CreationDate="2018-12-31T18:28:27.127" Score="0" Body="&lt;p&gt;That RJ-11 port is meant to connect to a &lt;a href=&quot;https://en.wikipedia.org/wiki/Plain_old_telephone_service&quot; rel=&quot;nofollow noreferrer&quot;&gt;POTS line&lt;/a&gt;. You'll either need to get a separate phone line for each computer, or you'll need to set up your own mini-PBX (maybe something like this: &lt;a href=&quot;https://www.aliexpress.com/item/Min-PABX-PBX-with-SIM-Card-System-for-Home-and-Office/32515623794.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.aliexpress.com/item/Min-PABX-PBX-with-SIM-Card-System-for-Home-and-Office/32515623794.html&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="588" LastActivityDate="2018-12-31T18:28:27.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8624" PostTypeId="1" AcceptedAnswerId="8626" CreationDate="2018-12-31T21:39:07.137" Score="12" ViewCount="1544" Body="&lt;p&gt;If a home computer or console has two banks of memory, A and B, then the following design is possible:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The video chip only connects to bank A. The CPU connects to both. During active scan line, CPU access to bank A is slow because it must share bandwidth with the video chip, but it can access bank B at full speed. This is useful because you can put code and non-video data in bank B, though the CPU will still hit some slowdown because it must write to bank A in order to prepare the next frame while the current one is showing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga is perhaps the best-known example of this design; the two banks were called chip memory (the first 512K) and fast memory (the rest), respectively. The 48K Spectrum was also a popular example; the two banks were the first 16K and the other 32K respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me you could improve performance with a variant design: as above, except the video chip and the CPU each connect to both banks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the first frame, the video chip displays from bank A while the CPU prepares the next frame in bank B. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the second frame, the video chip switches to displaying from bank B while the CPU prepares the next frame in bank A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the third frame, it switches back to the first arrangement, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me this fairly minor variation on the historical design would allow the CPU to always work at full speed even when writing the data for the next frame. (In this context, I'm just thinking about scenarios where the CPU does that work, not ones where the video chip itself contains acceleration hardware that writes to video memory.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did any historical machines work the way I suggest, with video chip and CPU switching back-and-forth between two banks each frame? If not, why not? Is there some disadvantage I'm not taking into account?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-10-29T11:11:46.557" Title="Did any machines alternate between two video memory banks?" Tags="&lt;hardware&gt;&lt;video&gt;" AnswerCount="9" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8625" PostTypeId="2" ParentId="8624" CreationDate="2018-12-31T22:26:39.230" Score="7" Body="&lt;p&gt;The Apple IIe with 80-column text card was capable of something like this.  It came with a second, 64K memory space available through bank-switching.  From page 23 of &lt;a href=&quot;https://archive.org/details/Apple_IIe_Technical_Reference_Manual/page/n56&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Apple IIe Technical Reference Manual&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Data for the high-resolution graphics displays are stored in either of two 8192-byte areas in memory. These areas are called High-Resolution Page 1 and Page 2; think of them as buffers where you can put data to be displayed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There were separate latches between the main memory and the alternate memory space and the display controller, and in double-high resolution, you would enable both latches, interlacing the bitmaps stored in each buffer. The two halves of video memory were split between $2000&amp;ndash;$3FFF of the main memory space and the alternate memory space. See page 35 of the manual, among other places.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple IIe did not, however, give faster access to banks of memory the current video mode was not using.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2019-01-01T16:36:19.657" LastActivityDate="2019-01-01T16:36:19.657" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8626" PostTypeId="2" ParentId="8624" CreationDate="2019-01-01T00:40:36.817" Score="15" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did any historical machines work the way I suggest, with video chip and CPU switching back-and-forth between two banks each frame?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not that I'm aware of. There were many designs with multiple banks, but never set up especially in the way that you ask for.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If not, why not? Is there some disadvantage I'm not taking into account?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Maybe because it's a very narrow solution for a problem that didn't really occur?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, the influence of video access on a CPU is for most cases negligible. That is if there is already a separate bank, where the CPU can execute program/data without being slowed down by video. Even in a close loop CPU access to video memory is more in the region of every 10th cycle or less (*1), thus, if a video circuit allows at least some video access during display, no significant performance impact happens. Since most transactions on video memory are writes, a single write buffer may already provide a great relief.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, this solution will only speed up programs that use a two buffer based rendering scheme. They are a rather new development, only introduced with CPU/GPU setups fast enough to render a whole scene within 1/50th of a second or less from base data. Nothing early machines could do. Here it was faster to just manipulate the existing, single screen. Heck, real early ones had to use sprites as a crutch to overcome speed issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third, use of double buffering isn't primarily (if at all) a solution to avoid performance slow down by video access during screen manipulation, but to avoid flicker. Double buffer handling does at first increase handling effort, as either full rendering or interleaved update (*2) is required. Its advantage is a decoupling in timing (below the level of a frame) between display and update (*3). With two buffers the CPU no longer needs to synchronize sequence and speed of screen update with video. Even frame drops are possible - not nice but possible - without harming the presented picture.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Yes, tighter examples can be constructed on several machines, but they are the exception in everyday tasks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - This means, when updating a buffer (the one not displayed), it does not represent the previous frame, but the one before that, so two counts of update related bookkeeping need to be held and managed. This can make code rather complicated - usually resulting in abstract engines - something again easy to do today, but hard to implement on power constrained systems back then. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - With a single display buffer updates have to happen complete during retrace, or 'following the beam'. This means that during a frame only the parts that have already be displayed can be changed without generating flicker or ripple. The hurdle is to use as much time as possible, so keeping close to the line in display, but never overtake the video circuit. This includes looking ahead when it's about sprites and alike. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2019-01-02T11:39:59.190" LastActivityDate="2019-01-02T11:39:59.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8627" PostTypeId="1" CreationDate="2019-01-01T04:25:46.917" Score="30" ViewCount="5357" Body="&lt;p&gt;I'm looking for a source for one or a few 1-bit black-or-white bitmapped fonts used in the past, available in a set of sizes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Current incarnations might be available for large LED displays, but those may work best for point LEDs rather than square filled pixels, and ideally &lt;em&gt;these would be something recognizable by some as having historical aspects.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should be available in a range of sizes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The application is a small 128x64 pixel OLED display. I currently use Python's PIL which has a &quot;default&quot; font that is just too small for this display. I can also use it to read TrueType fonts, then I down-convert to gray scale then use a threshold to get 1-bit, but it looks ragged. See &lt;a href=&quot;https://computergraphics.stackexchange.com/a/5941/5846&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://stackoverflow.com/a/47546095/3904031&quot;&gt;here&lt;/a&gt; but here I'm not asking for Chinese characters; even the original ASCII would be helpful.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Example of a 1-bit binary OLED display (128x64 pixels) cropped from &lt;a href=&quot;https://cdn-shop.adafruit.com/1200x900/326-18.jpg&quot; rel=&quot;noreferrer&quot;&gt;this image&lt;/a&gt; from the AdaFruit Page &lt;a href=&quot;https://www.adafruit.com/product/326&quot; rel=&quot;noreferrer&quot;&gt;Monochrome 0.96&quot; 128x64 OLED graphic display, Product ID: 326&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/THcMR.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/THcMR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;These days even black-and-white fonts are displayed using grayscale or even color. Zoomed screenshots from my laptop showing that what looks black-and-white isn't. Trying to post-process these back to binary by thresholding can lead to rough edges and strange looking characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wAiuH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wAiuH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/IyBx3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IyBx3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7118" LastEditorUserId="6794" LastEditDate="2019-01-02T21:19:06.160" LastActivityDate="2020-01-27T19:02:12.907" Title="Are there vintage or historical bitmapped fonts available for non-commercial use?" Tags="&lt;licensing&gt;&lt;font&gt;" AnswerCount="7" CommentCount="13" FavoriteCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8628" PostTypeId="2" ParentId="8627" CreationDate="2019-01-01T04:54:19.560" Score="19" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Are there vintage or historical bitmapped fonts available for non-commercial use?&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;I'm looking for a source for one or a few 1-bit black-or-white&#xA;  bitmapped fonts used in the past, available in a set of sizes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Typefaces are not subject to copyright, at least in the US, so you can do what you want (again, in the US). Bitmapped representations are typefaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is in contrast to &quot;fonts&quot; (such as TrueType), which are considered software that render typefaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intellectual_property_protection_of_typefaces&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Intellectual_property_protection_of_typefaces&lt;/a&gt; discusses the different aspects in different countries.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;These days even black-and-white fonts are displayed using grayscale or&#xA;  even color. Zoomed screenshots from my laptop showing that what looks&#xA;  black-and-white isn't.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;These could be artifacts of you underlying display technology, especially for fonts, particularly today with modern high resolution screens. If you happened to have an actual bitmap of pixels in B&amp;amp;W that Just So Happen to look like letters, you would not necessarily be seeing those artifacts. Depends on how the graphics are actually rendered by the underlying software.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2019-01-01T04:54:19.560" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8629" PostTypeId="2" ParentId="8598" CreationDate="2019-01-01T05:00:32.347" Score="1" Body="&lt;p&gt;If the game has a fixed number of NPCs that never really changes, other than states like &quot;isAlive&quot;, then it's easier and higher-performance to implement it as a static array rather than a dynamic data structure requiring support for operations like &quot;add&quot;, &quot;delete&quot;, &quot;new&quot;, &quot;findByName&quot;, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if there is a static array of NPCs, the code that draws the screen may simply be going through the entire static list and drawing characters that match the current room number.  So by setting the character's room number to 0, the engine will skip drawing it always.&lt;/p&gt;&#xA;" OwnerUserId="746" LastActivityDate="2019-01-01T05:00:32.347" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8630" PostTypeId="2" ParentId="8627" CreationDate="2019-01-01T05:08:36.053" Score="35" Body="&lt;p&gt;Try &lt;a href=&quot;https://int10h.org/oldschool-pc-fonts/fontlist/&quot; rel=&quot;noreferrer&quot;&gt;THE OLDSCHOOL PC FONT RESOURCE&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looks positively awesome to me. I started by looking for IBM MDA - the classic 9x14 font, and I found this site.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;License is Creative Commons Attribution-ShareAlike 4.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've downloaded the file. Zip contains all the fonts ready to install in Windows. You should be able to convert it to whatever you need, including actual bitmaps - I've done that in the past, though not lately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This includes dozens of fonts - IBM CGA/EGA/MDA/VGA, ATI, Tandy, Phoenix, etc.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2019-01-01T05:11:16.770" LastActivityDate="2019-01-01T05:11:16.770" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8631" PostTypeId="2" ParentId="8627" CreationDate="2019-01-01T07:52:35.190" Score="28" Body="&lt;p&gt;&lt;code&gt;-misc-fixed-*&lt;/code&gt; X11 font &quot;family&quot; matches all your criteria - it originated sometime in the 1980s, thus it can be considered retro or vintage, is distributed public domain, comes in several sizes (5x7 seems appropriate for a small LCD display), it is still developped and as a consequence has a &lt;a href=&quot;https://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html&quot; rel=&quot;noreferrer&quot;&gt;reasonable beyond-Latin1 repertoire&lt;/a&gt;, the BDF (or PCF) format is easily parsed if necessary, and they are part of &lt;a href=&quot;https://www.x.org/releases/individual/font/&quot; rel=&quot;noreferrer&quot;&gt;X11 core&lt;/a&gt;, therefore present in almost all Linux/BSD distributions and still maintained.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2019-01-01T07:52:35.190" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8632" PostTypeId="2" ParentId="8627" CreationDate="2019-01-01T11:30:47.853" Score="6" Body="&lt;p&gt;The Amstrad CPC bitmap font is detailed in chapter 7 of the user manual. There is an 8x8 bitmap for each ASCII character. &lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2019-01-01T11:30:47.853" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8633" PostTypeId="2" ParentId="8624" CreationDate="2019-01-01T16:34:18.483" Score="1" Body="&lt;p&gt;In my opinion it's a system design question:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;At the time of relevance of this question RAM was expensive, so storing a sequence of images directly in RAM for any significant sequence length was prohibitive if you intend to build a cheap system, so lets go with 2 frames&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For cheap system the read/write speed (i.e. a Z80 or 6510 even only copying data to you video banks - probably in the 200kB/s range for a Z80, and on the order of 50-100 for a 6502) would be limited by the CPU/data bus (the DRAMS had access times significantly below 1 microsecond), meaning that storing 2 Frames wouldn't really help you a lot (since you could not update the buffer one more time)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The only way out to make sense of such a system would have been to give it multiple CPUs connected to one video buffer each. So that means that for a typical 8 bit system, the solution would not have helped much in any use case. I am unsure if specialized expensive video/graphics equipment did something like this (I could imagine that).&lt;/p&gt;&#xA;" OwnerUserId="11483" LastActivityDate="2019-01-01T16:34:18.483" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8634" PostTypeId="2" ParentId="8624" CreationDate="2019-01-01T18:55:34.913" Score="1" Body="&lt;p&gt;Relatively few programs update the entire display every frame.  When using a double-buffered display, anything that will be shown on two or more consecutive frames will need to be updated at least twice; it would be rare that writing something twice on inactive banks would be cheaper than writing it once on an active bank.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A somewhat more useful variation on your proposal would be to have one memory bank for the top half of the screen and one for the bottom.  Many of Eugene Jarvis' games like Defender, Stargate, Robotron, etc. would write the bottom half of the screen while the beam was on the top half, and vice versa.  I don't think the hardware used separate banks with the described access timings, but doing so would have made it possible to use slower DRAMs than would otherwise have been required.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-01-01T18:55:34.913" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8635" PostTypeId="1" CreationDate="2019-01-01T19:09:41.727" Score="8" ViewCount="647" Body="&lt;p&gt;A science-lab program for the Apple II (I forget the name) had a board that plugged into the joystick port and included a &quot;timing resistor&quot;.  While I don't know what the program actually did with the resistor, a large-value resistor plugged into the an otherwise unused resistor input would allow the joystick hardware to be used as a timing base.  Since the third and fourth resistor inputs weren't usually used, a board with a DIP header, a DIP socket, a resistor, and maybe switch, could have served as a combination hardware enhancement and copy-protection dongle (the switch would avoid the need to remove the board when using software that expected something else on that resistor input).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did any games for the Apple II make use of a timing resistor as a means of generating a time base, or was such usage restricted to the science-lab program I mentioned earlier?&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="10502" LastEditDate="2019-06-05T16:15:44.830" LastActivityDate="2019-06-07T19:54:21.363" Title="Did any Apple II games use a &quot;timing resistor&quot;?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;gaming&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8636" PostTypeId="2" ParentId="8598" CreationDate="2019-01-01T21:40:19.237" Score="2" Body="&lt;p&gt;Reading the article on that wiki, it says that the NPCs could not be removed because the game could break.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This makes me think that when checking the sequence of events, the game engine also checks if there has already been an encounter with a specific NPC, and the status is saved on a property of the NPC itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is speculation of course, but I think it's likely this way, because it's faster to check on a specific NPC a flag saying &quot;already_encountered&quot; rather than going through a list of encountered NPCs and checking for that single one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why does this matter? Because if the NPC was actually removed from the game, the engine would not be able to check the encounter status after said NPC died. So, one solution is to not remove them. But of course they have to not be encounterable (is it a word?) again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Npw, suppose that you put a &quot;is_alive&quot; flag to false, to say that the NPC is dead. That would mean going through the NPC list in the room, checking if it's dead, display a different sprite in that case and handle the inventory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you just move it to a different room and replace it with an object, it's a lot easier. You organize the NPCs by room, meaning that you access the room index, and inside that there is a list of NPCs and objects. You just go through the list and you don't need to handle any exception. You interact with NPCs that are there, you don't see the ones that have been moved, and you can get stuff from any container, including a dead body.&lt;/p&gt;&#xA;" OwnerUserId="11332" LastActivityDate="2019-01-01T21:40:19.237" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8637" PostTypeId="2" ParentId="8635" CreationDate="2019-01-01T22:30:20.047" Score="8" Body="&lt;p&gt;What you describe is the basic workings of the Apple II analogue paddle/joystick input. There where four of them. They worked by charging a capacitor and measuring the time to be discharged over the resistor. A lower resistor value means faster discharge. So, yes, every game that used paddles or joysticks or anything like that did use these 'timing resistors'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, as always, many more applications could be made with this basic circuit - like a temperature sensor using heat variant resistors, or light variable ones, or any other input that could be turned into a resistance value. Pick your favourite!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the paddle input out of the box (*1) for any serious minded timing is just ridiculous. Over all variation between individual computers is already way past +/-25% - in addition temperature, PS condition and connector issues make it even more variant between individual machines. An effort to equalize these effects are at a level where adding a digital time base might come off way less expensive.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - That is without additional compensation cricuitry and intense calibration before any usage.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-01-02T18:16:39.967" LastActivityDate="2019-01-02T18:16:39.967" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8638" PostTypeId="2" ParentId="8627" CreationDate="2019-01-02T00:13:34.320" Score="14" Body="&lt;p&gt;Damien Guard's series of articles starting with &lt;a href=&quot;https://damieng.com/blog/2011/02/20/typography-in-8-bits-system-fonts&quot; rel=&quot;noreferrer&quot;&gt;Typography in 8 bits: System fonts&lt;/a&gt; has versions of almost all of the old system fonts you might remember.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't mind digging about in ROM images, there are rather more than one lifetime's worth here: &lt;a href=&quot;https://github.com/phooky/PROM&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/phooky/PROM&lt;/a&gt; — the &lt;a href=&quot;https://github.com/phooky/PROM/tree/master/Osbourne%201&quot; rel=&quot;noreferrer&quot;&gt;Osbourne 1&lt;/a&gt; font is remarkably pretty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For making true bitmaps from vector fonts, I wouldn't be without &lt;a href=&quot;https://web.archive.org/web/20171026195930/http://math.nmsu.edu/~mleisher/Software/otf2bdf/&quot; rel=&quot;noreferrer&quot;&gt;otf2bdf&lt;/a&gt;. There will be library code for Python to read BDFs, as it's the documented, cross-platform way of describing font bitmaps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personal favourite fonts for use on small displays:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Acorn BBC Micro teletext font (aka ‘Mode 7’) - output by the Mullard SAA5050, it's been extended in the &lt;a href=&quot;https://bjh21.me.uk/bedstead/&quot; rel=&quot;noreferrer&quot;&gt;Bedstead&lt;/a&gt; vector font family.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Sun Microsystems's Gallant terminal font - effectively a monospaced Times.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Atari ST 8×16 font - used in 640×400 &quot;Jackintosh&quot; mono mode. It might just be a standard DR Gem font, though.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-01-02T00:13:34.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8639" PostTypeId="2" ParentId="8598" CreationDate="2019-01-02T13:50:21.303" Score="2" Body="&lt;p&gt;This is a common technique to make memory management easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One major challenge with games of this nature is running out of memory after a long time. This can happen if there is no enough memory available, or if memory becomes fragmented to the point where a single large enough block is not available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplest solution to this problem is to avoid doing things that allocate or free memory. Then it becomes possible to calculate the maximum amount of memory required no matter how long the game runs or what the player does. It also means you don't need any memory management code because everything is assigned by the compiler and never changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game engine therefore sets up all NPCs at the start of the game, and rather than removing their corpses simply moves them to a special area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other issue is the behaviour of corpses. They can be looted and generally act more like objects than the more permanent NPCs, which have AI and other properties. Replacing dead NPCs with a corpse object makes managing and resurrecting them easier to implement.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2019-01-02T15:39:23.667" LastActivityDate="2019-01-02T15:39:23.667" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8640" PostTypeId="1" CreationDate="2019-01-02T18:13:47.270" Score="5" ViewCount="1296" Body="&lt;p&gt;I thought all Atari 2600 games had been programmed in 6502/6507 assembly language (plus whatever activated the Stella sound system), but at a party recently, a friend indicated that some 2600 programmers had actually cross-compiled C code for the 6502. If this is so, which of the 2600 games were in fact written in C, and which compilers were used?&lt;/p&gt;&#xA;" OwnerUserId="10408" LastEditorUserId="10408" LastEditDate="2019-01-03T00:05:19.393" LastActivityDate="2019-01-18T18:52:11.567" Title="Were some Atari 2600 games written in C?" Tags="&lt;software-development&gt;&lt;c&gt;&lt;atari-2600&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8641" PostTypeId="2" ParentId="8640" CreationDate="2019-01-02T18:24:46.823" Score="9" Body="&lt;p&gt;Moste likely your friend was referring to modern time developments, not contemporary games. While today &lt;a href=&quot;https://en.wikipedia.org/wiki/Cc65&quot; rel=&quot;noreferrer&quot;&gt;CC65&lt;/a&gt; does deliver acceptable results for every day jobs, the 6502 isn't exactly C-friendly. C does require a certain memory handling - and quite some RAM as well. To program the 2600 with its bare bone 128 Bytes of RAM is already a tough job in Assembly and much less feasible in C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If at all, I can only see some usage in the area of demo-programming, where next to no RAM data is needed, as such code is not driven by variable and interactive data, but runs straight and unmodified ahead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So go ahead and call out your friend to give you evidence for his assumption - and what it was exactly about.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;BTW: Stella is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_2600#History&quot; rel=&quot;noreferrer&quot;&gt;code name&lt;/a&gt; for the whole 2600 system. The (only) custom chip was called &lt;a href=&quot;https://en.wikipedia.org/wiki/Television_Interface_Adaptor&quot; rel=&quot;noreferrer&quot;&gt;TIA&lt;/a&gt; and did not only sound but display as well - under direct CPU control that is.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-01-02T18:33:28.627" LastActivityDate="2019-01-02T18:33:28.627" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8642" PostTypeId="1" AcceptedAnswerId="8742" CreationDate="2019-01-02T21:48:42.143" Score="5" ViewCount="649" Body="&lt;p&gt;I'm trying to decide on what I can get rid of from the zero page, so that I can keep my own data there. &lt;a href=&quot;https://www.c64-wiki.com/wiki/Zeropage&quot; rel=&quot;noreferrer&quot;&gt;Looking at this page&lt;/a&gt;, documenting what each of the zeropage locations do, I'm trying to figure out why there are pointers to the ROM routines for converting to floating point from integers and back in locations $03 through $06. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't imagine we'd need to change the value of these pointers, so the addresses to those routines would be better off as operands to a &lt;code&gt;jsr&lt;/code&gt; or whatever, wouldn't they?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-01-12T21:45:14.647" Title="Why does the Commodore 64 leave these pointers in Zeropage?" Tags="&lt;commodore-64&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8643" PostTypeId="2" ParentId="8642" CreationDate="2019-01-02T21:53:28.083" Score="3" Body="&lt;p&gt;These function pointers are in zero page RAM because that leaves the manufacturer the ability to change the ROM without affecting software that already uses those functions through the zero page pointers. On startup, the ROM will populate the zero page pointers with its own function addresses. If there is a different revision of the ROM that has those functions in different places, then those values will be different.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2019-01-02T21:53:28.083" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8644" PostTypeId="2" ParentId="8640" CreationDate="2019-01-03T04:35:05.997" Score="5" Body="&lt;p&gt;C didn't have anywhere near the popularity and ubiquity that it does today. As has been mentioned elsewhere, the 6502 is a crummy target for a C compiler, notably with it's sparse, 8 bit register set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recall the sparse architecture of the machine: 128 bytes of RAM and 4K of ROM. A 4K assembly language program, with several 8-bit, and a few 16-bit counters or pointers, is not an arduous amount of code for an assembly language programmer. (Yes, there were banked cartridges later, but most of it was for data rather than actual code.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the key values of a language like C is also portability, something that was simply not a concern here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, games on systems like the Atari were notorious for their optimizations, and other shenanigans and contortions the developers went through to get their titles crammed in to these creaky, slow boxes. Leveraging the underlying CPU to their full potential required 100% access to it, something that C did not offer. C does not offer access to things like the status registers of the CPU. The coders needed exact cycle timings for certain tasks. Direct access to timers and interrupt handlers, some which may change from scene to scene or even frame to frame. The assembly language developer can write code that &quot;knew&quot; exactly what state it was in at all times, and was coded appropriately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any high level value that C could have offered was lost not just in lack of access to the CPU, but also just in terms of longer turn arounds and development cycles. C is expensive to compile compared to assembly, and back then, yes, this mattered. A good macro assembler readily takes the sting of using assembly by letting the developer add in higher level constructs (working with structures, working with collections, looping, branching, etc.) or even small &lt;a href=&quot;https://en.wikipedia.org/wiki/Domain-specific_language&quot; rel=&quot;noreferrer&quot;&gt;DSLs&lt;/a&gt; written in macros.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in the end, the cost of C wouldn't have brought enough value to the table for a professional game developer on such limited systems back then. &lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2019-01-03T04:35:05.997" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8645" PostTypeId="2" ParentId="8640" CreationDate="2019-01-03T04:48:11.300" Score="6" Body="&lt;p&gt;Only people who worked for Atari or third-party game developers could say for sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For early development, the history of the 2600 and C don't align very well.  Atari began design for the first prototypes of the 2600 began in late 1975, shortly after the 6502 was introduced.  C made its first appearance anywhere in 1972 and Kernighan and Ritchie wouldn't publish &lt;em&gt;The C Programming Language&lt;/em&gt; until 1978, the year after the 2600 was introduced.  Compilers in those days were almost always written to be run on their target platforms, and cross-compilation was a rarity if it existed at all.  The first known C compiler that isolated code generation enough to make porting it to other platforms was PCC, which didn't make it out of Bell Labs until 1979 as part of Unix V7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later development in C would have been a very remote possibility.  In 1983, Manx released &lt;em&gt;Aztec C65&lt;/em&gt;, a compiler for the Apple II which produced object code that could, in theory be run on the 2600.  Manx warns about the trade-offs of trying to run C on a 6502 in its &lt;a href=&quot;http://www.aztecmuseum.ca/docs/AztecC_minimanual.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;mini-manual&lt;/a&gt; (see section 1.6).  It's difficult to imagine that compiled C would be a good choice on a target with such limited memory and no frame buffer.  The latter required that video be generated in real time by the processor, leaving fewer cycles available for game play and a hard, 33-millisecond deadline to start generating the next frame of video. If you ever saw black bars at the edges of the screen on a 2600, that was a symptom of the deadline being missed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recommended reading:  &lt;em&gt;Racing the Beam&lt;/em&gt; by Montfort and Bogost.&lt;/p&gt;&#xA;" OwnerUserId="749" LastEditorUserId="749" LastEditDate="2019-01-04T03:40:23.487" LastActivityDate="2019-01-04T03:40:23.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8646" PostTypeId="2" ParentId="6480" CreationDate="2019-01-03T07:11:46.903" Score="5" Body="&lt;p&gt;I believe that the bbc master turbo had a 4mkz 65c02 and ran basic 4, so expect better than 2X again.&#xA;I don't know about 6809, but the BBC range had the fastest processing from their introduction until the Archimedes range took over even excluding the ARM processor that was developed as a BBC coprocessor.&lt;/p&gt;&#xA;" OwnerUserId="11490" LastActivityDate="2019-01-03T07:11:46.903" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8647" PostTypeId="2" ParentId="5588" CreationDate="2019-01-03T07:25:36.710" Score="0" Body="&lt;p&gt;The phroms don't have to be phoenim based.&#xA;You can see this in AstroBlaster which doesn't even use a phrom or in the Star wars demo that plays back the speech from the arcade game which used the same tms5220.&lt;/p&gt;&#xA;" OwnerUserId="11490" LastActivityDate="2019-01-03T07:25:36.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8648" PostTypeId="2" ParentId="4362" CreationDate="2019-01-03T07:43:14.957" Score="3" Body="&lt;p&gt;Sorry for being vague, but I believe of of the beeb racing games (may be revs) hides some code on screen in the sky area. A couple of timer interrupts to change the pallet was much easier than the practically unknown at the time &quot;virtical rupture&quot;.&lt;/p&gt;&#xA;" OwnerUserId="11490" LastActivityDate="2019-01-03T07:43:14.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8649" PostTypeId="2" ParentId="6302" CreationDate="2019-01-03T16:05:53.310" Score="3" Body="&lt;p&gt;The physics department of Rutgers had a DEC PDP-10  in the time frame that the paper would have been written.  You can check out the listing for Rutgers &lt;a href=&quot;https://sites.google.com/site/mthompsonorg/Home/pdp-10/pdp-10-serial-numbers&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  According to this listing it was a KI10 processor, which ran at a clock speed of 9.1Mhz.  You can check that out &lt;a href=&quot;http://pdp10.nocrew.org/cpu/processors.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Rutgers PDP-10 was running TOPS-10.  While this would have been intended primarily for interactive timeshared use,  TOPS-10 had a good batch subsystem, which could make use of machine cycles that would otherwise be wasted.  The kind of number crunching needed for the paper would have been well suited to running under batch, perhaps with some kind of checkpointing feature so that it could do a little of the work each night. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As other answers have pointed out the measure of the processor in Megaflops is perhaps more to the point than Mhz, which you asked for.  The Wikipedia &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-10&quot; rel=&quot;nofollow noreferrer&quot;&gt;article&lt;/a&gt; for the PDP-10 rates the KL processor at about 1 Megaflop, and the KL was approximately twice as fast as the KI.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't prove that the computations you asked about were actually done on the KI at Rutgers,  but it's a pretty good chance.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2019-01-03T16:05:53.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8650" PostTypeId="2" ParentId="6393" CreationDate="2019-01-03T17:24:49.260" Score="4" Body="&lt;p&gt;To send the keyboard data, Amiga Forever uses the keyboard layout set in the title (right-click, Edit, select the Input tab). Under &quot;Classic&quot; systems like 3.x, this is also autodetected at runtime, but on 4.x it must be set correctly in the title settings. This probably explains why it did not work with the German layout. Set the keyboard to German in the title settings, and it should work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer to why it did not work in the US layout is that Amiga Forever up to 8.0.5.0 sends &quot;&amp;lt;&quot; and &quot;&gt;&quot; as if they were typed with the extra key to the left of the space bar on an international Amiga layout. This is mapped correctly on Amiga OS up to 3.x (also for the USA 0/1/2 keymaps), but seems to be missing in AmigaOS 4, thus the key produces no output. As of Amiga Forever 8.0.6.0, &quot;&amp;lt;&quot; and &quot;&gt;&quot; are now sent using the non-international Amiga keyboard variant, and so should work also with keymaps where the international variants are missing.&lt;/p&gt;&#xA;" OwnerUserId="4005" LastActivityDate="2019-01-03T17:24:49.260" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8651" PostTypeId="2" ParentId="8627" CreationDate="2019-01-03T18:28:45.570" Score="6" Body="&lt;p&gt;The bitmap fonts that come with &lt;a href=&quot;http://x3270.bgp.nu/documentation-faq.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://x3270.bgp.nu/documentation-faq.html&lt;/a&gt; are licensed under the same MIT-like terms the program is under. Some of them are too large for your application, but there is one that's 8 pixels tall. If you download the source tarfile, it'll have the .bdf fonts inside it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can probably just grab the Signetics characters that were copied into the Apple II (it was the chargen ROM used in the Apple I), MSX, NEC PC-8000 and countless other computers of that time. Check &lt;a href=&quot;https://www.mamedev.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mamedev.org/&lt;/a&gt; or &lt;a href=&quot;http://mess.redump.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://mess.redump.net/&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A third possibility is the Spleen bitmapped font by Frederic Cambus that is the default console font for OpenBSD. You can get it from &lt;a href=&quot;https://github.com/fcambus/spleen&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/fcambus/spleen&lt;/a&gt;. More information can be found at &lt;a href=&quot;https://www.cambus.net/spleen-monospaced-bitmap-fonts/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.cambus.net/spleen-monospaced-bitmap-fonts/&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6854" LastEditorUserId="6854" LastEditDate="2019-01-10T15:15:44.487" LastActivityDate="2019-01-10T15:15:44.487" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8652" PostTypeId="1" AcceptedAnswerId="8655" CreationDate="2019-01-03T22:26:26.853" Score="24" ViewCount="2732" Body="&lt;p&gt;According to &lt;a href=&quot;https://apple2online.com/web_documents/mouse_technical_notes.pdf&quot; rel=&quot;noreferrer&quot;&gt;Apple II Technical notes Mouse #6, updated January 1989&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In unenhanced Apple IIe computers, the alternate character set contained two sets of inverse uppercase characters. In the enhanced Apple IIe, and in all Apple IIc and IIGS computers, one set of inverse uppercase characters is replaced by a MouseText character set. MouseText is a set of graphical characters designed to allow Apple II computers to display a desktop metaphor on the text screen.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I remember reading about this in the 1990's, and the story was that MouseText was an afterthought, implemented in order to take advantage of the 'extra' character set that had somehow crept in to the system. I specifically remember a 'warning' that certain 'old' software could display MouseText instead of the desired inverse video if the programmer had used the &quot;redundant&quot; set of inverse characters instead of the ones that they should have, in hindsight, used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Why&lt;/em&gt; did the original Apple //e have two sets of inverse uppercase characters?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Was this a bug?&lt;/li&gt;&#xA;&lt;li&gt;Was this intended as a hack to fix some other bug (and MouseText was introduced after this hack was no longer necessary)? For example, this might happen if an intermittent bug caused the system to sometimes query the wrong address in search of inverse video characters - it might have been deemed easier to simply copy the characters into the &quot;wrong&quot; address than to fix the root addressing bug.&lt;/li&gt;&#xA;&lt;li&gt;Was the creation of MouseText intended all along, with the area reserved by an extra set of inverse characters until the graphical characters were ready?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3423" LastEditorUserId="3423" LastEditDate="2019-01-06T12:41:01.183" LastActivityDate="2020-05-14T00:08:08.330" Title="Why did the original Apple //e have two sets of inverse video characters?" Tags="&lt;apple-ii&gt;&lt;display&gt;&lt;text&gt;&lt;font&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8653" PostTypeId="1" CreationDate="2019-01-03T23:20:41.710" Score="13" ViewCount="1069" Body="&lt;p&gt;For those of you retro developers out there, I am having a hard time figuring out how exactly to select the &quot;darker&quot; color palette in 320x200 CGA mode.  Here's what I have so far:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;setup_cga_graphics:&#xA;    mov     ah, 0           ; int 10,0&#xA;    mov     al, 4           ; mode 4 (cga 320x200 4 color)&#xA;    int     10h             ; bios int&#xA;&#xA;    mov     ah, 0Bh         ; interrupt 10B&#xA;    mov     bh, 1           ; 1 = 4 pallette mode&#xA;    mov     bl, 0           ; 0 = warm colors (r,g,b) 1 = cool (c,m,w)&#xA;    int     10h             ; bios int&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I assemble this with NASM and fire it up.  It brings up a C:\ prompt in bright yellow.  This tells me that somehow the &quot;intensity bit&quot; is set high and thus the brighter color scheme is selected by default.  I realize this is somewhat arcane/esoteric and absolutely obsolescent.&#xA;I guess I'm hoping that a few of you oldschool x86 coders are still out  there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried looking at other interrupts to set the intensity bit like service 10H, however it appears to only support EGA.  Any pointers would be great.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;To avoid confusion i've attached two images, one from Defender of the Crown using the lower intensity that I am aiming for:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://www.oldgames.sk/images/oldgames/strategy/Defender.of.the.Crown/dj_4c920de680227.png&quot; /&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'm not looking for is this:&#xA;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/3/32/Screen_color_test_CGA_4colors_Mode4_Palette2_HighIntensity.png&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="11496" OwnerDisplayName="JohnnyStarr" LastEditorUserId="11496" LastEditDate="2019-01-04T20:14:01.760" LastActivityDate="2019-01-05T09:53:43.533" Title="How to use the &quot;darker&quot; CGA palette using x86 Assembly?" Tags="&lt;ms-dos&gt;&lt;graphics&gt;&lt;assembly&gt;&lt;x86&gt;&lt;cga&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8654" PostTypeId="2" ParentId="8652" CreationDate="2019-01-03T23:35:56.820" Score="8" Body="&lt;p&gt;The screen character set on the Apple II looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00-1f: ASCII 40-5f, but inverse text&#xA;20-3f: ASCII 20-3f, but inverse text&#xA;40-5f: ASCII 40-5f, but flashing text&#xA;60-7f: ASCII 20-3f, but flashing text&#xA;80-9f: ASCII 40-5f (officially control characters, but displayed as normal text)&#xA;a0-bf: ASCII 20-3f&#xA;c0-df: ASCII 40-5f&#xA;e0-ff: ASCII 20-3f (Apple ][/][+) -or- ASCII 60-7f (Apple //e and later systems with lower case)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With the 80-column firmware enabled (//e and later), the output is similar, but replaces flashing upper-case text with inverse, and gains lower case:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;40-5f: ASCII 40-5f, inverse&#xA;60-7f: ASCII 60-7f, inverse&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Starting with the Apple //c, the alternate character set with &lt;a href=&quot;https://en.wikipedia.org/wiki/MouseText&quot; rel=&quot;noreferrer&quot;&gt;MouseText&lt;/a&gt; could be enabled. It left the character set largely unchanged, but replaced flashing upper-case text in the character map:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;40-5f: MouseText&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So MouseText actually replaced the &lt;em&gt;flashing&lt;/em&gt; upper-case text in the original layout.  When in alternate-text mode, however, flashing was replaced by inverse, so in that sense it also replaced inverse upper case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(You can find most of the above in my notes on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Talk:Apple_II_character_set&quot; rel=&quot;noreferrer&quot;&gt;&quot;talk&quot; page&lt;/a&gt; for the Apple II character set page on wikipedia.  The page itself is currently very wrong.)&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2019-01-04T15:42:59.203" LastActivityDate="2019-01-04T15:42:59.203" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8655" PostTypeId="2" ParentId="8652" CreationDate="2019-01-04T00:00:09.693" Score="30" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did the original Apple //e have two sets of inverse uppercase characters?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simple: To allow lower case inverse letters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's all about the clever way Woz arranged the &lt;strong&gt;original II&lt;/strong&gt;'s single character set to save in hardware and offer additional functionality. There is only a single character set of 64 characters, showing up 4 times in 256 entry character space (*1). The first occurrence ($00..$3F - 2^6&amp;amp;7 cleared) showed up inverse. The next ($40..7F - 2^6 set) will appear flashing on screen, while the remaining two ($80..$FF - 2^7 set) display normal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last may seem strange, until we realize that it is meant to be ASCII compatible - that is, all (available) characters show up at their corresponding ASCII code plus high bit set. To make this happen, Woz swapped position of the letter rows with symbols/numbers. As a result the following assignment can be seen:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$00..$1F Inverse  Uppercase Letters (aka glyphs of ASCII $40..$5F)&#xA;$20..$3F Inverse  Symbols/Numbers   (aka glyphs of ASCII $20..$3F)&#xA;$40..$5F Flashing Uppercase Letters&#xA;$60..$7F Flashing Symbols/Numbers&#xA;$80..$9F Normal   Uppercase Letters (make ASCII control codes show up as letters)&#xA;$A0..$BF Normal   Symbols/Numbers   (like ASCII + $80)&#xA;$C0..$DF Normal   Uppercase Letters (like ASCII + $80)&#xA;$E0..$FF Normal   Symbols/Numbers&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So by fiddling with address lines and ROM content multiple effects could be reached. The whole circuit was also intended to be used with two 256x8 Bit PROMs (*2). When the A2 was made ready for production, these two chips where replaced by a single 2 KiB ROM where only 512 Bytes (*3) are used (*4). At that point a few tweaks would have allowed the addition of lower case without much increase in hardware cost, as the most expensive part, the character generators size, was already spend. It didn't happen and offered much room for after market enhancements :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;On the IIe&lt;/strong&gt;, Apple wanted to add lower case letters, which would have worked easy for the normal display, but not for inverse and/or flashing.  After all, the readable ASCII portion (*5) is 96 characters. It's impossible to squeeze 96 three times into 256 code positions, so flashing was sacrificed to give way to lower case inverse (*6). The resulting screen codes now looked like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$00..$1F Inverse  Uppercase Letters&#xA;$20..$3F Inverse  Symbols/Numbers&#xA;$40..$5F Inverse  Uppercase Letters (this is where the mouse magic will happen)&#xA;$60..$7F Inverse  Lowercase Letters (the reason why flashing got dropped)&#xA;$80..$9F Normal   Uppercase Letters&#xA;$A0..$BF Normal   Symbols/Numbers   (like ASCII + $80)&#xA;$C0..$DF Normal   Uppercase Letters (like ASCII + $80)&#xA;$E0..$FF Normal   Lowercase Letters (like ASCII + $80)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So basically two 128 character sets one inverse, one normal. This is now the alternate character set, activated by writing the according soft switch (*7). With the custom IOU it wasn't a big deal to rearrange encoding this way - and have the ROM take care of conversion when outputting in either code set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, when searching for &lt;strong&gt;space for MouseText&lt;/strong&gt; to be included in the &lt;strong&gt;IIc&lt;/strong&gt; (and retrofit to the IIe (*8)), they noticed that there are still two sets of upper case letters in inverse, so one was replaced by 32 new graphics symbols. And the rest is history - as they say :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except, it seems strange (again at first) that not $00.$1F, but $40..$5F was used for MouseText graphics. Unless we cross reference back to original character set, where this region was flashing. So using this did complicate the character output routine in ROM further, but at the same time kept compatibility with existing programs displaying inverse by direct screen writes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enhancing an existing system is always a mess, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I specifically remember a 'warning' that certain 'old' software could display MouseText instead of the desired inverse video if the programmer had used the &quot;redundant&quot; set of inverse characters instead of the ones that they should have, in hindsight, used.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's the same 'problem' any use of flashing will produce when the alternate character set is used. So not special to MouseText, but the fact that the characterset got modified.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was this a bug?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nope. Just the result of being able to display lower case letters.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was this intended as a hack to fix some other bug (and MouseText was introduced after this hack was no longer necessary)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While MouseText was indeed a later add-on, it wasn't a bugfix, only an enhancement. After all, the normal text has as well a second upper case letter set ($80..$9F).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was the creation of MouseText intended all along, with the area reserved by an extra set of inverse characters until the graphical characters were ready?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nope. As usual, it's a series of later add-ons forced into an existing design.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Aka, the value written into screen memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - A chip Woz seemed to like a lot :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - More exact, only 448, as only 7 bytes per character cell where read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Which kind of sucks, as now there was space to add lower case normal text without much change. At least for output. And if not with teh II for whatever reason, the II+ board would have been the perfect time. :(&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Everything except the control characters ($20..$7F) ... err ... more correct its only 95 characters, as $7F is as well an ASCII contol character, still the IIc displayed it as a doted rectangle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Well, there would have been a way to keep flashing and make inverse lower case available (96+96+64=256) by using the codes $80..$9F for inverse lower case. This would require a bit more logic (easy available in the IOU custom chip) plus mode dependant output code to recaclulate screen codes. On the backside this would break the way control codes where displayed (which wouldn't be displayed in all instances - and MouseText broke it anyway for inverse).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hard to tell why the decision was taken, I guess it was the usual buerocratic one for an easy, straight solution or two full character sets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - $C00E for standard Charset, $C00F for alternate and $C01E to read the actual state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - The Enhanced IIe upgrade and all later II versions, all the way to IIe card and IIgs.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-14T00:08:08.330" LastActivityDate="2020-05-14T00:08:08.330" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8656" PostTypeId="2" ParentId="8653" CreationDate="2019-01-04T08:12:41.457" Score="10" Body="&lt;p&gt;Your code is correct; a yellow prompt means that you’re using the red/green/brown palette. However, to get the low intensity variant, you also need to call interrupt 10h service 0Bh with BX set to 0 (black background, low intensity; strictly speaking, you can have any background — the bottom four bits, 3–0 — and the fifth bit, bit 4, controls the intensity; this maps to &lt;a href=&quot;https://www.seasip.info/VintagePC/cga.html&quot; rel=&quot;noreferrer&quot;&gt;register 03D9h, the colour control register&lt;/a&gt;). You can draw the various colours and flip palettes to see the difference:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    org 100h&#xA;&#xA;    section .text&#xA;&#xA;start:&#xA;    mov ax, 4           ; set CGA 320x200&#xA;    int 10h&#xA;&#xA;    mov ah, 0Bh         ; set the cool palette&#xA;    mov bx, 0101h       ; (cyan, magenta, white)&#xA;    int 10h&#xA;&#xA;    xor bx, bx          ; low intensity, black background&#xA;    int 10h&#xA;&#xA;    mov ax, 0B800h      ; draw some pixels in each colour&#xA;    mov es, ax&#xA;    mov di, 0&#xA;    mov bx, 320&#xA;    xor ax, ax&#xA;    mov cx, bx&#xA;    rep stosw&#xA;    inc ax&#xA;    mov cx, bx&#xA;    rep stosw&#xA;    inc ax&#xA;    mov cx, bx&#xA;    rep stosw&#xA;    inc ax&#xA;    mov cx, bx&#xA;    rep stosw&#xA;&#xA;    mov ah, 1           ; wait for a character&#xA;    int 21h&#xA;&#xA;    mov ah, 0Bh&#xA;    mov bx, 0010h       ; high intensity&#xA;    int 10h&#xA;&#xA;    mov ah, 1           ; wait for a character&#xA;    int 21h&#xA;&#xA;    mov ah, 0Bh         ; set the warm palette&#xA;    mov bx, 0100h       ; (red, green, brown)&#xA;    int 10h&#xA;&#xA;    mov ah, 1           ; wait for a character&#xA;    int 21h&#xA;&#xA;    mov ah, 0Bh&#xA;    xor bx, bx          ; low intensity&#xA;    int 10h&#xA;&#xA;    mov ah, 1           ; wait for a character&#xA;    int 21h&#xA;&#xA;    mov ax, 4C00h       ; exit&#xA;    int 21h&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-01-05T09:53:43.533" LastActivityDate="2019-01-05T09:53:43.533" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8657" PostTypeId="2" ParentId="8653" CreationDate="2019-01-04T12:50:10.620" Score="4" Body="&lt;p&gt;On the original IBM PC BIOS and true compatibles, the foreground intensity can be set using INT 10h with AH = 0Bh and BH = 00h. The low four bits of BL give the background colour, and bit 4 gives the foreground intensity. This is documented in (for example) the PC XT technical reference, page A-53.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So after selecting your palette, this should switch to low intensity (brown rather than yellow text):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mov ah, 10h&#xA;mov bh, 0   ; Set background / intensity&#xA;mov bl, 0   ; Black background, low intensity &#xA;int 10h&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you can avoid possible BIOS compatibility issues by writing directly to the CGA colour select register at 03D9h. This won't work on non-CGA hardware:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mov ax,40h&#xA;mov es,ax       ; ES -&amp;gt; BIOS data segment&#xA;mov al,es:[66h] ; Last value written to 03D9h&#xA;mov dx,03D9h&#xA;and al,0EFh     ; Reset intensity bit&#xA;mov es:[66h],al ; Update last value written&#xA;out dx,al       ; And write to the CGA&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="1912" LastEditDate="2019-01-04T20:58:36.920" LastActivityDate="2019-01-04T20:58:36.920" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8658" PostTypeId="2" ParentId="8130" CreationDate="2019-01-04T14:31:46.543" Score="5" Body="&lt;p&gt;It may be worth looking at exactly how Nintendo 64 controllers work in the first place, before addressing this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The N64 controller's analog stick works in a very similar way to a mechanical (non-optical) computer mouse. Moving the stick in the X and Y directions rotates one of two optical encoding wheels, which are placed between an infrared LED and detector. Compare this picture of an N64 encoding wheel (from &lt;a href=&quot;https://nfgworld.com/mb/thread/447-Nintendo-s-N64-Pad-What-s-Inside&quot; rel=&quot;nofollow noreferrer&quot;&gt;nfgworld&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lOgsG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lOgsG.jpg&quot; alt=&quot;N64 encoding wheel and axle&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with the inside of a mechanical mouse (from &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Microsoft_Serial_Mouse_2.0A_-_slotted_wheel-8527.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikimedia Commons&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TOjbO.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TOjbO.jpg&quot; alt=&quot;mechanical mouse encoding wheel with LED and detector&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mouse the wheel is mounted directly to the axle, whereas in the N64 controller the axle (pushed by the analog stick) is connected to the encoding wheel via a gear. (See &lt;a href=&quot;https://nfgworld.com/mb/thread/447-Nintendo-s-N64-Pad-What-s-Inside&quot; rel=&quot;nofollow noreferrer&quot;&gt;nfgworld&lt;/a&gt; for more pictures of how the pieces connect.) They operate in the same way however: the spokes of the turning wheel block the infrared light from reaching the detector. By counting the number of interruptions (and noting the direction of movement) a computer mouse can indicate the distance and direction the mouse has been moved, and the N64 controller can indicate how far (and which way) the stick has been moved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The N64 controller also has a spring to push the stick back to the center position when you release it. (You may be aware that old sticks become &quot;loose&quot;. This isn't due to the spring losing tension, but the plastic components wearing away over time.) The N64 controller doesn't have any special hardware to detect the center position, instead it assumes that the stick is in the center position when the controller is plugged in (or when the console is turned on). You can prove this by doing this little experiment:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Load a level in a 3D game such as Super Mario 64 or Goldeneye&lt;/li&gt;&#xA;&lt;li&gt;Unplug the controller&lt;/li&gt;&#xA;&lt;li&gt;Hold the analog stick down (back) and plug the controller back in&lt;/li&gt;&#xA;&lt;li&gt;Release the analog stick&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Your character will now start running forward on their own! This happens because the controller's spring is holding the analog stick further up/forward than where it was when you inserted it (the &quot;center&quot; point).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should now understand that the N64 reads the position of the analog stick by counting &quot;spokes&quot; of rotation on the encoder wheels, and keeps track of how many spokes up/down and left/right of the center point it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know exactly how many spokes up/down (or left/right) correspond to the maximum movement of the analog stick, but let's assume that it's 100 each way. The video game programmer would then be free to decide how to relate the scale of -100 to +100 to their character's movements. They might decide that anything beyond 90 (or -90) is sprinting, 60-89 is running, 30-59 is jogging, and 5-29 is walking. (They might choose different values if the character is in, for example, stealth mode, or carrying a heavy weight.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this imaginary programmer hasn't used the values 1-4. For practical reasons (friction, spring tension, loose-fitting components) the analog stick won't return to &lt;em&gt;exactly&lt;/em&gt; the same position every time when released. So the designer has to consider a range of small values as being equal to zero, forming a dead-zone. If they didn't do this, players would complain that they could never get Mario to stand still!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note also that the existence (and size) of the dead zone is due to the programmer's choices, rather than the hardware of the console itself. The same could be done with any analog input device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Was the N64 the first console to pull this off?&lt;/strong&gt;&#xA;The N64 controller is unique in using a rotary optical encoder; most analog controllers and joysticks used potentiometers (variable resistors) instead. And before the N64 most games consoles had used d-pads or digital joysticks, which wouldn't need a dead zone. But there had been other consoles that used analog inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The earliest video game consoles used analog &lt;a href=&quot;https://en.wikipedia.org/wiki/Paddle_%28game_controller%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;paddles&lt;/a&gt; for games like &lt;a href=&quot;https://en.wikipedia.org/wiki/Pong&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pong&lt;/a&gt;: these didn't spring back to a center position but stayed where you left them. If the paddle was used to control the position on the screen then a dead-zone wouldn't be relevant, but for racing games involving steering, a programmer might choose to introduce a dead-zone to make it easier to go straight. For example, in a system that returned a value between 0 and 255 for the paddle position, instead of only considering 128 to represent straight ahead, you could use a range such has 124-132 instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Outside of video game consoles, analog joysticks were more common, including the IBM PC and home microcomputers such as the BBC Micro, Dragon 32, and TRS-80 Color Computer. Dead zones would certainly have been used on these (e.g. in platformers and flight simulator games) before the N64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in games consoles, Sega released an analog joystick or &quot;flight stick&quot; for the Saturn, called the &lt;a href=&quot;http://video-games.wikia.com/wiki/Sega_Saturn_Mission_Stick&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mission Stick&lt;/a&gt; in &lt;a href=&quot;https://en.wikipedia.org/wiki/Analog_stick#Analog_joysticks&quot; rel=&quot;nofollow noreferrer&quot;&gt;1995&lt;/a&gt;, several months before the N64. There was also a third-party analog gamepad called the &lt;a href=&quot;https://segaretro.org/XE-1_AP&quot; rel=&quot;nofollow noreferrer&quot;&gt;XE-1 AP&lt;/a&gt; released for the Sega Mega Drive back in 1989, long before the days of the Nintendo 64. These would have required the use of dead-zones in the flight simulation and racing software that they supported.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in summary, the N64 was &lt;em&gt;not&lt;/em&gt; the first use of a dead-zone on an analog input, nor even of an analog input on a games console. The technology Nintendo used for their analog stick was based upon that used in computer mice. But the Nintendo 64 &lt;em&gt;was&lt;/em&gt; the first widespread use of an analog input on a hand-held gamepad, and they managed to obtain a &lt;a href=&quot;https://patents.google.com/patent/US6102803A/en&quot; rel=&quot;nofollow noreferrer&quot;&gt;patent&lt;/a&gt; for this feature, despite the prior existence of the XE-1 AP.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-01-04T18:46:52.873" LastActivityDate="2019-01-04T18:46:52.873" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8659" PostTypeId="2" ParentId="8573" CreationDate="2019-01-04T14:48:04.373" Score="-1" Body="&lt;p&gt;This is not so much a presentation of a system as an attempt to show that the very premise is weak. For the question.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What systems had the lowest resolution ever that still allowed games to be made?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A system with a single pixel would as well qualify. After all, there are plenty games that can be played with a single response signal. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;hitting a button as soon as it lights up&lt;/li&gt;&#xA;&lt;li&gt;playing a certain sequence that gets presented (aka Simon) &lt;/li&gt;&#xA;&lt;li&gt;presenting a certain time duration to be repeated.&lt;/li&gt;&#xA;&lt;li&gt;... and so on.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All with a 1x1 b&amp;amp;w resolution :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-01-04T17:19:50.847" LastActivityDate="2019-01-04T17:19:50.847" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8660" PostTypeId="1" AcceptedAnswerId="8669" CreationDate="2019-01-04T15:37:38.467" Score="6" ViewCount="435" Body="&lt;p&gt;There is a bunch of GFA BASIC for Amiga files (the source code for Blender's ancestor, Traces, downloadable here: &lt;a href=&quot;http://zgodzinski.com/blender-prehistory/&quot; rel=&quot;noreferrer&quot;&gt;http://zgodzinski.com/blender-prehistory/&lt;/a&gt;) that I would like to peek at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite my efforts, I couldn't find any software to open or convert these files to something readable and that would run on Windows 10 64-bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my only solution to run an Amiga emulator and somehow find a copy of GFA BASIC for it?&lt;/p&gt;&#xA;" OwnerUserId="6699" LastActivityDate="2019-01-05T21:55:47.453" Title="Opening or converting GFA Basic files to something readable?" Tags="&lt;history&gt;&lt;amiga&gt;&lt;graphics&gt;&lt;basic&gt;&lt;file-format&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8661" PostTypeId="2" ParentId="8660" CreationDate="2019-01-04T16:22:53.700" Score="2" Body="&lt;p&gt;I think you could use &lt;a href=&quot;http://gfa.net/gfabasic32/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;GFA Basic 32&lt;/a&gt; to run GFA Basic programs on Windows. This should allow you to extract the source code from the tokenised file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that doesn't work, a hex editor and patience should result in you eventually figuring out how to extract the code from the tokenised file, &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5818/278&quot;&gt;a bit like this&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2019-01-04T16:22:53.700" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8662" PostTypeId="2" ParentId="8660" CreationDate="2019-01-04T17:55:30.127" Score="2" Body="&lt;p&gt;You can run &lt;a href=&quot;http://pc.sux.org/tomcat/GfaBasic35Complete.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga GFA Basic&lt;/a&gt; (no idea about legal status) in &lt;a href=&quot;http://www.winuae.net&quot; rel=&quot;nofollow noreferrer&quot;&gt;WinUAE&lt;/a&gt; then &quot;print&quot; the listings to a file.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2019-01-04T17:55:30.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8664" PostTypeId="2" ParentId="2008" CreationDate="2019-01-04T20:36:59.577" Score="38" Body="&lt;p&gt;It was very common to build CPUs out of TTL logic prior to the 4004, 8080 and the 6800. This was the standard way to build later minicomputers. Examples are the Data General NOVA, Xerox Alto and TI-990. Also, if a company needed a processor for, say, a CNC machine or a video game (Vectorbeam), it wasn't unusual for them to build a unique processor from TTL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One interesting case is the Datapoint 2200, a desktop computer from 1970. It was built from TTL parts, originally using a serial processor and shift-register memory. To improve performance, Datapoint asked Intel if they could build a single-chip version of the Datapoint's processor. Intel agreed, eventually building the 8008 processor, which duplicated the Datapoint 2200's architecture and instruction set. (Among other things, this is why x86 is little-endian.) Texas Instruments also built a microprocessor with the same instruction set for Datapoint (the TMX 1795), beating Intel, but ended up abandoning the microprocessor. Datapoint decided to use a faster TTL processor based on the 74181 instead of using the 8008, so Intel marketed the 8008 as a product, essentially creating the microprocessor industry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your other question about why homebrew computers weren't a thing in 1971, it was basically a matter of cost and complexity. Building a computer from TTL was much too expensive for the typical hobbyist, and much more difficult than building a computer from a microprocessor chip. As someone else mentioned, memory was also a huge problem. Magnetic core memory was the only cost-effective approach, but it was expensive and required complex interfacing. Semiconductor memory was insanely expensive at the time: Intel's first RAM chip came out in 1969 and provided 64 bits of storage for $99.50.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To summarize, CPUs were commonly built out of TTL logic, but these were minicomputers, not hobbyist computers. It wasn't until cheap memory and microprocessor chips were available in the mid 1970s that homebrew computers took off.&lt;/p&gt;&#xA;" OwnerUserId="4158" LastActivityDate="2019-01-04T20:36:59.577" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8665" PostTypeId="2" ParentId="2008" CreationDate="2019-01-04T23:50:46.677" Score="8" Body="&lt;p&gt;Well, there was an obscure computer called the &lt;a href=&quot;https://en.wikipedia.org/wiki/VAX&quot; rel=&quot;noreferrer&quot;&gt;VAX 11/780&lt;/a&gt; built out of TTL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was of course not a hobbyist computer, but it doesn't seem to be ruled out by the wording of your question - it was certainly built by 'engineers'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the amateur front, &lt;a href=&quot;http://www.smrcc.org.uk/members/g4ugm/ACC/Vol3-Issue5.pdf&quot; rel=&quot;noreferrer&quot;&gt;here's a 1975 newsletter&lt;/a&gt; from the (UK) Amateur Computer Club, containing details of a machine called the Weeny Bitter, constructed with 7400-series TTL.  I was vaguely considering building it at the time, but never did.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-01-04T23:50:46.677" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8666" PostTypeId="2" ParentId="4702" CreationDate="2019-01-05T00:08:03.790" Score="9" Body="&lt;p&gt;The closest thing I've found to an article explaining the history of the POPCOUNT instruction is a &lt;a href=&quot;http://cryptome.org/jya/sadd.htm&quot; rel=&quot;noreferrer&quot;&gt;cryptography forum discussion&lt;/a&gt;. That discussion claims that population count was added to machines at the NSA's request for cryptanalysis. See also &lt;a href=&quot;https://groups.google.com/forum/#!msg/comp.arch/UXEi7G6WHuU/Z2z7fC7Xhr8J&quot; rel=&quot;noreferrer&quot;&gt;The NSA Instruction&lt;/a&gt; which discusses various systems with POPCOUNT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The book &quot;Hacker's Delight&quot; claims that &quot;According to computer folklore, the population count function is important to the National Security Agency&quot; (page 96).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serveral sources state that IBM STRETCH supported population count as a by-product of all logical operations. This is technically true but misleading - STRETCH implemented a population count register (All Ones Count / AOC) that would count the ones resulting from a logical operation. So while it didn't have an explicit population count instruction, it had hardware to compute the population count into a register. (See page 10 of &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7030/C28-6129_STRAP-II_with_update_Apr63.pdf&quot; rel=&quot;noreferrer&quot;&gt;the IBM 7030 manual&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM built HARVEST as an extension of STRETCH for the NSA. This machine added a streaming bit count instruction (SCSI) (see &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7950/Harvest_Nov1957.pdf&quot; rel=&quot;noreferrer&quot;&gt;HARVEST system manual&lt;/a&gt; page H2.40) among other features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer the original question, there are lots of rumors that POPCOUNT appeared in instruction sets when the NSA wanted it, but unsurprisingly there is no authoritative article on this.&lt;/p&gt;&#xA;" OwnerUserId="4158" LastActivityDate="2019-01-05T00:08:03.790" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8667" PostTypeId="2" ParentId="6405" CreationDate="2019-01-05T01:17:17.787" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Tetris won’t save my scores&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Tetris is a ROM-ONLY cartridge, meaning it does not contain a RAM chip capable of saving progress. Game Boy does not offer a built in save either, so it's normal for Tetris not to save anything at all.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How does saving work in Game Boy games&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;When you insert a cartridge with RAM (like many MBC1 or 3 carts) it works like this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It gets mapped at 0xA000-0xBFFF memory region of Game Boy Memory Management Unit (MMU).&lt;/li&gt;&#xA;&lt;li&gt;It is accessed normally using memory writing instructions, like LD&#xA;(0xA000),A.&lt;/li&gt;&#xA;&lt;li&gt;The Region 0xA000-0xBFFF is small (8Kb) so RAM mapping is available&#xA;using special cart registers&lt;/li&gt;&#xA;&lt;li&gt;In order to retain the volatile memory, a power supply is required (hence the small battery)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;are there any games that save without the use of the built-in save system&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is no &quot;built-in&quot; save system&lt;/p&gt;&#xA;" OwnerUserId="11504" LastEditorUserId="11504" LastEditDate="2019-01-05T22:12:57.373" LastActivityDate="2019-01-05T22:12:57.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8668" PostTypeId="1" CreationDate="2019-01-05T21:51:27.413" Score="3" ViewCount="1071" Body="&lt;p&gt;I have an old laptop 486 with PhoenixBIOS which supports PC card 16bits( PCMCIA II/III).&#xA;I am thinking about the possibility of adding a pccard 16bits with USB ports, mainly to read usbsticks or attach an external cdrom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What should i have in consideration?&#xA;What about windows 95 and support for usb?&#xA;what about usb drivers for DOS?&lt;/p&gt;&#xA;" OwnerUserId="11438" LastActivityDate="2019-01-09T13:53:54.820" Title="USB ports for a 486 laptop (pccard 16bits)" Tags="&lt;ms-dos&gt;&lt;windows-95&gt;&lt;compatibility&gt;&lt;usb&gt;&lt;80386&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8669" PostTypeId="2" ParentId="8660" CreationDate="2019-01-05T21:55:47.453" Score="5" Body="&lt;p&gt;Looks like someone on Atari forum posted the text a while back: &lt;a href=&quot;http://www.atari-forum.com/viewtopic.php?t=33479#p342982&quot; rel=&quot;noreferrer&quot;&gt;convert Amiga GFA Basic file to Atari - Atari-Forum&lt;/a&gt;. As you can't see the files without a login, I have mirrored them as text here: &lt;a href=&quot;https://github.com/scruss/AmigaTraces-GFA_Source&quot; rel=&quot;noreferrer&quot;&gt;scruss/AmigaTraces-GFA_Source: BASIC source for the forerunner of Blender&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://x11-basic.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;X11-Basic&lt;/a&gt;, a modern GFA BASIC implementation, will likely not run this source. Portability was not GFA BASIC's strong point.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-01-05T21:55:47.453" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8670" PostTypeId="2" ParentId="99" CreationDate="2019-01-05T22:07:50.160" Score="6" Body="&lt;p&gt;An early (1964) commercial graphical interface was IBM's 2250 Display Unit, based on its experience with SAGE. This CRT had a 1K x 1K display that could be used for drawings, tables, or text. Interaction was through a keyboard or light pen. Users could perform image operations such as draw, erase, move, rescale, and restructure. (Source: &lt;em&gt;IBM's 360 and Early 370 Systems&lt;/em&gt;, page 602, which I was coincidentally just reading.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM system was considerably different from a modern mouse-based GUI, which may be what the original question is really looking for. In that case, the Xerox Alto (1973) would probably be the first widely-used GUI system (but not sold commercially) and the Xerox Star (1981) the first commercially-available system.&lt;/p&gt;&#xA;" OwnerUserId="4158" LastActivityDate="2019-01-05T22:07:50.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8671" PostTypeId="1" AcceptedAnswerId="8673" CreationDate="2019-01-06T05:22:38.520" Score="46" ViewCount="17175" Body="&lt;p&gt;I imagine it being a huge downgrade for some, not to have color on the Macintosh. Macintosh games were black and white in the beginning, while Apple II had color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm especially interested in experiences of people who lived through that time.&lt;/p&gt;&#xA;" OwnerUserId="11487" LastEditorUserId="75" LastEditDate="2019-01-07T18:41:15.350" LastActivityDate="2020-06-03T20:45:34.760" Title="How was it back then in 1984, when the Apple II had color, and the new Macintosh didn't?" Tags="&lt;apple-ii&gt;&lt;apple-macintosh&gt;&lt;apple&gt;&lt;color-display&gt;" AnswerCount="13" CommentCount="18" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8672" PostTypeId="2" ParentId="8671" CreationDate="2019-01-06T06:38:57.567" Score="43" Body="&lt;p&gt;The Mac was designed from the start to be a GUI-based machine so clear, high-resolution graphics were a requirement.  At the same time available memory was extremely limited due to cost considerations.  The original Macintosh only had 128kB of RAM of which over 21kB were used by the display.  Going to even 8-bit color at that resolution would have pushed the framebuffer size to 171kB, more than the machine had in total.  Despite its limited memory, it still cost US$2500 at release (~US$6000 today).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Five_Different_Macs.txt&amp;amp;sortOrder=Sort+by+Date&amp;amp;topic=Hardware+Design&quot; rel=&quot;noreferrer&quot;&gt;This article&lt;/a&gt; gives an interesting (if brief) history of the Macintosh's early development showing its evolution from a 6809-based system to the final design.  According to that article, the original design was for a 256×256 monochrome display taking up 8KB of 64KB total RAM.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2019-01-06T07:41:21.707" LastActivityDate="2019-01-06T07:41:21.707" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="8673" PostTypeId="2" ParentId="8671" CreationDate="2019-01-06T07:46:05.440" Score="94" Body="&lt;p&gt;I was working in software development at the time, and this wasn't seen as a problem. Colour monitors were expensive and not usually high-quality. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In PC-compatibles, the Colour Graphics Adapter (640x200) wasn't regarded as adequate to be the only display on a machine; the Enhanced Graphics Adapter (640x350) appeared the same year as the original Mac, but nine months later. A monitor for it cost the equivalent of about $1500 today, and could only display 16 colours, because of the limitations of its input circuitry. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good, crisp black-and-white display was perfectly competitive with a fuzzy colour one. The CAD company I worked for in 1984-87 started out selling a system that worked in colour on the Apple ][. The new product written to replace it worked in black-and-white on a PC with a Hercules graphics card. The higher resolution and crisper picture made this very much preferable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The big switch to colour displays came at the end of the 1980s, with the advent of Super-VGA video cards and monitors. &lt;a href=&quot;https://en.wikipedia.org/wiki/Multisync_monitor&quot; rel=&quot;noreferrer&quot;&gt;Multi-Sync&lt;/a&gt; monitors meant that a wide variety of video modes could be displayed on the same monitor, allowing games to change resolution and number of colours to what best suited them. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-08-10T12:57:27.243" LastActivityDate="2019-08-10T12:57:27.243" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="8674" PostTypeId="2" ParentId="8671" CreationDate="2019-01-06T12:57:36.717" Score="32" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I imagine it being a huge downgrade for some, not to have color on the Macintosh. Macintosh games were black and white in the beginning, while Apple II had color.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For back then the whole assumption of a 512x342 pixel B&amp;amp;W display being a downgrade from a display with an effective (*1) colour resolution of 140x192 is so strange(*2), I doubt anyone would have ever thought so back then - most definitely not me or anyone I know (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Colour and resolution is a trade off in memory as both need more with greater depth. With 16 KiB of screen memory (quite a lot back then) one can do a 512x256 B&amp;amp;W picture, or 128x128 in 256 colours (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, this also goes well for the way that the eye works. There are roughly 120 million rods and only 6 million cones - 2 for each colour. So roughly 60 B&amp;amp;W 'pixel' detectors share a single colour detector. Colour is just the frosting on the cake of human vision - the cake itself is resolution :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if the decision is to be made between colour added or more resolution, the first choice is always more resolution - at least until we pass several thresholds. It only makes sense to add colour if the resolution is adequate to the task intended.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here the (later) Atari ST is a great example. It offered a crisp clear 640x400 B&amp;amp;W display at 70 Hz. A feature that did beat many other machines including most PCs, especially considering the price. While the classic Atari ST vs. Amiga rivalry was more on a game level (*6), on a professional level the Atari outsold the Amiga by far (*7).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This highlights the strange beast of assumptions, playing games. That wasn't anywhere near the goal for a Mac. It was supposed for professional usage. Something where programs could display output on screen (almost) as it would be rendered later in print. The same area the ST was successful in as well - in its competition to the Mac it was sometimes dubbed as 'Jackintosh'. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ST is in fact a great example for all of this, as it provided both, clear B&amp;amp;W and (acceptable) colour resolutions. With the B&amp;amp;W mode being a huge USP (price being next) for the Atari. In fact, it made it &lt;em&gt;the&lt;/em&gt; machine for some cash strapped professions. Like notorious under-founded antiquarians. Signum, an editor capable to handle arbitrary scripts and their ways of writing ruled that area way into the 2000s. Not to mention that mathematicians liked it for being able to produce their secret codes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So bottom line, &lt;strong&gt;When there is a choice between resolution and colour, the world always goes for resolution first.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm especially interested in experiences of people who lived through that time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Asking for opinions isn't exactly what RC.SE is meant for)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for myself, I was an Apple II user and switched to PC but always went for more resolution to get more characters on the screen than having colour. Colour was nice and made nice frames, but couldn't beat having a full line of code without scrolling :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Maybe another picture from back then:&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember two guys who got them self a Mac already in March 1984 - that's even before Apple sold the Mac in Germany. They spend the (back then) ridiculous amount of close to 10,000 Mark on the computer and a printer and development software. They were hooked to the idea that the Mac was &lt;strong&gt;the&lt;/strong&gt; future and they would be spearheading software development for this future. They even moved in together into an apartment, which happened to be complete empty, except for two sleeping bags, a desk with the computer and a little board with a cooker. There wasn't any money left for furniture or luxury of living. They took turns on the machine, one sleeping, one programming - or both working together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, they made their way :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, with the basic workings clear, it seems strange at first, why, after ever increasing resolution, the industry added much colour (past classic 4 or 16 of EGA) around 1990 instead of further increasing past 640...800 pixels per line. That is, until we look at the output device. Until then CRT development was mostly a spin off from TV development. Screens and electronics for the likes of more than ~640 pixels per line diverged from general TV technology. Better electronics and finer screen masks where needed, requiring new production machinery, no longer to be shared with TV. A huge investment for a comparably low number of devices to be made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding colour was a way of the computer industry to use the increasing resources (RAM) while still using the same old CRT technology - after all, such a tube doesn't care if it's fed the 640x480 in 4 colours or 256k. And while screens for high resolutions stayed rather expensive, making it more colourful did only require investment in graphic cards. It took many years and widely available cards able to do higher resolution, until screen manufacturers jumped the wagon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The recent development of cheap high resolution flat screens is another example of this scaling effect. 10 years ago it was quite expensive to get anything past 1280x720, nowadays with HDTV 1440 screens that are cheap as dirt and 4k TV it makes even extreme resolutions quite affordable - and that's despite the fact that computer screens are in way higher demand than they where 30 years ago. TV still rules our life :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The basic Apple II B&amp;amp;W resolution is 280x192, but it takes two pixels to produce one coloured pixel. Then again, &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6274/6659&quot;&gt;it's way more complex than that&lt;/a&gt;, as Apple II colour video is unlike any other, so lets stay with 140x192 for now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Or in modern consumer terms, that's 0.175 megapixels vs. 0.027 megapixels - Which would you choose?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The whole question feels a bit like ignoring resolution at all. Sure, we have reached a state where next to every device just has 'enough' - or better more than the eye can separate without help. Just, it hasn't always been that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Using 256 colour model as that's somewhat near to today's expectations. Back then 16 or 4 colour would have been way more appropriate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - &lt;a href=&quot;https://en.wikipedia.org/wiki/Rod_cell&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rods&lt;/a&gt; are what gives us black &amp;amp; white and ... well ... resolution, while &lt;a href=&quot;https://en.wikipedia.org/wiki/Cone_cell&quot; rel=&quot;nofollow noreferrer&quot;&gt;cones&lt;/a&gt; overlay this with rough colour areas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Where the Amiga was clearly better in technical terms, which didn't stop awesome games like Xenon, being first made for the ST. So in reality more a draw, as here the Atari held a 'good enough' position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - That is excluding special areas like Video for the Amiga or Music for the ST.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-29T00:33:47.030" LastActivityDate="2020-05-29T00:33:47.030" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8675" PostTypeId="2" ParentId="8671" CreationDate="2019-01-06T15:04:54.537" Score="10" Body="&lt;p&gt;I was a VAX mainframe sysadmin when I bought my first Mac in 1985.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time we had Apple II computers for some purposes as well as assorted Digital terminals some expensive ones of which had colour, with ASCII and some primitive block character graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;Fat Mac&lt;/em&gt; was amazing with its small screen showing beautiful high-resolution black and white graphics. Nothing matched the crispness of that screen. It was the best personal computer I could buy at the time in terms of sheer computing power and bitmap resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I spent more on it than my car.&lt;/p&gt;&#xA;" OwnerUserId="7730" LastActivityDate="2019-01-06T15:04:54.537" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8676" PostTypeId="2" ParentId="8671" CreationDate="2019-01-06T20:07:37.020" Score="14" Body="&lt;p&gt;I believe the assumptions of the question are wrong. We did not buy the Mac to play games, it was more or less strictly a business machine. Main usage in the beginning around me was creation of printed material including illustrations. Slightly later the laser printer came along making it possible to create camera ready material inhouse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, I could be an exception. At the time (early 1980-s) doing process control software for nuclear power plants in Sweden. We did have special color displays used by the power plant operators, but these were expensive special stuff.&lt;/p&gt;&#xA;" OwnerUserId="7666" LastActivityDate="2019-01-06T20:07:37.020" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8677" PostTypeId="2" ParentId="8493" CreationDate="2019-01-06T23:45:11.223" Score="3" Body="&lt;p&gt;There was a system named Automatic Fingerprint Identification System that used PDP6, PDP8 and PDP11&lt;/p&gt;&#xA;" OwnerUserId="11514" LastActivityDate="2019-01-06T23:45:11.223" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8678" PostTypeId="2" ParentId="8671" CreationDate="2019-01-07T05:46:07.790" Score="13" Body="&lt;p&gt;I personally agree with all of the answers that say something like “High quality bitmapped monochrome displays beat low quality PC color/character graphics.”  E.g. for things like preparing documents for publication - affordable high quality printers were pretty much only monochrome. Why prepare a document that displays colors that cannot be printed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except... I don’t think the market agreed with this. I think that one of the reasons that PCs leapfrogged Macs at this time was color, and slide shows / presentations.  Even with a lousy projector (more like external video), or with a lousy character based printer, color seems to beat monochrome graphics.  As in, the young MBAs who could show a PC slide set with color highlighting the important points impressed more than the MBAs with monochrome slide sets produced on a Mac. The PC spreadsheet with red ink for losses was more persuasive than the printout of a Mac spreadsheet without. The PC MBAs got promoted. The Mac MBAs less so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time I was a student. I thought that a well written monochrome paper or memo was what mattered. I thought that high res drawings - engineering diagrams, CAD - ideally color, but high res greyscale using shading more important than low res color - mattered more than low res color “cartoons”. I did not understand the importance of presentations and slide shows. I thought that slides should just be prepared with a word processing program and different font sizes. (Actually I still believe that - when possible I prepare slides and text documents from the same source. But the SW industry evolved to have separate programs for word processing and presentations. Presentations are important. Arguably more important than word processing.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, this was before PowerPoint. I can’t remember what the slide software was, but I remember fighting with it on Hercules Graphics Adapters (when helping those MBAs).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS learned this lesson, and purchased what became PowerPoint early on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I’m a computer architect (as in, I design computers, CPUs, GPUs, not buildings). At the time, I was desperately interested in how graphics would affect the evolution of computers. I bought Steve Jobs’ argument than high quality monochrome mattered more than color. I spent time designing BitBLT and other hardware support for images with small numbers of bits per pixel: 1 bit/pixel black and white, 4 bpp/16x GrayScale.  I thought that 8bpp grayscale would dominate for a while, and that eventually reasonable color - 16bpp (rgba4, or rgb5), and ultimately 24bpp or 32bpp color would predominate.  I neglected the “ugly” graphics modes like 16 color or 256 color, especially those that required a palette / color LUT.  I was wrong in the short term, even though in the long term “nice” color eventually won out, once we could afford it.  The demand for color was so high that people were willing to live with ugly tricks to get it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I say now that my believing Steve Jobs’s spin about elegant high quality monochrome beating ugly color was one of the biggest mistakes I have ever made as a computer architect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, again, personally I still agree with what Jobs said.  It’s just that the marketplace did not.  Since then, I always ask myself if my personal preferences are blinding me to what the market really wants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;—&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the other answers says that when there is a choice between resolution and color, resolution wins. I am not sure that I am disagreeing with that, as saying that there were several different markets for computer graphics, with different requirements for “good enough” resolution and color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SW development - needs more than 50 character wide displays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Engineering, CAD - needs high res, high DPI. Can live with monochrome, although eventually wants color. Highlight color is good enough, until really good color is available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Business presentations - can live with 40 characters. Color more important than 1024 pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gaming - color on a low res display, even character graphics, more important than high res monochrome. Especially if you can do Amiga like tricks, like delaying scans so that you start displaying in the middle of a character graphics block, and have icons similarly start at boundaries independent of the character block.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;—-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;June 2020 addition:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are a programmer or RTL engineer, do you use syntax highlighting and coloring?  Would you &lt;em&gt;prefer&lt;/em&gt; to have monochrome text when working on your code? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare a single fixed width font with  with bold and slant and color, both background and foreground, to monochrome, proportional, nice fonts. I know the latter &lt;em&gt;looks&lt;/em&gt; more elegant, but which really helps you edit code quicker? (Says I, who used fixed width fonts in emacs back in the day.)&lt;/p&gt;&#xA;" OwnerUserId="11516" LastEditorUserId="11516" LastEditDate="2020-06-03T20:45:34.760" LastActivityDate="2020-06-03T20:45:34.760" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8679" PostTypeId="2" ParentId="8671" CreationDate="2019-01-07T06:28:13.613" Score="3" Body="&lt;p&gt;It was seen as a different kind of computer by the people I knew.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was definitely not a step forward in most ways as a gaming platform, as the Apple II had many games made for it, none of which would run on a Mac, and yes, no color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The crisp display did seem somewhat nice in its way, and there were some interesting strategy games you could play on it such as &lt;em&gt;Balance of Power&lt;/em&gt; or &lt;em&gt;Empire&lt;/em&gt;, but there was a bit of a &quot;what can I play on this?&quot; issue for Apple II gamers.&lt;/p&gt;&#xA;" OwnerUserId="3758" LastActivityDate="2019-01-07T06:28:13.613" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8680" PostTypeId="2" ParentId="8668" CreationDate="2019-01-07T07:10:46.650" Score="8" Body="&lt;p&gt;The laptop you describe is unlikely to be able to support USB ports, for hardware reasons. But there may be an alternative solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first USB standard (&lt;a href=&quot;https://fl.hw.cz/docs/usb/usb10doc.pdf&quot; rel=&quot;noreferrer&quot;&gt;version 1.0&lt;/a&gt;) was published in 1996, but didn't really gain traction in the PC market until version 1.1 was released in 1998. The PCI bus standard had been published in 1992, and by the mid 1990s it was commonplace in new desktop machines (though often with old ISA slots alongside). As such, manufacturers concentrated on developing USB interfaces for the newer, faster PCI bus. It &lt;a href=&quot;https://arstechnica.com/civis/viewtopic.php?t=360908&quot; rel=&quot;noreferrer&quot;&gt;appears&lt;/a&gt; that no USB controller cards were ever developed for the ISA bus. In recent years, an &lt;a href=&quot;https://www.lo-tech.co.uk/wiki/Lo-tech_ISA_USB_Adapter&quot; rel=&quot;noreferrer&quot;&gt;ISA USB adapter&lt;/a&gt; has been developed, but this only allows you to use a USB flash drive as a replacement for a hard drive; it doesn't actually function as a full USB interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relevance for your laptop is this: the PC Card (PCMCIA) standard, as far as version 4, was effectively a portable version of the 16-bit ISA bus. Version 5, also known as &lt;a href=&quot;https://en.m.wikipedia.org/wiki/PC_Card#CardBus&quot; rel=&quot;noreferrer&quot;&gt;Cardbus&lt;/a&gt;, added a 32-bit standard, based on the PCI bus. This predated USB slightly, being published in 1995.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because no USB interface chips had been designed for the ISA bus, PC Card manufacturers would have chosen to make 32-bit (Cardbus) cards using existing PCI-oriented chips, instead of designing their own chips from scratch for a 16-bit card. In the late 1990s, few people would have wanted to spend money on adding USB ports to an old ISA-based laptop: they'd be more likely to use their cash to get a new laptop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To the best of my knowledge, no 16-bit USB interface cards were ever manufactured.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware issues aside, Windows 95 was the first MS operating system to include USB support, as an add-on in the OSR 2.1 version. The implementation is rather basic (with limited &lt;a href=&quot;http://toastytech.com/files/cruzerwin95.html&quot; rel=&quot;noreferrer&quot;&gt;driver support&lt;/a&gt;), and the provision in Windows 98 was much improved. DOS support was much more limited, but support for pendrives improved in recent years, as people doing BIOS updates on newer machines have had to support booting DOS (and the update software) from a USB drive rather than a floppy disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your main requirement is to transfer files to/from your laptop,  you may wish to consider using a CompactFlash card instead. These can be inserted into a 16-bit PC Card slot using a &lt;a href=&quot;https://www.amazon.com/gp/aw/s/ref=is_s?k=compact+flash+pc+card&quot; rel=&quot;noreferrer&quot;&gt;passive adapter&lt;/a&gt;, so would work fine on your laptop. It would be treated by Windows as a regular PC Card. and Windows 95 has built-in drivers that will allow you to read/write the card, and hotplug (insert/eject) it safely. The same may be possible under DOS, but it would require finding DOS drivers for your laptop's PC Card (PCMCIA) controller first.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-01-07T07:10:46.650" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8681" PostTypeId="1" CreationDate="2019-01-07T13:08:06.870" Score="15" ViewCount="641" Body="&lt;p&gt;In a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8614/what-was-the-first-publication-documenting-att-syntax-assembly-language/8615#comment26857_8615&quot;&gt;comment&lt;/a&gt; to an answer about AT&amp;amp;T assembly syntax, &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/10854/another-dave&quot;&gt;another-dave&lt;/a&gt; asked the following:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;DEC used &lt;code&gt;#foo&lt;/code&gt; for an immediate operand in -11 assemblers; the Unix guys apparently preferred &lt;code&gt;$foo&lt;/code&gt;, which to my eyes lacks any mnemonic significance. Similarly &lt;code&gt;@&lt;/code&gt; became &lt;code&gt;*&lt;/code&gt;. Does anyone know the rationale or is this just personal taste?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="740" LastActivityDate="2019-02-03T12:53:41.867" Title="Why does AT&amp;T syntax use * and $?" Tags="&lt;history&gt;&lt;assembly&gt;&lt;unix&gt;&lt;pdp-11&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8682" PostTypeId="2" ParentId="8681" CreationDate="2019-01-07T13:08:06.870" Score="25" Body="&lt;p&gt;The &lt;em&gt;Unix Assembly Reference Manual&lt;/em&gt; by Dennis M. Ritchie, at §8.1 notes that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The syntax of the address forms is identical to that in DEC assemblers, except that ‘‘*’’ has been substituted&#xA;  for ‘‘@’’ and ‘‘$’’ for ‘‘#’’; the UNIX typing conventions make ‘‘@’’ and ‘‘#’’ rather inconvenient.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In a &lt;a href=&quot;https://stackoverflow.com/questions/42244028/what-was-the-original-reason-for-the-design-of-att-assembly-syntax/42250270#42250270&quot;&gt;SO answer&lt;/a&gt;, and in &lt;a href=&quot;https://stackoverflow.com/questions/4193827/questions-about-att-x86-syntax-design?noredirect=1&amp;amp;lq=1#comment78721083_35817580&quot;&gt;this comment&lt;/a&gt;, &lt;a href=&quot;https://stackoverflow.com/users/417501/fuz&quot;&gt;fuz&lt;/a&gt; notes that this is because &lt;code&gt;#&lt;/code&gt; and &lt;code&gt;@&lt;/code&gt; are used as control&#xA;characters by the early TTY drivers in Unix. This is indeed so, with &lt;code&gt;@&lt;/code&gt; taking&#xA;the kill-line function, and &lt;code&gt;#&lt;/code&gt; erases the last character¹.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be seen in &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V1-Snapshot-Development/u7.s#L12&quot; rel=&quot;noreferrer&quot;&gt;the Unix History Repository&lt;/a&gt; at u7.s:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    jsr    r0,cesc; 100 / test for @ (kill line)&#xA;           br canon / character was @ so start over&#xA;    jsr    r0,cesc; 43 / test for # (erase last char. typed)&#xA;           br 1b / character was #, go back&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(100 is the octal code for @, and 43 the octal code for #).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One would expect Unix would have adopted other characters for erase-kill&#xA;processing, since the chosen ones clash with characters used by the assembler.&#xA;But recall that Unix originated in a PDP-7. Erase-kill processing with &lt;code&gt;#&lt;/code&gt; and &lt;code&gt;@&lt;/code&gt;&#xA;was already in PDP-7 Unix, Dennis M. Ritchie in &lt;em&gt;&lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/hist.html&quot; rel=&quot;noreferrer&quot;&gt;The Evolution of the Unix&#xA;Time-sharing System&lt;/a&gt;&lt;/em&gt; notes that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Only a few programs (notably the shell and the editor) bothered to implement erase-kill processing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;which I think correspond to &lt;a href=&quot;https://github.com/DoctorWkt/pdp7-unix/blob/master/src/cmd/ed1.s#L575&quot; rel=&quot;noreferrer&quot;&gt;this code in ed1.s&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    esc: 0                                                                                                                                                                                                                    &#xA;       sna                                                                                                                                                                                                                    &#xA;       jmp i esc                                                                                                                                                                                                              &#xA;       jms putsc; tal                                                                                                                                                                                                         &#xA;       sad o12                                                                                                                                                                                                                &#xA;       jmp 2f                                                                                                                                                                                                                 &#xA;       sad o100                                                                                                                                                                                                               &#xA;       jmp 1f                                                                                                                                                                                                                 &#xA;       sad o43                                                                                                                                                                                                                &#xA;       skp                                                                                                                                                                                                                    &#xA;       jmp i esc                                                                                                                                                                                                              &#xA;       -1                                                                                                                                                                                                                     &#xA;       tad tal                                                                                                                                                                                                                &#xA;       dac tal                                                                                                                                                                                                                &#xA;       and o17777                                                                                                                                                                                                             &#xA;       sad linpm1                                                                                                                                                                                                             &#xA;       jmp 1f                                                                                                                                                                                                                 &#xA;       jmp i esc&#xA;&#xA;    1:&#xA;       lac linep&#xA;       dac tal&#xA;       jmp i esc&#xA;&#xA;    2:&#xA;       lac tal&#xA;       sma cla&#xA;       jmp 1f&#xA;       jms putsc; tal&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and &lt;a href=&quot;https://github.com/DoctorWkt/pdp7-unix/blob/master/src/cmd/init.s#L164&quot; rel=&quot;noreferrer&quot;&gt;init.s&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    rline: 0&#xA;       law ibuf-1&#xA;       dac 8&#xA;    1:&#xA;       cla&#xA;       sys read; char; 1&#xA;       lac char&#xA;       lrss 9&#xA;       sad o100&#xA;       jmp rline+1&#xA;       sad o43&#xA;       jmp 2f&#xA;       dac 8 i&#xA;       sad o12&#xA;       jmp rline i&#xA;       jmp 1b&#xA;    2:&#xA;       law ibuf-1&#xA;       sad 8&#xA;       jmp 1b&#xA;       -1&#xA;       tad 8&#xA;       dac 8&#xA;       jmp 1b&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackexchange.com/users/3010923/mark-plotnick&quot;&gt;Mark Plotnick&lt;/a&gt; notes in a comment that Unix inherited the erase and kill characters from Multics. Following that lead, we can arrive at &lt;a href=&quot;http://multicians.org/M0121.pdf&quot; rel=&quot;noreferrer&quot;&gt;&quot;Remote Terminal Character Stream Processing in Multics&quot;&lt;/a&gt; (1970), which explains that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It should be possible to determine from the printed page,&#xA;  without ambiguity, both what went into the computer pro-&#xA;  gram and what the program tried to print out.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;which is the rationale for using printing characters for erase and kill (recall that back then users typed at teletypes, the typewriter-like ones).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also mentions &lt;em&gt;a special editor on the 7094 Compatible Time-Sharing System&lt;/em&gt; as a prior implementation of the things talked about in the paper, which may or may not refer also to erase and kill. Anyway, that special editor is probably TYPSET (of the TYPSET/RUNOFF workflow²), and it indeed used &lt;code&gt;#&lt;/code&gt; and &lt;code&gt;@&lt;/code&gt; as defaults for erase and kill characters, as mentioned in &lt;a href=&quot;http://web.mit.edu/Saltzer/www/publications/CC-244.html&quot; rel=&quot;noreferrer&quot;&gt;TYPSET and RUNOFF, Memorandum editor and type-out commands&lt;/a&gt; (1964). While &lt;a href=&quot;http://web.mit.edu/Saltzer/www/publications/TRs+TMs/Multics/TR-016.pdf&quot; rel=&quot;noreferrer&quot;&gt;Project MAC Technical Report MAC-TR-16&lt;/a&gt; mentions erase and kill processing in CTSS (figure in page 23, first paragraph in page 24), that report is from a later date, and doesn't mention which characters were used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A little more digging leads us to the CTSS Programmer's Guide, which in its &lt;a href=&quot;https://ban.ai/multics/doc/ctss/CTSS_ProgrammersGuide_1963.pdf&quot; rel=&quot;noreferrer&quot;&gt;1963 edition&lt;/a&gt; uses &lt;code&gt;&quot;&lt;/code&gt; and &lt;code&gt;?&lt;/code&gt; for &lt;em&gt;delete-character&lt;/em&gt; and &lt;em&gt;delete-message&lt;/em&gt; while the &lt;a href=&quot;https://ban.ai/multics/doc/ctss/CTSS_ProgrammersGuide_1966.pdf&quot; rel=&quot;noreferrer&quot;&gt;1966 edition&lt;/a&gt; already gives &lt;code&gt;#&lt;/code&gt; and &lt;code&gt;@&lt;/code&gt;. &lt;a href=&quot;https://ban.ai/multics/doc/ctss/cc-memos/CC-267-1.pdf&quot; rel=&quot;noreferrer&quot;&gt;&quot;Introduction to CTSS Usage&quot;&lt;/a&gt; (July 1967) gives both &lt;code&gt;&quot;&lt;/code&gt; and &lt;code&gt;#&lt;/code&gt; for deleting the previous character, and &lt;code&gt;?&lt;/code&gt; and &lt;code&gt;@&lt;/code&gt; for deleting everything typed since the previous carriage return. So TYPSET may well be the first program to use &lt;code&gt;#&lt;/code&gt; and &lt;code&gt;@&lt;/code&gt;, from where it spread to CTSS, Multics, and eventually Unix.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹ Incidentally, in early Unix &lt;em&gt;as&lt;/em&gt;, as documented in &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/1stEdman.html&quot; rel=&quot;noreferrer&quot;&gt;man11 from the 1st edition of the Unix Programmer's Manual&lt;/a&gt;, there is another&#xA;substitution:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;    Character changes are:&#xA;        for      use&#xA;         @        *&#xA;         #        $&#xA;         ;        /&#xA;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, comments are marked by a slash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;² A nice history of RUNOFF/roff/... can be found at &lt;a href=&quot;https://manpages.bsd.lv/history.html&quot; rel=&quot;noreferrer&quot;&gt;https://manpages.bsd.lv/history.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="740" LastEditorUserId="740" LastEditDate="2019-02-03T12:53:41.867" LastActivityDate="2019-02-03T12:53:41.867" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8686" PostTypeId="2" ParentId="7529" CreationDate="2019-01-07T16:24:05.367" Score="6" Body="&lt;p&gt;For the C64, there's a simple reason (probably among others): Control characters vs. reverse video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two character sets of 256 characters and two fonts of 256 glyphs. Both have the following in common:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The font has 128 glyphs twice, in normal and reversed display&lt;/li&gt;&#xA;&lt;li&gt;The character set on the other hand has quite a few &quot;control characters&quot;, like clear screen, issue newline, change color, and also enable/disable reverse video&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Therefore, a 1:1 mapping simply isn't possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system is however designed in a way enabling you to use your own font, and you can encode it however you like -- a while back, I created a font using the IBM CP-437 encoding, this is quite nice for e.g. on-screen docs.&lt;/p&gt;&#xA;" OwnerUserId="7040" LastActivityDate="2019-01-07T16:24:05.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8687" PostTypeId="2" ParentId="8671" CreationDate="2019-01-07T18:28:33.600" Score="2" Body="&lt;p&gt;The original Macintosh display used about 22Kbytes of RAM--about 17% of the machine's total, leaving about 106K for other things.  Upgrading that to even four-level grayscale or a four-color bitmap would have doubled that requirement, leaving only 84K.  The Apple //e double-high-res mode could support 16 colors using only 16Kbytes of storage, but at lower resolution.  It may have been possible to design a system which used 44K of storage for a display mode that could accommodate full-resolution black and white and half-resolution 242-color graphics simultaneously, with the ability to move objects around on arbitrary horizontal and vertical two-pixel increments, but the design of Quickdraw is predicated on the idea that all pixels may be addressed individually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another point not yet mentioned is that even after the Macintosh II came out with color support, its display performance in color mode was vastly inferior to its performance in black and white mode.  While the Macintosh II's processor was more than twice as fast as the original Macintosh, its display performance in 16 or 256 color mode was for many operations slower.  When the Quadra came out with a display card that supported 24-bit color, the performance of that in 24-bit color mode was even worse, despite the CPU being much faster than its predecessors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Had the original Macintosh tried to support color graphics using the lowly 7.16MHz 68000 the results would probably not have been pretty.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2019-01-08T15:42:26.597" LastActivityDate="2019-01-08T15:42:26.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8688" PostTypeId="2" ParentId="8671" CreationDate="2019-01-07T19:01:58.607" Score="12" Body="&lt;p&gt;As for &lt;em&gt;why&lt;/em&gt; did the Apple II have color and the new Macintosh didn't? Because color wasn't as important as resolution:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;Steve Jobs asserted last January [1985] that no color Mac would surface for a few years at least, until such time as a color equivalent of the LaserWriter was feasible. He contended that color wasn't that important and said the Mac community was far better off working toward higher-resolution monochrome display and reproduction.&quot; (&lt;a href=&quot;https://archive.org/stream/byte-magazine-1985-12/1985_12_BYTE_10-13_Computer_Conferencing#page/n363/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;BYTE magazine, December 1985&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-01-08T23:06:22.627" LastActivityDate="2019-01-08T23:06:22.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8689" PostTypeId="2" ParentId="8671" CreationDate="2019-01-07T21:41:36.000" Score="6" Body="&lt;p&gt;I grew up in the 1980s, and we always had at least 1 computer around. On average, we would buy a new one every 2-3 years. At one time, I believe we had 3 or 4 at once depending on what is counted as a computer. We had an early Mac, but I'm not sure what model it was. It was purchased new, and was expensive at the time. In a lot of ways, it was inferior to our IBM AT/PC compatible. It had a tiny monochrome display, and the memory was limited. It also would not work with any of our other peripherals, including the printer. I believe it had a printer of its own, but I'm not sure exactly which one it was. The Mac was used basically just as a word processor by my older siblings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple Macintosh was based on an earlier model called the Lisa which was released on 1983. The Lisa was very advanced for its time, and some of the features that it had would not be re-introduced to the market until several years later. The list price of the Lisa was $9,995, which was a huge amount of money for a PC, even for the time. Adjusted for inflation, it would roughly be $25,000 in today's money. Because of the price, the sales were poor, only selling 100,000 units.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Macintosh was released the following year to be more competitive with IBM. Under Steve Job's direction, the design was similar to the Lisa, but was a much more tame version. Instead of having 1 MB of RAM, it had 128k, and only had a single 3.5&quot; floppy drive to save cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Macs had a higher resolution than the Apple II. Because of this, the graphics card required more processing power and more memory. At the time the first Macintosh was built, the memory requirements for running with a color display would have been cost prohibitive. The Macintosh was also marketed as a business machine, rather than for games so the color display was not a priority at the time. The Apple Mac lines and Apple II lines actually ran side by side for a long time. Our school still had some IIs in the computer labs right through the mid 90's that ran educational games. They were replaced by Apple LC's and we also had a handful of Power Macs. The Power Macs were primarily used for Photoshop. They also purchased several Windows PCs when the school first got Internet access in around 1995-1996.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be hard for younger folks to understand why the Mac was successful, even with its mediocre display. When it was released, there was not as much of an interest in computers. Fewer than 1 in 10 households owned a PC. Almost nobody even had email, unless they worked for the government, or were a college professor. It would be another 15 years before most people had Internet access. These early computers were primarily used for word processing, and record keeping, and not much else. Most popular games were released for consoles, which were much more affordable than a PC.&lt;/p&gt;&#xA;" OwnerUserId="10510" LastActivityDate="2019-01-07T21:41:36.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8690" PostTypeId="2" ParentId="8671" CreationDate="2019-01-07T22:04:33.237" Score="1" Body="&lt;p&gt;Echoing what others have said, the high resolution of the graphics and shading was a means of compensating for not having color. Again, the cost of these machines meant that most people would likely be using these as business machines and not as games machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a video of the first Mac games...even though it is blurry, you can see that the resolution and detail was far superior to any color computers of the time:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=xd6uhfXGA6A&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=xd6uhfXGA6A&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also worth noting, the NES was released in the US in 1985, so people wanting to play games would also be looking at purchasing that, instead of a Mac or PC.&lt;/p&gt;&#xA;" OwnerUserId="11527" LastActivityDate="2019-01-07T22:04:33.237" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8691" PostTypeId="2" ParentId="99" CreationDate="2019-01-08T03:32:04.860" Score="9" Body="&lt;p&gt;No the LISA wasn't the first. I used a &lt;a href=&quot;https://en.wikipedia.org/wiki/PERQ&quot; rel=&quot;noreferrer&quot;&gt;Three River PERQ&lt;/a&gt; in 1988 for an early AI project/disseration. I acquired it for zero cost as it was obsolete, and I reckon some of it was at least 5 years old as I had to build one working machine from three donors. WikiPedia says it launched in the late 1970s. From memory the original price was GBP27,000 and the single user system was used for CAD and Chemical Engineering. I'd also expect a lot of these systems to turn up in the military, as that was one of ICL's main customers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It had a reasonable GUI and a track pad with a pen/mouse, and a beautiful crisp paper white monitor which was setup in A4 portrait mode. Also weirdly the OS was Pascal based.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assumed this was one of many small manufacturers attempts at getting a commercial WIMP machine into the market?&lt;/p&gt;&#xA;" OwnerUserId="11530" LastActivityDate="2019-01-08T03:32:04.860" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8692" PostTypeId="2" ParentId="172" CreationDate="2019-01-08T10:48:11.353" Score="0" Body="&lt;p&gt;The UK-based Dragon 32 was a close cousin of the Color Computer, and used the &lt;a href=&quot;http://dragon32.info/info/pinouts.html#cartridge&quot; rel=&quot;nofollow noreferrer&quot;&gt;same pinout&lt;/a&gt; as the CoCo 1 on its expansion socket. A small number of games were released in cartridge format for the Dragon. The original manufacturer, Dragon Data, made a floppy disk interface, EPROM programmer, and modem interface for the expansion socket. Third-party manufacturers also produced a selection of expansions. Descriptions and photos of many of these (and other accessories) can be seen on the &lt;a href=&quot;http://archive.worldofdragon.org/index.php?title=Peripherals&quot; rel=&quot;nofollow noreferrer&quot;&gt;World of Dragon&lt;/a&gt; website.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-01-08T10:48:11.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8693" PostTypeId="2" ParentId="7434" CreationDate="2019-01-08T18:36:19.343" Score="5" Body="&lt;p&gt;While I think Troff's answer is very insightful about the environment inside Atari at the time, I think it might have something more to do with how licensing of popular arcade games was handled at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, it was common practice for a company such as Nintendo to sell the rights for a game based on the target platform. For example, Nintendo &lt;a href=&quot;https://en.wikipedia.org/wiki/Donkey_Kong_(video_game)#Licensing_and_ports&quot; rel=&quot;noreferrer&quot;&gt;licensed Donkey Kong&lt;/a&gt; to Coleco for the consoles while Atari received the rights for the home computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it would be wonderful to simply cap the answer at who had the rights, it seems that the playfield is riddled with exceptions. For example, when the &lt;a href=&quot;https://en.wikipedia.org/wiki/Coleco_Adam&quot; rel=&quot;noreferrer&quot;&gt;Coleco ADAM&lt;/a&gt; version of Donkey Kong was released (considered a home computer), the version on that platform was developed by Coleco, not Atari as you would have expected from above. This ended up as a lawsuit raised by Atari and ultimately caused the ADAM version to get pulled, but not before it had already been widely distributed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In regards to Mario Bros., it does seem that the 400/800 and 7800 versions were developed by Atari Corp. while the 2600/5200 (*1) versions were developed by Atari, Inc. Historically, Atari Inc. was the original Atari company that Nolan Bushnell founded while Atari Corp. was the Warner sell-off of the home computer and console division to Jack Tramiel in July 1984.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the timing of the publishers, it would suggest that perhaps Atari didn't have the rights to the home computer versions when the original 5200 port was developed and when they finally did acquire them, they rewrote the game; perhaps the original 5200 code wasn't suitable as a basis for porting to the other home computers? I haven't done a comparison of the game across platforms, but perhaps there is some commonality across the home computer versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*1 - The 7800 wasn't released until after Tramiel took over.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2019-01-08T18:36:19.343" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8694" PostTypeId="2" ParentId="7434" CreationDate="2019-01-08T20:27:32.967" Score="4" Body="&lt;p&gt;Another factor not yet mentioned is that even if Atari had tried to make the 5200 compatible with the 400/800, the 5200 probably wouldn't have been able to usefully handle all games for that platform (at minimum, it would have been difficult to support games that use the keyboard--even if only for initial setup--without building a keyboard into the 5200).  From a customer-support standpoint, having a console support 90% of the games for the Atari 400 would be much more problematical than having it support 0%.  Perhaps a good approach might have been to construct the cartridge slot in a way that existing cartridges for the 400 wouldn't fit without modification, but manufacturers could add a notch to make the cartridges compatible with either the 400 or the 5200, or a projection that would make cartridges fit in the Atari 5200 only, depending upon which machines the code could support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the fact that many Atari 400 cartridges could be made to work on the 5200 by cutting a notch was an &quot;open secret&quot;, people who discovered from magazines or other sources that the 5200 could support the games they wanted might buy a console for that purpose, but the tech support department would be under no obligation to answer complaints that games which were sold for the 400 didn't work on the 5200.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-01-08T20:27:32.967" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8695" PostTypeId="2" ParentId="8668" CreationDate="2019-01-09T02:14:03.007" Score="3" Body="&lt;p&gt;A completely different approach is to find an Ethernet card instead and use any available network resource (like a NAS or a Windows share on another host or the internet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used 3com and xircom cards back then. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use Win95 or a small 486 Linux distribution without &lt;em&gt;too&lt;/em&gt; much elbow grease, and it will probably be the fastest in terms of moving data too.&lt;/p&gt;&#xA;" OwnerUserId="447" LastEditorUserId="447" LastEditDate="2019-01-09T13:53:54.820" LastActivityDate="2019-01-09T13:53:54.820" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8696" PostTypeId="1" AcceptedAnswerId="8830" CreationDate="2019-01-09T08:11:37.953" Score="5" ViewCount="447" Body="&lt;p&gt;I assume one of the first undocumented effects on the VIC-II was the ability to display sprites in the (upper and lower) border area. I wonder how and when this was first discovered and used? Was it in a game, in an intro or a demo?&lt;/p&gt;&#xA;" OwnerUserId="7040" LastActivityDate="2019-01-19T23:38:35.673" Title="When were sprites first displayed in the border area?" Tags="&lt;history&gt;&lt;commodore-64&gt;&lt;video&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8697" PostTypeId="1" AcceptedAnswerId="8722" CreationDate="2019-01-09T08:30:03.650" Score="8" ViewCount="556" Body="&lt;p&gt;In the BESM-6 technical manuals &amp;mdash; for example, in the &lt;a href=&quot;http://www.besm6.org/doc/%D0%91%D0%AD%D0%A1%D0%9C6-%D0%A2%D0%9E-IV-%D0%B0%D1%80%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%BE.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;ALU description&lt;/a&gt;, page 4 &amp;mdash; there is a table specifying min/max/average instruction latencies in clock cycles (the last 3 columns; the clock rate was 9 MHz):&#xA;&lt;a href=&quot;https://i.stack.imgur.com/uWbgG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uWbgG.png&quot; alt=&quot;Latencies of arithmetic operations&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rows are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;Addition, {ACC, Y} := ACC + OP&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;Subtraction, {ACC, Y} := ACC - OP&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;ol start=&quot;5&quot;&gt;&#xA;&lt;li&gt;Reverse subtraction, {ACC, Y} := OP - ACC&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;ol start=&quot;6&quot;&gt;&#xA;&lt;li&gt;Subtraction of absolute values, {ACC, Y} := abs(ACC) - abs(OP)&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;ol start=&quot;7&quot;&gt;&#xA;&lt;li&gt;Negation, ACC := OP &amp;lt; 0 ? -ACC : ACC&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;ol start=&quot;8&quot;&gt;&#xA;&lt;li&gt;Division, ACC := ACC / OP, requires OP to be normalized, otherwise traps.&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;ol start=&quot;9&quot;&gt;&#xA;&lt;li&gt;Multiplication, {ACC, Y} := ACC * OP&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The ACCumulator and the OPerand are in the &quot;simplistic&quot; floating point format: 7 base-2 exponent bits, a sign bit, 40 mantissa bits in 2's complement format.&#xA;All arithmetic instruction except division and negation produce a result with 80 bits of mantissa: the upper bits in the accumulator, the lower bits in the separate Y register. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is, how come the additive operations can take up to 280 clock ticks? Unlike multiplication and division, addition requires equalizing the exponents by shifting the mantissa of one of the operands to the right, 1 bit per cycle; if there was no circuit terminating the equalization early as soon as all significant mantissa bits of the operand with the smaller exponent were shifted away, the process might take up to 127 cycles; but then the actual addition, performed as parallel bitwise 3-to-2 reductions, until no carries are left to reduce, should not have anything left to do. Then, normalization to the left might take up to 128 cycles, for at most 256 plus a handful, when zero with the lowest exponent is added to zero with the highest exponent. Still, quite far from 280.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experiments implementing the algorithm deduced from the documentation show the following statistics, out of 100 million trials each:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Integer addition (equal exponents in the operands, final normalization to the left is disabled):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;min = 5, max = 31, avg = 9.66, median = 9&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, the theoretical maximum would be a shade greater than 40, when adding -1 and 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Completely random floating point addition (arbitrary exponents, arbitrary potentially denormalized mantissas):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;min = 5, max = 169, avg = 51.30, median = 46&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Requiring mantissas of the operands to be normalized:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;min = 5, max = 151, avg = 50.28, median = 45&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further clamping operands to be within approx. 6 decimal orders of magnitude (absolute difference of exponents no more than 21) of each other, quasi-normally distributed:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;min = 5, max = 63, avg = 13.66, median = 13&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, the claim of the average (or, more likely, median) latency being 11 cycles, given an equal mix of integer and floating point additions, is substantiated, but the maximum of 280 cycles is a mystery.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="447" LastEditDate="2019-01-12T22:23:17.923" LastActivityDate="2019-01-12T22:23:17.923" Title="How can floating point addition be so slow on a BESM-6?" Tags="&lt;instruction-set&gt;&lt;performance&gt;&lt;floating-point&gt;&lt;besm-6&gt;" AnswerCount="1" CommentCount="21" ContentLicense="CC BY-SA 4.0" />
  <row Id="8698" PostTypeId="2" ParentId="8671" CreationDate="2019-01-09T09:41:40.743" Score="1" Body="&lt;p&gt;That was not a question at that time. Mainly because both machines didn't address the same kind of users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mac was clearly more professionally-oriented especially in text edition and rendering, and color isn't necessary in that case. Scientists liked the Mac because of the more finest graphics capabilities, and there was then a lot of software that used the good screen definition for rendering functions and alike.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A-II was more a home-computer with basic coloring to enhanced game experience, but many games were not colored and that was not a problem at all. Don't forget that what is important in a game is the gameplay, the experience you have in playing not the rendering. Color wasn't a criterion for choosing a game...&lt;/p&gt;&#xA;" OwnerUserId="11039" LastActivityDate="2019-01-09T09:41:40.743" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8700" PostTypeId="1" AcceptedAnswerId="8701" CreationDate="2019-01-09T14:27:39.060" Score="4" ViewCount="910" Body="&lt;p&gt;The TI-99/4a had a cartridge slot on the front of the computer which accepted &quot;solid state cartridges&quot; (as TI called them).  These cartridges would typically contain ROM (Read Only Memory) like many other cartridges of the time (C64, Atari 800, etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the TI cartridges could also contain a different type of ROM called &quot;GROM&quot;.  Which I believe was &quot;Graphics ROM&quot;.  There was also GRAM, if memory serves, that would be Graphics RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the purpose of this graphics ROM and why was there a need for two types of ROM?  In other words, why not just have one ROM type like everyone else?&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2019-01-09T16:22:33.323" Title="What was the purpose of GROM (vs ROM) in the TI-99/4a?" Tags="&lt;hardware&gt;&lt;rom&gt;&lt;game-cartridge&gt;&lt;ti-99&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8701" PostTypeId="2" ParentId="8700" CreationDate="2019-01-09T15:15:09.560" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;However, the TI cartridges could also contain a different type of ROM called &quot;GROM&quot;. Which I believe was &quot;Graphics ROM&quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Jup, although, it wasn't really related to graphics at all. More due the fact, that its primary usage within the TI99/4 was to hold &lt;strong&gt;G&lt;/strong&gt;PL code - which itself stands for Graphic Programming Language.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There was also GRAM, if memory serves, that would be Graphics RAM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. While the mechanics (standard) was defined by TI, it wasn't until &lt;em&gt;way&lt;/em&gt; later that third-party developers added GRAM. Mainly to make GROM content loadable, so existing GROM application could be copied. Like with the 1985 &lt;a href=&quot;http://www.mainbyte.com/ti99/hardware/gram/gramk.html&quot; rel=&quot;noreferrer&quot;&gt;GRAM Kracker Card&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What was the purpose of this graphics ROM and why was there a need for two types of ROM? In other words, why not just have one ROM type like everyone else?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Most important reason would be address space.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A GROM uses only two byte size addresses within the CPU address space. Even further, multiple GROM can share this address pair (usually 8). One such address pair can support 64 KiB of ROM, either as a single GROM or several in parallel (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;64 KiB is already a ROM size hard to manage in a 16-bit address space without banking(*2). So why not turn this around from a cumbersome calling mechanic into a benefit? The TI 99/4's system also checks 16 such address pairs by default for GROMs, making a whopping 1 MiB of application ROM available. Or more correct 640 KiB (*3), as certain addresses where reserved for OS ROMs, so each address pair could only address up to 40 KiB (*4). So even with the limitation of available chips and reserved address, still almost half a megabyte (480 KiB) could be added to a standard 99/4. Pretty forward thinking for a 1979 machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside, noone keeps any developer from adding GROM at additional address pairs, resulting in an almost unlimited amount of ROMs kept online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast, a regular ROM could only occupy a maximum of 8 KiB within the CPU address space. It's notable that TI also defined a mechanic for cards to do bank switching in this area, by swapping the upper 4 KiB as pages. But there is no cartridge known to use more than two pages for a total of 12 KiB ROM (*5)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Second would be speed&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole TI 99/4 is build around what today would be called a streaming architecture. When accessing some memory like Basic program, Video memory or, well, GROMs, it's always that these 'channels' have integrated address pointers auto-incrementing with each read or write access. For example, the basic fetch loop of an interpreter means just accessing the port and everything else is done by hardware, while with a conventional setup the CPU must fetch a pointer, address the byte in question, increment the pointer and store it again. For the TI 99/4 the streaming system takes care of that. Just fetch the byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And since GROMs where meant to hold code that gets interpreted by some low level code (nowadays called a bytecode interpreter), GROMs offered as well an incredible amount of possible online ROM, as well as faster access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So what did it make?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Application used a combination of either. Some just used the ROM space, maybe with bank switching, others used GROM. After all, when it comes to cartridge based applications, we do talk large numbers produced. So GROM is money-wise quite comparable - but got not only the advantage of (possibly) larger programs, but also an inherent copy protection, as G-EPROMs weren't available and replacement circuits using regular memory rather expensive. In addition, production cost could be a bit lower due to the need for 16 instead of 28 holes to solder the chip. And finally, some used as well both. GROM for the main program and most data, plus a ROM for certain time sensitive routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the system side GROM mechanics were deeply integrated. During startup (*6) all 16 addresses and within each 8 base addresses where checked for a GROM signature to look for system extensions and applications. The later where listed on the start screen to select which to start (*7).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was rather easy to rip GROMs from their cartridges and solder them piggyback to some of the internal GROMs, thus permanently installing useful applications. It is quite common to find File Manager and Extended Basic built into the console. Likewise, Terminal Emulator or Editor/Assembler or other languages. Or users made up their own multi-cartridges. Worked the same way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So bottom line: GROMs where a great idea as part of an incredibly flexible system&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - As usual, reality is cruel to us. While GROM can have any size between 1 Byte and 64 KiB (with two byte addresses - longer addresses could provide more), TI manufactured them only with 6 KiB ones. And they where only made to start at addresses dividable by 2000h, thus only 48 KiB per pair was usable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - At least if one wants to keep some RAM and I/O available&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Funny size, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Which again was limited to 6 KiB per ROM, due the chips manufactured, resulting in 30 KiB usable address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Definitions are made for 16 pages, and extending that scheme may allow up to 2048 pages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Keep in mind, this is a real home computer, so pressing reset to go back to system start was the normal way of handling multiple programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - Unlike other systems of that time, BASIC wasn't &lt;em&gt;the&lt;/em&gt; system, but just an application that could be found and started after reset.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-01-09T16:22:33.323" LastActivityDate="2019-01-09T16:22:33.323" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="8702" PostTypeId="1" AcceptedAnswerId="8703" CreationDate="2019-01-10T02:02:16.490" Score="9" ViewCount="1290" Body="&lt;p&gt;I refer here to 'screen-based programs' that are not actually graphical, but take full advantage of the screen as a two-dimensional array of 80x25 characters, as opposed to typical 'command-line programs' whose output is essentially one dimensional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-DOS provided compatibility for command-line programs. A single binary could run on many different and incompatible computers, provided they all ran MS-DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-DOS did not provide compatibility for screen-based programs. In theory it did but in practice it didn't; the screen display routines provided by the operating system were so slow that we all wrote directly to video RAM instead, which meant our programs would only run on an IBM PC or clone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M was in a sense the precursor of MS-DOS. Did it provide practical compatibility for screen-based programs? Could CP/M versions of programs like VisiCalc and WordStar provide a single binary that would run on any Z80 machine with CP/M, or did they have to be reassembled or modified for each incompatible computer?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-10-02T14:03:16.547" Title="Did CP/M provide compatibility for screen-based programs?" Tags="&lt;cp-m&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8703" PostTypeId="2" ParentId="8702" CreationDate="2019-01-10T02:39:18.410" Score="19" Body="&lt;p&gt;Two-dimensional positioning was not provided by basic CP/M; &lt;a href=&quot;http://www.seasip.info/Cpm/bios.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the BIOS&lt;/a&gt; provides only a single-character console output call, and does not define any control characters. Furthermore, unlike MS-DOS there was never a dominant hardware configuration behind CP/M so going straight to hardware wasn't an option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice programs tended to ship with support for a variety of popular terminals — the Hazeltine, the ADM3a, the VT52, etc — and a setup utility to pick your display type. In implementation terms, that usually didn't require much more complexity than substituting the proper control codes. Programs were supplied as a single binary and small amounts of data were modified by the setup utility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is essentially the same as that solved by the termcap database in UNIX, but with each program providing its own solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A later CP/M extension, GSX, provided hardware-independent graphics display and developed into the virtual device interface underlying GEM, but was far too late to make a substantial impact.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Sample setup, from Turbo Pascal; upon launching TINST the user may configure either the screen or commands (i.e. keyboard control codes):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/l2NVS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/l2NVS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Output support is pretty wide:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KgT54.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KgT54.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of which are supported by the single binary in a single distribution, of less than 132kb in size (including sample programs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Input selection is no more complicated than asking the user to press the keys they want:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yv12r.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yv12r.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It goes on a while — that's just the first screen.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-04-05T17:42:02.877" LastActivityDate="2019-04-05T17:42:02.877" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8704" PostTypeId="1" CreationDate="2019-01-10T05:06:18.857" Score="4" ViewCount="1322" Body="&lt;p&gt;I am trying to write a program in C# that will re-create the type of dithering used in many of the old Sierra and LucasArts games. I have looked up many different dithering algorithms and none seem to be right. It is very simple. It should produce a grid of alternating colors to mimic 256 colors using only 16. Everything is in a square format.&lt;/p&gt;&#xA;&lt;p&gt;I have been trying to use the AForge.NET &lt;a href=&quot;http://www.aforgenet.com/framework/docs/html/64ca6cd2-d802-c1a2-9547-e8b3aa3a5352.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;AForge.Imaging.ColorReduction&lt;/code&gt;&lt;/a&gt; library and I can't get it quite right. I believe the class I want is: &lt;code&gt;OrderedColorDithering&lt;/code&gt;. I've been using that and tweaking the &lt;code&gt;ThresholdMatrix&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;There is sort of a tool that does this inside of SCI Companion, but it's too limited for what I want to do.&lt;/p&gt;&#xA;&lt;p&gt;Here is an example:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Zn31x.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Zn31x.png&quot; alt=&quot;Two versions of a screenshot of Sierra’s The Colonel’s Bequest, with the protagonist standing next to a statue in front of the mansion; the original, dithered version and in ScummVM’s undither mode.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have implemented the code from ScummVM (this is snipped from inside x,y loop):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;col = bmp.GetPixel(x, y);&#xA;&#xA;int closeCol = FindNearestColor(VGACols, col);&#xA;if ((closeCol &amp;amp; 0xF0) &amp;gt; 0)&#xA;{&#xA;    closeCol ^= closeCol &amp;lt;&amp;lt; 4;&#xA;    closeCol = (((x ^ y) &amp;amp; 1) &amp;gt; 0) ? closeCol &amp;gt;&amp;gt; 4 : closeCol &amp;amp; 0x0F;&#xA;}&#xA;&#xA;if (closeCol &amp;lt; VGACols.Length)&#xA;    outBmp.SetPixel(x, y, VGACols[closeCol]);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Using this palette (VGA 256 color mode 13h):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;VGACols[] = {&#xA;    &amp;quot;#000000&amp;quot;, &amp;quot;#0000AA&amp;quot;, &amp;quot;#00AA00&amp;quot;, &amp;quot;#00AAAA&amp;quot;, &amp;quot;#AA0000&amp;quot;, &amp;quot;#AA00AA&amp;quot;,&#xA;    &amp;quot;#AA5500&amp;quot;, &amp;quot;#AAAAAA&amp;quot;, &amp;quot;#555555&amp;quot;, &amp;quot;#5555FF&amp;quot;, &amp;quot;#55FF55&amp;quot;, &amp;quot;#55FFFF&amp;quot;,&#xA;    &amp;quot;#FF5555&amp;quot;, &amp;quot;#FF55FF&amp;quot;, &amp;quot;#FFFF55&amp;quot;, &amp;quot;#FFFFFF&amp;quot;, &amp;quot;#000000&amp;quot;, &amp;quot;#101010&amp;quot;,&#xA;    &amp;quot;#202020&amp;quot;, &amp;quot;#353535&amp;quot;, &amp;quot;#454545&amp;quot;, &amp;quot;#555555&amp;quot;, &amp;quot;#656565&amp;quot;, &amp;quot;#757575&amp;quot;,&#xA;    &amp;quot;#8A8A8A&amp;quot;, &amp;quot;#9A9A9A&amp;quot;, &amp;quot;#AAAAAA&amp;quot;, &amp;quot;#BABABA&amp;quot;, &amp;quot;#CACACA&amp;quot;, &amp;quot;#DFDFDF&amp;quot;,&#xA;    &amp;quot;#EFEFEF&amp;quot;, &amp;quot;#FFFFFF&amp;quot;, &amp;quot;#0000FF&amp;quot;, &amp;quot;#4100FF&amp;quot;, &amp;quot;#8200FF&amp;quot;, &amp;quot;#BE00FF&amp;quot;,&#xA;    &amp;quot;#FF00FF&amp;quot;, &amp;quot;#FF00BE&amp;quot;, &amp;quot;#FF0082&amp;quot;, &amp;quot;#FF0041&amp;quot;, &amp;quot;#FF0000&amp;quot;, &amp;quot;#FF4100&amp;quot;,&#xA;    &amp;quot;#FF8200&amp;quot;, &amp;quot;#FFBE00&amp;quot;, &amp;quot;#FFFF00&amp;quot;, &amp;quot;#BEFF00&amp;quot;, &amp;quot;#82FF00&amp;quot;, &amp;quot;#41FF00&amp;quot;,&#xA;    &amp;quot;#00FF00&amp;quot;, &amp;quot;#00FF41&amp;quot;, &amp;quot;#00FF82&amp;quot;, &amp;quot;#00FFBE&amp;quot;, &amp;quot;#00FFFF&amp;quot;, &amp;quot;#00BEFF&amp;quot;,&#xA;    &amp;quot;#0082FF&amp;quot;, &amp;quot;#0041FF&amp;quot;, &amp;quot;#8282FF&amp;quot;, &amp;quot;#9E82FF&amp;quot;, &amp;quot;#BE82FF&amp;quot;, &amp;quot;#DF82FF&amp;quot;,&#xA;    &amp;quot;#FF82FF&amp;quot;, &amp;quot;#FF82DF&amp;quot;, &amp;quot;#FF82BE&amp;quot;, &amp;quot;#FF829E&amp;quot;, &amp;quot;#FF8282&amp;quot;, &amp;quot;#FF9E82&amp;quot;,&#xA;    &amp;quot;#FFBE82&amp;quot;, &amp;quot;#FFDF82&amp;quot;, &amp;quot;#FFFF82&amp;quot;, &amp;quot;#DFFF82&amp;quot;, &amp;quot;#BEFF82&amp;quot;, &amp;quot;#9EFF82&amp;quot;,&#xA;    &amp;quot;#82FF82&amp;quot;, &amp;quot;#82FF9E&amp;quot;, &amp;quot;#82FFBE&amp;quot;, &amp;quot;#82FFDF&amp;quot;, &amp;quot;#82FFFF&amp;quot;, &amp;quot;#82DFFF&amp;quot;,&#xA;    &amp;quot;#82BEFF&amp;quot;, &amp;quot;#829EFF&amp;quot;, &amp;quot;#BABAFF&amp;quot;, &amp;quot;#CABAFF&amp;quot;, &amp;quot;#DFBAFF&amp;quot;, &amp;quot;#EFBAFF&amp;quot;,&#xA;    &amp;quot;#FFBAFF&amp;quot;, &amp;quot;#FFBAEF&amp;quot;, &amp;quot;#FFBADF&amp;quot;, &amp;quot;#FFBACA&amp;quot;, &amp;quot;#FFBABA&amp;quot;, &amp;quot;#FFCABA&amp;quot;,&#xA;    &amp;quot;#FFDFBA&amp;quot;, &amp;quot;#FFEFBA&amp;quot;, &amp;quot;#FFFFBA&amp;quot;, &amp;quot;#EFFFBA&amp;quot;, &amp;quot;#DFFFBA&amp;quot;, &amp;quot;#CAFFBA&amp;quot;,&#xA;    &amp;quot;#BAFFBA&amp;quot;, &amp;quot;#BAFFCA&amp;quot;, &amp;quot;#BAFFDF&amp;quot;, &amp;quot;#BAFFEF&amp;quot;, &amp;quot;#BAFFFF&amp;quot;, &amp;quot;#BAEFFF&amp;quot;,&#xA;    &amp;quot;#BADFFF&amp;quot;, &amp;quot;#BACAFF&amp;quot;, &amp;quot;#000071&amp;quot;, &amp;quot;#1C0071&amp;quot;, &amp;quot;#390071&amp;quot;, &amp;quot;#550071&amp;quot;,&#xA;    &amp;quot;#710071&amp;quot;, &amp;quot;#710055&amp;quot;, &amp;quot;#710039&amp;quot;, &amp;quot;#71001C&amp;quot;, &amp;quot;#710000&amp;quot;, &amp;quot;#711C00&amp;quot;,&#xA;    &amp;quot;#713900&amp;quot;, &amp;quot;#715500&amp;quot;, &amp;quot;#717100&amp;quot;, &amp;quot;#557100&amp;quot;, &amp;quot;#397100&amp;quot;, &amp;quot;#1C7100&amp;quot;,&#xA;    &amp;quot;#007100&amp;quot;, &amp;quot;#00711C&amp;quot;, &amp;quot;#007139&amp;quot;, &amp;quot;#007155&amp;quot;, &amp;quot;#007171&amp;quot;, &amp;quot;#005571&amp;quot;,&#xA;    &amp;quot;#003971&amp;quot;, &amp;quot;#001C71&amp;quot;, &amp;quot;#393971&amp;quot;, &amp;quot;#453971&amp;quot;, &amp;quot;#553971&amp;quot;, &amp;quot;#613971&amp;quot;,&#xA;    &amp;quot;#713971&amp;quot;, &amp;quot;#713961&amp;quot;, &amp;quot;#713955&amp;quot;, &amp;quot;#713945&amp;quot;, &amp;quot;#713939&amp;quot;, &amp;quot;#714539&amp;quot;,&#xA;    &amp;quot;#715539&amp;quot;, &amp;quot;#716139&amp;quot;, &amp;quot;#717139&amp;quot;, &amp;quot;#617139&amp;quot;, &amp;quot;#557139&amp;quot;, &amp;quot;#457139&amp;quot;,&#xA;    &amp;quot;#397139&amp;quot;, &amp;quot;#397145&amp;quot;, &amp;quot;#397155&amp;quot;, &amp;quot;#397161&amp;quot;, &amp;quot;#397171&amp;quot;, &amp;quot;#396171&amp;quot;,&#xA;    &amp;quot;#395571&amp;quot;, &amp;quot;#394571&amp;quot;, &amp;quot;#515171&amp;quot;, &amp;quot;#595171&amp;quot;, &amp;quot;#615171&amp;quot;, &amp;quot;#695171&amp;quot;,&#xA;    &amp;quot;#715171&amp;quot;, &amp;quot;#715169&amp;quot;, &amp;quot;#715161&amp;quot;, &amp;quot;#715159&amp;quot;, &amp;quot;#715151&amp;quot;, &amp;quot;#715951&amp;quot;,&#xA;    &amp;quot;#716151&amp;quot;, &amp;quot;#716951&amp;quot;, &amp;quot;#717151&amp;quot;, &amp;quot;#697151&amp;quot;, &amp;quot;#617151&amp;quot;, &amp;quot;#597151&amp;quot;,&#xA;    &amp;quot;#517151&amp;quot;, &amp;quot;#517159&amp;quot;, &amp;quot;#517161&amp;quot;, &amp;quot;#517169&amp;quot;, &amp;quot;#517171&amp;quot;, &amp;quot;#516971&amp;quot;,&#xA;    &amp;quot;#516171&amp;quot;, &amp;quot;#515971&amp;quot;, &amp;quot;#000041&amp;quot;, &amp;quot;#100041&amp;quot;, &amp;quot;#200041&amp;quot;, &amp;quot;#310041&amp;quot;,&#xA;    &amp;quot;#410041&amp;quot;, &amp;quot;#410031&amp;quot;, &amp;quot;#410020&amp;quot;, &amp;quot;#410010&amp;quot;, &amp;quot;#410000&amp;quot;, &amp;quot;#411000&amp;quot;,&#xA;    &amp;quot;#412000&amp;quot;, &amp;quot;#413100&amp;quot;, &amp;quot;#414100&amp;quot;, &amp;quot;#314100&amp;quot;, &amp;quot;#204100&amp;quot;, &amp;quot;#104100&amp;quot;,&#xA;    &amp;quot;#004100&amp;quot;, &amp;quot;#004110&amp;quot;, &amp;quot;#004120&amp;quot;, &amp;quot;#004131&amp;quot;, &amp;quot;#004141&amp;quot;, &amp;quot;#003141&amp;quot;,&#xA;    &amp;quot;#002041&amp;quot;, &amp;quot;#001041&amp;quot;, &amp;quot;#202041&amp;quot;, &amp;quot;#282041&amp;quot;, &amp;quot;#312041&amp;quot;, &amp;quot;#392041&amp;quot;,&#xA;    &amp;quot;#412041&amp;quot;, &amp;quot;#412039&amp;quot;, &amp;quot;#412031&amp;quot;, &amp;quot;#412028&amp;quot;, &amp;quot;#412020&amp;quot;, &amp;quot;#412820&amp;quot;,&#xA;    &amp;quot;#413120&amp;quot;, &amp;quot;#413920&amp;quot;, &amp;quot;#414120&amp;quot;, &amp;quot;#394120&amp;quot;, &amp;quot;#314120&amp;quot;, &amp;quot;#284120&amp;quot;,&#xA;    &amp;quot;#204120&amp;quot;, &amp;quot;#204128&amp;quot;, &amp;quot;#204131&amp;quot;, &amp;quot;#204139&amp;quot;, &amp;quot;#204141&amp;quot;, &amp;quot;#203941&amp;quot;,&#xA;    &amp;quot;#203141&amp;quot;, &amp;quot;#202841&amp;quot;, &amp;quot;#2D2D41&amp;quot;, &amp;quot;#312D41&amp;quot;, &amp;quot;#352D41&amp;quot;, &amp;quot;#3D2D41&amp;quot;,&#xA;    &amp;quot;#412D41&amp;quot;, &amp;quot;#412D3D&amp;quot;, &amp;quot;#412D35&amp;quot;, &amp;quot;#412D31&amp;quot;, &amp;quot;#412D2D&amp;quot;, &amp;quot;#41312D&amp;quot;,&#xA;    &amp;quot;#41352D&amp;quot;, &amp;quot;#413D2D&amp;quot;, &amp;quot;#41412D&amp;quot;, &amp;quot;#3D412D&amp;quot;, &amp;quot;#35412D&amp;quot;, &amp;quot;#31412D&amp;quot;,&#xA;    &amp;quot;#2D412D&amp;quot;, &amp;quot;#2D4131&amp;quot;, &amp;quot;#2D4135&amp;quot;, &amp;quot;#2D413D&amp;quot;, &amp;quot;#2D4141&amp;quot;, &amp;quot;#2D3D41&amp;quot;,&#xA;    &amp;quot;#2D3541&amp;quot;, &amp;quot;#2D3141&amp;quot;, &amp;quot;#000000&amp;quot;, &amp;quot;#000000&amp;quot;, &amp;quot;#000000&amp;quot;, &amp;quot;#000000&amp;quot;,&#xA;    &amp;quot;#000000&amp;quot;, &amp;quot;#000000&amp;quot;, &amp;quot;#000000&amp;quot;, &amp;quot;#000000&amp;quot;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The dithering style looks correct; it just doesn't use the right colors. I've cross-referenced my palette and it does appear to be the correct 256 color palette. Any additional info would be appreciated.&lt;/p&gt;&#xA;&lt;p&gt;You can download my full program source here (it does some other cool dithering stuff that does work.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://drive.google.com/open?id=1zCwABhsg-ZSl0ghtuZEzHq-t4Wtxh1i7&quot; rel=&quot;nofollow noreferrer&quot;&gt;Download full C# source and binary&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11548" LastEditorUserId="15334" LastEditDate="2021-05-03T17:16:28.377" LastActivityDate="2021-05-03T17:16:28.377" Title="What was the dithering algorithm used in Sierra and LucasArts games?" Tags="&lt;graphics&gt;&lt;programming&gt;&lt;gaming&gt;&lt;software-development&gt;&lt;dithering&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8706" PostTypeId="2" ParentId="8704" CreationDate="2019-01-10T10:02:16.727" Score="1" Body="&lt;p&gt;Preface, this is not an authorative answer, just from rough memory.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As far as I remember, they used different techniques. For most parts it was a modified colour scheme:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All Rendering was based on pixel pairs&lt;/li&gt;&#xA;&lt;li&gt;With basic colours they are just that colour&lt;/li&gt;&#xA;&lt;li&gt;Diverging colours are made from one pixel of the (closest) base colour and on modifier&lt;/li&gt;&#xA;&lt;li&gt;Modifiers where&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The 'other' colour version (the bright for dim and vice versa)&lt;/li&gt;&#xA;&lt;li&gt;Black&lt;/li&gt;&#xA;&lt;li&gt;Dark Grey&lt;/li&gt;&#xA;&lt;li&gt;Light Grey&lt;/li&gt;&#xA;&lt;li&gt;White&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Position of colour and modifier where swapped between lines&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So basically this resulted in a bit less than 74 colours, not 256.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course, every background was manually modified to fit best :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-01-10T10:02:16.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8707" PostTypeId="2" ParentId="8704" CreationDate="2019-01-10T13:32:04.193" Score="9" Body="&lt;p&gt;SCI games support dithering using any pair of EGA colours; each individual &lt;em&gt;scene&lt;/em&gt; can use up to four palettes of forty colours (one at a time). When dithering, colours are alternated horizontally and vertically; this means that there are 120 unique dithered variants from a colour perspective, plus the sixteen base colours, but in some cases the order will be important so all 256 values can be useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way these are encoded is as follows, at least &lt;a href=&quot;https://github.com/scummvm/scummvm/blob/432fd522d243f0779d2ebf99e8983dbb95cdd175/engines/sci/graphics/screen.cpp#L632&quot; rel=&quot;noreferrer&quot;&gt;as re-implemented in ScummVM&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the base colours are represented using their standard values, between 0 and 15 inclusive;&lt;/li&gt;&#xA;&lt;li&gt;dithered colours, considered as a byte, are exclusive-ored with themselves shifted left by four; the alternating colours are respectively the lower nibble of the result shifted right by four, and the lower nibble of the result.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So for example, colour 215 results in alternating colours 10 and 7.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-01-10T13:32:04.193" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8708" PostTypeId="2" ParentId="8671" CreationDate="2019-01-10T16:51:26.653" Score="-3" Body="&lt;p&gt;The monochrome Macintosh was not entirely without color, due to an external device control technology that allowed programs to send commands via the serial port to an external video playback device, which then displayed color and/or animated images on a separate monitor next to the Macintosh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mid to late 1980's video encyclopedias were released that typically used a HyperCard stack to queue up videos or still images from large LaserDisc optical disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of this on Youtube (not my video): &lt;a href=&quot;https://youtu.be/4iFyLpUW9fk?t=800&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/4iFyLpUW9fk?t=800&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OfEqX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OfEqX.png&quot; alt=&quot;Monochrome Macintosh displaying color video on a separate monitor using a Pioneer LaserDisc player.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early versions of this worked with a special Betamax tape player with serial port control, and the Apple II, but the the user had to wait for the tape to seek to the video to be shown next.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This later version used Pioneer LaserDisc players and 12 inch optical video discs, which allowed instant seeking to video clips, or static display of color images stored as individual frames.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2019-01-10T16:51:26.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8709" PostTypeId="1" AcceptedAnswerId="8710" CreationDate="2019-01-10T17:20:43.363" Score="3" ViewCount="243" Body="&lt;p&gt;Is it possible to get an original DEC pdp-7, if so how much would it be? I've looked around the internet, but I'm not finding anything.&lt;/p&gt;&#xA;" OwnerDisplayName="user11220" LastActivityDate="2019-01-10T21:26:15.203" Title="Is it possible to get a pdp7" Tags="&lt;pdp-7&gt;" AnswerCount="2" CommentCount="6" ClosedDate="2019-01-10T21:54:43.587" ContentLicense="CC BY-SA 4.0" />
  <row Id="8710" PostTypeId="2" ParentId="8709" CreationDate="2019-01-10T17:36:13.603" Score="3" Body="&lt;p&gt;PDP-8 and PDP-11 machines seem to be much more available. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Living_Computers:_Museum_%2B_Labs&quot; rel=&quot;nofollow noreferrer&quot;&gt;Living Computers&lt;/a&gt; museum in Seattle has a PDP-7, which may be running: it would be worth asking them if you could have a login for it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To buy one, start haunting eBay. Price would be unpredictable, and probably quite high for something in running order. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-01-10T17:36:13.603" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8711" PostTypeId="1" AcceptedAnswerId="8714" CreationDate="2019-01-10T21:25:42.343" Score="6" ViewCount="689" Body="&lt;p&gt;The impression I get is that CP/M relied on the BIOS, provided in ROM with the computer, for all the hardware-specific functions. So if you bought CP/M, you didn't have to specify what computer you had; the same discs would run on any computer with a suitable BIOS...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... almost; unlike MS-DOS, CP/M supported multiple CPU architectures including 8080, Z80 and later 68000. So you would have to be sure to get a version suitable for your CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this correct, or was it more complicated than that?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-01-11T00:05:31.023" Title="CP/M SKU per CPU only?" Tags="&lt;cp-m&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8712" PostTypeId="2" ParentId="8709" CreationDate="2019-01-10T21:26:15.203" Score="8" Body="&lt;p&gt;In short: no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.soemtron.org/pdp7.html&quot; rel=&quot;noreferrer&quot;&gt;A well-researched list of PDP-7s sold and their fates is available here&lt;/a&gt; from soemtron.org.  There were approximately 50 PDP-7s manufactured, of which only 4 are still known to exist.  They're all in museums.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2019-01-10T21:26:15.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8713" PostTypeId="2" ParentId="8711" CreationDate="2019-01-10T21:38:33.727" Score="6" Body="&lt;p&gt;It was more complicated.  CP/M disks were generally specific to a particular model of computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the CP/M era a great number of incompatible 8&quot; and 5.25&quot; floppy disk formats were in use by CP/M machines.  There was no guarantee that two Z80 CP/M machines from different manufacturers could read each others' disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if a machine could read another machine's disk format, it likely wouldn't be able to boot CP/M from that disk if the CP/M BIOS was not compatible with that specific machine.  The BIOS is technically part of CP/M, and is different to the BIOS built into the IBM PC and other boot ROMs.  In CP/M parlance, the BIOS was the device driver layer that supported the floppy drive and terminal for a specific machine.  Other than this CP/M was largely platform agnostic and, in principle, you only rewrote the BIOS to support a new platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of these factors, users would usually get an appropriate version of CP/M directly from the manufacturer and seller of their particular computer.  Apple II Z80 cards came with Apple CP/M for Disk II disks.  Kaypro machines came with Kaypro CP/M for Kaypro disks.  And so on.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2019-01-10T21:44:53.283" LastActivityDate="2019-01-10T21:44:53.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8714" PostTypeId="2" ParentId="8711" CreationDate="2019-01-10T21:45:28.680" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The impression I get is that CP/M relied on the BIOS, provided in ROM with the computer, for all the hardware-specific functions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. Usually only a Bootloader is present in ROM. The BIOS is the hardware dependent part of CP/M (*1), loaded from the boot disk. It was the PC who established the rule to have BIOS in ROM by default (*2).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So if you bought CP/M, you didn't have to specify what computer you had; the same discs would run on any computer with a suitable BIOS...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Of course you had. Well, you didn't when buying an already adapted one from your machine's manufacturer. But when buying a genuine CP/M from DR, you received a BIOS example file and had to tweak that to include whatever hardware your machine had.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... almost; unlike MS-DOS, CP/M supported multiple CPU architectures&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So did MS-DOS, including 8086, V20, 80186 and so on.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;including 8080, Z80 and later 68000. So you would have to be sure to get a version suitable for your CPU.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, well, yes in case of 68k, but Z80 (*3) just used the 8080 code. Keep in mind, CP/M-80 (*4) is restricted to only use 8080 code. That way it can boot on any 8080 compatible machines (*5). Machine vendors could (and sometimes did) use instructions specific for their CPU (like Z80) within the BIOS, or applications, but BDOS and CCP was always strict 8080 code (*6).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is this correct, or was it more complicated than that?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Incorrect and, as shown, way more simple :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - CP/M consists of BIOS (hardware dependant OS - today this might be called drivers), BDOS (hardware independent OS) and CCP (command line processor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Or more correct, even &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PC_DOS&quot; rel=&quot;noreferrer&quot;&gt;PC-DOS&lt;/a&gt; kept that structure. When booting &lt;a href=&quot;https://en.wikipedia.org/wiki/IBMBIO.COM&quot; rel=&quot;noreferrer&quot;&gt;IBMBIO.COM&lt;/a&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/IO.SYS&quot; rel=&quot;noreferrer&quot;&gt;IO.SYS&lt;/a&gt; for MS-DOS, DR&lt;strong&gt;BIOS&lt;/strong&gt;.SYS for DR-DOS) was loaded first providing a wrapper around ROM BIOS. This layer was rather thin in the beginning and mostly intended to allow for future extensions - which happened a lot after DOS 2.0, as IBMBIO.COM now contained all basic device drivers. After that, &lt;a href=&quot;https://en.wikipedia.org/wiki/IBMDOS.COM&quot; rel=&quot;noreferrer&quot;&gt;IBMDOS.COM&lt;/a&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/MSDOS.SYS&quot; rel=&quot;noreferrer&quot;&gt;MSDOS.SYS&lt;/a&gt; for MS-DOS, DR&lt;strong&gt;BDOS&lt;/strong&gt;.SYS for DR-DOS) as OS Core was loaded, followed by COMMAND.COM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some MS-DOS machines, like the SIEMENS PC-D, had also only a bootloader in ROM and IO.SYS contained the whole BIOS code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So bottom line: PC-DOS works exactly like CP/M, except that in the beginning most of the BIOS code was already in ROM, so no RAM had to be wasted for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - And other 8080 compatible CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - As it later was called when other CPU architectures where supported.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Given a sufficient BIOS is on disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - One reason why &lt;a href=&quot;http://susowa.homeftp.net/index.php/magazines-mainmenu/morrow-owners-review-mainmenu-143/113-the-wonderful-world-of-zcpr3.html&quot; rel=&quot;noreferrer&quot;&gt;ZCPR&lt;/a&gt; is so hyped - it is Z80 optimized :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-01-11T00:05:31.023" LastActivityDate="2019-01-11T00:05:31.023" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8715" PostTypeId="1" AcceptedAnswerId="8716" CreationDate="2019-01-10T22:34:00.083" Score="8" ViewCount="747" Body="&lt;p&gt;It is well-known that on a sunny day in 1980, when the IBM representatives came knocking on the door of Digital Research, Gary Kildall was still in the air on the way back from visiting another customer, which got the meeting off to a bad start. By the time he got there, his wife Dorothy had objected to signing the one-sided IBM nondisclosure agreement, which further displeased the blue-suited contingent. From the accounts I can find, the third strike came in a subsequent meeting when IBM wanted to purchase CP/M outright for a flat fee and DR insisted on royalties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM subsequently licensed MS-DOS (nee QDOS) from Microsoft in a deal that involved royalty payments and a nonexclusive license; the latter aspect turned out to be consequential indeed. I find it interesting that they gave Microsoft better terms than they were willing to offer DR. Perhaps they liked Microsoft better, perhaps Microsoft being also the vendor of languages had more bargaining power, perhaps word came down from on high that the son of Mary Gates was due some slack, perhaps IBM just realized they were running out of time and options? I haven't been able to find any clear indication of why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am particularly curious though about exactly what deal DR was offered. The phrase 'purchase outright' could be taken as a proposed sale of CP/M in its entirety, but since it was essentially their only product, that would have amounted to a sale of the company, so that sounds unlikely. I'm guessing most likely it would've been the deal Commodore gave Microsoft for what became CBM BASIC 2.0: a perpetual nonexclusive royalty-free license for that particular version. But would it have allowed or involved IBM maintaining it themselves from that point on? Or would they have come back to buy future versions from DR? (Bill Gates hoped Commodore would do that; he didn't count on Jack Tramiel seeing too little value in software.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if it would indeed have been a nonexclusive license, does that mean history would have unfolded essentially as it did in our timeline, just with the PC clones running CP/M instead of MS-DOS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: what exactly were the terms that IBM offered and Digital Research turned down?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Okay, found a dimly-remembered reference at last!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://arstechnica.com/gadgets/2017/07/ibm-pc-history-part-2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://arstechnica.com/gadgets/2017/07/ibm-pc-history-part-2/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;One point Gates carefully stipulated: Microsoft would licence all of this to IBM, not outright sell it to them, and would expect to be paid on a per-copy royalty basis... On November 6 [1980], Microsoft and IBM officially signed the contract, which immediately paid Microsoft $700,000 to begin porting all of this disparate software to the new architecture.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So IBM did pay for the porting work. That makes sense; it would be weird to expect a relatively small company like Microsoft to be completely out-of-pocket on that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the part about Microsoft insisting IBM pay a royalty per copy, flat-out contradicts sources quoted by answers so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That matter is further discussed in answers to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8344/did-ibm-encourage-bill-gates-to-retain-the-rights-over-pc-dos&quot;&gt;Did IBM encourage Bill Gates to retain the rights over PC-DOS?&lt;/a&gt; and while some of those details contradict each other or other sources, the best synthesis looks like: Microsoft tried to insist on royalties, IBM refused (though with a flat fee closer to the $200k they offered DR) but was willing to make the license nonexclusive.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2019-01-11T21:11:27.053" LastActivityDate="2019-01-11T21:39:24.360" Title="IBM would-be purchase of CP/M" Tags="&lt;history&gt;&lt;ibm-pc&gt;&lt;cp-m&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8716" PostTypeId="2" ParentId="8715" CreationDate="2019-01-10T23:05:01.757" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The sticking point: IBM wanted to pay a flat $200,000 license fee to&#xA;get a royalty-free license in perpetuity. Kildall wanted more.&lt;/p&gt;&#xA;&lt;p&gt;Bill Gates came up with a similar operating system. He gave DOS away&#xA;to IBM for $50,000 and figured, correctly, that he could get rich by&#xA;licensing the system to other computer manufacturers.[1]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h1&gt;&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Now, earlier in the year Seattle Computer Products who produced an&#xA;8086 computer kit hired Tim Patterson [sic][2] to create an operating system to&#xA;run on their machine. Digital Research were slow in producing CP/M-86&#xA;and SCP thought it was hurting sales of their computer, so Tim wrote a&#xA;system with the look-and-feel of CP/M for the new machine and called&#xA;it the Quick and Dirty OS, QDOS. SCP started shipping QDOS in August&#xA;and they showed it to Microsoft in September when Microsoft modified&#xA;the BASIC for the machine. So, there right under Microsoft's nose was&#xA;an operating system just at the time when they needed one. In October&#xA;Paul Allen from Microsoft contacted SCP and for just $50,000 bought&#xA;the rights to sell QDOS, without telling SCP that it was for IBM.[3]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h1&gt;&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Gates, Steve Ballmer and Microsoft's Bob O'Rear met with IBM in Boca&#xA;Raton and agreed that Microsoft would coordinate the software&#xA;development process for the PC. According to Allen, under the contract&#xA;signed that November, IBM agreed to pay Microsoft a total of $430,000,&#xA;including $45,000 for what would end up being called DOS, $310,000 for&#xA;the various 16-bit languages, and $75,000 for &amp;quot;adaptions, testing and&#xA;consultation.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;What's notable about this is that IBM apparently was expecting&#xA;Microsoft to ask for more money upfront or at least as for a per-copy&#xA;royalty, but instead Microsoft wanted the ability to sell DOS to other&#xA;companies.[4]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&lt;p&gt;[1] Young, J. (1997, July 7). &lt;em&gt;Gary Kildall The DOS that wasn't.&lt;/em&gt; Retrieved from &lt;a href=&quot;https://www.forbes.com/forbes/1997/0707/6001336a.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.forbes.com/forbes/1997/0707/6001336a.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;[2] The correct spelling is &amp;quot;Paterson&amp;quot; according to the man himself: &lt;a href=&quot;http://dosmandrivel.blogspot.com/&quot; rel=&quot;noreferrer&quot;&gt;http://dosmandrivel.blogspot.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;[3] (1998, 1 August). &lt;em&gt;A Short History of CP/M.&lt;/em&gt; Retrieved from &lt;a href=&quot;http://landley.net/history/mirror/cpm/history.html&quot; rel=&quot;noreferrer&quot;&gt;http://landley.net/history/mirror/cpm/history.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;[4] Miller, M. (2011, August 11). &lt;em&gt;The Rise of DOS: How Microsoft Got the IBM PC OS Contract.&lt;/em&gt; Retrieved from &lt;a href=&quot;https://uk.pcmag.com/opinion/111712/the-rise-of-dos-how-microsoft-got-the-ibm-pc-os-contract&quot; rel=&quot;noreferrer&quot;&gt;https://uk.pcmag.com/opinion/111712/the-rise-of-dos-how-microsoft-got-the-ibm-pc-os-contract&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-11T21:39:24.360" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8717" PostTypeId="2" ParentId="8715" CreationDate="2019-01-10T23:23:14.643" Score="2" Body="&lt;p&gt;To my knowledge there was never an intention by IBM to 'purchase' CP/M. They planned the same deal as with &lt;strong&gt;any&lt;/strong&gt; other package, OS, language or application, they acquired to be available under their brand at system introduction:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A single, non exclusive, one time license fee, independent of sales figures or time.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This strategy is quite understandable, considering that IBM wasn't sure about the success of the PC. A one time payment also did fit quite well IBMs internal project accounting structure, as it could be booked like a purchase .. one of the usual strange effects of a large company:))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For CP/M this almost was changed, as the OS was seen by IBM as a must as only machine independent OS within the capabilities of the PC, promising easy conversion of customers from other systems due compatibility. The often cited NDA was only a minor issue, and they where already about to give in, when Mr. Gates made his pitch. And the rest is history.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-01-11T03:28:09.037" LastActivityDate="2019-01-11T03:28:09.037" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8719" PostTypeId="1" CreationDate="2019-01-11T00:29:30.557" Score="14" ViewCount="1014" Body="&lt;p&gt;Consider this - I have made a file called test.bin on a Windows machine.  It is exactly 256 bytes long, and contains nothing more than &lt;code&gt;00&lt;/code&gt; to &lt;code&gt;ff&lt;/code&gt; in each byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would happen if I transferred this file to a CP/M system?  (in fact this is exactly what I am trying to do).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the CP/M end of file marker is control-Z or &lt;code&gt;1A&lt;/code&gt; in hex, will CP/M think that my 256 byte file stops when it gets to byte &lt;code&gt;1A&lt;/code&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would have thought that hex &lt;code&gt;1A&lt;/code&gt; can appear all over the place in binary files such as executable COM files.  How is it that CP/M uses this for an end of file marker without constantly truncating files early?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is usage of control-Z at end of file a hard rule across CP/M - i.e. do all files have this as an end of file marker?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is control-Z actually enforced by the operating system in any way, or is it simply a convention?&lt;/p&gt;&#xA;" OwnerUserId="11442" LastEditorUserId="4025" LastEditDate="2019-01-17T06:42:41.123" LastActivityDate="2019-01-17T06:42:41.123" Title="In CP/M, how does control-Z (hex 1a decimal 26) not interfere with ordinary file storage?" Tags="&lt;cp-m&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8720" PostTypeId="2" ParentId="8719" CreationDate="2019-01-11T00:37:58.050" Score="21" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What would happen if I transferred this file to a CP/M system?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Depends on your transfer utility and how it handles the data presented.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Since the CP/M end of file marker is control Z or 1A in hex, will CP/M think that my 256 byte file stops when it gets to byte 1A?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, at least not the OS itself. CP/M does not handle CTRL-Z (or any content) specially. Your file transfer utility may do so.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is controlZ actually enforced by the operating system in any way, or is it simply a convention?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it doesn't enforce anything. So it is a convention among text-based utilities.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How do I know when I have got to the end of the end of an executable file?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(from a comment)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't. At least not at byte level. Loading an executable is always done up to the next 128 byte record.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The long read&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M, up to and including 2.2 did not maintain a bytewise file length in its metadata (directory extent). Length was only noted as the number of 128 byte records of the last extent. At DOS level read and write operation were always record based i.e. in 128 byte chunks (*1). While there was a function to calculate file size, it only worked with 128 byte granularity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To allow termination of a file holding ASCII data, CTRL-Z was used as an end marker within the last record. All text oriented utilities followed that scheme. But there is no hard provision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M 3.0 utilized a previously unused directory extent byte to note the bytes used within the last record. For compatibility a value of 128 is noted as zero. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Random access could operate at byte level, but the 128-byte record granularity was still to be observed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2019-01-11T10:23:26.793" LastActivityDate="2019-01-11T10:23:26.793" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8722" PostTypeId="2" ParentId="8697" CreationDate="2019-01-11T02:36:45.413" Score="4" Body="&lt;p&gt;Compiling details pointed to in the comments by @secondperson and my own findings:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears that the documentation is inaccurate. There are apparent typos and/or transcription errors. For example, the max. latency of the negation operation cannot be 25, as the operation involves negating a 40-bit 2's-complement value, which requires up to 40 clock cycles for carry propagation, and, as well as in all other arithmetic operations, there is an optional normalization of the result, which could take up to 127 clock cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The greatest latency of approx. 259, is achieved by adding two numbers with zero mantissas, one with the exponent field set to 0177 (corresponding to 2&lt;sup&gt;63&lt;/sup&gt;), the other with the exponent field set to zero (corresponding to 2&lt;sup&gt;-64&lt;/sup&gt;). Equalizing the exponents and attempting normalization take ~127 clock cycles each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is notable that in all cases of non-trivial operands, requiring actual multi-cycle carry propagation, the latency of the addition instruction as a whole will be substantially less than 260.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus it is likely that the max. latency intended to be printed was 260, which is close enough graphically to 280, and the difference was inconsequential for no one to notice. A more glaring case of the max. latency of the negation instruction was not taken care about either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A curious case had been observed: adding 0 with the max. exponent 63 and -1 with the min. exponent -64 (-1*2&lt;sup&gt;-64&lt;/sup&gt; == -5.42⏨-20) takes 211 cycles, and produces, after replicating the sign bit to all 80 mantissa bits during the 127 steps of exponent equalization and subsequent normalization of these 80 bits, the value of -1*2&lt;sup&gt;63-80&lt;/sup&gt; == -7.63⏨-6. &lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2019-01-11T02:36:45.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8723" PostTypeId="1" AcceptedAnswerId="8729" CreationDate="2019-01-11T16:54:46.903" Score="7" ViewCount="467" Body="&lt;p&gt;I'm not sure I've entirely formed the idea in my head, but I'll ask anyway...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the things I learned here in RO is that the BBC gained speed by using faster RAM, thereby avoiding cycle stealing during video refresh. IIRC, this resulted in ~30% better performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is whether it would be possible to get the same performance boost using solutions that were available earlier and were cost effective at that time, that is, the ~1981 time frame.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I assume dual-ported RAM would allow this, but was this widely available and cost competitive? Could one have a small section of dual-port and then a larger bank of &quot;normal&quot; RAM without issue?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;could one mix high- and low-speed parts on a single bus? Do the refresh requirements change as well, and would that preclude such solutions?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;something else I haven't thought of?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-05-28T09:11:21.170" Title="Could a 6502 use different speeds of RAM in a single machine?" Tags="&lt;graphics&gt;&lt;6502&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8724" PostTypeId="1" CreationDate="2019-01-11T18:23:03.840" Score="3" ViewCount="722" Body="&lt;p&gt;Although it would have absolutely beaten the hardware to death, did anyone ever try to write a graphics driver for daisy wheel printers that would use the period symbol to painstakingly construct a graphical image, using micro-step platen and printhead movements?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to the speed limitations of the printhead solenoid, such an image would likely have taken 10 times longer to produce than on a 9-pin dot matrix printer, and there is the possibility of damaging the period symbol by over-flexing the wheel support arm. It would be prohibitively expensive with single-use carbon ribbons, and might damage looped fabric ribbons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But... was it possible and did anyone ever do this?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2019-01-13T00:29:00.013" Title="Daisy wheel graphics using the period?" Tags="&lt;graphics&gt;&lt;printer&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8725" PostTypeId="2" ParentId="8724" CreationDate="2019-01-11T18:37:31.367" Score="2" Body="&lt;p&gt;Depends on the printer. Also keep in mind, daisy wheel printers aren't anything from before dot matrix, but rather of the same time frame, in general even later. Dot matrix ruled the 70s, while daisy wheels did had their peak during the 80s, until laser took off.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;To start with, not every daisy wheel printer could be positioned (or fed) in size of a dot.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next, wear would be outrageous&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A way better and faster printing would be done using more symbols&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Similar, using density of types and multiple strikes produce a way better picture&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And last but not least, who would waste much time to write a driver to wear down a very expensive printer when a cheap dot matrix printer could do a better job?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Having said this, of course have type based printers used for (simple) graphs and drivers have been available, usually in fixed pitch mode.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-01-13T00:29:00.013" LastActivityDate="2019-01-13T00:29:00.013" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="8726" PostTypeId="2" ParentId="8724" CreationDate="2019-01-11T19:05:41.697" Score="8" Body="&lt;p&gt;I used to have a Diablo 630 DWP saved from the dump. This did produce nice graphics using a dot character and micro spacing together with my AT compatible of that time. The whole procedure was, however, not very friendly to both ribbon and paper as you say, you had to reduce wheel impact (by retracting the solenoid) as much as possible to save both from early retirement, and you wanted to use your most faded (fabric) ribbons for that torture. If I remember right, it took several hours to print a 630x350 EGA picture with 4x4 (or 2x2? can't remember) dithering. 300 Baud serial didn't help that much on print speed as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could set the horizontal motion index in 1/120&quot;, and the vertical VMI in 1/48&quot;, which only allowed printing of pictures turned around by 90°.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-01-11T19:22:48.073" LastActivityDate="2019-01-11T19:22:48.073" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8727" PostTypeId="2" ParentId="8724" CreationDate="2019-01-11T21:10:01.687" Score="5" Body="&lt;p&gt;Yes - when at school I wrote a program for the Amstrad PCW that would do this. It's available for download as DSHOWSEA.COM from &lt;a href=&quot;http://www.seasip.info/Cpm/software/amstrad.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.seasip.info/Cpm/software/amstrad.html&lt;/a&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only test I ran was on my geography master's printer: a simple drawing of rectangles. With the dots at their closest spacing, it chewed up the paper rather.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2019-01-11T21:10:01.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8728" PostTypeId="1" CreationDate="2019-01-11T21:21:18.173" Score="4" ViewCount="364" Body="&lt;p&gt;The Video Display Processor (VDP) of the TI-99/4A was capable of displaying 32 hardware sprites.  These sprites were unusable with the default, built-in BASIC that TI provided.  However, an enhanced BASIC (Extended BASIC) was available that provided much needed support for the TI's hardware.  Including sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But for some reason, you could only work with 28 sprites instead of the maximum of 32.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what was the reason behind this?  Was this another ploy by Texas Instruments to cripple what home users could do in an attempt at selling more &quot;TI Branded&quot; software?&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2019-01-12T01:17:38.007" Title="Why did Extended BASIC on the TI-99/4A only allow 28 of the 32 sprites?" Tags="&lt;basic&gt;&lt;sprite&gt;&lt;ti-99&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8729" PostTypeId="2" ParentId="8723" CreationDate="2019-01-11T21:34:11.743" Score="9" Body="&lt;p&gt;As to the headline question: yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Acorn Electron, a convenient example because it's a BBC relative, proves this after a fashion. ROM is accessed at 2Mhz. The supplied RAM, which is shared with video, is accessed at at most 1Mhz. This is effected by slowing the CPU's clock based on its access destination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A modification to the machine was to replace the low 8kb of address space with RAM that didn't sit behind the ULA. So it was no longer available for video but could now be written to and read by the CPU at 2Mhz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So at that point you had a 6502 that didn't just access some areas of memory more quickly than others, but used two observably different speeds of RAM in the same machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Re: refresh, that counteracts leakage. So refreshes must occur within an absolute amount of real-world time. It's independent of the access speed the RAM is being used at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, the 6502's fixed memory access cadence obviated any need for dual-port RAM in its class of machines. It was always the case that you'd see half a cycle in which the 6502 was bus master and then half a cycle in which it wasn't. So the best solution for frictionless dual access on a 6502 machine is just to have video control the bus every other half cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC does this, as did the Apple II a few years before, and later machines like the Oric. Where bandwidth was insufficient with that access pattern, doing what approximately amounts to using a 16-bit bus for graphics fetching was an option: that's what the Apple IIe does in 80-column mode. Within each video access window it simultaneously fetches bytes from two physically different 8-bit portions of memory.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-01-11T21:34:11.743" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8731" PostTypeId="2" ParentId="8728" CreationDate="2019-01-12T01:17:38.007" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But for some reason, you could only work with 28 sprites instead of the maximum of 32. So, what was the reason behind this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;One reason may have been space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of the 16 KiB RAM, build-in TI-BASIC uses 2 KiB for screen handling (including 80 bytes line buffer) (*1), leaving a bit less than 12 KiB for programm and data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Extended BASIC it is essential to be able to support programs of similar size as with TI-BASIC - this includes the ability to load (old) TI-BASIC programs. Thus memory requirement should at best not exceed what has been set by TI-BASIC. At the same time it needs memory to hold additional data like:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sprite attributes table&lt;/li&gt;&#xA;&lt;li&gt;Sprite motion table     |&lt;/li&gt;&#xA;&lt;li&gt;Some system data area&lt;/li&gt;&#xA;&lt;li&gt;An extended crunch buffer&lt;/li&gt;&#xA;&lt;li&gt;And a new edit buffer for the improved editor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of this would have end up at ~500 Bytes less memory available. By reducing the the character table (*2) as well as the sprite tables this was reduced to ~300 bytes. In addition some data areas (like line symbol table) wouldd be moved into RAM expansion if present.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while it seams little, it's safe to assume that they tried hard to reduce the memory footprint.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was this another ploy by Texas Instruments to cripple what home users could do in an attempt at selling more &quot;TI Branded&quot; software?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Another ploy? Like a secret conspiration? Serious, why on earth should TI do so? &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Plus another ~2KiB for file buffers when a disk unit is installed (more with number of files set above 3)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Extended BASIC reduced the available glyphs by 16 to 30..143.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-01-12T01:17:38.007" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8732" PostTypeId="1" AcceptedAnswerId="8736" CreationDate="2019-01-12T01:51:00.283" Score="4" ViewCount="575" Body="&lt;p&gt;For many years in the mid-to-late twentieth century, user-facing computing consisted primarily of serial terminals attached to mainframe and minicomputers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the eighties and even as late as the early nineties, I came across multiuser systems consisting of an x86 PC attached to a few serial terminals, the justification for this being that it saved money. This implies that serial terminals were cheaper than PCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I also remember ads in Byte magazine for products that would let you substitute a PC for a DEC terminal; one of them had a headline something along the lines of 'These are the people who cheated DEC out of $$$.' This implies that serial terminals were more expensive than PCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conjecture: the difference was in the brand name. IBM and DEC sold terminals containing a few hundred dollars worth of hardware, for a few thousand dollars.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How much did a non-brand-name serial terminal cost? For a specific year, say 1980, or as close to it as data is available.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-06-02T03:09:43.747" Title="How much did a serial terminal cost?" Tags="&lt;terminal&gt;&lt;cost&gt;" AnswerCount="5" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8733" PostTypeId="2" ParentId="8732" CreationDate="2019-01-12T02:15:49.657" Score="6" Body="&lt;p&gt;Not sure about 1980, but in the early 80's my first job was with a small software company that wrote an accounting package that ran on Unix and MS-DOS systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our preferred terminal for the Unix systems was Liberty Freedom 110, 200, or Freedom ONE terminals. The Freedom terminals emulated several different terminals, such as Wyse 50, ADM 3A, and its own native scheme. It was fairly robust, and I recall writing the termcap/terminfo entries for its native mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this data sheet on the web from 1986:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/datapro/alphanumeric_terminals/Datapro_C25_Liberty.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://bitsavers.informatik.uni-stuttgart.de/pdf/datapro/alphanumeric_terminals/Datapro_C25_Liberty.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Freedom ONE - $449&#xA;Freedom 110 - $545&#xA;Freedom 200 - $595&#xA;Freedom 220 - $745&#xA;Amber screen option - $25&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;PC's cost more than these terminals. At the time, the benefit of using a PC as a terminal emulator was of course that you could use it as a PC also... running the killer apps like Lotus 1-2-3, while still running the &quot;green screen&quot; apps in the emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once TSR (terminate-and-stay-resident) utilities became popular, I also recall a terminal emulator that ran as a TSR and you could flip back and forth between the emulator and whatever else you had running with a key combo. Our users really liked that.&lt;/p&gt;&#xA;" OwnerUserId="4213" LastActivityDate="2019-01-12T02:15:49.657" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8734" PostTypeId="1" AcceptedAnswerId="8747" CreationDate="2019-01-12T04:15:54.710" Score="10" ViewCount="274" Body="&lt;p&gt;Somewhere around 1980, I heard about PDP-11 systems that had side-panels designed by &lt;a href=&quot;http://articles.latimes.com/1986-09-20/news/mn-11561_1_fine-art&quot; rel=&quot;noreferrer&quot;&gt;Corita Kent&lt;/a&gt; (a nun and pop artist, who amongst other things designed &lt;a href=&quot;http://hometown-pasadena.com/wp-content/uploads/2015/01/Corita_Kent_USPS_Love_Stamp.jpg&quot; rel=&quot;noreferrer&quot;&gt;a stamp&lt;/a&gt; for the US post office, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Rainbow_Swash#/media/File:Boston_gas_tank.JPG&quot; rel=&quot;noreferrer&quot;&gt;gas storage tanks&lt;/a&gt; along the Boston southeast expressway). And in fact there's a &lt;a href=&quot;https://corita.org/contact/&quot; rel=&quot;noreferrer&quot;&gt;picture of an installation&lt;/a&gt; at the Corita Kent web site. It looks like a PDP-11/23 to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time I first heard of these, I think they were cynically described as &quot;Gordon Bell's contribution to the arts&quot;.  The photo accords with my memory: computer with side-panels, desk side-panel(s), wall-hanging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But my question is: were any of these actually sold? How many?&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-01-13T04:01:18.897" Title="Were any PDP-11 systems with Corita Kent side-panels actually sold?" Tags="&lt;pdp-11&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8735" PostTypeId="1" CreationDate="2019-01-12T05:47:49.530" Score="1" ViewCount="215" Body="&lt;p&gt;I had an idea and wanted to hear if there are any major technical obstacles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine any vintage computer with either a serial port or a parallel port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vintage computer is connected via that cable to a PC (or Raspberry PI or any machine with a serial/parallel port). It would need to be a &quot;laplink&quot; cable in the case of parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the PC side there is a server application written in Python that emulates a CP/M disk controller &amp;amp; drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M and disk blocks are loaded via the cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The initial boot loader would be very small and would need to be loaded via cassette or if small enough, entered as machine code.  The initial boot loader would have enough code to request data from the parallel port to get itself up and running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone have any thoughts on this?  Does it seem like a feasible idea? The general idea being to build a server that provides disk functionality to essentially any machine with a serial or parallel port, allowing anyone with a parallel crossover or serial cable to run CP/M.&lt;/p&gt;&#xA;" OwnerUserId="11442" LastEditorUserId="11442" LastEditDate="2019-01-12T05:53:40.703" LastActivityDate="2019-01-12T17:36:48.047" Title="How viable is a universal PC parallel/serial connected CP/M disk controller/drive?" Tags="&lt;cp-m&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8736" PostTypeId="2" ParentId="8732" CreationDate="2019-01-12T13:11:10.467" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] an x86 PC attached to a few serial terminals, the justification for this being that it saved money. This implies that serial terminals were cheaper than PCs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Of course, as a Terminal is a way less complicated setup than a PC. Usually just one board instead of several as well as cheaper components. An 8-bit CPU with a few kilobytes of RAM and a simple character based CRTC will do the trick, vs. a full figured PC with expensive casing, large PS, an expensive 16-bit CPU, versatile video controllers and lots of RAM - plus boot media and so on. It's a bit like a home computer vs. a PC. Except terminals used even less (but better) parts than home computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But a terminal is not only cheaper in terms of one time, upfront cost, but as well in operations. No hassles with media, including media failure, hardware variations or software maintenance and update - not to mention whatever stupid changes in configuration the user did against company standards.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But I also remember ads in Byte magazine for products that would let you substitute a PC for a DEC terminal; one of them had a headline something along the lines of 'These are the people who cheated DEC out of $$$.' This implies that serial terminals were more expensive than PCs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. This sounds much like they just compare their software price vs. the price of a terminal, assuming the customer already owns a PC. Maybe true for small business, just not in general. Such advertisement also relays on the misleading impression a terminal is hardware that can be replaced by software. For one, a terminal does include quite some software - much the same as being offered here - but also, the appraised software would need some hardware - here not only the batteries are sold seperately :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Conjecture: the difference was in the brand name. IBM and DEC sold terminals containing a few hundred dollars worth of hardware, for a few thousand dollars.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While brands did call a cosy price, there was as well a stiff competition - even more so during the 1980s, when hardware for a terminal was no challenge anymore - keeping the price down.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How much did a non-brand-name serial terminal cost? For a specific year, say 1980, or as close to it as data is available.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mentioning a PC in the ad (a link would have been nice) does point way past 1980, doesn't it? For 1980 the competition are not as many machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there's a great example (of 1982), to show the cost difference between a Desktop Computer (PC) and a similar capable terminal:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The Tandy Model III vs. the Tandy DT-1&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DT-1 which is basically the same machine as the Model III. Same hardware, PS, screen and case, with the RS232 board installed and a terminal software in ROM. It could  as well be configurable within reason. It was meant to work with the Model II (or 16) multi user system, but could be uses with any other system as well, as it did emulate several standard terminals. In the second catalogue of 1982 &lt;a href=&quot;http://www.radioshackcatalogs.com/html/catalogs_extra/1982_rsc-07/hr024.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;it was advertised at 699 USD&lt;/a&gt; - which is incidentally the &lt;a href=&quot;http://www.radioshackcatalogs.com/html/catalogs_extra/1982_rsc-07/hr004.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;exact same price as the lowest possible Model III&lt;/a&gt; with 4 KiB (!) RAM and Level 1 BASIC in ROM. This version was offered only for a rather short time, as it was meant as replacement for the no longer available Model 1. It was intended to keep the entry level price below 700 USD, as the regular minimum Model III with 16 KiB RAM and Model III BASIC was priced at 999 USD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To work as a terminal that minimum Model III would need an additional RS232 board at 99 USD and a terminal software sold at 39.95 USD, except, that software required 16 KiB of RAM, so another 99 USD for 16 KiB expansion ... oh, and of course a cassette recorder at 59.95 (and cable at 5.95) to even load the program, totaling at 1,002.85 USD (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I hardly would call this configuration a PC. More reasonable that describes a &lt;a href=&quot;http://www.radioshackcatalogs.com/html/catalogs_extra/1982_rsc-07/hr006.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Model III with 48 KiB and at least one disk drive&lt;/a&gt; - right? Now, that's more like 2,100 USD (1995 USD + 99 USDfor the RS232), or 2495 for dual drives and RS232 included.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So bottom line, even when taking the lowest possible configuration, a comparable terminal is already cheaper than a PC doing the same (~2/3rd as in 700 vs. 1,000 USD)- even more so when using a serious PC configuration (~1/4th as in 700 vs 2,500 USD).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, other terminals where at that time (1982) in the same price region of 500..1000 USD. Even less when buying bulk - so way lower than any serious PC.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-06-02T02:22:02.340" LastActivityDate="2019-06-02T02:22:02.340" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8737" PostTypeId="2" ParentId="1858" CreationDate="2019-01-12T13:30:44.040" Score="2" Body="&lt;ol&gt;&#xA;&lt;li&gt;The Soviet system was a system of administrative competition. What and how to copy, was decided during the interaction of groups of influence.&lt;/li&gt;&#xA;&lt;li&gt;Personal factor mattered. The x86 and Zilog architectures did not have significant support in Moscow (where they loved PDP-11) and were copied out of need and a residual principle.&lt;/li&gt;&#xA;&lt;li&gt;There were several ministries (prone to autarky within themselves, up to and including NIH syndrome) dealing with microprocessors and electronics in general.&lt;/li&gt;&#xA;&lt;li&gt;8080 and 8085 processors copied primarily in Kiev.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2019-01-12T13:30:44.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8738" PostTypeId="2" ParentId="8732" CreationDate="2019-01-12T14:45:53.733" Score="4" Body="&lt;p&gt;To the question in the title (&quot;How much...?&quot;), the  answer is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://terminals-wiki.org/wiki/index.php/DEC_VT220&quot; rel=&quot;nofollow noreferrer&quot;&gt;$1395&lt;/a&gt; for a DEC VT220 in 1983.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-01-12T14:45:53.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8739" PostTypeId="2" ParentId="8542" CreationDate="2019-01-12T15:57:20.213" Score="2" Body="&lt;p&gt;The begin of the basic area is set in the addresses 43/44, the default value is 01 and 08, which means a start address of $0801 = 2049. The end of the basic area is in addresses 55/56, default values are 160 and 0, meaning $A000 = 40960. 40960 minus 2049 is 38911, the value that is also reported at the startup screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The byte before the basic area must contain a value of 0 so that the BASIC program can be run, that is why 2048 is used for that and BASIC starts at 2049 (2047 could not be used as the zero-holder, since it is already in use as a sprite costume pointer). Entering RUN when the byte before the BASIC area is not zero results in a SYNTAX ERROR message, because the RUN command sets the current character pointer (addresses 122/123) to the start of the BASIC area minus one. The basic interpreter then sees a zero, which tells it that a new line starts here.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2019-01-12T21:14:39.763" LastActivityDate="2019-01-12T21:14:39.763" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8740" PostTypeId="2" ParentId="8735" CreationDate="2019-01-12T17:36:48.047" Score="3" Body="&lt;p&gt;CP/M consists of two parts.  The BDOS and the BIOS.  In modern terms BDOS can be rougly compared to the operating system like Windows and Linux, and the BIOS compared to a collection of hardware drivers which the operating system uses to talk to the hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what you are proposing is to implement a driver in the BIOS which instead of talking to a disk controller talks to a serial or parallel port.  For CP/M-2.2 this is done with 128 byte sectors (if I recall correctly) and is quite simple.  (The usual complexity of the disk driver in BIOS was to handle that most disks had a different sector size).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not a hard task but a bit time consuming.  It would require you to write a port driver and some mapping code in machine code.  You need either to disassemble the current BIOS or get the source code for it, and then add your new code.   I would suggest creating a test scaffold to test it during development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When done build a new image (SYSGEN if I recall correctly) and boot it so you can debug it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that parallel ports have much larger bandwidth than serial ports.&lt;/p&gt;&#xA;" OwnerUserId="447" LastActivityDate="2019-01-12T17:36:48.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8741" PostTypeId="1" AcceptedAnswerId="8743" CreationDate="2019-01-12T21:37:30.893" Score="3" ViewCount="569" Body="&lt;p&gt;My dad has this audio interface from the 90s called the Media Vision Pro AudioSpectrum 16 Patch Panel, but unfortunately doesn't have the manual. From my research, it appears that this panel was used to interface with the sound card of the same name in old Apple computers (which my dad owned in the 90s). The function is clear for every port on it except this one, which is on the side and appears to be intended to connect to the computer itself. However, the Pro AudioSpectrum sound card doesn't appear to have a DA-26 port! I can't find any helpful information about this patch panel or any relevant use for a DA-26 connector. I've attached an image and I'd be grateful if anyone could provide any relevant information. Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/E4qKhOG.jpg&quot; alt=&quot;Media Vision Pro AudioSpectrum 16 Patch Panel DA-26 plus cable&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="11563" LastEditorUserId="4921" LastEditDate="2020-01-16T06:34:55.997" LastActivityDate="2020-01-16T06:34:55.997" Title="What is the 26-pin D-sub (DA-26) connector used for on the Media Vision Pro AudioSpectrum 16 Patch Panel?" Tags="&lt;identify-this-computer&gt;&lt;audio&gt;&lt;connector&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8742" PostTypeId="2" ParentId="8642" CreationDate="2019-01-12T21:45:14.647" Score="3" Body="&lt;p&gt;According to the &lt;a href=&quot;https://github.com/floooh/emu-info/blob/master/cbm/mapping-c64.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Project 64 etext&lt;/a&gt; and Joe Forster's &lt;a href=&quot;http://sta.c64.org/cbm64mem.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore 64 memory map&lt;/a&gt; the zero page vectors $03/04 and $05/06 are actually not used by the ROM routines, except for being initialized at startup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I made a quick test with a BASIC program using floating point and integer variables, it runs well even when I overwrite the zeropage values $03 to $06. &lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2019-01-12T21:45:14.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8743" PostTypeId="2" ParentId="8741" CreationDate="2019-01-12T22:03:10.127" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;[...]Media Vision Pro AudioSpectrum 16 Patch Panel [...] it appears that this panel was used to interface with the sound card of the same name in old Apple computers&lt;/p&gt;&#xA;&lt;p&gt;[...] The function is clear for every port on it except this one, which is on the side and appears to be intended to connect to the computer itself.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not the computer but the sound card.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, the Pro AudioSpectrum sound card doesn't appear to have a DA-26 port!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Maybe you look at the wrong card?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RMrFj.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RMrFj.png&quot; alt=&quot;Pro AudioSpectrum 16 for the PC&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There was a &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B01E2QMYU6&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pro AudioSpectrum 16&lt;/a&gt; for the PC and one for the Mac. The PC version (above) was a 16 Bit ISA card featuring an internal CD-ROM interface, as well as external connectors for audio signals and a joystick. It didn't use a patch panel.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/R0RJ3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/R0RJ3.png&quot; alt=&quot;Pro AudioSpectrum 16 for the Apple Mac&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Apple card (above) instead was a NUBUS card made to work with Mac II and Quadra models. It featured a single connector to attach the patch panel.&lt;/p&gt;&#xA;&lt;p&gt;So, if you/your father have disposed the Mac with the card, the patch box did become rather useless.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-12T22:03:10.127" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8744" PostTypeId="2" ParentId="4808" CreationDate="2019-01-12T22:24:39.877" Score="1" Body="&lt;p&gt;The C64 BASIC uses a floating point as basic format for everything. So even if a function requires an integer argument, the number is parsed into a floating point number first and then converted into an integer. When giving the constant π, a pre-stored floating point value of 3.14159265 is used, so the time for the conversion of the number to floating point is omitted. For POS(), the argument is a dummy argument, so its value does not matter to the result, which makes POS(π) easily possible.&#xA;But even for other functions like POKE giving π as an argument (which will then be converted to 3) would be a bit faster than writing a 3.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2019-01-12T22:24:39.877" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8745" PostTypeId="2" ParentId="1971" CreationDate="2019-01-12T22:36:01.913" Score="2" Body="&lt;p&gt;The tool &lt;a href=&quot;https://bitbucket.org/magli143/exomizer/wiki/Home&quot; rel=&quot;nofollow noreferrer&quot;&gt;exomizer&lt;/a&gt; from Magnus Lind also comes with a 6502 emulator, which according to the credits in the file was also written by Magnus. The tool (compiled into a program &quot;testrun&quot;, pls. look for the source in the exomizer donwload) simulates the behavior of a 6502 machine program on the command line. &lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2019-01-13T14:03:02.393" LastActivityDate="2019-01-13T14:03:02.393" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8746" PostTypeId="2" ParentId="7541" CreationDate="2019-01-13T00:43:28.723" Score="17" Body="&lt;p&gt;I had a brief look into the game running in an emulator. The pillow fighting game is using the &lt;a href=&quot;https://www.c64-wiki.com/wiki/Multicolor_Bitmap_Mode&quot; rel=&quot;noreferrer&quot;&gt;multicolor bitmap mode&lt;/a&gt;. In this mode, the video screen RAM defines the colors for the bit patterns 01 and 10, which are set separately for each 8x8 area with one byte each. The area filled with water has only around 100 bytes for color definition. These bytes are constantly changed so that the same bitmap has a different look, in this case by switching between colors dark gray, mid gray, light blue, light grey and occasionally white on some areas. This creates the water animation effect. In the game, there is a copy loop to overwrite the values in the video screen RAM which is set to be between $5C00 and $5FE8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If speed is a concern it would have been also possible to achieve the same effect by preparing several screens with the different colors and switching between them via the VIC memory control register at $D018, however this would have required an extra kB of memory for each frame and copying the sprite pointers around. &lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2019-01-13T00:43:28.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8747" PostTypeId="2" ParentId="8734" CreationDate="2019-01-13T04:01:18.897" Score="6" Body="&lt;p&gt;It seems that the answer is &quot;no&quot; according to &lt;a href=&quot;https://schlesinger75radcliffe.org/objects/corita-kent-serigraph-1976&quot; rel=&quot;noreferrer&quot;&gt;this web page&lt;/a&gt; and &lt;a href=&quot;https://www.radcliffe.harvard.edu/news/in-news/out-blue-strokes-brilliance&quot; rel=&quot;noreferrer&quot;&gt;this web page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;In 1976, Digital Equipment Corporation (DEC), a leader in the computer industry, commissioned the pop artist Corita Kent to design panels to adorn the sides of its computers, cubicle walls, and office furniture. Kent created six serigraphs of colorful swaths, but DEC never produced the panels.&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason given seems weak:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;Unfortunately, a small but significant glitch ended the project soon after it began. Despite their best efforts, the only way engineers could figure out to attach Kent’s work to the computers without harming her prints was by using small magnets. But magnets, of course, were “anathema to memory disks,” as Nahil put it.&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A bit of a let-down, really, but I have my answer.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-01-13T04:01:18.897" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8748" PostTypeId="1" AcceptedAnswerId="8752" CreationDate="2019-01-13T18:05:08.113" Score="6" ViewCount="1069" Body="&lt;p&gt;Motivated by Wilson's question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7549/can-a-commodore-64-use-two-screenmodes-on-one-scanline&quot;&gt;Can a Commodore 64 use two screenmodes on one scanline?&lt;/a&gt; I tried to implement a simple example that polls the beginning of a rasterline and then switches the screen mode in the middle. My code so far:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  c000  78          SEI&#xA;  c001  A2 19       LDX #$19  ;value for left half&#xA;  c003  A0 39       LDY #$39  ;value for right half&#xA;  c005  AD 12 D0    LDA $D012 &#xA;  c008  CD 12 D0    CMP $D012&#xA;  c00b  F0 FB       BEQ $C008 ; wait until rasterline changed&#xA;  c00d  29 07       AND #$07&#xA;  c00f  F0 12       BEQ $C023 ;skip badline&#xA;  c011  8E 11 D0    STX $D011 ;left side with text mode&#xA;  c014  EA          NOP       ;wait 2 cycles&#xA;  c015  EE FF FF    INC $FFFF ;wait 6 cycles&#xA;  c018  EE FF FF    INC $FFFF ;wait 6 cycles&#xA;  c01b  A5 FF       LDA $FF   ;wait 3 cycles&#xA;  c01d  8C 11 D0    STY $D011 ;right side with hires mode&#xA;  c020  4C 05 C0    JMP $C005&#xA;  c023  EA          NOP       ;burn some cycles&#xA;  c024  4C 05 C0    JMP $C005 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I ran into two problems here:&#xA;In lines with badlines the VIC stuns the CPU during the time when the program should switch the screen mode. For that reason I skip the bad lines in above code, resulting in these horizontal lines. I tried to manipulate bits 0-2 in $D011 to surpress bad lines, but then the screen was not drawn properly. Is there a possibility to &lt;strong&gt;skip bad lines while still having a properly drawn screen&lt;/strong&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second issue: When I start the program (e.g. by &lt;code&gt;SYS 49152&lt;/code&gt;) I get a varying offset of some cycles from the actual start of a rasterline, because my busy waiting loop is 4+2 cycles long. This shows itself in the split line being shifted to the left or right, however within my program I don't know how to detect or correct this. Any idea how to &lt;strong&gt;remove this start jitter&lt;/strong&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KDXUV.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KDXUV.png&quot; alt=&quot;After start, early split&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eWS55.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eWS55.png&quot; alt=&quot;After start, late split&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2019-01-14T08:51:18.140" Title="How to exactly sync to the raster line for a vertical raster split?" Tags="&lt;commodore-64&gt;&lt;graphics&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8749" PostTypeId="2" ParentId="1971" CreationDate="2019-01-13T18:11:44.527" Score="2" Body="&lt;p&gt;Given the lack of clarification in the question to &quot;What do you mean by &quot;used in the terminal&quot;? it seems possible that for example within Linux terminology this is meant to be read as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&gt;&lt;/em&gt;&lt;/strong&gt; Is there a C64 emulator that can be run from the command line, that is: without X11?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that's the case, than the &lt;a href=&quot;https://github.com/bobsummerwill/VICE/blob/master/doc/readmes/Readme-SDL.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;SDL&lt;/a&gt; port of &lt;a href=&quot;http://vice-emu.sourceforge.net&quot; rel=&quot;nofollow noreferrer&quot;&gt;VICE&lt;/a&gt; can be used from just the CLI and using the &lt;a href=&quot;https://en.wikipedia.org/wiki/Linux_framebuffer&quot; rel=&quot;nofollow noreferrer&quot;&gt;framebuffer&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;you'll have to compile the SDL port. SDL can use the framebuffer device (which doesnt need X11) - the regular XAW/GTK ports can only work if X11 is present (&lt;a href=&quot;https://www.lemon64.com/forum/viewtopic.php?t=48099&amp;amp;sid=a28025568ec5966c945525e759a8ea1e&quot; rel=&quot;nofollow noreferrer&quot;&gt;src&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And for the looks of it, &lt;a href=&quot;https://www.raspberrypi.org/forums/viewtopic.php?t=4581&quot; rel=&quot;nofollow noreferrer&quot;&gt;somebody&lt;/a&gt; did that &lt;a href=&quot;https://zuzebox.wordpress.com/?s=c64&quot; rel=&quot;nofollow noreferrer&quot;&gt;using a Raspberry Pi&lt;/a&gt;, and arrived at this result, in comparison with a real Commodore:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RpoFz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RpoFzs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; (click for big)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="6802" LastActivityDate="2019-01-13T18:11:44.527" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8750" PostTypeId="2" ParentId="7549" CreationDate="2019-01-13T21:01:14.053" Score="14" Body="&lt;p&gt;[TL;DR] vertical rastersplit with different graphic modes is possible with some quirks, in practice one would rather write characters onto a full hires image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did some experiments, and found out that it is possible for the VIC chip to switch mode within a rasterline. However a practical application is hindered by the following issues:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Every 8th rasterline, the VIC chip is stopping the CPU for about 40 cycles. This is the so-called bad line. The CPU is stunned while the middle part of the screen is drawn, which makes it impossible to switch modes in the middle of a badline. &lt;a href=&quot;https://nurpax.github.io/posts/2018-06-19-bintris-on-c64-part-5.html&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; has a very good depiction of the phenomen.&lt;/li&gt;&#xA;&lt;li&gt;After switching between modes it seems that the transition is done in parts. First the color mode is changed to hires while the actual hires graphics appear around two chars later. The following image shows an example where the left side of the screen is in char mode while the right side is in hires mode. The last two characters of &quot;COMMODORE&quot; are already colored with hires function while shown as characters: &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://i.stack.imgur.com/KDXUV.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KDXUV.png&quot; alt=&quot;Horizontal split&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, when one can live with every 8th line on the left side being hires (could be colored in background color so it would be not visible) and when the two character wide transition border is concealed, a vertical split would be feasible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See my question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8748/how-to-exactly-sync-to-the-raster-line-for-a-vertical-raster-split?noredirect=1#comment27337_8748&quot;&gt;How to exactly sync to the raster line for a vertical raster split?&lt;/a&gt; for a short code example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a second thought, if the overall mode is hires it is possible to represent any text or blockgraphic from textmode, only printing a char requires 8 bytes to be poked instead of one. However, this is still much less effort than the raster split every line.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2019-01-14T11:32:30.503" LastActivityDate="2019-01-14T11:32:30.503" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8751" PostTypeId="2" ParentId="8748" CreationDate="2019-01-13T21:18:06.977" Score="6" Body="&lt;p&gt;Inspired by Raffzahn, I found a way to &lt;strong&gt;remove the jitter&lt;/strong&gt; by waiting for a rasterline, then checking after 62 cycles if the next rasterline is already there, which would be an indication that could have detected the line earlier. After at most five iterations the earliest detection point is found. This only works if there is no badline during the tests, bit since a badline comes every 8 lines it is easily possible by waiting for a given line in order to start with badline-free horizon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This programm implements the algorithm and &lt;strong&gt;is to be run together with the code in the question&lt;/strong&gt;. Note that the timing between the routines is also critical, so putting the routines directly together without the &lt;code&gt;JMP $C000&lt;/code&gt; would require some instructions to burn 3 CPU cycles.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    c100  78          SEI&#xA;    c101  A2 19       LDX #$19  &#xA;    c103  8E 11 D0    STX $D011 ;set yscroll for ease badline detection&#xA;    c106  A9 01       LDA #$01  ;wait for rasterline 1, which is followed by non-badlines&#xA;    c108  CD 12 D0    CMP $D012&#xA;    c10b  D0 FB       BNE $C108&#xA;    c10d  AD 12 D0    LDA $D012 &#xA;    c110  CD 12 D0    CMP $D012 ;wait for a line change&#xA;    c113  F0 FB       BEQ $C110&#xA;    c115  A5 03       LDA $03   ;just burn 3 CPU cycles&#xA;    c117  AD 12 D0    LDA $D012&#xA;    c11a  A2 09       LDX #$09  ;loop to burn 44 CPU cycles&#xA;    c11c  CA          DEX&#xA;    c11d  D0 FD       BNE $C11C&#xA;    c11f  A6 03       LDX $03   ;just burn 3 CPU cycles&#xA;    c121  CD 12 D0    CMP $D012 ;after 62 cycles, is the new rasterline already there?&#xA;    c124  EA          NOP       ;for timing&#xA;    c125  D0 F0       BNE $C117 ;jump if the rasterline was already there&#xA;    c127  4C 00 C0    JMP $C000 ;we are in sync, start routine&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2019-01-13T22:21:36.403" LastActivityDate="2019-01-13T22:21:36.403" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8752" PostTypeId="2" ParentId="8748" CreationDate="2019-01-14T08:51:18.140" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there a possibility to skip bad lines while still having a properly drawn screen?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is absolutely impossible for character modes and at least problematic for bitmap modes. The additional cycles in a badline are needed for accessing the &quot;video matrix&quot;, which is a 12-bit wide access of the &quot;screen ram&quot; (8bit) and the color ram (4bit). In character modes, without this access, you won't have any characters as their codes are stored in the screen ram. With bitmap modes, the video matrix holds color information, so you would at least need one badline to have anything other than &quot;black on black&quot;. Without further badlines, the colors will stay the same in vertical direction for the whole screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference, there's a very good documentation covering anything know about the VIC-II: &lt;a href=&quot;http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt&quot; rel=&quot;noreferrer&quot;&gt;http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[exact raster position] Any idea how to remove this start jitter?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are a lot of possible approaches, and one possibility is to do exactly what you described &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8751/7040&quot;&gt;in your self-answer&lt;/a&gt;. An easy way to avoid badlines with this method is to start inside the top/bottom border. Other options include the well-known &quot;double IRQ&quot; (have a second raster IRQ in a NOP slide, then remove the final 1-cycle jitter by checking when exactly the next raster line is reached), using slightly out-of-phase CIA timers, syncing with a sprite, and stabilizing by forcing a VIC-II DMA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll find all of these methods here: &lt;a href=&quot;http://codebase64.org/doku.php?id=base:interrupts&quot; rel=&quot;noreferrer&quot;&gt;http://codebase64.org/doku.php?id=base:interrupts&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DMA method is sometimes very elegant, it's explained in this thread: &lt;a href=&quot;https://csdb.dk/forums/?roomid=11&amp;amp;topicid=88971&amp;amp;showallposts=1&quot; rel=&quot;noreferrer&quot;&gt;https://csdb.dk/forums/?roomid=11&amp;amp;topicid=88971&amp;amp;showallposts=1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;But, studying the VIC-II reference above, the first time the CPU is allowed to run again in a badline, you're already at horizontal raster pos $150, which is the last character column. Therefore, unfortunately, a &quot;sensible&quot; horizontal split isn't possible in a badline.&lt;/p&gt;&#xA;" OwnerUserId="7040" LastActivityDate="2019-01-14T08:51:18.140" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8755" PostTypeId="2" ParentId="2238" CreationDate="2019-01-14T21:00:43.427" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is the latch the thing that determines the write state (x or y)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While the terminology is not 100% accurate, the above is a pretty good summary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several things going on at the same time which make this complicated. First you are trying to write more than 8 bits of data (X/Y coarse &amp;amp; fine) over an 8-bit bus. So this needs splitting up in two writes of 8 each. The PPU engineers COULD have made this easy and implemented separate I/O registers for those two bytes, but instead they reuse the same target address and keep track of state (referred to as W toggle in the documentation). Every time you write to $2005 the current W state is used to find the destination and then the W bit is flipped. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no way to read the current value of W. How do you make sure your first byte goes to the correct destination then? You explicitly set it to 0. This is done via another hack: when you perform a read of $2002, as a side effect it also happens to set W=0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next complication is that the engineers decided to use this approach with the generic address pointer as well. So if you write to $2006 it will flip the same W bit that's used by the scroll register $2005. As before, use a $2002 read to reset W. The final issue is that writing to $2006 partially overwrites the fine-Y scroll position, which is why scrolling needs to be set AFTER any $2006 writes were done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall it's just jumping through hoops of a chip design that emphasized transisor savings over usability.&lt;/p&gt;&#xA;" OwnerUserId="11571" LastActivityDate="2019-01-14T21:00:43.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8756" PostTypeId="2" ParentId="8696" CreationDate="2019-01-15T09:00:18.933" Score="4" Body="&lt;p&gt;Top\bottom border was first done in an &lt;a href=&quot;https://csdb.dk/release/?id=137045&quot; rel=&quot;nofollow noreferrer&quot;&gt;FCG Intro of 1985&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Side borders in 1001 Crew &lt;a href=&quot;https://csdb.dk/release/?id=7304&quot; rel=&quot;nofollow noreferrer&quot;&gt;Border Letter I&lt;/a&gt; demo in 1986.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2019-01-15T09:00:18.933" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8757" PostTypeId="1" AcceptedAnswerId="8758" CreationDate="2019-01-15T21:50:37.957" Score="12" ViewCount="942" Body="&lt;p&gt;In the IBM PC and early successors and compatibles, it was commonplace for most of the computer's memory to be on cards in general expansion slots. (e.g. the original IBM PC could take 64K on the motherboard, but to get up to the 256K needed for Lotus 1-2-3, you had to use expansion cards of 64K each.) Even after this stopped being necessary thanks to higher density RAM chips, video memory would still be on an expansion card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was the latency for the CPU to access these memory banks, the same as it was for main memory on the motherboard? Or were there any models on which the CPU had to incur wait states accessing cards?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-01-16T13:02:21.610" Title="IBM PC expansion card latency" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;memory&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8758" PostTypeId="2" ParentId="8757" CreationDate="2019-01-15T22:32:45.733" Score="7" Body="&lt;p&gt;Same. At least for The PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later machines were of course throttled accordingly to keep slot access speed within the original spec. What else should they have done?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But they tried, and from there on it gets complicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PC-AT did run 1 wait state on each 16 bit access, IO or memory, internal or card. Thus allowing 'full speed'. But it inserted 4 wait states for any 8 bit card access - working as a slowdown to even a little less than PC speed, making sure 'old' 8 bit cards would comply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was done by the card pulling IO16 or M16 whenever it decoded an address as theirs and 'decided' to support 16 bit access - or better one should say fast access, as this of course also worked with any access, 8 or 16, as long as IO16/M16 was pulled during the initial clock cycle. A 'real' 16 bit access (reading or writing a word) would, without O16/M16 pulled, be split into two 8 bit accesses by the PC glue logic, each with its own 4 wait states.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way a 16 bit memory expansion could work at full speed, while 8 bit I/O cards worked at a PC-like access timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make things even more complicated, NOWS (NO Wait State) pulled during the middle of any access cycle would stop the wait state generation with that cycle (*1). Alternatively CHRDY (CHanel ReaDY) could be used to extend wait state generation as long as needed (*2,3).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;And somewhat related, there were also what I would call 'virtual' 16 bit cards. Most notably here some of the first faster VGA clones. They were usually sold as 16 Bit VGA, but in reality they were 8 bit designs. After all, the original VGA is an 8 bit design, and so were (most) compatibles. The trick here was to implement the byte/word glue logic onto the card. A write access was always accepted with IO16/M16, just to be handed toward the controller as two 8 bit transfers - while the 80286 continued its duty. On a read the wait state was used to fetch both bytes from the card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course there were also real 16 bit VGA cards later on. But those were newer controllers and designs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and then there's the case of mixed display adaptors. As soon as there is one 8 bit display adaptor in a system all will be accessed as 8 bit. Thus mixing one of the nice 'virtual' 16 Bit VGA with an MDA will pull the VGA down to PC speed again - unless it also used NOWS that is, then it's only slowed to 8 bit speed.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - So an 8 bit cycle could be cut short at the first, second or third cycle as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Both signals were already available with the PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Pulling both created an undefined state.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2019-01-16T13:02:21.610" LastActivityDate="2019-01-16T13:02:21.610" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8759" PostTypeId="2" ParentId="8757" CreationDate="2019-01-15T22:46:36.897" Score="8" Body="&lt;p&gt;The number of wait states added for a memory cycle did not depend directly on whether the memory was on the system board or an expansion card, but it was possible for either or both to add a wait state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original IBM PC added 1 wait state for system board memory accesses but it was possible for a memory expansion card to run at 0 wait states by asserting the NOWS line during an access cycle.  I don't know whether there were any memory expansion boards that actually did this or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, the XT 286 supported 0 wait states for its system board RAM which made it perform faster than the 1-wait-state AT at the same clock speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually when the bus clock became separated from the CPU clock, it was then very common for expansion card memory to be significantly slower than system board memory, simply due to being limited to the bus speed (typically 8MHz) rather than the 'native' CPU speed.  But for the PC, XT and AT the bus speed was the same as the CPU speed so this was not a factor.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2019-01-15T22:46:36.897" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8760" PostTypeId="2" ParentId="8757" CreationDate="2019-01-16T09:35:52.390" Score="3" Body="&lt;p&gt;The expansion bus on the the original IBM PC, which later became known as 8 bit ISA, is actually just the 8088 CPU bus with some buffering. That was a common technique for expansion cards at the time and through the 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As such RAM connected to the ISA bus has very similar properties to the RAM on the motherboard. The buffering does not introduce any additional timing requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later systems separated the ISA bus from the CPU bus, because the CPU was capable of running at much higher speeds than ISA cards could handle, but for the original 8088 machines there is no latency penalty at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course cheap RAM upgrades may have introduced extra wait states to compensate for using cheaper, slower RAM, but it wasn't a requirement.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-01-16T09:35:52.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8761" PostTypeId="1" AcceptedAnswerId="8764" CreationDate="2019-01-16T10:08:35.533" Score="28" ViewCount="5846" Body="&lt;p&gt;The original IBM PC keyboard didn't have separate cursor keys; the numeric keypad doubled as such. It wasn't long, however, until a new keyboard was introduced that did have separate cursor keys (so effectively two sets when num lock was turned off), and that was the layout that desktop keyboards used thereafter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why the change? Having just the cursor keys on the numeric keypad makes the keyboard take up less space as well as cost less, so on the face of it would seem preferable; presumably there was demand for the new layout. Was it from people wanting to use cursor navigation while entering numeric data? In that case, it would seem much better to let the left hand letter keys double as a second set of cursor keys, so that one could use both hands at the same time. Was there some advantage to the separate cursor keys that I'm overlooking?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-01-17T14:44:57.047" Title="Why separate cursor keys?" Tags="&lt;history&gt;&lt;ibm-pc&gt;&lt;keyboards&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8762" PostTypeId="1" AcceptedAnswerId="8765" CreationDate="2019-01-16T10:41:14.440" Score="1" ViewCount="513" Body="&lt;p&gt;Desktop computers have been in tower cases for a long time; in some cases since the eighties, per &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4635/when-did-the-tower-form-factor-appear-and-when-did-it-become-popular&quot;&gt;When did the tower form factor appear and when did it become popular?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The form of tower cases has been pretty consistent; setting aside huge machines like the Xerox Alto and SGI Onyx, the standard form is just wide enough to accommodate the width of a disk drive (5.25&quot; floppy, hard disk, CD or DVD), then high enough to accommodate several drives stacked one atop another, and deep enough to put the mainboard behind the drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My intuition for what it's worth is that a more obvious design would be a little wider, so as to have room to put the mainboard beside the drives, and not need as much depth. Okay, obviousness and aesthetics are subjective, so I will say no more about that aspect of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But have any computers used that variant design, with the tower case somewhat wider than the disk drives and the mainboard beside the drives? And if not, is there an objective, practical reason why not?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-01-18T10:04:39.157" Title="Wider tower cases" Tags="&lt;history&gt;&lt;hardware&gt;&lt;case&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8763" PostTypeId="2" ParentId="8761" CreationDate="2019-01-16T10:43:57.333" Score="8" Body="&lt;p&gt;I originally thought this keyboard style was introduced by the IBM RT PC in 1986 (I'm ignoring other non PC class machines and workstations)&lt;/p&gt;&#xA;&lt;p&gt;For a PC the first use I saw was on a Compaq Deskpro 386 the keyboard is explicitly called a 101 key style IBM RT PC in this review (hence my confusion).&lt;/p&gt;&#xA;&lt;p&gt;However after a bit more research (thanks due to @grahamj42) it seems that later IBM AT (aka 5170 model 339 launched April 1986) had this keyboard style (model 319 didn't) which required a BIOS update to support them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/byte-magazine-1987-02/page/n247?q=deskpro+386&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/byte-magazine-1987-02/page/n247?q=deskpro+386&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I don't remember seeing any great clamour for extra arrow keys, but I'm guessing folks who did a lot of spreadsheets were grateful.&lt;/p&gt;&#xA;&lt;p&gt;The IBM 8Mhz AT launch PR release (2nd April 1986) says this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The cursor and screen control keys have been separated from&#xA;the numeric pad, dedicating the numeric pad to numeric input.  A&#xA;division sign key and an additional enter key have been added to the&#xA;numeric pad.  As with the current IBM Personal Computer keyboards,&#xA;the numeric pad may also be used for cursor and screen control when&#xA;not in numlock mode.&lt;/p&gt;&#xA;&lt;p&gt;The cursor control keys are arranged in the inverted T&#xA;arrangement.  Insert, delete, home, end, page up and page down keys&#xA;are separated from the numeric pad and located above the dedicated&#xA;cursor control keys.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So they at least thought to mention some of the advantages.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www-01.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_ca/2/897/ENUS186-052/index.html&amp;amp;request_locale=en&quot; rel=&quot;noreferrer&quot;&gt;http://www-01.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_ca/2/897/ENUS186-052/index.html&amp;amp;request_locale=en&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-17T13:05:58.157" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8764" PostTypeId="2" ParentId="8761" CreationDate="2019-01-16T10:51:34.910" Score="40" Body="&lt;p&gt;I remember a conversation with an IBM engineer back in the 1980s, who implied there was an internal fight over this between IBM's engineering and marketing departments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The engineers wanted the PC to have the same keyboard as the popular 3270 mainframe terminal, for easy migration of users and software in a business environment, and in fact IBM did produce the &quot;IBM 3270 personal computer&quot; with this keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the marketing guys wanted something smaller and cheaper than the 122-key 3270 design with independent cursor keys and numeric keypad, plus 24 function keys above the main keyboard and a further block of 10 special-purpose &quot;function keys&quot; to the left of it. The original 3270 keyboards were heavy as well as big, since they had sheet metal cases rather than plastic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original IBM PC keyboard repurposed the 10 left-hand keys as general purpose function keys, deleted the original 24 function keys, and compressed the layout of the right hand side to save space. The PCjr keyboard went even further and reduced the total number of keys down to 62.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These PC keyboards were not popular with users who were accustomed to mainframe terminals, and eventually the 101 or 102 key &quot;enhanced keyboard&quot; design emerged as a compromise, and remained as basis for the current PC &quot;standard keyboard.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://www.quadibloc.com/comp/kyb03.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.quadibloc.com/comp/kyb03.htm&lt;/a&gt; for layouts of the various keyboards referred to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose the idea of mapping the cursor keys onto part of the main keyboard with a separate &quot;function key&quot; to toggle that behaviour simply didn't occur to anyone at IBM at the time, coming from a &quot;big keyboard&quot; background. Even now, laptop users who want to use keyboard-intensive applications usually buy an add-on keypad.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2019-01-16T10:56:51.177" LastActivityDate="2019-01-16T10:56:51.177" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8765" PostTypeId="2" ParentId="8762" CreationDate="2019-01-16T13:32:18.687" Score="8" Body="&lt;p&gt;Early PC towers often used such a design, if only because they were basically desktop PCs on their side. Some systems even had a rotatable drive bay (a bay containing two full-height 5.25” emplacements is as high as it is wide).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were some systems specifically designed along the lines you mention; Apple’s &lt;a href=&quot;http://mesmacs.unblog.fr/centrisquadra/quadra-950/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quadra 950&lt;/a&gt; and &lt;a href=&quot;https://computers.popcorn.cx/apple/powermac/8100/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PowerMac 8100&lt;/a&gt; spring to mind, and in less common systems, Digital’s &lt;a href=&quot;https://hardware.majix.org/computers/dec.personal/dpw433au.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;Personal Workstations&lt;/a&gt; are nice specimens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the PC space though, the design wasn’t all that popular, at least when using standard components, because of motherboard constraints, and of target markets. Regarding the former, Baby AT systems did commonly put the hard drives and 3.5” floppy drive alongside the motherboard; but the number and size of expansion cards limited the ability to reduce the case’s size, and giving users access to memory slots etc. meant either having to develop specific “easy access” drive mounts, or leaving the case large enough to allow hands to fit without getting too badly torn to shreds. See &lt;a href=&quot;https://en.wikipedia.org/wiki/File:80486-Desktop-PC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this photo&lt;/a&gt; for a typical example of a baby AT clone. (Baby AT motherboards were really long too, so reducing the depth wasn’t possible anyway.) Regarding the latter, in the nineties most people wanted desktop systems, and towers were sold based on their enhanced expansion possibilities; reducing their size wasn’t part of the specification, on the contrary — the bigger the tower, the more serious the system, in many people’s minds (and on magazine covers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ATX and related standards didn’t improve things much in terms of size reduction; the main consideration in the design was airflow. The same was true of BTX. The standards call for a fair amount of clearance above the motherboard, especially around the CPU — bear in mind that PCs in the early 2000s used slotted CPUs, not socketed; and while the Pentium 4 moved back to sockets it brought with it huge cooling requirements — so that combined with the expansion card requirements and easy access to memory means that designing a system with the motherboard behind everything is rather complex. (Not that it can’t be done, some small systems do exist, but they typically rely on specific equipment — low-profile CPU coolers, low-profile expansion cards if any, no 5.25” devices...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The decline in popularity of 5.25” devices means that they are no longer a design constraint; but general purpose side-by-side designs still tend to follow the “humongous tower” approach. See &lt;a href=&quot;http://www.lian-li.com/pc-011/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lian Li’s PC-011&lt;/a&gt; for one example of a system with no 5.25” bays, or &lt;a href=&quot;http://www.lian-li.com/pc-d600/&quot; rel=&quot;nofollow noreferrer&quot;&gt;their PC-D600&lt;/a&gt; and &lt;a href=&quot;http://www.lian-li.com/pc-o8/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-08&lt;/a&gt; for two-compartment designs with 5.25” bays (this type of case has been around for decades).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, yes there were some towers with motherboards on a back plane behind everything else, but they came with constraints:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;complicated access to devices on the motherboard;&lt;/li&gt;&#xA;&lt;li&gt;limited airflow;&lt;/li&gt;&#xA;&lt;li&gt;limited expansion capabilities (which ended up being rather ironic for a tower).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-01-18T10:04:39.157" LastActivityDate="2019-01-18T10:04:39.157" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8766" PostTypeId="2" ParentId="8761" CreationDate="2019-01-16T13:36:24.563" Score="22" Body="&lt;p&gt;I think the answer is Lotus 1-2-3.  Working in a spreadsheet, you are going to want to be able to use the numeric keypad for quick numeric entry, and you are going to need to use the cursor keys to move around the spreadsheet.  Having to continually hit the Num Lock to switch between &quot;modes&quot; would be a pain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no actual evidence to back this up, other than personal experience, and a sense the timing of Lotus's explosion on the platform coincided with the switch to the expanded keyboard&lt;/p&gt;&#xA;" OwnerUserId="10235" LastActivityDate="2019-01-16T13:36:24.563" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8767" PostTypeId="2" ParentId="5681" CreationDate="2019-01-16T18:56:58.523" Score="2" Body="&lt;p&gt;Most of you guys sound like you've read a few things but weren't around at the time. Not a complaint, just an observation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I worked for General Electric Information Services [GEIS] (Div. of GE that sold mainframe time-sharing globally). In the late 70s through the 80s, we used Genicom TN-200 and TN-300 printing (dumb) terminals as text only printers via their RS-232 (serial) port. 300's printed at 75/150/300 BAUD. As I recall, you can just keep up with reading at 300 BAUD.  200's printed at 300 to 1200 BAUD and you could bump it to print at 2400 BAUD but we had to bolt them to the floor because they'd walk all over the place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We also had several IBM Selectric typewriters which we hacked and added RS-232 ports to use as printers for PCs. The Selectrics we had did not have an RS-232 interface. This did not seem to be real common at the time but there were a few hacked units around. Exec secretaries liked them as they had to give up their typewriters for PCs and WordStar, but they wanted to keep the typewriters text quality for memos and letters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Daisy-wheel printers were also available but again it was a cost. They also knew getting the techies to convert them was a way to keep the typewriter as it could be used both ways. Eventually someone came out with a upgrade for the IBM typewriter to adapt it as a printer as I recall the kit cost about $30. Damn thing sounded like a machine gun while in use but it did a great job and looked MUCH better than the 9 pin dot-matrix printers of the time did. I can't remember what year they started coming out but 24 pin units were too expensive at the time. Especially when we had a excess of the Selectrics laying around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for using the printing terminals as printers, they were indestructible! No sense in trashing them and buying something that produced something that looked no better. Particularly for printing boxes and boxes worth of mainframe logs and things that we were required to print but rarely got looked at. In addition the ribbons on those units lasted much longer than the newer dot matrix units did. &lt;/p&gt;&#xA;" OwnerUserId="11581" LastEditorDisplayName="user12" LastEditDate="2019-01-16T19:52:16.193" LastActivityDate="2019-01-16T19:52:16.193" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8768" PostTypeId="1" CreationDate="2019-01-16T14:05:09.653" Score="3" ViewCount="2055" Body="&lt;p&gt;Does anyone know what is the meaning of the numbers in punch cards? I need an example of any language, it's important for me to understand which information could be manipulated. &lt;/p&gt;&#xA;" OwnerUserId="11592" OwnerDisplayName="Marta Fioravanti" LastEditorUserId="-1" LastEditDate="2019-01-16T21:38:28.647" LastActivityDate="2020-03-12T08:59:28.573" Title="What do the numbers on the punch cards mean?" Tags="&lt;punched-cards&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8769" PostTypeId="2" ParentId="8768" CreationDate="2019-01-16T14:22:46.500" Score="1" Body="&lt;p&gt;The answer may depend on which format you are referring to.  For the IBM 80-column punched card, I found this information from this &lt;a href=&quot;https://en.wikipedia.org/wiki/Punched_card#Card_formats&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiki link&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...alphabetic and special characters was added through the use of columns&#xA;  and zones. The top three positions of a column are called zone&#xA;  punching positions, 12 (top), 11, and 0 (0 may be either a zone punch&#xA;  or a digit punch).[46] For decimal data the lower ten positions are&#xA;  called digit punching positions, 0 (top) through 9.[46] An arithmetic&#xA;  sign can be specified for a decimal field by overpunching the field's&#xA;  rightmost column with a zone punch: 12 for plus, 11 for minus (CR).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But, as you read further down, the &quot;zones&quot; differ in meaning.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for manipulation, I'm not sure.  The few times I got to use punch card systems, any change in data or code required creating all new cards.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The order the cards were fed into the system made a difference too.  It was common to number the cards sequentially in case the cards became disorganized (like from from dropping them on the way to class)&lt;/p&gt;&#xA;" OwnerUserId="10385" OwnerDisplayName="matt" LastActivityDate="2019-01-16T14:22:46.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8770" PostTypeId="2" ParentId="8768" CreationDate="2019-01-16T20:33:59.837" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does anyone know what is the meaning of the numbers in punch cards? I need an example of any language, it's important for me to understand which information could be manipulated.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's not entirely clear what you mean by numbers. Is this about the numbers printed on the cards, or how numbers are encoded?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, punch cards do not encode any binary code, but characters (*1), based on a decimal code. Each character is encoded in one (of usually 80) columns. In the beginning punch cards were only meant to encode numbers and had 10 rows, numbered from zero (0), at the top, to nine (9), at the bottom. To hold a number, one and only one hole was punched for each column, at the according position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later on, the code was extended to cover letters and other symbols as well. To do so the space above the zero row, originally intended to be printed on or hold instructions, was used for two additional punching positions called 11 and 12 with 12 being the topmost. A decimal code grouping the letters in 3 groups of 9, 9 and 8 was developed. To punch a letter its basic row (1..9) within the group was punched, plus a hole in row 12, 11 or 10 (when encoding letters row zero (0) was called row 10) as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A..I  -&amp;gt;  Row 12 + Row 1..9&#xA;J..R  -&amp;gt;  Row 11 + Row 1..9&#xA;S..Z  -&amp;gt;  Row 10 + Row 2..9  (*2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Except for a few early symbols (*3), encoding for symbols differed a lot between manufacturers and systems. In the long run IBM's basic encoding became standard within the mid 1960s. Here most symbols are identified by a punch in Row 8 plus a combination of 10..12 and 2..7 making it three holes per column (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also standardized punch sequences for extended codesets as well as special usage, adding encodings with up to 6 holes per column. But that as well needs a separate look, depending on what you want to do with it.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - There are also encodings based on properties but that's custom and a complete different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Since only 26 or the 27 available combinations are needed, one stays unused. By choosing the 10+9 combination as such, the encoding made sure to keep a minimum distance between two holes at two rows, thus working more reliably on weak paper or worn out cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Like minus which was a single 11 punch&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Emphasis on most, as there are also a few dual punch symbols.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2019-01-17T12:40:50.463" LastActivityDate="2019-01-17T12:40:50.463" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8771" PostTypeId="2" ParentId="8768" CreationDate="2019-01-16T22:14:36.470" Score="6" Body="&lt;p&gt;Fundamentally the card is just an 80x12 array of bits (punch = 1, no punch = 0) and it's up to the system reading the card to interpret them. For example, the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_701&quot; rel=&quot;noreferrer&quot;&gt;IBM 701&lt;/a&gt; could read a card in &quot;binary&quot; mode, which interpreted the card as 12 rows of 72 bits (the rightmost 8 columns were ignored). Each 72-bit row represented two 36-bit machine words, which could be data or a pair of 18-bit instructions. &lt;a href=&quot;https://ieeexplore.ieee.org/document/4640464&quot; rel=&quot;noreferrer&quot;&gt;This article&lt;/a&gt; describes a single-card &lt;a href=&quot;https://en.wikipedia.org/wiki/Booting#First_commercial_computers&quot; rel=&quot;noreferrer&quot;&gt;boot loader&lt;/a&gt; for the 701 that was used to load larger programs from a stream of cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(As an aside, this is why early FORTRAN versions imposed a 72-character limit on source lines: the first FORTRAN compiler ran on the 701's successor, the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_704&quot; rel=&quot;noreferrer&quot;&gt;IBM 704&lt;/a&gt;, which could only read 72 columns of a card - see p. 39 of the &lt;a href=&quot;http://bitsavers.org/pdf/ibm/704/24-6661-2_704_Manual_1955.pdf&quot; rel=&quot;noreferrer&quot;&gt;704 Manual of Operation&lt;/a&gt; (31 MB PDF). As others have noted, the 8 ignored columns were often used to encode a sequence number for each card, which could be a lifesaver for the unfortunate programmer or operator who dropped a card deck on the floor.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally though the card would be interpreted as representing 80 characters, one per column, in a &lt;a href=&quot;https://en.wikipedia.org/wiki/BCD_(character_encoding)&quot; rel=&quot;noreferrer&quot;&gt;binary-coded decimal (BCD)&lt;/a&gt; format. While they could have treated each column as a 12-bit integer which would have given 4096 possible characters (prehistoric Unicode, anyone?), a simple BCD encoding would treat it as two fields: a decimal part in rows 1-9, where a single row was punched to represent that digit, and a &quot;zone&quot; using rows 0, 11 and 12, which allows four values (one of the three rows punched, or no row punched).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In theory this would give you 36 characters to play with (4 zone values times 9 digit values), but real BCD encodings allowed multiple punches in the decimal field so you'd typically have 48 or 52 characters: there's a nice example in this description of the &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/026.html&quot; rel=&quot;noreferrer&quot;&gt;IBM 026 card punch&lt;/a&gt;, and Wikipedia lists &lt;a href=&quot;https://en.wikipedia.org/wiki/BCD_(character_encoding)#Examples_of_BCD_codes&quot; rel=&quot;noreferrer&quot;&gt;many more encodings&lt;/a&gt;. Note that a column with only row 0 punched has an obvious interpretation as &quot;no zone, digit 0&quot; but strictly speaking it's &quot;0 zone, no digit&quot; which was used to encode the numeric character 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As another aside, once you've seen how the structure of BCD character sets relates to physical cards, the layout of &lt;a href=&quot;https://en.wikipedia.org/wiki/EBCDIC#Code_page_layout&quot; rel=&quot;noreferrer&quot;&gt;EBCDIC&lt;/a&gt; starts to make a little more sense. But only a little.&lt;/p&gt;&#xA;" OwnerUserId="4243" LastEditorUserId="4243" LastEditDate="2019-01-16T23:32:44.500" LastActivityDate="2019-01-16T23:32:44.500" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8772" PostTypeId="1" CreationDate="2019-01-16T23:59:33.473" Score="14" ViewCount="391" Body="&lt;p&gt;The original Apple I didn't use RAM to hold the contents of the display, but instead used a group of six 1024-bit shift registers to hold the display contents and a seventh 1024-bit shift register to keep track of the cursor position.  The normal means of outputting data to the display was to somehow activate a signal that would cause the display to store a byte into the display shifters at the spot where the &quot;cursor&quot; shifter had a 1, and then bump the cursor shifter by a space.  This approach was limited to outputting one character per frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, there are some other approaches which seem able to write more data on a frame.  For example, when scrolling the screen, the system seems to be able to clear all 40 of the &quot;new&quot; characters on a single frame, and when clearing the screen it appears to be able to write all 960 characters and then set the single bit in the cursor shift register associated with the upper-left corner of the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the Apple I provide any means, or could it be readily modified to provide any means, by which the CPU could manipulate the cursor shifter or force a character into the shift register at whatever part in the cycle it happened to be, allowing suitably-written code to produce faster screen output?  If one could e.g. cause 1 bits to be stored into every ninth bit of the cursor shifter, it would seem like it should be possible to write any number of lines of text in nine frames by waiting for display scanning to reach the first line to be written, outputting one useful byte of data every nine cycles, waiting for the next line, outputting one useful byte of data every nine cycles, etc. and then cancel the &quot;write-character&quot; operation once all lines of interest had been written?  Do any emulators or recreations of the Apple I support such things?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While being able to simply store screen contents in RAM as was done on the Apple ][ was better than anything that could have been done using shift registers, I would think that the shift-register-based design of the Apple I could have been used much more effectively than it was had it not been so quickly obsoleted.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="3290" LastEditDate="2020-05-01T04:26:33.990" LastActivityDate="2020-05-01T04:26:33.990" Title="Could suitably-written Apple-I software force bytes into the display shift register, and do modern recreations emulate that?" Tags="&lt;emulation&gt;&lt;display&gt;&lt;apple-1&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8774" PostTypeId="1" CreationDate="2019-01-17T13:40:10.833" Score="4" ViewCount="317" Body="&lt;p&gt;The Apple II is famously built around its video generator. Conveniently, addresses are generated which scan all of the video memory and somehow spits the contents onto the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its occurred to me though, that generation of successive values which are put onto the address bus is useful for much more, because a single address can point to many different things at once. It could read a byte from a bitmap, and at the same time read some other value from another bank of memory. This is how the Apple II does DRAM refresh for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But couldn't this also have easily been used for many other purposes?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;To scan the keyboard?&lt;/strong&gt; For example, we could map each address to a single key. Then, when a key is pressed, the address is stored in the keyboard latch and the 6502 is interrupted. This could probably mean the design could do without the AY-5-3600 which scans the keyboard.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Other ideas, probably too much feature creep for an Apple II, but maybe for another, more business-oriented computer.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Serial port I/O?&lt;/strong&gt; For as long as the serial port can supply us with bytes, just write them into some buffer to be read later by the CPU. Or write from the buffer to the port of course.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multiple word arithmetic?&lt;/strong&gt; Now this is something which is quite tedious for a 6502. To add two 48 bit values for example is quite a long program. But if those values are in an appropriate bank of memory, then with the addresses being generated sequentially, a 78LS181 will blithely do the job. I suppose this could accelerate some heavy arithmetic, integer or floating point.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So I've never seen a computer design which uses the video addresses as something else at the same time. Why is this? Didn't occur to anyone? Or is there a technical reason?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-01-18T08:25:59.517" Title="Why not make more use of the video generation logic?" Tags="&lt;apple-ii&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8775" PostTypeId="2" ParentId="8774" CreationDate="2019-01-17T13:54:47.813" Score="5" Body="&lt;p&gt;What you are describing is called Direct Memory Access, or DMA. It is very common on computers nowadays but much less common when the Apple II came out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main issue is that it requires bus arbitration. The CPU and any DMA devices have to share the memory bus. In the Apple II the CPU, a 6502, only accesses the memory bus every other cycle so it wasn't difficult to have the video generation hardware to use every other cycle as well, avoiding the need for an arbitration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you try to add a third device to that bus there needs to be some way to manage and prioritize everything. The video hardware can't wait, it has to have priority or the display will glitch. The CPU can wait, but you need something that tells it to wait while the third device uses the bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later machines such as the Amiga did exactly that, using custom chips to manage multiple DMA devices. The Apple II didn't have the luxury of using custom designed chips, it was all off-the-shelf hardware.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-01-17T13:54:47.813" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="8777" PostTypeId="1" AcceptedAnswerId="8778" CreationDate="2019-01-17T16:49:25.963" Score="29" ViewCount="5919" Body="&lt;p&gt;In 1988, Intel introduced the 80386SX, most often referred to as the 386SX, a cut-down version of the 80386 with a 16-bit data bus mainly intended for lower-cost PCs aimed at the home, educational, and small-business markets, while the 386DX would remain the high-end variant used in workstations, servers, and other demanding tasks. The CPU remained fully 32-bit internally, but the 16-bit bus was intended to simplify circuit-board layout and reduce total cost. (From Wikipedia.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that indicates extra data lines were very expensive; the difference between a 386SX and 386DX computer came to hundreds of dollars. Okay. (The 8088 and 68008, and for that matter the 68000 itself, had likewise narrow data buses relative to the CPU internals, but in those cases maybe there were considerations like timely availability of support chips. The 386SX is the purest example, being developed and released three years &lt;em&gt;after&lt;/em&gt; the full-width version of the chip.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But hang on a minute. Take a look at the pinout of the NES cartridges: &lt;a href=&quot;https://forums.nesdev.com/viewtopic.php?f=9&amp;amp;t=14924&quot; rel=&quot;noreferrer&quot;&gt;https://forums.nesdev.com/viewtopic.php?f=9&amp;amp;t=14924&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most remarkable feature, I think, is that it has an address and data bus (22 lines total) for the game program – and then a whole other address and data bus for fetching tile data. The point of that is clear: it provides double the bandwidth, lets the console fetch code and tiles simultaneously, allows higher quality graphics without having to provide extra RAM for caching tiles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if there was a problem with affording an extra sixteen lines in a $2000 PC in 1988, how on earth could Nintendo possibly afford to put an extra twenty-two lines, not only in a $200 console in 1983, but in &lt;em&gt;every single cartridge&lt;/em&gt;? Okay the PC motherboard is a larger and more complex piece of kit, but that's going on two orders of magnitude difference in equipment cost, and five years difference in release date to boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does that possibly make sense? Was Intel just engaging in market segmentation, or is there some technical consideration I am missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-01-18T12:52:01.173" Title="386SX, NES and how much did data lines really cost anyway?" Tags="&lt;hardware&gt;&lt;nes&gt;&lt;cost&gt;&lt;80386&gt;" AnswerCount="3" CommentCount="11" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8778" PostTypeId="2" ParentId="8777" CreationDate="2019-01-17T17:40:27.610" Score="42" Body="&lt;p&gt;The situation with the 386(DX) v. 386SX is similar to &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2793/79&quot;&gt;the situation with the 8086 v. 8088&lt;/a&gt;. The big issue isn’t the data lines (although they do have an impact on complexity and cost when routing a whole motherboard), the issue is mostly the cost of support components: motherboard chipsets (whether integrated or discrete), memory, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By going back to a 16-bit bus, the 386SX allowed motherboard designers to use techniques and components they knew well from 286 designs. The 386SX &lt;em&gt;was&lt;/em&gt; released years after its full 32-bit older sibling, but in those years the 386 didn’t sell all that much — 386 systems were significantly more expensive than 286 systems, not significantly faster than the higher-end 286 systems for most DOS applications, and thus there was no major incentive for most PC users to buy a 386 rather than a 286, and no major incentive for PC manufacturers to produce cheap 386 systems. (Although the 386 was released in 1985, and the SX in 1988, 386-based systems only really became popular in the early 1990s, &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2387/79&quot;&gt;not coincidentally following the release of Windows 3 in 1990&lt;/a&gt;.) The 386SX allowed PC builders to produce 32-bit systems for a cost similar to 286 systems, since most if not all of the supporting paraphernalia was the same (of course they wouldn’t &lt;em&gt;sell&lt;/em&gt; them for a price similar to 286 systems).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There’s also some amount of market positioning going on: the 386(DX) was supposed to be a high-end CPU, and was typically used in high-end systems with expensive components (cache, &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Industry_Standard_Architecture&quot; rel=&quot;noreferrer&quot;&gt;EISA buses&lt;/a&gt;, many memory slots etc.), whereas the 386SX was marketed as a low-cost CPU and therefore it was acceptable to sell it in lower-end systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://redhill.net.au/ib.html&quot; rel=&quot;noreferrer&quot;&gt;The Red Hill main board index&lt;/a&gt; shows a number of examples of 286, 386(DX) and 386SX motherboards, which gives an idea of the complexity or simplicity of the various designs.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-01-18T12:52:01.173" LastActivityDate="2019-01-18T12:52:01.173" CommentCount="24" ContentLicense="CC BY-SA 4.0" />
  <row Id="8779" PostTypeId="2" ParentId="8777" CreationDate="2019-01-17T17:50:56.337" Score="15" Body="&lt;p&gt;It's not just how many data lines, but where you have to route them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the PPU on the NES does have its own independent RAM, it is connected only to the PPU.  To update the tile RAM from the main CPU, all accesses must go through the PPU.  This limits the extra 8 data lines and 11 address lines (for a 2 KB address space) to a small area of the board, as the PPU and its RAM are right next to each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a photo of the part of the board in question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/E65ff.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/E65ff.jpg&quot; alt=&quot;NES mainboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can clearly see the two RAM chips marked SRAM at the bottom.  One connected to the CPU data pins directly, and one through an LS373 buffer to the PPU's data pins.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is part of a schematic for the NES mainboard:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n3Se4.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n3Se4.png&quot; alt=&quot;NES mainboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A full 32-bit 386 processor mainboard needs to route all the data lines over a much larger area: to the chipset, to the IO expansion slots, to all the RAM chips or SIMM slots, and to the ROM chips.  All over the board, basically.  Having some experience with PCB design, I can say that routing that many signals all over a board is much more difficult than in just a small region.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, the NES ran at 1.8 MHz, while Intel 386 processors were introduced at 12 MHz, soon increasing to 33 MHz.  At higher speeds, the routing of a board becomes more critical as trace length, inductive coupling and other factors which can be largely ignored at 1 MHz become increasingly dominant design concerns, again making board design harder.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2019-01-17T17:50:56.337" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8780" PostTypeId="2" ParentId="8777" CreationDate="2019-01-17T19:02:14.080" Score="22" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So that indicates extra data lines were very expensive; the difference between a 386SX and 386DX computer came to hundreds of dollars.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. Sure, they need to have some room and routing - and thus more thru hole connections, but over all, doing a 32 data lines instead of 16 isn't a big deal.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It wasn't the data lines themselves, but rather the components to be connected to these data lines that made the difference. Most notably here would be RAM. With a 16 bit data bus, only two 30 pin SIMM (*1) were needed for a minimal memory setup. A system builder could get away with selling a basic 386SX system with as low as 512 KiB (two 256 KiB modules). Even more, board manufacturers could do cost-sensitive boards with just two SIMM sockets, lowering the price even more (*2,3 ).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Equally important for board/system designer, they could use chipsets that differed only minimally from 286 chipsets. Thus chipset manufacturers could design and offer them rather quickly and at low cost.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Last but quite important, Intel could offer the 386SX at a way lower price than the 386DX without cutting into the sales for their top end offerings. The 386SX was considerably slower and a strict 286 replacement/upgrade. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] pinout of the NES cartridges: [...] has an address and data bus (22 lines total) for the game program – and then a whole other address and data bus for fetching tile data.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yup, makes sense for a game system with a separate graphics system to extend its databus onto the cartridge. This allowed placing (ROM) data right onto the graphics bus, thus saving the need for installing more video RAM, which would have otherwise been needed to hold that data (after being copied into from the game ROM).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But if there was a problem with affording an extra sixteen lines in a $2000 PC in 1988, how on earth could Nintendo possibly afford to put an extra twenty-two lines, not only in a $200 console in 1983, but in every single cartridge?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As said (point#1), the additional cost for the lines itself do exist, but are minor. It's again about component installment. Or more exact with the NES, it's about &lt;em&gt;not&lt;/em&gt; installing components. Without the second bus, the video part would have needed additional RAM to hold tile (and other) data. With the bus extended to the cartridge, no (large) default RAM was needed, but cartridges did bring their date and inserted it right into the video address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This saved the installation of large(r) amounts of RAM in the base console which otherwise would have needed to be present to hold tile data, loaded from the game ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's in fact a very nifty solution as&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;No need for a faster cartridge bus to combine game and graphics data&lt;/li&gt;&#xA;&lt;li&gt;Simpler bus design, as memory spaces between CPU and PPU are kept separate&lt;/li&gt;&#xA;&lt;li&gt;No need for more RAM installed in base console to hold static graphics data (very cost saving)&lt;/li&gt;&#xA;&lt;li&gt;RAM size does not limit graphics size&lt;/li&gt;&#xA;&lt;li&gt;Graphics data does not need to be transferred from game ROM into graphics RAM&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Obvious, the amount of data lines isn't anywhere important in the considerations done.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - When the 80386 was introduced in 1988, 30 pin 8 bit wide SIMM were standard and it wasn't until the mid 1990s when 72 pin 32 Bit SIMM took over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Such a board could offer 512 KiB, 2 MiB or 8 MiB total RAM, the latter being rather extreme for low price systems in the late 80s - whoever could afford 8 MiB, could just as well buy a 386 DX system right away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Not as cheap as one may think, as there were even IBM PS/2 machines with just two SIMM sockets.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-01-18T10:22:25.650" LastActivityDate="2019-01-18T10:22:25.650" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8781" PostTypeId="1" CreationDate="2019-01-17T21:30:39.127" Score="7" ViewCount="598" Body="&lt;h3&gt;Problem&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I have a couple of old computers. Some of them have a &lt;a href=&quot;http://amiga.resource.cx/exp/impact500mk2&quot; rel=&quot;noreferrer&quot;&gt;SCSI-1&lt;/a&gt; or &lt;a href=&quot;http://amiga.resource.cx/exp/blizzardscsi4&quot; rel=&quot;noreferrer&quot;&gt;SCSI-2&lt;/a&gt; interface over an internal 50 pin IDC connector or an external DB25. Now I want to connect something to them, in particular a hard drive. One option is to get a &quot;modern&quot; hard drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have heard that parallel SCSI is backwards compatible, so given the right adapter it should be possible to connect an Ultra-320 SCSI hard drive to a SCSI-1 platform. A comment to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2476/apple-ii-scsi-maximum-drive-partition-size&quot;&gt;this question&lt;/a&gt; mentions that it is &lt;em&gt;almost correct&lt;/em&gt; that SCSI is completely backwards compatible and that a new question should be asked concerning the details. This is that question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Please note that this question is not about SCSI-to-CF/SD adapters, it's not a generic &quot;how to add storage to an old platform&quot;.)&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Questions&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bus width&lt;/strong&gt;&lt;br&gt; The old systems use an 8 bit bus, but a lot of the newer SCSI devices are listed as having a 16 bit bus. What happens there? Will the device figure out that my host can only use 8 bits?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Electrical&lt;/strong&gt;&lt;br&gt; There seems to be a few different electrical standards: Single-ended, LVD, HVD. Presumably an adapter needs to convert between them. Is it possible? How do I know which is being used by the device? &lt;a href=&quot;https://en.wikipedia.org/wiki/SCSI_connector#Interoperability&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt; has this to say:&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Different SCSI standards use the &lt;strong&gt;same SCSI connectors as in HVD and LVD&lt;/strong&gt; SCSI (High Voltage Differential and Low Voltage Differential) . HVD uses 15V while LVD uses 3.3V, so connecting an HVD device to an LVD host bus adaptor &lt;strong&gt;can blow the line drivers&lt;/strong&gt; on the HBA, likewise an HVD HBA connected to an LVD device.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Device size&lt;/strong&gt;&lt;br&gt; I know that a lot of file system drivers on the host side will have issues with larger disk sizes, and this question is not about that, but will the SCSI-1 &lt;em&gt;command set&lt;/em&gt; at least be able to figure out that the device on the other end is indeed a super-mega-unheard-of large block device of several hundred gigabytes? That is - would a &lt;em&gt;correctly&lt;/em&gt; implemented SCSI-1 hard drive driver with no arbitrary limits be able to interrogate and access the full size of a modern SCSI device?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;In summary&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;What do I have to do, know, or find out if I want to connect an Ultra-320 SCSI hard drive to a SCSI-1 computer from the late eighties or early nineties?&lt;/p&gt;&#xA;" OwnerUserId="333" LastActivityDate="2020-10-27T19:53:15.753" Title="What's the pitfalls when trying to connect a new SCSI hard drive to an old SCSI bus?" Tags="&lt;hard-disk&gt;&lt;scsi&gt;&lt;new-hardware-adaptation&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8782" PostTypeId="2" ParentId="8772" CreationDate="2019-01-17T21:36:46.527" Score="7" Body="&lt;p&gt;Video output runs via a 6821 PIA and the interface exposed to the CPU is fairly simple: peripheral register B is configured so that the highest bit is an input and the low seven bits are an output. Checking &lt;a href=&quot;https://www.applefritter.com/files/a1man.pdf&quot; rel=&quot;noreferrer&quot;&gt;its published source code&lt;/a&gt;, the echo character operation is in the monitor at address FFEF:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ECHO    BIT DSP&#xA;        BMI ECHO&#xA;        STA DSP&#xA;        RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;i.e. busy wait while the top bit of register B is set. As soon as it is clear, transmit the new character. No positioning, no direct interaction with the shifters, just a push next.&lt;/p&gt;&#xA;&lt;p&gt;Looking elsewhere, note the implementation of GETLINE at A98D:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;GETLINE    LDA #$8D     ; CR&#xA;           JSR ECHO&#xA;&#xA;           LDY #$01     ; Initialize text index&#xA;BACKSPACE  DEY&#xA;           BMI GETLINE  ; Beyond start of line, reinitialize.&#xA;&#xA;NEXTCHAR   ... stuff of getting keyboard input,&#xA;           checking it for special characters and echoing it ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Which suggests two things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;special characters, such as carriage return are handled in hardware; but&lt;/li&gt;&#xA;&lt;li&gt;the only meaningful response to trying to backspace to before the start of a line in progress is to start a new line.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Combine those hints with the diagram below that describes DA, the video data available line that is a signal from the 6821 to the video subsystem, as &amp;quot;(UART style)&amp;quot; and I feel confident answering that: there is no means by which the CPU can usurp the normal serialised store-and-wait procedure. Full-line clears and scrolling appear to be a hardware feature, and I'm sure that screen clearing is implemented in terms of those.&lt;/p&gt;&#xA;&lt;p&gt;Addendum, from &lt;a href=&quot;http://www.willegal.net/appleii/apple1.htm&quot; rel=&quot;noreferrer&quot;&gt;the word of God&lt;/a&gt; (a sneaky deep link from &lt;a href=&quot;http://www.willegal.net/appleii/appleii-first_page.htm&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;; scroll down to 'Don Lancaster's TV Typewriter' and see text billed as &amp;quot;Here is Steve [Wozniak]'s reply to my inquiry&amp;quot;):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The major cost component of my TV Terminal was the video RAM. ... 1024-bit dynamic shift registers were the most cost-effective solution I could find for the screen memory ...  These RAM's had to shift once for each character on the screen ... This also led to only being able to add one character every 60th of a second, which is much lower than microprocessor speeds. [...]&lt;/p&gt;&#xA;&lt;p&gt;When I turned it into the Apple I by adding my own local processor and RAM, the low character refresh rate was a real slow-down. But I was only modifying a terminal to get something built quickly.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-17T21:59:24.573" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8783" PostTypeId="2" ParentId="8781" CreationDate="2019-01-17T22:11:39.970" Score="-2" Body="&lt;p&gt;Very sinple answer: Check your drives documentaion and compare the facts with whatever your host interface provides&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise this question is &lt;strong&gt;way&lt;/strong&gt; to broad to generate any useful answer.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-01-17T22:11:39.970" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8784" PostTypeId="2" ParentId="8781" CreationDate="2019-01-18T00:57:56.373" Score="11" Body="&lt;p&gt;Bus: yes should negotiate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Device size: &lt;em&gt;possibly&lt;/em&gt; okay.  If your OS can issue (and your scsi controller supports) a read(16), then you'll get the full capacity.  If it only supports read(10), then it'll look like a 2TB volume (assuming the drive is bigger!).  I've heard of some random old controllers that didn't support read(16) and caused problems for big volumes, but don't know how prevalent that was.  If it's 2TB or less, then no problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Electrical: unlikely to be a problem.  So most of the other things should work (and will at least be safe to try) if you have the right electrical connections.  HVD is incompatible with the other two (SE and LVD will be okay together).  But, HVD was uncommon outside of special environments.  (It was more expensive and the only purpose was to allow longer cable lengths).  I wouldn't expect to see it on a random desktop.  (And it's no longer made, so a new drive will not be HVD).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most systems were &lt;em&gt;supposed&lt;/em&gt; to use a different icon for HVD, the double diamond instead of the single diamond.  It wasn't always true, but if you see that, you should expect HVD.  See &lt;a href=&quot;http://www.pcguide.com/ref/hdd/if/scsi/prot_Diff.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.pcguide.com/ref/hdd/if/scsi/prot_Diff.htm&lt;/a&gt; for the images.  I would look for that symbol stamped on the rear of the controller card near the port (or be embossed on the case if it's on the motherboard).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My main worry would be that that an older OS can't handle a large volume, not the SCSI config.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Oh, I didn't realize those links were to documentation of specific products.  If the products don't mention &quot;HVD&quot; or &quot;differential&quot; anywhere (and I didn't see any), then there's no way they're HVD.  They should be fine electrically. &lt;/p&gt;&#xA;" OwnerUserId="4815" LastEditorUserId="4815" LastEditDate="2019-01-18T01:03:14.773" LastActivityDate="2019-01-18T01:03:14.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8785" PostTypeId="1" AcceptedAnswerId="8786" CreationDate="2019-01-18T01:29:09.223" Score="1" ViewCount="925" Body="&lt;p&gt;So far, I have gotten by with using the BIOS draw-pixel routine here: &lt;a href=&quot;http://stanislavs.org/helppc/int_10-c.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://stanislavs.org/helppc/int_10-c.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This works of course, but I can't imagine that commercial games used this BIOS call as its pretty slow.  Considering too that 320x200 = 64K, drawing a full screen requires speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Writing to graphics memory is fairly straight forward for CGA, but EGA uses planar addressing and is a bit tricky to find documentation on.  I'm trying to &quot;write games&quot; not reinvent the wheel here.  Ideally, I'm looking for a general purpose pixel drawing routine that I can learn from and possibly just use.  Any help is very much appreciated!&lt;/p&gt;&#xA;" OwnerUserId="11496" LastActivityDate="2019-01-18T08:35:04.967" Title="Does anyone have an x86 EGA draw pixel routine?" Tags="&lt;ms-dos&gt;&lt;graphics&gt;&lt;assembly&gt;&lt;bios&gt;&lt;x86&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8786" PostTypeId="2" ParentId="8785" CreationDate="2019-01-18T02:19:14.520" Score="7" Body="&lt;p&gt;Writing single pixels is a non-starter if you want any performance, even if you don't go through the overhead of a BIOS call for each pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Graphics libraries in and around the EGA era were based on drawing entire lines at a time, curved lines that were segments of axis-parallel elipses, and things like filled rectangles and circles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interior of the big flat fills could be sped up by manipulating the write mask register: by setting more than one bit, more than one of the bit planes would accept writes at the same time, so to write a single word of FFFF or 0000 you could set or clear the bits of 16 pixels in any combination of planes you wanted. You'd first write all the planes you want to set to 0 all at once, then all the planes you want to set to 1 (or, of course, vice versa). At the boundaries of your shape, where you need to partially keep the screen content within a word or byte, you'd need to switch to a slower plane-by-plane implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted more intricate graphics than you could make with plain lines or fills, you would blit (in software) bitmaps to the screen from a pre-rendered in-memory representation that was already split into planes and bytes the right way. If you wanted smooth horizontal movement, you would have 8 rendered versions of each bitmap depending on the horizontal position of the image relative to the byte boundaries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Draw single pixels only as an absolute last resort.&lt;/p&gt;&#xA;" OwnerUserId="5432" LastEditorUserId="5432" LastEditDate="2019-01-18T02:46:12.290" LastActivityDate="2019-01-18T02:46:12.290" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8787" PostTypeId="1" AcceptedAnswerId="8791" CreationDate="2019-01-18T04:55:30.417" Score="53" ViewCount="15329" Body="&lt;p&gt;For a desktop computer, a mouse is a great pointing device. For a laptop if you don't want an extra device to keep track of, you need an alternative. The options I'm aware of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pointing_stick&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Nub&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Low-tech, cheap, compact and reliable, but miserably imprecise. Did they ever fix that? Is it even theoretically fixable or is it a limit on the precision of the human finger?&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Touchscreen&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Touchscreen&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Looks great when an actor is using it for ten seconds in a movie, kills your shoulder when you try to do it all day in real life.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Touchpad&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Touchpad&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;It took a while to get the technology to work properly and even then it's awkward to use and takes up a lot of keyboard space. Modern laptops seem to have settled on it anyway, perhaps because it's thin?&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Trackball&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Trackball&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Fast, precise, easy to use, not even expensive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Seems to me the trackball is the best option. Why didn't it become more widely used? I suppose it would have disappeared eventually because of increasingly strong manufacturer preference for thinness, but why wasn't it more widely used before that?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="851" LastEditDate="2019-01-21T10:48:29.653" LastActivityDate="2019-01-21T10:48:29.653" Title="Why did trackballs disappear?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;touchpad&gt;&lt;input-devices&gt;&lt;laptop&gt;" AnswerCount="11" CommentCount="20" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8788" PostTypeId="2" ParentId="8787" CreationDate="2019-01-18T05:12:32.387" Score="31" Body="&lt;h3&gt;Trackballs are Alive and Well&lt;/h3&gt;&#xA;&lt;p&gt;I have a Logitech M570 for my desktop computer. I have another one for my laptop. I got another one for my daughter. Every few years they break and I replace them.&lt;/p&gt;&#xA;&lt;p&gt;I find that trackballs are superior to mice in many ways and recommend them to plenty of people. But the average user just gets a mouse, IMHO simply because they don't realize there are better options.&lt;/p&gt;&#xA;&lt;h3&gt;Except BUILT IN on Laptops&lt;/h3&gt;&#xA;&lt;p&gt;There are, however, two specific reasons that they are no longer found (and were relatively rarely found in the past) built in to laptops:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cost&lt;/strong&gt; - I don't know the specifics, but a trackball has moving parts. Moving parts cost money. A touchpad has no moving parts - it is a sealed sensor package. In fact, many touchpads are indistinguishable from the rest of the laptop bezel - just some markings printed around it to indicate that it is there. For the same reason that laptop keyboards (and bundled desktop keyboards too!) keep getting thinner - less plastic and other parts = lower cost. Trackballs do cost more as separate items too - typically much more than mice - but there it is a user choice. With a built-in pointing device, the manufacturer has to cover the cost for &lt;strong&gt;all&lt;/strong&gt; users whether they consider it an advantage worth paying for or not. In the competitive commodity world of 15.4&amp;quot; 5 lb. laptops, every penny counts.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Size&lt;/strong&gt; - Thin is in! As laptops get thinner and thinner, a few millimeters of extra height for a trackball becomes a problem. If you make the trackball too small then it loses its advantage in usability over other input devices. These are the same laptops where the extra cost would not be as big a factor - but the trackball still loses.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So why aren't trackballs more common? Because of the mouse on &lt;strong&gt;desktop&lt;/strong&gt; computers. On desktop computers, the mouse caught on better than trackballs. Maybe a more &amp;quot;natural&amp;quot; motion, maybe price, maybe competition, maybe simply because Apple made mice popular with the Mac and Microsoft copied them. So when it came to laptops, the manufacturers struggled with coming up with a substitute since a mouse doesn't work in a small fixed space. The little pointer nub was quite popular for a while - and some people still like them, though I never got the hang of it. There &lt;strong&gt;were&lt;/strong&gt; trackballs in some early laptops. But once the technology was perfected for touchpads, they won the race - no moving parts to break (or ball to pop out or clean), conceptually closer to use of a mouse, which had become popular on the desktop and while laptops were (and continue) getting thinner, screen sizes were getting bigger (and therefore the width &amp;amp; depth of the typical laptop was getting bigger rather than smaller, and the base section has to match the screen section), so there was this handy wrist-rest section in front of the keyboard that conveniently fit a touchpad. People got used to it - end of story.&lt;/p&gt;&#xA;&lt;p&gt;For those people who want to get a separate pointing device, &lt;strong&gt;especially&lt;/strong&gt; for a laptop that will be used in a confined space (as opposed to a desktop where you have plenty of mouse-moving area on the desk), I highly recommend trackballs. There is a learning curve (for those who didn't grow up playing Missile Command), but I find that people look at it funny the first time and when I show them how to use it, most (but not all) manage to learn how to use a trackball quite well within a few minutes.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-18T15:39:35.057" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8789" PostTypeId="2" ParentId="8774" CreationDate="2019-01-18T08:25:59.517" Score="1" Body="&lt;p&gt;If one wants to use a timer-tick interrupt, keyboard scanning for an 8x8 keyboard can be handled very nicely using a pair of address strobes, a couple 74LS373 or equivalent chips. eight pull-up resistors, and eight diodes.  Commodore used a VIA or CIA chip in the VIC-20 and C64 so as to gain the timers and other resources therein, but if those weren't needed a simple pair of 8-wide latches with 3-state outputs would have been sufficient (or even one latch without 3-state outputs, and one 8-bit 3-state bus driver chip).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If one doesn't want to use interrupts, the value of piggy-backing keyboard scanning onto video would likely be rather limited.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps the biggest omission on the Apple II was the lack of any way of having video trigger an interrupt.  While it would be necessary to disable the interrupt during things like floppy-drive access, having a timer tick can be nice for a lot of things.  Having a soft switch gate the vertical sync output onto IRQ, using a counter rather than a 555 to control flashing, and feeding some outputs from that counter into general-purpose I/O pins would have made many things on the Apple II far more convenient than they ended up being.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-01-18T08:25:59.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8790" PostTypeId="2" ParentId="8785" CreationDate="2019-01-18T08:35:04.967" Score="3" Body="&lt;p&gt;Source for the GEM video drivers &lt;a href=&quot;https://github.com/sam-falvo/gem3/tree/master/MRS/GEM3X/SCREENDR/DISK2OF3/COMMON&quot; rel=&quot;nofollow noreferrer&quot;&gt;is available&lt;/a&gt; - the files EGAMMRE1.A86 and EGAMMRE2.A86 contain functions to draw a filled rectangle (RECTFIL), an arbitrary line (ABLINE) and a 16x16 mouse pointer (MDRAW) on EGA/VGA hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can find a copy of Richard Wilton's &lt;em&gt;&lt;a href=&quot;https://www.amazon.co.uk/Programmers-Systems-Microsoft-programming-classic/dp/1556156413&quot; rel=&quot;nofollow noreferrer&quot;&gt;Programmer's Guide To PC Video Systems&lt;/a&gt;&lt;/em&gt;, that contains a thorough explanation of how the EGA works and provides a number of drawing functions for it.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2019-01-18T08:35:04.967" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8791" PostTypeId="2" ParentId="8787" CreationDate="2019-01-18T08:51:36.250" Score="60" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did trackballs disappear?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To start with, they didn't. They are still around and can be bought in many variations. For example, &lt;a href=&quot;https://www.kensington.com/c/products/control/trackballs/&quot; rel=&quot;noreferrer&quot;&gt;Kensington sells&lt;/a&gt; six kinds of trackball, and &lt;a href=&quot;https://www.logitech.com/en-us&quot; rel=&quot;noreferrer&quot;&gt;Logitech&lt;/a&gt; sells three. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only their time attempting to work as a general pointing device is gone.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Nub. Low-tech, cheap, compact and reliable, but miserably imprecise. Did they ever fix that? Is it even theoretically fixable or is it a limit on the precision of the human finger?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Nub itself isn't imprecise at all. At a basic level, it's a joystick with no sense for urgency (speed), so various driver profiles have been developed offering non-linear movement - this in turn is something not everyone can get along with - especially not at first.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Touchscreen. Looks great when an actor is using it for ten seconds in a movie, kills your shoulder when you try to do it all day in real life.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In fact, I really like it. Back in my &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Newton&quot; rel=&quot;noreferrer&quot;&gt;Newton&lt;/a&gt; days I was constantly hitting the CRT to acknowledge some message box - until I spent a lot of money on an early touchscreen.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Touchpad. It took a while to get the technology to work properly and even then it's awkward to use and takes up a lot of keyboard space. Modern laptops seem to have settled on it anyway, perhaps because it's thin?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In part, but also because it's more natural (see below).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Trackball. Fast, precise, easy to use, not even expensive.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If it's supposed to be fast and precise, it's anything but inexpensive.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Seems to me the trackball is the best option.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you can handle it, then yes. For most people it doesn't work. At least not from the start. Computers have been optimized (or evolved) to provide a satisfying first-time user experience over an efficient long-time usage. Basically the same process that (almost) eliminated the keyboard as #1 interactive tool, despite being in most situations faster and more exact than any pointing device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's all about the learning curve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Humans pointing somewhere don't use their fingertip to waggle around, but the whole arm and hand, while the index finger is just, well, the tip. &lt;em&gt;That's the way we are trained to do since being a toddler.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reducing this to just forearm and hand, with the finger giving the affirmation is as well trained into our &lt;a href=&quot;https://en.wikipedia.org/wiki/Motor_cortex&quot; rel=&quot;noreferrer&quot;&gt;Motor Cortex&lt;/a&gt;. That's why most people get along with a mouse without much training. It also adds that the mouse is 'glued' to the hand, so no active control for repositioning needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A touchpad comes next, as it's still pointing with the finger, but a restriction of movement needs to be learned, as well as a way to handle repositioning, as there is no haptic feedback for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even the Nub comes before the trackball, as it works by applying force in the direction one wants to move the cursor. As intuitive as a joystick, just a bit more delicate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the trackball is an awesome device, once learned to use it, the learning curve is way steeper than with any of the others, as its handling goes against our natural movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So from a motoric point of view of an untrained person (beginner) the trackball comes last. This may be quite different, once time has been invested to learn to handle a trackball on an intuitive level. But that's not how everyday interfaces have been optimized. So track balls are, nowadays, back in the realm of experienced professionals.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="851" LastEditDate="2019-01-21T09:44:42.713" LastActivityDate="2019-01-21T09:44:42.713" CommentCount="21" ContentLicense="CC BY-SA 4.0" />
  <row Id="8792" PostTypeId="2" ParentId="8787" CreationDate="2019-01-18T10:58:53.633" Score="7" Body="&lt;h1&gt;Gaming&lt;/h1&gt;&#xA;&lt;p&gt;I can't play FPS or flight simulators with a trackball because I cannot intuitively self-center them. The only games they're good for are bowling and Missile Command - because those are played on an arcade cabinet with you standing in front of it.&lt;/p&gt;&#xA;&lt;p&gt;It's a lot easier to stop a mouse on-target, then it is to stop a trackball - with a finger still on it, or having removed it. And if you freak out, all of a sudden you're looking at the sky.&lt;/p&gt;&#xA;&lt;p&gt;If I didn't game I'd still be using my trackball.&lt;/p&gt;&#xA;&lt;h1&gt;Fatigue&lt;/h1&gt;&#xA;&lt;p&gt;I had two different trackballs. One was the size of a pool ball, the other was ping-pong sized, placed beside your thumb.&lt;/p&gt;&#xA;&lt;p&gt;Pool ball: there's no where to rest your palm. And the buttons are your pinky and your thumb. Kinda wack.&lt;/p&gt;&#xA;&lt;p&gt;Thumb size: well, if you've ever used a gaming controller with thumbsticks for hours on end, I don't need to explain how that begins to suck.&lt;/p&gt;&#xA;&lt;p&gt;Switching to my middle or ring finger while using a standard mouse, instead of my fatigued index finger, isn't really an option on a 'pool ball' - and it's definitely not an option on an &amp;quot;ergonomically&amp;quot; hand shaped trackball mouse.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Mine is a freewheeling-track-nub&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's Logitech V550 Cordless Laser Mouse. It's the best combination of everything. If you push in the weighted scroll wheel it toggles into a free spin that will last entire threads. It's also a button left to right, thus a nub of sorts. The only downside is the third mouse button is separate.&lt;/p&gt;&#xA;" OwnerUserId="4220" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-19T04:52:13.897" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="8793" PostTypeId="2" ParentId="8787" CreationDate="2019-01-18T14:02:25.573" Score="3" Body="&lt;p&gt;As the other answer said, trackballs are live and well.  I use a track ball on my PC as well as Mac.   I found a fantastic brand whose trackball lets it connect with 2 different computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will add that I find trackballs hard to use for games like fornight where you need to move your player fast.  For this, I prefer a mouse.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than that I will take a trackball over mouse every chance I have.  I prefer the trackball because I get less cramping in my hand with extensive use, over most mice.&lt;/p&gt;&#xA;" OwnerUserId="10385" LastActivityDate="2019-01-18T14:02:25.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8794" PostTypeId="1" AcceptedAnswerId="8796" CreationDate="2019-01-18T14:05:07.383" Score="16" ViewCount="4763" Body="&lt;p&gt;It's an open question whether desktops would've kept using 5.25&quot; until the end of the floppy era, but laptops meant something smaller was going to be introduced; that much was essentially predetermined. The contingent historical fact was the adoption of the particular 3.5&quot; format we all remember, in preference to the many others that were contenders at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was reading &lt;a href=&quot;https://en.wikipedia.org/wiki/Floppy_disk#%E2%80%8B3_1%E2%81%842-inch_floppy_disk&quot; rel=&quot;noreferrer&quot;&gt;this Wikipedia page&lt;/a&gt; just now and came across this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;In the early 1980s, a number of manufacturers introduced smaller floppy drives and media in various formats. A consortium of 21 companies eventually settled on a ​3 1⁄2-inch floppy disk (actually 90 mm wide) a.k.a. Micro diskette, Micro disk, or Micro floppy, similar to a Sony design but improved to support both single-sided and double-sided media, with formatted capacities generally of 360 KB and 720 KB respectively.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So the way Wikipedia puts it, sounds like the decision was basically made by committee. Twenty-one companies got together, carried out a sober evaluation of all the contenders based on technical merit, manufacturing cost, which influential members already had a large investment in what, etc, then issued a verdict and so it was done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding had been a bit different. As I understood it from e.g. &lt;a href=&quot;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Hide_Under_This_Desk.txt&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; the big breakthrough for the 90 mm format that ended up winning, was getting into the Macintosh, for which Apple helped Sony debug the drives (their own Twiggy drives developed for the Lisa, never having become reliable enough). I assumed this was the reason they started being used in PC compatible laptops, which settled the matter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that version of the history is correct, the outcome was determined not so much by a grand deliberate decision from all interested parties, as by a few particular events, decisions made by a handful of individuals who were trying to solve their own short-term problems; a historical accident, chaos at work in the technical sense of the word.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which version is accurate?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10566" LastEditDate="2019-04-07T18:58:56.993" LastActivityDate="2019-04-07T19:03:30.340" Title="Why did 3.5&quot; floppies win (and not another size)?" Tags="&lt;history&gt;&lt;floppy-disk&gt;&lt;apple-macintosh&gt;&lt;sony&gt;" AnswerCount="4" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8795" PostTypeId="2" ParentId="8787" CreationDate="2019-01-18T15:02:37.587" Score="3" Body="&lt;p&gt;I'm using a trackball myself right now. I saw about 12 of them on sale at Best Buy last week. Three of my coworkers use them. I&quot;m not sure where you get that they 'went away' but they haven't. I think it's great for desk space, for precision (I love to game with it over a mouse, which I have to pick up and move back all the time) and to reduce hand fatigue.&lt;/p&gt;&#xA;" OwnerUserId="11606" LastActivityDate="2019-01-18T15:02:37.587" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8796" PostTypeId="2" ParentId="8794" CreationDate="2019-01-18T15:03:46.327" Score="23" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So the way Wikipedia puts it, sounds like the decision was basically made by committee. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And that's what it was - and what made it succeed. A standardized disk format with a drive interface compatible with existing controllers.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As I understood it, the big breakthrough for the 90 mm format that ended up winning, was getting into the Macintosh [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. For one, Apple used a Sony drive from before the standardization mentioned. While the mechanical and media part was the same, the drive did differ in its interface and operation, thus requiring dedicated controllers.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I assumed this was the reason they started being used in PC compatible laptops, which settled the matter.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;More or less. There were eventually 3 major steps and some in-between development marking this process, with IBM's use of 3.5 inch drives in their PS/2 line as the final milestone.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;In 1980, Sony developed the 3.5 inch format. Only a few computers like the HP-160 or Sony's SBC-70 used that drive.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In 1982, the 3.5 drive as we know it got defined by a joint committee. The approach followed was to use Sony's mechanical and media design, but use an interface compatible (*1) to the existing Shugart standard for 8 and 5.25 inch drives. Only the connector was turned from PCB into a pin header for size reduction. This had the advantage that all needed was a new cable to operate a 3.5 drive on existing 5.25/8 inch controllers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;1983 brought the first drives to this standard, offering 360 KiB (single sided) or 720 KiB (double sided) when operated with standard MFM controllers. Beside many small machines, a first batch of drives for MSX computers opened a door in the consumer market.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Eventually the first PC(-ish) computer to use 3.5 inch drives was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apricot_PC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apricot PC&lt;/a&gt; in 1983.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;1983/84 was when Apple adopted a drive, based on the Sony design, but incompatible with the standard, for their Mac. The deviation was to increase capacity and reliability at the same time. While it worked great, its impact on the floppy marked could be ignored as Macs didn't gain much of a market share and the drive itself wasn't sold to other manufacturers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;1985 saw Atari and Commodore adapting standard-compatible drives for their new 16-bit machines. Around the same time, 3.5 inch also established itself as &lt;em&gt;the&lt;/em&gt; standard format for MSX computers in Japan and Europe (*2). In combination, these home machines created a huge user base lowering cost of drives and media at and below existing 5.25 inch drives.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;1987 saw IBM introduce their PS/2 line with 1440 KiB 3.5 inch drives (doubled as HD) as standard. Even though PS/2 sales were, lets say, less than optimal, PC manufacturers rushed to embrace the 'new' format to show their advancement.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Shortly thereafter (1988 or 1989, depending on source) sales of 3.5 inch drives surpassed 5.25 sales ... &lt;strong&gt;and the rest is history&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;oh, and then there was ED (2880 KiB) in 1990, but that only caught on in Japan, despite IBM offering some PS/2 with ED drives.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Here hides the true secret, compatibility. It already worked well, enabling the move from 8 to 5.25 inch. At the time the 3.5 was designed, many new drive variations between 2 and 4 inch were developed (&lt;a href=&quot;https://en.wikipedia.org/wiki/Floppy_disk_variants#IBM_DemiDiskettes&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM's Demidrive&lt;/a&gt; being a good example). Most had their own 'way' improved interfaces. None got a large distribution - except those using a Shugart compatible interface. The 3 inch is a great example that worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - MSX2 made the 3.5 inch drive standard. 5.25 were still supported, but all manufacturers switched to 3.5 for their new machines.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-01-23T13:49:06.900" LastActivityDate="2019-01-23T13:49:06.900" CommentCount="27" ContentLicense="CC BY-SA 4.0" />
  <row Id="8797" PostTypeId="2" ParentId="8794" CreationDate="2019-01-18T15:19:24.460" Score="6" Body="&lt;p&gt;This is covered in one of the major Mac history works, although I can't recall specifically which one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Jobs was putting together his supplier list the 3.5 had been standardized, as Raff notes, but you still had lots of companies pushing their own formats. Machines with all of these could be found on the market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jobs went to Japan to visit with the various manufacturers to see where they were, I don't recall anything suggesting he had made up his mind on the format (other than &quot;no 5.25&quot; anyway).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The account notes that in some cases he would be presented with mock ups, and in one case a block of material that was indicative of the size and shape of the proposed device. Apparently he savaged them in these situations, with the book joking that they went away to commit hari-kari after these meetings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only Sony had an actual production-quality drive ready to go at the production numbers he demanded. His numbers proved overly optimistic, but the rest is history.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems the history is similar to USB in many ways. USB was going to happen sooner or later, but the iMac certainly helped jump-start the process.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-01-18T15:19:24.460" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8798" PostTypeId="2" ParentId="8787" CreationDate="2019-01-18T15:25:10.923" Score="10" Body="&lt;p&gt;Dirt is another issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a mouse, the hole where the ball is exposed is pointed down and stuff naturally falls out. On a trackball it naturally falls in. Goop, especially skin oils, gets stuck to the tracker wheels in either case, but general dirt, crumbs and fuzz is a bigger problem on trackballs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arcade machines had the advantage that they sort of floated in the case so the area under the ball was open and the crap just fell into the chassis. In the case of desktop trackballs, where the case was wrapped tightly, it was a bigger issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A friend who did DTP for a living (remember those days?) had cleaning her trackball down to an art, flipping, opening, shaking and then back together in a single fluid motion.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-01-18T15:25:10.923" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8799" PostTypeId="2" ParentId="8787" CreationDate="2019-01-18T15:56:08.670" Score="8" Body="&lt;p&gt;As other have noted trackballs aren't dead (&quot;disappeared&quot;).&#xA;But compared to other input methods trackballs are indeed much less popular or widespread as they once were.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cost, scale, competing products, path dependencies and consumer psychology are the reasons for this development&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trackballs are great. They added a cool, effective, efficient way to move a pointer on screen. So did the mouse. Which is 'better'? That's largely &lt;a href=&quot;http://www.safecomputingtips.com/best-ergonomic-mouse/ergonomic-mouse-vs-trackball/&quot; rel=&quot;noreferrer&quot;&gt;opinion&lt;/a&gt;. I have one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both devices cost money to buy. The trackball is in use since &lt;a href=&quot;https://en.wikipedia.org/wiki/Trackball&quot; rel=&quot;noreferrer&quot;&gt;1946&lt;/a&gt; the computer mouse is &lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_mouse&quot; rel=&quot;noreferrer&quot;&gt;much younger&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point is: a trackball needs training to use it effectively &lt;em&gt;and&lt;/em&gt; efficiently.&#xA;But so does a mouse. It also 'needs training' for real first timers (remember intro-screens, handbooks explaining how it works; like 'point', 'click', 'hold' and 'drag'?  Later even intro-videos, now still around for trackpad gestures etc). So this is really the cheap mouse being 'good enough' and training a user for the &quot;wrong&quot; kind of device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The learning curve for a trackball is probably not much steeper, if any, than for a mouse for a novice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is much like people reluctant to switch from QWERTZ to Dvorak or Neo keyboard layouts. Fast 4-finger typists are equally reluctant to really learn 10-finger blind typing, as they are initially even slowed by the new method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.billbuxton.com/inputTimeline.html&quot; rel=&quot;noreferrer&quot;&gt;Once&lt;/a&gt; companies &lt;a href=&quot;http://www.trackballworld.com/trackball-history.aspx&quot; rel=&quot;noreferrer&quot;&gt;like Apple&lt;/a&gt; delivered their computers &lt;em&gt;with&lt;/em&gt; a mouse to a public not used to anything else but keyboards or awkward joysticks, this set a path to lower the cost for manufacturing mice and training users to use a mouse. Switching 'back' (to the conceptually older and at least equally efficient device) was from then on only for the really dedicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You witness the same process now by each and everyone &lt;a href=&quot;https://www.researchgate.net/publication/296154053_Of_mice_and_men_trackballs_and_touchscreens&quot; rel=&quot;noreferrer&quot;&gt;adding 'touch'&lt;/a&gt; to devices that do not benefit from it (TouchBar anyone?). This devolution towards the lowest common denominator is great for perfect neophytes. A two-year-old now handles tablets with ease. That this doesn't foster intelligent development &lt;em&gt;and&lt;/em&gt; hampers efficient methods of inputting in the future is a cost we seem to enjoy paying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the general considerations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But with laptops specifically: yes, then it's &lt;em&gt;now&lt;/em&gt; about &lt;a href=&quot;https://smallbusiness.chron.com/laptops-use-touchpad-rather-trackball-69161.html&quot; rel=&quot;noreferrer&quot;&gt;thinness&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a &lt;a href=&quot;https://www.zdnet.com/article/trackballs-that-i-have-known-and-loved-a-history-in-hardware/&quot; rel=&quot;noreferrer&quot;&gt;trackball&lt;/a&gt; to be anywhere near ergonomic, it has to be of a certain &lt;a href=&quot;https://thewirecutter.com/reviews/best-trackballs/&quot; rel=&quot;noreferrer&quot;&gt;size&lt;/a&gt;. Which can be shrunk only so far.&lt;br&gt;&#xA;Compare these two iterations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MZRlG.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MZRlGs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/ayDWV.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ayDWVs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both from Apple. The first is the pointing device from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Portable&quot; rel=&quot;noreferrer&quot;&gt;Macintosh Portable&lt;/a&gt; from 1989. The device was not loved, but very workable, and its size was inconspicuous compared to the rest of this wonderful behemoth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Mighty_Mouse&quot; rel=&quot;noreferrer&quot;&gt;'Mighty Mouse'&lt;/a&gt; from 2005. This is a univerally loathed device, and although it was just designed to replace a scrolling wheel and not even work as a real trackball, it didn't do anything well. And it clogged up fast. Needing a cleaning every time I had come across one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Within the same space a gigantic Portable trackball occupies in two dimensions, you get a depth of a few millimeters in laptops for a trackpad. Even the tiny nipple on the mouse above adds more depth. And that tiny one is not useable, not serviceable, despite in need for service frequently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means for laptops who should have an integrated pointing device you look at a very uneven battle: a trackbal needing quite some space and re-training by the user, vs a trackpad that needs very little space and also less re-training for (otherwise) experienced users, and even the feeling of intuitiveness for neophytes.&lt;/p&gt;&#xA;" OwnerUserId="6802" LastEditorUserId="6802" LastEditDate="2019-01-18T21:56:41.910" LastActivityDate="2019-01-18T21:56:41.910" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8800" PostTypeId="1" AcceptedAnswerId="8802" CreationDate="2019-01-18T17:41:57.177" Score="3" ViewCount="351" Body="&lt;p&gt;The ROM IRQ routine at &lt;code&gt;$EA31&lt;/code&gt; is usually trigggered by the timer interrupt 60 times a second. Is it possible to switch the interrupt source to VIC and still use the same routine? If yes, which memory locations need to be changed for this?&#xA;I think the interrupt type for timer and VIC is the same, but I'm not sure if the pending interrupt would be cleared by the handler.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2019-01-18T18:59:26.820" Title="Is it possible to switch the interrupt source of the C64 to VIC without changing the IRQ routine?" Tags="&lt;commodore-64&gt;&lt;interrupt&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8802" PostTypeId="2" ParentId="8800" CreationDate="2019-01-18T18:48:24.927" Score="4" Body="&lt;p&gt;That's not possible, because the KERNAL's routine will acknowledge the IRQ at the CIA#1, not at the VIC (it assumes the CIA#1 is the IRQ source). So the least you have to do is to acknowledge the IRQ at the VIC yourself (see minimal code example), apart from that, the original routine will work.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        lda #$7f&#xA;        sta $dc0d       ; disable CIA#1 IRQs&#xA;        lda $dc0d       ; acknowledge pending IRQ at CIA#1 just in case&#xA;        lda #&amp;lt;myisr&#xA;        sta $314&#xA;        lda #&amp;gt;myisr&#xA;        sta $315        ; set KERNAL IRQ vector to new routine&#xA;        lda #$1b&#xA;        sta $d011&#xA;        lda #$0&#xA;        sta $d012       ; configure raster IRQ at raster line 0&#xA;        lda #$1&#xA;        sta $d01a       ; enable VIC IRQ&#xA;        rts&#xA;&#xA;myisr:  asl $d019       ; acknowledge IRQ at VIC&#xA;        jmp $ea31       ; to original KERNAL routine&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Side note: on a PAL machine, this will cause the system IRQ to run at 50Hz, rendering the &quot;system clock&quot; &lt;code&gt;TI$&lt;/code&gt; completely unusable.&lt;/p&gt;&#xA;" OwnerUserId="7040" LastEditorUserId="7040" LastEditDate="2019-01-18T18:59:26.820" LastActivityDate="2019-01-18T18:59:26.820" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8804" PostTypeId="1" AcceptedAnswerId="8808" CreationDate="2019-01-18T20:11:11.930" Score="1" ViewCount="246" Body="&lt;p&gt;When first modems for PCs started to appear in the USSR in late 1980s, they usually were in the form of an ISA card, and supported a bare minimum of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Hayes_AT&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hayes AT&lt;/a&gt; commands. Given the quality of Soviet phone lines, and, most importantly, pulse dialing which introduced noise in all wires in a bundle, using such modems without error correction at speeds greater than 300 baud was next to impossible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time modems with hardware error-correction (MNP) support were quite expensive; I remember that for quite a while our office had a cheap 1200 baud modem card and an MS-DOS MNP driver (&lt;code&gt;MNP.SYS&lt;/code&gt; or some such, not particularly large, maybe a few Kb) which allowed to connect to the &lt;a href=&quot;https://en.wikipedia.org/wiki/DEMOS_%28ISP%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEMOS's&lt;/a&gt; MNP-capable modem in the error-correcting mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reading about the &lt;a href=&quot;https://en.wikipedia.org/wiki/Microcom_Networking_Protocol&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microcom Networking Protocol&lt;/a&gt;, I don't quite understand how the software driver was able to negotiate the protocol with a &quot;dumb&quot; modem:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;After connection to the remote modem, Microcom modems played a special tone into the line and listened for a response; if a proper tone was received in reply, the modems entered their error-correcting state. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;How exactly did that software MNP driver work?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2019-01-20T00:13:53.227" Title="How was the modem MNP protocol implemented in software?" Tags="&lt;software&gt;&lt;modem&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8805" PostTypeId="1" AcceptedAnswerId="8807" CreationDate="2019-01-18T20:21:29.513" Score="4" ViewCount="273" Body="&lt;p&gt;Ages ago I played a scifi game on the Apple IIgs where you could sell body parts for cash. The game involved travel between planets and selling parts of yourself was a last ditch option to raise money for other things. The game was played on an Apple IIgs, but might have been a regular Apple II game. Could someone come up with a list of possible candidates? &lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2019-01-18T20:50:16.247" Title="A game where you could sell body parts for cash" Tags="&lt;apple-ii&gt;&lt;identify-this-game&gt;&lt;apple-iigs&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8806" PostTypeId="2" ParentId="8787" CreationDate="2019-01-18T20:30:31.213" Score="4" Body="&lt;p&gt;One disadvantage is that they are hard to use for users that prefer using a mouse at high acceleration and with the wrist resting - of course using it with a fingertip like a mouse wheel is possible, but rather awkward (especially when the trackball is not made very precisely and tends to seize and jam a bit)....&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2019-01-18T20:30:31.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8807" PostTypeId="2" ParentId="8805" CreationDate="2019-01-18T20:50:16.247" Score="5" Body="&lt;p&gt;In &lt;a href=&quot;https://en.wikipedia.org/wiki/Neuromancer_(video_game)&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Neuromancer&lt;/em&gt;&lt;/a&gt; -- a 1988 game which was available on a variety of platforms including the Apple iiGS -- the player can sell their body parts for cash in the &quot;Body Shop&quot;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XQ3b4.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XQ3b4.gif&quot; alt=&quot;&amp;quot;Can I be of service? Would you like to sell a body part?&amp;quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="461" LastActivityDate="2019-01-18T20:50:16.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8808" PostTypeId="2" ParentId="8804" CreationDate="2019-01-18T20:56:20.723" Score="6" Body="&lt;p&gt;(Caveat, this is from memory)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;After connection to the remote modem, Microcom modems played a special tone into the line and listened for a response; if a proper tone was received in reply, the modems entered their error-correcting state.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Completely and utterly rubbish. There was no special tone. It was a bunch of characters, some of them encoded in unusual manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Steps were as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Calling modem calls&lt;/li&gt;&#xA;&lt;li&gt;Called modem accepts call&lt;/li&gt;&#xA;&lt;li&gt;Physical connection will be established (using various means to identify the speed)&lt;/li&gt;&#xA;&lt;li&gt;Connection established&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Caller sends DC1(e) X'FF' [X'FF'] DC1(o) X'FF' [FF] &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DC1 is the ASCII device Control 1, X'11' (*1)&lt;/li&gt;&#xA;&lt;li&gt;DC1(e) is DC1 with even parity&lt;/li&gt;&#xA;&lt;li&gt;DC1(o) is DC1 with odd parity&lt;/li&gt;&#xA;&lt;li&gt;X'FF' is 8 bits of one - send once or twice.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Called modem answers either with&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ASCII 'EC' if error correction is available, or&lt;/li&gt;&#xA;&lt;li&gt;ASCII 'E0' if error correction is disabled, or&lt;/li&gt;&#xA;&lt;li&gt;Not at all if the called modem is not capable of error correction&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;This is followed by further handshake to define the level of correction and other parameters.&lt;/li&gt;&#xA;&lt;li&gt;Agreed parameters are set (like synchronous communication, framing, etc.)&lt;/li&gt;&#xA;&lt;li&gt;Framed communication starts&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The whole protocol was a driver layer atop an existing connection below a user side transfer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All an MNP driver (for a non-MNP-modem) had to do was to handle above sequences ahead of the application - and ofc, after establishing an error corrected connection manage the packetization, retry and so on.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Also known as CTRL-Q or XON - Normally used to release a stopped connection (XON/XOFF protocol), here used as a trick to create a noticeable message even if there is some driver handling XON/XOFF on low level. Sending it with parity on and off was meant to get it over in an identifiable manner (as parity error) at least once, no matter what parity was chosen beforehand.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-01-20T00:13:53.227" LastActivityDate="2019-01-20T00:13:53.227" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8809" PostTypeId="2" ParentId="8781" CreationDate="2019-01-18T21:55:21.640" Score="3" Body="&lt;p&gt;&lt;strong&gt;Personal experience:&lt;/strong&gt; &lt;em&gt;your mileage may vary&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had an 15K RPM U320 disk drive salvaged from a year 2004 Dell Precision workstation and thought I could replace the one in a year 2000 IBM Intellistation M PRO that has an integrated Adaptec 2940 with three ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though the drive had jumpers to downgrade the size/protocol and effectively showed up at boot, it actually never booted. I believe &lt;em&gt;@Raffzahn&lt;/em&gt; is right, if not explicitly said in the docs it's already a good indicator about the compatibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We tend to over-estimate the 'loose' compatibility of older devices in comparison to more recent ones, which are more tolerant/capable of handling 'mostly following the standard' devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's another good example about this workstation, replacing the outdated ATI by a better Matrox G400: absolutely nowhere in the docs I could find that PCI parity must be enabled for the G400 to work correctly. (it took me a while to figure that one out)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;From a practical standpoint:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;it will depend of your HBA&lt;/li&gt;&#xA;&lt;li&gt;it will depend of your device&lt;/li&gt;&#xA;&lt;li&gt;their firmware versions, there can be more recent versions bug-free, but will you be able to flash them is another story (not always possible in old hardware)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3282" LastActivityDate="2019-01-18T21:55:21.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8810" PostTypeId="1" AcceptedAnswerId="8958" CreationDate="2019-01-18T21:56:06.050" Score="5" ViewCount="2123" Body="&lt;p&gt;My CMOS setup correctly recognizes the geometry of the drive, (but does not support LBA). And FDISK in DOS 6.22 only recognizes 504MB.  FDISK even shows the size of the primary partition as roughly 1GB out of a possible 504MB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is that while DIR shows ~500MB used and ~500MB free, it gives &quot;Sector not found&quot; and other errors when trying to write basically anything more (since I seem to have reached the end of the readable 504MB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to use a hard drive with more than 1024 cylinders when using a BIOS that doesn't support LBA?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would an IDE controller card be able to bypass this limit?&lt;/p&gt;&#xA;" OwnerUserId="7160" LastActivityDate="2021-05-21T17:51:24.963" Title="Can DOS 6.22 recognize more than 504MB when the BIOS only supports CHS?" Tags="&lt;ms-dos&gt;&lt;hard-disk&gt;&lt;bios&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8811" PostTypeId="2" ParentId="4992" CreationDate="2019-01-18T22:32:05.887" Score="3" Body="&lt;p&gt;Aside from the licensing, computer manufacturers have always had a &quot;nuclear option&quot; of asking another CPU maker to make an enhanced 6502 clone.  &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Because of the Z-80&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A different manufacturer (Zilog) took an established design (the 8080) from a different company (Intel) and made a new processor that runs all its same instructions the same ways, but also had a greatly expanded architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think about what that means for MOS.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nothing would prevent another manufacturer with no aspirations to the home PC business &lt;em&gt;(for instance, Motorola)&lt;/em&gt; from producing a new CPU which honored the 6502 command set, yet extended it in a substantial and constructive way.  If you know the 6502 address map, you know it has lots of holes, including places where the map would make you expect an instruction to be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new chip could also do housekeeping functions, such as refreshing dynamic RAM (as the Z80 does) or build in functions favorable to gaming like &quot;wait for horizontal blank&quot; or minimal bit-blitting.  Lots of opportunity to optimize a 6502 for PC use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the Z-80 chip had a dramatically different pinout than the 8080.  For instance Digital Group's systems had a changeable CPU board, and their Z80 CPU board looks nothing like the 8080 board. Could a competitor possibly make their 6502 clone the same physical pinout as the 6502 without getting in trouble? Yes it could... &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Because of the 6800&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When MOS laid out the 6502 pinout, they were not random.  They chose the same basic pinout as Motorola's 6800.   As a result, they didn't need to sell 6502 prototyping boards, you could easily adapt 6800 boards.  It was also an enticement for PC and embedded system makers to switch CPUs.  Digital Group's 6502 CPU board was one and the same as their 6800 board, the differences were trivial enough the board could be jumpered for one or the other. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So MOS was in no position whatsoever to complain if a competitor made their clone electrically compatible with the 6502. &lt;em&gt;Especially if it was Motorola.&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So with the market threat out there of someone usurping the 6502's market share, they didn't really have any option to make it proprietary. I am surprised they didn't do the converse, make a proprietary, enhanced version specifically for Commodore use. &lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2019-01-19T20:27:21.453" LastActivityDate="2019-01-19T20:27:21.453" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8812" PostTypeId="2" ParentId="8794" CreationDate="2019-01-18T23:47:37.433" Score="0" Body="&lt;p&gt;The 3.5&quot; floppy drive was first introduced to the market in 1983 with a single sided version with a 360K capacity. The following year double sided disks were introduced that doubled the capacity to 720K. Eventually the capacity was increased to 1.44M, and even a short lived 2.88M version. Even though these drives were available, it took a long time for them to be adopted as the standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 5.25&quot; floppy, which displaced the earlier 8&quot; drives became the de facto standard for over a decade. Most major software companies such as Microsoft were shipping their software on the 5.25&quot; floppy long after the 3.5&quot; drives were available. Most IBMs, and IBM compatibles did not have a 3.5&quot; drive until the early 1990s, and at that time, companies wanted to maintain backward compatibility with existing hardware. Since most software was still on 5.25&quot;, there was not much a need to have both drives, since a floppy drive at that time was an expensive option. Companies began the shift to the 3.5&quot; floppy around 1990. They were eventually phased out by the mid 90s around the time the Pentium was released.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the first 3.5&quot; floppies I owned was the game Rampage which actually shipped with the game on a 5.25&quot; floppy and a 3.5&quot; floppy. In fact MS-DOS 5.0 which was released in 1991 shipped on a 5.25&quot; floppy!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sure, Apple had a 3.5&quot; floppy many years before. But that was not what really forced the change. Apple floppies had their own proprietary file format which were not compatible with a PC. They also had a very small market segment compared to the PC. What really helped drive it is the form factor of the PC changed. Original IBMs had a full size AT board, which was massive. In 1995, the ATX form factor was released, which was significantly smaller. By this time the 5.25&quot; drive has been abandoned for the 3.5&quot; drives because they took up significantly less space. The CD-ROM was also becoming a popular option, and was installed in the drive bay made originally designed for the 5.25&quot; floppy. The 5.25&quot; floppy was already in decline for a few years before, but the CD-ROM effectively killed it.&lt;/p&gt;&#xA;" OwnerUserId="10510" LastActivityDate="2019-01-18T23:47:37.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8813" PostTypeId="1" AcceptedAnswerId="8816" CreationDate="2019-01-19T04:21:43.147" Score="3" ViewCount="514" Body="&lt;p&gt;There were a handful of Konami games on the Famicom that had additional sound chips (VRC6, VRC7, etc.) to enhance the audio of the games they were used in. Considering that the Famicom got many Konami games as well as the MSX did, why wasn't the SCC ever used as a Famicom audio expansion? What would the limiting factors be, or did it just not come to mind when audio expansions were needed?&lt;/p&gt;&#xA;" OwnerUserId="11624" LastEditorUserId="10260" LastEditDate="2019-01-19T06:05:13.647" LastActivityDate="2019-01-19T08:58:49.380" Title="Why didn't Famicom games use the Konami SCC for expansion audio?" Tags="&lt;nes&gt;&lt;sound&gt;&lt;msx&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8814" PostTypeId="2" ParentId="8810" CreationDate="2019-01-19T05:35:31.823" Score="14" Body="&lt;p&gt;MS-DOS 6.22 only uses CHS (cylinder/head/sector) addressing to access disks, so it doesn't really matter if the BIOS supports LBA addressing.  The CHS BIOS interfaces MS-DOS uses for disk access support drives up to just under 8 GiB, so this also about the limit for MS-DOS. (A bug in MS-DOS means that it crashes if a drive has 256 heads, so its limit is a bit smaller than the BIOS limit but still almost 8GB.)&lt;/p&gt;&#xA;&lt;p&gt;The limit you've encountered is due to the intersection of the BIOS and IDE limits on CHS addressing being much less than either individually. The BIOS supports addressing up to 1024 cylinders, 256 heads and 63 sectors, while IDE supports up to 65536 cylinders, 16 heads and 255 sectors.  Taking the minima of these three pairs (1024 × 16 × 63) gives you the 504 MiB limit.&lt;/p&gt;&#xA;&lt;p&gt;To get around the 504 MiB limit many BIOSes supported CHS translation, where they converted BIOS CHS addresses to IDE CHS addresses using some sort of transformation. Apparently though your BIOS doesn't support this, otherwise the drive probably would've worked. You should check to see if your BIOS has some sort of &amp;quot;large&amp;quot; drive support you can enable.&lt;/p&gt;&#xA;&lt;p&gt;If you're not booting off the hard drive then I think there were drivers for MS-DOS that performed CHS translation. According an old Microsoft KB article (&lt;a href=&quot;https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/126855&quot; rel=&quot;nofollow noreferrer&quot;&gt;KB126855&lt;/a&gt;) I found &amp;quot;SpeedStor from Storage Dimensions, EZ-Drive from Micro House, and Disk Manager from OnTrack Computer Systems&amp;quot; are possibilities.  An IDE controller won't work unless it has its own boot ROM, one that can perform CHS translation.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorUserId="15334" LastEditDate="2021-05-21T17:51:24.963" LastActivityDate="2021-05-21T17:51:24.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8815" PostTypeId="2" ParentId="4992" CreationDate="2019-01-19T08:40:29.980" Score="0" Body="&lt;p&gt;Aside from legal and contractual obligations that Commodore had acquired with MOS Technology and very probably had to continue:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare the Commodore Computers with their 6502 to another Computer that used a CPU that never really took off in the Home Computer Market like the TI 99/4A and its TMS9900: One of the reasons the TI99 wasn't so successful was it didn't have a well-known CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In times when nobody &lt;em&gt;expected&lt;/em&gt; (or could expect) compatibility between various vendor's machines, an at least &lt;em&gt;common&lt;/em&gt; and well-known CPU with a certain market positioning was a much stronger selling point for a computer than we might assume today. Computers that didn't feature a relatively well-known or exotic CPU commonly only reached pretty marginal sales, so creating a high market penetration for the 6502 CPU actually was a strong argument for Commodores own computers. Examples that did not so well are the TI99, the Thomson range mainly based on the 6809, or the Dragon.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-01-19T08:51:38.153" LastActivityDate="2019-01-19T08:51:38.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8816" PostTypeId="2" ParentId="8813" CreationDate="2019-01-19T08:58:49.380" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;There were a handful of Konami games on the Famicom that had additional sound chips (VRC6, VRC7, etc.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To start with, they weren't sound chips in first place, but mappers. And they where available as their standard version, as well as with additional sound functionality. A &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/Mapper&quot; rel=&quot;nofollow noreferrer&quot;&gt;mapper&lt;/a&gt; handles various aspects of memory access from the console and maps them on ROM/RAM areas of the cartridge.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Considering that the Famicom got many Konami games as well as the MSX did, why wasn't the SCC ever used as a Famicom audio expansion?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;SCC (&lt;a href=&quot;https://www.msx.org/wiki/SCC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sound Creative Chip&lt;/a&gt;) in contrast is a pure sound chip. Using it in a Famicom game would require a mapper in addition, making two ASICs in one cardrige.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Using a mapper with integrated sound is considerable cheaper than a mapper plus a seperate sound chip - and using one without where possible even cheaper.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's the reason why there are the basic &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/VRC6&quot; rel=&quot;nofollow noreferrer&quot;&gt;VRC6&lt;/a&gt;/&lt;a href=&quot;https://wiki.nesdev.com/w/index.php/VRC7&quot; rel=&quot;nofollow noreferrer&quot;&gt;7&lt;/a&gt; for games that need their mapping functionality and &lt;em&gt;in addition&lt;/em&gt; &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/VRC6_audio&quot; rel=&quot;nofollow noreferrer&quot;&gt;VRC6&lt;/a&gt;/&lt;a href=&quot;https://wiki.nesdev.com/w/index.php/VRC7_audio&quot; rel=&quot;nofollow noreferrer&quot;&gt;VRC7&lt;/a&gt; &lt;strong&gt;with integrated audio&lt;/strong&gt; for games that also needed better sound. In fact, they even come in variations depending on the game, like VRC6a/b.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-01-19T08:58:49.380" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8817" PostTypeId="2" ParentId="8781" CreationDate="2019-01-19T09:10:53.927" Score="7" Body="&lt;p&gt;Almost all SCSI devices are either 8-bit wide and have a 50-pin connector with single-ended (open collector, no differential drive) electrical signals, or&#xA;are 16-bit wide, using LVD differential signalling AND having a fallback capability&#xA;to work with single-ended drives if the wiring harness connects the right sense pins.&lt;/p&gt;&#xA;&lt;p&gt;There are 68-pin data connectors (two types) standardized for the wide SCSI, as well as some 80-pin types that have data and power and configuration functions.  The 80-pin SCSI SCA connector disk drives have no jumpers to be set, all that&#xA;configuration being on the other side of the connection (usually an interposer circuit board adapter).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Will the device figure out that my host can only use 8 bits?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, any transfer has a parity bit for each eight data bits; if parity is wrong&#xA;for the 'extra' wires, the transfer is eight-bit, and if it is right, there&#xA;are 16-bits (and in theory, 24-bit and 32-bit work similarly, but such hardware&#xA;is uncommon).   The narrowest device on the bus determines how many bits are&#xA;transferred.&lt;/p&gt;&#xA;&lt;p&gt;Now, it gets complicated.&lt;br /&gt;&#xA;The electrical interface can be open-collector TTL (single-ended = SE), or high-voltage differential (HVD), or low-voltage differential (LVD).   This is indicated by a SCSI symbol&#xA;with slightly different character &lt;a href=&quot;https://iec.net/home/technical-information/small-computer-system-interface-scsi/scsi-symbols/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCSI symbols&lt;/a&gt; depending on the device,&#xA;and finding the symbol will greatly facilitate understanding the result of connection.   For SCSI-2 and later, pin #16 = &amp;quot;DIFFSENS&amp;quot; of the 68-pin connector will&#xA;read 0.0V (or ground) on SE drives, +5V on powered HVD systems, and +2.5V on&#xA;powered LVD systems; if a HVD or LVD drive senses incompatibility on that pin,&#xA;it either turns output drive OFF, or converts its interface to SE if it has&#xA;that capability (and it will work, but at a slower rate).&lt;/p&gt;&#xA;&lt;p&gt;Well-designed&#xA;devices do NOT blow anything out, if connected to incompatible hardwares, unless&#xA;they pre-date the adoption of this convention.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What do I have to do, know, or find out if I want to connect an Ultra-320 SCSI hard drive...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You need power connection, data cable to a controller, and you need to set switches/jumpers to give each SCSI device a unique address.    The addresses are 0 to 7 for the 8-bit units, 0-15 for the 16-bit ones, and usually #7 is the host&#xA;controller (the computer).  For a Macintosh, #0 was the factory boot disk,&#xA;and #3 was the CD or DVD drive.  Look for jumpers (&amp;quot;A0&amp;quot;, &amp;quot;A1&amp;quot;...), or sometimes a case will have&#xA;provision to plug a thumbwheel switch with numeral-in-window readout.   All three jumpers OUT on a SE 8-bit bus signifies ID = 0; A0 plus A1 jumper sets ID =3.&lt;/p&gt;&#xA;&lt;p&gt;Lastly, you must have terminators on the bus; one terminator will be OK on a&#xA;bus four inches long or less (that's how a toaster-Mac is wired), but a second&#xA;is required on the distal end of longer bus cables; often these are resistor packs&#xA;to be drive-mounted in sockets, on modern disks they are logically switchable (so that&#xA;the SE/LVD dual devices can operate) and require a jumper setting.  There are&#xA;feedthrough external terminators, that take power from the bus wiring, but&#xA;one can overuse a bus-power source.&lt;/p&gt;&#xA;&lt;p&gt;Fuses may blow if three or more terminators get connected.   Don't do that.&lt;/p&gt;&#xA;&lt;p&gt;The terminators may require terminator power jumpers, which do NOT disconnect&#xA;terminator resistors, only select a suitable power source.   If there&#xA;are resistor packs on a non-termination disk, they ought to be removed.&#xA;If an external disk has two connectors, you can apply an external terminator&#xA;on the second connector, because terminator power can be connected through&#xA;the data cable (but only in ONE PLACE, you want to know where the jumpers all are).&#xA;It is common for internal cables to have one terminator ON THE CABLE to connect a number&#xA;of terminator-less drives to a terminator-equipped host interface.&#xA;&lt;strong&gt;important&lt;/strong&gt;- terminators are different for LVD, SE, etc., and you need&#xA;compatibility of the terminator as well as of the devices.&lt;/p&gt;&#xA;&lt;p&gt;On elderly (1990s) Macintosh systems, gigabyte RAID was just fine on SCSI&#xA;hardware.   Other OS'es may have other features, and disk format limitations are usually present in software.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastEditorUserId="7497" LastEditDate="2020-10-27T19:53:15.753" LastActivityDate="2020-10-27T19:53:15.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8818" PostTypeId="2" ParentId="301" CreationDate="2019-01-19T09:20:22.927" Score="1" Body="&lt;p&gt;Get uefwalk from &lt;a href=&quot;http://regregex.bbcmicro.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; or elsewhere.&#xA;Then run:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;./uefwalk --output=bitstream in.uef |&#xA;./kleen/bitclean -i -|&#xA;aplay -f cd -c 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Replace &lt;code&gt;aplay&lt;/code&gt; with &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sox -t raw -c 1 -L -b 16 -e signed -r 44100 - -t wav out.wav&lt;/code&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;if you want to save the output rather &#xA; than play it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experience this has proved perfectly reliable at getting data into a BBC Micro.  I imagine Electrons are similar, though I don't have one to test on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that many UEF files are gzipped, so you may need to rename them to have a &lt;code&gt;.gz&lt;/code&gt; suffix then gunzip them before uefwalk will read them.&lt;/p&gt;&#xA;" OwnerUserId="10207" LastActivityDate="2019-01-19T09:20:22.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8819" PostTypeId="1" AcceptedAnswerId="8820" CreationDate="2019-01-19T10:04:23.173" Score="3" ViewCount="2351" Body="&lt;p&gt;This entirely-typical-of-the-era (other than mysteriously missing its EAR socket) tape recorder from 1984 was the &quot;standard&quot; type of tape deck for home computer data storage in the UK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They could be battery powered, had a large mono speaker and tinny inbuilt microphone, carry handle, and a volume control on the side along with sockets for earphone output, microphone input and &quot;remote&quot; input, where an external device could stop or start the tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When did this particular form factor and feature set evolve, and what did people use them for before their heyday as a home computer peripheral?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q0Ld1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q0Ld1.jpg&quot; alt=&quot;Dixons TR12 cassette recorder&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10207" LastActivityDate="2020-10-30T21:15:11.470" Title="When and why did tape recorders acquire a &quot;remote&quot; input?" Tags="&lt;cassette-tape&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8820" PostTypeId="2" ParentId="8819" CreationDate="2019-01-19T10:21:53.393" Score="12" Body="&lt;p&gt;My father had a battery operated tape recorder bought in Singapore in the 1970s. Their appeal was that they were portable recording devices. A microphone with a long lead would plug into the mic and rem sockets. The microphone would have a switch on the side which could be used to pause the recording or playback of the tape.&#xA;Journalists, academics etc would put the recorder in a bag and use the mic to start and stop the recording.&#xA;Before this, the main home recording technology was reel to reel tape machines, which were very heavy and large because of the size of the reels.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2020-10-30T21:15:11.470" LastActivityDate="2020-10-30T21:15:11.470" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8822" PostTypeId="2" ParentId="8787" CreationDate="2019-01-19T12:29:53.187" Score="1" Body="&lt;p&gt;There are several types of interaction between pointing devices and displayed information. The first three that come to mind are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Point and click&lt;/li&gt;&#xA;&lt;li&gt;Point and drag (moving, sizing)&lt;/li&gt;&#xA;&lt;li&gt;Point and paint (selecting multiple, adjacent objects (including selection of text))&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;All devices mentioned by the OP are good at point and click. The trackball is good at reaching the extremities of the screen rapidly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where the mouse has the advantage over the other methods is performing interactions 2 and 3 with one hand. Holding a button with the thumb, it becomes more difficult to position a trackball or nub accurately (partially dependent on the spacing compared with hand size). With a mouse, positioning is unaffected by whether the button is held.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The touchpad is a natural choice for laptops because it's cheap, has no moving parts and fits nicely in the space available on models with larger screens.&lt;/p&gt;&#xA;" OwnerUserId="4160" LastActivityDate="2019-01-19T12:29:53.187" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8825" PostTypeId="1" CreationDate="2019-01-19T17:30:14.563" Score="2" ViewCount="1441" Body="&lt;p&gt;I have connected a USB external floppy drive to my Macbook Pro (OSX El Capitan). &#xA;I am unable to &quot;view&quot; the external drive, and hence unable to access the floppy content. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have inserted a floppy, and saw a led turn on briefly. Have checked what Volumes are mounted (using terminal command) and do not see any volume that could correspond to the USB external drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea how to resolve this first step problem?&lt;/p&gt;&#xA;" OwnerUserId="11631" LastEditorUserId="276" LastEditDate="2019-01-19T18:38:12.693" LastActivityDate="2019-01-25T07:57:14.030" Title="How to read old 3.5&quot; Macintosh formatted floppies on a MacBookPro" Tags="&lt;floppy-disk&gt;&lt;apple-macintosh&gt;&lt;apple&gt;&lt;mac-os-classic&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8826" PostTypeId="1" AcceptedAnswerId="8829" CreationDate="2019-01-19T19:17:21.357" Score="7" ViewCount="623" Body="&lt;p&gt;How did the C64 interface tape drives?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm aware that the external interface was basically a audio input - but how was this audio converted into digital data, and how was it loaded into RAM and executed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically what I am asking is how the computer handled the audio, as it entered the machine. How was it digitized, and how was this transferred to RAM?&lt;/p&gt;&#xA;" OwnerUserId="9045" LastEditorUserId="9045" LastEditDate="2019-01-19T20:58:29.583" LastActivityDate="2019-01-20T04:48:08.623" Title="How did the C64 interface tape drives?" Tags="&lt;commodore-64&gt;&lt;cassette-tape&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8827" PostTypeId="2" ParentId="8825" CreationDate="2019-01-19T19:58:16.377" Score="5" Body="&lt;p&gt;The 400K/800K Macintosh floppy disks use a variable speed system, where different parts of the disk are written at &lt;a href=&quot;https://forum.kryoflux.com/viewtopic.php?t=135&quot; rel=&quot;nofollow noreferrer&quot;&gt;different densities&lt;/a&gt;. They also use GCR instead of MFM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A standard USB external floppy for IBM-PC floppies can't read this. You'll either need a real Apple variable speed drive, or something like &lt;a href=&quot;https://www.kryoflux.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kryoflux&lt;/a&gt; or a similar system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And reading the sectors from the floppy solves ony the first part of the problem; after that, you'll also need tools to deal with file system used on those floppies. Though it's possible that it is compatible enough to HFS to work out of the box, but I wouldn't rely on that.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2019-01-25T07:57:14.030" LastActivityDate="2019-01-25T07:57:14.030" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8828" PostTypeId="2" ParentId="8819" CreationDate="2019-01-19T20:51:21.467" Score="3" Body="&lt;p&gt;Keep in mind that in that era, cassettes were positively rubbish for recording music, and nobody expectd them to succeed at that.  For music you used reel-reel or an 8-track, which had reel-reel's 3-3/4&quot; or even 7-1/2&quot; tape speed. Cassettes were a paltry 1-7/8&quot;.  They were for voice dictation and the like, where the remote makes a world of sense. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't until some time later that cassettes improved (with &lt;a href=&quot;https://electronics.howstuffworks.com/gadgets/audio-music/cassette3.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;better media&lt;/a&gt; that could be saturated much harder, and technologies like Dolby B and HX) to make them bearable as music players.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, the remote was for dictation, but I recall there being first-gen PCs that made use of it.  &lt;/p&gt;&#xA;" OwnerUserId="4330" LastActivityDate="2019-01-19T20:51:21.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8829" PostTypeId="2" ParentId="8826" CreationDate="2019-01-19T22:07:30.463" Score="14" Body="&lt;p&gt;The analogue audio is turned into a 1-bit signal — either high or low.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machine then detects positive transitions, counting the amount of time between each. That allows them to be bucketed into one of three types:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;short, which are those closest to a 364 microseconds;&lt;/li&gt;&#xA;&lt;li&gt;long, which are those closest to 524 microseconds; and&lt;/li&gt;&#xA;&lt;li&gt;mark, which are 684 microseconds.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Each byte is preceded by a byte marker, which is a mark wave and a long wave. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From there onwards, 0s are stored as a short wave followed by a long wave, and 1s are stored as a long wave followed by a short wave, and each byte is completed by an odd parity bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So reading a byte is as simple as watching for a mark wave, then tracking the sequence of short and long waves, using the parity bit as confirmation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All files are also preceded by periods of lead-in tone, which is just a prolonged period of short waves. The computer can use that section to calibrate itself to different tape speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A complete program file then looks like:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lead-in tone;&lt;/li&gt;&#xA;&lt;li&gt;192 bytes of header;&lt;/li&gt;&#xA;&lt;li&gt;those bytes, repeated;&lt;/li&gt;&#xA;&lt;li&gt;the program data itself;&lt;/li&gt;&#xA;&lt;li&gt;the program data itself, repeated;&lt;/li&gt;&#xA;&lt;li&gt;192 bytes of ending data; and&lt;/li&gt;&#xA;&lt;li&gt;those 192 bytes repeated.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Commodore used repeated data as a basic means of checking integrity; it's an outlier in this regard — other micros tend to do more intelligent things but the Commodore ROM just stores bytes directly to their intended destination on first run through, then checks them on the second.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-01-19T22:07:30.463" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8830" PostTypeId="2" ParentId="8696" CreationDate="2019-01-19T23:38:35.673" Score="4" Body="&lt;p&gt;There was an article in the german &lt;a href=&quot;https://www.c64-wiki.com/wiki/64%27er&quot; rel=&quot;nofollow noreferrer&quot;&gt;64'er magazine&lt;/a&gt; 12/&lt;strong&gt;1985&lt;/strong&gt; (pages 76/77) describing how to put sprites into &lt;strong&gt;lower/top border&lt;/strong&gt; including a type-in listing. The article states also that no game has used this technique so far. As author of the article Holger Gehrmann was given, together with Achim Hübner as editor. The program is called &lt;code&gt;Hyperscreen&lt;/code&gt; and was written by &lt;a href=&quot;https://8bitlegends.com/holger-gehrmann/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Holger Gehrmann&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2019-01-19T23:38:35.673" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8831" PostTypeId="2" ParentId="8787" CreationDate="2019-01-19T23:50:57.187" Score="1" Body="&lt;p&gt;One advantage of the mouse is that multiple features can be combined into a single device, which can be more ergonomic than nubs and trackballs, making them a more attractive choice. A typical mouse at least combines pointing and selection/activation (clicking) in a way that minimizes hand/finger motion. Many mice also include scroll wheels which allows the user to do more with less hand/finger motion than would be required with other options. Of course, some mouse designs take this a lot further and perhaps degrade ergonomics by trying to do too much.&lt;/p&gt;&#xA;" OwnerUserId="4561" LastActivityDate="2019-01-19T23:50:57.187" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8833" PostTypeId="2" ParentId="8787" CreationDate="2019-01-20T07:10:25.210" Score="3" Body="&lt;p&gt;My first engineering job was to create a drop-in trackpad replacement for PowerBook trackballs. We had potential customers with thousands of PowerBooks for sales, inventory, anything that would use an iPad today. The trackballs were the least reliable part of the computer due to &quot;DNS Failure&quot;: Doritos 'n' soda. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sadly, by the time I got the microcontroller to speak Apple Desktop Bus, our trackpad supplier decided to become our competitor. Game over. &lt;/p&gt;&#xA;" OwnerUserId="11639" LastActivityDate="2019-01-20T07:10:25.210" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8834" PostTypeId="1" AcceptedAnswerId="8837" CreationDate="2019-01-20T08:27:18.110" Score="11" ViewCount="1316" Body="&lt;p&gt;The ZX Spectrum has two formats for storing numbers, both 40 bits, or five bytes. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The first is a floating point format, which consists of one exponent byte, and four mantissa bytes. The first bit of the mantissa is assumed to be &lt;code&gt;1&lt;/code&gt; and so is not stored; this frees up one bit in the mantissa to store the sign (+/-).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The second is some kind of 16-bit integer format, fluffed up to fit the same amount of space as a float. This format consists of one zero byte, one 0xFF byte, two bytes containing the 16-bit integer, stored little-endian, and a dummy byte which I believe is ignored.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is the motive for including this second format?&lt;/strong&gt; Initially, I thought that the few things which are certainly integers, like a BASIC line number or &lt;em&gt;valid&lt;/em&gt; arguments to &lt;code&gt;POKE&lt;/code&gt; or &lt;code&gt;AT&lt;/code&gt; and so on, those can be assumed to be integers so that arithmetic can be done more quickly. But then, the computer will have to check that the first two bytes equal 0xFF00 before proceeding to use the number. And that would incur a cost on &lt;em&gt;any&lt;/em&gt; floating point calculation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What if a mantissa happens to start with at least &lt;strike&gt;seven&lt;/strike&gt; eight ones, and the sign happens to be negative, and the exponent happens to be zero? I see (the potential for) a bug there. That scenario would mean that the first two bytes of the float would be 0x00 and 0xff, so that could confuse the calculator routines.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-01-21T09:44:37.590" LastActivityDate="2020-05-25T21:42:13.283" Title="Why does Sinclair BASIC have two formats for storing numbers in the same structure?" Tags="&lt;zx-spectrum&gt;&lt;floating-point&gt;&lt;zx81&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8835" PostTypeId="1" AcceptedAnswerId="8839" CreationDate="2019-01-20T10:10:03.797" Score="2" ViewCount="1158" Body="&lt;p&gt;Some old Operating Systems I hear have only BASIC Programming Language. Are there any active and old operating systems which includes only BASIC Programming Language?&lt;/p&gt;&#xA;" OwnerUserId="11643" LastActivityDate="2019-10-24T16:21:31.710" Title="Are there any old and nowadays active Operating Systems which has only BASIC Programming Language?" Tags="&lt;programming&gt;&lt;basic&gt;&lt;operating-system&gt;" AnswerCount="8" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8836" PostTypeId="2" ParentId="8835" CreationDate="2019-01-20T12:50:34.813" Score="10" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Some old Operating Systems I hear have only BASIC Programming Language&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It was more the case that BASIC &lt;em&gt;was&lt;/em&gt; the operating system. Various commands for working with devices like floppy disks and printers were added to the dialect of BASIC running on that machine. Turning it on would result in the BASIC READY prompt where you could type in a program, or begin operating the devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps the best example of this was the Commodore line, which had a fair variety of device operating commands in the OS. Other machines, like the Atari, used a combination of commands in the language as well as a separate program (called DOS) for doing less common things like copying files or formatting disks. Most machines of the early 80s varied between these extremes.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-01-20T12:50:34.813" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8837" PostTypeId="2" ParentId="8834" CreationDate="2019-01-20T13:24:18.403" Score="16" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The ZX Spectrum has two formats for storing numbers, both 40 bits, or five bytes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Jup, like many other machines - one for float and one for integer.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The second is some kind of 16-bit integer format,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not some kind, but &lt;em&gt;the&lt;/em&gt; integer format.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;fluffed up to fit the same amount of space as a float.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which was done to make variable memory management easy.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and a dummy byte which I believe is ignored.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But set to zero when an integer is stored&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What is the motive for including this second format?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's got several advantages&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A one size fits all (numeric variables) approach, so memory management doesn't need to distinguish between integer and float&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Integers are automatic detected, thus no need to declare integer variables like in other BASICs&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Integers are always stored as integers&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Calculation with integers can be sped up by avoiding conversion&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Calculations with integers aren't harmed by being stored in float&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] like a BASIC line number&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I assume you mean for &lt;code&gt;GO TO&lt;/code&gt; or alike, as line numbers themselves are handled (and stored) differently.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or valid arguments to POKE or AT and so on, those can be assumed to be integers so that arithmetic can be done more quickly.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But then, the computer will have to check that the first two bytes equal 0xFF00 before proceeding to use the number.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They are a marker. Which speeds up execution a lot. If numbers in like a &lt;code&gt;POKE&lt;/code&gt; would be stored as float, then for each execution a float to integer conversion must be called (in fact twice; once for the byte to be poked as well). So instead conversion is only to be done if either marker byte is not present. A serious saving.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And that would incur a cost on any floating point calculation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's what? Two pairs of compare and jump, the second pair only executed at all for a tiny fraction of numbers? It's worth keeping in mind that a differentiation between FP or integer input from a variable has to be done anyway - so checking some flag stored at another position (where?) must happen - which makes the solution chosen almost free of cost in case of FP. Setup by a huge saving in not having to convert from FP if the number is to be used as integer anyway.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What if a mantissa happens to start with at least seven eight ones, and the sign happens to be negative, and the exponent happens to be zero? I see (the potential for) a bug there. That scenario would mean that the first two bytes of the float would be 0x00 and 0xff, so that could confuse the calculator routines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No bug. It's a marker checked beforehand. Such a configuration is simply not an FP number. So Sinclair BASIC misses out of a tiny fraction of possible numbers compared to other BASICs with a similar encoding for FP. Not a big deal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Especially not when it simplifies coding and speeds up execution as trade off&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S.: The whole details are covered in &lt;a href=&quot;http://www.worldofspectrum.org/ZXBasicManual/zxmanchap24.html&quot; rel=&quot;noreferrer&quot;&gt;chapter 24 of the manual&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As there was a &lt;strong&gt;discussion about the impact&lt;/strong&gt; of the introduction of this marker format on the range of FP numbers possible, be assured it's a rather small one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way it is implemented, it supports numbers from E-127 (Exponent encoded as 01h) to E+127 (FFh) (*1) without any restrictions. Without the integer marker it would go down to E-128. Sacrificing this for a clean integer handling in the same space and doing away with special integer variables is a cheap price to be payed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Another idea&lt;/strong&gt; that came up in discussion was the use of an appropriate exponent to simply use states where FP representation would match integer anyway. Like E+15, where the next two bytes would be exactly like the corresponding &lt;em&gt;signed&lt;/em&gt; integer. Sounds cool at first, but it would end up in creating a mess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For one, it only works with signed integer. Not a hurdle at first, as BASIC treats them that way anyway (*2), but latest when it comes to numbers smaller than +/-16384 representation would end up being not normalized - something that will screw floating point handling - unless additional checks are added, which in turn would slow down &lt;strong&gt;all&lt;/strong&gt; FP calculation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, and equally important, FP numbers in the range of integers that &lt;em&gt;do&lt;/em&gt; have significant digits beyond the 15th (and thus being most definitive FP) would also identify as integer. To avoid this the trailing bytes (#4 and #5) must need to be checked for zero as well for safe identification as integer, making it 3 bytes to be tested instead of two, again slowing down identification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line, the selected method is quite nice and solves its purpose at least as well as the more common MS-BASIC way of using variable identifiers&lt;/strong&gt; (*3).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Exponents are encoded with high bit set for positive values to allow unsigned operations be used instead of signed. Or as the manuals put it &lt;em&gt;&quot; exponent +128 in the first byte&quot;&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Not sure ATM, but I think BASIC stores inline values as well in unsigned manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Depending on the way BASIC lines are stored, the the MS method of adding a type identifier (like &lt;code&gt;%&lt;/code&gt;) may result in an additional byte per occurrence within the program, making integer variables even more costly.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-02-11T13:13:18.410" LastActivityDate="2019-02-11T13:13:18.410" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8838" PostTypeId="2" ParentId="8834" CreationDate="2019-01-20T13:36:26.157" Score="4" Body="&lt;p&gt;Doing integer arithmetic is by some orders of magnitude faster as floating point. So if there is a statement like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LET a = b + c&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the interpreter would first check if both &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; are integers. If yes, then it can proceed with a simple 16-bit addition, like &lt;code&gt;ADD HL, BC&lt;/code&gt; to get the result, and directly store it into &lt;code&gt;c&lt;/code&gt;. Otherwise, it would have to do an expensive floating point addition.&lt;/p&gt;&#xA;" OwnerUserId="348" LastActivityDate="2019-01-20T13:36:26.157" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8839" PostTypeId="2" ParentId="8835" CreationDate="2019-01-20T14:01:08.350" Score="5" Body="&lt;p&gt;(Preface, as I understand from comments, the OP wants to install some OS on a modern machine that has BASIC as main user interface)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simple Answer: &lt;strong&gt;Then there is none.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All OS for modern (PC-class or other) machines are stand alone Systems with some kind of UI (graphics or text). Here, if at all, BASIC is only a language to be loaded via the builtin UI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Maury Markowitz already &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8836/6659&quot;&gt;explained well&lt;/a&gt;, ye old days software stack differed quite a lot from what we have today. Back then, there where only marginally separated layers and making BASIC language and OS in one was kind of a shortcut to get it working (and within the limits of back then (affordable) hardware).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Having said that, &lt;strong&gt;you may of course assign some console based BASIC as shell&lt;/strong&gt; (*1). Even a classic emulation like Sinclair BASIC might work well. But you also will soon notice that most features of the fine new computer will be inaccessible, and maybe only 48 KiB of the 8 GiB installed are at your fingertip ... but boy they will be fast :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially this is no difference from just invoking the BASIC/emulation from a regular Linux shell. So no real gain at all - except maybe for fooling friends when logging on ... then again, how many remote users are there on your PC anyway.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, if, instead, &lt;strong&gt;your intention is to work with BASIC on today's operating systems&lt;/strong&gt; (as application), then you want for sure take a look at &lt;a href=&quot;http://www.bbcbasic.co.uk/bbcsdl/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;BBC BASIC&lt;/a&gt;. Yes, the fine 1980s BASIC is not only still alive and actively maintained by &lt;a href=&quot;https://en.wikipedia.org/wiki/Richard_T._Russell&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mr Russell&lt;/a&gt;, but has been widely enhanced and ported to many (*2) modern OSes. Up to an extension that would allow to control most features of modern OS again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most definitely worth to invest time. So go and install it on top of whatever OS you prefer or there is and enjoy it as single frontend.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Some heavy configuration fiddling required on modern Linux to bypass login.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Personally I would even say all 'relevant', but that's subjective, even as the list of maintained ports includes &lt;strong&gt;Windows&lt;/strong&gt;(Vista, 7, 8, 10), &lt;strong&gt;Linux&lt;/strong&gt;, &lt;strong&gt;MacOS&lt;/strong&gt;(OSX), &lt;strong&gt;iOS&lt;/strong&gt; and &lt;strong&gt;Android&lt;/strong&gt; for the SDL branch, as well as &lt;strong&gt;MS-DOS&lt;/strong&gt;, &lt;strong&gt;Windows 3.1 ... 10&lt;/strong&gt;, &lt;strong&gt;CP/M&lt;/strong&gt;, &lt;strong&gt;RISC OS&lt;/strong&gt;, &lt;strong&gt;*BSD&lt;/strong&gt;, Amiga OS** and many others in other branches. Them being widely compatible and fast (depending on the machine) it may even be more of a cross platform deal than C :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-08-16T14:07:49.087" LastActivityDate="2019-08-16T14:07:49.087" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8840" PostTypeId="2" ParentId="8835" CreationDate="2019-01-20T14:26:25.473" Score="5" Body="&lt;p&gt;The question is rather unclear, and this answer is beyond retrocomputing. Well...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/ESP32&quot; rel=&quot;noreferrer&quot;&gt;ESP32&lt;/a&gt; microcontroller is a current (built in ROM claims 2016) chip that has no operating system as we understand the term. You are supposed to program it on bare hardware (but it has wifi and TCP/IP stack). &lt;strong&gt;But&lt;/strong&gt;, it comes &lt;a href=&quot;https://hackaday.com/2016/10/27/basic-interpreter-hidden-in-esp32-silicon/&quot; rel=&quot;noreferrer&quot;&gt;with BASIC included&lt;/a&gt;, even though undocumented.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2019-01-20T14:26:25.473" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8841" PostTypeId="1" AcceptedAnswerId="8842" CreationDate="2019-01-20T14:29:27.450" Score="2" ViewCount="467" Body="&lt;p&gt;The importance of a desktop PC knowing the current time could be debated, but it is clear IBM felt it to be important, for the IBM PC typically prompts the user to supply it on boot. Given that, the advantage of keeping track with a battery-backed clock is clear, and such became standard hardware from the AT on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The importance of a game console knowing the current time is less clear, but either designers felt it so or the cost of the extra components became negligible, for consoles eventually likewise acquired battery-backed clocks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the first game console to have a battery backed clock?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-01-21T15:43:58.980" Title="When did game consoles acquire battery-backed clocks?" Tags="&lt;hardware&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8842" PostTypeId="2" ParentId="8841" CreationDate="2019-01-20T15:02:03.780" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The importance of a game console knowing the current time is less clear, but either designers felt it so or the cost of the extra components became negligible, for consoles eventually likewise acquired battery-backed clocks.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Or they had good applications like ordering save games by time and recording the rime of a win - or simply being able to tell time as a feature? Having the user to set time each and every boot to do so would be a true fun stopper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, as soon as there was a way to save game status, a battery backed RAM was needed anyway - now adding time was a real minor hardware issue.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What was the first game console to have a battery backed clock?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No doubt 1980's &lt;a href=&quot;https://en.wikipedia.org/wiki/Game_%26_Watch&quot; rel=&quot;nofollow noreferrer&quot;&gt;Game&amp;amp;Watch&lt;/a&gt; series - after all, without a battery backed clock the watch part would be useless, wouldn't it ? :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next in line might be the Game Boy, at least as long a &lt;a href=&quot;http://gbdev.gg8.se/wiki/articles/MBC3&quot; rel=&quot;nofollow noreferrer&quot;&gt;MBC3&lt;/a&gt; based game was plugged in. But there may be other consoles inbetween, as MBC3 was a thing of the 90s IIRC.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-01-20T15:52:08.810" LastActivityDate="2019-01-20T15:52:08.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8843" PostTypeId="1" CreationDate="2019-01-20T18:14:19.897" Score="6" ViewCount="829" Body="&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In video terminals, like the VT100, can control characters and &lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_escape_code&quot; rel=&quot;nofollow noreferrer&quot;&gt;escape sequences&lt;/a&gt; only be sent by an application from the &lt;em&gt;host computer&lt;/em&gt; to the &lt;em&gt;terminal&lt;/em&gt;? Or can they also be sent directly by the user from the &lt;em&gt;keyboard&lt;/em&gt; to the &lt;em&gt;terminal&lt;/em&gt;? That is, the user controlling the terminal  from the keyboard, rather than an application controlling the terminal from the host computer?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Long version:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to understand how video terminals worked by the example of the VT100 family.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found the following diagram of a VT102 in the &lt;a href=&quot;https://vt100.net/docs/vt102-ug/contents.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;VT102 user guide&lt;/a&gt; (&lt;a href=&quot;https://vt100.net/docs/vt102-ug/figure1-1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Figure 1-1&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qLjC5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qLjC5.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume that on the computer-side of the communication line, there is a driver for this type of terminal, and behind the driver there is an application that reads its input from the terminal and writes its output to the terminal (through the driver). This application might be a shell, or any other application that needs to get input from the user and/or show output to the user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I understood so far:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When a user of the terminal types a character on the keyboard, this character is immediately transmitted to the computer (i.e. the VT100 family uses &lt;strong&gt;character-at-a-time&lt;/strong&gt; mode, there is no local processing of characters entered by the user).&lt;/li&gt;&#xA;&lt;li&gt;The receiving application on the computer can then read this character from the terminal driver and do with it whatever it has to do with it.&lt;/li&gt;&#xA;&lt;li&gt;Every character that the writes to its output (which is the  terminal driver) is sent to the terminal where it is displayed on the screen (except control characters and escape sequences, see below).&lt;/li&gt;&#xA;&lt;li&gt;If the application-specific purpose of a character sent from the terminal to the application is such that the user should see it on the screen, then the application must send this character back to the terminal so that it gets displayed on the terminal screen. That is, the VT100 family uses, in most cases, no &lt;strong&gt;local echo&lt;/strong&gt; However, for the VT102, local echo is a setting that can be enabled, see &lt;a href=&quot;https://vt100.net/docs/vt102-ug/chapter5.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. This becomes obvious if the application on the computer is something like &lt;em&gt;vi&lt;/em&gt;. There, not all characters that the user types must appear on the screen. In particular, characters typed in command mode must not be displayed, whereas characters typed in insert mode must be displayed. This modes are application-specific and neither the terminal nor the terminal driver could know if a given typed character should be displayed or not. So, in these cases, it &lt;em&gt;must&lt;/em&gt; be the application that controls the display of user-typed characters.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;First of all, are these assumptions correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to the question. The terminal understands and interprets certain &lt;strong&gt;control characters&lt;/strong&gt; and &lt;strong&gt;escape sequences&lt;/strong&gt; that can be sent from the computer to the terminal. Each of them has an associated control function (e.g. move the cursor on the terminal screen). When the terminal receives such a control character or escape sequence, it does not display it, but executes the associated control function. This stands in contrast to the &lt;em&gt;display characters&lt;/em&gt; (non-control characters and not part of an escape sequence) which the terminal just displays on the screen when it receives them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Control characters, escape sequences, and display characters can be intermixed in any way (there is only a single transmission line from the computer to the terminal anyway). All the control characters and escape sequences that the VT102 understands are explained in the &lt;a href=&quot;https://vt100.net/docs/vt102-ug/chapter5.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Received Character Processing&lt;/a&gt; section of the VT102 user guide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Control characters&lt;/em&gt; are ASCII control characters. The set of control characters understood by the VT10, including the associated control functions, is listed &lt;a href=&quot;https://vt100.net/docs/vt102-ug/table5-2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Escape sequences&lt;/em&gt; are sequences of characters that start with a special &quot;escape character&quot;. The escape sequences understood by the VT102 are the &lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_escape_code&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANSI escape sequences&lt;/a&gt;, and they are described in the &lt;a href=&quot;https://vt100.net/docs/vt102-ug/chapter5.html#S5.5&quot; rel=&quot;nofollow noreferrer&quot;&gt;Escape and Control Sequences&lt;/a&gt; section of the VT102 user guide. They always start with the &lt;em&gt;ESC&lt;/em&gt; character followed by some other characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Control functions associated with VT102 control characters and escape sequences include positioning the cursor on the screen, deleting text on the screen, and setting display attributes (like text colour or font style). This allows applications to control what the user sees on the terminal screen (for example, &lt;em&gt;vi&lt;/em&gt; redraws the entire terminal screen when it is started).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, my question is, are these control characters and escape sequences only meant to be sent from the &lt;em&gt;application&lt;/em&gt; to the &lt;em&gt;terminal&lt;/em&gt;? Or is there a way that a user enters them directly into the terminal, e.g. via the keyboard?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://vt100.net/docs/vt102-ug/chapter4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Transmitted Characters&lt;/a&gt; section of the VT102 user guide describes all the characters that can be generated with the keyboard. They include control characters and some escape sequences. Are all these characters always sent to the computer without interpretation by the terminal?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if the user hits the &lt;kbd&gt;←&lt;/kbd&gt; cursor key, the VT102 user guide says &lt;a href=&quot;https://vt100.net/docs/vt102-ug/table5-9.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; that this generates the &lt;code&gt;ESC [ D&lt;/code&gt; escape sequence. This is the ANSI escape sequence to move the cursor one position back (see &lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;). So, is this escape sequence still sent to the application rather than being interpreted by the terminal? And then the application interprets it and has to send something back to take an appropriate action on the terminal (probably the &lt;code&gt;ESC [ D&lt;/code&gt; again)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or is there a set of control characters or escape sequences that the terminal directly interprets when the user types them on the keyboard (maybe a reduced, different set)?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a diagram of the VT102 in &lt;strong&gt;off-line mode&lt;/strong&gt; (i.e. when not connected to a computer), see &lt;a href=&quot;https://vt100.net/docs/vt102-ug/figure1-2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gZ5J4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gZ5J4.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This makes it obvious that in off-line mode anything typed on the keyboard is directly re-routed to the receiver, and thus probably treated as if it would come from the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question was if in on-line mode (see diagram above) any control characters pressed on the keyboard are directly interpreted by the terminal rather than being sent to the computer?&lt;/p&gt;&#xA;" OwnerUserId="11635" LastEditorUserId="11635" LastEditDate="2019-01-20T21:03:14.320" LastActivityDate="2019-01-24T18:11:27.727" Title="Can escape sequences be entered directly from keyboard to terminal for VT100 and similar?" Tags="&lt;terminal&gt;&lt;vt100&gt;&lt;escape-codes&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8844" PostTypeId="2" ParentId="8843" CreationDate="2019-01-20T18:38:55.633" Score="6" Body="&lt;p&gt;Well, as usual with complex matter the answer is a mixture of Yes/If.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;First of all, are these assumptions correct?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, the assumptions stated are perfect good and correct. In general. In detail there can be diversions, most depending on line characteristics (like blocking and error correcting modems), and ways the computer/its OS is designed.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Now, my question is, are these control characters and escape sequences only meant to be sent from the application to the terminal? Or is there a way that a user enters them directly into the terminal, e.g. via the keyboard?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, there is. And you presented already all parts necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Off-Line mode (&lt;code&gt;SETUP&lt;/code&gt;-&lt;code&gt;4&lt;/code&gt;-&lt;code&gt;SETUP&lt;/code&gt;), as well as&lt;/li&gt;&#xA;&lt;li&gt;Local mode&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;every key press is right away handed to the receive function and interpreted. THat way one can try out whatever function combination needed without much software tools. Well, at least that's the way we did it to check functions and parameters when debugging :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or is there a set of control characters or escape sequences that the terminal directly interprets when the user types them on the keyboard (maybe a reduced, different set)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. None at all. Wouldn't make much sense anyway. Either output displayed (characters and operations) is controlled by the host, or the host just interpretes the input, assuming everything the user does is legal anyway - or doesn't care what's displayed anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Especially the later may seem strange, but it was quite handy back then to keep programs simple. Why care for stuff a sane user wouldn't do anyway.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-01-20T18:38:55.633" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8845" PostTypeId="2" ParentId="8841" CreationDate="2019-01-20T21:41:12.510" Score="1" Body="&lt;p&gt;Community wiki chronological list of home videogame consoles, handhelds and early microcomputers (both business-centric and console-like game systems) that possess an installed battery backed up clock &lt;strong&gt;as standard&lt;/strong&gt; in their base hardware - not games, add-on cards, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please contribute. Only include systems where it was a generational introduction, and assume all/most successors from the same company also contain the BB clock for brevity (i.e. Only include PS2, not 3, 4, etc.)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Amiga 500+ (1991) (First Amiga with installed clock. Not present on A1000 (1985) or A500 (1987) as standard: A1000 supports parallel port RTC, A500 supports system bus 'trapdoor' RTC)&lt;/li&gt;&#xA;&lt;li&gt;Atari Mega STe (1991)&lt;/li&gt;&#xA;&lt;li&gt;Sega Saturn (Nov 1994)&lt;/li&gt;&#xA;&lt;li&gt;Sega Dreamcast (Nov 1998) (Both console and VMUs possess independent BB clocks!)&lt;/li&gt;&#xA;&lt;li&gt;Sony PlayStation 2 (Mar 2000)&lt;/li&gt;&#xA;&lt;li&gt;Nintendo Gamecube (Sep 2001)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11646" LastEditorUserId="10566" LastEditDate="2019-01-21T15:43:58.980" LastActivityDate="2019-01-21T15:43:58.980" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8846" PostTypeId="2" ParentId="8835" CreationDate="2019-01-20T23:04:29.663" Score="4" Body="&lt;p&gt;The Parallax &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC_Stamp&quot; rel=&quot;nofollow noreferrer&quot;&gt;Basic Stamp&lt;/a&gt; is a system-on-board (wide DIP form-factor) used for education.  The only programming language that it supports is BASIC.  Code is entered in an IDE on a PC then tokenized and loaded onto the board.  An interpreter there runs the bytecode.  This is pretty similar to how many micros from the '80s did things.  The CPUs used on the Basic Stamp boards are all PICs IIRC but there is no way to run native code on them; the only means of programming is through BASIC (there are no tokenizers for other languages).&lt;/p&gt;&#xA;" OwnerUserId="7347" LastActivityDate="2019-01-20T23:04:29.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8848" PostTypeId="1" AcceptedAnswerId="8851" CreationDate="2019-01-21T00:36:11.607" Score="5" ViewCount="5442" Body="&lt;p&gt;I am setting up a new development computer with FreeDOS and can boot off the SATA or USB drive. This is my first new computer with sophisticated UEFI (I have CSM enabled).&lt;/p&gt;&#xA;&lt;p&gt;If I boot from the USB I will see the USB as &lt;code&gt;C:&lt;/code&gt; and the SATA as &lt;code&gt;D:&lt;/code&gt;. However if I boot off the SATA, DOS does not see the USB drive.&lt;/p&gt;&#xA;&lt;p&gt;I suspect the FreeDOS USB driver is not doing what it is suppose to but it seems wrong that DOS sees it if it was used for a boot?&lt;/p&gt;&#xA;&lt;p&gt;Has anyone experienced this problem and found a solution?&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="15334" LastEditDate="2021-01-12T22:16:50.650" LastActivityDate="2021-01-12T22:16:50.650" Title="Accessing a USB drive from DOS" Tags="&lt;boot&gt;&lt;bios&gt;&lt;usb&gt;&lt;dos&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8849" PostTypeId="1" AcceptedAnswerId="8853" CreationDate="2019-01-21T04:47:01.567" Score="19" ViewCount="4815" Body="&lt;p&gt;In the days of dot matrix printers connected by RS-232 or the IBM/Centronics parallel port, each with its own quirky set of commands, it's obvious why printer drivers were a necessary and important invention: they save every program from needing its own separate encyclopedic knowledge of every printer on the market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then came PostScript, the theory behind which was that you would prepare a printable file in a standard format and throw it at the printer, which would contain its own knowledge of how to translate it to bitmap on paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet decades later, printer drivers are still with us. Why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know there was an issue with Adobe charging on the order of a thousand dollars for a PostScript license, which was fine when a laser printer  cost ten thousand, but problematic when printers got cheaper. At some point Apple and Microsoft got together to create an alternative... right, here's a summary of that event: &lt;a href=&quot;https://appleinsider.com/articles/10/05/14/adobe_apple_war_on_flash_reminiscent_of_postscript_struggle&quot; rel=&quot;noreferrer&quot;&gt;https://appleinsider.com/articles/10/05/14/adobe_apple_war_on_flash_reminiscent_of_postscript_struggle&lt;/a&gt; which also refers to the same book I read about it in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The summary calls TrueImage a PostScript clone. Was it actually such in the sense of an independent reimplementation of the same language? In that case the issue of obviating the need for printer drivers should stand. Or was it a different language? If so, is that the reason drivers continued to be needed?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-01-30T14:42:41.170" Title="Why didn't PostScript eliminate the need for printer drivers?" Tags="&lt;history&gt;&lt;printer&gt;&lt;driver&gt;&lt;windows&gt;" AnswerCount="7" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8850" PostTypeId="2" ParentId="8849" CreationDate="2019-01-21T05:08:32.443" Score="12" Body="&lt;h3&gt;Cost&lt;/h3&gt;&#xA;&lt;p&gt;There are significant licensing costs and equipment costs. I'm sure PostScript needs quite a bit more RAM &amp;amp; processing than some of the lower levels of PCL and similar printer languages. As I noted in my answer on trackballs and elsewhere, even a small increase in cost can have a big impact on sales and/or profitability, particularly at the low end of the market. A quick search finds that the original HP LaserJet (not the first laser printer, but one of the first for the mass market) cost $3,495 with a whopping 128k of RAM. It took a while to get to today's ~ $100 printers with 32 Meg. of RAM - and many of those printers &lt;strong&gt;still&lt;/strong&gt; don't support PostScript.&lt;/p&gt;&#xA;&lt;h3&gt;Features&lt;/h3&gt;&#xA;&lt;p&gt;Even limiting things to places where PostScript &amp;quot;makes sense&amp;quot; (i.e., page-oriented laser and inkjet printers - excluding line-oriented dot-matrix and similar printers), there are other things that go into print drivers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Connectivity - PostScript handles the print job once it is in the printer, it doesn't help get it &lt;strong&gt;to&lt;/strong&gt; the printer&lt;/li&gt;&#xA;&lt;li&gt;Paper Handling - Duplexing, paper sizes, paper trays, etc. Even today these are handled differently by every manufacturer, and getting the codes to handle them directly &lt;a href=&quot;https://stackoverflow.com/questions/42140821/okidata-mb760-mb492-etc-pjl-commands&quot;&gt;like my question on Okidata&lt;/a&gt; are not so easy to find.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Plus there are applications where simply being able to spit out simple ASCII text instead of a full PostScript (or even formatted PCL) is what you need to do. So PostScript isn't the solution for everyone, and most page printers (e.g., HP, Brother, Okidata) that support PostScript &lt;strong&gt;also&lt;/strong&gt; support PCL or other formats.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-21T15:14:07.497" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8851" PostTypeId="2" ParentId="8848" CreationDate="2019-01-21T05:47:41.660" Score="10" Body="&lt;p&gt;The FreeDOS kernel doesn’t support USB drives on its own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you boot from a USB drive, the CSM makes it available through the BIOS 13h services, so it appears to DOS as a “standard” drive and everything works fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you boot from your SATA drive, the CSM doesn’t set anything up for your USB drive (although in some cases it can be induced to do so) and DOS doesn’t see it. To access the drive in that case, you need to install and configure a USB driver; FreeDOS provides &lt;a href=&quot;http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/repos/pkg-html/usbdos.html&quot; rel=&quot;noreferrer&quot;&gt;the &lt;code&gt;usbdos&lt;/code&gt; package&lt;/a&gt; for this purpose.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-01-21T05:47:41.660" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8852" PostTypeId="2" ParentId="8849" CreationDate="2019-01-21T10:20:22.820" Score="3" Body="&lt;p&gt;In addition to manassehkatz's answer, the other reason for printer drivers is to reduce cost in the printer. A postscript interpreter requires significant computing resources, especially for complex documents. By doing that processing on the computer and then sending a simpler, easier to handle data stream to the printer you can leverage the greater power of the computer to do that work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result is a printer that can print quickly even with less processing power on board. Historically printing was such a complex process that there was often an entire computer dedicated to it, and then that computer was moved into the printer itself, and finally the client PC itself was used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Embedded software developers are also a lot more expensive than desktop ones, so it's usually cheaper to develop drivers than it is to develop complex printer firmware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A similar thing happened with dial-up modems, where cheap &quot;WinModems&quot; reduced the complexity of the modem itself by offloading much of the processing on to the host computer.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-01-21T10:20:22.820" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8853" PostTypeId="2" ParentId="8849" CreationDate="2019-01-21T10:40:11.507" Score="16" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;they save every program from needing its own separate encyclopedic knowledge of every printer on the market.&lt;/p&gt;&#xA;&lt;p&gt;But then came PostScript, the theory behind which was that you would prepare a printable file in a standard format&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For one, Postscript isn't a standard format printable file, but a standard format document description. It may (and does) contain many more information than just what a printer needs.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and throw it at the printer,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which in turn may need considerably less knowledge about a printer but still does need some. To begin with, how to communicate with that printer? Keep in mind the underlying layer isn't as defined as one might think. Starting with what lines of a Centronics interface are supported or if there's a way (and which way) for return information. The point is that this not just differs between interfaces (like serial vs. Centronics or USB), but also by what printer is connected.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Postscript only cares for document description, not interface handling.&lt;/strong&gt; It's the very basic idea of Postscript to be device agnostic.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;which would contain its own knowledge of how to translate it to bitmap on paper.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which would mean providing the device a lot of memory. It's a universal constant: Like computers, printers always need more memory than available. This increases the price - not good in a price sensitive market like the PC-market is.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Yet decades later, printer drivers are still with us. Why?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Price of the printer&lt;/li&gt;&#xA;&lt;li&gt;Device-dependent interface handling&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;and, let's not forget&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Support of applications using existing interfaces to print.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In fact, all these reasons made Microsoft introduce the &lt;a href=&quot;https://en.wikipedia.org/wiki/Graphics_Device_Interface#GDI_printers&quot; rel=&quot;nofollow noreferrer&quot;&gt;GDI-printers&lt;/a&gt; (*1). GDI (Graphics Device Interface) is the device independent rendering engine of Windows. Its use is the counter-thesis to what you expect of Postscript. Printers can be as primitive as possible, since all high-level handling is done in the GDI driver - a component that is already on the PC to handle screen output anyway (*2).&lt;/p&gt;&#xA;&lt;p&gt;During the 90s GDI-printers where quite successful - not in the least due their price advantage.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The summary calls TrueImage a PostScript clone. Was it actually such in the sense of an independent reimplementation of the same language?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, it was. It's the base for Microsoft's own Postscript interpreter (used on top of GDI), as well as being implemented by Oki in their Postscript (compatible) laser printers. Oh, and don't forget, it solved the Apple/Adobe fight by making Adobe lower the price to a level Apple could agree to.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In that case the issue of obviating the need for printer drivers should stand. Or was it a different language? If so, is that the reason drivers continued to be needed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;No, the reasons are &lt;em&gt;still&lt;/em&gt; different interfaces, different interface protocols and of course printers without Postscript.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The idea was already used years before by Atari for the &lt;a href=&quot;http://www.atarimuseum.com/computers/16bits/printers/laser/slm804.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLM  804&lt;/a&gt;. Here the printer buffered almost nothing and relied on just-in-time DMA transfer from the ST. Every kind of rendering was done by the GEM-VDI (Virtual Device Interface). Ofc, with 'just' 4 MiB maximum memory it did create problems with very detailed documents.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Kind of the reverse way of the evolution of Postscript to &lt;a href=&quot;https://en.wikipedia.org/wiki/Display_PostScript&quot; rel=&quot;nofollow noreferrer&quot;&gt;Display Postscript&lt;/a&gt;, intended to be the as sole source of screen content on the &lt;a href=&quot;https://en.wikipedia.org/wiki/NeXT&quot; rel=&quot;nofollow noreferrer&quot;&gt;NeXT&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-22T17:19:02.613" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8854" PostTypeId="2" ParentId="8849" CreationDate="2019-01-21T13:34:47.337" Score="3" Body="&lt;p&gt;I can't readily find a really definitive reference, but the &lt;a href=&quot;https://okiprinting-en-gb.custhelp.com/app/answers/detail/a_id/598/~/mac-os-9.x-%2F-classic---solving-postscript-driver-issues-by-removing-prefs&quot; rel=&quot;nofollow noreferrer&quot;&gt;LaserWriter driver&lt;/a&gt; on Classic Mac OS could be used for basic printing functionality on many PostScript printers, and it appears a &lt;a href=&quot;https://discussions.apple.com/thread/4592941&quot; rel=&quot;nofollow noreferrer&quot;&gt;similar thing exists&lt;/a&gt; on modern macOS (f.k.a. OS X). Printer-specific configuration and functions are specified to this driver in a PostScript Printer Description (ppd) file. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, as other answers and comments indicate, PostScript can't eliminate printer drivers because most printers today don't use PostScript. Back when the first LaserWriters came on the market, they were made to connect to computers that had nowhere near enough processing power and memory to render a whole page of text and graphics at 300 dots per inch, so the computer needed to transmit the data to be printed in a compact format that encoded what the renderer needed to do, and the &#xA;processing power and memory - and the actual fonts! - were on board the printer itself. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now that our computers have ample power for handling this task, this reason for printers to understand PostScript is mostly gone, except perhaps at the highest end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.prepressure.com/postscript/basics/history&quot; rel=&quot;nofollow noreferrer&quot;&gt;This article&lt;/a&gt; suggests that PostScript itself is on the way out as a standard, being replaced by PDF (which evolved out of PostScript).&lt;/p&gt;&#xA;" OwnerUserId="4343" LastActivityDate="2019-01-21T13:34:47.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8855" PostTypeId="2" ParentId="8849" CreationDate="2019-01-21T13:49:07.667" Score="11" Body="&lt;p&gt;PostScript was quite demanding.  In the early days a PostScript printer might well be the most powerful computer in the building, hence expensive.  University students ran jobs on the printer to get done faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a world where price is important, this was most likely the primary reason.  Look at the cheapest printers available and check if they run Postscript.  The answer is probably no (as there most likely is a license fee attached).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the REAL contender for the ubiquous language is PDF, which is essentially a version of PostScript which only describes pages, but cannot run programs.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PDF is inside Apples Airprint which is driverless, and this - combined with a lot of good PDF-engines - will most likely make this so cheap that it will be the future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in a way, Postscript &lt;strong&gt;is&lt;/strong&gt; overtaking the printer world, just not in the form you thought.&lt;/p&gt;&#xA;" OwnerUserId="447" LastEditorUserId="447" LastEditDate="2019-01-30T14:42:41.170" LastActivityDate="2019-01-30T14:42:41.170" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8856" PostTypeId="1" CreationDate="2019-01-21T15:17:08.770" Score="24" ViewCount="3683" Body="&lt;p&gt;I'm wondering if terminals (like, e.g. the VT100) required the installation of a driver on the host system in order to work with that host?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked at the &lt;a href=&quot;https://vt100.net/docs/vt102-ug/contents.html&quot; rel=&quot;noreferrer&quot;&gt;documentation of the VT102&lt;/a&gt;, and there is nothing mentioned about a driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagine that the setup of a terminal connected to an application on a host computer looks something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EekzL.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EekzL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The terminal is connected over an RS-232 communication line to the computer (of course, there might also be two modems and a public carrier line between the two RS-232 interfaces, but it shouldn't matter here).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the host computer is the application that must get its input from the terminal, and send its output to the terminal. To this end, the application must somehow be connected to the RS-232 interface to which the terminal is connected. In the end, the application must read characters from this interface and write characters to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the question is, what is between the application and the RS-232 interface?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is there nothing at all, and the application must be programmed to directly listen on and write to the RS-232 interface (through the kernel)?&lt;/li&gt;&#xA;&lt;li&gt;Is there a driver for this specific terminal, and the application communicates with this driver?&lt;/li&gt;&#xA;&lt;li&gt;Is there a generic &quot;terminal controller&quot; in the kernel that works with all terminals and provides a common API for applications (like the TTY subsystem in UNIX)?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In other words, if you write a terminal application, what is the mechanism that you get notified about incoming data from the terminal, and how do you write output to the terminal?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the latter two cases, the driver or controller could do some processing on the input, like line editing, and only send full lines to the application (as it is done by TTY in UNIX). This would offload a lot of complexity from the application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The protocol that allows applications to control terminals consists usually just of characters (control characters and escape sequences intermixed with display characters). Furthermore, if we assume that all terminals use the &lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_escape_code&quot; rel=&quot;noreferrer&quot;&gt;ANSI escape sequences&lt;/a&gt; (from the VT100 onwards), the same &quot;control language&quot; works with every terminal. So, I'm not sure if each terminal really needs a dedicated driver on the host computer.&lt;/p&gt;&#xA;" OwnerUserId="11635" LastActivityDate="2019-01-23T04:18:28.360" Title="Did terminals (e.g. VT100) require a terminal driver on the host computer?" Tags="&lt;terminal&gt;&lt;rs232&gt;&lt;driver&gt;&lt;vt100&gt;" AnswerCount="8" CommentCount="1" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8857" PostTypeId="2" ParentId="8856" CreationDate="2019-01-21T15:29:41.060" Score="10" Body="&lt;p&gt;This was not done by a “driver” at the OS level as you are thinking of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Unix, there were drivers that dealt with the RS232 interface and these were surfaced as /dev/tty* devices and dealt with things like speed, echo, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for escape sequences controlling the display of the terminal, that is not done at the “driver” level as you are thinking of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was done at the application level through a library like curses, and escape sequences were defined in a database like /etc/termcap or later, terminfo. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some apps used curses, others used termcap/terminfo to get the sequences but used their own code instead of curses. Some even had their own version of a termcap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Termcap = Terminal Capabilities or something like that)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though there was an ANSI standard for escape sequences, there were still variations and quirks, and some terminals simply used an entirely different scheme (like Wyse 50).&lt;/p&gt;&#xA;" OwnerUserId="4213" LastActivityDate="2019-01-21T15:29:41.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8858" PostTypeId="2" ParentId="8856" CreationDate="2019-01-21T15:36:10.523" Score="3" Body="&lt;p&gt;We have to distinguish between different cases, but in most cases the answer seems to be &quot;no&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;In &quot;early&quot; systems (like the Altair 680 in home computing or 1960s professional computers) programs simply wrote bytes to the serial port and they read bytes from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, such machines often did not even have an operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you used VT-100 (as an example), your application had to be written in a way that VT-100 compatible output was written to the terminal and that the application could understand VT-100 compatible input.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using Linux (the same is true for Solaris; I'm not sure about other OSs) on modern computers have an operating system with a driver for the RS-232 hardware; but there is no driver for VT-100 or similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just like on &quot;early&quot; systems the application has to communicate in a VT-100-compatible way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there are some libraries (e.g. &quot;ncurses&quot;) that can be used by the applications. These libraries provide functions that &quot;translate&quot; &quot;high-level&quot; commands (like: &quot;move the cursor to the upper left corner of the screen&quot;) into the correct byte sequences for a lot of different terminal types (e.g. VT-100, xTerm, ...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that these are libraries, not drivers. At least in Linux such libraries are handled completely on application level; the OS kernel does not know about the existence of libraries at all.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Theoretically it would be possible to provide terminal support on OS level. In this case a driver for a certain terminal type (e.g. a VT-100 driver) would be necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt that such an OS is currently existing.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2019-01-21T15:36:10.523" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8859" PostTypeId="2" ParentId="8856" CreationDate="2019-01-21T15:36:36.243" Score="28" Body="&lt;p&gt;Different terminals didn’t (and don’t) use different kernel-level drivers. In Unix-style systems, the kernel does provide some terminal-related features, called line disciplines and the TTY layer which you mention; there is typically at least a raw line discipline (which doesn’t perform any translation), and a cooked line discipline (which provides more-or-less line-level buffering, handling backspace etc. locally). Anything beyond that is handled inside each individual application, and early applications were hard-coded for specific terminals. (It was also common for applications to be terminal-specific, or support a limited number of terminals, on non-Unix-like operating systems such as CP/M.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However developers quickly realised that it would be useful to share terminal information, such as screen size, escape sequences for various common functions, etc. The first of these is &lt;a href=&quot;https://en.wikipedia.org/wiki/Termcap&quot; rel=&quot;noreferrer&quot;&gt;termcap&lt;/a&gt; (terminal capability), developed by Bill Joy in 1978 for BSD; &lt;a href=&quot;https://en.wikipedia.org/wiki/Terminfo&quot; rel=&quot;noreferrer&quot;&gt;terminfo&lt;/a&gt; followed in the early eighties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another layer of libraries provides more advance screen-handling features for programs which require that; the earliest common library of this type was &lt;a href=&quot;https://en.wikipedia.org/wiki/Curses_(programming_library)&quot; rel=&quot;noreferrer&quot;&gt;curses&lt;/a&gt;, and the library currently used is &lt;a href=&quot;https://en.wikipedia.org/wiki/Ncurses&quot; rel=&quot;noreferrer&quot;&gt;ncurses&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://www.linusakesson.net/programming/tty/index.php&quot; rel=&quot;noreferrer&quot;&gt;The TTY demystified&lt;/a&gt; for more details.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-01-21T16:23:26.247" LastActivityDate="2019-01-21T16:23:26.247" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8860" PostTypeId="2" ParentId="8856" CreationDate="2019-01-21T16:49:05.097" Score="10" Body="&lt;p&gt;&quot;It depends&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm answering this in the context of DEC timesharing systems, since that's the natural habitat of a DEC VT100.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a hardware device such as a DZ11 terminal multiplexer (8 lines) that controls terminal lines by some physical protocol, such as RS232 or 20mA current loop. The physical protocol is a matter for the hardware.  But the OS needs a driver for the hardware device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The driver does not know the terminal type, but it will contain a variety of settings that depend on the terminal or settings in the terminal: bits per character, parity use, required number of stop bits, and so on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Over that, but still in some driver, there's common functionality that all terminals need: character/line erase, special keys to generate signals (like ctrl/c = abort or interrupt, depending on OS), and so on.  These could be in the same driver as directly handles the hardware (which means a lot of code replication) or in another driver layered on top of the first.  Most such functions are terminal independent, but there's a fuzzy edge where we want (for example) character erase to operate differently on screen-based terminals (output backspace, overwrite with space, backspace) than on hardcopy (output backslash, characters being erased, backslash).  That requires some knowledge of the terminal type, but it generally falls short of needing to know the explicit type, merely what it can do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The unqualified term &quot;terminal driver&quot; generally refers to the above level of interface.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you get to details that are (or were at the time) highly terminal-specific, such as how to move the cursor around a screen, those are not in a driver.  Early on, in my personal experience around 1980, application code would need to include knowledge of specific terminal types. This wasn't too burdensome if you were writing code for DEC since there were basically only 2 main types to deal with: VT52 and VT100, with minor details such as whether the particular VT1xx model had programmable LEDs or not.  However, it was burdensome enough such that eventually common libraries would show up: SMG (&quot;screen management&quot;) for VMS being an example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: to sum up:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Kernel driver handles specific hardware device independent of terminal type&lt;/li&gt;&#xA;&lt;li&gt;Kernel driver handles common user-interaction functions largely independent of terminal type&lt;/li&gt;&#xA;&lt;li&gt;User-mode libraries can implement mapping from generic to type-specific operations&lt;/li&gt;&#xA;&lt;li&gt;Application code can use such libraries when available or do it all itself&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-01-21T16:49:05.097" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8861" PostTypeId="1" AcceptedAnswerId="8862" CreationDate="2019-01-21T20:06:29.830" Score="7" ViewCount="779" Body="&lt;p&gt;&lt;a href=&quot;https://www.c64-wiki.com/wiki/Raster_interrupt&quot; rel=&quot;nofollow noreferrer&quot;&gt;A page on how to do raster interrupts&lt;/a&gt; includes the following code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Irq:     LDA #7&#xA;         STA $D020   ; Turn screen frame yellow&#xA;         LDX #90&#xA;Pause:   DEX&#xA;         BNE Pause   ; Empty loop that &quot;does nothing&quot; for a little under a half millisecond&#xA;         LDA #0&#xA;         STA $D020   ; Switch frame color back to black&#xA;         ASL $D019   ; &quot;Acknowledge&quot; the interrupt by clearing the VIC's interrupt flag.&#xA;         JMP $EA31   ; Jump into KERNAL's standard interrupt service routine to handle keyboard scan, cursor display etc.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm interested in the second-to-last line. Why &quot;acknowledge&quot; it? I just want to understand what that does. My understanding is that the VIC-II sets some flag, and this line of code clears that flag, to show that the interrupt has been handled. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;But if we know we have just serviced an interrupt, then we also know that the interrupt has been serviced. That's trivial. &lt;/li&gt;&#xA;&lt;li&gt;Also, I don't believe the Commodore KERNAL ever looks at the VIC-II. So I think we can rule out an operating system requirement. &lt;/li&gt;&#xA;&lt;li&gt;Also, the VIC-II will fire the same interrupt a frame later, because interrupt enable is not in register $d019, it's in $d01a. So we can rule out a requirement coming from le hardware.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-01-22T08:40:06.400" LastActivityDate="2019-01-22T09:46:14.720" Title="Why do we need to acknowledge the interrupt from VIC-II?" Tags="&lt;commodore-64&gt;&lt;graphics&gt;&lt;interrupt&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8862" PostTypeId="2" ParentId="8861" CreationDate="2019-01-21T20:34:31.477" Score="7" Body="&lt;p&gt;The VIC keeps the CPU interrupt line activated until the cause for the interrupt is acknowledged, so if you don't tell the VIC which of the interrupts are now handled it won't release the CPU interrupt line and CPU keeps executing the interrupt routine.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-01-21T20:34:31.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8863" PostTypeId="2" ParentId="8861" CreationDate="2019-01-21T20:56:22.140" Score="10" Body="&lt;p&gt;The 6502 is designed to be used in systems with devices that may need to cause an interrupt.  The way this is accommodated is by having each device use an open-collector/open-drain output to drive the /IRQ pin, which is passively pulled up with a resistor.  If any device wants the /IRQ pin low, it will be low.  Only if no device wants it low will it be high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When an IRQ occurs, the handler will initially have no idea which device requested it.  The usual practice is for each device to provide a means of asking whether it requested an interrupt, and for the device to keep on requesting an interrupt until the CPU does whatever the device needed it to do.  Suppose there are two devices and the second one needs service.  It will drive IRQ, whereupon the interrupt service routine will check whether the first device needs service (it won't), so the interrupt service routine will check the second device, see that it needs service, and start servicing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the first device decided it needed service at some point while the second device was being serviced, the first device would start driving IRQ (which the second device may or may not still be driving).  After code finishes servicing the second device, it will execute an &lt;code&gt;RTI&lt;/code&gt; which will re-enable interrupts.  As soon as that happens, the asserted /IRQ line will cause the CPU to re-invoke the interrupt handler, which will then ask whether the first device needs service (it will), and thus service the first device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some kinds of devices such as UARTS (&quot;serial ports&quot;) and interrupts (e.g. &quot;incoming character received&quot;) it may not be necessary to explicitly acknowledge interrupts.  If an interrupt indicates that a character has been received but code hasn't yet read it, the act of reading all characters that have been received would clear the condition until more characters arrive.  For something like the raster interrupt on the VIC-II, however, the only way the VIC-II can know that the processor has noticed that it has requested an interrupt is for the processor to indicate that by writing to $D019.  Using ASL is a handy way of writing a suitable value.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-01-21T20:56:22.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8864" PostTypeId="2" ParentId="8849" CreationDate="2019-01-21T21:09:42.790" Score="5" Body="&lt;p&gt;Yet another factor that hasn't been mentioned is that ink jet printers have become far more common than laser printers, and have a critical ability that laser printers lack, which in turn propelled the use of PostScript: the ability to suspend and resume printing in the middle of a page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normal printer drivers could print pages which were too complex to fit in memory by processing all of the drawing operations on a bitmap that was large enough to handle a narrow strip at the top of the page, ignoring all operations that fell outside that region.  The driver could then feed that strip to the printer, clear the bitmap, and then proceed to reprocess all of the drawing operations, but using a bitmap that represented the next strip on the page.  Once that was done, it could print that, clear the bitmap, and render the strip after that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PostScript is not designed to facilitate strip-buffering techniques, since its design assumes that any graphics operation that is requested can be performed directly on the output bitmap and then forgotten about.  If most printers required a page-at-once page rendering model, using PostScript might make sense as a printer communications language, but that isn't, and likely never will be, the case.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-01-21T21:09:42.790" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8865" PostTypeId="1" CreationDate="2019-01-21T21:24:04.520" Score="2" ViewCount="298" Body="&lt;p&gt;Recently, I've been very interested in old-school bulletin board systems (BBS) from the 90s. I'm interested in building my own (mostly as just a fun challenge), but to be honest, I'm not totally sure where to begin. I was wondering if anyone knew of any resources out there on the web that maybe have details how these things operate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a lot of BBSs I've been on, it seems like a lot of them use some kind of TUI to output information and menus to the user. I also would have no clue how to link Door Games/MUDS to my software.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm relatively experienced with programming, but not as experienced dealing with stuff like sending data over telnet, and how that protocol works, so if anyone could point me in the right direction or have any resources on how the older BBSs were built, that would be great!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help is much appreciated! :D&lt;/p&gt;&#xA;" OwnerUserId="11648" LastActivityDate="2019-01-22T01:04:41.440" Title="How do Bulletin Board Systems work?" Tags="&lt;linux&gt;&lt;bbs&gt;" AnswerCount="2" CommentCount="12" ClosedDate="2019-01-22T07:20:36.580" ContentLicense="CC BY-SA 4.0" />
  <row Id="8866" PostTypeId="2" ParentId="8849" CreationDate="2019-01-21T21:32:06.850" Score="2" Body="&lt;p&gt;I think the most basic answer to your question is that PS did not describe an interface, only the document.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So at a minimum you needed to implement some sort of physical interface on the printer, say Ethernet or Centronics, and then write a driver for the computer. For much of the history since then, this basic pattern has not changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's worth pointing out that the original rendering engine from Adobe did include the interface and was licensed to various vendors. Apple licensed it and replaced their code with an AppleTalk interface. You still needed the driver to talk to the printer's job control system though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But things are changing. Now there is a single universal physical interface one can use for this sort of thing, it's the internet. Printers also have lots of leftover power and memory too. So you can short circuit much of the remaining gap by assigning the printer a local-only DNS (like Bonjour) and sending it PDFs. All that remains is the protocol to &quot;send&quot;, which IIRC, HP uses SMTP to complete. This reduces the driver to something that creates a PDF and mails it to a known 'net node.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="357" LastEditDate="2019-01-22T09:53:26.397" LastActivityDate="2019-01-22T09:53:26.397" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8868" PostTypeId="2" ParentId="8856" CreationDate="2019-01-21T22:07:08.157" Score="5" Body="&lt;p&gt;Two more slightly different situations from the past (well, everything in Retrocomputing is from the past...):&lt;/p&gt;&#xA;&lt;h3&gt;3270 Emulation&lt;/h3&gt;&#xA;&lt;p&gt;When I was at the University of Maryland, College Park in the early 1980s, there were some Vaxes, a Univac 1100/80 and some other non-IBM large systems, and there were some micros (my first networking course was on the then brand new IBM AT). But the bulk of the CS courses, the primary email system, etc. was all on IBM mainframes. However, except for system consoles (not accessible to undergrads) and a handful of experimental systems, we had no IBM terminals. There were some Decwriters but most of the terminals were ADM3As and similar video terminals, many (not all) running on the mainframes with a 3270 emulation. One day I was chatting with someone online and lamenting that my wonderful Wyse 100 was limited to glass TTY operation on the mainframes. Soon enough, I was down in the bowels of the CS building with my Wyse 100 and a few hours later it was working in 3270 emulation mode. It turns out they had an IBM Series/1 set up as a terminal/protocol server and it handled all the translation needed - whether a VT52 or an ADM3A or Wyse 100 or whatever. Unlike a lot of terminal drivers, this had to do &lt;strong&gt;everything&lt;/strong&gt; on both input and output. Every function key, cursor key, etc. was translated, even if it was a multi-character key, into an equivalent 3270 code. The Series/1 maintained a screen buffer for each connected terminal and would send blocks of data to the mainframe when appropriate. That also allowed for screen redraw, which was useful in the days of sometimes flaky modem connections. As far as the mainframe was concerned, everything was either a full-blown 3270 or a plain TTY that only supported CR/LF/BS.&lt;/p&gt;&#xA;&lt;h3&gt;Concurrent DOS&lt;/h3&gt;&#xA;&lt;p&gt;Digital Research Concurrent DOS was the successor to MP/M-86 (which in turn was the 16-bit version of MP/M which was the multiuser version of CP/M). As with all those previous operating systems, most software had to manage its own &amp;quot;terminal drivers&amp;quot; in whatever way it chose to do so (as explained in other answers), with the operating system handling just the byte-level I/O (baud rate, parity, handshaking, etc.). However, Concurrent DOS added an IBM PC emulation mode using the magic of the 80386 processor (which could run multiple simulated 8086 sessions, each accessing 1 Meg. of RAM, etc., and could also trap any video memory accesses) and terminals such as the Wyse 60 with a &amp;quot;PC Mode&amp;quot; emulation. The PC Mode emulation sent keys as the scan codes normally sent from an IBM PC-compatible keyboard,  thus allowing for full compatibility with software that understands the cursor keys, function keys, etc.as well as capturing &amp;quot;key down&amp;quot; vs. &amp;quot;key up&amp;quot; as needed for full interactive use of certain applications. The end result was a nearly complete monochrome text-mode (there was a color version at one time as well, but far less popular) on dozens of terminals on a single system (80386, 80486, I think I went as far as Pentium Pro before networked cheap computers became more practical). In this particular case, the operating system handled all the differences between terminal types. In reality, there were only a few relevant terminal types as taking a VT100 or ADM3A and trying to use it in PC Mode would be extremely limiting and have a number of problems. But at least for a small group of terminal types, this was a situation where the operating system truly did have terminal drivers and did not leave the configuration to the application at all. The applications - whether CP/M-86 or MS-DOS, whether using OS calls for I/O or blindly writing to video memory - could not tell which of the various &amp;quot;PC Mode&amp;quot; terminals (with their minor variations) was actually being used.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-21T22:07:08.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8869" PostTypeId="1" AcceptedAnswerId="8886" CreationDate="2019-01-21T22:53:07.017" Score="87" ViewCount="18357" Body="&lt;p&gt;Programming language development has been influenced by hardware design. One example from &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6099&quot;&gt;this answer&lt;/a&gt; mentions how C pointers were, at least in part, influenced by the design of the PDP-11. Has the reverse taken place, where a construct provided by a language drove the development of hardware?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be clear, I'm wondering about core language constructs, like pointers for example, rather than industry consortiums coming up with something like OpenGL then being implemented in hardware. Perhaps hardware floating-point support? &lt;/p&gt;&#xA;" OwnerUserId="11658" LastActivityDate="2020-05-26T12:42:44.643" Title="Have programming languages driven hardware development?" Tags="&lt;hardware&gt;&lt;software&gt;&lt;c&gt;" AnswerCount="20" CommentCount="17" FavoriteCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="8870" PostTypeId="2" ParentId="8856" CreationDate="2019-01-21T23:00:42.070" Score="4" Body="&lt;p&gt;I guess that's a field one can come up with many views - and all presented answers so far give a valid view with lots of additional information. This is intended to break it down to a more general statements:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;No, at the core no OS offers terminal drivers. Just serial (or whatever) line drivers handling bare communication to a device connected. Input (and output) is mainly on a character by character base (mainframes do differ) This is also often called &lt;strong&gt;RAW mode&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Many  OS offer (very limited) on functionality for line editing and some escape functions (like program or input abort or escape to OS level). Here input was not on a character basis, but a whole line at once. Examples would be MS-DOS or CP/M function 0Ah. In some way this could be called a driver function. Other systems delegated this into user side libraries. This is usually called &lt;strong&gt;Cooked mode&lt;/strong&gt;. (*1)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Within the 'world' of a single provider (like DEC or IBM) terminal codes where usually kept upward compatible, so programmers just used the known sequences to control terminal output, marking a certain terminal as minimum requirement.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In heterogenous environments developers soon added tools based on databases assigning to be used code sequences to generalized (virtual) functions. Depending on the program model this was done&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;by calls into the data base handler for each occurrence when produced, or&lt;/li&gt;&#xA;&lt;li&gt;by inserting virtual codes into a buffered output and then having the whole message translated into a message the terminal would understand.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The eventually most prominent implementation here might be Unix' Termcap. A simple text data base structured by terminal-identifier and function-identifier.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In the mainframe world existed some rather primitive OS side drivers for terminal agnostic handling of output, usually limited to things like line feed highlighting and locking/unlocking of input areas.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Bottom Line: &lt;em&gt;Terminals were in most cases simple character based interfaces with usually no higher level support for output and optional (and rather minimal) support for input handling.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - A few systems/libraries also offered something that could be called &lt;strong&gt;Rare mode&lt;/strong&gt; where operation was character based, but certain, single character codes would be caught and interpreted before (or instead of) handed to the application.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-01-22T00:17:21.880" LastActivityDate="2019-01-22T00:17:21.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8871" PostTypeId="2" ParentId="8869" CreationDate="2019-01-21T23:15:50.517" Score="21" Body="&lt;p&gt;Yes.  Case in point, the VAX.  The instruction set design was influenced by the requirements of the compiled languages of the day.  For example, the orthogonality of the ISA; the provision of instructions that map to language constructs such as 'case' statements (in the numbered-case sense of Hoare's original formulation, not the labelled-case of C), loop statements, and so on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.bitsavers.org/pdf/dec/vax/archSpec/EK-VAXAR-RM-001_Arch_May82.pdf&quot; rel=&quot;noreferrer&quot;&gt;VAX Architecture Ref&lt;/a&gt; - see the &lt;em&gt;Introduction&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not claiming the VAX is unique in this respect, just an example I know a little about. As a second example, I'll mention the Burroughs B6500 'display' registers.  A display, in 1960s speak, is a mechanism for efficient uplevel references. If your language, such as Algol60, permits declaration of nested procedures to any depth, then arbitrary references to the local variables of different levels of enclosing procedure require special handling.  The mechanism used (the 'display') was invented for KDF9 Whetstone Algol by Randell and Russell, and described in their book &lt;a href=&quot;http://www.softwarepreservation.org/projects/ALGOL/book/Randell_ALGOL_60_Implementation_1964.pdf/view&quot; rel=&quot;noreferrer&quot;&gt;Algol 60 Implementation&lt;/a&gt;. The &lt;a href=&quot;http://www.cs.ucf.edu/~eurip/papers/BurroughsB6500stack.pdf&quot; rel=&quot;noreferrer&quot;&gt;B6500&lt;/a&gt; incorporates that into hardware:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The B6500/B7500 contains a network of Display Registers (D0 through&#xA;  D31) which are caused to point at the appropriate MSCW (Fig. 5). The&#xA;  local variables of all procedures global to the current procedure are&#xA;  addressed in the B6500/B7500 relative to the Display Registers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-01-22T00:25:33.290" LastActivityDate="2019-01-22T00:25:33.290" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8872" PostTypeId="2" ParentId="8865" CreationDate="2019-01-21T23:41:00.083" Score="1" Body="&lt;p&gt;Preface: That question is not only &lt;strong&gt;way&lt;/strong&gt; to broad, but also not RC related in any way. A BBS is, per se, not more retro than word processing or a GUI. To make it retro, some genuine product from back then would need to be incorporated - and the question being about that, not generic.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Having said that, it feels as there is a very specific misconception about a BBS as being something special. But it isn't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A BBS is a standard user program acting with its user&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no principal difference if the terminal is connected directly to the serial port of that machine, or via a modem. Depending on the modem setup, it might not even have to know about (*1). Of course, it may help. So a BBS program is nothing else than some application to access to the data stored via whatever user interface the programmer has in mind. Menu driven, command line or some weird control codes, pick your favourite.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Maybe think of it as a shell&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing the same via Telnet is no difference except for the programming interface. If at all. For example when using Unix, one can write a BBS application complete agnostic, by just reading from standard input and writing to standard output. BBS users get your BBS application set as shell in their &lt;a href=&quot;https://en.wikipedia.org/wiki/Passwd&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;/etc/passwd&lt;/code&gt;&lt;/a&gt; entry. Using this way even adds multi user capabilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or go the 'hard' way and replace &lt;code&gt;getty&lt;/code&gt; for all modem interfaces by your application. Now you can manage users on your own and don't have to add each as system user. For Telnet it's mostly the same, just a bit more configuration magic (like entries &lt;code&gt;/etc/services&lt;/code&gt; and so on).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On &lt;strong&gt;non-Unix-systems&lt;/strong&gt; it's no difference. Sure, if you want to support multiple lines under a non-multitasking system you may have to add some thought about managing concurrent interfaces and sessions. But that's no big deal either. The application itself will be way more code than a user or process management. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;To write a BBS, write a program doing the interface and processing and offer it to the world&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Basic modems communicate over RS232/V.24 signal lines to signal and accept a call or hang up. So if these signals are handled correctly by the serial driver, any application can be operated remote. Smart modems (Hayes et.al.) can be even set up to take of more complicated load than answering.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-01-22T00:18:09.560" LastActivityDate="2019-01-22T00:18:09.560" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8873" PostTypeId="2" ParentId="8869" CreationDate="2019-01-21T23:52:51.910" Score="10" Body="&lt;p&gt;Arguably, the relatively simple logical structure of DO loops in Fortran motivated the development of vector hardware on the early Cray and Cyber supercomputers. There may be some &quot;chicken and egg&quot; between hardware and software development though, since CDC Fortran included array slicing operations to encourage programmers to write &quot;logic-free&quot; loops long before that syntax became standardized in Fortran 90.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Certainly the Cray XMP hardware enhancements compared with the Cray 1, such as improved &quot;chaining&quot; (i.e. overlapping in time) of vector operations, vector mask instructions, and gather/scatter vector addressing, were aimed at improving the performance of typical code written in &quot;idiomatic&quot; Fortran.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The need to find a way to overcome the I/O bottlenecks caused by faster computation, without the prohibitive expense of large fast memory, led to the development of the early Cray SSD storage devices as an intermediate level between main memory conventional disk and tape storage devices. Fortran I/O statements made it easy to read and write a random-access file as if it were a large two-dimensional array of data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See section 2 of &lt;a href=&quot;http://www.chilton-computing.org.uk/ccd/supercomputers/p005.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.chilton-computing.org.uk/ccd/supercomputers/p005.htm&lt;/a&gt; for an 1988 paper by the head of the Cray XMP design team.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a downside to this, in that the performance of the first Cray C compilers (and hence the first implementation of the Unix-like Cray operating system UNICOS) was abysmal, since the hardware had no native character-at-a-time instructions, and there was little computer science theory available to attempt to vectorize idiomatic &quot;C-style&quot; loops with a relatively unstructured combination of pointer manipulation and logical tests, compared with Fortran's more rigidly structured DO loops.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2019-01-21T23:58:28.657" LastActivityDate="2019-01-21T23:58:28.657" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8874" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T00:15:43.987" Score="57" Body="&lt;h2&gt;Simply yes.&lt;/h2&gt;&#xA;&lt;p&gt;And not just a few instructions, but whole CPUs have been developed with languages in mind. Most prominent maybe Intel's 8086. Already the basic CPU was designed to support the way high level languages handle memory management, especially stack allocation and usage. With BP a separate register for stack frames and addressing was added in conjunction with short encodings for stack related addressing to make HLL programs perform. The 80186/286 went further in this direction by adding Enter/Leave instructions for stack frame handling.&lt;/p&gt;&#xA;&lt;p&gt;While it can be said that the base 8086 was geared more toward languages like Pascal or PL/M (*1,2), later incarnations added many ways to support the now prevalent C primitives - not at least scaling factors for indices.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Since many answers pile now various details of CPUs where instructions may match up (or not), there are maybe two other CPUs worth mentioning: The Pascal Microengine and Rockwells 65C19 (as well as the RTX2000).&lt;/p&gt;&#xA;&lt;h2&gt;Pascal Microengine, a CPU made for generic HLL implementaions&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pascal_MicroEngine&quot; rel=&quot;noreferrer&quot;&gt;Pascal Microengine&lt;/a&gt;&lt;/strong&gt; was a WD MCP1600 chipset (*3) based implementation of the virtual 16 bit &lt;a href=&quot;https://en.wikipedia.org/wiki/P-code_machine#UCSD_p-Machine&quot; rel=&quot;noreferrer&quot;&gt;UCSD p-code&lt;/a&gt; processor. Contrary to what the name suggests, it wasn't tied to Pascal as a language, but a generic stack machine tailored to support concepts for HLL operations. Beside a rather simple, stack based execution, the most important part was a far reaching and comfortable management of local memory structures for functions and function linking as well as data. Modern time &lt;a href=&quot;https://en.wikipedia.org/wiki/Java_bytecode&quot; rel=&quot;noreferrer&quot;&gt;Java Bytecode&lt;/a&gt; and its interpreter as a native Bytecode CPU (e.g. PicoJava) isn't in any way a new idea (*4).&lt;/p&gt;&#xA;&lt;h2&gt;R65C19 and N4000, CPU's enhanced or custom made for a specific language&lt;/h2&gt;&#xA;&lt;p&gt;The Rockwell &lt;a href=&quot;http://archive.6502.org/datasheets/rockwell_r65c19_microcomputer.pdf&quot; rel=&quot;noreferrer&quot;&gt;R65C19&lt;/a&gt; is a &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502&quot; rel=&quot;noreferrer&quot;&gt;6500&lt;/a&gt; variant with added support for &lt;a href=&quot;https://en.wikipedia.org/wiki/Forth_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;Forth&lt;/a&gt;. Its 10 new threaded code instructions (*5) implemented the core functions (like Next) of a Forth system as single machine instructions.&lt;/p&gt;&#xA;&lt;p&gt;Forth as a language was developed with a keen eye on the way it is executed. It got more in common with Assemblers than many other HLL (*6). So it's no surprise that, already in 1983, its inventor &lt;a href=&quot;https://en.wikipedia.org/wiki/Charles_H._Moore&quot; rel=&quot;noreferrer&quot;&gt;Charles Moore&lt;/a&gt; created a Forth CPU called N4000 (*7).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Most remarkable here the string functions which make only sense in languages supporting strings as discrete data type.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Stephen Morse's &lt;a href=&quot;https://www.stevemorse.org/8086/index.html&quot; rel=&quot;noreferrer&quot;&gt;8086 primer&lt;/a&gt; is still a good read - especially when he talks about the finer details. Similar and quite recommended his &lt;a href=&quot;https://www.pcworld.com/article/146917/components/article.html&quot; rel=&quot;noreferrer&quot;&gt;2008 interview&lt;/a&gt; about the 8086 creation where he describes his approach as mostly HLL driven.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Which makes it basically a LSI-11 with different microcode.&lt;/p&gt;&#xA;&lt;p&gt;*4 - As IT historians, we have seen each and every implementation already before, haven't we? So let's play a round of &lt;a href=&quot;https://en.wikipedia.org/wiki/Z-machine&quot; rel=&quot;noreferrer&quot;&gt;Zork&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*5 - There are other nice additions as well, like mathematical operations that ease filter programming - after all, the 65C19/29/39 series was the heart of many modems.&lt;/p&gt;&#xA;&lt;p&gt;*6 - The discrimination with assembler as not being a HLL and miles apart becomes quite blurry when looking close anyway.&lt;/p&gt;&#xA;&lt;p&gt;*7 - Later sold to Harris, who developed it into the &lt;a href=&quot;http://soton.mpeforth.com/flag/jfar/vol6/no1/article1.pdf&quot; rel=&quot;noreferrer&quot;&gt;RTX2000&lt;/a&gt; series - with radiation hardened versions that power several &lt;a href=&quot;https://web.archive.org/web/20110204160744/http://forth.gsfc.nasa.gov/&quot; rel=&quot;noreferrer&quot;&gt;deep space probes&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-25T17:59:30.203" CommentCount="21" ContentLicense="CC BY-SA 4.0" />
  <row Id="8875" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T00:28:05.903" Score="9" Body="&lt;p&gt;I recall, back in the 80’s, and referenced in the Wikipedia article, &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Bellmac_32&quot; rel=&quot;noreferrer&quot;&gt;Bellmac 32&lt;/a&gt; CPU, which became the AT&amp;amp;T Western Electric WE32100 CPU was supposedly designed for the C programming language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This CPU was used by AT&amp;amp;T in their 3B2 line of Unix systems. There was also a single board VME bus version of it that some third parties used. Zilog also came out with a line of Unix systems using this chip - I think they were a second source for it for AT&amp;amp;T. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did a lot of work with these in the 80’s and probably early 90’s. It was pretty much a dog in terms of performance, if I remember.&lt;/p&gt;&#xA;" OwnerUserId="4213" LastActivityDate="2019-01-22T00:28:05.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8876" PostTypeId="2" ParentId="8865" CreationDate="2019-01-22T01:04:41.440" Score="3" Body="&lt;p&gt;Back before the Internet, BBS systems were accessed by dialup modem connections. The caller would dial the phone number of the BBS, where it would connect to a modem (and then to the computer through the modem serial port). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple BBS might have one phone line, so only one caller could connect at any given time. If the phone line was busy, you would try again later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A larger system might have more than one phone line, and therefore more than one modem. Sometimes the BBS operator would install extra serial port cards in a single computer to control multiple modems, or other systems would have one modem per computer and the computers would talk to each other via a LAN.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there was more than one phone line, a simple setup would have different phone numbers to call for each line. A more sophisticated setup would have a single &quot;rollover&quot; number set up with the phone company which would automatically find the next available line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The software running on the BBS would communicate with the caller through the serial port. To draw screens, the BBS would send &lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_escape_code&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANSI escape codes&lt;/a&gt; which pretty much all terminal programs (that's the software the caller runs) supported. The BBS could then move the cursor around, draw lines, use colours, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &quot;door game&quot; was a separate program from the main BBS. When the caller chose to enter a door game, the BBS would effectively unload itself, and run the door game program, telling it to communicate with the same serial port. The BBS would be out of the picture for a while, until the caller chose to exit the door game and return to the BBS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the advent of the Internet, all this changed because you no longer needed a point-to-point modem connection for each caller. Many callers could simultaneously connect over the same net connection. Of course, the BBS software had to change a bit to accommodate this new way of working, and the whole mechanism that door games were run had to change too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a handful of traditional BBS systems still out there today, but I doubt any of them actually support dialup modem connections. They probably all support telnet connections, using appropriate software that actually understands the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure whether there are any particular resources I could point you to, but I happen to know a thing or two about doing this from writing BBS systems a few decades ago.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2019-01-22T01:04:41.440" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8877" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T02:39:07.160" Score="16" Body="&lt;h1&gt;Some manufacturers have directly admitted such&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The first page of the Intel 8086 data sheet lists the processor's features, which include&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Architecture Designed for Powerful Assembly Language and Efficient High Level Languages&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In particular, C and other high-level languages use the stack for arguments and local variables.  The 8086 has both a stack pointer (SP) and a frame pointer (BP) which address memory using the stack segment (SS) rather than other segments (CS, DS, ES).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The datasheet for the 8087 co-processor has the following section:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;PROGRAMMING LANGUAGE SUPPORT&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Programs for the 8087 can be written in Intel's high-level languages for 8086/8088 and 80186/80188 systems; ASM-86 (the 8086, 8088 assembly language), PL/M-86, FORTRAN-86, and PASCAL-86.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 80286 added several instructions to the architecture to aid high-level languages.  &lt;code&gt;PUSHA&lt;/code&gt;, &lt;code&gt;POPA&lt;/code&gt;, &lt;code&gt;ENTER&lt;/code&gt;, and &lt;code&gt;LEAVE&lt;/code&gt; help with subroutine calls.  The &lt;code&gt;BOUND&lt;/code&gt; instruction was useful for array bounds checking and &lt;code&gt;switch&lt;/code&gt;-style control statements.  Other instructions unrelated to high-level languages were added as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 80386 added bitfield instructions, which are used in C.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The Motorola &lt;em&gt;MC68000 Microprocessor User's Manual&lt;/em&gt; states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2.2.2  Structured Modular Programming&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&amp;#91;...&amp;#93;&#xA;  The availability of advanced, structured assemblers and block-structured high-level languages such as Pascal simplifies modular programming.  Such concepts are virtually useless, however, unless parameters are easily transferred between and within software modules that operate on a re-entrant and recursive basis.&#xA;  &amp;#91;...&amp;#93;&#xA;  The MC68000 provides architectural features that allow efficient re-entrant modular programming.  Two complementary instructions, link and allocate (&lt;code&gt;LINK&lt;/code&gt;) and unlink (&lt;code&gt;UNLK&lt;/code&gt;), reduce subroutine call overhead by manipulating linked lists of data areas on the stack.  The move multiple register instruction (&lt;code&gt;MOVEM&lt;/code&gt;) also reduces subroutine call programming overhead.&#xA;  &amp;#91;...&amp;#93;&#xA;  Other instructions that support modern structured programming techniques are push effective address (&lt;code&gt;PEA&lt;/code&gt;), load effective address (&lt;code&gt;LEA&lt;/code&gt;), return and restore (&lt;code&gt;RTR&lt;/code&gt;), return from exception (&lt;code&gt;RTE&lt;/code&gt;), jump to subroutine (&lt;code&gt;JSR&lt;/code&gt;), branch to subroutine (&lt;code&gt;BSR&lt;/code&gt;), and return from subroutine (&lt;code&gt;RTS&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 68020 added bitfield instructions, which are used in C.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Whereas the above processors &lt;em&gt;added&lt;/em&gt; instructions to support programming languages, Reduced Instruction-Set Computers (RISC) took the opposite approach.  By analyzing which instructions compilers actually used, they were able to discard many complex instructions that weren't being used.  This allowed the architecture to be simplified, shorten the instruction cycle length, and reduce instructions to one cycle, speeding up processors significantly.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2019-01-22T23:48:56.207" LastActivityDate="2019-01-22T23:48:56.207" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="8878" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T06:01:49.367" Score="44" Body="&lt;p&gt;One interesting example of programming languages driving hardware development is the LISP machine. Since &quot;normal&quot; computers of the time period couldn't execute lisp code efficiently, and there was a high demand for the language in academia and research, dedicated hardware was built with the sole purpose of executing lisp code. Although lisp machines were initially developed for MIT's AI lab, they also saw sucess in &lt;a href=&quot;https://web.archive.org/web/20110716211447/http://lemonodor.com/archives/000256.html&quot; rel=&quot;noreferrer&quot;&gt;computer animation&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These computers provided increased speed by using a stack machine instead of the typical register based design, and had native support for type checking lisp types. Some other important hardware features aided in garbage collection and closures. Here's a series of slides that go into more detail on the design: &lt;a href=&quot;https://www.cs.utah.edu/~mflatt/past-courses/cs6510/public_html/lispm.pdf&quot; rel=&quot;noreferrer&quot; title=&quot;Architecture of Lisp Machines&quot;&gt;Architecture of Lisp Machines (PDF)&lt;/a&gt; (&lt;a href=&quot;http://web.archive.org/web/20170829231741/https://www.cs.utah.edu/~mflatt/past-courses/cs6510/public_html/lispm.pdf&quot; rel=&quot;noreferrer&quot;&gt;archive&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The architecture of these computers are specialized enough that in order to run c code, the c source is transpiled into lisp, and then run normally. The &lt;a href=&quot;https://github.com/vsedach/Vacietis&quot; rel=&quot;noreferrer&quot; title=&quot;Vacietis github&quot;&gt;Vacietis&lt;/a&gt; compiler is an example of such a system. &lt;/p&gt;&#xA;" OwnerUserId="11662" LastEditorUserId="-1" LastEditDate="2019-01-24T13:34:25.420" LastActivityDate="2019-01-24T13:34:25.420" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8879" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T07:04:34.733" Score="13" Body="&lt;p&gt;Over time, there have been various language-specific CPUs, some so dedicated that it would be awkward to use them for a different language. For example, the Harris RTX-2000 was designed to run &lt;strong&gt;Forth&lt;/strong&gt;.  One could almost say it and other Forth CPUs were the language in hardware form. I'm not saying they understand the language, but they are designed to execute it at the &quot;assembler&quot; level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early on, Forth was known for being extremely memory efficient, fast, and, for programmers who could think bass-ackwards, quick to develop in. Having a CPU that could execute it almost directly was a no-brainer. However, memory got cheaper, CPU's got quicker, and programmers who liked &lt;a href=&quot;http://thinking-forth.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;thinking Forth&lt;/a&gt; got scarcer.  (How many folks still use calculators in reverse Polish notation mode?) &lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2019-01-22T16:22:42.357" LastActivityDate="2019-01-22T16:22:42.357" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8880" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T07:29:54.193" Score="7" Body="&lt;p&gt;Another interesting example are Java processors, CPUs that execute (a subset of) Java Virtual Machine bytecode as their instruction sets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you’re interested enough to ask this question, you might want to read one of the later editions of Andrew Tanenbaum’s textbook, &lt;em&gt;Structured Computer Organization&lt;/em&gt;¹, in which he walks the reader step-by-step through the design of a simple Java processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;¹ Apparently not the third edition or below.  It’s in Chapter 4 of the fifth edition.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2019-01-22T20:31:43.013" LastActivityDate="2019-01-22T20:31:43.013" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8881" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T07:54:46.137" Score="8" Body="&lt;p&gt;Yes, definitely. A very good example is how Motorola moved from the 68k architecture to the (somewhat) compatible ColdFire range of CPUs. (It is also an example of how such an evolution might go wrong, but that is another story).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Motorola Coldfire range of CPUs and Microcontrollers was basically a 68000 CPU32 core with lots of instructions and addressing modes removed that &quot;normal&quot; C compilers wouldn't use frequently (like arithmetic instructions on byte and word operands, some complex addressing modes and addressing modes that act only on memory in favor of registers,...). They also simplified the supervisor mode model and removed some rarely used instructions completely. The whole instruction set was &quot;optimized for C and C++ compilers&quot; (This is how Motorola put it) and the freed up chip space used to train the CPUs for performance (like with adding larger data and instruction caches).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, the changes made the CPUs quite a bit too incompatible for customers to stay within the product family, and the MC68k range of CPUs went towards its demise.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2019-01-22T07:54:46.137" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8882" PostTypeId="2" ParentId="8861" CreationDate="2019-01-22T08:20:07.883" Score="6" Body="&lt;p&gt;The 6502 only has a single IRQ line which is used by any device connected to it. In the C64, we have the CIA#1 and the VIC-II connected to IRQ.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU reacts on a signalled IRQ only if its interrupt flag is cleared. When starting to service an IRQ, the interrupt flag is set automatically and will stay set until either the end of the ISR (Interrupt service routine) on &lt;code&gt;rti&lt;/code&gt; or the routine explicitly clears it with &lt;code&gt;cli&lt;/code&gt;*). So, if the CPU is in the middle of servicing an IRQ, it normally won't start servicing another one. Therefore, any device will keep signalling an IRQ until it is told to stop by acknowledging it, it's the only way for the device to &quot;know&quot; the IRQ is being serviced. If the VIC-II wants an interrupt while a CIA#1-IRQ is being serviced -- it has to wait. Note this is normally bad because VIC-II IRQs are often timing critical, so in a real-world C64 program, you will make sure that &lt;em&gt;only&lt;/em&gt; the VIC-II will generate IRQs. You still have to acknowledge them because the VIC-II can't know about this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you fail to acknowledge an IRQ before the interrupt flag is cleared, the CPU will instantly start to service it again, effectively locking up in an &quot;endless IRQ loop&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note: the NMI line works differently. NMIs don't care about the interrupt flag (so they will always be serviced when they occur), and they are &lt;em&gt;edge-triggered&lt;/em&gt;, which means the CPU only reacts on a &lt;em&gt;change&lt;/em&gt; of the signal. Therefore, it's possible to &quot;block&quot; NMIs by deliberately &lt;strong&gt;not&lt;/strong&gt; acknowledging one -- NMI will stay signalled and no other NMI will ever change that signal again unless the previous one is acknowledged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disclaimer: The existing answers are absolutely correct, but it's an interesting question, so I thought another approach explaining it won't hurt :)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*) this allows you to have &quot;nested&quot; ISRs, which is sometimes a nice thing. It can for example be used to implement some simple &quot;job priority&quot;: Your main logic runs in normal code, you have one ISR per frame that does something expensive (like scrolling the screen) and immediately acknowledges the IRQ and clears the interrupt flag to allow some short ISRs to be triggered, e.g. for some rasterbars.&lt;/p&gt;&#xA;" OwnerUserId="7040" LastEditorUserId="7040" LastEditDate="2019-01-22T09:46:14.720" LastActivityDate="2019-01-22T09:46:14.720" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8883" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T08:51:11.350" Score="12" Body="&lt;h1&gt;Null-terminated strings&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;When C was invented, many different string forms were in used at the same time. String operations were probably handled mostly in software, therefore people can use whatever format they want. Null-terminated string wasn't a new idea, however special hardware support, if any, might not be meant for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But later &lt;em&gt;due to the domination of C&lt;/em&gt;, &lt;strong&gt;other platforms began adding accelerated instructions for the null-terminated format:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This had some influence on CPU instruction set design. Some CPUs in the 1970s and 1980s, such as the Zilog Z80 and the DEC VAX, had dedicated instructions for handling length-prefixed strings. However, as the NUL-terminated string gained traction, CPU designers began to take it into account, as seen for example in IBM's decision to add the &quot;Logical String Assist&quot; instructions to the ES/9000 520 in 1992.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Null-terminated_string#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Null-terminated_string#History&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;On x86 Intel introduced many instructions for text processing in SSE4.2, which do things in parallel until the first null-termination character. Before that there was the &lt;a href=&quot;https://www.felixcloutier.com/x86/scas:scasb:scasw:scasd&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;SCAS&lt;/code&gt; - scan string&lt;/a&gt; instruction that can be used to look for the position of the termination character&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;mov ecx, 100                ; search up to 100 characters&#xA;xor eax, eax                ; search for 0&#xA;mov edi, offset string      ; search this string&#xA;repe scas byte ptr [edi]    ; scan bytes looking for 0 (find end of string)&#xA;jnz toolong                 ; not found&#xA;sub edi, (offset string) + 1 ; calculate length&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20190130-00/?p=100825&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://devblogs.microsoft.com/oldnewthing/20190130-00/?p=100825&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;We all know that &lt;a href=&quot;https://www.joelonsoftware.com/2001/12/11/back-to-basics/&quot; rel=&quot;nofollow noreferrer&quot;&gt;nowadays it's a bad idea&lt;/a&gt;. Unfortunately it was baked into C, hence used by every modern platform and can't be changed anymore. Luckily we have &lt;code&gt;std::string&lt;/code&gt; in C++&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The use of a string with some termination character seems already existed on the &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/dec/pdp7/PDP-7_AsmMan.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-7 where people can choose the termination character&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The string is terminated by the second occurrence of the delimiting character chosen by the user&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/dec/pdp7/PDP-7_AsmMan.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.trailing-edge.com/pdf/dec/pdp7/PDP-7_AsmMan.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However a &lt;strong&gt;real null-termination character&lt;/strong&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-8#Subroutines&quot; rel=&quot;nofollow noreferrer&quot;&gt;can be seen in used on the PDP-8&lt;/a&gt; (see the last line in the code block). Then the &lt;code&gt;ASCIZ&lt;/code&gt; keyword was introduced in the assembly language for PDP-10/11&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Null-terminated strings were produced by the .ASCIZ directive of the PDP-11 assembly languages and the ASCIZ directive of the MACRO-10 macro assembly language for the PDP-10. These predate the development of the C programming language, but other forms of strings were often used. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The B language, which appeared in 1969 and became the precursor to C, might be influenced by that and uses a special character for termination, although I'm not sure which one was chosen&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In BCPL, the first packed byte contains the number of characters in the string; in B, there is no count and strings are terminated by a special character, which B spelled *e&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/chist.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dennis M. Ritchie, &lt;em&gt;Development of the C Language&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h1&gt;Further reading&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/4418708/995714&quot;&gt;What's the rationale for null terminated strings?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/5840/1981&quot;&gt;How did the PDP-8 handle strings?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/programming/comments/3sogkw/whats_the_rationale_for_null_terminated_strings/&quot; rel=&quot;nofollow noreferrer&quot;&gt;What's the rationale for null terminated strings? on Reddit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/String_(computer_science)#Representations&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/String_(computer_science)#Representations&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1981" LastEditorUserId="79" LastEditDate="2020-05-26T12:41:23.557" LastActivityDate="2020-05-26T12:41:23.557" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="8884" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T09:27:22.217" Score="10" Body="&lt;p&gt;Another specific example of hardware design to match the languages was Recursiv, which was designed to implement object oriented language features in hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our Recursiv has been preserved in a museum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://en.wikipedia.org/wiki/Rekursiv&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Rekursiv&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2019-01-22T09:27:22.217" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8885" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T10:16:44.467" Score="7" Body="&lt;p&gt;Yet another example: The Prime minicomputer had a segmented architecture, and anything in segment 07777 was a null pointer (Prime used octal, and the top 4 bits of the 16-bit word had other uses).  Segment 0 was a kernel segment, and just loading 0 into a segment register in user code was an access violation.  This would have been fine in properly written C (&lt;code&gt;int* p = 0;&lt;/code&gt; stored bit pattern 7777/0 into p).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However it turns out that a &lt;em&gt;lot&lt;/em&gt; of C code assumes that if you &lt;code&gt;memset&lt;/code&gt; a block of memory to all bits zero, that any contained pointers will have been set to &lt;code&gt;NULL&lt;/code&gt;.  They eventually had to add a whole new instruction called TCNP (Test C Null Pointer).&lt;/p&gt;&#xA;" OwnerUserId="5137" LastActivityDate="2019-01-22T10:16:44.467" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8886" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T10:35:16.937" Score="48" Body="&lt;p&gt;Interesting question with an interesting answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First let me get one thing out of the way:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One example from this answer mentions how C pointers were, at least in part, influenced by the design of the PDP-11&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a myth to suggest C's design is based on the PDP-11. People often quote, for example, the increment and decrement operators because they have an analogue in the PDP-11 instruction set. This is, however, a coincidence. &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/chist.html&quot; rel=&quot;noreferrer&quot;&gt;Those operators were invented before the language was ported to the PDP-11&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are actually two answers to this question&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;processors that are targeted to a specific high level language&lt;/li&gt;&#xA;&lt;li&gt;processors that include features that a high level language might find useful.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In the former category we have most of the interesting eventual dead ends in computer hardware history. Perhaps the one of the earliest examples of a CPU architecture being targeted at a high level language is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Burroughs_large_systems&quot; rel=&quot;noreferrer&quot;&gt;Burroughs B5000 and its successors&lt;/a&gt;. This is a family of machines targeted at Algol. In fact, there wasn't really a machine language as such that you could program in. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The B5000 had a lot of hardware features designed to support the implementation of Algol. It had a hardware stack and all data manipulations were performed on the stack. It used tagged descriptors for data so the CPU had some idea of what it was dealing with. It had a series of registers called display registers that were used to model static scope* efficiently. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other examples of machines targeted at specific languages include the Lisp machine already mentioned, arguably the Cray series of supercomputers for Fortran - or even just Fortran loops, &lt;a href=&quot;https://en.wikipedia.org/wiki/ICL_2900_Series&quot; rel=&quot;noreferrer&quot;&gt;the ICL 2900&lt;/a&gt; series (also block structured high level languages), some machines targeted at the Java virtual machine (some ARM processors have &lt;a href=&quot;https://en.wikipedia.org/wiki/Jazelle&quot; rel=&quot;noreferrer&quot;&gt;hardware JVM support&lt;/a&gt;) and many others. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the drivers behind creating &lt;a href=&quot;https://en.wikipedia.org/wiki/Reduced_instruction_set_computer&quot; rel=&quot;noreferrer&quot;&gt;RISC&lt;/a&gt; architectures was the observation that compilers tended to use only a small subset of the available combinations of instructions and addressing modes available on most CPU architectures, so RISC designers ditched the unused ones and filled the space previously used for complex decoding logic with more registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the second category, we have individual features in processors targeted at high level languages. For example, the hardware stack is a useful feature for an assembly language programmer, but more or less essential for any language that allows recursive function calls. The processor may build features on top of that for example, many CPUs have an instruction to create a stack frame (the data structure on the stack that represents a function's parameters and local variables). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*Algol allowed you to declare functions inside other functions. Static scope reflects the way functions were nested in the program source - an inner function could access the variables and functions defined in it and in the scope in which it was defined and the scope in which that scope was defined all the way up to global scope.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2019-01-22T10:45:14.307" LastActivityDate="2019-01-22T10:45:14.307" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8887" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T11:42:42.843" Score="12" Body="&lt;p&gt;Arguably, VLIW architectures were designed mainly for smart compilers. They rely on efficient building of individual very complex instructions (a single &quot;instruction&quot; can do many things at the same time), and while it's not impossible to write the code manually, the idea was that you could get better performance for your applications by using a better compiler, rather than having to upgrade your CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In principle, the difference between e.g. a x86 superscalar CPU and something like SHARC or i860 is that x86 achieves instruction level parallelism at runtime, while SHARC is a very simple CPU design (comparatively) that relies on the compiler. In both cases, there's many tricks to reorder instructions, rename registers etc. to allow multiple instructions to run at the same time, while still appearing to execute them sequentially. The VLIW approach would be especially handy in theory for platforms like JVM or .NET, which use a just-in-time compiler - every update to .NET or JVM could make all your applications faster by allowing better optimizations. And of course, during compilation, the compiler has a lot better idea of what all of your application is trying to do, while the runtime approach only ever has a small subset to work with, and has to rely on techniques like statistical branch prediction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, the approach of having the CPU decide won out. This does make the CPUs incredibly complex, but it's a lot easier to just buy a new better CPU than to recompile or update all your applications; and frankly, it's a lot easier to sell a compatible CPU that just runs your applications faster :) &lt;/p&gt;&#xA;" OwnerUserId="542" LastActivityDate="2019-01-22T11:42:42.843" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8889" PostTypeId="2" ParentId="5927" CreationDate="2019-01-22T13:38:39.670" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;http://www.1541ultimate.net/content/index.php?option=com_content&amp;amp;view=article&amp;amp;id=42&amp;amp;Itemid=20&quot; rel=&quot;nofollow noreferrer&quot;&gt;1541-UII+&lt;/a&gt; cartridge has a network interface, and with a recent firmware, it's possible to use it from the c64. So far, listening on a port isn't supported, so you can't implement a server, but it's fully functional for clients.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's some &lt;a href=&quot;https://github.com/xlar54/ultimateii-dos-lib/blob/master/docs/UltimateNetworking.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;unofficial documentation&lt;/a&gt; -- and &lt;a href=&quot;https://csdb.dk/release/?id=174166&quot; rel=&quot;nofollow noreferrer&quot;&gt;a release of some networking tools&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7040" LastActivityDate="2019-01-22T13:38:39.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8890" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T15:25:31.267" Score="12" Body="&lt;p&gt;Some ARM CPUs used to have partial support for executing Java bytecode in hardware with &lt;a href=&quot;https://en.wikipedia.org/wiki/Jazelle&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Jazelle&lt;/a&gt; Direct Bytecode eXecution (DBX).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With modern JITing JVMs, that became obsolete, so there was later a variant of Thumb2 mode (compact 16-bit instructions) called ThumbEE designed as a JIT target for managed languages like Java and C# &lt;a href=&quot;https://en.wikipedia.org/wiki/ARM_architecture#Thumb_Execution_Environment_(ThumbEE)&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/ARM_architecture#Thumb_Execution_Environment_(ThumbEE)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently ThumbEE has automatic NULL-pointer checks, and an array-bounds instruction.  But that was deprecated, too, in 2011.&lt;/p&gt;&#xA;" OwnerUserId="3296" LastActivityDate="2019-01-22T15:25:31.267" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8891" PostTypeId="1" AcceptedAnswerId="8892" CreationDate="2019-01-22T15:54:25.200" Score="1" ViewCount="1526" Body="&lt;p&gt;How do I properly add Final Cartridge III to VICE Emulator?&#xA;In the file menu, VICE has an item &lt;code&gt;Attach cartridge image...&lt;/code&gt; which splits up into &lt;code&gt;CRT Image&lt;/code&gt; but also a list of several cartridges, among them &lt;code&gt;Freezer Cartridges&lt;/code&gt; -&gt; &lt;code&gt;The final Cartridge III Image&lt;/code&gt;. However, VICE is expecting a raw cartridge image file at that point.&#xA;I found a &lt;code&gt;.crt&lt;/code&gt; file for Final Cartridge III on &lt;a href=&quot;https://csdb.dk/release/?id=141638&quot; rel=&quot;nofollow noreferrer&quot;&gt;csdb&lt;/a&gt; which I could start by attaching it as generic CRT cartridge, but I assume installing via the predefined way might provide better integration?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further issue, is there a way to have the cartridge always enabled when I start VICE? Like the same way one would have this done at a computer in order to enjoy the comfort functions like fastloader and directory listing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, when running the Final Cartridge III via the crt file, the mouse emulation does not work, that is the pointer does not move although the catch mouse events option at VICE was enabled.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11916" LastEditDate="2019-04-21T19:17:47.830" LastActivityDate="2019-04-21T19:17:47.830" Title="How to add Final Cartridge III to VICE C64/128 Emulator" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;game-cartridge&gt;&lt;commodore-128&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8892" PostTypeId="2" ParentId="8891" CreationDate="2019-01-22T16:11:42.207" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I found a .crt file for Final Cartridge III on csdb which I could start by attaching it as generic CRT cartridge, but I assume installing via the predefined way might provide better integration?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The difference is only with a &quot;raw&quot; image, vice has to know the layout of it. If you have a &lt;code&gt;.crt&lt;/code&gt; file, generic should be ok. See also &lt;a href=&quot;http://vice-emu.sourceforge.net/vice_7.html#SEC109&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://vice-emu.sourceforge.net/vice_7.html#SEC109&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Further issue, is there a way to have the cartridge always enabled when I start VICE?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You could use a script / batch file starting vice with the appropriate commandline options. (&lt;code&gt;-cartcrt /path/to/your.crt&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Finally, when running the Final Cartridge III via the crt file, the mouse emulation does not work, that is the pointer does not move although the catch mouse events option at VICE was enabled.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;You also need to enable a mouse emulation, just catching mouse events isn't enough. For example, to emulate the 1351 mouse, use &lt;code&gt;-controlport1device 3&lt;/code&gt;, see also &lt;a href=&quot;http://vice-emu.sourceforge.net/vice_6.html#SEC59&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://vice-emu.sourceforge.net/vice_6.html#SEC59&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you enable the mouse emulation later in the settings menu, it won't work with this cartridge until you reset, see this hint: &lt;a href=&quot;http://vice-emu.sourceforge.net/vice_7.html#SEC117&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://vice-emu.sourceforge.net/vice_7.html#SEC117&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7040" LastActivityDate="2019-01-22T16:11:42.207" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8893" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T18:15:58.480" Score="9" Body="&lt;p&gt;Another example is the decline of &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Binary-coded_decimal#Other_computers_and_BCD&quot; rel=&quot;noreferrer&quot;&gt;binary-coded decimal instructions&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the past it was common for computers to be decimal or have instructions for decimal operations. For example &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_BCD_opcode&quot; rel=&quot;noreferrer&quot;&gt;x86 has AAM, AAD, AAA, FBLD...&lt;/a&gt; for operating on packed, unpacked and 10-byte BCD values. Many other classic architectures also have similar features&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Several microprocessor families offer limited decimal support. For example, the 80x86 family of microprocessors provide instructions to convert one-byte BCD numbers (packed and unpacked) to binary format before or after arithmetic operations.&lt;a href=&quot;https://web.archive.org/web/20070715175818/http://webster.cs.ucr.edu/Page_TechDocs/MASMDoc/ProgrammersGuide/Chap_06.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;sup&gt;[3]&lt;/sup&gt;&lt;/a&gt; These operations were not extended to wider formats and hence are now slower than using 32-bit or wider BCD 'tricks' to compute in BCD (see &lt;a href=&quot;http://www.cs.uiowa.edu/%7Ejones/bcd/bcd.html&quot; rel=&quot;noreferrer&quot;&gt;[1]&lt;/a&gt;). The x87 FPU has instructions to convert 10-byte (18 decimal digits) packed decimal data, although it then operates on them as floating-point numbers.&lt;/p&gt;&#xA;&lt;p&gt;The Motorola 68000 provided instructions for BCD addition and subtraction;&lt;a href=&quot;http://www.freescale.com/files/archives/doc/ref_manual/M68000PRM.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;sup&gt;[4]&lt;/sup&gt;&lt;/a&gt; as does the 6502. In the much later 68000 family-derived processors, these instructions were removed when the Coldfire instruction set was defined, and all IBM mainframes also provide BCD integer arithmetic in hardware. The Zilog Z80, Motorola 6800 and its derivatives, together with other 8-bit processors, and also the Intel x86 family have special instructions that support conversion to and from BCD. The Psion Organiser I handheld computer’s manufacturer-supplied software implemented its floating point operations in software using BCD entirely. All later Psion models used binary only, rather than BCD.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Decimal_computer#More_modern_computers&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Decimal_computer#More_modern_computers&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;However they're rarely used, since &lt;em&gt;modern languages often don't have a way to access those instructions&lt;/em&gt;. They either lack a decimal integer type completely (like C or Pascal), or doesn't have a decimal type that can map cleanly to BCD instructions&lt;/p&gt;&#xA;&lt;p&gt;The result is that &lt;strong&gt;BCD instructions started to disappear&lt;/strong&gt;. In x86 they're micro-coded, therefore very slow, which makes people further avoid them. Later AMD removed BCD instructions in x64-64. Other manufacturers did the same in newer versions of their architectures. Having said that, a remnant of BCD operations is still there in the &lt;a href=&quot;https://en.wikipedia.org/wiki/FLAGS_register&quot; rel=&quot;noreferrer&quot;&gt;FLAGS register&lt;/a&gt; in x86-64 and many other platforms that use flags: the &lt;a href=&quot;https://en.wikipedia.org/wiki/Half-carry_flag&quot; rel=&quot;noreferrer&quot;&gt;half-carry flag&lt;/a&gt;. Newly implemented architectures like ARM, MIPS, Sparc, RISC-V also didn't get any BCD instructions and most of them don't use a flag register&lt;/p&gt;&#xA;&lt;p&gt;In fact C and C++ allow &lt;code&gt;float&lt;/code&gt;, &lt;code&gt;double&lt;/code&gt; and &lt;code&gt;long double&lt;/code&gt; to be decimal, however none of the implementations use it for the default floating-point types, because modern computers are all binary and are bad at decimal operations. Very few architectures have decimal floating-point support&lt;/p&gt;&#xA;&lt;p&gt;Many C and C++ compilers do have decimal floating-point types as an &lt;em&gt;extension&lt;/em&gt;, such as &lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html&quot; rel=&quot;noreferrer&quot;&gt;gcc with &lt;code&gt;_Decimal32&lt;/code&gt;, &lt;code&gt;_Decimal64&lt;/code&gt;, and &lt;code&gt;_Decimal128&lt;/code&gt;&lt;/a&gt;. Similarly some other modern languages also have &lt;a href=&quot;https://en.wikipedia.org/wiki/Decimal_data_type&quot; rel=&quot;noreferrer&quot;&gt;decimal types&lt;/a&gt;, however those are mostly big floating-point types for financial or scientific problems and not an integer BCD type. For example &lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/decimal&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;decimal&lt;/code&gt; in C#&lt;/a&gt; is a floating-point type with the mantissa stored in binary, thus BCD instructions would be no help here. Arbitrary-precision decimal types like &lt;code&gt;BigInteger&lt;/code&gt; in C# and &lt;code&gt;BigDecimal&lt;/code&gt; in Ruby or Java also store the mantissa as binary instead of decimal for performance. A few languages do have a &lt;strong&gt;fixed-point&lt;/strong&gt; decimal monetary type, but the significant part is also in binary&lt;/p&gt;&#xA;&lt;p&gt;That said, a few floating-point formats can still be stored in BCD or a related form. For example the mantissa in &lt;a href=&quot;https://en.wikipedia.org/wiki/IEEE_754#Basic_and_interchange_formats&quot; rel=&quot;noreferrer&quot;&gt;IEEE-754 decimal floating-point types&lt;/a&gt; can be stored in either &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary_integer_decimal&quot; rel=&quot;noreferrer&quot;&gt;binary&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Densely_packed_decimal&quot; rel=&quot;noreferrer&quot;&gt;DPD&lt;/a&gt; (a highly-packed decimal format which can then be converted to BCD easily). However I doubt that decimal IEEE-754 libraries use BCD instructions, because they're often not exist at all in modern computers, or in case they really exist they'd be extremely slow&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;BCD was used in many early decimal computers, and is implemented in the instruction set of machines such as the IBM System/360 series and its descendants, Digital Equipment Corporation's VAX, the Burroughs B1700, and the Motorola 68000-series processors. Although BCD per se is not as widely used as in the past and is no longer implemented in newer computers' instruction sets (such as ARM; x86 does not support its BCD instructions in long mode any more), decimal fixed-point and floating-point formats are still important and continue to be used in financial, commercial, and industrial computing, where subtle conversion and fractional rounding errors that are inherent in floating point binary representations cannot be tolerated.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Binary-coded_decimal#Other_computers_and_BCD&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Binary-coded_decimal#Other_computers_and_BCD&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://pepijndevos.nl/2016/08/24/x86-instruction-distribution.html&quot; rel=&quot;noreferrer&quot;&gt;Does a compiler use all x86 instructions?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=12352959&quot; rel=&quot;noreferrer&quot;&gt;Does a compiler use all x86 instructions? (2010)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/47000444/995714&quot;&gt;Do modern x86 processors have native support for decimal floating point arithmetic?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1981" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-02-14T16:21:41.327" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="8894" PostTypeId="2" ParentId="1480" CreationDate="2019-01-22T21:10:44.273" Score="10" Body="&lt;p&gt;I programmed in Modcomp assembly for over 15 years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DFC is &quot;DeFine Constant&quot;. For instance, DFC 1234 would result in the 16-bit decimal value 1234 being generated next output location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ is simply a placeholder in the Modcomp assembler. It equates to zero. Modcomp's program and data space were the same, and the program space was not protected, so it was common to store things on the fly into the code space. $$ was a programmer's way of indicating that the contents of a location were unknown at assembly time, but would be set at runtime by previously executed code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the original code snippet, register 2 contains the CAN-code (Compressed AlphaNumeric) name for a file or device. The code stores it inline after the REX,#A instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, it loads the address of a UFT (User File Table) into register 2 and executes the REX,#A instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;REX #A is a Request EXecutive instruction, causing a file assignment to be made for a UFT referenced by register 2, and making the assignment to the device or file named by the CAN-code constant following the instruction. &lt;/p&gt;&#xA;" OwnerUserId="11675" LastActivityDate="2019-01-22T21:10:44.273" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8895" PostTypeId="2" ParentId="8856" CreationDate="2019-01-22T22:50:55.443" Score="2" Body="&lt;p&gt;Back in the day I always added the DCL command &quot;$Set Term/Inquire&quot; to my login.com script to let VAX/VMS figure out the type of terminal I was using. I find it interesting that it seems at least once a week, I see references to DEC's VT100/VT101 in modern software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember having a directory full of animated txt files and some txt files to make a Dectalk box sing :*)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some links:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://artscene.textfiles.com/ansi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ansi everthing&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.vt100.net&quot; rel=&quot;nofollow noreferrer&quot;&gt;VT100 History and more&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft almost brings back the VT100&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://invisible-island.net/xterm/ctlseqs/ctlseqs.html.&quot; rel=&quot;nofollow noreferrer&quot;&gt;XTerm can do a lot!&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11678" LastEditorUserId="11678" LastEditDate="2019-01-23T04:18:28.360" LastActivityDate="2019-01-23T04:18:28.360" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8896" PostTypeId="1" CreationDate="2019-01-22T23:16:34.020" Score="9" ViewCount="1141" Body="&lt;p&gt;I'm wondering what's the sequence of actions when a terminal (like a VT100) is plugged into a serial port of a computer? Especially, how the connection of this terminal is detected, and how the terminal is connected with an application on the host system (e.g. the login process)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way I can currently imagine this is as follows (assuming &quot;terminal drivers&quot; in the style of UNIX TTY devices that act as middle-men between the physical serial ports and the applications that the terminal connects to):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7UQay.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7UQay.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a terminal is connected to a computer (or is powered on), usually a login prompt appears on the screen (the output of some login process of the OS, I think on UNIX it is &lt;a href=&quot;https://en.wikipedia.org/wiki/Getty_(Unix)&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;getty&lt;/code&gt;&lt;/a&gt;), and the user can log in to the system, upon which a shell is usually started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if we consider a free serial port:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Does this mean that everything must be already set up for the user login on this port? Like a TTY driver already listening on the port, the login process already running, and probably the login prompt string already in the output buffer of the port? (And this must be the case for &lt;em&gt;every&lt;/em&gt; port that can accept connections from terminals.) In that way, when a terminal connects, it immediately gets the login prompt string, and any characters it sends to the computer are immediately read by the TTY driver and passed to the login process. &lt;/li&gt;&#xA;&lt;li&gt;Or is there just mechanism that detects the connection of a terminal to a given port (and detects that it is indeed a terminal and not some other type of device) upon which it starts a TTY process for this port, and a login process, and hooks them up so that the login can occur (i.e. the above diagram is incorrect)?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In either of these cases, there are the following further questions:&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;If my terminal is connected to a given port, and I'm already logged in, then I disconnect my terminal and connect it to another free port, do I have to repeat the login?&lt;/li&gt;&#xA;&lt;li&gt;If my terminal is connected to a given port and I'm logged in, then I physically disconnect my terminal from the port (the port is now free) without logging out, and then some other user connects his terminal to the same port, is he then logged into my account (or is there an automatic logout when a terminal disconnects)?&lt;/li&gt;&#xA;&lt;li&gt;If I'm logged in and I power off my terminal without logging out, then the next day turn it on again, am I still logged in, and connected to the same application that I left the day before?&lt;/li&gt;&#xA;&lt;li&gt;Do ports used by terminals only work with terminals and not with other types of devices (because they must be set up in a way that the automatic detection of connections and the login process may occur)? Thus connecting, for example, a printer to a port that is usually used for terminals wouldn't work (except if the printer would &quot;pretend&quot; to be a terminal and simulate the manual login of a user)? &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11635" LastEditorUserId="11635" LastEditDate="2019-01-22T23:23:13.900" LastActivityDate="2019-07-03T15:56:57.717" Title="What happens when a terminal (like a VT100) is connected to a computer?" Tags="&lt;unix&gt;&lt;terminal&gt;&lt;vt100&gt;" AnswerCount="6" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8897" PostTypeId="2" ParentId="8896" CreationDate="2019-01-22T23:24:55.063" Score="2" Body="&lt;p&gt;The TTY port must be set up to handle the terminal otherwise it will not respond. It does not normally detect the connection of a terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you connect or power on a terminal to a RS232 port you normally have to send a &lt;kbd&gt;CR&lt;/kbd&gt; or two to get the &lt;code&gt;login:&lt;/code&gt; prompt. However, if your terminal is connected and powered up when the system boots you will see the login prompt when the boot is completed. (so 1 not 2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In answer to (3) Yes: you have to login separately on each serial line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In answer to (4) Yes: Someone else can steal your session if something else is plugged in. (However, do not think that remote sessions could be compromised. If the connection is via a modem the the disconnect signal (called HUP) from the modem would cause a logout. You only asked about &lt;em&gt;physical&lt;/em&gt; plugging and unplugging).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In answer to (5) Yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In answer to (6) Its complicated. Serial lines can work with all kinds of devices, printers, modems, scanners, xray molecular probes, whatever. It is all just data.&lt;/p&gt;&#xA;" OwnerUserId="611" LastEditorUserId="611" LastEditDate="2019-01-22T23:33:32.353" LastActivityDate="2019-01-22T23:33:32.353" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8898" PostTypeId="2" ParentId="8896" CreationDate="2019-01-22T23:39:13.433" Score="5" Body="&lt;p&gt;If the line is using modems, then the modem knows when you've called it (carrier detect), and after some handshaking, signals the host OS that the line is now connected. Alternatively, for hardwired terminals, the line is 'always connected'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In late 20th-century usage, the host end would 'autobaud' to detect the terminal speed, which typically required you to bang on the return key a few times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that we're in OS-dependent territory.  Some DEC operating systems would have the terminal driver create a process to handle a newly-active terminal, and for VMS in particular, that process would be running LOGINOUT.  Unix has a login(*) process ready and waiting on each configured terminal line. George 3 MOP terminals required an explicit ctrl/A, as far as I recall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for automatic logout: from memory, it rather depended on whether modem control was in use.  If yes, then terminal power-off was detectable. If not, then it probably wasn't: but then the terminal was generally hardwired.  In practice, no-one walked away leaving a public terminal logged in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(*) The Unix &quot;login&quot; function appears to have been variously fulfilled by init &lt;a href=&quot;https://pdos.csail.mit.edu/6.828/2004/readings/ritchie74unix.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;(see here, section 6.6)&lt;/a&gt;, login, or getty, depending on edition.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-01-25T23:55:29.143" LastActivityDate="2019-01-25T23:55:29.143" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8899" PostTypeId="2" ParentId="8896" CreationDate="2019-01-22T23:47:23.180" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does this mean that everything must be already set up for the user login on this port? Like a TTY driver already listening on the port, the login process already running,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly. In every system I've worked with, a port is assigned at or before boot time to be a terminal (input/output TTY-style session), printer, modem (as an auxiliary port - if it is for a regular terminal session then the only difference is handshaking protocol) or other specialized device (e.g., touch screen, mouse, bar code scanner, etc.)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and probably the login prompt string already in the output buffer of the port? (And this must be the case for every port that can accept connections from terminals.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Depends on the system. Typically yes, the prompt string will already be in the buffer. But in some cases there will be speed negotiation first (that's the &quot;hit return a couple of times&quot; thing). In some cases there will be hardware handshaking - either standard terminal handshaking (like CTS/RTS) or even detection of Carrier Detect (pin 8 on RS232 DB25). CD monitoring is the best for a remote connection because that way the modem can still use CTS/RTS for command transfers (e.g., Hayes Smartmodem AT commands) yet the system can still &quot;know&quot; whether there is a real connection or not via CD and &lt;em&gt;disconnect and automatically logout&lt;/em&gt; when CD is dropped, which is a big security benefit.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In that way, when a terminal connects, it immediately gets the login prompt string, and any characters it sends to the computer are immediately read by the TTY driver and passed to the login process.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Correct.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or is there just mechanism that detects the connection of a terminal to a given port (and detects that it is indeed a terminal and not some other type of device) upon which it starts a TTY process for this port, and a login process, and hooks them up so that the login can occur (i.e. the above diagram is incorrect)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Typically I have seen that the login process is always running automatically. But there is sometimes a speed detection routine. That was especially the case before high-speed modems with buffers and hardware handshaking (which, to be honest, I found many &quot;professionals&quot; never quite understood). In the old days, you might have a 300bps modem answering a phone line and if it got a 300bps connection then the serial port would have to run at 300bps and if it got a 110bps connection then the serial port would have to switch to 110bps. Then when 1200bps modems came along, some systems would have a separate set of phone lines &amp;amp; modems for 1200bps and some would let the 1200 also run at 300 - but the system had to support it for that to work.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If my terminal is connected to a given port, and I'm already logged in, then I disconnect my terminal and connect it to another free port, do I have to repeat the login?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. Each port is independent. They would be identified as &lt;code&gt;tty1&lt;/code&gt;, &lt;code&gt;tty2&lt;/code&gt;, etc. in Unix or similar for other operating systems. Security in a system &lt;strong&gt;could&lt;/strong&gt; prevent a user from logging in on multiple terminals at the same time, but generally that was not (and still is not) a problem.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If my terminal is connected to a given port and I'm logged in, then I physically disconnect my terminal from the port (the port is now free) without logging out, and then some other user connects his terminal to the same port, is he then logged into my account (or is there an automatic logout when a terminal disconnects)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That definitely has the potential for security problems. However, in most environments that was just not an issue. Where it becomes an issue is with remote connections via modem. If a system automatically logged a user out when CD was dropped then no problem. Otherwise, yes this could be a problem. Often systems would have an activity timeout - e.g., no activity in 15 minutes = automatic forced logout. But that would still leave a window of opportunity for someone to get in if they dialed in to a modem line where a user recently disconnected without logging out, either due to modem or phone line problems or just forgetting to logout.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If I'm logged in and I power off my terminal without logging out, then the next day turn it on again, am I still logged in, and connected to the same application that I left the day before?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, unless the system has an automatic timeout &lt;strong&gt;or&lt;/strong&gt; the system closes applications (and possibly even reboots) nightly to make sure backups can run. I have written systems like that, where I could send a signal to my application to force safe ending of the application (i.e., no file corruption) and would do that automatically at midnight (or whenever was convenient for the particular customer) in order to make sure backups would run.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Do ports used by terminals only work with terminals and not with other types of devices (because they must be set up in a way that the automatic detection of connections and the login process may occur)? Thus connecting, for example, a printer to a port that is usually used for terminals wouldn't work (except if the printer would &quot;pretend&quot; to be a terminal and simulate the manual login of a user)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A port is a port, of course, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technically everything is the same. So I have hooked up computers to serial (and parallel) ports to capture data from other computers that thought they were just printing. Decwriters (e.g., LA36, LA120) were very popular terminals but as video terminals advanced they often got repurposed as printers. Bar code scanners and other specialized input devices were (still are) often connected on the input side of a serial port and the computer doesn't know the difference between terminal keyboard input and a bar code scan. But in most systems terminal ports are input/output and printer ports are output only and you don't mix them except in special situations.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2019-01-22T23:47:23.180" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8900" PostTypeId="2" ParentId="8869" CreationDate="2019-01-22T23:49:07.113" Score="2" Body="&lt;p&gt;Yes.&#xA;More recently, the TPUs (Tensor Processing Units,) designed by Google to accelerate AI work, are designed to efficiently process their TensorFlow language.&lt;/p&gt;&#xA;" OwnerUserId="11679" LastActivityDate="2019-01-22T23:49:07.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8901" PostTypeId="2" ParentId="8856" CreationDate="2019-01-23T00:17:27.880" Score="3" Body="&lt;p&gt;The DEC VT100 itself did not have a driver. When you connect a terminal like a VT100 to a serial port it was a just tty device. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;VAX/VMS used a utility to configure devices for the operating system. As a Field Engineer, I had to run the utility after adding a new controller like serial line multiplexer to a VAX system or MicroVAX. This was followed by reboot. That was all of the driver configuration that was done. So the answer is that yes a new driver was configured, but it was built in to the OS and if it was the first controller of a given type it usually was automatically configured. If it was the second controller of a given type an address and an interrupt vector had to be assigned. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There wasn't the plethora of devices that there are today on PC's. There were controllers made by other companies, especially disk controllers, but they emulated native DEC controllers. &lt;/p&gt;&#xA;" OwnerUserId="11681" LastActivityDate="2019-01-23T00:17:27.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8902" PostTypeId="2" ParentId="8896" CreationDate="2019-01-23T00:34:34.860" Score="5" Body="&lt;p&gt;First of, this question is impossible to be answered in a general context, so the assumption of a Unix(oid) system will prevail. Second, even in a Unix(oid) environment variations are way too large for an exhaustive answer.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does this mean that everything must be already set up for the user login on this port? Like a TTY driver already listening on the port, the login process already running, and probably the login prompt string already in the output buffer of the port? (And this must be the case for every port that can accept connections from terminals.) In that way, when a terminal connects, it immediately gets the login prompt string, and any characters it sends to the computer are immediately read by the TTY driver and passed to the login process.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. Why - and even more, how? To start with, there is no guaranteed notification about a terminal being plugged in (or removed) - unless that terminal (and the host) also operates certain additional signals (DTR/DSR). These signals are optional. This is different if the connection is via a modem, as a modem &lt;em&gt;does&lt;/em&gt; (usually) handle these signals plus others to inform the host about calls and so on.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or is there just mechanism that detects the connection of a terminal to a given port (and detects that it is indeed a terminal and not some other type of device) upon which it starts a TTY process for this port, and a login process, and hooks them up so that the login can occur&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;First of all, on a serial line, everything is a terminal. There are no 'other' devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, there is no secret detection process. When the terminal services are started, the login process just blurts out a login prompt to each port. No matter if there's a terminal connected or not. If one is connected, the user will see it and may log in. If none is connected, or it was turned off during startup, one has to press &lt;code&gt;CR&lt;/code&gt; to get a reaction. Usually the login prompt again. That's the way the login process notices that there is a terminal and someone wants to interact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Always keep in mind, we are talking about a &lt;strong&gt;very simple&lt;/strong&gt; environment here. something that can be operated with a teletype - a mechanical device.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(i.e. the above diagram is incorrect)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it just does not describe that part of the process. It only illustrates that the Kernel offers access to the terminal interface via a device called TTY1&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If my terminal is connected to a given port, and I'm already logged in, then I disconnect my terminal and connect it to another free port, do I have to repeat the login?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A login is tied to a port, not a terminal. The terminal has no way to tell the host that it moved - nor does the host know how to handle this. The host handles a port with an optional terminal connected, not a terminal&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What happens with the login on the old port, or what state the new one is in depends on what happened before. Usually you need to login again - and then kill the process on the other port - as you will be still logged on on there.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If my terminal is connected to a given port and I'm logged in, then I physically disconnect my terminal from the port (the port is now free) without logging out, and then some other user connects his terminal to the same port, is he then logged into my account (or is there an automatic logout when a terminal disconnects)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again, depends on the hardware support for that interface. If DTR/DSR is supported, a host &lt;strong&gt;may&lt;/strong&gt; decide to end a login. if it isn't, the login will stay present at this port.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If I'm logged in and I power off my terminal without logging out, then the next day turn it on again, am I still logged in, and connected to the same application that I left the day before?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Usually yes (again, depending on signal handling and program).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Do ports used by terminals only work with terminals and not with other types of devices (because they must be set up in a way that the automatic detection of connections and the login process may occur)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is no automatic detection per se. While it would be possible to do so, at least with some high level terminals, I'm not sure if that has ever been implemented.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Thus connecting, for example, a printer to a port that is usually used for terminals wouldn't work (except if the printer would &quot;pretend&quot; to be a terminal and simulate the manual login of a user)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again, these are features defined by the application. For the OS a serial port is just a serial port. Everything above exchange of data is already application layer.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;From these questions it seems a bit as if you expect a serial port to be more than it is - and similarly imply certain levels of drivers or OS handling. While this may be true for some OS and environments it's not guaranteed by any default behaviour.&#xA;In a Unix(oid) system there is just a serial port. It can have some process assigned. If that's getty, then its interaction on this line will be asking for a login, and when given hand the the execution over to a shell. This is already an application level. Nothing done by a driver. This means there is also no driver to hand over logins to other ports, or similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If at all, the only message the driver may send to whatever application right now controls the process is a SIGHUP when he identifies a disconnect. If and how this application reacts depends on the application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a serial port there is a serial device. What kind of device this is is not defined. It's up to the application to interact accordingly - that's why it may be a good idea to not start a getty on a port with a printer plugged in, but maybe some spool. But that's nothing the OS will check - or even offer a way to check.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Keep in mind, all of this is designed to communicate with some mechanical teletype - this is so far from a high level world you may have in mind as an ox-cart is from a semi truck - still, both can be used to transport stuff on the same road :))&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2019-07-03T15:56:57.717" LastActivityDate="2019-07-03T15:56:57.717" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8903" PostTypeId="1" AcceptedAnswerId="8906" CreationDate="2019-01-23T04:13:02.883" Score="8" ViewCount="2495" Body="&lt;p&gt;Two very common connectors used in the eighties were the Centronics parallel port (particularly used for printers) and the RS-232 serial port (particularly used for mice and modems).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose you have a computer with one kind of port and a peripheral with another (particularly, a computer that talks RS-232 and a printer that talks Centronics). Is/was it possible to buy or build a widget to translate between them? (A widget simpler than a full-blown computer, I mean.) It seems to me that the parallel to serial translation would need some kind of shift register. I'm not so sure about the voltage issue. As I understand it, Centronics uses 5V and RS-232 uses 12V. Is there a way to translate between those?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-09-28T09:12:15.333" Title="Parallel to serial conversion" Tags="&lt;hardware&gt;&lt;rs232&gt;" AnswerCount="4" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8904" PostTypeId="2" ParentId="8903" CreationDate="2019-01-23T04:44:16.857" Score="5" Body="&lt;p&gt;This is only barely Retrocomputing. Almost all the printers I use today (and most people I know) are connected USB or networked. But &lt;a href=&quot;https://www.startech.com/Cards-Adapters/Serial-Cards-Adapters/2-Port-16C550-Serial-1-Port-EPPECP-Parallel-PCI-Card%7EPCI2S1P&quot; rel=&quot;nofollow noreferrer&quot;&gt;ports for PCs are still available&lt;/a&gt; and as noted below, the companies I dealt with years ago for converters still sell them. But there aren't so many printers these days with serial or parallel ports now that 100M (or even 1G) network ports for printers are dirt cheap, so we'll call it Retro.&lt;/p&gt;&#xA;&lt;p&gt;There were (still are!) plenty of options:&lt;/p&gt;&#xA;&lt;h3&gt;Add a port to the printer&lt;/h3&gt;&#xA;&lt;p&gt;For example, Okidata Microline printers would typically come standard with a parallel port but you could add a serial port card (I probably still have one around here somewhere). In more recent years I think they even had a network card that used the same interface slot, though I never bothered with that myself.&lt;/p&gt;&#xA;&lt;h3&gt;Add a port to the computer&lt;/h3&gt;&#xA;&lt;p&gt;With PC-compatibles this is trivial, but with other machines not always so easy. Plus there are situations (e.g., 6 terminals plus 2 printers all connected serial to an 8-port statistical multiplexer over a modem connection back to the host) where this is just simply not an option. Plus end-to-end serial has big advantages over parallel - 200 feet without any problem at all.&lt;/p&gt;&#xA;&lt;h3&gt;Converter&lt;/h3&gt;&#xA;&lt;p&gt;These have been available for a long time from &lt;a href=&quot;https://www.patton.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Patton&lt;/a&gt; (sells nationwide but one of my favorites because they are nearby), &lt;a href=&quot;http://www.bb-elec.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;B &amp;amp; B&lt;/a&gt; and &lt;a href=&quot;https://www.blackbox.com/en-us&quot; rel=&quot;nofollow noreferrer&quot;&gt;Black Box&lt;/a&gt; - all of which still list parallel/serial converters on their web sites.&lt;/p&gt;&#xA;&lt;p&gt;Voltage is, I think, the least of the conversion issues. The big factor is handshaking. Over the years, I found that parallel handshaking was very reliable but serial...not so much. It seems that some manufacturers just never got serial handshaking to work well, and I sometimes had to resort to large buffers (typically a little box with a Z80 (or similar), 64k of RAM and ports for in &amp;amp; out) to work around the problem. But I think the basic converters typically did their job without a full CPU - just a bunch of glue chips/logic to read a byte in one form and send it out as another.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-23T05:10:51.890" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8905" PostTypeId="2" ParentId="8869" CreationDate="2019-01-23T05:50:19.353" Score="5" Body="&lt;p&gt;Some more examples of programming languages affecting hardware design:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MIPS RISC ISA often seems strange to newcomers: instructions like ADD generate exceptions on signed integer overflow. It is necessary to use ADDU, add unsigned, to get the usual 2’s complement wrap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I wasn’t there at the time, but I conjecture that MIPS provided this behavior because it was designed with the Stanford benchmarks - which were originally written in the Pascal programming language, which requires overflow detection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C programming language does not require overflow traps. The MIPSr6 new (circa 2012) ISA gets rid of the integer overflow trapping instructions - at least those with a 16 bit immediate - in order to free up opcode space. I &lt;em&gt;was&lt;/em&gt; there when this was done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;—&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can testify that programming languages influenced many modern x86 features, at least from P6 onwards. Mainly C/C++; to some extent JavaScript.&lt;/p&gt;&#xA;" OwnerUserId="11516" LastEditorUserId="11516" LastEditDate="2019-01-24T14:47:32.957" LastActivityDate="2019-01-24T14:47:32.957" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="8906" PostTypeId="2" ParentId="8903" CreationDate="2019-01-23T07:25:08.647" Score="7" Body="&lt;p&gt;This can be done with a UART such as the 6402. Here's an example that converts serial  to parallel:-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://archive.psion2.org/org2/hardware/par_printer.htm&quot; rel=&quot;noreferrer&quot;&gt;Schematics of a Printer Adaptor&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7XN24.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7XN24.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike more modern UARTs the 6402 does not have any internal registers that need to be 'programmed' to set it up, so it can be used standalone - and it has separate parallel read and write ports which are easier to use in a 'dumb' hardwired circuit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I built a circuit similar to this in the early 1980's, but today I would probably use a small microcontroller board such as the Arduino Pro Mini (clones of which sell on &lt;a href=&quot;https://www.ebay.com/itm/New-design-Pro-Mini-atmega328-5V-16M-Replace-ATmega128-Arduino-Compatible-Nano/401090346945?hash=item5d62d8ffc1:g:yUQAAOSwhOVXef5S:rk:24:pf:0&quot; rel=&quot;noreferrer&quot;&gt;eBay&lt;/a&gt; for ~$2 each).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a project on HackaDay that used an Arduino Pro Micro:-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://hackaday.io/project/18140-serial-to-parallel-printer-interface&quot; rel=&quot;noreferrer&quot;&gt;Serial to Parallel Printer Interface&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-01-23T07:25:08.647" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8907" PostTypeId="2" ParentId="8903" CreationDate="2019-01-23T08:02:40.213" Score="7" Body="&lt;p&gt;Yes, there were such gadgets that converted serial to parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The attached picture shows a Miracle Serial to parallel converter for the Sinclair QL, courtesy of 1984. The QL had no ex-factory Centronics printer interface, and solutions that blocked the expansion port for connecting a printer only were not really what customers wanted, so the Centronics Interface was a cash-cow for Miracle Systems for years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Inside, there's a small PIC16C54 MCU (ex-General Instruments, now Microchip) that does the serial-to-parallel conversion and feeds off the signal lines so it doesn't need an extra power supply. The rest of the circuitry apart from the MCU is just a handful of passives to generate the 5V MCU supply from the +/- 12Volts off the serial interface. (&lt;a href=&quot;https://qlwiki.qlforum.co.uk/lib/exe/fetch.php?media=qlwiki:miracle_spi3_open.jpg&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; is a picture that has a detail view of the innards of a slightly different version)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kXvEc.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kXvEc.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-01-23T08:11:19.163" LastActivityDate="2019-01-23T08:11:19.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8908" PostTypeId="1" CreationDate="2019-01-23T09:41:29.207" Score="22" ViewCount="1125" Body="&lt;p&gt;Apple II computers don't come with DOS in ROM, but rather need to boot from a floppy disk to make the disk drives usable. The IIc was the first Apple II that came with a built-in disk drive, so booting it was a must (it also omitted the cassette ports earlier Apple IIs had). You could extend to further drives by connecting to a floppy expansion port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original IIc ROM version (version 255) supported booting from external drives by simply entering &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PR #7&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Apparently, this was also documented in the manuals, and apparently, it only ever worked for ProDOS, the standard that came with the computer, but still better than nothing)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The follow-up ROM version (version 0, came in a ROM double the size of the original, so any omissions can't have been for space reasons), &lt;em&gt;removed&lt;/em&gt; this feature, severely hampering usability of externally connected drives. This feature was never restored in any of the later ROM revisions (3, 4) until just recently in ROM version 4X, a hobbyist's project, which nicely presents a boot menu including an option to boot from external drives on CTRL-[closed Apple]-Reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a work-around for the missing feature in later ROM revisions, Apple proposed (in the IIc Technical Reference Manual) using the built-in monitor and entering and calling a 10-bytes code sequence to boot from external drives (not exactly an improvement over &lt;code&gt;PR #7&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did Apple remove such an important feature? How was this accepted by customers? Why did they never restore that feature by adding the 10 missing bytes to a ROM that had by far enough space?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: The 3.5 ROM update manual bluntly claims&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;code&gt;PR #7&lt;/code&gt; (from BASIC) or &lt;code&gt;7&amp;lt;CONTROL&amp;gt;P&lt;/code&gt; (from Monitor) no longer causes the system to &lt;strong&gt;boot&lt;/strong&gt; from the external Disk II drive because that ROM space is now used for new features.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The removal I can confirm but the reasoning seems untrue to me (considering the size of the new ROM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IIc Technical Notes blatantly state&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;ROM Version 255&lt;/strong&gt; (the &quot;correct&quot; behavior)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;PR #7 boots the second drive&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;ROM Version 0&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;PR #7 returns the message &quot;Apple Talk Off Line&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(With no Apple Talk support on the IIc ever this does not look like a very useful message, but rather like a bug)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;ROM Version 3&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;PR #7 kills the system&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Similarly unhelpful, but rather looks like another bug)&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-02-08T08:37:01.680" LastActivityDate="2019-04-21T07:09:47.067" Title="Why did Apple remove booting from external drives in later IIc ROM versions?" Tags="&lt;apple-ii&gt;&lt;apple-dos&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8909" PostTypeId="1" AcceptedAnswerId="8926" CreationDate="2019-01-23T09:52:49.473" Score="5" ViewCount="580" Body="&lt;p&gt;The Commodore 116 was the start of the ill-fated TED line of 8-bit computers, which sold poorly (for several reasons, particularly including lack of compatibility with the Commodore 64) until they were canceled and inventory dumped at a loss.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bil Herd, an engineer who worked on the machines, gives an excellent explanation that the 116 was supposed to be an extremely cheap computer that would've sold well at the target price of $49, before it drifted into a higher cost bracket for which it lacked necessary features: &#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=xPD5N43VIsk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=xPD5N43VIsk&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's a really huge price difference compared to the 64, which sold for several times that in the early eighties, and even later in the mid-to-late eighties was selling for $149, and considered to be a particularly cheap computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How exactly did the 116 get to be so much cheaper? There are some cost savings, granted:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Only 16K RAM.&lt;/li&gt;&#xA;&lt;li&gt;One chip for both graphics and sound.&lt;/li&gt;&#xA;&lt;li&gt;Chiclet keyboard. (But the full travel keyboard had been considered cheap enough for the Vic-20.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But even these do not jump out at me as adding up to a severalfold difference in total cost, particularly when looking at &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_64#Manufacturing_cost&quot; rel=&quot;nofollow noreferrer&quot;&gt;this estimated bill of materials for the 64&lt;/a&gt; (from Wiki)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how was the 116 so much cheaper?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2019-01-24T00:59:55.203" LastActivityDate="2019-01-25T12:04:28.920" Title="C116 vs C64 cost" Tags="&lt;commodore-64&gt;&lt;commodore&gt;&lt;cost&gt;&lt;ted&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8910" PostTypeId="2" ParentId="8909" CreationDate="2019-01-23T10:34:33.117" Score="3" Body="&lt;ul&gt;&#xA;&lt;li&gt;No CIA6526 chips either. These must have been a few $ per piece internal price.&lt;/li&gt;&#xA;&lt;li&gt;The power supply was much smaller and cheaper. The C64 &quot;doorstopper&quot; must have cost at least $5 to manufacture.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I also think the price difference is against the original C64, which wasn't as highly integrated.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2019-01-23T10:34:33.117" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8911" PostTypeId="1" AcceptedAnswerId="8952" CreationDate="2019-01-23T11:41:36.850" Score="20" ViewCount="4220" Body="&lt;p&gt;The outer tracks of a disk are longer than the inner tracks, and could therefore potentially hold more data. Constant angular velocity puts the same number of bits on every track, which wastes much of the potential capacity of the disk. A solution to this problem is &lt;a href=&quot;https://en.wikipedia.org/wiki/Constant_linear_velocity&quot; rel=&quot;noreferrer&quot;&gt;constant linear velocity&lt;/a&gt; (CLV) which varies the motor speed such that the head can spend more time on the outer tracks and therefore record more data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as the linked article indicates, while this is used on optical disks, it has generally not been used on floppy disks. Why not? They would certainly have gained great benefit from more capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would have added more complexity to the drive controller, but intuitively, this seems unlikely to add significantly to the total cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikipedia says 'seek performance would be greatly affected during random access by the requirement to continually modulate the disk's rotation speed to be appropriate for the read head's position'. Why? And how much slowdown? Intuitively I would rather the drive spend an extra tenth of a second seeking, than require me to spend an extra ten seconds manually swapping disks because one disk didn't have enough capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there another consideration I am missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="278" LastEditDate="2019-01-23T17:57:27.133" LastActivityDate="2020-11-13T21:16:33.627" Title="Why not constant linear velocity floppies?" Tags="&lt;hardware&gt;&lt;floppy-disk&gt;" AnswerCount="7" CommentCount="9" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8912" PostTypeId="2" ParentId="8911" CreationDate="2019-01-23T12:09:14.017" Score="5" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sirius_Systems_Technology&quot; rel=&quot;nofollow noreferrer&quot;&gt;At least one computer&lt;/a&gt; does (something close to) what you are describing, and &lt;a href=&quot;https://patents.google.com/patent/US4514771&quot; rel=&quot;nofollow noreferrer&quot;&gt;there is a relevant patent&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikipedia claims:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But disks made at constant bit density were not compatible with machines with standard drives.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And this is apparently supported by a dead-tree citation. I read the sentence as meaning that the drives need special disks. So my guess is that because these drives never caught on, the disks didn't -- it was a chicken-and-egg problem that caused this implementation of the technique not to gain much market share or traction in the industry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And perhaps because of the patent, no-one else tried to make a CLV floppy drive as far as I can tell. &lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-01-23T12:17:14.553" LastActivityDate="2019-01-23T12:17:14.553" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8913" PostTypeId="2" ParentId="8911" CreationDate="2019-01-23T12:45:52.133" Score="30" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But as the linked article indicates, while this is used on optical disks, it has generally not been used on floppy disks.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It has. Apple's famous &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_FileWare&quot; rel=&quot;noreferrer&quot;&gt;Twiggy drive&lt;/a&gt; was one attempt to do so. It featured 6 different zones with 15 to 21 sectors per track. As a result some 120 additional sectors per side (or 100KiB per disk) could be used. To keep the data rate constant rotation varied between 394 (outer tracks) and 590 (inner tracks) RPM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the switch to 3.5 inch drives on the Lisa and later Mac this idea was the reason for Apple to develop their own format (*1) using a Sony drive. In fact, controller and parameters kept mostly the same (394-590 RPM), except now it was 8-12 sectors due the shorter track length of a 3.5 inch drive. Set off by using 80 instead of 46 tracks, so a single-sided 3.5 inch drive did hold 400 Kib, while a dual sided Twiggy had ~850 KiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then there is one really widespread use of the basic idea, even predating the Twiggy: The Commodore drives (*2) starting with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_2031&quot; rel=&quot;noreferrer&quot;&gt;PETs 2031&lt;/a&gt;, but most notably the 1541, all 170 KiB drives used to write different zones of 17 to 21 sectors per track. But instead of running the disk at different speeds the data rate was varied to the same result. This was possible as the controller was not only specified to work the extended range, but also was what today might be called a Software-Defined-FDC, as all data handling was done by a separate 6502 in software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other companies/developers toyed with the same idea as Apple or Commodore, for example the Sirius(*3) did so as well, increasing standard 500 KiB (unformatted) capacity per side to 600 KiB. And instead of asking to buy 'special' media, to make it happen, standard diskettes could be used. Then again it's not Chuck Peddle's brain child - the same man who was behind the PET development :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why not? They would certainly have gained great benefit from more capacity.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The benefit of some 10-15% increased capacity (*4) got several drawbacks:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Track switch speed (as mentioned) will increase whenever a zone border is crossed and the motor speed needs to be changed. While not as much as spinning up from stand, it may take several turns to stabilize. After all, we got real motors and real masses to accelerate or decelerate here.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This got offset a with the introduction of direct drive and smaller disk sizes, but not much.&lt;/li&gt;&#xA;&lt;li&gt;To counter the cost, not every track was handled different, but zones where used (*5).&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Increased cost for motor control on the drive side&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Increased cost for motor control on the controller side&lt;/li&gt;&#xA;&lt;li&gt;Introduction of a non standard interface, as the existing interface had no motor control lines beside on and off&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Especially the latter was an even greater turn-off than increased cost for manufacturers. Offering more size is only a minor advertisement feat, increased cost may be handed to that (*6), but non-standard interface means hard migration into uncharted territory - even more so being tied to this non-standard manufacturer (of the drives). Nothing CEOs like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 3.5 inch drive itself is a major example here, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8794/why-did-3-5-floppies-win&quot;&gt;it only took off&lt;/a&gt; after stripping everything 'new' but the size and making it compatible with the existing 5.25 drives. Even Apple dropped at one point their scheme and changed for standard drives - much like Commodore did twice when offering the 1570/71 drives capable of reading and writing standard compatible 5.25 disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The alternative to modify the data rate would have offset some of the drawbacks, but required new controller chips and different analogue setup - also more delicate, as data rate and head gap are related.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Intuitively I would rather the drive spend an extra tenth of a second seeking, than require me to spend an extra ten seconds manually swapping disks because one disk didn't have enough capacity.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure thing - except, with a gain of only ~15% in size (*4 again), the saving isn't much and you'll swap soon again. With diskette sizes it's much like with CPU speed. Every thing less than doubling is hard to notice.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Keep in mind, this was before the standardisation of 3.5&quot; drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Thanks to Felix Palmen for &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8911/why-not-clv-floppies/8913#comment27912_8911&quot;&gt;reminding&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Wilson digged out the &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8912/6659&quot;&gt;corresponding patent&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Just pull out your geometry books and calculate the difference in diameter of a circle with 1.354 inches and 2.25 inches (for 5.25 inch drives) or 0.9719 inches to 1.5551 inches (for 3.5 inch drives) - or be lazy and just divide them to get a factor telling the relative length increase. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also keep in mind that only whole blocks will work, so only if it's increased by at least ~1/16th for 5.25 or 1/8th for 3.4 a new block can be added to a track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Which as well makes sense for blocked structures with fixed block length.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - And soon offset new cheap(er) integrated solutions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-01-23T18:59:11.253" LastActivityDate="2019-01-23T18:59:11.253" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="8914" PostTypeId="1" AcceptedAnswerId="8918" CreationDate="2019-01-23T13:10:08.213" Score="-4" ViewCount="582" Body="&lt;p&gt;What are the most famous operating systems for non-x86 computers? I mean, most famous OS which have different instruction set architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt; (to better understand my task):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ask this question because currently I working on a paper which describes the difference between hypervisors and emulators. It have a passage which looks like:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You could install Windows 95 on Windows 7 with &lt;em&gt;hypervisor&lt;/em&gt;, but you cannot install &amp;lt;...&gt; on Windows 7, because these operating systems are developed to use different instructions sets. You will need &lt;em&gt;emulator&lt;/em&gt; for it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&quot;&amp;lt;...&gt;&quot; is the name of OS which I ask for.&lt;/p&gt;&#xA;" OwnerUserId="11688" LastActivityDate="2021-04-09T20:14:50.967" Title="Operating systems which have non-x86 instruction set architecture" Tags="&lt;hardware&gt;&lt;emulation&gt;&lt;operating-system&gt;&lt;instruction-set&gt;" AnswerCount="4" CommentCount="5" ClosedDate="2019-01-23T15:23:15.017" ContentLicense="CC BY-SA 4.0" />
  <row Id="8915" PostTypeId="2" ParentId="8914" CreationDate="2019-01-23T13:21:08.980" Score="4" Body="&lt;p&gt;The most famous operating system which you can’t install on a non-binary-translating hypervisor in Windows is probably ... Windows, in one of its non-x86 incarnations (Windows CE, Windows RT, non-x86 Windows NT, or ARM64 Windows 10).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many other possibilities:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;one of the Unix versions or Unix-like systems on non-x86, going back to the original PDP-7 Unix;&lt;/li&gt;&#xA;&lt;li&gt;pre-x86 releases of OS X and MacOS, on PowerPC and Motorola 68k;&lt;/li&gt;&#xA;&lt;li&gt;VMS, on VAX systems;&lt;/li&gt;&#xA;&lt;li&gt;any of the mainframe or mini or (non-x86) super-computer operating systems;&lt;/li&gt;&#xA;&lt;li&gt;many micro operating systems, such as Atari TOS, AmigaOS...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These are just a few examples, there are hundreds of others. Determining which one of these is the most famous is probably a matter of context and opinion.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-01-23T13:21:08.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8916" PostTypeId="2" ParentId="8914" CreationDate="2019-01-23T13:25:00.463" Score="3" Body="&lt;p&gt;Here are some examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;AmigaOS&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Classic_Mac_OS&quot; rel=&quot;nofollow noreferrer&quot;&gt;Classic Mac OS&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/RISC_OS&quot; rel=&quot;nofollow noreferrer&quot;&gt;RISC OS&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-01-23T13:25:00.463" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8917" PostTypeId="2" ParentId="8914" CreationDate="2019-01-23T13:29:30.617" Score="2" Body="&lt;h3&gt;IBM OS/360&lt;/h3&gt;&#xA;&lt;p&gt;This is the system that led IBM to dominate the mainframe world. Succeeded by OS/370 and one could easily argue that the later dominance of Windows was a direct outgrowth of MS/PC-DOS dominance which in turn came from the IBM PC. The IBM PC was a largely mediocre machine but it was from IBM and that's what mattered most.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-23T13:29:30.617" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8918" PostTypeId="2" ParentId="8914" CreationDate="2019-01-23T13:31:55.577" Score="5" Body="&lt;p&gt;&lt;em&gt;(Too long for a comment, sorry)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This question is &lt;strong&gt;way&lt;/strong&gt; too broad to give any serious answer (beside collecting meetoos with whatever favorite OS).&lt;/p&gt;&#xA;&lt;p&gt;I suggest you go for &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_operating_systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikis OS list&lt;/a&gt; (which is non exhaustive anyway) and pick some random.&lt;/p&gt;&#xA;&lt;p&gt;And then there is maybe a &lt;em&gt;tiny&lt;/em&gt; misconception in your assumption. Installing an OS is not &lt;em&gt;only&lt;/em&gt; an issue of an instruction set, but a machine structure as well (if not more).&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An OS made for some non-IBM-PC x86 computer will as well not boot under a Hypervisor providing a PC-type virtual environment&lt;/li&gt;&#xA;&lt;li&gt;As an OS for a exact PC style hardware using a non x86 CPU won't either.&lt;/li&gt;&#xA;&lt;li&gt;And even more, an OS requiring a 'newer' version of a x86 will as well not work.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;A further misconception could be that a Hypervisor does not do emulation. But isn't that the whole point? It emulates certain devices for each guest and then merges the results into a real one (think Disk or Network). Similar, many provide emulation layers to present a certain hardware as some other, maybe more simple type. Think a NE2000 hardware level emulation when the actual network interface is a total different one.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.S.: Somewhat unrelated, but maybe helpful: If you have to write a paper, you should only use analogies that you can defend on your own. &lt;em&gt;'the internet said'&lt;/em&gt; doesn't always work well.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-09T20:14:50.967" LastActivityDate="2021-04-09T20:14:50.967" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="8919" PostTypeId="2" ParentId="8911" CreationDate="2019-01-23T15:28:43.397" Score="6" Body="&lt;p&gt;During the hay-day of floppy drives the technology needed to do CLV was rather expensive. Writing/reading data at a fixed rate and running a motor at a fixes speed is the cheapest option. Variable speed oscillators were uncommon and not generally available as single integrated circuits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time cost tended to be the most important factor, as computers were still very expensive and many people were still using tapes for storage, a floppy drive was relatively fast and spacious.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The gains were also somewhat marginal. Consider that Apple's expensive &quot;Twiggy&quot; drives. They proved unreliable and could only store 871k of data on a 5.25&quot; disk. Sony had already released its 3.5&quot; format two years earlier, and with double density disks computers were able to store 880k on them. They quickly became popular and cheap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not convinced about Wikipedia's claim that speed changes would have had a big influence on seek times. Floppy disks have a lot more friction and run at much lower speeds than optical media where these speed changes do reduce seek performance.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2019-01-23T15:33:58.080" LastActivityDate="2019-01-23T15:33:58.080" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8920" PostTypeId="1" CreationDate="2019-01-23T16:21:55.133" Score="1" ViewCount="1856" Body="&lt;p&gt;I want to make an executable file for modern computers that you can download and run without any other software, using any kind of a 6502 assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I compile source code, written for the 6502, into a stand-alone application for modern computers? (Preferably for Windows)&lt;/p&gt;&#xA;" OwnerUserId="11692" LastEditorUserId="11446" LastEditDate="2020-01-18T08:19:59.537" LastActivityDate="2020-05-23T20:01:32.757" Title="Compile the 6502 assembler source code for running on modern computers" Tags="&lt;assembly&gt;&lt;6502&gt;" AnswerCount="6" CommentCount="7" ClosedDate="2019-05-24T07:21:27.133" ContentLicense="CC BY-SA 4.0" />
  <row Id="8921" PostTypeId="2" ParentId="8920" CreationDate="2019-01-23T16:30:44.227" Score="3" Body="&lt;p&gt;As with so many things, &lt;strong&gt;maybe&lt;/strong&gt;.  Assuming that &quot;Assembly 6502&quot; is a full 6502-compatible assembly language:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you assemble an entire bootable image and burn it into an EPROM (or equivalent) and install that in a 6502-based system, then the answer is &lt;strong&gt;yes&lt;/strong&gt;. The typical alternative would be to assemble just an application and then run that (via ROM cartridge, disk, load from tape, etc.) using whatever operating system exists on the 6502 system, but technically that would use &quot;other software&quot; as operating systems are &quot;software&quot;.&lt;/li&gt;&#xA;&lt;li&gt;You can't make a fully executable program file for Windows, simply because Windows doesn't run on a 6502 CPU and the program needs to be compatible with the CPU. You could run it in an emulator of some sort that is running as an application inside Windows, but then it is most definitely not &quot;without any other software&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2019-01-23T18:26:09.343" LastActivityDate="2019-01-23T18:26:09.343" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8922" PostTypeId="2" ParentId="8920" CreationDate="2019-01-23T17:01:44.320" Score="5" Body="&lt;p&gt;In theory, yes. You can translate anything in anything else. In practice, it's hard to do -- the plain assembly language (like any assembly language) only knows instructions that do one of four things or a combination of them:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;arithmetic operations&lt;/li&gt;&#xA;&lt;li&gt;read a memory cell&lt;/li&gt;&#xA;&lt;li&gt;write a memory cell&lt;/li&gt;&#xA;&lt;li&gt;check and/or modify some internal CPU state (this includes jumping)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But any meaningful program will also do some I/O ... and the CPU (which defines this language) has no idea about that. So, the way this is done depends on the concrete target system as a whole, e.g. on a C64, you would program the VIC-II chip for screen output. A &quot;translator&quot; would have to understand what these register accesses etc mean in order to create e.g. a windows program from your assembly source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, such a thing was attempted for the NES: &lt;a href=&quot;https://andrewkelley.me/post/jamulator.html&quot; rel=&quot;noreferrer&quot;&gt;https://andrewkelley.me/post/jamulator.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, the input was the machine code, which creates additional problems: you must first understand what is really code and what is just data.  If your input is assembly source instead, I'm pretty sure it can be done (given you know the exact target system) -- but it's definitely not simple.&lt;/p&gt;&#xA;" OwnerUserId="7040" LastActivityDate="2019-01-23T17:01:44.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8923" PostTypeId="2" ParentId="8843" CreationDate="2019-01-23T18:50:28.483" Score="0" Body="&lt;p&gt;An ESC character can be represented by the Ctrl-[ key combination. Thus to move one position right you press Ctrl+[, then [ and then C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further behavior will depend on where characters go. If they go to remote computer, then that computer will process characters and reply back (e.g. echo) with respective command back to your terminal screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And I am sure there's a loopback mode when you type characters and terminal shows them on your terminal's screen.&lt;/p&gt;&#xA;" OwnerUserId="8258" LastEditorDisplayName="user12" LastEditDate="2019-01-24T17:07:42.313" LastActivityDate="2019-01-24T17:07:42.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8924" PostTypeId="2" ParentId="8920" CreationDate="2019-01-23T19:42:02.297" Score="14" Body="&lt;p&gt;It's a classic &lt;strong&gt;Yes, but...&lt;/strong&gt; situation, not least due to the fact that the question is way too broad/unspecific. An environment isn't just a CPU with a certain instruction set, but a whole machine defined by its interfacing capabilities and more often than not even its timing characteristics.&lt;/p&gt;&#xA;&lt;p&gt;Let's start with the CPU. There are at least three major ways to do this (and many in between):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Bundle the 6502 code with a Windows executable interpreter that handles it as a bytecode, following the execution path.&lt;/p&gt;&#xA;&lt;p&gt;That's the most simple way and will generate the highest compatibility (if done right). At the same time, it will be comparably slow - not that this would matter in real life situations where the Windows machine will be several orders of magnitude faster than any real 6502 from back in the day.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compile the 6502 source code using an assembler outputting x86 code matching the 6502 functionality. With the right wrapper for initialisation and exit, this code could be directly executed under Windows.&lt;/p&gt;&#xA;&lt;p&gt;Again not a big deal to do so. It also (might) produce the fastest possible x86 code to perform. But there are many issues to circumvent, even before it comes to self-modifying code. Not least may be different code length and address usage. With self-modifying code, this approach is impossible as there is no active component turning such changes into modified x86 code.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Last would be a just-in-time compiler. Somewhat of a middle way between the first two. Here as well an interpreter handles the 6502 code, but in addition to executing each statement, they are also grouped into linear code chunks, translated into x86 and put in a side cache. When the code gets executed a second time the precompiled x86 code gets run from the side cache instead. Since there is still the original memory/code image, every 'tricky' way, including self-modifying code can be detected and handled accordingly. Like with the interpreter solution this could be packaged with your 6502 code as a windows application.&lt;/p&gt;&#xA;&lt;p&gt;This approach is much like Transmeta used for its Crusoe processors. In general, it will result in great speed enhancements compared to interpreted code, and due to the rearrangement maybe even faster (*1). The downside is the need for quite a complex tool.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So far, this is solvable. But what makes an answer hard is that there is no hint about what system the hypothetical 6502 is embedded in. After all, without I/O such a CPU is like a silenced blind man in an iron maiden. All it can do is bleed electricity :&amp;gt;))&lt;/p&gt;&#xA;&lt;p&gt;So either you&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;have a certain existing 6502 in mind, then the solution is to take a fitting emulator for that machine for Windows, and maybe package it with some script to load and start your code at startup.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Or you want to&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;do 6502 programming in Windows. In this case, you need either of the above solutions and create in addition an interface to call Windows functionality from within the 6502 code. At least that would require a way to transfer buffers for call information and in-/output data from the 6502 side to the interface code. Again, not a big deal, but a lot of work.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;In any case, it might be helpful to get a bit more insight what your question is really about.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - One of the interesting results of Transmetas research was that even code translation into the same CPU (read x86 to x86) may result in considerable speed up.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-24T20:44:55.483" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8925" PostTypeId="2" ParentId="8843" CreationDate="2019-01-23T23:57:40.083" Score="2" Body="&lt;p&gt;Short answer is yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.pcjs.org/devices/pc8080/machine/vt100/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pcjs.org/devices/pc8080/machine/vt100/&lt;/a&gt; has a vt100 emulator.&#xA;Once you've selected the &quot;emulator&quot; screen press:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;F9 - Enter setup&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4 - Toggle local/online to local (check the &quot;LED&quot; at the top)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;F9 - Leave setup&#xA;to change into local echo mode, then type away....&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2019-01-24T10:03:29.660" LastActivityDate="2019-01-24T10:03:29.660" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8926" PostTypeId="2" ParentId="8909" CreationDate="2019-01-24T00:32:49.477" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Chiclet keyboard. (But the full travel keyboard had been considered cheap enough for the Vic-20.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That was not only at a different price level, but also a different time. After the ZX80 (and ZX81) was introduced, the US home computer industry was in shock.&lt;/p&gt;&#xA;&lt;p&gt;The VC-20 was introduced in 1981 at 300 USD where the ZX81 was just 70 GBP or (at that time) roughly 150 USD (*1). The C64 started out at 600 USD and dropped soon to 400, but the ZX Spectrum, introduced about the same time, started out at below 220 USD for 16 KiB and still below 300 USD for 48 KiB. These were killer prices, hard to compete with.&lt;/p&gt;&#xA;&lt;p&gt;And Sinclair machines made huge inroads in Europe (*2), especially in England (*3).&lt;/p&gt;&#xA;&lt;p&gt;Project Fear for US manufacturers.&lt;/p&gt;&#xA;&lt;p&gt;They all expected many more similar computers to come - especially other low-end machines from the Far East. Think &lt;a href=&quot;https://en.wikipedia.org/wiki/Jupiter_Ace&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jupiter Ace&lt;/a&gt;, Your Computer, various &lt;a href=&quot;https://en.wikipedia.org/wiki/VTech&quot; rel=&quot;nofollow noreferrer&quot;&gt;VTech&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/VTech_Laser_200&quot; rel=&quot;nofollow noreferrer&quot;&gt;VZ-Laser&lt;/a&gt; series, &lt;a href=&quot;https://en.wikipedia.org/wiki/Sord_M5&quot; rel=&quot;nofollow noreferrer&quot;&gt;SORD M5&lt;/a&gt; or EACA's &lt;a href=&quot;https://en.wikipedia.org/wiki/Colour_Genie&quot; rel=&quot;nofollow noreferrer&quot;&gt;Colour Genie&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;All tried to come up with something to compete. Tandy who had introduced the already price-sensitive designed Color Computer at a quite competitive (with the C64) 399 USD, went ahead and created the MC-10 to go even lower and managed to offer it at 120 USD - a ZX Spectrum alike machine at a ZX81 price (*4). Commodore's bet was the 116. Their goal was, like with Tandy, not just cost cutting, but cost cutting to the absolute bottom. Going on par with or below Sinclair's offer.&lt;/p&gt;&#xA;&lt;p&gt;US companies as well tried to jump the train - like Mattel's &lt;a href=&quot;https://en.wikipedia.org/wiki/Mattel_Aquarius&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aquarius&lt;/a&gt; or Spectravideo's &lt;a href=&quot;https://en.wikipedia.org/wiki/SV-318&quot; rel=&quot;nofollow noreferrer&quot;&gt;SV-318&lt;/a&gt; (as a low price variant of the SV-328). In many ways this race to the bottom (price-wise) was what initiated the home computer wars. A large number of companies competing over a not as much growing market ... and Commodore as a Behemoth smashing everyone else.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;particularly when looking at the estimated &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_64#Manufacturing_cost&quot; rel=&quot;nofollow noreferrer&quot;&gt;bill of materials for the 64&lt;/a&gt;&#xA;So how was the 116 so much cheaper?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, taking the Wiki list makes it rather obvious:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;- 0.30 | 2 instead of 3 ROM&#xA;- 1.50 | 2 instead of 8 RAM&#xA;- 4.00 | No SID&#xA;- 0.00 | TED instead of VIC-2&#xA;- 6.00 | No CIA instead of two &#xA;- 0.00 | Same CPU&#xA;- 2.00 | 8 instead of 14 TTL&#xA;- 5.00 | Lower priced Keyboard&#xA;- 1.00 | Half size PCB&#xA;- 1.00 | Smaller Plastic Case&#xA;- 5.00 | Wall-Wart instead of Power Brick&#xA;-----&#xA;-25.80 USD&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(Price for the CIA is an assumption of 3 USD per chip, somewhat half way between the CPU and the SID/VIC mark. Price for the rubber keyboard is set at half the C64, but might be dramatically lower. Similar for the power supply, but as this point includes cables, let's go with half.)&lt;/p&gt;&#xA;&lt;p&gt;So 25.80 USD less is like a 40-50% price reduction compared to a C64. I'd call that great savings.&lt;/p&gt;&#xA;&lt;p&gt;How much reduced it is shows a comparison between the C64 and C16 boards:&lt;/p&gt;&#xA;&lt;h2&gt;C64 board:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Viu6P.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Viu6P.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;(Picture taken &lt;a href=&quot;https://en.wikipedia.org/wiki/File:C64motherboard.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;from Wikipedia&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;h2&gt;C16 prototype board:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Q7Mjd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q7Mjd.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;(Picture taken from &lt;a href=&quot;https://www.c64-wiki.de/wiki/Datei:c16_prototype_pcb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;C64-Wiki&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;This prototype board is the same size as the C64 and gives a good impression how much fewer parts the C16 uses. It also shows an attempt to go for a single sided PCB to save even more.&lt;/p&gt;&#xA;&lt;h2&gt;C16 production board&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YGaHH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YGaHH.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;(Picture taken from &lt;a href=&quot;http://blog.tynemouthsoftware.co.uk/2015/02/commodore-16-usb-keyboard.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tynemouth Software&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;For production they did go double sided again, but with a reduced board size to save cost due to size and the missing need for wires.&lt;/p&gt;&#xA;&lt;h2&gt;C116 board&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/K5YnA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K5YnA.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;(Picture taken from &lt;a href=&quot;http://vintagecomputer.net/commodore/c116/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vintagecomputer.net&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;The C116 board was again more tightly packed to fit the smaller case (and save even more).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Half a year later it was more like 110 USD due the steep drop of the GBP.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Well, US manufacturers did help a bit by selling their machines in Europe with an even higher margin - for example in Germany the C64 was introduced in 1983 at 1500 Mark - that's about 600 USD - at a time when the US sales price was already below 400 USD.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Which in turn always got more coverage than other European countries - so it may have seemed even more frightening.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Its real drawback, which eventually killed it, was a missing compatibility with the CoCo. To cut the price as low as possible the (relatively) expensive 6809 was replaced by a 6803 with built-in ports. Bad decision.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-25T12:04:28.920" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8927" PostTypeId="2" ParentId="8911" CreationDate="2019-01-24T01:09:59.750" Score="3" Body="&lt;p&gt;The 800 KB second generation Macintosh 3.5 inch floppy had CV zones (&lt;a href=&quot;https://en.wikipedia.org/wiki/Floppy_disk#%E2%80%8B3_1%E2%81%842-inch_floppy_disk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia: Floppy disk&lt;/a&gt;).  When the next gen floppy (1.44 MB) came out, it didn't use the CV technology, but was supported on many different OSes, relegating the CV version to the back of the bookshelf.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could hear the speed change if you listened closely.&lt;/p&gt;&#xA;" OwnerUserId="9166" LastEditorUserId="4744" LastEditDate="2019-01-24T04:59:25.340" LastActivityDate="2019-01-24T04:59:25.340" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8928" PostTypeId="1" AcceptedAnswerId="8930" CreationDate="2019-01-24T03:26:55.540" Score="11" ViewCount="1104" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Group_coded_recording&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Wikipedia article on GCR&lt;/a&gt;, the Commodore 1541 disk drive used a particularly efficient GCR encoding scheme to cram 170K onto the same 5.25&amp;quot; disks that in an Apple drive only stored 140K.&lt;/p&gt;&#xA;&lt;p&gt;However, for the Amiga 3.5&amp;quot; disks, they reverted to MFM, a lower density encoding. Why abandon something that worked so well?&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://manualzz.com/doc/19761437/amiga-disk-encoding-schemes-mfm%3F-gcr%3F-please-explain--by-...&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Amiga Disk Encoding Schemes MFM? GCR? Please explain!&lt;/em&gt; by Betty Clay&lt;/a&gt;,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[GCR] would appear to let a disk hold far more information than could&#xA;be stored under most other methods. However, since GCR permits the use&#xA;of as many as eight on-bits in a row, the drive cannot interpret them&#xA;at full speed. It is necessary to write or read at only half the&#xA;normal speed, in order to insure accuracy. When the writing speed is&#xA;slowed to four microseconds per bit instead of the normal two, the&#xA;density of the data is only half as much, cutting drastically into the&#xA;storage advantage.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That would indeed seem to eliminate the advantage of GCR. but then why did that disadvantage not apply to its use for 5.25&amp;quot; disks? Is it a limitation of the rate at which the electronics can process the bits, or of the physics of the interaction of the drive head with the magnetic fields?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="3290" LastEditDate="2020-06-26T05:01:49.477" LastActivityDate="2020-06-26T05:01:49.477" Title="Amiga floppy disks and GCR vs MFM" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;floppy-disk&gt;&lt;commodore&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8930" PostTypeId="2" ParentId="8928" CreationDate="2019-01-24T04:31:30.130" Score="18" Body="&lt;p&gt;On a floppy disk, each 'bit' is a flux reversal — a magnetic event. If those bits are too close together, they'll leak into one another and data will be lost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disk controllers use a regular clock and either write a transition or write nothing at each clock tick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also a lower limit on how far apart transitions can be. Disk rotation speed varies according to the whims of the motor, aerodynamic drag, etc, and drives contain automatic gain controls — if they think they aren't seeing data but should be, they turn up their own volume.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So bits need to be regular enough that the controller doesn't have to make too many guesses about rotation speed, and the drive doesn't turn up its gain so far that it's reading noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, the bit patterns that drives actually write are a translation of the bytes to be stored into some other encoding, that guarantees bits aren't too far apart, and aren't too close together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FM and the GCR schemes solve for too far apart differently, but use the same solution for ensuring bits can't be too close together: their data clock is picked so that each tick is far enough apart that two will never be too close. The GCR schemes then do a better job of making sure that they're not too far apart than does FM: FM encoding uses two output bits per input bit, but e.g. Apple's second GCR encoding uses only eight output bits for six inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MFM is a later development than GCR and provides a different solution to the too-close-together problem: it guarantees that there are no sequences that lead to two bits being output consecutively. So, you can double the data clock without fear of magnetic collision. Like FM it also produces two output bits per input, but those two fit into the same physical space as one FM bit. Hence: double density.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MFM is an equally valid improvement for 5.25&quot; drives as it is for any other, and is better than both company's GCRs; the reason that Apple and Commodore each came up with GCR schemes is that they were coming up with something better than FM, not rejecting MFM — both companies released drives before MFM controllers were available. &lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-01-24T04:31:30.130" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8931" PostTypeId="2" ParentId="5030" CreationDate="2019-01-24T04:34:36.633" Score="2" Body="&lt;p&gt;The Apple IIgs was introduced in September 1986. The base machine list price was $999. At that time, a Mac Plus listed for $2600 and was a &quot;closed&quot; architecture. The first color Mac came out in March of 1987 and was the Mac II. The list price just for the Mac II itself was $3898 not including any peripherals (for example, it lacked any built-in internal video). The IIgs actually could be purchased by itself and used with MANY existing older peripherals making it a lot more cost effective (one did not need to add a video card or a floppy controller as they were built in). Not only that, the Apple IIgs had an emulation mode that allowed it to work with 90% of existing Apple II software dating back to the Apple II's inception in 1977. Combine these factors and you have a winner at that time. It took until October 1990 for Apple to release a &quot;low cost&quot; color Mac.&lt;/p&gt;&#xA;" OwnerUserId="11700" LastActivityDate="2019-01-24T04:34:36.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8932" PostTypeId="2" ParentId="234" CreationDate="2019-01-24T13:11:21.873" Score="10" Body="&lt;p&gt;There is single key difference. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amiga FDC controller writes or reads the track as a whole -- there is no option to write or read single sector. As a result, smaller inter-sector gaps and more sectors per track are possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PC FDC controller is able to write each sector individually and the consequence is the need for bigger inter-sector gaps to compensate for different rotation speeds of different drives and other misalignments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other small differences, for example amiga FDC controller does NOT do MFM-en/decoding in hardware and just reads or writes raw data, without being aware there is some encoding (with the exception of optional &quot;0x4489&quot; track beginning mark). The sector header format is therefore optimized for an easier CPU decoding and is non-standard. The consequence is that no pc FDC controller is able to read disks in native amiga format (while the opposite is false -- amiga easily reads just about ANY disk with comparable bitrate).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some info on amiga disk format: &lt;a href=&quot;http://lclevy.free.fr/adflib/adf_info.html&quot; rel=&quot;noreferrer&quot;&gt;http://lclevy.free.fr/adflib/adf_info.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2020-01-28T14:49:03.973" LastActivityDate="2020-01-28T14:49:03.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8933" PostTypeId="5" CreationDate="2019-01-24T13:21:09.140" Score="0" Body="&lt;p&gt;The BESM-6 was a Soviet electronic computer, designed at the Lebedev Institute of Precision Mechanics and Computer Engineering. The design was completed in 1965, and the machine was produced from 1968 to 1987. The original version was transistor-based, but the 1980s versions used integrated circuits. It had 48-bit words, and a clock speed of 10MHz. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-01-24T13:34:33.187" LastActivityDate="2019-01-24T13:34:33.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8934" PostTypeId="4" CreationDate="2019-01-24T13:21:09.140" Score="0" Body="The BESM-6 was a Soviet computer, designed in the 1960s and in production from 1968 to 1987 in various forms. " OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-01-24T13:48:19.877" LastActivityDate="2019-01-24T13:48:19.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8935" PostTypeId="2" ParentId="8928" CreationDate="2019-01-24T13:23:34.637" Score="3" Body="&lt;p&gt;I think that the reason was simple: amiga used standard (well, nearly standard) double-density disk drives. This is untrue for 1541, that used non-standard disk drive (consisting of only mechanical parts) and quite sophisticated controller circuity, that includes analog parts (read and write amplifiers, disk motor driver).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The standard drive was optimized for standard bitrate -- so no even emulation of CLV by switching bit frequency is possible -- as 1541 did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MFM/GCR difference is actually less important part since again disk drive is not aware of the specific encoding. If you wish, you can use GCR encoding with amiga as well -- because amiga FDC does not do any MFM encoding or decoding. That is done by either CPU or blitter.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-01-24T13:23:34.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8936" PostTypeId="2" ParentId="8928" CreationDate="2019-01-24T13:53:31.740" Score="2" Body="&lt;p&gt;Aside from the technical aspects: when early floppy systems came out, disks were expensive and higher capacity was a selling point. By the time that 3½&quot; disks were popular, the media was cheaper and it wasn't worth the effort of having complex controllers to save a few bytes.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-01-24T13:53:31.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8937" PostTypeId="2" ParentId="8920" CreationDate="2019-01-24T14:09:32.580" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;6502 assembly is a language meant for humans to compile it themselves, not compilers. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&quot;Assembly language&quot; is not compiled.  It's &lt;em&gt;assembled&lt;/em&gt; by a program called an &lt;em&gt;assembler&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the following simple 6502 assembly program which, on a Commodore 64, will print the string &quot;HELLO WORLD.&quot;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        LDY #$00&#xA;LOOP    LDA STRING,Y&#xA;        BEQ EXIT&#xA;        JSR $FFD2&#xA;        INY&#xA;        JMP LOOP&#xA;EXIT    RTS&#xA;STRING  .DB 'HELLO WORLD'&#xA;        .DB 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Above, you have instructions (e.g. &lt;code&gt;LDY&lt;/code&gt; - load Y) and the operand to that instruction (&lt;code&gt;#0&lt;/code&gt;).  The operand also expresses the &lt;em&gt;addressing mode&lt;/em&gt;, which is &quot;how&quot; the instruction is supposed to get its data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;#$00&lt;/code&gt; means &lt;em&gt;immediate&lt;/em&gt; - which means we want to load Y with the literal number 0 and not what is at address $00.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;STRING,Y&lt;/code&gt; is &lt;em&gt;Y-indexed&lt;/em&gt; - this means we want the value at address STRING plus Y.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each instruction + addressing mode combination results in a unique 1-byte opcode.  Opcode list is &lt;a href=&quot;http://www.6502.org/tutorials/6502opcodes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can see from the following excerpt from that site what the assembler does:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Absolute,X    LDA $4400,X   $BD  3   4+&#xA;Absolute,Y    LDA $4400,Y   $B9  3   4+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The assembler will take the text &quot;LDA $4400,X&quot; and generate the 3 byte sequence &lt;code&gt;BD 00 44&lt;/code&gt;.  6502 consumes its addresses in the instruction stream in low-byte, high-byte order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going back to my example program, the assembler would take the line &quot;JSR $FFD2&quot; and at that point output the 3 byte sequence &lt;code&gt;20 D2 FF&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you take the opcode table, look up each opcode in your program yourself, and manually specify the byte stream?  Sure.  I believe this is what Wozniak did when developing Integer BASIC for the Apple in the 70's.  Bill Gates probably did this do for the first BASICs he wrote at that time as well.  This is what it means to &lt;em&gt;assemble&lt;/em&gt; a program yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You noticed in the short program I wrote that I used labels.  This is one of the higher-level things a good assembler does - it goes through the program in 2 passes and inserts/resolves addresses (somewhat like a linker), and this allows you to use labels and it will figure out the addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compilers will take higher-level constructions like &lt;em&gt;if&lt;/em&gt; statements and mathematical expressions, and generate complex sequences of opcodes (or assembler text to be later processed by an assembler) .  An assembler is merely translating mnenomics to opcodes and possibly supporting some very simple math like adding two labels or a label and constant together. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course some assemblers have macros and a sophisticated preprocessor that blurs the line between assembler and compiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Can I compile 6502 assembly into a stand alone application, preferably for Windows?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Obviously a raw 6502 bytestream will not be understood by x86 CPU, and you noticed in my example Commodore 64 program, I used a &lt;code&gt;JSR $FFD2&lt;/code&gt;.  This is a ROM routine available only on the Commodore 64 platform.  It won't exist on any PC-compatible system.  The ROM routine also creates text by writing to &quot;screen memory&quot; - the area of memory $0400-$07FF which the VIC chip reads to generate a display.  This VIC chip also doesn't exist on any PC-compatible system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Emulators can help, of course.  There are many 6502 emulators that could be included with 6502 code bytestreams to form a standalone executable.  Nothing really stopping anyone from doing that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But including an emulator as part of an executable - this doesn't solve the problem of how you get 6502 code to perform I/O.  You'd have to define a &quot;virtual hardware&quot; platform and also have code that bridges between that virtual platform and the operating system to produce graphical or text out.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;UNIX-style text-based terminal I/O would not be too difficult, but something like outputting to Windows forms or interacting with Windows graphics subsystems in a meaningful manner would require more work.  And that means the 6502 code you write will only work for this virtual platform.&lt;/p&gt;&#xA;" OwnerUserId="746" LastActivityDate="2019-01-24T14:09:32.580" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8938" PostTypeId="2" ParentId="8928" CreationDate="2019-01-24T16:36:56.430" Score="3" Body="&lt;p&gt;No answer yet told about the four different writing speeds the Commodore 8-Bit floppies used. That way, it could store&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    Track   Sectors/track   Sum Sectors   Storage in Bytes/track&#xA;    -----   -------------   -----------   ----------------------&#xA;     1-17        21            357             7820&#xA;    18-24        19            133             7170&#xA;    25-30        18            108             6300&#xA;    31-40(*)     17             85             6020&#xA;                               ---&#xA;                               683 (for a 35 track image)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;while one-speed FM/MFM floppies have to use the smaller number of bytes per track on the outer tracks, too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only other system I know which did that was an Olivetti PC with FM floppies. Totally incompatible to anything. Other than the Commodore 8-Bit floppies, it changed the physical drive speed instead of the writing speed.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2019-01-24T16:36:56.430" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8939" PostTypeId="2" ParentId="8911" CreationDate="2019-01-24T17:50:43.357" Score="1" Body="&lt;p&gt;Another point not yet mentioned is that for constant linear velocity to offer the most benefit, it is necessary to use a spiral track rather than a series of rings.  Every separately-writable sector on a disk has a significant amount of overhead, so using larger sectors will improve storage efficiency.  If one uses constant-linear-velocity storage with consecutive rings, however, each track will lose an average of half a sector because there's no way to store half a sector on a track.  Using a spiral will eliminate any need to have an integer number of sectors per revolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've read of some copy protection schemes for the Apple II wrote information in a spiral.  I suspect they did so more for purposes of thwarting piracy rather than enhancing storage density, but I suspect that a disk operating system that was limited to loading and storing 32Kbyte chunks could probably fit six spiral-written chunks on what would normally be a 140K floppy.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-01-24T17:50:43.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8940" PostTypeId="2" ParentId="8843" CreationDate="2019-01-24T18:11:27.727" Score="1" Body="&lt;p&gt;Originally, the escape character was used to initiate multi-character sequences when it was necessary to support more functions than could be accommodated in 31 active control characters (codes 0x00 and 0x7F were reserved as padding characters that would be ignored).  Because some usages would require transmitting that character a lot, a key for transmitting that character was placed at a reasonably convenient spot on the keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Somewhat later, it was discovered that it was useful to have a reasonably-convenient key that would allow a user to &quot;escape&quot; from an operation, and when using interactive applications that didn't need to use the escape character for those other purposes, the escape key was handy for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, these two usages sometimes collide, with terminals sending a sequence like esc-leftbracket-A when a cursor-up key is pressed, but with some applications wanting to use escape as a directly-functional key.  There are two ways this can be handled:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Some terminals can be configured so that they key marked Esc will actually send a unique sequence of characters, so an application that detects that can know that escape was pushed.  On some such terminals, control-leftbracket can be used to send &quot;just&quot; an escape character should the need arise.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some applications will wait briefly after they receive an escape character to see if it is followed immediately by something else.  This approach is quite common and is used by editors like &quot;vi&quot;, but is unfortunately unreliable.  If a user happens to hit escape to exit insert mode and then starts typing other commands but the application gets momentarily waylaid before it can process the escape, vi might attempt to process some portion of the following commands as an escape sequence (which might in turn disastrously affect the meaning of the succeeding keystrokes).  If the user is communicating over a TCP connection which manages to send the escape character from a cursor-right command before a momentary communications hiccup, the application might receive the escape, decide it was &quot;just&quot; the escape key, receive the left bracket, and then receive a &quot;D&quot;, potentially leading to major confusion.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For applications that interface to a keyboard without having to go through an octet stream, there may be superior ways of handling keyboard input.  Under MS-DOS, for example, the &quot;get keystroke&quot; function reports both the ASCII character and the identity of the physical button that was pushed to produce it.  This allows for a much wider and more useful range of keystrokes than would be possible using a mere octet stream, but not all operating systems support such things.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-01-24T18:11:27.727" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8941" PostTypeId="2" ParentId="8911" CreationDate="2019-01-24T18:33:50.253" Score="4" Body="&lt;p&gt;Something nobody else has mentioned is that the nature of data stored between optical media and magnetic media was very different at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the time of floppies optical disks were mostly write once media that contained very long, sequential files. Mostly music (CDs) or video (Laserdisc). Data disks did start becoming popular towards then end of the floppy era but they were still write-once, and often structured as large packed data files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Write once is important, since it implies there is no disk fragmentation. Disk fragmentation would be a serious issue for CLV drives, since it could require multiple significant changes to rotation speed while reading even a small file. Large sequential files, as were common on optical media, meant seeks were rare (and consequentially significant changes to rotation speed were rare).&lt;/p&gt;&#xA;" OwnerUserId="11705" LastActivityDate="2019-01-24T18:33:50.253" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8942" PostTypeId="2" ParentId="8920" CreationDate="2019-01-24T18:46:39.540" Score="1" Body="&lt;p&gt;This question is problematic because it's poorly phrased, so that the technically correct answer is &quot;yes&quot; while the answer to the question really being asked is &quot;no&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No, you can't compile 6502 assembly into a standalone Windows application.  Windows only runs on a certain set of processors, and the 6502 is not included in that list.  If there is no version of Windows for the 6502, then naturally there can be no Windows Applications for the 6502 (ignore the idea of emulators for now, we will come to that later).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you can't do this for Windows, how about another system that does support the 6502?  Let's use the Commodore 64 as an example of a 6502 system.  In this case the answer is &quot;yes&quot;, but we don't typically call this &quot;compiling&quot;, we call it &quot;assembling&quot; and the program we use is called an &quot;assembler&quot;.  An assembler converts assembly language source code into machine code, via a straightforward mapping of opcode mnemonic names into numeric values (plus other details not important for this question).  This is easy to do because the assembly language for the 6502 is designed to be converted to 6502 machine code, in such a straightforward way that you could do it by hand using pencil and paper if you did not have access to an assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there's more involved here than just translating assembly language into machine code, you need to take that machine code and put it in a file that can be run as an application.  How exactly this is done depends on the specific computer that's going to be running the code.  This means, an assembler for a Commodore 64 will produce different output than an assembler for an Apple //e or an Atari 800 (or an NES console), because the different computers have different file formats and loading conventions even though they all use the same 6502 processor (or close enough to the same as far as this question is concerned).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you have a Commodore 64 assembler, then yes it can produce an executable program that will run on a Commodore 64.  Likewise for an Apple //e assembler, it can produce Apple executables, and an Atari 800 assembler can produce Atari executables.  I am ignoring the idea of &quot;linkers&quot; or &quot;loaders&quot; here to keep things simple; for the purposes of this question just pretend that linkers are always built into the assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means, if you want to assemble 6502 assembly language into an executable program, then you need an assembler that will produce an executable file in the correct format for whatever computer you plan to run the program on.  Normally this will always be a 6502 based system because it would be a ridiculous waste of time to try to write programs intended to run on an x86 PC using 6502 assembly language.  Instead, you would use x86 assembly language to write x86 programs, or you would use a higher-level compiled or interpreted language such as C, Pascal, BASIC, etc.  Since there are no native assemblers that will convert 6502 assembly language to x86 machine code, again the answer here is &quot;no&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &quot;ridiculous waste of time&quot; is not the same thing as &quot;not possible&quot;.  It is in fact possible, and the way you would do it is by writing an emulator that simulates some 6502-based computer (including simulating its input and output devices because without input and output programs would be useless).  You would then &quot;load&quot; your 6502 executable within this simulated computer, and the simulated computer would &quot;run&quot; your code and things would happen.  So the answer might be &quot;yes&quot; except that there's no single-step &quot;compiler&quot; that will take 6502 assembly language and produce an x86 program that includes both your program and a simulated system to run your program in, all in one step.  You can achieve the outcome of a runnable application that includes everything, but it's a multi-step process and requires more than just a compiler, and the details of how to do it are really too much for a Retrocomputing SE question to answer.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2019-01-24T18:46:39.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8943" PostTypeId="1" CreationDate="2019-01-24T19:22:22.963" Score="3" ViewCount="861" Body="&lt;p&gt;I have an old XT clone which is fitted with a Seagate ST-238R RLL hard disk and an ST11R hard disk controller card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have recently revived this old machine and it all appears to be working still.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for software to allow the contents of the drive to be archived before anything happens. The machine now has a XT_IDE v4 card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a newer machine I'd consider using Norton Ghost or Linux to create a sector-by-sector image of the disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It currently has MS-DOS 5.0 and I'm able to xcopy the files off.&lt;/p&gt;&#xA;" OwnerUserId="7357" LastActivityDate="2019-01-29T22:22:43.350" Title="How to image a RLL or MFM hard disk on an XT class PC" Tags="&lt;ms-dos&gt;&lt;xt-ide&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8944" PostTypeId="2" ParentId="8943" CreationDate="2019-01-24T19:52:11.527" Score="4" Body="&lt;p&gt;If you can’t image the disk using another system (and you probably can’t), I would take a two-pronged approach:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;copy the files to a partition on a disk on your XT-IDE card; first the system files, using &lt;code&gt;SYS&lt;/code&gt;, then everything else using &lt;code&gt;XCOPY&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;image the disk to a file in another partition on a disk on your XT-IDE card, using a disk imaging or editing tool.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I can’t remember off-hand an actual partition imaging tool which will work on an XT, but there is at least one disk editor which can copy tracks or sectors to files, Gregg Jennings’ DISKED. You can find a copy of that &lt;a href=&quot;ftp://ftp.elf.stuba.sk/pub/pc/utildisk/diske291.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. I recommend experimenting with it in a DOS virtual machine before using it on your XT; take particular care with the various character interpretation modes, you really want a raw copy here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might find other useful tools &lt;a href=&quot;http://www.resoo.org/docs/dos/free_software/disk2.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, but many of them require a 386 or later CPU.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-01-24T19:52:11.527" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8945" PostTypeId="1" CreationDate="2019-01-24T20:42:51.300" Score="6" ViewCount="725" Body="&lt;p&gt;I'm attempting something that might seem crazy but I got stuck at the end. I am installing Windows 95, on a flash drive, using a PC with modern hardware (Not a virtual machine!). I got around the memory issue (16GB &gt; 1GB) with &lt;code&gt;MaxPhysPage&lt;/code&gt; and the &lt;code&gt;Windows protection error&lt;/code&gt; issue (4.0GHz &gt; 2.1GHz) with &lt;code&gt;CPU95FIX&lt;/code&gt;. I can boot into Windows 95, the basic things work (keyboard and screen at really low resolution), but the mouse... It is recognized as a mouse but even a single tiny movement can make it teleport everywhere, randomly click at random places and drag from random places to random places.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At first, the installer also had this issue but the installer has a flag for it. &lt;code&gt;SETUP /iL&lt;/code&gt; makes the installer load the Logitech mouse drivers instead of the normal mouse drivers and that seemed to fix the mouse for the setup. However, I couldn't figure out how to load these drivers on the actual installation so the mouse works normally there. If there is a file inside the installation CD, what's the path to it? If the installation already has the driver, how can I activate it? If there is a 3rd party driver I need to install, where can I get it from?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mouse is a wireless Logitech M705 connected via Logitech's USB dongle. The same dongle is also connected to the keyboard. I am yet to figure out how it works at all but it works and I'm not going to question it.&lt;/p&gt;&#xA;" OwnerDisplayName="user11708" LastEditorDisplayName="user11708" LastEditDate="2019-01-24T20:48:18.910" LastActivityDate="2019-02-07T07:41:31.127" Title="Logitech drivers from Windows 95 Installer on the actual disk" Tags="&lt;windows-95&gt;&lt;mouse&gt;" AnswerCount="1" CommentCount="22" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8946" PostTypeId="1" AcceptedAnswerId="8950" CreationDate="2019-01-24T20:59:33.873" Score="58" ViewCount="11797" Body="&lt;p&gt;If you read about the history of computing, you'll hear how the first computers were &quot;huge&quot;. You will often come across assertions that in the early days of &lt;em&gt;commercial&lt;/em&gt; computing, a single computer would be &quot;so big that it filled an entire building&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, poking around Wikipedia, I can find plenty of photos of old computers the size of an entire server rack, or &lt;em&gt;several&lt;/em&gt; server racks. But I can't seem to find any pictures of a computer filling an entire &lt;em&gt;room&lt;/em&gt;, much less a whole multi-story building.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are these claims of a computer &quot;filling an entire building&quot; actually accurate, or is that a wild exaggeration? I can well imagine if you just paid a few million USD for a computer, you probably put it in its own special room with locked doors. But do any of these systems really fill a whole building? Do any of them really &quot;fill&quot; a whole room? Most pictures seem to just show a mostly empty room with cabinets across one wall.&lt;/p&gt;&#xA;" OwnerUserId="11695" LastEditorUserId="4" LastEditDate="2019-01-28T21:38:55.647" LastActivityDate="2021-02-03T00:14:25.640" Title="How big is a mainframe?" Tags="&lt;hardware&gt;&lt;mainframe&gt;" AnswerCount="13" CommentCount="25" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8947" PostTypeId="2" ParentId="8946" CreationDate="2019-01-24T21:49:49.893" Score="9" Body="&lt;p&gt;Consider ENIAC.  From &lt;a href=&quot;https://en.wikipedia.org/wiki/ENIAC&quot; rel=&quot;noreferrer&quot;&gt;wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It weighed more than 30 short tons (27 t), was roughly 2.4 m × 0.9 m ×&#xA;  30 m (8 ft × 3 ft × 98 ft) in size, occupied 167 m2 (1,800 sq ft) and&#xA;  consumed 150 kW of electricity.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's roughly building-sized.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2019-01-24T21:49:49.893" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8948" PostTypeId="2" ParentId="8946" CreationDate="2019-01-24T22:09:28.030" Score="30" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But I can't seem to find any pictures of a computer filling an entire room, much less a whole multi-story building.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4eV8z.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4eV8z.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Image taken form &lt;a href=&quot;http://www.computinghistory.org.uk/det/2328/IBM-4341-Processor/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Centre for Computing History&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, for example look at this picture of a 4341 setup. This is a &lt;strong&gt;small&lt;/strong&gt; entry-level mainframe of ~1980. With a believable setup for such small machine with:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CPU (in the middle against the 'wall')&lt;/li&gt;&#xA;&lt;li&gt;Networking,&lt;/li&gt;&#xA;&lt;li&gt;4 Tapes with Controller,&lt;/li&gt;&#xA;&lt;li&gt;4 Fixed Disks &lt;/li&gt;&#xA;&lt;li&gt;6 Removable Disks,&lt;/li&gt;&#xA;&lt;li&gt;Card Reader&lt;/li&gt;&#xA;&lt;li&gt;Card Punch&lt;/li&gt;&#xA;&lt;li&gt;One High Speed Printer&lt;/li&gt;&#xA;&lt;li&gt;One Small Printer&lt;/li&gt;&#xA;&lt;li&gt;One Operator Console&lt;/li&gt;&#xA;&lt;li&gt;One Terminal &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's a reasonable setup for this machine, and I'd call that for sure a room full.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RhGDr.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RhGDr.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;(Image taken from &lt;a href=&quot;http://www.chilton-computing.org.uk/ccd/mainframes/overview.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Science and Technology Facilities Council&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A large 3090 of the same time will, as seen here fill about the same space with &lt;strong&gt;just the CPU&lt;/strong&gt;. And it'll definitely need more peripherals than just a hand full of disks and tapes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Are these claims of a computer &quot;filling an entire building&quot; actually accurate, or is that a wild exaggeration?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As usual it depends on the size of building you look at. A fully configured mainframe of the 70s or 80s, with adequate peripherals, can easy fill 1000 m² (~11.000 sq ft). Then again, companies using those kind of commercial computers usually had more than one machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take a nice example of a mid to upper size bank system like I had a job with in 1981. They had a building the size of a Tesco Superstore (or one of these large DIY stores) to house 6 computers with all I/O and offices for machine operators and IT management. No user or any other department was located there. About 2/3 of that building was the machine room. 5 of them were used for daily business, while the 6th was a developer system. One of these five had the single job of operating a high speed optical reader, an awesome device ... anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You see, they could get pretty big. A CPU (That's the mainframe term for the computer itself, processor, memory, memory interface, I/O controller and I/O interface - so without any peripheral device, not even a boot disk) did occupy four to six 21&quot; full-size racks (upper end even beyond that), depending on the memory installed. Insofar these 1980s machines were already small, as the previous generation could have up to 10 racks just for the CPU. Later, around 1990, everything fitted in just 1-2 racks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was &lt;a href=&quot;/q/8946&quot;&gt;mentioned by AnoN&lt;/a&gt; that this (the 4331 setup) doesn't look like much and one could as well stack everything against the wall. Maybe, if these were standard 19&quot; mini computer components. But they aren't. They are not made up from small 1...4 HE components, to be operated from one side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are mainFRAMEs - Each rack (like) unit had two frames installed on each side, which could be swung out like a door (after opening the doors), Depending on the machine and usage, this frame was a single component - or in case of CPUs maybe only a part thereof. For more compact items, like memory, usually a half-frame featured one compact component. For maintenance both sides had to be accessible, that's why you'll (almost) never see a mainframe pushed against a wall, but with at least 95 cm walkway between units (*1). The closest to compare may be two 19&quot; racks pushed back to back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly peripherals did need access from both sides - in addition to front access for operators, someone needs to change disks and tapes, refill paper or take the printouts. Disks were at that time (*2) were top loaders. So no stacking either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While these large metal cabinets may look somewhat like today's 19&quot; racks, they are not. It's a completely different design. Much like Mainframes are.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Mainframes are in many ways more like an industrial production line, than today's computers&lt;/strong&gt;. Todays machines got their origin in minicomputer which are more like a multitool for a handyman. Extremely versatile but slow. Useful for everything, but excelling at nothing. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I started out in Mainframe service, and we really appreciated any additional space above the bare minimum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - only way at the end of removable disks IBM introduced a line of full height racks with 3 disk units in each to be pulled out and loaded.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-15T09:26:10.433" LastActivityDate="2019-07-15T09:26:10.433" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="8949" PostTypeId="2" ParentId="8946" CreationDate="2019-01-24T22:14:01.920" Score="18" Body="&lt;p&gt;The main computer hall of the company I worked for in the 1970s and 1980s was about half the size of a soccer pitch - about 200 feet by 150 feet. That contained three IBM S/370 mainframes at one end, and the rest of the room was packed full of disk drives, stacked up to 6 or 7 feet high with narrow walkways between, with the outside walls lined with tape drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The power supplies and cooling systems filled the whole of the ground level, and the computer hall was the next floor up, built on a false floor to accommodate the wiring and plumbing for the water cooling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be fair, that was only half the complete building - one floor of the other half was an open plan area filled with punched card operators, and the other floor was occupied by programming teams. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The magnetic tape library occupied about half the machine hall area, on the third floor - basically, wall-to-wall racks of 12-inch tape reels, and a staff of tape librarians to make sure things didn't get lost!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At a later time there was also a Cray supercomputer in the main hall - though unless you knew where it was, it was almost hidden from view by all the rest of the kit.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2019-01-24T22:19:50.993" LastActivityDate="2019-01-24T22:19:50.993" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8950" PostTypeId="2" ParentId="8946" CreationDate="2019-01-24T22:40:25.817" Score="72" Body="&lt;p&gt;In the 1980's a certain bank with its headquarters in Edinburgh has a problem with (IBM) disc storage that had to be kept online for live customer account information for branch and ATM machine operation that it ran out of city buildings to put the disc drives in.&lt;/p&gt;&#xA;&lt;p&gt;Yes: Not just a building, but buildings. Luckily, just after that time radical developments were made in disc storage densities and the need for more real estate diminished, but computer floor space was a big issue at the time.&lt;/p&gt;&#xA;&lt;p&gt;Here, also, is a picture of the machine room at Manchester Computer Science, containing on single machine, the MU5. This is just the processor, the peripherals and disc storage are in another adjacent room:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/D7GZK.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/D7GZK.jpg&quot; alt=&quot;MU5&quot; /&gt;&lt;/a&gt;&#xA;&lt;sup&gt;&lt;sub&gt;Source: &lt;a href=&quot;http://www.cs.manchester.ac.uk/about-us/history/mu5/&quot; rel=&quot;noreferrer&quot;&gt;http://www.cs.manchester.ac.uk/about-us/history/mu5/&lt;/a&gt;&lt;/sub&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;It was rather  large, but the lower floor computer room that contained an ICL 1906A was even bigger; and then there was the CDC 7600 and the Cyber 106 too.&lt;/p&gt;&#xA;&lt;p&gt;An earlier machine was Atlas. Here is a picture of the large room containing only the processor of the London University Atlas; several other large halls contained the peripherals and storage:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8joKp.jpg&quot; alt=&quot;Atlas&quot; /&gt;&#xA;&lt;sub&gt;&lt;sup&gt;Source: &lt;a href=&quot;http://www.chilton-computing.org.uk/acl/technology/atlas/p010.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.chilton-computing.org.uk/acl/technology/atlas/p010.htm&lt;/a&gt; &lt;/sup&gt;&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;They were all very big power hungry beasts that took some real estate.&lt;/p&gt;&#xA;&lt;p&gt;There are plenty of examples on the internet in the computer history archives.&lt;/p&gt;&#xA;" OwnerUserId="611" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-15T09:09:15.830" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="8951" PostTypeId="2" ParentId="8946" CreationDate="2019-01-24T22:50:40.923" Score="11" Body="&lt;p&gt;One of the largest computers ever built was the SAGE system,  built to gather information about surprise attack on the US.  It filled a building.  One might argue that SAGE was more than just one computer.  But if you accept it as just one computer, it meets your criterion. &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Semi-Automatic_Ground_Environment&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia Article&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;  A closer look at the Wikipedia Article shows that SAGE was a collection of computers, and a network. Each computer was an AN/FSQ-7, which is mentioned in another answer.  That computer was the largest ever built, taking up about 21,000 square feet of floor space.  That's big.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2019-01-29T14:02:53.500" LastActivityDate="2019-01-29T14:02:53.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8952" PostTypeId="2" ParentId="8911" CreationDate="2019-01-24T23:56:21.020" Score="5" Body="&lt;p&gt;Answering the &amp;quot;why not&amp;quot;, as the &amp;quot;actually, there was&amp;quot; has already been covered: Essentially, it's because of the generally small number of sectors per track on a floppy disk, or in other words the much more limited amount of data per revolution, and the rather smaller variation in track length per revolution. Also, as has been said above, the fact that the tracks are concentric, thus with a whole number of sectors per revolution, rather than being a continuous spiral where each sector can start and end at any arbitrary angle vs a fixed point of reference.&lt;/p&gt;&#xA;&lt;p&gt;This both makes it less straightforward to engineer - you can't simply make a smooth variation of motor speed vs head position, but have to separate the disk into multiple speed zones (the smallest/largest number of tracks you may have is 35~84, and number of sectors about 8~21, with a particular disk size and coating formulation normalising around a fairly tight range, so each zone needs to be at the very least three tracks wide and could well spread over ten or even twenty tracks), each demanding just as tight motor control as a simpler single-speed mechanism, and for the hardware (not just software) to maintain absolute certainty over which track the head is currently sitting over - and limits the potential benefit of the technique.&lt;/p&gt;&#xA;&lt;p&gt;For example, the Apple drives pulled about an extra 11% out of each disk vs the MS-DOS standard, as they had to reduce the sector counts on the inner tracks to account for less than rigid motor speed control across the various zones; the Amiga, and common custom formats on the Atari ST, as well as Microsoft's own DMF system-disk format, achieved similar or better capacity on ordinary disks, at least for reading (and for writing with all but the sloppiest, sub-average rpm drives) with single-speed/CAV recording just by increasing the number of sectors on &lt;em&gt;all&lt;/em&gt; tracks (e.g. 10 sectors instead of 9) and tightening up the inter-sector and end-of-track timings.&lt;/p&gt;&#xA;&lt;p&gt;(The sector counts have to be varied by changing the motor speed rather than, as with high speed CD-RW/DVD-RW/BD-RW drives or hard drives, holding the motor speed steady and varying the data rate because the floppy controller chips can generally only operate at one or two fixed rates, with their clock input being - at least in older machines - either locked to the system clock or a separate crystal that's the fastest one in the entire machine, so can't be finely subdivided to a variety of slightly-different rates (it's either 1:1, or 1/2...), nor multiply up from a lower frequency using a PLL. Optical drives and hard drives take their clock from the pre-hard-formatted media itself, but soft-formatted floppies have to use a reference within the computer itself)&lt;/p&gt;&#xA;&lt;p&gt;The actual recorded area of a floppy disk is quite obvious - it's a little narrower than the &amp;quot;window&amp;quot; of a 5.25 or 8 inch envelope, or that opens up on a 3.5 (or 3.0, 2.5...) inch type. Its boundaries are a good way in both from the physical edge of the disc proper, and the hub, and their radii don't vary a huge amount in comparison to that of the middle track. If we go by Apple's example, it can be assumed that 3.5 inch disks exhibit about a 1.5:1 variation between the innermost and outermost tracks, and perhaps even less (about 1.4:1) on 5.25 inchers. The notional amount of wastage with CAV recording is quite low - if you push the limits, you might get 20 to 25% extra, but realistically no more than 15%, which wasn't worth the bother (and considerable extra cost) to most manufacturers who didn't have a hardware design savant sitting in one of the founders' seats like Apple (even Commodore, who had their own IC fabs and other first-party hardware factories didn't much bother with the idea).&lt;/p&gt;&#xA;&lt;p&gt;On a typical optical disc, however, almost the entire visible surface area is available for data storage, from a few millimetres out from the transparent hub through to a millimetre or so from the outer edge. The speed of an envelope-pushing 81 minute music CD  varies by almost a full 2.5x as it plays the audio data out at a steady speed with no meaningful buffering, implying an outer radius nearly 2.5x that of the innermost, and DVD-Rs written within safe limits (avoiding the last millimetre or so where error rates skyrocket) show a 2.4x speed variation when running in variable data-rate CAV mode. Therefore if you were to operate in pure CAV, fixed sector count per revolution mode with those, you would lose a significant amount of the total capacity, easily a third or more, which would mean the difference between storing 75 minutes, or just 50 minutes. This loss can actually be seen with CAV Laserdiscs (tuned for steady freezeframe, or storing thousands of still photos rather than the maximum amount of analogue video... which is a little strange because their analogue nature would allow cramming in more sectors to the inner tracks at the expense of some horizontal resolution) which have a similar inner/outer radius ratio to CDs and show a noticeably lower runtime, and in the early &amp;quot;PacketCD&amp;quot; standards for floppy-like addressing of CD-RWs (with fixed numbers of sectors per revolution, Z-CAV speed control, and a larger than normal gap between sectors, all compensating for the difficulty of accurately rewriting individual sectors in a continual-spiral disc format never intended for anything other than one-time writing of single large sessions consisting of many thousands of sectors) which saw the recordable capacity of a 650+ MB CD-RW fall to barely more than 500MB, and a 700MB disc to about 530MB.&lt;/p&gt;&#xA;&lt;p&gt;The latter examples are also an answer to why we don't use continuous spirals for floppies either; it's just too complicated, from an engineering perspective. The finesse of control exerted in CD transports in terms of head positioning was simply exquisite by the terms of the early 80s and easily counted for as much of the thousand-plus dollar selling price of the first players as the actual laser diodes, the high-data-rate decoder circuitry and ultra high fidelity analogue output stage. A compact disc spins at about the same average speed as a floppy disc (whilst delivering 10x the data rate of even the fastest floppies, and more like 80x that of a turn-of-the-80s model), but moves the equivalent of one track width per rotation (as the read-out is nonstop, unlike most floppies, which usually need at least 3 revolutions to read a full, single-sided track of data and potentially as many as 21)... and can carry on doing that for anything up to 80 minutes (whereas most floppies can be fully read in under 5 minutes, sometimes less than 1 minute). It might average about 375rpm over those 80 minutes, so the head needs to be able to seek between at least 30,000 individual, microscopic tracks (across a start-to-end width of maybe 2 inches max), and that's if we assume the laser head's groove-following abilities have enough swing to cover half a track width one way or the other instead of the head sled having to step 12.5 or so half-tracks per second, or even 25 quarter-tracks. A floppy drive, as stated, only needing the ability to step somewhat coarsely between 35 to 84 tracks over a slightly narrower sweep, which is a large enough distance that the mechanism can be clearly seen moving from one track to the next.&lt;/p&gt;&#xA;&lt;p&gt;And, of course, to maintain continual tracking (but still with random-access abilities), the RW head mechanism would either have to be stepped whole rather more finely (say, a tiny tick between each sector), or be equipped with a similar track-following servo mechanism that electromagnetically (problematic for magnetic media...) swings the actual coils side to side within the frame...&lt;/p&gt;&#xA;&lt;p&gt;Considering how much even mundane floppy drives cost during the era when that sort of advance would actually have been useful, the necessary engineering upgrades to enable it would have been absolutely prohibitive. Maybe the sort of thing IBM would have indulged in for the drives attached to their mainframes, but unlikely to be withstood even by minicomputer builders like DEC, let alone microcomputer firms.&lt;/p&gt;&#xA;&lt;p&gt;However, there is one place that variable sector counts on magnetic media are commonly found, and have been for about the last thirty years (though it still didn't become common until well into the CD-ROM and Mac Floppy era): Hard drives. There's a reason that, before the rise of SSDs, there was benefit to defragmenter utilities that moved all your system files and most frequently loaded programs to the &amp;quot;start&amp;quot; of the disk: the lower numbered sectors sit at the outer edge of each platter (the outermost &amp;quot;cylinders&amp;quot; - a set of still-concentric tracks shared between platters, as all the heads move in lockstep with each other), which have more sectors per revolution than the inner cylinders (and &amp;quot;later&amp;quot; sectors)... therefore delivering a considerably higher data rate (the difference between inner and outer track radius being at least as much as on a CD) and reducing both the need for track seeking and the distance to be sought (as it takes fewer tracks to store the same amount of data). Very early drives used a fixed number of sectors per cylinder, and can often be identified by the use of pre-emphasis zones (or alternatively zones of &amp;quot;reduced write current&amp;quot;, which are simply the logical inverse)... that is, a cylinder number denoting where the write signal had to be amplified in order to successfully write the same amount of data to the denser areas towards the inner part of the platters. Before too long, however, the logical sectors and tracks became divorced from the physical ones, as manufacturers took advantage of the varying writeable density of each track to both simplify the electronics (maintaining a steady write current throughout) and greatly increase the total capacity without affecting reliability or having to improve either the mechanical components of the drive or the magnetic material coating the platters. Their existing inherent greater density and speed (partly from multiple platters, wider head sweep and faster motor speed, plus higher grade control electronics, but also rigid discs with higher quality magnetic coatings and non-contact &amp;quot;flying&amp;quot; heads, all of which allowed closer-set tracks each with more sectors than a typical floppy) aided this as the sector count can be varied more finely if the midpoint of a ~2.5x range has 40 sectors vs a ~1.5x range with 10 sectors at the midpoint, and the more sophisticated controllers and tighter controlled rotational speed (synchronous direct-drive motors with near zero friction, vs factory-calibrated but otherwise unregulated, often belt-drive spindles with considerable friction from both the heads and the material of the disk envelope itself) are fertile ground for a wide ranging sector count across dozens of zones of a few tracks each with the minimum necessary slop.&lt;/p&gt;&#xA;&lt;p&gt;And, ultimately, it's that type of tech that ended up being incorporated into the &amp;quot;super floppies&amp;quot; we did eventually get, first in the form of the Bernoulli and Syquest style hard-disc and magneto-optical disc cartridges, and then the rather truer Zip100 and LS120 &amp;quot;floppies&amp;quot;, bridging the gap between regular 1.4MB DSHDs, the still extremely expensive and not at all hot swappable true hard drives, and the yet-to-mature CD-RW technology.&lt;/p&gt;&#xA;&lt;p&gt;Funnily enough, though, a few manufacturers did make continuous-spiral floppy discs... but these were all quite crude, limited capacity affairs used in niche, low cost applications, such as electronically controlled sewing machines, or &amp;quot;smart&amp;quot; word-processor-ish electric typewriters. They were essentially little better than flattened out, somewhat faster audio cassettes, as they were read or written in a single rapid swipe (there was a possibility of holding multiple files, but they would all have to be read into the machine's memory, then re-written with only the active file actually changing, so usually it was more useful to save one file on each disk), and held a few dozen kilobytes at best (again, only really useful for one file or a few small ones), though they were at least quite small (several fitting in the same volume as an audio tape; this meant a non-standard size, however), robust (moreso than a tape), and only took 20~30 seconds to read or write vs the several minutes the same data might take from a tape deck. They were a way to make a floppy drive as simply and cheaply as possible, rather than as high capacity as possible whilst still being reliable, and the head position was geared directly to the hub spindle and motor. One turn of the spindle meant the equivalent of a single head step in a conventional drive (with fewer tracks, lower rpm, and less data per revolution), and random seeking was impossible; returning to the start meant (automatically) &amp;quot;rewinding&amp;quot; the drive, and the hub had to be keyed in the same way as a 3.5 inch drive, but in that case to preserve the head position vs rotation angle relationship instead of being a way to generate a sync pulse off the motor (vs the optically-read sync hole punched into 5.25 media). Crap as it was, that was about the only practical example of true variable data density on floppy disk media (there weren't even any real &amp;quot;sectors&amp;quot;, let alone a whole or fixed number per &amp;quot;track&amp;quot;), and certainly the only attempt at continuous-track recording.&lt;/p&gt;&#xA;" OwnerUserId="10196" LastEditorUserId="15334" LastEditDate="2020-11-13T21:16:33.627" LastActivityDate="2020-11-13T21:16:33.627" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8953" PostTypeId="2" ParentId="8579" CreationDate="2019-01-25T02:37:24.640" Score="0" Body="&lt;p&gt;You quite likely have a cable specific to certain monitors which used a pre-cursor to S-video. One RCA outputs the tone, Luminance and the other the color, Chrominance. Some cables with the same Commodore input may instead output composite video depending on what pins are connected.&lt;/p&gt;&#xA;" OwnerUserId="11710" LastActivityDate="2019-01-25T02:37:24.640" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8954" PostTypeId="2" ParentId="7652" CreationDate="2019-01-25T05:17:22.370" Score="0" Body="&lt;p&gt;Well, most of the examples I was going to give (other than maybe the early models of the NEC PC-98?) have already been covered, so let's swing the other way... talking of &quot;computers the size of fridges&quot;, here's something exotic: back in the mid noughties I was on an abortive (govt. cuts) radiology technician training scheme at a local hospital, specialising in Nuclear Medicine. Despite having newer, fancier, but smaller machines, our main gamma camera rig was still a fine old warhorse made by Toshiba probably twenty years earlier, if not thirty. An already crusty, networked Sun Sparc II workstation off to one side took care of the detailed image analysis, but it was itself connected (by means I never determined) to the camera's native control/acquisition minicomputer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Said minicomputer probably had about all the raw horsepower of a ZX81, but it was literally the size and shape of a commercial chest freezer. As in the type you might find in a discount supermarket, or the dingier kind of student dormitory. The kind of thing that really justified the name of &quot;console&quot;, because it also served as a major piece of furniture, with a bank of control buttons and knobs built in - but also a shelf for the clunky turn-of-the-80s style keyboard, and an eye level platform for its twin (one for text-based control, the other for rudimentary pixel graphics at something like 256x256), minuscule (9&quot; at best) monochrome CRTs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And hidden underneath the shelf, on the side of the beast... a pair of honest to goodness 8-inch floppy drives. I never used them in anger myself, as the actual software booted up off some well-hidden internal Winchester (probably with a 12-inch platter providing a whole ten megs, most of which would be devoted to image acquisition buffering), but I saw the service guy who came around a couple times a year to do a bit of preventative maintenance and perform a deeper level of calibration than we were able to do ourselves pull one out of his hardcase the one time. So that's an 8-inch drive seeing active use, in the mid-late 2000s...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was also a box of blank spares, sitting up on a dusty shelf in one of the adjoining rooms. Can't remember if I purloined one for my own collection of retro junk, but if I did, I've sadly long since lost it. Though I &lt;em&gt;do&lt;/em&gt; remember the box being a 3M one, with a remarkably modern-looking design (essentially the same as their late 90s/early noughties 3.5&quot; and CDR branding), with the at-the-time faintly ludicrous seeming claim of a &quot;2MB&quot; capacity (presumably formatting down to ~1.2MB usable?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I expect the machine itself has also gone for scrap given that the department I worked in was moved to a shiny new facility with all (well, mostly) brand spanking new up-to-date equipment more than five years ago now, and it would have been a devil of a job to relocate the entire rig when 95% of its functionality could be replicated with a smaller, lighter main unit that could be wheeled around by a single person, with a USB-connected laptop looking after the control, acquisition and processing... still, they definitely got their money's worth out of it, and the scrap value alone would probably have been pushing £1000 even if they didn't bother breaking it for parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speaking of 12-inch drives, there is the point to be made that at one time 8-inchers were seen as the compact option - IBM's original floppies were themselves LP-sized, and truly suitable only for room-filling mainframe use, whereas something only slightly larger than a 45rpm single, and a little smaller than a piece of writing paper folded to make a square, is &lt;em&gt;just&lt;/em&gt; small enough to be practical when paired with a minicomputer or even an early, still kinda bulky micro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5.25-inch was considered small enough compared to both to be called &quot;mini floppy&quot;, which is why the harder cased, 3.5-and-below types are &quot;micro floppy&quot;, and both attract the alternative moniker of &quot;diskette&quot; (the origin of &quot;disk&quot;-with-a-K, as &quot;discette&quot; is too ambiguous) to differentiate from full-size &quot;discs&quot;.&lt;/p&gt;&#xA;" OwnerUserId="10196" LastEditorUserId="10196" LastEditDate="2019-01-25T05:25:13.637" LastActivityDate="2019-01-25T05:25:13.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8955" PostTypeId="2" ParentId="6754" CreationDate="2019-01-25T05:44:13.753" Score="0" Body="&lt;p&gt;They did - by mutating into things like the Zip and LS120, which upgraded the actual media and carrier spec to allow better heads, much higher density coatings etc without losing reliability (though there was a side benefit in the LS120 case that it could use its improved heads and coding methods to reformat regular DSHDs to hold something like 10mb... reliability was apparently somewhat patchy, speed didn't improve enough to prevent writing the whole disk being a chore, and I think there were annoying limits such as only being able to write entire tracks rather than individual secors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.88MB was about the limit of what was achievable with traditional floppy disk technology, and even that was slow and unreliable despite demanding a fairly specialist coating formulation. The flimsiness of the media itself (still very floppy despite the hard outer shell) and the way the heads clamped around it in use just didn't make for an environment conducive to particularly high-density recording, or the higher rpms needed to read or write the full capacity in a reasonable length of time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;superfloppies&quot; introduced a degree of hard drive and/or optical drive technology whilst retaining the relatively thin and flexible base media (which kept the cartridges cheap, light, and paradoxically more durable as they would survive drops onto hard floors with less damage, bouncing instead of breaking), but had varying degrees of incompatibility with the previous generation. LS120 paid lip service to the idea but wasn't anywhere near as good a hybrid as it was sold as being. Zip gave up on the backwards compatibility idea entirely and focussed more on pushing itself as a mini-Bernoulli. Both providing a step change in affordable removable media capacity that was a bridge between floppy sizes and typical hard drives of the time (...in the early days of ownership, our family PC could be happily backed up onto just five or six Zips, and for a while I ran a Win3.1 frankenputer with an ATAPI Zip100 as an ersatz HDD).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that tech coming into play in the early-to-mid 90s, which is about the point where 2.88MB-or-greater traditional floppies might otherwise have started to gain traction, suddenly the market was whipped away from under them. 1.44s were retained for proper backwards compatibility and for all the various low-capacity storage and transfer jobs they'd always been perfectly good for, whilst superfloppies, and then CDRWs (and eventually, USB drives, once Win98 SE provided sufficient driver coverage and devices with a practical amount of storage - ie, at least 16MB - became affordable) stepped up to cover our higher capacity needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(It's probably also that they were expensive, and - other than some similarly proprietary and even weirder Japanese models - largely an IBM-exclusive design, which made them rarer, more expensive... and, much like the MicroChannel bus that suffered the same issues of being Big Blue copyrighted and more trouble to successfully reverse engineer than it was worth, ultimately an evolutionary dead end brought about partly by overly protectionist business practices)&lt;/p&gt;&#xA;" OwnerUserId="10196" LastActivityDate="2019-01-25T05:44:13.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8956" PostTypeId="2" ParentId="8946" CreationDate="2019-01-25T06:57:48.910" Score="6" Body="&lt;p&gt;I can't remember where I saw or put it, but sometime in the last couple of months I came across an installation for an early IBM system somewhere online, in scanned PDF form (maybe in the Bitsavers documentation archive?), most likely their first &quot;RAMAC&quot; hard-drive using rig plus all the associated access and computing hardware for using it at the heart of an electronic accounting system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's some pretty heavy engineering. The first parts of it lay out the minimum allowable, and recommended dimensions for the room that the drive, the computer, the operator console, their various power supplies and glue logic racks will be installed into, in plan form, mapping out their positions (a multi-cabinet U-shape with the free-standing operator console nestled within) plus the floor-level cabling runs and the space needed for operators to get around the back of the machines to access service panels etc that would otherwise be sandwiched against the walls. I can't recall the minimum dimensions, but the recommended space wasn't far off the entire floor area of my apartment (which is about the same size as several previous workplaces, encompassing different offices and even medical examination rooms), pegging it around a square 25ft / 7-and-a-bit metres on each side. The access space around the &quot;back&quot; of the cabinets was no more than 4ft even so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's for a relatively minimal system. Bear in mind that the term &quot;mainframe&quot; comes from an old term for the central processor of a computer - each of the system's primary components (CPU, memory, I/O handler, power regulator, etc) would be built into one &lt;em&gt;or more&lt;/em&gt; of those large &quot;frames&quot;, of which the processor (made up of a great many individual, interconnected rackmount cards stuffed full of discrete components or, much like HAL 9000, small-scale integrated circuit packages) was of course the &quot;main&quot; example. The singular encompassing the plural, it came to imply any &lt;em&gt;complete&lt;/em&gt; computer system built along similar lines, regardless of size...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course as well as the plans there were photos and an artist's-impression birds-eye view of the machine in use. The two or three humans in the picture didn't look ever so big compared to the computer, but it was still sort of human-scale, instead of being a monstrous factory-filling item.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, that's not &lt;em&gt;literally&lt;/em&gt; filling the room, but it &lt;em&gt;is&lt;/em&gt; taking up enough of it, in awkward enough positions, that you can't really make practical use of the space that's left unless you install the machine in the corner of a considerably larger room and employed the alternative L-shaped layout instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &quot;minicomputer&quot; setup, by comparison, would have been one small enough to only occupy one or two such frames, or within a wider but lower piece of furniture analogous to a mainframe's operator console, with the processor, memory, offline storage devices, power supplies, and maybe even the user interface (where it wasn't a separate compact terminal or a teletype) all fitting within that limit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, you make reference to mainframes being &quot;like&quot; rackmount servers... actually the comparison is more direct than you might first imagine. The format of 19-inch communications and server (etc) rackmount frames is pretty much exactly the same as that of, particularly, IBM mainframes and/or DEC minicomputers. I can't remember if it's a direct heritage or just convergent evolution, but in either case it's the same environmental limitations that moulded them - to whit, they have to be able to fit through a standard doorway without getting stuck or damage being caused to equipment or building fabric, even if that may mean temporarily taking the door off its hinges. And it also needs to get around tight corners in corridors, stairwells, etc whilst in transit to the target room and being turned to fit through the door. But at the same time you want to have the maximum amount of useful space within each frame to minimise the floor area taken up by it, to maximise the amount of tech you can cram inside each box, and minimise the number of boxes and thus the building and shipping costs. So the format quite rapidly converges on the largest rectangular box that will fit through doorways and can be moved easily through buildings made to a common human scale. I think at one point it was even commonly called IBM Frame Size. But in general it's about 24 inches wide, a shade under 7ft high, and about 30 inches deep...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I've even seen distinctly non-mainframey equipment clearly built to similar guidelines - like the back-projection mobile interactive whiteboards made by Smartboard back before short-throw lenses were good enough to make slimline front-projection models practical. They were quite a bit wider across the beam of course, but measured &lt;em&gt;just&lt;/em&gt; less than a doorway's width front to back - a little less than a mainframe in fact, so you didn't have to take the doors off - were just short enough to fit under the lintel when lowered to their minimum height, and the castors and V-shaped integrated trolley compensated for the width by making it somewhat easier to &quot;lever&quot; around difficult corners and wiggle into rooms from narrow corridors... I expect all-up size was something similar to the largest part of the RAMAC setup, ie the massive, ~36-inch, horizontal-spindle hard disc unit proper, which needed a crane to lift on and off of trucks and planes and sometimes demanded remodelling of buildings to get it installed... like, holes would have to be made in walls and then bricked back up again afterwards, floors preemptively reinforced, etc. With the console being almost as bad, but at least being lower-rise and a sensible weight. Though the Smartboard was way lighter and moveable by one person, whereas even the pure logic parts of a mainframe usually needed a team of two or more...)&lt;/p&gt;&#xA;" OwnerUserId="10196" LastActivityDate="2019-01-25T06:57:48.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8957" PostTypeId="2" ParentId="8946" CreationDate="2019-01-25T09:37:41.153" Score="13" Body="&lt;p&gt;Such rooms were not FULL in the sense of not being able to get any more stuff in them, like a storage locker might be, because you had to be able to get to the various pieces. There was room to walk between the various items, and open panels for servicing, although sometimes not very much. But they were full in the sense that almost all available, useable space was taken up by the machinery. You could not put in any more without blocking access to stuff you needed.&lt;/p&gt;&#xA;" OwnerUserId="11714" LastActivityDate="2019-01-25T09:37:41.153" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8958" PostTypeId="2" ParentId="8810" CreationDate="2019-01-25T12:24:13.427" Score="11" Body="&lt;p&gt;It can be done using a third-party &quot;disk manager&quot;, such as OnTrack Disk Manager and EZ-Drive. At the end of the DOS era, these came bundled with many hard disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Logical_block_addressing#Enhanced_BIOS&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Logical_block_addressing#Enhanced_BIOS&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some downloads. Kroll OnTrack have allowed this to be shared freely!&#xA;&lt;a href=&quot;https://www.philscomputerlab.com/ontrack-disk-manager.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.philscomputerlab.com/ontrack-disk-manager.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Info: &lt;a href=&quot;https://en.wikipedia.org/wiki/Disk_Manager&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Disk_Manager&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative is to use IBM PC DOS 7.1 instead. This is the last ever member of the MS-DOS family. It includes native built-in FAT32 and LBA drive support. IBM made it available as a free download -- I describe this here: &lt;a href=&quot;https://liam-on-linux.livejournal.com/59703.html&quot; rel=&quot;noreferrer&quot;&gt;https://liam-on-linux.livejournal.com/59703.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to supply the rest of PC DOS 7.01 (also known as PC DOS 2000) to make a complete OS, but that is widely available; for example it came free with Microsoft VirtualPC, which itself is a free download now.&lt;/p&gt;&#xA;" OwnerUserId="209" LastActivityDate="2019-01-25T12:24:13.427" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8959" PostTypeId="2" ParentId="8835" CreationDate="2019-01-25T12:28:07.620" Score="3" Body="&lt;p&gt;There is SpecBas, which is a hybrid between an emulator and an enhanced version of Sinclair Spectrum BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://sites.google.com/site/pauldunn/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sites.google.com/site/pauldunn/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It does require a host OS to run, though, so it does not entirely fit your bill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Acorn's original RISC OS for the Archimedes is still alive, maintained, and runs on a variety of modern ARM hardware such as the Raspberry Pi and BeagleBoard range. It includes a lightning-fast BBC BASIC V interpreter as its primary programming language, although it is not &lt;em&gt;written&lt;/em&gt; in BBC BASIC itself. (Although parts of it, and the ARM processor, were prototyped in BBC BASIC!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.riscosopen.org/content/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.riscosopen.org/content/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It only runs on ARM hardware, though. To run it on an x86 machine, you need an emulator, such as RPCEmu (FOSS) &lt;a href=&quot;http://www.marutan.net/rpcemu/index.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.marutan.net/rpcemu/index.php&lt;/a&gt; or Virtual Acorn (commercial) &lt;a href=&quot;http://www.virtualacorn.co.uk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.virtualacorn.co.uk/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you cast your net slightly wider, for instance to the Pascal family, then there is Native Oberon, which is a native PC operating system written entirely in the Oberon programming language. Not a trace of C or anything else. It's tiny, fast, efficient and designed to be easy to learn, understand and modify. &lt;a href=&quot;http://ignorethecode.net/blog/2009/04/22/oberon/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ignorethecode.net/blog/2009/04/22/oberon/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;** UPDATE **&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've found out about 2 new contenders that I did not know about when I posted my previous answer back in January.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BASIC Engine fits your a bill: a very inexpensive, DIY 32-bit computer with a rich, powerful BASIC:&#xA;&lt;a href=&quot;https://basicengine.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://basicengine.org/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the MaxiMite:&#xA;&lt;a href=&quot;http://geoffg.net/Maximite_Story.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://geoffg.net/Maximite_Story.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="209" LastEditorUserId="209" LastEditDate="2019-10-24T16:21:31.710" LastActivityDate="2019-10-24T16:21:31.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8960" PostTypeId="2" ParentId="6754" CreationDate="2019-01-25T12:36:40.890" Score="0" Body="&lt;p&gt;I think it was inertia, and also a shame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.8MB floppy drives were a thing and were out there, from multiple vendors. The later IBM PS/2 machines used them, and so did some Unix workstations, but the 2.8MB format -- quad or extended density -- never really took off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Partly, it's because for many people, &lt;em&gt;the&lt;/em&gt; major purpose was for software distribution. CD-ROMs became cheap enough and far more efficient for this, and for many people, non-writable, read-only media were enough: cf. the original Apple iMac.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It did seem to me that if the floppy companies &amp;amp; PC makers had actually adopted them wholesale, the floppy disk as a medium might have survived for considerably longer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2.8MB drives never really took off widely, so the media remained expensive, ISTM -- and thus little software was distributed on the format, because few machines could read it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By 1990 there was an obscure and short-lived 20MB floptical diskette format:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cbronline.com/news/insites_20mb_floptical_drive_reads_144mb_disks&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cbronline.com/news/insites_20mb_floptical_drive_reads_144mb_disks&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then in 1994 came 100MB Zip disks, which for a while were a significant format -- I had Macs with built-in-as-standard Zip drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the 3½&quot; super floptical drives, the Imation SuperDisk in 1997, 144MB Caleb UHD144 in early 1998 and then 150MB Sony HiFD in late 1998.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(None of these later drives could read 2.8MB diskettes, AFAIK.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, writable CDs got cheap enough to catch on, and USB Flash media mostly has killed them off now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the 2.8 had taken off, and maybe even intermediate ~6MB and ~12MB formats -- was that feasible? -- before the 20MB ones, well, with widespread adoption, there wouldn't have been an opening for the Zip drive, and the floppy drive might have remained a significant and important medium for another decade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't realise that the Zip drive eventually got a 750MB version, presumably competing with Iomega's own 1GB Jaz drive. If floppy drives had got into that territory, could they have even fended off CDs? Rewritable CDs always were a pain. They were a one-shot medium and thus inconvenient and expensive -- write on one machine, use a few times at best, then throw away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I liked floppies. I enjoy playing with my ancient Sinclair computers, but loading from tape cassette is just a step too far. I remember the speed and convenience when I got my first Spectrum disk drive, and I miss it. Instant loading from an SD drive just isn't the same. I don't use them on PCs any more -- I don't have a machine with a floppy drive in this country -- but for 8-bits, two drives with a meg or so of storage was plenty. I used them long after most people, if only for updating BIOSes and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Sourc: my own blog post — &lt;a href=&quot;https://liam-on-linux.livejournal.com/49563.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://liam-on-linux.livejournal.com/49563.html&lt;/a&gt; )&lt;/p&gt;&#xA;" OwnerUserId="209" LastActivityDate="2019-01-25T12:36:40.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8961" PostTypeId="2" ParentId="8946" CreationDate="2019-01-25T14:44:21.763" Score="21" Body="&lt;p&gt;The excellent history book &quot;AN/FSQ-7: the computer that shaped the Cold War&quot; describes the size of a 1950's era radar monitoring air defence computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A single installation (a single computer) was built in a specially designed four-storey &quot;blockhouse&quot; - 74 feet high and providing 90,000 square feet of floorspace.  A separate building housed the generators and cooling towers.  The &quot;computer&quot; itself took 2 whole floors. One floor housed telephone equipment and the top floor was all the operator consoles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some stats: 10 technicians just to look after the computer. More than 100 display consoles. Three-shift staffing meant it needed around 627 people.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To quote from the book:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A typical installation required about 1 megawatt of electrical power to run the central computer with its about 55,000 vacuum tubes, 175,000 diodes and eventually even 13,000 transistors (all of which were spread over more than 7,000 pluggable units), weighing in excess of 275 tons, and occupying about 21,000 square feet of floor space.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Edit: if you want to be really picky, each AN/FSQ-7 installation was actually  &lt;em&gt;two&lt;/em&gt; individual computers, duplexed for fault-tolerance. But it was still a monster.&lt;/p&gt;&#xA;" OwnerUserId="11722" LastEditorUserId="11722" LastEditDate="2019-01-25T14:50:55.363" LastActivityDate="2019-01-25T14:50:55.363" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8962" PostTypeId="2" ParentId="8946" CreationDate="2019-01-25T16:23:13.370" Score="9" Body="&lt;p&gt;A mainframe in the 1970's was not too different from today's desktop computers, except for physical size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They had a CPU, which was about the size of a refrigerator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They had disk drives, each of which were about the size of washing machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They had I/O devices, which often ran the size of a desk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They had cooling, which was the size of a whole-house AC unit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They had wiring to connect everything up.  Just like the tangle under your desk except using higher voltage driving higher current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike your PC, they also had multiple tape drives each again the size of a refrigerator, and those tapes needed to be stored on racks somewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you scale today's CPU/memory/mobo to something the size of a refrigerator, you're looking at maybe 1000x.  So, following that, visualize the space take up by 1000 PC cases, then double it to account for the tape drives, thicker wires (for higher currents and voltages) and extra AC airflow.  Then double it again because people had to have access to all these components all the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't you think that would fill a very large room?  Even if you're using a laptop as your basic measure, it's going to be bigger than a typical office cubicle.&lt;/p&gt;&#xA;" OwnerUserId="7510" LastActivityDate="2019-01-25T16:23:13.370" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8963" PostTypeId="2" ParentId="855" CreationDate="2019-01-25T17:35:21.820" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Are PowerPC processors still used in desktop/home computers, or has Intel processors taken over? If I wanted to get a PowerPC computer, is there a place I can still get them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They have pretty much disappeared from personal computers. Due to the low production volume they can't compete with x86 or ARM CPUs. As a result nowadays they generally only exist in places where price is not an important factor like servers or workstations&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.phoronix.com/scan.php?page=article&amp;amp;item=talos-workstation&amp;amp;num=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;For $3100 USD You Can Have A Fast, Fully-Free-Software Workstation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Raptor-Talos-2-Teaser&quot; rel=&quot;nofollow noreferrer&quot;&gt;Raptor Is Going To Launch A New POWER9 Linux System&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://phoronix.com/scan.php?page=news_item&amp;amp;px=Talos-Crowdsupply&quot; rel=&quot;nofollow noreferrer&quot;&gt;POWER8 Workstation Launches On Crowdfunding: $4k For Motherboard, $18k For System&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you're an enthusiast you can also buy development boards or separate CPUs/MCUs easily, although not as cheap as ARM boards&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.nxp.com/products/processors-and-microcontrollers/power-architecture-processors:POWER-ARCHITECTURE&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.nxp.com/products/processors-and-microcontrollers/power-architecture-processors:POWER-ARCHITECTURE&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.embeddedplanet.com/products_list/freescale-powerquicc-ii-mpc8245-powerpc-single-board-computer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.embeddedplanet.com/products_list/freescale-powerquicc-ii-mpc8245-powerpc-single-board-computer/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That said you might be able to buy a PowerPC laptop in the future since the Power Progress Community is building a &lt;a href=&quot;https://www.powerpc-notebook.org/en/&quot; rel=&quot;nofollow noreferrer&quot;&gt;GNU/Linux PowerPC notebook&lt;/a&gt;. If you want you can also contribute to their project&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Disclaimer: I'm not affiliated with any of the above companies/groups&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="1981" LastActivityDate="2019-01-25T17:35:21.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8964" PostTypeId="2" ParentId="3228" CreationDate="2019-01-25T17:37:07.627" Score="2" Body="&lt;p&gt;Here is the listing of a PC-BASIC program from that time that plays various folk, popular, and classical tunes. It may not be the one you're looking for, because it doesn't have a user interface. I remember I used to add a &lt;code&gt;GOTO&lt;/code&gt; command as line 1 to start playing a specific tune.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 REM CLEMENTINE P.39&#xA;20 A1$=&quot;T120MSF8.F16F4C4A8.A16A4F4F8A8O5C4.C8O4B-8A8G2G8A8&quot;&#xA;30 A2$=&quot;B-4B-4A8G8A4F4F8A8G4.C8E8G8F2F8.F16&quot;&#xA;40 A3$=&quot;F4C4A8.A16A4F4F8A8O5C4.C8O4B-8A8G2G8A8&quot;&#xA;50 A4$=&quot;B-4B-4A8G8A4F4F8A8G4.C8E8G8F2&quot;&#xA;60 PLAY A1$+A2$+A3$+A4$&#xA;70 REM OH! SUSANNA P.37&#xA;80 A1$=&quot;T220MLC8E8MSG4G4G4.A8G4E4C4.D8E4E4D4C4D2.MLC8E8MS&quot;&#xA;90 A2$=&quot;G4G4G4.A8G4E4MLC4.E8MSE4E4D4D4C2.MLC8E8MS&quot;&#xA;100 A3$=&quot;G4G4G4.A8G4E4C4.E8E4E4D4C4D2.MLC8E8MS&quot;&#xA;110 A4$=&quot;G4G4G4.A8G4E4C4.E8E4E4D4D4C1&quot;&#xA;120 A5$=&quot;F2F2A4A2A4G4G4E4C4D2MLC8E8MS&quot;&#xA;130 A6$=&quot;G4G4G4.A8G4E4C4.E8E4E4D4D4C2.&quot;&#xA;140 PLAY A1$+A2$+A3$+A4$+A5$+A6$&#xA;150 REM cockles and mussels&#xA;160 A1$=&quot;T110FFAF8F8GGGGB-.G8&quot;&#xA;170 A2$=&quot;AGFO5CO4B-AAG.F8G2C8C8&quot;&#xA;180 A3$=&quot;FFFFA.F8GGGGB-.G8&quot;&#xA;190 A4$=&quot;AO5C.O4B-8AO5C.O4B-8AFGF2C&quot;&#xA;200 A5$=&quot;FFFMLFA.MSF8GGGMLGB-.MSG8&quot;&#xA;210 A6$=&quot;AO5C.O4B-8AO5C.O4B-8AFGF2&quot;&#xA;220 PLAY A1$+A2$+A3$+A4$+A5$+A6$&#xA;230 A1$=&quot;AA8A8AA8A8ADFAGG8G8GG8G8&quot;&#xA;240 A2$=&quot;GCEGAA8A8AA8A8ABO5CDCO4AGES2SP4&quot;&#xA;250 A2$=&quot;GCEGAA8A8AA8A8ABO5CDCO4AGED2DP4&quot;&#xA;260 A3$=&quot;A2A.A8ADFAG2G.G8GCEG&quot;&#xA;270 A4$=&quot;A2A.A8ABO5CDCO4AGED2DP4&quot;&#xA;280 PLAY A1$+A2$+A3$+A4$&#xA;290 REM KUMBAYA P.55&#xA;300 A1$=&quot;T70C8E8G8.G16GA8A8G2C8E8G8.G16GF8E8D2C8E8&quot;&#xA;310 A2$=&quot;G8.G16GA8A8G2FMLE16.D16.C16.C8.MSD8D8C2&quot;&#xA;320 PLAY A1$+A2$&#xA;330 REM BLOWING IN THE WIND P.29&#xA;340 A1$=&quot;T150G2GGA2GFG2MLEDMSC2.E&quot;&#xA;350 A2$=&quot;G2GGA2GFMLG1G2MSEF&quot;&#xA;360 A3$=&quot;MLG2GMSEF2FEMLD1D2MSEF&quot;&#xA;370 A4$=&quot;G2GGA2GFG8G.MLEDMSC2.E&quot;&#xA;380 A5$=&quot;G2GGA2GFMLG1G2.MSE&quot;&#xA;390 A6$=&quot;F2FED2.DE8E.EDC2.E&quot;&#xA;400 A7$=&quot;F2FEDDCO3BO4MLC1C2.MS&quot;&#xA;410 PLAY A1$+A2$+A1$+A3$+A4$+A5$+A6$+A7$+A8$&#xA;420 REM LA BOHEME&#xA;430 A1$=&quot;F8B-8O4BD8F.F.E-8E-8E-8E-O4B-8O5D.DD8C.C8CO4G8B-.B-.B-.&quot;&#xA;440 A2$=&quot;O5D8P8P8D8F2E-.E-8O4B-B-8B-8O5C8D8E-8C8DDO4B-8O5C8D8O4B-8O5C2CP4&quot;&#xA;500 PLAY A1$+A2$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can listen to its output &lt;a href=&quot;https://archive.org/details/MUSIC.BAS&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10322" LastActivityDate="2019-01-25T17:37:07.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8965" PostTypeId="2" ParentId="8794" CreationDate="2019-01-25T20:41:47.053" Score="0" Body="&lt;p&gt;I'm going to answer the question from a practical user perspective, having been an active microcomputer user through this transition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5.25&quot; floppies have a few disadvantages:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Limited capacity.  Yes, higher-density versions of these disks could store up to a megabyte or more, but were expensive and rare.  3.5&quot; floppies stored 320-400K on SSDD media all the way up to 1.44 MB on DSHD media (and 2.88 MB on the never-very-popular ultra-high density version which I never used).&lt;/li&gt;&#xA;&lt;li&gt;Fragility.  5.25&quot; floppies were easy to damage because they were flexible.  3.5&quot; floppies had a hard shell so you could throw a disk into a pocket or even mail a disk in an envelope without any great danger.&lt;/li&gt;&#xA;&lt;li&gt;Jackets.  Those diskette jackets are a nuisance.  You can lose them and misplace them, and have to do something with them while your disk is in the drive.  3.5&quot; disks have a built-in retractable metal shutter that provides superior protection plus the advantage of being able to be forgotten about.&lt;/li&gt;&#xA;&lt;li&gt;Write-protection notches.  5.25&quot; floppies have a notch that has to be covered by an adhesive strip to protect the media from being written to.  3.5&quot; floppies have a plastic switch that can be toggled by the user very easily (no running out of strips) and can be untoggled just as easily (the strip could be removed from a 5.25&quot; disk, but rarely was adhesive enough to be reused afterward).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I think the other reason 3.5&quot; disks took off so much is their size.  Computers like the Macintosh, Atari ST series and Amiga 1000 and 500 had built-in floppy drives and yet were fairly small machines.  A 3.5&quot; floppy drive stored more and took less physical space.  This was less important on desktop PCs, but even there was a help as cases could get smaller or the space used for other devices.&lt;/p&gt;&#xA;" OwnerUserId="6986" LastActivityDate="2019-01-25T20:41:47.053" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8967" PostTypeId="2" ParentId="8946" CreationDate="2019-01-26T02:19:15.997" Score="17" Body="&lt;p&gt;Here's the computer room of the Shuttle Mission Simulator (SMS), building 5 of NASA's Johnson Space Center, in the early 1980s.  Most of the boxes are parts of a Sperry-Univac 1100 mainframe, but some are &quot;intelligent controller&quot; satellite computers, Perkin-Elmer 8/32s.  There are also some Singer-Link Flight Simulation proprietary visual system cabinets and a unique interface device for the IBM flight computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were two simulators in the building, so there are two of everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was privileged to be a simulation software engineer on this beast from the early 80s to the late 90s.  The Univac mainframes lasted until, I think, the early 2000s, when they were replaced with Silicon Graphics machines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TDRmL.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TDRmL.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11732" LastActivityDate="2019-01-26T02:19:15.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8969" PostTypeId="2" ParentId="8896" CreationDate="2019-01-26T06:53:13.000" Score="2" Body="&lt;p&gt;It depends. There were several different things done over the ages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some system had automatic baud rate detection. Here the port adjusted itself to the baud rate of the terminal. After hitting some keys several times (such as Carriage Return), the port detected the sequence and adjusted itself until it cleanly got the right key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On my systems back in college, there was a key on the terminal call LOCAL. When you approached the terminal, you had to toggle this key (it would lock in the up or down position) which would alert the terminal controller hardware about to disconnect and reconnect. At that point you'd hit CR and you'd get a login prompt. When you logged out of your session, you'd have to toggle LOCAL again. If you toggled LOCAL without logging out, it just killed your session anyway and you logged back in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With Unix box, there's a program that was historically called 'getty'. In a generic Unix system, a serial port is tied to a /dev/ttyXX device. You'd have the start up routines (inittab back in the day) start a getty process that would listen to activity on the serial port. Plug in a terminal, and get a login prompt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were using a modem, a couple of things could happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One, you could set the modem to auto-answer. Then it's like any other serial device. When it answers, you're connected to the computer (even getty) and on your merry way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could have a different process that's listening to the modem. When the modem rings, it sends the text RING to the computer. The computer listens for this, and then send the appropriate answer command to the modem to pick up the line, and, again, away you go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you have the modem connected to the computer at a fix baud rate. You can have the modem set to auto answer (or not), but either way, when the modem does pick up, it will negotiate the baud rate with the other modem. This is how you can call a 9600 baud modem with a 300/1200/2400/9600 baud modem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the modem is done negotiating, it will send something like &quot;CONNECT 2400&quot;, telling the computer that it's making (in this case) a 2400 baud connection. At this point, the computer needs to reset its baud rate from the original 9600, down to 2400 so it can continue to communicate with the modem. At the end of the session, the modem and the line resets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the serial port is asynchronous, you can just start spewing data out whether you're connected or not, at any baud rate, etc. In the end, outside of handshaking, it's basic coincidence that both sides of the system are chatting at the proper baud rate. In fact, it's possible to send out at one baud rate, and receive at another. They're unrelated. &lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2019-01-26T06:53:13.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8970" PostTypeId="2" ParentId="8946" CreationDate="2019-01-26T07:46:31.080" Score="21" Body="&lt;p&gt;Here's a picture of the &quot;Strela&quot; (arrow) computer (1954)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/oPf4m.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oPf4m.jpg&quot; alt=&quot;Strela main&quot;&gt;&lt;/a&gt;&#xA;Vacuum tubes, 2000 op/sec (on 43-bit fixed point), 150kWt, 300 m³&lt;/p&gt;&#xA;" OwnerUserId="11231" LastEditorUserId="7946" LastEditDate="2019-01-28T17:55:10.327" LastActivityDate="2019-01-28T17:55:10.327" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8971" PostTypeId="1" AcceptedAnswerId="8972" CreationDate="2019-01-26T10:01:34.420" Score="41" ViewCount="2825" Body="&lt;p&gt;I've been trying to find more information about non-Intel versions of Windows NT  regarding x86 emulation but found very little about it. There is one sentence about it in the Wikipedia page but the reference link is gone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there any sort of x86 emulation on MIPS, PowerPC or Alpha versions of Windows NT?&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="4025" LastEditDate="2019-01-26T16:03:32.963" LastActivityDate="2021-05-10T16:43:14.667" Title="Did Windows NT 4 emulate x86 on non-Intel platforms?" Tags="&lt;emulation&gt;&lt;windows&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8972" PostTypeId="2" ParentId="8971" CreationDate="2019-01-26T10:29:12.740" Score="50" Body="&lt;p&gt;There was x86 emulation on Windows NT, on MIPS, Alpha, and PowerPC — in fact, more than x86 emulation, PC emulation.&lt;/p&gt;&#xA;&lt;p&gt;The Alpha release of Windows NT was quite famous at the time for using a binary translator rather than a “plain” emulator, &lt;a href=&quot;https://en.wikipedia.org/wiki/FX!32&quot; rel=&quot;noreferrer&quot;&gt;FX!32&lt;/a&gt;; it would run x86 programs, keeping track of which parts of the binaries were actually used, and then translate them to Alpha instructions and store them in DLLs which were used the next time the programs were run. FX!32 was described in a fair amount of detail in various publications at the time, see &lt;a href=&quot;http://www.usenix.org/publications/library/proceedings/usenix-nt97/full_papers/chernoff/chernoff.pdf&quot; rel=&quot;noreferrer&quot;&gt;this USENIX paper&lt;/a&gt; and &lt;a href=&quot;http://www.hpl.hp.com/hpjournal/dtj/vol9num1/vol9num1art1.pdf&quot; rel=&quot;noreferrer&quot;&gt;this Digital Technical Journal article&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;On MIPS and PowerPC (and Alpha for DOS x86 programs), &lt;code&gt;NTVDM.EXE&lt;/code&gt; could emulate a PC as well, using a version of &lt;a href=&quot;https://en.wikipedia.org/wiki/SoftPC&quot; rel=&quot;noreferrer&quot;&gt;Insignia’s SoftPC&lt;/a&gt; (which was common on workstations at the time). &lt;a href=&quot;https://virtuallyfun.com/wordpress/2009/08/08/softpc-%E2%80%93at-version-3/&quot; rel=&quot;noreferrer&quot;&gt;This post on Virtually Fun&lt;/a&gt; looks at the MIPS version specifically.&lt;/p&gt;&#xA;&lt;p&gt;The scope of these tools is different: FX!32 translates Win32-on-x86 to Win32-on-Alpha, whereas SoftPC emulates a complete 486-level PC. (Even though Alpha was always 64-bit, &lt;a href=&quot;https://docs.microsoft.com/en-us/previous-versions/technet-magazine/cc718978(v=msdn.10)&quot; rel=&quot;noreferrer&quot;&gt;publicly-available versions of Windows NT were 32-bit only&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-05-10T16:43:14.667" LastActivityDate="2021-05-10T16:43:14.667" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="8973" PostTypeId="2" ParentId="2562" CreationDate="2019-01-26T20:05:33.250" Score="12" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Star&quot; rel=&quot;noreferrer&quot;&gt;Xerox Star 8010&lt;/a&gt; (1981) featured Arabic typography in its &lt;a href=&quot;http://www.digibarn.com/collections/screenshots/xerox-star-8010/&quot; rel=&quot;noreferrer&quot;&gt;promotional photographs&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MeWTD.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MeWTD.jpg&quot; alt=&quot;Xerox Star 8010 showing Arabic typography&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11741" LastEditorUserId="439" LastEditDate="2019-01-27T19:25:49.853" LastActivityDate="2019-01-27T19:25:49.853" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8975" PostTypeId="1" AcceptedAnswerId="8977" CreationDate="2019-01-27T12:46:55.093" Score="21" ViewCount="1847" Body="&lt;p&gt;I am mildly curious that though the 6502 provides BCD arithmetic which would be useful for implementing decimal floating point, Commodore BASIC uses, like all (?) Micro-Soft BASIC, binary floating point instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Are there any easy example that show precision errors in Commodore BASIC, that would not be present if it would be based on decimal FP?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A classic test of the difference is &lt;code&gt;0.1 + 0.2 = 0.3&lt;/code&gt;; this evaluates to false in pretty much every modern language (since almost all of them use the IEEE floating point that is built into modern hardware). There is even a website devoted to this oddity: &lt;a href=&quot;https://0.30000000000000004.com/&quot; rel=&quot;noreferrer&quot;&gt;0.30000000000000004.com&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried this on a C64 emulator (which uses the same BASIC as the PET) and to my astonishment, it correctly evaluated to true. So did some other obvious tests like &lt;code&gt;0.1 * 10 = 1&lt;/code&gt; and &lt;code&gt;0.1 + 0.9 = 1&lt;/code&gt; but they worked as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What test would give a wrong answer on Commodore BASIC?&lt;/strong&gt; That is, I'm not asking for a way to get it to demonstrate rounding errors per se; that much is trivial. I'm asking for a way to get it to give a wrong answer, not because it lacks infinite precision, but specifically for(simple) cases where decimal arithmetic would give the right answer. Some Commodore BASIC (MS-BASIC) equivalent to the &lt;code&gt;0.1 + 0.2 = 0.3&lt;/code&gt; test on IEEE 754.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2019-01-27T15:45:46.740" LastActivityDate="2020-12-17T15:45:21.877" Title="Commodore BASIC and binary floating point precision" Tags="&lt;basic&gt;&lt;commodore&gt;&lt;floating-point&gt;" AnswerCount="6" CommentCount="21" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8976" PostTypeId="2" ParentId="8975" CreationDate="2019-01-27T13:31:31.703" Score="5" Body="&lt;p&gt;Might I suggest you try 0.11+0.12?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe IEEE754 will in fact give the right answer on 0.1+0.2=0.3, using standard single precision. It is, however, not difficult to provoke IEEE754 failures, for instance on 0.11+0.12. The C program below show the raw bin32 representations of the relevant IEEE754 numbers, the program output is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;a  :3dcccccd&#xA;b  :3e4ccccd&#xA;a+b:3e99999a&#xA;c  :3e99999a&#xA;IEEE754 copes&#xA;a  :3de147ae&#xA;b  :3df5c28f&#xA;a+b:3e6b851e&#xA;c  :3e6b851f&#xA;IEEE754 fails&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &amp;lt;stdint.h&amp;gt;&#xA;int main( void ) {&#xA;    float a = 0.1;&#xA;    float b = 0.2;&#xA;    float c = 0.3;&#xA;    float apb = a+b;&#xA;    printf( &quot;a  :%x\n&quot;, *(uint32_t *)&amp;amp;a);&#xA;    printf( &quot;b  :%x\n&quot;, *(uint32_t *)&amp;amp;b);&#xA;    printf( &quot;a+b:%x\n&quot;, *(uint32_t *)&amp;amp;apb);&#xA;    printf( &quot;c  :%x\n&quot;, *(uint32_t *)&amp;amp;c);&#xA;    if ( a + b == c ) {&#xA;            printf( &quot;IEEE754 copes\n&quot; );&#xA;    } else {&#xA;            printf( &quot;IEEE754 fails\n&quot; );&#xA;    }&#xA;&#xA;    a = 0.11;&#xA;    b = 0.12;&#xA;    c = 0.23;&#xA;    apb = a+b;&#xA;    printf( &quot;a  :%x\n&quot;, *(uint32_t *)&amp;amp;a);&#xA;    printf( &quot;b  :%x\n&quot;, *(uint32_t *)&amp;amp;b);&#xA;    printf( &quot;a+b:%x\n&quot;, *(uint32_t *)&amp;amp;apb);&#xA;    printf( &quot;c  :%x\n&quot;, *(uint32_t *)&amp;amp;c);&#xA;    if ( a + b == c ) {&#xA;            printf( &quot;IEEE754 copes\n&quot; );&#xA;    } else {&#xA;            printf( &quot;IEEE754 fails\n&quot; );&#xA;    }&#xA;&#xA;    return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10821" LastActivityDate="2019-01-27T13:31:31.703" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8977" PostTypeId="2" ParentId="8975" CreationDate="2019-01-27T14:18:23.883" Score="18" Body="&lt;p&gt;This example reveals a rounding error under Commodore BASIC V2.0:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  A=0.3:B=0.6:IF A+B&amp;lt;&amp;gt;0.9 THEN PRINT A+B-0.9&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Running this on a C64 yields a difference of &lt;code&gt;2.32830644e-10&lt;/code&gt;. Other pairs that fail are &lt;code&gt;0.4+0.5&lt;/code&gt;, &lt;code&gt;0.6+0.1&lt;/code&gt; and &lt;code&gt;0.8+0.1&lt;/code&gt;. Please note that also the order in which the numbers are summed up affects the result. &lt;code&gt;0.6+0.1-0.7&lt;/code&gt; yields a difference, while &lt;code&gt;0.1+0.6-0.7&lt;/code&gt; results to &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2019-09-27T15:30:15.427" LastActivityDate="2019-09-27T15:30:15.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8978" PostTypeId="1" AcceptedAnswerId="8979" CreationDate="2019-01-27T15:31:17.490" Score="9" ViewCount="690" Body="&lt;p&gt;It is widely known that, while the Commodore 64 did indeed provide 64K of RAM for machine code programs, only 38K was usable from BASIC; this was because bank switching was needed to get at the rest, but if a BASIC program switched out the interpreter ROM, or anything providing essential support thereto, it would of course promptly crash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the Commodore Plus/4 apparently provided 60K to BASIC programs. By the above reasoning, this should be impossible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did it work?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="3290" LastEditDate="2020-08-01T13:46:10.940" LastActivityDate="2020-08-01T13:46:10.940" Title="Commodore Plus/4 60671 bytes free - how?" Tags="&lt;basic&gt;&lt;commodore&gt;&lt;memory-layout&gt;&lt;ram&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8979" PostTypeId="2" ParentId="8978" CreationDate="2019-01-27T16:05:12.350" Score="11" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;[...] Commodore 64 did indeed provide 64K of RAM [...] only 38K was usable from BASIC; [...] bank switching was needed to get at the rest,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And that's exactly the way the TED computers did use.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but if a BASIC program switched out the [...] ROM, [...] it would of course promptly crash.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, BASIC 3.5 was aware of that and did provide functions for various RAM und ROM access (*1).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But the Commodore Plus/4 apparently provided 60K to BASIC programs. By the above reasoning, this should be impossible.&lt;/p&gt;&#xA;&lt;p&gt;How did it work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, what about because it did exactly do so and switched out the ROMs?&lt;/p&gt;&#xA;&lt;p&gt;It's a feature of BASIC 3.5 and all TED computers using it (C16, 116, Plus/4). For read access (*2) to all RAM (*3) the ROMs need to be switched out, and back again afterwards. To do so an access stub was established in RAM (see below), itself unaffected by the switch. When called it switched out the ROM, accessed RAM, switched the ROMs in again and returned.&lt;/p&gt;&#xA;&lt;p&gt;After all, that same scheme was intended for the C64 as well, but by Tramiel's decision it was produced the way the prototypes where hacked together, not waiting for BASIC 3.5 to finish.&lt;/p&gt;&#xA;&lt;p&gt;Another advantage of the TED line was to have the I/O area moved to the top 4 KiB at $FC00, thus resulting in a continous RAM Block of 60 KiB when ROM was switched off (*4).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Detailed workings of the access stubs:&lt;/p&gt;&#xA;&lt;p&gt;BASIC 3.5 was build in a very versatil and comfortable fashion. To do so the whole first two KiB, not just page zero, was used for variables and pointers (*5). Among others, page 4 contained separate stubs for all BASIC related pointers to fetch from. For example a stub called INDTXT at $04A5 to fetch BASIC program text.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;INDTXT:&#xA;    SEI               * no interrupt&#xA;    STA   RAM_ON      * disable ROM ($FF3F)&#xA;    LDA   (TXTPTR),Y  * fetch byte  (&amp;lt;patch&amp;gt;)&#xA;    STA   ROM_ON      * enable ROM  ($FF3E)&#xA;    CLI               * free IRQ&#xA;    RTS               * return the byte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;All the stubs are copied from the same ROM code and patched at &amp;lt;patch&amp;gt; with the address of the corresponding pointer.&lt;/p&gt;&#xA;&lt;p&gt;Similar the &lt;a href=&quot;https://www.c64-wiki.de/wiki/CHRGET&quot; rel=&quot;nofollow noreferrer&quot;&gt;CHRGET&lt;/a&gt;/CHRGOT combo, central for Commodore BASIC and others get moved there - all including the ROM on/off switching.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In addition to the Kernal banking services like the &lt;em&gt;'Long Fetch'&lt;/em&gt; routine located at $FC7F (via Kernal entry point $FCF7) to access any of the 4 32 KiB ROM Banks.&lt;/p&gt;&#xA;&lt;p&gt;*2 - No need to go thru such a stub for writing, as writes always end up in RAM.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Strictly this would apply only to addresses above $8000. No switching needed below that, as there is always RAM. Thus a simple (BIT) test for negative of the high byte (even free when loading(moving that pointer) can detect the need for using the stub. Something that always fails on a 16 KiB C16. Except, it hasn't been done as the savings are rather marginal - 8 clocks per fetch. There may be other areas to improve instead.&lt;/p&gt;&#xA;&lt;p&gt;*4 - The C64 had a it/s 4 KiB I/O area at $D000, somewhat in the middle, cutting off the to 8 KiB, even if ROMs were disabled.&lt;/p&gt;&#xA;&lt;p&gt;*5 - The November 1984 issue of the US magazine &lt;em&gt;Commodore Computers&lt;/em&gt; contains &lt;a href=&quot;https://archive.org/details/Commodore_MicroComputer_Issue_32_1984_Nov_Dec/page/n31&quot; rel=&quot;nofollow noreferrer&quot;&gt;a rather expressive address list&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-01T09:30:59.763" LastActivityDate="2020-08-01T09:30:59.763" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8980" PostTypeId="2" ParentId="8975" CreationDate="2019-01-27T16:58:05.487" Score="10" Body="&lt;p&gt;Here is my favourite example for this problem. I often use it to show Excel's mathematical shortcomings, but not surprisingly it works the same in the C64:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 A = 0.1&#xA;20 B = 0.1&#xA;30 FOR I = 1 TO 10&#xA;40 D = B&#xA;50 B = 20 * A - 19 * B&#xA;60 PRINT B&#xA;70 A = D&#xA;80 NEXT I&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In every iteration, the algorithm should be doing 20 * 0.1 - 19 * 0.1 = 0.1, but the output on &lt;a href=&quot;https://virtualconsoles.com/online-emulators/c64/&quot; rel=&quot;noreferrer&quot;&gt;this simulator&lt;/a&gt; is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; .0999999999&#xA; .100000002&#xA; .0999999578&#xA; .100000845&#xA; .0999831052&#xA; .100337895&#xA; .0932421037&#xA; .235157925&#xA;-2.60315849&#xA; 54.1631699&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="445" LastActivityDate="2019-01-27T16:58:05.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8981" PostTypeId="2" ParentId="7395" CreationDate="2019-01-27T17:10:23.127" Score="9" Body="&lt;p&gt;This is the norm in the industry today.  Both AMD and Intel manufacture all of their processor chips from a small number of wafer designs.  If, for example, one or two of the cores on an 8 core die are faulty, then they disable those onboard and sell it as a 6 core chip.  Same thing is done with faulty cache areas -- disabled and sold as a chip with less cache.  &lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2019-01-27T17:10:23.127" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8982" PostTypeId="2" ParentId="8920" CreationDate="2019-01-27T17:56:15.957" Score="2" Body="&lt;p&gt;I suspect that the question asker may not have fully understood what &quot;6502 assembly&quot; actually is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Processors execute &quot;machine code&quot;, instructions prepared for them to execute. One of the ways to create machine code is to use &quot;assembler,&quot; a type of very simple programming language which is easier for humans to read, write and understand than actual machine code, but is also much easier to translate into machine code than a high-level language such as C++, Basic, or Python. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because assembler source code is easy to translate into machine code, it is specific to a &lt;em&gt;particular&lt;/em&gt; kind or family of processors. This is because different families of processors have different sets of registers, different addressing modes, and are generally programmed in different ways. Humans have been designing processors since the mid-1940s, but that field of engineering is still making progress, and there are almost certainly better ways to do it than anything in use now. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Translating assembler code for one processor into assembler code or machine code for a different processor is unusual, and normally only done when the two processors are related, but not actually compatible. Trying to do it in a general case is rather hard, and it is usually better to have a human re-write the code in a higher level language. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;6502 Assembler&quot; is assembler source code for the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502&quot; rel=&quot;nofollow noreferrer&quot;&gt;MOS Technology 6502&lt;/a&gt; family of processors, including the 6502, 6501, 6507, and later derivatives by other companies. These processors were used in lots of micro-computers, games consoles, and other devices from the mid-1970s to the mid-1980s. Nowadays, they are used in small-scale embedded systems, but definitely not in any computers that can run Microsoft Windows. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is because a 6502 processor can only handle 64KB of memory at a time, which is &lt;em&gt;definitely&lt;/em&gt; not enough for even the earliest and simplest versions of Windows, let alone the much bigger modern ones. So you cannot run 6502 machine code directly on any Windows machine, because the processor(s) in the Windows machine can't understand 6502 machine code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a 6502-derived processor design, the &lt;a href=&quot;http://www.6502.org/users/andre/adv65/index.html#65gz032&quot; rel=&quot;nofollow noreferrer&quot;&gt;65GZ032&lt;/a&gt;, that might theoretically have been capable of running Windows, were Microsoft motivated to produce Windows for it. However, it seems to have been abandoned, and was in any case too slow for this to be realistic. The Western Design Center, which produces 6502-based processors had a &lt;a href=&quot;https://downloads.reactivemicro.com/Electronics/CPU/WDC%2065C832%20Datasheet.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;project&lt;/a&gt; for a commercial 32-bit 6502 in the early 1990s, called the 65C832, but it was never built. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to learn to program in 6502 assembler, it's time to consider &lt;em&gt;why&lt;/em&gt; you want to do this. If it is to write games, or other software, for 6502-based machines, you'll need a real machine to get the timing and gameplay right, and using that will be the easiest way to do development. If it's for some other reason, please edit that into your question, and we can try to answer it. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2020-05-23T20:01:32.757" LastActivityDate="2020-05-23T20:01:32.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8983" PostTypeId="1" AcceptedAnswerId="8988" CreationDate="2019-01-27T21:58:32.013" Score="27" ViewCount="13290" Body="&lt;p&gt;The 1998 movie &quot;Armageddon&quot; depicts two Space Shuttles launching simultaneously. I read some expert say that &quot;There isn't enough computing power in the &lt;em&gt;world&lt;/em&gt; to launch two shuttles at the same time&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I always wondered if that was literally true.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I can't find the quote, but considering I heard it about twenty years ago, it's possible that I misunderstood. Maybe he meant &quot;...enough computing power &lt;em&gt;in one place&lt;/em&gt; in the world...&quot; (I.e. NASA couldn't do it alone.) Or that he said &quot;not enough...to &lt;em&gt;operate&lt;/em&gt; [not just launch] two shuttle flights simultaneously&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, answers below confirm that launching two shuttles and managing their flights would be something NASA could have accomplished in 1998, computerwise.&lt;/p&gt;&#xA;" OwnerUserId="11754" LastEditorUserId="11754" LastEditDate="2019-01-29T05:46:37.287" LastActivityDate="2019-02-04T03:23:22.013" Title="Did a shuttle launch take most of the world's computing power?" Tags="&lt;history&gt;" AnswerCount="8" CommentCount="18" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8984" PostTypeId="2" ParentId="8983" CreationDate="2019-01-27T22:06:08.313" Score="44" Body="&lt;p&gt;Throughout the duration of the Space Shuttle programme, the overwhelming majority of the world’s computers were busy with duties which had absolutely nothing to do with it. So launching one shuttle took far less than half the available computing power in the world, and launching two would also have taken far, far less than the available computing power in the world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Imagine if the expert’s premise were somewhat accurate: how would all the computers in the world be set to work on the same problem in the first place?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, although it doesn’t qualify as two simultaneous launches, I do believe NASA was prepared to launch a second shuttle while one was already in flight, in particular for rescue scenarios.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-01-27T22:06:08.313" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="8985" PostTypeId="2" ParentId="8983" CreationDate="2019-01-27T22:30:29.977" Score="16" Body="&lt;p&gt;This is a quite strange assumption. What superior computing power does a launch need? Most of what is done is in control systems. Maybe some supercomputer is required for a few minutes in mission planning ahead of time to calculate trajectory, but that's all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nevertheless, let's take a look at the high-end machines in 1980:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1970, US manufacturers &lt;em&gt;alone&lt;/em&gt; shipped about 15,000 mainframes a year. By 1980, this number rose to more than 35,000 units. This number does not include any smaller systems like minis - and more importantly, it does not include any European or Japanese manufacturer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if the Shuttle needed a dozen high-end mainframes to be prepared for launch (which I doubt), that's just a droplet compared to the stream of systems installed at that time. Sure, NASA had some impressive machines, but not anything near than half the world's computing power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Source for some numbers: &lt;a href=&quot;https://books.google.de/books?id=48Eu9qo4WYIC&amp;amp;pg=PA17&amp;amp;lpg=PA17&amp;amp;dq=IBM%20/370%20units%20shipped&amp;amp;source=bl&amp;amp;ots=cJC-tpToFB&amp;amp;sig=ACfU3U0rv42oGopc81bElrVxi6a_j9a5Kg&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=2ahUKEwiQ5dqP_47gAhUrPewKHVUvDXo4ChDoATADegQIBxAB#v=onepage&amp;amp;q=IBM%20%2F370%20units%20shipped&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;Computer World Article of May 1977&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-01-28T13:07:42.007" LastActivityDate="2019-01-28T13:07:42.007" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="8986" PostTypeId="2" ParentId="2562" CreationDate="2019-01-27T23:51:48.833" Score="4" Body="&lt;p&gt;Well, while this is not an answer according to the requested Mirocomputer criteria, Arabic script was already present in the 7-bit age, standardized as &lt;a href=&quot;https://en.wikipedia.org/wiki/ASMO_449&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASMO-449&lt;/a&gt; / &lt;a href=&quot;https://www.itscj.ipsj.or.jp/iso-ir/089.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;IR-089&lt;/a&gt; in 1982, but already used that way several years before. It's based on 7-bit ASCII.&lt;/p&gt;&#xA;&lt;p&gt;There were mainframe terminals using its precursor form as early as 1976.&lt;/p&gt;&#xA;&lt;p&gt;Another very early 7-bit variant used in terminals was based on a &lt;a href=&quot;https://en.wikipedia.org/wiki/DIN_31635&quot; rel=&quot;nofollow noreferrer&quot;&gt;German transliteration from 1935&lt;/a&gt;, which replaced all Arabic letters, except 5, by single Roman letters, so only 5 symbols from ASCII had to be sacrificed to include it into 7 bit code space. Since this was (and still is) the correct (German) transliteration for Arabic, it had a great side effect, that displaying the same data using basic ASCII displayed (almost) readable Arabic text (using Roman letters) - well, except these 5 symbols that is - which could be fixed by search &amp;amp; replace anyway.&lt;/p&gt;&#xA;&lt;p&gt;With DOS 4.0, IBM also introduced a special Arabic DOS version using Codepage 864, which brings this definitely back to microcomputer mainstream.&lt;/p&gt;&#xA;&lt;p&gt;Later, Windows 1256 and corresponding ISO 8859-6 solved the 7-bit issue by moving Arabic into the 8-bit code space and enabling many more computers to be used with this script.&lt;/p&gt;&#xA;&lt;p&gt;Well, and then came Unicode :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-03-20T14:41:29.747" LastActivityDate="2021-03-20T14:41:29.747" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8987" PostTypeId="2" ParentId="8983" CreationDate="2019-01-28T01:05:48.647" Score="6" Body="&lt;p&gt;When John Glenn went into orbit on Mercury 7,  there were two completely parallel ground support computers, IBM 7090 mainframes.  The idea was that, in the event of system failure, the alternate system could take over.  Even the programming had been done separately, to reduce the chance of simultaneous failure of the two systems.  &lt;a href=&quot;https://history.nasa.gov/computers/Ch8-2.html&quot; rel=&quot;noreferrer&quot;&gt;Mercury history&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During Gemini, they actually had to support two spacecrafts in orbit at the same time, in order to test rendezvous. That involved not only two systems, but also sharing data between them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems unlikely that this dual redundancy would have been abandoned during Apollo or the Space Shuttle launches.  That being the case,  the necessary computer power could be made available by simply using one of the two systems to support each launch.  You lose the redundancy, but that is all you lose.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2019-01-28T01:12:41.943" LastActivityDate="2019-01-28T01:12:41.943" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8988" PostTypeId="2" ParentId="8983" CreationDate="2019-01-28T01:57:40.483" Score="18" Body="&lt;p&gt;There are five consumers of computing power in the shuttle launch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first is the simulation and testing. Which was processing intensive and at times a major consumer of processing power but a dual launch does not actually require dual simulation in real time. The unique profile needed for the movie mission quite possibly would need a world wide pooling of processing power to simulate lots of different profiles to find a best one, but once chosen verifying that flight would not be much more of a problem than two ordinary missions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second is the actual flight control once it leaves the pad, which is carried by the orbiter and self sufficient all the way to orbit by design and &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/4_Pi#AP-101&quot; rel=&quot;nofollow noreferrer&quot;&gt;multiply redundant&lt;/a&gt; and driven by vote. So there were multiple duplicates within each shuttle and across the fleet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The third is the launch control hardware which was in the &lt;a href=&quot;http://ttps://en.wikipedia.org/wiki/Mobile_Launcher_Platform&quot; rel=&quot;nofollow noreferrer&quot;&gt;pad itself&lt;/a&gt;. Answers seemed to vary with time about the processing here but was less computational and more signal conversion and sequencing. There were three of them. They conducted the final launch sequence autonomously with the monitoring hardware in launch control acting as a veto so once in a final countdown condition could complete it without needing more external processing power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fourth is the actual &lt;a href=&quot;https://en.wikipedia.org/wiki/Launch_Processing_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;launch management&lt;/a&gt;, which may be where this question started. While intended to support rapid launch sequencing and did support two &lt;a href=&quot;https://en.wikipedia.org/wiki/STS-3xx&quot; rel=&quot;nofollow noreferrer&quot;&gt;simultaneous shuttles&lt;/a&gt; on the pad it is unclear if there is actually capability to have two simultaneous launches active. The problem here is not processing capacity but having enough interface hardware to monitor the final launch sequence so if it is 'we launch on time or we die' then this does not prevent a launch, just makes it higher risk since there will be fewer eyeballs watching events.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fifth and final consumer of processing was the ground based tracking and control loop. The launch tracking would not easily handle two simultaneous launches but that is more a restriction on tracking hardware numbers and telling the two launches apart. All of this is important for safety and investigating an accident but does not directly prevent a launch. Once in orbit the tracking process are already managing multiple objects anyway so not meaningfully different to have two shuttles up at once over one shuttle plus various satellites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several other reasons why a formation launch is awesome fiction but a problematic reality but global processing power is not one of them.&lt;/p&gt;&#xA;" OwnerUserId="11756" LastEditorUserId="11790" LastEditDate="2019-01-30T11:58:14.890" LastActivityDate="2019-01-30T11:58:14.890" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8989" PostTypeId="2" ParentId="8983" CreationDate="2019-01-28T02:46:40.443" Score="46" Body="&lt;h1&gt;No, it wasn't even half of &lt;em&gt;NASA's own&lt;/em&gt; computing power&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The shuttle itself had five &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_AP-101&quot; rel=&quot;noreferrer&quot;&gt;AP-101&lt;/a&gt; computers.  They were derived from the IBM System/360 architecture, but with  32-bit registers and a 1 Mb address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mission control did have many computers (including many mainframes) in Building 30 of Johnson Space Center in Houston.  Launch control at Kennedy Space Center and the backup mission control in Huntsville also had computer facilities.  Mission simulators had the same hardware as the spacecraft itself, with additional support computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of the above computers were at most mainframes; i.e. a shuttle mission did not rely on supercomputers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In contrast, consider NASA's &lt;a href=&quot;https://en.wikipedia.org/wiki/NASA_Advanced_Supercomputing_Division&quot; rel=&quot;noreferrer&quot;&gt;Advanced Supercomputing Division&lt;/a&gt; at NASA Ames Research Center in Mountain View, California.  By 1998, this division had &lt;a href=&quot;https://en.wikipedia.org/wiki/NASA_Advanced_Supercomputing_Division#Supercomputing_History&quot; rel=&quot;noreferrer&quot;&gt;over 20 supercomputers&lt;/a&gt;, far more than the entire computing power of the shuttle program.  The division performs calculations for fluid dynamics, aircraft design, weather modeling, and ocean current prediction.  They also have resources for data visualization and massive data storage.  This is all for research, and isn't actually needed for a shuttle launch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, two shuttles (&lt;em&gt;Atlantis&lt;/em&gt; and &lt;em&gt;Endeavour&lt;/em&gt;) were on launch pads at the same time in 2008.  &lt;em&gt;Atlantis&lt;/em&gt; launched for the final servicing mission for the Hubble Space Telescope.  &lt;em&gt;Endeavour&lt;/em&gt; was made ready for a rescue mission if something went wrong with &lt;em&gt;Atlantis&lt;/em&gt;.  Fortunately, no emergency happened, and &lt;em&gt;Endeavour&lt;/em&gt; launched on its own mission a few weeks after &lt;em&gt;Atlantis&lt;/em&gt; landed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's quite possible to &lt;a href=&quot;https://space.stackexchange.com/q/13913/26446&quot;&gt;launch two shuttles at the same time&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dDsKD.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dDsKD.jpg&quot; alt=&quot;two shuttles&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-01-28T02:46:40.443" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8990" PostTypeId="2" ParentId="8943" CreationDate="2019-01-28T08:02:13.243" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm considering writing my own using INT13h BIOS calls. Shouldn't be reasonably simple to do.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I was writing the comment because I had already the same idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how my code looks like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# .COM file loaded into address CS:0x100, assuming DS=ES=CS&#xA;start:&#xA;.code16&#xA;.intel_syntax noprefix&#xA;&#xA;# Create and open the output file&#xA;    mov   ah, 0x3C&#xA;    xor   cx, cx&#xA;    mov   dx, offset (filename - start + 0x100)&#xA;    int   0x21&#xA;    jc    error&#xA;&#xA;# The &quot;loop&quot;:&#xA;# bx = File handle&#xA;# ax = cylinder number&#xA;# dh = head number&#xA;# dl = bios drive&#xA;    mov   bx, ax&#xA;    mov   ax, [firstcylinder - start + 0x100]&#xA;    xor   dh, dh&#xA;    mov   dl, [driveno - start + 0x100]&#xA;nextLoop:&#xA;&#xA;# Read one track&#xA;    push  ax&#xA;    push  bx&#xA;    push  dx&#xA;    mov   ch, al&#xA;    mov   cl, ah&#xA;    ror   cl, 1&#xA;    ror   cl, 1&#xA;    inc   cl&#xA;    mov   bx, 0x400&#xA;    mov   ah, 2&#xA;    mov   al, [numsectors - start + 0x100]&#xA;    int   0x13&#xA;    pop   dx&#xA;    pop   bx&#xA;    pop   ax&#xA;    jc    error&#xA;&#xA;# Write the data to the file&#xA;    push  ax&#xA;    push  bx&#xA;    push  dx&#xA;    mov   ah, 0x40&#xA;    mov   ch, [numsectors - start + 0x100]&#xA;    xor   cl, cl&#xA;    add   cx, cx&#xA;    mov   dx, 0x400&#xA;    int   0x21&#xA;    pop   dx&#xA;    pop   bx&#xA;    pop   ax&#xA;&#xA;# Loop: Go to the next head&#xA;    inc   dh&#xA;    cmp   dh, [numheads - start + 0x100]&#xA;    jb    nextLoop&#xA;&#xA;# Loop: Go into the next cylinder&#xA;# (And continue at head 0)&#xA;    xor   dh, dh&#xA;    inc   ax&#xA;    cmp   ax, [lastcylinder - start + 0x100]&#xA;    jbe   nextLoop&#xA;&#xA;# Close the file and finish&#xA;    mov   ah, 0x3E&#xA;    int   0x21&#xA;    int   0x20&#xA;&#xA;# Error &quot;handling&quot;&#xA;error:&#xA;    mov   ah, 9&#xA;    mov   dx, offset (errorMessage - start + 0x100)&#xA;    int   0x21&#xA;    int   0x20&#xA;&#xA;errorMessage:&#xA;    .ascii &quot;An error occurred.$&quot;&#xA;&#xA;# -------- Configuration area ----------&#xA;&#xA;# Replace this by the BIOS drive number&#xA;driveno:&#xA;    .byte 0x80&#xA;&#xA;# Replace these two bytes by the first&#xA;# cylinder to be copied&#xA;firstcylinder:&#xA;    .word 308&#xA;&#xA;# Replace these two bytes by the last&#xA;# cylinder to be copied&#xA;lastcylinder:&#xA;    .word 614&#xA;&#xA;# Replace this byte by the number of heads&#xA;numheads:&#xA;    .byte 4&#xA;&#xA;# Replace this byte by the number of&#xA;# sectors per track&#xA;numsectors:&#xA;    .byte 26&#xA;&#xA;# Replace this by the file name&#xA;filename:&#xA;    .asciz &quot;d:\\hdfile0.bin&quot;&#xA;&#xA;# .org 0x400&#xA;# dataBuffer:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The code supports disks with 512 bytes per sector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did a quick test in a virtual machine using DOS 5.0. Unfortunately I'm not sure if it works on a real XT; the virtual machine supports new BIOS features and 80486 instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also did not check if the disk was really copied correctly!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the file size is limited in old DOS versions (I think the drive size is limited to 33 MB!), you can specify a &quot;start cylinder&quot; and an &quot;end cylinder&quot; in the &quot;configuration area&quot;. So you can make a copy of the first half and the second half of the hard disk.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The machine now has a XT_IDE v4 card.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Maybe someone &lt;strong&gt;not&lt;/strong&gt; having such a card but having the same problem is reading this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code above can be modified to write to a serial cable instead of a file. However using a serial cable is rather slow: At 9600 bauds (XTs don't support &quot;high&quot; baud rates) it would take about 10 hours to transfer the data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was also thinking about a solution that works similar to the &quot;X*1541&quot; type cables:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such cables are used to connect an old Commodore disk drive to the parallel port of a modern computer; however, the same idea can be used to connect some memory with a similar interface (such as an SD card!) to the parallel port of an old computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think this would allow a much higher speed than a serial cable, but require really much programming effort - even when writing to &quot;raw sectors&quot; of the SD card instead of a (FAT) file system.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2019-01-28T08:02:13.243" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="8991" PostTypeId="1" AcceptedAnswerId="8995" CreationDate="2019-01-28T10:09:10.603" Score="1" ViewCount="327" Body="&lt;p&gt;The question you are now reading is about a comment on &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1626/why-did-pok%C3%A9mon-red-have-so-many-overflow-bugs?rq=1&quot;&gt;this question&lt;/a&gt;, about overflow bugs in some Pokemon game. A comment on that question says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It was Game Freak's first project. They just were sloppy programmers. &lt;a href=&quot;https://github.com/pret/pokecrystal/blob/fe4377ce532d1fea1b28d2c52e4f62f0ca702a30/engine/games/slot_machine.asm#L858&quot; rel=&quot;nofollow noreferrer&quot;&gt;This function merely divides by four, in the usual Game Freak style of doing things&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; 92bbe (24:6bbe)&#xA;&#xA;Unreferenced_Function92bbe: ; 92bbe&#xA;    push hl&#xA;    srl a&#xA;    srl a&#xA;    add LOW(.Unknown_92bce)&#xA;    ld l, a&#xA;    ld a, 0&#xA;    adc HIGH(.Unknown_92bce)&#xA;    ld h, a&#xA;    ld a, [hl]&#xA;    pop hl&#xA;    ret&#xA;&#xA;; 92bce&#xA;&#xA;.Unknown_92bce: ; 92bce&#xA;    db 0, 1, 2, 3, 4, 5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It starts off by saving HL, and I can see it restores HL at the end. That's because it &lt;em&gt;uses&lt;/em&gt; HL to construct some kind of pointer which is discarded at the end. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &lt;code&gt;srl a&lt;/code&gt; is obviously going to divide &lt;code&gt;a&lt;/code&gt; by two, so doing that twice should divide it by four! The next thing should be to restore HL (or not push it in the first place) and the return, right? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it's hardly worth putting just &lt;code&gt;srl a;srl a&lt;/code&gt; in a subroutine. So there's more: from what I can see, it's computing a pointer to the array marked &lt;code&gt;.Unknown_92bce&lt;/code&gt; offset by the accumulator. In other words, it's going to use the value in the accumulator to look up ... the value in the accumulator. If the accumulator is &lt;code&gt;3&lt;/code&gt; for example, then fetch &lt;code&gt;3&lt;/code&gt; from the array.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then obviously it restores &lt;code&gt;hl&lt;/code&gt; and returns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I missing something? Is this subroutine equivalent to the following?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Unreferenced_Function92bbe:&#xA;    srl a&#xA;    srl a&#xA;    ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-01-28T10:23:27.887" LastActivityDate="2019-01-28T12:28:14.613" Title="What don't I understand about this LR35902 code?" Tags="&lt;programming&gt;&lt;assembly&gt;&lt;game-boy&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8992" PostTypeId="2" ParentId="8946" CreationDate="2019-01-28T10:20:18.683" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;If you read about the history of computing, you'll hear how the &lt;strong&gt;first&lt;/strong&gt; computers were &quot;huge&quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This depends on what you call a &quot;computer&quot; and what you call &quot;huge&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;Zuse Z3&lt;/strong&gt; (see &lt;a href=&quot;https://en.wikipedia.org/wiki/Z3_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia article&lt;/a&gt;) is seen as the first binary computer; it was built 5 years before the ENIAC and looking at the photo I think it was &lt;strong&gt;not larger than a large wardrobe&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it definitely did not need a whole building.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However before the Z3 there were non-digital machines:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;&lt;strong&gt;Analytical Engine&lt;/strong&gt;&quot; (see &lt;a href=&quot;https://en.wikipedia.org/wiki/Analytical_Engine&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia article&lt;/a&gt;) was designed in the &lt;strong&gt;1830s&lt;/strong&gt; but never built. That computer would have worked with mechanic parts only (such as gears); the device would have filled a &lt;strong&gt;whole building&lt;/strong&gt; while the memory (the equivalent of &quot;RAM&quot; in modern computers) would have needed most of the space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I heard about a mechanical computer using ternary instead of binary arithmetic that has actually been built in the &lt;strong&gt;1890s&lt;/strong&gt;. Unfortunately, I don't know how large this device was.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... &lt;strong&gt;commercial&lt;/strong&gt; computing ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Commercial computers came later. According to Wikipedia, the first commercial computer (UINVAC I) needed about 36 square meters and weighted about 8 tons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;36 square meters is much less than a whole building.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2019-01-28T10:20:18.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8993" PostTypeId="2" ParentId="7095" CreationDate="2019-01-28T11:04:00.060" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The C standard is obviously written with ones' complement machine in mind; for example, it specifies that a signed integer may hold values -32767 to +32767&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, that would be the minimum set of values for a signed 16 bit integer. 2's complement is a superset of this. In fact, C11 explicitly allows for both 1 and 2's complement integers (section 6.2.6.2).  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But I find that modern day examples of computers that use ones' complement rather hard to come across. I think it's safe to assume that anything you've got that runs a computer program and has signed integers of some kind uses two's complement. So what is the reason for the decline in popularity for ones complement architectures?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;With 2's complement, the processor does not need to know whether it is dealing with a signed number or an unsigned number. Take, for example, the 6502. The bit pattern &lt;code&gt;1111 1100&lt;/code&gt; can be viewed as either &lt;code&gt;-4&lt;/code&gt; or &lt;code&gt;252&lt;/code&gt; but when you add it to another number, the CPU does not care whether it is signed or not.  It can use the same circuitry and the answer comes out right by just doing an unsigned add. e.g.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0000 00010 + 1111 1100 = 1111 1110 = -2 or 254 depending on signed or unsigned&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You just need an extra few gates to get the signed overflow as well as the unsigned carry. I think this is the main reason almost everybody uses 2's complement nowadays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare with floating point representations. Floating point numbers are always signed, so the advantage of being able to treat signed and unsigned numbers the same is negated (ahem). There are other technical reasons for using 1's complement aswell, but you'll find that the floating point format that everybody uses nowadays (&lt;a href=&quot;https://en.wikipedia.org/wiki/IEEE_754#Representation_and_encoding_in_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEEE754&lt;/a&gt;) uses a 1's complement mantissa. T&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2019-01-28T11:04:00.060" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8994" PostTypeId="2" ParentId="8983" CreationDate="2019-01-28T11:22:24.103" Score="-3" Body="&lt;p&gt;It is at least plausible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In theory it is certainly possible to launch 2 shuttles simultaneously. Additionally closed loop immediate guidance can be done by one typical p.c. Of that era. It isn't to different then what was done by the orbiter simulator which ran on a pc. In theory this could minimally operate two orbiters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However in reality, we don't know Nasa's requirements as far as accuracy and certainty in the orbits selected for the missions. It is certainly plausible that Nasa had a significant percentage of the world's computational power at that time (and still does), and that it did use it to plan missions already in progress. In such a case piloting 2 shuttles would require more resource then what was available to maintain the same level of calculation which was already put into a shuttle mission. &lt;/p&gt;&#xA;" OwnerUserId="11763" LastActivityDate="2019-01-28T11:22:24.103" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8995" PostTypeId="2" ParentId="8991" CreationDate="2019-01-28T12:01:56.300" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Am I missing something? Is this subroutine equivalent to the following?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Did you see the &lt;code&gt;ld a, [hl]&lt;/code&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lines before that one are calculating &lt;code&gt;hl = .Unknown_92bce + (a/4)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the &lt;code&gt;ld a, [hl]&lt;/code&gt; will load the byte from that address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... so the function is equivalent to the following C pseudo code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;extern byte Unknown_92bce[];&#xA;...&#xA;Unreferenced_Function92bbe()&#xA;{&#xA;    A = Unknown_92bce[A/4];&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Not sure about that. Ignoring the possibility of an overflow, the array Unknown_92bce contains the sequence of integers 0, 1, 2, 3, 4, 5.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If A is in the range 0...20, this really makes no sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some cartridges may contain some special logic that detects (read) accesses to a certain address to do bank switching or similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case &lt;code&gt;ld a, [hl]&lt;/code&gt; is not there to read some value from an array, but to do the bank switching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if the module does not contain such a logic and A is guaranteed to be in the range 0..20, this really makes no sense to me.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="8712" LastEditDate="2019-01-28T12:28:14.613" LastActivityDate="2019-01-28T12:28:14.613" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="8996" PostTypeId="2" ParentId="5767" CreationDate="2019-01-28T16:33:17.390" Score="2" Body="&lt;p&gt;This is a fascinating subject, IMHO, and a fun one to find searching Google for a Z80/6502/6809 showdown. I think one of the areas that people in here haven't addressed - aside from cost - is the ability to license the 6809 core vs, say, the 6502. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take for example, Atari. Both Atari Inc and later Atari Corp. Atari Inc. did end up using the 6809 somewhat in a few of their arcade games, but their consoles and 8-bit computers remained using the 6502. Atari didn't own their own fab like Commodore did - MOS/CSG - but they worked closely with Synertek, Rockwell, and others. They designed their own 6502 variant, the 6502C SALLY, and had those companies manufacture it for them. Could they have done the same with a 6809? Doubtful. And they would've had to have purchased all of the 6809s from Motorola and possibly later from Hitachi. It's actually a shame Atari did take to manufacturing even further 6502 enhancements they came up with in-house like adding 16-bit instructions to it back in 1979. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flash forward all the way to 1988/89 when the successor Atari Corp was acquiring what became the Atari Lynx from Epyx. Despite its powerful 16-bit graphics chip, it still had a 6502 as its main CPU. Why? Because the 6809 and 68000 weren't available to license for customized cores, according to the development team. For whatever reason, they also didn't go with the 65816 from WDC either. But that's a different story...  &lt;/p&gt;&#xA;" OwnerUserId="11769" LastActivityDate="2019-01-28T16:33:17.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8997" PostTypeId="2" ParentId="8732" CreationDate="2019-01-28T17:47:34.350" Score="3" Body="&lt;p&gt;The Lear-Siegler ADM-3a was extremely popular for folks who didn't have much money for equipment (like my university in the 1970's). The ADM-3a was $995 (about $6K in current dollars).&lt;/p&gt;&#xA;" OwnerUserId="2045" LastActivityDate="2019-01-28T17:47:34.350" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8998" PostTypeId="2" ParentId="6143" CreationDate="2019-01-28T17:48:00.877" Score="1" Body="&lt;p&gt;Since my reputation score at this point isn't high enough to reply directly yet, I wanted to mention 2 things...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;Math Box&quot; in relation to Atari [Inc.] was found in their vector-graphics based arcade games and it used AMD chips in said box. Such as with the game &quot;Red Baron&quot;. I'm pretty sure the much more popular &quot;Battlezone&quot; also used it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for Atari BASIC - for the Atari 8-bit computers, not Atari Corp's later ST computers with its much-loathed disc-based BASIC from Metacomco - it was originally designed by Shepardson Microsystems and later revised by OSS. Atari wanted to use Microsoft BASIC and have it contained in an 8K ROM which was to be cartridge-based for the 400/800 computers. That's what the contract with Microsoft stipulated. Microsoft was unable to deliver it and it run within 8K. Shepardson was hired to get it to work and after much labor, recommended scrapping it and going with a custom-written version of BASIC instead. As others have mentioned, Microsoft BASIC for Atari 8-bit was later released on floppy disk but never replaced the ROM based Atari BASIC in the Atari 8-bit line.&lt;/p&gt;&#xA;" OwnerUserId="11769" LastActivityDate="2019-01-28T17:48:00.877" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9000" PostTypeId="2" ParentId="197" CreationDate="2019-01-28T18:08:54.533" Score="6" Body="&lt;p&gt;PIN 35 on the SALLY used HALT. There were other advantages. The Wikipedia article is pretty thorough. HALT was used so the ANTIC/GTIA graphics chips could halt the 6502 easier since they shared the same bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SALLY was used in the Atari XL and XE 8-bit computer line, not to mention the 5200 SuperSystem and the 7800 ProSystem gaming consoles. &lt;/p&gt;&#xA;" OwnerUserId="11769" LastActivityDate="2019-01-28T18:08:54.533" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9001" PostTypeId="2" ParentId="7135" CreationDate="2019-01-28T18:33:39.107" Score="6" Body="&lt;p&gt;First off, the website stating IBM execs were placed in carts and allegedly turned-off by Atari's culture is flat out wrong. That happened with Sears executives and Atari's management tried to hide a bunch of the stoners from view. The famous story is often told that a Sears exec reviewed the &quot;Atari Video Music&quot; box and jokingly asked what the engineer was smoking when he created it only to have said engineer pop out with a lit joint to answer the Sears exec.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, the Ars article is very dismissive of Atari and is rather insulting considering the genius engineers employed there at the time, such as Jay Miner, Al Alcorn, and Joe Decuir.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third, the 400/800 architecture was &quot;closed&quot; due to the FCC. The FCC prohibited those computers from having expansion card slots because they were &quot;home computers&quot; and would cause interference with radios and TVs. Apple skirted this because they were allegedly meant to be &quot;business computers&quot;. They both still had edge connectors on them that Joe Decuir at least intended to offer external expansion via a chassis. That was separate of the Atari SIO Port - the granddaddy of USB and Firewire - he created in direct response to the FCC's challenges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fourth, Warner CEO Steve Ross was at the time trying to interest IBM in acquiring a 50% stake in Atari Inc. He thought a joint-venture with IBM would be advantageous, plus, it would spread the risk pool just as Warner had done with their cable operations [Warner Amex] at the time, which was 50% owned by American Express.&lt;/p&gt;&#xA;" OwnerUserId="11769" LastActivityDate="2019-01-28T18:33:39.107" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9002" PostTypeId="2" ParentId="7434" CreationDate="2019-01-28T19:05:20.167" Score="3" Body="&lt;p&gt;Joe Decuir has posted on Facebook some laments about how adding a couple more lines to the 400/800 cartridge slot - and including the TIA - would've made the 400/800 backwards-compatible with the 2600.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 400/800 began as a project to design the replacement for the 2600 since Atari's engineers assumed the shelf life for the 2600 - known as the VCS back then - was 3 years. But the Warner-chosen Atari CEO Ray Kassar saw the margins the Apple II was earning and decided Atari should also sell a profitable computer line to compete with Apple and so that project was turned into a computer project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 5200 was a return to the original intent of the 400/800 project. Atari's engineers wanted the 5200 to be backwards-compatible with the 2600 but the Warner managers nixed the idea. Their logic behind the decision was &quot;why would anyone want to play old games on a newer advanced system?&quot; And there was some logic to that considering the much later Nintendo Super NES/Super Famicom wasn't backwards compatible with the NES/Famicom and yet it was still a success. Had the 5200 been backwards-compatible, then Atari Inc would've either had to have made the 5200 cartridge slot basically a souped up 2600 slot - like the later 7800 - or offered it as a 2nd cartridge slot. Had it been a single slot, then the 5200's cartridge slot wouldn't have been ZIF. And Atari also would've had to have used DB9s instead of the 5200's DB15s or offered both thereby making the system even more expensive to manufacture. It should be noticed that Atari's own engineers wanted the 5200's joysticks to be self-centering and protested against Warner's decision not to do that even before the console was released...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of this is covered in the &lt;em&gt;Atari Inc - Business is Fun&lt;/em&gt; book.&lt;/p&gt;&#xA;" OwnerUserId="11769" LastActivityDate="2019-01-28T19:05:20.167" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9003" PostTypeId="1" AcceptedAnswerId="9004" CreationDate="2019-01-29T17:39:30.387" Score="8" ViewCount="746" Body="&lt;p&gt;I recently wondered how the &quot;old&quot; came into the &quot;Plain Old Documentation&quot; of Perl's documentation format &quot;POD&quot;. Was it named like this from the beginning? If so, why was it considered old back then?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I figured out so far:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;POD seems to have been introduced during the 5.00x times as the oldest Perl 5.x tar ball I could find was &lt;a href=&quot;https://www.cpan.org/src/5.0/perl5.004.tar.gz&quot; rel=&quot;noreferrer&quot;&gt;perl5.004.tar.gz&lt;/a&gt; and it contained at least one POD file from October 1996.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the &lt;a href=&quot;https://www.cpan.org/src/5.0/&quot; rel=&quot;noreferrer&quot;&gt;same directory&lt;/a&gt; there are also hashsum files for Perl 5.003, but the tar ball itself is missing.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://www.cpan.org/src/unsupported/4.036/perl-4.036.tar.gz&quot; rel=&quot;noreferrer&quot;&gt;Perl 4.036 tar ball&lt;/a&gt; didn't have any POD, at least there was no file ending in &lt;code&gt;.pod&lt;/code&gt; and an &lt;code&gt;egrep -r '^='&lt;/code&gt; yielded nothing POD-like. The tar ball as a last-modified time stamp from February 1994.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;According to &lt;a href=&quot;https://perldoc.perl.org/perlhist.html#THE-RECORDS&quot; rel=&quot;noreferrer&quot;&gt;perldoc perlhist&lt;/a&gt;, 5.000alpha1 was released on 1993-Jul-31 and 5.000 is from 1994-Oct-17.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I currently assume that POD wasn't invented after 5.000, so I think the term &quot;Plain Old Documentation&quot; must have been coined around 1993/1994.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One colleague suggested that the &quot;old&quot; refers to POD being a plain text format in comparison to all the binary formats common for word processing back then (Works, Word, Rich Text Format, etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone knows more details or can confirm some of the suspicions I mentioned?&lt;/p&gt;&#xA;" OwnerUserId="3719" LastEditorUserId="3719" LastEditDate="2019-01-29T17:51:18.613" LastActivityDate="2019-02-05T17:05:28.437" Title="How old is Perl's &quot;Plain Old Documentation&quot; (POD) format and why was it called &quot;old&quot; initially?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="21" ContentLicense="CC BY-SA 4.0" />
  <row Id="9004" PostTypeId="2" ParentId="9003" CreationDate="2019-01-29T18:12:46.037" Score="16" Body="&lt;p&gt;&lt;a href=&quot;https://github.com/schacon/perl/commit/a0d0e21ea6ea90a22318550944fe6cb09ae10cda&quot; rel=&quot;noreferrer&quot;&gt;This commit&lt;/a&gt; (recreated much later) introduces POD files, in version 5.000; its parent, corresponding to alpha 9, doesn’t have them, so it appears they were introduced between alpha 9 in May 1994 and the 5.000 release in October 1994.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://groups.google.com/d/msg/comp.lang.perl/rSvC42jEiWs/UsOiH26QYTYJ&quot; rel=&quot;noreferrer&quot;&gt;This message on &lt;code&gt;comp.lang.perl&lt;/code&gt;&lt;/a&gt; suggests that POD was a reaction to &lt;code&gt;roff&lt;/code&gt; (and its availability, or lack thereof, on various platforms), among other reasons:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm very well aware of this but it requires nroff (not readily&#xA;  available on VMS, MS-DOS, AmigaDOS etc).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This is one of the reasons Larry moved away from *roff format for the&#xA;  Perl 5 documentation. The P in pod can also stand for portable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and &lt;a href=&quot;https://groups.google.com/d/msg/comp.lang.perl/rSvC42jEiWs/DBlyx7BGmSUJ&quot; rel=&quot;noreferrer&quot;&gt;this message&lt;/a&gt; quotes another message (not available in the archives) which says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;Sorry if I appear to be a yokal, but what is this pod stuff anyway?&lt;/p&gt;&#xA;    &#xA;    &lt;p&gt;I've never heard of it before now.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &#xA;  &lt;p&gt;plain old documentation.  &lt;strong&gt;it's a format larry designed recently&#xA;  for use by perl5&lt;/strong&gt;.  the ideas are it's easy of use, and that you&#xA;  write some translator from pod to some other markup language&#xA;  (two of these exist currently - pod2man and pod2html), so you&#xA;  can read it how ever you want.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(The highlighting is mine, or rather Axel’s.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-02-05T17:05:28.437" LastActivityDate="2019-02-05T17:05:28.437" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9005" PostTypeId="2" ParentId="8943" CreationDate="2019-01-29T22:22:43.350" Score="2" Body="&lt;p&gt;I'm just wondering aloud because I have never tried it, nor do I know if it even supports it, but assuming that the drive controller card is ISA, what about putting that card and the hard drive into a more modern system, like say a 386 or 486 - new enough that it would support Linux but old enough that you probably would not run into compatibility issues with the controller card. Then, you could use something like ddrescue or clonezilla to image the drive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, with the disk itself being good, and with it appearing that you have an IDE controller in the same system, I would just xcopy the existing disk over to an IDE disk, and then put the IDE drive in a modern system and use a tool like Clonezilla to image it. &lt;/p&gt;&#xA;" OwnerUserId="11784" LastActivityDate="2019-01-29T22:22:43.350" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9006" PostTypeId="1" CreationDate="2019-01-30T07:20:47.560" Score="75" ViewCount="17371" Body="&lt;p&gt;When hobbyists wanted to write software for e.g. the &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_64&quot; rel=&quot;noreferrer&quot;&gt;Commodore 64&lt;/a&gt;, they either used the built-in BASIC interpreter (with all its limitations) or some native tools, like compilers for other languages or, most of the time, assemblers. This had a lot of drawbacks, like the limited screen size, the slow disk I/O, the limited RAM available for the tools &lt;em&gt;and&lt;/em&gt; your own code, etc. So, nowadays, you'd have to be crazy not to use a PC and some nice cross-development tools when targeting these old machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were some nice commercial applications and a lot more nice commercial games available and I wonder how these were developed. Did the programmers indeed work on the target machine with all the drawbacks, or did at least some of the development shops have more powerful workstations with e.g. fast hard disks and cross-assemblers?&lt;/p&gt;&#xA;" OwnerUserId="7040" LastEditorUserId="535" LastEditDate="2019-02-01T09:39:52.310" LastActivityDate="2019-02-13T23:13:57.777" Title="Back in the late 1980s, how was commercial software for 8-bit home computers developed?" Tags="&lt;history&gt;&lt;software-development&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="12" CommentCount="24" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9007" PostTypeId="2" ParentId="9006" CreationDate="2019-01-30T07:34:59.570" Score="85" Body="&lt;p&gt;It varied. There was no single method. Some people used assemblers on the target machine, others used cross-development tools. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example of a large product for an 8-bit machine, I worked on the BitStik CAD software for Apple II and BBC Micro systems from 1984 to 1986. That used Apple II machines with Z80 CP/M cards for coding (with WordStar) and assembling and linking (with Microsoft's M80 assembler, using its &lt;code&gt;.6502&lt;/code&gt; directive). We had a very simple networked hard disk system for source code, which used ribbon cables to connect machines to the disk cabinet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Executables would be written onto bootable Apple DOS disks, and then you'd reboot into Apple DOS and try out your changes. This meant we were using the same machines for coding and testing, but frequently switching between OSes on them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We had machines with hardware debugger cards (can't remember the name) for difficult problems. It worked pretty well, all things considered. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since WordStar has attracted attention, this was &quot;Classic&quot; WordStar 3.3 IIRC. It has a &quot;Non-Document&quot; mode where it works as a plain text editor, and if you turned off the menus and delays, it was decently fast on a 3.58MHz Z80. Its &quot;Column Mode&quot;, which lets you define and operate on a rectangular block of text that &lt;em&gt;doesn't have to contain complete lines&lt;/em&gt;, was pretty useful when writing assembler code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source control was entirely manual. There was a big wallchart for developers to claim control of source files. They had the copies they were working on in their personal areas of the hard disk, and would put their changed versions back into the shared area and cross out their initials on the chart. Backups were taken weekly, and &lt;em&gt;before&lt;/em&gt; any major changes. More copies than that would have been hard work: the hard disk was only 20MB for five developers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were a lot of floppy disks around, and we had to be disciplined with them. After one new developer was a problem with that, the rule became that any unlabelled disk was subject to summary destruction, by anyone who felt like it. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-02-13T23:13:57.777" LastActivityDate="2019-02-13T23:13:57.777" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="9008" PostTypeId="2" ParentId="9006" CreationDate="2019-01-30T09:00:42.803" Score="32" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;This had a lot of drawbacks, like the limited screen size, the slow Disk I/O, the limited RAM needed for the tools and your own code, etc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Those are just drawbacks of having a slower or less capable computer. As that was the norm, I don't think anyone thought much of it. Even considering that, a lot of that may be alleviated by a simple setup involving a couple of Commodore 64s and a serial connection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider Prince of Persia, that famous game for the Apple II. It was developed &lt;em&gt;on&lt;/em&gt; the Apple II. I think the author had two Apple IIs which were connected; one to type his code up, and the other to test the game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In these cases, to debug the program, something like &lt;a href=&quot;https://en.wikipedia.org/wiki/Action_Replay&quot; rel=&quot;noreferrer&quot;&gt;an Action Replay cartridge&lt;/a&gt; might be used. These essentially send an NMI to the processor, and bank in some kind of monitor ROM, so that you can inspect and/or change variables etc. Then when you're done debugging, the program can (usually) resume.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did the programmers indeed work on the target machine with all the drawbacks&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sometimes, as I have pointed out. but still, a lot of work was more easily done on paper. Back then, a lot of books were printed that showed how to design sprites on graph paper, and translate it into hexadecimal, and type the hexadecimal codes into the computer. More rarely, a digitiser was used to get the graphical data into the machine. Similarly, maps and flowcharts were a good way to think about a solution before even beginning to type any code out, as they still are.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did the programmers indeed work on the target machine with all the drawbacks, or did at least some of the dev shops have more powerfull workstations with e.g. fast harddisks and cross-assemblers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Certainly at least some dev shops used contemporaneous, but more powerful or comfortable computers. For example, &lt;a href=&quot;https://en.wikipedia.org/wiki/Tatung_Einstein&quot; rel=&quot;noreferrer&quot;&gt;the Tatung Einstein&lt;/a&gt; was commonly used to develop software titles for the ZX Spectrum or other Z80 machines. And similarly, any PC clone or CP/M computer or anything like that can be used in much the same way. That's advantageous because these machines have more RAM than the ZX Spectrum 48K, so the assembler can more easily reside with (some of) the source code and (some of the) program, all at once. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting from the late 80s, it was feasible to develop on the Amiga for the Commodore 64. Now you have the conveniences of a much faster CPU and storage, even hard disks and version control, and &lt;a href=&quot;https://archive.org/stream/1988-02-compute-magazine/Compute_Issue_093_1988_Feb#page/n81/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;Commodore 64 emulators on the Amiga itself&lt;/a&gt;. So that's not really that different from what C64 developers do today, except we're probably more likely to use Linux or Windows or whatever.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-01-30T10:45:50.823" LastActivityDate="2019-01-30T10:45:50.823" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9009" PostTypeId="2" ParentId="9006" CreationDate="2019-01-30T09:30:52.393" Score="9" Body="&lt;p&gt;Most of the &quot;professional&quot; outfits did use cross development, although they often had to build their own tools. For example they might have a Z80 assembler, but would need to make their down serial download app for the target machine to get the compiled code on there. IBM PCs and compatibles were popular for this task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also add-on cards for the 8 bit machines that made development work on them easier. These usually contained some kind of &quot;monitor&quot; application in ROM, that let the programmer freeze and inspect the state of the machine, make changes and so on. Because the application was in ROM it didn't eat up any precious RAM or interfere too much with the operation of the code being debugged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some development was done offline too. For example graphics were often sketched out on graph paper and then manually converted to numbers and programmed directly into the game.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-01-30T09:30:52.393" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9010" PostTypeId="2" ParentId="9006" CreationDate="2019-01-30T14:10:24.740" Score="13" Body="&lt;p&gt;They used cross-development kits back then too. I worked briefly in a UK game developer in 1990 and all their Commodore 64 and ZX Spectrum games were developed on a PC with a proprietary kit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See for example &lt;a href=&quot;http://www.zzap64.co.uk/zzap23/mental1.html&quot; rel=&quot;noreferrer&quot;&gt;Andrew Braybrook's diary&lt;/a&gt; covering the development of Morpheus on the C64, where they start to use Opus PCs and an Atari ST to develop on, connected to the C64 with an RS232 cable. This diary appeared in Zzap 64! magazine at the time.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2019-01-30T14:10:24.740" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9011" PostTypeId="1" CreationDate="2019-01-30T14:54:01.147" Score="14" ViewCount="1360" Body="&lt;p&gt;I've read that WordStar had a &quot;column mode&quot; which could be useful for making it act as a programmer's editor. But I've not found a clear description (or screenshots) of exactly what this mode was and what it did?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note - I'm not even sure if that is the real name of the feature, or just a description.&lt;/p&gt;&#xA;" OwnerUserId="11795" LastEditorUserId="4921" LastEditDate="2019-01-31T03:53:53.460" LastActivityDate="2019-01-31T14:06:18.627" Title="WordStar's &quot;column mode&quot;" Tags="&lt;wordstar&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9012" PostTypeId="2" ParentId="9011" CreationDate="2019-01-30T15:01:34.007" Score="9" Body="&lt;p&gt;Well, since I mentioned it, I'll illustrate it. I'm told that this is not unique to WordStar: Borland Sprint had it, and so do several modern text editors (I've been using Emacs with folds for the last 25 years). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say you have some text like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;           Production by year&#xA;       Foos   Bars  Blats  Spungs&#xA;1975      4      7     20      3&#xA;1976   1000      2     23      1&#xA;1977   3000      1   1537      0&#xA;1978   5000      4  20331      0&#xA;1979   4875    321  38145      0&#xA;1980   4900    450     37      0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is not using a column formatting feature like a modern word processor. These are just characters on simple lines of text, in a text file. They are necessarily &lt;em&gt;monospaced&lt;/em&gt; text, because CP/M, which WordStar was designed for, had no graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, you want to change the order of the columns, in this text file. It's a fiddle. However, if you have column mode, you can select, say, the Bars column, which looks like this on the screen:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;           Production by year&#xA;       Foos   *Bars*  Blats  Spungs&#xA;1975      4   *   7*     20      3&#xA;1976   1000   *   2*     23      1&#xA;1977   3000   *   1*   1537      0&#xA;1978   5000   *   4*  20331      0&#xA;1979   4875   * 321*  38145      0&#xA;1980   4900   * 450*     37      0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then you put the cursor at the start of the Spungs column, and use the Block Move command (not separate &lt;em&gt;cut&lt;/em&gt; and &lt;em&gt;paste&lt;/em&gt; commands, they hadn't been invented yet), and you get this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;           Production by year&#xA;       Foos   Blats  Bars  Spungs&#xA;1975      4      20     7      3&#xA;1976   1000      23     2      1&#xA;1977   3000    1537     1      0&#xA;1978   5000   20331     4      0&#xA;1979   4875   38145   321      0&#xA;1980   4900      37   450      0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Yes, this is far more primitive than you might do with a modern text-processing tool, or with spreadsheet columns embedded in a word-processor document. Retrocomputing, remember? &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-01-31T14:06:18.627" LastActivityDate="2019-01-31T14:06:18.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9013" PostTypeId="2" ParentId="9011" CreationDate="2019-01-30T15:06:31.587" Score="13" Body="&lt;p&gt;WordStar does indeed have a column mode, whose effect is to allow blocks to have left and right boundaries. Usually when you mark a block (using &lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;K&lt;/kbd&gt;&lt;kbd&gt;B&lt;/kbd&gt; and &lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;K&lt;/kbd&gt;&lt;kbd&gt;K&lt;/kbd&gt;), the block spans whole lines, with at most the first and last lines being incomplete. In column mode (&lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;K&lt;/kbd&gt;&lt;kbd&gt;N&lt;/kbd&gt;), the block starts at whatever line &lt;em&gt;and column&lt;/em&gt; the cursor is in when you start it, and ends at whatever line &lt;em&gt;and column&lt;/em&gt; the cursor is in when you end it. You can then manipulate the column as an object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, this would allow you to select the “Year” column below&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Year    Top salesman    Total sales&#xA;2013    Joe Bloggs      1000000&#xA;2014    Jane Doe        1500000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and move it to another position in the table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When programming, this is useful for indenting or un-indenting code, or manipulating columnar data as would be common in some programming environments in the past.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Using WordStar&lt;/em&gt; has a decent description of this feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(For readers used to modern-day column handling in word processors, this has nothing to do with page layout columns. It’s a text-selection feature which you’ll find in many text editors; see for example editors with support for rectangular block selection in &lt;a href=&quot;https://en.wikipedia.org/wiki/Comparison_of_text_editors#Basic_features&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia’s comparison of text editors&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-01-30T18:58:05.513" LastActivityDate="2019-01-30T18:58:05.513" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9014" PostTypeId="2" ParentId="9011" CreationDate="2019-01-30T15:09:43.740" Score="16" Body="&lt;p&gt;&lt;em&gt;Took me a while to write this and another answer showed up. But submitting it anyway because I am such a &lt;strong&gt;huge&lt;/strong&gt; fan of WordStar and have the keystrokes in muscle memory.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are a few different features of WordStar that made it work pretty well (for the time) as a programmer's editor. I used it (and NewWord) for many years, and then switched to &lt;a href=&quot;https://www.vedit.com/&quot; rel=&quot;noreferrer&quot;&gt;vEdit&lt;/a&gt;. I have programmed vEdit with the WordStar control-codes and used it that way for so many years that it is somewhat of a blur which features were actually native in WordStar/NewWord and which ones were not. (Well, multi-gigabyte file editing is definitely vEdit and not WordStar...)&lt;/p&gt;&#xA;&lt;h3&gt;Non-document Mode&lt;/h3&gt;&#xA;&lt;p&gt;Non-document mode was a key feature of WordStar that most other word processors never had. In non-document mode, there were no formatting codes inserted or recognized (e.g., for bold, italics, etc.), did not wrap lines automatically, and did not set the 8th-bit of characters for internal use. A quick search finds &lt;a href=&quot;http://www.wordstar.org/index.php/wsdos-documentation/130-wordstar-s-document-and-non-document-modes-demystified&quot; rel=&quot;noreferrer&quot;&gt;WordStar's Document and Non-Document Modes Demystified&lt;/a&gt; which gives a complete explanation.&lt;/p&gt;&#xA;&lt;h3&gt;Column Blocks&lt;/h3&gt;&#xA;&lt;p&gt;I think this is the feature you are referring to. I still use it today in vEdit, which as a programmer's editor quite naturally has such a feature, but I still use the WordStar codes to get to it. WordStar historically used &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;K&lt;/kbd&gt;&lt;kbd&gt;B&lt;/kbd&gt; to start a block and &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;K&lt;/kbd&gt;&lt;kbd&gt;K&lt;/kbd&gt; to end a block. Those keys worked very much like clicking on the start of a block in a typical modern word processor and holding shift while clicking on the end - block highlighted and ready to copy/move/delete.&lt;/p&gt;&#xA;&lt;p&gt;However, if you pressed &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;K&lt;/kbd&gt;&lt;kbd&gt;N&lt;/kbd&gt; first, then you entered &lt;strong&gt;column block mode&lt;/strong&gt;. In this mode the block is a rectangle instead of a continuous character stream. This is ideal for programming as you can use it to indent/undent, move chunks of data or code around left &amp;amp; right, etc.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditorDisplayName="user8725" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-31T11:34:00.897" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9015" PostTypeId="2" ParentId="8983" CreationDate="2019-01-30T15:49:05.647" Score="4" Body="&lt;p&gt;What I'm not seeing the answers here address is the tracking issue, which seems almost certainly part of what they are talking about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NASA tracks US satellites (and the shuttles when they were operational) with a couple of ground stations called &lt;a href=&quot;https://en.wikipedia.org/wiki/Tracking_and_Data_Relay_Satellite_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;TDRSS&lt;/a&gt;. These themselves use satellites, many of which were launched by Space Shuttle missions in the 1980's and '90s. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know a lot about the composition of the first TDRSS, but I worked on the system's software for the second TDRSS (STGT) from about 1989-92, so I know a bit about that system. It used a set (6ish if memory serves) of &lt;a href=&quot;https://en.wikipedia.org/wiki/VMScluster&quot; rel=&quot;nofollow noreferrer&quot;&gt;VAX clusters&lt;/a&gt;. Each cluster contained 2 full-blown VAX VMS mainframes, and a third small machine. One mainfraime in the cluster would be the master that was actually operating things, the other was a &quot;hot&quot; standby that was doing all the same work, but not transmitting, and the third's only purpose was to detect if the master crashed, and help promote the hot standby to master. Clusters themselves had hot spare clusters in case the whole cluster went down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point of this story though is that this wasn't really run by &lt;strong&gt;that&lt;/strong&gt; many computers. Low double digits of commercial VAX machines. While these weren't entry-level VAX machines, they weren't supercomputers either. &lt;a href=&quot;https://en.wikipedia.org/wiki/Digital_Equipment_Corporation#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEC sold 400,000 Vaxes&lt;/a&gt; over the product line's history. Scraping together another 12ish of them at need in 1998 probably wouldn't be an insurmountable task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, these stations were designed to track lots of space and near earth objects at once. I'm not a shuttle expert, but I don't see why adding one more of those would have broken the system. In fact, &lt;a href=&quot;https://en.wikipedia.org/wiki/Tracking_and_Data_Relay_Satellite_System#Military_applications&quot; rel=&quot;nofollow noreferrer&quot;&gt;if Wikipedia is right&lt;/a&gt;, even with one shuttle and the ISS up there simultaneously, most of the bandwidth was still reserved for US military operations&lt;sup&gt;*&lt;/sup&gt;. If the US (and not so incidentally the planet it is sitting on) were about to be destroyed, I highly suspect the US military would happily donate some of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;* - They provide a quote attributed to Space.com, but their reference link doesn't contain the quote.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="4345" LastEditorUserId="4345" LastEditDate="2019-01-30T16:09:49.837" LastActivityDate="2019-01-30T16:09:49.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9016" PostTypeId="2" ParentId="9006" CreationDate="2019-01-30T16:04:03.303" Score="21" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So, nowadays, you'd have to be crazy not to use a PC and some nice cross-development tools when targeting these old machines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To start with, I still like to use my IIgs (or IIc-plus) when coding for the Apple II. Both are quite fast machines with more than enough memory to do the job. After all, editing source text doesn't get faster with a mouse and many colours. And all the 'helpers' of modern IDE are just adding potential errors - like selecting the wrong function, just because it's so neatly presented. Yes, the Google disease of always picking the top entry has reached the programming community.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did the programmers indeed work on the target machine with all the drawbacks, or did at least some of the dev shops have more powerful workstations with e.g. fast hard disks and cross-assemblers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The '80s on small computers were an extremely fast changing environment, so there is not a single answer to this, or in other words: It depends :)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;In the very beginning cross assemblers where the norm. How else to get a program running on a new CPU? Running them on time-sharing systems wasn't about getting more luxury, but running it at all, thus avoiding assembling from hand. They were not in any way great tools or easy to handle. Don't expect something like an Arduino IDE running on a PC compiling and downloading the program in a click. We talk extremely meagre functionality, clumsy handling at high cost. And the result was just another file on that distant mainframe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was common to just dump the result to a TTY as hex (*1) and then key it into a single boarder to have it run - or into a prommer to store it and then run. People with a lot of money would have prommers able to read paper tape, punched by the TTY. Controlling all of this by hand while moving rolls of paper around was considered easy handling and fast development. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;This soon changed when development tools were moved to the machine itself. For example, one of the sales arguments for the JOLT was its &lt;em&gt;&quot;Resident Assembler Program (RAP)&quot;&lt;/em&gt; advertised with &lt;em&gt;&quot;costly time sharing services are not needed for cross assemblies&quot;&lt;/em&gt; and &lt;em&gt;&quot;The Resident Assembler Program is compatible with the MaS Technology Cross Assembler&quot;&lt;/em&gt; in their &lt;a href=&quot;http://www.bitsavers.org/pdf/microcomputerAssociates/Microcomputer_Associates_Catalog.pdf&quot; rel=&quot;noreferrer&quot;&gt;brochure&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While such a resident assembler was just a small step, more capable assemblers running on the target system (or closely related ones) became available. A notable example was Intel's ISIS systems as professional development tools. Here, an 8080 system was used to develop programs for the whole Intel line from 8023 to 8085.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, while these are dedicated developer systems, they were neither comfortable nor any faster than their targets - often slower. Heck, even early 8086 development was done on these. The 8086 boards were just used as target.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Around 1980 and for small developers, it was already a great gain to load an editor from tape, write/change the source code (loaded from tape as well), save it, load a compiler (all from tape), load the source again, compile, save the result, run it. Sure, all of this could be quite sped up by buying a disk drive - but more than doubling the system cost. An original 8KiB PET cost 800 USD, while a 2040 drive called for over 1,000 USD. And that's 1978 prices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for a more professional setup (maybe with a printer ... whooohoo) 4-6,000 USD was a reasonable number - in today's money that's 25-30,000 USD. Not exactly lunch money.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;At that point (1977-1982) it's important to remember that (Game) Development wasn't driven by big corporations with large development teams, but more often than not by single person or very small teams of 2-4 developers. It's the time soon to be important companies started at the literal kitchen table with the machine itself and a hunger to build.&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;As before the question wasn't about how inconvenient using the target machine is, but how great it would be to have a floppy at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering this, a built-in BASIC with integrated editor and interpreter and debugger in one, so only source/program has to be loaded and saved, had many advantages on early machines. A built-in IDE after all.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;No one thought at this time about having a faster machine. There was none. Using a different machine would only complicate the development process.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Soon third party developers released more integrated compiler environments to run on the target machine. One where, for example, the source could be held in memory when switching from editor to compiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And for owners of lots of RAM - like 32 KiB or even more - there were integrated programs that did hold both in memory &lt;strong&gt;and&lt;/strong&gt; the source. Who needs disks anyway? :))&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When floppies became more affordable, development tools were based around them with automated load of components. Most notably may be the UCSD p-code system (Pascal, Fortran, etc.) offering an integrated menu system to switch between components (Editor, Compiler, Linker, Debugger) with only a few key presses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar integration made Turbo Pascal in 1983/84 an unparalleled success.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With introduction of hard disks to the general public (read: becoming affordable by only doubling the machine's price) around the same time (1984...) development did really speed up. Not so much due to the hard disk speed, but missing the need to swap floppies (*2).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The PC itself wasn't a real fast machine; its advantage was a large RAM configuration and, as mentioned, easy hard disk integration. Once again it wasn't about speed, but the ability to do certain tasks at all - like fast program switching or large compilers without loading of overlays.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;All throughout the '80s, speed wasn't a thing of the CPU at all. Speed difference between slowest and fastest machines was not given in the first half and maybe 1:2 throughout the second half of the decade.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For &lt;strong&gt;a more general view&lt;/strong&gt; it's useful to keep in mind that most development until the late '80s wasn't so much about making life comfy as today, but being able to develop at all. Much as the most important feature of the (small) machines back then was to be a computer capable of running arbitrary programs at all. The choice wasn't to compile a program with one click within seconds and get a beautiful output presented, but rather being able to compile at all. Switching a disk 5 times per compile and waiting a minute or two until a 1,000 line program is compiled and linked is fun compared to no tools and no program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Looking close&lt;/strong&gt;, it's helpful to follow a rough timeline and different different use cases in mind:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Very early on, &lt;strong&gt;~1973-1978&lt;/strong&gt;, Crossdevelopment was important and often the only way, as the CPUs to be developed for weren't available in usable machines. Programm sizes where measured rather in pages of 256 Bytes than Kilobytes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When the first general available machines (Altair, Commodore, Apple, Tandy) where in use(&lt;strong&gt;1977-1980&lt;/strong&gt;), they were, for most users, far more convenient than any (expensive) cross development, not at least due the fact that programs could be developed interactive and tested right away. Still, codesize was measured in single digit KiB, and development environment and runtime were the same. Eventually a developer used additional tools in form of plug in ROMs ( TIM for Commodore or Programmers Aid#1 for the Apple II).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With the advent of dedicated home computers, roughly the time from &lt;strong&gt;1980 to 1984&lt;/strong&gt; (The Video Game Crash, *3), they became them self the best development platform for their software. Much of the code was platform dependant, and needed to be tested in place anyway. Also, the difference between these and 'professional' systems in speed where more often than not reversed. And while professional development systems had in general better storage, their RAM offerings where as small. As a result, it was more appropriate to soup up the target system - like adding floppies. Hard disks weren't an issue.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;While the PC itself didn't change much here, despite the larger memory, it was the AT of &lt;strong&gt;1984&lt;/strong&gt; and more important the 16 bit wave of &lt;strong&gt;1985&lt;/strong&gt; that changed the play field with faster machines. Development was done on the target machines itself - after all, they were at the top end of the time again.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;While now faster platforms available that could ease development for older generations, it still wasn't until the late 1980s that the needed software to emulate older machines good enough to allow satisfying cross development.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For the top end machines, development was and is done on the machines itself.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It wasn't until the mid to late 90s, when of the shelf hardware could generaly be used as cross development ... then again, it became less and less important as the hardware converged toward today's PC.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Or a loader format, which is no big difference either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - In the early '80s, before hard disks were affordable, developers often had 3 or 4 drives at their machines to reduce floppy swapping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - 1980 (To be strict christmas sales of 1979) is marked by introduction the first (dedicated, mainstream) home computers with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TI-99/4A&quot; rel=&quot;noreferrer&quot;&gt;TI 99/4&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_8-bit_family&quot; rel=&quot;noreferrer&quot;&gt;Atari 400/800&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - The often cited video game crash of 1983-1984 (With &lt;a href=&quot;https://en.wikipedia.org/wiki/E.T._the_Extra-Terrestrial_(video_game)&quot; rel=&quot;noreferrer&quot;&gt;ET&lt;/a&gt; being like the tip of the iceberg) was in most parts a US phenomena as Europe and Japan where only indirect influenced.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-01-31T18:03:37.560" LastActivityDate="2019-01-31T18:03:37.560" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9017" PostTypeId="2" ParentId="9006" CreationDate="2019-01-30T16:59:54.477" Score="12" Body="&lt;p&gt;In &lt;a href=&quot;http://www.bizzley.com/&quot; rel=&quot;noreferrer&quot;&gt;It's Behind You: The Making of a Computer Game&lt;/a&gt;, in which Bob Pape describes his process when authoring the ZX Spectrum conversion of R-Type, alongside colleagues working on Atari ST and C64 ports, he writes:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The equipment I was using to write R-Type with [initially] was the same as for Rampage, a standard 48K Spectrum with Interface 1 and microdrives and everybody's favourite hardware copying/backup device Romantic Robot’s Multiface 1. I had a copy of&#xA;OCP Editor\Assembler on the microdrive along with my source code and with a push of the button on the Multiface I could go from an empty Spectrum to one ready to assemble in just a few seconds, however the drawback to this method was that the assembler was resident in the Spectrum's memory taking up valuable RAM that I couldn't use.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So Rampage, which was released for the Spectrum in 1988, is at least one commercial piece of software from the late '80s that was developed directly on the machine that it targetted, using comparatively fast external storage and a little off-the-shelf hardware assistance for state inspection.&lt;/p&gt;&#xA;&lt;p&gt;During the course of R-Type's development:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Around this time the three of us took delivery of proper PC based development systems from Catalyst. Each of us received a then state-of-the-art Opus 80286 PC with monochrome monitor running DOS and a professional cross-development package.&lt;/p&gt;&#xA;&lt;p&gt;The business end of the PC development was handled by a PDS (Programmer's Development System) board, which was really just a parallel I/O card that would connect to the target machine (at the time a Spectrum, Amstrad or C64) via a simple interface. On the target machine you'd load a small piece of code that would sit there polling the lines and waiting for a signal supplied by a custom assembler running on the PC - as soon as you'd assembled on the PC and used the SEND Command the target machine would transfer the object code and you'd be up and running in about a second. The download code for the target machines came in three versions, 'dumb', 'smart' and 'interrupt driven' with the latter running under interrupts allowing the PC to monitor, control and even change the code on the target machine while the game was running, which wasn't really a lot of use if you were trying to write time critical code but it did have a nice line in real-time Trace functions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So R-Type, released later in 1988, was that author's turning point to cross-development, using an environment very much like the one you describe as that which you'd use today: write and build on a comparatively fast system, then test the result on the real hardware.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-01-30T18:48:30.013" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9018" PostTypeId="1" CreationDate="2019-01-30T20:58:27.170" Score="4" ViewCount="739" Body="&lt;p&gt;I am restoring a Windows 3.1 computer that has Internet Explorer 5 installed. I would like to connect it to the internet using a Linux-based laptop as an intermediary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The physical connection is working fine and is connected as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;386 -&amp;gt; RS-232 to USB adapter (COM2) -&amp;gt; Linux Laptop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have read that &lt;a href=&quot;https://linux.die.net/man/8/pppd&quot; rel=&quot;nofollow noreferrer&quot;&gt;pppd allows init and connect scripts&lt;/a&gt; for adding special logic to PPP connections, but &lt;strong&gt;I can not find any resources directly related to &quot;tricking&quot; Windows 3.1 into thinking that the laptop on the other side of the null modem cable is an ISP. Is this possible via special configuration?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some other clarifications:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I am using the IE 5 dialer&lt;/li&gt;&#xA;&lt;li&gt;IE 5 comes with full TCP/IP support when you use the included dialer&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; I got it to work, but not with the default IE 5 dialer. I ultimately had to use Trumpet Winsock to get things running, as was suggested by some users in the comments of this question.&lt;/p&gt;&#xA;" OwnerUserId="10871" LastEditorUserId="10871" LastEditDate="2019-02-20T13:51:02.453" LastActivityDate="2019-02-20T13:51:02.453" Title="TCP over RS-232 with Windows 3.1 and Internet Explorer 5 dialer" Tags="&lt;windows-3.x&gt;&lt;modem&gt;&lt;internet&gt;" AnswerCount="2" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9019" PostTypeId="2" ParentId="9006" CreationDate="2019-01-30T21:26:50.133" Score="5" Body="&lt;p&gt;Together with a friend, around 1984-1986, I developed a PCB CAD system &quot;CADsoft&quot; (not to be confused with the later company of that name, producing the Eagle CAD system) targetting the Z80 CP/M platform (with a specially-designed graphics card, &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4625/graphics-chips-in-1980/4629#4629&quot;&gt;see here&lt;/a&gt;) that was sold around 20 times, and used by some hardware companies to design the PCBs for their product portfolio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We did it in Pascal/MT+ and a few assembly routines for hardware interfacing. The resulting executable was too large to fit into the RAM, but Pascal/MT+ supported overlays to be swapped in and out on-demand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We coded on our CP/M machines, equal to the target ones:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;64 kB RAM&lt;/li&gt;&#xA;&lt;li&gt;4 MHz Z80A&lt;/li&gt;&#xA;&lt;li&gt;80*24 terminal with serial connection (9600 baud)&lt;/li&gt;&#xA;&lt;li&gt;two 800 kB floppy drives (later extended by a 20 MB SCSI hard disk)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I don't remember the editor we used, quite probably WordStar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compiling and linking the application took a few minutes, but was possible without floppy swaps, IIRC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We didn't have version control, only lots of backup floppy-disks. We did most of the coding in coordinated sessions, so the risk of accidentally modifying the same source file was reduced by oral communication.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2019-01-30T21:26:50.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9020" PostTypeId="2" ParentId="9006" CreationDate="2019-01-30T21:45:52.247" Score="4" Body="&lt;p&gt;It depends on how late into the late 80s we are talking about, and your definition of &quot;commercial titles&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By 1988-1989 got my first job developing/maintaining a C payroll package, using a Commodore 80286, running at 12MHz with 1MB of RAM (PC40?) at work, with a wooping 20MB hard disk, which was upgraded to 30-40MB a couple of months later. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was using for development Microsoft C compiler, Masm assembler and MS-DOS 3.x. The editor was SideKick for editing text files with WordStar compatible keys, and was writing a couple of routines in 8086 ASM. For compiling was still invoking Microsoft make with a carefully crafted Makefile&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The monitor was monochromatic green, Hercules, and the backups of our  source code were done in 5 1/4 floppy disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The software was delivered to the customers either in a 5 1⁄4 or  a 3 1/2 floppy disk, and later on as as a compressed zip file with an installer I wrote in batch DOS commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The customers usually used less powerful machines, there were still around a lot of XT machines and even Tandy 1000 DOS computers. (By that time I also had a Olivetti PC1 XT at home)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By that time, started writing a DOS ZX Spectrum emulator/debbuger, first versions running in Hercules at work (and CGA, later VGA at home) without keyboard input, that never released. It was capable of doing step-by-step debugging and used TASM to cross assembly Z80 ASM files. Those were the basis for my WSpecem ZX emulator for Windows, released in 1996. &lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2019-02-01T21:55:31.987" LastActivityDate="2019-02-01T21:55:31.987" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9021" PostTypeId="2" ParentId="9006" CreationDate="2019-01-30T22:25:47.413" Score="9" Body="&lt;p&gt;Like others said, it varied. Lots of small developers (like Llamasoft) programmed directly on the hardware, bigger developers used other computers to act as debuggers or cross-development systems. For example, there were a lot of cross assemblers available for the Atari ST. Atari used special hardware and Vax computers to aid in development of 2600/5200 games. The games would still run on (modified) console hardware, with the other machine connected to the console and acted as a debugger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So generally you use the bigger system to aid in development on the smaller system or develop directly on the hardware. But here's one example where a C64 was used to prepare developers for the ST:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.stcarchiv.de/stm1988/07/die-hexer-teil-1&quot; rel=&quot;noreferrer&quot;&gt;http://www.stcarchiv.de/stm1988/07/die-hexer-teil-1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Demo coders TEX, who later joined Thalion (Dragonflight, Amberstar), started programming in 68000 assembler before receiving their first Atari STs. According to the devs, they used a 68000 assembler/simulator to gain some experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jez San (Starglider) used a 68000 emulator to simplify debugging (&lt;a href=&quot;http://www.stcarchiv.de/stm1988/05/interview-jez-san&quot; rel=&quot;noreferrer&quot;&gt;http://www.stcarchiv.de/stm1988/05/interview-jez-san&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="5224" LastActivityDate="2019-01-30T22:25:47.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9023" PostTypeId="2" ParentId="9018" CreationDate="2019-01-31T08:15:57.187" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;... to &quot;tricking&quot; &lt;strong&gt;Windows 3.1&lt;/strong&gt; into thinking that the laptop on the other side of the null modem cable is &lt;strong&gt;an&lt;/strong&gt; ISP.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What dial-up software do you have?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, Windows 3.1 came without any TCP/IP support itself, but you had to install the TCP/IP support (&quot;winsock.dll&quot;) from another source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember that my provider published CD-ROMs that contained the dial-up software including TCP/IP support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have such kind of dial-up software, I doubt that it will work with any other provider. Maybe such a dial-up software will even drop the connection if it does not receive &quot;special&quot; IP packets &lt;strong&gt;after&lt;/strong&gt; the PPP connection has been established.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have some dial-up software that works with any provider but requires a dial-up modem, you could write some C/Perl/Python/Java/... program that emulates a modem dial-up phase:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incoming bytes from the standard input are ignored until you see &quot;A&quot;+&quot;T&quot;. You remember the next byte; if it is not CR, you wait until you receive CR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the byte following the &quot;A&quot;+&quot;T&quot; was a &quot;D&quot;, you write &quot;CONNECT&quot;+CR+LF to the standard output and exit the program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise you write &quot;OK&quot;+CR+LF and continue waiting for &quot;A&quot;+&quot;T&quot;... (the entire program is an endless loop which only ends if &quot;A&quot;+&quot;T&quot;+&quot;D&quot; is seen).&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2019-01-31T08:15:57.187" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9025" PostTypeId="2" ParentId="9006" CreationDate="2019-01-31T13:21:18.307" Score="6" Body="&lt;p&gt;A friend of mine did the C64 conversion of &lt;a href=&quot;https://www.c64-wiki.com/wiki/Tetris&quot; rel=&quot;noreferrer&quot;&gt;Tetris for Mirrorsoft&lt;/a&gt;.  AFAIR he used the game was supplied, pre-written, in Commodore Basic, which was then compiled, then he used a disk-based assembler for the graphics and sound (he wrote his own sound player and composer app, which the composer user to supply the music) and assembled everything, all on a single C64 in his bedroom.  Not sure how long each 'compilation' took, but I remember watching him play clarinet, whilst waiting for the disk to stop whirring, which signalled it was ready to play-test.&lt;/p&gt;&#xA;" OwnerUserId="5381" LastActivityDate="2019-01-31T13:21:18.307" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9026" PostTypeId="1" AcceptedAnswerId="9027" CreationDate="2019-01-31T18:26:55.080" Score="10" ViewCount="4040" Body="&lt;p&gt;As far as I know, even simple RISC microcontroller have a bitshift operator, and honestly I had to use it only once when I had to compute a division on a MCU that could not do divisions in the ALU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were the bitshift operators included so it was possible, even with very simple ALU, to efficiently compute the multiplication, the division and the square root?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm wondering this because that was how it was done on mechanical calculators, so looks plausible to me that first processors somewhat mimicked existing technologies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not asking what are the use of bitshift operators, but the reason why they were included back then. As every operation added had a cost in components, I imagine that they were striving for the smallest possibile number of components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the question is whether the bit shift operators are an innovation added when computers were put on a chip or whether very early CPUs also had these operators. And if so, why were they included in the instruction repertoire of early CPUs? What value did they add? (paragraph proposed by Walter Mitty)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My line of thought was that, since early computers were created to speed up the work made by human computer, who used mechanical calculators (which shift values to perform calculations), it was plausible to me that electronic computers were designed to use, at least partially, existing algorithms. I made this question because I wanted to know if there is some truth in this or I was completely wrong.&lt;/p&gt;&#xA;" OwnerUserId="11819" LastEditorUserId="11819" LastEditDate="2019-02-02T11:34:12.017" LastActivityDate="2019-02-04T09:29:58.713" Title="What was the main purpose of bitshift instructions in CPU?" Tags="&lt;instruction-set&gt;&lt;alu&gt;" AnswerCount="5" CommentCount="26" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9027" PostTypeId="2" ParentId="9026" CreationDate="2019-01-31T18:58:04.687" Score="41" Body="&lt;p&gt;Some uses for a bitshift operation:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;implementing a more efficient multiplication than repeated adding&lt;/li&gt;&#xA;&lt;li&gt;implementing division algorithms&lt;/li&gt;&#xA;&lt;li&gt;implementing an algorithm for &lt;a href=&quot;https://eli.thegreenplace.net/2009/03/21/efficient-integer-exponentiation-algorithms&quot; rel=&quot;nofollow noreferrer&quot;&gt;exponentiation of integers by other integers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;bitwise algorithms e.g. &quot;how many one bits in this integer&quot;&lt;/li&gt;&#xA;&lt;li&gt;fast multiplication and division by powers of 2 including indexing arrays of integer types (which tend to have sizes of a power of 2 of bytes).&lt;/li&gt;&#xA;&lt;li&gt;sending and receiving data on serial lines.&lt;/li&gt;&#xA;&lt;li&gt;manipulating bit fields within larger types. &lt;/li&gt;&#xA;&lt;li&gt;extracting portions of a combined type and aligning them into new types (Raffzahn)&lt;/li&gt;&#xA;&lt;li&gt;manipulating the fields of a software floating point implementation (e.g. aligning the mantissa for addition and normalising the same after any arithmetic operation) (Tommy)&lt;/li&gt;&#xA;&lt;li&gt;Accessing the digits in packed BCD formats (i.e. two digits per byte) (Raffzahn)&lt;/li&gt;&#xA;&lt;li&gt;Aligning the decimal point in fixed point arithmetic (davidbak)&lt;/li&gt;&#xA;&lt;li&gt;cryptography (forest, tofro)&lt;/li&gt;&#xA;&lt;li&gt;Aligning rasterised packed bitmaps when blitting them to screen memory (user3570736)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These are just off the top of my head. I'm sure you'll get many answers that include other uses for bit shifts.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm not asking what are the use of bitshift operators, but the reason why they were included back then&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As I hope you can see from the list, even &quot;back then&quot; bit shift operations were regarded as extremely useful. In particular, it would be hard to write an efficient software multiplication routine without bit shifts.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2019-02-04T09:29:58.713" LastActivityDate="2019-02-04T09:29:58.713" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="9028" PostTypeId="2" ParentId="9018" CreationDate="2019-01-31T20:02:26.783" Score="0" Body="&lt;p&gt;When I did this back in the day, I had a &quot;normal&quot; dial up Unix shell session.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I was able to do was call up normally, and get to a shell prompt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that point, I'd execute pppd on the server, from the command line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, on my Unix system, I fired up client software telling it use the serial port I was using for the modem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that point I had connectivity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;pppd works on both ends, it's both the client and the server.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You simply need to have pppd listening on the serial line that you have from the incoming side of the process, and then have your client open the serial port on the client. You don't need dial scripts, since you're not dialing -- you have no modem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point, it may Just Work. I'm just not familiar enough with your client package to give hints on how to pull it off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While there's 32,768 options for pppd, when I used it was very simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were running a linux box on both ends, and tried to share on /dev/tty1 on each, it's close to as simple as typing &quot;pppd tty1 19200&quot; on both machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You just need to figure out how to get your &quot;dial&quot; software to work. If it's assuming there's always a modem on the other side, you'll have trouble (though you might be able to create a &quot;connect script&quot; on the server side to make it LOOK like a modem (i.e. accept modem commands, and return appropriate replies).&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2019-01-31T20:02:26.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9029" PostTypeId="1" AcceptedAnswerId="9032" CreationDate="2019-01-31T21:54:48.590" Score="3" ViewCount="485" Body="&lt;p&gt;Like most people, I grew up in the 1980s, and bore whitness to the great 8-bit home computer revolution. From where I'm sitting, &quot;computers&quot; started with slow 8-bit machines just powerful enough to run non-trivial software, and slowly evolved to gradually add things like hardware-accelerated multiplication, FPUs, memory protection, virtual addressing, virtual memory, premptive multitasking, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I'm slowly discovering that there was also a secret, hidden world of mainframes and minicomputers, some of which &lt;em&gt;already had&lt;/em&gt; such advanced features, in some cases decades earlier. I guess I had always assumed that since mainframes came before microcomputers, the mainframes must have been &lt;em&gt;even more&lt;/em&gt; primitive than the early 8-bit home computers — but it seems I was wrong!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Indeed, it seems some of the earliest computers around already had really quite wide data paths (which is odd, considering some poor soul had to manually wire them all by hand, one at a time). I always thought it was only when VLSI made it possible to put thousands and thousands of components into a tiny space that people started making really wide busses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now obviously, I imagine one could easily fill entire books about the history of advanced computing hardware. (For all I know, those books might even have already been written!) But can anyone &lt;em&gt;summarise&lt;/em&gt; approximately when the following became generally available:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Hardware interrupts. (Presumably the earliest machines didn't have these.)&lt;/li&gt;&#xA;&lt;li&gt;A hardware call stack. (Ubiquitous today, but I gather that's comparatively recent.)&lt;/li&gt;&#xA;&lt;li&gt;One-instruction integer multiplication.&lt;/li&gt;&#xA;&lt;li&gt;Hardware-accelerating floating-point arithmetic.&lt;/li&gt;&#xA;&lt;li&gt;Virtual addressing (i.e., a programmable mapping from program addresses to physical memory).&lt;/li&gt;&#xA;&lt;li&gt;Virtual memory (i.e., using secondary storage to transparently simulate primary storage).&lt;/li&gt;&#xA;&lt;li&gt;Memory protection.&lt;/li&gt;&#xA;&lt;li&gt;Processor privilege levels (i.e., the OS can prevent user programs from doing things at the hardware level).&lt;/li&gt;&#xA;&lt;li&gt;Premptive multitasking. (OK, this one is more of an OS feature... but it still requires hardware resources to implement.)&lt;/li&gt;&#xA;&lt;li&gt;Garbage collection. (I'm guessing this came in with Lisp, but I still don't know when that was...)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note that I'm not asking which one, specific machine did any of these &quot;first&quot;. I'm asking when they became features that were at least moderately widely implemented (i.e., not obscure).&lt;/p&gt;&#xA;" OwnerUserId="11695" LastActivityDate="2019-02-08T21:15:39.357" Title="History of advanced hardware" Tags="&lt;history&gt;&lt;hardware&gt;&lt;mainframe&gt;" AnswerCount="3" CommentCount="17" ClosedDate="2019-02-01T10:13:15.620" ContentLicense="CC BY-SA 4.0" />
  <row Id="9030" PostTypeId="1" AcceptedAnswerId="9039" CreationDate="2019-01-31T22:11:02.377" Score="6" ViewCount="555" Body="&lt;p&gt;I've just been watching a rather interesting series of videos about the MITS Altair 8800. It has a button on the front panel to single-step the CPU one instruction at a time... Except that, on closer inspection, that's not actually what it does. What it &lt;em&gt;actually&lt;/em&gt; does is convince the CPU that there's bus contention, preventing it from executing the next &lt;em&gt;bus cycle&lt;/em&gt; until you press the button. So an instruction might actually take multiple steps, or none at all. (Well, other than to fetch the opcode.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's a slightly strange way of doing things. I came away with the following hypothesis:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Big mainframes and minicomputers were explicitly designed from the start to allow instruction single-stepping, and made specific hardware design decisions to support this.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The cost-optimised Intel 8080 IC that powers the Altair was &lt;em&gt;not&lt;/em&gt; designed to support single-stepping, so the people at MITS had to come up with a kludge to make a CPU &quot;single step&quot; when it wasn't really designed to support that.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is that approximately right? It sounds plausible to me, but then, I'm just making stuff up, so maybe I'm completely mistaken...&lt;/p&gt;&#xA;" OwnerUserId="11695" LastActivityDate="2019-08-24T11:12:00.537" Title="Single-stepping the Altair 8800" Tags="&lt;hardware&gt;&lt;altair-8800&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9032" PostTypeId="2" ParentId="9029" CreationDate="2019-01-31T23:21:11.880" Score="8" Body="&lt;p&gt;None of these answers are guaranteed to be the first computer with the feature mentioned, but they're the first I'm aware of.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Hardware interrupts. (Presumably the earliest machines didn't have these.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;None of the machines of the 1940s had them.  They were available on later models of the IBM 709 for IO channel events in the late 50s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-1 minicomputer from 1960 had interrupts.  (I had described this as an option, but it seems all of them came with it.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There &lt;a href=&quot;https://virtualirfan.com/history-of-interrupts&quot; rel=&quot;noreferrer&quot;&gt;is a fascinating article here&lt;/a&gt; about the history of interrupts.  It cites the NBS DYSEAC of 1954 as the first machine with IO interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially all computers had them by the late 1960s.  They even managed to cram interrupts into the tiny PDP-8.  The original Intel 8008 processor had interrupts in a limited form, and almost all general purpose microprocessors since have had them.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A hardware call stack.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Burroughs B5000 series introduced in 1961 was designed exclusively for high level languages.  It was a stack machine with separate call and data stacks.  So was the English Electric KDF-9 from 1964.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As noted in the comments, the PDP-6 of 1964 included a number of stack-oriented operations.  The PDP-11 of 1970 was one of the first minicomputers with hardware stack support.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware stacks were common on all new designs, including microprocessors, from about the mid-70s until the RISC era.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One-instruction integer multiplication&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The IAS machine and its clones of the late 1940s had a hardware multiplier and a multiply instruction.  The IBM 701 was an IAS clone and IBMs 7xx family all had hardware multiply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These instructions generally took a good number of cycles, and multiplication was slower than addition.  Even the original Pentium took its time at multiplication when compared to addition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware multiply was common on all mainframes from the beginning, most minicomputers of the late 1970s (and as an option before that), and it worked its way into microprocessors around 1978 with processors like the 68000 and 8086.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Hardware-accelerating floating-point arithmetic.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Zuse's relay machines of the 1940s used floating point arithmetic internally.  The IBM 704 of 1952 was the first serially-produced machine with hardware floating point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most mainframes had hardware floating point, sometimes as an option early on.  Some low-end models implemented it entirely in slow microcode.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was often available on minicomputers as an option.  It wasn't until the 1990s that commodity microprocessors like the 486DX or 68040 came standard with floating point.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Virtual memory &amp;amp; Virtual Addressing &amp;amp; Memory Protection &amp;amp; Processor Privilege Levels&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;All honours go to the Manchester Atlas of 1960.  It used a system very similar to modern designs.  There were supervisor and user modes, with virtual memory backed by paging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CTSS on the IBM 7090 in close second place in 1961.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They became commonplace on the System/360, and a number of minicomputers implemented it from around 1970 as well.  It was not common on commodity microprocessors until the Intel 386.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Preemptive multitasking&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As we would understand it today, the Manchester Atlas also has a good claim for this one.  But a number of systems of the 1950s were developed which had something akin to threading, and hopped between multiple tasks driven by a hardware interrupt.  The massive AN/FSQ-7 is an example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was common on mainframe operating systems from the late 1960s, and minicomputers aimed at time-sharing would support it from about 1970 on as well.  It did not become common in microcomputer operating systems until the 1990s, although technically possible to implement on even the earliest processors like the 8080 or 6800.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Garbage collection.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You're right.  LISP gained this around 1960.  It has shown up in various languages ever since.  Given the overhead particularly with memory, it didn't become very common until the late 1980s.  Even in the 1990s, the fact that Java is garbage-collected was a source of some controversy.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of hardware support for garbage collection, that was probably Lisp machines.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2019-02-01T06:20:24.563" LastActivityDate="2019-02-01T06:20:24.563" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9033" PostTypeId="2" ParentId="9029" CreationDate="2019-01-31T23:26:43.220" Score="3" Body="&lt;p&gt;Preface: &lt;em&gt;Since this question is &lt;strong&gt;way&lt;/strong&gt; to broad, I will not go into depth of the points but try to address a rather general background.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;However, I'm slowly discovering that there was also a secret, hidden world of mainframes and minicomputers, some of which already had such advanced features, in some cases decades earlier.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Very true&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I guess I had always assumed that since mainframes came before microcomputers, the mainframes must have been even more primitive than the early 8-bit home computers — but it seems I was wrong!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is more due to different development timing, but equally due to different requirements.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Mainframes developed out of an early one (or a few) of a kind computers which, in hindsight could be rather considered prototypes - and with these prototypes many of the developments you mention were tried, so when mainframes went into wider usage (and soon matured), everything was there from the start of real widespread use.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Micros in contrast are more like minis before them, taking a step back from building a nice full figured computer and instead building one as minimal as possible to cut cost down and make them available to a wider range of applications - and customers. Customers that could live with many restrictions, as even the most awkward computer is way better than having no computer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Indeed, it seems some of the earliest computers around already had really quite wide data paths (which is odd, considering some poor soul had to manually wire them all by hand, one at a time).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(It wasn't that hard, as everything was quite well documented - paired with good testing equipment backplane wiring (which I guess is the real issue here) high quality could be delivered in time and price - and even repairing and field patches were rather convenient)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I always thought it was only when VLSI made it possible to put thousands and thousands of components into a tiny space that people started making really wide busses.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. It's quite the other way around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making wide busses was the best way to speed up mainframes. Doubling bus width doubles memory access speed without the need for any faster component. Similar wide ALUs increased speed the same way. But while extending ALU width beyond to base word size (like 16 or 32 bit) will not speed up anything, doing so with memory does continue way longer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This became even more important when integration did speed up the CPU core, while memory (at least at the amount needed for ever growing tasks) was still comparably slow core. That way memory interfaces for mainframes already reached 128 and 256 bit (16 or 32 byte) in the mid to late 1970s - this remained important even after introduction of semiconductor main memory, as the core grew even faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sounds familiar, doesn't it? Microprocessors did go the same way over the last two decades. Some 30+ years after mainframes did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, as said before, minis and even more so micros where all about cutting resources down to a level to allow (basic) implementation in just a few TTLs or a single IC. Get busses and ALU (and register) size down to the minimum requirement was a great way to do so.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Note that I'm not asking which one, specific machine did any of these &quot;first&quot;. I'm asking when they became features that were at least moderately widely implemented (i.e., not obscure).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is often the same - or, in most cases it means just pointing to the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM /360&lt;/a&gt;ff :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, it is true that many features had first implementation before the /360, and these computers where sold and produced in more than one unit, the real break thru for many of the points came with IBM's /360. An instant success and guideline for any further mainframe development. One may go so far and make this the point in time where the name and structure for 'mainframe' was settled for good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was &lt;a href=&quot;https://en.wikipedia.org/wiki/Gene_Amdahl&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gene Amdahls&lt;/a&gt; skills (*1) that took all these different developments - and even more all the way different expectations that grew out of various incompatible designs IBM did before - and forged it into a single architecture, one that is now built, sold and operated for more than 50 years - and still going strong when it's about data shovelling :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The asked for timeline in total may look like this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1930s - Single Instruction Integer Multiplication&lt;/li&gt;&#xA;&lt;li&gt;1940s - Hardware Floating Point (even binary)&lt;/li&gt;&#xA;&lt;li&gt;1950s (late) - Virtual Memory&lt;/li&gt;&#xA;&lt;li&gt;1950s (late) - Privilege Levels&lt;/li&gt;&#xA;&lt;li&gt;1958 - Hardware Interrupts&lt;/li&gt;&#xA;&lt;li&gt;1960s (early) - Memory Protection &lt;/li&gt;&#xA;&lt;li&gt;1960s (early) - Preemptive Multitasking &lt;/li&gt;&#xA;&lt;li&gt;1962 - Hardware Call Stack&lt;/li&gt;&#xA;&lt;li&gt;1962 - Virtual Addressing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And all of this in one machine would be 1964 and the IBM /360.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Ok, as usual I have a hard time to hold myself jumping onto such easy targets - so lets give it some quick words)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Hardware interrupts. (Presumably the earliest machines didn't have these.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Only the very very first - and definitely way before anything that wasn't a one of a type. Interrupts in the modern sense became an imperative, as soon as overlapping I/O was introduced. One of the first produced machine series  to do so was the IBM 709 (still a tube computer) in 1958 - which also maybe qualifies as the first CPU with a co-processor, as the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_709#I/O_channel&quot; rel=&quot;nofollow noreferrer&quot;&gt;I/O-Sequencer&lt;/a&gt; did handle the I/O requests in parallel to the CPU.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A hardware call stack. (Ubiquitous today, but I gather that's comparatively recent.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Burroughs B5000 in 1962 (?) might qualify as an early production example. It never really caught on with mainframes. For minis (and more so later micros) it was again a way to cut down on instruction set. A 'software' stack as linked list is in many ways superior to a hardware stack (and yes, there where mainframes like the Siemens X series offering linked list instructions for fast management of such a stack)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One-instruction integer multiplication.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Already way before series produced machines. And depending on the view point even before modern computers as well. Mechanical punch card calculators like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Dehomag&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dehomag&lt;/a&gt; D11 of 1936 could do so (The D11 could do more than one multiplication at the same time. Its predecessor BK of 1934 had multiply as well, but only one at a time and only as part of a specialized extension for utility companies called BKZ). Except with their block (card) based program structure laid out as plugboard is hard to split up in terms of 'instructions'.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Hardware-accelerating floating-point arithmetic.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This even predates integer - at least when it comes to computers, as Zuse's machines where all FP based, read the very basic data type handled in hardware was FP, no character and no integer at all.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Virtual addressing (i.e., a programmable mapping from program addresses to physical memory).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The idea has been described in the mid 1950s and first implemented at the end of the 50s in England (Atlas) and as production machine with the Burroughs B5000 of 1962 - except it might have been more of a swapping concept IIRC. Another great contender (as another-dave &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/9036/6659&quot;&gt;reminds me&lt;/a&gt;) would be the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ferranti-Packard_6000&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ferranti-Packard 6000&lt;/a&gt; as well of 1962. While that machine did not sell remarkably well, the &lt;a href=&quot;https://en.wikipedia.org/wiki/ICT_1900_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;ICT/ICL 1900&lt;/a&gt;, a follow-up design did have a widespread usage in GB and its former colonies. Its exceptional success even made IBM offer a micro code set for the mid range &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/370_Model_145&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM /370-145&lt;/a&gt; to be able to run ICL programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real break thru with all workings like today might be attributed to IBM's /360 model 67 in 1965 and RCA's &lt;a href=&quot;https://en.wikipedia.org/wiki/RCA_Spectra_70#Model_70/46&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spectra 70 Model 46&lt;/a&gt; in 1966&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Virtual memory (i.e., using secondary storage to transparently simulate primary storage).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This even predates virtual addressing in form of overlay management.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, development had to advance first to make this issue arise at all. Early mainframes had drum memory as main memory, so for most parameters there was no differentiated storage concept. Later, when faster memory became available it was even the other way around, as some drum content could be held in core - until core finally took over. At that point overlay management, made possible by the introduction of relative addressing against a base register, allowed early virtual memory concepts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here (as well as  with virtual addressing) often the CTSS, running on an IBM 709x (transistorized version of the 709), is cited as first, and in an academic sense it might be. Then again, swapping out a user (program) to &lt;strong&gt;tape&lt;/strong&gt; isn't anything I do consider adequate. It took a few more years to make that work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So then it is about a complete system, usable for every day tasks the /360 will make points. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Memory protection.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again the IBM system /360 made the mark as first wide usage here by adding the ability to assign a memory key to each page (4 KiB) and have an active memory key that is compared to the page key with every access.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Processor privilege levels (i.e., the OS can prevent user programs from doing things at the hardware level).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Prevalent since the 1950s, and again the /360 would mark its terrain here in 1964 :)) &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Premptive multitasking. (OK, this one is more of an OS feature... but it still requires hardware resources to implement.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not much. As soon as there is some way to interrupt, how infrequent ever, preemptive multitasking can be made. In fact, today we subsume several features under preemptive that are not necessarily a must.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, early schedulers where based on fixed priorities. For example with a rather simple scheduler model the /360 could offer a feature to handle up to 15 &lt;em&gt;'program counters'&lt;/em&gt;. Well, not real ones, the mechanics where tied to the same way memory protection was done, but virtual ones. They had a strict priority from 15 to 1. Whenever one did go into a waiting state - usually by issuing an I/O operation, the next lower, non waiting PC was given control. Either until this program did run into an I/O situation, or completion of an I/O operation of a higher PC was messaged (by a completion interrupt) and that PC was resumed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole idea wasn't so much about offering equal computing power to a multitude of users (or programs) but to use the time a machine otherwise would wait for slow I/O like reading the next card, tape or disk block. So the goal wasn't to supply many virtual machines, but keeping utilisation of the expensive tool as close to 100% as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is BTW a great example, that history isn't always as simply comparable as one may assume. Motivation and target set may have been totally different from today - even when it led to development of very similar mechanics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, while preemptive multitasking was possible on mainframes already since the early 1960s, it only gained traction very late in the 1970s. That's about the time when the requirements slowly moved to allow more and more programs handled in parallel at the same time with real time response - and the CPUs also gained enough power to do so.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Garbage collection. (I'm guessing this came in with Lisp, but I still don't know when that was...)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And not really a computer feature at all (if we exclude way exotic CPUs like the i432 that included hooks to support garbage collection of high level languages)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - See how hard I try to avoid the term genius? If I got a paragon of computing it's for sure Mr. Amdahl - on par with Woz, Bauer and Wirth.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2019-02-08T21:15:39.357" LastActivityDate="2019-02-08T21:15:39.357" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9034" PostTypeId="2" ParentId="9030" CreationDate="2019-01-31T23:35:32.487" Score="3" Body="&lt;p&gt;From the &lt;a href=&quot;http://chiclassiccomp.org/docs/content/computing/MITS/MITS_Altair8800TheoryOperation_1975.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Altair 8800 Theory of Operation Manual &amp;amp; Schematics 1975&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Single Step circuit consists of a dual single shot (IC M) for debounce&#xA;  and the SGL STP flip-flop (R-S type). When the machine is in a stopped&#xA;  mode, depressing the SS switch will set the SGL STP flip-flop. (The machine&#xA;  must be stopped for any of the front panel switches except RESET to be&#xA;  active.) This allows PRDY to go high. The machine will execute one machine&#xA;  cycle and PSYNC, on the next cycle, will reset the SGL STP flip-flop. This&#xA;  will pull PRDY low, stopping the machine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm sure someone will come along with a far more detailed &amp;amp; complete explanation. But it looks to me like this was a useful side effect of other circuitry designed to tell the CPU to wait while DRAM refresh or other things were going on. End result - &quot;cycle&quot; rather than &quot;instruction&quot;. But it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect some of the confusion comes from the similar, but slightly different, operation of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Debugger&quot; rel=&quot;nofollow noreferrer&quot;&gt;software debugger&lt;/a&gt;. A software debugger can use any combination of virtualization, hardware assistance at some level (whether CPU-based or additional hardware) or even a &lt;a href=&quot;https://en.wikipedia.org/wiki/Instruction_set_simulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;simulator&lt;/a&gt;, or just some well-written software (i.e., that causes a return to the debugger program following each and every &quot;real&quot; instruction) to single-step through a program. A debugger, by its nature, works on full CPU instructions. It can't split them up because it is operating at a higher level (unless it is an extremely sophisticated simulation). But a hardware-level single-step process, like in the Altair, can function on machine cycles rather than CPU instructions. I think that could be extremely useful when debugging hardware problems, which in the new-at-the-time ecosystem of 8-bit microprocessors, probably happened quite a bit.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="357" LastEditDate="2019-08-24T11:12:00.537" LastActivityDate="2019-08-24T11:12:00.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9035" PostTypeId="2" ParentId="9026" CreationDate="2019-01-31T23:58:22.203" Score="11" Body="&lt;p&gt;Then you  haven't done any embedded work, or anything to do with comms or protocols.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're working with embedded code, you need a way to get values into specific bits in a register. This is true even for the base processor, but especially so for microcontrollers which have extra registers to control the I/O, and for data going to and from devices such as ADCs and DACs. Bitwise operations are essential here, including bit shifting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an example of where this is important, I've recently been working with an ADC where the top 3 bits of its 24-bit register specify which of the 8 channels to convert. How would you turn a channel number (0-7) into the appropriate bits in this register, or vice versa, without a bitshift? You could use integer multiplies and divides, but that would be stupidly wasteful given the time those instructions take.  (And under the surface, those instructions are using bitshifts themelves anyway!)  Technically you could also use a case statement or lookup for each channel number, but that doesn't scale well - don't try using a 16-billion-term case statement to extract individual colours from a 24-bit RGB value!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the same way, comms protocols regularly pack data into individual bits, especially in packet headers. Again, you need a way to get a number from a variable into any arbitrary group of bits in your protocol bytes, or vice versa. And the same problem has the same solution - you need bitshifting.&lt;/p&gt;&#xA;" OwnerUserId="6749" LastEditorUserId="6749" LastEditDate="2019-02-01T11:20:15.817" LastActivityDate="2019-02-01T11:20:15.817" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9036" PostTypeId="2" ParentId="9029" CreationDate="2019-02-01T00:44:54.010" Score="0" Body="&lt;p&gt;A lot of that showed up in the 1950s and 1960s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I/O interrupt -supposedly DYSEAC, 1954.&#xA;(Some prior computers had traps for various purposes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware call stack - don't know the first, but KDF9 had one in 1960. But note 'call stack' and 'activation record stack' are not the same thing, and nor is 'expression evaluation stack' (KDF9 had the latter, too).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Virtual addressing, memory protection - seems like datum-and-limit has been around forever. Ferranti-Packard FP6000 had it in 1959  The two go hand-in-hand: the datum relocates &quot;program address X&quot; to &quot;physical address Y&quot; and the limit keeps the program's accesses in its allocated memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Virtual memory - Atlas (1962).  It had privilege levels too, not sure whether it's a first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Preemption - well, all you need for that is a timer interrupt.  CTSS in 1960 on a modified 7090, maybe?&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-02-01T00:44:54.010" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9037" PostTypeId="2" ParentId="9026" CreationDate="2019-02-01T01:27:06.997" Score="7" Body="&lt;p&gt;Along with the many uses of bitshifting (multiplying and dividing by powers of 2, bitmasks, etc.), bitshifting is also very cheap to implement: a simple implementation uses one multiplexer per bit to logical shift for each direction. Adding arithmetic shift is easy too: arithmetic left shift is identical to logical left shift, while arithmetic right shift only requires filling in shifted bits with the MSB. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Designers of old CPUs like the Z80 and MOS 6502 could afford to put in a little bit of extra logic, while &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary_multiplier&quot; rel=&quot;noreferrer&quot;&gt;hardware multiplication&lt;/a&gt; was significantly more resource-intensive and thus expensive. For example only the last 8-bit CPUs had hardware multiplication (notably Motorola 6809, the soon released 16-bit Motorola 68000 had multiplication instructions as well).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a straightforward 3 bit logical left shifter (only 3 8-bit multiplexers are needed): &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fF7Qh.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fF7Qh.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8230" LastActivityDate="2019-02-01T01:27:06.997" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9038" PostTypeId="2" ParentId="9006" CreationDate="2019-02-01T01:41:51.997" Score="6" Body="&lt;p&gt;I'll answer for me, as someone who did a few games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the C64, I used a stock machine with a floppy drive and an assembler, I forget the product. If I recall correctly, the assembler came on cartridge and let you write assembly language as an extension of Basic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the ZX Spectrum, I had a CP/M machine (Memotech) with dual floppies and a C compiler / assembler / linker toolchain. I then had some code to hexdump the (fixed location) linker output and send it down a custom interface into the Speccy (this definitely took a cup of (instant) coffee while it loaded). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Incidentally, when I grew up and became a firmware engineer with real budgets, my stack of choice involved an in-circuit emulator, EPROM emulator, logic analyser and PDP-II to run compilation, mostly controlled by a bank of VT-100 type terminals. You could have used such a thing to develop 8-bit home computer apps if you had the funds]&lt;/p&gt;&#xA;" OwnerUserId="5276" LastActivityDate="2019-02-01T01:41:51.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9039" PostTypeId="2" ParentId="9030" CreationDate="2019-02-01T02:15:28.223" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It has a button on the front panel to single-step the CPU one instruction at a time... Except that, on closer inspection, that's not actually what it does.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly, and it's not what the button is intended to do. The purpose is not to single step &lt;em&gt;an instruction&lt;/em&gt;, but to single step &lt;em&gt;a cycle&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;That's a slightly strange way of doing things.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it's exactly what what is needed. For one, single stepping an instruction sounds nice for software developers, but less when it's about hardware, and that's what a CPU (and the Altair) is about. With cycle stepping the user is able to see every machine cycle and how the bus reacts displayed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a closer look, this is exactly what you want as well as a software developer.  The &lt;a href=&quot;http://s100computers.com/Hardware%20Folder/IMSAI/8080%20CPU/8080.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Altair CPU&lt;/a&gt; is an extreme bare bone construction. Just the CPU itself, a clock generator, an 8 bit port and a bit of glue logic. These switches and LEDs are your interface to the machine. Your terminal and your debugger. And all debugging functions there are. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;There is no monitor program&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking close you won't find any button to read out a register (like on a mainframe) or modify them. All you can do is look at the content of a memory address, modify it, and single step the CPU. And that's exactly how you follow the execution of a program and examine its workings.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First you see the address of the instruction fetched - go decode it from memory.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If the operation has parameters:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You'll see address and value of all operands fetched (one byte per step) - remember it&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If the instruction does some memory access:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You'll see what address the CPU accesses and what values are read or stored.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you remember all of this, your imagination will show you a debugger line of the instruction executed including all memory fetches and reads or writes. Cool, isn't it? And none of this would be visible if the button would be to single step on instruction level. All shown would be address and opcode of the next instruction to be executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, this computer operates at the lowest end possible. No software preloaded. Getting a PROM with some monitor program would have been an additional investment and another board to plug in - not to mention the need to buy a terminal of some sort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering this it's amazing how much can be done by just looking at each cycle. And here also a major difference to mainframes is to be seen. Mainframes don't eat and execute instructions on a byte level, but fetch whole instructions and then execute them. In so far a mainframe works more like a RISC CPU than a classic microprocessor.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The cost-optimised Intel 8080 IC that powers the Altair was not designed to support single-stepping, so the people at MITS had to come up with a kludge to make a CPU &quot;single step&quot; when it wasn't really designed to support that.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. As explained, MITS did use this to allow program development and debugging on a very low hardware level, without any software involvement and still be able to provide &lt;em&gt;some&lt;/em&gt; information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the CPU's point of view it would have been no issue to implement single stepping on instruction level as well. All needed to provide this is using the &lt;code&gt;M1&lt;/code&gt; signal provided by the CPU instead of &lt;code&gt;PSYNC&lt;/code&gt; (as the &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/9034/6659&quot;&gt;excerpt provided in manassehkatz' answer&lt;/a&gt; describes) to reset the single step flip-flop. Of course now, no useful information beside instruction address and opcode can be derived.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="357" LastEditDate="2019-08-24T11:09:39.643" LastActivityDate="2019-08-24T11:09:39.643" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9040" PostTypeId="1" AcceptedAnswerId="9064" CreationDate="2019-02-01T06:31:04.953" Score="12" ViewCount="907" Body="&lt;p&gt;Here is a photo of a Univac I with four individuals. According to &lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102741216&quot; rel=&quot;noreferrer&quot;&gt;Artifact Details&lt;/a&gt; at the Computer History Museum's web page with an extremely similar photo (perhaps a shot a few moments earlier/later):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Date: 1957&lt;/p&gt;&#xA;&lt;p&gt;Description: Image shows operator's console of Univac I computer and four programmers. From left to right, Donald Cropper, K. C. Krishnan, Grace Hopper, and Norman Rothberg.&lt;/p&gt;&#xA;&lt;p&gt;Lot Number: X7424.2015&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The image can also be found at&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Flickr: &lt;a href=&quot;https://www.flickr.com/photos/publicresourceorg/493885707&quot; rel=&quot;noreferrer&quot;&gt;public.resource.org&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Wikiquote: &lt;a href=&quot;https://en.wikiquote.org/wiki/File:Grace_Hopper_and_UNIVAC.jpg&quot; rel=&quot;noreferrer&quot;&gt;File:Grace Hopper and UNIVAC.jpg&lt;/a&gt; (full and cropped)&lt;/li&gt;&#xA;&lt;li&gt;Twitter: &lt;a href=&quot;https://twitter.com/ieeehistory/status/968200097698742272&quot; rel=&quot;noreferrer&quot;&gt;IEEE History Center&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;WW2DB: &lt;a href=&quot;https://ww2db.com/person_bio.php?person_id=1061&quot; rel=&quot;noreferrer&quot;&gt;Grace Hopper&lt;/a&gt; (also &lt;a href=&quot;https://ww2db.com/image.php?image_id=27392&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Is it possible to know where this photo was taken? There couldn't have been very many Univac I computers that Grace Hopper would have been photographed with, &lt;s&gt;and that distinctive-looking sunburst logo (watermark?) in the upper-left corner may be a clue as well.&lt;/s&gt; That's a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9040/where-was-this-grace-hopper-univac-photo-taken/9049#comment28570_9040&quot;&gt;non-starter&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ha7l2.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ha7l2.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/archive/3/37/20120604182257%21Grace_Hopper_and_UNIVAC.jpg&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7118" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-10-30T04:15:49.380" Title="Where was this Grace Hopper/Univac photo taken?" Tags="&lt;history&gt;&lt;identify-this-computer&gt;" AnswerCount="3" CommentCount="24" ContentLicense="CC BY-SA 4.0" />
  <row Id="9041" PostTypeId="1" AcceptedAnswerId="9047" CreationDate="2019-02-01T07:00:59.670" Score="11" ViewCount="526" Body="&lt;p&gt;Researching for &lt;a href=&quot;https://www.youtube.com/watch?v=I74sVdw7gkc&quot; rel=&quot;noreferrer&quot;&gt;this question&lt;/a&gt; I ran across &lt;a href=&quot;https://www.youtube.com/watch?v=I74sVdw7gkc&quot; rel=&quot;noreferrer&quot;&gt;this 1978 advertisement for Sperry&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;The computer is nicknamed &amp;quot;B.C.&amp;quot; and the actor says (in part):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What I really like about BC is he speaks and understand English, so we don’t need a professional programmer. […] It only took us a few days to get to know each other, and now it gives me any fact I need in seconds.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; In what way could the Sperry Univac BC-7 computer &amp;quot;speak and understand&amp;quot; English? How was this different from previous computers?&lt;/p&gt;&#xA;" OwnerUserId="7118" LastEditorUserId="6659" LastEditDate="2020-06-23T01:36:58.240" LastActivityDate="2020-06-23T01:36:58.240" Title="In what way could the Sperry Univac BC-7 computer &quot;speak and understand&quot; English?" Tags="&lt;software&gt;&lt;operating-system&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9042" PostTypeId="1" AcceptedAnswerId="9045" CreationDate="2019-02-01T07:24:15.527" Score="4" ViewCount="275" Body="&lt;p&gt;The acronym ENIAC stands for Electrical Numerical Integrator And Calculator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact that it was simpy a numerical computer means it probably could be used to perform numerical integration in some form or other, but I wonder why &quot;Numerical Integrator&quot; was put in the name explicitly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there specific design aspects of the computer that made it particularly suitable for performing &lt;a href=&quot;https://en.wikipedia.org/wiki/Numerical_integration&quot; rel=&quot;nofollow noreferrer&quot;&gt;numerical integration&lt;/a&gt;?&lt;/p&gt;&#xA;" OwnerUserId="7118" LastEditorUserId="7118" LastEditDate="2019-02-01T07:34:55.637" LastActivityDate="2019-02-01T08:35:35.377" Title="ENIAC stands for Electrical Numerical Integrator And Calculator; what made it particularly suitable for numerical integration?" Tags="&lt;history&gt;&lt;floating-point&gt;&lt;eniac&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9043" PostTypeId="2" ParentId="9026" CreationDate="2019-02-01T07:24:42.300" Score="7" Body="&lt;p&gt;In the days before floating point hardware there was &lt;a href=&quot;https://en.wikipedia.org/wiki/Fixed-point_arithmetic&quot; rel=&quot;noreferrer&quot;&gt;fixed-point integer arithmetic&lt;/a&gt;!  Bit shift instructions were used to implement the &quot;scaling factor&quot; - specifically, to adjust it when you multiplied (or divided) numbers and then had to rescale the number to achieve the desired precision.  (Or when adding and subtracting if the operands had different scale factors.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;... and now a small break for a fun anecdote:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first professional programming job involved working on a Honeywell 716 minicomputer.  16-bit word size.  It had hardware floating point but it was &lt;em&gt;very&lt;/em&gt; slow. It had left shift and right shift instructions but the shift amount was an immediate (4-bit) value in the instruction - there was no instruction or addressing mode where that value was in a register.  I was doing a bunch of fixed point arithmetic for signal processing on inputs that had a large dynamic range.  There was no single scaling factor I could use for a certain multiply because whatever scaling factor I picked would either overflow for large inputs or lose all precision for small inputs.  So ... I &lt;em&gt;computed&lt;/em&gt; the necessary scaling factor from the input values and poked it &lt;em&gt;directly&lt;/em&gt; into the shift instruction I was about to execute! (Couldn't use a jump table to the correct shift instruction or duplicate code blocks: I was also under a tight memory budget; those 716s only had 32Kwords of memory total.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First job and I had to break all the rules.  Just graduated college and to get approval for that design and code I had to convince the top staff engineer so he could go to the Navy and get &lt;em&gt;their&lt;/em&gt; approval.&lt;/p&gt;&#xA;" OwnerUserId="332" LastActivityDate="2019-02-01T07:24:42.300" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9044" PostTypeId="2" ParentId="9041" CreationDate="2019-02-01T07:27:27.923" Score="3" Body="&lt;p&gt;Certainly that machine does not &quot;speak english&quot;; that is a very hard problem that computer scientists struggle with even today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the &lt;a href=&quot;http://www.bitsavers.org/pdf/univac/terminals/UTS_700_BC7/UP-8405r5_BC7_System_Description_1978.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;BC7 System Description&lt;/a&gt; says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Dialog between the BC/7 and the operator is in English&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;it also says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The commands to the BC/7 are short and simple&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They cannot both be true, given what we know English to be. But of course, it's vague marketing speak for &quot;use English-like words to instruct the computer&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Particularly, section 3.6 of the manual specifies more closely what this means:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The System Control Language is used to operate the BC/7. SCL commands are simple English verbs that specify programs to be executed and identify the files to be used.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So the guy on the advert typed in &quot;inventory&quot; at some prompt, and the computer displayed the inventory. And that is believable.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-02-01T07:42:22.660" LastActivityDate="2019-02-01T07:42:22.660" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9045" PostTypeId="2" ParentId="9042" CreationDate="2019-02-01T08:35:35.377" Score="6" Body="&lt;p&gt;It's necessary to consider the standards of the time the machine was named, and its original purpose, which was calculating ballistics tables for the Ordnance Corps of the US Army. It replaced 200 people using mechanical calculators, and was faster and more accurate at that work. So what seem like very basic functions for supporting numerical integration now were revolutionary at the time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From skimming the relevant chapter in &lt;em&gt;The First Computers&lt;/em&gt;, edited by Rojas and Hashagen, MIT Press, the functions that were important for numerical integration seem to have been fast multiplication, and the &quot;function tables&quot;, a set of controls for providing constants that could be read rapidly by the ENIAC's program. These weren't stored in memory, because ENIAC didn't &lt;em&gt;have&lt;/em&gt; a memory in the modern sense.  &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-02-01T08:35:35.377" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9046" PostTypeId="2" ParentId="9026" CreationDate="2019-02-01T13:22:50.820" Score="-1" Body="&lt;p&gt;The fundamental unit of digital information is the bit.  Bytes, words, pages, blocks, sectors, tracks, and what have you are all made up of bits.  Just about everything that can be done with information can be built up from operations on bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since at least as far back as the 1940s,  numbers in computers have usually been represented as sets of bits.  Thus the number 23 might be represented as [16, 4, 2, 1].  This is economical both for representation and manipulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just about every processor has special operators for sensing and acting on the sign bit.  I'm thinking about instructions like &quot;transfer on minus&quot;.  If you combine this with instructions for rotating or shifting bits in a register,  you can build up just about any complex operation imaginable.  The more common operations, like adding two numbers,  are going to have instructions, even in a RISC processor. The less common operations are going to be done by bit manipulation.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;@JeremyP has an excellent list of bit operations in his answer.  It's only a partial list.  I'll add telephone line management.  If you have a bunch of telephone lines, it might be fairly easy to supply a processor with a set of bits, one bit for each line,  where a one bit means, &quot;on hook status has changed&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do just about anything, one little bit at a time.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2019-02-01T14:08:06.910" LastActivityDate="2019-02-01T14:08:06.910" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9047" PostTypeId="2" ParentId="9041" CreationDate="2019-02-01T14:39:10.193" Score="19" Body="&lt;p&gt;From the perspective of today and looking backwards to the use of language in this commercial we apply different semantics than would have been perceived at the time. The same is true when interpreting anything historical - we just don't expect it to apply to something (relatively) so modern and contemporary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was, at the time of this commercial, performing research into computer languages and also operating system command languages. At that time computer languages, whether for programming or operations or interaction were considered arcane and specialist and not suitable for &quot;common business use&quot;. It was a problem being worked on by many academics and spawned a number of publications at that time.&lt;sup&gt;*&lt;/sup&gt; The titles of some of these seminal works will hint at what was going on:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Barnett, M. P. (1969). Computer programming in English. Harcourt, Brace &amp;amp; World.&lt;/li&gt;&#xA;&lt;li&gt;Barnett, M. P., &amp;amp; Ruhsam, W. M. (1969, May). SNAP: An experiment in natural language programming. In Proceedings of the May 14-16, 1969, spring joint computer conference (pp. 75-87). ACM.&lt;/li&gt;&#xA;&lt;li&gt;Barnett, M. P., &amp;amp; Ruhsam, W. M. (1968). A natural language programming system for text processing. IEEE transactions on engineering writing and speech, 11(2), 45-52.&lt;/li&gt;&#xA;&lt;li&gt;Barnett, M. P. (1970). SNAP—A programming language for humanists. Computers and the Humanities, 4(4), 225-240.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The movement was, that if we could utilise the power of the natural language understood by the user they could become &quot;power users&quot; without the need for the intervention of a third party (the operator or programmer):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fIQd8.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fIQd8.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;COBOL was originally written from this perspective, which is basically &quot;VERB&quot; &quot;NOUN&quot; type commands, where the verb and noun are recognised English words. A further development in this vein is what we now know as SQL:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Chamberlin, Donald D; Boyce, Raymond F (1974). &quot;SEQUEL: A Structured English Query Language&quot; Proceedings of the 1974 ACM SIGFIDET Workshop on Data Description, Access and Control. Association for Computing Machinery: 249–64. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So at this time, any interactive command interface that used English verb/noun constructs was understood to be &quot;Understanding English&quot; and the advertising copy-writers pushed it as such. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had interactions with Sperry at about that time and I am sure they felt they were including some state-of-the-art interfaces with their systems to make them business useful tools, but I'm sure Grace Hopper felt the same about COBOL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From today's perspective none of this looks like using or understanding the English language on the part of the computer.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;*&amp;nbsp; It took me a while to dig through my archives and look at the old thesis and papers again.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2019-02-01T14:39:10.193" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9048" PostTypeId="1" CreationDate="2019-02-01T16:23:54.847" Score="6" ViewCount="239" Body="&lt;p&gt;Can someone please help me understand the floating point to readable decimal conversion algorithms of the Z1 and Z3? &lt;a href=&quot;http://zuse.zib.de/item/UdpUK1H0nTub_dmT&quot; rel=&quot;nofollow noreferrer&quot;&gt;There is a patent in German containing all the information&lt;/a&gt; but I can't speak German.&lt;/p&gt;&#xA;" OwnerUserId="11832" LastEditorUserId="576" LastEditDate="2019-04-17T15:48:05.727" LastActivityDate="2019-04-17T15:48:05.727" Title="How does the floating point conversion in Zuse's machines work?" Tags="&lt;floating-point&gt;&lt;zuse&gt;&lt;early-computer&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9049" PostTypeId="2" ParentId="9040" CreationDate="2019-02-01T16:36:48.770" Score="4" Body="&lt;p&gt;Could be &quot;anywhere&quot;. But my guess would be a US government facility, more likely DOD, and most likely of all Navy. In addition to Admiral Grace Hopper, Donald Cropper &lt;a href=&quot;https://obituaries.pressherald.com/obituaries/mainetoday-pressherald/obituary.aspx?n=donald-l-cropper&amp;amp;pid=190381626&amp;amp;fhid=16468&quot; rel=&quot;nofollow noreferrer&quot;&gt;according to this obituary&lt;/a&gt; if I have the right one, was in the Navy and then Marines. So my first guess would be the 1953 installation at David W. Taylor Model Basin as listed in the &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_I&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Wikipedia Univac I article&lt;/a&gt; and sourced from &lt;a href=&quot;http://www.bitsavers.org/pdf/onr/Digital_Computer_Newsletter/Digital_Computer_Newsletter_V05N03_Jul53.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this newsletter&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But really that is just a guess. The Army and Air Force had systems as well, and Grace Hopper &amp;amp; Donald Cropper might have been sent over to those systems to help get things running.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2019-02-01T16:36:48.770" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9050" PostTypeId="2" ParentId="9048" CreationDate="2019-02-01T16:59:13.840" Score="0" Body="&lt;p&gt;This might be not the detailed explanation asked for, but some usable pointers I hope:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A perfect hit might be Raul Rojas book &lt;a href=&quot;https://www.springer.com/de/book/9783642719455&quot; rel=&quot;nofollow noreferrer&quot;&gt;Die Rechenmaschinen von Konrad Zuse&lt;/a&gt; describing the workings in great detail. Sorry, again just German. It would be most definitive worth a translation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there is a &lt;em&gt;somewhat&lt;/em&gt; compact (25 pages) version in &lt;a href=&quot;https://mitpress.mit.edu/books/first-computers&quot; rel=&quot;nofollow noreferrer&quot;&gt;The First Computers&lt;/a&gt; a collection of descriptions of very early machines edited by him. A worthwhile read to understand  what was archived in the 1940s and early 1950s world wide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further his &lt;a href=&quot;http://dcis.inf.fu-berlin.de/rojas/reconstruction-of-the-z1-computer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;web page about working on the Z1&lt;/a&gt; reconstruction might offer additional information, some links as well.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-02-01T16:59:13.840" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="9051" PostTypeId="2" ParentId="8487" CreationDate="2019-02-01T17:04:35.900" Score="0" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Nascom_(computer_kit)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nascom&lt;/a&gt; computers (released 1977 and 1979) came with a timed circuit on an output port that would allow for a &lt;code&gt;POP AF; RETN&lt;/code&gt; sequence and one more opcode fetch before triggering an NMI.  The system ROM used this for single-step support through assembly code.  It was also possible to set a single breakpoint in RAM (it would use one of the 8 zero-page call opcodes) and the original opcode would get restored no matter how you returned to the operating system (there was a denial-of-service program circulated which could not be terminated by a hard reset since that &quot;restored&quot; an &quot;original opcode&quot; into the return stack of the hard reset routine, letting it return to the denial-of-service code instead).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A later released debug extension costing 1kB of EPROM space offered more extensive breakpoint and diagnostic utility (including viewing the return stack though not in the form of a traceback since stack frame organisation was unknown) and could interoperate with a disassembler implemented in another 3kB for mnemonic debugging.  The usual way of filling the 8kB EPROM capacity of the Nascom II consisted in putting a 4kB editor/assembler in the rest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At any rate, this hardware-assisted facility for single-command execution on a Z80 CPU was a precursor of trace facilities built into much later microprocessors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, debugging was not symbolic.&lt;/p&gt;&#xA;" OwnerDisplayName="user11834" LastActivityDate="2019-02-01T17:04:35.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9052" PostTypeId="2" ParentId="9048" CreationDate="2019-02-01T17:48:33.003" Score="1" Body="&lt;p&gt;My German is rubbish. However, I know enough to make liberal use of &lt;kbd&gt;Ctrl&lt;/kbd&gt; + &lt;kbd&gt;F&lt;/kbd&gt; and a dictionary using &lt;a href=&quot;http://zuse.zib.de/file/trJ1nquciiskKrG2/57/99/48/a4-ec1f-452a-87ee-fabd323fb666/0/original/0496767598866f2641235f18479773b7.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this PDF version of the patent&lt;/a&gt; to hopefully extract the information you want. Page numbers are ignoring the title page added by zuse.zib.de, and all translations are rubbish except where specified otherwise:&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On page 37, I found a table:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Comments.&lt;/strong&gt; The overview drawing on the following page shows the following circuits:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;| &lt;em&gt;*snip*&lt;/em&gt; .................................................................................|&lt;br&gt;&#xA;  | &lt;em&gt;U&lt;/em&gt; .......... Reading in a decimal number from the console |&lt;br&gt;&#xA;  | &lt;em&gt;D&lt;/em&gt; .......... Output of decimal result (lamp display) ............ |&lt;br&gt;&#xA;  | &lt;em&gt;*snip*&lt;/em&gt; .................................................................................|&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm guessing that &lt;em&gt;D&lt;/em&gt; is what you want to know about. This is what I can find on page 38:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The ↘ arrow (line 3) symbolizes the operation &quot;show decimal result&quot;. The mantissa is shifted to the left by two places – this corresponds to a shift of the comma by two places to the right (see explanation in section 3.6).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now I suspect that this might be the wrong thing, but I'm going to have a look at section 3.6 to make sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Section 3.6 is on page 25, and is entitled &quot;Translation from the binary to the decimal system&quot;. That &lt;em&gt;looks&lt;/em&gt; like it's what you want, but I can't be sure without reading it further.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, machine translation isn't designed for programmer jargon (what's a &quot;heated full-toothhand&quot;?), so I'll have to crack out a dictionary. Unfortunately, the dictionary is also not designed for programmer jargon. Help!&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;h2&gt;3.6 Translation from the binary to the decimal system&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;The return translation from the secondary system to the decimal system occurred in accordance with the principle set out in the application Z23624. By multiplying with 10 or 0.1 and aligning, the number must first be brought to a form where the &lt;em&gt;a&lt;/em&gt;-value is zero and the &lt;em&gt;b&lt;/em&gt;-value is between zero and 15.&#xA;  It will then be the integer part of the number in front of the comma (decimal point) transferred to the corresponding decimal number and multiplied the rest behind the comma by 10, then the part in front of the comma is transferred back into the second decimal number, the rest multiplied by 10, etc.. Part B requires four jobs in front of the comma for this procedure.&#xA;  Since the Additionswerk (adder?) &lt;em&gt;B&lt;/em&gt; has only two places in front of the comma, for the reverse translation the comma is moved from the front behind the fourth place (see Figure 3), thus moving the b-value down 2 places. Accordingly, the associated a value must be increased by two, i.e. with the finished number, a = L0 must hold.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2019-02-01T20:36:16.733" LastActivityDate="2019-02-01T20:36:16.733" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9053" PostTypeId="1" AcceptedAnswerId="9055" CreationDate="2019-02-01T18:35:23.497" Score="9" ViewCount="1645" Body="&lt;p&gt;In the BESM-6, &lt;a href=&quot;http://mailcom.com/besm6/instset.shtml&quot; rel=&quot;noreferrer&quot;&gt;there is an instruction&lt;/a&gt; (045) to add index registers, but not to subtract them, however, there is a nearby unused opcode 047, which is made synonymous to 045 (in fairness, that's true only in the kernel mode; in the user mode it traps as illegal). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, there are &quot;branch if index is zero&quot; (34) and &quot;branch if index is not zero&quot; (35), but not &quot;branch if index is less than zero&quot; (alternatively formulated as &quot;branch if the MSB of the index is set&quot;). However, there is a nearby unused opcode 36 which is made completely synonymous to 34. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This makes one to think that the unimplemented functionality was intended by the initial design (no references to confirm or deny it, unfortunately), but didn't make it into the hardware for one reason or another, be it physical space constraints, timing requirements, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any similar Western examples of an instruction set with obviously cut corners, or is this kind of mishap specific to socialist economy?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An answer could be in the form &quot;Here's the instruction set of CPU X with an instruction with opcode A doing &lt;code&gt;foo&lt;/code&gt;, but no instruction to do &lt;code&gt;bar&lt;/code&gt;, which would be obvious to include for completeness/orthogonality; at the same time there is an unused opcode B close to A&quot;. &lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2019-02-01T19:09:04.633" LastActivityDate="2021-03-25T08:24:24.557" Title="Was there a Western computer with blatantly missing instructions in the instruction set?" Tags="&lt;instruction-set&gt;&lt;besm-6&gt;" AnswerCount="4" CommentCount="19" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9054" PostTypeId="1" AcceptedAnswerId="9056" CreationDate="2019-02-01T19:20:42.787" Score="5" ViewCount="488" Body="&lt;p&gt;While the Amiga could be used with a TV in a pinch, it was primarily intended for use with an RGBA monitor; memory says, and Google seems to confirm, that was the 1084.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore made color monitors previously, but the ones used with machines like the 64 and Plus/4 only had to display 40 columns; some of the later PET models did 80, but that was monochrome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was the 1084 the first Commodore color monitor suitable for 80-column text?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-02-01T20:18:11.983" Title="First Commodore 80-column monitor" Tags="&lt;commodore&gt;&lt;crt-monitor&gt;&lt;color-display&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9055" PostTypeId="2" ParentId="9053" CreationDate="2019-02-01T20:04:42.030" Score="16" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Are there any similar Western examples of an instruction set with obviously cut corners&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Following on your example of having addition but not subtraction, the Intel 8080 has 8 bit addition and subtraction instructions &lt;a href=&quot;http://pastraiser.com/cpu/i8080/i8080_opcodes.html&quot; rel=&quot;noreferrer&quot;&gt;laid out neatly as you can see in this table&lt;/a&gt; on rows 8x and 9x.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8080 also has a 16 bit addition instruction DAD with opcode 0x09, but there is no 16 bit subtraction.  The logical place for it in the opcode table would be one column left at 0x08, but that is a NOP on the 8080.  Most of the hardware necessary for subtraction is on the die.  It just wasn't implemented for some reason.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the 8085 there's even an undocumented opcode that does implement 16 bit subtraction at 0x08.  Though unlike the 16 bit addition, it doesn't update the flags properly, which I suspect is why it's undocumented.  You can find a &lt;a href=&quot;http://pastraiser.com/cpu/i8085/i8085_opcodes.html&quot; rel=&quot;noreferrer&quot;&gt;table of the 8085 opcodes here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4025" LastEditDate="2019-02-01T20:37:12.673" LastActivityDate="2019-02-01T20:37:12.673" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="9056" PostTypeId="2" ParentId="9054" CreationDate="2019-02-01T20:18:11.983" Score="8" Body="&lt;p&gt;The 1084 wasn't the first one. If we consider monitors that targeted the Amiga only, then the predecessor to the 1084 was the 1080. I don't believe there was much difference between the two spec-wise other than the 1080 said &quot;Amiga&quot; on the face plate and it was the one you would have seen with the early Amiga 1000 machines in 1985.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But before the Amiga, the Commodore 128 had the 1901 (PAL) and 1902 (NTSC) monitors which not only had composite inputs, but also RGB. The 1901/1902 were suitable for 80-columns.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2019-02-01T20:18:11.983" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9057" PostTypeId="1" AcceptedAnswerId="9059" CreationDate="2019-02-02T08:46:27.637" Score="11" ViewCount="957" Body="&lt;p&gt;The ZX Printer was made to work with both the ZX81 and the Spectrum (or rather, the Spectrum was made to work with the ZX81's printer!), but these computers have different expansion ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vQmvD.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vQmvD.jpg&quot; alt=&quot;Timex TS1000 expansion port. That&amp;#39;s identical to the ZX81&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/sryKg.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sryKg.jpg&quot; alt=&quot;ZX Spectrum expansion port&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I find puzzling is that although the lines have been moved around, the printer works on both machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the notch that makes sure you don't insert something upside down is #5 on the Spectrum, and #3 on the ZX81. So the offset is 2. That makes sense, as &lt;code&gt;A0&lt;/code&gt; through &lt;code&gt;A3&lt;/code&gt; and the data lines are all shifted along by two. Same deal with &lt;code&gt;/RFSH&lt;/code&gt;  and &lt;code&gt;/M1&lt;/code&gt;. But then, for example &lt;code&gt;A11&lt;/code&gt; has been moved &lt;em&gt;way&lt;/em&gt; over the other side. And &lt;code&gt;/BUSREQ&lt;/code&gt; is now &lt;code&gt;+12V&lt;/code&gt;, I can picture that &lt;em&gt;being dangerous&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How could devices like the ZX Printer keep working on the later computer? Why did they &quot;move stuff around&quot;?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-02-03T10:42:01.003" Title="How can a peripheral work on both the ZX81 and on the ZX Spectrum?" Tags="&lt;zx-spectrum&gt;&lt;zx81&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9058" PostTypeId="2" ParentId="9057" CreationDate="2019-02-02T12:10:04.810" Score="3" Body="&lt;p&gt;Looking at the diagrams you provided, the data pins, interrupt pins, some of the ground pins, and +5v are all physically in the same place (imagine pins 1 and 2 on the Spectrum pinout being chopped off). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the assumption that those are the only pins needed, provided the printer connector has empty space to accommodate the two extra pins on the left and right of the Spectrum interface, and doesn't connect the pins for things like +/- 12 volts to anything, then everything is good. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2019-02-02T12:10:04.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9059" PostTypeId="2" ParentId="9057" CreationDate="2019-02-02T13:09:56.853" Score="15" Body="&lt;p&gt;The ZX printer is, like just about anything that carries the Sinclair label, a very minimalistic device - It only needs very few lines from the computer to actually work:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Address bus&lt;/strong&gt;: The printer does only use A2, nothing else - When both A2 and IOREQ are low, the I/O port of the printer will sample the data bus or put data onto it, depending on the /WR and /RD signal&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data bus&lt;/strong&gt; (&quot;O&quot; means &quot;output from computer&quot;, &quot;I&quot; &quot;input to computer&quot;): &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;D1: Motor slow/fast (O)&lt;/li&gt;&#xA;&lt;li&gt;D2: Motor start/stop (O)&lt;/li&gt;&#xA;&lt;li&gt;D7: &quot;Stylus&quot; on/off (O)&lt;/li&gt;&#xA;&lt;li&gt;D0: Encoder signal (I)&lt;/li&gt;&#xA;&lt;li&gt;D6: Printer connected (I)&lt;/li&gt;&#xA;&lt;li&gt;D7: &quot;Stylus&quot; has hit paper (I)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Control bus&lt;/strong&gt;, only needs /WR, /RD and /IOREQ&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Beyond the above, power and GND, nothing else is actually connected between the computer and the printer. All of the above signals are in the same places (with respect to their distance from the connector key and PCB side, not the pin numbers) on both the ZX81 and the ZX Spectrum, all other signals are simply not connected in the printer - Absolutely nothing dangerous here.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-02-03T10:42:01.003" LastActivityDate="2019-02-03T10:42:01.003" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9060" PostTypeId="2" ParentId="9057" CreationDate="2019-02-02T13:15:17.450" Score="2" Body="&lt;p&gt;According to this page: &lt;a href=&quot;https://rc2014.co.uk/modules/other-modules/zx-printer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RC2014 ZX printer interface&lt;/a&gt; the printer is only using the data-bus, /IORQ, /RD, /WR and address A2.&#xA;All of these will be correctly connected in both cases.&#xA;The site also claims that the original ZXprinter might not work, since it also used a +9 volt connection from the computer. As I understand from &lt;a href=&quot;https://faqwiki.zxnet.co.uk/wiki/ZX80/81_edge_connector&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX80/81 edge connector&lt;/a&gt; ther +9 on ZX80 and ZX81 was the Uss in the pictures in the question. On a Spectrum, that was not connected on all versions. (&lt;a href=&quot;https://faqwiki.zxnet.co.uk/wiki/ZX_Spectrum_edge_connector&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX Spectrum edge connector&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="10565" LastEditorUserId="10565" LastEditDate="2019-02-02T13:21:26.370" LastActivityDate="2019-02-02T13:21:26.370" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9061" PostTypeId="2" ParentId="5800" CreationDate="2019-02-02T21:24:07.713" Score="1" Body="&lt;p&gt;First, how did you store prog in RAMFILE, which is intended for storing formatted data?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, if you don't have a tape recorder, you can connect to main PC microphone input and record (SAVE) prog to a .WAV file. You can then LOAD back onto HX. I've had excellent results doing this with my HX and a laptop.&lt;/p&gt;&#xA;" OwnerUserId="11843" LastEditorDisplayName="user12" LastEditDate="2019-02-04T14:23:58.310" LastActivityDate="2019-02-04T14:23:58.310" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9062" PostTypeId="2" ParentId="9006" CreationDate="2019-02-02T23:36:52.837" Score="3" Body="&lt;p&gt;I wrote commercial TRS-80 software, on a TRS-80. Either in BASIC, or in Z-80 assembler run through Editor Assembler. Those were the days. I also used the TRS-80 to cross-compile 6805 asm to burn on Motorola chips for what we'd call embedded devices now. At my next job, we all shared and wrote software on an IMSAI with a Z-80 chip and bank-switched RAM using an M/PM-like timeshare OS, with a single giant 5MB HDD that backed up to VHS cassettes. If the head programmer ran the 30-minute build of his Z-80 ASM (it was a phonebook sized printout) we'd all feel it.&lt;/p&gt;&#xA;" OwnerUserId="4199" LastActivityDate="2019-02-02T23:36:52.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9063" PostTypeId="2" ParentId="8095" CreationDate="2019-02-03T07:26:50.900" Score="9" Body="&lt;p&gt;There are a lot of instructions on &lt;strong&gt;x86&lt;/strong&gt; that leave the flag(s) in an indeterminate state, which means the whole &lt;a href=&quot;https://en.wikipedia.org/wiki/FLAGS_register&quot; rel=&quot;nofollow noreferrer&quot;&gt;FLAGS register&lt;/a&gt; is also undefined. Most will have AF undefined, for example&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/test#flags-affected&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;TEST&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The OF and CF flags are set to 0. The SF, ZF, and PF flags are set according to the result (see the “Operation” section above). The state of the AF flag is undefined.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;but there are also other instructions that leave other undefined flags like&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/aaa#flags-affected&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;AAA&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://www.felixcloutier.com/x86/aas#flags-affected&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;AAS&lt;/code&gt;&lt;/a&gt;: OF, SF, ZF, PF&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/daa#flags-affected&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;DAA&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://www.felixcloutier.com/x86/das#flags-affected&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;DAS&lt;/code&gt;&lt;/a&gt; : OF&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/sal:sar:shl:shr#flags-affected&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;SAL/SAR/SHL/SHR&lt;/code&gt;&lt;/a&gt;: OF, AF, CF&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/imul#flags-affected&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;IMUL&lt;/code&gt;&lt;/a&gt;: SF, ZF, AF, PF&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/div#flags-affected&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;DIV&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://www.felixcloutier.com/x86/idiv#flags-affected&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;IDIV&lt;/code&gt;&lt;/a&gt;: CF, OF, SF, ZF, AF, PF&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;x87 FPU&lt;/strong&gt; also has its own flags which may also be left unspecified after many operations&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/fstsw:fnstsw#fpu-flags-affected&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;FSTSW/FNSTSW&lt;/code&gt;&lt;/a&gt;: C0, C1, C2, C3 &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/fadd:faddp:fiadd#fpu-flags-affected&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;FADD/FADDP/FIADD&lt;/code&gt;&lt;/a&gt;: C0, C2, C3 &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You can open any of the lists in the &lt;a href=&quot;http://ref.x86asm.net/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;X86 Opcode and Instruction Reference&lt;/a&gt; like &lt;a href=&quot;http://ref.x86asm.net/coder.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt; and look at the &lt;a href=&quot;http://ref.x86asm.net/#column_tested_f_modif_f_def_f_undef_f&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;undef_f&lt;/code&gt; column&lt;/a&gt; to have a summary of undefined flags after each instruction&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Normal registers can also have an unspecified state, too. Early x86 CPUs will leave the high bit of a &lt;code&gt;mov Reg, Sreg&lt;/code&gt; undefined&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When executing &lt;code&gt;MOV Reg, Sreg&lt;/code&gt;, the processor copies the content of Sreg to the 16 least significant bits of the general-purpose register. The upper bits of the destination register are zero for most IA-32 processors (Pentium Pro processors and later) and all Intel 64 processors, &lt;strong&gt;&lt;em&gt;with the exception that bits 31:16 are undefined for Intel Quark X1000 processors, Pentium and earlier processors&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/mov.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.felixcloutier.com/x86/mov.html&lt;/a&gt; (emphasis mine)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And nowadays &lt;a href=&quot;https://www.felixcloutier.com/x86/shld&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;SHLD&lt;/code&gt;&lt;/a&gt;/&lt;a href=&quot;https://www.felixcloutier.com/x86/shrd&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;SHRD&lt;/code&gt;&lt;/a&gt; still have undefined result&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If the count operand is CL, the shift count is the logical AND of CL and a count mask. In non-64-bit modes and default 64-bit mode; only bits 0 through 4 of the count are used. This masks the count to a value between 0 and 31. If a count is greater than the operand size, the result is undefined.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/shld&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.felixcloutier.com/x86/shld&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Some other examples on x86&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/lar&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;LAR&lt;/code&gt;&lt;/a&gt;: &lt;em&gt;The following fields are returned only if the operand size is greater than 16 bits: Bits 19:16 are undefined&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/smsw&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;SMSW&lt;/code&gt;&lt;/a&gt;: &lt;em&gt;In non-64-bit modes, when the destination operand is a 32-bit register, the low-order 16 bits of register CR0 are copied into the low-order 16 bits of the register and the high-order 16 bits are undefined&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/bsf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;BSF&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://www.felixcloutier.com/x86/bsr&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;BSR&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://www.felixcloutier.com/x86/tzcnt&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;TZCNT&lt;/code&gt;&lt;/a&gt;: &lt;em&gt;if source operand is zero, the content of destination operand are undefined&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/sldt&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;SLDT&lt;/code&gt;&lt;/a&gt;: &lt;em&gt;The high-order 16 bits of the register [...] are undefined for Pentium, Intel486, and Intel386 processors&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Not sure whether their intermediate results can be utilize for other purposes or not though&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Division and multiplication also often leave unspecified results&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example on &lt;strong&gt;PowerPC&lt;/strong&gt; we have&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.alangref/idalangref_divw_instrs.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;divw&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For the case of &lt;code&gt;-2**31 / -1&lt;/code&gt;, and all other cases that cause overflow, the content of GPR RT is undefined.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;and &lt;a href=&quot;https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.alangref/idalangref_divd_instrs.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;divd&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If an attempt is made to perform the divisions 0x8000_0000_0000_0000 / -1 or / 0, the contents of RT are undefined&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Similarly on &lt;strong&gt;MIPS&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;for &lt;code&gt;DIV/MOD/DIVU/MODU/DDIV/DDIVU&lt;/code&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If the divisor in GPR rt is zero, the arithmetic result value is UNPREDICTABLE&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In older MIPS ISAs there are also restrictions regarding the HI and LO registers&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In MIPS 1 through MIPS III, if either of the two instructions preceding the divide is an MFHI or MFLO, the result of the MFHI or MFLO is UNPREDICTABLE&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On MIPS many floating-point instructions also leave unpredictable result in the registers, like&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;DIV.fmt&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The fields fs, ft, and fd must specify FPRs valid for operands of type fmt. If the fields are not valid, the result is UNPREDICABLE.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The operands must be values in format fmt; if they are not, the result is UNPREDICTABLE and the value of the operand FPRs becomes UNPREDICTABLE.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;or &lt;code&gt;FLOOR.L.fmt&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The fields fs and fd must specify valid FPRs: fs for type fmt and fd for long fixed point. If the fields are not valid, the result is UNPREDICTABLE.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The operand must be a value in format fmt; if it is not, the result is UNPREDICTABLE and the value of the operand FPR becomes UNPREDICTABLE.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The result of this instruction is UNPREDICTABLE if the processor is executing in the FR=0 32-bit FPU register model; it is predictable if executing on a 64-bit FPU in the FR=1 mode, but not with FR=0, and not on a 32-bit FPU.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://hades.mech.northwestern.edu/images/1/16/MIPS32_Architecture_Volume_II-A_Instruction_Set.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://hades.mech.northwestern.edu/images/1/16/MIPS32_Architecture_Volume_II-A_Instruction_Set.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1981" LastEditorUserId="1981" LastEditDate="2019-02-07T15:56:16.313" LastActivityDate="2019-02-07T15:56:16.313" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9064" PostTypeId="2" ParentId="9040" CreationDate="2019-02-03T07:59:02.400" Score="16" Body="&lt;p&gt;Before I give my guess, let's see what we have so far:&#xA;Apart from the picture links in the question, we also have this link &lt;a href=&quot;https://digital.hagley.org/1985261_086_004_014?solr_nav%5Bid%5D=a2ac56a76ac45b595a60&amp;amp;solr_nav%5Bpage%5D=0&amp;amp;solr_nav%5Boffset%5D=9&quot; rel=&quot;noreferrer&quot;&gt;Grace Hopper demonstrating COBOL at Programming Department&lt;/a&gt; (Thank you @uoho).&#xA;Most links places the picture as circa 1960 or 1957 and several also mentions COBOL.&#xA;From the WW2DB link in the question, we can see that in this time frame Grace Hopper was working for Univac. The link above even places the picture at &amp;quot;Programming Department&amp;quot;, the picture originated from Sperry Rand (Corporation), Univac Division and dates it as 1957-06, ie June 1957.&lt;/p&gt;&#xA;&lt;p&gt;The date is still a small problem. Even if I believe Hagley Digital Archives more than Wikipedia (Museum Curators normally don't give exact date without good backup evidence) it was impossible to have a COBOL class at that date, since COBOL was designed 1959 &lt;a href=&quot;https://en.wikipedia.org/wiki/COBOL&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;. So, either is the date wrong, or the COBOL reference a bit wrong. (It could have been during the work that led up to COBOL).&lt;/p&gt;&#xA;&lt;p&gt;All of the people in the picture are also in some other pictures from &lt;a href=&quot;https://digital.hagley.org/islandora/search?type=dismax&amp;amp;islandora_solr_search_navigation=1&amp;amp;f%5B0%5D=mods_name_corporate_org_namePart_ms%3ASperry%5C%20Rand%5C%20%5C%28Corporation%5C%29.%5C%20Univac%5C%20Division&quot; rel=&quot;noreferrer&quot;&gt;Hagley Digital Archives&lt;/a&gt; (you might need to search around a bit). This makes me think that all 4 people were at the time part of Grace Hoppers team at Sperry Univac.&lt;/p&gt;&#xA;&lt;p&gt;So, my best guess (until any more proof gets up) is that it was taken at Sperry Univac, at their &amp;quot;school room&amp;quot;. Time somewhere between 1957 and 1960.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;DrSheldon updates: &lt;strong&gt;This answer is correct.  It was taken in June 1957 at Sperry-UNIVAC.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The original physical photograph is &lt;a href=&quot;https://digital.hagley.org/1985261_086_004_014&quot; rel=&quot;noreferrer&quot;&gt;in possession at the Hagley Museum&lt;/a&gt; in the Sperry-UNIVAC collection, box 86, folder 4.  It is an 8 x 10 in physical photograph., and lacks the Smithsonian watermark.  (The Hagley is a Smithsonian affiliate, which is perhaps how the Smithsonian acquired a digital copy.)  The Hagley documents the date as &lt;code&gt;1957-06&lt;/code&gt;, which is June 1957.&lt;/p&gt;&#xA;&lt;p&gt;I do agree with UncleBod that the Hagley title for the photograph (&amp;quot;Grace Hopper demonstrating COBOL at Programming Department&amp;quot;) does not fit with the timeline of COBOL.  But all of the other details are consistent.&lt;/p&gt;&#xA;&lt;p&gt;Three of the four persons (Hopper, Rothberg, and Cropper) appear in &lt;a href=&quot;https://digital.hagley.org/1985261_086_004_018&quot; rel=&quot;noreferrer&quot;&gt;another Sperry-UNIVAC photo&lt;/a&gt;.  It is also dated 1957, but seems to be a different room than the question photo:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Left to right: William Finley, &lt;strong&gt;Norman Rothberg&lt;/strong&gt;, James McGarvey, Mary Lou Greene, &lt;strong&gt;Grace Hopper&lt;/strong&gt;, and &lt;strong&gt;Donald Cropper&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Sf1hr.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Sf1hr.jpg&quot; alt=&quot;Hopper with Rothberg and Cropper&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The remaining person (Krishnan) appears with Hopper in &lt;a href=&quot;https://digital.hagley.org/1985261_040_072_11&quot; rel=&quot;noreferrer&quot;&gt;a similar photo&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Left to right: &lt;strong&gt;K.C. Krishnan&lt;/strong&gt;, Laura Yu, Donald Sullivan, George Schmalen Berger, Frederick Tweed, &lt;strong&gt;Grace Hopper&lt;/strong&gt;, and Frank Lagan.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pCgOA.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pCgOA.jpg&quot; alt=&quot;Hopper with Krishnan&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's also worth mentioning that &lt;a href=&quot;https://digital.hagley.org/1985261_086_004_068&quot; rel=&quot;noreferrer&quot;&gt;Hopper appears at her Sperry-UNIVAC desk&lt;/a&gt; with the same (or similar) clothing to the question's picture:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZS8Dr.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZS8Dr.jpg&quot; alt=&quot;Hopper at her desk&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;All of the people (including Hopper) appear to be Sperry-UNIVAC employees.  Other than Hopper, none appeared at the &lt;a href=&quot;https://ieeexplore.ieee.org/document/4640600&quot; rel=&quot;noreferrer&quot;&gt;May 1959 CODASYL meeting&lt;/a&gt; which drafted COBOL.  It is therefore reasonable to conclude that the picture was taken at Sperry-UNIVAC.&lt;/p&gt;&#xA;" OwnerUserId="10565" LastEditorUserId="10260" LastEditDate="2020-10-30T04:15:49.380" LastActivityDate="2020-10-30T04:15:49.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9065" PostTypeId="2" ParentId="9048" CreationDate="2019-02-03T15:47:46.563" Score="3" Body="&lt;p&gt;Actually, mechanical translation by Google works remarkably well. I found that I needed to first copy the text to my text editor (emacs, in my case) in order to convert the umlauts into proper Unicode characters, but then I just pasted the paragraphs one at a time into Google, and got the following, which is quite idiomatic. I have not touched up the results at all except for some punctuation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that &quot;secondary system&quot; should probably read as &quot;binary system&quot;. And &quot;games&quot; should be &quot;rounds&quot; or &quot;cycles&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are two pages starting with section 3.5. Someone with greater interest than I can do the rest &amp;mdash; so far, this looks like a fairly obvious approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: OK, I've made it a community wiki entry, and made some of the more obvious tcouh-ups to the translation. Feel free to add to what's here.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;b&gt;3.5 Übersetzung vom Dezimal- ins Sekundalsystem&lt;/b&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;3.5 Translation from decimal to binary system&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Beim Übersetzen der auf Z–K (Abb. 2) eingestellten Zahl wird zunächst unabhängig von der Lage des Kommas der auf Z eingestellte vierstellige Dezimalwert als ganze Zahl übersetzt. Dies geschieht im Teil B entsprechend der Anmeldung Z23624, indem die Dezimalziffern für sich ins Sekundalsystem übersetzt werden und als solche, angefangen von der höchsten Stelle, nacheinander auf das Additionswerk übertragen werden und zwischen jeder neueingestellten Ziffer das bisher aufgebaute Resultat mit 10 multipliziert wird.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;When translating the number set to Z-K (Fig. 2), the 2-digit decimal value set to Z is first translated as an integer, regardless of the position of the comma. This is done in Part B according to the application Z23624 as the decimal digits are translated into the binary system and as such, starting from the highest digit, are successively transferred to the adder and between each new digit the result so far is multiplied by 10.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Die Multiplikation mit 10 geschieht durch Einstellen des doppelten und achtfachen Wertes auf das Additionswerk, also dadurch, daß das Resultat einmal eine Stelle aufwärts und einmal drei Stellen aufwärts verschoben wird.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The multiplication by 10 is done by setting the double and eightfold value to the adder. To put it differently, so that the result is shifted once upwards and once upwards three times.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Abb. 19 zeigt die Zifferneinstellungsvorrichtung Z für eine Stelle. Sie besteht im wesentlichen aus einer Tastatur mit durch Tasten betätigten Kontakten, durch die die Dezimalziffer ins Sekundalsystem übersetzt wird. Durch die Relais Za, Zb, Zc, Zd werden dann diese Kombinationen auf die Relais Ba&lt;sub&gt;−10&lt;/sub&gt;, Ba&lt;sub&gt;−11&lt;/sub&gt;, Ba&lt;sub&gt;−12&lt;/sub&gt;, Ba&lt;sub&gt;−13&lt;/sub&gt; übertragen. Die durch den Steuerschalter Ud (nicht gezeichnet) bewirkten Einstellungen sind für die einzelnen Spiele folgende:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Fig. 19 shows the digit setting device Z for one digit. It consists essentially of a keyboard with key-operated contacts, which translate the decimal digit into the binary system. By means of the relays Za, Zb, Zc, Zd, these combinations are then transferred to the relays Ba&lt;sub&gt;-10&lt;/sub&gt;, Ba&lt;sub&gt;-11&lt;/sub&gt;, Ba&lt;sub&gt;-12&lt;/sub&gt;, Ba&lt;sub&gt;-13&lt;/sub&gt; transmitted. The settings made by the control switch Ud (not shown) are as follows for each cycle:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Im Spiel 8 muß die so übersetzte ganze Zahl auf die Form y = 2&lt;sup&gt;a&lt;/sup&gt; · b gebracht werden. Da die Einer auf die Stelle −13 eingestellt werden, muß in Teil A zum Ausgleich +13 addiert werden&lt;sup&gt;17&lt;/sup&gt; (LL0L). Ferner muß die Zahl entsprechend der Lage der ersten von Null verschiedenen Ziffer ausgerichtet werden. Dies geschieht, genau wie bei der Subtraktion, durch die in Abb. 18 dargestellte Teilschaltung über die Relais Bm, Bn und As. Uc bewirkt die zur Berücksichtigung des Kommas erforderlichen weiteren Operationen.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In cycle 8, the integer thus translated must be put on the form y = 2&lt;sup&gt;a&lt;/sup&gt; · b. Since the ones are set to the position -13, it is necessary to add +13 to the compensation in part A &lt;sup&gt;17&lt;/sup&gt; (LL0L). Further, the number must be aligned according to the location of the first nonzero digit. This happens, as with the subtraction, through the partial circuit shown in Fig. 18 via the relays Bm, Bn and As. Uc causes the further operations required to take the comma into account.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Abb. 20 zeigt die Teilschaltung K zur Einstellung des Kommas. Es wird die der Lage des Kommas entsprechende Taste gedrückt. Der den Tasten zugeordnete Index gibt an, mit welcher Potenz von 10 die bei Z eingestellte Zahl zu multiplizieren ist. Ist Tk&lt;sub&gt;0&lt;/sub&gt; gedrückt, so ist eine Korrektur der übersetzten Zahl nicht nötig. Liegt das Komma weiter rechts, so muß der übersetzte Wert entsprechend oft mit 10, liegt er weiter links, mit 0,1 multipliziert werden. Die Multiplikation mit 10 bedeutet in halblogarithmischer Form (10 = LO&lt;sup&gt;LL&lt;/sup&gt; · L,0L ), die Addition von LL im Teil A und im Teil B die Addition von b + b/ 4; sie läßt sich also in einem Spiel erledigen. Die zugehörigen Einstellungen Fc , Fd , Ec 18 , Ei , Ab 0 , As , Fh , Fi , Fk , Fl bewirkt das Relais Ug (nicht gezeichnet). Ug schaltet ferner Br ein, wodurch der Wert ausgerichtet wird (vgl. Seite 13). Die Addition von 3 wird durch Subtraktion von −3 bewirkt, der Grund wird weiter unten angegeben (Einstellung von LLLLL00 über Ei und von Ab 0 ).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Fig. 20 shows the subcircuit K for setting the comma. The key corresponding to the position of the comma is pressed. The index assigned to the keys indicates with which power of 10 the number set at Z is to be multiplied. If Tk&lt;sub&gt;0&lt;/sub&gt; is pressed, a correction of the translated number is not necessary. If the comma is further to the right, then the translated value must be multiplied by 10, if it is further to the left, multiplied by 0.1. The multiplication by 10 means in semilogarithmic form (10 = LO &lt;sup&gt;LL&lt;/sup&gt; · L, 0L), the addition of LL in part A and in part B the addition of b + b / 4; So it can be done in a cycle. The associated settings Fc, Fd, Ec 18, Ei, Ab 0, As, Fh, Fi, Fk, Fl causes the relay Ug (not shown). Ug also turns on Br, which aligns the value (see page 13). The addition of 3 is effected by subtracting -3, the reason given below (setting LLLLL00 above Ei and from 0).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Die Multiplikation mit 0,1 ist etwas komplizierter. 1 / 10 hat im Sekundalsystem die Periode 0,0 00LL bzw. in halblogarithmischer Form mit 16 Stellen hinter dem Komma:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Multiplication by 0.1 is a bit more complicated. 1/10 has in the binary system the period 0.0 00LL or in semilogarithmic form with 16 digits behind the comma:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Diese Multiplikation läßt sich in 4 Spielen wie folgt durchführen: Ist x&lt;sub&gt;0&lt;/sub&gt; der zu multiplizierende Wert, so wird&lt;br&gt;&#xA;  - im ersten Spiel x&lt;sub&gt;1&lt;/sub&gt; = L, L · x&lt;sub&gt;0&lt;/sub&gt;,&lt;br&gt;&#xA;  - im zweiten Spiel x&lt;sub&gt;2&lt;/sub&gt; = L, 000L · x&lt;sub&gt;1&lt;/sub&gt;,&lt;br&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This multiplication can be carried out in 4 cycles as follows: If x&lt;sub&gt;0&lt;/sub&gt; is the value to be multiplied, then&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;in the first cycle x&lt;sub&gt;1&lt;/sub&gt; = L, L · x&lt;sub&gt;0&lt;/sub&gt;,&lt;/li&gt;&#xA;&lt;li&gt;in the second cycle x&lt;sub&gt;2&lt;/sub&gt; = L, 000L · x&lt;sub&gt;1&lt;/sub&gt;,&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4183" LastEditorUserId="3459" LastEditDate="2019-02-03T23:08:26.133" LastActivityDate="2019-02-03T23:08:26.133" CommentCount="2" CommunityOwnedDate="2019-02-03T17:45:36.877" ContentLicense="CC BY-SA 4.0" />
  <row Id="9066" PostTypeId="1" CreationDate="2019-02-03T16:22:37.440" Score="5" ViewCount="435" Body="&lt;p&gt;&lt;sub&gt;Shamelessly stolen &lt;a href=&quot;https://www.reddit.com/r/VintageApple/comments/amjurn/&quot; rel=&quot;noreferrer&quot;&gt;from BobDenford on Reddit&lt;/a&gt;.&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I recapped my SE/30 but mistakenly reversed the polarity of the two axial capacitors (C2 and C11). Prior to my error, the machine was fully functional with the exception of being unable to produce sound. When I turned the computer on the first time after replacing the capacitors, the startup chime rang. The computer was on its side, so I didn't see whether the display worked. I turned the computer off, attached the floppy and hard drive, put it right side up, and powered it back on. The fans spun up but the computer otherwise did nothing, even after I reset it a few times and let it sit powered on for a couple of minutes, at which point I removed the motherboard, discovered my error, and replaced the two capacitors, the larger of which (C2) was bulging. After doing so, the computer still refused to produce any video or sound. I tried reseating all of the onboard components, removing all but two sticks of RAM, resetting the PRAM, and pressing both the debug and reset buttons on the side of the motherboard several times to no avail. The floppy drive does nothing, even when a disk is inserted, and my scsi2sd flashes a yellow light once upon powering the machine on, then remains inactive. There is no obvious physical damage to the board, aside from the now-replaced bulging capacitor, and there is no indication that any of the components are missing their magic smoke (that is to say, I never saw, smelled, or heard any).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A working motherboard inserted into the same machine produces a display (no sound, still have to recap that one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the board irreversibly destroyed? If not, what is likely to be damaged and how can I repair it?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2019-02-03T16:47:29.550" LastActivityDate="2019-02-11T19:40:04.380" Title="Is is possible to repair a SE/30 with reversed C2 and C11 capacitors?" Tags="&lt;apple-macintosh&gt;&lt;repair&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9067" PostTypeId="2" ParentId="9066" CreationDate="2019-02-03T18:42:00.477" Score="7" Body="&lt;p&gt;The schematics for the SE/30 can easily be found on internet, &lt;a href=&quot;https://www.macintoshrepository.org/875-macintosh-se-30-schematics-and-repair&quot; rel=&quot;nofollow noreferrer&quot;&gt;for example here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what I can see on the main circuit board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A quick glance tells that C2 is connected between ground and +12 V through a ferrite (L11) and 5 Ohms (two 10 Ohm resistors in parallel, R14 and R15). That means that you tried to take up to 2.4 Amps from the 12V. I doubt it was designed to handle that much current. The question is if the resistors were burnt also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C11 is connected directly between +5V and ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The schematics I got hold of might not be correct ones for the power supply. They contain 2x +12 V. Disk and Sweep. I will here follow the +12V Disk, since it seems the most probable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the power supply is completely without protection in form of fuses or over current for the +12V, the transformer (TI51) might been burnt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the +12V (Disk) is missing, the transformer is most probably bad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The +12V Sweep is generated in IC252, which seems like a normal voltage generator, so in the case of +12V Sweep being bad, I'd say that the problem is in IC252.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 1&#xA;Seems the problem is solved:&#xA;&quot;Edit: Running the jumper wire from C25 to pin 11 of UB11 solved the problem. Thank you for your assistance. I don't think I would've been able to fix my SE/30 without it.&quot; (From reddit thread)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C25 is parallel with C2, and they are (normally) connected to UB10/UB11 pins 11 and 12. So, the re-cap did apparently damage the circuit board enough to make a open circuit there. (Well, it can happen the best. I've had to fix some boards myself with jumper wires...)&lt;/p&gt;&#xA;" OwnerUserId="10565" LastEditorUserId="10565" LastEditDate="2019-02-11T19:40:04.380" LastActivityDate="2019-02-11T19:40:04.380" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9068" PostTypeId="2" ParentId="8095" CreationDate="2019-02-03T21:16:05.850" Score="4" Body="&lt;p&gt;Some arithmetic operations in the Xerox Alto would leave registers in &lt;em&gt;unpredictable&lt;/em&gt; states, as the cycle time was shorter than the total propagation time of the ALU:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;With a 137ns clock cycle time, the CP pushes the underlying hardware to its limits. As a result, some combinations of input sources requested by a microinstruction will not produce valid results because the data simply cannot all make it to its destination on time. Some combinations will produce garbage in all bits, but some will be correct only in the lower nibble or byte of the result, with the upper bits being undefined. (This is due to the ALU in the CP being comprised of four 4-bit ALUs chained together.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;-- &lt;a href=&quot;https://engblg.livingcomputers.org/index.php/2019/01/19/introducing-darkstar-a-xerox-star-emulator/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://engblg.livingcomputers.org/index.php/2019/01/19/introducing-darkstar-a-xerox-star-emulator/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="461" LastActivityDate="2019-02-03T21:16:05.850" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9069" PostTypeId="2" ParentId="8095" CreationDate="2019-02-03T22:01:37.407" Score="1" Body="&lt;p&gt;And then there are data registers of various FPUs leaving one or more entries in unspecified state after an operation. Well known for example the AMD 9511 series where next to all higher FP functions like &lt;code&gt;SIN&lt;/code&gt; or &lt;code&gt;LOG&lt;/code&gt; working on a single argument leave at least two entries in undefined states (*1).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Two operand functions always leave one entry undefined due to their nature.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorDisplayName="user39" LastEditDate="2019-02-09T18:55:24.420" LastActivityDate="2019-02-09T18:55:24.420" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9070" PostTypeId="2" ParentId="6009" CreationDate="2019-02-04T01:04:30.097" Score="3" Body="&lt;p&gt;I also have an Amiga 500 (3 500 models) in addition to 3 C64 (2 Breadbin/1 C64C).  All are NTSC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For fun I attempted to connect my Amiga 500 using the Composite out on the A520 to my Samsung 75&quot; Smart TV (UN75J6300) and lo and behold IT WORKED!!! I was shocked as I expected it to fail...I then tried my C64 and it to with some minor hue being off (fixed via tv settings) it also worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So would appear that some of the Samsung Smart TVs support 15khz which is awesome. I have been playing games on that 75&quot; tv and let me tell you eve in 2018 the music/Mods sound fantastic. For example, Battle Squadron through theater speakers on that 75 was a slice of nostalgic heaven!!!&lt;/p&gt;&#xA;" OwnerUserId="11852" LastActivityDate="2019-02-04T01:04:30.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9071" PostTypeId="2" ParentId="8983" CreationDate="2019-02-04T03:23:22.013" Score="2" Body="&lt;p&gt;Some background: I worked as a software developer at the Kennedy Space Center (KSC) from 1989 to 1995.  The technical aspects of GremlinWrangler's answer are accurate as far as I can recall, but here are a few other important details:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GremlinWrangler is correct that all processing happened on the ground at KSC up to launch, and then the Orbiter's on-board computers took over at liftoff.  The Space Center had 4 &quot;firing rooms&quot; at the Launch Control Center (LCC).  One of these four firing rooms was used for any given launch, and if you have ever seen &lt;a href=&quot;https://www.youtube.com/watch?v=TnvTB-tZtjg&quot; rel=&quot;nofollow noreferrer&quot;&gt;video of the folks at console computers&lt;/a&gt; during a Space Shuttle launch, that is a firing room.  Now at any given time, not necessarily all four firing rooms were available to control a launch (&lt;a href=&quot;https://www.nasa.gov/centers/kennedy/pdf/714795main_firing-rooms.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;one was originally just a conference room, one was extensively remodeled in 2006&lt;/a&gt;), but there were always at least 2 or 3 firing rooms &quot;in commission&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, all of these computers (including the Orbiter's 5 computers, or &quot;GPCs&quot;, and those in each Firing Room) were built in the 1970s, and in 1998 were &lt;em&gt;still&lt;/em&gt; in place using 1970s technology!  Each console in the firing room was, if I recall correctly, equipped with just 64 KB of RAM.  By comparison, my desktop in 1998 had a few megabytes of RAM.  All of the sensors from the pad and the shuttle were fed back into one Common Data Buffer in the firing room, which contained a whopping 128 KB (yes Kilobytes) of RAM (technically configured as 64 KB of 16-bit words).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this to say, it should be painfully obvious that a rocket, no matter &lt;em&gt;how&lt;/em&gt; innovative or unique, designed and built in the 1970s, with a computerized launch system designed and built at the same time, was still ~25 year old technology by 1998.  There's no way even a room full of these 16-bit 64K computers were even a fraction of the entire processing power available in the world in 1998.&lt;/p&gt;&#xA;" OwnerUserId="11853" LastActivityDate="2019-02-04T03:23:22.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9072" PostTypeId="2" ParentId="8487" CreationDate="2019-02-04T09:43:41.597" Score="1" Body="&lt;p&gt;CP/M, first released in 1974 had a utility called &lt;a href=&quot;http://www.gaby.de/cpm/manuals/archive/cpm22htm/ch4.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;DDT&lt;/a&gt; (dynamic debugging tool) which offers the features you list, but in the context of assembly language. It's a bit of a stretch to say you could examine the call stack, you could examine the stack. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, given that you talked about &quot;mainstream&quot; and microcomputers, I think it qualifies because back in the eight bit days, if you wanted to do anything serious on a micro, you programmed in assembler.  &lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2019-02-04T09:43:41.597" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9073" PostTypeId="2" ParentId="9053" CreationDate="2019-02-04T15:41:55.563" Score="18" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502&quot; rel=&quot;noreferrer&quot;&gt;6502&lt;/a&gt;, released in 1975, had a missing instruction when first released: it had a ROL (ROtate bits Left) instruction, but no corresponding ROR (ROtate bits Right) instruction. This was not an oversight on the designers' part, rather that the found a bug in the circuit for the ROR instruction during final testing. Rather than delay the release of their new product (and waste all the chips they'd already manufactured), they omitted any mention of the ROR instruction from their &lt;a href=&quot;http://6502.org/documents/datasheets/mos/mos_6501-6505_mpu_preliminary_aug_1975.pdf&quot; rel=&quot;noreferrer&quot;&gt;1975 datasheet&lt;/a&gt; (page 6). The next year, they'd fixed the bug in their new processors, and the ROR instruction was included from the &lt;a href=&quot;http://6502.org/documents/datasheets/mos/mos_6500_mpu_preliminary_may_1976.pdf&quot; rel=&quot;noreferrer&quot;&gt;1976 datasheet&lt;/a&gt; (page 5) onward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some versions of Microsoft BASIC for 6502 machines had workarounds in their floating point instructions to avoid using the ROR instruction. See &lt;a href=&quot;https://www.pagetable.com/?p=45&quot; rel=&quot;noreferrer&quot;&gt;https://www.pagetable.com/?p=45&lt;/a&gt; for an example.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-02-04T15:41:55.563" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9074" PostTypeId="1" AcceptedAnswerId="9075" CreationDate="2019-02-04T16:39:50.123" Score="12" ViewCount="2116" Body="&lt;p&gt;Terminal escape codes can be used for various functions such as positioning the cursor or querying the size of the screen.  What was the largest resolution (in columns and rows of characters) supported by the encoding of escape codes?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question may be answered in the context of a standard (such as ANSI), or for a particular terminal model; either is acceptable.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2019-02-04T16:44:44.883" LastActivityDate="2020-11-17T23:30:42.507" Title="What was the largest resolution supported by terminal escape codes?" Tags="&lt;terminal&gt;&lt;escape-codes&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9075" PostTypeId="2" ParentId="9074" CreationDate="2019-02-04T16:48:01.847" Score="23" Body="&lt;p&gt;There is no limit, at least not by definition. And more so, not something across all terminals ever made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most prominent nowadays (*1) is the so-called &lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_escape_code&quot; rel=&quot;noreferrer&quot;&gt;ANSI sequences&lt;/a&gt; standard - understood by next to all terminals built after ~1978. Trying to be as device agnostic as possible, it implies no upper limits by itself. The structure is built (*2) around an initiating sequence (&lt;code&gt;ESC&lt;/code&gt;+&lt;code&gt;[&lt;/code&gt;; *3), one (or more, separated by &lt;code&gt;;&lt;/code&gt;) value(s) expressed in ASCII numerals, and a command letter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;lt;ESC&amp;gt;[&amp;lt;Value&amp;gt;A&lt;/code&gt; moves the cursor &amp;lt;Value&gt; lines up.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;lt;ESC&amp;gt;[&amp;lt;Value1&amp;gt;;&amp;lt;Value2&amp;gt;H&lt;/code&gt; moves the cursor to line &amp;lt;Value1&gt; and column &amp;lt;Value2&gt;, counted from the top left position (as 0;0).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There is no definition how many valid digits a value may have, or what's their upper limit. While the standard defines a default value of Zero for a left out parameter, it doesn't always apply, as these examples conveniently display. Where Cursor-Up assumes 1 as default, if no value is given, Cursor-Positioning assumes 0;0 as default (*4). Similarly, upper limits are defined by each command and terminal depending on their capabilities (and how intelligent or lazy the programming was done).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, since the late 70s at least that is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - And based around the command sequences defined for the popular &lt;a href=&quot;https://en.wikipedia.org/wiki/VT52&quot; rel=&quot;noreferrer&quot;&gt;DEC VT-52&lt;/a&gt; of 1975.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Or CSI (Control Sequence Indicator), X'9B' - that's ESC set with high bit set. A trick to reduce overhead after 8 bit lines became standard. Not that it meant a lot with the verbose encoding anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - It is simply a left over from ANSI-encoding being an extension of the VT52 command set - here &lt;code&gt;ESC&lt;/code&gt;+ &lt;code&gt;A&lt;/code&gt; moved the cursor up one line, so for compatibility it had to do the same in the later standard.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-02-04T21:45:35.717" LastActivityDate="2019-02-04T21:45:35.717" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9076" PostTypeId="2" ParentId="9074" CreationDate="2019-02-04T16:52:58.810" Score="8" Body="&lt;h3&gt;Tektronix (and emulated Tektronix) graphics mode&lt;/h3&gt;&#xA;&lt;p&gt;Not &lt;em&gt;exactly&lt;/em&gt; what you are looking for (because not &amp;quot;characters&amp;quot;), but Tektronix 4010/4014 mode as supported by Wyse 99GT and Wyse 370 (and I assume by actual Tektronix terminals, though I haven't used those since ~ 1986), supported Escape Codes for positioning on a 4,096 x 4,096 virtual display. According to the Wyse 370 manual, the actual display is a (simulated, of course, not actually that high resolution) &lt;strong&gt;4,096 x 3,128&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Wyse 370 could actually display up to &lt;strong&gt;161&lt;/strong&gt; columns of text, though I never used it in that mode.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-02-04T16:52:58.810" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9079" PostTypeId="2" ParentId="4805" CreationDate="2019-02-04T19:54:26.703" Score="10" Body="&lt;p&gt;This was indeed Jim Summers who wrote Star Spores. He also wrote Slime and Astro-Rescue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find them on my site, with his permission.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.commodoregamebase.com/details.asp?gid=655&amp;amp;pl=PET&quot; rel=&quot;noreferrer&quot;&gt;Star Spores&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11859" LastEditorUserId="3328" LastEditDate="2019-02-05T07:10:59.063" LastActivityDate="2019-02-05T07:10:59.063" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9081" PostTypeId="2" ParentId="9074" CreationDate="2019-02-05T10:41:02.337" Score="4" Body="&lt;p&gt;In the early 1980s practically every terminal had its own particular set of escape codes, to the point where the software we were selling then had a separate module which we could quickly reprogram as each customer sent us a copy of their terminal's manual. This continues at least as far as 1984.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some &quot;grown-up&quot; terminals did indeed use escape sequences that gave X and Y coordinates as straightforward decimal numbers, sequences of characters between '0' and '9'. But this demanded exceptionally high computing capacity in the terminal itself, and of course also higher bandwidth in the connection from computer to terminal. Thus our &quot;terminal adaptor&quot; layer maintained two memory maps, one of the screen as it ought to be and one of the screen as it currently was, and its main job was to work out the &quot;optimum&quot; way of turning &quot;current&quot; into &quot;ought to be&quot;. For instance, if characters 1 and 5 on a line have changed, is it better to send &quot;character 1, escape sequence, character 5&quot;, or &quot;character 1, character 2, character 3, character 4, character 5&quot;? Life was made more interesting by the fact that some terminals had short ways of moving from one position to another, other than a full X-Y positioning (think of the LF character, for an example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer to the question is that in the minority of terminals that thought of themselves as cut-down supercomputers and actually did all the multiplications and additions required to convert &quot;1,0,0&quot; into the number 100, there was no intrinsic limit to the addressable positions on the screen. But most terminals would try to encode each coordinate in one character, which meant a maximum of 95 or so if you confined yourself to printable characters or a maximum of 128 if you allowed any character at all. What encoding was used, and whether X came before Y or Y came before X, was down to the manufacturer's whim.&lt;/p&gt;&#xA;" OwnerUserId="11867" LastActivityDate="2019-02-05T10:41:02.337" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9082" PostTypeId="1" AcceptedAnswerId="9083" CreationDate="2019-02-05T12:54:44.357" Score="21" ViewCount="8084" Body="&lt;p&gt;When I run PC-DOS on my 4 core AMD Phenom chip, does it &lt;strong&gt;&lt;em&gt;take advantage of the extra parallel CPU's?&lt;/em&gt;&lt;/strong&gt; If not, is there a way to coax DOS to use all available CPU's or does this require specific developer programming at the assembly or C compilation time?&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="79" LastEditDate="2019-02-06T22:16:48.193" LastActivityDate="2019-04-05T20:42:30.820" Title="Will PC-DOS run faster on 4 or 8 core modern machines?" Tags="&lt;ms-dos&gt;&lt;assembly&gt;&lt;cpu&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9083" PostTypeId="2" ParentId="9082" CreationDate="2019-02-05T13:10:17.613" Score="45" Body="&lt;h3&gt;No, DOS won't use any additional CPU (*1) ever.&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;(Though it might run faster due them new CPUs being faster)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Quite the same way as DOS doesn't take advantage of the extended memory or additional instructions.&lt;/p&gt;&#xA;&lt;p&gt;DOS is a&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Single CPU&lt;/li&gt;&#xA;&lt;li&gt;Single User&lt;/li&gt;&#xA;&lt;li&gt;Single Task&lt;/li&gt;&#xA;&lt;li&gt;Single Program&lt;/li&gt;&#xA;&lt;li&gt;Real Mode&lt;/li&gt;&#xA;&lt;li&gt;8086&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;operating system.&lt;/p&gt;&#xA;&lt;p&gt;Even through it got a few extensions over time to tap a bit into newer developments, like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A20 Handler for &lt;a href=&quot;https://en.wikipedia.org/wiki/High_memory_area&quot; rel=&quot;noreferrer&quot;&gt;HMA&lt;/a&gt; usage&lt;/li&gt;&#xA;&lt;li&gt;Utilities for extended memory usage like &lt;a href=&quot;https://en.wikipedia.org/wiki/HIMEM.SYS&quot; rel=&quot;noreferrer&quot;&gt;HIMEM.SYS&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/EMM386&quot; rel=&quot;noreferrer&quot;&gt;EMM386&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Usage of certain 286 instructions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;it never left its original setup. That's what Unix, OS/2 and Windows NT were meant for.&lt;/p&gt;&#xA;&lt;p&gt;Similar goes for third party extensions like background utilities (&lt;a href=&quot;https://en.wikipedia.org/wiki/Borland_Sidekick&quot; rel=&quot;noreferrer&quot;&gt;SideKick&lt;/a&gt;) or process swappers/switchers (&lt;a href=&quot;https://en.wikipedia.org/wiki/DoubleDOS&quot; rel=&quot;noreferrer&quot;&gt;DoubleDos&lt;/a&gt; et.al.), or the eventually furthest reaching combination of all, Windows (up to 98). They all added layers to manage DOS for some increased functionality, but didn't (and couldn't) change its basic workings.&lt;/p&gt;&#xA;&lt;p&gt;Of course, application programs can use additional features of a machine, no matter if it's new CPU instructions, a new graphics card, more memory, or in this case an additional CPU. Much like &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS_extender&quot; rel=&quot;noreferrer&quot;&gt;DOS-extenders&lt;/a&gt; allowed protected mode programs to run as DOS applications, most notably maybe &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS/4G&quot; rel=&quot;noreferrer&quot;&gt;DOS/4GW&lt;/a&gt;, which got huge popularity due being delivered with Watcom compilers.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Then again, I do not know of any extender allowing the use of concurrent CPUs.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Edit: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9082/will-pc-dos-run-faster-on-4-or-8-core-modern-machines/9083?noredirect=1#comment30853_9083&quot;&gt;Stephen Kitt found&lt;/a&gt; a lovely new (2015) project, called &lt;a href=&quot;https://www.codeproject.com/Articles/894522/The-Low-Level-M3ss-DOS-Multicore-Mode-Interface&quot; rel=&quot;noreferrer&quot;&gt;DOS Multicore Mode Interface&lt;/a&gt;,  preparing DOS for multi CPU applications. It allows utilization and synchronisation across CPUs and serializes DOS calls between them.&lt;/em&gt; (*2)&lt;/p&gt;&#xA;&lt;p&gt;It's worth noting that none of these additions - including the application specific DOS-extenders - were changing the basic paradigm of DOS as a single-user, single-task operating system.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - What to call it? CPU, core, hyperthread, socket? Well, in ye good olde times of simple microprocessors we couldn't care less. Nowadays it gets blurry. With multiple processing units of various quality it gets hard to qualify. For most purposes the professional world continues to call the device (IC) a CPU, but avoids the term when it comes to system building and talks now about &lt;em&gt;sockets&lt;/em&gt;, leaving open how many processing units the IC plugged in will have - or if at all. Often the term &lt;em&gt;core&lt;/em&gt; is used instead, but thanks to Intel using this as well as a brand name, it got blurred again. So for all RC.SE purposes I stay with the term CPU, as vague as it is, and qualify if needed.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Beside potential conflict with BASICA/GWBASIC, it of course works only with applications aware of the extension - and is less than perfect. Still, the very basic approach can already realize most of the potential, especially when taking into account that modern CPUs (the very ones offering more cores) are much faster than mid-1980s predecessors, a little slowdown for DOS access matters even less.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-04-05T20:42:30.820" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9084" PostTypeId="2" ParentId="9082" CreationDate="2019-02-05T13:13:05.530" Score="13" Body="&lt;p&gt;If by IBM DOS you mean IBM PC DOS, which was a rebrand/derivate of MS-DOS, then the answer is no - DOS will only ever support a single core. HyperThreading and multiple cores is simply not supported by DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making DOS use multiple cores would be a major operation. Firstly DOS would have to support multitasking. It could not be task switching or cooperative multitasking, it would have to be full pre-emptive multitasking. Then it would need to be developed to support SMP (symmetric multiprocessing). Both of these tasks would be major undertakings - their peers in the 90s took years to get reliable and efficient multiprocessing support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible that a single application could take advantage of multiple cores if it used DOS as a bootstrap and then kicked DOS out, and essentially became its own operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking for a 90s-era operating system that supports multiple cores, then you would be looking at Linux (2.0 or later), Windows NT 4 or OS/2 Warp.&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2019-02-05T13:13:05.530" CommentCount="29" ContentLicense="CC BY-SA 4.0" />
  <row Id="9085" PostTypeId="1" CreationDate="2019-02-05T13:28:08.217" Score="33" ViewCount="11136" Body="&lt;p&gt;Machine language (and Assembly language) don't have the concept of data types, so if you want to add an &lt;code&gt;int&lt;/code&gt; and a &lt;code&gt;float&lt;/code&gt; variables in Assembly, you have to use the appropriate Assembly instruction that adds an &lt;code&gt;int&lt;/code&gt; and a &lt;code&gt;float&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you are working with a high level language (for example: C), all you have to do is &quot;mark&quot; one variable with the &lt;code&gt;int&lt;/code&gt; keyword and mark the other variable with the &lt;code&gt;float&lt;/code&gt; keyword, and then use the &lt;code&gt;+&lt;/code&gt; operator to add the two variables together, and the compiler will generate the machine language instruction that adds an &lt;code&gt;int&lt;/code&gt; and &lt;code&gt;float&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am wondering, which was the first programming language that had data types?&lt;/p&gt;&#xA;" OwnerUserId="11869" LastActivityDate="2019-02-09T01:14:54.417" Title="Which was the first programming language that had data types?" Tags="&lt;history&gt;&lt;programming&gt;&lt;assembly&gt;" AnswerCount="6" CommentCount="23" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9086" PostTypeId="2" ParentId="9085" CreationDate="2019-02-05T13:56:25.067" Score="42" Body="&lt;p&gt;The premise:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Machine language (and Assembly language) don't have the concept of data types&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;is not quite correct, because &lt;a href=&quot;https://en.wikipedia.org/wiki/Tagged_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;tagged architecture&lt;/a&gt; means exactly this, machine language where the data is tagged for its &quot;type&quot; (even though not quite what we know from higher level languages). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably the first widespread tagged architecture computer was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Burroughs_large_systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;Burrough B5000&lt;/a&gt; (or 5500?) from 1960s. But FORTRAN predates this.&lt;/p&gt;&#xA;" OwnerUserId="476" LastEditorUserId="476" LastEditDate="2019-02-08T06:42:50.523" LastActivityDate="2019-02-08T06:42:50.523" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9087" PostTypeId="2" ParentId="9085" CreationDate="2019-02-05T14:43:50.453" Score="34" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Machine language (and Assembly language) don't have the concept of data types, so if you want to add an int and a float variable in Assembly, you have to use the appropriate Assembly instruction that adds an int and a float.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Erm... this sounds as if you're mixing up the idea of data types and operations on these. Data types are memory structures. Operations are an independent unit. And just because &lt;em&gt;some&lt;/em&gt; languages do provide operators that can be used with multiple data types, doesn't mean they do in general and always. For example in C the sine function is defined as:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double sin(double x)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This means feeding anything but a double, for example an integer, will screw it up. Much like using a floating point operation (like &lt;a href=&quot;https://software.intel.com/en-us/articles/the-difference-between-x87-instructions-and-mathematical-functions&quot; rel=&quot;noreferrer&quot;&gt;FSIN&lt;/a&gt;) on an x87 will choke if an integer is handed as parameter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short, Assembler does have data types and does obey them (*1). For example on a /360 (1964) that would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Type             Example    Alignment&#xA;Character        C'1234'    Byte&#xA;Binary           B'0101'    Byte &#xA;Packed (BCD)     P'1234'    Byte&#xA;Decimal          Z'1234'    Byte&#xA;Char (hex)       X'1234'    Byte&#xA;Integer 16 Bit   H'1234'    Halfword&#xA;Integer 32 Bit   F'1234'    Word&#xA;Float (32 bit)   E'-12.34'  Word&#xA;Float (64 bit)   D'-12.34'  Doubleword&#xA;Float (128 bit)  L'-12.34'  Doubleword&#xA;Pointer (32 Bit) A(1234)    Word&#xA;Pointer (16 Bit) Y(1234)    Halfword&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(There are also Q, S and V pointers, but that's extreme high level stuff :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the wrong data type in an instruction will make the assembler throw a warning, exactly the same way as a C compiler does.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But if you are working with a high level language (for example: C), all you have to do is &quot;mark&quot; one variable with the int keyword and mark the other variable with the float keyword, and then use the '+' operator to add the two variables together, and the compiler will generate the machine language instruction that adds an int and float.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As said before, C does this only for a handful of predefined operators for convenience, not in general and all over. C99 resolved this in part by selecting one of several possible functions fitting the operand type(s), and C++ used overloading. Still, not by default and everywhere.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But I am wondering, which was the first programming language that had data types?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As shown, it's Assembly :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside that, &lt;strong&gt;each and every programming language that was ever designed and implemented for a real machine does include data types&lt;/strong&gt;. After all, without it won't operate, would it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the question is more about implied type conversion (and/or selection), then again Assembly will be a valid answer, as Assembly offers the same ways as C/C++ to write code that adapts to data types (*2). Now, if you insist to exclude Assembly for whatever ideological reason, then &lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL&quot; rel=&quot;noreferrer&quot;&gt;ALGOL 60&lt;/a&gt; (*3) may be a good candidate. The sometimes cited FORTRAN introduced it quite late (*4) with FORTRAN 77 (in 1978) (*5) using intrinsics (introduced with FORTRAN 66).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Or better &lt;em&gt;can&lt;/em&gt;, as many - let's say less proficient - programmers decide to ignore or even disable that feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - As usual, the secret lies within meta programming - aka Macros - much you do overloading in C++. Except, Assembler does not even force you to use existing operators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - In fact, ALGOL is a very nice example for the issues of automatic conversion and how to handle it. Where ALGOL 60 added arbitrary type conversion, like its descendant C,  ALGOL 68 restricted automatic type conversion later, to only work upward, to avoid program/data errors due to precision loss. So INT could be implied converted to FLOAT, but a downward conversion had to be explicit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Which let people use explicit conversions way into the 80s, making it hard to update programs until today. A great example of the advantages of clear, stringent and centralized definition. The ability to switch from single to double or long with just a few changes, instead of debugging huge piles of old code to find each and every explicit conversion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9085/which-was-the-first-programming-language-that-had-data-types/9086?noredirect=1#comment28864_9086&quot;&gt;another-dave pointed out in a comment&lt;/a&gt; IBM's Fortran II (of 1958) did automatic type conversion between float and int when assigning the result of an expression (See p.22 'Mode of an Arithmetic Statement' in the &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/fortran/F28-8074-3_FORTRANII_GenInf.pdf&quot; rel=&quot;noreferrer&quot;&gt;manual&lt;/a&gt;). The expression itself had to be, in all parts, either integer or float, thus it might not fit case made by the OP.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-02-06T14:56:34.477" LastActivityDate="2019-02-06T14:56:34.477" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="9088" PostTypeId="2" ParentId="9085" CreationDate="2019-02-05T14:44:57.827" Score="19" Body="&lt;p&gt;Perhaps &lt;a href=&quot;https://en.wikipedia.org/wiki/Plankalk%C3%BCl&quot; rel=&quot;noreferrer&quot;&gt;Plankalkül&lt;/a&gt; (1942-45).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Plankalkül [has ...] floating point arithmetic, arrays, hierarchical&#xA;  record structures [...] The Plankalkül provides a data structure&#xA;  called generalized graph (verallgemeinerter Graph), which can be used&#xA;  to represent geometrical structures. [...] Some features of the&#xA;  Plankalkül: [...]&#xA;      composite types are arrays and tuples&#xA;      [...] The only primitive data type in the Plankalkül is a single bit, denoted by S0. Further data types can be built up from these.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Addition&lt;/strong&gt;: from &lt;a href=&quot;https://archive.org/details/bitsavers_stanfordcs562EarlyDevelPgmgLangAug76_5916830&quot; rel=&quot;noreferrer&quot;&gt;Stanford CS-76-562&lt;/a&gt; &lt;em&gt;Early development of programming languages&lt;/em&gt; (Knuth &amp;amp; Pardo).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Thus the Plankalkül included the important concept of hierarchically&#xA;  structured data, going all the way down to the bit level. Such&#xA;  advanced data structures did not enter again into programming&#xA;  languages until the late 1950's, in IBM's Commercial Translator. The&#xA;  idea eventually appeared in many other languages, such as FACT, COBOL,&#xA;  PL/I, and extensions of ALGOL 60&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are some details about numbers also:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Integer variables in the Plankalkül were represented by type A9.&#xA;  Another special type was used for floating-binary numbers, namely&#xA;  [...] The first three-bit component here was for signs and special&#xA;  markers -- indicating, for example, whether the number was real or&#xA;  imaginary or zero; the second was for a seven-bit exponent in two's&#xA;  complement notation; and the final 22 bits represented the 25-bit&#xA;  fraction part of a normalized number, with the redundant leading &quot;11&quot;&#xA;  bit suppressed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2019-02-05T18:53:41.327" LastActivityDate="2019-02-05T18:53:41.327" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="9089" PostTypeId="2" ParentId="9082" CreationDate="2019-02-05T15:00:03.917" Score="2" Body="&lt;p&gt;The answers above are correct about the core usage, but it would still be faster than old machines because the clock (MHz/GHz) of the CPU is faster. This is actually problematic on many of the old games because things happen faster than you can react.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to test/play without committing to a wipe/load scenario, you could always try &lt;a href=&quot;https://www.freedos.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FreeDOS&lt;/a&gt; on an emulator or on an old hard drive.&lt;/p&gt;&#xA;" OwnerUserId="11871" LastActivityDate="2019-02-05T15:00:03.917" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9090" PostTypeId="2" ParentId="9082" CreationDate="2019-02-06T00:21:14.533" Score="4" Body="&lt;p&gt;DOS itself won't do anything to boot up the &quot;extra&quot; cores in a multicore system, running only on the boot CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A program that does that is normally called an operating system&lt;/strong&gt;.  You could certainly have a program that takes over from DOS.  Maybe even one that saves the previous DOS state and could exit back to DOS.  But nobody's written such a thing.  You can probably find bootloaders that will load Linux from DOS, though.  It would involve taking over the interrupt table and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-like&quot;&gt;https://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-like&lt;/a&gt; includes an answer with some details on what you'd need to do on x86 to bring up other cores to send inter-processor interrupts (IPIs) that bring up other cores.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;CPUs with fewer cores tend to have higher guaranteed clock speeds, because each core has a higher power budget.&lt;/strong&gt;  But CPUs that support &quot;turbo&quot; typically have a high single-core turbo clock they can use when other cores are idle.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Modern Intel CPUs with more cores also tend to have more L3 cache&lt;/strong&gt;; a single core can benefit from &lt;em&gt;all&lt;/em&gt; the L3 cache on the whole die.  (Not on other CPUs in a multi-socket system, though).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're using a DOS extender that allows a DOS program to access more than 1MiB of RAM (e.g. running in 32-bit protected mode), then it might actually benefit from having more than the 3MiB of L3 cache that a low-end dual-core system has.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But otherwise DOS can't use more memory than the smallest L3 caches on modern mainstream x86 CPUs.  (Or on Skylake-X, the per-core L2 caches are 1MiB, up from 256kiB, so other than unacheable I/O / device / VGA memory, everything would be a cache hit with 13 cycle latency, much faster than ~45 cycle latency L3 in a dual or quad core!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there's a downside to having more cores on Intel CPUs: L3 cache latency.  They put a slice of L3 along with each core, and cores + L3 are connected by a ring bus.  So more cores means more hops on the ring bus on average to get to the right slice.  (This is reportedly even worse on Skylake-X, where a mesh connects cores.  It's odd because a mesh should mean fewer hops.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This extra latency also affects DRAM access, so single-core memory bandwidth is &lt;em&gt;better&lt;/em&gt; on dual / quad core desktop CPUs than on big many-core Xeons.  &lt;a href=&quot;https://stackoverflow.com/questions/39260020/why-is-skylake-so-much-better-than-broadwell-e-for-single-threaded-memory-throug&quot;&gt;Why is Skylake so much better than Broadwell-E for single-threaded memory throughput?&lt;/a&gt;.  Even though the Xeon has quad-channel or 6-channel memory controllers, a single core can't saturate them and actually has worse bandwidth than a single core of the same clock speed on a quad-core part.  Bandwidth is limited by max_concurrency / latency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Of course this doesn't apply to L2 cache hits, and 256kiB L2 is a good fraction of the total memory that DOS programs can use without a DOS extender.  And 2, 4, or 8 MiB of L3 cache is pretty huge by DOS standards.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;AMD Ryzen is different: it uses &quot;core clusters&quot; which each group of 4 cores share an L3 cache.&lt;/strong&gt;  More total cores won't give you more L3 that a single core can benefit from.  But within a cluster, L3 latency is fixed and pretty good.&lt;/p&gt;&#xA;" OwnerUserId="3296" LastActivityDate="2019-02-06T00:21:14.533" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9091" PostTypeId="2" ParentId="9053" CreationDate="2019-02-06T02:13:50.790" Score="4" Body="&lt;p&gt;Socialism is terrible - but there are other reasons for &amp;quot;cut corners&amp;quot; leading to missing instructions.  For example, capitalism.&lt;/p&gt;&#xA;&lt;p&gt;In the minicomputer era it was reasonably common for there two be two variants of a machine: one without floating point and one with.  You paid more $$$$ for the one with.&lt;/p&gt;&#xA;&lt;p&gt;I'm thinking specifically of the Honeywell 716 - but there were several others.  One interesting thing about the 716: It wasn't a matter of the expense of the parts.  The only motherboard &lt;em&gt;had&lt;/em&gt; the parts.  The difference between the 716 without FP and the 716 with FP was that to add FP you cut a trace on the motherboard.&lt;/p&gt;&#xA;&lt;p&gt;(The general customer didn't know this of course.  I know it because I worked for a Honeywell division that saved money by buying 716s without and using a xacto knife to turn them into 716s with.)&lt;/p&gt;&#xA;&lt;p&gt;This isn't quite the same, to my mind, as whether you had a FP coprocessor or not, for machines that did that, as in the 8086/8087.  I mean, it is sort of.  But, it also isn't sort of.  (Maybe someone can help me clarify this thought...)&lt;/p&gt;&#xA;&lt;p&gt;(You can also quibble if you wish that this doesn't really answer the OP' question.  Maybe not.  But where else could I explain this?)&lt;/p&gt;&#xA;" OwnerUserId="332" LastEditorUserId="576" LastEditDate="2021-03-24T16:30:05.363" LastActivityDate="2021-03-24T16:30:05.363" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9092" PostTypeId="2" ParentId="9085" CreationDate="2019-02-06T10:40:34.173" Score="5" Body="&lt;p&gt;Let's get the answer to the question out of the way first. Limiting ourselves to high level languages designed for electronic digital computers and that are not really obscure, the answer is between Cobol and Fortran depending on which was invented first.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Machine language (and Assembly language) don't have the concept of data types&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is not true. Many assembler languages have multiple different sized words they can operate on and some have floating point types. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But if you are working with a high level language (for example: C), all you have to do is &quot;mark&quot; one variable with the int keyword and mark the other variable with the float keyword, and then use the + operator to add the two variables together, and the compiler will generate the machine language instruction that adds an int and float.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's called implicit coercion and while it's true that you need data types to do implicit coercion so that the compiler knows &lt;em&gt;how&lt;/em&gt; to do the coercion, coercion is not synonymous with data types or even a necessary condition. Swift, for example, has no implicit coercion - you always have to convert both operands to the same type when doing arithmetic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are three related concepts here that are being confused,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;types assign a meaning to certain bit patterns in memory. They tell you and the compiler what kind of object a thing in memory is and what you can do with it.&lt;/li&gt;&#xA;&lt;li&gt;type checking is where the compiler or the language runtime checks that an operation is valid for a particular type&lt;/li&gt;&#xA;&lt;li&gt;implicit coercion is where the compiler or language runtime has a rule for automatically converting one type to another if needed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Almost all computer languages are typed to some degree. Some languages are called &quot;typeless&quot; e.g. the predecessor to C which was called &quot;B&quot; (in reality these languages actually have one type), often the machine word. What really distinguishes languages is not whether they are typed or not but how much type checking is done, when the type checking is done and what happens when mismatched types are found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's look at some examples:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the biggest complaints about Javascript is that its type system is very weak. This is not really true. When a program is running, the interpreter always knows exactly what type every object is. The problems with Javascript occur because type checking is done at run time (this is called &quot;dynamic typing&quot;, compile time type checking is called &quot;static typing&quot;) and if you perform an operation on an object of an incompatible type, Javascript will try to coerce it into a compatible type, sometimes with surprising results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C is relatively strongly typed with static type checking. This was not always the case. In the pre-ANSI standard days, not all conversions between types were checked. Perhaps the most egregious issue was the fact that the compiler didn't check assignments between pointers and &lt;code&gt;int&lt;/code&gt;s. On many architectures, you got away with it because &lt;code&gt;int&lt;/code&gt; and &lt;code&gt;someType *&lt;/code&gt; were the same size. However, if they were not the same size (as with my Atari ST Megamax C compiler) assigning a pointer to an &lt;code&gt;int&lt;/code&gt; would lose bits and then hilarity would ensue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trend today seems to be towards statically typed languages but with type inference. Type inference allows the programmer to omit the type specification if the compiler can infer the type of the object from the context. For example, in Swift:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;func square(_ x: Int) -&amp;gt; Int&#xA;{&#xA;    return x * x&#xA;}&#xA;&#xA;let a = square(3)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;defines a function &lt;code&gt;square&lt;/code&gt; that takes an &lt;code&gt;Int&lt;/code&gt; and returns an &lt;code&gt;Int&lt;/code&gt; and the applies it to 3 and assigns the result to &lt;code&gt;a&lt;/code&gt;. The compiler infers the type of &lt;code&gt;a&lt;/code&gt; from the return type of the function and the type of the literal &lt;code&gt;3&lt;/code&gt; from the type of the function's parameter. In C I would have to declare the type of &lt;code&gt;a&lt;/code&gt; although it does have limited inference for literals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Type inference seems to be a new trend although, as with all things in Computer Science, the concept probably dates back decades. Statically typed languages are as old as high level languages.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2019-02-06T10:40:34.173" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9093" PostTypeId="1" AcceptedAnswerId="16737" CreationDate="2019-02-06T10:46:03.630" Score="8" ViewCount="612" Body="&lt;p&gt;If we look at something like &lt;a href=&quot;https://en.wikipedia.org/wiki/LLVM&quot; rel=&quot;noreferrer&quot;&gt;LLVM&lt;/a&gt; or the &lt;a href=&quot;https://en.wikipedia.org/wiki/GNU_Compiler_Collection&quot; rel=&quot;noreferrer&quot;&gt;GNU Compiler Collection&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Dalvik_(software)&quot; rel=&quot;noreferrer&quot;&gt;Dalvik&lt;/a&gt; and many others, their &lt;a href=&quot;https://en.wikipedia.org/wiki/Intermediate_representation&quot; rel=&quot;noreferrer&quot;&gt;intermediate representation&lt;/a&gt; (IR) uses &lt;a href=&quot;https://en.wikipedia.org/wiki/Static_single_assignment_form&quot; rel=&quot;noreferrer&quot;&gt;SSA&lt;/a&gt; (Static Single Assignment form), as part of their &lt;a href=&quot;https://en.wikipedia.org/wiki/Data-flow_analysis&quot; rel=&quot;noreferrer&quot;&gt;Data-Flow Analysis&lt;/a&gt;, to essentially make sure that variables are immutable, so that they are easier to analyse and this makes it easier to implement optimisations that alter the way a computation is made, for example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Common_subexpression_elimination&quot; rel=&quot;noreferrer&quot;&gt;Common subexpression elimination&lt;/a&gt;: it is easier to identify a common subexpression in an SSA language, since it's essentially a node in a binary tree, which can be compared, along with the daughter nodes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Constant_folding&quot; rel=&quot;noreferrer&quot;&gt;Constant folding&lt;/a&gt;/constant propagation: of course, if two variables are immutable, then it's much easier to prove that they're going to have exactly the same value.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Dead_store&quot; rel=&quot;noreferrer&quot;&gt;Dead store elimination&lt;/a&gt;: For each value calculated by a program, SSA shows exactly where it is used, so of course as a side effect it will also &lt;em&gt;prove&lt;/em&gt; that it is not used (that is, it may be discarded).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And a similar bullet point could be made for many other kinds of optimisations that compilers perform, especially the ones that typically happen &lt;em&gt;before the first passes of machine code generation&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that SSA was apparently only introduced in 1988, but I am sure that optimisations that &lt;em&gt;alter the dataflow&lt;/em&gt; such as the above, were attempted long before then. They certainly have been mentioned before then, going by the citations on the Wikipedia page for global subexpression elimination for example. So what were common ways to approach this problem before 1988 when SSA was first mentioned?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Clarification&lt;/strong&gt;: I'm not asking if there were compilers that didn't bother! There's a use-case for them as well, but what I'm interested in is some of the methods that compilers used to perform the dataflow analysis and how they allowed for the optimisation to take place.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-02-06T15:36:06.233" LastActivityDate="2020-10-31T00:58:04.590" Title="How was dataflow analysis performed before SSA?" Tags="&lt;programming&gt;&lt;compilers&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9094" PostTypeId="2" ParentId="9093" CreationDate="2019-02-06T13:12:44.830" Score="7" Body="&lt;p&gt;Quite frequently it wasn't. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When your compiler is running on a 286 with 512K of memory, using floppies for storage, the optimizations by the compiler are very localized if they exist at all. Frequently the compiler wasn't even bright enough to eliminate variables that were declared but never used, let alone ones that got assignments but were never read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You know that saying 'C is a high-level assembly language'? That was very close to literally true in the early days. At that time the compilers pretty much translated statements from the language into an equivalent assembly form, assigned registers and memory locations on the stack as needed and called it a day. There simply wasn't CPU or storage for the compiler to get particularly intelligent.&lt;/p&gt;&#xA;" OwnerUserId="4356" LastActivityDate="2019-02-06T13:12:44.830" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9095" PostTypeId="1" AcceptedAnswerId="9097" CreationDate="2019-02-06T14:46:48.120" Score="13" ViewCount="2688" Body="&lt;p&gt;With the advent of microcomputers, there was a large number of manufacturers entering the home computer market. The ability to network these computers together wouldn't be very useful (or affordable) for home owners, but businesses and education/research establishments may have multiple computers, and a desire to create a local area network.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To this end, &lt;strong&gt;which manufacturers designed successful, bespoke networking systems for the microcomputers they were making?&lt;/strong&gt; A brief description of the systems and their merits would be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd consider a successful system to be one that was supported on several different machines made by the manufacturer (and possibly other manufacturers' machines) over a period of time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking mainly at the 8-bit era computer systems that were aimed at the home/small business market. I'm not looking for networking systems that were also developed for minicomputers and mainframes (such as IBM's Token Ring), just those designed for micros. &lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-02-08T11:40:25.403" LastActivityDate="2019-02-08T13:55:34.777" Title="Which microcomputer manufacturers developed their own Local Area Network systems?" Tags="&lt;8-bit-microcomputers&gt;&lt;network&gt;" AnswerCount="10" CommentCount="17" FavoriteCount="3" ClosedDate="2019-02-07T18:11:35.880" ContentLicense="CC BY-SA 4.0" />
  <row Id="9096" PostTypeId="2" ParentId="9095" CreationDate="2019-02-06T14:46:48.120" Score="25" Body="&lt;p&gt;One prime example is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Econet&quot; rel=&quot;noreferrer&quot;&gt;Econet&lt;/a&gt; networking system designed by Acorn Computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best known for their BBC Microcomputer and Archimedes systems, Acorn started with a range of modular rack-based expandable computers known as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Eurocard_systems&quot; rel=&quot;noreferrer&quot;&gt;System&lt;/a&gt; range, released from 1979 onwards. These machines were aimed at serious hobbyists, researchers, and industrial users, and could be heavily customised with a range of expansion cards, including Econet network cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Econet uses a bus topology, with a four-wire backbone carrying differential signals. One pair of wires is used for a network clock signal (generated by one node, or a dedicated clock box), with the other used for data transmission. The clock speed, which controls the data transfer rate, can be customised to suit each network installation: shorter networks can support a faster clock, but the clock must be slow enough to accommodate the slowest computer on the network.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Up to 255 nodes can be connected to an Econet, and multiple Econets can be bridged together with gateway nodes. (The individual Econets can be running at different speeds.) A node can act as a file server for other nodes (originally using floppy disks), or as a print server. File Server software was released in various &quot;Level&quot;s of complexity, which added support for user passwords, subdirectories, and hard disk storage among other features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Econet hardware was developed for the BBC Micro and Archimedes machines, and as a result many schools were fitted with Econet networks. In later years, with the growing adoption of Ethernet, Acorn developed &lt;a href=&quot;http://www.riscos.com/support/developers/riscos6/networking/aunintro.html&quot; rel=&quot;noreferrer&quot;&gt;Acorn Universal Networking&lt;/a&gt;, which added support for Ethernet and TCP/IP, while maintaining backward compatibility with Econet protocols.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More information, and copies of original documentation, is available &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/Network/Econet.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-02-06T14:46:48.120" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9097" PostTypeId="2" ParentId="9095" CreationDate="2019-02-06T15:14:20.200" Score="14" Body="&lt;p&gt;&lt;em&gt;Preface: As with many early questions, it's up to the definition of network. It might be helpful not to tie this too close to our modern understanding of a connection between (mostly) equal peers.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Well known networks on the micro/home computer side may be of course&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Acorns &lt;a href=&quot;https://en.wikipedia.org/wiki/Econet&quot; rel=&quot;nofollow noreferrer&quot;&gt;Econet&lt;/a&gt; introduced with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Atom&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atom&lt;/a&gt; in 1981&lt;/li&gt;&#xA;&lt;li&gt;Sinclair's ZX-Net introduced with the &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Interface_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spectrum Interface 1&lt;/a&gt; in 1983 (also used for QL computers)&lt;/li&gt;&#xA;&lt;li&gt;Apples &lt;a href=&quot;https://en.wikipedia.org/wiki/AppleTalk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple-Talk&lt;/a&gt; introduced in 1985 for use with Mac XL (Lisa) and standard Macs, as well as the IIgs&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But then there where literally hundreds of solutions of early networking systems centered around shared use of data storage and other resources, like printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were some repurposing concepts of existing networkings/busses&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Already for the very first PET computers (as soon as there was a disk drive) third-party drivers enabled (*1) the use of multiple 'controllers', so several PETs could share one (or more) drives (*2).&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In a most primitive way, data exchange could and was done by using the drives as 'mailboxes'. Beside a very small driver to enable multiple controllers, no additional software was needed. Application software used regular disk I/O to handle this.&lt;/li&gt;&#xA;&lt;li&gt;With a little more software, monitoring the bus while inactive, direct PET to PET communication could be done. Again using regular I/O commands.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As well as others, made special to type. More often than not based on serial connections. Such systems where often used in classrooms as well. This was already driven in 1980 as far as having micro based 'terminals' connected to a central storage server system. For example Intertec's (*3) &lt;a href=&quot;https://books.google.de/books?id=I_GaHXKwFpMC&amp;amp;pg=PA57&amp;amp;lpg=PA57&amp;amp;dq=compustar%20network&amp;amp;source=bl&amp;amp;ots=Sqy4hEIOQm&amp;amp;sig=ACfU3U0sr8jZnZSP6FFget8iGjGxsLOxJw&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=2ahUKEwjz5vK3w6rgAhWtNOwKHRDuAxgQ6AEwBXoECAUQAQ#v=onepage&amp;amp;q=compustar%20network&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;CompuStar setup&lt;/a&gt;. Quite like way later work station setups.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then there are of course network solutions independent of manufacturers - like using amateur radio to network ... but that for sure leaves the LAN category.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - A controller in context of HP's HP-IB/GPIB (or &lt;a href=&quot;https://en.wikipedia.org/wiki/IEEE-488&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEEE-488&lt;/a&gt; as called when standardized) is a device that tells others what to do - like sending data or receiving. Usually a computer. By definition the standard does allow the operation of multiple controllers (thus computers) in one network, but Commodore did not implement that part. So it was up to grabs for others to provide an extension. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - I hope this isn't disqualified, even though the GPIB was handed down from professional equipment (including mini computers) :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - More recognized today for their 1979 Twin Z80 &lt;a href=&quot;https://en.wikipedia.org/wiki/Intertec_Superbrain&quot; rel=&quot;nofollow noreferrer&quot;&gt;Superbrain&lt;/a&gt; system - which, without disks also happened to be the workstations (here called terminals)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2019-02-08T13:55:34.777" LastActivityDate="2019-02-08T13:55:34.777" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9098" PostTypeId="1" AcceptedAnswerId="9099" CreationDate="2019-02-06T15:50:32.677" Score="12" ViewCount="2077" Body="&lt;p&gt;Virtual memory, which allows an operating system to run several machine code programs isolated from each other, came to the desktop during the eighties. But full virtualization, which lets the hypervisor run several operating systems isolated from each other on the same machine, as I understand it came quite a bit later, e.g. the 386 for some reason was not able to run multiple virtual 386s. (Short of doing software emulation, which has a hefty performance penalty.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the first microprocessor that could virtualize itself to support hypervisors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The intent of specifying a microprocessor is to omit systems like the IBM 360, which usually turn out to have done these things a decade or two earlier. I would actually also be interested in which mainframes supported full virtualization, but it's not the focus of this question.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-02-07T11:58:00.797" Title="What was the first microprocessor to support full virtualization?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;microprocessor&gt;&lt;cpu&gt;&lt;virtual-memory&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9099" PostTypeId="2" ParentId="9098" CreationDate="2019-02-06T16:46:12.090" Score="21" Body="&lt;p&gt;Full, hardware-assisted virtualisation, with the intention of supporting hypervisors running operating systems without requiring para-virtualisation, was added to micro-processors relatively recently. (Many RISC-style architectures were virtualisable following &lt;a href=&quot;https://en.wikipedia.org/wiki/Popek_and_Goldberg_virtualization_requirements&quot; rel=&quot;nofollow noreferrer&quot;&gt;Popek and Goldberg’s criteria&lt;/a&gt;, and were used in high-end partitionable systems, but with external support.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main architectures which support full hardware-assisted virtualisation are the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SPARC, starting with the &lt;code&gt;sun4v&lt;/code&gt; architecture, first implemented in &lt;a href=&quot;https://en.wikipedia.org/wiki/UltraSPARC_T1&quot; rel=&quot;nofollow noreferrer&quot;&gt;the UltraSPARC T1&lt;/a&gt; in 2005;&lt;/li&gt;&#xA;&lt;li&gt;Power, starting with &lt;a href=&quot;https://en.wikipedia.org/wiki/Power_Architecture#Power_ISA_v.2.06&quot; rel=&quot;nofollow noreferrer&quot;&gt;ISA 2.06&lt;/a&gt; in 2009, implemented for example in &lt;a href=&quot;https://en.wikipedia.org/wiki/POWER7&quot; rel=&quot;nofollow noreferrer&quot;&gt;POWER7&lt;/a&gt; (earlier Power ISAs supported virtualisation, with a specific hypervisor mode, but 2.06 introduced significant virtualisation acceleration features);&lt;/li&gt;&#xA;&lt;li&gt;Itanium, starting with &lt;a href=&quot;https://en.wikipedia.org/wiki/Itanium#Itanium_9500_(Poulson):_2012&quot; rel=&quot;nofollow noreferrer&quot;&gt;Poulson&lt;/a&gt; in 2012;&lt;/li&gt;&#xA;&lt;li&gt;x86, starting with &lt;a href=&quot;https://en.wikipedia.org/wiki/X86_virtualization#Intel-VT-x&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel VT-x&lt;/a&gt; in 2005 and &lt;a href=&quot;https://en.wikipedia.org/wiki/X86_virtualization#AMD_virtualization_(AMD-V)&quot; rel=&quot;nofollow noreferrer&quot;&gt;AMD-V&lt;/a&gt; in 2006, with additional features in later architectures such as &lt;a href=&quot;https://en.wikipedia.org/wiki/X86_virtualization#Intel-VT-d&quot; rel=&quot;nofollow noreferrer&quot;&gt;VT-d&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Second_Level_Address_Translation#EPT&quot; rel=&quot;nofollow noreferrer&quot;&gt;extended page tables&lt;/a&gt; in 2008, unrestricted guests in 2010, and VMCS shadowing in 2013.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So arguably the first micro-processor with full virtualisation was the UltraSPARC in 2005 — I’ll ignore VT-x on its own since it wasn’t all that useful in practice for real-world implementations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An exact answer depends on the exact definition of full virtualisation; earlier CPUs (in particular, MIPS and PowerPCs) had good virtualisation support with the help of software emulation. In the early 2000s, as CPU speeds accelerated markedly, the performance cost of software virtualisation dropped, and virtualisation software became usable without hardware assistance in many scenarios. If we consider that virtualisation should cover the whole CPU, hardware-assisted virtualisation accelerators included, then I think the answer is Haswell in 2013 since that’s the first architecture (as far as I’m aware) to support full hardware-assisted nested hypervisors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;John Fisher-Ogden’s 2006 paper on &lt;a href=&quot;http://cseweb.ucsd.edu/~jfisherogden/hardwareVirt.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hardware Support for Efficient Virtualization&lt;/a&gt; provides a good introduction to virtualisation in IBM’s mainframes, and the architectural constraints in the x86 architecture, along with potential solutions.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-02-07T08:42:35.757" LastActivityDate="2019-02-07T08:42:35.757" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9100" PostTypeId="2" ParentId="9095" CreationDate="2019-02-06T16:47:28.810" Score="1" Body="&lt;p&gt;Regarding networking protocols, &lt;a href=&quot;https://en.wikipedia.org/wiki/X.25&quot; rel=&quot;nofollow noreferrer&quot;&gt;X.25&lt;/a&gt; is one of the earliest.  This was used by various commercial providers of networking and time-sharing systems such as &lt;a href=&quot;https://en.wikipedia.org/wiki/CompuServe&quot; rel=&quot;nofollow noreferrer&quot;&gt;CompuServe&lt;/a&gt;, as well as systems such as the UK's &lt;a href=&quot;https://en.wikipedia.org/wiki/JANET&quot; rel=&quot;nofollow noreferrer&quot;&gt;JANET&lt;/a&gt; which linked educational establishments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any discussion of early networking, we should also mention &lt;a href=&quot;https://en.wikipedia.org/wiki/ARPANET&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARPANET&lt;/a&gt; which linked various educational establishments in the US, and eventually evolved into the Internet we know today!&lt;/p&gt;&#xA;" OwnerUserId="6749" LastActivityDate="2019-02-06T16:47:28.810" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9101" PostTypeId="2" ParentId="9095" CreationDate="2019-02-06T18:53:27.760" Score="6" Body="&lt;p&gt;&lt;a href=&quot;http://www.old-computers.com/MUSEUM/computer.asp?st=1&amp;amp;c=1045&quot; rel=&quot;noreferrer&quot;&gt;IQ 151&lt;/a&gt;'s could be connected by their own proprietary network (VARIEL). The server was running CP/M, and could share floppy drive, printer, transfer BASIC programs to/from clients, in later versions and with the GRAFIK expansion card also read clients' screen. In later versions, the network could be joined by &lt;a href=&quot;https://en.wikipedia.org/wiki/PMD_85&quot; rel=&quot;noreferrer&quot;&gt;PMD 85&lt;/a&gt; as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is &lt;a href=&quot;http://www.iq151.net/download/Variel.pdf&quot; rel=&quot;noreferrer&quot;&gt;an online user manual&lt;/a&gt; available (in Czech).&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2019-02-06T18:53:27.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9102" PostTypeId="2" ParentId="9095" CreationDate="2019-02-06T19:20:17.017" Score="6" Body="&lt;p&gt;You can also consider GPIB/IEEE-488 to be a network. It's a &quot;bus&quot; but I think at this level the distinction is debatable. It allowed multiple devices, they were connected via daisy chained cables. You could either broadcast or send packets to individual devices. While there was a dedicated controller, devices could request access to send data (so it wasn't master-slave per se, although it was mostly used that way).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically it was a &quot;smart host&quot; with &quot;less smart&quot; devices (i.e. a computer and assorted peripherals) vs a computer to computer interchange. But it could be used as one, just having one computer configured as the controller and the other as one of the devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It started in the late 60's, became more popular during the 70's and 80's, notably with Hewlett Packard test equipment. It's also notable that you could use the interface with the HP-41 calculators, and it was also built in to early Commodore computers, such at the PET. A version of if exists in the C64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It didn't follow a formal networking OSI model, it came before that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I think it certainly qualifies as an early network.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2019-02-06T19:20:17.017" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9103" PostTypeId="2" ParentId="9095" CreationDate="2019-02-06T20:30:43.407" Score="7" Body="&lt;p&gt;Sinclair's ZX network was implemented in both the ZX Spectrum (with Interface 1) and the Sinclair QL - Some QL compatibles that came later implemented it as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a serial multidrop network with max. 64 devices on the line and advertised 100kbps transfer rate (measurements show it actually uses a bit rate of 87.5 kbps) that was bit-banged by the CPU to a two-wire simple audio cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some &quot;carrier sense&quot; was implemented in the potential sender by listening for network activity for some ms before actually occupying the network with a so-called &quot;scout&quot; that contained a break plus the sender's address - if that could correctly be read back from the line, the sender assumed to own it until the next collision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX Spectrum actually only got minimum messaging channel based transfer (that needed active collaboration between the clients), while the QL could, with additional software, implement a file server. You could access all device drivers of the remote QL running the file server, even open screen windows, and printer channels. The QL could talk to ZX Spectrums and vice versa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Elan Enterprise had a similar serial network built into the basic box with similar features but used four wires.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-02-07T07:34:09.907" LastActivityDate="2019-02-07T07:34:09.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9104" PostTypeId="2" ParentId="9095" CreationDate="2019-02-06T20:32:39.853" Score="7" Body="&lt;p&gt;Research Machines in the UK had the Z-NET network which was used with their &lt;a href=&quot;https://en.wikipedia.org/wiki/Research_Machines_380Z&quot; rel=&quot;nofollow noreferrer&quot;&gt;380Z&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/LINK_480Z&quot; rel=&quot;nofollow noreferrer&quot;&gt;480Z&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/RM_Nimbus#PC-186&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nimbus 186&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/RM_Nimbus#X_Series:_AX/VX&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nimbus AX/VX&lt;/a&gt; computers, starting in the early 80s.  It was CSMA/CD over coaxial cable/BNC at 800kbps, later 2Mbps, using Microsoft's MS-NET operating system to run a fileserver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was based on the Zilog Z8530 SCC - it appears to be a product of Zilog (see &lt;a href=&quot;https://www.thenimbus.co.uk/downloads/Zilog-Z-Net.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;brochure&lt;/a&gt;, &lt;a href=&quot;https://dl.acm.org/citation.cfm?id=802817&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper at SIGSMALL'80&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=soQjGED4Tpc&quot; rel=&quot;nofollow noreferrer&quot;&gt;YouTube demo&lt;/a&gt;) so it's technically out of scope for this question, but I don't know any other computers that shipped with it.&lt;/p&gt;&#xA;" OwnerUserId="7762" LastEditorUserId="7762" LastEditDate="2019-02-07T16:11:17.043" LastActivityDate="2019-02-07T16:11:17.043" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9105" PostTypeId="2" ParentId="9098" CreationDate="2019-02-06T20:33:33.520" Score="2" Body="&lt;p&gt;What does full virtualization mean in this context?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess a more general approach may be helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First off, as soon as virtualization leaves the topic of the (core) CPU, anything becomes machine and implementation specific - so it's not only relying on the CPU itself. Further, even such a virtualization does usually need an hypervisor, another OS, providing real world services to these - and being able to emulate next to all external resources. More often than not, such a 'Guest OS' does provide hypervisor specific drivers in addition, avoiding extreme performance impacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the heart it's about the 'picture' a 'bare metal' (*1) application gets of the machine it's running on one side, and what kind of hardware access the guest OS does expect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite facing the danger promised, I would like to cite the /360 as a more simple example to display this fact. Already from the start I/O was quite formalized as an interface to an IO processor (*2). There was a limited set on instructions to start an I/O operation, check for status and cancel them if necessary, but no other way to communicate with the outside. These high level structures made it easy to virtualize I/O, after memory and CPU were done (*3)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For micros (and minis) the task was a way more complex one as their low level I/O. Low level was not a huge pile of separate instructions manipulation I/O addresses that needed to be interpreted in a coherent way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With all that said and for 8 bit microprocessors I'd give a 6809 in a system with a 6829 MMU  (and maybe a 6828 PIC (Priority Interrupt Controller)) a head-start in 1978 (*4). Depending on hardware and OS structure this would work out fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In reality the issue is as so often not about technology, but the need for solutions. With micros there was no use case. Where mainframes focused, during the 80s and 90s, quite a lot on machine virtualization to consolidate installations, micros spread just as they were. 'Lesser' ways of virtualization did provide everything to satisfy the need for executing parallel applications and services in a sufficiently separated way. Much like with mainframes before, adding more CPUs was more important than to make virtual machines share a real one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the 90s micros had taken on more and more roles as servers, spread out in companies, 'infecting' every corner. This resulted in high pressure to consolidate. Servers where moved to computing centres and migrated into rack mount machines. While many of these applications did need their custom environment, they did use only small portions of a machine's resources. At the same time the early 2000s brought new highly partitioned applications with services in prior unimaginable numbers for high throughput web servers, search engines and alike. In combination this created a surge for virtualization, a need CPU manufacturer satisfied with new models. First with server processors, where the use case originated, in the long run for everyone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rest is history and I'd rather shut up and point to Stephen Kitt's &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/9099/6659&quot;&gt;detailed answer&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... Aaaargh ... I can't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 80386 did offer a 8086 VM mode that enabled hosting of multiple instances of its predecessor. The important part here is that it not only restricted access to 'unknown' register, and offered separate memory spaces but also allowed to trap access to (marked) memory and instructions like IN and OUT. As a result a 386 hypervisor could run multiple virtual 8086 instances, alas not emulating the PC running on, but &lt;em&gt;any&lt;/em&gt; 8086 machine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something not uncommon in other families of CPUs, where new models not only offered (some) compatibility, but also full emulation - as it was called back then. Constructions like a /370 running a virtual /360 running a virtual 1401 where not unheard of. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Term chosen in lieu of any better. Meaning is that an application that can act as if running on the same (or similar) machine as if there was no virtualization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Much like Intel envisioned for the x86 family with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8089&quot; rel=&quot;nofollow noreferrer&quot;&gt;8089 I/O-Processor&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Another great example how benefiting clean abstraction layers are in the long run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - IIRC it may as well have worked already with 6800+6829, but I'm unsure abut the introduction date of the 6829. It was available when the 6809 was introduced.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2019-02-06T21:47:35.783" LastActivityDate="2019-02-06T21:47:35.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9106" PostTypeId="2" ParentId="9095" CreationDate="2019-02-06T20:38:12.710" Score="7" Body="&lt;p&gt;In 1984-86, I installed several Digital Microsystems (DMS) HiNet networks in the UK.&#xA;This was an RS422 bus system running at 512 kb/s in a master/slave polling configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original server had an 8&quot; hard drive and an 8&quot; floppy drive, running a CP/M-based operating system. A later version was 8088-based with 5 1/4&quot; disk and diskette.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The workstations were diskless running CP/M 2.2. There was also, later, a dual Z80 / 8088 workstation and a Z80 PC card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just found a link here :&lt;a href=&quot;http://www.retrotechnology.com/dri/digital_systems_products.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.retrotechnology.com/dri/digital_systems_products.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Customers I dealt with included Distillers' Company and the Audit Commission. I understand that Gatwick Airport also used DMS for their flight information displays.&lt;/p&gt;&#xA;" OwnerUserId="4160" LastActivityDate="2019-02-06T20:38:12.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9107" PostTypeId="2" ParentId="9095" CreationDate="2019-02-06T21:08:22.857" Score="6" Body="&lt;p&gt;Although IBM had the mainframe-oriented SNA and later Token Ring, which was posed as a competitor to Ethernet, they did have a small office-scale LAN solution, the 2 Mbps &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PC_Network&quot; rel=&quot;noreferrer&quot;&gt;IBM PC Network&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was &lt;a href=&quot;http://www-01.ibm.com/common/ssi/printableversion.wss?docURL=/common/ssi/rep_ca/0/897/ENUS184-100/index.html&amp;amp;request_locale=en&quot; rel=&quot;noreferrer&quot;&gt;released in 1984&lt;/a&gt; and was intended to support IBM's PC line. It apparently made it into the &lt;a href=&quot;http://ohlandl.ipv7.net/NIC/PC_Network.html&quot; rel=&quot;noreferrer&quot;&gt;PS/2 Micro Channel era&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arguably, this was the longest lived solution because it introduced NetBIOS, whose descendants live on today in Windows networking.&lt;/p&gt;&#xA;" OwnerUserId="7959" LastActivityDate="2019-02-06T21:08:22.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9108" PostTypeId="2" ParentId="9085" CreationDate="2019-02-06T21:20:53.133" Score="1" Body="&lt;p&gt;Not the first, but Algol 60 deserves honorable mention.  It had strong typing, but type mismatches caused compiler errors instead of automatic conversions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The typing system for Algol 60 was better than Fortran or COBOL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally there was a period of four years when major languages were launched.  1957 Fortran; 1958 COBOL; 1959 Lisp; and 1960 Algol.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="4921" LastEditDate="2019-02-06T21:40:53.853" LastActivityDate="2019-02-06T21:40:53.853" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9109" PostTypeId="2" ParentId="9082" CreationDate="2019-02-06T21:33:18.067" Score="2" Body="&lt;p&gt;When PC starts, it launches only one CPU core (so called bootstrap CPU). OS is executed on this CPU. Then, OS starts other cores by sending IPI (inter processor interrupt). To do this, OS first switches PIC (interrupt controller) to APIC (advanced) mode and uses its registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS is not aware of other CPUs and APIC, and does not know how to send IPI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, DOS can't even start other cores. They simply turned off and do not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to use them, you would have to deal with APIC by yourself. It is not easy task, though. See &lt;a href=&quot;https://wiki.osdev.org/Symmetric_Multiprocessing&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://wiki.osdev.org/Symmetric_Multiprocessing&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11893" LastActivityDate="2019-02-06T21:33:18.067" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9110" PostTypeId="2" ParentId="6059" CreationDate="2019-02-06T21:41:36.083" Score="3" Body="&lt;p&gt;Regarding &quot;specifically with that name&quot; part: as &quot;README&quot; is an obvious play on Lewis Carroll's &lt;em&gt;Alice in Wonderland&lt;/em&gt; &quot;Eat me&quot; and &quot;Drink me&quot;, this kind of frivolity could unlikely originate from a commercially distributed product. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point being that a BSD distribution is a probable origin, soon after followed by commercial vendors, as an &quot;established practice&quot;.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2019-02-06T22:09:40.610" LastActivityDate="2019-02-06T22:09:40.610" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9111" PostTypeId="2" ParentId="9085" CreationDate="2019-02-06T23:49:45.520" Score="5" Body="&lt;p&gt;There's a lot of heated discussion about what the meaning of 'programming language that had data types' might be.  In the absence of clarification from the OP, here's my opinion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Definitions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'Programming language' - any language in which programs are written. For the purposes of this answer, I'm restricting this to languages which are implemented 'soon' after design, for some vague value of 'soon' (I don't exclude languages which have programs written before the implementation). I wish to exclude Plankalkül for this answer, work of genius though it may be, simply because it did not become known to the world until after data-typing became commonplace. Until implementation, it's a theoretical idea, not a programming language - though perhaps as a workaday programmer I am prejudiced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'Language with data types' - I think the bedrock requirements here are that the language defines more than one type, and there be some way to indicate what type a quantity has. I include explicit declaration, implicit typing (by denotation for literals, initial letters for variables, or weird sigil schemes), and runtime determination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, if a language is said by its population of programmers to be 'untyped' then I think we should agree with those programmers. This means BLISS is typeless even though it has builtins that will treat a machine word as holding a floating-point value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having established my frame of reference, I say the answer is &quot;early FORTRAN&quot; (1954).  FORTRAN is normally considered to have been born in 1957, but &lt;a href=&quot;https://apps.dtic.mil/dtic/tr/fulltext/u2/a032123.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this survey of early programming languages&lt;/a&gt; by Knuth shows, on pages 62-63, an early implementation where the I-N as integer, others as real numbers, convention is in place.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-02-09T01:14:54.417" LastActivityDate="2019-02-09T01:14:54.417" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9112" PostTypeId="2" ParentId="8945" CreationDate="2019-02-07T07:41:31.127" Score="3" Body="&lt;p&gt;Windows 95 Setup and Windows 95 will probably be using different types of drivers. Setup runs direct from DOS, so will use real-mode drivers, whereas Windows 95 will prefer virtual device drivers (for the CPU's &quot;virtual mode&quot; ), to avoid having to switch to and from real mode every time it talks to the mouse. It can use real-mode drivers if necessary, but Windows 95 includes VMOUSE.VXD which works with most mice (except yours).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a modern system, the speed penalty from a real-mode driver won't be an issue. If you can load a real-mode mouse driver in DOS (through CONFIG.SYS and AUTOEXEC.BAT) before Windows boots, Windows should use the real-mode driver instead. If you can't fish the real-mode driver out of the Windows 95 CD, you could try one of the drivers listed &lt;a href=&quot;https://www.uwe-sieber.de/util_e.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-02-07T07:41:31.127" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9113" PostTypeId="2" ParentId="9095" CreationDate="2019-02-07T08:48:19.120" Score="4" Body="&lt;p&gt;Between 1982 and 1985, Thomson and others developed the &lt;a href=&quot;https://fr.wikipedia.org/wiki/Nanor%C3%A9seau&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nanoréseau&lt;/a&gt; that was used to link several TO7, TO7/70 or MO5 machines together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These setups were mainly deployed in french schools as a way for teachers to monitor and install software for students.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a whole &lt;a href=&quot;http://www.nanoreseau.net&quot; rel=&quot;nofollow noreferrer&quot;&gt;website dedicated to its legacy&lt;/a&gt; &lt;em&gt;(in french)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="11897" LastEditorUserId="11897" LastEditDate="2019-02-08T12:06:16.943" LastActivityDate="2019-02-08T12:06:16.943" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9114" PostTypeId="2" ParentId="1532" CreationDate="2019-02-07T09:36:36.197" Score="1" Body="&lt;p&gt;My guess would be that it was intended to offer upgradeable ROM modules for future peripherals or software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@user180940's answer links to the Gayle datasheet that mentions the flash memory was intended as a replacement for the floppy drive in a low cost A300 machine. What would an Amiga without a floppy drive look like? Well, there is the CD32, which has a CD-ROM drive for storage and all the necessary software for it in the ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original idea with the A600, which was at first called the A300, was a low cost machine that consumers could upgrade over time. Having a flash ROM would allow the ROM to be upgraded to support things like CD-ROMs or even add/upgrade built-in software like games or productivity apps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quite how such an update would have been loaded is unclear though as without a floppy drive or CD-ROM as standard there is no way to get data on to the machine. Perhaps it could have been offered as a dealer upgrade using an external floppy drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One other possibility is that it could have been intended as a read-only memory in the A300 itself, but removable and upgradeable by dealers when selling upgrades to the machine. The more complex upgrades would be fitted by the dealer, who would use a programmer to upgrade the flash ROM at the same time. It's not clear if the A300 itself would have had any write capability for the flash memory.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-02-07T09:36:36.197" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9115" PostTypeId="2" ParentId="6059" CreationDate="2019-02-07T09:39:33.313" Score="4" Body="&lt;p&gt;This file for some PDP-10 software is from 1974 and called &quot;README.TXT&quot;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://pdp-10.trailing-edge.com/decus_20tap3_198111/01/decus/20-0079/readme.txt.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://pdp-10.trailing-edge.com/decus_20tap3_198111/01/decus/20-0079/readme.txt.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-02-07T09:39:33.313" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9116" PostTypeId="2" ParentId="9098" CreationDate="2019-02-07T11:58:00.797" Score="7" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Popek_and_Goldberg_virtualization_requirements&quot; rel=&quot;noreferrer&quot;&gt;Popek and Goldberg virtualisation requirements&lt;/a&gt; are usually dug out for discussions of this kind, but it is more of a quick rule-of-thumb and it turns out that doing virtualisation well requires a more than their rules, and with ingenuity one can get away with less. Ultimately, there is no single answer because it's a case of evolution with it being subjective as to whether a particular combination of hardware and software counts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first time I saw virtualisation work on a microprocessor in a satisfactory manner was VMWare back in 1998. I was running it on a creaky old Pentium, which does &lt;em&gt;not&lt;/em&gt; satisfy Popek and Goldberg. The particular innovation here was advances in compiler technology that made it plausible to transform arbitrary x86 code into a safe subset which could be run natively without breaking out of the sandbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This wheeze could therefore theoretically be used on any microprocessor with enough resources to run a suitable binary-to-binary compiler and still have enough left over to do useful work. The 68020 (1984) and 80386 (1985) would definitely count, the 68000 (1979) and 80286 (February 1982) &lt;em&gt;might&lt;/em&gt; count, and definitely not for our 8-bit favourites. But this would require a time machine to send 1990s computer science papers back 15 years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about other off-the-wall approaches? As I recall, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sun-1&quot; rel=&quot;noreferrer&quot;&gt;Sun-1&lt;/a&gt; workstation (May 1982) ran &lt;em&gt;two&lt;/em&gt; 68000s executing the same instruction stream, one of which ran a critical period behind the other such that when a state-losing bus exception occurred in the first, the paging hardware could recover the state from the second which had not yet executed the problematic code. Wikipedia does not confirm this, so I may be misremembering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your definition is merely that the CPU be sufficiently-capable of doing memory protection and virtualisation within tight constraints which still allow useful work to be done, the 80286 might still be in the running, and slightly predates the Sun-1. The 80286 is just about powerful to run protected-mode operating systems such as Unix which present a virtual machine for userspace processes to run in, however this does not correspond to any real bare metal CPU and cannot recursively run another operating system requiring privileged instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what about systems with the kind of hardware support for virtualisation that Popek and Goldberg envisaged? A 68010 (1982) with 68451 MMU counts. The now-forgotten NS320xx (1982) would likely also count, but Wikipedia claims it came out after the 68010.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the 68010+68451 combination is my personal choice of best answer to this question.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2019-02-07T11:58:00.797" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9117" PostTypeId="1" CreationDate="2019-02-07T15:23:58.367" Score="4" ViewCount="256" Body="&lt;p&gt;When I enter:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;STAT ALL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On my Epson HX-20, I get the following output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;P1: 419 Bytes&#xA;P2: 86 Bytes&#xA;P3: 0 Bytes&#xA;P4: 0 Bytes&#xA;P5: 0 Bytes&#xA;RAM FILE 256 Bytes&#xA;MEMSET 2624&#xA;    105 Bytes Free&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As I understand it, even a standard HX-20 should have 16k of RAM, so the Bytes Free should be much more. I also remember writing much longer programs in the past than I am able to now before getting the OM (Out of Memory) error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have looked up the MEMSET - the above is the factory default and should give maximum space to BASIC programmes as I understand it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone suggest why I might be having this situation, and what steps I can take to rectify it?&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="8072" LastEditDate="2019-02-07T17:54:18.687" LastActivityDate="2019-02-08T07:55:45.103" Title="Why does my Epson HX-20 apparently have much less RAM than expected?" Tags="&lt;memory&gt;&lt;hx-20&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9118" PostTypeId="2" ParentId="6350" CreationDate="2019-02-07T16:16:58.923" Score="2" Body="&lt;p&gt;Working on the assumption that it was 3 1/2 inch floppy disk, there are varying degrees of &quot;open&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest part of a floppy disk for a three-year-old to remove would be the sprung metal shutter. (It's probably the most entertaining part for someone to start playing with in the first place.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The shutter's purpose is to protect the disk surface from dust, dirt, and fingerprints. Older 5 1/4 and 8 inch disks had no shutter, and were stored in a sleeve instead. The shutter is pushed to the side when the disk is inserted, to let the drive's heads read the magnetic surface inside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the shutter is bent slightly, so that the faces are &quot;lifting up&quot; from the case, this can be a problem: the shutter may catch on the floppy drive's door when ejecting the disk, resulting in a disk stuck in the drive. (Such a disk can usually be prised out by lifting the door clear of the bent shutter.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the shutter has been &lt;em&gt;removed&lt;/em&gt; completely, then it will cause no problem in the disk drive. The heads will be able to access the magnetic surface with no obstruction at all. It would, however be a good idea to back up the data stored on the disk, as it will now be more vulnerable to ingress of dirt and dust through the open hole.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-02-07T16:16:58.923" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9119" PostTypeId="1" AcceptedAnswerId="9120" CreationDate="2019-02-07T19:11:47.407" Score="19" ViewCount="5702" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Video_game_crash_of_1983&quot; rel=&quot;noreferrer&quot;&gt;Video Game Crash of 1983&lt;/a&gt; is well known for the effect that it had on the video game console market in North America. A prime example is Atari &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_video_game_burial&quot; rel=&quot;noreferrer&quot;&gt;burying&lt;/a&gt; thousands of unsold game cartridges in landfill. However the effect on other global markets is not as obvious to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What effect, if any, did the 1983 crash have on other game console markets, such as Asia, Europe, and South America?&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="75" LastEditDate="2019-02-07T19:55:37.373" LastActivityDate="2019-02-09T04:08:20.830" Title="What was the effect of the Video Game Crash of 1983 outside of North America?" Tags="&lt;history&gt;&lt;game-consoles&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9120" PostTypeId="2" ParentId="9119" CreationDate="2019-02-07T20:19:19.093" Score="16" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;A prime example is Atari burying thousands of unsold game cartridges in landfill. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, that may have had its source with hubris over overestimated sales numbers (and licensing fees), in combination with less than desirable conversions regarding quality (Pac-Man) or story (Raiders of the Lost Ark) or combinations of both (ET).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;However the effect on other global markets is not as obvious to me.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As there was next to none. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What effect, if any, did the 1983 crash have on other game console markets, such as Asia, Europe, and South America?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In Europe&lt;/strong&gt; (*1) video consoles weren't as much hyped as in the US, and the market was far from saturation. In addition, US manufacturers didn't hold a major stake. European manufactured systems like &lt;a href=&quot;https://en.wikipedia.org/wiki/Fairchild_Channel_F&quot; rel=&quot;nofollow noreferrer&quot;&gt;Saba Videoplay&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Magnavox_Odyssey%C2%B2#Europe&quot; rel=&quot;nofollow noreferrer&quot;&gt;Philips G7000&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/VC_4000&quot; rel=&quot;nofollow noreferrer&quot;&gt;Interton VC4000&lt;/a&gt; covered most of the market. Unlike US manufacturers as Atari or Coleco or Mattel, who tried to establish their systems as brands on their own, European systems were sold (in addition) under many brands (*2), usually by TV manufacturers who often adapted them to the feature interfaces of their TV sets (*3) or were even built into a TV set. Still, games could be exchanged, thus supplying all these 'different' systems with a reasonable game base to support purchase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The transition to home computers, after 1980, happened in Europe well before market saturation, resulting in a smooth 'hand over', making already good home computer sales, when distributors in the US still tried to push ever more video games. It also enabled European companies like Thomson, Amstrad, Sinclair or Philips to establish major market shares.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The US downturn also had a major influence on dependencies of US companies (Atari, Commodore) by giving them a greater say in product development and support, as they became (for some time) the sole source of reliable income. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In Japan&lt;/strong&gt; the situation developed mostly similarly, as here again the video game market was mostly supplied by local manufacturers and a smooth transition to early home computers happened without creating a bubble first.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Western Europe, at this time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The Interton system gives a &lt;a href=&quot;https://en.wikipedia.org/wiki/1292_Advanced_Programmable_Video_System#Released_versions&quot; rel=&quot;nofollow noreferrer&quot;&gt;great example&lt;/a&gt; for this strategy in Europe&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Usually also resulting in better picture and sound quality.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-02-08T21:25:36.287" LastActivityDate="2019-02-08T21:25:36.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9121" PostTypeId="2" ParentId="9119" CreationDate="2019-02-07T20:21:56.313" Score="24" Body="&lt;p&gt;The very same article you link says in &lt;a href=&quot;https://de.wikipedia.org/wiki/Video_Game_Crash&quot; rel=&quot;noreferrer&quot;&gt;German Wikipedia&lt;/a&gt; (rough translation):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;At the time of the North American crash the European market was strongly dominated by games for home computers, thus the crash had next to no consequences. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;My memory completely agrees with that - There was no such thing as a &lt;em&gt;Video Game (console) hype&lt;/em&gt;, so as such nothing that could crash - There was a &lt;em&gt;home computer hype&lt;/em&gt; instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was really surprised there actually is such an entry at all on German Wikipedia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do remember a very short (and small) wave of simple fixed-program &quot;tennis/squash&quot; video games consoles at the end of the '70s, but consoles like Atari VCS, Coleco, Mattel, Vectrex (if you consider that a Game Console) and even Philips/Magnavox (which was somehow European) never really got a foothold in European market in the '80s. Too expensive, too limited (to gaming), I guess. The home computer market, instead, was a real hype, starting with Sinclair computers in the early 1980s, and followed by Thomson, Acorn, and other European makers, later Commodore and Atari. As there was no console game bubble in Europe, no one heard it go bust.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="2067" LastEditDate="2019-02-09T04:08:20.830" LastActivityDate="2019-02-09T04:08:20.830" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="9122" PostTypeId="2" ParentId="9119" CreationDate="2019-02-07T23:14:46.483" Score="5" Body="&lt;p&gt;The German market for video games and pinball machines had another crash at roughly the same time. From 1983 on, youth protection laws restricted those machines to locations where youth under age 18 had no admission.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That pretty much killed all the video games in public places and pushed the sales of home video game consoles and especially the Commodore C64 and Amiga computers.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2019-02-07T23:14:46.483" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9123" PostTypeId="2" ParentId="9119" CreationDate="2019-02-07T23:31:49.137" Score="8" Body="&lt;p&gt;The Master System was the first really successful console in Europe; this was quite a while after 1983. Prior to that, video gaming was almost exclusively performed on home computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Prior to 1983 the big names in Europe were luminaries such as Sinclair, Commodore, Acorn and Thomson. All of those companies survived into 1984, and the market even grew from there — that's when Amstrad/Schneider launched the last of the really successful 8-bit computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anything, 1982 and 1983 were boom years; Amstrad may have been a chronological outlier in achieving success but they were far from being an outlier in terms of launch date. Of the notable not-quites, the same period contains the Oric, which went on to a successful second-life in France as a decent budget micro with RGB SCART support; and the Enterprise which was a noble but late attempt at the same segment as Amstrad won of a perfected 8-bit. Less notable ones include the Mnemotech, the Tatung Einstein and the Camputers Lynx.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further evidence can be found in the software houses: Rare and Argonaut were founded in 1982; Reflections and Rockstar North were founded in 1984.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: existing companies survived, and capital continued to be available for new ventures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the ironies of the whole period is that by the late '80s, the surviving American manufacturers — primarily Commodore and Atari — were primarily successful only in Europe. Commodore Europe outlived its parent, and it's no coincidence that the first post-Commodore owner of the Amiga IP was Escom, the German PC manufacturer. Initial shipments of the Atari Lynx and Jaguar both sold out in Europe, based on the reputation of the ST a few years earlier..Of the big five platforms for games as the '90s approached — the Spectrum, C64, CPC, ST and Amiga — three were American machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: Europe saw no ill effects from the crash, even though it would be inaccurate to call it a freestanding ecosystem.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-02-07T23:31:49.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9124" PostTypeId="1" CreationDate="2019-02-08T02:46:01.293" Score="1" ViewCount="95" Body="&lt;p&gt;I started tinkering with a Timex Sinclair 1500 I was given awhile ago. When I first tried starting it, I got a K prompt in the lower left of the screen. I turned it off and did not return to it for a few weeks. Now, I do not see a K prompt when I try turning it on and even restarting it. Sometimes there are wide black vertical bars on the screen or small black squares in patterns. Has this machine died? I am using an old black and white portable analog TV with a dial for precisely tuning channels like 2 and 3.&lt;/p&gt;&#xA;" OwnerUserId="11899" LastActivityDate="2019-02-08T02:46:01.293" Title="Cannot get K prompt on Timex 1500" Tags="&lt;video&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2019-04-17T14:15:39.807" ContentLicense="CC BY-SA 4.0" />
  <row Id="9125" PostTypeId="2" ParentId="9117" CreationDate="2019-02-08T07:55:45.103" Score="4" Body="&lt;p&gt;I found the solution a roundabout way by reading Chapter 7 of the &lt;em&gt;HX-20 Operations Manual&lt;/em&gt;: 'What if you have problems?'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although my specific memory problem was not mentioned, the solution to another memory problem (garbled menu due to having interfered with protected areas of memory) is to &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;re-intialize memory&lt;/strong&gt; and the calendar clock &lt;em&gt;(emphasis mine)&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This can be done by holding down CTRL-SHIFT-@ (or on my German keyboard CTRL-SHIFT-§). This prompted me to enter the date and time (I used 1991 as an analogous year to 2019), and after doing this STAT ALL gave the expected 12891 bytes free. Note that this also wiped any programs I had entered in the limited RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I expect that whilst in storage the battery depleted to the extent that my HX-20 was operating as if from a factory install, so it was necessary to re-initialize it.&lt;/p&gt;&#xA;" OwnerUserId="8072" LastActivityDate="2019-02-08T07:55:45.103" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9126" PostTypeId="1" AcceptedAnswerId="9130" CreationDate="2019-02-08T14:45:54.360" Score="3" ViewCount="1139" Body="&lt;p&gt;What AppleTalk adapters can bridge LocalTalk to Ethernet? There are some adapter that allow LocalTalk printers to show up on ethernet, but I want to allow computers to talk. My IIgs has LocalTalk but all my Macs have only Ethernet. I have an old adapter, but the IIgs disappears from the Ethernet network after a few minutes.&lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2019-02-08T18:32:32.417" Title="AppleTalk adapters to bridge LocalTalk to Ethernet?" Tags="&lt;apple-macintosh&gt;&lt;apple-iigs&gt;&lt;network&gt;&lt;appletalk&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9127" PostTypeId="1" AcceptedAnswerId="9129" CreationDate="2019-02-08T15:20:05.623" Score="43" ViewCount="3531" Body="&lt;p&gt;On a US-layout PC keyboard, the symbols above the number keys are as follows:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/913xK.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/913xK.png&quot; alt=&quot;Keyboard with &amp;#39;!&amp;#39; above &amp;#39;1&amp;#39; and &amp;#39;)&amp;#39; above &amp;#39;0&amp;#39;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whereas the keyboard on an Apple II is different:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/LgLMe.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LgLMe.png&quot; alt=&quot;Keyboard with &amp;#39;!&amp;#39; above &amp;#39;1&amp;#39;, but &amp;#39;)&amp;#39; above &amp;#39;9&amp;#39;&quot;&gt;&lt;/a&gt;&#xA;Note, for example, the '(' and ')' symbols are now above 8 and 9, and '&amp;amp;' is above 6 instead of 7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The order of the symbols on the Apple II corresponds to the ASCII symbols 33 to 41, in that order. This layout was used on a number of other microcomputers (including the Commodore 64 and the BBC Micro), and dated back at least to the 1970s: in 1974 Popular Electronics ran an article on &lt;a href=&quot;http://www.swtpc.com/mholley/PopularElectronics/Apr1974/PE_Apr1974.htm&quot; rel=&quot;noreferrer&quot;&gt;how to build your own ASCII keyboard&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite this, IBM chose to use a non-ASCII-based layout for their keyboard. Apple later abandoned the ASCII layout for the Macintosh in 1984, adopting a similar layout to IBM's PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously with the growth of the PC clone market, the PC layout would become a de-facto standard, and ASCII keyboards were relegated to history. &lt;strong&gt;But why were there two different layouts in the first place?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note that the &quot;PC&quot; layout for the symbols was not a novel invention by IBM for it's PC: it had already been seen on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Space-cadet_keyboard&quot; rel=&quot;noreferrer&quot;&gt;Space-cadet keyboard&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/VT100&quot; rel=&quot;noreferrer&quot;&gt;VT100 terminal&lt;/a&gt;, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Alto&quot; rel=&quot;noreferrer&quot;&gt;Xerox Alto&lt;/a&gt;. The point remains that there were two different layouts in use at the same time.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10260" LastEditDate="2019-02-09T18:19:27.250" LastActivityDate="2020-01-21T09:52:31.157" Title="Why are the symbols on the number keys of PC &amp; Mac keyboards different to ASCII keyboards?" Tags="&lt;history&gt;&lt;keyboards&gt;&lt;ascii&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9128" PostTypeId="2" ParentId="9127" CreationDate="2019-02-08T15:20:05.623" Score="14" Body="&lt;p&gt;It all dates back to the age of typewriters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using an ASCII-based layout made the design of computer keyboard encoders simpler, as the output of any key while holding Shift (capitals, symbols) differs from the the normal output by just one bit. For this reason, these keyboards are also known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Bit-paired_keyboard&quot; rel=&quot;noreferrer&quot;&gt;bit-paired keyboards&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanical typewriters had used a large number of different layouts, particularly early designs. A standardised layout had developed by the time of IBM's &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Selectric_typewriter&quot; rel=&quot;noreferrer&quot;&gt;Selectric&lt;/a&gt; electric typewriter in the 1960s. This standard typewriter layout differed from the bit-paired ASCII layout, particularly in its placement of symbols, but this was not a disadvantage for a typewriter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the computer age, these two layouts would appeal to different types of individuals. Computer designers and engineers would obviously appreciate the simplicity of the ASCII-based layout when building a machine. On the other hand, many computers were used by professional typists as a replacement for electric typewriters. As users of &lt;a href=&quot;https://en.wikipedia.org/wiki/Touch_typing&quot; rel=&quot;noreferrer&quot;&gt;touch-typing&lt;/a&gt;, they would want to keep the same keyboard layout they were used to, as switching layout would slow down their work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the light of this, it's unsurprising that IBM would use the same typewriter-based layout as their Selectrics when releasing their first personal computer. It is possible that Apple changed layout for the Mac for the same reason.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-02-08T15:20:05.623" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9129" PostTypeId="2" ParentId="9127" CreationDate="2019-02-08T15:54:35.687" Score="67" Body="&lt;p&gt;It all dates back to typewriters, but the two layouts aren’t ASCII v. non-ASCII, they’re mechanical v. electric.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;kbd&gt;!&lt;/kbd&gt;&lt;kbd&gt;&quot;&lt;/kbd&gt; etc. layout was common on mechanical typewriters, based on the layout used for the Remington No. 2 in 1878. This is the layout that ASCII was based on; that’s why “!”, “&quot;” etc. received consecutive encodings, aligned with the encodings of the digits they were paired with. This was criterion 17 in the ASCII committee’s decision-making process (see &lt;a href=&quot;https://textfiles.meulie.net/bitsaved/Books/Mackenzie_CodedCharSets.pdf&quot; rel=&quot;noreferrer&quot;&gt;Charles E. Mackenzie’s &lt;em&gt;Coded Character Sets, History and Development&lt;/em&gt;&lt;/a&gt; for details):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Criterion 17.&lt;/strong&gt; Graphics that are normally paired on typewriter keytops should differ only in a common single bit position.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This also explains the paired encodings of the other symbols in the 33-63 range (“*”/“:”, “+”/“;” etc.). Criterion 14 determined the space character’s encoding and caused some shifting of characters to free up &lt;kbd&gt;0&lt;/kbd&gt; (space is the “shifted” character corresponding to 0).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the advent of electric typewriters (not electronic, yet), the designers ran into issues with the force required for different symbols. Smaller symbols such as &lt;code&gt;'&lt;/code&gt; and &lt;code&gt;&quot;&lt;/code&gt; require less force; having them on the same keys as digits meant that the drivers had to be more complex. (You can see the different force requirement on a mechanical typewriter: if you hit &lt;kbd&gt;'&lt;/kbd&gt; or &lt;kbd&gt;.&lt;/kbd&gt; with the same force as a letter key, you’ll often end up with an imprint of the type element on the paper, showing as a rectangle around the symbol.) To simplify the design, small symbols were grouped together on separate keys, so that the force didn’t vary for a single key’s different symbols. This layout ended up being used in IBM’s Selectric range in particular, and IBM continued using that layout for its computer keyboards (which pre-date the PC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately the PC won in the market, and its keyboard layout along with it.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-02-08T16:58:26.460" LastActivityDate="2019-02-08T16:58:26.460" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9130" PostTypeId="2" ParentId="9126" CreationDate="2019-02-08T16:25:48.383" Score="5" Body="&lt;p&gt;What you need is a &lt;a href=&quot;https://en.wikipedia.org/wiki/LocalTalk-to-Ethernet_bridge&quot; rel=&quot;noreferrer&quot;&gt;LocalTalk to Ethernet bridge&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible to use a computer for this but in general the most reliable and easiest path is to use a device made for this purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, I have a Shiva FastPath device that has a LocalTalk port and an Ethernet port.  It will then transfer AppleTalk and IP traffic between them.  If you only want AppleTalk to flow but not other protocols like TCP/IP that can be done as well, different products have different features and many products (like the FastPath) are configurable to selectively enable/disable things.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2019-02-08T16:25:48.383" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9132" PostTypeId="2" ParentId="9126" CreationDate="2019-02-08T18:32:32.417" Score="4" Body="&lt;p&gt;I'm using a Focus EtherLAN print box since many years for exactly that purpose with great success. It's small, reasonably fast, doesn't eat much power and it isn't restricted to only handle printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes, the box would simply hang but a power cycle fixes this always. After I put the box from a normal switch port on it's own spare AppleTalk-only interface on a Cisco Router, the problems were gone. Seems it can't handle too much broadcast traffic well.&lt;/p&gt;&#xA;" OwnerUserId="10295" LastActivityDate="2019-02-08T18:32:32.417" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9133" PostTypeId="1" AcceptedAnswerId="9134" CreationDate="2019-02-09T09:49:47.883" Score="6" ViewCount="610" Body="&lt;p&gt;I'm starting to learn how to program in assembly (z80) on the Amstrad CPC&#xA;computer. As an high level developper i find it pretty fun and i learn a lot of&#xA;things about computer and CPU architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As of now i mainly want to play with the embedded AY-3-8910 sound chip because&#xA;my little project is mainly &quot;sound focused&quot;.  The Amstrad CPC embeds a Firmware&#xA;in its ROM containing routines to control the sound chip. This set of routines&#xA;is called &quot;The Sound Manager&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wonder what were common practices to program the AY-3-8910 on this computer:&#xA;Did almost every assembly programmers of music / sound software made use of&#xA;theses firmware routines or did they bypassed them and addressed the chip&#xA;directly ? Does theses routines perform well compared to addressing the chip&#xA; directly ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The aim of my question is to know if it is worth learning and mastering theses&#xA;routines or is it better to learn how to program the chip directly, using the&#xA;chip datasheet.&lt;/p&gt;&#xA;" OwnerUserId="3804" LastEditorUserId="3804" LastEditDate="2019-02-09T12:41:44.100" LastActivityDate="2019-02-09T12:41:44.100" Title="Common practices of programming the AY-3-8910 on Amstrad CPC: via Firmware routines or directly?" Tags="&lt;assembly&gt;&lt;cpc&gt;&lt;cpc464&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9134" PostTypeId="2" ParentId="9133" CreationDate="2019-02-09T11:47:10.813" Score="11" Body="&lt;p&gt;Especially for &lt;em&gt;writing&lt;/em&gt; the sound registers, it is advisable to use the built-in routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the Schneider CPC firmware guide, the reason is the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The CPC keyboard is directly connected to the AY chip - Thus, the keyboard service routine (which runs as an interrupt service routine) is accessing the AY ports directly.&lt;/li&gt;&#xA;&lt;li&gt;Accessing the sound chip sometimes needs non-atomic operations like &quot;register select&quot; + &quot;register write&quot; - If the interrupt service routine for the keyboard collides with such non-atomic access, it (or your own code) might become upset.&lt;/li&gt;&#xA;&lt;li&gt;You can definitely write code that can work around these collisions, but then you'd end up with writing more or less a copy of the BIOS routines. The overhead these BIOS routines add is not significantly more than you'd have to add in your own code.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-02-09T12:21:07.007" LastActivityDate="2019-02-09T12:21:07.007" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9135" PostTypeId="1" CreationDate="2019-02-09T12:40:11.570" Score="2" ViewCount="335" Body="&lt;p&gt;I have a Commodore PC-1 with a busted power supply. I have no desire to fix it as &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I don't have the know-how&lt;/li&gt;&#xA;&lt;li&gt;it is already 30 years old&lt;/li&gt;&#xA;&lt;li&gt;It is difficult to debug / find replacement components&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So I would rather opt for a new power supply&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I stumbled upon &lt;a href=&quot;https://docs-emea.rs-online.com/webdocs/1621/0900766b81621ef9.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Mean Well RPT-60B 60W PSU&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the original PSU was rated at 100W and according to the original PSU schema :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FWspY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FWspY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see the following current ratings &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;5V : 3,5A &lt;/li&gt;&#xA;&lt;li&gt;12V : 2,2A&lt;/li&gt;&#xA;&lt;li&gt;-12V : 0,2A&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The new Mean Well PSU although only rated at 60W has&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;5V : 5A &lt;/li&gt;&#xA;&lt;li&gt;12V : 2A&lt;/li&gt;&#xA;&lt;li&gt;-12V : 0.5A&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Would this PSU be a good replacement for the original Commodore PC-1 PSU ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I currently hacked together &quot;an ATX -&gt; PC-1 adapter&quot; for hooking up an ATX PSU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IAm1v.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IAm1v.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did some power measurements (putting my multimeter in-circuit to measure the current on the 5V and 12V rails, and I noticed that I'm only getting 7mA on the 5V rail and 220mA on the 12V rail. This seems very low (especially on the 5V rail). Any idea what might be causing this ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer is running fine, and even during benchmarks / gaming the current measurement hardly changes. Any ideas ?&lt;/p&gt;&#xA;" OwnerUserId="11910" LastEditorUserId="175" LastEditDate="2019-02-12T16:08:38.733" LastActivityDate="2019-03-14T17:02:30.553" Title="Commodore PC-1 power supply measurements off" Tags="&lt;commodore&gt;&lt;repair&gt;&lt;power&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9136" PostTypeId="1" CreationDate="2019-02-09T18:13:41.863" Score="6" ViewCount="469" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII&quot; rel=&quot;noreferrer&quot;&gt;American Standard Code for Information Interchange&lt;/a&gt; is a 7-bit character encoding.  Work on the standard began in 1960 and the first edition was published in 1963.  The standard attempted to include characters which were common in other character encodings (such as EBCDIC) and equipment (e.g. typewriters, printers, teletypes) at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which characters/symbols/glyphs which were in use by other encodings/equipment in 1963 or earlier didn't (&lt;em&gt;eventually&lt;/em&gt;) make it into ASCII?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because ASCII is an &quot;American&quot; code, non-English letters don't count.  Nor do things that were added in later versions of ASCII (e.g. curly brackets).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt; The cent sign &amp;#162; was common on many typewriters and was bit pattern 100111 in the &lt;a href=&quot;https://en.wikipedia.org/wiki/FIELDATA&quot; rel=&quot;noreferrer&quot;&gt;FIELDATA character set&lt;/a&gt; used by UNIVAC and Unisys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The square lozenge &amp;#8977; was part of the first BCDIC character set in 1932, and continued to be used in its successor EBCDIC.  It was also used in the IBM 026 punched card code.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2019-02-09T19:59:53.567" LastActivityDate="2019-04-23T21:24:22.883" Title="What characters which were in use at the time were excluded from ASCII?" Tags="&lt;ascii&gt;" AnswerCount="4" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9137" PostTypeId="5" CreationDate="2019-02-09T18:16:52.497" Score="0" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII&quot; rel=&quot;nofollow noreferrer&quot;&gt;American Standard Code for Information Interchange&lt;/a&gt; is a 7-bit character encoding.  It represents the US variant of the &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO/IEC_646&quot; rel=&quot;nofollow noreferrer&quot;&gt;ISO-646&lt;/a&gt; standard, aka &lt;a href=&quot;https://en.wikipedia.org/wiki/ITU_T.50&quot; rel=&quot;nofollow noreferrer&quot;&gt;International Alphabet No. 5&lt;/a&gt; (IA5).&lt;/p&gt;&#xA;&lt;p&gt;Do not use this tag for binary-coded-decimal (even if some Intel instructions call it &amp;quot;adjust for ASCII&amp;quot;); for that use &lt;a href=&quot;/questions/tagged/binary-coded-decimal&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;binary-coded-decimal&amp;#39;&quot; rel=&quot;tag&quot;&gt;binary-coded-decimal&lt;/a&gt; instead.&lt;/p&gt;&#xA;&lt;p&gt;For extensions and modifications of ASCII, using &lt;a href=&quot;/questions/tagged/character-set&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;character-set&amp;#39;&quot; rel=&quot;tag&quot;&gt;character-set&lt;/a&gt; instead may be more appropriate.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="15334" LastEditDate="2021-02-25T11:29:33.890" LastActivityDate="2021-02-25T11:29:33.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9138" PostTypeId="4" CreationDate="2019-02-09T18:16:52.497" Score="0" Body="The 7-bit ASCII character set, including control codes. DO NOT USE for binary-coded decimal; consider using [character-set] instead for extensions of ASCII. See tag wiki." OwnerUserId="10260" LastEditorUserId="15334" LastEditDate="2021-02-25T11:29:33.890" LastActivityDate="2021-02-25T11:29:33.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9139" PostTypeId="2" ParentId="9136" CreationDate="2019-02-09T18:17:45.730" Score="8" Body="&lt;p&gt;Small letters. These were included in the 1967 ASCII standard but not the 1963 one.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2019-02-09T18:17:45.730" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9140" PostTypeId="5" CreationDate="2019-02-09T18:35:57.963" Score="0" Body="&lt;p&gt;Binary-coded decimal is a representation of numbers used for various purposes where easy serialisation is more important than space efficiency. It represents each decimal digit as a 4-bit binary number from &lt;code&gt;0000₂&lt;/code&gt; to &lt;code&gt;1001₂&lt;/code&gt;, allowing values from &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;99&lt;/code&gt; to be stored in an 8-bit byte (as opposed to values from &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;255&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This storage method was commonly used for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;representing scores in computer games, which often change rapidly and need to be redrawn – at worst – every frame.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="278" LastEditDate="2019-02-09T21:21:22.677" LastActivityDate="2019-02-09T21:21:22.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9141" PostTypeId="4" CreationDate="2019-02-09T18:35:57.963" Score="0" Body="For questions about the binary-coded-decimal (BCD) numeric representation." OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2019-02-09T21:12:28.317" LastActivityDate="2019-02-09T21:12:28.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9142" PostTypeId="2" ParentId="9136" CreationDate="2019-02-10T07:38:38.870" Score="5" Body="&lt;p&gt;Some symbols in the &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_display_code&quot; rel=&quot;noreferrer&quot;&gt;CDC display code&lt;/a&gt;, while assigned ASCII counterparts, haven't gotten into ASCII by themselves, nor into the &quot;near&quot; ASCII extensions, like ¢ or ¤ (that's U+00A4 CURRENCY SIGN, not U+2311 SQUARE LOZENGE). For example, the ≡ character, code 48 in the CDC set, is now U+2261 IDENTICAL TO.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2019-02-10T07:38:38.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9143" PostTypeId="5" CreationDate="2019-02-10T09:42:05.190" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-02-10T09:42:05.190" LastActivityDate="2019-02-10T09:42:05.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9144" PostTypeId="4" CreationDate="2019-02-10T09:42:05.190" Score="0" Body="For questions relating to a number of different video game consoles, or to game consoles in general." OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-02-10T11:35:45.703" LastActivityDate="2019-02-10T11:35:45.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9145" PostTypeId="1" AcceptedAnswerId="9152" CreationDate="2019-02-10T12:15:53.820" Score="12" ViewCount="3390" Body="&lt;p&gt;Most video game consoles allow you to connect multiple controllers to them, for multiplayer gaming. Handheld game consoles, on the other hand, were designed to be used by one person at a time, but many supported the use of a link cable to connect two handhelds together to play. Popular examples include the Tetris and Pokémon games on the Nintendo Game Boy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the turn of the century, many &quot;home&quot; (non-portable) game consoles started to support multiplayer gaming over the internet, using a modem or network adapter connected to the console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Nintendo GameCube, games such as &lt;em&gt;Mario Kart: Double Dash&lt;/em&gt; supported the use of the network adapter in a local manner, i.e. without requiring an external internet connection. While four people could normally play on one console, connecting two consoles together would allow eight people to play together in the same room. (This would require two televisions, two network adapters, and a network cable to connect them.) One could even have sixteen players on four consoles connected together over a LAN!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was the GameCube the first non-portable games console to support connecting consoles together in this manner (either directly or in a local area network), or is there an earlier example?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;For the purposes of this question, I'm going to exclude home computers, or in other words, devices with a built-in keyboard: many of these had networking support. I'm also excluding games that required connecting to the internet or an external server: just local play examples, please.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-02-10T16:53:54.640" LastActivityDate="2019-02-13T21:19:15.947" Title="What was the first games console to support linking consoles together for local multiplayer?" Tags="&lt;game-consoles&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9146" PostTypeId="1" CreationDate="2019-02-10T12:17:49.657" Score="5" ViewCount="541" Body="&lt;p&gt;I am looking for detailed info on the low-level floppy disk structure of an MS-DOS-compatible 720k Double Sided Double Density disk. Stuff like GAP/SYNC patterns, ID and CRC Field structure, standard interleaving, etc. All my googling has been in vain.&lt;/p&gt;&#xA;" OwnerUserId="11924" LastEditorUserId="15334" LastEditDate="2020-11-13T21:04:30.603" LastActivityDate="2020-11-14T08:31:33.110" Title="What was the DOS FAT12 720k floppy raw disk format structure?" Tags="&lt;floppy-disk&gt;&lt;programming&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9148" PostTypeId="2" ParentId="9146" CreationDate="2019-02-10T13:51:37.313" Score="1" Body="&lt;p&gt;Most floppy disk controller chip datasheets have typical values, but it's really the BIOS that controls these values. As a starting point, take a look at Intel 82077 datasheet. I've successfully been able to decode sectors from a logic analyzer dump of floppy drive data pin.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-02-10T13:51:37.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9149" PostTypeId="2" ParentId="9146" CreationDate="2019-02-10T13:54:04.623" Score="2" Body="&lt;p&gt;The IBM AT bios listing. &lt;a href=&quot;https://archive.org/details/bitsavers_ibmpcat618ferenceMar86_25829277/page/n325&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/details/bitsavers_ibmpcat618ferenceMar86_25829277/page/n325&lt;/a&gt;&#xA;Seems to have some of the data you're looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CRC would have been implemented in hardware (there are a few variants) so probably an early FDC documentation would be your best bet.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2019-02-10T13:54:04.623" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9151" PostTypeId="2" ParentId="9145" CreationDate="2019-02-10T15:35:17.687" Score="9" Body="&lt;p&gt;The question is a bit unclear on what is considered local.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/9152/6659&quot;&gt;Tommy's good answer&lt;/a&gt; included the &lt;strong&gt;Jaguar and JagLink&lt;/strong&gt; which may be the right 'first' here. Something I forgot even though I had one back then - including JagLink and DOOM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except and unlike implied, the JagLink box doesn't change communication in any way like a LAN adaptor. Any right wired cable works, as the so called 'DSP-Port' is just a high speed (asynchronous) serial port operating at TTL level. This is fine for short distance connections - like a few feet - but will produce high error rates at longer distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In real life situations, families owning more than one console will not have them - and two TV sets - siting side by side, but rather in one in a bed room and on in the living room - or both in bed rooms. This will easy result in a distance of 15 m or more. Way too far for TTL signals at high speed. Of course expensive cable could help as well, except that's not exact consumer price level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result Atari engineering came up with the little JagLink adapters. On the inside they feature a &lt;a href=&quot;http://www.mdgames.de/jaglink.htm&quot; rel=&quot;noreferrer&quot;&gt;MAX232 type level shifter&lt;/a&gt; quadrupling voltage from 0V/5V to -10/+10V. This allowed the usage os simple &lt;a href=&quot;https://en.wikipedia.org/wiki/Twisted_pair&quot; rel=&quot;noreferrer&quot;&gt;unshielded twisted pair&lt;/a&gt; (telephone wire) for longer distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JFWlg.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JFWlg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Picture taken from Matthias Domins &lt;a href=&quot;http://www.mdgames.de/&quot; rel=&quot;noreferrer&quot;&gt;http://www.mdgames.de/&lt;/a&gt; site)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_Jaguar&quot; rel=&quot;noreferrer&quot;&gt;Jaguar&lt;/a&gt; introduced in 1993/94 and &lt;a href=&quot;https://en.wikipedia.org/wiki/Doom_(1993_video_game)#Expansions_and_ports&quot; rel=&quot;noreferrer&quot;&gt;Doom delivered in 1994&lt;/a&gt; with JagLink cables the same time, it could as well qualify as first here.&lt;/strong&gt; So far there were only two other (original) games using thee link: Doom and &lt;a href=&quot;https://en.wikipedia.org/wiki/AirCars&quot; rel=&quot;noreferrer&quot;&gt;Air Cars&lt;/a&gt; released in 1997. The third, often cited title, &lt;a href=&quot;https://en.wikipedia.org/wiki/BattleSphere&quot; rel=&quot;noreferrer&quot;&gt;Battle Sphere&lt;/a&gt; was announced in 1994, but went into &lt;a href=&quot;https://en.wikipedia.org/wiki/BattleSphere#Development&quot; rel=&quot;noreferrer&quot;&gt;development hell&lt;/a&gt; until finally (re-)released in 2000.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Depending on how this is iterated, one answer could be the &lt;a href=&quot;https://en.wikipedia.org/wiki/Dreamcast&quot; rel=&quot;noreferrer&quot;&gt;Sega Dreamcast&lt;/a&gt;. While games where primarily meant to be connected via online services like &lt;a href=&quot;https://en.wikipedia.org/wiki/SegaNet&quot; rel=&quot;noreferrer&quot;&gt;Seganet&lt;/a&gt;, it could, unlike its predecessor the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sega_Saturn&quot; rel=&quot;noreferrer&quot;&gt;Sega Saturn&lt;/a&gt;, also use a LAN adaptor to play some games locally. Being introduced in 1998, it predates the Game Cube by three years (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if playing via an online service is a valid answer (*2), then already Sega's MegaDrive (Genesis) enabled this in 1990 with the Mega Modem add-on from Sega, as well as with &lt;a href=&quot;https://en.wikipedia.org/wiki/XBAND&quot; rel=&quot;noreferrer&quot;&gt;XBAND&lt;/a&gt;'s system which even allowed gaming across console borders by supporting MegaDrive and NES consoles in 1994.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9145/what-was-the-first-games-console-to-support-linking-consoles-together-for-local#comment29140_9151&quot;&gt;Faddens comment&lt;/a&gt;, the gameplay on XBAND did, after establishing a pairing via the online service, move into a direct communication, eliminating the online part. This would make it somewhat eligible regarding the local part.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Out of scope&lt;/strong&gt;, but maybe interesting here: Delivery of games via online services is almost as old as cartridge based consoles:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;In 1980 CVC introduced their Master Module for the Atari VCS 2600, able to connect to the &lt;a href=&quot;https://en.wikipedia.org/wiki/GameLine&quot; rel=&quot;noreferrer&quot;&gt;GameLine&lt;/a&gt; online service and download games.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A year later, in 1981, Mattel introduced &lt;a href=&quot;https://en.wikipedia.org/wiki/PlayCable&quot; rel=&quot;noreferrer&quot;&gt;PlayCable&lt;/a&gt;, where a modem plugged into the cartridge slot would connect to TV cable and download games that where continuously streamed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The different approaches are quite interesting. Where GameLine reassembles online services, PlayCable is a strict unidirectional broadcasting technology. All games offered where streamed continuously on separate (mono audio) channels, plus one channel streaming a menu program to allow dynamic selection, basically a dictionary service.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The Dreamcast also featured a link cable to connect a &lt;a href=&quot;https://en.wikipedia.org/wiki/Neo_Geo_Pocket_Color&quot; rel=&quot;noreferrer&quot;&gt;Neo Geo Pocket Color&lt;/a&gt;, so beating the Game Cube here as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The question is somewhat unclear here in bringing this as example, but asking as well about 'local'. Thus two local systems connected via an online service may or may not be valid.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-02-10T20:46:58.163" LastActivityDate="2019-02-10T20:46:58.163" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9152" PostTypeId="2" ParentId="9145" CreationDate="2019-02-10T15:50:28.757" Score="17" Body="&lt;p&gt;The original PlayStation supported a link cable much like the Gameboy's out of the box via its serial port; e.g. you can see that European launch title, Wipeout, supported it by inspecting the row of features starting near the bottom left of the back of the box:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6KQtl.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6KQtl.jpg&quot; alt=&quot;Back of Wipeout Box&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a passive cable, and became available in 1995.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you'll allow intelligent peripherals then the Atari Jaguar, supported local networking in theory via its JagLink add-on, with the first game to utilise it, in a buggy fashion, being Doom from November 1994.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: contrary to my statement above, there's no active logic in a JagLink cable — just a single level-converter IC at each end. See Raffzahn's answer for more information on that. But that would give the Jaguar a claim date of November 1993, more than a year before the Playstation's Japanese launch.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-02-11T14:20:45.073" LastActivityDate="2019-02-11T14:20:45.073" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9153" PostTypeId="2" ParentId="9136" CreationDate="2019-02-10T16:32:18.927" Score="7" Body="&lt;p&gt;The account, amount and routing characters from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Magnetic_ink_character_recognition&quot; rel=&quot;noreferrer&quot;&gt;MICR&lt;/a&gt; sets: CMC-7 (Groupe Bull, 1957) and E13B (ABA, 1958-59).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1963 ASCII also used to have &lt;code&gt;↑&lt;/code&gt; and &lt;code&gt;←&lt;/code&gt; where we now have &lt;code&gt;^&lt;/code&gt; and &lt;code&gt;_&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-02-10T16:32:18.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9154" PostTypeId="2" ParentId="9145" CreationDate="2019-02-10T17:19:19.167" Score="7" Body="&lt;p&gt;An early example is the 1994 game Zero Tolerance for the SEGA Mega Drive / Genesis, which allowed for local multiplayer with two systems and two TV sets connecting both machines with a link cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zero_Tolerance_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Zero_Tolerance_(video_game)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11926" LastEditorUserId="75" LastEditDate="2019-02-13T21:19:15.947" LastActivityDate="2019-02-13T21:19:15.947" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9155" PostTypeId="2" ParentId="9146" CreationDate="2019-02-10T18:50:03.263" Score="6" Body="&lt;p&gt;All IBM floppy variants (5.25″ and 3.5″, DD and HD) use the same floppy controller, just the timing is different. So the bit pattern structure is the same, even though number of sectors per track etc. can differ. Interleaving is handled by software, I don't know the details.&lt;/p&gt;&#xA;&lt;p&gt;The IBM PC floppy controller chips are descendants of the venerable NEC µPD765, which implements the IBM 34 MFM format as used in the mainframes. You can find details in the datasheet of the controller, and in IBM mainframe manuals.&lt;/p&gt;&#xA;&lt;p&gt;Here is a transcription of the byte patterns (in hex) from the datasheet:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;80x 4E  Gap 4a&#xA;12x 00  Sync&#xA;3x  C2  IAM&#xA;    FC  ”&#xA;50x 4E  Gap 1&#xA;12x 00  Sync&#xA;3x  A1  IDAM&#xA;    FE  ”&#xA;    **  CYL = Cylinder&#xA;    **  HD = Head&#xA;    **  SEC = Sector&#xA;    **  NO = ?&#xA;2x  **  CRC&#xA;22x 4E  Gap 2&#xA;12x 00  Sync&#xA;3x  A1  DATA AM&#xA;    FB  ”&#xA;?x  **  Data&#xA;2x  **  CRC&#xA;?   ?   Gap 3&#xA;?   ?   Gap 4b&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;CRC is calculated by hardware. Some gap lengths can differ between variants.&lt;/p&gt;&#xA;&lt;p&gt;The A1 and C2 marker bytes are special and don't follow the standard MFM encoding: A1 is missing a clock transition between bits 4 and 5, and C2 is missing a clock transition between bits 3 and 4.&lt;/p&gt;&#xA;&lt;p&gt;They are written by a WRITE TRACK controller command that interprets F5 and F6 to write those special bytes.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="15334" LastEditDate="2020-11-14T08:31:33.110" LastActivityDate="2020-11-14T08:31:33.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9156" PostTypeId="2" ParentId="9145" CreationDate="2019-02-10T21:19:17.803" Score="2" Body="&lt;p&gt;Does &lt;a href=&quot;https://en.wikipedia.org/wiki/MIDI_Maze&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIDI maze&lt;/a&gt;, a death match (shooting pac-man like characters in a first-person view maze) released for the Atari ST in 1987 and using the ST's Midi connection for the required networking count?  I remember parties of something like 8 players indulging in this thing.&lt;/p&gt;&#xA;" OwnerDisplayName="user11928" LastActivityDate="2019-02-10T21:19:17.803" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="9157" PostTypeId="2" ParentId="1393" CreationDate="2019-02-10T21:45:08.120" Score="4" Body="&lt;p&gt;There is a lot of activity around PLATO in the retro-computer scene lately thanks to one particular person, Thom, who has been porting a PLATO terminal to many retro computers including the 99/4A.  He has a website with status for all the systems: &lt;a href=&quot;https://www.irata.online/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.irata.online/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for running PLATO itself on js99er specifically, I see the original PLATO cartridge in js99er's software list and I just loaded it without problems.  If you have trouble with js99er, the author of the emulator is a very active member of the TI-99/4A subforum of the AgariAge forums.&lt;/p&gt;&#xA;" OwnerUserId="11927" LastActivityDate="2019-02-10T21:45:08.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9158" PostTypeId="2" ParentId="8363" CreationDate="2019-02-10T22:00:13.720" Score="2" Body="&lt;p&gt;If don't know if anyone has done a &quot;comparative analysis&quot; of the evolution of the 9918A, but here is generally a lot of forum discussion about what was added to later derivatives of the 9918A, i.e. the 9938/58, 9990, NES and Sega chips, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The visual6502 group has had a 9918A for a long time (I have sent them a few myself), and I have been eagerly waiting for them to decap the device so some die-level analysis can be done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, a lot of what is inside the chips can be derived from the datasheets and external interfaces, and proven via emulation, HDL modeling (FPGA cores), and software (i.e. using the VDP).  Plus, some of the designers (Karl Guttag for example) have given interviews, released unpublished details, and answered architecture questions via email in the past, so there is at least a lot of comprehensive information available about the original 9918A.&lt;/p&gt;&#xA;" OwnerUserId="11927" LastActivityDate="2019-02-10T22:00:13.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9159" PostTypeId="2" ParentId="9135" CreationDate="2019-02-10T22:27:23.893" Score="2" Body="&lt;p&gt;If you tested with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PSU -&gt; ammeter -&gt; 2-wires -&gt; J9-1, J9-2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the computer did not start (but works with the meter out of the circuit) then I would suspect the meter is not capable of passing the current, or something is wrong in the setup.  Drawing 1200mA sounds more reasonable for the +5V line, but it is unclear how the meter would report this and yet the computer does not start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specifications for the Mean Well PSU you found look reasonable.  It provides more power than the original in all cases except for the &quot;.2&quot; (200mA) on the +12, which I would not expect to be a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure I believe your first statement, &quot;I don't have the know-how&quot;, to get the original fixed.  Anyone who owns an meter and who is willing to start busting out alternative power supplies and wire them up, seems like they are ready to take that next step. ;-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original PSU looks fairly basic, and unless the main transformer is bad, you should be able to locate any failed parts via Mouser, Digikey, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the system works with the alternate PSU, and nothing seems out of the ordinary, i.e. you are not letting the smoke out of any parts, nothing is getting hotter than expected, etc. then why not just use the new PSU?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand wanting to make sure everything is working correctly, however, without a known base-line of what a working system should be consuming on each power rail, the best you can do is guess.  I suppose you could identify all the active components and total up their typical power ratings from datasheets (which would be a lot of effort), and use that as a base-line.  Or, find someone else with that system and ask them to make current measurements (this is typically a tall request for most hobbyists / collectors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively you can invest in an adjustable power supply to test with, which will then show you exactly how much current is being drawn.  This can help you make sure the new PSU will be sized correctly, and can help let you know if something is going wrong on the system board.  You can also control the amount of current going to the system, which can help prevent blowing things up if something is going wrong on the board.&lt;/p&gt;&#xA;" OwnerUserId="11927" LastActivityDate="2019-02-10T22:27:23.893" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9160" PostTypeId="1" AcceptedAnswerId="9161" CreationDate="2019-02-11T10:14:26.980" Score="4" ViewCount="524" Body="&lt;p&gt;Fractions like a third, a fifth, a tenth and so on cannot be precisely represented in binary, because those would be recurring fractions and so would never fit in a (reasonable) data structure. And some fractions like a third, while impossible to represent precisely in decimal, can easily be represented precisely in another radix, say duodecimal. So using a particular radix solves the problem of representing fractions in a finite amount of space, but each radix does this only for certain fractions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently the Babylonians and the Mayans counted in base-60, a number which has the beautiful property of having many divisors. Also, it's a number which fits quite neatly in 6 binary digits, and overflow detection wouldn't be that hard to implement (a small number of AND gates is all that's needed). Base-240 might be another good choice for similar reasons. The advantage of a system like that is that common fractions &lt;code&gt;1/3&lt;/code&gt;, &lt;code&gt;1/5&lt;/code&gt;, &lt;code&gt;1/7&lt;/code&gt; etc can be represented exactly, which could lead to fewer rounding errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now as to early computers, many used base-2 (that's the same thing as binary), but &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_650&quot; rel=&quot;nofollow noreferrer&quot;&gt;some used base-10&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Setun&quot; rel=&quot;nofollow noreferrer&quot;&gt;some used base-3&lt;/a&gt;, and my supposition is that a floating point implementation on these computers would naturally have different characteristics in the precision of certain (useful) non-integers. So did any early computers use another base than binary, &lt;em&gt;in order to improve the accuracy of rational arithmetic&lt;/em&gt;? Would that have been worth doing?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This question has been marked as a possible duplicate of &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7810/why-not-use-fractions-instead-of-floating-point&quot;&gt;Why not use fractions instead of floating point?&lt;/a&gt;. To clarify the difference, that question is about representing numbers as &lt;code&gt;i+(e/d)&lt;/code&gt;, which is what a fraction is. This question is about representing numbers as &lt;code&gt;m×bᵉ&lt;/code&gt;, which is a traditional floating point, only varying &lt;code&gt;b&lt;/code&gt;. &lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="11757" LastEditDate="2019-04-25T06:50:31.853" LastActivityDate="2019-04-25T06:50:31.853" Title="Did any early computers use a different radix to improve accuracy of rational arithmetic?" Tags="&lt;floating-point&gt;" AnswerCount="2" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="9161" PostTypeId="2" ParentId="9160" CreationDate="2019-02-11T13:12:10.550" Score="7" Body="&lt;p&gt;Beside binary floating point and decimal FP only &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_hexadecimal_floating_point&quot; rel=&quot;noreferrer&quot;&gt;IBM's sedecimal (hex) FP&lt;/a&gt; found wider usage. To a practical extend the base-16 FP is only a variation of binary.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So did any early computers use another base than binary, in order to improve the accuracy of rational arithmetic?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, decimal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Decimal offers the advantage of producing exactly the same precision inherent to our human arithmetic. A consistent result with a known number of valid digits is in reality usually more relevant than a perfect one. For decimal FP after each calculation the number of valid (decimal) digits is well known and without any doubt. That's why even binary machines often implement BCD, as this, in addition with fixed point notation guarantees results following the well set rules for decimal numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mentioned base-16 is more of a sideline of binary FP, as it's precision wise comparable (*1). It was introduced due to the structure of the machine implemented for (*2). It had already a nibble based move hardware to handle BCD. Basically a &lt;a href=&quot;https://en.wikipedia.org/wiki/Barrel_shifter&quot; rel=&quot;noreferrer&quot;&gt;barrel shifter&lt;/a&gt; working in multiple of 4. Using it to align FP values for computation and normalizing them later would result in optimal speed without the need for adding a bitwise barrel shifter (*3).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So using a particular radix solves the problem of representing fractions &lt;em&gt;&lt;strong&gt;(*4)&lt;/strong&gt;&lt;/em&gt; in a finite amount of space, but each radix does this only for certain fractions. [...]&#xA;  Base-240 [...] The advantage [...] is that common fractions 1/3, 1/5, 1/7 etc can be represented exactly, which could lead to fewer rounding errors.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And any base used can only cover a very small number of common fractions. By looking close you'll notice, that it comes down to prime numbers (*5), and even base-240 (*6) only includes the first 3 primes: (1,) 2,3 and 5. Already number 7 you cite isn't in there, thus producing precision errors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only a use of variable base FP, one where every number is made to a best fitting base, would &lt;em&gt;maybe&lt;/em&gt; lower precision errors. Much the same way a fraction based system does circumvent the problem by using an intermediate format. Except, a variable base format would not only increase calculation cost to a similar extreme, it will also work only with a subset, as only one fraction has to be used (and found first).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last, but maybe even more important, when it comes to outputing the result, no matter what system with a single radix we use (except 10), conversion errors will again be introduced, as we surely prefer a base 10 output, don't we? And any meaningful statement about the precision (valid digits) will have to be made in that radix, not in base-10 as we would like it to have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conclusion: &lt;strong&gt;For human computer usage there are only two meaningful FP representations&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Binary&lt;/strong&gt; (Base-2) to create the most simple computer and&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Decimal&lt;/strong&gt; (Base-10) to create one operating with the same precision errors we are used to/expect.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - There is a precision 'wobble', as due the nibble (4 bit) nature the number of significant &lt;em&gt;binary&lt;/em&gt; digits varies from n-3 to n with n being the number of bis assigned to the mantissa. Thus a 32 bit float with a 24 bit (6 nibble) mantissa has 21..24 bit precision. The price to be payed for the hardware shortcut. But not a big one either, as the default format wasn't 32 but 64 bit anyway. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - IBM /360 if you have to ask :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - It's these details why I'm so impressed with Mr. &lt;a href=&quot;https://en.wikipedia.org/wiki/Gene_Amdahl&quot; rel=&quot;noreferrer&quot;&gt;Amdahl&lt;/a&gt;'s work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Looks like you're still &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7810/why-not-use-fractions-instead-of-floating-point?rq=1&quot;&gt;toying with this idea&lt;/a&gt;, don't you? :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Since any number can be factorized into primes, we only need to look at primes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Using that example is quite nice, as it points to the blinds we carry without even noticing. We're so used to binary computers, that we try to fit everything in this format - even when asking for non binary solutions. A similar shortcut is the often used argument, that decimal would be spacewise inefficient as it needs four bits to store a digit. On a decimal computer storage wouldn't be binary - it would be of course decimal, with each decimal-bit holding 10 values (much like today's flash cells holding 8 or more values). A decimal-byte on such a machine may be made of 2 decimal-bits, quite sufficient to hold a character.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thinking of it, a modern decimal computer would be most likely be base-5, with two bits per decimal digit and 4 per decimal-byte and 20 per decimal word. With the exception of the sense amplifiers, such a computer will way more compact as a binary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, such a machine would most definitely not waste space storing decimal numbers - rather the other way around when it comes to binary - but than again, who would care about binary anyway .))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-02-11T15:10:02.923" LastActivityDate="2019-02-11T15:10:02.923" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9162" PostTypeId="2" ParentId="9160" CreationDate="2019-02-11T19:55:55.213" Score="3" Body="&lt;p&gt;The ENIAC (one of very first electronic computers, depending on definition) was a decimal computer (used decimal arithmetic accumulators, implemented with vacuum tubes).&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2019-02-11T19:55:55.213" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9163" PostTypeId="1" AcceptedAnswerId="9164" CreationDate="2019-02-11T20:31:58.260" Score="10" ViewCount="2212" Body="&lt;p&gt;How do you compare two &lt;strong&gt;signed&lt;/strong&gt; numbers in Z80 assembly? According to &lt;a href=&quot;http://www.z80.info/z80_faq.htm#Q-26&quot; rel=&quot;noreferrer&quot;&gt;this site&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To compare stuff, simply do a CP, and if the zero flag is set [then]&#xA;  the argument[s] were equal, else if the carry is set the argument was greater...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To simplify the explanation, suppose we are working with a three bit signed representation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;binary  unsigned  signed&#xA;------  --------  ------&#xA;000     0          0&#xA;001     1          1&#xA;010     2          2&#xA;011     3          3&#xA;100     4         -4&#xA;101     5         -3&#xA;110     6         -2&#xA;111     7         -1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Suppose I want to compare &lt;code&gt;-4&lt;/code&gt; and &lt;code&gt;3&lt;/code&gt;. According to the quote above, a less than condition is indicated with the &lt;em&gt;zero flag being clear&lt;/em&gt; and the &lt;em&gt;carry flag being clear&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CP instruction subtracts -4 from 3 as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  100&#xA;+(101)  // two's complement of 3&#xA;------&#xA; 1001   // carry bit is set&#xA;------ &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see the carry flag is set indicating that &lt;code&gt;-4&lt;/code&gt; is greater than &lt;code&gt;3&lt;/code&gt;. Which is not what I expect =( This makes me suspect that the logic in the quote only works for unsigned comparisons.&lt;/p&gt;&#xA;" OwnerUserId="6672" LastEditorUserId="6659" LastEditDate="2019-02-11T21:49:55.387" LastActivityDate="2020-04-15T08:48:57.610" Title="Comparing Signed Numbers on Z80 (8080) in Assembly" Tags="&lt;assembly&gt;&lt;z80&gt;&lt;8080&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9164" PostTypeId="2" ParentId="9163" CreationDate="2019-02-11T20:57:47.453" Score="18" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How do you compare two signed numbers in z80 assembly?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Signed arithmetics - this includes compare - uses the Overflow flag (P/V) to signal any over/underflow. To decode it has to be seen in relation with the sign flag. This is a two step process:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Step 1: Test for equal.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If Z flag is set then V (value compared) is equal to A&lt;/li&gt;&#xA;&lt;li&gt;If Z flag is reset then Vr is not equal to A&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Step Two: Test for less or greater&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If S and P/V are the same then V is greater (*) an A&lt;/li&gt;&#xA;&lt;li&gt;If S and P/V are different then V is less than A &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;S and P/V are as well the same if the number is equal to A, so without the first test comparing S an P/V can be used to catch a number &lt;em&gt;greater or equal&lt;/em&gt; to A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a Z80 (or any 8080 follow up) 1 to 3 flags need to be checked, depending on the question asked the resulting jumps may be rather complex. Now, drawing this up as a table gives additional insight&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Z   S  P/V&#xA;0   0   0   V&amp;gt;A&#xA;0   0   1   V&amp;lt;A&#xA;0   1   0   V&amp;lt;A&#xA;0   1   1   V&amp;gt;A&#xA;1   0   0   V=A&#xA;1   0   1   V=A (doesn't happen anyway)&#xA;1   1   0   V=A ( &quot;       &quot;      &quot;    )&#xA;1   1   1   V=A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Looking at the first 4 lines looks quite like an &lt;a href=&quot;https://en.wikipedia.org/wiki/Exclusive_or&quot; rel=&quot;nofollow noreferrer&quot;&gt;XOR operation&lt;/a&gt;, doesn't it? &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A   B   Q&#xA;0   0   0&#xA;0   1   1&#xA;1   0   1&#xA;1   1   0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If we just had a way to XOR flag bits ... to bad that moving them to A not only destroys A, but also requires a lot of code. But help is near, there is an a variation of CP that copies the sign into an accumulator bit: SUB :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets try this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;     SUB -4&#xA;     JP  Z,Equal     -&amp;gt; V was equal to what A was&#xA;     JP  PO,No_XOR   -&amp;gt; P/V not set, so XOR wouldn't do anything useful&#xA;     XOR 80h         -&amp;gt; S := S XOR P/V - as tabled above&#xA;No_XOR:&#xA;     JP  M,Less      -&amp;gt; V was less than what A was&#xA;     JP  PE,Greater  -&amp;gt; V was greater than what A was&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Nifty, isn't it :)) Now just remove the unneeded jumps. Ofc, if you need to preserve A, then the usual jumps are back on track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general carry is not meant for comparison, it's sole purpose is to handle carry (borrow) on multi byte/word operations. Now, in the special case of unsigned numbers, testing it (at the end), instead of operating on S vs. P/V, does simplify code. Bottom line: above citation is valid, but only (and as already assumed) in case of unsigned numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Hint: Instead of wasting time on more or less special web pages, get a copy of &lt;a href=&quot;https://en.wikipedia.org/wiki/Rodnay_Zaks&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rodney Zacks&lt;/a&gt;'s &lt;a href=&quot;https://en.wikipedia.org/wiki/Programming_the_Z80&quot; rel=&quot;nofollow noreferrer&quot;&gt;Programming the Z80&lt;/a&gt;, eventually &lt;strong&gt;the&lt;/strong&gt; standard book for this purpose - and &lt;a href=&quot;http://www.z80.info/zaks.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;conveniently (and legaly) available&lt;/a&gt; as PDF on &lt;a href=&quot;http://www.z80.info/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gaby's Z80-Info&lt;/a&gt; site)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-04-15T08:48:57.610" LastActivityDate="2020-04-15T08:48:57.610" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="9165" PostTypeId="2" ParentId="9163" CreationDate="2019-02-11T22:31:40.247" Score="1" Body="&lt;p&gt;Comparisons in microprocessors is essentially done by subtracting one value from the other, and looking at the flags generated by that process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference being, of course, is that comparison is not destructive whereas subtraction is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, simply if you know how to subtract two signed numbers, you know how to compare them. This could give you better insight in to the problem.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="7493" LastEditDate="2019-02-11T23:02:59.620" LastActivityDate="2019-02-11T23:02:59.620" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9166" PostTypeId="1" CreationDate="2019-02-12T00:22:57.100" Score="5" ViewCount="506" Body="&lt;p&gt;Wikipedia says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Residue_number_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;residue numeral system (RNS)&lt;/a&gt; is a numeral system representing integers by their values modulo several pairwise coprime integers called the moduli.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Bit widths of each of those &quot;several integers&quot; will be much smaller than the width of the represented integer, allowing efficient addition/subtraction and multiplication, at the cost of complicated division and value comparison.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a hypothetical example. Suppose that we want to represent 30-bit integers using residues. We pick several co-prime numbers - e.g. 1023, 1024, 1025, and represent value N as a triple &lt;code&gt;[N mod 1023, N mod 1024, N mod 1025]&lt;/code&gt;. Note that the &lt;code&gt;mod&lt;/code&gt; operation always results values of the same sign as the divisor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this particular case converting from N to residue triple and back is easy, as &lt;code&gt;N mod 1024&lt;/code&gt; is just 10 lowest bits of N, &lt;code&gt;N mod 1023&lt;/code&gt; is &lt;code&gt;(N[29:20] + N[19:10] + N[9:0]) mod 1023&lt;/code&gt; which is very easy to calculate, and &lt;code&gt;N mod 1025&lt;/code&gt; is, similarly, &lt;code&gt;(N[29:20] - N[19:10] + N[9:0]) mod 1025&lt;/code&gt;, pretty much the same way as we mentally compute &lt;code&gt;mod 9&lt;/code&gt; and &lt;code&gt;mod 11&lt;/code&gt; of numbers expressed in decimal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, adding or multiplying triples is done as adding or multiplying individual unsigned values mod 1023, 1024 or 1025 respectively. For addition, this requires shorter carry chains (10-deep) than would be used for 30-bit integers &amp;mdash; or much smaller carry prediction trees, &amp;mdash; and, for multiplication, just three 10x10 multipliers, one of them partial: we only need 10 lowest bits of the product to find out its &lt;code&gt;mod 1024&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Converting a triple back to an integer is akin to solving a simple linear equation, reversing the way the triple was constructed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Division would be much more complex, and less-than comparisons would be done by converting triples back to integers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it could still be beneficial to use it for specialized computations, and there was a project of a Soviet military computer for the &lt;a href=&quot;https://en.wikipedia.org/wiki/A-35_anti-ballistic_missile_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;anti-ballistic missile system&lt;/a&gt; using a residue number system: &lt;a href=&quot;https://translate.google.com/translate?sl=ru&amp;amp;tl=en&amp;amp;u=https%3A%2F%2Fru.wikipedia.org%2Fwiki%2F5%25D0%25AD53&quot; rel=&quot;nofollow noreferrer&quot;&gt;5Э53&lt;/a&gt;, apparently unimplemented; a computer with a conventional number representation was used instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there any computers using a residue number system which made it to production?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2019-02-13T22:38:49.517" LastActivityDate="2019-02-14T13:40:26.693" Title="Were there any working computers using residue number systems?" Tags="&lt;history&gt;&lt;architecture&gt;&lt;alu&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9167" PostTypeId="1" CreationDate="2019-02-12T09:39:26.957" Score="14" ViewCount="605" Body="&lt;p&gt;Amiga OS &lt;em&gt;resident modules&lt;/em&gt; (libraries, devices, etc...) are location-agnostic, in that it is technically possible to compile them as location-independent code to be loaded at runtime from disk, or to compile them with fixed addresses to be stored in ROM, and Exec will automatically fetch and activate them in both cases. For example, for libraries, probably the most known example of this characteristic is the &lt;code&gt;workbench.library&lt;/code&gt; in the A4000T version of the 3.1 Kickstart ROM, that was moved to disk due to space constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, filesystems can too be stored on disk in the Rigid Disk Block structure on hard drives, and the system will load and link them at boot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, suppose one wants to assemble a custom Kickstart for Amiga that can boot right into a regular Workbench, while keeping the modules in ROM to the bare minimum needed. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the minimum set of modules that are strictly necessary for the Amiga to boot into Workbench and can't be placed on disk, under the assumption that you do not want to modify the modules?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What would be the minimum set if one was to eventually provide a bare-bones implementation of a graphic toolkit to assist the system during the boot (mainly for diagnostics), that is until the system passes the critical state that allows it to load the full UI subsystem from disk?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Addition: as correctly pointed out, A1000 and early A3000 can load a Kickstart from disk, however the question here is a bit different: which libraries, devices are absolutely needed in the Kickstart for the machine to bootstrap the system. Especially after Kickstart 2.0, when the Kickstart got in it many modules that arguably are not &quot;core&quot; and could have lived on disk (think about Gadtools....).&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2019-02-12T15:03:32.503" LastActivityDate="2019-02-21T04:33:10.157" Title="What is the minimum set of Kickstart kernel modules to allow an Amiga to boot?" Tags="&lt;amiga&gt;&lt;boot&gt;&lt;amiga-kickstart&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9168" PostTypeId="2" ParentId="9167" CreationDate="2019-02-12T11:36:29.547" Score="4" Body="&lt;p&gt;Original Amiga 1000 was loading the kickstart from the floppy disk. There were even games that doesn't require Kickstart. From there I understand, there is no need for kickstart modules to start the system except a boot rom smiliar to the A1000.&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="3422" LastEditDate="2019-02-13T05:52:09.677" LastActivityDate="2019-02-13T05:52:09.677" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9169" PostTypeId="2" ParentId="6301" CreationDate="2019-02-12T12:39:01.017" Score="6" Body="&lt;p&gt;This is a frame from &lt;a href=&quot;https://www.csail.mit.edu/node/6647&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIT AI film #43&lt;/a&gt;.  I'm not sure what year it's from, but it seems to be from the PDP-6 era.  The code is very similar to old ITS source code, so it's likely this is a tiny fragment of PDP-6 ITS.  The use of &quot;↓₁₄&quot; identifies this as text displayed by PDP-6 TECO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/enyUu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/enyUu.png&quot; alt=&quot;MIT AI film #43&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transcription, including a few more lines visible in the film:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        LDB B,[MLU,,MEMBLT(A)]&#xA;        DPB B,[MLO,,MEMBLT(E)]&#xA;        LDB E,[MLU,,MEMBLT(A)]&#xA;        CAIE B,1777&#xA;        DPB E,[MLU,,MEMBLT(B)]&#xA;        SOS MEMFR&#xA;        JRST POPJ1&#xA;&#xA;IMEMR:  MOVE B,MEMFP&#xA;        DPB B,[MLO,,MEMBLT(A)]&#xA;        DPB A,[MLU,,MEMBLT(B)]&#xA;        MOVEI B,1777&#xA;        DPB B,[MLU,,MEMBLT(A)]&#xA;        MOVEI B,75&#xA;        DPB B,[MUR,,MEMBLT(A)]&#xA;        MOVEM A,MEMFP&#xA;        AOS MEMFR&#xA;        POPJ P,&#xA;↓₁₄TIBL=20&#xA;TOBL=20&#xA;NTTYS=4&#xA;        TYICLS&#xA;TYI:    SKIPG TICC (A)&#xA;        PUSHJ P,UFLS&#xA;        MOVEI B,TIOP(A)&#xA;        CAMN B,TIBEP(A)&#xA;        SUBI B,TIBL&#xA;        HRRM B,TIOP(A)&#xA;        ILDB B,TIOP(A)&#xA;        MOVEM B,(C)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2019-04-10T07:27:27.957" LastActivityDate="2019-04-10T07:27:27.957" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9170" PostTypeId="1" AcceptedAnswerId="9182" CreationDate="2019-02-12T17:56:42.867" Score="2" ViewCount="571" Body="&lt;p&gt;I recently got some old motherboards. I was able to fix a damage caused by a leaked battery on a 486 board by soldering a bypass (to fix not working keyboard plug). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another board is in a good shape except something heavy fell on it and damaged some parts. It is a &quot;Hippo EP40085R21&quot; - nothing special - with a Intel SX 25 MHz CPU. If you turn it on, there is no output, CPU did not get warm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are steps to do this repair? Should I replace all broken looking parts and try to turn it on?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4s6tb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4s6tb.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11204" LastEditorUserId="11204" LastEditDate="2019-02-12T19:13:10.813" LastActivityDate="2019-02-14T08:42:42.953" Title="How to repair an old motherboard" Tags="&lt;hardware&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9171" PostTypeId="2" ParentId="1908" CreationDate="2019-02-12T18:31:10.553" Score="8" Body="&lt;p&gt;A post to &lt;a href=&quot;https://www.reddit.com/r/tipofmyjoystick/comments/apvqfd/basicmid80sa_crimesolving_puzzle_presumably/?&quot; rel=&quot;noreferrer&quot;&gt;/r/tipofmyjoystick&lt;/a&gt; has brought the answer virtually instantaneously: the original game is &lt;a href=&quot;http://www.atarimania.com/game-atari-400-800-xl-xe-inspector-clew-so_2585.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Inspector Clew-So&lt;/em&gt;&lt;/a&gt;; other locations, some including the plaintext source can be found by searching for &lt;code&gt;CLEWSO.BAS&lt;/code&gt;, for example, &lt;a href=&quot;https://archive.org/details/riag_006_Volume_244_-_Games&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/riag_006_Volume_244_-_Games&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game I remember was slightly modified compared to the original: apart from the simplified interface, the most noticeable difference was that in the original, the &quot;suspects&quot; would mention that the host was already dead, and would be silent about the moment of the murder, whereas in the adapted Russian version, they would be silent about the dead body but would say something like &quot;at that time the host suddenly died&quot; if asked about the exact time of the murder. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How much it reflects cultural differences between the U.S. and the USSR, is anyone's guess.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2019-02-12T21:53:22.450" LastActivityDate="2019-02-12T21:53:22.450" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9172" PostTypeId="1" CreationDate="2019-02-12T19:17:58.327" Score="2" ViewCount="470" Body="&lt;p&gt;I have had two Macs, a 512K and a Plus, in storage since they failed the smoke test in a spectacular manner a few years back. I have finally learned how to solder and de-solder, so I think its time to change the analog board capacitors on both of the machines that are otherwise in good shape. I have James Wages's capacitor list, but it says it's only good for 110 V US models. Is there a list for EU-models somewhere or are they the same since they are low voltage capacitors?&lt;/p&gt;&#xA;" OwnerUserId="11936" LastEditorUserId="-1" LastEditDate="2019-02-13T12:22:19.260" LastActivityDate="2019-06-13T13:04:55.623" Title="Capacitor replacement on European 220 volt Mac 512K And Plus" Tags="&lt;apple-macintosh&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9173" PostTypeId="1" AcceptedAnswerId="9174" CreationDate="2019-02-12T23:23:31.557" Score="37" ViewCount="3790" Body="&lt;p&gt;The 8087 has many &lt;a href=&quot;http://www.intel-assembler.it/portale/5/The-8087-Instruction-Set/A-one-line-description-of-x87-instructions.asp&quot; rel=&quot;noreferrer&quot;&gt;instructions&lt;/a&gt; - too many, it seems, to be encoded as part of the 8086 instruction set. How did the Intel 8086 interface with an Intel 8087 FPU that a user added?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the following x86 assembly code sample:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// c = a + b;&#xA;fld    DWORD PTR [rbp-0xc]  // a;&#xA;fadd   DWORD PTR [rbp-0x8]  // b;&#xA;fstp   DWORD PTR [rbp-0x4]  // c;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The instructions &lt;code&gt;fld&lt;/code&gt;, &lt;code&gt;fadd&lt;/code&gt;, and &lt;code&gt;ftsp&lt;/code&gt; I assume are not hardwired into the 8086 circuit. So are they pseudo-instructions that the assembler subsequently converts to command/data instructions for the 8086 to pass onto the 8087 appropriately?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example &lt;code&gt;fld&lt;/code&gt; might be encoded as &lt;em&gt;command&lt;/em&gt; &lt;code&gt;0&lt;/code&gt; and for &lt;em&gt;data&lt;/em&gt; the value of &lt;code&gt;rbp-0xc&lt;/code&gt; is encoded which the 8087 would know is an address in memory holding the value it needs? And then a sequence of &lt;code&gt;OUT&lt;/code&gt; instructions are used by the 8086 to send the command and data to the 8087?&lt;/p&gt;&#xA;" OwnerUserId="6672" LastEditorUserId="836" LastEditDate="2019-02-13T14:30:32.753" LastActivityDate="2019-02-13T14:30:32.753" Title="How did the 8086 interface with the 8087 FPU coprocessor?" Tags="&lt;instruction-set&gt;&lt;floating-point&gt;&lt;8086&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9174" PostTypeId="2" ParentId="9173" CreationDate="2019-02-13T00:22:44.207" Score="47" Body="&lt;p&gt;The opcodes in your list are all only 16 bits (plus the extra bytes for address calculation) and you'll notice that they all begin (in hex) with &lt;code&gt;Dx&lt;/code&gt; where x &gt;= 8. This is because, to the 8086, any instruction whose first byte has the bit pattern &lt;code&gt;11011xxx&lt;/code&gt; was deemed to be an 8087 coprocessor instruction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the 8086 encountered a floating point opcode, it would do all the stuff to calculate the effective address and fetch the byte at that address and then it would just carry on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Meanwhile the 8087 reads all the same instructions as the 8086 and when it encountered an instruction destined for it (i.e. that started with &lt;code&gt;11011xx&lt;/code&gt;), it would simply read the data bus at the right time to get the first byte i.e. when the 8086 was fetching the data. For multi-byte reads it would also read the address bus and then take control of the memory bus after the 8086 read cycle and read the remaining bytes pointed to by the address using direct memory access (DMA). For writes, it would ignore the data bus, read the address and then use DMA to write the data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only direct connections between the 8086 and 8087 were a few control lines, some to synchronise the prefetch queues of the 8086 and the 8087 - so the 8087 would know exactly when the 8086 was executing floating point instructions - and one so that the 8086 could tell when the 8087 had finished the last instruction and was ready for the next. There was a special instruction in the 8086 called &lt;code&gt;wait&lt;/code&gt; that would simply cause the 8086 to wait until the 8087 signalled it was not busy on this line. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2019-02-13T00:29:48.280" LastActivityDate="2019-02-13T00:29:48.280" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="9175" PostTypeId="2" ParentId="7049" CreationDate="2019-02-13T03:07:15.580" Score="0" Body="&lt;p&gt;Disclaimer: Do NONE of the following unless you are comfortable with the particulars of a given described procedure!!!!  You have been warned!!!!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I understand that this is a rather old question, I feel that I can add important information not previously mentioned.  I have widened the image beyond what the factory adjustments would allow on at least two dozen monitor chassis, some to widen the image on a stock monitor/tube combination, and other times when I have constructed 26 or 32 inch monitors using circuit boards designed to drive 14 or 17 inch picture tubes.  I also should note that, as others have stated, there is likely nothing wrong with the OP's monitor; it was likely designed for a narrow image in order to reduce edge distortion and to guarantee that no over-scan occurs in various modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inductor that is shown in OP's photo is commonly referred to as the &quot;horizontal width coil&quot;, and is only one of two devices that determine the amplitude of the voltage driving the horizontal winding in the deflection coil.  The typical circuit includes not only the horizontal width coil, but also the horizontal width capacitor.  While the adjustable coil is used to fine-tune the width of the deflection, the over-all &quot;center&quot; of the adjustable range is determined by the horizontal width capacitor.  When the width coil is turned to it's middle range, the capacitor value can be adjusted to increase or decrease the width of the image to an acceptable &quot;starting point&quot;, and then the width coil can be used to widen or narrow the image from there.  This capacitor is almost always directly adjacent to the width coil, and are always electrically connected to one leg of the width coil.  These capacitors are polypropylene type capacitors, and usually have the shape of a full flour/grain sack, or a pillow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I have heard that some circuit designs need to have the capacitance lowered to increase the median width, I have personally never come across one of these designs.  In every single circuit I have modified, the image was widened by increasing the capacitance of the width capacitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The capacitance change required can usually be guessed for a rough estimate(for example, a 10% increase in width would require a 10% increase in capacitance), experimentation will almost always be required to get an acceptable medium width.  There are two ways this experimentation can occur; one is the safest, but much more work, while the other is more dangerous, but very little work.  In both cases, a range of capacitor values with the proper voltage ratings(200 to 400 volts; just match original capacitor's voltage) will need to be on-hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first method involves removing the original capacitor and replacing it with an appropriate value, powering down the monitor chassis and discharging all high voltage electrolytic capacitors between each experimental replacement.  The second method(as I said, more dangerous and only for the very experienced monitor technician) involves placing much lower value capacitors in parallel with the existing capacitor to increase the total value, all while the monitor is powered, observing the effect on screen width with each test.  This works because total capacitance is determined by adding the values of each capacitor in parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the first method, there are also two different ways that the capacitance can be changed, each way requiring a different range of capacitors on-hand with which to experiment.  The first way is obvious, which is replacing the original capacitor with a new value between each power down and discharge.  In this case, the range of capacitors required for the experimentation will need to be generally around the value of the original capacitor.  The second way would be to parallel an additional much smaller capacitor across the original capacitor by soldering one to the other between each discharge and test.  In this second case, a selection of much smaller value capacitors will be required, generally five or so values that are about 2 to 10 percent of the original capacitor's value. To fine-tune this, more than one of the smaller value capacitors can be paralleled with the original capacitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second quicker and more dangerous method(safe if you know what you are doing), is to disassemble the monitor in a fashion that it will still have all cables and internal wiring connected that provides access to the bottom of the circuit board, while the monitor is still able to operate.  In this case, one would(with the monitor powered down and capacitors discharged) apply solder to the original capacitors solder joints, in order to ensure no laminate exists on top of the original solder joints.  Then, with the monitor powered up, one would take an experimental small-value capacitor(starting with the very smallest), and touching it across the solder joints of the original capacitor in parallel, while observing the increase(or decrease) of the width of the image in real time.  Once the proper value is determined, the monitor can then be powered down and discharged, and the selected capacitor then soldered across the original capacitor in parallel, either on top of the circuit board(soldering to the protruding legs of the original capacitor), or on the bottom of the circuit board, providing there is clearance for the new capacitor underneath the circuit board once the monitor is reassembled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One should also note, that, depending on the design of the original circuit, and the degree to which the width was increased, the geometry of the image may be distorted, notably the pin cushion.  Most monitors have addition adjustments for geometry correction, and in most cases(unless the width is dramatically increased), the geometry controls can compensate for geometric distortion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;***As an aside, I will note that I have never had a partially cracked ferrite core(as shown in the image) have any large effect on the performance of the circuit, though it should be noted that the cracking likely occurred by either using the wrong tool(should be hex, and not a screw driver), or by trying to adjust the ferrite core beyond it's designed range-of-travel.  In the latter case, the ferrite core should be re-centered to the center of it's designed range before proceeding with any further modifications.  While the horizontal width coil can be adjusted with the monitor running(thus observing the live results), only a plastic hex adjustment tool should be used, as inserting any ferrous(steel/iron) tool into the active coil turns this coil into a tiny inductive furnace, quickly heating the metal tool to dangerous temperatures(would scorch your fingers within a few seconds of inserting said tool), greatly overdriving the circuit and likely blowing the horizontal output transistor.  The coil can safely be adjusted with a metal tool(standard hex/&quot;Allen&quot; wrench) only when the monitor is powered down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will repeat again, don't do any of this unless you are comfortable with what you are doing, and in NO cases place both hands near an active or non-discharged chassis at the same time!!!&lt;/p&gt;&#xA;" OwnerUserId="11734" LastEditorUserId="11734" LastEditDate="2019-02-13T03:16:40.387" LastActivityDate="2019-02-13T03:16:40.387" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9176" PostTypeId="2" ParentId="9172" CreationDate="2019-02-13T10:40:37.640" Score="1" Body="&lt;p&gt;If you need to repair two Macintosh 220V Power/Sweep boards, #661-76214 (the power and&#xA;video parts), the only likely replacement capacitor needed would be the&#xA;vertical sweep (on 120V boards, that's 3.9 uF nonpolar).   If that&#xA;needs replacing, the vertical sweep is missing (just a horizontal stripe for&#xA;video, or too-short picture even with height adjusted).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Capacitor failures were common in 2000-2006, but a ~1985 Macintosh has&#xA;more likely problems elsewhere.   In addition to taking EXTREME care not&#xA;to crack the picture tube (not replaceable, fragile near neck connector), &#xA;one needs to safely&#xA;discharge the picture tube, before doing any soldering work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can compare two boards that have different faults, it might&#xA;be very easy to find the problems.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2019-02-13T10:40:37.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9177" PostTypeId="1" CreationDate="2019-02-13T18:30:31.760" Score="17" ViewCount="1714" Body="&lt;p&gt;Intel IA-32 architecture a.k.a. x86 offers hardware task switching capabilities since 80386. It includes TR (task register), memory segmentation features such as Task State Segment, task gates, call gates etc. However, this capability is not used in modern OSes which perform context management differently (for numerous reasons). Largely, the hardware task switching is not favored by any modern CPU architecture, not just x86. Within modern x86 OSes, only rudimentary TSS usage (that could not be avoided) can be found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for information about which historical or maybe modern operating systems, both small and large, niche or general purpose, use hardware task switching. I am aware that Linux kernel up to 1.3 used it. I could not found reliable information about the MS DOS and Windows families, but I suspect some early versions of them are bound to use TSS at its fullest.&lt;/p&gt;&#xA;" OwnerUserId="11943" LastActivityDate="2019-03-23T16:55:18.680" Title="Examples of operating systems using hardware task switching of x86 CPUs" Tags="&lt;80386&gt;&lt;x86&gt;&lt;multitasking&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9178" PostTypeId="2" ParentId="9177" CreationDate="2019-02-13T18:53:54.437" Score="10" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/RMX_(operating_system)&quot; rel=&quot;noreferrer&quot;&gt;iRMX III&lt;/a&gt; is a real-time operating system for Intel 80386 and later processors, originally developed by Intel and now maintained by &lt;a href=&quot;https://www.tenasys.com/resources/documentation/irmx-documentation/&quot; rel=&quot;noreferrer&quot;&gt;tenAsys&lt;/a&gt;. A quick look at the System Call Reference manual reveals that it uses call gates.&lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-02-13T18:53:54.437" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9179" PostTypeId="1" AcceptedAnswerId="9181" CreationDate="2019-02-13T19:10:42.603" Score="13" ViewCount="547" Body="&lt;p&gt;A few weeks earlier I have purchased an &quot;as is&quot; but working model 100 laptop. I've fixed some of the issues by soldering new capacitors for the screen, but the lines are still there. Would buying a lcd screen for TRS-80 model 102 work for the model 100?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now ebay doesn't have a lot of &quot;as is&quot; model 100s just 102s. Picture of my trs-80 model 100&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CDD9V.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CDD9V.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11944" LastEditorUserId="7208" LastEditDate="2019-09-13T01:53:35.970" LastActivityDate="2020-09-06T00:38:21.000" Title="Would a replacement screen from a TRS-80 model 102 work for a model 100?" Tags="&lt;trs-80-model-100&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9180" PostTypeId="2" ParentId="9145" CreationDate="2019-02-13T19:12:27.523" Score="0" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Family_Computer_Network_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;famicom&lt;/a&gt; had a system where you could use a modem and dial up.  According to the link there was some development on online multiplayer games.  This &lt;a href=&quot;https://www.youtube.com/watch?v=r9PuSrn_H1c&quot; rel=&quot;nofollow noreferrer&quot;&gt;Youtube video&lt;/a&gt; talks about being able to use it to compare high scores and potentially downloading games using the disk system&lt;/p&gt;&#xA;" OwnerUserId="11945" LastActivityDate="2019-02-13T19:12:27.523" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9181" PostTypeId="2" ParentId="9179" CreationDate="2019-02-13T22:33:13.453" Score="18" Body="&lt;p&gt;I fetched the Radio Shack Service Manual for the Model 100 (26-3801/3802) and the Tandy 102 Technical Reference Manual (26-252) and both discuss the LCD display timing details along with a driver schematic for each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(All images snipped from PDF copies of the manuals listed above, both of which I grabbed from &lt;a href=&quot;http://www.club100.org/library/libdoc.html&quot; rel=&quot;noreferrer&quot;&gt;Club 100&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, let's compare Model 100 Fig. 4-14: &lt;a href=&quot;https://i.stack.imgur.com/FNamL.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FNamL.png&quot; alt=&quot;Fig. 4-14&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and Fig. 4-15: &lt;a href=&quot;https://i.stack.imgur.com/YKV6l.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YKV6l.png&quot; alt=&quot;Fig. 4-15&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with the Model 102 Figure 2-10: &lt;a href=&quot;https://i.stack.imgur.com/KOZkx.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KOZkx.png&quot; alt=&quot;Figure 2-10&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and Figure 2-11: &lt;a href=&quot;https://i.stack.imgur.com/HqCt5.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HqCt5.png&quot; alt=&quot;Figure 2-11&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, the LCD connector pin-outs look the same, as do the timing and signal descriptions. There are a few differences in how those pins are driven by the discrete components, but this might just be an artefact of how the schematics were drawn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They look very similar, electronically, and appear to be pin-compatible. I'd want to stare hard at the driver circuitry details to make sure I understood the differences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I &lt;em&gt;think&lt;/em&gt; the differences in the driver circuits are not significant:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Either the Model 102 has an additional buffer between Y7 and pin 18 or the buffer is drawn in one case and not the other. But those &lt;em&gt;should&lt;/em&gt; be the same, electrically.&lt;/li&gt;&#xA;&lt;li&gt;Pin 19 looks identical to my eyes.&lt;/li&gt;&#xA;&lt;li&gt;Pin 4 (the circuit for controlling the contrast it looks like) look equivalent to me, even if the part numbers have changed. The voltage divider resistors are the same values, anyway. There are missing capacitors (decouplers?) in the 102 schematic, but maybe those were deemed unnecessary (or C16 obviates them).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Maybe someone else here could tell us if any of that raises some red flags.&lt;/p&gt;&#xA;" OwnerDisplayName="user12" LastEditorDisplayName="user12" LastEditDate="2019-02-14T14:25:45.270" LastActivityDate="2019-02-14T14:25:45.270" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9182" PostTypeId="2" ParentId="9170" CreationDate="2019-02-14T08:42:42.953" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What are steps to do this repair? Should I replace all broken looking parts and try to turn it on?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It depends on how you define &quot;repair&quot;.  Do you consider a &quot;repair&quot; as 1. &quot;fix the broken parts&quot;, or 2. &quot;make the motherboard work&quot;?  If #2, then you are possibly into the realm of motherboard &quot;troubleshooting&quot;, and that is well beyond the scope of the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the photo there are clearly broken parts that needs to be replace.  The Y1 crystal is crushed and needs to be replaced.  The 14.381MHz frequency suggests it has something to do with video since that frequency is commonly used to generate NTSC/PAL.  If the motherboard has on-board video, then it most likely will not work.  If the crystal is required by that UMC UM82C491F chipset IC right there in the photo, then most likely the motherboard will not work at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the damaged SIMM sockets are not electrically compromised in a way that they are causing short circuits, they they will not impact you ability to test the motherboard as long as it can operated with a partial memory configuration, i.e. using the first 2 or 4 slots instead of all 8.  If you want to use all 8 memory slots, then the two SIMM sockets will need to be replaced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To &quot;replace the broken looking parts&quot;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*Notes: Rework, and specifically desoldering is twice as hard as soldering.  This is not going to be easy.  The board probably used leaded solder.  Clean joints and flux makes rework &quot;work&quot;.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Use a hot-air bath preheater on a low setting (120c to 130c) and place the damaged part of the motherboard over the preheater.  Even old motherboards are multi-layer PCBs with large power and ground planes that makes seemingly small jobs very difficult.  The through holes can be very tight and makes it difficult even to remove single through-hole parts.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using 99.9% alcohol, like MG Chemicals 824-1L 99.9% Isopropyl Alcohol Liquid Cleaner, clean all the pins for the crystal and broken SIMM sockets with cotton-tip cleaners.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using a temperature controlled soldering iron set to 330c (~640f), reflow the crystal pins with a little solder.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using solder wick or a heated vacuum desolder iron, remove the solder from the crystal leads and remove the part.  Using small pliers you can move the part slightly while heating the joint to help remove the part if necessary.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;4b. Optionally use a low-temp desolder alloy like ChipQuik to lower the melting point of the solder joints.  Applying a small amount of ChipQuik to the joints with your iron, mixing with the original solder will make the solder joint liquid at the hot air bath temperature.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;5&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Clean the empty holes with alcohol and reflow solder into the empty holes.  Apply flux and use solder wick to cleanly remove all solder and clear the holes.  Clean with alcohol.  The holes should be shiny and look like they never had a part in them.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For the SIMM sockets almost certainly the ChipQuik will be required to remove them without damaging the PCB, or a heated vacuum desolder iron.  Just like step 4b, apply ChipQuik to every SIMM pin to flow the existing solder and mix the ChipQuik alloy.  The joints will become liquid at the hot air bath temperature, which means they will all be liquid simultaneously once ChipQuik is mixed with every pin.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use small pliers and/or a plastic spudger to wiggle and gently pry the SIMM socket.  Check for pins that are not liquid and mix ChipQuik with your iron as necessary to free every pin.  Remove the SIMM socket.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Clean all SIMM socket holes as done for the crystal in step 5.  ChipQuik is hard to clean with wick, and is easiest to clean while the hot air bath is still on, using cotton-tips and alcohol.  However, the holes still need to be cleared by reflowing with fresh solder and wicking.  This takes time and patience or you will pull pads and damage the PCB.  This is also one of the hardest components to remove, and not for the feint of heart or beginner.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Turn the motherboard over and clean the tops of the holes and inspect for damage.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Install new parts and solder.  Again, since many of the pins in the SIMM sockets will be connected to power and ground planes, I recommend using the hot-air bath to help resolder the parts.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For removal you can optionally try using a hot-air station, but it is hard to keep all the pins at liquid temperature due to the size of the socket, while at the same time trying to gently pull and pry the socket out.  It will be very hard to use hot-air without three hands (or an assistant), and without doing damage to the PCB.&lt;/p&gt;&#xA;" OwnerUserId="11927" LastActivityDate="2019-02-14T08:42:42.953" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9183" PostTypeId="2" ParentId="9166" CreationDate="2019-02-14T11:32:32.330" Score="5" Body="&lt;p&gt;First RNS machine seemed to be tube-based EPOS (Elektronický Počítací Stroj) made around 1963 in Czechoslovakia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The successor of that machine, EPOS-2, was transistorized and was built around 1973.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In USSR, there was Т340А machine, built also around 1962 and used for prototyping radar station machines. Later that machine turned into production К340А system, used for the same task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Links:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EPOS-related (russian and czech):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://cs.wikipedia.org/wiki/EPOS_1&quot; rel=&quot;noreferrer&quot;&gt;EPOS 1 on the Czech wikipedia&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://ru.wikipedia.org/wiki/EPOS_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80)&quot; rel=&quot;noreferrer&quot;&gt;EPOS 1 on the Russian wikipedia&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;General info regarding existing and only prototyped machines in USSR (russian only):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.computer-museum.ru/articles/uditskii/100/&quot; rel=&quot;noreferrer&quot;&gt;http://www.computer-museum.ru/articles/uditskii/100/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.computer-museum.ru/document/sorucom-2017_30_Malashevich_s.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.computer-museum.ru/document/sorucom-2017_30_Malashevich_s.pdf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.sorucom.org/articles/materialy-mezhdunarodnoy-konferentsii-sorucom-2017/1460/&quot; rel=&quot;noreferrer&quot;&gt;http://www.sorucom.org/articles/materialy-mezhdunarodnoy-konferentsii-sorucom-2017/1460/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="576" LastEditDate="2019-02-14T13:40:26.693" LastActivityDate="2019-02-14T13:40:26.693" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9184" PostTypeId="2" ParentId="9163" CreationDate="2019-02-14T11:40:57.670" Score="6" Body="&lt;p&gt;Lots of problems using sign and overflow flags on Z80 for comparing signed numbers could be overcome in the following way:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just invert sign bits of both numbers prior to comparison, which will turn them from [-128..+127] range to [0..255] range. Then compare them as unsigned, using just carry and zero flags. Et voilà, you're done!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your numbers are not big, i.e. the subtraction won't overflow signed range, all you need to do to just account for sign bit.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-02-14T11:40:57.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9185" PostTypeId="2" ParentId="9167" CreationDate="2019-02-14T17:07:54.443" Score="8" Body="&lt;p&gt;Because the Amiga is so flexible in its use of system software, what you hope to accomplish here becomes really pertinent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, doing anything useful is going to require the creation of a Task (or Process) to provide some form of user &amp;amp; hardware interaction. A Task can be managed using exec.library, and a Process brings in the possibility of high-level I/O, so uses dos.library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mentioned booting into Workbench. In a nutshell, starting the Workbench Process means loading workbench.libary, which depends on intuition.library (for windowing, menus, mouse, etc.) and on dos.library (for Process and File/Disk I/O). Then, those libraries naturally have their own dependencies, such as intuition.library using graphics.library. So it quickly becomes a matter of which system software services your Task or Process needs. Then, from the &quot;dependency graph&quot;, you can tell what you need to load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the &lt;a href=&quot;https://github.com/ChuckyGang/DiagROM&quot; rel=&quot;nofollow noreferrer&quot;&gt;DiagROM project&lt;/a&gt; as an example custom &quot;Kickstart ROM&quot; that boots the machine, it seems to use Exec, Dos, and Graphics. This leaves plenty of space in the standard-size ROM for the DiagROM app to do its thing. If it relied on Workbench, then more of the system software would be needed, and so there might not be space for the app itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many Amiga games get by on only Exec and the trackdisk.device. That's because they can use the device to load a custom boot block from the floppy disk, then their boot code can take over and control the hardware, bypassing all of the system software, if desired. So that's a very minimal set of dependencies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to boot into Workbench, then that's likely to require everything you would find in the stock Kickstart 2.0+ ROM's. Why? Because those ROMs are actually designed to provide everything needed by a &quot;minimal&quot; boot floppy that drops you into Workbench and allows you to run whatever App is on the floppy. This preserves the most space possible for user applications and data on an 880K floppy, with the system software only needing space for disk-loaded Dos commands (C: path) and startup scripts (S: path).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't need Workbench to run your Task (or Process), then you can strip out those things that Workbench requires, but that your application can do without. Even if you want to access all the hardware, you can do that with your own &quot;internal&quot; drivers, rather than pulling in whichever Library, Device, or Resource is used to access that hardware in Workbench - just as a game might not use graphics.library or gameport.device, though it obviously uses the associated hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In determining which system software services you actually need, the best thing to do is to prototype your app. If your Task or Process doesn't need to directly call a Library then you shouldn't need it as a dependency in ROM. If you do call a Library, then you need it and all of its dependencies.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-02-21T04:33:10.157" LastActivityDate="2019-02-21T04:33:10.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9186" PostTypeId="2" ParentId="234" CreationDate="2019-02-14T19:31:54.863" Score="6" Body="&lt;p&gt;FFS was only really meant for hard disks. Or more to the point media that had some form of hardware error correction before it hit the OS. Plus it made DMA easier I imagine too. OFS really was well thought out for the single track writes of Amiga floppies. The Amiga folks thought it all through when adding a zero cost floppy interface using the hardware at hand. They needed to have extra resilience in the filesystem when using every bit of the magnetic surface. The cut the data size down from 512 bytes in a logical sector for forward and backward links. This made it possible to recover files without reference to a home directory block. Enterprising hacker used this to link folders and files back on themselves to make them of infinite length. Ooopps. &lt;/p&gt;&#xA;" OwnerUserId="11953" LastActivityDate="2019-02-14T19:31:54.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9187" PostTypeId="1" CreationDate="2019-02-15T01:34:54.620" Score="6" ViewCount="1698" Body="&lt;p&gt;Was it possible to send data over the phone-line without a modem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Clarification&lt;/strong&gt;   &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Was it possible to send data over the phone-line without a modem,  either by connecting computers directly to the phone line,  or,  by connecting cassette-recorders/players directly to the phone line    &lt;/li&gt;&#xA;&lt;li&gt;It must not require the use of a commercially available modem,  but allow only a bit of extra wiring and maybe some resistors, and,  or,  audio-speaker and microphone .&lt;/li&gt;&#xA;&lt;li&gt;This is for the scenario where two people may want to share a program or data, and they don't want to waste money on the modem .&lt;/li&gt;&#xA;&lt;li&gt;I'm assuming the answer is no, or else people would not have bothered buying modems.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;br&gt;&#xA;  I suspect that either it may have worked for some computers and phone-lines, or,  that it may have been easy for the computer manufacturers to design the specifications so it would function well without a modem, however, I suspect it was strongly discouraged in order to avoid damage to computers or to phone-lines : &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Only commercially available modems were legally certified to be connected to the phone-line, not the computers themselves, to prevent people damaging the line .  &lt;/li&gt;&#xA;&lt;li&gt;And connecting a computer straight to the phone line may risk damaging not only the line, but also the computer .   &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Parameters:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It must not require the use of a commercially available modem,  and only a bit of extra wiring and maybe some resistors .  &lt;/li&gt;&#xA;&lt;li&gt;Initially, this question is not about the use of any external memory devices like cassette-recorders etc.&lt;/li&gt;&#xA;&lt;li&gt;Or if required, this question is about computers that had access to cassette-tape-recorders, not disk-drives,  but information about disk-drive machines may also be useful.&lt;/li&gt;&#xA;&lt;li&gt;For the common affordable home-computers in the years approximately 1978 - 1984 (a few years before, or after, is ok)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;NOTE&lt;/strong&gt; - By plugging the cable straight from the transmitting computer and into the telephone, the cable that the transmitting computer normally used to save to cassette-tape,  to the microphone-jack of the telephone (did that exist?).&lt;/li&gt;&#xA;&lt;li&gt;Or, by attaching an audio-speaker to the cable that the transmitting computer normally used to save to cassette-tape, and then placing that audio-speaker next to the telephone-microphone.&lt;/li&gt;&#xA;&lt;li&gt;(Theoretically, could you just have left a program on a cassette-tape-answering-machine, unless there were copyright problems in those days, or data quality loss because of the cassette tape)  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11744" LastEditorUserId="11744" LastEditDate="2019-02-16T01:54:32.860" LastActivityDate="2019-08-24T19:17:07.143" Title="Was it possible to send data over the phone-line without a modem?" Tags="&lt;hardware&gt;" AnswerCount="10" CommentCount="24" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9189" PostTypeId="2" ParentId="9187" CreationDate="2019-02-15T05:39:25.003" Score="30" Body="&lt;p&gt;&lt;strong&gt;TL;DR If it acts like a modem, it IS a modem.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3&gt;What is a modem?&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;a combined device for modulation and demodulation, for example, between the digital data of a computer and the analog signal of a telephone line.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;What are you trying to accomplish? &lt;em&gt;send digital data (a program) from one computer to another over the analog signal of a telephone line&lt;/em&gt;. So whether it is an older modem with an acoustic coupler or a Hayes Smartmodem or anything in between, &lt;strong&gt;including something you just come up with and experiment with (violating telephone company rules along the way)&lt;/strong&gt;, you are using a &lt;strong&gt;modem&lt;/strong&gt; when you transfer digital data over an analog phone line. An &lt;em&gt;analog&lt;/em&gt; tape interface, as was the case with all microcomputer tape drives of that era (mainframe tape drives were different) does the same thing - convert digital data to audio tones. Connect that tape interface to a phone line and it is now a modem. DTMF created from a computer is a fancy (and slow) way of converting digital data to audio tones - send it over a phone line to be decoded by a computer and you have created a modem.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-02-15T14:46:39.407" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="9190" PostTypeId="2" ParentId="9187" CreationDate="2019-02-15T11:00:37.213" Score="4" Body="&lt;p&gt;Yes, it's possible. For example, systems like the X10 fr home automation can be controlled via a phone line using DTMF (touch tone) dialing. While such systems are often designed to be used by humans, there have been instances of direct machine-to-machine communication too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the user could call the X10 receiver connected to an IBM compatible PC running the DOS based X10 software, and use DTMF tones to reprogram the system, altering timers and controlling devices, i.e. sending programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately these systems are so old that I can't find any good references on the net. We are talking early DOS days. The best I can do at the moment is &lt;a href=&quot;https://youtu.be/pm33KB2Th9M&quot; rel=&quot;nofollow noreferrer&quot;&gt;this LGR video&lt;/a&gt; with a demonstration of X10 control over the phone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: The DFTM encoder and DTMF decoder devices are not modems. Modem is short for &quot;modulator-demodulator&quot;, i.e. a device that incorporates both modulation and demodulation for two way communication. The X10 system is one way, one end is a pure modulator and the other is a pure demodulator, thus neither are modems.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2019-05-31T11:03:35.387" LastActivityDate="2019-05-31T11:03:35.387" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9191" PostTypeId="2" ParentId="9187" CreationDate="2019-02-15T14:23:57.223" Score="4" Body="&lt;p&gt;&lt;strong&gt;Not an answer&lt;/strong&gt; just points to be connected...&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Phone system means analogue dial up network for voice (sound) communication.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Sound is transmitted between terminals (phones) as electric signal&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Phone systems are designed to transfer electric signals with frequencies of 300 to 3000 Hz (*1)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There is no galvanic (direct) connection.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Audio transformers are used to separate lines and systems.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Their frequency response is designed to support this range&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Frequencies outside the range (300..3000Hz) will be dampened.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Filters may be applied in addition to guarantee these limits.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Phone systems do only offer a/this single (user side) channel with these properties.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;System signaling may be in or out of band (time or frequency diverted) but is not available for user side content transfer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Derivates points:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;No DC signal can be transmitted.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No level (voltage) based signal can be transmitted.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No current signal can be transmitted.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Only signals made up from frequencies within the limits can be transported.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In more than 100 years of application of these systems, many special to purpose devices have been created and named by their inventors and/or users. &#xA;So, Question: &lt;strong&gt;What would be the basic term for a devices that transforms user signals into a collection of frequencies for transmission and back?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Overall simplification, some systems may use slightly different. These limits are not just for interoperability between systems, but also to ensure higher level of transportation (like multiplexing on lines between interchanges)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-02-15T14:42:43.553" LastActivityDate="2019-02-15T14:42:43.553" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9192" PostTypeId="1" AcceptedAnswerId="9193" CreationDate="2019-02-15T14:40:09.737" Score="10" ViewCount="1071" Body="&lt;p&gt;What was the reason that the UCSD P-system filesystem was designed in such a way that it was limited to 77 files per volume?&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2019-02-19T14:30:21.327" Title="UCSD P-System: Why only 77 files per volume?" Tags="&lt;ucsd-p-system&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9193" PostTypeId="2" ParentId="9192" CreationDate="2019-02-15T15:19:16.137" Score="15" Body="&lt;p&gt;There is some information on the internals under ucsdpsys_fs in &lt;a href=&quot;http://ucsd-psystem-fs.sourceforge.net/ucsd-psystem-fs-1.22.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://ucsd-psystem-fs.sourceforge.net/ucsd-psystem-fs-1.22.pdf&lt;/a&gt;. Note, the default volume size was 140kb, i.e. one Apple floppy disk (see ucsdpsys_mkfs in the same PDF)  which puts the &quot;77 files and no subdirectories&quot; limits into context.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Directory Format&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Each directory entry is 26 bytes long. Thus, 78&#xA;  directory entries fit into 2kB (4 blocks). The remaining bytes are&#xA;  zero padded. The first directory entry describes the directory itself,&#xA;  the remaining 77 entries are used for regular files.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;ucsdpsys_text (in the same PDF) implies that the minimum size of a non-zero-length &quot;text file&quot; was 2kb, and hence 77 files would fill the default size file system.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2019-02-15T15:26:41.577" LastActivityDate="2019-02-15T15:26:41.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9194" PostTypeId="2" ParentId="9192" CreationDate="2019-02-15T15:20:45.067" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What was the reason that the UCSD P-system filesystem was designed in such a way[...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Quick Answer: Simplicity&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like with many early systems, it was all about making access easy by assuming certain structure.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The numbers are a result of the assumed default size entry size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's only one directory, no subdirectories and default size was to be 4 blocks of 512 bytes in length (2048 total). One entry has 26 bytes. Thus 78 entries are possible. The first describes the volume/directory itself, leaving 77 for other files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The filesystem itself could have worked with longer directories (and subdirectories as well, there is an according type) but AFAIK it was never used on an Apple at least.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now while the whole idea of the p-system was to provide a hardware-agnostic view of a virtual machine - not just the CPU, but disks (*1) and terminal I/O as well - selecting the default size of the directory might have been in fact hardware related. &lt;a href=&quot;/a/9196&quot;&gt;Leo B.'s Answer&lt;/a&gt; did remind me of the PDP-11 as eventually the first targets for the p-system, and the RX01 floppy system as disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RX01 was single-sided with 26 sectors of 128 bytes each per track (and 77 tracks). With the 512 byte per block (*2) abstraction, always four 128 byte blocks (*3) must be &lt;em&gt;blocked&lt;/em&gt;, resulting in six &lt;em&gt;and a half&lt;/em&gt; blocks per track (*4). With the first two blocks fix reserved for any machine specific purpose/OS loader (*5), the directory starts with the third block. This only leaves 3 more full blocks that could be read without moving the head - something quite slow, thus less than desirable on directory operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So, while not strictly hardware related, deciding on 4 blocks for the directory was a sensible decision considering the RX01.&lt;/strong&gt; As so often, a solution gets stuck with such shortcuts for quite a long time.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - To facilitate this, the only high level requirement for disk storage was a block size of 512 bytes and the ability for consistent enumeration from high level, while any kind of physical placement and blocking/deblocking was done in hardware related drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - While block and sector are often used interchangeably, Pascal did use it on purpose to distinguish between physical sectors, which may or may not have 512 bytes, and its logical blocks which always had 512 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Unlike many users assumed, the Apple II p-system didn't use a its own disk format. Only the file system was different. It also offered the ability to create disks which are at the same time DOS and Pascal media - and eventually DOS,PASCAL, ProDOS and CP/M on a single flip disk. But that's a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Yes, as result, not only block number to track/sector conversion was a bit weird, but also every 7th block was a slow read due to an intermediate track change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - This is done by convention. The first two blocks are (for most parts) ignored by the p-system. The only fixed structure is the first 26 bytes of the third block with the file system label - and the directory entries following.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, since the volume begin is arbitrarily calculated by the hardware driver, it's more of a convenience function, as the hardware driver could add an arbitrary offset before the file system's first block. Heck, there was even a field within the volume header to support this. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-02-19T14:30:21.327" LastActivityDate="2019-02-19T14:30:21.327" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9195" PostTypeId="2" ParentId="9187" CreationDate="2019-02-15T16:03:33.330" Score="14" Body="&lt;p&gt;&quot;Hello, Jeff?&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Yes?&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;I hear you got your new Radio Shack Model 3?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Yes!&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Is it on?&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Yup.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;type the number ten and a space, then type print quote hello world quote and press enter&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Okay now what?&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Type run and press enter&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Wow!&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry, I couldn't resist.&lt;/p&gt;&#xA;" OwnerUserId="5094" LastActivityDate="2019-02-15T16:03:33.330" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9196" PostTypeId="2" ParentId="9192" CreationDate="2019-02-15T16:40:17.180" Score="1" Body="&lt;p&gt;The UCSD P-system was originally developed on PDP-11, where the format of &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_floppy_disk_formats#DEC_8-inch_formats&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEC RX 8-inch floppy drives&lt;/a&gt; had 77 cylinders (tracks) and 26 sectors per track. &#xA;There are multiple ways to partition 2 Kb into directory entries, but the fact that the chosen number 77 for the directory entries matches the number of cylinders, indicates a probable attempt to simplify making most files cylinder-aligned for faster access.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2019-02-15T16:40:17.180" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="9197" PostTypeId="2" ParentId="9192" CreationDate="2019-02-15T17:24:27.803" Score="2" Body="&lt;p&gt;There are a few basic ways a floppy-drive OS can handle directories:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Reserve a fixed amount of space in both RAM and on disk to hold them.  This will make finding files fast, but will require that one reserve RAM to hold all the directory entries one may ever need.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Reserve a fixed amount of space on disk to hold them, but load them into RAM on demand.  This will make things slower and more complicated, but one may be more willing to go an extra 2K or so of disk space than an extra 2K of RAM.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Allow directories to be arbitrarily placed on the disk.  This will add even more complexity and make things even slower, but it will allow for directories of arbitrary size.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Require that directory blocks be stored sequentially at a fixed location, but allow the number of such blocks to vary as needed.  This could work, but on a system where files must be stored sequentially, it would either be necessary to allocate directory slots from the opposite &quot;end&quot; of the disk from the files, require that user guess how many directory entries will be needed before placing the first file, or perhaps have every other physical track numbered 9-26, while the others are numbered from 8 down to 1 and 35 to 27 (so that directories allocated from tracks 35 downward would be located near files that are allocated from track 1 upward).  Actually, I like that latter idea, but don't think anyone's ever done such a thing.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Limiting the number of directory entries makes things simpler and faster, provided there's no need to exceed the expected limits.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-02-15T17:24:27.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9198" PostTypeId="2" ParentId="4846" CreationDate="2019-02-15T17:42:32.387" Score="3" Body="&lt;p&gt;This looks like not so much a premise for a fictitious story as what we did in real life combining a Z80 with the 6502 in the Commodore C128.  There should be real life numbers for integrating to a DRAm bus with set cycle times, working around the video chip and also things like refresh.  &lt;/p&gt;&#xA;" OwnerUserId="11957" LastEditorUserId="276" LastEditDate="2019-02-15T18:33:39.037" LastActivityDate="2019-02-15T18:33:39.037" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9199" PostTypeId="1" AcceptedAnswerId="9201" CreationDate="2019-02-15T19:13:32.857" Score="34" ViewCount="3668" Body="&lt;p&gt;I've always wondered why the &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_64&quot; rel=&quot;noreferrer&quot;&gt;Commmodore 64&lt;/a&gt; had discrete keys dedicated for the ← and ↑ symbols.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I remember correctly, they weren't used in BASIC at all, and were not very useful for drawing, either, since right and down arrows were not part of the keyboard symbols.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why were they put on the keyboard in the first place?&lt;/p&gt;&#xA;" OwnerUserId="6987" LastEditorUserId="851" LastEditDate="2019-02-16T22:45:41.707" LastActivityDate="2019-02-17T17:10:23.907" Title="Why did the C64 have ← and ↑ as dedicated keys?" Tags="&lt;history&gt;&lt;commodore-64&gt;&lt;keyboards&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9200" PostTypeId="2" ParentId="9199" CreationDate="2019-02-15T19:19:19.093" Score="18" Body="&lt;p&gt;The ← and ↑ symbols are remnants of an earlier version of ASCII.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:ASCII1963-infobox-paths.svg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/9/9f/ASCII1963-infobox-paths.svg&quot; alt=&quot;ASCII1963 table with ↑ and ← at 5E and 5F&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ← and ↑ have now been replaced with  &lt;code&gt;_&lt;/code&gt; and &lt;code&gt;^&lt;/code&gt; respectively.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="278" LastEditDate="2019-02-17T17:10:23.907" LastActivityDate="2019-02-17T17:10:23.907" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9201" PostTypeId="2" ParentId="9199" CreationDate="2019-02-15T19:49:15.510" Score="41" Body="&lt;p&gt;The ← and ↑ symbols were originally included in &lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII#History&quot; rel=&quot;noreferrer&quot;&gt;ASCII-1963&lt;/a&gt; as programming operators.  They were used in a number of programming languages at the time, but the only common usage left today is in Smalltalk where the &lt;a href=&quot;https://en.wikipedia.org/wiki/Underscore&quot; rel=&quot;noreferrer&quot;&gt;_&lt;/a&gt; and ^ characters which replaced them in ASCII-1967 can still be used for variable assignments and variable selectors, respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Commodore keyboards using this deprecated version of ASCII was already a bit of an anachronism at the time, but they weren't the only ones to do so.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80&quot; rel=&quot;noreferrer&quot;&gt;TRS-80&lt;/a&gt; also used this, as did the &lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Alto&quot; rel=&quot;noreferrer&quot;&gt;Xerox Alto&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="320" LastEditorUserId="851" LastEditDate="2019-02-16T22:45:54.330" LastActivityDate="2019-02-16T22:45:54.330" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9202" PostTypeId="1" CreationDate="2019-02-15T20:38:27.493" Score="4" ViewCount="248" Body="&lt;p&gt;I have a Sam Coupé and the last time I turn it on, i noticed a smell of components overheating.&#xA;After opening the power supply I came to the conclusion that is the resistance R1 (50ºc with IR thermometer). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I took the power supply to two technicians who measured the values in the components and the final output. Both said that everything was fine and that the resistance in question was made to warm up. However I'm worried about the situation because I had never noticed this smell before. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this heating really normal? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone with a Sam confirm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for the help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Tb0zi.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Tb0zi.jpg&quot; alt=&quot;Power Supply&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11959" LastActivityDate="2020-01-16T14:51:10.437" Title="Sam Coupé power supply heat" Tags="&lt;hardware&gt;&lt;power&gt;&lt;maintenance&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9203" PostTypeId="1" AcceptedAnswerId="9220" CreationDate="2019-02-15T21:13:44.977" Score="11" ViewCount="1855" Body="&lt;p&gt;Mode 7 on the BBC Micro is very different to the other seven display Modes (0-6).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the programmer's point of view, the BBC Micro's mode 7 looks like 'oh, there is also a character cell mode that saves memory', but from the BBC's viewpoint it was also about supporting the existing Teletext standard. From the hardware engineer's viewpoint it may also have been about using the existing, proven and mass-produced SAA 5050 chip, which not only provided a high-quality character display, but also a hardware implementation of Teletext features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It presumably also informed the color palette; according to a comment on the &lt;a href=&quot;https://stardot.org.uk/forums/viewtopic.php?f=41&amp;amp;t=11935&amp;amp;start=30&quot; rel=&quot;noreferrer&quot;&gt;Stardot forums&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I thought Steve or Sophie had mentioned in one of their talks that the PAL encoder basically came from the BBC.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So reusing the existing color generator circuit designed for Teletext TV sets; that makes sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to Wikipedia's article on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Mullard_SAA5050&quot; rel=&quot;noreferrer&quot;&gt;SAA5050 chip&lt;/a&gt; (used for Mode 7):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Full-screen resolution generated by the SAA5050 was 480×500 pixels, corresponding to 40×25 characters. Each character position therefore corresponded to a 12×20 pixel space. Internally each character shape was defined on a 5×9 pixel grid. This was then interpolated by smoothing diagonals to give a 10×18 pixel character, with a characteristically angular shape, surrounded to the top and to the left by two pixels of blank space. This gave a particularly stable and flicker-free arrangement on interlaced displays.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This also makes sense (well, except I'm not clear on how anything ever made interlace usable given how abominably it flickered when I tried it on the Amiga, but that's a separate question; I think the BBC Micro used progressive scan like other computers of the time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;While Mode 7 has an effective horizontal resolution of 480 pixles, the other modes have a horizontal resolution of 320 or 640. I would intuitively have expected 240 or 480 in a machine that incorporates the SAA 5050 as a core feature. Why choose 320/640 for the other modes?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Conjecture: By the time the BBC contract came into the picture, Acorn's engineers had already designed a bitmap video system based on 320/640 for the adequate and sufficient reason that this was the usual way of doing things. Given the very tight development schedule, it made more sense to accept a bit more manufacturing cost for two separate pixel clock circuits, than to redesign the bitmap video around the pixel clock for the 5050.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Alternative conjecture: Acorn wanted the micro to double as a business computer, for which an 80 column mode was highly desirable. The ideal would've been an 80 column character cell display, but in the absence of sufficient development time, they decided a 640-pixel bitmap mode would double as this while also having other uses.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Is either of those conjectures accurate, or is there another explanation?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10566" LastEditDate="2019-02-19T16:58:38.320" LastActivityDate="2019-08-14T16:18:23.100" Title="Why is the BBC Micro's Mode 7 so different to the other display Modes?" Tags="&lt;bbc-micro&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9204" PostTypeId="2" ParentId="9203" CreationDate="2019-02-15T21:33:44.430" Score="5" Body="&lt;p&gt;For the video modes &lt;em&gt;apart&lt;/em&gt; from MODE 7, the BBC Micro used a &lt;a href=&quot;http://8bs.com/inbbc.htm#IC2&quot; rel=&quot;noreferrer&quot;&gt;6845 CRTC&lt;/a&gt;, hence the familiar horizontal resolution factors. The SAA5050's display function were not used by the other MODEs.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-02-15T21:33:44.430" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9205" PostTypeId="2" ParentId="9187" CreationDate="2019-02-16T02:34:25.753" Score="2" Body="&lt;p&gt;In 1985, &lt;a href=&quot;https://archive.org/details/your-computer-magazine-1985-11/page/n101&quot; rel=&quot;nofollow noreferrer&quot;&gt;Your Computer&lt;/a&gt; magazine had a software download service called TELSOFT. Audio files of (I presume) recorded MODEM tones were played down the phone line in a continuous loop. It was supposed to be used with a MODEM and special software that you typed in, but I did not have a MODEM for my ZX Spectrum so I tried receiving it directly through the Spectrum's 'EAR' socket. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back then a toll call from New Zealand to the UK cost ~$10 per minute, and I wasn't sure how well my program would work, so I recorded the audio on a tape recorder connected to the telephone's receiver insert. I could then play the recording back as many times as I needed until I got the software working properly.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a few hours of debugging the software I finally managed to get a good data dump, only to discover that it was for a Commodore 64! I had forgotten that magazines took 3 months to get from the UK to New Zealand, so of course they were transmitting files 2 months ahead of what was in my magazine. :(   &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-02-16T02:34:25.753" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9206" PostTypeId="2" ParentId="9202" CreationDate="2019-02-16T02:56:19.307" Score="4" Body="&lt;p&gt;50 ºC is nothing for a 4 W power resistor, so the 'overheating' smell was probably coming from something else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As this power supply has a single-sided pcb (tracks on the bottom side only) I would examine all the joints and resolder any that look cracked or burnt. You might also consider testing the electrolytic capacitors for ESR and capacitance value, or just replace them anyway as a precaution.  &lt;/p&gt;&#xA;" OwnerUserId="4663" LastEditorUserId="4663" LastEditDate="2020-01-14T21:40:41.893" LastActivityDate="2020-01-14T21:40:41.893" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9207" PostTypeId="1" AcceptedAnswerId="9211" CreationDate="2019-02-16T07:47:24.860" Score="4" ViewCount="456" Body="&lt;p&gt;Early computers often had hardware support for decimal arithmetic. This was usually in the form of BCD, 1 decimal digit per 4 bits, e.g. the 6502 and Z80, tightly constrained by transistor count as they were, provided BCD support as a matter of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me that you could pack 3 decimal digits into each 10 bits, thereby getting e.g. 9 rather than 8 digits in a 32-bit word, with a couple of bits spare. I'm not sure an 8-bit CPU could implement fast arithmetic for this format, but I don't see any reason a 32-bit CPU shouldn't be able to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did any historical CPUs provide hardware support for this format? If not, why not?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="3290" LastEditDate="2020-05-28T21:31:49.503" LastActivityDate="2020-05-28T21:31:49.503" Title="3 decimal digits per 10 bits" Tags="&lt;hardware&gt;&lt;cpu&gt;&lt;binary-coded-decimal&gt;" AnswerCount="3" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9208" PostTypeId="2" ParentId="9207" CreationDate="2019-02-16T08:54:39.363" Score="2" Body="&lt;p&gt;The IBM floating point representation had a  hexadecimal exponent &amp;mdash; in other words, it used 4-bit units in the mantissa field. It was widely criticized for its &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_hexadecimal_floating_point#Precision_issues&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;wobbling precision&quot;&lt;/a&gt;. What you're proposing &amp;mdash; 10 bit wide mantissa units &amp;mdash; would be 2.5 times (or, from another point of view, 62.5 times) worse than that.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2019-02-16T08:54:39.363" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9209" PostTypeId="2" ParentId="9207" CreationDate="2019-02-16T09:26:26.333" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It is well-known that binary floating point is unsuitable for financial applications, because 0.1 is not exactly representable in binary.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's less the binary part, than floating point in general. Financial application want fixed precision. And they want to have exceptions handled according to established rules - rules not set by scientists, but accountants, and the tax office.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For this reason, early computers often had hardware support for decimal arithmetic. This was usually in the form of BCD, 1 decimal digit per 4 bits, e.g. the 6502 and Z80, tightly constrained by transistor count as they were, provided BCD support as a matter of course.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Historical it is called a packed format when two decimal digits are stored within a byte, as BCD refers to all representations of decimal numbers in a binary format. Of course, packing was made possible only with bytes made up from 8 bits, a combination made popular with the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360#Technical_description&quot; rel=&quot;noreferrer&quot;&gt;IBM /360&lt;/a&gt; (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before that bytes where, if present at all, made up from various number of bits, in many cases 6 (*2). For example the IBM 7090 stored six 6-bit characters in one 36 byte word. There was no difference between a BCD number and a character. Similar Univacs &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_1100/2200_series&quot; rel=&quot;noreferrer&quot;&gt;1100 series&lt;/a&gt; - here even offering the handling of six 6 bit characters/BCD (called sixth word) or 9 bit ones. The later sound like a candidate for the question, except operations where limited.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It seems to me that you could pack 3 decimal digits into each 10 bits, thereby getting e.g. 9 rather than 8 digits in a 32-bit word, with a couple of bits spare. I'm not sure an 8-bit CPU could implement fast arithmetic for this format, but I don't see any reason a 32-bit CPU shouldn't be able to.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Except, why should they do so? Unlike BCD, where handling is inherent decimal and packed BCD where storage density is increased by a simple shift operation, 9 bit 3 digit bytes do require decimal to binats conversion plus an adder structure made to roll over at 1000. 60 bit machiens like the CDC ones would have been great candidates, but they again did rather support 10 6 bit BCD per word than the 6 10 bit your format would have required.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did any historical CPUs provide hardware support for this format?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not that I can remember any. There where several 9 bit per byte machines, including mini computers, but none with an explicit 10 bit 3 decimal digit format.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If not, why not?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As usual, that's not a serious question to be asked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If at all, it must be seen in context with the development before the 360, BCD operations where done on 6 bit units. This means 54 of 64 combinations are unused (*3). With the introduction of an 8 bit byte and packed BCD, this was reduced by 1/3rd while keeping the simplicity of BCD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simplicity here means as well that transfer from decimal (ASCII, EBCDIC or punch card) and back was done in a straight forward fashion, using shift (multiplex) operations, not calculation of any kind. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same 8 bit byte could now as well hold a 7 bit character and doing away with clumsy 6 bit encoding without wasting much code space. So 8 bit per byte is a great compromize both ways (not to mention the usage of another power of two, which sounds total obvious to us nowadays).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The /360s packed format, BTW, included a sign, encoded in the least significant nibble. So 4 bytes did not hold 8 digits, but 7 plus sign. All operations on packed numbers did operate signed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - And that can get prety weired: CDC used for their 6600 series 60 bit words, divided into 12 bit bytes, each able to hold two 6 bit chars :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Not entirely correct, as some where used for sign and other special encodings.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-02-16T09:32:47.387" LastActivityDate="2019-02-16T09:32:47.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9211" PostTypeId="2" ParentId="9207" CreationDate="2019-02-16T15:09:46.657" Score="13" Body="&lt;h1&gt;Yes; it's called Chen-Ho encoding&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Theodore M. Hertz of Rockwell filed for a patent on a &lt;a href=&quot;https://en.wikipedia.org/wiki/Chen%E2%80%93Ho_encoding#History&quot; rel=&quot;noreferrer&quot;&gt;similar encoding&lt;/a&gt; in 1969.  The patent was granted in 1971.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Independently in 1971, IBM researchers Tien Chi Chen and Irving Tze Ho worked on encoding two decimal digits in 7 bits.  The company filed for a patent in 1973, citing Hertz' patent as prior art, which was granted in 1974.  In 1975, they generalized the technique to more decimal digits (including 10 bits for 3 decimal digits) and published the method in the &lt;em&gt;Communications of the ACM&lt;/em&gt;.  Starting in 2000, the technique began to be called &lt;a href=&quot;https://en.wikipedia.org/wiki/Chen%E2%80%93Ho_encoding&quot; rel=&quot;noreferrer&quot;&gt;Chen-Ho encoding&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to Wikipedia, it was actually used in some hardware:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In 1973, some form of Chen–Ho encoding appears to have been utilized in the address conversion hardware of the optional IBM 7070/7074 emulation feature for the IBM System/370 Model 165 and 370 Model 168 computers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In 2001, Michael F. Cowlishaw received a patent for a refinement to the method, called &lt;a href=&quot;https://en.wikipedia.org/wiki/Densely_packed_decimal&quot; rel=&quot;noreferrer&quot;&gt;Densely-Packed Decimal&lt;/a&gt;.  It is now part of the IEEE 754-2008 and ISO/IEC/IEEE 60559:2011 floating-point standards.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-02-16T15:09:46.657" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9212" PostTypeId="1" CreationDate="2019-02-16T19:27:36.340" Score="3" ViewCount="1852" Body="&lt;p&gt;I have a DOS program M10_SCR.COM that loads as a TSR and allows the use of fonts. It works with its own basic built-in fonts, so now I am trying to convert .ttf fonts into .fnt so I have more fonts to choose from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are instructions on how to convert .ttf to .fnt with FontForge at StackOverflow:&lt;br /&gt;&lt;a href=&quot;https://stackoverflow.com/questions/24529369/how-to-convert-ttf-to-fnt-with-fontforge&quot;&gt;How to convert TTF to FNT with Fontforge&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did successfully convert a .ttf font to .fnt, but it fails to load with M10_SCR. There are many options in FontForge that may be the cause of failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When running M10_SCR.COM with the converted font, it gives:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Error - wrong external font file size!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To troubleshoot, I tried loading one of M10_SCR's built-in fonts into FontForge. It gives these errors:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[dialog box: Bad magic number]&#xA;This does not appear to be a Windows FNT or FON file&#xA;[dialog box: Couldn't open font]&#xA;8x16FONT.FNT is not a known format (or uses features of that format fontforge does not support, or is so badly corrupted as to be unreadable)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I can't find any .fnt fonts on the Internet to try with M10_SCR for troubleshooting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why wouldn't a converted font work? How can I find out what the difference is? How can I get this to work?&lt;/p&gt;&#xA;" OwnerUserId="11966" LastEditorDisplayName="user8725" LastEditDate="2019-02-19T14:40:09.383" LastActivityDate="2021-04-11T17:14:55.037" Title="How to convert .ttf to .fnt for use with M10_SCR.COM DOS font driver" Tags="&lt;ms-dos&gt;&lt;font&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9213" PostTypeId="1" AcceptedAnswerId="9215" CreationDate="2019-02-16T20:11:17.310" Score="22" ViewCount="4767" Body="&lt;p&gt;I was surprised to note recently that the Sinclair ZX Spectrum used an internal speaker. I knew the BBC Micro used one, presumably because it was designed to be optionally used with a monitor which likely would not supply one, but as far as I know, the ZX Spectrum was always used with a TV set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that Sinclair designs were very heavily optimized for cost, why did the Spectrum go with an internal speaker instead of just using the one in the TV set and saving a small amount of money?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="535" LastEditDate="2019-02-18T10:12:42.383" LastActivityDate="2019-02-18T10:12:42.383" Title="Why did the ZX Spectrum use an internal speaker?" Tags="&lt;zx-spectrum&gt;&lt;sound&gt;" AnswerCount="3" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="9214" PostTypeId="2" ParentId="9213" CreationDate="2019-02-16T20:25:49.280" Score="21" Body="&lt;p&gt;Always hard to guess why something simple hasn't been done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of the Spectrum it might have been to save on component price. The modulator used is the same as for the ZX81, so Sinclair was for sure already at the optimum price point. On the down side it's a simple video modulator (*1) without a mixing stage for sound, after all, in its quest of maximum reduction the ZX80/81 did skip sound as well. Next to all other home computers (*2) of that era had sound and used the TV set. Without sound not only the sound circuit could be saved (*3), but more important money was saved on the modulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sinclair could have voted to use a modulator capable of adding sound to the Spectrum, but buying them would have started at a higher price point due lower (start) volume - or to add a cheap speaker on board and share buying power for components with ZX-81 production.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - In fact it's so simple, that they already had to add quite some analogue gears to make it work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - TI 99/4, Atari 400/800, Commodore VIC, C64, C16, Tandy CoCo, MSX (pick your favorite), eventually the majority of home computers did. The Apple II is a notable exception, but then again, it's a whole generation before home computers came.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Not much, as this could have been done with a single signal pin and maybe a driver transistor.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-02-17T10:37:26.973" LastActivityDate="2019-02-17T10:37:26.973" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9215" PostTypeId="2" ParentId="9213" CreationDate="2019-02-16T20:30:44.787" Score="40" Body="&lt;p&gt;I strongly expect that an RF modulator, which is needed to create the TV-style signal, would cost more if it had to handle sound too. A small speaker is very cheap, and often a useful device for debugging a circuit board or firmware. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Spectrum 128K+ did make sound output through the TV, and also had much more sophisticated sound hardware, with an &lt;a href=&quot;https://en.wikipedia.org/wiki/General_Instrument_AY-3-8910&quot; rel=&quot;noreferrer&quot;&gt;AY-3-8910&lt;/a&gt; sound chip. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-02-16T20:30:44.787" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9216" PostTypeId="2" ParentId="9212" CreationDate="2019-02-16T20:42:28.030" Score="6" Body="&lt;p&gt;I suspect that what you're dealing with here is two different file formats that happen to use the same filename extension, of &quot;.fnt&quot;. There has never been any mechanism to control the use of filename extensions on DOS or Windows, except for market pressure, and .fnt is a very obvious choice for fonts. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Windows &lt;a href=&quot;https://file.org/extension/fnt&quot; rel=&quot;noreferrer&quot;&gt;.fnt&lt;/a&gt; is pretty much obsolete, but it could contain vector or raster glyphs. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Metagraphics &lt;a href=&quot;https://www.metagraphics.com/metawindow/fonts/fnt-specs.htm&quot; rel=&quot;noreferrer&quot;&gt;.fnt&lt;/a&gt; is a bitmap format that certainly isn't the same as the Windows format, and probably isn't the one used by M10_SCR, since it seems designed for fonts of higher resolution than MS-DOS INT10 usually deals with. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;M10_SCR [.fnt] seems to be something else. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I can't find much about M10_SCR on the net, but it's a minimum of 22 years old, quite possibly considerably older. Windows' use of particular filename extensions wasn't considered significant by many DOS programmers in the late eighties and early nineties, since Windows didn't have much market share until the advent of Windows 3.0 in 1990, and didn't become dominant in the PC market until the mid-nineties. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-02-16T20:50:48.133" LastActivityDate="2019-02-16T20:50:48.133" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9217" PostTypeId="2" ParentId="9212" CreationDate="2019-02-16T22:26:10.483" Score="8" Body="&lt;p&gt;This is Morozov’s screen driver, available &lt;em&gt;e.g.&lt;/em&gt; from &lt;a href=&quot;http://cd.textfiles.com/simtelctc/disk1/SCREEN/MXXDRV10.ZIP;1&quot; rel=&quot;nofollow noreferrer&quot;&gt;SimtelNet archives&lt;/a&gt;. It uses a fairly typical font format for EGA/VGA fonts, namely a dump of the in-memory font data as loaded for the character generator in an EGA or VGA graphics adapter: 256 characters each formed of 8 to 16 bytes (depending on the number of lines in the font), each byte encoding a line of a character — so the font files’ size is always a multiple of 256, 2048 bytes for small fonts (as used in 80×50 mode on VGA), 3584 bytes for 14-line EGA fonts, 4096 bytes for 16-line VGA fonts... This doesn’t match any of the &lt;code&gt;.FNT&lt;/code&gt; formats available in other environments, such as Windows. I’m not sure whether there are any conversion tools available to produce appropriate fonts from TrueType fonts or other such formats; I don’t remember there being any in the 90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fonts for tools such as this were usually hand-drawn using dedicated font editing tools such as &lt;a href=&quot;http://cd.textfiles.com/garbo/PC/SCREEN/FONTED.ZIP&quot; rel=&quot;nofollow noreferrer&quot;&gt;Michael J. Mefford’s &lt;code&gt;FONTEDIT&lt;/code&gt;&lt;/a&gt; (originally &lt;a href=&quot;http://cd.textfiles.com/swheaven1/UTILITY/BESTOFPC.ZIP&quot; rel=&quot;nofollow noreferrer&quot;&gt;published in PC Magazine&lt;/a&gt;, later released as shareware), or Oliver Fromme’s &lt;code&gt;CAFE&lt;/code&gt; (my two personal favourites, which are unfortunately hard to get a hold of nowadays). You’ll find a number of fonts to try out, and font editing tools, in &lt;a href=&quot;http://cd.textfiles.com/simtelctc/disk1/SCREEN/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SimtelNet’s “screen” directory&lt;/a&gt;; look through &lt;a href=&quot;http://cd.textfiles.com/simtelctc/disk1/SCREEN/00_INDEX.TXT;1&quot; rel=&quot;nofollow noreferrer&quot;&gt;the index&lt;/a&gt; for details. I wrote a font-loading tool which supports a variety of formats, &lt;a href=&quot;https://github.com/skitt/loadfont&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;loadfont&lt;/code&gt;&lt;/a&gt;, although since it’s not a TSR it’s not as versatile as Morozov’s screen driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can convert bitmap fonts in a variety of formats (including Windows &lt;code&gt;.FON&lt;/code&gt; and &lt;code&gt;.FNT&lt;/code&gt;) to raw fonts using &lt;a href=&quot;http://www.seasip.info/Unix/PSF/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PSF Tools&lt;/a&gt;, which are designed around &lt;a href=&quot;https://www.win.tue.nl/~aeb/linux/kbd/font-formats-1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the PSF format&lt;/a&gt; commonly used for Linux console fonts. That provides access to a wide variety of font collections, and would solve your problem if TTF fonts can be rasterised to bitmap fonts.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-02-18T20:10:54.953" LastActivityDate="2019-02-18T20:10:54.953" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9218" PostTypeId="2" ParentId="2980" CreationDate="2019-02-17T00:42:41.083" Score="4" Body="&lt;p&gt;Here are the differences that I've managed to dig up:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;NES-CPU-02 - 2A03E/2C02E-0; 1985 copyright on PCB; VRAM and WRAM are NDIP-only; 3193 Non-A CIC; (This is the first one &quot;released&quot; in the USA, in the first 10,000? or so test release NES consoles, before wide release)&lt;/li&gt;&#xA;&lt;li&gt;NES-CPU-03 - unclear if this was even shipped, haven't seen reports of it in the wild.&lt;/li&gt;&#xA;&lt;li&gt;NES-CPU-04 - 2A03E/2C02E-0; 1986 copyright on PCB; VRAM and WRAM are NDIP-only; 3193 Non-A or 3193A CIC; some have a 74HC139 at U3 instead of 74LS139&lt;/li&gt;&#xA;&lt;li&gt;NES-CPU-05 - 2A03G/2C02G-0; 1986 copyright on PCB; VRAM and WRAM are NDIP-only; 3193A CIC (no other changes that I can see)&lt;/li&gt;&#xA;&lt;li&gt;NES-CPU-06 - 2A03G/2C02G-0; 1987 copyright on PCB; VRAM and WRAM are NDIP or DIP;&lt;/li&gt;&#xA;&lt;li&gt;NES-CPU-07 - 2A03G/2C02G-0; 1987 copyright on PCB; VRAM and WRAM are NDIP or DIP; (I can't see any electrical differences - these may be internal revision bumps?)&lt;/li&gt;&#xA;&lt;li&gt;NES-CPU-08 - 2A03G/2C02G-0; 1989 copyright on PCB; VRAM and WRAM are NDIP or DIP. This is probably because of an issue with Roland MT-32 roms from 1986 which lost their copyright protection briefly in 1995/1996.&lt;/li&gt;&#xA;&lt;li&gt;NES-CPU-09 - 2A03G/2C02G-0 or 2A07/2C07-0; 1987 copyright on PCB; VRAM and WRAM are NDIP or DIP; Has one resistor between CIC pin (data?) and cart connector to thwart some CIC STUN attacks&lt;/li&gt;&#xA;&lt;li&gt;NES-CPU-10 - 2A03G/2C02G; 1987 copyright on PCB; VRAM and WRAM are NDIP or DIP; Has two resistors between CIC pins (clock and data?) and cart connector to thwart more CIC STUN attacks, some later pcbs have a hand-added-at-factory diode or diodes to nearby GND vias as well to prevent the -5V attack;&lt;/li&gt;&#xA;&lt;li&gt;NES-CPU-11 - 2A03G/2C02G or 2A07[A]/2C07[A]; 1987 Copyright on PCB; VRAM and WRAM are NDIP or DIP; Has two resistors and two diodes between CIC pins, cart connector and GND to prevent CIC STUN and -5V attacks &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6467" LastActivityDate="2019-02-17T00:42:41.083" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9219" PostTypeId="2" ParentId="9213" CreationDate="2019-02-17T00:50:02.820" Score="11" Body="&lt;p&gt;Because of different TV sound IF frequencies around the world, modulating the sound on a subcarrier would mean different modulators would be needed in different regions. An internal speaker is cheaper and reduces the chances of sending the wrong unit to a different region. &lt;/p&gt;&#xA;" OwnerUserId="11968" LastActivityDate="2019-02-17T00:50:02.820" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9220" PostTypeId="2" ParentId="9203" CreationDate="2019-02-17T08:34:50.893" Score="15" Body="&lt;p&gt;The BBC Micro's specification was drawn up by the BBC (with some subsequent modifications). Computer manufacturers were invited to design a computer system that would meet that specification, and Acorn had an early prototype for their Proton computer that they were able to adapt to suit the BBC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.bbcbasic.co.uk/bbcbasic/beebspec.html&quot; rel=&quot;noreferrer&quot;&gt;specification&lt;/a&gt; includes:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Video display&lt;/strong&gt;: Either&#xA;  (a) an integral single line display of 40 characters (each built from at least 5 by 7 dots) and a modulated UHF output of the full screen (see below) or&#xA;  (b) an integral display of the full screen plus a modulated UHF output of the full screen or&#xA;  (c) a modulated UHF output of the full screen&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;A composite video output should be included.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The 'full screen' should consist of at least 24 lines of 40 characters (*preferably an option of 80 characters from the outset) of upper and lower case alpha-numerics and (colour) Teletext graphics. These should be capable of being freely mixed with (colour) medium resolution graphics of at least 200 horizontal points. The medium resolution graphics should be eraseable separately from the other displays.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The computer should either produce UHF colour signals at the time of purchase or be easily expaned to produce UHF colour signals. It must be designed with colour Teletext and colour graphics in mind.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;We can see here that the BBC requested the Teletext display, and also expressed a desire for 80 column displays. The requirements for graphics are fairly moderate: a minimum horizontal resolution of just 200 pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The display MODEs that Acorn implemented for the BBC Micro are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MODE 0: 640x256 graphics, 80x32 characters, 2 colours, 20kB RAM &lt;/li&gt;&#xA;&lt;li&gt;MODE 1: 320x256 graphics, 40x32 characters, 4 colours, 20kB RAM&lt;/li&gt;&#xA;&lt;li&gt;MODE 2:&#xA;160x256 graphics, 20x32 characters, 8 colours, 20kB RAM&lt;/li&gt;&#xA;&lt;li&gt;MODE 3: no graphics, 80x25 characters, 2 colours, 16kB RAM&lt;/li&gt;&#xA;&lt;li&gt;MODE 4: 320x256 graphics, 40x32 characters, 2 colours, 10kB RAM&lt;/li&gt;&#xA;&lt;li&gt;MODE 5: 160x256 graphics, 20x32 characters, 4 colours, 10kB RAM&lt;/li&gt;&#xA;&lt;li&gt;MODE 6: no graphics, 40x25 characters, 2 colours, 8kB RAM&lt;/li&gt;&#xA;&lt;li&gt;MODE 7: teletext, 40x25 characters, 8 colours, 1kB RAM&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note that the Model A variant shipped with only 16kB of RAM, so could only use MODEs 4-7. The 40x25 and 80x25 character resolutions were a common standard used by a number of existing computers.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC Micro used an MC6845 video address generator in conjunction with a custom graphics chip for generate MODEs 0-6. For Mode 7, the MC6845 drove the SAA5050 character generator, who's output was passed through the custom graphics chip to the display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Prior to the BBC/Proton, Acorn had designed and used three different display interfaces: two for their System range and one for the Acorn Atom.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The first System display was a &lt;a href=&quot;http://www.oddys.plus.com/Acorn/Eurocards/40x25_vdu_(teletext)_interface.html&quot; rel=&quot;noreferrer&quot;&gt;40x25 character Teletext VDU&lt;/a&gt;, which used an MC6845 and SAA5050 along with 1kB of video RAM in almost the same manner that MODE 7 on the BBC operates.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Later System machines used a &lt;a href=&quot;http://www.oddys.plus.com/Acorn/Eurocards/80x25_vdu_interface.html&quot; rel=&quot;noreferrer&quot;&gt;80x25 character VDU&lt;/a&gt;. These had a similar 6845-compatible address generator, and 2kB of RAM, but used a custom EPROM for the character generator.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Atom used an &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6847&quot; rel=&quot;noreferrer&quot;&gt;MC6847&lt;/a&gt; video display generator. This had built-in support for graphics modes, but they don't correspond to those used on the BBC Micro: the Atom used 64x64, 64x96, 128x96, 64x192, 128x192 and 256x192 resolutions, in a variety of colour ranges.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's therefore clear that the BBC didn't specify the exact graphics resolutions used in the BBC Micro, and neither did they come from an existing Acorn machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One final piece of the jigsaw comes from an &lt;a href=&quot;http://www.retroisle.com/others/acornbbc/Articles/sophie_wilson_interview.php&quot; rel=&quot;noreferrer&quot;&gt;interview&lt;/a&gt; Sophie Wilson gave in 2007. In it she states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Proton as originally conceived did not have the SAA5050 character generator (MODE 7) and teletext capabilities.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Teletext capability was part of the BBC's specification, and it would appear that Acorn met this requirement by integrating the SAA5050-based 40x25 System VDU with their existing Proton design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interview also says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;What did you think of the BBC Model B at the time, and - looking back - is there anything you'd change about it?&lt;/em&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The SAA5050 was a pain - expensive and different from the rest of the machine - but it did give a lot more memory for programs!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I would conjecture that the 320/640 horizontal resolution was part of Acorn's original design for the Proton, and as it exceeded the BBC's requirements (in all but Teletext support) it was used in the BBC Micro virtually as-is. As the Proton was not intended to use an SAA5050, there would have been no particular reason to use its 480 pixel horizontal resolution.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="499" LastEditDate="2019-02-25T15:40:48.807" LastActivityDate="2019-02-25T15:40:48.807" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9221" PostTypeId="1" CreationDate="2019-02-19T11:27:31.173" Score="12" ViewCount="573" Body="&lt;p&gt;A well known feature of Amiga is the ability to have multiple Intuition screens (ViewPorts in &lt;code&gt;graphics.library&lt;/code&gt; parlance) that coexist and can be laid out on the screen so that they overlap vertically. Additionally, the &lt;em&gt;screen depth&lt;/em&gt; buttons allow one to reorder the priority of each screen, and also allows for a &quot;screen switch&quot; effect (if you keep all screens to the top).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is possible because the generated video output parameters (resolution, where to fetch the bitplanes, color palette, etc...) can be reprogrammed at at any time, by virtue of the Copper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By 1985, it was already expected for an OS to provide for multiplexed video output (i.e. the ability for different programs to have graphical output at the same time), but pretty much every other OS went with the idea of overlapping windows, and nobody provided the option of independent screens, not even a simple implementation where one could just switch between them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;who came up with the idea of multiple screens as a OS feature?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;who came up with the idea of allowing screens to be dragged up and down?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;could it be that the original idea was to give each program its own screen, and little to none widget toolkit, and Intuition and overlapping windows came at a later phase in the development of the machine? (by later phase I mean when it was already decided that Amiga would become a desktop computer).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(yes, I know that Dale Luck wrote the &lt;code&gt;graphics.library&lt;/code&gt;, but I'm wondering who took the final design decision to go with screen as a UI feature).&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="11916" LastEditDate="2019-04-07T12:32:12.413" LastActivityDate="2019-04-07T12:32:12.413" Title="Who invented scrollable screens in Amiga?" Tags="&lt;history&gt;&lt;amiga&gt;&lt;gui&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9222" PostTypeId="1" CreationDate="2019-02-19T11:44:39.183" Score="6" ViewCount="1225" Body="&lt;p&gt;How can you attach a CD-ROM drive to an Amiga 500?&lt;br&gt;&#xA;Will any external SCSI drive do?&lt;br&gt;&#xA;Are drivers necessary and available?&lt;/p&gt;&#xA;" OwnerUserId="11986" LastEditorUserId="11916" LastEditDate="2020-01-03T18:26:26.357" LastActivityDate="2020-05-05T22:57:13.987" Title="Attaching a CD-rom drive for Amiga 500" Tags="&lt;amiga&gt;&lt;cd-rom&gt;&lt;amiga-500&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9223" PostTypeId="2" ParentId="9222" CreationDate="2019-02-19T17:05:11.140" Score="11" Body="&lt;p&gt;A stock Amiga 500 doesn't come with any expansion port that would take a standard CD ROM drive (or hard disk) directly. Storage extension is limited to  external floppy drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The option of the day was to obtain an &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_A570&quot; rel=&quot;nofollow noreferrer&quot;&gt;A570&lt;/a&gt; &lt;sub&gt;1&lt;/sub&gt;, a rather bulky interface that fitted to the A500 expansion port, which contained quite a bit of circuitry (DMA, ROMs containing the new drivers, option for memory expansion, CD audio circuitry and a CDTV compatible expansion bus) to connect to a &lt;strong&gt;proprietary&lt;/strong&gt; Mitsumi CD ROM drive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other option was the A590, a similarly bulky piece of kit that contained an XT hard drive, but also an external SCSI interface that could be used to connect a (SCSI, obviously) CD ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of the original expansions are particularily interesting options today: CD ROMs are mechanical, and tend to fail over time, replacement proprietary Mitsumi drives, SCSI hard drives and SCSI CD ROM drives are increasingly hard to come by, and (matter of taste), the interfaces look tremendously ugly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays, I would probably look out for the following Accelerator and memory expansion boards:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://sordan.ie/product/583/turbo-card-hc533-33mhz-8mb-ram-ide-amiga-500/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sordan HC533&lt;/a&gt; provides an IDE interface that should be able to connect to standard, relatively modern, IDE CD ROM drives.&lt;/li&gt;&#xA;&lt;li&gt;Another board would be the &lt;a href=&quot;https://retro.7-bit.pl/?lang=en&amp;amp;go=projekty&amp;amp;name=wicher500iex&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wicher 500i&lt;/a&gt; with a feature set similar to the above&lt;/li&gt;&#xA;&lt;li&gt;A pure hobbyist's project seems to be the &lt;a href=&quot;http://www.mkl211015.altervista.org/ide/ide68k.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;IDE68k&lt;/a&gt; project - Not sure if that is still obtainable/maintained, however&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These boards have the advantage that they basically convert the A500 to an (optionally boosted and memory-expanded) A600 with an IDE interface - the software seems to be compatible. Thus, you can also easily add a relatively cheap IDE hard drive or (via another adapter) a CF card.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Even if this was only available &lt;em&gt;after&lt;/em&gt; the A500 had already been discontinued, and did only work with the A500, which led to the interesting fact that when the CDROM drive was launched, Commodore did no longer offer a computer to connect it to...&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-02-20T11:43:30.877" LastActivityDate="2019-02-20T11:43:30.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9224" PostTypeId="1" CreationDate="2019-02-19T19:31:29.247" Score="5" ViewCount="650" Body="&lt;p&gt;I was playing around with an emulated Apple /// and while looking at the color demo I noticed that unlike the Apple ][, the /// did not implement red as one of its supported colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ignoring strange color systems like CGA or &quot;close implemented&quot; ones like the VIC (II) chips, I find it puzzling that a system wouldn't support red as a color: not only should it be relatively easy from the NTSC standard (given how every raster is made up of Red/Green/Blue), but also since color on the /// was mostly driven through an RGB interface which I presume was digital and would have supported red (e.g. EGA should be close..?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea why red wouldn't have been supported?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2019-02-20T11:23:42.060" Title="Why did the Apple III not support the color red?" Tags="&lt;color-display&gt;&lt;apple-iii&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9225" PostTypeId="2" ParentId="9224" CreationDate="2019-02-19T20:21:05.207" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I was playing around with an emulated Apple /// and while looking at the color demo I noticed that unlike the Apple ][,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, as the Apple II also didn't do red, just orange.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple II colours were black, green, purple and white plus blue and orange when shifted (*1),&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;the /// did not implement red as one of its supported colors.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While in Apple II mode, the AIII supported the same resolutions and colours as the AII - and as the A2 doing so only with NTSC encoding.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I find it puzzling that a system wouldn't support red as a color: not only should it be relatively easy from the NTSC standard (given how every raster is made up of Red/Green/Blue),&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Erm, you seem to be mixing up several independent issues here. NTSC is an encoding scheme to transport colour information as a single channel using a phase shift, while RGB is an encoding using three different, independent channels. NTSC in turn is &lt;em&gt;not&lt;/em&gt; an RGB signal (*2). Further the use of three (or more) colour sections (and guns) in a colour CRT is neither related to a signaling scheme nor the way these colours are generated by the source.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but also since color on the /// was mostly driven through an RGB interface which I presume was digital and would have supported red (e.g. EGA should be close..?)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again no. The Apple III doesn't use a 3 colour RGB scheme, its designers even went a step further and implemented a clean 4 bit digital interface. The video logic loads one nibble per pixel into the output buffer, where an &lt;em&gt;external&lt;/em&gt; colour encoder can use this (in addition the the sync signal) to generate any picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What colours an Apple III screen shows is encoded within the monitor, &lt;em&gt;not&lt;/em&gt; the computer&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get the 4 bit digital signal into an RGB signal an encoder may be built from a simple resistor network as shown in the Apple III Owners Guide:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rqMGQ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rqMGQ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By using this encoder the colours should look much like the (BASIC) manual names them:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0bbxX.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0bbxX.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As with any system where the display interprets the data, alternate interpretations are possible - &lt;a href=&quot;http://www.apple3.org/Documents/Schematics/ConsortiRGB.png&quot; rel=&quot;noreferrer&quot;&gt;like this&lt;/a&gt; with the ability to tune colour levels - or one with just 4 resistors, that would producing eight different colours with two levels by simply using the lower 3 bits as colour and the top most as intensity. Now including a clear red ... or make up whatever table you like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the B&amp;amp;W output these 4 bits are added by a resistor array (*2) into a 16 level grey scale signal. Similar for NTSC, except here the colour comes from an A2 alike encoding where &lt;em&gt;any&lt;/em&gt; 4 bit value unlike zero will produce the full intensity (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, in A2 mode it outputs an NTSC signal exactly like the A2, in A3 mode a 4 bit full digital signal is output and interpreted by the monitor ... much like with today's displays.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - See &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6271/what-determines-the-color-of-every-8th-pixel-on-the-apple-ii/6274#6274&quot;&gt;this answer&lt;/a&gt; for a more detailed description.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - And mixed with the sync signals as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Well, it's a bit more complex than that - or better it's simple, but rather complicated to explain. It all revolves of encoding the 4 bits into two NTSC 'clock' lines with by an 74LS153 mux controlled by the 7MHz colour signal and its 3.5MHz 'brother'. A look at the &lt;a href=&quot;http://www.apple3.org/Documents/Schematics/Video%20Logic.jpg&quot; rel=&quot;noreferrer&quot;&gt;video encoding circuit&lt;/a&gt; may help.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2019-02-20T11:23:42.060" LastActivityDate="2019-02-20T11:23:42.060" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9226" PostTypeId="1" AcceptedAnswerId="9636" CreationDate="2019-02-19T22:33:28.910" Score="5" ViewCount="149" Body="&lt;p&gt;I want to tinker a bit with Microsoft Mail for AppleTalk, Version 3.1. I installed the System Extensions, they get loaded and the server itself shows up in the chooser with it's serial number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To administer the server, I need to log in as some kind of administrator. Different sources (also alert dialog boxes when starting the administration program) hint to a &quot;network manager&quot; but it's not clear if this is an actual login or just a description. Besides that, I can't find a reference which default password to use. Not surprisingly, since I'm talking about Software from 1992.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does any of you dear readers remember how to sign into the server via the accompanying desk accessory, so I can utilize the admin program to set up stuff?&lt;/p&gt;&#xA;" OwnerUserId="10295" LastActivityDate="2019-04-09T19:35:42.563" Title="Microsoft Mail for AppleTalk" Tags="&lt;mac-os-classic&gt;&lt;microsoft&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9228" PostTypeId="2" ParentId="9221" CreationDate="2019-02-20T00:41:06.877" Score="9" Body="&lt;p&gt;R.J. Mical, the primary author of the Intuition GUI built into the Amiga OS firmware, is most likely responsible for the concept, but certainly responsible for the detailed design and coding.&lt;/p&gt;&#xA;&lt;p&gt;The functionality with screens that really set the Amiga apart from lesser systems of the time (MacOS Switcher, DOS TSR's) was that the screen was the main UI primitive that allowed application programs to fully utilize the multitasking kernel. This is because regardless of the type of graphical rendering the application required, it could co-exist with other multitasking applications by either sharing or uniquely owning a screen. The number of simultaneously active screens only being limited by RAM availability.&lt;/p&gt;&#xA;&lt;p&gt;As you noted, the Amiga's unique hardware capability of changing its display registers/parameters on any given scan line makes partially or completely overlapping screens easy to implement. But the piece that ties it together is really the System Gadgets, which are part of Intuition. These gadgets on the top border of the screen gives each screen a UI for reordering screens, and for sliding them up &amp;amp; down to reveal underlying screens. From AmigaOS Intuition manual:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;System gadgets are predefined gadgets provided by Intuition to support standard operations of windows and screens. System gadgets have a standard image and location in the borders of screens or windows. Intuition manages the operation of all system gadgets except the close gadget.&lt;/p&gt;&#xA;&lt;p&gt;The drag and depth gadgets are automatically attached to each screen in the system...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Without Intuition's System Gadgets, there is no consistent user metaphor for accessing multiple screens, and thus no in-built feature of the OS. So, while it is true that hardware and the low-level graphics.libary enable the feature, and preemptive multitasking makes it a practical and desirable feature, it's Intuition that ties it all together and provides the UI elements for both programmers and users to manage the screens.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-02-20T01:06:57.473" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9229" PostTypeId="1" CreationDate="2019-02-20T08:51:15.940" Score="10" ViewCount="478" Body="&lt;p&gt;Among the BESM-6 games there was a &quot;Moon Landing&quot; game; the only one available in both English and Russian versions. The binary survived but it is not runnable (yet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The description said that its Pascal source was acquired &quot;at an international computer exhibition&quot;, without mentioning its name or the year.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a slightly edited &lt;a href=&quot;https://en.wikipedia.org/wiki/GOST_10859&quot; rel=&quot;nofollow noreferrer&quot;&gt;GOST 10859&lt;/a&gt; dump of a part of the disk block which contains the English strings used by the game:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1125.0150:  МISSIОN СОNТRОL ОUТ.0000УОU ВLЕW IТ АGАIN. WЕLL,&#xA;1125.0160:   ТНIRD ТIМЕS ТНЕ СНАRМ.....000НОW DОЕS IТ FЕЕL Т&#xA;1125.0170:  О ТАSТЕ DЕАТН ТRЕЕ ТIМЕS....??NЕХТ ТIМЕ ВRING АL&#xA;1125.0200:  ОNG УОUR ВIВLЕ.000DО NОТ АРРLУ ТО NАSА FОR А JОВ&#xA;1125.0210:  . УОU’LL NЕVЕR МАКЕ IТ.0УОU’VЕ RUINЕD SIХ МISSIО&#xA;1125.0220:  NS NОW. ТURN IN УОUR SРАСЕSUIТ.00000.......SРLАТ&#xA;1125.0230:  .  NОТ SО GООD.  INЕХРЕRIЕNСЕ РЕRНАРS.0000000008&#xA;1125.0240:  МISSIОN СОNТRОL САLLING LUNАR МОDULЕ: МАNUАL СОN&#xA;1125.0250:  ТRОL IS NЕСЕSSАRУ FОR LАNDING. WНАТ IS УОUR ЕХРЕ&#xA;1125.0260:  RIЕNСЕ: 0 1 2(SТАNDАRD) 3 4 5 6 7 8 9(NО ЕХРЕRIЕ&#xA;1125.0270:  NСЕ) ?УОU МUSТ SРЕСIFУ А FUЕL RАТЕ ЕАСН 10 SЕСОN&#xA;1125.0300:  DS. RАТЕS МUSТ ВЕ ZЕRО ОR ВЕТWЕЕN 8 АND 200 LВS.&#xA;1125.0310:  РЕR SЕС.0000УОU НАVЕ 000 LВS ОF FUЕL. САРSULЕ WЕ&#xA;1125.0320:  IGНТ IS NОW 32500 LВS INСLUDING FUЕL. СОММЕNСЕ L&#xA;1125.0330:  АNDING РRОСЕD.0000FIRSТ RАDАR СНЕСК СОМING UР:  &#xA;1125.0340:  ТIМЕ(SЕС) АLТ(МILЕS + FЕЕТ) VЕLОСIТУ(FРS) FUЕL(L&#xA;1125.0350:  ВS)000DОN’Т WАSТЕ ТIМЕ ТRУING ТО ВURN АТ ТНАТ RА&#xA;1125.0360:  ТЕ.000FUЕL ОUТ АТ  SЕСОNDS.000ОN ТНЕ МООN АТ 000&#xA;1125.0370:   SЕСОNDS.000IМРАСТ VЕLОСIТУ ОF 00000 F.Р.S.00000&#xA;1125.0400:  FUЕL LЕFТ 00 LВS.000000↑РЕRFЕСТ LАNDING. УОU LUС&#xA;1125.0410:  КУ JЕТ JОСКЕУ.000000000(А GООD LАNDING, NОТ GRЕА&#xA;1125.0420:  Т, JUSТ GООD.0000000000)ВUСК RОGЕRS УОUR NОТ, ВU&#xA;1125.0430:  Т СОNGRАТULАТIОNS, УОU’RЕ DОWN.00000НЕАVУ СRАFТ &#xA;1125.0440:  DАМАGЕ, УОU МАУ NЕVЕR SЕЕ ЕАRТН АGАIN.000000000=&#xA;1125.0450:  ТНЕRЕ’S NОW А NЕW LUNАR СRАТЕR 00000 FЕЕТ DЕЕР.0&#xA;1125.0460:  РЕRFЕСТ RЕСОRD! NО FАIR USING САLСULАТING АIDS.0&#xA;1125.0470:  00000[NАSА WILL DЕDUСТ   $ FRОМ УОUR РАУСНЕСК ЕА&#xA;1125.0500:  СН WЕЕК00000FОR ТНЕ L.Е.М. УОU WIРЕD ОUТ.000000*&#xA;1125.0510:  FОR ТНЕ 0000 L.Е.М.’S УОU WIРЕD ОUТ.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It is not reflected in the English messages, but, according to the instructions in Russian nearby in the dump, entering &lt;code&gt;Tn&lt;/code&gt; at the fuel rate prompt, where n=1..9, switched to a shorter time interval rather than the default 10 seconds. &lt;code&gt;T+&lt;/code&gt; meant going back to the 10-second interval.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of the three &lt;a href=&quot;https://www.atariarchives.org/basicgames/showpage.php?page=106&quot; rel=&quot;nofollow noreferrer&quot;&gt;ATARI BASIC versions&lt;/a&gt; is an exact match.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Googling the failure messages (&quot;How does it feel to taste death three times&quot;, &quot;Next time bring along your Bible&quot;, &quot;Turn in your spacesuit&quot;) doesn't bring up anything relevant. Does anyone recognize the game?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Curiously, in the Russian translation there is a blunder: &quot;Turn in your spacesuit&quot; is mistranslated as &quot;Put on your spacesuit.&quot;&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2019-02-21T19:42:08.363" LastActivityDate="2019-02-21T19:42:08.363" Title="What is the origin of this version of the &quot;Moon Landing&quot; game?" Tags="&lt;identify-this-game&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9230" PostTypeId="1" AcceptedAnswerId="9233" CreationDate="2019-02-20T13:07:09.983" Score="15" ViewCount="2322" Body="&lt;p&gt;Many 8-bit processors, such as Motorola's &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6800&quot; rel=&quot;noreferrer&quot;&gt;6800&lt;/a&gt; and MOS Technology's &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502&quot; rel=&quot;noreferrer&quot;&gt;6502&lt;/a&gt; make use of a single pin to indicate to the rest of the system whether the CPU wishes to read from or write to a memory location (e.g. logic high = read, logic low = write). Other contemporary processors, including National Semiconductor's &lt;a href=&quot;https://en.wikipedia.org/wiki/National_Semiconductor_SC/MP&quot; rel=&quot;noreferrer&quot;&gt;SC/MP&lt;/a&gt; and Zilog'z &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80&quot; rel=&quot;noreferrer&quot;&gt;Z80&lt;/a&gt; used two pins, one each for read and write operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This difference lead to some interesting design combinations, such as Acorn's &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_System_1&quot; rel=&quot;noreferrer&quot;&gt;System 1&lt;/a&gt; computer, which used a 6502 CPU and National Semiconductor INS8154 I/O chip (originally designed for the SC/MP). The 6502's R/W pin was inverted and gated by the CPU clock to generate the separate NRDS and NWDS signals required by the INS8154.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can appreciate why it would be desirable to combine the read and write signals onto a single pin, especially as you wouldn't have more than 40 pins per chip. I don't see any clear advantages of keeping them on separate pins instead, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What reasons would CPU designers have for choosing these different approaches?&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-04-06T07:17:28.030" Title="Why did some CPUs use two Read/Write lines, and others just one?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;cpu&gt;&lt;design-choices&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9231" PostTypeId="1" AcceptedAnswerId="9232" CreationDate="2019-02-20T13:35:05.227" Score="13" ViewCount="1887" Body="&lt;p&gt;While going through the memoirs of a witness of the Holocaust in Germany, I stumbled upon the passage:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;there in Rudolfstadt we had a new &lt;strong&gt;holorydmachine&lt;/strong&gt; from the Americans - in the barn of a farmer - to calculate the salaries of the officers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It must have been around the time the war ended.&#xA;Also I think it had to be huge as it was not in a regular room but in a barn (at that time barns were at least 4m high, but normal rooms only 2,2m).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What are holorydmachines?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any information or hints are welcome, as this witness can no longer be questioned.&lt;/p&gt;&#xA;" OwnerUserId="11992" LastEditorUserId="780" LastEditDate="2019-02-20T14:55:04.130" LastActivityDate="2019-02-20T14:55:04.130" Title="What are Holorydmachines?" Tags="&lt;history&gt;&lt;hardware&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9232" PostTypeId="2" ParentId="9231" CreationDate="2019-02-20T13:56:04.787" Score="20" Body="&lt;p&gt;Apparently, you are looking for &lt;em&gt;Herman Hollerith&lt;/em&gt; and his &lt;em&gt;Tabular Machines&lt;/em&gt;. Hollerith was the first to use punched cards for data storage (there were punched cards and tape before, but were mainly used to control machines).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The US-American census of 1890 was the first to massively use punched cards for data storage and statistical calculation based on Hollerith's machines. (The pure storage mechanism later evolved into support for mechanical addition and subtraction of stored and counted figures, so a precursor of a mechanical computer). Such early machines were commonly called &quot;Hollerith-Maschinen&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Herman Hollerith's company, &lt;em&gt;The Tabulating Machine Company&lt;/em&gt; is one of the four roots of today's IBM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When looking for German IBM during WWII, you might want to read the Wikipedia article on &lt;a href=&quot;https://en.wikipedia.org/wiki/Dehomag&quot; rel=&quot;noreferrer&quot;&gt;DEHOMAG&lt;/a&gt; (&lt;strong&gt;De&lt;/strong&gt;utsche &lt;strong&gt;Ho&lt;/strong&gt;llerith-&lt;strong&gt;Ma&lt;/strong&gt;schinen &lt;strong&gt;G&lt;/strong&gt;esellschaft mbH)- So &quot;from the Americans&quot; is probably a bit far-fetched. During the war, IBM machines for Germany were produced under the DEHOMAG label (an IBM subsidiary) in Berlin-Lichterfelde and Sindelfingen (near Stuttgart).&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-02-20T14:49:34.030" LastActivityDate="2019-02-20T14:49:34.030" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9233" PostTypeId="2" ParentId="9230" CreationDate="2019-02-20T13:56:18.757" Score="35" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What reasons would CPU designers have for choosing these different approaches?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It depends on what the designers intended to mark a valid bus cycle, which is the 'leading' signal for decoding. In a more general way, it's the design view of the bus.&lt;/p&gt;&#xA;&lt;p&gt;Common ways (*1) are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;The 8080 way&lt;/strong&gt; - Marking a cycle by a one of several (*2) dedicated signals marking the type of cycle as well as its validity. RD and WR mark a read or write cycle as well as the validity of all other signals.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;The 6800 way&lt;/strong&gt; - A dedicated signal marks the validity of an access cycle, putting all other in context. VMA (&lt;strong&gt;V&lt;/strong&gt;alid &lt;strong&gt;M&lt;/strong&gt;emory &lt;strong&gt;A&lt;/strong&gt;ddress)  is used to indicate a cycle. R/W defines the direction of this cycle.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;The 6500 way&lt;/strong&gt; - Each and every clock cycle is a valid access cycle. No dedicated signal is needed, the clock signal can be used for this purpose. R/W defines the direction.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So while there is a basic difference in the way a bus is viewed between the 8080 and 6800 way, both need two signals to create a valid cycle and direction. The 8080 solution is more simple to decode in peripherals, especially if built up from general TTL, while the 6800 got a more abstract view. Both have the advantage that I/O and memory does not need to be clocked. And both offer support for DMA/bus-sharing, as well. The 8080 maybe more so than the 6800, as it includes a bus request protocol, while the 6800 only supports bus separation by tristating its signals.&lt;/p&gt;&#xA;&lt;p&gt;The 6500 way is a simplification of the 6800 bus design (*3). By making each and every clock cycle a bus cycle (and having the CPU output a valid direction and address during that), one pin on the CPU could be saved. On the downside, non-6500 peripherals had to incorporate the clock signal into their enable decoding (*4). Then again, the latter isn't as much of an issue as it also hits the other schemes at some point as well, depending on the peripheral used.&lt;/p&gt;&#xA;&lt;p&gt;Even more cumbersome is the fact that this simplification made DMA/bus-sharing  hard, requiring external buffers and logic (*5).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;It may be worth noting that there were many more variations that these three - as there were many more microprocessors.&lt;/p&gt;&#xA;&lt;p&gt;(For everyone's sanity I skip the bus state controlled cycles of an &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8008&quot; rel=&quot;noreferrer&quot;&gt;Intel 8008&lt;/a&gt; :))&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;From a historic point of view ,the 6800 way is the most versatile and similar methods are found many mini computers as well as other microprocessors - like &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TMS9900&quot; rel=&quot;noreferrer&quot;&gt;TI's 9900&lt;/a&gt; (here called &lt;strong&gt;MEM&lt;/strong&gt;ory &lt;strong&gt;EN&lt;/strong&gt;able).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Signetics_2650&quot; rel=&quot;noreferrer&quot;&gt;Signetics/Valvo/Philips 2650&lt;/a&gt;&lt;/strong&gt; was somewhat similar, but featured in addition to a valid address line (&lt;strong&gt;ADR&lt;/strong&gt;ess &lt;strong&gt;EN&lt;/strong&gt;able) a &lt;strong&gt;WR&lt;/strong&gt;ite&lt;strong&gt;P&lt;/strong&gt;ulse line, only triggered during write cycles - which were also announced by R/W being high. So a kind of mixture of 6800 and 8080 - satisfying both protocols for most parts. The CPU also featured a quite fine-tuned framework for bus sharing.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/National_Semiconductor_SC/MP&quot; rel=&quot;noreferrer&quot;&gt;Nationals SC/MP&lt;/a&gt;&lt;/strong&gt; takes this a step further by using a multi-master bus protocol by default. Only when the bus is granted a bus cycle is indicated by NENOUT, followed by an address strobe (NADS) and then followed by a write or read strobe (NWDS/NRDS) (*6). Using this, and taking the many internal cycles without bus access into account, two SC/MP could be coupled in a system with almost no performance penalty.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Speaking of weird, the &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/RCA_1802&quot; rel=&quot;noreferrer&quot;&gt;RCA/Intersil CDP1802&lt;/a&gt;&lt;/strong&gt; does feature a bus design somewhat like the 8080, with separate read and write lines (MRD/MWR); these do not validate other signals, but only indicate direction ... and to some extend 'alert' components ahead of time - 5 cycles for read and two for write. The transfer itself is initiated by the TPB signal validating the lower address half - which at that point is already valid for more than 3 cycles.&lt;/p&gt;&#xA;&lt;p&gt;In fact, it isn't really weird, but far far away from the simplified and abstract bus designs we are used to see later.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Even &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80&quot; rel=&quot;noreferrer&quot;&gt;Zilog's Z80&lt;/a&gt;&lt;/strong&gt; isn't as simple as many assume. Where the 8080 signalled the type of a bus cycle during the first clock of each machine cycle (marked by SYNC), the Z80 offers separate signals to main memory (MREQ) or I/O access (IORQ), resulting in 4 pins dedicated to framing and signalling where 3 would have done been sufficient. Looks like a less than optimal middle way to keep 8080 compatibility.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In this context &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8085&quot; rel=&quot;noreferrer&quot;&gt;Intel's 8085&lt;/a&gt;&lt;/strong&gt; changes/simplifies the 8080 bus, as now IO/M is a dedicated signal to be decoded during RD or WR. No more 8224/8228 combination needed. It's eventually the most simple form of the 'two signal' variation. Except now the address bus is multiplexed and a latch for the half transferred on the data bus (and signalled by ALE) is to be added. 40 is a fricking low number of pins anyway.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8086&quot; rel=&quot;noreferrer&quot;&gt;8086&lt;/a&gt; then continued along that way, combining both worlds: Separate RD/WR/IOM signals and multiplexed address bus with the multiplexed status signals of the 8080 ... plus even more creative encoding in maximum mode.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line, there were &lt;em&gt;way&lt;/em&gt; more than just two ways to access memory (and even more if I/O is separate).&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Processor names are used for simplicity of explanation and will not mark any invention or origin claim.&lt;/p&gt;&#xA;&lt;p&gt;*2 - For the raw CPU it's only two dedicated signals RD and WR, as the split into memory and IO is only communicated by THREE status signals multiplexed on the data bus during SYNC. This word needs to be latched before decoding. A function the 8228 Bus-Driver/System controller provided - which in a clean system would as well need by the 8224 clock generator combining its PHI1 and the CPU's SYNC into a usable strobe signal (STSTB). Quite a mess, understandable the Zilog changed that part - and so did the 8085.&lt;/p&gt;&#xA;&lt;p&gt;*3 - The 6500 development history becomes quite clear when looking at a minimum 6800 system, here Motorola suggests to combine PHI2 and VMA to create a generic &lt;strong&gt;E&lt;/strong&gt;nable signal. With the 6500 design as a simplified, cost reduced 6800 focused on embedded application, having this combination already by default and saving a signal to be outputted was a clear plus - not at least by freeing up pins to make the integrated clock generator work and save even more.&lt;/p&gt;&#xA;&lt;p&gt;*4 - On the plus side, complex 6500 I/O units will have a clock signal already present, which comes handy for any kind of timer/counter application.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Something various later spinoffs eased - all the way to the WDC65C02 reintroducing a 6800 compatible interface.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Unlike in the question implies, it's only as simple as with the 8080, when there is no other bus user and the CPU always gets its way ... and even on its own, there's the multiplexed bus and NWDS/NRDS being non-overlapping with the NADS address strobe.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-04-06T07:17:28.030" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9234" PostTypeId="2" ParentId="9221" CreationDate="2019-02-20T19:28:35.347" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;nobody provided the option of independent screens&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This was common on the Atari 8-bit machines, who's designers went on to make the Amiga and included many of the features from the original designs. In this case, one could change the base address of the screen buffer by setting a bit in the display list and then putting the 16-bit address in the following two bytes. This way you could have multiple screens in memory and change them about with a little bit fiddling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Atari did not have independent programs (ie, multitasking) to take advantage of this feature, but may programs did use this internally to make multiple displays, and at least one I recall, which my friend Oliver wrote, allowed the text and graphics display to be moved in real time using the joystick.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2019-02-20T22:40:25.893" LastActivityDate="2019-02-20T22:40:25.893" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9235" PostTypeId="2" ParentId="9221" CreationDate="2019-02-20T20:02:52.633" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;who came up with the idea of multiple screens as a OS feature?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This feature was likely present in earlier mainframe systems (no time now to figure that out). It existed in the microcomputer world in 1983 with &lt;a href=&quot;https://en.wikipedia.org/wiki/Multiuser_DOS#Concurrent_CP/M-86&quot; rel=&quot;nofollow noreferrer&quot;&gt;Concurrent CP/M-86&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2019-02-20T20:02:52.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9237" PostTypeId="2" ParentId="9230" CreationDate="2019-02-21T16:40:33.827" Score="4" Body="&lt;p&gt;There are three common control-signal patterns for devices that can read and write information:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The three-pin control pattern: /CS, /OE, and /WE.  Any time chip-select is high, all other pins will be ignored.  If chip-select and write-enable are low, /OE will be ignored and the device will write to the indicated address.  If chip-select is low, write-enable is high, and output enable is low, the device will read the indicated address and output it onto the bus.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The /CS,/WE pattern behaves as above, but with /OE strapped low.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The /OE,/WE pattern behaves as above, but with /CS strapped low.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If all devices use pattern #1, the preferred system design will be to feed some portion of the address bus into a decoder which can start generating a /CS signal for one device before the CPU has signaled that it's ready to actually perform a read or write.  The /OE and /WE signals can then be shared among all devices to indicate when a cycle should actually be performed.  The downside to approach #1 is that every device would need to dedicate pins to three control signals, making those pins unavailable for other purposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If all devices use pattern #2, and if speed isn't critical, the encoder can be gated so that it is disabled except during the active part of a memory cycle.  This can be accomplished most easily if the CPU has a single pin to indicate where the active part of a cycle is.  The downside of this approach compared to #1 is that it will be necessary to either delay decoding until the active part of a cycle, or else use a dedicated gate to prevent /CS from being activated until the active part of a cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Approach #3 may be useful in a system that contains many read-only devices and many write-only devices, and a limited range of address space to accommodate them.  In that case, it may be helpful to have one address decoder which is active only during reads and another which is active only during writes.  If there are a few peripherals that support both reading and writing, the /OE and /WE pins could be taken from the appropriate decoders.  For this approach, it's probably most convenient if the main CPU has separate read and write lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally favor having the CPU provide an R/W signal and a &quot;perform cycle now&quot; signal.  In some cases, it may be useful to have advance notice that the CPU is about to perform a write cycle (e.g. to disable any buffers that might be driving the CPU bus from an outside bus), but deriving such a signal is apt to be difficult if a CPU doesn't provide it.  Generating any other kind of memory signals if one has those ones in advance will be simple by comparison.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-02-21T16:40:33.827" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9238" PostTypeId="2" ParentId="7575" CreationDate="2019-02-21T17:13:07.340" Score="1" Body="&lt;p&gt;Even if one is using a bitmap mode, a routine to draw tile-based graphics that are aligned with byte boundaries can be much faster than one which isn't thus restricted.  Suppose one wants to draw an 8-pixel wide character at a location that is displaced by two pixels from an aligned position.  Code to do that would end up having to look something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;loop:&#xA;    lda (src),y&#xA;    asl&#xA;    rol temp&#xA;    asl&#xA;    rol temp&#xA;    ora (dest,x)&#xA;    sta (dest,x)&#xA;    inc dest&#xA;    lda temp&#xA;    and #3&#xA;    ora (dest,x)&#xA;    sta (dest,x)&#xA;    clc&#xA;    lda dest&#xA;    adc #rowSpacing&#xA;    sta dest&#xA;    dey&#xA;    bmi done&#xA;    bcc loop&#xA;    inc dest+1&#xA;    bcs loop&#xA;  done:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;By contrast, when drawing an aligned tile, the code would look like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;loop:&#xA;    lda (src),y&#xA;    sta (dest,x)&#xA;    dey&#xA;    bmi done&#xA;    lda dest&#xA;    adc #rowSpacing&#xA;    sta dest&#xA;    bcc loop&#xA;    inc dest+1&#xA;    bcs loop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Bearing in mind that a separate version of the shifting code would be needed for each of the eight different amounts by which bytes would need to be shifted, it should be clear that bit shifting graphics will be much more time consuming than showing bit-aligned times.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-02-21T17:13:07.340" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9239" PostTypeId="1" CreationDate="2019-02-21T21:30:14.877" Score="3" ViewCount="474" Body="&lt;p&gt;What's a good way to estimate the total number of 6502 or 8051 chips (or workalikes, pin-compatible or not, but not including software or FPGA emulators) ever manufactured or sold?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Added:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(To clarify, for the 8051, I'm asking about a estimate regarding the number integrated circuit devices that execute the original basic 8051 ISA directly using hardwired transistors dedicated at fabrication time for executing the 8051 ISA, or an inclusive proper superset.  Similar question for the 6502 ISA. Disregard differences in the originally documented as unimplemented instruction space.)&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2019-02-22T22:13:41.553" LastActivityDate="2019-03-06T13:18:09.923" Title="Total number of 6502s or 8051s ever manufactured or sold?" Tags="&lt;microprocessor&gt;" AnswerCount="2" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="9240" PostTypeId="2" ParentId="9239" CreationDate="2019-02-21T21:46:51.733" Score="11" Body="&lt;p&gt;Almost impossible to tell. Both CPUs have been sold by quite a lot of manufacturers in many variations - including knockoffs modified in some way to avoid royalties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One hint might be the claim of 5 to 10 billion (*1) on the &lt;a href=&quot;http://www.westerndesigncenter.com/wdc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;WDC site&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HNAwC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HNAwC.png&quot; alt=&quot;The legendary 65xx brand microprocessors with both 8-bit and 8/16-bit ISA’s keep cranking out the unit volumes in ASIC and standard microcontroller forms supplied by WDC and WDC’s licensees. Annual volumes in the hundreds (100’s) of millions of units keep adding in a significant way to the estimated shipped volumes of five (5) to ten (10) billion units. With 200MHz+ 8-bit W65C02S and 100MHz+ 8/16-bit W65C816S processors coming on line in ASIC and FPGA forms, we see these annual volumes continuing for a long, long time.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since WDC is nowadays the major licensor (*2) and still can only give it with such a huge uncertainty, I doubt anyone will be able to give a better one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it's safe to assume this as well for Intel ... except, here the numbers may be way higher. 8051 (and derivatives) have been in heavy use all around the world by major suppliers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - US Billion, Milliards to others, 10^9 for serious minded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - MOS/Commodore gone for good, most others as well, there is still RENESAS and Rockwell, except I'm not sure if they license the core at all.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-03-06T13:18:09.923" LastActivityDate="2019-03-06T13:18:09.923" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="9241" PostTypeId="1" AcceptedAnswerId="9245" CreationDate="2019-02-22T01:17:52.833" Score="3" ViewCount="376" Body="&lt;p&gt;I'm setting up a 486 PC (aiming for around 1994 or so) and I have the following device drivers set up in DOS 6.22:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;HIMEM.SYS&#xA;EMM386.EXE&#xA;ANSI.SYS&#xA;SBIDE.SYS&#xA;CTMOUSE.EXE&#xA;SMARTDRV.EXE&#xA;DOSKEY.COM&#xA;MSCDEX.EXE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm loading all these devices (including part of DOS itself) into High Memory and the MEM command is showing that the largest executable program size is 618 K, which I think means that DOS was successful in allocating all the drivers into upper memory, but I'm not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I understand loading things into high memory correctly, there are only a certain number of &quot;blocks&quot; available to do this, correct? And the order in which the drivers are loaded high (in AUTOEXEC.BAT and CONFIG.SYS) matters, because once a block is taken, the extra space is wasted within that block.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I know what the optimal order of loading these drivers should be?&lt;/p&gt;&#xA;" OwnerUserId="12001" LastActivityDate="2019-02-22T13:59:43.427" Title="Figuring out size of Device Drivers and where they are loaded in High Memory" Tags="&lt;ms-dos&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9242" PostTypeId="2" ParentId="9241" CreationDate="2019-02-22T08:15:10.830" Score="2" Body="&lt;pre&gt;&lt;code&gt;MEM /C /P&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Should show you what has been loaded into UMBs and what not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not all of your programs you think that should run in upper memory actually do, you can try permutating the load order in AUTOEXEC.BAT and CONFIG.SYS to find an order that may fit better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the days, I used to have a program &lt;code&gt;UMBINFO.EXE&lt;/code&gt; that showed more information about occupied UMBs (and possibly wasted space), but I can't find it anywhere.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2019-02-22T08:15:10.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9243" PostTypeId="1" CreationDate="2019-02-22T08:46:44.360" Score="7" ViewCount="460" Body="&lt;p&gt;Are there any (known) viruses for CP/M? Chronologically, CP/M machines fit into the time period of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Elk_Cloner&quot; rel=&quot;noreferrer&quot;&gt;first home computer&lt;/a&gt; viruses, starting with &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II_series&quot; rel=&quot;noreferrer&quot;&gt;other 8-bit computers&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the hardware independence, CP/M viruses could have spread quite successfully, and thinking about possible mechanism, a virus that attaches itself to an executable, runs when the executable is executed, infects a random file and then jumps to the real code is very well within technical possibilities. Even hiding the virus could be well supported by existing block padding of the filesystem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OTOH, bootable viruses are probably out of question, if we want to go beyond one architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am taking the definition of &quot;virus&quot; quite broadly here - trojans and worms are included, and of course trojans are perfectly possible under any OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question asks primarily about &quot;classic&quot; CP/M or MP/M, but CP/M-86 and other examples would be welcome, too (I imagine that technically a CP/M-86 virus would be doable in much the same way as the MS-DOS ones were).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried an extensive network search but came up with exactly nothing.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2019-02-23T11:21:38.867" Title="Viruses for CP/M?" Tags="&lt;cp-m&gt;&lt;malware&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9244" PostTypeId="2" ParentId="9243" CreationDate="2019-02-22T09:08:25.793" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;CP/M viruses could have spread quite successfully&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I doubt about that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A virus cannot infect every kind of file format but only files that contain code:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Executable files&lt;/li&gt;&#xA;&lt;li&gt;Other files that contain any kind of code (e.g. macros in office documents)&lt;/li&gt;&#xA;&lt;li&gt;File formats that can be manipulated in a way that an error happens when opening the file which causes the computer to execute some code - for example by forcing a buffer overflow&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In the 1970s and 1980s, file types that match criteria (2) and (3) were not used very often (if they existed at all) so a virus could only have spread using executable files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While home computer users were exchanging executable files (illegally copied games!) very frequently, I doubt that professional users (using CP/M) were exchanging executable files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After having read the comments, I'd like to extend my answer a bit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the times when computers had no network/modem/internet/... access, viruses could only spread widely in the following scenario:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some user starts an infected CP/M program&lt;/li&gt;&#xA;&lt;li&gt;The virus infects other CP/M programs on the user's computer&lt;/li&gt;&#xA;&lt;li&gt;The user gives some of these CP/M programs to a second user&lt;/li&gt;&#xA;&lt;li&gt;The second user gives some infected CP/M programs to a third user&lt;/li&gt;&#xA;&lt;li&gt;The third user gives some infected CP/M programs to a fourth user&lt;/li&gt;&#xA;&lt;li&gt;And so on ...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I already doubt that this scenario happened as often as the comparable scenario happened with C64 programs. (Note that a CP/M virus would probably not be able to infect non-CP/M programs on computers where CP/M is not the only OS - such as the Amstrad CPC, the Commodore 128 or some MSX machines.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also have to see that the actual process of infecting a file is much more unlikely in the case of a CP/M virus:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M computers were not hardware compatible at all. A program or virus could not directly access the hardware nor do anything else not officially supported by the operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, the only way a CP/M virus could infect another program is when the program is stored on a disk that had to be in the drive while the infected program is running. (Most CP/M versions did not support parts of the program staying in the RAM after the program has finished.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast, a MS-DOS or C64 virus could do things not officially supported by the operating system. They could stay in RAM after a program has finished (under MS-DOS this is even officially supported). When you insert a disk much later, it can infect the programs on the disk.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="8712" LastEditDate="2019-02-23T11:21:38.867" LastActivityDate="2019-02-23T11:21:38.867" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="9245" PostTypeId="2" ParentId="9241" CreationDate="2019-02-22T09:30:02.320" Score="11" Body="&lt;p&gt;You can see the details of everything loaded in memory using&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MEM /D /P&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;including device drivers etc. If you have Microsoft’s Manifest tool, you can use that to get a better idea of memory use too; &lt;a href=&quot;http://www.resoo.org/docs/dos/free_software/system.htm#sysinfutil&quot; rel=&quot;noreferrer&quot;&gt;many other tools&lt;/a&gt; exist to explore your system’s configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC 618 K is quite a good result with MS-DOS, and does indeed suggest that all drivers and TSRs are loaded high. To improve on that, you’d have to move some DOS data structures high, using a tool such as &lt;a href=&quot;http://cd.textfiles.com/simtel/simtel9510/disk2/DISC2/SYSUTIL/dosmax21.zip&quot; rel=&quot;noreferrer&quot;&gt;DOSMAX&lt;/a&gt; (or QEMM’s &lt;a href=&quot;https://en.wikipedia.org/wiki/QEMM#DOS-Up&quot; rel=&quot;noreferrer&quot;&gt;DOS-Up&lt;/a&gt;). MGDx has &lt;a href=&quot;http://www.mdgx.com/mem6.htm&quot; rel=&quot;noreferrer&quot;&gt;a nice page on the subject&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To optimise the memory footprint, you typically need to vary the load order, with the aim of loading larger programs first — larger not necessarily in terms of resident size, but in terms of load size, since the loaded device driver or TSR needs to fit entirely in an upper memory block before it goes resident. In most cases, for &lt;code&gt;.SYS&lt;/code&gt; or &lt;code&gt;.COM&lt;/code&gt; files (strictly speaking, for non-MZ files), the memory required to load them is the size of the file; for MZ files (&lt;code&gt;.EXE&lt;/code&gt; usually), it’s often the size of the file but not necessarily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other considerations. Some device drivers and TSRs can move themselves to upper memory, and should be allowed to do so (&lt;em&gt;i.e.&lt;/em&gt; loaded with &lt;code&gt;DEVICE&lt;/code&gt; instead of &lt;code&gt;DEVICEHIGH&lt;/code&gt;, and without &lt;code&gt;LOADHIGH&lt;/code&gt; for TSRs). If your upper memory is split into multiple blocks, you can tell &lt;code&gt;DEVICEHIGH&lt;/code&gt; and &lt;code&gt;LOADHIGH&lt;/code&gt; which block to use with the &lt;code&gt;/L&lt;/code&gt; parameter (&lt;code&gt;/L:1,10240&lt;/code&gt; will load into region 1 if it has at least 10240 bytes available, IIRC). In some situations, you might want to load a TSR earlier than &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt;, using &lt;code&gt;INSTALLHIGH&lt;/code&gt; in &lt;code&gt;CONFIG.SYS&lt;/code&gt; — this allows a large TSR to be loaded before certain device drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/6659/raffzahn&quot;&gt;Raffzahn&lt;/a&gt; says, it’s often a case of trial-and-error — at least with DOS 6 you can skip your boot files if things get too messed up for the system to boot. Since you’re running DOS 6.22, you can use &lt;code&gt;MEMMAKER&lt;/code&gt; to do a lot of this for you — it will try various combinations and place device drivers and TSRs into the appropriate blocks if necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another angle to investigate is to look for device drivers or TSRs providing equivalent functionality, but using less memory. You’re already using a small mouse driver; you might like &lt;a href=&quot;http://adoxa.altervista.org/shsucdx/index.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;SHSUCD&lt;/code&gt;&lt;/a&gt; instead of &lt;code&gt;MSCDEX&lt;/code&gt;, and &lt;a href=&quot;http://www.kegel.com/nansi/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;NNANSI&lt;/code&gt;&lt;/a&gt; instead of &lt;code&gt;ANSI.SYS&lt;/code&gt;. Using &lt;a href=&quot;https://www.4dos.info/&quot; rel=&quot;noreferrer&quot;&gt;4DOS&lt;/a&gt; instead of &lt;code&gt;COMMAND.COM&lt;/code&gt; will provide better control over upper memory use, and allow you to drop &lt;code&gt;DOSKEY&lt;/code&gt; (along with all the nice command-line features of 4DOS).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-02-22T13:59:43.427" LastActivityDate="2019-02-22T13:59:43.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9246" PostTypeId="1" AcceptedAnswerId="9247" CreationDate="2019-02-22T22:57:23.647" Score="12" ViewCount="932" Body="&lt;p&gt;I was flipping through an old copy of RUN magazine and came across an advertisement for a product called &quot;The Spartan&quot; produced by Mimic Systems.  I had forgotten about this product completely, but I remember lusting after one when I was in high school.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a copy of the advert:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kF4sP.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kF4sP.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All these years later, I have to wonder if this product really ever existed or if it was just vaporware?  I have never seen an actual Spartan in real life.  I have never seen one on any auction site I track.  Frankly, if it really exists, I want one for my collection!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any first hand experience with this device?  Did it actually exist, and if so, did it live up to it's claims?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2019-02-23T12:31:20.507" Title="Was the Spartan by Mimic Systems a real product?" Tags="&lt;commodore-64&gt;&lt;apple-ii&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9247" PostTypeId="2" ParentId="9246" CreationDate="2019-02-22T23:06:46.750" Score="14" Body="&lt;p&gt;It appears to have &lt;a href=&quot;https://dfarq.homeip.net/ode-to-the-spartan/&quot; rel=&quot;nofollow noreferrer&quot;&gt;really existed&lt;/a&gt;. Here's &lt;a href=&quot;http://mikenaberezny.com/hardware/c64-128/mimic-systems-spartan/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a page&lt;/a&gt; with a manual PDF and EPROM images, and &lt;a href=&quot;https://www.applefritter.com/node/229&quot; rel=&quot;nofollow noreferrer&quot;&gt;another&lt;/a&gt; with pictures and an account by the head of software development for the product. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From those pages, it seems to have sort of worked, since there was an Apple II clone in the box, but it was easy to mess up the disk drives, and it was never popular. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the comments, people sighted them being sold off cheap, and there's at least one still running. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-02-23T12:31:20.507" LastActivityDate="2019-02-23T12:31:20.507" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9248" PostTypeId="1" AcceptedAnswerId="9250" CreationDate="2019-02-23T07:42:47.137" Score="2" ViewCount="590" Body="&lt;p&gt;As I understand it, the PDP-11 has a 16-bit address space with a fully loaded system having 28k words (56k bytes) after reserving some of the address space for I/O, which means if instructions must be at even addresses, 15 bits are necessary to specify a code address in the general case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also seems to have a fixed 16-bit instruction format, which means there is no way to pack both an opcode and a general code address into one instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For short branches, this is no problem; according to &lt;a href=&quot;https://pages.cpsc.ucalgary.ca/~dsb/PDP11/InsSet.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pages.cpsc.ucalgary.ca/~dsb/PDP11/InsSet.html&lt;/a&gt; these simply supply a signed 8-bit offset to be added to the current program counter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But JMP and JSR presumably in general need to jump to anywhere in the program. How do they specify target address? The above document says&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Bits 5-0 designate the destination field that consists of addressing mode and general register fields. This specifies the starting address of the subroutine.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does that mean you have to load the target address into a register in a separate instruction first?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-17T09:38:21.960" Title="PDP-11 JMP and JSR - how was the target specified?" Tags="&lt;pdp-11&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9249" PostTypeId="2" ParentId="9248" CreationDate="2019-02-23T07:48:43.967" Score="2" Body="&lt;p&gt;Often, the JMP and JSR instructions used the &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-11_architecture#Program_counter_addressing_modes&quot; rel=&quot;nofollow noreferrer&quot;&gt;Program counter addressing mode&lt;/a&gt;: as a result, the next word after the instruction specified an absolute address or a PC-relative offset.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="576" LastEditDate="2019-02-25T08:42:14.980" LastActivityDate="2019-02-25T08:42:14.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9250" PostTypeId="2" ParentId="9248" CreationDate="2019-02-23T08:58:58.077" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But JMP and JSR presumably in general need to jump to anywhere in the program. How do they specify target address? The above document says&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Like with any other instruction addressing?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;Bits 5-0 designate the destination field that consists of addressing mode and general register fields. This specifies the starting address of the subroutine.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Keyword here is &lt;em&gt;'addressing mode'&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does that mean you have to load the target address into a register in a separate instruction first?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's one way. Or any other will do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Addresses in PDP-11 instructions are encoded as a 3 bit mode field (5..3) and 3 bit register field (2..0), the later specifying any of the registers to be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mode itself consists of one of 4 addressing modes (5..4), as there are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;00 - Register&lt;/li&gt;&#xA;&lt;li&gt;01 - Autoincrement&lt;/li&gt;&#xA;&lt;li&gt;10 - Autodecrement&lt;/li&gt;&#xA;&lt;li&gt;11 - Index&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The remaining one bit (3) indicating indirect (deferred in PDP-11ish).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of index, it's a two word instruction with the index to be added to the register as second word. Thus any 16 bit offset can be specified relative to any register - resulting in an arbitrary 16 bit address. For code relative addressing the PC (R7), makes a great base, isn't it? The result should be an even address. It might also be noteworthy, that register direct is not possible, as a register can not contain code :) (*1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The usage of R7/PC as register also results in additional modes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mode 2 (Autoincrement) becomes &lt;strong&gt;immediate&lt;/strong&gt; (Not useful for JMP/JSR) -  &lt;code&gt;ADC #label&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mode 3 (Autoincrement Indirect) becomes &lt;strong&gt;Absolute&lt;/strong&gt; - &lt;code&gt;JMP @#label&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mode 6 (Indexed) is the already mentioned &lt;strong&gt;Relative&lt;/strong&gt; -  &lt;code&gt;JMP label&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It must be noted, that these are not really additionally implemented modes, but rather side effects of using PC. They are merely nice fitting names for inflexible humans. That's why the assembler supports them with a dedicated syntax (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mode 0 - illegal&lt;/li&gt;&#xA;&lt;li&gt;Mode 1, &lt;strong&gt;Register Indirect&lt;/strong&gt;, jumps to wherever the register points - &lt;code&gt;JMP (R1)&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mode 3, &lt;strong&gt;Autoincrement Indirect&lt;/strong&gt;, jumps to address contained in a word addressed by the register and increments the register by two - &lt;code&gt;JMP @(R1)+&lt;/code&gt; (*3)&lt;/li&gt;&#xA;&lt;li&gt;Mode 6, &lt;strong&gt;Indexed&lt;/strong&gt;, jumps to the result of adding a 16 bit word to the register specified - &lt;code&gt;JMP 20(PC)&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mode 7, &lt;strong&gt;Index Indirect&lt;/strong&gt;, jumps to address contained in a word addressed by adding a 16 bit word to the register specified - &lt;code&gt;JMP @20(PC)&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of this is usually described in Section 3, &lt;em&gt;Adressing Modes&lt;/em&gt; of the processor Handbook, or section 5 of the MACRO-11 manual. I guess the site you're citing doesn't explain it in detail as it's so fundamental that they (like man other) assume that one checking up encoding knows about.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9248/pdp-11-jmp-and-jsr-how-was-the-target-specified#comment29633_9250&quot;&gt;Wilson mentions&lt;/a&gt;, some PDP-11 variants may allow, under special circumstances, code to reside in a register - still, even these CPUs issue an &lt;em&gt;'Illegal Instruction'&lt;/em&gt; trap when a 'normal' program tries to execute a JMP or JSR in with mode 0 (See &lt;a href=&quot;http://www.bitsavers.org/pdf/dec/pdp11/handbooks/PDP1120_Handbook_1972.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;p.98 of the PDP-11/20 manual&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Another great example for the difference between Assembler and Machine-Code. Assembler operates on an abstract level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Very handy to build some kind of threaded code structure - did anyone say FORTH?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-17T09:38:21.960" LastActivityDate="2020-01-17T09:38:21.960" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9251" PostTypeId="1" AcceptedAnswerId="9268" CreationDate="2019-02-23T10:58:10.593" Score="8" ViewCount="565" Body="&lt;p&gt;While debugging uart on some microcontroller board, I've made a simple firmware that simply responds on every byte received dumping that byte in HEX like &quot;0x**&quot;. Then, using different terminal emulators in linux, I've found that there are many different escape encodings for the following keyboard keys:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for F1..F5:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&quot;\033[[&quot;+'A'..'E' in linux text console&lt;/li&gt;&#xA;&lt;li&gt;&quot;\033O&quot;+'P','Q','R','S' (for F1..F4 only) in different gui terminals like &lt;code&gt;mate-terminal&lt;/code&gt; and &lt;code&gt;xterm&lt;/code&gt;, also running from &lt;code&gt;screen&lt;/code&gt; or &lt;code&gt;tmux&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&quot;\033[11~&quot;..&quot;\033[15~&quot; in &lt;code&gt;putty&lt;/code&gt; (run in windows XP)&lt;/li&gt;&#xA;&lt;li&gt;&quot;\033[15~&quot; for F5 only in different gui terminals (&lt;code&gt;mate-terminal&lt;/code&gt;, &lt;code&gt;xterm&lt;/code&gt;), also in &lt;code&gt;screen&lt;/code&gt; or &lt;code&gt;tmux&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&quot;\033[16~&quot; for F5 when using &lt;code&gt;minicom&lt;/code&gt; in linux (that seems to recode &quot;\033[[E&quot; and &quot;\033[15~&quot; into that sequence)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;for BACKSPACE:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0x08 or 0x7F&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;for HOME/END:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&quot;\033[1~&quot;, &quot;\033[4~&quot; in text console, &lt;code&gt;putty&lt;/code&gt; and running from &lt;code&gt;screen&lt;/code&gt; or &lt;code&gt;tmux&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&quot;\033O&quot;+'H','F' in &lt;code&gt;mate-terminal&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&quot;\033[H&quot;,&quot;\033[F&quot; in &lt;code&gt;xterm&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&quot;\033[1~&quot;, &quot;\033O&quot;+'F' recoded by &lt;code&gt;minicom&lt;/code&gt; from gui terminals&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When not explicitly noted, I was using either &lt;code&gt;picocom&lt;/code&gt; or &lt;code&gt;socat&lt;/code&gt; to interact with &lt;code&gt;/dev/ttyUSB0&lt;/code&gt;. Those tools seem not to recode any codes generated by terminal emulator, unlike the &lt;code&gt;minicom&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the questions are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What historic computer systems are inherited in every listed encoding for that keyboard keys?&lt;/li&gt;&#xA;&lt;li&gt;What are the historic reasons (if any) for the &lt;code&gt;minicom&lt;/code&gt; to change F5 code as well as recode HOME/END?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-02-26T20:38:26.840" Title="Different escape codes for the same keyboard keys -- where did they come from?" Tags="&lt;terminal&gt;&lt;escape-codes&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9252" PostTypeId="2" ParentId="9248" CreationDate="2019-02-23T12:50:22.640" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It also seems to have a fixed 16-bit instruction format, which means&#xA;  there is no way to pack both an opcode and a general code address into&#xA;  one instruction.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can perhaps debate about which part is actually the 'instruction', but in reality, a PDP-11 instruction is one, two, or three words.  The first word has the opcode and (depending on opcode) one or two operand specifiers. Depending on the 'mode' and the particular register in the operand specifier, another word may be required in the instruction stream.  If the register is R7, the program counter, it's particularly interesting.  I won't bother to repeat the info that is already in other answers here and which can in any case be looked up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this respect, JMP and JSR are no different from most other instructions that must specify a memory address.  To my mind, the combination of mode/register specifier, and the generalization from having the program counter be just another general register, are a large part of the genius of the PDP-11 ISA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the programmer's viewpoint, to jump to a label FOO, one just writes &lt;code&gt;JMP FOO&lt;/code&gt;. That's a PC-relative jump (i.e., is conveniently position-independent within a code module).  The operand specifier will be mode 6, register 7. The second word of the instruction will be filled in by the assembler with the displacement (address relative to instruction word) of FOO.  There are use-cases where you'd prefer an absolute jump; &lt;code&gt;JMP @#FOO&lt;/code&gt; results in mode 3, register 7, and the second word contains the absolute address of FOO.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For short branches, this is no problem; (...) these simply&#xA;  supply a signed 8-bit offset to be added to the current program&#xA;  counter.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Branch instructions are in fact one of the exceptions to the mode-and-register arrangement. Instead of the usual operand specifier, they have a simple 'offset from program counter'. This conveniently and efficiently caters for the common case of branching within subroutines (with the occasional frustration when adding &quot;one more instruction&quot; turns out to be the last straw that breaks the branch-camel's back).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-02-23T14:55:51.547" LastActivityDate="2019-02-23T14:55:51.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9253" PostTypeId="2" ParentId="9251" CreationDate="2019-02-23T16:12:08.317" Score="7" Body="&lt;p&gt;Partial answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;General notes:  &lt;em&gt;ESC&lt;/em&gt; [ is &quot;control sequence introducer&quot;, &lt;em&gt;CSI&lt;/em&gt;.  &lt;em&gt;ESC&lt;/em&gt; O is &quot;single-shift-3&quot;, &lt;em&gt;SS3&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DEC VT200 terminals sent &lt;em&gt;CSI&lt;/em&gt; &lt;em&gt;n&lt;/em&gt;~ &lt;a href=&quot;https://vt100.net/docs/vt220-rm/table3-4.html&quot; rel=&quot;noreferrer&quot;&gt;for function keys F6 onwards&lt;/a&gt;, where &lt;em&gt;n&lt;/em&gt; = the F-key number plus 11 decimal. F1 to F5 were local only, but it is a reasonable extension to have them send similar sequences with &lt;em&gt;n&lt;/em&gt; = 12 to 16.  &lt;em&gt;n&lt;/em&gt; = 11 to 15 seems like an off-by-one error from this viewpoint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DEC VT100 terminals sent &lt;em&gt;SS3&lt;/em&gt; P,Q,R,S for four keys labelled PF1 to PF4 on the numeric keypad.  Probably VT200 too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DEC VT100s used &lt;em&gt;CSI&lt;/em&gt; 1 to 4 ~ for the so-called editing keypad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For PC-connected keyboards, of course, the keyboard sends scan codes that are mapped to character sequences by software, so there's plenty of room for latitude here.  It is not necessarily true that the PC software was emulating any actual terminal; it just required that the key-mapping software provided something that was potentially useful to application code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Backspace/delete was a common confusion on terminals of the day.  Sometimes a &lt;code&gt;&amp;lt;x]&lt;/code&gt;key sent backspace, sometimes it sent delete.  Software tended to declare one of those to be the appropriate character-delete operation.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The summary, then, is that many of these came in principle from DEC keyboards, but PC keyboards don't necessarily have the same key layouts, so the terminal emulators do a best-effort (and subjective) job of mapping the keys they need onto the keys they've got.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-02-23T16:12:08.317" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9254" PostTypeId="2" ParentId="9251" CreationDate="2019-02-23T17:57:56.390" Score="3" Body="&lt;p&gt;True terminals used to vary a lot in the code sequences they accepted for their control and code sequences they returned when a key was pressed.  And keyboards were less standardized than nowadays, so the keys available used also to vary a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programs and libraries (the best known is probably curses) which had to interact with several kinds of terminals used a database giving that information.  The database is still available &lt;a href=&quot;http://www.catb.org/~esr/terminfo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; if you really want to find out the origin of the code sequences used by today's terminal emulators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I won't do that research but just add that they tend to emulate the sequence of popular DEC VTxx series (whose structure has been standardized as &lt;a href=&quot;https://www.ecma-international.org/publications/standards/Ecma-048.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;ECMA-48&lt;/a&gt; -- there is an equivalent ISO standard, ISO/IEC 6429, but the ECMA one has the advantage of being available for free on the web; one sometimes use &quot;ANSI sequences&quot; either to refer to the ECMA-48 one, or as a more generic way to refer to control sequences), but different models in the series sometimes used different sequences.  Terminal emulator also sometimes code sequences having no historical sources for features having little historical precedent.&lt;/p&gt;&#xA;" OwnerUserId="5269" LastEditorUserId="5269" LastEditDate="2019-02-23T18:06:18.333" LastActivityDate="2019-02-23T18:06:18.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9255" PostTypeId="1" AcceptedAnswerId="9256" CreationDate="2019-02-23T22:29:18.753" Score="10" ViewCount="435" Body="&lt;p&gt;SNES games with the Super FX processor generally do not support special controllers or accessories such as the Multi Player 5 multitap, SNES Mouse, or Super Scope. &lt;em&gt;Yoshi's Island&lt;/em&gt;, for example, displays this error message when the console is turned on with such a device inserted:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This game is designed only to play with a normal controller. Please disconnect Mouse, Super Scope, etc. to begin playing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why do Super FX games have this limitation?&lt;/p&gt;&#xA;" OwnerUserId="7212" LastEditorUserId="7212" LastEditDate="2019-02-23T22:42:51.397" LastActivityDate="2019-02-23T23:16:14.590" Title="Why can't special controllers or accessories be used with Super FX games?" Tags="&lt;hardware&gt;&lt;snes&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="9256" PostTypeId="2" ParentId="9255" CreationDate="2019-02-23T22:29:18.753" Score="19" Body="&lt;p&gt;SNES cartridges equipped with the Super FX processor use significantly more power than normal game cartridges. If a Super FX game is used with special controllers or accessories, which can use more power than normal controllers, it is possible to overload the stock AC adapter.&lt;/p&gt;&#xA;&lt;p&gt;As such, with limited exceptions, Super FX games must check the accessories inserted into the console at startup and display an error message instead of starting the game if it finds anything other than a normal controller. From the &lt;a href=&quot;https://archive.org/details/SNESDevManual&quot; rel=&quot;noreferrer&quot;&gt;SNES development manual&lt;/a&gt;, book II, page 2-1-5 (via &lt;a href=&quot;http://www.smwcentral.net/?p=viewthread&amp;amp;t=17876&amp;amp;page=1&quot; rel=&quot;noreferrer&quot;&gt;this forum thread&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jLwVE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jLwVE.png&quot; alt=&quot;Super FX safety program requirement&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3&gt;1.5.7 — Current Consumption&lt;/h3&gt;&#xA;&lt;p&gt;A game pak which contains the Super FX is required to have a built-in safety program to prevent it from operating in excess of the maximum current rating of the AC Adapter. For example, a game pak which contains the Super FX can not be used with Multi Player 5 because this would exceed the maximum current rating. A program must be included within the game pak which will check accessory IDs and activate the Super FX only if an acceptable accessory is connected. If an accessory ID other than those acceptable is detected, a warning message must be displayed and the Super FX must halt.&lt;/p&gt;&#xA;&lt;p&gt;Some accessories may be used, depending upon the size of ROM and RAM included in the game pak and the Super FX operating frequency. [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7212" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-02-23T23:16:14.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9257" PostTypeId="1" AcceptedAnswerId="9259" CreationDate="2019-02-24T08:04:41.973" Score="8" ViewCount="732" Body="&lt;p&gt;I'm looking for Linux dd command equivalent for Amiga to make image of hard disk. TSGUI not work if disk have broken RDB. Do you know program which can make hard disk image on Amiga?&lt;/p&gt;&#xA;" OwnerUserId="11933" LastEditorUserId="11916" LastEditDate="2020-01-19T11:10:25.637" LastActivityDate="2020-01-19T11:10:25.637" Title="Create an Amiga hard disk image" Tags="&lt;amiga&gt;&lt;hard-disk&gt;&lt;disk-image&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9258" PostTypeId="2" ParentId="7756" CreationDate="2019-02-25T02:45:52.020" Score="2" Body="&lt;p&gt;You need to have a 8372A Fatter Agnus chip, and have to modify the mainboard to enable the 1mb chip ram mode. I am not really familiar with the A500+, but you can do a search to find out what needs to be done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On an A500 with a ver 5 mainboard, you need to modify JP2 by cutting the trace between the two bottom pads, and join the top and center pads with a small blob of solder. You also need to cut the trace going to a pin on the trapdoor (exram)and pin 32 of the gary chip. And have an a501 or equivalent in the door. That will enable the fatter agnus to 1mb chip ram.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen pictures where a switch was placed across the jp2 and the exram trace to enable and disable the 1mb mode.&lt;/p&gt;&#xA;" OwnerUserId="12008" LastEditorUserId="278" LastEditDate="2019-03-01T21:13:23.130" LastActivityDate="2019-03-01T21:13:23.130" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9259" PostTypeId="2" ParentId="9257" CreationDate="2019-02-25T07:13:15.137" Score="7" Body="&lt;p&gt;I successfully dumped data from disk to image. I used two programs from Aminet:&#xA;&lt;a href=&quot;http://aminet.net/package/disk/misc/xfs&quot; rel=&quot;noreferrer&quot;&gt;http://aminet.net/package/disk/misc/xfs&lt;/a&gt;&#xA;&lt;a href=&quot;http://aminet.net/package/util/cli/bcopy&quot; rel=&quot;noreferrer&quot;&gt;http://aminet.net/package/util/cli/bcopy&lt;/a&gt;&#xA;First need to mount DEV device from xfs and then run command:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;bcopy DEV:scsi.device,0 backup:seagate.hdf&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bcopy is compatible with xfs but working slow, I think is matter of way how it is copying data. I think there's better copy commands on Aminet. Standard copy command from AmigaOS is not compatible with xfs. It shows copy error after copying file. &lt;/p&gt;&#xA;" OwnerUserId="11933" LastActivityDate="2019-02-25T07:13:15.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9260" PostTypeId="1" AcceptedAnswerId="11952" CreationDate="2019-02-25T14:15:00.557" Score="15" ViewCount="5260" Body="&lt;p&gt;The use of audio cassettes for storing data for home computers was a great example of repurposing an existing invention. Cassettes were sold in a variety of capacities, and labelled with their audio capacity, e.g. a C60 cassette would hold 60 minutes of music.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cassettes sold for use with computers tended to have a far smaller capacity, typically 15 minutes or less. But while floppy disks were labelled by capacity in &lt;em&gt;bytes&lt;/em&gt;, data cassettes were still labelled according to their length (in &lt;em&gt;time&lt;/em&gt;). One reason for this is that different computers used different formats, so there was no universal figure to quote.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Kansas_City_standard&quot; rel=&quot;noreferrer&quot;&gt;Kansas City standard&lt;/a&gt;&lt;/em&gt; (or &lt;em&gt;Computer Users' Tape Standard&lt;/em&gt;) of the 1970s used a 300 baud data rate. After wrapping every 8 bits with a start bit and two stop bits, each byte uses 36.7ms on the tape, making for a raw capacity of ~27.2 bytes per second, or ~1.6 kilobytes per minute. A C15 cassette would therefore have a capacity of just under 24 kilobytes per side. Arranging data into blocks, or the addition of a file name or CRC checks in more advanced formats would reduce this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A shortcoming of the Kansas City standard was the low data rate, which meant long program load times, and so most home computers used their own, higher capacity formats instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to know how much data the user of a typical microcomputer of the 1980s could expect to store on their cassettes, for comparison with the more clearly stated capacity of floppy disks. As there are too many different formats to ask about in general, I'll narrow the question down to the highest capacity achieved by a commercially released home computer, to give a high-water mark to compare with. Answers in terms of &quot;X kilobytes on a C15 cassette&quot;, or &quot;X kilobits per second&quot; would both be acceptable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my (rephrased) question is: &lt;strong&gt;What was the highest capacity format used by a home computer to store data on an audio cassette?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-02-26T17:16:38.630" LastActivityDate="2019-08-07T19:35:01.573" Title="How much data could a home computer store on an audio cassette?" Tags="&lt;hardware&gt;&lt;cassette-tape&gt;" AnswerCount="6" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="9261" PostTypeId="2" ParentId="8105" CreationDate="2019-02-25T14:56:54.540" Score="2" Body="&lt;p&gt;Another important thing is cycle accuracy. &lt;strong&gt;Not every emulator is cycle-exact!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/1191/1981&quot;&gt;What exactly is a cycle-accurate emulator?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://emulation.gametechwiki.com/index.php/Emulation_Accuracy&quot; rel=&quot;nofollow noreferrer&quot;&gt;Emulation Accuracy&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Each emulator has a different level of accuracy. While it might seem unimportant, &lt;strong&gt;without it some games are impossible to play&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Let's take the case of Speedy Gonzales. This is an SNES platformer with no save functionality, and it's roughly 2-3 hours long. At first glance, it appears to run fine in any emulator. Yet once you reach stage 6-1, you can quickly spot the difference between an accurate emulator and a fast one: there is a switch, required to complete the level, where the game will deadlock if a rare hardware edge case is not emulated&lt;/p&gt;&#xA;&lt;p&gt;Or consider Air Strike Patrol, where a shadow is drawn under your aircraft. This is done using mid-scanline raster effects, which are extraordinarily resource intensive to emulate. But without the raster effects, your aircraft's shadow will not show up, as you see in the screenshot below. It's easy to overlook, especially if you do not know that it is supposed to be there. But once you actually see it, you realize that it's quite helpful. Your aircraft has the ability to drop bombs, and this shadow acts as a sort of targeting system to determine where they will land.—something that's slightly more difficult without this seemingly minor effect.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kYkC7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kYkC7.png&quot; alt=&quot;Air Strike Patrol screenshot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;p&gt;The screenshot below is a great example of a niche game. It's actually a very good platformer, but few people have heard of it. It's a great example of why just because most popular games can run decently with inaccurate emulators, accuracy still matters. You never know when that slightly-less-common favorite game of yours may run into a bug like this. In the below screenshots, you see a switch. When this switch is hit in any other emulator, the game deadlocks instantly. What is supposed to happen is demonstrated in the subsequent screenshots: the switch moves a block into the middle of an electrical field. It is required that this is done to complete the level, and thus, the game. At the time of this writing, bsnes is the only SNES emulator capable of fully playing this game.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jATZm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jATZm.png&quot; alt=&quot;Game screenshot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://arstechnica.com/gaming/2011/08/accuracy-takes-power-one-mans-3ghz-quest-to-build-a-perfect-snes-emulator/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Accuracy takes power: one man’s 3GHz quest to build a perfect SNES emulator&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For some others it might be still playable, but much more difficult or with some glitches.&lt;/p&gt;&#xA;&lt;p&gt;Another example is Chrono Cross. In the past when I tried it with different Play Station emulators, some features work in ePSXe but not in others and vice versa. For example some menu doesn't open or just open then close right away so you can't complete many tasks&lt;/p&gt;&#xA;&lt;h1&gt;See also:&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://youtu.be/jWZ7Q6U2x-c&quot; rel=&quot;nofollow noreferrer&quot;&gt;Timecop on ZSNES and bsnes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://youtu.be/oQZMVo_Fmrs&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pokémon glitches and emulation accuracy&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1981" LastEditorUserId="1981" LastEditDate="2021-02-07T04:03:13.367" LastActivityDate="2021-02-07T04:03:13.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9262" PostTypeId="2" ParentId="9260" CreationDate="2019-02-25T15:06:52.127" Score="6" Body="&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Well, with the question being edited to ask for kilobytes per second,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So my question is: What was the highest capacity format used on an audio cassette, in terms of kilobytes per second?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;the whole answer becomes rather simple (*1):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Divide the baud rate by the average number of bits a format used per data byte to get an average KiB/s value.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, it again comes down to the Baud number (see all the way down).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Original answer:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Cassettes used with computers tended to have a far smaller capacity, typically 15 minutes or less. But they were still labelled according to their length, not their data capacity. One reason for this is that different computers used different formats, despite an attempt in the 1970s to create a universal standard.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it wasn't. These cassettes featured nothing computer specific. They are simply music cassettes (*2), thus made to run in the same devices (cassette recorders) at the same speed,  4.7625 cm/s (or 1.875 inch/s), thus ~2.85 meter equals one minute, or 42.75m for a C15.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;That standard, the Kansas City standard (and the related Computer Users' Tape Standard)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;CUTS &lt;strong&gt;is&lt;/strong&gt; Kansas City (&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8099/whats-the-difference-between-kansas-city-tape-standard-and-cuts/8100#8100&quot;&gt;see this Question/Answer&lt;/a&gt;) - the naming just depends on what association was intended (or avoided). Kansas City if association with Byte magazine was OK, CUTS if not - or in the case of Processor Technology, because they defined it under that name. For more information see this Question/Answer.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;used a 300 baud data rate. After wrapping every 8 bits with a start bit and two stop bits, each byte takes 36.7ms of tape, making for a raw capacity of ~27.2 bytes per second, or ~1.6 kilobytes per minute.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Part of the failure of the Kansas City &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You wanted to state that CUTS wasn't a failure, as it had been adopted by many manufacturers and sold with millions of computers, right?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So my question is: How much data could these other formats fit on a 15-minute cassette?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Since there in an almost infinite number of formats and use cases, it would be way too broad to answer this. But there's a simple way to get close for machines you're interested in:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;Step 1:&lt;/em&gt; Multiply the &lt;strong&gt;baud rate&lt;/strong&gt; (as its bit/second) of the format in question by 900 (eliminating time and reducing it to the medium in question) to get a &lt;strong&gt;gross capacity in bits&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;Step 2:&lt;/em&gt; Divide that by the number of bits this format records per byte (like 10 for many) and you'll get the &lt;strong&gt;gross capacity in bytes&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;Step 3:&lt;/em&gt; Subtract the overhead and you'll get the &lt;strong&gt;net storage capacity in bytes&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Step 3 may be the most difficult, as block structure and length may depend a lot on what is stored. One large file or many smaller, each with their own headers. Similarly, how much space a user will leave between files to find them later on..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Writing one large block with next to no header will result in almost the gross capacity, while a recording like those used by Commodores, with small blocks, long headers and double recording (for program storage), will yield way less than 50% - with more than one program per tape easily as low as 20%. Since a tape can also store data as well as programs, and data may even be formatted in its own way, it's a pure guessing game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;All of this makes it almost impossible to give even a close number without exact specification of the existing/intended usage.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Following on from that, Which cassette format could store the most data on a C15 cassette?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Look for the one with the least bits per byte and the least overhead. In any case it'll be less than the gross capacity calculated in step 2. In some cases maybe 10% less, in others more than 50%. Your guess is as good as mine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line, for a rough comparison, the baud rate will do the job - everything else is application specific.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;With that in mind a &lt;strong&gt;baud rate table&lt;/strong&gt; like this can be made:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TRS-80 Model I: &lt;a href=&quot;https://www.mocagh.org/radioshack/radioshack-tape-refcard.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;250 (Level 1)/500 (Level 2) Bd&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;ZX 81: 300 Bd&lt;/li&gt;&#xA;&lt;li&gt;CUTS: 300/600/1200 Bd&lt;/li&gt;&#xA;&lt;li&gt;Acorn (CUTS variant): &lt;a href=&quot;http://beebwiki.mdfs.net/Acorn_cassette_format&quot; rel=&quot;nofollow noreferrer&quot;&gt;300/1200 Bd&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Atari 400/800: &lt;a href=&quot;https://hintermueller.de/dereatari-appendix-c&quot; rel=&quot;nofollow noreferrer&quot;&gt;600 Bd&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Amstrad/Schneider CPC: &lt;a href=&quot;http://cpctech.cpc-live.com/docs/loaders.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;1000/2000 Bd&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Apple II: &lt;a href=&quot;http://www.applevault.com/hardware/apple/apple2/apple2cassette.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;1500 Bd (average)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;IBM PC 5150: &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_cassette_tape&quot; rel=&quot;nofollow noreferrer&quot;&gt;1500 Bd&lt;/a&gt; (average - Apple II alike)&lt;/li&gt;&#xA;&lt;li&gt;ZX Spectrum: 1500 Bd&lt;/li&gt;&#xA;&lt;li&gt;ZX Spectrum may reach (non standard) &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2751/what-is-the-maximum-baud-rate-for-zx-spectrum-tapes&quot;&gt;9600 Bd or even more&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It might be noteworthy, that depending on recorder and tape material the theoretical maximum when using real cassette material and existing heads is somewhere between 20,000 and 35,000 Bd. But that would need encoding techniques way past 1980s micros.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Microcomputer) tapes aren't a blocked random access media like disks (or mainframe tapes) - they are in themselves random :))&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Which in turn makes it somewhat ridiculous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Except eventually being sold at a higher price per minute :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-02-28T22:45:24.393" LastActivityDate="2019-02-28T22:45:24.393" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9265" PostTypeId="1" AcceptedAnswerId="9266" CreationDate="2019-02-26T17:47:42.313" Score="15" ViewCount="1889" Body="&lt;p&gt;By &quot;AdLib sound card&quot; I mean &lt;a href=&quot;https://en.wikipedia.org/wiki/Ad_Lib,_Inc.#AdLib_Music_Synthesizer_Card_(1987)&quot; rel=&quot;noreferrer&quot;&gt;AdLib Music Synthesizer Card&lt;/a&gt; released in 1987.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikipedia says that AdLib uses &lt;a href=&quot;https://en.wikipedia.org/wiki/Frequency_modulation_synthesis&quot; rel=&quot;noreferrer&quot;&gt;frequency modulation synthesis&lt;/a&gt; to produce sound, but does it use MIDI communication protocol or some another way?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It's entirely possible that the FM synthesis uses MIDI under the hood to control the FM synthesis chip. The other option would be a specific driver control library which would be linked into the software.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;-- &lt;em&gt;From the question on the sound.stackexchange.com&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11688" LastActivityDate="2019-02-27T16:47:25.777" Title="Which communication protocol is used in AdLib sound card?" Tags="&lt;ibm-pc&gt;&lt;gaming&gt;&lt;sound&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9266" PostTypeId="2" ParentId="9265" CreationDate="2019-02-26T18:21:11.573" Score="21" Body="&lt;p&gt;As &lt;a href=&quot;http://www.shipbrook.net/jeff/sb.html&quot; rel=&quot;noreferrer&quot;&gt;documented by Jeffrey S. Lee&lt;/a&gt;, the AdLib simply provides raw programmatic access to its OPL2:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The sound card is programmed by sending data to its internal registers via its two I/O ports:  ...&lt;/p&gt;&#xA;&lt;p&gt;The sound card possesses an array of two hundred forty-four registers; to write to a particular register, send the register number (01-F5) to the address port, and the desired value to the data port.&lt;/p&gt;&#xA;&lt;p&gt;After writing to the register port, you must wait twelve cycles before sending the data; after writing the data, eighty-four cycles must elapse before any other sound card operation may be performed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, no MIDI, no other high-level format. The card produces nine channels of sound, each of which is the product of two sine-derived functions; you can instead configure it as six of those channels plus five percussion channels.&lt;/p&gt;&#xA;&lt;p&gt;It supports automatic application of &lt;a href=&quot;https://en.wikipedia.org/wiki/Attack-Decay-Sustain-Release&quot; rel=&quot;noreferrer&quot;&gt;ADSR&lt;/a&gt; but otherwise it is a simple modal device. Set the current instrument set, their frequencies and volume envelopes, then they'll play continuously until you tell the card otherwise.&lt;/p&gt;&#xA;&lt;p&gt;So, unlike MIDI or other formats like it, there's no inherent sequencing or timing of notes — the card has no autonomy in proceeding through music. It just makes the noises you've currently assigned to it.&lt;/p&gt;&#xA;&lt;p&gt;(and as to implementation of that expensive-sounding audio generation, see this &lt;a href=&quot;http://yehar.com/blog/?p=665&quot; rel=&quot;noreferrer&quot;&gt;reverse engineering&lt;/a&gt;; summary: it's all log tables)&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-02-27T16:38:07.647" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9267" PostTypeId="1" AcceptedAnswerId="9269" CreationDate="2019-02-26T20:24:44.203" Score="11" ViewCount="1055" Body="&lt;p&gt;I found some 6502 assembler code for a Commodore 64 program that uses meta commands like &lt;code&gt;#include &quot;foobar&quot;&lt;/code&gt;, define the address to be assembled to via &lt;code&gt;*=$1234&lt;/code&gt; and define labels without a colon. Comments are marked with a leading &lt;code&gt;;&lt;/code&gt;, and the syntax allows for specifying characters as constants such as in &lt;code&gt;lda #'A'&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which assembler programs have this kind of syntax and could be used to assemble the file?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already know that &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ca65&lt;/code&gt; assembler uses keywords like &lt;code&gt;.import&lt;/code&gt; and &lt;code&gt;.export&lt;/code&gt; but not &lt;code&gt;#include&lt;/code&gt;. And &lt;code&gt;ca65&lt;/code&gt; requires a colon after a label definition  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dasm&lt;/code&gt; assembler files define the start address with the org directive, but not with &lt;code&gt;*=&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;kickass&lt;/code&gt; assembler has different comment format&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;64tass&lt;/code&gt; does not know the &lt;code&gt;include&lt;/code&gt;keyword&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;so it is none of the above (I tried and the build failed).&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="15334" LastEditDate="2021-01-06T21:01:50.457" LastActivityDate="2021-01-06T21:01:50.457" Title="Identifying this 6502 Assembler" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;6502&gt;&lt;identify-this-software&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9268" PostTypeId="2" ParentId="9251" CreationDate="2019-02-26T20:38:26.840" Score="9" Body="&lt;h1&gt;It's &lt;em&gt;one single&lt;/em&gt; source, not multiple vendors.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Nearly all of what you mention actually comes from &lt;em&gt;one&lt;/em&gt; source, DEC VTs.  The various different control sequences generated by the function, cursor, editing, and calculator keypads that you mention pretty much all, with a couple of exceptions, have their roots in DEC VTs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A DEC VT had a slightly different (native layout) keyboard to the IBM PC/AT keyboard descendent that you are likely looking at.  Most notably it had the &lt;kbd&gt;PF1&lt;/kbd&gt; to &lt;kbd&gt;PF1&lt;/kbd&gt; keys on the calculator keypad, had the &lt;kbd&gt;Find&lt;/kbd&gt; and &lt;kbd&gt;Select&lt;/kbd&gt; keys on the editing keypad, had 20 function keys rather than 12, and lacked the concept of &lt;kbd&gt;&amp;#x21ed;&amp;nbsp;Num&amp;nbsp;Lock&lt;/kbd&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://lp007819.files.wordpress.com/2013/02/dec-vt320-keyboard-top1.jpg&quot; alt=&quot;This is a VT320 keyboard&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather, it had the concept of &lt;em&gt;modes&lt;/em&gt;.  The cursor keypad and the calculator keypad could be operated in two modes, &lt;em&gt;application&lt;/em&gt; and &lt;em&gt;normal&lt;/em&gt; modes.  The keys on these keypads would send different control sequences to the host according to the current mode, which was controlled by a control sequence (a different one for each keypad) sent from the host to the terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DEC VT system is actually fairly logical, although this has to be teased out of the doco slightly.  A terminal keyboard basically generates two sorts of control sequence: a variable length one beginning with the Control Sequence Introducer (CSI) character and a two-character sequence beginning with the Shift State 3 (SS3) character.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(You have to know, at this point, that these C1 control characters are the underlying control characters that are involved.  The &lt;code&gt;&amp;#x241b;&lt;/code&gt; &lt;code&gt;[&lt;/code&gt;, &lt;code&gt;&amp;#x241b;&lt;/code&gt; &lt;code&gt;O&lt;/code&gt;, and &lt;code&gt;&amp;#x241b;&lt;/code&gt; &lt;code&gt;N&lt;/code&gt; sequences, that you may have thought were the control codes, are in fact what ECMA-48 terms &lt;em&gt;7-bit code&lt;/em&gt; extensions.  They are ways of encoding the C1 control characters for transmission paths that are not 8-bit clean.  All C1 characters have a 7-bit encoding.  Ironically, given how long these 7-bit encodings have lived on, terminal I/O has been 8-bit clean for decades now.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a lot of CSI control sequences, varying according to what &lt;em&gt;intermediate characters&lt;/em&gt;, &lt;em&gt;parameters&lt;/em&gt;, and &lt;em&gt;final characters&lt;/em&gt; they have.  ECMA-48 documents them, their standard structure, and provides a way for vendors to have private-use control sequences.  ECMA-48 even defines a specific control sequence for encoding function keys, FNK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DEC VTs do not use FNK.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;DECFNK and application mode&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Instead, they use DECFNK.  It's one of those private-use extensions, a CSI control sequence that has a final character, &lt;code&gt;~&lt;/code&gt;, that is in the range reserved by ECMA-48 for private-use control sequences.  DECFNK control sequences have two parameters, the first denoting the key number of the main key and the second denoting the ancillary modifier keys (&lt;kbd&gt;&amp;#x21e7;&amp;nbsp;Shift&lt;/kbd&gt;, &lt;kbd&gt;&amp;#x2388;&amp;nbsp;Control&lt;/kbd&gt;, and &lt;kbd&gt;&amp;#x2387;&amp;nbsp;Alt&lt;/kbd&gt;) that were also pressed at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The numbering of the first parameter seems crazy, with odd gaps, until one looks at a DEC VT keyboard.  Then one realizes that the numbering simply follows the physical positions on the keyboard:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The editing keypad comes first, proceeding from left to right, from &lt;kbd&gt;Find&lt;/kbd&gt; as 1 to &lt;kbd&gt;Next&lt;/kbd&gt; as 6.&lt;/li&gt;&#xA;&lt;li&gt;The cursor keypad comes next, with the cursor keys numbered from 7 to 10.  DECFNK is only used in certain circumstances for these keys, but these are nonetheless their documented numberings.&lt;/li&gt;&#xA;&lt;li&gt;Then comes the function row, with 20 function keys numbered from 11 to 34.  This includes the 18 function keys that are labelled as such, and the &lt;kbd&gt;Help&lt;/kbd&gt; and &lt;kbd&gt;Do&lt;/kbd&gt; keys that are on that row. The gaps in the numbering &lt;em&gt;simply correspond to actual physical gaps in the function key row&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The calculator keypad is not covered by this because has no need of such control sequences in normal mode.  In that mode all that it generates are ordinary numeric and punctuation characters, after all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cursor and calculator keypads on a real DEC VT can be switched to &lt;em&gt;application&lt;/em&gt; modes.  The original idea behind this is that mainframe/minicomputer applications connected to DEC terminals could switch the terminal into &lt;em&gt;application&lt;/em&gt; mode and thereby give the user what amounted to a huge bunch of extra application-defined function keys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is where the two-character sequences come in.  The SS3 control character a &lt;em&gt;single shift&lt;/em&gt;, a temporary change of &quot;shift state&quot; to apply to one immediately following character.  It is this that is used to encode cursor and calculator keypad keys when in application mode.  Again, the system is fairly logical, with the &quot;shifted&quot; character being a different lowercase letter of the alphabet for each key on the keypad, in roughly bottom-to-top order of the physical key positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the editing keypad on an IBM PC/AT descendant keyboard does not have &lt;kbd&gt;Find&lt;/kbd&gt;, &lt;kbd&gt;Select&lt;/kbd&gt;, and so forth.  It has &lt;kbd&gt;Insert&lt;/kbd&gt;, &lt;kbd&gt;Delete&lt;/kbd&gt;, and so forth, in the same positions.  Similarly, an IBM PC/AT descendant keyboard has a calculator keypad that has the concept of numeric lock that turns it into a bunch of cursor and editing keys.  Then there is the fact that on a DEC VT the &lt;kbd&gt;F1&lt;/kbd&gt; to &lt;kbd&gt;F5&lt;/kbd&gt; function keys were (usually) &lt;em&gt;local only&lt;/em&gt;, and never generated input to the host.  So most terminal emulators have co&amp;ouml;pted the codes from the &lt;kbd&gt;PF1&lt;/kbd&gt; to &lt;kbd&gt;PF4&lt;/kbd&gt; keys on a DEC VT's calculator keypad for those function keys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These all complicate things somewhat.  I won't go into the complexities because they do not affect the core thesis of this answer.  The keys still end up generating DEC VT terminal control sequences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to apply all these to some concrete examples from the question:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DECFNK 1 (CSI &lt;code&gt;1&lt;/code&gt; &lt;code&gt;~&lt;/code&gt;) is the control sequence generated by the &lt;kbd&gt;Find&lt;/kbd&gt; key on the editing keypad.&lt;/li&gt;&#xA;&lt;li&gt;DECFNK 17 (CSI &lt;code&gt;1&lt;/code&gt; &lt;code&gt;7&lt;/code&gt; &lt;code&gt;~&lt;/code&gt;) is the control sequence generated by the &lt;kbd&gt;F6&lt;/kbd&gt; function key.&lt;/li&gt;&#xA;&lt;li&gt;DECFNK 15 (CSI &lt;code&gt;1&lt;/code&gt; &lt;code&gt;5&lt;/code&gt; &lt;code&gt;~&lt;/code&gt;) &lt;em&gt;would be&lt;/em&gt; the control sequence generated by the &lt;kbd&gt;F5&lt;/kbd&gt; function key, were it not for the fact that on most of the DEC VT range it cannot be taken out of &lt;em&gt;local&lt;/em&gt; mode at all.&lt;/li&gt;&#xA;&lt;li&gt;Note that DEC VTs have a gap between &lt;kbd&gt;F5&lt;/kbd&gt; and &lt;kbd&gt;F6&lt;/kbd&gt;.  Hence there is no key that generates DECFNK 16.  That's an outright error.  But it's an error probably inspired by the fact that the gap is between &lt;kbd&gt;F4&lt;/kbd&gt; and &lt;kbd&gt;F5&lt;/kbd&gt; on a PC/AT keyboard, and exacerbated by the fact that one has to look quite carefully in the DEC doco to find the code for &lt;kbd&gt;F5&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;DECFNK 11 (CSI &lt;code&gt;1&lt;/code&gt; &lt;code&gt;1&lt;/code&gt; &lt;code&gt;~&lt;/code&gt;) is the control sequence generated by the &lt;em&gt;real&lt;/em&gt; &lt;kbd&gt;F1&lt;/kbd&gt; function key on a DEC VT, which &lt;em&gt;could&lt;/em&gt; be changed out of local mode.&lt;/li&gt;&#xA;&lt;li&gt;SS3 &lt;code&gt;P&lt;/code&gt; is the control sequence generated by the &lt;kbd&gt;PF1&lt;/kbd&gt; calculator keypad key on a DEC VT, used by terminal emulators (running on PCs) for &lt;kbd&gt;F1&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;&amp;#x232b;&amp;nbsp;Backspace&lt;/kbd&gt; generating either &lt;code&gt;&amp;#x2408;&lt;/code&gt; or DEL is actually a switchable thing on a real DEC VT.  There's a DECBKM private-use control sequence that a host can send to control it.&lt;/li&gt;&#xA;&lt;li&gt;CSI &lt;code&gt;A&lt;/code&gt;, CSI &lt;code&gt;B&lt;/code&gt;, CSI &lt;code&gt;C&lt;/code&gt;, and CSI &lt;code&gt;D&lt;/code&gt; are &lt;kbd&gt;Up&lt;/kbd&gt;, &lt;kbd&gt;Down&lt;/kbd&gt;, &lt;kbd&gt;Right&lt;/kbd&gt;, and &lt;kbd&gt;Left&lt;/kbd&gt; when the cursor keypad is in normal mode.  These are almost, but not quite, the same as the output control sequences sent by the host that cause cursor motions.  (The difference is beyond the scope of this answer, though.)&lt;/li&gt;&#xA;&lt;li&gt;SS3 &lt;code&gt;A&lt;/code&gt;, SS3 &lt;code&gt;B&lt;/code&gt;, SS3 &lt;code&gt;C&lt;/code&gt;, and SS3 &lt;code&gt;D&lt;/code&gt; are &lt;kbd&gt;Up&lt;/kbd&gt;, &lt;kbd&gt;Down&lt;/kbd&gt;, &lt;kbd&gt;Right&lt;/kbd&gt;, and &lt;kbd&gt;Left&lt;/kbd&gt; when the cursor keypad is in application mode.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h1&gt;&amp;hellip; and the rest is SCO.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I did say that there were exceptions.  These exceptions largely exist in the terminal emulators built into operating system kernels like Linux and the FreeBSD/NetBSD/OpenBSD kernels.  They also largely have a common ancestor, though: SCO Multiscreen and the SCO console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the control sequences that you'll see sometimes from combinations of modifiers and the 12 IBM PC/AT function keys in PC terminal emulators are still the ones from the SCO console.  But there is more that just that.  On the SCO console (and also in a DEC VT's &quot;SCO Console Emulation&quot; mode):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CSI &lt;code&gt;H&lt;/code&gt; is &lt;kbd&gt;&amp;#x21f1;&amp;nbsp;Home&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;CSI &lt;code&gt;F&lt;/code&gt; is &lt;kbd&gt;&amp;#x21f2;&amp;nbsp;End&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There's even more to it than that.  SCO Multiscreen used &lt;kbd&gt;&amp;#x2387;&amp;nbsp;Alt&lt;/kbd&gt;+&lt;kbd&gt;F&lt;i&gt;N&lt;/i&gt;&lt;/kbd&gt; for switching between screens, for example.  And UnixWare keyboard map files will look quite familiar to FreeBSD users.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Further reading&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://unix.stackexchange.com/a/289871/5132&quot;&gt;https://unix.stackexchange.com/a/289871/5132&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://unix.stackexchange.com/a/439236/5132&quot;&gt;https://unix.stackexchange.com/a/439236/5132&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://unix.stackexchange.com/a/294886/5132&quot;&gt;https://unix.stackexchange.com/a/294886/5132&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://unix.stackexchange.com/a/382814/5132&quot;&gt;https://unix.stackexchange.com/a/382814/5132&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1932" LastActivityDate="2019-02-26T20:38:26.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9269" PostTypeId="2" ParentId="9267" CreationDate="2019-02-26T22:12:24.197" Score="17" Body="&lt;p&gt;I think it's &lt;a href=&quot;http://www.floodgap.com/retrotech/xa/&quot; rel=&quot;nofollow noreferrer&quot;&gt;xa (xa65)&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;☑ &lt;em&gt;&lt;code&gt;#include &quot;foobar&quot;&lt;/code&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;☑ &lt;em&gt;define the address to be assembled to via &lt;code&gt;*=$1234&lt;/code&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;☑ &lt;em&gt;define labels without a colon&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;☑ &lt;em&gt;Comments are marked with a leading &lt;code&gt;;&lt;/code&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;☑ &lt;em&gt;specifying characters as constants such as in &lt;code&gt;lda #'A'&lt;/code&gt;&lt;/em&gt; — the example given in the manual uses double quotes (&lt;code&gt;lda #&quot;A&quot;&lt;/code&gt;): is that a disqualifier?&lt;/li&gt;&#xA;&lt;li&gt;☒ &lt;em&gt;&lt;code&gt;.pet&lt;/code&gt; pseudo-op to include &lt;a href=&quot;https://en.wikipedia.org/wiki/PETSCII&quot; rel=&quot;nofollow noreferrer&quot;&gt;PETSCII&lt;/a&gt;-encoded strings&lt;/em&gt; — nope, sorry, but you might be able to replicate that in xa65 with &lt;code&gt;.asc&lt;/code&gt; and running the assembler with the &lt;code&gt;-O PETSCII&lt;/code&gt; option.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: via comments&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;narrator voice&lt;/em&gt;: it was not xa65, but DreamAss (&lt;a href=&quot;https://csdb.dk/release/?id=14608&quot; rel=&quot;nofollow noreferrer&quot;&gt;original link&lt;/a&gt;|&lt;a href=&quot;https://github.com/docbacardi/dreamass&quot; rel=&quot;nofollow noreferrer&quot;&gt;newer github link&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2019-03-01T15:41:07.580" LastActivityDate="2019-03-01T15:41:07.580" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9270" PostTypeId="2" ParentId="9265" CreationDate="2019-02-26T22:44:36.427" Score="14" Body="&lt;p&gt;As another answer has said, the OPL2/3 chip on the AdLib is driven by directly writing the registers that control the pitch, volume, and tone of each channel. But how does a game (or other music player) know what values to send when? There are a few different approaches.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Raw data. The &lt;a href=&quot;http://www.shikadi.net/moddingwiki/IMF_Format&quot; rel=&quot;noreferrer&quot;&gt;IMF&lt;/a&gt; format used by Apogee and early Id titles is a typical example of this. The file is a sequence of instructions, where every instruction consists of which register to write, what value to write, and how long to wait before processing the next instruction. This is easy to integrate into a game engine, and uses pretty much the minimal possible amount of CPU on playback. The &lt;a href=&quot;http://www.shikadi.net/moddingwiki/DRO_Format&quot; rel=&quot;noreferrer&quot;&gt;DRO&lt;/a&gt; format used by DOSBox's OPL capture is a slightly more advanced version of this concept that produces smaller file sizes, and there's at least one game in existence that stores its music files on disk as DRO (I know because I wrote the music playback code for it).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Raw data with separate instrument definitions. A simple way to save space (and simplify composer tools) is to define an &lt;a href=&quot;http://www.shikadi.net/moddingwiki/AdLib_Instrument_Format&quot; rel=&quot;noreferrer&quot;&gt;instrument&lt;/a&gt; by directly dumping the OPL register values needed to create a given sound, and store the instruments separately from the note data. Then on playback you need commands to set the instrument for a given channel (which loads a bunch of registers from the instrument data), play a note at a given pitch and volume (loads the pitch, volume, and keyon registers), and stop a note (clears the keyon register). The &lt;a href=&quot;http://www.shikadi.net/moddingwiki/ROL_Format&quot; rel=&quot;noreferrer&quot;&gt;ROL&lt;/a&gt; format used by AdLib themselves is an example of this method.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;MIDI. If you have instrument definitions for each of the 127 General MIDI instruments (you could get these from AdLib, or someone else, or make your own), then you can play MIDI files by parsing the MIDI events and doing a little bit of conversion between the value ranges used by MIDI and the value ranges used by AdLib. The Windows 3 - 9x MIDI Mapper driver did this, as did several standalone DOS MIDI players and DOS games.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.shikadi.net/moddingwiki/CMF_Format&quot; rel=&quot;noreferrer&quot;&gt;CMF&lt;/a&gt; (Creative Music Format) was a very popular format for AdLib music, which is &lt;em&gt;almost&lt;/em&gt; MIDI, except that the headers are different (it isn't recognized as a MIDI file), and each file contains its own set of instrument definitions (like option #2) instead of using a standardized set of General MIDI patches. Program numbers in the MIDI data correspond to the built-in instruments rather than GM instruments. The &quot;SBFMDRV&quot; music driver provided by Creative Labs supports playback of CMF, and a number of games make use of it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Anything else. Since the programming interface to the OPL chip is so simple and low-level, other things are possible that I don't have time to write about. Procedurally generated music, using AdLib for sound effects rather than music by tweaking the register values in real time, AdLib S3M modules, etc., etc.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="336" LastEditorUserId="336" LastEditDate="2019-02-27T16:47:25.777" LastActivityDate="2019-02-27T16:47:25.777" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9271" PostTypeId="1" CreationDate="2019-02-27T03:06:45.857" Score="3" ViewCount="235" Body="&lt;p&gt;I was currently trying to install Windows 98 on my computer. The specifications will be listed:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Intel Pentium 4 2.4 GHz, &lt;/li&gt;&#xA;&lt;li&gt;1.5 GB RAM (Modified system.ini so it sees less)&lt;/li&gt;&#xA;&lt;li&gt;186 GB IDE Hard drive (Partitioned to give Windows 98 12 GB), &lt;/li&gt;&#xA;&lt;li&gt;Integrated Intel Graphics&lt;/li&gt;&#xA;&lt;li&gt;DELL Motherboard.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The installation had completed normally. However, when trying to start up, it would continuously load at the splash screen for Windows 98. &#xA;I then pressed F8 and used the bootlog feature to show when it was failing.&#xA;The very last line shown was&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[00161404] LoadSuccess = C:\WINDOWS\IFSHLP.SYS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;with nothing else after that. Shouldn’t more be there other than the 6 drivers loading?&#xA;I tried to replace IFSHLP.SYS with a clean copy from the Windows 98 SE CD-ROM and it didn’t work.&#xA;In system.ini I had set the MaxPhysPage to 20000 under 386enh. Everything else is the same.&#xA;One thing to note is that when I wait long enough (30 min) it gives the message: “Either memory is insufficient to run KRNL386.EXE or the value of the Windowmemsize entry in the SYSTEM.INI file is too large. You need to run the Setup program again.”&lt;/p&gt;&#xA;" OwnerUserId="12020" LastEditorUserId="12020" LastEditDate="2019-02-27T23:06:05.967" LastActivityDate="2019-02-27T23:06:05.967" Title="Windows 98 SE Splash Screen loads forever" Tags="&lt;windows-98&gt;" AnswerCount="0" CommentCount="10" ClosedDate="2019-02-28T16:31:21.953" ContentLicense="CC BY-SA 4.0" />
  <row Id="9272" PostTypeId="2" ParentId="5843" CreationDate="2019-02-27T14:37:23.973" Score="10" Body="&lt;p&gt;The classic PDP-8 made extensive use of what were called DCD gates.  These diode-capacitor-diode gates performed the logical AND function between two inputs, one a pulse and one a level signal.  So, for example, each flip-flop in the PDP-8 accumulator was made with two transistors plus an array of DCD gates on the set and reset inputs that served to multiplex the myriad inputs to the accumulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The extensive use of DCD gates cut way down on the transistor count compared to machines implemented with pure diode transistor logic, where every AND was likely to involve a transistor, and they certainly cut the transistor count compared with MOSFET logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DCD gates look bizarre to a modern designer because we rarely use pulse logic today, but in the early 1960s, when transistors cost over a dollar each, and when most engineers were still thinking in terms of tubes, it made good sense to use cheap components like capacitors and diodes when you could get away with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see more about the classic PDP-8 here:&#xA;-- &lt;a href=&quot;https://homepage.divms.uiowa.edu/~jones/pdp8/UI-8/&quot; rel=&quot;noreferrer&quot;&gt;http://www.cs.uiowa.edu/~jones/pdp8/UI-8/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a look at the &lt;a href=&quot;https://archive.org/details/bitsavers_decpdp8pdpManualFeb66_21177111/page/n249&quot; rel=&quot;noreferrer&quot;&gt;schematic for the PDP-8 accumulator&lt;/a&gt;.  You'll see that each bit of the accumulator (just two transistors) is surrounded by 15 DCD gates (7 that can reset the flipflop and 8 that can set it).  Each DCD gate consists of 4 diodes, a capacitor and some resistors.  When the level input is high, a positive pulse on the pulse input causes an over-high noise spike on the output, coupled through the capacitor.  When the level input is low, a positive pulse on the pulse input is coupled through the capacitor to a positive pulse on the output.  The official DEC explanation of DCD gates is in the &lt;a href=&quot;https://archive.org/details/bitsavers_dechandbooook1968_26061189/page/n149&quot; rel=&quot;noreferrer&quot;&gt;Logic Handbook, 1968&lt;/a&gt; (and other editions).&lt;/p&gt;&#xA;" OwnerUserId="12021" LastEditorUserId="7946" LastEditDate="2019-02-28T14:45:45.747" LastActivityDate="2019-02-28T14:45:45.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9273" PostTypeId="2" ParentId="4861" CreationDate="2019-02-27T18:36:14.750" Score="0" Body="&lt;p&gt;Many laptops back then were used for very specific, narrow purposes - looking up records in a product database, word processing (and word processing only) so it's not accurate that Windows or a pointing device was needed. Instead, attention would have been paid to ensuring that whatever application program the laptop was used for was started and active on boot. Laptops were almost exclusively used in business before the late 1990s so casual use wasn't a factor.&lt;/p&gt;&#xA;" OwnerUserId="12022" LastEditorUserId="75" LastEditDate="2019-02-27T21:19:39.717" LastActivityDate="2019-02-27T21:19:39.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9274" PostTypeId="2" ParentId="4714" CreationDate="2019-02-27T18:41:24.560" Score="2" Body="&lt;p&gt;There was a game for the TRS-80 that used RF interference from the display as a sound source. You were instructed to place a radio next to the TV to hear sound.&lt;/p&gt;&#xA;" OwnerUserId="12022" LastActivityDate="2019-02-27T18:41:24.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9276" PostTypeId="2" ParentId="9239" CreationDate="2019-02-27T22:13:15.567" Score="3" Body="&lt;p&gt;Regarding the 8051:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;One in most OSD-capable CRT monitors or television sets ever sold.&lt;/li&gt;&#xA;&lt;li&gt;One in most pre-DVD CDROM drives ever sold.&lt;/li&gt;&#xA;&lt;li&gt;One in most pre-2000s hard drives.&lt;/li&gt;&#xA;&lt;li&gt;A predecessor of the 8051 (the 8042. An 8048 derivative. The 8048 is NOT an 8051 per se, the 8051 was developed as a solution to do what the 8048/-42 could not do well and is NOT an extended 8048/8042) hardwired into most any PC chipset.&lt;/li&gt;&#xA;&lt;li&gt;One in most PC keyboards.&lt;/li&gt;&#xA;&lt;li&gt;An 8051 or 8048 in many household appliances that were button-and-LED controlled.&lt;/li&gt;&#xA;&lt;li&gt;One 8051 or 8048 in most VCRs and VFD-interfaced HiFi devices.&lt;/li&gt;&#xA;&lt;li&gt;One 8051 (or 80196! Another intel MCU, not an 8051), often the SAB80C515 or SAB80C517, in quite some early car ECUs. &lt;/li&gt;&#xA;&lt;li&gt;Probably a couple of them around even a modern car.&lt;/li&gt;&#xA;&lt;li&gt;One 8051 in a typical electronic central heating controller.&lt;/li&gt;&#xA;&lt;li&gt;Often, one 8051 in a telephone with a non-graphic LCD display.&lt;/li&gt;&#xA;&lt;li&gt;In an SD card or USB stick, often a supercharged 1-cycle 8051 core in the controller chip (likely hardwired for cost efficiency).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Generally, anything where a mechanical control solution (that isn't math heavy) is replaced by digital control, but without a graphic LCD (handling display fonts on an base, 12-cycle 8051 doesn't leave much capacity for anything else. Especially all the bit-wrangling to drive displays that want their data as 8-bit pieces of a row!), suspect an 8051 at work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often not 8051: film cameras (very custom stuff), toasters (4 bit cores), electronic door locks (PIC), calculators, simple digital watches (hardwired), printers (80188, ARM), optical mice (68HCxxx)...&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="785" LastEditDate="2019-02-28T08:27:09.383" LastActivityDate="2019-02-28T08:27:09.383" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9277" PostTypeId="2" ParentId="9260" CreationDate="2019-02-28T18:37:24.060" Score="8" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/SAM_Coup%C3%A9&quot; rel=&quot;noreferrer&quot;&gt;SAM Coupé&lt;/a&gt; had a ZX Spectrum compatible tape data format with programmable save speed and automatic load speed detection. According to the &lt;a href=&quot;https://sam.speccy.cz/systech/sam-coupe_tech-man_v3-0.pdf&quot; rel=&quot;noreferrer&quot;&gt;Technical Reference Manual&lt;/a&gt;:-&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Speed 112 is spectrum speed, 35 is much faster. Faster speeds are less&#xA;  reliable - but &lt;strong&gt;3*spectrum speed&lt;/strong&gt; should be feasible with many&#xA;  recorders.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Spectrum saves at ~1500bd average. 3 times that equates to 4500bd average, or 563 bytes/second. So, ignoring the lead-in, header, sync and checksum bits - a C15 tape would theoretically be able to store 15*60*563 = ~500kB on average.       &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-02-28T18:37:24.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9278" PostTypeId="1" AcceptedAnswerId="9279" CreationDate="2019-03-01T12:31:22.933" Score="7" ViewCount="322" Body="&lt;p&gt;I have an Amiga 590 hard drive, but the power supply appears to be dead on it so I want to take a look inside. I have removed three screws from the underside but it still won't open, acting like there's a screw in the top righthand corner (as you look at it from underneath). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I missing something obvious? It looks like this underneath&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://www.dropbox.com/s/7uz17l84jm5avg1/a590.jpg?raw=1&quot; width=&quot;300&quot;/&gt;&lt;/p&gt;&#xA;" OwnerUserId="5380" LastEditorUserId="5380" LastEditDate="2019-03-01T18:27:05.647" LastActivityDate="2019-03-01T20:54:42.530" Title="How do you open an Amiga A590 Power supply?" Tags="&lt;amiga&gt;&lt;power&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9279" PostTypeId="2" ParentId="9278" CreationDate="2019-03-01T14:53:31.770" Score="6" Body="&lt;p&gt;The last (and only) Amiga 590 PSU I have ever seen actually &lt;strong&gt;had&lt;/strong&gt; four screws,  all hidden under plastic cones that need to be removed first. (All four holes visible in the picture hold a screw). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT After you supplied a picture: Apparently, one of the cone plugs is still in there in the top right. The easiest way to remove the plug is to drive a self-tapping screw in there and pull it out. Below the plug, you should find the last screw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GEDnG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GEDnG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-03-01T19:17:10.597" LastActivityDate="2019-03-01T19:17:10.597" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9281" PostTypeId="1" AcceptedAnswerId="9283" CreationDate="2019-03-01T20:18:48.983" Score="8" ViewCount="757" Body="&lt;p&gt;Starting with the 4116, RAM chips from the late seventies supported fast page mode, where if you were reading nearby – particularly, successive – words, you didn't need to supply both row and column address each time, making second and subsequent words much faster to access. This was used to good effect by some machines, e.g. the video circuitry in the ZX Spectrum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me that logically this should also apply to ROM, and would have been useful for some purposes; even if off-the-shelf CPUs of the seventies and eighties didn't have the ability to take advantage of it, at least it could've been used for fetching bitmaps for cartridge games. But I haven't seen it mentioned at all, and Google doesn't seem to have heard of the notion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does fast page mode apply to ROM? If so, did any historical machines use it? If not, why not?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-03-05T01:50:55.610" Title="Does fast page mode apply to ROM?" Tags="&lt;memory&gt;&lt;rom&gt;&lt;performance&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9282" PostTypeId="2" ParentId="9281" CreationDate="2019-03-01T21:15:26.830" Score="5" Body="&lt;p&gt;Most ROMs didn't break addressing into columns and rows, they just took a straight address off the address bus. So, there would be no reason for them to do this.&lt;/p&gt;&#xA;" OwnerUserId="10420" LastActivityDate="2019-03-01T21:15:26.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9283" PostTypeId="2" ParentId="9281" CreationDate="2019-03-01T21:34:50.317" Score="17" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does fast page mode apply to ROM?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. Why should they?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're missing one step to start with in your chain of thoughts. (Fast) Page Mode is an improvement to the address multiplex protocol dynamic RAM uses. As such it isn't a general improvement, but a relative one, reducing the overhead the address multiplexing implies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Address multiplexing was introduced to &lt;em&gt;dynamic&lt;/em&gt; RAM by means of the internal organisation needed to handle its RAM cells content (see below for a detailed discussion). Even with the improvement of Page Mode it still suffers from access penalty compared to non multiplexed access. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROM (and SRAM) did never went that way, as neither needs to use multiplexed addressing, but 'flat' addressing - and wide data words. Adding it would mean to further break down the speed of already slow ROM devices. Not anything system designers desire.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why do DRAM use address multiplexing?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DRAM needs to refresh its content in cyclic manner. For a 4 KiBit RAM, this would mean 4096 refresh cycles within the data retention time. A typical guaranteed retention time for a 1973 DRAM, like the MK4096, is 2 ms. With a cell based addressing (12 bit 'flat' address) and a cycle time of 500 ns (MK4096-11), 102% of all cycles would need to be refresh cycles, effectively leaving &lt;strong&gt;no&lt;/strong&gt; space for data access while at the same time violating the specifications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To reduce number of refresh cycles needed, not a single cell is read during a read/refresh cycle, but a whole line of cells (64 for MK4096) is read and written back. As a result now only 128 refresh cycles are needed within 2 ms, an overhead of just 3,2% of all cycles, leaving 96.8% for data access. Or in mathematical terms, O=N is turned into O=SQR(N). An incredible reduction, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A drawback of such a line orientated access is that it now has to work in two steps, first reading a line, next selecting the data to be outputed.  Of course this can be done with an address of 12 bits 'flat' delivered via 12 address lines, the second half is not needed until the line read has been done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &lt;a href=&quot;https://en.wikipedia.org/wiki/Mostek&quot; rel=&quot;noreferrer&quot;&gt;Mostek&lt;/a&gt;'s improvement over Intel's 1103 was to turn this internal mechanic into an advantage to reduce pin count by multiplexing the address in a way, that the needed line address comes first, to be used to read the line and then the data address within the line to select whatever is to be signalled on the data out pin(s). Now DRAM could be made as small as 16 pin but still hold 4 KiBit of Data.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-03-01T21:45:55.533" LastActivityDate="2019-03-01T21:45:55.533" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9284" PostTypeId="1" AcceptedAnswerId="9286" CreationDate="2019-03-02T01:17:01.597" Score="5" ViewCount="1472" Body="&lt;p&gt;I don't know whether it's still the case, but at least in the early days, it was common for RAM chips to be one bit wide, so e.g. an 8-bit computer would install them in groups of eight. I gather at least for DRAM, having sixteen kilobytes in the form of eight 16384x1 chips makes the refresh circuitry simpler than if it was eight 2048x8 chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I notice some chips were four bits wide. &lt;a href=&quot;https://www.intel-vintage.info/intelmemory.htm&quot; rel=&quot;noreferrer&quot;&gt;https://www.intel-vintage.info/intelmemory.htm&lt;/a&gt; lists specific models; there are plenty of chips, both static and dynamic, with a width of four bits, but only a handful eight bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This did have consequences; the Acorn Electron tried for 32K total with a minimum chip count to reduce cost, ended up with a 4-bit data bus, which basically halved its speed. Certainly at a time when the majority of computers had an 8-bit data bus, it would seem intuitively more logical for that to be the width.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why was x4 so much more common than x8?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-03-03T02:23:58.400" Title="Why are RAM chips 1 or 4 bits wide?" Tags="&lt;memory&gt;&lt;chip&gt;&lt;ram&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9285" PostTypeId="2" ParentId="9284" CreationDate="2019-03-02T02:23:29.560" Score="7" Body="&lt;p&gt;In the case of Intel, their initial manufacturing lines were set up for 16 and 18-pin ceramic DIP packages.  Thus, their first memory and processor chips were limited to 16 or 18 pin packages:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xZSfk.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xZSfk.jpg&quot; alt=&quot;4004 Microprocessor&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/CwcRq.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CwcRq.jpg&quot; alt=&quot;1103 DRAM&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3101 Schottky TTL SRAM&lt;/li&gt;&#xA;&lt;li&gt;3301 Schottky TTL ROM&lt;/li&gt;&#xA;&lt;li&gt;1101 MOSFET SRAM&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_1103&quot; rel=&quot;noreferrer&quot;&gt;1103 MOSFET DRAM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_4004&quot; rel=&quot;noreferrer&quot;&gt;4004 Microprocessor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8008&quot; rel=&quot;noreferrer&quot;&gt;8008 Microprocessor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Intel determined the Busicom design was too complex, since serial memories required more components, and &lt;strong&gt;would use 40 pins, a packaging standard different from Intel's own 16-pin standard&lt;/strong&gt;. Intel proposed to develop a new design which could be produced with standard 16-pin DIP packaging, and would have a reduced instruction set.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_4004&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Intel_4004&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It took several years before Intel could afford to upgrade their production lines to larger package sizes.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-03-02T02:23:29.560" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9286" PostTypeId="2" ParentId="9284" CreationDate="2019-03-02T05:11:13.823" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I don't know whether it's still the case, but at least in the early days, it was common for RAM chips to be one bit wide, so e.g. an 8-bit computer would install them in groups of eight.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. It depends on the way the Family designers envisioned a certain system. And what the use case in terms of memory needed was. Early RAM chips where all static and organized as x1, x4 or x8. Intel's 1 KiBit Ram was available as 256x4 as 2101 or 1024x1 called 2102. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2101 was housed in a 22 pin package, while the 2102 only needed 16. Due to the smaller package these chips could be offered for less, and building systems was even cheaper due the lower pin count. On the backside, it takes 8 chips to get a byte. Applications that need only 256 bytes or less are better off to use nibble wide memories, as with the 2102 only two ships where to be soldered. And while each might be a few percent more expensive than its x1 counterpart, cutting the BOM down from 8 to 2 chips was quite a saving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motorola went even a step ahead and made its 1 KiBit chip 6810 byte-wide. Thus, embedded systems with a need of 128 bytes or less could be made with just a single 24 pin IC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MOS went with the 6550 nibble wide - again to enable small systems at low price - the 6500 was meant to be as cheap as possible.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I notice some chips were four bits wide. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For a short time - and on static RAM - they became the majority, as they allowed to cut down on chips needed. Keep in mind, back then designers didn't just fill up the address space and see if it's needed or not. Also, nibble wide chips could be used in 4 bit as well as 12 bit systems. So it might be a sweet spot.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but only a handful eight bits.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Early on yes, but around 1980 8 bit wide static RAM became the standard. See 6116, 6264, 62256, etc. Much like with (EP)ROM static RAM didn't need multiplexing, thus 8 bit wide is the most simple cost effective design - as long as the memory need can be satisfied by one IC.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;And before you ask, 4 bit wide DRAM were a special case. They where especially popular with 256 KiBit RAMs. When organized as 64 Ki by 4  two could be used to fill the whole address space of an 8 bit micro. So similar organization, but different reasoning.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-03-03T01:00:08.780" LastActivityDate="2019-03-03T01:00:08.780" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9287" PostTypeId="2" ParentId="9260" CreationDate="2019-03-03T02:01:55.403" Score="0" Body="&lt;p&gt;In 1977 I had a portable cassette recorder with an RS-232 interface that supported 9600 baud.  So the capacity depended on the length of the tape. I only needed 64k so that was not an issue with a 30 min tape.  It was error-free and I used it (prior to modems) to transport MC6800 code from University ( Prof Compilers was contracted to do the work) then back to Work at Bristol Aerospace Ltd. to burn into UV erasable EPROMs.  They never failed.  It was downloaded from compiled code on a PDP11? then uploaded to an MOT Exorcisor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other times I monitored half duplex data on both Rx Tx using diodes with 3K to ground in a Diode OR arrangement,  knowing the threshold for RS-232 was the same as TLL = 1.3V, I didn't need bipolar levels.  This helped me monitor my SCADA designs with up to 1 hr data logging and test results between a couple HP9825's that interfaced to smart HP terminals. But the HP9825's had high-speed cartridge drives in 1978 for supporting the autosave of program parameters for instant POR reset recovery.   My first HP Basic computers for my 2nd SCADA project in 1978.  It was the first time I used DMA and mapped the keyboard into a custom pushbutton SCADA remote control console with real-time ADC and digital feedback.&lt;/p&gt;&#xA;" OwnerUserId="9087" LastEditorUserId="9087" LastEditDate="2019-03-03T02:18:52.360" LastActivityDate="2019-03-03T02:18:52.360" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9288" PostTypeId="2" ParentId="9284" CreationDate="2019-03-03T02:23:58.400" Score="3" Body="&lt;p&gt;When using a non-multiplexed address bus, an N-by-4 RAM chip will need two fewer address bits than a 4N-by-1 chip, so even though it has three more data bits, the net gain for moving to an N-by-four organization is only one pin.  Expanding to an 8-wide arrangement could save one more address pin, but add four more data pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When using multiplexed addresses, boosting the number of addresses by a factor of four would only require adding one extra address pin rather than two, but the benefit of cutting the number of chips by a factor of 4 often make it worth adding three extra chips per.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-03-03T02:23:58.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9289" PostTypeId="1" AcceptedAnswerId="9290" CreationDate="2019-03-03T13:59:45.747" Score="21" ViewCount="8787" Body="&lt;p&gt;I have found inexpensive &lt;a href=&quot;https://www.ebay.com/i/112369484081?chn=ps&quot; rel=&quot;noreferrer&quot;&gt;(~$15)&lt;/a&gt; 3.5in floppy to USB adapter cables but have been unable to find a similar adapter for 5.25 floppy drives. Does anybody make such a thing? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are the pinouts of a 3.5 the same as 5.25 so that I could just make a cable end converter for the 3.5 adapter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hF0A7.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hF0A7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="6794" LastEditDate="2019-07-09T22:01:31.903" LastActivityDate="2020-10-09T16:10:01.467" Title="Wanted: 5.25&quot; floppy to USB adapter" Tags="&lt;floppy-disk&gt;&lt;usb&gt;" AnswerCount="6" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9290" PostTypeId="2" ParentId="9289" CreationDate="2019-03-03T14:41:26.673" Score="17" Body="&lt;p&gt;The data pin-outs are the same, assuming a reasonably “new” 5.25″ drive, not an early ‘80s model.&lt;/p&gt;&#xA;&lt;p&gt;It was a common upgrade to replace the second 5.25″ drive on an older machine with a 3.5″ one, so you could have a choice of format depending on your needs. They were interchangeable.&lt;/p&gt;&#xA;&lt;p&gt;You might have an issue with the power though. I don’t remember seeing a 5.25″ drive using the compact power connector pictured there. There might be, and I just don’t remember. There was another older connector type that was wider, with four tubular thick pins in a line. I’m learning that it is commonly referred to as “Molex” but that’s a company name. Power supplies typically provided both sets for choice of device. You will probably need an adapter cable for power. The electric characteristics are the same, it’s just a pin converter.&lt;/p&gt;&#xA;&lt;p&gt;Be careful to get the right “direction”: you need a male 3.5″ style to “molex 4 pin” female.  The converter might be a bit hard to find because most people who needed a converter needed the opposite thing (plug a 3.5″ drive on a 5.25″-only power supply). Cabling is not my area, so others might provide you with better information.&lt;/p&gt;&#xA;" OwnerUserId="4577" LastEditorUserId="15334" LastEditDate="2020-10-09T08:33:06.820" LastActivityDate="2020-10-09T08:33:06.820" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9291" PostTypeId="2" ParentId="6281" CreationDate="2019-03-03T14:58:39.060" Score="4" Body="&lt;p&gt;While reading through the May 1978 issue of Popular Electronics, I came across this tiny news item that may be germane to this topic:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;8080 Cassette Operating System.&#xA;  COS, an adaptation of the CP/M disc operating system, is intended for use on&#xA;  microcomputers with Micro Designs' digital cassette systems. The systems &#xA;  maintain a file directory and permit directory listout, file erasure, save, &#xA;  output and renaming - plus file open, close, search, delete, read, write, and &#xA;  create. Write: Micro Designs, Inc. 499 Embarcadero, Oakland, CA 94606&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4066" LastEditorUserId="4066" LastEditDate="2019-03-03T16:05:23.027" LastActivityDate="2019-03-03T16:05:23.027" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9292" PostTypeId="2" ParentId="9289" CreationDate="2019-03-03T14:59:47.960" Score="8" Body="&lt;p&gt;The connections on the 34-pin ribbon cables are identical, but the size of the connectors are different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can get ready made cables with both 5.25 and 3.5 connectors, for example &lt;a href=&quot;http://www.cablesonline.com/36unflopdriv.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.cablesonline.com/36unflopdriv.html&lt;/a&gt; (and of course from Ebay also). These are likely to be more reliable than trying to wire a 5.25 connector onto a 3.5-sized cable by hand. These cables used IDC (insulation displacement) connectors which are crimped, not soldered, and they only work as designed with the correct size ribbon cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rewiring the 4-pin power cable is a much more feasible proposition than rewiring the ribbon cable, if you can't find what you need ready-made. It should be possible to release the individual wires from the connector by pressing down the spring clip that locks the wire in place (visible through the slots in one side of the connector) with a thin screwdriver blade or something similar, while pulling on the wire. The wire itself is soldered onto the metal &quot;pin and spring clip&quot; part which goes into the plastic housing. &lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2019-03-03T14:59:47.960" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9294" PostTypeId="1" CreationDate="2019-03-03T23:20:10.977" Score="6" ViewCount="567" Body="&lt;p&gt;I think that Mac OS X is based on the Darwin OS, and the Darwin OS is based on the NeXTSTEP OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I correct?&lt;/p&gt;&#xA;" OwnerUserId="12035" LastActivityDate="2019-03-05T20:21:18.903" Title="What is the origin of Mac OS X?" Tags="&lt;history&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9295" PostTypeId="2" ParentId="9294" CreationDate="2019-03-03T23:34:15.883" Score="1" Body="&lt;p&gt;When Apple purchased the company &lt;a href=&quot;https://en.wikipedia.org/wiki/NeXT&quot; rel=&quot;nofollow noreferrer&quot;&gt;NeXT&lt;/a&gt; in 1997, they got not only CEO Steve Jobs from the deal, but also the smaller company's technologies.  This included &lt;a href=&quot;https://en.wikipedia.org/wiki/NeXTSTEP&quot; rel=&quot;nofollow noreferrer&quot;&gt;NeXTSTEP&lt;/a&gt;, the Unix-based operating system for NeXT machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Under Jobs' leadership, Apple then modified NeXTSTEP to work on Macintosh hardware.  The result was MacOS X.  Some Apple technologies were retained (e.g. QuickTime), whereas many others (many of which were seldom used anyway) were discarded.  In addition, Apple tried to keep backwards compatibility with the Classic run-time environment and the Carbon source-code API.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Darwin is the kernel plus the low-level layers of MacOS X.  There is enough in Darwin that it could act as an operating system, but much of the usefulness of MacOS X is in the higher layers.  Darwin is open source, but the higher layers of MacOS X is not.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2019-03-04T00:01:21.230" LastActivityDate="2019-03-04T00:01:21.230" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="9296" PostTypeId="2" ParentId="9289" CreationDate="2019-03-04T09:01:29.200" Score="5" Body="&lt;p&gt;I am somewhat sceptical that you'll get this to work for high density.  The basics are that normal (single or double density) 5¼&quot; floppies are turning at a rate of 300rpm while high density 5¼&quot; floppies mimic 8&quot; double density floppies with a rate of 360rpm.  In contrast, 3½&quot; floppies always use 300rpm.  Double density on either have data rates of 250mbps in MFM (double density) mode while high density has 500mpbs.  The slower rotational speed of 3½&quot; HD disks is what results in the higher capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's probably safe to assume that only MFM will be supported and it would be rather surprising if both 250mbps and 500mbps data rate and/or 300rpm and 360rpm would be since those generally have to come from the drive.  In theory, the &quot;drive&quot; could decide to vary those based on the size/kind of images stored on the USB stick but at least for double density, the size of 3½&quot; and 5¼&quot; images would be the same.  Note that essentially it is the drive that &quot;detects&quot; the format of the floppies.&lt;/p&gt;&#xA;" OwnerDisplayName="user12037" LastActivityDate="2019-03-04T09:01:29.200" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="9297" PostTypeId="2" ParentId="9294" CreationDate="2019-03-04T13:19:31.633" Score="10" Body="&lt;p&gt;The short answer to the question is yes. macOS (as it is now called) is an evolution of NextStep. However, there is probably not very much original NextStep code left in it today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NextStep was an operating system created by taking the mach microkernel to provide low level services such as virtual memory, context switching, task synchronisation and others and fusing it with the BSD 4.3 Unix device driver system, virtual file system and network stack. Added to this was the BSD device API (i.e. Unix special files) to allow user programs to interact with devices. Although mach is technically a microkernel, NextStep put all of the above in kernel space with mach for performance reasons. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of the kernel was the BSD userland which consists of the command line utilities and other system level stuff that operates in user space such as the daemons and init system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of all this was the graphical subsystem which was responsible for managing the user display. This was written in Objective-C and corresponds to Cocoa in macOS. In fact, the legacy of NextStep is still visible in that all the Cocoa classes start with the prefix &quot;NS&quot; for NextStep.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time when Next were trying to sell Next cubes ands NextStep, Apple were in trouble. Their operating system MacOS (not to be confused with macOS) was showing its age. It had no pre-emptive multitasking and memory protection was mediocre. On a technical level, it was not much further advanced than Windows 3.1 which had been obsolete for over five years when OS X was released.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple had a couple of abortive attempts to create a replacement for MacOS before they bought Next. Having bought Next, they decided to modify NextStep as the new OS. Changes they made include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;completely replacing the device driver system with a new one written in a restricted subset of C++ that better supported plug and play&lt;/li&gt;&#xA;&lt;li&gt;changing the look and feel of the graphical objects in the display subsystem&lt;/li&gt;&#xA;&lt;li&gt;porting HFS+ to the virtual file system&lt;/li&gt;&#xA;&lt;li&gt;Creating the Carbon API that allowed existing Mac apps to be recompiled for macOS with minimal changes&lt;/li&gt;&#xA;&lt;li&gt;Adding a &quot;Classic&quot; subsystem to allow legacy MacOS apps to run without recompilation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Over the next few years they gradually rewrote a fair amount of the BSD kernel subsystems because the BSD code was frankly dire. (I know from experience. In the mid 2000's I had a job to port a WORM drive file system to macOS which meant writing a virtual file system driver for it). For example, in BSD 4.3, mutual exclusion in the kernel was achieved by means of a thing called the thread funnel. The thread funnel was a global lock that stopped anything in the kernel from running except the thread that owned it. That's fine on single core machines but caused an unnecessary bottleneck on multicore machines. So the thread funnel was replaced in (IIRC) 10.4 with more conventional synchronisation primitives. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also in the 10.4/10.5 time scale, they started abstracting the virtual file system and network stacks to make the kernel API to each much cleaner ands easier to program for. It's probable they have continued that work and not much of the BSD code exists anymore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Darwin, by the way, is just a name given to the Open Source portion of macOS. This consists of the kernel and the BSD user land. It was not developed first and then macOS developed from it. In fact, it probably goes the other way historically.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Reading the comments on Dr Sheldon's answer, I see there is some confusion about names. So here is a little glossary of relevant terms:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MacOS: The original Macintosh operating system&lt;/li&gt;&#xA;&lt;li&gt;NextStep: the operating system for the Next Cube&lt;/li&gt;&#xA;&lt;li&gt;Mac OS X: Apple's new operating system based on NextStep&lt;/li&gt;&#xA;&lt;li&gt;macOS: A rebranding of the version of OS X that runs on Macintoshes (as opposed to phones, watches and TVs)&lt;/li&gt;&#xA;&lt;li&gt;BSD: Berkely Software Distribution - a flavour of Unix&lt;/li&gt;&#xA;&lt;li&gt;XNU: The kernel for NextStep and OS X. XNU consists of the Mach microkernel and some BSD 4.3 kernel subsystems. On OS X it also contains the C++ device driver subsystem.&lt;/li&gt;&#xA;&lt;li&gt;Darwin: An operating system consisting of the Open Source parts of OS X.&lt;/li&gt;&#xA;&lt;li&gt;Cocoa: The primary Objective-C GUI subsystem&lt;/li&gt;&#xA;&lt;li&gt;Carbon: a framework written in C that provides source level compatibility for MacOS apps on OS X&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2019-03-04T14:11:21.457" LastActivityDate="2019-03-04T14:11:21.457" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9298" PostTypeId="2" ParentId="9294" CreationDate="2019-03-04T16:10:22.913" Score="4" Body="&lt;p&gt;In case a dry restatement of the chronology helps to resolve the confusion:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NeXT Computer was acquired by Apple in 1997. At the time NeXT's most successful product was WebObjects, the Objective-C/Java server product; the NextStep OS had turned into OpenStep in partnership with Sun but the latter had drifted away after deciding to push Java as the solution for everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rhapsody was both announced and demoed by Apple in 1997, one month before it completed acquisition of NeXT; it was subsequently made available to the public as two Developer Previews, the first in 1997 and the second in 1998. It provides a wonky emulation of the MacOS 8 look and feel atop the NeXTStep stack of the Mach kernel plus a BSD subsystem, with two 'boxes' for applications — the yellow box provides a version of the OpenStep libraries, for fully-native apps, and the blue box provides MacOS 8 in a box. Literally in a box; all MacOS 8 applications ran within a single common window, much like the experience you usually get running a virtual machine. A Java Virtual Machine is offered, but as with the two boxes that's once again a separate thing, in its own little API world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From there Apple moved to OS X Server 1.0 in 1999. It still looks like MacOS 8, though it's still a reimplementation so the widgets don't always act identically, with NeXTStep-esque Display Postscript as the graphics layer, the NextStep Workspace Manager as the desktop, and classic Mac applications constrained within their own little desktop-in-a-window.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Darwin was also born in 1999, then being the kernel plus the BSD subsystem plus other parts that Apple publicised as producing a complete operating system with Apple's driver model. Over time it has sometimes tracked core OS X developments — e.g. switching to CUPS, gaining libdispatch — but it'd be out of scope to discuss more modern developments too thoroughly; see &lt;a href=&quot;https://web.archive.org/web/20160405162456/https://opensource.apple.com/static/iso/release-notes-1.4.1.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;old release notes&lt;/a&gt; for evidence of its scope during the relevant period, and note that not everything Apple provided in its compiled versions of Darwin was provided as open source. So the popular version of events — that Darwin is the open source parts of OS X — also isn't completely accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OS X 10.0, the first consumer-targeted release but still looking and acting a lot like a beta, didn't arrive until 2001. Significant changes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the Aqua user interface, in its lickable phase, has arrived;&lt;/li&gt;&#xA;&lt;li&gt;as has most of the rest of early OS X: Aqua implementations of the Finder, the Dock, and the menu bar;&lt;/li&gt;&#xA;&lt;li&gt;classic applications are no longer constrained to a box;&lt;/li&gt;&#xA;&lt;li&gt;Carbon has been added as a native framework (and, similarly, is available for the Classic OS) to provide the migration path necessary to retain the support of Adobe, Microsoft et al;&lt;/li&gt;&#xA;&lt;li&gt;as per the history with Sun, the Java bridge is present, providing Java with the same access to Cocoa as Objective-C; and&lt;/li&gt;&#xA;&lt;li&gt;various remnants of NextStep survive that will later disappear: the pre-CoreText font rendering system being probably the most prominent.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So to directly answer your questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Darwin underpins macOS/OS X; but&lt;/li&gt;&#xA;&lt;li&gt;public OS X releases predate Darwin releases by two years; and&lt;/li&gt;&#xA;&lt;li&gt;there is a visible technological evolution in OS X during which direct NextStep components are slowly replaced (the Workspace Manager's mutation into the Aqua desktop via MacOS 8 controls being an obvious example), though none of those components are provided in Darwin.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So I think it's most accurate to say that OS X is the descendant of NextStep, albeit quite far removed by the time — four years after NeXT's acquisition — that it finally became a consumer product, and Darwin is a spin-off of OS X.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(and if I've been inconsistent in my capitalisation of NeXT/Next, it's because the company was famously indecisive)&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-03-04T17:40:42.387" LastActivityDate="2019-03-04T17:40:42.387" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9299" PostTypeId="2" ParentId="6281" CreationDate="2019-03-04T16:25:16.023" Score="1" Body="&lt;p&gt;One of my college classmates had, circa 1990, a CP/M laptop that had, if I recall, 128KB (it might have been 64KB) of RAM, some of which could be used as a RAM disk, along with &quot;ROM disk&quot; containing the OS and some applications.  Data could be saved to permanent media either using a cassette interface, a serial port, or a 300-baud modem (a terminal program was included on the ROM disk).  Since I didn't have a phone line in my room nor a portable modem, I used that laptop to download some software from a BBS whose startup banner advertised its new 9600 baud modem, which I then transferred via serial port to a PC that had a floppy drive.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-03-04T16:25:16.023" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9300" PostTypeId="1" AcceptedAnswerId="9303" CreationDate="2019-03-04T19:17:56.977" Score="19" ViewCount="2751" Body="&lt;p&gt;3.5&quot; floppy disks, in the transition from 720K to 1.44M, changed the actual coating to a different compound that was magnetically 'stiffer'. This was necessary to support the higher density, but meant the old disks could not support the new high-density format even if used in a new drive. A more subtle and much nastier problem: if you formatted a new disk in an old drive, everything would seem fine, but the information would not have been recorded strongly enough, and might fade over the next few days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5.25&quot; floppies made several format transitions that together accomplished an order of magnitude capacity increase until the final 1.2M format. Did any of these transitions involve a similar change in the actual coating? Or did the disks themselves stay interchangeable apart from issues of hard versus soft sectors?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-03-05T16:48:36.873" Title="Did 5.25&quot; floppies undergo a change in magnetic coating?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;floppy-disk&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9301" PostTypeId="1" AcceptedAnswerId="9302" CreationDate="2019-03-04T20:01:09.790" Score="9" ViewCount="879" Body="&lt;p&gt;I don't really know what the round object is, but it certainly resembles an old-time steering wheel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This image was &lt;a href=&quot;https://www.codeproject.com/Articles/30725/Cropping-Images&quot; rel=&quot;noreferrer&quot;&gt;used as an example at this page&lt;/a&gt;. I don't know what its original source was, it is uncited.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MvUVX.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MvUVX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not even entirely certain this is even a computer. The gauges suggest it could perhaps be an industrial control system. On the other hand there is a keyboard &quot;terminal&quot; with some kind of printer output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, obviously I don't know much - but I am interested in what this computer is, and what that particular device is for.&lt;/p&gt;&#xA;" OwnerUserId="11795" LastActivityDate="2019-03-05T07:03:02.883" Title="Does this computer have a steering wheel?" Tags="&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9302" PostTypeId="2" ParentId="9301" CreationDate="2019-03-04T20:44:19.107" Score="22" Body="&lt;p&gt;Via &lt;a href=&quot;https://tineye.com/&quot; rel=&quot;noreferrer&quot;&gt;TinEye&lt;/a&gt;, I found this image on a Snopes FACT CHECK page: &lt;a href=&quot;https://www.snopes.com/fact-check/does-not-compute/&quot; rel=&quot;noreferrer&quot;&gt;Claim:   Photograph shows RAND Corporation’s 1954 design for a home computer&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a hoax image, a composite of a submarine manoeuvring room console used in a FARK.com image modification competition in 2004.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2019-03-05T03:30:59.797" LastActivityDate="2019-03-05T03:30:59.797" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9303" PostTypeId="2" ParentId="9300" CreationDate="2019-03-04T20:56:46.057" Score="29" Body="&lt;p&gt;The main technical parameter for a floppy disk's coating is its &lt;em&gt;coercivity&lt;/em&gt;, i.e. the resistance of ferromagnetic matter to withstand demagnetization. Coercivity is measured in &lt;em&gt;Oersted&lt;/em&gt;, after Hans Christian Ørsted, a Danish physicist who discovered the magnetic impact of electrical current.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;5¼&quot; disks storing 360K and 720K (SD and DD) used a coating with a coercivity of 300 Oersted.&lt;/li&gt;&#xA;&lt;li&gt;5¼&quot; disks storing 1.2M used a coating with a coercivity of 600 Oersted.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So yes, the coating was changed to support the HD format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference between 5¼&quot; DD and HD coating is much larger than the same difference between 3½&quot; DD and HD media - which are 660 Oe and 720 Oe, respectively. &lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="7946" LastEditDate="2019-03-05T16:48:36.873" LastActivityDate="2019-03-05T16:48:36.873" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9305" PostTypeId="2" ParentId="9281" CreationDate="2019-03-04T21:20:02.290" Score="3" Body="&lt;p&gt;The design of both SRAM and ROM arrays will involve trade-offs among size, speed, dynamic current consumption (energy consumed on each access), and static current consumption (energy consumed when inactive).  The most compact way of designing a ROM would treat the storage as a grid where about half of the address bits would select a row, and the entire contents of that row would be fed to a column decoder that would use the remaining address bits to select the data from one of the columns.  This would, however, waste energy by selecting all of the transistors on that row, rather than just the ones for the columns of interest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Energy efficiency could be improved in many cases by capturing multiple bytes into a latch, and having subsequent accesses within the same group of bytes simply output the contents of that latch.  Doing this could also improve speed if the ROM were used in a system that could exploit such performance benefits.  In practice, however, the cost of trying to exploit the speed benefit would often be too great to make the effort worthwhile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If addresses used by a DRAM will have to go through a DRAM controller chip, having that chip observe whether the row portion of an address matches that of previous one will generally be fairly straightforward, and won't require sending signals anywhere they don't have to go anyway.  Further, since DRAM controllers need a clock which is faster than the rate at which memory cycles are performed (to allow memory cycles to be broken into at least three distinct operations), a DRAM controller could &lt;em&gt;synchronously&lt;/em&gt; indicate that a memory access may be terminated early.  Unless a ROM were fed a clock that's faster than the rate of memory accesses, it would be difficult to reliably determine before the start of each cycle whether the previous one should be considered &quot;complete&quot;.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-03-04T21:20:02.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9306" PostTypeId="1" AcceptedAnswerId="9307" CreationDate="2019-03-04T23:27:44.330" Score="2" ViewCount="330" Body="&lt;p&gt;In the Wikipedia &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Time-sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;article&lt;/a&gt; for time sharing, it says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The &quot;state&quot; of each user and their programs would have to be kept in the machine, and then switched between quickly. This would take up computer cycles, and on the slow machines of the era this was a concern. However, as computers rapidly improved in speed, and especially in size of core memory in which users' states were retained, the overhead of time-sharing continually decreased, relatively speaking.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The fact that overhead decreased with increased core memory seems to imply there was a sort of swap file that needed to be used if memory was limited, temporarily moving data from memory to long term storage like tape and then back again. Is this how it worked? If not, how did these systems distribute memory among their users?&lt;/p&gt;&#xA;" OwnerUserId="8856" LastActivityDate="2019-03-06T12:37:48.940" Title="'Swap file' on early time sharing machines" Tags="&lt;history&gt;&lt;memory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9307" PostTypeId="2" ParentId="9306" CreationDate="2019-03-05T00:01:08.343" Score="5" Body="&lt;p&gt;In early timesharing systems, there was no attempt to keep more than one job/process in core at any time, since there wasn't enough core.   Context switching involved writing one job out to secondary storage, and reading another one in. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondary storage could be conventional tape, block-addressable tape (LINCtape, DECtape), disk, or drum, in increasing order of preference.  This storage is the &quot;swap file&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With more core, you could consider keeping more than one job in core at the same time.  The division was straightforward: the kernel/monitor/exec (terms vary) kept track of who owned what.  Generally, the allocation was first-come first-served, possibly with limits on what you could ask for. The core allocation for a particular job would typically be one or two (machine-dependent decision) contiguous pieces - this is before paged or segmented memory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were lucky, the hardware had mechanisms to prevent a job from accessing outside its own allocation.  Sometimes jobs needed to be shuffled to obtain contiguous space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edited&lt;/em&gt; to add &lt;a href=&quot;http://www-formal.stanford.edu/jmc/history/timesharing/timesharing.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link to a paper from McCarthy&lt;/a&gt;, written in 1983, recalling his early ideas on timesharing.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-03-06T12:37:48.940" LastActivityDate="2019-03-06T12:37:48.940" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9308" PostTypeId="2" ParentId="9281" CreationDate="2019-03-05T01:50:55.610" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does fast page mode apply to ROM?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It can do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.cypress.com/file/202491/download&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cypress Parallel NOR Flash Memory&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Page mode interface provides faster read access speed for random&lt;/strong&gt;&#xA;  &lt;strong&gt;locations within a page&lt;/strong&gt;. Initial access time is typically 70 to 120&#xA;  ns. Access time within a page is typically 25 ns. Figure 2 shows the&#xA;  page read timing diagram.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lUF0G.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lUF0G.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However high-speed parallel Flash ROM is a relatively development that was not available in the seventies and eighties. Also, unlike video RAM, ROMs were not expected to continuously output video data during CPU reads, so Page mode offered no advantage over just having a normal access time fast enough for the CPU.   &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...at least it could've been used for fetching bitmaps for cartridge&#xA;  games.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It &lt;em&gt;could&lt;/em&gt; have, but such use would have been very limiting because the ROM would either have to be dedicated to video output or 'dual ported' for access by both the CPU and video display circuit, and to take full advantage of Page mode the graphics data would have to be page-aligned (not easy to achieve with randomly positioned graphic blocks). Video RAM is needed for bit-addressable graphics anyway, so simply copying image data from ROM to RAM is easier and more flexible.               &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-03-05T01:50:55.610" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9310" PostTypeId="2" ParentId="194" CreationDate="2019-03-05T16:23:01.590" Score="4" Body="&lt;p&gt;The original Macintosh II (16MHz 68020) supported the MC68851 MMU. We got a big batch of these at Virginia Tech in the fall of &lt;strong&gt;1987&lt;/strong&gt;. It &lt;em&gt;looks&lt;/em&gt; like it still might be possible to run Debian on this hardware, although it would surely be painful.&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2019-03-05T16:23:01.590" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9313" PostTypeId="2" ParentId="9294" CreationDate="2019-03-05T20:21:18.903" Score="2" Body="&lt;p&gt;I will add a bit to the stories above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A key issue is the difference between NEXTSTEP (yes,all caps), OPENSTEP and OpenStep.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NEXTSTEP (NS) was the original system on the NeXT platform, and its UI, and it's programming system. I have yet to work on another machine that is even &lt;em&gt;remotely&lt;/em&gt; as integrated as this system was in the early 1990s - one might compare to VisualStudio under .Net, but even then .Net has a profusion of different libraries and systems whereas in NeXT there was generally one way to do something and it often did what you wanted in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the machines basically stopped selling, NeXT began a porting effort to run NEXTSTEP on new platforms, initially the 88000. As the 88k floundered, they took a wider view and decided to port it to basically any RISC platform. This, in turn, led to partnerships with other vendors which became OpenStep (OS). OS is essentially NEXTSTEP with the underlying OS separated out so that it could (theoretically) run on any reasonably Unix-like OS. To do this, calls to the operating system that were baked into the original NS system were separated out into a compatibility later, and a number of basic objects went with it, including things like NSString, so they could be implemented on those platforms. One of those platforms was the original NeXT boxes (and planned RISC replacements), in which case it was very confusingly referred to as OPENSTEP as a replacement for NEXTSTEP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was this later system, OpenStep, that forms the basis of the modern macOS. This is why earlier versions of Cocoa had Foundation and AppKit, which were the two layers of OS. These were slowly re-merged (through developer-kit-level tricks) and under Swift are largely invisible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remain of the opinion that Cocoa/OpenStep/NEXTSTEP remains the best development system I've touched. In .Net I'm constantly cursing even the most basic objects for what amounts to lazy design, obvious missing features, and too many sub-par ways to do something when all you need is one good way. Even with all the tribulations of Swift (which I consider a complete mistake) and the performance issues and bugs of Xcode, development on the mac remains a joy.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-03-05T20:21:18.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9314" PostTypeId="1" CreationDate="2019-03-05T21:20:59.713" Score="1" ViewCount="332" Body="&lt;p&gt;I've read that it should be possible to push the SE/30 to its maximum RAM capacity with eight pieces of 16 MByte, 30-Pin SIMMs. I've never seen such a machine in the wild. Neither with 64 or 80 MB. Memory test takes a notable amount of time when having 16/20 MB RAM in it. I wonder how long a memory test with full blown 128 MB would take. I'd prefer first-hand real-world measures with a stop watch, not a theoretical calculation.&lt;/p&gt;&#xA;" OwnerUserId="10295" LastEditorUserId="4025" LastEditDate="2019-03-06T02:45:48.723" LastActivityDate="2019-06-04T20:05:45.890" Title="How much time does a Mac SE/30 with 128 MB of memory take for its power-on memory test?" Tags="&lt;memory&gt;&lt;apple-macintosh&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9315" PostTypeId="1" CreationDate="2019-03-05T22:15:25.910" Score="4" ViewCount="364" Body="&lt;p&gt;The Super FX coprocessor, released with Star Fox in 1993, provided 3D rendering capabilities that were absent from the SNES itself. Given that 3D gaming was quite widespread by the late eighties, it seems unlikely the omission of such capabilities from the base console (apart from the 'mode 7' background affine transformation) was because no one at Nintendo thought of them at the time, more likely because they could not be developed by the 1990 release date, and even more likely because a larger graphics chip would have gone over the chip area budget at that time. Presumably an extra three years of Moore's law made it possible to pack the extra circuits into a smaller, cheaper chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How many transistors are in the Super FX, compared to the base Super PPU?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="2123" LastEditDate="2019-03-07T10:49:16.413" LastActivityDate="2019-03-07T10:49:16.413" Title="How many transistors in the Nintendo Super FX chip?" Tags="&lt;nintendo&gt;&lt;chip&gt;&lt;snes&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9316" PostTypeId="2" ParentId="6281" CreationDate="2019-03-06T07:10:06.893" Score="6" Body="&lt;p&gt;After some search I found that &lt;a href=&quot;https://en.wikipedia.org/wiki/Coleco_Adam&quot; rel=&quot;noreferrer&quot;&gt;Coleco Adam&lt;/a&gt; could use CP/M on its tape stations. These were not ordinary audio cassette players, but Digital Data Packs that differed slightly from standard audio cassettes (Thicker tape and some holes extra).&#xA;I have verified with an emulator that CP/M 2.2 can boot from these DataPacks, but I have not so far verified how slow it should be. Also a full test was not possible, since the keyboard encoding in the emulator didn't work properly in my setup.&lt;/p&gt;&#xA;" OwnerUserId="10565" LastEditorUserId="4921" LastEditDate="2019-03-06T14:59:11.437" LastActivityDate="2019-03-06T14:59:11.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9317" PostTypeId="1" CreationDate="2019-03-06T10:09:12.890" Score="3" ViewCount="332" Body="&lt;p&gt;The Super FX co-processor was, according to Wikipedia and every other source I can find, a custom designed RISC chip made by Argonaut Games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Argonaut was a small British company and back in the late 80s developing a custom RISC CPU was a very, very complex task. RISC was fairly new, and high speed CPU design (the Super FX ran at 21 MHz, pretty fast for the time) was far from trivial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did Argonaut do all the work themselves? Conceptual design, electrical design, internal layout, testing, certification for EMC etc. Or was some other company involved? Often such work is farmed out, based on a design document, to an ASIC design specialist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, has anyone decaped a Super FX chip to see if there are initials or logos on the die? Is the RISC CPU based on some other design, as for example the SNES CPU was based on the 65C816.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="2123" LastEditDate="2019-03-07T09:43:32.133" LastActivityDate="2019-03-07T09:43:32.133" Title="Who developed the Super FX co-processor?" Tags="&lt;nintendo&gt;&lt;gaming&gt;&lt;snes&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9318" PostTypeId="1" AcceptedAnswerId="9319" CreationDate="2019-03-06T10:49:47.777" Score="18" ViewCount="3867" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Cray-1&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Cray-1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Cray-1 was built as a 64-bit system, a departure from the 7600/6600, which were 60-bit machines (a change was also planned for the 8600). Addressing was 24-bit, with a maximum of 1,048,576 64-bit words (1 megaword) of main memory, where each word also had 8 parity bits for a total of 72 bits per word.[10] There were 64 data bits and 8 check bits.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It seems to me by the nature of parity, it should suffice to have one bit of overhead per word, rather than eight. I can understand on something like an 8088/87, you might be stuck with 1/8 because the memory system deals in eight bits at a time, but why is it that way on a 64-bit machine?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-03-29T19:51:45.593" Title="Why did the Cray-1 have 8 parity bits per word?" Tags="&lt;hardware&gt;&lt;memory&gt;&lt;cray&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9319" PostTypeId="2" ParentId="9318" CreationDate="2019-03-06T11:16:41.057" Score="29" Body="&lt;blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There were 64 data bits and 8 check bits.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It seems to me by the nature of parity, it should suffice to have one bit of overhead per word, rather than eight. [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What you refer to here is a simple single bit parity. Basically counting the number of ones (even parity) or zeros (odd). Such a mechanism can only detect an odd number of bit flips (1 or 3 or 5 or ... flipping). Even numbers of flips can't be detected and will result in undetected computing errors.&lt;/p&gt;&#xA;&lt;p&gt;What the Cray uses is a parity system based on &lt;a href=&quot;https://en.wikipedia.org/wiki/Hamming_code&quot; rel=&quot;noreferrer&quot;&gt;Hamming&lt;/a&gt; encoding. Encoding parity this way allows detection of multiple bit errors within a word and even correction of these on the fly. The 8-bit code used was able to correct single bit errors (SEC) and detect double error (DED).&lt;/p&gt;&#xA;&lt;p&gt;So while a machine with a single bit parity can detect single bit flips, it will always fail on double flips. Further, even if an error is detected, the only solution is to halt the program. With SEC-DED, a single error detected will be recovered (final) on the fly (at cost of maybe a few cycles) and a multi-bit error will halt the machine.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I can understand on something like an 8088/87, you might be stuck with 1/8 because the memory system deals in eight bits at a time, but why is it that way on a 64-bit machine?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because it's still just 1/8th, but now with improved flavour :))&lt;/p&gt;&#xA;&lt;p&gt;Considering the quite important function of invisible error correction, the question is rather why only 8. Longer codes would allow to detect even longer errors and multi-bit corrections. With the 1 Ki by 1 RAMs used (Fairchild 10415FC), any width could have been made. Then again, while the Cray 1 architecture shows a switch to the 'new' standard of 8 bit units - so using 8 parity bits comes naturally. Doesn't it?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Remark#1&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Eventually it's the same development the PC took, just instead of going from 9 bit memory (SIMM) over 36 bit (PS/2) to today's 72 Bit DIMM, the Cray-1 leapfrogged all of this and started with 72 Bit right away.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Remark#2&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Seymour Cray is known to have said that 'Parity is for Farmers' when designing the 6600. While this quote was famous in inspiring the reply 'Farmers buy Computers' when parity got introduced with the 7600, not may know what he was referring to on an implied level: &lt;strong&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Doctrine_of_parity&quot; rel=&quot;noreferrer&quot;&gt;Doctrine of Parity&lt;/a&gt;&lt;/strong&gt;, a US policy to make farming profitable again during and after the great depression - a policy that to some degree still results in higher food prices in the US than in most other countries.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Remark#3&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Cray Y-MP of 1990 even went a step further and added parity to (most) registers. Also the code was changed to enable double-bit correction and multi-bit detection.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-03-07T21:21:52.197" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9320" PostTypeId="1" AcceptedAnswerId="9321" CreationDate="2019-03-06T13:51:24.350" Score="6" ViewCount="2242" Body="&lt;p&gt;I was recently playing on a friend's &lt;a href=&quot;https://www.nintendo.com/nes-classic/&quot; rel=&quot;noreferrer&quot;&gt;NES Classic&lt;/a&gt;, and noticed that the controller ports look similar to the ones on a Wii remote (where you can plug in the Numchuck or Class Controller). Keep in mind that these ports work with original NES controllers, so this wasn't Nintendo reusing its designs (at least not that design specifically). Upon plugging in a Class Controller (Wii Classic Controller, designed for the Wii controller), I was surprised to see that it actually worked, and thought it was an authentic NES controller. Now, I don't have an original NES to test this on, but are the controller ports from the original NES identical to the ones on the Wii remote?&lt;/p&gt;&#xA;" OwnerUserId="10751" LastActivityDate="2019-03-06T14:26:05.097" Title="Is the NES controller port identical to the port on a Wii remote?" Tags="&lt;nintendo&gt;&lt;ports&gt;&lt;backward-compatibility&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9321" PostTypeId="2" ParentId="9320" CreationDate="2019-03-06T14:26:05.097" Score="11" Body="&lt;p&gt;The two consoles do have different controller ports. The NES Classic Edition is not directly compatible with original NES controllers, but &lt;a href=&quot;https://en-americas-support.nintendo.com/app/answers/detail/a_id/17341/~/which-controllers-are-compatible-with-the-nes-classic-edition%3F&quot; rel=&quot;noreferrer&quot;&gt;it does work with the Wii Classic Controller&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original NES uses a 7-pin connector:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mDLV6.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mDLV6.jpg&quot; alt=&quot;original NES console&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NES Classic Edition does not:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HLvty.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HLvty.jpg&quot; alt=&quot;NES Classic console&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="12052" LastActivityDate="2019-03-06T14:26:05.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9322" PostTypeId="2" ParentId="1718" CreationDate="2019-03-06T16:13:16.133" Score="3" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1620&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 1620&lt;/a&gt;.  Not as early as the 702 mentioned in a different answer - but the earliest computer I've had direct use of (so this answer is based on hard-won knowledge).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machine's memory stored decimal digits with a separate &quot;flag&quot; bit.  There was no fixed &quot;word length&quot;.  Every arithmetic instruction (and most others, maybe all, I don't remember) operated on &lt;em&gt;variable length&lt;/em&gt; fields delimited at the low order digit by a digit having the flag bit on.  You addressed the lowest addressed digit: the high order digit.  (We'd call that big-endian today but that term wasn't available then.) (The other use of the flag bit was at the high order digits: if it was on that was a negative number.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you could do arithmetic on numbers of &lt;em&gt;any length whatsoever&lt;/em&gt;: true multi-precision arithmetic at the hardware level!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With only one minor caveat:  The maximum memory available on an IBM 1620 was 60,000 decimal digits, and both operands (as well as your program!) had to fit in that space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a related note: The cheaper models of the 1620 didn't even have true arithmetic circuits.  What they had was a lookup table at a specific location in lower memory.  That table had to be loaded with values for proper base-10 arithmetic.  And if you pervertedly &lt;em&gt;changed&lt;/em&gt; that table you could do arithmetic in other bases, e.g., base 8 (octal).  (The linked wikipedia article talks about this.)  But it wasn't really practical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 1620 I used was a Model I with the full 60,000 digit memory.  It also had a console typewriter, card reader/punch, a line printer, and a massive disk drive.  (I mean the &lt;em&gt;drive&lt;/em&gt; was &lt;em&gt;massive&lt;/em&gt;: It was like a heavy washing machine.  It would walk around the floor to the length of its cables if you ran a funny program that just did a seek to the inner cylinder, then a seek to the outer cylinder, and then repeat forever.) It's capacity was around 2 megadigits - and I guess that was pretty massive too, for its time.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Personal note: This was one of the first two computers I ever programmed.  The local community college had one and they let me hang out in the &quot;computer lab&quot; when I was in high school. It was already totally obsolete, but it's what was available to them - and me. I programmed it in assembly and Fortran II.  Lot's of fun!  They also had several terminals connected to the school district's 360 mainframe which were hard-wired to APL.  So that was the other first computer I ever programmed: An APL machine.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Bonus: Here's an &lt;a href=&quot;http://www.starringthecomputer.com/appearance.html?f=1&amp;amp;c=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;old IBM 1620 front panel appearing in the movie &lt;em&gt;Colossus: The Forbin Project&lt;/em&gt;&lt;/a&gt; as the control panel of the computer which &lt;em&gt;took over the world!&lt;/em&gt;  Look at the blinkin' lights!)&lt;/p&gt;&#xA;" OwnerUserId="332" LastEditorUserId="332" LastEditDate="2019-03-06T16:30:50.637" LastActivityDate="2019-03-06T16:30:50.637" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="9323" PostTypeId="2" ParentId="9318" CreationDate="2019-03-06T19:09:48.730" Score="12" Body="&lt;p&gt;After the first Cray-1 was built, some calculation determined that the time between failures would be greatly extended by having a single-error-correction-double-error-detection (SECDED) without much cost in speed. The point is that with large memory, random single bit errors occur every few hours; with SECDED, it's every few years or so.&lt;/p&gt;&#xA;" OwnerUserId="12055" LastActivityDate="2019-03-06T19:09:48.730" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9324" PostTypeId="2" ParentId="6620" CreationDate="2019-03-07T00:37:53.683" Score="12" Body="&lt;p&gt;I was designing computer housings back in &quot;the day&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plastic cases were comparatively cheap in volume, but challenging to bring to market.   The technology of choice was structural foam.   It was strong but thick,  up to about 1/4 inch (6 mm) thick.  In the basic form, it required painting,  but there was a co-extrusion process that would inject at the same time both the foam a skim-coat of ABS.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thickness caused cooling problems and dimples at intersections, so the molds were complex to cool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even so, the molds for structural foam were relatively cheap because the injection pressures were much lower that injecting straight ABS.  With lower pressures the mold could be made of aluminum rather than steel, although with lower tool life.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, making the molds took a long time.  CNC was not as advanced, nor was CAD.  I was quoted over 26 weeks for a cheap and fast structural foam mold set.  Instead, we went with hand laid-up fiberglass.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A molded plastic cabinet improved the appearance of the product, but it also spoke about the company.   It showed that the company had been around long enough to make molds, and was capitalized well enough to pay the cost.   The company was a grown up in a world where computer companies came and went weekly.&lt;/p&gt;&#xA;" OwnerUserId="10500" LastActivityDate="2019-03-07T00:37:53.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9325" PostTypeId="1" CreationDate="2019-03-07T08:12:57.500" Score="2" ViewCount="449" Body="&lt;p&gt;I'm hoping this question belongs here as this is the closest site I could find that matched my situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many years ago, around late 2003 or 2004, I came across this electronic toy that sort of functioned like a Bop It or Torx. It was dubbed the Face Bop It because it resembled the shape of a face on a pie. The top part consisted of a hat or a head with convex lined ridges representing hair. One ear had a rubber duck antenna attached to it. The nose felt more like the hands of a clock that sprang anticlockwise, and the mouth opened to make a smiley face.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The objective of the game was to pop in any of these components or turn the nose whenever they popped out. If you took too long, or if one of the parts were jammed, it would make a low buzzing sound and make three 'twew-twew-twew' sounds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, since I am completely blind, I could not identify any writing on the back, nor would I be able to identify it based on images. I'm hoping someone here knows what this toy is and can send me information about what it's officially called, who made it, and any more information that would prove useful.&lt;/p&gt;&#xA;" OwnerUserId="12062" LastEditorUserId="10854" LastEditDate="2019-03-07T12:29:26.557" LastActivityDate="2019-03-07T12:29:26.557" Title="Identifying an old game from the early 2000s" Tags="&lt;identify-this-game&gt;&lt;chip&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9326" PostTypeId="2" ParentId="9325" CreationDate="2019-03-07T09:24:41.553" Score="4" Body="&lt;p&gt;The &lt;a href=&quot;https://toysit.com/heads-up-game-toy/&quot; rel=&quot;noreferrer&quot;&gt;Hasbro Heads Up&lt;/a&gt; from 2000 seems to match your description. Its right ear (on your left as you face it) resembles a rubber duck antenna, and the other ear looks like some kind of knob or the mouthpiece of a trumpet. The hair consists of 4 ridges on the hairpiece.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2019-03-07T09:24:41.553" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9327" PostTypeId="1" CreationDate="2019-03-07T12:43:07.503" Score="7" ViewCount="987" Body="&lt;p&gt;I seem to remember some demo, or a game, which displayed 26 rows of text (that's one more than the usual text mode resolution of 40x25). My memory of it is very hazy, but at least is corroborated by &lt;a href=&quot;https://stackoverflow.com/a/23839170/5394409&quot;&gt;this answer on our sister site&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How exactly is that effect achieved? Is it related to the trick that opens up the top/bottom borders? Can both of these tricks be used at once?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-11-16T15:57:36.603" Title="Can the Commodore 64 display 26 rows of text?" Tags="&lt;commodore-64&gt;&lt;graphics&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9328" PostTypeId="1" AcceptedAnswerId="9330" CreationDate="2019-03-07T15:22:28.433" Score="13" ViewCount="974" Body="&lt;p&gt;Some subroutine calls on PDP-11 machines would be coded with the arguments appearing immediately after &lt;code&gt;JSR&lt;/code&gt; or &lt;code&gt;EMT&lt;/code&gt; instruction, something like this (apologies for not knowing the exact MACRO syntax):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    jsr r5,WRITE_STRING&#xA;    .byte 'This is some string'.'0'&#xA;continue:&#xA;    ; do stuff&#xA;    rts pc&#xA;&#xA;WRITE_STRING:&#xA;    movb (r5)+,r0&#xA;    beq  done&#xA;    .PRINT r0&#xA;    br   WRITE_STRING&#xA;done:&#xA;    inc r5&#xA;    bic #1,r5&#xA;    jmp (r5)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;jsr&lt;/code&gt; instruction sets &lt;code&gt;r5&lt;/code&gt; to point to the beginning of an ASCIZ string that is located in-line in the code, right after the &lt;code&gt;jsr&lt;/code&gt;. The &lt;code&gt;WRITE_STRING&lt;/code&gt; subroutine then reads the bytes pointed to by &lt;code&gt;r5&lt;/code&gt; and prints them out until the terminating zero is found. &lt;code&gt;r5&lt;/code&gt; is then aligned property, and control is returned to the caller with &lt;code&gt;jmp (r5)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were variants of this calling conventions; for instance the arguments could be indirect, in which case &lt;em&gt;pointers&lt;/em&gt; to the actual arguments would be inlined in code, rather than the arguments themselves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there a name for this in-line argument technique?&lt;/p&gt;&#xA;" OwnerUserId="3465" LastActivityDate="2019-09-22T07:15:05.997" Title="Does the in-code argument passing conventions used on PDP-11's have a name?" Tags="&lt;pdp-11&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9329" PostTypeId="2" ParentId="9328" CreationDate="2019-03-07T15:43:32.063" Score="5" Body="&lt;p&gt;I do not know any specific name here. It was usually called a &lt;em&gt;'Parameter List'&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be due to the fact that this way was more or less the standard handling on many early systems supporting subroutine calls. The need of special names usually only arises when additional methods come into use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its inherent benefit is that no additional parameter register is needed, as the return address is stored in the link register, which can then double as a parameter list pointer, only to be advanced while processing, and at the end holding the return address (after the parameter list) (*1). For mainframe systems it was the standard calling convention. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the stack for return address handling is a rather new development - compared with parameter passing - but even then it was used quite a lot. Just think the way &lt;a href=&quot;https://prodos8.com/docs/techref/calls-to-the-mli/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OS calls&lt;/a&gt; (*2) are made in Apple ProDOS.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - In fact, it wouldn't at all be weird to think of it as a stack pointer to access (and pop) the parameters - and when all parameters are removed it holds the return address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - MLI or Machine Language Interface in ProDOS lingo. Here the JSR to $BF00, the ProDOS entry point, is followed by a byte defining the function call and a word holding the address of a parameter block for this function.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2019-03-08T11:00:35.373" LastActivityDate="2019-03-08T11:00:35.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9330" PostTypeId="2" ParentId="9328" CreationDate="2019-03-07T16:10:02.263" Score="9" Body="&lt;p&gt;The older PDP-8 did similar.&amp;nbsp; It had only one register to speak of (the accumulator), so a subroutine that took several parameters would typically provide a set of values and/or pointers to values immediately after the call instruction (&lt;code&gt;JMS&lt;/code&gt;).&amp;nbsp; The called routine would increment the return address to access parameters, and finally to return to the caller just after the parameter block.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This text describes the parameter passing as &quot;in-line&quot;:&#xA;&lt;a href=&quot;https://people.cs.clemson.edu/~mark/subroutines/pdp8.html&quot; rel=&quot;noreferrer&quot;&gt;https://people.cs.clemson.edu/~mark/subroutines/pdp8.html&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-8 handbook &quot;Introduction to Programming&quot;, January 1969, page 3-19, item #6 describes it simply with the following:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The second number to be multiplied is brought into the subroutine by the &lt;code&gt;TAD I MULT&lt;/code&gt; instruction since it is stored in the location specified by the address that the &lt;code&gt;JMS&lt;/code&gt; instruction automatically stores in the first location of the subroutine &lt;em&gt;[i.e. the return address]&lt;/em&gt;.&amp;nbsp; &lt;strong&gt;&lt;em&gt;This is a common technique for transferring information to a subroutine.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The first instruction of a subroutine was where the return address is stored by the JMS instruction.&amp;nbsp; Thus, this word was used to pick up parameters as well as to return to the function's caller.&amp;nbsp; The PDP-8 had fixed size instructions and data words of 12-bits (word addressing only); it also supported a memory indirect addressing mode, and a memory increment operation, so this approach worked fairly well.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastActivityDate="2019-03-07T16:10:02.263" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9331" PostTypeId="2" ParentId="9327" CreationDate="2019-03-07T16:41:22.667" Score="7" Body="&lt;p&gt;No, the VIC chip couldn't do that. However, an equivalent effect was possible on at least two ways:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Sprites could be easily put to the top and bottom border (and, on a much harder way, also to the left and right). However, you can have at most 8 sprites in a single pixel row&lt;sup&gt;1&lt;/sup&gt;, which is not enough to cover a whole line (24 pixel * 8 = 192, which is smaller than the 320 px wide screen). More can you read about in &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/97/129&quot;&gt;this&lt;/a&gt; post.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There was a way to scroll down the whole screen with a pixel with some interrupt-based hack. There was a way to put characters (or graphical screen) to the bottom border on this way.&lt;sup&gt;2&lt;/sup&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;sub&gt;It is possible that also this limit can be somehow circumvented, but it is surely not easy.&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;sub&gt;I don't know, how did it work, but I can dig a youtube video for ask. Hopefully another answer will give more details.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="129" LastActivityDate="2019-03-07T16:41:22.667" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9332" PostTypeId="2" ParentId="9318" CreationDate="2019-03-07T18:40:23.100" Score="5" Body="&lt;p&gt;The extra bits are used to allow for error detection and correction (EDAC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This scheme is described in detail in: &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/cray/CRAY-1/HR-0004F_CRAY-1_Computer_Systems_Hardware_Reference_Manual_May82.pdf&quot; rel=&quot;noreferrer&quot;&gt;Cray 1 Hardware Reference Manual&lt;/a&gt; at page 5-5 (~168)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The use of EDAC in the Cray-1 is rather ironic given that Seymour Cray is (in)famous for once saying&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Parity is for farmers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which I think is a reference to farm subsides in Europe.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastActivityDate="2019-03-07T18:40:23.100" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9333" PostTypeId="1" AcceptedAnswerId="9334" CreationDate="2019-03-07T21:20:46.043" Score="7" ViewCount="375" Body="&lt;p&gt;I'm wondering how many computers were based on the MC88100 and MC88110 processors that were released commercially.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As of now, i've found the MVMe boards and Luna88K(+) computers exist, but that's about it, and am curious what other machines based on these processors exist.&lt;/p&gt;&#xA;" OwnerUserId="11724" LastEditorUserId="11724" LastEditDate="2019-03-07T23:23:35.253" LastActivityDate="2019-03-08T11:01:24.040" Title="What commercial computers were based on the MC88100 and MC88110?" Tags="&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9334" PostTypeId="2" ParentId="9333" CreationDate="2019-03-07T22:32:24.707" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm wondering how many computers were based on the MC88100 and MC88110 processors that were released commercially.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Quite some.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While many systems were based on Motorola's VME boards NVME187 (single CPU) and NVME188 (dual CPU) and thereof a lot of them were made by Motorola (like the Delta 8000 series) or using all Motorola components (like the standard VME System 900 housings), there were also dedicated designs not based on these boards. For example the &lt;a href=&quot;http://www.geekdot.com/m8120/&quot; rel=&quot;noreferrer&quot;&gt;Motorola 8120&lt;/a&gt;, a square box design, somewhat similar to a lower profile Apple Mac IIci/cx box.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As of now, I've found the MVMe boards and Luna88K(+) computers exist, but that's about it, and am curious what other machines based on these processors exist.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Beside Motorola's own systems (Delta 8000 and 8120) there were the&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/128781&quot; rel=&quot;noreferrer&quot;&gt;BBN TC2000&lt;/a&gt; systems, kind of an early massive parallel RISC system with up to 128 CPUs.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Data General m88k &lt;a href=&quot;https://en.wikipedia.org/wiki/Aviion&quot; rel=&quot;noreferrer&quot;&gt;AViiON&lt;/a&gt; family, covering everything from pizza box desktop machines (AV300) over bulky servers (&lt;a href=&quot;https://www.wolfeden.org/unix-museum/dg/av4k.html&quot; rel=&quot;noreferrer&quot;&gt;AV4000&lt;/a&gt;) to rack sized servers (AV9000).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Triton Dolphin systems (never seen one)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://moon.hanya-n.org/comp/luna/luna88k.html&quot; rel=&quot;noreferrer&quot;&gt;Omron Luna 88k workstations&lt;/a&gt; (click the links for pictures) mostly sold in Japan&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.encore-support.com/htmls/encore_91.htm&quot; rel=&quot;noreferrer&quot;&gt;Encore 91/93&lt;/a&gt; systems - kind of mini-rack systems on wheels.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Heck, even Next worked on an &lt;a href=&quot;http://www.nextcomputers.org/NeXTfiles/Images/Rare_NeXT_Hardware/NRW-NeXT_RISC_Workstation/&quot; rel=&quot;noreferrer&quot;&gt;88k based prototype&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Network_Computing_Devices_NCD-88k_X_terminal.jpg&quot; rel=&quot;noreferrer&quot;&gt;NCD&lt;/a&gt; as well as &lt;a href=&quot;https://www.computerwoche.de/a/tektronix-stellt-neues-x-terminal-vor,1144479&quot; rel=&quot;noreferrer&quot;&gt;Tektronix&lt;/a&gt; did build several 88k based X-terminals&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Not many 88k based computers actually exist as far as I know, maybe a dozen or two at most, but they are so obscure I basically cannot find anything about them.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'd add several trailing zeros here. Data General alone built more than 30 or so different models based on their 88k boards. They alone are good for more than 50k unit sales. Encore also made good sales, similarly everything based on Motorola's boards, not to mention the rather large number of NCR and Tektronix terminals. Just because a CPU and its computers were not much used on everybody's desktop installations doesn't make them tiny in sales.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2019-03-08T11:01:24.040" LastActivityDate="2019-03-08T11:01:24.040" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9335" PostTypeId="2" ParentId="2978" CreationDate="2019-03-08T02:00:04.650" Score="3" Body="&lt;p&gt;I know this is anecdotal, but here is my personal testimony:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I built many circuits interfacing with the User Port in my teens (mostly digital control circuits using the data lines), and I'm pretty sure I interfaced my 128 and 64 together by directly wiring the two user port's TX/RX TTL lines together in a crossover fashion(along with ground, of course), but it has been a long time, so I may be remembering incorrectly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do, however, specifically remember connecting two 300 baud modems to each other on many occasions, using a simple RJ-11 jumper cable.  I would simply send the off-hook AT command to each modem (and I think another set of commands to initiate handshaking), and the computers were able to communicate...&lt;/p&gt;&#xA;" OwnerUserId="11734" LastActivityDate="2019-03-08T02:00:04.650" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9336" PostTypeId="2" ParentId="9327" CreationDate="2019-03-08T07:37:19.927" Score="5" Body="&lt;p&gt;Mostly conforming peterh's answer here: more text lines aren't possible, but there are tricks to give the illusion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first option, using sprites, is quite limited, but ok if all you want is a 24 chars wide line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second option seems more plausible as it allows for a full/normal text line in the bottom border. It works by opening the borders and applying FLD (flexible line distance) somewhere. The VIC-II uses &quot;badlines&quot; to fetch data for a new character row, and these badlines are triggered when the lowest 3 bits of the raster line number equal the y-scroll. So you achieve FLD by constantly fiddling with y-scroll, therefore avoiding the badline until you're further down the screen. Of course, this means you're missing a text line somewhere in the middle of the screen instead.&lt;/p&gt;&#xA;" OwnerUserId="7040" LastEditorUserId="7040" LastEditDate="2019-03-08T07:45:30.950" LastActivityDate="2019-03-08T07:45:30.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9337" PostTypeId="2" ParentId="8869" CreationDate="2019-03-08T16:38:55.033" Score="2" Body="&lt;h1&gt;Multi-operand IMUL on x86&lt;/h1&gt;&#xA;&lt;p&gt;Not quite sure if it was &lt;em&gt;entirely&lt;/em&gt; driven by programming languages, but I believe they must have &lt;strong&gt;high influences&lt;/strong&gt; to Intel's decision&lt;/p&gt;&#xA;&lt;p&gt;Originally there were only &lt;code&gt;IMUL r/m16&lt;/code&gt; and &lt;code&gt;IMUL r/m8&lt;/code&gt; that output a product &lt;em&gt;twice as wide&lt;/em&gt; as the operands. However in reality modern high-level languages generally produce a multiplication result that has the &lt;strong&gt;same type&lt;/strong&gt; as the two operands unless you cast the them to a wider type. For example in C if we have &lt;code&gt;int a&lt;/code&gt; and &lt;code&gt;int b&lt;/code&gt; then &lt;code&gt;a*b&lt;/code&gt; will also have type &lt;code&gt;int&lt;/code&gt;. Same to most other languages. Doing a non-widening multiplication is also faster than getting the full result, so Intel added the 2 and 3-operand forms that don't calculate the high bits&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There are two additional forms for the IMUL instruction which do not fit the above pattern. The first is a two-operand version that follows the pattern for ADD:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; IMUL    r, r/m      ; d *= s (signed)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is a more traditional-looking two-operand instruction² that updates the destination register in place.&lt;/p&gt;&#xA;&lt;p&gt;There is even a (gasp) three-operand version similar to what you see in other processors.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; IMUL  r, r/m, i     ; d = s * t (signed)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This three-operand version accepts an immediate as the third operand, and it's the one the compiler typically generates. For example,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; IMUL  EAX, ECX, 212 ; EAX = ECX * 212 (signed)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;These additional forms produce only single-precision results, but that's what the C and C++ languages produce, so it fits well with those languages. If you need a double-precision result, then you can use the single-operand MUL and IMUL instructions.&lt;/p&gt;&#xA;&lt;p&gt;Note that there is no unsigned version of these additional forms. Fortunately, you can use the signed version for unsigned multiplication because the single-precision result is the same for both signed and unsigned multiplication. However, the flags are always set according to the signed result, so you cannot use them to detect unsigned overflow.&lt;/p&gt;&#xA;&lt;p&gt;In practice, this is not a problem because the C language doesn't give you access to the overflow flags anyway.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20190124-00/?p=100775&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Intel 80386, part 4: Arithmetic&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Since they're more flexible, fit perfectly with the type model, and don't care about signness (because non-widening multiplication is &lt;a href=&quot;https://stackoverflow.com/q/34377711/995714&quot;&gt;the same for signed and unsigned values&lt;/a&gt;), compilers began to use it exclusively for almost all multiplications. As a result, Intel &lt;a href=&quot;https://stackoverflow.com/q/14063599/995714#comment33750540_14063665&quot;&gt;focused to optimize even more for those forms of &lt;code&gt;imul&lt;/code&gt;&lt;/a&gt;. In fact nowadays single-operand &lt;code&gt;mul&lt;/code&gt; and &lt;code&gt;imul&lt;/code&gt; are very rarely used and may be slow on many μarchs. See &lt;a href=&quot;https://stackoverflow.com/q/42587607/995714&quot;&gt;Why is &lt;code&gt;imul&lt;/code&gt; used for multiplying unsigned numbers?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1981" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-05-26T12:42:44.643" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9338" PostTypeId="1" CreationDate="2019-03-10T20:12:44.030" Score="1" ViewCount="535" Body="&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=Ko4V3G4NqII&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt;, Steve Jobs introduces Mac OS X (in the year 2000), this is a snapshot from the video:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Bn2Z6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Bn2Z6.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He says that Darwin is the kernel for Mac OS X.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the following is a diagram of the Mac OS X architecture (from &lt;a href=&quot;https://en.wikipedia.org/wiki/Architecture_of_macOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/p5xq9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/p5xq9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The diagram shows that the kernel for Mac OS X is XNU (not Darwin), and that Darwin is XNU plus system utilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the term &quot;kernel&quot; have many definitions?&lt;/p&gt;&#xA;" OwnerUserId="12074" LastEditorUserId="3290" LastEditDate="2020-05-06T07:47:16.320" LastActivityDate="2020-05-06T07:47:16.320" Title="Why did Steve Jobs say that Darwin is a kernel?" Tags="&lt;history&gt;&lt;apple-macintosh&gt;&lt;operating-system&gt;&lt;terminology&gt;" AnswerCount="2" CommentCount="7" ClosedDate="2019-03-11T07:09:34.243" ContentLicense="CC BY-SA 4.0" />
  <row Id="9339" PostTypeId="2" ParentId="9338" CreationDate="2019-03-10T21:13:30.133" Score="13" Body="&lt;p&gt;The answer is simple, Jobs was simplifying for the media. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-03-10T21:13:30.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9340" PostTypeId="2" ParentId="9338" CreationDate="2019-03-10T23:16:16.953" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does the term &quot;kernel&quot; have many definitions?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I guess that's the core (SCNR) issue here. Kernel is a quite vague definition. It's even visible in aboves picture as Mach itself is defined as a kernel, and everything above (like file systems) services that are added later. Then again, above graphics tie the Mach kernel with services (from the BSD project/kernel) and call the result ('xnu') again a kernel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when more utilities get added and bundled as 'Darwin' it is an arbitary coice to call it OS or kernel. In fact, the term 'core OS' coined here (whatever that should mean) sounds much like an attempt to avoid writing again'kernel'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: What 'Kernel' means is an arbitrary decision for a vague concept.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is one of these &lt;em&gt;'I know it when I see it'&lt;/em&gt; kind of words, concept words, that are great for a generalized abstract discussion, but do not work for an in detail description.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for a concrete product, it's whatever parts the manufacturer calls so. And Jobs as CEO does hold some stake here, doesn't he?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/9339/6659&quot;&gt;as John Dallman already mentioned&lt;/a&gt; a term for simplification and marketing, bendable as needed, to sell the product with some techno babel aura)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-03-15T11:31:00.237" LastActivityDate="2019-03-15T11:31:00.237" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="9341" PostTypeId="1" CreationDate="2019-03-11T19:46:45.280" Score="9" ViewCount="385" Body="&lt;p&gt;In the movie &quot;Hidden Figures&quot;, NASA receives an &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_7090&quot; rel=&quot;noreferrer&quot;&gt;IBM 7090&lt;/a&gt; in 1961. What is the subsequent timeline of the primary computing means for flight planning and orbit calculation? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, what was the computer used by NASA in 1975 during the Apollo-Soyuz program?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a widespread boastful claim &lt;a href=&quot;https://en.wikipedia.org/wiki/BESM-6&quot; rel=&quot;noreferrer&quot;&gt;During the 1975 Apollo-Soyuz Test Project the processing of Soyuz orbit parameters was accomplished by a BESM-6 based system in 1 minute. The same computation for the Apollo was carried out by the American side in 30 minutes.&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;BESM-6 based system&quot; was, as a matter of fact, a combination of a BESM-6 with a newest multiprocessor data acquisition and processing system &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Soviet_computer_systems#Other&quot; rel=&quot;noreferrer&quot;&gt;AS-6&lt;/a&gt;, using the same element base as BESM-6, yielding about 10-15 MIPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How old was the &quot;American side&quot; hardware in 1975?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2019-07-24T23:41:13.883" Title="What is the timeline of NASA ground control computers?" Tags="&lt;history&gt;&lt;besm-6&gt;" AnswerCount="0" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9342" PostTypeId="2" ParentId="9327" CreationDate="2019-03-11T22:08:37.673" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How exactly is that effect achieved? Is it related to the trick that opens up the top/bottom borders? Can both of these tricks be used at once?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not only can both tricks be used together, they &lt;em&gt;must&lt;/em&gt; be used together. &lt;strong&gt;TLDR:&lt;/strong&gt; Open the borders, and scroll the entire image up and down at the right time to increase the vertical resolution.&lt;/p&gt;&#xA;&lt;p&gt;Three days ago I said:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;After thinking about it for a little while some theory has entered my brain, theory about how it could work. I'm not sure yet. I'll try and code it up later on in the week when I have time&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As promised:&lt;/p&gt;&#xA;&lt;p&gt;The trick involves &lt;code&gt;YSCROLL&lt;/code&gt;. This gives us a way to scroll the entire image up or down a little. The maximum distance is eight pixels, which is the height of one line of text.&lt;/p&gt;&#xA;&lt;p&gt;Usually when we meddle with &lt;code&gt;YSCROLL&lt;/code&gt; we also use &lt;code&gt;RSEL&lt;/code&gt; to reduce the vertical resolution by eight pixels, so that we don't get some glitchy stuff at the border of the screen. But this trick is different because we don't use &lt;code&gt;RSEL&lt;/code&gt; to reduce the resolution, but to increase it. And I'll describe how that works here.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;At the top of the screen, set &lt;code&gt;YSCROLL&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt; and set &lt;code&gt;RSEL&lt;/code&gt; to &lt;code&gt;1&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;At raster line 247 set &lt;code&gt;YSCROLL&lt;/code&gt; to &lt;code&gt;7&lt;/code&gt;. This means the VIC-II will blithely proceed to draw the previous 8 lines again. Of course, you could switch to a different bank or whatever to get different graphical data here.&lt;/li&gt;&#xA;&lt;li&gt;At raster line 249 set &lt;code&gt;RSEL&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt;. This removes the top and bottom borders. That's important because otherwise the last eight pixels get hidden under the border.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There's one limitation I can think of. It's the Color-RAM, which occupies exactly the same 40 locations for the 25th and 26th row. Maybe you can design around that limitation somehow, or maybe quickly copy some new data in to that location. Or of course use some mode that does not use color ram, such as the hires bitmap mode.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2020-11-16T15:57:36.603" LastActivityDate="2020-11-16T15:57:36.603" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="9343" PostTypeId="1" CreationDate="2019-03-11T22:30:19.560" Score="2" ViewCount="113" Body="&lt;p&gt;I am trying to set up a second-hand 1990s era Ascend/Lucent &quot;SuperPipe 155&quot; ISDN router for use with some of my 90s era computers, but I don't know the router's password and the instructions I found for resetting it to the system default are not working. Do any of you remember how this was done on this machine? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried the instructions in &lt;a href=&quot;https://www.tek-tips.com/viewthread.cfm?qid=407007&quot; rel=&quot;nofollow noreferrer&quot;&gt;this thread&lt;/a&gt; but they did not work. The NINDY (bootloader) code on my unit seems to be a bit different than described in that thread. The thread references an &quot;EF&quot; (erase flash) command, but that option does not show up in mine. The only similar option on mine is &quot;EP&quot; (menu description: erase program area). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Running EP does seem to erase the OS from the unit's flash memory; typing EF does nothing. After erasing the program area, I can install various versions of the OS using the DF command, but the configuration and password remain in place even after downgrading to 7.4.2 and then upgrading back to 9.1-144.1 or 9.1-144.3 as mentioned in the thread. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do any of you remember working with these and have any other ideas I could try? &lt;/p&gt;&#xA;" OwnerUserId="610" LastEditorUserId="6659" LastEditDate="2019-03-11T23:33:51.597" LastActivityDate="2019-03-11T23:33:51.597" Title="How to reset/recover password on Ascend/Lucent &quot;SuperPipe 155&quot; ISDN router" Tags="&lt;hardware&gt;&lt;network&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9345" PostTypeId="1" CreationDate="2019-03-12T16:44:17.220" Score="38" ViewCount="29416" Body="&lt;p&gt;Do you know which is the latest web browser compatible with Windows 95 / 98?&#xA;At the moment I have an Opera 10 working fine; it is very lightweight but very outdated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume that software that works in Windows 95 will work in Windows 98.&lt;/p&gt;&#xA;" OwnerUserId="11438" LastEditorUserId="11438" LastEditDate="2019-05-01T12:04:01.990" LastActivityDate="2021-03-19T09:29:47.243" Title="Latest web browser compatible with Windows 95 / 98" Tags="&lt;windows-98&gt;&lt;windows-95&gt;&lt;internet&gt;" AnswerCount="7" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="9346" PostTypeId="2" ParentId="9345" CreationDate="2019-03-12T17:42:59.733" Score="26" Body="&lt;p&gt;I have not tried any of these, not having a Windows 98 system, but a bit of research reveals:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Internet Explorer 6 SP1 was the last IE, in 2001.&lt;/li&gt;&#xA;&lt;li&gt;Firefox 2 was the last Firefox in 2006. &lt;/li&gt;&#xA;&lt;li&gt;Netscape 8 (2005) or Netscape 9 (2007) are available &lt;a href=&quot;http://sillydog.org/narchive/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Opera 10 (2009) seems to be the last available, &lt;a href=&quot;http://www.oldapps.com/opera.php?system=Windows_98&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Safari and Chrome never supported Windows 98.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Browsers carried on supporting Windows XP for much longer, because it was a better platform for software development and testing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This answer was written before the question was edited to add Windows 95. It's not safe to assume that anything which runs on '98 will run on '95; the reverse is more likely to be true. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-03-16T11:03:50.140" LastActivityDate="2019-03-16T11:03:50.140" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="9347" PostTypeId="2" ParentId="8869" CreationDate="2019-03-12T18:43:15.587" Score="3" Body="&lt;p&gt;Not &lt;em&gt;yet&lt;/em&gt; retro (as of 2019), but on topic: the ARM Cortex-M design was influenced by the C language (may also apply to Cortex-A and -R, but I don't have experience with them).&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;No assembly code is needed for startup. The hardware sets the initial stack pointer at reset and then the compiled code can execute without any &quot;magic&quot; (some exceptions to this may exist depending on the exact hardware).&lt;/li&gt;&#xA;&lt;li&gt;Interrupt handlers are just regular functions from compiler's point of view. They only require specific names, so that the linker can put their vectors in the right place for the NVIC (interrupt controller) to find them. The hardware takes care of stacking and unstacking of registers on ISR entry/exit. Compare that with other architectures (eg. AVR, MSP430, older ARM), where special compiler attributes are needed for interrupt handlers and the compiler has to emit extra code to handle entry/exit.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="12083" LastActivityDate="2019-03-12T18:43:15.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9348" PostTypeId="2" ParentId="9345" CreationDate="2019-03-12T21:06:04.843" Score="28" Body="&lt;p&gt;That latest web browser I am able to find is &lt;a href=&quot;https://retrosystemsrevival.blogspot.com/2018/05/k-meleon-74-windows-9x-edition.html&quot; rel=&quot;noreferrer&quot;&gt;K-Meleon 74 Windows 9x Edition&lt;/a&gt;. It was created in 2014, when the Pale Moon engine (Goanna) was backported for Windows 2000. It requires &lt;a href=&quot;http://kernelex.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;KernelEx&lt;/a&gt; (and &lt;a href=&quot;https://retrosystemsrevival.blogspot.com/2018/05/kernelex-45201617-updates.html&quot; rel=&quot;noreferrer&quot;&gt;the latest updates&lt;/a&gt;) and a rather beefy old machine to run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also experiment with other later browser versions on top of KernelEx, as it adds NT support to Windows 98. If not, then you're stuck with the official latest versions, of which Opera 10 is probably the best. &lt;/p&gt;&#xA;" OwnerUserId="11078" LastActivityDate="2019-03-12T21:06:04.843" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9349" PostTypeId="2" ParentId="9345" CreationDate="2019-03-12T23:37:19.843" Score="7" Body="&lt;p&gt;IE6 was the last Internet Explorer on Windows98 SE and IE5.5 with high encryption pack for Windows95. These were important for Citrix, and quite a bit of software leveraged IE6 dll's, notably Ultra-Edit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seamonkey 1.1.19 - March 2010, a bit Retro. Not as recent as a better answer.&lt;/p&gt;&#xA;" OwnerUserId="3733" LastActivityDate="2019-03-12T23:37:19.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9350" PostTypeId="1" AcceptedAnswerId="9352" CreationDate="2019-03-12T23:51:10.213" Score="2" ViewCount="289" Body="&lt;p&gt;For the nostalgia, I'm going through &lt;em&gt;Apple Pascal - A Hands-on Approach&lt;/em&gt; using AppleWin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are four disks, &lt;code&gt;pascal0&lt;/code&gt; through &lt;code&gt;pascal3&lt;/code&gt;, and for some reason &lt;code&gt;pascal0&lt;/code&gt; is missing a file called &lt;code&gt;SYSTEM.PASCAL&lt;/code&gt;. It's present on&lt;code&gt;pascal1&lt;/code&gt;, however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought I could boot a normal DOS disk, load &lt;code&gt;SYSTEM.PASCAL&lt;/code&gt; from &lt;code&gt;pascal1&lt;/code&gt;, and save it on &lt;code&gt;pascal0&lt;/code&gt;, but when I try to &lt;code&gt;catalog&lt;/code&gt; the &lt;code&gt;pascal1&lt;/code&gt; disk it produces gibberish and beeps. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how do I copy &lt;code&gt;SYSTEM.PASCAL&lt;/code&gt; from one disk to another? AppleWin has a two-disk-drive configuration. &lt;/p&gt;&#xA;" OwnerUserId="12086" LastActivityDate="2019-03-13T10:27:59.367" Title="How to transfer file from one disk to another in Apple //e (Applewin)" Tags="&lt;apple-ii&gt;&lt;apple-dos&gt;&lt;pascal&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9352" PostTypeId="2" ParentId="9350" CreationDate="2019-03-13T10:27:59.367" Score="4" Body="&lt;p&gt;You should download and use &lt;a href=&quot;https://a2ciderpress.com/features.htm#disks&quot; rel=&quot;nofollow noreferrer&quot;&gt;CiderPress&lt;/a&gt; which is a Swiss Army Knife tool for Apple disk images - It understands and supports the UCSD Pascal file system format and should be able to transfer a file from one disk image to the other.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2019-03-13T10:27:59.367" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9353" PostTypeId="2" ParentId="9260" CreationDate="2019-03-13T10:54:21.497" Score="1" Body="&lt;p&gt;Back in the days I owned a ZX spectrum clone (still working today). &#xA;My favorite game was the Elite and after the screen it loaded &quot;large&quot; ~35KByte file containing the game and it loaded in ~5 min That gives The MG cassette loading speed:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;35*1024 / 5*60 = ~119.4666 Byte/s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;counting just the useful data (no parity bits or CRC ands stuff so just useful data transfer rate).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the days we usually used 90min audio tapes giving approximate capacity of:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;119.4666 * 90 * 60 = 645120 Byte = 630 KByte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This matches my experience as latter on when I was transferring my old tapes onto floppies (5.25&quot; DS DD formated to ~420 KByte) single 90min MG tape used cca 1.5 floppies to store the same amount of data...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of coarse there where turbo loaders and comprimation loaders out there improving the total MG capacity even further.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-03-13T11:11:51.620" LastActivityDate="2019-03-13T11:11:51.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9354" PostTypeId="2" ParentId="9345" CreationDate="2019-03-13T11:57:54.753" Score="9" Body="&lt;p&gt;You could run &lt;a href=&quot;https://github.com/tenox7/wrp&quot; rel=&quot;noreferrer&quot;&gt;Web Rendering Proxy&lt;/a&gt; (&lt;a href=&quot;https://virtuallyfun.com/wordpress/2014/03/11/web-rendering-proxy-update/&quot; rel=&quot;noreferrer&quot;&gt;screenshots&lt;/a&gt;) on a server, the browser would just be displaying pre-rendered images with imagemaps.&lt;/p&gt;&#xA;" OwnerUserId="87" LastActivityDate="2019-03-13T11:57:54.753" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9355" PostTypeId="2" ParentId="9345" CreationDate="2019-03-13T14:17:04.523" Score="19" Body="&lt;p&gt;It very much depends on what you're trying to do - &lt;a href=&quot;https://lynx.invisible-island.net/release/&quot; rel=&quot;noreferrer&quot;&gt;Lynx&lt;/a&gt;'s latest release is from 2018, runs on Win95, and is &lt;em&gt;very&lt;/em&gt; lightweight, but, you know, lacks graphics.&lt;br&gt;&#xA;I also use &lt;a href=&quot;https://www.dillo.org/Compatibility.html&quot; rel=&quot;noreferrer&quot;&gt;Dillo&lt;/a&gt; on old machines when I just need Wikipedia. (Yeah, it does not have nice prebuilt Win binaries as far as I can tell.)&lt;br&gt;&#xA;// would've like to comment, but I lack the reputation!&lt;/p&gt;&#xA;" OwnerUserId="12093" LastActivityDate="2019-03-13T14:17:04.523" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9356" PostTypeId="1" AcceptedAnswerId="9359" CreationDate="2019-03-14T01:17:36.707" Score="11" ViewCount="1558" Body="&lt;p&gt;MS DOS Ver 1.0 did not have OS support for device drivers. &lt;strong&gt;DOS ver2&lt;/strong&gt; added support for device drivers in the config.sys file during boot with the &lt;strong&gt;&lt;em&gt;&quot;DEVICE=[path][filename][parameters]&quot;&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Did CP/M have OS support for device drivers? &lt;/li&gt;&#xA;&lt;li&gt;Did DOS ver1 leave device drivers out, or was DOS v2 device support a new advancement over CPM?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="447" LastEditDate="2019-03-15T07:20:18.630" LastActivityDate="2019-03-15T13:47:12.507" Title="Did CP/M support custom hardware using device drivers?" Tags="&lt;ms-dos&gt;&lt;software-development&gt;&lt;cp-m&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9357" PostTypeId="2" ParentId="9356" CreationDate="2019-03-14T02:00:43.723" Score="10" Body="&lt;p&gt;CPM 2.2, the most widely used and generally the progenitor of MS-DOS, supported only a few predefined devices via its BIOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These were:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;console input and output&lt;/li&gt;&#xA;&lt;li&gt;a listing device (printer) output&lt;/li&gt;&#xA;&lt;li&gt;a punch (presumable paper tape) output&lt;/li&gt;&#xA;&lt;li&gt;a reader (also paper tape) input&lt;/li&gt;&#xA;&lt;li&gt;various calls to control a mass storage device (floppy disk)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and that was that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No loadable device drivers, even though there were a few terminate and stay resident style things, I have no references for those. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, memory was so tight on these old machines that nobody wanted to load anything extra.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More info on the BIOS can be found here: &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/digitalResearch/cpm/2.2/CPM_2.2_Alteration_Guide_1979.pdf&quot; rel=&quot;noreferrer&quot;&gt;CPM 2.2 Alteration Guide&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4066" LastEditorUserId="4921" LastEditDate="2019-03-14T04:58:25.563" LastActivityDate="2019-03-14T04:58:25.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9358" PostTypeId="2" ParentId="9356" CreationDate="2019-03-14T07:33:41.237" Score="10" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did CPM support custom hardware using device drivers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, of course, that's what the BIOS was for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The title is somewhat misleading, as from the question body it seems you're asking about &lt;strong&gt;loadable&lt;/strong&gt; device drivers, where loadable means that drivers were loaded at startup (or later) from separate binaries and linked into the system to offer their services. Further it seems as if the question is about CP/M prior to 1981, the time MS-DOS was introduced, thus CP/M 2.2 and MP/M. Right?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did CPM have OS support for device drivers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Yes, as part of the customized BIOS.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No, CP/M did not have loadable device drivers (*1).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All drivers were a part of the BIOS (Assembly) code. DR supplied sample code to customize the BIOS for system builders (buyers of a non dedicated CP/M licence).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding new devices worked much the same way on CP/M and MS-DOS 1.x. In both cases new devices had to fit the existing structure of BIOS calls (17 for CP/M 2.2) (*2). New devices must be compiled into the BIOS (*3)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did DOS ver1 leave device drivers out, or was DOS v2 device support a new advancement over CPM?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Loadable drivers were newly added to MS-DOS 2.0. To some degree it was part of the step toward a unixoid system structure for DOS, like adding subdirectories even including a virtual &lt;code&gt;/dev&lt;/code&gt; directory for devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except, it never went fully that way. Much was added (including IOCTRL), but device drivers still had to fit for most parts the existing structure, which wasn't always up to the task. For the CD-ROM driver this meant that it had to hook itself as a network driver (introduced with DOS 3.1) and present the disk as a remote directory assigned to a drive letter instead of simply a disk.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - There's a 'yes but' part: With GSX, CP/M introduced loadable device drivers much like MS-DOS 2.0, but that's after MS-DOS was created.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Another 'but': With MP/M and later CP/M 3.0 (CP/M Plus), the Character Device Table was introduced. Here an arbitrary number of character devices could be added by system builders, using 6 character names to identify them. Assignment to the logical devices was done using the DEVICE utility and controlled by according BIOS calls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while for block devices system builders had to assign a hard disk number to a new device, they could use sounding names for character devices. The default table size was 12 entries for each (In/Out), enabling limited run time extension within the existing structure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - It was possible (and done) to add new devices during run time by hooking the BIOS entry table and catching/redirecting calls for a drive. Unlike MS-DOS, CP/M did not provide a TSR functionality, so everything dynamic was up to detailed system knowledge and patching.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2019-03-15T13:47:12.507" LastActivityDate="2019-03-15T13:47:12.507" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9359" PostTypeId="2" ParentId="9356" CreationDate="2019-03-14T09:03:27.003" Score="22" Body="&lt;p&gt;The answer depends on the version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M 2.2 did not support any loadable device drivers. There simply was no provisioning to do that. Originally, the in-built device drivers were limited to storage, console, and serial drivers. The system vendor could &lt;em&gt;extend&lt;/em&gt; the BIOS with new devices, but that was fixed during the system build and nothing was loadable on demand. (Some of the mechanisms described below were, however, back-ported into 2.2 and alike systems like MP/M)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M 3.0 actually &lt;em&gt;did&lt;/em&gt; support loadable &lt;em&gt;system extensions&lt;/em&gt; (&lt;strong&gt;R&lt;/strong&gt;esident &lt;strong&gt;S&lt;/strong&gt;ystem E&lt;strong&gt;x&lt;/strong&gt;tensions, RSX). These extensions were loaded resident into the computer and could extend the &lt;em&gt;BDOS&lt;/em&gt; with new calls. A similar, but not identical expansion was &lt;a href=&quot;https://www.seasip.info/Cpm/gsx.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;GSX&lt;/a&gt;, a loadable extension to support graphical devices like terminals and printers, that itself relied on device-specific loadable drivers. These extensions implemented a standardized way of calling specific new vendor-defined system calls. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some CP/M vendors, notably Amstrad/Sinclair (thus, &lt;a href=&quot;https://en.wikipedia.org/wiki/Locomotive_Software&quot; rel=&quot;nofollow noreferrer&quot;&gt;Locomotive Software&lt;/a&gt;), implemented loadable system extensions on top of that - Amstrad/Sinclair CP/M 3.0 implemented a concept of &lt;a href=&quot;https://www.seasip.info/Cpm/amsfid.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;FID&lt;/a&gt; (&lt;strong&gt;F&lt;/strong&gt;ield &lt;strong&gt;I&lt;/strong&gt;nstallable &lt;strong&gt;D&lt;/strong&gt;evice drivers) that allowed extending the &lt;em&gt;BIOS&lt;/em&gt; with support for new devices (hard  disks or RAM disks, for example) without touching the original code. CP/M 3.0 for the ZX Spectrum 3 comes with a RAM disk driver as FID in source code, for example, that implements a drive M:.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="3481" LastEditDate="2019-03-15T06:04:28.193" LastActivityDate="2019-03-15T06:04:28.193" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="9361" PostTypeId="1" AcceptedAnswerId="9363" CreationDate="2019-03-15T20:25:32.557" Score="5" ViewCount="910" Body="&lt;p&gt;I've found a few 8080 CPU test suites available, but they all assume CP/M or a similar OS is already present and running - they call BDOS for I/O, etc. I'm working towards being able to run CP/M on my 8080 emulator, but for the moment, I'm looking for something that's just going to put the emulated CPU through its paces and output the results.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2020-11-03T11:14:30.783" Title="Test emulated 8080 CPU without an OS?" Tags="&lt;8080&gt;&lt;cpu&gt;&lt;altair-8800&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9362" PostTypeId="2" ParentId="194" CreationDate="2019-03-15T20:41:16.983" Score="5" Body="&lt;p&gt;If you broaden your choice of OS to any *nix you can go way back to the original IBM PC, running Xenix. No MMU, no protection of any kind, no demand paging. Microsoft at their worst. No Linux as it never ran on 16 bit hardware as far as I know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, going back even farther, the DEC VAX is relatively ancient (1977) and Linux has been run on these.&lt;/p&gt;&#xA;" OwnerUserId="11065" LastActivityDate="2019-03-15T20:41:16.983" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9363" PostTypeId="2" ParentId="9361" CreationDate="2019-03-15T20:52:40.680" Score="19" Body="&lt;p&gt;I'm actually not aware of any major 8080 test suites; everything I've ever found has been for the Z80 rather than its parent.&lt;/p&gt;&#xA;&lt;p&gt;That aside, I'd heavily suggest you don't discard the CP/M solutions you've found as they're usually pretty trivial to set up as test cases without any of the main substance of a CP/M environment.&lt;/p&gt;&#xA;&lt;p&gt;For example, to run the CP/M version of Zexall all you need to do is this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;give your z80 or 8080 64kb of RAM;&lt;/li&gt;&#xA;&lt;li&gt;load the raw bytes included in zexall.com to address &lt;code&gt;0x0100&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;put a RET (opcode &lt;code&gt;0xc9&lt;/code&gt;) at address &lt;code&gt;0x0005&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;whenever the CPU hits &lt;code&gt;0x0005&lt;/code&gt;, check what's in the &lt;code&gt;C&lt;/code&gt; register, and:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if it's &lt;code&gt;9&lt;/code&gt; then output a string starting from the address in &lt;code&gt;DE&lt;/code&gt; until you find a &lt;code&gt;$&lt;/code&gt; character;&lt;/li&gt;&#xA;&lt;li&gt;if it's &lt;code&gt;2&lt;/code&gt; then output the single character in &lt;code&gt;E&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;set the PC to &lt;code&gt;0x0100&lt;/code&gt; and let it run until the stack fully unwinds.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Then check your accumulated text output against that you accumulated during a passing run for a pass or fail; use your human judgment until you get to your first passing run.&lt;/p&gt;&#xA;&lt;p&gt;So what you've effectively done is implement exactly two of the calls exposed via CP/M's &lt;code&gt;CALL 5&lt;/code&gt; interface, both of which just to append text to a buffer. And that's everything that zexall requires.&lt;/p&gt;&#xA;&lt;p&gt;Otherwise: FUSE, the Spectrum emulator, provides tests for everything the Z80 does, in an ad hoc text format. I've transcribed those to JSON so that you don't have to write a parser. The full set of files including the original licence &lt;a href=&quot;https://github.com/TomHarte/CLK/tree/master/OSBindings/Mac/Clock%20SignalTests/FUSE&quot; rel=&quot;nofollow noreferrer&quot;&gt;is here on Github&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Parse tests.in.json, and you'll get an array of initial CPU states plus bytes to put into memory. Parse tests.expected.json and you'll see both expected bus activity and the expected final state. Within the output there's a value, &amp;quot;tStates&amp;quot; that tells you how many cycles to run for to verify that the initial state turns into the final state.&lt;/p&gt;&#xA;&lt;p&gt;The counts are in Z80 cycles so there may be some differences there, but most of the tests are very simple — they're just the one or two opcodes long. So you should be able to ignore the tests for opcodes the 8080 doesn't have, and the values for registers that the 8080 doesn't have, and just run until either the PC exits the data you loaded or you hit the expected final state.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="19821" LastEditDate="2020-11-03T11:14:30.783" LastActivityDate="2020-11-03T11:14:30.783" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9364" PostTypeId="1" CreationDate="2019-03-16T19:35:06.483" Score="1" ViewCount="127" Body="&lt;p&gt;Apple //GS: Is there a way to boot and run an Apple ][ OS in E0/E1 in native CPU mode? No GS features are required. 1MHz clock like on previous Apple2s is perfect. The reason for needing this is because there are hardware features present in E0/E1 Mega II space which are unavailable to the emulation pages 0/1 when we try to use peripheral cards designed for old Apple2s.&lt;/p&gt;&#xA;" OwnerUserId="12115" LastActivityDate="2019-03-16T19:35:06.483" Title="Apple IIGS: Is there a way to boot and run an Apple II OS in E0/E1 in native CPU mode?" Tags="&lt;apple-iigs&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9365" PostTypeId="1" AcceptedAnswerId="9380" CreationDate="2019-03-16T20:57:39.107" Score="3" ViewCount="857" Body="&lt;p&gt;The heart of many classic home computers and game consoles was the graphics chip, yet these tend to be less well-documented than the corresponding CPUs. Still, there are die photos of two of the most important graphics chips of the eighties, the VIC-II and the NES PPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have not been able to find a die photo of the SNES PPU. Is there one available?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-03-20T17:03:28.077" Title="SNES PPU die photo" Tags="&lt;hardware&gt;&lt;graphics&gt;&lt;chip&gt;&lt;snes&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9367" PostTypeId="1" AcceptedAnswerId="12047" CreationDate="2019-03-17T22:11:22.880" Score="8" ViewCount="1564" Body="&lt;p&gt;I am using &lt;code&gt;qemu-system-i386&lt;/code&gt; on a Windows 10 PC to emulate an MS-DOS system. I have installed MS-DOS 6.22 successfully from disk images from original Microsoft media.&lt;/p&gt;&#xA;&lt;p&gt;I am starting QEMU using this command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;c:\program files\qemu\qemu-system-i386.exe -hda msdos.disk -m 64 -L . -soundhw sb16,adlib,pcspk -k en-gb -vga cirrus -nic user,model=pcnet -boot order=d -drive file=.\cdrom.iso,media=cdrom,index=2,if=ide,format=raw&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;cdrom.iso&lt;/code&gt; is an image created by mkisofs (running under WSL) using this command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;mkisofs -pad -b disks/msdos/msd622_b.img -R -J -o cdrom.iso cdrom&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This includes an El Torito boot floppy of MS-DOS 6.22. When running QEMU with the above command, it successfully boots from CD-ROM into MS-DOS. &lt;code&gt;XDVD2.SYS&lt;/code&gt; detects the CD-ROM correctly, identifying it as a QEMU virtual DVD-ROM. &lt;code&gt;MSCDEX&lt;/code&gt; runs correctly and assigns the CD drive a drive letter, as illustrated:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SeaBIOS (version rel-1.12.0-0-ga698c8995f-prebuilt.qemu.org)&#xA;&#xA;&#xA;iPXE (http://ipxe.org) 00:03.0 C980 PCI2.10 PnP PMM+03F914B0+03EF14B0 C980&#xA;&#xA;&#xA;&#xA;Booting from DVD/CD...&#xA;Starting MS-DOS...&#xA;&#xA;&#xA;XDVD2, 1-05-2016.   CD/DVD name is DVDROM.&#xA;IDE0 Controller at I-O address C020h, Chip I.D. 80867010h&#xA;CD0:  IDE0 Secondary-master, QEMU DVD-ROM, ATA-100.&#xA;&#xA;MODE prepare code page function completed&#xA;&#xA;MODE select code page function completed&#xA;MSCDEX Version 2.23&#xA;Copyright (C) Microsoft Corp. 1986-1993. All rights reserved.&#xA;       Drive D: = Driver DVDROM unit 0&#xA;A:\&amp;gt;_&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;However, whenever I try to access the CD - for example, with &lt;code&gt;dir d:\&lt;/code&gt;, I get this error:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CDR101: Not ready reading drive D&#xA;Abort, Retry, Fail?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The QEMU virtual CD-ROM and the ISO file are both clearly valid, otherwise QEMU would not have been able to boot the El Torito image. I have repeated the test using an old Windows 95 setup boot disk that uses a different CD driver and it too fails in the same way, so this &lt;em&gt;appears&lt;/em&gt; to be something specific about MSCDEX inside QEMU. I have also tried a different ISO image in case there is a problem with my ISO image, with no difference in results.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;How can I access the QEMU virtual CD-ROM from MS-DOS?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;For reference, here are the boot disk's startup files.&lt;/p&gt;&#xA;&lt;p&gt;CONFIG.SYS&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DOS=HIGH,UMB&#xA;BUFFERS=11,0&#xA;FILES=60&#xA;LASTDRIVE=H&#xA;FCBS=1,0&#xA;STACKS=0,0&#xA;DEVICE=A:\DOS\HIMEM.SYS /TESTMEM:OFF&#xA;DEVICE=A:\DOS\EMM386.EXE X=B800-C7FF I=B000-B7FF A=64 H=128 D=256 ON&#xA;DEVICEHIGH=A:\DOS\SETVER.EXE&#xA;COUNTRY=044,,A:\DOS\COUNTRY.SYS&#xA;DEVICEHIGH=A:\DOS\DISPLAY.SYS CON=(EGA,,1)&#xA;DEVICEHIGH=A:\EXTRAS\XDVD2.SYS /D:DVDROM&#xA;SET TEMP=A:\TEMP&#xA;SET TMP=A:\TEMP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;AUTOEXEC.BAT&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;@ECHO OFF&#xA;A:\DOS\SMARTDRV.EXE /X&#xA;PROMPT $p$g&#xA;PATH A:\DOS&#xA;A:\DOS\MODE.COM CON CODEPAGE PREPARE=((437) A:\DOS\EGA.CPI)&#xA;A:\DOS\MODE.COM CON CODEPAGE SELECT=437&#xA;LH A:\DOS\KEYB.COM UK,,A:\DOS\KEYBOARD.SYS&#xA;LH A:\DOS\DOSKEY.COM /INSERT&#xA;LH A:\DOS\MSCDEX.EXE /D:DVDROM /M:20 /E&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="149" LastEditorUserId="15334" LastEditDate="2021-05-22T15:45:01.540" LastActivityDate="2021-05-22T15:45:01.540" Title="QEMU emulating MS-DOS cannot access CD-ROM" Tags="&lt;ms-dos&gt;&lt;cd-rom&gt;&lt;qemu&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9368" PostTypeId="1" AcceptedAnswerId="9369" CreationDate="2019-03-18T02:47:51.427" Score="19" ViewCount="4769" Body="&lt;p&gt;An important step towards 3D gaming was the ability to scale sprites or tiles by nonintegral factors. Examples of the former from the eighties were the arcade games Pole Position, Outrun, Space Harrier and Afterburner; a subsequent example of the latter was the SNES Mode 7, used in many games for that machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accustomed to modern hardware, one tends to expect antialiasing; that is, for each screen pixel, the system locates the corresponding data pixel, and if the answer lands between two data pixels, instead of just picking one or the other, it calculates a weighted average of the two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &lt;a href=&quot;https://arstechnica.com/gaming/2011/08/accuracy-takes-power-one-mans-3ghz-quest-to-build-a-perfect-snes-emulator/&quot; rel=&quot;noreferrer&quot;&gt;https://arstechnica.com/gaming/2011/08/accuracy-takes-power-one-mans-3ghz-quest-to-build-a-perfect-snes-emulator/&lt;/a&gt; says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I don't deny the advantages of treating classic games as something that can be improved upon: N64 emulators employ stunning high-resolution texture packs and 1080p upscaling, while SNES emulators often provide 2x anti-aliasing for Mode7 graphics and cubic-spline interpolation for audio samples. Such emulated games look and sound better. While there is nothing wrong with this, it is contrary to the goal of writing a hardware-accurate emulator.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This suggests the SNES did not actually have antialiasing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Sega Model 2 is an arcade system board released by Sega in 1993. Like the Model 1, it was developed in cooperation with Martin Marietta, and is a further advancement of the earlier Model 1 system. The most noticeable improvement was texture mapping, which enabled polygons to be painted with bitmap images, as opposed to the limited monotone flat shading that Model 1 supported. The Model 2 also introduced the use of texture filtering and texture anti-aliasing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This suggests Sega arcade machines likewise did not have antialiasing before 1993. A surprising conclusion from today's perspective, but then, the transistors required for the extra calculations might've been a significant cost in those days, and arcade games were fast-moving and CRT TV displays were somewhat blurry anyway. And certainly it would not have been affordable in software on eighties-vintage CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are the above inferences correct? Did antialiasing hardware only start being available in arcade and home games machines in the early to mid nineties?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2019-03-18T11:00:11.890" LastActivityDate="2021-02-07T01:55:34.763" Title="When did hardware antialiasing start being available?" Tags="&lt;hardware&gt;&lt;graphics&gt;&lt;snes&gt;&lt;sega&gt;" AnswerCount="3" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9369" PostTypeId="2" ParentId="9368" CreationDate="2019-03-18T03:05:21.383" Score="25" Body="&lt;p&gt;There's something of a conflation here of antialiasing and filtering, I think. Antialiasing is literally preventing things from adopting aliases — e.g. if a diagonal line looks like a staircase rather than a diagonal line, it has adopted an alias. So you can imagine the same thing happening to textures as they rotate or take awkward angles. But it's always about accurately portraying the information you have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, bilinear filtering is just a different way of guessing at what is between the information you have. It's about generating extra information — specifically positing that there's a linear gradient between every source pixel and the next, rather than a hard edge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said: no, the SNES does neither. It's a simple nearest-neighbour colour grab only. Ditto for the scaling systems that precede it — including the Lynx in the home (and anywhere else you want to take it; I suggest the battery shop) and arcade machines like Sega's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is true up to the Saturn and Playstation. The Nintendo 64 has bilinear filtering, and everything after that unambiguously has both*.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I believe the sources are correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*) you can technically fake antialiasing on anything with subpixel precision and alpha transparency by drawing multiple passes with slightly adjusted coordinates. So an N64 could do that, it'd just be expensive.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-03-18T03:05:21.383" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9370" PostTypeId="2" ParentId="9368" CreationDate="2019-03-18T13:05:15.737" Score="10" Body="&lt;p&gt;&lt;em&gt;[not a complete answer, but some remarks too big for a comment]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[also it focuses on games, as they are the most complex, real time application. Antialiasing for desktop UI and editors are a fairly insensitive issue and a subset thereof]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Need for Colours&lt;/h2&gt;&#xA;&lt;p&gt;A point, often forgotten from today's view is that antialiasing does need a video system systems with fine colour tuning to smoothen out edges/transitions. So either one with&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;a fairly large number of colours, covering in-between shades and intensities, or with&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;software definable colours from a larger palette than shown.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The first will require considerable more video memory, while the second needs more sophisticated video hardware using a Colour LUT. Early systems with just a few and in addition predefined colours, like on a 99/4, 2600 or C64, will not have it.&lt;/p&gt;&#xA;&lt;p&gt;In contrast, the Atari 400/800 could select the displayed colours form a table of (up to) 128 (*1), which dis allow some really nifty shading effects and would have made a great support for antialiasing - except multiple colours within a line where quite restricted. Which brings the next point&lt;/p&gt;&#xA;&lt;h2&gt;(Bitmap)Memory&lt;/h2&gt;&#xA;&lt;p&gt;Systems, way into the 1980s were quite memory limited. Thus graphics where often character based - up to the extreme of making bitmap in special character formats. But antialiasing does need a bitmap based memory with the ability to colour each pixel separate. Even for a simple TV resolution of 320x200 (*2) needs 64000 bytes of screen memory when using with sufficient colours. An enormous and expensive amount for early games and still a lot to be handled in time by the 8 bit CPUs used thoughout the 1980s. It was way more conceivable to apply data reduction than go toward full bitmap.&lt;/p&gt;&#xA;&lt;h2&gt;Graphic Objects&lt;/h2&gt;&#xA;&lt;p&gt;Today we think in textures to be placed somewhere as objects to be manipulated. Beside the need for (3D) surfaces to place them this again is based on a flat bitmap view. For most time of game history movable graphic objects where sprites, layered on top of a background, added during line processing. These where simple insertions into the pixel stream. No processing involved. More often than not, also limited to a single colour in form of set/not set data. Their big advantage was a fee positioning without any regards to the background, this means &lt;strong&gt;no&lt;/strong&gt; interaction of any kind but simple replacement. Multiple colours where usually made by layering multiple sprites at the same position. Again without any processing but a priority encoder for layers. The whole setup worked extreme well with low memory requirements and easy handling. Not as well with colours and sizes.&lt;/p&gt;&#xA;&lt;p&gt;That's why systems went toward &lt;a href=&quot;https://en.wikipedia.org/wiki/Bit_blit&quot; rel=&quot;noreferrer&quot;&gt;Bit-Blit&lt;/a&gt;, once bitmap frame buffers became easy available. With bit-blit operations objects of arbitrary size can be drawn on the screen - and it can be done in all colours available. While still 2D, this is already way more like today's understanding of textures than sprites are.&lt;/p&gt;&#xA;&lt;p&gt;And since it is based on well defined operations between frame buffer (background) and object, antialiasing operations can for the first time be performed by the bit bliting hardware.&lt;/p&gt;&#xA;&lt;h2&gt;Use-Case&lt;/h2&gt;&#xA;&lt;p&gt;Each and every technology needs a use case beyond the desk of an engineer/hacker. So even with ignoring cost, there was no real need for Antialising and likewise technology until the early 1990s. Games did quite well improve from being black and white (Space Invaders) over some colours (Galaxian in 1979 was the first colour game) and more of that (Double Dragonin 1987). Games using 'simple' hardware were that advanced, that early polygon based boards like &lt;a href=&quot;https://en.wikipedia.org/wiki/Namco_System_21&quot; rel=&quot;noreferrer&quot;&gt;Namcos System 21&lt;/a&gt; of 1987, definitely not a lightweight system, looked like a step back to users (*3). And only such systems would benefit from antialiasing.&lt;/p&gt;&#xA;&lt;p&gt;Similar with resolution. Back in 'the good old days' hardware was fixed definition and software tightly coupled. Game hardware was made for a fixed screen resolution (*4), usually TV like. There was no real need to up or downscale for newer screens with a different resolution. If a sprite was needed in different sizes, simply having additional copies in ROM solved it without any additional hardware.&lt;/p&gt;&#xA;&lt;p&gt;Antialiasing became not an issue before games either had to work in different resolutions or games where based on a real 3D environment. Both became a case in the 1990 and on PCs&lt;/p&gt;&#xA;&lt;h2&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;So while there happened many more details in timeline and hardware variation, it is safe to state that antialiasing as we know it today does need a certain level in memory, bitmap and colour available and how objects are handled to make it viable. A level that wasn't reached (in general) before ~1990. And like all technology, it needs not only to be enabled by engineering, but it's worthless without the &lt;em&gt;need&lt;/em&gt; for an application.&lt;/p&gt;&#xA;&lt;p&gt;That picture changes of course, and as noted by the question, when running old game data on modern hardware. The now standard features allow to use exactly the same advantages, like smooth scaling and blending, to adapt them to today's screens.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In fact, already the 2600 offered a quite remarkable colour capacity. But with it's low 'resolution' antialiasing doesn't make much sense.&lt;/p&gt;&#xA;&lt;p&gt;*2 - The Atari 800 could already do 384x240 in overscan and many arcade machines did use CRTs in similar or even better Resolution. Keep in mind, the limit for colour/pixel density on TV is due the transfer encoding (NTSC, PAL, etc.), not the CRT. Arcade machines didn't had that limitation, so better resolutions where quite within the CTR specs. Resulting in even more memory.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Compare the bulky graphics of &lt;a href=&quot;https://www.arcade-museum.com/game_detail.php?game_id=10446&quot; rel=&quot;noreferrer&quot;&gt;Winning Run&lt;/a&gt; using two 68k and 5 DSPs with the smooth textures of &lt;a href=&quot;https://www.arcade-museum.com/game_detail.php?game_id=7619&quot; rel=&quot;noreferrer&quot;&gt;Double Dragon&lt;/a&gt; with only three 8 bit CPUs&lt;/p&gt;&#xA;&lt;p&gt;*4 - Screen resolution, the capabilities of the intended display, usually a TV (like) screen, not graphics resolution/mode displayed on this screen resolution.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-03-18T15:21:01.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9371" PostTypeId="2" ParentId="9368" CreationDate="2019-03-18T13:07:20.060" Score="6" Body="&lt;p&gt;This was in no way part of a hardware assisted 3D pipeline, but there were attempts made in PC-class hardware to achieve anti-aliasing even as early as 1990. Edsun Labs made a drop in replacement RAMDAC for VGA boards that used some of the 256 possible color values as opcodes that would enable color blending between pixels on a line. This let a nominally 8bpp VGA board draw more colors - colors that were useful specifically from the perspective of drawing smoother images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This article talks about the specific implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.analog.com/media/en/analog-dialogue/volume-24/number-3/articles/volume24-number3.pdf#page=3&quot; rel=&quot;noreferrer&quot;&gt;https://www.analog.com/media/en/analog-dialogue/volume-24/number-3/articles/volume24-number3.pdf#page=3&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Michael Abrash also wrote about the product and its strengths and limitations in Dr. Dobb's Journal:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://archive.gamedev.net/archive/reference/articles/article371.html&quot; rel=&quot;noreferrer&quot;&gt;http://archive.gamedev.net/archive/reference/articles/article371.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time, the product got some press and then pretty much immediately died out. CEG was a low-cost play more than anything else, and it suffered from being poorly suited for displaying dynamic graphics. (Which were very much on the rise through both Windows and various games.)&lt;/p&gt;&#xA;" OwnerUserId="4522" LastActivityDate="2019-03-18T13:07:20.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9372" PostTypeId="1" CreationDate="2019-03-18T14:00:44.467" Score="3" ViewCount="275" Body="&lt;p&gt;I've recently written a Wiki article on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Creative_Computing_Benchmark&quot; rel=&quot;nofollow noreferrer&quot;&gt;Creative Computing benchmark&lt;/a&gt;. I was wondering if anyone has examples of it being used outside &lt;em&gt;Creative Computing&lt;/em&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've found one example in &lt;em&gt;Compute!&lt;/em&gt;, but I'd like to add more for balance. Ideally these would be examples of people using it as a contemporary test, but modern examples would add flavour too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples of the Byte Sieve would also be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; I see I missed some key context: I'm looking for examples of people using the benchmark &lt;em&gt;today&lt;/em&gt; to compare &lt;em&gt;retrocomputers&lt;/em&gt;. I see many examples of this in blogs and forums, but I don't get around enough the print world outside the Atari space to find examples there.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2019-03-22T14:00:58.967" LastActivityDate="2019-03-22T14:00:58.967" Title="(Modern?) Examples of Creative Computing/Ahl benchmark being used?" Tags="&lt;benchmarking&gt;" AnswerCount="1" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="9373" PostTypeId="1" AcceptedAnswerId="9374" CreationDate="2019-03-18T20:53:45.033" Score="13" ViewCount="3642" Body="&lt;p&gt;Compared to its main rival from Sega, the Super Nintendo has a weaker CPU but a more powerful graphics chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://web.archive.org/web/20080505070423/http://www.eidolons-inn.net/tiki-index.php?page=SegaBase+Genesis&quot; rel=&quot;noreferrer&quot;&gt;http://web.archive.org/web/20080505070423/http://www.eidolons-inn.net/tiki-index.php?page=SegaBase+Genesis&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The system as originally designed was way too expensive to be produced in a version affordable for the average consumer, let alone cost-effective for Nintendo. On top of that, project leader Masayuki Uemura was unable to meet Yamauchi's demand that the new box be back-compatible with the NES. The back-compatability feature was eventually abandoned; however, that only saved about US$75 on the anticipated end-user price tag. The chief culprit of the cost was, of course, the all-new graphics and sound processing suite upon which Yamauchi insisted. Designed in anticipation of the coming multimedia boom, it drove up the cost of the system so much that Nintendo was again forced to cut costs elsewhere or scrap it and risk being left behind. The problem was eventually solved by installing a slower CPU - a Motorola-based WDC65816 CPU - instead of the faster 10 Mhz MC68000 that Uemura originally intended. This meant that the new box would not be that much faster than the NES itself, so a math coprocessor (as cheap as Nintendo could cobble together) was thrown in to ease the processing strain a bit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Okay, I'm not surprised they contemplated making the machine backward-compatible. I could imagine that motivating the choice of a 6502-derived CPU. I could imagine the backward compatibility feature being eventually dropped to save cost, and someone deciding it wasn't worth redesigning with a different CPU at that late stage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am very surprised by the claim that an originally planned 68000 was dropped for cost reasons, simply because by the end of the eighties, the 68000 only cost a few dollars anyway. E.g. Byte, December 1988, advertises it for $9.95, and that's retail price in quantity one; in quantities of millions, the unit price would've been considerably less. (It doesn't give a price for the 65816, but does advertise the 65C02 for $7.95.) The data bus would be sixteen bits either way, so the impact on system cost would seem to be essentially zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did Nintendo really change their mind about using the 68000? If so, how does this square with that CPU being so cheap even two years before the launch of the new console?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-09-14T10:44:34.303" Title="Did Nintendo change its mind about 68000 SNES?" Tags="&lt;history&gt;&lt;nintendo&gt;&lt;snes&gt;&lt;motorola-68000&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9374" PostTypeId="2" ParentId="9373" CreationDate="2019-03-18T21:04:39.513" Score="14" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did Nintendo really change their mind about using the 68000?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Hard to say, as these decisions were never public.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If so, how does this square with that CPU being so cheap even two years before the launch of the new console?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Maybe because the price of the CPU drops to almost zero when using the 65816 as IP. After all, they didn't use the stock CPU, but had their own chip done. The 5A22 was custom made for the SNES and integrated several additional components that would have been external to the 68k. Having one simple chip instead of a spacious 68k plus external logic is a great cost saver - especially when planning for a large production. Being a simpler CPU it also saved on chip space and thus again on cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While contemporary sales prices are always a good first step, they also need to apply to the situation in question to become more than a hint.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Addendum:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The data bus would be sixteen bits either way, so the impact on system cost would seem to be essentially zero.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As far as I read it, it implies that the 65816 has a 16 bit data bus, which is not true (*1). The 65816 only has 8 data lines - reducing system cost a bit further.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - It's a common misconception to think of the 65816 as a clean 16 bit CPU. It's rather an 8 bit 6502 with some 16 bit mode (switching between 8 and 16 bit data/register size at will) and a banked addressing system added. For most operations it won't be faster than a 6502 at the same clock speed. The only real advantage (beside built-in banking) is the possible use of 16 bit index registers allowing easy pointer handling within a 64 KiB bank. Quite handy for high level languages. The caveat is already in the name: 65-eight/sixteen.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2019-03-20T11:19:51.850" LastActivityDate="2019-03-20T11:19:51.850" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9375" PostTypeId="2" ParentId="9372" CreationDate="2019-03-18T22:07:15.670" Score="6" Body="&lt;p&gt;While it's impossible to give a definitive negative answer, I'd say that it's unlikely that other publications depended on Ahl's benchmark, because:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It tests just the looping performance and accuracy of interpreted floating-point BASIC. Rugg &amp;amp; Feldman's &lt;a href=&quot;https://archive.org/details/kilobaudmagazine-1977-10/page/n21&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASIC Timing Comparisons&lt;/a&gt; (updated edition, Kilobaud Microcomputer magazine, October 1977) that later morphed into the &lt;a href=&quot;http://www.cpcwiki.eu/index.php/BASIC_Benchmark&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCW Benchmarks&lt;/a&gt;, tested many more aspects of BASIC performance and were a more useful benchmark suite.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Later single tests such as Byte's &lt;a href=&quot;https://archive.org/details/byte-magazine-1981-09/page/n181&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sieve&lt;/a&gt; (1981) showed — as far as a benchmark that may be susceptible to rigged results can — that different compilers and interpreters amongst many different platforms had wildly varying performance results. As built-in BASIC performance became less of a sales draw, simple interpreter tests faded away.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Consequently, ports of Ahl's benchmark to other languages are more down to the skill of the porter and the compiler's optimizer than the intrinsic speed of the target. The presence/absence of additional whitespace characters could affect the performance of some BASIC interpreters, so results from Ahl's benchmark even in its original language could also depend on the typist.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As founder and editor-in-chief of &lt;em&gt;Creative Computing&lt;/em&gt;, David Ahl would naturally promote his own benchmark in his own publication. Other publishers might not have felt so charitable towards something “not invented here”.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It might be interesting to hear &lt;a href=&quot;http://www.roylongbottom.org.uk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Roy Longbottom&lt;/a&gt;'s opinion (he's a &lt;a href=&quot;https://stackoverflow.com/users/2099012/roy-longbottom&quot;&gt;SE Member&lt;/a&gt;!) on these kinds of benchmarks, as he's been involved in system benchmarking since Algol 60.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2019-03-19T13:01:14.780" LastActivityDate="2019-03-19T13:01:14.780" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9376" PostTypeId="2" ParentId="7395" CreationDate="2019-03-19T09:04:03.913" Score="3" Body="&lt;p&gt;Early versions of the MOS 6502 processor were sold with a faulty Rotate Right instruction; this instruction was simply &lt;a href=&quot;https://www.pagetable.com/?p=406&quot; rel=&quot;nofollow noreferrer&quot;&gt;left off the datasheet&lt;/a&gt; until a new batch of processors had been made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that these chips were &lt;em&gt;all&lt;/em&gt; bad because of a design error, as opposed to some bad chips due to yield issues.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-03-19T09:04:03.913" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9378" PostTypeId="2" ParentId="756" CreationDate="2019-03-20T07:25:55.150" Score="8" Body="&lt;p&gt;To all from a 40 year veteran of the biz, some notes about floppy formats.&#xA; The absolute and best controller that should be able to read and write 98% of the floppy disc formats is the western digital WD1771 or 1781. &#xA;  In the floppy sector formats their is an address mark(the sector number ) and a data mark ( marks the beginning of the 128/256/512 data block. I may be a bit off but the address mark byte was a D8 hex and the data mark could be F6/F7/F8 or F9.&#xA;  You could program the 1771 or 1781 to look for any of the data mark values. After the&#xA;1781 the industry fix the data mark to just F8. The 1791 and others like the NEC uPD765 floppy controllers, can only read a data mark of F8. Some early micro and mini computers use the F9 or F6 data mark and therefore these floppies can not be read by modern Floppy disk controllers.&lt;/p&gt;&#xA;" OwnerUserId="12126" LastActivityDate="2019-03-20T07:25:55.150" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9379" PostTypeId="2" ParentId="8146" CreationDate="2019-03-20T14:08:19.627" Score="0" Body="&lt;p&gt;I misread the question, so this is answering something different -- unless you consider that every language is embedded in machine language (aka the Instruction Set Architecture) of the particular processor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;..............&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any programming language from the 50's, 60's, or even 70's was, by today's standards, an embedded language for a tiny computer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my experience, although there are several other answers, I would propose &lt;strong&gt;Fortran&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of my first computers was an IBM 360/30E, with a hard drive and tapes.  The IBM System 360 was ubiquitous for business applications.  The 360 model 30 was an 8-bit implementation of the instruction set.  The E suffix indicated that it was equipped with a central memory store of 32,786 bytes.  It ran IBM's DOS (Disk Operating System).  I programmed it in Fortran 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen an IBM model 1130 used for real-time control a gas chromatograph/mass spectrometer.  By most standards, it was an embedded computer.  Probably programmed in assembly language and Fortran.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used a Data General Eclipse S-130 to monitor a plastics injection molding factory.  There was a distributed dry-contact switch matrix that was probed and sampled by the S-130.  It updated color screens throughout the factory.  It was mostly programmed in Fortran, with a bit of assembly code for time-critical device drivers.&lt;/p&gt;&#xA;" OwnerUserId="10500" LastEditorUserId="10500" LastEditDate="2019-03-20T19:49:44.570" LastActivityDate="2019-03-20T19:49:44.570" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9380" PostTypeId="2" ParentId="9365" CreationDate="2019-03-20T17:03:28.077" Score="7" Body="&lt;p&gt;&lt;em&gt;(With thanks to Conspicuous Compiler's comment above)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SNES' PPU (or S-PPU) was actually &lt;a href=&quot;https://en.wikipedia.org/wiki/Super_Nintendo_Entertainment_System#Video&quot; rel=&quot;noreferrer&quot;&gt;two chips&lt;/a&gt;: a pair of 100-pin ICs operating together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are die photos of the pair (the &lt;a href=&quot;http://siliconpr0n.org/map/nintendo/s-ppu1/&quot; rel=&quot;noreferrer&quot;&gt;S-PPU1&lt;/a&gt; and &lt;a href=&quot;http://siliconpr0n.org/map/nintendo/s-ppu2-b/&quot; rel=&quot;noreferrer&quot;&gt;S-PPU2B&lt;/a&gt;) hosted on siloconpr0n.org, as 100+Mb JPEGs and a JavaScript-based scroll and zoom interface. I've attached thumbnails of each below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;S-PPU1: &lt;a href=&quot;https://i.stack.imgur.com/KVs8k.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KVs8k.png&quot; alt=&quot;S-PPU1&quot;&gt;&lt;/a&gt;&#xA;S-PPU2: &lt;a href=&quot;https://i.stack.imgur.com/fLcso.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fLcso.png&quot; alt=&quot;S-PPU2B&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 64KB of SRAM can be seen in the top-left corner of the S-PPU1 (in two 32kbit x 8 chunks), and the 256 × 15 bits of color generator RAM can be seen in the bottom left corner of the S-PPU2.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-03-20T17:03:28.077" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9381" PostTypeId="1" AcceptedAnswerId="13441" CreationDate="2019-03-20T21:35:38.683" Score="8" ViewCount="191" Body="&lt;p&gt;The PDP-1x is a Digital Equipment Corporation PDP-1 computer modified to support both ones and twos complement arithmetic, and to include a memory management unit.  It ran a locally developed operating system with specific facilities to represent virtualized devices and inter-process communications.  The top-level element was called a &quot;Sphere&quot;.  It contained resources (called capabilities) and execution elements.  I believe the execution elements were called &quot;processes&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a manual for the OS named &quot;INSTR5 ALL&quot;.  I would like to read more about the OS to see if I was just a youngster amazed by something I was unfamiliar with, or if this operating system was unique and worthy of re-examination today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where could I find documentation of the PDP-1x Operating System?&lt;/p&gt;&#xA;" OwnerUserId="10500" LastEditorUserId="142" LastEditDate="2020-01-23T11:21:54.847" LastActivityDate="2020-01-23T12:59:00.657" Title="Documentation for the MIT PDP-1X OS" Tags="&lt;history&gt;&lt;pdp-1&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9382" PostTypeId="1" AcceptedAnswerId="9384" CreationDate="2019-03-20T22:25:59.063" Score="35" ViewCount="5707" Body="&lt;p&gt;I'm attempting to build a Z80 homebrew computer to teach myself the basis of electronic design. I planned to start from something simple, like a ROM, some SRAM, a video chip and a Z80-PIO. I'd like to build a machine with straightforward I/O, that it, the design requirement: one should be able to use the computer by simply plugging a PS/2 keyboard, rather than hooking it to a RS232, USB-TTL stick or some exotic CRT terminal.&lt;/p&gt;&#xA;&lt;p&gt;But how to incorporate a PS/2 keyboard input to my computer is unclear to me. According to my research, this problem has been solved by the following approaches.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Shift Register&lt;/strong&gt;. A simple shift register like 74HC595N should be able to translate the serial data from the keyboard to parallel, and it can be clocked by the keyboard, so it has no problem to follow the PS/2 protocol. But PS/2 is 8-bit data, 1-bit parity, not 7-bit data! Both the Z80 and the shift register can only handle 8-bit of data , so the parity bit is ignored (or requires additional parts), not elegant. I don't think &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4736/what-was-the-first-commercially-available-computer-with-ecc-memory&quot;&gt;parity is only for farmers&lt;/a&gt;, especially when bidirectional transmission is also needed for controlling Caps Locks, etc. So a parity bit is needed, also, we need to follow the timing, have some meaningful interrupts control - all of these requires extra parts, which makes it difficult to design and program (especially when routing it on a single-layer board).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;USART&lt;/strong&gt;. Although PS/2 is not designed as a USART-compatible protocol, there are reports of success by simply running the USART at 12,000 bauds and connecting the DATA line to a USART interface, and handling the keymap decoding in software. It sounds convenient since the USART is general-purpose, may perform buffering, parity check, and interrupt generation. However, PS/2 is clocked by the keyboard and its frequency lies at anywhere between 10.0–16.7 kHz, again, this method is NOT in compliance of the protocol at all, and could only work by chance, so it's more of a clever trick than a proper solution.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;SPI&lt;/strong&gt;. Obviously, putting the widely-used SPI interface in slave mode can allow the serial transmission to be clocked by the keyboard. But I think it's just another clever trick to exploit the functionality on a modern microcontroller than a standard solution. Historically, it seems a SPI controller is never used in this way.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;PIC, Atmel, or ARM microcontroller&lt;/strong&gt;. It's the most common, easiest, flexible solution used in various retrocomputing projects. But to me, having a microcontroller with processing power comparable to (or greater than) the Z80 CPU defeats the spirit of a retrocomputing project. I don't have a problem of using one for inherently computational intensive tasks, such as Ethernet or Wi-Fi, but for a mere keyboard, seriously?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;8042&lt;/strong&gt;. In the original IBM PC/AT design, the underlying keyboard control sequence is managed by the 8042 connected to the Intel 8255 PIO. A 8042 is just a version of the MCS-48 (8048) microcontroller designed for interfacing peripheral devices, IBM must have written a customized firmware. It's difficult to find a 8048 today, nevertheless, MCS-51 (8051) is also a retro chip so this one can be used, too. But is there a reference implementation of the original 8042 firmware available under a free and open source license?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I think there are also controllers specifically made to control inputs like PS/2 keyboards, but they typically integrates more functionalities, and I'm not aware of a chip from the late 80s. If there is one, I think I could just use that, provides it was a common design choice of that time.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Currently, I'm considering to interface the PS/2 keyboard by implementing the 8042 keyboard controller on a 8051 MCU if there's a free reference implementation available, if not, I think it should be okay for me to implement something simpler, too.&lt;/p&gt;&#xA;&lt;p&gt;But I think programming for two separate chips makes my project more difficult, especially for the initial prototype. I must have missed something... I knew most keyboards from that era were parallel ones, not PS/2, but there must be some additional and possibly simpler methods to interface a PS/2 keyboard, are there? How was it being done historically?&lt;/p&gt;&#xA;" OwnerUserId="12128" LastEditorUserId="15334" LastEditDate="2020-10-10T07:50:39.800" LastActivityDate="2021-05-26T10:48:16.490" Title="How do I Interface a PS/2 Keyboard without Modern Techniques?" Tags="&lt;z80&gt;&lt;input-devices&gt;" AnswerCount="5" CommentCount="9" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9383" PostTypeId="1" CreationDate="2019-03-21T00:05:50.837" Score="4" ViewCount="2993" Body="&lt;p&gt;I have installed two gotek device instead of two old unworking floppy disk drives (in particular on an &lt;a href=&quot;https://www.seasip.info/VintagePC/pcs86.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Olivetti PCS 86&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the result is something like this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/eVR4h.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eVR4h.jpg&quot; alt=&quot;Olivetti PCS86 with Gotek&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The one on the right should the the A: and the left one the B: as the connector end is at the right.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once switching on it can not detect the presence of the new floppy units.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/pSe8o.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pSe8o.jpg&quot; alt=&quot;Switched on&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, I can't find any information about Gotek jumpers configuration for MS-DOS. In addition, the machine seems to support only double-sided 720Kb floppies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Gotek(s) should already have the correct firmware because the drives were named &quot;SFRM72-TU100K USB Floppy Drive Emulator 720KB for Industrial Automation&quot; on ebay (from where I brought): so, luckily I need to take care only of the jumpers configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the right one for MS-DOS / 720KB ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hew19.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hew19.jpg&quot; alt=&quot;Jumpers config.&quot;&gt;&lt;/a&gt; &#xA;&lt;a href=&quot;https://i.stack.imgur.com/2iNLI.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2iNLI.png&quot; alt=&quot;Connector head up&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, two final constraints:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I would like to have them both working as I never saw two gotek drives on the same machine before.&lt;/li&gt;&#xA;&lt;li&gt;I would like to have data written/saved on the emulated floppies on usb &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is it possible? Do I need to take care also of this factor for the jumpers configuration?&lt;/p&gt;&#xA;" OwnerUserId="8912" LastEditorUserId="8912" LastEditDate="2019-03-21T00:40:48.513" LastActivityDate="2019-03-22T22:01:10.697" Title="Gotek drives for MS-DOS (plus few more constraints)" Tags="&lt;ms-dos&gt;&lt;floppy-disk&gt;&lt;ibm-pc&gt;&lt;usb&gt;&lt;hxc&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9384" PostTypeId="2" ParentId="9382" CreationDate="2019-03-21T00:09:12.970" Score="21" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm attempting to build a Z80 homebrew computer to teach myself the basis of electronic design. I planned to start from something simple, like a ROM, some SRAM, a video chip and a Z80-PIO.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So there's a Z80-PIO? Isn't that already the solution to be used? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not to mention, that adding another micro controller for a job the main CPU can do as well is neither simple nor true to the spirit of early systems. I mean, adding another whole computer system, even of greater performance than the main system, just for a keyboard &lt;em&gt;interface&lt;/em&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Z80 with a PIO can do everything (*1) a separate system can do. In this case it needs 4 port bits. Two for receiving data/clock from the keyboard/mouse, two to overwrite these to initiate an output sequence and control output data. Externally two drivers for the input signal, two resistors and two transistors, as shown, may be helpful. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vEcuZ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vEcuZt.png&quot; alt=&quot;External circuitry for PS/2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be helpful if the clock input pin &lt;em&gt;can&lt;/em&gt; be set to interrupt the CPU so a response to a key press can be handled without polling, but it'll work as well by pulling clock low and only releasing it when ready to receive a byte (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything after that is simply bit-banging the protocol. The CPU got 5 microseconds per bit to react, which can be done on a tight looped 4 MHz Z80. Of course it will need some fine tuning, but isn't that exactly the goal of your project?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On a sidenote:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;USART. [...] However, PS/2 is clocked by the keyboard and its frequency lies at anywhere between 10.0–16.7 kHz, again, this method is NOT in compliance of the protocol at all, and could only work by chance, so it's more of a clever trick than a proper solution&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Of course it is a proper solution - all that's needed is to clock the USART externally. Important here: the Z80 SIO is well fitted to do the required 8E1 data format. Neither a hack nor anything clever is needed - maybe except to detect the acknowledge bit on host to kbd transfers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;And further:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How was it being done historically?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This depends a lot on the machine we're talking about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Parallel keyboards&lt;/strong&gt; where somewhat common, when it came to ready made units to be added as component. These where either&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;hard encoded (diodes!) or&lt;/li&gt;&#xA;&lt;li&gt;via a decoder circuit (think Apple II).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Serial&lt;/strong&gt; was (in the beginning) even more common, usually when keyboards had to be complete OEM units just to be plugged in (DEC, Apple Lisa).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Home/custom build solutions for &lt;strong&gt;embedded keyboards&lt;/strong&gt; operated by &lt;strong&gt;scanning a matrix&lt;/strong&gt; from the main CPU&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;via some latches,&lt;/li&gt;&#xA;&lt;li&gt;a PIO like port (PET),&lt;/li&gt;&#xA;&lt;li&gt;some combinations of both (Tandy MC-10). Or worse:&lt;/li&gt;&#xA;&lt;li&gt;By mapping the matrix as data into an address range (TRS-80 M1)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, next to that is, as separate controllers may be faster in some special cases - except, PS/2 is none of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Yes, very easy and a protocol conform way. Drawback here is that each poll will have to wait at least for 100 (better 200) microseconds after releasing the clock line to check if the keyboard wants to send at all. So not really cool.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-04T11:23:02.607" LastActivityDate="2019-04-04T11:23:02.607" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9385" PostTypeId="2" ParentId="9383" CreationDate="2019-03-21T01:41:05.693" Score="4" Body="&lt;p&gt;I'd suggest moving the jumper from S0 to S1 - IBM compatibles expect drives to respond as Unit 1, not Unit 0.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2019-03-21T01:41:05.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9386" PostTypeId="1" AcceptedAnswerId="9390" CreationDate="2019-03-21T04:24:17.053" Score="2" ViewCount="291" Body="&lt;p&gt;In the mid 80's, several national news outlets showed people able to reproduce a computer's monitor's screen at least 100ft away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) How were early computers compromised like this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Were there other ways to compromise the CRT/Monitor signal?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Is there a way to eliminate this threat with older computer hardware?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/flKgl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/flKgl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=8gRWlmxom7I&quot; rel=&quot;nofollow noreferrer&quot;&gt;image source&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="3481" LastEditDate="2019-03-21T08:34:50.293" LastActivityDate="2019-03-21T08:34:50.293" Title="How were early computer monitor signals used to breach security?" Tags="&lt;hardware&gt;&lt;crt-monitor&gt;&lt;security&gt;" AnswerCount="3" CommentCount="6" ClosedDate="2019-03-22T13:24:51.577" ContentLicense="CC BY-SA 4.0" />
  <row Id="9387" PostTypeId="1" AcceptedAnswerId="9389" CreationDate="2019-03-21T05:08:08.567" Score="0" ViewCount="578" Body="&lt;p&gt;I was interested in a possible rewrite of dos to dos 64bit. In my research I found several references that state all current motherboard BIOS interrupts are not accessible from 64bit Long or 64bit protected mode. Also, interrupts (ISR's) can not normally be entered by a debugger so reverse engineering is not practical. &lt;a href=&quot;https://wiki.osdev.org/Main_Page&quot; rel=&quot;nofollow noreferrer&quot;&gt;OSDev Wiki&lt;/a&gt;  &lt;a href=&quot;http://aodfaq.wikidot.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Alt OS&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most BIOS calls can be made if the processor is dropped back into 16bit Real Mode. But this is very slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Why can't BIOS calls be made from 64bit Intel/AMD modes? Isn't 32 bit compatible with 16bit, and 64bit compatible with 16 &amp;amp; 32 - each instruction set being a super-set of the earlier design?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) It appears a simple 64bit rewrite of the BIOS is not possible otherwise someone would have done it. What is keeping a 64bit mode DOS compatible BIOS from being written and distributed?&lt;/p&gt;&#xA;" OwnerUserId="7813" LastEditorUserId="7813" LastEditDate="2019-03-21T05:20:01.477" LastActivityDate="2019-08-10T13:13:30.803" Title="Why can't BIOS be accessed in 64bit mode on Intel/AMD chips?" Tags="&lt;ms-dos&gt;&lt;bios&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2019-03-21T12:14:31.273" ContentLicense="CC BY-SA 4.0" />
  <row Id="9388" PostTypeId="2" ParentId="9387" CreationDate="2019-03-21T06:18:31.270" Score="5" Body="&lt;p&gt;&lt;H2&gt;The key word is &quot;modes&quot;&lt;/H2&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 64-bit x86 processor can be switched into 16, 32 and 64-bit modes (which is an over-simplification, there are more than that), but code written for one mode won't run correctly in a different mode. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reasons for this are many and varied, but the main issue is that the instructions in the code mean slightly different things in the different modes. To answer the obvious question, yes, it would be possible in theory to devise a computer architecture where 64-bit code could make calls to 16-bit code, and have things work correctly. However, the x86 tribe of processors (they are too varied to be just one family) were not designed on that basis: if it occurred to anyone, it clearly wasn't considered important enough to be worth providing. No, they can't be changed to provide it without making them incompatible with the existing processors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do know of one family of computers that were designed that way, the Data General Nova/Eclipse/Eclipse MV series. Those grew from 16-bit to 32-bit, but Data General didn't try to take the idea further, and no longer exists. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;H2&gt;Good reasons why nobody has written a 64-bit DOS-compatible BIOS&lt;/H2&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no 64-bit MS-DOS to make it useful. It would not be useful with more sophisticated 64-bit operating systems, like Linux or Windows 7/8.1/10, because they need more sophisticated interfaces to hardware to run with decent speed and reliability. Those operating systems only use the BIOS during their early boot phases, and take over direct control of hardware thereafter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A BIOS is somewhat hardware-specific. A universal one, for any 64-bit x86 motherboard, is almost certainly impractical. Anyone writing one would have to produce variations for different motherboards and/or chipsets. It sounds like a lot of work, for little gain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 64-bit MS-DOS would be of little use without applications to run on it. There aren't any, and there's no point in writing any without an OS to run them on. Even if it existed, you can't re-write existing DOS software for it without breaching copyright (and a great deal of work), and it seems very unlikely that any software vendor would produce anything for it. Almost all of the free software being produced and maintained needs a more sophisticated OS to run. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you're proposing is not really a retrocomputing project, but the creation of a new operating system, which looks and behaves like an old one, but is much less useful, as well as being a lot of work. Nobody will stop you doing this, but not many people are likely to join you either. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-08-10T13:13:30.803" LastActivityDate="2019-08-10T13:13:30.803" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9389" PostTypeId="2" ParentId="9387" CreationDate="2019-03-21T06:27:48.787" Score="6" Body="&lt;p&gt;The BIOS code and interface were developed on a processor that only had 16-bit real mode addressing, which means it is not compatible with other addressing modes and code will run only if CPU is in a mode that is compatible with real mode so on later CPUs it could be also in virtual 8086 mode. The addressing modes and default operand lengths differ in other modes. And on the other hand, BIOS is just a way to boot your OS, and when your OS is running, it is expected to either fall back to compatible mode if it needs to access BIOS routines, or just have its own drivers for peripherals that BIOS calls are not needed at all. Modern UEFI system runs in 32-bit mode. And BIOSes themselves can run in 32-bit mode during startup on newer machines to initialize CPU and system components like PCI devices.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-03-21T06:27:48.787" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9390" PostTypeId="2" ParentId="9386" CreationDate="2019-03-21T06:33:13.550" Score="7" Body="&lt;p&gt;The term you are looking for is &lt;a href=&quot;https://en.wikipedia.org/wiki/Van_Eck_phreaking&quot; rel=&quot;noreferrer&quot;&gt;van Eck phreaking&lt;/a&gt; - the use of electromagnetic radiation produced by computing equipment. To spy on the display, you receive and demodulate the radiation from CRT monitors, produced by repeating electron beam pulses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was perhaps easier to eavesdrop on (UHF) radiation from the computer modulator in the gold era of 8-bit computers connected to a stock TV &lt;code&gt;[1]&lt;/code&gt;, but that would have been less useful in practice - professional users (where you expect to gain most from the espionage) tended to have professional monitors, not using UHF TV sets and modulators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer you third question, good shielding goes a long way - see &lt;a href=&quot;https://en.wikipedia.org/wiki/Tempest_(codename)&quot; rel=&quot;noreferrer&quot;&gt;TEMPEST&lt;/a&gt; for a NSA specification. Physically, a simple &lt;a href=&quot;https://en.wikipedia.org/wiki/Faraday_cage&quot; rel=&quot;noreferrer&quot;&gt;Faraday cage&lt;/a&gt; is already an improvement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;[1]&lt;/code&gt; I successfully received UHF signal transmitted from an 8-bit computer with a &quot;leaky cable&quot; connection (coax disconnected from the TV) inside living room on broadband UHF antenna placed on the roof of the house.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2019-03-21T06:33:13.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9391" PostTypeId="2" ParentId="9386" CreationDate="2019-03-21T06:35:11.113" Score="2" Body="&lt;p&gt;Computer displays, and the cables that feed them, emit electromagnetic radiation (radio- and TV-frequency radio signals). With a directional antenna and a sensitive receiver, these can be picked up, and used to drive an eavesdropping display. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is known as &lt;a href=&quot;https://www.sans.org/reading-room/whitepapers/privacy/introduction-tempest-981&quot; rel=&quot;nofollow noreferrer&quot;&gt;TEMPEST&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Van_Eck_phreaking&quot; rel=&quot;nofollow noreferrer&quot;&gt;Van Eck Phreaking&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Countermeasures include physical shielding (tinfoil is actually practical here), and specially designed fonts can make the signals much harder to read. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-03-21T06:35:11.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9392" PostTypeId="2" ParentId="9386" CreationDate="2019-03-21T07:27:45.920" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;1) How were early computers compromised like this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Every electric signal produces an electromagnetic field - aka radio transmission - changing in the same way the signal does. An AM radio near any (old) computer will have a good choice to catch some of it's workings as 'noise'. Of course most radiations as way to broad easy easy detection, but a CRT signal is cyclic and this cycle is high enough to work as it's own carrier - and at the same time delivering the fine print for decoding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problems are still the same with modern displays - except the energy is lower and frequency higher, the later even more reducing the distance it can be detected. So an Apple II is way less problematic to capture than a 4k display. A fact even noticeable in demonstrations back then - usually some TV like lower resolution screen was used, than an 80 column or highres display.  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2) Were there other ways to compromise the CRT/Monitor signal?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a bit unclear what you're asking, isn't it. As usual, anything a setup emits can be detected and used for reconstruction of the signal. The most prominent way here would be the visible picture itself, like in peeking thru a window onto a screen :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't laugh, but it was (and is) used quite a lot. It doesn't need super high tech to spy - a good pair of glasses can do it as well :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based thereon, it works as well if the screen is not visible from the outside. For example via reflections by walls. Unlike assumed by humans when viewing a screen, it isn't static, but drawn over and over again. Exactly like the signal is delivered. So targeting the window with a sensible photometer and amplifying the fluctuation will as well enable a reconstruction of the signal shown. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, with CRTs it's not even necessary to have a window, as they as well emit the picture in x-ray band. So at least with paper thin walls and a detector pointed at the screen front it can be captured from a windowless room.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;3) Is there a way to eliminate this threat with older computer hardware?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The thread is still there, especially since detection now can uses digital signal processing to filter even better from even fainter signals. It got somewhat reduced due higher resolutions, high frequency transmissions and the use of low intensity displays like LCD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Counter measures are the same as for all radio and light emissions. shielding for computers, cables and screens (and rooms), no direct sight and no windows will reduce the risk to almost zero - in addition, having several similar devices (screens, computers) in close distance (same room) will scramble up the signal to an almost undetectable smudge.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-03-21T07:27:45.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9393" PostTypeId="2" ParentId="9382" CreationDate="2019-03-21T09:17:35.540" Score="11" Body="&lt;p&gt;PS/2 is a SPI protocol. Talking to stuff like your keyboard is literally what SPI peripherals are designed for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the most obvious choice, if your micro has a SPI peripheral, is to use it. If you think that sounds too easy, wait until you start looking at the registers to set it up. It can be a lot harder than you think, if you're not used to following specs to the absolute letter!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But let's suppose you want to do it the hard way. Then you're looking at shift registers and some logic, which is how the peripheral works anyway. It's not just the parity bit you need to check. For a valid frame, there must be start and stop bits too. Two 8-bit shift registers are fine - just ignore the lower bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could interrupt on a keyboard clock edge, read in both shift registers, and work out whether the top 11 bits form a valid message. That's cheap on components, but puts more load on the processor. At 16kHz, it's probably not too bad though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you can decode in hardware - basically build yourself a small version of the SPI peripheral you've got in your micro. You can do this in stages of increasing complexity.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The most basic version would just use a 4-bit counter to count clocks, interrupting the micro and resetting itself after every 11. Assuming there are no framing errors, that will work. With any framing errors, it will always be wrong though.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Then we look at the start bit. Now the counter needs the data line to be low before it'll start counting. Once the counter is non-zero, it keeps counting until it reaches 11. OR together the data line and the 4 counter bits, and you're set. Now if there's a framing error, repeated sends will eventually sync up and you're sorted.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The neat thing now is that you can get back to only using an 8-bit shift register, by only enabling the shift register clock when the counter is between 1 and 9. Other bits won't come through.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Then the stop bit. The 11th bit has to be high. So only interrupt the processor when you get to 11 clocks AND the data line is currently high.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And then parity, which is not a good way of error-checking, but anyway. You want a second counter, clocked normally, and enabled when the counter is between 1 and 9 &lt;em&gt;and&lt;/em&gt; the data line is high (or low, depending on how you want to do it). Then you need a flip-flop which captures this on clock 10, and you AND this with the conditions from step 3.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;And now you have a working SPI receiver.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;5&quot;&gt;&#xA;&lt;li&gt;For full compliance with PS/2, you should also check the length of the initial clock low pulse, which makes you better at detecting framing errors. Trigger a monostable on the falling clock edge, feed the monostable into the S and enable inputs of an SR flip-flop, and feed the clock input to the R input. If the clock stays low for that time, the flip-flop output stays set. If not, the flip-flop output gets cleared at some point. Use this as another condition for starting the counter. Note that this is actually something you can't do with a regular SPI peripheral.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A naive version might disable this detection whilst the counter is non-zero. After all, we know we've got a frame start, right? The correct version keeps it running though, because what happens if you lose the connection mid-frame and then get it back again? So if you get an extended low clock pulse &lt;em&gt;at any time&lt;/em&gt;, it will reset the counter back to 1 to pick up the new frame, and just overwrite anything currently in the shift registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not going to get onto the Tx side, because that's a whole nother world of pain. Left as an exercise for the reader, as they say. :)&lt;/p&gt;&#xA;" OwnerUserId="6749" LastActivityDate="2019-03-21T09:17:35.540" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9394" PostTypeId="2" ParentId="1613" CreationDate="2019-03-21T11:40:00.397" Score="4" Body="&lt;p&gt;The processors used by Nintendo Game &amp;amp; Watch, are Sharp SM510 or SM511 microcontroller with embedded ROM, that are indeed used also in some calculator. &#xA;MAME emulates all the Game &amp;amp; Watch (a lot of them) of which ROM program has been extracted. &#xA;Further reference: &lt;a href=&quot;http://emulation.gametechwiki.com/index.php/Game_%26_Watch&quot; rel=&quot;nofollow noreferrer&quot;&gt;Emulation General&lt;/a&gt; or &lt;a href=&quot;https://github.com/mamedev/mame/blob/master/src/mame/drivers/hh_sm510.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;MAME emulator handheld source code&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="12130" LastEditorUserId="12130" LastEditDate="2019-03-21T11:51:09.047" LastActivityDate="2019-03-21T11:51:09.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9395" PostTypeId="2" ParentId="9383" CreationDate="2019-03-21T12:36:36.313" Score="11" Body="&lt;p&gt;Firstly, a little bit of background information. The Gotek is designed to work with a wide number of computers, not just IBM-compatibles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original standard for floppy drives (designed by Shugart) allowed for up to four floppy drives to be connected to one controller. The controller would indicate which drive it wanted to communicate with by activating a Drive Select signal on one of four wires (typically labelled DS* or S*), then activate the Motor On signal to spin up the drive. When installing a floppy drive, you would be expected to set the jumpers correctly for the intended drive number, and several other parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM-compatibles use the same floppy dries, but in a slightly non-standard way. It only supports two drives, and has separate motor control for each drive. (See &lt;a href=&quot;http://old.pinouts.ru/HD/InternalDisk_pinout.shtml&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; for a description of the pinout for Shugart and IBM cables.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What IBM cleverly did was get rid of the need to set jumpers on the drives by swapping some of the wires in the floppy drive cable instead. All drives for IBM-compatible systems are shipped from the factory jumpered as drive 1 (B:), but a twist in the cable swaps wires 10 to 16 (seven wires) around for one drive, which swaps the Drive Select and Motor Enable signals. The net result of this is that the drive you plug in after the twist will respond to DS0 signals (as drive A:) and the drive before the twist will respond to the DS1 signals (as drive B:).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming you have an IBM-style floppy cable, with wires 10-16 twisted, you will want to &lt;strong&gt;set both drives to S1&lt;/strong&gt;. You will also need to configure the Olivetti's BIOS to expect two 720k floppy drives connected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MO jumper is likely controlling how the Gotek responds to the Motor Enable signal. The JA, JB, JC, and J5 jumpers are probably Gotek-specific settings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will also need to make sure that the floppy drive cable is &lt;strong&gt;plugged in the right way around&lt;/strong&gt;: the coloured stripe along the cable usually indicates the location of pin 1, but in the picture you've uploaded the stripe is next to pin 34 of the Gotek (as labelled on the PCB). A genuine floppy drive will spin constantly with it's LED lit when you fit the cable upside-down, and the computer will fail to communicate with it. I would expect similar behaviour from a Gotek.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-03-21T12:36:36.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9396" PostTypeId="1" CreationDate="2019-03-21T16:43:34.153" Score="4" ViewCount="161" Body="&lt;p&gt;The Apple //e &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1034/what-was-the-change-to-the-apple-e-motherboard-that-allowed-for-double-hires-g&quot;&gt;originally did not support Double HiRes graphics&lt;/a&gt; (DHR). The engineers realized they could double their hires and lores X resolution shortly after the introduction of the machine, so the feature is only available on Revision B and later motherboards. However, to use DGR/DHR you needed the Extended 80-Column Card which added 64KB of RAM to the machine in the AUX slot and you had to close a jumper on the card to enable the feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I've seen some screenshots of what happens when DHR is attempted on Rev A machines (basically a horizontally mangled normal HiRes mode), I became curious as to why it required a jumper since it appears to just fail visually otherwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there something in the firmware which is reflected by the jumper that would otherwise &quot;protect&quot; DHR on a non-Rev A machine? I'm just really curious what the jumper really does since the failure mode on a Rev A machine (with correct jumper setting) simply seems to be the horizontally smushed display.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2019-03-21T16:43:34.153" Title="What would happen if the DHR jumper was enabled on a Rev A Apple //e?" Tags="&lt;apple-ii&gt;&lt;graphics&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9397" PostTypeId="1" AcceptedAnswerId="9399" CreationDate="2019-03-22T00:12:57.280" Score="4" ViewCount="551" Body="&lt;p&gt;I am trying to build a Z80 computer inspired by Grant Searle's design.  I'm starting simple, with just a clock (clocked by an AVR pulsing at at 12.5 Hz for testing), a Z80, and a 8K EEPROM with a simple program loaded:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0001   0000            .ORG $0000&#xA;0002   0000 00         START:         NOP&#xA;0003   0001 C3 00 00                  JP      START&#xA;0004   0004            .END&#xA;tasm: Number of errors = 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have A0-A10 connected and of course D0-D7, and all the usual control pin connections per the design.  The violet &quot;DATA&quot; bus line on the scope picture below is simply D0-D7 shown as hex. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wanted the simplest program I could write that had at least one non-zero opcode in it so that I could observe the data bus on my scope and see the data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It works as expected for perhaps two minutes after a clean reset, then it starts acting weird, showing this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jGEFr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jGEFr.png&quot; alt=&quot;SCOPE OUTPUT&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the assembled object code, I cannot understand how it ever leaves the C3-00-00-00-00 loop it should stay in.  I cannot explain how I'm seeing a 39 or an FF at any time on the data bus as the program runs.  Can someone suggest what I might have wrong to create such weird output?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also notice the unusual coincidence of the FF and the /RD signal being active.  When it fails, the /RD signal quits going low.  That makes no sense to me.  Any ideas?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I speed the clock up 10x to 125 Hz, it starts the weird pattern in just a few seconds, not a few minutes.&lt;/p&gt;&#xA;" OwnerUserId="5153" LastEditorUserId="5153" LastEditDate="2019-03-22T00:51:53.757" LastActivityDate="2019-03-28T18:19:59.150" Title="Z80 unexpected output" Tags="&lt;assembly&gt;&lt;z80&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9398" PostTypeId="2" ParentId="9397" CreationDate="2019-03-22T05:34:29.693" Score="7" Body="&lt;p&gt;If your Z80 is a NMOS one (Z084000* or Z80*), it can't run at frequencies &lt;em&gt;lower&lt;/em&gt; than ~250kHz. Specifically, current datasheets for NMOS Z80 state that the maximum time clock signal could be constant (either 0 or 1) is 2 µs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for that apparent weirdness is that NMOS Z80 heavily relies on NMOS transmission gate latches, which significantly lower the total transistor count, but have a drawback of not tolerating long static periods. Look at &lt;a href=&quot;http://www.icsd.aegean.gr/lecturers/nkonofao/%CE%94%CF%85%CE%BD%CE%B1%CE%BC%CE%B9%CE%BA%CE%AC%20%CE%BB%CE%BF%CE%B3%CE%B9%CE%BA%CE%AC%20%CE%BA%CF%85%CE%BA%CE%BB%CF%8E%CE%BC%CE%B1%CF%84%CE%B1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this introduction to dynamic logic circuits&lt;/a&gt; (page 3 has an exact picture of the transmission gate latch).&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="7946" LastEditDate="2019-03-25T18:48:21.060" LastActivityDate="2019-03-25T18:48:21.060" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9399" PostTypeId="2" ParentId="9397" CreationDate="2019-03-22T10:49:03.030" Score="3" Body="&lt;p&gt;&lt;em&gt;[Not a direct answer, just a few remarks and ideas how to proceed]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FF looks much like reading outside any responding memory, doesn't it?&#xA;Without seeing the address it's hard to see where it's running.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;So you may want to &lt;strong&gt;show some address lines&lt;/strong&gt; - if short of inputs, start with A2 and up.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;While at it, &lt;strong&gt;add M1&lt;/strong&gt; to the display, as this will show if the CPU is running or halted for whatever reason.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;M1 in combination with address lines is much more informative of what the CPU does than data lines or read signal. You're debugging a ROM system; here memory content is well known (hopefully) and constant (as well).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did you clear the ROM before usage or are there &lt;strong&gt;any leftovers&lt;/strong&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mentioned /INT and /NMI signals are a great source of confusion, here especially /NMI, as regular interrupts are disabled after Reset. So you may want to have a similar routine at 66h.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, /BUSREQ may scramble up any interrupt (on an NMOS at least).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suggestion:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Make sure the ROM is cleared.&lt;/li&gt;&#xA;&lt;li&gt;Add your (Reset) loop at 00h&lt;/li&gt;&#xA;&lt;li&gt;Add another loop at 66h for NMI&lt;/li&gt;&#xA;&lt;li&gt;Monitor M1 and A7..A0 building a hardware trace utility&lt;/li&gt;&#xA;&lt;li&gt;Check where the CPU runs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I wouldn't change the hardware otherwise, as the intention is to see what's going wrong, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this your scope should give you a nice instruction level trace of&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;00/01/00/01&lt;/code&gt; when running as expected, or&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;66/67/66/67&lt;/code&gt; after an NMI (maybe add a button), or&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;anything else&lt;/strong&gt; when running wild.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, when changing the setup, make sure all external requests are nicely tied to +5V. Each and every one with its own resistor to prevent any spike spilling over. This means &lt;code&gt;/WAIT&lt;/code&gt;, &lt;code&gt;/INT&lt;/code&gt;, &lt;code&gt;/NMI&lt;/code&gt; and &lt;code&gt;/BUSREQ&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, you should not connect the write input of the EEPROM (just saying :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-03-25T18:33:37.680" LastActivityDate="2019-03-25T18:33:37.680" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9400" PostTypeId="1" AcceptedAnswerId="9402" CreationDate="2019-03-22T11:53:48.280" Score="20" ViewCount="5414" Body="&lt;p&gt;It is well known that when emulating classic games on modern displays, you need to be careful not to distort the aspect ratio. Generally speaking, CRT screens were 4:3, and specific pixel aspect ratios of many classic arcade games, consoles and computers are given &lt;a href=&quot;http://pineight.com/mw/index.php?title=Dot_clock_rates&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, title safe area was a concern, particularly for home computers that had to work on many different models of TV sets. It's hard to say exactly what was the title safe area for NTSC TV, but the Commodore 64 is generally accepted as having come pretty close to it. From the above table, 320 pixels / 8.19 MHz = 39 microseconds, which sounds in the right ballpark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NES: 256 pixels / 5.37 MHz = 47.6 microseconds. That is significantly past the title safe area and into overscan, but that's fine, that was a feature for a dedicated console; it matches one's memory of playing Super Mario Brothers, where objects would scroll onto the right of the screen without any visible border.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Missile Command: 256 pixels / 5 MHz = 51.2 microseconds. Hmm. That is even considerably further into overscan. Resources are being wasted generating pixels the player will never see...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... unless. That's an arcade machine. It came with its own screen. Sure, TV picture tube minus the tuner, 4:3 overall aspect ratio. But maybe they could have tweaked the display electronics to shrink the horizontal scan, so more of that 51.2 microsecond active scan line is visible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in that case, the calculated pixel aspect ratio of 27:22 would be no longer valid. And in general, it would be harder to figure out exactly what was the pixel aspect ratio of arcade machines. Calculating it from the pixel clock in the same way as for home computers and consoles would no longer give quite the correct results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the above conjecture correct? Or did arcade machines actually use the same parameters as TV sets, and did Missile Command just accept some extra wasted pixels?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="3748" LastEditDate="2019-03-23T19:21:44.070" LastActivityDate="2019-03-25T14:44:00.610" Title="Did arcade monitors have same pixel aspect ratio as TV sets?" Tags="&lt;hardware&gt;&lt;display&gt;&lt;arcade&gt;&lt;ntsc&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9401" PostTypeId="2" ParentId="9382" CreationDate="2019-03-22T12:12:59.730" Score="8" Body="&lt;p&gt;If you really want to do it the shift-register way, there are &lt;a href=&quot;https://www.digikey.com/product-detail/en/on-semiconductor/MC10E143FNR2G/MC10E143FNR2G-ND/1477853&quot; rel=&quot;noreferrer&quot;&gt;9 bit shift registers available&lt;/a&gt;. If you do a search at digi-key for '9 bit shift register', then sort the resulting table by number of logic elements, you can see a few varieties on that theme.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternately, you could use chain two 8 bit shift registers and ignore the other 7 bits of the second shift register.&lt;/p&gt;&#xA;" OwnerUserId="4356" LastActivityDate="2019-03-22T12:12:59.730" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9402" PostTypeId="2" ParentId="9400" CreationDate="2019-03-22T12:34:48.437" Score="35" Body="&lt;p&gt;CRTs don't have pixels, they don't work that way. Also, arcade monitors expose all the picture controls at the back so it is possible to adjust them quite extensively. Operators would have made sure that the picture was the right shape and in focus near the edges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the controls are all analogue and no-one bothered to measure the display geometry the aspect ratio was just close to 4:3, basically whatever looked good to whoever set it up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The picture controls adjust the width of the beam scanning area, for example, so the pixel clock is irrelevant. The owner just turns the knob until the picture covers most of the screen. Games were designed with this in mind and the horizontal resolution was just that - resolution, not an attempt to create a particular aspect ratio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with thanks to Tommy, here is an image from an actual CRT. In the upper right there is a zoomed in area from Sonic's foot, which shows some of the vertical bars that people often assume are pixels are in fact not evenly lit. The tops and bottoms of some of them are at different brightness levels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fSIbg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fSIbg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bars you can see are actually the shadow mask, and are unrelated to pixels. They define the maximum horizontal resolution that the CRT is capable of resolving, but even then the relationship is not 1:1.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2019-03-25T14:44:00.610" LastActivityDate="2019-03-25T14:44:00.610" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9403" PostTypeId="2" ParentId="9400" CreationDate="2019-03-22T13:23:50.990" Score="14" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did arcade monitors have same pixel aspect ratio as TV sets?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Short answer: &lt;strong&gt;No, not necessarily.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Long Answer:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;To start with, 'Title Safe Area' is an idea to define the &lt;strong&gt;parts of &lt;em&gt;one&lt;/em&gt; transmission to be displayed even if &lt;em&gt;any&lt;/em&gt; of the many receivers is maladjusted&lt;/strong&gt;. It's nothing inherent to the TV signal or its definition, it's a safeguard against less than correct receivers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next, Pixel ratio is, even on a TV, complete arbitrary. TV sets a frame timing, but not a pixel one. The number frames per second and number of lines within a frame is defined by the respective standard, but that's it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The number of pixels per line is, even on TV, infinite. Of course, as  they get defined 'tighter', as more restrictions due transmission and electronics appear. It's up to the application what restrictions are acceptable or not. In general, colour resolution on TV is less than luminescence resolution.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When it comes to the tube, none of these standards set any numbers. While they are made to fit certain standards, a CRT offers complete freedom, not only for pixels per line (as in TV) but also for number of lines per frame and frames per second - as long as it's within the CRTs abilities.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Parameters are set here mostly by screen mask (for colour games) resolution, phosphor used and electronics used for deflection.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;As a result, even by using standard CRTs and average electronics resolution and pixel ratio can diverge quite from what a TV supports - and in both cases &lt;strong&gt;Pixel resolution is arbitrary due the fact that signals are analogue&lt;/strong&gt; and not bound to any standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pixel ratio in video games is thus defined by the generating computer system video circuit (assuming a correct alignment of the installed game/CRT). If a game (hardware) developer chooses a format of 512 lines by 1024, then that it is. Depending on the arcade cabinet setup (screen covers, etc), this may end up in any arbitrary ratio, not just 2:1 or 8:3. Being freed from TV specs is a great thing, isn't it :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2019-03-23T19:21:31.163" LastActivityDate="2019-03-23T19:21:31.163" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9404" PostTypeId="2" ParentId="9400" CreationDate="2019-03-22T17:55:36.473" Score="7" Body="&lt;p&gt;&lt;em&gt;Asteroids&lt;/em&gt; is an example of an arcade cabinet that didn’t even use raster graphics, but vector graphics.  &lt;em&gt;Battlezone&lt;/em&gt; and &lt;em&gt;Lunar Lander&lt;/em&gt; were others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They used similar technology to the Tektronix 4000-series terminals of the ’70s, or the IBM 2250:  A cathode ray fired into the back of a glass screen coated with phosphors, like in an old-fashioned black-and-white TV, but instead of moving across each row of the stream in a regular pattern and switching on and off, it instead followed a more complex path to draw geometric line art.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2019-03-24T20:45:24.813" LastActivityDate="2019-03-24T20:45:24.813" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="9405" PostTypeId="1" AcceptedAnswerId="9408" CreationDate="2019-03-22T18:41:55.190" Score="-1" ViewCount="236" Body="&lt;p&gt;I know they have been around for a long time, for example this &lt;a href=&quot;https://github.com/freedesktop/xorg-proto-x11proto/commit/f2001f5bd5316842106a98b23f09400688575fa3#diff-b35d21e918c756b86da78959d6bc4a27R61&quot; rel=&quot;nofollow noreferrer&quot;&gt;2003 commit&lt;/a&gt; has support for them. What was the first...?&lt;/p&gt;&#xA;" OwnerUserId="3722" LastActivityDate="2019-03-23T10:09:10.310" Title="What was the first keyboard to have browser forward/back keys?" Tags="&lt;keyboards&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9407" PostTypeId="1" AcceptedAnswerId="9409" CreationDate="2019-03-22T20:16:28.390" Score="1" ViewCount="841" Body="&lt;p&gt;I would like to look back to the very beginning of personal computer when Paul Allen and Bill Gates started their debut. So I need to find an emulator of the &lt;strong&gt;MIT Altair 8800&lt;/strong&gt; with &lt;strong&gt;Intel 8080 processor&lt;/strong&gt; inside. Then where can I find and download its emulator for Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried to search over the net, and I found emuStudio-0.39 simulator software. But seems that it is not what I want. I want an emulator that the  front panel's look is very similar to the original as the picture below. Below are two screen capture of the emuStudio-039. It is a Java program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want an emulator which I can click to input the command, just exactly like what it done with the true MIT Altair 8800.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/A4Xag.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/A4Xag.jpg&quot; alt=&quot;Altair 8800 front panel&quot;&gt;&lt;/a&gt;&#xA;&lt;em&gt;Altair 8800 front panel. &lt;a href=&quot;https://www.altair32.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HhQ7p.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HhQ7p.jpg&quot; alt=&quot;emuStudio-0.39&amp;#39;s source code editor&quot;&gt;&lt;/a&gt;&#xA;&lt;em&gt;emuStudio-0.39's source code editor&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qfXDH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qfXDH.jpg&quot; alt=&quot;emuStudio-0.39&amp;#39;s emulator&quot;&gt;&lt;/a&gt;&#xA;&lt;em&gt;emuStudio-0.39's emulator&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="12123" LastActivityDate="2019-03-22T21:29:06.800" Title="Where can I find and download emulator of Altair 8800 with Intel 8080 processor for Windows?" Tags="&lt;8080&gt;&lt;altair-8800&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9408" PostTypeId="2" ParentId="9405" CreationDate="2019-03-22T20:26:37.197" Score="5" Body="&lt;p&gt;The web didn’t exist back then, but some of IBM’s &lt;a href=&quot;https://en.wikipedia.org/wiki/3270&quot; rel=&quot;nofollow noreferrer&quot;&gt;3270 terminal&lt;/a&gt; keyboards had forward and back keys; for example the keyboard provided with the 3279 terminal in 1979 (look at the cursor keys in the bottom right-hand corner):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/a/a8/IBM-3279.jpg&quot; alt=&quot;Photo of an IBM 3279 terminal&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Photograph by Dave Fischer; &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:IBM-3279.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;source&lt;/a&gt;; &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/deed.en&quot; rel=&quot;nofollow noreferrer&quot;&gt;CC BY-SA 3.0&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-03-23T10:09:10.310" LastActivityDate="2019-03-23T10:09:10.310" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9409" PostTypeId="2" ParentId="9407" CreationDate="2019-03-22T20:41:55.780" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] So I need to find an emulator of the MIT Altair 8800 with Intel 8080 processor inside. Then where can I find and download its emulator for Windows. I have tried to search over the net [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not sure where you searched. If I just start entering &lt;code&gt;MITS ALT...&lt;/code&gt; Google already offers to autocomplete with &quot;mits altair 8800 emulator&quot;, resulting in a reasonable &lt;a href=&quot;https://www.google.com/search?q=mits%20altair%208800%20emulator&quot; rel=&quot;noreferrer&quot;&gt;list of links&lt;/a&gt; - including the mentioned emuStudio (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The top entry, at least on my screen is &lt;a href=&quot;https://s2js.com/altair/&quot; rel=&quot;noreferrer&quot;&gt;S2Js Altair page&lt;/a&gt;. By being a JavaSript teaching site, it's naturally made in JavaScript making it portable to any system with a somewhat up to date browser, not just Windows. Documentation is also made quite well, although not as extensive as the emuStudio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And behold its &lt;a href=&quot;https://s2js.com/altair/sim.html&quot; rel=&quot;noreferrer&quot;&gt;photo realistic appearance&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then there is the Emulation-Wiki offering an entry about &lt;a href=&quot;http://emulation.gametechwiki.com/index.php/Altair_8800&quot; rel=&quot;noreferrer&quot;&gt;Altair emulatons&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: And then there's &lt;a href=&quot;https://en.wikipedia.org/wiki/MAME&quot; rel=&quot;noreferrer&quot;&gt;MAME&lt;/a&gt; - always a sure bet. In case of non game systems especially the &lt;a href=&quot;https://en.wikipedia.org/wiki/Multi_Emulator_Super_System&quot; rel=&quot;noreferrer&quot;&gt;MESS&lt;/a&gt; sub project.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Which is by the way a quite good site, offering &lt;a href=&quot;http://www.emustudio.net/docuser/mits_altair_8800/index/&quot; rel=&quot;noreferrer&quot;&gt;an incredible detailed introduction&lt;/a&gt; of the Altair and its ecosystem to today's readers.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-03-22T21:29:06.800" LastActivityDate="2019-03-22T21:29:06.800" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9410" PostTypeId="2" ParentId="9383" CreationDate="2019-03-22T22:01:10.697" Score="3" Body="&lt;p&gt;Thanks for all the support!&#xA;I resolved in the following way, hoping this could help someone else with the same doubts in the future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Connectors&#xA;&lt;a href=&quot;https://i.stack.imgur.com/50xxN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/50xxN.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jumpers on Gotek&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kDL8X.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kDL8X.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Resuming: 2 HxC Gotek drives (SFRM72-TU100K) on a 16bit-based XT-clone (cpu NEC V30 at 8MHz with 640MB RAM), 720Kb each, detected as A: and B:, read/write enabled, working well on MS-DOS (all versions).&lt;/p&gt;&#xA;" OwnerUserId="8912" LastActivityDate="2019-03-22T22:01:10.697" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9411" PostTypeId="1" CreationDate="2019-03-23T02:22:24.353" Score="10" ViewCount="891" Body="&lt;p&gt;I am sure many of you remember the gigantic Computer Shopper magazines of the 1990's; but Computer Shopper actually dates back to sometime in 1979, and still exists in electronic form today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my various travels across the interwebs I have found many sites devoted to preserving magazines and books from the early days of personal computing; but I've never found a collection of Computer Shopper scans.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe the Shopper just isn't as glamorous as some other big-name publications, but I suspect the first decade (before the explosion of beige box clones) would provide a lot of insight into pricing trends, availability, hot products, flash-in-the-pan mail-order companies, vaporware, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the risk of inviting link only answers - does anyone know if such a preservation effort exists? &lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="2054" LastEditDate="2020-01-06T21:45:19.653" LastActivityDate="2020-07-01T23:02:12.557" Title="Where can I donate my old Computer Shopper Magazines to make sure they get scanned and shared?" Tags="&lt;data-preservation&gt;&lt;archival&gt;&lt;magazine&gt;" AnswerCount="3" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="9412" PostTypeId="1" AcceptedAnswerId="9413" CreationDate="2019-03-23T02:45:56.180" Score="4" ViewCount="389" Body="&lt;p&gt;'Sneakernet' is a colloquial term for moving data by walking back and forth with a removable digital medium such as a floppy disk or tape in your hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 'IBM's 360 and Early 370 Systems', page 533, I came across this interesting quote:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It was over a year after he moved to Boulder before Winger could spare resources for more than preliminary studies. By then his observations of tape library operations at several installations had convinced him that a lot of machine time and labor could be saved if the process could be automated and placed under computer control. At the McDonnell Douglas Corporation in St. Louis, for example, he had watched &quot;boys and girls in tennis shoes, running back and forth between the machine room and the tape library, carrying as many as eight to ten reels on one arm.&quot; Tapes could easily be misplaced in the library or on the machine floor, thus wasting expensive time and delaying the completion of critical jobs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;My experience with sneakernetting was in the eighties and nineties with floppy disks, where it was just something everyone did from time to time. It hadn't occurred to me that in the big old mainframe systems, it might be a full-time job, yet that seems to be what the above description is suggesting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I understanding the description correctly? In the old mainframe systems, were people actually employed full-time, specifically to carry tapes and disk packs back and forth?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-03-27T12:26:48.283" Title="Was sneakernet a job description?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;magnetic-tape&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9413" PostTypeId="2" ParentId="9412" CreationDate="2019-03-23T08:07:30.993" Score="8" Body="&lt;p&gt;That quote sounds quite chaotic. My experience about tapes (and disks) moved to/from storage in /370 installations is of orderly carts made to hold up to 50 tapes or 6-8 disk stacks, fine labelled and handled on a fixed schedule (twice daily, some places more often) by a dedicated service. No running with tapes up the arms or alike. Everything planned ahead - after all, that's what IT is about, not only in Germany, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The service was much like internal (and incoming/outgoing) mail is handled in big companies. Except the routes/destinations were few. Usually it was the archive guys that pushed the carts as part of their job. Some walking exercise in addition to place the right numbered tape into the right shelf location according to some printout from the archive system - or fetching it from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the job description was more of a computer archive handler than a sneakernet delivery boy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transfers between locations (of large companies) were usually done by the internal mail service. So their description is the one of a mail handler.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-03-27T12:26:48.283" LastActivityDate="2019-03-27T12:26:48.283" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9414" PostTypeId="2" ParentId="9412" CreationDate="2019-03-23T09:50:12.123" Score="6" Body="&lt;p&gt;In the company I worked for, there certainly weren't people &quot;running around&quot; with tapes etc. The &quot;tape library&quot; was a whole department, and the physical storage occupied almost a complete floor of the computer building. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The size of the library was well over 10,000 tape reels - not all &quot;active&quot; or regularly used, but much of it was data from engineering tests, some of it dating back several decades.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to run a &quot;tape job&quot; that wasn't part of the regular schedule, you filled in the paperwork specifying exactly which reel numbers you needed - and if you got that wrong, the operators didn't &quot;run around&quot; to fix the problem, your job was simply aborted. If you screwed up the paperwork more than once, your manager would get an earful of abuse from the tape library management, for wasting everyone's time!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tape librarians were not just there to do the &quot;fetching and carrying&quot; - they also had the responsibility for making backup copies, &quot;refreshing&quot; old archival data by periodically copying it onto new tapes, etc.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2019-03-23T09:50:12.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9415" PostTypeId="1" CreationDate="2019-03-23T15:22:46.757" Score="4" ViewCount="252" Body="&lt;p&gt;I have fond memories of several educational computer games from school circa 1993–1998. Possibly from &lt;a href=&quot;https://en.wikipedia.org/wiki/MECC&quot; rel=&quot;nofollow noreferrer&quot;&gt;MECC&lt;/a&gt;, but I haven't found this game on any lists of MECC games as far as I could tell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a simulation, similar to &lt;a href=&quot;https://en.wikipedia.org/wiki/Hamurabi_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hammurabi&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Lemonade_Stand&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lemonade Stand&lt;/a&gt;. It did have color graphics, though; it wasn't purely text-based. (This was the era of CGA/EGA/VGA graphics options.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a farming/gardening simulation. You have a greenhouse where you can plant various vegetable crops. The only vegetable I'm 99% confident was involved was &quot;kohlrabi.&quot; I remembered that one because this was the first place I'd heard of it, and I still didn't really know what it was until years later. Other vegetables you could plant might have included peas, corn, string beans, that kind of thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think there was a weather aspect (X probability of sunny weather, X probability of cloudy weather), and you had to decide how much to water the plants, and so on. I don't really remember the parameters of the simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were several other simulation games on the same computer; I don't know if they might have been packaged together. One involved making model rockets; one involved racing cars and featured a wind-tunnel screen; one was definitely &lt;a href=&quot;https://en.wikipedia.org/wiki/Odell_Lake_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Odell Lake&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3581" LastEditorUserId="4921" LastEditDate="2020-01-16T06:34:43.367" LastActivityDate="2020-01-16T06:34:43.367" Title="Identify this 1990s-era educational game featuring kohlrabi" Tags="&lt;identify-this-game&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9416" PostTypeId="2" ParentId="9177" CreationDate="2019-03-23T16:55:18.680" Score="6" Body="&lt;p&gt;&lt;a href=&quot;http://www.ipdatacorp.com/mmurtl/&quot; rel=&quot;noreferrer&quot;&gt;MMURTL&lt;/a&gt; by Richard Burgess, was the subject of a book that Sams published as: &lt;em&gt;Developing your own 32-bit Operating System&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MMURTL makes no attempt at portability, instead making direct (and heavy) use of the 386's hardware support for tasks, task switching, and pretty much everything else. The licensing conditions for either/both the book and code are &lt;em&gt;fairly&lt;/em&gt; liberal:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As you may know, &lt;strong&gt;the source code to MMURTL itself if in the public&#xA;  domain.&lt;/strong&gt; I did this to allow you to do anything you desire with it.&#xA;  Even build  the &quot;Son of MMURTL&quot; - or daughter of MMURTL - that's OK,&#xA;  too.  The rights to the book are mine and no longer belong to the&#xA;  original (or any) publisher.  You are welcome to a free copy (on me)&#xA;  and you may also post whole copies where you like (when needed) and&#xA;  give them away. Please don't post sections of the book with providing&#xA;  a reference back to the book itself (here)  mainly because I hate&#xA;  finding things where the source is not identified or available.  &lt;strong&gt;That&#xA;  is all I ask of you (and it isn't much).&lt;/strong&gt;  Use it all in good heath and&#xA;  most of all, enjoy yourself. &lt;strong&gt;And don't forget to spend time with your&#xA;  family!  It is important that you do.&lt;/strong&gt;(or at least communicate if away&#xA;  from them).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you're looking for examples of commercial use, this probably isn't very interesting (though it has apparently seen &lt;em&gt;some&lt;/em&gt; commercial use). It's probably a lot more interesting for somebody who wants to write code making use of that part of the hardware.&lt;/p&gt;&#xA;" OwnerUserId="808" LastActivityDate="2019-03-23T16:55:18.680" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9417" PostTypeId="1" CreationDate="2019-03-10T04:36:50.697" Score="1" ViewCount="256" Body="&lt;h2&gt;Which developer set the precedent?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I began wondering after recalling that Mozilla Firefox starts in safe mode if &lt;kbd&gt;Shift&lt;/kbd&gt; is held at &lt;em&gt;application&lt;/em&gt; startup time. Predecessors … I'm certain that Netscape Communications Corp didn't set the precedent, because the initial release of &lt;a href=&quot;https://wikipedia.org/wiki/Netscape_Navigator&quot; rel=&quot;nofollow noreferrer&quot;&gt;Netscape Navigator&lt;/a&gt; was in 1994. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Apple Computer, Inc. and uses of &lt;kbd&gt;Shift&lt;/kbd&gt; at or after &lt;em&gt;system&lt;/em&gt; startup, the earliest references I can find are from &lt;strong&gt;November 1991&lt;/strong&gt; and August 1992 (I began using Macs around January 1993). Respectively: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;… Peter Crownfiefd (via Zmac). …&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;… discovered that holding down the Shift key during startup not only bypasses System extensions but also bypasses items in the Startup Items folder, if you want your extensions to load but not the files in the Startup Items folder, wait until all your extensions have loaded and you see the &quot;Welcome to Macintosh&quot; message and then press the Shift key. Continue holding down the Shift key until the desktop appears. …&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;– &lt;a href=&quot;https://archive.org/stream/MacUser9111November1991/MacUser_9111_November_1991_djvu.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/stream/MacUser9111November1991/MacUser_9111_November_1991_djvu.txt&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;… To block the opening of items in System 7’s Startup Items folder, press the shift key when the Finder’s menu titles first appear in the menu bar during start-up. To additionally inhibit the loading of extensions from the Extensions folder. Control Panels folder, and System Folder, press the shift key when the smiling Mac icon appears at the very beginning of the start-up sequence. You can release the shift key after the “Welcome to Macintosh” message appears. …&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;– &lt;a href=&quot;https://archive.org/stream/MacWorld_9208_August_1992/MacWorld_9208_August_1992_djvu.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/stream/MacWorld_9208_August_1992/MacWorld_9208_August_1992_djvu.txt&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did Apple set the precedent?&lt;/p&gt;&#xA;" OwnerUserId="12135" OwnerDisplayName="Graham Perrin" LastActivityDate="2019-03-23T18:08:22.537" Title="Which developer set the precedent for use of the Shift key for safety (or skipping) at startup time?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9418" PostTypeId="2" ParentId="9417" CreationDate="2019-03-23T18:08:22.537" Score="2" Body="&lt;p&gt;I don't think you're going to find a single origin of this idea. The precedent for similar features on Apple machines goes back to early 1983 and the Apple //e. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;kbd&gt;Reset&lt;/kbd&gt; key on the Apple ][ was close to the &lt;kbd&gt;Return&lt;/kbd&gt; key, and was hit accidently more often than was desirable. On the //e, &lt;kbd&gt;Reset&lt;/kbd&gt; by itself did nothing, &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;Reset&lt;/kbd&gt; reset the machine and &lt;kbd&gt;Open-Apple&lt;/kbd&gt;-&lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;Reset&lt;/kbd&gt; did a cold start with a self-test. The &lt;kbd&gt;Open-Apple&lt;/kbd&gt; key later turned into the familiar clover-leaf key of present-day Apple machines.&lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-03-23T18:08:22.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9419" PostTypeId="2" ParentId="7395" CreationDate="2019-03-23T22:08:37.260" Score="3" Body="&lt;p&gt;Inmos (or perhaps Meiko) had a demo machine that used a large array of their parallel &lt;a href=&quot;https://en.wikipedia.org/wiki/Transputer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Transputer&lt;/a&gt; processors to solve dynamic finite-difference models in real time. They used Transputers that had failed internal memory testing but still had their inter-processor links working. This allowed a large array to be built at low cost, as the processors couldn't be sold with faulty memory but could be used as calculation nodes. I remember seeing a demo of the machine animate the waves in a snare drum head in real time. This was a huge deal in the 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, I can't find documentary proof of this. It may have been shown on &lt;em&gt;Tomorrow's World&lt;/em&gt;. There's very little left in computing history about Inmos. Their longest-lasting legacy was in VGA's slightly unusual colour choice. IBM chose an Inmos RAMDAC for the first VGA cards, and its specific timing resulted in the old and familiar VGA palette.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-03-23T22:08:37.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9420" PostTypeId="1" AcceptedAnswerId="9421" CreationDate="2019-03-24T04:31:31.240" Score="4" ViewCount="251" Body="&lt;p&gt;We know that computer is used for many things, to control many things, to do many jobs, as server, to control airplane traffic, and many things a computer can do. But I am curious about the MITS Altair 8800. As I read in many news or articles, that &quot;computer&quot; always said used by hobbyists. I have never read any article saying that that kind of computer used for special purpose, neither by a hobbyist nor by a company.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine that one of the hobbyist used that Altair 8800 to do simple calculation such as &quot;+, -, x, /&quot;, to control his/her room temperature, used for timer to turn on/off light at home, to water circulation of an aquarium, and so on. Then, what was the &quot;biggest&quot; or the greatest task ever performed by MITS Altair 8800?&lt;/p&gt;&#xA;" OwnerUserId="12123" LastActivityDate="2019-03-24T14:32:19.007" Title="What was the &quot;biggest&quot; or the &quot;greatest&quot; task ever performed by MITS Altair 8800?" Tags="&lt;altair-8800&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2019-03-24T18:47:38.757" ContentLicense="CC BY-SA 4.0" />
  <row Id="9421" PostTypeId="2" ParentId="9420" CreationDate="2019-03-24T14:32:19.007" Score="3" Body="&lt;p&gt;The Altair is the first of a category of machines that gave rise to CP/M — you'd need to add more RAM, a disk drive, a serial port and a terminal but adding to the box was standard usage; the Altair is the originator of the S-100 bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With CP/M you have word processors like WordStar, spreadsheets like Super Calc, databases like dBase, programming environments like Turbo Pascal and more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So an Altair may eventually have been used for mostly the same productivity tasks as MS-DOS.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-03-24T14:32:19.007" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9422" PostTypeId="1" AcceptedAnswerId="9423" CreationDate="2019-03-25T03:30:16.397" Score="1" ViewCount="224" Body="&lt;p&gt;I have a trs-80 model 100. I have all the option rams used. I've seen some quite useful ideas from other collectors on the internet for other TRS-80 model computers of using mouser electronic parts to create peripherals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;So it should be possible to create a custom rom chip that supports   4 MB of ram. Something like Re-mem?&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that some assembly language is going to have to be put into work and already found an open source assembler from another enthusiast on sourceforge for the model 100.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found out that its possible to create a custom Linux Kernel for the specific hardware. I can more conveniently use a stripped down Unix clone from sourceforge for the z80 type processors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A text based bootable Linux custom rom chip is possible. So any ideas to get a custom blank rom chip(with 50 mb for packages) would be useful. If not I'll have to do a long research project.&lt;/p&gt;&#xA;" OwnerUserId="11944" LastEditorUserId="7208" LastEditDate="2019-09-13T01:53:09.290" LastActivityDate="2019-09-13T01:53:09.290" Title="Expanded Ram Options for the TRS-80 Model 100 possible into the megabyte range?" Tags="&lt;rom&gt;&lt;trs-80-model-100&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9423" PostTypeId="2" ParentId="9422" CreationDate="2019-03-25T04:38:42.287" Score="4" Body="&lt;p&gt;Your question isn't very clear.  If the question is &quot;Would it be possible to design a memory expansion module for the Model 100 that adds large amounts of additional memory?&quot;, then the answer is yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Model 100 has its system bus exposed on the expansion connector.  It would certainly be possible to design a memory expansion that adds a memory window to the 8085's address space.  With bankswitching, the amount of additional RAM or ROM is effectively unlimited.  Software would have to be modified to be made aware of the bankswitched memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware could be quite simple.  A register to store the current bank.  A few logic gates to decode addresses.  A few logic gates to decode writes to the bank register.  One or more SRAM or EEPROM chips.  Some buffers.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This method has been used for memory expansion on many 8-bit and 16-bit systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not quite sure what you mean when you refer to Linux in your question.  Linux will not run on the 8085.  Linux requires a 32-bit processor and many megabytes of RAM with flat addressing.  With enough RAM you could theoretically write a program for the Model 100 that simulates a processor that can run Linux, but in practice it would be uselessly slow.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2019-03-25T05:09:30.870" LastActivityDate="2019-03-25T05:09:30.870" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9424" PostTypeId="1" CreationDate="2019-03-25T12:42:56.410" Score="6" ViewCount="1111" Body="&lt;p&gt;Would like to use a Linksys &quot;Etherfast PCMPC100&quot; PCMCIA network card under DOS 5.0, for file transfer. Am planning to use the &quot;XFS&quot; package to share directories with Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have found an archive file &lt;code&gt;PCMPC100.EXE&lt;/code&gt; apparently containing various drivers, and I get hits in Google, but most of the secondary links are dead. The Linksys web site predictably says the card is no longer supported.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the easiest way to get this working?&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2019-04-06T08:40:07.360" LastActivityDate="2019-04-06T08:40:07.360" Title="DOS networking (Ethernet)" Tags="&lt;ms-dos&gt;&lt;network&gt;&lt;pcmcia&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9425" PostTypeId="2" ParentId="9424" CreationDate="2019-03-25T16:38:05.423" Score="11" Body="&lt;p&gt;There are two sides to getting this sorted: the drivers for the device, and then the networking protocol you're going to use. But the archive PCMPC100.EXE seems to have most of what you'll require.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Drivers&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-DOS doesn't have any native support for PCMCIA cards, so you'll want to load a card enabler for your Etherfast. You'll find a copy of it in the ENABLER folder of the archive you downloaded. There's some guidance in an online copy of the Etherfast's manual &lt;a href=&quot;https://www.manualslib.com/manual/95877/Linksys-Etherfast-Pcm100-V2.html?page=7#manual&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, but it largely boils down to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Telling EMM386 to reserve some memory space for the enabler, with a line in your CONFIG.SYS like: &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;DEVICE=C:\EMM386.EXE NOEMS X=D000-D3FF&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Running the enabler when you boot the computer by adding a line to your AUTOEXEC.BAT&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;If you intend to use different PCMCIA cards, and hot-swap between them, you may want to look at the contents of the PCMCIA folder. These are configuration files for three different card management services that were available in the DOS era: PCM+, SystemSoft and Cardware. If you're just going to use the Etherfast (or restart the machine to swap cards) then you don't have to use them.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will also have to load a driver for your card. There are multiple drivers provided, for the different networking systems that were available at the time. So first you'll have to decide on a networking protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Network Protocol&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your three main options are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Novell &lt;a href=&quot;https://en.wikipedia.org/wiki/NetWare&quot; rel=&quot;noreferrer&quot;&gt;Netware&lt;/a&gt; (with drivers in the NETWARE folder)&lt;/li&gt;&#xA;&lt;li&gt;Microsoft &lt;a href=&quot;https://en.wikipedia.org/wiki/LAN_Manager&quot; rel=&quot;noreferrer&quot;&gt;LAN Manager&lt;/a&gt; (drivers in MSLANMAN.DOS)&lt;/li&gt;&#xA;&lt;li&gt;A &lt;a href=&quot;https://www.brutman.com/Dos_Networking/&quot; rel=&quot;noreferrer&quot;&gt;Packet Driver&lt;/a&gt; for general TCP/IP networking (drivers in PKTDRV)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As you are looking to share files over a local area network, I'd suggest Netware or LAN Manager (LANMAN) instead of a packet driver, as they were specifically designed for this task. If you choose to go for a packet driver, you'd then need to find DOS software to communicate over the network (such as FTP clients or similar). And as you're going to be sharing files with a Linux machine, my suggestion would be to opt for LANMAN. Why? Because it is the protocol that developed into Windows' SMB file sharing system. And the Linux equivalent, Samba, specifically supports &lt;a href=&quot;http://www.jacco2.dds.nl/samba/&quot; rel=&quot;noreferrer&quot;&gt;networking with DOS machines&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming you select LAN Manager and Samba as your solution, you will need to install a copy of MS LAN Manager Client (Version 2.x would be my suggestion) on your machine, and load the drivers from the MSLANMAN.DOS folder in your archive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When configuring Samba, you will have to tell it to use the older, insecure version of the LAN Manager hash for storing passwords. To compensate for this, you may wish to configure Samba to ignore any requests except from your machine (i.e. on a per-IP or subnet basis) or set up a separate network for this purpose.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-03-25T16:38:05.423" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9426" PostTypeId="1" CreationDate="2019-03-26T00:23:35.713" Score="16" ViewCount="4751" Body="&lt;p&gt;This may seem like an absurd question at first, but I've been giving it some thought and I'm genuinely curious about the design details of these devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was reading an &lt;a href=&quot;https://electronics.stackexchange.com/a/98926&quot;&gt;answer&lt;/a&gt; on an unrelated Stack Exchange site about the retrace/flyback details on old CRTs, and the image attached to that answer piqued my interest:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xJGdo.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xJGdo.gif&quot; alt=&quot;NTSC scan lines&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that both the horizontal and vertical deflection of the electron beam is controlled by two sawtooth waves, the vertical running at the refresh rate and the horizontal running a few hundred times faster than that. I also understand that both sawtooths are constant sweeps, and not &quot;stair stepped&quot; to hold at any particular voltage to accommodate the viewable lines or retrace periods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the premise of my question: In the context of one single horizontal trace across the screen, the vertical position is also constantly increasing (towards the bottom) in preparation for the next scan line. It then follows that the scan line's vertical position at the left edge of the screen is slightly higher than the position at the right edge, and the whole screen is a parallelogram with left and right edges perfectly vertical, and top and bottom edges both slanted down towards the bottom right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming the premise is correct, was it common (or even feasible) for the designers of CRT computer displays to counteract this effect and make the screen and its contents perfectly square? Would such a compensation have even been worth the effort?&lt;/p&gt;&#xA;" OwnerUserId="12139" LastActivityDate="2019-03-27T18:02:44.610" Title="Was the picture area of a CRT a parallelogram (instead of a true rectangle)?" Tags="&lt;crt-monitor&gt;&lt;display&gt;" AnswerCount="7" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9427" PostTypeId="2" ParentId="9426" CreationDate="2019-03-26T00:57:37.327" Score="15" Body="&lt;p&gt;IIRC, the electron gun was actually installed in a position where it was rotated slightly relative to the tube, to compensate for this effect, so the scan lines did end up being horizontal.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-03-26T00:57:37.327" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9428" PostTypeId="1" CreationDate="2019-03-26T01:41:49.197" Score="4" ViewCount="187" Body="&lt;p&gt;I've seen some discussion of how templates were historically implemented in CFront around the web, including &lt;a href=&quot;https://docs.freebsd.org/info/gcc/gcc.info.Template_Instantiation.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The link describes the Borland model, which is familiar, and the CFront model with a separate template repository that persists between runs of the compiler. I can't think of any compilers now that are stateful in their normal mode of operation, only wrappers around compilers like &lt;code&gt;ccache&lt;/code&gt; and a few build systems that cache or support caching binary artifacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;I'm mostly curious what the CFront template support was like and how it supported (or didn't support) incremental recompilation. If I changed a template in my project slightly and recompiled, how did CFront make sure that its template repository was brought to a consistent state? Was it necessary to periodically purge the template repository in order to get a &quot;clean&quot; build?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First the Borland Model, which sounds like what we use today for C++. Templates are parsed and processed in every translation unit. If the expanded template ultimately produces any object code, it emits weak symbols. When linking occurs, the linker will keep exactly one of the (identical (hopefully)) implementations associated with the weak symbol and drop the rest. The below passage shows that in order to support the Borland C++ toolchain or workalikes required a different linker. The fact that the Borland Model needs a new linker is elaborated on in the second paragraph.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Borland Model&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Borland C++ solved the template instantiation problem by adding&#xA;     the code equivalent of common blocks to &lt;strong&gt;their&lt;/strong&gt; linker; template&#xA;     instances are emitted in each translation unit that uses them, and&#xA;     they are collapsed together at run time.  The advantage of this&#xA;     model is that the linker only has to consider the object files&#xA;     themselves; there is no external complexity to worry about.  This&#xA;     disadvantage is that compilation time is increased because the&#xA;     template code is being compiled repeatedly.  Code written for this&#xA;     model tends to include definitions of all member templates in the&#xA;     header file, since they must be seen to be compiled.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(emphasis mine)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the CFront Model. I'm assuming this would be a directory like &lt;code&gt;~/.cfront&lt;/code&gt; or &lt;code&gt;~/.templates&lt;/code&gt; that's managed by the compiler and stores expanded templates somehow. However, the comment about difficulties associated with building stuff in multiple directories or building multiple things in the same directory suggests that CFront created a template repository directory wherever it was launched and made no particular effort to avoid trampling the directory on future runs.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Cfront Model&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The AT&amp;amp;T C++ translator, Cfront, solved the template instantiation&#xA;     problem by creating the notion of a template repository, an&#xA;     automatically maintained place where template instances are&#xA;     stored.  As individual object files are built, notes are placed in&#xA;     the repository to record where templates and potential type&#xA;     arguments were seen so that the subsequent instantiation step&#xA;     knows where to find them.  At link time, any needed instances are&#xA;     generated and linked in.  The advantages of this model are more&#xA;     optimal compilation speed and the ability to use the system&#xA;     linker; to implement the Borland model a compiler vendor also&#xA;     needs to replace the linker.  The disadvantages are vastly&#xA;     increased complexity, and thus potential for error; theoretically,&#xA;     this should be just as transparent, but in practice it has been&#xA;     very difficult to build multiple programs in one directory and one&#xA;     program in multiple directories using Cfront.  Code written for&#xA;     this model tends to separate definitions of non-inline member&#xA;     templates into a separate file, which is magically found by the&#xA;     link preprocessor when a template needs to be instantiated.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="12140" LastEditorUserId="12140" LastEditDate="2019-03-26T05:55:33.760" LastActivityDate="2019-03-26T05:55:33.760" Title="How did the template cache in CFront work?" Tags="&lt;programming&gt;&lt;compilers&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9429" PostTypeId="2" ParentId="9426" CreationDate="2019-03-26T03:11:13.617" Score="5" Body="&lt;p&gt;To expand further, it actually wasn't especially feasible — there is no easy solution that doesn't eliminate the interlacing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interlacing works because the timing of the vertical retrace varies. On odd fields it is triggered so that scanning resumes at the beginning of a line. On even fields it is triggered so that scanning resumes in the middle. Because of the diagonal scan, that sets one field 0.5 lines higher than the other. If the scan weren't diagonal then the two fields would not enmesh in that manner — they would instead sit exactly on top of each other, just starting in different places.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a classic TV it's undesirable to make the diagonal scan anything other than diagonal because the flying spot during the capture process was diagonal. So you wouldn't be unskewing the image, you'd be skewing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a monitor life is slightly different, and true horizontals are likely accurately to reflect the image. But it's also generally the case that monitors have smaller scan lines in order to output a higher resolution, so the effect is less visible anyway — on a 14&quot; 800x600 monitor you're already talking about the right hand side being less than 0.3mm lower than the left, but being almost 28.5cm to the right. With a multi-sync monitor, how far down the right is compared to the left is a variable function of the resolution.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4921" LastEditDate="2019-03-26T04:30:21.660" LastActivityDate="2019-03-26T04:30:21.660" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9430" PostTypeId="2" ParentId="9426" CreationDate="2019-03-26T06:02:21.653" Score="4" Body="&lt;p&gt;The effect you are describing did not matter, mainly because in a television the effect is so small, and the TV camera also had a CRT tube that converts light to video signal in a matching scanning pattern so the picture is in fact not tilted due to the scanning. Computer systems usually used progressive scanning on CRT monitors so for example VGA has twice faster line rate than NTSC TV so the lines are more horizontal. Even with earlier computer systems such as CGA that was NTSC compatible, most likely other distortions of the CRT were more noticeable than scan lines not being exactly horizontal.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2019-03-26T06:29:15.520" LastActivityDate="2019-03-26T06:29:15.520" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9431" PostTypeId="2" ParentId="9426" CreationDate="2019-03-26T08:24:35.070" Score="12" Body="&lt;p&gt;Yes there are a lot of compensations in a CRT like:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;magnets counteracting background magnetic fields&lt;/li&gt;&#xA;&lt;li&gt;circuits counteracting curvature of CRT screen surface&lt;/li&gt;&#xA;&lt;li&gt;circuits counteracting different length of the beam (edges/center)&lt;/li&gt;&#xA;&lt;li&gt;&quot;linearizations&quot; of brightness (gamma correction)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and probably much more I can not think of right now...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But back to your question the stuff you are describing is applicable only on &lt;strong&gt;monochromatic CRTs&lt;/strong&gt; with &lt;strong&gt;analog sweeping&lt;/strong&gt;. As the color ones got a luminofor masks presenting form of a &quot;pixelated&quot; or &quot;lineated&quot; grids preventing of any skew. But still the compensations must be done (by rotating the sweeping slightly) otherwise the beam could jump a line ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However in &lt;strong&gt;digital&lt;/strong&gt; era more recent CRTs are usually driven by a CPU and the sweeping is controlled digitally by &lt;strong&gt;DAC&lt;/strong&gt; so no more skew as the vertical coil is no more changing during the vertical sweep ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="4183" LastEditDate="2019-03-27T15:21:06.023" LastActivityDate="2019-03-27T15:21:06.023" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9432" PostTypeId="2" ParentId="8313" CreationDate="2019-03-26T09:11:10.953" Score="5" Body="&lt;p&gt;115-140 ohms doesn't actually sound that crazy, and ignoring the dynamics of semiconductor loads, only equates to around 30-45mA. A normal, working A600 will consume well over 1A. So it doesn't sound like a short to ground to me, and limiting the 5V rail to 1A is likely going to result in a lower power supply voltage as it's simply not enough to power the machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The A600 motherboard has a via for the 5V rail that's very close to pads on the -12V rail. It's hidden beneath diode D576, and is very close to C306 - a 10uF electrolytic very prone to leaking, and having already leaked in your case by the sounds of things. The via in question frequently gets corroded when the capacitor leaks, and the resulting corrosion ends up reaching the nearby pad of the diode in the -12V rail while remaining hidden from view by the large diode. This causes a partial short between +5V and -12V, which can cause all sorts of PSU issues without appearing as a short to ground. This is a fault I've seen and repaired on a number of occasions, and it's now the first place I look when presented with a dead A600. Similarly, if you used hot air for removing or replacing the capacitor, it's possible for solder from the diode's pad to bridge to the damaged via, causing a more serious short, but also more easily detected with a multimeter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would remove the diode entirely, check the rails for low resistance between them, and clean up the via as it's required for the power supply to the Paula chip, without which the machine won't boot. Once it's all working and happy, you can replace the diode and check afterwards for any solder bridging as a result of the repair.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The nearby 1 ohm resistor R309 is in the Paula 5V supply path, and similarly hides a via (to ground this time) that is regularly damaged by leakage. This is worth checking out for the same reasons as it can also short to the 5V pads of the resistor. However, given the resistance measured between ground and 5V on your board, I don't expect this is the issue here.&lt;/p&gt;&#xA;" OwnerUserId="6681" LastActivityDate="2019-03-26T09:11:10.953" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9433" PostTypeId="2" ParentId="9426" CreationDate="2019-03-26T14:26:47.833" Score="19" Body="&lt;p&gt;Canonically in NTSC standards the drawn lines are tilted slightly so that the start of the odd field starting at the left is perfectly level with the top of the even field starting in the middle horizontally. The actual angle though is so tiny, ~0.09 degrees, that it's negligible compared to the rotation error you'd get just from the earth's magnetic field and how well the factory calibration was done. TVs were generally set up with ~5-10% of the image being drawn outside of the edges of the screen anyway which would effectively crop the edges to be a rectangle no matter how far off the scanning pattern was.&lt;/p&gt;&#xA;" OwnerUserId="12144" LastActivityDate="2019-03-26T14:26:47.833" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9434" PostTypeId="2" ParentId="9426" CreationDate="2019-03-26T17:16:22.380" Score="1" Body="&lt;p&gt;If the horizontal deflection circuit had no effect on the vertical positioning of the beam, and if the vertical deflection circuit had no effect on the horizontal positioning, then the shape would indeed be a parallelogram.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, however, it would be very difficult to design a CRT-based display in which the effects were cleanly isolated in that fashion.  Horizontal and vertical deflection circuits interact with each other for a variety of reasons, and instead of trying to &lt;em&gt;prevent&lt;/em&gt; such interactions, most displays instead try to compensate for them with a mixture of adjustable and non-adjustable compensation circuits that can independently adjust the width of the screen at the top, middle, and bottom.  Further, the angle of the yoke assembly is often adjustable.  While vertical motion during each scan line would cause a slight skew if horizontal and vertical deflection were independent, consumer-grade equipment is seldom close enough to perfect calibration to make that significant.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-03-26T17:16:22.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9435" PostTypeId="1" CreationDate="2019-03-26T20:59:23.103" Score="4" ViewCount="134" Body="&lt;p&gt;The Vic-20, like many home computers of its time, had a cartridge slot that could be used both as a general expansion slot, and for game cartridges like a console. Game cartridges on the Commodore machines faded away later, but seemed to be quite popular at that time: &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/vic20/Cartlist-1.9m.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.zimmers.net/anonftp/pub/cbm/vic20/Cartlist-1.9m.txt&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Console manufacturers plan on eventually selling several cartridges per machine; this is both natural from the customer viewpoint, and central to the business model from the manufacturer viewpoint, though to Commodore they were more of a sideline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How many game cartridges were sold per Vic, or in total across all ~2.5 million Vics? I would be interested in either a number by Commodore alone, or by Commodore plus third parties.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-03-26T20:59:23.103" Title="Vic-20 total game cartridge sales" Tags="&lt;history&gt;&lt;commodore&gt;&lt;game-cartridge&gt;&lt;vic-20&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9436" PostTypeId="1" AcceptedAnswerId="9437" CreationDate="2019-03-27T01:46:27.180" Score="4" ViewCount="450" Body="&lt;p&gt;In general, different CPUs don't use the same bus protocol. A 16-bit CPU would not in general be expected to use the same protocol as an 8-bit CPU. For example, the 68000 would not be expected to use the same protocol as the 6809, just because it's a successor made by the same company.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But 8-bit ISA cards made for the IBM PC, were still usable with the 16-bit PC AT (using the 8-bit subset of the bus on the latter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the designers of the 286, specifically go out of their way to stay compatible with the 8088 bus protocol, in order to make this possible? (Reminiscent of the specific effort to keep the instruction set compatible, but the two are orthogonal; the new chip could've kept instruction set compatibility with a different bus protocol, or vice versa.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-03-27T13:28:58.150" Title="Did the 286 go out of its way to follow the 8088 bus protocol?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;80286&gt;&lt;cpu&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9437" PostTypeId="2" ParentId="9436" CreationDate="2019-03-27T02:47:40.240" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;In general, different CPUs don't use the same bus protocol.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why not? Sure, different manufacturers defined different bus designs - but more often than not, used them across various CPUs and CPU families.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A 16-bit CPU would not in general be expected to use the same protocol as an 8-bit CPU.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again, why not? The number of data lines doesn't inherently ask for a different protocol.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, the 68000 would not be expected to use the same protocol as the 6809, just because it's a successor made by the same company.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Except it's the other way. The 68k bus is, on purpose, designed to be compatible with the 6800 bus. It follows the same workings, plus extensions for asynchronous operation and half-word access.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;With &lt;a href=&quot;https://en.wikipedia.org/wiki/DTACK_Grounded&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;DTACK&lt;/code&gt; grounded&lt;/a&gt; it operates exactly as the 6800 bus, with &lt;code&gt;AS&lt;/code&gt; working as &lt;code&gt;VMA&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In fact, designers of a new CPU do need to have a quite good reason to change a bus design in an incompatible manner from its predecessor or other CPUs of the same company. It's never about the CPU alone. The CPU is part of a whole set of components. Changing the way these components interact (aka the bus protocol), would mean that each and every other chip also needs to be modified. This means introducing a dozen or more chips instead of just the CPU. That'll be financial suicide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Motorola created the 68000 it was mandatory to make the bus protocol compatible with their huge family of interface chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel acted similarly with the 8086 (and 286) bus being a compatible implementation of the 8080 bus. Where Motorola offered a few new I/O Chips for the 68k CPU, Intel only provided a new DMA controller. And IBM ignored even that offering and went along with the 8237 and its 64 Ki address range. All because the buses where compatible. A 8259 Interrupt Controller could manage the interrupts for a 8086 just as for a 8080 and a 8237 could drive an 8086 bus the same way as it did for a 8080.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But 8-bit ISA cards made for the IBM PC, were still usable with the 16-bit PC AT (using the 8-bit subset of the bus on the latter).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because IBM added circuitry to operate that way. The selection for 8 or 16 bit transfers and the according timing are done by external logic, created by IBM. Keep in mind, the PC/PC-AT Bus is &lt;strong&gt;not&lt;/strong&gt; the 8088 bus. It's a separate design by IBM, based on Intel's CPU bus, but not the same.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did the designers of the 286, specifically go out of their way to stay compatible with the 8088 bus protocol, in order to make this possible?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not at all. The 80286 bus is exactly the same as the 8086 bus. The main difference is that more address lines are available. Otherwise it's exactly the same bus as with the 8086 - why make a new bus design, and throw away all I/O, when nothing relevant changes?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Implementation-wise, the 80286 came in a package with more pins, so it could support non-multiplexed signals, making latches and bus controllers obsolete (8282 latch and 8288 bus controller - think of these as being integrated into the CPU).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;It might be worth to reflect that 'bus' is a quite loose used term, usually denoting nothing more than that it connects several devices for 'some' purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;[The following is only in regard to microprocessors; Mainframes and even Minis evolved along different lines]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here it's about CPU bus and I/O bus - and more so about the way it has been in the 1970s to 1990s. Such classic CPUs expose a CPU bus, intended to integrate several components to work together as a single computing system. They are tied to the philosophy the designer chose. Not least due to the quite limited pin count available, these buses had to handle a multitude of functions, all the way from fast memory and multi processor to slow I/O ports. Most importantly, most of these use cases are about CPU extensions: think DMA or FPU, that may even replace the CPU (DMA) or extend its inner workings (FPU).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I/O buses in contrast did start out as buffered CPU buses (think Altair) maybe with some little additions for arbitration (think Multibus), still following the needs of CPU extension and memory. The PC bus is a great example of an extension that evolved away from the CPU. While the 8 Bit is, much like S100, a rather simple buffered version of the (full decoded) CPU-bus, the AT bus now added &lt;code&gt;MEMCS16&lt;/code&gt; and &lt;code&gt;IOCS16&lt;/code&gt; signals not found on the CPU-bus to handle 8 bit cards on a 16 bit CPU, moving it away into a separate system, while still being tied to it and able to serve many of the components a CPU bus is meant for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays CPU have next to all the components that were add-ons back then integrated, so the need of CPU buses is more or less an issue of the past. This goes along with &lt;strong&gt;way&lt;/strong&gt; larger packages - in terms of pins at least - offering room for dedicated interfaces instead of a cramped bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now there is usually a dedicated memory bus offered while I/O buses have evolved to be complete different beasts, relieved from the memory-like access and optimized to asynchronous block transmissions (think PCIe).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus thinking about classic CPU buses is truly an RC.SE task, isn't it :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-03-27T13:28:58.150" LastActivityDate="2019-03-27T13:28:58.150" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9438" PostTypeId="1" AcceptedAnswerId="9440" CreationDate="2019-03-27T03:19:05.120" Score="5" ViewCount="1598" Body="&lt;p&gt;How can I implement the modulus operator in Commodore 64 Basic?&#xA;There are not a lot of math functions to work with, and modulus would be very handy.&lt;/p&gt;&#xA;" OwnerUserId="12146" LastEditorUserId="11916" LastEditDate="2019-04-21T19:16:34.773" LastActivityDate="2019-04-21T19:16:34.773" Title="How can I implement the modulus operator in Commodore 64 Basic?" Tags="&lt;commodore-64&gt;&lt;basic&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9439" PostTypeId="2" ParentId="9438" CreationDate="2019-03-27T03:32:16.860" Score="0" Body="&lt;p&gt;The following implements Y % X, populating RE with the remainder. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below I set up 103 % 10 on lines 10 and 20 as an example use.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 x = 10&#xA;20 y = 103&#xA;30 GOSUB 1000&#xA;40 PRINT RE&#xA;1000 REM MOD OPERATION&#xA;1010 RE = Y - ((Y/X)*X)&#xA;1020 RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="12146" LastEditorUserId="12146" LastEditDate="2019-03-31T01:24:18.337" LastActivityDate="2019-03-31T01:24:18.337" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9440" PostTypeId="2" ParentId="9438" CreationDate="2019-03-27T06:59:01.707" Score="15" Body="&lt;p&gt;Using this expression&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A-INT(A/B)*B&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Bztvt.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Bztvt.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="348" LastActivityDate="2019-03-27T06:59:01.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9441" PostTypeId="1" AcceptedAnswerId="9442" CreationDate="2019-03-27T08:01:30.960" Score="0" ViewCount="751" Body="&lt;pre&gt;&lt;code&gt;ThinkPositive equ 1&#xA;PrintChar equ &amp;amp;BB5A&#xA;&#xA;org &amp;amp;8100&#xA;    ld hl,Introduction&#xA;    call PrintString&#xA;    call NewLine&#xA;    ld hl,Message&#xA;    call PrintString&#xA;ret&#xA;&#xA;PrintString:&#xA;    ld a,(hl)&#xA;    cp 255&#xA;    ret z&#xA;    inc hl&#xA;    call PrintChar&#xA;jr PrintString&#xA;&#xA;Introduction:&#xA;    db 'Thought of the day...',255&#xA;&#xA;ifdef ThinkPositive&#xA;    Message:    db 'Z80 is Awesome!',255&#xA;else&#xA;    Message:    db '6510 sucks!',255&#xA;endif&#xA;&#xA;Newline:&#xA;    ld a,13&#xA;    call PrintChar&#xA;    ld a,10&#xA;    call PrintChar&#xA;ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For your information, this piece of z80 asm prints 2 strings.&lt;/p&gt;&#xA;" OwnerUserId="12148" LastEditorUserId="-1" LastEditDate="2019-03-27T12:27:03.727" LastActivityDate="2019-11-04T23:28:37.637" Title="What does ld a,(hl) do in this piece of Z80 ASM code, and why is HL incremented?" Tags="&lt;z80&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9442" PostTypeId="2" ParentId="9441" CreationDate="2019-03-27T08:07:37.510" Score="9" Body="&lt;p&gt;&lt;code&gt;ld a, (hl)&lt;/code&gt; copies the byte in the address that &lt;code&gt;hl&lt;/code&gt; points to into register &lt;code&gt;a&lt;/code&gt;. I assume the printchar routine expects a character byte in this register, probably in ASCII encoding. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your code loads &lt;code&gt;hl&lt;/code&gt; with the start address of the string and then iterates through it, printing each character until it reaches 0xFF, when it stops.  The increment moves &lt;code&gt;hl&lt;/code&gt; to 'point' to the next byte (character).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's slightly unusual to use 0xFF (255 in decimal) as the end of string marker, but in assembler you can make your own rules! &lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="576" LastEditDate="2019-03-27T08:26:48.797" LastActivityDate="2019-03-27T08:26:48.797" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9443" PostTypeId="1" CreationDate="2019-03-27T11:50:24.290" Score="8" ViewCount="669" Body="&lt;p&gt;In some articles I see the word Unix written as &quot;Unix&quot;, while in other articles I see the word Unix written as &quot;UNIX&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does &quot;Unix&quot; and &quot;UNIX&quot; represent the same thing?&lt;/p&gt;&#xA;" OwnerUserId="12149" LastEditorUserId="10502" LastEditDate="2019-08-28T10:50:33.760" LastActivityDate="2019-08-28T17:00:47.040" Title="Does &quot;Unix&quot; and &quot;UNIX&quot; represent the same thing?" Tags="&lt;history&gt;&lt;unix&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9444" PostTypeId="2" ParentId="9443" CreationDate="2019-03-27T12:09:20.953" Score="11" Body="&lt;p&gt;UNIX (in upper case) is a trade mark, currently owned by the Open Group, which is a group of companies and organizations like NASA, the US DOD, IBM, HP, and others (not all American).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, like some other trademarks (e.g. &quot;Hoover&quot;) the word &quot;unix&quot; or &quot;Unix&quot; is often used as a generic name for &quot;computer software similar to UNIX&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some writers use &quot;*nix&quot; or &quot;*NIX,&quot; presumably to avoid a possible legal challenge over trademark violation, however unlikely that would be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's worth noting that companies which market (or used to market) their own variants of UNIX identify them by different names - e.g. HP-UX (Hewlett-Packard), AIX (IBM), IRIX (Silicon Graphics), UNICOS (Cray Research), etc.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2019-03-27T12:09:20.953" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9445" PostTypeId="2" ParentId="9426" CreationDate="2019-03-27T15:29:50.580" Score="0" Body="&lt;p&gt;Consider the case of rear projection CRT based HDTVs. These use 3 monochrome CRT displays, one red, one green, one blue, none of which have any mask. There is no parallelogram effect on these HDTVs. There are all sorts of computer controlled dynamic calibration parameters, and generally two &quot;native&quot; modes, 480p and 1080i. The most common calibration is convergence setup that displays a grid, used to adjust one of the colors as a baseline, then the baseline color and one other color to converge the other color. Any parallelogram effect would be noticed on the baseline grid setup. You can use a measuring tape to confirm that there is no parallelogram effect using the baseline grid setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of a Mitsubishi 65 inch (diagonal) HDTV, the 3 monochrome CRTs are 9 inch tubes, and the screen size is ~56.6 inches by ~32 inches. That's enough of a zoom factor that any parallelogram effect would be noticable. For the Mits, there are 64 points on the grid used for convergence. Each point on the grid can be adjusted left/right and up/down. The base line grid is green, and that is setup first to get a proper grid. Then red or blue are converged on top of the green grid, with green + red showing as yellow, and green + blue showing as aqua. I think 2006 was the last year Mitsubishi made consumer CRT based rear projection HDTVs. Calibration and convergence procedure has to be done twice, since there are two native modes, 480p and 1080i with independent settings.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I'm an old guy, and I don't recall any parallelogram effect on computer oriented monochrome CRT monitors, at least not by the time of Dec VT52, Dec VT100 (Ascii monitors), or IBM 3270 (block oriented monitor) (early 1970's). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still have a Viewsonic G225FB computer color monitor, which includes a computer controlled rotate adjustment (despite using a mask, the phosphors can be partially &quot;painted&quot;) which can be used to get rid of any parallelogram effect. I also have a Sony KV-1311CR color TV which can be used as a 640x480 computer color monitor (for Atari ST), and it doesn't have any parallelogram effect.&lt;/p&gt;&#xA;" OwnerUserId="4660" LastEditorUserId="4660" LastEditDate="2019-03-27T16:11:06.817" LastActivityDate="2019-03-27T16:11:06.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9446" PostTypeId="2" ParentId="9438" CreationDate="2019-03-27T16:56:37.360" Score="2" Body="&lt;p&gt;For a power-of-two modulus in the range 2 to 32768, nothing will beat using the &lt;code&gt;AND&lt;/code&gt; operator with a value of (modulus-1).  While the version of Microsoft BASIC on the Apple won't allow such usage, the one in 8-bit Commodore machines will.  One could compute &quot;Y=X mod 32&quot; via &lt;code&gt;Y = X AND 31&lt;/code&gt;.  While this approach only works for powers of two, it is definitely worth using for scenarios involving such values.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-03-27T16:56:37.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9447" PostTypeId="2" ParentId="9438" CreationDate="2019-03-27T17:01:17.623" Score="4" Body="&lt;p&gt;While I'd be inclined to put it into a DEF FN() statement, the problem is that functions only take one argument and for modulo you need two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As others noted, you can write a subroutine for this - easy enough. However, if you want to be a bit more clever and you're not using the USR() function for anything else, you could follow the code listed on &lt;a href=&quot;https://www.softwolves.pp.se/cbm/artiklar/usr.en.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page which described how to implement a USR() call&lt;/a&gt; to machine language code on a C64 and they've specifically implemented MOD with it.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2019-03-27T17:01:17.623" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9448" PostTypeId="1" AcceptedAnswerId="9449" CreationDate="2019-03-27T17:48:44.497" Score="24" ViewCount="3291" Body="&lt;p&gt;Strangely I can't find this information anywhere online -- I've thoroughly looked at the datasheet, and I've searched things like &quot;Z80 program counter initial value&quot; -- but I can't find anything!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is simply: when the Z80 just turns on, what value does the program counter take? (i.e., what instruction does it start executing from?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Logically, I'd assume it initialises to 0, but I want to be sure of this.&lt;/p&gt;&#xA;" OwnerUserId="12150" LastActivityDate="2019-03-28T07:50:52.930" Title="Where does the Z80 processor start executing from?" Tags="&lt;z80&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9449" PostTypeId="2" ParentId="9448" CreationDate="2019-03-27T17:49:37.757" Score="27" Body="&lt;p&gt;Yes, it starts from Zero - like the Intel 8080, the Z80 descends from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Excerpt from Zilog's March 1978 Product Specification (datasheet), page 2, Pin Description, here the &lt;code&gt;/RESET&lt;/code&gt; signal (emphasis mine):&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Input, active low. RESET initializes the CPU as follows:&#xA;  reset interrupt enable flip-flop, &lt;strong&gt;clear PC&lt;/strong&gt; and registers&#xA;  I and R and set interrupt to 8080A mode.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Similar the description in the 1977 Z80 Technical Manual (03-0029-01) on page 9.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-03-28T07:50:52.930" LastActivityDate="2019-03-28T07:50:52.930" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9451" PostTypeId="1" CreationDate="2019-03-27T23:52:58.170" Score="6" ViewCount="579" Body="&lt;p&gt;I lost the 4 Torq (T15) screws that hold together the case for a Mac SE/30.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know the size and the groove spacing to order a compatible one?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found these on eBay, but I'm not sure about the winding spacing, &lt;a href=&quot;https://www.ebay.com/itm/x10pcs-M5-x-25mm-Black-Button-Torx-Socket-Screw-10-9-T15-5mm/191513852242&quot; rel=&quot;nofollow noreferrer&quot;&gt;(x10pcs) M5 x 25mm, Black, Button, Torx, Socket, Screw, ~ 10.9, T15, 5mm&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="12153" LastEditorUserId="11916" LastEditDate="2019-12-28T18:15:10.943" LastActivityDate="2019-12-29T03:24:26.457" Title="Macintosh SE/30 cover screw size" Tags="&lt;apple-macintosh&gt;&lt;maintenance&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9452" PostTypeId="2" ParentId="9451" CreationDate="2019-03-28T08:32:03.953" Score="7" Body="&lt;p&gt;The rear case cover screws are part number 426-1007 for the top two screws (&quot;Screw, Tap, M 4.22 x 1.41 x 16, Torx, Zinc&quot;) and 435-5002 for the bottom two (&quot;Screw, Tap, 8-32 x .625, Torx, Blk Zinc Oxide&quot;), per &lt;a href=&quot;http://tim.id.au/laptops/apple/legacy/macintosh_se.30.pdf#page=89&quot; rel=&quot;nofollow noreferrer&quot;&gt;SE/30 exploded diagram&lt;/a&gt;&#xA; and &lt;a href=&quot;https://vintageapple.org/macbooks/pdf/Service_Guide_Macintosh_Computers_March_1991.pdf#page=36&quot; rel=&quot;nofollow noreferrer&quot;&gt;parts list entries&lt;/a&gt;.  An #8-32 is a standard diameter and thread spacing of screw that is common in computer case screws, but I can't parse that description of the other one.&lt;/p&gt;&#xA;" OwnerUserId="8508" LastEditorUserId="8508" LastEditDate="2019-12-29T03:24:26.457" LastActivityDate="2019-12-29T03:24:26.457" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9453" PostTypeId="1" AcceptedAnswerId="12379" CreationDate="2019-03-28T14:47:11.650" Score="6" ViewCount="1180" Body="&lt;p&gt;Looking through the August 1979 issue of Byte magazine, it discusses a dialect of Lisp in which arithmetic operations are denoted by words like PLUS and TIMES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later dialects like Common Lisp and Scheme use the symbols common to other languages like &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;*&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When did Lisp generally switch from one convention to the other?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-09-22T15:06:22.197" Title="When did Lisp start using symbols for arithmetic?" Tags="&lt;history&gt;&lt;lisp&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9454" PostTypeId="2" ParentId="9453" CreationDate="2019-03-28T15:12:21.057" Score="15" Body="&lt;p&gt;Lisp is not a single language, but a whole ecosystem of different languages. Moreover, there's no standard covering all Lisps, like with C or Fortran, so for this reason, &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;plus&lt;/code&gt; are equally &quot;valid&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When &lt;a href=&quot;https://web.archive.org/web/20100717111134/http://history.siam.org/sup/Fox_1960_LISP.pdf&quot; rel=&quot;noreferrer&quot;&gt;Lisp 1 (March 1960)&lt;/a&gt; was written, the primitive operations defined were &lt;code&gt;car&lt;/code&gt;, &lt;code&gt;cdr&lt;/code&gt;, &lt;code&gt;cons&lt;/code&gt;, &lt;code&gt;and&lt;/code&gt;, &lt;code&gt;or&lt;/code&gt;, &lt;code&gt;cond&lt;/code&gt;, etc. The arithmetic operations were not primitives at that time, so the programmers chose their own names.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least &lt;a href=&quot;http://www.dbit.com/pub/pdp8/nickel/langs/lisp/ascii/polprl.li&quot; rel=&quot;noreferrer&quot;&gt;Lisp 1.5&lt;/a&gt; (early 60s) had both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &lt;a href=&quot;http://www.bitsavers.org/pdf/dec/decus/pdp8/8-341_LISP-8.pdf&quot; rel=&quot;noreferrer&quot;&gt;this Lisp from 1970&lt;/a&gt; had &lt;code&gt;PLUS&lt;/code&gt; and &lt;code&gt;MINUS&lt;/code&gt; but no &lt;code&gt;+&lt;/code&gt; nor &lt;code&gt;-&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you consider Scheme (1975) to be a Lisp, then it is a specimen having both &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;&amp;amp;+&lt;/code&gt; (the latter is an optimisation for two arguments only).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And Common Lisp (1984) has &lt;code&gt;+&lt;/code&gt; but not &lt;code&gt;plus&lt;/code&gt; as you have noted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I posit that we gradually settled on &lt;code&gt;+&lt;/code&gt;-style symbols starting in the 70s, and the situation was a state of flux before then, for the reason that arithmetic operations were not even primitive operations to begin with.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-03-28T16:25:29.457" LastActivityDate="2019-03-28T16:25:29.457" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9455" PostTypeId="2" ParentId="9451" CreationDate="2019-03-28T15:14:39.707" Score="1" Body="&lt;p&gt;If you don't want to be as original as possible, you can use any two M4-sized (Metric) screws for the lower two holes and search a box of assorted self-tapping screws by probing the holes of the front cover without back for proper fitting.&lt;/p&gt;&#xA;" OwnerUserId="10295" LastActivityDate="2019-03-28T15:14:39.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9456" PostTypeId="1" CreationDate="2019-03-28T16:06:53.537" Score="2" ViewCount="151" Body="&lt;p&gt;I am restoring the Ascota 170 antique mechanical programmable computer. It is already working. Now I’m looking for an algorithm to demonstrate its capabilities — like calculating trigonometric or logarithmic tables. Or something like that. Unfortunately, from mathematical operations, a computer is only capable of adding and subtracting integers (55 registers from -1E12 to 1E12). There is not even a shift-to-digit operation — so that it can be programmatically implemented to multiply only by very small numbers. But its logical operations are very well developed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you advise me any suitable algorithm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPD.&lt;/strong&gt; &#xA;Sorry, I have not got enough reputation to answer to comments. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Original documentation in JPEGs in Russian could be found here: &lt;a href=&quot;http://www.phantom.sannata.ru/forum/index.php?t=31764&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.phantom.sannata.ru/forum/index.php?t=31764&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My abstract about programming, automatically translated to English, is here:&#xA;&lt;a href=&quot;https://translate.google.com/translate?sl=auto&amp;amp;tl=en&amp;amp;u=https%3A%2F%2Falple.net%2Farif-ru%2Fascota170%2Fassembler170.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://translate.google.com/translate?sl=auto&amp;amp;tl=en&amp;amp;u=https%3A%2F%2Falple.net%2Farif-ru%2Fascota170%2Fassembler170.htm&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multiplication and division could be done programmatical, but they (especially division) would take huge part of computer memory, and would be very slow, so it'll be good to found something without them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@Raffzahn, sorry, I do not know about matrix operations enough to answer something.&lt;/p&gt;&#xA;" OwnerUserId="12158" LastEditorUserId="12167" LastEditDate="2019-03-29T18:08:28.663" LastActivityDate="2019-03-29T18:08:28.663" Title="Looking for Complex Algorithms to Demonstrate Ascota 170 Capabilities" Tags="&lt;programming&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9457" PostTypeId="2" ParentId="9397" CreationDate="2019-03-28T17:58:56.057" Score="2" Body="&lt;p&gt;My problem was floating inputs.  Long ago, when I started this project, Grant Searle's schematic did not show a 3k3 pullup on /INT.  Now, it does.  I inserted 1K pullups on &lt;strong&gt;all&lt;/strong&gt;  Z80 input pins, not just on /INT as I mentioned earlier and now it works like a charm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also patched the ROM image in the three places where the constants &quot;RTS_LOW&quot; and RTS_HIGH&quot; appear.  I changed them from D6 and 96 to D5 and 95.  This change of one bit in the 68B50 setup allows me to run at 115,200 bps on a 1.8323 MHz RX/TX clock.   The Z80 is using an 8.192 MHz clock. It's working great now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for the many useful tips, everyone!&lt;/p&gt;&#xA;" OwnerUserId="5153" LastEditorUserId="5153" LastEditDate="2019-03-28T18:19:59.150" LastActivityDate="2019-03-28T18:19:59.150" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9458" PostTypeId="1" AcceptedAnswerId="9459" CreationDate="2019-03-29T00:49:49.417" Score="31" ViewCount="6237" Body="&lt;p&gt;I'm specifically interested in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sega_Genesis&quot; rel=&quot;noreferrer&quot;&gt;Sega Mega Drive/Genesis&lt;/a&gt;, which used a 68000 CPU, but also a Z80, &lt;em&gt;mainly used to control the sound hardware and provide backward compatibility with the Master System&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was also the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_Jaguar&quot; rel=&quot;noreferrer&quot;&gt;Atari Jaguar&lt;/a&gt;, with it's Tom and Jerry RISC chips, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sega_Saturn&quot; rel=&quot;noreferrer&quot;&gt;Sega Saturn&lt;/a&gt;, &lt;em&gt;Featuring a total of eight processors&lt;/em&gt;, and probably a lot more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When writing code (assuming ASM), how would these additional processors be used/accessed? Did one write regular 68000 code (even for sound) and the 68000 itself handled talking to the Z80? Did one need to write two different programs, one for each CPU? If yes, how did they communicate with each other? Or is memory mapping used, which would require a binary that has both 68000 and Z80 instructions in them, making sure that the Z80 code is in a specific memory region?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This isn't about &quot;regular&quot; multi-processing, like on newer consoles with multi-core CPUs that are all the same. This is about consoles with a main CPU and specialized co-processors for e.g., Sound. Basically, the Sega Genesis, though I'm looking at building my own custom system, so I'm more interested in the basic principles.)&lt;/p&gt;&#xA;" OwnerUserId="3344" LastActivityDate="2019-03-29T09:52:09.750" Title="How did people program for Consoles with multiple CPUs?" Tags="&lt;software-development&gt;&lt;cpu&gt;&lt;sega-genesis&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9459" PostTypeId="2" ParentId="9458" CreationDate="2019-03-29T01:27:19.970" Score="37" Body="&lt;p&gt;It varies machine to machine; at the simplest end is the Neo Geo — its 68000 and Z80 have completely independent buses. You write one program for the 68000 and one for the Z80 and a single pipe of communication joins the two: post a byte to the Z80 and it'll trigger an NMI; the Z80 can read the command byte from a certain port and write a response to another, the 68000 can poll for the response. Neo Geo also supplied a sample set of Z80 code so you could just treat it as an advanced sound generator and not worry about the implementation if you prefer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Mega Drive has a more complicated system of shared buses; the Z80 has some memory on a private bus but the cartridge bus is a shared resource and I think the Z80 can also share some RAM. In that system the VDP can also act as a bus master so in net it's the Z80 getting access to the shared resources only when nobody else is attempting an access, the 68000 having priority only when it doesn't chose to start a VDP transfer, and the VDP having top priority for those periods when the 68000 has command it to do something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you ever hear scratchy sampled audio in a Mega Drive game then it's likely to be the Z80 trying to stream from the cartridge but frequently losing out on access slots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Saturn is like a more advanced Mega Drive except that the main CPUs have caches that can also be configured as small local memory pools. So if you're careful you can mostly keep them off the shared bus, gaining a significant performance benefit — Virtua Fighter 2 manages to keep most of the data for each player local to a single CPU for most of a frame, the laziest PlayStation ports do nothing in particular and either end up only using a single CPU or effectively doing so as a result of collection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Jaguar is supposed to work similarly to the Saturn but, quelle surprise, Atari rushed it to market so there's a significant bug affecting the RISC CPU's accesses to RAM when performing certain types of jump. That's how it often ends up being treated as a machine with a 68000 central processor when really the 68000 was intended just to be an intelligent scheduler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: across these systems one generally writes a different program for each processor, and either nominates one as a coordinator or uses a series of ad hoc means of point-to-point communication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it sounds hard to get right, that's because it is — programmers much prefer systems like the original PlayStation with a single CPU that just goes quickly.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-03-29T01:27:19.970" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9460" PostTypeId="1" AcceptedAnswerId="9478" CreationDate="2019-03-29T04:59:56.807" Score="5" ViewCount="730" Body="&lt;p&gt;Once you get past the stage of manually entering numeric machine code, the most primitive programming tool is a machine code monitor. Intended primarily as a debugging tool, this works with a target program in memory as machine code, and can disassemble small chunks of the code in memory, and typically provides a simple assembler that basically does one instruction at a time, with little or no symbolic capability e.g. no branch target resolution. Perhaps the best-known example is the MS-DOS tool DEBUG.COM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Past that stage, the next step up is a full-blown symbolic assembler. On 8-bit computers, these were the most commonly used commercial programming tools; I wrote one myself on the Commodore 64, back in the day. They worked the way modern assemblers do: store the source code in a text file, make two passes, or one pass with back patching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An important limitation of these assemblers was memory. Source code as ASCII text is a rather bulky format; a large program would not fit in memory in this format alongside the assembler and the generated machine code, which meant (unless you could afford to cross develop from a 16-bit machine) waiting a long time for a build to run on floppy disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking back on that, if I were writing an 8-bit native assembler now, I think I would try a different approach, in between machine code monitor and full classical assembler: keep the program under development, in memory always in binary form (more compact than source text, much more compact than both source and binary), but also keep a comprehensive symbol table so that the IDE could disassemble on the fly into something that would give the illusion that you have source code in front of you. There would be some limits, e.g. each address could be given no more than one name, but it seems to me the memory saving would be well worth it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is: did any assemblers with the above design, ever exist?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-03-30T08:00:52.120" Title="Did any assemblers work like this?" Tags="&lt;assembly&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="5" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9461" PostTypeId="1" CreationDate="2019-03-29T09:22:56.170" Score="16" ViewCount="3409" Body="&lt;p&gt;I have read that the first version of Unix was created for the PDP-7, and later versions were created for the PDP-11.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am wondering, what was the first Unix version to run on a microcomputer?&lt;/p&gt;&#xA;" OwnerUserId="12162" LastActivityDate="2020-07-01T12:39:35.290" Title="What was the first Unix version to run on a microcomputer?" Tags="&lt;history&gt;" AnswerCount="6" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9462" PostTypeId="2" ParentId="9461" CreationDate="2019-03-29T09:34:18.390" Score="11" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.islandnet.com/~kpolsson/comphist/comp1980.htm&quot; rel=&quot;noreferrer&quot;&gt;the chronology of personal computers&lt;/a&gt;, the first micro-computer running Unix was “the Onyx C8002 microcomputer. It features a Zilog Z8000 microprocessor, 256 kB RAM, tape backup, hard disk, serial ports for eight users, and running UNIX, for US$20,000.” It was introduced in June 1980. (The quote is inaccurate in at least one respect: the C8002, as its name suggests, used a &lt;a href=&quot;http://www.progettosnaps.net/manuals/pdf/c8002.pdf&quot; rel=&quot;noreferrer&quot;&gt;Zilog Z8002&lt;/a&gt; CPU — thanks Raffzahn!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was followed shortly by &lt;a href=&quot;https://en.wikipedia.org/wiki/Xenix&quot; rel=&quot;noreferrer&quot;&gt;Xenix&lt;/a&gt;, Microsoft’s licensed port of Unix, which first shipped in January 1981 on a Z8001-based Central Data Corporation system (not to be confused with the more famous Control Data Corporation). 8086 systems running Xenix started shipping in 1982. Xenix was also available on PDP-11 computers (see &lt;a href=&quot;http://web.archive.org/web/20160421214534/http://maben.homeip.net/static/S100/software/microsoft/XENIX/Microsoft%20Xenix%20OEM%20Directory.pdf&quot; rel=&quot;noreferrer&quot;&gt;the OEM list&lt;/a&gt; for details), and there were micro-computer-class PDP-11 systems, including DEC’s own &lt;a href=&quot;https://en.wikipedia.org/wiki/DEC_Professional_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Professional range&lt;/a&gt; which was available with 2.9BSD.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-03-29T12:57:12.713" LastActivityDate="2019-03-29T12:57:12.713" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9463" PostTypeId="2" ParentId="9461" CreationDate="2019-03-29T09:35:46.297" Score="33" Body="&lt;p&gt;In 1981, Microsoft released &lt;a href=&quot;https://en.wikipedia.org/wiki/Xenix&quot; rel=&quot;noreferrer&quot;&gt;Xenix&lt;/a&gt; which could run on the x86, the 68000, and others. As you know, Microsoft targets microcomputers above other markets; that was especially true in the 80s. So this was perhaps the first unix, or at least among the first commercial unices, to be intended to run on high-end micros.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But maybe, the term &quot;micro&quot; isn't so useful. After all, &lt;a href=&quot;https://en.wikipedia.org/wiki/Version_6_Unix&quot; rel=&quot;noreferrer&quot;&gt;Version 6 UNIX&lt;/a&gt; from 1975 was written in C and ran blithely on the PDP-11. The PDP-11 architecture was later implemented on a microchip; A J-11 or something like that would have run V6 just as happily. And in Soviet Russia, &lt;a href=&quot;https://en.wikipedia.org/wiki/MNOS_(operating_system)&quot; rel=&quot;noreferrer&quot;&gt;V6 was indeed modified&lt;/a&gt; to run on local PDP-11-compatible microcomputers. It's arguable whether MNOS and V6 &lt;em&gt;are the same&lt;/em&gt; UNIX; if they are, then it predates Microsoft's offering by around five years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/stream/byte-magazine-1983-10/1983_10_BYTE_08-10_UNIX#page/n133/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;BYTE magazine, October 1983&lt;/a&gt; talks about early unices on microcomputers&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-03-29T12:58:04.930" LastActivityDate="2019-03-29T12:58:04.930" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="9464" PostTypeId="2" ParentId="9458" CreationDate="2019-03-29T09:52:09.750" Score="10" Body="&lt;p&gt;There are two basic techniques: shared memory and dedicated communication ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Shared memory simply allows both processors to access the same memory bus. There are some issues, as the bus has to be shared and one CPU has to get priority so code must be designed to take unpredictable extra delays into account. The Megadrive is a good example of that, with the Z80 CPU losing cycles to the 68000 and the graphics subsystem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's actually a quite awkward system but they wanted the Z80 for backwards compatibility with Master System games. The system has a dedicated sound chip and the overhead for playing back music and sound effects is so low that there is little benefit to offloading it from the 68000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other issue with shared memory is that if one CPU is writing to it while the other is reading it, the reading CPU can end up with corrupt data. Therefore some kind of arbitration is needed, often based on atomic update operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Communication ports allow two CPUs on separate buses to communicate. Each CPU has its own bus, its own RAM, its own peripherals and a single I/O port that lets it communicate with the other CPU(s). The port usually allows commands and small amounts of data to be sent, often one way, from one CPU to another and an acknowledgement to be sent back. The Neo Geo is an example of a system that works that, or more common in the west was BBC Micro with its optional second processor via the &quot;tube&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software for each CPU was written and debugged separately.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-03-29T09:52:09.750" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9465" PostTypeId="2" ParentId="9460" CreationDate="2019-03-29T10:04:38.593" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So my question is: did any assemblers with the above design, ever exist?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It may have done but I have never come across such an assembler. Two important features of good assemblers could not have been supported:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;comments&lt;/li&gt;&#xA;&lt;li&gt;macros&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The inability to store comments is a show stopper by itself. Unlike a lot of high level code, assembly source code is usually festooned with comments. Back in the day, tutorials sometimes recommended to comment every line and some people took them at their word.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Macros are an immensely powerful tool, allowing the programmer to have some level of abstraction. For example, I expect every 6502 coder has their favourite macro for doing 16 bit addition. Unfortunately, the nature of their implementation makes it impossible to tell if a fragment of assembler resulted from a macro or not. I think you could live without macros, but they sure make life easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I think people would just put up with the slow assembly times resulting from assembling to disk. But, you should be aware that, back in the day, compiling or assembling anything &lt;a href=&quot;https://xkcd.com/303/&quot; rel=&quot;nofollow noreferrer&quot;&gt;was slow compared to modern times&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2019-03-29T10:04:38.593" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9466" PostTypeId="2" ParentId="9460" CreationDate="2019-03-29T11:01:26.363" Score="3" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Assembly symbols are highly ambiguous (there is no 1:1 relationship between values and symbolic names). You seem to be assuming symbols can be addresses only - nope, they aren't. Imagine the following m68k code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;address     equ    100&#xA;offset      equ    100&#xA;value       equ    100&#xA;&#xA;            org    address&#xA;start:      move.w #value,d0&#xA;            lea.l  address(a0),a0&#xA;            move.l d0,offset(a0)&#xA;            jsr    address+$100&#xA;            move   #'d',d0&#xA;&#xA;data:       dc.w   100&#xA;            dc.l   100&#xA;            dc.b   'd'&#xA;&#xA;&#xA;            dc.l   *-start         ; value &quot;100&quot; is completely lost&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The value 100 has (at least) 5 different meanings in your symbol table (addresses, immediates, offsets, relative or absolute, characters, bytes, words, longs), and in some examples (*-start) it doesn't even show up as a literal in the binary - when translating back and forth, you have the same problem a disassembler has when trying to make sense of symbols (when encountering &quot;100&quot; in the disassembly, you simply don't know which of the meanings/symbols to use), or you lose valuable information your original source code had. (Or you store that information someplace else and lose large parts of your memory savings)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You will be losing any comments and special code formattings like indentation and extra spacing if not stored in a separate place (without any memory saving). These are highly valuable in assembly code&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The fact that code that has been generated from macros will not be visible. You will be losing that information if not stored elsewhere (again, no saving of memory)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You'd be losing all information on assembly pseudo-instructions (ORG, OFFSET, DC.B, the like). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You'd also be losing track of what's code and what's data, which is a significant problem when your disassembler would need to figure out whether 0C9H should be &lt;code&gt;RET&lt;/code&gt; or &lt;code&gt;DC.B 201&lt;/code&gt; (a Z80 example). Modern disassemblers try to follow code streams to decide whether areas are code or data, but that's way beyond the capabilities of an 8-bit micro (and still not 100% accurate when jump tables are involved).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It's a huge difference whether a table was originally created as bytes, words or longwords, and then whether it was created as absolute or relative values (*-label or label). All of that is lost in a disassembly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To an assembly programmer, it is a huge difference whether he works on a disassembly of code (what your proposal effectively implies) or whether he works with original code produced by another programmer. Depending on the complexity of the CPU and the original program, working on a disassembly is about a magnitude more difficult, in my experience. About 90% of the information what a program does &lt;em&gt;is not in the binary&lt;/em&gt;. Even very sophisticated modern disassemblers/decompilers based on megabytes of code like &lt;a href=&quot;https://en.wikipedia.org/wiki/Interactive_Disassembler&quot; rel=&quot;nofollow noreferrer&quot;&gt;IDA pro&lt;/a&gt; cannot re-create this information fully from a binary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it's technically possible what you propose, but would be hampering productivity (a lot), or, if amended with extra information, will not produce the memory savings you seem to assume. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could possibly amend lots of these shortcomings by storing the assembly program in a sort of tokenized form, but then it's no longer your proposal.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-03-29T14:49:30.860" LastActivityDate="2019-03-29T14:49:30.860" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9467" PostTypeId="2" ParentId="9460" CreationDate="2019-03-29T11:25:10.200" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So my question is: did any assemblers with the above design, ever exist?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;With the quite fuzzy question the answer is of course yes  - and at the same time no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been monitor programs that allowed entering and editing of object code in a source like way. Lines (instructions) could be entered as text (&lt;code&gt;LDA #$3&lt;/code&gt;), symbolic labels could be defined (&lt;code&gt;L1:&lt;/code&gt;) and used (&lt;code&gt;JMP L1&lt;/code&gt;; &lt;code&gt;LDA &amp;gt;L1&lt;/code&gt;) and so on. Lines could be deleted or inserted, all labels and branches within the code would be adjusted when doing so (*1). Some even allowed the use of symbolic constants, but only during entry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which makes them short of fulfilling all the above requests. As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9460/did-any-assemblers-work-like-this#comment30427_9460&quot;&gt;noted by RossRidge&lt;/a&gt; and others, keeping track of symbolic constants need to store each pointer name occurrence, not just the value. It's the same as for instructions, but there are fixed and a few - at least when programs get large, which is, as I understand the base for this idea. isn't it? (*2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Another&lt;/strong&gt;, related &lt;strong&gt;solution&lt;/strong&gt; would be an intermediate way of storage used by such assembler-ish environment. Source is parsed when loading (or entering) into a tokenized form where each instruction, label and parameter is a single byte and optional pointers into symbol tables. A bit like most BASIC do. I think I remember a somewhat similar construction for the C64 from a magazin (*3) just I can't remember which and my google-fu failed me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, as soon as we include comments, the savings may become marginal (as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9460/did-any-assemblers-work-like-this#comment30432_9460&quot;&gt;pointed out by tofro&lt;/a&gt; and others). It's easy to see that comments can go past 50% of the source text. So even saving 2/3rd by encoding the instruction source, this will be only 1/3rd (or less) over all (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this works of course only by making the assembler - or better IDE - able to handle it - vulgo BIGGER - leaving even less space to hold the source in memory. Maybe even so little that there's no space for the object code either. Keep in mind, the marvels of modern IDE are hundrets of megabyte monsters, only able perform with huge memory footprints and even larger disk space assigned on fast drives. Memories that large, that even the largest sources are comparable small and can be kept memory resident.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On an 8 bit machine this ends in endless overlay swapping, even if the source/object is kept in (remaining) memory. If you want the feeling, switch on UCSD Pascal on an Apple II and switch between editor, compiler and debug :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom Line:&lt;/strong&gt; On classic machines the classic workflow is the only way to go when writing any reasonable sized program. Load editor, edit text, load assembler, assemble, load linker, link, load debugger, debug.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Heck, there where even hex-keypad versions working like this - ofc, instructions had to be entered as hex. IIRC the (extended?) monitor for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Elektor_Junior_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Junior Computer&lt;/a&gt; worked like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - beside the assumption of interactive program development, a rather odd idea if I may add.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Being a BASIC program itself, AFAIR, memory was a precious.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Maybe a tad more if we compress comments as well, like using a 6 bit code :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-03-29T11:25:10.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9468" PostTypeId="2" ParentId="9461" CreationDate="2019-03-29T11:54:33.020" Score="13" Body="&lt;p&gt;It all comes down to the definition of micro. After all, already the PDP-11/03, aka LSI-11, of 1975, is based on a micro chipset. That's less than a year after Unix became known outside AT&amp;amp;T. An 'official' AT&amp;amp;T port to the LSI-11 was published in 1978. Not much later, the PDP-11/24 (1979) used the F11 chips follow us where J11 and T11 (single chip PDP). Clearly micros (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it comes to more common (*2) CPUs, Intel's 8086 got its first port, by AT&amp;amp;T in 1978, shortly followed by Microsoft's XENIX, based on the AT&amp;amp;T port (*3).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Or do the case form make the difference? Then I must point to some 6502, Z80 or even 2650 based systems in 19&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - not that I would call the LSI-11 uncommon&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Sans the custom MMU that is.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2019-03-29T12:16:58.677" LastActivityDate="2019-03-29T12:16:58.677" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9469" PostTypeId="2" ParentId="1445" CreationDate="2019-03-29T14:19:36.993" Score="4" Body="&lt;p&gt;In case it helps someone else who, like me, comes across this page in the future, I'd also recommend &lt;a href=&quot;https://shredzone.org/docs/tzxtools/tzxwav/&quot; rel=&quot;nofollow noreferrer&quot;&gt;tzxwav&lt;/a&gt;. It's written in Python, so there were a couple of extra hoops I had to jump through to get it working on my Win 10 machine. But, the Python install didn't take long, and is fairly small at 35mb. Tzxwav can then be run from the windows command line just like the other apps mentioned in the question. It managed to recover files from an old TDK C60 of mine that MakeTZX, Audio2tape, and loading the source directly into Spectaculator all struggled with.&lt;/p&gt;&#xA;" OwnerUserId="12164" LastActivityDate="2019-03-29T14:19:36.993" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9470" PostTypeId="2" ParentId="9461" CreationDate="2019-03-29T15:20:09.273" Score="7" Body="&lt;p&gt;With the other answers, it is obvious the Sun-1 was not the first. However, due to Sun Microsystem's relevance in the microcomputing world, I think this May, 1982 entry is worth mentioning here. The system was based on a 68000 CPU along with a Sun-designed MMU.  (Apparently the Motorola MMU at the time was not sufficiently reliable.)&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sun-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sun-1&lt;/a&gt;, 1982, 68000, Sun MMU&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sun-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sun-2&lt;/a&gt;, 1983, 68010, Sun MMU&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sun-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sun-3&lt;/a&gt;, 1985, 68020, Sun MMU, Motorola fp math coprocessor&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sun-3#Sun-3x&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sun-3x&lt;/a&gt;, 1989, 68030, inherent MMU, Motorola fp math, system coincident with &lt;a href=&quot;https://en.wikipedia.org/wiki/SPARCstation_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;SparcStation 1&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;No more 680x0 models past that, and later Sun models would either use the Sparc or x86 CPUs (both 32-bit and later 64-bit).&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="447" LastEditDate="2019-04-01T09:26:38.040" LastActivityDate="2019-04-01T09:26:38.040" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="9471" PostTypeId="2" ParentId="9460" CreationDate="2019-03-29T15:24:19.610" Score="5" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Lazer%27s_Interactive_Symbolic_Assembler&quot; rel=&quot;noreferrer&quot;&gt;LISA assembler&lt;/a&gt; for the Apple II kept the source file in a partially-processed form.  LISA v2.x mostly just tokenized the opcodes, but v3+ kept symbols in a symbol table, tokenized arithmetic operations and operands, and did other funky things.  Comments and lines that failed to parse were stored in their &quot;raw&quot; form.  I think macros were as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The source code was kept this way on disk and in memory.  This allowed it to use less RAM and assemble more quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only documentation I've been able to find on the format was the 6502/65816 source code itself.  C++ code to decode the various versions can be found &lt;a href=&quot;https://github.com/fadden/ciderpress/blob/master/reformat/Asm.cpp&quot; rel=&quot;noreferrer&quot;&gt;in CiderPress&lt;/a&gt; (search for &quot;LISA Assembler&quot; in the sources).&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2019-03-29T15:24:19.610" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9473" PostTypeId="1" CreationDate="2019-03-29T22:04:07.780" Score="5" ViewCount="350" Body="&lt;p&gt;QUESTION -&lt;br&gt;&#xA;    .  Were there computers whose text in text-mode, touched( or came close to ) the overscan border, and could this sometimes result in some of the computer-generated-display not being visible on some tv's / monitors? ?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Time range - Approximately 1975 - 1985, although any earlier examples are also interesting .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In late 70's and early eighties, on some tv's,  you strongly felt as if you were not seeing all of the picture being transmitted,  due to&lt;br&gt;&#xA;    1 - Curved corners of the screen ( variation on different tv's  )&lt;br&gt;&#xA;    2 - Different screen sizes or ratios&lt;br&gt;&#xA;    3 - Or, because adjustment controls seemed to result in losing horizontal picture to gain vertical picture, or, vice versa.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note - I don't know how curved corners worked on tv's or monitors, if or not tv-camera-sensors had curved corners, and if any computers had them in their video-memory ( I'm sure they did not ) .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note - I'm thinking if the following thread -&lt;br&gt;&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9426/was-the-picture-area-of-a-crt-a-parallelogram-instead-of-a-true-rectangle&quot;&gt;Was the picture area of a CRT a parallelogram (instead of a true rectangle)?&lt;/a&gt;&lt;br&gt;&#xA;was not deemed irrelevant, then neither should this one .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE&lt;br&gt;&#xA;- All excellent answers etc, although I'm surprised no one has mentioned earlier computers ( maybe they were only kits ) from lets say 75-79 ( or earlier ! ), which seemed to display things right to the top or bottom edges of the screen, a display that looked like the famlous tv-typewriter . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE - I have now updated this question, even though the answers already received cleared up a lot of what I was curious about .&lt;/p&gt;&#xA;" OwnerUserId="11744" LastEditorUserId="11744" LastEditDate="2019-04-03T00:58:05.187" LastActivityDate="2019-04-03T00:58:05.187" Title="Were there computers whose text touched( or came close to ) the overscan border?" Tags="&lt;hardware&gt;" AnswerCount="3" CommentCount="12" ClosedDate="2019-03-31T13:53:06.070" ContentLicense="CC BY-SA 4.0" />
  <row Id="9474" PostTypeId="2" ParentId="9473" CreationDate="2019-03-29T22:53:10.737" Score="-3" Body="&lt;p&gt;No.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A generated video signal will always be within the limits on the appropriate screen. If not, it will be due a misaligned (*1) display - or using a non fitting display, which is the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, especially when including monitors (that is devices not tied to any TV standard), there are no limits other than the ones set by its manufacturer. Any combination of line length, lines per frame and frames per second is possible. There is no right or wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&amp;lt;Background_Information&amp;gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Common for all of these, the (composite) video signal for each line follows the same definition of &lt;em&gt;Front Porch&lt;/em&gt;, &lt;em&gt;Sync&lt;/em&gt;, &lt;em&gt;Back Porch&lt;/em&gt; and &lt;em&gt;Display Area&lt;/em&gt; as this nice picture shows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CrTga.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CrTga.png&quot; alt=&quot;Structure of a vide line&quot;&gt;&lt;/a&gt;&#xA;(Taken &lt;a href=&quot;https://en.wikipedia.org/wiki/File:Video-line.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;from Wikipedia&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Display Area is the part of the signal that is meant for display. It is fixed within the appropriate production line. For US TV production (60 Hz 525 lines) it's 52.6 µs, for European 50Hz/625 lines it's 52 µs. Anything &lt;em&gt;longer&lt;/em&gt; will result in an invalid picture, everything shorter needs to be filled up (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early (hobby) machines often used the whole display area, leading to a picture creeping deep into the edges (*3) Later (home-) computers used in most cases only a section of the display area due various reasons (*4). The remainder was usually filled with their background colour (like white on a ZX81) or even offered to select a certain colour/brightness (think VC20).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Computers &lt;em&gt;always&lt;/em&gt; outputed the whole area&lt;/strong&gt;. It was up to the user to adjust the TV set in a way to emphase on the variable content or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later the ability to cover the whole display area with more than just a border was sold as a 'new/additional' feature - more of a marketing move ignoring the past than anything really new.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&amp;lt;/Background_Information&amp;gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in any case, the display area of a composite signal is &lt;strong&gt;always&lt;/strong&gt; the same and intended to be fully displayed. What part of the signal is finally shown is not determinated by the computer or it's video hardware, thus it can't be influenced by either. it's strictly an issue of (faulty) display setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;The question is not about computing but display properties and a faulty setup thereof.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Note: The issue of &lt;em&gt;Title Safe&lt;/em&gt; and &lt;em&gt;Action Safe&lt;/em&gt; area are sometimes mentioned in this context (likewise &lt;a href=&quot;https://en.wikipedia.org/wiki/Overscan&quot; rel=&quot;nofollow noreferrer&quot;&gt;Overscan, Underscan or Fullscan&lt;/a&gt;). Except, they are neither part of any of TV/CRT technology  or relevant for a correct adjusted display. &lt;em&gt;They are purely &lt;strong&gt;hints&lt;/strong&gt; for TV producers where to place which content, to &lt;strong&gt;increase the chance&lt;/strong&gt; that a transmission gets show even &lt;strong&gt;on malaligned TV sets&lt;/strong&gt;.&lt;/em&gt; There is no guarantee for either to be helpful or to matter at all. For a computer setup a correct adjusted screen is default (and mandatory). &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Or on purpose aligned that way. So if you see pictures using the screen  way into the edge, it's because the user has adjusted the screen to show it that way, not because the computer did so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - By default in black, but any other intensity/colour is valid as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Noteworthy the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cromemco_Dazzler&quot; rel=&quot;nofollow noreferrer&quot;&gt;TV dazzler&lt;/a&gt; with producing the whole display area from memory data - a fact that made it quite useful and a defacto standard in late 1970s early 1980s TV production.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Beside the intention to produce a certain pixel ratio, more often than not it was the same as with TV: staying within an area even quite old TV and/or less than perfect aligned TV will show without the need to be adjusted. It's all about user experience, isn't it? And having to adjust the TV set is no considered a perfect one - no matter how habdly adjusted it already is.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-03-31T12:17:12.603" LastActivityDate="2019-03-31T12:17:12.603" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9475" PostTypeId="1" AcceptedAnswerId="9476" CreationDate="2019-03-29T23:05:33.153" Score="5" ViewCount="1738" Body="&lt;p&gt;My understanding of how interrupts (and more specifically, interrupt daisy-chaining) works in the Z80 is limited, to say the least, so if I get anything wrong please correct me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, let's say I have two PIO chips to control two different peripherals (let's say, a character LCD display, and some switches, but I'm sure that's not very relevant). I've connected the IEO pin of one PIO to the CPU's INT pin, and it's IEI pin to the other PIO's IEO. I then connected &lt;em&gt;that&lt;/em&gt; PIO's IEI pin to a 5&amp;nbsp;V rail. I got this information from this image: (but instead of the three different peripheral chips they use, I just have two PIO chips.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/d6BhK.gif&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Daisy chaining Z80 peripherals&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/d6BhK.gif&quot; alt=&quot;Daisy chaining Z80 peripherals&quot; title=&quot;Daisy chaining Z80 peripherals&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[&lt;a href=&quot;http://z80.info/1653.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;from here&lt;/a&gt;]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, my understanding is that this kind of configuration means that if the second PIO (the one directly connected to the 5&amp;nbsp;V rail) pulls its IEO pin low, the other PIO will not be able to send an interrupt. Correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My issue is this&lt;/strong&gt;: How would I cause a PIO chip's IEO pin to go low? And how can I actually send an interrupt from one of these peripherals? My initial thought would be that I'd just pull the CPU's INT pin low, but that doesn't make sense the more I think about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(On a side note, any idea what the INTACK pin is on that diagram?)&lt;/p&gt;&#xA;" OwnerUserId="12150" LastEditorUserId="202" LastEditDate="2019-05-20T15:44:31.287" LastActivityDate="2019-05-20T20:44:19.200" Title="How does the Z80 determine which peripheral sent an interrupt?" Tags="&lt;z80&gt;&lt;interrupt&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9476" PostTypeId="2" ParentId="9475" CreationDate="2019-03-30T00:00:30.980" Score="10" Body="&lt;p&gt;You might want to consult the chapter for 'Interrupt Response' of the CPU manual (Chapter 8 on p.55 of the 1976 issue) and 'Interrupt Servicing' from the PIO manual (Chapter 6 on p.15 of the 1977 issue).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general the Z80 supports 3 different interrupt modes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Mode 0 - like 8080, here the interrupting device must place an instruction on the bus - usually done by a 8259 interrupt controller.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Mode 1 - All interrupts will jump to 38h (restart) and execute from there. Much like NMI&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Mode 2 - Peripherals put an interrupt service number on the bus during interrupt response, the CPU uses for an indirect call thru a table of pointers in a 256 byte page pointed to by the I register.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The picture inserted hints that you intend to use Z80s Mode 2. To make it work:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Write some service routine for your interrupt, ending in an RETI&lt;/li&gt;&#xA;&lt;li&gt;Disable interrupts&lt;/li&gt;&#xA;&lt;li&gt;Setup a vector table in a memory page (256 byte boundary)&lt;/li&gt;&#xA;&lt;li&gt;Pick any vector number you like (lets say 3)&lt;/li&gt;&#xA;&lt;li&gt;Put the address of your service routing to that vector (xx06/xx07)&lt;/li&gt;&#xA;&lt;li&gt;Put the vector number into the PIO channels vector register (control word with 2^0 set)&lt;/li&gt;&#xA;&lt;li&gt;Set the Interrupt control word (x7) for the port to define which bits and under which configuration will trigger an interrupt. For example 97h FFh sent to Port A will make all inputs issue interrupts as soon as they go high.&lt;/li&gt;&#xA;&lt;li&gt;Set interrupt Mode 2 of the CPU&lt;/li&gt;&#xA;&lt;li&gt;Enable interrupts&lt;/li&gt;&#xA;&lt;li&gt;Enjoy whatever happens :))&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A Z80 in Mode 2 is perfectly suited for an interrupt driven system.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How would I cause a PIO chip's IEO pin to go low?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Err ... by waiting for an interrupt to occur, then servicing it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Maybe I do not really understand what part of information is missing).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-05-08T03:13:22.183" LastActivityDate="2019-05-08T03:13:22.183" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9477" PostTypeId="2" ParentId="9473" CreationDate="2019-03-30T02:01:47.380" Score="7" Body="&lt;p&gt;1985 means we can include the &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga&quot; rel=&quot;noreferrer&quot;&gt;Commodore Amiga&lt;/a&gt;, which was designed to display images beyond the visible screen area. Along with its &lt;a href=&quot;https://en.wikipedia.org/wiki/Genlock&quot; rel=&quot;noreferrer&quot;&gt;genlocking&lt;/a&gt; capability, this feature made the Amiga attractive for video production.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga's standard Workbench resolution of 640x200 (NTSC) or 640x256 (PAL) just fitted inside the visible area of most TVs, but applications could open 'custom' screens which were wider and/or taller. A screen could also be pulled down to reveal other screens 'behind' it, and then the bottom of the 'front' screen would move down into the overscan area. Workbench included a 'Preferences' tool for centering screens on the user's TV or monitor. Later versions of AmigaOS also allowed the user to adjust the Workbench screen size to suit their tastes.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The photo below shows the 'high resolution' 640x256 pixel 4 color Workbench screen pulled down to reveal a paint program running in its own 'low resolution' 352x266 pixel 32 color 'custom' screen. The paint program's toolbar is partially hidden behind the tube fascia, so half the tool icons are invisible!       &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HVChn.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HVChn.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-03-30T02:01:47.380" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9478" PostTypeId="2" ParentId="9460" CreationDate="2019-03-30T04:05:34.600" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;...in between machine code monitor and full classical assembler: keep&#xA;  the program under development, in memory always in binary form (more&#xA;  compact than source text, much more compact than both source and&#xA;  binary), but also keep a comprehensive symbol table...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;did any assemblers with the above design, ever exist?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. In 1984 &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Home_Computer_Advanced_Course&quot; rel=&quot;noreferrer&quot;&gt;The Home Computer Advanced Course&lt;/a&gt; came with an assembler-debugger package on tape called &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=0008012&quot; rel=&quot;noreferrer&quot;&gt;CHAMP&lt;/a&gt;, with versions for the ZX spectrum, Commodore 64 and BBC Micro. Soon afterwards I 'unoffically' ported the Spectrum version to the Amstrad CPC. 26 years later I produced an &lt;a href=&quot;http://www.cpcwiki.eu/forum/programming/champ-assemblerdebugger-ported-to-amstrad-cpc/25/&quot; rel=&quot;noreferrer&quot;&gt;updated version&lt;/a&gt; with more features.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you type a line of source code into CHAMP's assembler it immediately converts it to machine code, with pointers and tokens to handle symbols and math operations. This format takes up about 1/3rd of the space of plain text, and 'assembles' much faster because the text has already been parsed. The source text is displayed by disassembling each opcode 'on the fly', but is still fast enough to get a reasonable scroll rate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of code is shared between the assembler and debugger, so the program itself is fairly compact for an 'IDE'. I put it in a ROM to use up less RAM and make it more crash-proof, and used the CPC's bank switching to keep the source code hidden when the executable is running. This enabled writing, assembling, and debugging large programs entirely in memory.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also created a 'reassembler' which used CHAMP to disassemble &lt;em&gt;itself&lt;/em&gt; into CHAMP source code. This is how I got past the patching stage when developing it on the Amstrad. To transfer the original program from the Spectrum to the Amstrad I built a custom parallel interface for both computers. Then I wrote a disassembler in BASIC and printed the result out on fan-fold paper, figured out what to patch to get the debugger working, then finally was able to use CHAMP itself to do the rest!&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-03-30T04:05:34.600" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9480" PostTypeId="2" ParentId="9473" CreationDate="2019-03-30T09:01:15.780" Score="5" Body="&lt;p&gt;Before computers, television broadcasts defined a &quot;title safe&quot; (or &quot;safe title&quot;) area which was a rectangular region in the center of the video signal that any properly maintained television was guaranteed to display. Any words on the screen (titles) should fit within this area which occupies the &lt;a href=&quot;http://scanline.ca/overscan/&quot; rel=&quot;nofollow noreferrer&quot;&gt;center 80% of the screen&lt;/a&gt;, giving a 10% border all around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A slightly larger area was the &quot;action safe&quot; (or &quot;safe action&quot;) area where a properly maintained television would cut off the image. This area occupied the center 90% of the signal, giving a 5% border. A properly maintained television could display all or none of this area. Only the title safe area was guaranteed to be visible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You asked whether there were any &quot;computers that did not limit their display to a box centered in the middle of the screen&quot;. I think you are referring to the title safe area, and the answer is yes. The Commodore 64 and other computers could set the color of the border outside of the title safe area and could display sprites in this area. The NES went a step further by displaying a 256&amp;times;240 pixel picture that covered the whole action safe area, and within that &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/Overscan&quot; rel=&quot;nofollow noreferrer&quot;&gt;the center 224&amp;times;192 pixels were considered to be title safe.&lt;/a&gt;&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers used for full screen video production such as the Commodore Amiga (1985) also needed to be able to write to the entire action safe area. See Bruce Abbott's answer for more information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So two use cases for this ability were (1) games, and (2) video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In place of analog electron guns that had to be adjusted to keep the picture centered and sized correctly, today's digital displays have hardware pixels that go right up to the viewable edge of the screen and so the entire video signal is both action safe and title safe.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-03-31T00:55:37.497" LastActivityDate="2019-03-31T00:55:37.497" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9481" PostTypeId="1" CreationDate="2019-03-30T11:31:03.343" Score="7" ViewCount="357" Body="&lt;p&gt;I'm pretty sure Chip and Fast RAM access on an Amiga 1000 does not support FPM access. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which Amiga system, chipset or motherboard &quot;glue logic&quot; first introduced FPM access to Fast RAM? Which one to Chip RAM?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2019-03-30T16:05:10.670" Title="Which Amiga systems did access RAM with fast page access?" Tags="&lt;amiga&gt;&lt;memory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9482" PostTypeId="1" AcceptedAnswerId="9483" CreationDate="2019-03-30T11:44:37.157" Score="6" ViewCount="587" Body="&lt;p&gt;The system bus of the IBM PC had 8 data lines and 20 address lines, in a logical correspondence to the 8088 CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The AT added a second inline edge connector to expand this to 16 data lines and 24 address lines, again in a logical correspondence to the new 286 CPU. And certainly the wider data bus made the system run faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I'm wondering were the extra address lines really used? Of course there was the infamous problem with the 1-megabyte address space limit being baked into the API by the time the AT came on the scene, but it seems to me there is another issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the address space in an 8088 machine would naturally enough tend to be used for RAM. An IBM PC could take up to 64K on the motherboard, but you could stuff it with memory cards to bring it up to 256K, run Lotus 1-2-3 and turn your spreadsheets into graphs that made you look good in presentations, and that was the combination that made the IBM PC decisively superior to the Apple II in terms of what you could do with it, never mind the IBM nameplate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the SIMM was invented in 1982, two years before the AT came out. So in the 286 era, you didn't need to put memory cards on the system bus anymore. It was still used for lots of other things, of course. But none of them consumed address space wholesale the way RAM did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: did anything ever actually use the extra address space of the 16-bit ISA bus?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="79" LastEditDate="2019-04-05T22:16:21.823" LastActivityDate="2019-10-27T19:19:57.910" Title="Did the PC/AT-bus use its expanded address space?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;memory&gt;&lt;ibm-pc&gt;&lt;80286&gt;" AnswerCount="5" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9483" PostTypeId="2" ParentId="9482" CreationDate="2019-03-30T13:16:51.467" Score="10" Body="&lt;p&gt;Yes, there were 16-bit ISA cards which used the extra address lines; for example IBM’s various &lt;a href=&quot;http://www.minuszerodegrees.net/5170/cards/5170_cards.htm&quot; rel=&quot;noreferrer&quot;&gt;memory expansion options&lt;/a&gt;, most of which could be configured to provide extended memory beyond 1MiB. You can see the address lines referenced in the corresponding schematics, &lt;em&gt;e.g.&lt;/em&gt; for &lt;a href=&quot;http://www.minuszerodegrees.net/oa/OA%20-%20IBM%20PC%20AT%20512KB_2MB%20Memory%20Expansion%20Option.pdf&quot; rel=&quot;noreferrer&quot;&gt;the 512KiB/2MiB expansion board&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The PC AT didn’t have SIMM sockets on the motherboard; only the larger memory expansion options used SIMMs.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-03-30T13:16:51.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9484" PostTypeId="1" AcceptedAnswerId="9485" CreationDate="2019-03-30T14:05:39.070" Score="8" ViewCount="564" Body="&lt;p&gt;I'm writing a game for the IBM PC (running MS-DOS), complete with fancy cutscenes. Unfortunately, though, the keys pressed during those fancy cutscenes are carried out once the fancy cutscene has finished, leading to the player's inevitable death.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I solved this problem by clearing the BIOS's keyboard buffer just after the cutscene finishes, using this subroutine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;proc ClearKeyboardBuffer&#xA;ClearKeyboardBuffer_loop:&#xA;    mov ah, 01h&#xA;    int 16h                         ; is there a key pressed&#xA;        jz ClearKeyboardBuffer_ret  ; if not, return&#xA;    mov ah, 00h&#xA;    int 16h                         ; &quot;handle&quot; the key&#xA;jmp ClearKeyboardBuffer_loop&#xA;&#xA;ClearKeyboardBuffer_ret:&#xA;ret&#xA;endp ClearKeyboardBuffer&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It seems a bit brute-force, though, and takes up many precious bytes that could be better spent containing content. I expected there to be a BIOS call for this or something, but I couldn't find one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any better (faster and/or shorter) ways to stop the program from paying attention to keys pressed during the cutscene?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="8916" LastEditDate="2019-03-31T08:57:28.117" LastActivityDate="2019-03-31T08:57:28.117" Title="What's the fastest way to ignore keypresses?" Tags="&lt;ms-dos&gt;&lt;assembly&gt;&lt;ibm-pc&gt;&lt;bios&gt;&lt;x86&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9485" PostTypeId="2" ParentId="9484" CreationDate="2019-03-30T14:18:34.167" Score="7" Body="&lt;p&gt;If you’re using BIOS functions to read from the keyboard in your game, the quickest way to clear the buffer is to make its tail equal to its head: read the value at 0x0041A and write it to 0x0041C:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;proc clearkeyboardbuffer&#xA;; AX is clobbered&#xA;    push ds&#xA;    mov ax, 0040h&#xA;    mov ds, ax&#xA;    mov ax, [001Ah]&#xA;    mov [001Ch], ax&#xA;    pop ds&#xA;    ret&#xA;endp clearkeyboardbuffer&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(The BIOS keyboard buffer is a circular list starting at 0x0041E, and 0x0041A points at the buffer’s head, and 0x0041C at its tail. If both pointers are equal, the buffer is empty.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A possibly more compatible approach would be to use the DOS services. &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/78/25.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Interrupt 0x21 function 0x0C&lt;/a&gt; will clear the standard input buffer and can be combined with a subsequent operation in AL, &lt;em&gt;e.g.&lt;/em&gt; &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/71/25.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;0x07&lt;/a&gt; to read the next character without echoing it. This will allow your program to support redirection, different keyboard layouts, and replacement keyboard buffers. Whether that’s appropriate will depend on your specific requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a PC game you’d typically write your own keyboard handler, hooking IRQ 1 (interrupt 9), as suggested by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/722/ross-ridge&quot;&gt;Ross Ridge&lt;/a&gt;. See for example &lt;a href=&quot;https://github.com/id-Software/wolf3d/blob/05167784ef009d0d0daefe8d012b027f39dc8541/WOLFSRC/ID_IN.C#L143&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Wolfenstein 3D keyboard handler&lt;/a&gt;, and &lt;a href=&quot;https://github.com/id-Software/wolf3d/blob/05167784ef009d0d0daefe8d012b027f39dc8541/WOLFSRC/ID_IN.C#L674&quot; rel=&quot;nofollow noreferrer&quot;&gt;its “clear keyboard” function&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-03-31T07:45:30.710" LastActivityDate="2019-03-31T07:45:30.710" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="9486" PostTypeId="2" ParentId="9481" CreationDate="2019-03-30T16:05:10.670" Score="7" Body="&lt;p&gt;Page mode, and later fast page mode (FPM) and static column DRAM only became popular about 1990. Amazingly, the Amiga A3000, also released in 1990, supported faster access to FAST RAM using static column DRAM. The &quot;Ramsey&quot; custom chip was primarily responsible, and versions of &quot;Ramsey&quot; were also used in the A4000. This was only really useful when combined with the new &quot;burst mode&quot; of the 68030 CPU in the A3000. Burst mode allowed the '030 to read 16-bytes (4x32 bit) into its cache using the lower latency of static column and page mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without at least a 68030 CPU, there was no burst mode on an Amiga and limited ability to use this DRAM feature to improve performance. The only Amigas to ship with a 68030 (or 68040) CPU were the A2500/030, A3000, and A4000. But the A2630 accelerator used in the A2500/030 did not support burst mode and wouldn't benefit much from the enhanced DRAM. This leaves only the A3000 and A4000 supporting it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For CHIP RAM access, improvements were made to the bandwidth for the A3000 by supporting 32-bit access to the CHIP RAM by the CPU. However, there was no burst mode supported for accessing CHIP RAM. For custom chips, the A3000 used ECS, which only allowed 16-bit access without page mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the advent of AGA in the A4000 and A1200 (and later CD32), both the custom chips and CPU could reach CHIP RAM using 32-bit accesses, plus at higher clock speeds. This greatly improved CHIP RAM bandwidth without relying on page mode, and I don't think page mode was supported by the AGA chip set. This leaves only the A4000 with the possibility of CPU access to both FAST RAM and CHIP RAM using page mode.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-03-30T16:05:10.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9487" PostTypeId="1" CreationDate="2019-03-30T18:48:55.143" Score="2" ViewCount="253" Body="&lt;p&gt;QUESTION&lt;br&gt;&#xA;How was the prototype-robot for the Atari 2600 kept in the same position as the robot on screen?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A photo and some details here :&lt;br&gt;&#xA;&lt;a href=&quot;https://www.retrothing.com/2008/12/atari-2600-cont.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.retrothing.com/2008/12/atari-2600-cont.html&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was it just wheel odometry, I doubt anything else would have been considered, due to costs.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. - It would be great if more prototypes from this company ( or companies ), and from any other companies could be documented, since they may have had impressive features, which were probably too expensive to manufacture .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE - This robot may have been more than a prototype, since it appears to have been FCC tested ( ? ), the results on the following webpage &lt;a href=&quot;http://www.atarimuseum.com/otherprojects/nonatari/androbot/andro-atari.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Atari Androbot Projects&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11744" LastEditorUserId="11744" LastEditDate="2019-05-29T21:59:45.463" LastActivityDate="2019-05-29T21:59:45.463" Title="How was the prototype-robot for the Atari 2600 kept in the same position as the robot on screen?" Tags="&lt;robotics&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9488" PostTypeId="2" ParentId="9475" CreationDate="2019-03-30T21:37:55.817" Score="2" Body="&lt;p&gt;The short answer is that Z80 do NOT determine itself which peripheral sends an interrupt. In Zilog's framework, all compatible peripherals determine among themselves who's emitting the interrupt to the CPU this time. Or more specifically, who is sending IM2 vector on the bus during the time Z80 acknowledges the interrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This kind of controlling prioritization of interrupts allows one building Z80 system not to use additional dedicated interrupt controller, as i8080 system designer had to do. However, the drawbacks are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;extra pins every Z80-world compatible peripheral has to have.&lt;/li&gt;&#xA;&lt;li&gt;extra intelligence every such a peripheral has to have: particularly, they have to understand specific Z80 command (that is, RETI), whose the only purpose is to say to the peripherals the interrupt routine ends; otherwise RETI is fully equivalent to RET.&lt;/li&gt;&#xA;&lt;li&gt;probably the very long interrupt chains could have timing problems.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-03-30T21:37:55.817" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9490" PostTypeId="1" CreationDate="2019-03-31T05:29:56.870" Score="9" ViewCount="375" Body="&lt;p&gt;The Amiga 1000 came out in July 1985. This was an era in which personal computers were designed by their manufacturers to meet a unique set of bespoke requirements. For example, some computers came with advanced hardware for sound (for the time), while others had very primitive support for a &quot;beeper&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems reasonable to conclude that personal computer buyers of this era tended to choose a system that focused on the hardware/software features that they felt were important for their own &quot;use cases&quot;. Again, using the example of built-in audio support, a musician would be inclined toward a machine with more advanced audio capabilities. So would a gamer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is what sort of use cases in 1985 led buyers toward purchasing an Amiga, and why would it be a better choice for those particular use cases than the PC, Macintosh, or Atari ST?&lt;/p&gt;&#xA;" OwnerUserId="11487" LastEditorUserId="4335" LastEditDate="2019-03-31T16:59:29.117" LastActivityDate="2019-03-31T16:59:29.117" Title="How did the Amiga uses compare to uses for other personal computers in 1985?" Tags="&lt;amiga&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ClosedDate="2019-03-31T10:52:06.467" ContentLicense="CC BY-SA 4.0" />
  <row Id="9491" PostTypeId="2" ParentId="9490" CreationDate="2019-03-31T05:54:33.027" Score="10" Body="&lt;p&gt;It was like a cheaper yet color Macintosh with a command line interface available. Stereo sound, better graphics, multi-process -- everything but sustained, intelligent marketing.  (Initial marketing was good, but it was like they spent all their marketing money up front and expected momentum to carry them from that point.) I'm writing from an American viewpoint -- other countries weren't stuck in a mindset limited to PC or Mac. I like to say it offered more in 1985 than Windows 95 would a decade later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Atari ST won the high end music market with its standard MIDI interface.  Unlike the Mac and PC, it could compete with the Amiga on price.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PC and Mac had much better business software support, and other high end programs such as AutoCAD pretty much ignored the Amiga and ST.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably the most well-known high-end Amiga software/hardware product was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Video_Toaster&quot; rel=&quot;noreferrer&quot;&gt;Video Toaster&lt;/a&gt; from NewTek in 1987.  It needed an Amiga 2000, which was a PC-looking machine with bus slots.  It was a very popular video rendering system, and the graphics for the first couple of seasons of &lt;em&gt;Babylon Five&lt;/em&gt; were produced with the Video Toaster and Amiga.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2019-03-31T06:04:32.833" LastActivityDate="2019-03-31T06:04:32.833" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9493" PostTypeId="2" ParentId="9490" CreationDate="2019-03-31T10:04:32.987" Score="4" Body="&lt;p&gt;It was the only 16-bit computer with more than simplistic memory-mapped video hardware, with sprites reminiscent of the gaming-oriented 6502 processor color home computers (Atari 2600 and upwards and Commodore 64) but scaled upwards and separate &quot;blitting&quot; processing that could do the equivalent of sprites on bitmaps but with hardware acceleration.  It had actual serious multitasking/processing.  Compared to the state of technology, it was a very solid move forward from home computers to larger processing power and matching operating systems.  &quot;Personal computers&quot;, in contrast, highlighted the &quot;business&quot; angle and you'd see them advertised more likely with snapshots of spreadsheets than games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible that the high pricing of color monitors with reasonable resolution confined affordable reasonably ergonomic &quot;computing&quot; to monochrome displays, leaving color personal computers stuck with the display parameters of color TV sets which they strove to be compatible with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Macintosh with its built-in screen kept with monochrome (and CPU-manipulated bitmaps) for a long time, too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the Amiga was pretty much square where the technological advances would position the progress of home computers and in a space, for whatever reason, without serious contenders.  But for whatever reason, also without serious perspectives.  It took some time before acceleration became a thing on PCs, and even then, its &quot;sprite&quot; support never grew beyond a hardware cursor.  Instead blitting and later triangle shading and other stuff you'd expect GL to deliver became a thing and eventually got good enough to kill off Silicone Graphics Workstations, at one time the epitome of heavy-duty graphics processing (rather than game-based graphics which had a different focus).&lt;/p&gt;&#xA;" OwnerDisplayName="user12177" LastActivityDate="2019-03-31T10:04:32.987" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9497" PostTypeId="1" AcceptedAnswerId="9498" CreationDate="2019-03-31T21:35:08.667" Score="3" ViewCount="327" Body="&lt;p&gt;There are several nice graphs (in the computer science sense: nodes and arcs) of the history of programming languages, such as &lt;a href=&quot;http://rigaux.org/language-study/diagram.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://rigaux.org/language-study/diagram.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't found one of operating systems in general, but there was one for UNIX around somewhere, and this one for Linux distributions was easy to find: &lt;a href=&quot;https://www.cyberciti.biz/tips/linux-kernel-history-and-distribution-time-line.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.cyberciti.biz/tips/linux-kernel-history-and-distribution-time-line.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Database systems have a rich and tangled history, for most of which as far as I can tell documentation exists, but is not as easy to find as for more familiar matters such as home computing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does there exist a graph or other form of comprehensive overview of the history of database and ERP systems?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-03-31T22:39:45.780" Title="Graph of the history of databases" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9498" PostTypeId="2" ParentId="9497" CreationDate="2019-03-31T22:39:45.780" Score="4" Body="&lt;p&gt;the german wikipedia article on databases mentions the&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Genealogy of Relational Database Management Systems&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you can find it at&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://hpi.de/naumann/projects/rdbms-genealogy.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hpi.de/naumann/projects/rdbms-genealogy.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10980" LastActivityDate="2019-03-31T22:39:45.780" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9499" PostTypeId="1" AcceptedAnswerId="9504" CreationDate="2019-04-01T00:18:15.547" Score="4" ViewCount="696" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Hewlett-Packard_9100A&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Hewlett-Packard_9100A&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Hewlett-Packard 9100A (hp 9100A) is an early programmable calculator[3] (or computer), first appearing in 1968. HP called it a desktop calculator because, as Bill Hewlett said, &quot;If we had called it a computer, it would have been rejected by our customers' computer gurus because it didn't look like an IBM. We therefore decided to call it a calculator, and all such nonsense disappeared.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;How long did this marketing trick need to continue? I would expect only a few years; by 1975, the Altair 8800 was being openly sold as a personal computer, its development driven precisely by the bottom falling out of the calculator market, causing MITS to try a desperate pivot. But did the marketing trick end closer to the beginning of the seventies, or the mid-seventies?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; Here's another source with a comment about the marketing issue: &lt;a href=&quot;http://www.hpmuseum.org/hp9825.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.hpmuseum.org/hp9825.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The &quot;calculator&quot; label was also clever marketing because US Department Of Defense procurement regulations (and some company regulations) made it a lot easier to get approval to purchase a &quot;calculator&quot; than a &quot;computer&quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2019-04-01T14:06:31.600" LastActivityDate="2019-04-01T15:26:59.383" Title="When did computers stop needing to be marketed as calculators?" Tags="&lt;history&gt;&lt;hp&gt;&lt;calculator&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9500" PostTypeId="1" AcceptedAnswerId="9501" CreationDate="2019-04-01T00:35:49.903" Score="34" ViewCount="10740" Body="&lt;p&gt;Several early computer designs regarded a 'word' as representing not an integer, with the bits having values 2^0, 2^1, 2^2, ..., but as representing a fixed-point fraction 2^-1, 2^-2, 2^-3, ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(For the sake of simplicity in this question I'm ignoring the existence of the sign bit and talk only in terms of positive numbers)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some examples of this convention are EDVAC, EDSAC, and the IAS machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was this?  To me, having dealt with since the 1970s with machines that have &quot;integers&quot; at base, this seems a strange way to look at it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does it affect the machine operation in any way?  Addition and subtraction are the same regardless of what you think the bits mean, but I suppose that for multiplication of two N-bit words giving an N-bit result, the choice of which N bits to keep depends on your interpretation. (Integer: you want the &quot;right hand word&quot;; fixed-point fraction, you want the &quot;left hand word&quot;).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10260" LastEditDate="2019-04-05T12:07:32.197" LastActivityDate="2021-02-26T13:29:19.173" Title="Why did some early computer designers eschew integers?" Tags="&lt;history&gt;" AnswerCount="8" CommentCount="6" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9501" PostTypeId="2" ParentId="9500" CreationDate="2019-04-01T01:41:58.130" Score="36" Body="&lt;p&gt;I'd think that it was mostly down to the preferences of John von Neumann at the time. He was a strong advocate of fixed point representations, and early computers were designed with long words to accommodate a large range of numbers that way. You certainly don't need 30-40 bits to cover the most useful integers, but that many were needed if you wanted plenty of digits before and after the decimal point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the 1970s though, the costs of integration were such that much smaller word sizes made sense. Minicomputers were commonly 16 bit architectures, and micros 8 bits or sometimes even 4. At that point you needed all the integers you can get, plus floating point had largely replaced fixed point for when you needed decimals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays we'd think nothing of using 64 bit integers, of course, but it's a heck of a lot easier to integrate the number of logic gates required for that than it would have been back when they all had to be made out of fragile and expensive vacuum tubes.&lt;/p&gt;&#xA;" OwnerUserId="12147" LastActivityDate="2019-04-01T01:41:58.130" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9504" PostTypeId="2" ParentId="9499" CreationDate="2019-04-01T08:04:26.813" Score="7" Body="&lt;p&gt;Hewlett-Packard marketed some of their computers as calculators for some marketing related reason like you stated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, DEC called their computers &quot;Programmable Data Processors&quot;, to avoid the &quot;Big Expensive Machine&quot; connotation that the word &quot;computer&quot; had at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not in every country was it the same as in the West. In the Hungarian People's Republic, &lt;a href=&quot;http://hampage.hu/tpa/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;KFKI (a manufacturer of what we would call computers today) made their products called TPA&lt;/a&gt; (that stands for &quot;Tárolt Programú Analizátor&quot;, which means stored program analyzer) because the law said that computers needed to be imported from Moscow. The &lt;em&gt;need&lt;/em&gt; to call them that presumably stopped when the People's Republic no longer existed (October, 1989), but the TPA brand continued until a few years into the 90s. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's the last I know.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-04-01T15:26:59.383" LastActivityDate="2019-04-01T15:26:59.383" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9505" PostTypeId="2" ParentId="6835" CreationDate="2019-04-01T08:23:41.167" Score="9" Body="&lt;p&gt;Some important clarifications to the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, TI-80 was based on proprietary CPU and TI-89 was 68000-based, so formally the question is wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, both Z80-based and 68k-based TI calculators used decimal floating point format. Therefore, even the extensive binary multiplication and division capabilities of 68k wouldn't help much in BCD and decimal operations.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-04-01T08:23:41.167" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9506" PostTypeId="2" ParentId="9499" CreationDate="2019-04-01T10:25:04.917" Score="6" Body="&lt;p&gt;Hewlett Packard in the 1980s-1990s had two divisions.  The Calculator Division and the Computer Division.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These two divisions each made their own products without reference to each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The overlap started when the Calculator Division started to break out from just producing hand-held calculators and started producing products that were effectively Intel-based PCs running CP/M.  These started to encroach upon the low-end products of the Computer Division such as the 9836, which used Motorola's 68000 range of processors and HP's own OSs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, this wasn't necessarily a marketing trick, it was a quirk of the way in which the company was structured.  Once the company realised that this overlap was causing confusion - for example, they had two entirely independent customer support and sales departments, they restructured.  At this point the distinction went away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another driver for unification was that customer companies, including the one I was working for at the time, had products from both divisions and wanted to have one point of contact with HP. &lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2019-04-01T10:36:20.637" LastActivityDate="2019-04-01T10:36:20.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9507" PostTypeId="2" ParentId="9500" CreationDate="2019-04-01T12:11:04.647" Score="12" Body="&lt;p&gt;This is not really a hardware issue at all, but just a different way of interpreting the bit patterns. A &quot;fixed decimal point&quot; representation for numbers is still used in some situations, where the full power and flexibility of floating point is unnecessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM S/360 and S/370 hardware had decimal arithmetic as well as binary, and IBM's PL/I programming language had both &quot;fixed decimal&quot; and &quot;fixed binary&quot; data types, with an implied decimal point anywhere in the number, though fixed binary was mainly used for the special case of &quot;integers&quot;. Fixed decimal was an obvious choice for handling financial calculations involving decimal currency such as dollars and cents, for example, because of the simple conversion to and from human-readable numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fixed point binary is still used in numerical applications like signal processing, where lightweight hardware (integer-only) and speed are critical and the generality of floating point is unnecessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of the computer's instruction set, all that is needed is integer add, subtract, multiply, divide, and shift instructions. Keeping track of the position of the implied decimal point could be done by the compiler (as in PL/1) or left to the programmer to do manually. Used carefully, doing it manually could both minimize the number of shift operations and maximize the numerical precision of the calculations, compared with compiler-generated code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a lot of similarity between this type of numerical processing and &quot;multi-word integers&quot; used for very high precision (up to billions of significant figures) in modern computing. &lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2019-04-01T12:11:04.647" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9508" PostTypeId="2" ParentId="9500" CreationDate="2019-04-01T13:40:27.677" Score="6" Body="&lt;p&gt;Some early computers did use integers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Manchester University's ‘Baby’ computer calculated the highest factor of an integer on 21 June 1948. &lt;a href=&quot;https://www.open.edu/openlearn/science-maths-technology/introduction-software-development/content-section-3.2&quot; rel=&quot;noreferrer&quot;&gt;https://www.open.edu/openlearn/science-maths-technology/introduction-software-development/content-section-3.2&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDSAC 2 which entered service in 1958, could do integer addition. &lt;a href=&quot;https://www.tcm.phy.cam.ac.uk/~mjr/courses/Hardware18/hardware.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://www.tcm.phy.cam.ac.uk/~mjr/courses/Hardware18/hardware.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="12187" LastActivityDate="2019-04-01T13:40:27.677" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9509" PostTypeId="1" AcceptedAnswerId="9510" CreationDate="2019-04-01T19:19:01.840" Score="9" ViewCount="1384" Body="&lt;p&gt;In the early seventies, companies like HP and Wang sold 'programmable desktop calculators' that were really personal computers in the time before what is usually thought of as the dawn of personal computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the same time, there was a demand for small computers to control lab and factory equipment, and this demand would tend to occur in the same sort of places as would be buying desktop calculators. So it seems likely that people would be wanting to use programmable calculators for equipment control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The de facto – and indeed de jure – standard interface for computers controlling random equipment was RS-232.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But looking over the specs of the early HP and Wang programmable calculators, I can't find any mention of them having RS-232 ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did any of the early programmable calculators have RS-232 ports? (Or if not, why not?)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-04-02T14:57:24.250" Title="Early programmable calculators with RS-232" Tags="&lt;history&gt;&lt;rs232&gt;&lt;hp&gt;&lt;calculator&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9510" PostTypeId="2" ParentId="9509" CreationDate="2019-04-01T20:09:47.107" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;In the early seventies, companies like HP and Wang sold 'programmable desktop calculators' that were really personal computers&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, as they stood firmly on the calculator side. If at all, systems like the &lt;a href=&quot;https://archive.org/details/bitsavers_cogarCogary_5183180&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cogar 4&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint_2200&quot; rel=&quot;nofollow noreferrer&quot;&gt;Datapoint 2200&lt;/a&gt; are the origin of desktop computing. Complete units with a CPU, mass storage, CRT display and a full figured typewriter keyboard, all in one unit to be placed on a desk.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The de facto – and indeed de jure – standard interface for computers controlling random equipment was RS-232.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. For one, RS-232 is still a somewhat complicated interface to build (that's the time before integrated circuits) (*1), but equally important, it lacked standardized protocols and application. If at all, HP's parallel HP-IB (&lt;strong&gt;HP&lt;/strong&gt;-&lt;strong&gt;I&lt;/strong&gt;nterface &lt;strong&gt;B&lt;/strong&gt;us), available since the mid 1960s, ruled the area. It became soon known as GPIB (&lt;strong&gt;G&lt;/strong&gt;eneral &lt;strong&gt;P&lt;/strong&gt;urpose &lt;strong&gt;I&lt;/strong&gt;nterface &lt;strong&gt;B&lt;/strong&gt;us), a term coined by companies building compatible devices but trying to avoid the HP name like hell. Later standardization in 1975, as &lt;a href=&quot;https://en.wikipedia.org/wiki/IEEE-488&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEEE-488&lt;/a&gt;, eased the burden.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sustainable definition of the HP-IB enabled to not only ease the development of applications, but it also allowed to operate multiple devices on one interface (*2). An HP-IB enabled computer did only need to have a single interface to control (almost) as many devices as needed, thus enabling to handle a whole setup, not just a single instrument. With a predefined protocol device manufacturers needed only to add application specific data/protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serial in contrast is a point-to-point interface without any protocol support at all. It needs a separate interface for each and every device to be connected, making it quite expensive on the hardware side - not to mention, that there's usually only a finite and rather small number of serial interfaces that can be added to a given computer. On the protocol side applications had to do everything from arbitration and framing to message sequencing and command separation.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did any of the early programmable calculators have RS-232 ports? (Or if not, why not?)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If they were intended to control measuring devices, a GPIB interface was the way to go. Serial was only good for data transmission. So for example many radio applications used it - and of course terminals. Both not necessarily applications for calculators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, HP (and many others) even offered serial controllers to be operated via GPIB. Making it easy to extend any device with a GPIB interface to handle many serial connections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serial only became a cheap and popular solution when integrated controllers became available (*3). Even then most of the downsides persisted. Still today it's confined to the topic of cheap low level point-to-point connections. The stuff hobbyists prefer as they can replace functionality by investing their time to add hardware hacks and software layers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On professional measurement equipment GPIB is still today (2019) the most important interface, even though many affords are made to replace the hardware layer by an IP or USB based connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No company in the measurement business could afford to deliver devices without GPIB from the 1970s until today. Just do a search for PCIe based GPIB controllers and you'll be in for a surprise. That market is so big, that many manufacturers crank out new interface cards whenever there new desktop systems become available. Similar on the device side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, all of this happens more on the professional side, where devices easily carry 5 digit price labels, but not so much in the sub-1000 USD realm where hobbyists fight for pennies.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;HP reused the GPIB idea even as the serial implementation HP-IL, for their pocket calculators, when they became powerful enough to act as controllers for other devices. Most notably the HP-41 series.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - For a serial interface bit timing circuitry, sequencing logic and a shift register is needed for sending and the same again plus additional word synchronizing on the receiving side. All plus the optional parity logic. Quite a lot. A parallel interface in contrast is just a set of two latches (one can even be just a buffer) with clocked input and output enable. Quite less and much more simple hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Features that enabled the success of USB half a century as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Serial interfaces of the 1960s were shoe box sized or larger.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2019-04-02T14:57:24.250" LastActivityDate="2019-04-02T14:57:24.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9511" PostTypeId="1" CreationDate="2019-04-01T20:10:14.933" Score="1" ViewCount="101" Body="&lt;p&gt;Can anyone direct one toward a service which can retrieve data stored on 5.25 single-sided dual-density floppy disks (MS-DOS 1.25, written using EasyWriter, on a Sanyo MBC-550)?&lt;/p&gt;&#xA;" OwnerUserId="12193" LastEditorUserId="79" LastEditDate="2019-04-01T20:44:15.993" LastActivityDate="2019-04-01T20:44:15.993" Title="Data retrieval from 5.25 floppy disks" Tags="&lt;data-preservation&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2019-04-01T21:39:08.793" ContentLicense="CC BY-SA 4.0" />
  <row Id="9512" PostTypeId="2" ParentId="9509" CreationDate="2019-04-01T20:14:46.760" Score="10" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The de facto – and indeed de jure – standard interface for computers controlling random equipment was RS-232.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Some would argue with that, at least in certain industries — Hewlett-Packard’s HPIB (GPIB, &lt;a href=&quot;https://en.wikipedia.org/wiki/HPIB&quot; rel=&quot;noreferrer&quot;&gt;IEE-488&lt;/a&gt;) was (and is) also commonly used to connect control and/or measurement equipment. It is simpler to implement than RS-232.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So some early programmable calculators did have external connectivity options, but using HPIB, not RS-232; examples include &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_9800_series&quot; rel=&quot;noreferrer&quot;&gt;the HP 9800 series&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_series_80&quot; rel=&quot;noreferrer&quot;&gt;the HP 80 series&lt;/a&gt;, and later calculators using &lt;a href=&quot;https://en.wikipedia.org/wiki/HP-IL&quot; rel=&quot;noreferrer&quot;&gt;HP-IL&lt;/a&gt; and its HPIB adapter. HP-Collection has an extensive selection of &lt;a href=&quot;http://hp-collection.org/hpil.html&quot; rel=&quot;noreferrer&quot;&gt;photos of HP-IL peripherals&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RS-232 did appear in calculator-like devices, but they tended to be marketed more as handheld computers — &lt;a href=&quot;http://www.hpmuseum.org/hp94.htm&quot; rel=&quot;noreferrer&quot;&gt;HP’s 94 series&lt;/a&gt; for example, and of course &lt;a href=&quot;https://en.wikipedia.org/wiki/Psion_Organiser#Organiser_II&quot; rel=&quot;noreferrer&quot;&gt;Psion’s Organiser II with its CommsLink&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-04-01T20:14:46.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9513" PostTypeId="2" ParentId="9511" CreationDate="2019-04-01T20:23:32.397" Score="4" Body="&lt;p&gt;A web search finds a number of companies which provide this sort of service, but I have never used any (and this isn’t the place to endorse one either).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some volunteers around the globe who might be able to help — the Archive Team has &lt;a href=&quot;https://www.archiveteam.org/index.php?title=Rescuing_Floppy_Disks#Methods_of_Transfer_(Volunteers)&quot; rel=&quot;nofollow noreferrer&quot;&gt;a list of volunteers&lt;/a&gt;, and a trip to vintage computing forums will find more. Terry Stewart (in New Zealand) also offers a similar service, albeit &lt;a href=&quot;https://www.classic-computers.org.nz/floppy-disk-file-extraction-service.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;not for free&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-04-01T20:23:32.397" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9515" PostTypeId="2" ParentId="9500" CreationDate="2019-04-01T22:41:39.190" Score="5" Body="&lt;p&gt;Computers came from calculators, and calculators are designed to solve numerical computations, and hence require the decimal point. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Babbage's &lt;a href=&quot;https://en.wikipedia.org/wiki/Difference_engine&quot; rel=&quot;noreferrer&quot;&gt;difference engine&lt;/a&gt; ~1754 had 10 of 10-digit decimal numbers.&amp;nbsp; Its job was computing numerical tables &amp;#8212; and printing them, since the copying of the day (by humans) made more mistakes than the mathematicians who made the original calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDVAC was part of the US Army's Ordnance Department, its job was ballistics computation.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastEditorUserId="7985" LastEditDate="2019-04-01T22:47:52.603" LastActivityDate="2019-04-01T22:47:52.603" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9516" PostTypeId="2" ParentId="9482" CreationDate="2019-04-01T22:41:55.037" Score="3" Body="&lt;p&gt;Yes, especially for VGA Graphics cards, which also have a large address space requirement.  As motherboards included more memory, it became necessary to have the BIOS and motherboard leave a hole in the address space for the graphics card.  On motherboards I used, there was a VGA hole at megabyte 0xE (I think, it may bave been lower).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I designed some non-graphics interface cards that depended on this VGA-hole.  Without it, the entire 16 MByte address space could be consumed by RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some motherboards, the VGA-hole was optional in the BIOS, perhaps also where the hole was located.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the bus structure evolved from ISA to VL-bus and then PCI, the addressable range increased, the bus structure became configurable, and the VGA-hole was eliminated.&lt;/p&gt;&#xA;" OwnerUserId="10500" LastActivityDate="2019-04-01T22:41:55.037" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9517" PostTypeId="2" ParentId="9500" CreationDate="2019-04-02T07:54:19.677" Score="5" Body="&lt;p&gt;The problems early computers were meant to solve used real numbers.  Often these numbers were very large or very small, so you need a scale factor for the computer to handle them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the computer natively thinks in numbers from 0.0 to 1.0 (or -1.0 to 1.0), then the scale factor is simply the maximum value of the variable.  This is easy for human minds to handle and not very error prone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the computer natively thinks in numbers from 0 to 16777215 (or whatever), the scale factor becomes something completely different.  Getting the scale factor right becomes much harder and a source of errors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets go with less errors, shall we?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As others have pointed out, the actual hardware is the same for the two schemes, it is just a matter of how humans interact with the machine.  0.0 to 1.0 is more human friendly.&lt;/p&gt;&#xA;" OwnerUserId="428" LastActivityDate="2019-04-02T07:54:19.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9518" PostTypeId="2" ParentId="9500" CreationDate="2019-04-02T08:35:50.583" Score="2" Body="&lt;p&gt;At the time using fiction point fraction representation seemed like the best solution for handling floating point numbers, because it avoids many of the issues that are present with other formats such as not being able to precisely represent 0.5 and cumulative errors when performing relatively common operations repeatedly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In time better ways to represent floating point numbers with binary were devised. General purpose hardware was able to process such formats and gave the programmer a free choice to select the one they wanted.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-04-02T08:35:50.583" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9519" PostTypeId="2" ParentId="9509" CreationDate="2019-04-02T09:29:37.983" Score="8" Body="&lt;p&gt;RS-232 became &quot;standard peripheral interface&quot; later, when most of these &quot;peripheral devices&quot; adopted microprocessors.&#xA;In early days, parallel ports were more common because they:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;can read-write data from logic elements like latches and d-triggers&lt;/li&gt;&#xA;&lt;li&gt;can control state of output triggers and even relays&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Actually they were a window to real life for CPU's register - all 8 bits can be exposed to physical state. This allows you to create a lot of stuff (almost anything) without its own expensive processing units, using only your computer's one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serial port requires all data to be processed by CPUs on both side and triggers to work on higher speeds (you can send 8 bits in parallel port in one time switching 8 triggers, while you need to switch 1 trigger 11 times to send 8 bits via typical serial interface with start and stop bytes). Also you need to control trigger open-closed time very carefully because in parallel port you can simply register trigger state change events or have external sync, while in serial all your synchronization is time-based - depending on transfer speed your bit must be sent in specified time. Even now, in era of super-high-speed CPUs, serial ports have to be controlled by hardware or by microprocessors with &quot;real time&quot; (actually hardware interrupt is ok) abilities, because operating system's clock is not precise enough for this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this serial stuff allows you just 2 things:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;limit number of wires to 2 (most common now), 4 (easy duplex) or 2+2/4+2 (2 addition wires for external sync of transfer direction or bus master selection and ready-to-read state in some implementations)&lt;/li&gt;&#xA;&lt;li&gt;have loooong wires&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;RS-232 was not able to offer you long wires in basic implementation and speed, in early days, was something about that LPT was able to offer, so it was not very popular until many devices required thin wires (human input devices like mouse) and limited wires data transfer ability (modem devices, where physical interface was also serial, so data could be processed on PC for serial transmission, transferred to modem via 232 and then outside without any impact) and generic standard (at least in physical implementation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way - serial ports are not required to be point-to-point as said in other answers - RS-485 for example is multipoint.&lt;/p&gt;&#xA;" OwnerUserId="12202" LastEditorUserId="7946" LastEditDate="2019-04-02T11:16:49.550" LastActivityDate="2019-04-02T11:16:49.550" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9520" PostTypeId="1" CreationDate="2019-04-02T11:41:20.343" Score="5" ViewCount="533" Body="&lt;p&gt;The routine at 0xffd2 which is called &lt;code&gt;chrout&lt;/code&gt; will print a character to some output stream. I would like to use this call to print a message to the screen, but I have a file open for output on a disk. According to the documentation, &lt;code&gt;chrout&lt;/code&gt; will send my character there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I direct &lt;code&gt;chrout&lt;/code&gt; to the screen? Must I close the file first?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-03-29T18:52:00.257" Title="How can I use the Commodore KERNAL to print a character to the screen?" Tags="&lt;commodore-64&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9521" PostTypeId="1" AcceptedAnswerId="9522" CreationDate="2019-04-02T12:31:17.183" Score="26" ViewCount="4759" Body="&lt;p&gt;The first floppy disks were eight inches. This size was set by IBM; I haven't been able to find any indication of why they chose it, but maybe it was just because it seemed quite small to them compared to the hard disks they were used to.&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_the_floppy_disk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/History_of_the_floppy_disk&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In a 1976 meeting, An Wang of Wang Laboratories informed Jim Adkisson and Don Massaro of Shugart Associates that the 8-inch format was simply too large and expensive for the desktop word processing machines he was developing at the time. He argued for a $100 drive.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And that was how 5.25″ came to be.&lt;/p&gt;&#xA;&lt;p&gt;I can see how the smaller size was considered preferable if e.g. you were hoping to build a portable computer. But why was it cheaper? Is it because of the engineering difficulty of making a mechanism both large and precise?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="15334" LastEditDate="2020-08-31T17:26:19.147" LastActivityDate="2020-08-31T17:26:19.147" Title="Why were 5.25″ floppy drives cheaper than 8″?" Tags="&lt;floppy-disk&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9522" PostTypeId="2" ParentId="9521" CreationDate="2019-04-02T12:50:39.040" Score="33" Body="&lt;p&gt;A few miscellaneous thoughts:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Less Materials&lt;/strong&gt;: On a certain level, a smaller device is cheaper, simply because it uses less raw materials. You need less of the magnetic coating if you're applying it to a smaller disk, there's less metal required for the drive's chassis, etc. The 8-inch drives also used a 50-pin data connector, whereas the 5 1/4-inch drives removed many unused pins to cut that down to 34, so you'd need less wiring too.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simpler stepper motor&lt;/strong&gt;: Early 5 1/4 floppy drives used the same track spacing (48 tracks per inch) as the older 8-inch drives, so there's no difference in the precision required*. But an 8-inch disk would have 76 tracks, compared to a 5 1/4's 40 tracks. So while you'd need a stepper motor with the same precision, it didn't need as large a range of motion.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cheaper motor&lt;/strong&gt;: 8-inch floppy drives were designed to rotate the disks continuously, and lower the read/write heads onto the disks when required.  5 1/4-inch drives only rotated the disks when required. As they wouldn't be in continuous use, they didn't need to be engineered to such a high standard to achieve the same operating lifetime. Additionally, as the 8-inch disk was larger, it would require a higher-rated motor to spin it in the first place. 5 1/4-inch drives generally used 12V DC motors, whereas the 8-inch variety used 24V DC, or even mains AC motors.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simplified head loading&lt;/strong&gt;: As the 5 1/4 drive isn't spinning unnecessarily, there's little danger of tracks being worn away by an idle drive's heads, and some drives omitted the head-loading circuitry completely as a result. Springing the heads down as the drive's latch/door was closed would suffice.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;*Later versions of each doubled this to 96tpi, but again &lt;em&gt;both&lt;/em&gt; were available as 96tpi, so there's no difference in precision between them.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-03T14:38:39.303" LastActivityDate="2019-04-03T14:38:39.303" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9523" PostTypeId="1" AcceptedAnswerId="9530" CreationDate="2019-04-02T13:20:06.217" Score="24" ViewCount="6043" Body="&lt;p&gt;Answers and comments to &lt;em&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9521/why-were-5-25-floppy-drives-cheaper-than-8&quot;&gt;Why were 5.25&amp;quot; floppy drives cheaper than 8&amp;quot;?&lt;/a&gt;&lt;/em&gt; suggest some reasons why floppy disks moved from 8&quot; to 5.25&quot;; basically it seems the smaller size reduced engineering difficulty and thus cost in a number of ways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that, why not make the drives even cheaper by jumping straight to an even smaller form factor such as the 3.5&quot; that was eventually settled on?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can think of three possible reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Reduced size means reduced capacity! 5.25&quot; was a trade-off between the desire to make the drives smaller which would indeed reduce cost, and the desire to preserve capacity.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On the contrary, beyond a certain point, miniaturization becomes difficult and adds cost. With late seventies technology, 5.25&quot; was the optimum balance between the cost of a larger mechanism and the cost of a smaller one.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As it turns out, smaller was indeed cheaper, but that would've been too much of a leap into the unknown at the time, for an industry that as yet had no experience with disks smaller than eight inches.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Was it for one of those three reasons, or something else?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="535" LastEditDate="2019-04-03T13:01:01.187" LastActivityDate="2019-04-26T22:33:55.157" Title="Why was the shrinking from 8″ made only to 5.25″ and not smaller (4″ or less)?" Tags="&lt;history&gt;&lt;floppy-disk&gt;" AnswerCount="6" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9524" PostTypeId="2" ParentId="9509" CreationDate="2019-04-02T13:32:45.663" Score="2" Body="&lt;p&gt;I don't know how 'early' this is, but in 1990, the HP48 series had built in RS232. In addition to the IR used by the immediately preceding HP28, there was also a four pin serial connector on the device. With the right kind of cable, this would provide up to 9600bps to another RS232 device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time, HP also sold a companion PC connection kit that that bundled the cable along with some software for editing HP programs on a DOS PC, as well as transferring binary programs back and forth. It was rather expensive, so there was also a homebrew community that showed how to build the cables yourself. This is a page of the HP48 FAQ that includes directions on building cables HP-&gt;PC, HP-&gt;HP, and HP-&gt;MODEM:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.hpcalc.org/hp48/docs/faq/48faq-12.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.hpcalc.org/hp48/docs/faq/48faq-12.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure there are people that used this feature for various kinds of device control, but the bidirectional link to a PC also sat at the foundation of the early emulator and low level programming community. Tools for dumping the ROM worked by sending the contents over the serial port to an attached PC. The serial port also provided easier and more automatic tools for loading programs into the calculator that that normal user interface wouldn't let you enter. (This includes RPL programs using words that are not normally part of the UI as well as machine code.)&lt;/p&gt;&#xA;" OwnerUserId="4522" LastActivityDate="2019-04-02T13:32:45.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9525" PostTypeId="2" ParentId="9520" CreationDate="2019-04-02T13:35:06.690" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Must I close the file first?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, not unless you already have all 10 possible file entries used up, It depends more on your intention to write a 'clean' program or just want to hack your way ahead (*1).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How can I direct chrout to the screen?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The compatible way is by setting the device the following output is meant to go to. And setting it back afterwards. It's eventually exactly what the BASIC command &lt;a href=&quot;https://www.c64-wiki.com/wiki/CMD&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;CMD&lt;/code&gt;&lt;/a&gt; does when redirecting output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The function called is &lt;code&gt;CHKOUT&lt;/code&gt; (at &lt;code&gt;$FFC9&lt;/code&gt;) with the logical file number to be supplied in X (3 in case of the screen).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Even though this was intended as a rhetorical question, there is always a chance to go brutal ... err ... use an inflexible low level approach. Here it would be using &lt;a href=&quot;http://sta.c64.org/cbm64scrfunc.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;screen functions&lt;/a&gt; directly. Here outputting a char (in A) is &lt;code&gt;$E716&lt;/code&gt;. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-04T11:14:27.313" LastActivityDate="2019-04-04T11:14:27.313" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9526" PostTypeId="2" ParentId="9520" CreationDate="2019-04-02T13:35:17.250" Score="3" Body="&lt;p&gt;I haven't tried this myself, but I noted that &lt;a href=&quot;https://www.pagetable.com/?p=1031&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore Peripheral Bus: Part 2: Bus Arbitration, TALK/LISTEN&lt;/a&gt;, under &lt;em&gt;KERNAL Channel I/O API&lt;/em&gt;, says that device 3 maps to the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, it should be possible to use &lt;code&gt;CHROUT&lt;/code&gt; with a target device of 3 to print to the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would not imagine that closing the file is necessary as long as you target the correct device, though you may need to mind system state if you are targetting different devices at the same time. Closing and reopening the file may be the cleaner approach.&lt;/p&gt;&#xA;" OwnerUserId="357" LastActivityDate="2019-04-02T13:35:17.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9528" PostTypeId="2" ParentId="9482" CreationDate="2019-04-02T14:07:52.683" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So in the 286 era, you didn't need to put memory cards on the system bus anymore. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There were a number of driving factors that decoupled memory expansion from the ISA expansion bus, but early 286 machines did allow for it. The CPU bus, at CPU speed, was directly exposed on the slot edge connector, so memory on a card was the same as memory on the motherboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With respect to how that memory was used, keep in mind that the (by far) dominant OS on these machines was real-mode DOS, with its 20-bit address space.  While there were ways to use more of the address space through protected mode, the 286 itself had its issues switching from protected mode to real, so there was a strong incentive to keep things accessible with 20-bits. (Hence EMS's paging, etc.) So I'd be surprised if, in the early days, there was much beyond memory boards for OS/2 and Xenix that used the extra address bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rest of the story relates to the fact that it also became advantageous to run ISA slots for compatibility reasons at 8MHz. Running them faster could and would cause problems for some expansion boards. So, as PC's accelerated past 8MHz and ISA became more of a standard, the industry rather quickly decoupled CPU speed from bus speed. By the time the 486 rolled around, it wasn't uncommon for a CPU to have something like a 32-bit/33MHz connection to main storage and 16-bit/8MHz to I/O. (And maybe some kind of memory slot for adding extra memory.) Okay for CPU bound workloads, but not much else, and particularly video. 1024x768x8bpp is 768K, and that's a lot of data to stream over an ISA slot. Hence the initial push for VLB, and later AGP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What started making higher address bits more useful was the more widespread emergence of 24 and 32-bit addressing in software. Windows 3.0 and Windows 95 did most of the the heavy lifting in the PC world in that regard.&lt;/p&gt;&#xA;" OwnerUserId="4522" LastActivityDate="2019-04-02T14:07:52.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9529" PostTypeId="2" ParentId="9523" CreationDate="2019-04-02T14:13:34.607" Score="10" Body="&lt;p&gt;As Albert Einstein allegedly said &lt;strong&gt;“Everything should be made as simple as possible, but no simpler.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same applies to floppy drive size and many other things. There is a big difference between 8&quot; and 5.25&quot; in both drive size and disk size.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Drive size: 8&quot; drives as part of an integrated system really limits your form factor choices. You can have the drives integrated with the monitor and everything else, like the &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_Model_II&quot; rel=&quot;noreferrer&quot;&gt;TRS-80 Model II&lt;/a&gt; and then it doesn't seem so bad. But if you are making a smaller machine - e.g., &lt;a href=&quot;https://en.wikipedia.org/wiki/NorthStar_Horizon&quot; rel=&quot;noreferrer&quot;&gt;Northstar Horizon&lt;/a&gt;, or a machine where the floppy drives are separate - e.g., Apple II, Atari 800, then 5.25&quot; gives you a lot more options on how/where to place the drives.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Disk size: 8&quot; disks require a large envelope (e.g., 9&quot; x 9&quot; or more typically stick them in a 9&quot; x 12&quot;) to mail, and can only be stored one per page in a typical letter-size looseleaf binder. 5.25&quot; disks can be sent in a smaller envelope and stored 2 per page in a letter-size looseleaf binder. They also work well with smaller software manuals - e.g., ~ 6&quot; x 9&quot;, one per page.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However, jumping &lt;strong&gt;in the 1970s&lt;/strong&gt;, to a smaller size would have resulted in either significantly reduced capacity (as already noted, if using the same track density and other parameters as 8&quot; and initial 5.25&quot; drives) &lt;strong&gt;and/or&lt;/strong&gt; significantly increased costs due to more expensive (at the time) integration of electronic circuitry. So 5.25&quot; gave the desired advantages - space, weight, cost - without going &quot;too far&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When 3.5&quot; did become a real thing, it came with a significant change - the hard plastic case. This brought in a new advantage of durability. At the same time, the technology for the necessary circuitry had advanced by that time enough to provide a higher capacity (720k and up) without a higher cost. This was also the era where the rest of the computer had shrunk enough to start producing laptops, where the size advantage of a 3.5&quot; drive was critical. In the late 1970s and early 1980s, a typical motherboard the size of today's (or even 1990s) laptop motherboards, didn't include floppy drive controller, hard drive controller, video card, etc. So there was no practical reason to make the drives that small.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2019-04-02T14:13:34.607" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9530" PostTypeId="2" ParentId="9523" CreationDate="2019-04-02T14:54:38.290" Score="24" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;[W]hy not make the drives even cheaper by jumping straight to an even smaller form factor such as the 3.5&quot; that was eventually settled on?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because that needed a new technology. The move to 5.25 inch didn't change any technology involved. Everything stayed the same:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Drive design&lt;/li&gt;&#xA;&lt;li&gt;Drive mechanics &lt;/li&gt;&#xA;&lt;li&gt;Electronics (including analogue) &lt;/li&gt;&#xA;&lt;li&gt;Material of floppies&lt;/li&gt;&#xA;&lt;li&gt;Each and every step of Manufacturing of floppies&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The only difference was in size, a linear shrink with a factor of about 1.5 (*1), which means the needed surface and thus size shrunk in half (*2). All without any basic change, just relative minor adaptations. For example to manufacture the floppies only the punch to cut out the magnetic foil with its corresponding holes (same for sleeves) and folding brackets closing a disk sleeve and so on had to be made. So just new tools to be installed on existing machinery. To produce 3.5&quot; ones, new steps, different materials and different handling had to be developed - quite a large investment, especially compared to retooling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a bit like the Tick part of the often cited &lt;a href=&quot;https://en.wikipedia.org/wiki/Tick%E2%80%93tock_model&quot; rel=&quot;noreferrer&quot;&gt;Tick-Tock&lt;/a&gt; strategy Intel follows for CPUs. A shrink of an existing design just in scale, not design or function. The following Tock was then again a step of design changes (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Beside, a 3.5 inch drive in an 8 inch bay would just look ridiculous :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Some comments (&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9523/why-was-the-shrinking-from-8-made-only-to-5-25-and-not-smaller-4-or-less/9530?noredirect=1#comment30755_9530&quot;&gt;for example jcarons&lt;/a&gt;) asked why not going smaller, like 3.5, but keeping technology the same. Beside all the technical reasons regarding recording (like density), it's much about mechanical reliability. For example due thinner materials the medium gets more sensitive to damage - and more so, a smaller hole in the middle reduces reliability for centering while increasing stress on the material (due a reduced lever) at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This isn't anything theoretical, as Mitsumi tried exactly this with their 2.8&quot; variation. Beside having meager capacity of 64 KiB per side, they were extremely unreliable. For Nintendo's Famicom-Disk they created a redesigned version borrowing the centering mechanism (in plastic) as well as a hard case, making it match the setup of a 3.5&quot; drive - sans the slider, keeping the need for sleeves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, no, going way below 5&quot; by keeping the 8&quot; technology wasn't a serious option.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - It's sufficient close to square root of 2 (1.41)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - drive height was kept the same thus half volume. Later developments cut the height as well in half, resulting in 1/4th volume of a slim line 5.25 compared with a full height 8 inch&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - In fact it was a competition of many designs: IBM's 4&quot;, Sony's 3.5&quot;, Matushita's 3&quot;, Mitsumis 2.8&quot;, Sharp's 2.5&quot; and Fujitsu's 2&quot;. Not to mention spiral formats like &lt;a href=&quot;https://en.wikipedia.org/wiki/Video_Floppy&quot; rel=&quot;noreferrer&quot;&gt;Sony/Canon's 2&quot; VideoFloppy&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-04T11:12:41.447" LastActivityDate="2019-04-04T11:12:41.447" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9531" PostTypeId="2" ParentId="9521" CreationDate="2019-04-02T15:38:25.720" Score="0" Body="&lt;p&gt;Pricing doesn't necessarily have anything to do with manufacturing costs. Just look at printers today. You can buy an HP printer for $59 at Walmart, which probably doesn't generate much profit for HP. What makes HP money is the ink you will buy in the years to come.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't actually know the answer, because I'm not sure there is one definitive answer. I can suggest some less obvious reasons why 5 1/4&quot; drives might be cheaper:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;To increase adoption. Force the 8&quot; drive into obsolescence, and there will only be 5 1/4&quot; drives. That takes time, but in the time it takes for it to happen, you have optimized your manufacturing process and your manufacturing costs are a lot lower. You'll profit more at the lower price.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To sell disks. This is the printer and ink model. You can only sell a drive once, but you can sell a lot of disks to put into it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="12208" LastActivityDate="2019-04-02T15:38:25.720" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9532" PostTypeId="2" ParentId="9523" CreationDate="2019-04-02T15:38:27.760" Score="8" Body="&lt;p&gt;The main issue was the limitations of available stepper motors and control hardware for them, and the sensitivity of the read/write head.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to read/write information from the disk the read/write head has to be positioned over the correct area. Then the head itself needs to either sense changes in magnetic flux (read) or alter the magnetic flux (write).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So each track needs to be wide enough that the stepper motor can reliably position the head over it. Unlike a hard drive where it's always the same stepper motor, floppy disks have to work with the motors in many different drives so the tolerances have to be a lot lower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5.25&quot; was as small as the could go while keeping the technology somewhat affordable and reliable at the time. Later Sony improved tracking and better motors were available, so 3.5&quot; disks became commercially viable.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-04-02T15:38:27.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9533" PostTypeId="1" CreationDate="2019-04-02T17:11:37.163" Score="4" ViewCount="357" Body="&lt;p&gt;The later iterations of the series could have hundreds of kilobytes of RAM, but the original Apple II had 4K in the minimum configuration and 48K maximum (the latter using 16kbit chips which were still expensive in 1977).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oregon Trail was one of the best-known games ever released for the machine; it has been said that nearly everyone who darkened the door of an American school during the heyday of the Apple II, played that game at least once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been many subsequent versions of it (as well as previous versions on other platforms), but how much RAM did the first version of Oregon Trail on the Apple II require?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-04-02T18:30:40.390" Title="How much RAM did the first version of Oregon Trail on the Apple II require?" Tags="&lt;history&gt;&lt;apple-ii&gt;&lt;memory&gt;&lt;gaming&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9534" PostTypeId="2" ParentId="9533" CreationDate="2019-04-02T18:19:13.743" Score="1" Body="&lt;p&gt;The Apple II version required 64K:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.mobygames.com/images/covers/l/206724-the-oregon-trail-apple-ii-back-cover.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/puBVe.jpg&quot; alt=&quot;Oregon Trail Apple II back cover&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back cover image from MobyGames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II version came out in 1985 so 64K of RAM wasn't as a big of a requirement as it might sound. There were earlier text only versions of Oregon Trial, but it was this graphical version that most people would've played as students. While &quot;thousands of school children&quot; may have played the earlier text versions, it's this graphical edition that &quot;nearly everyone who darkened the door of an American school during the heyday of the Apple II&quot; played. &lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2019-04-02T18:30:40.390" LastActivityDate="2019-04-02T18:30:40.390" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9535" PostTypeId="1" AcceptedAnswerId="9536" CreationDate="2019-04-02T18:23:30.530" Score="2" ViewCount="191" Body="&lt;p&gt;I've decided to port &lt;em&gt;Chase!&lt;/em&gt; to Swift, apparently because I am insane. In any event, I'm trying to collect the various switches in versions from the era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of these is unique, &lt;a href=&quot;https://archive.org/details/Announcing_Computer_Games_for_Business_School_and_Home_1980_Winthrop_Publishers/page/n53&quot; rel=&quot;nofollow noreferrer&quot;&gt;found here&lt;/a&gt; under the alternative name &lt;em&gt;Escape!&lt;/em&gt; for the TRS-80. This version adds a &quot;tank&quot;, and I'm going cross-eyed trying to figure out it's logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My question is simply &quot;can the tank be destroyed?&quot;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following the code line-by-line is difficult in the print form. I tried to OCR the code using a couple of packages on the 'net, but the results were surprisingly abysmal considering the original quality seems quite good (check the PDF version).&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="6659" LastEditDate="2019-04-02T18:49:06.533" LastActivityDate="2019-04-02T19:24:28.503" Title="Decoding the Workings of the TRS-80 BASIC Game &quot;Escape!&quot;" Tags="&lt;programming&gt;&lt;basic&gt;&lt;trs-80&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9536" PostTypeId="2" ParentId="9535" CreationDate="2019-04-02T19:24:28.503" Score="2" Body="&lt;p&gt;It's just a single page ... of true spaghetti code :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AFAICT the tank (&lt;code&gt;A(x,y)=25&lt;/code&gt; and &lt;code&gt;B(1/2,1)&lt;/code&gt;) elimitnates everything on it's way.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Moves of attackers into him (line 610) eliminate them (line 630).&lt;/li&gt;&#xA;&lt;li&gt;If the player runs into him (line 540) game is lost.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;There are like a dozend or more places where the code can be straightened and some other where it can be simplified a lot - not at least by removing unneccessary jumps, and more so by not using variables for different purpose. It seams as if this program has been ported several times and somehow hacked each time.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-04-02T19:24:28.503" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9537" PostTypeId="1" CreationDate="2019-04-02T21:04:05.883" Score="2" ViewCount="252" Body="&lt;p&gt;I'm finding the &lt;strong&gt;MOD&lt;/strong&gt; operand is not working when I enter it in the BASIC prompt. This is how I write it out.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PRINT 1 * MOD(23)&#xA;&#xA;?SN Error&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have looked into a reference guide and it is too broad on the MOD operand.&#xA;On page 10 in the link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.classiccmp.org/cini/pdf/Tandy/Model%20100%20Quick%20Reference.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;TRS-80 Model 100 Reference&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11944" LastEditorUserId="7208" LastEditDate="2019-09-13T01:52:59.697" LastActivityDate="2019-09-13T17:31:33.797" Title="How to use the MOD operator in TRS-80 model 100 BASIC?" Tags="&lt;basic&gt;&lt;trs-80-model-100&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9538" PostTypeId="2" ParentId="9537" CreationDate="2019-04-02T21:13:19.860" Score="1" Body="&lt;p&gt;For anyone unfamiliar with mathematics the answer is simple.  After trying brute force I found that the format is sometimes confusingly different than pencil and paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here it is.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;print 124 MOD 34&#xA;22&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11944" LastActivityDate="2019-04-02T21:13:19.860" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9539" PostTypeId="2" ParentId="9537" CreationDate="2019-04-02T21:19:14.887" Score="11" Body="&lt;p&gt;&lt;code&gt;MOD&lt;/code&gt; is an operator, not a function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try &lt;code&gt;? 10 mod 9&lt;/code&gt; and see yourself.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-03T11:19:46.780" LastActivityDate="2019-04-03T11:19:46.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9541" PostTypeId="2" ParentId="9482" CreationDate="2019-04-02T21:42:04.123" Score="2" Body="&lt;p&gt;Back with the 8088 I used a MDA which mapped into 4KB of video memory 0B0000h. The address decode did not even resolve it properly so it was copied over 32KB of address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used one of them with my old IBM PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PC AT with the 80286 had new slots. In DOS however the same world as before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You needed a different operating system to use protected mode to recognize 16MB of address space and use the 16-bit slots more effectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 80386 was more DOS address space. Again a different operating system was needed to use the features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had BSD on a 386 and that actually could use all the memory natively. Had to use different commands but it worked OK. DOS was still limited.&lt;/p&gt;&#xA;" OwnerUserId="5263" LastActivityDate="2019-04-02T21:42:04.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9542" PostTypeId="2" ParentId="9523" CreationDate="2019-04-02T22:14:49.953" Score="37" Body="&lt;p&gt;A &lt;a href=&quot;https://web.archive.org/web/20170502140900/http://archive.computerhistory.org/resources/access/text/2013/05/102657925-05-01-acc.pdf&quot; rel=&quot;noreferrer&quot;&gt;2005 interview&lt;/a&gt; with Don Massaro, vice-president of&#xA;engineering and manufacturing, and George Sollman, product manager, both of Shugart Associates, lists the design constraints that resulted in the world's first 5&amp;frac14; inch floppy drive, the Shugart SA 400 minifloppy:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Massaro:&lt;/strong&gt; [Dr. An Wang of Wang Laboratories] said...&quot;I want to come out with a much lower end word processor. It has to be much lower cost and I can't&#xA;  afford to pay you $200 for your 8&quot; floppy, I need a $100 floppy.&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Sollman:&lt;/strong&gt; We looked at all the various tape drives that were out there. We said we had to replace them and that this is the size and we said, &quot;How big can you make the diskette?&quot; It turned out to be 5 1/4.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So they wanted a disk drive that was (1) cheaper than an 8 inch floppy drive, (2) the same size as a tape drive (or they wanted a floppy disk to be the same size as a tape cartridge, the interview is unclear on this point), and (3) within that last constraint, they wanted the diskette to be as big as possible, probably to optimize capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as we know, there was no market for a smaller form factor diskette until later, when&amp;mdash;and possibly because&amp;mdash;magnetic areal density had improved and made a smaller diskette more practical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new 5&amp;frac14; drive debuted as a standalone unit in late 1976, then in the &lt;a href=&quot;http://www.wumpus2000.de/Homecomputer%20neu/Computers/Wang/Wang2200-PCS-II-1.htm&quot; rel=&quot;noreferrer&quot;&gt;Wang 2200 PCS-II minicomputer&lt;/a&gt; (1977), a few years before the IBM PC (1981).&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-04-26T22:33:55.157" LastActivityDate="2019-04-26T22:33:55.157" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9543" PostTypeId="1" CreationDate="2019-04-01T23:48:05.857" Score="26" ViewCount="3189" Body="&lt;p&gt;We nostalgia fans were all treated to a nineties-esque page on the various Stack Exchange sites, complete with guest books, obnoxious tiled backgrounds, Comic Sans, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when I went to view the source code, I was expecting to see tables and frames and the other stuff web developers considered &quot;advanced&quot; at the time, but instead I saw the usual modern inclusion of CSS, JavaScript code, and all the rest. But then I got thinking, maybe it still might have worked to a degree, possibly in the late 1990s anyway, possibly some of the more advanced web developers had moved beyond the old tables and frames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could this page have worked on a browser from the 1990s, assuming a monitor with a good enough resolution, computer with enough memory, etc?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if not, would it have been possible to create this page using whatever HTML code, etc. was available at the time? And if so, would it still work now considering a lot of features may have been deprecated / changed?&lt;/p&gt;&#xA;" OwnerUserId="4266" OwnerDisplayName="colmde" LastEditorUserId="4266" LastEditDate="2019-04-03T07:28:26.033" LastActivityDate="2019-04-03T10:15:14.960" Title="Was the Stack Exchange &quot;Happy April Fools&quot; page fitting with the '90's code?" Tags="&lt;internet&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9544" PostTypeId="2" ParentId="9543" CreationDate="2019-04-02T08:07:56.077" Score="1" Body="&lt;p&gt;&lt;strong&gt;No, not possible.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So my question is, could this page have worked on a browser from the 90s assuming a monitor with a good enough resolution, computer with enough memory, etc?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You're looking at Mosaic, and very early versions of Mozilla and the Internet Exploi... Explorer. Those browsers cannot handle modern CSS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computer technology has changed considerably. What was a huge internal memory back then is not even sufficient to meet the lowest acceptable requirements today. I have an Asus EEE 700 PC (just for fun). That's  a lot more advanced than what you are referring to. That little Asus has now difficulty running smaller versions of Ubuntu on it.&lt;/p&gt;&#xA;" OwnerDisplayName="Jos" LastActivityDate="2019-04-02T08:07:56.077" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9545" PostTypeId="2" ParentId="9543" CreationDate="2019-04-02T04:07:04.320" Score="26" Body="&lt;p&gt;People have actually tried this. &lt;a href=&quot;https://meta.stackexchange.com/questions/326023/does-not-work-on-netscape-navigator-3-0&quot;&gt;The answer is &quot;No&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, you may notice, if you scroll all the way to the bottom, an old-timey &quot;Best viewed in Netscape 3.0&quot; bug. It does not in fact work at all under old installs of Netscape 3.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As near as I can tell, the main hang-up seems to be SSL compatibility, but likely if that issue were solved there would be other HTML/Java/JavaScript issues, as Mr. Burnap posits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously most of us, unlike the poster in the linked question, aren't running on Windows&amp;nbsp;95 with old browsers. So rather than make it work using actual period web code designed for actual period web browsers that few could appreciate, they made it work on &lt;strong&gt;modern&lt;/strong&gt; web browsers, but with a 1990's look-and-feel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As someone who was using web browsers since the &lt;a href=&quot;https://en.wikipedia.org/wiki/Mosaic_(web_browser)&quot; rel=&quot;noreferrer&quot;&gt;NCSA Mosaic&lt;/a&gt; days, they did a pretty impressive job. My only big complaint is the mouse pointer fiddling they did didn't hose the pointer's responsiveness nearly enough. There are other little touches that could be added (e.g.: the &lt;a href=&quot;https://en.wikipedia.org/wiki/Blink_element&quot; rel=&quot;noreferrer&quot;&gt;blink tag&lt;/a&gt;), but it really does look amazingly like the real deal.&amp;nbsp;&lt;/p&gt;&#xA;" OwnerUserId="4345" OwnerDisplayName="T.E.D." LastActivityDate="2019-04-02T14:09:31.407" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9546" PostTypeId="2" ParentId="9543" CreationDate="2019-04-01T23:58:55.717" Score="9" Body="&lt;p&gt;No.  The glitter falling off of the mouse was not possible in 90s era HTML.&lt;/p&gt;&#xA;" OwnerUserId="19921" OwnerDisplayName="Steven Burnap" LastActivityDate="2019-04-01T23:58:55.717" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9547" PostTypeId="2" ParentId="9543" CreationDate="2019-04-02T22:50:35.510" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But then I got thinking, maybe it still might have worked to a degree, possibly in the late 1990s anyway, possibly some of the more advanced web developers had moved beyond the old tables and frames.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not with the tools used. Keep in mind, there was no CSS back then.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Could this page have worked on a browser from the 1990s, assuming a monitor with a good enough resolution, computer with enough memory, etc?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simply no. No (standardized) CSS, no standardized way of interaction with the backend (beyond refresh/post) and so on.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And if not, would it have been possible to create this page using whatever HTML code, etc. was available at the time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, I belive it could be made - of course it requires essentially a whole recoding. Layout wise next to all parts could have been made look like it, ofc, including the star spread and comic sans fonts (at least on some OS/browser combinations).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now getting all interaction to work might be way more of a problem. It can be solved and might even be fun - more so as the backend had to be reworked as well.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And if so, would it still work now considering a lot of features may have been deprecated / changed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While many features are official deprecated, browsers still support quite a lot. So far, I didn't notice any optical feature of the 'new' design that couldn't be easy done with a late 90s browser. The biggest hurdle might be the notification system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yeah, if I get drowned in tons of money (or migrate to some beautiful remote island - all inklusive), it would be a nice task to waste time :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-03T09:33:03.953" LastActivityDate="2019-04-03T09:33:03.953" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9549" PostTypeId="2" ParentId="9523" CreationDate="2019-04-03T07:06:09.153" Score="5" Body="&lt;p&gt;Because the Hungarian state system at the time were unable to capitalize on the BRG MCD-1. That's it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Marcell Jánosi patented the 3&quot; &quot;micro casette disk&quot; in 1974, if the Hungarian bureaucracy wouldn't been in the way, there wouldn't have been any 5.25&quot; disk as there was no need. Although the first working prototype was only made in 1979 that was because the factory director thought this didn't fit the COMECON plans. My grandfather, who worked there in the seventies claimed Járosi was close and the factory was ready by 1975 (he gave the date as my birth and I was born in 1975) to manufacture it. (He alas passed away in 1985, the year I learned BASIC on a ZX Spectrum my parents smuggled into the country and I saw some Commodore 64 machines using floppies and that's when he told me how Hungary had a better floppy ready a decade ago.)&lt;/p&gt;&#xA;" OwnerUserId="3722" LastEditorUserId="4921" LastEditDate="2019-04-03T13:54:24.473" LastActivityDate="2019-04-03T13:54:24.473" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9550" PostTypeId="2" ParentId="5086" CreationDate="2019-04-03T09:05:29.533" Score="7" Body="&lt;p&gt;CompuServe was initially a Time-sharing system utilizing original DEC PDP-10 machines. You would log in as a regular system user and run your programs. The credentials of these systems consisted of two octal numbers, the Project Number (1-377777, 1–10 reserved — akin to groups in Unix systems as I understand it) and the Programmer Number (1-777777, 1–7 reserved  —  the username). These numbers were combined with a comma (and enclosed with square brackets) when provided to system commands like &lt;code&gt;LOGIN&lt;/code&gt;. When CompuServe later turned into the online service as we know it, the basic infrastructure was kept and that’s how the User-IDs came to be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can read up on the details in the &lt;a href=&quot;http://www.textfiles.com/bitsavers/pdf/dec/pdp10/TOPS10/AA-0916C-TB_DEC10_Operating_Systems_Command_Manual_Ver_6_03_Aug77.pdf&quot; rel=&quot;noreferrer&quot;&gt;DEC system-10 Operating System Commands Manual&lt;/a&gt;, specifically section 1.4.2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I initially just wanted to add a few details to hobbs' answer, but I'm not allowed to comment yet. So here's my full answer with all the context.)&lt;/p&gt;&#xA;" OwnerUserId="12216" LastActivityDate="2019-04-03T09:05:29.533" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9551" PostTypeId="2" ParentId="9461" CreationDate="2019-04-03T09:06:41.333" Score="6" Body="&lt;p&gt;In the early 1980s, &lt;a href=&quot;https://en.wikipedia.org/wiki/Torch_Computers&quot; rel=&quot;noreferrer&quot;&gt;Torch&lt;/a&gt; Unix was &lt;a href=&quot;https://acorn.huininga.nl/pub/disks/originals/Torch/Unicorn%2068000%20co-processor/&quot; rel=&quot;noreferrer&quot;&gt;available&lt;/a&gt; for the BBC Micro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The catch was that you had to have the Torch 68000 second processor and hard drive.  This meant that it fell between two stools.  It was far too expensive for use by the usual BBC Micro hobbyists and office/professional users found it too unusual to compete with more mainstream offerings from other manufacturers.  So it soon died out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did use this at work for a short time.  I remember it had to be installed onto the hard drive from 50 5.25&quot; floppies, this took me pretty much an entire working day.&lt;/p&gt;&#xA;" OwnerUserId="12215" LastActivityDate="2019-04-03T09:06:41.333" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9552" PostTypeId="1" CreationDate="2019-04-03T09:32:16.200" Score="2" ViewCount="125" Body="&lt;p&gt;I'm trying to get a feel for the scale and dynamics of the early home computer game industry. Statistics for arcade games and console cartridges are relatively easy to come by, e.g. that Pac-Man on the Atari 2600 sold over seven million units (short of forecast but still a very large number, which management took as at least partial validation of their strategy, not realizing that part of the goodwill of the Atari brand had been sold with those cartridges), but I have thus far been able to find nothing whatsoever on the corresponding statistics for home computer game cartridges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to take a highly representative example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TI-99/4A was perhaps the most cartridge-dependent of all home computers; not only was it sold in the peak years of computer game cartridges, but once they got into a price war with the Vic-20 (which was cheaper to manufacture), TI positively depended on cartridge revenue to make the whole thing commercially viable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TI Invaders has been called the best of all home computer versions of the most iconic of the classic arcade games; according to &lt;a href=&quot;https://www.ranker.com/review/ti-invaders/34083632?ref=wiki_312762&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ranker.com/review/ti-invaders/34083632?ref=wiki_312762&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It was the top-selling computer game for the TI-99/4A through at least 1982. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Is there any way to find out or even estimate to within an order of magnitude, how many units TI Invaders sold?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-04-03T09:32:16.200" Title="How many units did TI Invaders sell?" Tags="&lt;history&gt;&lt;game-cartridge&gt;&lt;market&gt;&lt;ti-99&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9553" PostTypeId="1" AcceptedAnswerId="9563" CreationDate="2019-04-03T09:36:06.053" Score="6" ViewCount="774" Body="&lt;p&gt;One of my favorite PCs in old times were HP Jornada handheld pcs (680, 720) - perfect match of usable hardware keyboard, large-enough screen, protected by keyboard when closed, and usable OS designed for doing tasks and not only multimedia/calls/browsing. All this perfectness was in case, small enough to fit inside pocket (ok, rather big pocket) and was able to work 4-5 hours (psions much longer and from generic AA batteries)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This market was rather large - HP, LG, Psion, Philips and many more, but somewhere near y2k they all just ... gone. Yep there were some efforts from Nokia with E90 but it was &quot;even not as good as 9500&quot; with s60 Symbian designed for different tasks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that some part of this market moved to qwerty phones, which actually disappeared couple years later. Some part moved to tablets and &quot;business-oriented&quot; phones. Sony made some attempts with it's sub-notebook series but they were too slow with first generations of inlet atom cpus (really, i was surprised that windows 7 took about 5 minutes to start on fresh pc). All modern stores are full of different types of ultrabooks, they all are thin but they all can't fit in a pocket because of large screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays it is so easy to adapt a power-efficient cpu like ARM A53 or something from entry x86 Intels into a HPC-size form-factor with good old proven qwerty keyboard - so why is nobody making one? I mean not entertainment device, but a &quot;smaller than sub-notebook&quot; workhorse&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Image from wiki of 720 model:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/1Oxbh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1Oxbh.jpg&quot; alt=&quot;Image from wiki&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="12202" LastEditorUserId="12202" LastEditDate="2019-04-03T11:25:39.133" LastActivityDate="2019-04-03T12:20:39.043" Title="Why don't manufacturers make handheld computers like the Jornada 720 any more?" Tags="&lt;hp&gt;&lt;case&gt;&lt;handheld&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ClosedDate="2019-04-03T13:54:48.680" ContentLicense="CC BY-SA 4.0" />
  <row Id="9554" PostTypeId="1" CreationDate="2019-04-03T09:40:55.003" Score="8" ViewCount="670" Body="&lt;p&gt;The Amiga Walker was a prototype Amiga computer that never made it to market. &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_Walker&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia has some info&lt;/a&gt; including a photo of a motherboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How advanced was the prototype? Could it boot and run Amiga software, for example? Are the custom chips existing versions from older Amigas, or new revisions that would necessarily be engineering samples? Were any parts missing or non-functional?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm asking how close it is to being a completed product that could have been put into production, or even manufactured today were the CAD files made available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some additional information found &lt;a href=&quot;http://obligement.free.fr/articles/walker.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, note that the prototype apparently had performance below that of a basic A1200 due to some issues with it.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="11916" LastEditDate="2019-11-20T23:11:31.573" LastActivityDate="2019-11-20T23:11:31.573" Title="How advanced was the Amiga Walker prototype?" Tags="&lt;amiga&gt;&lt;commodore&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9555" PostTypeId="2" ParentId="9554" CreationDate="2019-04-03T09:58:13.330" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How advanced was the prototype?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;At that time, Intel was already selling Pentium 166 (not MMX; MMX models appeared one year later), so ... not very advanced in terms of performance with its Motorola 68030.&lt;/p&gt;&#xA;&lt;p&gt;If you mean completeness of this prototype, here is &lt;a href=&quot;http://www.blachford.info/computer/walker/walker.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;a review&lt;/a&gt; that says that:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3&gt;Does it work?&lt;/h3&gt;&#xA;&lt;p&gt;Sort of. When powered up it seems to go into a boot&#xA;cycle which it cannot complete and either stops or just keeps&#xA;rebooting. It can be made to get beyond this stage complete with a&#xA;partial Workbench load, but it halts on the error &amp;quot;Not a DOS disk in&#xA;SDH0&amp;quot;. Eventually, with patience, it can eventually be made to boot.&lt;/p&gt;&#xA;&lt;p&gt;This Walker was seen working in late 2002 at the Aachen Amiga show&#xA;after the &amp;quot;Coyte Flux&amp;quot; brothers managed to get it to work.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So yep, it was able to work; not as well as you'd hope when buying a new PC in the store, but able :-)&lt;/p&gt;&#xA;&lt;p&gt;One more link with &lt;a href=&quot;http://www.blachford.info/computer/walker/walker_working.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;screenshots&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="12202" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-04-09T11:01:27.117" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9556" PostTypeId="2" ParentId="9554" CreationDate="2019-04-03T10:10:21.197" Score="3" Body="&lt;p&gt;You may just want to read the Wiki article you linked, as right &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_Walker#cite_note-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;the very first reference&lt;/a&gt; (*1) it links to &lt;a href=&quot;http://www.blachford.info/computer/walker/walker.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nicholas Blachford's page&lt;/a&gt; about his Walker prototype (the vacuumer), including information about it working including this screen shot (taken from that page):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NVGJT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NVGJT.jpg&quot; alt=&quot;Amiga Walker Workbench&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Site also includes two more pages (&lt;a href=&quot;http://www.blachford.info/computer/walker/walker_working.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Walker Working&lt;/a&gt; and &lt;a href=&quot;http://www.blachford.info/computer/walker/walker_working_more.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Walker Working More&lt;/a&gt;) with images of running application and a description that it boots fine any classic system from Floppy.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Don't miss to ckeck the other references - that's why they are included anyway.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-04-03T10:10:21.197" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9558" PostTypeId="2" ParentId="9553" CreationDate="2019-04-03T10:52:04.927" Score="2" Body="&lt;p&gt;On the issue of qwerty keyboards on handhelds, I sympathise with you entirely (as the owner of a Nokia N900 and a Blackberry KeyOne).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at a modern smartphone as the nearest equivalent of a handheld PC, a physical keyboard competes with the screen for space on the front of the device. If one generalises that most people consume more media on their smartphone than they create (and specifically create with a keyboard), then perhaps a larger screen is perceived as being more useful. A larger screen is certainly one of the selling points marketed by phone manufacturers in the last decade. The associated trend towards thinner and lighter devices also biases against having a clamshell device like the Jornada 720: it will be thinker, and look bulky compared to candy-bar or slate-shaped devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the heyday of HPCs, they were comparatively expensive, and marketed mainly at professional and technical people. It's a similar market to the one BlackBerry aims for; note that they're the main manufacturer of smartphones with physical keyboards. But a physical keyboard doesn't appear to be a key selling point for the (much broader) smartphone market as a whole.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There may be some light on the horizon: the advent of foldable displays like Samsung's Galaxy Fold may make manufacturers look again at the clamshell format. Perhaps a manufacturer may think it worth their time to put a large, foldable screen on one side, and put a smaller screen and a keyboard on the other side. Who knows?&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-04-03T10:52:04.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9559" PostTypeId="1" AcceptedAnswerId="9561" CreationDate="2019-04-03T10:57:10.737" Score="9" ViewCount="1582" Body="&lt;p&gt;I remember back then, there were few people that used to drill an extra hole on them to double their capacity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Surprisingly, it worked!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the other way around is plausible I am quite unsure of the reliability of such transformation in the long term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1440Kb floppies were probably more expensive not only because they had an extra hole, rather, a different material was used like in CrO2 or Metal tapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this reasoning correct? &lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2019-04-04T23:37:29.067" LastActivityDate="2019-04-23T14:08:54.303" Title="Drilling 720Kb floppies to 'upgrade' them to 1440Kb?" Tags="&lt;floppy-disk&gt;" AnswerCount="5" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9560" PostTypeId="2" ParentId="9559" CreationDate="2019-04-03T11:15:48.867" Score="3" Body="&lt;p&gt;My memory is that the HD floppies were made to a higher spec, so you could get away with formatting a lower density to HD, but at an increased risk of errors over time.&#xA;However, Wikipedia disagrees with me:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The holes on the right side of a ​3 1⁄2‑inch disk can be altered as to make some disk drives and operating systems treat the disk as one of higher or lower density, for bidirectional compatibility or economical reasons. Some computers, such as the PS/2 and Acorn Archimedes, ignored these holes altogether.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2019-04-03T11:15:48.867" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9561" PostTypeId="2" ParentId="9559" CreationDate="2019-04-03T11:39:29.740" Score="12" Body="&lt;p&gt;Standard and double density disks used an iron oxide coating. High density floppies used a cobalt coating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The benefit of the cobalt coating was that bits could be placed closer together, allowing for more bits per track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some confusion arose because the only difference between standard and double density disks is that SD uses FM coding, and DD uses MFM coding. MFM allows bits to be packed closer together without changing the magnetic properties of the disk, so it was possible to use disks designed for standard density without any problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since HD uses a different coating to get higher bit density a DD disk may work but would not be considered reliable. In particular it may have issues with certain drives, or not be readable when used in a different drive to the one it was written on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Disk_density&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Disk_density&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-04-03T11:39:29.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9562" PostTypeId="1" AcceptedAnswerId="9564" CreationDate="2019-04-03T11:50:46.060" Score="8" ViewCount="828" Body="&lt;p&gt;Inspired by &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9481/which-amiga-systems-did-access-ram-with-fast-page-access/9486#9486&quot;&gt;this question&lt;/a&gt;, I'm curious what burst mode was on the 68030 and why wasn't it supported on the A2630 accelerator card commonly found in the Amiga 2500/30? I had one of these machines and always enabled burst mode and was under the impression it did something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For what its worth, my A2500 rig had 4vMiB of RAM on the A2630 card and another 3vMiB between the motherboard and expansion on the A2091; I would presume that the mode didn't affect that slower RAM, but I would have thought it made a difference on the accelerator card itself.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="6659" LastEditDate="2019-04-03T22:38:25.587" LastActivityDate="2019-04-04T15:32:45.093" Title="What was Burst Mode on the 68030 and why didn't the A2630 support it?" Tags="&lt;amiga&gt;&lt;motorola-68000&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9563" PostTypeId="2" ParentId="9553" CreationDate="2019-04-03T12:20:39.043" Score="3" Body="&lt;p&gt;This answer is not quite about retrocomputing, but anyway...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are making them, though it is a bit of a niche market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the newer ones (designed by the &lt;a href=&quot;https://www.linkedin.com/in/martin-riddiford-3b25881/&quot; rel=&quot;nofollow noreferrer&quot;&gt;original Psion designer&lt;/a&gt;!) is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Gemini_(PDA)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gemini PDA&lt;/a&gt;, running Android (and some rudimentary Linux support), trying to spiritually continue the Psion experience (at least from their PR standpoint), and the new offspring Cosmo Communicator, enhancing the &quot;mobile phone&quot; aspect (since the Gemini falls into the dark spot, it is too limited as a subnotebook and too bulky and clumsy as a mobile phone).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there are conceptually miniaturized notebooks by GPD, such as GPD Win (mostly for gaming), universal GPD Pocket, or upcoming GPD MicroPC, or the two-in-one almost-clone One Mix Yoga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then there are devices following the Alphasmart tradition, such as &lt;a href=&quot;https://traveler.getfreewrite.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Freewrite Traveller&lt;/a&gt; (bulky; conceptually a smart typewriter, not a computer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that while subnotebooks were rare in Europe (and USA) and almost disappeared, in Japan they were quite successful and more widespread.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2019-04-03T12:20:39.043" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9564" PostTypeId="2" ParentId="9562" CreationDate="2019-04-03T12:44:31.493" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm curious what burst mode was on the 68030 and&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's an extension to the 68020 bus protocol offered by the 68030. By default, all read access on a 68k takes two cycles. Cache Burst uses the same two-cycle synchronous access for the first word but reduces any of the three subsequent accesses to a single cycle, thus reducing the time for a cache line of 4 words to be loaded from 8 clocks down to 5 (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Works in detail:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;First of all, the bus must operate in synchronous mode, that is &lt;code&gt;DSACK0/1&lt;/code&gt; is always set high from the memory control and access is always 32 Bit.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next, when the CPU is filling the cache and a burst would be possible, it signals that by asserting &lt;code&gt;CBREQ&lt;/code&gt; (&lt;strong&gt;C&lt;/strong&gt;ache &lt;strong&gt;B&lt;/strong&gt;urst &lt;strong&gt;REQ&lt;/strong&gt;uest) at the beginning of the first cycle.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The memory control has to signal its ability (and acceptance) by pulling &lt;code&gt;CBACK&lt;/code&gt; (&lt;strong&gt;C&lt;/strong&gt;ache &lt;strong&gt;B&lt;/strong&gt;urst &lt;strong&gt;ACK&lt;/strong&gt;nowledge) before the falling edge of the second cycle of the first word accessed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the CPU sees &lt;code&gt;CBACK&lt;/code&gt; in time, all subsequent access to fill the cache line will be done in single cycles.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To tell so, &lt;code&gt;AS&lt;/code&gt; and &lt;code&gt;DS&lt;/code&gt; stay asserted until the last word read.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The end of an burst cycle is signalled at the end of memory access by removing &lt;code&gt;AS&lt;/code&gt; (and of course &lt;code&gt;CBREQ&lt;/code&gt;as well).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;why wasn't it [burst access] supported on the A2630 accelerator card commonly found in the Amiga 2500/30?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Quite simply because the Amiga 2500 was (more or less) a rebadged A2000 (68000-based) with a coprocessor card. Thus its memory interface was 16-bit, not 32-bit as required for burst mode.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For what it's worth, my A2500 rig had 4MB of RAM on the A2630 card [...] I would have thought it made a difference on the accelerator card itself.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't remember; I'd need to have a look at the schematics to give a definite answer here. I wouldn't be much surprised  if they took the A2620 68020-based design, clipped out the MMU (68851), reduced the chip count, but left the basic workings the same - meaning no support of the bus protocol extension for burst. It was up to the never-released A2631 with its new bus controller to make an upgraded A2000 really work like an A3000.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - so even if all access were linear (and cached), savings could only reach 3/8th or 38.5%. In reality, with all data access mixed in and jumps out of cache before a line is exhausted and so on, a real speed up of 1-3% can be achieved - keep in mind, this is &lt;em&gt;in addition&lt;/em&gt; to the speed up due to the cache itself.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-04-04T15:32:45.093" LastActivityDate="2019-04-04T15:32:45.093" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9565" PostTypeId="2" ParentId="9500" CreationDate="2019-04-03T17:02:48.870" Score="1" Body="&lt;p&gt;I am not sure i understand your question right, but if i did then &quot;word&quot; is commonly used not as data-type (like &quot;integer&quot;) but as whole hardware register, so 8 bit CPU has 8-bit machine word.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fixed-point operations, common practice is to store &quot;before point&quot; value in one register, and &quot;after point&quot; value in another register. So, from CPU's point of view they both are words.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the main difference between word and integer? word is only a set of bites, it does not represent any digital value, because one and the same word can be represented as different digital values - for example 11111111 word can be -128 Integer or 256 &quot;Unsigned&quot;, depending on how you interpretent first bit. Two words can be Double (Integer before point and Integer or Unsigned after point), Long (for 8-bit cpu 16-bit int) and so on, depending on how you use their values in your calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose that &quot;word&quot;, in your case, was used to describe the way to access a part of data in memory, meaning that it can not or must not be a whole number, whose other part can be located in different word.&lt;/p&gt;&#xA;" OwnerUserId="12202" LastActivityDate="2019-04-03T17:02:48.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9566" PostTypeId="1" AcceptedAnswerId="9567" CreationDate="2019-04-03T18:16:44.330" Score="4" ViewCount="193" Body="&lt;p&gt;The S-100 bus had 8 data lines, logically enough since it was originally used with the 8080 and then Z80 CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it actually had two sets of 8 data lines. The reason why is discussed in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7775/why-were-the-data-lines-of-the-original-s-100-bus-unidirectional&quot;&gt;Why were the data lines of the original S-100 bus unidirectional?&lt;/a&gt; and if I understand the answer correctly, the second set of data lines serves to allow the front panel to operate the system without disturbing the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, when an updated version of the S-100 bus was used with 16-bit CPUs such as the 286, the two sets of data lines were amalgamated to a single 16-bit set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That seems logical enough by sheer arithmetic, but how did it not break compatibility? Intuitively, it seems like existing 8-bit cards shouldn't be able to handle 16 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there some aspect of the design that made it possible for a 286 to still read/write 8 bits at a time to a card designed to work with 8-bit machines? To take the simplest example, suppose you plugged a 16K 8-bit memory card into a 16-bit machine. Could you still read/write bytes to each of the 16384 consecutive memory locations? What would happen if you tried writing 16-bit words? Would the upper half of each word simply be discarded? Would an attempt to read a 16-bit word get results with the upper half zero?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2019-04-03T20:32:15.797" LastActivityDate="2019-04-03T20:32:15.797" Title="How was the 8 to 16 bit transition of data lines managed for S-100" Tags="&lt;s-100&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9567" PostTypeId="2" ParentId="9566" CreationDate="2019-04-03T19:38:37.843" Score="6" Body="&lt;p&gt;&lt;em&gt;[Preface: It might be more appropriate to read the S100 standard documents instead]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The S-100 bus had 8 data lines, logically enough since it was originally used with the 8080 and then Z80 CPUs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes ... err no. The original Altair-bus was made only for the 8080 (and the Altair), while S100 is the later standardization removing some unclear points and fixing all workings.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;However, it actually had two sets of 8 data lines. [...] if I understand the answer correctly, the second set of data lines serves to allow the front panel to operate the system without disturbing the CPU.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes .. err no ... again :)) It was made that way not only that some (simple) front panel can handle the system without the CPU (essentially doing DMA), but more important to also 'emulate' reaction of device toward the CPU. So effectively one could operate a stand alone CPU without anything else (which the original Altair CPU was).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Later, when an updated version of the S-100 bus was used with 16-bit CPUs such as the 286, the two sets of data lines were amalgamated to a single 16-bit set.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes .. no ... in many way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To start with, already the 8086 was a 16 bit CPU. But more important, the 16 bit extension was already part of the very first IEEE standard proposal for the S100 bus, published in 1978 and accepted with the 1979 standard (IEEE 969.1/D2) (*1). Seattle Computer Products, as one of the first (if not first) commercial provider of a S100 based 8086 card, the SCP-200B, did just followed the specs layed out in both documents.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;That seems logical enough by sheer arithmetic, but how did it not break compatibility? Intuitively, it seems like existing 8-bit cards shouldn't be able to handle 16 bits.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simply by being backward compatible due making each bus cycle start compatible with 8 bit definition and continuing that way if the target can't cope with a 16 bit access. In 8 bit mode it's two unidirectional sets of 8 bit, in 16 bit mode it's a 16 bit bidirectional data bus. Sequence in detail (from memory):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;pSYNC&lt;/code&gt;/&lt;code&gt;sSTVAL&lt;/code&gt; initiates a bus cycle with stable status/address signals.&lt;/li&gt;&#xA;&lt;li&gt;In addition &lt;code&gt;sXTRQ&lt;/code&gt; (Status eXTendedReQuest) is set when a 16 Bit access is intended&lt;/li&gt;&#xA;&lt;li&gt;If able to do 16 bit transfer for this address, the addressed card pulls &lt;code&gt;SIXTN&lt;/code&gt; (SIXTeeN bit)&lt;/li&gt;&#xA;&lt;li&gt;If not pulled in time, &lt;code&gt;sXTRQ&lt;/code&gt; is released and a (*2) regular 8 bit cycle is performed.&lt;/li&gt;&#xA;&lt;li&gt;If pulled in time, &lt;code&gt;sXTRQ&lt;/code&gt; stays for the whole 16 bit cycle following.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Done. Since basic signaling and addressing is not changed, any 8 bit card will work right away - with the CPU carrying the burden to turn a 16 bit access into two 8 bit ones (*3).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was there some aspect of the design that made it possible for a 286 to still read/write 8 bits at a time to a card designed to work with 8-bit machines?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The CPU card has to do this - using 16 bit was optional anyway, no matter what CPU.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To take the simplest example, suppose you plugged a 16K 8-bit memory card into a 16-bit machine. Could you still read/write bytes to each of the 16384 consecutive memory locations?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure, as it's the default way&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What would happen if you tried writing 16-bit words?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The glue logic on the CPU card will have to split it in two consecutive 8 bit cycles.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Would an attempt to read a 16-bit word get results with the upper half zero?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Depending on the CPU card glue logic there might be special cases (*4), but in general, it would issue two 8 bit reads before presenting the 16 bit result to the CPU.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So far above detailed description is about what the standard says. A real world CPU card (more exact its glue logic) had to do a bit more to make it work than detecting 16 bit and splitting access. SCP added a few configurations/ extra steps to their SCP-200B 8086 card:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Since some systems used prior unassigned lines for private usage, therefore the new signals (&lt;code&gt;sXTRQ&lt;/code&gt;/&lt;code&gt;SIXTN&lt;/code&gt;), could be cut and tied, effectively turning all cycles into compatible 8 bit cycles.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Basically a 8 bit cards just decoded the lower 16 address lines. The CPU thus assigned the &lt;code&gt;PHANTOM&lt;/code&gt; line whenever an address above 64 Ki was assigned, effectively mapping all old cards to the first 64 KiB (5)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The 8086 only supported a 20 bit address. To make it compatible with full 24 bit addressing the top 4 address bits where always set to zero.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Traditionally (aka on the Altair bus) an I/O address was only 8 bit but presented on both address bytes. A considerable number of cards used this to simplify layout and used either half - or worse, a mixture. To support this the SCP-200B could be jumpered to copy the lower 8 address bits as well into the upper (now mid) 8 address bits&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Not all of these twists are realy cool, but quite helpful for users upgrading an existing S100 system - at least during a transition period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside the standard conform ways, SCP also added some non standard interpretation, for example to select memory speed and alike.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Beside extending the data bus to 16 bit, the address bus was also widened to 24 lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Well, usually two 8 bit cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Not much different from what IBM made when tuning the PC bus for use with the AT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - I/O might be one of these cases, as it's addressing was quite screwed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Cards with 24 bit addressing ignored that signal (by default). Ofc, they still needed to be configured to higer addresses to work.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-03T20:14:59.033" LastActivityDate="2019-04-03T20:14:59.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9568" PostTypeId="1" CreationDate="2019-04-04T09:54:38.947" Score="9" ViewCount="415" Body="&lt;p&gt;The short: How can I tell which flyback transformers would work for a 9&quot; Macintosh?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The long: I've soldered on flyback transformers on old Macs that have gone bad in the past, but when my Mac Plus let out its magic smoke recently, I discovered that it's no longer cheap and easy to just get an old 157-0026-C flyback transformer from a dead Mac SE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can see that there are a lot of cheap flyback transformers available online, many of which specify things like &lt;em&gt;&quot;For nine inch black and white tube&quot;&lt;/em&gt;, are the right voltage and frequency, and have the right number of pins. But I have no idea what sort of things to even ask to find out if they are compatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody have experience with trying out non-standard flyback transformers? Failing that, any suggestions for where I can get an official one for cheap?&lt;/p&gt;&#xA;" OwnerUserId="7934" LastEditorUserId="7934" LastEditDate="2019-04-04T10:05:52.597" LastActivityDate="2019-05-04T17:02:10.717" Title="Mac Plus flyback transformer replacements" Tags="&lt;apple-macintosh&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9569" PostTypeId="1" AcceptedAnswerId="9574" CreationDate="2019-04-04T13:26:55.390" Score="10" ViewCount="3614" Body="&lt;p&gt;There was a time when floppy disk drives were big, expensive devices that in many cases, instead of being components of a computer, would be separate machines connected by a cable, in some cases with their own CPU. A well-known example was the Commodore 1541, which had a similar CPU to the Commodore 64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally only ever had one external drive, but when you look at photographs of setups with two drives (very desirable if you could afford it), they are always side-by-side, taking up an awful lot of desk space. Even the CBM 4040 dual drive, places the drives side-by-side in a single very wide case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me that since disk drives are fundamentally horizontal devices that want to be wide rather than tall, the obvious solution would be to stack them vertically. Maybe this would result in each drive picking up heat and vibration from the other one, but if this was tolerable when they were stacked vertically in a PC tower case, why not for external drives?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were external disk drives ever stacked vertically? If not, why not?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-04-30T11:14:54.120" Title="Were any external disk drives stacked vertically?" Tags="&lt;hardware&gt;&lt;floppy-disk&gt;&lt;disk-drive&gt;" AnswerCount="9" CommentCount="15" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9570" PostTypeId="2" ParentId="9569" CreationDate="2019-04-04T13:51:25.880" Score="8" Body="&lt;ol&gt;&#xA;&lt;li&gt;I don't think your claim that never happened is generally true&lt;/li&gt;&#xA;&lt;li&gt;It makes a lot of sense to put drives side by side when you want to place the drive set between computer and CRT (like many Apple users did). That wouldn't work well with stacks.&lt;/li&gt;&#xA;&lt;li&gt;Especially &lt;a href=&quot;https://bboah-hardware.de/cgi-bin/showhardware.cgi?HARDID=783&quot; rel=&quot;noreferrer&quot;&gt;twin 3 1/2&quot; drives&lt;/a&gt; were very often sold as vertical &lt;a href=&quot;https://www.google.com/imgres?imgurl=https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FDgrw6sLV4AA7Ik3.jpg&amp;amp;imgrefurl=https%3A%2F%2Ftwitter.com%2Ffoone%2Fstatus%2F1011886120483737601&amp;amp;docid=Q5q-lnLhtpE4fM&amp;amp;tbnid=8mSE4KPdokp2EM%3A&amp;amp;vet=12ahUKEwiNuozHxrbhAhVKblAKHSLQCmU4ZBAzKFQwVHoECAEQVQ..i&amp;amp;w=1200&amp;amp;h=900&amp;amp;itg=1&amp;amp;client=firefox-b-d&amp;amp;bih=941&amp;amp;biw=1564&amp;amp;q=floppy%20disk%20dual%20&amp;amp;ved=2ahUKEwiNuozHxrbhAhVKblAKHSLQCmU4ZBAzKFQwVHoECAEQVQ&amp;amp;iact=mrc&amp;amp;uact=8&quot; rel=&quot;noreferrer&quot;&gt;stacks&lt;/a&gt;. But some vendors also did the same with the &lt;a href=&quot;https://martinjonestechnology.files.wordpress.com/2014/04/img_6556.jpg&quot; rel=&quot;noreferrer&quot;&gt;larger drive sets&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;If you look at earlier drives, 2 x 5 1/4 full-height drives stacked on top of the other really would be awkward to handle (but, see &lt;a href=&quot;https://www.ebay.com/itm/ULTRA-RARE-Atari-815-Dual-Disk-Drive-prototype-/172515706186?hash=item282abcc54a%3Ag%3ASJkAAOSw-0xYlkWn&amp;amp;nma=true&amp;amp;si=ilBj1a0DvoIrqUTdXXODu6D7IxM%253D&amp;amp;orig_cvip=true&amp;amp;nordt=true&amp;amp;rt=nc&amp;amp;_trksid=p2047675.l2557&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;) - that simply looks clunky.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Other than that, I don't see a technical reason why you wouldn't want to stack drives on top of the others. The frames of 5 1/4 drives are mostly aluminium castings, so stable enough to stack, and heat really shouldn't be a problem with floppy drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/CBM-Diskettenlaufwerke#/media/File:Cbm-laufwerke2.jpg&quot; rel=&quot;noreferrer&quot;&gt;German Wikipedia &lt;/a&gt; seems to know how to stack Commodore 4040 drives as well. You simply need to have enough of them ;)&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-04-04T14:23:13.147" LastActivityDate="2019-04-04T14:23:13.147" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9571" PostTypeId="2" ParentId="9569" CreationDate="2019-04-04T15:31:30.063" Score="17" Body="&lt;p&gt;Yes; this was standard procedure for at least the BBC Micro:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dODBe.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dODBe.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Including for third-party drives:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sWqVl.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sWqVl.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Presumably because two drives arranged that way were only just taller than the machine itself:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qpXT8.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qpXT8.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-04-04T15:31:30.063" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9572" PostTypeId="2" ParentId="9569" CreationDate="2019-04-04T15:43:15.723" Score="6" Body="&lt;p&gt;In the TRS-80 Model I and Model II ecosystems, floppy drives normally had the &lt;em&gt;disk&lt;/em&gt; oriented vertically. This made the drives &amp;quot;tall rather than wide&amp;quot;, and placing multiple drives side-by-side worked well.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ynwRw.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ynwRw.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the Model III, two horizontal drives were stacked vertically in the main housing, to the right of the CRT (and above the numeric keypad).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Mz9Hh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Mz9Hh.jpg&quot; alt=&quot;Model III&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;https://www.nightfallcrew.com/wp-content/gallery/radio-shack-trs-80-model-iii-microcomputer/IMG_0890.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;nightfallcrew.com&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="495" LastEditorUserId="3748" LastEditDate="2021-01-05T16:36:23.390" LastActivityDate="2021-01-05T16:36:23.390" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9573" PostTypeId="2" ParentId="9568" CreationDate="2019-04-04T16:20:45.687" Score="1" Body="&lt;p&gt;For starters, it would be helpful to know the wiring of the transformer. Haven't done it yet, though. But it should be not too hard do deduct pins for deflection coil (probably ground-symmetric), +12V and hot-end for the switching transistor and maybe a few more which I don't know yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the coils in the new transformer have the same wiring, chances are that it will work pretty well, because frequency seems to match as you state. I would test it out. Worst thing that could happen is to blow up the switching transistor. IMO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would you mind providing a link to an example website (preferred with tech specs and wiring diagram) for these cheap transformers you mentioned?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also have a bunch of POS VGA monitors with 9&quot; tubes from different manufacturers - for use or for extraction of the tube, should I need one as a replacement for a broken one. Would be interesting if these are also compatible.&lt;/p&gt;&#xA;" OwnerUserId="10295" LastActivityDate="2019-04-04T16:20:45.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9574" PostTypeId="2" ParentId="9569" CreationDate="2019-04-04T17:08:05.450" Score="24" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;It seems to me that since disk drives are fundamentally horizontal devices that want to be wide rather than tall,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To me they are taller than wide. After all, that's as well the orientation IBM did put the very first drive, so anything else is plain wrong, isn't it :))&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;the obvious solution would be to stack them vertically.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's pure opinion and up to the designer how he imagines a drive to look best or fit best. The drives itself work in any orientation with any angle equally well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It seems to me that since disk drives are fundamentally horizontal devices&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As said before, they are not, they work in any orientation. At least as long as we talk about the technology. If at all, any orientation can come from ball bearing involved. Except, for simple low speed application next to any standard bearing will offer the needed support strength - if that drive has one at all.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Were external disk drives ever stacked vertically?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It has been used in any combination you may think of.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Horizontal side by side like in a DEC RX01/02 - as that will need less HE in a rack&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ymJJh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ymJJh.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Horizontal above each other like the Atari 815&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/57HLl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/57HLl.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Vertical side by side like IBM's 6360 8&amp;quot; drive&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DWAIv.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DWAIv.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Vertical above each other in an Amstrad PCW8512 ('borrowed' from &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12133/6659&quot;&gt;Chromatix' answer&lt;/a&gt; - to finally fill this slot)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Q5WRG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q5WRG.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Or even both like with a Heathkit H17 case where two dives were mounted horizontal side by side, but when a third drive got added they where turned vertical to fit the case.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/z8CZH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/z8CZH.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/wwZ4K.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wwZ4K.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Heck, they where even Computers mouting them both way at the same time:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/v3NLY.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v3NLY.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;And then there was the DEC RX-50 dual drive, used in PCs to be placed either as desktop (with the drive horizontal) or tower (now vertical), whatever fits the desk.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8QwN8.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8QwN8.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/evIT7.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/evIT7.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/aHhsU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aHhsU.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="5199" LastEditDate="2021-04-30T11:14:54.120" LastActivityDate="2021-04-30T11:14:54.120" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9575" PostTypeId="2" ParentId="9523" CreationDate="2019-04-04T17:33:57.480" Score="2" Body="&lt;p&gt;At the time, there wasn't a need for a smaller form factor. Reducing drive bay size from 8&quot; format to 5.25&quot; format was enough to allow companies to transition from wide and/or tall rack mount type cabinets to desktop like frames and 5.25&quot; drive bays became a standard. Most current desktops still include some 5.25&quot; drive bays. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trivia - for hard drives, part of what drove the 3.5&quot; form factor was the fact that mounting a 3.5&quot; hard drive in a 5.25&quot; adapter frame provided enough shock tolerance to allow it to be used in the early Compaq &quot;luggable&quot; computers. &lt;/p&gt;&#xA;" OwnerUserId="4660" LastActivityDate="2019-04-04T17:33:57.480" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9576" PostTypeId="2" ParentId="9559" CreationDate="2019-04-05T00:01:03.830" Score="-1" Body="&lt;p&gt;It sounds like you're referring to the write-protect notch.  Single sided disks had a notch on one side, allowing you to write on one side.  You could cover the notch with tape to make the disk read-only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of this, you could grab a pair of scissors or a hole-punch and cut a notch out of the opposite side, flip the disk over, and use the other side.  The disks, fortunately, were symmetrical.  I can speak from experience, having done this to hundreds of old floppies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was possibly a bit of risk to the procedure.  The manufacturers sold double-sided disks, for a higher price, and warned that cutting the notch yourself was unreliable.  Perhaps due to the quality of the disk, and the possibility of leak through from the other side?  Or, due to the fact that flipping the disk resulted in it spinning the opposite direction, and the inner lining could cause wear?  Regardless, all the poor teenagers I knew did it to all their disks.&lt;/p&gt;&#xA;" OwnerUserId="4319" LastActivityDate="2019-04-05T00:01:03.830" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9577" PostTypeId="2" ParentId="9569" CreationDate="2019-04-05T03:29:47.250" Score="7" Body="&lt;p&gt;One configuration I think Raffzahn missed so far was two &lt;em&gt;independent&lt;/em&gt; drives stacked on top of each other. That was the recommended method for multiple Amstrad 3&quot; drives:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/BPNKU.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BPNKU.jpg&quot; alt=&quot;amstrad cpc464&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Image source: &lt;a href=&quot;http://www.retrocom.org/gallery/amstrad/computers/cpc464/cpc464-b-setup-roland-in-the-caves-468&quot; rel=&quot;noreferrer&quot;&gt;Gallery - Category: CPC464 - Image: CPC464 (b) setup - Roland in the caves&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-04-05T03:29:47.250" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9578" PostTypeId="2" ParentId="9569" CreationDate="2019-04-05T10:02:10.100" Score="2" Body="&lt;p&gt;Yes, of course external disk drives were often stacked.   The LaCie 'Joule' external&#xA;disk tower was a vertical stack/rack for drive modules,&lt;a href=&quot;https://web.archive.org/web/19971017230143/http://www.lacie.com/prodjd.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;depicted here&lt;/a&gt; and many&#xA;external disk cases were given interlocking features (feet or molded plastic&#xA;shapes that would keep a stacked unit from sliding off).&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2019-04-05T10:02:10.100" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9579" PostTypeId="1" AcceptedAnswerId="9580" CreationDate="2019-04-05T12:08:40.240" Score="20" ViewCount="5729" Body="&lt;p&gt;I read on Wikipedia that 80386 could theoretically handle 4GiB of RAM. Knowing how long ago that was, I find it impossible to believe that anyone could actually connect as much to the CPU. So, given the constraints from motherboards and actual RAM chips existing at that time, how much RAM could one put together with an 80386?&lt;/p&gt;&#xA;" OwnerUserId="12236" LastActivityDate="2019-04-05T19:21:59.390" Title="How much RAM could one put in a typical 80386 setup?" Tags="&lt;80386&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9580" PostTypeId="2" ParentId="9579" CreationDate="2019-04-05T12:16:44.793" Score="31" Body="&lt;p&gt;I very much doubt that anyone would ever have seriously considered fitting 4 GiB in a 386-based system, let alone designing such a beast. (To put this into context, I remember seeing early 1 GiB Alpha servers on the factory floor of Digital’s plant in Scotland in 1994, and those machines were priced at around $250,000...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://redhill.net.au/ib.html&quot; rel=&quot;noreferrer&quot;&gt;The Red Hill hardware guide&lt;/a&gt; provides a number of examples. 386SX systems were &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80386#The_80386SX_variant&quot; rel=&quot;noreferrer&quot;&gt;limited to 16 MiB&lt;/a&gt; at most anyway, because of the limited number of address lines. For 386DX systems, a common configuration included 8 SIMM slots, for up to 32 MiB of RAM, but &lt;a href=&quot;http://redhill.net.au/b/b-92.html&quot; rel=&quot;noreferrer&quot;&gt;Red Hill’s golden oldies page&lt;/a&gt; lists one SIPP-based motherboard which might have been usable with 64 MiB. Some manufacturers produced expansion boards to add more memory — &lt;em&gt;e.g.&lt;/em&gt; ALR systems had expansion boards supporting up to 48 MiB each. In early 1993, in the US, 4 MiB of RAM cost &lt;a href=&quot;https://archive.org/details/BYTE-1993-01/page/n339&quot; rel=&quot;noreferrer&quot;&gt;over $100&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I bought a 386DX/33 in 1992, with 8 MiB of RAM out of a maximum 32 MiB, and that was considered large at the time — enough to run Windows 3.1 or OS/2 very comfortably. I kept that system for four years, eventually switching to Linux, and never needed to add more memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In those days, even servers had “small” base configurations as presented in advertisements — see &lt;a href=&quot;https://archive.org/details/BYTE_Vol_15-06_1990-06_Windows_3.0/page/n5&quot; rel=&quot;noreferrer&quot;&gt;this 1990 ALR advert&lt;/a&gt; with a 386/33 and 5 MiB of RAM for a cool $6,290...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-04-05T13:19:14.000" LastActivityDate="2019-04-05T13:19:14.000" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9581" PostTypeId="2" ParentId="8702" CreationDate="2019-04-05T13:14:07.760" Score="1" Body="&lt;p&gt;Actually, MS-DOS doesn't give you any enhanced compatibility. The screen simply was MGA/CGA/EGA/VGA text mode which was 80xSomething by default. Cursor positioning, etc was done by BIOS calls and the programs ran directly on the CPU and the programmer could do whatever he pleased. It was just a nice-to-have to return to a functional DOS after the program was done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So MS-DOS had to run on IBM-PC or compatible which meant MDA/CGA compatible hardware screens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M on the other hand was for any hardware, mostly mechanical teletypes at first. Terminals had really evolved after CP/M had created a market for more complex terminals.&#xA;In early computing, you mailed in your punchcards or tapes and got them back with a printout of the results. &quot;Hacking&quot; - typing in stuff life on a computer - wasn't common before the late 1970s.&lt;/p&gt;&#xA;" OwnerUserId="12238" LastActivityDate="2019-04-05T13:14:07.760" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9582" PostTypeId="2" ParentId="9579" CreationDate="2019-04-05T13:47:34.660" Score="20" Body="&lt;p&gt;We can see the datasheet of the 386DX &lt;a href=&quot;http://www.cpu-world.com/CPUs/80386/index.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. The most important part is its pinout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have address lines from A2 to A31. It means, that yes, &lt;em&gt;it could have handled 4GB memory on a motherboard&lt;/em&gt;. Although it is very unlikely, that any ordinary PC motherboard had been built with the required number of memory sockets at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is more likely, that it was used at most to make memory-mapped IO easier in embedded environments.&lt;sup&gt;1&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(A0 and A1 are missing, because the cpu could address only 4byte memory operations. Essentially, it was an only 30-bit CPU, working with 32-bit &quot;bytes&quot;. This trick is usual since the early 16-bit era.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;For example, the Weitek Abacus FPU was memory-mapped to &lt;code&gt;0x0C000000&lt;/code&gt;. Floating-point calculations could be done by writing the commands into a 64kB-block starting at far higher as any physical RAM ever could end (at the time... 192MByte), and then reading out the result with &lt;code&gt;mov&lt;/code&gt; operands.&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bHycX.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bHycX.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="129" LastEditorUserId="129" LastEditDate="2019-04-05T19:21:59.390" LastActivityDate="2019-04-05T19:21:59.390" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9583" PostTypeId="2" ParentId="9579" CreationDate="2019-04-05T15:16:29.200" Score="6" Body="&lt;p&gt;As someone who had a 386, I was happy just to upgrade from 4MB RAM to 8MB RAM. Just think of all the cool things I can do now?! At that point, my motherboard could not contain anymore RAM IC's, so the only way to upgrade further would have been to get denser chips. But by the time I needed more RAM I was on to a 486. Yes, you're correct about the theoretical maximum but, at least for consumer level machines, ain't nobody doin' that. &lt;/p&gt;&#xA;" OwnerUserId="12240" LastActivityDate="2019-04-05T15:16:29.200" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9584" PostTypeId="1" AcceptedAnswerId="12514" CreationDate="2019-04-05T15:54:00.930" Score="5" ViewCount="1097" Body="&lt;p&gt;The IBM 5153 Personal Computer Color Display was a monitor designed to  accompany the original IBM PC (albeit released a couple of years later) and provide a color display at sharp enough resolution to be usable with 80 columns of text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course in principle you could use a color TV, but the fine detail was blurry and marred by NTSC color artifacts, so that it was problematic trying to work with much more than 40 columns on such a setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reasons for the difference at the electronic level are clear: Some picture clarity is lost in the RF encoding phase, more in the encoding of color in the chroma signal that was necessary for backward compatibility with black and white TV sets. But what were the differences in the actual picture tube?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you took all the electronics from a monitor like the IBM 5153 and substituted just the picture tube from a color TV, what would still be lacking in terms of display quality?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="7208" LastEditDate="2019-10-09T01:23:02.927" LastActivityDate="2019-10-09T05:21:35.467" Title="What's the difference between an IBM 5153 (CGA) CRT picture tube and a color TV picture tube?" Tags="&lt;crt-monitor&gt;&lt;color-display&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9587" PostTypeId="2" ParentId="9584" CreationDate="2019-04-05T19:51:36.987" Score="5" Body="&lt;p&gt;The question doesn't make much sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CGA works within TV spec of a standard line rate close to 16 kHz. Thus any CRT fitting must be capable to operate at ~16 kHz. Which is what each and every TV tube does. The mask of any colour CRT at this time was way better than needed for 640 pixel (80 columns with 8 pixel each). As a result next to any colour CRT can be used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no commercial sense in making a special CRT for a few thousand IBM displays when standard TV CRT where already produced by the million.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Te real difference is how the data (signals) are presented to, and turned into beam motion,  by the display electronics. When it reaches the tube it's all the same.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-04-05T19:51:36.987" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9588" PostTypeId="1" CreationDate="2019-04-05T20:45:58.520" Score="33" ViewCount="4541" Body="&lt;p&gt;When an x86 CPU is running in real mode, can it be considered to be basically an 8086 CPU (or maybe 8088)? Or are there differences between the two?&lt;/p&gt;&#xA;" OwnerUserId="12245" LastEditorUserId="79" LastEditDate="2019-04-05T21:26:00.073" LastActivityDate="2019-04-08T09:41:21.860" Title="Can an x86 CPU running in real mode be considered to be basically an 8086 CPU?" Tags="&lt;cpu&gt;&lt;x86&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9589" PostTypeId="2" ParentId="9588" CreationDate="2019-04-05T21:01:23.537" Score="56" Body="&lt;p&gt;An x86 CPU running in real mode is intended to be backwards-compatible with an 8086 or 8088, but there do end up being a number of differences, for example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;newer CPUs run faster (in general);&lt;/li&gt;&#xA;&lt;li&gt;newer CPUs add new instructions (and, with the 386, new registers, since the 32-bit registers can be used in real mode);&lt;/li&gt;&#xA;&lt;li&gt;286 and later CPUs add more address lines, and the wrapping behaviour of the 8086 meant that IBM had to add the infamous &lt;a href=&quot;https://en.wikipedia.org/wiki/A20_line#A20_gate&quot; rel=&quot;noreferrer&quot;&gt;A20 gate&lt;/a&gt; to preserve backward-compatibility;&lt;/li&gt;&#xA;&lt;li&gt;instruction timing — the speed of individual CPU instructions — varies from one family to another; some instructions run more slowly on newer CPUs;&lt;/li&gt;&#xA;&lt;li&gt;implementation details vary, and in some cases, can affect run-time behaviour — for example, varying prefetch queue lengths mean that self-modifying code may not work on CPUs other than the model it was written for;&lt;/li&gt;&#xA;&lt;li&gt;some instructions behave differently — for example, &lt;code&gt;PUSH SP&lt;/code&gt; on an 8086 decrements &lt;code&gt;SP&lt;/code&gt; before pushing it, whereas on a 286 it decrements &lt;code&gt;SP&lt;/code&gt; after pushing it, so the value on the stack is different;&lt;/li&gt;&#xA;&lt;li&gt;bus interactions (&lt;code&gt;LOCK&lt;/code&gt; prefixes) behave differently on the 8086/8088 compared to all later CPUs;&lt;/li&gt;&#xA;&lt;li&gt;illegal opcodes which run without error on the 8086 produce exceptions on later CPUs;&lt;/li&gt;&#xA;&lt;li&gt;the 8086 has no instruction length limit, whereas instructions which are too long will produce exceptions on later CPUs;&lt;/li&gt;&#xA;&lt;li&gt;segment wraparounds inside an instruction or word access work on the 8086 but trap on later CPUs;&lt;/li&gt;&#xA;&lt;li&gt;stack wraparounds work on the 8086 but will shut down a 286 or later;&lt;/li&gt;&#xA;&lt;li&gt;divide errors behave differently on the 8086/8088 compared to all later CPUs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The 8086 also has a few bugs which were fixed in later CPUs, but that generally doesn’t matter — all it means is that the workarounds which were needed on 8086/8088 are no longer necessary on later CPUs. (One example is the handling of interrupted instructions with multiple prefixes.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software which is actually affected by differences other than speed is very rare indeed, and you can count on the vast majority of software still technically working on a modern x86 CPU in real mode. Speed is another matter; famously, programs written using Turbo Pascal &lt;a href=&quot;https://www.vogons.org/viewtopic.php?t=93&quot; rel=&quot;noreferrer&quot;&gt;fail with an “Error 200”&lt;/a&gt; on CPUs faster than a 200MHz Pentium, and &lt;a href=&quot;https://www.vogonswiki.com/index.php/List_of_CPU_speed_sensitive_games&quot; rel=&quot;noreferrer&quot;&gt;many games don’t cope well with faster CPUs&lt;/a&gt; (but some CPUs can be slowed down &lt;a href=&quot;https://www.vogons.org/viewtopic.php?t=38613&quot; rel=&quot;noreferrer&quot;&gt;in creative ways&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2019-04-08T09:41:21.860" LastActivityDate="2019-04-08T09:41:21.860" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9590" PostTypeId="2" ParentId="9588" CreationDate="2019-04-05T21:02:49.570" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;When an x86 CPU is running in real mode, can it be considered to be basically an 8086 CPU (or maybe 8088)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As so often it depends on your value of 'basically' (and there is no user visible difference between 8086 and 8088 beside speed).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or are there differences between the two?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, it's so far the same, as every (modern) x86 operating in real mode will execute pure 8086 programs (*1) adhering to what were legal (*2) instructions (*3) on the 8086.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the same time they are able to execute later extensions as well while in real mode. So it is possible to write 32-bit real mode programs, or use additional registers and instructions in real mode. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So a x86 isn't the same but for most parts (and depending on the CPU used) a compatible superset of an 8086.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Lets ignore 'external' hardware differences for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - There are a few instructions that changed over time, including basic 8086 ones. They &lt;em&gt;may&lt;/em&gt; cause incompatibilities in rare circumstances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - There are some non-instruction combinations (i.e. prefixes) that were ignored on 8086 but will throw interrupts on later CPUs or result in addressing errors. This is a classic case of later restrictions on less well defined behaviour (like double segment prefix and the like).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-05T23:11:37.920" LastActivityDate="2019-04-05T23:11:37.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9591" PostTypeId="1" AcceptedAnswerId="19505" CreationDate="2019-04-05T22:58:53.187" Score="5" ViewCount="647" Body="&lt;p&gt;CGA on the original IBM PC produced sixteen colors, one bit each for red, green, blue and overall intensity modifier.&lt;/p&gt;&#xA;&lt;p&gt;The preferred output device was the later-arriving 5153 color monitor, which accepted the RGBI signal in digital form, four bits (each on a separate wire, using TTL voltage levels) and performed its own digital-analog conversion.&lt;/p&gt;&#xA;&lt;p&gt;This is a contrast with later VGA, where DAC was on the video card and the monitor accepted analog signals. Of course, the number of bits per pixel in VGA was much greater, so it's easy to see why VGA did DAC on the card.&lt;/p&gt;&#xA;&lt;p&gt;Why did CGA leave DAC to the monitor? One possible answer would be that because there are only four bits per pixel, there is no particular disadvantage, so basically: why not.&lt;/p&gt;&#xA;&lt;p&gt;But the other CGA output option was NTSC, and that involved doing DAC on the card after all. Admittedly not to the same analog format as the monitor ends up using, but it still seems intuitively likely that some of the circuitry could've been shared. Which in turn suggests there should be some offsetting positive advantage to leaving DAC in the monitor.&lt;/p&gt;&#xA;&lt;p&gt;So why did CGA leave DAC to the monitor instead of putting it in the video card?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="15334" LastEditDate="2021-01-22T13:36:26.990" LastActivityDate="2021-04-04T15:55:40.103" Title="Why did CGA RGBI output leave DAC to the monitor?" Tags="&lt;ibm-pc&gt;&lt;crt-monitor&gt;&lt;color-display&gt;&lt;design-choices&gt;&lt;cga&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9592" PostTypeId="2" ParentId="9591" CreationDate="2019-04-05T23:43:22.323" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;But the other CGA output option was NTSC, and that involved doing DAC on the card after all.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I think here the basic logic error of your question is hidden. Colour in NTSC is neither an analogue level, nor tied to intensity. Intensity is the base b&amp;amp;w part of a colour TV signal and formed independently as level (I wouldn't dare call it a DAC, it just emits two levels), while the colour signal is added and encoded as timing-based information.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Admittedly not to the same analog format as the monitor ends up using,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Both are not what a/the monitor is using:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;With NTSC input, intensity and colour shift of the signal has to be translated into three colour signals with intensity varying on each of the three signals - which means that an even more complex mixing scheme has to be used than the simple DAC aboard the CGA.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When using RGBI input, the three colour signals are already decoded and ready to use after intensity gets added (which is a quite simple circuit). Not much to do here.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but it still seems intuitively likely that some of the circuitry could've been shared.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's less a shared circuitry than leaving out any circuitry at all. the RGBI signal is directly delivered from the digital video logic and handed toward the NTSC encoder - the digital outputs are nothing but grabbing and offering these signals prior to the NTSC encoder.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;So if anything, the question is rather why IBM went to all the length of adding an internal NTSC encoder&lt;/strong&gt; - having it external would have been more appropriate (*1).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Which in turn suggests there should be some offsetting positive advantage to leaving DAC in the monitor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Since there is none, at least none worth that name, there is nothing to be left to the CRT electronics :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In fact, Apple went exactly that way with the &lt;a href=&quot;/q/9224&quot;&gt;Apple /// XRGB video&lt;/a&gt;. Its output is 4 TTL level signals - which can easy be used as RGBI. Instead of adding a colour encoder to the video card, they left it to external devices (like the monitor) to decode it into colour or gray levels (a method that Macs also continued to use for quite some time). Due to the low number of signals, any conversion into RGB is just a bunch of resistors. Converting it into NTSC is much more work.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-04-04T15:55:40.103" LastActivityDate="2021-04-04T15:55:40.103" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9593" PostTypeId="1" AcceptedAnswerId="9608" CreationDate="2019-04-06T00:59:27.667" Score="13" ViewCount="1360" Body="&lt;p&gt;The 1970s saw a big transition from CPUs built from thousands of discrete components, to CPUs implemented on a single chip, with the occasional use of bit-slice components along the way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were, however, some CPUs implemented in a couple of chips. Setting aside coprocessors for floating-point and memory management, one division that was used was a chip for control logic and a second chip for registers and ALU, for example some implementations of the PDP-11: &lt;a href=&quot;http://simh.trailing-edge.com/semi/f11.html&quot; rel=&quot;noreferrer&quot;&gt;http://simh.trailing-edge.com/semi/f11.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the one hand that sounds like a logical division. On the other hand, I'm curious about how it worked in specific.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Late-70s microprocessors tended to be limited by pin count; it was tricky and expensive to go beyond 40 pins, which would quickly be eaten up by address bus, data bus and miscellaneous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: the control chip reads an instruction word, which decodes as an instruction to add the contents of a pair of registers. It needs to communicate this to the data chip. How does it do so? The control chip doesn't seem like it would have a bunch of spare pins for that communication, and for that matter nor does the data chip. How do they get around this?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-20T18:48:28.423" Title="How did 2-chip CPUs work?" Tags="&lt;hardware&gt;&lt;pdp-11&gt;&lt;cpu&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9594" PostTypeId="1" CreationDate="2019-04-06T02:13:33.297" Score="2" ViewCount="451" Body="&lt;p&gt;Most VGA cards and monitors support additional undocumented resolutions, accessed by changing the VGA registers. Most are just variations on the regular modes (320x100 is the same as 320x200, but with 4x vertical scale instead of 2x), but some of them are quite odd, like 256x256, 256x224 and 400x300.&#xA;So I wonder what the sync frequencies of these resolutions are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This should be easy to find out using a monitor that has the ability to show these on it's OSD. If you need a program to enter such modes, &lt;a href=&quot;https://www.dropbox.com/s/ic5azi6gtcgjfwo/test.exe?dl=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Allegro 4's test.exe&lt;/a&gt; suppports a good bunch (select the &quot;Mode X&quot; driver).&lt;/p&gt;&#xA;" OwnerUserId="12248" LastEditorUserId="10566" LastEditDate="2019-04-06T07:54:50.100" LastActivityDate="2019-04-06T09:36:03.013" Title="What are the HSync and VSync frequencies of these common VGA tweak modes?" Tags="&lt;vga&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9596" PostTypeId="2" ParentId="9594" CreationDate="2019-04-06T08:08:13.520" Score="2" Body="&lt;p&gt;It's a bit more difficult. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The standard VGA registers allow a wide variation of modes and timings. Essentially you can use any frequencies you want, within the limits and resolution of your specific card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early analog monitors are different: Some have fairly tight restrictions on the frequencies and timings they accept. So you needed to program the registers correctly for your specific monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As this wasn't very practical, there were three approaches to make it simpler: The first was to standardize monitor timings. The second one was for the monitor to tell the computer which frequencies it supported (the protocol is called &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Display_Identification_Data&quot; rel=&quot;nofollow noreferrer&quot;&gt;Extended Display Identification Data&lt;/a&gt;, or EDID). The third one was multisync monitors, which accepted a range of frequencies, were fairly lenient about details in the timings, and offered monitor controls for fine tuning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the question &quot;what are frequencies of common tweak modes&quot; in this form doesn't have an answer. You can &quot;tweak&quot; the standard modes, keeping most of the timings. You can also figure out what timings your specific monitor supports, and make specific custom ones (I did this a lot, with even &quot;funnier&quot; resolution than the ones you mention; it's easy under X on Linux). Or, with a multisync monitor, you basically don't care.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there are no specific frequencies that would somehow apply to all monitors.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-04-06T08:08:13.520" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9597" PostTypeId="2" ParentId="9594" CreationDate="2019-04-06T09:36:03.013" Score="0" Body="&lt;p&gt;First and foremost, what you have listed are the visible active pixel and line counts. These alone cannot  be used to determine the resulting H and V frequencies, as these depend on how many pixels per line there are in total between Hsync pulses and how many lines there are between Vsync pulses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This information can be gotten by looking how the mode is set up, basically what is written as the H and V total counts are and what pixel clock they use (these bits are spread out to few registers). These resolutions sound like they are not using strict VGA sync rates and require a multisync monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As first VGA monitors used fixed 31kHz Hsync frequency and three vertical scanning rates to allow 400, 350 and 480 visible line modes, many tweak modes adhere strictly to these compatible timings.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-04-06T09:36:03.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9598" PostTypeId="2" ParentId="9593" CreationDate="2019-04-06T10:49:27.507" Score="7" Body="&lt;p&gt;The DEC J-11 chipset was a similar design to the F-11, and some pictures are &lt;a href=&quot;https://en.wikipedia.org/wiki/DEC_J-11&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The individual chips were mounted on a chip carrier package, and had more pins (and closer pin spacing) than the package as a whole.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the pictures, the complete J-11 &quot;CPU&quot; had 60 pins, but the individual chips had about 80 pins each, which seems adequate for the extra interconnections - at least 20, and possibly more if each individual chip doesn't need to access all of the 60 external pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The F-11 chips used similar physical packaging. Some of the DEC CPUs had 6 chips mounted on a single carrier.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2019-04-06T10:49:27.507" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9599" PostTypeId="1" CreationDate="2019-04-06T14:50:02.697" Score="11" ViewCount="1371" Body="&lt;p&gt;TurboVision was a library by Borland for developing TUI's (Text User Interfaces). It was included with their C++ and Pascal compilers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there any other TUI libraries that supported multiple compilers (Borland/Watcom), and maybe different OS'es (DOS, Windows, OS/2)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only thing I found was a library called VIDMGR (&lt;a href=&quot;https://github.com/zoomosis/vidmgr&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/zoomosis/vidmgr&lt;/a&gt;), but this one is more low-level, and doesn't provide any real widgets I think.&lt;/p&gt;&#xA;" OwnerUserId="11021" LastActivityDate="2020-08-21T08:25:05.367" Title="Alternatives for TurboVision on DOS" Tags="&lt;ms-dos&gt;&lt;c&gt;" AnswerCount="9" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9600" PostTypeId="2" ParentId="9599" CreationDate="2019-04-06T16:59:59.263" Score="8" Body="&lt;p&gt;In the early nineties, magazines carried adverts for a number of TUI libraries, many of them supporting multiple compilers and/or platforms. Examples include &lt;a href=&quot;https://archive.org/details/byte-magazine-1992-01/page/n25&quot; rel=&quot;noreferrer&quot;&gt;Vermont Views&lt;/a&gt;, any of the libraries in the “C Screens” section of &lt;a href=&quot;https://archive.org/details/byte-magazine-1992-01/page/n63&quot; rel=&quot;noreferrer&quot;&gt;the Programmer’s Paradise catalog&lt;/a&gt;, etc. However none of these captured a large market share, as far as I’m aware, with the possible exception of &lt;a href=&quot;https://archive.org/details/byte-magazine-1992-01/page/n331&quot; rel=&quot;noreferrer&quot;&gt;Turbo Power’s library&lt;/a&gt; and &lt;a href=&quot;https://archive.org/details/byte-magazine-1992-01/page/n337&quot; rel=&quot;noreferrer&quot;&gt;C-scape&lt;/a&gt; (which supports text and graphics, and is cross-platform).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were some cross-platform TUIs provided by programming environments which were cross-platform and widely used, at least for bespoke software used in professional settings: the various form generation tools used by databases such as &lt;a href=&quot;https://archive.org/details/byte-magazine-1992-01/page/n267&quot; rel=&quot;noreferrer&quot;&gt;Fox Pro&lt;/a&gt;, dBase... Some of these were also available as TUIs or GUIs depending on the platform (&lt;em&gt;e.g.&lt;/em&gt; Fox Pro for DOS and Macintosh).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it doesn’t qualify as either multi-compiler or cross-platform, Visual Basic for DOS included a distinctive TUI library which was briefly popular.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-04-06T16:59:59.263" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9601" PostTypeId="2" ParentId="9599" CreationDate="2019-04-06T17:51:13.127" Score="16" Body="&lt;p&gt;This is not exactly a retro answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The modern FreePascal compiler which is available for a lot of platforms (some even considered retro, like Amiga and PalmOS) comes with a library called &lt;a href=&quot;http://wiki.freepascal.org/Free_Vision&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;FreeVision&lt;/em&gt;&lt;/a&gt;, which is mostly API compatible to Turbo Vision and can be used to port old TurboVision applications to platforms different from pure DOS/IBM PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://github.com/open-watcom/open-watcom-v2/blob/master/docs/LJ/article.txt&quot; rel=&quot;noreferrer&quot;&gt;OpenWatcom&lt;/a&gt; compiler includes a TUI library it uses for it's own IDE and debugger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;ncurses&lt;/em&gt; for Unix-like OSs can be considered a TUI library as well, it supports forms, windows and menus&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-04-06T17:59:02.553" LastActivityDate="2019-04-06T17:59:02.553" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9602" PostTypeId="2" ParentId="9599" CreationDate="2019-04-06T18:23:01.533" Score="7" Body="&lt;p&gt;There is the famous &lt;a href=&quot;https://en.wikipedia.org/wiki/Curses_(programming_library)&quot; rel=&quot;noreferrer&quot;&gt;curses&lt;/a&gt; library, originally written for Unix, and its offsprings - most notable in this context &lt;a href=&quot;https://pdcurses.org/&quot; rel=&quot;noreferrer&quot;&gt;PDCurses&lt;/a&gt;, available for MS-DOS, MS Windows, OS/2, Unix (X11 and SDL), and on MS-DOS supporting at least Turbo C and Microsoft C.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2019-04-06T18:23:01.533" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9603" PostTypeId="1" AcceptedAnswerId="9604" CreationDate="2019-04-06T21:03:20.447" Score="4" ViewCount="185" Body="&lt;p&gt;I am doing a fresh reinstall of Windows 98 SE on a Dell Optiplex GX1 550Mbr+.  I previously had this very same version of Windows on this machine.  The install works perfectly, but when I get to the login screen, I hit escape (or type in the password and press enter), and it just hangs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Changing hard drives&lt;/li&gt;&#xA;&lt;li&gt;Changing CD drives&lt;/li&gt;&#xA;&lt;li&gt;Changing the RAM&lt;/li&gt;&#xA;&lt;li&gt;Swapping the hard drive into another machine&lt;/li&gt;&#xA;&lt;li&gt;Removing the password&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The first 3 points result in no improvement, event if I re-install from scratch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I swap the hard drive into another computer, I can log in just fine, so it doesn't seem to be the installation at fault.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I remove the password (using another computer), it just hangs at the green desktop background.  The mouse will move, but nothing ever loads.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;kbd&gt;CTRL&lt;/kbd&gt; + &lt;kbd&gt;ALT&lt;/kbd&gt; + &lt;kbd&gt;DEL&lt;/kbd&gt; will bring up the task manager, and I can restart the computer, or kill the only process (Hidserv).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Running the computer in Safe Mode works.&lt;/p&gt;&#xA;" OwnerUserId="12259" LastEditorUserId="12259" LastEditDate="2019-04-06T21:16:39.887" LastActivityDate="2019-04-06T22:42:15.067" Title="Windows 98 hangs after entering password on fresh install" Tags="&lt;windows-98&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9604" PostTypeId="2" ParentId="9603" CreationDate="2019-04-06T22:42:15.067" Score="3" Body="&lt;p&gt;I found the answer!  Using Safe Mode, in msconf, I disabled all the options in the startup tab except:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Scan registry&lt;/li&gt;&#xA;&lt;li&gt;Task Monitor&lt;/li&gt;&#xA;&lt;li&gt;System Tray&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That worked, so then I re-enabled the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Load power profile&lt;/li&gt;&#xA;&lt;li&gt;Load Power Profile&lt;/li&gt;&#xA;&lt;li&gt;Scheduling Agent  &lt;code&gt;C:\WINDOWS\SYSTEM\mstask.exe&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That was still working, so I restarted again after enabling&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Welcome&lt;/li&gt;&#xA;&lt;li&gt;Hidserv&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Since that did work, I finally enabled the last option in msconfig:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Scheduling agent &lt;code&gt;mstinit.exe /firstlogon&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And it worked!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried again on another fresh install on the same computer.  This time, I &lt;strong&gt;only&lt;/strong&gt; disabled &lt;code&gt;hidserv&lt;/code&gt;, and I got the same success (Windows started normally, and I was able to re-enable &lt;code&gt;hidserv&lt;/code&gt; in msconfig).  So the problem was &lt;code&gt;hidserv&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="12259" LastActivityDate="2019-04-06T22:42:15.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9605" PostTypeId="1" AcceptedAnswerId="9610" CreationDate="2019-04-07T02:05:33.560" Score="3" ViewCount="1306" Body="&lt;p&gt;The 8088 provided an address space of one megabyte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM PC allocated that address space as 640K RAM (not that the 5150 could physically take that much, but the address space was allocated) followed by 384K everything else (BIOS ROM, video memory, other memory mapped expansion cards etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has been argued that this was a mistake, because when the foreseeable need for more address space was satisfied, that upper 384K left a hole in the address space, with RAM before and after it. That it would've been better to put the other stuff at the beginning of the address space, followed by the 640K RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as far as I can see, it doesn't really matter. If we fast-forward to the 386, where a typical system has several megabytes of RAM, it seems to me that it should be possible to provide all of that in a linear chunk starting at one megabyte and also mirror the first part of it into the first 640K, but in any case, I don't see that the difficulty is really affected by which way around the first megabyte is mapped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was the arrangement chosen with RAM in the first part of the address space? Was it a purely arbitrary choice, or was there some technical reason?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-04-07T16:06:31.337" Title="IBM PC memory map - why RAM at the bottom?" Tags="&lt;history&gt;&lt;ibm-pc&gt;&lt;memory-layout&gt;&lt;8088&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9606" PostTypeId="1" AcceptedAnswerId="9619" CreationDate="2019-04-07T02:14:55.980" Score="3" ViewCount="256" Body="&lt;p&gt;The bus used for DEC's LSI-11 microcomputer implementation of the PDP-11 was originally and prosaically referred to as the LSI-11 bus, but thereafter it was universally referred to as the Q-bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this name have any meaning?  And if so, what was it?&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-04-07T20:33:02.247" Title="Why was the DEC Q-Bus called the Q-bus?" Tags="&lt;history&gt;&lt;pdp-11&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9608" PostTypeId="2" ParentId="9593" CreationDate="2019-04-07T08:55:19.047" Score="5" Body="&lt;p&gt;Answer for the PDP-11 control and data chips:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/dec/pdp11/1103/EK-KUV11-TM_LSI11_WCS.pdf&quot; rel=&quot;noreferrer&quot;&gt;LSI-WCS user's guide&lt;/a&gt;, page 3-4 (page 67 in the PDF) and following describe the division of work between the control chip and the data chip of the PDP-11/03.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chips themselves are connected by the microinstruction bus (MIB), the data chip is connected to the address and data part of the system bus, while the control chip deals with the control signals of the data bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control chip is responsible for the microlocation address generation and the microinstruction address, it includes a location counter, an incrementer, a return register, and implements conditional and unconditional jumps. It also contains a machine instruction translation register and a translation array.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data chip has a microinstruction register for the current microinstruction, contains the ALU, the register file both for the &quot;macro&quot; CPU and additional &quot;micro&quot; registers, and the condition code and status flags.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's lots of details how the microcode actually works, and how the communication between the two chip works in detail, what phases there, etc. and this is all spelled out in the rest of the user's guide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, note that this is specific to the PDP-11. Other multi-chip CPU implementations distributed the work between chips in very different ways.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-04-07T08:55:19.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9609" PostTypeId="1" AcceptedAnswerId="9611" CreationDate="2019-04-07T09:04:15.353" Score="10" ViewCount="2635" Body="&lt;p&gt;I'm working on a retro project and was trying to create a pipe of stdin/out/err in DOS, but I can't find any functions to to this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance the pipe() command from unistd.h isn't present in BorlandC, which I'm using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone tell me how to to this? Preferably in C or Batch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, how to pipe stdin/out from the current shell (command.com or 4dos.com) in order to &quot;Skin&quot; the console?&lt;/p&gt;&#xA;" OwnerUserId="12265" LastEditorUserId="12265" LastEditDate="2019-04-07T09:12:16.617" LastActivityDate="2019-06-27T23:20:24.613" Title="DOS, create pipe for stdin/stdout of command.com(or 4dos.com) in C or Batch?" Tags="&lt;ms-dos&gt;&lt;c&gt;&lt;shell&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9610" PostTypeId="2" ParentId="9605" CreationDate="2019-04-07T09:08:52.653" Score="6" Body="&lt;p&gt;[This Answer focuses on the reason why RAM at low address and ROM at high address, as the usual ramblings about the 640Ki border have been made in other places an amasse (*1)]&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why was the arrangement chosen with RAM in the first part of the address space? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's the way Intel laid out the 8086.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU starts execution at FFFF:0000, thus ROM had to be up there. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel learned from the success of the 8080 (and follow up Z80) as CPU for general purpose computers with variable programming (aka PCs). Here it is a great plus if entry points / vector tables can be set up and changed during run time. &gt;The basic 8080 concept with restarts in low memory (Reset at 0000 and so on) works great for an embedded system. But for a computer it must be possible to change them from ROM configuration to some value the OS or a loaded user program needs. But at the same time, at least the entry for reset must be in some ROM (like) to make the machine boot at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Handling that problem for an 8080/8085/Z80 ended up in three solutions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;ROM at 0000h, each and every call to a restart gets first processed by ROM routines and at some point, if at all handed over to loaded (user/OS) code&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ROM at 0000h, all calls (*2) get handed to a user pointer table via a jump indirect stub of various kind&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ROM at 0000h, much like the first, but it gets replaced by RAM at runtime, enabling variable handling routines. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Any of these either limits functionality, adds processing time or needs additional hardware. Uncool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the 8086, its designers tried to break from these limits by separating Reset which always needs to be handled in ROM from all other exceptions to allow dynamic setup. Thus the CPU starts executing with segment FFFFh, offset 0000h while the vector table is located at Segment 0000h  (*3) offset 0000h. As a result no hardware for switching out ROMs was needed, while at the same time the shortest possible code path for (variable target) exceptions was enabled. &lt;em&gt;Lesson learned&lt;/em&gt; (*4,*5).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;Never forget that the first microprocessors were not designed as core of a general purpose computers, but to make embedded controllers.&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Can't hold my inner Nerd back: Come on, there has to be RAM and ROM in a system, and I/O (like video) is usually something to be put in-between. Heck, even the template for the IBM PC, the Apple II, made by the great Woz did it that way ... it even features a similar split 6:2 for RAM vs. I/O and ROM. For the PC it's 5:3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Except Reset which still gets processed to some point in ROM&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - It's important to see this as segments, as that's not only the way it is implemented, but as well the (original) intended upgrade path for later CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - In addition the concept was changed from restarting at the calculated location as the 8080 did, to address pointers (like Motorola already had) to be used with an indirect jump. After all, 4 bytes couldn't hold much code - already making it indirect resulted in a subsequent table and jumping twice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Motorola as well changed when going 16 Bit. The location their a vector table from top memory down to zero&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-07T16:06:31.337" LastActivityDate="2019-04-07T16:06:31.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9611" PostTypeId="2" ParentId="9609" CreationDate="2019-04-07T09:18:03.290" Score="15" Body="&lt;p&gt;MS-DOS doesn't support &lt;em&gt;pipes&lt;/em&gt; like Unix does - It does support &lt;em&gt;input and output redirection&lt;/em&gt; through its command line processor COMMAND.COM, but that's a different thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're fine with pure I/O redirection, you should be able to do that using the &lt;code&gt;system()&lt;/code&gt; function in C, by providing a command line that has the output redirection (&lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;|&lt;/code&gt;) included. Opposed to Unix, you will, however, not be able to have the &quot;piped together&quot; commands run in parallel, but rather only sequentially (which isn't quite what you need to scrape the console of an interactive program) - MS-DOS is not a multitasking system.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-04-07T10:44:50.557" LastActivityDate="2019-04-07T10:44:50.557" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9612" PostTypeId="2" ParentId="9609" CreationDate="2019-04-07T09:44:38.177" Score="17" Body="&lt;p&gt;It seams as if you imply that DOS is kind of an unixoide OS, which it isn't. While Microsoft's goal with MS-DOS 2.0 was to move it toward Unix like operations, for compatibility with Xenix, it never went &lt;em&gt;all&lt;/em&gt; the way. Not in internal workings nor API or shell. MS-DOS is a single user, single program OS - with a few 'handmade' exceptions like TSR.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For instance the pipe() command from unistd.h isn't present in BorlandC, which I'm using.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;UNISTD is a POSIX definition. DOS isn't a POSIX system. POSIX definitions where made years after DOS got unix alike features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS only implements STDIN/OUT/ERR. They are made as simple file handles (0,1,2) to be read from/writen to and inherited from the parent program.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Can anyone tell me how to to this? Preferably in C or Batch.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Just use redirection one the command line in the usual way via &amp;lt;/|/&amp;gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also, how to pipe stdin/out from the current shell (command.com or 4dos.com) in order to &quot;Skin&quot; the console?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You might get a hard time, as DOS can only run a single program at a time. Without two concurrent processes it's just not possible to transfer data between them without having the first terminated before the second is started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS's redirection is more like chaining.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Workings of Redirection in DOS&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS implements pipeing (redirection to a program) as an application of redirection to files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When pipeing is used, all output of the first program to STDOUT gets written into a temporary file until the program terminates. Then the next program gets started (&lt;em&gt;after&lt;/em&gt; the first is unloaded) and the file written is assigned to STDIN. Then the program terminates, the (input) File gets deleted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words a command line like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;TREE C:\ /F | FIND /I &quot;.COM&quot; | SORT &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to display all .COM files with their path on drive C works in sequential steps like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;TREE C:\ /F &amp;gt;tempfile1&#xA;FIND /I &quot;.COM&quot; &amp;lt;tempfile1 &amp;gt;tempfile2&#xA;DEL  tempfile1&#xA;SORT &amp;lt;tempfile2&#xA;DEL tempfile2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From a user perspective the result is the same, but inner workings are complete different (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So unless you spread your programs across multiple DOS machines, you can't come close to Unix behaviour (*2).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm working on a retro project and was trying to create a pipe of stdin/out/err in DOS, but I can't find any functions to to this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;See, that's &lt;strong&gt;the true lesson of retrocomputing&lt;/strong&gt;: these old machines and OSes were not the same as today, just in small, slow and with blocky graphics, they where different. And not just between today and back then, but as well between different manufactures and even machines. Backporting ideas isn't about finding the same function, but to work from a complete different angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Discovering unknown space with different laws of physic :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, having said all of this and taking the assumption of adding bells and whistles to STDOUT), a clean way to do this would be writing a character driver and assign them as STDIN/OUT when starting command.com. If the driver is (for example) named &lt;a href=&quot;https://en.wikipedia.org/wiki/Principal_Skinner&quot; rel=&quot;nofollow noreferrer&quot;&gt;skinner.dev&lt;/a&gt; and the resulting device would be SKINNER, then config.sys needs to contain these two lines (*3):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DEVICE=C:\DRIVER\SKINNER.DEV&#xA;SHELL=C:\COMMAND.COM SKINNER &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And from there on, all output to STDOUT is delivered thru your driver - unless redirected that is. Now you may add any kind of framing skins or whatsoever. Keep in mind that the application might not be aware of and for example still assume a 24x80 screen, even if you took some characters off for a beautiful frame. Similar any output bypassing STDOUT, like when using BIOS calls or direkt screen manipulation, &lt;em&gt;may&lt;/em&gt; show up at the wrong place (*4). Last but not least, every program opening CON on its own will as well bypass your driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few points to think about may be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Don't forget to make the driver as well handling read requests, as Command.Com requires both ways to go thru the same device.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You may as well try to replace the build-in CON driver(*5), this means setting the CON bit in the device attributes word &lt;strong&gt;as well as&lt;/strong&gt; replacing/capturing INT 29h, as DOS does handle CON a bit different. (*6)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Adding I/O-Control support would support a clean interface to set the workings during runtime (changing colours or whatsoever it does) with a configuration command supplied by you. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do your users a favour and use Assembly - at least for the driver.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Device drivers can be a lot of fun and are usually way less complicated to write then people tend to assume.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Caveat: Some mechanics only work with DOS 3.1 and higher even though already defined before. This goes especially for monitoring open/close calls.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Now, when devices are used as targets of a redirection, access is immediate and concurrent. Just they can only be source or destination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - And even then you may need some file server allowing read while write and plunge in a zillion FLUSH calls to make each output seen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - For test purpose it may be more appropriate to only load the driver and use redirected STDIN/OUT only via a sub-shell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Some of this may be captured by the driver due manipulation of BIOS data and alike - but that will as well lead to a slow creep into machine and OS dependence while at the same time bloating code ever more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - This would remove some of the possible ways to screw up things for child processes in complex scenarios involving sub-shells as well as redirections with the explicit use of CON. On the down side, you'd have to rewrite all of it's functionality - hopefully compatible with ANSI.SYS which already is one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Which BTW would be the better way (when going this route) - get the source for some ANSI.SYS compatible driver like &lt;a href=&quot;http://www.kegel.com/nansi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;NANSI.SYS&lt;/a&gt; and tweek it to support your additional functionality - more work than writing your own, but for sure a great drop in by naming it ANSI.SYS and copying it onto any machine available - not other change needed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-27T23:20:24.613" LastActivityDate="2019-06-27T23:20:24.613" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9613" PostTypeId="2" ParentId="9605" CreationDate="2019-04-07T10:19:53.200" Score="2" Body="&lt;p&gt;The 5150 used 8088 CPU which only had 1024 KB of address space. When 5150 was designed, the 286 did not exist yet so there was no future compatibilities to think of. As the 8088 booted from the end of memory, ROM had to be put there. And as interrupt vectors are at start of memory, something had to be there so it was most flexible to start RAM from there. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So against what you say that the 384 KB left a hole in the address space, it did not. On a 8088 and 8086, that is the end of the 1024KB of memory space that can be accessed.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-04-07T10:19:53.200" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9614" PostTypeId="1" AcceptedAnswerId="9623" CreationDate="2019-04-07T11:17:07.160" Score="4" ViewCount="324" Body="&lt;p&gt;I have a vivid memory of a guy I knew back in the day who had a custom prompt with a small character animation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way I remember it there was a sequence like |,/,--,\,| in the prompt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This wasn't implemented as just a prompt &quot;something something&quot; command, but a rather large bat file with IF statements and the like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this possible with the DOS prompt command (or maybe with 4DOS) or is my memory playing tricks on me?&lt;/p&gt;&#xA;" OwnerUserId="12265" LastActivityDate="2019-04-08T14:06:37.957" Title="DOS/4DOS Prompt with animated characters?" Tags="&lt;ms-dos&gt;&lt;shell&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9615" PostTypeId="2" ParentId="9614" CreationDate="2019-04-07T11:29:07.360" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is this possible with the DOS prompt command (or maybe with 4DOS) or is my memory playing tricks on me?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it isn't. Prompt just sets a string to be interpreted and the result outputed once when the prompt is displayed (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, one can make a string including several characters overwriting each other when displayed, creating an animation, but that will be a finite amount of overwrites and already next to impossible to be noticed on an original PC - even less on any later machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe you mix this up with some programs having wait indicators. Cycling thru a sequence of &lt;code&gt;-/|\&lt;/code&gt;was quite common.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Remember DOS is a single tasking, single program, single user OS.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-08T14:06:37.957" LastActivityDate="2019-04-08T14:06:37.957" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9616" PostTypeId="2" ParentId="5465" CreationDate="2019-04-07T16:09:27.107" Score="2" Body="&lt;p&gt;Actually reading a disk is easy with ST Recover, it uses a special method of reading the disk that reads disks that are damages , ie unstable. it then trys to read bad secors and recover sufficient information from the damaged sector. The program ST Recover works on Atari ST disks and creats an image called a .ST file ,which then can be read on either Omniflop of FloImage (these two programs require an internal floppy drive in your PC), but ST recover can read normal 720 K disks whether they be Atari or PC. It will write a PC disk out as an Atari file but that is easy to write back out as A PC file. I will of course post the zip file for ST REcover here if allowed. Russ&lt;/p&gt;&#xA;" OwnerUserId="11017" LastActivityDate="2019-04-07T16:09:27.107" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9617" PostTypeId="1" AcceptedAnswerId="9667" CreationDate="2019-04-07T17:28:27.677" Score="3" ViewCount="524" Body="&lt;p&gt;I use a Sinclair ZX Spectrum Issue 2 with a DivMMC EnJOY! Pro One&#xA;and the boot process shows no error and I'm even able to enter the&#xA;file browser but if I choose any game/demo/program I get always garbage:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;YouTube Link: &lt;a href=&quot;https://www.youtube.com/watch?v=9bGBzDCBbKk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=9bGBzDCBbKk&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here my CPU (NEC D780C-1) with modification:&#xA;&lt;a href=&quot;https://i.imgur.com/eoDEX7N.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://i.imgur.com/eoDEX7N.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea what's wrong here?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thx&lt;/p&gt;&#xA;" OwnerUserId="12268" LastEditorUserId="3290" LastEditDate="2020-05-01T16:05:42.823" LastActivityDate="2020-05-01T16:05:42.823" Title="Sinclair ZX Spectrum with DivMMC load issue" Tags="&lt;z80&gt;&lt;zx-spectrum&gt;&lt;divmmc&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9618" PostTypeId="2" ParentId="9599" CreationDate="2019-04-07T17:47:16.323" Score="5" Body="&lt;p&gt;There was also the TesSeRact Screen Designer that I used in the 90s on some projects.  &lt;a href=&quot;https://www.pcorner.com/list/C/TDT-1.ZIP/INFO/&quot; rel=&quot;noreferrer&quot;&gt;https://www.pcorner.com/list/C/TDT-1.ZIP/INFO/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9004" LastActivityDate="2019-04-07T17:47:16.323" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9619" PostTypeId="2" ParentId="9606" CreationDate="2019-04-07T20:33:02.247" Score="4" Body="&lt;p&gt;The &lt;a href=&quot;http://bitsavers.org/pdf/dec/standards/EL-00160-00-0_A_DEC_STD_160_LSI-11_Bus_Specification_Sep91.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;LSI-11 Bus Specification&lt;/a&gt; has a section on history and folklore, and states&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The original backplane to implement the LSI-11 Bus was designed to&#xA;  accommodate Digital's quad and dual height modules. It became known&#xA;  as the &quot;Q-Bus&quot; to reflect the quad board form factor. Both LSI-11 Bus&#xA;  and Q-BUS are Digital trademarks, but are not registered trademarks.&#xA;  Several bus architecture features of the LSI-11 Bus are protected by&#xA;  claims in Digital Unibus patent numbers 3,710,324 and 3,815,099. Some&#xA;  publications may also use the term SUB-UNIBUS, although this is not&#xA;  recommended.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;When the LSI-11 Bus was expanded to provide 22 address lines, the&#xA;  terms Q22-Bus and extended LSI-11 Bus were adopted to specify&#xA;  backplanes [of] that bus [with] the four additional lines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-04-07T20:33:02.247" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9620" PostTypeId="2" ParentId="9617" CreationDate="2019-04-07T21:08:03.773" Score="4" Body="&lt;p&gt;Does your divmmc work in another machine?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, there is a single common problem in 48k spectrums: on the edge connector, +12v and /M1 signals are neighbouring. When some device is inserted too much unaligned, chances are that +12v would shortcircuit to /M1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since 48k &quot;chipset&quot; does not use /M1, with enough luck this could pass unnoticed to the user -- the machine still works, but /M1 output is burned out. And DivMMC needs /M1 anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way to fix that is to replace Z80.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2019-04-07T21:29:20.213" LastActivityDate="2019-04-07T21:29:20.213" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9621" PostTypeId="2" ParentId="9599" CreationDate="2019-04-08T12:16:26.110" Score="1" Body="&lt;p&gt;I can't find any retrolinks for it, but my Googlefu isn't always all that strong. I do, however, remember using a cross-platform library called C-Worthy; the company I was working for at the time was doing development on both MS-DOS and CTOS, and we'd ported C-Worthy to CTOS so that we could write once, compile on both platforms, and release the company product on both platforms simultaneously.&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2019-04-08T12:16:26.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9622" PostTypeId="1" AcceptedAnswerId="9624" CreationDate="2019-04-08T13:17:45.083" Score="8" ViewCount="818" Body="&lt;p&gt;For some systems, such as the Super NES (SNES), there existed a development kit, which consisted of specialized hardware. I believe this kit allowed the developer to present recently assembled machine code to the SNES without needing to burn EPROMs every time it needed to be tested, and also to insert breakpoints, etc. in the SNES itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was just to give some context, and this might not even be accurate regarding the SNES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What systems existed for arcade systems? Just to make this question specific enough, I'm limiting it to CPS-1, which was used for many games, including Street Fighter 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the developers have a similar system to the SNES development kit, a CPS-1 development kit?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know, but if I had to imagine, I would imagine that yes, they had a similar system to the SNES development kit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would assume the developers could write code on either a normal PC, or a Unix workstation, and either cross compile/cross assemble if they used x86. Perhaps slightly less work to implement this on a Unix based workstation for the 68k? They would also need features to debug their code, again akin to the SNES development kit, obviously they couldn't actually run the code locally on the PC/Unix workstation -- the graphics chipset of the CPS-1 would be much too powerful to emulate. However, an alternative solution could be to have an expansion card that implemented a complete CPS-1 inserted into the PC, or Unix workstation which includes the chipset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What did they actually use, for the CPS-1?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does there exist some kind of list to show what development solutions existed for various consoles and arcade machines? I'm sure that would be of interest to many.&lt;/p&gt;&#xA;" OwnerUserId="7413" LastActivityDate="2019-04-08T13:56:48.283" Title="How were arcade games developed?" Tags="&lt;arcade&gt;&lt;software-development-kit&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9623" PostTypeId="2" ParentId="9614" CreationDate="2019-04-08T13:48:05.077" Score="6" Body="&lt;p&gt;Yes, it is possible.  With 4DOS at least.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It involved running a BTM from within the printing of the prompt that in a loop displayed the animation(s) and waited for a keypress, upon which the normal command-line editor would take charge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used to have a BTM file that did this.  There were several in circulation, from ticking clocks to screen-saving animated worms.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Further reading&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ivan Cooper (1996-01-07). &lt;em&gt;&lt;a href=&quot;https://groups.google.com/forum/#!original/comp.os.msdos.4dos/fcQCZYj7Ak0/1eIN7LxT5ZkJ&quot; rel=&quot;noreferrer&quot;&gt;.BTM prompts in 4DOS w/ clock (description)&lt;/a&gt;&lt;/em&gt;.  comp.os.msdos.4dos.  &amp;lt;4cpivo$hcg@crl13.crl.com&amp;gt;&lt;/li&gt;&#xA;&lt;li&gt;Tuny Nugent (1994-11-11). &lt;em&gt;&lt;a href=&quot;https://groups.google.com/forum/#!original/comp.os.msdos.4dos/qwNaBE6LKHk/UodUxwu8cWgJ&quot; rel=&quot;noreferrer&quot;&gt;PROMPT Question&lt;/a&gt;&lt;/em&gt;.  comp.os.msdos.4dos.  &amp;lt;39ut0k$eqc@griffin.itc.gu.edu.au&amp;gt;&lt;/li&gt;&#xA;&lt;li&gt;Erik Frambach (1995-01-02). &lt;em&gt;&lt;a href=&quot;https://groups.google.com/forum/#!original/comp.os.msdos.4dos/mf49YHQdfB8/Ga0pi_amhbsJ&quot; rel=&quot;noreferrer&quot;&gt;Cool screen saver&lt;/a&gt;&lt;/em&gt;.  comp.os.msdos.4dos. &amp;lt;9A6C35773F6@eco3.eco.rug.nl&amp;gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1932" LastActivityDate="2019-04-08T13:48:05.077" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9624" PostTypeId="2" ParentId="9622" CreationDate="2019-04-08T13:56:48.283" Score="5" Body="&lt;p&gt;The CPS-1 was actually &lt;a href=&quot;http://arcadehacker.blogspot.com/2015/05/capcom-cps1-part-2.html&quot; rel=&quot;noreferrer&quot;&gt;based on the Sharp X68000 computer system&lt;/a&gt;. The X68000 was a powerful Japanese computer that had impressive graphics and sound. By basing the CPS-1 hardware on its capabilities it was possible to write games for the X68000 and then do a very light &quot;port&quot; to the arcade system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The X68000 also ran software for creating graphics and audio, as well as compiling assembler and C code. It's likely that there was some kind of debug harness for the arcade system that allowed code to be downloaded and tested on the system, perhaps with some kind of interactive debugging capability.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-04-08T13:56:48.283" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9625" PostTypeId="1" AcceptedAnswerId="9630" CreationDate="2019-04-08T15:17:28.623" Score="6" ViewCount="550" Body="&lt;p&gt;From 1994 to 1996 Apple developed a complete new Mac OS, codenamed &lt;a href=&quot;https://en.wikipedia.org/wiki/Copland_(operating_system)&quot; rel=&quot;noreferrer&quot;&gt;Copland&lt;/a&gt;, intended to be published as System 8. A first public demo was made at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Worldwide_Developers_Conference&quot; rel=&quot;noreferrer&quot;&gt;May 1996 WWDC&lt;/a&gt;. Shortly before it was canceled, a Developer Release DR0 was sent out to selected developers. It was &lt;em&gt;completely&lt;/em&gt; unusable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember being told that a DR1 was also distributed, and it was somewhat better. However, I have lost the email. So the question is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Was there a DR1 at all? Did anyone outside of Apple receive a copy?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="79" LastEditDate="2019-04-08T19:26:20.313" LastActivityDate="2019-04-10T13:24:23.993" Title="Was Apple's Developer Release DR1 of Copland ever distributed?" Tags="&lt;apple-macintosh&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9626" PostTypeId="1" AcceptedAnswerId="9628" CreationDate="2019-04-07T08:52:02.343" Score="1" ViewCount="134" Body="&lt;p&gt;I'm working on a retro project and was trying to create a pipe of stdin/out/err in DOS, but I can't find any functions to to this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance the pipe() command from unistd.h isn't present in BorlandC, which I'm using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone tell me how to to this? Preferably in C or Batch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, how to pipe stdin/out from the current shell (command.com or 4dos.com) in order to &quot;Skin&quot; the console?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[edit] Awnser from retrocomputing&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9609/dos-create-pipe-for-stdin-stdout-of-command-comor-4dos-com-in-c-or-batch&quot;&gt;https://retrocomputing.stackexchange.com/questions/9609/dos-create-pipe-for-stdin-stdout-of-command-comor-4dos-com-in-c-or-batch&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="12265" OwnerDisplayName="Dacobi" LastActivityDate="2019-04-08T18:41:44.513" Title="DOS, create pipe for stdin/stdout of command.com(or 4dos.com) in C or Batch?" Tags="&lt;c&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2019-04-08T20:58:29.733" ContentLicense="CC BY-SA 4.0" />
  <row Id="9627" PostTypeId="2" ParentId="9626" CreationDate="2019-04-07T10:27:01.637" Score="-1" Body="&lt;p&gt;There is no point refeering questions like this to Retro Computing. The answer remains the same over decades, the beauty of Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GetStdHandle is the function call that has worked for at least 19 years and probably 26.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/console/getstdhandle&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.microsoft.com/en-us/windows/console/getstdhandle&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Retrieves a handle to the specified standard device (standard input,&#xA;  standard output, or standard error).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;HANDLE WINAPI GetStdHandle(&#xA;  _In_ DWORD nStdHandle&#xA;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Your question is unclear. Command.com does piping, not programs. In Dos you can read/write std handles using Int21. See &lt;a href=&quot;http://spike.scu.edu.au/~barry/interrupts.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://spike.scu.edu.au/~barry/interrupts.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;AH = 02h -WRITE CHARACTER TO STANDARD OUTPUT&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Entry: DL = character to write&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Return: AL = last character output&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Notes: •^C/^Break are checked •the last character output will be the&#xA;  character in DL unless DL=09h on entry, in which case AL=20h as tabs&#xA;  are expanded to blanks •if standard output is redirected to a file, no&#xA;  error checks (write- protected, full media, etc.) are performed&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;SeeAlso: AH=06h,AH=09h&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is all documented in MS compilers of the time. I'm sure Borland documented too.&lt;/p&gt;&#xA;" OwnerDisplayName="Noodles" LastActivityDate="2019-04-08T02:41:19.637" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9628" PostTypeId="2" ParentId="9626" CreationDate="2019-04-08T05:39:39.977" Score="3" Body="&lt;p&gt;DOS is a single-tasking OS. What this means is that it's designed under the assumption that there's only ever one process running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there's only ever one process running, then it's impossible for another process to be at the other end of a pipe at the time, so pipes don't really make any sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this reason DOS just has minimal &quot;fake pipes&quot; for stdin/stdout. Originally (DOS 1.0) these were just synonyms for console input/output (and could never be redirected to files). Later (DOS 2.0) they added the ability to redirect stdin/stdout to a file in the command interpreter (&lt;code&gt;command.com&lt;/code&gt;); but it's still not real pipes (there's no support for changing stdin/stdout after a program has started, no way to create other pipes, no way to close stdin/stdout, etc). Also, &lt;code&gt;stderr&lt;/code&gt; doesn't exist at all - a program (or a C standard library) would emulate it with a &quot;direct console output&quot; function (in case &lt;code&gt;stdout&lt;/code&gt; is being redirected).&lt;/p&gt;&#xA;" OwnerDisplayName="Brendan" LastActivityDate="2019-04-08T05:39:39.977" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9629" PostTypeId="2" ParentId="9609" CreationDate="2019-04-08T18:42:55.717" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Also, how to pipe stdin/out from the current shell (command.com or 4dos.com) in order to &quot;Skin&quot; the console?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If are experienced in assembly language, you may do the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can run the &quot;Skin&quot; program and replace the &lt;code&gt;int 21h&lt;/code&gt; vector by your own one. In your own vector you process all &lt;code&gt;int 21h&lt;/code&gt; requests that are related to the console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If some function is not handled by your handler, you use a &lt;code&gt;jmp far&lt;/code&gt; instruction to jump to the original interrupt handler. Many DOS device drivers used this method to add additional functionality to a DOS or BIOS interrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may also call the original &lt;code&gt;int 21h&lt;/code&gt; interrupt using &lt;code&gt;pushf&lt;/code&gt; followed by &lt;code&gt;call far&lt;/code&gt; to the original handler's address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to functions accessing the console, you would have to handle &lt;code&gt;dup&lt;/code&gt;, &lt;code&gt;dup2&lt;/code&gt; and &lt;code&gt;close&lt;/code&gt; in your &lt;code&gt;int 21h&lt;/code&gt; handler to track which file handles correspond to the console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, many programs directly access BIOS interrupts &lt;code&gt;int 10h&lt;/code&gt; (screen) or &lt;code&gt;int 16h&lt;/code&gt; (keyboard). To support such programs, you would have to do the same with these two interrupt handlers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also a lot of programs directly accessing the hardware (e.g. the screen memory at &lt;code&gt;0B8000h&lt;/code&gt;). Unfortunately, before the 80386 there was no method to &quot;skin&quot; such programs. This is why there was no console window in Windows 3.x running in 286 mode but you could only run MS-DOS programs in full screen mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And the method used by 32-bit OSs is anything but easy to implement.)&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2019-04-08T18:42:55.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9630" PostTypeId="2" ParentId="9625" CreationDate="2019-04-08T18:54:12.573" Score="5" Body="&lt;p&gt;There are at least two builds of Copland still in public distribution:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;D7E1, from November 1995; and&lt;/li&gt;&#xA;&lt;li&gt;D11E4, from June 1996.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The former advertises itself as 'Copland' and will boot only on select PowerPC 601-based machines. The latter is 'MacOS 8' and adds support for some PowerPC 604s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition I can find references to a D9, which is still a Copland rather than a MacOS, but otherwise seems to be only vaguely documented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NeXT was formally acquired in February 1997 so one would dare imagine little if any work after June 1996, as there was the whole process of evaluating licensing Windows NT or Solaris versus acquiring Be or NeXT in between giving up on Copland and acquiring NeXT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.pagetable.com/?p=211&quot; rel=&quot;noreferrer&quot;&gt;https://www.pagetable.com/?p=211&lt;/a&gt; on the naming conventions of different releases;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.applefritter.com/node/7029&quot; rel=&quot;noreferrer&quot;&gt;https://www.applefritter.com/node/7029&lt;/a&gt; on PowerPC support differences between releases; and&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://512pixels.net/downloads/copland-docs/How%20to%20Install%20D11E4.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://512pixels.net/downloads/copland-docs/How%20to%20Install%20D11E4.pdf&lt;/a&gt; is the release notes for D11E4, putting a definite date on that.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As I said, both D7E1 and D11E4 remain available for download, which is great evidence that more than one build exists but not something I want to link to.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-04-08T18:54:12.573" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9631" PostTypeId="5" CreationDate="2019-04-09T10:59:35.280" Score="0" Body="&lt;p&gt;For questions relating to the Econet network system developed by Acorn Computers, known for its use on the BBC Microcomputer, Archimedes, and Risc PC ranges.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-09T12:41:17.523" LastActivityDate="2019-04-09T12:41:17.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9632" PostTypeId="4" CreationDate="2019-04-09T10:59:35.280" Score="0" Body="For questions relating to the Econet network system developed by Acorn Computers." OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-09T12:41:21.727" LastActivityDate="2019-04-09T12:41:21.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9633" PostTypeId="2" ParentId="8220" CreationDate="2019-04-09T14:19:55.993" Score="4" Body="&lt;p&gt;I see no reason to believe that the Pokémon Red cartridge (nor the Green one) is fake.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why they're not fake&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The small portion of the outer cartridge and labels in your picture shows a high standard of printing on both labels, far better than that which I've seen on fake cartridges myself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact that the battery may have been replaced isn't an indicator of a fake: most (all?) original cartridges' batteries will have been drained over the decades, and if a modern-day owner wants to save their progress, they will have to replace the battery. Although the fact that both batteries have 1997 date codes (97-xx) suggests that they are, in fact, original.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PCBs of both cartridges look remarkably similar, including the shape and style of the lettering. The lettering of the two large chips on the left (the MBC1 Memory Bank Controller and the GM76C256 Static RAM) appear identical, with the exception of minor differences on the date codes. While the GM76C256 would be commercially available, the MBC1 is a custom Nintendo chip, and the best of replicas would typically use a slightly different font for the chip marking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By comparison, look at the obvious differences in the counterfeit (Game Boy Advance) games shown on these &lt;a href=&quot;https://theoldschoolgamevault.com/blog/articles/744-how-to-spot-fake-pokemon-games&quot; rel=&quot;nofollow noreferrer&quot;&gt;two&lt;/a&gt; &lt;a href=&quot;https://caggames.weebly.com/how-to-spot-a-fake-pokemon-gba-game.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;pages&lt;/a&gt;. The board layout of the fakes is markedly different, using chips of different size, and perhaps specification, to the genuine games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Returning to your two cartridges, the right-hand chip, the ROM chip, looks quite different for the Green and Red versions. They are, however, labelled the correct title codes for the respective games: DMG-APBJ and DMG-APAJ (matching &lt;a href=&quot;http://passat.neostrada.pl/zabikt/GB.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;this list&lt;/a&gt;). The first of the two pages I linked to states that genuine cartridges typically have one chip labelled 'MX', which your suspect Red cartridge does. (It appears that MX was a supplier of RAM chips for Nintendo, and the same style of chip is used in &lt;a href=&quot;https://gbhwdb.gekkio.fi/cartridges/DMG-APOJ-0/gekkio-1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;these&lt;/a&gt; &lt;a href=&quot;https://gbhwdb.gekkio.fi/cartridges/DMG-ATAJ-0/gekkio-1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;games&lt;/a&gt;.) Your Green cartridge's chip, on the other hand, matches the genuine one seen on &lt;a href=&quot;https://gbhwdb.gekkio.fi/cartridges/DMG-APBJ-1/max-m-1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do bear in mind that these chips and the PCB were placed inside an opaque grey cartridge, and hardly any regular owner would ever open the cartridge up. Given that, if this &lt;em&gt;were&lt;/em&gt; a fake, the effort made by the fakers to so accurately replicate the appearance of something that would never be seen appears exceptional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What could be causing your cartridge to crash&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://pdf1.alldatasheet.com/datasheet-pdf/view/82427/HYNIX/GM76C256C.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;GM76C256&lt;/a&gt; SRAM chip gives 32 kilobytes of storage. Not all of this space is used for save data, much of it is used for working RAM (WRAM) alongside the 8 kilobytes of RAM inside the Game Boy itself (HRAM). A map of how this RAM is used can be found &lt;a href=&quot;https://datacrystal.romhacking.net/wiki/Pok%C3%A9mon_Red/Blue:RAM_map&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A common fault with old computers is the failure of RAM chips, which can fail in many different ways, ranging from the totally obvious to the annoyingly subtle. I suspect that part of the GM76C256 RAM chip is no longer working properly, and at some point when playing, some element of the game (possibly a counter) misbehaves when encountering the RAM fault and crashes the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possibility is that the Memory Bank Controller has developed a fault, and is not paging the requested banks of RAM or ROM correctly when requested by the Game Boy. While it may be possible to buy a new GM76C256 and fit it as a replacement, it's unlikely that you'd be able to find another MBC1 chip except by scavenging one from another cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A weakness in this explanation is that I am unable to explain why such a crash would be mistaken as a removal of the cartridge by your Game Boy Player. I'm afraid I don't know enough about the operation of the Game Boy platform to be able to say whether these suggested faults could (or could not) be interpreted like this in real life. But I am fairly confident that even though your cartridge is faulty, it is unlikely to be a fake.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-09T14:38:23.313" LastActivityDate="2019-04-09T14:38:23.313" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9634" PostTypeId="1" AcceptedAnswerId="9635" CreationDate="2019-04-09T15:00:26.430" Score="11" ViewCount="957" Body="&lt;p&gt;I had my first programming experience in the late 80s / early 90s on a Schneider (Amstrad) CPC 464 in Basic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember that when a program was running, depending on the current workload of the processor you could hear a faint buzzing sound from the integrated speakers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Especially when an empty &lt;code&gt;for&lt;/code&gt; loop was running (like &lt;code&gt;for i = 1 to 500 : next&lt;/code&gt;) which was regularly used to get short waiting times (as there was no &lt;code&gt;sleep&lt;/code&gt; command IIRC), you could hear this buzzing which gradually changed its frequency during the loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: Was this a feature (as an audible feedback that the computer was working) or a consequence from insufficient decoupling of circuits?&lt;/p&gt;&#xA;" OwnerUserId="4487" LastActivityDate="2019-04-10T12:29:27.407" Title="Why could you hear an Amstrad CPC working?" Tags="&lt;cpc464&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9635" PostTypeId="2" ParentId="9634" CreationDate="2019-04-09T17:04:42.067" Score="13" Body="&lt;p&gt;There seems to be a slight misunderstanding: The CPU in a computer is (almost) never &lt;em&gt;doing nothing&lt;/em&gt; (excluding power save states which was largely unknown at times the Amstrad was en vogue). So there's no such thing as &quot;workload of a processor&quot; going up or down - The CPU in an Amstrad is constantly running at 4 MHz, constantly under the same workload. If there's nothing do do, like executing a BASIC program), the CPU is, well, busy idling around at the same speed with the same &quot;workload&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you possibly &lt;em&gt;can&lt;/em&gt; hear, however, is the CPU repeatedly doing the same thing, like operating in tight loops that can, through electrical or mechanical interference (with the monitor or audio signal, for example), create audible frequencies that you may hear. That was definitely not an intended feature. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Operators of mainframes sometimes could hear whether their machines were running properly (or had crashed) by listening to the interference noise they produced, sometimes even tried to amplify the noise. (See &lt;a href=&quot;https://books.google.com.qa/books?id=xK6N7PCkHv8C&amp;amp;pg=PA162#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; book, page 161ff)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You were experiencing some similar effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, the sound of historic computers operating can even be &lt;a href=&quot;https://motherboard.vice.com/en_us/article/8qxjzp/this-is-what-70-years-of-computing-sounds-like&quot; rel=&quot;noreferrer&quot;&gt;marketed as art&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-04-09T17:18:22.273" LastActivityDate="2019-04-09T17:18:22.273" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9636" PostTypeId="2" ParentId="9226" CreationDate="2019-04-09T19:35:42.563" Score="6" Body="&lt;p&gt;The Username is indeed &quot;Network Manager&quot;, the password is &quot;mail&quot;. Tried a few things and got it by chance.&lt;/p&gt;&#xA;" OwnerUserId="10295" LastActivityDate="2019-04-09T19:35:42.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9637" PostTypeId="2" ParentId="1" CreationDate="2019-04-10T07:05:33.727" Score="3" Body="&lt;p&gt;Update.  There is now quite a bit of PDP-6 software, but almost all of it from MIT:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Monitor from DEC.&lt;/li&gt;&#xA;&lt;li&gt;SYSTEM GEN, low level DECtape formatting.&lt;/li&gt;&#xA;&lt;li&gt;MACDMP, file system on DECtapes.&lt;/li&gt;&#xA;&lt;li&gt;DDT, debugger.&lt;/li&gt;&#xA;&lt;li&gt;TECO, editor.&lt;/li&gt;&#xA;&lt;li&gt;MIDAS, assembler.&lt;/li&gt;&#xA;&lt;li&gt;STINK, linker.&lt;/li&gt;&#xA;&lt;li&gt;LISP.&lt;/li&gt;&#xA;&lt;li&gt;Spacewar!&lt;/li&gt;&#xA;&lt;li&gt;LIFE.&lt;/li&gt;&#xA;&lt;li&gt;MacHack VI... we have a timesharing version, unsure if it runs standalone on a PDP-6.&lt;/li&gt;&#xA;&lt;li&gt;David Silver's flight simulator.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Get the latest updates here: &lt;a href=&quot;https://github.com/PDP-10/its/issues?q=label%3Apdp6&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/PDP-10/its/issues?q=label%3Apdp6&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: This was created to collect everything:&lt;br&gt;&#xA;&lt;a href=&quot;https://github.com/PDP-10/pdp6-programs&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/PDP-10/pdp6-programs&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2019-04-12T05:22:24.203" LastActivityDate="2019-04-12T05:22:24.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9638" PostTypeId="1" AcceptedAnswerId="9639" CreationDate="2019-04-10T11:36:09.520" Score="13" ViewCount="1857" Body="&lt;p&gt;Acorn's line of ARM-based Archimedes computers was common in UK schools in the 1990s, and many classrooms had an A3000, A4000, or A5000 computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The function keys of the A3000 were a distinctive red colour:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OERdM.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OERdM.jpg&quot; alt=&quot;Image of A3000 with red function keys&quot;&gt;&lt;/a&gt;(image from &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Acorn_A3000_front_view.jpg&quot; rel=&quot;noreferrer&quot;&gt;Wikimedia Commons&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The A4000, and A5000 (pictured), had dark grey function keys, similar to PC keyboards:&lt;a href=&quot;https://i.stack.imgur.com/35VJT.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/35VJT.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;(image from &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Acorn_Archimedes_A5000_open.jpg&quot; rel=&quot;noreferrer&quot;&gt;Wikimedia Commons&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was the A3000's keyboard so colourful by comparison?&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="576" LastEditDate="2019-04-11T09:46:32.210" LastActivityDate="2019-04-11T09:46:32.210" Title="Why did Acorn's A3000 have red function keys?" Tags="&lt;acorn&gt;&lt;archimedes&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9639" PostTypeId="2" ParentId="9638" CreationDate="2019-04-10T11:50:54.090" Score="19" Body="&lt;p&gt;The red function keys were a carry-over from the days of the BBC's Computer Literacy Project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first computers made for the BBC by Acorn, the &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_Micro&quot; rel=&quot;noreferrer&quot;&gt;Model A and Model B&lt;/a&gt; featured red function keys:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/OPDeH.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OPDeH.jpg&quot; alt=&quot;Image of BBC Micro Model A/B&quot;&gt;&lt;/a&gt;&#xA;These red keys were a feature of all &quot;BBC&quot; computers, including the subsequent BBC Master series.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first machines of Acorn's Archimedes line were the A300 and A400 series. The A300s had red function keys, as they still carried BBC branding. The A400s weren't BBC branded, and thus didn't have the red keys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look closely at the top-right corner of the A3000's keyboard (see image in the question), you'll see the logo of the &quot;BBC Microcomputer System&quot; next to the A3000 logo. The A4000 and A5000 weren't marketed as BBC machines, and thus, like the A400 series, they weren't allowed to have red function keys.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-04-10T11:50:54.090" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9640" PostTypeId="2" ParentId="9634" CreationDate="2019-04-10T12:03:41.573" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What you possibly can hear, however, is the CPU repeatedly doing the same thing, like operating in tight loops that can, through electrical or mechanical interference (with the monitor or audio signal, for example), create audible frequencies that you may hear. That was definitely not an intended feature. - tofro&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In addition to what tofro has answered, I'd like to point out that some types of interference is a result from multiple activities and/or subsystems in a computer, but others may have a direct correlation to a simple operation of the machine, such as running a special sequence of instructions or toggling the data inside in RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some cases, the nature of this interference can be &lt;em&gt;completely understood&lt;/em&gt; by the programmer, and renders it &lt;em&gt;controllable&lt;/em&gt;. This possibility was well-known back to the era of mainframes and minicomputers, and I'd like to give several examples.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=akvSE5Z474c&quot; rel=&quot;noreferrer&quot;&gt;Here's the video of a 1971 &lt;strong&gt;DEC LAB-8/e minicomputer&lt;/strong&gt; playing music&lt;/a&gt;. The music is generated by generating noise induced into an AM radio receiver near the CPU.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Later, it was rediscovered by the members of the Homebrew Computer Club on the &lt;strong&gt;Altair 8800&lt;/strong&gt;. Quote &lt;em&gt;What the Dormouse Said: How the 60s Counterculture Shaped the Personal Computer&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Dompier started again, and this time he succeeded. Previously he had&#xA;  discovered that the unshielded computer could be programmed to generate&#xA;  tones by interfering with a transistor radio. He spent hours figuring out&#xA;  how to create a musical scale. Then he used the radio as an output device&#xA;  for the computer. At the Homebrew meeting lightning struck when,&#xA;  unexpectedly, strains from the Beatles' &quot;Fool on the Hill&quot; emerged. When the song ended, the crowd crammed into the room jumped to their feet offering thunderous applause. After the audience calmed down, the song was repeated and then, foreshadowing a world of vastly more powerful computers, the Altair broke into a rendition of &quot;Daisy,&quot; raising the specter of the almost conscious HAL from the movie 2001: A Space Odyssey. For the first time there was a computer that you could build yourself that actually did something! Felsenstein eventually calmed the crowd down and noted, &quot;Okay, there is music, but we're not exactly changing the world.&quot; Nobody cared. Everyone wanted to hear it again, and so Dompier hit the button, and the music started all over again. When it ended, he received another round of applause.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The same technique was again repopularized and reimplemented by various projects. For example, &lt;a href=&quot;https://github.com/fulldecent/system-bus-radio&quot; rel=&quot;noreferrer&quot;&gt;compile and run&lt;/a&gt; this program using a 2015 model MacBook Air. Then use a Sony STR-K670P radio receiver with the included antenna and tune it to 1580 kHz on AM You should hear the &quot;Mary Had a Little Lamb&quot; tune playing repeatedly. The actual emissions are caused by the &lt;code&gt;_mm_stream_si128&lt;/code&gt; instruction that writes through to a memory address. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The above examples all exploited radio-frequency interference. But mechanical noise is also exploitable in some cases. For example, &lt;a href=&quot;https://rkapl.cz/thinkpad-coilwhine/&quot; rel=&quot;noreferrer&quot;&gt;this program&lt;/a&gt; can generate a faint musical tones (Imperial March, but easily modifiable) from the coil whine of a Thinkpad T550 by rapidly changing the Intel CPU P-state, thus stressing the power supply and induces a coil whine with controllable frequency. I've personally tested it on other &quot;classical&quot; Thinkpads, such as Thinkpad X200 and Thinkpad X220, and it also works. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="12128" LastEditorUserId="12128" LastEditDate="2019-04-10T12:29:27.407" LastActivityDate="2019-04-10T12:29:27.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9641" PostTypeId="5" CreationDate="2019-04-10T12:04:42.483" Score="0" Body="&lt;p&gt;The Archimedes line of computers, originated by Acorn Computers, were the first commercially available computers to use the ARM microprocessor. After an interim operating system (Arthur) they used the RISC OS operating system, later used by the RISC PC line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use this tag for questions relating to hardware, software, or peripherals of the Archimedes computers, such as the A305, A410/1, A5000, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Questions relating to the A7000 may be better suited to the &lt;strong&gt;risc-pc&lt;/strong&gt; tag.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-10T14:03:54.993" LastActivityDate="2019-04-10T14:03:54.993" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9642" PostTypeId="4" CreationDate="2019-04-10T12:04:42.483" Score="0" Body="For questions relating to Acorn's Archimedes computers" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-10T14:04:03.133" LastActivityDate="2019-04-10T14:04:03.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9643" PostTypeId="2" ParentId="9625" CreationDate="2019-04-10T13:24:23.993" Score="6" Body="&lt;p&gt;The exact DR1 was &quot;unreleased&quot;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=DTBJlqPlz2o&quot; rel=&quot;noreferrer&quot;&gt;Youtube: Apple's Copland DR1 unreleased Mac OS prototype&lt;/a&gt;&lt;br&gt;&#xA;  Published on Apr 3, 2010&#xA;  This is the never-released Copland OS (System 8) prototype from 1996, booting on a PowerMac 7600/66 AV. It boots to the &quot;Z Theme&quot;&#xA;  In this video you can see the cool Mac OS logo fading in, and then a bunch of verbose messages as the hardware is examined and initialized.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The OS itself is very unstable and crashes very frequently -- this release was intended to help hardware vendors develop drivers for the future release, and came with software so that it could be debugged from a connected PC.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A more convincing demo from Apple is &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=bXfsAYUjvms&quot; rel=&quot;noreferrer&quot;&gt;Youtube: Mac OS 8 (code name Copland) Demos: &lt;/a&gt;&lt;br&gt;&#xA;  Published on Feb 15, 2014&#xA;  June 28, 1996 - Demonstration of Apple Computer's operating system Mac OS 8 (code name Copland). Demos include:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Folder navigation.&#xA;  Content searches.&#xA;  Organizing information on the desktop.&#xA;  Multitasked operations.&#xA;  A scalable user interface.&#xA;  Personalized workspaces.&#xA;  The computer as assistant.&#xA;  QuickDraw 3D.&#xA;  Quicktime conferencing.&#xA;  Cyberdog.&#xA;  QuickDraw 3D and QuckTime multimedia on the Internet.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;An Exit button displayed in the lower left hand side corner of each demo is unrelated to Mac OS 8 (code name Copland).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As with the renaming conundrums, rebranding Mac OS 8 Copland by ripping out most of the stuff that would have made it &quot;Copland&quot;, it gets difficult to ascertain at what stage the different available 'releaases' are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, &lt;a href=&quot;https://www.macintoshrepository.org/&quot; rel=&quot;noreferrer&quot;&gt;Macintosh Repository&lt;/a&gt; offers abandonware download links for &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://www.macintoshrepository.org/17006-copland-d9-copland-developer-release-tools-edition-&quot; rel=&quot;noreferrer&quot;&gt;Copland D9 (Copland Developer Release: Tools Edition)&lt;/a&gt;&lt;br&gt;&#xA;  &lt;a href=&quot;https://www.macintoshrepository.org/531-copland-os-beta-d7e1-d11e4-june-release-d11e4-&quot; rel=&quot;noreferrer&quot;&gt;Copland OS Beta (D7E1, D11E4 June Release, D11E4)&lt;/a&gt;&lt;br&gt;&#xA;  &lt;a href=&quot;https://www.macintoshrepository.org/16022-mac-os-8-0-beta-copland-&quot; rel=&quot;noreferrer&quot;&gt;Mac OS 8.0 Beta &quot;Copland&quot;&lt;/a&gt;&lt;br&gt;&#xA;  &lt;a href=&quot;https://www.macintoshrepository.org/15633-mac-os-8-0-copland-beta-builds-&quot; rel=&quot;noreferrer&quot;&gt;Mac OS 8.0 Copland (Beta Builds)&lt;/a&gt;  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And the fittingly named &lt;a href=&quot;https://winworldpc.com/product/mac-os-8/copland&quot; rel=&quot;noreferrer&quot;&gt;WinWorldPC offers&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://winworldpc.com/download/41c3a470-e284-a218-c39a-11c3a4e284a2&quot; rel=&quot;noreferrer&quot;&gt;Apple Mac OS 8.0 (&quot;Copland&quot; 8.0.B5) (SIT)&lt;/a&gt;&lt;br&gt;&#xA;  &lt;a href=&quot;https://winworldpc.com/download/41c3a5c2-b625-18c3-9a11-c3a4e284a2ef&quot; rel=&quot;noreferrer&quot;&gt;Apple Mac OS 8.0 (&quot;Copland&quot; 8.0.D11E4) (SIT)&lt;/a&gt;&lt;br&gt;&#xA;  &lt;a href=&quot;https://winworldpc.com/download/41c3a32a-5d18-c39a-11c3-a4e284a2c3a5&quot; rel=&quot;noreferrer&quot;&gt;Apple Mac OS 8.0 (&quot;Copland&quot; 8.0.D7E1 A) (SIT)&lt;/a&gt;  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Installation notes: There are no known emulators that will run MacOS 8 Copeland. To run it, you must install it on a supported Macintosh PowerPC computer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You might have to look at the dates quite closely:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://www.kernelthread.com/publications/appleoshistory/6.html&quot; rel=&quot;noreferrer&quot;&gt;Apple finally decided to cancel Copland in May 1996.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And you might read more about &lt;a href=&quot;https://512pixels.net/2016/page/5/&quot; rel=&quot;noreferrer&quot;&gt;D11E4, from Apple documents&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;links&lt;/em&gt; to these archives should be quite fine. Not only because they are only &lt;em&gt;linking&lt;/em&gt; abandonware, and not everyone on this globe resides in preposterously restrictive jurisdictions, and it seems this was even distributed partially to the general public in &lt;a href=&quot;https://www.macworld.com/article/1133222/time_machine_copland.html&quot; rel=&quot;noreferrer&quot;&gt;1996's Macworld&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6802" LastActivityDate="2019-04-10T13:24:23.993" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9644" PostTypeId="1" CreationDate="2019-04-10T13:50:40.810" Score="11" ViewCount="441" Body="&lt;p&gt;The BBC's &lt;a href=&quot;https://computer-literacy-project.pilots.bbcconnectedstudio.co.uk/history&quot; rel=&quot;noreferrer&quot;&gt;Computer Literacy Project&lt;/a&gt; was launched in 1982, and saw the public service broadcaster seek to raise awareness and educate the general public about the growing field of computing. They famously commissioned a microcomputer to their own specification, to tie in with the TV programmes they made (such as The &lt;em&gt;Computer Programme&lt;/em&gt; and &lt;em&gt;Making the Most of the Micro&lt;/em&gt;). This was of course the &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_Micro&quot; rel=&quot;noreferrer&quot;&gt;BBC Microcomputer&lt;/a&gt;, or the Beeb.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the original Models A and B, Acorn manufactured further models which continued to carry the BBC name. The BBC's &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_Domesday_Project&quot; rel=&quot;noreferrer&quot;&gt;Domesday Project&lt;/a&gt;, a crowd-sourced survey of life in the 1980s (to mark the 900th anniversary of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Domesday_Book&quot; rel=&quot;noreferrer&quot;&gt;original census of England&lt;/a&gt; in 1986), made use of an expanded BBC Master to display the information gathered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1987 Acorn launched their range of Archimedes computers, based on their new 32-bit ARM processor. Some low-end models, including the A305, A310 and A3000 were branded as BBC machines (e.g. BBC A3000), had the same red function keys as the earlier 8-bit machines, and carried the owl logo of the Computer Literacy Project. But after the release of the A3000 in 1989, all new models were branded as Acorn machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC's page on the Computer Literacy Project describes it thus:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Computer Literacy Project, a bold, multimedia initiative was planned between 1979 and 1982 and launched in March 1982. It continued in various forms until 1989.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I suspect that the 1989 date corresponds to the release of the A3000, but after the &quot;high water mark&quot; of BBC-Acorn co-operation with the Domesday Project in 1986, I find myself wondering how involved the BBC were with the Archimedes line in the late 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the BBC have any direct involvement with the development of the Archimedes machines (or the software used on them), or was their involvement limited to a BBC badge on a few of the models?&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="5311" LastEditDate="2019-05-03T14:14:21.510" LastActivityDate="2019-05-03T14:14:21.510" Title="What role did the BBC have in the development and marketing of Acorn Archimedes computers?" Tags="&lt;acorn&gt;&lt;archimedes&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9645" PostTypeId="5" CreationDate="2019-04-10T14:34:25.353" Score="0" Body="&lt;p&gt;The PCMCIA standard, later marketed as PC Card, was a 16-bit interface originally designed for memory cards, but later allowed laptop computers to be expanded with modems, network cards, data storage, and other interfaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Version 5 of the standard, also known as Cardbus, included a 32-bit interface.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-10T16:11:38.330" LastActivityDate="2019-04-10T16:11:38.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9646" PostTypeId="4" CreationDate="2019-04-10T14:34:25.353" Score="0" Body="For questions about PCMCIA and Cardbus expansion cards" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-10T16:11:43.400" LastActivityDate="2019-04-10T16:11:43.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9647" PostTypeId="1" CreationDate="2019-04-10T18:19:33.107" Score="2" ViewCount="484" Body="&lt;p&gt;While cleaning out some old computers owned by my grandfather I came across some files marked with the file format .95END that had creation dates in early 1995 (though they could be from much earlier, and that was just when they were archived).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They look to be some kind of binary document with text embedded in them I think they are some kind of word processing file format but I can find no reference to it on the internet.&lt;/p&gt;&#xA;" OwnerUserId="8662" LastActivityDate="2019-04-15T20:32:49.750" Title="What is a .95END file?" Tags="&lt;software&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9648" PostTypeId="5" CreationDate="2019-04-10T18:45:25.777" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-04-10T18:45:25.777" LastActivityDate="2019-04-10T18:45:25.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9649" PostTypeId="4" CreationDate="2019-04-10T18:45:25.777" Score="0" Body="For questions relating to the supercomputers made by Cray Research and its successors." OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-10T20:40:04.873" LastActivityDate="2019-04-10T20:40:04.873" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9650" PostTypeId="1" AcceptedAnswerId="9651" CreationDate="2019-04-11T05:24:18.520" Score="18" ViewCount="6542" Body="&lt;p&gt;In the early era of “portable” or luggable computers, such as the mains powered  &lt;a href=&quot;https://en.wikipedia.org/wiki/Osborne_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Osborne 1&lt;/a&gt; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Compaq_Portable&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compaq Portable&lt;/a&gt;, 5¼-inch floppy drives were the standard storage medium. When battery-powered laptops came of age in the late 1980s, 90 mm (“3½-inch”) floppy drives were generally used (see for example the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PC_Convertible&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM PC Convertible&lt;/a&gt;, which used two of them).&lt;/p&gt;&#xA;&lt;p&gt;A few battery powered laptops, such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Toshiba_T1100&quot; rel=&quot;nofollow noreferrer&quot;&gt;Toshiba T1100&lt;/a&gt;, supported the use of an external 5¼-inch floppy drive. This allowed them to access data on these larger floppies, and transfer data to &amp;amp; from existing desktop machines.&lt;/p&gt;&#xA;&lt;p&gt;Was there a battery-powered laptop computer that had a 5¼″ floppy drive built into its chassis, instead of being a separate external add-on?&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="15334" LastEditDate="2020-08-28T07:54:25.903" LastActivityDate="2021-02-06T05:22:39.517" Title="Did any laptop computers have a built-in 5¼-inch floppy drive?" Tags="&lt;laptop&gt;&lt;floppy-drive&gt;" AnswerCount="6" CommentCount="11" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9651" PostTypeId="2" ParentId="9650" CreationDate="2019-04-11T07:40:21.997" Score="15" Body="&lt;p&gt;As so often this depends on your definition of laptop - which is not an exact one either. There where many level of size and weight between a bulky schleppable like a Compaq Portable and a notebook sized computer. And only a few would work well on a lap. I wouldn't consider the T1100 be one of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, with the T1100 as cornerstone, I think the Morrow Pivot of 1984, and it's successor, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Morrow_Pivot_II&quot; rel=&quot;noreferrer&quot;&gt;Pivot II&lt;/a&gt; of 1985, also sold as &lt;a href=&quot;http://www.computinghistory.org.uk/det/37920/Zenith-ZFL-171-42-Portable/&quot; rel=&quot;noreferrer&quot;&gt;Zenith Z-171&lt;/a&gt; would qualify. It's been a 8088 based PC clone with one or two 5.25&quot; drives and could operate from an &lt;a href=&quot;http://www.flickriver.com/photos/jayce_31/4140462193/&quot; rel=&quot;noreferrer&quot;&gt;optional battery pack&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NwM7N.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NwM7N.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Picture taken &lt;a href=&quot;https://en.wikipedia.org/wiki/File:Pivotcjacobs627.jpg&quot; rel=&quot;noreferrer&quot;&gt;from Wikipedia&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another candidate could be the &lt;a href=&quot;http://oldcomputers.net/commuter.html&quot; rel=&quot;noreferrer&quot;&gt;Visual Commuter 1083&lt;/a&gt; of 1983. While it looks more like a laptop, due the conventional style of opening the screen instead of keyboard, it's way bigger than the Morrow Pivot (*2). In fact, it's so wide (and quite low, less than half height), that it makes the 5.25&quot; drives look like 3.5&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/S3W94.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S3W94.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Picture taken from &lt;a href=&quot;http://oldcomputers.net/commuter.html&quot; rel=&quot;noreferrer&quot;&gt;Oldcomputers.net&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then there is of course what could be called 'Lunchbox' format (*1), best known from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Compaq_Portable_III&quot; rel=&quot;noreferrer&quot;&gt;Compaq Portable III&lt;/a&gt; of 1987, but introduced already around 1985 by Taiwan manufacturers. Being somewhere more portable than the classic luggables and definitely more flexible due the large interior it was quite successful from the mid 80s to mid 90s, producing an endless stream of variations, &lt;a href=&quot;http://oldcomputer.info/portables/hs386/index.htm&quot; rel=&quot;noreferrer&quot;&gt;many including 5.25&quot; drives&lt;/a&gt; and batteries, even way into the 1990s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JNDLx.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JNDLx.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Taken from &lt;a href=&quot;http://oldcomputer.info/gallery.php?p=Museum/Portable/Highscreen_386&quot; rel=&quot;noreferrer&quot;&gt;Oldcomputer.info&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They (the lunchboxes, not 5.25&quot;s) cover a niche until today for special to type configuration (like for embedded systems maintenance) or portable high performance machines. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;A somewhat stretched candidate would be an &lt;a href=&quot;https://www.obsoletecomputermuseum.org/appleiic/&quot; rel=&quot;noreferrer&quot;&gt;Apple IIc&lt;/a&gt; like &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9650/did-any-laptop-computers-have-a-built-in-5-1-4-inch-floppy-drive/9651#comment31010_9650&quot;&gt;Tofro mentioned in a comment&lt;/a&gt;. Unlike assumed, there was an LCD available (from Apple and third party), as well as battery-packs (third party). Still, it lacks the &lt;em&gt;easy&lt;/em&gt; portability - at least before some glue (or a bag) is applied :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1NI83.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1NI83.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Taken from &lt;a href=&quot;https://www.obsoletecomputermuseum.org/appleiic/&quot; rel=&quot;noreferrer&quot;&gt;Obsolete Computer Museum&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/780/tofro&quot;&gt;According to Tofro&lt;/a&gt; :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Sizes as width x height x depth&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Morrow Pivot: 32 x 25 x 14 cm (12,8 x 9,8 x 5,5 inch)&lt;/li&gt;&#xA;&lt;li&gt;Commuter 1083: 45 x 9 x 38 cm (18 x 3,5 x 15 inch)&lt;/li&gt;&#xA;&lt;li&gt;Compaq Portable III : 41 x 25 x 20 cm (16 x 10 x 8 inch)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-05T09:17:54.230" LastActivityDate="2019-07-05T09:17:54.230" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="9652" PostTypeId="2" ParentId="9650" CreationDate="2019-04-11T08:10:28.983" Score="17" Body="&lt;p&gt;The closest thing to a modern laptop that I'm aware of featuring an internal 5 1/4 drive is the &lt;a href=&quot;http://oldcomputers.net/findex.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Findex&lt;/a&gt; of 1979 which had a fairly complete (optionally battery-powered) CP/M computer including a hard-sectored floppy drive, a 40 x 6 plasma display and even a printer in a package of about the size of a (quite large) travel typewriter, weighing 20 pounds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FyyOD.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FyyOD.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wouldn't exactly call it a &lt;em&gt;laptop&lt;/em&gt;, but you can at least imagine it could be operated as such - I mean, literally on your laps, at least for a while... (It was designed as a portable computer and it &lt;strong&gt;did&lt;/strong&gt; feature a carrying handle and optional battery - although apparently designed in more as UPS rather than operating power supply - and carrying case).&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-04-12T22:14:55.153" LastActivityDate="2019-04-12T22:14:55.153" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="9653" PostTypeId="2" ParentId="3166" CreationDate="2019-04-11T09:52:38.297" Score="6" Body="&lt;p&gt;This isn't really an answer to the question, but the comments repeatedly talk about Sophie Wilson's claim to be able to execute 100k+ ARM instructions per second. This is an impossibility on any normal 6502 and so she must have misremembered or the commenters must be misinterpreting what she said. However, it's hard to show why it is wrong in a comment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a refutation of the claim and a demonstration of why it can't be true.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take supercat's example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;add r0,r1,r2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This instruction adds the content of r2 to r1 and places the result in r0. Registers are 32 bits wide, so in the 6502, the minimum program is &lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CLC           ; 2 cycles&#xA;LDA r1_0      ; 3 cycles for zero page&#xA;ADC r2_0      ; 3 cycles for zero page&#xA;STA r0_0      ; 3 cycles for zero page&#xA;LDA r1_1      ; 3 cycles for zero page&#xA;ADC r2_1      ; 3 cycles for zero page&#xA;STA r0_1      ; 3 cycles for zero page&#xA;LDA r1_2      ; 3 cycles for zero page&#xA;ADC r2_2      ; 3 cycles for zero page&#xA;STA r0_2      ; 3 cycles for zero page&#xA;LDA r1_3      ; 3 cycles for zero page&#xA;ADC r2_3      ; 3 cycles for zero page&#xA;STA r0_3      ; 3 cycles for zero page&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;38 clock cycles in total. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But note that all of the addresses are hardcoded. Using this scheme you would need 16 x 16 x 16 blocks of code just to account for all possible ways to add two registers together. You have to be a bit more clever. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the last operand need not be a register, so it would make sense to fetch it from an address in a zero page location. The simplest solution for the other source and destination registers would be to do the same thing so you would end up with some code like this (note that the Y register is used to index the byte number):&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CLC                  ; 2 cycles&#xA;LDY #0               ; 2 cycles&#xA;LDA (sourceR),Y      ; 5 cycles for zero page&#xA;ADC (operand),Y      ; 5 cycles for zero page&#xA;STA (destR),Y        ; 5 cycles for zero page&#xA;INY                  ; 2 cycles&#xA;LDA (sourceR),Y      ; 5 cycles for zero page&#xA;ADC (operand),Y      ; 5 cycles for zero page&#xA;STA (destR),Y        ; 5 cycles for zero page&#xA;INY                  ; 2 cycles&#xA;LDA (sourceR),Y      ; 5 cycles for zero page&#xA;ADC (operand),Y      ; 5 cycles for zero page&#xA;STA (destR),Y        ; 5 cycles for zero page&#xA;INY                  ; 2 cycles&#xA;LDA (sourceR),Y      ; 5 cycles for zero page&#xA;ADC (operand),Y      ; 5 cycles for zero page&#xA;STA (destR),Y        ; 5 cycles for zero page&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;70 clock cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of that, you need to add instruction decoding. This will involve, at a minimum, reading all four bytes of the instruction and because it is specified by the PC, you must do four zero page indirect loads and increment the PC either between each load or add four to it at the end (that's a 32 bit add).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would look something like this:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LDY #0          ; 2 cycles&#xA;LDA (r15),Y     ; 5 cycles (or 6)&#xA;; Do something    ? cycles&#xA;INY             ; 2 cycles&#xA;LDA (r15),Y     ; 5 cycles (or 6)&#xA;; Do something    ? cycles&#xA;INY             ; 2 cycles&#xA;LDA (r15),Y     ; 5 cycles (or 6)&#xA;; Do something    ? cycles&#xA;INY             ; 2 cycles&#xA;LDA (r15),Y     ; 5 cycles (or 6)&#xA;; Do something    ? cycles&#xA;CLC             ; 2 cycles&#xA;LDA r15         ; 3 cycles&#xA;ADC #4          ; 2 cycles&#xA;STA r15         ; 3 cycles&#xA;BCC endIncr15   ; 2 or 3 cycles&#xA;INC r15+1       ; 5 cycles&#xA;BNE endIncr15   ; 2 or 3 cycles&#xA;INC r15+2       ; 5 cycles&#xA;BNE endIncr15   ; 2 or 3 cycles&#xA;INC r15+3       ; 5 cycles&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A minimum of 38 cycles, assuming that adding 4 to the PC does not cause a carry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are up to a total of at least 108 clock cycles without even considering the decoding logic. Thinking about that, just to get the registers we need to do a mask (2 cycles) and two shifts (4 cycles) for each one to multiply the register number by four to get its address (NB the destination register is held in the top four bits of the third byte of the instruction, so actually, we need to divide it by four). That's another 18 cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a 4MHz 6502, we are already down to a maximum theoretical ARM speed of around 30,000 instructions per second for the simplest possible add instruction.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;superheat has come up with an optimisation for the add which is a compromise between my original all hard coded example and the generalised zero page indirect example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can have 16 copies of the following&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CLC                   ; 2 cycles&#xA;LDA regByte0,X        ; 4 cycles&#xA;ADC regByte0,Y        ; 4 cycles&#xA;STA regDestByte0      ; 3 cycles (assuming in zero page)&#xA;LDA regByte1,X        ; 4 cycles&#xA;ADC regByte1,Y        ; 4 cycles&#xA;STA regDestByte1      ; 3 cycles (assuming in zero page)&#xA;LDA regByte2,X        ; 4 cycles&#xA;ADC regByte2,Y        ; 4 cycles&#xA;STA regDestByte2      ; 3 cycles (assuming in zero page)&#xA;LDA regByte3,X        ; 4 cycles&#xA;ADC regByte3,Y        ; 4 cycles&#xA;STA regDestByte3      ; 3 cycles (assuming in zero page)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which comes in at 46 cycles instead of 70. &lt;code&gt;X&lt;/code&gt; and &lt;code&gt;Y&lt;/code&gt; are used as the the register numbers (or 2x or 4x of the register number depending on how the bytes of the registers are organised in memory). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you wouldn't use this in practice because one of the source operands can be far more general than the content of a register. It's far more likely that you would calculate the effective address of the second operand, put it in a zero page location and then indirectly address off that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course, none of the solutions addresses the fact that we have hard coded an &lt;code&gt;ADC&lt;/code&gt; between the load and the store. In reality, you'd do a &lt;code&gt;JMP&lt;/code&gt; through a vector table (5 extra cycles) and then a &lt;code&gt;JMP&lt;/code&gt; back to the relevant store (3 cycles) and you'd probably fetch both operands into two zero page locations, do the calculation into another zero page location and then store all four bytes back to the specified register, especially if you weren't deliberately optimising for speed.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, although supercat's optimisation would improve on my upper estimate of 30k operations per second, it wouldn't be enough to get to 100k and it does not take into account (neither did may example) the fact that generalising to more than just adding adds a whole lot more overhead that makes my 30k look optimistic.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2019-04-13T11:59:53.703" LastActivityDate="2019-04-13T11:59:53.703" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9654" PostTypeId="2" ParentId="9650" CreationDate="2019-04-11T10:58:17.457" Score="15" Body="&lt;p&gt;If the definition sought after is very strictly speaking &amp;quot;integrated 5.25 inch floppy&amp;quot; and &amp;quot;battery powered&amp;quot;, then I would like to enter the &lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?c=550&quot; rel=&quot;noreferrer&quot;&gt;Kaypro II from August 1982:&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3BKYK.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3BKYK.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which is a luggable and has&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Built In Media: Two 5.25'' SS/DD full-height floppies (190k)&lt;br /&gt;&#xA;Peripherals:      400 KB or 800 KB 5.25'' floppy drives, 10 MB hard disc, &lt;strong&gt;battery pack/charger&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So instead of 5.25inch peripheral disks, we have here an external battery pack.&lt;/p&gt;&#xA;&lt;p&gt;If for added fun we really want to stretch out this game of definitions, we might also take a look at what the military thought of as (trans-)portable computer that relies on batteries?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BWXVy.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BWXVys.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/FvLTr.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FvLTrs.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://staff.salisbury.edu/%7Erafantini/military.htm&quot; rel=&quot;noreferrer&quot;&gt;CGS-100 AN/TYQ-63&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;California Microwave builds a case called the CGS-100, inside this huge , heavy box lives a ISA plane board, a LCD display and a integrated keyboard mouse.&lt;br /&gt;&#xA;This system has a signal board P1-166 64 Meg processor board, a APTI SCSI controller, Dolch video card with flat panel driver and network card that I have installed.&lt;br /&gt;&#xA;&lt;strong&gt;The system came with a &lt;em&gt;dual 3.5/5 inch floppy&lt;/em&gt; that did not work so I replaced that with a standard 1.4&lt;/strong&gt;, also you can see the SCSI CD rom I installed to put windows 98 on the system. their is a SCSI hard drive that I hung in the bay later. And you can see Windows 98 is still going strong around here.&lt;br /&gt;&#xA;This is maybe the heaviest computer I have bought today, what you don't see is the hard shell plastic shipping container it arrived in. a custom built shipping case for this system. everything together weighed over one hundred pounds!&lt;br /&gt;&#xA;Have discovered that this is a part of the AN/TYQ-63 communications system and ran NT as a operating system, I have NT but would rather run 98.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;With such a toll in weight the battery was then conveniently stored on wheels, like that:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3wzTt.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3wzTt.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt; (&lt;a href=&quot;https://docplayer.net/45299878-Principal-technical-characteristics-of-u-s-marine-corps-communication-electronics-equipment.html&quot; rel=&quot;noreferrer&quot;&gt;PDF&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;But really a lot closer to what might be asked for would be the GRiD Case3 and later:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OHkG1.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OHkG1.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;While the &lt;a href=&quot;https://en.wikipedia.org/wiki/Grid_Compass&quot; rel=&quot;noreferrer&quot;&gt;Compass&lt;/a&gt; 1101 had no internal floppy drive, later systems did, such as the &lt;a href=&quot;http://oldcomputers.net/grid1101.html&quot; rel=&quot;noreferrer&quot;&gt;GRiDCase3&lt;/a&gt; seen above.&lt;/p&gt;&#xA;&lt;p&gt;The rear panel of the &lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?c=1054&amp;amp;st=1&quot; rel=&quot;noreferrer&quot;&gt;GRiDCase3&lt;/a&gt; also shows the battery compartment. Most GRiD systems released after the 1101 can run on battery-power. The internal power supply is ejected and a battery-pack is installed in its place.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="6802" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-04-13T09:31:39.253" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9655" PostTypeId="2" ParentId="1626" CreationDate="2019-04-11T11:27:16.833" Score="8" Body="&lt;p&gt;Electronic Gaming Monthly no. 124 from 1999 notes that the original Japanese Pokemon games had a long, difficult development process. The source code was so bad that when it came to doing the western versions the original Pokemon Red game was recreated using the newer Pokemon Green code, but even that was not an easy task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you have poor quality source code, cartridge size limitations, and a long development process which towards the end will inevitably focus on getting the game released rather than finding and fixing rare bugs, you end up with software like Pokemon Red and Blue. Brittle and full of obscure bugs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that both games were written in assembler, not a higher level language like C. At the time C compilers for embedded systems were not as advanced as they are now, and didn't support the Z80 all that well anyway, and tended to produce large and slow code. Most Gameboy games were written in assembler as a result, and prone to errors such as these.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-04-11T11:27:16.833" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9656" PostTypeId="1" AcceptedAnswerId="9657" CreationDate="2019-04-11T12:32:42.680" Score="5" ViewCount="716" Body="&lt;p&gt;As far as I know, old x86 CPUs (for example: the 8086 CPU) couldn't do floating point arithmetic, and in order to be able to do floating-point arithmetic, an x87 floating-point coprocessor should be attached to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The x87 floating-point coprocessor have instructions like &lt;code&gt;FILD&lt;/code&gt; and 8 registers (which are &lt;code&gt;st0&lt;/code&gt; to &lt;code&gt;st7&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if an 8086 CPU had an x87 floating-point coprocessor attached to it, can the 8086 CPU in this case execute the x87 floating-point coprocessor instructions and access its registers as if they were part of the 8086 CPU?&lt;/p&gt;&#xA;" OwnerUserId="12280" LastActivityDate="2019-04-11T15:52:44.817" Title="What can an 8086 CPU do if an x87 floating-point coprocessor is attached to it?" Tags="&lt;history&gt;&lt;assembly&gt;&lt;8086&gt;" AnswerCount="1" CommentCount="9" ClosedDate="2019-04-11T14:25:32.913" ContentLicense="CC BY-SA 4.0" />
  <row Id="9657" PostTypeId="2" ParentId="9656" CreationDate="2019-04-11T12:44:56.043" Score="11" Body="&lt;p&gt;The 8087 doesn’t add new capabilities to the 8086 itself; it acts purely as a co-processor — a similar model which might be more familiar nowadays is that of a GPU attached to a CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8087’s registers aren’t accessible to the 8086, and the 8086 doesn’t execute any 8087 instructions. Both processors read the instruction stream, as the 8086 reads it from memory; both can recognise instructions targeted at the 8087, so the 8087 will know to execute them, and the 8086 will know not to (although it will perform some processing if necessary — &lt;em&gt;e.g.&lt;/em&gt; address calculations). When necessary, the 8086 can be told to wait for the 8087 to finish processing an instruction. See &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/9173/79&quot;&gt;How did the 8086 interface with the 8087 FPU coprocessor?&lt;/a&gt; for details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data is provided to the 8087 either by loading immediate values from the instruction stream, by reading values from memory, or by loading constants. Data is read from the 8087 by asking the 8087 to write values from its registers to memory. Values can’t be copied directly between 8086 and 8087 registers.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-04-11T15:52:44.817" LastActivityDate="2019-04-11T15:52:44.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9658" PostTypeId="2" ParentId="9650" CreationDate="2019-04-11T22:22:31.550" Score="5" Body="&lt;p&gt;Nobody has mentioned the Xerox Notetaker yet, which I'd think has to be the earliest portable machine that's both battery powered and containing a 5.25&quot; floppy drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, at a bone crunching 22kg which is about twice the weight of the Osborne-1, it's somewhat stretching the definition of a laptop. Also, only ten prototypes were ever made.&lt;/p&gt;&#xA;" OwnerUserId="12147" LastActivityDate="2019-04-11T22:22:31.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9659" PostTypeId="2" ParentId="9647" CreationDate="2019-04-12T01:48:30.807" Score="2" Body="&lt;p&gt;The first thing to do without resorting to exposing file contents to the public is bringing the files into a kind of a Unix-like system (Linux or MacOS X), then applying the &lt;a href=&quot;https://en.wikipedia.org/wiki/File_%28command%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;file&lt;/a&gt; utility.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2019-04-12T01:48:30.807" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9660" PostTypeId="1" CreationDate="2019-04-12T04:32:06.713" Score="22" ViewCount="5706" Body="&lt;p&gt;&lt;a href=&quot;//en.wikipedia.org/wiki/X87&quot; rel=&quot;noreferrer&quot;&gt;This Wikipedia page&lt;/a&gt; says the following:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Most x86 processors since the Intel 80486 have had these x87&#xA;  instructions implemented in the main CPU&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So the above quote implies that some CPUs that were released after the Intel 80486 CPU did not have the x87 floating-point unit built in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what was the last CPU that did not have the x87 floating-point unit built in?&lt;/p&gt;&#xA;" OwnerUserId="12280" LastEditorUserId="7946" LastEditDate="2019-04-12T12:52:23.310" LastActivityDate="2019-04-12T12:52:23.310" Title="What was the last x86 CPU that did not have the x87 floating-point unit built in?" Tags="&lt;history&gt;&lt;intel&gt;&lt;floating-point&gt;&lt;cpu&gt;&lt;x86&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9661" PostTypeId="2" ParentId="9660" CreationDate="2019-04-12T05:14:29.413" Score="17" Body="&lt;p&gt;All Intel x86 CPUs since the 80486 line have included floating point instructions, i.e. everything from the Pentium* onward. So the last Intel processor to lack an on-board floating-point unit (FPU) was the 80486SX (and the embedded 80486GX).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other manufacturers, who made 486-compatible processors, continued making non-FPU chips, aiming for the budget market. These include Cyrix's Cx486SLC, and AMD's AM486SX. A 66MHz version of the latter, the &lt;a href=&quot;https://en.wikichip.org/wiki/amd/am486/am486sx2-66&quot; rel=&quot;noreferrer&quot;&gt;Am486SX2-66&lt;/a&gt;, was released in 1994, a year after Intel had released its first Pentium processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to compete with the Pentium range in the PC market, third-party manufacturers effectively had to include an on-board FPU, so there were no desktop &quot;586&quot; chips without floating-point instructions. Embedded devices tend to operate on a longer timescale, however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I expect that the &lt;em&gt;last manufactured&lt;/em&gt; x86 CPU that lacked floating-point instructions will have been an embedded chip such as the 80486GX, or the Vortex86SX mentioned in another answer.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;* &lt;em&gt;for further reading, see the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pentium_FDIV_bug&quot; rel=&quot;noreferrer&quot;&gt;Pentium FDIV bug&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-12T10:21:36.950" LastActivityDate="2019-04-12T10:21:36.950" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9662" PostTypeId="2" ParentId="9660" CreationDate="2019-04-12T05:42:54.303" Score="55" Body="&lt;p&gt;As far as I’m aware, the last FPU-less x86-compatible CPU which could still be considered general-purpose is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Vortex86&quot; rel=&quot;noreferrer&quot;&gt;Vortex86SX&lt;/a&gt;, released in 2007 and still available now. This is &lt;a href=&quot;http://www.vortex86.com/?p=145&quot; rel=&quot;noreferrer&quot;&gt;a Pentium-class&lt;/a&gt; CPU, capable of running any Pentium code which doesn’t require an FPU. It is targeted at embedded applications, with up to 512 MiB of RAM, and &lt;a href=&quot;http://www.vortex86.com/file/Vortex86_Family.pdf&quot; rel=&quot;noreferrer&quot;&gt;includes&lt;/a&gt; a PCI bus, USB, Ethernet, IDE, etc. It &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/1811/79&quot;&gt;can run Linux&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel themselves produced FPU-less x86-compatible micro-controllers later still, in 2015: the Quark D1000 and &lt;a href=&quot;https://www.intel.com/content/www/us/en/embedded/products/quark/mcu/d2000/quark-d2000-product-brief.html&quot; rel=&quot;noreferrer&quot;&gt;D2000&lt;/a&gt;, 32 MHz Pentium-class MCUs with 8 KiB and 32 KiB of RAM respectively, and &lt;a href=&quot;https://www.intel.com/content/www/us/en/embedded/products/quark/mcu/se-soc/quark-se-soc-product-brief.html&quot; rel=&quot;noreferrer&quot;&gt;the Quark SE C1000&lt;/a&gt;, with 80 KiB of RAM. These were opportunistically targeted at IoT applications, and low-power applications in general. It is still possible to buy them, &lt;a href=&quot;https://www.anandtech.com/show/13888/intel-discontinues-quark-socs-and-microcontrollers&quot; rel=&quot;noreferrer&quot;&gt;for a few more months&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last x86-compatible desktop CPU designed without an FPU was probably &lt;a href=&quot;https://en.wikipedia.org/wiki/NexGen&quot; rel=&quot;noreferrer&quot;&gt;NexGen&lt;/a&gt;’s Nx586, introduced in 1994, which was supposed to compete with the Intel Pentium but didn’t integrate an FPU initially. The last FPU-less CPU in that range was the &lt;a href=&quot;http://www.cpu-world.com/CPUs/Nx586/NexGen-Nx586-P133.html&quot; rel=&quot;noreferrer&quot;&gt;Nx586-P133&lt;/a&gt;, introduced in late 1995.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-04-12T11:59:21.577" LastActivityDate="2019-04-12T11:59:21.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9663" PostTypeId="2" ParentId="8493" CreationDate="2019-04-12T08:31:28.293" Score="2" Body="&lt;p&gt;You asked &quot;Where these experimental devices or special graphics applications, or were these used to program and/or operate the computers routinely?&quot;  I'm not sure this was answered directly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-6 display is a Type 340, and the PDP-1 display is the similar Type 30.  The latter is &quot;point plotting&quot;, i.e. there is a PDP-1 instruction to send the X, Y coordinates to draw a point.  Whereas with the Type 340, the PDP-6 will make a display list in mememory, from which the display will fetch instructions to draw points, lines, and characters by itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Type 30 and Type 340 were not experimental.  They were in the stock DEC product list.  However the primary device used to operate the machines were teletypes, not CRT displays.  In that sense, the graphics applications were a bit special and not part of routine operation.&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2019-04-12T08:31:28.293" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9664" PostTypeId="1" CreationDate="2019-04-12T08:48:20.100" Score="13" ViewCount="786" Body="&lt;p&gt;It is a well-known fact that AmigaOS is a single address space, totally unprotected memory operating system. The original implementation ran on a Motorola 68000, that did not support virtual memory if not by external hacks, and later models and OS version did not support it either due to retrocompatibility issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, Exec's memory allocation routines accept a (no-op) MEMF_PUBLIC flag that the last official AmigaOS 3.1 Developer's Kit defines as:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;MEMF_PUBLIC&#xA;      This indicates that the memory should be accessible to other tasks.&#xA;      Although this flag doesn't do anything right now, using this flag&#xA;      will help ensure compatibility with possible future features of the&#xA;      OS (like virtual memory and memory protection).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So I'm prone to think that there was at least some research internally to retrofit some memory protection/paging/swapping capability in the OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also remember rumors in 1990/1 of an implementation that should have been integrated in a version of the OS past-2.04/V37. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was this ever real? Did developers receive beta versions of the implementation? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;ADDITION: I'll add that I'm not really interested in later solutions of the post-Commodore era (such as AmigaOS 4.0), and that I'm aware of what is written on AmigaOS 4.0 documentation page &lt;a href=&quot;https://wiki.amigaos.net/wiki/Obsolete_Exec_Memory_Allocation&quot; rel=&quot;noreferrer&quot;&gt;Obsolete Exec Memory Allocation&lt;/a&gt; but I don't really agree with most of what is written there.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="11916" LastEditDate="2019-04-17T00:43:38.570" LastActivityDate="2019-04-17T00:43:38.570" Title="Protected/virtual memory support in classic AmigaOS" Tags="&lt;amiga&gt;&lt;memory&gt;&lt;operating-system&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9665" PostTypeId="2" ParentId="8493" CreationDate="2019-04-12T11:36:19.493" Score="4" Body="&lt;p&gt;Short answer:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Where these experimental devices&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. They could be ordered as standard options.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or special graphics applications,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That was the intention. They where more like plotters or printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, DEC made good sales of them as 'graphics terminals' on mainframes. The mainframe did whatever calculations and the results were either transmitted as a set of coordinates toward the PDP to display them directly (playing dumb terminal), or more often, the 'standard' (read: paper) output of the mainframe was redirected to the PDP, interpreted there by a special-to-type program to display a related graph. The latter was quite handy, as it required only small modifications to the mainframe applications and left all graphic interpretation (programming) to the 'intelligent' terminal.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or were these used to program and/or operate the computers routinely?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There have been applications to use them that way, but otherwise not. Programming was still a job for punch tape and TTYs.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-12T12:43:08.647" LastActivityDate="2019-04-12T12:43:08.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9666" PostTypeId="1" AcceptedAnswerId="9669" CreationDate="2019-04-12T13:51:41.270" Score="16" ViewCount="2121" Body="&lt;p&gt;DEC, and at least some of their computers, especially those in the 18-bit family and 12-bit family, had these &lt;code&gt;opr&lt;/code&gt; instructions, which contained many bitfields which encoded something like &quot;subinstructions&quot;. Things like&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;clear the accumulator&lt;/li&gt;&#xA;&lt;li&gt;increment the accumulator&lt;/li&gt;&#xA;&lt;li&gt;rotate the accumulator one place leftward&lt;/li&gt;&#xA;&lt;li&gt;complement the accumulator&lt;/li&gt;&#xA;&lt;li&gt;skip if the accumulator is zero&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The nature of these simple operations is such that it's convenient to encode each one in some bit or bitfield in the instruction word, and to have the computer execute each one in a statically scheduled manner. My understanding is that's because they are often used together&lt;sup&gt;1&lt;/sup&gt;, and have simple encodings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A later computer like the Z80 or ARM7 needs to fetch, decode and execute a separate instruction to perform each of these operations, which might not be as space or time efficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I can tell, using DEC-style microcoded instructions to perform any number of simple operations of a single register, has fallen out of vogue, or are at least not nearly as common on modern instruction set architectures. Why is this?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;1: Not only to load small integers into the accumulator, as in &lt;code&gt;cla cll cml inc rtl&lt;/code&gt; to set the accumulator to &lt;code&gt;6&lt;/code&gt; on the PDP-8, but also for examining or manipulating bitfields, probably long division, etc.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-05-21T09:10:29.297" LastActivityDate="2020-01-16T16:37:57.647" Title="Why are PDP-7-style microprogrammed instructions out of vogue?" Tags="&lt;instruction-set&gt;&lt;microcode&gt;" AnswerCount="4" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9667" PostTypeId="2" ParentId="9617" CreationDate="2019-04-12T14:08:54.830" Score="2" Body="&lt;p&gt;So the real issue was a problem with memory!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;based on the &lt;code&gt;ZX Spectrum Service Manual&lt;/code&gt; I did a RAM test:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Execute the command &lt;code&gt;PRINT PEEK 23732+PEEK 23733*256&lt;/code&gt; and the result should&#xA;be &lt;code&gt;65535&lt;/code&gt;! (for a 48k machine)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got &lt;code&gt;49344&lt;/code&gt; -&gt; error in &lt;code&gt;49345&lt;/code&gt;: (shows always the last working address)&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;key in: &lt;code&gt;POKE 49345,85: PRINT PEEK 49345 (=A)&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;key in: &lt;code&gt;POKE 49345,170: PRINT PEEK 49345 (=B)&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If answer A is anything other than 85 or answer B other than 170 look into &#xA;this table to find the faulty RAM IC: (mine was &lt;strong&gt;IC16&lt;/strong&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZgoxO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZgoxO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I have replaced the faulty IC16 and now I'm able to work with DivMMC!&lt;/p&gt;&#xA;" OwnerUserId="12268" LastActivityDate="2019-04-12T14:08:54.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9668" PostTypeId="2" ParentId="9666" CreationDate="2019-04-12T14:41:57.507" Score="17" Body="&lt;p&gt;The PDP-7 was a one address machine.  All instructions occupied 18 bits.  The operations that manipulated the accumulator didn't reference memory, and therefore didn't need an address.  But the address bits were in the instruction anyway, because all instructions were encoded in an 18 bit word.  So why not use these unused bits to get more use out of the instruction bits?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you get to opcodes with a variable number of operand addresses,  the need to economize in this way goes away.  &lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2019-04-12T14:41:57.507" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9669" PostTypeId="2" ParentId="9666" CreationDate="2019-04-12T14:45:10.100" Score="18" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] had these opr instructions, which contained many bitfields which encoded something like &quot;subinstructions&quot;[...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What you describe is basically a (V)LIW instruction format - at least that's what it might be called today. That's what computers started out with. Separate bits for each function to be applied to the value addressed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DEC is somewhat of a bad example here, as its accumulator instructions are a special kind, already a bastard between clean all over LIW and dedicated encoding. The LIW aspect is used only for this accumulator subset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zuse's machines, like the Z22, might make a better example with their ability to have each and every instruction carry multiple operations.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A later computer like the Z80 or ARM7 needs to fetch, decode and execute a separate instruction to perform each of these operations,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes - and no. For one, not all possible combinations could be used together, resulting in illegal instructions. In fact, depending on the machine's construction, most of these combinations were illegal. And that's why dedicated instructions took over. Let's assume, there are like 8 different operational units in the data path. Having one bit for each in the instruction word makes easy decoding, as each would just be wired up with the enable for a single function, resulting in a fast and simple machine structure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of these 256 combinations (of which one would be a nop), many would not make sense - think shifting left and shifting right, or adding and subtracting at the same time. By encoding only the 20 useful combinations into a 5 bit field, 3 bits (almost half) could be freed - at the cost of an additional decoding stage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, back in the old times, when machines were word-orientated (e.g. 36 bits in one word), there was much space - even resulting in unused bits. No need to add a decoding stage. Even worse, doing so would slow down the execution. Well, only a bit, but it would.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The situation changed when machines became byte-orientated and variable length instruction formats were used. Here cramping down the 8 unit lines into a single encoded 5-bit field enabled it to squeeze into a byte while leaving room for more (like a register number), without the need to fetch two bytes. Heck, it even leaves 12x8 instruction points for other encodings/irregular instructions without needing more.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;which might not be as space or time efficient.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's &lt;strong&gt;partially&lt;/strong&gt; true for the time efficiency, but not space - space-wise it's an extreme saving enabling more compact code. The inner workings are (can be) still (mostly) the same, but less visible. Instead of setting a shift and an add bit, there's now a Add-And-Shift instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, by now encoding it into a single byte instead of a full 36 bit word, the CPU can fetch the instructions at the same speed (byte bus vs. word bus) or even 4 times the speed (word sized bus) than before. So with memory always being the slowest part, &lt;strong&gt;tighter encoding does not only save space, but also speeds up execution&lt;/strong&gt; - despite the additional decoding stage.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;From what I can tell, [this] has fallen out of vogue, or are at least not nearly as common on modern instruction set architectures.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not nearly as common &lt;strong&gt;on the surface&lt;/strong&gt; is maybe the point here. For one, explicit VLIW instructions are still a thing (think Itanium), but more importantly, they are always an option for internal workings of modern CPUs. Where 'traditional' code gets first decoded into sub-operations, and these later get either combined to LIW instructions again, or scheduled in parallel over different function units.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, the mentioned ARM makes another good point for it to vanish. ARM had traditionally the ability to have every instruction being executed conditionally (much like Zuse did first). Cool when thinking in sequential execution, but a gigantic hurdle when it comes to modern CPUs with the ability to reorder instructions according to available data and function units. It makes rescheduling not just a hard task, but almost impossible. Even worse, ARM featured DEC-like condition handling, where each and every load did change the flags.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: Just because something isn't (always) visible to the user-side programmer, doesn't mean it isn't there.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-15T11:49:03.093" LastActivityDate="2019-04-15T11:49:03.093" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9670" PostTypeId="2" ParentId="9664" CreationDate="2019-04-12T17:09:39.580" Score="7" Body="&lt;p&gt;The closest I've ever seen was the &lt;a href=&quot;http://www.sinz.org/Michael.Sinz/Enforcer/index.html&quot; rel=&quot;noreferrer&quot;&gt;Enforcer&lt;/a&gt; tool which would utilize the MMU on systems with one to protect against illegal memory accesses. It was good to have it running while you were debugging code, but otherwise was pointless to run in normal operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagine there was never a serious push to implement memory protection simply because I believe most Amigas came with the base 68000 and not the more advanced models which had the MMU. Though many machines were built with 68020+ CPUs, note that the MMU was an optional separate chip for the '020 and with the 68030 the MMU was only included in the non-EC versions (i.e. the 68EC030 which was available in many accelerators did not have a MMU despite being an '030). If memory serves, the 68040 and '060 both had it included.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though you didn't quite point it out in your question, I will touch on the virtual memory topic a bit by pointing out that there were two products available for the classic AmigaOS (where a MMU was present) that would bolt on virtual memory support: GigaMem and VMem. I only have experience with GigaMem back in the day and found that it didn't really solve the problem of limited RAM as well as you would expect. I recall that it was only good for helping with memory allocated by programs after they've started up, not making room for new programs to run after you've run close to memory limits. I hardly used it since it didn't work the same way that I was used to with Windows and MacOS at the time.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2019-04-12T17:09:39.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9671" PostTypeId="2" ParentId="9664" CreationDate="2019-04-12T20:39:15.350" Score="11" Body="&lt;p&gt;The Classic AmigaOS had a very good reason for not implementing protected memory when newer 68k CPUs with embedded MMUs became commonplace. The main reason was the pervasive use of shared memory message passing to communicate between tasks, including user tasks, system tasks, and device drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main reason that AmigaOS out-performed all other contemporary OS's running on similar performance-spec hardware was the efficiency inherit in this design. It's also the reason that buggy software could easily corrupt system services, and cause a system crash instead of just a program crash. Since this approach requires all task contexts to share a single view of memory, there was no way to migrate to a protected memory paradigm without breaking all the message passing behavior and the legacy code that relied on it. It would simply be a-bridge-too-far to add this feature and still be compatible with the original OS and its applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: I'm speaking to the efficacy of such an approach at the time. Compatibility could be managed by sandboxing tasks in a &quot;virtual machine&quot; container on modern processors that support such fanciness. The 68k never had an equivalent feature like the &quot;virtual 8086&quot; mode created by Intel for backwards compatibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this does &lt;em&gt;NOT&lt;/em&gt; mean that MMU hardware is not used on Amigas that have it. &lt;strong&gt;The main application for Amiga MMUs is WHDLoad&lt;/strong&gt;. WHDLoad is used by most owners of big-box Amigas, and also on smaller systems that don't have MMUs, to launch Amiga games that were originally floppy-based from a HDD. Besides launching the game, which then takes over the system fully, WHDLoad provides the ability to restore the system back to its original state upon exiting the game with a pre-selected keystroke. In systems with MMUs, this behavior is made very reliable by using the MMU to protect all memory areas not strictly required by the game. Then, WHDLoad only needs to provide an overlay capability to save &amp;amp; restore those memory regions and program the MMU to keep all other memory from being accessed while the game runs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More &lt;a href=&quot;http://whdload.de/docs/en/mmu.html#mem&quot; rel=&quot;noreferrer&quot;&gt;info&lt;/a&gt; on how WHDLoad uses the MMU...&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-04-15T20:24:05.220" LastActivityDate="2019-04-15T20:24:05.220" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9673" PostTypeId="1" CreationDate="2019-04-14T00:06:14.600" Score="13" ViewCount="494" Body="&lt;p&gt;The title says it all:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How to En-/Decode Z22/Z23 Instructions?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(History and Linkage:&lt;br&gt;&#xA;The question was raised by Wilson in a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9666/why-are-pdp-7-style-microprogrammed-instructions-out-of-vogue#comment31096_9669&quot;&gt;comment&lt;/a&gt; on &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/9669/6659&quot;&gt;my answer&lt;/a&gt; to his question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9666/why-are-pdp-7-style-microprogrammed-instructions-out-of-vogue&quot;&gt;&quot;Why are PDP-7-style microprogrammed instructions out of vogue?&quot;&lt;/a&gt;, where I mentioned the Z22 as an early example for discrete function encoding and (V)LIW. I felt that answering this would better fit a question in its own right.)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-14T16:12:17.627" LastActivityDate="2019-05-22T19:16:55.777" Title="How were Zuse Z22 Instructions Encoded?" Tags="&lt;instruction-set&gt;&lt;zuse&gt;&lt;early-computer&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9674" PostTypeId="2" ParentId="9673" CreationDate="2019-04-14T00:06:14.600" Score="14" Body="&lt;p&gt;&lt;em&gt;[Preface: this is about a very early architecture, defined way before and completely independently of today's canon, formed by IBM's /360. When reading, it might be useful to take terms used at their face value, and strip all the semantic baggage that goes with them when talking about today's architectures.]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Zuse Z22 is in may ways unique (*1), not just by being one of the first, if not the first machine to use core memory, but also in employing techniques that have been rediscovered decades later as 'RISCy' (*2). A related feature is skipping the 'classic' decoding stage in favour of a Long Instruction Word (*3,*4) implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today's short descriptions about the Z22 (like its &lt;a href=&quot;https://en.wikipedia.org/wiki/Z22_(computer)#Programming&quot; rel=&quot;nofollow noreferrer&quot;&gt;English Wiki entry&lt;/a&gt;)  are often taken from the first paragraphs of the instruction encoding section of the internal operations manual, translated to English, using more common terms like here (from Wikipedia):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;[I have already corrected this on the English Wiki page, but there are many other pages carrying the same error]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It was programmed in machine code with 38-bit instruction words, consisting of five fields:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;the first 2 bits must always be 10&lt;br&gt;&#xA;  the next 5 bits contain a condition symbol&lt;br&gt;&#xA;  the next 13 bits contain an operation symbol&lt;br&gt;&#xA;  the next 5 bits contain a core memory address&lt;br&gt;&#xA;  the next 13 bits contain a drum memory address  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The corresponding part of the manual looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/toNal.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/toNal.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking closely shows a classic translation error, as &lt;em&gt;Bedingungszeichen&lt;/em&gt; (condition symbol(s)) and &lt;em&gt;Operationszeichen&lt;/em&gt; (operation symbol(s)) in this context are plural not singular (*5), so these fields are not holding single symbols, but collections of symbols that can be combined at will.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What all of these short descriptions leave out is how the manual continues over two dozen pages to describe the operations in detail. The very next paragraph continues:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Jeder Befehl enthält ein Operationsteil (mindestens 1 Buchstabe)&#xA;  und einen Adressteil (mindestens 1 Ziffer). Die einzelnen Operationszeichen können fast beliebig untereinander zu sinnvollen&#xA;  Befehlen zusammengefasst werden. Jedem Befehl kann eine oder &#xA;  mehrere Bedingungen zugesetzt werden, und damit die Ausführung&#xA;  von der Erfüllung der Bedingungen abhängig gemacht werden.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In (mostly literal) English:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Every instruction contains an operation part (at least one letter) and an address part (at least one number). Singular operation symbols can be combined in almost arbitrary manner. Each instruction can contain one or more conditions to depend its execution upon these conditions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So with this knowledge, it should better read:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2 bits &lt;code&gt;10&lt;/code&gt; to mark an instruction&lt;/li&gt;&#xA;&lt;li&gt;18 bits instruction field, thereof&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;5 bits condition symbols&lt;/li&gt;&#xA;&lt;li&gt;13 bits operation symbols&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;5 bit fast storage address&lt;/li&gt;&#xA;&lt;li&gt;13 bit (drum) memory address&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's important to know that while the 5-bit field addresses a core memory location, it's not a different address space. The core can also be addressed using the memory address as it occupied the first 32 memory locations. So this is rather a way to have two addresses in a single instruction. Think of it like having registers in memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the 13-bit memory address should always be seen as such. While it was located on a drum, part of it could be upgraded to core - with the Z23, increasing access speed and removing the need to arrange instructions and data in special patterns to reduce access time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But back to instruction encoding. Instead of having a short unique code for each legal operation, there are separate bits for each functional unit. Although this sounds like a waste of memory, an instruction word was 38 bits anyway, giving plenty of room.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 18 bits were organized as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;3..7: condition symbols marking an instruction executable&#xA;3 PP  if accumulator is positive (&amp;gt;=0; bit 1 cleared)&#xA;4 P   if memory location 2 is positive (&amp;gt;=0; bit 1 cleared)&#xA;5 QQ  if accumulator is negative (&amp;lt;0; bit 1 set)&#xA;6 Q   if memory location 2 is negative (&amp;lt;0; bit 1 set)&#xA;7 Y   if memory location 3 is odd (bit 38 set)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The condition symbols can be freely combined. If more than one is set, all conditions have to apply (conjunct). As a special case &lt;code&gt;PPQQ&lt;/code&gt; is true if the accumulator content is zero. Memory location 2 is a generic scratchpad register, but also serves as persistent flag for conditional tests (*6). Memory location 3 is another special location (*7), as its lowest bit can be tested for set (condition Y). Each and every combination is possible. PPQQY for example would execute the instruction only if the accumulator is zero and the lowest bit of location 3 is set, a condition that could be true after a shift left from accumulator and loc 3 when the accumulator held the most negative number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for the operation symbols:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;8..20 operation symbols activating unique functions.&#xA;8  C  Constante (Constant) - Bit 20..38, which would be fields for addresses and operation V, are instead a 19-bit constant.&#xA;9  N  Nullstellen (Zeroing) - Accumulator will be zeroed&#xA;10 LL Links Links (Left Left) - Shift accumulator left by 2&#xA;11 R  Rechts (Right) - Shift accumulator right by 1&#xA;12 U  Speichern (Store) - Accumulator will be stored to address&#xA;13 A  Addition (Add) - Content of a memory location will be added&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;U&lt;/code&gt; and &lt;code&gt;A&lt;/code&gt; also work as a pair, generating two more instructions when both are set or both are cleared. Effectively they select the base operation - everything else adds to this operation. With both cleared it becomes the pseudo operation &lt;code&gt;E&lt;/code&gt; or Jump. If both are set, than it's the pseudo operation &lt;code&gt;I&lt;/code&gt; or Intersektion (intersection, meaning AND).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;14 S  Subtraktion (Subtract) - Negates memory content, effectively turning it into a subtract operation.&#xA;15 F  ? (?) - Copies the already incremented program counter into memory location 5 before continuing with a new/next address.&#xA;16 K  Kennzeichen (Mark) - The lower 13 bits are not interpreted, only the fast memory address is used.&#xA;17 H  ? (?) - The lowest bit of location 3 gets set&#xA;18 Z  Stop (Stop) - The machine gets stopped before the instruction gets executed, but only if the conditions are met.&#xA;19 G  Addressubstitution (Address Substitution) - Used for indirect addressing and/or indexing and/or autoincrement (this operation is so complex, it for sure needs its own article)&#xA;20 V  Verkoppeln (Couple) - Memory location 3 is to be used as extension for the accumulator when shifting.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;All of these operations could be combined in a single instruction - albeit with restrictions. In fact, some seemingly 'basic' instructions &lt;em&gt;had&lt;/em&gt; to be synthesized. For example, there is a single bit shift right (&lt;code&gt;R&lt;/code&gt;), but no single bit shift left. Only a double shift left (&lt;code&gt;LL&lt;/code&gt;). A single bit left shift had to be synthesized as &lt;code&gt;LLR&lt;/code&gt; - to ease programming, the Assembler offered the pseudo operation &lt;code&gt;L&lt;/code&gt;, which got translated into &lt;code&gt;LLR&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speaking of assembler, with such a component-based instruction set 'kit' the mnemonics itself are not fixed instructions, like we're used to today, but any combination of above operations, represented by its letters. By convention, they are written in the sequence they occur in the bitfield:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CNLL(L)RUA(IE)SFKHZGF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Although any sequence is valid (they are parallel in nature (*8)), sometimes a different ordering may improve reading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;NA &amp;lt;loc&amp;gt;&lt;/code&gt; is a load, constructed from clearing the accumulator and adding a memory locations content&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ANC &amp;lt;value&amp;gt;&lt;/code&gt; a load like above, but instead of memory content, the address field is added&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LA 4&lt;/code&gt; (= &lt;code&gt;LLRA 4&lt;/code&gt;) multiplies the accumulator by 3&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LLA 4&lt;/code&gt; multiplies the accumulator by 5&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;RA 4&lt;/code&gt;takes 2/3 of the accumulator&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Especially the last one would imply a real inflation of opcodes in today's ISAs, wouldn't it? It also shows some of the redundancies of instructions. For example clearing the accumulator can be achieved in many ways - like &lt;code&gt;NA 0&lt;/code&gt;, &lt;code&gt;NI &amp;lt;any value&amp;gt;&lt;/code&gt; and so on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be possible to go on for hours, so let's close with some fun combinations around address calculations:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;GA 11&lt;/code&gt; Indirect: Add the content of the location location 11 points to&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;GKA 11+o&lt;/code&gt; Indexed: (Offset) 'o' will be added to content of location 11 (only fast memory possible) before adding the content of the resulting address&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CGKA 11+1&lt;/code&gt; Indirect Autoincrement: Like Indirect, but the register will be incremented&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CGKA 11+5&lt;/code&gt; like before, but now incremented by 5 - great for arrays, even more cool to incorporate the drum skew for fast accessible arrays :))&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CGU 11+n&lt;/code&gt; Add 'n' to fast (core) memory location 11&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CGA 11+n&lt;/code&gt; like before, and use the addressed content for the addition&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The last one is like a &lt;code&gt;while C&lt;/code&gt; line in a single instruction: &lt;code&gt;A += *( s += n )&lt;/code&gt; - adding a simple 'QQ' even turns it into &lt;code&gt;IF (A) ...&lt;/code&gt; . And there are many more complex operations possible. As I said before, that may need a whole book of its own.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Postscript:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yes, much like Wilson assumed, building instructions from smaller operations is an incredible tool (*9), but it quickly gets out of hand. The Z22 uses 18 bits for encoding, but I doubt that there are more than a few hundred useful instructions. Even if it's a thousand, encoding them in a single opcode would need more like 9-10 bits instead of 18. Do the math.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, learning the details may be a good idea for everyone designing a new CPU. Design your operational units, link them up in a Z22-like manner and work out whatever useful combinations there are, before 'compressing' them into common opcodes.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Unlike the name suggests, the Z22 was not solely Zuse's brainchild, but imagined by &lt;a href=&quot;https://de.wikipedia.org/wiki/Theodor_Fromme&quot; rel=&quot;nofollow noreferrer&quot;&gt;Theodor Fromme&lt;/a&gt; (today maybe called design lead) with much help from &lt;a href=&quot;https://en.wikipedia.org/wiki/Heinz_Zemanek&quot; rel=&quot;nofollow noreferrer&quot;&gt;Heinz Zemanek&lt;/a&gt; and Rudolf Bodo (both from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Mail%C3%BCfterl&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mailüfterl&lt;/a&gt; team) and made the schematics for the Z22. The idea was to design the tube-based Z22 in a way that it may be transistorized later. Which happened with the Z23. Quite remarkable foresight at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Like having Register 0 always produce the value 0, or having streamlined cycle, being the same for each and every instruction - even implementing the instruction pointer by inserting an addition - and many more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - This is related and the base of today's VLIW, except the VLIW definition used today is (usually) based around the idea of packing several, &lt;em&gt;independent&lt;/em&gt; instructions into a memory word to increase throughput.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Make sure to not mix this up with synthetic instructions, which nowadays is just a fancy name for &lt;a href=&quot;https://docs.oracle.com/cd/E19120-01/open.solaris/816-1681/instructionset-86762/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;opcode synonyms&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - &lt;em&gt;Zeichen&lt;/em&gt; (Symbols) is the same in singular as well as in plural. Context defines what is meant. Here it's plural, to turn it singular an indefinite article needs to be added - much like in English - except modern English also (almost) always additionally adds the suffix 's' to the plural. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Hence often called &lt;em&gt;Testspeicher 2&lt;/em&gt; (test-memory 2) or &lt;em&gt;Vorzeichentestregister&lt;/em&gt; (sign test register) throughout documentation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - While the fast memory address range is 32, only 14 of it is filled with RAM (25 with a separate available core extension, item#11), the rest are special locations&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Loc 0 always returns 0, can not be written&lt;/li&gt;&#xA;&lt;li&gt;Loc 1 always return maximum negative, which is also the marking for an instruction, can not be written.&lt;/li&gt;&#xA;&lt;li&gt;Loc 2 is a scratchpad location, but its sign can be tested&lt;/li&gt;&#xA;&lt;li&gt;Loc 3 is a scratchpad location, but it can be combined with the accumulator for shift operations - and its lowest bit (bit 38) can be tested for 1&lt;/li&gt;&#xA;&lt;li&gt;Loc 4 is the accumulator (or more correct, the accumulator content of the last operation)&lt;/li&gt;&#xA;&lt;li&gt;Loc 5 is a scratchpad location, but can also receive the last instruction's address+1. useful to create subroutines :)&lt;/li&gt;&#xA;&lt;li&gt;Loc 6..15 are generic scratchpad locations without any additional meaning&lt;/li&gt;&#xA;&lt;li&gt;Loc 16..31 are not present as core, still some functionality is attached&lt;/li&gt;&#xA;&lt;li&gt;Loc 16 is a read only shadow of Loc 5 (return address)&lt;/li&gt;&#xA;&lt;li&gt;Loc 17 is a one-bit port to read the position of a console switch&lt;/li&gt;&#xA;&lt;li&gt;Loc 19 is the I/O port for extended machines (additional fast readers/punches/printers)&lt;/li&gt;&#xA;&lt;li&gt;Loc 20 is the I/O port for the default console.&lt;/li&gt;&#xA;&lt;li&gt;Loc 21 to 31 (11) were availible as option.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;*8 - Of course just in writing, not in execution. &lt;code&gt;NA &amp;lt;loc&amp;gt;&lt;/code&gt; loads a memory into the accumulator (after clearing), while &lt;code&gt;UN &amp;lt;loc&amp;gt;&lt;/code&gt; stores the accumulator before clearing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*9 - Did I already mention the incredible way of conditional debugging? There is the &lt;code&gt;Z&lt;/code&gt; bit to stop any operation before execution, but in addition there's the option of adding the &lt;code&gt;C&lt;/code&gt;(constant) bit to any jump (&lt;code&gt;E&lt;/code&gt;), an otherwise useless combination. Now execution will stop before the jump is taken but only if the console switch &lt;em&gt;bedingter Stop&lt;/em&gt; (Conditional Stopp) is set. Turning on debugging with the flip of a switch :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-05-22T19:16:55.777" LastActivityDate="2019-05-22T19:16:55.777" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="9675" PostTypeId="2" ParentId="8493" CreationDate="2019-04-14T03:22:08.553" Score="2" Body="&lt;p&gt;I used to work for DEC. One of my customers had a GT40 that in conjunction with an 11/70 to make plots for radiation treatments. &lt;/p&gt;&#xA;" OwnerUserId="11833" LastActivityDate="2019-04-14T03:22:08.553" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9676" PostTypeId="5" CreationDate="2019-04-14T16:11:03.500" Score="0" Body="" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-14T16:11:03.500" LastActivityDate="2019-04-14T16:11:03.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9677" PostTypeId="4" CreationDate="2019-04-14T16:11:03.500" Score="0" Body="Early computers and their design, from before the standards set by the IBM S/360 (of 1964) became canon." OwnerUserId="6659" LastEditorUserId="15334" LastEditDate="2021-02-20T07:22:10.397" LastActivityDate="2021-02-20T07:22:10.397" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9678" PostTypeId="1" AcceptedAnswerId="9697" CreationDate="2019-04-15T08:09:19.593" Score="48" ViewCount="5616" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_650&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 650&lt;/a&gt;, announced in 1953, was the world's first mass-produced computer. It represented numbers in decimal, which is understandable, both because it needed to work with exact money amounts, and because converting from binary to decimal for output would have been computationally demanding by the standards of the time.&lt;/p&gt;&#xA;&lt;p&gt;It represented decimal numbers in &lt;a href=&quot;https://en.wikipedia.org/wiki/Bi-quinary_coded_decimal&quot; rel=&quot;nofollow noreferrer&quot;&gt;bi-quinary form&lt;/a&gt;, which requires seven bits per digit, as compared to BCD which requires only four bits per digit. the technical limitations of the time make this choice more rather than less surprising; when bits are implemented with vacuum tubes, three extra bits per digit is a highly nontrivial cost.&lt;/p&gt;&#xA;&lt;p&gt;What was the reason for using bi-quinary?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2021-02-22T17:30:46.233" LastActivityDate="2021-02-22T17:30:46.233" Title="Why did the IBM 650 use bi-quinary?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;early-computer&gt;&lt;ibm650&gt;&lt;biquinary&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9679" PostTypeId="2" ParentId="9678" CreationDate="2019-04-15T08:56:33.257" Score="44" Body="&lt;p&gt;I will just explain what a bit is. It's a binary digit. &lt;code&gt;0&lt;/code&gt; is numerically zero, &lt;code&gt;1&lt;/code&gt; is numerically one. If you want to add &lt;code&gt;1&lt;/code&gt; and &lt;code&gt;1&lt;/code&gt;, in binary it overflows. the result is &lt;code&gt;0&lt;/code&gt;, and a carry out. As you understand, other arithmetic operations can be done on bits. They take a fair bit of logic to implement. &lt;strong&gt;Binary is positional&lt;/strong&gt;. That means that a &lt;code&gt;1&lt;/code&gt; which is 4 places from the right is worth 2&lt;sup&gt;4&lt;/sup&gt; = 16.&lt;/p&gt;&#xA;&lt;p&gt;Biquinary is not based on this idea. Biquinary is based on the idea &amp;quot;let's count from zero to four and then also flipflop to another state where we're counting instead from 5 to 9&amp;quot;. Just like we humans count to five on one hand, and then count to ten on another hand. Or an abacus, that has four beads on one part of the rod, and one more bead on the other part. Now, how that's implemented in the IBM 650 is with binary states (&lt;strong&gt;not&lt;/strong&gt; binary digits!) to say which of {0,1,2,3,4} is true, and which of {range(0..4), range(5..9)} is true. &lt;strong&gt;This implementation of biquinary is two &amp;quot;one-hot&amp;quot; signals&lt;/strong&gt;. That means that a &lt;code&gt;1&lt;/code&gt; which is 4 places from the right is worth &lt;em&gt;either&lt;/em&gt; 0+4 = 4 &lt;em&gt;or&lt;/em&gt; 5+4 = 9.&lt;/p&gt;&#xA;&lt;p&gt;A binary state is different from a bit, as it is one of &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;. &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt; cannot be added. &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt; are just the values represented in some way, often by whether or not a current is flowing.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It represented decimal numbers in bi-quinary form, which requires seven bits per digit, as compared to BCD which requires only four bits per digit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not so; just think about the nixies: A single vacuum tube which has ten cathodes that glow. They share a common ground, so a further ten electrical connections, one per digit, can each light up one of the digits inside the tube. These electrical connections are not really &lt;em&gt;bits&lt;/em&gt; though. These electrical connections are binary states, so that if the nixie is showing a particular number, you've got one &lt;code&gt;true&lt;/code&gt; and nine &lt;code&gt;false&lt;/code&gt;s.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vrdjJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vrdjJ.jpg&quot; alt=&quot;A nixie tube ZM1210&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The biquinary tubes in the IBM 650 have a similar arrangement. So don't think about it as &amp;quot;seven bits&amp;quot;, but as &amp;quot;one decimal digit&amp;quot;, whose implementation involves seven electrical contacts which are very cheap. The tube stores or treats one decimal digit. And it is the tube which incurs the cost.&lt;/p&gt;&#xA;&lt;p&gt;So the biquinary system is not really seven bits representing a decimal system. It is more like a &amp;quot;thing which counts from 0 to 4&amp;quot; (five possible states) plus a &amp;quot;thing which can flip between high and low&amp;quot; (two possible states). The numbers 2 and 5 were chosen since they are the prime factors of ten. So here are the numbers from 0 to 9:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    high   low    zero     one    two    three    four&#xA;    ----------------------------------------------------&#xA; 0: false  true   true     false  false  false    false&#xA; 1: false  true   false    true   false  false    false&#xA; 2: false  true   false    false  true   false    false&#xA; 3: false  true   false    false  false  true     false&#xA; 4: false  true   false    false  false  false    true&#xA; 5: true   false  true     false  false  false    false&#xA; 6: true   false  false    true   false  false    false&#xA; 7: true   false  false    false  true   false    false&#xA; 8: true   false  false    false  false  true     false&#xA; 9: true   false  false    false  false  false    true&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Can you see? These are not bits because the word bit actually means &amp;quot;treat me as a base-2 digit&amp;quot;. They are more like selectors. One selector says &amp;quot;I am one of zero, one, two, three and four&amp;quot;. Another selector says &amp;quot;I am whatever the other guy said plus either zero or five&amp;quot;. You can't add or subtract these selectors, or do any arithmetic on them, so these &amp;quot;selectors&amp;quot; are much, much cheaper than a bit in something like a modern computer.&lt;/p&gt;&#xA;&lt;p&gt;These seven electrical signals together make up a decimal digit. And they correspond to seven &amp;quot;legs&amp;quot; on the bottom of the vacuum tube.&lt;/p&gt;&#xA;&lt;p&gt;If you look at the table above, you can see that if you want to (for example) add two numbers, the process will naturally yield some kind of carry. It will flip the high/low pair between &lt;code&gt;true false&lt;/code&gt; and &lt;code&gt;false true&lt;/code&gt;, and will tell you which way it flipped. Now you know whether you've got to carry one to the next digit.&lt;/p&gt;&#xA;&lt;p&gt;That arrangement is much simpler to implement than BCD which you mentioned it your question, where to figure out if you have a carry, you have to check if the (binary) addition got a carry, and if not, compare with &lt;code&gt;1001&lt;/code&gt;, and if higher carry one and then subtract &lt;code&gt;1001&lt;/code&gt;, otherwise carry 0. Biquinary addition is much cheaper. Especially if you use the vacuum tube that counts to five and flipflops between high and low.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-01-22T10:19:59.443" LastActivityDate="2021-01-22T10:19:59.443" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="9680" PostTypeId="1" CreationDate="2019-04-15T10:31:48.830" Score="15" ViewCount="672" Body="&lt;p&gt;I whipped together a quick answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9678/why-did-the-ibm-650-use-bi-quinary&quot;&gt;this question&lt;/a&gt; and then realised, that I have no idea how these tubes manipulate the numbers. A binary adder is easy to understand to the modern mind; for each bit you can use an XOR for the result, and an AND for the carry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what about biquinary? how does 7 + 3 work out as 0 + carry, or 2 + 3 work out as 5, or 1 + 1 = 2?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way to phrase the question:&#xA;What digital circuit can do an addition like this:?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   01 00010 (that's a three to you and me)&#xA; + 01 00100 (that's two)&#xA; = 10 10000 (five; note the upper thing got flipped and the lower thing moved two spaces rightward)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How is this happening?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-04-15T10:40:43.220" LastActivityDate="2019-04-15T13:55:42.617" Title="How does a biquinary adder work?" Tags="&lt;biquinary&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9681" PostTypeId="1" AcceptedAnswerId="9683" CreationDate="2019-04-15T13:52:27.293" Score="3" ViewCount="370" Body="&lt;p&gt;Did the computer scientist at Xerox really develop the first graphical user interface, later showing this to both Steve Jobs and Bill Gates?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=J33pVRdxWbw&quot; rel=&quot;nofollow noreferrer&quot;&gt;Just for reference, it is in reference to this story.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="278" LastEditDate="2019-04-22T08:56:27.313" LastActivityDate="2019-04-22T08:56:27.313" Title="Did Xerox engineers really develop the first graphical user interface?" Tags="&lt;history&gt;&lt;gui&gt;" AnswerCount="1" CommentCount="25" ClosedDate="2019-04-15T16:02:16.850" ContentLicense="CC BY-SA 4.0" />
  <row Id="9682" PostTypeId="2" ParentId="9680" CreationDate="2019-04-15T13:55:42.617" Score="16" Body="&lt;p&gt;From a modern chip design perspective, the design of bi-quinary adders is quite simple.  The addend inputs are each composed of two 1-hot signals, and the sum output is two 1-hot signals as well.  This is by the nature of bi-quinary, where the quinary part is 1-hot by definition and the binary part is a 2-bit signal that is 1-hot by convention, being either 01 for &quot;zero&quot; or 10 for &quot;five&quot;.  The latter also being 1-hot makes things easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple AND-OR tree suffices for adding these.  In a biquinary half-adder each one of the outputs in the sum is just a multiple-input OR of the ANDs of the various input  combinations that result in that digit.  For examples:  C4 is a multiple-input OR of ANDs of all of the bit combinations in A and B that result in a &quot;four&quot; in the quinary part.  C00 is multiple-input OR of ANDs of all of the bit combinations in A and B that result in a &quot;zero&quot; in the binary part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a biquinary full-adder there is not all that much added complexity.  The carry-in simply left-rotates the quinary part of one of the addends, and any rotation off the left-hand end of that addend is an extra input to the tree that sums the binary parts, alongside any carry from the addition of the quinary parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is the modern view, at any rate.  It was not &lt;em&gt;quite&lt;/em&gt; done that way back in the days of relays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The AND-OR tree was a matrix of relays, each combination of signals opening up a specific path (to ground) for the appropriate 1-hot outputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Carry-in and carry-out were &lt;em&gt;also&lt;/em&gt; a 1-hot pair of wires, 01 for &quot;no carry&quot; and 10 for &quot;carry&quot;.  This, in combination with the binary parts of each addend being 1-hot, meant that the &quot;binary side&quot; of the adder was &lt;em&gt;also&lt;/em&gt; a simple exercise in AND-OR logic, and a relay matrix too.  And, of course, so to was the rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Caesaro 1946 has a diagram of the relay matrix for a 1-digit biquinary full-adder in the Bell Laboratories' Relay Interpolator. Das et al. 2015 has a more modern block diagram and truth tables for the various outputs.  It places the carry-in handling logic closer to the final output, rotating an intermediate result instead of one of the addends, does not have 1-hot carry, does not have 1-hot binary parts for the addends, and uses inverters (where a 1-hot design of course does not).&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Further reading&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;O. Caesaro (1946).  &quot;The Relay Interpolator&quot;.  In B. Randell: &lt;em&gt;The Origins of Digital Computers: Selected Papers&lt;/em&gt;.  Springer Science &amp;amp; Business Media. 2012. ISBN 9783642961458.  DOI: &lt;a href=&quot;https://dx.doi.org/10.1007/978-3-642-61812-3_20&quot; rel=&quot;noreferrer&quot;&gt;10.1007/978-3-642-61812-3_20&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Kunal Das, Arijit Dey, Dipannita Podder, Mallika De, and Debashis De (2015).  &quot;Quantum Dot Cellular Automata: A Promising Paradigm Beyond Moore&quot;.  In Mourad Fakhfakh, Esteban Tlelo-Cuautle, and Patrick Siarry: &lt;em&gt;Computational Intelligence in Digital and Network Designs and Applications&lt;/em&gt;.  Springer. ISBN 9783319200712.  DOI: &lt;a href=&quot;https://dx.doi.org/10.1007/978-3-319-20071-2_11&quot; rel=&quot;noreferrer&quot;&gt;10.1007/978-3-319-20071-2_11&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;William Keister (1951).  &quot;&lt;a href=&quot;https://archive.org/details/TheDesignOfSwitchingCircuits/page/n481&quot; rel=&quot;noreferrer&quot;&gt;Circuits for calculation&lt;/a&gt;&quot;.  &lt;em&gt;The Design of Switching Circuits&lt;/em&gt;. Bell Telephone Laboratories series. Van Nostrand. pp. 462&amp;ndash;472.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1932" LastActivityDate="2019-04-15T13:55:42.617" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9683" PostTypeId="2" ParentId="9681" CreationDate="2019-04-15T14:24:06.363" Score="6" Body="&lt;p&gt;I suspect this is going to degenerate into an argument about what words mean, but back in 1965 the IBM 2250 graphics terminal had the equivalent of a mouse (actually a light pen) and a keypad with 32 clickable buttons that could be programmed to do anything (and have their functionality redefined depending on the context of what was being displayed on the screen).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course people wrote software for it that had a &quot;graphical user interface&quot; - though Xerox didn't invented the term until 1973, which is often considered the beginning of the concept of GUI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't meet the OP's criterion though, because it was a commercial product that was actually sold to customers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt they showed the pre-release version to Steve Jobs, since he wouldn't have reached his 10th birthday at the time.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="278" LastEditDate="2019-04-21T12:21:24.307" LastActivityDate="2019-04-21T12:21:24.307" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9684" PostTypeId="1" AcceptedAnswerId="9692" CreationDate="2019-04-15T16:13:15.157" Score="21" ViewCount="2953" Body="&lt;p&gt;Did the computer scientist at Xerox really develop the first LAN, but had no backing from the company to further develop these technologies, later showing this to both Steve Jobs and Bill Gates?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=J33pVRdxWbw&quot; rel=&quot;noreferrer&quot;&gt;Just for reference, it is in reference to this story.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="357" LastEditDate="2019-07-04T07:18:39.213" LastActivityDate="2020-04-29T19:34:42.243" Title="Did Xerox really develop the first LAN?" Tags="&lt;history&gt;&lt;network&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9685" PostTypeId="1" CreationDate="2019-04-15T16:44:36.517" Score="20" ViewCount="16635" Body="&lt;p&gt;I have read the following in the &lt;a href=&quot;https://en.wikipedia.org/wiki/X86&quot; rel=&quot;noreferrer&quot;&gt;x86 Wikipedia page&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The term &quot;x86&quot; came into being because the names of several successors to Intel's 8086 processor end in &quot;86&quot;, including the 80186, 80286, 80386 and 80486 processors.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But what does the &quot;x&quot; in &quot;x86&quot; represent? Is it a &quot;variable&quot; that can be something like &quot;801&quot; or &quot;802&quot; or &quot;803&quot; or &quot;804&quot;?&lt;/p&gt;&#xA;" OwnerUserId="12302" LastEditorUserId="11421" LastEditDate="2019-04-16T10:07:54.303" LastActivityDate="2020-03-18T19:16:37.610" Title="What does the &quot;x&quot; in &quot;x86&quot; represent?" Tags="&lt;cpu&gt;&lt;x86&gt;&lt;terminology&gt;" AnswerCount="7" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9686" PostTypeId="2" ParentId="9685" CreationDate="2019-04-15T16:53:27.817" Score="38" Body="&lt;p&gt;x is meant as wildcard, so this represents all CPUs able to run 8086 compatible code.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-04-15T16:53:27.817" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9687" PostTypeId="2" ParentId="9685" CreationDate="2019-04-15T16:53:37.720" Score="3" Body="&lt;p&gt;It just means any processor compatible with same architecture. &#xA;So it includes 8088, 8086, 80186, 80286, 80386, 80486, Pentium, etc.. &lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-04-15T16:53:37.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9688" PostTypeId="2" ParentId="9684" CreationDate="2019-04-15T16:56:58.320" Score="11" Body="&lt;p&gt;Xerox developed the Ethernet, which is a LAN, but most likely not the first LAN. &lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-04-15T16:56:58.320" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9689" PostTypeId="2" ParentId="9685" CreationDate="2019-04-15T17:13:51.657" Score="48" Body="&lt;p&gt;The term &lt;code&gt;x86&lt;/code&gt; is shorthand for &lt;code&gt;80x86&lt;/code&gt;, which was used to refer to any member of the family 8086 (and also, incidently, 8088), 80186, 80286, etc.  Things have since gotten a bit muddled by the fact that while an 80386 had a mode that was compatible with the old architecture, it also introduced some fundamentally new ways of doing things which were shared by the 80486 as well as &quot;named&quot; processors like the Pentium, Pentium Pro, etc., and thus it is sometimes ambiguous whether the name &quot;x86&quot; is used in reference to the architecture that started with the 8086, or the one which had its debut with the 80386.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2019-04-15T20:25:16.400" LastActivityDate="2019-04-15T20:25:16.400" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="9690" PostTypeId="2" ParentId="9685" CreationDate="2019-04-15T17:36:31.363" Score="8" Body="&lt;p&gt;In modern usage it also means &lt;em&gt;software&lt;/em&gt; which only uses the 32-bit architecture of the earlier 80x86 processors, to distinguish it from 64-bit applications. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsoft uses it that way on 64-bit versions of Windows, which have two separate directories called &quot;Program Files&quot; and &quot;Program Files (x86).&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 32-bit applications will run on 64-bit hardware, but the OS needs to provide the appropriate 32 or 64 bit interface at run-time.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2019-04-15T17:36:31.363" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9691" PostTypeId="1" AcceptedAnswerId="9693" CreationDate="2019-04-15T17:38:43.823" Score="4" ViewCount="287" Body="&lt;p&gt;How many logic gates did the IBM 650 have? I'm used to measuring the complexity of a CPU by transistor count, but the 650 was a vacuum tube machine; the number of tubes would also be an interesting statistic.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10260" LastEditDate="2021-05-12T03:15:15.753" LastActivityDate="2021-05-12T03:15:15.753" Title="IBM 650 - how many logic gates?" Tags="&lt;hardware&gt;&lt;ibm&gt;&lt;early-computer&gt;&lt;ibm650&gt;&lt;vacuum-tube&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9692" PostTypeId="2" ParentId="9684" CreationDate="2019-04-15T18:25:25.460" Score="33" Body="&lt;p&gt;Xerox developed ethernet. Was there a local area network preceding ethernet?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was certainly wide area networking before ethernet, e.g. ARPANET dating from 1969.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was also local networking even earlier, e.g. the IBM 1401, sold as a small mainframe in its own right, also ended up being used as a peripheral controller for larger mainframes; this arrangement could be called a network. But one feels it was not quite the same thing. So what was novel about the Xerox LAN?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ethernet was designed to be a &lt;em&gt;purely local&lt;/em&gt; network among &lt;em&gt;peer workstations&lt;/em&gt;. And I think the Xerox Alto was the first general-purpose workstation in the sense that term came to be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you use the term LAN in that particular sense, I think the answer is yes, ethernet was the first.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-04-15T18:25:25.460" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9693" PostTypeId="2" ParentId="9691" CreationDate="2019-04-15T18:43:47.403" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How many logic gates did the IBM 650 have?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a rather useless question. When is a gate a gate? Is a wired-OR a gate? Does a 38-input-OR, used to create a zero condition count as much as a two-input? Using a gate count does, if at all, only make sense for machines &lt;em&gt;only&lt;/em&gt; build from diskrete gates.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm used to measuring the complexity of a CPU by transistor count,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which as well isn't a great tool. More of a marketing tool - just follow the discussions that came up after the 6502 was disected by the Visual-6502 team :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but the 650 was a vacuum tube machine; the number of tubes would also be an interesting statistic.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To some degree yes. Then again, in the strict sense, the number of tubes just tells how often a signal had to be inverted, as that's the only logic function where a tube is necessary and can't be replaced. In addition they serve (as two inverters) to build latches (today called flip-flops) and amplifiers for long lines or lines with multiple drains.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for the number: The only one I could get so far (from a friend with access to a still complete 650 arithmetic unit) is ~3000 tubes.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-15T19:45:28.493" LastActivityDate="2019-04-15T19:45:28.493" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9694" PostTypeId="1" AcceptedAnswerId="9699" CreationDate="2019-04-15T18:54:40.380" Score="4" ViewCount="212" Body="&lt;p&gt;Is the maximum voltage of high voltage differential SCSI documented somewhere? All I can find in various source like Wikipedia is that it is &quot;greater than 5 volts&quot; ... but how high can it actually be?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen what HVD can do to a single ended SCSI controller ... burns the copper traces right off the circuit board, so there is definitely a lot of power on that bus. But just how much power?&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2019-04-16T07:34:38.540" Title="What is the maximum voltage of high voltage differential SCSI?" Tags="&lt;scsi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9695" PostTypeId="2" ParentId="9559" CreationDate="2019-04-15T19:15:13.577" Score="3" Body="&lt;p&gt;This worked... for a while... but eventually the low density disks written with high density data can start to develop data errors and become corrupted and unreadable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way that magnetic media works is that it has a coating that can retain a magnetic field that has been imprinted on it, and it has a resistance to demagnetization / remagnetization, known as coercitvity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Magnetic media needs to be able to resist casual demagnetization by the Earth's magnetic field, from other magnetic media placed near it, but most importantly from other data written directly onto the media.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On most disks there is usually up to a full track width of space between adjacent tracks, because in addition to writing an imprint of a magnetic field directly underneath the drive head, there will be an additional unfocused fringe of a magnetic field around the edges of the drive head. If the tracks are space too closely together, this fringing can partially overwrite the magnetic patterns of adjacent tracks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a high density disk, the media has a much higher coercivity. A low-density drive will not be able to write to these disks because its drive head does not produce a strong enough magnetic field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a low density disk written with a high density drive head, the signal intensity is stronger but also smaller, but with also a stronger unfocused fringe around the drive head. This unfocused fringe has minimal effect on a high density disk, but for a low density disk it can be strong enough to change the media.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is happening, the high density data is slowly corrupted as the disk is filled with data over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also because the data is more closely packed together on the media, it is possible for adjacent high intensity magnetic patterns to erase each other in a sort of tug of war on low density media.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a bit pattern of 11011 the center zero bit is being stressed by the two outer 1 bits on either side with an opposing field. Over time the magnetic field in the center may weaken and disappear, becoming unreadable as 11#11, or it may flip entirely to match the two outer fields as 11111.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Temperature also has an effect on media coercive stability, so if these specially written disks are kept in a cool storage location, they are more likely to be readable later than if they are kept in a very hot attic for years.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2019-04-15T19:15:13.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9696" PostTypeId="2" ParentId="9647" CreationDate="2019-04-15T20:32:49.750" Score="4" Body="&lt;p&gt;How far through 1995 are the files dated? It almost sounds like they may be some kind of finance summary or something - 95END might be referring to an end of financial year. Depending on what kind of computer they came from, I'd first try to take a copy and open them in Word/Excel by adding a .doc or a .xls to the end of the file name or something similar, as you most likely have those to hand. It's possible they come from older software - Lotus or Wordperfect or something similar, but those are harder to dig up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As mentioned by Euro Micelli in the comments it's likely that the file extension doesn't actually have much to do with the contents of the file, which makes it a little trickier.&lt;/p&gt;&#xA;" OwnerUserId="12306" LastActivityDate="2019-04-15T20:32:49.750" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9697" PostTypeId="2" ParentId="9678" CreationDate="2019-04-15T21:24:17.687" Score="28" Body="&lt;p&gt;Quibbling about the right meaning of &quot;bit&quot; aside, some advantages of the 2-of-7 biquinary representation are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simpler circuits.&lt;/strong&gt; In a quinary adder circuit, the output of each of the 5 output lines becomes just a 5-way OR of binary ANDs of input lines. To implement this with primitive logic building blocks such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Resistor%E2%80%93transistor_logic&quot; rel=&quot;noreferrer&quot;&gt;resistor-transistor-logic&lt;/a&gt; (or its vacuum-tube analogue) you can probably make do with one active component (tube or transistor) per output if you select your resistances carefully. This counts in an age where tubes and transistors are expensive discrete components of dubious reliability!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Faster operation&lt;/strong&gt; -- with 10 biquinary digits there will be fewer gate delays in an arithmetic operation than with 36 binary digits -- especially when logic is still expensive and spending more logic on accelerating carry propagation is a science-fiction dream.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Error checking.&lt;/strong&gt; If you don't really trust your logic building blocks, you want error checking everywhere. With 2-of-7 you can apply error checking to &lt;em&gt;each intermediate digit&lt;/em&gt; in the computation. Any single component failure will lead to either too many or too few lines being active, so you can immediately pinpoint pretty exactly where you need to replace a part.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These advantages are not governing anymore, since transistors are pretty reliable and individually cheap. On the other hand, &lt;em&gt;memory&lt;/em&gt; (whether in the form of register files, caches, or conventional) has come to dominate the hardware budget compared to ALUs, which means that the greater compactness of base-2 is a much larger consideration.&lt;/p&gt;&#xA;" OwnerUserId="5432" LastActivityDate="2019-04-15T21:24:17.687" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9698" PostTypeId="2" ParentId="9685" CreationDate="2019-04-16T05:22:25.693" Score="7" Body="&lt;p&gt;Intel products were numbered.  For example, their first microprocessor was the 4-bit Intel 4004, which was coupled with the 4001 ROM, 4002 RAM, and 4003 shift register.  The start denoted the series, and the last digit denoted the specific part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, the intel 8008 came along, which was an 8-bit microprocessor.  This was succeeded by the 8080, which was then replaced by the 8085, which was then replaced by the 8086.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the 8086, processors started taking on the format of 80x86, with x being a number such as 80186, 80286, 80386, etc.  They were backwards compatible with one-another, and modern computers still boot into 16-bit-mode.  As Intel continued rolling out processors, they began to be referred to as Intel 386 or Intel 486 rather than Intel 80386.  This is how the terms 'i386' and 'i586' came into play.  As they were based on the same architecture, they were called Intel x86, where x refers to a number.  They also came with coprocessors that had a last number of '7', such as 80387, and as such we also have &lt;a href=&quot;https://en.wikipedia.org/wiki/X87&quot; rel=&quot;nofollow noreferrer&quot;&gt;x87&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="12315" LastEditorUserId="12315" LastEditDate="2019-04-16T21:27:39.160" LastActivityDate="2019-04-16T21:27:39.160" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9699" PostTypeId="2" ParentId="9694" CreationDate="2019-04-16T07:34:38.540" Score="3" Body="&lt;p&gt;HVD in the SCSI standards was 'according to RS-485', which allows up to -7V and +12V&#xA;on the differential wiring, though limits the difference signal to the (0V, 5V)&#xA;range.   There is a separate line in SCSI standards for identifying HVD, LVD (low-voltage differential) and single-ended (SE, based on each pair of wires&#xA;being one dedicated ground, and one open-collector driven).   Unless the identification is ignored, a HVD or LVD driver will not engage (the drivers&#xA;just stay in high-impedance state), so damage is rarely an issue, though&#xA;function is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A typical offering used only +5V and ground, like this one &lt;a href=&quot;https://web.archive.org/web/20150922132827/http://www.adaptec.com/en-us/support/scsi/3940/aha-3944auwd/&quot; rel=&quot;nofollow noreferrer&quot;&gt;AHA3944UWD &lt;/a&gt; and&#xA;would offer ONLY all-HVD device bus function (and power-off if a LVD or SE&#xA;device were attached).   The difficulty arises if an HVD driver attempts&#xA;to lift the always-grounded second wire of an SE bus device, or applies&#xA;high overvoltage to an LVD input.   A typical driver for HVD (SN75176B)&#xA;is capable of putting 150 mA into its output. If wired to SE-type&#xA;ground/common wiring, 25 or so driven wires, that means an SE ground&#xA;current of 3.75 amps could flow.   That'd be nearly twenty watts of&#xA;fault power dissipated in wires or chips.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2019-04-16T07:34:38.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9700" PostTypeId="1" AcceptedAnswerId="11051" CreationDate="2019-04-16T12:01:09.750" Score="6" ViewCount="382" Body="&lt;p&gt;There's an application that's been on my mind on and off for months now, I want to find clarity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once upon a time, when MacOS was in black and white, there was a neat music composer/player application. &lt;strong&gt;Its icon was that of a ghetto blaster, and its file icons were cassette tapes&lt;/strong&gt; (obviously). On the floppy were also some demo tunes including &quot;Money&quot;, &quot;Louie Louie&quot;, (possibly?) &quot;Three Little Mice&quot;, &quot;Axel F&quot; (from the comedy movie with Eddie Murphy), &quot;Rockit&quot;, &quot;Like a Virgin&quot;, and others. It was able to do four voices of various instruments, and had one &quot;synth&quot; instrument where you could (theoretically!) draw a waveform with the mouse; many of the demo tunes had clearly digitized samples in the synth to do proper drums and such.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I frequently think of &lt;em&gt;&lt;a href=&quot;https://www.macintoshrepository.org/1490-musicworks&quot; rel=&quot;nofollow noreferrer&quot;&gt;MusicWorks&lt;/a&gt;&lt;/em&gt; (by MacroMind), but that's a different application ... I think?&lt;/p&gt;&#xA;" OwnerUserId="832" LastEditorUserId="832" LastEditDate="2019-05-17T07:32:38.293" LastActivityDate="2019-05-19T17:00:18.560" Title="Name this Macintosh music application" Tags="&lt;mac-os-classic&gt;&lt;application-program&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9701" PostTypeId="2" ParentId="8493" CreationDate="2019-04-16T12:13:48.320" Score="3" Body="&lt;h2&gt;PDP-5's as wells&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mSIKg.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mSIKg.gif&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I just ran across the YouTube video &lt;a href=&quot;https://www.youtube.com/watch?v=iwVu2BWLZqA&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Incredible Machine (1968)&lt;/a&gt; that shows the screen and light pen being used to do interactive circuit design and simulation.&lt;/p&gt;&#xA;&lt;p&gt;GIF was made at about &lt;code&gt;02:44&lt;/code&gt; in the video.&lt;/p&gt;&#xA;&lt;p&gt;Once again, this is an example of a specific interface application, rather than to &amp;quot;program and/or operate the computers routinely.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;From the video's caption:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Bell Labs 'Graphic 1' computer system consisted of a Digital Equipment Corporation '&lt;strong&gt;PDP-5&lt;/strong&gt;' computer coupled with input devices such as the '&lt;strong&gt;Type 370' light pen&lt;/strong&gt; and Teletype Corporation 'Teletype Model 33' keyboard, married to a Digital Equipment Corporation '&lt;strong&gt;Type 340' precision incremental display&lt;/strong&gt; backed by 36-bit &lt;strong&gt;Ampex 'RVQ' buffer memory&lt;/strong&gt; capable of storing 4096 'words'. The resolution on the monitor was 1024×1024.&lt;/p&gt;&#xA;&lt;p&gt;This system was designed to transform the graphics-based input into output to be fed into a IBM '7094' (200 Kflop/s). The entire thing was attached to a microfilm-based recorder - the Stromberg Carlson 'SC 4020', which took hours to read and record the data.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7118" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-04-16T12:13:48.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9703" PostTypeId="2" ParentId="9685" CreationDate="2019-04-16T12:21:46.747" Score="1" Body="&lt;p&gt;Practically &lt;code&gt;x86&lt;/code&gt; is shortening for &quot;80386 or 80486 running in 32-bit mode&quot;. It comes from 8086/186/286+ line but Win32 cannot run on CPU below 386. After 80486 the &lt;code&gt;80*86&lt;/code&gt; scheme was changed to Pentium[N] and AMD [model].&lt;/p&gt;&#xA;" OwnerUserId="2174" LastActivityDate="2019-04-16T12:21:46.747" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9704" PostTypeId="1" CreationDate="2019-04-16T19:17:00.293" Score="6" ViewCount="721" Body="&lt;p&gt;Though I had several friends back in the day with a Commodore 64, I only recently acquired one after a friend gave me his old one before he moved house. As such, I'm diving in to learning about the machine that I mostly ignored 35 years ago and quickly remembering that the 1541 disk was s.....l.....o.....w.....!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been reading up on the disk performance issue. I knew people who had the Epyx FastLoad cartridge, but I've only really now discovered JiffyDOS. While both are interesting solutions, they both require hardware that I'd have to acquire (and in the case of JiffyDOS, replacement of ROM chips in the C64 and 1541). Getting the hardware is possible, but takes time that I don't have for the few moments a week I can possibly dedicate to my retro C64 experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that being said, is there a possible type-in program that could work as a one-off to fast load a game? I'm thinking along the lines of something that I could save to a disk, run it, then load/run the game I want to boot.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="6659" LastEditDate="2019-04-16T20:06:08.793" LastActivityDate="2019-04-16T21:05:44.043" Title="Is there a program I can run on the C64 to speed up booting of a game?" Tags="&lt;commodore-64&gt;&lt;floppy-disk&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9705" PostTypeId="2" ParentId="9704" CreationDate="2019-04-16T19:48:28.077" Score="6" Body="&lt;p&gt;There were quite a number of software-only fast loaders for the C-64+1541:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Hypra Load&lt;/li&gt;&#xA;&lt;li&gt;Speed Load&lt;/li&gt;&#xA;&lt;li&gt;...and many others (a quite comprehensive list can be found in the &lt;a href=&quot;https://www.c64-wiki.com/wiki/Fast_loader&quot; rel=&quot;noreferrer&quot;&gt;C64-Wiki&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Fast loaders are (typically quite short, as they need to be loaded &quot;slow&quot;) pieces of code that can accelerate floppy loading times 5-10 times (some even faster). The overall acceleration is the result of the actual speed-up of the transfer, plus the extra time needed to slow-load the loader itself and the transfer of the drive-end of the software to the drive - So the speed-up is only significant for reasonably long programs. Fast loaders don't work with all programs and will very probably be de-activated by multipart loaders in games, so your mileage may vary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A fast loader typically consists of two pieces of code, one running on the computer, the other executed on the separate CPU in the Commodore floppy drive. Thus, your software version must match the type of floppy drive - there are special loader versions for 1581 drives.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-04-16T20:55:25.267" LastActivityDate="2019-04-16T20:55:25.267" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9706" PostTypeId="2" ParentId="9704" CreationDate="2019-04-16T21:05:44.043" Score="4" Body="&lt;p&gt;I would recommend &lt;a href=&quot;https://csdb.dk/release/?id=150525&quot; rel=&quot;nofollow noreferrer&quot;&gt;SDOS 2016&lt;/a&gt;. It is more recent than what is linked from the C64-Wiki, and it includes documentation and source code. But you probably wouldn't want to type it in. It's pretty long...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The readme.txt offers a quick synopsis of the functionality.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;SDOS is based on SJLOAD and VDOS. This is a common boot loader&#xA;  that checks the drive and chooses among three possibilities:&lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;if JiffyDOS protocol is supported, it starts as SJLOAD;&lt;/li&gt;&#xA;  &lt;li&gt;if not, it tries to start as VDOS (which is possible on 1541 and 1571 drives in C64 mode);&lt;/li&gt;&#xA;  &lt;li&gt;if none of them are present, it stays at Kernal load.&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-04-16T21:05:44.043" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9707" PostTypeId="1" AcceptedAnswerId="9711" CreationDate="2019-04-17T01:31:26.310" Score="8" ViewCount="1441" Body="&lt;p&gt;I remember one of the features I admired on the Macintosh in the late 80s was support for multiple displays. First time I saw this was on an SE/30, using the internal display along with a big external CRT. It had all the expected behavior of one giant desktop, allowing the user to drag the mouse and windows between the displays. Pretty cool for 1988, or so I thought. This may have used some 3rd party product (Radius?), but I am pretty sure the Macintosh II had the functionality out-of-the-box at this time, just by dropping in additional NuBus display card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't recall when Windows started to support multiple displays like this. Which version of Windows first offered this functionality and with what sorts of display cards? Were there any popular 3rd party solutions for Windows before this, that allowed the Desktop to span multiple displays?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Specifically asking about the Desktop/OS recognizing both displays - not just &quot;mirroring&quot; a display to an external monitor or projector as any laptop with external video port could do.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-05-06T07:52:46.277" Title="When did MS Windows get Dual Monitor support?" Tags="&lt;ibm-pc&gt;&lt;video&gt;&lt;display&gt;&lt;windows&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9708" PostTypeId="1" AcceptedAnswerId="9710" CreationDate="2019-04-17T03:16:00.083" Score="19" ViewCount="3567" Body="&lt;p&gt;The first five generations of game consoles typically had no backward compatibility. New console, new hardware design, new games. (An exception was the Atari 7800, which as far as I know was the first console to have backward compatibility. Conjecture: this was because it was released in the aftermath of Atari's dramatic fall from leading position, creating a very strong incentive to try to recapture what they had.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PlayStation 2 famously had backward compatibility, essentially by incorporating a PS1 onto a chip (and of course taking advantage of the ability of a DVD drive to read CDs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But subsequent consoles such as the PlayStation 3 and Nintendo Wii began a strange pattern: initial backward compatibility subsequently dropped in a cost-reduced model. I can understand the desire to reduce cost by cutting features, and that backward compatibility is less important as a console builds up its own catalog, but I would also have expected the cost of continuing to provide it to keep dropping. (If it's just one cheap chip, might as well keep it.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conjecture: By the seventh generation, silicon process technology was not improving as rapidly as it had, so the cost of continuing to provide backward compatibility stayed nontrivial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternative conjecture: Moore's law was still running fine, and the real reason for dropping compatibility was to encourage people to buy new games, which is where the profit in the console business comes from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first conjecture would predict temporary backward compatibility began with the seventh generation. The second would predict it could happen in any generation (except where there was something like a medium change from cartridge to disk).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the first console to have temporary backward compatibility? Did it happen before the seventh generation?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="5222" LastEditDate="2019-04-22T08:55:17.653" LastActivityDate="2019-04-22T08:55:17.653" Title="What was the first console to have temporary backward compatibility?" Tags="&lt;history&gt;&lt;game-consoles&gt;&lt;backward-compatibility&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9709" PostTypeId="2" ParentId="9708" CreationDate="2019-04-17T03:57:08.593" Score="11" Body="&lt;p&gt;The Mega Drive 1 and 2 can run Master System software via the Powerbase Converter. Neither the Nomad (the portable Mega Drive) nor the Mega Drive 3 are capable of doing so without further internal modification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I therefore posit the Mega Drive.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-04-17T03:57:08.593" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9710" PostTypeId="2" ParentId="9708" CreationDate="2019-04-17T04:40:53.513" Score="19" Body="&lt;p&gt;The Mega Drive/Genesis is the obvious answer, but I can also make a case for the earlier Master System. Initial models were fully compatible with Sega's prior console, the somewhat obscure &lt;a href=&quot;https://en.wikipedia.org/wiki/SG-1000&quot; rel=&quot;noreferrer&quot;&gt;SG-1000&lt;/a&gt;. However, with the removal of the card slot and expansion port in later revisions this was severely eroded. Some games on cartridges may still work, but anything on a card or that requires a peripheral will definitely leave you out of luck. It has to be said that there weren't a lot of SG-1000 games seen in the West in the first place though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'd suspect it comes down to is that backwards compatibility is of high utility on new consoles. Their games library is small and there's a lot of extra utility in enabling the machines to access the software for their immediate predecessors. However, as time goes by this utility is eroded, and any extra hardware required to support them becomes dead weight. If removing it offers any potential for a price drop, that's inevitably going to happen at some point.&lt;/p&gt;&#xA;" OwnerUserId="12147" LastEditorUserId="357" LastEditDate="2019-04-17T13:59:14.103" LastActivityDate="2019-04-17T13:59:14.103" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9711" PostTypeId="2" ParentId="9707" CreationDate="2019-04-17T07:14:42.667" Score="13" Body="&lt;p&gt;The first release of Windows to provide built-in support for multiple monitors, on graphics cards with appropriate drivers, was &lt;a href=&quot;http://web.archive.org/web/20190417142448/https://support.microsoft.com/en-us/help/182708/hardware-requirements-for-multiple-display-support-in-windows-98&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows 98&lt;/a&gt;. Support was subsequently added to the NT line with &lt;a href=&quot;https://www.techrepublic.com/article/multiple-monitor-support-in-windows-2000-pro/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows 2000&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some graphics cards provided support for multiple monitors in earlier versions of Windows, at least in Windows NT 4.0 as described &lt;a href=&quot;https://www.computerworld.com.au/article/90311/windows_nt_see_do_more_multiple_monitors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; (with SP3, released in May 1997); Matrox cards in particular were famous for this. I used a G450 with dual outputs under NT 4.0 with two monitors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that some CAD software (AutoCAD in particular) might have supported multiple monitors on Windows earlier than that — this was a common setup on other platforms (including DOS).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-06T07:52:46.277" LastActivityDate="2020-05-06T07:52:46.277" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9712" PostTypeId="1" AcceptedAnswerId="9713" CreationDate="2019-04-17T09:10:40.273" Score="8" ViewCount="385" Body="&lt;p&gt;I realized that &lt;a href=&quot;https://en.wikipedia.org/wiki/Make_(software)&quot; rel=&quot;noreferrer&quot;&gt;make&lt;/a&gt; was &quot;only&quot; invented in 1976 and seems to be one of the first build automation tools (at least it's probably the oldest still in use). Make with its shell focus seems like a total Unix-ism. It's interesting innovation is not being a build system but its dependency graph solver that runs build steps lazily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But we already had a history of large software projects in 1976. What did people use for e.g. OS/360 or the software for the F-14? Were there any real precursors for make or did make invent the concept of build automation?&lt;/p&gt;&#xA;" OwnerUserId="837" LastActivityDate="2019-04-24T06:00:24.743" Title="Build automation tools before make?" Tags="&lt;history&gt;&lt;software&gt;" AnswerCount="5" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9713" PostTypeId="2" ParentId="9712" CreationDate="2019-04-17T10:22:45.897" Score="7" Body="&lt;p&gt;Preface 1: There can't be a single answer for all the varieties that have been out there&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Preface 2: It's important to keep in mind, that make didn't start out as the almighty build automation and installation tool it's seen as today, but as a utility to reduce compile time by only compiling files that have changed or that depend on changed files. Compiling was a resource intensive and slow task on machines back then. It wasn't 50 files per second, but rather 50 seconds per file. So saving every little step did count a lot.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Were there any real precursors for make&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, there were, but usually rather OS-, development environment- and project-specific tools.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or did make invent the concept of build automation?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, it's rather that make is a solution for a problem that did not arise the same way on mainframes.  Software structure (at least for reasonable sized projects) was way more modularized and built around (internal) APIs. Changing a module interface was rather frowned upon - and even more so using global variables and the like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Access to interfaces and data provided was usually encapsulated by interfaces - much like today's idea of methods. Except, we didn't use all these various fancy names. There were interfaces and records (parameter blocks). These 'methods' were kept binary stable as long as possible to avoid the need to compile whole applications at once. Changing some basic structure on the fly and starting a make was seen as quite unprofessional - think before you code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software development was much more incremental, based on module concepts. Modules (and thus interfaces) were (could be) versioned. The task to handle this was often handled by, or at least done with great support from, the linker, handling dependencies including version matching (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, it was a different approach using a much more deliberate process.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Wartime Stories:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I took part in development of a rather large (&gt;1200 modules) mainframe software. In the mid 1990s the development process was stable for more than 10 years (in fact, even longer, predating this project) - when a major customer became interested in the development process used. The usual crap about quality. And the usual combination of outsider management with no real idea about software - or more exactly with about the knowledge of a weekend course about software - and some young graduate with 'fresh ideas' - as well just as fresh as his limited knowledge from university could carry - produced a request to change to a make style development - as our proven process is of course outdated by modern tools. Even worse, the whole team was developing into a single repository only separated by task and only versioned by delivery cycle. Yeah, right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also as usual, the largest customer got more say about things he should not care about than was good. There is no make for the mainframe OS we used, so we had to create our own. Even more so, we didn't have trees of weird source-and-alike files, but well defined libraries holding sources, macros and scripts including many rules about how to combine and evaluate them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short, it took us about a year (and about half a million dollars)  to develop a new build process. We finally settled to a hybrid. The development was done as before, except now every developer had to have his own repository (which of course added way more errors and more management to handle them). When a release was up to be delivered everything was now pumped into the new build system and configurated in one huge almost-an-hour-long build run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course that new system never did report any new error. But hey, modern ... if I only had killed it with the argument that make is way older than the system we had, back when they proposed it :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Linking was also usually not done against a bunch of .o files, but libraries holding versioned binaries - which itself could be the result of a linking process.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6812" LastEditDate="2019-04-23T17:14:29.707" LastActivityDate="2019-04-23T17:14:29.707" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9714" PostTypeId="2" ParentId="9685" CreationDate="2019-04-17T11:40:53.310" Score="6" Body="&lt;p&gt;The name &quot;x86&quot; was never 'given' or 'designed' this way. If I remember correctly, it more or less evolved as a convenient abbreviation for a whole range of compatible processors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the day when PC's became popular, it was important that your PC was &quot;IBM Compatible&quot;. This meant, among other things, your PC must have an Intel 8086 or an 8088. Later, when Intel released more powerful processors such as the (rare) 80186 or (popular) 80286, it was still important that your PC was just &quot;MS-DOS&quot; or &quot;IBM Compatible&quot;. The 80286 was just a faster processor. It had a protected mode feature, but little software actually used or even required that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next step was the 80386. This was an improvement over the 80286 because it had a mode that provided full backward compatibility with 8086 programs. Operating systems such as OS/2, DesqView and MS-Windows used this mode to provide backward compatibility with existing software. Other operating systems such as Linux and *BSD's designed for PC hardware also depended on some new features of the 80386 without actually providing direct compatibility with existing MS-DOS software. All these systems &lt;em&gt;required&lt;/em&gt; a 80386 processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then came the 80486. An even faster and more powerful processor but mainly backward compatible with the '386. So if you bought a '486 you could still run software designed for the '386. The package would say 'needs a 386 or better' or 'needs 386 or 486'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Along came the 80586 or Pentium. And then the Pentium Pro, also known as 80686...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By this time software developers got tired of listing all possible numbers and since most software was still written to be able to run on a '386, the whole list of numbers was abbreviated to just &quot;x86&quot;. This later became synonymous with &quot;32 bit&quot;, because the 80386 was a 32 bit processor and hence software that's written for 'x86' is 32-bit software.&lt;/p&gt;&#xA;" OwnerUserId="12189" LastEditorUserId="7946" LastEditDate="2020-03-18T19:16:37.610" LastActivityDate="2020-03-18T19:16:37.610" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9715" PostTypeId="1" AcceptedAnswerId="9716" CreationDate="2019-04-17T13:26:52.903" Score="27" ViewCount="4063" Body="&lt;p&gt;Why did Microsoft make &lt;code&gt;DOSKEY&lt;/code&gt; a separate command, instead of integrating it with &lt;code&gt;COMMAND.COM&lt;/code&gt;? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think &lt;code&gt;DOSKEY&lt;/code&gt; uses a lot of RAM or was useless in the '80s... Maybe there was another reason not to enable this command automatically?&lt;/p&gt;&#xA;" OwnerUserId="7710" LastEditorUserId="6659" LastEditDate="2019-04-17T22:25:38.870" LastActivityDate="2019-07-08T01:46:42.257" Title="Why wasn't DOSKEY integrated with COMMAND.COM?" Tags="&lt;ms-dos&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9716" PostTypeId="2" ParentId="9715" CreationDate="2019-04-17T13:35:02.597" Score="41" Body="&lt;p&gt;I can think of a number of reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;DOSKEY&lt;/code&gt; isn’t specifically tied to &lt;code&gt;COMMAND.COM&lt;/code&gt;; it provides history for any program which uses &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/319/79&quot;&gt;the same input functions as &lt;code&gt;COMMAND.COM&lt;/code&gt;&lt;/a&gt;, and one could imagine wanting to run &lt;code&gt;DOSKEY&lt;/code&gt; with another command interpreter (although the most popular alternative command interpreter, 4DOS, already included equivalent features);&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;DOSKEY&lt;/code&gt; was introduced late in MS-DOS’s life, in version 5 (1991); since it changed input handling (with its macro support in particular), the MS-DOS developers might have thought that some users wouldn’t want it, or that it could break things (backward compatibility was already very important for Microsoft by that time);&lt;/li&gt;&#xA;&lt;li&gt;memory really was tight in DOS, even with the support for UMBs introduced in DOS 5.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The first reason is really sufficient from my point of view: input editing isn’t handled in &lt;code&gt;COMMAND.COM&lt;/code&gt;, so improving it in &lt;code&gt;COMMAND.COM&lt;/code&gt; wouldn’t have made much sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turns out &lt;code&gt;DOSKEY&lt;/code&gt;’s developers forgot one important feature of the DOS input routine (it’s supposed to handle the date change at midnight), so making it optional turned out to have been a good idea!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(There were a number of history-providing TSRs &lt;a href=&quot;http://www.reimagery.com/fsfd/keyb.htm#cleditors&quot; rel=&quot;noreferrer&quot;&gt;already available then&lt;/a&gt;, but that wouldn’t have been a consideration for Microsoft.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-04-17T14:08:05.670" LastActivityDate="2019-04-17T14:08:05.670" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9717" PostTypeId="2" ParentId="9715" CreationDate="2019-04-17T13:44:29.957" Score="17" Body="&lt;p&gt;Well, first of all, isn't it best if an OS is configurable for each user the way he needs, instead of packing everything into one bloated package?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Basic DOS is supposed to run on small machines, thus a small footprint is a major reason. Making everything non essential (and user convenience is) optional helps&lt;/li&gt;&#xA;&lt;li&gt;Not every User might like or even need it&lt;/li&gt;&#xA;&lt;li&gt;There might be scenarios where DOSKEY is harmful&lt;/li&gt;&#xA;&lt;li&gt;DOSKEY is - like many other 'comforting' add-ons - a late comer.&lt;/li&gt;&#xA;&lt;li&gt;Did I already mention RAM size? Even with full 640 KiB (and UMB), DOS memory was quite challenged when DOSKEY became available.&lt;/li&gt;&#xA;&lt;li&gt;Even if it's 'just' a few KiB, it could really be a drain.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Long story short, having a configurable system to be tailored to each job needed is quite an advantage worth paying the price of a few bytes wasted for headers and duplicate code plus a few milliseconds during boot.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2019-04-17T13:55:09.780" LastActivityDate="2019-04-17T13:55:09.780" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="9718" PostTypeId="1" AcceptedAnswerId="9720" CreationDate="2019-04-17T16:15:12.037" Score="1" ViewCount="255" Body="&lt;p&gt;I'm trying to understand the history of &lt;a href=&quot;http://w3sdesign.com/?gr=u01&amp;amp;ugr=proble#gf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dependency Injection&lt;/a&gt; in compiled languages, &lt;em&gt;as an intentional feature of the language&lt;/em&gt;. The Wikipedia article on the subject is decidedly Java focused, but I know earlier languages supported OOP with interfaces (e.g. pure virtual methods in C++ abstract classes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the design pattern described in the link, a clear requirement on the language compiler is support for  something akin to &lt;code&gt;type interface&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: Then, polymorphism is used to morph the concrete, run-time object into the expected abstract class type used by the client.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A class (Client) accepts the objects it requires automatically at run-time. &lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;A class can use objects solely through their interfaces (ServiceA,ServiceB) and doesn't have to care about how the objects are created.&lt;/li&gt;&#xA;  &lt;li&gt;This greatly simplifies classes and makes them easier to implement, change, test, and reuse.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which OOP language compiler first provided this capability directly in the language's system of typing objects?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;NOTE&lt;/em&gt;: I'm not really looking for speculations on how one might hack this in assembly, C, Fortran, etc., though that would still be interesting if it relates to the history of the feature's evolution.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-04-17T21:28:20.267" LastActivityDate="2019-04-17T21:28:20.267" Title="What was the first language compiler to support subtype polymorphism?" Tags="&lt;programming&gt;&lt;compilers&gt;" AnswerCount="2" CommentCount="29" ClosedDate="2019-04-18T10:03:20.023" ContentLicense="CC BY-SA 4.0" />
  <row Id="9719" PostTypeId="2" ParentId="9712" CreationDate="2019-04-17T16:44:21.837" Score="4" Body="&lt;p&gt;Based on what I know of the history of build automation tools, &lt;code&gt;make&lt;/code&gt; was the first tool of its kind. By this I mean that &lt;code&gt;make&lt;/code&gt; was the first widely-distributed and widely-used tool expressly designed to solve the problem of speeding up software rebuilds by using a dependency graph.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As @Raffzahn very adequately describes, there was never a case where programmers on large projects didn't need to solve this problem. The &quot;problem&quot; was that programmers were solving it over-and-over in isolation for different projects and programming environments. &lt;code&gt;make&lt;/code&gt; brought into existence a tool for just this one thing... which, as you say in the question, is a &quot;Unix-ism&quot; in the best sense.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-04-17T16:44:21.837" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9720" PostTypeId="2" ParentId="9718" CreationDate="2019-04-17T16:52:54.693" Score="4" Body="&lt;p&gt;Simula 67 supports abstract types so I think it could support dependency injection, I'm just not sure if it was ever used as a programming pattern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://rosettacode.org/wiki/Abstract_type#Simula&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://rosettacode.org/wiki/Abstract_type#Simula&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2019-04-17T16:52:54.693" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9721" PostTypeId="2" ParentId="9708" CreationDate="2019-04-17T18:20:46.553" Score="1" Body="&lt;p&gt;Both the Amstrad CPC series of machines and the Sinclair Spectrum exhibited backwards compatibility.&#xA;The Amstrad CPC 464, 664 and 6128 were each compatible with their predecessors, as were the subsequent plus models, despite adding extra capabilities.&#xA;Similarly the Spectrum 48k model was compatible with the 16k model, and the 128, +2 and +3 models all offered new and better hardware while maintaining backwards compatibility.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2019-04-17T18:20:46.553" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9722" PostTypeId="2" ParentId="9718" CreationDate="2019-04-17T19:19:16.713" Score="-3" Body="&lt;p&gt;Hmm. The main problem here is that this is about a design pattern, which are ideas how programming can/should be done. This is already full implemented if developer just follow that path. No 'real' tool needed, even less a language. More so, language extensions or preprocessing scripts can handle the requirement independant of a certain language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Every language that can pass function pointers can do so.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least, the basic idea is something that was used in software development for a long time. Handing over function pointer, nowadays called 'callbacks' are anything but new. Like in data base application were a search function could be called and get a filter handed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or standard screen handler that got called with a screen definition and, depending on the job a wariable number of call backs to read data, check data or write data back into the data base. Sounds much like your case, doesn't it? Programmign wise would that be handled by pseudo code (Macros) to be interpreted at compiletime inserting all necessary unctions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, you already mentioned that there is a huge gray area between inserting a pointer and a dedicated language construct, which is al well defined to be made for the purpose as deign pattern. If you want a reliable answer, on tools and/or languages, the topic does need a better definition how to meet your criteria. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-04-17T19:19:16.713" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9724" PostTypeId="1" AcceptedAnswerId="15938" CreationDate="2019-04-17T20:08:38.797" Score="20" ViewCount="4209" Body="&lt;p&gt;I know that it was possible to create blinking text, but did the operating system itself (I mean, in output from functions of command.com and similar executables) ever make use of blink formatting?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'd think it would be useful for confirmations of really dangerous things like &lt;code&gt;format C:&lt;/code&gt; and such, but perhaps also seen as &quot;over the top&quot; and or just not necessary.&lt;/p&gt;&#xA;" OwnerUserId="832" LastEditorUserId="15334" LastEditDate="2020-09-01T13:05:50.183" LastActivityDate="2021-01-16T09:38:29.857" Title="Did MS-DOS itself ever use blinking text?" Tags="&lt;ms-dos&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9725" PostTypeId="2" ParentId="9712" CreationDate="2019-04-17T20:39:53.840" Score="4" Body="&lt;p&gt;In the ages prior to make, program rebuilds were as fast as you could get the keypunch operator to type up a new stack of cards from your hand-written coding pad.&lt;/p&gt;&#xA;" OwnerUserId="7510" LastActivityDate="2019-04-17T20:39:53.840" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9726" PostTypeId="2" ParentId="9724" CreationDate="2019-04-17T21:29:58.053" Score="25" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;[...] did the operating system itself [...] ever make use of blink formatting?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;No.&lt;/h2&gt;&#xA;&lt;p&gt;MS-DOS was, at the core, machine agnostic. It only used the most basic features provided by the BIOS. While INT 10h function 09h would have provided the ability to set attributes (via BL), its meaning already varies across video cards offered by IBM and even more so with third party cards or non IBM machines. Not to mention that MS-DOS was intended to work with terminals as well, where attributes are even more diverse.&lt;/p&gt;&#xA;&lt;p&gt;MS-DOS only used the most basic characters for output control:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CR&lt;/li&gt;&#xA;&lt;li&gt;LF&lt;/li&gt;&#xA;&lt;li&gt;FF (clear screen)&lt;/li&gt;&#xA;&lt;li&gt;BEL&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-04-18T11:59:35.607" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9727" PostTypeId="2" ParentId="9715" CreationDate="2019-04-17T21:42:41.383" Score="7" Body="&lt;p&gt;The early architecture of COMMAND.COM (based on detailed analysis of DOS 2.1 a long, long time ago) was that a program requesting maximum memory could overwrite all of COMMAND.COM except a tiny portion which would reload from disk on termination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the time DOS 5 was released, 1MB RAM was not uncommon, so this motivation had gone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;But&lt;/strong&gt; Windows 3.0 was released before DOS 5 and Microsoft started pushing for everyone to run Windows all the time, rather than just loading Windows 2.1 runtime for Excel or Pagemaker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 3.0 loaded on top of DOS, and it was common to open a DOS box or run batch files within it. Any bloat in COMMAND.COM would be loaded multiple times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I suggest that integrating functionality to COMMAND.COM would have been an unwise architectural choice in those days.&lt;/p&gt;&#xA;" OwnerUserId="4160" LastActivityDate="2019-04-17T21:42:41.383" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9728" PostTypeId="2" ParentId="9724" CreationDate="2019-04-18T06:39:09.670" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did MS DOS &lt;strong&gt;itself&lt;/strong&gt; ever use blinking text?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What exactly does &quot;itself&quot; mean?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The OS kernel (&lt;code&gt;io.sys&lt;/code&gt; or &lt;code&gt;msdos.sys&lt;/code&gt;) would of course not do anything which is not requested by the currently running program (e.g. &lt;code&gt;command.com&lt;/code&gt;); the kernel cannot know if some text message has the meaning: &quot;Highly critical&quot; or &quot;Operation successful&quot; so the request to change the text attributes must come from the program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In MS-DOS consists of multiple programs. Most of them just wrote out text to the console while the text cursor was only moved implicitly because of printing the text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there were also some &quot;GUI-like&quot; programs (&lt;code&gt;fdisk&lt;/code&gt;, &lt;code&gt;edit&lt;/code&gt;, GW or Q Basic, &lt;code&gt;scandisk&lt;/code&gt;, the DOS-Shell and some backup program) being part of MS-DOS, which modified the content of the the entire text screen and explicitly moved the text cursor to certain positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, the first type of programs (only printing text) &lt;strong&gt;never&lt;/strong&gt; changed the text attributes. Neither color, nor blinking, nor bold. If the user selected blinking green text on blue background using &lt;code&gt;ansi.sys&lt;/code&gt; (see supercat's comment), all of these programs would output all text green and blinking on blue background. If the user did not use &lt;code&gt;ansi.sys&lt;/code&gt;, all text was gray, not blinking on black background.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;GUI-like&quot; programs used different screen attributes (such as different colors, bold or blinking). &lt;code&gt;fdisk&lt;/code&gt; for example used bold text; &lt;code&gt;edit&lt;/code&gt; used different colors. I'm not sure if one of these programs used blinking text.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2019-04-18T06:39:09.670" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9729" PostTypeId="1" AcceptedAnswerId="9731" CreationDate="2019-04-18T09:44:38.150" Score="6" ViewCount="344" Body="&lt;p&gt;How can I input a string in ZX Spectrum BASIC and not show the quotation marks on input?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've written a program for my 3-year old daughter to type in some letters, but she keeps deleting the quotations marks by accident and then gets stuck when the Spectrum shows a flashing &lt;code&gt;?&lt;/code&gt; :-)&lt;/p&gt;&#xA;" OwnerUserId="12342" LastEditorUserId="576" LastEditDate="2019-04-18T10:35:07.410" LastActivityDate="2019-04-18T10:50:45.887" Title="How can I input a string in ZX Spectrum BASIC using INPUT and not show the quotation marks?" Tags="&lt;zx-spectrum&gt;&lt;basic&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9731" PostTypeId="2" ParentId="9729" CreationDate="2019-04-18T10:50:45.887" Score="11" Body="&lt;pre&gt;&lt;code&gt;INPUT LINE a$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://www.worldofspectrum.org/ZXBasicManual/zxmanchap15.html&quot; rel=&quot;noreferrer&quot;&gt;the ZX Spectrum Basic manual&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that plain &lt;code&gt;INPUT a$&lt;/code&gt; will accept quite arbitrary string expressions, e.g. entering &lt;code&gt;&quot;a&quot;+&quot;b&quot;&lt;/code&gt; is the same as entering &lt;code&gt;&quot;ab&quot;&lt;/code&gt;, and you can even use other (defined) string variables. The quotes are thus nothing more than a part of the string expression.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2019-04-18T10:50:45.887" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9732" PostTypeId="1" AcceptedAnswerId="9733" CreationDate="2019-04-18T12:49:48.147" Score="3" ViewCount="608" Body="&lt;p&gt;In the same vein as &lt;a href=&quot;https://softwareengineering.stackexchange.com/questions/390578/what-was-the-first-language-to-use-conditional-keywords&quot;&gt;this question about conditionals&lt;/a&gt;, I am interested in the first time a language provided functionality we assume as a given for modern programming languages. The question is when a programming language fully embraced structured programming by providing all 4 control structures (sequence, selection, iteration &amp;amp; recursion).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, &quot;sequence&quot; seems like a given, but selection, iteration &amp;amp; recursion also need to be provided. As far as I can see that means&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;conditional keywords (e.g. &lt;code&gt;if...then&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;loop keywords (&lt;code&gt;while&lt;/code&gt;, &lt;code&gt;for&lt;/code&gt; etc.)&lt;/li&gt;&#xA;&lt;li&gt;functions which are able to call themselves&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For the keywords, they should be dedicated keywords for the purpose mentioned here, opposed to &quot;things that can also be used that way&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When was a programmer first able to make use of all 4 control structures in a language?&lt;/p&gt;&#xA;" OwnerUserId="10424" OwnerDisplayName="R. Schmitz" LastEditorUserId="10424" LastEditDate="2019-04-18T15:00:51.647" LastActivityDate="2019-04-18T20:56:11.513" Title="What was the first language to offer &quot;full&quot; structured programming support?" Tags="&lt;history&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9733" PostTypeId="2" ParentId="9732" CreationDate="2019-04-18T14:15:09.457" Score="9" Body="&lt;ul&gt;&#xA;&lt;li&gt;By &lt;a href=&quot;https://www.cs.auckland.ac.nz/historydisplays/FourthFloor/ReportsAndViewer/Reports/Flowmatic.pdf&quot; rel=&quot;noreferrer&quot;&gt;FLOW-MATIC&lt;/a&gt; (1955) there are conditional jumps to labels (&lt;code&gt;IF ... GO TO ...&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;The design for Lisp was published on McCarthy's paper &lt;a href=&quot;http://www-formal.stanford.edu/jmc/recursive.html&quot; rel=&quot;noreferrer&quot;&gt;&quot;Recursive Functions of Symbolic Expressions and Their Computation by Machine&quot;&lt;/a&gt; (1960) which had conditionals and recursion. Not implemented until 1959.&lt;/li&gt;&#xA;&lt;li&gt;FORTRAN I (1957) had conditionals and introduced loops (&lt;code&gt;DO&lt;/code&gt;). It won't have recursion until FORTRAN 77 (1977).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.softwarepreservation.org/projects/ALGOL/report/Algol58_preliminary_report_CACM.pdf/&quot; rel=&quot;noreferrer&quot;&gt;ALGOL 58&lt;/a&gt; (1958) had conditionals (&lt;code&gt;if&lt;/code&gt;, &lt;code&gt;switch&lt;/code&gt;), loops (&lt;code&gt;for&lt;/code&gt;, &lt;code&gt;do&lt;/code&gt;) and recursion.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;See also:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Timeline_of_programming_languages&quot; rel=&quot;noreferrer&quot;&gt;Timeline of programming languages&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HXNhEYqFo0o&quot; rel=&quot;noreferrer&quot;&gt;Programming Loops vs Recursion - Computerphile&lt;/a&gt; (video)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://vanemden.wordpress.com/2014/06/18/how-recursion-got-into-programming-a-comedy-of-errors-3/&quot; rel=&quot;noreferrer&quot;&gt;How recursion got into programming: a tale of intrigue, betrayal, and advanced programming-language semantics&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4635" OwnerDisplayName="Theraot" LastEditorUserId="4635" LastEditDate="2019-04-18T15:04:50.603" LastActivityDate="2019-04-18T15:04:50.603" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9734" PostTypeId="1" AcceptedAnswerId="9736" CreationDate="2019-04-18T12:08:32.810" Score="10" ViewCount="2745" Body="&lt;p&gt;The &lt;code&gt;if&lt;/code&gt; keyword is so prevalent in programming that it seems to just be part of it. However, with an integer value and a &lt;code&gt;goto&lt;/code&gt; statement, one cansimulate the functionality of an &lt;code&gt;if&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which means it's not &lt;em&gt;necessary&lt;/em&gt; for a language to have dedicated conditional keywords in order to achieve that functionality. Which in turn makes me think that there must have been a time before somebody created the first &lt;code&gt;if&lt;/code&gt; to be used in a language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my question is: What was the first time a language offered a dedicated keyword for conditional execution?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The word itself doesn't really matter here, it could be &lt;code&gt;AS_IT_OCCURS_THAT&lt;/code&gt; instead of &lt;code&gt;if&lt;/code&gt; for all I care.&lt;/p&gt;&#xA;" OwnerUserId="10424" OwnerDisplayName="R. Schmitz" LastEditorUserId="10424" LastEditDate="2019-04-19T16:50:26.163" LastActivityDate="2019-04-19T16:50:26.163" Title="What was the first language to use conditional keywords?" Tags="&lt;history&gt;" AnswerCount="4" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9735" PostTypeId="2" ParentId="9734" CreationDate="2019-04-18T12:56:53.033" Score="10" Body="&lt;p&gt;Computers since ENIAC have had conditional branch instructions (like jump if zero), which means assembly languages have had such a statement since the beginning, and there is no logical reason for higher-level languages to ever have forgone using it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it's probably theoretically possible to make programs with just your indirect jump idea, you sort of have a chicken and egg problem where it's difficult to get the branch address into the register conditionally in the first place. Implementing a conditional branch using only indirect jumps would add several instructions every time you needed to make a choice, using precious time, memory, and registers,&lt;/p&gt;&#xA;" OwnerUserId="20850" OwnerDisplayName="Karl Bielefeldt" LastActivityDate="2019-04-18T12:56:53.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9736" PostTypeId="2" ParentId="9734" CreationDate="2019-04-18T14:35:13.967" Score="18" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Analytical_Engine&quot; rel=&quot;noreferrer&quot;&gt;Analytical Engine&lt;/a&gt; designed in 1837 was capable of conditional branches&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the wiki (emphasis mine):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The programming language to be employed by users was akin to modern&#xA;  day assembly languages. Loops and &lt;strong&gt;conditional branching&lt;/strong&gt; were possible,&#xA;  and so the language as conceived would have been Turing-complete as&#xA;  later defined by Alan Turing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The wiki later provides an example of the conditional being executed (with the code represented on cards):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, a factorial program would be written as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;N0 6 &#xA;N1 1 &#xA;N2 1 &#xA;× &#xA;L1 &#xA;L0 &#xA;S1&#xA;- &#xA;L0 &#xA;L2 &#xA;S0 &#xA;L2 &#xA;L0 &#xA;CB?11 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;where the CB is the conditional branch instruction or &quot;combination card&quot; used to make the control flow jump,&#xA;  in this case backwards by 11 cards.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ada_Lovelace&quot; rel=&quot;noreferrer&quot;&gt;Ada Lovelace&lt;/a&gt; may very well be the first to have written a program for this machine.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Ada Lovelace's notes were labelled alphabetically from A to G. In note G, she describes an algorithm for the Analytical Engine to compute Bernoulli numbers. It is considered to be the first published algorithm ever specifically tailored for implementation on a computer, and Ada Lovelace has often been cited as the first computer programmer for this reason.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11796" LastActivityDate="2019-04-18T14:35:13.967" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9737" PostTypeId="2" ParentId="9734" CreationDate="2019-04-18T15:19:55.753" Score="6" Body="&lt;p&gt;The answer would, by definition, be &lt;strong&gt;the first programming language&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A little bit of free CS101 here...&lt;/p&gt;&#xA;&lt;p&gt;All algorithms can be expressed using 3 elements: &lt;a href=&quot;https://learnprogramming.academy/programming/sequence-selection-and-iteration-the-building-blocks-of-programming-languages/&quot; rel=&quot;noreferrer&quot;&gt;sequence, selection, and iteration&lt;/a&gt;. Those are the basic building-blocks of a computer program. In order to express an algorithm with a programming language, it &lt;strong&gt;has&lt;/strong&gt; to support those 3 elements in some form. An &amp;quot;if&amp;quot; check is of course a kind of selection.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sequence, Selection, and Iteration are the basic elements that we use&#xA;to tell the computer what to do. The code will definitely look&#xA;different depending on the programming language we use, but the&#xA;algorithm will be the same.&lt;/p&gt;&#xA;&lt;p&gt;So let’s describe these elements:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sequence– the order we want the&#xA;computer to execute the instructions we provide as programmers. For&#xA;example, do this first, then do this, then do that, and so forth.&lt;/li&gt;&#xA;&lt;li&gt;Selection– selecting which path of an algorithm to execute depending&#xA;on some criteria. For example, if you passed a class in school, then&#xA;we execute the operations that clap and cheer and play a song. But if&#xA;you didn’t pass the class, then maybe we would say, “Better luck next&#xA;time, hang in there!”&lt;/li&gt;&#xA;&lt;li&gt;Iteration– looping or repeating. Many times, we&#xA;want to be able to repeat a set of operations a specific number of&#xA;times or until some condition occurs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To get down deeper into computability theory, we call the ability of a model to express any algorithm &lt;a href=&quot;https://en.wikipedia.org/wiki/Turing_completeness&quot; rel=&quot;noreferrer&quot;&gt;Turing completeness&lt;/a&gt;, and selection is required for this. Most CS types will tell you than anything that isn't Turing complete isn't really a programming language.&lt;/p&gt;&#xA;&lt;p&gt;So &lt;strong&gt;by definition &lt;em&gt;every&lt;/em&gt; programming language has some means of selection&lt;/strong&gt;, and always has. Without that, you don't really have a programming language.&lt;/p&gt;&#xA;" OwnerUserId="4345" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-04-18T15:29:12.683" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="9738" PostTypeId="1" AcceptedAnswerId="9746" CreationDate="2019-04-18T15:24:40.640" Score="26" ViewCount="6159" Body="&lt;p&gt;&lt;em&gt;Please don't point out APUs with x86_64 cores used in current generation game consoles, these are not part of the question&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot recall a single arcade system or game console that ever used x86 for its CPU. I'm happy to be corrected in the comments if there were some. Notwithstanding these exceptions, which must be incredibly rare, it sure seems that gaming hardware steered away from this otherwise incredibly popular CPU family.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is this the case? What tradeoffs in game hardware design likely led engineers away from using x86 for the CPU?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="11236" LastEditDate="2019-04-20T13:24:52.313" LastActivityDate="2019-04-20T13:24:52.313" Title="Why weren't discrete x86 CPUs ever used in game hardware?" Tags="&lt;hardware&gt;&lt;gaming&gt;&lt;arcade&gt;&lt;x86&gt;&lt;game-consoles&gt;" AnswerCount="6" CommentCount="8" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9739" PostTypeId="2" ParentId="9734" CreationDate="2019-04-18T15:30:35.570" Score="5" Body="&lt;p&gt;I'm going to go out on a limb here and assume that what is wanted is not a language that has conditional branches i.e. an equivalent to &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if condition then goto someLabel&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;because Turing complete computers have had that since the beginning. I'm going to assume we are talking about a block structured conditional like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if condition&#xA;    some arbitrary sequence of statements including perhaps nested ifs&#xA;else &#xA;    some other arbitrary sequence of statements including perhaps nested ifs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Some early contenders for that would be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Lisp (1958) which has an &lt;code&gt;if&lt;/code&gt; and &lt;code&gt;cond&lt;/code&gt; function. I think &lt;code&gt;cond&lt;/code&gt;predates &lt;code&gt;if&lt;/code&gt;. When I learned Lisp in the 1980's I'm fairly sure that &lt;code&gt;if&lt;/code&gt; wasn't there.&lt;/li&gt;&#xA;&lt;li&gt;Algol 60 (1960) which has the structured &lt;code&gt;if&lt;/code&gt; inherited by most modern imperative languages&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Early versions of FORTRAN and COBOL did not have structured &lt;code&gt;if&lt;/code&gt; statements as far as I know. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2019-04-18T15:30:35.570" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9740" PostTypeId="1" AcceptedAnswerId="9758" CreationDate="2019-04-18T15:45:12.283" Score="7" ViewCount="487" Body="&lt;p&gt;The easily readable structure of having an &lt;code&gt;if&lt;/code&gt; keyword which controls execution of a following block of code is so prevalent in programming that it seems to just be part of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, programming started out with machine code that was far away from the easy to understand&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if condition&#xA;    do thing&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What was the first time a programmer was able to use this simple and intuitive way of executing code based on a condition?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This excludes &lt;code&gt;IF...GOTO&lt;/code&gt; statements, as that - in the sense of this question - only allows to execute a &lt;code&gt;GOTO&lt;/code&gt; statement, opposed to arbitrary code. Also condition and code to execute are split up there and not together anymore. This is more about the &quot;usability for programmers&quot; perspective than about the technical ability to support this feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As user Raffzahn mentioned, this can be called &quot;&lt;em&gt;the first (block) structured language&lt;/em&gt;&quot;.&lt;/p&gt;&#xA;" OwnerUserId="10424" LastEditorUserId="10424" LastEditDate="2019-04-19T11:03:57.967" LastActivityDate="2019-04-22T18:32:11.050" Title="What was the first time a programmer was able to use the well know block structure for conditional code?" Tags="&lt;history&gt;" AnswerCount="4" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="9741" PostTypeId="2" ParentId="9732" CreationDate="2019-04-18T16:07:42.930" Score="5" Body="&lt;p&gt;A couple of misconceptions in this one:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Recursion is just another kind of iteration. It was in fact the &lt;em&gt;only&lt;/em&gt; iteration mechanism provided in early versions of Lisp. Any use of recursion can be transformed into standard looping iteration (although many of them require use of a stack as well). Recursion can be viewed as kind of a hack to be able to leverage the program stack for your stack usage while iterating (in languages that use a program stack). Likewise early Lisp demonstrated that its possible (although not always convenient) to use recursion for all your iteration needs.&lt;/li&gt;&#xA;&lt;li&gt;I have never before heard that support for recursion is required for a language to be considered a &quot;structured language&quot;. Really all that is required is that the language be Turing complete without relying on &quot;unstructured&quot; branch statements (aka: GOTOs)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now with all these caveats, most of the early &quot;Structured Programming&quot; developers were also at the same time involved in the development and use of &lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL&quot; rel=&quot;noreferrer&quot;&gt;ALGOL&lt;/a&gt;. This includes most prominently Dijkstra, who was the leading light in both the Structured Programming movement and developed the first ALGOL 60 compiler. Hoare and Dahl were also very involved in the development of both. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other major languages that were extant at the time were COBOL and FORTRAN. Early FORTRAN in particular made extensive use of GOTOs, along with data overlays that are essentially the data equivalent of GOTOS, and thus a large amount of the development of ALGOL was in reaction to FORTRAN. So if you are looking for the early standard-bearer for the paradigm, ALGOL is probably your language.&lt;/p&gt;&#xA;" OwnerUserId="4345" LastEditorUserId="4345" LastEditDate="2019-04-18T16:36:33.930" LastActivityDate="2019-04-18T16:36:33.930" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9742" PostTypeId="2" ParentId="9738" CreationDate="2019-04-18T16:30:20.883" Score="8" Body="&lt;p&gt;The original 8086 was quickly overshadowed by the Z80, which was somewhat compatible but easier to work with as it required less support hardware. Also many arcade developers preferred the 6502 and derivatives, and then later the 68000 which was easier to work with on both the hardware and software fronts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another issue was that the development machines available for testing code were often 68000 based as well. One prime example was the Sharp X68000. A lot of game programmers of that era were self taught too, and for hobbyist home computer systems Z80 and 6502 dominated with very few using 8086.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the 8086 was much more expensive than the Z80, while offering no real advantages over it unless you were expecting to buy millions and sell a line of compatible computers for years to come.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-04-18T16:30:20.883" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9743" PostTypeId="2" ParentId="9740" CreationDate="2019-04-18T20:21:58.163" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Autocode&quot; rel=&quot;nofollow noreferrer&quot;&gt;Autocode&lt;/a&gt; had the equivalent of an if...then, but written backwards:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;j1,11 ≥ n&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This means &quot;if n &amp;lt;= 11 then jump to label 1&quot;. FORTRAN of course had a more conventional if, but with it's own oddities:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IF N-11 10,20,30&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which means goto 10 if the result is negative (N&amp;lt;11), 20 if its zero (equal) and 30 if it's positive (N&gt;11). This syntax appears to be a side-effect of a particular instruction on the IBM machine it was written on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I'm not sure either really hits without that last proviso in your statement though. But Autocode's solution is essentially the ELSE clause. That was weird...&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-04-18T20:21:58.163" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9745" PostTypeId="2" ParentId="9732" CreationDate="2019-04-18T20:56:11.513" Score="2" Body="&lt;p&gt;This is a copy-paste of my answer to the other question. R. Schmitz said I could do it though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we are talking about a block structured conditional like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if condition&#xA;    some arbitrary sequence of statements including perhaps nested ifs&#xA;else &#xA;    some other arbitrary sequence of statements including perhaps nested ifs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;rather than just &lt;code&gt;if ... goto some label&lt;/code&gt; which is no different to a conditional branch, then two early contenders would be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Lisp (1958) which has an &lt;code&gt;if&lt;/code&gt; and &lt;code&gt;cond&lt;/code&gt; function. I think &lt;code&gt;cond&lt;/code&gt;predates &lt;code&gt;if&lt;/code&gt;. When I learned Lisp in the 1980's I'm fairly sure that &lt;code&gt;if&lt;/code&gt; wasn't there. Lisp also had recursion, which means it had iteration by definition. &lt;/li&gt;&#xA;&lt;li&gt;Algol 60 (1960) which has the structured &lt;code&gt;if&lt;/code&gt; inherited by most modern imperative languages. Also &lt;code&gt;while&lt;/code&gt; and &lt;code&gt;for&lt;/code&gt; loops and recursion.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Early versions of FORTRAN and COBOL did not have structured &lt;code&gt;if&lt;/code&gt; statements as far as I know or recursion.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2019-04-18T20:56:11.513" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9746" PostTypeId="2" ParentId="9738" CreationDate="2019-04-18T21:19:21.013" Score="50" Body="&lt;p&gt;Video game hardware, whether for home consoles or arcade machines, is designed pretty much from scratch.  Hardware designers have pretty much free rein on choosing what CPU to use, basing their choice on factors like cost and ease of programming.  The Intel 8086, quite frankly, was a poorly designed processor and was never well regarded.  While you could argue it made reasonable compromises at the time it was released (1978), these compromises ended up hanging around its neck like an albatross. If IBM hadn't picked the Intel 8088 for its Personal Computer in 1981, you probably wouldn't be asking this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We take the x86 architecture for granted today, but before the IBM PC it was fairly obscure and afterwords widely ridiculed. In particular, it compared poorly with the Motorola 68000 which had a flat 24-bit address space, more orthogonal instruction set and sixteen 32-bit registers. The 8086 used a segmented 20-bit address space, placed more restrictions on how various registers could be used, and only had eight 16-bit registers. It also wasn't particularly cheap, though the 8088 with its 8-bit data bus helped reduce overall costs compared to the 8086.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the 70s and first half of the 80s, 16-bit CPUs like the 8086 and 68000 weren't really much of a consideration. The games of this era didn't demand anything more powerful than an 8-bit Z80 or 6502. While there were Gottlieb/Mylstar arcade games like Q*Bert in the early 80s that used a 5 MHz 8088 CPU, it's not clear what advantage this gave the machines. Performance in games of this era was mostly limited by how fast the CPU could access memory. Because of how the 8086/8 was designed, this made the 8088 effectively about as fast as a Z80 or 6052. These Gottlieb/Mystar arcade games also only had 64k (16-bit) memory maps, so they didn't benefit from the 8088's 20-bit address space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting around the mid-80s, games had started moving beyond the capabilities of 8-bit CPUs. While the dominance of the IBM PC in the personal computer market at this point would've meant there would be programmers out there familiar with the 8086, there would've been few people singing its praises. By and large 68000 CPUs were chosen for new arcade game hardware designs that needed more power than 8-bit CPUs offered. Console hardware, being more cost sensitive, stuck with 8-bit CPUs for the rest of the decade, though most of the next generation went with 16-bit CPUs, either the 68000 or 65816. It's also worth mentioning that the two major new home computer designs of the mid-80s, the Commodore Amiga and Atari ST, also went with the 68000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While arguably the 80386, introduced in 1985, solved a lot of the 8086's problems, with a more orthogonal instruction set, 32-bit flat address space and 32-bit registers, it wasn't until the early 90s that games started demanding the level of performance it offered, and when its price would have dropped to make it competitive in new hardware designs. It's not entirely clear to me why it didn't attract more interest at this point.  The early 90s was also about the time that the IBM PC became the premier platform for home computer gaming. It would've inherited the disdain its predecessors had, but there were some arcade boards designed in the early 90s that use the 8086-compatible NEC V30 type CPUs. I think the main factor against at the time was that back then RISC-based architectures were considered the future, while CISC-based architectures like the x86 and 68k were considered obsolete. Still, that didn't stop Sega from using the &lt;a href=&quot;https://en.wikipedia.org/wiki/NEC_V60&quot; rel=&quot;noreferrer&quot;&gt;CISC-based NEC V60 CPU&lt;/a&gt; in its arcade hardware designs in the early 90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the rest of the 90s though, RISC-based CPUs like the Hitachi SH and IBM PowerPC, dominated arcade hardware designs -- at least at the high performance end. At the lower performance end, cheaper 68k and NEC V30 based designs were still in use. In the home console market, the 5th generation was almost all RISC CPUs, though notably the Japan-only &lt;a href=&quot;https://en.wikipedia.org/wiki/FM_Towns_Marty&quot; rel=&quot;noreferrer&quot;&gt;FM Towns Marty&lt;/a&gt; used an AMD 386SX CPU. For the most part, this situation continues to around the turn of the century, with both arcade games and the 6th generation of consoles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A big exception is Microsoft's Xbox. A 6th generation console, released in 2001, it has an Intel Pentium III CPU, much like PCs of the time. It's not surprising that Microsoft, with its long experience using the x86 CPU, made this design choice, but it's only a few years after this that mainstream Intel and AMD CPUs start appearing in arcade hardware.  Although these x86-based arcade machines aren't really new hardware designs, they're PC clones running Windows or Linux. The 7th generation of home consoles went exclusively with PowerPC CPUs, but I suspect this had more do with the prices IBM was offering rather than the relative technical merits of the CPUs.  Arcade games went increasingly with PC clone based hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today the choice of CPU in current game hardware designs is unremarkable. Home consoles and arcade games use x86 CPUs just like our personal computers do. Handheld consoles use ARM CPUs just like our phones do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in the early days of game hardware design, x86 CPUs weren't chosen simply because there wasn't good reason to use one except for IBM PC compatibility. Later 32-bit x86 CPUs solved a lot the architecture's problems but RISC CPUs were seen as more modern. Today the ubiquity x86 architecture combined with its unrivalled speed has turned it into the dominant CPU architecture for game hardware that doesn't need to run off a battery.  &lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorUserId="-1" LastEditDate="2019-04-19T16:29:47.100" LastActivityDate="2019-04-19T16:29:47.100" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="9747" PostTypeId="2" ParentId="9738" CreationDate="2019-04-18T21:58:47.123" Score="9" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Konix_Multisystem&quot; rel=&quot;noreferrer&quot;&gt;Konix Multisystem&lt;/a&gt;: 6 MHz 8086 (1989).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sure, it was cancelled just before release, but it got amazing press (I remember Jeff Minter raving about it at Earls Court) and some of it lived on as the (68k based) Atari Jaguar.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-04-18T21:58:47.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9748" PostTypeId="1" AcceptedAnswerId="9750" CreationDate="2019-04-18T23:38:06.160" Score="15" ViewCount="1175" Body="&lt;p&gt;In the version of command.com included with MS-DOS, &lt;code&gt;DIR&lt;/code&gt; seems to print files in a random order, but if one runs multiple &lt;code&gt;DIR&lt;/code&gt; commands, they all print the files in the same order. This order does not appear to be based on date, size, or alphabetization. So what is the order? Does it simply print whatever files it finds first?&lt;/p&gt;&#xA;" OwnerUserId="12364" LastEditorUserId="79" LastEditDate="2019-04-19T17:39:15.757" LastActivityDate="2019-04-24T13:14:31.627" Title="What order were files/directories output in dir?" Tags="&lt;ms-dos&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9749" PostTypeId="2" ParentId="9748" CreationDate="2019-04-19T00:37:10.163" Score="4" Body="&lt;p&gt;Whatever it finds first.  &lt;code&gt;DIR&lt;/code&gt; in MS-DOS &lt;code&gt;command.com&lt;/code&gt; starts at the beginning of the directory table and reads it through to the end.  The files will be in the order they were added to the directory table.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2019-04-19T00:37:10.163" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9750" PostTypeId="2" ParentId="9748" CreationDate="2019-04-19T02:40:59.637" Score="31" Body="&lt;p&gt;When a new file is created in a FAT-based file system, its entry will be placed in the first vacant directory slot, if there is one, or else the directory will be extended to add another cluster worth of vacant slots if possible (and the new entry will be placed in the first of those).  If no files are ever deleted, files will be assigned directory entries in the order of creation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before the advent of long file names, each file that was deleted would result in an empty directory slot, which would get filled by the next file to be created.  Long file names complicate this process because they are stored using multiple consecutive directory slots (though I don't know the exact process).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;dir&quot; command in MS-DOS defaults to reporting files in the same order as their directory entries, but command-line arguments in later versions allow sorting by various criteria.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2019-04-24T13:14:31.627" LastActivityDate="2019-04-24T13:14:31.627" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9751" PostTypeId="1" AcceptedAnswerId="9754" CreationDate="2019-04-19T05:19:10.190" Score="47" ViewCount="9645" Body="&lt;p&gt;There is a paradox about floating point that I'm trying to understand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Floating point is an eternal struggle with the problem that real numbers are both essential and incomputable. It's the best solution we have for most calculations involving physical quantities, but has the perennial problems of limited precision and range; many volumes have been written about how to deal with these problems, even down to hardware engineers getting headaches implementing support for subnormal numbers, only to have programmers promptly turning this off because it kills performance on workloads where many numbers iterate to zero. (The usual reference here is the introductory document &lt;a href=&quot;https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;What every computer scientist should know about floating-point arithmetic&lt;/em&gt;&lt;/a&gt;, but for a more in-depth discussion, it's worth reading the writings of William Kahan, one of the world's foremost experts on the topic,  and a very clear writer.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The usual standard for floating point where substantial precision is required is IEEE-754 double precision, 64 bits. It's the best most hardware provides; doing even slightly better typically requires switching to a software solution for a dramatic slowdown.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The x87 went one better and provided extended precision, 80 bits. A Google search finds many articles about this, and almost all of them lament the problem that when compilers spill temporaries from registers to memory, they round to 64 bits, so the exact results very quasi-randomly depending on the behavior of the optimizer, which admittedly is a problem indeed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The obvious solution is for the in-memory format to be also 80 bits, so that you get both extended precision and consistency. But I have not encountered any mention, ever, of this being used. It's moot now that one uses SSE2 which doesn't provide extended precision, but I would expect it to have been used in the days when x87 was the available floating-point instruction set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paradox is this: on the one hand, there is much discussion of limited precision being a big problem. On the other hand, Intel provided a solution with an extra eleven bits of precision and five bits of exponent, that would cost very little performance to use (since the hardware implemented it whether you used it or not), and yet everyone seemed to behave as though this had no value, and to positively celebrate the move to SSE2 where extended precision is no longer available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did any compilers ever make full use of extended precision (i.e. 80 bits in memory as well as in registers)? If not, why not?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10854" LastEditDate="2019-04-24T11:38:52.637" LastActivityDate="2020-09-30T15:47:56.530" Title="Did any compiler fully use Intel x87 80-bit floating point?" Tags="&lt;history&gt;&lt;compilers&gt;&lt;floating-point&gt;" AnswerCount="7" CommentCount="2" FavoriteCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="9752" PostTypeId="2" ParentId="9748" CreationDate="2019-04-19T05:44:36.177" Score="22" Body="&lt;p&gt;&lt;code&gt;DIR&lt;/code&gt; lists files in the order they’re returned by the &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/89/29.html&quot; rel=&quot;noreferrer&quot;&gt;find first&lt;/a&gt; and &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/91/29.html&quot; rel=&quot;noreferrer&quot;&gt;find next&lt;/a&gt; calls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On FAT file systems, RAM drives, CD-ROMs etc. this is the order of the directory entries on disk, which on FAT file systems is file creation order as long as no files are deleted. On network file systems, it’s whatever order the server and redirector choose. Other file system drivers can exhibit different behaviour; thus on &lt;a href=&quot;http://pages.cs.wisc.edu/~bolo/shipyard/hpfs.html&quot; rel=&quot;noreferrer&quot;&gt;HPFS&lt;/a&gt; and NTFS, which sort directories’ contents on disk, files are returned in the file systems sort order (as can be seen in OS/2 or Windows virtual DOS boxes on HPFS or NTFS volumes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are tools which will re-order entries on disk, to provide a permanent sort order for &lt;code&gt;DIR&lt;/code&gt;. Defragmenting could also re-order files (commonly, directories first, then files).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS 5 added various sorting options to &lt;code&gt;DIR&lt;/code&gt; itself; the order then depends only on those, when present.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-04-19T18:52:14.907" LastActivityDate="2019-04-19T18:52:14.907" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9753" PostTypeId="2" ParentId="9738" CreationDate="2019-04-19T06:22:09.890" Score="4" Body="&lt;p&gt;I have no info about the gaming consoles but when I was creating my own HW computing stuff (for different purposes) I did not use Intel &lt;strong&gt;CPU&lt;/strong&gt;s as they require additional &lt;strong&gt;IC&lt;/strong&gt;s just to be able to work (It stuck till today as the &lt;strong&gt;PC&lt;/strong&gt;s have a chipsets on board...). &lt;strong&gt;Z80&lt;/strong&gt; and or &lt;strong&gt;MCU&lt;/strong&gt;s (even from Intel) was preferred by me as it did not need those and you know fewer &lt;strong&gt;IC&lt;/strong&gt;s is usually cheaper, easier to design and manufacture &lt;strong&gt;PCB&lt;/strong&gt; ... Once &lt;strong&gt;MCU&lt;/strong&gt;'s computing power matched my needs I stick with those and using them till today in my designs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my bet is that in early day game console designers used similar reasoning ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastActivityDate="2019-04-19T06:22:09.890" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9754" PostTypeId="2" ParentId="9751" CreationDate="2019-04-19T06:57:00.960" Score="42" Body="&lt;p&gt;Yes.  For example, the C math library has had full support for &lt;code&gt;long double&lt;/code&gt;, which on x87 was 80 bits wide, since C99.  Previous versions of the standard library supported only the &lt;code&gt;double&lt;/code&gt; type.  Conforming C and C++ compilers also perform &lt;code&gt;long double&lt;/code&gt; math if you give the operations a &lt;code&gt;long double&lt;/code&gt; argument.  (Recall that, in C, &lt;code&gt;1.0/3.0&lt;/code&gt; divides a &lt;code&gt;double&lt;/code&gt; by another &lt;code&gt;double&lt;/code&gt;, producing a &lt;code&gt;double&lt;/code&gt;-precision result, and to get &lt;code&gt;long double&lt;/code&gt; precision, you would write &lt;code&gt;1.0L/3.0L&lt;/code&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;GCC, in particular, even has options such as &lt;code&gt;-ffloat-store&lt;/code&gt; to turn &lt;em&gt;off&lt;/em&gt; computing intermediate results to a higher precision than a &lt;code&gt;double&lt;/code&gt; is supposed to have.  That is, on some architectures, the fastest way to perform some operations on &lt;code&gt;double&lt;/code&gt; arguments is to use extra precision, but that might produce a non-portable result, so GCC has an option to always round &lt;code&gt;double&lt;/code&gt; intermediate values off.&lt;/p&gt;&#xA;&lt;p&gt;Testing with godbolt.org, GCC, Clang and ICC in x87 mode all perform 80-bit computations and memory stores with &lt;code&gt;long double&lt;/code&gt; variables—except that they will optimize constants such as &lt;code&gt;0.5L&lt;/code&gt; to &lt;code&gt;double&lt;/code&gt; when that will save memory at no loss of precision.  MSVC 2017, however, only supports 64-bit &lt;code&gt;long double&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Although you asked specifically about x87, the 68K architecture also had 80-bit FP hardware, and GCC made &lt;code&gt;long double&lt;/code&gt; 80 bits wide on that target.&lt;/p&gt;&#xA;&lt;p&gt;Fortran 90 finally provided a reasonably-portable way to specify a type with at least the precision of an 80-bit float (with &lt;code&gt;kind&lt;/code&gt; and &lt;code&gt;SELECTED_REAL_KIND()&lt;/code&gt;).  These might give you double-double or 128-bit math on other implementations.  Even before then, some Fortran compilers provided extensions such as &lt;code&gt;REAL*10&lt;/code&gt;.  Ada was another language that allowed the programmer to specify a minimum number of &lt;code&gt;DIGITS&lt;/code&gt; of precision.  There were other compilers that supported 80-bit math to some degree as well.  For example, Turbo Pascal had an &lt;code&gt;Extended&lt;/code&gt; type, although its math library supported only &lt;code&gt;Real&lt;/code&gt; arguments.&lt;/p&gt;&#xA;&lt;p&gt;Another possible example is Haskell, which provided both exact &lt;code&gt;Rational&lt;/code&gt; types and arbitrary-precision floating-point through &lt;code&gt;Data.Number.CReal&lt;/code&gt;.  So far as I know, no implementation used x87 80-bit hardware, but it might still be an answer to your question.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="15334" LastEditDate="2020-09-30T15:15:48.327" LastActivityDate="2020-09-30T15:15:48.327" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9755" PostTypeId="2" ParentId="9738" CreationDate="2019-04-19T07:19:23.840" Score="9" Body="&lt;p&gt;The original Xbox was an ~$800 computer sold at a loss, with embedded hardware making it impossible to use it as such. To my knowledge, Microsoft was the first company to take that gamble: that it couldn't be &lt;strong&gt;hacked and used as a home PC, and therefore negate the sales of their peripherals or software that they get kickbacks on&lt;/strong&gt;. They took that gamble because (they're a &lt;em&gt;computer&lt;/em&gt; company, not a &lt;em&gt;gaming&lt;/em&gt; company) they could afford it, and they won big because they had competent people design the system, and a marketing strategy to suit.&lt;/p&gt;&#xA;" OwnerUserId="4220" LastActivityDate="2019-04-19T07:19:23.840" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9756" PostTypeId="2" ParentId="9751" CreationDate="2019-04-19T07:23:26.707" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did any compilers ever make full use of extended precision (i.e. 80&#xA;  bits in memory as well as in registers)? If not, why not?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Since any calculations inside the x87 fpu have 80bit precision by default, any compiler that's able to generate x87 fpu code, is already using extended precision.&#xA;I also remember using &lt;code&gt;long double&lt;/code&gt; even in 16-bit compilers for real mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The very similar situation was in 68k world, with FPUs like 68881 and 68882 supporting 80bit precision by default and any FPU code without special precautions would keep all register values in that precision. There was also &lt;code&gt;long double&lt;/code&gt; datatype.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;On the other hand, Intel provided a solution with an extra eleven bits&#xA;  of precision and five bits of exponent, that would cost very little&#xA;  performance to use (since the hardware implemented it whether you used&#xA;  it or not), and yet everyone seemed to behave as though this had no&#xA;  value&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The usage of &lt;code&gt;long double&lt;/code&gt; would prevent contemporary compilers from ever making calculations using SSE/whatever registers and instructions. And SSE is actually a very fast engine, able to fetch data in large chunks and make several computations in parallel, every clock. The x87 fpu now is just a legacy, not being very fast. So the deliberate usage of 80bit precision now would be certainly a huge performance hit.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-04-19T07:23:26.707" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9757" PostTypeId="2" ParentId="9740" CreationDate="2019-04-19T10:42:16.477" Score="6" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL_60&quot; rel=&quot;noreferrer&quot;&gt;ALGOL-60&lt;/a&gt; is the obvious candidate; it and its predecessor ALGOL-58 (for which I can find no code samples!) are credited with inventing the BEGIN/END block structure.&lt;/p&gt;&#xA;" OwnerUserId="778" LastActivityDate="2019-04-19T10:42:16.477" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9758" PostTypeId="2" ParentId="9740" CreationDate="2019-04-19T11:14:50.503" Score="5" Body="&lt;p&gt;With the rather vague wording the question does leave us with several options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If it's just about conditional execution of non control transfer instructions, then &lt;a href=&quot;http://sicherheitsdenkemachtkeineposter.de/plattitu.de/zuse/technik/freiburger.html&quot; rel=&quot;noreferrer&quot;&gt;Freiburger Code&lt;/a&gt; for Zuse's Z22 of 1955 will do it.&lt;/li&gt;&#xA;&lt;li&gt;If it's about conditional execution of one or more instruction then any language with conditioned control transfer (&lt;code&gt;IF cond THEN label&lt;/code&gt;) will do it, as by negating the condition any code can be inserted between both occurences of &lt;code&gt;label&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;But if this is about block structured code&lt;/strong&gt;, then the &lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL&quot; rel=&quot;noreferrer&quot;&gt;ALGOL Family&lt;/a&gt; will fit all your criteria - and the Z22 was the first machine to operate one in 1958 (and the transistorized Z23 being the first machine to be delivered with an Algol compiler by default (1961))&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-04-19T11:14:50.503" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9759" PostTypeId="2" ParentId="9751" CreationDate="2019-04-19T11:47:17.550" Score="19" Body="&lt;p&gt;I worked for Borland back in the days of the 8086/8087. Back then, both Turbo C and Microsoft C defined &lt;code&gt;long double&lt;/code&gt; as an 80-bit type, matching the layout of Intel's 80-bit floating-point type. Some years later, when Microsoft got cross-hardware religion (maybe at the same time as they released Windows NT?) they changed their compiler to make &lt;code&gt;long double&lt;/code&gt; a 64-bit type. To the best of my recollection, Borland continued to use 80 bits.&lt;/p&gt;&#xA;" OwnerUserId="7349" LastEditorUserId="7349" LastEditDate="2019-04-19T11:52:50.063" LastActivityDate="2019-04-19T11:52:50.063" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9760" PostTypeId="2" ParentId="9751" CreationDate="2019-04-19T12:06:26.400" Score="41" Body="&lt;p&gt;TL:DR: &lt;strong&gt;Yes&lt;/strong&gt;, most C/C++ compilers other than MSVC expose an 80-bit IEEE754 Extended Precision format (x87, 68881) as &lt;code&gt;long double&lt;/code&gt;, and some implementations of other languages have it as REAL10 or whatever name.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;But no&lt;/strong&gt;, none of the major C compilers had an option to force &lt;em&gt;promoting&lt;/em&gt; &lt;code&gt;double&lt;/code&gt; locals/temporaries to 80-bit even across spill/reload, only keeping them as 80-bit when it was convenient to keep them in registers anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So code had to be written specifically to use it, in a way that often is incompatible with auto-vectorization with SSE/SSE2 because it forces 80-bit x87 even when SSE2 for SIMD &lt;code&gt;float&lt;/code&gt;/&lt;code&gt;double&lt;/code&gt; is available.  (And most existing code is written to use &lt;code&gt;double&lt;/code&gt;, not &lt;code&gt;long double&lt;/code&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://randomascii.wordpress.com/2012/03/21/intermediate-floating-point-precision/&quot; rel=&quot;noreferrer&quot;&gt;Bruce Dawson's Intermediate Floating-Point Precision&lt;/a&gt;&lt;/strong&gt; article is essential reading if you're wondering about whether extra precision for temporaries is helpful or harmful.  He has examples that demonstrate both, and links to articles that conclude one way and the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also very importantly, he has lots of specific details about what Visual Studio / MSVC actually does, and what gcc actually does, with x87 and with SSE/SSE2.  Fun fact: MSVC before VS2012 used &lt;code&gt;double&lt;/code&gt; for &lt;code&gt;float * float&lt;/code&gt; even when using SSE/SSE2 instructions!  (Presumably to match the numerical behaviour of x87 with its precision set to 53-bit significand; which is what MSVC does without SSE/SSE2.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;His whole series of FP articles is &lt;em&gt;excellent&lt;/em&gt;; index in &lt;a href=&quot;https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;that would cost very little performance to use (since the hardware implemented it whether you used it or not)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;This is an overstatement&lt;/strong&gt;.  Working with 80-bit &lt;code&gt;long double&lt;/code&gt; in x87 &lt;em&gt;registers&lt;/em&gt; has zero extra cost, but &lt;strong&gt;as memory operands they are definitely 2nd-class citizens in both ISA design and performance&lt;/strong&gt;.  Most x87 code involves a significant amount of loading and storing, something like Mandelbrot iterations being a rare exception at the upper end of computational intensity.  Some round constants can be stored as &lt;code&gt;float&lt;/code&gt; without precision loss, but runtime variables usually can't make any assumptions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compilers that &lt;em&gt;always&lt;/em&gt; promoted temporaries / local variables to 80-bit even when they needed to be spilled/reloaded would create slower code (as @Davislor's answer seems to suggest would have been an option for gcc to implement).  See below about when compilers actually round C &lt;code&gt;double&lt;/code&gt; temporaries and locals to IEEE binary64: any time they store/reload.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;80-bit REAL10 / &lt;code&gt;long double&lt;/code&gt; can't be a memory operand for &lt;a href=&quot;https://www.felixcloutier.com/x86/fadd:faddp:fiadd&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;fadd&lt;/code&gt;&lt;/a&gt; / &lt;code&gt;fsub&lt;/code&gt; / &lt;code&gt;fmul&lt;/code&gt; / &lt;code&gt;fdiv&lt;/code&gt; / etc.&lt;/strong&gt;  Those only support using 32 or 64-bit float/double memory operands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to work with an 80-bit value from memory, you need an extra &lt;code&gt;fld&lt;/code&gt; instruction. (Unless you want it in a register separately anyway, then the separate &lt;code&gt;fld&lt;/code&gt; isn't &quot;extra&quot;).  On P5 Pentium, memory operands for instructions like &lt;code&gt;fadd&lt;/code&gt; have no extra cost, so if you already had to spill a value earlier, adding it from memory is efficient for &lt;code&gt;float&lt;/code&gt;/&lt;code&gt;double&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you need an extra &lt;a href=&quot;http://www.ray.masmcode.com/tutorial/fpuchap1.htm&quot; rel=&quot;noreferrer&quot;&gt;x87 stack register&lt;/a&gt; to load it into.  &lt;code&gt;fadd st5, qword [mem]&lt;/code&gt; isn't available (only memory source with the top of the register stack &lt;code&gt;st0&lt;/code&gt; as an implicit destination), so memory operands didn't help much to avoid &lt;code&gt;fxch&lt;/code&gt;, but if you were close to filling up all 8 &lt;code&gt;st0..7&lt;/code&gt; stack slots then having to load might require you to spill something else.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;fst&lt;/code&gt; to store &lt;code&gt;st0&lt;/code&gt; to memory &lt;em&gt;without&lt;/em&gt; popping the x87 stack is only available for &lt;code&gt;m32&lt;/code&gt; / &lt;code&gt;m64&lt;/code&gt; operands&lt;/strong&gt; (IEEE binary32 &lt;code&gt;float&lt;/code&gt; / IEEE binary64 &lt;code&gt;double&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.felixcloutier.com/x86/fst:fstp&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;fstp m32/m64/m80&lt;/code&gt;&lt;/a&gt; to store-and-pop is used more often, but there are some use-cases where you want to store and keep using a value.  Like in a computation where one result is also part of a later expression, or an array calc where &lt;code&gt;x[i]&lt;/code&gt; depends on &lt;code&gt;x[i-1]&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to store 80-bit &lt;code&gt;long double&lt;/code&gt;, &lt;code&gt;fstp&lt;/code&gt; is your only option.  You might need use &lt;code&gt;fld st0&lt;/code&gt; to duplicate it, then &lt;code&gt;fstp&lt;/code&gt; to pop that copy off.  (You can &lt;code&gt;fld&lt;/code&gt; / &lt;code&gt;fstp&lt;/code&gt; with a register operand instead of memory, as well as &lt;code&gt;fxch&lt;/code&gt; to swap a register to the top of the stack.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;80-bit FP load/store is significantly slower than 32-bit or 64-bit&lt;/strong&gt;, and not (just) because of larger cache footprint.  On original Pentium, it's close to what you might expect from 32/64-bit load/store being a single cache access, vs. 80-bit taking 2 accesses (presumably 64 + 16 bit), but on later CPUs it's even worse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some perf numbers from &lt;a href=&quot;https://agner.org/optimize/&quot; rel=&quot;noreferrer&quot;&gt;Agner Fog's instruction tables&lt;/a&gt; for some 32-bit-only CPUs that were relevant in the era before SSE2 and x86-64.  I don't have 486 numbers; Agner Fog only covers Pentium and earlier, and &lt;a href=&quot;http://instlatx64.atw.hu/&quot; rel=&quot;noreferrer&quot;&gt;http://instlatx64.atw.hu/&lt;/a&gt; only has CPUID from a 486, not instruction latencies.  And its ppro / PIII latency/throughput numbers don't cover fld/fstp.  It does show &lt;code&gt;fsqrt&lt;/code&gt; and &lt;code&gt;fdiv&lt;/code&gt; performance being slower for full 80-bit precision, though.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;P5 Pentium (in-order pipelined dual issue superscalar):  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;fld m32/m64&lt;/code&gt; (load float/double into 80-bit x87 ST0): 1 cycle, pairable with fxchg.  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;fld m80&lt;/code&gt; : 3 cycles, not pairable, and (unlike &lt;code&gt;fadd&lt;/code&gt; / &lt;code&gt;fmul&lt;/code&gt; which are pipelined), not overlapable with later FP or integer instructions.  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;fst(p) m32/m64&lt;/code&gt; (round 80-bit ST0 to float/double and store): 2 cycles, not pairable or overlapable&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;fstp m80&lt;/code&gt;: (note &lt;em&gt;only&lt;/em&gt; available in &lt;code&gt;pop&lt;/code&gt; version that frees the x87 register): 3 cycles, not pairable&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;P6 Pentium Pro / Pentium II / Pentium III.  (out-of-order 3-wide superscalar, decodes to 1 or more RISC-like micro-ops that can be scheduled independently)&lt;br&gt;&#xA;(Agner Fog doesn't have useful latency numbers for FP load/store on this uarch)  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;fld m32/m64&lt;/code&gt; is 1 uop for the load port.  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;fld m80&lt;/code&gt; : 4 uops total: 2 ALU p0, 2 load port  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;fst(p) m32/m64&lt;/code&gt; 2 uops (store-address + store-data, not micro-fused because that only existed on P-M and later)   &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;fstp m80&lt;/code&gt;: 6 uops total: 2 ALU p0, 2x store-address, 2x store-data.  I guess ALU extract into 64-bit and 16-bit chunks, as inputs for 2 stores.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Multi-uop instructions can only be decoded by the &quot;complex&quot; decoder on Intel CPUs (while simple instructions can decode in parallel, in patterns like 1-1-1 up to 4-1-1), so 4-uop &lt;code&gt;fld m80&lt;/code&gt; can lead to the previous cycle only producing 1 uop in the worst case.  6 uops for &lt;code&gt;fstp m80&lt;/code&gt; is more than 4, so decoding it requires the microcode sequencer.  These decode bottlenecks could lead to bubbles in the front-end, as well as / instead of possible back-end bottlenecks.  (P6-family CPUs, especially later ones with better back-end throughput, can bottleneck on instruction fetch/decode in the front-end if you aren't careful; see Agner Fog's microarch pdf.  Keeping the issue/rename stage fed with 3 uops / clock can be hard, or 4 on Core2 and later.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Agner doesn't have latencies or throughputs for FP loads/stores on original P6 (the &quot;1 cycle&quot; latency in a couple columns appears bogus).  But it's probably similar to later CPUs, where &lt;strong&gt;&lt;code&gt;m80&lt;/code&gt; has worse throughput than you'd expect from the uop counts / ports&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pentium-M: 1 per 3 cycle throughput for &lt;code&gt;fstp m80&lt;/code&gt; 6 uops.  vs. 1 uop / 1-per-clock for &lt;code&gt;fst(p) m32/m64&lt;/code&gt;, with micro-fusion of the store-address and store-data uops into a single fused-domain uop that can decode in any slot on the simple decoders.&lt;/li&gt;&#xA;&lt;li&gt;Core 2 (Merom) / Nehalem: &lt;code&gt;fld m80&lt;/code&gt;: 1 per 3 cycles (4 uops)&lt;br&gt;&#xA;&lt;code&gt;fstp m80&lt;/code&gt; 1 per 5 cycles (7 uops: 3 ALU + 2x each store-address and store-data). Agner's latency numbers show 1 extra cycle for both load and store.&lt;/li&gt;&#xA;&lt;li&gt;Pentium 4 (pre-Prescott): &lt;code&gt;fld m80&lt;/code&gt; 3+4 uops, 1 per 6 cycles vs. 1-uop pipelined.&lt;br&gt;&#xA;&lt;code&gt;fstp m80&lt;/code&gt;: 3+8 uops, 1 per 8 cycles vs. 2+0 uops with 2 to 3c throughput.  Prescott is similar&lt;/li&gt;&#xA;&lt;li&gt;Skylake: &lt;code&gt;fld m80&lt;/code&gt;: 1 per 2 cycles (4 uops) vs. 1 per 0.5 cycles for m32/m64.&lt;br&gt;&#xA;&lt;code&gt;fstp m80&lt;/code&gt;: Still 7 uops, 1 per 5 cycles vs. 1 per clock for normal stores.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;AMD K7/K8: &lt;code&gt;fld m80&lt;/code&gt;: 7 m-ops, 1 per 4-cycle throughput (vs. 1 per 0.5c for 1 m-op &lt;code&gt;fld m32/m64&lt;/code&gt;).&lt;br&gt;&#xA;&lt;code&gt;fstp m80&lt;/code&gt;: 10 m-ops, 1 per 5-cycle throughput.  (vs. 1 m-op fully pipelined &lt;code&gt;fst(p) m32/m64&lt;/code&gt;).  The latency penalty on these is much higher than on Intel, e.g. 16 cycle m80 loads vs. 4-cycle m32/m64.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;AMD Bulldozer: &lt;code&gt;fld m80&lt;/code&gt;: 8 ops/14c lat/4c tput.  (vs. 1 op/8c lat/1c tput for m32/m64).  Interesting that even regular &lt;code&gt;float&lt;/code&gt;/&lt;code&gt;double&lt;/code&gt; x87 loads have half throughput of SSE2 / AVX loads.&lt;br&gt;&#xA;&lt;code&gt;fstp m80&lt;/code&gt;: 13 ops/9c lat/&lt;strong&gt;20c tput&lt;/strong&gt;.  (vs. 1 op/8c lat/1c tput).  Piledriver/Steamroller are similar, that catastrophic store throughput of one per 20 or 19 cycles is real.&lt;br&gt;&#xA;(Bulldozer-family's high load/store latencies for regular m32/m64 operands is related to having a &quot;cluster&quot; of 2 weak integer cores sharing a single FPU/SIMD unit.  Ryzen abandoned this in favour of SMT in the style of Intel's Hyperthreading.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;There's definitely a chicken/egg effect here&lt;/strong&gt;; if compilers did make code that regularly used stored/reloaded 80-bit temporaries &lt;em&gt;in memory&lt;/em&gt;, CPU designers would spend some more transistors to make it more efficient at least on later CPUs.  Maybe doing a single 16-byte unaligned cache access when possible, and grabbing the required 10 bytes from that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fun fact: &lt;code&gt;fld m32/m64&lt;/code&gt; can raise / flag an FP exception (&lt;code&gt;#IA&lt;/code&gt;) if the source operand is SNaN, but &lt;a href=&quot;https://www.felixcloutier.com/x86/fld#floating-point-exceptions&quot; rel=&quot;noreferrer&quot;&gt;Intel's manual says&lt;/a&gt; this can't happen &lt;em&gt;if the source operand is in double extended-precision floating-point format&lt;/em&gt;.  So it can just stuff the bits into an x87 register without looking at them, unlike fld m32 / m64 where it has to expand the significand/exponent fields.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So ironically, on recent CPUs where the main use-case for x87 is for 80-bit, 80-bit float support is relatively even &lt;em&gt;worse&lt;/em&gt; than on older CPUs.  Obviously CPU designers don't put much weight on that and assume it's mostly used by old 32-bit binaries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;x87 and MMX are de-prioritized, though, e.g. Haswell made &lt;code&gt;fxch&lt;/code&gt; a 2-uop instruction, up from 1 in previous uarches.  (Still 0 latency using register renaming, though.  See &lt;a href=&quot;https://stackoverflow.com/questions/45766444/why-is-xchg-reg-reg-a-3-micro-op-instruction-on-modern-intel-architectures&quot;&gt;Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures?&lt;/a&gt; for some thoughts on that and &lt;code&gt;fxch&lt;/code&gt;.)  And &lt;code&gt;fmul&lt;/code&gt; / &lt;code&gt;fadd&lt;/code&gt; throughputs are only 1 per clock on Skylake, vs. 2 per clock for SSE/AVX vector or scalar add/mul/fma.  On Skylake even some MMX integer SIMD instructions run on fewer execution ports than their XMM equivalents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(If you're looking at the tables yourself, &lt;code&gt;fbld&lt;/code&gt; and &lt;code&gt;fbstp m80bcd&lt;/code&gt; are insanely slow because they convert from/to BCD, thus requiring conversion from binary to decimal with division by 10.  Nevermind those, they're always microcoded).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;yet everyone seemed to behave as though this had no value, and to positively celebrate the move to SSE2 where extended precision is no longer available.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;No, what people celebrated was that FP became more &lt;em&gt;deterministic&lt;/em&gt;&lt;/strong&gt;.  When and where you got 80-bit temporaries depended on compiler optimization decisions.  You still can't compile most code on different platforms and get bitwise-identical results, but 80-bit x87 was one major source of difference between x86 and some other platforms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Some people (e.g. writing unit tests) would rather have the same numbers everywhere than have more accurate results on x86&lt;/strong&gt;.  Often &lt;code&gt;double&lt;/code&gt; is more than enough, and/or the benefit was relatively small.  In other cases, not so much, and extra temporary precision might help significantly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Deterministic FP is a hard problem, but sought after by people for various reasons.  e.g. trying to make multi-player games that don't need to send the whole state of the world over the network every simulation step, but instead can have everyone's simulation run in lockstep without drifting out of sync.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/328622/how-deterministic-is-floating-point-inaccuracy&quot;&gt;https://stackoverflow.com/questions/328622/how-deterministic-is-floating-point-inaccuracy&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/27149894/does-any-floating-point-intensive-code-produce-bit-exact-results-in-any-x86-base&quot;&gt;https://stackoverflow.com/questions/27149894/does-any-floating-point-intensive-code-produce-bit-exact-results-in-any-x86-base&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;x87 (&lt;a href=&quot;https://en.cppreference.com/w/c/types/limits/FLT_EVAL_METHOD&quot; rel=&quot;noreferrer&quot;&gt;thus C &lt;code&gt;FLT_EVAL_METHOD == 2&lt;/code&gt;&lt;/a&gt;) isn't the only thing that was / is problematic.  C compilers that can contract &lt;code&gt;x*y + z&lt;/code&gt; into &lt;code&gt;fma(x,y,z)&lt;/code&gt; also avoid that intermediate rounding step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For algorithms that didn't try to account for rounding at all, increased temporary precision usually only helped.  &lt;strong&gt;But numerical techniques like &lt;a href=&quot;https://en.wikipedia.org/wiki/Kahan_summation_algorithm&quot; rel=&quot;noreferrer&quot;&gt;Kahan summation&lt;/a&gt; that compensate for FP rounding errors can be defeated by extra temporary precision.&lt;/strong&gt;  So yes, there are definitely people that are happy that extra temporary precision went away, so their code works the way they designed it on more compilers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;When do compilers round:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Any time they need to pass a &lt;code&gt;double&lt;/code&gt; to a non-inline function, obviously they store it in memory as a &lt;code&gt;double&lt;/code&gt;.  (32-bit calling conventions pass FP args on the stack, not in x87 registers unfortunately.  They do return FP values in &lt;code&gt;st0&lt;/code&gt;.  I think some more recent 32-bit conventions on Windows use XMM registers for FP pass/return like in 64-bit mode.  Other OSes care less about 32-bit code and still just use the inefficient i386 System V ABI which is stack args all the way even for integer.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can use &lt;code&gt;sinl(x)&lt;/code&gt; instead of &lt;code&gt;sin(x)&lt;/code&gt; to call the &lt;code&gt;long double&lt;/code&gt; version of the library function.  &lt;strong&gt;But all your &lt;em&gt;other&lt;/em&gt; variables and internal temporaries get rounded to their declared precision (normally &lt;code&gt;double&lt;/code&gt; or &lt;code&gt;float&lt;/code&gt;) around that function call&lt;/strong&gt;, because the whole x87 stack is call-clobbered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When compilers spill/reload variables and optimization-created temporaries, they do so with the precision of the C variable.  So unless you actually declared &lt;code&gt;long double a,b,c&lt;/code&gt;, your &lt;code&gt;double a,b,c&lt;/code&gt; all get rounded to &lt;code&gt;double&lt;/code&gt; when you do &lt;code&gt;x = sinl(y)&lt;/code&gt;.  That's somewhat predictable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But even less predictable is when the compiler decides to spill something because it's running out of registers.  Or when you compile with/without optimization.  &lt;code&gt;gcc -ffloat-store&lt;/code&gt; does this store/reload &lt;em&gt;variables&lt;/em&gt; to the declared precision between statements even when optimization is enabled.  (Not temporaries within the evaluation of one expression.)  So for FP variables, kind of like debug-mode code-gen where vars are treated similar to &lt;code&gt;volatile&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But of course this is crippling for performance unless your code is bottlenecked on something like cache misses for an array.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h1&gt;Extended precision &lt;code&gt;long double&lt;/code&gt; &lt;em&gt;is&lt;/em&gt; still an option&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;(Obviously &lt;code&gt;long double&lt;/code&gt; will prevent auto-vectorization, so only use it if you &lt;em&gt;need&lt;/em&gt; it when writing modern code.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Nobody was celebrating removing the &lt;em&gt;possibility&lt;/em&gt; of extended precision, because that didn't happen&lt;/strong&gt; (except with MSVC which didn't give access to it even for 32-bit code where SSE wasn't part of the standard calling convention).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Extended precision is rarely used, and not supported by MSVC, but on other compilers targeting x86 and x86-64, &lt;code&gt;long double&lt;/code&gt; is the 80-bit x87 type.  Apparently &lt;a href=&quot;https://stackoverflow.com/questions/52762881/is-long-double-in-c-an-implementation-of-ieees-binary128?noredirect=1#comment98177106_52762881&quot;&gt;even when compiling for Windows, gcc and clang use 80-bit &lt;code&gt;long double&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Beware &lt;code&gt;long double&lt;/code&gt; is an ABI difference between MSVC and other x86 compilers&lt;/strong&gt;.  Usually gcc and clang are careful to match the calling convention, type widths, and struct layout rules of the platform.  But they chose to make &lt;code&gt;long double&lt;/code&gt; a 10-byte type despite MSVC making it the same as 8-byte &lt;code&gt;double&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GCC has a &lt;code&gt;-mlong-double-64/80/128&lt;/code&gt; x86 option to set the width of &lt;code&gt;long double&lt;/code&gt;, and &lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html&quot; rel=&quot;noreferrer&quot;&gt;the docs warn that it changes the ABI&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://software.intel.com/en-us/cpp-compiler-developer-guide-and-reference-qlong-double&quot; rel=&quot;noreferrer&quot;&gt;ICC has a &lt;code&gt;/Qlong-double&lt;/code&gt;&lt;/a&gt; option that makes &lt;code&gt;long double&lt;/code&gt; an 80-bit type even on Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So functions that interact with any kind of &lt;code&gt;long double&lt;/code&gt; are not ABI compatible between MSVC and other compilers (except GCC or ICC with special options); they're expecting a different sized object, so not even a single &lt;code&gt;long double&lt;/code&gt; works, except as a function return value in &lt;code&gt;st0&lt;/code&gt; where it's in a register already.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;If you need more precision than IEEE binary64 &lt;code&gt;double&lt;/code&gt;, your options include so-called &lt;a href=&quot;https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format#Double-double_arithmetic&quot; rel=&quot;noreferrer&quot;&gt;double-double&lt;/a&gt; (using a pair of &lt;code&gt;double&lt;/code&gt; values to get twice the significand width but the same exponent range), or taking advantage of x87 80-bit hardware.  If 80-bit is enough, it's a useful option, and gives you extra range as well as significand precision, and only requires 1 instruction per computation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(On CPUs with AVX, especially with AVX2 + FMA, for some loops double-double might outperform x87, being able to compute 4x &lt;code&gt;double&lt;/code&gt; in parallel.  e.g. &lt;a href=&quot;https://stackoverflow.com/questions/30573443/optimize-for-fast-multiplication-but-slow-addition-fma-and-doubledouble&quot;&gt;https://stackoverflow.com/questions/30573443/optimize-for-fast-multiplication-but-slow-addition-fma-and-doubledouble&lt;/a&gt; shows that &lt;code&gt;double * double =&amp;gt; double_double&lt;/code&gt; (53x53 =&gt; 106-bit significand) multiplication can be as simple as &lt;code&gt;high = a * b;&lt;/code&gt;  &lt;code&gt;low = fma(a, b, -high);&lt;/code&gt; and Haswell/Skylake can do that for 4 elements at once in 2 instructions (with 2-per-clock throughput for FP mul/FMA).  But with &lt;code&gt;double_double&lt;/code&gt; inputs, it's obviously less cheap.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Further fun facts:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The x87 FPU has precision-control bits that let you set how results in registers are rounded after any/every computation and load:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;to 80-bit long double: 64-bit significand precision.  The &lt;code&gt;finit&lt;/code&gt; default, and normal setting except with MSVC.&lt;/li&gt;&#xA;&lt;li&gt;to 64-bit double: 53-bit significand precision.  32-bit MSVC sets this.&lt;/li&gt;&#xA;&lt;li&gt;to 24-bit float: 24-bit  significand precision.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Apparently Visual C++'s CRT startup code (that calls &lt;code&gt;main&lt;/code&gt;) reduces x87 precision from 64-bit significand down to 53-bit (64-bit double).  Apparently x86 (32-bit) VS2012 and later still does this, if I'm reading &lt;a href=&quot;https://randomascii.wordpress.com/2012/03/21/intermediate-floating-point-precision/&quot; rel=&quot;noreferrer&quot;&gt;Bruce Dawson's article&lt;/a&gt; correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So as well as not having an 80-bit FP type, 32-bit MSVC changes the FPU setting so even if you used hand-written asm, you'd still only have 53-bit significand precision, with only the wider range from having more exponent bits.  (&lt;code&gt;fstp m80&lt;/code&gt; would still store in the same format, but the low 11 bits of the significand would always be zero.  And I guess loading would have to round to nearest.  Supporting this stuff might be why &lt;code&gt;fld&lt;/code&gt; decodes to multiple ALU uops on modern CPUs.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if the motivation was to speed up &lt;code&gt;fdiv&lt;/code&gt; and &lt;code&gt;fsqrt&lt;/code&gt; (which it does for inputs that don't have a lot of trailing zeros in the significand), or if it's to avoid extra temporary precision.  But it has the huge downside that it makes using extended precision impossible (or useless).  It's interesting that GNU/Linux and MSVC made opposite decisions here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently the D3D9 library init function sets x87 precision to 24-bit significand single-precision float, making everything less precise for a speed gain on fdiv/fsqrt (and maybe &lt;code&gt;fcos&lt;/code&gt;/&lt;code&gt;fsin&lt;/code&gt; and other slow microcoded instructions, too.)  &lt;strong&gt;But x87 precision settings are per-thread,&lt;/strong&gt; so it matters which thread you call the init function from!  (The x87 control word is part of the architectural state that context switches save/restore.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Of course you can set it back to 64-bit significand with &lt;code&gt;_controlfp_s&lt;/code&gt;&lt;/strong&gt;, so you &lt;em&gt;could&lt;/em&gt; useful use asm, or call a function using &lt;code&gt;long double&lt;/code&gt; compiled by GCC, clang, or ICC.  But beware the ABI differences: you can only pass it inputs as &lt;code&gt;float&lt;/code&gt;, &lt;code&gt;double&lt;/code&gt;, or integer, because MSVC won't ever create objects in memory in the 80-bit x87 format.&lt;/p&gt;&#xA;" OwnerUserId="3296" LastEditorUserId="3296" LastEditDate="2019-04-24T20:12:29.177" LastActivityDate="2019-04-24T20:12:29.177" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="9761" PostTypeId="2" ParentId="9751" CreationDate="2019-04-19T13:35:23.260" Score="10" Body="&lt;p&gt;The Gnu Ada compiler (&quot;Gnat&quot;) has supported 80-bit floating point as a fully-fledged built-in type with its &lt;a href=&quot;http://gcc.gnu.org/onlinedocs/gnat_rm/RM-3-5-7-17-Float-Types.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;Long_Long_Float&lt;/code&gt; type&lt;/a&gt; since at least 1998. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a Usenet argument in February of 1999 between Ada compiler vendors and users about whether &lt;strong&gt;&lt;a href=&quot;https://groups.google.com/forum/#!searchin/comp.lang.ada/80-bit%7Csort:date/comp.lang.ada/zvHiN5UYHgw/9xA9TszZuSwJ&quot; rel=&quot;noreferrer&quot;&gt;not&lt;/strong&gt; supporting 80-bit floats is an Ada LRM violation&lt;/a&gt;. This was a huge deal for compiler vendors, as many government contracts can't use your compiler then, and the rest of the Ada userbase at that time viewed &lt;a href=&quot;http://www.ada-auth.org/standards/ada12.html&quot; rel=&quot;noreferrer&quot;&gt;the Ada LRM&lt;/a&gt; as the next best thing to holy writ.&lt;sup&gt;*&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To take a simple example, an x86 compiler that does not support 80-bit&#xA;  IEEE extended arithmetic is clearly violates B.2(10):&lt;/p&gt;&#xA;  &#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;10  Floating point types corresponding to each floating&#xA;           point format fully supported by the hardware.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &#xA;  &lt;p&gt;and is thus non-conformant. It will still be fully validatable, since&#xA;  this is not the sort of thing the validation can test with automated&#xA;  tests.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;P.S. Just to ensure that people do not regard the above as special&#xA;  pleading for non-conformances in GNAT, please be sure to realize that&#xA;  GNAT &lt;em&gt;does&lt;/em&gt; support 80-bit float on the ia32 (x86).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Since this is a GCC-based compiler, its debatable if this is a revelation over the current top-rated answer, but I didn't see it mentioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;* - It may look silly, but this user attitude kept Ada source code extremely portable. The only other languages that really can compare are ones that are effectively defined by the behavior of a single reference implementation, or under the control of a single developer.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="4345" LastEditorUserId="4345" LastEditDate="2019-04-19T14:10:33.757" LastActivityDate="2019-04-19T14:10:33.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9762" PostTypeId="2" ParentId="5202" CreationDate="2019-04-19T15:29:01.833" Score="7" Body="&lt;p&gt;This has already been well answered, but I wanted to respond with a couple of bootstrap solutions: that is, if all you have is a Linux box connected to a DOS box via a null-modem cable.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;minicom on Linux includes the &lt;code&gt;ascii-xfr&lt;/code&gt; program. It's used as the default text file transfer protocol. By using its &lt;code&gt;[-l linedelay]&lt;/code&gt; and &lt;code&gt;[-c characterdelay]&lt;/code&gt; options it can be slowed down to mimic typing even on the slowest serial port. As long as the text file ends with an EOF (Ctrl-Z), you should be able to enter this on the MS-DOS machine &lt;code&gt;COPY COM1 FILE.EXT&lt;/code&gt; and it will correctly receive the file sent via ascii-xfr.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;if your MS-DOS machine has BASIC, you should be able to send it (or type in) &lt;a href=&quot;ftp://kermit.columbia.edu/kermit/a/msbrcv.bas&quot; rel=&quot;noreferrer&quot;&gt;msbrcv.bas&lt;/a&gt;, a simple 1200 baud receive-only Kermit. It can receive binary files — admittedly slowly — via &lt;a href=&quot;http://www.kermitproject.org/&quot; rel=&quot;noreferrer&quot;&gt;Kermit&lt;/a&gt;. You'll probably want to send &lt;code&gt;rz&lt;/code&gt; as your first program.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the intriguingly tiny and 7-bit ASCII &lt;a href=&quot;ftp://kermit.columbia.edu/kermit/a/tcomtxt.asm&quot; rel=&quot;noreferrer&quot;&gt;TCOM.COM&lt;/a&gt; executable can be typed in directly as &lt;code&gt;COPY CON TCOM.COM&lt;/code&gt; followed by Ctrl-Z. This will receive binaries at 300 baud, again via the Kermit protocol. The entire contents of TCOM.COM are apparently &lt;code&gt;XPHPD[0GG0G,0G51G31GB'(G+(G:u'0g?(G&amp;gt;(GE1G@arwIV_F*=US@&amp;lt;1|_,5wXNg-7muTu(41m0ss1k260s@3G1g360@3G0i7t2g3A1g350@3G2E1=0C1g350@3T2M0^\1g3&amp;gt;0@3T=1s2g0T1g3;0@3ToN2g391g0t@3G0^F1k0s2?0@3T4&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;another option documented by John Coppens in &lt;a href=&quot;http://jcoppens.com/soft/howto/bootstrap/index.en.php&quot; rel=&quot;noreferrer&quot;&gt;Accesing a DOS machine without floppy&lt;/a&gt; &lt;em&gt;[sic]&lt;/em&gt; is to send a very tiny terminal emulator via hex encoded files decoded by a small QBasic program. This limits the process to MS-DOS 5 and above. Again, this terminal program uses the Kermit protocol.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You'll note that Kermit is a constant in all of these processes. The team at Columbia University put a huge amount of effort into making sure that Kermit could run on almost any system and in turn, be &lt;a href=&quot;ftp://kermit.columbia.edu/kermit/a/msbaaa.txt&quot; rel=&quot;noreferrer&quot;&gt;bootstrap&lt;/a&gt;ped to run on any connected system.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-04-19T15:29:01.833" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9764" PostTypeId="1" AcceptedAnswerId="9768" CreationDate="2019-04-19T19:01:22.153" Score="3" ViewCount="328" Body="&lt;p&gt;Is it possible to view games made for Tandy Graphics (TGA, etc) on an IBM 5153 color display connected to an original Tandy 1000 (or 1000/A) in 16 colors?&lt;/p&gt;&#xA;" OwnerUserId="7160" LastActivityDate="2019-04-20T03:05:28.923" Title="Is the IBM 5153 color display compatible with the Tandy 1000 16 color modes?" Tags="&lt;cga&gt;&lt;tandy-1000&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9765" PostTypeId="2" ParentId="9764" CreationDate="2019-04-19T19:13:14.443" Score="3" Body="&lt;p&gt;Basically yes. TGA (1000EX or similar) signal output (colour/intensity and sync signals) and connector pinout is upward compatible to CGA, thus compatible with CGA monitors. Both produce the very same &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_monochrome_and_RGB_palettes#4-bit_RGBI&quot; rel=&quot;nofollow noreferrer&quot;&gt;RGBI signal&lt;/a&gt; using the same timing and encoding. TGA just employs more memory, thus being able to supply more colours at higher resolutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all, &lt;a href=&quot;https://en.wikipedia.org/wiki/Tandy_Graphics_Adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;TGA&lt;/a&gt; is basically a CGA with double the memory (32 KiB) and modes resulting from that - much like the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PCjr#Video&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM PCjr&lt;/a&gt;, which the Tandy 1000 was set against. The TGA II (Tandy 1000 SL/TL/RL and later) doubled that again to 64 KiB, finally enabling 640x200 in full 16 colours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least as long as colour mode is used. Text mode, when used in monochrome setup, is not. The monochrome setting is unique to TGA. Here a single B&amp;amp;W output signal is provided on pin 7, unused by CGA.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-19T22:30:07.723" LastActivityDate="2019-04-19T22:30:07.723" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9766" PostTypeId="2" ParentId="9738" CreationDate="2019-04-19T21:21:06.770" Score="2" Body="&lt;p&gt;SEGA made several arcade boards in the early 2000s that used discrete Intel CPUs paired with Nvidia GPUs, starting with the &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Chihiro&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chihiro&lt;/a&gt; and continuing.&lt;/p&gt;&#xA;" OwnerUserId="7932" LastActivityDate="2019-04-19T21:21:06.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9767" PostTypeId="2" ParentId="9764" CreationDate="2019-04-19T22:19:34.737" Score="6" Body="&lt;p&gt;The Tandy 1000 CGA output was essentially like the IBM CGA electrically, and graphics modes were compatible.  There was, however, an important difference in text mode.  In text mode, the CGA used the middle 200 scan lines of a 262-line frame to display 25 rows of 8 scan lines each, with generous borders on the top and bottom.  Using 8 lines per character meant that the bottom row of letters like &quot;g&quot; and &quot;y&quot; would touch the top row of letters like &quot;E&quot; and &quot;T&quot;, which was less than ideal for legibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Tandy 1000 shrinks the top and bottom borders by roughly 12-13 pixels, allowing the text portion of the screen to be expanded from 200 lines to 225 (9 scan lines per row).  This substantially improves legibility on screens whose &quot;vertical height&quot; adjustment was set to leave at least 15 or so lines of border visible on the top and bottom.  On screens which are adjusted to crop the border more closely to the text, the top and bottom of the Tandy text screen will get cut off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't recall if the Tandy provided any way to use an 8-dot high font, but I wouldn't be surprised if it didn't.  The &quot;extra&quot; line was added above the row of text, which meant that an inverse-video &quot;E&quot; would show one line of background above the text and one line below.  That would also, however, mean that programming the CRT controller to use 8 dots instead of 9 would cause the bottom scan line of characters like &quot;g&quot; and &quot;y&quot; to be cut off entirely.  Avoiding that would have required having a character set ROM which contained two character sets, and would also have required including a means of switching between them.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-04-19T22:19:34.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9768" PostTypeId="2" ParentId="9764" CreationDate="2019-04-20T03:05:28.923" Score="3" Body="&lt;p&gt;CGA 40-column text mode is 320x200 16-colors and 80-column text mode is 640x200 16 colors. Those are a &lt;em&gt;completely standard&lt;/em&gt; feature of CGA and therefore a completely normal thing for a CGA monitor to display. But because they're text mode, you can't set arbitrary pixels to arbitrary colors, you have to use the character cells.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tandy and PCjr advanced graphics use the identical output resolutions, only with more freedom — the 2-color and 4-color modes allow any combination of 2 or 4 colors from the 16-color palette (unlike the CGA with its very limited palettes), and the 320x200 and (on the later TGA) 640x200 modes are available as full bitmapped graphics modes, meaning any pixel can be any color. Programmers care about this, but &lt;em&gt;the monitor doesn't&lt;/em&gt;. It sees the same kind of signal that it would get from a CGA. Therefore any CGA RGBI monitor should be perfectly happy with Tandy graphics.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2019-04-20T03:05:28.923" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9769" PostTypeId="1" CreationDate="2019-04-20T04:27:26.260" Score="3" ViewCount="119" Body="&lt;p&gt;I haven't gotten around to making/sourcing a cable for ADTPro, but I was thinking perhaps I can just write a few disks with a 7100 I have sitting around since those drives can read/write GS and PC disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have several &lt;code&gt;.2mg&lt;/code&gt; disk images that I want to write, but I can't seem to find any solution that works.  Perhaps I need to try a different format?&lt;/p&gt;&#xA;" OwnerUserId="12383" LastEditorUserId="202" LastEditDate="2019-04-20T18:47:32.790" LastActivityDate="2019-04-20T18:47:32.790" Title="Is it possible to write IIgs floppies from a Powermac 7100?" Tags="&lt;apple&gt;&lt;apple-iigs&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9770" PostTypeId="2" ParentId="9769" CreationDate="2019-04-20T07:21:35.523" Score="3" Body="&lt;p&gt;Best way is to use a IIgs side utility to unpack disk archives onto real disks.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;First stop would be Sheppy's &lt;a href=&quot;http://www.sheppyware.net/apple-ii-software/diskmaker.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;DiskMaker&lt;/a&gt;, a USD 5.- shareware utility, the gold standard here and youterpart to the original &lt;a href=&quot;http://www.sheppyware.net/apple-ii-software/imagemaker.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ImageMaker&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Further there is Ninjaforce's &lt;a href=&quot;http://www.ninjaforce.com/html/products_asimov_docs.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASIMOV&lt;/a&gt; utility, free of charge.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Either should work as .2MG files are (*1) what's in the IIgs world called a '&lt;a href=&quot;http://wiki.apple2.org/index.php?title=Emulators_Part_3#2IMG_Universal_Format&quot; rel=&quot;nofollow noreferrer&quot;&gt;Universal Disk File&lt;/a&gt;'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if you're in a real DIY mode, then there is &lt;a href=&quot;https://a2ciderpress.com/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;CiderPress&lt;/a&gt;, a great (Windows) utility to handle compressed (.SHK) files. After all, the universal format is based on &lt;a href=&quot;https://en.wikipedia.org/wiki/ShrinkIt&quot; rel=&quot;nofollow noreferrer&quot;&gt;ShrinkIt&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Usually, as file extensions are volatile. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-20T07:34:19.950" LastActivityDate="2019-04-20T07:34:19.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9771" PostTypeId="1" AcceptedAnswerId="9772" CreationDate="2019-04-20T07:56:48.020" Score="10" ViewCount="552" Body="&lt;p&gt;I learned from the history of &lt;a href=&quot;https://multicians.org&quot; rel=&quot;noreferrer&quot;&gt;Multics&lt;/a&gt; that in the early days of computers, Time Sharing System (TSS) was used at MIT, and then Compatible Time Sharing System (CTSS) was developed in 1961, also at MIT. In July 1963, Project MAC was started, to improve the system, which lead to the development of Multics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I have &lt;a href=&quot;https://history.stackexchange.com/q/52192/23415&quot;&gt;recently learned&lt;/a&gt; that hackers at the Artificial Intelligence Lab, also at MIT, developed the &lt;strong&gt;Incompatible Time Sharing System (ITS)&lt;/strong&gt; and used it until 1990.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the technical differences between Compatible Time Sharing System (CTSS) and Incompatible Time Sharing System (ITS)?&lt;/p&gt;&#xA;" OwnerUserId="12384" LastEditorUserId="142" LastEditDate="2019-09-30T16:22:52.960" LastActivityDate="2019-09-30T16:22:52.960" Title="What is the difference between CTSS and ITS?" Tags="&lt;operating-system&gt;&lt;early-computer&gt;&lt;pdp-10&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9772" PostTypeId="2" ParentId="9771" CreationDate="2019-04-20T11:42:00.247" Score="20" Body="&lt;p&gt;The technical differences are large when compared to the technical similarities. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;CTSS was built for a modified IBM 7094 system while ITS was built for the DEC PDP-6 (later PDP-10).  Both of these machines were organized around 36 bit words, but the similarity tails off after that.  Both machines lacked a hardware page map, and did not attempt to provide virtual memory capabilities to the timeshared applications. But they both had hardware and software features to protect the system and the users from rogue programs.  Later on,  DEC PDP-10s were modified to provide a third party page map, and DEC came out with a processor, the KI 10, that had a page map. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;CTSS was intended to make timeshared access available across a wide swath of the MIT campus, and to a varied user community.  Terminals were set up a long ways from the data center itself.  These terminals included the golf-ball print head and the keyboard from the IBM Selectric, with communication gear built in for connection to the computer. Best keyboard I ever used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ITS was intended to organize usage of the AI PDP-6.  There was almost no security at all.  They preferred to depend on security through obscurity.  If you could figure out how to use the machine, then you probably belonged in the user community, regardless of your formal status. But remote access was initially not supported at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;Incompatible&quot; in ITS was a humorous reference to the &quot;Compatible&quot; in CTSS.  For comparison purposes,  the name unix was chosen as a deliberate ironic reference to the &quot;multi&quot; in Multics.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the people who built ITS would have called themselves &quot;hackers&quot;, this can be misleading in today's context.  They were information anarchists, but they were largely benign, at least in their intent.  They were also somewhat project leadership anarchists.  Very little top down management went into ITS, as far as I could tell.  Instead,  people built things, and persuaded other people to accept them based on the usefulness of what had been built. Nonetheless,  ITS exhibited a uniformity of design that makes the products of more formal development efforts look like a hodgepodge.  The hackers respected each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The user interface for ITS was the debugger,  DDT.  The user interface for CTSS was a very early prototype for interactive user command languages that came along later.  Examples of such later command languages might be the command language for TOPS-10, a timeshared operating system from DEC, or even the command shell for MS-DOS.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The primary language for ITS was LISP (apart from assembler).  One of the widely used languages on CTSS was Basic,  adapted from Dartmouth Basic.  This reflects the different nature of the user communities for the two systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the above is from personal recollection.  I used both systems, about fifty years ago.  I apologize for the lack of specific pointers to more formal history of the two systems.  Here are a few links to get you started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/PDP-10/its/issues/181&quot; rel=&quot;noreferrer&quot;&gt;List of ITS machines&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.csail.mit.edu/person/f-j-corbato&quot; rel=&quot;noreferrer&quot;&gt;Writeup on Prof. Corbato architect of CTSS&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution&quot; rel=&quot;noreferrer&quot;&gt;Hackers: Heroes of the Computer Revolution&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2019-04-20T12:47:39.243" LastActivityDate="2019-04-20T12:47:39.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9773" PostTypeId="2" ParentId="8908" CreationDate="2019-04-20T18:11:44.083" Score="7" Body="&lt;p&gt;Whilst this is not a definitive answer, by looking at &lt;a href=&quot;https://apple2.fandom.com/wiki/Apple_IIc_ROM_Version&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIc ROM Version&lt;/a&gt;&lt;sup&gt;1&lt;/sup&gt;, which more fully lists the features of each ROM version, it seems that the disk support was &lt;em&gt;actually improved&lt;/em&gt;, whilst, unfortunately, removing the ability to easily boot from the second drive (although the second drive could still be accessed post-boot). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One can only surmise that the designers assumed that booting from the internal drive only would be sufficient, and that losing the easily access ability to boot from the external drive was a price worth paying for access to the AppleTalk instead (using &lt;code&gt;PR#7&lt;/code&gt;) as well as the additional drive support, namely:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;UniDisk 3.5 drive, &lt;/li&gt;&#xA;&lt;li&gt;the Apple 3.5 drives&lt;/li&gt;&#xA;&lt;li&gt;IIc Memory Expansion Card&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In actual fact, from information from a Google forum (see below&lt;sup&gt;2&lt;/sup&gt;), &lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.sys.apple2/002ie7CU8nM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIc Booting from external drive&lt;/a&gt;, it turns out that &lt;strong&gt;&lt;em&gt;the code was not actually removed&lt;/em&gt;&lt;/strong&gt;, just the ability to access the code easily by using &lt;code&gt;PR#7&lt;/code&gt; - the engineers presumably thought that the AppleTalk was a better use for the &lt;code&gt;PR#7&lt;/code&gt;, although &lt;code&gt;PR#5&lt;/code&gt; would work for an external UniDisk 3.5&quot;. The leftover code could still be accessed by typing the following code in the Monitor, from &lt;a href=&quot;https://apple2.fandom.com/wiki/Booting_from_an_external_drive_on_the_Apple_IIc&quot; rel=&quot;nofollow noreferrer&quot;&gt;Booting from an external drive on the Apple IIc&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;300:A9 E0 A0 01 A2 60 4C 0B C6&#xA;&#xA;300G&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;More poignantly, from &lt;a href=&quot;https://apple2history.org/history/ah08/&quot; rel=&quot;nofollow noreferrer&quot;&gt;8-THE APPLE IIC&lt;/a&gt; - &lt;a href=&quot;https://apple2history.org/history/ah08/#04&quot; rel=&quot;nofollow noreferrer&quot;&gt;Firmware&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What about the unassigned slot 7? Here they put a small piece of code to allow booting from the external 5.25 drive by typing “PR#7” from Applesoft.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and further down the page, &lt;a href=&quot;https://apple2history.org/history/ah08/#07&quot; rel=&quot;nofollow noreferrer&quot;&gt;Overcoming limitations&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The disk port on the original IIc was only designed to control an&#xA;  external 5.25 disk drive. Apple sold the Disk IIc for $329, and other&#xA;  companies later sold similar drives for less. Despite this firmware&#xA;  limitation, Quark Engineering released a 10 MB Winchester hard drive&#xA;  called the QC10 that would work with this disk port, and was the first&#xA;  hard disk available for the IIc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and &lt;a href=&quot;https://apple2history.org/history/ah08/#08&quot; rel=&quot;nofollow noreferrer&quot;&gt;Enhancements&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Rudimentary firmware was also included to allowing the IIc to be attached to an AppleTalk network (a message that said “AppleTalk Offline” would appear if you typed “PR#7” from BASIC), but it was never completed, and did not appear in future revisions of the IIc ROMs. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strike&gt;From which, one &lt;em&gt;could&lt;/em&gt; infer that Apple dropped the boot support as third party drives were cheaper, and they didn't wish to support these more popular drives.&lt;/strike&gt; &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Wikipedia - &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_IIc#UniDisk_3.5_support_(ROM_version_%E2%80%980%E2%80%99)&quot; rel=&quot;nofollow noreferrer&quot;&gt;UniDisk 3.5 support (ROM version ‘0’)&lt;/a&gt;, confirms that which snip-n-snails stated in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8908/why-did-apple-remove-booting-from-external-drives-in-later-iic-rom-versions#comment29082_8908&quot;&gt;their comment&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The new ROM supported “intelligent” devices such as the Apple UniDisk 3.5-inch (800 KB) floppy drive and Smartport-based hardisks, in addition to an external 5.25-inch floppy drive.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The upgraded ROM added rudimentary support for an external AppleTalk networking device which was yet to be developed. When attempting to boot virtual slot 7, users would encounter the message “APPLETALK OFFLINE.” The IIc, however, had no built-in networking capabilities, and no external device was ever released. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;Footnotes&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; ROM feature list, from &lt;a href=&quot;https://apple2.fandom.com/wiki/Apple_IIc_ROM_Version&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIc ROM Version&lt;/a&gt; (this list expands slightly upon that given in &lt;a href=&quot;http://www.1000bit.it/support/manuali/apple/technotes/aiic/tn.aiic.7.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIc Technical Note#7 - Existing Versions&lt;/a&gt;). To see which ROM version you have use &lt;code&gt;PRINT PEEK(64447)&lt;/code&gt; (64447 = $FBBF):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;h3&gt;Original IIc ( $FBBF = $FF or 255 in decimal)&lt;/h3&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Can use the IIc external drive only&lt;/li&gt;&#xA;  &lt;li&gt;No AppleTalk firmware&lt;/li&gt;&#xA;  &lt;li&gt;PR#7 boots the second drive&lt;/li&gt;&#xA;  &lt;li&gt;Mouse firmware maps to slot 4&lt;/li&gt;&#xA;  &lt;li&gt;Serial firmware does not mask incoming linefeed characters&lt;/li&gt;&#xA;  &lt;li&gt;Serial firmware does not support XON/XOFF protocol&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;h3&gt;3.5 ROM IIc ( $FBBF = $00 )&lt;/h3&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Can use the IIc external drive and the UniDisk 3.5 drive&lt;/li&gt;&#xA;  &lt;li&gt;AppleTalk firmware maps to slot 7&lt;/li&gt;&#xA;  &lt;li&gt;PR#7 returns the message &quot;AppleTalk Off Line&quot;&lt;/li&gt;&#xA;  &lt;li&gt;Mouse firmware maps to slot 4&lt;/li&gt;&#xA;  &lt;li&gt;Serial firmware defaults to mask all incoming linefeed characters&lt;/li&gt;&#xA;  &lt;li&gt;Serial firmware supports XON/XOFF protocol&lt;/li&gt;&#xA;  &lt;li&gt;Adds the Mini-Assembler to the Monitor&lt;/li&gt;&#xA;  &lt;li&gt;Adds the Built-in Diagnostics&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;h3&gt;Original &quot;Memory-Expandable&quot; IIc ( $FBBF = $03 )&lt;/h3&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Can use the IIc external drive, the UniDisk 3.5 drive, and the IIc Memory Expansion Card&lt;/li&gt;&#xA;  &lt;li&gt;Mouse firmware maps to slot 7&lt;/li&gt;&#xA;  &lt;li&gt;No AppleTalk firmware&lt;/li&gt;&#xA;  &lt;li&gt;PR#7 kills the system&lt;/li&gt;&#xA;  &lt;li&gt;Serial firmware defaults to mask all incoming linefeed characters&lt;/li&gt;&#xA;  &lt;li&gt;Serial firmware supports XON/XOFF protocol&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;h3&gt;Revised &quot;Memory-Expandable&quot; IIc ( $FBBF = $04 )&lt;/h3&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;p&gt;Same as Original Memory-Expandable, plus:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Keyboard buffering firmware bug fixed&lt;/li&gt;&#xA;  &lt;li&gt;Firmware returns correct information when the Memory Expansion Card is not present&lt;/li&gt;&#xA;  &lt;/ul&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;h3&gt;Apple IIc Plus ( $FBBF = $05 )&lt;/h3&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Can use the external IIc drive, the UniDisk 3.5 drive, the Apple 3.5 drives, but not the original IIc Memory Expansion Card.&lt;/li&gt;&#xA;  &lt;li&gt;Contains a Memory Expansion Card connector&lt;/li&gt;&#xA;  &lt;li&gt;3.5&quot; internal drive replaces 5.25&quot; internal drive&lt;/li&gt;&#xA;  &lt;li&gt;Mouse maps to slot 7&lt;/li&gt;&#xA;  &lt;li&gt;PR#7 kills the system&lt;/li&gt;&#xA;  &lt;li&gt;4 MHz 65C02 microprocessor&lt;/li&gt;&#xA;  &lt;li&gt;Accelerator chip and static RAM cache permit operation up to 4 MHz&lt;/li&gt;&#xA;  &lt;li&gt;Keyboard replaced with Apple Standard Keyboard (minus numeric keypad)&lt;/li&gt;&#xA;  &lt;li&gt;Internal power supply&lt;/li&gt;&#xA;  &lt;li&gt;Internal modem connector&lt;/li&gt;&#xA;  &lt;li&gt;Serial ports refitted with mini-DIN 8 connectors&lt;/li&gt;&#xA;  &lt;li&gt;Headphone jack has been removed&lt;/li&gt;&#xA;  &lt;li&gt;Volume control relocated above the keyboard&lt;/li&gt;&#xA;  &lt;li&gt;40/80 column switch replaced by keyboard (Sholes/Dvorak) switch&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; However, it is possible to boot from the external UniDisk 3.5&quot;. From &lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.sys.apple2/002ie7CU8nM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIc Booting from external drive&lt;/a&gt;, &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.apple2/002ie7CU8nM/MqX0tuX-9jYJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;this post&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If my copy of the IIc hardware reference manual&#xA;  is to be believed, you can boot from the first external drive by typing&#xA;  PR#5.  I suspect this only applies to a UniDisk 3.5, and not a 5.25&quot;&#xA;  drive.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.apple2/002ie7CU8nM/SAuXH7Z9hZIJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;this post&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Yes, PR#5 will boot the first external UniDisk in the //c's drive chain.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;I recall typing in a small segment of assembly code (from inCider/A+,&#xA;  Nibble, or some such magazine) that would boot the external 5.25&quot; drive,&#xA;  even if you had a //c with newer ROMs.  I don't &lt;em&gt;think&lt;/em&gt; it worked on&#xA;  anything but a //c, but I can't remember for sure.  If you'd like me to&#xA;  dig it up and post it to the 'net, email me.  I'm sure I can find&#xA;  it...it's only a matter of digging through a few of my BASIC programming&#xA;  disks.  :^)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.apple2/002ie7CU8nM/J2pDpoBwoFgJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;this post&lt;/a&gt;  mentions booting from the 5.25&quot; external drive, using the leftover code:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Actually, you can boot from an external 5.25&quot; driver on the //c with&#xA;  ROM revision 2. The code necessary is in ROM (the ROM listing comments&#xA;  even tell that you can do it), but due to some omission you can't&#xA;  activate it by a single command.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;You can boot however from the external driver by hacking in a short&#xA;  machine program. All you have to do is set X to $60, Y to $01, and A&#xA;  to $e0 and jump do some address... was it $c611? Take a look at the&#xA;  listing...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="202" LastEditorUserId="202" LastEditDate="2019-04-21T07:09:47.067" LastActivityDate="2019-04-21T07:09:47.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9774" PostTypeId="2" ParentId="8908" CreationDate="2019-04-20T21:22:58.037" Score="2" Body="&lt;h2&gt;Short Answer:&lt;/h2&gt;&#xA;&lt;p&gt;Not just ROM code, but as well I/O space is a premium and unlike ROM size it can't be increased. There are only 7 slots and only 7 devices can be present (*1) and accessed (*2). When Apple added (intended to add) AppleTalk with ROM 0, Slot 7 was assigned. With ROM 3 this was dropped allowing the use of Slot 7 for the mouse interface. Either change resulted in code that the boot sequence could not identify as DISK II card.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read:&lt;/h2&gt;&#xA;&lt;p&gt;When taking about 'space' required in the Apple II it's not only about ROM code but also I/O Addresses and the Slot PROM. Woz' I/O design only allows for 7 devices to be added. While looking like a lot in 1977, the basic Apple didn't offer much build in I/O, so already simple serial or parallel interfaces had to be added as card and grab one. The generic 'driver framework' (*3) only knows one entry point (*4) per device, located at Cn00 where n is the slot number (1..7).&lt;/p&gt;&#xA;&lt;p&gt;As result any device to be offered by the ROM that should be available to legacy programs in general and BASIC in particular did need a slot assignment. With the intention of putting AppleTalk in, with ROM 0, it had to have a hard assigned slot, so 7 was choosen. Similar with ROM 3 when the mouse was made available as Mouse 'Card'.&lt;/p&gt;&#xA;&lt;p&gt;The Apple IIgs later avoided the problem of fixed assignment by letting the user configure which interfaces should appear at which address/entry point (within limits)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Slot 1..7; Slot 0 has no assigned resources - it's I/O address ranges are assigned to the motherboard&lt;/p&gt;&#xA;&lt;p&gt;*2 - That is with the 'classic' methods present since the first II. ProDOS did add ways for loading additional drivers handling devices outside that scheme - similar GSOS.&lt;/p&gt;&#xA;&lt;p&gt;*3 - While being extreme simple it was well thought thru and joined several components together, so it's fair to call it a framework.&lt;/p&gt;&#xA;&lt;p&gt;*4 - No, there are no separate entrance vectors set by PR# or IN'. Both just set their respective vector (CSW/KSW) to Cn00. If a card could support both ways it was supposed to look for it's signature in either switch and acct accordingly - if found in both, it should work as if the call was meant as output.&lt;/p&gt;&#xA;&lt;p&gt;For bidirectional devices it was common to tweak both vectors to different locations within the PROM (after being called first), so later call would point to either specific routine - and a Cn00 would indicate a reinitialisation of either - to be detected by comparing the lower address byte of the relevant switch being 00.&lt;/p&gt;&#xA;&lt;p&gt;Ok, while I still think the concept is very clever, it's not as thought thru as I like to assume.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-04-20T21:22:58.037" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9775" PostTypeId="2" ParentId="9708" CreationDate="2019-04-21T18:45:38.437" Score="2" Body="&lt;p&gt;The Nintendo consoles were generally not backward compatible between different models NES-&gt;SNES-&gt;N64-&gt;GameCube. The exception being the Wii, which could play GameCube games, and the Wii U, which could play Wii games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the handheld consoles generally maintained backward compatibility for one generation (2 in the case of the 3DS). So GameBoy-&gt;GameBoy Colour-&gt;GameBoy Advance-&gt;DS/DS Lite-&gt;DSi-&gt;3DS/2DS were each compatible with the preceding generation of device.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2019-04-21T18:45:38.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9777" PostTypeId="2" ParentId="9740" CreationDate="2019-04-22T18:32:11.050" Score="0" Body="&lt;p&gt;In my first position as a professional programmer in 1982, the small mom-and-pop software shop I worked for used MS BASIC compiler to develop a point-of-sale, inventory control, and mail merge system.  The MS BASIC was extremely vanilla, and had no IF ... END IF type structure, which apparently bugged the hell out of the main programmer and co-founder of the company.  So much so that he wrote a pre-processor program, which I think he called XSEL or something beginning with &quot;X&quot; (company was XtraSoft) that allowed us to code with IF and END IF and not have to use line numbers or worry about those messy GOTO's, and would create a line-numbered output with the necessary GOTO's (ugh) to branch out at the appropriate places.  It at least made the &quot;source&quot; code look nice, if not executable on their own through an interpreter anymore, and required the extra step of the pre-processor before compile and link, but we grew to like it.&lt;/p&gt;&#xA;" OwnerUserId="5094" LastActivityDate="2019-04-22T18:32:11.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9778" PostTypeId="2" ParentId="9559" CreationDate="2019-04-22T19:14:08.200" Score="5" Body="&lt;p&gt;Stumbled into this thing while cleaning up my basement. A density doubling disk notcher. A 3½ floppy is placed face down, turning the handle acts like a vise to press down the hole punch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/28KIp.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/28KIp.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;DISK WIZARD&lt;br&gt;&#xA;  Pat. pending&lt;br&gt;&#xA;  Made in Canada  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="2054" LastEditorUserId="2054" LastEditDate="2019-04-23T13:28:43.653" LastActivityDate="2019-04-23T13:28:43.653" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9779" PostTypeId="1" AcceptedAnswerId="9780" CreationDate="2019-04-22T20:48:31.897" Score="21" ViewCount="5262" Body="&lt;p&gt;PC compatibles in the 1980s were often advertised as having zero, one, two, or sometimes more &quot;wait states&quot;. Zero wait states was the best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, the wait-states I am asking about are due to the main system DRAM being too slow for the CPU, so extra bus cycles were added to make up for this latency. This reduced the overall processing speed.&#xA;&lt;strong&gt;I'm not asking about cases where a CPU is blocked from accessing main system RAM by some peripheral doing DMA, for example.&lt;/strong&gt; Obviously, that's a &lt;em&gt;feature&lt;/em&gt; for improving performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I don't recall this being an issue on comparatively-priced machines with 16 or 32-bit Motorola processors, and running at similar clock speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the cause of the wait states, precisely, and how come other low-cost home computers were able to avoid this performance problem?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-04-22T22:03:36.040" LastActivityDate="2019-04-24T17:34:22.040" Title="What were wait-states, and why was it only an issue for PCs?" Tags="&lt;ibm-pc&gt;&lt;memory&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9780" PostTypeId="2" ParentId="9779" CreationDate="2019-04-22T21:36:57.740" Score="21" Body="&lt;p&gt;It was an issue on all machines — wait states resolve any situation in which the part a processor needs a response from isn't yet ready to respond — but only in the commoditised world of the PC was it a variable and therefore worth putting in the advertising.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Atari ST, wait states are inserted if the 68000 tries to access RAM during a video slot (two of every four cycles), or when it accesses some peripherals (e.g. there is a fixed one-cycle delay for accessing the sound chip).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga differentiates chip RAM and fast RAM. Chip RAM is that shared with the coprocessors and in which the CPU may encounter wait states. Small Amigas like the unexpanded A600 have only chip RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, on the PC processors scaled in processing speed much more widely, the underlying reasons for potential waits were much more variable, and one manufacturer would likely do a better job than another. So it warranted boasting about if your machine has a good number rather than a bad one.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-04-22T21:36:57.740" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9781" PostTypeId="2" ParentId="9779" CreationDate="2019-04-22T22:07:16.027" Score="6" Body="&lt;p&gt;The DRAM chips used for memory needed a certain memory access cycle length, for example 1000ns. Also CPUs needed several clock cycles to perform a memory cycle, so for example a 8086 could take 4 cycles to access memory. If the CPU is running at 5 MHz, the memory access takes only 800ns which is too fast for the memory. Therefore one wait state is needed to get 1000ns memory cycle. Lowering the CPU speed to 4 MHz would allow it to run with zero wait states. Basically wait states were needed because memory speeds were slower than what CPUs could access. Advertising does tell something about system performance. For example, if one system has 1000ns memories and another has 800ns memories, a 5 MHz 8086 is able to run at 0ws with faster memories and at 1ws with slower ones. In theory the 0ws machine can transfer data 25% more in same time than the 1ws machine can. Surely faster memories were more expensive so maybe it was important to advertise why two identical looking systems had a significant price difference.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-04-22T22:07:16.027" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9782" PostTypeId="2" ParentId="9779" CreationDate="2019-04-22T23:20:49.933" Score="15" Body="&lt;p&gt;&lt;em&gt;Preface 1: The way it is asked, it's way too broad for an answer to make any sense. Especially making some assumptions at the same time as widening it across all different CPU memory interface technologies there were.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Preface 2: Design decisions for wait state design and application is a topic for a whole course on system design. It's next to impossible to give a satisfying answer to this in general within a single unspecific RC.SE question.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;PC compatibles in the 1980s were often advertised as having zero, one, two, or sometimes more &quot;wait states&quot;. Zero wait states was the best.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It looks like, at first sight, but looking closely, systems without are more often than not the slower ones.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Basically, the RAM was too slow so extra bus cycles were added to make up for this latency. That reduced the overall processing speed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, not really. It's much more complex than that, so it may be a helpful to &lt;strong&gt;restrict this to the core of wait state usage on IBM&lt;/strong&gt; and compatible machines of the 80286 area where the question was most prominent and seems to have originated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To start with, a wait state isn't an issue of memory but of the CPU. It's the CPU design requiring memory access to be synchronized with the clock speed used. An 8086 class CPU always takes four clock cycles per memory access, while it is two with a 80286. For the following we go with the 80286, as it's a quite different timing than on the 8088. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an AT running at 6 MHz this two cycle structure would make a basic access time of 333ns per bus cycle, but the structure is a bit more complex. The first cycle is a setup cycle where all control signals are presented (called TS), while the second is called command cycle (TC) and contains the operation itself and handshaking. This cycle will be extended as long as there is no acknowledge from the memory system (called Ready). Intel added some quite nifty structure to enable the full use of these two cycles for memory operation, like address pipelining, which offers a stable address &lt;em&gt;before&lt;/em&gt; the first cycle. Using this requires non-trivial circuitry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM chose a more simple approach. The decoding waits for the raising edge of ALE, when all signals (status like direction and memory/IO) are valid, simplifying decoding a lot. ALE becomes valid a few nanoseconds after the first half of TS, reducing the time available for decoding and memory access to somewhat less than 250 ns. The  AT was designed to run with 200 ns RAM access time, so already tight, especially when considering that RDY needs to be assigned by the memory system before the second half of TC, effectively reducing the timing to less than 133ns. Way too short.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the AT (5170 Type 139), IBM decided to be better safe than sorry, adding a wait state. In addition, it also made sure that access time for I/O cards would stay within the limits set by the PC. Equally importantly, with a wait state, they could be sure that there is no chance a less than perfect charge of RAMs would screw the quality. Considering that the AT was about three times faster than the PC, there was no need to take any risk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the later PC-XT 286 (5162), with basically the same design (and the same 200 ns memory), IBM went with zero wait states. Maybe they became more confident.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, it's also possible that the whole system was already designed to run at 8 MHz from the start and has been only slowed down to 6 MHz for company policy reasons. In that case, the wait state does make a lot more sense, as an 8 MHz design (as IBM did) can only run with 200 ns RAM by implying a wait state. Similarly to keep the slots compatible. The difference between 6 MHz AT (type 139) and 8 MHz (type 239) is basically just the clock chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: It all comes down to design decisions. With a more sophisticated decoder circuitry, 200 ns RAM can work well with a 8 MHz 80286 without wait states - as many other 80286 machines of the same time showed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, then there was the race to more MHz, cranking 80286 machines up from original 6/8 MHz past 12 or 16 MHz. At that time there was no memory fast enough to support this speed. Even adding a more sophisticated decoding, as for example NEAT boards added, couldn't help at the higher end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be important to remember that memory access of the 8086 family is different from next to all previous or contemporary CPUs, as only data access was synchronous. Code was read ahead of time by asynchronous BIU operation, resulting in fewer unused cycles compared to a 68k. This is the reason why Intel CPUs performed quite well in comparison.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But I don't recall this being an issue on comparatively-priced machines with 16 or 32-bit Motorola processors, and running at similar clock speeds.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Comparatively-priced is a more than vague term, considering that fully-fitted PC could well outprice high end workstations. And neither is clock speed an issue, as clock speed is only marginally related to memory speed. As mentioned before, it's all about memory access (and cycle) time. Other CPUs were hit by the same problem when clock speed increased. A 68k used at least two cycles per access, which means that 200 ns is fine for a 8 MHz 68000 (assuming a simple decoding circuit). Anything faster than that will also require wait states.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What was the cause of the wait states, precisely, and how come other low-cost home computers were able to avoid this performance problem?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because they where fricking slow :)) Considering RAM speed of the time, it's obvious why even upper end machines, like a SUN 1 or 2 ran at 'only' 6 and 10 MHz. It wasn't until the 68020-based SUN 3 reached 15 MHz - enabled by the 68020's cache, as memory access was done &lt;strong&gt;with three wait states&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even many, many years (1992) later, Commodore's Amiga 4000 (A3640 CPU card) used 3 wait states by default to adapt the 25 MHz CPU to slower memory.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-04-24T17:34:22.040" LastActivityDate="2019-04-24T17:34:22.040" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9783" PostTypeId="2" ParentId="9779" CreationDate="2019-04-23T06:17:11.720" Score="5" Body="&lt;p&gt;The PC machines where made as modifiable/expandable system so you can have different CPU, memory, peripherial configuration on per machine basis. That leads to problem with interfacing different speed busses, peripherials, ICs ... So wait states makes sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I recall older 8 bit machines like Z80 based ZX Spectrum, or i8080 based PMD did not have configurable wait states (but that does not mean they do not have wait states if you take a look at ULA in ZX it actively stops CPU clock ... which can be seen as a form of wait state). However on such old systems the memory was usually faster than the rest of the system and wait states where used for different than slow down reasons (like resolve sharing conflicts etc...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when even a more recent and or complex system does not have any wait states configuration it does not mean it does not use them. It just suggest they are either set automatically or are non changeable limiting expandability. For example just compare the SETUP utility on a laptop and on a DESKTOP machines even on PC platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;LAPTOPs are not expandable so much so its very hard or even impossible to change its core parts meaning no need to change the wait states configuration and even if it does need to change its usually done by flashing the firmware instead of direct user configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want non PC example of wait states use simply look at AVR32 like AT32UC3 MCUs they have configurable SRAM wait state to slow down the memory interface in case the MCU core runs on higher clock than the internal SRAM speed. Unless you set it correctly prior to switching to higher speeds the system will be unstable and freeze or worse ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastActivityDate="2019-04-23T06:17:11.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9784" PostTypeId="1" AcceptedAnswerId="9786" CreationDate="2019-04-23T08:14:07.087" Score="32" ViewCount="5797" Body="&lt;p&gt;Elite was one of the earliest 3D games, wireframe only of course but still a remarkable accomplishment on 8-bit computers. Originating on the BBC micro, it was ported to many home computers, as well as the NES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wait a minute. The Nintendo was a tile based machine. &lt;em&gt;How&lt;/em&gt; did it manage to render 3D wireframes? If you even had tiles in RAM I could see how you could do it, but the NES was restricted to tiles on the ROM cartridge; it had neither the ability to put bitmaps in RAM nor enough RAM to make use of that ability had it been present.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, how?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-04-23T17:58:13.383" Title="How did Elite on the NES work?" Tags="&lt;graphics&gt;&lt;nes&gt;&lt;gaming&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9785" PostTypeId="1" AcceptedAnswerId="9792" CreationDate="2019-04-23T12:07:41.213" Score="23" ViewCount="5110" Body="&lt;p&gt;I have heard stories from some of the greybeards I have met on the Internet that Objective-C was by all accounts a nightmare to work with. Was that just a thing about all the low-level languages of its era or is there some sort of feature that made working with it hard?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did Objective-C hamper software development for Apple software, or is this just the random experiences of someone on the Internet?&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="11024" LastEditDate="2019-04-23T21:35:00.007" LastActivityDate="2019-04-23T23:56:10.883" Title="Was Objective-C really a hindrance to Apple software development?" Tags="&lt;programming&gt;&lt;apple&gt;" AnswerCount="10" CommentCount="14" FavoriteCount="3" ClosedDate="2019-04-24T07:51:33.450" ContentLicense="CC BY-SA 4.0" />
  <row Id="9786" PostTypeId="2" ParentId="9784" CreationDate="2019-04-23T13:07:51.870" Score="28" Body="&lt;p&gt;The cartridge contains extra RAM. The NES can use tiles in cartridge memory space, but that doesn't necessarily have to be ROM. With suitable RAM and memory mapping the cartridge can create a basic bitmap display out of tiles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vectors are then rendered to that RAM using the NES CPU in the normal way.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-04-23T13:07:51.870" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="9787" PostTypeId="2" ParentId="9785" CreationDate="2019-04-23T13:26:49.723" Score="5" Body="&lt;p&gt;Seems like a very opinion oriented question, but as someone that's programmed in a lot of different environments (including Objective-C)...  IMO, Objective-C could indeed qualify as a nightmare when compared to well, virtually anything else.  Personally it's like the worst parts of C and the worst parts of LISP combined and I truly wish that they had gone with something else, really &lt;em&gt;anything&lt;/em&gt; else...  :-)&lt;/p&gt;&#xA;" OwnerUserId="481" LastActivityDate="2019-04-23T13:26:49.723" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9788" PostTypeId="2" ParentId="9785" CreationDate="2019-04-23T13:26:58.217" Score="24" Body="&lt;p&gt;Swift was introduced only in mid-2014 so I think perhaps some of those people's beards have greyed out very rapidly! That aside, Objective-C attempts to fuse two different languages: Smalltalk and C. So it's a compiled language, like C, that for object types also supports dynamic dispatch and introspection, like Smalltalk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's actually a strict superset of C: all standard C libraries are directly callable from Objective-C, and many of the very central parts of Apple's libraries are written directly in C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Object types are dynamic enough that you can look up available methods and their types, and declared properties, and their types, and at runtime access either by name if desired. This functionality is central to Apple's UI libraries: e.g. to tell a button which action to perform when pressed you tell it the identity of the object it should call plus the name of the method, and the runtime does the necessary method routing. So things like the UI designer &lt;em&gt;don't generate any code&lt;/em&gt;. There's no hidden mapping file full of comments that it was automatically generated and please don't edit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's at least one problem that stopped being a problem a long time ago: into the OS X era, memory was managed manually — you were responsible for remembering to take a small number of idiomatic steps to ensure proper memory allocation and deallocation. But they were so idiomatic that no thought was really required, and indeed that the compiler was able to assume responsibility for them circa 2010.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also problems of style: object syntax is almost LISP-esque in requiring matched pairs of &lt;em&gt;outer&lt;/em&gt; brackets. Square brackets rather than round but it still used to mean a lot of hopping back and forth on a line. This also improved a lot towards the end of Objective-C's primacy as Apple started using Clang itself directly for in-IDE code processing, including predicting where automatically to insert this opening brackets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the main problem was this: at runtime, Objective-C provides duck typing. That is, you're free to pass any object type to any method of any other object type and things will just work if the code has been written to expect it. So e.g. there's only one array type, which can hold any mixed list of objects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the first versions of the framework were built for NextStep machines with low quantities of megabytes of RAM, that was a huge bonus for many of the complicated data types: e.g. there's also just one version of a dictionary, so having it be entirely typeless means having only one set of code in memory for all applications. Compare and contrast with a generics-based language like C++: each instance of a std::map has distinct code generated at compile time that is specific to the types of the keys and values. Which is faster and safer but a greater burden on memory footprint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 'lightweight generics' now in Objective-C that declare an intended type for each collection variable so that the compiler can look to provide probable misuse warnings, but they're post-Swift and, honestly, primarily for its benefit — they help at the boundaries between the languages because the newer prefers the safety of types.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trying to draw this ramble back to a concrete point: I'd say that no, Objective-C was never much of a hindrance. It offers all of C plus a bunch of reflection that is useful for UI programming. There's also empirical evidence to back this up: officially-supported languages for building OS X languages from day one were Objective-C and Java. The latter was deprecated only a few years later after market forces selected the former.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the language's major crime is oddball syntax; it is also unfortunate that some of the problems that being typeless solved are no longer problems, making it undesirable as an axiomatic feature.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-04-23T13:26:58.217" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="9792" PostTypeId="2" ParentId="9785" CreationDate="2019-04-23T15:22:51.257" Score="35" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Objective-C was by all accounts a nightmare to work with&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I loved it. &lt;strong&gt;Loved&lt;/strong&gt; it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some background: in the 90s I worked for a developer here in Toronto with a Mac and Win app. I wanted to work on the dev side but I had no formal training, and I found the barrier to entry to be too high for my interest level. To do anything useful, you had to learn the OS, the IDE, the language and the library, each of which was some level of dismal. For instance, the text editor widget on the Mac couldn't handle 32k, and the various libraries just called it. If you wanted to edit more text, well, have fun!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1998 Apple sent me a copy of OpenStep, or as they called it, Rhapsody Preview. After some install issues (lack of drivers, had to replace the CDROM drive with one it knew) I had my first real program running in a day. &lt;em&gt;Real&lt;/em&gt; program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because unlike the Mac or Win of that era, the OS was the library, and the library was &lt;strong&gt;f'ng amazing&lt;/strong&gt;. Text editor? How about one that fully supported Unicode, was limited only to 32-bit int in length, automatically paged data as needed (because that how the whole system worked), did complex layout like columns and flowed around graphics and such, and had a built-in spell checker. The entire library was like this, the base objects were super-powerful out of the box and tightly integrated with each other and the entire OS as a whole. I hate to use this word, but it had synergy that had to be used to understand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Contrast with, say, Win + MFC... gebus. It was like Lisp Machine vs. PDP-8. .Net helped, and C# is better than Obj-C (I'd say it's my favorite language), but it was decades before .Net got close to OpenStep of the 90s, and even today its base objects still suck - why can't the get an array type right after 20 f'in years?! Every time I use it I end up wondering why some totally base object is missing some totally obvious feature, or why they have five objects to do the same thing, each with their own set of dumbness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obj-C was no worse than other languages, except perhaps in syntax (&lt;em&gt;perhaps&lt;/em&gt;). It had two super-amazing advantages though. Extensions let you add code to existing &lt;em&gt;compiled&lt;/em&gt; objects, so you could add spell checking to &lt;em&gt;someone else's&lt;/em&gt; text editor for instance, and the handling of nil was wonderful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Swift... well I like some things and don't like others. The whole class/struct thing they boast about is, to me, a crock. Yes, I know it's more efficient etc, but it really is much less flexible than just declaring a class and using it. I also hate hate &lt;em&gt;hate&lt;/em&gt; putting the type after the declare, &lt;code&gt;int c=0&lt;/code&gt; is simply easier to read than &lt;code&gt;var c:Int=0&lt;/code&gt;, and &lt;code&gt;int doSomething()&lt;/code&gt; is lightyears better than &lt;code&gt;func doSomething() -&amp;gt; Int&lt;/code&gt;. Bah! Swift also lost the wonderful nil handling, and I can't for the life of me see an upside - everyone just puts &lt;code&gt;!&lt;/code&gt; on everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall, yes, Swift is an improvement. But Obj-C was pretty great too. At least in the 90s. It collected a LOT of cruft when it moved to Mac/iOS, and much of that was ugly and just totally bolted-on. So early Obj-C and Swift were pretty similar in ease-of-use IMHO, while late Obj-C was indeed getting to be a real downer.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-04-23T15:22:51.257" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="9793" PostTypeId="2" ParentId="9785" CreationDate="2019-04-23T15:25:49.007" Score="7" Body="&lt;p&gt;It's a very subjective matter. Programming languages and programmers need to pair up: some programming languages are more suited to the way a programmer is thinking than others. So if a developer is working with a language that seems to get in their way, they surely do not like it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I for one liked Objective-C when I started working with it back in 2007 (already had almost 20 years of programming experience in various languages at that time). Still like it. Even back then, it had a lot of nice features and pretty consistent APIs but it's syntax is unusual in the C family of languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a hindrance insofar that Objective-C is almost solely used for iOS and macOS development, so you are unlikely to come across it when working with other OSs. This limits the people that have experience with it and thus the available resources like documentation and source code when compared to, say, Java which is available everywhere. At the same time this also leads to the advantage of providing a consistent experience for all developers who worked with Objective-C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Almost equally important are the available APIs (building blocks) provided to the programming language. The ones provided by Apple were pretty consistent even back than (with a few dark, dirty corners here and there) and have (mostly) improved; the need to coexist with Swift has helped in this regard. And like the programming language itself, if an API gets in the way of what a programmer is doing they don't enjoy it. The APIs provided by Apple a very verbose, some names can become very long. Some people love it, some people hate that.&lt;/p&gt;&#xA;" OwnerUserId="793" LastEditorUserId="793" LastEditDate="2019-04-23T15:38:19.493" LastActivityDate="2019-04-23T15:38:19.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9794" PostTypeId="2" ParentId="9785" CreationDate="2019-04-23T15:57:33.957" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did objective-C hamper software development for Apple software or is this just the random experiences of someone on the internet?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Do you really expect an objective answer here? Languages are a matter of heart and opinion, not really anything factual. Even more so when asking about the truth of an opinion like the one mentioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A short comparsion might be useful&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main difference is for what goal C got extended. Both (C++/Objective C) are meant to speed up execution compared with prior, more 'pure' OOP languages by using the rather simple static compile structure of C. And extending it with OOP features. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Objective C focuses on being a language extension by implementing ways for dynamic object and code handling (reflection) while keeping it a compiled language with a minimum runtime. It's generally geared toward making run time decision about linkage and message parsing.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;C++ replaces C by moving toward the use of standard classes. C++ target is a complete static code, all decisions about linkage and message parsing is made at compile time. Metaprogramming with Templates tries to overcome this to some point.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It can be said that Objective C is a a more basic and thought thru attempt on the language side, while C++ adds many features in less than coherent ways, inviting feature creep thru the standard library in often incompatible manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general Objective C may be preferable for larger and more dynamic projects. especially if they are in use over a long time and many instances. C++ got it's merits when its about closed projects and a small footprint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So what about the 'hampering'?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not really. C++ allows for much code mangling to get along with prior C knowledge plus acceptance some aspects as helpful, whereas Objective C requires to truely switch for a more clean OOP design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Preferences may come down to willingness of programmers to learn new ways or jsut mangle thru - the later are of course less expensive to hire and more ready available.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-04-23T15:57:33.957" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9795" PostTypeId="2" ParentId="9785" CreationDate="2019-04-23T16:28:33.447" Score="5" Body="&lt;p&gt;It should be fairly evident that Objective-C has not hindered the growth of software in Apple's &quot;ecosystem&quot;. For this, you only need to look at the success of the App Store.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recall that iOS (originally, just OS X for the iPhone) started off as a closed development environment. The only official apps for iPhone were those internally developed by Apple. Of course, they were developed using the Cocoa Framework and Objective-C language brought over from OS X. A full year after the iPhone release, the App Store opened a floodgate of new developers adopting Cocoa and Objective-C. From Wikipedia:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The App Store was opened on July 10, 2008, with an initial 500 applications available. As of 2017, the store features over 2.1 million apps.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, regardless of any developers personal feelings on whether it is a nice development experience, or  whether the language has serious shortcomings, the objective evidence proves that software was produced on a grand scale using this platform.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-04-23T16:28:33.447" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9796" PostTypeId="2" ParentId="9712" CreationDate="2019-04-23T17:57:56.307" Score="3" Body="&lt;p&gt;&quot;Build automation system&quot; seems to be a grandiose name for how we used to build software in late 1970s in my corner of DEC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a file containing the commands needed to build the software system.  Someone wrote that command file.  You ran that command file (batch, indirect command processor, whatever - it depended on the system).  If the commands needed to build the software change, then we have interactive editors that can change the command file :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For day-to-day software development, you'd typically know what you needed to rebuild based on what you'd changed, so you might say that dependency management was all wetware-based.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every now and then, when some functional milestone had been reached, a &quot;baselevel&quot; would be declared.  A clean set of sources would be collected, built from scratch, run through a few cursory tests, maybe some distribution binary tapes made if needed, and the baselevel disk would be taken down and put somewhere safe, offsite if you were important enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;tl;dr - &quot;how to build this software&quot; was a pretty static procedure, so the lack of automation -- as distinct from unattended operation -- did not seem to be a problem.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-04-23T17:57:56.307" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9797" PostTypeId="2" ParentId="9784" CreationDate="2019-04-23T17:58:13.383" Score="10" Body="&lt;p&gt;The Nintendo can easily display 256 different 8x8 background tiles fetched from a cartridge.  One could use 240 such tiles to draw e.g. a 128x120 bitmap while still having a few left over to decorate the edges, and if the cartridge fetches tile data from RAM, the content of those tiles could be updated under program control.  This approach would be workable for a game like Qix, which doesn't update very much content every frame, but unworkable for Elite, where each animation frame is drawn &quot;from scratch&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;European (PAL) NES consoles only allow graphics memory to be accessed during about 20% of each frame time.  That may not sound like much, but it's three times the amount of time available in North American (NTSC) consoles.  This isn't enough a big enough fraction of the time to load entire bitmaps for every animation frame while achieving a decent frame rate, but it is is enough that if the system determines which tiles have meaningful picture content, it will only need a few video frames to load the data for those tiles into graphics memory.  There are many additional complications, but the chief take-away is that the PAL vertical blank is long enough to make such things practical.  Unfortunately, because the NTSC vertical blank is much shorter (about 7% of the frame) it's unlikely games like Elite will be adaptable to North American consoles.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-04-23T17:58:13.383" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9798" PostTypeId="2" ParentId="9785" CreationDate="2019-04-23T20:02:43.617" Score="3" Body="&lt;p&gt;It's an excellent and extremely powerful language. The syntax needs a bit of time to get used to, but after a week or so you should have no problems whatsoever. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Named arguments are the &lt;em&gt;best&lt;/em&gt; innovation of Objective-C. Lots of things that are bad in C++ because a function call is not self-documenting go away in Objective-C. There are &lt;em&gt;observers&lt;/em&gt; built into the language. Any property can be &lt;em&gt;observed&lt;/em&gt;, that is arbitrary code can say &quot;I want to be notified when this property changes&quot; - great for having the weakest possible coupling between code. There are interfaces, so you are not restricted to subclassing. There are closures. There are class extension - if you ever wished you could extend std::string (add methods to it, not subclass), you can do that in Objective-C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's an excellent language. Swift is better - after a non-trivial learning curve, but that's with 20-30 years more experience. &lt;/p&gt;&#xA;" OwnerUserId="1959" LastActivityDate="2019-04-23T20:02:43.617" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9799" PostTypeId="1" CreationDate="2019-04-23T20:58:12.257" Score="8" ViewCount="423" Body="&lt;p&gt;I would like to know how to connect a hard drive to the Amiga 4000 tower. I have an IDE cable from the top right m/b to the IDE CD-drive. I also have what looks like a SCSI cable from the CPU board.&lt;br&gt;&#xA;Does this platform support both?&lt;/p&gt;&#xA;" OwnerUserId="12417" LastEditorUserId="11916" LastEditDate="2019-11-20T19:18:31.383" LastActivityDate="2019-11-20T19:18:31.383" Title="How do I connect an IDE hard drive to an Amiga 4000 tower?" Tags="&lt;amiga&gt;&lt;hard-disk&gt;&lt;scsi&gt;&lt;ide&gt;&lt;amiga-4000&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9801" PostTypeId="2" ParentId="9136" CreationDate="2019-04-23T21:24:22.883" Score="2" Body="&lt;p&gt;The cents symbol was not in ASCII, was in IBM's EBCDIC, and therefore in keypunches, as mentioned the 026 and subsequent 029 and if I recall right the more automated 129&lt;/p&gt;&#xA;" OwnerUserId="12416" LastActivityDate="2019-04-23T21:24:22.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9802" PostTypeId="2" ParentId="9712" CreationDate="2019-04-23T21:25:14.637" Score="4" Body="&lt;p&gt;One precursor was Digital's &lt;a href=&quot;https://en.wikipedia.org/wiki/Concise_Command_Language&quot; rel=&quot;nofollow noreferrer&quot;&gt;Concise Command Language&lt;/a&gt;.  This reduced the number of steps required to go through a revise and test cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, Digital moved on to DCL, which permitted building a customized command procedure to automate building.  But DCL came after the make command you asked about.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="278" LastEditDate="2019-04-24T06:00:24.743" LastActivityDate="2019-04-24T06:00:24.743" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9804" PostTypeId="2" ParentId="99" CreationDate="2019-04-23T21:45:27.100" Score="4" Body="&lt;p&gt;Clearly, it depends a lot on how you define &quot;graphical interface&quot;.  I recall seeing a lunar landing game being played on the console of a Cyber-170 sometime in the 70s. They were vector graphics terminals and had no graphical input. There are similar consoles on the CDC 6600 which was first delivered in 1965. The lunar lander game also worked on the CDC-6000 (See Bruce B.'s comment  &lt;a href=&quot;https://www.technologizer.com/2009/07/19/lunar-lander/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.)  This might explain the long turn-around times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MGgX0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MGgX0.jpg&quot; alt=&quot;CDC console&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The consoles were made by Data Display Inc., which CDC bought in 1965.   &lt;a href=&quot;http://www.cbi.umn.edu/resources/mncomphist-d.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;They sold terminals starting in 1961.&lt;/a&gt;  The terminal and computer were sold separately, and it might have taken some work to hook them up, as described &lt;a href=&quot;http://www.computer-history.info/Page4.dir/pages/DD.80.dir/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here.&lt;/a&gt;.  So in 1961 or so, for less than $3 million (USD) you could buy an &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_709&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 709&lt;/a&gt; and a Data Display terminal for it, to make a nice graphics computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bVBRv.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bVBRv.jpg&quot; alt=&quot;A picture made on the dd80&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8226" LastEditorUserId="4921" LastEditDate="2019-04-24T01:36:30.533" LastActivityDate="2019-04-24T01:36:30.533" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9805" PostTypeId="2" ParentId="9785" CreationDate="2019-04-23T22:11:24.980" Score="3" Body="&lt;p&gt;I've been programming professionally for 30 years and have worked with plenty of  languages, and I hated, HATED, HATED Objective-C. It never made any sense to me. I tried to figure it out, but whenever I thought I had it, I didn't. Finally I gave up and moved on to something else. So, was Objective-C really a hindrance to Apple software development? Yes, it was. It certainly was for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A hindrance is not necessarily a barrier, however. The availability of other tools for doing ios development, particularly with C++, has made learning Objective-C unnecessary. But I do believe that plenty of developers were scared off by Objective-C and never even investigated alternatives.&lt;/p&gt;&#xA;" OwnerUserId="12208" LastActivityDate="2019-04-23T22:11:24.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9806" PostTypeId="2" ParentId="9799" CreationDate="2019-04-23T22:45:00.187" Score="7" Body="&lt;p&gt;The Amiga A4000T is the only Amiga to include both a SCSI-II controller and an IDE interface on the motherboard. And, if you can believe the &lt;a href=&quot;https://www.bigbookofamigahardware.com/bboah/product.aspx?id=31&quot; rel=&quot;noreferrer&quot;&gt;entry in the BBOAH&lt;/a&gt; is also THE RAREST home computer ever, with only ~35 known to exist. Note: This is referring to the units manufactured by Commodore, and not those that followed the bankruptcy. Anyway, she's a rare gem if the former.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Connecting an IDE HDD should be no problem. I would start by trying a known-working drive (or flash with some adapter) as the Master device, without the CD-ROM connected. You should be able to boot from floppy and recognize the HDD using the HD setup tools on your Workbench 3.1 Install disk. Use the tool to partition the HDD, then format it in the standard Amiga way. From there, you should be able to install Workbench, then reboot the machine directly from the HDD. Really, nothing special here, in comparison to other Amigas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Kickstart 3.1 ROM that was created for the A4000T is modified to allow the IDE and SCSI-2 controllers to have their own drivers and work either independently or together. For better performance, you should consider a SCSI HDD. Criticisms of the A4000 Desktop HDD performance with the IDE interface is the reason that Commodore revised the system to bring back SCSI (which the A3000/A3000T had built-in also). &lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-04-23T22:45:00.187" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9807" PostTypeId="2" ParentId="9785" CreationDate="2019-04-23T22:54:41.400" Score="6" Body="&lt;p&gt;Another thing worth noting (as a developer but also a programming instructor at the college and high school levels), Objective-C is INCREDIBLY simple to learn for people new to programming.  I have also taught Python and more recently Swift, and despite my increased experience Objective-C seems to be what new programmers pick up most rapidly.  My guess is that the language is quite verbose, and intersperses arguments with the function so that function calls become more like sentences, and are more relatable.  In the same way it is very different than going from Java to C#, so people that already know one of the canonical languages can struggle, because it doesn't look the way that it &quot;should&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For ease of use I would say that it is relatively easy; in most cases when you make a language simpler you also make it user to write very poor quality software, which can be a nightmare.  It's best known with Javascript and other weakly-typed languages, but Objective-C does provide more freedom than Java (and exposes abilities that are present but complicated to use in C), so it is possible for code to be of lower quality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my personal bias I really like Objective-C, but I understand how some people can hate it.&lt;/p&gt;&#xA;" OwnerUserId="12423" LastActivityDate="2019-04-23T22:54:41.400" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9808" PostTypeId="2" ParentId="9785" CreationDate="2019-04-23T23:56:10.883" Score="2" Body="&lt;p&gt;In my experience, the language itself is no more difficult to learn, than any other language. Yes, it has a quirky syntax that many find unfamiliar but it is not difficult to understand. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system libraries for OSX and iOS, on the other hand, are like the menu at Cheesecake Factory, very large and full of lots of things you will never consume.&lt;/p&gt;&#xA;" OwnerUserId="4210" LastActivityDate="2019-04-23T23:56:10.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10807" PostTypeId="1" CreationDate="2019-04-24T01:17:59.193" Score="7" ViewCount="302" Body="&lt;p&gt;C has data types, so if you add an &lt;code&gt;int&lt;/code&gt; to a &lt;code&gt;float&lt;/code&gt;, for example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int i = 1;&#xA;float f = 2.5;&#xA;float r = i + f;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The C compiler will know that it should generate machine instructions that adds an &lt;code&gt;int&lt;/code&gt; to a &lt;code&gt;float&lt;/code&gt; because the C compiler can see that &lt;code&gt;i&lt;/code&gt; is an &lt;code&gt;int&lt;/code&gt; and &lt;code&gt;f&lt;/code&gt; is a &lt;code&gt;float&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;But there is no data types in the B programming language, so if we did the following (not sure if this is a correct syntax):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;auto i = 1;&#xA;auto f = 2.5;&#xA;auto r = i + f;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How would the B compiler know that it should generate machine instructions that adds an &lt;code&gt;int&lt;/code&gt; to a &lt;code&gt;float&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="13423" LastActivityDate="2019-04-24T16:27:09.490" Title="How to add an &quot;int&quot; to a &quot;float&quot; in the B programming language?" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10808" PostTypeId="2" ParentId="10807" CreationDate="2019-04-24T03:03:35.380" Score="14" Body="&lt;p&gt;B was a typeless language so &lt;code&gt;i + f&lt;/code&gt; was always an integer addition operation.  As it was typeless this also means the value in &lt;code&gt;f&lt;/code&gt; wouldn't be converted to integer, it was just assumed to already be an integer. The bits stored in &lt;code&gt;f&lt;/code&gt; would give it its value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the original B implementation didn't support floating point, so there was no way to even have floating point literals.  There was at least one &lt;a href=&quot;https://www.thinkage.ca/gcos/expl/b/manu/manu.html&quot; rel=&quot;noreferrer&quot;&gt;implementation of B, for GCOS8&lt;/a&gt;, where you could in fact do &lt;code&gt;f = 2.5;&lt;/code&gt;, but &lt;code&gt;i + f&lt;/code&gt; still worked as described above.  If you wanted to do a floating point addition instead you'd do &lt;code&gt;i #+ f&lt;/code&gt;, but that had the same problem.  It assumed &lt;code&gt;i&lt;/code&gt; was already a floating point value and wouldn't convert it.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to get the same behaviour as in C, in addition to using the &lt;code&gt;#+&lt;/code&gt; floating point addition operator, you'd have to explicitly convert &lt;code&gt;i&lt;/code&gt; to a floating point value:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;auto r;&#xA;r = #i #+ f;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where &lt;code&gt;#&lt;/code&gt; is the unary operator that converts integer values to floating point. B also doesn't seem to have supported initialization of auto variables, so two statements are necessary here. &lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2019-04-24T16:27:09.490" LastActivityDate="2019-04-24T16:27:09.490" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10809" PostTypeId="1" AcceptedAnswerId="10815" CreationDate="2019-04-24T12:41:03.563" Score="12" ViewCount="1286" Body="&lt;p&gt;I never was into CP/M, but I knew it was very popular and the amount of software out there was significant. That being said, when you looked beyond the Kaypros, the IMSAIs, the SOLs and the like which were presumably built mostly similar (well, if you consider that they're all based on the 8080 or Z80), there were a few oddballs out there. In particular, you could add CP/M capabilities to 6502 based platforms such as the Apple II, C64, Amstrad, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was all software made for CP/M (8080) compatible across all these machines including the Apple/C64/etc variations? In other words, if you were to purchase WordStar on disk, could you boot it on a Kaypro just as easily as a C64 with the CP/M cartridge? I would presume all of the translation to KERNAL would be handled by the cartridge's BIOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did this work seamlessly or was it a bit more complicated than that?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2019-04-24T16:44:51.733" LastActivityDate="2019-04-25T09:29:57.077" Title="Are all CP/M-80 implementations binary compatible?" Tags="&lt;cp-m&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10810" PostTypeId="2" ParentId="10809" CreationDate="2019-04-24T12:55:12.790" Score="4" Body="&lt;p&gt;Basically the situation is much like with  DOS later. DOS itself is pure 8086 code, while applications may require later/different CPUs (*1) - always check the fine print on the box (*2)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Are all Z80 CP/M implementations binary compatible?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, CP/M (BDOS/CCP/utilities) is pure 8080 code. BIOS in contrast is supposed to be machine specific anyway, so it's not uncommon to find Z80 or other non 8080 code there.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was all software made for CP/M (8080) compatible across all these machines including the Apple/C64/etc variations?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now, asking about applications, the world &lt;em&gt;may&lt;/em&gt; look different. In general companies only used 8080 code again, so yes, a Wordstar binary for the Apple II was exactly the same as for a Kaypro or any other machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course there where also applications specific made to take advantage of more capable CPUs. It made sense to check before buying.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In other words, if you were to purchase WordStar on disk, could you boot it on a Kaypro just as easily as a C64 with the CP/M cartridge?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, except exchanging disks between these three would be quite a hurdle to climb :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Yes, I know there where drivers and extensions requiring certain CPUs to run. But these where not part of the core and even though the core was using them, the interface was 8086 compatible, so everything 'newer' was encapsulated within the driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Who doesn't remember the huge list of CPU, Graphics card, Sound card, CD-Drive and whatsoever list on the side of 90's game boxes :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-04-24T12:55:12.790" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10811" PostTypeId="2" ParentId="10809" CreationDate="2019-04-24T14:50:02.343" Score="2" Body="&lt;p&gt;Not always. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example MBASIC (and GBASIC) supplied with the Microsoft Softcard for the Apple ][ are custom for the that environment and have support for paddles, lores and hires graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is however unusual for a CP/M application, most have a terminal configuration program to allow customisation for that environment. I wouldn't be surprised to find that versions sold with a computer (I'm thinking Osborne) were tied to that particular hardware. I'm pretty sure that Turbo Pascal on an Apple ][ format disk was already preconfigured for the softcard terminal.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2019-04-24T14:50:02.343" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10812" PostTypeId="1" AcceptedAnswerId="10820" CreationDate="2019-04-24T15:44:54.880" Score="64" ViewCount="14377" Body="&lt;p&gt;In the C programming language, the syntax to access the member of a structure is&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;structure&lt;/em&gt;&lt;code&gt;.&lt;/code&gt;&lt;em&gt;member&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, a member of a structure referenced by a pointer is written as&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;pointer&lt;/em&gt;&lt;code&gt;-&amp;gt;&lt;/code&gt;&lt;em&gt;member&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's really no need for two different operators.  The compiler knows the type of the left-hand value; if it is a structure, the first meaning is evident.  If it is a pointer, the second meaning is evident.  Furthermore, &lt;code&gt;.&lt;/code&gt; is far easier to type than &lt;code&gt;-&amp;gt;&lt;/code&gt;.  Not only does &lt;code&gt;-&amp;gt;&lt;/code&gt; have more characters to type, on many keyboards one character is unshifted and the other character is shifted, requiring some finger acrobatics.  Indeed, many languages based on C allow or use &lt;code&gt;.&lt;/code&gt; in place of &lt;code&gt;-&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did C use two operators when one would have sufficed?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; As this is the Retrocomputing site, it is implied that questions are asked from a historical perspective.  To that end, I have added the &lt;a href=&quot;/questions/tagged/history&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;history&amp;#39;&quot; rel=&quot;tag&quot;&gt;history&lt;/a&gt; tag, and accepted the answer that provided the best historical context.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few answers took a more speculative approach; a few others raised concerns that became valid later.  These are fascinating answers, and I appreciate those who wrote them, but they don't address the history of the decision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I dislike answering my own questions.  However, I did find a paper by Dennis Ritchie that helps to answer this question, and has not been addressed in other answers.  I therefore wrote an answer, which you are welcome to examine below.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2019-04-27T02:33:09.410" LastActivityDate="2020-12-15T20:00:12.410" Title="Why did C use the -&gt; operator instead of reusing the . operator?" Tags="&lt;history&gt;&lt;c&gt;" AnswerCount="5" CommentCount="17" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="10813" PostTypeId="2" ParentId="2226" CreationDate="2019-04-24T15:53:18.017" Score="5" Body="&lt;p&gt;$0 is also a reserved address. It has two uses. The first is to prevent the rather common error of dereferencing a null pointer from immediately corrupting the OS. The second is to help ensure that a software failure message (the famous &quot;guru meditation&quot;) appears on screen if the machine is forced to reboot before the ROM routines can display it. In that case the ROM checks address $0 for &quot;HELP&quot; and displays the guru during boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other fixed addresses on the Amiga are the custom chip registers, but in later versions of the OS they are all abstracted away with library functions to access them. In earlier versions it was common to check certain registers to determine what features the machine had, such as the ECS chipset.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-04-24T15:53:18.017" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10814" PostTypeId="2" ParentId="10812" CreationDate="2019-04-24T15:55:57.040" Score="18" Body="&lt;p&gt;I think there are two factors that led to standardization of the distinct operator &quot;-&gt;&quot; for accessing data members using a pointer.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You assume that the C compiler would recognize the type of the LHS as being a pointer. But programmers could, and often did, override the initial typing (variable declaration) by using a typecast.&lt;/li&gt;&#xA;&lt;li&gt;In order to make the code more readable and less prone to &lt;em&gt;unintended&lt;/em&gt; side-effects, it is &lt;em&gt;useful&lt;/em&gt; to distinguish operations using pointers.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A very common feature of idiomatic C code is that a structure passed to a function as a pointer is modified within the function. Thus, the result is returned implicitly, by the side-effect of the structure variable in the calling function having been modified by the callee. This sort of approach violates modern sensibilities about loosely coupled code, but it was a simple and efficient means of dealing with complexity in C code. I would say the programmer was &lt;em&gt;greatly assisted&lt;/em&gt; in maintaining the readability of such code by having distinct operations that made it clear whether some (possibly shared) memory pointer was the thing whose target was being modified.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-04-24T17:04:31.613" LastActivityDate="2019-04-24T17:04:31.613" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10815" PostTypeId="2" ParentId="10809" CreationDate="2019-04-24T16:08:53.010" Score="13" Body="&lt;p&gt;The primary benefit of CP/M was that the applications software was written for &lt;strong&gt;the CP/M-80 platform&lt;/strong&gt;, which made those applications binary compatible across the many computer systems that were compatible with the platform (notwithstanding the fact that some application vendors would create Z80-specific binaries, which naturally were NOT compatible with 8080 CP/M systems). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disadvantage that overrode a lot of the above benefit was that the floppy disk formats varied greatly amongst the different competing systems. So, even though the binaries were compatible, you still needed to obtain media specific to your system. At the time, floppy hardware varied significantly, so dealing with different media wasn't something they could solve with another layer of software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my mind, this fragmentation in CP/M was a major reason that it was so easily knocked off its throne by MS-DOS. IBM and Microsoft together were able to standardize the hardware platform, including the floppy controllers and drives. Thus, MS-DOS applications, which were already largely source code compatible to CP/M applications, could be shipped on common media with common binaries &lt;em&gt;and&lt;/em&gt; disk format. Thus, programs and data became truly interchangeable amongst systems from different vendors. Competition flourished, users and software vendors were spared the nightmare of incompatible media, and the rest is history.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-04-24T17:00:02.263" LastActivityDate="2019-04-24T17:00:02.263" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="10816" PostTypeId="2" ParentId="10809" CreationDate="2019-04-24T17:09:03.680" Score="4" Body="&lt;p&gt;If you could get your computer to load the disk (which sounds easier than actually done, considering the huge amount of different and entirely incompatible disk formats that exist for CP/M computers) and your computer had a Z80 CPU (some software was Z80-only, like Turbo Pascal, for example) and enough memory, you could very probably run next to all available CP/M software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether you saw something (the intended something!) on your screen/terminal, depended on the terminal or terminal emulation you ran on your equipment: Your best bet was probably a DEC (VT52 or VT100) or ADM3a emulation. Most software that was not purely line-oriented thus came with patch lists or even a configuration program to adapt the software to specific terminals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There still was CP/M software that was tailored to specific computers, very common were adaptions to popular makes that had a bitmapped text display. You could argue, however, that these pieces of software were &lt;em&gt;not real&lt;/em&gt; CP/M 80 software, as they normally didn't use OS routines to handle the display.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2019-04-24T17:09:03.680" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10817" PostTypeId="2" ParentId="9040" CreationDate="2019-04-24T18:20:31.903" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;So when seeking employment I applied to [Grace Hopper's] Automatic&#xA;  Programming Department at Remington-Rand Univac and was employed&#xA;  started in June 1959.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&quot;The day of reckoning was in December 1960 when the CODASYL&#xA;  dignitaries showed up one day at RCA in Camden and the next day in&#xA;  Univac in Philadelphia.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&quot;During the spring of 1961 [we] moved from the primitive facilities at&#xA;  19th and Allegheny Avenue (an old dusty and dirty Exide battery&#xA;  warehouse) to a new luxurious building in Blue Bell, Pennsylvania.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Source: Harold &quot;Bud&quot; Lawson (inventor of the pointer variable). &quot;&lt;a href=&quot;http://dl.ifip.org/db/series/ifip/ifip387/Lawson12.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Experiences and Reflections&lt;/a&gt;.&quot; (The photo in the .pdf file is also located &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Univac_I_Census_dedication.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://www.npr.org/2011/06/19/137280862/the-first-supercomputer-vs-the-desk-set&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my guess (just a guess) is that the photo was taken at 19th Street and Allegheny Avenue, Philadelphia, Pennsylvania. (One remaining building of the Exide complex &lt;a href=&quot;https://hiddencityphila.org/2014/01/a-long-battery-life-on-north-phillys-allegheny-avenue/&quot; rel=&quot;nofollow noreferrer&quot;&gt;still stands&lt;/a&gt;, but the Remington-Rand Univac buildings south of Allegheny and north of the tracks appear to have all been demolished.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think everyone in the photo has passed away by now: Donald Cropper (b. 1939?) in 2011, Kalpathi C. Krishnan (b. 1924) in 2002, Grace Hopper (b. 1906) in 1992, and Norman Rothberg (b. 1935?) in 2003.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few years ago, the Smithsonian posted on Facebook &lt;a href=&quot;https://www.facebook.com/SmithsonianInstitutionArchives/posts/were-on-a-research-mission-for-the-the-white-house-cto-this-is-a-photo-from-the-/939129822778159/&quot; rel=&quot;nofollow noreferrer&quot;&gt;asking&lt;/a&gt; for the identities of the people in the photo. They might be a lead for information about the photo's location, in addition to Professor Lawson if anyone knows how to contact him.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-04-24T21:00:43.253" LastActivityDate="2019-04-24T21:00:43.253" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10818" PostTypeId="2" ParentId="10812" CreationDate="2019-04-24T18:42:42.467" Score="64" Body="&lt;p&gt;In the embryonic form of C described in the 1974 C Reference Manual, there was no requirement that the left operand of &lt;code&gt;.&lt;/code&gt; actually be a structure, nor that the left operand of &lt;code&gt;-&amp;gt;&lt;/code&gt; actually be a pointer.  The &lt;code&gt;-&amp;gt;&lt;/code&gt; operator meant &quot;interpret the value of the left operand as a pointer, add the offset associated with the indicated structure member name, and dereference the resulting pointer as an object of the appropriate type.  The &lt;code&gt;.&lt;/code&gt; operator effectively took the address of the left operand and then applied &lt;code&gt;-&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, given:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct q { int x, y; };&#xA;int a[2];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the expressions &lt;code&gt;a[0].y&lt;/code&gt; and &lt;code&gt;a[0]-&amp;gt;y&lt;/code&gt; would be interpreted in a fashion equivalent to &lt;code&gt;((struct q*)&amp;amp;a[0])-&amp;gt;y&lt;/code&gt; and &lt;code&gt;((struct q*)a[0])-&amp;gt;y&lt;/code&gt;, respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the compiler had examined the type of the left operand to the &lt;code&gt;.&lt;/code&gt; operator, it could have used that to select between the two behaviors for it.  It was probably easier, however, to have two operators whose behaviors didn't depend upon the left operand's type.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-04-24T18:42:42.467" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="10819" PostTypeId="2" ParentId="10812" CreationDate="2019-04-24T20:25:25.993" Score="41" Body="&lt;p&gt;Despite your assertion, there would in fact be situations where it would be ambigious.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First off, early C compilers were &lt;strong&gt;very&lt;/strong&gt; simple. This was in fact the main appeal of the language, as compilers for it were very easy to create and could run on very small systems, like early 16/32 microprocessors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding a bunch of code for hitting all the niche cases of type inference would have drastically added to the amount of code required to make a C compiler. In fact, I've argued as a (half) joke that &lt;strong&gt;K&amp;amp;R C &lt;em&gt;had&lt;/em&gt; type inference, but it always inferred &lt;code&gt;int&lt;/code&gt;.&lt;/strong&gt; If you didn't tell C what type an object was, it assumed &lt;code&gt;int&lt;/code&gt; (which could cause some really gnarly bugs, let me tell you...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, since K&amp;amp;R C was weakly (barely) typed, the information in many cases flat out wasn't available. The destination type of a pointer assignment can be an int, or vice versa, and K&amp;amp;R C has no problem with that. The compiler simply &lt;em&gt;cannot&lt;/em&gt; infer a dereference. The coder is assumed to know what she's doing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also realize that in C pointers and arrays are essentially syntactic sugar for each other. This means now your &lt;code&gt;.&lt;/code&gt; operator would have to automagically work on arrays too. For instance, if &lt;code&gt;member&lt;/code&gt; happened to be a char array, now structure.member would return with the first character. And again, both chars and pointer are assignable into ints, so context doesn't help you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This being said, you aren't the first to notice this issue. In fact, Ada was designed that dereferencing a pointer object is always assumed when a dot is used. In those cases where you want the actual pointer, you have to use &lt;code&gt;.all&lt;/code&gt;. The ambiguity (pointer vs. pointed to object) is still there, but resolved by moving the extra syntax to the weirder case. &lt;/p&gt;&#xA;" OwnerUserId="4345" LastEditorUserId="-1" LastEditDate="2019-04-26T10:05:48.780" LastActivityDate="2019-04-26T10:05:48.780" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="10820" PostTypeId="2" ParentId="10812" CreationDate="2019-04-25T00:09:39.260" Score="55" Body="&lt;p&gt;Some of the first C code I saw was like this: &lt;code&gt;0x8040-&amp;gt;output = 'A';&lt;/code&gt; &amp;#8212; its purpose was accessing memory mapped I/O locations.&amp;nbsp; Needless to say it took me a while to figure out what this code was supposed to do, and the hex constant there really threw me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original K&amp;amp;R C placed all field names (here &lt;code&gt;output&lt;/code&gt;) into the same namespace.&amp;nbsp; It was an error to have two fields of the same name in different structs at different offsets &amp;#8212; but ok to have the same name at the same offset, the idea here being that two different structs could share the same initial fields, giving cheap way of doing &quot;subclassing&quot; to put varying data members at the end of the struct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A struct could also be anonymous, e.g. no tag name for the struct.&amp;nbsp; None the less, the members could still be used in &lt;code&gt;.&lt;/code&gt; or &lt;code&gt;-&amp;gt;&lt;/code&gt; expressions.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://archive.org/details/TheCProgrammingLanguageFirstEdition/page/n203&quot; rel=&quot;noreferrer&quot;&gt;The C Programming Language (K&amp;amp;R C)&lt;/a&gt; Appendix A, p197,209&lt;/p&gt;&#xA;  &#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;[8.5] ... Two structures may share a common initial sequence of members; that is, the same member may appear in two different structures if it has the same type in both and if all previous members are the same in both.&amp;nbsp; (Actually, the compiler checks only that a name in two different structures has the same type and offset in both, but if the preceding members differ the construction is nonportable.)&lt;/p&gt;&#xA;    &#xA;    &lt;p&gt;...&lt;/p&gt;&#xA;    &#xA;    &lt;p&gt;[14.1] ... &amp;#167;7.1 says that in a direct or indirect structure reference (with . or -&gt;) the name on the right must be a member of the structure named or pointed to by the expression on the left.&amp;nbsp; To allow an escape from the typing rules, this restriction is not firmly enforced by the compiler.&amp;nbsp; In fact, any lvalue is allowed before ., and the lvalue is then assumed to have the form of the structure of which the name on the right is a member.&amp;nbsp; Also, the expression before a -&gt; is required only to be a pointer or an integer.&amp;nbsp; If an integer, it is taken to be the absolute address, in machine storage units, of the appropriate structure.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Since the K&amp;amp;R language and compiler didn't care what the type of the left hand side of &lt;code&gt;.&lt;/code&gt; and &lt;code&gt;-&amp;gt;&lt;/code&gt; was, the only way it had to tell the difference was by having the two operators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ANSI C line of standards simply followed suit in syntax, even as these old rules were abandoned.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastEditorUserId="13490" LastEditDate="2019-04-27T10:21:35.247" LastActivityDate="2019-04-27T10:21:35.247" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10821" PostTypeId="1" CreationDate="2019-04-25T02:27:14.603" Score="2" ViewCount="316" Body="&lt;p&gt;I have an old &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B00000JBUJ&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lexmark 1100&lt;/a&gt; printer (parallel port LPT1) that is currently working fine on Windows 98. I've tried to make it work on several current distros of Linux but, so far, none worked. Basically, I've followed the &lt;a href=&quot;https://wiki.linuxfoundation.org/openprinting/database/driverpackages&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenPrinting installation steps&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;apt install lsb&lt;/code&gt;  &lt;/li&gt;&#xA;&lt;li&gt;search for the &lt;a href=&quot;https://www.openprinting.org/printer/Lexmark/Lexmark-1100&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenPrinting Lexmark 1100 driver&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;li&gt;download &lt;a href=&quot;https://www.openprinting.org/download/printdriver/debian/dists/lsb3.2/contrib/binary-i386/openprinting-lm1100_1.0.2a-6lsb3.2_i386.deb&quot; rel=&quot;nofollow noreferrer&quot;&gt;x86 32bit driver for Debian&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dpkg -i openprinting-lm1100_1.0.2a-6lsb3.2_i386.deb&lt;/code&gt;  &lt;/li&gt;&#xA;&lt;li&gt;add printer on CUPS  &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the printer never showed any sign of life.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;lm1100&lt;/code&gt; driver is very old and might not work with the current kernel.&lt;br&gt;&#xA;My guess is the driver needs to be refactored to support the current kernel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To check that, I installed the printer on Debian Woody and, voilà, it finally showed some sign of life.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Question&lt;/h1&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Based on the aforementioned information, is it reasonable to conclude that this driver is incompatible with the current Linux kernel?  &lt;/li&gt;&#xA;&lt;li&gt;If so, how to refactor such a driver for the current kernel?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h1&gt;Additional Notes&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Parallel Port LPT1&lt;/strong&gt;&lt;br&gt;&#xA;I'm not sure how to verify whether the Debian installation includes a parallel port driver. However, I surmise that it does:  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;CUPS &lt;strong&gt;only&lt;/strong&gt; allows installing the printer after plugging it on LPT1. After that it correctly shows there is something on LPT1 although it cannot recognize which printer, (probably it predates the plug and play era).  &lt;/li&gt;&#xA;&lt;li&gt;I've already installed another device on LPT1 and it worked nice (&lt;a href=&quot;https://epson.com/For-Work/Printers/Inkjet/Epson-Stylus-Color-480SX-Ink-Jet-Printer/p/C367001&quot; rel=&quot;nofollow noreferrer&quot;&gt;Epson Stylus Color 480SX&lt;/a&gt;).  &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Therefore, considering that Debian is seeing a printer on the port, and especially that another printer worked on LPT1, it seems safe to assume that it's got a parallel port driver.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Debian Stretch&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the documentation available at &lt;code&gt;/opt/OpenPrinting-lm1100/doc/&lt;/code&gt;:  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;To move out the print head, simply type (logged in as 'root')&#xA;&#xA;   lm1100change&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Therefore, I've tried the following:  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;root@debian:/opt/OpenPrinting-lm1100/bin# ./lm1100change&#xA;0+1 records in&#xA;0+1 records out&#xA;24 bytes copied, 0.00137361 s, 17.5 kB/s&#xA;root@debian:/opt/OpenPrinting-lm1100/bin# &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, still no sign of life from the printer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also tried to print a raw image file (&lt;a href=&quot;https://en.wikipedia.org/wiki/Netpbm_format#PBM_example&quot; rel=&quot;nofollow noreferrer&quot;&gt;PBM format&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;root@debian:/opt/OpenPrinting-lm1100/bin# cat sample.pbm &#xA;P1&#xA;# This is an example bitmap of the letter &quot;J&quot;&#xA;6 10&#xA;0 0 0 0 1 0&#xA;0 0 0 0 1 0&#xA;0 0 0 0 1 0&#xA;0 0 0 0 1 0&#xA;0 0 0 0 1 0&#xA;0 0 0 0 1 0&#xA;1 0 0 0 1 0&#xA;0 1 1 1 0 0&#xA;0 0 0 0 0 0&#xA;0 0 0 0 0 0&#xA;&#xA;root@debian:/opt/OpenPrinting-lm1100/bin# ./lm1100 sample.pbm&#xA;Bad magic number in image file, got P1&#xA;&#xA;root@debian:/opt/OpenPrinting-lm1100/bin# &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Still no sign of life, although now there is an error message of 'bad magic number'.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also tried that:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;root@debian:~# echo &quot;Hello World&quot; &amp;gt; /dev/lp0&#xA;root@debian:~# &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;No sign of life from the printer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Debian Lenny&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also tried the same steps above on Debian Lenny and the results were very similar (ie, no sign of life from the printer):  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;debian:/opt/OpenPrinting-lm1100/bin# cat /etc/issue&#xA;Debian GNU/Linux 5.0 \n \l&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Debian Woody&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a long struggle, I've finally managed to install Debian Woody:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;debian:/# cat /etc/issue&#xA;Debian GNU/\s 3.0 \n \l&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've tried to follow the same installation procedures from the other versions, but there were some problems:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;debian:~# dpkg -i openprinting-lm1100_1.0.2a-6lsb3.2_i386.deb&#xA;&#xA;Selecting previously deselected package openprinting-lm1100.&#xA;(Reading database ... 37344 files and directories currently installed.)&#xA;Unpacking openprinting-lm1100 (from openprinting-lm1100_1.0.2a-6lsb3.2_i386.deb) ...&#xA;dpkg: dependency problems prevent configuration of openprinting-lm1100:&#xA;  openprinting-lm1100 depends on lsb (&amp;gt;= 3.2); however: Version of lsb on system is 1.1.0-11.&#xA;dpkg: error processing openprinting-lm1100 (--install): dependency problems - leaving unconfigured&#xA;Errors were encountered while processing: openprinting-lm1100&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Despite such dependency problems, at least some commands are now working:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;debian:/opt/OpenPrinting-lm1100/bin# ./lm1100change&#xA;parport0: PC-style at 0x378 [SPP,PS2]&#xA;lp0: using parport0 (polling).&#xA;0+1 records in&#xA;0+1 records out&#xA;&#xA;debian:/opt/OpenPrinting-lm1100/bin# ./lm1100back&#xA;0+1 records in&#xA;0+1 records out&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Both make the printhead move accordingly. The printer is showing some sign of life.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the printer still doesn't print:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;debian:/opt/OpenPrinting-lm1100/bin# ./lm1100 sample.pbm&#xA;bash: ./lm1100: No such file or directory&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Although the file is obviously there:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;debian:/opt/OpenPrinting-lm1100/bin# ls&#xA;lm1100  lm1100back  lm1100change  sample.pbm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h1&gt;System Specification&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Hardware&lt;/strong&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://support.toshiba.com/support/modelHome?freeText=434998&quot; rel=&quot;nofollow noreferrer&quot;&gt;Notebook Toshiba Satellite 1135-S1553&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Intel® Celeron® 4 processor at 2.20GHz  &lt;/li&gt;&#xA;&lt;li&gt;Intel 852GM Chipset  &lt;/li&gt;&#xA;&lt;li&gt;1Gb RAM&lt;/li&gt;&#xA;&lt;li&gt;32MB internal Integrated Intel® 852GM video memory  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Operating System&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Debian Stretch&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.debian.org/distrib/netinst#smallcd&quot; rel=&quot;nofollow noreferrer&quot;&gt;Small CDs&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://cdimage.debian.org/debian-cd/current/i386/iso-cd/debian-9.8.0-i386-netinst.iso&quot; rel=&quot;nofollow noreferrer&quot;&gt;debian-9.8.0-i386-netinst.iso&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;li&gt;Tasksel:&lt;br&gt;&#xA;( &amp;nbsp;) Debian desktop environment&lt;br&gt;&#xA;( &amp;nbsp;) ... GNOME&lt;br&gt;&#xA;( &amp;nbsp;) ... Xfce&lt;br&gt;&#xA;( &amp;nbsp;) ... KDE&lt;br&gt;&#xA;( &amp;nbsp;) ... Cinnamon&lt;br&gt;&#xA;( &amp;nbsp;) ... MATE&lt;br&gt;&#xA;(X) ... LXDE&lt;br&gt;&#xA;( &amp;nbsp;) web server&lt;br&gt;&#xA;(X) print server&lt;br&gt;&#xA;( &amp;nbsp;) SSH server&lt;br&gt;&#xA;( &amp;nbsp;) standard system utilities&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="13437" LastEditorUserId="1867" LastEditDate="2019-04-27T18:05:23.393" LastActivityDate="2019-04-27T18:05:23.393" Title="Refactoring Old Printer Driver for Current Linux Kernel" Tags="&lt;hardware&gt;&lt;windows-98&gt;&lt;printer&gt;&lt;linux&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="16" ClosedDate="2019-04-28T00:24:24.783" ContentLicense="CC BY-SA 4.0" />
  <row Id="10822" PostTypeId="1" AcceptedAnswerId="10830" CreationDate="2019-04-25T03:23:18.093" Score="29" ViewCount="7855" Body="&lt;p&gt;In his 1993 conference proceeding &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/chist.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The Development of the C Language&lt;/em&gt;&lt;/a&gt;, Dennis Ritchie stated&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Successors&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;C and even B have several direct descendants, though they do not rival Pascal in generating progeny.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Was Ritchie correct, or was he just being modest?  As of the date of the quote (1993), were more computer languages descended from Pascal than C?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are counting languages, not their specific compilers/implementations (e.g. UCSD Pascal, Borland C).  Some languages may be descended from &lt;em&gt;both&lt;/em&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I doubt such a claim would still be true today.)&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-04-29T09:34:24.653" Title="Was Dennis Ritchie being too modest in this quote about C and Pascal?" Tags="&lt;c&gt;&lt;pascal&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10823" PostTypeId="2" ParentId="10821" CreationDate="2019-04-25T03:39:55.540" Score="1" Body="&lt;p&gt;Try an HP DeskJet 500C (color) or HP DeskJet 500 (monochrome)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DeskJet 500C is referenced &lt;a href=&quot;http://support.lexmark.com/library/LEXMARK/primus/pubs/1x00%20family/1100%20Color%20Jetprinter/en_UK_UserG_1100_Win95_98.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;in the Lexmark manual&lt;/a&gt; on page 55 for direct DOS printing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.openprinting.org/printer/HP/HP-DeskJet_500C&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenPrinting&lt;/a&gt; shows the 500C as working &quot;Perfectly&quot;, compared to the Lexmark 1100 &quot;Partially&quot;. &lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2019-04-25T04:03:32.173" LastActivityDate="2019-04-25T04:03:32.173" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="10824" PostTypeId="2" ParentId="99" CreationDate="2019-04-25T04:41:15.577" Score="3" Body="&lt;p&gt;The Macintosh and the Lisa were directly inspired by the Xerox Alto,&#xA;which was announced in early 1973.  There were about 500 of them in&#xA;use outside Xerox, so I guess you could call that commercial.  The&#xA;Alto is definitely where the WIMP GUI style first became generally&#xA;known.  There was an earlier system called NewsHall, not at Xerox,&#xA;and someone who had worked on NewsHall told me that the core WIMP&#xA;ideas actually came from that, but I have no references for it.  I&#xA;would take the Alto as the answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course there were plenty of earlier commercial computer systems&#xA;with graphics output, and with light pen input.  I used a PDP-11&#xA;system like that before I ever saw an Alto.&lt;/p&gt;&#xA;" OwnerUserId="4229" LastActivityDate="2019-04-25T04:41:15.577" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10825" PostTypeId="2" ParentId="10822" CreationDate="2019-04-25T05:19:59.523" Score="6" Body="&lt;p&gt;At the time he wrote that, it would have been literally true.&#xA;Concurrent Pascal, *Pascal, SUE (which I'd like to know more&#xA;about), Modula (not Modula-2), Modula-2, Mesa, Modula-3,&#xA;Euclid, Concurrent Euclid, Turing, Turing+, the Gypsy&#xA;specification language, LIS (another one I'd like to know&#xA;more about), and arguably CLU.  Those are just ones I can&#xA;call to mind.&lt;/p&gt;&#xA;" OwnerUserId="4229" LastActivityDate="2019-04-25T05:19:59.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10826" PostTypeId="2" ParentId="7030" CreationDate="2019-04-25T06:20:24.373" Score="3" Body="&lt;p&gt;There were other hierarchical file systems around.&lt;br&gt;&#xA;The Burroughs operating systems used (and as Unisys, still do) &lt;code&gt;/&lt;/code&gt;&#xA;Although in a someone clunky way:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(PHYS212)ACOUSTICS/RAYS/OUTPUT ON USERPACK&#xA; ^^^^ usercode                    ^^^^^^^ device&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;MS-DOS and Windows also accept &lt;code&gt;/&lt;/code&gt; in file paths, in addition to&#xA;&lt;code&gt;\&lt;/code&gt;.  It is the command language where this does not work;&#xA;system calls are fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EMAS-3 used &lt;code&gt;{username:]{groupname.}*localname{_partname}&lt;/code&gt;&#xA;where username is up to 6 letters and digits and the others&#xA;are up to 11, groups are basically directories except for not&#xA;being files, and parts have to do with &quot;partitioned data sets&quot;&#xA;(think ar(1) archives but usefully nested).&lt;/p&gt;&#xA;" OwnerUserId="4229" LastEditorUserId="357" LastEditDate="2019-04-25T09:21:42.937" LastActivityDate="2019-04-25T09:21:42.937" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10827" PostTypeId="2" ParentId="10822" CreationDate="2019-04-25T06:52:15.713" Score="7" Body="&lt;p&gt;&lt;strong&gt;Short Answer: Yes&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was Ritchie correct, or was he just being modest? As of the date of the quote (1993), were more computer languages descended from Pascal than C?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(*1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, it's not as easy as it sounds, as there is no birth certificate with all parents named. Both languages are Algol descendants. And throughout the 1980s Pascal was seen as the way to go - eventually all the way 'til Ada. So yes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;We are counting languages, not their specific compilers/implementations (e.g. UCSD Pascal, Borland C).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Err. No. This falls short of development. To start with, Pascal in its core definition is a very simple language (much more simple than C) intended for teaching classes about basic programming all the way to compiler building. As a result, it was so simplified that serious work was almost impossible - an elegant language for ivory tower games. It lacked strings, usable file I/O and any form of modularisation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make it usable for real world application, implementation had to enhance it substantially. And as usual, each and every developer had it his way. A UCSD Pascal program could not be compiled with Pascal/MT+ or Microsoft or Turbo Pascal, as all of them handled things differently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If at all, then there is a main line promoted by the two most successful products: UCSD Pascal and Turbo Pascal, with the later being an extension of some sort to UCSD Pascal. The huge success of TP did lead to many other moving toward compatible constructs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heck, and then there are languages called Pascal which are derived from already different named languages, like Component Pascal evolved out of Oberon, which itself is a much improved Pascal child.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, the distinction when it is a 'new' language or not cannot be made by the name.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Turbo Pascal and its incredible wide spread success (even I was tempted to use it) makes a good maker about how much more successful Pascal was in the 80s than C.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Some languages may be descended from both.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is no 'pure' linage anywhere in the language world. To some degree all Algol based languages can as well be described as Pascal offsprings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may even be necessary to look past the syntactic sugar of brackets vs. keywords to realize that Pascal is mainly data driven, as its big step from Algol was the way to define data structures. In so far Ada makes the most 'pure' child of Pascal anyway (*2). Nowadays a feature to be found across basically all general purpose languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But let's try a list of close relatives openly carrying the family tradition:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pascal&lt;/li&gt;&#xA;&lt;li&gt;UCSD Pascal&lt;/li&gt;&#xA;&lt;li&gt;Turbo Pascal&lt;/li&gt;&#xA;&lt;li&gt;Pascal-SC&lt;/li&gt;&#xA;&lt;li&gt;Oberon&lt;/li&gt;&#xA;&lt;li&gt;Modula-2&lt;/li&gt;&#xA;&lt;li&gt;Component-Pascal&lt;/li&gt;&#xA;&lt;li&gt;Delphi&lt;/li&gt;&#xA;&lt;li&gt;Concurrent Pascal&lt;/li&gt;&#xA;&lt;li&gt;Pascal XL&lt;/li&gt;&#xA;&lt;li&gt;Object Pascal&lt;/li&gt;&#xA;&lt;li&gt;Pocket Studio&lt;/li&gt;&#xA;&lt;li&gt;Vector Pascal (available for the PS2 !)&lt;/li&gt;&#xA;&lt;li&gt;MS Pascal&lt;/li&gt;&#xA;&lt;li&gt;Compaq Pascal (notable for type casting)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Besides all the variation two lines are notable. One is the Oberon/Modula development driven by Wirth, the other is the Borland Turbo/Delphi line. Each creating their own family of Pascal offspring sharing features. The later creating a linage looking like this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(Pascal)&lt;/li&gt;&#xA;&lt;li&gt;(UCSD Pascal)&lt;/li&gt;&#xA;&lt;li&gt;Turbo Pascal&lt;/li&gt;&#xA;&lt;li&gt;Borland Pascal&lt;/li&gt;&#xA;&lt;li&gt;Object Pascal&lt;/li&gt;&#xA;&lt;li&gt;Delphi &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Well, and then there are all the languages with a less clear lineage all the way to JavaScript and Ada.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(I doubt such a claim would still be true today.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As before, it depends on the way of counting. I'd say Pascal has still an advantage here :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - It may be noteworthy that Brian Kernighan in contrast offered quite some public (and less than correct) criticism about Pascal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - All the incompatible Pascal variations where the main reasons for the demand that Ada compilers could only be called that way if they adhere to a strict standard ... which eventually delayed Ada compilers way too long to really inherit the Pascal world, making room for C.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2019-04-25T09:47:05.293" LastActivityDate="2019-04-25T09:47:05.293" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="10828" PostTypeId="1" AcceptedAnswerId="10835" CreationDate="2019-04-25T06:53:41.167" Score="60" ViewCount="8150" Body="&lt;p&gt;Thanks to a lot of passionate and skilled people, we can emulate pretty much any retro platform today. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For most people they perform well enough, but in fact, a substantial amount of these emulators are hardly accurate when compared to the original hardware they are trying to emulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While some of them accurately emulate the target platform, it generally comes with a huge performance penalty, making this a never ending quest to perfect emulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My question is the following:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What makes accurate emulation of some old systems a difficult thing, if not impossible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously this is a fairly broad topic with potentially infinite answers, so let me know if and how the question could be improved to be a good fit for the website.&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2019-04-27T18:26:05.667" LastActivityDate="2019-04-30T23:33:59.627" Title="What makes accurate emulation of old systems a difficult task?" Tags="&lt;emulation&gt;" AnswerCount="10" CommentCount="19" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="10829" PostTypeId="2" ParentId="10828" CreationDate="2019-04-25T07:17:15.127" Score="10" Body="&lt;p&gt;In nearly every computer, you have several things going on in parallel, even if it is just code execution on a CPU and screen refresh by the graphics card. In most cases, emulating behaviour of things that happen serially is quite easy, but as soon as you have to synchronize parallel actions, emulation gets difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I once hacked on a gameboy emulator, and one of the performance limiting factors of the video emulation was that games do change video controller parameters during scan-out, e.g. to change the background color between the score bar and the game screen, or change the start offset of the screen scanout to have a fixed score bar above or below a scrolling game screen. This means that in the general case, you have to draw each scanline separately and take in account the current video parameters to scan it correctly, even though the graphics chip works with 8x8 tiles and (if the software would not change parameters) you could generate 8 lines at once with less overhead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In many cases, changing video parameters is actively synchronized in CPU code, either by using a scan-line match interrupt (but possibly not on the game boy, I forgot whether it has a scan-line interrupt) or by polling the &quot;current scanline register&quot;. In these cases, the emulator can provide synchronization by fudging values in the current scanline register to &quot;probe&quot; what value the software is waiting for, or by knowing the first scanline to apply the parameters from the interrupt configuration, but in some cases, programmers just counted CPU cycles, so the emulator needs to know how much scan lines elapsed between the latest synchronization and the current point in time.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2019-04-25T07:17:15.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10830" PostTypeId="2" ParentId="10822" CreationDate="2019-04-25T07:26:37.703" Score="37" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was Ritchie correct, or was he just being modest?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I’m not sure modesty plays a part here; I don’t see any statement of &lt;em&gt;value&lt;/em&gt; attached to the size of a language’s family.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As of the date of the quote (1993), were more computer languages descended from Pascal than C?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, he was correct, at least as phrased in the paper. Perceptions are perhaps biased because people tend to consider Pascal’s family tree v. C’s direct descendants (as the paper suggests itself); the main &lt;em&gt;direct&lt;/em&gt; descendants of C by 1993 are listed in the paper:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Concurrent C&lt;/li&gt;&#xA;&lt;li&gt;Objective C&lt;/li&gt;&#xA;&lt;li&gt;C*&lt;/li&gt;&#xA;&lt;li&gt;C++&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Expanding the search somewhat (see for example &lt;a href=&quot;http://cdn.oreillystatic.com/news/graphics/prog_lang_poster.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;O’Reilly’s language poster&lt;/a&gt; and &lt;a href=&quot;https://www.levenez.com/lang/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Éric Lévénez’ Computer Languages History&lt;/a&gt;), one could add other direct descendants which are arguably very similar to C, although I’m not sure Ritchie was considering them when writing the paper in question:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the C shell&lt;/li&gt;&#xA;&lt;li&gt;AWK&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;By 1993, Pascal had a similar number of &lt;em&gt;direct&lt;/em&gt; descendants (identical in this analysis, but my counts are no doubt partial):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CLU&lt;/li&gt;&#xA;&lt;li&gt;Mesa&lt;/li&gt;&#xA;&lt;li&gt;Modula&lt;/li&gt;&#xA;&lt;li&gt;Ada&lt;/li&gt;&#xA;&lt;li&gt;Object Pascal&lt;/li&gt;&#xA;&lt;li&gt;Concurrent Pascal&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;but in my experience people tend to think of the Pascal “progeny” as including some indirect descendants, in particular the Modula and Oberon families (Modula, Modula-2, Modula-3, Oberon, Oberon-2), and variants of Pascal itself since “core” Pascal wasn’t really usable as-is so developers used platform-specific dialects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you mention yourself, later languages tried to integrate lessons learned from both C-related and Pascal-related languages, and they all derive from Algol anyway. (Pascal itself started off as suggested improvements to Algol X, which weren’t accepted into the language.) Languages where the family trees rejoin include Python and Icon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;reason&lt;/em&gt; Pascal is at the root of a larger family tree hasn’t been evoked yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pascal was designed by Niklaus Wirth, a researcher whose work focused on studying programming itself, including the use of programming languages as teaching tools and structuring tools (for structuring programmers’ minds); programming languages were nearly a side-effect of that research, and Wirth iterated on programming languages multiple times, which led to a profusion of languages and variants. Pascal was widely studied in academic circles, and others also pursued this type of research, leading to more descendants than Wirth himself could produce.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C on the other hand was designed by Dennis Ritchie, as a tool to develop Unix. It wasn’t a research vehicle, and thus didn’t immediately produce the wealth of variants and descendants that Pascal did. It initially spread with its users, not with papers describing it, at least until &lt;em&gt;The C Programming Language&lt;/em&gt; was published (six years after the creation of C).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://github.com/stereobooster/programming-languages-genealogical-tree&quot; rel=&quot;nofollow noreferrer&quot;&gt;programming languages genealogical tree&lt;/a&gt; project includes a nice diagram, and a large list of other resources on the topic.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-04-29T09:34:24.653" LastActivityDate="2019-04-29T09:34:24.653" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="10831" PostTypeId="2" ParentId="10828" CreationDate="2019-04-25T08:11:57.987" Score="22" Body="&lt;p&gt;Almost all computer systems have multiple different devices operating in parallel. For example, the CPU is typically running parallel to the video generation hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be very difficult to emulate accurately, as interactions between different devices require that the emulation of each device proceeds in sync with the rest. Each device may be running on a different clock, and it becomes necessary to accurately emulate things like bus contention and DMA slot allocation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also the issue of simply knowing how the original system actually behaves. Even now emulator developers are still finding new behaviours of classic hardware such as the Amiga and C64. Documentation is usually incomplete and back when those machines were popular developers would experiment with using the hardware in unintended ways, with results that were undocumented and sometimes not even consistent across revisions of the same machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Analogue processes are also very difficult to emulate accurately. For example, the way the Amiga generates sound uses pulse-width modulation and multiple analogue filters. Such systems can be measured and modelled but producing an accurate reproduction digitally is tricky. It gets even worse when you consider systems that had build in speakers or displays, but to sound/look right the properties of those must also be considered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also issues with modern systems that make accurate emulation difficult. Input lag is a major one. Older systems tended to read the keyboard and joystick inputs as simple switches, resulting in very minimal lag. Modern PCs use USB, often with a polling rate of 8ms (the fastest possible for USB1.1). There is also often lag between the PC and the display output, where as older systems had near zero lag between the hardware generating a video signal and it appearing on the monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Monitor refresh rates are also a problem. PC monitors rarely go below 60Hz and graphics cards rarely offer arbitrary refresh rates. Most older machines were either 50Hz (PAL/SECAM) or 59.94Hz (NTSC) so there is a mismatch between one emulated frame and one frame displayed on the host PC. Arcade systems often had odd frame rates such as 57.5Hz too, which even analogue TVs and monitors tend to struggle with.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-04-25T08:11:57.987" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10832" PostTypeId="2" ParentId="10809" CreationDate="2019-04-25T09:29:57.077" Score="1" Body="&lt;p&gt;Another issue that hasn't been mentioned was screen control, the CP/M equivalent of curses, if you will.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Different systems had different ways of moving the cursor around the screen, either by escape sequences sent out through BDOS console output, or directly banging the display controller and screen memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By and large, the solution to this was the same for any program that wanted direct cursor control: have some sort of patch that you applied to the program for your particular system.  However the problem was worse than the disk drive issue, since it was an O(N M) problem: N programs being patched for M different systems required N*M patches.  For the most part, each patch mechanic was typically specific to a single vendor, and therefor only applicable to a few programs, possibly one in the worst &#xA;case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm as guilty as the next team, in that the two programs I wrote that needed direct screen access (and in one case modem access), used a custom patch system that I dreamed up.  That was used, of course, by nobody else. :(&lt;/p&gt;&#xA;" OwnerUserId="5272" LastActivityDate="2019-04-25T09:29:57.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10833" PostTypeId="2" ParentId="605" CreationDate="2019-04-25T10:38:04.837" Score="1" Body="&lt;p&gt;Free Pascal seems to have &lt;a href=&quot;http://wiki.freepascal.org/Amiga&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga  Motorola 68K support&lt;/a&gt; both as a native compiler and as a cross-compiler.&lt;/p&gt;&#xA;" OwnerUserId="8378" LastActivityDate="2019-04-25T10:38:04.837" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10834" PostTypeId="2" ParentId="10828" CreationDate="2019-04-25T10:48:55.493" Score="10" Body="&lt;p&gt;There has been a drift in the goals of video game emulators over the past decade or two. At first, getting emulated software to run at all was a major success, and was often done with simplified kludges and hacks. As the resources available to emulators has improved, the focus has moved more toward accurate reconstruction of what the original does. But why is that difficult to do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, if software was written to follow a standard API and use documented system calls at all times, things would be fairly straightforward: just design a modern implementation of that API, and everything should work fine. But that's clearly not the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes these standardised interfaces don't meet the needs of programmers. Perhaps the functionality they want isn't provided (e.g. the PC BIOS's primitive graphics handling routines). Or maybe the &quot;official&quot; method is too slow for you, and you need to get the very fastest performance possible. This is often the case with computer games, which are of course the type of software that is most popular, emulation-wise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point, the programmer would typically bypass the API, and address the hardware directly itself. And this is where the problems start.* As by trial and error programmers will find, use, and rely on hardware behaviour that may not have been intended or known of by the system's designers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To accurately emulate a piece of hardware (for example a graphics processor or I/O chip) you need to know what it does, and how it does it. If you're using an off-the-shelf component, such as a 6522 VIA (I/O chip), then there will be some public documentation available. But if the programmer has found some undocumented functionality (or the system designer has written the operating system according to how the physical hardware behaves, and not documented it exhaustively themselves) then there's no easy way for emulator writers to know how the game+system actually works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One approach is to use a black-box method. You give some input to a physical system, and see what output you get. But that's limited to your ability to think of all possible relevant situations, and going off to test them all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another is to open the chip up (a process known as decapping) and photograph the transistors on the die, layer by layer. If you use these images to reconstruct the &quot;circuit diagram&quot; of the chip, you could manufacture your own duplicate chip, or simulate it in software. The resources required to decap a chip are significant, as you need to shave off tiny layers of the packaging, or use acids to eat away at it, before using a specialist camera to photograph the tiny die at high resolution. And once that's done, you have a jigsaw that consists of thousands upon thousands (or even millions) of transistors that need to be traced out and joined up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you know the exact structure of the chip you're trying to emulate, you then need to simulate the behaviour of every transistor in the chip. And, depending on the accuracy you're trying to achieve, you might eventually be attempting to simulate the behaviour of electrons themselves. At this small scale, we're into the territory of quantum behaviour, too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At which point the question rises: how accurate do you want your emulator to be?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*These problems affect backward compatibility as well as emulation. If you write code that bypasses the OS and addresses the sound chip directly, then it may not work if the manufacturer uses a different sound chip in the next model, or simply moves it to a different memory location.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-04-25T10:48:55.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10835" PostTypeId="2" ParentId="10828" CreationDate="2019-04-25T11:07:09.143" Score="87" Body="&lt;p&gt;Speaking from my personal experience of writing a PET emulator, a C64 emulator and a Sinclair Spectrum emulator,, here are the issues I had:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Getting the Speed Right&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It's no good just making a processor go as fast as it can because, frequently, application code depends on timing. For old 8-bit machines, it's easy to write an emulator that runs at many times the speed of the original. The trouble is that has a knock on effect. For example, the PET Space Invaders program goes way too fast to be playable. Not that it matters because its key scanning code is similarly speeded up which means when you press a key, your gun is uncontrollable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same issue applies to the C64. The interrupt is driven by one of the IO chips which needs to be synchronised to the CPU's clock. This means pressing a key for even a brief time is the same as pressing it for several seconds on a real C64. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you need to throttle the performance to something like the original speed. Unfortunately, that means having a clock with microsecond accuracy. Such things do not really exist in modern general purpose PC operating systems. Your CPU thread just has to be scheduled out of the processor and it will miss several microseconds probably. One way to get around this is to raise some event every 1/60th of a second (the probable refresh rate of your monitor and handily NTSC TVs) and when the CPU has executed 1/60th of a second's worth of instructions, just make it wait until the event occurs. Unfortunately, that makes doing sound on a PET or a Spectrum difficult because they both rely on the CPU toggling bits in IO registers at the right frequency. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Parallelism&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In a real computer, there are several components that all operate concurrently. For example, the C64 has a VIC II chip for the display, a sound chip, some IO chips ands a 6510 and they are all synchronised by the same clock. The easiest way to deal with this is to have a loop in which you execute an instruction in the CPU and then update all the other components with the new clock time. Unfortunately, this is by nature serial and you have to be careful about do complex stuff in case it makes your emulation too slow. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative is to put each component in its own thread, taking advantage of the multiple cores of modern computers, but then you have the problem of synchronisation. All of your components will need to access your emulation of the memory bus and they all need an access to the same copy. So, you might emulate the clock with a boolean that is toggled every 0.5 microseconds (in emulation time, see above) by the CPU. Unfortunately, modern processor cores have caches between themselves and the main memory. If the thread emulating the CPU core toggles a boolean representing the clock, it may only actually be altering the cached version of that variable and the other components won't see it. There are OS functions that allow you to force the cached version of a variable to main memory, but they incur a significant performance penalty. It's about 100 times slower to access main memory than L1 cache.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Documentation&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Documentation for old computers can be quite hard to find and may not be detailed enough for constructing an accurate emulator. For example, if you want an accurate Z80 emulation, you need to understand that there is an undocumented &quot;w&quot; register which affects the behaviour of some of the undocumented Z80 instructions. In theory you don't need to care about those, but in practice, some popular game might have used them. The behaviour of the W register has been painstakingly reverse engineered by enthusiasts, but sometimes they get it wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other problem with old documentation is that it frequently contains errors. A popular book on the 6502 was the &lt;a href=&quot;https://www.amazon.co.uk/Programming-6502-Rodnay-Zaks/dp/0895880466&quot; rel=&quot;noreferrer&quot;&gt;Zaks book, Programming the 6502&lt;/a&gt;. I remember that my Dad's copy of it was festooned with hand written annotations correcting all the errors that he discovered by bitter experience. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Graphics&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Getting the graphics right is pretty hard. I started by just taking a dump of the graphics memory every 1/60th of a second and drawing it in a window. I progressed to doing that in the GPU but it is still not right. C64 programmers were adept at changing the graphics mode on the fly so they could use mixed modes on the screen. Even the Spectrum effect of the rapidly moving stripes in the border when the tape is loading is done by rapid changes to the background colour. You can't just snapshot the state and render it every 60th of a second, you effectively have to know the state at the end of every scan line on the VDU and, in fact, on the C64 I believe it was possible to split the screen vertically by carefully timed mode changes during a scan line. I haven't solved that yet.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Sound&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Timing is actually more important as far as sound is concerned than graphics. A film is projected at 24 frames per second and our brains easily fill in the gaps. Try something similar with sound and you'll soon notice. For this reason, a haven't even attempted to emulate sound on the PET or the Spectrum. The C64 should be easier because it had a sound chip that you sent commands to rather than having to toggle an output wire very fast, but I haven't done that bit yet.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Development Tools&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You'll need to create test programs for your emulation which means having a development suite. I was lucky in that Z80 and 6502 are both relatively well supported. Other architectures are not so fortunate. Not finding a good toolchain for 68000 stopped me from bothering with that architecture.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Responses to Comments&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I woke up this morning and mistook the number of comments I had as my accumulated overnight score. (I nearly fell off my chair when I saw what my actual score was, thank you.) There are many points to answer which I don't feel I can do in the comments easily, so I will put my answers here.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I feel [your answer] understates how big of an issue parallelism is ~ Austin Hemmelgarn&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes it does. But I have so far only attempted to write emulators from systems from the 80's which tend to be slow by today's standards and also very simple. Thus, you can get away with serialising a lot of the parallel components and, in fact, that might be desirable given that running too fast is often too fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ironically, I have found that components that run off different clocks are sometimes easier to work with because the protocols between them cannot rely on clock synchronisation, so there is usually some hand shaking mechanism that means they don't rely on absolute timings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a simple example that expands on Luaan's reply, the PET interrupt is driven by the vertical sync of the monitor (or it appears to be), so I simply had a task triggered by the actual monitor refresh which is 60 per second that raises an interrupt. This meant that the keyboard scanned at the right speed and the cursor blinked at the right speed even though the CPU was running at about 80MHz. By contrast, on the C64, the same interrupt is driven by a timer in one of the IO chips which itself is driven from the CPU clock, which means it looks like the C64 runs ridiculously fast.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This is only true if you decide to suspend your thread. And you actually miss somewhere around 1 millisecond which makes thread sleeping very undesirable for game dev in general. You can create your desired delay without releasing the thread. This allows you to get microsecond precision. ~~ Chris Rollins&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;On a modern general purpose PC, you have no choice about when your threads get suspended. My laptop has 8 cores and 16 hyperthreads, but there are way more threads than that running on it at any one time. Most are suspended, at any one time, but it's quite possible for the emulated CPU thread to be pre-emptively suspended at periods of high load without you doing anything. Furthermore, in order to time things at the microsecond level, you need a microsecond accurate clock. Note: precision is not accuracy. My laptop has a nanosecond precision clock, but it would be a stretch to assume you can measure time periods accurately to the nanosecond with it. For one thing, it requires a system call and system calls are relatively expensive and also lay you open to rescheduling your thread. Your milage mat vary depending on your operating system.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Don't modern sound cards buffer sound data so you don't have to bit-bang them? ~ snips n snails&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I had thought of counting the number of toggles in a certain period and counting the CPU clock cycles to get a frequency to send to the sound card, but I don't know enough about programming modern sound cards to say if that is reasonable or would give good fidelity. I guess you actually don't need it for a Spectrum or a PET :) . Having just read the next comment by Ilmari Karonen, this is the same approach. I think you'd need a shorter period than a frame (I assume you mean a video frame).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Without a barrier, your later loads don't wait for your earlier stores to be visible to other threads, ~ Peter Cordes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes I admit I was running fast and loose with the actual mechanics of cache and memory synchronisation in the interests of brevity. The point is that ensuring correct sequencing of memory updates requires special expensive synchronisations like memory barriers. This is over and above the penalty of going to main memory relative to the cache.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2019-04-26T10:02:52.333" LastActivityDate="2019-04-26T10:02:52.333" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="10836" PostTypeId="1" AcceptedAnswerId="10837" CreationDate="2019-04-25T12:35:58.493" Score="5" ViewCount="448" Body="&lt;p&gt;I'm trying to find the name of a game that I played in the mid-to-late 1990's. Here's what I remember about it:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What I played was a demo version, that came on a CD along a bunch of other demos. They were all Windows DirectX games, and the disk seemed to be part of Microsoft's push to get people to consider Windows &quot;the ultimate gaming platform&quot;. I assume it must have been for Windows 95 or Windows 98, as they were trying to get DirectX to be a thing. I don't know where I got the CD from, but it probably came with a magazine or something. I think there was a 3-D space that one walked around in to select what game demo to play.&lt;/li&gt;&#xA;&lt;li&gt;In this game, you were the manager/owner of a manufacturing factory. You needed to buy machines that could change raw materials into finished goods, and hire workers to operate the machines. You could also hire workers to do other jobs, like sales and marketing.&lt;/li&gt;&#xA;&lt;li&gt;There were a lot of possible raw materials, finished goods, and machine options. Part of the challenge was to look at &quot;the market&quot; and figure out what products made the most sense to try to produce.&lt;/li&gt;&#xA;&lt;li&gt;The machines and workers needed to be physically laid out on the factory floor. It was an overhead view. (I'm guessing it was probably isometric.) When you &quot;ran&quot; the factory for day, you would see the workers running around and putting things in and taking things out of the machines.&lt;/li&gt;&#xA;&lt;li&gt;If you failed to mark certain areas, like near the inputs of machines, with &quot;warning area&quot; yellow, then the workers would be much more likely to get mangled by the machines, which cost a lot of money and was generally a bad thing. There were other areas that needed to be marked too, like a place to store incoming and outgoing product.&lt;/li&gt;&#xA;&lt;li&gt;There were options of how much money to start the game with, with there being a smaller amount of money from something like an inheritance, to a larger amount of money but it was a loan that needed to be paid back.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm curious about the demo as a whole and other things on it, if you happen to know what demo disk I'm talking about, but for now I'm really just looking for the name of this specific game that was on it. (Though if there's a legal source to buy the demo or the full game still, I'd be interested in knowing that, too.)&lt;/p&gt;&#xA;" OwnerDisplayName="user616" LastActivityDate="2019-04-25T12:51:52.883" Title="Identify Windows DirectX game about building a manufacturing business" Tags="&lt;gaming&gt;&lt;identify-this-game&gt;&lt;windows-98&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10837" PostTypeId="2" ParentId="10836" CreationDate="2019-04-25T12:51:52.883" Score="6" Body="&lt;p&gt;This sounds like &lt;a href=&quot;https://www.mobygames.com/game/windows/free-enterprise&quot; rel=&quot;noreferrer&quot;&gt;Free Enterprise&lt;/a&gt;, which is included as a demo on &lt;a href=&quot;https://www.mobygames.com/game/windows/games-sampler-2-for-windows-95&quot; rel=&quot;noreferrer&quot;&gt;the Games Sampler 2 for Windows 95&lt;/a&gt; CD which Microsoft published in 1996. The CD has a menu where you walk around a spaceship, and the game demos are featured on pedestals which allow you to launch them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The demo CD is &lt;a href=&quot;https://archive.org/details/GamesSampler2ForWindows95Version2&quot; rel=&quot;noreferrer&quot;&gt;available on the Internet Archive&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-04-25T12:51:52.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10838" PostTypeId="2" ParentId="10828" CreationDate="2019-04-25T16:09:17.903" Score="31" Body="&lt;p&gt;The best description of this problem that I've seen was &lt;a href=&quot;https://arstechnica.com/gaming/2011/08/accuracy-takes-power-one-mans-3ghz-quest-to-build-a-perfect-snes-emulator/&quot; rel=&quot;nofollow noreferrer&quot;&gt;written by Byuu&lt;/a&gt;, one of the developers of the bsnes emulator.  That's about as authoritative as they come, but I'll try to summarize it here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern software development is a completely different world than retro consoles.  There were no reusable game engines or manufacturer-provided APIs.   Everything was written from complete scratch and ran on the bare metal.  The code was deeply tied into the raw hardware, including aspects of the hardware that were unintentional.  The article has an example of a game that relied on the SNES processor's unusual behavior on a rare edge case.  If that edge case is not perfectly emulated or if the timing is even slightly off, then the game deadlocks.  Consoles frequently had multiple chips inside (CPU, audio processor, graphics, etc) that all ran at different speeds.  Emulators have to emulate all of these precisely, down to the &lt;em&gt;exact&lt;/em&gt; delays required for one part of the hardware to send a result back to another.  Not doing it exactly right can result in audio and video getting out of sync, graphics being drawn during the wrong frame, etc.  The only way to accurately emulate timing at that level of detail is to run significantly faster than the original hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cartridge-based games frequently made this problem worse.  The cartridge or disk for a modern game is merely some sort of memory containing software.  Retro game cartridges frequently contained additional hardware as well, anything from extra graphics accelerators to memory mappers.  These have to be emulated in order for the software to work, and many of these have no publicly-available documentation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consoles in general have hardware architectures that can be very different than a traditional computer.  While this isn't exactly a &quot;retro&quot; console, the Dolphin emulator (Wii/Gamecube) had a significant problem rendering graphics correctly due to such a difference.  They wrote up a &lt;a href=&quot;https://dolphin-emu.org/blog/2017/07/30/ubershaders/&quot; rel=&quot;nofollow noreferrer&quot;&gt;long but good blog post&lt;/a&gt; outlining their problems and solution.  Essentially, the Gamecube had a fixed hardware configuration, so developers could pre-compile parts of the rendering code that ran on the GPU.  In the emulator, they had to compile this rendering code on the fly based on the GPU that was in that particular system.  It took several years of work by subject-matter experts to figure out how to do that in real-time without stuttering or missing textures.  It's a bunch of additional work that emulators have to do but consoles don't, simply because consoles have a fixed, consistent configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some games also took advantage of the way that old CRT screens drew images.  They would do things like modify the registers that controlled graphics output while in the middle of painting a scanline on the screen, in order to create specific visual effects.  These visual effects either don't work at all on modern LCD screens or produce very different results unless the emulation engine can detect what the code is trying to do and compensate for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I encourage you to read the articles because I'm giving a bad summary but the TL;DR version is this: most emulators focus on the &quot;ideal&quot; hardware behavior, and most games will run &quot;good enough&quot; to be basically playable.  You'll also suffer from hundreds of obscure bugs.  The only way to make all games playable the exact same way that they played on real hardware is to emulate the inner workings of every single undocumented, proprietary chip in the console, quirks and bugs included.  And that's really, really hard.&lt;/p&gt;&#xA;" OwnerUserId="13431" LastEditorUserId="13431" LastEditDate="2019-04-30T23:33:59.627" LastActivityDate="2019-04-30T23:33:59.627" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="10839" PostTypeId="2" ParentId="10828" CreationDate="2019-04-25T16:13:38.947" Score="6" Body="&lt;p&gt;Aside from the great points made previously, emulating on anything but dedicated hardware runs into real-time OS issues. All current consumer operating systems do not operate in strict real time: your tasks get access to resources as the OS sees fit. This is usually fairly prompt, but sometimes the OS might cause a glitch while it's busy doing something else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering some retrogamers avoid LCD monitors as they have (apparently) have a noticeable latency, OS-induced timing issues can be a major issue.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-04-25T16:13:38.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10840" PostTypeId="2" ParentId="10828" CreationDate="2019-04-25T17:38:36.590" Score="4" Body="&lt;p&gt;Usually, it's how things should work ideally in digital domain, and how they work in the real physical world of analog domain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, take the SID audio chip from Commodore 64. It has reasonable documentation how it works, and people have been reverse-engineering how it produces sound so we should be able to write a model of it that runs in a FPGA that runs exactly like the original chip would, clock cycle by clock cycle. Or write matching program that runs in a computer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But that is only the digital logic portion, and audio signals are converted from digital bits to analog voltages inside the chip, and that is by no means an ideal process. It gets noise from nearby signals and may have non-linear distortion. Analog signals have limited speed when transitioning from one voltage to another. The SID chip even has analog filters built in, and external capacitors are needed to set filter operating parameters. The chips can have large manufacturing tolerances in their parameters, and for example the digital control of analogue filter is said to vary a lot, and while documentation says it is linear, it may actually be logarithmic control, and the range may vary just due to chip manufacturing tolerances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if the digital chip runs at (approximately) 1MHz clock, the emulation of the analog signal chain inside and outside the chip properly may require much smaller timescale for good results, so it requires faster computer to emulate that. Even if the analog audio would be emulated at the (approximately) 1MHz clock, it is still necessary to convert it to for example 48kHz for playback on your computer. There are various ways to do the resampling, for example just skipping samples would work very fast but would sound awful. The theoretically correct way to do it would be too slow. As it is always a tradeoff, some simplifications may be necessary to have a balance between not too slow and not too bad sounding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that is only audio chip. Imagine emulating a chip that outputs analog video. The problem is much more undefined, as sometimes it is not only what the video chip outputs, but how a color TV would actually decode the colors from it, so the problem is more like what you would see on a color TV when fed with the generated signal. Best example is how to show about 4000 artifact colors on an NTSC TV, from a composite output signal generated with CGA video adapter having max 16 colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When computer speeds become faster and GPU acceleration can be used, maybe we can skip all that and stop thinking how to emulate some logic that is on a silicon die, maybe we can just scan the structures on silicon and do a purely electrical simulation on the semiconductor structures, so we don't have to know what it is that we are emulating, but it would just work.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-04-25T17:38:36.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10841" PostTypeId="2" ParentId="10828" CreationDate="2019-04-25T19:24:56.477" Score="19" Body="&lt;p&gt;I'm the author of an emulator of a whole bunch of platforms, so I'm going to go ahead and commit a heresy: accurate emulation of old systems isn't a difficult task. It's just an expensive one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;It's expensive in terms of processing.&lt;/strong&gt; Which means that a lot of the more historical emulators make conscious approximations in order to hit their performance budgets. These usually involve making things falsely atomic — e.g. implementing a processor as something that (i) performs an instruction instantaneously; and then (ii) time warps to where it should have been had it spent time doing the processing. This is the sort of thing that has visible side effects as soon as there are any other chips in the system that work as a function of time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trivial example: a 6502 read-modify-write cycle is likely to: (i) read the value to mutate; (ii) write it back again, without modification (while the processor is working on the real result); then (iii) write it back modified.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Supposing you were doing something like mutating a video display processor's status register then the fact that there's a rewrite of the original value, and then the meaningful write doesn't occur until two cycles after the read might be important. So if you're not genuinely serialising bus interactions then you're likely to be in trouble.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term is primarily marketing puff but this is the sort of thing that scenesters refer to as 'cycle accuracy'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can optimise a large part of it away but usually only by introducing substantial coupling within your code — e.g. by having the processor know what's in different places in the memory map, exactly like real processors don't, and possibly having it communicate via a bunch of winks and nods. So then the cost is on maintainability and future code scalability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;It's expensive in terms of development.&lt;/strong&gt; Not just initial, but subsequent. This partly cuts to the serialisation point that others have made: how do you make it look as though multiple components are executing at the same time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the most trivial case, you just implement them as coroutines and round robin between them. In the olden days you might use a very loose precision for that scheduler. Nowadays you might use whatever is the machine's necessary minimum unit of time. This is how you end up at a really slow emulator: quite a lot of time is spent on the scheduling itself, since it happens frequently, and you're trashing your machine's caches by jumping around between sections of code and their working data sets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are threading solutions but it's a judgment call which is appropriate in which situation, and they're not necessarily pleasant on your host CPU as spin locks tend to be the order of the day. Alternatively you can schedule optimistically, assuming component isolation, and just repeat work if you were wrong, but then you've got to get into the weeds of full state preservation for potential restoration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tend towards sequence points, i.e. identifying when it's predictable that two components can without any inaccuracy accruing run in isolation for a period, and then letting them do so, but then that prediction mechanism is a whole extra chunk of code that you need to spend a decent amount of time working on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Historically it was expensive in terms of research.&lt;/strong&gt; This cuts to the topics raised by others of figuring out exactly what components are really doing before you can implement them, which tends to differ from the documented behaviour. But for most things that the modern processing budget permits to be low-level emulated you're now talking twenty or thirty years of enthusiasts poking at them and documenting their findings. So a lot of this was difficult work, but it's difficult work that the rest of us can just parasitically consume.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-04-25T19:24:56.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10842" PostTypeId="2" ParentId="99" CreationDate="2019-04-25T20:02:10.797" Score="3" Body="&lt;p&gt;I'm going to contend that that PERQ 1 beat the Xerox Star to market.  The PERQ 1 was very much inspired by the Xerox Alto and its successors. There is a detailed history of the PERQ 1 and its relationship with ICL and the British Science and Engineering Research Council &lt;a href=&quot;http://www.chilton-computing.org.uk/acd/sus/perq_history/overview.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here. &lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on that source, the PERQ was announced in 1979, launched in April 1980, and delivered, in fall of 1980, thus beating Xerox, Apollo, Sun, and of course Apple to the market.  When delivered it already had a windowing system and presumably a WIMP interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PERQ 1 base configuration &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A 1 MIP microprogrammed 16-bit processor with Pascal P-Codes as the order code.&lt;/li&gt;&#xA;&lt;li&gt;256 Kbytes of memory.&lt;/li&gt;&#xA;&lt;li&gt;12 Mbyte disc.&lt;/li&gt;&#xA;&lt;li&gt;768 × 1024 bit map display.&lt;/li&gt;&#xA;&lt;li&gt;Keyboard, RS-232 interface, IEEE-488 GPIB.&lt;/li&gt;&#xA;&lt;li&gt;Graphics tablet.&lt;/li&gt;&#xA;&lt;li&gt;Cost between 20,000 US dollars and 20,000 British pounds.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The image below is from August of 1980. Shortly before the first deliveries.  (For younger readers, the object on the left is an ashtray.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rsT4M.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rsT4M.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here we see the system box too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pO9KL.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pO9KL.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8226" LastEditorUserId="8226" LastEditDate="2019-04-25T20:21:03.277" LastActivityDate="2019-04-25T20:21:03.277" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10843" PostTypeId="1" AcceptedAnswerId="10844" CreationDate="2019-04-25T22:08:31.190" Score="10" ViewCount="654" Body="&lt;p&gt;Free software, sometimes including source, has been a common feature of computing for as long as I can remember, and probably longer. But the terminology and &quot;legalese&quot; seemed to change at some point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the 1980s and early '90s, free-to-use-or-modify software was often released as &quot;&lt;strong&gt;Public Domain&lt;/strong&gt;&quot;. It basically means the author gave up all copyright. The modern term &quot;Open Source&quot; was not used back then, to my knowledge, nor do Open Source authors truly give up copyright.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;When and why did the common practice of releasing software into the &quot;Public Domain&quot; end&lt;/strong&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;NOTE:&lt;/em&gt; I'm not claiming that Public Domain has &quot;disappeared&quot;. Just that a tiny fraction of modern free software uses that approach, and the term has almost completely fallen out of favor.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-04-26T15:46:39.727" LastActivityDate="2019-05-03T20:25:14.760" Title="When and why did &quot;Public Domain&quot; software releases give way to &quot;Open Source&quot;?" Tags="&lt;licensing&gt;" AnswerCount="7" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10844" PostTypeId="2" ParentId="10843" CreationDate="2019-04-25T23:02:31.423" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But the terminology and &quot;legalese&quot; changed at some point.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Terminology, as used by the general public, yes, legalese no.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In the 1980s or early '90s, free-to-use-and-modify software was referred to as &quot;Public Domain&quot;. It basically means the author gave up all copyright. The modern term &quot;Open Source&quot; was not used back then, to my knowledge.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, yes, err, this is a mixup of different concepts. Public Domain and Open Source are neither the same nor interchangeable. In fact, they are in some variants the exact opposite. And your question feels as if you also mix in the idea of Copyleft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So let's first look at the items before answering the historic part.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Public_domain&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Public Domain&lt;/strong&gt;&lt;/a&gt; is a basically US legal term (though similar concepts are in many legal systems), describing that some piece of work is free from any rights and can be used without any restriction. (Software-) Items in the Public Domain do not have to be available in source. They can as well be just binary.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In addition, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Free_software&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Free Software&lt;/strong&gt;&lt;/a&gt; mentioned is again none (or any) of the above. &quot;Free&quot; is not an in-itself defined term here, but more of a concept - one easily misunderstood, as it's about freedom to use, not free as in free beer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Open_source&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Open Source&lt;/strong&gt;&lt;/a&gt; at the core just describes the fact that the source code of an application is available. It can be available to everyone or just for a restricted user group. It doesn't have to be free at all. In fact, GPLed Source isn't free, its protected by freedom restrictions. Then again, it's also a name coined to remove the ambiguity of 'Free'.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Copyleft&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Copyleft&lt;/strong&gt;&lt;/a&gt; is the idea to use the copyright system to keep (software-) items open and return every change made back to the public. Copyleft is the exact opposite of public domain. &lt;a href=&quot;https://en.wikipedia.org/wiki/GNU_General_Public_License&quot; rel=&quot;nofollow noreferrer&quot;&gt;GPL&lt;/a&gt; is eventually the best known variation. It only works because the item licensed via GPL is &lt;em&gt;not&lt;/em&gt; in the public domain (*1).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Terminology is of course changing, especially when some area is new and in rapid development - do I hear software? In the beginning people tend to use well known terms, and &quot;Public Domain&quot; is one such. Programmers with no intention to sell put their works out into the Public Domain, binary only as well as some including source code - if the language used even made this difference at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Giving a work into Public Domain means giving up &lt;em&gt;all&lt;/em&gt; rights. So others can take this, modify it (or not at all), and resell the result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not everyone wanted to give up all rights, so the idea of various kinds of &lt;strong&gt;Free Software&lt;/strong&gt; were conceived.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some (aka &lt;a href=&quot;https://en.wikipedia.org/wiki/Richard_Stallman&quot; rel=&quot;nofollow noreferrer&quot;&gt;RMS&lt;/a&gt;) wanted to take that even a step further to secure freedom of use by using the copyright system to protect this freedom. Thus &lt;strong&gt;Copyleft&lt;/strong&gt; was born - and GPL is the prime license to protect Free Software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the basic idea did gain a strong following, the term 'Free' was way too easily misunderstood - and also repelling to any commercial/professional usage. So the &lt;strong&gt;Open Source&lt;/strong&gt; term was used by people promoting professional use. A term RMS fought, as it allows others to use it without guaranteeing the freedoms he envisioned. (*2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These fights over the right naming were quite active during the late 90s into the mid naughties, when most settled for &lt;a href=&quot;https://en.wikipedia.org/wiki/Free_and_open-source_software&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;FOSS (Free Open Source Software)&lt;/strong&gt;&lt;/a&gt; as compromise. Somewhen in the 10s this got extended to &lt;strong&gt;FLOSS (Free/Libre OSS)&lt;/strong&gt; to make it even more clear that it's about freedom, not free beer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The good side of this fight was that OSS is now a term not only known by some insiders, but known and used by a majority of developers and distributors and anyone reporting about such. As a result OS(S) has reached the general public, far beyond the usual circles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Well, and amidst all of this is the common man with his need to use a term describing what he wants, a term that can easily be used and understood. Not an easy task, as reading the fine print is still an issue.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using OSS might as well be just an intermediate step (*3). &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The usage of copyright to protect Copyleft results in a great twist: When the copyright expires, it will move into the public domain. I really would love to see what's happening then. But thanks to Mickey Mouse this day may never happen - or at least so far in the future that I won't live to see it :(&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Notably, &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft&quot; rel=&quot;nofollow noreferrer&quot;&gt;MS&lt;/a&gt; with various initiatives to 'open their sources' without giving real freedom to modify and redistribute.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Hopefully one where the crap about &lt;a href=&quot;https://en.wikipedia.org/wiki/Intellectual_property&quot; rel=&quot;nofollow noreferrer&quot;&gt;IP&lt;/a&gt; gets removed as a whole -&lt;br&gt;&#xA;&lt;em&gt;You may say I'm a dreamer, but I'm not the only one, I hope someday you will join us, and the world will be as one.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2019-05-03T20:25:14.760" LastActivityDate="2019-05-03T20:25:14.760" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="10845" PostTypeId="2" ParentId="10843" CreationDate="2019-04-25T23:02:32.070" Score="2" Body="&lt;p&gt;The TL;DR answer is that they've co-existed for as long as home/micro computers have been around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Open Source software is a comparatively modern term - the Open Source Initiative (OSI) was founded in 1998 - but the principles of delivering software along with the source code under a permissive licence date back much earlier. The CTSS operating system, developed at MIT in the early 1960s, the GNU Project from 1983, and the Free Software Foundation (FSF) from 1985 would be some obvious examples. Still, if you want a date when the big switch started to happen, 1998 is it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Public Domain, on the other hand, was a well established term in copyright law prior to the development of the first electronic home computers. And yes, it means you give up all rights. There's still much PD software made, but the general opinion is that it's better to retain copyright and go with a permissive license for collaborative projects if you want them to keep going beyond the original creator's direct involvement.&lt;/p&gt;&#xA;" OwnerUserId="12147" LastActivityDate="2019-04-25T23:02:32.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10847" PostTypeId="2" ParentId="10843" CreationDate="2019-04-26T03:38:13.703" Score="7" Body="&lt;p&gt;I don't think there actually been any big move from public domain software to open source software, as these terms are actually defined.  Instead it's just become much less common to use the term public domain inappropriately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The terms &quot;public domain&quot; and &quot;open source&quot; mean two different things with little overlap between the two. Public domain means that no one owns the copyright on a work, and can be applied to any kind of work, whether a computer program, book or a sculpture. Open source means that the source code for a computer program is freely available under permissive terms. Open source don't imply public domain, and in practice almost never is. Public domain software is often open source, but not necessarily so(*).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software that is both in public domain and open source has been rare for a long time now.   Back in 1991 when I released mytinfo as a source code distribution and put it in the public domain, I was doing something well outside the norm. Most what we would now call open source software released back then had some sort of copyright notice. While the GPL (Gnu Public License) was still uncommon outside of FSF projects, simple notices asserting copyright while permitting copying under certain conditions were very common. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think what has changed that is people are no longer using the term public domain incorrectly to refer to any software that they can obtain legally without paying for it.  Back in the mid-to-late 80's and 90's you'd often see both closed source shareware, like PKZIP, and open source software, like GCC, being called public domain by people who only cared that it was free (as in beer). The amount of actual public domain software in common use back then was pretty small. The most popular public domain software I can think of from that era were the original versions of rz and sz, which implemented the ZMODEM protocol. They were only in the public domain because they were originally created for the US government. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days public domain software has only become even more rare, while in comparison the term open source is better known and much better understood. There really isn't as much opportunity to mistakenly call open source software &quot;public domain&quot; if it actually isn't.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(*) for example, my mymc utility is in the public domain, but I haven't released the C++ part of the source code. The Python part is freely available and implements almost all its functionality, but it was released just so people could use it on Linux.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2019-04-26T03:38:13.703" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="10848" PostTypeId="2" ParentId="10828" CreationDate="2019-04-26T08:17:52.630" Score="6" Body="&lt;p&gt;I wrote my own ZX Spectrum emulator with machine cycle level code timing and 100% ZEXALL pass so here some insights:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Undefined behavior&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;back in the days there where no sophisticated compilers out there like we have now. They just compiled your code into binary ... So there where a lot of hidden bugs in the code even if the program worked fine that nowadays compilers would complain about right away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still remember my surprise while porting my old code to newer compilers and suddenly see the bugs inside hidden for decades ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of all this the ICs used have undefined behavior too. Like the instruction decoders have empty entries, certain settings lead to different results that are not described by the datasheet etc ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;once these two combined suddenly programs perfectly working on native platform are glitching on emulation that upholds the standard to 100%&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to remedy that we need to emulate also the undefined stuff properly which is hard as it usually need to remember previous states of the HW (like undefined CPU flags, certain memory locations etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the stuff is undefined we need to research it first on real HW and that usually takes years...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This leads to related stuff/issues like:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;floating bus&lt;/li&gt;&#xA;&lt;li&gt;undefined flags&lt;/li&gt;&#xA;&lt;li&gt;undefined instructions&lt;/li&gt;&#xA;&lt;li&gt;timing glitches&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Timing&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest and fastest way to properly scale the emulation speed is clock tics and is used by most emulators. But this makes a big problems emulating stuff like:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IC interconnection&lt;/li&gt;&#xA;&lt;li&gt;parallelism&lt;/li&gt;&#xA;&lt;li&gt;sharing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It usually boils down to a common therm: &lt;strong&gt;contention&lt;/strong&gt;. With clock tics the emulation has absolutely no correlation with contention and you need to emulate it by hard-coded tables usually on per instruction manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also other methods of scaling time. I am using machine cycle level timing which means my instructions are divided to basic CPU operations like read memory, read IO, write memory ... just like the native CPU would do. This solves a lot of contention problems on its own as the emulation have the state of the buses in the specific times instead of just output of the instruction... However such timing is much slower as it have bigger overhead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more info see &lt;a href=&quot;https://stackoverflow.com/a/33317202/2521214&quot;&gt;Question about cycle counting accuracy when emulating a CPU&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;HW quality&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;most emulators fake peripherials by cheap hacks. For example Screen is an image, but on old system they would be displayed on a CRT and there where many effects that exploit that like doubling the y resolution etc ... The same goes for video signal generation If not emulated properly (handled as just a frame instead) the output would be not correct and many effect would not work as should (you know border effects,noise snow,blurs etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This goes for any HW like FDC/FDD, tapes, keyboards etc ... so with cheap hacks will no custom loader work, ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once putting all this together its a lot of stuff to code and research even for simple platform. As the emulators are usually a hobby projects there is not the time/manpower/will to do so and compromises are taken ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Recently there is new way of emulating that is 100% HW correct but its still very slow and may be some dedicated emulating HW engine would be a good start point. The idea is take an image of an die of emulated IC and emulate the semiconductor itself. For more info see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.visual6502.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visual 6502&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-04-27T12:23:59.817" LastActivityDate="2019-04-27T12:23:59.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10849" PostTypeId="2" ParentId="10843" CreationDate="2019-04-26T10:08:45.053" Score="4" Body="&lt;p&gt;A lot of software written in the 1940s, 1950s, and even 1960s was never copyrighted, because people didn't realize the copyright protection extended to software.  Even when copyright began to be recognized, there was some debate about whether algorithms should be governed by patents rather than copyrights, while code should be copyrighted instead.  There's a subtle point here.  If the code is copyrighted, but the copyright doesn't extend to the algorithm, then perhaps an engineer could read the code, learn the algorithm,  and write some new code that implements the algorithm, without using any of the intellectual property of the copyright holder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing that started happening is that authors would release a piece of code to the public domain,  only to find that commercial programmers would cut and paste their code into products for sale.  That's not illegal.  Many PD offerings came with a proviso not to charge anybody for PD work,  but that can't be enforced.  So authors began reserving their rights to control the software even when they didn't plan on making a dime off of it.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other answers have got a good outline of what the other alternatives are, and what purpose they serve.  The main purpose boils down to preventing somebody else from appropriating property that was released to the public domain.  There is still plenty of PD stuff out there.  I've posted work on Stackexchange that has become, in effect, PD stuff.  They are little tinkertoys, and I don't even care if a professional pastes it into their work.  &lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2019-04-26T10:08:45.053" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10850" PostTypeId="1" AcceptedAnswerId="10861" CreationDate="2019-04-26T11:41:27.333" Score="9" ViewCount="1762" Body="&lt;p&gt;As a personal project I had the idea to create a custom cartridge for my Commodore 64 and use an ATmega 1284p microcontroller to emulate eproms and/or custom chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically my idea is similar to the one presented in this project from Hackaday:&#xA;&lt;a href=&quot;https://hackaday.io/project/28120-c64-production-cartridge&quot; rel=&quot;noreferrer&quot;&gt;https://hackaday.io/project/28120-c64-production-cartridge&lt;/a&gt; except that that project uses a PIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, my question is about how to wire some of the lines coming out from the commodore expansion port to my ATmega. As shown in the schematics below, address and data lines take 24 pins (3 ports in my mcu) leaving me with 8 pins available. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/t7D5h.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t7D5h.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;I did some research on the various lines provided by the expansion port, I found most of the information here: &lt;a href=&quot;https://www.c64-wiki.com/wiki/Expansion_Port&quot; rel=&quot;noreferrer&quot;&gt;https://www.c64-wiki.com/wiki/Expansion_Port&lt;/a&gt; and here: &lt;a href=&quot;https://www.c64-wiki.com/wiki/Bank_Switching&quot; rel=&quot;noreferrer&quot;&gt;https://www.c64-wiki.com/wiki/Bank_Switching&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm pretty sure that to have a cartrige that can also be used as a custom chip other than an eprom I need the following lines connected to my MCU:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1. _GAME&lt;/strong&gt;  (I could use a jumper for this, but I'd prefer the MCU to control it)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2. _EXROM&lt;/strong&gt; (same as _GAME)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;3. R/_W&lt;/strong&gt; (so I can also write to my MCU and not just read)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;4. PHI2&lt;/strong&gt; (might be useful to synchronize with the system clock)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way I have used 4 out of 8 available pins, but now I'm a bit confused about these remaining lines:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1. _IO1 and _IO2&lt;/strong&gt;: &quot;Signal is low if address bus is within $DE00-$DEFF&quot;. Since these lines notify that some addresses are used for memory mapped IO, does it mean that they go low if address is within $DE00-$DEFF &lt;strong&gt;AND&lt;/strong&gt;  addresses $D000-$DFFF are bank switched to IO (Mode7 for example) or _IO1 and _IO2 lines go low just when the address is in the specified range? Because if it's the latter, these 2 lines are useless as I can simply read the address lines and know if I'm in the $DE00-$DEFF range. Reading from the bank switching wiki, it also says: &quot;$DE00-$DFFF is special and reserved for I/O with chips on the expansion port (by wiring the IOx lines of the port to the enable pins of the chips)&quot;. Does it mean that those 512 addresses are always for expansion port IO regardless of the selected bank switching mode?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2. _ROML and _ROMH&lt;/strong&gt;:  these lines contribute to bank switching from the CPU side. Again I'm not sure I need those: from the description it seems I can deduce their state from _GAME, _EXROM and the address lines. Are these lines there just to simplify cartrige hardware (the same deduction i can make via software would require a series of logic ports on the cartrige) or am I missing something?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;3. _DMA&lt;/strong&gt;: this confuses me a bit: the explanation says:  &quot;if _DMA=Low the CPU can be requested to release the bus. It will stop after the next read cycle and all bus lines will go to high resistance state. So other units can use the computer hardware. At _DMA=High the CPU continues to work.&quot; Does it mean that if _DMA is pulled low the cartrige can than access hardware like the c64 ram and write to it? Because if it's like that I would expect address lines to be IO and not just Out like explained in the documentation above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;4. BA&lt;/strong&gt;: More just for curiosity, since I don't plan to use it, but: it's marked as Input, but it also says that it's controlled by the VIC chip. So, since it's an input I would expect that the cartridge can control it, but without knowing what VIC is doing I suppose it could create some conflicts modifying its state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So long story short: I'd like to know if my suppositions are correct or if I misinterpreted something before wiring the remaining lines, so I can know how to best use the 4 remaining pins on my MCU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="13461" LastEditorUserId="13461" LastEditDate="2019-04-26T11:56:39.297" LastActivityDate="2020-07-24T06:54:11.437" Title="C64 cartridge emulation with ATmega" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;rom&gt;&lt;game-cartridge&gt;&lt;memory-layout&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10851" PostTypeId="2" ParentId="10843" CreationDate="2019-04-26T14:28:07.983" Score="3" Body="&lt;p&gt;I see a lot of technical answers here, but not a lot about &lt;em&gt;why&lt;/em&gt;. Why copyright your work if you don't intend to exploit it for money?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One possible answer: It's no fun to say, &quot;I am the author of X&quot; if X has been turned into crap and widely disseminated by people you don't know. Copyright lets you tell other people to cease and desist from calling their crappy derivative works by the same name as your beautiful original.&lt;/p&gt;&#xA;" OwnerUserId="588" LastActivityDate="2019-04-26T14:28:07.983" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10852" PostTypeId="1" CreationDate="2019-04-26T14:49:35.843" Score="7" ViewCount="587" Body="&lt;p&gt;Did the BCPL programming language support floating point? If not, then how did programmers use it to add two floating point numbers?&lt;/p&gt;&#xA;" OwnerUserId="13477" LastEditorUserId="357" LastEditDate="2019-04-26T15:11:03.983" LastActivityDate="2019-04-26T15:34:07.563" Title="Did the BCPL programming language support floats?" Tags="&lt;history&gt;&lt;programming&gt;&lt;bcpl&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10853" PostTypeId="2" ParentId="10852" CreationDate="2019-04-26T15:05:18.990" Score="2" Body="&lt;p&gt;No, BCPL did not support floating point, unless the system's native word was interpreted as a floating point value. It also didn't support any other types.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/bcpl.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;BCPL manual&lt;/a&gt;, section 1.0, point 2:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;All data items have Rvalues which are bit patterns of the same length and the type of an Rvalue depends only on the context of its use and not on the declaration of the data item. This simplifies the compiler and improves the object code efficiency but as a result there is no type checking.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;An &quot;Rvalue&quot; is, basically, a value that can be used on the right-hand side of an assignment. It's the opposite of an &quot;Lvalue&quot;, which (again basically) is something that can be assigned to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering its intended use:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;BCPL is a simple recursive programming language designed for compiler writing and system programming [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;it seems doubtful that floating-point processing would be an important enough feature to include, especially in a world where many systems might not be floating-point capable at all. The manual also doesn't mention &quot;float&quot;, and &quot;decimal&quot; only appears once in the meaning of &quot;base 10&quot;.&lt;/p&gt;&#xA;" OwnerUserId="357" LastActivityDate="2019-04-26T15:05:18.990" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10854" PostTypeId="5" CreationDate="2019-04-26T15:11:44.633" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-04-26T15:11:44.633" LastActivityDate="2019-04-26T15:11:44.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10855" PostTypeId="4" CreationDate="2019-04-26T15:11:44.633" Score="0" Body="For questions relating to the BCPL programming language on retrocomputers." OwnerUserId="357" LastEditorUserId="357" LastEditDate="2019-04-26T17:00:46.813" LastActivityDate="2019-04-26T17:00:46.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10856" PostTypeId="2" ParentId="10852" CreationDate="2019-04-26T15:16:58.777" Score="2" Body="&lt;p&gt;No, but Martin Richards has recently added floating point operators, with a funny kind of type inference to distinguish between integer and floating point arithmetic.  From &lt;a href=&quot;https://www.cl.cam.ac.uk/~mr10/bcplman.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.cl.cam.ac.uk/~mr10/bcplman.pdf&lt;/a&gt;, page 32:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;BCPL was originally designed for the implemention of compilers and&#xA;  other system software such as text editors, pagination programs and&#xA;  operating systems. These applications typically did not require&#xA;  floating point and so the language did not include any floating point&#xA;  features. Indeed, many early machines on which BCPL ran had word&#xA;  lengths of 16 or 24 bits which were of insufficient length for useful&#xA;  floating point numbers. Even on 32-bit machines the precision of&#xA;  floating point numbers is limited to about 6 decimal digits which is&#xA;  insuffient for serious scientific calculations. For 50 years I&#xA;  resisted putting floating point into BCPL but have recently given in.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="6510" LastActivityDate="2019-04-26T15:16:58.777" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10857" PostTypeId="2" ParentId="10852" CreationDate="2019-04-26T15:34:07.563" Score="5" Body="&lt;p&gt;BCPL &lt;em&gt;did&lt;/em&gt; include floating point, but only as an extension and some smaller systems chose not to implement it. The &lt;a href=&quot;http://www.cpcwiki.eu/imgs/3/3a/ArnorBCPL.pdf&quot; rel=&quot;noreferrer&quot;&gt;Arnor Z80 BCPL compiler&lt;/a&gt; I learned on did not support FP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://archive.org/details/bitsavers_bbntenexTe_5020138/page/n29&quot; rel=&quot;noreferrer&quot;&gt;Tenex BCPL manual&lt;/a&gt; (1974) describes its floating point operations and representations as being relatively standard: one could add two floats with the &lt;code&gt;+&lt;/code&gt; operator, as expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://emma.nfshost.com/index.html&quot; rel=&quot;noreferrer&quot;&gt;bcpltape&lt;/a&gt; distribution (1984) notes in its &lt;a href=&quot;https://en.wikipedia.org/wiki/TRIPOS&quot; rel=&quot;noreferrer&quot;&gt;TRIPOS&lt;/a&gt; BCPL Standard manual that:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;       1.10.1979                                                  67&#xA;                               BCPL Standard&#xA;       A13 Floating point&#xA;           ______________&#xA;          There  are  two  possible  schemes  for  a  floating point&#xA;       package in BCPL:  on implementations where the cell  size  is&#xA;       big  enough  to hold the machine representation of a floating&#xA;       point number  the  Floating  Point  Language  Packet  may  be&#xA;       implemented and where this is not possible the Floating Point&#xA;       Procedure Packet may be  implemented.   In  either  case  the&#xA;       Floating Point I/O Procedures should be implemented.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;BCPL's Floating Point Language Packet - for machines large enough to hold FP values in a memory cell - prefixed the corresponding integer operation with  the  character &lt;code&gt;#&lt;/code&gt;, such as &lt;code&gt;#+&lt;/code&gt;, &lt;code&gt;#-&lt;/code&gt;, etc. So two numbers could be added using&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C:=A#+B&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Floating Point Procedure Packet - for machines where FP values were held as a vector of cells - used special functions, including (again from the Tripos manual):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;       Arithmetic Functions&#xA;       ____________________&#xA;          FPLUS(A,B,C)    C:=A#+B     resultis C&#xA;          FMINUS(A,B,C)   C:=A#-B     resultis C&#xA;          FNEG(A,B)       B:=#-A      resultis B&#xA;          FMULT(A,B,C)    C:=A#*B     resultis C&#xA;          FDIV(A,B,C)     C:=A#/B     resultis C&#xA;          FABS(A,B)       B:=#ABS A   resultis B&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Floating point support was clearly implementation-specific, and would need to be reviewed on attempting to port software from one site to another.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-04-26T15:34:07.563" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10858" PostTypeId="2" ParentId="10812" CreationDate="2019-04-26T15:54:21.650" Score="11" Body="&lt;p&gt;I dislike answering my own questions.  To that end, I have accepted the answer that is supported by the most historical sources.  (&lt;em&gt;Retrocomputing&lt;/em&gt; is about actual history, after all.)  However, I'm not yet satisfied that the other answers completely answer the question.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Dennis_Ritchie&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dennis Ritchie&lt;/a&gt;, the creator of the C language and co-creator of Unix, presented a history of C at an ACM conference in April 1993.  The conference proceeding is available online as &lt;a href=&quot;https://web.archive.org/web/20080731144110/http://cm.bell-labs.com/cm/cs/who/dmr/chist.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;The Development of the C Language&lt;/em&gt;&lt;/a&gt;, and is quoted below.&lt;/p&gt;&#xA;&lt;p&gt;C evolved from the short-lived B language, which in turn derived from BCPL.  These two prior languages were &lt;em&gt;typeless&lt;/em&gt;.  All variables were word-sized values, which could represent signed integers, unsigned integers, characters, or pointers.  Pointers could be used to reference the elements of arrays, strings, or data structures.  The type that a word represented depended on the operators being used on it.  As Ritchie noted,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Both languages are typeless, or rather have a single data type, the 'word,' or 'cell,' a fixed-length bit pattern. Memory in these languages consists of a linear array of such cells, and the meaning of the contents of a cell depends on the operation applied. The &lt;code&gt;+&lt;/code&gt; operator, for example, simply adds its operands using the machine's integer add instruction, and the other arithmetic operations are equally unconscious of the actual meaning of their operands.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Ritchie's paper goes in depth about how the syntax for arrays developed.  In BCPL, memory was accessed with the syntax &lt;code&gt;pointer!offset&lt;/code&gt;.  B changed memory access to a unary prefix operator &lt;code&gt;*&lt;/code&gt;.  Arrays could then be accessed with the expression &lt;code&gt;*(array+offset)&lt;/code&gt;.  To &amp;quot;sweeten such array accesses&amp;quot;, Ritchie added the now-familiar syntax &lt;code&gt;array[offset]&lt;/code&gt; to B.&lt;/p&gt;&#xA;&lt;p&gt;Structures didn't exist in BCPL or B; they were introduced in C.  Ritchie doesn't discuss the history of structures as much as he does arrays.  However, it does seem that early versions of C continued the practice that the meaning of a value was determined by the operators that used it.  Ritchie notes:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Beguiled by the example of PL/I, early C did not tie structure pointers firmly to the structures they pointed to, and permitted programmers to write pointer-&amp;gt;member almost without regard to the type of pointer; such an expression was taken uncritically as a reference to a region of memory designated by the pointer, while the member name specified only an offset and a type.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Compilers in 1977, and even well after, did not complain about usages such as assigning between integers and pointers or using objects of the wrong type to refer to structure members.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;He doesn't explicitly explain the origins of &lt;code&gt;.&lt;/code&gt; and &lt;code&gt;-&amp;gt;&lt;/code&gt;, but it is reasonable to conclude that their purpose was to simplify expressions (much like &lt;code&gt;[]&lt;/code&gt; did for arrays).  As many have noted, &lt;code&gt;pointer-&amp;gt;member&lt;/code&gt; is a shorter way to write &lt;code&gt;*(pointer+member)&lt;/code&gt;.  Similarly, &lt;code&gt;variable.member&lt;/code&gt; is a shorter way to write &lt;code&gt;*(&amp;amp;variable + member)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The critical thing here is that these two operations are &lt;em&gt;not the same&lt;/em&gt;.  Considering that embryonic C continued the tradition of leaving the determination of type to operators, two different operators were therefore needed.  Embryonic C was not sophisticated enough to &amp;quot;know&amp;quot; the type of operands.&lt;/p&gt;&#xA;&lt;p&gt;As C matured, later compilers would have enough information to make the distinction.  However, Ritchie notes the importance of backward-compatibility for existing code, even as the language was evolving:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As should be clear from the history above, C evolved from typeless languages. It did not suddenly appear to its earliest users and developers as an entirely new language with its own rules; instead we continually had to adapt existing programs as the language developed, and make allowance for an existing body of code.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="15334" LastEditDate="2020-12-15T20:00:12.410" LastActivityDate="2020-12-15T20:00:12.410" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10861" PostTypeId="2" ParentId="10850" CreationDate="2019-04-26T19:30:03.483" Score="10" Body="&lt;p&gt;Initial assumption you are making about the signals /GAME, /EXROM, R/W, and the clock are reasonable. There are some nuances with the other signals that you might need to consider.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C64 has the ability to map the 4K of addess space at D000-DFFF as either system RAM or I/O. The only way your cartridge can know which one is mapped is using the /IO1 and /IO2 lines. If those lines are inactive, then its system RAM being accessed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;/ROML and /ROMH are, in fact, necessary to simplify cartridge design. A legacy cartridge could be just ROM chip(s) with no address decoding logic. So, it would rely on these signals to let the C64 do the decoding needed for Chip Select (CS). Of course, your cartridge controlling /GAME and /EXROM outputs causes changes in how these two inputs appear. It may be a simpler and more reliable approach to use these signals as they were intended.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;/DMA and BA need to be used in tandem, but only if you intend to actually implement a DMA capability. This is true DMA, whereby your cartridge can be the bus master and can modify the C64's system RAM directly, bypassing the 6510 CPU. This could allow very capable, fast I/O, but seems out-of-scope for what you are trying to accomplish.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-04-26T19:30:03.483" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="10862" PostTypeId="2" ParentId="10843" CreationDate="2019-04-27T02:03:10.247" Score="5" Body="&lt;p&gt;Rather than argue about the premise of the question or the distinctions between &quot;public domain&quot; and &quot;open source&quot;, I'm going to answer the question.  Several factors seem to have occurred:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;In late 1980s to the 1990s, Richard M. Stallman and the GNU project introduced the idea of a software license that allowed people to use software at no cost, but not completely putting it in the public domain.  Prior to this, most software was either proprietary or in the public domain, with nothing in between.  A key aspect of Stallman's license was that the source code be publicly available.  Other developers took notice and used either GNU's licenses or their own open-source licenses.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Also during the late 1980s to 1990s, the growth of the Internet made it much easier to distribute not only program binaries, but also source code.  Anonymous FTP, NNTP newsgroups, and later the Web made these possible.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Source code often wasn't included with programs on cassette tape, floppies, or CDs.  This was largely because of space, as well as low demand from end users.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A significant amount of public domain software in the late 1970s to 1980s was written in BASIC, which has its own issues.  Programs were usually stored in tokenized form, which was not necessarily readable between different flavors of BASIC.  &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/8364/10260&quot;&gt;With&lt;/a&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/4388/10260&quot;&gt;some&lt;/a&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/7514/10260&quot;&gt;exceptions&lt;/a&gt;, a user could simply &lt;code&gt;LIST&lt;/code&gt; the program, so possessing a program largely implied that you had the source code.  People (incorrectly) equated public domain with available source code.  By the 1990s, BASIC was out of vogue.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;By the late 1990s, hardware and software companies started to see the advantages of using other people's open-source software as a component of their own products.  Why spend time and money developing your own solution, when one is already available for free?  It can just be part of your product, and you can keep the rest of your product proprietary.  The impact to the company is minor: append the open-source license to your own license, and run an FTP server with the source of the non-proprietary components.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So I'd say the change occurred in the 1990s, due to the reasons above.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-04-27T02:03:10.247" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="10863" PostTypeId="2" ParentId="10850" CreationDate="2019-04-27T06:11:54.873" Score="15" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;As a personal project I had the idea to create a custom cartridge for my Commodore 64 and use an ATmega 1284p microcontroller to emulate eproms and/or custom chips.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I doubt that this will work!&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason is simply the time needed by the microcontroller to react on a signal change:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, you have about 0.25µs to react on some edge on the C64 bus. (Some diagrams I found in the internet even mention much shorter times!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if your microcontroller is running with &lt;strong&gt;48 MHz&lt;/strong&gt;, you can do 12 machine instructions in this time. Even if you use hand-optimized assembler code, this is not very much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll have about 5 instructions to check if the C64 bus lines are in the correct state and in the case of a read from the module, you need at least 2 instructions to drive the data bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About 5 instructions are remaining for doing something. This might even not be sufficient to read a byte from the ROM!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And if the CPU is too slow for hand-optimized assembler code, there is of course no chance to use code written in C or C++!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using 20 MHz clock frequency (&lt;strong&gt;ATmega 1284p&lt;/strong&gt;) you would have only 5 machine instructions. Even when using hand-optimized assembler code, this is not even sufficient to check which address is accessed by the C64!&lt;/p&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="8712" LastEditDate="2019-04-27T10:45:36.317" LastActivityDate="2019-04-27T10:45:36.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10864" PostTypeId="2" ParentId="10850" CreationDate="2019-04-27T06:39:43.817" Score="9" Body="&lt;p&gt;This is basically a duplicate for &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2576/nes-cartridge-rom-emulation-with-arduino-or-pi&quot;&gt;NES cartridge ROM emulation with Arduino or Pi?&lt;/a&gt;. The fact that the C64 is a bit slower doesn't change it in any way, so you might want take a look at the &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6587/6659&quot;&gt;answers&lt;/a&gt; - as well as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/10863/6659&quot;&gt;Martin Rosenaus's fitting answer&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To pull something like this off, you need a MCU about 15-25 times faster than an ATmega (using assembly, make that 50 times for C). With some external hardware this might be lowered, but not by much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if you're serious about the idea, you should take a look at Cypress' PSoC5 family. They not only offer a rather fast ARM core, but an incredible versatile &lt;em&gt;programmable&lt;/em&gt; I/O section with several units that can be made into status machines, handling most signaling and data transfer on their own. Not to mention that building such a parallel system is much more fun in itself :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-26T08:27:24.723" LastActivityDate="2019-09-26T08:27:24.723" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10865" PostTypeId="1" AcceptedAnswerId="10883" CreationDate="2019-04-27T07:35:31.853" Score="6" ViewCount="815" Body="&lt;p&gt;In C, we have the &lt;code&gt;%&lt;/code&gt; operator which finds remainder of division. But it's only applicable to integral types. For floating-point types we have to use &lt;code&gt;fmod&lt;/code&gt; function from &lt;code&gt;math.h&lt;/code&gt;. This makes an impression that floating-point types are second-class citizens in C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, why was the modulo operation demoted to a library function for floating-point types compared to core language operator for integral types?&lt;/p&gt;&#xA;" OwnerUserId="1992" LastActivityDate="2019-04-28T06:54:49.923" Title="Why is modulo operation an operator for integer types but only a function for floating-point ones?" Tags="&lt;c&gt;&lt;floating-point&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10866" PostTypeId="1" CreationDate="2019-04-27T07:50:52.803" Score="0" ViewCount="305" Body="&lt;p&gt;When I went to primary school in 1995 I remember the school had a classroom full of old computers. It took the school 2 years but eventually they did replace them with more modern systems. The two things I remember of these old boxes was the pipe game and the moonlanding game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pipe game gave you 30 seconds to start laying pipes before the toxic waste began to flow and then you had to keep it flowing for as long as possible by laying tiles. The moonlanding game I remember as being hard, you had to use the arrow keys to keep it from crashing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do think these were windows systems; I would be really curious as to what systems these could have been.&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="611" LastEditDate="2019-04-27T08:20:30.487" LastActivityDate="2019-04-27T08:20:30.487" Title="What was this computer I remembered?" Tags="&lt;identify-this-computer&gt;&lt;windows&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ClosedDate="2019-04-28T08:44:27.230" ContentLicense="CC BY-SA 4.0" />
  <row Id="10867" PostTypeId="2" ParentId="10866" CreationDate="2019-04-27T08:00:53.130" Score="1" Body="&lt;p&gt;If you went to school in the UK they were likely Research Machines PCs running Window Box, a custom shell on top of MS Windows. I remember versions for Windows 3.0 onwards. I used these in infant and junior classrooms in 1995-1996 and they were still popular in 1999 when I started teaching.&#xA;Schools liked them because they were easy to manage and you could set them to different levels of complexity depending on the age of the child and they included a lot of education software for primary. They also allowed a primitive multi user system for storing documents.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2019-04-27T08:00:53.130" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10868" PostTypeId="1" AcceptedAnswerId="10869" CreationDate="2019-04-27T12:40:50.793" Score="4" ViewCount="685" Body="&lt;p&gt;As the title says, what's the first x86 processor from Intel that supports the following addressing mode?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mov %reg, 8(base, index, 4)&#xA;          ^^^^^^^^^^^^^^^^^&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where the content of &lt;code&gt;%reg&lt;/code&gt; will be stored to the address &lt;code&gt;base + 4*index + 8&lt;/code&gt; (both &lt;code&gt;base&lt;/code&gt; and &lt;code&gt;index&lt;/code&gt; are registers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only know that 8086 doesn't support this and 80586 supports this. I'm guessing it's 80386 because it's the first 32-bit x86 Intel CPU?&lt;/p&gt;&#xA;" OwnerUserId="13492" LastActivityDate="2019-04-27T13:01:29.683" Title="What was the first Intel x86 processor with &quot;Base + Index * Scale + Displacement&quot; addressing mode?" Tags="&lt;intel&gt;&lt;x86&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10869" PostTypeId="2" ParentId="10868" CreationDate="2019-04-27T13:01:29.683" Score="13" Body="&lt;p&gt;This addressing mode was introduced with the first 32-bit x86 processor, i.e. the 80386.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ref: &lt;a href=&quot;http://bitsavers.org/components/intel/80386/230985-001_80386_Programmers_Reference_Manual_1986.pdf&quot; rel=&quot;noreferrer&quot;&gt;80386 Programmer's reference manual&lt;/a&gt; sec 2.5.3.2.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2019-04-27T13:01:29.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10870" PostTypeId="1" CreationDate="2019-04-27T13:46:52.673" Score="17" ViewCount="2475" Body="&lt;p&gt;I am learning about the original B programming language, but I don't have a compiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an emulator for an old computer that can run an old operating system that have a compiler for the original B programming language?&lt;/p&gt;&#xA;" OwnerUserId="13493" LastActivityDate="2019-04-28T09:57:58.573" Title="Is there a way to get a compiler for the original B programming language?" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10871" PostTypeId="2" ParentId="10843" CreationDate="2019-04-27T14:14:40.423" Score="0" Body="&lt;p&gt;Another factor that was important was the advent of gcc (GNU Compiler Collection, formerly GNU C Compiler). Up to the late 1980s, compilers for home and small business computers were either fairly expensive, or fairly limited. Turbo Pascal was a notable exception, but it was limited to CP/M and MS-DOS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Richard M. Stallman seems to have been well aware that getting people to write free software would be a lot easier with free development tools, and the appearance of &lt;a href=&quot;https://en.wikipedia.org/wiki/GNU_Compiler_Collection#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;GCC in 1987&lt;/a&gt;, and its being ported to several architectures and operating systems within a few years, helped a great deal with getting the Open Source movement running. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-04-27T14:14:40.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10872" PostTypeId="2" ParentId="10870" CreationDate="2019-04-27T15:00:08.617" Score="10" Body="&lt;p&gt;This question has already been asked on Stack Overflow and answered, however we cannot show duplicated across sites. I will link to the answer there:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/a/26247672/4370109&quot;&gt;https://stackoverflow.com/a/26247672/4370109&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Prompted by this question, there is now a B compiler available from here: &lt;a href=&quot;https://github.com/Leushenko/ybc&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/Leushenko/ybc&lt;/a&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Runs on Windows, Linux, and OSX (binaries provided; in the spirit of the question it is written in an obscure language), where it produces very poor quality x86-32 assembly. Should be GCC-compatible. It is reconstructed out of the available reference material on B, and almost certainly does not reflect the language as it really was in the 1960s. Notably, in the absence of type information (B is untyped), the &lt;code&gt;&amp;amp;a[b] == &amp;amp;*(a + b)&lt;/code&gt; rule &lt;em&gt;can not hold&lt;/em&gt; on x86, meaning that this task is effectively impossible (without resorting to an interpreter).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Apart from that, Pavel Minaev's comment is right: the language &lt;em&gt;as described&lt;/em&gt; is extremely small, far smaller than C, and an experienced/competent compiler programmer could likely write one for you in an afternoon.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Unfortunately this is only a partial answer, as I couldn't tell you where to find a &lt;em&gt;good&lt;/em&gt; B compiler.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="611" LastEditorUserId="2126" LastEditDate="2019-04-27T17:02:27.430" LastActivityDate="2019-04-27T17:02:27.430" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="10873" PostTypeId="2" ParentId="10870" CreationDate="2019-04-27T16:01:09.010" Score="11" Body="&lt;p&gt;I found an LLVM-based implementation of Ken Thompson's PDP-11 flavour of B on GitHub: &lt;a href=&quot;https://github.com/dobyrch/dbc&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/dobyrch/dbc&lt;/a&gt; and also an x86-based implementation of the Honeywell flavour: &lt;a href=&quot;https://github.com/aap/abc&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/aap/abc&lt;/a&gt;. &lt;code&gt;abc&lt;/code&gt; appears to have been reconstructed from documentation, and due to its x86 nature is a little hackish:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Since B was first implemented for machines with word addressing, some hacking was required to make it work on the byte addressed x86. Addresses filled in by the linker are always byte addresses, so pointers to these addresses are collectively stored at the end of the .data section and are then converted to word addresses at runtime, before main() is called.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The generated assembly is very inefficient, not even constant expressions are reduced at compile time. Also I/O is currently not buffered.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, &lt;code&gt;dbc&lt;/code&gt; comes with its own issues:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;All operators and statements are implemented, although they haven't all been thoroughly tested. I suspect some edge cases with oddly placed labels may generate invalid LLVM IR.&lt;/li&gt;&#xA;  &lt;li&gt;Every library function has been implemented, although &lt;code&gt;gtty()&lt;/code&gt; and &lt;code&gt;stty()&lt;/code&gt; differ slightly from their descriptions in the manual: they both require a 4-word vector as a second argument. They are equivalent to &lt;code&gt;tcgetattr&lt;/code&gt; and &lt;code&gt;tcsetattr&lt;/code&gt;, respectively, but use a vector instead of &lt;code&gt;struct termios&lt;/code&gt; to hold the four flag fields.&lt;/li&gt;&#xA;  &lt;li&gt;The error diagnostics still need some work—several different errors may be printed for the same line, and the line number is not always correct.&lt;/li&gt;&#xA;  &lt;li&gt;Indirectly assigning to a global variable will have strange results (e.g. &lt;code&gt;foo = 40&lt;/code&gt; is fine, but &lt;code&gt;*&amp;amp;foo = 40&lt;/code&gt; will actually set foo to 5, not 40). This issue does not affect local variable assignment, nor does it affect assignment to array indices (i.e. if &lt;code&gt;foo&lt;/code&gt; is a global vector, &lt;code&gt;foo[3] = 40&lt;/code&gt; works as expected). The problem stems from a kludge which is necessary to achieve correct pointer arithmetic semantics.&lt;/li&gt;&#xA;  &lt;li&gt;A simple definition may contain at most one value in its initializer list. I have not yet found a reasonable way to implement the semantics described in section 7.1 of the manual; use a vector definition instead (e.g. &lt;code&gt;foo[5] 1, 2, 3, 4, 5;&lt;/code&gt; instead of &lt;code&gt;foo 1 2 3 4 5;&lt;/code&gt;). Incidentally, this same restriction seemed to be present in the H6070 implementation of B.&lt;/li&gt;&#xA;  &lt;li&gt;Global initializer lists may not contain strings or names of other globals (yet).&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Unlike &lt;code&gt;ybc&lt;/code&gt;, these can both compile some original B programs.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2019-04-27T16:54:00.117" LastActivityDate="2019-04-27T16:54:00.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10874" PostTypeId="1" CreationDate="2019-04-27T17:54:13.637" Score="7" ViewCount="823" Body="&lt;p&gt;I have an old game (STRTRK.BAS) from my dad's Kaypro 10 that I would like to convert to a plain text file. Basically, what I'm trying to do is get it onto a modern computer in plain text format so I can look at the source code and print it (hardcopy).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This game is accessible on the K10 itself, by starting up OBASIC (an older version of MBASIC, itself a platform independent implementation of BASIC-80).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The source code can be listed once loaded (again, on the actual machine).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is the best route would be to find a CP/M emulator and install a version of CP/M, OBASIC, and the program onto it, but I actually haven't had any luck finding something that will run on a modern Windows 7 setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas?&lt;/p&gt;&#xA;" OwnerUserId="12001" LastActivityDate="2019-04-27T21:43:01.940" Title="How to get a plain text file version of a CP/M .BAS (M-BASIC) program?" Tags="&lt;basic&gt;&lt;cp-m&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10875" PostTypeId="2" ParentId="10874" CreationDate="2019-04-27T18:10:57.027" Score="10" Body="&lt;p&gt;M-BASIC-80 knows the modifier &quot;A&quot; for the &lt;code&gt;SAVE&lt;/code&gt; command - So, you should be able to create a readable ASCII file directly on the Kaypro computer by doing &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LOAD &quot;MYPROG.BAS&quot;&#xA;LIST&#xA;SAVE &quot;MYPROG.TXT&quot;,A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you don't want to mess with old disks on a modern computer (I recommend you don't even start to look into this), your best bet would be to set up a serial RS-232 connection between the Kaypro and your modern machine - A suitable RS-232-USB dongle, a proper cable and a terminal program would suffice.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-04-27T21:43:01.940" LastActivityDate="2019-04-27T21:43:01.940" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10876" PostTypeId="2" ParentId="10874" CreationDate="2019-04-27T20:33:07.950" Score="1" Body="&lt;p&gt;Basic interpreters saved the code in a tokenised form to save space. I found this description of the format used by GW-Basic, a later version of MBASIC. I don't know if the file format changed between the versions, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://justsolve.archiveteam.org/wiki/GW-BASIC_tokenized_file&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://justsolve.archiveteam.org/wiki/GW-BASIC_tokenized_file&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wouldn't be too hard to write a bit of code to convert from the byte-codes to text.&lt;/p&gt;&#xA;" OwnerUserId="13497" LastActivityDate="2019-04-27T20:33:07.950" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10877" PostTypeId="2" ParentId="10874" CreationDate="2019-04-27T20:42:26.697" Score="6" Body="&lt;p&gt;It wouldn't happen to be the one that the listing starts/ends like this, would it?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 'EXPANDED APRIL 1977 BY W.A. BURTON&#xA;20 'PIRATED JAN. 1978 BY ZOSO&#xA;30 DIM G(8,8),S(8,8),K(3,3)&#xA;40 PRINTCHR$(26)&#xA;50 GOSUB 5460&#xA;   …&#xA;6350 IF Q8&amp;lt;0 OR Q8&amp;gt;S THEN GOTO 6340&#xA;6360 S=S-Q8:E=E+Q8:PRINT&#xA;6370 PRINT E;&quot; UNITS OF ENERGY NOW - TRY AGAIN.&quot;&#xA;6380 RETURN &#xA;6390 RESET&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If so, there are &lt;em&gt;lots&lt;/em&gt; of copies online, frinstance &lt;a href=&quot;http://www.classiccmp.org/cpmarchives/cpm/Software/rlee/K/KAYPRO/2X/BASICS/STRTRK.BAS&quot; rel=&quot;noreferrer&quot;&gt;STRTRK.BAS&lt;/a&gt;. The program detokenizes and runs under both OBASIC.COM and MBASIC.COM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Peter Schorn's &lt;a href=&quot;https://schorn.ch/altair.html&quot; rel=&quot;noreferrer&quot;&gt;Altair 8800 simulator&lt;/a&gt; site has emulators and disk images for many versions of CP/M. For instance, I downloaded the CP/M 2 distribution, unpacked it, moved the STRTRK.BAS file to the &lt;code&gt;cpm2&lt;/code&gt; folder and started the emulator with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;altairz80 cpm2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;After that, I was able to import the tokenized program with the command &lt;code&gt;R STRTRK.BAS&lt;/code&gt;, then loaded MBASIC and the program could be loaded with &lt;code&gt;LOAD &quot;STRTRK.BAS&quot;&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-04-27T20:42:26.697" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10878" PostTypeId="2" ParentId="10865" CreationDate="2019-04-28T02:53:00.113" Score="1" Body="&lt;p&gt;I see two reasons for offering a % operator but an fmod() function. The first is complexity. On many CPUs integer division is essentially just a single opcode or an inline simple chain (such as would be needed for an 8-bit CPU). Thus, representing direct CPU capability with an opcode makes intrinsic sense.  There is a second form of complexity as well.  The compilation of % expects integer data, while fmod() expects double float data.  Having a function call that would change its operation depending on type would add extra complexity that programmers are perfectly able to handle themselves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second reason is utility.  % is is a useful and common basic arithmetic operator.  Making it native to the language just as is &quot;+&quot; makes a lot of sense.  In my experience fmod() is much less so.  I have programmed many varieties of software, but I cannot remember ever needing the fmod() function.  Others have a different experience, I'm sure, but overall I think the integer operation is needed far more often.  Stick the lesser used thing in a math library, and don't bloat the base language with them.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2019-04-28T02:53:00.113" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="10879" PostTypeId="2" ParentId="7262" CreationDate="2019-04-28T03:44:29.727" Score="11" Body="&lt;p&gt;&lt;a href=&quot;http://www.starringthecomputer.com/computer.html?c=427&quot; rel=&quot;noreferrer&quot;&gt;StarringTheComputer.com&lt;/a&gt; claims it is a GE 635.  I could not find pictures of that particular system, but it is consistent with descriptions in the 635's &lt;a href=&quot;http://www.bitsavers.org/pdf/ge/GE-6xx/CPB-371A_GE-635_System_Man_Jul64.pdf&quot; rel=&quot;noreferrer&quot;&gt;System Manual&lt;/a&gt; and &lt;a href=&quot;http://ed-thelen.org/comp-hist/GE-635.html&quot; rel=&quot;noreferrer&quot;&gt;Programming Reference Manual&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a better picture from &lt;em&gt;Serenity&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bmHDu.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bmHDu.jpg&quot; alt=&quot;Serenity&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The GE 600 series were the first multiprocessor systems, and were touted for their multitasking and real-time abilities.  It was the system upon which the Multics operating system was developed (the precursor to Unix).  It also was used by the USAF to track missiles and by NASA to track the Apollo spacecraft:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YVsnY.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YVsnY.jpg&quot; alt=&quot;GE 635 ad&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GE sold their computer division to Honeywell in 1970, who renamed the architecture the Honeywell 6000 series.  Here is a picture of the Processor Control Panel of a Honeywell computer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jTjE1.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jTjE1.jpg&quot; alt=&quot;Honeywell&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Comparing &lt;em&gt;Khan&lt;/em&gt;, &lt;em&gt;Serenity&lt;/em&gt;, and the Honeywell:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Other than the state of the switches and indicators, the left rack of &lt;em&gt;Khan&lt;/em&gt; is identical to &lt;em&gt;Serenity&lt;/em&gt;'s single rack.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Honeywell rack has slightly different, more modern styles of switches and indicators.  This would be expected from a newer computer.  The fonts and colors are different.  However, the layout and labeling of components is largely the same.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;All three sources use the same indicator colors (off, white, yellow, and orange/red).  There is one blue or green indicator in the right &lt;em&gt;Khan&lt;/em&gt; rack, but this could be attributed to replacement of a burned-out indicator by the prop/set department.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Honeywell displays one 36-bit register as a row of 36 indicators.  It also displays two 72-bit registers each as two rows of 36 indicators.  You can see such a 72-bit display in &lt;em&gt;Serenity&lt;/em&gt;, and partially cut off in &lt;em&gt;Khan&lt;/em&gt;.  (I believe this is the M register, which buffers operands in and out of memory.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Below the 72-bit display in &lt;em&gt;Serenity&lt;/em&gt; and &lt;em&gt;Khan&lt;/em&gt; is a table labeled &quot;ILLEGAL ACTION CODES&quot;.  The table is blurry and seems to have 14 entries.  The 635 has 16 different fault modes, 2 which are manual and 14 which are machine-generated.  Below this is a set of indicators that includes 5 bits of &quot;COMMAND&quot; and 4 bits of &quot;ILLEGAL ACTION&quot;, which are consistent with the 635's fault handling.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Below that is a section of switches labeled &quot;FAULT / STOP ON CONDITION&quot;.  I can read labels for &quot;ADDRESS&quot; and &quot;COMMAND&quot; which are consistent with the 635's manual traps.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Below this, a hand in &lt;em&gt;Khan&lt;/em&gt; turns a rotary switch labeled &quot;ADDRESS STOP&quot;.  A similar rotary switch appears on the Honeywell (last of the first row of dials; also see enlarged on the right of the photo).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Below that in &lt;em&gt;Khan&lt;/em&gt; is a rotary switch labeled &quot;TRACKER DISPLAY SELECT&quot; with five positions.  The same switch appears on the Honeywell.  I don't find any reference to &quot;tracker&quot; in the 635 documentation, so this may be an add-on for missile tracking systems.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The right rack in &lt;em&gt;Khan&lt;/em&gt; shows 3 bits of &quot;TAG&quot; and 9 more bits of &quot;OPERATION CODE&quot;.  Instructions of the 635 indeed have 3 bits of tag and 9 bits of opcode, which the documentation always spells out as &quot;operation code&quot;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &quot;FAULTS&quot; next to that match the 635's hardware faults.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The labels within &quot;REGISTER DISPLAY&quot; is not legible, but the number of indicators matches what the 635 calls the &quot;Indicator Register&quot;, which we would now call a condition code register.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can't really tell the difference between the 635 and its sister models by the front panel:&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The difference between these models was fewer than 10 wires on the backplane. Field service could convert a 615 to a 635 or 625 or vice versa in a couple of hours if necessary; other than those few wires, the 615, 625 and 635 were identical.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/GE-600_series&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/GE-600_series&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If this is a custom design, then they spent way too much time making it match the GE 600 / Honeywell 6000 family.  My guess is that it was an obsolete but real system that someone was more than happy to sell off.  They weren't cheap:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 635 is now the largest computer in the GE line with a price tag of $2 million and up (lease prices start at $45,000 per month).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://archive.org/download/bitsavers_computersA_6794477/196408.pdf&quot; rel=&quot;noreferrer&quot;&gt;Computers and Automation, August 1964&lt;/a&gt;, p. 26&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-04-28T03:44:29.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10880" PostTypeId="2" ParentId="10865" CreationDate="2019-04-28T04:21:45.600" Score="5" Body="&lt;p&gt;Because mathematically speaking, the &lt;em&gt;modulo&lt;/em&gt; operation or &lt;a href=&quot;https://en.wikipedia.org/wiki/Euclidean_division&quot; rel=&quot;noreferrer&quot;&gt;division with remainder&lt;/a&gt; makes only sense on integers (or more generally on &lt;a href=&quot;https://en.wikipedia.org/wiki/Euclidean_domain&quot; rel=&quot;noreferrer&quot;&gt;Euclidean Rings&lt;/a&gt;). This operation doesn't make sense on any (mathematical) &lt;a href=&quot;https://en.wikipedia.org/wiki/Field_%28mathematics%29&quot; rel=&quot;noreferrer&quot;&gt;field&lt;/a&gt; like the real numbers (or there computer approximations &lt;em&gt;float&lt;/em&gt; and &lt;em&gt;double&lt;/em&gt;) at all, because in such a structure a division can always be done without any remainder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a consequence, on an Euclidean Ring like the integers &lt;em&gt;Z&lt;/em&gt; you get the derived &lt;a href=&quot;https://en.wikipedia.org/wiki/Quotient_ring&quot; rel=&quot;noreferrer&quot;&gt;quotient rings&lt;/a&gt; &lt;em&gt;Z_n&lt;/em&gt; which consist (formally) of elements of &lt;em&gt;Z&lt;/em&gt; with the same reminder module &lt;em&gt;n&lt;/em&gt;, and these have applications in coding theory etc. There is nothing equivalent for the real numbers &lt;em&gt;R&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &lt;code&gt;fmod&lt;/code&gt; is an afterthought which takes one particular definition of division with reminder and implements it in an ad-hoc way on floats and doubles by truncating the result of the division. The only use for such a function is if you have accidentally stored integers in float or double variables, and if you want to save yourself the trouble of conversion to integer variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So from this point of view, it's completely logically that &lt;code&gt;%&lt;/code&gt; is an integral part of the language, while &lt;code&gt;fmod&lt;/code&gt; is just a library function.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-04-28T04:21:45.600" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="10881" PostTypeId="1" AcceptedAnswerId="10882" CreationDate="2019-04-28T04:28:55.550" Score="8" ViewCount="949" Body="&lt;p&gt;David, the main character of the 1983 movie &lt;em&gt;WarGames&lt;/em&gt;, uses an &lt;a href=&quot;https://en.wikipedia.org/wiki/IMSAI_8080&quot; rel=&quot;noreferrer&quot;&gt;IMSAI 8080&lt;/a&gt; computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3rQeZ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3rQeZ.jpg&quot; alt=&quot;IMSAI computer in WarGames&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The plot of the movie is driven by David's desire to find games to play on his computer.  He war-dials phone numbers to find a gaming company, and inadvertently connects to a computer at NORAD instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;By 1983, were there actually any games which could be played on the IMSAI 8080?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Although David uses the system as a dumb terminal in the movie, I am looking for games that could run &lt;em&gt;directly&lt;/em&gt; on the IMSAI.)&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-11-22T04:19:39.787" Title="Were there actually any games for the IMSAI 8080 computer, used in the movie WarGames?" Tags="&lt;gaming&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10882" PostTypeId="2" ParentId="10881" CreationDate="2019-04-28T04:41:50.320" Score="10" Body="&lt;p&gt;An IMSAI 8080 is fully compatible to an Altair 8800, and you can do &lt;a href=&quot;https://www.adwaterandstir.com/2017/08/14/but-what-could-you-actually-do-with-an-altair-8800/&quot; rel=&quot;noreferrer&quot;&gt;quite a bit&lt;/a&gt; on a fully loaded Altair 8800 with keyboard, text video terminal and disk drive (which can run CP/M), e.g.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You could play hundreds of games, including Colossal Cave Adventure, Star Trek, and Zork (I, II, and III!) You could use it for spreadsheets with Supercalc, databases with dBASE, and word processing with the market leader WordStar. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-04-28T04:41:50.320" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10883" PostTypeId="2" ParentId="10865" CreationDate="2019-04-28T06:54:49.923" Score="11" Body="&lt;p&gt;Actually, the answer appears to have been documented in C99 Rationale, see the notes on &lt;em&gt;§7.12.10.1 The &lt;code&gt;fmod&lt;/code&gt; functions&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The C89 Committee considered a proposal to use the remainder operator &lt;code&gt;%&lt;/code&gt; for this function; but it was rejected because the operators in general correspond to hardware facilities, and &lt;code&gt;fmod&lt;/code&gt; is not supported in hardware on most machines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="1992" LastActivityDate="2019-04-28T06:54:49.923" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10884" PostTypeId="1" AcceptedAnswerId="11069" CreationDate="2019-04-28T07:24:11.317" Score="5" ViewCount="134" Body="&lt;p&gt;The FPI (fast processor interface) ASIC in the Apple IIgs generates the /CROMSEL chip-select signal, which is used to select a ROM in the memory expansion slot. Obviously the /CROMSEL signal must be asserted for read accesses to the extended ROM space, but what about write accesses? If the 65816 performs a write to the extended rom space in banks F0-FD (F0-FB for ROM 3 systems), does the FPI assert /CROMSEL?&lt;/p&gt;&#xA;" OwnerUserId="7486" LastActivityDate="2019-05-21T22:45:43.330" Title="Does the Apple IIgs FPI assert /CROMSEL for *write* accesses to the extended ROM space?" Tags="&lt;apple-ii&gt;&lt;apple&gt;&lt;apple-iigs&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10885" PostTypeId="2" ParentId="2386" CreationDate="2019-04-28T07:34:43.170" Score="3" Body="&lt;p&gt;TL;DR application support&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I worked for Microsoft in 1991, on their own version of OS/2. OS/2 was designed for the future, and was seen as the successor to DOS. It was never designed to be back compatible with DOS, as it ran in 286 protected mode and DOS ran in 286 realmode. By design, you couldn't mix and match. Eventually OS/2 gained a single DOS box, which kludged the 286 back into realmode, but was clearly a temporary measure. OS/2 was never designed to leverage the virtual 86 functions of the 386. And once IBM designed something, they stuck to it!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By contrast Windows 3 could run in 386 mode and cater for multiple DOS sessions, each running a full application and OS. For a business this was a much better return on investment. Businesses didnt want to dump all their DOS applications and replace them with OS/2 or Windows equivalents, but they did want to run 123 in one window, Word Perfect in another and switch between them. &#xA;So OS/2 was designed for a future without DOS and Windows was designed to be a better DOS than DOS. The market chose, and were happy to buy 386 machines, for which Windows 3.0 provided more support, in order to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My impression was that MS were slightly caught by surprise and promptly jumped ship on OS/2 when they could see which way the wind was blowing.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2019-04-28T07:34:43.170" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10886" PostTypeId="2" ParentId="10884" CreationDate="2019-04-28T07:42:42.707" Score="-1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;If the 65816 performs a write to the extended rom space in banks F0-FD (F0-FB for ROM 3 systems), does the FPI assert /CROMSEL?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, it does. CROMSEL is a select signal, and as such only dependant on the address, not any other signal (like direction).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The reason of providing CROMSEL is to make extended ROM selection easy and safe by avoiding the chance that ROM (card) developers only decode for Fx, creating a potential address collision for banks FE and FF.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-04-28T07:42:42.707" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="10887" PostTypeId="1" AcceptedAnswerId="11365" CreationDate="2019-04-28T08:36:17.193" Score="10" ViewCount="322" Body="&lt;p&gt;&lt;em&gt;Facit&lt;/em&gt; used to be a very successful Swedish company manufacturing mechanical calculators that quickly went down to its final demise by not being able to adapt to the shift towards electronic calculators in the 1970s (A common problem faced by similar companies, known as &lt;em&gt;Facitfällan&lt;/em&gt; or &quot;the Facit trap&quot; in Sweden). Facit also sold, for a short time, a (sortof) home computer, the &lt;a href=&quot;http://www.datasalen.se/Utstallning/Data/Facit/facitdtc.htm&quot; rel=&quot;noreferrer&quot;&gt;Facit DTC&lt;/a&gt;, and was active in the typewriter and punchcard and stripe business.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When browsing through eBay I found the following picture on an &lt;a href=&quot;https://www.ebay.de/itm/SHARP-MZ-800-MZ-811-Personal-Computer-1985-Gepruft-100-OK-Retrokult/303126193203?_trkparms=aid%3D555018%26algo%3DPL.SIM%26ao%3D1%26asc%3D57480%26meid%3D2709d332cc854a2e8035c054104831f8%26pid%3D100005%26rk%3D2%26rkt%3D5%26sd%3D163577907075%26itm%3D303126193203&amp;amp;_trksid=p2047675.c100005.m1851&quot; rel=&quot;noreferrer&quot;&gt;eBay ad&lt;/a&gt; (link might expire) for a Sharp MZ-800 computer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CnWY1.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CnWY1.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Facit-Addo was created when Facit acquired one of its main competitors, Addo, in 1966).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This doesn't seem to be a simple trader's label, as it seems to be specifically made for the Sharp.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the whole computer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UvObG.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UvObG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was not aware that Facit was ever into the home computer market beyond the DTC: Does anyone know why the Facit trademark appears on a Sharp MZ-800?&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-04-28T17:01:13.317" LastActivityDate="2019-06-16T07:43:33.270" Title="What connection exists between Facit AB and Sharp on the MZ-800 computer?" Tags="&lt;history&gt;&lt;sharp&gt;&lt;facit&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10888" PostTypeId="2" ParentId="10870" CreationDate="2019-04-28T09:57:58.573" Score="6" Body="&lt;p&gt;Following links in issues for abc(&lt;a href=&quot;https://github.com/aap/abc/issues/8&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/aap/abc/issues/8&lt;/a&gt;) has led me to the The Amsterdam Compiler Kit(&lt;a href=&quot;https://github.com/davidgiven/ack&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/davidgiven/ack&lt;/a&gt;), which lists B as a supported language. It seems to have a more active user community, albeit focused on other languages it supports.&lt;/p&gt;&#xA;" OwnerUserId="13500" LastActivityDate="2019-04-28T09:57:58.573" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10889" PostTypeId="2" ParentId="10828" CreationDate="2019-04-28T12:28:26.693" Score="2" Body="&lt;p&gt;I also wrote my own Z80/Spectrum emulators in the 90s, and have some insights to add to the already excellent answers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While much of my thinking is in line with Specktre's answer, I will add more hurdles that complicate developing a 100% accurate emulator:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;software actually abusing non-documented and/or bugs in the hardware, make it difficult you also having to emulate actual bug-per-bugs of the ROM software or hardware;&lt;/li&gt;&#xA;&lt;li&gt;ubiquitous run-time self modified code in many commercial titles also makes it difficult trying to do more smart optimisations/caching of results in emulation code, thus burning more CPU cycles;&lt;/li&gt;&#xA;&lt;li&gt;having several models and revisions of the hardware being emulated+addons, and having native software/games abusing those particular details of the hardware does not help into adding complexity to an emulator - and often even popular contemporary hardware clones like the popular Timex/TK ZX Spectrum clones use widely in Brasil, Portugal, Poland and USA did not got some of those features right;&lt;/li&gt;&#xA;&lt;li&gt;trying to intercept known &quot;API&quot;s/calls in ROMs and implementing a routine that exists upon leaving with the right memory and CPU registers as the original one is not that easy (for instance for saving/loading &quot;tapes&quot; or for sound);&lt;/li&gt;&#xA;&lt;li&gt;implementing a correct speed emulator, especially in modern operating systems and fast machines is not simple. You can cheat on letting it run the whole block for the whole virtual 50ms as fast you can and then pause till the your reach the real 50ms, however as computers keep getting faster, that strategy can make the emulation behave a little weirdly, especially in games requiring keyboard interaction;&lt;/li&gt;&#xA;&lt;li&gt;getting the sound right is computationally intensive and requires knowledge of math/sound waveforms especially in platforms without dedicated sound chips;&lt;/li&gt;&#xA;&lt;li&gt;having or not toolchains for debugging emulated code. At the time, I was using a text step-by-step debugger, kind of poor's man Turbo Debugger for Z80, written by myself for debugging Z80 implementation bugs;&lt;/li&gt;&#xA;&lt;li&gt;knowing your assembly for the architecture - if one wants to write a emulator, it is easier to have some degree of proficiency on it;&lt;/li&gt;&#xA;&lt;li&gt;more importantly, it is not easy to iron out your own bugs in emulating hardware and the processor. I quite remember that besides me running almost 5000 Z80 software/game snapshots for ironing out bugs, people still found some serious bugs in the emulation after I shared it on the Internet. You need what we call today Unit tests, by the tune of 10K to 20K tests, at least, to get around a 90% stable emulation (and after finding bugs, you may need to debug machine/assembly code to find the actual culprit);&lt;/li&gt;&#xA;&lt;li&gt;If reading snapshots produced by other emulators, you may also need to account for their implementation and possible bugs - from instance in Z80 Spectrum case, for the loosely Z80 snapshot &quot;compression&quot; method, to an actual JPP bug/quirk into saving/loading SNAs that I found out looking at the JPP assembly code and contributed to document it into the comp.sys.sinclar FAQ;&lt;/li&gt;&#xA;&lt;li&gt;Lastly, an obstacle can be access to real actual hardware for testing. You might be more interested in comparing actual emulation results with the real machine than another emulator &lt;em&gt;especially&lt;/em&gt; if implementing obscure functionalities. (I actually had two friends that lent me their original ZX Spectrum 48K. It was not that well documented at the time as it is nowadays. I also contributed into documenting a few things at the time, and had large discussions about it in comp.sys.sinclair )&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There were also some challenges early on back on the day on this matter, including importing the native software, that I tried to document for the ZX Spectrum in a related question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/3314/how-were-the-first-zx-spectrum-games-written/3325#3325&quot;&gt;How were the first ZX Spectrum games written?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2019-04-29T10:50:28.493" LastActivityDate="2019-04-29T10:50:28.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10890" PostTypeId="5" CreationDate="2019-04-28T16:07:16.967" Score="0" Body="&lt;p&gt;Sharp Corporation is a manufacturer of numerous electronic devices, including calculators, personal computers, and computer peripherals.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-28T20:16:01.787" LastActivityDate="2019-04-28T20:16:01.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10891" PostTypeId="4" CreationDate="2019-04-28T16:07:16.967" Score="0" Body="For computers and other devices made by Sharp Corporation" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-28T20:16:10.670" LastActivityDate="2019-04-28T20:16:10.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10892" PostTypeId="5" CreationDate="2019-04-28T16:11:51.797" Score="0" Body="&lt;p&gt;Facit AB was a Swedish manufacturer of mechanical and electronic calculators. It operated as an independent company from 1922 to 1973.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-28T20:15:58.000" LastActivityDate="2019-04-28T20:15:58.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10893" PostTypeId="4" CreationDate="2019-04-28T16:11:51.797" Score="0" Body="For questions about devices made by Facit AB and their subsiduaries" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-04-28T20:16:06.030" LastActivityDate="2019-04-28T20:16:06.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10894" PostTypeId="2" ParentId="7008" CreationDate="2019-04-28T18:45:07.373" Score="0" Body="&lt;p&gt;Arguably, when the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Personal_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM PC&lt;/a&gt; first came out, it was a unique product with no competitor. The closest thing to a competitor on the market at the time would have been the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_III&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple III&lt;/a&gt;. According to the Wikipedia pages I've linked, the Apple III preceded the PC, but the PC could be had for less money. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At my employer at the time, I never saw an Apple III, but PCs started popping up on people's desks. I saw one Apple MacIntosh when it came out (I think purchased just to take a look at it) but no other general-purpose desktop computers. The only other desktop-sized computers used in a business role were dedicated word processing systems (such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Word_processor_(electronic_device)#Dedicated_models&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micom&lt;/a&gt;) (until PCs displaced them). The only general-purpose computers in the company were PDP-11s and VAXes (filling more than one computer room).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it first appeared, the PC was too expensive for the home market, for which there were Commodore 64s and other 6502-based computers more suited to gaming than general-purpose computing. The PC only became a &quot;home&quot; computer when the clones started to appear and the platform could be had for less money.&lt;/p&gt;&#xA;" OwnerUserId="4561" LastEditorUserId="4561" LastEditDate="2019-04-28T23:15:48.917" LastActivityDate="2019-04-28T23:15:48.917" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10895" PostTypeId="1" CreationDate="2019-04-28T19:10:09.257" Score="2" ViewCount="112" Body="&lt;p&gt;I no longer have clear memory of this, but I'm fairly certain I read an article back around 1979 or so published by Hewlett Packard. At the time, they had recently released their &lt;a href=&quot;https://en.wikipedia.org/wiki/HP-41C&quot; rel=&quot;nofollow noreferrer&quot;&gt;41C calculator&lt;/a&gt;. I remember it being on my wish list, but unaffordable (I had the more affordable TI-58C). I believe the article was tied to promotional material for the 41C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC the article depicted someone going through a day with their &quot;personal digital assistant&quot;. At the time, it was total fantasy - there was no public internet, no cellular network, the most powerful hand-held device would have been the HP-41C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;assistant&quot;, if I recall correctly, was depicted to have capabilities very close to what can now be done by an iPhone (given a cellular connection, internet access, and Siri).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to re-read the article to confirm what I think I recall of it. If anyone recognizes the article I'm referring to and has access to it, could they post it (or a reference to it)?&lt;/p&gt;&#xA;" OwnerUserId="4561" LastEditorUserId="4561" LastEditDate="2019-04-28T19:17:22.993" LastActivityDate="2019-04-28T19:17:22.993" Title="HP presage of the PDA revolution" Tags="&lt;history&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10896" PostTypeId="2" ParentId="6603" CreationDate="2019-04-28T20:36:26.890" Score="0" Body="&lt;p&gt;BASIC is/was a good language for simple computational tasks, good for simple business problems and even science/math work. BASIC is also more accessible for novice programmers than more sophisticated languages like C or C++. Where BASIC ran up against its limits was user interface and doing interesting/engaging things with sound or graphics (too slow or cumbersome). The BASIC interpreters I recall were geared primarily to serial console mode I/O. Although they had memory PEEK and POKE which could be used to read/write memory (including mapped display memory or memory-mapped I/O), there is only so much you can do with these techniques. BASIC (with its requirement for programmer-specified line numbers) did not lend itself to writing large programs; beyond a few hundred lines, programming became a major challenge. In a structured language like C, or successors like C++ and C#, a few hundred lines of code is nothing.&lt;/p&gt;&#xA;" OwnerUserId="4561" LastActivityDate="2019-04-28T20:36:26.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10897" PostTypeId="1" AcceptedAnswerId="10910" CreationDate="2019-04-28T23:35:54.307" Score="8" ViewCount="730" Body="&lt;p&gt;The Apple IIc was a compact version of the Apple II that eschewed internal expansion slots in favor of having the popular expansion options already built in, and saving cost and weight. Apple expected it to sell a hundred thousand units per month, but it actually sold only a hundred thousand per year. Writers then and since, have attributed the lack of sales to the market really wanting expandability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's a summary of the historical facts, detailed further on Wikipedia: &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_IIc&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Apple_IIc&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm curious about reasons. Because it seems to me that specialists and enthusiasts, the sort of people likely to be writing about computers, are also likely to care much more about expandability than the average customer; as long as the machine has the options you want, such as eighty columns, the average customer just looking for something that gets the job done, should be happy with that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were considering the purchase of such a machine (admittedly a counterfactual, as teenage me couldn't have afforded a significant fraction of the price of an Apple computer), my reasoning for eschewing the Apple IIc would have been the small screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So Apple was of the opinion was that the IIc should sell well, the typical enthusiast writer was of the opinion that it should sell badly because of the lack of internal expansion slots, and I'm of the opinion that it should sell badly because of the small screen. And the historical outcome was that it sold badly, for whatever reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any evidence regarding why the IIc sold badly? Customer surveys? First-hand accounts from people who sold computers at the time? Anything better than a guess at the reasons?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-04-29T18:36:38.580" Title="Why did the Apple IIc perform badly in the market?" Tags="&lt;history&gt;&lt;apple-ii&gt;&lt;market&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="10898" PostTypeId="1" AcceptedAnswerId="10904" CreationDate="2019-04-29T04:22:34.220" Score="4" ViewCount="190" Body="&lt;p&gt;New 65C816 datasheets say that Vih (for the data bus in particular) is 0.8Vdd, i.e. not TTL-compaible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Old data sheets (for example, the one published in Apple IIgs Hardware Reference) say that at 5V +/- 5%, Vih is 2.0V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are old 65C816s TTL compatible? Was there some kind of change?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There has been a lot of talk about this but I can't find anything conclusive.&lt;/p&gt;&#xA;" OwnerUserId="7486" LastActivityDate="2019-04-29T11:22:08.477" Title="65C816: Inputs TTL-compatible?" Tags="&lt;6502&gt;&lt;mos-650x&gt;&lt;65816&gt;&lt;65c02&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10899" PostTypeId="2" ParentId="8442" CreationDate="2019-04-29T07:22:10.943" Score="2" Body="&lt;p&gt;I had an Amstrad 464, which has an internal tape deck. It was quite common to copy tapes using a twin tape deck. Most portable 'ghetto blasters' in the mid 80s had two decks. Normally only one could record. Some even had a fast copy mode where both would run at double speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Game copies would usually work for the first couple of generations, but then would become too error prone. However the Spectrum was more sensitive to this because of the need for external tape players.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As high speed loaders became more common, this became harder to do but still often worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later we used a Multiface attachment to dump memory to disk, which worked fine for any game that wasn't multiload.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2019-04-29T07:22:10.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10900" PostTypeId="1" AcceptedAnswerId="10902" CreationDate="2019-04-29T07:35:34.793" Score="13" ViewCount="1209" Body="&lt;p&gt;I recently discovered that the SCSI protocol was, in fact, an improvement on the SASI protocol, which apparently predates SCSI by &lt;a href=&quot;https://en.m.wikipedia.org/wiki/SCSI&quot; rel=&quot;nofollow noreferrer&quot;&gt;only a couple of years&lt;/a&gt;, appearing in 1978 (but only publicly in 1981). It was only shortly after, in 1982, that the SCSI protocol appeared. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That makes me wonder whether SASI was commercially successful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What was the popularity, if any, of the SASI protocol?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2019-04-29T20:21:06.863" LastActivityDate="2019-05-13T04:55:07.270" Title="Was the ancestor of SCSI, the SASI protocol, nothing more than a draft?" Tags="&lt;scsi&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10901" PostTypeId="2" ParentId="8442" CreationDate="2019-04-29T08:32:47.413" Score="2" Body="&lt;p&gt;The Commodore 64 was somewhat unusual in that off-the-shelf tape recorders didn't work with it, so you were forced to use the Commodore Datasette unit or later clones thereof. Also tapes copied in a normal twin-deck machine wouldn't load using the Datasette. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One solution was a hardware device that plugged into the cassette port and to which two Datasettes were connected. As the game loaded on one, it could be recorded on the other. These were widely available via small ads in UK computer magazines.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastEditorUserId="519" LastEditDate="2019-04-29T19:03:48.687" LastActivityDate="2019-04-29T19:03:48.687" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10902" PostTypeId="2" ParentId="10900" CreationDate="2019-04-29T09:06:02.223" Score="17" Body="&lt;p&gt;Some parts of SASI were used in the Atari ST family’s ACSI system, in particular for hard drives connected to that interface — see &lt;a href=&quot;https://archive.org/details/Atari_ST_ACSI&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Application Notes on the Atari Computer System Interface&lt;/em&gt;&lt;/a&gt; for details. Whether that counts as “popular” depends on your interpretation and the markets you’re interested in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SASI controllers and hard drives were used in minis too, and at least available &lt;a href=&quot;https://archive.org/search.php?query=SASI%20interface&amp;amp;sin=TXT&amp;amp;and[]=collection%3A%22magazine_rack%22&quot; rel=&quot;noreferrer&quot;&gt;for many early micros&lt;/a&gt;, and SCSI-1 was designed to be backwards-compatible with it and many SASI controllers were compatible with SCSI-1.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-04-29T09:49:11.360" LastActivityDate="2019-04-29T09:49:11.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10903" PostTypeId="2" ParentId="6603" CreationDate="2019-04-29T10:48:20.550" Score="0" Body="&lt;p&gt;The personal computing market for which BASIC was a lingua franca was a pioneering one, in which it was important for individual computer users to learn to program in order to be able to put their computers to some productive use. When the commercial software industry evolved to the point of being able to serve all of the needs of an increasing share of people from the latest waves of arrivals to the world of computing, those who would have been the target audience for BASIC in an earlier era started to leak out at both ends into adjacent groups: non-programmer computer users, and commercial programmers (who could afford to pay for tools and used the languages of their choice to suit quality and performance needs and their preferences, not just whatever came with the system.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC didn't go away overnight -- The factors that led to its demise got going in the early to mid 80s, and yet there were still enough people learning BASIC for Visual Basic, which launched in 1991, to have a huge &quot;built-in&quot; audience that contributed to its success as a product through the 90s.&lt;/p&gt;&#xA;" OwnerUserId="8508" LastEditorUserId="8508" LastEditDate="2019-04-29T10:54:43.480" LastActivityDate="2019-04-29T10:54:43.480" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10904" PostTypeId="2" ParentId="10898" CreationDate="2019-04-29T11:22:08.477" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Are old 65C816s TTL compatible?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If their Vih is 2.0v, they are certainly TTL-compatible.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was there some kind of change?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;All WDC chips seem to be verilog-reimplemented, so when they synthesized them into netlist, they've intentionally dropped TTL-compatibility of IO-pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for that might be the need to have chips working in 1.8V..5.0V range (as per datasheet). The input buffers that support TTL levels at 5.0V and simultaneously have reasonable ranges at 1.8V might be either too complex or simply unavailable for the technology WDC uses.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-04-29T11:22:08.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10905" PostTypeId="2" ParentId="10897" CreationDate="2019-04-29T16:23:25.110" Score="2" Body="&lt;p&gt;Someone sent me a link to this review of the two Apple II models at the time, which seems to answer the question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.atarimagazines.com/compute/issue50/227_1_Evolutionary_To_The_Core_The_Apple_IIc_Heads_For_Home.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.atarimagazines.com/compute/issue50/227_1_Evolutionary_To_The_Core_The_Apple_IIc_Heads_For_Home.php&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Concurrent with the announcement of the new computer, Apple cut the price of a IIe almost in half, down to $995.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I had been wondering why customers wouldn't be willing to forgo expansion slots for a lower price. But when the machine that does have the expansion slots is three hundred dollars &lt;em&gt;cheaper&lt;/em&gt;? Mystery solved! The only remaining mystery is why Apple would expect a different result.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-04-29T16:23:25.110" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10906" PostTypeId="2" ParentId="10900" CreationDate="2019-04-29T16:51:01.717" Score="11" Body="&lt;p&gt;The SASI protocol, if anything, was used by &quot;The Sider&quot; hard drive for the Apple II series of computers. Though hard drives on the Apple II weren't very common, it wasn't until 1985 that &quot;The Sider&quot; appeared and was &lt;a href=&quot;https://apple2history.org/history/ah09/&quot; rel=&quot;noreferrer&quot;&gt;considerably less expensive&lt;/a&gt; than its predecessors and as a result became rather popular in the Apple II community.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, The Sider was based on the &lt;a href=&quot;http://www.swtpc.com/mholley/SASI/XEBEC.htm&quot; rel=&quot;noreferrer&quot;&gt;Xebec controller&lt;/a&gt; which was SASI before the Sider appeared, so production numbers would certainly exceed the Apple numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not aware of other commercial implementations of SASI, but from the Xebec sales alone it would qualify as somewhat successful if anything.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2019-04-29T16:51:01.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10907" PostTypeId="1" AcceptedAnswerId="10908" CreationDate="2019-04-29T17:37:29.793" Score="25" ViewCount="5842" Body="&lt;p&gt;I've &lt;a href=&quot;https://askubuntu.com/questions/313592/how-to-install-applications-to-a-separate-hdd/1139085?noredirect=1#comment1887898_1139085&quot;&gt;been told&lt;/a&gt; that Unix started out as a Phone Switch OS and was not a multi-user OS at some time in its infancy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I'm always willing to learn new things, are there any greybeards around here &lt;s&gt;older than me&lt;/s&gt; that remember this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;Bonus points if you can find any documentation to back it up.  Scans of old manuals count as my quick googling didn't turn up anything on-line...&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="10632" LastActivityDate="2021-03-29T16:21:24.507" Title="Was Unix ever a single-user OS?" Tags="&lt;history&gt;&lt;unix&gt;" AnswerCount="6" CommentCount="13" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="10908" PostTypeId="2" ParentId="10907" CreationDate="2019-04-29T18:31:49.447" Score="36" Body="&lt;p&gt;Going from “AT&amp;amp;T made phone switches” to the idea that Unix was intended to drive phone switches is quite a leap. The creators of Unix described its creation and development in some detail, &lt;em&gt;e.g.&lt;/em&gt; in &lt;a href=&quot;http://webarchive.loc.gov/all/20100506231949/http://cm.bell-labs.com/cm/cs/who/dmr/hist.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The Evolution of the Unix Time-sharing System&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What we wanted to preserve was not just a good environment in which to do programming, but a system around which a fellowship could form. We knew from experience that the essence of communal computing, as supplied by remote-access, time-shared machines, is not just to type programs into a terminal instead of a keypunch, but to encourage close communication.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So Unix was really a scratch-your-own-itch development at first, and intended to be multi-process and multi-user from the beginning. Of course the costs involved in developing it (mostly buying hardware) had to be justified, which quickly led to the development of text-processing software and various other developments later on.&lt;/p&gt;&#xA;&lt;p&gt;You can &lt;a href=&quot;https://github.com/jserv/unix-v1/blob/master/README.md&quot; rel=&quot;noreferrer&quot;&gt;run V1 Unix on an emulated PDP-11&lt;/a&gt; on a modern computer; the default configuration supports 8 logins. A partial reconstruction of the original &lt;a href=&quot;https://github.com/DoctorWkt/pdp7-unix/blob/master/README.md&quot; rel=&quot;noreferrer&quot;&gt;PDP-7 Unix&lt;/a&gt; is also available. The latter seemingly supported multiple users and processes, but only one of each at a time (ten process slots were available but only one process was swapped in at a time); that analysis is based on the source code as preserved in the reconstruction, but other recollections (closer to the time) differ. Thus Steve Bourne wrote in &lt;a href=&quot;https://landley.net/history/mirror/unix/systemvenvironment.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The Unix System V Environment&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A cast-off PDP 7 with a 340 display was available but the PDP 7 provided only an assembler and a link editor. One user at a time could use the computer, each user having exclusive use of the machine. This environment was crude and parts of a single user UNIX system were soon forthcoming. The space travel program was rewritten for the PDP 7 and an assembler and rudimentary operating system kernel were written and cross assembled for the PDP 7 on the GECOS system. This early system did not provide time-sharing. indeed, much like the modern personal computers, the PDP 7 hardware was simple and provided no support for such activities. An assembler and a command interpreter were soon available. This file system provided a name structure that was a directed graph. A single directory was used for all subdirectories and links made through this directory.&lt;/p&gt;&#xA;&lt;p&gt;Cross assembling meant using two computer systems and carrying paper tapes of programs from one to the other each time a change was made. The system was soon bootstrapped onto the PDP 7. The process creation primitive, fork, and process images were added to the system during this rewrite. Essential utilities, such as file copy, edit, remove, and print were soon available. This system supported two people working at the same time and the term UNIX was coined by Brian Kernighan in 1970.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Thus it appears that the system on the PDP-7 was initially single-user, but that was a short phase during the initial development, and eventually Unix on the PDP-7 supported two users simultaneously; this also matches Ritchie’s recollections in the paper linked above:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Processes (independently executing entities) existed very early in PDP-7 Unix. There were in fact precisely two of them, one for each of the two terminals attached to the machine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Presumably the system was still limited to running a single process in memory at any given time, even if two users could log in in parallel. Before Unix moved to the PDP-11, its developers had even managed to build two B interpreters (including one with virtual memory) and used that to write a few utilities!&lt;/p&gt;&#xA;&lt;p&gt;Diomidis Spinellis’ &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo&quot; rel=&quot;noreferrer&quot;&gt;Unix history repo&lt;/a&gt; contains source code for most historical Unix releases, including PDP-7 Unix.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-04-30T08:37:23.480" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="10909" PostTypeId="2" ParentId="10907" CreationDate="2019-04-29T18:36:22.300" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://www.soemtron.org/pdp7.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;From this page&lt;/a&gt;, Wikipedia and elsewhere, it is pretty clear that the first Unix system was on a PDP-7. &lt;s&gt;As far as I can tell, the PDP-7 (unlike the PDP-11 where Unix became more than just a one-off system) was not a multi-user system.&lt;/s&gt; Apparently, the PDP-7 running Unix could support two terminals. So Unix has always been a multi-user operating system, though of course hardware dependent - if you ran it on a system with only one console then it was &lt;em&gt;effectively&lt;/em&gt; a single-user system. I doubt there is much extant documentation form the pre-PDP-11 era, particularly since little was released publicly until a few years after Unix was first written. Or as &lt;a href=&quot;http://gunkies.org/wiki/PDP-11#Unix_based_Operating_Systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;this PDP-11 history page describes it&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;These are the original Bell Laboratories releases of Unix; the first 4 were only internal to Bell, the Fifth saw limited distribution outside it, and the Sixth took over the world.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;On the other hand, plenty of multi-user operating systems - Unix, Linux, MP/M, MP/M-86 - and I am sure many other mini-computer &amp;amp; micro-computer operating systems - have been used as single-user systems over the years by power users as an easy way to get a multi-tasking system for increased productivity, especially prior to functional versions of Microsoft Windows.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2019-04-30T01:52:52.493" LastActivityDate="2019-04-30T01:52:52.493" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10910" PostTypeId="2" ParentId="10897" CreationDate="2019-04-29T18:36:38.580" Score="6" Body="&lt;p&gt;In no particular order, some of the issues included:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Market Timing: The IIc was introduced near the end of the 8-bit era, after the &lt;a href=&quot;https://en.wikipedia.org/wiki/1984_(advertisement)&quot; rel=&quot;noreferrer&quot;&gt;iconic introduction&lt;/a&gt; of the Macintosh.&lt;/li&gt;&#xA;&lt;li&gt;Competition: The IIc competed with the Apple IIe, the Apple IIGS, and the Macintosh LC with Apple IIe card.&lt;/li&gt;&#xA;&lt;li&gt;Price: The IIc was $1,295 while the IIe was $995. Clones like the visually similar Laser 128 were even cheaper ($395).&lt;/li&gt;&#xA;&lt;li&gt;Hardware Compatibility: Early models of the IIc would not work with certain 3rd party 1200 baud modems, and Apple did not fix all affected motherboards. &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_IIc#Serial_port_timing_fix&quot; rel=&quot;noreferrer&quot;&gt;Apple would swap affected motherboards for users who could prove they had an incompatible serial device&lt;/a&gt;.&quot;&lt;/li&gt;&#xA;&lt;li&gt;Hardware Compatibility: The IIe, IIc, and IIc Plus each had different, mutually incompatible memory expansions.&lt;/li&gt;&#xA;&lt;li&gt;Software Compatibility: With no ability to fit the &lt;a href=&quot;https://en.wikipedia.org/wiki/Z-80_SoftCard&quot; rel=&quot;noreferrer&quot;&gt;Z-80 SoftCard&lt;/a&gt;, the IIc could not run CP/M and WordStar. &quot;&lt;a href=&quot;https://archive.org/stream/byte-magazine-1986-10/1986_10_BYTE_11-10_Public_Domain_Powerhouses#page/n95/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;People wanted their expansion slots&lt;/a&gt;.&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also, I never saw a IIc in a school, maybe because its portability made it too easy for a student to walk off with one.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2019-04-29T18:36:38.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10911" PostTypeId="1" AcceptedAnswerId="10913" CreationDate="2019-04-29T21:56:49.303" Score="6" ViewCount="705" Body="&lt;p&gt;What was considered the best practice, or &quot;military-grade&quot; procedure, for protecting secrets stored on floppy disks when disposing of the old disks?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-04-30T02:26:12.403" Title="How-to destroy sensitive data on floppies?" Tags="&lt;floppy-disk&gt;&lt;security&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10912" PostTypeId="2" ParentId="10907" CreationDate="2019-04-30T00:54:41.473" Score="7" Body="&lt;p&gt;Unix was almost certainly never a single-user system.  PDP-7 Unix supported at least two users (likely Ken and Dennis).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As evidence, I quote &lt;a href=&quot;https://www.cs.dartmouth.edu/~doug/reader.pdf&quot; rel=&quot;noreferrer&quot;&gt;Doug McIlroy's paper&lt;/a&gt; on the history of research Unix:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Doug (M. Douglas) McIlroy exercised the right of a department head to&#xA;  muscle in on the original two-user PDP-7 system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(The quote is taken from section 1.1, &lt;em&gt;People&lt;/em&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, now I've poked around a little more, here's some other evidence, from Dennis Ritchie's paper &lt;a href=&quot;http://www.read.seas.harvard.edu/~kohler/class/aosref/ritchie84evolution.pdf&quot; rel=&quot;noreferrer&quot;&gt;The Evolution of the Unix Time-sharing System&lt;/a&gt;; in the section on Process Control:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Processes (independently executing entities) existed very early in&#xA;  PDP-7 Unix. There were in fact precisely two of them, one for each of&#xA;  the two terminals attached to the machine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-04-30T01:16:07.520" LastActivityDate="2019-04-30T01:16:07.520" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="10913" PostTypeId="2" ParentId="10911" CreationDate="2019-04-30T02:26:12.403" Score="11" Body="&lt;p&gt;This document from the NSA, &lt;a href=&quot;https://www.nsa.gov/Portals/70/documents/resources/everyone/media-destruction/storage-device-declassification-manual.pdf?ver=2018-08-07-110007-937&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;NSA/CSS Storage Sanitization Manual: Purpose and Scope&lt;/em&gt;&lt;/a&gt;, even though from 2014, is a good summary of how governments have been doing secure destruction of media for a long time: note that all the methods are very old-school! Other government agencies, both in the US and internationally, likely use very similar methods. As far as I can tell, the major changes have been in adding new types of media in the recommendations (and altering the list of manufacturers and devices.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding diskettes in particular, the procedures are detailed on page 5:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[3. Magnetic Disks: Magnetic disks include hard disk drives and diskettes.] [...]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;b. Diskettes&lt;/p&gt;&#xA;  &#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;1) Sanitization: Sanitize diskettes by using one of the following&#xA;    procedures. Remove all labels or markings that indicate previous use&#xA;    or classification.&lt;/p&gt;&#xA;    &#xA;    &lt;blockquote&gt;&#xA;      &lt;p&gt;a) Degaussing: Degauss the diskettes in an NSA/CSS evaluated&#xA;      degausser; see Reference b.&lt;/p&gt;&#xA;      &#xA;      &lt;p&gt;b) Disintegration: Disintegrate diskettes using an NSA/CSS evaluated&#xA;      disintegrator; see Reference d.&lt;/p&gt;&#xA;      &#xA;      &lt;p&gt;c) Incineration: Material must be reduced to ash.&lt;/p&gt;&#xA;      &#xA;      &lt;p&gt;d) Shredding: Shred diskettes using an NSA/CSS evaluated crosscut&#xA;      shredder; see Reference e. Remove diskette cover and metal hub prior&#xA;      to shredding.&lt;/p&gt;&#xA;    &lt;/blockquote&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &#xA;  &lt;p&gt;[...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So you can take your pick of degaussing the disk, shredding it in a paper shredder, disintegrating it (apparently thinner but longer shreds), or burning it. If you're really interested in what devices the NSA approves, &lt;a href=&quot;https://www.nsa.gov/resources/everyone/media-destruction/&quot; rel=&quot;noreferrer&quot;&gt;they are listed here.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2019-04-30T02:26:12.403" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="10914" PostTypeId="1" AcceptedAnswerId="10916" CreationDate="2019-04-30T08:22:53.940" Score="14" ViewCount="2292" Body="&lt;p&gt;A while ago I did read on the web a page whose topic was more or less:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Real men write [insert lowest level language here]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(a similar page would be &lt;a href=&quot;https://www.reddit.com/r/ProgrammerHumor/comments/89pu1f/real_men_use_assembler/&quot; rel=&quot;noreferrer&quot;&gt;this Reddit thread&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we quickly tour some of the rudimentary methods:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;assembly, yes&lt;/li&gt;&#xA;&lt;li&gt;machine code and binary, certainly &lt;/li&gt;&#xA;&lt;li&gt;punch cards and mechanical switches, yes &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I can't find anything more rudimentary than mechanical switches but I don't know in the end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is the most rudimentary input method a platform has ever been programmed in?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clarification:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am asking about what used to be the most tedious way to program a machine, whether it would be a programming language difficult to read for human beings, a physical approach such as using punch cards, or even at the electrical level such as directly connecting cables or soldering.&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2019-04-30T20:03:43.957" LastActivityDate="2019-05-07T22:01:54.260" Title="What is the most rudimentary input method a platform has ever been programmed in?" Tags="&lt;programming&gt;" AnswerCount="9" CommentCount="13" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10915" PostTypeId="2" ParentId="10900" CreationDate="2019-04-30T08:34:52.487" Score="6" Body="&lt;p&gt;The point is: When SASI was en vogue (and that was only a very short timeframe, because technology was soon superseded with SCSI and the simpler ST506 and later ATA standards), hard disks weren't very popular for low and mid-range computers.&lt;/p&gt;&#xA;&lt;p&gt;If you look at early hard disks, for a short time (a time frame of maybe 2-3 years in the early 1980s) SASI was the &lt;em&gt;only&lt;/em&gt; relevant standard, so market share must have been close to 100%.&lt;/p&gt;&#xA;&lt;p&gt;Development of early hard disk interfaces for small computers was simply so short that technology developed much faster than standards could really establish themselves in the market.&lt;/p&gt;&#xA;&lt;p&gt;Some relatively popular computers like the Sharp XC60000 and the Commodore  early hard drives for the PET (&lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_D9060&quot; rel=&quot;nofollow noreferrer&quot;&gt;D9090&lt;/a&gt; and similar) used SASI hard disks.&lt;/p&gt;&#xA;&lt;p&gt;Note that the change from SASI to SCSI &lt;em&gt;was only a name change&lt;/em&gt;, there were no technical changes applied to the interface - So starting in 1981, SCSI and SASI were &lt;strong&gt;effectively the same thing&lt;/strong&gt;, just with a standardized name. Seen from this end, SASI was actually &lt;em&gt;very popular&lt;/em&gt;, just under a standardized name that removed &amp;quot;Shugart Associates&amp;quot; from the abbreviation.&lt;/p&gt;&#xA;&lt;p&gt;Wikipedia knows the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Until at least February 1982, ANSI developed the specification as &amp;quot;SASI&amp;quot; and &amp;quot;Shugart Associates System Interface&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;However, the committee documenting the standard would not allow it to be named after a company. Almost a full day was devoted to agreeing to name the standard &amp;quot;Small Computer System Interface&amp;quot;, which Boucher intended to be pronounced &amp;quot;sexy&amp;quot;, but ENDL's Dal Allan pronounced the new acronym as &amp;quot;scuzzy&amp;quot; and that stuck.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="780" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-05-01T10:42:38.770" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10916" PostTypeId="2" ParentId="10914" CreationDate="2019-04-30T09:02:14.413" Score="32" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ENIAC&quot; rel=&quot;noreferrer&quot;&gt;ENIAC&lt;/a&gt; was programmed by physically wiring the &quot;program&quot; on a plugboard:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9pukp.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9pukp.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;(picture from Wikipedia: &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/7/7e/Eniac_Aberdeen.jpg&quot; rel=&quot;noreferrer&quot;&gt;https://upload.wikimedia.org/wikipedia/commons/7/7e/Eniac_Aberdeen.jpg&lt;/a&gt;) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And since the question is not limited to digital computing, analog(ue) computers were often purpose-built; there is probably nothing more rudimentary than &lt;em&gt;directly building&lt;/em&gt; your machine to perform whatever it is you need it to perform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, if they were &quot;programmable&quot;, you &quot;programmed&quot; (speaking about electronic ones) them by connecting and adjusting parameters of electronic components, amplifiers etc; often (but not necessarily) using a plugboard:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tmbX9.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tmbX9.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(picture from Wikipedia: &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/6/61/EAI_580_analog_computer_plugboard_at_CHM.jpg/249px-EAI_580_analog_computer_plugboard_at_CHM.jpg&quot; rel=&quot;noreferrer&quot;&gt;https://upload.wikimedia.org/wikipedia/commons/thumb/6/61/EAI_580_analog_computer_plugboard_at_CHM.jpg/249px-EAI_580_analog_computer_plugboard_at_CHM.jpg&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="476" LastEditorUserId="476" LastEditDate="2019-04-30T09:09:05.483" LastActivityDate="2019-04-30T09:09:05.483" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="10917" PostTypeId="2" ParentId="10907" CreationDate="2019-04-30T09:49:47.690" Score="1" Body="&lt;p&gt;That one sentence in my comment sure did blow up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP machines mentioned in the other answers were commercially available early on, and indeed used by Bell Labs (AT&amp;amp;T) in the development of what later became known as UNIX. But AT&amp;amp;T at that time was a big company, and had started the development of its own computer - the &lt;a href=&quot;https://en.wikipedia.org/wiki/3B_series_computers&quot; rel=&quot;nofollow noreferrer&quot;&gt;3B series&lt;/a&gt;. These machines were the in-house solution, whereas the PDP series came from DEC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the phone switch, that would be the 4ESS and later 5ESS. These had a 3B20D (duplex) as their Administrative Node. Duplex doesn't mean &quot;two users&quot; here, but two CPU cores running in lockstep. A failure in one half would not take the switch down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AT&amp;amp;T at this time was barred from doing any other business in the US but providing Common Carrier phone services. So it made perfect sense to use UNIX for its primary business. Of course, Bell Labs was very much an like academic environment, and it may not always have been directly focused on the larger AT&amp;amp;T business interests.&lt;/p&gt;&#xA;" OwnerUserId="10933" LastActivityDate="2019-04-30T09:49:47.690" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10918" PostTypeId="2" ParentId="10914" CreationDate="2019-04-30T10:41:17.093" Score="21" Body="&lt;p&gt;On many early machines it was common to enter a minimal bootloader via switches on the front panel. The switches represented binary bits, with another switch to enter each word and advance the address counter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course any arbitrary code could be entered that way. It was, for example, possible to load a BASIC interpreter that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd say that was more rudimentary and laborious than even the plug boards mentioned by Radovan, given that plug boards are non-volatile but the switches needed to be flipped hundreds of times every time the computer was powered up or the memory was overwritten.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yjlmS.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yjlmS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-04-30T10:41:17.093" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10919" PostTypeId="1" AcceptedAnswerId="10920" CreationDate="2019-04-30T12:30:26.957" Score="12" ViewCount="1505" Body="&lt;p&gt;Back in the day with my A2500/30, I always wanted to get the 68030 versions of software if I could because presumably I'd be able to get a few percentage more performance in some cases. However, I get the sense that most non-AGA software was always compiled with the 68000 as a target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it would have been nice if I could have soft-kicked a Kickstart for the '020+ if I was running on the '030, but I don't recall ever coming across one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there ever a KickStart built for 68020+ instructions? If so, were they only usable on the AGA machines or was it possible to run on an ECS A2000 (albeit with an A2630)?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2019-05-01T03:39:21.580" Title="Was there ever a Kickstart that took advantage of 68020+ instructions that would work on an A2000?" Tags="&lt;amiga&gt;&lt;amiga-kickstart&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10920" PostTypeId="2" ParentId="10919" CreationDate="2019-04-30T13:26:06.557" Score="5" Body="&lt;p&gt;Cloanto maintain a list of &lt;a href=&quot;https://cloanto.com/amiga/roms/&quot; rel=&quot;noreferrer&quot;&gt;known Amiga ROMs&lt;/a&gt;, a few of which require a 68020 or even a 68020 + MMU. The &lt;a href=&quot;https://cloanto.com/amiga/roms/faq.html&quot; rel=&quot;noreferrer&quot;&gt;associated FAQ&lt;/a&gt; suggests that some A3000 ROMs use 68030-MMU-specific instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga Forever &lt;a href=&quot;https://www.amigaforever.com/kb/13-114&quot; rel=&quot;noreferrer&quot;&gt;description of differences between Amiga ROMs&lt;/a&gt; says that most ROMs can be used on other systems, as long as the required CPU is available, and the ROM fits (the document assumes that the ROM is loaded as a ROM, not soft-kicked). An AGA ROM should boot an ECS system, but won’t support all the ECS features (and obviously the system won’t support the AGA features).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga Forever license &lt;a href=&quot;https://www.amigaforever.com/kb/13-145&quot; rel=&quot;noreferrer&quot;&gt;allows using its ROMs in real Amiga computers&lt;/a&gt;, so that would be a not-too-expensive way for you to try various ROMs. (I haven’t checked whether it actually includes 68020+ ROMs).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-04-30T13:26:06.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10921" PostTypeId="2" ParentId="10919" CreationDate="2019-04-30T14:34:41.050" Score="10" Body="&lt;p&gt;The AmigaOS had a pretty small and specific set of features to allow the system to easily adapt to upgraded CPU's, either shipped in upgraded systems from Commodore, or added to the system using hardware accelerators. These did not rely on special binary versions of Kickstart. The main features were:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Floating point hardware support via dynamically linked math libraries. A major advantage of accelerated hardware was the FPU supported by or included with 020+ processors. This was used automatically by applications that used the system math libraries.&lt;/li&gt;&#xA;&lt;li&gt;Use of &lt;code&gt;SetPatch&lt;/code&gt; at system boot. This command patches the system software, and includes support for loading a CPU specific library from LIBS:, such as &lt;code&gt;68040.library&lt;/code&gt;. Since this happens at early boot, it allows any changes needed by the system to support the specific CPU to happen before applications are loaded.&lt;/li&gt;&#xA;&lt;li&gt;Use of the &lt;code&gt;CPU&lt;/code&gt; command. This can be run at boot, or any other time, to detect and exploit CPU specific features, including CACHE control, Burst memory access, and relocating Kickstart ROM to higher speed 32-bit RAM.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;These features provide enough flexibility at boot time that it was never necessary to build Kickstart ROM images for specific CPUs. Essentially, Kickstart exists in 3 basic forms for: AGA Amigas, ECS/OCS Amigas, and the A4000T. The reason the A4000T is special is just the addition of a 2nd hardware interface for HDDs (IDE+SCSI).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, the best thing to do for a 68030 Amiga with ECS is to include &lt;code&gt;LIBS:68030.library&lt;/code&gt; on your boot disk, run &lt;code&gt;SetPatch&lt;/code&gt;, and run the &lt;code&gt;CPU&lt;/code&gt; command with parameters to enable both DATA and INST caches and the FASTROM option. This should give you the stability you need from the patches and the increased performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of this is to imply that you couldn't create a custom Kickstart for a 68030 based Amiga that included some modules compiled (or optimized) for that CPU in the ROM. It is possible, though not trivial to assemble your own Kickstart image using whatever modules you like. But few, if any, standard Kickstart modules ever warranted this special attention. And custom Kickstarts like this usually just included CPU specific patches for added stability - &lt;strong&gt;essentially moving some of the &lt;code&gt;SetPatch&lt;/code&gt; functionality into the ROM&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-05-01T03:39:21.580" LastActivityDate="2019-05-01T03:39:21.580" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="10922" PostTypeId="2" ParentId="10914" CreationDate="2019-04-30T17:18:42.363" Score="9" Body="&lt;p&gt;I'll vote diode ROM matrices, soldered in place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arguably, hardwiring the data bus to NOP to free run the CPU counts as well, but some may consider that an outlier as it's just &quot;one instruction&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, yea, hardwiring your code, &quot;coding with sparks&quot;, doesn't get more basic than that.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2019-04-30T17:18:42.363" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10923" PostTypeId="2" ParentId="10914" CreationDate="2019-04-30T18:36:49.367" Score="5" Body="&lt;p&gt;Two entries.  The Jacquard Loom. Or the IBM 407.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Jacquard loom could be &quot;programmed&quot; by a sequence of punched cards to produce the same woven pattern over and over again.  The punched cards were not made out of cardboard, but the idea is similar.  &lt;a href=&quot;https://en.wikipedia.org/wiki/Jacquard_loom&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia Article&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM 407 was a punch card driven accounting machine.  The data was on punched cards, but the &quot;program&quot; was not.  A removable plugboard carried a collection of wire patchcords that connected the electronics in a certain way.  By removing one plugboard and replacing it with another,  the behavior of the machine could be radically altered.  This could be thought of as &quot;loading a different program&quot;.  &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_407&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia Article&lt;/a&gt;.  Plugboards for different standard functions of the machine were kept available for operators to make use of.  Coming up with a new plugboard is analogous to &quot;programming the 407&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other answers make reference to the use of plugboards in early computers, like the ENIAC.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2019-05-07T10:57:04.923" LastActivityDate="2019-05-07T10:57:04.923" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10924" PostTypeId="2" ParentId="10919" CreationDate="2019-04-30T22:23:52.910" Score="2" Body="&lt;p&gt;Essentially, none of the main Kickstart releases used anything other plain 68000 code. I'm unsure of the A3000's special &quot;Super kickstart&quot;, but every other main Kickstart release will boot just fine on a 68000. This allows any Kickstart version to be used on any CPU, meaning 68000-based Amigas can be upgraded to Kickstart 3.1, and even the latest Kickstart 3.1.4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding hardware support, Kickstart 3 does support the ECS features - it had additional support for AGA features which would obviously not be used on an OCS or ECS machine, but the older chipsets are still fully supported.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some newer versions of the OS (3.5 and 3.9) replace many of the Kickstart modules with updated versions that do use the features of higher CPUs, so they won't run on a plain 68000. But these are loaded into RAM, not present in the Kickstart chip itself. There have been various community-made Kickstarts based on 3.9 modules - these will require a 68020, but were never official Kickstart versions.&lt;/p&gt;&#xA;" OwnerUserId="6681" LastActivityDate="2019-04-30T22:23:52.910" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="10925" PostTypeId="1" AcceptedAnswerId="10926" CreationDate="2019-05-01T00:28:28.663" Score="48" ViewCount="5052" Body="&lt;p&gt;From my understanding, the caret character (&lt;code&gt;^&lt;/code&gt;) has been used to indicate &lt;kbd&gt;Ctrl&lt;/kbd&gt;-key combinations since the early UNIX days, if not earlier. Why was this character used to indicate this? Was it simply that the symbol wasn't being used for anything else at the time, or is there an etymological history where that makes sense?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some things have used alternate notation; for example, Emacs stands out for using &lt;code&gt;C-&lt;/code&gt; instead, and many user manuals simply write &lt;code&gt;control-&lt;/code&gt; or &lt;code&gt;ctrl-&lt;/code&gt;, much as how &lt;code&gt;alt-&lt;/code&gt; is still commonplace (a notable exception being Apple's modern use of &lt;code&gt;⌥&lt;/code&gt; for &lt;kbd&gt;Option&lt;/kbd&gt;, and similarly &lt;code&gt;⌘&lt;/code&gt; for &lt;kbd&gt;Command&lt;/kbd&gt;, which of course used to be represented with the Apple logo instead, with both open and filled variants on the earliest Apple computers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.merriam-webster.com/dictionary/caret&quot; rel=&quot;noreferrer&quot;&gt;dictionary definition of caret&lt;/a&gt; doesn't make any nod to this usage, and instead only offers:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;a wedge-shaped mark made on written or printed matter to indicate the place where something is to be inserted&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and while Wikipedia describes the &lt;a href=&quot;https://en.wikipedia.org/wiki/Control_character#In_ASCII&quot; rel=&quot;noreferrer&quot;&gt;usage as a control character&lt;/a&gt; it states nothing about the history of this usage so far as I can find.&lt;/p&gt;&#xA;" OwnerUserId="4083" LastEditorUserId="4083" LastEditDate="2019-05-02T21:12:18.740" LastActivityDate="2019-05-02T21:12:18.740" Title="Why do we use caret (^) as the symbol for ctrl/control?" Tags="&lt;terminology&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="10926" PostTypeId="2" ParentId="10925" CreationDate="2019-05-01T01:25:00.897" Score="42" Body="&lt;p&gt;We use caret because the 1968 version of ASCII replaced the perfectly fine up-arrow (previously used for indicating control characters) with a lousy caret, at the same code value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the &lt;em&gt;up-arrow, letter&lt;/em&gt; convention originated with DEC operating systems.   The primary need was not documentation, but for echoing something printable (and preferably easily recognizable) when a control character is typed on the keyboard.  Bear in mind that the I/O device at this time was something like a teletype.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I don't think there's anything special about the choice; as far as I known it was a semi-arbitrary decision that stuck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp6/PDP-6_TimsharingBroch.pdf&quot; rel=&quot;noreferrer&quot;&gt;This 1965 brochure for the PDP-6 Monitor&lt;/a&gt; shows the &lt;em&gt;uparrow, C&lt;/em&gt; convention for &lt;kbd&gt;control&lt;/kbd&gt;-&lt;kbd&gt;C&lt;/kbd&gt;, on page 4:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wOos1.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wOos1.png&quot; alt=&quot;Image from brochure&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="6528" LastEditDate="2019-05-02T08:56:57.317" LastActivityDate="2019-05-02T08:56:57.317" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="10928" PostTypeId="1" CreationDate="2019-05-01T10:52:44.717" Score="8" ViewCount="362" Body="&lt;p&gt;SetPatch runs as the first command in the Startup-Sequence when Amiga boots up. It applies patches to the code in ROM to fix bugs and also enable features if necessary. For example, I seem to remember that the advanced fetch modes for Chip RAM DMA under AGA only get enabled by SetPatch and/or IPrefs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a list detailing exactly which patches each version of SetPatch applies and under which conditions?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2019-05-01T10:52:44.717" Title="What are all the patches that SetPatch applies to Kickstart?" Tags="&lt;amiga&gt;&lt;operating-system&gt;&lt;amiga-kickstart&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10929" PostTypeId="1" AcceptedAnswerId="10930" CreationDate="2019-05-01T15:05:00.733" Score="4" ViewCount="285" Body="&lt;p&gt;I've documented the Ahl benchmark's history, and now I would like to do the same for Byte's version of the sieve. Does anyone have a pointer to the first appearance of this code as a benchmarking tool in that magazine?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-05-01T21:18:12.247" Title="First appearance of the Sieve in Byte *as a benchmark*?" Tags="&lt;benchmarking&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10930" PostTypeId="2" ParentId="10929" CreationDate="2019-05-01T17:18:23.337" Score="10" Body="&lt;p&gt;The earliest use, as far as I can determine, of the sieve of Eratosthenes as a benchmark in Byte’s editorial content is in the September 1981 issue, &lt;a href=&quot;https://archive.org/details/byte-magazine-1981-09/page/n181&quot; rel=&quot;noreferrer&quot;&gt;page 180&lt;/a&gt;: “A High-Level Language Benchmark”. The article introduces the algorithm and a number of implementations, and uses it to compare various interpreters and compilers on different platforms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This approach was revisited in the January 1983 issue, &lt;a href=&quot;https://archive.org/details/byte-magazine-1983-01/page/n291&quot; rel=&quot;noreferrer&quot;&gt;page 283&lt;/a&gt;: “Eratosthenes Revisited — Once More through the Sieve”, and again in the August 1984 issue, &lt;a href=&quot;https://archive.org/details/byte-magazine-1984-08/page/n137&quot; rel=&quot;noreferrer&quot;&gt;page 132&lt;/a&gt;, when the Byte Unix benchmark was introduced.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-05-01T21:18:12.247" LastActivityDate="2019-05-01T21:18:12.247" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10931" PostTypeId="1" AcceptedAnswerId="10934" CreationDate="2019-05-01T17:28:43.183" Score="13" ViewCount="1329" Body="&lt;p&gt;I am in the process of repairing a Macintosh II and trying to understand the design rationale behind Apple's MMU replacement part installed in this machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see in the picture, there is a socket for a Motorola 68851 MMU. In its place, Apple shipped the pictured chip. I am guessing it is some sort of custom discrete logic chip that provides limited MMU-like functionality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iWU8R.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iWU8R.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was accomplished with this design, and how do I use this chip if I want to &quot;max out&quot; the system RAM in the Macintosh II? Also, is there any possibility or point to swapping in an actual 68851?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-05-01T22:14:54.237" Title="What was the design of the Macintosh II's MMU replacement?" Tags="&lt;hardware&gt;&lt;memory&gt;&lt;apple-macintosh&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10932" PostTypeId="2" ParentId="10929" CreationDate="2019-05-01T17:48:39.493" Score="5" Body="&lt;p&gt;Not exactly what you are looking for, but meets the technical statement of &quot;a pointer to the first appearance of this code as a benchmarking tool in that magazine&quot; and is earlier than Stephen Kitt's answer. November 1980:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/byte-magazine-1980-11-rescan/page/n255?q=sieve&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/byte-magazine-1980-11-rescan/page/n255?q=sieve&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is in an ad for Digital Research PL/I, and specifically refers to &quot;Erastothenes Sieve&quot; as a benchmark. Though I suppose that leaves open the question of how Digital Research's Sieve compares to the BYTE Magazine Sieve.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2019-05-01T17:48:39.493" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10933" PostTypeId="2" ParentId="10931" CreationDate="2019-05-01T18:13:38.927" Score="8" Body="&lt;p&gt;I can answer the last part of your question: yes, the Mac II could use a 68851.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a time, Virginia Tech required incoming Computer Science freshmen to purchase a (heavily discounted) Mac II running A/UX, Apple's first in-house-developed UNIX. These machines shipped with 2MB RAM, an 80MB HD (huge for the time), and a 68851 pre-installed; A/UX required the 68851 to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Somewhere, in a dusty corner, I have a prototype Mac II that has a small daughtercard in that socket instead of a 68851. I &lt;em&gt;may&lt;/em&gt; also have some documentation from the beta-testing period that would shed light on the &quot;alternate&quot; MMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe the Mac II first shipped with Mac OS 6, which didn't support virtual memory. I don't remember if VM support in System 7.(whatever) required the 68851.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I recall, the Mac II shipped with 256KB SIMMs, supported 1MB SIMMs (up to 8MB total RAM), and was expected to support 4MB SIMMs when they became available. Unfortunately, manufacturers changed something in the electrical interface for 4MB SIMMs, so they didn't work in the Mac II. I think someone may have made a 4MB SIMM that could work in the Mac II, but they were low-volume and prohibitively expensive, and the Mac product line had moved on by then. So, &quot;maxing out your RAM&quot; probably means 8MB -- but that still exceeds the 24-bit address limit in early Mac OS, so you may need a &quot;real&quot; MMU to take advantage of it.&lt;/p&gt;&#xA;" OwnerUserId="495" LastEditorUserId="4335" LastEditDate="2019-05-01T22:14:54.237" LastActivityDate="2019-05-01T22:14:54.237" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="10934" PostTypeId="2" ParentId="10931" CreationDate="2019-05-01T20:54:44.433" Score="15" Body="&lt;p&gt;Your Mac II “HMMU” chip implements the address functionality shown in this image, from Guide to the Macintosh Family Hardware, 2nd edition:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/EulYW.png&quot; alt=&quot;Mac II 24-to-32-bit address mapping&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chip has two modes of operation. In 24-bit mode, the addresses are mapped as shown and the top 8 bits of the address bus are ignored. In 32-bit mode the address is buffered unchanged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early versions of the Mac system software store information in the top 8 bits of pointers (addresses). The original 68000 had only a 24-bit addressing capability, and so on 68000 Macs, the top 8 bits of a 32-bit address do not change what is output on the bus. The Mac II has a full 32-bit address bus, so, when running older software which uses those top 8 bits of the address, the 24-to-32 mapping must be turned on so the top 8 address bits are ignored. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 24-bit mode, the Mac II can only access 8 MB of ram, so if you want to use more ram, you need to run “32-bit-clean” software which does not use those 8 top address bits. In this case, the 24-to-32 mapping can be turned off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PMMU is mostly for A/UX. It is possible to switch to a real 68851 “PMMU” but it doesn’t increase Mac OS performance unless you want to use virtual memory, and depending on your specific Mac II board, the MMU socket pinout may not match the 68851 and you might have to acquire and use the adapter card mentioned by jeffB.&lt;/p&gt;&#xA;" OwnerUserId="7486" LastEditorUserId="7486" LastEditDate="2019-05-01T21:02:01.053" LastActivityDate="2019-05-01T21:02:01.053" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="10935" PostTypeId="2" ParentId="10914" CreationDate="2019-05-01T22:55:18.327" Score="12" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Apollo_Guidance_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apollo Guidance Computers&lt;/a&gt; stored their programs in &lt;a href=&quot;https://en.wikipedia.org/wiki/Core_rope_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;Core Rope Memory&lt;/a&gt;.  These read-only program memories were manufactured with the program fixed in them, and could not be changed after being manufactured.  Manufacturing consisted of workers meticulously weaving wires through magnetic cores.&#xA;A machine controlled by punched tape positioned a guide and the operator passed a sense line through the core (to store a 1) or around the core (to store a 0). &#xA;Each core stored 192 bits (12 words) so there were potentially 192 sense lines threaded through each core.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From Wikipedia:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Software written by MIT programmers was woven into core rope memory by female workers in factories. Some programmers nicknamed the finished product LOL memory, for Little Old Lady memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.ibiblio.org/apollo/SCDs/scd_1006320-.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;cores in core rope memory&lt;/a&gt; were not the ferrite cores used in core memory, but formed from Permalloy ribbon wound around a non-magnetic steel bobbin. The cores were 0.249&quot; in diameter, much larger than ferrite cores.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The program memory (in six core rope modules) had 36,864 words of 16 bits, or 589,824 bits.  That's a lot of weaving!&lt;/p&gt;&#xA;" OwnerUserId="3324" LastEditorUserId="4158" LastEditDate="2019-05-07T19:37:51.457" LastActivityDate="2019-05-07T19:37:51.457" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10936" PostTypeId="1" AcceptedAnswerId="10938" CreationDate="2019-05-02T11:25:57.597" Score="17" ViewCount="1929" Body="&lt;p&gt;While reading the Byte sieve article (Gilbreath 1981), I came across a language I have never heard of, ZSPL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspected this was actually a specific version of another language, perhaps PL/1. However, the listing shows it most closely resembling Algol/Pascal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone heard of this language before? It does not appear on the wiki nor the taxonomies of languages that I can find.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen references to similar names, but they are not related: there is a zSPL system for programming the C64's SID and another for NonStop systems.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Jim Gilbreath (September 1981). &quot;&lt;a href=&quot;https://archive.org/details/byte-magazine-1981-09/page/n181&quot; rel=&quot;noreferrer&quot;&gt;A High-Level Language Benchmark&lt;/a&gt;&quot;.  &lt;em&gt;BYTE&lt;/em&gt;.  pp. 180&amp;ndash;198.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="1932" LastEditDate="2019-05-02T12:52:00.760" LastActivityDate="2019-05-02T14:52:40.120" Title="ZSPL language, anyone heard of it?" Tags="&lt;compilers&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10937" PostTypeId="1" AcceptedAnswerId="10948" CreationDate="2019-05-02T12:05:58.350" Score="8" ViewCount="1402" Body="&lt;p&gt;I'm curious as to which language was the first to literally have a formatted text output procedure called &lt;code&gt;printf&lt;/code&gt;.  A trivial question, sure, but I was prompted to ask by a recent question on ZSPL.&lt;/p&gt;&#xA;&lt;p&gt;I'll accept a language statement in lieu of a procedure/function/subroutine, but it has to be spelled &lt;code&gt;printf&lt;/code&gt; (or variants involving upper case, bold, or underlined letters).  Other formatted I/O, such as FORTRAN's &lt;code&gt;FORMAT&lt;/code&gt; facilities, don't count.&lt;/p&gt;&#xA;&lt;p&gt;I think the answer is &lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL_68#formatted_transput&quot; rel=&quot;nofollow noreferrer&quot;&gt;Algol68&lt;/a&gt;, but that might just be historical ignorance on my part. For what its worth, Algol68 treated a format not as a string but as a unique datatype with its own denotation.&lt;/p&gt;&#xA;&lt;p&gt;Similar but not quite &lt;code&gt;printf&lt;/code&gt; arrangements could also be interesting, even if not the specific answer I'm asking for.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="15334" LastEditDate="2020-12-17T08:21:59.407" LastActivityDate="2020-12-17T08:21:59.407" Title="What was the first programming language to have 'printf'?" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10938" PostTypeId="2" ParentId="10936" CreationDate="2019-05-02T14:52:40.120" Score="22" Body="&lt;p&gt;Page 198 of that &lt;strong&gt;&lt;em&gt;Byte&lt;/em&gt;&lt;/strong&gt; says ZSPL is by Pete Ridley, whose full name appears to be Peter D Ridley, resident at the time in San Diego, California. He and ZSPL are also briefly mentioned in the December 1981 &lt;strong&gt;&lt;em&gt;Byte&lt;/em&gt;&lt;/strong&gt;, but I can't find any other trace of them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the sample ZSPL code looks rather like the &lt;a href=&quot;http://www.hpmuseum.net/exhibit.php?hwdoc=805&quot; rel=&quot;noreferrer&quot;&gt;SPL/3000&lt;/a&gt; programming language, introduced in 1972 by Hewlett-Packard for the HP 3000 business minicomputer. It's lowercase, rather than uppercase, and has some extra keywords. I suspect, although I cannot prove, that ZSPL was an enhanced re-implementation by Ridley of SPL for the Z80 running CP/M, and the &quot;Z&quot; is just from Z80. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-05-02T14:52:40.120" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10939" PostTypeId="2" ParentId="9644" CreationDate="2019-05-03T03:36:35.897" Score="1" Body="&lt;p&gt;Because the BBC Micro was, for lack of a better term, sponsored by the BBC to get computers in schools, the Archimedes got similar experience from runoff from the micro. Even though it came out later.&lt;/p&gt;&#xA;" OwnerUserId="13529" LastEditorUserId="202" LastEditDate="2019-05-03T13:30:14.403" LastActivityDate="2019-05-03T13:30:14.403" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10940" PostTypeId="1" CreationDate="2019-05-03T13:05:22.500" Score="8" ViewCount="244" Body="&lt;p&gt;I am currently writing a compiler for the PDP-8.  The compiler is going to translate source code into PDP-8 assembly code that calls some runtime routines to perform high-level functions such as managing call frames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently using Douglas Jones' PAL assembler which turns out to be rather annoying for my use case as it&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;does not support underscores or dollar signs in identifiers&lt;/li&gt;&#xA;&lt;li&gt;does not allow the assembly code to be split into multiple files&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As a consequence, the compiler has to do some copy-paste action to combine the runtime code with the compiled program.  Linking is also not easily possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an assembler for the PDP-8 that provides an object-file based process with a final linking stage so my compiler could emit object files that are linked into a single core image by a linker?&lt;/p&gt;&#xA;" OwnerUserId="24" LastActivityDate="2019-05-03T17:01:28.587" Title="Are there any PDP-8 assemblers that create linkable object files?" Tags="&lt;assembly&gt;&lt;pdp-8&gt;&lt;link-editor&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="10941" PostTypeId="2" ParentId="9644" CreationDate="2019-05-03T13:30:08.443" Score="4" Body="&lt;p&gt;The &lt;a href=&quot;https://www.stairwaytohell.com/articles/AU-AcornHistory.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stairway To Hell&lt;/a&gt; history site seems to indicate that the BBC did indeed get involved officially with the nascent A500.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sophie Wilson, the designer (then known as Roger):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Because the original ideas for an ARM-based computer had been for a business machine, Acorn's traditional partner, the BBC, hadn't been involved in the project (neither had new owner Olivetti). However, Acorn eventually took the idea for the new micro to the BBC, saying it was the true successor to the BBC micro. 'The BBC said it was interested, so we put some red function keys on it and changed the case colour. Our original research for the office automation machine had said it had to be grey,' says Wilson mischievously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC's decision caused a storm when the Archimedes was released. Acorn's competitors were furious that such a new and untried piece of technology was getting BBC approval.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it would appear from that there was at least some initial branding. Also worth noting is that BBC Enterprises ended up owning Redwood Publishing and 'BBC Acorn Magazine' which featured the Electron, BBC Micro, Archimedes and RISC PC. So I would say that the Archie was seen as the de facto successor to the BBC Micro and UK schools treated it as such.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2019-05-03T13:30:08.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10942" PostTypeId="1" AcceptedAnswerId="10943" CreationDate="2019-05-03T14:28:53.807" Score="9" ViewCount="684" Body="&lt;p&gt;Infocom ported their Z-machine to nearly every viable platform in the 70s and 80s. Zork runs on around 18 different 8/16 bit platforms using earlier versions of the Z-machine. Why was Z6 the graphical version of the Z-machine ported to the Apple II, but not the IIgs?&lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="10502" LastEditDate="2019-06-05T16:07:08.923" LastActivityDate="2019-06-05T16:07:08.923" Title="Why wasn't the Z6 version of the Infocom Z-machine ported to the IIgs?" Tags="&lt;history&gt;&lt;apple-ii&gt;&lt;gaming&gt;&lt;apple-iigs&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10943" PostTypeId="2" ParentId="10942" CreationDate="2019-05-03T15:28:15.373" Score="10" Body="&lt;p&gt;I suspect it was too late in the game for Infocom... The Apple II port of &lt;code&gt;YZIP&lt;/code&gt;, Infocom’s Z6 interpreter, was released in 1989 (as far as I can determine), and by then Infocom was only a publishing house inside Activision, and was about to be shut down entirely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagine that, given the limited development resources available, Infocom would have preferred porting the interpreter to entirely new platforms (new to &lt;code&gt;YZIP&lt;/code&gt; anyway, such as the Atari ST), before spending time creating a IIGS-specific port (since the IIGS could run the Apple II interpreter just fine, in IIe mode). There were only four games affected by this anyway (&lt;a href=&quot;https://en.wikipedia.org/wiki/Arthur:_The_Quest_for_Excalibur&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arthur&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Journey_(1989_video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Journey&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/James_Clavell%27s_Sh%C5%8Dgun&quot; rel=&quot;nofollow noreferrer&quot;&gt;Shōgun&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Zork_Zero&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zork Zero&lt;/a&gt;)...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IIGS did get specific ports of Z-machine interpreters later on, for &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Lost_Treasures_of_Infocom&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Lost Treasures of Infocom&lt;/a&gt;, but they only support &lt;a href=&quot;http://apple2.org.za/gswv/a2zine/Sel/LostTreasures.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z3 and Z5 games&lt;/a&gt; (so Zork Zero, which was part of the compilation on other platforms, isn’t included in the IIGS version). I can only guess why these didn’t support Z6, but I suspect that the effort involved was deemed too great for a single game (LTOI 1 included Zork Zero, and the floppy-based releases of LTOI 2, which were only released on the Mac and PC anyway, didn’t include a single Z6 game).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-05-04T16:18:58.447" LastActivityDate="2019-05-04T16:18:58.447" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="10944" PostTypeId="2" ParentId="10940" CreationDate="2019-05-03T17:01:28.587" Score="8" Body="&lt;p&gt;The PiDP-8 project has a wonderful &lt;a href=&quot;https://tangentsoft.com/pidp8i/wiki?name=A+Field+Guide+to+PDP-8+Assemblers&quot; rel=&quot;noreferrer&quot;&gt;Field Guide to PDP-8 Assemblers&lt;/a&gt;, which reviews most (all?) of the PDP-8 assemblers available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SMAL, SABR and RALF have linkable objects that may fit your needs.  A &lt;a href=&quot;http://so-much-stuff.com/pdp8/C/C.php&quot; rel=&quot;noreferrer&quot;&gt;partial C cross-compiler for the PDP-8&lt;/a&gt; exists, and uses SMAL.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2019-05-03T17:01:28.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10945" PostTypeId="1" AcceptedAnswerId="10946" CreationDate="2019-05-04T01:52:59.930" Score="8" ViewCount="1171" Body="&lt;p&gt;I'm trying to play Taskmaker on Mac OS 9 in Sheepshaver on OSX. Taskmaker tells me that it doesn't have enough memory to run in color. Within technical support it says that I have 512 megabytes total memory, 2295K approximate partition, 1676K available. I've tried bumping the RAM up and down, and while I have many megabytes to spare, I can't seem to get more &quot;available&quot; to Taskmaker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions welcome... is there some setting in OS9 that I need to set? I've gone to the memory control panel and tried messing with RAM Disk and Disk Cache, to no avail.&lt;/p&gt;&#xA;" OwnerUserId="13535" LastActivityDate="2019-05-04T06:21:50.303" Title="How do I allocate more memory to an app on Sheepshaver running Mac OS 9?" Tags="&lt;memory&gt;&lt;mac-os-classic&gt;&lt;sheepshaver&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10946" PostTypeId="2" ParentId="10945" CreationDate="2019-05-04T02:23:01.717" Score="15" Body="&lt;p&gt;Click on the application icon, select &quot;Get info&quot; from the &quot;File&quot; menu, and adjust the memory allocation in the window that pops up.&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2019-05-04T02:23:01.717" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10947" PostTypeId="2" ParentId="10945" CreationDate="2019-05-04T06:21:50.303" Score="5" Body="&lt;p&gt;Many older Mac games were written to work best in 256-color (8-bit color) modes. Your system is probably set to use thousands or millions of colors (16- or 32-bit color); these modes do not improve the appearance of these games, and may make them slower or -- in Taskmaker's case -- may even prevent them from launching normally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Change the display depth of your emulated system to 256 colors. If you're running a default install of Mac OS 9, you can do this by opening the Control Strip and clicking on the icon that looks like a TV with blue, yellow, red, and green bars on it. You can also change this in the Monitors control panel.&lt;/p&gt;&#xA;" OwnerUserId="461" LastActivityDate="2019-05-04T06:21:50.303" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10948" PostTypeId="2" ParentId="10937" CreationDate="2019-05-04T20:46:24.580" Score="17" Body="&lt;p&gt;Having poked around, I feel ready to answer my own question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first language to have an actual formatted-print function literally named &lt;em&gt;printf&lt;/em&gt; was &lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL_68#formatted_transput&quot; rel=&quot;noreferrer&quot;&gt;Algol 68&lt;/a&gt;, per the 1973 &lt;em&gt;Revised Report&lt;/em&gt; (the original &lt;em&gt;Report&lt;/em&gt; in 1968 used &lt;em&gt;outf&lt;/em&gt;).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The format specification for Algol 68 owed IMO something to FORTRAN usage; elements were format directives unless they were specifically identified as literal strings - the inverse of C usage, if you see what I mean.  For example, &lt;code&gt;FORMAT f = $ &quot;the number is &quot; 3d $&lt;/code&gt; (Dollar signs enclose a FORMAT denotation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An honorary mention goes to BCPL, which had a &lt;a href=&quot;https://en.wikipedia.org/wiki/Printf_format_string#History&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;writef&lt;/em&gt;&lt;/a&gt; or &lt;a href=&quot;https://projects.exeter.ac.uk/BCPL/WindowsBCPL.htm#6._Write_Your_First_BCPL_Program&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;writes&lt;/em&gt;&lt;/a&gt; procedure (sources vary in their opinion, and the &lt;em&gt;BCPL Reference Manual&lt;/em&gt; describes only the language, not any library), using a standard string for the format, rather than a specialized datatype (Algol [68) or statement type (FORTRAN).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="4831" LastEditDate="2019-11-16T13:57:58.540" LastActivityDate="2019-11-16T13:57:58.540" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="10949" PostTypeId="1" AcceptedAnswerId="10950" CreationDate="2019-05-05T12:59:21.880" Score="43" ViewCount="5721" Body="&lt;p&gt;I'm trying to restore order to my &lt;s&gt;junk pile&lt;/s&gt; office, and I ran across this card.  I am usually pretty good at generally identifying old (PC?) stuff, but this one is outside my experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it is some sort of co-processor - the card is clearly labeled &quot;X4 Copyright (C) 1988 The Palantir Corporation&quot; and appears to sport a Motorola MC68020 CPU.  There is also a 40 pin (if I counted right) unkeyed connector in the center of the card, and two large connectors near what looks like a large block of RAM (I might hazard a guess these might support a daughter-card with more memory?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone tell me what this thing is?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CKq0o.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CKq0o.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/6hP0A.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6hP0A.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/qVLjJ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qVLjJ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/YxuPV.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YxuPV.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="79" LastEditDate="2019-05-05T15:23:23.657" LastActivityDate="2019-05-12T12:14:52.480" Title="Can anyone identify this unknown 1988 PC card from The Palantir Corporation?" Tags="&lt;identify-this-card&gt;&lt;motorola-680x0&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10950" PostTypeId="2" ParentId="10949" CreationDate="2019-05-05T13:12:00.603" Score="56" Body="&lt;p&gt;This is a &lt;a href=&quot;https://archive.org/details/byte-magazine-1989-05/page/n224&quot; rel=&quot;nofollow noreferrer&quot;&gt;TrueScan&lt;/a&gt; board, which was used for OCR in PC AT systems. The board included a Motorola 68020 CPU, 2 or 4 MiB of RAM, and cost a cool $2,795 for the 2 MiB version (in 1988), $3,995 for the 4 MiB version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You won’t find much by searching for Palantir, because by the time this was available for sale, the company had changed its name to Calera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The FCC ID database confirms that &lt;a href=&quot;https://fccid.io/HLC22YTRUESCAN&quot; rel=&quot;nofollow noreferrer&quot;&gt;22YTRUESCAN&lt;/a&gt; was produced by Calera Recognition Systems.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="2037" LastEditDate="2019-05-12T12:14:52.480" LastActivityDate="2019-05-12T12:14:52.480" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="10951" PostTypeId="1" AcceptedAnswerId="10952" CreationDate="2019-05-06T03:07:59.167" Score="7" ViewCount="366" Body="&lt;p&gt;I'm trying to restore a backup from an old QIC-150 tape. While I'm able to read the raw data from the tape (using linux), I can't recognize the binary format of the data (the tape is not mine).  There are, however, some hints that it was written using a tool called &lt;code&gt;QICStream&lt;/code&gt;, which seems to have been a utility for DOS that was bundled with Archive Corp tape drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've searched the web for this QICStream tool, but can't seem to find it anywhere. Does anyone have access to, or know of a way to obtain, this utility?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Or perhaps suggest a more modern backup software that might be compatible with tapes written by QICStream?)&lt;/p&gt;&#xA;" OwnerUserId="13540" LastEditorUserId="13540" LastEditDate="2019-05-06T03:35:09.497" LastActivityDate="2019-05-06T09:23:58.710" Title="Where to find QICStream software for reading old QIC-150 tape?" Tags="&lt;ms-dos&gt;&lt;magnetic-tape&gt;&lt;backup&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10952" PostTypeId="2" ParentId="10951" CreationDate="2019-05-06T09:23:58.710" Score="3" Body="&lt;p&gt;QICStream became &lt;a href=&quot;https://en.wikipedia.org/wiki/Backup_Exec&quot; rel=&quot;nofollow noreferrer&quot;&gt;Backup Exec&lt;/a&gt;, which is still available commercially although I don’t know whether the current versions can still read QICStream tapes (I doubt it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/bitsavers_connerbackxecDosApr93_7837756/page/n14&quot; rel=&quot;nofollow noreferrer&quot;&gt;Conner Backup Exec for DOS&lt;/a&gt; was capable of reading most QICStream tapes, and it can still be found online. Some data conversion companies are still capable of dealing with such tapes too.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-05-06T09:23:58.710" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="10953" PostTypeId="1" AcceptedAnswerId="10954" CreationDate="2019-05-06T15:20:02.423" Score="18" ViewCount="2012" Body="&lt;p&gt;Acorn famously developed the ARM microprocessor using their existing BBC Micros internally, both to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/3166/was-the-first-arm-processor-a-bbc-basic-program&quot;&gt;simulate the ARM&lt;/a&gt; and to develop for actual ARM using a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2907/whats-the-tube-interface-of-the-bbc-micro-all-about&quot;&gt;Tube-connected&lt;/a&gt; second processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, Acorn would ship the ARM-based &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Archimedes&quot; rel=&quot;noreferrer&quot;&gt;Archimedes&lt;/a&gt; platform, which started the commercial life of &lt;a href=&quot;https://en.wikipedia.org/wiki/RISC_OS&quot; rel=&quot;noreferrer&quot;&gt;RISC OS&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't find any history on what Acorn used as the development environment for early versions of RISC OS, but a BBC Micro with an ARM second processor seems possible. Was any early form of an ARM-specific OS ever made public for this hardware setup?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-05-07T22:57:53.093" Title="Did any early RISC OS precursor run on the BBC Micro?" Tags="&lt;bbc-micro&gt;&lt;arm&gt;&lt;risc-pc&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10954" PostTypeId="2" ParentId="10953" CreationDate="2019-05-06T16:02:49.863" Score="24" Body="&lt;p&gt;&lt;a href=&quot;http://web.archive.org/web/20131219091640/http://acorn.chriswhy.co.uk/Computers/A500.html&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; describes one of the prototype A500s used by Paul Fellows (who led the team in charge of developing Arthur, the operating system which eventually became RISC OS). Paul Fellows himself said&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This machine is the one I used for development of the Operating System at Acorn. Originally these machines were hooked up to BBC micros via an umbilical into the tube port and all the I/O was done by the Beeb. Over time we gradually got the various sub-systems alive, and moved them over to the A500 native. First the video and graphics, then the keyboard, then the file systems and so on. This machine was on my desk when for the very first time ever we removed the umbilical, and rebooted it - and watched it come up to the basic prompt on its own. Arthur was born!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So Arthur never &lt;em&gt;ran&lt;/em&gt; on a BBC Micro, at least, not using the 6502 as the main CPU, but a BBC Micro was necessary at first to provide the I/O (as you’d expect from a system using the tube).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arthur was released to the public with the A305 and &lt;a href=&quot;http://www.computinghistory.org.uk/det/6332/Acorn-Archimedes-310/&quot; rel=&quot;noreferrer&quot;&gt;A310&lt;/a&gt;. I don’t think a BBC Micro-using version was ever released. It was supposed to be a stop-gap operating system until &lt;a href=&quot;https://en.wikipedia.org/wiki/ARX_(operating_system)&quot; rel=&quot;noreferrer&quot;&gt;ARX&lt;/a&gt; was completed, but when the latter failed to materialise, development of Arthur was extended and it became RISC OS with the release of version 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this is described in more detail on &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_RISC_OS&quot; rel=&quot;noreferrer&quot;&gt;the dedicated Wikipedia page&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-05-06T18:56:31.953" LastActivityDate="2019-05-06T18:56:31.953" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10956" PostTypeId="2" ParentId="10914" CreationDate="2019-05-06T23:54:45.993" Score="2" Body="&lt;p&gt;A number of entries here could be classified as &quot;blind programming&quot;, where the people actually inputting a program have no understanding of what the program does.  Probably a group of people (programmers and verifiers) had to plan out a step-by-step sequence of what the computer is to do (the program) Someone then, probably with a pen, pencil, or typewriter, wrote a procedure for them (an implementation), and other people had to produce it. Pretty rudimentary indeed, with the people at the top of the design having no idea if it will work until it is all put together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would not be an answer without offering another such scheme, &lt;strong&gt;perhaps the most commonly implemented of all&lt;/strong&gt;.  Consumer computer magazines of the 70s, 80s, and 90s (e.g. &lt;em&gt;Creative Computing&lt;/em&gt;, &lt;em&gt;Compute!&lt;/em&gt;, and &lt;em&gt;RUN&lt;/em&gt;) would offer their readers programs to type in. These started out as BASIC programs, providing modifiable examples of how to program.  To save magazine space, these BASIC programs seldom included any significant comments, and often no structural formatting such as indentation. Still, a lot of us appreciated the working examples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next step, clearly less rustic than other answers, and &lt;strong&gt;my actual &lt;em&gt;blind programming&lt;/em&gt; answer&lt;/strong&gt;, was for the magazines to offer type-in hex machine code for assembly language programs.  Sometimes they didn't use hex, but some extended alpha-numeric sequence encoding the program in a typeable format. Either way, the audience had no idea of program logic, they were just typing in often many pages of arbitrary sequences.  Likely, each line of input data would include some sort of checksum value, helping to reduce the likelihood in input mistakes.  The magazine also offered either a typable BASIC program or a downloadable program one could get from the magazine's BBS. These would accept the long stream of hex or general alpha-numeric values, verify the data lines during input, and build an executable program.  When done, subscribers would store this final program to tape or floppy, and run it. (You could also save partially typed-in programs.)&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2019-05-07T12:34:03.043" LastActivityDate="2019-05-07T12:34:03.043" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="10957" PostTypeId="2" ParentId="10914" CreationDate="2019-05-07T02:19:34.370" Score="5" Body="&lt;p&gt;Much of the &lt;a href=&quot;http://www.chilton-computing.org.uk/acl/technology/atlas/p019.htm&quot; rel=&quot;noreferrer&quot;&gt;Atlas supervisor&lt;/a&gt; (i.e., what we'd now call the kernel of the OS) was stored in 'fixed store', which was constructed of &lt;a href=&quot;http://www.chilton-computing.org.uk/acl/technology/atlas/p008.htm&quot; rel=&quot;noreferrer&quot;&gt;ferrite and copper slugs inserted into a mesh&lt;/a&gt;.   8K words x 48 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This might make you think a little harder before deploying your latest kernel update :-)&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-05-07T02:19:34.370" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10958" PostTypeId="2" ParentId="10914" CreationDate="2019-05-07T06:42:01.053" Score="3" Body="&lt;p&gt;What about the teacher calling out instructions in English for this &quot;computer&quot; processor made from a classroom of children?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From about 1:00 &lt;a href=&quot;https://youtu.be/f1DtY42xEOI&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/f1DtY42xEOI&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="534" LastEditorUserId="534" LastEditDate="2019-05-07T07:04:10.300" LastActivityDate="2019-05-07T07:04:10.300" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10959" PostTypeId="2" ParentId="10953" CreationDate="2019-05-07T06:42:45.410" Score="5" Body="&lt;p&gt;When a second processor (or &quot;co-processor&quot;) was used through the BBC Micro's Tube, the Beeb's internal CPU and RAM was used for display and I/O purposes, whereas the main program code would be run on the CPU and RAM in the second processor's case. This code would include an operating system to suit the processor in question, e.g. CP/M on the Z80 second processor, DOS-plus on the 80186 coprocessor, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.computinghistory.org.uk/det/4617/Acorn-ARM-Evaluation-System&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARM Evaluation System&lt;/a&gt; was shipped in 1986, and as well as a ROM-based OS (like the Beeb) it was provided with software on &lt;a href=&quot;http://www.dunnington.info/public/BBC/ARMeval.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;six floppies&lt;/a&gt;. These included an assembler and debugger, some example utility programs, a port of BBC Basic, and LISP, PROLOG and FORTRAN.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the ARM was a brand new processor, this was the first OS and software released for it. But rather than being related to RISC OS, it was running an early version of Acorn's &lt;a href=&quot;https://en.m.wikipedia.org/wiki/ARX_(operating_system)&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARX&lt;/a&gt; operating system:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By 1986, the full four-chip set was working, and a second processor version of the ARM was built for software development. 'We did a lot of software development both in the UK and the States, and a Xerox-like operating system was developed,' explains Wilson, 'This was called ARX. We had it working well on just a single chip - a windows system with VDU calls across the Tube.'&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.stairwaytohell.com/articles/AU-AcornHistory.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quotation source.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Archimedes line, with RISC OS's antecendent OS &quot;Arthur&quot;, was released one year later in June 1987. Arthur was a rushed stop-gap OS for the A305 and A310 while ARX was being finished. When ARX was further delayed, a revised edition of Arthur (with a graphical interface) was released as RISC OS 2.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;On that basis, it seems that no early version of RISC OS ran on the BBC Micro, but an early version of ARX did.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do bear in mind that the software on the ARM Evaluation System, like the other second processors, ran on the external processor, and could only communicate with the Beeb through the window of the Tube. Some, such as the ARM E.S., had a ROM of software that was inserted into the Beeb, but these were effectively library functions that could be called by the ARM E.S. through the Tube. They were actually 8-bit code running natively on the Beeb's 6502 and MOS operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are more resources relating to the Arm Evaluation System, including documentation and copies of the on-board ROM, &lt;a href=&quot;http://mdfs.net/Software/Tube/ARM/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="4147" LastEditDate="2019-05-07T22:57:53.093" LastActivityDate="2019-05-07T22:57:53.093" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10960" PostTypeId="2" ParentId="5733" CreationDate="2019-05-07T11:28:03.813" Score="3" Body="&lt;p&gt;I successfully formated 720K on win10 by respecting the two conditions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;only some chipsets (in the USB drive) support 720K, usually older chipsets&lt;/li&gt;&#xA;&lt;li&gt;the drive must detect the floppy as a 720K&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Point 2 is sometime an issue if you use 1.44 floppy disks. I only have those so I usually put a paper to hide the hole in the floppy cases indicating the 1.44 MB format. But, some drive refused to format them and the &lt;code&gt;format&lt;/code&gt; command gave me the diagnostic: &lt;code&gt;Parameters not supported by drive.&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was a lie. The truth is that the drive detected the floppy as 1.44 MB even though I covered the floppy hole. The reason is that the drive uses a led and a photodiode to check if the hole is present. If the paper used to cover the hole is not dark enough, a small amount of light pass through and the floppy is reported as 1.44 MB. I successfully formated the very same floppy on these drives by using a black marker pen and darkening the paper used to cover the hole.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only did full format of the disks. I was able to use these formated disks to transfer data from my Win10 PC to my Atari 1040 which has a real ~720K disk drive (the Atari floppy format is larger than 720K but the Atari can read 720K)&lt;/p&gt;&#xA;" OwnerUserId="4956" LastActivityDate="2019-05-07T11:28:03.813" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10961" PostTypeId="2" ParentId="9475" CreationDate="2019-05-07T16:45:58.297" Score="2" Body="&lt;p&gt;Have added this here as additional info to answers above (too big for comment)...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IEI / IEO are part of a daisy chain to determine interrupt priority. The signals are generated by the peripheral chips themselves. In the diagram in the question the DART has the highest priority, the PIO next and the CTC the lowest. A chip will not generate an interrupt if its IEI pin is low. As soon as a chip generates an interrupt it will lower its IEO pin to prevent lower priority chips interrupting. The interrupting chips monitor the M1 line and the data bus to detect the RETI instruction (could make for convoluted hardware as peripheral chips had to monitor data bus during CPU M1/read cycles). Nested interrupt was handled as follows; assume the PIO above has generated an interrupt. If the DART now interrupts the PIOS's IEI line goes low and its interrupt service routine is interrupted by the DART. The DART now waits for the RETI (the PIO ignores the next RETI as its IEI is low). As soon as the RETI for the DART service routine is detected the DART will let its IEO line to go high. The PIO's service routine resumes and when the next RETI appears it is done (all this applies to mode 2 interrupt handling). Very sophisticated for the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The diagram in the question is completely wrong in one respect. The IEO of the CTC would just not be connected. All of the Z80 chips would connect to the /INT of the CPU. I have no idea what INTACK is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the previous answer Ivd also correctly notes that there could be timing issues with long peripheral chip chains. An approach to this was to AND outputs together. For example a product I worked on had four such chips on individual boards and we could have up to sixteen boards in a system. The four IEOs on each individual board were ANDed together to drive the bus IEO signal for that slot. On the backplane the IEO of a slot was wired to the IEI of the next slot.&lt;/p&gt;&#xA;" OwnerUserId="1956" LastEditorUserId="7946" LastEditDate="2019-05-20T20:44:19.200" LastActivityDate="2019-05-20T20:44:19.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10962" PostTypeId="2" ParentId="10914" CreationDate="2019-05-07T21:53:06.877" Score="1" Body="&lt;p&gt;Even when programming in &quot;high-level&quot; languages (aka FORTRAN IV), input devices could be quite rudimentary.  As an after-school activity, I got to punch code using an &lt;a href=&quot;https://www.ibm.com/ibm/history/exhibits/specialprod2/specialprod2_5.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM Port-A-Punch&lt;/a&gt;, which was simply a plastic frame holding a pre-perforated 80-column card, with a stylus that you used to push out the chads to write statements in IBM card code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though the cards were 80-column format, they only had 40 usable columns; I think it was the even columns. This meant that every other column was effectively a space character, i.e., no holes punched. For FORTRAN code that doesn't matter [1] since spaces are ignored, except in Hollerith constants, so you doubled up the count.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, we only had one actual Port-A-Punch to share between a half-dozen nerds, so I made my own: straighted-out paperclip expoxied into an old &lt;a href=&quot;https://en.wikipedia.org/wiki/Bic_Cristal&quot; rel=&quot;nofollow noreferrer&quot;&gt;BIC&lt;/a&gt; barrel, polystyrene (styrofoam) backing pad.  Totally crap, but totally available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programs were submitted by post office mail to be run on a &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_7090#IBM_7094&quot; rel=&quot;nofollow noreferrer&quot;&gt;7094&lt;/a&gt; under &lt;a href=&quot;http://frobenius.com/ibsys.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBSYS&lt;/a&gt; using the &lt;a href=&quot;https://dl.acm.org/citation.cfm?id=365671&quot; rel=&quot;nofollow noreferrer&quot;&gt;PUFFT&lt;/a&gt; compiler.  Half-a-week later you learned of your mismatched parentheses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kids today and their IDEs - huh!  :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] Except that comment cards -- punched in column 1 -- were not possible with even-column pre-perforation. We had special cards with a machine-made hole in addition to the pre-perforation. &lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-05-07T22:01:54.260" LastActivityDate="2019-05-07T22:01:54.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10963" PostTypeId="1" AcceptedAnswerId="10964" CreationDate="2019-05-08T11:27:39.077" Score="14" ViewCount="844" Body="&lt;p&gt;A number of early microcomputer BASICs had 'array like strings' that were unlike MS's system and instead behaved like arrays of char. Substrings were accessed using a syntax like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A$ = B$(1,5)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;as opposed to the MS style:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A$ = LEFT$(B$,4)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note the potential off-by-one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that some minicomputer BASICs also worked this way, I believe HP and Nova were the canonical examples. North Star BASIC also used this style, and I suspect, due to its origins, that Cromenco Extended BASIC did as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the question: does anyone know the first &lt;em&gt;microcomputer&lt;/em&gt; BASIC that used this style of string notation? And wider, where this style originated?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="3290" LastEditDate="2020-07-07T01:42:01.480" LastActivityDate="2020-07-07T10:48:13.883" Title="Origins of the &quot;array like&quot; strings in BASIC" Tags="&lt;history&gt;&lt;basic&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10964" PostTypeId="2" ParentId="10963" CreationDate="2019-05-08T11:59:31.867" Score="16" Body="&lt;p&gt;I think the earliest BASIC dialects on micros to use these constructs for strings were &lt;a href=&quot;https://en.wikipedia.org/wiki/North_Star_BASIC&quot; rel=&quot;noreferrer&quot;&gt;North Star BASIC&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Integer_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Apple Integer BASIC&lt;/a&gt; in 1977, both presumably influenced by HP BASIC. The Apple lineage isn’t surprising since Steve Wozniak worked at HP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The origin of this approach to substring addressing could be FORTRAN, which uses &lt;a href=&quot;https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vn6s/index.html&quot; rel=&quot;noreferrer&quot;&gt;a syntax of the form &lt;code&gt;A(I:L)&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-05-08T11:59:31.867" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="10965" PostTypeId="1" AcceptedAnswerId="11164" CreationDate="2019-05-08T12:26:07.410" Score="8" ViewCount="524" Body="&lt;p&gt;It is well established that Vilnius BASIC runs on PDP-11 compatible machines. For example, the BK-0010 and UKNC had Vilnius BASIC in ROM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently, it was closely modelled after MSX BASIC, which means that it is at least connected with a pre-x86 lineage. And the implementation used &lt;a href=&quot;https://en.wikipedia.org/wiki/Threaded_code&quot; rel=&quot;noreferrer&quot;&gt;threaded code&lt;/a&gt;, which I imagine would make a BASIC interpreter easy to port, but I don't know that for sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still I cannot find an example of a computer using a (clone or variant of) an 8080 or Z80 which runs Vilnius BASIC, even if both those CPUs and that BASIC were apparently extremely common in the USSR.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="6659" LastEditDate="2019-12-21T11:56:04.050" LastActivityDate="2019-12-21T11:56:04.050" Title="Was Vilnius BASIC cross-platform?" Tags="&lt;basic&gt;&lt;ussr&gt;&lt;electronika-bk&gt;" AnswerCount="2" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="10966" PostTypeId="2" ParentId="10965" CreationDate="2019-05-08T13:16:46.397" Score="7" Body="&lt;p&gt;Well this certainly isn't exhaustive, but from what I can see the answer is no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still find it fascinating that the Soviet basic school computer was a PDP-11 in a micro format. It makes me wonder what our systems of the era would have been like given a similar CPU. In any event, this is also a rather limiting factor. Porting MS BASIC from one 8-bit platform to another was difficult enough, to the point where the 6502 versions wouldn't even fit in 8k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Porting a 16-bit BASIC, especially one for the register-heavy and orthogonal instruction set of the PDP-11 would make this all the more difficult. There would have to be an entirely new runtime library and a new compiler. Even the screen editor would have to be rewritten, although that would be on the easier side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And for all that effort you would end up with what was ultimately a cut-down MSX, which you could buy off the shelf from a number of Japanese firms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking over earlier DECUS catalogs and those materials that exist in the archive.org from the 1980s time frame, I cannot find references to Vilnius BASIC outside the Soviet sphere. For the reasons above, I would suspect that it was limited to the PDP-11 clone market.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-05-08T13:16:46.397" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10967" PostTypeId="1" CreationDate="2019-05-08T22:34:06.573" Score="7" ViewCount="328" Body="&lt;p&gt;I recently discovered there's BBC BASIC for CP/M machines. Having had my fill of Microsoft Basic, I need to get BBC BASIC onto a disk I can boot on a TRS-80 Model 4P.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no CP/M disk (or image) for the TRS-80 yet. I do have Commodore C128 CP/M Plus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have found distro of the CP/M BBC BASIC, so I have the &quot;BBCBASIC.COM&quot; executable on my modern computer. I have two possibilities for imaging a disk:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Already mentioned C128, with SD2IEC and 1571 floppy drive.&lt;/li&gt;&#xA;&lt;li&gt;Retro PC-DOS machine with 5.25&quot; HD/DD floppy drive. I've used it before to make an LS-DOS floppy from a .IMD file for the TRS-80.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;How should I go about creating the TRS-80 CP/M boot disk, including &quot;BBCBASIC.COM&quot;?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-05-08T22:49:22.200" LastActivityDate="2019-06-25T14:13:57.997" Title="How to get BBC BASIC to TRS-80?" Tags="&lt;cp-m&gt;&lt;bbc-micro&gt;&lt;trs-80&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="10968" PostTypeId="2" ParentId="4698" CreationDate="2019-05-09T05:27:15.913" Score="2" Body="&lt;p&gt;In my homebrew Z180-based system I'm using the following SW mechanism:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the debugger has a specific &quot;execution buffer&quot;, which is preced by an EI instruction&lt;/li&gt;&#xA;&lt;li&gt;debugger recognizes EI and DI instructions and skips them&lt;/li&gt;&#xA;&lt;li&gt;next 4 bytes (maximum lenght of instruction) are fetched into the execution buffer&lt;/li&gt;&#xA;&lt;li&gt;interrupts are disable, highest possible interrupt request is activated to be pending&lt;/li&gt;&#xA;&lt;li&gt;code enters the EI instruction, which enables interrupts after the NEXT instruction &lt;/li&gt;&#xA;&lt;li&gt;interrupt happens, SW deactivates the interrupt, collects the corresponding data, computes address for next instruction after JR instructions, etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I have used this mechanism for more than 20 years, first with a Z80 based system, nowadays with a Z180 based board. My debugger combines the base mechanism with things like:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;execute step by step until call of sub-program or return from sub-program&lt;/li&gt;&#xA;&lt;li&gt;execute step by step until given address has been reached&lt;/li&gt;&#xA;&lt;li&gt;execute step by step given condition happens. For e.g. until HL=0&lt;/li&gt;&#xA;&lt;li&gt;execute (without stepping) a sub-program&lt;/li&gt;&#xA;&lt;li&gt;execute (without stepping) a sub-program, and tell how many useconds it took to execute&lt;/li&gt;&#xA;&lt;li&gt;execute (without stepping) up to given address. I.e. kind of breakpoint&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In other words, the mechanism is pretty flexible. Also, the overhead is very low, so the multiuser operating system runs normally during debugging. I'm even able to use the debugger simultaneously for several user processes (little need for that, though).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main part of the debugger is implemented in BASIC, the assembler part is pretty small (less than 0.5KB, including data areas) and is used as an external library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only needed HW is some interrupt source, which can be used to go active at demand.  My latest boards use an otherwise unused UART port for that purpose, but any suitable mechanism should work. However, the debug interrupt must be the highest one, otherwise you'll find out that the debugged code has branched into some system code... Still, the actual interrupt line (like Z180 INTx) can be shared with other interrupt sources; in my current system the interrupt line is shared with an other UART port and timer on the same chip.&lt;/p&gt;&#xA;" OwnerUserId="13557" LastActivityDate="2019-05-09T05:27:15.913" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10969" PostTypeId="1" AcceptedAnswerId="10975" CreationDate="2019-05-09T08:46:44.307" Score="6" ViewCount="489" Body="&lt;p&gt;Here are few things I remember, but it was not sufficient for me to find the game on a search engine:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The game is top-down game - with no camera angle.&lt;/li&gt;&#xA;&lt;li&gt;It is a car game, with cops and robbers.&lt;/li&gt;&#xA;&lt;li&gt;You had to evade from the city when playing as the robbers without getting caught by the cops.&lt;/li&gt;&#xA;&lt;li&gt;When you reached a side of the map (a city town), you would won.&lt;/li&gt;&#xA;&lt;li&gt;There might be only on environment: a big city map (with no possible way to go outside).&lt;/li&gt;&#xA;&lt;li&gt;You could also play as the cops and I think I barely remember that it was harder to catch the robbers' car.&lt;/li&gt;&#xA;&lt;li&gt;It think it was a MS-DOS game  (80% sure).&lt;/li&gt;&#xA;&lt;li&gt;It think it was made in the 90's (95% sure).&lt;/li&gt;&#xA;&lt;li&gt;As I'm french myself, the game may have reached only the french market?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11154" LastEditorUserId="11154" LastEditDate="2019-05-10T07:42:00.120" LastActivityDate="2019-05-10T08:50:42.773" Title="Looking for a MS-DOS cars game" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10971" PostTypeId="2" ParentId="4698" CreationDate="2019-05-09T11:30:48.637" Score="3" Body="&lt;p&gt;The DEC PDP-1 was a commercially available computer, launched in 1961.  It was not a minicomputer, much less a microcomputer.  It was only a &quot;teaching machine&quot; in the sense that about half of them were sold to universities, where they were used for both learning and research.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-1 had a hardware single step function, operated by a console switch.  More importantly, it had a debugging program, written by Alan Kotok at MIT.  You could set breakpoints in a program, and when it hit a breakpoint, you could examine and modify memory locations, including both variables and instructions.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Online searches say that DDT dates from 1964,  but I have a distinct recollection of using it as early as the summer of 1963,  and I believe it was already written by early 1962.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2019-05-09T11:30:48.637" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="10972" PostTypeId="2" ParentId="7506" CreationDate="2019-05-09T14:39:34.053" Score="1" Body="&lt;p&gt;The example timing diagram shown is for a complex situation where the CPU is acknowledging an interrupt and reading an interrupt vector (mode 2 interrupt  operation). As noted before the IORQ line going high shuts of the outputs of the Z80 peripheral chip. For non Z80 I/O chips it was usual to integrate the IORQ signal into the enable circuitry for that chip (the chip is only active for IORQ read/write cycles). Typical operation of a typical chip of the time was as follows (assuming /EN /RD and /WR type control):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EN=1 RD=X WR=X ----   Chip outputs are tristated (hiz), RD &amp;amp; WR signals irreverent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EN=0 RD=0 WR=1 ----   Chip is outputting data (no other chip on the bus should be enabled).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EN=0 RD=1 WR=0 ----   Chip is reading from the bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the Z80 would sample the data during a read on a clock edge some time after it expects the data to be stable on the bus, wait cycles could extend this period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 had many different types of memory/I/O read/write cycles. The original Z80 manual covers them all and it's worth studying as an example of a well engineered product of its time. &lt;/p&gt;&#xA;" OwnerUserId="1956" LastActivityDate="2019-05-09T14:39:34.053" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10973" PostTypeId="1" CreationDate="2019-05-09T19:14:06.393" Score="4" ViewCount="84" Body="&lt;p&gt;I picked up a TI Travelmate 4000E for free and it worked perfectly using my AC adapter(genuine TI one from another 4000E). The backlight fires up full brightness for about a second, then dies. Inverter whines quite audibly while on, then stays quiet. LCD still works even with the BL out and using a bright flashlight shined into the display, the machine is usable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far, I can rule out both the CCFL tube and the LCD itself. I'm thinking maybe a recap of the inverter board, but that's just my best educated guess. &lt;/p&gt;&#xA;" OwnerUserId="13562" LastEditorUserId="6794" LastEditDate="2019-05-10T00:55:08.820" LastActivityDate="2019-05-10T00:55:08.820" Title="Backlight inverter failure on TI Travelmate" Tags="&lt;hardware&gt;&lt;repair&gt;&lt;lcd-display&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="10974" PostTypeId="1" CreationDate="2019-05-10T07:46:35.987" Score="5" ViewCount="159" Body="&lt;p&gt;I'm looking to find the name of a (purportedly) educational mac game I purchased from a bookfair handout around 1990-91.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The concept was that you would make up the rules to your own board game on a tic-tac-toe like grid.  The computer would then play against you, and you told it who won.  It would then use that information to try to infer the rules of the game and improve its play on the next round.&lt;/p&gt;&#xA;" OwnerUserId="13564" LastEditorUserId="13564" LastEditDate="2019-05-19T04:27:35.970" LastActivityDate="2019-05-19T04:27:35.970" Title="Looking for educational AI game for classic macos" Tags="&lt;identify-this-game&gt;&lt;mac-os-classic&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="10975" PostTypeId="2" ParentId="10969" CreationDate="2019-05-10T08:04:20.073" Score="9" Body="&lt;p&gt;&lt;a href=&quot;https://www.mobygames.com/game/chicago-90&quot; rel=&quot;noreferrer&quot;&gt;Chicago 90 by Microids&lt;/a&gt;? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/58zhz.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/58zhz.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has a 'gangsters mode' and a 'police mode', and the object is to escape the city, or to capture criminals before they escape. French developer, too.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastEditorUserId="79" LastEditDate="2019-05-10T08:50:42.773" LastActivityDate="2019-05-10T08:50:42.773" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10976" PostTypeId="1" CreationDate="2019-05-10T08:09:05.570" Score="4" ViewCount="248" Body="&lt;p&gt;The BESM-6 Pascal compiler I'm experimenting with has a notable difference from Standard Pascal: formal arguments of formal parameters-procedures or functions are not specified, but are checked at runtime:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; PASCAL COMPILER 15.0 (15.02.82)&#xA; 00001    1  0 PROGRAM MAIN(OUTPUT);&#xA; 00007    2  1 PROCEDURE P(FUNCTION F:INTEGER);&#xA; 00007    3  3 BEGIN&#xA; 00015    4  3   WRITELN(F(P));&#xA; 00036    5  2 END;&#xA; 00037    6  1 FUNCTION F(I:INTEGER):INTEGER;&#xA; 00037    7  3 BEGIN&#xA; 00045    8  3   F := I + 5&#xA; 00045    9  2 END;&#xA; 00047   10  2 BEGIN&#xA; 00050   11  2   P(F);&#xA; 00072   12  0 END.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here we pass an integer function &lt;code&gt;F&lt;/code&gt; to the procedure &lt;code&gt;P&lt;/code&gt; and we attempt to call it with a procedure argument, whereas it accepts an integer argument and returns it incremented by 5 (e.g. in case of &lt;code&gt;WRITELN(F(5))&lt;/code&gt;, &lt;code&gt;10&lt;/code&gt; would be printed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The compilation succeeds, and at runtime the following happens:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; FORMAL PROC CALL ERROR&#xA; FOR 1 PARAMETR CALL FROM 001032&#xA;&#xA; PASCAL PM DUMP&#xA;      9 STACK LENGTH.  NAME=       P.LINE=3&#xA;&#xA;   3586 STACK LENGTH.  NAME=    MAIN.LINE=12&#xA;&#xA; PASCAL PMD END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've been able to verify that actual parameters are checked for number and for &quot;severe&quot; type discrepancies. E.g. passing CHAR to a function which accepts INTEGER succeeds, but attempting to pass a procedure instead of an integer fails.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Standard Pascal would not accept the code as written; it requires the formal parameter prototypes to be declared the same way as in actual definitions, like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   PROCEDURE P(FUNCTION F(I:INTEGER):INTEGER);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and all type checks are done at compile time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naturally, skipping compile-time type checks was done to reduce the size of the compiler at the cost of speed of the execution. Is it the way it was routinely done in the pre-standard Pascal compilers, or was it a corner cut specifically in the BESM-6 implementation? &#xA;(A slight hint to the latter is the spelling error in the word PARAMETER which mirrors the Russian spelling ПАРАМЕТР.)&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2019-05-11T12:35:04.980" Title="Was dynamic type check in Pascal commonplace?" Tags="&lt;compilers&gt;&lt;pascal&gt;&lt;besm-6&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="10977" PostTypeId="1" AcceptedAnswerId="11033" CreationDate="2019-05-10T11:36:53.807" Score="19" ViewCount="1021" Body="&lt;p&gt;I recently learned that mid 1980s, Motorola was working on a discrete graphics chipset that would be a great leap forward from its 6847 Video Display Generator and 6845 display controller. It was called the RMS (R.M.S. or Raster Management System) chipset and consisted of the MC68486 and MC68487 ICs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It (would have) had the following highlights: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Horizontal resolution from 64 to 640 pixels&lt;/li&gt;&#xA;&lt;li&gt;Vertical resolution from 64 to 500 pixels &lt;/li&gt;&#xA;&lt;li&gt;32 available colors from a palette of 4096 (Bit-plane mode) &lt;/li&gt;&#xA;&lt;li&gt;MC6847/MC6883 emulation &lt;/li&gt;&#xA;&lt;li&gt;Directly compatible with MC6809E and MC68000 CPUs  &lt;/li&gt;&#xA;&lt;li&gt;ASCII and mosaic characters in internal ROM &lt;/li&gt;&#xA;&lt;li&gt;6 text modes &lt;/li&gt;&#xA;&lt;li&gt;Text attributes: underline, flash, invert, color, double height and width&lt;/li&gt;&#xA;&lt;li&gt;From 32 to 32K user-definable characters (sprites?)  &lt;/li&gt;&#xA;&lt;li&gt;Game-oriented attributes: collision, priority, color offset &lt;/li&gt;&#xA;&lt;li&gt;Large virtual screen with smooth scrolling &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Motorola had gotten pretty far with the development of this chipset and extensive documentation was already written and available (&lt;a href=&quot;http://steeman.dk/coco/RMS-Manual-1984-Motorola.pdf&quot; rel=&quot;noreferrer&quot;&gt;RMS Manual 1984&lt;/a&gt;). EDIT: I also found some &lt;a href=&quot;https://archive.org/details/TNM_Motorola_Raster_Memory_System_-_Motorola_Inc_20180101_1364&quot; rel=&quot;noreferrer&quot;&gt;promotional material&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/j2T3t.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the book &quot;CoCo: The Colorful History of Tandy’s Underdog Computer&quot; (&lt;a href=&quot;https://books.google.dk/books?id=k5bNBQAAQBAJ&quot; rel=&quot;noreferrer&quot;&gt;ref&lt;/a&gt;), authors Boisy Pitre and Bill Loguidice describe how the RMS originally was developed in conjunction with or at least at the same time as the Tandy Color Computer 3, which was released in summer 1986. Presumably then, the CoCo3 was developed during 1985-86. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the manual for the RMS is dated to spring 1984 implying that the RMS was developed during 1983. It was also known beyond the walls of Tandy and Motorola as documented by several public mentions spanning 1984-1986: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/stream/QEX19812016/QEX%201984/QEX%201984-04_djvu.txt&quot; rel=&quot;noreferrer&quot;&gt;QEX April 1984&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=4071045&quot; rel=&quot;noreferrer&quot;&gt;IEEE MICRO'S PRODUCT Product Summary (1984)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.americanradiohistory.com/Archive-Radio-Electronics/80s/1984/Radio_Electronics_October_1984.CV01.pdf&quot; rel=&quot;noreferrer&quot;&gt;Radio Electronics October 1984&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://publicaciones.retromuseo.com:8123/Revistasv1/Dragon%20User%20Magazine/dragon%20user%20magazine%20031.pdf&quot; rel=&quot;noreferrer&quot;&gt;Dragon User November 1985&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://books.google.dk/books?id=ewGhBgAAQBAJ&quot; rel=&quot;noreferrer&quot;&gt;Die Zukunft der Informationssysteme (September 1986)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RgkrY.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RgkrY.png&quot; alt=&quot;RMS mentioned in Radio Electronics October 1984&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, 1983 was the year of the development and release of the CoCo2 and, incidentally, also the mysterious &quot;Deluxe Color Computer&quot; that never came to fruition. When the CoCo2 was released (and the Deluxe was dropped) some time presumably went by before Tandy started considering the CoCo3. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Deluxe Color Computer is described in the book by Pitre and Loguidice, as well as his blog &lt;a href=&quot;http://latenightcoco.blogspot.com/2015/05/the-deluxe-color-computer.html&quot; rel=&quot;noreferrer&quot;&gt;Late Night CoCo&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I have two main questions:  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How could the RMS have been developed in conjunction with the CoCo3, if it was developed in the year the CoCo2 was developed? &lt;/li&gt;&#xA;&lt;li&gt;What other systems has the 68486/68487 been used in, if any, so what was the fate of this early graphics powerhouse? &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance for any comments and replies!&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;EDIT: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found some more leads. Apparently, according to the &lt;a href=&quot;https://archive.org/details/TNM_Motorola_Raster_Memory_System_-_Motorola_Inc_20180101_1364&quot; rel=&quot;noreferrer&quot;&gt;RMS brochure&lt;/a&gt;, the system was supposedly showcased at the 1984 winter Consumer Electronics Show in Las Vegas. I tried to get more info, and I found some more mentions of this being demonstrated there, like the &lt;a href=&quot;https://archive.computerhistory.org/resources/access/text/2013/04/102723446-05-01-acc.pdf&quot; rel=&quot;noreferrer&quot;&gt;DataQuest Newsletter&lt;/a&gt;. If anyone has more info on whether this actually happened, or was merely planned, but dropped at the last moment, please leave a comment. &lt;/p&gt;&#xA;" OwnerUserId="12274" LastEditorUserId="12274" LastEditDate="2019-05-15T18:16:47.323" LastActivityDate="2019-05-18T11:51:13.127" Title="Fate of mystery Motorola RMS graphics chipset (68486 + 68487)" Tags="&lt;graphics&gt;&lt;color-computer&gt;&lt;motorola-68000&gt;&lt;6809&gt;&lt;coco&gt;" AnswerCount="2" CommentCount="12" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="10978" PostTypeId="1" CreationDate="2019-05-10T13:03:18.837" Score="21" ViewCount="2184" Body="&lt;p&gt;This is kind of a difficult question to phrase since the Apple 1 wasn't really that well adopted of a platform - under 200 of them made and mostly abandoned by the company within 2 years. That being said, it did have an interesting feature of being able to run with either a 6502 or 6800 CPU.&lt;/p&gt;&#xA;&lt;p&gt;Looking at the boards, I was always curious about the &amp;quot;6800 Only&amp;quot; markings on the silkscreen and had read something about how you could swap out the 6502 for a 6800 if you so desired. &lt;s&gt;Going through the Apple 1 registry, I can see &lt;a href=&quot;https://www.apple1registry.com/en/46.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;only one example&lt;/a&gt; of where someone actually installed a 6800 chip. Interesting enough, the areas of the board that were &amp;quot;6800 only&amp;quot; are only partially populated, but I digress..&lt;/s&gt; &lt;strong&gt;UPDATE 2021-03-01: Apparently the 6800 was noted in error recently! (thanks @benrg!)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;So what I'm really trying to ask is why would Woz have designed this alternate processor capability, what would have been the reason for using the 6800 and what (if any) software is known to have ever existed for the alternate setup?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2021-03-01T17:43:31.720" LastActivityDate="2021-03-01T17:43:31.720" Title="Was there ever any real use for a 6800-based Apple 1?" Tags="&lt;apple-1&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10979" PostTypeId="2" ParentId="4376" CreationDate="2019-05-10T14:09:23.667" Score="2" Body="&lt;p&gt;As answered the M1 is not used during full instruction fetch, just the first opcode byte. Note that the M1 has other purposes and shouldn't be messed with, especially if Z80 peripheral chips such as PIO/SIO/CTC etc. are used on same system. Mode 2 interrupts used the M1 along with IORQ as part of interrupt acknowledge, vector placement on bus and end of interrupt processing (peripheral chips detecting RETI ended interrupt). A very sophisticated and powerful interrupt system with interrupt chaining, vectored interrupts etc. (way ahead of the Intel 8086 system and didn't require an external interrupt controller). The business I was in in the eighties built process controllers and communication controllers and we stuck with the Z80 for years because of its peripheral chips and interrupt system.&lt;/p&gt;&#xA;" OwnerUserId="1956" LastActivityDate="2019-05-10T14:09:23.667" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10980" PostTypeId="2" ParentId="10978" CreationDate="2019-05-10T14:15:14.750" Score="4" Body="&lt;p&gt;[Caveat: This question asks for opinions and guesswork]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6800 was a well proven and widely avaible CPU, while the 6502 was brand new with an unclear future. More important, there was next to no software and no information beside the manuals available, while the 6800 already had a reasonable repository of information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, it was a &lt;strong&gt;sensible decision for a startup&lt;/strong&gt; to make their design to work with either. 6800 for people wanting to use it in a known/existing scenario and 6502 for more adventurous hobbyists - usually with lots of time to write their own software and as well cash strained, making the 6502 choice quite appealing.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-05-10T21:12:23.737" LastActivityDate="2019-05-10T21:12:23.737" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="10981" PostTypeId="2" ParentId="10978" CreationDate="2019-05-10T18:06:57.597" Score="38" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;At the Homebrew Computer club in Palo Alto, California (in Silicon Valley), Steve Wozniak, a 26 year old employee of Hewlett-Packard and a long-time digital electronics hacker, had been wanting to build a computer of his own for a long time... He looked at the Intel 8080 chip (the heart of the Altair), but at&#xA;  $179 decided he couldn’t afford it...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Another chip, the Motorola 6800, interested Wozniak because it resembled his favorite minicomputers (such as the Data General Nova) more than the 8080. However, cost was still a problem for him until he and his friend Allen Baum discovered a chip that was almost identical to the 6800, while considerably cheaper. MOS Technology sold their 6502 chip for $25, as opposed to the $175 Motorola 6800. Wozniak decided to change his choice of processor to the 6502 and began writing a version of BASIC that would run on it... When his BASIC interpreter was finished, he turned his attention to designing the computer he could run it on. Except for some small timing differences, he was able to use the hardware design he had earlier done on paper for the 6800.[1][2]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Steve Wozniak had tested the clock circuit but had not tried it with a real 6800 (In fact I received an email from him confirming this. The Apple 1 PCB was designed for either a 6502 or 6800 but only the 6502 was ever used).[3]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sources:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Weyhrich, Steven. &quot;The Apple-1.&quot; &lt;em&gt;Apple II History: The Story of &quot;The Most Personal Computer!&quot;&lt;/em&gt; Accessed 2019-05-10 from &lt;a href=&quot;https://apple2history.org/history/ah02/&quot; rel=&quot;noreferrer&quot;&gt;https://apple2history.org/history/ah02/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Moritz, Michael. &lt;em&gt;The Little Kingdom.&lt;/em&gt; New York, William Morrow and Company, Inc, 1984: 124-127.&lt;/li&gt;&#xA;&lt;li&gt;theamazingoperaman. &quot;Apple 1 World First? Running a 6800 processor on the Apple 1!&quot; Accessed 2019-05-10 from &lt;a href=&quot;https://www.youtube.com/watch?v=ag6pWUhps7U&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=ag6pWUhps7U&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-05-10T18:19:02.727" LastActivityDate="2019-05-10T18:19:02.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10983" PostTypeId="1" CreationDate="2019-05-11T01:00:45.393" Score="6" ViewCount="389" Body="&lt;p&gt;Back in the day I owned a couple Atari ST, I used a cartridge based program for writing video games. It was called &lt;strong&gt;&quot;ACTION&quot;&lt;/strong&gt; Does anyone remember this program or even better, know where I can get a ROM dump for my emulator?&lt;/p&gt;&#xA;" OwnerUserId="13570" LastEditorUserId="6659" LastEditDate="2019-05-11T06:43:16.983" LastActivityDate="2020-12-23T21:30:42.040" Title="Where to find a ROM dump for the Atari ST cartridge 'ACTION'" Tags="&lt;atari&gt;&lt;game-cartridge&gt;&lt;atari-st&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="10985" PostTypeId="2" ParentId="5121" CreationDate="2019-05-11T11:02:48.190" Score="7" Body="&lt;p&gt;A related question &lt;a href=&quot;https://stackoverflow.com/questions/12770378/why-did-they-use-numbers-for-register-names-in-x86-64&quot;&gt;was asked on StackOverflow&lt;/a&gt; after this question was asked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the other question, it was assumed that the register names are simply taken from the alphabet, so an extension to the x86 registers (as it has been done with the x86-64) would lead to the following register names: AX-BX-CX-DX-EX-FX-GX-...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this assumption is wrong. In nearly all early CPUs (8080, 6502, 6800 ...) CPU register names were named by their (intended) &lt;strong&gt;function&lt;/strong&gt;, not by any systematic naming scheme (such as taking the letters from the alphabet or using numbers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The x86 registers are also named by the function the registers were intended for:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;R0 = &lt;strong&gt;AX&lt;/strong&gt; = &lt;strong&gt;A&lt;/strong&gt;ccumulator&lt;br&gt;&#xA;R1 = &lt;strong&gt;CX&lt;/strong&gt; = &lt;strong&gt;C&lt;/strong&gt;ounter&lt;br&gt;&#xA;R2 = &lt;strong&gt;DX&lt;/strong&gt; = &lt;strong&gt;D&lt;/strong&gt;ata (maybe also &lt;strong&gt;D&lt;/strong&gt;ouble)&lt;br&gt;&#xA;R3 = &lt;strong&gt;BX&lt;/strong&gt; = &lt;strong&gt;B&lt;/strong&gt;ase&lt;br&gt;&#xA;R4 = &lt;strong&gt;SI&lt;/strong&gt; = &lt;strong&gt;S&lt;/strong&gt;ource &lt;strong&gt;I&lt;/strong&gt;ndex&lt;br&gt;&#xA;R5 = &lt;strong&gt;DI&lt;/strong&gt; = &lt;strong&gt;D&lt;/strong&gt;estination &lt;strong&gt;I&lt;/strong&gt;ndex&lt;br&gt;&#xA;R6 = &lt;strong&gt;BP&lt;/strong&gt; = &lt;strong&gt;B&lt;/strong&gt;ase &lt;strong&gt;P&lt;/strong&gt;ointer&lt;br&gt;&#xA;R7 = &lt;strong&gt;SP&lt;/strong&gt; = &lt;strong&gt;S&lt;/strong&gt;tack &lt;strong&gt;P&lt;/strong&gt;ointer&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The actual answer&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is pure incident that the words &quot;Accumulator&quot;, &quot;Base&quot;, &quot;Counter&quot; and &quot;Data&quot; start with the first four letters of the alphabet (A, B, C, D).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The developer could have decided to use the word &quot;Pointer&quot; instead of &quot;Base&quot;; in this case the register names would be AX-CX-DX-&lt;strong&gt;P&lt;/strong&gt;X instead of AX-CX-DX-&lt;strong&gt;B&lt;/strong&gt;X.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt that the developers of Intel even noticed that the register names follow the first four letters of the alphabet so they could be sorted alphabetically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Explanation of the register names&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Accumulator: In early CPUs, there were only one register that could perform arithmetic operations: The accumulator. I'm not sure about x86-64, but in the 8086 the AX register still was the only one that could be used for multiplication and division.&lt;/li&gt;&#xA;&lt;li&gt;Counter: The &lt;code&gt;rep&lt;/code&gt; and &lt;code&gt;loop&lt;/code&gt; instructions are using this register for counting.&lt;/li&gt;&#xA;&lt;li&gt;Double: The &lt;code&gt;DX&lt;/code&gt; register is used to hold the high 16 bits of a 32-bit (&quot;&lt;strong&gt;double&lt;/strong&gt; word&quot;) value.&lt;/li&gt;&#xA;&lt;li&gt;Base: Before the 80386, &lt;code&gt;BX&lt;/code&gt; was the only GPR that could be used for memory addressing. (Example&lt;code&gt;[BX+5]&lt;/code&gt;) (Note: Because &lt;code&gt;SI&lt;/code&gt;, &lt;code&gt;DI&lt;/code&gt; and &lt;code&gt;BP&lt;/code&gt; were intended for storing addresses only, I think that they were originally considered not to be &quot;GPRs&quot;.)&lt;/li&gt;&#xA;&lt;li&gt;Source Index: Registers whose only purpose was to point to an address were often called &quot;index registers&quot;. &lt;code&gt;SI&lt;/code&gt; is the index register holding the address &lt;code&gt;lods&lt;/code&gt; and &lt;code&gt;movs&lt;/code&gt; are reading data from.&lt;/li&gt;&#xA;&lt;li&gt;Destination Index: &lt;code&gt;DI&lt;/code&gt; is the index register holding the address &lt;code&gt;stos&lt;/code&gt; and &lt;code&gt;movs&lt;/code&gt; are writing data to.&lt;/li&gt;&#xA;&lt;li&gt;Base Pointer: This register points to the base address of the stack frame.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="8712" LastEditDate="2019-05-11T14:35:44.207" LastActivityDate="2019-05-11T14:35:44.207" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="10986" PostTypeId="2" ParentId="10976" CreationDate="2019-05-11T12:15:48.560" Score="5" Body="&lt;p&gt;Pascal compilers/runtimes typically do &lt;em&gt;some&lt;/em&gt; (very often, optionally, enabled by a flag) run-time type checking. A very typical run-time check supported by most Pascal compilers is &lt;em&gt;array bounds checking&lt;/em&gt;, because it is the most common type-related mismatch error in Pascal programs and bounds of actually used array indices are very hard to check at compile time against actual sizes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Checking procedural parameters at compile time, on the other hand, is actually relatively easy (or, rather, not conceivably more difficult than what the compiler needs to do anyhow) - Because you can call any procedure or function &lt;em&gt;directly&lt;/em&gt; (i.e. not across a procedural parameter redirection), it's type and formal parameters must be in some symbol table anyhow - It is relatively easy to check whether such an actual parameter fits the function's formal parameter - If the compiler is cleverly built, that is simply a comparison between two symbol table entries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your terminology: In my book, &quot;standard Pascal&quot; is what Wirth published in &lt;em&gt;Pascal User Manual and Report&lt;/em&gt; - and was later standardized (unchanged in contents, but rather only formalized) as ISO 7185:1983. So, you simply cannot say that there ever was a thing like a &quot;pre-standard Pascal compiler&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look at what Wirth provided in terms of implementations, there were actually two: A CDC compiler that supported procedural parameters and a P-code compiler that didn't. &lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-05-11T12:35:04.980" LastActivityDate="2019-05-11T12:35:04.980" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10987" PostTypeId="2" ParentId="10977" CreationDate="2019-05-11T18:38:33.213" Score="11" Body="&lt;p&gt;Based on the absolute dearth of information on the Motorola 68486/68487 video chipset (RMS), I would conclude that it was never officially released as a product for OEMs, and was therefore never used in any actual computer products. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[&lt;em&gt;UPDATE&lt;/em&gt;: Per OP finding, it appears that one company, Micro Concepts of the UK, was offering an SBC based on the 68000/010 with RMS, for sale in 1987. They advertised the product multiple times.]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also say, speculatively, that the chipset was likely still under development in 1984. For a new product seeking potential customers, it would not be unusual to produce a manual while the product was still under development. That way, changes and additions could be made to the product to suit customer feedback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The obvious reason that Motorola would have undertaken this project is that part of their business was creating peripheral controllers that easily interfaced to their microprocessor products. Prior to 1984, Motorola had great success in selling CRT Controllers (6845) for many different machines, including those based on the 6502, Z80, and even the early PC graphics boards. Additionally, they had a successful partnership with Tandy using the 6847 in the CoCo 1/2 and Dragon's clones. By 1983/84, Motorola was likely keen to update this video peripheral hardware to match competitors' capabilities and to make use of more advanced 16-bit processors like their own 68000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason this work never came to fruition is somewhat speculative, but I can see two obvious factors that would have killed the RMS project:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;RMS turned out to be unsuitable for use in the CoCo 3. The CoCo 3 was a late 8-bit era system designed to be extremely low-cost, fully compatible with the earlier CoCo's, and competitive with the Commodore C128, Atari XL/XE, and inexpensive Apple clones (Laser 128). As such, Tandy wanted to match or exceed those machines on specs while also undercutting them on price. They succeeded in this with the CoCo 3, but only by using the GIME chip (see photo). Using GIME instead of RMS resulted in a low-cost, single chip, compatible, integrated solution for video and memory, and having specs needed to compete with the aforementioned 8-bit machines.&lt;/li&gt;&#xA;&lt;li&gt;RMS turned out to be redundant for the 68000. The 68000 was a popular 16-bit microprocessor, but the system integrators who were using it either pursued proprietary solutions that were better than RMS (Amiga, X68000), deemed to be cheaper and good enough (Atari ST), or had different priorities, like crisp monochrome graphics on a small screen (Mac). With the industry heading this way, Motorola would not find many takers for RMS amongst their 68000 customers.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2Jh1b.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2Jh1b.jpg&quot; alt=&quot;Color Computer 3 motherboard showing GIME&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-05-18T11:51:13.127" LastActivityDate="2019-05-18T11:51:13.127" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="10988" PostTypeId="1" AcceptedAnswerId="11026" CreationDate="2019-05-11T21:46:10.233" Score="5" ViewCount="297" Body="&lt;p&gt;I recently picked up an XT IDE. It works fine for the most part, but when I tried to load BASIC samples from the original IBM DOS 1.1 floppy(I was booting from it), the system hung up, only showing a blinking cursor. When I have removed the card, everything was working. How can I fix it?&lt;/p&gt;&#xA;" OwnerUserId="13572" LastEditorUserId="4921" LastEditDate="2019-05-12T01:45:20.407" LastActivityDate="2019-05-15T21:12:46.247" Title="XT IDE causes BASIC not to load properly on IBM 5155" Tags="&lt;ms-dos&gt;&lt;ibm&gt;&lt;xt-ide&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10989" PostTypeId="1" CreationDate="2019-05-12T01:36:32.457" Score="11" ViewCount="619" Body="&lt;p&gt;I am hoping that someone here collects computer images from days gone by. Many years ago when I used my ATARI-ST I made two drawing I believe I used the art program NEOCHROME, or possibly DEGAS. The first one was a picture of a 3D ROSE on a light blue grid-like background. The other one was the same type background with a 3D teddy-bear. I have been looking for these for a while with no luck. I made these during my days when I worked in a computer store and sold ATARI-ST, AMIGA, and the 8 bit line of commodore &amp;amp; Atari computers. I put my pictures out in the domain on &quot;Bulletin Board Service&quot; (For you kids, that was pre-Internet). During an Atari convention they had a slide show of pictures and My Teddy-bear was used. Kinda cool to see your work being selected by the company that made the computer. Just hoping to see those pictures again. :)&lt;/p&gt;&#xA;" OwnerUserId="13570" LastActivityDate="2019-07-04T06:20:03.783" Title="Looking for ATARI-ST Graphics Image" Tags="&lt;graphics&gt;&lt;atari&gt;&lt;atari-st&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10990" PostTypeId="2" ParentId="1558" CreationDate="2019-05-12T02:26:30.113" Score="3" Body="&lt;p&gt;After finding this community just in the last couple days, some of these questions bring back great memories from my younger days. I used to repair the ATARI computers and did modifications to bump up the RAM in the ATARI computers. I remember opening the keyboards to do cleaning on the membrane. Just don't rub too hard or use any heavy cleaners on them as you will remove the silver off. If you get some silver corrosion use a pencil eraser and gently rub the contact point. Don't bother with the traces connecting them as they are thin and can be easily broken. use a multi meter to test continuity along the traces as they did seem to break causing key outages.&lt;/p&gt;&#xA;" OwnerUserId="13570" LastActivityDate="2019-05-12T02:26:30.113" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10991" PostTypeId="2" ParentId="5048" CreationDate="2019-05-12T15:08:00.990" Score="3" Body="&lt;p&gt;The increased transistor count was used for more colors. The Amiga wants to show off its blitter. PAL has 64 µs period of which 52 µs are used to display something. The rest of the time is used in the computer for different stuff. While the NES allows VRAM writes only in this period, shared memory architectures like C64 and Amiga use this to read the sprite data. The C64 has some sprite-slots which block the CPU. The Amiga wastes some cycles on copper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sprite data and one line of characters are stored in ring-buffers in the VIC-II, no random access. So transistor count scales lineary. Also: no left-right flip. Sadly the sprite ring buffers are not really rings, but open, and sprite data can not be written to screen multiple times (like zoomY of CPU-blocking sprites, or array of sprites like on Atari 800 space invaders or Amiga Sprite Backgrounds).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the NES has 4 color backgrounds at 256 px while C64 only has 160px. Also NES stores more sprites and muliplexes in fast hardware =&gt; transistor count goes up. Aparently ROM module bits are to expensive for a software sprite multiplexer.&lt;/p&gt;&#xA;" OwnerUserId="13577" LastActivityDate="2019-05-12T15:08:00.990" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10992" PostTypeId="2" ParentId="3314" CreationDate="2019-05-13T00:27:28.347" Score="2" Body="&lt;p&gt;I remember assembling by hand, and then inputting the hex code using a BASIC program called &lt;strong&gt;EZ-code&lt;/strong&gt;, whose listing was provided in a book, which I &lt;em&gt;still&lt;/em&gt; have (although it is falling to pieces), called &lt;a href=&quot;http://www.retro8bitcomputers.co.uk/Content/downloads/books/SpectrumMachineLanguageForTheAbsoluteBeginner.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Spectrum Machine Language for the Absolute Beginner&lt;/em&gt; by William Tang&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/F1KyI.jpg&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Spectrum Machine Language for the Absolute Beginner&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nbHTV.png&quot; alt=&quot;Spectrum Machine Language for the Absolute Beginner&quot; title=&quot;Spectrum Machine Language for the Absolute Beginner&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As there was a limit&lt;sup&gt;1&lt;/sup&gt; to the size of the code, due to the size of EZ-code's BASIC code, the coding had to be done in chunks, with each chunk written to tape, and then the respective parts where then &quot;linked&quot; using another BASIC program, from the same book, called &lt;strong&gt;Hexloader&lt;/strong&gt;, with each chunk being read from the tape and then saving the code as a whole back out on to tape.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arduous? Yes, but well worth the effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also remember there being a, rather pricey, Disassembler and Monitor produced by Sinclair themselves, and there was an Assembler too:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NLfVr.jpg&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Disassembler and Monitor and Zeus Assembler boxes&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NLfVr.jpg&quot; alt=&quot;Disassembler and Monitor and Zeus Assembler boxes&quot; title=&quot;Disassembler and Monitor and Zeus Assembler boxes&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; A limit of around 800 bytes and 200 instructions.&lt;/p&gt;&#xA;" OwnerUserId="202" LastEditorUserId="202" LastEditDate="2019-05-13T03:13:52.657" LastActivityDate="2019-05-13T03:13:52.657" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10993" PostTypeId="2" ParentId="10900" CreationDate="2019-05-13T04:55:07.270" Score="2" Body="&lt;p&gt;Japan.&#xA;In Japan, the SASI interface is relatively widely used. We can recall the NEC PC-98 and Sharp X68000 families, as well as less common systems.&lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2019-05-13T04:55:07.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10994" PostTypeId="1" CreationDate="2019-05-13T10:15:33.373" Score="2" ViewCount="136" Body="&lt;p&gt;Can there really be an objective way to determine the quality of a programming language or is it all just up to the subjectivity of the programmers when the quality of languages are discussed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a link between the amount of use a language gets and it's quality or are there well liked languages that by all accounts are still poor today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have the wheat been removed from the chaff when it comes to programming languages to the extent that there are no more bad languages remaining with any real usage or are poor programming languages always going to be part of computer science?&lt;/p&gt;&#xA;" OwnerUserId="12298" LastActivityDate="2019-05-13T10:15:33.373" Title="Can the quality of a programming language be objectively determined?" Tags="&lt;history&gt;" AnswerCount="0" CommentCount="7" ClosedDate="2019-05-13T10:57:03.267" ContentLicense="CC BY-SA 4.0" />
  <row Id="10995" PostTypeId="2" ParentId="7794" CreationDate="2019-05-13T10:27:11.380" Score="4" Body="&lt;p&gt;A fragment from DES encryption/decryption routine, the so-called Initial Permutation step:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ;--------------------------------------------------------------------;&#xA;    ; IPFORM - Initial Permutation. MAPS a 64 bit to 64 bit number       ;&#xA;    ;--------------------------------------------------------------------;&#xA;        POP     HL      ; Restore pointer to des data   +3&#xA;        LD      A,8     ; Loop Counter&#xA;    IPFORM                      ;&#xA;        DI                      ; We are using alternate registers&#xA;    ;-------------------------------; SET UP NOW COMPLETE&#xA;    IPFORML                         ;&#xA;        EX      AF,AF'          ; Swap accumulators, save loop counter&#xA;        LD      A,(HL)          ; Alternate accumulator&#xA;        RLA                     ;&#xA;        RR      C               ; C will contain byte 5 of output&#xA;        RLA                     ;&#xA;        RR      E               ; E will contain byte 1 of output&#xA;        RLA                     ;&#xA;        RR      B               ; B will contain byte 6 of output&#xA;        RLA                     ;&#xA;        RR      D               ; D will contain byte 2 of output&#xA;        EXX                     ; SECONDARY SET&#xA;        RLA                     ;&#xA;        RR      C               ; C' will contain byte 7&#xA;        RLA                     ;&#xA;        RR      L               ; L' will contain byte 3&#xA;        RLA                     ;&#xA;        RR      B               ; B' will contain byte 8&#xA;        RLA                     ;&#xA;        RR      H               ; H' will contain byte 4&#xA;        EXX                     ; PRIMARY SET&#xA;        INC     HL              ; Point to next byte&#xA;        EX      AF,AF'          ; Swap accumulators back&#xA;        DEC     A               ; Decrement loop counter&#xA;        JP      NZ,IPFORML      ; Repeat loop 8 times&#xA;    ;-------------------------------; Store the result data&#xA;        PUSH    DE              ; Store bytes 1,2 (L0BLK+0) on stack    +4&#xA;        EXX                     ; SECONDARY SET&#xA;        PUSH    HL              ; Store bytes 3,4 (L0BLK+0) on stack    +5&#xA;        PUSH    BC              ;                                       +6&#xA;        EXX                     ; PRIMARY SET&#xA;        POP     DE              ; DE = (R0BLK+2), BC = (R0BLK+0)    +5&#xA;    ENDIP                       ;&#xA;        EI                      ;&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And yes, DI/EI are there because the OS used EX* commands for fast context switch. &lt;/p&gt;&#xA;" OwnerUserId="13578" LastActivityDate="2019-05-13T10:27:11.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10996" PostTypeId="1" AcceptedAnswerId="10999" CreationDate="2019-05-13T12:11:34.083" Score="7" ViewCount="1188" Body="&lt;p&gt;I'm curious about how graphics were drawn on systems using the Motorola 6845. I understand this was used in the CGA? If so, did the 6845 really work bitwise, was the bitwise graphics entirely separate, or did they use changing character sets on the fly to represent different patterns?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-05-13T14:00:19.223" Title="Motorola 6845 and bitwise graphics" Tags="&lt;cga&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10997" PostTypeId="1" AcceptedAnswerId="11002" CreationDate="2019-05-13T13:39:54.007" Score="35" ViewCount="10776" Body="&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=4U9MI0u2VIE&quot; rel=&quot;noreferrer&quot;&gt;this scene from the 1995 movie &lt;em&gt;Hackers&lt;/em&gt;&lt;/a&gt;, Cereal pulls out several books referred to by different colors of the &quot;technicolor rainbow&quot;, including a &quot;green one&quot;, &quot;luscious orange&quot;, the &quot;Pink Shirt book&quot;, the &quot;Devil book&quot;, &quot;Dragon book&quot;, and a very large &quot;Red book&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the transcript, if you can't watch the video:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Speaker 1&lt;/strong&gt;: I'm in this computer, right? I'm looking around...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 2&lt;/strong&gt;: You got those Crayola books?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 3&lt;/strong&gt;: Yeah, technicolor rainbow.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 3&lt;/strong&gt;: Green one.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 1&lt;/strong&gt;: What is that? Let me see? What are these?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 4&lt;/strong&gt;: International UNIX environments.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 3&lt;/strong&gt;: Luscious orange.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 4&lt;/strong&gt;: Computer security criteria... DoD standards.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 4&lt;/strong&gt;: The pink-shirt book... guide to IBM PCs.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 4&lt;/strong&gt;: So-called due to the nasty pink shirt the guy wears on the cover.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 4&lt;/strong&gt;: Devil book, the UNIX bible.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 3&lt;/strong&gt;: What's that?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 4&lt;/strong&gt;: Dragon book, compiler design.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 3&lt;/strong&gt;: What's that?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Speaker 4&lt;/strong&gt;: The Red book.&lt;br&gt;&#xA;  NSA-trusted networks.&lt;br&gt;&#xA;  Otherwise known as 'The Ugly Red Book That Won't Fit On A Shelf'.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Were these just made up flights of fancy or where these books real? I'm especially interested if the &quot;ugly red book that won't fit on a shelf&quot; was based on anything real.&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="12380" LastEditDate="2019-05-14T12:50:53.507" LastActivityDate="2019-06-01T15:49:19.320" Title="Were any of the books mentioned in this scene from the movie Hackers real?" Tags="&lt;history&gt;" AnswerCount="3" CommentCount="12" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="10998" PostTypeId="2" ParentId="10996" CreationDate="2019-05-13T13:40:34.523" Score="6" Body="&lt;p&gt;CGA and Hercules Graphics use the 6845. In graphics mode, each pixel is controlled individually, with no involvement from the character generator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Graphics mode is controlled by bit 1 of the 03D8h control register; when it’s set, the framebuffer is treated as containing bitmap information, and when it’s cleared, the framebuffer is processed by the character generator. The bitmap layout in CGA isn’t linear; even rows come first, followed by odd rows (offset by 8 KiB). Pixels are packed, four pixels per byte in low resolution, eight pixels per byte in high resolution. Hercules has a similar interleaved layout, with four banks instead of two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.seasip.info/VintagePC/cga.html&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; has lots of details on CGA.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-05-13T13:40:34.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10999" PostTypeId="2" ParentId="10996" CreationDate="2019-05-13T13:41:27.967" Score="8" Body="&lt;p&gt;Basically the 6845 was a bunch of counter registers, which you could program by defining end values (and sometimes start values), and use to generate RAM addresses and CRT sync signals. There was also a separate row address, so the original intention clearly was for character based displays: With a bit of additional components, you'd read some RAM content describing a character into a latch, and then you'd use this to index a ROM describing the pixel pattern for that character. Which you'd load into a shift register and shift out to the video DAC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But of course then people also thought of ways to use this to display bit graphics. E.g. with a &quot;character height&quot; of 1, and no ROM access, and piping to RAM contents directly out of the shift registers. Or other variants for color. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you could have configuration bits that control which variant of external components to use (with ROM lookup, without ROM lookup, with color table lookup).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so, and so on. Bit the differences was all in the additional components, so &quot;the 6845 worked bitwise&quot; etc. doesn't really make sense. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chip was quite successful, and used in many different ways, and the registers used ended up in the CGA, EGA, VGA etc. cards (with various extensions), and today's graphics card &lt;em&gt;still&lt;/em&gt; have a legacy mode with this register layout. But the 6845 by itself still only is a bunch of counters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the &lt;a href=&quot;http://bitsavers.trailing-edge.com/components/motorola/_dataSheets/6845.pdf&quot; rel=&quot;noreferrer&quot;&gt;6845 data sheet&lt;/a&gt;, there's an example for additional components to create a character-based display, and you can read up on the details of operation.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2019-05-13T14:00:19.223" LastActivityDate="2019-05-13T14:00:19.223" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11000" PostTypeId="2" ParentId="10997" CreationDate="2019-05-13T13:48:19.987" Score="9" Body="&lt;p&gt;At least some of them were real.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Dragon book, compiler design: definitely real, a classic textbook.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The orange book, computer security criteria: real, never personally encountered it but I remember it being referred to, back in the day.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-05-13T13:48:19.987" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11001" PostTypeId="1" CreationDate="2019-05-13T13:54:10.660" Score="16" ViewCount="17128" Body="&lt;p&gt;(Posted this on HW Rec but got no responses.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would like to use an ISA expansion card in a modern PC. There are&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Expensive PCI - ISA adapters (but I cannot find any actually for sale now)&lt;/li&gt;&#xA;&lt;li&gt;USB-ISA adapters, which may not work&lt;/li&gt;&#xA;&lt;li&gt;New motherboards with ISA slots, rare and expensive&lt;/li&gt;&#xA;&lt;li&gt;Old motherboards for sale on Ebay&lt;/li&gt;&#xA;&lt;li&gt;PCI to ISA bridge chips (eg IT8888G), but no products using them?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Are there no practical solutions to this problem? I cannot be the first person to want to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: when I say &quot;modern&quot; I didn't really mean the very latest. Am not sure what CPU I have exactly but it is around ten years old.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;More&lt;/strong&gt;: The card is an &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11641/how-to-connect-scm-swapbox-isa-to-modern-pc&quot;&gt;SCM Swapbox&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2019-07-12T06:55:58.950" LastActivityDate="2020-04-03T20:14:46.857" Title="How to use ISA card in modern PC" Tags="&lt;ibm-pc&gt;&lt;isa&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11002" PostTypeId="2" ParentId="10997" CreationDate="2019-05-13T13:56:12.720" Score="67" Body="&lt;p&gt;As indicated on &lt;a href=&quot;https://www.imdb.com/title/tt0113243/faq#fq0016254&quot; rel=&quot;noreferrer&quot;&gt;IMDb&lt;/a&gt;, the books are&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Green: International UNIX Environments, probably part of POSIX or The X/Open Guide.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Orange: &lt;em&gt;Trusted Computer System Evaluation Criteria&lt;/em&gt;, part of &lt;a href=&quot;https://en.wikipedia.org/wiki/Rainbow_Series&quot; rel=&quot;noreferrer&quot;&gt;the Rainbow Series&lt;/a&gt; published by the US DoD.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Pink: &lt;em&gt;The Peter Norton Programmer's Guide to the IBM PC&lt;/em&gt; (Peter Norton wears a pink shirt in the cover photo, as can be seen in &lt;a href=&quot;https://en.wikipedia.org/wiki/Peter_Norton&quot; rel=&quot;noreferrer&quot;&gt;this Wikipedia article&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The devil book, &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0201061961&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;The Design and Implementation of the 4.3BSD Unix Operating System&lt;/em&gt;&lt;/a&gt; by Samuel J. Leffler, Marshall Kirk McKusick, Michael J. Karels and John S. Quarterman.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The dragon book, &lt;a href=&quot;https://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Compilers: Principles, Techniques, and Tools&lt;/em&gt;&lt;/a&gt; by Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman. (People who read the dragon book before 1986, or who were told about it by someone who did, would recognise &lt;a href=&quot;https://en.wikipedia.org/wiki/Principles_of_Compiler_Design&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Principles of Compiler Design&lt;/em&gt;&lt;/a&gt; as the dragon book instead.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Red: &lt;em&gt;Trusted Network Interpretation of the Trusted Computer System Evaluation Criteria&lt;/em&gt;, also part of the Rainbow Series.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-05-13T15:42:21.447" LastActivityDate="2019-05-13T15:42:21.447" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="11004" PostTypeId="2" ParentId="11001" CreationDate="2019-05-13T15:39:27.603" Score="14" Body="&lt;p&gt;There's basically two possibilities you may find:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The ISA card is a fairly trivial piece of hardware, using I/O ports or memory-mapping only. In this case, it is pretty likely an USB-to-ISA or PCI-to-ISA adapter will work. It is, however, also pretty likely a modern PCI-express or USB replacement is cheaper, thus rendering the adapter useless.&lt;/li&gt;&#xA;&lt;li&gt;The ISA card is not-so-trivial, might use DMA or even take over the bus completely, as many of the more complicated co-processor cards do. I happen to have a Motorola 68040 card on an ISA slot that does take over the bus completely and talks to the graphics card and disk controllers directly - something like that would be worthy of spending quite some of money for an adapter card - I don't, however, know of any adapter card that would support such a setup.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The above, either too simple to justify the cost of an adapter card, or too complicated that it is really working, is probably the main reason such ISA adapters are no longer available in the market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your best possible options are either buying a &lt;em&gt;relatively modern&lt;/em&gt; used PC that still has ISA slots (they're still available on eBay, if you're lucky, you'll find a very small and relatively recent Pentium board like they were used for PoS systems, that's what I did), or investing in a more modern setup, you can still buy new ISA-PC setups targetted at the embedded market (at a price, however).&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2019-05-13T15:39:27.603" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11005" PostTypeId="5" CreationDate="2019-05-13T17:22:48.963" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-05-13T17:22:48.963" LastActivityDate="2019-05-13T17:22:48.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11006" PostTypeId="4" CreationDate="2019-05-13T17:22:48.963" Score="0" Body="for questions related to the family of Motorola 680x0 processors" OwnerUserId="2080" LastEditorUserId="2080" LastEditDate="2019-05-13T21:15:55.500" LastActivityDate="2019-05-13T21:15:55.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11007" PostTypeId="1" AcceptedAnswerId="11009" CreationDate="2019-05-14T04:37:05.043" Score="13" ViewCount="4622" Body="&lt;p&gt;Floating-point coprocessors (FPUs) were an expensive, niche, add-on product for early desktop and home computers. but became commonplace by the mid-1990s, as they began to be included within the most popular CPUs. Game console CPUs also started including FPUs at some point in their history.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When did the popular consoles begin having FPU hardware, and how was it used by the game developers?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-05-14T10:14:17.003" Title="When did game consoles begin including FPUs?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;floating-point&gt;&lt;game-consoles&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11008" PostTypeId="2" ParentId="11007" CreationDate="2019-05-14T05:38:13.860" Score="6" Body="&lt;p&gt;Probably the Nintendo 64 was the first home console to use floating point math for its inner calculations, thanks to the graphics chipset provided by SGI. Other game consoles from its time, such as the Sony PlayStation, the SEGA Saturn, the Atari Jaguar or the Panasonic 3DO made use of integer fixed-point math exclusively. From this point on, basically all home game consoles made use of floating point, being the next one after the Nintendo 64 the SEGA Dreamcast and the PS2, both of which already included vectorization facilities for floating point math similar to 8x86's SSE, and to portable consoles with the Sony PSP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the realm of arcade machines however, maybe there were boards with floating point even earlier, given the graphics chipsets provided by Evans &amp;amp; Suntherland and others for arcade graphics in the early 90's, but I do not know about this point.&lt;/p&gt;&#xA;" OwnerUserId="11926" LastActivityDate="2019-05-14T05:38:13.860" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11009" PostTypeId="2" ParentId="11007" CreationDate="2019-05-14T05:39:10.410" Score="17" Body="&lt;p&gt;The first major console to incorporate an IEEE 754 floating point unit would be the N64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main use of them in games is for the mathematical operations involved when transforming in-game 3D objects into 2D shapes for rendering on the display. An important secondary use is for games that have physics engines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Previous consoles typically did this by means of fixed point calculations, which were reasonably fast but could suffer from loss of precision or overflow if an intermediate result wasn't scaled properly. This entails careful design and coding to deal with edge cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As such, the addition of floating point units to games console was more one of convenience for developers than anything with game changing impact in itself. It's also probably more a case of the machine being just after the dividing line of when they became a standard feature of mainstream hardware than a conscious decision to add it as a specific feature.&lt;/p&gt;&#xA;" OwnerUserId="12147" LastActivityDate="2019-05-14T05:39:10.410" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11010" PostTypeId="2" ParentId="11007" CreationDate="2019-05-14T09:21:10.307" Score="8" Body="&lt;p&gt;The 3DO, launched in 1993, &lt;a href=&quot;https://en.wikipedia.org/wiki/3DO_Interactive_Multiplayer#Hardware&quot; rel=&quot;noreferrer&quot;&gt;featured a custom FPU&lt;/a&gt;. Although the CPU is a standard ARM model, the FPU is a custom design for the system. It pre-dates the Nintendo 64 by 3 years.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2019-05-14T10:14:17.003" LastActivityDate="2019-05-14T10:14:17.003" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11011" PostTypeId="1" CreationDate="2019-05-14T11:45:34.690" Score="7" ViewCount="411" Body="&lt;p&gt;I only learned of &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC09&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASIC09&lt;/a&gt; today, and I'm trying to wrap my head around it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The manual talks about it being a compiler, but I'm not sure I see significant differences between its I-code and tokenized BASICs in general. I know you can PACK it, but that seems more like a symbol stripper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am also curious if anyone out there has a working version of BASIC09, preferably on the CoCo3? I would love to run the Ahl and Byte benchmarks through it.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="6659" LastEditDate="2020-05-24T10:19:40.457" LastActivityDate="2020-05-26T22:35:58.013" Title="BASIC09 and I-Code" Tags="&lt;basic&gt;&lt;coco&gt;&lt;os-9&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11012" PostTypeId="2" ParentId="11011" CreationDate="2019-05-14T15:30:16.620" Score="6" Body="&lt;p&gt;I can't speak to BASIC09 specifically, but there's quite a difference between an &quot;i-code&quot; and a tokenized form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At a minimum, the i-code, in the end, need not look at all like the source code, whereas the tokenized form effectively IS the source code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many BASICs, when you type LIST, simply parrot back out the tokenized data in long form. With i-code, you can't do that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another example is if you look at the DEC BASICs. They used &quot;statement modifiers&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 SUM10 = SUM10 + A(I) IF A(I) &amp;gt; 10 FOR I = 1 TO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;While this could be represented in tokenized form (in order to regenerate the source line), it can not be easily interpreted executed from that tokenized form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Token based runtimes, much like i-code, simply take what they see and execute it in the context their in. But you can easily see the runtime encountering the &lt;code&gt;SUM10 = SUM10 + A(I)&lt;/code&gt; with out knowing that it should do so yet (due to the IF statement) or even that I is properly in range or not (since it's not even been initialized properly yet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sure, you could jump through hoops. Put in &quot;invisible tokens&quot; or whatever specifically to support this kind of construct, but in the &quot;every byte counts&quot; of vintage BASICs, that's a lot of work for not a lot of value. But since the DEC BASICs WERE compiled, rather than just interpreted raw, the system was able to take statements like this and rewrite them internally to be more &quot;normal&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, consider:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 A = 1 + 2 * 3 / 2 + 4 * SQR(2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In a normal tokenized system, the expression runtime has to account for the operator precedence AT runtime to properly evaluate this expression. Having to do the multiplication and such before the additions, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whereas in a compiled form, it can be reduced to an RPN style where the evaluator doesn't have to worry about that any more. This makes the runtime faster, since it's much simpler.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 2 3 * 2 / 4 SQR(2) * + +&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2019-05-14T15:30:16.620" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11013" PostTypeId="2" ParentId="99" CreationDate="2019-05-14T16:18:58.877" Score="3" Body="&lt;p&gt;Another graphical computer launched before the Lisa was the Lilith, originally developed for internal use at ETH Zürich after Niklaus Wirth (of Pascal fame) had done a sabbatical at Xerox PARC. It served as the development platform for Pascal's successor language Modula-2, and at first built only for use at the computer science faculty of ETH (&quot;the Swiss MIT&quot;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was equipped with a high-resolution graphic display, a simple windowing system and a mouse.&#xA;An attempt was made to commercialise the technology in 1982, but given up as soon as 1983, after little more than 100 computers being sold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ethistory.ethz.ch/rueckblicke/departemente/dinfk/problemlagen/weitere_seiten/diser/index_EN/popupfriendly/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ethistory.ethz.ch/rueckblicke/departemente/dinfk/problemlagen/weitere_seiten/diser/index_EN/popupfriendly/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9074" LastActivityDate="2019-05-14T16:18:58.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11014" PostTypeId="2" ParentId="1142" CreationDate="2019-05-14T20:50:13.977" Score="2" Body="&lt;p&gt;A quick and easy way to crash Applesoft Basic (or at least put it in an unstable, glitchy state, requiring a press of the Reset button to fix) was:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;POKE 33, 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This sets the width of the screen (zero page location $21) to 0.  Other random POKEing would probably accomplish it, too, but this was easy and guaranteed.&lt;/p&gt;&#xA;" OwnerUserId="4325" LastActivityDate="2019-05-14T20:50:13.977" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11015" PostTypeId="2" ParentId="7148" CreationDate="2019-05-14T20:59:02.850" Score="3" Body="&lt;p&gt;Does &quot;Space-Crashers&quot; sound right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.uvlist.net/game-244437-Space+Crashers&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.uvlist.net/game-244437-Space+Crashers&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13592" LastActivityDate="2019-05-14T20:59:02.850" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11016" PostTypeId="1" CreationDate="2019-05-15T03:00:07.873" Score="9" ViewCount="391" Body="&lt;p&gt;In other words, what are some factual, non-subjective reasons why you might choose (or avoid) a certain file format ? (For example, disk usage, audio accuracy, emulator compatibility, etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm primarily curious about the Sega and Sony CD-based consoles (SegaCD, Saturn, Dreamcast, and Playstation).  Unfortunately, not many people seems to know the technical specifications of the various file formats:  bin, iso, bin/cue, iso/cue, img/sub/ccd/cue, iso/cue/wav, iso/cue/mp3, cdi, gdi/bin/raw.&lt;/p&gt;&#xA;" OwnerUserId="13597" LastActivityDate="2019-05-15T08:57:55.133" Title="What are the best file formats for backup &amp; emulation of retro game CDs? And why?" Tags="&lt;file-format&gt;&lt;cd-rom&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11017" PostTypeId="2" ParentId="11016" CreationDate="2019-05-15T08:57:55.133" Score="6" Body="&lt;p&gt;Due to the nature of optical media, the answer is probably whatever format lets you play the game as close as possible to how the original was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optical media can have many &quot;out of band&quot; features, that is things that are not part of the raw data stream encoded on the disk. Often they can only be read by specific drives, and in some cases only the special ones in the consoles themselves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the PlayStation and GameCube both used modified disks to make them difficult to copy. In the case of the PlayStation the disc has a specially encoded wobble that normal CD burners cannot replicate, and which normal CD drives don't pass on to the computer anyway so which is not easy to even read. The PlayStation itself doesn't allow software to read the wobble either, only the CD drive firmware checks for it and signals present/not present to the system. So even if a format existed for storing the wobble information, there is no practical way to read it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer to the question really is to use whatever lets you play the game. Once you have bypassed the copy protection system there is little difference between the formats, certainly in terms of how the resulting burned or emulated discs play.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-05-15T08:57:55.133" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11019" PostTypeId="1" AcceptedAnswerId="11020" CreationDate="2019-05-15T12:49:00.753" Score="8" ViewCount="1625" Body="&lt;p&gt;This is probably a stupid question, but I am struggling to understand how to 'use' &lt;a href=&quot;https://www.tosecdev.org/&quot; rel=&quot;noreferrer&quot;&gt;TOSEC&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those that are unfamiliar with TOSEC (and assuming I understand it correctly) the project aims to catalog old images, roms, doc files, etc. by using a standard naming convention (and I assume some sort of checkum/hash).  They periodically publish 'DAT' files with their latest (contributed) work.  They do not provide the roms or the images - but instead try to bring order to the chaos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This (on the surface) sounds like a reasonable goal but their site doesn't really explain (as far as I can tell) how to actually do anything &lt;em&gt;useful&lt;/em&gt; with the TOSEC dat files. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are only 4 tools listed in their download section.  One seems to deal exclusively with Amiga ADF files, two are specifically called out as 'old and obsolete don't use em'.  Leaving one tool called the TOSEC Dat Explorer (which sounds promising) except there is no download link provided.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am sure I am missing something.  Do I actually understand the purpose of TOSEC? and if so, how is it used?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Full Disclosure: I have not (yet) downloaded the 'dat' archive or any obsolete tools or done any &lt;em&gt;experimenting&lt;/em&gt;.  So I will apologize in advance if the answer to my question would have been &lt;em&gt;obvious&lt;/em&gt; if only I had done some legwork... &lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2019-05-15T13:25:18.097" Title="How to use TOSEC?" Tags="&lt;software-recommendation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11020" PostTypeId="2" ParentId="11019" CreationDate="2019-05-15T13:25:18.097" Score="7" Body="&lt;p&gt;The main point of the TOSEC files is to facilitate preservation work. Each TOSEC file lists software artifacts, of various kinds — disk images, raw Kryoflux flux dumps, etc., with their hashes. They are human-readable XML files. These can be used in two main ways:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;to organise a collection of files, in particular to rename them following the TOSEC nomenclature; tools such as &lt;a href=&quot;http://www.romvault.com/&quot; rel=&quot;noreferrer&quot;&gt;RomVault&lt;/a&gt; can help with this;&lt;/li&gt;&#xA;&lt;li&gt;to identify un-preserved artifacts, &lt;em&gt;i.e.&lt;/em&gt; if you image a disk, and see that it doesn’t match anything in TOSEC, either your disk is bad, or it hasn’t been preserved yet (in TOSEC).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Using the TOSEC files in this way doesn’t involve distributing the preserved files themselves. (TOSEC dumps are available from other sources...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are related efforts such as &lt;a href=&quot;http://totaldoscollection.org/&quot; rel=&quot;noreferrer&quot;&gt;the Total DOS Collection&lt;/a&gt; (see also &lt;a href=&quot;https://github.com/MobyGamer/total-dos-launcher&quot; rel=&quot;noreferrer&quot;&gt;MobyGamer’s total DOS launcher&lt;/a&gt;), and any such collection of hashes can be useful in other contexts (such as &lt;a href=&quot;https://salsa.debian.org/games-team/game-data-packager&quot; rel=&quot;noreferrer&quot;&gt;the game data packager&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-05-15T13:25:18.097" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11022" PostTypeId="1" AcceptedAnswerId="11027" CreationDate="2019-05-15T15:59:36.540" Score="13" ViewCount="388" Body="&lt;p&gt;I spent a couple hours repairing an Amiga A3000 that wouldn't boot yesterday. The fix was to remove Kickstart ROMs, clean the DIP leads and sockets with contact cleaner, and re-insert. Apparently a small corrosive film was preventing good contact between ROMs and sockets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The A3000 had been stored and unused for about 9 months. While it is stored indoors in a cool and relatively dry place, my home is subject to significant humidity levels for much of the year.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DIP chips (EPROMs, in this case) and sockets (decent quality, dual wipe) are typical of what you will find in most retro computers. I am wondering about upgrades or workarounds to minimize this problem in places with humidity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What can be done to minimize the appearance of this type of corrosion affecting socketed chips?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-10-29T16:46:47.030" Title="Preventing socketed chip corrosion?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;repair&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11023" PostTypeId="2" ParentId="11022" CreationDate="2019-05-15T16:03:20.267" Score="7" Body="&lt;p&gt;Low humidity helps, but beyond that there are no good solutions. You can coat the exposed parts with a protective seal but then they become difficult to maintain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Preventative maintenance is an option. Periodic cleaning with isopropanol will help. In fact after handling the parts try to clean them with alcohol to remove skin oils and other contaminants that can become oxidised or cause corrosion.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-05-15T16:03:20.267" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11024" PostTypeId="1" AcceptedAnswerId="11025" CreationDate="2019-05-15T16:14:37.683" Score="49" ViewCount="7164" Body="&lt;p&gt;I was just staring at my blinking terminal cursor:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EfuyN.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EfuyN.gif&quot; alt=&quot;blinking terminal cursor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And was wondering where it comes from.&#xA;Does anybody have some piece of history about the blinking cursor? I couldn't find much online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;E.g.:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;when/where was it invented?&lt;/li&gt;&#xA;&lt;li&gt;who invented it?&lt;/li&gt;&#xA;&lt;li&gt;is there a conventional blinking frequency?&lt;/li&gt;&#xA;&lt;li&gt;is there a technical reason for its shape?&lt;/li&gt;&#xA;&lt;li&gt;...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="13607" OwnerDisplayName="Gohu" LastActivityDate="2019-05-16T13:31:49.513" Title="How was the blinking terminal cursor invented?" Tags="&lt;terminal&gt;&lt;history&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11025" PostTypeId="2" ParentId="11024" CreationDate="2019-05-15T17:57:19.187" Score="40" Body="&lt;p&gt;The cursor is needed on a CRT raster display because otherwise it's hard to know where the next character will appear.  On a teletype or teleprinter, you know where the next character will be printed because that's where the print head is positioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The full-block cursor depends on the ability of your video hardware to do reverse video (otherwise the character under the cursor is obscured half the time, which is undesirable).  Early video hardware couldn't do this, so it was typical in the early days to see underline cursors, typically only a single scan line tall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DEC VT05 is a very early CRT terminal, and it used an underscore cursor.  According to the &lt;a href=&quot;http://manx-docs.org/details.php/1,4044&quot; rel=&quot;noreferrer&quot;&gt;VT05 Maintenance Manual&lt;/a&gt; (page 3-33) the video hardware could be configured with a 3.75 Hz or 7.5 Hz blink rate (or 3.125 Hz and 6.25 Hz in models with 50 Hz screen refresh), or always-on, via a jumper setting.  This was an internal jumper and not something the end user was expected to be able to change.  The later VT52 used a 2 Hz refresh rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The underscore cursor was easy to implement; a particular scan line in each character cell was reserved for the cursor and was lit when the character being drawn on-screen matched the cursor coordinates held in internal registers.  Blinking was easily handled by using a counter to toggle a flip-flop that switched the cursor between 'enabled' and 'disabled'.  The ability to blink the cursor was important otherwise it was hard to tell it apart from an underscore character.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2019-05-15T18:17:14.777" LastActivityDate="2019-05-15T18:17:14.777" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11026" PostTypeId="2" ParentId="10988" CreationDate="2019-05-15T21:12:46.247" Score="4" Body="&lt;p&gt;It turns out I can just use GW BASIC instead of BASIC and BASICA.&#xA;GW BASIC loads up just fine.&lt;/p&gt;&#xA;" OwnerUserId="13572" LastActivityDate="2019-05-15T21:12:46.247" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11027" PostTypeId="2" ParentId="11022" CreationDate="2019-05-15T23:05:04.520" Score="7" Body="&lt;p&gt;As already stated, there is no solution. I am a collector/restorer of stand up video arcade machines and pinball machines, and these all suffer from corrosion. Even after I have cleaned and restore a game, a chip can get corrosion after a year. The one thing I do, is I collect and throw any desiccant bags I come across into each machine cabinet to help prevent moisture. I have like 10 in each cabinet. Desiccant bags are those little sacks of stuff you find when you get new electronics. That is why they include them in the packaging. I'd find a couple small bags and put them inside the Amiga case somewhere that they wont affect the electronics in any way.&lt;/p&gt;&#xA;" OwnerUserId="13570" LastActivityDate="2019-05-15T23:05:04.520" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11028" PostTypeId="2" ParentId="11022" CreationDate="2019-05-16T07:12:29.883" Score="2" Body="&lt;p&gt;Once corrosion has started on the contacts, there's not much you can do to prevent it. Re-seating chips might or might not help for a while depending on storage conditions. Be aware that chemical anti-oxidation sprays are often acid-based to dissolve oxides plus some oil-based corrosion protection that tends to attract dust and can make matters even worse long-term. Thorough cleaning with alcohol would be a better option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can replace old sockets with new ones to at least reestablish factory-new condition and give the equipment a new lifespan (I consider that the best option. If you use good quality replacements, you can expect quite some life out of them.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also remove the sockets completely and solder chips directly to the PCB, this would be a once-and-for-all solution with obvious consequences. Thinking that one through, it is maybe a bit of a drastic measure, but how many new ROM versions (which justified the sockets in the first place) would you expect to be released in the next 30 years?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the circuitry, it might also be possible to replace sockets and EPROMS with soldered pin-compatible flash chips. Would give you the best of both worlds. I did that to some of my computers (Cambridge Z88, for example) that had soldered-in ROM chips for an easier upgrade.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="4335" LastEditDate="2019-05-16T14:40:44.580" LastActivityDate="2019-05-16T14:40:44.580" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11029" PostTypeId="1" CreationDate="2019-05-16T12:27:55.123" Score="8" ViewCount="1690" Body="&lt;p&gt;Back in the early to mid 1980s, I vaguely recall seeing an advert in a (I think) UK based computer periodical monthly (Your Computer, or Computer and Video Games), for a memory peripheral that offered &quot;paging&quot; which would allow the Sinclair ZX81, or the ZX Spectrum (I forget which), to have up to 128 kB (it might have been 256 kB) of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strike&gt;I think that the same company offered a &lt;em&gt;proper&lt;/em&gt; keyboard as well, and the company name &lt;em&gt;may&lt;/em&gt; have been DK Robotics&lt;sup&gt;1&lt;/sup&gt; (or something very similar to that). Or, it might have been the same company that offered an alternate [character set?] ROM for the ZX81, whose name I really can't remember&lt;sup&gt;2&lt;/sup&gt;.&lt;/strike&gt; The links provided by DroidW show that it wasn't dk'tronics after all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I seem to remember it being a full page advertisement, showing the device, which was a large [vertical?] board full of ICs (behind the ZX81) and explaining how the paging was achieved. There may have been the ability of adding a number of boards into slots, but now my memory is getting a bit unreliable, w.r.t. that part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am starting to wonder that, as the board was shown &lt;em&gt;not&lt;/em&gt; encased in a plastic shell, maybe it was a prototype. I &lt;em&gt;think&lt;/em&gt; that I only saw the ad &lt;em&gt;once&lt;/em&gt;. This was not an ubiquitous product, only mail order, not seen in local shops or chains. The ad may also have been in a more &quot;serious&quot;, or business type, magazine, like PCW (Personal Computer World), and not in Your Computer or C&amp;amp;VG, as I first thought.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've looked through my few remaining old magazines and can't find it, unfortunately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that there is a lot of &lt;em&gt;oublié&lt;/em&gt;, maybes and mights in this question, but does anyone recall this peripheral, and/or have a photo of the advertisement?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/DK%27Tronics&quot; rel=&quot;nofollow noreferrer&quot;&gt;dk'tronics&lt;/a&gt; seems to be the keyboard producing company, although the Wikipedia page makes no mention of the expanded memory kit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; It turns out to be the same company, dk'tronics. Thanks to DroidW, for indirerctly providing the &lt;a href=&quot;http://live.worldofspectrum.org/files/large/d88c22cf980e385&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt; to the advert for the keyboard and the graphics ROM.&lt;/p&gt;&#xA;" OwnerUserId="202" LastEditorUserId="202" LastEditDate="2019-05-17T06:24:54.827" LastActivityDate="2019-05-17T08:06:48.007" Title="Largest memory peripheral for Sinclair ZX81?" Tags="&lt;memory&gt;&lt;zx81&gt;" AnswerCount="4" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11030" PostTypeId="2" ParentId="11029" CreationDate="2019-05-16T12:55:49.323" Score="9" Body="&lt;p&gt;You might be willing to check &lt;a href=&quot;http://www.worldofspectrum.org/hw.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this hardware list&lt;/a&gt; from World of Spectrum. It contains useful information and magazine advertisements of each hardware piece.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=1000575&quot; rel=&quot;nofollow noreferrer&quot;&gt;DK’Tronics memory expansion kits&lt;/a&gt; and &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=1000123&quot; rel=&quot;nofollow noreferrer&quot;&gt;DK’Tronics keyboard&lt;/a&gt; match you DK’Tronics memories, but the memory expansion kits weren’t as big as indicated in your question: “only” 16 KiB or 64 KiB.&lt;/p&gt;&#xA;" OwnerUserId="7067" LastEditorUserId="79" LastEditDate="2019-05-16T16:59:50.277" LastActivityDate="2019-05-16T16:59:50.277" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11031" PostTypeId="2" ParentId="11029" CreationDate="2019-05-16T13:13:11.250" Score="8" Body="&lt;p&gt;There were various companies producing these of which DK'Tronics was one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example &lt;a href=&quot;https://archive.org/details/Computer_Video_Games_Issue_004_1982-02_EMAP_Publishing_GB/page/n87?q=zx81%20memory&quot; rel=&quot;noreferrer&quot;&gt;Ceedata&lt;/a&gt;, &lt;a href=&quot;https://archive.org/details/your-computer-magazine-1982-10/page/n71?q=zx81%20memory&quot; rel=&quot;noreferrer&quot;&gt;Bridge Software&lt;/a&gt;, &lt;a href=&quot;https://archive.org/details/ZX-computing-1985-12/page/n91?q=zx81%20memory&quot; rel=&quot;noreferrer&quot;&gt;Indescomp and Memotech&lt;/a&gt;, &lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2019-05-16T13:13:11.250" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11032" PostTypeId="2" ParentId="11024" CreationDate="2019-05-16T13:31:49.513" Score="21" Body="&lt;p&gt;In 1967, a magazine article, cited a few times in the decade afterwards, said: &lt;blockquote&gt; The cursor (entry marker) identifies the next display position to be entered. The cursor continually blinks three to five times per second, which permits quick visual location by the operator. &lt;/blockquote&gt; &lt;sup&gt;&amp;mdash; F. H. Reagan Jr. (February 1967). &quot;Viewing the CRT Display Terminals&quot;. &lt;em&gt;Data Processing Magazine&lt;/em&gt;. pp. 32&amp;ndash;37.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was talking about the Datanet-760 Keyboard/Display System from General Electric, which came out in 1965.  A 1966 report from Auerbach says the same thing: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;The cursor continually blinks 3 to 5 times per second, which permits quick visual location by the operator.&lt;/blockquote&gt; &lt;sup&gt;&amp;mdash; &quot;GE DATANET-760 KEYBOARD/DISPLAY SUBSYSTEM&quot;.  &lt;em&gt;Auerbach Data Communications Reports&lt;/em&gt;.  November 1966.  p. 6321:06&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;cursor is nondestructive and blinks continually 3 to 5 times a second to aid operator visibility;&lt;/blockquote&gt; &lt;sup&gt;&amp;mdash; &quot;GE DATANET-760 KEYBOARD/DISPLAY SUBSYSTEM&quot;.  &lt;em&gt;Auerbach Data Communications Reports&lt;/em&gt;.  November 1966.  p. 6321:09&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Note to readers of these &lt;a href=&quot;https://usermanual.wiki/Document/AuerbachDataCommunicationsReportsVol21970.1075835479/view&quot; rel=&quot;noreferrer&quot;&gt;Auerbach Data Communications Reports&lt;/a&gt; on-line:  The reports were issued over a period of several years, and the document that you see all of these decades later is an accumulation of looseleaf inserts.  The actual date of each item is in MM/YY format in the corners of the pages.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gives you one of the earliest terminals that had a blinking cursor, and the reason why it had a blinking cursor.  Since both Auerbach and M. Reagan used exactly the same sentence, I presume that this originated with General Electric doco and can be viewed as GE's own rationale for this feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The GE user manual, the Auerbach report, and the magazine article all show prior art to the widely claimed invention of the blinking cursor by Charles A. Kiesling at Sperry Rand, whose patent was filed later, in August 1967.  Whether &lt;em&gt;this&lt;/em&gt;, in its turn, is the invention of the blinking cursor, and who exactly at GE did this, I cannot tell you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are rather assuming that the cursor has one shape.  In fact, it hasn't.  At the time, as alluded to in the Sperry patent, the shapes of cursors were a lot more varied than they are now in GUI terminal emulator programs.  Terminals used horizontal lines, vertical lines, rotated &quot;L&quot; shapes, underscores, underscores+overlines, and blocks.  The innovation in the middle 1960s is specifically a cursor that &lt;em&gt;blinks&lt;/em&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see from the report, the Datanet-760 was one of several terminals where the &lt;em&gt;text&lt;/em&gt; could be made to blink, also.  Blinking was a way to draw attention to more than just the cursor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ironically, it was the microcomputer revolution that narrowed the shapes down.  Microcomputers employed off-the-shelf VDAC/VTLC/CRTC parts that, by the 1970s, had mostly settled on cursors formed by inclusive/exclusive-ORing the character ROM output, under the control of a counter that was clocked by the vertical synch and logic to select which scan lines this applied to.  The start and end scan lines, the blink cycle, and whether blinking was enabled, were all in programmable hardware registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gave us a lot of equipment with these semantics, which is what you see in emulator programs, emulating these things on GUIs in software, today.  The GUI programs have within the past couple of decades added things such as vertical line and box cursors which the 1970s and 1980s hardware did not have but that the more widely varied 1960s in some cases &lt;em&gt;did&lt;/em&gt; have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, they have also reversed direction on blinking, with people changing terminal emulators to default to &lt;em&gt;non-blinking&lt;/em&gt; cursors.  This is because these are not hardware cursors, implemented as OR circuitry.  They aren't even sprites.  They are purely rasterized shapes in GUI window display memory, which a processor has to wake up and re-draw at every blink state change, continually.&lt;/p&gt;&#xA;" OwnerUserId="1932" LastActivityDate="2019-05-16T13:31:49.513" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11033" PostTypeId="2" ParentId="10977" CreationDate="2019-05-16T21:08:30.897" Score="4" Body="&lt;p&gt;With some Google sorcery, I finally located a system that used the elusive RMS chip set: The &lt;strong&gt;Microbox 3&lt;/strong&gt; manufactured and sold by UK-based company &quot;Micro Concepts&quot; from  Cheltenham! I can only find it described in detail one place and that is in the &lt;a href=&quot;https://www.americanradiohistory.com/Archive-Wireless-World/80s/Wireless-World-1986-05.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Electronics &amp;amp; Wireless World issue of May 1986&lt;/a&gt;. On page 63, it is announced as the &lt;strong&gt;British rival to the Amiga&lt;/strong&gt; and the description leaves little doubt: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Microbox 3 is a colour graphics computer designed around the 68000 (or&#xA;  68010) processor running at 8MHz and Motorola's Raster Memory System&#xA;  chip set. It offers 40 different screen modes, with resolution ranging&#xA;  up to 640 by 500 pixels, plus features such as a 4096- colour palette,&#xA;  eight reusable sprites and a virtual screen of up to 512K in size with&#xA;  smooth horizontal or vertical scrolling.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Apart from omitting the parts numbers themselves (68486 &amp;amp; 68487) the specification match the RMS exactly, and it is explicitly named &lt;em&gt;Motorola's Raster Memory System chip set&lt;/em&gt;. There's little doubt that this is the real thing: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8IeCF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8IeCF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the same magazine, I found ads from Micro Concepts for the &lt;em&gt;Microbox 3&lt;/em&gt; in a number of issues, e.g. &lt;a href=&quot;https://www.americanradiohistory.com/Archive-Wireless-World/80s/Wireless-World-1987-05.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;May 1987 (page 463)&lt;/a&gt; and &lt;a href=&quot;https://www.americanradiohistory.com/Archive-Wireless-World/80s/Wireless-World-1987-10.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;October 1987 (page 1018)&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Features include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;68000 CPU @ 8MHz clock &lt;/li&gt;&#xA;&lt;li&gt;512K dynamic RAM&lt;/li&gt;&#xA;&lt;li&gt;64K static RAM &lt;/li&gt;&#xA;&lt;li&gt;128K EPROM &lt;/li&gt;&#xA;&lt;li&gt;Onboard graphics controller offers: &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;80 column, 24 row, 16 colour text&lt;/li&gt;&#xA;&lt;li&gt;640 x 480, 4 colour graphics&lt;/li&gt;&#xA;&lt;li&gt;320 x 480, 16 colour graphics&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Floppy disc controller&lt;/li&gt;&#xA;&lt;li&gt;Dual serial RS232 ports&lt;/li&gt;&#xA;&lt;li&gt;Centronics printer port&lt;/li&gt;&#xA;&lt;li&gt;Up to 48 lines of parallel I/O&lt;/li&gt;&#xA;&lt;li&gt;Runs OS-9/68K, TRIPOS and CP/M-68K &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are a number of other mentions of the RMS chip set in very disparate places around the world, but the above system is the definite proof that Motorola DID release it and sold it and that has been used. The greatest mystery is how this could have gone under the radar. According to one source, the RMS was showcased at the winter CES 1984 in Las Vegas. In contrast, the Amiga prototype drew quite a lot of attention at the summer CES that very same year! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The few only other sources confirming the existence of the Motorola RMS beyond 1984: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A report on new technologies in the &lt;a href=&quot;https://www.americanradiohistory.com/Archive-Wireless-World/80s/Wireless-World-1985-07.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Electronics Wireless World July 1985 issue&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Maarten Van Wamelen, a Belgian Dragon User in the &lt;a href=&quot;http://publicaciones.retromuseo.com:8123/Revistasv1/Dragon%20User%20Magazine/dragon%20user%20magazine%20031.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;November 1985 issue of Dragon User&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Three esteemed Austrian scholars, Karl Christian Posch, Reinhard Posch and Wolf-Dietrich Fellner on page 167 of a Computer Science study book &lt;a href=&quot;https://books.google.dk/books?id=ewGhBgAAQBAJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Die Zukunft der Informationssysteme&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://steeman.dk/coco/SYSC3601.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Some Lab notes&lt;/a&gt; associated with the Systems and Computer Engineering study at Carleton University, Ottawa, Canada&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All these are leads worth exploring further. Of course, full attention should be directed at the UK company who developed and sold the &lt;em&gt;Microbox 3&lt;/em&gt; boards! With loads of luck, there may still be RMS specimens knocking about out there, though I wouldn't hold my breath. :-( &lt;/p&gt;&#xA;" OwnerUserId="12274" LastActivityDate="2019-05-16T21:08:30.897" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11034" PostTypeId="1" AcceptedAnswerId="11035" CreationDate="2019-05-16T21:10:32.937" Score="4" ViewCount="173" Body="&lt;p&gt;I have a ZX-81 in my collection, but do not know what revision it is. The board text just says &quot;Sinclair ZX81&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, there were 3 revisions of the ZX-81. What are the landmarks I can use to determine which of the revisions I have?&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2019-05-16T21:18:22.597" LastActivityDate="2019-05-16T22:57:15.263" Title="How to determine PCB revision of a Sinclair ZX-81" Tags="&lt;sinclair&gt;&lt;zx81&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11035" PostTypeId="2" ParentId="11034" CreationDate="2019-05-16T22:40:36.917" Score="5" Body="&lt;p&gt;The easiest way to tell is by looking at the traces on the board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If they look curvy, as though hand-drawn, it's an issue 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If they're in more or less straight lines, it's a 2 or 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seeing as issue 2 boards are exceedingly rare in the wild, it's almost certainly the latter. You can confirm this by looking for the issue number on the board, which should be between the voltage regulator and a bank of resistors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Just to confuse matters there are also boards for the US market labeled as &quot;Issue One&quot; with straight traces. These are clearly marked as &quot;Sinclair ZX81&quot; and &quot;USA&quot; by the edge connector though, and should be relatively easy to distinguish from either of the UK boards. Later US models were sold as Timex Sinclair 1000 or 1500 machines.&lt;/p&gt;&#xA;" OwnerUserId="12147" LastEditorUserId="12147" LastEditDate="2019-05-16T22:57:15.263" LastActivityDate="2019-05-16T22:57:15.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11036" PostTypeId="2" ParentId="11029" CreationDate="2019-05-16T23:31:41.157" Score="6" Body="&lt;p&gt;You may be thinking of the BASICare Micro System, an advert for which can be seen here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.zx81stuff.org.uk/zx81/publisher/BASICare/mag/SinclairUser/Issue008/Pages/SinclairUser00800004.jpg&quot; rel=&quot;noreferrer&quot;&gt;http://www.zx81stuff.org.uk/zx81/publisher/BASICare/mag/SinclairUser/Issue008/Pages/SinclairUser00800004.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In theory, you could use it to expand the RAM of your ZX81 up to a megabyte, although there would be very little use of it past 16K.&lt;/p&gt;&#xA;" OwnerUserId="12147" LastActivityDate="2019-05-16T23:31:41.157" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11037" PostTypeId="1" AcceptedAnswerId="11039" CreationDate="2019-05-17T03:04:54.200" Score="11" ViewCount="502" Body="&lt;p&gt;When running TR-DOS commands from within BASIC, it's necessary to prefix the command with &lt;code&gt;RANDOMIZE USR 15619: REM:&lt;/code&gt; first. I understand the former command, but not the latter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, to load a program called &quot;foo&quot;, this is done:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RANDOMIZE USR 15619: REM: LOAD &quot;foo&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Instead of this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RANDOMIZE USR 15619: LOAD &quot;foo&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Why is this? Why is a &lt;code&gt;REM&lt;/code&gt; statement necessary if it's essentially a no-op? Is it used to add padding to align the memory for some reason? Is it used to waste a few t-states for timing reasons?&lt;/p&gt;&#xA;" OwnerUserId="8090" LastActivityDate="2019-05-17T08:48:31.490" Title="Purpose of using REM when running TR-DOS commands in BASIC" Tags="&lt;zx-spectrum&gt;&lt;basic&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11038" PostTypeId="2" ParentId="11029" CreationDate="2019-05-17T08:06:48.007" Score="1" Body="&lt;p&gt;@greenonline, I can't find it but think I recall the advert you are thinking of. Was a set of modules Daisy chained behind a ZX81.. offering number of models including memory and hires graphics etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't think you have found it yet, but recall it was not often I saw it even though I used to read the same magazines. I remember thinking, why would you spend large sums of money to expand a low cost computer instead of starting with an Apple II?&lt;/p&gt;&#xA;" OwnerUserId="13617" LastActivityDate="2019-05-17T08:06:48.007" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11039" PostTypeId="2" ParentId="11037" CreationDate="2019-05-17T08:48:31.490" Score="17" Body="&lt;p&gt;The disk handling routine at 15619 will look ahead in the currently-executing BASIC line to see what command needs to be performed. As Ross Ridge observes, it evidently doesn't modify the BASIC interpreter's internal state when doing this, and so when the &lt;code&gt;RANDOMIZE USR 15619&lt;/code&gt; call returns, the interpreter will continue at the next statement. If the &lt;code&gt;REM&lt;/code&gt; wasn't there, the interpreter would proceed to handle the subsequent &lt;code&gt;LOAD &quot;foo&quot;&lt;/code&gt; as a standard BASIC statement, and attempt to load from tape. (Sinclair BASIC treats everything after a REM until the end of the line as part of the comment - including anything following a colon - so the &lt;code&gt;LOAD &quot;foo&quot;&lt;/code&gt; is considered part of the &lt;code&gt;REM&lt;/code&gt; comment and skipped.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, not all TR-DOS commands correspond to valid Sinclair BASIC syntax - &lt;code&gt;CAT #&lt;/code&gt; is an example of a command which doesn't. Since the BASIC interpreter performs a syntax check at the point of entering the line, the &lt;code&gt;REM&lt;/code&gt; is necessary to prevent the syntax checker from rejecting the line.&lt;/p&gt;&#xA;" OwnerUserId="13618" LastActivityDate="2019-05-17T08:48:31.490" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11040" PostTypeId="2" ParentId="11022" CreationDate="2019-05-17T16:50:47.447" Score="4" Body="&lt;p&gt;It may be hard to find this info, but see if you can find sockets with contacts composed of &lt;em&gt;the same material&lt;/em&gt; as your chip's pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the pin and socket are different metals, and it's a moist environment, you can get &lt;em&gt;galvanic&lt;/em&gt; corrosion. (This is why gold-plated contacts can be a bad idea; the gold itself will not corrode or oxidize, but base metals in contact with it will.) &lt;a href=&quot;https://blog.samtec.com/post/dissimilar-metals-in-mating-connectors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's a blog post with a compatibility table&lt;/a&gt;; to summarize, iron, nickel, tin and lead are more or less compatible, but copper introduces some risk, and silver and gold are riskier still.&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2019-05-17T16:50:47.447" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11041" PostTypeId="1" CreationDate="2019-05-17T22:09:07.673" Score="3" ViewCount="195" Body="&lt;p&gt;I am looking for an article from an issue of Personal Computer World (PCW) from 1982&lt;sup&gt;1&lt;/sup&gt;  which related to generating mazes/dungeons using pseudo random seeds, what I think are (now) called &lt;em&gt;procedural dungeon maps&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This system/language agnostic article explained that (and &lt;em&gt;I'm&lt;/em&gt; using ZXBasic terminology) if the &lt;code&gt;RAND&lt;/code&gt; seed is the same, at the start of the program then the subsequent calls to &lt;code&gt;RND&lt;/code&gt; would generate a consistent set of numbers each time the program was run, thereby creating a consistent dungeon.&lt;/p&gt;&#xA;&lt;p&gt;The article also had a &lt;em&gt;side bar&lt;/em&gt; which then went on to explain how a similar result could be obtained by using a &lt;em&gt;certain range of places of the decimal part&lt;/em&gt;&lt;sup&gt;2&lt;/sup&gt; of the result of a mathematical function (I think a combination of &lt;code&gt;TAN&lt;/code&gt;, &lt;code&gt;SIN&lt;/code&gt; and &lt;code&gt;COS&lt;/code&gt; was used), taking the x and y co-ordinates of the player as arguments,  would also result in a repeatable sequence of numbers, from which a room in the dungeon could be described.&lt;/p&gt;&#xA;&lt;p&gt;There isn't (currently) a complete archive of the PCW magazines on the web at the moment, for example, as discussed here, &lt;a href=&quot;http://www.amibay.com/showthread.php?51596-quot-Personal-Computer-World-quot-magazine-1980-s-pdfs&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Personal Computer World&amp;quot; magazine -1980's - pdfs?)&lt;/a&gt;. There are a few snippets available on archive.org, see &lt;a href=&quot;https://archive.org/search.php?query=subject%3A%22personal%20computer%20world%22&quot; rel=&quot;nofollow noreferrer&quot;&gt;Personal Computer World search&lt;/a&gt;, but that is about it&lt;sup&gt;3&lt;/sup&gt;. Hence, I am unable to find the article online.&lt;/p&gt;&#xA;&lt;p&gt;Does someone has a copy of that article, and if so, could they provide a scan of it, as an answer?&lt;sup&gt;4&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;As an aside, I am pretty sure that the same edition of PCW that has this random generated dungeon article, also has the advertisement that I am asking about in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11029/largest-memory-peripheral-for-sinclair-zx81&quot;&gt;Largest memory peripheral for Sinclair ZX81?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Notes&lt;/h3&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; I don't know which month, but I think it would have been in the first six months. It may also have been a very late 1981 issue - I purchased my ZX81 either Dec 81 or Jan 82, and so I would have been buying magazines from that period. My first two magazines were &lt;a href=&quot;https://archive.org/details/computer-video-games-magazine-003&quot; rel=&quot;nofollow noreferrer&quot;&gt;C&amp;amp;VG Issue 3 Jan 82&lt;/a&gt; and this missing PCW issue.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; As a simplistic example, the third to sixth decimal places could be used, so if the result was &lt;code&gt;0.2345967&lt;/code&gt; then &lt;code&gt;4596&lt;/code&gt; would be used to generate the room.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;3&lt;/sup&gt; Additionally, there are some links to scans from the chess related pages (&lt;em&gt;Micro Chess&lt;/em&gt;) of PCW can be found here, &lt;a href=&quot;https://www.chessprogramming.org/Personal_Computer_World&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chess Programming - Personal Computer World&lt;/a&gt; and the magazine covers only at &lt;a href=&quot;http://www.computinghistory.org.uk/sec/573/Personal-Computer-World/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computing History - Personal Computer World&lt;/a&gt;. I have also just found this, &lt;a href=&quot;http://pcwpp.blogspot.com/2010/06/every-once-in-while-i-get-bug.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Personal Computer World Preservation Project&lt;/a&gt;, which mentions:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;All PCWs are available at The National Museum of Computing (&lt;a href=&quot;http://tnmoc.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://tnmoc.org&lt;/a&gt;). They are currently being digitised too.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Here is their &lt;a href=&quot;http://www.tnmoc.org/explore/archive&quot; rel=&quot;nofollow noreferrer&quot;&gt;archive&lt;/a&gt;, but it isn't online.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;4&lt;/sup&gt; &lt;em&gt;Better still&lt;/em&gt;, in &lt;em&gt;&lt;strong&gt;addition&lt;/strong&gt;&lt;/em&gt; to the scan (so as to avoid a &lt;strong&gt;link-only answer&lt;/strong&gt;), an online repository of PCW magazines from the 80's, where I could find the answer/article/issue myself?&lt;/p&gt;&#xA;" OwnerUserId="202" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-05-18T06:24:19.057" Title="Early 1982 PCW article about pseudo random dungeon mapping" Tags="&lt;magazine&gt;" AnswerCount="0" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11042" PostTypeId="2" ParentId="9700" CreationDate="2019-05-18T00:17:37.520" Score="6" Body="&lt;p&gt;If you can get to a library or institution with JSTOR access, &lt;a href=&quot;https://www.jstor.org/stable/3679576?seq=1#page_scan_tab_contents&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt; will take you to a story that &lt;em&gt;probably&lt;/em&gt; will give you your answer. (I don't have such access myself.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The linked article is an overview of Mac music software circa 1985. It calls out MusicWorks, along with ConcertWare, MacMusic, MusPrint, Professional Composer, Song Painter, and Music Character Set. The Google summary of the page includes this snippet:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The disk opens with an icon of a &quot;ghetto-blaster&quot; and a files icon of&#xA;  a...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;...but that doesn't appear on the free page, so I can't tell which one has this icon.&lt;/p&gt;&#xA;" OwnerUserId="495" LastEditorUserId="495" LastEditDate="2019-05-19T04:46:36.937" LastActivityDate="2019-05-19T04:46:36.937" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11043" PostTypeId="1" AcceptedAnswerId="11045" CreationDate="2019-05-18T01:20:06.277" Score="9" ViewCount="327" Body="&lt;p&gt;I have a BBC Master 128 with the standard ROM installed. This includes ADFS v1.50 in slot &quot;D&quot;. I want to replace this ADFS in ROM with a patched version, loaded from disk, into Sideways RAM. It is a 16K .bin file. The patched version is needed to support my IDE interface. I think the standard ADFS in ROM just supports SCSI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems I can UNPLUG the ROM version of ADFS, but I haven't found the right command to replace it using SRLOAD. I don't know which address to use or what ID to give it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be the correct sequence of MOS commands (or, better, OSCLI commands that I can put into a BASIC program)?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-05-18T19:23:15.957" Title="Patch BBC Master ROM using Sideways RAM?" Tags="&lt;rom&gt;&lt;bbc-micro&gt;&lt;file-system&gt;&lt;ram&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11044" PostTypeId="1" AcceptedAnswerId="11046" CreationDate="2019-05-18T17:50:54.797" Score="6" ViewCount="212" Body="&lt;p&gt;In the Apple IIgs computer, the address and data buses of the 65C816 CPU connect directly to the onboard ROM, except for A14, which, according to the schematic, is routed through the FPI ASIC. There's no mention of this or why in the Apple IIgs Hardware Reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What function does the FPI chip perform on the A14 signal? Does it merely buffer it, or is the behavior more complex?&lt;/p&gt;&#xA;" OwnerUserId="7486" LastActivityDate="2019-05-18T20:06:00.633" Title="Why does the Apple IIgs FPI chip buffer the A14 address signal to the ROM?" Tags="&lt;apple-ii&gt;&lt;apple-iigs&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11045" PostTypeId="2" ParentId="11043" CreationDate="2019-05-18T19:23:15.957" Score="4" Body="&lt;p&gt;I think it should go something like this. (I don't know where I can find a ROM image that'll load into an online emulator to check.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can check which ROMS are in which bank.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*ROMS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;ADFS should be in bank D (i.e. 13).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*UNPLUG 13&#xA;*ROMS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That should now show that ADFS is unplugged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Load your image into one of the sideways RAM banks 4, 5, 6, or 7 (apparently also known as W, X, Y and Z).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*SRLOAD image 8000 7&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Next, configure this to be the file system. (Probably not absolutely necessary.)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*CONFIGURE FILE 7&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I think if you also unplugged DFS it would be selected as first available FS, but you'll also lose the &lt;code&gt;*SR&lt;/code&gt; commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the tricky bit. You need to reset in order for the MOS to pick up the image. I am not sure if this need to be a hard reset (CTRL-BREAK).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's a soft reset, you can just call the reset vector.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CALL !-4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(&lt;code&gt;!&lt;/code&gt; reads two bytes. &lt;code&gt;-4&lt;/code&gt; is truncated to &lt;code&gt;&amp;amp;FFFC&lt;/code&gt; which is the 6502 reset vector.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can arrange to continue execution of your program.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*KEY 10 OLD|MGOTO 1000|M&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm not too sure how to go about fiddling with the MOS to make it pick up ROMs without the CTRL-BREAK.&lt;/p&gt;&#xA;" OwnerUserId="11003" LastActivityDate="2019-05-18T19:23:15.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11046" PostTypeId="2" ParentId="11044" CreationDate="2019-05-18T20:06:00.633" Score="4" Body="&lt;p&gt;I might be wrong, but AFAIR it was something already present on the Apple IIc to support a 32 KiB ROM image instead of a 16 KiB (starting with ROM Version 0). For ROM access either half could be selected. So this isn't really A14, but the ROMs A14 to select one of two 16 KiB regions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-05-18T20:06:00.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11047" PostTypeId="1" CreationDate="2019-05-18T21:33:19.923" Score="3" ViewCount="327" Body="&lt;p&gt;I know it's still used for many industrial microcontrollers but that's not what I am asking; I also know that it's quite slow.&#xA;It's just that I hate seeing an unused port on my desktop pc, while all other ports (USB, Sata, PCIe...) are busy. So, please suggest me some creative use for a serial port, even through an adapter, just for fun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Thank you for all the answers and comments. Some are very interesting, especially the audio-related ones. I'm sorry if this question is likely to attract &quot;opinion-based&quot; answers, but this is exactly what I was looking for with my open question.&lt;/p&gt;&#xA;" OwnerUserId="13628" LastEditorUserId="13630" LastEditDate="2019-05-19T17:30:29.137" LastActivityDate="2019-05-19T17:30:29.137" Title="Creative uses for serial port?" Tags="&lt;serial&gt;" AnswerCount="3" CommentCount="17" FavoriteCount="1" ClosedDate="2019-05-19T13:40:00.513" ContentLicense="CC BY-SA 4.0" />
  <row Id="11048" PostTypeId="2" ParentId="11047" CreationDate="2019-05-18T22:09:12.837" Score="2" Body="&lt;p&gt;If you want to be very creative:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The serial port can be considered a 1-bit PCM stream (not 100% controllable, as you have at least 1 constant start bit from an UART, synchronous transmit would be better for this application). You could thus use the serial port for 1-bit audio. If you run it fast enough, you could probably achieve acceptable quality (Atari's TIA or the ZX Spectrum's sound output didn't work much differently). &lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-05-19T07:08:00.903" LastActivityDate="2019-05-19T07:08:00.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11049" PostTypeId="2" ParentId="11047" CreationDate="2019-05-19T01:59:00.463" Score="2" Body="&lt;h3&gt;GPIO&lt;/h3&gt;&#xA;&lt;p&gt;Handshaking lines (CTS, DTR, etc.) can be used as a status monitor for a simple boolean value (e.g., switch open/close) without transferring any &amp;quot;normal&amp;quot; data. However, I'm not sure (and can't research right now) where this has been done except in conjunction with data transfer (e.g., detect drop of CD to trigger port monitoring process reset/automatic logout). A little searching &lt;a href=&quot;https://www.pebblebay.com/embedded-systems-serial-communication/&quot; rel=&quot;nofollow noreferrer&quot;&gt;found this reference&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ol start=&quot;7&quot;&gt;&#xA;&lt;li&gt;Using the Modem status lines as GPIO&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In addition to the Tx and Rx signals many UARTs provide modem signals that may or may not be used by the application. Console ports in my experience rarely use these additional signals so they can often be used for some other purpose, assuming they are available and routed to the connector.  One thing they’re often useful for is general-purpose outputs for debugging and timing.  There are two outputs: RTS, DTR,  and 4 inputs: CTS, DSR, DCD, RI. The state of the inputs is read from a status register and the state of the outputs is set by writing to a control register.&lt;/p&gt;&#xA;&lt;p&gt;In a 16550-compatible UART this is the Modem Status Register (MSR) and Modem Control Register (MCR) respectively. In an ARM PrimeCell UART this is the Flag Register (UARTFR) and the Control Register (UARTCR) respectively.&lt;/p&gt;&#xA;&lt;p&gt;For example, if you need to time how long it takes to handle a particular interrupt, it’s easy enough to insert code that toggles the state of a modem output at the entry and exit of the interrupt handler.  You can then measure the execution time easily on a scope.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The trick is finding where this has been done on retro systems.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-05-19T14:00:26.830" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11050" PostTypeId="2" ParentId="11047" CreationDate="2019-05-19T08:23:21.543" Score="2" Body="&lt;p&gt;Well, slow is not really a thing. I remember we used PC COM ports as fast I/O as the speeds of the handshaking bits where faster than LPT ... The PC transmit speeds are limited to 115200 Baud but the control/handshaking lines are faster. Also on MCU you can have even 33 MBaud... Here are some PC based non traditional use for COM RS232 examples:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;PWM&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the transmitted data can be used as HW PWM generator with 8 or 9 levels. Simply transmit number with number of set bits equal to your wanted level... If you use RC filter or non linear load it will create a sort of DAC.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;sound&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;as others suggested, you can use RS232 as a sound generator, even PCM. As the USART is buffering you can use it more comfortably without the need for accurate timing code making it much more easier and even faster in comparison to in build speaker. Take a look at this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/48521522/2521214&quot;&gt;Assembly playing audio file TASM 16 bit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;signal generator&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the frequency of RS232 COM port on PC is driven by 16 bit divider from &lt;code&gt;115200 Hz&lt;/code&gt;. So if you continuously send alternating zeros and ones in binary (start/stop/parity bit included) then you have HW frequency generator...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;voltage generator&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is wild stuff but I am using this for programming MCUs. as the RS232 protocol has &lt;code&gt;+/-10V&lt;/code&gt; or &lt;code&gt;+/-15V&lt;/code&gt; voltages you can use them as a source of power in applications that has just single voltage power supply like +5V or +3.3V without the need for voltage multipliers ... Simply use the TxD output from PC as AC power supply, so rectify it by diodes filter with capacitor and you have +/- 10V voltages ... Of course, to be able to work this way you need to be sending data from PC continuously and the load must not be too big. I usually use it for 3.3V/RS232 voltage converters (without MAX232)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, today's MCUs have really small power requirements if used properly, so this can be also used to power MCU applications alone without the need for additional power supply. It can get handy time to time ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The COM port on PC has one big advantage over other interfaces on Windows, and that is it does not require additional drivers for access. You simply open file with name &lt;code&gt;COM1,COM2,...&lt;/code&gt; and that is it ... In comparison with USB LPT the SW implementation is &lt;strong&gt;much much much&lt;/strong&gt; easier, free of charge and comfortable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it helps, here is my ancient COM example for MS-DOS in Borland Turbo C++:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//---------------------------------------------------------------------------&#xA;//--- Includy: --------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;#include &amp;lt;iostream.h&amp;gt;&#xA;//----------------------------------------------------------------------------&#xA;//--- Global data: -----------------------------------------------------------&#xA;//----------------------------------------------------------------------------&#xA;typedef unsigned char byte;&#xA;typedef unsigned int word;&#xA;word far *memw=0x00000000;&#xA;byte far *mem=0x00000000;&#xA;char    key;&#xA;word    keyhi;&#xA;&#xA;word    com;&#xA;//----------------------------------------------------------------------------&#xA;//--- I/O: -------------------------------------------------------------------&#xA;//----------------------------------------------------------------------------&#xA;void inkey()&#xA;    {&#xA;    key=0;&#xA;    keyhi=0;&#xA;    asm {&#xA;        mov ax,256&#xA;        int 0x16&#xA;        jz  esc&#xA;        mov ax,0&#xA;        int 0x16&#xA;        mov key,al&#xA;        mov keyhi,ax&#xA;        }&#xA;esc:&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void inkeyw()&#xA;    {&#xA;    asm {&#xA;        mov ax,0&#xA;        int 0x16&#xA;        mov key,al&#xA;        mov keyhi,ax&#xA;        }&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;byte in(word adr)&#xA;    {&#xA;    byte    x;&#xA;    asm {&#xA;        mov dx,adr&#xA;        in  al,dx&#xA;        mov x,al&#xA;        }&#xA;        return x;&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void out(word adr,byte x)&#xA;    {&#xA;    asm {&#xA;        mov dx,adr&#xA;        mov al,x&#xA;        out dx,al&#xA;        }&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;//--- com: ------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;void com_init(word x)&#xA;    {&#xA;    com=memw[(0x400&amp;gt;&amp;gt;1)+x-1];   // adr portu z DOS TAB 0000:0400h&#xA;    out(com+1,0);           // ziadne int&#xA;    out(com+3,3);           // 1 start, 8 data, 1 stop, 0 parity&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void com_speed(word f)&#xA;    {&#xA;    word x,h,l;&#xA;    x=115200/f;&#xA;    h=(x &amp;gt;&amp;gt; 8) &amp;amp; 255;&#xA;    l=x &amp;amp; 255;&#xA;    x=in(com+3) &amp;amp; 127;&#xA;    out(com+3,x+128);&#xA;    out(com+0,l);&#xA;    out(com+3,x+128);&#xA;    out(com+1,h);&#xA;    out(com+3,x);&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;byte com_in()&#xA;    {&#xA;    byte s;&#xA;//  do s=in(com+5); while ((s&amp;amp;1)!=1);&#xA;    s=in(com+0);&#xA;    return s;&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void com_out(byte d)&#xA;    {&#xA;    byte s;&#xA;    do s=in(com+5); while ((s&amp;amp;32)!=32);&#xA;    out(com+0,d);&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;//--- Subroutines: ----------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;void couthex(word x)&#xA;    {&#xA;    word    a,i;&#xA;    char    c;&#xA;&#xA;    for (i=0;i&amp;lt;4;i++)&#xA;        {&#xA;        a=(x &amp;gt;&amp;gt; 12) &amp;amp; 15;&#xA;        x=x &amp;lt;&amp;lt; 4;&#xA;        if (a&amp;lt;10) c=a+'0';&#xA;        if (a&amp;gt;=10) c=a-10+'A';&#xA;        cout &amp;lt;&amp;lt; c;&#xA;        }&#xA;    cout &amp;lt;&amp;lt; 'h';&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;//--- Main: -----------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;void main()&#xA;    {&#xA;    asm {&#xA;        mov ax,3&#xA;        int 0x10&#xA;        }&#xA;&#xA;    char    x=0;&#xA;&#xA;    com_init(1);&#xA;    com_speed(1404);        // common i8051 / 24 MHz and PC USART frequency&#xA;    cout &amp;lt;&amp;lt; &quot;COM adress = &quot;; couthex(com);  cout &amp;lt;&amp;lt; endl;&#xA;&#xA;    do      {&#xA;        inkey();&#xA;        x=com_in();&#xA;        couthex(x);&#xA;        cout &amp;lt;&amp;lt; endl;&#xA;        } while (keyhi==0);&#xA;&#xA;&#xA;    cout &amp;lt;&amp;lt; &quot;COM adress = &quot;; couthex(com);  cout &amp;lt;&amp;lt; endl;&#xA;    inkeyw();&#xA;&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;//--- End. ------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="4921" LastEditDate="2019-05-19T14:07:16.387" LastActivityDate="2019-05-19T14:07:16.387" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11051" PostTypeId="2" ParentId="9700" CreationDate="2019-05-19T16:43:11.773" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;MusicWorks&#xA;  Hayden Software 600 Suffolk St.&#xA;  Lowell, Massachusetts 01853 USA&#xA;  $46.00&lt;br&gt;&#xA;  The disk opens with an icon of a &quot;ghetto-blaster&quot; and a files icon of a cassette; we sense we are in a fun time. If today is like practically every day since MusicWorks' release, then at this very moment someone is probably uploading yet another MusicWorks tune to Compuserve or any one of hundreds of other bulletin board systems and databases.    &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vqFbw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vqFbwm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;sub&gt;(click)&lt;/sub&gt;&lt;br&gt;&#xA;   &lt;sub&gt;MusicWorks Draw Synth 1 menu.&lt;/sub&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;sub&gt;Christopher Yavelow: &quot;Music Software for the Apple Macintosh&quot;, Computer Music Journal, Vol. 9, No. 3 (Autumn, 1985), pp. 52-67, The MIT Press. (&lt;a href=&quot;https://www.jstor.org/stable/3679576&quot; rel=&quot;nofollow noreferrer&quot;&gt;jstor&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://macgui.com/downloads/?file_id=24086&quot; rel=&quot;nofollow noreferrer&quot;&gt;This application&lt;/a&gt; can be seen and heard in action on several youtube videos:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=gdQJNPSw-DM&quot; rel=&quot;nofollow noreferrer&quot;&gt;MusicWorks, Published on Aug 9, 2007, MusicWorks for Mac cca.1985&lt;/a&gt; &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;provides the following screenshot:    &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5ABMR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5ABMRm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;sub&gt;(click)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Although the document icons seem to be different:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/b8Pm0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/b8Pm0m.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;sub&gt;(click)&lt;/sub&gt;&lt;br&gt;&#xA;  &lt;sub&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=a_6Pw_k99UM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mac Plus running MusicWorks after &quot;Analog Board&quot; recapping&lt;/a&gt;&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And the mentioned &quot;Rock It&quot; is performed here&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=S6WEB7fTPRY&quot; rel=&quot;nofollow noreferrer&quot;&gt;Macintosh SE - &quot;Rock It&quot;&lt;/a&gt;&lt;br&gt;&#xA;  Published on Nov 4, 2012&lt;br&gt;&#xA;  My old SE playing &quot;Rock It&quot; by Herbie Hancock, one of the built-in MusicWorks demos. Enjoy!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The application is actually one and the same as the one from MacroMind: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/MacroMind&quot; rel=&quot;nofollow noreferrer&quot;&gt;MacroMind&lt;/a&gt; was an Apple Macintosh software company founded in Chicago in 1984 by Marc Canter, Jay Fenton and Mark Stephen Pierce. The company's first product was SoundVision, a combined music and graphics editor. Before the release, the graphics editor was removed, and SoundVision became MusicWorks. Along with other early programs, MusicWorks was originally distributed by Hayden Software.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In 1988 the company moved to San Francisco, and in 1991 MacroMind merged with Paracomp to become MacroMind-Paracomp, then in 1992 merged with Authorware, Inc forming Macromedia.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And we all know who buried &lt;a href=&quot;https://en.wikipedia.org/wiki/Macromedia&quot; rel=&quot;nofollow noreferrer&quot;&gt;Macromedia&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6802" LastEditorUserId="6802" LastEditDate="2019-05-19T17:00:18.560" LastActivityDate="2019-05-19T17:00:18.560" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11052" PostTypeId="1" AcceptedAnswerId="11053" CreationDate="2019-05-19T20:33:17.440" Score="14" ViewCount="2941" Body="&lt;p&gt;I thought the i8080 had 8 16-bit IN ports and 8 16-bit OUT ports. Doesn't that mean the instructions&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IN d8 ; only index 0-7?&#xA;OUT d8 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;can only take 8 possible values? What would it be indexing otherwise?&lt;/p&gt;&#xA;" OwnerUserId="13631" LastActivityDate="2019-06-24T12:13:31.307" Title="Why do the i8080 I/O instructions take a byte-sized operand to determine the port?" Tags="&lt;8080&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11053" PostTypeId="2" ParentId="11052" CreationDate="2019-05-19T20:37:33.223" Score="25" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I thought the i8080 had 8 16-bit IN ports and 8 16-bit OUT ports.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 8080 does not have any I/O Ports. It's a microprocessor, not a microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Maybe the system you're playing with does have these 8+8 ports, but they are always external to the CPU)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8080 features a 16 bit data/program address space and an 8 bit I/O i/o address space. Or in other words it can address 64 KiB of memory and 256 I/O locations. Each of them with 8 Bit width.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-24T12:13:31.307" LastActivityDate="2019-06-24T12:13:31.307" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11054" PostTypeId="2" ParentId="11052" CreationDate="2019-05-20T00:11:09.800" Score="6" Body="&lt;p&gt;The question of whether something is &quot;memory&quot; or &quot;I/O&quot; depends upon how it responds to various control signals.  There is nothing that would prevent anyone from wiring an I/O device so that it would respond to a range of &quot;memory&quot; addresses, and for some kinds of I/O device that could be more useful than wiring it to the &quot;I/O&quot; read/write signals.  On the other hand, an I/O device which is wired to behave as a memory device will respond to an instruction that writes to &lt;code&gt;HL&lt;/code&gt; whenever HL holds its address, without regard for whether HL was &lt;em&gt;supposed&lt;/em&gt; to hold that address.  An I/O device that response to I/O address 0x57 by contrast will &lt;em&gt;only&lt;/em&gt; respond to an &quot;out 57h&quot; instruction, and the likelihood of the processor encountering that byte sequence by chance is smaller than the likelihood that HL might end up with a bogus address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it would have been possible to make the &lt;code&gt;OUT nn&lt;/code&gt; instruction take a two-byte address operand, that would have made the opcode bigger and slower while offering little benefit for most applications, especially given that the applications which would need more than 256 bytes of I/O space would &lt;em&gt;also&lt;/em&gt; need to access I/O devices using register-based addresses and should thus likely be wired as &quot;memory&quot; devices.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-05-20T00:11:09.800" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11055" PostTypeId="2" ParentId="11052" CreationDate="2019-05-20T07:13:02.270" Score="5" Body="&lt;p&gt;The port number can take 256 possible operands. Apparently &lt;code&gt;d8&lt;/code&gt; means an 8-bit operand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;http://altairclone.com/downloads/manuals/8080%20Programmers%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;8080 Assembly Programming Manual&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5sL6K.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5sL6K.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;OUT&lt;/code&gt; instruction has a similar description.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seeing this line&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IN d8 ; only index 0-7?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;in some actual source code &lt;strong&gt;could&lt;/strong&gt; mean that the particular hardware the program runs on implements (decodes) only the three least significant address bits, writing to a port address greater than 7 would wrap around to the [0..7] range, do weird things, or simply be ignored.&lt;/p&gt;&#xA;" OwnerUserId="348" LastActivityDate="2019-05-20T07:13:02.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11056" PostTypeId="1" AcceptedAnswerId="11063" CreationDate="2019-05-20T11:19:14.960" Score="56" ViewCount="16697" Body="&lt;p&gt;I remember the computer I played Commander Keen on as a child had a turbo button that I was forbidden to touch, what did this button actually do?&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="6794" LastEditDate="2019-05-21T06:57:13.653" LastActivityDate="2020-03-17T17:49:27.323" Title="What did the 'turbo' button actually do?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;" AnswerCount="6" CommentCount="14" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11057" PostTypeId="1" AcceptedAnswerId="11061" CreationDate="2019-05-20T11:37:31.250" Score="13" ViewCount="1988" Body="&lt;p&gt;I just finished reading a story about an &lt;a href=&quot;https://ibms360.co.uk/?p=64&quot; rel=&quot;noreferrer&quot;&gt;IBM 360 Model 20 rescue&lt;/a&gt;, and some of the pictures caught my eye.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically this one: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vIrtU.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vIrtU.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Searching online, led me to several more pictures, all with obviously different configurations. It seems that this panel is exposed in a way that makes changing the wiring &quot;easy&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iemAz.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iemAz.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the purpose of these wiring panels?  Did changing the wiring somehow configure the operation and features of the computer?&lt;/p&gt;&#xA;" OwnerUserId="13633" LastEditorUserId="12128" LastEditDate="2020-06-07T10:53:02.850" LastActivityDate="2020-06-07T10:53:02.850" Title="What is the purpose of the yellow wired panels on the IBM 360 Model 20?" Tags="&lt;ibm&gt;&lt;mainframe&gt;&lt;s360&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11058" PostTypeId="2" ParentId="11056" CreationDate="2019-05-20T11:44:42.260" Score="20" Body="&lt;p&gt;The turbo button was implemented on machines with CPUs faster than the original IBM PCs. Some software relied on the CPU running at a certain speed to work properly, rather than using some external timekeeping mechanism to avoid running to fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the turbo mode disabled via the button the computer would run at approximately the speed of an original IBM PC, for compatibility with that software. With it enabled the computer would run as fast as it could.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-05-20T11:44:42.260" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11059" PostTypeId="2" ParentId="9475" CreationDate="2019-05-20T12:46:16.267" Score="2" Body="&lt;p&gt;Just to clarify a couple of points, using information from the &lt;a href=&quot;http://www.z80.info/zip/z80-interrupts.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z80 Family Program Interrupt Structure&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Firstly, the Z80 has three types of interrupts:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Bus request (/BUSRQ)&lt;/li&gt;&#xA;&lt;li&gt;Nonmaskable (/NMI)&lt;/li&gt;&#xA;&lt;li&gt;Maskable (/INT)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;It is the latter, &lt;em&gt;maskable&lt;/em&gt;, that Raffzahn refers to in his answer, when he states that there are three modes: 0, 1, and 2.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Secondly, the article, &lt;a href=&quot;http://www.z80.info/1653.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z80® Family Interrupt Structure by Michael Moore&lt;/a&gt;, to which you link and obtained your diagram is &lt;em&gt;very&lt;/em&gt; misleading indeed. Whilst the first IEI line is indeed tied to 5 V, the IEO line of the last peripheral, does &lt;em&gt;&lt;strong&gt;not&lt;/strong&gt;&lt;/em&gt; go to the INT pin at all, it is just left &amp;quot;hanging&amp;quot;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8FgAd.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Interrupt priority chain&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8FgAd.png&quot; alt=&quot;Interrupt priority chain&quot; title=&quot;Interrupt priority chain&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;FWIW, the ripple reduction look-ahead logic schematic is this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AlsHU.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Ripple reduction look-ahead logic&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AlsHU.png&quot; alt=&quot;Ripple reduction look-ahead logic&quot; title=&quot;Ripple reduction look-ahead logic&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Again, as the diagram shows, the first IEI is tied to 5 V, and the P&lt;sub&gt;OUT&lt;/sub&gt; goes to the next stage, or nowhere, if there is no subsequent stage.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Thirdly, the bizarre INTACK line shown in the &lt;a href=&quot;http://www.z80.info/1653.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;article&lt;/a&gt;'s diagram appears to be an over simplification of the /IORQ and /M1 lines. From page 15 of the &lt;a href=&quot;http://www.z80.info/zip/z80-interrupts.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z80 Family Program Interrupt Structure&lt;/a&gt;, Interrupt nesting:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0rpD2.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Interrupt acknowledgment&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0rpD2.png&quot; alt=&quot;Interrupt acknowledgment&quot; title=&quot;Interrupt acknowledgment&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The PIO requests interrupt service by setting its /HELP logic and pulling the /INT and its IEO line low. Assuming interrupts have been enabled, the Z80-CPU finishes the current instruction and responds with an interrupt acknowledge (/M1 and /IORQ low).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="202" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-05-20T15:55:23.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11060" PostTypeId="2" ParentId="11057" CreationDate="2019-05-20T13:23:48.123" Score="8" Body="&lt;p&gt;Couldn't find much on the purpose but physically those appear to be terminals that are used for &lt;a href=&quot;https://en.wikipedia.org/wiki/Wire_wrap&quot; rel=&quot;noreferrer&quot;&gt;wire-wrapping&lt;/a&gt;.  You see this application used in all manner of early electronic equipment and its used to interconnect various circuits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM Service technicians (customer engineers or CEs) would be the ones to actually change these (not customer serviceable).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm speculating but apart from circuit interconnects this could have been used as a crude form of &quot;microcode&quot; changes / adjustments or feature additions.&lt;/p&gt;&#xA;" OwnerUserId="13634" LastActivityDate="2019-05-20T13:23:48.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11061" PostTypeId="2" ParentId="11057" CreationDate="2019-05-20T13:42:28.597" Score="18" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What is the purpose of the yellow wired panels&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's the backplane, simply the wiring of the machine.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;on the IBM 360 Model 20?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not just there, but next to every mainframe was made that way. Depending on planned (and ordered) production run some would get printed boards, but usually all wiring was done as wire-wrap. The -20 was sold in quite high numbers and above fotos show a somewhat late model. But even here not all routing was done on a PCB, but as wirewrap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being trained on this technology in the late 70s, I still remember countless hours spend in debugging and adding of patches.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-05-20T13:42:28.597" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="11062" PostTypeId="2" ParentId="11052" CreationDate="2019-05-20T13:46:43.000" Score="18" Body="&lt;p&gt;The other answers explain it from a software perspective.  Here is the &lt;strong&gt;hardware perspective&lt;/strong&gt;, which may explain why it is another &quot;address space&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8080 has 16 pins for the address bus &lt;code&gt;A0&lt;/code&gt;-&lt;code&gt;A15&lt;/code&gt;, 8 pins for the data bus &lt;code&gt;D0&lt;/code&gt;-&lt;code&gt;D7&lt;/code&gt;, and pins &lt;code&gt;DBIN&lt;/code&gt; and &lt;code&gt;!WR&lt;/code&gt; to time reads and writes.  The processor re-uses the data bus to output information (&quot;processor state&quot;) about what it will be using the address and data buses for; an additional pin called &lt;code&gt;SYNC&lt;/code&gt; is pulled high when this information is available.  The remaining pins are for power, clock, reset, interrupts, and direct-memory-access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most systems using the 8080 would capture the processor state from pins &lt;code&gt;D0&lt;/code&gt;-&lt;code&gt;D7&lt;/code&gt; using a simple latch.  Intel made a special chip (the 8212) that did the same thing, more expensively.  Certain bits of the processor state were found to be so useful that later Intel processors dedicated pins just for their use; in particular, the &lt;code&gt;IO/!MEM&lt;/code&gt; pin which specified whether a read/write was to memory or to I/O space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the most common uses of the address and data buses were as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;When &lt;strong&gt;&lt;em&gt;fetching the first byte of an instruction&lt;/em&gt;&lt;/strong&gt;, the processor would output the (program counter) address on &lt;code&gt;A0&lt;/code&gt;-&lt;code&gt;A15&lt;/code&gt;, set &lt;code&gt;D5&lt;/code&gt; high, clear the other data bus bits, and then pulse &lt;code&gt;SYNC&lt;/code&gt;.  This would be a signal to external hardware that an instruction fetch would occur.  The address would remain on the address bus, and &lt;code&gt;DBIN&lt;/code&gt; would be pulsed.  The memory was responsible to place the instruction byte on the data bus by the falling edge of &lt;code&gt;DBIN&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Reading from memory&lt;/em&gt;&lt;/strong&gt; was a similar operation, except now &lt;code&gt;D7&lt;/code&gt; was pulled high in the processor state, rather than &lt;code&gt;D5&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Prior to a &lt;strong&gt;&lt;em&gt;write to memory&lt;/em&gt;&lt;/strong&gt;, the desired address was placed on the address bus, &lt;code&gt;D1&lt;/code&gt; was pulled high, the other data bus pins were pulled low, and &lt;code&gt;SYNC&lt;/code&gt; was pulsed.  Then the data to be written was placed on the data bus, and &lt;code&gt;!WR&lt;/code&gt; was pulsed.  The memory was responsible for capturing the data by the rising edge of &lt;code&gt;!WR&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;code&gt;IN&lt;/code&gt; instructions&lt;/em&gt;&lt;/strong&gt; have an 8-bit I/O address.  When such an instruction occurred, the I/O address was placed on &lt;code&gt;A0&lt;/code&gt;-&lt;code&gt;A7&lt;/code&gt;, and an identical copy was placed on &lt;code&gt;A8&lt;/code&gt;-&lt;code&gt;A15&lt;/code&gt;.  &lt;code&gt;D6&lt;/code&gt; was set high, the other data bus bits were cleared, and &lt;code&gt;SYNC&lt;/code&gt; was pulsed.  This was a signal that the processor wanted to read from the I/O space.  The address would remain on the address bus, and &lt;code&gt;DBIN&lt;/code&gt; would be pulsed.  The peripheral was responsible to place the resulting byte on the data bus by the falling edge of &lt;code&gt;DBIN&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;code&gt;OUT&lt;/code&gt; instructions&lt;/em&gt;&lt;/strong&gt; placed their 8-bit addresses on &lt;code&gt;A0&lt;/code&gt;-&lt;code&gt;A7&lt;/code&gt; and &lt;code&gt;A8&lt;/code&gt;-&lt;code&gt;A15&lt;/code&gt;, set &lt;code&gt;D1&lt;/code&gt; and &lt;code&gt;D4&lt;/code&gt;, cleared the other data bus bits, and pulsed &lt;code&gt;SYNC&lt;/code&gt;.  It then proceeded similarly to a write to memory.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;By decoding the processor state bits, one could therefore separate the targets of &lt;code&gt;IN&lt;/code&gt; and &lt;code&gt;OUT&lt;/code&gt; instructions from ordinary memory.  The was considered an additional &quot;address space&quot;.  Considering that ordinary memory is limited to 64k, you might need that extra address space.  Intel even touted &quot;512 Directly Addressed I/O Ports&quot; -- which was true if your hardware distinguished the 256 &lt;code&gt;IN&lt;/code&gt; addresses from the 256 &lt;code&gt;OUT&lt;/code&gt; addresses -- but that was rarely done as it was an unnecessary complication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you ignore the processor state bits, and just put everything into one address space?  Certainly, and some systems did just that.  However, such a scheme reduces the amount of general memory available to less than 64k.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-05-20T13:46:43.000" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11063" PostTypeId="2" ParentId="11056" CreationDate="2019-05-20T14:30:56.870" Score="75" Body="&lt;p&gt;The Turbo button originally adjusted the clock speed of the computer between the full speed of the machine and a slower speed intended to be compatible with something more industry standard. It wasn't at all uncommon for software to be written with a specific speed of hardware in mind and either fail to operate completely or operate in a way that was unusable at a faster speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(One example of this was the GATO submarine simulator, which was built to run on a stock IBM PC. The faster your computer, the faster your virtual submarine would go. By the 90's, it was easy to find hardware where you could zip across entire virtual world in a matter of seconds. The Turbo Pascal runtime had a more serious issue where programs built using it would fail to run entirely on machines fast enough to cause an overflow during a timing loop on startup.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PC Accelerator boards had some interesting variations on the theme. Many of these boards could be disabled entirely with a switch to get back to the original, un-accelerated performance of the machine. (This feature wasn't completely without risk, because I remember at least one or two instances where I saw PC's that had these boards installed, but never enabled.) There were also a few boards that had finely adjustable clock rates. Much like overclocking today, the idea was to pick the fastest speed at which your specific hardware was stable. Some of these would also automatically defer selecting the faster clock rate at startup until the BIOS self check had passed. In an effort to avoid this sort of acceleration, IBM put a timing loop in the self check that would fail if the machine detected a faster clock rate... so waiting to select the faster rate would let the self check pass and then accelerate the machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that said, the need for a button to slow a machine down wasn't all that commonplace. At the end of the era of Turbo Buttons, I think the biggest reason to have one was to put the text &lt;em&gt;Turbo&lt;/em&gt; on the front of the machine, with whatever connotations of speed it implied.&lt;/p&gt;&#xA;" OwnerUserId="4522" LastEditorUserId="4522" LastEditDate="2019-05-20T14:44:10.253" LastActivityDate="2019-05-20T14:44:10.253" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="11064" PostTypeId="2" ParentId="11056" CreationDate="2019-05-20T18:33:51.233" Score="3" Body="&lt;p&gt;The turbo button selected between normal and slow speeds. Slowing the system was done by slowing down the CPU clock speed or disabling cache memory&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-05-20T18:33:51.233" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11066" PostTypeId="2" ParentId="11056" CreationDate="2019-05-20T19:53:50.047" Score="5" Body="&lt;p&gt;In addition to the other answers given:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember newer computers (up to the Pentium class) having such buttons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt that the Turbo button was connected at all in most later computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose that the manufacturers of PC housings did not want change their production and therefore continued producing housings with a Turbo button (which was used for 8 MHz 8086 computers) although the button was not used for newer computers any longer (and Pentium computers could not be switched to 4.77 MHz frequency).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember some computers that could be switched between 33 and 66 MHz using the Turbo button. Maybe the manufacturers produced the housings to be compatible with such mainboards (but in 99% of all cases the button was not connected).&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2019-05-20T19:53:50.047" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11068" PostTypeId="2" ParentId="4551" CreationDate="2019-05-21T14:25:17.537" Score="4" Body="&lt;p&gt;IRIS is now running on the simulator that was developed by trailing-edge.com.&#xA;See www.nova-iris.net for extensive documentation on IRIS and a working IRIS OS for the simH simulator.&lt;/p&gt;&#xA;" OwnerUserId="13645" LastActivityDate="2019-05-21T14:25:17.537" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11069" PostTypeId="2" ParentId="10884" CreationDate="2019-05-21T22:45:43.330" Score="3" Body="&lt;p&gt;No, for writes to the extended ROM space, the IIgs ROM 01 FPI memory controller does not assert /CROMSEL. I assume it’s the same for the newer CYA memory controller chip in ROM 03 systems but I have not tested.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the logic analyzer traces. First is a read from F0/0000, in which /CROMSEL is asserted as expected:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/R54iG.jpg&quot; alt=&quot;ROM 01 IIgs extended ROM read&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next is a write to the same address, in which /CROMSEL remains unasserted during phi2:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/LH6Mh.jpg&quot; alt=&quot;ROM 01 IIgs extended ROM write&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, there is a 32ns period after the write to F0/0000 is over in which /CROMSEL becomes active, before going back to deselected before the end of /phi2. This suggests that in the FPI, /CROMSEL is implemented as an asynchronous disjunction of /WE and a registered address.&lt;/p&gt;&#xA;" OwnerUserId="7486" LastActivityDate="2019-05-21T22:45:43.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11070" PostTypeId="2" ParentId="636" CreationDate="2019-05-21T22:54:52.207" Score="9" Body="&lt;p&gt;I personally have repaired many of these board sets of both vendors. I own a midway space invaders and a few TAITO Space invaders board sets.&#xA;The differences arise through the licensing agreement. TAITO owns the rights to Space Invaders and then MIDWAY purchased the licensing for North America.&#xA;The licensing (Along with much much more) said that Midway had to develop their own hardware. The MIDWAY version board is a black &amp;amp; White only board set and they used a green/Yellow/red vinyl plastic to give the illusion of color for the top/middle/bottom  areas of game screen. MIDWAY also used two buttons for left &amp;amp; right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TAITO, (The owner) made their board to support either Black &amp;amp; White, or on board color. The Controller it either buttons, or a left/right joystick. &#xA;Comparing both schematics, you can see many areas where the circuitry is the same, sometimes one chip is turned into a few chips. But this is how MIDWAY duplicated without infringing on the licensing. &#xA;As far as repairing, I prefer working on the MIDWAY &quot;L&quot; board. those 6 ribbon cables on the TAITO can be a pain. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The EPROM's can be different values and there are STRAPPING jumpers to connect for the proper EPROM type that you have. These EPROM's are getting harder to find so sometimes you need to swap in a different type to get it working.&lt;/p&gt;&#xA;" OwnerUserId="13570" LastActivityDate="2019-05-21T22:54:52.207" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11071" PostTypeId="1" CreationDate="2019-05-22T06:43:16.177" Score="7" ViewCount="480" Body="&lt;p&gt;Andy Hertzfeld &lt;a href=&quot;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Price_Fight.txt&amp;amp;sortOrder=Sort+by+Date&quot; rel=&quot;noreferrer&quot;&gt;revealed&lt;/a&gt; that the CPU for the original $2495 Macintosh cost just $9.00. How much did the rest of the computer cost? Was the markup really greater than Pepsi's markup on sugar? How much would it have cost to use 512K memory instead of 128K at the start?&lt;/p&gt;&#xA;" OwnerUserId="11633" LastEditorUserId="10854" LastEditDate="2019-05-22T11:23:44.667" LastActivityDate="2019-05-27T15:30:02.633" Title="What was the Macintosh's BOM cost?" Tags="&lt;apple-macintosh&gt;&lt;cost&gt;" AnswerCount="2" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11072" PostTypeId="1" CreationDate="2019-05-22T08:08:08.383" Score="23" ViewCount="4577" Body="&lt;p&gt;One of my floppy disks' shutter spring got lost. Now the shutter can't slide normally. Can I still use the floppy disk?&lt;/p&gt;&#xA;" OwnerUserId="13652" LastEditorUserId="79" LastEditDate="2019-05-22T09:16:22.373" LastActivityDate="2019-05-23T03:54:13.090" Title="Can my floppy disk still work without a shutter spring?" Tags="&lt;floppy-disk&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11073" PostTypeId="1" CreationDate="2019-05-21T23:21:14.930" Score="8" ViewCount="4062" Body="&lt;p&gt;I replaced a failed CRT display with a LCD panel with a VGA controller board. There is no problem with the display when the PC boots up. However, if I switch the display off then I get an 'Out of Range' error when I switch the display on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tested the display on two different machines and the problem doesn't occur. Both of those machines have a 640 x 480 native screen resolution. The display menu shows the 'Problem Machine' to have a 720 x 400 screen resolution. I checked and the VIA Apollo PLE133T chipset with integrated graphics supports a 640 x 480 screen resolution. Being a DOS only system I do not have access to the display properties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the Windows 3.? era the monitor refresh rate was set in either the autoexec.bat or config.sys. In my research I have found commands lines to change the resolution but they were ran in the Windows environment. I do not have Windows and installing Windows is not an option. I realize that this is a strange problem but I have exhausted my technical knowledge.&lt;/p&gt;&#xA;" OwnerDisplayName="Ron" LastEditorUserId="11916" LastEditDate="2019-05-23T17:05:37.993" LastActivityDate="2019-05-24T13:23:44.217" Title="Set screen resolution in DOS-only PC" Tags="&lt;ms-dos&gt;&lt;display&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11074" PostTypeId="2" ParentId="11072" CreationDate="2019-05-22T09:15:59.100" Score="27" Body="&lt;p&gt;The shutter spring in a 3.5” floppy forces the shutter back in its “closed” position when it’s opened. Losing it won’t have much impact on its day-to-day use, as long as there was no other damage to the shutter: when you insert the disk into a drive, the shutter is pulled open (which will be easier, without the spring), and when you eject the disk, the shutter will stay open.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus losing the shutter spring mostly means that you’ll have to close the shutter yourself when you eject the disk. You should however take care when inserting the disk, in case the shutter is slightly out-of-shape and thus harder to pull open — but that’s true of any disk really.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-05-22T09:15:59.100" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11075" PostTypeId="2" ParentId="11073" CreationDate="2019-05-22T09:19:59.260" Score="9" Body="&lt;p&gt;There is a Linux utility called &lt;code&gt;SVGATextMode&lt;/code&gt; which can switch the resolution in text mode; there is also an &lt;a href=&quot;http://freedos.10956.n7.nabble.com/SVGATextMode-for-DOS-testers-td12935.html&quot; rel=&quot;noreferrer&quot;&gt;MS DOS port&lt;/a&gt;, but you probably have &lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.os.msdos.misc/VqyNuIDfou0&quot; rel=&quot;noreferrer&quot;&gt;to hunt for the binaries yourself&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: found the binaries (no guarantee!):  &lt;a href=&quot;https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/util/user/svgatextmode/svgatextmode_1_9_16rc1-dos.tgz&quot; rel=&quot;noreferrer&quot;&gt;https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/util/user/svgatextmode/svgatextmode_1_9_16rc1-dos.tgz&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Read &lt;code&gt;DOSPROGS.TXT&lt;/code&gt; inside the archive for instructions.&lt;/p&gt;&#xA;" OwnerUserId="476" LastEditorUserId="476" LastEditDate="2019-05-22T13:17:57.870" LastActivityDate="2019-05-22T13:17:57.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11076" PostTypeId="2" ParentId="11073" CreationDate="2019-05-22T12:29:01.773" Score="14" Body="&lt;p&gt;There are a number of tools you can use to tweak the display mode, including setting it to 640×480. The Free Software for DOS site &lt;a href=&quot;http://www.reimagery.com/fsfd/screen.htm#screenmode&quot; rel=&quot;noreferrer&quot;&gt;lists a few&lt;/a&gt;, of which I’ve successfully used &lt;a href=&quot;http://reimagery.com/fsfd/bin/2001_archive_DOS_rlg/vbehz222.zip&quot; rel=&quot;noreferrer&quot;&gt;VBEHz&lt;/a&gt; and &lt;a href=&quot;http://adoxa.altervista.org/tm/index.html&quot; rel=&quot;noreferrer&quot;&gt;Text Mode&lt;/a&gt; in the past.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SVGATextMode, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11075/79&quot;&gt;mentioned&lt;/a&gt; by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/476/radovan-garab%C3%ADk&quot;&gt;Radovan Garabik&lt;/a&gt;, would also allow you to configure your display in great detail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 720×400 mode you’re seeing is quite normal, albeit hard to support on plain VGA LCDs; it corresponds to VGA text mode 3, 80×25, with 9×16-pixel characters.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-05-22T13:32:09.643" LastActivityDate="2019-05-22T13:32:09.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11077" PostTypeId="2" ParentId="2694" CreationDate="2019-05-22T12:38:50.350" Score="9" Body="&lt;p&gt;I'm not sure if it counts as proper example because it is not a game from the days but recently released Super Mario Bros for C64 has a C128 mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This game is a direct port from NES. As the NES processor is faster (NTSC 1.79, PAL 1.66 MHz) than Commodore 64 (NTSC 1.023, PAL 0.985 MHz) there are slowdowns during gameplay. In C128 mode, it switches to 2MHz in borders to effectively reduce such slowdowns. &lt;/p&gt;&#xA;" OwnerUserId="3422" LastActivityDate="2019-05-22T12:38:50.350" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11078" PostTypeId="2" ParentId="11071" CreationDate="2019-05-22T16:00:39.900" Score="2" Body="&lt;p&gt;I don't have a specific answer, but a good rule of thumb for machines built in the mid-eighties was that buying the chips for a machine at retail would end up costing about a third of the retail price of the complete machine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, there are additional costs for PCB, connectors, wiring, assembly, the casing, the PSU, the CRT and its circuitry for an all-in-one Mac, and so on. But the chip prices shrank considerably when you started buying in hundreds of thousands. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-05-22T16:00:39.900" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11079" PostTypeId="2" ParentId="11072" CreationDate="2019-05-22T16:33:01.400" Score="18" Body="&lt;p&gt;Alternatively, you can remove the shutter entirely, and take care of the ejected floppy as if it were a 5&quot; one - ie. keep it in an envelope or cover.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is perhaps not as safe for the diskette, but avoids issues with the drive mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, I would plan to move the data and trash the diskette soon. &lt;/p&gt;&#xA;" OwnerUserId="832" LastActivityDate="2019-05-22T16:33:01.400" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11080" PostTypeId="2" ParentId="11073" CreationDate="2019-05-22T17:52:55.147" Score="3" Body="&lt;p&gt;Problem may not be the resolution but refresh rate. On a VGA card the default text mode is the BIOS mode 3, which uses 720x400 mode with 70 Hz refresh rate. Many games also use BIOS mode 13h which is also 320x200 mode with 70Hz refresh rate. It may prove difficult to downgrade these modes down to 60 Hz, and even if possible, some programs may not work properly as they expect 70 Hz rate. For native DOS usage a monitor capable of 70 Hz modes should be used.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-05-22T17:52:55.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11081" PostTypeId="2" ParentId="11056" CreationDate="2019-05-22T20:03:30.400" Score="0" Body="&lt;p&gt;The turbo button altered the speed on the computer, as some games would reply on the CPU speed in order to determine on how fast the game would run, and this would cause the program to run faster than intended the newer the computer got (however this isn't a problem with today's computers as we can emulate another cpu), so the turbo button was made in order to slow to computer so that it could run these programs. However, some made the computer run faster.&lt;/p&gt;&#xA;" OwnerUserId="13658" LastActivityDate="2019-05-22T20:03:30.400" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11082" PostTypeId="2" ParentId="11072" CreationDate="2019-05-22T21:33:20.720" Score="16" Body="&lt;p&gt;You really, really need to account for where that spring went.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it stayed inside the diskette, it could scratch up the media.  Even worse, if it came loose inside the floppy drive, it could cause all sorts of mischief.  Just a few days ago I had one get loose inside the drive, and it shorted out the signal cable, causing the drive to misbehave.  Fortunately, there seems to be no permanent damage, but there sure could've been!  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than that, the drive won't care; it'll just shove the door open and it won't self-close.  &lt;/p&gt;&#xA;" OwnerUserId="4330" LastActivityDate="2019-05-22T21:33:20.720" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11083" PostTypeId="2" ParentId="11072" CreationDate="2019-05-23T02:45:28.607" Score="2" Body="&lt;p&gt;That plastic front assembly can be easily replaced. It's just hooked into the metal chassis on the side - while the actual problem with the functionality is based upon the purpose of that lid: dust particles will enter the drive and from there can reach the magnetic surface of an inserted disk, when the disk's slider is opened, which will then accumulate at the R/W head and kill off the drive and/or a few floppies over time... while a &quot;new&quot; 3.5&quot; floppy drive only costs around 10-15 USD/EUR/GBP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you mean the slider mechanism on the disk itself - it's about the same problem with the dust particles accumulating at the drive's R/W head (keeping such disks in a protective sleeve or creating a copy is suggested).&lt;/p&gt;&#xA;" OwnerDisplayName="user13661" LastEditorUserId="202" LastEditDate="2019-05-23T03:54:13.090" LastActivityDate="2019-05-23T03:54:13.090" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11084" PostTypeId="2" ParentId="6004" CreationDate="2019-05-23T06:49:40.933" Score="9" Body="&lt;h1&gt;&lt;a href=&quot;https://cbm-pi1541.firebaseapp.com&quot; rel=&quot;noreferrer&quot;&gt;Pi1541&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Pi1541 is a real-time, cycle exact, Commodore 1541 disk drive emulator that can run on a Raspberry Pi 3B, 3B+ or 3A+.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a &lt;a href=&quot;https://www.raspberrypi.org/blog/introducing-raspberry-pi-hats/&quot; rel=&quot;noreferrer&quot;&gt;Raspberry Pi hat&lt;/a&gt; and some specialized software that emulates the 6502 CPU as well as the two 6522 VIAs of a real Commodore 1541 floppy drive. It emulates the whole disk drive so floppy speeders or any other specialized software that runs code inside the floppy drive should work just like on real hardware. This is something that &lt;a href=&quot;https://www.c64-wiki.de/wiki/SD2IEC&quot; rel=&quot;noreferrer&quot;&gt;SD2IEC&lt;/a&gt; can't do. But if you just want to load and run single file applications or games then &lt;a href=&quot;https://www.c64-wiki.de/wiki/SD2IEC&quot; rel=&quot;noreferrer&quot;&gt;SD2IEC&lt;/a&gt; will do just fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since version 1.13 &lt;a href=&quot;https://cbm-pi1541.firebaseapp.com&quot; rel=&quot;noreferrer&quot;&gt;Pi1541&lt;/a&gt; can even emulate a Commodore 1581 floppy drive.&lt;/p&gt;&#xA;" OwnerUserId="4686" LastEditorUserId="4686" LastEditDate="2019-05-23T11:26:09.383" LastActivityDate="2019-05-23T11:26:09.383" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11085" PostTypeId="2" ParentId="11073" CreationDate="2019-05-23T09:09:48.067" Score="0" Body="&lt;p&gt;I would try &lt;strong&gt;UniVBE&lt;/strong&gt; if it helps but its a long shot (IIRC I used version 5.3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that the LCD driver does not support any VGA signal. CRTs are more flexible as they simply adjusted the sweeping frequencies but LCD doing all digitally and have more strict bounds on the frequencies and dot clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The text modes are not 640x480 but usually more and use a different timing. Sometimes swithing between modes help to re-establish sync (I think that is your case as on startup you claim it works). So what you need is to switch VGA mode to some that force re-sync the LCD driver and then switch back to text mode 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So either create some assembly utility or use &lt;strong&gt;Volkov Commander&lt;/strong&gt; and hit &lt;code&gt;ALT+F9&lt;/code&gt; which switches between 2 text modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure if switching between text modes help if not try a videomode (use any VGA demo from the demoscene)... You can associate it to menu in &lt;strong&gt;Volkov Commander&lt;/strong&gt; so you can activate it blindly ... Here mine VGA 320x256 demo (escape exits)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ulozto.net/!cQnrYDS9YArH/spiral-com&quot; rel=&quot;nofollow noreferrer&quot;&gt;spiral&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;so try to execute the com file and look if after exit (esc) the textmode work again or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;btw. did you try to unplug and plug the VGA cable? That sometimes helps too.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-05-23T09:17:41.303" LastActivityDate="2019-05-23T09:17:41.303" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11086" PostTypeId="1" CreationDate="2019-05-23T12:08:13.227" Score="15" ViewCount="678" Body="&lt;p&gt;There is a wonderful project called &lt;a href=&quot;http://www.visual6502.org/&quot; rel=&quot;noreferrer&quot;&gt;Visual6502&lt;/a&gt;, and I've used it from time to time to figure things out, like exactly the difference between &lt;code&gt;rti&lt;/code&gt; and &lt;code&gt;rts&lt;/code&gt;. It is good to see which control lines were fired in each cycle from the Control ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But Z80 is a whole other thing. It's not microcoded like the 6502 is, but instead apparently contains some finite state machines and things. I am not sure I understand why that design choice was made, especially considering the relatively more complex ISA, including variable-length instruction codes. But I really have no idea about that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I am interested in finding out more about how the Z80 worked. Has this chip been reverse-engineered and had its internal mechanisms explained, such that it can be understood by laypeople?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="6794" LastEditDate="2019-05-24T05:55:54.593" LastActivityDate="2020-06-19T20:47:43.170" Title="What is known about the internal workings of the Z80?" Tags="&lt;z80&gt;&lt;reverse-engineering&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11087" PostTypeId="1" AcceptedAnswerId="11088" CreationDate="2019-05-23T13:15:29.797" Score="9" ViewCount="1381" Body="&lt;p&gt;In 1983, Compaq introduced its first product, a portable computer weighing 28 pounds; 128-640K RAM, two 5.25&quot; floppy drives, 9&quot; monochrome CRT for $3590. It was extremely successful in the market, and the company took off like a rocket; the later Plus model added an internal hard drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1984, IBM released the Portable Personal Computer 5155 model 68, a similar design weighing 30 pounds; 256-512K or 640K RAM, one or two 5.25&quot; floppy drives, 9&quot; monochrome CRT. Wikipedia says it was cheaper, but doesn't give a number. &lt;a href=&quot;http://oldcomputers.net/ibm5155.html&quot; rel=&quot;noreferrer&quot;&gt;http://oldcomputers.net/ibm5155.html&lt;/a&gt; on the contrary says $4225. By all accounts it did not sell well, was considered something of a flop and discontinued relatively early.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally have never seen the attraction of a 'portable' that weighs more than many desktop machines, but my feelings on the matter are immaterial; the fact is that the market at the time was hungry for such machines, and the Compaq sold very well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which makes it surprising that the IBM portable PC flopped; it looks to me like essentially the same product, only with the IBM nameplate; I would expect this to be an attractive proposition for the business computing market in the eighties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why is it that the Compaq portable sold well but the IBM didn't?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-05-24T13:26:13.497" Title="Compaq Portable vs IBM 5155 Portable PC" Tags="&lt;history&gt;&lt;ibm&gt;&lt;portable&gt;&lt;compaq&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11088" PostTypeId="2" ParentId="11087" CreationDate="2019-05-23T13:40:02.060" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I personally have never seen the attraction of a 'portable' that weighs more than many desktop machines, but my feelings on the matter are immaterial; the fact is that the market at the time was hungry for such machines, and the Compaq sold very well.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They were the solution for people without a fixed office, or moving locations. Not the constant moving ones staying just an hour at Starbucks, but anyone who stays for a few days, weeks or month in a location, does his work and moves on to the next site. Think construction, engineering but also lawyers and many other professions who nowadays use laptops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage is less about being fully portable within seconds, but move your office within like 15 minutes into your car and keep going - including a full PC setup beside all files and whatsoever tools.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Which makes it surprising that the IBM portable PC flopped; it looks to me like essentially the same product, only with the IBM nameplate; I would expect this to be an attractive proposition for the business computing market in the eighties.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a bit hard to say it 'flopped' as the sales were quite above expectations and comparable with Compaq.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So why is it that the Compaq portable sold well but the IBM didn't?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Foremost timing. The Compaq could work the market for most parts of a whole year until the IBM was ready. At the time IBM entered that segment (with the bulkier and heavier 5155) Compaq already prepared the Portable Plus with hard disk and full 640 KiB of memory.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-05-23T14:40:19.777" LastActivityDate="2019-05-23T14:40:19.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11089" PostTypeId="2" ParentId="11087" CreationDate="2019-05-23T14:33:17.290" Score="13" Body="&lt;p&gt;The main reason for Compaq's longer-term success in the PC market, in comparison to IBM, is what is commonly referred to as the &lt;a href=&quot;https://en.wikipedia.org/wiki/First-mover_advantage#Technological_leadership&quot; rel=&quot;noreferrer&quot;&gt;&quot;First-mover advantage&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the beginning of the PC market, IBM actually held a monopoly position. As we know, in a couple of years, Compaq and others would challenge this by creating legal PC BIOS clones and bringing compatible machines to the market. This created a new marketplace in which &lt;em&gt;technological leadership&lt;/em&gt; was a key marketing advantage for any company that could assert that position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compaq was the first notable PC clone maker to assert and maintain first-mover status through technological leadership, using the portable PC form-factor as the major perceived innovation. This gave them significant leverage in marketing their products against IBM's. The same thing that happened with Compaq's success against IBM in portable computers was repeated with the introduction of the &lt;a href=&quot;https://dfarq.homeip.net/compaq-deskpro-386/&quot; rel=&quot;noreferrer&quot;&gt;Compaq Deskpro 386&lt;/a&gt; in 1986. This repeat success demonstrates perfectly how first-mover status conveys a &lt;a href=&quot;https://en.wikipedia.org/wiki/Halo_effect#Branding&quot; rel=&quot;noreferrer&quot;&gt;Halo effect&lt;/a&gt;, so long as the association of the brand with technological leadership is maintained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's easy in this forum to make discussion about the supposed objective, technical, qualities of one computer over another. In this case, such appeals to rational argument obscure the real history. Simply ask yourself whose name would likely be spotted on a T-shirt or bumper sticker at a users' group meetup circa 1985 - IBM, or Compaq? Brand marketing sells products better than technical specs, in all markets, and at all times.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-05-23T15:05:16.933" LastActivityDate="2019-05-23T15:05:16.933" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11090" PostTypeId="1" CreationDate="2019-05-23T16:25:51.693" Score="8" ViewCount="336" Body="&lt;p&gt;My father is an engineer that worked at TI directly under Jack Kilby in the early 60’s. This chip was given to him by Kilby as a “thank you” for all his hard work. We also have the accompanying build sheet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We believe it to be possibly the only one to still exist. We are in the process of finding a private collector who can appreciate its historical value. &#xA;So have a look and tell me what you think. Has anyone ever seen one or know somebody who may have one?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iOufR.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iOufR.jpg&quot; alt=&quot;A Ti Chip&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13664" LastEditorUserId="276" LastEditDate="2019-05-23T17:08:28.240" LastActivityDate="2019-06-05T15:06:41.797" Title="Texas Instruments SN502" Tags="&lt;history&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11091" PostTypeId="2" ParentId="11086" CreationDate="2019-05-24T06:33:28.190" Score="9" Body="&lt;p&gt;Z80 has been implemented in the Visual6502 way too. However looks like the site &lt;code&gt;http://www.micrologo.net/z80x&lt;/code&gt; is no longer operational. It was Z80 die simulation in Javascript When I searched matching stuff from mine off-line copy I found this repository:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/trebonian/visual6502&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visual6502 Z80 chipsim&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So if you want to run the Z80 simulation, either &lt;a href=&quot;http://www.visual6502.org/JSSim/expert-z80.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;use the online version&lt;/a&gt; or download the repo and open &lt;code&gt;expert-z80.html&lt;/code&gt; file from it in your browser.&lt;/p&gt;&#xA;&lt;p&gt;Yes a lot has been reversed especially the 4bit ALU of Z80. See &lt;strong&gt;Ken Shirriff's blog&lt;/strong&gt; sites are really good and I used them while perfected my Z80 emulator:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.righto.com/2014/10/how-z80s-registers-are-implemented-down.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Down to the silicon: how the Z80's registers are implemented&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.righto.com/2013/09/the-z-80-has-4-bit-alu-heres-how-it.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Z-80 has a 4-bit ALU. Here's how it works&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I ended up with this ISET configuration:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/18911590/2521214&quot;&gt;SO/SE: What's the proper implementation for hardware emulation?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Which breaks down all the instructions into their machine cycles ... Once you done that many things start to be obvious.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6659" LastEditDate="2020-06-19T20:47:43.170" LastActivityDate="2020-06-19T20:47:43.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11092" PostTypeId="2" ParentId="11086" CreationDate="2019-05-24T07:55:39.480" Score="5" Body="&lt;p&gt;The best I've seen is &lt;a href=&quot;http://baltazarstudios.com/z80-cpu/&quot; rel=&quot;noreferrer&quot;&gt;Goran Devic's implementation&lt;/a&gt; for an FPGA.  He's taken the existing bits of Z-80 reverse engineering and filled in the missing pieces and connected them all together.  Read through the blog and you'll find a large PNG functional diagram and a link to a &lt;a href=&quot;https://bitbucket.org/gdevic/a-z80/src/master/&quot; rel=&quot;noreferrer&quot;&gt;bitbucket repo&lt;/a&gt; of all the code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although I haven't done a deep dive into the details, it does seem to be similar to the 6502 in that a PLA is used to decode instructions and drive various sub-circuits.  It does differ at the low level in a lot of ways in how the register files and ALUs are implemented.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2019-05-24T07:55:39.480" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11093" PostTypeId="2" ParentId="11087" CreationDate="2019-05-24T09:54:19.517" Score="5" Body="&lt;p&gt;One definite advantage of the Compaq Portable over the IBM 5155 is that it had a video card and display that could render text at MDA resolution, with 14 pixel rows per character, and still support CGA graphics modes. The 5155 used a stock CGA with 8 pixel rows per character in all modes. This meant that for someone working in text mode with the built-in screen, the Compaq's display was much more readable.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2019-05-24T09:54:19.517" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11094" PostTypeId="2" ParentId="2788" CreationDate="2019-05-24T10:07:35.850" Score="5" Body="&lt;p&gt;Another oddity: The Programmed Symbols card for the &lt;a href=&quot;https://www.seasip.info/VintagePC/5271.html#display&quot; rel=&quot;noreferrer&quot;&gt;IBM 3270 PC&lt;/a&gt; has three three-plane &lt;em&gt;fonts&lt;/em&gt;, giving 768 8-colour tiles that can be used to create &lt;a href=&quot;https://www.seasip.info/VintagePC/Images/5271tcj.jpg&quot; rel=&quot;noreferrer&quot;&gt;graphical images&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2019-05-24T10:07:35.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11096" PostTypeId="2" ParentId="11087" CreationDate="2019-05-24T13:26:13.497" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Which makes it surprising that the IBM portable PC flopped; it looks to me like essentially the same product, only with the IBM nameplate; I would expect this to be an attractive proposition for the business computing market in the eighties.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Rod Canion (Founding CEO of Compaq) did an interview with Guy Raz a couple years ago, and this is one of the key moments they describe in Compaq's history. At the time, even the Compaq leadership team was viewing IBM's portable as an existential threat to their existence, and there were those within Compaq that were arguing for a large reduction in scale, as orders were drying up in advance of IBM's ship date.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What they did instead is speculatively build a bunch of machines, store them around the city in trailers, and hope that IBM would have execution issues. The bet paid off when IBM start shipping their portability in only limited quantities, and the dealership network collectively decided they'd rather deal with Compaq than IBM (with its institutional arrogance.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole podcast is definitely worth a listen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.stitcher.com/podcast/national-public-radio/how-i-built-this/e/compaq-computers-rod-canion-50232383&quot; rel=&quot;noreferrer&quot;&gt;https://www.stitcher.com/podcast/national-public-radio/how-i-built-this/e/compaq-computers-rod-canion-50232383&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I personally have never seen the attraction of a 'portable' that weighs more than many desktop machines, but my feelings on the matter are immaterial; the fact is that the market at the time was hungry for such machines, and the Compaq sold very well.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;When a 30 pound computer without a battery is your only option for portable computing, it looks a lot better then than it might now. Even the original (putatively desktop) Macintosh had a travel bag to allow it to be used portably. (Which I don't think would've been any worse than a Compaq portable.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put it in perspective with a family anecdote, my father worked for the Houston electric utility at the time. Thanks to the Houston connection between the two companies, HL&amp;amp;P had settled on Compaq machines for their desktop users. There were more than a few times that he'd bring a Portable home in order to get work done, and that was essentially the only option. A few years later, they bought a Portable as a family computer, and while it was largely stationary, it did occasionally get used portably. (Aside from some foam degradation in the keyboard, that machine still runs.)&lt;/p&gt;&#xA;" OwnerUserId="4522" LastActivityDate="2019-05-24T13:26:13.497" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11097" PostTypeId="1" AcceptedAnswerId="11099" CreationDate="2019-05-24T13:56:48.813" Score="44" ViewCount="5442" Body="&lt;p&gt;The Commodore 64 has two &lt;a href=&quot;https://en.wikipedia.org/wiki/D-subminiature#DE-9&quot; rel=&quot;nofollow noreferrer&quot;&gt;DE-9&lt;/a&gt; joystick ports. If I'm the only person that ever plays games on it, you would assume that you could just leave a joystick plugged into Port 1 and be done with it. However, there are a number of games out there which want you to have the joystick plugged into Port 2.&lt;/p&gt;&#xA;&lt;p&gt;Why is that the case? What is the reason for this sometimes inconsistent requirement by C64 software?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2020-07-17T13:12:39.930" LastActivityDate="2020-07-17T13:12:39.930" Title="Why are C64 games inconsistent with which joystick port they use?" Tags="&lt;commodore-64&gt;&lt;joystick&gt;&lt;ports&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11098" PostTypeId="2" ParentId="11097" CreationDate="2019-05-24T14:01:47.010" Score="24" Body="&lt;p&gt;Because of the way that the joystick port 1 is mapped to the same hardware as the keyboard, from the software's point of view it's impossible to tell if you're wiggling the joystick or typing something on the keyboard. So many games used port 2 instead. &lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-05-24T14:01:47.010" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11099" PostTypeId="2" ParentId="11097" CreationDate="2019-05-24T14:24:10.873" Score="60" Body="&lt;p&gt;As Wilson points out in his answer, it has to do with how the CIA chips interact with the keyboard and the joystick ports, and the confusion that can arise trying to determine where input is being received from.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compute!'s Mapping the Commodore 64 has an excellent write-up &lt;a href=&quot;https://archive.org/details/Compute_s_Mapping_the_Commodore_64/page/n185&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; explaining how the &quot;Complex Interface Adapter&quot; (CIA#1) deals with scanning the keyboard matrix and how the joystick ports are caught up in the drama.  Specifically, look at pages 172 to 176 for full details - but here is a brief excerpt with the relevant info:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;Since CIA #1 Data Port B is used for reading the keyboard as  well as&#xA;  joystick 1, some confusion can result. The routine that checks  the&#xA;  keyboard has no way of telling whether a particular bit was set  to by&#xA;  a keypress or one of the joystick switches. For example, if  you plug&#xA;  the joystick into Controller Port 1 and push the stick to the  right,&#xA;  the routine will interpret this as the 2 key being pressed, because&#xA;  both set the same bit to 0. Likewise, when you read the joystick,&#xA;  it will register as being pushed to the right if the 2 key is being &#xA;  pressed. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The problem of mistaking the keyboard for the joystick can be  solved&#xA;  by turning off the keyscan momentarily when reading the  stick with a&#xA;  POKE 56333,127:POKE 56320,255, and restoring it after  the read with a&#xA;  POKE 56333,129. Sometimes you can use the simpler solution of&#xA;  clearing the keyboard buffer after reading the joystick, with a&#xA;  POKE 198,0. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The problem of mistaking the joystick for a keypress is much  more&#xA;  difficult — there is no real way to turn off the joystick. Many &#xA;  commercially available games just use Controller Port 2 to avoid the &#xA;  conflict. So, if you can't beat them, sit back and press your joystick&#xA;  to the left in order to slow down a program listing (the keyscan&#xA;  routine thinks that it is the CTRL key).&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="-1" LastEditDate="2019-05-26T10:08:49.123" LastActivityDate="2019-05-26T10:08:49.123" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11100" PostTypeId="2" ParentId="11090" CreationDate="2019-05-24T17:45:54.523" Score="8" Body="&lt;p&gt;I understand the interest in selling this so I would beg you to contact the Computer History Museum as your first attempt. This is clearly an important bit of history and should be preserved in a (semi-)public collection if possible.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-05-24T17:45:54.523" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11101" PostTypeId="2" ParentId="2788" CreationDate="2019-05-24T18:03:43.423" Score="3" Body="&lt;p&gt;The &lt;a href=&quot;http://www.compucolor.org/docs/The%20Renaissance%20Machine.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compucolor II&lt;/a&gt;, from 1977, had an 8-color (3-bit) display, arranged as 32 lines of 64 characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Graphic resolution was 128x128, implying a graphics mode that displayed 8 pixels (4 x 2) in each character cell. I seem to remember that color could only be specified per character cell, which meant all 8 pixels in a cell had to be the same color. So, there weren't three &lt;em&gt;bitmapped&lt;/em&gt; planes, but a three-bit attribute array specifying the color of each character cell.&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2019-05-24T18:03:43.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11102" PostTypeId="2" ParentId="5911" CreationDate="2019-05-24T21:01:40.087" Score="6" Body="&lt;p&gt;Before the PDP-8/e, two other models of the PDP-8 had their electronics all fitting entirely beind the front panel. The PDP-8/S, which arrived shortly after the original PDP-8, was in this category; however, because it used a serial arithmetic unit, it was slow and of limited popularity. The PDP-8/L, a computer using the same technology as the PDP-8/I, but with fewer available options, also had its logic behind the front panel.&lt;/p&gt;&#xA;" OwnerUserId="13670" LastActivityDate="2019-05-24T21:01:40.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11103" PostTypeId="1" AcceptedAnswerId="11104" CreationDate="2019-05-25T07:39:00.920" Score="20" ViewCount="2684" Body="&lt;p&gt;Plain and simple, we know that consumer level 3D acceleration devices roughly appeared in the middle of the 90s, with brands like Matrox, 3DFX, Nvidia and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, such technology for sure must have been available way before for professionals, governments or even military.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;When and what was the first 3D acceleration device ever released for a computer?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify after Stephen Kitt comment,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By 'device' I more or less mean any approach or solution that significantly improved the speed of a 3D simulation, when say, you would compare it to the performance of a software rasterizer on a desktop computer of that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I could give an example it would be like when you used to play software rasterized 3D games with a low frame rate, against when you installed a 3DFX card, you instantly felt another level of performance/rendering. &lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2019-05-25T08:43:41.293" LastActivityDate="2019-05-28T18:59:15.007" Title="When and what was the first 3D acceleration device ever released?" Tags="&lt;graphics&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11104" PostTypeId="2" ParentId="11103" CreationDate="2019-05-25T08:45:25.150" Score="38" Body="&lt;p&gt;The first appears to be &lt;a href=&quot;https://en.wikipedia.org/wiki/Evans_%26_Sutherland#History&quot; rel=&quot;noreferrer&quot;&gt;Evans &amp;amp; Sutherland's&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/LDS-1_(Line_Drawing_System-1)&quot; rel=&quot;noreferrer&quot;&gt;LDS-1&lt;/a&gt;, introduced in 1969. The first one was delivered to Bolt, Beranek and Newman Inc., in August 1969. This was an analogue vector system, with depth cuing, and could draw and manipulate complex wireframe models in real time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first 3D engine produced as a VLSI microchip was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Geometry_pipelines&quot; rel=&quot;noreferrer&quot;&gt;Geometry Engine&lt;/a&gt;, developed at Stanford University and commercialised by &lt;a href=&quot;https://en.wikipedia.org/wiki/Silicon_Graphics#History&quot; rel=&quot;noreferrer&quot;&gt;SGI from the early 1980s&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;SGI's failure to address the Windows/Intel market led various SGI staff to leave and found Nvidia or join ATI in the 1990s, laying the foundations for today's market, where integrated geometry engines are a standard part of display systems. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-05-28T18:59:15.007" LastActivityDate="2019-05-28T18:59:15.007" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11105" PostTypeId="2" ParentId="2788" CreationDate="2019-05-25T09:27:37.187" Score="4" Body="&lt;p&gt;The &lt;a href=&quot;https://www.seasip.info/VintagePC/sanyo.html#vidhw&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sanyo MBC550&lt;/a&gt; had a 640x200 bitmapped display with 3 planes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The MBC video RAM is composed of three planes - green, red and blue.&#xA;  The green plane occupies main memory, and its position varies; writes&#xA;  to port 10h set its address:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Value | Address&#xA;======+========&#xA;    4 | 0C000h&#xA;    5 | 1C000h     (other values have not been tested)&#xA;    6 | 2C000h&#xA;    7 | 3C000h&#xA;======+========&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;The red and blue planes appear to have fixed locations of F0000h and&#xA;  F4000h respectively.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-05-25T09:27:37.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11106" PostTypeId="2" ParentId="11097" CreationDate="2019-05-25T09:48:37.747" Score="6" Body="&lt;p&gt;In addition to what already was stated, namely:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;... how the CIA (Complex Interface Adapter) maps JoyStick - or in general, any - input:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The signals a (digital) JoyStick delivers, come in via Pins 1 to 4 (Up, Down, Left, Right) and additionally Pins 6 and 9 for the buttons (Left, Right) - the equivalent values are represented on the charmap by e.g.: SPACE for Pin 6 aka Fire|Click and other keys, like Numbers and Arrows (can't recall which exactly, i think LEFT-ARROW was one of them). - Signals are cached in CIA #DC01.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But for the second Port the keys representing its signals are always a key-combination starting with the C= | Cequal (as in equal and as in &quot;Key is followed by another, so it becomes a sequel&quot;) | Commodore-Key | The Key with the Commodore-Logo. - Signals are cached in CIA +DC00.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the yet not mentioned pins 5 and 9 cache the position (y- and x- -axis) for analogue joystick | mouse | paddle operation-mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the pins used for digital signal input are generic as in cross-platform on (purposely) identical ports like e.g. on Atari ST or Amiga, the analogue ones are not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But regarding your question, another detail has to be mentioned:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CIA has at an offset +2 to the direct digital signal cache registers - so for #DC00 at #DC02 and for #DC01 at #DC03 respectively - registers that state if a signal is read-only or if it is allowed to write to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, the C=64 is designed to allow for a charmap-flip from alphanumeric with UPPER- and lower- -case to UPPERCASE plus GRAPHIC-SYMBOLS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another factor can be that a game makes use of memory-intensive bitmap-graphics and therefore has to swap-out some memory from kernel-space (Yes: KERNAL, it's okay, calm down ...), which leads to an overlap with the registers for the Joystick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or the game makes intense use of (especially ring-)modulation for its sound-processing, which in return contaminates the registers for the Joystick-ports, because the processing of analogue JoyStick|Mouse|etc. is handled by the SID sound-chip. It is kind of hardwired to the registers for x- and y- -axis in the #DC00|#DC01 and making use of it switches these to read-only mode. So input can not be processed simultaneosly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe the game syncs graphical representations in general and RasterBars | Z-Scrolling | interlaced colors | etc. specifically to IRQs. This can affect the handling of the registers, too; mostly due to timing- and memory-swapping- -constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe the software has AI built-in or simplified NPCs (Non-Playable-Characters) to provide a single-player-mode for a game that actually requires two players to be playing; like TicTacToe, Chess, etc. - In this case it would be dumb to pollute the already very limited amount of RAM for the program with a stack of extra-routines solely for that specific case; Instead the computer-players simulated interaction is using the real registers of Port 1. This can be done even in basic, by using the equivalent Characters or KeyCodes of these or by poking directly into them. For that to work the registers have to be made writable. You can cheat in these games, by having a joystick in port 1 and overwrite the actions of the computer-player.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using Port 2 for the human player mostly avoids many of the problems that can arise when the software is making use of the aforementioned methods. Why exactly, can't hardly be fitted in here and would be a separate task - or question - in this case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it helps. Anyhow. Thanks for reading.&lt;/p&gt;&#xA;" OwnerUserId="13673" LastActivityDate="2019-05-25T09:48:37.747" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11107" PostTypeId="2" ParentId="2788" CreationDate="2019-05-25T14:12:15.160" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://pp01.borik.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PP01&lt;/a&gt; had 3-plane videoRAM &lt;a href=&quot;https://sites.google.com/site/pp01color/technicke-informace&quot; rel=&quot;nofollow noreferrer&quot;&gt;organization&lt;/a&gt;: red, green, blue regions, 8KB each (resolution 256×256 pixels), pixel addressable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The access was done cleverly in two modes: either the whole videoRAM has been mapped into 64KB CPU address space, or (the default), only one block (thus saving addressable RAM), and writes to this block are copied to one or both other two blocks (selected by a &quot;colo(u)r register&quot; value)&lt;/p&gt;&#xA;" OwnerUserId="476" LastEditorUserId="476" LastEditDate="2019-06-17T06:07:32.910" LastActivityDate="2019-06-17T06:07:32.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11108" PostTypeId="1" AcceptedAnswerId="11111" CreationDate="2019-05-25T15:59:10.387" Score="35" ViewCount="7203" Body="&lt;p&gt;The 6502 has a &lt;code&gt;bit&lt;/code&gt; instruction which&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;copies two of the bits into the &lt;code&gt;N&lt;/code&gt; and &lt;code&gt;V&lt;/code&gt; flags,&lt;/li&gt;&#xA;&lt;li&gt;pretends to &lt;code&gt;and&lt;/code&gt; the byte with the accumulator, but discards the result and only affects &lt;code&gt;Z&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm having a hard time picturing a use for this. And curiously, it's missing any indexed or indirect addressing modes, and so can only be used absolutely or in the zero page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Incidentally, it's convenient also for skipping two bytes in the instruction stream in cases where you don't care what happens to the flags, but I don't imagine that's the use MOS had in mind). What kinds of things was it &lt;em&gt;meant&lt;/em&gt; for?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="56" LastEditDate="2019-05-26T20:40:20.960" LastActivityDate="2019-05-28T08:19:57.903" Title="Why does the 6502 have the BIT instruction?" Tags="&lt;6502&gt;&lt;instruction-set&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11109" PostTypeId="2" ParentId="11103" CreationDate="2019-05-25T16:05:31.247" Score="17" Body="&lt;p&gt;You can't really answer this question without acknowledging the parallel development paths for high-quality 3D graphics, which includes not only the dominant Polygon/Texture-mapping approach, but also the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ray_tracing_(graphics)#Ray_casting_algorithm&quot; rel=&quot;noreferrer&quot;&gt;Ray Tracing&lt;/a&gt; approach. This parallel development path continues through today, with recent announcements like Nvidia's next generation &lt;a href=&quot;https://developer.nvidia.com/rtx&quot; rel=&quot;noreferrer&quot;&gt;RTX platform&lt;/a&gt;, that features real-time Ray Tracing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the LDS-1 is a very early example of being purpose-built for 3D graphics, it was incapable of producing anything photo-realistic or &quot;natural&quot;. At roughly the same time, Ray Tracing was being used for high quality static images that, while taking many hours to render, produced results with a level of quality that would still impress 3D artists today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jFP9M.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jFP9M.jpg&quot; alt=&quot;In 1979, Whitted’s groundbreaking, computer-generated image of inter-reflecting spheres illustrated the value of ray tracing for global illumination&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1982, Osaka University created a purpose-built supercomputer designed for 3D graphics rendering using Ray Tracing. The supercomputer was known as the &lt;a href=&quot;http://museum.ipsj.or.jp/en/computer/other/0013.html&quot; rel=&quot;noreferrer&quot;&gt;LINKS-1 Computer Graphics System&lt;/a&gt;, and was an early contender for fastest computer in the world. It is briefly described on Wikipedia as:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;a massively parallel processing computer system with 514 microprocessors (257 Zilog Z8001's and 257 iAPX 86's), used for rendering realistic 3D computer graphics with high-speed ray tracing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Japanese supercomputer predates SGI's commercialization of the Geometry Engine by 5 years, and could produce far better 3D graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, both supercomputers and SGI systems were far out-of-reach for users of Desktop computer systems of the 1980s. However, Ray Tracing enjoyed a brief popularity at this time. Most 3D artists relied on affordable Amigas with accelerator boards that included FPUs to render 3D graphics and animations using ray tracing. The Macintosh II, with its Motorola 68020/68881 CPU/FPU, was also popular for this purpose. There is available a tremendous amount of early 3D desktop computer content created with such equipment, using both ray tracing and polygon rendering techniques. In a sense, any 1980s machine with an FPU was an &quot;accelerated 3D graphics workstation&quot;, if 3D rendering software made use of it. My own Amiga 1000 had a 68881 FPU attached via the side-expansion bus for just this purpose, in 1988, at the same time SGI was selling the IRIS 3000-series.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-05-25T20:30:34.097" LastActivityDate="2019-05-25T20:30:34.097" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11110" PostTypeId="2" ParentId="11108" CreationDate="2019-05-25T17:22:23.767" Score="14" Body="&lt;p&gt;Simply it gives the developer the ability to set status flags without actually moving any memory or destroying any registers. With a register starved system like the 6502, and the fact that (pretty much) all data movement is through the registers, there can certainly be use cases where this capability can come in handy.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2019-05-25T17:22:23.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11111" PostTypeId="2" ParentId="11108" CreationDate="2019-05-25T17:42:49.350" Score="42" Body="&lt;p&gt;Early MOS documentation (&lt;a href=&quot;http://users.telenet.be/kim1-6502/6502/proman.html#4221&quot; rel=&quot;noreferrer&quot;&gt;KIM-1 Programming Manual&lt;/a&gt;, Synertek SY6500/MCS6500 Microcomputer Programming manual, etc) states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The &lt;code&gt;BIT&lt;/code&gt; instruction actually combines two instructions from&#xA;  the &lt;code&gt;PDP-11&lt;/code&gt; and &lt;code&gt;MC6800&lt;/code&gt;, that of &lt;code&gt;TST&lt;/code&gt; (Test Memory) and (BIT Test).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In addition to the nondestructive feature of the &lt;code&gt;BIT&lt;/code&gt; which&#xA;  allows us to isolate an individual bit by use of the branch equal or&#xA;  branch no equal test, two modifications to the &lt;code&gt;PDP-11&lt;/code&gt; version of that&#xA;  instruction have been made in the &lt;code&gt;MCS650X&lt;/code&gt; microprocessor.  These are&#xA;  to allow a test of bit 7 and bit 6 of the field examined with the &lt;code&gt;BIT&lt;/code&gt;&#xA;  test.  This feature is particularly useful in serving polled interrupts&#xA;  and particularly in dealing with the &lt;code&gt;MCS6520&lt;/code&gt; (Peripheral Interface&#xA;  Device).  This device has an interrupt sense bit in bit 6 and bit 7&#xA;  of the status words.  It is a standard of the &lt;code&gt;M6800&lt;/code&gt; bus that whenever&#xA;  possible, bit 7 reflects the interrupt status of an I/O device.  This&#xA;  means that under normal circumstances, an analysis of the &lt;code&gt;N&lt;/code&gt; flag&#xA;  after a load or &lt;code&gt;BIT&lt;/code&gt; instruction should indicate the status of the&#xA;  bit 7 on the I/O device being sampled.  To facilitate this test using&#xA;  the &lt;code&gt;BIT&lt;/code&gt; instruction, bit 7 from the memory being tested is set&#xA;  into the &lt;code&gt;N&lt;/code&gt; flag irrespective of the value in the accumulator.&#xA;  This is different from the bit instruction in the &lt;code&gt;M6800&lt;/code&gt; which&#xA;  requires that bit 7 also be set on the accumulator to set &lt;code&gt;N&lt;/code&gt;.  The&#xA;  advantage to the user is that if he decides to test bit 7 in the&#xA;  memory, it is done directly by sampling the &lt;code&gt;N&lt;/code&gt; bit with a &lt;code&gt;BIT&lt;/code&gt;&#xA;  followed by branch minus or branch plus instruction.  This means that&#xA;  I/O sampling can be accomplished at any time during the operation&#xA;  of instructions irrespective of the value preloaded in the accumulator.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Another feature of the &lt;code&gt;BIT&lt;/code&gt; test is the setting of bit 6 into&#xA;  the &lt;code&gt;V&lt;/code&gt; flag.  As indicated previously, the &lt;code&gt;V&lt;/code&gt; flag is normally reserved&#xA;  for overflow into the sign position during an add and subtract instruction.&#xA;  In other words, the &lt;code&gt;V&lt;/code&gt; flag is not disturbed by normal&#xA;  instructions.  When the &lt;code&gt;BIT&lt;/code&gt; instruction is used, it is assumed that&#xA;  the user is trying to examine the memory that he is testing with the&#xA;  &lt;code&gt;BIT&lt;/code&gt; instruction.  In order to receive maximum value from a &lt;code&gt;BIT&lt;/code&gt;&#xA;  instruction, bit 6 from the memory being tested is set into the &lt;code&gt;V&lt;/code&gt; flag.&#xA;  In the case of a normal memory operation, this just means that the&#xA;  user should organize his memory such that both of his flags to be&#xA;  tested are in either bit 6 or bit 7, in which case an appropriate&#xA;  mask does not have to be loaded into the accumulator prior to&#xA;  implementing the &lt;code&gt;BIT&lt;/code&gt; instruction.  In the case of the &lt;code&gt;MCS6520&lt;/code&gt;, the &lt;code&gt;BIT&lt;/code&gt;&#xA;  instruction can be used for sampling interrupt, irrespective of the&#xA;  mask.  This allows the programmer to totally interrogate both bit 6 and&#xA;  bit 7 of the &lt;code&gt;MCS6520&lt;/code&gt; without disturbing the accumulator.  In the case&#xA;  of the concurrent interrupts, i.e., bit 6 and bit 7 both on, the fact&#xA;  that the &lt;code&gt;V&lt;/code&gt; flag is automatically set by the &lt;code&gt;BIT&lt;/code&gt; instruction allows&#xA;  the user to postpone testing for the &quot;6th bit on&quot; until after he has&#xA;  totally handled the interrupt &quot;for bit 7 on&quot; unless he performs an&#xA;  arithmetic operation subsequent to the &lt;code&gt;BIT&lt;/code&gt; operation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="3261" LastActivityDate="2019-05-25T17:42:49.350" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11112" PostTypeId="2" ParentId="11108" CreationDate="2019-05-25T20:55:03.753" Score="22" Body="&lt;p&gt;A good example would be reading from the floppy drive on the C64. The incoming clock and data signals of the serial bus are (perhaps not accidentally) wired to bits 6 and 7 of port A on CIA#2, appearing at &lt;code&gt;$DD00&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BIT $DD00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;samples both inputs and stores them in the &lt;code&gt;N&lt;/code&gt; and &lt;code&gt;V&lt;/code&gt; flags. Jumping back conditionally with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BVC $-3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;waits while the clock is low, as data must be sampled on the rising clock edge. When it falls through the &lt;code&gt;BVC&lt;/code&gt;, the &lt;code&gt;N&lt;/code&gt; flag contains the data bit. It can be transferred to the &lt;code&gt;C&lt;/code&gt; flag this way&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BMI $+4&#xA;CLC&#xA;BIT $38&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;just to showcase the secondary use of the &lt;code&gt;BIT&lt;/code&gt; instruction, skipping the &lt;code&gt;SEC&lt;/code&gt; (opcode &lt;code&gt;$38&lt;/code&gt;), where &lt;code&gt;BMI&lt;/code&gt; is jumping to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the data bit is in the carry flag, &lt;em&gt;without altering any of the three data registers&lt;/em&gt;. It can be shifted into the accumulator, which would hold the data byte being assembled. Meanwhile &lt;code&gt;X&lt;/code&gt; can count the number of bits received, and &lt;code&gt;Y&lt;/code&gt; can serve as offset when storing the received data with &lt;code&gt;STA (zp),Y&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="348" LastEditorUserId="348" LastEditDate="2019-05-26T04:23:00.140" LastActivityDate="2019-05-26T04:23:00.140" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11113" PostTypeId="2" ParentId="11108" CreationDate="2019-05-25T23:42:40.530" Score="29" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm having a hard time picturing a use for this [BIT]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's mainly an I/O issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 is in many ways designed especially for control/embedded applications and &lt;code&gt;BIT&lt;/code&gt; is a part of this. 6500 specific IO-devices are designed to report any service conditions on bit 7 (and 6). For example the 6522 will set bit 7 of the Interrupt Flag Register when an interrupt condition has been reported. So a 6522 can be polled in a system without interrupts without eating up many instructions. Even an active wait in polling would be just two instructions. As long as it's about bit 6 and 7 &lt;code&gt;BIT&lt;/code&gt; operates non destructive - unlike a sequence of &lt;code&gt;LDA&lt;/code&gt;/&lt;code&gt;AND&lt;/code&gt; - so no registers need to be saved, only flags changed, enabling the insertion of frequent checks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same reason why the Apple II's keyboard port puts the key-pressed flag into bit 7. so a quick &lt;code&gt;BIT&lt;/code&gt; can be used to check if a key has been pressed. And only the flags are affected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side-effect &lt;code&gt;BIT&lt;/code&gt; is versatile for fast test of flags/semaphores. Bit 6/7 of a flag byte can be tested right away. Likewise (counting) semaphores/locks. In addition bit can be used to test for a numbers sign, again without touching anything but the flags.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And curiously, it's missing any indexed or indirect addressing modes, and so can only be used absolutely or in the zero page.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not a concern for I/O, as these addresses are usually in fixed locations, especially when thinking embedded systems.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Bottom Line: &lt;strong&gt;&lt;code&gt;BIT&lt;/code&gt; is an instruction meant to speed up I/O handling.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The design side reasoning is to have an instruction to enable branching on as many bits as possible with minimal impact. Of the four testable bits (&lt;code&gt;N&lt;/code&gt;/&lt;code&gt;V&lt;/code&gt;/&lt;code&gt;Z&lt;/code&gt;/&lt;code&gt;C&lt;/code&gt;) one, carry, is as well usable as user flag (&lt;code&gt;SEC&lt;/code&gt;/&lt;code&gt;CLC&lt;/code&gt;), so keeping that function leaves 3. Using the AND function already implemented sets &lt;code&gt;N&lt;/code&gt; and &lt;code&gt;Z&lt;/code&gt;, so &lt;code&gt;BIT&lt;/code&gt; just needs to suppress copying the result of &lt;code&gt;AND&lt;/code&gt; back to A and copying Bit 6 into &lt;code&gt;V&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sounds like minimal effort to add a quite handy instruction.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-05-26T18:42:42.760" LastActivityDate="2019-05-26T18:42:42.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11114" PostTypeId="1" AcceptedAnswerId="11116" CreationDate="2019-05-25T21:56:09.027" Score="29" ViewCount="9995" Body="&lt;p&gt;I've always wondered how so much functionality and relative luxuries(CMOS Configuration Utilities. See: &lt;a href=&quot;https://geekprank.com/bios/&quot; rel=&quot;noreferrer&quot;&gt;https://geekprank.com/bios/&lt;/a&gt; for an example) included with most popular x86 BIOSes could be packed into such a tight space. According to Wikipedia some early(1971-199x; the EPROM reference table doesn't have a lot of dates.) EPROMs where &lt;a href=&quot;https://en.wikipedia.org/wiki/EPROM#EPROM_generations,_sizes_and_types&quot; rel=&quot;noreferrer&quot;&gt;quite small in size&lt;/a&gt;. I had a hard time finding a good average size in bytes for an x86 CMOS BIOS EPROM chip from the late 80s early 90s but I'm assuming they weren't measured in MBs but in KBs. &lt;a href=&quot;https://www.quora.com/What-is-the-size-of-a-typical-BIOS&quot; rel=&quot;noreferrer&quot;&gt;This&lt;/a&gt; Quora post seems to confirm this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The author writes: &quot;The Phoenix BIOSes I wrote in 1984-1985 never supported the ROM Basic. The PC was 8k and filled completely. The XT was put into a 16k, but was probably about 10k of code. The AT was probably about 16k for the BIOS and maybe another 8k for the setup, and was normally placed in a 32k ROM.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;32kbs by today's standards is quite a small amount of storage space. I suppose for a BIOS most of what you're doing doesn't need immense layers of abstraction and other storage complications, but I'd think that programming those CMOS Configuration Utility TUIs would be expensive space wasters. Not to mention BIOSes somewhere along the way they began to be written in C/C++ which probably wastes some space surely. Did these early programmers just use a library similar to &lt;a href=&quot;https://en.wikipedia.org/wiki/Ncurses&quot; rel=&quot;noreferrer&quot;&gt;ncurses&lt;/a&gt; but for BIOS programming? How were these text interfaces engineered? As most UI libs' raw logic(aside from platform specific stuff like windows and rendering), even super simple ones(Buttons, Labels, ect. Bare minimum common widgets.) usually require a decent amount of abstraction/complexity which seems sort of hard in a language like ASM less so if ASM is only used to load the bare minimum before switching to C/C++(which seems to be how it's done today). Am I overthinking this? Was it easier than I'm imagining?&lt;/p&gt;&#xA;" OwnerDisplayName="video_error" LastActivityDate="2019-12-14T07:47:33.690" Title="How did early x86 BIOS programmers manage to program full blown TUIs given very few bytes of ROM/EPROM?" Tags="&lt;c&gt;&lt;assembly&gt;&lt;hardware&gt;&lt;bios&gt;" AnswerCount="9" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11115" PostTypeId="2" ParentId="11114" CreationDate="2019-05-25T22:13:11.360" Score="0" Body="&lt;p&gt;The graphics area is small 320x200 with 4 colors on CGA screen or 640x350 2 colors.  So a simple chess game can be done in a small area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For text UIs there's ASCII graphic characters to make boxes and such &lt;a href=&quot;https://en.wikipedia.org/wiki/Code_page_437&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Code_page_437&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which are still being used today.  The color range is also limited to 16 colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So basically given a limited palette but &quot;richer&quot; primitives (in the form of ASCII lines from CP437), you don't need as much to do rendering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly there's less overall memory space so you have an address of 2 bytes to represent something in the 64K space.  There's no memory management to deal with because the entire memory space is yours (except for a few reserved areas)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of work can also be done through interrupts specifically Int 10 &lt;a href=&quot;https://en.wikipedia.org/wiki/BIOS_interrupt_call&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/BIOS_interrupt_call&lt;/a&gt; which gives you a lot of video controls as well.&lt;/p&gt;&#xA;" OwnerDisplayName="Archimedes Trajano" LastActivityDate="2019-05-25T22:13:11.360" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11116" PostTypeId="2" ParentId="11114" CreationDate="2019-05-25T22:23:48.760" Score="36" Body="&lt;p&gt;The architecture of the original IBM PC (and its clones) let the BIOS access the &lt;a href=&quot;http://www.philipstorr.id.au/pcbook/book3/videosys.htm&quot; rel=&quot;noreferrer&quot;&gt;video memory&lt;/a&gt; directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So making nice text layouts did not require positioning the cursor or making a sequence of calls like you would do with &lt;a href=&quot;https://en.wikipedia.org/wiki/Curses_(programming_library)&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;curses&lt;/em&gt;&lt;/a&gt;:  It was sufficient to &lt;a href=&quot;https://pdos.csail.mit.edu/6.828/2008/readings/hardware/vgadoc/VGABIOS.TXT&quot; rel=&quot;noreferrer&quot;&gt;set the text mode&lt;/a&gt; at startup and write at the right place in memory the character (1 byte) and its attributes (1 byte).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this it was sufficient to do some address calculation and a move instruction. All very easy in assembler with a minimum of instructions.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Video_BIOS&quot; rel=&quot;noreferrer&quot;&gt;video BIOS&lt;/a&gt; manages the compatibility with the BIOS and the video card, since these became much more complex.  &lt;/p&gt;&#xA;" OwnerUserId="13678" OwnerDisplayName="Christophe" LastEditorUserId="6794" LastEditDate="2019-05-28T06:27:03.367" LastActivityDate="2019-05-28T06:27:03.367" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="11117" PostTypeId="2" ParentId="11103" CreationDate="2019-05-26T05:29:43.553" Score="5" Body="&lt;p&gt;In the mid-1980s I worked for a company that was using satellite imagery as one of the tools geologists used to do studies for firms searching for oil.  The computer+software system we used was called &lt;em&gt;Earthviews&lt;/em&gt;, based on an LSI-11/73 CPU with an RSX-11 operating system. (The actual software we used most was a FORTH program called &lt;em&gt;AIMS&lt;/em&gt; (&quot;Advanced Image Management System&quot;), which ran separate from RSX-11 -- i.e. it was its own operating system.)  Physically the system was quite large, consisting of two tall 19&quot;-wide racks and a tape-drive system just as large. One of the optional hardware features was in one of the racks, about 18&quot; tall, called a &quot;&lt;strong&gt;vector processor&lt;/strong&gt;&quot;. I believe the system was developed in the early '80s, maybe even late '70s.  If I remember correctly, what it did was calculate a stream of a large number of multiply-plus-add operations in parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this hardware peripheral was not actually dedicated to be a &quot;3D accelerator&quot;, it could operate as a major component of such a subsystem. I'm not sure, but I believe what &lt;em&gt;Earthviews&lt;/em&gt; used it for was to process what was essentially sonar data from appropriate ground scans.  I don't remember this very well, because our company didn't use sonar data.  I think if you had the data, &lt;em&gt;Earthviews&lt;/em&gt; would build a 3D rendition of the ground the sonar passed through.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2019-05-26T05:36:19.577" LastActivityDate="2019-05-26T05:36:19.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11118" PostTypeId="2" ParentId="11114" CreationDate="2019-05-26T08:55:32.413" Score="8" Body="&lt;p&gt;Assembler is the way ... You can do a lot of stuff in 4 KBytes just google 4K demoscene ... I once created a 3D space ship sim game under 4K (gfx included) with 3D polygonal SW rendering with textures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Text mode (VGA mode 3) menus are really just few Bytes of code look at his:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/29579522/2521214&quot;&gt;What is the best way to move an object on the screen?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Printing of text is really just copying data into VRAM so printing routine is just few BYTEs of code and as you can see even Keyboard interrupt handler is not that big.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you compile similar code in higher level language then the executable is much much bigger because it must contain Engine of the language (handling heap/stack stuff and variables), also the linkage stuff especially if DLLs are used can be quite big in comparison to the usable code itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also modern OSes does not allow direct HW access so even stuff that was easy on the BIOS or MS-DOS side is now much much more complicated and requires a lot of code just to handle APIs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the reality of nowadays computing is even if you create some &quot;almost empty window&quot; with some simple functionality that would fit to few KBytes of code the executable grows to ~1MByte or more simply due to interfacing to OS APIs and used Libs ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-05-26T19:26:38.763" LastActivityDate="2019-05-26T19:26:38.763" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11119" PostTypeId="1" AcceptedAnswerId="11121" CreationDate="2019-05-26T09:46:06.063" Score="8" ViewCount="1602" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/7PlIX.jpg&quot; alt=&quot;an Amiga game&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember playing this game on an Amiga. I have no idea what it was called.&lt;/p&gt;&#xA;" OwnerUserId="13572" LastEditorUserId="6794" LastEditDate="2019-05-27T09:10:43.540" LastActivityDate="2019-05-27T09:10:43.540" Title="What is this side-scrolling fighting game for the Amiga?" Tags="&lt;amiga&gt;&lt;identify-this-game&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11120" PostTypeId="2" ParentId="11114" CreationDate="2019-05-26T09:47:13.143" Score="31" Body="&lt;p&gt;TUI-drawing code can be pretty compact when you're working in assembly and relying on the IBM video BIOS to do the heavy lifting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ctyme.com/intr/rb-0096.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;INT 10h/AH=06h&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;http://www.ctyme.com/intr/rb-0097.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;INT 10h/AH=07h&lt;/code&gt;&lt;/a&gt; can be used either to scroll a rectangular region of the screen or to clear the screen to a specified foreground/background colour combination.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ctyme.com/intr/rb-0099.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;INT 10h/AH=09h&lt;/code&gt;&lt;/a&gt; can be used to tile a character like &lt;code&gt;═&lt;/code&gt; horizontally, or to fill the screen with a character like &lt;code&gt;▒&lt;/code&gt; before drawing on top of it, both in a single BIOS call.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ctyme.com/intr/rb-0210.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;INT 10h/AH=13h&lt;/code&gt;&lt;/a&gt; (available on the PC AT, New XT, EGA, and beyond) lets you write a string, with or without in-line colour attributes and with or without moving the cursor.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm sure that someone crunched down their drawing code using tricks like this drawing order:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use &lt;code&gt;INT 10h/AH=09h&lt;/code&gt; to fill the screen with &lt;code&gt;║&lt;/code&gt; characters.&lt;/li&gt;&#xA;&lt;li&gt;Alternate using &lt;code&gt;INT 10h/AH=09h&lt;/code&gt;to draw the spans of &lt;code&gt;═&lt;/code&gt; and the corners and intersection pieces.&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;code&gt;INT 10h/AH=06h&lt;/code&gt; to clear out the remaining &lt;code&gt;║&lt;/code&gt; characters to produce the content areas of the frames.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;That has three advantages:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;There's no BIOS routine that I'm aware of to draw a column of &lt;code&gt;║&lt;/code&gt; but you can efficiently fill the screen with it, then overdraw or erase everywhere it isn't needed.&lt;/li&gt;&#xA;&lt;li&gt;When you're working in assembly, you can save space by figuring out how to batch up similar &lt;code&gt;int 10h&lt;/code&gt; calls so that each operation leaves as many registers as possible already set up for the invocation of the next operation.&lt;/li&gt;&#xA;&lt;li&gt;If you alternate drawing the horizontal and corner pieces, you can take that a step further when dealing with instructions that don't move the cursor by drawing the &lt;code&gt;═&lt;/code&gt; spans one character too long and one character too far to the left, then overdrawing them with the left-end corner pieces. (Thus, no need to &lt;code&gt;mov&lt;/code&gt; a new target column value between drawing the horizontal border and drawing its left-end corner.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;From what I remember of the TUIs I saw in Phoenix and AMI BIOSes right up into the Pentium era, it'd only be a few bytes to draw all that framing and set the colours, then updating the screen would just be a case of one &lt;code&gt;int 10h&lt;/code&gt; call to clear each framed region you want to update, then you draw in the new text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BIOS routines you need to expose to the OS anyway would be your abstraction and anything more would be unnecessary code bloat in that sort of situation.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2019-05-26T09:47:13.143" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11121" PostTypeId="2" ParentId="11119" CreationDate="2019-05-26T14:06:18.727" Score="16" Body="&lt;p&gt;That looks like Golden Axe; it's a Sega arcade game ported to home computers including the Amiga by Probe. Details: &lt;a href=&quot;http://www.lemonamiga.com/?game_id=463&quot; rel=&quot;noreferrer&quot;&gt;http://www.lemonamiga.com/?game_id=463&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-05-26T14:06:18.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11122" PostTypeId="2" ParentId="11071" CreationDate="2019-05-26T16:23:21.157" Score="6" Body="&lt;p&gt;The incremental cost, or &quot;BOM cost&quot;, of the original 128K Macintosh was approximately $750 at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This answer is trivially determined from the 1982-83 Apple Computer Inc. public financial results, along with the historical account &lt;a href=&quot;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Price_Fight.txt&amp;amp;sortOrder=Sort+by+Date&quot; rel=&quot;noreferrer&quot;&gt;provided by Andy Hertzfeld&lt;/a&gt;. Historical Apple Computer Inc. financial results indicate a Gross Margin of 50.6% in 1982 and 48.5% in 1983 &lt;a href=&quot;http://faculty.london.edu/chigson/casestudies/pdfs/apple.pdf&quot; rel=&quot;noreferrer&quot;&gt;ref.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the financial statements at the time, it is clear that Apple was aiming for ~50% gross margins in its business. These margins would compress in later years, undoubtedly due to the pressures of rising competition in the personal computer market. However, Mr. Hertzfeld states that the Macintosh team was aiming to match the then-current profit performance of the Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We also know from Mr. Hertzfeld's historical account that the Macintosh team was still aiming for a &lt;em&gt;wholesale&lt;/em&gt; price of $1,500 late in the development cycle (with a stated final retail price of $1995). Given the 50% gross margins, this would strongly suggest a production cost of $750 per unit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Knowing that the system cost $750 to produce at the time makes it easy to work backwards to a BOM cost structure, albeit with some conjecture about the relative costs of different components. My conjecture would lead me to a breakdown such as:&#xA;&lt;code&gt;&#xA;Printed Circuit Boards (x2)......$60&#xA;Major IC components (x6).........$30&#xA;Additional IC components (x43)...$86&#xA;Discrete electronics.............$44&#xA;Connectors and wiring............$40&#xA;CRT..............................$100&#xA;Case.............................$60&#xA;Keyboard.........................$60&#xA;Packaging &amp;amp; Media................$20&#xA;(manual, disks, etc.)&#xA;Manufacture/Assembly/Distro......$250&#xA;Total............................$750&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-05-27T15:30:02.633" LastActivityDate="2019-05-27T15:30:02.633" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11123" PostTypeId="2" ParentId="11119" CreationDate="2019-05-26T18:02:47.060" Score="9" Body="&lt;p&gt;Impressive that you were able to find the image without knowing the name of the game. If you paste the image URL of your post above into &lt;a href=&quot;https://www.google.com/imghp?hl=en&quot; rel=&quot;noreferrer&quot;&gt;Google's image search&lt;/a&gt;, Google's guess will be &quot;Golden Axe II&quot;.&lt;/p&gt;&#xA;" OwnerUserId="11374" LastActivityDate="2019-05-26T18:02:47.060" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11124" PostTypeId="2" ParentId="11114" CreationDate="2019-05-26T18:22:09.813" Score="15" Body="&lt;p&gt;Traditional BIOS setup interfaces had much simpler user interfaces than you're assuming.  They were also written in assembly which allowed for much more compact code than you would think based on the size of applications today. They didn't have &quot;full blown TUIs&quot;, most used a simple form interface. On the other hand operating systems like &lt;a href=&quot;https://en.wikipedia.org/wiki/GEOS_(8-bit_operating_system)&quot; rel=&quot;noreferrer&quot;&gt;GEOS&lt;/a&gt; for the Commodore 64 showed how you could implement a full blown GUI in assembly and have it fit in 64K of RAM and still leave room for applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original IBM PC didn't have a BIOS setup interface. It didn't need one: there was no real-time clock to set, no hard drive interface to configure, and no battery-backed CMOS RAM to store any sort configuration values.  It wasn't until the IBM PC/AT that the IBM PC architecture gained these things, but even then there was no BIOS setup interface in the BIOS itself.  Instead, if you wanted to changed the BIOS settings you needed to run a special program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually though, IBM PC clone manufacturers started putting the BIOS setup code in the BIOS. However rather than a full-blown text user-interface (TUI), with various widgets, they used a simple form-based interface. There was a bunch of static text, plus various fields where you could set things like the current time or various hard drive parameters. The arrows keys would select which field to edit, and the number keys and/or the plus (+) and minus (-) keys would change the value. Pressing a key like F10 would save the change configuration values and exit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VqaGf.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VqaGf.png&quot; alt=&quot;BIOS Setup Screen from the Asus P4B533 User Manual&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Over time BIOSes also got bigger and bigger. The IBM PC/AT reserved 128K space for motherboard ROMs, so BIOSes could easily grow to 128K as necessary. Eventually even that wasn't enough space and BIOSes started using bank switching to allow the BIOS to grow even bigger while still staying inside the 128K (or even 64K) footprint allowed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, most of this additional ROM space (now implemented using flash memory) didn't go towards more advanced setup interfaces; mostly it was used to support new features and functionality built into the motherboard. Things like &lt;a href=&quot;https://en.wikipedia.org/wiki/Advanced_Power_Management&quot; rel=&quot;noreferrer&quot;&gt;Advanced Power Management&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface&quot; rel=&quot;noreferrer&quot;&gt;ACPI&lt;/a&gt;, USB keyboard and mouse support, more advanced disk interfaces with RAID support, and booting of Ethernet, CD-ROM and various kinds of USB devices all required more and more ROM space. While this meant more options were added to the BIOS setup screens, the basic interface remained the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(There was a period where BIOS vendors experimented with crude graphical setup interfaces with mouse support, but this didn't last long. They were basically the old form based interfaces with additional icons, so they weren't really much of an improvement.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though BIOSes got bigger and bigger, they still would've been written mostly in assembly language. Aside from there still being a need to keep the code as small and as efficient as possible, most of this code was run in 16-bit real-mode. By the time BIOSes might have considered using C, 16-bit x86 C compilers were obsolete and no longer being developed. By today's standards they weren't very good code generators and a bit on the buggy side, and they weren't going to get any better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since BIOS vendors were just iteratively updating their BIOS implementations, writing everything in assembly wasn't that big a problem. They had a stable base of code, well tested and known to support all the weird quirks that 100% IBM PC compatibility required. Today if you were writing an &lt;a href=&quot;https://en.wikipedia.org/wiki/SeaBIOS&quot; rel=&quot;noreferrer&quot;&gt;entire traditional BIOS from scratch&lt;/a&gt;, you'd probably use C, but rewriting everything in C would have caused the BIOS vendors more trouble then it would've been worth. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of the adoption of &lt;a href=&quot;https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface&quot; rel=&quot;noreferrer&quot;&gt;UEFI&lt;/a&gt;, things are very different today. UEFI-based firmware for PC clones operate mostly in 32-bit (or 64-bit) mode. This has allowed to them to have much more fancy graphical setup interfaces written in C and/or C++ and compiled with modern compilers. &lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorUserId="7946" LastEditDate="2019-05-27T11:15:22.133" LastActivityDate="2019-05-27T11:15:22.133" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11125" PostTypeId="2" ParentId="11114" CreationDate="2019-05-26T21:43:34.443" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was it easier than I'm imagining?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, I believe it was.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did these early programmers just use a library similar to ncurses but for BIOS programming? How were these text interfaces engineered?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To understand this, it's important to keep in mind two things.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The IBM PC of the time was a very simple architecture by today's standards.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can do a lot of things in very little code, &lt;em&gt;especially&lt;/em&gt; when you know that you don't have to worry about anything else (even operating system routines) running at the same time and you can know with 100% certainty the starting state of the system (as you are entering from a known point in the BIOS power-on self test).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;IBM, and by extension every clone maker that wanted that coveted 100% IBM compatibility, put the graphics card's memory at a fixed address. For monochrome, the address range for text mode began at (physical) B0000H; for color, B8000H. In each range, two bytes were used per character to be displayed; the first byte (even address) held the character code, and the second (odd address) held the attributes for that one character. Characters were laid out such that the first memory position held the character displayed at row 1, column 1; the second memory position held that displayed at row 1, column 2; the 81st memory position that displayed at row 2, column 1; and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, with only a little bit of math and minimal knowledge of how to work with data at arbitrary memory locations, both of which would be absolute requirements to be anywhere near the BIOS code anyway, it's trivial to fill any rectangular portion of the screen with any combination of character and attribute you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond that, you can just move text labels into video memory directly, not unreasonably by simply copying bytes (&lt;code&gt;REP MOVSW&lt;/code&gt; would be your friend, and probably both be faster and require less code than calling through an interrupt, which will at a minimum require its own bookkeeping).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having that, you need a way to keep track of what element the user is interacting with. A trivial state machine will do that, quite likely in very little code - especially if you're willing to be a little clever in how you implement it. To indicate which selection is active, you could just toggle the &quot;high intensity&quot; bit for the appropriate characters, which could be done with a few instructions at most (I'm not sure if you can actually do &lt;code&gt;REP OR&lt;/code&gt; or &lt;code&gt;REP AND&lt;/code&gt; but even if you can't, it'd be a real tight loop).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagine that the hardest part would be where the setup utility needs to accept more advanced user interaction than to simply &quot;increase&quot; or &quot;decrease&quot; a value (whatever exactly that means for the specific value), which already gets you quite far. But even that could be done in very little code and a little bit of RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There would be no need for anything even remotely as complex as ncurses for any of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and many of the exact same techniques were used by non-BIOS programmers as well, simply because they gave &lt;em&gt;far&lt;/em&gt; superior performance as well as better control over the output compared to pretty much any alternative approach, not least of which going through the BIOS or OS services via interrupts.&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="7946" LastEditDate="2019-05-27T11:15:38.477" LastActivityDate="2019-05-27T11:15:38.477" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11126" PostTypeId="1" CreationDate="2019-05-27T06:35:51.217" Score="27" ViewCount="7562" Body="&lt;p&gt;What are &quot;subpixels&quot; in Super Mario Bros on the NES? How does it relate to wall clipping?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At 4:42 in the following video, the notion is mentioned in the context of how it relates to &quot;wall clipping&quot;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/4CgC2g43smA?t=282&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/4CgC2g43smA?t=282&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My own reasoning:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Subpixels is a term used to describe Mario's x,y coordinates as a float. This float increments (in &quot;subpixels&quot;) as a function of time multiplied by some gravity constant (y axis), player input (x and y), etc. Eventually the increment is enough for a full pixel of movement. This allows for more smooth acceleration of the movement of Mario in the game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears the collision detection is not perfect in this game. Not every pixel of Mario is checked for collision with every pixel of solid sprites such as pipes and bricks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is probably due to optimizations, but exactly how the collision detection in Super Mario Bros works eludes me, and I believe it is key to understand the collision detection in order to understand the wall clipping.&lt;/p&gt;&#xA;" OwnerUserId="7413" LastActivityDate="2019-05-27T08:37:40.010" Title="What is a subpixel in Super Mario Bros, and how does it relate to wall clipping?" Tags="&lt;graphics&gt;&lt;nes&gt;&lt;sprite&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11127" PostTypeId="2" ParentId="11126" CreationDate="2019-05-27T06:57:01.410" Score="27" Body="&lt;p&gt;Subpixels in general are invisible fractional pixels that you cannot see, but are used internally to represent the positions of objects at a finer level than they're capable of being displayed at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far as Super Mario goes they're represented as an integer with 16 subpixels per visible pixel. This allows inertia to be loosely modeled so that you can start off moving slowly, but gradually speed up in a more realistic fashion than modeling by exact pixels would give.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wall glitching tricks involve manipulating this value - by very short movements against the direction you're moving in to decrease it and jumping directly into a block to increase it - to get it to carry over and increase your pixel position so that the code that would normally push you back out of a wall results instead in sucking you further in. &lt;/p&gt;&#xA;" OwnerUserId="12147" LastActivityDate="2019-05-27T06:57:01.410" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11128" PostTypeId="2" ParentId="11126" CreationDate="2019-05-27T08:37:40.010" Score="22" Body="&lt;p&gt;In many 8 bit games the position of the player's sprite is stored as the pixel coordinates it rests on. For many games that is adequate, but it has some limitations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the game only uses whole pixel coordinates then the minimum movement speed is 1 pixel. In other words the resolution of the player's speedometer is 1 pixel. They can be moving at 1 pixel per frame, or 2 pixels per frame, but not 1.5 pixels per frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Super Mario Bros. that is inadequate. Mario has a lot of momentum and a major part of the game is managing it. If his speedometer had a 1 pixel/frame resolution he would feel &quot;stiff&quot; to control. One of the major innovations of that game, which many others soon adopted, was sub-pixel positioning and speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Super Mario Bros divides each pixel up into 256 sub-pixel divisions. 256 is used because it's the range of an 8 bit number, which the 8 bit Famicom / NES could handle easily. So Mario's position and speed has a resolution of 1/256th of a pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Mario reaches an obstacle the game pushes him away from it, so that he ends up outside of any solid blocks. However, the check for collisions with solid objects is only performed every other frame, so there is 1 frame where Mario can be inside a solid block before it starts pushing him. If he is moving fast enough to get deep inside the block it can end up pushing him the wrong way, allowing him to pass through solid walls. This is only possible because sub-pixel accuracy allows him to partially inside the block for two consecutive frames.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-05-27T08:37:40.010" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11129" PostTypeId="2" ParentId="11114" CreationDate="2019-05-27T18:42:54.517" Score="5" Body="&lt;p&gt;As noted, assembly can be pretty dense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can pack even more code into a small space using a &lt;a href=&quot;https://en.wikipedia.org/wiki/Threaded_code&quot; rel=&quot;noreferrer&quot;&gt;TIL&lt;/a&gt; (Threaded Interpreted Language).  FORTH is a well known TIL, but it is easy to roll your own.  It is easy to have part of your ROM be pure assembly, and part of it be a TIL.  What a TIL does is to trade off speed for space: TILs are more compact than native assembly, but slower.  So what a programmer can do is to use the TIL in the parts of the program where speed doesn't matter (such as the UI), and stick to native code where speed does matter (floppy disk interface, for example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not saying that any BIOS used a TIL, but it's a well known technique for squeezing more program into a space, one that would come readily to mind if space started to become a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A TIL isn't the only way to trade off speed for space.  You can also implement a specialized bytecode interpreter, and write parts of the program in that.  For example, the Apple II computers had an interpreted byte-code interpreter called &lt;a href=&quot;https://en.wikipedia.org/wiki/SWEET16&quot; rel=&quot;noreferrer&quot;&gt;SWEET16&lt;/a&gt;, used to do 16-bit arithmetic on the 8-bit processor.&lt;/p&gt;&#xA;" OwnerUserId="3324" LastActivityDate="2019-05-27T18:42:54.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11130" PostTypeId="1" AcceptedAnswerId="11138" CreationDate="2019-05-27T23:19:48.203" Score="48" ViewCount="7469" Body="&lt;p&gt;I'm browsing through an old book &quot;Basic Computer Simulation&quot; from 1983. It contains a line of BASIC code that reads:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LET Z1 = M * D1 * (PQ / A) [ 3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I understand all of the code except the &quot;[ 3&quot; I don't ever remember that syntax in any BASIC I learned. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The book calls it a &quot;universal subset of BASIC&quot; and says it has been tested on a TRS-80 Model III. Similar lines of code appear in other listings in the book so I don't think it is just a typesetting error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another formula in a different listing is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LET H = H1 - .5 * G * (T1 - T) [ 2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is a formula for a falling object.&lt;/p&gt;&#xA;" OwnerUserId="4203" LastEditorUserId="4203" LastEditDate="2019-05-28T04:33:37.810" LastActivityDate="2019-05-30T20:44:52.227" Title="Strange math syntax in old basic listing" Tags="&lt;basic&gt;" AnswerCount="3" CommentCount="10" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11131" PostTypeId="2" ParentId="11130" CreationDate="2019-05-28T04:56:10.580" Score="38" Body="&lt;p&gt;In old computer books of cheaper sort, (Paperback or pocket books) it was quite common that they couldn't type set all special characters directly. Either they did as in this case, changed the character for something the computer in question didn't use, but the type setter could handle. In this case this is normally mentioned in the foreword of the book. Otherwise you had someone add the character manually to the text. I've seen both versions, even in official manuals...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case the [ was a substitute for arrow up, or &quot;to the power of&quot;. This is clear from the second example in the question. &lt;/p&gt;&#xA;" OwnerUserId="10565" LastEditorUserId="576" LastEditDate="2019-05-28T05:13:37.287" LastActivityDate="2019-05-28T05:13:37.287" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11132" PostTypeId="2" ParentId="11108" CreationDate="2019-05-28T07:44:43.333" Score="2" Body="&lt;p&gt;I spent a lot of time in the 80s going through 6502 ROMs for home computers. I can honestly tell you what the BIT instruction is used for &lt;em&gt;most&lt;/em&gt; of the time in practice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mostly it's not used for any calculation of interest. It's used as a filler instruction to allow multiple entry points to a routine, each with different common parameter values. I don't think I ever saw it used for the intended purpose. (Maybe once or twice.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for example if you had a routine which prints an ASCII character, you might commonly want to print space, or carriage return or things like '?' on the Commodore machines etc. and to save space in the ROM they just used the BIT instruction to isolate LDA instructions, or other loads. For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;label_print_CR:&#xA;   LDA #$0D   - carriage return&#xA;   .byte $2C  (BIT instruction op code)&#xA;label_print_space:&#xA;   LDA #$20   - space&#xA;   .byte $2C&#xA;label_print_question_mark:&#xA;   LDA #$3F   - '?'&#xA;label_print_character:&#xA;   main code to print character in A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That would assemble to be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A9 0D 2C A9 20 2C A9 3F etc..&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you disassemble it you get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LDA #$0D&#xA;BIT $20A9&#xA;BIT $3FA9&#xA;etc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;so the BIT is doing nothing, but it's giving you these cunning specific extra entry points to the routine for printing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the entry points for the Commodore PET V4.0 BASIC (I don't have the code unfortunately.)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;bb1d    strout  Output String&#xA;bb3a    outspc  Output Format Character&#xA;bb41        -Print '&amp;lt;cursor right&amp;gt;'&#xA;bb44        -Print '?'&#xA;bb46    -   Output Character in A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can clearly see the entry points are just 2-3 bytes apart for 41, 44, 46 so there's no way they're using branches or jumps to load and jump into the general routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This application of the BIT instruction is just totally ubiquitous across 6502 machines of that era. I used it in my own code all the time. As you can tell from the disassembly it can be rather confusing as to what they're doing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is from the 1976 Microsoft 6502 BASIC listing which you can check out here &lt;a href=&quot;https://www.pagetable.com/docs/M6502.MAC.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pagetable.com/docs/M6502.MAC.txt&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DEFINE  SKIP1,  &amp;lt;XWD ^O1000,^O044&amp;gt;  ;BIT ZERO PAGE TRICK.&#xA;DEFINE  SKIP2,  &amp;lt;XWD ^O1000,^O054&amp;gt;  ;BIT ABS TRICK.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note these values are in octal so that's $24 and $2c for the two byte and three byte BIT instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PARCHK: JSR CHKOPN      ;ONLY POSSIBILITY LEFT IS&#xA;    JSR FRMEVL      ;A FORMULA IN PARENTHESIS.&#xA;                ;RECURSIVELY EVALUATE THE FORMULA.&#xA;CHKCLS: LDAI    41      ;CHECK FOR A RIGHT PARENTHESE&#xA;    SKIP2&#xA;CHKOPN: LDAI    40&#xA;    SKIP2&#xA;CHKCOM: LDAI    44&#xA;;&#xA;; &quot;SYNCHK&quot; LOOKS AT THE CURRENT CHARACTER TO MAKE SURE IT&#xA;; IS THE SPECIFIC THING LOADED INTO ACCA JUST BEFORE THE CALL TO&#xA;; &quot;SYNCHK&quot;. IF NOT, IT CALLS THE &quot;SYNTAX ERROR&quot; ROUTINE.&#xA;; OTHERWISE IT GOBBLES THE NEXT CHAR AND RETURNS,&#xA;;&#xA;; [A]=NEW CHAR AND TXTPTR IS ADVANCED BY &quot;CHRGET&quot;.&#xA;;&#xA;SYNCHR: LDYI    0&#xA;    CMPDY   TXTPTR      ;CHARACTERS EQUAL?&#xA;    BNE SNERR&#xA;CHRGO5: JMP CHRGET&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13705" LastEditorUserId="13705" LastEditDate="2019-05-28T08:19:57.903" LastActivityDate="2019-05-28T08:19:57.903" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11133" PostTypeId="2" ParentId="11114" CreationDate="2019-05-28T07:56:19.290" Score="4" Body="&lt;h2&gt;Early x86 PCs had no boot configuration program, nor was one needed&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Quoting &lt;a href=&quot;https://en.wikipedia.org/wiki/BIOS#User_interface&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The BIOS of the original IBM PC and XT &lt;strong&gt;had no interactive user interface&lt;/strong&gt;. Error codes or messages were displayed on the screen, or coded series of sounds were generated to signal errors when the power-on self-test (POST) had not proceeded to the point of successfully initializing a video display adapter.  Options on the IBM PC and XT were set by switches and jumpers on the main board and on expansion cards.  &lt;em&gt;Starting around the mid-1990s&lt;/em&gt;, it became typical for the BIOS ROM to include a &quot;BIOS configuration utility&quot; (BCU[10]) or &quot;BIOS setup utility&quot;, accessed at system power-up by a particular key sequence.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;As noted in the quote above, &lt;strong&gt;many settings were made by adjusting DIP switches and jumpers inside the computer.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;The boot device was chosen by a fixed scheme.&lt;/strong&gt;  After the power-on self-test and initializing I/O, the BIOS tried to read the boot sector from the &lt;code&gt;A:&lt;/code&gt; floppy drive.  If that failed, it moved on to the &lt;code&gt;B:&lt;/code&gt; floppy, and then the &lt;code&gt;C:&lt;/code&gt; hard drive.  If the drive itself or its disk were not present, it moved to the next in the sequence.  You could always override the hard drive by using a floppy in &lt;code&gt;A:&lt;/code&gt;, a security risk that modern BIOSes now allow you to prevent.  If there was no viable boot device, it either dropped into ROM BASIC (see below) or gave a retry message.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;More sophisticated configuration was done by files on the boot volume.&lt;/strong&gt;  This was the whole point of the &lt;code&gt;CONFIG.SYS&lt;/code&gt; and &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; files in DOS.  Want to reconfigure your system?  Just edit the configuration files on the boot volume.  No special ROM utility needed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;The drivers and configuration files for expansion cards were on the boot device anyway&lt;/strong&gt;, not stored in ROM.  Software on the boot volume could also override the default behavior of calls to ROM BIOS.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;BIOS literally means &lt;em&gt;basic input/output system.&lt;/em&gt;&lt;/strong&gt;  Input was limited to keyboards (and the original ROMs could not even handle 101-key keyboards).  Output was text and basic teletype control characters to the screen.  ROM BIOS did not even support ANSI escape codes -- that was the whole point of the &lt;code&gt;ANSI.SYS&lt;/code&gt; file on the DOS boot volume!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sure, there was ROM BASIC&lt;/strong&gt;, but...&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;only on IBM brand machines.  They licensed BASIC from Microsoft to put into ROM.  Part of the agreement was that Microsoft could not sell clone makers the contents of the IBM ROMs.  Therefore, clones never had BASIC &lt;em&gt;in ROM&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;it was only activated if no boot drives (floppies, hard disks) could be found.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;it was a command-line interpreter, not a fancy menu-driven configuration utility.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ROM BASIC could only access files on cassette tape.  There were other versions of BASIC that &lt;em&gt;could&lt;/em&gt; access files on floppies or the hard drive, but these were DOS programs, &lt;em&gt;not something in the ROM&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ROM BASIC could only run BASIC programs, not &lt;code&gt;.COM&lt;/code&gt; or &lt;code&gt;.EXE&lt;/code&gt; files.  So there is no way to transfer control of the system to something else.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the cassette port hardware was eliminated in the XT, and BASIC was taken out of the ROM starting with the AT.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sure, there were fancy menu-based programs, but...&lt;/strong&gt; these were DOS programs loaded from disk, &lt;em&gt;not programs built into ROM&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;There was no memory to store the settings anyway.&lt;/strong&gt;  EEPROM, battery-backed RAM, and FLASH memory were far more expensive than storing the configuration on the boot device.  FLASH chips weren't even available until 1988.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Was it &lt;em&gt;theoretically&lt;/em&gt; possible?  Yes, and all of the other answers seem to focus on that aspect.  However, this is &lt;em&gt;Retrocomputing&lt;/em&gt; and should be about what &lt;em&gt;historically&lt;/em&gt; happened.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-05-28T07:56:19.290" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11134" PostTypeId="2" ParentId="8723" CreationDate="2019-05-28T09:05:18.220" Score="4" Body="&lt;p&gt;The 6502 was intended to be run a constant clock rate and the early version were 1MHz but later 2MHz and higher. Also some of the peripheral chips became faster with time but not all of the useful ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With 1MHz you can put any speed of RAM or ROM in there as long as it meets the setup times for read and write for the CPU. I can put a modern 10ns static RAM in a 1MHz system typically without problem but it's not going to run faster unless the system clocking is increased. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in the late 80s they started to use some faster chips and the 2MHz 6502B and switch clocking rate dynamically between 1MHz and 2MHz depending on the address accessed, so that slower chips could also be used. You see that in the BBC Micro computer model B. The clock changing circuitry is a bit of a *** to understand because ideally the 6502 is supposed to be outputting two non-overlapping clock waveforms 01 and 02 from the input clock and I think changing the clock rate was a bit difficult without glitches. In the BBC Micro it gets stretched by half cycles to slow down rather than just going directly from 2MHz to 1MHz. It might seem the same but you have to check the circuitry which is right in the middle: &lt;a href=&quot;http://www.goffart.co.uk/museum/schematics/bbc_b.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.goffart.co.uk/museum/schematics/bbc_b.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see on the schematic that it has address decoding from IC24 (LS138) through to the inverter of IC33 (LS04) and that's what triggers the clock to slow down from 2MHz to 1MHz, but it's quite complicated because the circuit with all the flip flops depends on the 01 output of the 6502 as well as the clock counter chain input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think any machine from the era can detect magically how fast the memory is and speed up or slow down, and especially using the 6502 which doesn't have a very good wait system to insert cycles anyway. It has RDY, but it's rather cumbersome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC has fairly fast dynamic RAM which is refreshed by video access. Typically the video chip is accessing every RAM row so nothing else is needed for refresh. The CPU would access the RAM transparently on every half cycle so there's no such thing as stealing access from the video system. They're accessing memory in alternation. That's what many home computers did at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also DRAMs at that time were not that critical with refresh. You can stop refreshing them for a few seconds with hardly any data corruption. That's from personal experience with 4164 and other DRAMs. The charge leaks away over a few seconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the BBC schematic IC45 is selecting the row and column addresses for the RAM in a cycle so it alternates between video and CPU access: the LS139 chip's B input is connected to the 2MHz clock so the RAM address source selecting is done based on the clock state so the CPU is getting the RAM for half the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the 80s dual-port RAMs were like 256 bytes, and really freaking expensive.&lt;/p&gt;&#xA;" OwnerUserId="13705" LastEditorUserId="13705" LastEditDate="2019-05-28T09:11:21.170" LastActivityDate="2019-05-28T09:11:21.170" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11135" PostTypeId="2" ParentId="7977" CreationDate="2019-05-28T09:29:39.017" Score="1" Body="&lt;p&gt;If you use CMP that's the instruction to compare the accumulator A with a value which is either immediate as in CMP #$44, or from an address, such as CMP $102C,X which in this example is memory address $102C with the contents of the X register added to the address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best way to think about CMP is to realize it's just SBC (with carry implicitly set), that is the subtract instruction, but it doesn't save the result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if I have $21 in the accumulator and do a CMP #$10 then it gets the result $11 and sets the flags based on that subtraction, but then it throws away the $11 without changing anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you do a CMP #$21, then the result is zero so the zero flag is set (and the carry flag remains set). If you do CMP #$22 then the carry flag is cleared because it would need to borrow from the next byte in a subtraction, but for more specifics check out: &lt;a href=&quot;http://6502.org/tutorials/compare_beyond.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://6502.org/tutorials/compare_beyond.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13705" LastEditorUserId="13705" LastEditDate="2019-05-28T09:35:26.357" LastActivityDate="2019-05-28T09:35:26.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11136" PostTypeId="2" ParentId="8328" CreationDate="2019-05-28T11:12:33.467" Score="3" Body="&lt;p&gt;Back around 1982, 1983 a friend of mine built a simple scanner using a 16k de-capped dram, probably a 4116. This was used on a Nascom 2 computer with a Nascom IMP dot matrix printer. The dram, along with a small bulb were fitted to a small cup which was attached to the print head. A sheet was put in the printer and software scanned by just printing spaces and reading the dram chip as it 'scanned' the page. We had to figure out the bit layout of the chip (was actually in two distinct groups as I remember and not a simple matrix layout). Then software sorted out the scanned data and stored the image (to tape as I remember). As well as figuring out the odd layout of bits we found that they didn't line up particularly well. So a test image was used to generate a little correction table for that particular chip. My friend, Ronan, was always a very inventive guy.&lt;/p&gt;&#xA;" OwnerUserId="1956" LastActivityDate="2019-05-28T11:12:33.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11137" PostTypeId="1" CreationDate="2019-05-28T11:21:08.470" Score="7" ViewCount="756" Body="&lt;p&gt;My original (1983?) Commodore 64 (brown breadbox with grey function keys) has trouble powering on.  Specifically, when I flip the power switch the power LED will glow &lt;em&gt;dimly&lt;/em&gt; and the machine fails to display video.  However, if I unplug and re-plug the physical power (DIN) connector (with the power switch in the on position) the computer comes right up and the LED glows at full intensity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know C-64 power supplies are notoriously bad, but if the power supply were the problem I'm not sure the unplug/re-plug trick would work so reliably - so I was thinking maybe the switch is janky.  I'm going to try swapping the power supply for a home-brew rig I keep in storage (that I know is reliable) to see if that impacts the problem, but in the mean time:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any known history regarding the C64 power switch failing on early (read: before 1985ish) models?  Also, if anyone has any good suggestions I wouldn't object.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2021-01-25T07:23:16.397" Title="Does the Commodore 64 power switch have a history of failing?" Tags="&lt;commodore-64&gt;&lt;commodore&gt;&lt;power&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11138" PostTypeId="2" ParentId="11130" CreationDate="2019-05-28T18:21:42.987" Score="59" Body="&lt;p&gt;Your mention of TRS-80 provides a clue. In the &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_character_set&quot; rel=&quot;noreferrer&quot;&gt;TRS-80 character set&lt;/a&gt;, the space normally occupied by the ASCII &lt;code&gt;[&lt;/code&gt; character is instead a &lt;code&gt;↑&lt;/code&gt; (up arrow) character. Old versions of BASIC (such as &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/dartmouth/BASIC_Oct64.pdf&quot; rel=&quot;noreferrer&quot;&gt;this one from 1964&lt;/a&gt;) use the up arrow character to indicate exponentiation, probably because at that time the &lt;code&gt;^&lt;/code&gt; character was not even in the ASCII standard. (There is another question on this site &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/10925/why-do-we-use-caret-as-the-symbol-for-ctrl-control&quot;&gt;Why do we use caret (^) as the symbol for ctrl/control?&lt;/a&gt; which addresses the evolution of &lt;code&gt;^&lt;/code&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your second example &lt;code&gt;LET H = H1 - .5 * G * (T1 - T) [ 2&lt;/code&gt; provides another clue, as it is a formula for position of a falling object, which has a square in the time term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in this book, the &lt;code&gt;[&lt;/code&gt; character represents the &lt;code&gt;↑&lt;/code&gt; up arrow character because &lt;code&gt;[&lt;/code&gt; in ASCII occupies character number 91, the same as &lt;code&gt;↑&lt;/code&gt; in the TRS-80 character set. (Note that this differs from the original &lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII#Printable_characters&quot; rel=&quot;noreferrer&quot;&gt;1963 ASCII&lt;/a&gt;, where &lt;code&gt;↑&lt;/code&gt; was character number 94.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the book was typeset, there may have been a character set conversion problem where this discrepancy was not noticed, or for some reason the publisher simply could not print the &lt;code&gt;↑&lt;/code&gt; character.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastEditorUserId="7946" LastEditDate="2019-05-30T20:44:52.227" LastActivityDate="2019-05-30T20:44:52.227" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11139" PostTypeId="2" ParentId="11130" CreationDate="2019-05-28T18:55:09.087" Score="25" Body="&lt;p&gt;It is the exponentiation operator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a TRS-80 Model III the line of BASIC entered would literally be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LET Z1 = M * D1 * (PQ / A) [ 3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To get the &lt;code&gt;[&lt;/code&gt; character you would press the up arrow key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would press the same up arrow key on its predecessor, the TRS-80 Model I.  However, it would display as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LET Z1 = M * D1 * (PQ / A) ↑ 3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is because the Model I's character set had a few differences from ASCII.  Where ASCII has the &lt;code&gt;[ \ ] ^&lt;/code&gt; characters the Model I has &lt;code&gt;↑ ↓ ← →&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might wonder why the Model III didn't use &lt;code&gt;^&lt;/code&gt; for exponentiation.  The main reason is that it would prevent compatibility with the Model I which was a big feature of the Model III (even though there were some incompatibilities).  I suppose it is possible that the Model III could have accepted both &lt;code&gt;[&lt;/code&gt; and &lt;code&gt;^&lt;/code&gt; for exponentiation but then those Model III BASIC programs wouldn't be backwards compatible with the Model I.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also speculate that Tandy would not have been comfortable making the change to the BASIC ROM themselves and would not have been interested in paying Microsoft to do it.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2019-05-28T18:55:09.087" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11141" PostTypeId="1" CreationDate="2019-05-28T23:56:23.170" Score="2" ViewCount="156" Body="&lt;p&gt;Would anyone have made a mechanical, or electronic camera for their computer or robot ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parameters Of The Question&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;As a home-project [ Although, any example of a mechanical-tv-camera or mechanical-digital-camera interfaced to a computer or robot would be interesting ]&lt;/li&gt;&#xA;&lt;li&gt;From 1970 ( or anytime ) - 1984&lt;/li&gt;&#xA;&lt;li&gt;A camera that would allow the computer or robot to extract information from the image&lt;/li&gt;&#xA;&lt;li&gt;There already is a thread about RAM chips used an an image-sensor, so I'm more interested in other types of home-made electronic-cameras and mechanical-cameras.&lt;/li&gt;&#xA;&lt;li&gt;Before solid-state-tv-cameras, they were mechanical, with a mechanical-scanning-mechanism and a minimal number of photoelectric-sensors, people may have found these easier to build and interface to a computer or robot&lt;/li&gt;&#xA;&lt;li&gt;Obviously hybrid examples of electronic-mechanical-camera are welcome,  and any mechanical-scanning-device would have had an electronic component anyway&lt;/li&gt;&#xA;&lt;li&gt;Still or moving image camera  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;AN INTERESTING EXAMPLE DESIGN - Imagine a cart-robot moving around a track ( like a diecast-car-racing-track, or slot-car-track but without swivelling, or a toy-train-track ), and on it's top the robot has an array of photo-electric-sensors( e.g.8x8 ), so when it encounters a sign above it, it can differentiate between a left-arrow,  and a right-arrow, and activate an onboard-steering-mechanism to make a left or right turn at the crossroad where the arrow-sign is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought that the original digital-cameras actually used mechanical-rotating-scanning methods, or rotating-mirrors, although I cannot find information on that, so I wondered if maybe some home-projects interfaced this to computers or robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE - One Reason I Think This Question Has Not Been Answered Before On Retrocomputing ( Including The 'The earliest a home-computer or home-robot could be interfaced with a camera' Thread )&lt;br&gt;&#xA;  -   I'm thinking that a mechanical-image-scanner( with photoelectric sensor / sensors ) may have been much easier to interface with computers/robots since they may not have needed the analog-to-digital-converter component, because, the computer could be what sends a pulse to the photoelectric-sensor / sensors ), and then the photoelectric-sensor does or does-not-return a pulse back to the computer, light dependent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE&lt;br&gt;&#xA; - I THINK THIS QUESTION IS NOT A DUPLICATE OF &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8319/the-earliest-a-home-computer-or-home-robot-could-be-interfaced-with-a-camera?noredirect=1&amp;amp;lq=1&quot;&gt;The earliest a home-computer or home-robot could be interfaced with a camera&lt;/a&gt; because I had intended that question ( NOW CORRECTED ) to refer commercially available tv-cameras or digital-cameras, not to home-made cameras, which is what this question is asking .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I DON'T LIKE THAT THIS QUESTION IS NOW ALMOST INVISIBLE / NON-EXISTENT DUE TO BEING MARKED AS A DUPLICATE&lt;br&gt;&#xA;- This question is now almost invisible / non-existent due to being marked as a duplicate, because the link that appears on the main-page or as a search-result from within this website goes directly to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8319/the-earliest-a-home-computer-or-home-robot-could-be-interfaced-with-a-camera?noredirect=1&amp;amp;lq=1&quot;&gt;The earliest a home-computer or home-robot could be interfaced with a commercially available camera?&lt;/a&gt;,  only the link on that question goes to this question. &lt;/p&gt;&#xA;" OwnerUserId="11744" LastEditorUserId="11744" LastEditDate="2019-06-08T22:48:31.753" LastActivityDate="2019-06-08T22:48:31.753" Title="Would anyone have made a mechanical, or electronic camera for their computer or robot?" Tags="&lt;hardware&gt;&lt;robotics&gt;" AnswerCount="0" CommentCount="15" ClosedDate="2019-05-29T14:51:28.160" ContentLicense="CC BY-SA 4.0" />
  <row Id="11142" PostTypeId="1" AcceptedAnswerId="11144" CreationDate="2019-05-29T01:01:47.607" Score="16" ViewCount="2478" Body="&lt;p&gt;There is an image that I remember seeing, but that I have never been able to find. It shows 2-3 people on their hands and knees, crawling around a blueprint of a chip that had been rolled out over the floor of a room. Presumably this was from before computers had enough memory / processor power to supersede working with physical artifacts representing the design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm probably mismembering the fine details (e.g. was it a CPU? how many people were there? did it actually cover the whole floor?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know the image I'm referring to, or have a link to it?&lt;/p&gt;&#xA;" OwnerUserId="13716" OwnerDisplayName="Craig Gidney" LastEditorUserId="6794" LastEditDate="2019-06-01T02:02:22.867" LastActivityDate="2019-06-01T02:02:22.867" Title="Looking for an old image of designing a CPU with plan laid out / being edited on a literal floor" Tags="&lt;history&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11143" PostTypeId="1" CreationDate="2019-05-29T02:45:45.823" Score="25" ViewCount="1555" Body="&lt;p&gt;According to &lt;a href=&quot;https://web.archive.org/web/20090124092043/http://archive.computerhistory.org/resources/text/Oral_History/Zilog_Z80/102658073.05.01.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Zilog Oral History&lt;/em&gt;&lt;/a&gt;, Zilog only had a tight schedule to design the Z80. Facing the potential competition, Federico Faggin and Masatoshi Shima were worrying about Japanese semiconductor corporations copying their design: if they managed to clone the Z80 quickly, it would hurt Zilog's sales significantly. As a preventive measure, Federico Faggin asked Masatoshi Shima to implant several traps in the Z80 layout, intended to mislead, frustrate, and delay any reverse-engineering effort.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Slater: You had some concerns about Japanese companies, in particular copying your design. How did you address that concern?&lt;/p&gt;&#xA;&lt;p&gt;Faggin: Yes, we were concerned about others copying the Z80.  So I was trying to figure what we could do that that would be effective, and that’s when I came across an idea that if we use the depletion load the mask that doesn’t leave any trace, then I could create depletion load devices that look like enhancement mode devices. And by doing that we could trick the customer into believing that a certain logic was implemented, when it was not. Then I told Shima, “Shima, this is the idea how to implement traps. Put traps, you know, figure out how to do the worst possible traps that you can imagine,” and then Shima with his mind, that was steel mind, was able to actually figure out a bunch of traps that he could talk about.&lt;/p&gt;&#xA;&lt;p&gt;Slater: You want to tell us a little about that Shima?&lt;/p&gt;&#xA;&lt;p&gt;Shima: I didn’t count [on] talking about that mostly. I placed six traps for stopping the copy of the layout by the copy maker. And one transistor was added to existing enhancement transistors. And I added a transistor looks like an enhancement transistor. But if transistors are set to be always on state by the ion implantations, it has a drastic effect on very much. I heard from NEC later the copy maker delayed the announcement of Z80 compatible product for about six months. That is what I got from NEC.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'm aware that several groups have taken pictures of the Z80 die since then, also, some analysis has been done to reverse-engineer the chip publicly, especially the work of the ongoing, almost complete &lt;a href=&quot;http://www.visual6502.org/JSSim/expert-z80.html&quot; rel=&quot;noreferrer&quot;&gt;full-chip simulation&lt;/a&gt; from the Visual6502 team.&lt;/p&gt;&#xA;&lt;p&gt;My question is:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Today, do we have more knowledge about those &amp;quot;traps&amp;quot;? Have they been identified and documented?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If so, what are the effects of these &amp;quot;traps&amp;quot;? Was the Visual6502 team affected by them?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="12128" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-05-30T05:48:06.417" Title="In the original Z80 layout, where are the &quot;traps&quot; located? And what are their effects?" Tags="&lt;history&gt;&lt;z80&gt;&lt;reverse-engineering&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11144" PostTypeId="2" ParentId="11142" CreationDate="2019-05-29T03:55:40.883" Score="15" Body="&lt;p&gt;I suspect you may be thinking of a short scene from either &lt;a href=&quot;https://www.imdb.com/title/tt0199208/?ref_=fn_al_tt_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Day the Universe Changed&lt;/a&gt; (unlikely) or &lt;a href=&quot;https://www.imdb.com/title/tt0078588/?ref_=fn_al_tt_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Connections&lt;/a&gt; (more likely). James Burke visited Bell Labs and there is a scene where you see several engineers working on a chip design on the floor exactly as you describe. I'm sure it's not the only example, but it is a well-viewed one.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2019-05-31T18:34:18.010" LastActivityDate="2019-05-31T18:34:18.010" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11145" PostTypeId="2" ParentId="11142" CreationDate="2019-05-29T13:51:34.453" Score="23" Body="&lt;p&gt;Maury Markowitz's answer was correct, it was actually a &lt;em&gt;scene&lt;/em&gt; and not a picture. I was able to find it in &quot;The Day the Universe Changed&quot; Episode 1 &quot;The Way We Are: It Started with the Greeks&quot;. It's around 34 to 35 minutes in (well... it might depend on the version you're watching).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;You can find the episode &lt;a href=&quot;https://archive.org/details/thedaytheuniversechangedIitstartedwithgreeks/thedaytheuniversechangedIitstartedwithgreeks/thedaytheuniversechangedIitstartedwithgreeksreel2.mov&quot; rel=&quot;nofollow noreferrer&quot;&gt;on the internet archive&lt;/a&gt;. It's in two pieces (two &quot;reels&quot;); the relevant moment is &lt;code&gt;12:38&lt;/code&gt; to &lt;code&gt;13:03&lt;/code&gt; of reel 2.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Found also in Daily Motion:  &lt;a href=&quot;https://www.dailymotion.com/video/x6cr0hv&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.dailymotion.com/video/x6cr0hv&lt;/a&gt; after about &lt;code&gt;36:00&lt;/code&gt; starting with (what looks like) Bell Labs' Holmdel building.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aAl02.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aAl02.jpg&quot; alt=&quot;Screenshot from The Day the Universe Changed&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13716" LastEditorUserId="7118" LastEditDate="2019-05-30T19:33:36.840" LastActivityDate="2019-05-30T19:33:36.840" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11146" PostTypeId="2" ParentId="11143" CreationDate="2019-05-29T14:23:42.393" Score="15" Body="&lt;p&gt;Yes, there was at least one serious attempt to identify them, by Sergei Skorobogatov, who wrote an article about that: &quot;Searching traps in Zilog Z80 CPU&quot; back in 2014.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if I have permission to replicate the complete article here, as this would be the ideal case for a complete answer. In the meanwhile, his efforts can be read here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.cl.cam.ac.uk/~sps32/Z80proj/Z80_traps.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://www.cl.cam.ac.uk/~sps32/Z80proj/Z80_traps.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="4921" LastEditDate="2019-05-30T05:48:06.417" LastActivityDate="2019-05-30T05:48:06.417" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11147" PostTypeId="1" CreationDate="2019-05-29T15:15:53.493" Score="6" ViewCount="521" Body="&lt;p&gt;I just found myself being the sudden and proud owner of two wonderful Silicon Graphics machines, an Octane and an Octane 2, both in quite good condition (in particular with very few scratches to the cases).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking into plugging a monitor to either machine (in turn). I've determined that I'll need a 13W3-to-VGA adapter (I found &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B007TZG526&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt; which seems like it should do the job) and I'm now considering my options for the monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an ACER K242HL LCD that accepts VGA input but I'm not sure it supports sync-on-green, at least I couldn't find any clear statement online that it does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I'd love to find a cheap SGI monitor in a good shape (even a CRT), I'd rather stay relatively cheap so anything that will allow me to (casually) use the machines will be enough for now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are my options?&lt;/p&gt;&#xA;" OwnerUserId="6699" LastActivityDate="2019-05-30T01:38:15.450" Title="Monitor for an SGI Octane?" Tags="&lt;crt-monitor&gt;&lt;lcd-display&gt;&lt;sgi&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11148" PostTypeId="2" ParentId="11147" CreationDate="2019-05-29T15:30:37.537" Score="7" Body="&lt;p&gt;There’s a handy list of sync-on-green-capable (and known incapable) monitors &lt;a href=&quot;http://ps-2.kev009.com/sog/&quot; rel=&quot;noreferrer&quot;&gt;maintained by the Linux for PlayStation 2 community&lt;/a&gt;. Any of the “tested working” screens should be OK; take a note of any caveats in the comments column.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used to have an Iiyama 450, which worked fine with sync-on-green systems on both its 15-pin and BNC connectors. Those are quite large CRTs, perfectly in keeping with SGI systems! The list above includes flat-panel screens too if you prefer that.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-05-29T15:30:37.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11149" PostTypeId="1" AcceptedAnswerId="11150" CreationDate="2019-05-29T17:16:34.193" Score="11" ViewCount="898" Body="&lt;p&gt;Though there is already a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8087/how-do-accelerators-and-cpu-cards-work-on-the-apple-ii&quot;&gt;similar question&lt;/a&gt; on the site, this one is more specific to these chips and their technical implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were two accelerators for the Apple II series that were drop-in replacements for the 6502: The Zip Chip and the RocketChip. Both were apparently similar in architecture as the RC was produced by people who left Zip, but sold a product that ran 25% faster (5MHz/10MHz versus 4MHz/8MHz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm curious how these chips actually worked. Similarities that I'm aware of are that:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;They both maintain their own internal clock; the mainboard is not modified in this regard.&lt;/li&gt;&#xA;&lt;li&gt;They utilize some caching technology; I don't believe they mirror main RAM like some accelerators (e.g. Titan and TransWarp, from what I understand).&lt;/li&gt;&#xA;&lt;li&gt;They are aware of memory addresses that require slowdowns to stock 1MHz speeds (e.g. slot 6 for 5.25&quot; floppy access, though these were configurable).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;What I'm curious about is if it was simply a faster clock cadence with a MMU to know where to slow down? What about speed of RAM on the motherboard? Was the video &quot;interrupt&quot; simply pulling the /RDY line as per a motherboard clock and thus the speed of the actual CPU didn't matter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any details would be appreciated. I always felt that I had a good understanding of how it worked, but lately I've been curious if there were actual technical implementation notes to be found anywhere.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2020-10-01T19:53:45.843" LastActivityDate="2020-10-01T19:53:45.843" Title="How did the Zip Chip and RocketChip accelerators work for the Apple II?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;cpu&gt;&lt;accelerators&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11150" PostTypeId="2" ParentId="11149" CreationDate="2019-05-29T18:27:17.633" Score="14" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm curious how these chips actually worked. Similarities [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They are so similar, that Zip Technologies even won the case against Rocket-Chips manufacturer Bits &amp;amp; Pieces. Just, &lt;a href=&quot;https://downloads.reactivemicro.com/Apple%20II%20Items/Hardware/ZIP_CHIP/4%20MHz%20ZIP%20CHIP%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;the manual&lt;/a&gt; doesn't tell a lot about the inner workings. Only that  it's a &lt;strong&gt;&quot;technological marvel&quot;&lt;/strong&gt; with the equivalent of &lt;strong&gt;&quot;350 integrated logic chips&quot;&lt;/strong&gt; and &lt;strong&gt;&quot;hundrets of tiny gold wires connecting all of the internal parts&quot;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What I'm curious about is if it was simply a faster clock cadence with a MMU to know where to slow down?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That wouldn't bring much, as most 6502 cycles are memory cycles, so no speed up without any cache.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of Zip/Rocket-Chip it has been an 8 KiB tagged cache realized with two 6264 (alike) RAM chips. One as 8 KiB Cache, the other providing a tag byte for each location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Easy to see when looking at the &lt;a href=&quot;http://www.applelogic.org/files/IICPLUSSCHEMATIC.pdf&quot; rel=&quot;noreferrer&quot;&gt;last page of the IIc+ schematics&lt;/a&gt;. Apple &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II_accelerators#Apple_IIc_Plus_motherboard&quot; rel=&quot;noreferrer&quot;&gt;licenced the Zip-Chip for the IIc+&lt;/a&gt;, but changed the design to use standard, of the shelf, RAMs, putting all logic into a gate array.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What about speed of RAM on the motherboard?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Stayed as before. Every access was synced and slowed down to motherboard speed. The speedup was only as long as data was read and the data to be read was within the cache.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware was basically (*1) an 8 KiB RAM storing bytewise data plus an equally sized tag RAM. 8 KiB means 13 bit address. So the tag RAM stored the upper 3 bit of any address plus a flag if the data is valid or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The handling logic was rather straight forward cache implementation.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Address presented during a cycle (*2) checked against exclusions.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If it was an excluded address (slowed down) the CPU was synced with main RAM and the access was performed&lt;/li&gt;&#xA;&lt;li&gt;If not, direction was checked&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If it was a write the CPU was synchronized and data was written into main RAM and cache at the same time, as well as A13..A15 into tag RAM.&lt;/li&gt;&#xA;&lt;li&gt;If it was a read, the tag RAM was checked at the corresponding address (A0..A12)&lt;/li&gt;&#xA;&lt;li&gt;If the tag fitted (A13..A15 equal and valid) the entry was handed to the CPU, cycle finished at set speed (4 MHz).&lt;/li&gt;&#xA;&lt;li&gt;On non-fit, the CPU was synchronized and slowed, data was read from RAM simultaneous to CPU and cache, tag is updated.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result worst case is a CPU fully synchronized with main memory, effectively running at 1 MHz. Whenever a byte gets used twice a speedup &lt;em&gt;may&lt;/em&gt; happen - i.e. as soon as more than one consecutive memory access (like executing a two byte instruction) happens. Any code will run during first pass at 1 MHz and later at up to 4 MHz&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speedup resulted mostly from the fact that vast majority of all memory cycles a 6502 issues are for reading code and code is usually repeated. Data is even in best case (only ZP access) below 1/3rd - in real situations it'll considerable less than 20%. More of 2/3rd  thereof usually read cycles, resulting in less than 10% of all cycles being writes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So as long as the majority of executed code (and often used data) fits into 8 Kib (*3), speedup will be quite close to the speed selected (4 MHz). For most software it will work much &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5557/6659&quot;&gt;like shadowing on an Apple IIgs&lt;/a&gt;. A bit slower on first execution but speed up wenn the cache is loaded - and slowed for any writes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was the video &quot;interrupt&quot; simply pulling the /RDY line as per a motherboard clock and thus the speed of the actual CPU didn't matter?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Video did run from the motherboard memory (during the second half, as before).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - This will be very basic, not going into each detail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Each and every cycle on a 6502 is a memory cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - doesn't have much aliasing issues.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-05-30T07:25:35.823" LastActivityDate="2019-05-30T07:25:35.823" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11152" PostTypeId="1" AcceptedAnswerId="11153" CreationDate="2019-05-29T22:38:37.593" Score="4" ViewCount="400" Body="&lt;p&gt;I have an AV cable that connects Atari 1040STE with a AV to VGA converter. For some reason the vertical edges are not sharp, rather jagged or pixelated. I red that old atari would have an issue with modern display, as refresh rate of 15Hz is not supported. I was under the impression the converter would do the trick, but on the other hand, if I recall correctly refresh rate applies to highest resolution output to vga directly. Can you suggest where to look for a clue on how to fix it? Provided is a photo of the issue. Also included the components I used, maybe I went the wrong path. Perhaps any electronics inside is to blame and needs checking? Any feedback welcome as this is my first step in retrocomputing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Al072.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zZ6LF.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VQ9dN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2019-05-30T19:26:36.400" Title="Atari 1040ST AV video output - blurred and jagged vertical edges" Tags="&lt;video&gt;&lt;vga&gt;&lt;atari-st&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11153" PostTypeId="2" ParentId="11152" CreationDate="2019-05-29T23:17:03.967" Score="7" Body="&lt;p&gt;You are seeing &lt;a href=&quot;https://en.wikipedia.org/wiki/Dot_crawl&quot; rel=&quot;nofollow noreferrer&quot;&gt;dot crawl&lt;/a&gt; which is common when sending composite video into a low quality comb filter such as in that Video to VGA Converter box. To get rid of it, you will need a better comb filter (good ones are hard to find) or avoid composite entirely by converting from the STE's analog 15 kHz RGBHV to either the 31 kHz VGA that your monitor supports, or HDMI, DVI, or even S-Video depending on what the monitor accepts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Some VGA monitors support 15 kHz RGB signals directly. For those monitors, all you need is a &quot;passive&quot; Atari ST to VGA cable. Unfortunately, it seems your monitor does not support 15 kHz RGB, so for you and others with the same problem, here are some other solutions:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the monitor takes HDMI or DVI, the &lt;a href=&quot;https://www.videogameperfection.com/products/open-source-converter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open Source Scan Converter&lt;/a&gt; is a good choice that adds almost no lag. If price is a concern, look for a SCART to HDMI converter on eBay. It looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aZuXU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aZuXU.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In either case, you will also need an Atari ST to SCART cable like &lt;a href=&quot;https://www.retrogamingcables.co.uk/atari-st-rgb-av-scart-cable-tv-lead&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=c25dlHFW584&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a video comparing this and other converters on the Atari ST.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-05-30T19:26:36.400" LastActivityDate="2019-05-30T19:26:36.400" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11156" PostTypeId="1" AcceptedAnswerId="11157" CreationDate="2019-05-30T08:00:00.700" Score="6" ViewCount="377" Body="&lt;p&gt;I'm looking at &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c64/326106-1of2.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;the schematic&lt;/a&gt; and the &lt;a href=&quot;https://www.retro-kit.co.uk/user/custom/Commodore/C64/manuals/C64C_Service_Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Service Manual&lt;/a&gt; for the Commodore 64. I can't seem to find a schematic for the keyboard itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems clear that the control port 1 joystick has normally open switches for the four directions and the fire button, and presses are detected by the switches closing and shorting lines COL0 through COL4 (connected to PA0 through PA4 on 6256 CIA U1) to ground, thus pulling them down to 0 V. So something must be pulling these lines up to +5 V when they're not shorted to ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, the description of keyboard scanning says that you drive one of COL0 through COL7 low and the rest high via output on PA0 through PA7, and then see which of ROW0 through ROW7 is brought low by a key in the matrix shorting one of those lines to the low COLn line, via reading PB0 through PB7. Again, this means that something must be pulling up ROW0 through ROW7 when they are not shorted to ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are no pullup resistors for this in the motherboard schematic. The keyboard does have +5 V going to it; are there pullup resistors on the keyboard PCB?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-05-30T23:37:32.567" LastActivityDate="2019-05-31T08:52:04.310" Title="Where are the pullups for the Commodore 64 keyboard matrix lines?" Tags="&lt;commodore-64&gt;&lt;mos-6526&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11157" PostTypeId="2" ParentId="11156" CreationDate="2019-05-30T08:10:36.637" Score="7" Body="&lt;p&gt;No external pull-up is needed as the CIA already got internal circuitry to do so.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Port A and B have passive pull-up devices as well as active pull-ups&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Taken from the &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf&quot; rel=&quot;noreferrer&quot;&gt;CSG 6526 data sheet&lt;/a&gt;, section &quot;I/O Ports&quot; on page 5.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-05-30T08:17:07.990" LastActivityDate="2019-05-30T08:17:07.990" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11158" PostTypeId="2" ParentId="427" CreationDate="2019-05-30T09:07:19.627" Score="3" Body="&lt;p&gt;Another option is to replace the innards of the original Amiga mouse with a new laser PCB. There is &lt;a href=&quot;https://amigastore.eu/en/559-laser-upgrade-for-amiga-mice.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one sold by AMIGAstore.eu&lt;/a&gt; that supports most of the popular Amiga mice models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doesn't solve the ergonomics, if that's really a problem, but makes the original-looking mouse just a little bit less infuriating to use.&lt;/p&gt;&#xA;" OwnerUserId="7506" LastActivityDate="2019-05-30T09:07:19.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11159" PostTypeId="1" CreationDate="2019-05-30T09:51:11.360" Score="4" ViewCount="243" Body="&lt;p&gt;Can I use multiple small AC adaptors to make a working Colecovision AC adaptor? For example, two 5V, one 12V and the ground. Colecovision AC adaptors are too expensive. &lt;/p&gt;&#xA;" OwnerUserId="13735" LastEditorUserId="6659" LastEditDate="2021-03-01T23:15:08.540" LastActivityDate="2021-03-02T19:33:41.213" Title="Can I build a Colecovision AC adapter from multiple other adapters?" Tags="&lt;hardware&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11160" PostTypeId="1" AcceptedAnswerId="11166" CreationDate="2019-05-30T09:56:27.120" Score="9" ViewCount="2288" Body="&lt;p&gt;I was exploring different options of connecting both my Atari ST and C64 to a modern TV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I opted for a composite signal passed through a cheap AV to VGA converter, and although the display works, there is this crawling dot problem, which as I understand is specific to the composite signal output itself. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11152/atari-1040st-av-video-output-blurred-and-jagged-vertical-edges/11153#11153&quot;&gt;Atari 1040ST AV video output - blurred and jagged vertical edges&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since then I spoke with few people who recommended getting RGB SCART cable with a SCART to HDMI converter, however on of the reputable sellers on ebay advised it will not work:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/H9EQD.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This youtuber compared few options and concluded the best output will be passed using ST to vga, then vga to hdmi using simple direct cable mod.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/c25dlHFW584&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/c25dlHFW584&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for a best solution that will not ruin my pocket (going over £60) but will give a clear, sharp image on a modern display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you suggest some parts, please? If I understand correctly  not all converters are the same, there are also scallers? Are there any particular characteristics of a component to look for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My monitors and TVs can accept VGA, DVI and HDMI only.&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2019-05-30T12:58:29.790" LastActivityDate="2019-05-30T17:35:26.690" Title="What is the best option to connect old computer to modern TV" Tags="&lt;video&gt;&lt;commodore&gt;&lt;vga&gt;&lt;atari-st&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11161" PostTypeId="2" ParentId="11160" CreationDate="2019-05-30T10:34:45.970" Score="3" Body="&lt;p&gt;If you're willing to modify the C64, there is a fairly recent mod &lt;a href=&quot;https://github.com/c0pperdragon/C64-Video-Enhancement&quot; rel=&quot;nofollow noreferrer&quot;&gt;that replaces the C64 modulator circuit with an FPGA board&lt;/a&gt; that generates an additional YPbPr signal by snooping the VIC-II chip signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't mention what inputs your &quot;modern TV&quot; has, but component/YPbPr is more likely to still be supported rather than S-Video which is your other option for a better quality picture on a C64 over the composite signal. If you need HDMI then the well-regarded &lt;a href=&quot;https://www.videogameperfection.com/products/open-source-converter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OSSC&lt;/a&gt; can at least use YPbPr whereas it doesn't support composite or S-Video.&lt;/p&gt;&#xA;" OwnerUserId="7506" LastActivityDate="2019-05-30T10:34:45.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11162" PostTypeId="1" CreationDate="2019-05-30T13:23:00.667" Score="5" ViewCount="324" Body="&lt;p&gt;Is it possible to connect the unmodified video output from an Apple 1 and Apple II (with their non-standard/out-of-spec NTSC sync pulse levels and/or timings) to a (currently in-production and commonly available) flat panel television set, and get a good image?  If so, what connectors, converters, and cables (etc.) might be needed?&lt;/p&gt;&#xA;&lt;p&gt;(I’ve been told that many of the generic composite-to-HDMI (etc.) converters either refuse to recognize the input from an Apple I or Apple I replica circuit board, or produce unstable output.)&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2021-03-18T18:14:51.603" LastActivityDate="2021-03-18T18:14:51.603" Title="Apple I and II video output to a contemporary TV set?" Tags="&lt;apple-ii&gt;&lt;video&gt;&lt;apple&gt;&lt;apple-1&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11163" PostTypeId="2" ParentId="11159" CreationDate="2019-05-30T13:43:44.130" Score="5" Body="&lt;p&gt;Yes, as long as:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You use power supplies that can deliver the amount of current the ColecoVision needs.&lt;/li&gt;&#xA;&lt;li&gt;The 5V power supply grounds are 'floating', i.e. not connected to ground or neutral from the power cord (this is required so that you can hook up one of the 5V supplies backwards to get -5V from it).&lt;/li&gt;&#xA;&lt;li&gt;You have sufficient electric/electronic knowledge and experience to do this without creating a safety/fire hazard and/or injuring yourself.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="70" LastActivityDate="2019-05-30T13:43:44.130" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11164" PostTypeId="2" ParentId="10965" CreationDate="2019-05-30T14:53:33.747" Score="6" Body="&lt;p&gt;Definitely not. Vilnius Basic was created specifically for the 16bit K1801BMx chip family, and by and large was a port of MSX Basic for this CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Porting it to 8-bit machines was impractical due to widespread clones (or should I say adaptations, because they typically included extra functionality such as graphics or music) &#xA;of MS Basic 3.2.&lt;/p&gt;&#xA;" OwnerUserId="3303" LastActivityDate="2019-05-30T14:53:33.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11165" PostTypeId="1" AcceptedAnswerId="11168" CreationDate="2019-05-30T15:00:09.313" Score="22" ViewCount="2356" Body="&lt;p&gt;Looking at the MAME driver for the Apple //e, I noticed an interesting comment:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;NOTE: On real IIe and IIe enhanced h/w, pressing SHIFT and paddle button 2 will short out the power supply and cause a safety shutdown. (We don't emulate this &quot;feature&quot;, and it was relatively rare in real life as Apple joysticks only had buttons 0 and 1 normally).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I've never heard of this before, though I don't recall ever utilizing paddle button 2 either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this an actual problem that always existed? Would reproducing it by hooking up the right pins on the Game I/O port be unsafe or potentially damaging to the //e or is it completely harmless because the circuitry is designed to handle such an event? Why does this &quot;feature&quot; exist?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="462" LastEditDate="2019-05-31T08:09:16.337" LastActivityDate="2019-06-05T18:23:53.787" Title="Why was it possible to cause an Apple //e to shut down with SHIFT and paddle button 2?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11166" PostTypeId="2" ParentId="11160" CreationDate="2019-05-30T15:25:06.307" Score="6" Body="&lt;p&gt;For the ST, the best option I’m aware of is to use the Atari-provided SCART cable and the &lt;a href=&quot;https://www.videogameperfection.com/products/open-source-converter/&quot; rel=&quot;noreferrer&quot;&gt;OSSC&lt;/a&gt;; the latter will double lines etc. to produce a picture which any modern HDMI screen should be able to display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the outputs from your C64 (which may need to be modded anyway), the OSSC might not be appropriate; the &lt;a href=&quot;https://www.videogameperfection.com/products/retrotink-2x/&quot; rel=&quot;noreferrer&quot;&gt;RetroTINK 2X&lt;/a&gt; supports S-Video, composite, etc., but there are issues with the current firmware and C64s. I’d suggest waiting for VGP’s forthcoming Koryuu.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of these fit within your budget...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-05-30T15:56:55.297" LastActivityDate="2019-05-30T15:56:55.297" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11167" PostTypeId="2" ParentId="11162" CreationDate="2019-05-30T15:30:48.267" Score="5" Body="&lt;p&gt;Most CRT-based television sets sold in the US will accept any combination of horizontal sweep rate that's within a few percent of 15.75kHz and vertical sweep rate that's within a few percent of 60Hz, with any arbitrary phase relationship, even though the FCC has for many decades required that broadcast stations output signals that are within a tiny fraction of a percent of 15,734.27Hz and 59.940Hz, respectively, with a precisely-specified phase relationship.  Electronically, it was easier to make a set with a timing reference that might deviate from the ideal by 5%, but then make the set accept anything within 8% of that, than it would be to design a set which would know or care if the input signal was within 1% of the specified ideal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many if not most home computers and video games in the 1980s generated video with horizontal and vertical frequencies that were a percent or two away from the ideal frequencies and lacked the FCC-mandated phase relationship, since doing so was often easier than matching the specifications precisely, and because for various technical reasons doing so could improve the appearance of the computer's output on television sets of the era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the person who designs a digital television set wants to support 1980s computers, it would not be hard to make the unit give a better picture than a 1980s television.  Many television sets, however, make simplifying assumptions about the incoming video signal and will produce an inferior picture (or in some cases no picture at all) if those assumptions don't hold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Getting the best flat-screen picture from vintage electronics requires using a television set whose designer was interested in supporting such devices.  Unfortunately, I've never seen support for such equipment regarded as a marketing feature.  Some sets work well and some work poorly, but I've not found any way to predict whether a particular set will work with a particular device other than by trying it out and seeing what happens.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-05-30T15:30:48.267" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11168" PostTypeId="2" ParentId="11165" CreationDate="2019-05-30T16:35:06.610" Score="25" Body="&lt;p&gt;The keyboard on the Apple II+ was designed to type uppercase letters only, which rather limited the machine's usefulness for word processing.  Because almost nothing used paddle button 2 and very few controllers even had a third button, a common user-installed modification was to run a wire from the shift-key signal to the paddle-button-2 input.  Word processing programs could then be set to use paddle button 2 to check whether the shift key was down and use that to decide whether to type uppercase or lowercase.  This was far from perfect, since if e.g. a user typed &lt;kbd&gt;shift&lt;/kbd&gt;+&lt;kbd&gt;A&lt;/kbd&gt; and then released both keys while the system was doing something, the system would then poll the keyboard, find out an &quot;A&quot; had been pushed, observe that the &lt;kbd&gt;shift&lt;/kbd&gt; key was not (still) pressed, and type a lowercase &quot;a&quot;.  It was nonetheless superior to being unable to type lowercase letters at all, or requiring that users press &lt;kbd&gt;ESC&lt;/kbd&gt; before any uppercase letter (the other approach word processors used).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the Apple //e allows lowercase letters to be typed directly, the designers wanted to be compatible with code that expected the shift-key mod to be installed, so they simply included the connection on the motherboard directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that paddle buttons were intended to be used by wiring a resistor that would weakly pull the input to +5V when the button isn't pushed, and then having the switch pull the input to ground when pressed.  The &lt;kbd&gt;shift&lt;/kbd&gt; key was wired the opposite way--passively pulled down, with a switch to +5V.  If Apple had foreseen the potential issue this could cause, it could have been averted by simply adding a resistor in series with the switch.  Alternatively, Apple could have included a jumper that would connect that input to either the appropriate pin on the internal controller socket or to the shift key.  My guess is they simply failed to recognize the possibility of a problem since paddle 2 inputs would be used so rarely.  It was certainly never intended as a &quot;feature&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for whether this would cause damage, it would certainly cause excessive stress on the switch contacts used for the &lt;kbd&gt;shift&lt;/kbd&gt; key and/or paddle 2 input, and would likely stress the power supply components as well.  Doing this once or twice might not cause the components to die instantly, but one probably wouldn't have to do it too many times to wear out the components.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="6794" LastEditDate="2019-06-05T18:23:53.787" LastActivityDate="2019-06-05T18:23:53.787" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11169" PostTypeId="2" ParentId="11160" CreationDate="2019-05-30T16:39:44.147" Score="3" Body="&lt;p&gt;Sony DSC-1024 works great with both ST and C64 (or any other retro analog video). Outputs to VGA CRT, LCD, etc. Can often be found used for &amp;lt;60 GBP. You'll need the right cables for the computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is professional gear that used to be popular with broadcast studios. That's why the analog (VGA) video that it outputs is relatively &quot;pristine&quot;, even when upscaled to 1280x1024 resolution. It even reproduces composite color artifacts. Naturally, any interference in the input signal is also visible at the output. That's why you should obtain the right cable for your computer, such as RGB for the ST and S-video for the C64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/K0l90.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K0l90.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-05-30T17:35:26.690" LastActivityDate="2019-05-30T17:35:26.690" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11170" PostTypeId="2" ParentId="5785" CreationDate="2019-05-30T20:45:15.513" Score="0" Body="&lt;p&gt;If &lt;code&gt;RANDOMIZE 0&lt;/code&gt; isn't sufficiently random for your purposes, you could invoke it several times at unpredictable intervals (e.g. using keypress timings as you suggest), then combine the results.  You probably want to keep values within the range 0-65535, so that the Spectrum uses exact integers rather than floating-point numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Off-hand (and having not written any ZX Basic for 30 years!), I'd do the combining of partial result &lt;code&gt;r&lt;/code&gt; with a new random number something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LET r = r % 255 * 257 + RND % 256&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This allows us to multiply by 257 (which I &lt;em&gt;think&lt;/em&gt; is prime), without overflowing the integer range.&lt;/p&gt;&#xA;" OwnerUserId="7946" LastActivityDate="2019-05-30T20:45:15.513" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11172" PostTypeId="1" CreationDate="2019-05-31T03:00:10.343" Score="6" ViewCount="423" Body="&lt;p&gt;As described in the &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MOS 6526 CIA data sheet&lt;/a&gt; (at the bottom of page 5) and &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11171/7208&quot;&gt;this answer&lt;/a&gt;, the PA0-7 and PB0-7 pins:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;always act as inputs, even when the data direction register (DDR) is set to 1 (&quot;output&quot;) for that pin, and&lt;/li&gt;&#xA;&lt;li&gt;the outputs are open drain, so setting 1 in both the DDR and the Peripheral Data Register (PR) has the same effect as setting 0 in the DDR and any value in the PR.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So it seems that the DDR isn't really necessary; rather than writing 0 to a bit in the DDR one can just write 1 to the corresponding bit in the PR and have the same effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what use is it to have these two not-strictly-necessary DDR registers? I would think that adding more registers would not make the chip design or manufacture easier or cheaper, though perhaps it could help with testing. Does it make writing certain kinds of programs significantly easier?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A note on the CIA driving its output pins:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data sheet doesn't explicitly say whether the outputs are open drain or whether there they are driven with additional current beyond that supplied by the built-in pull-up when a pin's bit is set in both the DDR and the PR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, Commodore had owned MOS Technologies for several years by the time design on the Commodore 64 started and various stories I've read about the design process indicated that the C64 designers worked closely with the chip designers. Commodore seemed fine with shorting the CIA I/O pins to ground; they did this with ten different joystick switches and, via sinking current through other I/O pins, with the keyboard matrix, as you can see from the schematic on page 12 of the &lt;a href=&quot;https://www.retro-kit.co.uk/user/custom/Commodore/C64/manuals/C64C_Service_Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Service Manual&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clearly this wouldn't be safe if the outputs were not designed to be pulled low regardless of whether the CIA is driving them or not, and the standard way to do this would be to have open drain outputs and pull-ups.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you posit that the CIA is driving the outputs with additional current beyond that supplied by the pull-up, I'd appreciate an explanation of why you think this would be so and what advantage this might provide, given that those outputs still have to act just like open-drain outputs with pull-ups would anyway.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-05-31T08:05:08.783" LastActivityDate="2019-06-01T03:18:49.840" Title="What use are the data direction registers in the MOS 6526 CIA?" Tags="&lt;mos-6526&gt;" AnswerCount="5" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11173" PostTypeId="2" ParentId="11172" CreationDate="2019-05-31T06:18:14.463" Score="1" Body="&lt;p&gt;1) If the DDR sets pin as output, the output data pin is a TTL push pull output and otherwise it is a TTL input with pull-up. Reading the data register does give the actual state of the pin, no matter if it is input or output. But as we are talking about TTL outputs, they are extremely weak at sourcing current. As per the datasheet, output high current is 200 to 1000 microamps. The pull-up is 5 kilo-ohms and required to get 5V output, as TTL outputs don't go much above 4V without resistive pull-ups. So even in output mode, the pin state can be easily overdriven externally to ground. But the pull-up alone will not be strong enough to drive another TTL input, so the pin must be set to output to be strong enough to drive another TTL input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Datasheet does not mention anything about open drain or open collector drive. All parameters indicate it is a TTL output when set as output, and weakly pulled up TTL input when set as input.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2019-05-31T17:44:48.033" LastActivityDate="2019-05-31T17:44:48.033" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11174" PostTypeId="2" ParentId="11172" CreationDate="2019-05-31T07:44:13.770" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So what use is it to have these two not-strictly-necessary DDR registers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It simplifies programming: The DDR register acts as a programmable mask to the output of the DR register. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it wasn't there, the 6502 code (similarly for other CPUs) would have to include &lt;code&gt;AND #$xx&lt;/code&gt; commands for every write to DR, or even more complicated constructions for biderectional pins. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's a convenience the hardware offers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also possible that there are actual differences in the electrical characteristics, but that depends on the concrete implementation, and I haven't seen a diagram of the CIA yet (though chances are good someone on the Internet has already decapped it, and made photos).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data sheet says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Port A and B have passive pull-up devices as well as active pull-ups, providing both CMOS and TTL&#xA;  compatibility.  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;so apparently it's not completely straightforward.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2019-05-31T09:16:06.470" LastActivityDate="2019-05-31T09:16:06.470" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11175" PostTypeId="2" ParentId="11172" CreationDate="2019-05-31T07:46:10.060" Score="1" Body="&lt;p&gt;This is a very common configuration for general purpose I/O pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Output Mode&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DDR register switches the output drivers on and off. When a pin's bit is set to 1, the pin drives either high or low, controlled by the PR register. It can source of sink current. The datasheet says minimum 200uA source, 3.2mA sink, on page 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So shorting to GND when the line is driven high will cause at least 200uA to flow through the pin, and the datasheet doesn't actually give an upper limit. Internally it will be flowing through a transistor that will start to warm up and may eventually fail, although the typical drive strength of 1000uA is fairly low so it's probably relatively robust.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Input Mode&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the bit in DDR is 0, the drive circuit is disabled and the pin is only held high by internal pull-ups. The pull-up is a high value resistor that can easily be overcome by external devices and which will not cause high current flow if the pin is driven low externally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The datasheet says that the pull-up resistor is typically 5k, so can &quot;supply&quot; 1mA. That is unusually high, typically pull-up resistors are 10 times that amount, but due to the NMOS technology it needs to be fairly strong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bus Mode&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An additional &quot;mode&quot; is where the PR register is set to 0, and the DDR register is used to toggle the pin's drain capability on and off. That mode is useful for things like shared buses that should only ever be driven low.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is the difference between output drive and the pull-up?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Driving the output high is faster than allowing it to be pulled up through a passive resistor. That allows for higher speeds, at the expense of not being able to drive some TTL loads. The passive pull-up is better for driving TTL but slower.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2019-05-31T08:22:01.250" LastActivityDate="2019-05-31T08:22:01.250" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11176" PostTypeId="2" ParentId="11172" CreationDate="2019-05-31T08:26:18.033" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;the PA0-7 and PB0-7 pins:&lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;always act as inputs, even when the data direction register (DDR) is set to 1 (&quot;output&quot;) for that pin,&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Correct.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol start=&quot;2&quot;&gt;&#xA;  &lt;li&gt;the outputs are open drain, so setting 1 in both the DDR and the Peripheral Data Register (PR) has the same effect as setting 0 in the&#xA;  DDR and any value in the PR.&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not quite. The datasheet says:-&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Port A and B have passive pull-up devices as well as active pull-ups,&#xA;  providing both CMOS and TTL compatibility.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 6526 is an NMOS device, so &lt;em&gt;all&lt;/em&gt; logic gate outputs use pullups to produce the high value. But since the pullup function is provided by an N channel MOSFET, it can only pull up to Vdd - Vgs (which may be 1~2V below Vdd). For CMOS compatibility the output high voltage needs to be close to Vdd, which is why the pullup resistors are included.&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/29eVf.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/29eVf.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;Port Input Pull-up Resistance&lt;/code&gt; is specified as typically 5k&amp;ohm;, which should result in 1mA source current when the pin is pulled to ground. However when the pin is an output the typical source current is specified as 1mA at &gt;2.4V, when the pullup resistor would only be supplying ~0.5mA. This suggests that the active pullups are only enabled in output mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So although setting both the DDR and PR bits to 1 will still result in being able to read a 1 on the 'input', the external device driving it may have to sink more current. OTOH, as an output the increased source current could drive more TTL gates and/or higher capacitive loads.  &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-05-31T08:26:18.033" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11177" PostTypeId="2" ParentId="9187" CreationDate="2019-05-31T10:36:23.110" Score="1" Body="&lt;p&gt;When I was a student in late 90's, I did something like this as a research / hobbyist project. The hardest part was the hardware interface to the phone line which had to be completely galvanically separated from the computer, and that also was tasked with amplifying the analog signal coming from the phone line so that it could be reliably detected by the built-in comparator chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for transmitting data, one could use a Manchester code or simple frequency modulation but the transfer rates would be limited to something like up to 600 baud, I guess.&lt;/p&gt;&#xA;" OwnerUserId="3303" LastActivityDate="2019-05-31T10:36:23.110" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11179" PostTypeId="2" ParentId="11172" CreationDate="2019-06-01T03:18:49.840" Score="1" Body="&lt;p&gt;[This is an attempt to summarize my understanding of the other answers. Feel free to correct this or complain if you think this restatement isn't useful.]&lt;/p&gt;&#xA;&lt;p&gt;The misunderstanding by the OP (me) is that because a specific design (the C64 keyboard/joystick interface) uses this chip in a certain way, using it that way was the intent of the design.&lt;/p&gt;&#xA;&lt;p&gt;The primary reason behind adding internal pull-ups to the 6526 is not to enable (or force) an open-collector style of use, as with the optional I/O pin pull-ups on a modern microcontroller such as an Amtel AVR, though it can support this (as seen above).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;data sheet&lt;/a&gt; points out, in huge letters at the very top, that this is an &lt;a href=&quot;https://en.wikipedia.org/wiki/NMOS_logic&quot; rel=&quot;nofollow noreferrer&quot;&gt;NMOS&lt;/a&gt; device. Earlier answers by &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11176/7208&quot;&gt;Bruce Abbott&lt;/a&gt; and &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11175/7208&quot;&gt;user&lt;/a&gt; and also some comments explain that NMOS when actively driving a pin: a) raises it to &amp;quot;Vdd - Vgs (which may be 1~2V below Vdd)&amp;quot;, so a &lt;a href=&quot;https://en.wikipedia.org/wiki/Logic_level#Logic_voltage_levels&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;high&amp;quot; output level&lt;/a&gt; will be recognised by TTL (+2.4 V min) but not CMOS inputs; and b) will supply only a small amount of current. A consequence of point b) is that, unlike CMOS or newer TTL outputs, it can be safe to short to ground an NMOS output being driven high as current flow will be limited.&lt;/p&gt;&#xA;&lt;p&gt;Adding the internal pull-ups raises the voltage of a high output from the active circuitry, allowing CMOS inputs to recognize a high output from the 6526, and also supplies additional current, allowing the 6526 to drive larger loads (up to 2 TTL loads in this case).&lt;/p&gt;&#xA;&lt;p&gt;So in this design DDR=1,PR=1 (actively driven) is different from DDR=0,PR=x (passively driven by the pullups) because the former will go high a bit faster and drive larger loads.&lt;/p&gt;&#xA;&lt;p&gt;In a design like the C64 keyboard/joystick inputs the two modes may be interchangable because the only load being driven is another input on the 6526, but that would not be the case when you want to present high to a CMOS input or drive high a larger TTL load, where you must use DDR=1,PR=1.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-06-01T03:18:49.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11180" PostTypeId="1" CreationDate="2019-06-01T14:36:22.483" Score="3" ViewCount="363" Body="&lt;p&gt;I'm trying to confirm a vague recollection about the text-to-speech PlainTalk / MacinTalk software shipped with Macintosh computers.  If my memory is right, this would have been around 1994, and based on the &lt;a href=&quot;https://en.wikipedia.org/wiki/PlainTalk#Original_MacInTalk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia description&lt;/a&gt; I think it would have been MacinTalk Pro on a Quadra-series machine.  I remember the &quot;funny&quot; voices like Cellos, Zarvox, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recall that the text-to-speech would occasionally and unexpectedly speak the words &quot;open-apple hold&quot; when reading.  I never knew why or what triggered it. It may have happened when attempting to read garbage text or something else that wasn't really words.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone remember this behavior and know why it happened?  A recording of it would also be interesting, if you have an appropriate machine and can reproduce it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible that I misheard and that &quot;hold&quot; was really some other word, but I am pretty sure about &quot;open-apple&quot;, which was presumably a reference to the open-apple / command key on the keyboard. It's also possible that I am mixing this up with an even earlier version of MacinTalk.&lt;/p&gt;&#xA;" OwnerUserId="4816" LastActivityDate="2019-06-03T19:16:10.700" Title="When and why would MacinTalk say &quot;open-apple hold&quot;?" Tags="&lt;apple-macintosh&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11181" PostTypeId="2" ParentId="10997" CreationDate="2019-06-01T15:40:02.547" Score="4" Body="&lt;p&gt;Stephen Kitt's answers are right, but I'd like to add some context.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The writers of &lt;em&gt;Hackers&lt;/em&gt; lifted a lot of their jargon directly from the &lt;a href=&quot;http://catb.org/jargon/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jargon File&lt;/a&gt;, also known in its print version as &lt;em&gt;The (New) Hacker's Dictionary&lt;/em&gt;.  &lt;a href=&quot;http://www.catb.org/~esr/jargon/oldversions/jarg310.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;Version 3.1.0&lt;/a&gt;, dated 15 Oct 1994, probably corresponds roughly to what the writers were reading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the corresponding entries for the books mentioned in the movie; you can note the similarities to the movie dialogue.  Please note that the Jargon File is in the public domain, so these excerpts are legal.  The curly braces indicate references to other entries in the file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll also note that some of these (e.g. Pink-Shirt and Dragon) would probably not actually have been of much interest to hackers looking to break into systems.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Crayola / Rainbow Books&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;:crayola books: n.  The {rainbow series} of National&#xA;     Computer Security Center (NCSC) computer security standards (see&#xA;     {Orange Book}).  Usage: humorous and/or disparaging.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;:rainbow series: n.  Any of several series of technical&#xA;     manuals distinguished by cover color.  The original rainbow series&#xA;     was the NCSC security manuals (see {Orange Book}, {crayola&#xA;     books}); the term has also been commonly applied to the PostScript&#xA;     reference set (see {Red Book}, {Green Book}, {Blue Book},&#xA;     {White Book}).  Which books are meant by &quot;`the' rainbow&#xA;     series&quot; unqualified is thus dependent on one's local technical&#xA;     culture.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note that apparently, only two of the books mentioned in the dialogue are actually part of the NCSC &quot;crayola / rainbow&quot; series (Orange and Red).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Green Book&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;:Green Book: n.  1. One of the three standard {{PostScript}}&#xA;     references: &quot;PostScript Language Program Design&quot;, bylined&#xA;     `Adobe Systems' (Addison-Wesley, 1988; QA76.73.P67P66 ISBN&#xA;     0-201-14396-8); see also {Red Book}, {Blue Book}, and the&#xA;     {White Book} (sense 2).  2. Informal name for one of the three&#xA;     standard references on SmallTalk: &quot;Smalltalk-80: Bits of&#xA;     History, Words of Advice&quot;, by Glenn Krasner (Addison-Wesley, 1983;&#xA;     QA76.8.S635S58; ISBN 0-201-11669-3) (this, too, is associated with&#xA;     blue and red books).  3. The &quot;X/Open Compatibility Guide&quot;,&#xA;     which defines an international standard {{UNIX}} environment that&#xA;     is a proper superset of POSIX/SVID; also includes descriptions of a&#xA;     standard utility toolkit, systems administrations features, and the&#xA;     like.  This grimoire is taken with particular seriousness in&#xA;     Europe.  See {Purple Book}.  4. The IEEE 1003.1 POSIX Operating&#xA;     Systems Interface standard has been dubbed &quot;The Ugly Green Book&quot;.&#xA;     5. Any of the 1992 standards issued by the CCITT's tenth plenary&#xA;     assembly.  These include, among other things, the X.400 email&#xA;     standard and the Group 1 through 4 fax standards.  See also&#xA;     {{book titles}}.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It seems that #3 was taken for the movie.  The writers mangled the phrase &quot;an international standard UNIX environment&quot; into &quot;international UNIX environments&quot;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Orange Book&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;:Orange Book: n.  The U.S. Government's standards document&#xA;     &quot;Trusted Computer System Evaluation Criteria, DOD standard&#xA;     5200.28-STD, December, 1985&quot; which characterize secure computing&#xA;     architectures and defines levels A1 (most secure) through D&#xA;     (least).  Stock UNIXes are roughly C1, and can be upgraded to about&#xA;     C2 without excessive pain.  See also {{crayola books}}, {{book&#xA;     titles}}.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;Pink-Shirt Book&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;:Pink-Shirt Book:  &quot;The Peter Norton Programmer's Guide&#xA;     to the IBM PC&quot;.  The original cover featured a picture of Peter&#xA;     Norton with a silly smirk on his face, wearing a pink shirt.&#xA;     Perhaps in recognition of this usage, the current edition has a&#xA;     different picture of Norton wearing a pink shirt.  See also&#xA;     {{book titles}}.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;Devil Book&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;:Devil Book: n.  See {daemon book}, the term preferred by&#xA;     its authors.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;:daemon book: n.  &quot;The Design and Implementation of the&#xA;     4.3BSD UNIX Operating System&quot;, by Samuel J. Leffler, Marshall Kirk&#xA;     McKusick, Michael J. Karels, and John S. Quarterman (Addison-Wesley&#xA;     Publishers, 1989, ISBN 0-201-06196-1) -- the standard reference&#xA;     book on the internals of {BSD} UNIX.  So called because the&#xA;     cover has a picture depicting a little devil (a visual play on&#xA;     {daemon}) in sneakers, holding a pitchfork (referring to one of&#xA;     the characteristic features of UNIX, the `fork(2)' system&#xA;     call).  Also known as the {Devil Book}.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Of course it's a daemon, not a devil.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Dragon Book&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;:Dragon Book: n.  The classic text &quot;Compilers:&#xA;     Principles, Techniques and Tools&quot;, by Alfred V. Aho, Ravi Sethi,&#xA;     and Jeffrey D.  Ullman (Addison-Wesley 1986; ISBN 0-201-10088-6),&#xA;     so called because of the cover design featuring a dragon labeled&#xA;     'complexity of compiler design' and a knight bearing the lance&#xA;     'LALR parser generator' among his other trappings.  This one is&#xA;     more specifically known as the 'Red Dragon Book' (1986); an earlier&#xA;     edition, sans Sethi and titled &quot;Principles Of Compiler Design&quot;&#xA;     (Alfred V. Aho and Jeffrey D. Ullman; Addison-Wesley, 1977; ISBN&#xA;     0-201-00022-9), was the 'Green Dragon Book' (1977).  (Also 'New&#xA;     Dragon Book', ;Old Dragon Book'.)  The horsed knight and the&#xA;     Green Dragon were warily eying each other at a distance; now the&#xA;     knight is typing (wearing gauntlets!) at a terminal showing a&#xA;     video-game representation of the Red Dragon's head while the rest&#xA;     of the beast extends back in normal space.  See also {{book&#xA;     titles}}.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;Red Book&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;:Red Book: n.  1. Informal name for one of the three standard&#xA;     references on {{PostScript}} (&quot;PostScript Language Reference&#xA;     Manual&quot;, Adobe Systems (Addison-Wesley, 1985; QA76.73.P67P67; ISBN&#xA;     0-201-10174-2, or the 1990 second edition ISBN 0-201-18127-4); the&#xA;     others are known as the {Green Book}, the {Blue Book}, and&#xA;     the {White Book} (sense 2).  2. Informal name for one of the 3&#xA;     standard references on Smalltalk (&quot;Smalltalk-80: The&#xA;     Interactive Programming Environment&quot; by Adele Goldberg&#xA;     (Addison-Wesley, 1984; QA76.8.S635G638; ISBN 0-201-11372-4); this&#xA;     too is associated with blue and green books).  3. Any of the 1984&#xA;     standards issued by the CCITT eighth plenary assembly.  These&#xA;     include, among other things, the X.400 email spec and the Group 1&#xA;     through 4 fax standards.  4. The new version of the {Green Book}&#xA;     (sense 4) -- IEEE 1003.1-1990, a.k.a ISO 9945-1 -- is (because of&#xA;     the color and the fact that it is printed on A4 paper) known in the&#xA;     U.S.A. as &quot;the Ugly Red Book That Won't Fit On The Shelf&quot; and in&#xA;     Europe as &quot;the Ugly Red Book That's A Sensible Size&quot;.  5. The NSA&#xA;     &quot;Trusted Network Interpretation&quot; companion to the {Orange&#xA;     Book}.  See also {{book titles}}.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The writers here conflated two different red books: #5 (&quot;NSA-trusted networks&quot;) and #4 (&quot;ugly red book that won't fit on the shelf&quot;).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;" OwnerUserId="4816" LastEditorUserId="4816" LastEditDate="2019-06-01T15:49:19.320" LastActivityDate="2019-06-01T15:49:19.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11182" PostTypeId="2" ParentId="11180" CreationDate="2019-06-01T15:55:36.813" Score="6" Body="&lt;p&gt;&lt;em&gt;(Not really a satisfying answer, but too long for a comment)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sounds strange, as &quot;Open-Apple&quot; is Applle II nomenclatura. While it was present on ADB keyboards for use with the IIgs (who had ÂDB before the Mac), The Mac-speak for that key was &quot;Command&quot; and denoted by the &quot;looped square&quot; symbol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, Command was widely used for application specific shortcuts. I just don't have any Mac manual right now to check up if there was some Macintalk specific shortcut. Or if it was reporting a held Command key as part of some accessibility routine which might have been as well. Apple did early on try to incooperate Macintalk to enable blind Mac users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least, there was also the feature of &quot;Talking Alerts&quot; were system messages could be spoken as well.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-03T19:16:10.700" LastActivityDate="2019-06-03T19:16:10.700" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11183" PostTypeId="1" AcceptedAnswerId="11226" CreationDate="2019-06-01T18:32:21.023" Score="7" ViewCount="760" Body="&lt;p&gt;I'm trying to track down a copy of PCW from November 1978. I am looking for an article on benchmarking BASIC. They introduced an 8th program to the 7-program Rugg/Feldman test and I'd like to read the article. Does anyone have a copy? I cannot find it online.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="611" LastEditDate="2020-01-09T12:59:19.597" LastActivityDate="2020-08-15T15:36:05.893" Title="Where can I read the article from Personal Computer World, Nov 1978, which introduced the 8th Rugg/Feldman test program?" Tags="&lt;basic&gt;&lt;benchmarking&gt;&lt;magazine&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11185" PostTypeId="1" AcceptedAnswerId="11186" CreationDate="2019-06-01T19:08:45.480" Score="8" ViewCount="6490" Body="&lt;p&gt;Does the first version of Linux developed by Linus Torvalds have a GUI (not necessarily Iconic but something simpler like Midnight Commander)?&lt;/p&gt;&#xA;" OwnerDisplayName="user13751" LastEditorDisplayName="user13751" LastEditDate="2020-02-01T04:14:50.100" LastActivityDate="2020-02-01T04:14:50.100" Title="Does the first version of Linux developed by Linus Torvalds have a GUI?" Tags="&lt;linux&gt;&lt;gui&gt;" AnswerCount="1" CommentCount="15" FavoriteCount="2" ClosedDate="2019-06-10T21:17:33.660" ContentLicense="CC BY-SA 4.0" />
  <row Id="11186" PostTypeId="2" ParentId="11185" CreationDate="2019-06-01T19:31:29.280" Score="43" Body="&lt;p&gt;Note, Linux is only a kernel, like &lt;code&gt;msdos.sys&lt;/code&gt; in DOS or &lt;code&gt;krnl386.exe&lt;/code&gt; in Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No. It had no GUI, it was purely command line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Linus' initial &lt;a href=&quot;https://groups.google.com/forum/#!msg/comp.os.minix/dlNtH7RRrGA/SwRavCzVE7gJ&quot; rel=&quot;noreferrer&quot;&gt;statement&lt;/a&gt;, roughly with the release of the Linux kernel 0.0.1, we said, he ported bash and gcc to it. He ported probably also the most important GNU tools (make and fileutils (today part of coreutils)).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm doing a (free) operating system (just a hobby, won't be big and&#xA;  professional like gnu) for 386(486) AT clones.  This has been brewing&#xA;  since april, and is starting to get ready.  I'd like any feedback on&#xA;  things people like/dislike in minix, as my OS resembles it somewhat&#xA;  (same physical layout of the file-system (due to practical reasons)&#xA;  among other things).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;I've currently ported bash(1.08) and gcc(1.40), and things seem to&#xA;  work. This implies that I'll get something practical within a few&#xA;  months, and I'd like to know what features most people would want. &#xA;  Any suggestions are welcome, but I won't promise I'll implement them&#xA;  :-)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Note: This initial mail looks a little bit self-advertising and flamish with the eyes of the today, but it is better to not see that post from the current culture.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although X11 was ported to it in a few years, roughly in 1993&lt;sup&gt;1&lt;/sup&gt;. It was a huge work, much bigger than writing the kernel itself, but having the kernel made the X11 port possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The today obsolete SVGAlib appeared roughly also in that year&lt;sup&gt;1&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;sub&gt;I did not find a reference on the net for that, except my remembers.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="129" LastEditorUserId="6794" LastEditDate="2019-06-03T05:35:44.497" LastActivityDate="2019-06-03T05:35:44.497" CommentCount="25" ContentLicense="CC BY-SA 4.0" />
  <row Id="11188" PostTypeId="1" CreationDate="2019-06-01T21:56:24.667" Score="5" ViewCount="690" Body="&lt;p&gt;According to this answer (&lt;em&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7670/11430&quot;&gt;How did multiply instructions work in the various 68ks?&lt;/a&gt;&lt;/em&gt;) the MC68000 can take up to 70 clock cycles to multiply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZX Spectrum Next's FPGA based Z80N has a &lt;code&gt;MUL DE&lt;/code&gt; instruction that always takes 8 T-States.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does it do that? What is the difference between how they work?&lt;/p&gt;&#xA;" OwnerUserId="11430" LastEditorUserId="6659" LastEditDate="2019-06-02T13:17:15.187" LastActivityDate="2019-06-02T13:17:15.187" Title="Z80N multiply compared to MC68000" Tags="&lt;z80&gt;&lt;zx-spectrum&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2019-06-02T11:12:26.997" ContentLicense="CC BY-SA 4.0" />
  <row Id="11189" PostTypeId="2" ParentId="11188" CreationDate="2019-06-01T22:27:14.113" Score="14" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The MC68000 can take up to 70 clock cycles to multiply.&lt;/p&gt;&#xA;&lt;p&gt;The ZX Spectrum Next's Z80N has a &amp;quot;mul de&amp;quot; instruction that always takes 8 T-States.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's 'only' an unsigned 8x8 multiplication, as the 8 bit registers &lt;code&gt;D&lt;/code&gt; and &lt;code&gt;E&lt;/code&gt; will be multiplied and the 16 bit Result stored in &lt;code&gt;DE&lt;/code&gt;, while the 68k multiplications (&lt;code&gt;MULS&lt;/code&gt; being the signed version) is a 16x16 multiplication.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How does it do that? What is the difference between how they work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By the Z80N &lt;code&gt;MUL&lt;/code&gt; being a more simple operation and at the same time throwing much more hardware at it?&lt;/p&gt;&#xA;&lt;p&gt;The 68k &lt;code&gt;MULU&lt;/code&gt;/&lt;code&gt;MULS&lt;/code&gt; is implemented in micro code, as adding a hardware multiplier would have enlarged the CPU quite a lot.&lt;/p&gt;&#xA;&lt;p&gt;The Spectrum Next is build using an Xilinx Spartan-6 FGPA (Type XC6SLX 16), a chip with SEVERAL TEN THOUSAND TIMES or maybe even more than HUNDRED THOUSAND TIMES (depending if the RAM is counted) the transistor count of an 68000 (which itself is already about 7 to 8 times as much as the original Z80). Easy to offer 8x8 bit hardware multipliers with a monster like that.&lt;/p&gt;&#xA;&lt;p&gt;In fact, it's safe to assume that it could be way faster than the 8 T-States, as these seam to be in line with the RMW nature of the instruction. All to make them work out in a comparable relative timing as the real Z80. Given the hardware such an FPGA provides, eZ80 like timing or even lower can be easy archived - ofc, this would make it hard to slow it down to play timing dependant games from a real Spectrum :))&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;It's simply the result of 40 years of &lt;a href=&quot;https://en.wikipedia.org/wiki/Moore%27s_law&quot; rel=&quot;noreferrer&quot;&gt;Moore's Law&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-06-02T12:17:53.380" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11191" PostTypeId="2" ParentId="6421" CreationDate="2019-06-02T00:35:39.083" Score="7" Body="&lt;p&gt;Below, &amp;quot;PR&amp;quot; is the Peripheral Data register at &lt;code&gt;$DC00&lt;/code&gt; and &lt;code&gt;$DC01&lt;/code&gt; for&#xA;I/O ports A and B and &amp;quot;DDR&amp;quot; is the Data Direction Register at &lt;code&gt;$DC02&lt;/code&gt;&#xA;and &lt;code&gt;$DC03&lt;/code&gt; for ports A and B.&lt;/p&gt;&#xA;&lt;p&gt;To deal with this well it's important to understand the schematic on&#xA;page 12 of the &lt;a href=&quot;https://www.retro-kit.co.uk/user/custom/Commodore/C64/manuals/C64C_Service_Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;service manual&lt;/a&gt;, and the &lt;a href=&quot;https://www.c64-wiki.com/wiki/Keyboard#Keyboard_Matrix&quot; rel=&quot;noreferrer&quot;&gt;keyboard matrix&lt;/a&gt;. (The&#xA;keyboard matrix diagram in the service manual is incomplete.)&lt;/p&gt;&#xA;&lt;p&gt;To get the information we need from the schematic, you don't need to&#xA;understand anything special about electronics beyond switches and&#xA;wires being connected together. We see below, for example, that pin&#xA;PA1 on the CIA, COL1 on the keyboard connector, and JOYB1 on control&#xA;port 2 are all connected together; all of these are part of the &amp;quot;COL1&#xA;line.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/S6Px0.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S6Px0.png&quot; alt=&quot;C64 joystick/keyboard schematic&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The joystick and keyboard wiring itself is not shown on the above&#xA;diagram. Joysticks connected to the control ports have normally-open&#xA;switches that short to ground when closed; e.g., pushing up on a&#xA;joystick connected to port 1 would short pin 1 to pin 8 on the&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_joystick_port&quot; rel=&quot;noreferrer&quot;&gt;joystick connector&lt;/a&gt;, thus bringing the level of the ROW0 low.&#xA;The keyboard keys connect COL0-7 lines to ROW0-7 lines as described in&#xA;more detail below.&lt;/p&gt;&#xA;&lt;p&gt;The core concept is that you have a set of sixteen lines, COL0-7 on&#xA;CIA pins PA0-7 and ROW0-7 on CIA pins PB0-7, each of which will have a&#xA;high or low level you can read.&lt;/p&gt;&#xA;&lt;p&gt;The lines default to high when nothing connects them to ground; this&#xA;is done by pull-ups in the CIA. But if any of these lines are&#xA;connected to ground, via a keyboard or joystick switch or a setting both&#xA;DDR=1 and PR=0 in the CIA itself, the line will be at low level,&#xA;always overriding both the default pull-up to high and any CIA setting&#xA;of DDR=1,PR=1 for that pin.&lt;/p&gt;&#xA;&lt;p&gt;There may be multiple connections to ground, making this a &amp;quot;wired-OR&amp;quot;&#xA;system: any one of these connections, if made to ground, will force&#xA;the line low regardless of how any other connection is set. In other&#xA;words, it's not possible for the line to be high if anything on that&#xA;line wants to bring it low.&lt;/p&gt;&#xA;&lt;p&gt;There are three basic ways a line can be brought low:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A joystick switch, connected directly to ground, is closed.&lt;/li&gt;&#xA;&lt;li&gt;A keyboard switch is closed &lt;em&gt;and&lt;/em&gt; one of its two lines (COLn or&#xA;ROWn) is low, bringing the other line low.&lt;/li&gt;&#xA;&lt;li&gt;The CIA has been programmed to bring the line low by setting its&#xA;bit in DDR to &lt;code&gt;1&lt;/code&gt; &lt;strong&gt;and&lt;/strong&gt; setting its bit in the PR to &lt;code&gt;0&lt;/code&gt;. Any&#xA;other setting will not drive the line low (at least not by the&#xA;CIA). In particular, setting both DDR and PR to &lt;code&gt;1&lt;/code&gt; will &lt;em&gt;not&lt;/em&gt;&#xA;necessarily drive the line high; it will just leave it at whatever&#xA;value is a consequence of other settings (high by default, or low&#xA;if anything else connects it to ground).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The wiring for the joysticks is the simplest: each switch (left,&#xA;right, up, down and fire button), when closed, brings low the line to&#xA;which it's connected (COL0-4 for joystick port 2 and ROW0-4 for&#xA;joystick port 1.)&lt;/p&gt;&#xA;&lt;p&gt;The keyboard is slightly more complex. With the exception of the&#xA;RESTORE key (which is handled completely separately by means other&#xA;than the CIA), each key connects one COL line and one ROW line&#xA;together when pressed, as in a &lt;a href=&quot;https://en.wikipedia.org/wiki/Keyboard_matrix_circuit&quot; rel=&quot;noreferrer&quot;&gt;matrix switch&lt;/a&gt;. Here's the matrix&#xA;diagram from my link above:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8z5Tc.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8z5Tc.png&quot; alt=&quot;Comodore 64 keyboard matrix&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Thus, pressing a key will do do nothing at all unless something&#xA;(hopefully you, by programming the CIA) has brought at least one COLn&#xA;or ROWn line low, in which case a read will show corresponding ROWn or&#xA;COLn lines as low for any pressed keys connecting the two. This&#xA;includes the situation described in your link &lt;a href=&quot;http://codebase64.org/doku.php?id=base:scanning_the_keyboard_the_correct_and_non_kernal_way&quot; rel=&quot;noreferrer&quot;&gt;Scanning the Keyboard&#xA;the correct and non-KERNAL way&lt;/a&gt; where the path goes through&#xA;multiple keys, e.g., grounding COL2 and pressing A and S to give a&#xA;path COL2→&lt;code&gt;A&lt;/code&gt;→ROW1→&lt;code&gt;S&lt;/code&gt;→COL5  that brings COL5 low.)&lt;/p&gt;&#xA;&lt;p&gt;When scanning the keyboard, there's no particular reason as far as I&#xA;know to choose to force COLn lines low and read the ROWn lines or vice&#xA;versa. In fact, doing it both ways might even help you to do more&#xA;reliable reads. (I provide a example of this below.)&lt;/p&gt;&#xA;&lt;p&gt;Since you've got custom code to read the keyboard anyway, you should&#xA;combine it with the code to read the joystick. This will allow you to&#xA;reliably read both to the degree the hardware design allows, let you&#xA;use your understanding of the above to design your controls to avoid&#xA;conflicts, and also probably run a bit faster.&lt;/p&gt;&#xA;&lt;p&gt;Since presumably no code other than your own will be touching the CIA&#xA;registers, you can set up DDRA and DDRB once when your game starts and&#xA;never touch them again. I'd just set them both to &lt;code&gt;$FF&lt;/code&gt; when you&#xA;initialize your game so that you never need write them again. As&#xA;explained above, so long as PRA and PRB are are also set all to &lt;code&gt;$FF&lt;/code&gt;,&#xA;this will have the same effect as if DDRA and DDRB are both &lt;code&gt;$00&lt;/code&gt;; the&#xA;CIA will not force any lines low.&lt;/p&gt;&#xA;&lt;p&gt;When you scan, first write &lt;code&gt;$FF&lt;/code&gt; to PRA and PRB and then read them.&#xA;This will tell you both which joystick switches are closed for each&#xA;joystick &lt;em&gt;and&lt;/em&gt; tell you which keyboard columns and/or rows you will&#xA;not be able to scan.&lt;/p&gt;&#xA;&lt;p&gt;What you do next depends on whether you're allowing 1 or 2 joysticks,&#xA;what keyboard keys you're using, and how sophisticated you want to&#xA;get. The easiest situation is if you ignore the keyboard when either&#xA;player is pressing the joystick (i.e., player or players have to let&#xA;go the joystick(s) to enter a keyboard command), which means at this&#xA;point you're done.&lt;/p&gt;&#xA;&lt;p&gt;But let's say you want to use both at the same time because you have a&#xA;two-player game. In this case you could put player one using a&#xA;joystick on control port 2 and have player two use the keyboard.&#xA;Joystick 1 is connected to COL0-4, so if you limit player 2 to keys on&#xA;COL5-7 there can never be interference between the two. You could for&#xA;example use &lt;code&gt;RUN/STOP&lt;/code&gt;/&lt;code&gt;C=&lt;/code&gt; for up/down, &lt;code&gt;:&lt;/code&gt;/&lt;code&gt;=&lt;/code&gt; for left/right, and&#xA;spacebar for fire. In this case your keyboard scan would write PRA to&#xA;bring low in turn:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;COL7, checking for ROW7 (&lt;code&gt;RUN/STOP&lt;/code&gt;), ROW5 (&lt;code&gt;C=&lt;/code&gt;) and ROW4 (spacebar);&lt;/li&gt;&#xA;&lt;li&gt;COL6, checking for &lt;code&gt;=&lt;/code&gt;; then&lt;/li&gt;&#xA;&lt;li&gt;COL5, checking for &lt;code&gt;:&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Another variation would be to use the keyboard to provide extra&#xA;controls in a two-player, two-joystick game. If you use left and right&#xA;&lt;code&gt;SHIFT&lt;/code&gt; as a second action (hyperspace?) for each player, you'd first&#xA;scan the joysticks by writing &lt;code&gt;$FF&lt;/code&gt; to PRA and PRB as above and&#xA;reading PRA (joystick 2) and PRB (joystick 1), as above. Then you&#xA;bring low in turn:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;COL1, checking ROW7  to see if left &lt;code&gt;SHIFT&lt;/code&gt; is pressed; and&lt;/li&gt;&#xA;&lt;li&gt;ROW4, checking COL6 to see if right &lt;code&gt;SHIFT&lt;/code&gt; is pressed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Actually, you don't even need to do the write to bring low COL1 if&#xA;joystick 2 is currently pushed down, or ROW4 if joystick 1's fire&#xA;button is currently pressed, but the logic for those special cases is&#xA;probably longer and slower than just doing the write. There might be&#xA;some situation in which this idea could be used, though, such as&#xA;&lt;code&gt;SPACE&lt;/code&gt; modifying the action of the fire button on joystick 1.&lt;/p&gt;&#xA;&lt;p&gt;There are endless variations of this; you just need to use the matrix&#xA;information to figure out what's possible and which switches/keys&#xA;interfere with each other.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-06-02T06:50:00.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11192" PostTypeId="1" AcceptedAnswerId="11193" CreationDate="2019-06-02T00:55:00.573" Score="14" ViewCount="2501" Body="&lt;p&gt;What LISP or LISP-like language compilers and interpreters were available for 8-bit microcomputers? Criteria for &quot;8-bit&quot; include that it should certainly run and execute non-trivial programs given no more than 64 KB of RAM, and ideally it should run in much smaller amounts of RAM or RAM+ROM, the just as the common 8-bit BASICs do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In answers, the following information would be interesting to me:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pricing information, if it was commercial software.&lt;/li&gt;&#xA;&lt;li&gt;Historical and current availability of source and binaries.&lt;/li&gt;&#xA;&lt;li&gt;The dialect of LISP (LISP1.5, MACLISP, Interlisp, Scheme, etc.) that the implementation is most similar to, if any.&lt;/li&gt;&#xA;&lt;li&gt;Anything that's unusual about the language (special features, significant differences from a standard dialect it otherwise adheres to, etc.)&lt;/li&gt;&#xA;&lt;li&gt;What kind of editor it provided, or what editors were expected to be used if none was.&lt;/li&gt;&#xA;&lt;li&gt;Memory and offline storage usage.&lt;/li&gt;&#xA;&lt;li&gt;Any interesting details about how it was implemented, or links to such.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm especially interested in implementations that have been used to write substantial programs (or large parts of them) and/or commercial software, though of course information about even &quot;toy&quot; interpreters is also welcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're not sure if a language is &quot;LISP-like,&quot; one criterion you could consider is whether functions passed to other functions (as in &lt;code&gt;map&lt;/code&gt;) is an easy and common idiom in it.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-21T05:59:24.580" LastActivityDate="2019-09-21T05:59:24.580" Title="What LISP compilers and interpreters were available for 8-bit machines?" Tags="&lt;history&gt;&lt;8-bit-microcomputers&gt;&lt;lisp&gt;" AnswerCount="3" CommentCount="14" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11193" PostTypeId="2" ParentId="11192" CreationDate="2019-06-02T01:21:56.720" Score="20" Body="&lt;p&gt;To volunteer a few:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Acornsoft_LISP&quot; rel=&quot;noreferrer&quot;&gt;Acornsoft LISP&lt;/a&gt;. First released in 1982 on tape, disk and ROM chip for the BBC Micro and rereleased as a cartridge for the Acorn Electron in 1984; possibly related to the Apple II's Owl LISP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://blog.funcall.org//lisp/2015/10/30/zx-spectrum-lisp/&quot; rel=&quot;noreferrer&quot;&gt;SpecLISP&lt;/a&gt;. Released in 1983 for the ZX Spectrum, a subset of Stanford LISP. It wasn't well-documented at the time, so is a little obscure. Includes Logo-style drawing functions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.edm2.com/index.php/MuLISP&quot; rel=&quot;noreferrer&quot;&gt;Microsoft LISP&lt;/a&gt;. A CP/M product originally, later ported to machines including the 8-bit Apple II and TRS-80. Not just an interpreter, also a compiler (at least for the two 8080/z80 platforms).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://lemonodor.com/archives/2007/11/microlisp.html&quot; rel=&quot;noreferrer&quot;&gt;Micro-LISP&lt;/a&gt;. A public domain LISP interpreter from 1986 for the Commodore 64 by Nick Vrtis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://translate.google.com/translate?sl=auto&amp;amp;tl=en&amp;amp;u=https%3A%2F%2Fwww.c64-wiki.de%2Fwiki%2FLISP_64&quot; rel=&quot;noreferrer&quot;&gt;LISP 64&lt;/a&gt;. Another LISP interpreter from 1986 for the Commodore 64 (author: Peter Feldtmann).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://atariwiki.org/wiki/Wiki.jsp?page=Lisp&quot; rel=&quot;noreferrer&quot;&gt;Inter-LISP/65&lt;/a&gt; for Atari 8-bit computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.flownet.com/ron/plisp.html&quot; rel=&quot;noreferrer&quot;&gt;PLisp&lt;/a&gt; for the Apple II.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="7208" LastEditDate="2019-06-03T06:10:57.877" LastActivityDate="2019-06-03T06:10:57.877" CommentCount="6" CommunityOwnedDate="2019-06-02T01:21:56.720" ContentLicense="CC BY-SA 4.0" />
  <row Id="11194" PostTypeId="2" ParentId="8732" CreationDate="2019-06-02T01:33:27.967" Score="2" Body="&lt;p&gt;It depends on the particular terminal of course, but low-end terminals were available quite cheaply. An excellent way to find prices for any particular year is to look through the advertisements in old &lt;a href=&quot;https://archive.org/details/computermagazines&quot; rel=&quot;nofollow noreferrer&quot;&gt;computer magazines on archive.org&lt;/a&gt;. You can restrict search by year, for example &lt;a href=&quot;https://archive.org/details/computermagazines?and%5B%5D=year%3A%221980%22&amp;amp;sort=-downloads&quot; rel=&quot;nofollow noreferrer&quot;&gt;to issues from 1980&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1980, the Southwest Technical Products offered the reasonably fully-featured CT-82 Intelligent Terminal for $795: &lt;a href=&quot;https://archive.org/details/byte-magazine-1980-06/page/n1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Byte 1980-06 inside cover&lt;/a&gt;. On &lt;a href=&quot;https://archive.org/details/byte-magazine-1980-06/page/n290&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 284&lt;/a&gt; of the same issue you can see Advanced Computer Products selling various models of Hazeltine (a major brand at the time) terminals for $750-$1500.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But even years before this, cheaper, though less fully featured, terminals were available. In 1977, Southwest Technical Products was advertising its CT-64 terminal and monitor for $500. &lt;a href=&quot;https://archive.org/details/kilobaudmagazine-1977-10/page/n1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kilobaud magazine 1977-10 inside cover&lt;/a&gt;. This had only 64-column lines, however, rather than the 80 columns common on higher-end terminals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CT-64 was actually a fully assembled and improved version of the &lt;a href=&quot;https://en.wikipedia.org/wiki/TV_Typewriter#TVT_II_-_CT-1024_Terminal&quot; rel=&quot;nofollow noreferrer&quot;&gt;TV Typewriter II&lt;/a&gt; or CT-1024 kit, which was $230-$260 &lt;a href=&quot;http://www.swtpc.com/mholley/PopularElectronics/Jan1975/PE_Jan_1975_pg32.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Popular Electronics 1975-01 p.32&lt;/a&gt;, but that doesn't include the display and of course it's unlikely a business user would want to assemble their own terminal from parts.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-06-02T03:09:43.747" LastActivityDate="2019-06-02T03:09:43.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11195" PostTypeId="1" AcceptedAnswerId="11196" CreationDate="2019-06-02T02:21:37.863" Score="0" ViewCount="852" Body="&lt;p&gt;As I know, shortly after Linus Torvalds liberated the Linux kernel it was implemented in GNU operating system which is since then known as GNU/Linux or GNU+Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;https://en.wikipedia.org/wiki/GNU&quot; rel=&quot;nofollow noreferrer&quot;&gt;GNU article&lt;/a&gt; in Wikipedia I understand the GNU OS kernel is Hurd.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was Hurd created as a modification of Torvalds's Linux kernel?&lt;/p&gt;&#xA;" OwnerDisplayName="user13751" LastEditorUserId="4025" LastEditDate="2019-06-02T04:19:31.627" LastActivityDate="2019-06-06T16:48:09.757" Title="Was Hurd kernel created as a modification of Linux kernel?" Tags="&lt;linux&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11196" PostTypeId="2" ParentId="11195" CreationDate="2019-06-02T03:44:08.537" Score="14" Body="&lt;p&gt;No. The Hurd was a separate effort, using a microkernel design. Some computer scientists believe this to have more appealing properties than the pragmatic monolithic design of the Linux kernel, but it is also more difficult to implement, which is partly why the Hurd was not delivered in a timely fashion and the world ended up going with Linux.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-06-02T03:44:08.537" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11197" PostTypeId="2" ParentId="11195" CreationDate="2019-06-02T07:39:05.213" Score="8" Body="&lt;p&gt;No, Hurd kernel had been in developement for a few years before Linux kernel was released.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-06-02T07:39:05.213" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11198" PostTypeId="2" ParentId="11192" CreationDate="2019-06-02T13:10:26.407" Score="6" Body="&lt;p&gt;The following answer isn't strictly speaking a version of LISP.  That's why I didn't add it to the community answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Z-machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZIL&lt;/a&gt;, the Zork Implementational Language,  was intended to allow interactive fiction games to run on desktops. ZIL was derived from &lt;a href=&quot;https://en.wikipedia.org/wiki/MDL_(programming_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;MDL&lt;/a&gt; which, in turn, was derived from LISP.  But ZIL wasn't really a full blown Lisp.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Infocom's original compiler for ZIL, Zorch, was never made publicly available, but there is also an open source compiler, &lt;a href=&quot;https://bitbucket.org/jmcgrew/zilf/wiki/Home&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZILF&lt;/a&gt;, which includes a &lt;a href=&quot;https://bitbucket.org/jmcgrew/zilf/src/default/doc/ZIL%20Language%20Guide.odt&quot; rel=&quot;nofollow noreferrer&quot;&gt;incomplete ZIL language description&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="7208" LastEditDate="2019-06-02T15:40:52.690" LastActivityDate="2019-06-02T15:40:52.690" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11199" PostTypeId="1" AcceptedAnswerId="11200" CreationDate="2019-06-02T20:08:46.267" Score="16" ViewCount="3584" Body="&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=kb2T8hWRu8g&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt;, Richard Stallman claimed that Linus Torvalds created Linux kernel as a proprietary software and then liberated it ('liberated' is the term Stallman used).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming so, when was the Linux kernel made libre by Linus Torvalds?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Linux&quot; rel=&quot;nofollow noreferrer&quot;&gt;Linux article&lt;/a&gt; on English Wikipedia says as of now:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Torvalds initiated a switch from his original license, which&#xA;  prohibited commercial redistribution, to the GNU GPL.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;but the source doesn't mention a specific year like 1992.&lt;/p&gt;&#xA;" OwnerDisplayName="user13751" LastEditorUserId="7607" LastEditDate="2019-06-05T19:20:32.553" LastActivityDate="2019-06-05T19:20:32.553" Title="When did Linux kernel become libre software?" Tags="&lt;history&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ClosedDate="2019-06-03T23:41:02.883" ContentLicense="CC BY-SA 4.0" />
  <row Id="11200" PostTypeId="2" ParentId="11199" CreationDate="2019-06-02T20:15:09.723" Score="24" Body="&lt;p&gt;February 1992 it changed to GPL license.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Linux_kernel&quot; rel=&quot;noreferrer&quot;&gt;Change to GPL is notified in 0.12 release, February 1992&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Linux&quot; rel=&quot;noreferrer&quot;&gt;First GPL release 0.99, December 1992&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2019-06-03T18:17:48.967" LastActivityDate="2019-06-03T18:17:48.967" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11201" PostTypeId="1" CreationDate="2019-06-02T21:11:47.997" Score="7" ViewCount="771" Body="&lt;p&gt;Edit:&#xA;Given the many different versions of the game Pong, which version allowed you to accumulate the highest score before the game would crash, reset, or otherwise not just give you one more point?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Original post...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This screen capture made me think what the highest achievable PONG score really was? That is, on any system, what is the highest countable/displayable score before the counter would overflow and either wrap or crash the system?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Tu38P.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Tu38P.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This screen capture is not &lt;em&gt;exactly&lt;/em&gt; Photoshopped, but it is fictional: it's from the Pixar/Disney movie &quot;&lt;a href=&quot;https://www.imdb.com/title/tt0910970/&quot; rel=&quot;noreferrer&quot;&gt;WALL·E&lt;/a&gt;&quot;. Here's a &lt;a href=&quot;https://www.youtube.com/watch?v=a6XNtvQopI0&quot; rel=&quot;noreferrer&quot;&gt;YouTube clip&lt;/a&gt; of the scene I took the capture from.&lt;/li&gt;&#xA;&lt;li&gt;Why the close votes? Is it not allowed to ask about &quot;any/all&quot; Pong systems?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="832" LastEditorUserId="6659" LastEditDate="2019-06-19T13:12:13.627" LastActivityDate="2021-01-07T15:53:01.233" Title="When did various PONG systems overflow/crash due to points?" Tags="&lt;history&gt;&lt;gaming&gt;&lt;pong&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11203" PostTypeId="1" AcceptedAnswerId="11205" CreationDate="2019-06-03T00:15:57.480" Score="1" ViewCount="567" Body="&lt;p&gt;I desire to know what was the very first Linux-kernel based operating system, what we can call today a &quot;distribution&quot; even if the term wasn't used then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Linux_distribution#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki article&lt;/a&gt; doesn't give a clear answer, as of my understanding. &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Linux_distributions&quot; rel=&quot;nofollow noreferrer&quot;&gt;This Wiki list of distros&lt;/a&gt; doesn't have a release date column in tables. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://itsfoss.com/earliest-linux-distros/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This article&lt;/a&gt;, if I understand it correctly, says it was Linux 0.12 by Hj Lu&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found no clear answer in some other discussions.&lt;/p&gt;&#xA;" OwnerDisplayName="user13751" LastActivityDate="2019-06-03T04:33:09.287" Title="What was the first Linux distribution?" Tags="&lt;linux&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11204" PostTypeId="2" ParentId="11192" CreationDate="2019-06-03T01:24:23.830" Score="7" Body="&lt;p&gt;There was a &lt;a href=&quot;https://atariwiki.org/wiki/Wiki.jsp?page=Lisp&quot; rel=&quot;noreferrer&quot;&gt;variant of InterLisp for Atari&lt;/a&gt; 8-bit systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was &lt;a href=&quot;http://www.flownet.com/ron/plisp.html&quot; rel=&quot;noreferrer&quot;&gt;Gnosis P-Lisp for Apple II&lt;/a&gt;, which was very simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were a number of Lisp implementations for Z-80 running CP/M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, straddling the 8/16-bit divide, there was Golden Common Lisp for IBM PC, which ran on 8088 (and runs nicely on my HP 95LX as a result) but actually was a real Common Lisp implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course the various 16 bit systems got more “real” Lisp implementations, especially as memory available grew.&lt;/p&gt;&#xA;" OwnerUserId="4496" LastActivityDate="2019-06-03T01:24:23.830" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11205" PostTypeId="2" ParentId="11203" CreationDate="2019-06-03T04:15:37.220" Score="6" Body="&lt;p&gt;The first Linux distribution was &lt;a href=&quot;https://en.wikipedia.org/wiki/MCC_Interim_Linux&quot; rel=&quot;noreferrer&quot;&gt;MCC Interim Linux&lt;/a&gt;, released in February 1992. It included a menu-driven installation tool, and provided the Bash shell, various text editors, the GNU utilities, AWK, GCC/G++, Kermit, etc. Before that, users bootstrapped their systems using boot and root floppy images provided by HJ Lu, but they’re typically not considered as distributions (they provide a way to get started, not a complete set of software).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://unix.stackexchange.com/q/461113/86440&quot;&gt;this Unix.SE question&lt;/a&gt; for a detailed discussion of the early use of Linux.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-06-03T04:33:09.287" LastActivityDate="2019-06-03T04:33:09.287" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11206" PostTypeId="1" CreationDate="2019-06-03T14:53:06.473" Score="8" ViewCount="1998" Body="&lt;p&gt;Was the output of the C64 SID chip 8 bit sound?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that SID is not sample based, but instead generate its sound using sine waves and white noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is it correct to say that the audio generation part was really analog, and thus even talking about sound bits really make no sense?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or maybe what I am really asking is: If I have an 8 bit, 44 kHz sample based audio chip, could that chip generate audio which could not be distinguished from a real SID chip?&lt;/p&gt;&#xA;" OwnerUserId="9153" LastEditorUserId="11916" LastEditDate="2020-01-24T06:14:17.463" LastActivityDate="2020-03-18T16:52:26.627" Title="Was the output of the C64 SID chip 8 bit sound?" Tags="&lt;commodore-64&gt;&lt;sound&gt;&lt;sid&gt;" AnswerCount="5" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11207" PostTypeId="2" ParentId="11201" CreationDate="2019-06-03T15:03:16.863" Score="1" Body="&lt;p&gt;There are many versions of Pong.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Arcade version seems to be limited to scores &lt;strong&gt;&amp;lt;20&lt;/strong&gt;, as suggested by &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/8/8f/Atari_Pong_arcade_game_front.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this image&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;One version on the site of &lt;a href=&quot;http://searle.hostei.com/grant/TVPong/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Grant's vintage TV game (pong) collection&lt;/a&gt; shows a game where score is tracked by placing a marker on a physical board, and there are &lt;strong&gt;15&lt;/strong&gt; positions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Please edit this answer to add more games&lt;/strong&gt; (and preferably sorted by maximum score capability)&lt;/p&gt;&#xA;" OwnerUserId="832" LastActivityDate="2019-06-03T15:03:16.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11208" PostTypeId="2" ParentId="11201" CreationDate="2019-06-03T15:04:09.970" Score="13" Body="&lt;p&gt;The original Pong&amp;reg; brand arcade machine used a BCD counter for each player along with an extra flip flop for tens.  The machine would end the game at either 11 or 15 points (operator-selectable) but if that were bypassed it could count up to 19.  The General Instruments chip used in the vast majority of electronic tennis machines would play up to 15 points.  When the original machine was created, there was a common off-the-shelf chip to convert a 4-bit binary number 0-9 into a seven-segment pattern, but the segment patterns for inputs 1010-1111 weren't useful digits.  There were no common chips that would display those values as a repeat of digits 0-9.  Since the GI was a custom chip, however, there was no difficulty having a 4x8 ROM which could convert four-bit scores into segment patterns for the numbers 0-15 directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would expect that many microprocessor-based versions of the game would have kept the score as two BCD digits, which would allow values up to 99.  I am unaware of any having made any provision for scores beyond 99, and doubt that any would have been designed in a way that could do so without explicit provision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, in the original machine, the BCD-to-segment chip is used twice for each player to generate tens and ones digits, but when showing the tens position the bottom bit is forced high while the upper three bits are set to the inverted state of the tens bit.  Since the BCD-to-segment chip doesn't activate any segments for an input value of 1111, the effect is that the tens digit is 1111 (blank) until a player scores ten points, and then 0001 after that.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-06-03T15:04:09.970" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11209" PostTypeId="2" ParentId="11206" CreationDate="2019-06-03T15:15:08.423" Score="14" Body="&lt;p&gt;The output is analog, not 8-bit. Each channel has an 8-bit DAC inside to generate the selectable waveforms (sine was not one of them, square/pulse wave, triangle and saw). There were also volume and envelopes, so even at this point the audio can't faithfully be represented at 8 bits. There is also an analog filter through which channels can be sent. The digital DDS oscillators in the chip work at approximately 1 MHz so the DAC output could update at the precision of 1MHz clock. So interesting downsampling or band-limited step interpolation is needed to reproduce or render the output to resemble original audio. 8 bits at 44 kHz would be pushing it.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11446" LastEditDate="2020-01-21T06:19:44.907" LastActivityDate="2020-01-21T06:19:44.907" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="11210" PostTypeId="1" AcceptedAnswerId="11213" CreationDate="2019-06-03T17:07:46.420" Score="18" ViewCount="8133" Body="&lt;p&gt;The Sega Genesis / Mega Drive's main CPU, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68000_series&quot; rel=&quot;noreferrer&quot;&gt;Motorola 68000&lt;/a&gt;, was a 32-bit processor. Couldn't Sega have marketed the console as a 32-bit device? Or is there a technical distinction about how the 68000 was used in the Genesis that makes the system, as a whole, 16-bit?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My best guesses are that it has something to do with word size (the 68000 can address bytes, 16-bit words, or 32-bit long words) or the size of the buses inside the console. Still, I would think that Sega's marketing team would've chosen the most beneficial number when looking at the &lt;a href=&quot;https://segaretro.org/Sega_Mega_Drive/Technical_specifications&quot; rel=&quot;noreferrer&quot;&gt;technical specs&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="12296" LastEditorUserId="12296" LastEditDate="2019-06-03T17:30:39.173" LastActivityDate="2019-06-04T12:59:07.577" Title="Why was the Sega Genesis marketed as a 16-bit console?" Tags="&lt;sega-genesis&gt;&lt;terminology&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11211" PostTypeId="2" ParentId="11206" CreationDate="2019-06-03T17:33:56.340" Score="9" Body="&lt;h2&gt;Part 1:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was the output of the C64 SID chip 8 bit sound?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Short Answer: yes&lt;/p&gt;&#xA;&lt;p&gt;The term 8-bit sound is generally not related to any sample size or speed, but to describe the sound 'qualities' of the 8-bit generation of consoles/computers.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Part 2:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So is it correct to say that the audio generation part was really analog,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Each and every sound generation is in the end analogue. A (single) speaker can only produce a single, one-dimensional output over time.&lt;/p&gt;&#xA;&lt;p&gt;The difference between using an DAC with a fixed feeding rate and mixing specialized circuits (like with the SID) is about the amount of data needed to feed either.&lt;/p&gt;&#xA;&lt;p&gt;Feeding an 8-bit DAC will need one byte per step, so 44 kByte at 44 kHz. A SID based sound system may need only a single byte for the same duration. That is if only a single symmetric frequency is to be outputted. To produce a more complex output, more data is needed. Notable game sounds can already be generated with less than 100 bytes per second.&lt;/p&gt;&#xA;&lt;p&gt;Sounds like a compression algorithm, doesn't it? And that's the whole idea here. It's more like playing an instrument(*1) than outputting plain analogue levels. Here as well the output is generated using predefined elements, in effect saving much of the rather slim bandwith 8 bit machines had (*2).&lt;/p&gt;&#xA;&lt;p&gt;Viewed from system design having a sound chip where only sound elements have to be set and manipulated is much like having video controllers with programmable functions (CTIA) and/or sprites (VIC). Instead of having the CPU directly manipulating the bitmap data to create an output image, the image is composed from components which in turn need way less bandwith to be manipulates.&lt;/p&gt;&#xA;&lt;p&gt;That design view also gives why it got out of fashion - with CPUs fast enough to manipulate bitmap data just in time for output and fast enough to prepare sound data fast enough for straight DAC output, the need for specialized chips vanished.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Part 3:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or maybe what I am really asking is:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which &lt;em&gt;is&lt;/em&gt; a different question.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If I have an 8 bit, 44 kHz sample based audio chip, could that chip generate audio which could not be distinguished from a real SID chip?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Basically &lt;strong&gt;yes&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Quality will be the very same as a SID output recorded at 44 kHz - much like a CD with SID-music.&lt;/p&gt;&#xA;&lt;p&gt;The issue here is, as shown, not some 44 kHz DAC, but a CPU able (aka fast enough) to compute (emulate) the various elements of a SID in time - if not going for calculating it ahead of time (aka batch) that is.&lt;/p&gt;&#xA;&lt;p&gt;With modern chips/software it's for most parts straight foreward to build a simple SID-alike system. In fact, the web browser your reading this in is already all you need - at least if it supports &lt;a href=&quot;https://www.w3.org/TR/webaudio/&quot; rel=&quot;noreferrer&quot;&gt;WebAudio&lt;/a&gt; (*3).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Which is BTW the idea MIDI is based on. Here sound data is encoded as start stop condition for instruments (simplified). As result a rather narrow 31.25 kBit/s (~8 KiByte/s) can be used to produce a whole orchestras sound.&lt;/p&gt;&#xA;&lt;p&gt;*2 - For example the available bandwith for data transport of a 6502 running at 1 MHz is at maximum less 100 KiByte/s. That's for a copy loop, with some processing is gets way lower. Similar for other CPUs of the same time.&lt;/p&gt;&#xA;&lt;p&gt;*3 -  WebAudio builds its sound generation pipeline from blocks that can be configured to work similar to the SID pipeline. All needed are a few lines JS to configure and link up sound sources, mixers and filters. Of course, this will be only a first iteration. Really remodelling all non linearities/quirks of teh SID will take a lot more.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-24T12:16:16.750" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11212" PostTypeId="2" ParentId="11210" CreationDate="2019-06-03T17:37:16.323" Score="9" Body="&lt;p&gt;It's usually the width of the &lt;em&gt;system data bus&lt;/em&gt; that determines the &quot;bitted-ness&quot; used to describe the &lt;em&gt;system&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the Motorola 68k CPU used as a component in the Sega &lt;em&gt;system&lt;/em&gt; certainly has some internal 32-bit capabilities, most notably the width of the register page, and is designed for upward compatibility with full 32-bit CPUs (like the 68020), the reality is that the 68000 only possesses a 16-bit data bus. Likewise, the Genesis system data bus is also 16 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, at the time of the introduction of the Genesis, it was very competitive with the technology in other game consoles. So, there was no need for Sega to try to bend the truth with some over-zealous marketing scheme attempting to brand their new console as 32-bit capable. Instead, and only later, did they get into a bit of technical hyperbole with their marketing of &lt;a href=&quot;https://en.wikipedia.org/wiki/Sega_Genesis#North_American_sales_and_marketing&quot; rel=&quot;noreferrer&quot;&gt;&quot;Blast Processing&quot;&lt;/a&gt; aimed at the SNES.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-06-03T21:02:25.913" LastActivityDate="2019-06-03T21:02:25.913" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11213" PostTypeId="2" ParentId="11210" CreationDate="2019-06-03T18:12:56.313" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;the Motorola 68000, was a 32-bit processor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'd say 16 Bit - likewise Motorola did (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bitness of a processor is and always will be up for discussion, as various features may not operate at the same size. An 8088 can be (an has been) called an 8-bit CPU as well as 16-bit. Similar the 68000 with its 32-bit registers but 16-bit bus. Beside data bus and register size, the ALU can as well be used (*2). Last but not least operand size may be a valid criteria (*3).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Couldn't Sega have marketed the console as a 32-bit device?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, the could - but there would have been no gain. At the time the Genesis was introduced (1988) there was no race for 'more bits' especially not in the general public. The prior generation wasn't marketed as 8-bit systems. That's a label that got only retroactive assigned when 16 Bit systems became popular and marketed as such.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was about setting a undoubtedly new mark, making everything else look outdated. The second half of the 1980s was also the time when bitness was used to distinguish the 'new' and 'better' computers with the very same label. Atari ST, Commodore Amiga, as well as 286 PCs, where marketed as 16 Bit machines, so the label was already promoted and present in non-geek-minds (*4) as a sign for being the better choice. Hooking up to an established label is almost always better than trying to build a brand from scratch with all new attributes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;Calling it 16-bit (which it undeniable is) was the best bet for Sega marketing&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Sidnote: Atari's attempt to sell the Jaguar in 1994 as 64-bit console might as well have worked less than expected for the same reason: Consumers just got used to consoled being called 16-bit and having 32-bit coming up. Jumping too far ahead doesn't work well.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The same way next to all manufacturers of 68000 machines did call their products 16-bit computers - or 16/32 as most.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Making the Z80 a 4-bit CPU :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Thus the (16-bBit) Z8000 could be rightfully called a 64-bit CPU :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Like always, dad has to pay for a new console and he needs as well a reason to crank out more paper slices than for some other game console - having Sonic didn't ring a bell.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-03T23:01:05.103" LastActivityDate="2019-06-03T23:01:05.103" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11214" PostTypeId="2" ParentId="11210" CreationDate="2019-06-03T18:36:42.263" Score="26" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;... the Motorola 68000, was a 32-bit processor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As already written in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11213/10234&quot;&gt;Raffzahn's answer&lt;/a&gt;, Motorola itself said that it is a 16-bit processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And as far as I know, the reason is not the external 16-bit bus but the inner architecture of the 68000:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 68000 only had a 16-bit ALU, which means that it could only perform 16-bit operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU executed 32-bit instructions (like &lt;code&gt;add.l&lt;/code&gt;) by performing two 16-bit operations internally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This 16-bit ALU is a major difference to CPUs like the 386SX that also only had an external 16-bit data bus but a real 32-bit ALU - and therefore were called 32-bit processors by the manufacturers.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="10234" LastEditDate="2019-06-04T12:59:07.577" LastActivityDate="2019-06-04T12:59:07.577" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11215" PostTypeId="2" ParentId="11180" CreationDate="2019-06-03T18:49:17.360" Score="2" Body="&lt;p&gt;I attempted to reproduce this, using a Mac Plus with System 6.0.8, and a Power Macintosh with MacOS 9.  I tried the MacinTalk desk accessory, KeyCaps, and TeachText/SimpleText programs.  I also looked through all of the Control Panels for a relevant option.  Talking alerts were an option in MacOS 9, and were tried as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although I was able to get both computers to speak text after it was typed, &lt;strong&gt;&lt;em&gt;neither computer would speak keys as they are typed&lt;/em&gt;&lt;/strong&gt;, much less a modifier key or specifically &quot;open-Apple&quot;.  Perhaps you are thinking of something for the Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Raffzahn is correct that &quot;open-Apple&quot; is Apple II terminology, not Macintosh.  It's not even a character in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Mac_OS_Roman&quot; rel=&quot;nofollow noreferrer&quot;&gt;MacOS Roman font&lt;/a&gt;, even though the closed-Apple is.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-06-03T18:49:17.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11216" PostTypeId="1" CreationDate="2019-06-03T21:04:50.063" Score="3" ViewCount="1053" Body="&lt;p&gt;I'm trying to make a 6502 replica in Logisim. I want to know what exactly each control signal in 6502, how the clock cycles work and additionally I would like to see an example of these control signals producing a single instruction from start to finish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a book about 6502 or other processor that goes in depth about it's control signals? If not, maybe you could shed some light on my question?&lt;/p&gt;&#xA;" OwnerUserId="13776" LastActivityDate="2019-06-04T14:53:38.733" Title="How exactly do all control signals in 6502 work?" Tags="&lt;hardware&gt;&lt;6502&gt;&lt;cpu&gt;&lt;architecture&gt;&lt;microprocessor&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11217" PostTypeId="2" ParentId="11216" CreationDate="2019-06-03T21:18:47.410" Score="3" Body="&lt;p&gt;I'd just go with the datasheet (&lt;a href=&quot;http://archive.6502.org/datasheets/rockwell_r650x_r651x.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rockwell version&lt;/a&gt;, &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6500_mpu_nov_1985.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore Version&lt;/a&gt;) as it contains everything needed. But there is THE book to read:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The &lt;a href=&quot;http://6502.org/documents/books/mcs6500_family_hardware_manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MOS MCS6500 Family Hardware Manual&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One hint, in all respect and seriousness, if you have a hard time to give the signals a basic meaning (as noted in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11216/how-exactly-do-all-control-signals-in-6502-work#comment34166_11216&quot;&gt;your comment&lt;/a&gt;), then simulating a CPU might be above your level.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-03T21:58:17.303" LastActivityDate="2019-06-03T21:58:17.303" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11218" PostTypeId="2" ParentId="11206" CreationDate="2019-06-03T21:58:23.863" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Or maybe what I am really asking is: If I have an 8 bit, 44 kHz&#xA;  sample based audio chip, could that chip generate audio which could&#xA;  not be distinguished from a real SID chip?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The short answer: probably. But, given a choice, use standard 44.1 KHz&#xA;16-bit sampling to reproduce the signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PCM audio reproduction has two components: frequency range (what's the&#xA;highest frequency it can reproduce?) and dynamic range (how loud is&#xA;the background noise level in comparison to the highest signal you can&#xA;hear?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As described &lt;a href=&quot;https://music.stackexchange.com/a/85238/37638&quot;&gt;here&lt;/a&gt; (in probably far more detail than you care&#xA;about), the frequency range of properly done 44.1 KHz digital sample&#xA;reproduction will be about 0-20 KHz, which covers the entire set of&#xA;frequencies that most people can hear, so there are no issues there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dynamic range of 8-bit PCM reproduction will be significantly more&#xA;than 48 dB (assuming you use proper dithering); that is, the loudest&#xA;signal will be 48 dB higher than the noise floor. This is better than,&#xA;say, a high-quality cassette tape recording.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As others here have pointed out, SID chip is an analogue sound&#xA;generator with a digital oscillator producing square, triangle and&#xA;sawtooth waves. Because this is &lt;em&gt;not&lt;/em&gt; a PCM sampling system, the&#xA;number of bits of resolution of the digital oscillator is nearly&#xA;irrelevant to the noise floor; that will be almost entirely determined&#xA;by the analogue portions of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't find any figures on the noise floor of the C64 audio output,&#xA;but given that it's a very cost-constrained system in so many ways not&#xA;specifically designed for high-quality musical reproduction (think&#xA;about the typical speaker system used with it!), it's very likely that&#xA;the noise level is well above -48 dB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, another thing to consider is the &lt;em&gt;character&lt;/em&gt; of the noise; a&#xA;standard PCM reproduction system that produces white noise filtered to&#xA;a certain spectrum may have &quot;background noise&quot; that sounds quite&#xA;different from that produced by a real C64 reproduction system. Your&#xA;digital emulation of a SID chip and any subsequent analogue circuitry&#xA;may or may not emulate this, but if it does that &quot;SID noise&quot; is part&#xA;of the signal and you want it will above the background noise of the&#xA;reproduction system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, unless you're particularly resource constrained (to a much&#xA;greater degree than on a modern PC or phone), you should use 44.1 KHz&#xA;16-bit reproduction so that you simply don't have to think about the&#xA;issues in that part of the system, and instead spend your energy&#xA;focusing on the details of the simulated analogue waveform produced by&#xA;your SID emulation. If the output of your emulation is not as noisy as&#xA;the real system and you want that noise, you should add the noise in&#xA;your emulation, ideally in a way that gives it the same character as&#xA;the noise created by the real system.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-06-03T21:58:23.863" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="11219" PostTypeId="1" AcceptedAnswerId="11220" CreationDate="2019-06-03T22:55:50.057" Score="55" ViewCount="13476" Body="&lt;p&gt;Nowadays each graphic card has some driver in operating system that translates some (typically) standard API such as OpenGL, so that programmers use some standardized API code to tell graphics cards how and what they want to render. (Actually that's already a bit hard-core most programmers really use various game engines that do this for them).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In times of old computers - how was this done? Did every programmer of every game implemented all possible various API's that old graphic cards supported? Or did the old game studios from MS-DOS times had their own &quot;game engines&quot; that provided some abstraction when it came to these graphic cards?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember there were many various card vendors and I remember old games asked me which one I have - so I suppose these games contained code / drivers for all these cards?&lt;/p&gt;&#xA;" OwnerUserId="13632" LastEditorUserId="10502" LastEditDate="2019-06-05T16:36:30.790" LastActivityDate="2019-06-06T21:39:58.260" Title="How did old MS-DOS games utilize various graphic cards?" Tags="&lt;graphics&gt;&lt;programming&gt;&lt;video&gt;&lt;gaming&gt;" AnswerCount="6" CommentCount="6" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11220" PostTypeId="2" ParentId="11219" CreationDate="2019-06-03T23:16:18.357" Score="68" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did every programmer of every game implemented all possible various API's that old graphic cards supported?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes - but it went even deeper than that. Early graphics cards had virtually no callable code associated with them at all, the concept of &quot;drivers&quot; had not quite become a reality yet. There was the concept of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Video_BIOS&quot; rel=&quot;noreferrer&quot;&gt;Video BIOS&lt;/a&gt;, which were extensions to the &lt;code&gt;INT 10h&lt;/code&gt; BIOS video services, that were effectively limited to initialization and switching video modes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, graphics cards, at least in DOS land, all had memory mapped display RAM, and extensive documentation was available about exactly how setting various bits in display RAM would affect the pixels that appeared on the screen. There were no drawing APIs to call, if you wanted something to appear on the screen (whether it be a pixel, a character, a line, a circle, a sprite, etc) you would write the code to move the bytes into the right places in display RAM. Entire books were written about how to write efficient code to draw graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were some systems like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Borland_Graphics_Interface&quot; rel=&quot;noreferrer&quot;&gt;Borland Graphics Interface&lt;/a&gt; that abstracted graphics drawing primitives into an API with different drivers that one could call to draw things on different graphics cards. However, these were typically slower than what would be required for building action type games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An action game would typically be optimized for a particular graphics display mode on a particular card. For example, a popular display mode was VGA 640x480 with 16 colors. This would be listed in the software requirements, and you needed to have the right hardware to support the game. If you bought a VGA game but you only had an EGA card, then the game would not work at all. As you said, some games would ask what you had and you had to know what the right answer was, otherwise the game would not work.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastEditorUserId="4070" LastEditDate="2019-06-06T21:39:58.260" LastActivityDate="2019-06-06T21:39:58.260" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="11221" PostTypeId="2" ParentId="11219" CreationDate="2019-06-03T23:46:44.827" Score="28" Body="&lt;p&gt;Early on, you had to explicitly code your game for each graphics card you wanted to support: Hercules, CGA, Tandy, EGA, VGA. You had to know how to put the card into graphics mode and you had to know the memory layout, palette, and so on. You had to figure out how to avoid flicker and how to prevent tearing. You had to write your own line drawing and fill routines, and if you wanted 3-D, you had to know how to project it onto a 2-D screen, how to remove hidden lines and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later when graphics cards started gaining accelerated functionality, SGI created the IrisGL API, which later became OpenGL, in order to simplify CAD (computer aided drafting/design) software development for those graphics cards by providing a standard API that video hardware manufacturers could support and developers could design their software against. OpenGL provided access to underlying hardware features, and if a feature did not exist on the hardware, OpenGL provided a software implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same problem existed in games development. Originally, graphics card manufacturers would work with game studios to create a version (release) of their game that would be accelerated by the specific graphics card. Early 3D games like MechWarrior 2 had &lt;a href=&quot;http://www.mech2.org/forum/viewtopic.php?t=281&quot; rel=&quot;noreferrer&quot;&gt;different releases for 3dfx Voodoo, S3 Virge, STB Velocity&lt;/a&gt;, and so on. It was a bit of a mess. At around the same time, Microsoft created the DirectX library for Windows which was similar to OpenGL. Manufacturers would support OpenGL and/or DirectX, and game studios who were brave enough to abandon DOS for Windows as a platform could then program for one or both libraries instead of creating another release for each individual graphics card they wanted to support. Any relatively minor differences between graphics cards could be handled at runtime in the same release.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-06-04T20:20:49.020" LastActivityDate="2019-06-04T20:20:49.020" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11222" PostTypeId="2" ParentId="6515" CreationDate="2019-06-03T23:57:55.267" Score="0" Body="&lt;p&gt;In the finish, I decided that Sega MegaDrive/Genesis joypads are by far what I'm most likely to encounter now that use some variant of the Atari 9 pin layout. Although it doesn't detect which system it's plugged into, I'm now using this device with my C64 which can be manually configured with jumpers to use a megadrive joypad with various mappings:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.tindie.com/products/SukkoPera/openc64megadrivepadadapter-v3/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.tindie.com/products/SukkoPera/openc64megadrivepadadapter-v3/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For MSX and x68000 systems, a similar adapter can be made:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://frs.badcoffee.info/hardware/joymega-en.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://frs.badcoffee.info/hardware/joymega-en.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This adapter also has the advantage that it allows all the buttons on sega controllers to be used with specially written software, such as pointless fighting (&lt;a href=&quot;http://msxbanzai.tni.nl/compo/2014/entries.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://msxbanzai.tni.nl/compo/2014/entries.html&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Kempston joystick interface I use with my ZX Spectrum is a modern one that works fine already with the B and C buttons on a megadrive joypad. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also found an adapter that adapts Sony PS2 controllers to the MegaDrive pinout:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.tototek.com/store/index.php?main_page=product_info&amp;amp;cPath=23&amp;amp;products_id=54&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.tototek.com/store/index.php?main_page=product_info&amp;amp;cPath=23&amp;amp;products_id=54&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this I can use my Hori PS2 joystick or wireless PS2 controllers (which can still be found cheaply on Amazon &lt;a href=&quot;https://www.amazon.co.uk/s?k=ps2+wireless+joypad&amp;amp;ref=nb_sb_noss&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.co.uk/s?k=ps2+wireless+joypad&amp;amp;ref=nb_sb_noss&lt;/a&gt;) with just about any system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also seen Megadrive to 15 pin neo-geo adapters: &lt;a href=&quot;http://retroelectronik.com/en/supergun/142-ganesis-and-megadrive-pad-to-neo-geo-and-supergun-adapter-autofire-7854564564567.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://retroelectronik.com/en/supergun/142-ganesis-and-megadrive-pad-to-neo-geo-and-supergun-adapter-autofire-7854564564567.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7044" LastActivityDate="2019-06-03T23:57:55.267" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11223" PostTypeId="1" AcceptedAnswerId="11225" CreationDate="2019-06-04T02:23:45.700" Score="39" ViewCount="6116" Body="&lt;p&gt;I'm using &lt;code&gt;cpudiag.bin&lt;/code&gt; from &lt;a href=&quot;http://www.emulator101.com/files/cpudiag.bin&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.emulator101.com/files/cpudiag.bin&lt;/a&gt; to test my emulator. I've already implemented the CP/M CALL function at 0x05, offset the program at &lt;code&gt;0x100&lt;/code&gt; and fixed the offset at byte 112 + 0x100, as per this site: &lt;a href=&quot;http://emulator101.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://emulator101.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I get the error:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; CPU HAS FAILED! ERROR EXIT=78=:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and added myself that there was a &lt;code&gt;JMP to 0000 from 0x698&lt;/code&gt;. Here are the last 10 instructions run by the emulator before failing:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Instructions Ran: 79&#xA;Program Counter: 016C&#xA;Memory Immediate: 0xFA&#xA;Instruction: JM adr 71 1&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3D 01 DA 0A&#xA;Flags (Z/S/P/C/AC): 1 0 1 0 0&#xA;Stack Pointer: 7A7&#xA;Cycles: 724&#xA;Interrupt enabled: false&#xA;Interrupt op:&#xA;-------------------&#xA;Instructions Ran: 80&#xA;Program Counter: 0171&#xA;Memory Immediate: 0xC6&#xA;Instruction: ADI D8 30&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3D 01 DA 0A&#xA;Flags (Z/S/P/C/AC): 1 0 1 0 0&#xA;Stack Pointer: 7A7&#xA;Cycles: 734&#xA;Interrupt enabled: false&#xA;Interrupt op:&#xA;-------------------&#xA;Instructions Ran: 81&#xA;Program Counter: 0173&#xA;Memory Immediate: 0xC9&#xA;Instruction: RET&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3D 01 DA 3A&#xA;Flags (Z/S/P/C/AC): 0 0 1 0 1&#xA;Stack Pointer: 7A7&#xA;Cycles: 741&#xA;Interrupt enabled: false&#xA;Interrupt op:&#xA;-------------------&#xA;Instructions Ran: 82&#xA;Program Counter: 0160&#xA;Memory Immediate: 0x5F&#xA;Instruction: MOV E, A&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3D 01 DA 3A&#xA;Flags (Z/S/P/C/AC): 0 0 1 0 1&#xA;Stack Pointer: 7A9&#xA;Cycles: 751&#xA;Interrupt enabled: false&#xA;Interrupt op:&#xA;-------------------&#xA;Instructions Ran: 83&#xA;Program Counter: 0161&#xA;Memory Immediate: 0xC3&#xA;Instruction: JMP adr 4E 1&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3A 01 DA 3A&#xA;Flags (Z/S/P/C/AC): 0 0 1 0 1&#xA;Stack Pointer: 7A9&#xA;Cycles: 756&#xA;Interrupt enabled: false&#xA;Interrupt op:&#xA;-------------------&#xA;Instructions Ran: 84&#xA;Program Counter: 014E&#xA;Memory Immediate: 0x0E&#xA;Instruction: MVI C, D8 2&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3A 01 DA 3A&#xA;Flags (Z/S/P/C/AC): 0 0 1 0 1&#xA;Stack Pointer: 7A9&#xA;Cycles: 766&#xA;Interrupt enabled: false&#xA;Interrupt op:&#xA;-------------------&#xA;Instructions Ran: 85&#xA;Program Counter: 0150&#xA;Memory Immediate: 0xCD&#xA;Instruction: CALL adr 5 0&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3A 01 DA 3A&#xA;Flags (Z/S/P/C/AC): 0 0 1 0 1&#xA;Stack Pointer: 7A9&#xA;Cycles: 773&#xA;Interrupt enabled: false&#xA;Interrupt op:&#xA;-------------------&#xA;Instructions Ran: 86&#xA;Program Counter: 0005&#xA;Memory Immediate: 0xC9&#xA;Instruction: RET&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3A 01 DA 3A&#xA;Flags (Z/S/P/C/AC): 0 0 1 0 1&#xA;Stack Pointer: 7A7&#xA;Cycles: 790&#xA;Interrupt enabled: false&#xA;Interrupt op:&#xA;-------------------&#xA;:Instructions Ran: 87&#xA;Program Counter: 0153&#xA;Memory Immediate: 0xC9&#xA;Instruction: RET&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3A 01 DA 3A&#xA;Flags (Z/S/P/C/AC): 0 0 1 0 1&#xA;Stack Pointer: 7A9&#xA;Cycles: 800&#xA;Interrupt enabled: false&#xA;Interrupt op:&#xA;-------------------&#xA;Instructions Ran: 88&#xA;Program Counter: 0698&#xA;Memory Immediate: 0xC3&#xA;Instruction: JMP adr 0 0&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3A 01 DA 3A&#xA;Flags (Z/S/P/C/AC): 0 0 1 0 1&#xA;Stack Pointer: 7AB&#xA;Cycles: 810&#xA;Interrupt enabled: false&#xA;Interrupt op:&#xA;-------------------&#xA;Instructions Ran: 89&#xA;Program Counter: 0000&#xA;Memory Immediate: 0x00&#xA;Instruction: NOP&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3A 01 DA 3A&#xA;Flags (Z/S/P/C/AC): 0 0 1 0 1&#xA;Stack Pointer: 7AB&#xA;Cycles: 820&#xA;Interrupt enabled: false&#xA;Interrupt op:&#xA;-------------------&#xA;JMP to 0000 from 0x698&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I'm new to emulating so could anyone give me a hint or point me in the right direction on how to debug this?&lt;/p&gt;&#xA;&lt;p&gt;Edit: code &lt;a href=&quot;https://github.com/hydratedcabbage/space-invaders&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/hydratedcabbage/space-invaders&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13631" LastEditorUserId="15334" LastEditDate="2021-01-19T09:53:28.473" LastActivityDate="2021-01-19T09:53:28.473" Title="Fixing obscure 8080 emulator bug?" Tags="&lt;emulation&gt;&lt;8080&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11225" PostTypeId="2" ParentId="11223" CreationDate="2019-06-04T08:37:13.830" Score="97" Body="&lt;h1&gt;The General Advice Answer&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;For a failure that happens so quickly (at most 89 instructions) I'd recommend simply looking at what your emulator does at each instruction and determine if did everything correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the error occurs after thousands or millions of instructions then it would be more fruitful to compare it against an 8080 emulator that gets the correct output.  Have the correct emulator and yours output the program counter for each instruction executed.  When they differ your know your emulator made a mistake and it will likely be at the instruction or a few before it.  Though not necessarily.  Sometimes a mistake can be made, the results saved into memory and only when read back much later is the difference in program counter apparent.  In those cases a full trace showing all register contents and values being read from or written to memory can catch the mistake quicker.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;The Very Specific Answer&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Here's the first two instructions you posted (slightly abridged):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Instructions Ran: 79&#xA;Program Counter: 016C&#xA;Memory Immediate: 0xFA&#xA;Instruction: JM adr 71 1&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3D 01 DA 0A&#xA;Flags (Z/S/P/C/AC): 1 0 1 0 0&#xA;-------------------&#xA;Instructions Ran: 80&#xA;Program Counter: 0171&#xA;Memory Immediate: 0xC6&#xA;Instruction: ADI D8 30&#xA;Registers (B/C/D/E/H/L/A): 00 02 00 3D 01 DA 0A&#xA;Flags (Z/S/P/C/AC): 1 0 1 0 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Look very closely and you'll find that &lt;code&gt;JM&lt;/code&gt; did something wrong.  I'll tell you what that is at the end of the question to not spoil your examination.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;The Using All We Know Answer&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;There's not really a need to trace.  &lt;code&gt;cpudiag.asm&lt;/code&gt; is designed to point out the general location of the error.  Notice that it will run an 8080 instruction or two and if it doesn't get the results it expects a &lt;code&gt;CALL CPUER&lt;/code&gt; is done.  That routine is at 0x689 so you could stop your emulator when it reaches there and note the return address indicates which of the many &lt;code&gt;CALL CPUER&lt;/code&gt; instructions was hit.  Or even just detect &lt;code&gt;CALL CPUER&lt;/code&gt; as a special case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &lt;code&gt;cpudiag.asm&lt;/code&gt; tries to help you as much as possible.  Looking at &lt;code&gt;CPUER&lt;/code&gt; you can see that it is printing the return address after the &lt;code&gt;CPU HAS FAILED! ERROR EXIT=&lt;/code&gt; message.  Though instead of a hexadecimal address your emulator printed &lt;code&gt;78=:&lt;/code&gt;.  In other words, it would seem your 8080 emulator is failing on the code to convert a binary value to hexadecimal in ASCII.  Which is the BYTEO routine and in particular &lt;code&gt;BYT02&lt;/code&gt; which converts the bottom 4 bits of A register into an ASCII character.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, looking at the &lt;code&gt;78=:&lt;/code&gt; we can come up with a pretty good guess what went wrong.  Note that the code looks at the value in A register.  If it is less 10 then 0x30 is added to A register.  This covers the digits '0' through '9'.  But if it is greater than or equal to 10 then we add 7 and then add 0x30.  10 + 7 + 0x30 = 65 which is the letter 'A' so that part is handling digits 'A' through 'F'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ASCII value for ':' is 0x3A.  So one has to wonder if maybe the test failed and we didn't add the 7.  And the '=' would correspond to 'D'.  Meanwhile, the '78' seems odd.  That is way beyond the end of the program so it can't possibly correspond to a &lt;code&gt;CALL CPUER&lt;/code&gt;.  In fact, the program fails so quickly I would doubt it has even reached 0x1FF.  But if the test is wrong, 7 will be added to the decimal digits.  A zero will become '7' and a '1' will become '8'.  Aha, that address is probably 0x01DA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can immediately conclude that &lt;code&gt;JM&lt;/code&gt; is backwards.  Perhaps a copy and paste error from &lt;code&gt;JP&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, we see that the &lt;code&gt;CALL CPUER&lt;/code&gt; that failed is this one as its return address will be 0x01DA:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;J040:   JNZ J050    ;TEST &quot;JNZ&quot;&#xA;        JC  J050    ;TEST &quot;JC&quot;&#xA;        JPO J050    ;TEST &quot;JPO&quot;&#xA;        JM  J050    ;TEST &quot;JM&quot;&#xA;        JMP J060    ;TEST &quot;JMP&quot; (IT'S A LITTLE LATE,BUT WHAT THE HELL!&#xA;J050:   CALL    CPUER&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are 4 instructions that jump directly to &lt;code&gt;J050&lt;/code&gt; and a &lt;code&gt;JMP&lt;/code&gt; that goes over it.  And of those instructions could be wrong, but &lt;code&gt;JMP&lt;/code&gt; is likely right.  And given that the hexadecimal output showed &lt;code&gt;JM&lt;/code&gt; being wrong then I'll bet it is &lt;code&gt;JM&lt;/code&gt; that is jumping to the &lt;code&gt;CALL CPUER&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;The Very Specific Answer Answer&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;JM&lt;/code&gt; is taken even though the &lt;code&gt;S&lt;/code&gt; flag is not set.  That's wrong.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;A Final Note&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I started out by looking at the &lt;code&gt;cpudiag.asm&lt;/code&gt; source code.  The significance of &lt;code&gt;CPUER&lt;/code&gt; was pretty clear and I got curious about where that exit code came from.  Once I figured out it was the return address of the &lt;code&gt;CALL CPUER&lt;/code&gt; instruction it got me wondering why your emulator wasn't printing out a hexadecimal address.  At that point numerology pointed out &lt;code&gt;JM&lt;/code&gt; in the binary to hexadecimal conversion routine and also gave me an address to look at what had actually failed. Then after all that I looked at your instruction trace and noticed by pure luck that the first instruction you listed made a wrong turn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A reasonable approach, if you're familiar with 8080 code, and especially with writing it so you can see what a program would normally be expected to do. If you're new to 8080, then I think a lower-level inspection, as suggested in the &quot;General Advice&quot; section will be more fruitful.&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2019-06-04T18:39:37.743" LastActivityDate="2019-06-04T18:39:37.743" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11226" PostTypeId="2" ParentId="11183" CreationDate="2019-06-04T09:25:46.700" Score="7" Body="&lt;p&gt;No online resource found, but to record for posterity, here are some relevant links:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;strong&gt;Centre for Computing History&lt;/strong&gt; (Cambridge, UK) has a list of covers and brief summaries of contents. As you note in a comment, the &lt;a href=&quot;http://www.computinghistory.org.uk/det/2343/Personal-Computer-World-November-1978/&quot; rel=&quot;noreferrer&quot;&gt;Entry for November 1978&lt;/a&gt; confirms that the article you are interested is in that edition.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A blog entry on the &lt;strong&gt;PCW Preservation Project&lt;/strong&gt; &lt;a href=&quot;http://pcwpp.blogspot.com/2010/06/every-once-in-while-i-get-bug.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; is an attempt to kick-start creating such an online repository. Although it does not seem to have got anywhere, there are comments from 2018/19; at least one from someone who has the relevant physical copy. It's conceivable that you may be able to get in touch with someone who could photocopy the article in question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A side-entry notes that someone is/was (in 2010) selling a CD of issues June 1995 - March 1997, though neither the writer (nor I) is certain what it contains/contained.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;strong&gt;National Museum of Computing&lt;/strong&gt; (Bletchley Park, UK) has a &lt;a href=&quot;https://www.tnmoc.org/news-releases/2016/5/18/computer-hacking-archive-at-tnmoc?rq=personal%20computer%20world&quot; rel=&quot;noreferrer&quot;&gt;News Release&lt;/a&gt; in which it announces (emphasis mine):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The archive at TNMOC is available to bona fide researchers. It is growing rapidly already contains the entire 45 year print history (1966-2011) of Computer Weekly, the world's first weekly computer publication, &lt;strong&gt;26 years of Personal Computer World&lt;/strong&gt;, and many other magazines, the complete ICL manufacturing archive, the entire Digital Equipment Corporation microfiche and much more.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have no idea of the feasibility, but again it is &lt;em&gt;conceivable&lt;/em&gt; that they may be able to photocopy the relevant article.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Brian N Butterworth&lt;/strong&gt; has compiled &lt;a href=&quot;https://ukfree.tv/documents/pcw/&quot; rel=&quot;noreferrer&quot;&gt;The PCW Index&lt;/a&gt; covering the magazine from its inception in 1978 until 1989. It contains:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;'benchtests' (machine reviews), 'software' (software and 'firmware' reviews), 'checkouts'(reviews of peripherals such as add-in cards and printers). sections also cover 'features' (articles from programming to politics), 'screenplay' (computer games) and 'book reviews'. there are also sections covering the deceased 'tjs workshop' and 'computer answers'. finally, there are sections on 'subset' and 'programs'.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;but virtually no capital letters. [&lt;em&gt;Credit to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/10980/uli&quot;&gt;Uli&lt;/a&gt; for finding this resource&lt;/em&gt;].&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="731" LastEditorUserId="731" LastEditDate="2019-06-04T12:52:45.423" LastActivityDate="2019-06-04T12:52:45.423" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11227" PostTypeId="2" ParentId="11216" CreationDate="2019-06-04T14:53:38.733" Score="4" Body="&lt;p&gt;I can give you an overview of the external control signals that appear on the pins of the 6502, but you'll need to go to somewhere like visual6502.org to get an idea of the internal signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are three control signals dedicated to the clock&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ø&lt;sub&gt;0&lt;/sub&gt;&lt;/li&gt;&#xA;&lt;li&gt;ø&lt;sub&gt;1&lt;/sub&gt;&lt;/li&gt;&#xA;&lt;li&gt;ø&lt;sub&gt;2&lt;/sub&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The first is an input, the system clock. ø&lt;sub&gt;1&lt;/sub&gt; is an output: ø&lt;sub&gt;0&lt;/sub&gt; inverted but with the high pulse slightly shortened. ø&lt;sub&gt;2&lt;/sub&gt; is the same as ø&lt;sub&gt;0&lt;/sub&gt; again with the high pulse slightly shortened. When ø&lt;sub&gt;1&lt;/sub&gt; is high, the processor is doing internal processing stuff and setting all the output pins (except data pins for writes which it does during ø&lt;sub&gt;2&lt;/sub&gt; according to the timing diagrams) into the correct state for the following ø&lt;sub&gt;2&lt;/sub&gt; pulse. When ø&lt;sub&gt;2&lt;/sub&gt; is high, the CPU is doing a memory access. The reason why ø&lt;sub&gt;1&lt;/sub&gt; and ø&lt;sub&gt;2&lt;/sub&gt; have shortened high pulses is so that they don't overlap and cause ambiguity about what the processor is doing and what the state of its output pins is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 does a memory access in the second half of every ø&lt;sub&gt;0&lt;/sub&gt; clock cycle, even when it doesn't need to. This is important to understanding the internals and some of the quirks of the instruction set. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other signals associated with memory accesses are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;R/W which the CPU sets high to read and low to write.&lt;/li&gt;&#xA;&lt;li&gt;SYNC which is set high when opcodes are being read.&lt;/li&gt;&#xA;&lt;li&gt;A&lt;sub&gt;0&lt;/sub&gt; - A&lt;sub&gt;15&lt;/sub&gt; the address bus&lt;/li&gt;&#xA;&lt;li&gt;D&lt;sub&gt;0&lt;/sub&gt; - D&lt;sub&gt;7&lt;/sub&gt; the data bus&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There's also &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RDY, which, if you set it low, will cause the processor to freeze at the beginning of the next ø&lt;sub&gt;2&lt;/sub&gt; as long as it is a read cycle. If you set RDY low when SYNC is high, you can single step the processor.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are two inputs associated with interrupts&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IRQ which causes interrupt processing to start (at the end of processing the current instruction) if it is driven low. IRQ can be ignored programmatically by setting the interrupt flag in the status register.&lt;/li&gt;&#xA;&lt;li&gt;NMI which causes interrupt processing to start (at the end of processing the current instruction) if it is driven low. NMI cannot be disabled. Note that NMI is edge triggered because otherwise the processor would continuously interrupt until you let NMI go high again.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There's also &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Reset which effectively stops the processor when it goes low and then restarts it (from scratch like when it has just been turned on) when it goes high again.&lt;/li&gt;&#xA;&lt;li&gt;SO which sets the overflow flag in the status register when you drive it low during the second half of ø&lt;sub&gt;1&lt;/sub&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I think that's all of them for the 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During a typical read cycle, in ø&lt;sub&gt;1&lt;/sub&gt; the processor will&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;set R/W to high to signal a read&lt;/li&gt;&#xA;&lt;li&gt;set the address pins&lt;/li&gt;&#xA;&lt;li&gt;configure the data pins to read&lt;/li&gt;&#xA;&lt;li&gt;set SYNC to high if the CPU is reading an instruction, or low otherwise&lt;/li&gt;&#xA;&lt;li&gt;check to see if SO transitions from high too low and set overflow if it does&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In ø&lt;sub&gt;2&lt;/sub&gt; the processor will &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;check that RDY hasn't transitioned from high to low and temporarily halt the processor if it does&lt;/li&gt;&#xA;&lt;li&gt;read the data pins&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;During a typical write cycle, in ø&lt;sub&gt;1&lt;/sub&gt; the processor will&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;set R/W to low to signal a write&lt;/li&gt;&#xA;&lt;li&gt;set the address pins&lt;/li&gt;&#xA;&lt;li&gt;configure the data pins to write&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In ø&lt;sub&gt;2&lt;/sub&gt; the processor will &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;write to the data pins&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2019-06-04T14:53:38.733" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11228" PostTypeId="2" ParentId="11206" CreationDate="2019-06-04T15:47:04.387" Score="0" Body="&lt;p&gt;No, SID samples use the volume register which is 4 bit! The unit bit is only applicable to digital information, not analogue ones.&lt;/p&gt;&#xA;" OwnerUserId="7534" LastEditorUserId="7534" LastEditDate="2020-03-18T16:52:26.627" LastActivityDate="2020-03-18T16:52:26.627" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11229" PostTypeId="2" ParentId="8056" CreationDate="2019-06-04T17:11:17.603" Score="2" Body="&lt;p&gt;Actually, a lot of code was supplied on tape, sometimes with relocators etc. Also the Z80 is not bad at relocatable code. The NAS-SYS monitors helped this relocatability substantially by clever use of the Z80 RST instructions (these are essentially single byte 'calls' to low memory locations (RST 8, RST 10H, RST 18H etc). These were used in NAS-SYS to access most monitor utility functions (I/O etc) and also provided a 16-bit relative call feature (this allowed large programs to be completely relocatable if all calls used the Monitor RCAL restart). Most of the code I wrote at the time made use of this and could be loaded anywhere with no code changes. The RCAL restart was slower but took the same space as a regular call.&lt;/p&gt;&#xA;" OwnerUserId="1956" LastActivityDate="2019-06-04T17:11:17.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11230" PostTypeId="1" AcceptedAnswerId="11232" CreationDate="2019-06-04T19:19:41.337" Score="5" ViewCount="348" Body="&lt;p&gt;MMU page size in VAXen is just 512 bytes. Such a small size causes increased number of MMU page walks and leads to TLB thrashing more often.&#xA;Current tendency is to have MMU pages as big as 2 Mbytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, back 70ies, when VAX architecture was postulated, the computing world was totally different and engineers kept different mindsets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what were the most probable reasons behind selecting such a small page size?&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-06-05T21:57:49.763" Title="What was the reasons for DEC engineers to choose MMU page size in VAXen?" Tags="&lt;dec&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11231" PostTypeId="2" ParentId="9314" CreationDate="2019-06-04T20:05:45.890" Score="1" Body="&lt;p&gt;I maxed out an SE/30 in the early 90s, adding max RAM, external SCSI drives, and a huge grey scale display. I must have installed a third party video card, I just checked, and the SE/30 didn't have built-in 2nd display support. I think I was still using Object Pascal and MacApp back then.&#xA;The machine took long enough to boot that I would power up the drives and CPU then go get a cup of coffee. I was only 30 feet from my coffee machine, and the machine would be ready when I got back, so no more that 2 minutes, for sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SE/30 was probably the finest tiny screen mac ever made. I was also really fond of the quadra 605 that I replaced it with, an excellent 'mac mini' that was only about as big as 4 of the modern minis ... maybe 16&quot; x 14&quot; x 2.5&quot;.&lt;/p&gt;&#xA;" OwnerUserId="4150" LastActivityDate="2019-06-04T20:05:45.890" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11232" PostTypeId="2" ParentId="11230" CreationDate="2019-06-04T20:16:07.333" Score="9" Body="&lt;p&gt;The first and most important point to keep in mind is that the VAX wasn't initially designed as a new architecture, but an extension to the basic PDP-11 structure to break its 64 KiB boundaries. Early implementations even offered a hardware-based PDP-11 mode.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;MMU page size in VAXen is just 512 bytes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which is also the block size of most DEC disk drives (Sans RF/RS11). Using the same block size to segment memory does have its practical benefits, doesn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not to mention that 512 bytes were still a lot in 1977. A time when even real, /370 class mainframes were still delivered with little memories like 256 KiB and used for large scale applications. The /370, by the way, also had 'just' a 4 KiB page size (double the disk block size) - systems that even today rule the systems at the core of our economy.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Such a small size causes increased number of MMU page walks&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Except that the VAX page table system was rather simple and single level (per region *1). So not much walking, just straight indexing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, one of the funny aspects of the VAX's page table system is that the page tables (*2) themselves are/can be stored in pageable memory (*3) :)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and leads to TLB thrashing more often.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;With 128 entries in the first KA780, the TLB covers quite a lot of entries considering that it's a cache. Later models like the later 11/750 or 11/785 even had 512 entries.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Current tendency is to have MMU pages as big as 2 Mbytes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Jau - as well as having program sizes in the multi-megabyte and memories in multi-gigabyte sizes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original VAX in 1977 (11/780 or KA780) had a base memory of 128 KiB (256 pages) and a maximum possible amount of 2 MiB (*4).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The addressing scheme diverted the 4 Gi address range into four 1 Gi blocks, each handled by a pair of registers holding the address of the corresponding page table and its length. The lower two Gi were for program space while the upper handled system space. In each, the lower Gi was allocated from the bottom, the upper from the top. Loading a page entry into the TLB was a single address calculation of the entry address by adding the page number to the table address register (P0 or P1 for user context) and loading the entry into the TLB. Simple and fast, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Each process got two plus the system table for all. So only 4 registers had to be changed for a process swap, everything thereafter was accessed when used on an entry by entry scheme and cached in the TLB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Quite a useful combination as the tables themselves could become quite large - due to the small page size that is. Then again, with 32 bits per entry a 512 byte page could hold 128 entries, good for 64 KiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Later extended to 8 MiB.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-05T21:57:49.763" LastActivityDate="2019-06-05T21:57:49.763" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11233" PostTypeId="2" ParentId="11219" CreationDate="2019-06-04T20:44:00.423" Score="11" Body="&lt;p&gt;In DOS world in the golden age of VGA (early to mid 90s), by far the easiest and most popular way to do graphics was the famous &lt;a href=&quot;https://en.wikipedia.org/wiki/Mode_13h&quot; rel=&quot;noreferrer&quot;&gt;Mode 13h&lt;/a&gt;, a 320x200 pixel linear 256-color paletted video mode. The closest you would get to a standard video API was &lt;a href=&quot;https://en.wikipedia.org/wiki/INT_10H&quot; rel=&quot;noreferrer&quot;&gt;BIOS interrupt 10h&lt;/a&gt;, giving access to a handful of functions including switching the video mode and configuring the palette. A resolution of 320x200 (instead of 320x240 which has a 4:3 aspect ratio) was very convenient because the required video memory (64000 bytes) would fit in a single 64kB &lt;a href=&quot;https://en.wikipedia.org/wiki/X86_memory_segmentation&quot; rel=&quot;noreferrer&quot;&gt;memory segment&lt;/a&gt;, making addressing individual pixels very straightforward. The drawback was that pixels were slightly rectangular instead of perfectly square.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The video memory was mapped to segment A0000h; in the real-mode environment of DOS you could simply form a pointer to that segment and treat it as a 64000-byte array, each byte corresponding to one pixel. Set a byte to a new value, a pixel changes color on the screen. Beyond that, implementing any higher-level drawing functionality was up to you or a 3rd-party library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For accessing higher-resolution and/or higher color depth modes afforded by SVGA and later video cards, there was (and still is) &lt;a href=&quot;https://en.wikipedia.org/wiki/VESA_BIOS_Extensions&quot; rel=&quot;noreferrer&quot;&gt;VBE&lt;/a&gt;, or VESA BIOS Extensions, a standard API exposed by the video card's BIOS. But beyond switching the video mode, setting the palette (in paletted modes), and getting a frame buffer into which to plot pixels, you were still pretty much on your own.&lt;/p&gt;&#xA;" OwnerUserId="13790" LastEditorUserId="13790" LastEditDate="2019-06-04T21:31:33.950" LastActivityDate="2019-06-04T21:31:33.950" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11234" PostTypeId="1" AcceptedAnswerId="11253" CreationDate="2019-06-04T21:15:02.227" Score="8" ViewCount="1497" Body="&lt;p&gt;VGA framebuffer was fixed to 64kB at A0000h. Right after that there’s MDA/CGA framebuffer at B0000h. I am not sure, but I recall VGA did have to support CGA and its framebuffer, but was there any reason why VGA couldn’t use eg 128kB (ie segments A and B) as linear framebuffer for modes such as 320x240x8b? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;ModeX and others do imply all VGA boards must’ve had more than 64kB of video ram on board, but it had to be accessed via bank switching. Since VGA would need to claim ownership of B segment for CGA compatibility (but this is not needed if using VGA display modes), I cannot see any reason why they did resort to bank switching.&lt;/p&gt;&#xA;" OwnerUserId="4378" LastActivityDate="2019-06-05T15:57:05.373" Title="Why VGA framebuffer was limited to 64kB window?" Tags="&lt;ibm-pc&gt;&lt;memory-layout&gt;&lt;vga&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11235" PostTypeId="2" ParentId="11234" CreationDate="2019-06-04T21:20:47.903" Score="3" Body="&lt;p&gt;In the 16-bit 8086, addressing of the memory space was done with a two-register pair Segment:Offset. The Segment register (there were four of them) addressed the high 16 bits of the 20-bit addressable memory, and the Offset register addressed the low 16 bits. So The effective address was computed in the CPU by:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;EA = 16 * Segment + Offset&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, in order to address more than 64k of memory at once, software would have to change the segment register as well as the offset. This was very inefficient in the CPU, and it was much better to limit memory block access to 64k at a time. The video card designers recognized this, and built the hardware with bank switching so that software would not have to change the CPU segment register to address the whole display memory.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2019-06-04T21:20:47.903" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11237" PostTypeId="1" AcceptedAnswerId="11238" CreationDate="2019-06-04T22:01:43.317" Score="2" ViewCount="167" Body="&lt;p&gt;Related to my &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11234/4378&quot;&gt;previous question around VGA framebuffer being limited to 64kB &lt;/a&gt; I started to wonder if there was any extension cards (or similar) using more than 64kB of address space in linear fashion, ie providing related and continuous memory that could be understood as larger than a single 64kB block. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a vague feeling EMS might’ve worked this way, providing multiple “slots” that could take up more than 64kB in total. This however feels a bit borderline case as these slots are accessed independently. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In nutshell, I’m looking for any device that would’ve needed segment arithmetic (similar to huge pointers) &lt;/p&gt;&#xA;" OwnerUserId="4378" LastActivityDate="2019-06-05T08:37:06.043" Title="ISA Extension cards using more than 64kB" Tags="&lt;ibm-pc&gt;&lt;memory-layout&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11238" PostTypeId="2" ParentId="11237" CreationDate="2019-06-04T22:27:19.433" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I started to wonder if there was any extension cards (or similar) using more than 64kB of address space in linear fashion&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Any kind of card could carry continuous memory with more than 64 KiB. There was no segmentation or 64 KiB chunks in the bus design. ISA slots carried a linear address - 20 bit for 8-bit (PC/XT) cards and 24 for 16-bit cards (AT).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, to expand an original PC past 64 KiB, any memory must be added with one (or more) cards in a continuous fashion after the mainboard memory. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have a vague feeling EMS might’ve worked this way&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. EMS just used (by default *1) a 64 Ki window to place four 16 Ki pages, that could be selected from whatever memory the card offered. The regions pages in were not (didn't have to be) continuous.  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I’m looking for any device that would’ve needed segment arithmetic (similar to huge pointers)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Having a memory region of more than 64 KiB doesn't mean the use of pointer arithmetic at all. That's only necessary for &lt;strong&gt;data&lt;/strong&gt; of more than 64 KiB which is addresses on byte level and handled as a single continuous area.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Some could as well use more or less than four pages and even spread them out in non continuous configurations.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-04T22:34:11.480" LastActivityDate="2019-06-04T22:34:11.480" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11239" PostTypeId="2" ParentId="11219" CreationDate="2019-06-04T22:42:19.187" Score="19" Body="&lt;p&gt;In DOS you had direct access to the hardware; so you grabbed some good source of information about the card you wanted to support, and got down to code your routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A book which was often cited as a good source was &quot;Programmer's Guide to the Ega, Vga, and Super Vga Cards&quot;, by Richard F. Ferraro; I hadn't the luck to own it or read it, but it was fondly remembered by those who did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another invaluable source of information was Ralph Brown's Interrupt List; you can find a HTML conversion of the list here: &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/&quot; rel=&quot;noreferrer&quot;&gt;http://www.delorie.com/djgpp/doc/rbinter/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original was just made of (long) text files; and, if memory serves me correctly, there were some programs to navigate it more easily, at least in the later versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another nice collection of infomation was contained in the &quot;PC Game Programmer's Encyclopedia&quot;, or PC-GPE; a HTML conversion can be found here: &lt;a href=&quot;http://qzx.com/pc-gpe/&quot; rel=&quot;noreferrer&quot;&gt;http://qzx.com/pc-gpe/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You had at least three different ways to interact with a given piece of hardware; io ports, interrupts, and memory mapped registers. Graphic cards used all three of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The situation with audio cards was very similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing to consider is that attached to the video card was an analog CRT monitor. The older/cheaper ones were only able to sync to a given set of vertical and horizontal rates; but the newer/best ones were basically able to sync to any signal in a given range. That means that with the right parameters written to the video card registers, you could create some custom (or weird) resolutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Games aimed for broad compatibility, so they rarely used weird ones, while in the demoscene it was quite common (and custom resolutions were the norm in arcade games too.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, for example, Mode X was very popular with games! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was popularized by Michael Abrash on the pages of Dr. Dobb's Journal;&#xA;you got a 320x240 resolution, that, viewed on a 4:3 monitor, meant the pixels were square. So, for example, you could naively draw circles and they would look like circles; in 320x200 they were stretched, as the pixel aspect ratio was not 1:1, and you had to calculate and compensate for that while drawing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a planar mode, so by setting a register you could decide which planes would receive a write in the memory mapped area. For example, for a quick fill operation you would set all planes, and a single byte write would affect four pixels (one for each plane). That also helped to address all the 256 KB of the VGA memory using only a 64 KB segment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am positive there was a little utility which let you explore the VGA registers, where you could put whatever values you fancied, and, when you applied your settings,&#xA;you could finally see if your monitor supported the resulting output. But my memory is too weak right now to remember the name or the author of this program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another common trick was to change a part of the color palette during the horizontal retrace; done correctly, you could have more than 256 colours on screen. There was not enough time to change the whole palette on each line, so you had to be creative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(During vertical retraces instead there was enough time to change every colour, and it was done for example for fade in/fade out effects).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The most popular palette trick was probably changing the background color during tape loading on 8 bit machines (C64 for example).)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing that is often overlooked, was that the VGA card was effectively a small three channel DAC; creative people found ways to use and abuse that as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To a similar effect, Tempest for Eliza used the radio waves emitted by the monitor to transmit a radio signal which could be listened to with a common AM radio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whoa! This was a nice trip on memory lane! :)&lt;/p&gt;&#xA;" OwnerUserId="13791" LastEditorUserId="79" LastEditDate="2019-06-06T09:05:51.717" LastActivityDate="2019-06-06T09:05:51.717" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11242" PostTypeId="1" AcceptedAnswerId="11244" CreationDate="2019-06-05T04:33:36.537" Score="12" ViewCount="1497" Body="&lt;p&gt;An old &lt;a href=&quot;https://books.google.com/books?id=LNhQLiJ8TgQC&amp;amp;pg=PT350&quot; rel=&quot;nofollow noreferrer&quot;&gt;article on Windows 3.0 from &lt;em&gt;PC Magazine&lt;/em&gt;&lt;/a&gt; (June 11, 1991, page 348) said that:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Using standard mode, the Windows DOS extender and DOS Protected Mode Interface (DPMI) are available to Windows programs, but not to DOS programs&lt;/p&gt;&#xA;&lt;p&gt;Using 386 enhanced mode, the Windows DOS extender and DPMI are available to Windows programs &lt;em&gt;and&lt;/em&gt; DOS programs&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Why the same trick David Weise and Murray Sargent used to get Windows running in 80286 protected mode couldn't apply to other DOS programs?&lt;/p&gt;&#xA;" OwnerUserId="13798" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-06-06T17:05:28.597" Title="Why the DOS extender and DPMI were unavailable to DOS programs on 286 standard mode of Windows 3.0" Tags="&lt;history&gt;&lt;ms-dos&gt;&lt;operating-system&gt;&lt;windows-3.x&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11243" PostTypeId="2" ParentId="11234" CreationDate="2019-06-05T06:23:10.330" Score="6" Body="&lt;p&gt;When VGA was designed and released, it had only maximum of 256 kbytes of video memory. The memory of VGA is arranged to have 32-bit interface to the VGA chip to have four byte planes in parallel. Therefore there are only 64k addresses of 32-bit video memory, and data of up to four planes can be accessed with a single CPU access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VGA board can be configured for a 128k framebuffer at A0000h, but both 64k segments will access the 64k addresses of video RAM identically. The trick that makes standard Mode 13h look linear is implemented in hardware, it only uses every fourth address of video memory, and automatically selects the plane based on lowest 2 CPU addresses. Unchained modes need manual plane selection in software when writing to video memory. It would have taken extra logic to make the whole video memory look like linear, and this was just not so important as it already was quite complex and it was enough make it compatible with EGA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in short, the VGA hardware is made to have four bytes accessible via single CPU address so there are only 64k memory addresses the CPU can access.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-06-05T06:23:10.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11244" PostTypeId="2" ParentId="11242" CreationDate="2019-06-05T07:45:21.317" Score="25" Body="&lt;p&gt;TL;DR: on 286s in standard-mode Windows, DOS programs run one at a time in real mode, with Windows suspended, so the restrictions of enhanced mode which rendered DPMI necessary don’t apply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://blogs.msdn.microsoft.com/murrays/2006/12/07/saving-windows-from-the-os2-bulldozer/&quot; rel=&quot;noreferrer&quot;&gt;“trick”&lt;/a&gt; used to allow unmodified Windows 2 programs to run in protected mode on a 286 relies largely on the fact that Windows provides a full operating system API to programs running on it, and that that API defines memory allocation rules precisely. In particular, memory allocation returns handles, not pointers, and pointers are only available when a memory block is locked (which is supposed to be a short-lived state); and segment arithmetic isn’t allowed in general (and where it is allowed, the allowable calculations are pre-determined).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this means that &lt;em&gt;for Windows programs&lt;/em&gt; the Windows kernel could be modified in such a way that it continued to provide valid segments (descriptors now, and no longer memory offsets) to programs, since it can know ahead of time all the values that a running program is liable to load into a segment register, and the sizes of the corresponding memory blocks. Modifying the kernel and supporting DLLs in this way was itself a feat of engineering, and took quite a while; but it didn’t involve modifying Windows programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Under DOS, there are no such rules; memory is allocated as effectively pointers into physical memory, pointer arithmetic is standard practice, including with segment registers, and most DOS programs expect to be able to read and write from anywhere in memory. This means that there is no general way to adapt a program to run in protected mode while protecting it from other programs (and the operating system from running programs), in software. (SST uses this sort of approach to debug real mode programs in protected mode, but it’s only trying to run a single program.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This has two consequences, on 286s: you can’t write a general-purpose protected-mode DOS extender (or replacement DOS) capable of running all existing DOS programs in protected mode; and you can’t even write a protected-mode operating system capable of running all existing DOS programs in real mode either without suspending most of the protected-mode side of things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So Windows 3 in standard mode (and OS/2 1.&lt;em&gt;x&lt;/em&gt;) is capable of running DOS programs, one at a time, but when a DOS program is running, everything else is mostly suspended, and the CPU is in real mode. Thus there is no need for a DOS extender; it might be useful for the operating system to provide one, if everyone could agree on a standard API, but since protected-mode DOS programs need to provide their own DOS extender anyway, there wasn’t much use for one in the early Windows 3 days. (This isn’t the full story with standard-mode Windows on 386s, where &lt;a href=&quot;https://en.wikipedia.org/wiki/Virtual_Control_Program_Interface&quot; rel=&quot;noreferrer&quot;&gt;VCPI&lt;/a&gt; plays a role, but I’m mostly considering 286 constraints since that’s the scope of the question.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enhanced mode on 386s is a different matter. Here, the CPU provides additional features which allow real-mode DOS programs to run in parallel with a protected-mode operating system and protected-mode tasks (and other real-mode DOS programs), thanks to paging and V86 mode. However, protected-mode DOS programs still require special handling: there can only be one protected-mode “master”, and if that’s Windows — or rather, its &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20100517-00/?p=14013&quot; rel=&quot;noreferrer&quot;&gt;32-bit virtual machine manager&lt;/a&gt; — or any other protected-mode environment, a protected-mode DOS program can’t set up its own extender and will fail to run. This is where DPMI comes in: it’s an API which allows programs to enter and leave protected mode, allocate memory, call real-mode services etc., in the same way, regardless of what is implementing the extender. So Windows provides a DPMI implementation, DOS extenders also provide DPMI implementations (and typically, clients), and protected-mode programs can be written using DPMI and the world is again a happy place (so says anyone who has never actually tried to write a protected-mode program).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-06-05T15:12:04.527" LastActivityDate="2019-06-05T15:12:04.527" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11245" PostTypeId="2" ParentId="11237" CreationDate="2019-06-05T08:37:06.043" Score="2" Body="&lt;p&gt;Any super VGA card that provides linear access to frame buffer, as the 16-bit ISA slot allows for 16MB address space. For 8-bit ISA slots, the limit just is 1MB. It is possible to put anything anywhere you want as long as it does not interfere with anything else. For example PCs sold with only 512 KB of memory could be expanded to 640 KB by putting a RAM card that maps 128k from 80000h to 9FFFFh. Some EMS card could provide that 128k there and access the rest of the EMS via the 64k page frame. There just were not many things that would require mapping more than 64k to CPU, let alone even 64k.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-06-05T08:37:06.043" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11246" PostTypeId="1" CreationDate="2019-06-05T11:14:32.367" Score="3" ViewCount="306" Body="&lt;p&gt;I remember seeing a computer with 24-bit graphics at a computer store in the mid-1980s.  It was not a normal PC with a high-end graphics board installed; the graphics came standard, possibly with three 8-bit graphics boards pre-installed.  In my memory this was a DEC Rainbow, but I looked that up, and that seems to have been an unremarkable business machine with just 1-bit/pixel.  Now I am thinking it may have been a high-end TI 808x machine aimed at the professional market (unlike the TI 99/4).&lt;/p&gt;&#xA;&lt;p&gt;As I remember, this machine did not last very long.  There was very little software available supporting 24-bit graphics on PCs, and, while an MS-DOS machine, it was not considered a PC Clone.  Does anyone else remember such a thing?  What was it?&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="15334" LastEditDate="2020-11-15T11:58:40.493" LastActivityDate="2020-11-15T11:58:40.493" Title="Mid-1980s 808x computer with 24-bit graphics" Tags="&lt;identify-this-computer&gt;&lt;color-display&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11247" PostTypeId="1" AcceptedAnswerId="11248" CreationDate="2019-06-05T11:38:30.707" Score="7" ViewCount="598" Body="&lt;p&gt;I believe the 80286 had a prefetch instruction queue, but did it have any other forms of cache? Was the 80386 the first x86 CPU to have a cache?&lt;/p&gt;&#xA;" OwnerUserId="7413" LastActivityDate="2020-04-09T09:46:47.933" Title="What was the first x86 CPU to use a cache of any kind?" Tags="&lt;x86&gt;&lt;cache&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11248" PostTypeId="2" ParentId="11247" CreationDate="2019-06-05T12:01:18.380" Score="13" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80486&quot; rel=&quot;noreferrer&quot;&gt;486&lt;/a&gt;, introduced in 1989, was the first x86 CPU to include a cache. It added cache-supporting instructions to the x86 ISA such as &lt;a href=&quot;https://www.felixcloutier.com/x86/invd&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;INVD&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://www.felixcloutier.com/x86/wbinvd&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;WBINVD&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80386&quot; rel=&quot;noreferrer&quot;&gt;386&lt;/a&gt; didn’t have an on-board cache, but it could be associated with an 82385 controller to use an external cache. Some later 386-compatible CPUs, such as IBM’s 386SLC, included on-board cache; Intel’s own 386SL CPUs included a cache controller, but I don’t think they were available with on-board cache (there are conflicting opinions on the Internet). There were also 386 replacements such as Cyrix 486DLC upgrade processors, with on-board cache; since they were upgrade processors, they ended up &lt;a href=&quot;http://www.os2museum.com/wp/386-cache-coherency/&quot; rel=&quot;noreferrer&quot;&gt;having to deal with various cache coherency issues&lt;/a&gt; in ways Intel hadn’t planned for, since motherboard implementers didn’t necessarily take cache requirements into account.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-04-09T08:49:31.910" LastActivityDate="2020-04-09T08:49:31.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11249" PostTypeId="2" ParentId="5269" CreationDate="2019-06-05T12:53:07.923" Score="4" Body="&lt;p&gt;A number of British 8-bit home computers built around Ferranti ULAs used page mode in some way. The timings for DRAM are tricky. If you look at the timings they aren't nice multiples. Even with, say, a 16 MHz crystal there's going to be cludges.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sinclair Spectrum - As mentioned by OP. There is a byte of attribute data (RGB foreground, background, intensity bit and flash) per 8x8 bit-mapped character cell.  &lt;a href=&quot;https://www.amazon.co.uk/ZX-Spectrum-Ula-Microcomputer-Computer/dp/0956507107&quot; rel=&quot;nofollow noreferrer&quot;&gt;The ZX Spectrum Ula: How to Design a Microcomputer&lt;/a&gt; book goes into some detail about how the memory is arranged such that these nine bytes end up in the same DRAM row, and then a few pages later shows a diagram with the wrong timings. This prevents too much conflict with the Z80, particularly the 16K Spectrum. &lt;/li&gt;&#xA;&lt;li&gt;Amstrad (non-Sinclair) 8-bits (apparently including 8256, which uses a big CPLD) - These have a normal bit-mapped frame buffer. Two bytes are read in pairs between each CPU access. It seems the effect of this is to keep the Z80 M-cycles to be effectively a multiple of four T-cycles (i.e. clock cycles). M-cycles would usually be 3 or 4 cycles. Hence sometimes you'll see the clock speed quoted with an odd number - it's 4 MHz with a few skipped.&lt;/li&gt;&#xA;&lt;li&gt;Acorn Electron. (In most machines the hot Ferranti ULA with very high failure rate is replaced by a VLSI Technology CMOS ASIC.) A 32K machine using only 4164 (space for a 4464 alternative), means that the DRAM data bus is only 4 bits wide! Whilst with 230 ns that could be accessed at 4 MBps, timing makes it easier to use page mode to access both nibbles of every byte. The 6502 really bashes the bus - every cycle, as there is it provides no way to share. So Z80-style tricks wont work.&lt;/li&gt;&#xA;&lt;li&gt;Oric-1/Atmos - Probably does something similar. It has very odd 6x8 block+attribute modes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's strange that it wasn't used more extensively. Take the 90's Acorn A3010/A3020/A4000 series computers. With modern RAM you can &quot;overclock&quot; them to twice their original speed. With the DRAM (+video and I/O) controller integrated, page mode would have been an easy win.  &lt;/p&gt;&#xA;" OwnerUserId="11003" LastActivityDate="2019-06-05T12:53:07.923" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11251" PostTypeId="2" ParentId="11090" CreationDate="2019-06-05T15:06:41.797" Score="3" Body="&lt;p&gt;We have been corresponding with David Brock at the Computer History Museum and he’s very excited about the chip. Mr. Brock has requested a phone interview with my father to add to the musuem’s collection&lt;/p&gt;&#xA;" OwnerUserId="13664" LastActivityDate="2019-06-05T15:06:41.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11252" PostTypeId="2" ParentId="11219" CreationDate="2019-06-05T15:10:16.927" Score="3" Body="&lt;p&gt;Early PC computing was the age of banging hardware directly.  Your (typically assembler) code wrote directly to control registers and video memory.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as supporting multiple video cards, real easy: &lt;em&gt;we didn't&lt;/em&gt;.  The supported hardware was directly stated right on the spine of the game box.  You needed to have that hardware.  This wasn't hard; generally nobody expected games to run on an MDA (Monochrome &lt;em&gt;Display&lt;/em&gt; Adapter, no G for graphics since it had none). That left CGA and later, EGA.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;It wasn't that we didn't want APIs.  I even tried to write APIs.  But this was an age when you were &lt;strong&gt;counting processor clock cycles&lt;/strong&gt;.   You &lt;em&gt;had&lt;/em&gt; to get it done in the cycles available. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You couldn't afford the cycles for the subroutine call and return!  &lt;/li&gt;&#xA;&lt;li&gt;Let alone all the parameter passing (moving parameters into the standard locations the subroutine wants). &lt;/li&gt;&#xA;&lt;li&gt;Or the de-referencing needed for every iteration of the operation, since you have to use a memory location specified in a call parameter, instead of being able to hard-code it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;And mind you, those limitations applied to &lt;strong&gt;my personal&lt;/strong&gt; API optimized for that game. If a third party entity wrote &lt;strong&gt;one&lt;/strong&gt; all-singing, all-dancing API intended as the one API for all applications, then much more would be abstracted, and the above overhead would be much worse.&lt;/em&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's less of a problem today, because the graphics are so large and complex that API overhead is a smaller fraction. Also, there is CPU to throw at the problem; you can just let the playtesters bump the minimum CPU requirement.  We couldn't do that because most of the market was 4.77MHz 8088’s.&lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2019-06-05T15:37:11.837" LastActivityDate="2019-06-05T15:37:11.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11253" PostTypeId="2" ParentId="11234" CreationDate="2019-06-05T15:57:05.373" Score="5" Body="&lt;p&gt;The VGA design is inherited directly from the EGA design, though with a few extra features.  Most considerations apply equally to both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although it is possible to treat the EGA or VGA memory as four banks of 65,536 octets, the EGA was designed to let it be treated more usefully as 65,536 groups of four octets, where each group had a single assigned CPU address.  Within each group of eight pixels, each pixel would use one bit taken from each octet.  The EGA and VGA have a 32-bit buffer that gets loaded from all four groups of pixels whenever an address is read, and each write will store to each group of 32 pixels a pattern which is based upon the value written, the value of some configuration and parameter registers, and the contents of the buffer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This made it possible to perform many kinds of read-modify-write operations on a group of pixels at a time.  The CPU would read a byte, ignore the result, and then write a value that indicated how the group of bytes should be modified.  The display card would then combine the value in the buffer with the value that was read and store the modified result to all 32 bits.  This allowed for bytes in display memory to be updated with a single read-modify-write sequence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alas, a couple aspects made this design far less useful than it could have been.  They largely boil down to the fact that for various technical reasons, reading display memory is extremely slow, and every action on a group of 32 pixels would require four individual read-write sequences.  If the computer had enough &quot;main&quot; RAM to maintain a copy of the screen, building the display contents in RAM and blindly outputting to the display would almost always be faster than trying to use the display's hardware to expedite the process.  On slow machines the display hardware could offer some speed advantage, but as main-CPU speed increased the extra display hardware became more and more useless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, the designers of the EGA and VGA had expected that the ability to update multiple bytes at once would be useful, and thus designed their architecture to facilitate it.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-06-05T15:57:05.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11254" PostTypeId="1" CreationDate="2019-06-05T16:30:56.430" Score="6" ViewCount="480" Body="&lt;p&gt;The game I'm trying to identify is a side-scrolling platformer where the protagonist is a man wielding a six-shooter revolver. I think I played a demo or shareware version as it only contained one level (or even portion of it). The level  was a castle interior, and you had to shoot some sort of demons - &lt;a href=&quot;https://en.wikipedia.org/wiki/Chort&quot; rel=&quot;nofollow noreferrer&quot;&gt;chorts&lt;/a&gt; perhaps, at least they looked similar. I'm pretty sure they were gray, had pig noses, and wielded polearms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like I said, it was probably a demo or shareware, and after you did some progress a full-screen picture with some text appeared and you couldn't play anymore. I think the text was in German. There was a demon - or perhaps minotaur? - and a damsel in distress.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some other facts I remember:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I played it under Windows (but it is likely to be a DOS game)&lt;/li&gt;&#xA;&lt;li&gt;I think there was no title screen / menu. You launched the .exe and immediately started to play.&lt;/li&gt;&#xA;&lt;li&gt;Also I wasn't able to find an obvious way to exit the game. After the full-screen message I just killed the process.&lt;/li&gt;&#xA;&lt;li&gt;Ammo was limited. I think the GUI contained a revolver cylinder showing how much bullets you have left.&lt;/li&gt;&#xA;&lt;li&gt;I think I played it around '95-98 (but the game is probably way older - beginning of 90s perhaps?)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It was long time ago, so some of these details may be distored or plain false memories.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does any of it rings a bell?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks a lot!&lt;/p&gt;&#xA;" OwnerUserId="13804" LastEditorUserId="4921" LastEditDate="2020-01-16T06:34:38.817" LastActivityDate="2020-01-16T06:34:38.817" Title="90s game about a man with a revolver fighting demons" Tags="&lt;identify-this-game&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11255" PostTypeId="2" ParentId="8595" CreationDate="2019-06-05T17:21:41.403" Score="1" Body="&lt;p&gt;Could it be &lt;a href=&quot;https://store.steampowered.com/app/358230/Paganitzu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Paganitzu&lt;/a&gt;? It has snakes, caves, turn-based, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=vF1JKxiu0XU&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=vF1JKxiu0XU&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13804" LastEditorUserId="129" LastEditDate="2019-06-05T18:10:01.060" LastActivityDate="2019-06-05T18:10:01.060" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11256" PostTypeId="2" ParentId="11114" CreationDate="2019-06-05T20:09:27.767" Score="6" Body="&lt;p&gt;My answer is anecdotal, not authoritative, but hopefully it illustrates answers to your questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early-1990s I worked for a SCSI host adapter startup.  Part of being feature-complete in that market was to offer two ROM BIOS features: (a) an INT 13h boot loader (which allowed for the PC to boot off of a SCSI drive, as well as present other SCSI drives as though they were IDE) and (b) a ROM BIOS configuration program to configure the host adapter, format SCSI drives, set IRQ and port numbers, and so forth.  (If you used Adaptec cards in the 1990s, this was the &quot;Press Ctrl+A for Setup&quot; option you would see at boot time.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was tasked with (b) for our card.  Although our target market by that time was not 8086 IBM PCs, or even PC/ATs, compatibility was a high concern; no company wanted a lot of phone calls from unhappy users owning some off-brand machine you never heard of.  So, although writing directly to the video RAM was tempting, we stuck with INT 10h for compatibility reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because we were too cheap to license an existing box-drawing library -- they flourished in the 1990s, and some were small enough for ROM work -- I rolled my own &quot;mini-library&quot; that we wound up using in some simple DOS apps as well.  All it offered was box-drawing routines, color selection/highlighting, and a crude form-construction system to move a cursor between menu items (to traverse a tree of menus, &lt;em&gt;a la&lt;/em&gt; Gopher) and select/deselect radio buttons and checkboxes.  There was no need for free-form text input so the number of controls was quite limited.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Believe it or not, this was mostly written in C with inline assembly stubs for the INT 10h code and to talk with the host adapter (mostly INP/OUTP).  The entire ROM BIOS configuration was less than 10K as I recall, well under the 16K onboard ROM I was allocated.  (Some of the space was due to the text labels; I considered compressing all strings but abandoned that because we were out of time.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which was good, because the INT 13h ROM code (the (a) above) went too big (and it &lt;em&gt;was&lt;/em&gt; written in assembly) and had no space for the host adapter microcode (the object code that had to be loaded on the card's microcontroller).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution was to use a 32K ROM bank-switched by the host adapter.  This meant a portion of the INT 13h code had to be mirrored on my 16K &quot;side&quot; of the ROM so when the switch occurred the CPU continued executing the now-gone ROM code.  If the user pressed Ctrl+A the code would jump to my entry point; if the ROM was loading the microcode during its boot routine, it copied the microcode to a block of RAM and bank-switched back to its &quot;side&quot; of the ROM and continued.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tons of tricks and shortcuts were made to cram a lot of functionality into the ROM BIOS code.  C is often pish-poshed as too heavyweight compared to assembly, but it solved a lot of problems for us and cut development time.  (Also note my code ran &lt;em&gt;entirely&lt;/em&gt; off the stack; a lot of languages simply cannot do that.)  It was only two of us writing all of this and we were under time pressure.  I don't know we could have fit all of this in a single 16K ROM, but I bet we could've whittled it down further and (perhaps) avoided the need to bank-switch for the microcode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And remember: While my ROM configuration code was ephemeral (exiting required a reboot), the ROM boot loader hooked INT 13h and remained in memory.  This was a trick unto itself; it had &lt;em&gt;zero&lt;/em&gt; RAM at its disposal once the system was booted and could only use a limited amount of the stack during interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a miracle all this worked, and yet it did.&lt;/p&gt;&#xA;" OwnerUserId="4222" LastActivityDate="2019-06-05T20:09:27.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11257" PostTypeId="1" AcceptedAnswerId="11258" CreationDate="2019-06-05T20:48:00.183" Score="2" ViewCount="195" Body="&lt;p&gt;Having post-dated either, I came to understand the difference between paging and segmentation to be that the former refers to fixed blocks while the later can point anywhere. To do so, the segments are essentially a map from segment number to a (typically longer) base offset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm reading an article on the Z8000 and they talk about the segment register (only one, or did I miss something?). However, it appears this 7-bit number is simply tacked onto the front of the 16-bit offset to produce a 23-bit address. So if my original understanding is correct, isn't this really paging? Is there a mapping going on that I'm missing, or is my original definition incorrect?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-06-05T21:59:06.663" Title="Paging vs. segments in the Z8000" Tags="&lt;memory-layout&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11258" PostTypeId="2" ParentId="11257" CreationDate="2019-06-05T21:35:17.333" Score="3" Body="&lt;p&gt;The term &lt;em&gt;segmented mode&lt;/em&gt; in the Z8000 manuals is actually sort of a misnomer (or a mis-understanding when comparing to the same in Intel terminology)- The Z8001 actually supports linear 23-bit addressing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 23-bit addresses are stored in 32-bit register pairs or 32-bit immediate values (or 24 bits when stored on the stack). When used, only the lower 23 bits are significant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some limitations, for example in the relative jumps, register-relative addressing modes, and the DJNZ instruction - thus, basically anything that calculates an address based on register + offset, which cannot cross segment boundaries (but rather wrap &quot;within&quot; the segment). Absolute addressing modes, however, target a 23-bit memory address held in an immediate or a register pair.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm afraid that misunderstanding invalidates the rest of your question.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-06-05T21:40:57.273" LastActivityDate="2019-06-05T21:40:57.273" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11259" PostTypeId="2" ParentId="11257" CreationDate="2019-06-05T21:46:23.913" Score="6" Body="&lt;h2&gt;TL;DR&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Pages &lt;em&gt;are part&lt;/em&gt; of a larger address space, Segments &lt;em&gt;are an&lt;/em&gt; address space&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;And both are tools to organize a virtual address space which can be mapped onto real memory.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Preface:&lt;/h2&gt;&#xA;&lt;p&gt;It may be important to keep in mind that terms like Segment or Page aren't as hard defined as one may assume. Like next to any other term. Just take &lt;em&gt;Byte&lt;/em&gt;. Today it's automatic assumed to be 8 bit, but that' not entirely true. It has been used for many different units of 5 to 10 Bits. Same for Segment or Page - just think the usage of Page in the context of a 6502 to denote a 256 byte region aligned at a 256 byte border.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line, we need to be careful when assuming about terms, as one term can carry various meaning.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I came to understand the difference between paging and segmentation to be that the former refers to fixed blocks while the later can point anywhere.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, not really, as a Page can as well point anywhere in real memory (keep in mind, this is all about virtualization), as well as Segments can be of fixed size.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;To do so, the segments are essentially a map from segment number to a (typically longer) base offset.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The same way as a Page is - or not. Both are about mapping virtual address (of a system or a process space) space to real memory or some pointer for retrieval of its region.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm reading an article on the Z8000 and they talk about the segment register (only one, or did I miss something?).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Erm, no, each and every address could use a different segment. Also, we're not talking Z8000 but Z8001.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, it appears this 7-bit number is simply tacked onto the front of the 16-bit offset to produce a 23-bit address.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, the segment number is separate from the address. The segment number is fixed and will never be calculated or manipulated by the CPU (*1,*2). Only the 16 bit address is calculated in address operations. Of course, from the point of view of a simple memory controller, just providing 8 MiB (*3) of memory addressd by 7+16 bits, yes. But then there is case of using a MMU, like the Z8010 - or a diskrete one as well. It uses the 7 bit segment number issued by the CPU to map it to some arbitrary real memory chunk. Maybe adding process IDs or issuening segment fault interrupts for unassigned (swaped out) pages or alike.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So if my original understanding is correct, isn't this really paging?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. The basic difference between Paging and Segmentation is that Segments are closed address spaces. They carry no relation between each other. Each Segment is an address space of it's own. Pages on the other hand are parts of a common (single) address space.&lt;/p&gt;&#xA;&lt;p&gt;Or as practical example, incrementing an address pointer, pointing to the last byte of a segment, by one will make it point to the first byte of the same segment. While incrementing a pointer pointing to the last byte of a page by one will let it point to the first byte of the next page - unless it was the last page in the address space. In this case it will be pointing to the first byte of page 0&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there a mapping going on that I'm missing, or is my original definition incorrect?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I think you just mixed in the idea how the 8086 implemented segmentation with the fact that some segmented systems can have segments of varying size. Both are implementation details and not basic differences (*4).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - And will be presented on the bus right away, even before the effective 16 bit address is calculated.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Of course user code may manipulate segment numbers as part of a 32 bit operation. How useful this is may be is up to each user - or better how far the OS can tolerate it (*5).&lt;/p&gt;&#xA;&lt;p&gt;*3 - Or 48 MiB if address space information is used as well.&lt;/p&gt;&#xA;&lt;p&gt;*4 - After all, pages can as well have different sizes :)&lt;/p&gt;&#xA;&lt;p&gt;*5 - Here the fixed 64 KiB segment size does allow to view consecutive segments (by number) to be seen as continuous memory - but no CPU instruction will support this, meaning that all pointer operations have to be done in user code.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-06-05T21:59:06.663" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11260" PostTypeId="2" ParentId="11257" CreationDate="2019-06-05T21:55:45.170" Score="1" Body="&lt;p&gt;As a programmer, I'd say the (original) distinction is this: a 'segment' is supposed to be a mapping from an object in the program to the address space of the processor, i.e., a segment is one 'thing' as far as the program is concerned.  It quite naturally needs to be of variable length.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overlapping segments, in the manner of x86, are to my mind a misfeature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 'page', however, is a slice of the address space, typically fixed size, the point of which is management of the memory resources of the system. The relationship of pages to program objects is arbitrary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though I'm unfamiliar with the Z8000, the description in Wikipedia seems more like segmentation.  If you add 1 to the offset ffff, then you're addressing 0000 in the same segment, not 0000 in the 'next' segment (which would require updating the segment-number register).  And that's the crucial thing: programs in a paged address space are not expected to do special things when addresses cross page boundaries, whereas programs in a segmented address space may well do.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-06-05T21:55:45.170" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11261" PostTypeId="2" ParentId="11219" CreationDate="2019-06-05T22:27:37.743" Score="2" Body="&lt;p&gt;Like any hardware, video card may have some address in I/O space and memory space.&#xA;They are physically connected to bus (ISA bus back in 1980th).&#xA;When CPU writes to some memory address, videocard answers this and accepts data.&#xA;When CPU writes to some IO, same thing happens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means software may access it if it is aware of it's memory address and IO address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accessing some hardware mapped to some memory address:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MOV SOME_ADDR, AX ; Move value of AX register to address SOME_ADDRESS&#xA;OUT SOME_PORT, AX; Move value of AX to some port&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Same with C&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int* data = SOME_ADDR;&#xA;data[0] = '1'; //write '1' to SOME_ADDR.&#xA;outp(PORT, '1'); //to io&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;IBM PC compatible computers had several types of cards:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Monochrome Graphic Adapter&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Hercules &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CGA &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;EGA&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;VGA &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Each card had its own standard which was documented. All of them were backward compatible (i.e. VGA may emulate CGA). &#xA;VGA was the most complicated standard, there were huge books about it! &#xA;Standard declares which address should you use to access video card and which data should you write to card to show something on CRT monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, first you need to find out which card do you have (you can try to read this data from memory area filled by BIOS or ask user).&#xA;Then, you use standard to talk to card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VGA, for example, had a lot of internal registers. Developers wrote some data to IO port to select register, then wrote data to this register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Card memory was mapped, so you simply wrote data to some address (in some modes some cards had several pages of memory which you can switch).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But memory was not always plane. There was a character mode (in which each 2 bytes represent letter and it's attributes like color and bgcolor).&#xA;There was 13h mode where each byte represented color of pixel.&#xA;There were modes with several planars to speed up the card (see &#xA; &lt;a href=&quot;https://en.wikipedia.org/wiki/Planar_(computer_graphics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Planar_(computer_graphics)&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Video programming was not easy!&#xA;Some articles to read:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://wiki.osdev.org/VGA_Hardware&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://wiki.osdev.org/VGA_Hardware&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.brackeen.com/vga/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.brackeen.com/vga/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There was also high level BIOS api, but it was too slow to be used by games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may ask: &quot;But how do I render 3D with all of that?&quot;.&#xA;The answer is: you can't. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 80th and early 90th you had to render everything on CPU and then use video card API to show 2D image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really suggest you t read book about how they did it for Wolf3d: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://fabiensanglard.net/gebbwolf3d/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://fabiensanglard.net/gebbwolf3d/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first video card that supported SOME 3D APIs was &quot;Voodo 3DFX&quot;. It had API called &quot;Glide&quot;.&lt;/p&gt;&#xA;" OwnerUserId="11893" LastActivityDate="2019-06-05T22:27:37.743" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11262" PostTypeId="1" CreationDate="2019-06-05T22:28:56.073" Score="5" ViewCount="727" Body="&lt;p&gt;I'm debugging my 8080 emulator and I've gone the route of comparing it to the output of another tested emulator to see where I went wrong. When calculating the auxiliary carry flag, I used this algorithm for subtraction:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// a and b are uint8_t, cf_.ac is the auxiliary flag&#xA;a &amp;amp;= 0x0F; // lower nibble&#xA;b &amp;amp;= 0x0F; // lower nibble&#xA;cf_.ac = (a &amp;lt; b); // there must be borrow if minuend is less than subtrahend&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On the other hand, the emulator I'm comparing with uses this algorithm:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// hf is the auxiliary flag, a and val are uint8_t&#xA;const uint16_t result = c-&amp;gt;a - val;&#xA;c-&amp;gt;hf = ~(c-&amp;gt;a ^ result ^ val) &amp;amp; 0x10;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Our emulators are mismatching after this instruction:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Instructions Ran: 32&#xA;Program Counter: 022A&#xA;Memory Immediate: 0xFE&#xA;Instruction: CPI D8 0&#xA;Registers (B/C/D/E/H/L/A): 00 00 00 00 00 00 F5&#xA;Flags (Z/S/P/C/AC): 0 1 1 1 1&#xA;Stack Pointer: 7AD&#xA;Cycles: 305&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where my auxiliary flag is not set (&lt;code&gt;0xF5 - 0x00&lt;/code&gt; shouldn't set the AF flag?) while theirs is set. I don't completely understand their algorithm so I am not able logically tell if it's wrong. Is my algorithm faulty or is theirs? &lt;/p&gt;&#xA;" OwnerUserId="13631" LastEditorUserId="7946" LastEditDate="2019-06-06T09:37:37.303" LastActivityDate="2019-06-06T14:13:22.267" Title="Can someone explain this algorithm used to compute the auxiliary carry flag?" Tags="&lt;emulation&gt;&lt;8080&gt;" AnswerCount="3" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11263" PostTypeId="2" ParentId="11262" CreationDate="2019-06-05T23:29:54.507" Score="4" Body="&lt;p&gt;The auxiliary carry, or in z80 terms the half carry, records whether there was carry (or borrow) between bit 3 and bit 4 in the preceding arithmetic operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;CPI&lt;/code&gt; means compare immediate, so it uses the ALU to subtract the immediate value from the accumulator, then keeps the flags but throws away the result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably the relevant clue compared to the choice you've posted: &lt;code&gt;CPI&lt;/code&gt; doesn't pay any regard to the carry flag. It's like &lt;code&gt;SUI&lt;/code&gt;, not &lt;code&gt;SBI&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-06-05T23:29:54.507" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11264" PostTypeId="1" AcceptedAnswerId="11265" CreationDate="2019-06-06T09:10:27.363" Score="4" ViewCount="193" Body="&lt;p&gt;I remember playing this game on the &lt;code&gt;C=64&lt;/code&gt; in the late 80s or so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was 2d 'platformer' arcade game where you have to clean the screen from pills like Pac-Man, but in a different way. You would always start at the top of the screen. Your playing figure resembled a sort of excavator bucket or mining drill  which chomps the pills. While you are moving down (or right, left, or up again) through a bricked maze you leave a trace behind yourself. This trace should resemble a sort of rope or cable with where the bucket is attached to. The setting is that of a mining business.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your cable and the bucket shall not be touched by the villains which travel over the screen left to right or right to left in various levels and speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game levels are becoming more and more complicated and the villains faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think there where 12 or or 15 or 20 levels, but I can't tell for sure. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The graphics where rather coarse, even for that time, with a bright color set. The game speed was fairly fast.&lt;/p&gt;&#xA;" OwnerUserId="13812" LastActivityDate="2019-06-06T09:13:54.073" Title="Pac-Man-like: Playing a Excavator bucket or mining drill on a cable" Tags="&lt;commodore-64&gt;&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11265" PostTypeId="2" ParentId="11264" CreationDate="2019-06-06T09:13:54.073" Score="6" Body="&lt;p&gt;Just when I thought I wouldn't find it on my own and posting this question, I found it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's &lt;a href=&quot;https://www.c64-wiki.com/wiki/Oils_Well&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;Oil's Well&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13812" LastActivityDate="2019-06-06T09:13:54.073" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11266" PostTypeId="2" ParentId="11262" CreationDate="2019-06-06T10:58:16.917" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is my algorithm faulty or is theirs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What their algorithm does is check to see if there has been a carry from bit 3 to bit 4. If you add two bits (even subtraction is done by taking the twos complement and adding), the answers are as follows&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0 + 0 = 0&#xA;0 + 1 = 1&#xA;1 + 0 = 1&#xA;1 + 1 = 0 (+ carry)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So bit 4 of the result should be the same as bit 4 of the accumulator exclusive or with bit 4 of the immediate operand i.e. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(c-&amp;gt;a ^ val) &amp;amp; 0x10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, a carry from bit 3 would change that. So a carry will have occurred if&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;((c-&amp;gt;a ^ val) &amp;amp; 0x10) != (result &amp;amp; 0x10)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;!=&lt;/code&gt; is the same as exclusive or for single bits (and booleans) so you can rewrite the above as &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;((c-&amp;gt;a ^ val) &amp;amp; 0x10) ^ (result &amp;amp; 0x10)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which is clearly the same as &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(c-&amp;gt;a ^ val ^ result) &amp;amp; 0x10)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;They then invert that to get the half carry flag, their reasoning being (I think) that they did a subtraction rather than a twos complement addition.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;~(c-&amp;gt;a ^ val ^ result) &amp;amp; 0x10)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you use that formula on the Intel example (documented &lt;a href=&quot;http://altairclone.com/downloads/manuals/8080%20Programmers%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; under the &lt;code&gt;SUI&lt;/code&gt; description), which is 0 - 1, it gives the half carry flag as 0 which is correct according to Intel.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3297" LastEditDate="2019-06-06T11:04:54.717" LastActivityDate="2019-06-06T11:04:54.717" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11267" PostTypeId="2" ParentId="8595" CreationDate="2019-06-06T12:45:37.870" Score="1" Body="&lt;p&gt;It doesn't match all of your points 100%, but could you be thinking of &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Adventures_of_Lolo&quot; rel=&quot;nofollow noreferrer&quot;&gt;Adventures of Lolo&lt;/a&gt;&lt;/em&gt; or &lt;em&gt;Eggerland&lt;/em&gt; which it was based on?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Played on an old computer, not sure which kind. (early/late 1990s?)&lt;/li&gt;&#xA;  &lt;li&gt;Graphics were grid-based and &quot;8-bit-seeming&quot;. Locations included plains and caves.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a NES game from 1989. Mostly in a cave-like castle.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Movement was grid-based as well. I think the game was turn-based?&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not turn based and movement is free, but objects are originally positioned on a grid.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;The main character - which you moved around - might've been a gnome? Maybe not, though.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No on this point.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;One of the enemies which I remember clearly is a snake which usually does not move but &quot;wakes up&quot; when you're on the same row or column as it (unobstructed). It would then move (in a straight line only?) towards you. EDIT: Or actually - it might've killed you instantly in this case?&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The version that kills you instantly definitely exists, perhaps the moving one too. &lt;/p&gt;&#xA;" OwnerUserId="13815" LastActivityDate="2019-06-06T12:45:37.870" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11268" PostTypeId="2" ParentId="11262" CreationDate="2019-06-06T14:13:22.267" Score="2" Body="&lt;p&gt;Ассоrding to &lt;a href=&quot;https://s.zeptobars.com/kr580vm80a/vm80a.v&quot; rel=&quot;nofollow noreferrer&quot;&gt;this reverse-engineered verilog source&lt;/a&gt; of the &lt;a href=&quot;https://zeptobars.com/en/read/KR580VM80A-intel-i8080-verilog-reverse-engineering&quot; rel=&quot;nofollow noreferrer&quot;&gt;KR580VM80A&lt;/a&gt; (an USSR clone of i8080), auxilliary carry is set as if it is always an addition:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;psw_ac &amp;lt;= (c[3] &amp;amp; ~id_xra &amp;amp; ~id_ora &amp;amp; ~id_rxc) | (id_ana &amp;amp; (x[3] | r[3])); // line 922&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;while the normal carry flag is set to either non-inverted or inverted carry from the carry chain:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;           if (id_cmp | id_sbb | id_sub) // line 930&#xA;              psw_c &amp;lt;= ~(t2133 | id_rxc &amp;amp; x[0]);&#xA;           if (id_dad | id_sha | id_adc | id_add)&#xA;              psw_c &amp;lt;= t2133 | id_rxc &amp;amp; x[0];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;     t2133    &amp;lt;= ~id_rxc &amp;amp; c[7]; // line 888&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The reason behind that is that auxilliary carry flag is used &lt;em&gt;only&lt;/em&gt; in &lt;code&gt;DAA&lt;/code&gt;, which in turn corrects &lt;em&gt;only&lt;/em&gt; the result of &lt;em&gt;addition&lt;/em&gt;, as it is stated in the &lt;a href=&quot;http://altairclone.com/downloads/manuals/8080%20Programmers%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;instruction set manual&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the correct way to calculate auxilliary carry in i8080 is to treat both operands as addends.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-06-06T14:13:22.267" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11269" PostTypeId="2" ParentId="11195" CreationDate="2019-06-06T16:24:43.553" Score="2" Body="&lt;p&gt;No, they were independent developments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the situation is a little bit more complex. &lt;em&gt;Hurd is not just a Linux with a different kernel, also the structure of the OS is highly different.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GNU Hurd is a microkernel. That means that the actual kernel does as little as possible. The ordinary kernel functionality is being done by user space processes, communicating with the microkernel and with each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the ext4 filesystem driver is a kernel module in Linux. That means it is a collection of functions in a library, what converts the ext4 filesystem operations to block device operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Hurd, the ext2&lt;sup&gt;1&lt;/sup&gt; filesystem driver is essentially a daemon, service. Just like, for example, the Apache web server. The ext4 filesystem operations are talking with this daemon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Microkernel-based OS has also the feature, that the actual microkernel is actually an easily replaceable part of the system. The important part of the system is the collection of its daemons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GNU Hurd is the abbreviation of &quot;&lt;em&gt;Hird of Unix Replacement Daemons&lt;/em&gt;&quot;. During its development, the actually used microkernel was changed multiple times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, what we understand on the &quot;Linux kernel&quot;, is a &quot;microkernel + the collection of the Unix replacement daemons&quot; in the sense of the GNU Hurd.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some of the code of the daemons is probably derived from Linux kernel code. Particularly the filesystem drivers.&lt;/li&gt;&#xA;&lt;li&gt;Its microkernel is an entirely independent development from the Linux kernel.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The sum is that probably it has much Linux kernel code, it is mainly a different product (note, both systems being GPL, it is not a major question from the intellectual property view).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;sub&gt;As far I know, ext3/4 support is not developed yet.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="129" LastEditorUserId="129" LastEditDate="2019-06-06T16:48:09.757" LastActivityDate="2019-06-06T16:48:09.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11270" PostTypeId="1" AcceptedAnswerId="11273" CreationDate="2019-06-06T19:54:39.317" Score="2" ViewCount="574" Body="&lt;p&gt;I remember that many older computer or terminal keyboards were quite colorful, and apart from grey and white, often featured some orange, red, green or blue keys. I have seen some in computing centers and probably other places; they were already old and not very usual at that time. I do not remember which keys had the distinct bright colors, and why it was so designed. Like this one from &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:IBM_Model_M5-2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hGb7nm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hGb7nm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days some manufactures offer the possibility to build a custom keyboard, specifying the key colors among other things. It would be interesting to order a keyboard that would has a &quot;legendary&quot; coloring of the keys from the past.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples of keyboard coloring I am looking for should:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Feature colour keys, not just white/grey.&lt;/li&gt;&#xA;&lt;li&gt;Be notable (widespread at some point in the past, or used on some notable computers, or used in important mission).&lt;/li&gt;&#xA;&lt;li&gt;Historical design, not some recent invention.&lt;/li&gt;&#xA;&lt;li&gt;Somewhat uncommon.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What are some examples of such colourful keyboards?&lt;/p&gt;&#xA;" OwnerUserId="496" LastEditorUserId="4301" LastEditDate="2019-06-07T09:53:05.427" LastActivityDate="2019-06-07T09:53:05.427" Title="What are some notable historic keyboard designs with unusual colours?" Tags="&lt;keyboards&gt;" AnswerCount="3" CommentCount="7" ClosedDate="2019-06-07T07:55:11.163" ContentLicense="CC BY-SA 4.0" />
  <row Id="11271" PostTypeId="1" AcceptedAnswerId="11276" CreationDate="2019-06-06T20:08:45.270" Score="9" ViewCount="513" Body="&lt;p&gt;Back in 1981, my high school's computer classes were something like Computer Programming I and II, which taught BASIC on the Apple ][+, and a Computer Programming III class.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the III class, a couple of the more advanced students including me used some big IBM terminals to learn some Fortran (WATFIV) over a modem dialed in to a nearby university, but the rest of the class learned COBOL.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machines they used were basically desks, with the computer built in.  They had green CRTs embedded in them such that you looked down past the keyboard at the screen.  I believe each had an 8&quot; floppy drive to the side, where desk drawers would be.  What would these machines have been? (I suspect they were from IBM, but I'm not at all sure)&lt;/p&gt;&#xA;" OwnerUserId="4325" LastActivityDate="2021-02-05T06:24:02.210" Title="Desk computer with embedded CRT, 8&quot; floppy" Tags="&lt;ibm&gt;&lt;identify-this-computer&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11272" PostTypeId="2" ParentId="11270" CreationDate="2019-06-06T20:24:33.077" Score="4" Body="&lt;p&gt;&lt;em&gt;Posting ahead of this thread getting shut down for being primarily opinion-based...&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://deskthority.net/wiki/Space-cadet_keyboard&quot; rel=&quot;nofollow noreferrer&quot;&gt;space-cadet keyboard&lt;/a&gt; had a blue/grey theme and some &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/495/79&quot;&gt;strange keys&lt;/a&gt; (thanks to @StephenKitt for the &quot;strange keys&quot; link):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Mqo25.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Mqo25.jpg&quot; alt=&quot;Space-Cadet Keyboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-06-06T22:02:09.413" LastActivityDate="2019-06-06T22:02:09.413" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11273" PostTypeId="2" ParentId="11270" CreationDate="2019-06-06T20:54:30.143" Score="4" Body="&lt;p&gt;If you'll accept a regional selection, the Amstrad CPC was notably colourful:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7ffDk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7ffDk.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikipedia speculates 3m CPCs sold total, though the later ones were regular grey.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-06-06T20:54:30.143" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11274" PostTypeId="1" AcceptedAnswerId="11277" CreationDate="2019-06-06T21:39:22.433" Score="27" ViewCount="5904" Body="&lt;p&gt;When Intel introduced the 80486 in 1989, they included their first on-chip cache, ostensibly to compete better with Motorola, who had been including on-chip caches for 5 years (MC68020, 1984).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike the Motorola CPUs, Intel went with unified &lt;strong&gt;L1&lt;/strong&gt; cache for the '486. Then, they switched to separate Instruction &amp;amp; Data &lt;strong&gt;L1&lt;/strong&gt; cache with the Pentium and its successors. Why the switch, and why not use separate cache for the 80486, if it was obviously better?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="175" LastEditDate="2019-06-07T14:11:48.180" LastActivityDate="2019-06-10T12:10:22.187" Title="Why did Intel abandon unified CPU cache?" Tags="&lt;intel&gt;&lt;memory-layout&gt;&lt;cpu&gt;&lt;m68k&gt;&lt;cache&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11275" PostTypeId="2" ParentId="11270" CreationDate="2019-06-07T00:38:57.200" Score="3" Body="&lt;p&gt;DEC &lt;a href=&quot;https://en.wikipedia.org/wiki/VT52&quot; rel=&quot;nofollow noreferrer&quot;&gt;VT52&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/DECmate&quot; rel=&quot;nofollow noreferrer&quot;&gt;VT78&lt;/a&gt; had color keyboards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eKo5X.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eKo5X.jpg&quot; alt=&quot;VT52&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JruJI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JruJI.jpg&quot; alt=&quot;VT78&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3261" LastActivityDate="2019-06-07T00:38:57.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11276" PostTypeId="2" ParentId="11271" CreationDate="2019-06-07T02:31:30.110" Score="10" Body="&lt;p&gt;Might it have been an IBM 3741 data station?  It was basically a desk with a built-in keyboard and floppy drive (the first IBM product to use read-write diskettes), with a CRT off to the side.  Here's a site with a picture:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://ub.fnwi.uva.nl/computermuseum/ibm3741.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ub.fnwi.uva.nl/computermuseum/ibm3741.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wvV2g.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wvV2g.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="4325" LastEditDate="2021-02-05T06:24:02.210" LastActivityDate="2021-02-05T06:24:02.210" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11277" PostTypeId="2" ParentId="11274" CreationDate="2019-06-07T08:59:20.003" Score="43" Body="&lt;p&gt;I’m not sure the separate cache &lt;em&gt;was&lt;/em&gt; “obviously better” back when the Intel designers were working on the 80486, at least, not to the designers in question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But “better” might not even have been much of a factor. The design history of the cache systems in Motorola and Intel CPUs is quite different, which can explain the different approaches used in the 68040 and 80486.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Motorola side of things, the 68010 introduced a loop mode for tight loops, allowing them to run without instruction fetches from memory. The 68020 replaced this with a dedicated 256-byte instruction cache, but no data cache. The 68030 added a 256-byte data cache alongside this, with a modified Harvard architecture. The 68040 revamped the caches and expanded them to 4KiB each. The split cache is a natural progression given the architecture’s history.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Intel side of things, caches (apart from the TLB and prefetch buffer) didn’t appear on-CPU until the 486. On the 386, it was common enough to have external caches &lt;em&gt;via&lt;/em&gt; the 82385 cache controller; this was unsurprisingly a unified instruction and data cache. So pulling the cache on-die with a single MMU and a unified cache feels logical given the history here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both the 68040 and the 80486 benefited from process changes which allowed them to have million-transistor budgets (in both cases, up from under 300,000 transistors in the previous generation to around 1.2 million transistors). The bump seems huge, but once you pull in the FPU, MMU(s), add cache etc., there are still compromises to be made (famously, to the FPU on the 040). In both cases too, the new CPUs were evolutions in their respective architectures, not the huge revamps that the Pentium ended up being; so it’s plausible to imagine the designers working mostly on merging existing external features and improving the core design incrementally, rather than looking around and re-evaluating all the design choices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the time they started working on the Pentium, the Intel designers had some feedback from the 486 cache. The 486’s architecture had been “good enough” that they could double and even triple its internal clockspeed; this means that the cache subsystem was sufficient to keep the instruction units busy in many workloads (since clock multiplying without improving the memory bus significantly relies on cache even more heavily). However the 486 did suffer from some level of cache contention, and this became particularly troublesome with the additional processing bandwidth in the Pentium instruction units, especially given the availability of two instruction pipes (the U and V pipes). According to &lt;em&gt;Inside the Pentium&lt;/em&gt; (Bob Ryan, Byte Magazine, May 1993), this is the main factor which drove Intel to split its cache into two. In addition, the TLB and cache tags were changed to be triple ported, to allow simultaneous access from both ALUs. &lt;a href=&quot;http://pages.cs.wisc.edu/~cain/images/diephotos/Intel_Pentium_overlay.gif&quot; rel=&quot;noreferrer&quot;&gt;The Pentium die layout&lt;/a&gt; certainly benefited from the split caches, and this is a common reason to &lt;a href=&quot;http://web.archive.org/web/20180721141908/http://alasir.com/articles/cache_principles/cache_hierarchy.html&quot; rel=&quot;noreferrer&quot;&gt;favour split caches&lt;/a&gt; (the data and instruction caches are used by different sections of the CPU, and they can be laid out close by).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Importantly given the development practices at the time on x86, the split caches are coherent on x86, so that the caches don’t cause problems with self-modifying code.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-06-07T12:11:01.427" LastActivityDate="2019-06-07T12:11:01.427" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11278" PostTypeId="2" ParentId="11271" CreationDate="2019-06-07T12:36:22.010" Score="4" Body="&lt;p&gt;Possibly a &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_Model_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;TRS-80 Model II&lt;/a&gt;? That would fit with the previous mention of using consumer-class machines for the students. There was also a version of Microsoft COBOL available.&lt;/p&gt;&#xA;" OwnerUserId="484" LastActivityDate="2019-06-07T12:36:22.010" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11279" PostTypeId="2" ParentId="11274" CreationDate="2019-06-07T13:17:03.163" Score="21" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11277/6659&quot;&gt;Stephens Answer&lt;/a&gt; already carries most implications, so this is merely an add-on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First to keep in mind is that the 68k was way more in need of a cache than x86 CPUs, as its memory access was in line with execution, while the x86 prefetch buffer used 'free' cycles to read ahead, thus utilizing the memory much better than the 68k could do (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, it depends on your processor structure to make separate caches worthwhile. Both CPUs use a single address space for instruction and data (&lt;a href=&quot;https://en.wikipedia.org/wiki/Von_Neumann_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;von Neumann&lt;/a&gt; style) thus the simplest way (*2) to speed up memory access (*3) is to add a cache which operates on the plain memory interface without any change to the CPU. Caching that way is a feature of the memory system transparent to the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regions that get accessed get cached into faster memory (*4) in hope of future reuse from there. That's what happened with the various cache designs for 286/386 systems. Simple and straightforward. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now while a simple (unified; *5) cache is a quick and great solution, not all memory locations are equal. Most notably, instructions get reused more often than pure data. So if chip space is scarce (*6) and only a few bytes of cache are possible, then it will be better to reserve them for (hopefully) repeated instructions. That's the way Motorola went on the 68020 by adding 256 bytes of instruction cache.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such a 'just instructions' cache isn't more complicated than a generic cache. The single difference is that data read access doesn't get cached (*7), everything else works the same. So far the 68020 did not bring a separate cache, but a partial one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was the 68030 that introduced a data cache of 256 bytes as well - plus adding a burst mode to read up to 16 bytes at once. Adding a data cache adds complications. Separating instruction and data cache is often described as &lt;a href=&quot;https://en.wikipedia.org/wiki/Modified_Harvard_architecture#Split-cache_(or_almost-von-Neumann)_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;Modified Harvard&lt;/a&gt;. While it's quite easy to add two separate caches on a true Harvard architecture, it's a nightmare for von Neumann style memories. Now each of the caches can hold the same data, so they must be synchronized with each other and memory as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motorola's decision to go with separate caches in the '030 is more likely a result of keeping investment down. After all, the '030 is mainly a shrink of the '020, so adding a data cache (*8) on top might have been less work than redesigning the whole cache system. Also, since the added cache wasn't exactly large, keeping it divided it preserved the speed characteristics the 68020 already showed from its instruction cache.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the 68030 became available, desktop 80386 systems were already sold with up to 64 KiB of cache. The sheer size of a more than 100 times bigger cache made Motorola's effort seem useless in comparison (*9). Intel kept the single cache for the 80486 (1989) but now integrated 8 KiB of cache right onto the CPU - which didn't stop mainboard manufacturers from adding external caches, now in the region of 256 KiB to 1 MiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fact: &lt;strong&gt;Size does matter (and simply beats strategy).&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Stephen already mentioned, these designs were still good to feed the processing units of a 486 fast enough. So when the 68040 came around, Motorola just increased the size to 4+4 KiB cache with just little improvements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While Motorola's strategy wasn't bad, it wasn't superior either. And Intel's switch to separate the P5's cache into two wasn't driven by some inherent advantage, but by 'need for speed'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 486es cache was 4-way associative, meaning each memory location could be buffered in any of 4 cache locations. To find the right location, the tags need to be compared; this takes time. by splitting the cache into two separate parts, this could be reduced to a 2-way system while keeping (in most cases) the same performance - but due to the less complicated hardware, its response time could be improved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The basic idea of Intel's switch is not so much about specializing on instruction or data, but split the cache between two memory regions that (hopefully) overlap as little as possible, resulting in the same (lower) thrashing rate of a 4-way system but using the faster hardware of a 2-way system.&lt;/strong&gt; Gaining a higher hit rate within instructions is a rather welcome side effect.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Motorola tried to counter this with a tiny cache in the 68010 realizing the so called loop mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - After adding ever faster RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Keep in mind, it only makes sense if the processor can handle instruction and data faster than it can be accessed from standard memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - The stuff we couldn't afford for all of the RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Isn't it strange to call something unified if it wasn't divided before? A great example of a retroactive definition we take as equal to its counterpart, despite the fact that it was only coined afterwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - And it always is - just the magnitude changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - Data write will still be used to update/trash entries, thus allowing to survive self modifying code or data and code intermingled. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - And the MMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*9 - No doubt, it was a great benefit compared with the '020, still...&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="10289" LastEditDate="2019-06-10T12:10:22.187" LastActivityDate="2019-06-10T12:10:22.187" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11280" PostTypeId="1" AcceptedAnswerId="11323" CreationDate="2019-06-07T15:57:25.480" Score="2" ViewCount="262" Body="&lt;p&gt;A few years ago, I remember seeing a video of Ray Kurzweil discussing how linear programming was an example of how software (algorithms) - independent of hardware - is also getting faster (exponentially) over time.  He referenced a paper on this topic I believe that showed the historical speed increase on constant hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't seem to find this paper, however.  Is anyone aware of it?&lt;/p&gt;&#xA;" OwnerUserId="8856" LastActivityDate="2019-06-10T17:43:18.443" Title="Historical speed of linear programming solvers" Tags="&lt;history&gt;&lt;software&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11281" PostTypeId="1" CreationDate="2019-06-07T17:05:33.170" Score="12" ViewCount="1284" Body="&lt;p&gt;Sometime in 1980 (or maybe 1981) my school district purchased its first batch of Apple II+ computers.  I remember vividly they had absolutely no idea what to do with them, and so the machines were placed in what had been the typing lab - one day we were learning touch typing on IBM electric typewriters and the next day we were looking at a blinking cursor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware our specific school district purchased consisted of Apple II+ computers, each with a single floppy disk drive and a small (maybe 8&quot;) black and white monitor.  The monitor was almost a perfect cube with a metal case (painted grey-ish blue) and was mounted on two 1&quot; wide rectangular strips of metal painted Apple beige.  As I remember it, the back of the monitor was greyish, &lt;em&gt;possibly&lt;/em&gt; with controls for horizontal hold and vertical hold (although I am not sure of that anymore).  The monitor &lt;em&gt;may&lt;/em&gt; have had a handle on the top, but again I am uncertain. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no other details to go on except the image in my memory of what these systems looked like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to identify the monitor and thought that maybe Apple (before offering it's own line of monitors) might have picked a specific 3rd party monitor and bundled it with the computers when selling to schools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone offer any insight into what make/model/manufacture this monitor might have been?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As always, the responses here on Retro are awesome - &lt;strong&gt;thanks everyone!&lt;/strong&gt; - the Sanyo VM4209 and VM4509 are both very similar to my recollection, but I don't think either of them is the display I am remembering (although I will admit after 30 years I might have confused some details).    &lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="2080" LastEditDate="2019-06-07T20:19:42.880" LastActivityDate="2021-01-19T15:25:29.730" Title="Did Apple bundle a specific monitor with the Apple II+ for schools?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;apple&gt;&lt;crt-monitor&gt;" AnswerCount="4" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11282" PostTypeId="2" ParentId="11281" CreationDate="2019-06-07T17:26:43.657" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Sometime in 1980 (or maybe 1981) my school district purchased it's first batch of Apple II+ computers. The hardware our specific school district purchased consisted of Apple II+ computers, each with a single floppy disk drive and a small (maybe 8&quot;) black and white monitor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The only monitor Apple sold with the II series in 1980/81 was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Monitor_III&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple III Monitor&lt;/a&gt;. It was a perfect fit for the Apple II base. Much later, in 1984, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Monitor_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;Monitor II&lt;/a&gt; was introduced. It was designed to match the IIe.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The monitor was almost a perfect cube with a metal case (painted grey-ish blue) and was mounted on two 1&quot; wide rectangular strips of metal painted Apple beige.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That doesn't sound like any Apple monitor at all. So it's safe to assume it was some generic third-party device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bell &amp;amp; Howell Apples (&lt;a href=&quot;http://oldcomputers.net/bellandhowell.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Black Apple&lt;/a&gt;) were often sold with a 9&quot; Sanyo B&amp;amp;W screen. This monitor was also offered by B&amp;amp;H. It had rather cube-like dimensions, with a black front, but was otherwise grey metal. Controls were hidden behind a horizontal door on the front.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-08T08:04:24.937" LastActivityDate="2019-06-08T08:04:24.937" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11283" PostTypeId="2" ParentId="11281" CreationDate="2019-06-07T18:19:45.370" Score="10" Body="&lt;p&gt;Here's a &lt;a href=&quot;https://www.reddit.com/r/VintageApple/comments/3snpqd/i_found_a_sanyo_vm4209_the_monitor_used_in_the/&quot; rel=&quot;noreferrer&quot;&gt;Sanyo VM-4209&lt;/a&gt; in a 1977 Apple II advertisement. It has a black handle on top (the VM-4509/DM 5109CX has a beige colored recessed handle):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sN2k1.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sN2k1.jpg&quot; alt=&quot;1977 Apple II advertisement&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And another photo to show the color of the case better:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PhZwZ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PhZwZ.jpg&quot; alt=&quot;Closeup photo&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-06-07T18:35:01.280" LastActivityDate="2019-06-07T18:35:01.280" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11284" PostTypeId="2" ParentId="11281" CreationDate="2019-06-07T18:27:25.440" Score="5" Body="&lt;p&gt;You are not alone, as I have the same memory. Very &amp;quot;cube-looking&amp;quot; 9-inch monitors were a common peripheral for the Apple ][/][ Plus. You will find many pictures online of this setup, and may even be lucky enough to find the canonical Sanyo monitor (Model VM4209) for sale. (Smell the RAREity!)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nDZTt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nDZTt.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-01-19T15:25:29.730" LastActivityDate="2021-01-19T15:25:29.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11285" PostTypeId="2" ParentId="8635" CreationDate="2019-06-07T19:54:21.363" Score="3" Body="&lt;p&gt;Are you talking about the Apple II port of &lt;a href=&quot;https://en.wikipedia.org/wiki/AtariLab&quot; rel=&quot;nofollow noreferrer&quot;&gt;AtariLab&lt;/a&gt; perhaps? I can't recall what they called it, but this is precisely how it worked. My info says it never made it out, but as is often the case in the late Atari days, I suspect some did. &lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-06-07T19:54:21.363" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11286" PostTypeId="1" CreationDate="2019-06-08T00:27:09.420" Score="30" ViewCount="7669" Body="&lt;p&gt;Was self-modifying-code possible using BASIC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parameters:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On commonly affordable home-computers before 1984&lt;/li&gt;&#xA;&lt;li&gt;Code that changes its own instructions while it is executing&lt;/li&gt;&#xA;&lt;li&gt;Using BASIC only&lt;/li&gt;&#xA;&lt;li&gt;Not using peek, poke or assembly language&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Possible types of solutions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there any machines on which the following theoretical example program might work?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 Let Line 20 = Print &quot;word&quot;&#xA;20 Print &quot;nothing&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Or just:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 Let Line 10 = Print &quot;word&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Or the following pseudo-code?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 Print &quot;10 Print &quot;word&quot;&quot; + [ A special carriage-return that makes the computer accept this as the new 'Line 10' ]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the example above, if you print the new line 10 to the screen, is there any special carriage-return that makes the computer accept this as the new 'Line 10'?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you did get the computer to modify a line, and you modified the line to be longer than it originally was, could it unknowingly overwrite part of the following line? Outside of program execution mode if you modify a line to be longer than it was, the computer knows how to shift data forward.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would probably have to ask a separate question to ask:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How was self-modifying-code used to save space?&lt;/li&gt;&#xA;&lt;li&gt;Were there any other interesting uses for self-modifying code that would have been possible on the machines specified in this question?&lt;/li&gt;&#xA;&lt;li&gt;Could you somehow set a data file as the new current program?&lt;/li&gt;&#xA;&lt;li&gt;How many programs or data files could be held at one time?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;____________________________________________&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT -&lt;br&gt;&#xA;Anyone heard of 'something like' EDITLN or EDITLINE or LINEDIT statement in BASIC for editing lines of a program's own code while executing ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I seem to remember a statement that was spelled 'something like'  EDITLN or EDITLINE or LINEDIT, and wonder if maybe there was one -    &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In any version of BASIC   &lt;/li&gt;&#xA;&lt;li&gt;Used for editing lines of a program's own code while executing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;____________________________________________&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="11744" LastEditorUserId="11744" LastEditDate="2019-08-05T02:16:17.077" LastActivityDate="2020-05-18T01:59:45.803" Title="Was self-modifying code possible using BASIC?" Tags="&lt;software&gt;&lt;basic&gt;" AnswerCount="22" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11287" PostTypeId="1" CreationDate="2019-06-08T00:54:05.857" Score="18" ViewCount="1520" Body="&lt;p&gt;As far as I can tell, CHKDSK has been part of DOS and Windows since day one. However, in later versions of DOS, CHKDSK was shipped along side ScanDisk. As of Windows 98, running CHKDSK will result in the program printing a recommendation for ScanDisk instead.&lt;/p&gt;&#xA;&lt;p&gt;In later versions of Windows (such as XP), ScanDisk had disappeared entirely, having been replaced by CHKDSK.&lt;/p&gt;&#xA;&lt;p&gt;That said, why did Microsoft originally make ScanDisk, and why did they scrap it? Did ScanDisk do something that CHKDSK couldn't do? The Windows 98 version of CHKDSK says &amp;quot;SCANDISK can reliably detect and fix a much wider range of disk problems.&amp;quot; Was this true? If so, what additional problems could ScanDisk fix?&lt;/p&gt;&#xA;" OwnerUserId="12364" LastEditorUserId="15334" LastEditDate="2020-09-24T18:35:10.183" LastActivityDate="2020-09-27T07:22:03.160" Title="Why did ScanDisk exist?" Tags="&lt;ms-dos&gt;&lt;file-system&gt;&lt;windows&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11288" PostTypeId="2" ParentId="11286" CreationDate="2019-06-08T00:55:06.487" Score="20" Body="&lt;p&gt;Given that HP’s Rocky Mountain BASIC could load and run parts of code from disk, and given those parts of code could be plain text and the files could also be saved on the fly, I would say yes it should be possible. I don’t know if anyone tried to do that with RMB though. There were definitely self modifying programs using peek and poke but of course your question rules those out. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to your second question RMB programs back in the day could only have 31,767/8 (I forget) lines so loading parts from the disk was necessary to save space (after a fashion). The parts on disk were normally already complete pieces though. In fact, TransEra’s HTBASIC (clone of RMB) still works this way (we use it where I work now so I’m still using programming skills I acquired decades ago).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Come to think of it, I also seem to recall a computer that I used (Commodore PET perhaps?) where a program could list part of itself on the screen and then output keystrokes to move the cursor up to a displayed line, make changes and they would be retained- that certainly wouldn’t save any space though.&lt;/p&gt;&#xA;" OwnerUserId="8774" LastEditorUserId="8774" LastEditDate="2019-06-08T01:58:06.557" LastActivityDate="2019-06-08T01:58:06.557" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11289" PostTypeId="1" CreationDate="2019-06-08T01:14:18.730" Score="8" ViewCount="770" Body="&lt;p&gt;Besides the &lt;a href=&quot;https://www.tiobe.com/tiobe-index/&quot; rel=&quot;noreferrer&quot;&gt;TIOBE Index&lt;/a&gt;, which ranks programming language popularity by search engine hits and seems to have data reaching back to the year 2001, are there other sources with some form of measure for the popularity of programming languages in the last millennium?&lt;/p&gt;&#xA;" OwnerUserId="11374" LastEditorUserId="11374" LastEditDate="2019-06-08T01:21:40.857" LastActivityDate="2019-06-13T00:24:16.887" Title="Is there data for programming language popularity pre year 2000?" Tags="&lt;programming&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11290" PostTypeId="2" ParentId="11287" CreationDate="2019-06-08T01:26:12.220" Score="8" Body="&lt;p&gt;The (at least original DOS versions of) &lt;code&gt;chkdsk&lt;/code&gt; checked the integrity of the &lt;code&gt;FAT&lt;/code&gt; filesystem. Say, a reboot occurred interrupting a disk write, &lt;code&gt;chkdsk&lt;/code&gt; e.g. could find correspondingly corrupted files and clean up. &lt;code&gt;scandisk&lt;/code&gt;, on the other hand, could also perform tests of the physical disk surface by performing read and write operations, and it could identify bad blocks and exclude such blocks from being used for file storage. &lt;/p&gt;&#xA;" OwnerUserId="11374" LastActivityDate="2019-06-08T01:26:12.220" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11291" PostTypeId="1" AcceptedAnswerId="11300" CreationDate="2019-06-08T01:44:30.147" Score="6" ViewCount="335" Body="&lt;p&gt;Several early computers (e.g., KDF9, LGP30) used Friden Flexowriters for console functions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the nature of the connection between the Flexowriter and the computer?  Was this something we would recognize as a &quot;serial interface&quot; today?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As well as the usual keyboard and printer functions, Flexowriters typically had integrated papertape readers and punches.  Were these controlled by inband signaling (like XON/XOFF for ASCII Teletypes; not that I'm saying a Flex used ASCII) or &quot;extra wires&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flexowriters also seemed to have switches, some of which were clearly for local device control (start tape, perhaps) but others seem to be computer control (the LGP30 Flex had what looks like a &quot;start computer&quot; switch). How did they communicate with the computer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If any answer is computer-specific, please indicate the computer you're talking about.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-11-11T10:23:57.423" Title="How did console flexowriters connect to their computers?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;terminal&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11292" PostTypeId="2" ParentId="11286" CreationDate="2019-06-08T02:50:43.720" Score="47" Body="&lt;p&gt;BBC BASIC, first shipped in 1981, includes the &lt;code&gt;EVAL&lt;/code&gt; keyword, which means &quot;ask the interpreter to evaluate this string as an expression&quot;. Since strings can be mutated, a program can mutate what will be evaluated at runtime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC MOS also provides &lt;code&gt;*SPOOL&lt;/code&gt; (write screen output to a file) and &lt;code&gt;*EXEC&lt;/code&gt; (read text from a file and act as if it had been typed), if you wanted to use secondary store as an intermediary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A potentially-interesting suggested use of &lt;code&gt;EVAL&lt;/code&gt;, at least in the later Z80 port of BBC BASIC, is writing a graph plotter that allows the user to enter a function.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-06-08T02:50:43.720" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11294" PostTypeId="1" AcceptedAnswerId="11295" CreationDate="2019-06-08T03:36:38.787" Score="2" ViewCount="205" Body="&lt;p&gt;In the eighties, there was a vast flowering of small independent software companies. Business and productivity software for the IBM PC, all manner of novelties for the Macintosh, games for the wonderful variety of home computers. In particular, at least on the PC, there were small and medium-sized companies writing original software, and also companies writing bespoke business software on contract; that also happened on mainframes, but for obvious reasons, the minimum size of a mainframe contract programming company is larger than on microcomputers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were certainly at least some such companies in the late seventies, e.g. Software Arts, developer of VisiCalc, and for that matter Microsoft, that started off as a small company supplying a version of Basic for the new microcomputers. I have a feeling there were far fewer ISVs in the seventies than in the eighties and later decades, though I don't have statistics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what was the situation in the early seventies, the sixties, the fifties? In those days the minimum price of a useful computer was much higher, software was not yet seen as a product in its own right, computers were more likely to be owned by big companies and other organizations that could have their own in-house programming staff, software might even be bundled with rented computers in a scenario where the vendor would not approve of third-party companies doing anything with the machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did small ISVs exist in the era of IBM and DEC, before the rise of microcomputers in the mid-seventies?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-06-08T06:58:04.027" Title="ISVs in the mainframe and minicomputer eras" Tags="&lt;history&gt;&lt;software-development&gt;&lt;market&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11295" PostTypeId="2" ParentId="11294" CreationDate="2019-06-08T06:58:04.027" Score="4" Body="&lt;p&gt;Small ISVs certainly existed. I work for a large ISV, but the product I work on traces its history to a company started in 1974, to commercialise some academic research. The intention was to be a consultancy, but it rapidly turned into an ISV, simply because the potential customers wanted to license that kind of software, rather than pay consultants to tell them how to write their own. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before the microcomputer revolution, there were fewer pure ISVs. Many companies that sold software were also consultancies, service providers, system integrators, or bespoke software developers. For example, &lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_Sciences_Corporation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computer Sciences Corporation&lt;/a&gt; was started in 1959 as a provider of programming tools, but became far better known as a services provider. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One significant factor in the rise of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Software_industry&quot; rel=&quot;nofollow noreferrer&quot;&gt;software industry&lt;/a&gt; was IBM's decision, under regulatory pressure in 1969, to &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_IBM#1960%E2%80%931969:_The_System/360_era,_Unbundling_software_and_services&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;unbundle&quot;&lt;/a&gt; its software from its hardware, creating a new field for price competition. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall, the microcomputer revolution increased the number of ISVs dramatically. It took more money to start one before micro-computers, but there were ways around that, such as renting computer time from a &lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_bureau&quot; rel=&quot;nofollow noreferrer&quot;&gt;bureau service&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-06-08T06:58:04.027" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11296" PostTypeId="2" ParentId="11291" CreationDate="2019-06-08T08:36:39.537" Score="3" Body="&lt;p&gt;Keep in mind, you're talking about an age where &lt;strong&gt;no&lt;/strong&gt; computer and even less it's devices where standardized components. Every manufacturer has his own ideas and parts where modified to fit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the Flexowriter did perform great here, as it was quite configurable, in some way even programmable by selecting/exchanging the parts. Hence the Flex part :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What was the nature of the connection between the Flexowriter and the computer? Was this something we would recognize as a &quot;serial interface&quot; today?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Possible, depending on the computer, as there was also 6 bit parallel interface possible, but in most cases it would have been serial.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As well as the usual keyboard and printer functions, Flexowriters typically had integrated papertape readers and punches. Were these controlled by inband signaling (like XON/XOFF for ASCII Teletypes; not that I'm saying a Flex used ASCII) or &quot;extra wires&quot;?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As before. You have to look at the computer they where made for. Most would use some specific protocol to enable or disable the keyboard.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Flexowriters also seemed to have switches, some of which were clearly for local device control (start tape, perhaps) but others seem to be computer control (the LGP30 Flex had what looks like a &quot;start computer&quot; switch). How did they communicate with the computer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Usually via separate wires.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If any answer is computer-specific, please indicate the computer you're talking about.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Lets skip that, as it would be an endless list with entries for next to all comuters using a Flexowriter.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-06-08T08:36:39.537" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11297" PostTypeId="1" AcceptedAnswerId="11298" CreationDate="2019-06-08T10:33:18.767" Score="12" ViewCount="633" Body="&lt;p&gt;I got an Amiga 1200 off ebay and it works great, board looks perfect, no leakage, no bad traces, nothing, and yet I have this mysterious mod I've never seen before. Does anyone know what it is?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xid8z.jpg&quot; alt=&quot;1&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/W76ns.jpg&quot; alt=&quot;2&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/DrkHF.jpg&quot; alt=&quot;3&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="3683" LastEditDate="2019-06-08T19:34:24.280" LastActivityDate="2019-06-08T19:34:24.280" Title="What is this Amiga 1200 mod?" Tags="&lt;hardware&gt;&lt;amiga-1200&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11298" PostTypeId="2" ParentId="11297" CreationDate="2019-06-08T13:01:02.070" Score="10" Body="&lt;p&gt;I believe it is to clean the weak CCK clock signal coming from Alice to Budgie.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PCB rev 1.d4 and 2b should have this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is on the R2 schematic (&lt;a href=&quot;http://www.amigawiki.de/dnl/schematics/A1200_R2.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.amigawiki.de/dnl/schematics/A1200_R2.pdf&lt;/a&gt;) - search for &quot;BUDGIE BLUES&quot; and check pin 36 (CCK).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think U37 (&quot;TI 231 JFA HC08&quot; in your photo) is a quad positive-or (74F32 / SN74S32) which is serving as the buffer.&lt;/p&gt;&#xA;" OwnerUserId="13829" LastActivityDate="2019-06-08T13:01:02.070" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11299" PostTypeId="2" ParentId="11286" CreationDate="2019-06-08T14:11:49.020" Score="10" Body="&lt;p&gt;The ZX Spectrum has VAL function, which is able to evaluate a string as a numeric expression. Such string can contain any valid BASIC expression. VAL$ does the same but with string expressions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, the SAM Coupé BASIC (influenced by the Sinclair BASIC to some extent) has KEYIN, which allows a BASIC program to interpret a string as a BASIC sentence (not just expression evaluation).&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2019-06-08T14:11:49.020" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11300" PostTypeId="2" ParentId="11291" CreationDate="2019-06-08T15:27:08.090" Score="4" Body="&lt;p&gt;Partial answer: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I wasn't able to find schematics for how the Flexwrite is wired up to the KDF9 (say), there are some Flexwriter manuals availavle on &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/friden/&quot; rel=&quot;nofollow noreferrer&quot;&gt;bitsavers&lt;/a&gt;. The Flexwriter apparent came with 5 bit and 8 bit encodings (or &quot;5-channel&quot; and &quot;8-channel&quot; variants, as they call them). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The encodings (at least the earlier ones used for the KDF9) were Friden-specific, and neither ASCII nor compatible to anything else. However, the 5-bit encoding worked similar to other Teletext-like encodings (there are shift-states for upper and lower case, and the &quot;all holes punched&quot; encoding is a null encoding).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/friden/SP8731_Friden_Communications_Systems_and_Equipment_1961.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Communications System and Equipment (1961)&lt;/a&gt; brochure suggest that serial communication was in use, also over longer distances. (Though that doesn't exclude the possibility the Flexwriters connected directly to the computer used a parallel connection).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no indication of any software flow control (XON/XOFF). There is also no indication of character codes which could be used to change channels etc. as part of the transmitted data, so I'd assume this could only be done on the flexwriter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In various materials it is mentioned that the Flexwriters operated at a fixed speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also plenty of material on the KDF9. &lt;a href=&quot;http://www.findlayw.plus.com/KDF9/The%20Hardware%20of%20the%20KDF9.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;This&lt;/a&gt; here describes the I/O system as using DMA, that's probably why software flow control wasn't necessary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also mentions that there was a dedicated Flexwriter used as the console for the KDF9 which had an &quot;attention&quot; key that was hardwired as an interrupt source, and this feature seems to have been unique for this special Flexwriter. So that was probably a custom modifications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All I/O channels of the KDF9 work similarly, so likely other Flexwriters were just hooked up to a single channels like the console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp1/F17_PDP1Maint_1962.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-1 Maintenance Manual&lt;/a&gt;, it says on page 4-4&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(c) The typewriter logic cable is equipped with a 50-pin Cannon connector&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and on page 9-10 ff.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The PDP-l typewriter is an IBM Model B equipped with a Soroban electromechanical encoder&#xA;  and decoder.    The decoder contains six information solenoids. These solenoids are driven from&#xA;  the typewriter control unit. The positions of the solenoid armatures are mechanically decoded&#xA;  to determine the desired character. Besides providing the six information signals, typewriter&#xA;  control also energizes the typewriter cam magnet, thereby causing the typewriter to print the&#xA;  desired character. The typewriter decodes most control characters (carriage return, backspace;&#xA;  space, tab, and shift), and all print characters, from the six information solenoids. The two&#xA;  color characters, red and black, are decoded by the typewriter control unit, which directly&#xA;  controls the color shift solenoid in the typewriter.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;When the operator strikes a typewriter key, the typewriter encoder presents information signals&#xA;  to the typewriter control unit. The encoder mechanically encodes all print characters into six&#xA;  coded switch closures plus a common switch closure.    Control characters are not encoded at&#xA;  the typewriter. When a control character key is struck, a single switch is closed.   Closure of&#xA;  such a control char'acter switch is encoded within typewriter control.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So this looks very much like a parallel connection, very likely 5 bits plus parity.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2019-06-08T15:46:11.397" LastActivityDate="2019-06-08T15:46:11.397" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11301" PostTypeId="2" ParentId="11286" CreationDate="2019-06-08T15:44:56.657" Score="20" Body="&lt;p&gt;In Commodore BASIC (used in the PET, VIC20, C64, C16, Plus/4, and C128) which is derived from Microsoft BASIC, it is possible to output screen-editor control codes in PRINT statements. Thus a common technique used to create dynamically-generated BASIC lines is to PRINT the generated line followed by control codes to return to the start of the line and then issue a Carriage Return, causing the screen editor to accept the line just as if it had been manually typed. Consider the following 1-line program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT &quot;{CLR-HOME}20 STOP{HOME}{CR}&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When RUN with an appropriate tickle of the keyboard buffer, this will add a new line &lt;strong&gt;20&lt;/strong&gt; to the program; execution continues to that new line and stops (this example is trivial, doing no more than simply triggering a ?BREAK IN LINE 20 error).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A classic use-case for this type of self-modifying code is to produce lines containing DATA statements that encode UDG (User Defined Graphics) or Sprite data, or machine code instructions. The resulting code can be appended to a loader stub for easy distribution and re-use.&lt;/p&gt;&#xA;" OwnerUserId="600" LastEditorUserId="600" LastEditDate="2019-06-11T09:19:52.250" LastActivityDate="2019-06-11T09:19:52.250" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11302" PostTypeId="2" ParentId="11274" CreationDate="2019-06-08T17:16:24.960" Score="2" Body="&lt;p&gt;One problem with a split cache is that it will require either that the code cache include sufficient logic to guarantee that if code writes to a region of memory and then jumps there, the CPU will not try to execute stale code from the cache, or else that any code which writes some storage and then jumps there perform an intervening operation to invalidate any involved code-cache entries.  The latter approach is much cheaper when practical, but I think Intel recognized it as impossible at least in the short term given people's desire to run existing programs which did such jumps without any cache-invalidating operations.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-06-08T17:16:24.960" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11303" PostTypeId="2" ParentId="11287" CreationDate="2019-06-08T17:23:15.220" Score="0" Body="&lt;p&gt;I remember Scandisk as having appeared around the time of Windows 95.  In that era, booting was sufficiently slow that many machines were left on for extended periods of time while unattended, and hard drives would typically spin as long as they had power; reading them would thus not contribute meaningfully to wear.  Given these factors, there may have been some benefit to scanning hard drives for errors while a system was idle.  If one had multiple copies of a file and one went bad, discovering that could alert one to the need to back up one of the surviving good copies.  Microsoft certainly saw such a benefit, since one of scandisk's main functions was to start up when the system was unattended, and stop once the system was in use again.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-06-08T17:23:15.220" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11304" PostTypeId="2" ParentId="11286" CreationDate="2019-06-08T17:26:02.700" Score="4" Body="&lt;p&gt;&lt;strong&gt;Example of using self-modifying code to save space and time:&lt;/strong&gt; (or, actually, to overcome the limitations of the built-in interpreter)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the C64 BASIC there is no way to evaluate string as formula (unlike, say, ZX Spectrum' VAL()). So in a function plotter program you have to either implement your own parsing and evaluation (which can be quite complex and inefficient in basic) or make your program incorporate the user-provided formula into itself, for example as a line similar to 1000 DEF FN F(X)=3*SIN(X/10)&lt;/p&gt;&#xA;" OwnerUserId="6532" LastActivityDate="2019-06-08T17:26:02.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11305" PostTypeId="2" ParentId="11286" CreationDate="2019-06-08T18:49:40.033" Score="9" Body="&lt;p&gt;First, we must ask &quot;what is self-modifying code?&quot; This can mean a few things.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;One type is code which modifies the on-disk (or on-tape) version of the code, then re-loads and re-executes it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think this is what the question is asking about. I think it wants code that modifies itself in memory, while it is running, without having to reload.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Another is code which parses and executes itself (with eval and such), modifying some non-compiled version in memory, then recompiling and re-executing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, I don't think this is what the question is asking about. I think it wants code that modifies itself in memory, without having to re-evaluate.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Another is to compile the code, and have the compiled assembly modify itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And again, I think this is what the question is specifically attempting to exclude with the &quot;Not using peek or poke or assembly language&quot;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Another is to have an interpreted-on-the-fly bytecode language, and have that change the &lt;em&gt;non-compiled&lt;/em&gt; code in memory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how BASIC worked in the Spectrum at least. Each command was a single keystroke (you'd hit &lt;kbd&gt;P&lt;/kbd&gt; and &lt;code&gt;PRINT&lt;/code&gt; would appear). Of the 256 possible character values, 91 were the BASIC commands and operators like &lt;code&gt;POKE&lt;/code&gt; or &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;, not counting the single-character operators like &lt;code&gt;+&lt;/code&gt; and so on. You can see the list &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum_character_set#Character_set&quot; rel=&quot;nofollow noreferrer&quot;&gt;on Wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the question makes an incorrect assumption about peek and poke: that they are used to hack in funky assembler codes or something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the number &lt;code&gt;1&lt;/code&gt; took four bytes to store on the Spectrum (if I remember right, it stored two copies of all 16 bit ints for some reason), but the commands &lt;code&gt;SGN PI&lt;/code&gt; took only 2, one byte each: 0xBC 0xA7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In BASIC, the commands to change the contents of memory, the equivalent of C's pointers, are &lt;code&gt;PEEK&lt;/code&gt; and &lt;code&gt;POKE&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It &lt;em&gt;makes no sense&lt;/em&gt; to ask for self-modifying, non-reloading in-memory code, then saying that you can't use the specific commands that would access the in-memory commands you would want to change.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A final option, suggested by @Eric Towers, is some system that edits at a metasyntactic level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, I don't think this is what the question is asking. While BASIC (like any language, really) can be compiled to bytecode or assembly, it was typically implemented as a dynamically interpreted language from a byte stream. Outside of the byte stream, there's no pre-parsing, splitting the language up into metasyntactic concepts akin to a &quot;syntax tree&quot;, or anything like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I understand it, &lt;a href=&quot;https://en.wikipedia.org/wiki/Sinclair_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sinclair BASIC&lt;/a&gt; in particular was an interpreted language: the program counter went along line by line, passing each in turn to the interpreter, in a single pass with no backtracking other than via the &lt;code&gt;GO TO&lt;/code&gt; construct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of this, the closest to a metasyntactic command would be line-number based commands, such as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;https://en.wikipedia.org/wiki/Timex_Sinclair_2068&quot; rel=&quot;nofollow noreferrer&quot;&gt;Timex Sinclair&lt;/a&gt;'s addition to the Sinclair BASIC of the &lt;code&gt;DELETE &amp;lt;first line#&amp;gt; &amp;lt;last line#&amp;gt;&lt;/code&gt; command permitted the removal of ranges of lines from a BASIC program. &lt;/li&gt;&#xA;&lt;li&gt;the &lt;code&gt;RENUM &amp;lt;first line$&amp;gt; &amp;lt;step size&amp;gt;&lt;/code&gt; command renumbered code line numbers, affecting all &lt;code&gt;GOTO&lt;/code&gt;, &lt;code&gt;GOSUB&lt;/code&gt;, &lt;code&gt;RESTORE&lt;/code&gt;, &lt;code&gt;RUN&lt;/code&gt;, &lt;code&gt;LINE&lt;/code&gt;, &lt;code&gt;ON ERROR GOTO&lt;/code&gt; and other similar commands. The reason this could be considered self-modifying is that it would leave alone any expressions such as &lt;code&gt;GOTO VAL &quot;50&quot;&lt;/code&gt;, &lt;code&gt;DELETE 10, 100&lt;/code&gt;, and indeed further calls to &lt;code&gt;RENUM&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So it's possible, though I've not tried it, that this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 GOTO VAL &quot;40&quot;&#xA;20 PRINT &quot;nothing&quot;&#xA;30 DELETE 10, 70&#xA;40 PRINT &quot;word&quot;&#xA;50 RENUM 10, 30&#xA;60 DELETE 130, 160&#xA;70 GOTO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...will, on hitting line 50, change itself to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 GOTO VAL &quot;40&quot;&#xA;40 PRINT &quot;nothing&quot;&#xA;70 DELETE 10, 70&#xA;100 PRINT &quot;word&quot;&#xA;130 RENUM 10, 30&#xA;160 DELETE 130, 160&#xA;190 GOTO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;... then on hitting the new line 160, convert to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 GOTO VAL &quot;40&quot;&#xA;40 PRINT &quot;nothing&quot;&#xA;70 DELETE 10, 70&#xA;100 PRINT &quot;word&quot;&#xA;190 GOTO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;... then on hitting the new line 70, convert to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;100 PRINT &quot;word&quot;&#xA;160 GOTO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;... which is still valid since a &lt;code&gt;GOTO&lt;/code&gt; goes to the next largest number. The resulting output would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;word&#xA;nothing&#xA;word&#xA;word&#xA;word&#xA;....&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have never used a Timex, so can't say for sure that's how they worked (did these update the program counter? Halt the program? Restart it? I can't find it documented). But either way, this is the closest I can find.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="444" LastEditorUserId="7946" LastEditDate="2019-08-05T10:58:16.913" LastActivityDate="2019-08-05T10:58:16.913" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11306" PostTypeId="2" ParentId="11287" CreationDate="2019-06-08T19:29:13.397" Score="26" Body="&lt;p&gt;There are quite a few differences between the MS-DOS &lt;code&gt;CHKDSK&lt;/code&gt; and ScanDisk, beyond the latter’s friendlier interface.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ScanDisk can “repair” cross-linked files, &lt;em&gt;i.e.&lt;/em&gt; files which end up pointing (entirely or partially) at the same cluster chain — this always involves data loss, but it’s better than &lt;code&gt;CHKDSK&lt;/code&gt; which would only tell the user about the problem (users then had to copy the files manually and delete the originals).&lt;/li&gt;&#xA;&lt;li&gt;As its name indicates, ScanDisk can scan the disk surface, as well as verify the file system’s integrity; it will &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/103/Q103956/&quot; rel=&quot;noreferrer&quot;&gt;repair files stored on bad sectors&lt;/a&gt; (as far as it can — the data stored on the unreadable sectors won’t be recovered), and it can also &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/104/Q104725/&quot; rel=&quot;noreferrer&quot;&gt;flag sectors which take too long to read&lt;/a&gt; (which may indicate they’re about to become unreadable). Sector recovery previously involved using the &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/067/Q67223/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;RECOVER&lt;/code&gt;&lt;/a&gt; tool.&lt;/li&gt;&#xA;&lt;li&gt;It can repair invalid media descriptors. With &lt;code&gt;CHKDSK&lt;/code&gt;, this involved &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/101/Q101061/&quot; rel=&quot;noreferrer&quot;&gt;using a disk editor&lt;/a&gt; (as documented by Microsoft!).&lt;/li&gt;&#xA;&lt;li&gt;It copes with directories containing more than 32,767 entries, &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/119/Q119350/&quot; rel=&quot;noreferrer&quot;&gt;unlike &lt;code&gt;CHKDSK&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;ScanDisk and &lt;code&gt;CHKDSK&lt;/code&gt; deal with attribute corruption somewhat differently. Thus ScanDisk will ignore volume labels with data (which usually indicates that they are really files whose volume attribute has been set incorrectly), whereas &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/104/Q104540/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;CHKDSK&lt;/code&gt;&lt;/a&gt; treat the corresponding clusters as unlinked and recover the data. Similarly, ScanDisk mis-handles files whose directory attribute has been set, and this is one of the few recovery scenarios where &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/108/Q108493/&quot; rel=&quot;noreferrer&quot;&gt;Microsoft recommended using &lt;code&gt;CHKDSK&lt;/code&gt; rather than ScanDisk&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;ScanDisk is &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/116/Q116397/&quot; rel=&quot;noreferrer&quot;&gt;customisable&lt;/a&gt;, and Microsoft provided a decently-documented configuration file.&lt;/li&gt;&#xA;&lt;li&gt;Last but most certainly not least, ScanDisk can analyse compressed volumes. When DoubleSpace was introduced with MS-DOS 6, &lt;code&gt;CHKDSK&lt;/code&gt; wasn’t extended to cope with compressed volumes; instead, &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/093/Q93599/&quot; rel=&quot;noreferrer&quot;&gt;it cooperated with the &lt;code&gt;DBLSPACE&lt;/code&gt; utility&lt;/a&gt;. ScanDisk was introduced with MS-DOS 6.2 and supports compressed volumes directly (DoubleSpace in version 6.2, DriveSpace in version 6.22), and &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/103/Q103534/&quot; rel=&quot;noreferrer&quot;&gt;the &lt;code&gt;CHKDSK&lt;/code&gt; cooperation was removed&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This begs the question, why not add all those features to &lt;code&gt;CHKDSK&lt;/code&gt;? I can think of two reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Microsoft wanted to have a “user-friendly” disk checker, matching the new &lt;code&gt;DEFRAG&lt;/code&gt; tool (which had been added in MS-DOS 6). But changing the interface of &lt;code&gt;CHKDSK&lt;/code&gt; would have broken backwards compatibility... (In particular, &lt;code&gt;CHKDSK&lt;/code&gt; wasn’t used only to check the file system; since it reported on available memory, users commonly used it for that purpose, since before &lt;code&gt;MEM&lt;/code&gt; appeared in MS-DOS 5, that was the only way to determine that information using DOS-provided tools. There were thus batch files relying on this feature.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CHKDSK&lt;/code&gt; was written in assembly language (and you can now see &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/CHKDSK.ASM&quot; rel=&quot;noreferrer&quot;&gt;the source code for version 2.0&lt;/a&gt;), and I imagine the engineers involved balked at the idea of adding all the features above to an assembly-language program, or at least found it easier to re-write everything in C (which is what ScanDisk was written in).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;ScanDisk was never added to the Windows NT line of operating systems, so when that took over the full Windows family (with Windows XP), ScanDisk disappeared. Windows NT had its own, NTFS-capable version of &lt;code&gt;CHKDSK&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-06-08T19:52:03.047" LastActivityDate="2019-06-08T19:52:03.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11307" PostTypeId="2" ParentId="11286" CreationDate="2019-06-08T19:29:59.147" Score="5" Body="&lt;p&gt;&lt;strong&gt;Program code as data file&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsoft Basic, e.g. on 8 bit Commodore machines, supported reading and writing program files on floppy disk like sequential data files.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;OPEN 2,8,2,&quot;EXAMPLE,P,W&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would open a file named &lt;code&gt;EXAMPLE&lt;/code&gt; with type &lt;code&gt;PRG&lt;/code&gt; for writing. Then one could create a program with a couple of &lt;code&gt;PRINT#&lt;/code&gt; instructions, and &lt;code&gt;CLOSE&lt;/code&gt; it, it'd show up as an executable file on disk. It should be written as it'd appear on the memory, i.e. line numbers as 16 bit integers, keywords should be tokenized etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Chain-loading or chaining&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;LOAD&lt;/code&gt; instruction, when issued in a running program&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;999 LOAD &quot;EXAMPLE&quot;,8&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;loads the named program from disk, replacing the running one, and starts executing it at the first instruction. As long as the loaded program is &lt;em&gt;smaller&lt;/em&gt; than the first one, variables would be preserved, so they can communicate that way with each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Read-modify-write&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A program could as well open the file containing its own code, read it one line at a time, modify some stuff on the fly, write it back to another file, then chain-load it.&lt;/p&gt;&#xA;" OwnerUserId="348" LastEditorUserId="348" LastEditDate="2019-06-08T19:45:07.130" LastActivityDate="2019-06-08T19:45:07.130" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11309" PostTypeId="2" ParentId="11286" CreationDate="2019-06-08T21:34:34.117" Score="16" Body="&lt;p&gt;GW-BASIC allowed you to load in arbitrary code using &lt;a href=&quot;http://www.antonis.de/qbebooks/gwbasman/chain.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;CHAIN MERGE&lt;/code&gt;&lt;/a&gt;, where you could take an ASCII-coded (non-binary) BASIC program or snippet and transfer control to a specific line number. As no renumbering occurred, you could overwrite or remove sections of your code prior to the chaining.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This program snippet works in &lt;a href=&quot;https://robhagemans.github.io/pcbasic/&quot; rel=&quot;noreferrer&quot;&gt;this PC-BASIC emulator&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT &quot;Hello&quot;&#xA;20 PRINT &quot;world&quot;&#xA;30 CHAIN MERGE &quot;MERGE.BAS&quot;, 20, ALL&#xA;40 GOTO 20&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;MERGE.BAS&lt;/code&gt; (in the current directory):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;20 PRINT &quot;DONE&quot;&#xA;30 END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When run, it shows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Hello&#xA;world&#xA;DONE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2019-06-08T21:34:34.117" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11311" PostTypeId="1" CreationDate="2019-06-09T10:52:54.103" Score="3" ViewCount="444" Body="&lt;p&gt;(Following up from &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11147/monitor-for-an-sgi-octane&quot;&gt;Monitor for an SGI Octane?&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I booted both my Octane and Octane 2 machines for the first time. I have a monitor connected via a 13W3-to-VGA adapter, but no PS2 keyboard or mouse yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neither machine would output anything to the monitor, and both would display a solid (not blinking) red light on the facade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be the next logical steps in the debugging process?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking that listening to the serial port with another machine could be instructive. I could also pull the system module out and check if anything's not properly seated, but unfortunately I don't have the covers for the compression connectors.&lt;/p&gt;&#xA;" OwnerUserId="6699" LastEditorUserId="6699" LastEditDate="2019-06-09T11:43:25.480" LastActivityDate="2019-11-07T20:05:33.783" Title="SGI Octane and Octane 2 fail to boot" Tags="&lt;boot&gt;&lt;sgi&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11312" PostTypeId="2" ParentId="11311" CreationDate="2019-06-09T10:58:32.153" Score="2" Body="&lt;p&gt;Answering to myself, I checked the troubleshooting section in the Octane Owner Guide:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w8VNV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w8VNV.png&quot; alt=&quot;SGI Octane Diagnostic Chart&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems like it could be an unseated board.&lt;/p&gt;&#xA;" OwnerUserId="6699" LastActivityDate="2019-06-09T10:58:32.153" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11313" PostTypeId="2" ParentId="11286" CreationDate="2019-06-09T11:05:01.893" Score="4" Body="&lt;p&gt;The ZX Spectrum had the MERGE statement, which would read a saved program from a file and create or overwrite corresponding lines in the current program. (Any saved variables were also merged in the same manner.) However the program had to be in the ZX Spectrum's internal SAVE format, so you couldn't readily use it for arbitrary code. By default the program would load from tape, which made it inconvenient to use programmatically, but the Interface 1 device may at least have made it possible to use the MERGE statement as an overlay loader (I never had one though).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This doesn't directly count as it involves assembly language, but I wrote my own extensions to ZX Basic, one of which allowed the program to merge from a text file input stream instead. (As I recall you had to remember to include a GO TO statement in the text to resume code execution.)&lt;/p&gt;&#xA;" OwnerUserId="3994" LastActivityDate="2019-06-09T11:05:01.893" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11314" PostTypeId="2" ParentId="7367" CreationDate="2019-06-09T11:15:48.390" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;In the early days, before SIMMs and DIMMs, this must presumably have been&#xA;  limited by the number of RAM chips that would fit on the motherboard.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. While some early microcomputers such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/KIM-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;KIM-1&lt;/a&gt; were single-board computers, these were usually designed for experimentation or training. More commonly early microcomputers, like &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-8&quot; rel=&quot;nofollow noreferrer&quot;&gt;the minicomputers that preceeded them&lt;/a&gt;, consisted of a backplane into which one could plug multiple boards, including memory expansion. For example, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Altair_8800&quot; rel=&quot;nofollow noreferrer&quot;&gt;Altair 8800&lt;/a&gt;, generally considered to be &quot;the spark that ignited the microcomputer revolution,&quot; also introduced the &lt;a href=&quot;https://en.wikipedia.org/wiki/S-100_bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;S-100 bus&lt;/a&gt; that went on to become a standard for many microcomputers (using several different CPUs) for many years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By 1977 there was a wide variety of memory boards available and designs that allowed quite massive (for the time) amounts of memory. For example, by October 1977 IMSAI was running advertisements for &lt;a href=&quot;https://archive.org/details/kilobaudmagazine-1977-10/page/n148&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;the Megabyte Micro&quot;&lt;/a&gt;, with sixteen 64 Kbyte memory boards in an S-100 bus:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vzO5T.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vzO5T.png&quot; alt=&quot;The Megabyte Micro&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's unlikely very many of these full megabyte systsems were sold, as the memory boards alone cost more than $40,000 and there would have been very little microcomputer software at the time that could take advantage of that much memory. But it was possible, if you needed it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the subsequent &quot;home computer&quot; age bloomed, it became more common for computers to be sold as less-expandable but easier to set up complete units. But there were still plenty of business systems based on the S-100 bus, often custom-built by systems integrators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Significantly larger motherboards in single-board computers did appear in the early to mid 80s, and part of the reason was to allow a reasonable amount of memory on the single board. One example is this Sun 2/50 workstation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Sun_2-50_Front.jpg/318px-Sun_2-50_Front.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Sun_2-50_Front.jpg/318px-Sun_2-50_Front.jpg&quot; alt=&quot;Sun 2/50&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The case below the monitor usually contained a single board, a significant portion (at the upper right) of which was devoted to memory:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Sun_2-50_Processor.JPG/817px-Sun_2-50_Processor.JPG&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Sun_2-50_Processor.JPG/817px-Sun_2-50_Processor.JPG&quot; alt=&quot;Sun 2/50 mainboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it was quite normal to use the same and/or similar boards in a multi-board &quot;deskside&quot; chassis if one needed more memory, disk or other features. This is a (poor) photograph of a Sun 3 deskside system, using similar boards to the one above, seen from the rear with a board sticking out:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/S5Soq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S5Soq.png&quot; alt=&quot;Sun 3/160 rear&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-06-09T11:21:11.447" LastActivityDate="2019-06-09T11:21:11.447" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11315" PostTypeId="2" ParentId="11291" CreationDate="2019-06-09T21:28:29.353" Score="1" Body="&lt;p&gt;I'm adding my own answer as a sort of summary of what I got from the other two excellent answers.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It depends on the computer, though the evidence favours a parallel interface for tightly-integrated consoles.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Auxiliary device control, and computer control functions, were conveyed by specific signals rather than (say) in-band control characters.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'd like to &quot;accept&quot; both the previous answers, but alas...&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-06-09T21:28:29.353" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11317" PostTypeId="1" CreationDate="2019-06-09T23:21:11.450" Score="10" ViewCount="782" Body="&lt;p&gt;I'm doing some mode x programming and I noticed that my vram to vram copies are much slower than I expected. My copying method was described by Michael Abrash in his Graphics Programming Black Book and it's the technique were the VGA latches are used to do fast 4 pixel copying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My set up is like this; I'm in 320x240 resolution and page 0 and 1 will be used to show the active scene. After showing a page, I will copy the entire page to the non-visible page. E.g;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Page 0 is blank and visible.&lt;/li&gt;&#xA;&lt;li&gt;Page 1 is prepped with background.&lt;/li&gt;&#xA;&lt;li&gt;Calculate sprite positions.&lt;/li&gt;&#xA;&lt;li&gt;Store dirty rectangles (sprite areas) in off-screen vram.&lt;/li&gt;&#xA;&lt;li&gt;Draw sprites.&lt;/li&gt;&#xA;&lt;li&gt;Flip page.&lt;/li&gt;&#xA;&lt;li&gt;Copy entire visible page to non-visible page.&lt;/li&gt;&#xA;&lt;li&gt;On non visible page restore dirty rectangles (so we have a clean background).&lt;/li&gt;&#xA;&lt;li&gt;Back to 3.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;However, at the moment I'm not even doing any sprite related effort. I.e. I'm only copying the visible page to the non-visible page and I get a frame rate of 14 fps. This is on a 386DX 40Mhz with various 16bit VGA cards [1], all the same behaviour. Also when I slow down to 16Mhz, I still get the 14fps which to me indicates to me so sort of bottleneck within the VGA itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I'm not copying (basically do nothing) I get 60fps. With copying I was expecting to get at least 30fps. This is some of applicable VGA code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void bitblt_begin()&#xA;{&#xA;  // Set the bit mask to select all bits from the latches and&#xA;  // none from the CPU, so that we can write the latch contents&#xA;  // directly to memory - M. Abrash.&#xA;  outpw(VGA_GRAPHIC_INDEX, 0x0008);&#xA;&#xA;  // Set the map mask to enable all planes.&#xA;  outpw(VGA_SEQUENCER_INDEX, VGA_MAP_MASK + 0xff00);&#xA;}&#xA;&#xA;void bitblt_end()&#xA;{&#xA;  // Restore the bit mask to its default, which selects all bits&#xA;  // from the CPU and none from the latches (the GC Index still &#xA;  // points to Bit Mask) - M. Abrash&#xA;  outpw(VGA_GRAPHIC_INDEX + 1, 0x00ff);&#xA;}&#xA;&#xA;void bitblt_page(int source_page, int target_page)&#xA;{&#xA;  unsigned short source_offset = _page_offsets[source_page];&#xA;  unsigned short target_offset = _page_offsets[target_page];&#xA;&#xA;  _asm {&#xA;    cld&#xA;&#xA;    // Init the source (ds:si) and target (es:di) offsets.&#xA;    mov ax,0a000h&#xA;&#xA;    mov ds,ax&#xA;    mov si,source_offset&#xA;&#xA;    mov es,ax&#xA;    mov di,target_offset&#xA;&#xA;    mov cx,19200&#xA;    rep movsb&#xA;  }&#xA;}&#xA;&#xA;void show_page(int page)&#xA;{&#xA;  unsigned short offset;&#xA;  unsigned short address_high, address_low;&#xA;&#xA;  offset = page_offsets[page];&#xA;&#xA;  address_high = VGA_ADDRESS_HIGH | (offset &amp;amp; 0xff00);&#xA;  address_low  = VGA_ADDRESS_LOW  | (offset &amp;lt;&amp;lt; 8);&#xA;&#xA;  while ((inp(VGA_INPUT_STATUS) &amp;amp; VGA_DISPLAY_ENABLE));&#xA;&#xA;  outpw(VGA_CRT_INDEX, address_high);&#xA;  outpw(VGA_CRT_INDEX, address_low);&#xA;&#xA;  while (!(inp(VGA_INPUT_STATUS) &amp;amp; VGA_VRETRACE));&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Within my program's main loop this is used as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int page = 0;&#xA;&#xA;while(true) {&#xA;  // do keyboard checking here..&#xA;&#xA;  // Flip the page.&#xA;  page ^= 1;&#xA;&#xA;  show_page(page);&#xA;&#xA;  // Calculate FPS.&#xA;&#xA;  // Copy the currently visible page to the non-visible page.&#xA;  bitblt_begin();&#xA;  bitblt_page(page, page ^ 1)&#xA;  bitblt_end();&#xA;&#xA;  // Do sprite work (potentially).&#xA;&#xA;  // Write out simple status (i.e. FPS and some other timings, takes about 1ms to render).&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, when at 60 hz, 1 / 60 = 0.01666, or 16ms. If I can render my scene in under 16ms then I get 60 fps. But in my situation my scene render (the page copy) is about 68ms, which seems to correspond to the 14fps. I.e: 68 / 16 = 4.25, 60 / 4.25 = 14.1176.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I'm not aiming for 60 fps, 30 would be just fine. But at the moment I getting 14 fps and I'm not even doing anything such as calculating and writing sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I doing fundamentally wrong? Or can it simply not be done? Is 16 bit ISA just such a major bottle neck that this simply cannot be done?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I have done some more tests to see what happens when I copy from system memory to video memory and this is what I found out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For simplicity I have switched to 320x200 mode x (70hz) since it will make copying less complicated since we're staying within the 64kb boundary, but the principle should be the same for 320x240 mode x.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've created this bare bone copy routine. It's basically an unrolled loop that loops over each of the 4 planes and performs copy of 8000 words (a 4th of a screen) from system memory to video memory. At the moment it's just copying from &lt;code&gt;0000:0000&lt;/code&gt;, which produces nothing of interest on the screen, just garbled noise, it's the copying that matters. For each &lt;code&gt;rep movsw&lt;/code&gt; I'm copying &lt;code&gt;8000&lt;/code&gt; words, or &lt;code&gt;16000&lt;/code&gt; bytes, i.e. a quarter of a 320x200 screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The routine below gives me 12 fps with a 68ms to perform the copy:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void copy_buffer(int page)&#xA;{&#xA;  unsigned int target_offset = page_offsets[page];&#xA;&#xA;  _asm {&#xA;    cld&#xA;&#xA;    mov  ax,0x0000&#xA;    mov  ds,ax&#xA;&#xA;    mov  ax,0xa000&#xA;    mov  es,ax&#xA;&#xA;    mov  bx,target_offset&#xA;&#xA;    mov  dx,VGA_SEQUENCER_INDEX&#xA;&#xA;    // Plane #0&#xA;    mov  ax,0x0102&#xA;    out  dx,ax&#xA;&#xA;    mov  si,0&#xA;    mov  di,bx&#xA;&#xA;    mov  cx,8000 // 320*200 / 4 / 2&#xA;    rep  movsw&#xA;&#xA;    // Plane #1&#xA;    mov  ax,0x0202&#xA;    out  dx,ax&#xA;&#xA;    mov  si,0&#xA;    mov  di,bx&#xA;&#xA;    mov  cx,8000 // 320*200 / 4 / 2&#xA;    rep  movsw&#xA;&#xA;    // Plane #2&#xA;    mov  ax,0x0402&#xA;    out  dx,ax&#xA;&#xA;    mov  si,0&#xA;    mov  di,bx&#xA;&#xA;    mov  cx,8000 // 320*200 / 4 / 2&#xA;    rep  movsw&#xA;&#xA;    // Plane #3&#xA;    mov  ax,0x0802&#xA;    out  dx,ax&#xA;&#xA;    mov  si,0&#xA;    mov  di,bx&#xA;&#xA;    mov  cx,8000 // 320*200 / 4 / 2&#xA;    rep  movsw&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The findings...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Initially I thought, let's use &lt;code&gt;b000:0000&lt;/code&gt; as a source buffer, since that memory area definitely isn't use when in VGA graphics mode. However, this was running at 8 fps with the copy routine taking 132ms. When I switched the source buffer to &lt;code&gt;0000:0000&lt;/code&gt; it nearly doubled performance!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I thought, OK, lets make the target buffer also in system memory. So I set &lt;code&gt;ds:si&lt;/code&gt; to &lt;code&gt;0000:0000&lt;/code&gt; and &lt;code&gt;es:di&lt;/code&gt; to &lt;code&gt;8000:0000&lt;/code&gt; (unlikely to be used by anything critical) and voila, 36fps were the copy routine takes only 18ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also took out the &lt;code&gt;out&lt;/code&gt; instructions to see if that had any impact on performance and there was no noticeable difference. So, the 4 &lt;code&gt;out&lt;/code&gt;'s to select each of the planes is not a bottleneck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, basically, touching any form of video memory in the &lt;code&gt;a000:0000&lt;/code&gt; and &lt;code&gt;b000:0000&lt;/code&gt; areas results in a severe performance loss.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone has any ideas....?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE 2&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just did a test with plain mode 13h, copying 32000 words and I experience the same performance issues as in mode x when either copying to or from either segments &lt;code&gt;a000:0000&lt;/code&gt; or &lt;code&gt;b000:0000&lt;/code&gt;, i.e. 12fps. When I copy from system to system memory (e.g. from &lt;code&gt;0000:0000&lt;/code&gt; to &lt;code&gt;8000:0000&lt;/code&gt;) then I get 36fps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] I have tested on multiple VGA cards, an ATI Wonder 16, Tseng ET4000AX, Western Digital, Chips &amp;amp; Tech and a few more.&lt;/p&gt;&#xA;" OwnerUserId="11075" LastEditorUserId="11075" LastEditDate="2019-06-12T10:48:32.930" LastActivityDate="2019-06-12T14:35:46.553" Title="Why are my VGA vram to vram copies so slow?" Tags="&lt;programming&gt;&lt;vga&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11318" PostTypeId="1" CreationDate="2019-06-09T23:43:26.837" Score="2" ViewCount="149" Body="&lt;p&gt;I'm trying to create a boot disk for the Kaypro II (from scratch). I've been using cpmtools to generate file system images for other platforms, mostly with success.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the Kaypro II has this weird boot track format where the boot image is on track 0 and the top half of track 1... with the directory in the bottom half of track 1. So the directory ends up sandwiched in between the two halves of the boot image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reference: &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/kaypro/Kaypro_II_Dealer_Reference_Manual_1982.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.informatik.uni-stuttgart.de/pdf/kaypro/Kaypro_II_Dealer_Reference_Manual_1982.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;kpii&lt;/code&gt; definition in the standard cpmtools diskdefs file doesn't know about this, so it places files in the top half of track 1. The actual BIOS itself presumably handles this by setting additional bits in the allocation vector while leaving the number of directory entries at 64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I can't figure out how to teach cpmtools about this. The diskdefs file is completely undocumented and the source is obscure. Does anyone know if cpmtools supports this, and if so, how?&lt;/p&gt;&#xA;" OwnerUserId="6846" LastActivityDate="2021-05-11T14:59:05.863" Title="Reserving extra directory blocks with cpmtools?" Tags="&lt;cp-m&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11320" PostTypeId="2" ParentId="11286" CreationDate="2019-06-10T02:14:36.713" Score="7" Body="&lt;p&gt;Applesoft BASIC, as I recall, treated ASCII character 4 (control-D) as an escape code to DOS or ProDOS.  You could therefore give the interpreter commands such as &lt;code&gt;PRINT CHR$(4)&quot;WRITE filename&quot;&lt;/code&gt;, and to run a different program.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastActivityDate="2019-06-10T02:14:36.713" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11321" PostTypeId="2" ParentId="11317" CreationDate="2019-06-10T08:42:42.573" Score="9" Body="&lt;p&gt;Your problem is mostly going to be &lt;code&gt;rep movsb&lt;/code&gt; changing that to use &lt;code&gt;rep movsw&lt;/code&gt; should help.&#xA;If the VGA card is on a 8MHz (or 6MHz) original AT bus then the timings work like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;3 cycles to read or write a byte&#xA;19,200 bytes being moved.&#xA;345,600 bus cycles per copy&#xA;8,000,000 / 345,600 is 23.14 copies per second.&#xA;6,000,000 / 345,600 is 17.36 copies per second.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Overall this tends to suggest your bus access might be at 6MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I've understood correctly you're building the background off screen but using VGA memory so this means that your source access is also going over the bus so it's very likely your best timing will be something like this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going to movsw will improve this by a factor of two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you put your source in main memory then the times should be better as main memory access should be faster than three 8Mhz cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't seen ISA AT buses with a speed of faster than 12MHz as lots of cards stopped working at that speed (I used have a odd clone motherboard with this speed) so most bus accesses tended to use the AT 8MHz cycles (or maybe an 6MHz cycle)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh and finally don't forget the video card needs to access that memory as well (taking roughly a 1/20 of second[1] I think) so it will be asserting wait states while it reads the memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] memory access in total per frame is 320*240*4 307,200 bits/frame but the tseng is a 32 bit card so we get 9600 32 bit access/frame which means the total time spent accessing the 80ns memory would be 9600 *80E-9*60 which I work out to be 0.046 seconds but wait states mean this could be much higher.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2019-06-10T09:11:58.743" LastActivityDate="2019-06-10T09:11:58.743" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11322" PostTypeId="2" ParentId="11289" CreationDate="2019-06-10T09:15:42.310" Score="8" Body="&lt;p&gt;Below is an attempt of ranking 'popularity' of programming languages invented in the 1980s or earlier by searching for &quot;&lt;em&gt;language&lt;/em&gt; programming&quot; on worldcat. The table lists how many library items exist per year. &lt;code&gt;C&lt;/code&gt; and &lt;code&gt;C++&lt;/code&gt;, e.g., can unfortunately not be distinguished in this search, and there are also false positives, considering that &lt;code&gt;C&lt;/code&gt;'s first release year is 1972.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;           1970    1972    1974    1976    1978    1980    1982    1984    1986    1988    1990    1992    1994    1996    1998&#xA;Ada          0   0   0   2   0   0   0   0   0  22 141 140 145 185 258 244 384 439 562 736 452 658 389 279 263 141  91  57  37  31&#xA;Algol       16  15  16  11   9  13  17  19  13  11   7  12   2   9   4   2   4   0   1   0   1   0   0   0   0   1   0   1   0   0&#xA;APL         13  20   4  13  11  13   9  14  21   9  11  17   4  18  18  14  16  12   8  13   8   5   4   7   9   2   3   2   2   4&#xA;Assembly     9   4   6   3  11  12   7  13  17  20   9  12  12  33  43  38  34  39  22  25  28  20  23  14  21  19  11  21  17  19&#xA;AWK          0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   2   5   8   3   5   7   3   3   5   9   7   4   5&#xA;BASIC       19  31  44  55  65  56  46  61  73  49  96 132 196 218 214 233 186 127 107  77  78  59  87  92  73  78  73  84  73  75&#xA;BCPL         0   0   1   1   2   1   1   1   5   2   1   1   0   1   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0&#xA;Caml         0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   2   1   1   0   0   1   2&#xA;COBOL       18  23  15  20  30  21  40  36  48  31  27  46  31  44  44  35  19  22  22  28  25  24  15   7  18   9  16  42  11  14&#xA;COMAL        0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0&#xA;C            9  12  11  11  13  23  20  27  38  27  30  48  73  83 130 170 196 278 265 259 370 352 376 498 517 582 465 469 513 392&#xA;dBase        0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   2   3   2   4   3   2   2   4   2   3   4   2   0   1   0&#xA;Eiffel       0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   3   2   1   2   1   4   4   5   4   7   1   2   1&#xA;Forth        0   0   0   1   0   0   0   1   0   0   1   2   8  12  11  11  12  13   3   9   7   5   2   2   8   1   1   0   2   2&#xA;FORTRAN     65  63  60  56  59  69  72  91  79  64  60  48  55  44  73  72  68  55  49  81  39  43  38  36  46  36  30  29  20  17&#xA;FoxPro       0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   2   1   3   3   1   3   2   3   1   1&#xA;Lisp         3  10   9  14  17  16  20  26  19  16  26  38  23  26  54  57  73  94  46  76  72  43  33  37  31  17  17   8  11   6&#xA;Logo         0   2   2   5   4   0   0   0   1   1   3   1   3  36  57  37  59  30  36  32  51  31  25  20  23  29  19  16  21  19&#xA;MIMIC        1   0   2   1   5   0   0   0   0   0   0   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0&#xA;ML           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   1   0   0   1   2   7   9  14   1   9  10  11  16&#xA;Modula-2     0   0   0   0   0   0   0   0   0   0   0   0   5   5   3  14  12  13   9  12   9   8   3   1   9   1   0   0   0   0&#xA;Modula-3     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   1   0   1   1   2   0   1   0&#xA;Oberon       0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   5   8   5   1   5   6   3   4   2   2   0&#xA;Occam        0   0   0   0   0   0   0   0   0   0   0   0   0   2  11   6  11  20  35  19  19  19  13  15  11   8   8   2   4   5&#xA;Pascal       0   0   0   2  15   6  19  13  34  30  56  60  62 128  90 109 101 125 105  98  99  85  60  68  46  32  28  17  24  15&#xA;Perl         0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   4   0   3   9  14  30  37&#xA;PL-11        0   0   0   0   1   0   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0&#xA;PL/C         0   0   0   2   4   0   1   0   1   0   2   0   1   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0&#xA;PL/I         7  17  16  16  15   9   7  10  15   8   5   6  13   3   3   6   2   2   2   0   1   2   0   0   2   1   0   1   1   0&#xA;Postscript   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   2   9   0   6   5   3   0   0   1   1   1   0   1&#xA;Prolog       0   0   0   0   0   0   0   1   0   1   0   4   8  12  31  43  77  89  68  53  70  62  44  71  43  22  30  16  17   9&#xA;REXX         0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   3   1   0   1   0   4   1   3   5   5   3   2   2   2   0&#xA;Scheme       0   0   0   0   0   2   0   0   2   0   0   0   0   0   4   3   4   4   2   2  10  16   5   2   6   6  11   8   4   6&#xA;sed          0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   2   0   0&#xA;Simula       0   0   0   0   3   6   3   2   2   9  14   3   4   0   0   0   0   1   3   0   0   0   0   0   2   0   0   1   0   0&#xA;Smalltalk    0   0   0   0   0   1   0   3   0   0   0   0   2   2   4   6   3   8   4   8   6  12   5  14  20  19  11   6   9  12&#xA;tcl          0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   3   1   2   2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Graphing the top-eleven languages (by overall publications) per year gives:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hmVCy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hmVCy.png&quot; alt=&quot;Programming language popularity by year&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11374" LastEditorUserId="11374" LastEditDate="2019-06-11T01:34:15.203" LastActivityDate="2019-06-11T01:34:15.203" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="11323" PostTypeId="2" ParentId="11280" CreationDate="2019-06-10T10:26:39.930" Score="8" Body="&lt;p&gt;See Robert Bixby, &quot;Solving Real World Linear Programming Problems:A Decade and More of Progress.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://doi.org/10.1287/opre.50.1.3.17780&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://doi.org/10.1287/opre.50.1.3.17780&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This paper compares a 1980's version of the CPLEX solver on old and new hardware with a contemporary (the paper was published in 2002 or 2003) version of CPLEX on contemporary hardware and finds that Improvements in the code and the hardware each contributed 3 orders of magnitude to speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper includes a useful history of LP solvers back to the 1960's.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been several follow up papers and presentations by Bixby and colleagues from GuRoBi.&lt;/p&gt;&#xA;" OwnerUserId="817" LastEditorUserId="817" LastEditDate="2019-06-10T17:43:18.443" LastActivityDate="2019-06-10T17:43:18.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11324" PostTypeId="2" ParentId="11286" CreationDate="2019-06-10T14:26:59.003" Score="4" Body="&lt;p&gt;When I came across an article about self modified Basic code on Mega65 project's blog.&#xA;I wanted to try it myself and wrote the following code. The program itself doesn't make much sense but it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trick is to place erroneous syntax in Basic memory. Then find the address of the erroneous tokens to replace it with whatever you want in runtime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code is written for CBM Basic 2.0 (C64) in petcat format.   &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 gosub 9000 : rem find gosub address&#xA;20 print &quot;{clear}{white}&quot;&#xA;30 print &quot;self modifyng basic&quot;&#xA;40 ln=1000 : gosub 9100 : rem update address&#xA;50 gosub,12345&#xA;60 goto 50&#xA;&#xA;999 rem ******************* subroutines&#xA;1000 print &quot;this subroutine runs only once&quot;&#xA;1010 ln=2000 : gosub 9100&#xA;1020 return&#xA;&#xA;2000 print &quot;this subroutine runs only once, too&quot;&#xA;2010 ln=3000 : gosub 9100&#xA;&#xA;3000 poke ja,44 : rem place comma again &#xA;3010 end&#xA;&#xA;8999 rem&#xA;9000 rem *********** find gosub address&#xA;9010 for ja=2048 to 40959&#xA;9020 if peek(ja-1)&amp;lt;&amp;gt;141 or peek(ja)&amp;lt;&amp;gt;44 then next&#xA;9030 return&#xA;9100 rem ****** change gosub address&#xA;9110 ln$=str$(ln)&#xA;9120 for i=0 to 5: poke ja+i,32 : next&#xA;9130 for i=1 to len(ln$): poke(ja+i),asc(right$(left$(ln$,i),1)) : next&#xA;9140 return&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Blog post I've mentioned is in &lt;a href=&quot;http://c65gs.blogspot.com/2018/04/gosub-variable-in-c64-basic.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://c65gs.blogspot.com/2018/04/gosub-variable-in-c64-basic.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="3422" LastEditDate="2019-06-11T05:43:38.400" LastActivityDate="2019-06-11T05:43:38.400" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11325" PostTypeId="2" ParentId="11286" CreationDate="2019-06-10T14:50:41.743" Score="9" Body="&lt;p&gt;Atari BASIC included the &quot;ENTER&quot; keyword, which was the &quot;opposite of&quot; LIST. Whereas LIST wrote a program to text, ENTER read a program from text. One could use ENTER to read libraries by adding those lines to an existing program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast to most BASICs, Atari BASIC did not have any limitations between which keywords would operate in interactive mode vs. program mode. Thus:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 L.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Would cause the program to output itself when run. Likewise, you could use the ENTER in the program to have the program load more code and add it to itself.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2019-06-10T18:25:47.253" LastActivityDate="2019-06-10T18:25:47.253" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11326" PostTypeId="1" CreationDate="2019-06-10T15:33:06.530" Score="4" ViewCount="341" Body="&lt;p&gt;I'm having an odd issue with the aforementioned system, the A/V receiver is a RCA STAV-4180 unit, and being from 1996, it's still a great unit. So far, while it's tape output for recording does have noise coupling issues, none of the inputs do. The buzzing only happens with the PS2 and goes away when the PS2 is turned off. I've done a lot of troubleshooting and can't find anywhere else that the buzzing is coming from. Any tips? I think the cable itself may be the point of ingress for the interference, but am unsure. &lt;/p&gt;&#xA;" OwnerUserId="13843" LastEditorUserId="3290" LastEditDate="2020-05-01T07:24:07.070" LastActivityDate="2020-05-01T07:24:07.070" Title="PlayStation 2 Slim with analog A/V output having noise interference issues" Tags="&lt;gaming&gt;&lt;audio&gt;&lt;sony-playstation&gt;&lt;troubleshooting&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11327" PostTypeId="1" AcceptedAnswerId="11328" CreationDate="2019-06-10T17:02:56.247" Score="48" ViewCount="10423" Body="&lt;p&gt;Preface: This question does in part intersect with &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1591/use-of-undocumented-opcodes&quot;&gt;Use of undocumented opcodes&lt;/a&gt;, but targets especially the 8086 instruction handling.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I was reading Tanenbaum's &quot;Operating Systems, Design and Implementation&quot; 3rd edition (The MINIX Book), where I encountered the following quote that surprised me:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For instance, &lt;strong&gt;the 8086 and 8088 processors do not support detection of illegal instruction operation codes&lt;/strong&gt;, but this capability is available on the 286 and above, which trap on an attempt to execute an illegal opcode.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What &lt;em&gt;did&lt;/em&gt; the 8086 and 8088 do when it an encountered an illegal instruction?&lt;/p&gt;&#xA;" OwnerUserId="13844" LastEditorUserId="6659" LastEditDate="2019-06-15T09:29:02.953" LastActivityDate="2019-07-01T08:57:23.027" Title="What did the 8086 (and 8088) do upon encountering an illegal instruction?" Tags="&lt;instruction-set&gt;&lt;8086&gt;&lt;8088&gt;" AnswerCount="4" CommentCount="7" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11328" PostTypeId="2" ParentId="11327" CreationDate="2019-06-10T17:44:40.110" Score="54" Body="&lt;p&gt;Illegal opcodes were just instructions that hadn't been fully defined by the chip designers – a little like Undefined Behaviour in C, but much more predictable. Many people called these &quot;undocumented instructions&quot;, because they functioned just like ordinary instructions, on the particular versions of the particular chips on which they are found. There was no special handling to prevent these instructions from executing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of them were just &lt;code&gt;NOP&lt;/code&gt;s (either because they weren't wired up to anything or because they did stuff like writing a register to itself) or duplicates of other instructions (because the instruction decoder ignored some bits when it didn't need to pay attention to them), but some of them were more interesting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, &lt;a href=&quot;http://rcollins.org/secrets/opcodes/SALC.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;SALC&lt;/code&gt;&lt;/a&gt;, which does:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (carry flag set)&#xA;  AL = 0xFF;&#xA;else&#xA;  AL = 0x00;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This can be used as a translation layer between C code and certain assembly returning conventions. It is equivalent to &lt;code&gt;SBB AL, AL&lt;/code&gt;, except that it does not clobber flags.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information, see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1599/278&quot;&gt;Stephen Kitt's answer to Use of undocumented opcodes&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1602/278&quot;&gt;supercat's answer to Use of undocumented opcodes&lt;/a&gt;, which has a good explanation of where they come from.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/2811803/effect-of-undefined-opcodes-on-the-original-intel-8086-88&quot;&gt;A related question on Stack Overflow&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="278" LastEditorUserId="2037" LastEditDate="2019-06-11T01:39:53.097" LastActivityDate="2019-06-11T01:39:53.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11329" PostTypeId="2" ParentId="11327" CreationDate="2019-06-10T17:49:38.240" Score="45" Body="&lt;p&gt;It might be better to think about it this way:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the 80186 and above, a new thing was defined called an &quot;illegal instruction&quot;, and this new thing came with a new behavior -- a &lt;code&gt;#UD&lt;/code&gt; exception that was generated when one was encountered.  Before the 80186/80286, there was no such thing as an illegal instruction, just undocumented ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your question then becomes, &quot;what did the 8086 and 8088 do when encountering undocumented instructions&quot; and the answer is simply that the behavior was undocumented.  Some of them appeared to do nothing (i.e. they produced the same apparent result as a NOP instruction), while others did odd things, or simply the same thing as another opcode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a WayBack link that may shed more light on the situation:&#xA;&lt;a href=&quot;http://web.archive.org/web/20190321200321/http://www.os2museum.com/wp/undocumented-8086-opcodes-part-i/&quot; rel=&quot;noreferrer&quot;&gt;http://web.archive.org/web/20190321200321/http://www.os2museum.com/wp/undocumented-8086-opcodes-part-i/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="3296" LastEditDate="2019-06-11T17:21:02.437" LastActivityDate="2019-06-11T17:21:02.437" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11330" PostTypeId="1" AcceptedAnswerId="11331" CreationDate="2019-06-10T17:50:23.637" Score="7" ViewCount="1309" Body="&lt;p&gt;I got an Amiga 2000, board Rev. 6 Does anyone know what is is?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w8Fp1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w8Fp1m.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;  &lt;a href=&quot;https://i.stack.imgur.com/yME9c.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yME9cm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;  (click to enlarge)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="6802" LastEditDate="2019-06-10T19:08:05.290" LastActivityDate="2019-06-10T20:34:14.157" Title="What is this Amiga 2000 mod?" Tags="&lt;hardware&gt;&lt;amiga-2000&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11331" PostTypeId="2" ParentId="11330" CreationDate="2019-06-10T18:33:23.543" Score="8" Body="&lt;p&gt;It is not an aftermarket mod. As evidenced from numerous &lt;a href=&quot;https://oldcraporg.files.wordpress.com/2018/08/f0429376.jpg&quot; rel=&quot;noreferrer&quot;&gt;pictures&lt;/a&gt;  on the net. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like:&#xA;A2000 Revision 6.3 Motherboard - on &lt;a href=&quot;https://www.bigbookofamigahardware.com/bboah/product.aspx?id=17&quot; rel=&quot;noreferrer&quot;&gt;Big Book of Amiga Hardware – Amiga Models &amp;amp; Clones / Commodore: A2000&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0Hrwg.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0Hrwgm.jpg&quot; alt=&quot;A2000 Revision 6.3 Motherboard - &quot;&gt;&lt;/a&gt;&#xA;  &lt;a href=&quot;https://i.stack.imgur.com/fSaEB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fSaEBm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As explained there:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;At the time, the Rev 4.x was in production, and the new board was desired for new production, as the price crossover from the 256K x 1 to the 256K x 4 memories had been reached. However, the Rev 5 board was completed ahead of the need for it. So the PCB guys did some additional cleanup work on the design, and I think the FCC people got involved, too. Regardless, the resulting Rev 6 motherboards were plagued with problems (in fairness, some were due to the switchover to a 68000 with faster signals, that was also noisier). - Dave Haynie&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's just a late time fix to get it shipping.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gc1Dk.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gc1Dks.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;  –– From: Amiga A2000_R6 Rev.1.38 (05.09.2012) AmigaWiki &lt;a href=&quot;https://www.amigawiki.org/dnl/schematics/A2000_R6.pdf&quot; rel=&quot;noreferrer&quot;&gt;PDF&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Some call it the &lt;a href=&quot;http://eab.abime.net/attachment.php?attachmentid=44062&amp;amp;d=1429905566&quot; rel=&quot;noreferrer&quot;&gt;&quot;funky bridge&quot;&lt;/a&gt; as explained in &lt;a href=&quot;http://eab.abime.net/showthread.php?t=65570&quot; rel=&quot;noreferrer&quot;&gt;Amiga 2000 Rev 6 to Rev 6.2 (or 6.3) hardware changes&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears to be &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Rev. 6.2: &quot;Solder series connection of 68 Ohm and 270 pF to the very right of the 4 vias below CN303, other end of the circuit to ground. Eliminates power on Guru&quot;.&lt;br&gt;&#xA;  –– as documented here: &lt;a href=&quot;http://www.amigawiki.org/doku.php?id=de:service:upgrades:a2000_mainboard&quot; rel=&quot;noreferrer&quot;&gt;AmigaWiki A2000 Mainboard Upgrade&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="6802" LastEditorUserId="6802" LastEditDate="2019-06-10T20:34:14.157" LastActivityDate="2019-06-10T20:34:14.157" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11332" PostTypeId="2" ParentId="11286" CreationDate="2019-06-11T09:41:29.750" Score="5" Body="&lt;p&gt;The Sinclair QL updated with SMSQ/E and some BASIC extensions (all courtesy of about 1990) does that in a very straightforward way by using two multi-tasking BASIC jobs, one typing in code to the other:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;100 EXEP &quot;SBASIC&quot; : REMark runs a daughter BASIC job&#xA;110 TYPE_IN &quot;100 PRINT 'Hello, World'&quot; &amp;amp; CHR$(10) : REMark TYPE_IN sends keystrokes from string to the current console&#xA;120 TYPE_IN &quot;110 GO TO 10&quot; &amp;amp; CHR$(10)&#xA;130 TYPE_IN &quot;RUN&quot; &amp;amp; CHR$(10)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This starts a second instance of BASIC, multitasking with the current one and &quot;types  in&quot; a program, then runs it. Pretty much like in your hypothetical example.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-06-15T09:59:36.307" LastActivityDate="2019-06-15T09:59:36.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11333" PostTypeId="2" ParentId="1591" CreationDate="2019-06-11T11:10:05.697" Score="6" Body="&lt;p&gt;Not sure that this really counts as using &lt;em&gt;undocumented&lt;/em&gt; op-codes, but might be sufficiently related to be of interest...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the 8086, there are often two ways of encoding the same instruction (especially for register-register operations). At least one shareware package (&lt;a href=&quot;http://www.eji.com/a86/&quot; rel=&quot;noreferrer&quot;&gt;the A86/A386 assembler&lt;/a&gt; written by Eric Isaacson) uses this facility to &quot;watermark&quot; the files it creates. From the documentation:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A86 takes advantage of situations in which more than one set of opcodes can be generated for the same instruction. [&lt;em&gt;Cites &lt;code&gt;MOV AX,BX&lt;/code&gt; as an example&lt;/em&gt;].  Both forms are absolutely identical in functionality and execution speed. A86 adopts an unusual mix of choices in such situations.  This creates a code-generation &quot;footprint&quot; that occupies no space in your program file, but will enable me to tell, and to demonstrate in a court of law, if a non-trivial object file has been produced by A86.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Ignoring a lot of extraneous detail&lt;sup&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/sup&gt;, the layout of many two-byte 8086 instructions is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;           +-------------------------------+&#xA;      bit: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |&#xA;           +-------------------------------+&#xA;byte 1     |        opcode         | d | w |&#xA;           +-------------------------------+&#xA;byte 2     |  mod  |    reg    |    r/m    |&#xA;           +-------------------------------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;opcode&lt;/code&gt; specifies the instruction,&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;d&lt;/code&gt; is the direction:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;d=0&lt;/code&gt; data moves from operand specified by &lt;code&gt;r/m&lt;/code&gt; to operand specified by &lt;code&gt;reg&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;d=1&lt;/code&gt; data moves from operand specified by &lt;code&gt;reg&lt;/code&gt; to operand specified by &lt;code&gt;r/m&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;w&lt;/code&gt; is the size (&lt;code&gt;=0&lt;/code&gt; for byte; &lt;code&gt;=1&lt;/code&gt; for word).&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mod&lt;/code&gt; is a par of &quot;mode&quot; bits that specify addressing mode and how the &lt;code&gt;r/m&lt;/code&gt; field is used. For our purposes, &lt;code&gt;=11&lt;/code&gt; means a two-register instruction.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;reg&lt;/code&gt; / &lt;code&gt;r/m&lt;/code&gt; indicate a pair of registers, where &lt;code&gt;000&lt;/code&gt; means &lt;code&gt;AX&lt;/code&gt; and &lt;code&gt;011&lt;/code&gt; means &lt;code&gt;BX&lt;/code&gt; among others.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With this in mind, a 16-bit register-to-register move instruction (e.g. &lt;code&gt;MOV AX,BX&lt;/code&gt;) can be encoded in two different ways:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;            byte 1                                byte 2&#xA;          +-----------------------+---+---+     +-------+-----------+-----------+&#xA;          |        opcode         | d | w |     |  mod  |    reg    |    r/m    |&#xA;          +-----------------------+---+---+     +-------+-----------+-----------+&#xA; 89  D8   | 1   0   0   0   1   0 | 0 | 1 |     | 1   1 | 0   1   1 | 0   0   0 |&#xA;          +-----------------------+---+---+     +-------+-----------+-----------+&#xA; 8B  C3   | 1   0   0   0   1   0 | 1 | 1 |     | 1   1 | 0   0   0 | 0   1   1 |&#xA;          +-----------------------+---+---+     +-------+-----------+-----------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that &lt;code&gt;d&lt;/code&gt; is flipped between the two forms, and the values of &lt;code&gt;reg&lt;/code&gt; and &lt;code&gt;r/m&lt;/code&gt; are swapped.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/sup&gt; These details were taken from &lt;a href=&quot;http://aturing.umcs.maine.edu/~meadow/courses/cos335/8086-instformat.pdf&quot; rel=&quot;noreferrer&quot;&gt;course notes from the University of Maine&lt;/a&gt; (PDF) which also include the missing, extraneous stuff I have skipped over.&lt;/p&gt;&#xA;" OwnerUserId="731" LastActivityDate="2019-06-11T11:10:05.697" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11334" PostTypeId="1" AcceptedAnswerId="11336" CreationDate="2019-06-11T13:56:10.697" Score="4" ViewCount="766" Body="&lt;p&gt;I make a homebrew (for hobby) game console on Z80A, and I need help.&lt;br&gt;&#xA;Now I'm stuck - I need to be able to count milliseconds and microseconds in the code. For example, how it is done in Arduino : &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;millis() // function - returns the number of milliseconds since the start of the program&#xA;micros() // function - the same, but returns microseconds.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I tried to solve the problem myself, here are the ways:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Way 1:&lt;/strong&gt;&#xA;Use two different functions in which the code runs exactly 1 millisecond and 1 microsecond respectively. After this function code, the values of the variables increase: globalMilliseconds and globalMicroseconds, respectively.&#xA;But how often to call it and where? For example in this code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void gameCycle(){&#xA;    UpdateInput();&#xA;    UpdateLogic();&#xA;    Draw();&#xA;}&#xA;&#xA;while(true){&#xA;    gameCycle();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Way 2:&lt;/strong&gt;&#xA;Use external timer circuit. There are two options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Way 2.1&lt;/strong&gt; to pin a non-masked interrupt, attach a crystal with a frequency of 10KHz (not sure about this value, but with another value idea is same), and in the non-masked interrupt handler, increase the value of the variable globalMicroseconds. That is, each crystal tick - means that one microsecond has passed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Way 2.2&lt;/strong&gt; use a programable timer chip, as is done in many examples of homemade Z80. For example, Z80CTC or Intel 8255 / 8254. But it can be done in different ways. At the moment I see it this way: the timer is connected to an interrupt of Z80, when the timer is triggered, I increase the value of the variable globalMicroseconds, and restart the timer. The timer works on its own crystal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wouldn’t there be a delay in the I / O code? Because interrupt timer should be processed at any point of any code, including I / O?&lt;/p&gt;&#xA;" OwnerUserId="13852" LastEditorUserId="129" LastEditDate="2019-06-11T14:06:35.130" LastActivityDate="2019-06-12T00:16:06.843" Title="How to teach the Z80 to count milliseconds and microseconds like Arduino?" Tags="&lt;z80&gt;&lt;homemade&gt;&lt;8254&gt;" AnswerCount="5" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11335" PostTypeId="1" AcceptedAnswerId="11383" CreationDate="2019-06-11T15:22:11.343" Score="9" ViewCount="617" Body="&lt;p&gt;Early DRAMs have a multiplexed address bus. Briefly speaking, to access a word, one needs to...&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Put the row address on the bus, and latch it using the falling edge of &lt;code&gt;/RAS&lt;/code&gt; signal.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Put the column address on the bus, and latch it using the falling edge &lt;code&gt;/CAS&lt;/code&gt; signal.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The data appears at the data bus after a delay, i.e. &lt;code&gt;CL&lt;/code&gt;, the &lt;code&gt;/CAS&lt;/code&gt; latency.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The above process is shown in this timing diagram:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UB9YY.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UB9YY.png&quot; alt=&quot;Moktek 4116 DRAM Read Timing Diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, in the &lt;a href=&quot;https://web.archive.org/web/20181120132001/https://console5.com/techwiki/images/8/85/MK4116.pdf&quot; rel=&quot;noreferrer&quot;&gt;Mostek 4116 DRAM datasheet&lt;/a&gt;, &lt;em&gt;Column Address Set-up Time&lt;/em&gt;, a.k.a &lt;code&gt;t_ASC&lt;/code&gt;, the time between a valid column address and the falling edge of &lt;code&gt;/CAS&lt;/code&gt;, is a negative number. In other words, &lt;code&gt;/CAS&lt;/code&gt; is allowed to start falling even &lt;em&gt;before&lt;/em&gt; the column address is stable, up to 10 nanoseconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CqzjK.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CqzjK.png&quot; alt=&quot;Timing Specification of Moktek 4116 DRAM, note that the column address set-up time is -10 nanoseconds.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is especially problematic when interfacing devices designed for 4116 DRAM. One classic example is Texas Instruments TMS9918 video chip, of which the chip &lt;a href=&quot;https://cdn.hackaday.io/files/1608516881849184/SRAM%20Replacement%20for%20TMS99x8%20VRAM.pdf&quot; rel=&quot;noreferrer&quot;&gt;actually does start pulling &lt;code&gt;/CAS&lt;/code&gt; low&lt;/a&gt; before the column address is stable. Artificial delay must be introduced to interface it with newer RAM chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In comparison, in the &lt;a href=&quot;http://pdf.datasheetcatalog.com/datasheet/oki/MSM514256C.pdf&quot; rel=&quot;noreferrer&quot;&gt;the datasheet of a modern CMOS DRAM&lt;/a&gt;, Oki MSM514256C, a 256K x 4-bit DRAM (circa. 1997), &lt;code&gt;t_ASC&lt;/code&gt; is 0 nanoseconds, which basically means the &lt;code&gt;/CAS&lt;/code&gt; is only allowed to fall as soon as the the column address is valid, which is more intuitive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8uBve.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8uBve.png&quot; alt=&quot;Timing Specification of Oki MSM514256C DRAM&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know a negative set-up time is sometimes used in digital devices, but what is the specific design rationale of having a negative Column Address Set-up Time in 4116 DRAMs? Is it simply a side-effect (e.g. propagation delay?) of the logic details used in 4116? Is it designed to allow the timing requirement to be met more easily? A faster access speed? Or it's something else?&lt;/p&gt;&#xA;" OwnerUserId="12128" LastEditorUserId="12128" LastEditDate="2019-06-12T01:29:37.113" LastActivityDate="2019-06-17T19:03:45.963" Title="Why do Early DRAMs (e.g. 4116) have a negative Column Address Set-up Time?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;4116&gt;&lt;dram&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11336" PostTypeId="2" ParentId="11334" CreationDate="2019-06-11T15:25:57.270" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Now I'm stuck - I need to be able to count milliseconds and microseconds in the code.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Forget about microseconds. Single instructions on a Z80 are already in the range of 1 µs or even longer, depending on the clock speed used.&lt;/p&gt;&#xA;&lt;p&gt;For fast CPUs it's fine to use some 'standard' value; for classic CPUs it's more appropriate to use a unit that fits your game design. Like frames. After all, no reaction can be counted and shown to the user faster than a frame takes. That would make something like 1/50th or 1/60th of a second. For practical game use even 1/10th is still good.&lt;/p&gt;&#xA;&lt;p&gt;If there are no frames, create them. Like with your interrupt approach.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For example, how it is done in Arduino :&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;millis() // function - returns the number of milliseconds since the start of the program&#xA;micros() // function - the same, but returns microseconds.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To do exactly the same you'd need an external counter (CTC), running continuously and in parallel with the Z80. After all, the Z80 is, much like the Arduino's AVR, a single CPU: not able to count and work at the same time.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I tried to solve the problem myself, here are the ways:&lt;/p&gt;&#xA;&lt;p&gt;Way 1: Use two different functions in which the code runs exactly 1 millisecond and 1 microsecond respectively. After this function code, the values of the variables increase: &lt;code&gt;globalMilliseconds&lt;/code&gt; and &lt;code&gt;globalMicroseconds&lt;/code&gt;, respectively. But how often to call it and where?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Won't work. After all, it would just count the time the CPU is within these functions, so no time for anything else.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Way 2: Use external timer circuit. There are two options.&lt;/p&gt;&#xA;&lt;p&gt;Way 2.1 to pin a non-masked interrupt, attach a crystal with a frequency of 10KHz (not sure about this value, but with another value idea is same),&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A bit high, see before. Rather use your frame rate - or 1/100th - as base. Put your main program on hold and have the interrupt release it from the halt for one game cycle. Maybe increment the timer value every such start, giving you all the precision you  need.&lt;/p&gt;&#xA;&lt;p&gt;If there is no frame source, use the CPU clock to do so.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Way 2.2 use a programmable timer chip, as is done in many examples of home-made Z80. For example, Z80CTC or Intel 8255 / 8254. But it can be done in different ways. At the moment I see it this way: the timer is connected to an interrupt of Z80, when the timer is triggered, I increase the value of the variable &lt;code&gt;globalMicroseconds&lt;/code&gt;, and restart the timer. The timer works on its own crystal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Works fine, except it will have to be milliseconds, as servicing an interrupt on the Z80 will take considerably more than a microsecond, and thus using more then 100% of CPU time - no time left for the game &lt;strong&gt;and&lt;/strong&gt; the clock will run behind. :))&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Wouldn’t there be a delay in the I / O code? Because interrupt timer should be processed at any point of any code, including I / O?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure, but it's only a small part. Of course, this depends on the rest of your system. If there are timing-critical sections the approach is problematic.&lt;/p&gt;&#xA;&lt;p&gt;So best might be &lt;strong&gt;Way 2.3:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If the system has a frame counter, use it as an interrupt source for synchronisation. Otherwise use a CTC in reload mode to synchronize the game look to a useful time slice - anywhere between 1/10th and 1/100th of a second. Slower will make negative effects, faster brings no gain (can't be noticed by player).&lt;/p&gt;&#xA;&lt;p&gt;Base line: Make your program fit the system, not force the system to your program.&lt;/p&gt;&#xA;&lt;p&gt;(Alternative Motto: Just make it as good as needed, not more)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-06-11T17:10:24.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11337" PostTypeId="2" ParentId="11326" CreationDate="2019-06-11T15:36:30.763" Score="1" Body="&lt;p&gt;I would recommend getting decent PS2 cable with RF shielding. I had the same issue when connected to TV, even though console's audio was muted.&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2019-06-11T15:36:30.763" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11338" PostTypeId="2" ParentId="11334" CreationDate="2019-06-11T16:28:29.780" Score="0" Body="&lt;p&gt;Other answers deal with millisecond resolution. If you really, really need microseconds, you can use the R register, which is increased every M1 cycle, that is roughly one opcode fetch - depending on RAM wait states, it can be somewhat reliable (though it overflows on 7 bits, so you have to fit your measurement within this interval or compensate accordingly if you know how many instruction were executed).&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2019-06-11T16:28:29.780" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11339" PostTypeId="2" ParentId="11334" CreationDate="2019-06-11T17:13:09.433" Score="5" Body="&lt;p&gt;You have correctly surmised the two approaches to measuring time, not just on the Z80 but in computers in general.  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;With a processor like the Z80 where every instruction takes a known number of cycles, you can simply count cycles to keep track of time.  All branches, subroutines and loops in your code must be accounted for in the cycle count.  It's possible, but such programming is also infamous for its complexity.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use an external device with a clock.  This can be a device with a register which increments with time, or a device which interrupts the processor at a regular interval, or both (like most programmable timers).  If you have a timer on the system, certainly use it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2019-06-11T17:13:09.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11340" PostTypeId="2" ParentId="11334" CreationDate="2019-06-11T17:28:33.013" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Way 2.1 to pin a non-masked interrupt, attach a crystal with a frequency of 10KHz (not sure about this value, but with another value idea is same), and in the non-masked interrupt handler, increase the value of the variable globalMicroseconds. That is, each crystal tick - means that one microsecond has passed.&lt;/p&gt;&#xA;&lt;p&gt;Way 2.2 use a programable timer chip, as is done in many examples of homemade Z80. For example, Z80CTC or Intel 8255 / 8254. But it can be done in different ways. At the moment I see it this way: the timer is connected to an interrupt of Z80, when the timer is triggered, I increase the value of the variable globalMicroseconds, and restart the timer. The timer works on its own crystal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is not a complete answer, but I'd like to mention what you've described is not &amp;quot;cheating&amp;quot;, it's the standard way to count time. If you want to count time in the most generic and flexible manner, using an external timer, like a Z80-CTC is the way to go. And ultimately, this is exactly how millisecond-counting is implemented in Arduino internally as well!&lt;/p&gt;&#xA;&lt;p&gt;One thing to keep in mind is the fact that an Atmega chip is a &lt;em&gt;microcontroller&lt;/em&gt;, in other words, a microprocessor core with a bunch of builtin peripherals, while the Z80 is only a microprocessor. Please take a look of the block diagram of an Atmega328P.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dix5k.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dix5k.png&quot; alt=&quot;Atmega328P block diagram&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As, you can see, an Atmega328P microcontroller is pretty much a complete computer on a chip: there's a AVR microprocessor with its own flash and SRAM, but there are also 8-bit and 16-bit timers attached to the system bus, not too different from a Z80 with an external timer chip.&lt;/p&gt;&#xA;&lt;p&gt;In the Arduino development environment, the function &lt;code&gt;millis()&lt;/code&gt; is controlled by interrupts generated by 8-bit timer 0. The complete implementation is available in &lt;a href=&quot;https://github.com/arduino/Arduino/blob/a2b3da769888555fcf5e591bae44f3239618a16c/hardware/cores/arduino/wiring.c#L44&quot; rel=&quot;noreferrer&quot;&gt;hardware/cores/arduino/wiring.c&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Here's an overview of Arduino's implementation. I hope it helps.&lt;/p&gt;&#xA;&lt;p&gt;First, the global variables are defined as counters,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;volatile unsigned long timer0_overflow_count = 0;&#xA;volatile unsigned long timer0_millis = 0;&#xA;static unsigned char timer0_fract = 0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The &lt;code&gt;init()&lt;/code&gt; function is called to enable the Timer0 interrupt. This occurs before Arduino executes the &lt;code&gt;setup()&lt;/code&gt; function.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void init()&#xA;{&#xA;    // set timer 0 prescale factor to 64&#xA;#if defined(__AVR_ATmega8__)&#xA;    sbi(TCCR0, CS01);&#xA;    sbi(TCCR0, CS00);&#xA;#else&#xA;    sbi(TCCR0B, CS01);&#xA;    sbi(TCCR0B, CS00);&#xA;#endif&#xA;&#xA;    // enable timer 0 overflow interrupt&#xA;#if defined(__AVR_ATmega8__)&#xA;    sbi(TIMSK, TOIE0);&#xA;#else&#xA;    sbi(TIMSK0, TOIE0);&#xA;#endif&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The interrupts from Timer0 is handled by function &lt;code&gt;TIMER0_OVF_vect&lt;/code&gt;, which updates the global variables corresponding to timing.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SIGNAL(TIMER0_OVF_vect)&#xA;{&#xA;    // copy these to local variables so they can be stored in registers&#xA;    // (volatile variables must be read from memory on every access)&#xA;    unsigned long m = timer0_millis;&#xA;    unsigned char f = timer0_fract;&#xA;&#xA;    m += MILLIS_INC;&#xA;    f += FRACT_INC;&#xA;    if (f &amp;gt;= FRACT_MAX) {&#xA;        f -= FRACT_MAX;&#xA;        m += 1;&#xA;    }&#xA;&#xA;    timer0_fract = f;&#xA;    timer0_millis = m;&#xA;    timer0_overflow_count++;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When &lt;code&gt;millis()&lt;/code&gt; is called, the function simply copies and returns the global counter. Before reading the global counter, &lt;code&gt;millis()&lt;/code&gt; also temporally disables the interrupts to prevent the global counter from incrementing while reading them.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;unsigned long millis()&#xA;{&#xA;    unsigned long m;&#xA;    uint8_t oldSREG = SREG;&#xA;&#xA;    // disable interrupts while we read timer0_millis or we might get an&#xA;    // inconsistent value (e.g. in the middle of a write to timer0_millis)&#xA;    cli();&#xA;    m = timer0_millis;&#xA;    SREG = oldSREG;&#xA;&#xA;    return m;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Furthermore, the &lt;code&gt;delayMicroseconds()&lt;/code&gt; function in Arduino is implemented through cycle-counting, but the millisecond-delay function is simply a busy-loop.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void delay(unsigned long ms)&#xA;{&#xA;    unsigned long start = millis();&#xA;    &#xA;    while (millis() - start &amp;lt;= ms)&#xA;        ;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In principle, if you add an external timer to your Z80 computer, you can implement an interrupt handler and provide an assembly routine to return the current value of your counter just like how Arduino does it. Although it's more difficult if you want low overhead and high resolution.&lt;/p&gt;&#xA;" OwnerUserId="12128" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-06-11T17:42:22.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11341" PostTypeId="1" AcceptedAnswerId="11344" CreationDate="2019-06-11T18:46:29.543" Score="2" ViewCount="228" Body="&lt;p&gt;The Apple IIgs (last, ROM03 version) came with 128K of standard RAM and 1M of FAST RAM. The distinguishing characteristic of the FAST RAM is that code running from there can run at 2.8 MHz instead of the standard compatibility speed of 1 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that the IIgs can theoretically run Apple II programs, I'd like to run them from FAST RAM for maximum performance. However, 6502 code is normally not position-independent, and I think that most all Apple II programs would therefore need to load and run from their &quot;normal&quot; address locations, which would be in standard RAM. Or, there has to be a fancy loader that can fix-up all the references as the code is relocated, right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I force an Apple II 6502 program (&lt;em&gt;NOT&lt;/em&gt; a IIgs &lt;em&gt;native program&lt;/em&gt; written for the 65816) to run on the IIgs but relocate the code and data to FAST RAM? &lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-06-11T20:41:15.897" Title="How to load into FAST RAM on Apple IIgs?" Tags="&lt;operating-system&gt;&lt;performance&gt;&lt;apple-iigs&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11342" PostTypeId="1" AcceptedAnswerId="11357" CreationDate="2019-06-11T19:06:57.673" Score="2" ViewCount="193" Body="&lt;p&gt;I have Amitek Hawk for my A1200, the board came with wrong RAM and apps were crashing with 8003 Guru error. After contacting the seller I was told by mistake wrong SIMM was shipped and I received a replacement, but this one fails to boot system, then after error continues to boot from CF, but crashes. Are the jumer settings / RAM correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/6KSbX.jpg&quot; alt=&quot;1&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/wH3ai.jpg&quot; alt=&quot;2&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/qbQq8.jpg&quot; alt=&quot;3&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2019-06-12T18:07:54.507" Title="Software Failure after RAM upgrade Amitek Hawk" Tags="&lt;hardware&gt;&lt;amiga-1200&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11343" PostTypeId="2" ParentId="11286" CreationDate="2019-06-11T20:30:26.887" Score="1" Body="&lt;p&gt;If your willing to write your own interrupter then yes, but with specific limitation due to ram.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So lets say we have an AI.CMD file.&#xA;Open,reading,writing, add lines, deleting line from any open file, were all part of the standard basic language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since we are talking about re-writing for an AI/self modifying program we are doing away with lengthy text descriptions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;General logic not fully executable code.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 open #1,&quot;AI.CMD&quot;&#xA;20 input #1,VLINE,COMMAND$,PARAMETERS$&#xA;30 if AI(VLINE,COMMAND$,PARAMTERS$)&amp;lt;&amp;gt;0 then goto 20 (the AI decide not to run this line of code)&#xA;30 if COMMAND$=&quot;1&quot; then print PARAMETERS$&#xA;40 if command$=&quot;2&quot; then duplicate a different command&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So every BASIC command would be assigned a number, and would get its own IF statement.  So here the print command is represented as command #1.  I am not saying this is going to be easy by any means.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the standard commands you can now modify the AI.CMD file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now deciding what to modify when is an incredible complex task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know nobody actually did this.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How many programs or data files could be held at one time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Generally, due to limited RAM, no files were held in memory at once, but instead a small pointer to said file was stored in memory.  The limits depended on the version of BASIC, but you could have 8 files or more open.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Generally, your biggest problem is running out of memory to store the program.  I started writing a TI Extended BASIC to assembly language convertor, but after getting even part way through I kept getting out of memory errors.  The TI 99/4(A) only had 32K memory with a massive expansion box and memory card.  So that ended that project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key here is the size and complexity of the self modifying routine would be very limited due to RAM size.  Computers 1984 and before, didn't really have enough functionality to make attempting this practical.&lt;/p&gt;&#xA;" OwnerUserId="7425" LastActivityDate="2019-06-11T20:30:26.887" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11344" PostTypeId="2" ParentId="11341" CreationDate="2019-06-11T20:41:15.897" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How can I force an Apple II 6502 program (NOT a IIgs native program written for the 65816) to run on the IIgs but relocate the code and data to FAST RAM?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No need to do so, as this is the default behaviour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To have it different one needs to set the speed to 1 MHz (in the control panel).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The 'slow' emulation memory is located in Bank E0/E1, while the 'fast' memory starts from bank 00/01 (default up to 7F for 8 MiB). By default all writes of bank 00/01 get also copied to the 'slow' banks. Not a big deal speedwise (see &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5557/6659&quot;&gt;here&lt;/a&gt; for more details), but it secures compatibility. All reads from I/O are as well taken via the Mega2 interface (synchronized at 1 MHz)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-06-11T20:41:15.897" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11345" PostTypeId="2" ParentId="11286" CreationDate="2019-06-11T23:55:44.733" Score="2" Body="&lt;p&gt;Yes.  In tokenized Basic interpreters (e.g. many early MicroSoft Basic derivatives) that include peek() function and poke statement, a running programs could examine its own tokens by peeking at memory, and modify the tokens on-the-fly by poking new values of tokens to be later executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The token formats for various statement and operations were reverse-engineered, with tables published and/or passed around various user groups.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This technique allowed, for instance, changing the expression A+B to A-B (etc.) for a larger but tight graphics loop without the overhead of an &quot;IF&quot; statement inside each loop iteration or repeating lots of code.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2019-06-11T23:55:44.733" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11346" PostTypeId="2" ParentId="11286" CreationDate="2019-06-12T00:06:16.000" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.nicholson.com/rhn/basic/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chipmunk Basic&lt;/a&gt; supports the merge command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Running this program&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 merge &quot;foo.bas&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;with a file including this text (initially not in the Basic program):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;20 print &quot;hello 20&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;will print &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;hello 20&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Having a program write a .bas file before using the merge command on it allows even more modification.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2019-06-12T00:06:16.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11347" PostTypeId="2" ParentId="11334" CreationDate="2019-06-12T00:09:14.913" Score="2" Body="&lt;p&gt;your best bet would be to hook up binary counter directly to your CPU clock and use it as divider that creates interrupt ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example if you got 4.0MHz and want ~1ms resolution then divide the clock by 2^12 so use 11th bit of counter (counting from zero) ... that will divide the clock by 4096 resulting in roughly 1ms interrupt ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then just write ISR that increments your global time value and or call time related code...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also decadic counters out there if you need better match to 1ms or just select proper crystal vs divider. You can also adjust the difference by SW adding or removing the increment once in a while so average rate would still match 1ms...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AVRs and even x86 from Pentium have this counter integrated directly on chip and its value is available as register. However it does not create interrupt so you need polling if you want to use it but because of it (no interrupts) the resolution is better (but of coarse you only measure more accurately and can not schedule tasks so fast ...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you really want ~1us resolution you need at least 1MHz source clock and access the counter output as I/O or memory address with a decoder. Again CPU clock is ideal for this. &lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-06-12T00:16:06.843" LastActivityDate="2019-06-12T00:16:06.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11349" PostTypeId="1" CreationDate="2019-06-12T07:43:34.947" Score="7" ViewCount="1363" Body="&lt;p&gt;I recently purchased an Apple //e online as well as a BMOW Floppy Emu in order to emulate some disk images. After working with it successfully for awhile, this monitor consistently appeared in lieu of the expected program. This occured after many resets/power cycles over the course of a few hours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;System details:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Apple //e model A2S2064&lt;/li&gt;&#xA;&lt;li&gt;A Software Dimensions Inc Firmware ID Card (apparently used for some kind of accounting software)&lt;/li&gt;&#xA;&lt;li&gt;DataLink 1200 Modem&lt;/li&gt;&#xA;&lt;li&gt;Super Serial Card II&lt;/li&gt;&#xA;&lt;li&gt;Apple IIe 80 Column / 64k RAM Expansion Card&lt;/li&gt;&#xA;&lt;li&gt;duodisk drive&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This monitor consistently appears when:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Booting from the duodisk&lt;/li&gt;&#xA;&lt;li&gt;Booting from the BMOW Floppy Emu&lt;/li&gt;&#xA;&lt;li&gt;Booting from multiple diffent physical disks via the duodisk&lt;/li&gt;&#xA;&lt;li&gt;Booting from different emulated disk images via the BMOW Floppy Emu&lt;/li&gt;&#xA;&lt;li&gt;Booting ProDOS&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Attempted &quot;fixes&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ensuring all cards are properly connected&lt;/li&gt;&#xA;&lt;li&gt;Leaving the computer sit for a few hours without operation (shows monitor on boot)&lt;/li&gt;&#xA;&lt;li&gt;Removing all &quot;unnecessary&quot; cards (super serial, the weird firmware id card, memory expansion, and data link modem) and attempting to boot (shows monitor on boot)&lt;/li&gt;&#xA;&lt;li&gt;Removing ALL cards and booting into BASIC (successful)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Why would this monitor consistently appear when attempting to boot from floppy? What types of debugging techniques can be used to find the root cause of this issue?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Monitor when booting a ProDOS disk:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/55UdO.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/55UdO.jpg&quot; alt=&quot;Original monitor on arbitrary ProDOS image&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Monitor when booting a DOS3.3 disk:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/DAQcT.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DAQcT.jpg&quot; alt=&quot;Monitor on Dos3.3 image&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13860" LastEditorUserId="13860" LastEditDate="2019-06-12T09:48:40.427" LastActivityDate="2020-03-27T16:09:57.900" Title="Why does this Apple //e drops into system monitor when booting?" Tags="&lt;apple-ii&gt;" AnswerCount="4" CommentCount="10" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11350" PostTypeId="2" ParentId="11349" CreationDate="2019-06-12T08:03:30.437" Score="4" Body="&lt;p&gt;FWIW, starting after the first &lt;code&gt;FB&lt;/code&gt; (which appears to be the end of a previous instruction), this disassembles as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Lb8c9               lda $bb00,y&#xA;                    lsr $bc00,x&#xA;                    rol a&#xA;                    lsr $bc00,x&#xA;                    rol a&#xA;                    sta ($3e),y&#xA;                    iny&#xA;                    cpy $26&#xA;                    bne Lb8c6&#xA;                    rts&#xA;&#xA;Lb8dc               ldy #$20&#xA;Lb8de               dey&#xA;                    beq Lb942&#xA;Lb8e1               lda $c08c,x&#xA;                    bpl Lb8e1&#xA;Lb8e6               eor #$d5&#xA;                    bne Lb8de&#xA;                    nop&#xA;Lb8eb               lda $c08c,x&#xA;                    bpl Lb8eb&#xA;                    cmp #$aa&#xA;                    bne Lb8e6&#xA;                    ldy #$56&#xA;Lb8f6               lda $c08c,x&#xA;                    bpl Lb8f6&#xA;                    cmp #$ad&#xA;                    bne Lb8e6&#xA;                    lda #$00&#xA;                    dey&#xA;                    sty $26&#xA;                    ldy $c08c,x&#xA;                    bpl L0000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Posted and wikified in case anyone more knowledgeable of the Apple ][ can do anything with it! (Disassembly courtesy of &lt;a href=&quot;https://www.white-flame.com/wfdis/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.white-flame.com/wfdis/&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="731" LastActivityDate="2019-06-12T08:03:30.437" CommentCount="3" CommunityOwnedDate="2019-06-12T08:03:30.437" ContentLicense="CC BY-SA 4.0" />
  <row Id="11351" PostTypeId="2" ParentId="11349" CreationDate="2019-06-12T08:05:50.163" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What kind of error is this and how can I remedy it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To start with, this isn't an error, but the monitor program.&lt;/p&gt;&#xA;&lt;p&gt;Look here for &lt;a href=&quot;http://www.easy68k.com/paulrsm/6502/MONREF.HTM&quot; rel=&quot;nofollow noreferrer&quot;&gt;a short command list&lt;/a&gt; - and &lt;a href=&quot;https://apple2online.com/web_documents/Apple%20Monitors%20Peeled.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple Monitors Peeled&lt;/a&gt; for in detail information.&lt;/p&gt;&#xA;&lt;p&gt;To leave it press CTRL-C - or RESET. It's an Apple II, so RESET will always help and bring the system into a default state while destroying as little as possible.&lt;/p&gt;&#xA;&lt;p&gt;Now, why the system enters the monitor during floppy operation can not even be speculated, at least not in a serious manner.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;It may be a defect on the controller side, so try unplugging, resettle all chips and plug in again - the old pull the plug routine.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It could be software as well. Was it always the same program/disk?&lt;/p&gt;&#xA;&lt;p&gt;Maybe the data loaded is placed into page three and corrupts the cold start vector?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The monitor is also the default target for any unserved interrupt. Which again may have any random source - no way to tell without more information.&lt;/p&gt;&#xA;&lt;p&gt;This includes code running into a 00-byte which will trigger a debug interrupt - here dropping into the monitor is after all intended behaviour to allow debugging.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As said before, pure guessing at this information level.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Does the dump on screen have any meaning&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Jau, it shows you some memory locations - 8 bytes with every press of return :))&lt;/p&gt;&#xA;&lt;p&gt;$B8xx is somewhere at the top of the first 48 KiB of RAM, depending on the Apple model and DOS you're using this might be some part of DOS code. But without more information it's hard to tell more. Often (not always) the first displayed address is the one where the interrupt has that - so not really useful, except telling that the CPU was just running some DOS code.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-27T16:09:57.900" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11352" PostTypeId="2" ParentId="11335" CreationDate="2019-06-12T08:56:19.843" Score="1" Body="&lt;p&gt;(Preface: leaving out the title column makes reading tables it a bit hard)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's all about translating labels and numbers into meaningful sentences. And there &lt;strong&gt;are&lt;/strong&gt; different ways to tell a fact, and thus more nuanced details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Timing does describe relations. Here it's about the fact, that CAS &lt;strong&gt;must&lt;/strong&gt; be released at least 20 ns before RAS can be pulled again. It's the relation between these two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course it could also have been described as RAS can be pulled at earliest 40 ns before CAS can be pulled, but that sounds optional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or translated as English sentences:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;tCRP -20ns&lt;/code&gt; means: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;A following access indicated by RAS &lt;strong&gt;must allow&lt;/strong&gt; for at least 20ns after the rising edge of CAS.&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;while &lt;code&gt;tCRP 5ns&lt;/code&gt;says:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;A following access indicated by RAS &lt;strong&gt;may happen&lt;/strong&gt; at least 20ns after the rising edge of CAS.&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The message is the same, comes down to the story the designer wants to tell.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: And yes, the art of speaking in timings got mostly lost since back then.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-13T08:35:08.617" LastActivityDate="2019-06-13T08:35:08.617" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11353" PostTypeId="2" ParentId="1341" CreationDate="2019-06-12T10:05:47.493" Score="2" Body="&lt;p&gt;In some memory constrained situations (like a 4K demo or something like that), it could be useful to stop the CPU. A &lt;code&gt;jam&lt;/code&gt; instruction is one obvious way to accomplish that in as few bytes as possible. Only the CPU will stop, so if you left some image or whatever on the screen, that's going to stay there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But another use I can think of is copy protection. Maybe you deliberately put &lt;code&gt;jam&lt;/code&gt; in the instruction stream as loaded from the disk. Then that byte is somehow replaced or modified in some hard-to-figure-out way, such as inside your raster interrupt, so that the whole thing is very delicately dependant on precise timing. Then if your program is pirated, the &lt;code&gt;jam&lt;/code&gt; executes, but under the condition that the developer expects, the program proceeds normally. I think I remember a description of a copy-protection scheme which worked in this way. But I can't remember exactly which game or which platform.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-06-12T10:05:47.493" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11354" PostTypeId="2" ParentId="11349" CreationDate="2019-06-12T11:43:26.133" Score="7" Body="&lt;p&gt;If your Apple is dropping you at the monitor, it means it tried to execute some set of instructions that went off the rails somehow.  I'll admit I am fuzzy on all the details, but generally you can attribute that to either the Apple motherboard, or a peripheral, or code.  The trick is to do a series of isolation steps to keep reducing complexity until you can pinpoint the culprit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, removing ALL cards from the Apple and powering on seems to work as expected, which would indicate the core system is a-ok.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, you want to add cards one by one, starting with the disk controller card.  If adding the disk controller card and trying to boot from a clean DOS 3.3 disk causes the problem to return, then you know the problem is with either the controller card, the duodisk, or the DOS 3.3 disk (because you've eliminated/removed all other possibilities from the system).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point, you can try one or more alternate disks.  If the problem persists across multiple disks, you can safely rule out a single bad disk and focus on either the Duodisk hardware or the controller card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is when having some extra junk laying around really helps because now is a good time to apply some basic &lt;em&gt;swaptronics&lt;/em&gt; troubleshooting.  Swap the controller card but keep the duodisk.  Does the problem go away?  Then it's the original controller...  does the problem persist?  Try swapping the duodisk.  Does the problem go away? etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Backing up a few steps, if you reinstall the disk controller card, connect the duodisk and boot a DOS 3.3 disk without any problem, then you would draw the conclusion those components are all working as expected and add the next most basic card into the system (probably the 80 column card).  rinse and repeat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately, you should be able to narrow things down to a single item (the disk controller card, or the duodisk hardware, or a bad memory expansion, or whatever). &lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2019-06-12T11:43:26.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11355" PostTypeId="2" ParentId="11317" CreationDate="2019-06-12T14:35:46.553" Score="2" Body="&lt;p&gt;If the background is static it looks like you could skip doing the copying. Move step 7 outside the loop or skip it when the background has not changed. Keep a set of dirty rectangles for each frame. The flow for each frame would be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Save new dirty rectangles.&lt;/li&gt;&#xA;&lt;li&gt;Draw new Spites.&lt;/li&gt;&#xA;&lt;li&gt;Flip so this frame is displayed.&lt;/li&gt;&#xA;&lt;li&gt;When this frame is no longer displayed restore dirty rectangles.&lt;/li&gt;&#xA;&lt;li&gt;Goto 1.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7629" LastActivityDate="2019-06-12T14:35:46.553" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11356" PostTypeId="2" ParentId="11327" CreationDate="2019-06-12T15:03:27.887" Score="1" Body="&lt;p&gt;Based on the other answers, the proper answer is: they do whatever the instructions bits tell them too.&#xA;Since apparently they aren't validated, they always do something, even if that something is nothing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same as trying to turn on a lamp on an illuminated room- you won't notice it is there and it is on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I had a question in the answer which I removed, which was &quot;Another question you may ask is: if an instruction does not exist, how does the processor knows it length?&quot;, which was replied in the comments below.&lt;/p&gt;&#xA;" OwnerUserId="13865" LastEditorUserId="13865" LastEditDate="2019-07-01T08:57:23.027" LastActivityDate="2019-07-01T08:57:23.027" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11357" PostTypeId="2" ParentId="11342" CreationDate="2019-06-12T18:01:06.927" Score="2" Body="&lt;p&gt;This is most likely indicating a problem with the RAM added by your expansion card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can usually diagnose these problems better by booting with a diagnostics floppy. I would recommend trying the &lt;a href=&quot;https://github.com/keirf/Amiga-Stuff/releases&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga Test Kit v1.4&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It includes a boot floppy that runs a suite of tests, including a memory test that will probably recognize your additional RAM and can perform extensive tests. This will confirm that the RAM SIMM (vice the expansion card) is the likely culprit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;NOTE:&lt;/em&gt; As mentioned in the comments, C12 does look suspicious in your photo. If the memory test indicates intermittent problems with both SIMMs, or with a known good SIMM tested elsewhere, then recapping the expansion board may be your best bet.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-06-12T18:07:54.507" LastActivityDate="2019-06-12T18:07:54.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11358" PostTypeId="1" AcceptedAnswerId="11359" CreationDate="2019-06-12T18:08:55.887" Score="2" ViewCount="358" Body="&lt;p&gt;Old processors came out with support chips. That is, there was a family - the processor and its chips. Over time, the same kits came out with higher frequencies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will the circuit work properly if the processor and support chips are running at different speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some examples.&lt;br&gt;&#xA;&lt;strong&gt;Z80 family&lt;/strong&gt;&lt;br&gt;&#xA; - Z80 / Z80А / Z80В / Z80H = 2.5 / 4/ 6 / 8 Mhz&lt;br&gt;&#xA; - Z80CTC / Z80&lt;strong&gt;A&lt;/strong&gt;CTC /Z80&lt;strong&gt;B&lt;/strong&gt;CTC / Z80&lt;strong&gt;H&lt;/strong&gt;CTC = not sure, but probably the speed distribution is the same&lt;br&gt;&#xA; - Z80PIO / Z80&lt;strong&gt;А&lt;/strong&gt;PIO / Z80&lt;strong&gt;В&lt;/strong&gt;PIO / Z80&lt;strong&gt;H&lt;/strong&gt;PIO = not sure, but probably the speed distribution is the same&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;8088 family&lt;/strong&gt;&lt;br&gt;&#xA; - 8088 / 8088-&lt;strong&gt;2&lt;/strong&gt; / 8088-&lt;strong&gt;1&lt;/strong&gt; = 5 / 8 / 10 Mhz&lt;br&gt;&#xA; - 8255/ 8255-&lt;strong&gt;2&lt;/strong&gt; / 8255-&lt;strong&gt;5&lt;/strong&gt; = certanly the speed are different&lt;br&gt;&#xA; - 8259/ 8259-&lt;strong&gt;2&lt;/strong&gt; / 8259-&lt;strong&gt;5&lt;/strong&gt; = certanly the speed are different&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what if the processor runs at a higher frequency than other chips in its support set (it can even be not only i/o chips but also interrupt controllers, bus arbiters, etc.)? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some examples.  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Z80&lt;strong&gt;B&lt;/strong&gt; and Z80CTC&lt;strong&gt;A&lt;/strong&gt; and Z80PIO &lt;/li&gt;&#xA;&lt;li&gt;Z80&lt;strong&gt;H&lt;/strong&gt; and Z80CTC&lt;strong&gt;B&lt;/strong&gt; and Z80PIO&lt;strong&gt;A&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;8088-&lt;strong&gt;1&lt;/strong&gt; (10Mhz) and 8259 (less 10 MHz) and 8253-&lt;strong&gt;2&lt;/strong&gt; (8 Mhz)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="13852" LastActivityDate="2019-08-25T14:15:05.690" Title="Will the circuit work normally if different chip speeds (eg 8088-2 and 8255-1)" Tags="&lt;z80&gt;&lt;chip&gt;&lt;8088&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11359" PostTypeId="2" ParentId="11358" CreationDate="2019-06-12T19:15:47.373" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Will the circuit work properly if the processor and support chips are running at different speeds&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Short answer: &lt;strong&gt;No&lt;/strong&gt;, as they usually never ever run at different bus speeds.Mixing various speed ratings just means that the system at whole should not run faster than the slowest one.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long Answer:&lt;/h2&gt;&#xA;&lt;p&gt;Speed of classic CPUs like Z80 is the speed rating for the bus. An since it's one bus connecting all chips (*1), there can only be one speed and this speed is supplied by a single clock generator. In most cases the speed is defined by the system board, so plugging in chips with a higher rating won't change anything, while inserting some with lower rating bears the chance of malfunction.&lt;/p&gt;&#xA;&lt;p&gt;Bottom Line: &lt;strong&gt;Classic CPUs work in a single tightly coupled system&lt;/strong&gt;, not like today's with many different domains and speeds within the same system.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Bonus Material&lt;/h2&gt;&#xA;&lt;p&gt;It seams from the comment as if your're about to build a system, like with a Z80H and a 8255-5. This opens three possible szenarios:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Run the system at 5 MHz. That's the slowest component guaranteed speed.&lt;/li&gt;&#xA;&lt;li&gt;'Overclock' it. Try 8 MHz or 10 MHz and see if the 8255 still works fine.&lt;/li&gt;&#xA;&lt;li&gt;Run it at 10 MHz, but insert wait states during 8255 access.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;While #1 is the conservative and easy choice, #2 ist a fair game for a one off hobby board, it's #3 what a serious design would be. Most simple solution (beside some clever hack) would be a programmable wait state generator like this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Take a 74191&lt;/li&gt;&#xA;&lt;li&gt;Set it to 5 clocks (B/D to ground and A/C to +5V)&lt;/li&gt;&#xA;&lt;li&gt;Tie UP and Enable to ground&lt;/li&gt;&#xA;&lt;li&gt;Use system clock for CLK (*)&lt;/li&gt;&#xA;&lt;li&gt;Use the 8255 CS for LOAD (*)&lt;/li&gt;&#xA;&lt;li&gt;Use Min/Max for WAIT (or make up a combination using on of the counter outputs)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;(*) - may need to be inverted&lt;/p&gt;&#xA;&lt;p&gt;Such a setup has even the advantage to  try out 'overclocking' the 8255 between 5 and 10 MHz - and with a bit more puzzling (and logic) it can offer specific delay for any additional chip with different timing.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Of course one could think about a system with different sections operating at different speed, but the effort is quite large, as any transaction going across would need synchronisation.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-25T14:15:05.690" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11360" PostTypeId="2" ParentId="11286" CreationDate="2019-06-12T20:10:49.247" Score="2" Body="&lt;p&gt;One of the advanced techniques used on the TRS-80 was to build text strings containing character codes that represented Z80 machine language. These text strings were manipulated and combined and then executed from BASIC. Here is a typical sample from the popular game &lt;em&gt;Android Nim&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;9000 HA$=CHR$(160)+CHR$(181)+CHR$(186)+CHR$(144) &#xA;9001 HB$=CHR$(128)+CHR$(143)+CHR$(182)+CHR$(185)+CHR$(143)+CHR$(128) &#xA;9002 H1$=CHR$(128)+CHR$(143)+CHR$(183)+CHR$(187)+CHR$(143) &#xA;9005 HC$=CHR$(160)+CHR$(186)+CHR$(176)+CHR$(149) &#xA;9006 HD$=CHR$(128)+CHR$(143)+CHR$(189)+CHR$(179)+CHR$(142)+CHR$(128) &#xA;9007 H2$=CHR$(128)+CHR$(143)+CHR$(191)+CHR$(179)+CHR$(143) &#xA;9010 HE$=CHR$(160)+CHR$(176)+CHR$(181)+CHR$(149)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This would definitely qualify as self-modifying code. After running the program, if you did a &lt;code&gt;LIST&lt;/code&gt; instruction, you would see strange characters where the code was modified.&lt;/p&gt;&#xA;" OwnerUserId="12208" LastActivityDate="2019-06-12T20:10:49.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11361" PostTypeId="2" ParentId="11349" CreationDate="2019-06-12T20:26:12.963" Score="3" Body="&lt;p&gt;As others have mentioned, the Apple will drop to the monitor when it attempts to execute code that doesn't make sense (illegal/invalid instructions for example). As you have mentioned, it works fine when you boot the machine without the disk controller card inserted. This is good because it at least suggests the core system &lt;em&gt;should&lt;/em&gt; be OK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II will attempt to boot the first disk controller that it finds (descending from slot 7 down to 1) when you turn it on. The non-disk controller cards are probably not contributing to the problem, so I would focus on the disk controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First off, I would remove the disk controller and attempt the system test. This is done by holding down the closed apple (the one on the right of the keyboard) and pressing control-reset. This will do a system test that takes ~20 seconds. If it comes back with &quot;System OK&quot; then things are probably good with the Apple itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, put the disk controller back in with the DuoDisk attached. Put in a disk that should work. Power on and I presume you'll hit the monitor. See if you can press Control-C and then hit return and get to the BASIC prompt. If it doesn't go to BASIC, something is screwy beyond this. Most likely it will and you should be able to type &quot;NEW&quot; as a sample command without error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming the disk controller is installed in Slot 6 (its default location on the Apple II), type PR#6 and hit return. If you're in the monitor, you could type C600G and hit return to effectively do the same thing. This &lt;em&gt;should&lt;/em&gt; cause the disk to boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suspicion is that the controller card PROM is corrupt for some reason. If the PR#6  or C600G doesn't cause the disk to boot (and make the head alignment chatter), then I'd say that this suspicion is correct. However, let us know if it actually boots instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the controller is no good, you should be able to find a replacement on eBay without too much difficulty.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2019-06-12T20:26:12.963" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11362" PostTypeId="2" ParentId="10983" CreationDate="2019-06-12T20:54:04.847" Score="2" Body="&lt;p&gt;Action! is a programming language for the Atari 8-bit line.  It was never ported to the Atari ST.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't find a ROM of the cartridge, but the Internet Archive does hold printed manuals for the language as well as its source code, which was released under the GPL by Action! author Clinton Parker.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Manual (2018 edition):&#xA;&lt;a href=&quot;https://archive.org/details/ActionManual3rdRevisedEdition2018ByGBXL&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/details/ActionManual3rdRevisedEdition2018ByGBXL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Source code: &lt;a href=&quot;https://archive.org/details/ActionVersion36_SourceCode&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/details/ActionVersion36_SourceCode&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4222" LastActivityDate="2019-06-12T20:54:04.847" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11364" PostTypeId="2" ParentId="11289" CreationDate="2019-06-13T00:24:16.887" Score="3" Body="&lt;p&gt;While only limited to one month of data and to only one provider, here is a ranking of the top 20 programming languages by number of readers of newsgroups under &lt;code&gt;comp.lang&lt;/code&gt; from March 1995 as collected by DEC Network Systems Laboratory (&lt;a href=&quot;http://textfiles.com/internet/useread.rep&quot; rel=&quot;nofollow noreferrer&quot;&gt;data taken from this link&lt;/a&gt;):&#xA;&lt;a href=&quot;https://i.stack.imgur.com/VNnMu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VNnMu.png&quot; alt=&quot;Top 20 USENET groups in comp.lang from readership report from DEC Network Systems Laboratory for March 1995&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11374" LastActivityDate="2019-06-13T00:24:16.887" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11365" PostTypeId="2" ParentId="10887" CreationDate="2019-06-13T09:07:22.390" Score="2" Body="&lt;p&gt;Facit were acquired by Electrolux in the mid 70's, and sold on to Ericsson in 1983. At that time, the company was restructured such that manufacture of computers and computer-related hardware would be reduced. That was presumably done to reduce internal competition, since Ericsson was also in that market at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is that Facit's distribution network was reappropriated at that point to get Sharp branded office equipment into Europe. Certainly there were plenty of MZ's in Scandinavia having been distributed by Facit.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-06-13T09:07:22.390" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11366" PostTypeId="2" ParentId="11358" CreationDate="2019-06-13T09:43:57.530" Score="3" Body="&lt;p&gt;For instace the IBM PC used the 8088 CPU at 4.77 MHz  because it was only a 5 MHz chip and the 8253 timer at 1.19 MHz because it was only a 2 MHz chip. Maximum clock speeds and maximum bus speeds are two completely different things, and peripherals with slow bus speed can be connected to a CPU with fast bus speed by introducing wait states.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-06-13T09:43:57.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11367" PostTypeId="2" ParentId="10887" CreationDate="2019-06-13T10:01:22.773" Score="5" Body="&lt;p&gt;Facit already was in various cooperations with Hayakawa Electric - the company later renamed as Sharp - during the 1960s and 70s. During the mid-1960 Facit even held the worldwide exclusive rights to sell Hayakawa office products outside Japan/East Asia. So cooperation was close and it's safe to assume that there were contacts on all levels. Later a subsidiary (which Facit had a lot) named Facit-Sharp operated into the early 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time the &lt;a href=&quot;https://de.wikipedia.org/wiki/Sharp_MZ-800&quot; rel=&quot;nofollow noreferrer&quot;&gt;MZ-800&lt;/a&gt; was sold (1985) the remains of Facit (after selling off many assets) was already part of Ericsson's computer division for a good part of a decade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the &lt;em&gt;Swiss&lt;/em&gt; Facit-Addo AG was a (mostly) independent subsidiary in Switzerland. Selling genuine Facit products, as well as their 'own'. Combining this it seems natural to combine the traditional contacts with Sharp and the idea to serve the microcomputer market as well.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Facit also sold, for a short time, a (sortof) home computer, the Facit DTC&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which itself was not a Facit development, but an OEM version of the &lt;a href=&quot;https://en.wikipedia.org/wiki/ABC_800&quot; rel=&quot;nofollow noreferrer&quot;&gt;Luxor ABC 800&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This doesn't seem to be a simple trader's label, as it seems to be specifically made for the Sharp.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Making fitting labels isn't a big deal - not now and not in the 1980s. Especially not when required by law.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I was not aware that Facit was ever into the home computer market beyond the DTC&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Back then the MZ-800 was positioned more at the SOHO level.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-16T07:43:33.270" LastActivityDate="2019-06-16T07:43:33.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11368" PostTypeId="1" AcceptedAnswerId="11371" CreationDate="2019-06-13T13:05:42.723" Score="8" ViewCount="501" Body="&lt;p&gt;I can't get the music audio working for the 1994 version of Raptor. Does anyone know how I can remedy this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure if this is the correct forum for this question, but here goes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an original copy of Raptor: Call of the Shadows on CD Rom (Yes, full version). It's beautiful. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I maintain a &quot;modestly retro&quot; rig, running Windows XP, with an SB Audigy 2, Nvidia GeForce, etc.  Mostly for the greats like Civ2, Mech Commander, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the life of me I cannot get the music working. The sound effects work fine using default SoundBlaster settings, but I can't find any SoundBlaster setting that will work for music. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The music is the best, period. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've followed the guide here which suggests to use a slightly different configuration:&#xA;&lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=701564226&quot; rel=&quot;noreferrer&quot;&gt;https://steamcommunity.com/sharedfiles/filedetails/?id=701564226&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not using DosBox, I'd like to run it directly on this system. I've had success with this exact hardware/OS config before, with one caveat... I had to swap out the mobo a few years back. I used a new one from the XP era, about 15 years old (I have spares).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably meaningless, as both boards had onboard sound plus the Audigy 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any tips would be great. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this belongs on the Gaming SE, let me know. I'm not sure where the line gets drawn. &lt;/p&gt;&#xA;" OwnerUserId="4148" LastEditorUserId="15334" LastEditDate="2021-01-12T21:10:30.743" LastActivityDate="2021-01-12T21:10:30.743" Title="Getting Music Functioning for Raptor: Call of the Shadows (1994)" Tags="&lt;ms-dos&gt;&lt;emulation&gt;&lt;windows&gt;&lt;sound&gt;" AnswerCount="5" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11369" PostTypeId="2" ParentId="11368" CreationDate="2019-06-13T14:05:44.523" Score="4" Body="&lt;p&gt;As far a I know, the modern &lt;a href=&quot;http://www.dotemu.com/game/raptor/#getitnow&quot; rel=&quot;nofollow noreferrer&quot;&gt;DotEmu port&lt;/a&gt; of Raptor replaced the original MIDI music soundtrack with WAV files that were digitized from the original score. It's suppose to support modern OS and audio hardware from WinXP onwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can tell you that I successfully play the original DOS-version of Raptor with music and without the CD on my retro PC running PC DOS 7.0 and SB16 sound card. So, I suspect your problem stems from either WinXP or the more modern sound card not being compatible with the original MIDI playback routines in the game. &lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-06-13T15:16:54.537" LastActivityDate="2019-06-13T15:16:54.537" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11370" PostTypeId="2" ParentId="11327" CreationDate="2019-06-13T14:44:58.643" Score="7" Body="&lt;p&gt;To understand this, you need a general idea of how processors work at the raw hardware level (or at least how they worked before the concept of &lt;em&gt;microcode&lt;/em&gt; was developed). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, as the processor would read the bytes of a single assembler language instruction, those bytes would be fed as an input to a network of logic gates called the &lt;em&gt;instruction decoder&lt;/em&gt;; this network was designed to produce as output the signals to enable or disable various internal components of the processor according to what the instruction was supposed to do, so that the processor ends up doing the required operation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, if you viewed the instructions of older, simpler processors as bit patterns, you might notice certain groupings; for example, if the top three bits of the instructions would be set &lt;em&gt;so&lt;/em&gt;, you might know that it must be a jump instruction of some type; other patterns might identify other general types of instructions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design team for a new processor architecture would develop a reasonable set of instructions, the various networks of logic gates to implement them, and the instruction decoder to manage them all. Back when the 8086 and 8088 processors were designed, it was not yet economically viable to add extra logic to the instruction decoder to exclude any &quot;undocumented instructions&quot;, so any bit pattern fed into the instruction decoder would do &lt;em&gt;something&lt;/em&gt;, but only the documented instructions would be guaranteed to &lt;em&gt;exist and work the same&lt;/em&gt; also in the future members of the same processor family. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes the undocumented instructions actually ended up doing something useful, but relying on them was risky, as it might mean any program using a particular undocumented instructions might only run successfully that particular processor model. On a newer model, the previously undocumented instructions might actually been used for some new functionality, or they might have become completely useless as a result of a redesign of the instruction decoder. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With 80186 or above, using a number of logic gates to trap the undocumented instructions was economically feasible, and it became a compatibility feature: a program might prefer to use a new instruction available in newer processors only, but could provide a routine to emulate that instruction in software within an &quot;illegal instruction&quot; trap handler.&lt;/p&gt;&#xA;" OwnerUserId="7447" LastActivityDate="2019-06-13T14:44:58.643" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11371" PostTypeId="2" ParentId="11368" CreationDate="2019-06-14T08:57:25.267" Score="5" Body="&lt;p&gt;@RossRidge is right the XP &quot;MS-DOS&quot; emulation is useless for games (I got problems even with Win 9x MS-DOS versions 7.??). The best for old games was &lt;strong&gt;MS-DOS 6.22&lt;/strong&gt; (at least from mine experience) I  used to have a 360 KByte 5.25&quot; floppy with MS-DOS 6.22 boot (all &#xA; commands and command.com where on hard drive) and FAT formatted logical drive on my system with MS-DOS system and games (just to resolve booting under newer OS as multi boot utilities did not work for old MS-DOS at that time for me). Even on newer computers running w2k or xp ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your problem is that only original &lt;strong&gt;Creative Labs Sound Blaster&lt;/strong&gt; was working &lt;strong&gt;just with settings&lt;/strong&gt;... All &lt;strong&gt;clones&lt;/strong&gt; (like Yamaha or even newer versions of SoundBlaster) &lt;strong&gt;needed a driver&lt;/strong&gt; under MS-DOS initialized in &lt;code&gt;autoxec.bat&lt;/code&gt; and &lt;code&gt;config.sys&lt;/code&gt;. Some games relied on the SET from &lt;code&gt;autoexec.bat&lt;/code&gt; too so if not matching your hardware sound was not working...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a look at this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6814/6868&quot;&gt;How do I create a boot menu to select between Windows and DOS?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;in there is mine &lt;code&gt;autoexec.bat&lt;/code&gt; and &lt;code&gt;config.sys&lt;/code&gt; especially pay attention to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SET BLASTER=A220 I5 D1 H5 P330 E620 T6&#xA;SET SOUND=e:\rescue\SB16&#xA;SET MIDI=SYNTH:1 MAP:E MODE:0&#xA;e:\rescue\SB16\DIAGNOSE /S&#xA;e:\rescue\SB16\AWEUTIL /S&#xA;e:\rescue\SB16\MIXERSET /P /Q&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In &lt;code&gt;autoexec.bat&lt;/code&gt;. It was the init of mine Creative Labs Sound Blaster AWE64. First 3 lines are common settings for the environment so GAMES know what values to use and last 3 are the driver initialization (and yes even AWE64 needed it for the more advanced stuff as they used a different MIDI chip). Each brand had its own initialization routine so just google the one for yours. But beware most vendors stop providing MS-DOS drivers ages ago... There might be also some 3th party drivers (like omega) but I am not aware of any ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The addresses DMA channels and IRQs where sometimes configurable by &lt;strong&gt;jumpers&lt;/strong&gt; on board the newer cards used configuration by &lt;strong&gt;software&lt;/strong&gt; instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS the path &lt;code&gt;e:\rescue\&lt;/code&gt; was the path to my Hard drive where all MS-DOS stuff and utilities was. The floppy was used only during boot for a few seconds and then never until reset... I still have an image of the stuff somewhere (CD and USB keys) as it was full environment with file associations capable of compiling C++/ASM/Pascal playing mpeg/divx/... (was funny as all the new videos I got constantly problem with codec update in windows was playing fine under MS-DOS with sound even on more than decade old player)  showing jpg/gif/pcx... even music mp3/mod/stm and have all the HDD utilities in case of failure of mine primary drive... Used it to rescue computers countless times ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-06-14T09:10:50.160" LastActivityDate="2019-06-14T09:10:50.160" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11372" PostTypeId="2" ParentId="11368" CreationDate="2019-06-14T09:14:53.133" Score="2" Body="&lt;p&gt;If the game runs natively under XP, and the game has original music (not CD tracks) then your sound card is not proper for running the music natively. XP does not emulate FM synth chips. That's why it is run under Dosbox or Vdmsound, to get FM synth chip emulation.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-06-14T09:14:53.133" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11373" PostTypeId="1" AcceptedAnswerId="11376" CreationDate="2019-06-14T14:18:56.747" Score="6" ViewCount="1795" Body="&lt;p&gt;I remember CAD being a major driver for PCs with high-end graphics cards; specifically AutoCAD was rising quickly in popularity around 1990 as PCs were able to compete with very costly CAD workstations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My memory about the high-end graphics cards of the time is sparse. I do remember the TI TARGA compatible cards, which were popular for photo-realistic graphics, and I think could work with AutoCAD as well. And I remember Number Nine cards being highly regarded by some AutoCAD users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am mainly interested in the period from 1988 to 1992-3. At that time, SVGA was new (VGA even somewhat new), and lower-cost video cards lacked the resolution and performance desired by AutoCAD users. I think they were aiming for 1024x1024 pixel resolution with accelerated 2D.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what were the most capable/popular high-end video cards for CAD on PC's at this time, and what were their capabilities (resolution, color depth, monitor freq., VRAM capacity, etc.)?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-06-15T07:53:23.880" Title="High-end PC graphics circa 1990?" Tags="&lt;graphics&gt;&lt;ibm-pc&gt;&lt;video&gt;" AnswerCount="4" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11374" PostTypeId="2" ParentId="11373" CreationDate="2019-06-14T18:08:56.407" Score="6" Body="&lt;p&gt;I think the &lt;a href=&quot;https://books.google.com/books?id=cTAEAAAAMBAJ&amp;amp;pg=PT19&amp;amp;lpg=PT19&amp;amp;dq=Metheus%201224&amp;amp;source=bl&amp;amp;ots=81o0Ej6qLu&amp;amp;sig=ACfU3U3y9m_lzbKH-myKVLEbdg_nazzOkw&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwj5-dr7xeniAhUFsJ4KHbdsDncQ6AEwCXoECAUQAQ#v=onepage&amp;amp;q=Metheus%201224&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;Metheus UGA 1228&lt;/a&gt; ($3,995 in February 1990, equivalent to $7,750 in 2018) qualifies as high-end. It supported 2 MiB of Video RAM for a maximum resolution of 1,280&amp;times;1,024 pixels in 256 colors, when most other graphics cards at the time topped out at 512 KiB and 1,024&amp;times;768 in 16 colors.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2019-06-14T18:08:56.407" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11375" PostTypeId="2" ParentId="11368" CreationDate="2019-06-14T18:55:54.457" Score="3" Body="&lt;p&gt;It seemed to help hidden in a comment, so to promote it to an answer: when you run DOS games under Windows XP, they're run in a Virtual DOS Machine ('VDM'), in which Windows XP virtualises and emulates the video card, sound card, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you ever encounter a problem with its audio emulation, you can try &lt;a href=&quot;https://sourceforge.net/projects/vdmsound/&quot; rel=&quot;nofollow noreferrer&quot;&gt;VDMSound&lt;/a&gt;, which provides a much wider and more complete set of emulated audio devices to the virtualised DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's intended to work with NT versions of Windows generally but I believe development ended before Windows Vista was released and &lt;a href=&quot;https://en.m.wikipedia.org/wiki/VDMSound&quot; rel=&quot;nofollow noreferrer&quot;&gt;its Wikipedia entry&lt;/a&gt; states that it is incompatible so that limits it to NT, 2000 and XP; speaking anecdotally, it was for a period how I enjoyed JetFighter 2 under Windows 2000.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-06-14T18:55:54.457" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11376" PostTypeId="2" ParentId="11373" CreationDate="2019-06-14T19:00:49.270" Score="8" Body="&lt;p&gt;Basic level - 8514/a clones, like ATI Mach 8 (1990, up to 8-bit color, up to 1 meg VRAM, up to 899$) - &lt;a href=&quot;http://www.vgamuseum.info/index.php/cpu/item/82-ati-38800-1-mach-8-graphics-ultra-8514-ultra-graphics-vantage&quot; rel=&quot;noreferrer&quot;&gt;see&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Medium level - TIGA-based video accelerators, especially for CAD. &lt;a href=&quot;http://www.vgamuseum.info/index.php/cards/itemlist/category/38-texas-instruments-graphics-architecture-tiga&quot; rel=&quot;noreferrer&quot;&gt;see&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;High end - CAD/PostScript accelerators like &lt;a href=&quot;http://www.vgamuseum.info/index.php/component/k2/item/540-spea-fire&quot; rel=&quot;noreferrer&quot;&gt;SPEA Fire&lt;/a&gt; with i860 CPU onboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early solution - miro GRAPH 510 on Signetics SCC63484 ACRTC chipset, 1986, 2 meg VRAM. &lt;a href=&quot;http://www.vgamuseum.info/index.php/cards/item/601-miro-graph-510&quot; rel=&quot;noreferrer&quot;&gt;see&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2019-06-14T19:00:49.270" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11378" PostTypeId="2" ParentId="11373" CreationDate="2019-06-15T03:53:22.477" Score="0" Body="&lt;p&gt;High-res monitors (1024 and above) were not commonly available at consumer or office store prices back circa 1991.  So several companies, Sigma Designs for one, manufactured and sold custom monitors and matching graphics card combos.  Custom yokes and magnetics, etc. in addition to a graphics card with a custom ASIC or gate array.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2019-06-15T03:53:22.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11380" PostTypeId="2" ParentId="11373" CreationDate="2019-06-15T07:53:23.880" Score="0" Body="&lt;p&gt;In 1989 I had a &quot;high resolution&quot; video card for the time - but it was two-colour being black or white.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Hercules graphics adaptor was capable of all normal text resolutions, and could display 720x350 pixel image.   While not a lot of colours, its a respectably high resolution for the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that one of your points in the question is &lt;strong&gt;CAD&lt;/strong&gt; where high resolution easily trumps a couple of colours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Hercules card was an 8 bit ISA card, and was probably full length in earlier iterations, shrinking down to 8 bit card size by around 1990.  Often doubled with a parallel port on the board, they had 64 kilobytes of video memory, compared to 16 kbytes for CGA or 4 kbytes for the IBM Monochrome Display Adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Power users could run a herc monitor and a VGA monitor side by side too, for early dual-screen PCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further information   &lt;a href=&quot;https://en.wikipedia.org/wiki/Hercules_Graphics_Card&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Hercules_Graphics_Card&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3754" LastActivityDate="2019-06-15T07:53:23.880" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11381" PostTypeId="2" ParentId="674" CreationDate="2019-06-15T11:04:55.677" Score="18" Body="&lt;p&gt;Old question, but:  I've just shipped an interpreter for a large subset of COMIT.  Here it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.catb.org/esr/comit/&quot; rel=&quot;noreferrer&quot;&gt;http://www.catb.org/esr/comit/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Full documentation is included. There's a pretty good suite of regression tests included.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some routing commands, subroutines, and subscripts are not yet implemented. This is mainly because it's not easy to tell from the manual what designer's intent was.&lt;/p&gt;&#xA;" OwnerUserId="13881" LastActivityDate="2019-06-15T11:04:55.677" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11382" PostTypeId="2" ParentId="11335" CreationDate="2019-06-17T03:16:23.027" Score="1" Body="&lt;p&gt;I will venture a guess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine /CAS and the address bus are both registered outputs clocked by the same clock. The negative setup time allows a slight clock-to-output propagation delay discrepancy between the two outputs where /CAS falling may precede the address bits becoming stable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, there are other factors which may add propagation delay to the address bus compared to the /CAS signal. The address bus could drive many more DRAM chips than are driven by the /CAS signal. There could be multiple banks of DRAM sharing the same address bus but separate /CAS signals. Or for example a 16-bit DRAM system which allows writing to either one or both of the bytes of a 16-bit word. Such a system would likely have separate /CAS lines for each 8-bit half of the 16-bit width, but the address bus can be shared among all of the DRAM chips. Or maybe the address bus is buffered, and the negative setup time allows a bit more buffer delay for the address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I envy this negative setup time greatly when designing with the newer DRAM chips.&lt;/p&gt;&#xA;" OwnerUserId="7486" LastEditorUserId="7486" LastEditDate="2019-06-17T19:03:45.963" LastActivityDate="2019-06-17T19:03:45.963" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11383" PostTypeId="2" ParentId="11335" CreationDate="2019-06-17T10:11:42.790" Score="5" Body="&lt;p&gt;The 4116 was likely designed during in an era (or semiconductor technology node) when self-timed-delay pre-charge-evaluate NMOS logic cascades were common. (e.g. rather than synchronously or edge clocked CMOS)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bit-line sense amps and wide column select mux had to consist of a large total gate area. Thus it would take quite awhile to precharge all of that.  The column address would not be needed to pull down some selected gate path until after the precharge completed, This might take up most or all of that 20 nS using NMOS transistors that were several square microns in gate area.  The column address thus need not be latched until after the end of the precharge pulse that was perhaps triggered by the falling edge of CAS.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2019-06-17T10:11:42.790" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11384" PostTypeId="1" AcceptedAnswerId="11389" CreationDate="2019-06-17T11:14:25.220" Score="6" ViewCount="364" Body="&lt;p&gt;I see many references to a paper by Andrew Tanenbaum that demonstrated the vast majority of constants would fit into 13-bits, and I &lt;em&gt;seem&lt;/em&gt; to recall it being in my university text on CPU design. However, I can't find a reference to it. Does anyone have a pointer?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-06-17T16:58:14.653" Title="Tannenbaum paper on constants in ISAs?" Tags="&lt;cpu&gt;&lt;microprocessor&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11385" PostTypeId="1" AcceptedAnswerId="11388" CreationDate="2019-06-17T12:53:34.620" Score="14" ViewCount="5861" Body="&lt;p&gt;What is the oldest commercial MS-DOS program that can run on modern versions of Windows (such as Windows 8.1 or Windows 10) without third-party emulators?&lt;/p&gt;&#xA;" OwnerUserId="4552" LastEditorUserId="15334" LastEditDate="2021-02-18T11:35:28.637" LastActivityDate="2021-02-18T11:35:28.637" Title="What is the oldest commercial MS-DOS program that can run on modern versions of Windows without third-party software?" Tags="&lt;history&gt;&lt;ms-dos&gt;&lt;ibm-pc&gt;&lt;ntvdm&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11386" PostTypeId="1" CreationDate="2019-06-17T12:57:32.253" Score="6" ViewCount="1300" Body="&lt;p&gt;What was the first third-party commercial application for MS-DOS intended for IBM PC-compatible computers?&lt;/p&gt;&#xA;" OwnerUserId="4552" LastActivityDate="2019-06-17T13:57:18.673" Title="What was the first third-party commercial application for MS-DOS?" Tags="&lt;history&gt;&lt;ms-dos&gt;&lt;ibm-pc&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11387" PostTypeId="2" ParentId="11386" CreationDate="2019-06-17T13:01:32.557" Score="15" Body="&lt;p&gt;There were several first third-party commercial applications for MS-DOS (well, PC DOS really), since a number were &lt;a href=&quot;https://archive.org/stream/byte-magazine-1981-10/1981_10_BYTE_06-10_Local_Networks#page/n33/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;launched on the same day as the original IBM PC&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Microsoft’s extended BASIC interpreter;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Pascal&quot; rel=&quot;noreferrer&quot;&gt;Microsoft Pascal&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/VisiCalc&quot; rel=&quot;noreferrer&quot;&gt;VisiCalc&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/EasyWriter&quot; rel=&quot;noreferrer&quot;&gt;EasyWriter&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Peachtree_Accounting&quot; rel=&quot;noreferrer&quot;&gt;Peachtree’s accounting suite&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;an asynchronous communication package.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There was also a game available on launch day, &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/5877/79&quot;&gt;Microsoft Adventure&lt;/a&gt;, but it didn’t target DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Microsoft programs probably don’t count as third-party, but that still leaves VisiCalc, EasyWriter, and Peachtree, at least. (I think the communications package was written by IBM.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of these were ported from other platforms, so arguably they’re older — VisiCalc was released in June 1979 on the Apple II, EasyWriter was also released in 1979 on the Apple II, and Peachtree’s lineage starts on the Altair in 1977.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-06-17T13:57:18.673" LastActivityDate="2019-06-17T13:57:18.673" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11388" PostTypeId="2" ParentId="11385" CreationDate="2019-06-17T13:36:29.590" Score="35" Body="&lt;p&gt;The 32-bit versions of Windows can still run many DOS binaries directly, using &lt;a href=&quot;https://en.wikipedia.org/wiki/Virtual_DOS_machine#Windows_NTVDM&quot; rel=&quot;noreferrer&quot;&gt;NTVDM&lt;/a&gt;, and &lt;a href=&quot;http://www.bricklin.com/history/vcexecutable.htm&quot; rel=&quot;noreferrer&quot;&gt;VisiCalc&lt;/a&gt; stills works. &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11386/79&quot;&gt;VisiCalc was available at launch with the IBM PC&lt;/a&gt;, so is probably qualifies as the oldest commercial DOS program which can still run on modern versions of Windows without third-party software.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-06-17T15:42:23.227" LastActivityDate="2019-06-17T15:42:23.227" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="11389" PostTypeId="2" ParentId="11384" CreationDate="2019-06-17T16:58:14.653" Score="7" Body="&lt;p&gt;Andrew Tanenbaum wrote two papers about operand encoding, instruction sizes, and the representations of structured programming constructs, which sounds like what you’re looking for: &lt;a href=&quot;https://doi.org/10.1145/359361.359454&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Implications of structured programming for machine architecture&lt;/em&gt;&lt;/a&gt; (Communications of the ACM, March 1978) and &lt;a href=&quot;https://doi.org/10.1145/859470.859472&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Efficient encoding of machine instructions&lt;/em&gt;&lt;/a&gt; (ACM SIGARCH Computer Architecture News, June 1979).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-06-17T16:58:14.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11390" PostTypeId="1" CreationDate="2019-06-18T09:39:49.777" Score="11" ViewCount="978" Body="&lt;p&gt;In the Soviet Union, Z80 compatibles were manufactured under at least the following designations:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Т34ВМ1&lt;/li&gt;&#xA;&lt;li&gt;КМ1858ВМ1&lt;/li&gt;&#xA;&lt;li&gt;КР1858ВМ3&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;At least some of these were manufactured from the U880 masks that were developed in VEB Mikroelektronik, in the German Democratic Republic, as evidenced by the markings on the die. But why were all these three designations in use? Weren't they actually the same part exactly? Or was there some kind of hardware difference (maximum clock speed, voltage levels, whatever) or software difference (new instructions, bugfixes)?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-06-18T11:47:22.247" LastActivityDate="2019-06-18T20:23:19.163" Title="Is there any difference between Т34ВМ1 and КМ1858ВМ1/3?" Tags="&lt;z80&gt;&lt;ussr&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11391" PostTypeId="1" AcceptedAnswerId="11392" CreationDate="2019-06-18T11:15:19.127" Score="2" ViewCount="492" Body="&lt;p&gt;I'm facing a Parity Error problem on my new 486er DOS Retro PC. Every now and then, a running software crashes with a Parity Error output on screen. This happens for different software so I think the source is one of my four 2 MB RAM modules.&lt;/p&gt;&#xA;&lt;p&gt;I've already tried to proof this with a copy of memtest86 on a bootable floppy disk, but this program also crashes on startup and creates an endless boot loop. It shows a menu and a blue screen is visible afterwards for 2 seconds. There is a debug option to run it step by step which only prints out 2 steps before reboot.&lt;/p&gt;&#xA;&lt;p&gt;What are my options?&#xA;How did someone in the early 90s investigates in such a problem?&#xA;How to detect defective RAM on DOS?&lt;/p&gt;&#xA;" OwnerUserId="11204" LastEditorUserId="15334" LastEditDate="2021-01-19T10:02:42.890" LastActivityDate="2021-01-19T10:02:42.890" Title="Parity error under DOS" Tags="&lt;ms-dos&gt;&lt;ram&gt;&lt;80386&gt;&lt;troubleshooting&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11392" PostTypeId="2" ParentId="11391" CreationDate="2019-06-18T11:44:59.613" Score="5" Body="&lt;p&gt;In such cases, the problem is almost always in one of three places:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;One of the memory modules.&lt;/li&gt;&#xA;&lt;li&gt;The motherboard itself.&lt;/li&gt;&#xA;&lt;li&gt;A plug-in device.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To help with the testing, you should start be removing all non-essential devices form the system (CDROM, Network, HDD, other I/O). Just leave the keyboard, screen and floppy. Then  re-run your tests. If it works, the problem is in one of the removed devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next remove the memory, and try them out one at a time. You could then test the memory using your test program. You could then replace the defective module(s)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possible would be to disable parity checking in the BIOS. This assumes that this can be done. I don't know the specifics of your motherboard or BIOS so I can't say for sure. The error would still be there, but your program would be able to show you where the problem was without being clobbered. Again you could then remove/replace the defective memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally as a sledge hammer, you could buy new memory and hope the new stuff is good.&lt;/p&gt;&#xA;" OwnerUserId="4066" LastActivityDate="2019-06-18T11:44:59.613" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11393" PostTypeId="2" ParentId="11390" CreationDate="2019-06-18T12:42:40.063" Score="6" Body="&lt;p&gt;At least, KP1858BM1 and KP1858BM3 are completely different designs, starting from the fact that BM1 is NMOS and BM3 is CMOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also it is known that BM3 differs in execution of &lt;code&gt;HALT&lt;/code&gt; command: while the original Z80, whether it is NMOS or CMOS, makes idle M1 opcode fetches during &lt;code&gt;HALT&lt;/code&gt; (thus supporting DRAM refresh), BM3 simply ceases all activity. As the consequence, Z80 exits &lt;code&gt;HALT&lt;/code&gt; state with the granularity of 4 clocks, while BM3 exits immediately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to these two links: &lt;a href=&quot;http://www.155la3.ru/t34vm1.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.155la3.ru/t34vm1.htm&lt;/a&gt; and &lt;a href=&quot;http://www.155la3.ru/k1858.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.155la3.ru/k1858.htm&lt;/a&gt;, both T34BM1 and KP1858BM1 first were the clones of U880 design (or simply used the original dies of U880 from DDR) and then switched to differing (self-made?) design. U880 die has a clear writing of &quot;U880/5&quot; or &quot;U880/6&quot; on the edge, while the newer design has a heart symbol in the middle of the die.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to this &lt;a href=&quot;https://gist.github.com/drhelius/8497817&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://gist.github.com/drhelius/8497817&lt;/a&gt;, there are also some important differences in undocumented behavior between the original NMOS Z80 and T34BM1/KP1858BM1, while it seems that the authors did not try to distinguish U880 dies from later original KP1858BM1 dies, nor they specifically tested original U880s.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2019-06-18T20:23:19.163" LastActivityDate="2019-06-18T20:23:19.163" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11394" PostTypeId="2" ParentId="11390" CreationDate="2019-06-18T12:53:08.000" Score="8" Body="&lt;ul&gt;&#xA;&lt;li&gt;КР1858ВМ3 used 2μm lithography unlike the earlier variants using 4μm&#xA;lithography.&lt;/li&gt;&#xA;&lt;li&gt;Т34ВМ1 and КР1858ВМ1 were both based on U880 masks, while for КР1858ВМ3 the manufacturer seems to have designed an original topology. The irony is, КР1858ВМ3 had a larger physical chip size despite 2μm lithography.&lt;/li&gt;&#xA;&lt;li&gt;Т34ВМ1 was considered as experimental series produced exclusively by the &quot;Angstrem&quot; factory. КР1858ВМ1 was a natural evolution of the T34BM1 series that was produced by a number of manufacturers in ex-USSR.&lt;/li&gt;&#xA;&lt;li&gt;Rumor also has it that КР1858ВМ3 also featured lower energy consumption as it was intended rather for battery-powered embedded systems than for ZX Spectrum clones.&lt;/li&gt;&#xA;&lt;li&gt;On some accounts, КР1858ВМ3 was almost a complete clone of Z80A (Z84C004), with the only difference in internal processing of the HALT command (unlike the original, КР1858ВМ3 does not wait for completion of the current &quot;idle cycle&quot; NOP command while waiting for an interrupt).&lt;/li&gt;&#xA;&lt;li&gt;Unlike КР1858ВМ1, КР1858ВМ3 was produced only by the Belarussian factory named &quot;Transistor&quot;, and the production started only circa 1995-1996.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3303" LastActivityDate="2019-06-18T12:53:08.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11395" PostTypeId="1" AcceptedAnswerId="11399" CreationDate="2019-06-18T16:22:04.490" Score="7" ViewCount="262" Body="&lt;p&gt;Apple II computers other than the IIgs (which uses ADB) have a hardwired keyboard combined with the paddle/joystick ports for input. What combinations of modifier keys can you detect? I know that the paddle/joystick buttons are considered part of the keyboard so those count towards the combinations as well. For example could you detect open-apple + closed-apple + shift + alpha-numerical key. What about joystick button-one + open-apple + alpha-numerical key.&lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2019-06-18T22:08:05.157" Title="What combinations of modifier keys can you detect on an Apple II?" Tags="&lt;apple-ii&gt;&lt;keyboards&gt;&lt;input-devices&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11397" PostTypeId="2" ParentId="11391" CreationDate="2019-06-18T18:21:16.720" Score="2" Body="&lt;p&gt;You mention there are 4 2Mb modules. If I remember correctly, many 486 era boards would let you populate in banks of 2.  If your board supports it, you can try removing 2 of the memory modules and running the system with only 2 installed.  If the problem persists, it is likely to be one of the two remaining modules.  If the problem goes away, then it is likely one of the two removed modules is faulty.  By carefully trying different combinations you can usually isolate the bad memory module.  It helps to label the memory so you can record your results...  something like 'a', 'b', 'c' and 'd' would work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;a &amp;amp; b = no errors&#xA;c &amp;amp; d = parity errors&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;conclusion, c or d is the problem.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;a &amp;amp; c = no errors&#xA;b &amp;amp; d = parity errors&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;conclusion, d is the problem because b already seemingly was working fine when paired with a.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to double check our conclusions we try:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;a &amp;amp; b = no errors (repeated test, but it never hurts to be sure)&#xA;a &amp;amp; c = no errors (again, repeated test)&#xA;b &amp;amp; c = no errors (we expect this, because we suspect d is the bad memory)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and also:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;d &amp;amp; a = parity errors (probably because of d)&#xA;d &amp;amp; b = parity errors (again, probably because of d)&#xA;d &amp;amp; c = parity errors (really pretty sure now, d is junk)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You get the idea... :-)&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2019-06-18T18:21:16.720" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11398" PostTypeId="2" ParentId="3041" CreationDate="2019-06-18T20:58:40.003" Score="4" Body="&lt;p&gt;There was no BIOS on the early computers. There was only the hardware. To get CP/M to work on a computer, somebody had to write a BIOS which would receive calls from CP/M (read character, write character, read disk sector, write disk sector) and make the hardware obey.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your computer didn't have a ready-made CP/M distribution (which would have been distributed linked with a specific BIOS for that computer), you had to write one yourself. Here were the steps in my case:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Write a disassembler in Basic and use it to disassemble the Basic interpreter which came with the computer. Print out the disassembly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Get hold of the documentation for the relevant Intel chips.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Referring to the chip documentation and to the way that Basic did it, write &quot;read sector&quot; and &quot;write sector&quot; routines (disk controller chip plus DMA), using the equivalent functions in the disassembled Basic interpreter as a guide.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Decide on what escape sequences to use for cursor positioning, and write a &quot;write character&quot; function which understands them. (The screen display was textual, in a fixed area of RAM, and the screen display chip had a useful register telling it which of the 24 lines to count as &quot;line 1&quot;, so that scrolling could be done just by changing that register).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Write an assembler (in Basic, since there is nothing else, yet) to convert the assembler code into actual machine code bytes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Write those bytes to the right place on a bootable CP/M disk.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Boot it up.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Once this was done, the next stage was to rewrite the already written BIOS code so that it could read by CP/M's own assembler. From then on, the built-in Basic was redundant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was all quite straightforward, if intricate, and since there were no debuggers available is was also pretty bug-free. &lt;/p&gt;&#xA;" OwnerUserId="11867" LastActivityDate="2019-06-18T20:58:40.003" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11399" PostTypeId="2" ParentId="11395" CreationDate="2019-06-18T21:28:57.347" Score="7" Body="&lt;p&gt;The Apple II descends directly from the Apple I and other similar home-built micros of the era in its handling of the keyboard: there is an address from which you can query whether a new keystroke has been received. If it has been received, it is the appropriate code for whatever was pressed — if you pressed 'a' then it'll have an 'a' in it; if you pressed shift+'a' then it'll have an 'A' in it. There's no inherent way to read the current state of any of the modifiers, or indeed any of the keys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare and contrast with later 8-bit micros, which usually scan a keyboard matrix in software, and with any computer with a serial keyboard bus, such as ADB, which will receive key up and key down notifications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later models of the Apple II modify this behaviour. They:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;codify the commonly-performed shift-key modification. That additionally connects the shift key to the third joystick button; and&lt;/li&gt;&#xA;&lt;li&gt;as of the IIe, the open and closed Apple keys are added, connected to the other two joystick buttons.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;joystick buttons are considered part of the keyboard only in the sense that they were reprovisioned to provide additional keyboard input after the fact;&lt;/li&gt;&#xA;&lt;li&gt;if you have an unmodified pre-IIe Apple II you cannot detect the current state of any of the modifiers;&lt;/li&gt;&#xA;&lt;li&gt;a common modification to the pre-IIe machines maps shift to the third joystick button. That's in addition to the actual third joystick button, if you had one. Those two things cannot be disambiguated;&lt;/li&gt;&#xA;&lt;li&gt;from the IIe onwards, the open and closed Apple keys are added and similarly report on the other joystick buttons (open Apple = the first button, closed Apple = the second). But cannot be disambiguated from the actual joystick buttons.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-06-18T21:28:57.347" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11400" PostTypeId="2" ParentId="11395" CreationDate="2019-06-18T22:08:05.157" Score="3" Body="&lt;p&gt;The state of the open-Apple, closed-Apple, and--on machines with the &quot;shift key mod&quot;--shift key can be read at any time, independently from any other keypress.  Additionally, on the Apple //e, but not earlier models, it is possible to determine whether all non-modifier keys are released at any moment in time.  Nothing in the hardware will record the state of modifier keys at the moment a key is pushed, except in cases where the modifier affects the key code produced.  If, for example, while the computer is busy one types a key and then presses and holds the open-Apple when the computer finishes what it was doing, it would have no way of determining that open-Apple was not pressed at the time you typed the character.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-06-18T22:08:05.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11401" PostTypeId="1" CreationDate="2019-06-19T12:32:44.727" Score="8" ViewCount="392" Body="&lt;p&gt;I have what appears to be an early games console (supported games are variations on the theme of &quot;pong&quot;, or ball and paddle games) manufactured in South Africa. Does anyone have more information or more examples of this console?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a view of the front face of the console:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hCI04.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hCI04.jpg&quot; alt=&quot;Front view of &amp;quot;Hammersmith TV Games&amp;quot; console, showing two pots/paddles to control games, a green reset switch, 3 binary switches to select &amp;quot;bat size&amp;quot;, &amp;quot;ball speed&amp;quot; and &amp;quot;angles select&amp;quot; and finally, a large rotary switch to turn off the console and select the games: &amp;quot;off&amp;quot;, &amp;quot;pelota&amp;quot;, &amp;quot;squash&amp;quot;, &amp;quot;football 1&amp;quot;, &amp;quot;football 2&amp;quot;, &amp;quot;tennis&amp;quot;, &amp;quot;skeet&amp;quot; and &amp;quot;target&amp;quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, what I suppose is most relevant, a pic of the circuit board inside showing the chip that powered this thing - the &lt;a href=&quot;https://en.wikipedia.org/wiki/AY-3-8500&quot; rel=&quot;noreferrer&quot;&gt;AY 3-8500&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/guLVj.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/guLVj.jpg&quot; alt=&quot;Close up of circuit board inside &amp;quot;Hammersmith TV Games&amp;quot; console, showing controlling chip, the AY 3-8500, with additional marking &amp;quot;GIMT 7720&amp;quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reading up on that chip on the linked Wikipedia page tells me that the AY 3-8500 was an IC from General Instruments committed to displaying six ball and paddle games through an RF modulator to a standard TV (it appears that the chip in my console is the PAL version.) From the Wikipedia page, it seems this chip was incorporated into around 200 different video consoles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chip was powered by a 9V power supply, which corresponds to what can be seen of the underside of my console with the battery cover removed, showing a common brand of South African 9V battery:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RGf4Z.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RGf4Z.jpg&quot; alt=&quot;Underside of &amp;quot;Hammersmith TV Games&amp;quot; console with battery cover removed, showing that it is powered by a 9V battery.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast to what is shown on the faceplate, the manufacturer's plate on the back refers to the console as &quot;Teleplay&quot;. The model number is 702, and the manufacturer's details are given as &quot;Metlionics [Pty] Ltd, P.O. Box 39690, Bramley 2010, Republic of South Africa&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QiGvp.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QiGvp.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Googling &quot;Metlionics&quot; reveals that they also made a catridge console system, but of my model all I could find were examples being sold on auction site, such as &lt;a href=&quot;https://www.bidorbuy.co.za/item/209278226/TELEPLAY_TV_GAMES.html&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's been years since I've used the console, so I don't know if it still works, but if I have time I'll try fire it up to take some pictures or videos of the games in operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I learned from the Wikipedia page that there are hundreds of similar consoles, all offering largely the same games (such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Coleco_Telstar_series&quot; rel=&quot;noreferrer&quot;&gt;Coleco Telstar Alpha&lt;/a&gt;) - but I've not found much this South African version, other than what I've mostly summarised and linked to here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone add more information?&lt;/p&gt;&#xA;" OwnerUserId="13892" LastEditorUserId="13892" LastEditDate="2019-06-19T14:43:37.743" LastActivityDate="2019-06-20T21:25:30.410" Title="Anyone have more information on the &quot;Hammerstein TV Games&quot; 1st gen console?" Tags="&lt;hardware&gt;&lt;chip&gt;&lt;pong&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11402" PostTypeId="1" AcceptedAnswerId="11404" CreationDate="2019-06-19T14:22:38.353" Score="17" ViewCount="3678" Body="&lt;p&gt;If you pressed one of the joystick buttons on the TRS-80 Color Computer while running BASIC, it would act as if &lt;code&gt;@ABCDEFG&lt;/code&gt; were typed.  Pressing the other joystick button would similarly type out &lt;code&gt;HIJKLMNO&lt;/code&gt;.  Why did the CoCo exhibit this behavior?&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-06-19T17:36:35.430" Title="Why did pressing the joystick button spit out keypresses?" Tags="&lt;color-computer&gt;&lt;joystick&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11403" PostTypeId="2" ParentId="11402" CreationDate="2019-06-19T14:36:41.887" Score="7" Body="&lt;p&gt;The fewer kinds of input a computer has to deal with, the easier its life is. This applies equally to physical ports and to the provisions for input in the BIOS and operating system generally. Abolishing “joystick button input” as a separate category makes everything much simpler. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same applies to function keys on keyboards (such as the arrow keys). Rather than sending unique, presumably non-ASCII characters of their own, they can send escape sequences just as if they had been typed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two possible approaches. One is to make the buttons send a sequence of keystrokes which the user is unlikely to type, or unlikely to type &lt;em&gt;that fast&lt;/em&gt;. The other is to make them programmable so that they send whatever they have been programmed to send. I don’t know which way your particular joystick was designed. &lt;/p&gt;&#xA;" OwnerUserId="11867" LastActivityDate="2019-06-19T14:36:41.887" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11404" PostTypeId="2" ParentId="11402" CreationDate="2019-06-19T17:36:35.430" Score="31" Body="&lt;p&gt;On the Color Computer, I/O address &amp;amp;FF00 is used for both the joysticks and the keyboard row input. Bits 0/1 are toggled by the two joystick port buttons, and these bits are the same as rows 1/2 for the keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC continually scans for keyboard input by looking at &amp;amp;FF00 (for the row) and &amp;amp;FF02 (for the column). Since &amp;amp;FF02 will not indicate a keypress, BASIC interprets the toggling of rows 1/2, caused by the joystick button, as pressing all 8 of the keys for all 8 columns.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-06-19T17:36:35.430" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11405" PostTypeId="2" ParentId="11401" CreationDate="2019-06-19T21:26:53.263" Score="7" Body="&lt;p&gt;&lt;a href=&quot;https://www.the-saleroom.com/en-us/auction-catalogues/mitchells/catalogue-id-srmit10045/lot-79fd95d0-2c18-4e9e-a8e8-a91a00e62c8d&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a completed auction for the same model console but with a silver faceplate and black enclosure, and a Teleplay TV Games electronic ray gun, Model No. 710, both with their original boxes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HZvNS.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HZvNS.jpg&quot; alt=&quot;Teleplay Model No. 702 TV Games console and Teleplay Model No. 710 Electronic Ray Gun.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also notice the DIN connector on the black of the &lt;a href=&quot;https://www.bidorbuy.co.za/item/209278226/TELEPLAY_TV_GAMES.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;red model&lt;/a&gt; you linked to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QCq93.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QCq93.jpg&quot; alt=&quot;Red Teleplay Model 702&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like the ray gun plugs into that connector. If your 702 doesn't have that connector, then you may have an earlier model, or a cheaper model as the AY-3-8500 chip has built-in support for the gun and omitting the connector would save some cost in parts and labor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://au.linkedin.com/in/ivor-metlitzky-1720b249&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a LinkedIn profile for an employee of Metlionics from 1971 to 1988, so we know the company existed during that time and possibly before and after. The General Instrument AY-3-8500 chip was introduced in 1976 so that further narrows the time frame of your unit's date of manufacture. More photographs of the unit inside and out might provide more clues.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-06-20T21:25:30.410" LastActivityDate="2019-06-20T21:25:30.410" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11407" PostTypeId="1" AcceptedAnswerId="11408" CreationDate="2019-06-20T22:04:07.830" Score="4" ViewCount="395" Body="&lt;p&gt;When DOS released in 1981, the assembler that came with it produced .OBJ files that were OMF format.  However there was a predecessor to it, M80.COM that ran under CP/M and also used .OBJ as the file extension for object files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were these files also OMF, or did they use a different file format?&lt;/p&gt;&#xA;" OwnerUserId="5272" LastActivityDate="2019-06-21T07:33:42.957" Title="What was the format for .OBJ files produced by M80.COM for CP/M?" Tags="&lt;cp-m&gt;&lt;file-format&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11408" PostTypeId="2" ParentId="11407" CreationDate="2019-06-20T23:41:39.037" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Were these files also OMF, or did they use a different file format?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Short answer:  &lt;strong&gt;Nope, all the same&lt;/strong&gt; (with some extensions over the years)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The long story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel originally intended PL/I to be the main language for 8008 and 8080 systems and made their PL/M compiler able to produce absolute code as well as relocatable one.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;There where variations for each CPU, &lt;a href=&quot;http://www.nj7p.org/Manuals/PDFs/Intel/9800183B.pdf&quot; rel=&quot;noreferrer&quot;&gt;including the 8080&lt;/a&gt;, but the basic format was all the same.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The original &lt;a href=&quot;http://www.cpm.z80.de/randyfiles/DRI/ASM.pdf&quot; rel=&quot;noreferrer&quot;&gt;Digital Research ASM&lt;/a&gt; did create I&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_HEX&quot; rel=&quot;noreferrer&quot;&gt;ntel hex files&lt;/a&gt;, marked &lt;code&gt;.HEX&lt;/code&gt;. Similar did their &lt;a href=&quot;http://www.cpm.z80.de/manuals/mac.pdf&quot; rel=&quot;noreferrer&quot;&gt;Macro Assembler MAC&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Digital's Relocating Macro Assembler (RMAC) later added the optional ability to produce relocatable output (&lt;code&gt;.REL&lt;/code&gt;) as described in the &lt;a href=&quot;http://www.cpm.z80.de/manuals/lnk80pdf.zip&quot; rel=&quot;noreferrer&quot;&gt;LINK-80 manual&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Microsoft's M80 turned assembly output by default into relocatable format as it was meant to work in cooperation with other high level languages from Microsoft which only created relocatable formats.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Microsoft as well as Digital Research used Intel's format for their relocatable formats. After all, it makes sense to be compatible as newcomer, doesn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel called their files already &lt;code&gt;.OBJ&lt;/code&gt;, DR decided on &lt;code&gt;.REL&lt;/code&gt; while MS stuck with &lt;code&gt;.OBJ&lt;/code&gt;. They are all Intel OMF with the same basic logic and encoding format for all (ofc, MS added a lot over the years - already starting with M80). In theory, even the latest (separate) MS linker should be able to decode all records and produce 8080 &lt;code&gt;.COM&lt;/code&gt; files. In theory at least :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: The history then continued with Microsoft switching for (their version of) COFF - which by MASM 8.0 (ca.2005) even became default format.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-21T01:58:00.047" LastActivityDate="2019-06-21T01:58:00.047" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11409" PostTypeId="1" AcceptedAnswerId="11415" CreationDate="2019-06-20T23:51:03.617" Score="24" ViewCount="5219" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Z-machine&quot; rel=&quot;noreferrer&quot;&gt;Infocom's Z-Machine&lt;/a&gt;, designed in 1979, compresses text using a basic 5 bit code which is not very efficient in practice, achieving maybe a 1.5:1 compression ratio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Huffman coding would be far more efficient, although more complex to decode, possibly putting it beyond what 8bit machines could realistically handle. By 1979 it was already 27 years old. &lt;a href=&quot;https://en.wikipedia.org/wiki/LZ77_and_LZ78&quot; rel=&quot;noreferrer&quot;&gt;LZ77 and LZ78&lt;/a&gt; were published just before then, but are not always used with Huffman coding. The earliest compression application I've found is &lt;a href=&quot;https://en.wikipedia.org/wiki/Pack_(compression)&quot; rel=&quot;noreferrer&quot;&gt;Pack&lt;/a&gt;, which compresses just using Huffman coding, dating from 1982 or before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how well known was Huffman coding at that time? Had compression formats or applications been written that used it?&lt;/p&gt;&#xA;" OwnerUserId="3251" LastEditorUserId="3251" LastEditDate="2019-06-21T01:08:03.170" LastActivityDate="2019-06-22T17:15:46.927" Title="How well known and how commonly used was Huffman coding in 1979?" Tags="&lt;history&gt;&lt;file-format&gt;&lt;compression&gt;" AnswerCount="5" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11410" PostTypeId="2" ParentId="11409" CreationDate="2019-06-21T00:20:21.753" Score="6" Body="&lt;p&gt;&lt;em&gt;(This is not really a great question, as it's asking for speculation about knowledgeand decisions of people long ago, something rarely supportable by referencee)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be helpful to look into several factors to be included.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Huffman coding was of course well known.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Basic Huffman coding relies on variable length data words, something hard to handle on 8 bit chips&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Implementing a generic Huffman decoding function on 8 bit CPUs may cost several KiB of code - all to be taken from the memory otherwise able to store (virtual) game content.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Working with fixed 16 bit words and according two-to-three can be done in just a few instructions, leaving more space for the game.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;5 bit encoding works quite well on straight 7 bit text.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In real life not the best encoding is right but the one good enough to do the job.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-06-21T00:20:21.753" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="11411" PostTypeId="2" ParentId="11409" CreationDate="2019-06-21T06:23:58.887" Score="13" Body="&lt;p&gt;If you actually look at &lt;em&gt;how&lt;/em&gt; the Z-Machine compresses texts, it does the following (from memory, it's been a while):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There's a list of frequently appearing words (like &quot;the&quot;, &quot;and&quot;) which are directly encoded by an index.&lt;/li&gt;&#xA;&lt;li&gt;It uses &quot;shift&quot; codes like in the teletypes to switch between different modes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This makes it simple to write a fast decoding routine that can be used for output. More importantly, no extra memory is needed for output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the purposes of compressing the text enough that it would fit on a disk together with the code for (the part of) Zork they were going to ship this was sufficient, so I don't even think they'd investigate more complex compression schemes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More complex compression schemes would have several disadvantages: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The decompressor would have to be written in 6502, as a resident routine, taking up more space in the &quot;resident code&quot; part of the RAM than the rather simple decoding routine outlined above.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The decompressor would have needed extra RAM for tables for something like Huffman decoding&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Text was paged in using a virtual memory mechanism, so decoding would have been needed to apply to random parts; which complicates things.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So the answer to &quot;why didn't they use Huffman encoding&quot; isn't necessarily &quot;it wasn't known&quot; but more &quot;it would have been much more complicated than the simpler compression scheme, which was good enough&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, I have read &quot;I specifically want to know when it was first used in compression formats&quot;, but to answer that you have to take the circumstances into account, and the premise &quot;Huffman code is so much better, they could have just used it&quot; doesn't apply to this circumstances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So Huffman encoding would have been used when there was enough CPU power and enough RAM available to have a good trade-off between resources spent and compression gained. If it wasn't used, it doesn't follow that &quot;it wasn't known&quot;. &lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="56" LastEditDate="2019-06-22T17:15:46.927" LastActivityDate="2019-06-22T17:15:46.927" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11412" PostTypeId="2" ParentId="11407" CreationDate="2019-06-21T07:33:42.957" Score="5" Body="&lt;p&gt;They were .REL files, not .OBJ files. &lt;a href=&quot;https://www.seasip.info/Cpm/rel.html&quot; rel=&quot;noreferrer&quot;&gt;The format is fully described here&lt;/a&gt;. It was a bitstream containing 9-bit bytes, 18-bit addresses, and 6-bit markers some of which in their turn contained either 18-bit addresses or 3+8n-bit names or both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I once wrote a utility which consisted of a small loader which installed the main body of the utility in high memory: thus it read the .REL file directly and relocated the code into high memory where it could be executed. An interesting exercise!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The background is that you need far more relocation in 8080 than in 8086, since in 8080 all data and program addresses are absolute, whereas in 8086 they are mostly relative, either by instruction set design (near calls and jumps are relative) or by usage (data are mostly referred to a base register rather than at absolute location). Moreover, in 8080 every bit counts, as can be seen from the format. Though they wasted bits by making the name string 3+8n bits instead of 3+7n! &lt;/p&gt;&#xA;" OwnerUserId="11867" LastActivityDate="2019-06-21T07:33:42.957" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11413" PostTypeId="1" AcceptedAnswerId="11421" CreationDate="2019-06-21T08:09:37.610" Score="2" ViewCount="522" Body="&lt;p&gt;I'm working on Atari STe, which has dodgy caps on PSU board. 2 of them are in desperate need for replacement. Can anyone suggest quality brand to extend the life as much as possible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XLdmq.jpg&quot; alt=&quot;16V 2200 uF&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2019-07-05T01:25:46.713" Title="What capacitors to use in Atari 1040STE power supply" Tags="&lt;atari-st&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11414" PostTypeId="2" ParentId="11409" CreationDate="2019-06-21T08:15:52.727" Score="28" Body="&lt;p&gt;According to Google Scholar, &lt;a href=&quot;https://doi.org/10.1109/JRPROC.1952.273898&quot; rel=&quot;noreferrer&quot;&gt;Huffman’s 1952 paper&lt;/a&gt; had &lt;a href=&quot;https://scholar.google.com/scholar?hl=en&amp;amp;as_sdt=5%2C31&amp;amp;sciodt=0%2C31&amp;amp;cites=12381556560993483263&amp;amp;scipsc=&amp;amp;as_ylo=&amp;amp;as_yhi=1979&quot; rel=&quot;noreferrer&quot;&gt;326 citations by 1979&lt;/a&gt;, which given the volume of publication at the time means it was well-known, as far as can be determined now. Most compression-related papers published around that time refer to Huffman’s paper, either because they use Huffman coding in some way, or to explain why they don’t! Given the Infocom’s staff’s background, it’s quite certain they knew of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking through those citations leads to some concrete implementations. For example, &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11389/79&quot;&gt;Tanenbaum’s paper on efficient instruction encoding&lt;/a&gt; cites the use of Huffman coding on Burroughs B1700 S-machines; this is described in &lt;a href=&quot;https://doi.org/10.1145/1479992.1480074&quot; rel=&quot;noreferrer&quot;&gt;Wilner’s 1972 paper on &lt;em&gt;Burroughs B1700 memory utilization&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-06-21T08:15:52.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11415" PostTypeId="2" ParentId="11409" CreationDate="2019-06-21T13:33:38.007" Score="25" Body="&lt;p&gt;Well, in fact, a closely related question has been asked (and answered) few years ago: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/3083/what-is-the-history-of-data-compression-tools-on-personal-computers&quot;&gt;What is the history of data compression tools on personal computers?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From that question, and its answer, it transpires that several implementations of Huffman algorithms were in use by the early 1980s. Specifically,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Unix &quot;pack&quot; command implements a standard Huffman algorithm. The earliest implementation of this command that I could find browsing unix sources is in &lt;a href=&quot;https://en.wikipedia.org/wiki/Version_6_Unix#Variants_and_extensions&quot; rel=&quot;noreferrer&quot;&gt;AUSAM released in November 1979&lt;/a&gt;. The source for the compressor can be read &lt;a href=&quot;https://minnie.tuhs.org/cgi-bin/utree.pl?file=AUSAM/source/S/pack.c&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;; it contains no mention of the author or original version date. However, &lt;a href=&quot;https://minnie.tuhs.org/cgi-bin/utree.pl?file=AUSAM/doc/man/man1/pack.1&quot; rel=&quot;noreferrer&quot;&gt;the manual page for the command&lt;/a&gt; mentions author &quot;Steve Zucker&quot; and date &quot;12/12/75&quot;, which suggests earlier use is not unlikely.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Unix &quot;compact&quot; command implements an adaptive Huffman algorithm. The earliest version of it that I could find browsing unix sources was in &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_the_Berkeley_Software_Distribution&quot; rel=&quot;noreferrer&quot;&gt;4BSD released in November 1980&lt;/a&gt;. &lt;a href=&quot;https://minnie.tuhs.org/cgi-bin/utree.pl?file=4BSD/usr/src/cmd/compact/compact.c&quot; rel=&quot;noreferrer&quot;&gt;The source of the compressor&lt;/a&gt; contains text &quot;Written by Colin L. Mc Master (UCB) February 28, 1979&quot;. Given that adaptive Huffman algorithm was first described in Gallager, R. (1978) Variations on a theme by Huffman, &lt;em&gt;IEEE Transactions on Information Theory,&lt;/em&gt; &lt;strong&gt;24&lt;/strong&gt;(6), 668-674, I am pretty sure that this implementation is about the earliest it could have been.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Interestingly, and a bit illogically, Leo B. from the related question seems to remember that &quot;compact&quot; predates &quot;pack&quot;. I guess this is likely to have something to do with how widely AUSAM was used at the time (I am guessing not very widely). A more likely candidate for a commonly used implementation of &quot;pack&quot; is &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIX_System_III&quot; rel=&quot;noreferrer&quot;&gt;System III released in 1982&lt;/a&gt;. The source of the compressor can be read &lt;a href=&quot;https://minnie.tuhs.org/cgi-bin/utree.pl?file=SysIII/usr/src/cmd/pack.c&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;; it contains string &quot;Adapted April 1979, from a program by T.G. Szymanski, March 1978&quot;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you add to this the fact that the first commonly used compressor for CP/M used static Huffman compression (see &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/3083/what-is-the-history-of-data-compression-tools-on-personal-computers&quot;&gt;answer to the question that I already mentioned&lt;/a&gt;, as well as &lt;a href=&quot;http://fileformats.archiveteam.org/wiki/Squeeze&quot; rel=&quot;noreferrer&quot;&gt;comments here&lt;/a&gt;), I am guessing the best way to answer your question would be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If you are thinking to write a data compressor for text in the late 1970s / early 1980s, you are probably automatically thinking about using Huffman algorithm. The only well-known alternative at the time is probably RLE, which is irrelevant for texts.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;LZW was invented in 1984 and became popular from about 1985, thanks to unix &quot;compress&quot; utility, see Welch, T. A. (1984) Technique for high-performance data compression, &lt;em&gt;Computer&lt;/em&gt;, (52). I am not aware of any commonly used implementations of vanilla LZ78.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Perhaps surprisingly from the modern point of view, LZ77 was not recognized as a viable algorithm before the second half of 1980s. Taken literally, LZ77 does not compress well unless it is converted into LZSS (first described in 1982, see Storer, J. A., &amp;amp; Szymanski, T. G. (1982) Data compression via textural substitution, &lt;em&gt;Journal of the ACM,&lt;/em&gt; &lt;strong&gt;29&lt;/strong&gt;(4), 928-951) or, possibly, processed on top by arithmetic or Huffman encoder (this is definitely second half of the 1980s - &lt;a href=&quot;http://archive.gamedev.net/archive/reference/articles/article295.html&quot; rel=&quot;noreferrer&quot;&gt;LZARI, LZHUF were first introduced in 1988&lt;/a&gt;, DEFLATE is later than this). This may also have something to do with the impenetrability of the original papers; maybe no-one tried to read these papers seriously before LZW patents came to light?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="5039" LastEditorUserId="5039" LastEditDate="2019-06-21T17:59:48.917" LastActivityDate="2019-06-21T17:59:48.917" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11417" PostTypeId="2" ParentId="11409" CreationDate="2019-06-21T18:33:03.243" Score="5" Body="&lt;p&gt;In 1971 I took an information theory freshman seminar at MIT which included Huffman coding.   Huffman coding was well known and casually taught as something that was widely used, but as it was one of several topics, we didn't go deeply into existing applications.&lt;/p&gt;&#xA;" OwnerUserId="10500" LastActivityDate="2019-06-21T18:33:03.243" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11418" PostTypeId="1" CreationDate="2019-06-21T23:36:07.853" Score="6" ViewCount="264" Body="&lt;p&gt;I just saw this video of a &lt;a href=&quot;https://youtu.be/OFJUYFlSYsM&quot; rel=&quot;noreferrer&quot;&gt;mechanical calculator dividing by zero.&lt;/a&gt; Did any mechanical calculators or computers ever provide for a failure mode on divide by zero? Or did they always handle it by looping infinitely?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/BRRolKTlF6Q?t=358&quot; rel=&quot;noreferrer&quot;&gt;Did any of them have a certain check for the division, or error out on a certain amount of iterations?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="8579" LastEditDate="2019-06-21T23:50:37.527" LastActivityDate="2019-06-21T23:50:37.527" Title="Did any mechanical computers or calculators handle divide by zero with an exception, or did they all loop?" Tags="&lt;calculator&gt;&lt;mechanical&gt;" AnswerCount="0" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11421" PostTypeId="2" ParentId="11413" CreationDate="2019-06-22T19:09:38.583" Score="2" Body="&lt;p&gt;&lt;b&gt;Don't fix it if it ain't broken&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't actually see a need to replace these capacitors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The caps (cylinder ends) are not bulged out and nothing seems to be leaking from them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The yellowish goo you see between the capacitors is actually intentional to prevent the heavy caps from being ripped off the PCB in case the device receives a mechanical shock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case this power supply is working properly:  Leave it as it is. If it doesn't, there's no visual hint that this is caused by the capacitors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;Fix it if it is broken&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you absolutely want/need to replace the caps, make sure you obtain them from a reputable source (i.e. not necessarily eBay). Distributors like Farnell or Mouser should supply reasonable quality brands such as Panasonic or Rubycon. This is, however, not an absolute guarantee the caps will hold up another 35 years - in the past, even the quality suppliers had charges that turned out to not hold up for longer than 10 years. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Capacitors are typically (&quot;normal&quot; grade) calculated with a lifespan of about 2.000 hours at 85°C in operation (Thermal aging being the main driver for defects). There are series of caps that comply with high-temperature specifications of 105°C at 2.000 hours or even 105°C at 5.000 hours (e.g. Panasonic FC series). Those should give you more headroom - See if you can get them from a trusted supplier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see from the specs, the 2000 hours lifespan at 85 degrees C extends to 30000 hours for circuits operating at 65 degrees-&#xA;the main reason for aging is temperature - also in storage. Keep the computer in a cool place and make sure the power supply is operated under reasonably ventilated and cool conditions. Make sure it's switched off when not needed. Don't bury external PSUs in non-ventilated places.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-06-23T16:01:13.943" LastActivityDate="2019-06-23T16:01:13.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11422" PostTypeId="1" AcceptedAnswerId="11424" CreationDate="2019-06-22T21:52:52.813" Score="4" ViewCount="639" Body="&lt;p&gt;I was looking into the Apple II disk server (See below for background information) and curious if there is a tool that can actually convert &lt;code&gt;.DSK&lt;/code&gt; image to &lt;code&gt;.MP3&lt;/code&gt; file, as the underlying &lt;a href=&quot;https://github.com/datajerk/c2t&quot; rel=&quot;nofollow noreferrer&quot;&gt;c2t&lt;/a&gt; only supports &lt;a href=&quot;https://en.wikipedia.org/wiki/WAV&quot; rel=&quot;nofollow noreferrer&quot;&gt;WAV&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Audio_Interchange_File_Format&quot; rel=&quot;nofollow noreferrer&quot;&gt;AIFF&lt;/a&gt; format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody have some experience on such kind of tool?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/datajerk/c2t&quot; rel=&quot;nofollow noreferrer&quot;&gt;C2T&lt;/a&gt; is a very interesting hack allowing to load disk images via the cassette port and write them onto Apple floppies (140k Disk II) without any previous OS support on the II side. Quite handy to bootstrap a naked hardware setup. Please see &lt;a href=&quot;https://github.com/datajerk/c2t/blob/master/article/article.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article&lt;/a&gt; for more details about inenr workings and handling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The '&lt;a href=&quot;http://asciiexpress.net/diskserver/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Online Apple II Disk Server&lt;/a&gt;' is a connected project offering a simple web interface to offer download of many disk images as audio or in WAV/AIFF format. Never been so simple to bootstrap an Apple II find using modern toolsets.&lt;/p&gt;&#xA;" OwnerUserId="13910" LastEditorUserId="3290" LastEditDate="2020-05-29T04:17:39.763" LastActivityDate="2020-05-29T04:17:39.763" Title="Is there any tool to convert .DSK to mp3 file?" Tags="&lt;apple-ii&gt;&lt;disk-image&gt;&lt;audio&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11423" PostTypeId="2" ParentId="11422" CreationDate="2019-06-22T22:41:36.040" Score="-2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there any tool to convert .DSK to mp3 file?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's a straight &lt;strong&gt;No, it can't be done that simple&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;.DSK&lt;/code&gt; files are disk images, containing (usually) several files (of various type), while cassette data are single files (usually BASIC, but may be as well data, just with complete different handling than on a disk).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the only solution here may be using some emulator to load files you want to convert (given they can be loaded single at all) and then save them as cassette output to MP3 (or wave). Or 'play' it via a sound port, connected to the IIe. If either is supported by the emulator that is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But unless they are very simple self contained programs they won't be any useful after loading via cassette port, as they may want to use DOS function to access data - and there is no DOS on a cassette only IIe.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Ofc, there may be more to this, as the question is missing any description of the whole setup - and more important &lt;strong&gt;why&lt;/strong&gt; you want to go that way.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-06-22T22:41:36.040" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11424" PostTypeId="2" ParentId="11422" CreationDate="2019-06-22T23:20:52.667" Score="6" Body="&lt;p&gt;&lt;a href=&quot;https://github.com/datajerk/c2t&quot; rel=&quot;nofollow noreferrer&quot;&gt;c2t&lt;/a&gt; converts from 140K disk images to audio files, though only AIFF or WAV files. It might take some experimentation to get MP3 encoding settings that work using the Apple II's &lt;code&gt;LOAD&lt;/code&gt; command, though. &lt;code&gt;c2t-96h&lt;/code&gt; encodes the 9600 baud audio data at 48kHz, so &lt;code&gt;lame -V2&lt;/code&gt; has a fair chance of working&lt;/p&gt;&#xA;&#xA;&lt;p&gt;c2t is used by the amazing &lt;a href=&quot;http://asciiexpress.net/diskserver/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple II Disk Server&lt;/a&gt;. It allows you to create Apple II disks on a II+ or IIe (but &lt;em&gt;not&lt;/em&gt; a IIgs) by loading via the cassette port. It's basically magic.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2019-06-23T19:13:06.380" LastActivityDate="2019-06-23T19:13:06.380" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11425" PostTypeId="1" CreationDate="2019-06-23T02:05:14.197" Score="4" ViewCount="341" Body="&lt;p&gt;I was browsing old FAQs on the wayback machine&lt;sup&gt;1&lt;/sup&gt; and noticed that it said some early Mitsubishi Diamond Scan monitors, and reportedly the Dell Ultrascan 17ES monitor&lt;sup&gt;2&lt;/sup&gt;, use a standard HD DE-15 VGA connector for their input but use a non VGA-standard pinout.  What type of video card would this have been able to natively connect to without using an adapter?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Footnotes&lt;/h3&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Shows pinout for Dell Ultrascan 17ES; two pages down shows the same pinout for some Mitsubishi Diamond Scans: &lt;a href=&quot;https://web.archive.org/web/20140222141505/http://www.local16.org/knowledge/Video_Conversion.html#nvccon5&quot; rel=&quot;nofollow noreferrer&quot;&gt;Notes on Video Conversion&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; Not sure this is true; why would a Dell monitor not have a standard VGA pinout, as their PCs at the time were IBM compatibles...&lt;/p&gt;&#xA;" OwnerUserId="11734" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-12-10T10:02:35.463" Title="What type of video card would be able to drive a VGA monitor that uses a standard HD 15 pin connector with a non VGA standard pinout?" Tags="&lt;vga&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11426" PostTypeId="1" AcceptedAnswerId="11427" CreationDate="2019-06-23T07:29:26.997" Score="9" ViewCount="483" Body="&lt;p&gt;I have recently built a 80386 system. Lacking any AT PSU I connected a PicoPSU using an ATX→AT power adapter. Only card connected was a gpu (Trident TVGA 9000i). System performed BIOS checkup sequence without errors and reached boot stage. I did not connect a MultiIO card so did not proceed to booting.&lt;/p&gt;&#xA;&lt;p&gt;PicoPSU is not v.1.x of ATX standard and so does not provide any −5 Volts capability. From what I have read, −5 V is needed only by ISA bus and only from those cards requiring it (5th pin of back side of card, named B05 &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/9/9f/ISA_Bus_pins.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;in ISA pinout&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My question is:&lt;/strong&gt; If I stick to ISA cards which do not need -5v (lack of B05 contact in card) do I face any other risks when resorting to an ATX-&amp;gt;AT conversion so as to power the board?&lt;/p&gt;&#xA;" OwnerUserId="13911" LastEditorUserId="15334" LastEditDate="2020-12-08T17:05:04.923" LastActivityDate="2020-12-08T17:06:07.940" Title="AT system without −5 V" Tags="&lt;ibm-pc&gt;&lt;isa&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11427" PostTypeId="2" ParentId="11426" CreationDate="2019-06-23T08:04:38.360" Score="9" Body="&lt;p&gt;If it works and the voltages are within tolerance then it should be OK to use it. The only thing that might affect things is that normal ATX supplies may regulate voltages according to 3.3 V output, so normal ATX supplies may not work properly of there is no load on 3.3 V as AT does not use 3.3 V supply. The PicoPSU may work without 3.3 V load just fine. And there are adapters to make −5 V from −12 V if necessary.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="15334" LastEditDate="2020-12-08T17:06:07.940" LastActivityDate="2020-12-08T17:06:07.940" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11428" PostTypeId="2" ParentId="11425" CreationDate="2019-06-23T10:45:55.910" Score="1" Body="&lt;p&gt;More a hint than a real answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There where several quite successful PC families in Japan with only partial IBM compatibility. Most notably NEC's &lt;a href=&quot;https://en.wikipedia.org/wiki/PC-9800_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-98xx&lt;/a&gt; series which used several non-IBM pinouts for their graphic cards, including a 25 pin and a 15 pin variant. It would make sense for Mitsubishi to have their own connector when an adapter was needed anyway for either market (home or overseas).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And since Dell never manufactured screens on their own, the pinout may just result from the electronics and/or monitor they OEMed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-06-23T10:45:55.910" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11429" PostTypeId="2" ParentId="11422" CreationDate="2019-06-23T12:29:19.380" Score="5" Body="&lt;p&gt;You may try to convert the offered WAV/AIFF files into an MP3 using some offline tool (preferred) like &lt;a href=&quot;https://ffmpeg.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FFMPEG&lt;/a&gt; or an online conversion site like &lt;a href=&quot;https://online-audio-converter.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt; (no endorsement whatsoever).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a trial and error process, as conversion might change the resulting sound. This is especially true for conversion into &lt;a href=&quot;https://en.wikipedia.org/wiki/MP3&quot; rel=&quot;nofollow noreferrer&quot;&gt;MP3&lt;/a&gt;, as it's not only a &lt;a href=&quot;https://en.wikipedia.org/wiki/Lossy_compression&quot; rel=&quot;nofollow noreferrer&quot;&gt;lossy format&lt;/a&gt; (*1), but the process may as well include &lt;a href=&quot;https://en.wikipedia.org/wiki/MP3&quot; rel=&quot;nofollow noreferrer&quot;&gt;resampling&lt;/a&gt;. MP3's lossy compression is based on a &lt;a href=&quot;https://en.wikipedia.org/wiki/Psychoacoustics&quot; rel=&quot;nofollow noreferrer&quot;&gt;psycho-acoustic&lt;/a&gt; model, which means it saves data by eliminating frequencies (or limits their amount) when assumed they are not noticed. Just, target of this 'sound' isn't a human ear, but a computer, dropping (or dimming) frequencies may render the whole transfer impossible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FFMPEG does offer &lt;a href=&quot;https://ffmpeg.org/ffmpeg.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;much control&lt;/a&gt;, but can't eliminate the basic issue, so enjoy the parameter-fiddling  - or rather use a WAV/AIFF player instead. Most devices can handle them anyway.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - WAV and AIFF are not, which as well may be the reason MP3 hasn't been offered in the first place.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-23T15:00:57.633" LastActivityDate="2019-06-23T15:00:57.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11430" PostTypeId="1" AcceptedAnswerId="11431" CreationDate="2019-06-23T15:23:31.117" Score="4" ViewCount="148" Body="&lt;p&gt;I found this drive in one of Atari lots. Apart from few mentions in old articles I can't find any info whatsoever. Can you help please?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/jIBkR.jpg&quot; alt=&quot;Front&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/5LcFo.jpg&quot; alt=&quot;Back&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/czdgW.jpg&quot; alt=&quot;Disks&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2019-06-23T17:43:19.037" Title="MASS MicroSystems MO/128 Magneto-Optic Drive mystery" Tags="&lt;storage&gt;&lt;atari-st&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11431" PostTypeId="2" ParentId="11430" CreationDate="2019-06-23T15:52:51.347" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I can't find any info whatsoever.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most likely that's just a standard SCSI case (like &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11430/mass-microsystems-mo-128-magneto-optic-drive-mystery/11431#comment34938_11430&quot;&gt;Ross Ridge already assumed&lt;/a&gt;), notable due the existence of a terminator and an ACSI to SCSI cable (maybe even a homed made one). Being a rather standard drive it no hits may turn up in conjunction with Atari - in fact, there where zillions (almost) of shops that created their own brand by putting standard drives into standard cases and added their label. Also, SCSI never made the same huge sales as raw disks or IDE ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The drive could be a Pinacle &lt;a href=&quot;https://en.wikipedia.org/wiki/Magneto-optical_drive&quot; rel=&quot;noreferrer&quot;&gt;3.5&quot; MOD&lt;/a&gt; drive. A as HP had dimples on the lid, Fujitsu a rounded insert and Sony's drives were full height.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since ACSI is a strict subset of SCSI (*1), a single drive standard  SCSI drive can be attached without minimal effort (*2). All you need would be some TOS driver for this device. Chances are good that even the standard removable hard disk driver for Ataris &lt;a href=&quot;https://www.atarimagazines.com/startv4n8/syquest.html&quot; rel=&quot;noreferrer&quot;&gt;Syquest&lt;/a&gt; based Megadrive 44 will work - it might need some tweeking to recognise the drive and capacity.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now if you really want to dig deeper into Atari ACSI and drives, the &lt;a href=&quot;https://docs.dev-docs.org/&quot; rel=&quot;noreferrer&quot;&gt;Atari Document Archive&lt;/a&gt; may offer much insight about &lt;a href=&quot;https://docs.dev-docs.org/htm/search.php?find=_H&quot; rel=&quot;noreferrer&quot;&gt;harddisks&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Most important reduced address range (max. 4 devices) and only very basic protocol phases (no detach, Atari is always the master and alike) - &lt;a href=&quot;http://www.atari-wiki.com/index.php/ACSI,_SCSI_and_IDE#Some_important_differences_between_ACSI_and_SCSI:&quot; rel=&quot;noreferrer&quot;&gt;see here&lt;/a&gt; for more details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Ofc, using a 'real' ACSI to SCSI adaptor (thereare several,some still ailable, like &lt;a href=&quot;https://shop.inventronik.de/index.php?id_product=12&amp;amp;controller=product&amp;amp;id_lang=1&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt;) may be the better way. Then again, considering that there is already a D19 to Centronics attached, it might be already made to work out of the (missing) box.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-23T17:43:19.037" LastActivityDate="2019-06-23T17:43:19.037" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11432" PostTypeId="2" ParentId="3159" CreationDate="2019-06-23T16:20:27.083" Score="8" Body="&lt;p&gt;With MS-DOS 7.1, 6.22, and possibly older versions as well, you can have the dir command sort your files alphabetically on the fly. This can be done with &lt;code&gt;dir /o:n&lt;/code&gt;. The &lt;code&gt;/o&lt;/code&gt; switch tells dir that you want to sort the output in a certain, specific order, and &lt;code&gt;:n&lt;/code&gt; tells it specifically that you want it in &lt;em&gt;name&lt;/em&gt; (alphabetical) order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't want to type this switch manually every time, consider adding it to the &lt;code&gt;dircmd&lt;/code&gt; variable. Assuming you don't currently have anything in said variable, you can type &lt;code&gt;set dircmd=/o:n&lt;/code&gt;, and presto. You could add that exact command in your autoexec.bat file, or your config.sys file (either one should work).&lt;/p&gt;&#xA;" OwnerUserId="12364" LastActivityDate="2019-06-23T16:20:27.083" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11433" PostTypeId="1" AcceptedAnswerId="11435" CreationDate="2019-06-23T16:49:29.623" Score="1" ViewCount="115" Body="&lt;p&gt;I have an Atari, which is working correctly, but the power supply makes this hissing noise as soon as it is turned on. What may cause it?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2019-06-23T18:12:02.690" Title="Atari 1040STFM PSU Hissing, high pitch sound when on" Tags="&lt;hardware&gt;&lt;atari-st&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11434" PostTypeId="2" ParentId="3159" CreationDate="2019-06-23T17:59:26.657" Score="3" Body="&lt;p&gt;I have never cared what order a directory is actually in. So I don't know how to physically arrange the storage order of a directory structure.  (Well, you could copy the whole directory someplace else, delete the original files, then copy them back in the order you want them. Lotta work, but doable.) So instead ...&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;dir&lt;/strong&gt; command is quite flexible, having many options and modifiers. It will do what you want, and more.  I couldn't be bothered with remembering all the possible parameters (see &lt;strong&gt;dir /?&lt;/strong&gt;), so I maintain three batch files in my dos path that allow me to do what I want by name.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;alphabetical by extension, &lt;strong&gt;list.bat&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@echo off&#xA;dir %1 /ogen /p %2 %3 %4&#xA;echo.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;by date, &lt;strong&gt;ddir.bat&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@echo off&#xA;dir %1 /og-d /p %2 %3 %4&#xA;echo.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;by size, &lt;strong&gt;sdir.bat&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@echo off&#xA;dir %1 /og-s /p %2 %3 %4&#xA;echo.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I used to have a fourth one, &lt;strong&gt;adir.bat&lt;/strong&gt; which was true alphabetical (not grouping extensions).  After years of not using it, I don't even bother with it any more.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@echo off&#xA;dir %1 /ogn /p %2 %3 %4&#xA;echo.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am in the habit on dos &amp;amp; windows systems of maintaining a &lt;strong&gt;c:\bin&lt;/strong&gt; directory as part of my path.  It is where I keep useful short utilities like above.  The directory is part of my path, so I just have to type the name, such as &lt;strong&gt;list&lt;/strong&gt; or &lt;strong&gt;sdir&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The two &lt;strong&gt;echo&lt;/strong&gt; commands are to prevent the script itself from showing as it executes.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;strong&gt;/o&lt;/strong&gt; option specifies order, with many sub-option(s) which follow immediately without a space.&lt;br&gt;&#xA;2a. &lt;strong&gt;g&lt;/strong&gt; indicates to group directories first&lt;br&gt;&#xA;2b. &lt;strong&gt;e&lt;/strong&gt; indicates to group by extension&lt;br&gt;&#xA;2c. &lt;strong&gt;n&lt;/strong&gt; indicates alphabetic&lt;br&gt;&#xA;2d. &lt;strong&gt;-d&lt;/strong&gt; by date, newest first (leave off the dash if want oldest first)&lt;br&gt;&#xA;2e. &lt;strong&gt;-s&lt;/strong&gt; by size, largest first (leave off the dash if want smallest first)&lt;/li&gt;&#xA;&lt;li&gt;the &lt;strong&gt;/p&lt;/strong&gt; option specifies to paginate.  Press &lt;strong&gt;spacebar&lt;/strong&gt; to continue, &lt;strong&gt;ctrl-c&lt;/strong&gt; to end immediately&lt;/li&gt;&#xA;&lt;li&gt;the &lt;strong&gt;%2&lt;/strong&gt; (etc) indicates to transfer a parameter from the command line.  For example, &lt;strong&gt;list /s&lt;/strong&gt; will list alphabetically, and also include subdirectories (each subdirectory being grouped together).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2019-06-24T00:47:22.413" LastActivityDate="2019-06-24T00:47:22.413" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11435" PostTypeId="2" ParentId="11433" CreationDate="2019-06-23T18:06:15.247" Score="2" Body="&lt;p&gt;That is possibly a capacitor failing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had, possibly, a similar noise in an amp and after some time there was a &quot;pop&quot; and the cap exploded all over the inside...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check it or get it checked.&lt;/p&gt;&#xA;" OwnerUserId="7456" LastEditorUserId="7456" LastEditDate="2019-06-23T18:12:02.690" LastActivityDate="2019-06-23T18:12:02.690" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11436" PostTypeId="1" AcceptedAnswerId="11447" CreationDate="2019-06-23T19:02:34.263" Score="3" ViewCount="225" Body="&lt;p&gt;A Sony Clié (&lt;a href=&quot;https://en.wikipedia.org/wiki/Sony_CLI%C3%89_PEG-NX70V&quot; rel=&quot;nofollow noreferrer&quot;&gt;PEG-NX70V&lt;/a&gt;) has come into my possession. It runs Palm OS 5.0, and has both a MemoryStick slot and a CompactFlash slot. The latter is only designed for use with a WiFi card, as Sony expected people would use their proprietary MemorySticks for data storage instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A third party, EruWare, &lt;a href=&quot;http://www.palminfocenter.com/view_story.asp?ID=5276&quot; rel=&quot;nofollow noreferrer&quot;&gt;wrote a driver&lt;/a&gt; that added support for CF cards for the PEG-NX70V (and other models) in 2003. This company seemed to fragment in two later that year (according to &lt;a href=&quot;https://technofile.blogspot.com/2003/10/things-change-fast-its-technology-or.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this blog post&lt;/a&gt;), resulting in two companies which each sold a CF driver for the Clié range: Athena's &lt;a href=&quot;https://web.archive.org/web/20040604071923/http://www.athenaamerica.com/aa_proddetail.asp?prod=cfstoragedriver&quot; rel=&quot;nofollow noreferrer&quot;&gt;CF Enabler&lt;/a&gt; and PDAscent's &lt;a href=&quot;https://web.archive.org/web/20040730145912/http://www.pdascent.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CF Magic&lt;/a&gt;. Both these websites have long since disappeared from the internet, leaving only a skeletal presence on archive.org as testament that they once existed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was also a free driver written by &quot;Pelaca&quot;, which patched the relevant OS files to use the Cf slot. These were hosted at &lt;a href=&quot;https://web.archive.org/web/20031216025711/http://snow.prohosting.com/~cfutil/&quot; rel=&quot;nofollow noreferrer&quot;&gt;snow.prohosting.com/~cfutil/&lt;/a&gt; (later &lt;a href=&quot;https://web.archive.org/web/20030803213240/http://snow.prohosting.com:80/cfutil/&quot; rel=&quot;nofollow noreferrer&quot;&gt;snow.prohosting.com/cfutil/&lt;/a&gt;) which again only exist at archive.org now. Sadly, while some binary files were archived, the relevant one (CFUtility) wasn't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(There's also a patching utility by &quot;Mini&quot; that &lt;em&gt;was&lt;/em&gt; &lt;a href=&quot;https://web.archive.org/web/20071008155024/http://usagiya.g-com.ne.jp/mini/mp/minipatchEN.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;archived&lt;/a&gt;, but it is only designed for the NX80, so is of no use to me.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is there a copy of any of these drivers still in existence? Or is there an alternative driver that may work for my NX70?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-06-24T15:56:03.720" Title="CompactFlash driver for Sony Clié (Palm OS)" Tags="&lt;driver&gt;&lt;sony&gt;&lt;palm&gt;&lt;clie&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11437" PostTypeId="5" CreationDate="2019-06-23T19:38:22.213" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-06-23T19:38:22.213" LastActivityDate="2019-06-23T19:38:22.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11438" PostTypeId="4" CreationDate="2019-06-23T19:38:22.213" Score="0" Body="For questions about products made by Sony and its subsidiaries." OwnerUserId="10566" LastEditorUserId="79" LastEditDate="2019-06-23T21:21:47.880" LastActivityDate="2019-06-23T21:21:47.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11439" PostTypeId="5" CreationDate="2019-06-23T19:43:27.740" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/CLI%C3%89&quot; rel=&quot;nofollow noreferrer&quot;&gt;Clié&lt;/a&gt; was a range of personal digital assistants running Palm OS. They were manufactured by Sony from 2000 to 2005.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-06-23T21:13:25.717" LastActivityDate="2019-06-23T21:13:25.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11440" PostTypeId="4" CreationDate="2019-06-23T19:43:27.740" Score="0" Body="For questions relating to the Clié range of PDAs made by Sony" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-06-23T20:16:40.840" LastActivityDate="2019-06-23T20:16:40.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11441" PostTypeId="1" CreationDate="2019-06-23T20:58:18.020" Score="12" ViewCount="2173" Body="&lt;p&gt;Is there a way to connect the &lt;a href=&quot;https://www.oldmouse.com/mouse/microsoft/greeneyed.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;1983 Microsoft &quot;Green-eyed&quot; mouse&lt;/a&gt; to a modern PC or preferably Mac (running Windows on virtual machine)?&lt;/p&gt;&#xA;" OwnerUserId="13912" LastEditorUserId="14515" LastEditDate="2019-07-06T13:41:45.087" LastActivityDate="2019-07-06T13:41:45.087" Title="A way to connect Microsoft Green-Eyed mouse to modern computer?" Tags="&lt;mouse&gt;&lt;microsoft&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11442" PostTypeId="2" ParentId="11441" CreationDate="2019-06-23T21:42:32.640" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there a way to connect the 1983 Microsoft &quot;Green-eyed&quot; mouse to a modern PC or preferably Mac (running Windows on virtual machine)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That depends a lot on the type of &lt;a href=&quot;https://www.oldmouse.com/mouse/microsoft/greeneyed.shtml&quot; rel=&quot;noreferrer&quot;&gt;green-eyed mouse&lt;/a&gt; and OS to use it with (or not).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's a &lt;a href=&quot;https://en.wikipedia.org/wiki/Bus_mouse&quot; rel=&quot;noreferrer&quot;&gt;bus mouse&lt;/a&gt; (DB9 or mini-DIN connector (*1)): &lt;strong&gt;No&lt;/strong&gt; - as that would need a way to plug in the &lt;a href=&quot;https://www.oldmouse.com/miscellanea/mousebus.shtml&quot; rel=&quot;noreferrer&quot;&gt;controller card&lt;/a&gt; (*2), which was only available as 8 bit PC card (*3).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's a serial mouse (25 pin connector): &lt;strong&gt;Possibly Yes&lt;/strong&gt; - as any USB/serial interface might be used to connect (eventually using a 25 to 9 dongle) (*4).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The 'yes' part depends on your ability to find a certified mouse driver for up-to-date Windows, as the serial driver is no longer supplied by default. There seem to be some on the net (&lt;a href=&quot;https://www.driverscape.com/download/microsoft-serial-mouse&quot; rel=&quot;noreferrer&quot;&gt;like here&lt;/a&gt; and &lt;a href=&quot;https://www.drvhub.net/devices/other-devices/microsoft/serial-mouse-1&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;), but I couldn't find any source on an MS site. I'd rather be careful when installing drivers from unknown sources.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Though the &lt;a href=&quot;https://www.oldmouse.com/mouse/microsoft/greyeyed.shtml&quot; rel=&quot;noreferrer&quot;&gt;mini-DIN version&lt;/a&gt; no longer had green eyes, but greyish-brown ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Well, there are some ways to add an ISA slot via USB, but you'd still need to write your own custom drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/3459/janka&quot;&gt;Janka&lt;/a&gt; presented a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11441/a-way-to-connect-microsoft-green-eyed-mouse-to-modern-computer/11442#comment34950_11442&quot;&gt;great idea&lt;/a&gt; if you're willing to do some hardware: The Bus-Mouse simply hands over the movement in &lt;a href=&quot;https://en.wikipedia.org/wiki/Incremental_encoder#Quadrature_outputs&quot; rel=&quot;noreferrer&quot;&gt;quadrature encoding&lt;/a&gt; (see this &lt;a href=&quot;https://books.google.de/books?id=hpmavHER2VIC&amp;amp;pg=PT134&amp;amp;lpg=PT134&amp;amp;dq=bus-mouse%20pinout&amp;amp;source=bl&amp;amp;ots=ztHRPe3IsL&amp;amp;sig=ACfU3U2oq3Gee2LkLBUj49vxDMQLgR9Ihg&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=2ahUKEwjjm8jM1YHjAhXE4KQKHfDRDwsQ6AEwDHoECAkQAQ#v=onepage&amp;amp;q=bus-mouse%20pinout&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;PC Magazine article&lt;/a&gt; about principle of operation and the mini-DIN pinout). So get yourself a more modern, but still ball-based, mouse of the PS/2 or USB kind, rip out the electronics and add a plug to connect the appropriate signals of your bus mouse to the modern controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, MS also offered some years later, the dove-bar mouse: a bus-mouse (mini-DIN only) to serial interface in form of a candy-bar like device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then there's always the possibility to go full hardware development and use some USB device carrying a micro-controller as translator. Atmel offers for their 32U4 series an example HID driver which needs just some tweaking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these hacks can also be used to connect almost any old quadrature-encoding-based mouse to a modern PC - like Amiga or Atari :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - That is, if the PC doesn't have any built-in serial ports.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="278" LastEditDate="2019-06-24T10:33:27.680" LastActivityDate="2019-06-24T10:33:27.680" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11443" PostTypeId="2" ParentId="1349" CreationDate="2019-06-23T22:34:46.707" Score="4" Body="&lt;p&gt;The biggest ones thinking back to my time in the UK games business&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Downloading - You can now send software between machines over a network. That was an amazing improvement over downloading tape images, or in Amiga and ST days throwing floppy discs around the room. We had blue marks on the walls where people missed.&lt;/li&gt;&#xA;&lt;li&gt;Emulation - emulation was very limited and expensive so you had to debug the real thing. Fun when it tended to respond by resetting and then it took 3 minutes to download the next guess. We drank a lot more tea and got more breaks back then 8)&lt;/li&gt;&#xA;&lt;li&gt;Version control - really it didn't exist beyond dated and numbered disk backups&lt;/li&gt;&#xA;&lt;li&gt;Compatibility - everything reads the same format media. We had to fight incompatible tape formats, incompatible disks, wacky things like the Sinclair Microdrives - ever tried getting software onto a Sinclair QL off something else ?&lt;/li&gt;&#xA;&lt;li&gt;Self hosting development. That came in with the Amiga/ST/PC but was a nightmare (not impossible) earlier. So a lot of cross development happened on Trash80 boxes with floppies or CP/M.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It wasn't a very professional industry. In some ways that wasn't so important. Our largest projects we could track all the assets on a couple of sheets of paper. The number of people on the core parts of a project probably never exceeded five including art.&lt;/p&gt;&#xA;" OwnerUserId="8813" LastEditorUserId="8813" LastEditDate="2019-06-23T22:43:14.687" LastActivityDate="2019-06-23T22:43:14.687" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11444" PostTypeId="2" ParentId="1644" CreationDate="2019-06-23T22:39:02.577" Score="1" Body="&lt;p&gt;We certainly always used labels. There was interesting things done to reuse start up code as data. We were not above stealing buffers and things from the supposed OS but they still got labels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;People also put variables into code which nobody seems to even know about any more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take Z80 then it's faster to do&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;       LD HL,constant&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;than&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;       LD HL, (var)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So you can save two bytes and some clocks by making the fastest load of the variable&#xA;a constant load and we'd do this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;       _var:  LD HL,constant&#xA;       var equ _var + 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and everywhere else use (var)&lt;/p&gt;&#xA;" OwnerUserId="8813" LastActivityDate="2019-06-23T22:39:02.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11445" PostTypeId="2" ParentId="1349" CreationDate="2019-06-23T23:57:31.963" Score="3" Body="&lt;p&gt;I can't speak specifically to 'personal computing', but from a 1970s/1980s minicomputer perspective, a few points.  Since I believe your question is essentially about multiple programmers producing one product, I don't suppose the specifics of the hardware really matter; the only difference is that the project members shared the same computer.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If there was no formal 'source control', then individual programmers basically copied files in and out of staging directories. You were trusted to not screw up, and on the whole, you didn't.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There were usually nightly system backups. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Every now and then, when some functional goal had been achieved, a 'base level' was declared. This likely included full system build, regression tests, building new 'source disks' and 'source tapes', and if you were lucky, sending the latter to offsite storage in case the building burned down.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Project management was basically the same as today: someone needs to know what's going on, the overall state of the universe, and how we're tracking against schedule. The tools you use don't change that. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-06-24T00:06:37.143" LastActivityDate="2019-06-24T00:06:37.143" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11446" PostTypeId="2" ParentId="3159" CreationDate="2019-06-24T08:07:56.740" Score="0" Body="&lt;p&gt;Sorting a pre-LFN (long file name) directory was relatively easy. The file system guaranteed that no file name is longer than 8+3, simple sorting algorithms could be used to exchange directory entries you wanted in a different order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With LFN support, things have gotten a bit tricky: Every single file requires one directory entry for the 8+3 name, plus a variable number of additional entries (dfepending on the actual LFN length) for the lonmg file name. Thus it is way more effort (if not close to impossible) to sort the physical directory entries in a safe way (replacing the complete directory with a sorted one would always be possible, but that's not considered &quot;safe&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is probably the reason why MS removed support for re-sorting the directory on file systems with LFN support. You should look for a work-around as mentioned in other ansers (setting DIRCMD seems to be a simple way to achieve what you want)&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2019-06-24T08:07:56.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11447" PostTypeId="2" ParentId="11436" CreationDate="2019-06-24T09:01:03.067" Score="2" Body="&lt;p&gt;Archive.org has a copy of Clié files that Rich Legg &lt;a href=&quot;https://web.archive.org/web/20081002212831/http://leggnet.com:80/clie/&quot; rel=&quot;nofollow noreferrer&quot;&gt;mirrored on his website&lt;/a&gt;. These include a file by the name of CFUtilityPelaca0603.zip, which appears to be a June 2003 version of Pelaca's CFUtility (1.0.3). There are also a number of other Clié-related files there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CFUtility is provided as a .exe file, and requires Palm Desktop to be installed on the system. It uses Palm Desktop's HotSync function to install itself to the Clié device. I found that installation worked fine using Palm Desktop 6.2 on Windows XP (32-bit).&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-06-24T15:56:03.720" LastActivityDate="2019-06-24T15:56:03.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11448" PostTypeId="2" ParentId="1349" CreationDate="2019-06-24T10:28:26.120" Score="2" Body="&lt;p&gt;I started working in the computer industry in the mid to late 80's. Most of my work involved larger computers than micros and teams of up to 10 or more people working on bespoke projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time, we mostly followed some variation of the &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Waterfall_model&quot; rel=&quot;nofollow noreferrer&quot;&gt;waterfall method&lt;/a&gt;&quot;. Sometimes, if the customer asked for it, we would use a formalised version of the above like &lt;a href=&quot;https://en.wikipedia.org/wiki/Structured_systems_analysis_and_design_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;SSADM&lt;/a&gt;. The company I worked for adhered to the waterfall model fairly strictly, even though there were some severe problems with the way it was applied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The waterfall system, for those unaware of what it is, breaks down a project into several different phases: requirements definition, functional specification, development, integration testing, system testing, acceptance testing, maintenance and support. Each phase is supposed to finish before the next one begins, although, in practice, there was always some overlap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the tools, we worked with a variety of different hardware architectures and a variety of different operating systems. I probably worked with more hardware architectures and operating systems in the first five years of my career than in the subsequent 27 years. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The quality of the developer tools was variable. Some operating systems had source code control e.g. VMS, some didn't, so part of any project was to build some sort of source control system. Even the editing tools could be inadequate. If the OS supplied you with something as good as vi you were happy.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2019-06-24T10:28:26.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11449" PostTypeId="2" ParentId="1644" CreationDate="2019-06-24T11:22:45.047" Score="0" Body="&lt;p&gt;At least several answers (and comments) seem to interpret the question with an implied idea that one can have an assembler that does not resolve symbolic addresses. I think that this interpretation is misguided. In theory, yes, a program like this can be developed (there are some examples of such programs in the comments). However, in practice, starting with the very first real assembler written for IBM 701, &lt;strong&gt;the whole point of having the assembler was not so much resolving the mneumonics into specific binary commands, but the resolution of symbolic addresses&lt;/strong&gt; (see &lt;a href=&quot;https://doi.org/10.1109/IREPGELC.1953.6499409&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rochester, N. (1953) Symbolic programming, &lt;em&gt;Transactions of the IRE Professional Group on Electronic Computers,&lt;/em&gt; (1), 10-15&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just to make my point even clearer, this is the abstract of the cited N. Rochester's paper:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Automatic calculators can be programmed to interpret programs which have been written with symbolic instead of actual addresses. This method allows the calculator to assume much of the clerical burden which must otherwise be borne by the programmer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;At the same time, when programming micros, especially when developing natively, it was often impossible to pass the whole burden of memory management to the assembler. For example, in my youth I developed &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=0028161&quot; rel=&quot;nofollow noreferrer&quot;&gt;a simple Battle City clone for ZX Spectrum&lt;/a&gt; using a ZX Spectrum 48K with a tape drive. For writing my code I used Zeus, a native assembler, which of course supported symbolic labels. However, having the assembler in memory meant that it was not possible to have my whole game in memory at the same time. Therefore, I did my development in batches: a group of routines would be developed and debugged using assembly, then built into a binary and saved onto the tape. I had a special notebook with addresses of key routines needed externally, so if I needed to refer to any of these routines later, I could call them directly by their address. Thus, low- to mid-level building and linking was done in assembler. However, all higher-level linking was done effectively by hand. I am guessing that a lot of homebrew developers at the time must have used similar approaches.&lt;/p&gt;&#xA;" OwnerUserId="5039" LastActivityDate="2019-06-24T11:22:45.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11450" PostTypeId="2" ParentId="1644" CreationDate="2019-06-24T11:56:44.880" Score="0" Body="&lt;p&gt;Many Amiga games used hard coded addresses, for example to detect if extra memory had been installed by looking for it at specific locations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The introduction of floppy disks for storage also made multi-loading more practical. Most tape games tried to avoid it because of very slow load times, but with floppy disks it was common to load between levels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using fixed addresses had two benefits for multi-load games. First it meant that any code loaded did not need to be relocatable. Jumps could be absolute, and there was no need for jump tables of trampolines or complex communication between modules. Many programmers were used to doing things that way on 8 bit systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other benefit was preventing memory management issues like fragmentation. Repeatedly allocating and freeing chunks of memory can cause memory allocation to fail eventually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, one other big benefit of using fixed addresses is that it makes debugging easier. Popular debuggers like the Action Replay allowed the programmer to inspect memory, so knowing exactly where things are located really helps. Of course the compiler will produce a map file but for speed and ease of use many people preferred not to have to look up addresses every time.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-06-24T11:56:44.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11451" PostTypeId="1" AcceptedAnswerId="11456" CreationDate="2019-06-24T13:35:02.563" Score="25" ViewCount="2663" Body="&lt;p&gt;I am working on &lt;a href=&quot;https://github.com/gergoerdi/clash-spaceinvaders&quot; rel=&quot;noreferrer&quot;&gt;an FPGA implementation of the original Space Invaders arcade machine&lt;/a&gt; and I'd like to implement access arbitration between the CPU and the video system. I can imagine several ways of doing it, and I would like to know how it was done on the real machine so I can implement something similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To recap, memory mapped to the CPU from 0x2400 to 0x4000 is an 8-bit-addressable 7K frame buffer where each byte represents 8 subsequent monochrome pixels. Obviously this memory needs to be accessible to the video system in time to draw the pixels as the electron beam sweeps across the screen. &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;1. Dual port RAM&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;In this setup, both the CPU and the video system can access the same memory at different addresses. Was this technology even available in 1978? Especially at a reasonable price?&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;2. Duplicate RAM with fanout writes&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;By using two 7K RAM modules, and fanning out writes from the CPU to both, we can have the CPU read from one and the video system read from the other, with no contention whatsoever. Of course, in a real hardware implementation, this requires an extra 7K RAM, which again is probably too expensive a solution in 1978.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;3. Suspending the CPU via the &lt;code&gt;READY&lt;/code&gt; pin during the entire visible screen&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Quite extreme, but easy to implement: only allow the CPU to run during the horizontal and vertical retrace. While wasteful of CPU cycles, I think for Space Invaders this is probably viable, since I was able to get the game in a playable state (in an emulator, with no memory arbitration) with the CPU running in the low-hundred KHz range, so there is probably enough slack to make this workable.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;4. Same as #3, but using the &lt;code&gt;HOLD&lt;/code&gt; pin to only inhibit memory access from the CPU&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This would allow the CPU to do a bit more work during the video system's VRAM access, and if I understand it right, it would require less components between the video RAM and the CPU since the CPU would electronically isolate itself from the bus.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;5. Suspending the CPU (via &lt;code&gt;READY&lt;/code&gt;) or inhibiting memory access (via &lt;code&gt;HOLD&lt;/code&gt;) for every 8th pixel&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Video system can read one byte at every 8th pixel into a shift register, then shift it out bit-by-bit. CPU only needs to be cordoned off from the video RAM for 1/8th of the time.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;6. Suspending the CPU depending on the value on the address pins&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This is the most efficient one I can think of, but also the most difficult to implement. In this scheme, the CPU is suspended (via &lt;code&gt;READY&lt;/code&gt;) iff&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The video system is accessing the VRAM (every 8th cycle during visible portion of the screen)&lt;/li&gt;&#xA;&lt;li&gt;The CPU is requesting a read or a write to an address that is in the interval 0x2000..0x4000.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It seems to me that this would also require separate circuitry to isolate the CPU electronically from the bus, since by the time we can discover that the CPU is trying to access the video RAM at the wrong time, it would be &quot;too late&quot; to ask the CPU to release the bus.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;7. Tick/tock access&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;(from a comment by user Janka): We can interleave memory access from CPU and from the video system by running them in two different clock phases (e.g. CPU on even, video on odd). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although this makes sense intuitively for me, it is unclear how synchronous RAM access would work in this scheme, since the RAM would always have to reply with the contents of not the last, but the second-to-last cycle's address bus contents, right?&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;8. Other schemes I haven't thought of yet&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Obviously the most exciting category.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, &lt;strong&gt;which of these approaches (or something else) did Space Invaders do to solve video RAM contention?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="115" LastEditorUserId="7208" LastEditDate="2019-07-26T07:27:33.883" LastActivityDate="2019-07-26T07:27:33.883" Title="Details of video memory access arbitration in Space Invaders" Tags="&lt;memory&gt;&lt;8080&gt;&lt;arcade&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11452" PostTypeId="2" ParentId="9361" CreationDate="2019-06-24T13:48:36.487" Score="2" Body="&lt;p&gt;You can find some Intel 8080 CPU tests &lt;a href=&quot;http://altairclone.com/downloads/cpu_tests/&quot; rel=&quot;nofollow noreferrer&quot;&gt;on this website&lt;/a&gt;. These can be run with no OS, just a minimal support framework described below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These binaries should be loaded to memory starting at 0x0100, and at startup, your CPU should jump to 0x0100. You should also put two handlers at addresses 0x0000 and 0x0005:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The handler at 0x0000 signals the end of the test run.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The handler at 0x0005 is used to communicate the values of the registers  &lt;code&gt;C&lt;/code&gt;, &lt;code&gt;D&lt;/code&gt; and &lt;code&gt;E&lt;/code&gt; with the outside world. Register &lt;code&gt;C&lt;/code&gt; selects from multiple functions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;C&lt;/code&gt; = 0x02 signals printing the value of register &lt;code&gt;E&lt;/code&gt; as an ASCII value&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;C&lt;/code&gt; = 0x09 signals printing the value of memory pointed to by &lt;code&gt;DE&lt;/code&gt; until a &lt;code&gt;'$'&lt;/code&gt; character is encountered&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The easiest is to put an &lt;code&gt;OUT&lt;/code&gt; instruction at &lt;code&gt;0x0000&lt;/code&gt; onwards, and an &lt;code&gt;IN&lt;/code&gt; followed by a &lt;code&gt;RET&lt;/code&gt; at &lt;code&gt;0x0005&lt;/code&gt; onwards, and then set your emulator to do the right thing on port writes / reads.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have implemented this protocol in &lt;a href=&quot;https://github.com/gergoerdi/clash-spaceinvaders/blob/7d9ce3a96b6220cf6680bdc46eeda64badc19861/src-clash/Hardware/Clash/Intel8080/TestBench.hs&quot; rel=&quot;nofollow noreferrer&quot;&gt;a testbench for an FPGA Intel 8080 implementation&lt;/a&gt; inspired by &lt;a href=&quot;https://github.com/superzazu/8080/blob/18237c1b2b8a59079169f409762169aef30052d9/i8080_tests.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;a software emulator test suite&lt;/a&gt;; both of these could be useful references for you in implementing the scaffolding necessary to run these CPU tests without any complicated OS, or even any computer, around your CPU.&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2019-06-24T13:48:36.487" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11453" PostTypeId="2" ParentId="11451" CreationDate="2019-06-24T13:59:14.033" Score="10" Body="&lt;p&gt;This is rather generic answer. As you point that Space Invaders uses 8080 CPU, it is known that 8080 accesses memory at the rate of 1 access per 3 clock cycles (max.). Other two cycles are freely available for the video system to fetch the required data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this kind of access to work reliably, DRAM chips must be able to operate at CPU clock speed (i.e. the timings of the whole access including /RAS and /CAS stages must fit in single CPU clock).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example is this schematics &lt;a href=&quot;http://www.spetsialist-mx.ru/schemes/Spetsialist.png&quot; rel=&quot;noreferrer&quot;&gt;http://www.spetsialist-mx.ru/schemes/Spetsialist.png&lt;/a&gt; of the USSR i8080-based computer. DD43 here is the i8080 (its USSR clone), DD15-DD18 are address multiplexers which route addresses from both video circuit and CPU to the DRAM, DD12.1 flip-flop (1/2 of 7474) is the arbiter that determines whether video circuit or CPU accesses the DRAM at any given clock cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the most correct answer сould be immediately determined from the schematics of Space Invaders.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-06-24T13:59:14.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11454" PostTypeId="1" CreationDate="2019-06-24T14:03:54.960" Score="3" ViewCount="170" Body="&lt;p&gt;How can I connect a Legacy scanner with a Centronics 50 output to a laptop with USB ?&lt;/p&gt;&#xA;" OwnerUserId="13914" LastActivityDate="2019-06-24T14:44:22.113" Title="how can I connect a scanner with Centronics 50 output to USB?" Tags="&lt;hardware&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11455" PostTypeId="2" ParentId="11454" CreationDate="2019-06-24T14:44:22.113" Score="2" Body="&lt;p&gt;It depends what protocol the scanner uses. If it is SCSI you need a USB to SCSI converter. If it is parallel port you need a USB to parallel port converter, although be aware that sometimes they are not compatible with scanners.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-06-24T14:44:22.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11456" PostTypeId="2" ParentId="11451" CreationDate="2019-06-24T15:04:51.040" Score="22" Body="&lt;p&gt;Space Invaders uses a simple display format where bytes are read from memory in order via an address counter, and shifted out via a shift register. Timing is controlled by discrete hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The video hardware has priority over the CPU. When it needs to read a byte it asserts the 8080's READY signal, giving it exclusive access to the memory bus. This can be seen on the &lt;a href=&quot;https://www.robotron-2084.co.uk/manuals/invaders/taito_space_invader_l_shaped_board_schematics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;schematic&lt;/a&gt; at 5F.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This technique has the advantage of the 8080 not having to be synchronized with the display hardware at all.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2019-06-27T10:00:39.413" LastActivityDate="2019-06-27T10:00:39.413" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11457" PostTypeId="1" AcceptedAnswerId="11462" CreationDate="2019-06-24T15:12:41.603" Score="7" ViewCount="470" Body="&lt;p&gt;Note: I only have the MC68040 USER'S MANUAL at hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In chapter 8.2.1 &quot;Access Fault Exceptions&quot;, it is stated that those exceptions can be caused by Bus Error or Internal Access Faults and by that seem to be a replacement of Bus Error (only) for devices without Caches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Access Fault Exception caused by Bus Error seem clear to me. My question is related to Internal Access Faults. Consider the Statement in the USER'S MANUAL:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Internal Access faults must be corrected to complete execution of the current context.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(The remainder of the section exceeds my expertise)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me that this statement may be interpreted to mean that Internal Access Faults may happen normally even in a correct program as a side effect of the cache mechanism. In this interpretation, every operating system utilizing MC68040 requires corrective actions (in the corresponding exception handler) in order to continue a program after the exception.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can this be true?&lt;/p&gt;&#xA;" OwnerUserId="11247" LastActivityDate="2019-06-24T20:44:21.980" Title="Can Access Fault Exceptions of the MC68040 caused by internal access faults occur in normal situations?" Tags="&lt;motorola-68000&gt;&lt;motorola-680x0&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11458" PostTypeId="1" AcceptedAnswerId="11518" CreationDate="2019-06-24T16:26:40.603" Score="23" ViewCount="1299" Body="&lt;p&gt;I just came across this &lt;a href=&quot;http://www.6502.org/source/floats/wozfp1.txt&quot; rel=&quot;noreferrer&quot;&gt;amazing 1976 article by Woz&lt;/a&gt;. In it he describes a relatively complete floating-point system for the 6502 with a 32-bit format (similar to earlier MS code).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand the code, mostly, but I am curious about its performance. I know that a lot of it runs through FMUL and thus one would expect that newer designs using unwound loops and/or self-modifying code would improve on that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But given the constraints of the time, mostly memory and a desire to be read-only (for some machines anyway), has this code been greatly improved upon?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have poked about a bit for benchmarks comparing this code to MS's version, but have not found anything applicable - the Rugg/Feldmann would do it but the only numbers I see are for MS BASIC vs. Integer, so Woz's FP code is not being run in either case.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="202" LastEditDate="2019-06-29T19:47:58.310" LastActivityDate="2019-07-05T04:46:50.703" Title="How good was Woz's FP code?" Tags="&lt;6502&gt;&lt;floating-point&gt;&lt;benchmarking&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11459" PostTypeId="2" ParentId="11457" CreationDate="2019-06-24T16:39:23.467" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;An internal access fault also occurs when the data or instruction MMU detects that a&#xA;    successful address translation is not possible because the page is write protected,&#xA;    supervisor only, or &lt;strong&gt;&lt;em&gt;nonresident&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(My emphasis.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, one major case of an internal access fault is an MMU detected condition, where the page is not resident, i.e. a page fault.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In this interpretation, every operating system utilizing MC68040 requires corrective actions (in the corresponding exception handler) in order to continue a program after the exception.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, yes the operating system would either have to handle page faults as part of its virtual memory management, or disable the MMU, or configure the MMU so that all pages are resident.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally writing to a write-protected page is a fault in the program, which should then be aborted; however, in some environments, a page might be write protected in order to intervene on writes &amp;#8212; for example, a debugger might mark a page write protected in order to locate a particular write to that page.&amp;nbsp; Upon faulting for these a debugger could accomplish the write, and continue the program; a garbage collector might want to intervene on writes so as to track when they occur concurrently with a major collection cycle.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As far as the other causes of internal access fault, here's what I speculate based on reading the text:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Board design: the board can dynamically disable cache operation forcing the CPU to bypass the cache and use main memory.&amp;nbsp; It seems possible that a dual CPU board or some configuration of other system devices might do this to signal a CPU about shared memory updates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently also, the board might send signals that cause the CPU to raise an internal access fault.&amp;nbsp; This might be used to support emulation, where the processor is used to run one (or several) instruction(s) and then suspend execution returning back to the emulator to observe or intervene.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastActivityDate="2019-06-24T16:39:23.467" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11460" PostTypeId="1" CreationDate="2019-06-24T18:54:44.583" Score="2" ViewCount="234" Body="&lt;p&gt;I recently picked up an Atari 800xl from ebay that seems really solid and I am using a DIN to RCA cable through an AV to HDMI adapter to connect it to my flat screen tv. This all seems to work except the signal on the TV seems to have a horizontal alignment issue. It reminds me of old TVs where you had to adjust the H-hold and V-hold to get the picture to line up nicely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hulrN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hulrN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the motherboard, there is a component for the DIN connector (highlighted in the image below). If I take the top off of that (held on by pressure, and pretty easy to remove) there are two adjustable flat-head style nobs. I am curious if those might be V-hold and h-hold nobs. I don't really want to adjust them if it ends up being something else I damage the DIN connector. The component looks pretty old (like the rest of it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/co9wj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/co9wj.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice on how to stabilize the display output so I can have fun with this thing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Final notes: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I cannot set the TV to channel 3 or 4 since it is adapting the signal using the HDMI box. Changing the switch on the back of the atari makes no difference.&lt;/li&gt;&#xA;&lt;li&gt;I have tried other cables with the same result. So I am fairly certain the issue is in the Atari itself.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="13915" LastActivityDate="2019-06-24T19:52:51.540" Title="Horizontal hold on Atari 800xl connected to flat screen tv" Tags="&lt;atari-800&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11461" PostTypeId="2" ParentId="11460" CreationDate="2019-06-24T19:52:51.540" Score="7" Body="&lt;p&gt;The NTSC video standard has a horizontal scan rate of 15,734.26Hz, but the Atari 8-bit computers (as well as the Apple II series) output a scan rate of 15,699.76Hz, which is about 0.21% slow.  That would be well within the tolerance of any analog display, but it's possible that some video-to-HDMI adapters might only be able to handle signals that are within 0.1% of spec or better--a target that some devices would be able to meet easily, but others don't meet.  Note that there is no form of calibration that would bring the Atari's video signal into spec.  The adjustments in the RF modulator would affect the modulation frequency used when connecting to a TV set, but have nothing to do with the scan rates.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-06-24T19:52:51.540" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11462" PostTypeId="2" ParentId="11457" CreationDate="2019-06-24T20:44:21.980" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It seems to me that this statement may be interpreted to mean that Internal Access Faults may happen normally even in a correct program as a &lt;strong&gt;side effect of the cache&lt;/strong&gt; mechanism.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I just downloaded the manual:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I interpret it correctly, I would say: &lt;strong&gt;No&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have to distinguish between cases 1-3 and case 4 described in the manual:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I understand correctly, &lt;strong&gt;cases 1-3&lt;/strong&gt; happen if the external hardware (memory) reports some error (bus error?) while being accessed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, RAM and ROM normally should not report errors. And you should better not access address regions not containing RAM or ROM (such as peripheral devices) with the cache enabled. So if such a memory region is accessed using the cache enabled, I would not talk about &quot;a correct program&quot; (while &quot;program&quot; includes the OS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And yes: Accessing peripheral devices using the cache enabled will definitely lead to unwanted side effects!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Erik Eidt already wrote in his answer, &lt;strong&gt;Case 4&lt;/strong&gt; will definitely happen in OSs that support memory swapping (virtual memory) and similar features. However, this is not a &quot;side effect&quot; of caching but an intended feature of the OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Case 4 may also happen if the MMU tries to read some &quot;configuration information&quot; from the memory and the memory reports an error. But (just like in cases 1-3) the configuration information for the MMU should be stored in RAM only and RAM normally does not report errors...&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2019-06-24T20:44:21.980" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11463" PostTypeId="1" CreationDate="2019-06-25T00:35:59.400" Score="3" ViewCount="532" Body="&lt;p&gt;I'm interested in doing some practice work around legacy systems out of pure recreation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to extract data or information related to a DOS game running on the 16bit arch of Windows 3.1 (1991 game). This may be seen as decompiling or deobfuscating. I don't intend on doing anything illegal but I would love to make it a learning exercise. The original product is nearly 30 years old.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the feasibility of extracting games from this era &lt;em&gt;now&lt;/em&gt; and are there any tools that are available to assist in such an action?&lt;/p&gt;&#xA;" OwnerUserId="13917" LastActivityDate="2019-06-25T07:06:38.750" Title="Extracting files from a Windows 3.1 (16bit) install/archive (game)" Tags="&lt;ms-dos&gt;&lt;gaming&gt;&lt;windows-3.x&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11464" PostTypeId="2" ParentId="11463" CreationDate="2019-06-25T07:06:38.750" Score="6" Body="&lt;p&gt;It’s easier to extract data from old games now than it was at the time, because the tools available now are better in general. Before embarking on this, it’s always worth poking around &lt;a href=&quot;http://cd.textfiles.com/&quot; rel=&quot;noreferrer&quot;&gt;Jason Scott’s CD archives&lt;/a&gt; since there might well be an unpacker for your game already.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two tools I particularly like are&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://aluigi.altervista.org/quickbms.htm&quot; rel=&quot;noreferrer&quot;&gt;QuickBMS&lt;/a&gt; — a scriptable file extractor, with support for a huge variety of compression, checksum and encryption algorithms, and a large number of ready-made extraction scripts (see the list on that page, and look through the forums too);&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://kaitai.io/&quot; rel=&quot;noreferrer&quot;&gt;Kaitai Struct&lt;/a&gt; — a binary parser construction tool; this is more oriented towards building parsers that can be re-used, than extracting individual files, but it has good data exploration tools, and of course once you have a binary parser you can extract the data.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It’s common to need to disassemble code in order to understand how data should be read; in such circumstances, disassemblers and reverse-engineering tools come in handy, tools such as&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/radare/radare2&quot; rel=&quot;noreferrer&quot;&gt;Radare 2&lt;/a&gt; — more of a disassembly framework, hard to learn but powerful;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.nsa.gov/resources/everyone/ghidra/&quot; rel=&quot;noreferrer&quot;&gt;Ghidra&lt;/a&gt; — the NSA’s reverse-engineering framework, with a decent user interface (but I haven’t used it for DOS analysis);&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.hex-rays.com/products/ida/index.shtml&quot; rel=&quot;noreferrer&quot;&gt;IDA&lt;/a&gt; — the long-standing reference, and its free versions provide good DOS support.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-06-25T07:06:38.750" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11465" PostTypeId="2" ParentId="11368" CreationDate="2019-06-25T07:08:55.837" Score="0" Body="&lt;p&gt;From memory, if you selected &quot;General MIDI&quot; as the sound card for Raptor / other games then that would get MIDI music working under Windows using the primary MIDI device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So providing you have MIDI working under Windows (try loading one in Media Player) then a game talking &quot;General MIDI&quot; should work as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The good thing about this approach is that you can use your Audigy Windows utilities to load up some nice Soundfonts before you play to enhance the music.&lt;/p&gt;&#xA;" OwnerUserId="13919" LastActivityDate="2019-06-25T07:08:55.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11466" PostTypeId="2" ParentId="10967" CreationDate="2019-06-25T14:13:57.997" Score="2" Body="&lt;p&gt;Here's one possible approach (which I haven't tried myself):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Create a TRS/80 CPM boot disk&lt;/li&gt;&#xA;&lt;li&gt;Transfer BBC BASIC to the TRS/80 separately&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2&gt;&lt;strong&gt;Creating a TRS/80 CPM Boot Disk&lt;/strong&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;David Keil's &lt;a href=&quot;http://www.classiccmp.org/cpmarchives/trs80/mirrors/www.discover-net.net/~dmkeil/trs80/model4.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;TRS-80 Emulator&lt;/a&gt; is able to use both emulated virtual floppy drives, and actualy hardware floppy drives, using the host PC's floppy interface. It's system requirements are relatively moderate: a 75MHz Pentium is enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of different online archives of CP/M software (e.g. &lt;a href=&quot;http://www.classiccmp.org/cpmarchives/trs80/Software/cpm/2006/trs80-cp.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, &lt;a href=&quot;http://www.classiccmp.org/cpmarchives/trs80/mirrors/pilot.ucdavis.edu/davidk/trs80/software/disk_dos.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, or &lt;a href=&quot;https://electrickery.hosting.philpem.me.uk/comp/trs80-4p/trs80Archives_cpm/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;). Hopefully one of these will have a veriety of CP/M for the TRS-80 that will suit you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think the emulator supports transferring files from the host file system to a virtual (or real) floppy image. But there is an alternative.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&lt;strong&gt;Transferring BBC BASIC to the TRS-80&lt;/strong&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;CP/M machines were notable for using numerous incompatible floppy drive formats. Rather than try to get two different flavours of CP/M to read each other's disks, I suggest ditching the floppy drives altogether for this step, and using RS-232. (While it wasn't included on early Model 4's, I believe all 4P's had it included as standard.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're a dab hand with a soldering iron, you should be able to fashion a serial cable to connect the TRS-80 to either your Commodore or PC. (Pinouts and bad rate settings are listed in the &lt;a href=&quot;http://www.classiccmp.org/dunfield/trs80/m4tech.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Model 4P Techical Manual&lt;/a&gt;, page 142-143.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the software side of things, you could knock something simple together to transfer your file across, though it would mean using Microsoft Basic for a short while longer.*&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, Vintage Volts made a video documenting how they transferred files by XMODEM from a PC to a TRS-80 using LS-DOS' comm, and TeraTerm on the PC. It's quite detailed (38 minutes!) and is available on &lt;a href=&quot;https://www.youtube.com/watch?v=EM_SjUpGX5k&quot; rel=&quot;nofollow noreferrer&quot;&gt;Youtube&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for integrating BBC BASIC with the CP/M boot floppy itself, I have no experience of what would be needed for this final step, so I'll leave it as an exercise for the reader.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*I've done something similar with a BBC Micro, who's OS supports accepting keyboard input from the serial interface. On my PC, I wrote a simple perl script that would parse a file and create BASIC statements such as &lt;em&gt;?&amp;amp;BEB6=&amp;amp;B0&lt;/em&gt; to write the file to a sequence of memory locations. I piped these statements out over a serial cable, and they were executed by the BBC Micro.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-06-25T14:13:57.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11467" PostTypeId="1" AcceptedAnswerId="11470" CreationDate="2019-06-25T17:40:31.993" Score="8" ViewCount="2368" Body="&lt;p&gt;Have there actually been any commercial operating systems with a single-level, limited capacity file directory? I remember vaguely that the early versions of MS-DOS FAT12 may have had a single layer, but I could not find any references.&lt;/p&gt;&#xA;" OwnerUserId="6803" LastActivityDate="2019-06-27T00:07:41.073" Title="Single level file directory" Tags="&lt;operating-system&gt;&lt;file-system&gt;" AnswerCount="6" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11468" PostTypeId="2" ParentId="11467" CreationDate="2019-06-25T18:14:33.373" Score="10" Body="&lt;p&gt;Yes. Several. Consider, for example Dec RSTS/E. This was a flat directory structure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, to be clear, the system had separate accounts. So, each user would have their own account/directory. Very similar to Users in CP/M. But they weren't hierarchical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for RSTS/E file capacity, I don't know the specifics, but I'm sure it had a limit of the total number of files on a specific device. Even modern Unix filesystems have limits to the number of files they can have. They just tend to be absurd limits.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2019-06-25T18:14:33.373" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11469" PostTypeId="2" ParentId="11467" CreationDate="2019-06-25T18:14:44.073" Score="17" Body="&lt;p&gt;Most early microcomputer operating systems were single-level - Apple DOS, CP/M, MS-DOS/PC-DOS prior to version 2.0, UCSD P-System, whatever Commodore called their DOS for the PET/CBM and C64. With the exception of UCSD P-System, which had a maximum of 77 files in the directory, I don't believe any of them had an &lt;em&gt;inherent&lt;/em&gt; limit to the number of files, but most of them did have &lt;em&gt;practical&lt;/em&gt; limits due to the amount of space allocated for the directory.&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2019-06-25T18:14:44.073" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11470" PostTypeId="2" ParentId="11467" CreationDate="2019-06-25T18:26:08.650" Score="17" Body="&lt;p&gt;The whole CP/M family of operating systems, until Concurrent DOS, had both a limited number of files per drive and no hierarchy except for user areas. From the &lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;CP/M 2.2 had no subdirectories in the file structure, but provided 16 numbered user areas to organize files on a disk. To change user one had to simply type &quot;User X&quot; at the command prompt, X being the number of the user wanted; security was non-existent and not believed to be necessary. The user area concept was to make the single-user version of CP/M somewhat compatible with multi-user MP/M systems. A common patch for the CP/M and derivative operating systems was to make one user area accessible to the user independent of the currently set user area. A USER command allowed the user area to be changed to any area from 0 to 15. User 0 was the default. If one changed to another user, such as USER 1, the material saved on the disk for this user would only be available to USER 1; USER 2 would not be able to see it or access it. However, files stored in the USER 0 area were accessible to all other users; their location was specified with a prefatory path, since the files of USER 0 were only visible to someone logged in as USER 0. The user area feature arguably had little utility on small floppy disks, but it was useful for organizing files on machines with hard drives. The intent of the feature was to ease use of the same computer for different tasks. For example, a secretary could do data entry, then, after switching USER areas, another employee could use the machine to do billing without their files intermixing. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As far as the number of files, that was not much of a problem on floppy disks, but a big problem on hard drives. I remember patching MP/M-86 on an Altos 586-20 to increase the number from (if I remember correctly) 1,024 to 2,048 files. That was a bit risky, since I didn't know all the internals of MP/M-86, but in the end a few small changes and reassembly of those files, and backup/restore of the hard drive, and I had a system that lasted me quite a bit longer than it would have otherwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With Concurrent DOS, the CP/M family (at that point CP/M had gone from CP/M-86 (16-bit) to Concurrent CP/M and MP/M-86 (multiuser/multitasking) and then added MS-DOS compatibility) added full MS-DOS hierarchical directories. Once you have hierarchical directories, the number of files in the root directory is still limited in some systems but largely irrelevant because you can simply create subdirectories to hold more files.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2019-06-26T14:45:26.863" LastActivityDate="2019-06-26T14:45:26.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11471" PostTypeId="2" ParentId="11467" CreationDate="2019-06-25T18:26:56.580" Score="11" Body="&lt;p&gt;In addition to the examples already given a couple more used a flat data structure with an absolute limit on the number of files but one property assigned to each file was its directory. So the real storage was single level — a single data structure, with file names being required to be unique across the entire disk — but it was presented as if a single level of directories.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Macintosh File System, the predecessor to HFS that lasted for only just more than a year, was one such; the maximum file count was a function of volume size, and worked out as 128 for the machine's original 400kb floppies. A file's directory information was stored in the desktop database, so rebuilding the desktop would flatten the disk's hierarchy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Acorn's DFS is another, even more limited implementation — the pseudo-directory names are only a single character in length and only 31 files are permitted per disk per side, disks initially topping out at 200kb/side.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="-1" LastEditDate="2019-06-26T14:20:51.987" LastActivityDate="2019-06-26T14:20:51.987" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11472" PostTypeId="2" ParentId="11467" CreationDate="2019-06-25T22:58:55.000" Score="7" Body="&lt;p&gt;Does 'single level' mean exactly one directory a la early DOS floppies, i.e., no directories other than the root?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or does it mean multiple directories, no nesting, except maybe of user directories in the root directory?  So you have directories &lt;em&gt;/foo&lt;/em&gt; and &lt;em&gt;/bar&lt;/em&gt;, and we can overlook the fact that there's actually a directory called &lt;em&gt;/&lt;/em&gt; which contains &lt;em&gt;foo&lt;/em&gt; and &lt;em&gt;bar&lt;/em&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my answer I'm going to assume the latter, since the users of such systems tend to regard them as single-level directory systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In which case: I'd guess this was once more common than hierarchical directory systems.  The influential description of hierarchical systems was &lt;a href=&quot;https://www.multicians.org/fjcc4.html&quot; rel=&quot;noreferrer&quot;&gt;this document&lt;/a&gt; from 1965.  But even after that, there were single-level systems.  The early DEC systems I used -- TOPS-10, RSX-11M, RSTS/E -- supported one level of directory, and tended to conflate &quot;directory&quot; and &quot;user&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the only system I used before about 1980 that had nested directories was GEORGE 3 (on ICL 1900), and that was definitely influenced by the Neumann/Daley paper.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-06-25T22:58:55.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11473" PostTypeId="1" AcceptedAnswerId="11475" CreationDate="2019-06-26T01:18:16.677" Score="71" ViewCount="12685" Body="&lt;p&gt;Anyone who has dealt with strings at a low level (e.g., writing a parser in C), knows that doing so tends to involve frequent checks of—either manually, or through &lt;code&gt;isalpha()&lt;/code&gt;, &lt;code&gt;isalnum()&lt;/code&gt;, etc—whether a character is a case-insensitive alphabetic character...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(*c &amp;gt;= 'A' &amp;amp;&amp;amp; *c &amp;lt;= 'Z') || (*c &amp;gt;= 'a' &amp;amp;&amp;amp; *c &amp;lt;= 'z')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...or an alphanumeric character...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(*c &amp;gt;= '0' &amp;amp;&amp;amp; *c &amp;lt;= '9') || (*c &amp;gt;= 'A' &amp;amp;&amp;amp; *c &amp;lt;= 'Z') || (*c &amp;gt;= 'a' &amp;amp;&amp;amp; *c &amp;lt;= 'z')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...because the above ranges are non-contiguous in the &lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII#Printable_characters&quot; rel=&quot;noreferrer&quot;&gt;ASCII order of characters&lt;/a&gt; (and many subsequent character encodings such as UTF-8). If only these 3 ranges were adjacent to each other, a much more succinct...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*c &amp;gt;= '0' &amp;amp;&amp;amp; *c &amp;lt;= 'z'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...would save countless keystrokes and once-precious clock cycles since the dawn of unix time (or actually a number of years earlier — signed integer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess other considerations were considered more pressing at the time. Does anyone remember what they might have been?&lt;/p&gt;&#xA;" OwnerUserId="3805" LastActivityDate="2021-03-13T15:47:17.350" Title="Why wasn't ASCII designed with a contiguous alphanumeric character order?" Tags="&lt;programming&gt;&lt;keyboards&gt;&lt;ascii&gt;&lt;design-choices&gt;" AnswerCount="7" CommentCount="14" FavoriteCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="11474" PostTypeId="2" ParentId="11473" CreationDate="2019-06-26T01:38:28.547" Score="61" Body="&lt;p&gt;According to &lt;a href=&quot;https://worldpowersystems.com/ARCHIVE/codes/X3.4-1963/index.html&quot; rel=&quot;noreferrer&quot;&gt;ASA X3.4-1963&lt;/a&gt; &lt;a href=&quot;https://worldpowersystems.com/ARCHIVE/codes/X3.4-1963/page7.JPG&quot; rel=&quot;noreferrer&quot;&gt;Appendix A&lt;/a&gt;, one of the design considerations was:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(7) Ease in the identification of classes of characters&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Furthermore:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;A4.4&lt;/strong&gt; The character set was structured to enable the easy identification of classes of graphics and controls.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And on &lt;a href=&quot;https://worldpowersystems.com/ARCHIVE/codes/X3.4-1963/page8.JPG&quot; rel=&quot;noreferrer&quot;&gt;page 8&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;A6.3&lt;/strong&gt; To simplify the design of typewriter-like devices, it is desirable that there be only a common 1-bit difference between characters normally paired on keytops. This, together with the requirement for a contiguous alphabet, the collating requirements outlined above, and international considerations, resulted in the placement of the alphabet in the last two columns of the graphic subset. This left the second column of the graphic subset for the numerals.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is a considerable amount of other information about the structure of ASCII in that appendix.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2019-06-26T01:38:28.547" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11475" PostTypeId="2" ParentId="11473" CreationDate="2019-06-26T01:48:06.140" Score="120" Body="&lt;h3&gt;Why is ASCII this way?&lt;/h3&gt;&#xA;&lt;p&gt;First of all, there is no one best sorting order for everything. For example, should UPPER or lower case be first? Should numbers be before or after letters? Too many choices, &lt;strong&gt;and no way to please everyone&lt;/strong&gt;. So they came up with specific pieces that &amp;quot;made sense&amp;quot;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Numerals&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;code&gt;0x30–0x39&lt;/code&gt; - Easy bit mask to get your integer value.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;UPPER case letters&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;code&gt;0x41–0x5A&lt;/code&gt; - Another easy bit mask to get your letter relative value. They could have started with &lt;code&gt;0x40&lt;/code&gt;, or put the space at the beginning. They ended up putting space at the beginning of all printable characters (&lt;code&gt;0x20&lt;/code&gt;), which makes a lot of sense. So we ended up with &lt;code&gt;@&lt;/code&gt; at &lt;code&gt;0x40&lt;/code&gt; - no specific logic to that particular character that I know of, but having &lt;em&gt;something&lt;/em&gt; there and starting the letters at &lt;code&gt;0x41&lt;/code&gt; makes sense to me for the times you need a placeholder of some sort to mark &amp;quot;right before the letters&amp;quot;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lower case letters&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;code&gt;0x61–0x7a&lt;/code&gt; - Again a simple bit mask to get the letter relative value. &lt;em&gt;Plus&lt;/em&gt;, if you want to turn UPPER into lower or vice versa, just flip one bit.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Control codes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These could have been anywhere. But placing them at the beginning has the nice advantage that extensions to the character set - from 128 to 256 and beyond - can treat &lt;strong&gt;everything&lt;/strong&gt; &lt;code&gt;&amp;gt;=&lt;/code&gt; &lt;code&gt;0x20&lt;/code&gt; as printable.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Everything else&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Everything else got filled in - &lt;code&gt;0x21–0x2f&lt;/code&gt;, &lt;code&gt;0x3a–0x3f&lt;/code&gt;, &lt;code&gt;0x5b–0x5f&lt;/code&gt;, &lt;code&gt;0x7b–0x7f&lt;/code&gt;. &amp;quot;Matching&amp;quot; characters generally next to each other, like &lt;code&gt;(&lt;/code&gt; and &lt;code&gt;)&lt;/code&gt;, or with one character separating them, like &lt;code&gt;&amp;lt;&lt;/code&gt; &lt;code&gt;=&lt;/code&gt; &lt;code&gt;&amp;gt;&lt;/code&gt; and &lt;code&gt;[&lt;/code&gt; &lt;code&gt;\&lt;/code&gt; &lt;code&gt;]&lt;/code&gt;. Most of the more universally used characters are earlier in the character set. The last character - &lt;code&gt;0x7f&lt;/code&gt; (delete or rubout) is another special case because it has all 7 bits set - see &lt;a href=&quot;https://en.wikipedia.org/wiki/Delete_character&quot; rel=&quot;noreferrer&quot;&gt;Delete character&lt;/a&gt; for all the gory details.&lt;/p&gt;&#xA;&lt;h3&gt;Why is C (and most other languages) this way?&lt;/h3&gt;&#xA;&lt;p&gt;A high-level language should be designed to be machine independent, or rather to make it possible to implement on different architectures with minimal changes. A language may be far more efficient on one architecture than another, but it should be &lt;em&gt;possible&lt;/em&gt; to implement reasonably well on different architectures. A common example of this is &lt;a href=&quot;https://en.wikipedia.org/wiki/Endianness&quot; rel=&quot;noreferrer&quot;&gt;Endianness&lt;/a&gt;, but another example is character sets. Most character sets - yes, even EBCDIC, do some logical grouping of letters and numbers. In the case of EBCDIC, the letters are in sequence, but lower case is before UPPER case and each alphabet is split into 3 chunks. So &lt;code&gt;isalpha()&lt;/code&gt;, &lt;code&gt;isalnum()&lt;/code&gt; and similar functions play a vital role. If you use &lt;code&gt;(*c &amp;gt;= '0' &amp;amp;&amp;amp; *c &amp;lt;= '9') || (*c &amp;gt;= 'A' &amp;amp;&amp;amp; *c &amp;lt;= 'Z') || (*c &amp;gt;= 'a' &amp;amp;&amp;amp; *c &amp;lt;= 'z')&lt;/code&gt; on an ASCII system it will be correct, but on an EBCDIC system it will &lt;strong&gt;not&lt;/strong&gt; be correct - it will have quite a few False Positives. And while &lt;code&gt;*c &amp;gt;= '0' &amp;amp;&amp;amp; *c &amp;lt;= 'z'&lt;/code&gt; would have lots of False Positives in ASCII, it will &lt;strong&gt;totally fail&lt;/strong&gt; in EBCDIC.&lt;/p&gt;&#xA;&lt;p&gt;Arguably, a &amp;quot;perfect text sorting character set&amp;quot; could be created that would fit your &amp;quot;ideal&amp;quot;, but it would inevitably be less-than-ideal for some other use. &lt;strong&gt;Every character set is a compromise.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-06-26T11:51:07.013" CommentCount="26" ContentLicense="CC BY-SA 4.0" />
  <row Id="11476" PostTypeId="1" CreationDate="2019-06-26T07:08:40.413" Score="10" ViewCount="5273" Body="&lt;p&gt;Satoru Iwata's story of saving the development of Pokemon Gold &amp;amp; Silver by compressing its assets to fit on the GameBoy Color cartridge is &lt;a href=&quot;https://twitter.com/JoeMerrick/status/933625323308179456/photo/1?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E933625323308179456&amp;amp;ref_url=https%3A%2F%2Fkotaku.com%2Fajax%2Finset%2Fiframe%3Fid%3Dtwitter-933625323308179456%26autosize%3D1&quot; rel=&quot;noreferrer&quot;&gt;something of a legend&lt;/a&gt;. Iwata optimised the game so much that GameFreak was even able to include two whole regions in the game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when I was looking around, the story is bereft of details of exactly how Iwata was able to do so. Is there any speculation of how Iwata was able to do this?&lt;/p&gt;&#xA;" OwnerUserId="3594" LastActivityDate="2019-06-28T15:17:54.327" Title="How did Satoru Iwata compress Pokemon GS to fit two regions on a single cartridge?" Tags="&lt;gaming&gt;&lt;game-cartridge&gt;&lt;game-boy&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11477" PostTypeId="2" ParentId="11476" CreationDate="2019-06-26T11:47:34.300" Score="9" Body="&lt;p&gt;According to the &lt;a href=&quot;https://www.nintendo.co.uk/Iwata-Asks/Iwata-Asks-Pokemon-HeartGold-Version-SoulSilver-Version/Iwata-Asks-Pokemon-HeartGold-Version-SoulSilver-Version/3-Just-Being-President-Was-A-Waste-/3-Just-Being-President-Was-A-Waste--225951.html&quot; rel=&quot;noreferrer&quot;&gt;Iwata Asks for G/S&lt;/a&gt;, &lt;strong&gt;Iwata created compression tools for the graphics in G/S&lt;/strong&gt; (as well as other parts of other &lt;em&gt;Pokémon&lt;/em&gt; games).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Morimoto:&#xA;  What's more, there were the tools for compressing the Pokémon graphic code…&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Iwata:&#xA;  Ah yes, the compression tools.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Morimoto:&#xA;  You were kind enough to create those tools.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Iwata:&#xA;  Yes. (laughs) Well, I had heard from Ishihara-san that you’d been rather concerned about it.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Morimoto:&#xA;  At that point, we got a little carried away and were making all sorts of demands, saying: “This part isn’t quite right – do you think you could fix it?” We had some nerve to be making those requests to a company president… (laughs)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Iwata:&#xA;  Well, I was willing to do whatever I could! (laughs)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If he had produced an outrageous last minute save-the-day bit of unusual, cutting-edge compression that allowed them to include the other region, I expect they would have mentioned it in the article. From the text, it seems more likely that Iwata contributed to a lot of varying things across the games, and as the subject of compressing graphics came up in a meeting for G/S, he knew he could produce something of use in the timeframe available to help keep the momentum of the project going*. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the era, this would most likely have taken the form of a C, C++ or Pascal** command-line program that takes in graphics and some text data and spits out compressed blocks with symbol annotations together with some Z80 decompression routines that could be put into the ROM. Either that would integrated be in a huge project build script to make the full ROM stage-by-stage with all its assets, or a more ad-hoc 'we've converted this, now copy pokemon.dat into this folder...' arrangement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at reverse engineered ROM maps of &lt;a href=&quot;https://datacrystal.romhacking.net/wiki/Pok%C3%A9mon_Red_and_Blue:ROM_map&quot; rel=&quot;noreferrer&quot;&gt;Red/Blue&lt;/a&gt; and &lt;a href=&quot;https://datacrystal.romhacking.net/wiki/Pok%C3%A9mon_Gold_and_Silver:ROM_map&quot; rel=&quot;noreferrer&quot;&gt;Gold/Silver&lt;/a&gt;, Gold/Silver is 2Mbyte and Red/Blue is 1Mbyte, so there would be a little extra space for the new region too!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've heard &lt;a href=&quot;https://news.ycombinator.com/item?id=3473111&quot; rel=&quot;noreferrer&quot;&gt;claims&lt;/a&gt; that Red/Blue contain a more heavily unusual and cryptic compression method than Gold/Silver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To work out what effect a new compression algorithm could have, as a back of the envelope calculation, let's consider the battle images of the Pokémon:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Each Pokémon has a front and a back image consisting of an 8 by 8 grid of 8px*8px tiles at 2 bits-per-pixel, which is 8*8*8*8*2 = 8192 bits = 1024 bytes per Pokémon portrait. (2048 bytes considering the pair.)&lt;/li&gt;&#xA;&lt;li&gt;In &lt;a href=&quot;https://www.pokecommunity.com/showthread.php?t=286845&quot; rel=&quot;noreferrer&quot;&gt;this thread at pokecommunity.com&lt;/a&gt;, there's a list of the ROM addresses of every trainer and Pokémon battle portrait. Assuming the list is consecutive, taking a couple at random, we can see that a portrait is about 400 bytes compressed.&lt;/li&gt;&#xA;&lt;li&gt;400/1024 = 39% of the original size. (Or alternatively a reduction of 61%.) &lt;/li&gt;&#xA;&lt;li&gt;There's 251 Pokémon in G/S, but there's 26 Unown so that makes 276 different party Pokémon, or 552 portraits total.&lt;/li&gt;&#xA;&lt;li&gt;552 * 1024 = 565,258 bytes uncompressed.&lt;/li&gt;&#xA;&lt;li&gt;552 *  400 = 220,800 bytes compressed.&lt;/li&gt;&#xA;&lt;li&gt;Difference = 344,448 bytes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So as a calculated guess, just compressing all the Pokémon portraits recovers 1/3rd of a megabyte, which is a sixth of the whole cartridge. That's also ignoring the few dozen trainer portraits that are used the same as Pokémon in the battle scenes***. It's conceivable therefore that Iwata replaced some preliminary compression system and his contribution recovered anywhere between 1%-15% cartridge space through some improvement in the algorithm used in R/B.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(* or he could have been incredibly humble about it :) )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(** or perhaps a GUI, maybe even in VB)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(*** And there are lots of other kinds of graphics stored in other ways - tiles, attack graphics, menus, title screen.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit - Given the information given by @user in the comment below, if the article is to be taken exactly - that Iwata only worked on G/S' compression, then either Iwata's contribution resulted in faster or more convenient or more reliable compression compared to their old tools saving in &lt;strong&gt;development time&lt;/strong&gt; rather than space, or they compressed some other part of G/S that &lt;em&gt;is&lt;/em&gt; different to R/B.&lt;/p&gt;&#xA;" OwnerUserId="13926" LastEditorUserId="13926" LastEditDate="2019-06-28T15:17:54.327" LastActivityDate="2019-06-28T15:17:54.327" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11478" PostTypeId="2" ParentId="11476" CreationDate="2019-06-26T13:12:09.537" Score="10" Body="&lt;p&gt;The code for the decompression system has been decompiled and partially commented &lt;a href=&quot;https://github.com/pret/pokered/blob/6ba3765c5932996f5da6417ae703794ff10bb1cb/home/pic.asm&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially the compression used is a form of run-length encoding, with a few modifications to make it more efficient for Gameboy graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main improvement is that graphics are split into bitplanes rather than being compressed as single bitmaps. That is, each pixel has a 2 bit value (one of four possible shades of grey), and rather than store them together (121212) the first and second bits are stored separately (111222). This has the advantage of making larger runs of same bits.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-06-26T13:12:09.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11479" PostTypeId="1" AcceptedAnswerId="11480" CreationDate="2019-06-26T14:28:46.003" Score="2" ViewCount="245" Body="&lt;p&gt;I only recently learned that the early MS BASICs had integer variables and do not have a machine that runs it. So perhaps someone with a PET or C64 could answer these questions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For one, were there integer &lt;em&gt;constants&lt;/em&gt; as well as variables? I'm not familiar with how MS stored constants like &lt;code&gt;10&lt;/code&gt;, were they always 40-bit FP or would it use an integer format if available? I seem to recall something about ints in &lt;code&gt;DATA&lt;/code&gt; statements?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second is about math over/underflow. As I understand it, when you applied math operators to int variables it used the FP code to do the calculations. So what happened if you did...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;I%=32767+2&#xA;I%=65536+2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Did it give an error, or trim it, or something else?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2019-06-26T14:31:10.617" LastActivityDate="2019-06-26T14:50:28.920" Title="Integer overflows in MS BASIC" Tags="&lt;microsoft-basic&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11480" PostTypeId="2" ParentId="11479" CreationDate="2019-06-26T14:50:28.920" Score="5" Body="&lt;p&gt;GW-BASIC 3.23 gave an error, &quot;Overflow&quot;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KIOJg.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KIOJg.png&quot; alt=&quot;GW-BASIC Integer Overflow error&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2019-06-26T14:50:28.920" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11481" PostTypeId="2" ParentId="11473" CreationDate="2019-06-26T15:31:23.313" Score="16" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rMeeR.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rMeeR.png&quot; alt=&quot;Hex chart of ASCII characters&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This chart (showing the hexadecimal values of ASCII characters) outlines manassehkatz's answer graphically: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Numbers are at 0x30 + the value of the number&lt;/li&gt;&#xA;&lt;li&gt;Capital letters are at 0x40 + the value of the letter (A=1, B=2 etc)&lt;/li&gt;&#xA;&lt;li&gt;Lowercase letters are at 0x60 + the value of the letter.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="13928" LastActivityDate="2019-06-26T15:31:23.313" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11482" PostTypeId="1" AcceptedAnswerId="11483" CreationDate="2019-06-26T16:08:03.793" Score="31" ViewCount="3471" Body="&lt;p&gt;Inspired by &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11473/11612&quot;&gt;this question&lt;/a&gt; on ASCII, I have wondered similar things about &lt;a href=&quot;https://en.wikipedia.org/wiki/EBCDIC&quot; rel=&quot;noreferrer&quot;&gt;EBCDIC&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At work we have an EBCDIC file that gets sent to a mainframe (I presume an IBM one) and to view it on my laptop I needed to run a command to convert it. &lt;code&gt;dd if=blah.ebcdic conv=ascii &amp;gt; blah.txt&lt;/code&gt; Before I found that command I took a peek at the &lt;a href=&quot;https://en.wikipedia.org/wiki/EBCDIC#Code_page_layout&quot; rel=&quot;noreferrer&quot;&gt;code page&lt;/a&gt; to see if I could whip something up myself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like ASCII you can shift a bit to get from lowercase to uppercase (&lt;code&gt;0x8_&lt;/code&gt; to &lt;code&gt;0xc_&lt;/code&gt; is one bit different). However, the cases are not contiguous themselves. The low bits &lt;code&gt;0x_a&lt;/code&gt; to &lt;code&gt;0x_f&lt;/code&gt; are skipped. Is there a reason?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also like ASCII, the numbers' low bits match the number they represent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/h3u5A.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/h3u5A.png&quot; alt=&quot;EBCDIC Code page&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11612" LastEditorUserId="3683" LastEditDate="2019-06-26T18:35:36.267" LastActivityDate="2019-06-27T07:54:09.173" Title="Why wasn't EBCDIC designed with contiguous alphanumeric characters?" Tags="&lt;ibm&gt;&lt;ascii&gt;&lt;ebcdic&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11483" PostTypeId="2" ParentId="11482" CreationDate="2019-06-26T17:13:30.803" Score="27" Body="&lt;p&gt;There is a clue in the name - BCD stands for &quot;binary-coded decimal&quot;, where 4 bits are used to represent 1 decimal digit (0-9).  The hexadecimal values A-F are not used in BCD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/EBCDIC&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;E&lt;/strong&gt;BCDIC&lt;/a&gt; is an &lt;strong&gt;e&lt;/strong&gt;xtended version of &lt;a href=&quot;https://en.wikipedia.org/wiki/BCD_(character_encoding)&quot; rel=&quot;noreferrer&quot;&gt;BCDIC&lt;/a&gt;, and it shifts BCDIC alphanumerics, and inserts characters in some of the non-decimal positions.  But there's a simple relationship to ease conversion of BCDIC to EBCDIC.&lt;/p&gt;&#xA;" OwnerUserId="7946" LastEditorUserId="7946" LastEditDate="2019-06-27T07:54:09.173" LastActivityDate="2019-06-27T07:54:09.173" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11484" PostTypeId="2" ParentId="11473" CreationDate="2019-06-26T17:33:16.733" Score="31" Body="&lt;p&gt;&lt;code&gt;man 7 ascii&lt;/code&gt; of &lt;a href=&quot;http://man7.org/linux/man-pages/man7/ascii.7.html#NOTES&quot; rel=&quot;noreferrer&quot;&gt;Linux Programmer's Manual&lt;/a&gt; says,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Uppercase and lowercase characters differ by just one bit and the ASCII character 2 differs from the double quote by just one bit, too. That made it much easier to encode characters mechanically or with a non microcontroller-based electronic keyboard and that pairing was found on old  teletypes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As supplement information, &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/13881/esr&quot;&gt;Eric S. Raymond&lt;/a&gt; authored &lt;em&gt;&lt;a href=&quot;http://www.catb.org/esr/faqs/things-every-hacker-once-knew/#_ascii&quot; rel=&quot;noreferrer&quot;&gt;Things Every Hacker Once Knew&lt;/a&gt;&lt;/em&gt; a few years ago. It has a section on the purposes of various designs in ASCII. Reading it is strongly recommended. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;ASCII, the American Standard Code for Information Interchange, evolved in the early 1960s out of a family of character codes used on teletypes.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;ASCII, unlike a lot of other early character encodings, is likely to live forever - because by design the low 127 code points of Unicode are ASCII. If you know what UTF-8 is (and you should) every ASCII file is correct UTF-8 as well.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The following table describes ASCII-1967, the version in use today. This is the 16x4 format given in most references.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex&#xA;  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p&#xA;  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q&#xA;  2 02 STX  18 12 DC2  34 22 &quot;  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r&#xA;  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s&#xA;  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t&#xA;  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u&#xA;  6 06 ACK  22 16 SYN  38 26 &amp;amp;  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v&#xA;  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w&#xA;  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x&#xA;  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y&#xA; 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z&#xA; 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {&#xA; 12 0C FF   28 1C FS   44 2C ,  60 3C &amp;lt;  76 4C L  92 5C \  108 6C l  124 7C |&#xA; 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }&#xA; 14 0E SO   30 1E RS   46 2E .  62 3E &amp;gt;  78 4E N  94 5E ^  110 6E n  126 7E ~&#xA; 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;However, this format - less used because the shape is inconvenient - probably does more to explain the encoding:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   0000000 NUL    0100000      1000000 @    1100000 `&#xA;   0000001 SOH    0100001 !    1000001 A    1100001 a&#xA;   0000010 STX    0100010 &quot;    1000010 B    1100010 b&#xA;   0000011 ETX    0100011 #    1000011 C    1100011 c&#xA;   0000100 EOT    0100100 $    1000100 D    1100100 d&#xA;   0000101 ENQ    0100101 %    1000101 E    1100101 e&#xA;   0000110 ACK    0100110 &amp;amp;    1000110 F    1100110 f&#xA;   0000111 BEL    0100111 '    1000111 G    1100111 g&#xA;   0001000 BS     0101000 (    1001000 H    1101000 h&#xA;   0001001 HT     0101001 )    1001001 I    1101001 i&#xA;   0001010 LF     0101010 *    1001010 J    1101010 j&#xA;   0001011 VT     0101011 +    1001011 K    1101011 k&#xA;   0001100 FF     0101100 ,    1001100 L    1101100 l&#xA;   0001101 CR     0101101 -    1001101 M    1101101 m&#xA;   0001110 SO     0101110 .    1001110 N    1101110 n&#xA;   0001111 SI     0101111 /    1001111 O    1101111 o&#xA;   0010000 DLE    0110000 0    1010000 P    1110000 p&#xA;   0010001 DC1    0110001 1    1010001 Q    1110001 q&#xA;   0010010 DC2    0110010 2    1010010 R    1110010 r&#xA;   0010011 DC3    0110011 3    1010011 S    1110011 s&#xA;   0010100 DC4    0110100 4    1010100 T    1110100 t&#xA;   0010101 NAK    0110101 5    1010101 U    1110101 u&#xA;   0010110 SYN    0110110 6    1010110 V    1110110 v&#xA;   0010111 ETB    0110111 7    1010111 W    1110111 w&#xA;   0011000 CAN    0111000 8    1011000 X    1111000 x&#xA;   0011001 EM     0111001 9    1011001 Y    1111001 y&#xA;   0011010 SUB    0111010 :    1011010 Z    1111010 z&#xA;   0011011 ESC    0111011 ;    1011011 [    1111011 {&#xA;   0011100 FS     0111100 &amp;lt;    1011100 \    1111100 |&#xA;   0011101 GS     0111101 =    1011101 ]    1111101 }&#xA;   0011110 RS     0111110 &amp;gt;    1011110 ^    1111110 ~&#xA;   0011111 US     0111111 ?    1011111 _    1111111 DEL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;Using the second table, it’s easier to understand a couple of things:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;p&gt;The Control modifier on your keyboard basically clears the top three bits of whatever character you type, leaving the bottom five and mapping it to the 0..31 range. So, for example, Ctrl-SPACE, Ctrl-@, and Ctrl-` all mean the same thing: NUL.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Very old keyboards used to do Shift just by toggling the 32 or 16 bit, depending on the key; this is why the relationship between small and capital letters in ASCII is so regular, and the relationship between numbers and symbols, and some pairs of symbols, is sort of regular if you squint at it. The ASR-33, which was an all-uppercase terminal, even let you generate some punctuation characters it didn’t have keys for by shifting the 16 bit; thus, for example, Shift-K (0x4B) became a [ (0x5B)&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;It used to be common knowledge that the original 1963 ASCII had been sightly different. It lacked tilde and vertical bar; 5E was an up-arrow rather than a caret, and 5F was a left arrow rather than underscore. Some early adopters (notably DEC) held to the 1963 version.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If you learned your chops after 1990 or so, the mysterious part of this is likely the control characters, code points 0-31. You probably know that C uses NUL as a string terminator. Others, notably LF = Line Feed and HT = Horizontal Tab, show up in plain text. But what about the rest?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Many of these are remnants from teletype protocols that have either been dead for a very long time or, if still live, are completely unknown in computing circles. A few had conventional meanings that were half-forgotten even before Internet times. A very few are still used in binary data protocols today.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Here’s a tour of the meanings these had in older computing, or retain today. If you feel an urge to send me more, remember that the emphasis here is on what was common knowledge back in the day. If I don’t know it now, we probably didn’t generally know it then.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.catb.org/esr/faqs/things-every-hacker-once-knew/&quot; rel=&quot;noreferrer&quot;&gt;Full text&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="12128" LastEditorUserId="12128" LastEditDate="2019-06-27T01:58:59.730" LastActivityDate="2019-06-27T01:58:59.730" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11485" PostTypeId="2" ParentId="11482" CreationDate="2019-06-26T18:01:52.027" Score="20" Body="&lt;p&gt;As pointed out by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/8207/jon-custer&quot;&gt;Jon Custer&lt;/a&gt;, part of the reason is due to the input at the time being punch cards. If holes were close together there was a risk of the card being unreadable or ripping.&lt;/p&gt;&#xA;&lt;p&gt;In addition, this punch card from the &lt;a href=&quot;https://en.wikipedia.org/wiki/EBCDIC&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article&lt;/a&gt; helps explain why both uppercase and lowercase end at &lt;code&gt;0x_9&lt;/code&gt;. The punch card only goes from 0 to 9. I don't know how A through F were entered, maybe different cards or multiple holes (or maybe Wikipedia is wrong and this is for BCDIC, not EBCDIC).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wYzvT.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wYzvT.jpg&quot; alt=&quot;EBCDIC punch card&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11612" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-06-26T18:07:25.720" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="11486" PostTypeId="1" AcceptedAnswerId="11495" CreationDate="2019-06-26T22:35:44.663" Score="30" ViewCount="7914" Body="&lt;p&gt;When I began high school in 1987 all the computers in the lab were Apple IIe desktop computers. A question has haunted me since then:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if you inserted a floppy disk &quot;upside down&quot; the Apple IIe would make a hideous noise like a vacuum cleaner. Why? What a shocking design; it scared the heck out of me as a newb. Was it usual to do that to a user? I never really recovered from that; I was put off computers for the rest of high school. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why design a computer like that for newbs? I'd never seen a computer before. Even worse, the noise would not end. It would go on for minutes. Who on earth decided to make it like that? I'd fire the design team.  &lt;/p&gt;&#xA;" OwnerUserId="13931" LastEditorUserId="3290" LastEditDate="2020-05-30T07:17:41.300" LastActivityDate="2020-05-30T07:17:41.300" Title="Why did the Apple IIe make a hideous noise if you inserted the disk upside down?" Tags="&lt;apple-ii&gt;&lt;floppy-drive&gt;" AnswerCount="5" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11487" PostTypeId="2" ParentId="11486" CreationDate="2019-06-26T22:53:46.580" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;If you inserted the disk &quot;upside down&quot; the Apple //e would make a hideous noise like a vacuum cleaner.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not sure what the 'vacuumer sound' should be. could it be that you're refering to the way the drive returns - and calibrates - to track. I would rather describe it as a fast clicking noise over some scratching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, there was no different operation between &lt;em&gt;&quot;upside down&quot;&lt;/em&gt; or not. Simply as the drive had no way to detect which was the'right' side (*1). In either case the II tried to read the disk. The difference may eventually have been that there was nothing to read on the back side (of the disks you used), resulting in an endless attempt to read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was effectively no room in the 256 byte ROM of the disk controller for a more sophisticated error recovery than to try again and again and again...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why? To me what a shocking design;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because it's an awesome simple design. The head ist moved across the racks by a spiraled disk. Turned in one direction the head moves outward toward track 35, when reversed it turns toward track 0. After power up/reset the head may be positioned at any of the tracks. So it needs to move in a way to get to a defined point - with track 0 being a desirable goal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no way to tell on what track it is, so the computer moves the head back toward track 0. Now, they could have installed a sensor telling when track 0 is reached. Except, Woz tried to minimize parts and logic, so he devised a way to do it without a sensor and electronics. So the spiral disk was made in a way that the head simply hits a stop were track 0 is supposed to be. Now the controller can always turn the head back for full 35 tracks. It'll move until it hits the stop. after that the disk continues to move  (until all 25 steps are done), but the slider moving the head just jumps the spiral track, as the head can't move anymore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Splendid solution to solve an enginering problem without any logic, sensors and whatsoever, just a groove in a disk.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;it scared the heck out of me as a newb. Was that usual to do that to a user?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Jup.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I never really recovered from that; I was put off computers for the rest of high school.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If it got you off that easy, I guess there where other things for you to enjoy.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why design a computer like that for newbs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The computer wasn't designed for 'newbs' at all, it was designed as a computer for general use. A quite cost efficient design, which BTW saved Apple several times from otherwise disastrous failures.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - A fact that many owners used to double their disk capacity - either by adding a second write notch at the opposite side or by adding a Protected/Standard/Unprotected switch to their floppies.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-27T12:06:08.810" LastActivityDate="2019-06-27T12:06:08.810" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="11488" PostTypeId="1" CreationDate="2019-06-26T23:40:04.993" Score="3" ViewCount="296" Body="&lt;p&gt;In the early 1980's there was a small handheld device that looked like a calculator. It was a tool to teach beginner level programming in BASIC. Its ad slogan was &quot;keep it near you&quot;. I never had one and I have forgotten the exact brand name. It was in the American market. It seemed to be marketed at people who knew nothing about computers or programming; the ads said that you could go from knowing nothing to being competent in programming in a few weeks.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did anyone seriously learn to program from using this? Or was it an obscure failure that become a footnote in tech history? This is getting obscure. What was the tool? It was awhile ago. &lt;/p&gt;&#xA;" OwnerUserId="13931" LastEditorUserId="13931" LastEditDate="2019-06-27T00:01:28.280" LastActivityDate="2019-06-27T00:01:28.280" Title="What is this tool that was once used to teach beginner level BASIC?" Tags="&lt;basic&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11489" PostTypeId="2" ParentId="11467" CreationDate="2019-06-27T00:07:41.073" Score="3" Body="&lt;p&gt;I'm not sure about the PET or VIC20, but the C64, C128, C128D, Plus/4, C16, and related machines used a ROM OS, rather than a DOS.  That said, they all used basically the same flat disk format, with a limit of 144 files per directory.  With the 1541, there were a total of 664 blocks per side of a disk, but one could only access one side at a time.  With the 1571, you could access both sides of a double-sided disk, for a maximum of 1328 blocks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore also made a B128, but that was a very different machine, and I don't really remember much about it besides it actually loading files at a reasonable (compared to the C64/C128) speed.  We had a B128 with an internal floppy disk, and I can't find any details about this online to confirm my vague recollections.&lt;/p&gt;&#xA;" OwnerUserId="11660" LastActivityDate="2019-06-27T00:07:41.073" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11490" PostTypeId="2" ParentId="11486" CreationDate="2019-06-27T03:25:19.357" Score="11" Body="&lt;p&gt;The obvious answer is that it wasn't designed 'for newbs' but as a general purpose personal computer that would find its way into many homes and businesses as well as educational establishments. Even in the latter, they also had to be suitable for running some fairly advanced software as well as for introductory courses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the standards of the 70s, when serious computing was generally the realm of the scientifically literate, the Apple II was pretty user friendly though. It actually had a monitor and keyboard, you didn't need to flip switches and look at lights to boot it up, and programming errors gave fairly comprehensible error messages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also had to be built to a budget though, so they couldn't design it to prevent every instance of user error from causing problems without the cost ballooning. Apple computers were already relatively expensive for their time and they'd just have priced themselves out of the market if they'd tried. So yes, they probably knew what would happen if you put the disk in upside down, but since it wouldn't break anything permanently it wasn't seen as worth the cost of fixing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For what it's worth, you could swap in pretty much any other computer from the 70s and 80s and there'd be plenty of other issues where the clumsy interactions of novice users could cause bad things to happen with them.&lt;/p&gt;&#xA;" OwnerUserId="12147" LastActivityDate="2019-06-27T03:25:19.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11491" PostTypeId="2" ParentId="11441" CreationDate="2019-06-27T09:58:17.963" Score="1" Body="&lt;p&gt;It it is a serial version, you could create a user-mode “Driver” (well just a translator).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use a serial to usb device, read the serial-port, translate the protocol to what ever new mice use, send this to a vertical serial device, and configure the windowing system to use this new serial device (all mice are, still, serial devices). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is working at a higher level of abstraction than some of the hardware hack suggestions: at the “up a bit, down a bit, left a bit, fire” level. It can be done in pure software, or in an Arduino/Raspberry-pi mid-cable device.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know I could do this is Gnu/Linux, but have no idea if it is possible in Microsoft's Windows. &lt;/p&gt;&#xA;" OwnerUserId="9036" LastActivityDate="2019-06-27T09:58:17.963" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11492" PostTypeId="2" ParentId="11486" CreationDate="2019-06-27T10:06:45.910" Score="11" Body="&lt;p&gt;The short answer is they did it to save money. They could have made the drive behave better when a disk is inserted upside down, but that would have required larger ROM chips to store the firmware or more expensive drives and controllers to detect the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As long as it didn't damage the computer such behaviours were considered acceptable to get the price down.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-06-27T10:06:45.910" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="11493" PostTypeId="2" ParentId="11473" CreationDate="2019-06-27T12:49:34.440" Score="7" Body="&lt;p&gt;Oldstyle ASR-33 teletype machines (telex machines) only handled 7-bit codes. They only handled uppercase English-language characters, the ten digits, and some punctuation.&lt;/p&gt;&#xA;&lt;p&gt;They printed with this little cylindrical print head with a limited number of characters available.&lt;br /&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/6f4qd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6f4qd.png&quot; alt=&quot;ASR-33 print head cylinder&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Later, tons of terminals, both printing and screen-based, came on the market using the same code.&lt;/p&gt;&#xA;&lt;p&gt;Lowercase English letters were more or less an afterthought. Various terminal products (not ASR-33s) started using the 8th bit. Making the uppercase and lowercase letters contiguous in the code space would have created a new code incompatible with the old ASR-33 code. So, instead, they made the lowercase letter codes by ORing in the 0x40 bit to the existing codes.&lt;/p&gt;&#xA;&lt;p&gt;That's why the codes aren't contiguous: backward compatibility with teletypes.&lt;/p&gt;&#xA;&lt;p&gt;I remember getting my first ADM-3a terminal with 8-bit support. It was awesome for the time. It made UNIX useful. I had to flip some dip switches on the PDP-11 serial port card to support it. Yeah, back then a serial port card was bigger than a Raspberry Pi is now, and drew far more power.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2cx4z.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2cx4z.png&quot; alt=&quot;ADM-3a terminal&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Back in the day of serial ports and modems a big hassle was setting them up right. You needed to know the number of bits in the character, the parity, and the number of stop bits of the other end of the connection. Here's the serial port config screen from Windows 3.1:&lt;br /&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/KEDcl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KEDcl.png&quot; alt=&quot;Windows 3.1 serial config&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13938" LastEditorUserId="7946" LastEditDate="2021-03-13T15:47:17.350" LastActivityDate="2021-03-13T15:47:17.350" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11494" PostTypeId="1" AcceptedAnswerId="11496" CreationDate="2019-06-27T15:27:47.320" Score="8" ViewCount="791" Body="&lt;p&gt;Here's some screenshots from the &lt;a href=&quot;https://www.youtube.com/watch?v=oiDwx6N2LaM&quot; rel=&quot;noreferrer&quot;&gt;youtube clip&lt;/a&gt; [1986?]: Magnum P.I (Thomas crashes Higgin's security computer system):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fh8UZ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fh8UZ.jpg&quot; alt=&quot;Magnum PI game&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JKzqH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JKzqH.png&quot; alt=&quot;Magnum PI game&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CpLcK.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CpLcK.png&quot; alt=&quot;Magnum PI keyboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then Higgins says OMG Magnum you've crashed the &quot;dracos three&quot;. I think he said that. DRAC OS three? It cost 100'000 USD to buy the drac OS. Was there such a system or OS? &lt;/p&gt;&#xA;" OwnerUserId="13931" LastEditorUserId="749" LastEditDate="2019-06-28T14:51:17.843" LastActivityDate="2019-06-28T17:31:03.950" Title="Did this game and computer system from Magnum PI exist?" Tags="&lt;identify-this-game&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11495" PostTypeId="2" ParentId="11486" CreationDate="2019-06-27T15:34:25.000" Score="115" Body="&lt;p&gt;While some floppy drives have a sensor to determine when the head is at the outermost position, the Apple uses four approaches:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;On startup, it blindly tries to move the head outward about 40 tracks.  When the motor hits the end stop it will be unable to move further and will consequently stop.  Once the Apple has done this, it will assume the head is at the outermost track.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When formatting a disk, the Apple uses the same procedure to force the head to the outermost track.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Apple will keep track of how it has moved the head in and out since it forced it to the end stop, and will thus generally know where it expects the head to be.  Because each track of a formatted disk includes markers that identify it, the Apple will generally assume that if it thinks it's on e.g. track 12, and it sees a marker for track 12, then it is in fact on track 12 and it can proceed on that basis.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the Apple is unable to see markers that indicate that it's where it thinks it should be, it will force the head to the outermost track, then step it by the proper number of steps to reach the proper position, and look again.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The noise you heard was from step 4.  When trying to access a valid formatted disk, the Apple will generally not need to run the head against the end stop, but the back side of most disks won't typically be validly formatted.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-06-27T15:34:25.000" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11496" PostTypeId="2" ParentId="11494" CreationDate="2019-06-27T15:38:53.610" Score="11" Body="&lt;p&gt;Per &lt;a href=&quot;http://magnum-mania.com/Episodes/Season5/Little_Games.html&quot; rel=&quot;noreferrer&quot;&gt;Magnum Mania&lt;/a&gt; that episode first aired on the third of January 1985, meaning it was filmed in 1984, predating all of the computers that you would expect both to be able to display graphics like that and to be a target for video games. I'm therefore inclined to agree with most of that site's analysis:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The game seen in the episode is not a real game at all. It is a mock animation sequence, complete with original artwork, audio and text made to look like a real game. The 3D graphics are too advanced for anything seen in a circa 1984 computer game. ... The fictional game is clearly inspired by the classic, landmark 3D first-person perspective games 3D Monster Maze (1981) and Dungeons of Daggorath (1982).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Though the idea that an American production crew would have heard of the ZX81 game 3D Monster Maze is a bit far-fetched, Dungeons of Daggorath is a title for the Tandy CoCo and therefore may have come up in any research they did.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-06-27T15:38:53.610" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11497" PostTypeId="1" AcceptedAnswerId="11498" CreationDate="2019-06-27T19:14:30.887" Score="9" ViewCount="405" Body="&lt;p&gt;The Wikipedia article on the 65C02 is missing an introduction date for any of the mentioned models. I did a bit of poking about with no success. Does anyone know when they were introduced?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="10566" LastEditDate="2019-07-04T12:32:33.087" LastActivityDate="2019-07-04T12:32:33.087" Title="When did the 65C02 become available?" Tags="&lt;6502&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11498" PostTypeId="2" ParentId="11497" CreationDate="2019-06-27T19:54:56.547" Score="8" Body="&lt;p&gt;The June 1983 issue of &lt;a href=&quot;https://archive.org/details/softalkv3n10jun1983/page/198?q=%2265c02%22&quot; rel=&quot;nofollow noreferrer&quot;&gt;Softalk magazine&lt;/a&gt; carried an article on the 65C02. It opens as follows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This month's discussion deals with a new version of our beloved 6502 microprocessor known as the 65C02. Although the chip has just been released within the last few months and has yet to find its way into the mainstream of computers, it seems likely that we'll be hearing more about this item in the upcoming year. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It goes on to say:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As sometimes happens with &#xA;  these things, though, some of the key persons involved with the 6502 went to work at a new company. Western Design Center. This company, then, is the original source of the new 65C02 chip. But the story doesn't end there. Western Design Center has sold the design to at least three independent manufacturers, Rockwell International, GTE, and NCR. These companies took the initial 65C02 design, corrected initial design errors, and added their own enhancements. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The picture at this point is that each of these three companies will be marketing its own version of the 65C02. The chips are more or less the same, but the Rockwell chip has the largest instruction set.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The same magazine includes the following advert:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gNIfa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gNIfa.png&quot; alt=&quot;Southwestern Data Systems advert for 65c02 upgrade for Apple IIe&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are no results from 1982 or earlier in a text search of archive.org, so I conclude that the 65c02 was introduced in the first half of 1983.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Post Script: Southwestern Data Systems produced a &lt;a href=&quot;https://archive.org/details/SDS65C02.frdoc/page/n9&quot; rel=&quot;nofollow noreferrer&quot;&gt;booklet&lt;/a&gt; on the 65C02 (copyright date 1983) which reproduces the Softalk article almost word for word. It also includes a description of the instructions, and a copy of Rockwell's datasheet for the R65C02.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-07-04T08:36:07.687" LastActivityDate="2019-07-04T08:36:07.687" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11499" PostTypeId="1" AcceptedAnswerId="11502" CreationDate="2019-06-27T20:16:07.067" Score="42" ViewCount="7372" Body="&lt;p&gt;I occasionally need to work with console commands and 100% of the time I want to redirect my output to a file I fail to redirect stderr as well as stdout the first time. I can't think of a single reason one would want the output and the error to got to different locations, especially since in most early programs what constituted error output and standard output was left entirely up to the programmer, and it's usage was wildly inconsistent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize of course, I'm ranting in 2019. We've moved well past simply outputting to the console in most all respects; so much so it's very much the exception rather than the norm. In the early days of computing there might have been a good reason to separate stdout and stderr.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What, if it existed, was it?&lt;/p&gt;&#xA;" OwnerUserId="11771" LastEditorUserId="15334" LastEditDate="2021-01-24T21:54:25.930" LastActivityDate="2021-01-24T23:25:29.587" Title="What was the point of separating stdout and stderr?" Tags="&lt;unix&gt;&lt;design-choices&gt;" AnswerCount="9" CommentCount="3" FavoriteCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11501" PostTypeId="2" ParentId="11499" CreationDate="2019-06-27T20:49:44.400" Score="138" Body="&lt;p&gt;Because you might not want error messages in your output. &lt;a href=&quot;https://minnie.tuhs.org/pipermail/tuhs/2013-December/006113.html&quot; rel=&quot;noreferrer&quot;&gt;According to&lt;/a&gt; computer scientist &lt;a href=&quot;https://en.wikipedia.org/wiki/Stephen_C._Johnson&quot; rel=&quot;noreferrer&quot;&gt;Stephen C. Johnson&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One of the most amusing and unexpected consequences of&#xA;  phototypesetting was the Unix standard error file (!).   After&#xA;  phototypesetting, you had to take a long wide strip of paper and feed&#xA;  it carefully into a smelly, icky machine which eventually (several&#xA;  minutes later) spat out the paper with the printing visible.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;One afternoon several of us had the same experience -- typesetting&#xA;  something, feeding the paper through the developer, only to find a&#xA;  single, beautifully typeset line: &quot;cannot open file foobar&quot;   The&#xA;  grumbles were loud enough and in the presence of the right people, and&#xA;  a couple of days later the standard error file was born...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="75" LastEditorUserId="79" LastEditDate="2019-06-27T20:54:16.990" LastActivityDate="2019-06-27T20:54:16.990" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11502" PostTypeId="2" ParentId="11499" CreationDate="2019-06-27T21:01:00.667" Score="110" Body="&lt;p&gt;You are thinking that all output is for human reading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, take the Unix cpio command. It writes the archive to stdout, which is always redirected to a device or file. It writes the archive with a header before each file that contains the size of the file, which lets it calculate the offset to the next file when reading it back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there was an error or warning thrown in there, it would basically make it unusable after that point due to the extra data thrown in the output. Plus you would want that warning to go to your screen or error log separately from the archive, otherwise you would never see it.&lt;/p&gt;&#xA;" OwnerUserId="4213" LastActivityDate="2019-06-27T21:01:00.667" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11503" PostTypeId="1" AcceptedAnswerId="11525" CreationDate="2019-06-27T21:15:04.660" Score="3" ViewCount="401" Body="&lt;p&gt;I'm trying to set up my system using UAE 4.2.1 64 bit and an excellent step by step guide provided by phraxoid:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://devtty.io/2018/07/computing/how-to-setup-commodore-amiga-workbench-os/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://devtty.io/2018/07/computing/how-to-setup-commodore-amiga-workbench-os/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The emulation is set up exactly as my real A1200. When using copy command in Workbench 3.1 shell the files are not copied and the only output is Copy Mode&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xkyvV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xkyvV.png&quot; alt=&quot;UAE 4.2.1, A1200 Setup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that some files are not properly handled in Windows as &quot; &quot; and other weird file names are not allowed, but since it is an emulation of the system, datatypes, and all it should not matter. Why it does it (not) happen?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="11916" LastEditDate="2019-11-20T19:18:42.700" LastActivityDate="2019-11-20T19:18:42.700" Title="Amiga Workbench copy command just outputs 'copy mode'" Tags="&lt;amiga&gt;&lt;amiga-workbench-3.1&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11504" PostTypeId="1" AcceptedAnswerId="11505" CreationDate="2019-06-27T23:06:20.343" Score="5" ViewCount="357" Body="&lt;p&gt;Does anyone know an old game, probably from 1980s or early 1990s where the player goes through a top down labyrinth opening secret rooms, collecting treasure, and food, and keys, trying to get to a different floor. The enemies rats and some star-looking things? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The player could also shoot what looked like mushrooms, but was probably throwing axes or something like that. There were some walls that could be broken by the mushrooms to gain access to a secret room. I also remember that the player had 1000 HP to start, which seemed like a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe I played on a 286 or a 386 PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S.&#xA;I don't think it was Gauntlet (Gauntlet has way more elaborate graphics) or Wizard of Wor&lt;/p&gt;&#xA;" OwnerUserId="6544" LastActivityDate="2019-06-27T23:50:34.453" Title="Old game, possibly called &quot;Demons&quot;" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11505" PostTypeId="2" ParentId="11504" CreationDate="2019-06-27T23:50:34.453" Score="3" Body="&lt;p&gt;It looks to me like &lt;a href=&quot;https://www.youtube.com/watch?v=EJpWgfn_udw&quot; rel=&quot;nofollow noreferrer&quot;&gt;Demon Stalkers (1987)&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2019-06-27T23:50:34.453" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11506" PostTypeId="2" ParentId="11486" CreationDate="2019-06-28T00:50:18.527" Score="3" Body="&lt;p&gt;This was the sound it would make anytime it tried to access an unformatted or unreadable disk, as it continuously tried and retried reading it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the Apple Disk II only used one side of a floppy disk, the unused side would usually be unformatted.&lt;/p&gt;&#xA;" OwnerUserId="13956" LastEditorUserId="10566" LastEditDate="2019-06-28T09:27:08.817" LastActivityDate="2019-06-28T09:27:08.817" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11508" PostTypeId="2" ParentId="11499" CreationDate="2019-06-28T07:08:02.410" Score="32" Body="&lt;p&gt;In UNIX, which was developed along with C, it is common to redirect the output of a command to a file or another program.  For example, &lt;code&gt;ls -a | more&lt;/code&gt; or &lt;code&gt;ls -lr &amp;gt; index&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In these cases, you would not want error messages appearing in your list of files, and especially not if the output of one command is being used as an input to another, and inserting an error message would corrupt the file—or worse, be interpreted as a command by a device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This solution was inspired by Fortran, where the output and error streams might be different physical devices.  For example, you might want to see debugging messages on your console, but send ordinary output to a printer.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2019-06-28T17:56:47.433" LastActivityDate="2019-06-28T17:56:47.433" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11510" PostTypeId="2" ParentId="11499" CreationDate="2019-06-28T13:29:28.690" Score="14" Body="&lt;p&gt;Snips-n-snails probably has the correct answer, but I'll add something since you said:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I can't think of a single reason one would want the output and the error to got to different locations &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here's one: if they output is large, you want to be able to easily identify &lt;em&gt;if there were&lt;/em&gt; any errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're probably used to color output and formatting being available even on your console, but this wasn't the case for a long time.&lt;br&gt;&#xA;Mono-spaced upper-cased characters were the only thing for a long time in the &quot;good old days&quot; (said with &lt;em&gt;and&lt;/em&gt; without sarcasm).  Spotting the error in your output could be difficult if your output didn't line up in neat columns.&lt;/p&gt;&#xA;" OwnerUserId="11728" LastActivityDate="2019-06-28T13:29:28.690" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11511" PostTypeId="1" AcceptedAnswerId="11515" CreationDate="2019-06-28T14:34:02.647" Score="1" ViewCount="184" Body="&lt;p&gt;I did enjoy the software that schools provided with the Apple //e in the late 1980's. My memory of word processing software was:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://collections.museumvictoria.com.au/items/1223763&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zardax&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Multiscribe&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I was in the Australian school system. So other countries may have used different software for writing and word processing. So have I missed any other word processing software for the Apple //e? I don't recall using Wordstar.&lt;/p&gt;&#xA;" OwnerUserId="13931" LastEditorUserId="13942" LastEditDate="2019-06-29T22:53:27.043" LastActivityDate="2019-06-29T22:53:27.043" Title="What word processing software was used by the Apple //e outside of Australia?" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2019-06-30T14:05:46.843" ContentLicense="CC BY-SA 4.0" />
  <row Id="11512" PostTypeId="2" ParentId="11494" CreationDate="2019-06-28T14:35:05.930" Score="6" Body="&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11496/6659&quot;&gt;Tommy already suggests&lt;/a&gt; it's a fake setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The keyboard shown is of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kaypro&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kaypro&lt;/a&gt; 10 with the Kaypro Logo (and parts of the white frame) painted over. As an 1800 USD portable not exactly the 'core' of a '100,000 USD' system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Graphics them self are clearly made up from a computer generated background and avartar, though the avatars scaling turning and movement are made with (back then) state of the art analogue film/TV tools as any rasterized graphics of that time would show scaling effects (jumps in size/pixel selection).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The graphics consist basically of three background images and two avatar (*1) hand drawn without any computer (*2) filmed (taped) and merged onto a single TV image by analogue means (*3) and filmed (taped) again. The text parts where done on a separate text based system (note the different angles used) as well as the 'final output' of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition the graphics vary much between the 3 different shown 'video modes' to be a originated from a single machine of that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Game wise it's a mixup of several games popular at the time. This includes the series of (timeless) text only games of &lt;a href=&quot;https://de.wikipedia.org/wiki/Infocom&quot; rel=&quot;nofollow noreferrer&quot;&gt;Infocom&lt;/a&gt; (Zork et al) of 1980ff, the text plus (static) graphics games of &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Sierra_Entertainment_video_games&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sierra Entertainment&lt;/a&gt; of 1980ff and 'action based' dungeon games with directional/command key interface and graphics like the Wizardry and &lt;a href=&quot;https://en.wikipedia.org/wiki/Ultima_(series)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ultima&lt;/a&gt; titles (both 1981 onward). All of them around 1983/84 at the height of their first boom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reasoning for such a mixup for a TV series is all about transporting the scene toward (less computer savy) viewers.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Graphics are an easy way to 'show' what the game is doing.&lt;/li&gt;&#xA;&lt;li&gt;Supported by 'voice output' (in reality an actor and vocoder tricks)&lt;/li&gt;&#xA;&lt;li&gt;Spoken word can way better transport the intention/action Magnum is intending&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Having Magnum muttering all along while just pressing some cryptic keys would make him look stupid, thus&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;using classic text adventure commands and showing how 'he' types them will make him more of narrator voice than mumbling along.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So as usual when it comes to films, computers, games, and other software are tools to drive the story, not items in their own right - especially at a time when they were quite new and only used by a tiny minority.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside, I think it's well made, capturing the spirit of these games as well as the quirks of back then graphics.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - One for walking straight and one toward the sides. Note how the avatar flips images when turning - after getting horizontal 'shortened'. It's the same image no matter if he walks left or right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Note the fine details on the floor - quite hard for back then systems, even more so within the budget of a TV show. Similar the straight diagonal lines on his back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Note the blurring when the avatar gets shortened when flipping - a hard to avoid side effect from using analogue circuits (at that time). Similar the black border of the character is a way to hide effects due source switching, which would otherwise be more prominent on horizontal borders and invisible on vertical.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-06-28T17:31:03.950" LastActivityDate="2019-06-28T17:31:03.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11513" PostTypeId="2" ParentId="11499" CreationDate="2019-06-28T15:06:30.070" Score="14" Body="&lt;p&gt;You may not be using these outputs to their full potential, or to their intended meaning. You &lt;strong&gt;never&lt;/strong&gt; want to mix debugging &amp;amp; diagnostic output with actual results of your program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Standard output&lt;/strong&gt;: the intended result of the program, for example, list of files (ls), modified or processed text file (sed,grep,awk), a compressed file in response to input file (bzip,gzip), any stream-based filtering of processing that you might want to do, result of your calculation, and so on. You may be used to outputting directly into files, but that's a worse practice, because standard output &lt;strong&gt;is meant to be pipelined&lt;/strong&gt;. You can have a long chain of tools that pass their output to the input of the next one via pipe &lt;code&gt;|&lt;/code&gt;, eventually redirecting &lt;code&gt;&amp;gt;&lt;/code&gt; the final output to the file of your choice, or even discarded (if the output is long, you probably don't want it to go directly into the terminal window). It's easy to redirect standard output to a file in the shell, it's much harder to convince a program that writes to a file, to talk to other tools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Error output:&lt;/strong&gt; This is meant so that the program can gossip about what it's doing. For example, outputting which file it's processing right now, percentage of completion, timestamps of when it started a certain stage of computing, warning, and error messages. During development, you usually output &lt;em&gt;a lot&lt;/em&gt; to &lt;code&gt;stderr&lt;/code&gt;, so that you catch any problems as soon as possible, and so you know where it gets stuck and deduce what went wrong. That's why &lt;code&gt;stderr&lt;/code&gt; is not buffered: you want it to be seen immediately on screen, because if your program dies, any buffered text may never get to the screen. Of course, you may redirect this as well to a log file, and review it later, especially if you are not standing next to the terminal (if you are running your code on a cluster, for example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most programs are very chatty on stderr, even the ones you may not think of, such as GUI based programs (firefox, pdf reader,...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the usage of both streams is completely different, you want an easy separation of the two. &lt;strong&gt;A few examples:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Observe what it's doing, and saving the result&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;programname arguments &amp;gt; outputfile&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Discard the messages, save the result:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;programname arguments &amp;gt; outputfile 2&amp;gt; /dev/null&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Save the messages for later, look at the output on console to &quot;preview&quot; what you'll save on the next run:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;programname arguments 2&amp;gt; logfile&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make a chain of tools that do something in a single line, save it (but observe all the diagnostics in real time):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;programname arguments | filterprogram | anotherfilter &amp;gt; outputfile&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="13973" LastActivityDate="2019-06-28T15:06:30.070" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11515" PostTypeId="2" ParentId="11511" CreationDate="2019-06-28T20:37:34.357" Score="4" Body="&lt;p&gt;I am making &lt;a href=&quot;http://hoop-la.ca/apple2/edit/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a list&lt;/a&gt; which will include not just word processors, but also editors and related tools.  I am fairly sure many of these were, and still are, used in Australia.  This is my first reading about Zardax -- thanks for &lt;a href=&quot;https://collections.museumvictoria.com.au/items/1223763&quot; rel=&quot;nofollow noreferrer&quot;&gt;the link&lt;/a&gt;.  Wordstar ran on CP/M which was popular at the time.&lt;/p&gt;&#xA;" OwnerUserId="6741" LastActivityDate="2019-06-28T20:37:34.357" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11516" PostTypeId="1" AcceptedAnswerId="11517" CreationDate="2019-06-28T20:58:27.060" Score="7" ViewCount="395" Body="&lt;p&gt;Generic beige-box PC clones like &lt;a href=&quot;https://www.vogons.org/viewtopic.php?f=46&amp;amp;t=42661&quot; rel=&quot;noreferrer&quot;&gt;the ones pictured here&lt;/a&gt; often had an indent for the manufacturer's badge to be stuck on. Were these all a standard size, and if so, what were the dimensions?&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-07-11T11:58:57.880" Title="What was the standard size of a PC clone's badge indent?" Tags="&lt;ibm-pc&gt;&lt;case&gt;&lt;clone&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11517" PostTypeId="2" ParentId="11516" CreationDate="2019-06-28T21:08:02.657" Score="3" Body="&lt;p&gt;One inch square, I think (at least, the insets on my old, beige, midi-tower cases are). &lt;/p&gt;&#xA;" OwnerUserId="3278" LastEditorUserId="3278" LastEditDate="2019-06-28T21:16:30.277" LastActivityDate="2019-06-28T21:16:30.277" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11518" PostTypeId="2" ParentId="11458" CreationDate="2019-06-28T23:32:02.010" Score="8" Body="&lt;p&gt;Steve Wozniak wrote most of his software to be &lt;strong&gt;compact&lt;/strong&gt; rather than fast, reflecting the constraints of affordable memory hardware of his time.  That often resulted in contortions that made it run considerably slower than a speed-optimised implementation, such as the extensive reuse of the FMUL subroutine mentioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Home micros sold before 1980 typically came with 8K or 16K of ROM in total, which had to support all the features of both BASIC and native user programs.  The early Apple machines were no exception.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FP routines written for a less space-constrained machine, such as the BBC Micro which often had 48K of ROM from the factory (16K MOS, 16K BASIC, 16K DFS), could be considerably faster due to the use of more specialised routines and more speed-optimised coding techniques that took up more space.  The BBC Master capitalised on a 128K &quot;MegaROM&quot; (named because 128KB = 1 megabit) and the more capable 65C02 to further accelerate the FP and graphics routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's hard to directly compare Woz FP and BBC Micro FP because they operate to different precisions - 4 and 5 bytes respectively - so the BBC Micro has to do more work to complete its calculations.  Nevertheless, a Mandelbrot-based benchmark on different BASICs ported to a common (relatively fast) machine shows that the BBC implementation was still faster:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;ehBasic: 172 seconds&lt;br&gt;&#xA;  Applesoft: 161 seconds&lt;br&gt;&#xA;  BBC Basic 1-3: 124 seconds&lt;br&gt;&#xA;  BBC Basic 4: 96 seconds&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In the above table, ehBasic is effectively an expanded version of MS BASIC implementing a 5-byte FP format. BBC Basic 4 is the Master version using 65C02 instructions.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="10566" LastEditDate="2019-07-05T04:46:50.703" LastActivityDate="2019-07-05T04:46:50.703" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="11519" PostTypeId="2" ParentId="6569" CreationDate="2019-06-28T23:52:01.760" Score="10" Body="&lt;p&gt;Probably the most modern BASIC available for the 6502 - though it requires a 65&lt;strong&gt;C&lt;/strong&gt;02 - is Acorn's BBC BASIC IV as released for the BBC Master.  It can be ported to other 65C02-based hardware by implementing a few of the MOS API entry points it relies on, and dummying out the rest; several people have done so for home-built SBCs.  The standard version occupies 16KB starting from $8000, but there is a relocated version for loading into high RAM of the Second Processor, starting from $B800.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BBC BASIC has much more support for &quot;structured programming&quot; than typical MS-derived BASICs, and is also noticeably faster.  I thoroughly recommend digging out a BBC Master emulator and playing around with it.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-06-28T23:52:01.760" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11520" PostTypeId="2" ParentId="2909" CreationDate="2019-06-29T00:43:09.627" Score="7" Body="&lt;p&gt;There were two major reasons:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1: On introduction, the 6502 (at $25) was &lt;strong&gt;considerably cheaper&lt;/strong&gt; than its nearest competitors; at the time, those were the 6800 ($175) and the 8080 ($179); the Z80 would not be released until the following year, and even then its initial price was $200.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2: Despite its low cost and simplicity, the 6502 was &lt;strong&gt;relatively fast&lt;/strong&gt; for a given clock speed and memory type.  At the time, CPU speed was limited more by memory access constraints than anything else.  The program code it needed was also acceptably compact for the time.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-06-29T00:43:09.627" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11522" PostTypeId="2" ParentId="11499" CreationDate="2019-06-29T14:22:12.040" Score="7" Body="&lt;p&gt;To quote from ESR's &amp;quot;&lt;a href=&quot;https://homepage.cs.uri.edu/%7Ethenry/resources/unix_art/ch01s06.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unix Philosophy&lt;/a&gt;&amp;quot;,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;Rule of Composition: Design programs to be connected to other programs.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;[...]&lt;/p&gt;&#xA;&lt;ol start=&quot;7&quot;&gt;&#xA;&lt;li&gt;Rule of Transparency: Design for visibility to make inspection and debugging easier.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;[...]&lt;/p&gt;&#xA;&lt;ol start=&quot;12&quot;&gt;&#xA;&lt;li&gt;Rule of Repair: When you must fail, fail noisily and as soon as possible.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To interpret:&lt;/p&gt;&#xA;&lt;p&gt;Programs will often be connected to other programs (or have their output saved in a file, sent over the network, etc.). However, software runs into unexpected problems all the time, and the later a problem is discovered, the more time and resources are wasted. So you want the user to be informed of problems as soon as they occur.&lt;/p&gt;&#xA;&lt;p&gt;Of course, the user has the freedom to configure things differently, but a &amp;quot;sensible default&amp;quot; is to dump problems to the console regardless of where the &amp;quot;actual&amp;quot; output is being sent.&lt;/p&gt;&#xA;&lt;p&gt;I should add that sometimes you simply want to &amp;quot;shut up&amp;quot; a program but still be notified of problems. For example when compiling code, you may not want to see the list of commands and files being run, but just any warnings or errors.&lt;/p&gt;&#xA;&lt;p&gt;Do stdout and stderr give you a lot of fine-grained control? No, they're quick'n'dirty—which is very much in the spirit of UNIX. A lot of folks seem to agree that this makes engineers much more productive. If a different approach is what suits you and the tasks you perform, that's cool.&lt;/p&gt;&#xA;" OwnerUserId="647" LastEditorUserId="15334" LastEditDate="2021-01-24T21:55:50.187" LastActivityDate="2021-01-24T21:55:50.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11523" PostTypeId="1" AcceptedAnswerId="13432" CreationDate="2019-06-29T14:50:43.090" Score="4" ViewCount="228" Body="&lt;p&gt;Config: WinUAE 4.2.1, CPU 68020, 24bit, FPU 68882, 8MB FastRam Z2, A1200, CF 4GB Transcend, BetterWB 43, Dopus 4, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I try to copy folders from PC to CF Partition (2.4GB, pfs3) it goes alright, but then unexpectedly throws bitmap error. I formatted and partitioned the card godzillion times already SFS, FFS, PFS. Same thing over and over again. Always correct MaxTransfer and Dostype were entered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XBPzd.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XBPzd.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/dUd33.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dUd33.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-02-20T21:03:05.357" Title="pfs3 error when copying files" Tags="&lt;amiga&gt;&lt;hard-disk&gt;&lt;betterwb&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11525" PostTypeId="2" ParentId="11503" CreationDate="2019-06-29T18:49:11.007" Score="1" Body="&lt;p&gt;It looks to me like your previous commands, before the failed command, resulted in you copying the entirety of the &lt;code&gt;FBlit/&lt;/code&gt; directory from your &lt;code&gt;RAM:Temp/&lt;/code&gt; source directory to somewhere else - and probably the somewhere else is &lt;code&gt;System:C&lt;/code&gt;. Try:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;List System:C/FBlit&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may show you have all the files there, which is not what the instructions meant for you to do. The instructions are attempting to put the binary &lt;code&gt;FBlit&lt;/code&gt; in the &lt;code&gt;System:C/&lt;/code&gt; directory so that you can launch it from your &lt;code&gt;Startup-Sequence&lt;/code&gt; file using &lt;code&gt;C:FBlit&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, I don't think you have a &lt;code&gt;RAM:Temp/FBlitGUI&lt;/code&gt; file because I think you extracted the LHA archive into an &lt;code&gt;FBlit&lt;/code&gt; sub-directory, namely &lt;code&gt;RAM:Temp/FBlit&lt;/code&gt;. So the copy command that worked for you on &lt;code&gt;FBlit.info&lt;/code&gt; was you copying the .info file for &lt;em&gt;the &lt;code&gt;FBlit/&lt;/code&gt; directory&lt;/em&gt; into your C: path. Also, not part of the instructions intentions. The instructions want you to copy the .info file for the binary &lt;code&gt;FBlit&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall, I think the confusion started with &lt;code&gt;FBlit/&lt;/code&gt; (directory) vs. &lt;code&gt;FBlit/FBlit&lt;/code&gt; binary inside that directory. TOO MUCH redundant naming, IMO.   &lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-06-29T18:49:11.007" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11526" PostTypeId="2" ParentId="11516" CreationDate="2019-06-29T19:27:27.317" Score="8" Body="&lt;p&gt;Measurements of my IBM Model 5150 indicate the badge itself is 1 in. square, equivalent to 25 mm. But there is an additional approximately 1/32 in. added for the indent area, thus allowing the badge to completely reside within the indent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For &quot;clones&quot;, I suppose the ones deemed &quot;100% PC Compatible&quot; would need to match this size, precisely.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/DeWMC.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DeWMC.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-06-29T19:27:27.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11527" PostTypeId="1" AcceptedAnswerId="11529" CreationDate="2019-06-29T21:45:54.163" Score="25" ViewCount="4107" Body="&lt;p&gt;I can find information about &lt;a href=&quot;https://en.wikipedia.org/wiki/Control_character#Transmission_control&quot; rel=&quot;noreferrer&quot;&gt;how characters were used to structure transmissions in general&lt;/a&gt;, and I can find information about transmission characters which are still commonly &lt;a href=&quot;https://en.wikipedia.org/wiki/End-of-Text_character&quot; rel=&quot;noreferrer&quot;&gt;used&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/End-of-Transmission_character&quot; rel=&quot;noreferrer&quot;&gt;today&lt;/a&gt;, though perhaps not for their originally intended purpose. But I am unable to find anything more on the &quot;end of medium&quot; character (EM, 0x19, decimal 25) than that name among listings of all the ASCII characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was this character intended to be used for (AKA what sense of the word &quot;medium&quot; was meant)? Was it ever actually widely used for that purpose, or any other?&lt;/p&gt;&#xA;" OwnerUserId="14005" LastActivityDate="2019-07-01T10:55:55.463" Title="What was the ASCII end of medium (EM) character intended to be used for?" Tags="&lt;history&gt;&lt;data-transfer&gt;&lt;ascii&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11528" PostTypeId="2" ParentId="11527" CreationDate="2019-06-30T00:07:09.193" Score="19" Body="&lt;h1&gt;Wikipedia&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;“Intended as means of indicating on paper or magnetic tapes that the end of the usable portion of the tape had been reached.”, if &lt;a href=&quot;https://en.wikipedia.org/wiki/C0_and_C1_control_codes#EM&quot; rel=&quot;noreferrer&quot;&gt;en.wikipedia.org/wiki/C0_and_C1_control_codes#EM&lt;/a&gt; is to be believed. &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;ECMA-6&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;ASCII was codified internationally as &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO/IEC_646&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;ISO/IEC 646&lt;/em&gt;&lt;/a&gt; which in turn was ratified by &lt;a href=&quot;https://en.wikipedia.org/wiki/Ecma_International&quot; rel=&quot;noreferrer&quot;&gt;ECMA&lt;/a&gt; as ECMA-6. Section 8.12 &lt;em&gt;EM END OF MEDIUM&lt;/em&gt; of a &lt;a href=&quot;http://www.ecma-international.org/publications/files/ECMA-ST-WITHDRAWN/ECMA-6,%205th%20Edition,%20March%201985.pdf&quot; rel=&quot;noreferrer&quot;&gt;PDF image document of the 5th Edition (March 1985)&lt;/a&gt; reads:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A control character that may be used to identify the physical end of a medium, or the end of the used portion of a medium, or the end of the wanted portion of data recorded on a medium.  The position of this character does not necessarily correspond to the physical end of the medium.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So EM wasn't the same as the reflective physical end of tape marker (bane of flash photographers), but rather more likely to be the equivalent of the soft end-of-tape markers used in cpio/tar/pax archives. This allowed data sets larger than available media to be stored/transmitted in multi-volume sets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data formats and file systems used to be far more record/block oriented than they are today and these control characters would have been developed to support record formats in transmission. I'd love to learn of any actual use of these ASCII features in the wild, as I've yet to see one.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2019-06-30T12:25:42.630" LastActivityDate="2019-06-30T12:25:42.630" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="11529" PostTypeId="2" ParentId="11527" CreationDate="2019-06-30T11:36:27.173" Score="16" Body="&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;p&gt;EM (or EOM as in early documents - and Unicode as well) was and is widely used in data transmission to mark either&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The physical end of a medium,&lt;/li&gt;&#xA;&lt;li&gt;The end of the used portion of a medium&lt;/li&gt;&#xA;&lt;li&gt;The end of meaningful (wanted) data on a medium.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;(Like Scruss already described in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11528/6659&quot;&gt;his answer&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;It was used with next to any &lt;a href=&quot;https://en.wikipedia.org/wiki/Remote_job_entry&quot; rel=&quot;noreferrer&quot;&gt;RJE station&lt;/a&gt; as well as terminal. The confusion/missing information may be due its quite low visibility to average (terminal device) programmers, as it's used at the core of many data protocols - especially in finance. Each and every credit card transaction will go over various communication links encoded with EM in certain fields.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Form:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But I am unable to find anything more on the &amp;quot;end of medium&amp;quot; character (EM, 0x19, decimal 25) than that name among listings of all the ASCII characters.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, maybe because its most prominent usage was within the (IBM forged) Mainframe world. It denotes the end of a variable length (or shortened) input or output. On some environments it could be used to shorten transmissions to transmit only the characters entered within this (logical) line, not the whole line or the whole screen (keep in mind, mainframe terminals operate in block mode), saving quite some transmission time.&lt;/p&gt;&#xA;&lt;p&gt;Unbeknown to most, all remote (terminal) I/O in mainframe systems is (usually) ASCII-based (*1). To avoid possible code issues, EM belongs to the group of characters with the same encoding in ASCII and EBCDIC.&lt;/p&gt;&#xA;&lt;p&gt;The usage developed over time. Generations of terminals, including the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2260&quot; rel=&quot;noreferrer&quot;&gt;2260&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2741&quot; rel=&quot;noreferrer&quot;&gt;2741&lt;/a&gt; or 1050 series, had implied handling (by message framing) of EOM as it was called back then (and still is in Unicode). For example, for explicit display the 2260 used ASCII X'21' or &lt;code&gt;!&lt;/code&gt;. Later it became available as a user-handled function.&lt;/p&gt;&#xA;&lt;p&gt;EOM was officially integrated into ASCII-1967 (USAS X3.4-1967) as EM, mostly to satisfy the needs of interoperable RJE handling. The IBM 2280 Data Transmission Terminal manual (GA27-3005-3 of 1971) describes the EM function in context with input/output media nicely for handling of punch cards:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;EM (End of Media)&#xA;The EM control character is used to indicate the end&#xA;of a record when transmitting records of variable&#xA;length. The EM character is punched in the card&#xA;column following the last column containing data.&#xA;When the EM character is read from a card it prevents&#xA;further reading of that card. The transmitting&#xA;2780 then generates automatically and transmits an&#xA;end-of-record (US or IUS in EBCDIC), or end-of-block&#xA;(ETB) character following the EM character.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Handling - or better generating - such input might have been the most common usage for ASCII based environment when hooking up to the IBM world.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What was this character intended to be used for&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Intention implies that character sets were created to form an intended use. In reality it's usually the other way around: there are many usages in many different environments; to form a standard, committees try to squeeze in as many different functions, while finding overlapping usage to reduce code points needed.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(AKA what sense of the word &amp;quot;medium&amp;quot; was meant)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In its most pure sense of &lt;em&gt;any&lt;/em&gt; medium. No matter if a line on a screen, a (part of a) punch card, a paper tape or magnetic tape or some data stream.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was it ever actually widely used for that purpose, or any other?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. With any credit card transaction you send several data blocks, and EM will be used in some fields. Mainframe will never die :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - RJE stations like the 2280 can often operate in EBCDIC or ASCII.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-01T10:55:55.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11530" PostTypeId="2" ParentId="11499" CreationDate="2019-06-30T12:24:53.780" Score="1" Body="&lt;p&gt;Security.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Security and prevention of malicious attack has not been mentioned in any of the answers and should likely be included for completeness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Deriving the nature of an error can assist an attacker in determining the effectiveness of a given attempt.  This can be mitigated by separating error reports out and preventing them from reaching an unprivileged user.&lt;/p&gt;&#xA;" OwnerUserId="14012" LastActivityDate="2019-06-30T12:24:53.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11532" PostTypeId="1" CreationDate="2019-06-30T16:44:39.827" Score="3" ViewCount="297" Body="&lt;p&gt;I have recently gotten my hands on a &quot;Movemaster EX RV-M1&quot; 5-axis robotic arm &lt;a href=&quot;https://www.rescienceinc.com/product-page/mitsubishi-rv-m1-micro-robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;(image)&lt;/a&gt; manufactured by Mitsubishi in the 70's (I think). Sadly, I only have the arm and one set of cables I don't want to mess with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2Nmqp.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2Nmqp.jpg&quot; alt=&quot;IEEE-488 GPIB&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that the robot's connectors to the control unit are IEEE-488 GPIB connectors (seen above) mainly used in older electronics and some measuring equipment nowadays. I have searched everywhere on the internet I could think of to find find fitting cables/connectors but the only thing I found are these types of &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B003L1907E&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;cable&lt;/a&gt; which have the wrong amount of &quot;pins&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does a female 36/50 pin IEEE-488 connectors or a 36/50 pin IEEE-488 cable exist? Or could I also build them on my own? I have access to high grade CAD-Software, an industrial 3D-printer and sheet metal manufacturing methods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have searched for every term that came to my head on the internet and I have no idea where I should go if I wanted to find something in my proximity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I greatly appreciate any help!&lt;/p&gt;&#xA;" OwnerUserId="14017" LastEditorUserId="10566" LastEditDate="2019-07-02T14:51:50.770" LastActivityDate="2019-07-15T10:04:04.093" Title="What kind of cable do I need to connect a Movemaster EX RV-M1 robotic arm to a PC?" Tags="&lt;connector&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11533" PostTypeId="1" CreationDate="2019-07-01T06:45:31.650" Score="414" ViewCount="218669" Body="&lt;p&gt;I was playing Hypnospace Outlaw, a game about a retro-themed OS. This OS has a peculiar behavior that when loading a webpage, wiggling the mouse cursor will load the page faster.&lt;/p&gt;&#xA;&lt;p&gt;That reminded me of something. When I was young, if I remember correctly, Windows 95 (if not 98) had this weird behavior that when installing programs, wiggling the mouse cursor make the progress faster. What caused this? I searched for it, I couldn't find anything related.&lt;/p&gt;&#xA;&lt;p&gt;Sorry for the vague explanation.&lt;/p&gt;&#xA;" OwnerUserId="14020" LastEditorUserId="15334" LastEditDate="2021-01-22T14:05:02.877" LastActivityDate="2021-01-22T14:05:02.877" Title="Why did moving the mouse cursor cause Windows 95 to run more quickly?" Tags="&lt;windows-98&gt;&lt;windows-95&gt;&lt;mouse&gt;" AnswerCount="8" CommentCount="7" FavoriteCount="130" ContentLicense="CC BY-SA 4.0" />
  <row Id="11534" PostTypeId="2" ParentId="11533" CreationDate="2019-07-01T07:56:17.240" Score="104" Body="&lt;p&gt;Yes, it's a real effect resulting in causing a measurable speed up and can be reproduced at will:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try opening a large file with Notepad on a contemporary machine. The window must not be full screen. When loaded, mark all text using the mouse (the keyboard works as well, it just needs more manual skill). While still holding the button down (and marking) move the mouse down, so the text gets marked and scrolled. Now compare the scroll speed while holding the mouse still versus wiggling it. Depending on your machine the speed up can be several times faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amazing, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can be viewed in many other programs as well, Notepad is just an easy to reproduce example. It's related to the way multitasking worked in early versions of Windows. Here everything revolved around the message queue. Wiggling the mouse resulted in a flood of mouse-move messages, which in turn made programs wake up more often and (depending on their structure) updating their states each time, going into the message loop again, giving time to screen updates, resulting in an over all faster reaction. It shows a glimpse of the ways MS used to make Windows rather responsive despite its cooperative threaded nature.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-03T06:43:03.047" LastActivityDate="2019-07-03T06:43:03.047" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="11535" PostTypeId="2" ParentId="11533" CreationDate="2019-07-01T08:29:09.687" Score="477" Body="&lt;p&gt;This is because of a flaw in the way Windows 95 generates events, and the fact that many applications are event driven.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 95 applications often use asynchronous I/O, that is they ask for some file operation like a copy to be performed and then tell the OS that they can be put to sleep until that operation finishes. By sleeping they allow other applications to run, rather than wasting CPU time endlessly asking if the file operation has completed yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reasons that are not entirely clear, but probably due to performance problems on low end machines, Windows 95 tends to bundle up the messages about I/O completion and doesn't immediately wake up the application to service them. However, it does wake the application for user input, presumably to keep it feeling responsive, and when the application is awake it will handle any pending I/O messages too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus wiggling the mouse causes the application to process I/O messages faster, and install quicker. The effect was quite pronounced; large applications that could take an hour to install could be reduced to 15 minutes with suitable mouse input.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="7891" LastEditDate="2019-07-03T03:17:11.017" LastActivityDate="2019-07-03T03:17:11.017" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="11536" PostTypeId="2" ParentId="11533" CreationDate="2019-07-01T10:00:51.103" Score="-2" Body="&lt;p&gt;Windows pre-NT (Windows 1,2,3,3.11,95,98) was cooperative multitasking vs NT's (2000, XP, Vista, 7 &amp;amp; 10) preemptive multitasking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On cooperative multitasking, the foreground app has to yield control to other tasks.  Thus if the foreground app got stuck, the whole machine froze.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Preemptive multitasking, the system usually had a hardware interrupt, usually a timer, to force a yield.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On Windows 95, the keyboard and mouse generated interrupts, moving the mouse caused the interrupt to fire and the OS to service it's event queue.  A form of preemptive multitasking, instead of a fixed timer interrupt, you were doing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The OS would update the status on screen at the interrupt and then go service the other tasks. The screen update would make it seem that the OS was processing faster. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT - 1/2 right ...&#xA;Cannot pre-emptively multitask Win16 applications because it uses the same System Virtual Machine (VM) model as in Windows 3.1 to run Win16 applications. Thus, Windows 95 will revert to a cooperative multitasking environment when running Win16 applications and give them exclusive control of the CPU for as long as the applications are executing. As a result, true pre-emptive operation is impossible when multitasking a mixture of Win16 and Win32 applications. &lt;/p&gt;&#xA;" OwnerUserId="2018" LastEditorUserId="2018" LastEditDate="2019-07-02T10:42:34.933" LastActivityDate="2019-07-02T10:42:34.933" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11537" PostTypeId="2" ParentId="11499" CreationDate="2019-07-01T10:14:19.373" Score="1" Body="&lt;p&gt;Lots of good answers here already. Let me just add some simple examples.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I can't think of a single reason one would want the output and the error to got to different locations&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;OK, consider the following shell command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ls -l some/directory/that/might/not/exist &amp;gt; directory_content.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That does a long form listing of the specified directory (if it exists) and puts the content in a text file. If the directory doesn't exist, would it be more convenient for you to see the error on the screen or to find it in the file when you next look at the file?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's another one:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;numFiles=`ls | wc -l`&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That counts the files in the current directory and assigns the count to &lt;code&gt;$numFiles&lt;/code&gt;. If there's an error (unlikely in this case, but still possible), would you like to see &lt;code&gt;$numFiles&lt;/code&gt; assigned with 1 (because the error is one line long)? Or would you prefer to see the error on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo find / -name someFile&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That looks for a particular file on the whole file system. Unfortunately, on modern systems, it's likely to spew out lots of error messages for files even root shouldn't look at. If you do this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo find / -name someFile 2&amp;gt; /dev/null&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;you can discard all the errors and see only the things you want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a general principle at play here, which is that you should always distinguish error output from normal output and ideally keep it separate. Some mechanisms turn out to be better than others. For example, in C it is often the convention to use a special function return value to signify an error, often -1 for functions returning integers or &lt;code&gt;NULL&lt;/code&gt; for functions returning pointers. This can cause problems if the caller fails to properly check the return value. Other subtle errors can occur too. Here's one that beginner C programmers often make&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;char c;&#xA;while ((c = fgetc(someFP)) != EOF)&#xA;{&#xA;    doSomethingWith(c);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'll leave it as an exercise for the reader to identify the bug.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a more spectacular example, consider Ariane flight 501. The inertial reference system had an exception due to the overflow of one value (velocity I think) due to it having been designed for Ariane 4. The IRS declared an exception and sent diagnostic data to the guidance system. The guidance system assumed the diagnostic data was actually legitimate attitude data and tried to correct the situation by fully deflecting the nozzles on the boosters. The rocket then began to break up and ultimately became an expensive firework. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="7946" LastEditDate="2019-07-01T10:56:28.667" LastActivityDate="2019-07-01T10:56:28.667" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11538" PostTypeId="2" ParentId="10989" CreationDate="2019-07-01T11:56:08.497" Score="16" Body="&lt;p&gt;Looking for either &lt;code&gt;&quot;rose.neo&quot; atari&lt;/code&gt; or &lt;code&gt;&quot;rose.pc1&quot; atari&lt;/code&gt; in Google images with an exact requested size of 320x200 yields this result, which seems to match your description pretty well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could it be that one?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NLMUj.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NLMUj.png&quot; alt=&quot;rose.pc1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;EDIT #1&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a better version from Demozoo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NlvDA.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NlvDA.png&quot; alt=&quot;rose&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;EDIT #2&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original Neochrome file can be downloaded &lt;a href=&quot;http://www.randelshofer.ch/animations/anims_atari/atari/Rose.ilbm.html&quot; rel=&quot;noreferrer&quot;&gt;from this page&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7850" LastEditorUserId="7850" LastEditDate="2019-07-01T12:23:59.807" LastActivityDate="2019-07-01T12:23:59.807" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11541" PostTypeId="2" ParentId="11533" CreationDate="2019-07-01T16:20:45.677" Score="39" Body="&lt;p&gt;It wasn't just Windows 95, but Windows 3.x as well, even though they work very differently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other answers talk about pre-emptive multitasking, so let's first clarify this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Window 3.x was using cooperative multitasking where each app would release the cpu for the other apps to use it. Windows 95 uses pre-emptive multitasking where each app is allocated a time slice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer is linked to how the graphic interface works: in a windows graphical app, there is a loop called the 'message pump':&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every event (mouse moved, window got resized, etc) is pushed into a queue. The app is responsible to check if it has messages waiting and, if yes, pull them and process them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is at this moment that Windows 3.x was switching to other apps since there was a single point where all apps where going to, but this doesn't apply to windows 95.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What really happens is that, on both OS, you need to process the message loop, but if you want to update something in the background, like a task, a display update, etc, you'd set a timer and the timer would put a message in the queue at a regular interval.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These were better ways to do things on Windows 95, but developers took time to transition from Windows 3.x and many apps were structured the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the main mechanism was to rely only on the message loop and background operations were done through timer messages, moving the mouse would trigger a lot of messages, move the app up in priority, wake the app up, and get the app to process the background tasks messages. Without moving the mouse, the timer messages would be read up only at a rather slow interval.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most famous app for this was the disk defragmenter where operations would wait for a message to update the graphic interface! so shaking the mouse would speed up the defrag.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2019-07-01T16:20:45.677" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11544" PostTypeId="1" AcceptedAnswerId="11548" CreationDate="2019-07-02T03:13:19.947" Score="8" ViewCount="869" Body="&lt;p&gt;During the latest gaming press release, Square Enix released remastered versions of all of the classic Final Fantasy games excluding Final Fantasy VIII. The alleged reason is due to the &lt;a href=&quot;https://www.vg247.com/2018/09/14/isnt-ps4-xbox-switch-port-final-fantasy-8-preservation-may-answer/&quot; rel=&quot;noreferrer&quot;&gt;lost source code&lt;/a&gt;. Ignoring SE's failure to archive the source of their very own historical, if not also lucrative software, I want to ask about the historical practices of oldskool gaming platforms (from console development to home computers) for archiving and version controlling. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that version control and cloud archival has become tightly integrated into today's software development cycles. Were there other tools that contributed to the archival in its broadest sense of source code. If so, no what extent did these tools preserve changes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;: From the comments, it seems that version control has &lt;a href=&quot;https://softwareengineering.stackexchange.com/a/310163/309287&quot;&gt;existed&lt;/a&gt; since the 80s in the realm of microcomputer development. It would seem more suitable then to focus the scope of the question on archival practices. I am also not looking for &quot;It didn't happen&quot; because the fact is people today continue to fail to archive code for many reasons.&lt;/p&gt;&#xA;" OwnerUserId="4251" LastEditorUserId="4251" LastEditDate="2019-07-02T13:35:03.147" LastActivityDate="2019-07-10T05:13:41.050" Title="Source Code Archival in early Game Developement" Tags="&lt;software-development&gt;&lt;game-consoles&gt;" AnswerCount="5" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="11545" PostTypeId="1" AcceptedAnswerId="11547" CreationDate="2019-07-02T12:01:15.513" Score="54" ViewCount="11368" Body="&lt;p&gt;In 1994 or so, we had an old computer at my primary school.  I remember finding out that it had a &lt;code&gt;park&lt;/code&gt; command.  From reading its documentation, it said that this command should be executed prior to shutdown.  At home I would simply switch off when I saw the DOS prompt and there were no more I/O-indicating lights.  I remember thinking at the time that the computer must have been very old if it had to be parked prior to switching it off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is this &lt;code&gt;park&lt;/code&gt; command?  Is it likely that, in 1994, we would have had a school computer that really had to be &quot;parked&quot;?  What for?&lt;/p&gt;&#xA;" OwnerUserId="14058" LastEditorUserId="79" LastEditDate="2019-07-05T16:22:14.487" LastActivityDate="2020-06-30T15:47:36.810" Title="On DOS computers, what would the PARK command do?" Tags="&lt;ibm-pc&gt;&lt;hard-disk&gt;&lt;terminology&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11546" PostTypeId="2" ParentId="11545" CreationDate="2019-07-02T12:06:09.670" Score="10" Body="&lt;p&gt;This command is supposed to place HDD heads on &quot;park&quot; position.&lt;/p&gt;&#xA;" OwnerUserId="7673" LastEditorUserId="7067" LastEditDate="2019-07-02T12:15:50.680" LastActivityDate="2019-07-02T12:15:50.680" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11547" PostTypeId="2" ParentId="11545" CreationDate="2019-07-02T12:52:15.117" Score="96" Body="&lt;p&gt;Hard drives have read/write heads which fly above the spinning disks when the drive is powered. When power is removed, the heads no longer fly... For a long time now, the arms which hold the heads have been designed to “auto-park” the heads away from the disks’ surface, or over a safe “&lt;a href=&quot;https://en.wikipedia.org/wiki/Hard_disk_drive_failure#Landing_zones&quot; rel=&quot;nofollow noreferrer&quot;&gt;landing zone&lt;/a&gt;”, when they lose power¹, but early (up to the mid 80s) hard drives didn’t have this feature, so their heads would land on the disk surface, which could sometimes damage the surface.&lt;/p&gt;&#xA;&lt;p&gt;So early PCs had a &lt;code&gt;PARK&lt;/code&gt; command which would park the heads away from the disk surface. Typically, this would attempt to move the heads past the last “official” cylinder (over an “engineering cylinder” on MFM and RLL drives), or, starting with ATs, use the landing zone specified in &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/it/96/31.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the BIOS drive parameter table&lt;/a&gt; (accessed using the vectors stored at interrupts &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/54/61.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;0x41&lt;/a&gt; and &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/03/62.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;0x46&lt;/a&gt;). You can see one such implementation &lt;a href=&quot;https://www.sac.sk/download/utildisk/park13.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;in Roedy Green’s &lt;code&gt;PARK&lt;/code&gt;&lt;/a&gt; which comes with source code, or in &lt;a href=&quot;https://www.youtube.com/watch?v=o5e10zn5FfM&amp;amp;t=2543s&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jim Leonard’s disassembly of SpinRite’s &lt;code&gt;PARK&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;On PCs with auto-parking heads, it was safe to wait for the DOS command prompt, and the lights to switch off: &lt;code&gt;COMMAND.COM&lt;/code&gt; ensures that I/O is finished before it displays the command prompt (and in-memory disk caches are supposed to honour that too).&lt;/p&gt;&#xA;&lt;p&gt;(In fact, this feature is what allows Roedy Green’s &lt;code&gt;PARK&lt;/code&gt; to work too: you’d wait for the command prompt, so there’s no outstanding I/O, then run &lt;code&gt;PARK&lt;/code&gt;, which would be loaded from disk, then run with no I/O apart from parking the heads, then either loop forever or return to the command prompt which would normally not result in any I/O either, so the heads would remain safely parked. SpinRite’s &lt;code&gt;PARK&lt;/code&gt; waits for the user to press a key, so the user can power the computer off &lt;em&gt;without&lt;/em&gt; pressing a key and thus ensure there’s no untoward I/O.)&lt;/p&gt;&#xA;&lt;p&gt;New PCs in 1994 wouldn’t need this, but it was common for schools to have very old computers, and an early PC requiring &lt;code&gt;PARK&lt;/code&gt; wouldn’t be unheard of. Old habits die hard too, so it’s possible that the advice to run &lt;code&gt;PARK&lt;/code&gt; was kept alive long after it stopped being relevant, but that would have involved copying the &lt;code&gt;PARK&lt;/code&gt; command since it was system-specific and not part of DOS.&lt;/p&gt;&#xA;&lt;p&gt;If I remember correctly, IDE drives never needed &lt;code&gt;PARK&lt;/code&gt;, so you’d only find it on PCs equipped with pre-IDE drives (commonly referred to as MFM or RLL drives).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;¹ Or nowadays when they detect a sudden movement.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-06-30T15:47:36.810" LastActivityDate="2020-06-30T15:47:36.810" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="11548" PostTypeId="2" ParentId="11544" CreationDate="2019-07-02T13:46:11.777" Score="11" Body="&lt;p&gt;There is some anecdotal evidence that often there was no real source control or archival system in place, just ad-hoc backups.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, a number of machines from 90s developers have been recovered recently, particularly Amigas. One belonging to Psygnosis and one belonging to Team 17 have surfaced. No evidence of any version control or systematic backups appears on either.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4921" LastEditDate="2019-07-02T16:06:53.293" LastActivityDate="2019-07-02T16:06:53.293" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11549" PostTypeId="2" ParentId="11544" CreationDate="2019-07-02T17:51:01.447" Score="2" Body="&lt;p&gt;Developing in the 1980s, we stored the work in progress on a floppy disk, and made a backup copy of it. No more than that. Source control was for corporations, and for people with hard disks.&lt;/p&gt;&#xA;" OwnerUserId="11867" LastActivityDate="2019-07-02T17:51:01.447" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11550" PostTypeId="1" CreationDate="2019-07-02T19:16:52.477" Score="9" ViewCount="544" Body="&lt;p&gt;What was the first computer to have interactive text on a CRT ?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;That the text on screen responded to key-presses without significant delay . &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I remember seeing some very early radar-installation CRT's that seemed to display numbers or text, however, I don't know if this equipment was computers (by definition), although they may have been .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The earliest I have found is the following -&#xA;&lt;a href=&quot;https://history-computer.com/ModernComputer/Electronic/PDP-1.html&quot; rel=&quot;noreferrer&quot;&gt;Early PDP-1&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11744" LastEditorUserId="6659" LastEditDate="2019-07-02T21:58:20.910" LastActivityDate="2019-08-05T10:57:53.977" Title="First computer to have interactive text on a CRT?" Tags="&lt;hardware&gt;&lt;display&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11551" PostTypeId="2" ParentId="11550" CreationDate="2019-07-02T19:55:51.663" Score="13" Body="&lt;p&gt;Prior to DEC's &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-1&lt;/a&gt;, of 1959, there would be MIT's &lt;a href=&quot;https://en.wikipedia.org/wiki/TX-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;TX-2&lt;/a&gt; of 1958 - after all, the PDP-1 (and DEC itself), was a spin off of this project (and team). That said, it was only a single machine and a research project, not anything commercial available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before that, there was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Semi-Automatic_Ground_Environment&quot; rel=&quot;nofollow noreferrer&quot;&gt;SAGE system&lt;/a&gt;, operational in 1958, which was used for RADAR surveillance. Images from this system are maybe what you had in mind. The displays were completely synthetic (computer-generated) on hardware made by IBM based on the 740/780 linage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus I'd say, an &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_740&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 740&lt;/a&gt; system, and here especially the &lt;strong&gt;IBM 780 CRT Display&lt;/strong&gt;, qualifies as first. Likewise in display capabilities, as well as being commercial available since 1954. Connected to a &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_701&quot; rel=&quot;nofollow noreferrer&quot;&gt;701&lt;/a&gt; (or similar machine), interactive computer displays could be generated.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;That is, of course, not counting the &lt;a href=&quot;https://en.wikipedia.org/wiki/Williams_tube&quot; rel=&quot;nofollow noreferrer&quot;&gt;Williams Tube&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_701#Memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;used by the 701 itself&lt;/a&gt; - and before that with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Baby&quot; rel=&quot;nofollow noreferrer&quot;&gt;Manchester Baby&lt;/a&gt;, in 1948 (and &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Mark_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mark 1&lt;/a&gt; in 1949). Both, without a doubt, could be used to display patterns including characters. And for sure it was a direct reaction :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... I guess that's as far as the 'first' stuff can go in this context :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-08-05T10:57:53.977" LastActivityDate="2019-08-05T10:57:53.977" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11552" PostTypeId="2" ParentId="11544" CreationDate="2019-07-02T20:29:30.137" Score="4" Body="&lt;p&gt;The recent release of the stack of Infocom source code is more the norm than not. Simply, backups of source code stored someplace rather than a formal source code version system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Part of the issue was that teams were very small. A great boon of VCS (version control systems) is the share of code among team members. The larger the team, the more the necessity of such a system. But many games were very small teams, and even then, most of the coding was done by one or two people with the rest being part of content development (stories, sounds, graphic art, etc.). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Operationally, they would just be thrown over the wall for the developers to integrate in to their latest builds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't start using version control professionally until the mid-90s, even though I was a one-man team working on the software. I used to simply to get rid of the &quot;progv1 progv2 progv3&quot; directories that were showing up organically in the system. This was especially frustrating when we have 3 versions of the program, but discover that only the second version was being used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time I used raw &lt;a href=&quot;https://en.wikipedia.org/wiki/Revision_Control_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;RCS&lt;/a&gt;. Instead of something more sophisticated like CVS. I've never used SCCS. We were developing on HP-UX at the time, and I downloaded the RCS code and built it. I don't think HP-UX came with RCS or SCCS. If it came with SCCS, I probably would have just leveraged that. I wrote my own scripts to make RCS usable for me, since it really only worked with individual files.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2019-07-02T20:29:30.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11553" PostTypeId="1" AcceptedAnswerId="11554" CreationDate="2019-07-02T21:54:53.860" Score="14" ViewCount="2006" Body="&lt;p&gt;I've never used NetWare 5.x 6.x but if I remember correctly versions 3 and 4 required you to boot to DOS partition and then load NetWare server files from it. I could never understand the logic behind it. Why wouldn't NetWare just boot into its own partition and load the necessary server files from it? &lt;/p&gt;&#xA;" OwnerUserId="14073" LastEditorUserId="6794" LastEditDate="2019-07-04T20:34:17.903" LastActivityDate="2019-07-15T20:12:03.463" Title="Why has Novell never written its own boot loader?" Tags="&lt;operating-system&gt;&lt;network&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11554" PostTypeId="2" ParentId="11553" CreationDate="2019-07-02T23:04:14.353" Score="23" Body="&lt;p&gt;In order to load files from the SYS volume NetWare needs to have a device driver for the kind of disk your SYS volume lives on.  Considering that you might put your SYS volume on an MFM drive, or RLL, or ESDI, or SCSI, or IDE, or any of a variety of different RAID controllers, we are talking about a lot of different devices your bootloader needs to be able to handle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being able to load the device driver from a DOS partition simplified things quite a bit.  While none of the NetWare servers in my care were ever configured to do so, I suppose you could theoretically boot from a floppy containing server.exe and your disk device driver so that 100% of your hard disk capacity could be dedicated to NetWare volumes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of the driver issue, NetWare supported large volume sizes (larger than your system BIOS might support).  Booting from DOS avoided the need to be careful to place your SYS volume within the first 504 MB of the first physical drive (or whatever your particular BIOS limitations were).  Instead you just had to create a small DOS partition somewhere your BIOS could boot from, and you were then free to put your SYS volume anywhere else you liked, and make it any size you like, even placing it somewhere your BIOS didn't support booting from.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2019-07-03T00:48:01.810" LastActivityDate="2019-07-03T00:48:01.810" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11555" PostTypeId="1" CreationDate="2019-07-03T07:14:53.880" Score="2" ViewCount="145" Body="&lt;p&gt;I am having some difficulty getting a board that has a Dallas Real Time Clock DS12C887+ to behave. Not sure if the problem is the RTC or not but am in the investigative stage and got the cross hairs focussed on it right now. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DS12C887+ has an onboard (and inaccesible) battery that is molded in. My suspicion is/was that the battery in it is flat. I have filed two slots in the side of the RTC and exposed the battery terminals. I get 2.92V from the RTC (using a Fluke 87 III which i think is fairly accurate). Would this be sufficient voltage to reliably operate the RTC or is it a bit too low. I can piggyback a Li-Ion battery (CR2030 or equivalent 3V which actually reads 3.2v) onto the RTC by gluing a button battery holder in place and soldering a couple of pigtails to the terminals i have exposed and then cutting the existing battery out of circuit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The manufacturers datasheet for the RTC can be found by searching &quot;DS12885-DS12C887A.pdf&quot;. Does anyone know if 2.9V is enough to keep the RTC running reliably?&lt;/p&gt;&#xA;" OwnerUserId="14079" LastEditorUserId="6659" LastEditDate="2019-07-03T08:15:54.077" LastActivityDate="2019-07-03T08:15:54.077" Title="What's the required battery voltage within a DALLAS DS12C887+ RTC?" Tags="&lt;hardware&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2019-07-04T11:13:03.730" ContentLicense="CC BY-SA 4.0" />
  <row Id="11556" PostTypeId="2" ParentId="11555" CreationDate="2019-07-03T07:43:21.420" Score="4" Body="&lt;p&gt;2.9V seams like more than enough to keep it running. If you look into the data sheet you'll notice that a switch over to battery only happens below 3V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there's a simple solution: &lt;strong&gt;Buy a new one.&lt;/strong&gt; They are about 5-10 EUR (~5-15 USD) depending on the shop you order from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DS12C887 real-time clocks is a rather new development (to replace DS1287) thus ready available. No need to file holes and tinker with the innards - unless your interest is the structure of this modern device - but that would be OT here on RC.SE, wouldn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-07-03T07:43:21.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11557" PostTypeId="1" AcceptedAnswerId="16064" CreationDate="2019-07-03T08:32:06.207" Score="35" ViewCount="4344" Body="&lt;p&gt;Before the age of LCDs, PC displays almost always targeted 4:3 CRT displays. And indeed, VGA and most super-VGA modes had 4:3 aspect ratio resulting in square pixels - except the odd 5:4 1280×1024 mode. This mode even caused 17″/19″ LCD monitors to actually be 5:4, before widescreen 16:9 took over.&lt;/p&gt;&#xA;&lt;p&gt;How did this odd resolution become sort-of standard? &lt;em&gt;Edit:&lt;/em&gt; Why didn't they go with a corresponding 4:3 resolution instead, like 1280×960 or 1360×1020 (to fit in 4MB for 24-bit)?&lt;/p&gt;&#xA;&lt;p&gt;To clarify, here are the resolutions as I remember them:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;┌───────────────────┬──────────────────────┬──────────────┐&#xA;│                   │ Resolution           │ aspect ratio │&#xA;├───────────────────┼──────────────────────┼──────────────┤&#xA;│ (pre─VGA madness) │ various              │ various      │&#xA;│ VGA               │ 640×480              │ 4:3          │&#xA;│ Super VGA         │ 800×600              │ 4:3          │&#xA;│ Super VGA         │ 1024×768             │ 4:3          │&#xA;│ Super VGA         │ 1152×864             │ 4:3          │&#xA;│ Super VGA         │ 1280×1024 ◀◀◀◀◀      │ 5:4 ◀◀◀◀◀    │&#xA;│ Super VGA         │ 1600×1200            │ 4:3          │&#xA;│ Widescreen        │ 1920×1080 and others │ 16:9         │&#xA;└───────────────────┴──────────────────────┴──────────────┘&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10358" LastEditorUserId="15334" LastEditDate="2020-09-07T14:31:08.233" LastActivityDate="2020-09-07T14:31:08.233" Title="Why did Super-VGA offer the 5:4 1280×1024 resolution?" Tags="&lt;display&gt;&lt;vga&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11558" PostTypeId="2" ParentId="11557" CreationDate="2019-07-03T08:50:54.243" Score="8" Body="&lt;p&gt;Quoting Wikipedia, it seems to be at least two factors:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The availability of inexpensive LCD monitors has made the 5:4 aspect ratio resolution of 1280 × 1024 more popular for desktop usage during the first decade of the 21st century.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(from &lt;a href=&quot;https://en.wikipedia.org/wiki/Display_resolution#2000s&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 1280 × 1024 resolution became popular because at 24 bit/px color depth it fit well into 4 megabytes of video RAM. At the time, memory was extremely expensive. Using 1280 × 1024 at 24-bit color depth allowed using 3.75 MB of video RAM, fitting nicely with VRAM chip sizes which were available at the time (4 MB): &#xA;  (1280 × 1024) px × 24 bit/px ÷ 8 bit/byte ÷ 2^20 byte/MB = 3.75 MB&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(from &lt;a href=&quot;https://en.wikipedia.org/wiki/Graphics_display_resolution#1280_%C3%97_1024_(SXGA)&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="7067" LastEditorUserId="7067" LastEditDate="2019-07-04T07:35:04.427" LastActivityDate="2019-07-04T07:35:04.427" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11559" PostTypeId="2" ParentId="11557" CreationDate="2019-07-03T08:51:50.143" Score="29" Body="&lt;p&gt;VGA's 640x480 mode was &lt;strong&gt;the first&lt;/strong&gt; to offer square pixels and an exception among all VGA modes available (320x200, 640x200, 640x350 and 720x400 for Text). Square pixels weren't the standard back then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding video modes in later (Super) VGA was kind of a marketing game to offer higher numbers to outpace competition. First it was Colour, like offering 640x480 in 256 colours,later it became as much about higher resolutions.  At the time, there where many other resolutions seen as 'standard' beyond 800x600, like 1024x600, 1152x768 or 1280x800 - the later was quite prominent, as it fits (almost) exactly 1 MiB of RAM in 8 bit mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1280x1024 is again based on nice power of two values (like 1024x768), thus easy to handle and maximizing the use of RAM, as it exactly filled 1.25 MiB in 8 Bit Mode and 2.5 MiB in 16 Bit Mode (*1) Both sizes could be well added as a series of 5 RAM chips to the card. In addition it's worth considering that later single chip VGA designs were usually fully programmable, thus able to offer next to any resolution (within their pixel clock that is).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some years later 1280x1024 got a revival when upcomming (relative) low cost LCD manufacturing process passed the 1024x748 ability for 15&quot;. After all, such LCDs don't react as flexible as CRTs to various pixel per line rates.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Mostly forgotten today, but 16 bit colour was a huge thing - for a few years :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-03T09:20:46.807" LastActivityDate="2019-07-03T09:20:46.807" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="11560" PostTypeId="2" ParentId="8896" CreationDate="2019-07-03T12:44:35.750" Score="1" Body="&lt;p&gt;RS232 is a very simple protocol. In most basic form it just sends character data back and forth and there's very little more over that. Think of VT100 as a keyboard + monitor pair. You can unplug your monitor and keyboard from a running PC after you've logged in, then someone comes and plugs their own in... and they are logged into your account, because the computer really doesn't care what monitor or keyboard is plugged in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With RS232 it's even more simple. If data gets lost or garbled on the way, that's what the other end receives (or fails to receive). If there's nothing listening on the port, the data will go down the drain, there's no check whether the other end received it or not. You can plug the VT100 into RS232 and only then, say, using SSH from a different workstation, set up the listening demon, like getty. Or you can plug it into a computer where getty is already running; the login prompt won't appear - it's awaiting input and it's quite likely even as you start typing your first login will fail as plugging RS232 generates a lot of line noise and may send some junk characters to getty over the TX line before you ever get any feedback on screen returning over the (still not firmly connected) RX line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some extensions to basic RS232 - like hardware control that tells the other side 'Data transmit ready' and 'Clear to send' - preparing buffers for reception, halting sending until the buffers are processed and so on, but even with that if the message gets garbled in transfer, it's received garbled - and VT100 displays what it got if it sufficiently resembled a valid byte of transmission (...and on a noisy line a lot of noise resembles these...) - and similarly the computer sends what came in over RS232 to the processing application if there's any, or down the drain if there's none, and if it makes no sense, so be it, it's an error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With smart terminal apps there's some communication behind the scenes arranging the feature set of the terminal - size in columns and rows, what key is backspace, what sequence is enter, is color supported and so on, but that's way outside the basic connection layer, not often supported and more than often buggy. &lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2019-07-03T12:44:35.750" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11561" PostTypeId="2" ParentId="11533" CreationDate="2019-07-03T13:19:47.383" Score="14" Body="&lt;p&gt;Arguably, this is a common bug in early software based on an event-processing loop rather than a Windows bug: if some &lt;a href=&quot;https://en.wikipedia.org/wiki/Decision-to-decision_path&quot; rel=&quot;noreferrer&quot;&gt;DD-paths&lt;/a&gt; of the loop only process a single event, then every time when two events are generated simultaneously, only one is processed and the other gets stuck. Moving the mouse generates more incoming events and restarts the loop. &quot;Mouse move&quot; events are typically processed by a GUI library, which handles them correctly (that is, processing all such events in the queue), so those events help get the loop going, and then disappear harmlessly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such bugs are easily missed when the testing is done by hand, since the act of testing itself generates enough input events to keep the bug hidden.&lt;/p&gt;&#xA;" OwnerUserId="3736" LastEditorUserId="2037" LastEditDate="2019-07-04T04:38:10.557" LastActivityDate="2019-07-04T04:38:10.557" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11562" PostTypeId="1" CreationDate="2019-07-03T14:51:43.853" Score="7" ViewCount="1691" Body="&lt;p&gt;I am wondering if anyone has a pointer to a good source of &quot;classic&quot; BASIC programs, in text format. One would think this would be easy to find, but unfortunately VB so pollutes the results as to render them useless, and no amount of &lt;code&gt;-VBs&lt;/code&gt; fix that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was able to find &lt;a href=&quot;http://vintage-basic.net/games.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;101 BASIC Games&lt;/a&gt;, which is specific enough, but MORE BASIC Games and What To Do After Hitting Return I can't find. I'm more interested in general code than just games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason: I'm interested in running statistical measures against a large library of code to find the distribution of variable names, constants and so forth in an effort to improve a BASIC parser.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="6794" LastEditDate="2019-07-04T20:34:31.790" LastActivityDate="2019-07-05T11:28:11.903" Title="Library of MS BASIC programs in text format?" Tags="&lt;basic&gt;&lt;software-development&gt;&lt;microsoft-basic&gt;" AnswerCount="4" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11563" PostTypeId="1" CreationDate="2019-07-03T15:01:10.780" Score="28" ViewCount="5612" Body="&lt;p&gt;What was the decision making process that lead to the IEC to create &quot;kibibytes&quot;, &quot;mebibytes&quot; and so forth?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me it seems like kilobytes were well established as 1024 bytes, both by programmers using them and by electronic engineers. Indeed, even now the 1024 byte kilobyte is commonly used when talking about memories of various kinds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;JEDEC had also standardized on the 1024 byte kilobyte, and it remains in widespread use by billions of JEDEC standards compliant devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm interested in the arguments used and the decision making process that lead the IEC to decide that kilobytes would be redefined as 1000 bytes, and the creation of the rather awkward &quot;kibibytes&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I'm asking if there is any information on why they chose to make kilobyte = 1000, rather than keeping with the JEDEC standard and the common parlance of the time and making kibibyte = 1000. Not the merits of either choice, but details of how the IEC came to make the one they did.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2019-07-04T09:07:55.700" LastActivityDate="2020-04-09T12:03:23.187" Title="How did the IEC decide to create kibibytes?" Tags="&lt;history&gt;" AnswerCount="6" CommentCount="25" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11564" PostTypeId="2" ParentId="11563" CreationDate="2019-07-03T16:05:40.653" Score="39" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;To me it seems like kilobytes were well established as 1024 bytes, both by programmers using them and by electronic engineers&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They are not the only people though. The term got confusing mostly because of disk manufacturers who preferred base 10 because your disk capacity was a larger number. Perhaps the most egregious nonsense comes from the high density floppy disk which is described as having 1.44 Megabytes where a Megabyte is defined as 1000 kilobytes and a kilobyte is defined as 1024 bytes. i.e. 1.44 &amp;times; 1000 &amp;times; 1024 which is plainly ridiculous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also &quot;kilo&quot;, &quot;tera&quot; and &quot;mega&quot; are standard SI terms meaning various powers of 1,000 (in base 10). It should, therefore, be a good idea to have different names for the base 2 versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disclaimer: I personally ignore the base 2 names and abbreviations because they are stupid.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="3748" LastEditDate="2019-07-04T11:11:04.367" LastActivityDate="2019-07-04T11:11:04.367" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="11565" PostTypeId="2" ParentId="11533" CreationDate="2019-07-03T16:51:15.690" Score="25" Body="&lt;p&gt;The reason is because of how &lt;code&gt;WM_TIMER&lt;/code&gt; is limited to 15.6ms intervals by default. If you call &lt;code&gt;SetTimer()&lt;/code&gt; with a 1ms interval it will still be called in 15.6ms intervals. &lt;code&gt;WM_TIMER&lt;/code&gt; drives a lot of stuff in Win32 applications like network packet processing and such. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving the mouse causes &lt;code&gt;WM_TIMER&lt;/code&gt; events to fire more often on Win95. So some applications will seem to run faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 15.6ms value was set for various reasons: Not clogging up the event queue so that stuff like &lt;code&gt;WM_PAINT&lt;/code&gt; would still dispatch often enough and more recently and importantly to save power. There are tons of articles talking about this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/&quot; rel=&quot;noreferrer&quot;&gt;https://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14213" LastEditorUserId="115" LastEditDate="2019-07-04T04:40:44.800" LastActivityDate="2019-07-04T04:40:44.800" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11566" PostTypeId="2" ParentId="11563" CreationDate="2019-07-03T18:30:13.483" Score="13" Body="&lt;p&gt;While JEDEC memory standards were using 1024 Byte Kilobytes at the time, many magnetic storage devices were using 1000 Byte Kilobyte size for several reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To explain where the 1024 Byte value comes from, it is a nice convenient 2^10 value.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this use of power of twos only applied to RAM and ROM.  Magnetic media did not use power of two dimensions, and thus when marketing saw that they had to chose between two numbers, the irrelevant 1024 based standard of memory or 1000 based traditional metric standard.  They chose the traditional metric standard, since neither produced a nice round number and the 1000 based number created a large number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This of course caused untold issues, and neither side was really wrong.   Disk drives were not JEDEC memory devices.  IEC, thus decided to settle the matter on disk drives by having two different units for magnetic data storage. Kibibytes and KiloBytes. &lt;/p&gt;&#xA;" OwnerUserId="14246" LastEditorUserId="4301" LastEditDate="2019-07-04T16:29:12.523" LastActivityDate="2019-07-04T16:29:12.523" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11567" PostTypeId="2" ParentId="11553" CreationDate="2019-07-03T18:34:45.167" Score="9" Body="&lt;p&gt;From &lt;a href=&quot;https://www.networkworld.com/article/2312605/netware-s-urban-myths.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Network World&lt;/a&gt;: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;NetWare never ran on top of DOS. A server was booted to DOS solely to&#xA;  run the NetWare boot loader (a DOS program). It didn't need to do&#xA;  that, it could have booted directly but that would have required&#xA;  Novell to build its own BIOS loader to initialize all of the hardware.&#xA;  The NetWare designers felt that there was no need to reinvent the&#xA;  wheel, so let DOS handle that.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Novell was not the only operating system vendor to use MS-DOS as a boot loader: Microsoft did much the same for 16- and 32-bit Windows, especially from Windows 95 onwards where returning to DOS was not a standard feature.  (Windows NT and its successors did not use DOS as a loader.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.usenix.net/legacy/publications/library/proceedings/sf94/full_papers/minshall.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;This paper&lt;/a&gt; from Drew Major et al. doesn't explain why they used DOS for booting but does offer insight into Novell's design philosophy:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The NetWare operating system is designed specifically to provide&#xA;  service to clients over a computer network.  This design has resulted&#xA;  in a system that differs in several respects from more general-purpose&#xA;  operating systems.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I would imagine booting from DOS to be one of those differences that places convenience and simplicity over traditional OS goals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're interested in learning more of the design of NetWare, this paper is a good place to start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, Novell did eventually write &lt;a href=&quot;https://support.novell.com/docs/Tids/Solutions/10092263.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;their own boot loader&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="4222" LastEditDate="2019-07-15T20:12:03.463" LastActivityDate="2019-07-15T20:12:03.463" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11568" PostTypeId="2" ParentId="11563" CreationDate="2019-07-03T21:02:30.867" Score="62" Body="&lt;p&gt;TL;DR;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm asking if there is any information on why they chose to make kilobyte = 1000,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because kilo means 1000. It simply doesn't stand for 1024. The same way 13 inches aren't a foot.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So I'm interested in the arguments used and the decision making process that lead the IEC to decide that kilobytes would be redefined as 1000 bytes,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There was no redefinition, as 'kilobytes' isn't a unit of its own. It's 'kilo' as prefix with the fixed definition of 1000 and 'byte' as, well, a byte. So kilobyte always meant 1000 bytes.&lt;/p&gt;&#xA;&lt;p&gt;These prefixes are part of the &lt;a href=&quot;https://en.wikipedia.org/wiki/International_System_of_Units#Prefixes&quot; rel=&quot;noreferrer&quot;&gt;International System of Units&lt;/a&gt; (SI) — though, they had already been used before, since introduced with the metric system in 1795. Within SI there are no different units for the same thing (like inch, feet, yard, furlongs, chains and miles for length) but always only one (meter for length, ampere for current, and so on). To use them in different circumstances they are prefixed according to powers of 10. A very convenient system.&lt;/p&gt;&#xA;&lt;p&gt;And it was  sloppy engineers who used this convenience to describe certain binary values with somewhat close values — as 2^10 is 1024 and thus close to 1000. These were never official units in any way, just a kludge to get along. Standard documents always used power of 10 pefixes — which leads, by the way, to the effect of serial transmissions always being decimal - a 9.6 kbit line transfers 9600 bits per second, not 9830 :)&lt;/p&gt;&#xA;&lt;p&gt;When computers came out of the closet in the 1980s, people stated to recognize that these 'kilobytes' aren't really a kilo of bytes but different, so it was common to capitalize the K, as the SI prefix uses a lower case k. Nice idea - as long as memories stayed in the range of a few dozen to a few hundred KB - but when 1024 KB were reached, it broke, as the SI prefix M is already uppercase.&lt;/p&gt;&#xA;&lt;p&gt;In the late 1980s/early 1990s it became obvious that there is a need for a clear meaning, so an international standard was proposed - and accepted in the late 1990s.&lt;/p&gt;&#xA;&lt;p&gt;It's now more than 20 years later ... heck, not even the English complained that long about the loss of their non-decimal currency.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and the creation of the rather awkward &amp;quot;kibibytes&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The binary prefixes are anything but awkward. They offer an easy, convenient and well-defined way to operate with (almost) the same prefixes as for any other unit, but now making it binary, which does make a lot of sense for computing, doesn't it?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Postfix:&lt;/h2&gt;&#xA;&lt;p&gt;It may be useful to add a bit of common sense before going into rather pointless nagging about how it sounds or how much we're used to the imprecise way it always has been. The main point about these binary prefixes is in writing, not speaking. When talking there is context. Continuing to say 'kilobytes' when KiB are meant should be fine. After all using it is much like asking for a pound of meat at a butcher in a metric country - they simply will give you 500g :))&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Just write the prefix always uppercase and add a lowercase 'i' for binary and there's no more confusion.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-09T12:03:23.187" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11569" PostTypeId="2" ParentId="11533" CreationDate="2019-07-04T00:51:16.483" Score="20" Body="&lt;p&gt;Raymond Chen from Microsoft has a great answer &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/?p=36423&quot; rel=&quot;noreferrer&quot;&gt;on his blog&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One danger of the &lt;code&gt;MsgWaitForMultipleObjects&lt;/code&gt; function&#xA;  is calling it when there are already messages waiting&#xA;  to be processed, because &lt;code&gt;MsgWaitForMultipleObjects&lt;/code&gt;&#xA;  returns only when there is a new event in the queue.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;His blog is a great read!&lt;/p&gt;&#xA;" OwnerUserId="174" LastEditorUserId="115" LastEditDate="2019-07-04T04:40:30.863" LastActivityDate="2019-07-04T04:40:30.863" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11570" PostTypeId="2" ParentId="10989" CreationDate="2019-07-04T06:11:08.070" Score="4" Body="&lt;p&gt;As it happens, I have my own archived copy of the STe Discovery Xtra Language disk here. Here's ROSE.NEO:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OOI0x.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OOI0x.png&quot; alt=&quot;ROSE.NEO&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've screencapped all of the Neochrome images I have on this disk and put them on Imgur:&#xA;&lt;a href=&quot;https://imgur.com/gallery/bjs5OTC&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://imgur.com/gallery/bjs5OTC&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's perhaps the full original set from that disk; I guess I was careful with preservation even when I was a teenager. No bear on there, though!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want the full set of what I have, try:&#xA;&lt;a href=&quot;https://sdstrowes.co.uk/misc/atari/discovery-xtra-neochrome/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sdstrowes.co.uk/misc/atari/discovery-xtra-neochrome/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that at least the waterfall was &quot;animated&quot; thanks to some neat colour cycling. NEOSHOW.PRG shows off the animation. Probably this is one of those things where this is technically still copyrighted by somebody.  Happy to take these down if somebody sends me a nastygram.&lt;/p&gt;&#xA;" OwnerUserId="14357" LastEditorUserId="14357" LastEditDate="2019-07-04T06:20:03.783" LastActivityDate="2019-07-04T06:20:03.783" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11571" PostTypeId="2" ParentId="11557" CreationDate="2019-07-04T08:51:47.310" Score="12" Body="&lt;p&gt;1280x1024@24-bit fits in 4 MiB. Why wouldn't you take extra screen space?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that &lt;em&gt;games&lt;/em&gt; didn't usually run in 1280x1024 at the time. Back before LCDs became the dominating screen technology, you didn't care about the &quot;native resolution&quot; of the display - you didn't get the ugly &quot;one pixel is stretched over two physical pixels, its neighbour only has one physical pixel&quot;. Even modern LCDs tend to look awful at their non-native resolutions (not helped by the use of sub-pixel rendering of fonts etc.), but the same thing wasn't true with CRTs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you had your workstation running 1280x1024, giving you the most of your 4 MiB graphics card. And when you wanted to play a game, it switched the resolution to something like 800x600 or 1024x768. The image was just as clear in both cases, you didn't get any weird aliasing or sizing artifacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This changed when LCDs came around; native resolution is a big deal on LCDs. Running a 800x600 game on an 1280x1024 LCD (of the time, though many quality issues remain to this day) will result in many artifacts. But here's the thing - &lt;em&gt;LCDs weren't for games&lt;/em&gt;. No gamer would ever voluntarily use an LCD - they were designed for office use (and of course, portable computers - but that's a whole another can of worms). They had poor colours, poor response times, bad aliasing issues and couldn't adapt to other resolutions well. It made perfect sense to give the most screen space possible, which with the (then rather standard) 4 MiB graphics cards was 1280x1024@24-bit (while also giving nice fallback to 16-bit and 8-bit for smaller VRAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It took many years for LCDs to become mainstream even among gamers (mostly because of their convenience - size, weight, cost etc.). By then, 1280x1024 was already the standard, and most importantly, games became largely aspect ratio agnostic anyway. The next big jump had to wait for people watching movies on their computers, which helped the move to 16:9 and 16:10 (for that handy extra bit of vertical space).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, there are other possible options that have pretty much the same benefits (or take other trade-offs). In the end, it's just that one of those dominated the others. Following the leader is often a good idea, since it makes it easier to reach a bigger portion of the market.&lt;/p&gt;&#xA;" OwnerUserId="542" LastActivityDate="2019-07-04T08:51:47.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11572" PostTypeId="2" ParentId="11533" CreationDate="2019-07-04T09:16:35.647" Score="3" Body="&lt;p&gt;Quick answer, by moving the cursor you were telling windows that you are the most important event running.  When you stop interacting windows gives priority to other events.  So installing programs even when in foreground would give priority to less important events. This bug is no longer present in current Windows versions. &lt;/p&gt;&#xA;" OwnerUserId="14391" LastActivityDate="2019-07-04T09:16:35.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11573" PostTypeId="1" CreationDate="2019-07-04T10:11:17.300" Score="8" ViewCount="802" Body="&lt;p&gt;Acorn's BBC Micro series is well known for the range of add-on processors (or Second Processors) that could be connected through it's &lt;a href=&quot;https://en.wikipedia.org/wiki/Tube_(BBC_Micro)&quot; rel=&quot;noreferrer&quot;&gt;Tube&lt;/a&gt; interface. These included the 6502, Z80, 80186, and also the ARM Second Processor, effectively a development kit for the processor in Acorn's forthcoming Archimedes machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Archimedes' successor, the RISC PC, was designed to support &lt;a href=&quot;https://www.4corn.co.uk/rpca7000.php&quot; rel=&quot;noreferrer&quot;&gt;guest processors&lt;/a&gt; inside the main unit. Commerically available options included an x86-based PC card (to run PC-compatible software), and a second ARM processor for use with a multiprocessor operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Archimedes itself, however, saw very little in the way of add-on processors. The &lt;a href=&quot;https://en.wikichip.org/wiki/acorn/microarchitectures/arm2#New_instructions&quot; rel=&quot;noreferrer&quot;&gt;ARM2&lt;/a&gt; processor was designed with a co-processor interface, and the podule expansion bus reserved a set of pins for use by a co-processor podule. The &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/Acorn/Manuals/Acorn_TechnicalPublishingSystemTRMPt2.pdf&quot; rel=&quot;noreferrer&quot;&gt;original podule specification&lt;/a&gt; notes that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Coprocessor Podules share the same interface as other Podules, but they are&#xA;  not mapped into the I/O space as are other Podules.  In addition to the&#xA;  normal Podule signals, coprocessors require access to the main system data&#xA;  bus, and extra control signals. These are provided by a special Coprocessor&#xA;  Podule connector, which has 96 pins. When a coprocessor is not required,&#xA;  this connector may be used as a normal Podule slot. Note that in this&#xA;  context the term `coprocessor' refers to a dedicated hardware processor, and&#xA;  not an additional general purpose microprocessor system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I interpret this last sentence to mean they only supported floating-point coprocessors, similar to the x87 chips in PC-compatible systems. The only co-processor podule I'm aware of is Acorn's own (AKA20) &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/32bit_UpgradesA2G/Acorn_AKA20_WE32206FPCoPro.html&quot; rel=&quot;noreferrer&quot;&gt;We32206 co-processor&lt;/a&gt;. Later Archimedes machines (in particular the A series) had fewer podule slots, and the addition of a co-processor would require the use of a &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/32bit_UpgradesH2Z/Simtec_ARM3FPA.html&quot; rel=&quot;noreferrer&quot;&gt;custom expansion board&lt;/a&gt; in the CPU's socket. Both of these are floating-point co-processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that Acorn designed both the ARM processor and the Archimedes platform, &lt;strong&gt;what reasons would Acorn have to remove the support for general-purpose co-processors in their Archimedes systems&lt;/strong&gt;, given that its predecessors and successors &lt;em&gt;did&lt;/em&gt; support them?&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-07-10T06:58:42.530" Title="Why didn't the Acorn Archimedes support general purpose co-processors?" Tags="&lt;acorn&gt;&lt;arm&gt;&lt;archimedes&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11576" PostTypeId="2" ParentId="11563" CreationDate="2019-07-04T15:24:19.427" Score="-1" Body="&lt;p&gt;The source here is a confusion of standards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SI is the Système International. It governs physical quantities like Kilo's and meters. In this system, the quantity &lt;em&gt;information&lt;/em&gt; is measured in &lt;em&gt;Joules per Kelvin&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In computing, information is measured in bits. &lt;em&gt;Joules Per Kelvin&lt;/em&gt; is just too inconvenient. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's no confusion when using SI prefixes with SI units. A Megajoule per Kelvin is 1.000.000 Joules/Kelvin. But this is a whole lot - a modern harddisk might contain barely one nanoJoule/Kelvin (0.0000000001J/K)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going back to bits, &quot;SI-insipired prefixes&quot; are used. But a kilobit is 1024 bits, and it's been that way since the introduction of the Intel 1103 : the first RAM chip in the world, with a 1 kbit (1024 bit) capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real confusion started when harddisk makers found out that they could sell bigger numbers by intentionally mixing the SI Giga- prefix with the non-SI unit &quot;byte&quot; (8 bits). This was fraudulent, and multiple class action lawsuits were settled with refunds for the buyers (around 2007).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IEC unfortunately came up with yet a new system, using non-SI units with both SI prefixes in their SI meaning and an entirely new set of prefixes (kibi etc). But in a sense this is no surprise; &lt;a href=&quot;https://xkcd.com/927/&quot; rel=&quot;nofollow noreferrer&quot;&gt;that's what engineers do when there are conflicting standards&lt;/a&gt;. (&lt;a href=&quot;https://xkcd.com/394/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bonus&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="10933" LastActivityDate="2019-07-04T15:24:19.427" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11577" PostTypeId="2" ParentId="11563" CreationDate="2019-07-04T16:00:25.977" Score="15" Body="&lt;p&gt;I agree that we should never have redefined kilobyte, megabyte, etc. But the definition is older than the use in computers. Which wasn't much of a problem when the difference between the two unit prefixes is fairly small, but with higher numbers the differences become significant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) A kilometer is 1000 meters. A kilowatt is 1000 watts. a kilogram is 1000 grams. It makes absolutely no sense to make a kilobyte 1024 bytes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) The difference between a kilobyte and a kibibyte is 2.4%. That's not nothing but really no huge problem. The difference between a megabyte and a mebibyte is 4.8%. The difference between a terabyte and a tebibyte is 9.95%. You're slowly getting to significant differences there. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Just because we made mistakes in naming things several decades (half a century) ago, doesn't mean we can never change things. In fact changing things sooner would have been better.&lt;/p&gt;&#xA;" OwnerUserId="11272" LastActivityDate="2019-07-04T16:00:25.977" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11578" PostTypeId="2" ParentId="11562" CreationDate="2019-07-04T16:45:33.553" Score="2" Body="&lt;p&gt;There are a lot of vintage computer books (and magazines with type-in BASIC listings) for a variety of versions of BASIC on Archive.org which are available in a variety of formats including text. Search for BASIC books for any computers which had Microsoft BASIC in ROM. Here is the link to the &lt;a href=&quot;https://archive.org/stream/More_BASIC_Computer_Games_1980_Creative_Computing/More_BASIC_Computer_Games_1980_Creative_Computing_djvu.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;text version of David Ahl's &quot;More BASIC Computer Games&quot; on Archive.org&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a non-gaming one: &lt;a href=&quot;https://archive.org/stream/25-graphics-programs-in-microsoft-basic-1983tab-bookspdf/25graphicsprogramsinmicrosoftbasic1983tabbookspdf_djvu.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;25 Graphics Programs in Microsoft BASIC&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately they don't seem to have &quot;What To Do After Hitting Return&quot;.&lt;/p&gt;&#xA;" OwnerUserId="637" LastEditorUserId="637" LastEditDate="2019-07-04T16:51:27.357" LastActivityDate="2019-07-04T16:51:27.357" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11579" PostTypeId="2" ParentId="11562" CreationDate="2019-07-04T18:11:44.190" Score="5" Body="&lt;p&gt;Rosetta code has a category dedicated to programs written in Basic: &lt;a href=&quot;http://rosettacode.org/wiki/Category:BASIC&quot; rel=&quot;noreferrer&quot;&gt;http://rosettacode.org/wiki/Category:BASIC&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7044" LastActivityDate="2019-07-04T18:11:44.190" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11580" PostTypeId="2" ParentId="11544" CreationDate="2019-07-04T18:39:14.833" Score="2" Body="&lt;p&gt;One method used for backing up data in the early days of home computers is the &lt;strong&gt;Grandfather, Father, Son&lt;/strong&gt; technique. This approach is most relevant to data stored on floppy disks, or similar removable media.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Acorn Computers advocated it for use with their System (and later BBC Micro) computers, initially referring to it as an &lt;strong&gt;Ancestral File System&lt;/strong&gt; (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/Acorn/Manuals/Acorn_DiscSystemUGI2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;BBC Disk Filing System User Guide&lt;/a&gt; (*2), they describe it as follows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Another way of protecting important information is to keep several copies of it&#xA;  on different discs. Where computers are used in business, industry or other&#xA;  activities which use large volumes of information, a standard routine for this&#xA;  has been evolved. It is often called the `grandfather, father, son' principle of&#xA;  copying information, and is good practice for anyone using a disc storage&#xA;  system. It works as follows:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Day 1, MASTER copied to GRANDFATHER&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Day 2, MASTER copied to FATHER&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Day 3, MASTER copied to SON&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;As you can see, it involves keeping three separate discs, each with a copy of&#xA;  the information from the master disc on it. On day 4 the master would be&#xA;  copied to the grandfather again and so the cycle continues. In business, where&#xA;  information on disc changes from day to day, this regular&#xA;  routine is important. For personal computing it may not be so vital, but you&#xA;  will want to keep several copies of important programs and information&#xA;  which you have worked hard to produce.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This approach would keep up to three days worth of changes (assuming no media failures), at which point the oldest backup would be overwritten. One could keep more previous versions by adding more disks into the cycle, but at a cost of $5-$8 each (at 1978 prices (*3)) the appeal would be limited.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;See the &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/Acorn/Manuals/Acorn_System5Handbook.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;System 5 Handbook&lt;/a&gt;, section 2.10.5&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;First published July 1983&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As quoted in the &lt;a href=&quot;https://www.nytimes.com/1978/12/10/archives/the-floppy-disk-comes-of-age-competing-with-paper.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;New York Times&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-07-07T05:37:08.463" LastActivityDate="2019-07-07T05:37:08.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11582" PostTypeId="2" ParentId="11413" CreationDate="2019-07-05T01:25:46.713" Score="0" Body="&lt;p&gt;In general, the advice from tofro is the correct advice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you do have a broken PSU &lt;em&gt;or&lt;/em&gt; you're inclined to tinker with a PSU -- which requires some care because it's &lt;em&gt;a thing drawing power from the mains&lt;/em&gt; -- there's a goldmine of information for various ST PSUs here: &lt;a href=&quot;http://www.exxoshost.co.uk/atari/last/psu/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.exxoshost.co.uk/atari/last/psu/index.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Exxos also sells capacitor kits for the most common PSU types. I actually did do this replacement on an old and slightly busted machine. I'm not the most seasoned when it comes to soldering, so I got to feel that adrenaline burst on first power-up. Works a charm now, though.&lt;/p&gt;&#xA;" OwnerUserId="14357" LastActivityDate="2019-07-05T01:25:46.713" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11583" PostTypeId="2" ParentId="11562" CreationDate="2019-07-05T10:38:10.677" Score="2" Body="&lt;p&gt;Using &quot;&lt;strong&gt;qbasic source archive&lt;/strong&gt;&quot; as a search turns up some potentially-useful links, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://annex.retroarchive.org/cdrom/smsw-vol5/QBAS/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;48 files found in Library &quot;Basic/QBasic Programming&quot;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also includes files to do with PowerBasic. From a brief scan, the files seem to be more utility orientated (i.e. extending Quick/Power-basic) than pure source examples.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://annex.retroarchive.org/cdrom/nightowl-004/007A/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;134 files found in Library &quot;Basic And Qbasic&quot;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Appears to be more focused on source code, including some GW-BASIC examples.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.petesqbsite.com/sections/links/links-Q.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Pete's QBASIC/QuickBasic Site&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;links&quot; section of a site seemingly devoted to Quick Basic, listing other sites that have (or had... I've not followed any of those links) things to do with Quick Basic, including one that is/was &quot;_ An absolutely MASSIVE QBasic archive run by a chap from Greece_&quot;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Doing the same for &quot;&lt;strong&gt;gwbasic source arcihve&lt;/strong&gt;&quot; produces some other promising results, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.garypeek.com/basic/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Gary Peek's BASIC Source Code Archive&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which, according to its front-page blurb is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This section is dedicated to BASIC for the IBM PC and all the people who have written programs using it and its variations, like IBM BASIC and BASICA, GWBASIC, QBASIC, and the QuickBASIC compiler.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://annex.retroarchive.org/cdrom/nightowl-007/003A/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;68 files found in Library &quot;Basic/Qbasic/Vbasic&quot;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, seems to be a more utility-focused collection, with more Visual Basic, but may be of interest.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.ifarchive.org/indexes/if-archive/games/source/basic/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;if-archive/games/source/basic&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A collection of 35 &lt;em&gt;Interactive Fiction&lt;/em&gt; (aka &quot;Adventure&quot;) games written in various flavours of BASIC from TRS-80, C64 through BASICA, GW-BASIC and QBASIC.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Of more general interest to some on here, all the &quot;&lt;em&gt;xx files found in Library &quot;xxx&quot;&lt;/em&gt;&quot; links above come from the &quot;&lt;em&gt;CD-ROM and FTP Site Archive&lt;/em&gt;&quot; section of &lt;a href=&quot;http://www.retroarchive.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Retrocomputing Archive&lt;/strong&gt;&lt;/a&gt; which seems to contain a whole host of potentially interesting stuff from times gone by.&lt;/p&gt;&#xA;" OwnerUserId="731" LastActivityDate="2019-07-05T10:38:10.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11584" PostTypeId="2" ParentId="11562" CreationDate="2019-07-05T11:28:11.903" Score="1" Body="&lt;p&gt;&lt;em&gt;&lt;strong&gt;(Not an Answer, but rather a way too long comment on the target)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The reason: I'm interested in running statistical measures against a large library of code to find the distribution of variable names, constants and so forth in an effort to improve a BASIC parser.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Using (very) old code to optimize a modern parser might be a less than good input - at least if the parser is meant to be used in actual (modern) programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Old BASICs had many quirks when it came to variable naming:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Most prominent the two letter restriction of most MS BASIC.&lt;/li&gt;&#xA;&lt;li&gt;Others could just a single letter.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Both made programmers use rather cryptic names (*1), something that wouldn't happen with a BASIC capable of handling (more) meaningful names.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Then there were BASICs that requited the use of pseudo-arrays for certain variables - like A() holding all strings.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But beside source level reasons, there where many run time effects that influenced variable use back then, like&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;like reuse of variables for speed&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;reuse is faster than adding a new, as it reduces search time&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;placement of often used variables at program start for speed up&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;forcing their search time down&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Other tricks include putting&#xA; - multiple single values in an array&#xA; - multiple arrays into a single array&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both relay on the fact that array access is (may be) faster in MS BASIC than accessing single variables (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;In addition&lt;/em&gt; to all of this, these lovable early books where even more restricted, as they tried to go along with an even more restricted BASIC standard than MS BASIC is - like using only single letter variable names.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this are methods that where quite popular back then and would never be used today - at least if the BASIC offers such conveniance as long variable names and more generic handling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;If your parser is meant to be used for actual (new) programs, using (very) old programs &lt;em&gt;may&lt;/em&gt; lead to an optimization for cases no longer present.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - More than once resulting in unintended reuse when the same abbreviation was used twice for different meanings - especially nasty when this happened in originally non overlapping sections, but later changes/extensions made them overlapping. A fricking hell to find this in large programs with tools of the time (aka almost none).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Arrays are stored separate from simple variables. When accessing a simple variable the whole list is searched until the variable is found. With arrays the array itself is as well searched in the array list (which usually is shorter) followed by an indexed access to the variable itself, speeding access quite a lot.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-07-05T11:28:11.903" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11585" PostTypeId="2" ParentId="11573" CreationDate="2019-07-05T13:57:18.323" Score="4" Body="&lt;p&gt;The original BBC Micro was designed very quickly and was subject to internal debate over its processor; the 6502 was already seven years old, and the tube appears to have been a compromise: they would ship the base machine with only a 6502 and could then experiment with the various newer processors on the market after the fact, demoting the 6502 to a mere IO processor. It allowed Acorn to evaluate the 32016, 68000, etc, on an existing design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RISC PC launched in 1994, when there was already a clear Windows hegemony forming — even in the UK. So it's likely that support for alternative processors was overt recognition of that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since neither of those reasons applies to the Archimedes, which launched in 1987 with the then-best consumer processor, it doesn't have explicit support for alternative processors.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-07-05T13:57:18.323" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11587" PostTypeId="2" ParentId="11573" CreationDate="2019-07-06T08:23:27.603" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Acorn's BBC Micro series is well known for the range of add-on processors ... &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;... however, other Acorn computers (the Atom, the Electron and the ABC range) did not have such an interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the Tube interface was not Acorn specific, but it was specific for the BBC range of computers.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... given that its predecessors ... did support them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Of course any answer to your question can only be opinion-based.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, on many internet sites I have read that Acorn advertised the Archimedes as &quot;new generation home computer&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that Acorn did &lt;strong&gt;not&lt;/strong&gt; see the Archimedes as successor of something already existing (like the BBC or the ABC) but as a completely different type of device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would mean that Acorn did not &quot;&lt;em&gt;remove&lt;/em&gt;&quot; this feature but they simply did &quot;&lt;em&gt;not add&lt;/em&gt;&quot; this feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding the Tube interface in the BBC made sense:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC was designed as a device for beginners who wanted to learn programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1981 &quot;professional programming&quot; often meant &quot;assembly language&quot;. So an engineer who has never used a computer before could buy a BBC model B, learn programming in general and then he could buy the 68000, 8088, 6809, Z80 ... card to learn the assembly language that was required for his work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The expensive high-end Archimedes was definitely not intended for this purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And in 1987 &quot;professional programming&quot; did not necessarily mean &quot;assembly language&quot; any more because the power of computers was enough to use compiler-based programming languages.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... and successors did support them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think the reason why this feature was added to the RISC PC was completely different to the reason why the BBC had this feature:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a lot of software for non-ARM CPUs available on the market. The customers should be able to use this software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The A1060 for the Amiga and the SunPCi for SUN workstations had the same purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the reason why only x86 CPUs were available as second CPU for the RISC PC is quite simple: In 1994 nearly all considerable software on the market was MS-DOS and Windows software.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The ABC range supported second processors ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, if I understand the information about the ABC computers correctly, it was not intended that the user changed the CPUs in the ABC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, if you bought an ABC 200 (as an example), you were intended only to use the 32016 CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is completely different to the BBC's Tube system where you were intended to exchange the second CPUs and/or simply to switch off the second CPU to use the main 6502 for programming.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;By the way&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... only supported floating-point coprocessors ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not only floating-point:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beginning with the ARM2 (used in the original Archimedes), ARM CPUs support up to 16 co-processors to be connected at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many (later) ARM-based microcontrollers have the memory management and the debugging system implemented as co-processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know (non-ARM) CPUs that have real-time control and/or security/encryption co-processors.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... that could be connected through it's Tube interface.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If I understand the Tube interface correctly, it is simply a second expansion connector with a chip select signal. (You'll find the same signals in the Commodore C64's expansion connector.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The actual Tube electronics is located in the second CPU's housing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second CPU had its own memory and the Tube system is not comparable to modern two-CPU system but it is more like two independent computers using a VNC or remote-desktop software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is correct, it should be quite easy to connect a second CPU intended for the Acorn BBC to another home computer such as a C64, an A800, a Spectrum or ... an Archimedes (*)!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(*) To the &quot;1 MHz&quot; connector of the AKA-10 podule&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would need special software, of course.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="8712" LastEditDate="2019-07-07T08:08:22.007" LastActivityDate="2019-07-07T08:08:22.007" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11588" PostTypeId="1" AcceptedAnswerId="11590" CreationDate="2019-07-06T10:59:48.210" Score="7" ViewCount="5833" Body="&lt;p&gt;I want to use my old PS/2 mouse &amp;amp; keyboard with my Dell Latitude, which has no PS/2 ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VYbf8.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VYbf8.jpg&quot; alt=&quot;The PS/2 keyboard and mouse I want to connect to my computer, with thumbs up&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am fully aware that the easiest way to do this would to use an &lt;em&gt;active&lt;/em&gt; PS/2 to USB &lt;em&gt;converter&lt;/em&gt;, like &lt;a href=&quot;https://www.amazon.com.au/Top-Longer-Female-Converter-Adapter-Keyboard/dp/B079GT263M/ref=sr_1_1?keywords=PS2%20to%20usb%20active%20converter&amp;amp;qid=1562407237&amp;amp;s=gateway&amp;amp;sr=8-1&quot; rel=&quot;noreferrer&quot;&gt;this nice one from Amazon&lt;/a&gt;, learning this from reading it &lt;a href=&quot;https://forums.tomshardware.com/threads/ps-2-keyboard-to-usb-adapter-not-working.1347125/&quot; rel=&quot;noreferrer&quot;&gt;here on Tom's hardware forums&lt;/a&gt;, &lt;a href=&quot;https://forums.lenovo.com/t5/ThinkCentre-A-E-M-S-Series/Keyboard-Not-Recognized-With-PS2-to-USB-Adapter/td-p/1688891&quot; rel=&quot;noreferrer&quot;&gt;here on the lenovo forums&lt;/a&gt;, &lt;a href=&quot;https://www.tenforums.com/drivers-hardware/72989-cant-use-ps-2-keyboards-win-10-a.html&quot; rel=&quot;noreferrer&quot;&gt;here on alt windows 10 forums&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/PS/2_port#Conversion_between_PS/2_and_USB&quot; rel=&quot;noreferrer&quot;&gt;even here on wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, a salesman at an anonymous-remaining electronics company sold me a pair of &lt;em&gt;passive&lt;/em&gt; PS/2 to USB &lt;em&gt;adapters&lt;/em&gt;, &lt;a href=&quot;https://www.amazon.com.au/Fityle-Female-Converter-Keyboard-Mouse/dp/B07JV8F16B/ref=sr_1_6?keywords=PS2%20usb%20adapter&amp;amp;qid=1562409698&amp;amp;s=gateway&amp;amp;sr=8-6&quot; rel=&quot;noreferrer&quot;&gt;like this not-so nice one from Amazon&lt;/a&gt;, which simply changes the &lt;em&gt;pin positions&lt;/em&gt; from PS/2 to to USB, but not the &lt;em&gt;data&lt;/em&gt; or &lt;em&gt;protocol&lt;/em&gt; - which windows 10 doesn't know natively how to make sense of.&#xA;Sidenote: I don't actually know if that amazon one is a converter or adapter, but it looks similar to what I got.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7yblw.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7yblw.jpg&quot; alt=&quot;The PS/2 passive adapters I was sold, with thumbs down&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Through both stubbornness not to spend any money, and the fact that it will be a cool project and way to learn how this stuff works, I want to find a way, using software, to interface my laptop and the PS/2 keyboard/mouse using the adapters I bought&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a existing way to help windows interpret the signals the adapted keyboard/ mouse are sending it? &lt;br&gt;&#xA;&lt;strong&gt;or&lt;/strong&gt;, &lt;br&gt;&#xA;if not, which skills do I need to find a solution, and what is the quickest &amp;amp; easiest way to learn them?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I have a reasonable understanding of windows, computers, and basic hardware, however my knowledge of drivers, firmware, and what makes windows work is limited. &lt;br&gt;&#xA;EDIT: Not quite sure if this question belongs on this site. Let me know.&lt;/p&gt;&#xA;" OwnerUserId="14515" LastEditorUserId="14515" LastEditDate="2019-07-06T12:27:45.087" LastActivityDate="2021-01-07T03:45:23.973" Title="How do I use my adapted PS2 keyboard &amp; mouse on a windows 10 computer?" Tags="&lt;keyboards&gt;&lt;mouse&gt;&lt;new-hardware-adaptation&gt;&lt;windows&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11589" PostTypeId="2" ParentId="11588" CreationDate="2019-07-06T11:40:39.687" Score="2" Body="&lt;p&gt;It's possible that the mouse and keyboard implement both PS/2 and USB; on these devices, the passive connectors work. However, if this is not the case, you won't be able to use the PS/2 device over USB, since the device will not be sending coherent data to the USB controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is theoretically possible, however, for you to wire the data and clock lines of the PS/2 device to input lines in your PC's parallel port interface (if it has one), and then write a Windows kernel driver to interpret the data. However, if you're going as far as to implement an active converter in software on your machine, it's probably easier to buy a pre-built USB-to-PS/2 active converter.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2019-07-06T11:40:39.687" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11590" PostTypeId="2" ParentId="11588" CreationDate="2019-07-06T11:57:29.153" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I want to find a way, using software, to interface my laptop and the PS/2 keyboard/mouse using the adapters I bought.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Assuming you want to use the passive PS2-to-USB adapter you just bought to plug it into a USB port on your Windows 10 PC, then &lt;strong&gt;this will not work&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The passive PS2-to-USB adapters require the keyboard or mouse to be multi-protocol: The keyboard or mouse must natively speak the USB protocol in addition to the PS2 protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If they do, it will work out of the box. If they don't, then you have the USB host controller in your PC speaking to the PS2 controller in your keyboard and mouse. But you can't reprogram the USB host controller to speak anything else besides the USB protocol, even if you are a crack firmware developer. Because there's no way to reprogram the USB host controller. In the same way, you can't change the PS2 controller in your keyboard or mouse to speak the USB protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, game over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a fun project, you will need a piece of hardware that is flexible enough to allow software to control it to such a degree that it can understand the PS2 protocol. So essentially you'll be writing software for an active PS2-to-USB adapter on a RaspPi, a microcontroller, or something similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as you stated in your question, that's not what you want.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-07-06T11:57:29.153" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11592" PostTypeId="1" AcceptedAnswerId="11593" CreationDate="2019-07-06T22:29:33.837" Score="5" ViewCount="293" Body="&lt;p&gt;For the ZX Spectrum there is a project called ZX Pie. As the name suggests, it's a board attached to the ZX Spectrum's expansion slot that 'listens' the Address Bus and the Data Bus and connect them to a Raspberry Pi. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the Pi works like a latch and uses all data stored in Video RAM area starting from 4000h and renders the screen using its HDMI output. The RPi runs a baremetal software (no OS) that does all the rendering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to create something similar for the CoCo. Is it even possible?&lt;/p&gt;&#xA;" OwnerUserId="10511" LastActivityDate="2019-07-06T23:14:24.287" Title="Color Computer Expansion port &quot;listening&quot; bus" Tags="&lt;color-computer&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11593" PostTypeId="2" ParentId="11592" CreationDate="2019-07-06T22:57:17.917" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;For the ZX Spectrum there is a project called ZX Pie.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;AFAIU this is a &lt;a href=&quot;https://gitlab.com/victor.trucco/TK-Pie&quot; rel=&quot;noreferrer&quot;&gt;TK-Pie&lt;/a&gt; application.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As the name suggests, it's a board attached to the ZX Spectrum's expansion slot that 'listens' the Address Bus and the Data Bus and connect them to a Raspberry Pi.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Then the Pi works like a latch and uses all data stored in Video RAM area starting from 4000h and renders the screen using its HDMI output. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, not fully, it 'just' buffers the last write and tries to react fast enough before the next one comes up and uses the data snooped to create a new video.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I would like to create something similar for the CoCo. Is it even possible?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Basically yes. Clockwise the CoCo is slower than the ZX-Spectrum, at least the CoCo 1/2at 0.895 MHz. CoCo 3 can be switched to 1.79 MHz, which (may) be faster than the Spectrum (*1). This needs a closer look at the Interrupt-handling sequence, but I belive it's doable (*2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, the CoCo video is a bit more complex than the Spectrum's rather simple video format, as CoCo already supports several different 6847 video modes by default - not to mention the ones possible by direct programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and if it's supposed to work with a CoCo 3 then Memory Management becomes an even bigger hurdle, as the interface hardware and/pr Pi-Software has to track the memory configuration as well, to avoid displaying data from a different page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while the hardware modifications may be rather minor, it'll take quite some new code and tweeking to capture all possible video modes.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Sounds like a nice little project.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;*1 - Yes, Spectrum is 3.5 MHz, but each and every memory access is at least two clocks, for writes 3, so the effective clock rate the latch has to react is longer than with the CoCo3's 1.79 MHz cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The CPLD used should even be able to gather more than one write, so timing could be relaxed a bit.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-06T23:14:24.287" LastActivityDate="2019-07-06T23:14:24.287" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11594" PostTypeId="2" ParentId="11573" CreationDate="2019-07-07T12:09:47.753" Score="4" Body="&lt;p&gt;Three contributory reasons:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;After the BBC Micro, Acorn were using &lt;em&gt;their own&lt;/em&gt; processor&lt;/li&gt;&#xA;&lt;li&gt;They didn't need hardware to support other platforms&lt;/li&gt;&#xA;&lt;li&gt;Microsoft Windows hadn't cornered the market yet&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Using their own Processor&lt;/h2&gt;&#xA;&lt;p&gt;In the 8-bit era, Acorn had used existing, off-the-shelf processors in their computers, predominantly the 6502. When designing the Acorn Proton (which later became the BBC Micro), the company were unsure whether to continue in that vein, or &lt;a href=&quot;https://www.stairwaytohell.com/articles/AU-AcornHistory.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;switch to a newer processor&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Where was Acorn to go next? Many possibilities were emerging with a new generation of 16-bit processors (like the 68000) set to come on to the market, and other developments, such as networking, gaining in importance.&lt;/p&gt;&#xA;&lt;p&gt;Should Acorn abandon the 6502 processor which lay at the heart of all its machines? Should the next machine be full of the latest features or should it sacrifice advanced technology for the mass market?&lt;/p&gt;&#xA;&lt;p&gt;After many lively meetings, the Acorn designers went away to work on Hauser's compromise suggestion, an improved 6502 machine with expansion possibilities. The 'Tube' was born to allow more sophisticated processors such as the 68000 to be added later. The new machine was to be called the Proton, continuing a trend born with the Atom.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This indecision that led to the Tube interface had another benefit: the possibility of using a Z80 processor was appealing to the BBC, as it would allow the machine to support CP/M, still considered important in business applications at the time.&lt;/p&gt;&#xA;&lt;p&gt;When Acorn started planning a successor to the BBC Micro line, they once again looked at processor options, but this time they decided to design their own. &lt;strong&gt;Because the ARM processor was their own creation, individual employees' enthusiasm for using an alternative processor instead would be greatly reduced.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Software Emulation&lt;/h2&gt;&#xA;&lt;p&gt;The ARM processor was very simple, and fast, for its time. This meant that software emulation of other platforms was a viable option.&lt;/p&gt;&#xA;&lt;p&gt;From the release of RISC OS 2, the Archimedes was distributed with &lt;a href=&quot;https://www.mcmordie.co.uk/acornhistory/archist2.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;!65Host and !65Tube&lt;/a&gt;, two emulators that supported running BBC Micro and Master software natively under RISC OS (including Tube-compatible software). This provided backward compatibility with existing BBC software, without requiring a 6502 co-processor.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/Mags/PCW/PCW_Jan88_PCEmulator.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC Emulator&lt;/a&gt; was also released, emulating an 80186, and running MS-DOS 3.1, albeit somewhat slowly. Curiously, the linked article quotes an Acorn representative as saying &amp;quot;There'll be an 80186 co-processor card out for the Archimedes soon&amp;quot;, indicating that they &lt;em&gt;were&lt;/em&gt; considering a hardware-based solution too.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Competition was from DOS, not Windows&lt;/h2&gt;&#xA;&lt;p&gt;The Archimedes' RISC OS was a modern 32-bit operating system with a graphical user interface. Compare the promotional image of DOS 3.1 from the above article on the 80186 emulator:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9XDxZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9XDxZ.png&quot; alt=&quot;Text-based ProComm software running on an A300 machine&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;With a RISC OS desktop:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zPxN8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zPxN8.png&quot; alt=&quot;Desktop of an Archimedes A3020 running RISC OS&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It would be quite reasonable to expect software developers of the late 1980s would be drawn to the ARM/RISC OS ecosystem rather than continue working under the antiquated constraints of the IBM PC and MS-DOS. If your machine is the best thing since sliced bread, why encourage people to keep using old-fashioned software?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;By 1994, when the RISC PC was introduced, the MS-DOS/Windows hegemony was well established, and Windows 95 was just around the corner.&lt;/strong&gt; The Archimedes line, while innovative, hadn't penetrated the market significantly (except the education sector). As a result, hardware compatibility with the PC platform was now essential, if the RISC PC was to succeed in the marketplace.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-09T16:26:06.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11595" PostTypeId="2" ParentId="11563" CreationDate="2019-07-07T14:16:57.793" Score="4" Body="&lt;p&gt;(As other replies, this is not the direct answer, just some hanging around.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I worked at Internet service provider, we ran into problem with that prefixes: in communications, stream rate is defined at units of 1000, like 64 kbits = 64000 bits. OTOH, many programs count sizes in portions of 1024.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a few attempts to fix this, the final decision was as follows: a usual customer contract contained definitions section that stated:&lt;br&gt;&#xA;traffic is measured in:&lt;br&gt;&#xA;1 kilobyte = 1000 bytes.&lt;br&gt;&#xA;1 megabyte = 1024 kilobytes.&lt;br&gt;&#xA;1 gigabyte = 1024 megabytes.&lt;br&gt;&#xA;(This edition appeared approx. in 2001.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't insert emoticons into reply in StackExchange, but I'd like to put here a shockingly astonished face. ? ? ? None is good here, but Munch's &quot;Cry&quot; is rather close.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'd support a general tendency to separate two suffix sets. OTOH, the particular choice of -bi is utterly brain-damaged: nearly nobody can distinguish kibi from gibi in a noisy environment. The prefixes shall be radically different in pronounciation.&lt;/p&gt;&#xA;" OwnerUserId="8324" LastEditorUserId="8324" LastEditDate="2019-07-07T14:28:27.690" LastActivityDate="2019-07-07T14:28:27.690" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11596" PostTypeId="2" ParentId="9715" CreationDate="2019-07-08T01:46:42.257" Score="18" Body="&lt;p&gt;I wrote the DOSKEY that went into DOS5...  I think it actually went into the win3.0 box too, but I can't find any evidence for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was the new guy on the team, it was the first project they gave me before I started diving into cleaning up the existing code base.  There was a program called DOSKEY that had source code published in one of the magazines.  Microsoft wanted to include the functionality (possibly trying to match DR-DOS's added features) but didn't want to risk copyright issues by using the published code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The published DOSKEY used fixed length 128 byte records in its command history, so it was extremely inefficient.  I wrote code to use variable length records in a circular buffer, so it was much more efficient in terms of history size vs. memory usage.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Macros were my idea if I recall correctly, as we were trying to figure out some &quot;low-cost&quot; feature to throw in.  I actually used the macros quite a lot for a couple of years, including parameter substitution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was very well written and documented, as it was my &quot;debut&quot; to the DOS team, the first time they had seen my code. During my initial team meeting code review, DavidOls said it showed &quot;a firm hand on the keyboard.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was it not integrated into COMMAND.COM?  I think it was as others have suggested, to not force the memory usage on people who didn't want it. One of the big goals of the MS-DOS 5 project was reducing &quot;Low 640k footprint&quot;. We added some kind of int2f hook to integrate it better into COMMAND.COM, I don't remember why now.&lt;/p&gt;&#xA;" OwnerUserId="14540" LastActivityDate="2019-07-08T01:46:42.257" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11597" PostTypeId="1" AcceptedAnswerId="11605" CreationDate="2019-07-08T13:17:26.193" Score="48" ViewCount="10982" Body="&lt;p&gt;While for other platforms of that era (primarily, Amiga), putting a game on a bootable disk was quite a normal practice, this approach never taken off on IBM PC.  Why not?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do remember people having multiple menu-driven autoexec.bat and config.sys configurations because one would have to boot MS-DOS with only the bare minimum to satisfy the requirements of some memory-demanding games. Since MS-DOS was by and large a single-task operating system, wouldn't booting a game directly from disk be more efficient than going through all the hassle of finding a working configuration of HIMEM, EMM386 and whatever else?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even when Windows took over, would there be benefits for a demanding game to have full control over the PC resources as opposed to competing with a multitude of random background processes potentially spoiling the smooth FPS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that games in such a scenario would have to include a minimalist operating system, but I guess a carefully tuned Linux kernel along with drivers for all the popular graphics cards would be enough? This is for the Windows era, that is - for MS-DOS, I guess all the essentials games of that time needed were available directly from BIOS (well, file system support could have been an issue but I recall Amiga games of that time used to read the game data directly from sectors on the disk).&lt;/p&gt;&#xA;" OwnerUserId="3303" LastEditorUserId="4073" LastEditDate="2019-07-09T12:11:51.983" LastActivityDate="2021-05-13T17:24:43.560" Title="Why weren't bootable game disks ever common on the IBM PC?" Tags="&lt;ms-dos&gt;&lt;ibm-pc&gt;&lt;gaming&gt;&lt;boot&gt;" AnswerCount="9" CommentCount="16" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11598" PostTypeId="2" ParentId="11597" CreationDate="2019-07-08T13:31:35.410" Score="93" Body="&lt;p&gt;Bootable game disks do exist for the IBM PC. Conflict in Vietnam is an example of such a game. As can be seen on &lt;a href=&quot;https://archive.org/details/Conflict_in_Vietnam_1986_Microprose/page/n7&quot; rel=&quot;noreferrer&quot;&gt;page 8 of the manual&lt;/a&gt;, the game boots directly without loading DOS first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main reason it wasn't common was for compatibility. A self booting game has to have its own drivers for all the hardware it wants to support. As PCs quickly diversified and software was used to provide compatibility with the original IBM hardware, it became much easier to use DOS drivers instead. In comparison the Amiga hardware was largely fixed and compatible through it's entire commercial lifespan under Commodore, and no clones ever gained significant market share.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-07-08T13:31:35.410" CommentCount="22" ContentLicense="CC BY-SA 4.0" />
  <row Id="11599" PostTypeId="2" ParentId="11597" CreationDate="2019-07-08T13:35:50.753" Score="5" Body="&lt;p&gt;I'd like to question the premise, here.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I understand that games in such a scenario would have to include a minimalistic operating system, but I guess a carefully tuned Linux kernel along with drivers for all the popular graphics cards would be enough?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Space is an issue, so it would be beneficial if it were possible to have the kernels separately, or else have multiple different copies of the game with different sets of drivers. The &quot;separate kernel&quot; model seems more efficient, and what is DOS if not this?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Now, even when Windows took over, would there be benefits for a demanding game to have full control over the PC resources as opposed to competing with a multitude of random background processes potentially spoiling the smooth FPS?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is a convenience in being able to start your games quickly, and to Alt-Tab, and to use the network you've already configured your computer to use, etcetera. And computers powerful enough to run Windows were often powerful enough to run most games without stuttering, especially since &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11533/278&quot;&gt;Windows gave priority to the programs the user was interacting with&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nevertheless, many games on my Arcade ClassiX CD-ROM required me to boot into single-process (MS-DOS) mode in order to run properly; it appears that such games existed. It wouldn't surprise me if such bootable disks as you describe in your question &lt;em&gt;also&lt;/em&gt; existed. But such launch systems reduce the target audience with very little benefit, so I wouldn't expect many to exist.&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2019-07-08T13:35:50.753" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11600" PostTypeId="2" ParentId="11597" CreationDate="2019-07-08T13:41:56.233" Score="25" Body="&lt;p&gt;Well there were some PC booter titles (&lt;a href=&quot;https://www.mobygames.com/browse/games/pc-booter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MobyGames lists 249&lt;/a&gt;), but most of these were quite early games, even before hard drives, &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;XMS or EMS&lt;/a&gt; even existed. These were almost always self contained single floppy games, that could run on the very specific hardware that existed. All they used was BIOS for disk access. Also DOS was not the only operating system, so it sort of made sense to have a simple booter game that could be booted from a single floppy, without a specific OS. As the game itself does not require DOS for anything, it would have taken too much floppy space to include DOS just for the purpose of loading a game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When games became larger and hard drives mainstream, and in practice the consumer OS had settled to DOS, it was much simpler to boot the PC to DOS as usual and then run the game executables either from floppy directly or from the hard drive. Also games that have multiple files like graphics and sound files can just very easily read those files under DOS, without understanding anything about the actual file system structures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even later, with 386 and 32-bit protected mode games, DOS was just used as the platform that was able to execute the DOS extender and load the 32-bit game executable into memory for the purpose of running it.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="3290" LastEditDate="2020-04-28T13:12:36.947" LastActivityDate="2020-04-28T13:12:36.947" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11601" PostTypeId="2" ParentId="11597" CreationDate="2019-07-08T14:20:10.730" Score="21" Body="&lt;h3&gt;The IBM PC was NOT a Game Machine&lt;/h3&gt;&#xA;&lt;p&gt;Plenty of people played plenty of games on IBM &amp;amp; compatible computers. But the IBM PC was designed as a &lt;strong&gt;business&lt;/strong&gt; machine, not a &lt;strong&gt;game&lt;/strong&gt; machine.&lt;/p&gt;&#xA;&lt;p&gt;This is most obvious with audio capabilities. Where Atari 400/800, VIC-20, Commodore 64, Amiga and many other machines of the era included some (for the time) serious sound capabilities, the IBM PC did not. As a result, within a short amount of time, there were a number of different sound cards available, &lt;em&gt;each of which needed a driver or specific application programming to work&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Video was not quite as bad, but even there, the original PC had a choice of two very different video cards (MDA &amp;amp; CGA) and soon EGA and others came along, each with their own video modes (bit depth, resolution, memory-mapped video RAM location, etc.), while many of the other popular machines had video, often with better support for games (e.g., sprites), built in to the motherboard.&lt;/p&gt;&#xA;&lt;p&gt;Due to the sheer size of the market, there were many games available for the IBM PC. But due to design issues, many of these games needed either extra hardware (e.g., sound card) or extra software (to support different sound, video, extended/expanded memory), all of which was a lot easier to support by booting into MS/PC-DOS first. In addition, hard drives were quite common with the IBM PC (at least after the introduction of the XT), so installation of a game onto the hard drive, sometimes with insertion of the original floppy at the beginning of the game for copy protection, made a lot more sense than trying to cram everything into one or two bootable floppy disks.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-08T16:56:19.143" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11602" PostTypeId="2" ParentId="11597" CreationDate="2019-07-08T16:03:25.793" Score="12" Body="&lt;p&gt;Games that were designed to be run from floppy were usually self-booting, and often could only be run by booting from floppy.  In many cases, the game code could be stored in ways that would not be understood by MS-DOS (using things like non-standard sector sizes), and booting into a game would be faster than booting MS-DOS and then booting the game.  The big problem was that a self-booting game would be generally be able to access anything that required any sort of loadable device driver, nor--in most cases--any information that was stored on a normal MS-DOS disk.  If one wanted to save one's progress in Zork I or Wizardry, one would have to format a disk specifically for that purpose, as opposed to merely being able to store a file on an existing MS-DOS volume [I think Wizardry used disks formatted to the UCSD P-system standard, and its save files might have been able to co-exist with files for other P-system applications, but Wizardry is the only one I know of].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that if a game knows that it will need to use a certain specific set of files, it can simply have a list of files and their locations built into the game's code.  If a game were using MS-DOS and wanted to read &lt;code&gt;foo.dat&lt;/code&gt;, it would need to read one or more sectors of directory information, then one or more sectors of the FAT, before finally being able to read the data for the file of interest.  If instead the game code is hard-coded table that says file #23 is stored from sectors 293 to 299, the code can simply read those sectors directly, thus offering faster performance than if the game were using DOS to read the information from floppy (though probably slower than using DOS to read from a hard drive).&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-07-08T16:03:25.793" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="11603" PostTypeId="2" ParentId="3041" CreationDate="2019-07-08T22:36:50.400" Score="1" Body="&lt;p&gt;Insofar as graphics went, it's important to keep in mind that prior to the early 1990s, low-level details about how different video cards actually worked weren't necessarily widely known, or implemented in a manner that was hardware-identical to a PS/2 VGA card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Case in point: VGA (as implemented on the PS/2) actually had support for tiled graphics (in the form of custom fonts), but almost nothing dared to actually USE it (Microsoft's shell for MS/DOS 6 and XM-tracker come to mind as two of the only popular apps that took advantage of it as a way to render a mouse pointer onto a textmode screen... basically, using 9 of the custom characters to render whatever 9 characters happened to be in the 3x3 grid around the mouse pointer, along with the mouse pointer itself). The problem was that there was no official BIOS support for it (at least, not prior to SVGA BIOS extensions becoming a de-facto standard), and there was no guarantee that a given third-party &quot;VGA&quot; card worked in precisely the same way as IBM's official &quot;VGA&quot; graphics... or that the third-party &quot;VGA&quot; card had direct hardware support for custom characters AT ALL. And documentation for stuff like this was insanely hard to come by prior to the first books like the one written by Richard Ferraro in 1990.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's hard to believe now that you can look up almost anything online, but back in 1989, low-level register details about arbitrary video cards really weren't all that well known... partially, because vendors didn't want to make it easy for competitors to make register-compatible copies of their own cards, and partially because they didn't want to make it easy for the companies whose designs THEY copied to sue THEM for infringement. Unless you lived somewhere like Boston or Silicon Valley, even LARGE bookstores rarely sold books about esoteric programming topics... when such books existed at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going back to the example of Richard Ferraro's book. In 1990, I lived in Miami and went to both Barnes &amp;amp; Noble and Borders all the time. The first time I &lt;b&gt;ever&lt;/b&gt; remember seeing a copy of that particular book on the shelves (at the Borders store across the street from Dadeland Mall) was sometime around 1994... and it wasn't cheap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In retrospect, &quot;most&quot; PC videocards actually DID work almost exactly the same way (at least, insofar as &quot;VGA&quot; was concerned). But at the time, there was an almost-neurotic perception that programming the bare-metal hardware would cause endless compatibility problems... and even if you were willing to live dangerously, the information itself wasn't easy to come by.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1992, I was an Amiga refugee who'd finally jumped ship and bought a loaded 486DX33 with S3 '911 graphics card. At the time, I knew that it was possible to program 486 assembly language using flat addressing (or more precisely, using 2-gigabyte segments and setting the segment pointer to 0), but spent MONTHS trying to find out how to actually GET a PC into what we now would refer to as &quot;unreal mode&quot; (in fact, using &quot;the internet&quot;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even in 1992, you couldn't just waltz into Borders,  grab  a book about PC assembly language, and expect to find nice chapters coherently explaining things like &quot;Unreal Mode&quot; or &quot;DOS Extenders&quot;. From what I recall, there WAS a chapter somewhere in the manual for Borland's TurboASM that touched upon it... but it was purely a minimal reference guide that was utterly incomprehensible to someone who didn't already understand the topic. Information-wise,  the late 1980s and early 1990s really were an information dark age. There were lots of books about programming Realmode assembly and making BIOS calls... but absolutely, positively, NOTHING on mainstream bookstore shelves about programming bare-metal hardware. At least, not until the mid-90s (though, as noted, the books themselves started to get published around 1990... you just couldn't stumble over them &amp;amp; had to already know they existed).&lt;/p&gt;&#xA;" OwnerUserId="4169" LastActivityDate="2019-07-08T22:36:50.400" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11604" PostTypeId="1" AcceptedAnswerId="11645" CreationDate="2019-07-09T14:27:27.900" Score="6" ViewCount="278" Body="&lt;p&gt;One and half decade ago I had an black IBM Thinkcentre tower. The specs were: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pentium 4 2.66 GHz&lt;/li&gt;&#xA;&lt;li&gt;256 Mb IBM RAM (which later got upgraded into 512 Mb RAM),&lt;/li&gt;&#xA;&lt;li&gt;40GB HDD,&lt;/li&gt;&#xA;&lt;li&gt;XP Pro SP3,&lt;/li&gt;&#xA;&lt;li&gt;GeForce 2 MX 400.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What interested me was the original IBM RAM that came with it. According to my uncle, the pin layouts didn't match any DDR pin standards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps it was designed that way? Is IBM known for making such tricks? What could the RAM possibly be?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My uncle says, He threw it away, although he isn't 100% sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I still have the case:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2ceNR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2ceNR.jpg&quot; alt=&quot;Identification Badge&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LVfS4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LVfS4.jpg&quot; alt=&quot;Serial Number On The Back&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8033" LastEditorUserId="129" LastEditDate="2019-07-12T09:34:04.890" LastActivityDate="2019-07-12T10:13:30.600" Title="The IBM RAM with non-standard pin layout" Tags="&lt;ibm-pc&gt;&lt;ibm&gt;&lt;ram&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11605" PostTypeId="2" ParentId="11597" CreationDate="2019-07-09T15:27:11.217" Score="11" Body="&lt;p&gt;There were three primary reasons:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Space&lt;/strong&gt; - PC games were at an awkward juncture in time where both the OS and the games had grown but floppy disks had not, so there was often too little space on the disk to include the OS, even for single-disk games, let alone multi-disk games.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;License&lt;/strong&gt; - They couldn’t just throw a copy of DOS on the disk; that would be piracy. They'd have to have a license to include it, but that would have increased the price of the games which were often already quite expensive.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Variation&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Apologies if I was vague in my wording. Take Doom, Heretic or Hexen as an example. These games were using a so called &amp;quot;DOS extender&amp;quot; which, in a way, was a mini-kernel running in protected mode that didn't rely on MS-DOS for anything but probably accessing the file system. So, assuming that a game like this a) would be able to boot from CD by using only BIOS routines and b) would include a FAT driver for making &amp;quot;saves&amp;quot; on the HDD - such a game wouldn't need MS-DOS at all. Ideally it wouldn't even use BIOS since calling BIOS from protected mode was royal pain in the ... – DmytroL&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Games that required DOS extenders &lt;em&gt;did&lt;/em&gt; come with them. It sounds like you’re asking why PC games didn't include their own (mini) OS, as opposed to running on DOS at all. If so, I assume you’re referring to how some Amiga games had custom boot-blocks that bypassed Kickstart and didn’t use AmigaOS. That was because doing things like graphics, sound, and input was simple enough on the Amiga that they could do that. However, it was not a common practice, it was usually only done by “bedroom-coders” who enjoyed digging into the system and “hacking” things for themselves. Studio games rarely did that unless there was a pressing need like squeezing out every byte of disk space.&lt;/p&gt;&#xA;&lt;p&gt;On PCs, it was more of a pain to do low-level things manually, so it was rarely worth the effort (though it did occasionally happen; it's not a game, but even today, “DOS” copies of MemTest86+ come in a non-FAT disk image and boot directly into the program using a custom version of Linux, as does Clonezilla).&lt;/p&gt;&#xA;&lt;p&gt;A big reason for programming on PCs being harder than on Amigas, C64s, game consoles, etc. is that unlike original IBMs and other systems that had a defined specification, PCs (IBM clones) quickly became a morass of complexity with a wide variation of hardware. Therefore, it was a lot more work (especially before each standard was established) to accommodate differing hardware; it was easier to just let the installed operating system and drivers do that work. (This was still an issue even in Windows until Microsoft unified the programming experience with DirectX.)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="14563" LastEditorUserId="15334" LastEditDate="2021-05-13T17:24:43.560" LastActivityDate="2021-05-13T17:24:43.560" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11606" PostTypeId="1" CreationDate="2019-07-09T16:35:44.483" Score="24" ViewCount="3915" Body="&lt;p&gt;The IBM PC was cloned very early on, and many third parties made hardware peripherals.  This required users to run an OS, install drivers, manage IRQs and hardware bus addresses, etc.  Why was this a strength of the platform, instead of a weakness?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking specifically of Commodore/Amiga where the hardware was less diverse and end users/programs didn't need to manage so much fragmentation.  I'm also thinking of modern examples like Android where fragmentation is a big problem, and iOS where the hardware is less diverse and that is seen as an asset of the platform in ways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Inspired by &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11597/why-werent-bootable-game-disks-ever-common-on-the-ibm-pc&quot;&gt;Why weren&amp;#39;t bootable game disks ever common on the IBM PC?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5032" LastActivityDate="2019-07-12T20:42:17.477" Title="Why was hardware diversification an asset for the IBM PC ecosystem?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;ibm-pc&gt;" AnswerCount="10" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11607" PostTypeId="2" ParentId="11606" CreationDate="2019-07-09T17:00:07.727" Score="4" Body="&lt;p&gt;Unlike the Amiga, the IBM PC was always seen as mainly a business computer. Having business done on lots of small machines on desks, rather than on large central machines via terminals, meant that businesses had to provide support staff to configure machines and assist users, rather than having staff to look after the central machines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the total cost of ownership would seem to have been lower, judging by the runaway success of PC-based business computing. PCs also became less demanding to configure over time, as they came with more and more built-in capability. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware diversification also provided ways for PC manufacturers to compete, driving costs down and ease-of-use up. However, they always remained PC-compatible, which meant they could run the same application software. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fragmentation of Android, in my experience, has been caused by the fragmentation of the ARM 32-bit instruction set, which was a consequence of ARM's willingness to customise their processor designs for their hardware-manufacturer customers, and those hardware manufacturers' lack of appreciation for the benefits of application compatibility. It's just the same situation as you'd get if Dell and HP Windows machines had different instruction sets, custom-designed for Dell and HP by Intel. As a chip manufacturer, wanting the benefits of making millions of identical chips, Intel don't do that. ARM discarded the idea with ARMv8, which does not get customised by individual customers, curing the fragmentation problem. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-07-09T17:09:20.487" LastActivityDate="2019-07-09T17:09:20.487" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11608" PostTypeId="2" ParentId="11606" CreationDate="2019-07-09T17:17:17.153" Score="2" Body="&lt;p&gt;One problem in designing future-proof systems is deciding what features of the system's present design should be regarded as fundamental and what aspects should be considered happenstance.  If some features of a design get treated as fundamental, it will be very difficult to change them later, but features needed to accomplish tasks efficiently can't be relied upon, it will be impossible to accomplish those tasks reliably and efficiently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some aspects of the PC's design (e.g. the presence of CGA display memory at hardware address 0xB8000) ended up being treated as fundamental because IBM and Microsoft failed to provide a reasonable alternative, even though it would have been better to avoid such dependance (e.g. by providing a function to inquire where display memory is located).  For the most part, though, the PC ended up with a relatively practical mix of fundamental and happenstance design elements.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2019-07-09T18:19:13.187" LastActivityDate="2019-07-09T18:19:13.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11609" PostTypeId="2" ParentId="11606" CreationDate="2019-07-09T18:07:14.303" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The IBM PC was cloned very early on, and many third parties made&#xA;  hardware peripherals. This required users to run an OS, install&#xA;  drivers, manage IRQs and hardware bus addresses, etc. Why was this a&#xA;  strength of the platform, instead of a weakness?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A wide range of hardware devices was a strength, in that, if IBM wasn't willing to build it, or was unable to build it and release it in a timely manner, then someone else (perhaps many someone elses) could.  This broadens the range of use for the platform as a whole. That makes for a virtuous cycle: greater range, more users, more incentive to support the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dealing with the hardware configuration was a downside of the variety, sure, but apparently not a sufficient disincentive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The PDP-11 followed a similar arc, especially in its early days, where the documented bus architecture allowed a robust add-on marketplace to develop).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-07-09T18:07:14.303" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11610" PostTypeId="2" ParentId="11606" CreationDate="2019-07-09T18:44:12.447" Score="31" Body="&lt;p&gt;It was an advantage because the IBM PC became an extensible computing platform. The most popular competitor to it previously was the Apple II, another open platform.&lt;/p&gt;&#xA;&lt;p&gt;The PC, as a platform, was popular to users because of the choices it enabled, as developers because of the foundations that it laid, and engineering firms because they could focus on what they wanted to do (say, a graphic card, or a computer vision system) rather than an entire computing system.&lt;/p&gt;&#xA;&lt;p&gt;Since MS-DOS availed the ability to readily install things like drivers, the platform allowed things like configurable interrupts, etc. it gave everyone involved a lot of flexibility in designing their solutions.&lt;/p&gt;&#xA;&lt;p&gt;So, not only was the hardware &amp;quot;open&amp;quot; (the PC bus system was reasonably well documented), the software was also &amp;quot;open&amp;quot; (in that it was straight forward to augment the system with your own drivers). I don't mean &amp;quot;open&amp;quot; as it's typically referred to today (i.e. free, source code available, etc.) but it was &amp;quot;open&amp;quot; in the sense that anyone could make a card, with no payment to IBM, and anyone could make a driver, with no payment to Microsoft. You also, as an end user, didn't have to rebuild the operating system software yourself like you did in CP/M. CP/M's design wasn't as flexible in this regard as MS-DOS was. (This changed a little later, but the legacy lived on.)&lt;/p&gt;&#xA;&lt;p&gt;Yes, this led to complexity at the user level since the burden of configuring the cornucopia of diverse systems fell on them. It also lead to some complexity at the software development level - but only at the edge cases. In time things became common and compatible, lowering the barrier for software.&lt;/p&gt;&#xA;&lt;p&gt;So, since the PC offered a unique combination at the time of a robust foundation, especially once the XT hit, of the BIOS, large memory space, the large array of peripherals (robust character graphics, nice high resolution graphics, color graphics, floppies, hard drives, printers, serial ports) and then the &amp;quot;infinite&amp;quot; expandability of an open bus and extensible base operating system, and then the explosion of the clones, the network effect surrounding the PC became very compelling despite all of its innate weaknesses.&lt;/p&gt;&#xA;&lt;p&gt;The PC represented a maturity of the product and the industry after learning from the rise and struggles of the diverse early micro environment where everything was cordoned off to a limited platform.&lt;/p&gt;&#xA;&lt;h3&gt;Addenda:&lt;/h3&gt;&#xA;&lt;p&gt;I can not speak to the Amiga. But there is a distinct difference between a simple &amp;quot;expansion connector&amp;quot; and an actual computer &amp;quot;bus&amp;quot;. A expansion connector is typically the signals of the CPU routed out to be connected to by external hardware. But, that's where it tends to stop.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Bus_(computing)&quot; rel=&quot;noreferrer&quot;&gt;Bus&lt;/a&gt; is actually a communication protocol for peripherals designed to facilitate the sharing and management of those signals. It's more than just raw CPU signals; it's also potentially other signals and protocols to allow peripherals to request and gain access to the CPU and other devices on the bus. You can't have two devices &amp;quot;fighting&amp;quot; over the CPU signals.&lt;/p&gt;&#xA;&lt;p&gt;For example, you may have the CPU trying to talk to a serial port at the same time as a disk drive is trying to use &lt;a href=&quot;https://en.wikipedia.org/wiki/Direct_memory_access&quot; rel=&quot;noreferrer&quot;&gt;DMA&lt;/a&gt; to fill a buffer. They both want to use the data lines of the bus. How is that negotiated? That's what the bus control signals and protocols provide the designers.&lt;/p&gt;&#xA;&lt;p&gt;The PC offered a series of card slots and a card cage for expansion. It offered a formal bus protocol. It offered a Programmable Interrupt Controller (PIC) and DMA channels. Those are all nice things to have in a computer system from a hardware point of view. It made it easy for users to add not just one peripheral, but several. Want to put in a pair of 8 port serial cards to run a BBS? No problem. Want to add a SCSI tape drive that use DMA to speed up transfers while the CPU is doing other tasks? The foundation is there.&lt;/p&gt;&#xA;&lt;p&gt;Did the Amiga offer anything of this formality? I have no idea. I don't mean to slight it. I have no doubt you can easily to any one of these things to a computer with an expansion connector. But can you do more than one? From competing manufacturers? That's different. They may both assume that they have full control over the expansion connector. No doubt folks added peripherals to the Amiga (and other computers). But there's a difference between having access to the raw CPU signals, and building a community around a standardized bus architecture. There may well have been a &lt;em&gt;de facto&lt;/em&gt; agreement within the Amiga community on how to be a well-behaved citizen on the expansion connector.&lt;/p&gt;&#xA;&lt;p&gt;And yes, despite the bus, stuff collided and ran in to incompatibilities within the PC bus, but as evidenced by the vast array of peripherals, from the exotic to the mundane, the PC architecture was very versatile.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-12T11:51:37.527" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11611" PostTypeId="2" ParentId="11606" CreationDate="2019-07-09T19:17:31.180" Score="0" Body="&lt;p&gt;First, having the plans available allowed small companies to build their own IBM PC clones. You didn't have to be a monolithic company like IBM to build one. A modern analogy is that you don't have to be Google to design an Android phone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, each of these numerous little companies did their own marketing, greatly expanding the platform's visibility in the marketplace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third, these companies often shared technology, reducing development and manufacturing costs through economies of scale. Chipsets, CPUs, BIOS firmware, etc.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2019-07-09T19:17:31.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11613" PostTypeId="2" ParentId="11606" CreationDate="2019-07-09T19:55:12.123" Score="6" Body="&lt;p&gt;The hardware in PC clones &lt;em&gt;was not particularly diverse&lt;/em&gt;, if the technical characteristics of the hardware is the distinguishing factor. Yes, there was a great diversity of manufacturers and vendors, but the diversity of features was pretty minimal. It is probably best to describe the PC clones of the 1980s as &lt;strong&gt;vanilla computers&lt;/strong&gt;. And this was their real strength.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the hardware was &quot;PC compatible&quot;, having the basic features required to make it so, it could be counted on to run the popular MS-DOS applications of the time. This actually liberated the user from having to think very much about the diversity of vendors. Most buyers of PC clones at the time weren't venturing into esoteric hardware for highly specific use-cases, nor were they buying components and assembling a properly configured PC themselves. They just wanted a machine to run Wordperfect, Lotus 1-2-3, dBase III, and other popular business titles. Therefore, their buying decision was generally driven by the price-to-performance ratio, and the performance was mainly a matter of CPU (e.g. 8088 vs. 80286 vs. 80386) and clock speed. This allowed for fairly simple buyer comparisons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the diversity of vendors created little real hassle for buyers (they always got the same basic features and compatibility), while also fostering a highly-competitive market where price/performance ratio fell rapidly. It was the rapidity of falling prices with rising performance that allowed the PC clones to overwhelm the competition from Apple and Commodore, not to mention IBM, themselves.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-07-10T14:20:19.560" LastActivityDate="2019-07-10T14:20:19.560" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11614" PostTypeId="1" AcceptedAnswerId="11617" CreationDate="2019-07-09T21:44:38.493" Score="9" ViewCount="354" Body="&lt;p&gt;I frequently see these kinds of pins go for sale,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/44hhR.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/44hhR.jpg&quot; alt=&quot;Bell Labs Star Pins&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of the two pins in the picture read &quot;Bell Telephone Laboratories 1875&quot;. One of the pins has two stars, the other three.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What did it mean to have two-stars, three-stars, or four-stars on your lapel pin? Were these given to engineers, or sales people?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="8579" LastEditDate="2019-07-10T03:13:25.880" LastActivityDate="2019-07-10T03:13:42.113" Title="What do the stars mean on the Bell Labs Pins (company culture)?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11616" PostTypeId="2" ParentId="5024" CreationDate="2019-07-09T22:06:07.830" Score="3" Body="&lt;p&gt;Mendel Palace, GameFreak's first game, was written in family basic, so it is powerful enough to run a real-time puzzler. I read it in a book.&lt;/p&gt;&#xA;" OwnerUserId="14570" LastActivityDate="2019-07-09T22:06:07.830" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11617" PostTypeId="2" ParentId="11614" CreationDate="2019-07-10T01:33:54.730" Score="11" Body="&lt;p&gt;Thanks to the lead by &quot;Janka&quot; in the comments, these are merely five year service pins,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MSIoV.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MSIoV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;https://www.americanradiohistory.com/Archive-Bell-Laboratories-Record/40s/Bell-Laboratories-Record-1944-Aug.pdf&quot; rel=&quot;noreferrer&quot;&gt;Bell Laboratories &quot;Record&quot; (their magazine) 1944 August&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Charles G. Spencer of the Switching Development Department, with the longest service record of any present member of the Laboratories, receives his 45 year pin from Dr. Buckley.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Oliver_Ellsworth_Buckley&quot; rel=&quot;noreferrer&quot;&gt;Dr. Oliver E. Buckley&lt;/a&gt; was the chairman of the board of the Bell Telephone Laboratories. This seems to be part of a long standing tradition at Bell Labs to commemorate employment anniversaries in lustrums.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CJnex.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CJnex.png&quot; alt=&quot;listing of employment anniversaries from &amp;quot;Record&amp;quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="8579" LastEditDate="2019-07-10T03:13:42.113" LastActivityDate="2019-07-10T03:13:42.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11618" PostTypeId="2" ParentId="11606" CreationDate="2019-07-10T04:02:24.513" Score="4" Body="&lt;p&gt;The word &quot;ecosystem&quot; in your question gives a clue to the answer:&#xA;hardware platforms evolve, to a greater or lesser degree, after&#xA;release. It's inevitable that technology will progress to offer new&#xA;capabilities after release, and one of the factors in the long-term&#xA;success of a platform is how well these (often entirely unanticipated)&#xA;new capabilities, such as networking, can be integrated into existing&#xA;systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two major factors that affect this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first is the relative distance between the main bus of the&#xA;computer and the expansion attachment points. Typically, the closer to&#xA;the main bus and the fewer constraints, the faster devices can run and&#xA;the more cheaply they can be made because less interface hardware is&#xA;required. (Some devices, such as hard drives and network cards, become&#xA;less useful if they can be used only at very slow speeds.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a system like the Atari 800, where new devices almost invariably&#xA;had to be attached to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_SIO&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari SIO serial bus&lt;/a&gt;, this required&#xA;extra hardware in the device to handle the bus protocol and also&#xA;placed a couple of layers of hardware between the CPU and the device,&#xA;greatly slowing the data transfer speed as opposed to a device on the&#xA;main bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By contrast, a card plugged into an Apple II slot was directly on the&#xA;system bus and typically require only minimal interface logic, with&#xA;the CPU usually directly accessing the core chips of the peripheral.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Offering only one slot for direct bus access was often nearly as&#xA;harmful as not offering it at all; the Commodore 64's cartridge port&#xA;was directly on the system bus but, because there was only one&#xA;cartridge port, almost all peripherals ended up on the somewhat slower&#xA;user port (essentially a parallel port, and even here there was only&#xA;one) or most often the horribly slow &lt;a href=&quot;https://www.c64-wiki.com/wiki/Serial_Port&quot; rel=&quot;nofollow noreferrer&quot;&gt;CBM serial bus&lt;/a&gt;. (You could&#xA;buy expansion units that would give you multiple cartridge ports, but&#xA;here again we now have the issue of extra cost, though for the user&#xA;rather than the peripheral developer.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second factor is whether a peripheral is adding missing&#xA;functionality or simply an improvement over existing functionality.&#xA;This is basically a cost issue: you'll sell a lot more sound cards of&#xA;any kind for a system that has extremely poor or no sound capabilities&#xA;than you will improved sound cards for a system that already has sound&#xA;capabilities. (And of course the initial system cost for an otherwise&#xA;equivalent system with no sound capabilities is lower, tending to help&#xA;with initial sales.) Thus platforms that start with &quot;good enough&quot;&#xA;capabilities in some area such as sound tend towards keeping those&#xA;same capabilities over the life of the system, whereas platforms very&#xA;poor in such areas will have new platform owners continually buying&#xA;slightly better peripherals than previous owners and you'll tend to&#xA;see the capabilities broadly available in the population increase over&#xA;time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So basically what it comes down to is that providing direct bus access&#xA;for peripherals and fewer capabilities makes it easier and cheaper to&#xA;add new capabilities both initially and over the life of the system,&#xA;at the cost of users having to deal with a lot more software&#xA;configuration complexity to handle both the wider variety of&#xA;peripherals and the lack of standard interface routines from the&#xA;start.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-07-10T04:02:24.513" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11619" PostTypeId="2" ParentId="11544" CreationDate="2019-07-10T05:13:41.050" Score="1" Body="&lt;p&gt;Reasonably effective source code control has been around for a long time, and used in a disciplined way in large projects since long before Final Fantasy VIII started development. For example, the initial import of 4.4BSD-Lite2 source code into &lt;a href=&quot;https://en.wikipedia.org/wiki/Concurrent_Versions_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;CVS&lt;/a&gt; to start the NetBSD project was done in July 1992 (growing within a few months to over 6500 files and 2 million lines), and the revision history has been maintained continuously since then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem here is that computer source code is only a small fraction of the assets needed to build a game: you also have all the graphical and sound content, in comparison with which the source code is trivial in size. These are nowhere near as easy to compress as multiple substantially similar versions of text files, and even that aside have generally been too large to keep in a standard source code revision control system without slowing it to a crawl. (There have been attempts at addressing this, such as by &lt;a href=&quot;https://en.wikipedia.org/wiki/Perforce&quot; rel=&quot;nofollow noreferrer&quot;&gt;Perforce&lt;/a&gt; in the mid- to late-'90s, but not all game development houses had the time or money to try to implement such solutions.) Thus, large assets are usually stored separately, sometimes without any real revision control on them at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, for non-code assets the distinction between &quot;source&quot; and &quot;built&quot; products is less clear. For example, the article to which you linked pointed out:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...but the gorgeous pre-rendered 3D backgrounds look grainy and pixelated. This is because these pre-rendered backgrounds have, for the most part, been lost. All of the backgrounds in FF7, 8 and 9 were created at a far higher resolution than needed then compressed down to fit into 320×240 or 640×480 resolutions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It would be normal during the development for a particular platform, such as PlayStation, to do the compression and downscaling once and always use that product when doing a build, rather than spend the extra time and disk storage to do the compression and downscaling with every build.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disciplined use of source code control was not truly widespread in the industry in the '90s anyway, and that in combination with the particular problems and barriers posed by relatively massive game assets and the generally high pressure of game development schedules meant that most games development tended to take an ad-hoc approach without a lot of effort and expense put into archiving.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-07-10T05:13:41.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11620" PostTypeId="2" ParentId="11573" CreationDate="2019-07-10T06:58:42.530" Score="2" Body="&lt;p&gt;While there is no evidence that Acorn released a general-purpose co-processor, they &lt;em&gt;did&lt;/em&gt; intend to (at one point).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A review of the Archimedes line, in the &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/Mags/PCW/PCW_Aug87_Archimedes.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;August 1987&lt;/a&gt; issue of Personal Computer World magazine, includes the following statement:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So far Acorn&#xA;   has announced its intention to produce&#xA;   the following podules: 'Floating Point', a&#xA;   hardware floating point coprocessor; '&#xA;   ROM', a card to hold ROM based&#xA;   applications, similar to the BBC sideways&#xA;   ROMs; 'BBC I/0', which reproduees the&#xA;   ports of the BBC B and Master, including&#xA;   DtoA and 1MHz bus; 'MIDI', the music&#xA;   synthesiser control; &lt;strong&gt;and '80186', which&#xA;   runs an MSDOS environment for IBM&#xA;   software.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Acorn had used the 80186 for an add-on second processor for the BBC Micro, and was sold built-in as part of the BBC Master 512.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the absence of the 80186 for the Archimedes line, a third party manufacturer eventually stepped in. Aleph One released a number of PC Expansion cards based on 386 and 486 processors. One of these was reviewed by PC World in &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/Mags/PCW/PCW_Dec92_Aleph1PCExpCard.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;December 1992&lt;/a&gt;. (This would have been toward the end of the Archimedes' lifetime, a year and a half before the launch of the RISC PC.) They also released &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/32bit_UpgradesA2G/Aleph1_PC_minipodule.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;an expansion&lt;/a&gt; for the smaller A3000/A4000 machines (which did not have an internal podule bay).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It remains the case that Acorn didn't release their own add-on processor, leaving it to the aftermarket instead.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-07-10T06:58:42.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11621" PostTypeId="2" ParentId="11597" CreationDate="2019-07-10T08:44:15.187" Score="11" Body="&lt;p&gt;Your question is backwards, the Amiga and Atari ST were really the only computers that had mainly bootable games on floppy, pretty much every other disk-based PC required you to boot into the OS first, then boot your game. There are a very small number of exceptions on the PC, but they are rare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simple answer is that the Amiga and ST had part of their OS stored on ROM, for the Amiga this was named a &quot;Kickstart&quot; ROM and this could be updated or flashed with new versions. This was effectively &quot;DOS&quot; for the Amiga, and it was built into every machine. You could load the more fleshed-out &quot;Workbench&quot; from floppy or HDD, but Kickstart was always loaded when the machine turned on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a game wanted to be self-booting on the Amiga, all they needed to do was issue a few Kickstart commands and you would be ready to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a game wanted to be self-booting on the PC, there was no built-in OS, just some very high-level BIOS commands as standard. The game would have to have an entire kernel and OS included, and you couldn't just distribute DOS with your game. So unless you wanted to code an entire IBM PC kernel and OS (which was far more possible in the early days when there was only three types of CPU, two types of graphics adapter and one type of sound hardware), then you would have to rely on the user to already have DOS.&lt;/p&gt;&#xA;" OwnerUserId="14577" LastActivityDate="2019-07-10T08:44:15.187" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="11622" PostTypeId="1" CreationDate="2019-07-10T11:25:14.273" Score="7" ViewCount="974" Body="&lt;p&gt;I have a cople of HP BASIC (HP9000) files that have been saved in a non-ASCII format (HFSLIF?). Does anyone know of a conversion utility to get the code readable?&#xA;The files are already on a win7 machine and I just want to read the content, not execute it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards,&#xA; Staffan &lt;/p&gt;&#xA;" OwnerUserId="14580" LastActivityDate="2019-08-25T19:12:12.257" Title="Read HP Basic (RMB) tokenized file into clear text?" Tags="&lt;basic&gt;" AnswerCount="2" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11623" PostTypeId="1" CreationDate="2019-07-10T11:51:35.143" Score="13" ViewCount="984" Body="&lt;p&gt;I have connected two old Conner Peripheral IDE HDDs to a modern computer using Deltaco USB to SATA/IDE adaptors.&#xA;The drives in question are:&#xA;Conner CP30121 (120 MB)&#xA;Conner CFA2161A (210 MB)&#xA;Both drives have been put in Master/Single Drive mode using jumper settings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When connected to either Linux or Windows, the drives show up as 2TB unknown partitions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;lsblk outputs:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT&#xA;sda      8:0    0 465.8G  0 disk &#xA;├─sda1   8:1    0   512M  0 part /boot/efi&#xA;└─sda2   8:2    0 465.3G  0 part /&#xA;sdb      8:16   0     2T  0 disk &#xA;sdc      8:32   0     2T  0 disk &#xA;sr0     11:0    1  1024M  0 rom  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;hwinfo output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;disk:                                                           &#xA;  /dev/sdb             Conner P eripherals 210MB&#xA;  /dev/sdc             Conner P eripherals 120MB&#xA;  /dev/sda             ST500DM002-1BD14&#xA;partition:&#xA;  /dev/sda1            Partition&#xA;  /dev/sda2            Partition&#xA;cdrom:&#xA;  /dev/sr0             hp CDDVDW SH-216BB&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;any attempt I've made to further communicate or mount the drives have failed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;dmesg outputs:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[ 2225.625396] usb 4-1.1.1: new SuperSpeed Gen 1 USB device number 7 using xhci_hcd&#xA;[ 2225.646865] usb 4-1.1.1: New USB device found, idVendor=1f75, idProduct=0611, bcdDevice= 0.06&#xA;[ 2225.646868] usb 4-1.1.1: New USB device strings: Mfr=4, Product=5, SerialNumber=6&#xA;[ 2225.646871] usb 4-1.1.1: SerialNumber: 20160524&#xA;[ 2225.650461] usb-storage 4-1.1.1:1.0: USB Mass Storage device detected&#xA;[ 2225.650723] scsi host6: usb-storage 4-1.1.1:1.0&#xA;[ 2226.679081] scsi host6: scsi scan: INQUIRY result too short (5), using 36&#xA;[ 2226.679088] scsi 6:0:0:0: Direct-Access     Conner P eripherals 120MB  - C PQ: 0 ANSI: 4&#xA;[ 2226.679509] sd 6:0:0:0: Attached scsi generic sg2 type 0&#xA;[ 2226.681705] sd 6:0:0:0: [sdb] Very big device. Trying to use READ CAPACITY(16).&#xA;[ 2226.681965] sd 6:0:0:0: [sdb] 4294967296 512-byte logical blocks: (2.20 TB/2.00 TiB)&#xA;[ 2226.683283] sd 6:0:0:0: [sdb] Write Protect is off&#xA;[ 2226.683286] sd 6:0:0:0: [sdb] Mode Sense: 3b 00 00 00&#xA;[ 2226.684644] sd 6:0:0:0: [sdb] No Caching mode page found&#xA;[ 2226.684649] sd 6:0:0:0: [sdb] Assuming drive cache: write through&#xA;[ 2226.685141] sd 6:0:0:0: [sdb] Very big device. Trying to use READ CAPACITY(16).&#xA;[ 2226.855960] sd 6:0:0:0: [sdb] Very big device. Trying to use READ CAPACITY(16).&#xA;[ 2226.858981] sd 6:0:0:0: [sdb] Attached SCSI disk&#xA;[ 2260.020846] usb 4-1.1.1: reset SuperSpeed Gen 1 USB device number 7 using xhci_hcd&#xA;[ 2371.349949] usb 4-1.1.2: new SuperSpeed Gen 1 USB device number 8 using xhci_hcd&#xA;[ 2371.371514] usb 4-1.1.2: New USB device found, idVendor=1f75, idProduct=0611, bcdDevice= 0.06&#xA;[ 2371.371517] usb 4-1.1.2: New USB device strings: Mfr=4, Product=5, SerialNumber=6&#xA;[ 2371.371520] usb 4-1.1.2: SerialNumber: 20160526&#xA;[ 2371.372991] usb-storage 4-1.1.2:1.0: USB Mass Storage device detected&#xA;[ 2371.373232] scsi host7: usb-storage 4-1.1.2:1.0&#xA;[ 2372.406780] scsi host7: scsi scan: INQUIRY result too short (5), using 36&#xA;[ 2372.406787] scsi 7:0:0:0: Direct-Access     Conner P eripherals 210MB  - C PQ: 0 ANSI: 5&#xA;[ 2372.407305] sd 7:0:0:0: Attached scsi generic sg3 type 0&#xA;[ 2372.407540] sd 7:0:0:0: [sdc] Very big device. Trying to use READ CAPACITY(16).&#xA;[ 2372.407810] sd 7:0:0:0: [sdc] 4294967296 512-byte logical blocks: (2.20 TB/2.00 TiB)&#xA;[ 2372.409213] sd 7:0:0:0: [sdc] Write Protect is off&#xA;[ 2372.409214] sd 7:0:0:0: [sdc] Mode Sense: 3b 00 00 00&#xA;[ 2372.410501] sd 7:0:0:0: [sdc] No Caching mode page found&#xA;[ 2372.410504] sd 7:0:0:0: [sdc] Assuming drive cache: write through&#xA;[ 2372.521835] sd 7:0:0:0: [sdc] Attached SCSI disk&#xA;[ 2407.477391] usb 4-1.1.2: reset SuperSpeed Gen 1 USB device number 8 using xhci_hcd&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I want to be able to connect to and read the contents of the drives, at least to the extent where I can properly image them with either dd or FSK Imager for preservation.&lt;/p&gt;&#xA;" OwnerUserId="14581" LastActivityDate="2020-01-10T17:21:06.303" Title="Old Conner IDE hard drives that are mistakenly detected as being 2TB, how do I connect to and image them?" Tags="&lt;hard-disk&gt;&lt;data-preservation&gt;&lt;ide&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11624" PostTypeId="2" ParentId="11623" CreationDate="2019-07-10T13:04:14.577" Score="13" Body="&lt;p&gt;You’re running into compatibility issues with very old drives. In this particular case, your drives are new enough to support the ATA “identify device” command (which is how your &lt;code&gt;hwinfo&lt;/code&gt; input includes the drive’s names), but there’s something going wrong with the “read capacity” commands. I suspect the reason is that these commands are LBA-based, and your drives are CHS-only (cylinder/head/sector); and when “read capacity 10” fails in certain ways, the Linux libata-based driver assumes that means the drive is &lt;em&gt;too large&lt;/em&gt;, issues “read capacity 16”, and uses the returned value with little interpretation — in particular, if the drive or adapter returns all bits set, the size ends up being interpreted as 2TiB. There’s a decent chance that your USB adapter isn’t too good at error handling for really old devices, and in any case, I don’t think there’s a generic way to issue IDE-specific commands over USB, so there’s nothing better to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don’t think you’ll find a USB adapter which can handle your drives, unfortunately. You’re more likely to be successful with an internal IDE adapter; there are PCI-Express-to-IDE adapters available, so unless you’re stuck with a laptop, that’s what I’d recommend. Look for adapters whose reviews indicate that they work with no drivers under Windows, and even better, look for adapters where reviewers mention (or even complain) that the adapter has an option ROM. (Better still, if you have an older computer with built-in support for IDE drives, use that.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also run into issues with the libata-based support in Linux; if so, the old IDE drivers are still available, at least in the kernel source, and there’s a good chance they’ll be able to handle these old drives. If the drives’ capacities are still mis-detected, you can &lt;a href=&quot;https://www.kernel.org/doc/Documentation/ide/ide.txt&quot; rel=&quot;noreferrer&quot;&gt;even specify the drives’ capacities manually using kernel parameters&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-07-10T13:21:05.363" LastActivityDate="2019-07-10T13:21:05.363" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11625" PostTypeId="2" ParentId="11606" CreationDate="2019-07-10T14:05:43.877" Score="2" Body="&lt;p&gt;I think it was just a nice middle ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Warning: anecdotal knowledge ahead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore/Amiga had basically just one configuration which sold exceptionally good - C64 and A500. Revisions worked well by maintaining compatibility, but did not add any extra performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then came the C128, which had a C64 compatibility mode. No seamless upgrade, but rather a 2-in-1 solution. Developers did not really adopt the new platform well, because they would be cutting out a huge userbase, so the C128 never really caught on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Amiga - they did both Hardware and Operating System themselves, retaining pretty good compatibility, but ultimately went bankrupt, and with them their ecosystem died.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Intel-based IBM PC had everything right in hindsight: variations of the hardware in terms of CPU, RAM, disk drives, sound cards, peripherals... you could buy a new PC, drop your cards in, re-use your disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS was great. I think 6.22 still worked on my 8088 with no problems. All old software I remember could be run on any newer iteration (8088 -&gt; 286, 386, 486; DOS 3.3 -&gt; 5.0, 6.0, 6.2, ...), and new software could be run on a rather old PC as well, if it were not for speed - I remember playing Wolfenstein 3d on my 286, in a very small window though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For graphics, there were just a few standards: (Hercules,) CGA, EGA, VGA. Always backwards compatible, so a VGA card could emulate EGA and CGA. Old games running on a newer PC was the norm. Games were DOS-based anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were no drivers. VGA for games was the norm, and it was standardized. No matter the vendor, a VGA card understood VGA commands, and that was about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sound cards needed drivers, but there were just a few standards, and games supported them. SoundBlaster Pro/16 and AdLib were the most popular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware vendors had to make their cards compatible to those, then they worked as well. I had an ESS Audiodrive which was much cheaper than an original SoundBlaster, I just told all the games I had a SoundBlaster 16 and it worked perfectly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Changing expansion Cards, RAM and even CPUs was dead simple. You open the case, one screw holds the card in place (same system as used still today btw.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For RAM and CPU no extra tools were needed at all. Only with 486s CPU fans became popular. Up to 386s it was common for CPUs to not even have a heat spreader.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could salvage old parts from whoever got rid of them (schools, companies, friends), and upgrade your old PC for free!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Security was not an issue back then. Viruses spread via diskettes, and manual virus scanners were popular and necessary. But apart from that, when a system was running, it ran until it was replaced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were no annoying security updates, it was not uncommon to leave an installation of Windows 3.1, Word 6.0 and whatever you needed untouched for a couple of years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fast forward to Android.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting with a couple of screen resolutions, different sets of hardware buttons, CPUs with varying speeds, and entry level devices with way to little RAM. Top off with apps requiring OS updates which are unfortunately not available for that pricey device you bought just one year ago. Those are the true downsides of an open platform: vendors trying to cater to a price point which tecnically works, but in practice just ruins the experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to DOS. During that period, I perceived no fragmentation. Everything ran everywhere, if your CPU could handle it. Oh, the only thing that absolutely needed a driver loaded in CONFIG.SYS was the CD-Rom drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Graphics Cards were among the first ones to fragment the platform: using Video Drivers in Windows 3.1, you could go beyond 640x480 with 16 colors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This continued with Windows 95, when sound cards did not even bother to retain Soundblaster compatibility - handling Windows Sound was enough. At least Video cards remained VGA compatible, and still are, up to this day.&lt;/p&gt;&#xA;" OwnerUserId="14582" LastActivityDate="2019-07-10T14:05:43.877" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11626" PostTypeId="2" ParentId="11606" CreationDate="2019-07-10T14:23:08.690" Score="3" Body="&lt;p&gt;Very good answers here already; I'll try to focus on direct answers to your questions.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This required users to run an OS, install drivers, manage IRQs and hardware bus addresses, etc. Why was this a strength of the platform, instead of a weakness?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because configuration hassle is much more affordable than buying a new system to support your new hardware.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm thinking specifically of Commodore/Amiga where the hardware was less diverse and end users/programs didn't need to manage so much fragmentation. I'm also thinking of modern examples like Android where fragmentation is a big problem, and iOS where the hardware is less diverse and that is seen as an asset of the platform in ways.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Two points:   &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Amiga was a particularly elegant platform on how its components talked and delegated responsibilities to each other, but its hardware interoperability suffered from a few issues. Notably, the PCMCIA Type II that shipped with the entry model A600 and provided as external hardware interface wasn't fully compatible with the standard since the A600 was released before the standard was finalized (that issue was later partially fixed on the A1200, but then it couldn't support the new 32-bit CardBus peripherals.) Also, it added an extra licensing cost.&lt;/li&gt;&#xA;&lt;li&gt;Commodore, at the time under Mehdi Ali, seemed unwilling to allow Amiga clones to exist - even self-sabotaging a licensing deal with Sun Microsystems not only, but twice, by &lt;a href=&quot;https://arstechnica.com/gaming/2017/01/a-history-of-the-amiga-part-10-the-downfall-of-commodore/&quot; rel=&quot;nofollow noreferrer&quot;&gt;unreasonably raising its licensing fees&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Finally, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why was hardware diversification an asset for the IBM PC ecosystem?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because the IBM PC &lt;em&gt;standard&lt;/em&gt; provided a baseline structure that hardware developers could use to augment the system instead of being forced to develop their own.&lt;/p&gt;&#xA;" OwnerUserId="853" LastActivityDate="2019-07-10T14:23:08.690" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11627" PostTypeId="2" ParentId="1711" CreationDate="2019-07-10T21:21:44.797" Score="11" Body="&lt;p&gt;Here are my findings:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Disclaimers:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This answer is entirely based on mame's mathbox.cpp source and assumes it is correct.&lt;/li&gt;&#xA;&lt;li&gt;This answer focuses on succinct high-level description, even at the cost of being imprecise. (which it is)&lt;/li&gt;&#xA;&lt;li&gt;Despite this, this answer currently misses the high-level intent behind some of the operations. (needs some help from someone more graphics-math-minded?)&lt;/li&gt;&#xA;&lt;li&gt;All names are made up.&lt;/li&gt;&#xA;&lt;li&gt;No warranty etc etc - parts of the answer may be mistaken or incorrect.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;notes:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All registers/operations are signed unless specified otherwise.&lt;/li&gt;&#xA;&lt;li&gt;Internal registers (REGc..REGf) are ignored by this answer.&lt;/li&gt;&#xA;&lt;li&gt;&quot;8.8 fixed-point&quot; means a 16-bit value whose upper 8-bits contain the whole part and lower 8-bit contain the fractional part&#xA;e.g. 0x1234 represents 0x12 + (0x34 / 0x100)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The mathbox consists of some 16-bit registers:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a result register&lt;/li&gt;&#xA;&lt;li&gt;12 user-facing registers REG0..REG11 (and some internal ones)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The mathbox has 3 8-bit read addresses:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;read status byte (0 means done)&lt;/li&gt;&#xA;&lt;li&gt;read low byte of result&lt;/li&gt;&#xA;&lt;li&gt;read high byte of result&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;And 32 8-bit write addresses:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;00 - write low/frac byte of REG0, set result to REG0&lt;/li&gt;&#xA;&lt;li&gt;01 - write high/whole byte of REG0, set result to REG0&lt;/li&gt;&#xA;&lt;li&gt;02 - write low/frac byte of REG1, set result to REG1&lt;/li&gt;&#xA;&lt;li&gt;03 - write high/whole byte of REG1, set result to REG1&lt;/li&gt;&#xA;&lt;li&gt;04 - write low byte of REG2, set result to REG2&lt;/li&gt;&#xA;&lt;li&gt;05 - write high byte of REG2, set result to REG2&lt;/li&gt;&#xA;&lt;li&gt;06 - write low byte of REG3, set result to REG3&lt;/li&gt;&#xA;&lt;li&gt;07 - write high byte of REG3, set result to REG3&lt;/li&gt;&#xA;&lt;li&gt;08 - write low/frac byte of REG4, set result to REG4&lt;/li&gt;&#xA;&lt;li&gt;09 - write high/whole byte of REG4, set result to REG4&lt;/li&gt;&#xA;&lt;li&gt;0a - write low/frac byte of REG5, set result to REG5&lt;/li&gt;&#xA;&lt;li&gt;0b - write high/whole byte of REG5, then do &lt;strong&gt;sub-then-cross-product&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;0c - write low byte of REG6, set result to REG6&lt;/li&gt;&#xA;&lt;li&gt;0d - write low byte of REG10, set result to REG10&lt;/li&gt;&#xA;&lt;li&gt;0e - write high byte of REG10, set result to REG10&lt;/li&gt;&#xA;&lt;li&gt;0f - write low byte of REG11, set result to REG11&lt;/li&gt;&#xA;&lt;li&gt;10 - write high byte of REG11, set result to REG11&lt;/li&gt;&#xA;&lt;li&gt;11 - write high byte of REG5, then do &lt;strong&gt;divide-products&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;12 - do &lt;strong&gt;dot-product&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;13 - do &lt;strong&gt;divide-REG89&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;14 - do &lt;strong&gt;divide&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;15 - write low byte of REG7, set result to REG7&lt;/li&gt;&#xA;&lt;li&gt;16 - write high byte of REG7, set result to REG7&lt;/li&gt;&#xA;&lt;li&gt;17 - set result to REG7&lt;/li&gt;&#xA;&lt;li&gt;18 - set result to REG9&lt;/li&gt;&#xA;&lt;li&gt;19 - set result to REG8&lt;/li&gt;&#xA;&lt;li&gt;1a - write low byte of REG8, set result to REG8&lt;/li&gt;&#xA;&lt;li&gt;1b - write high byte of REG8, set result to REG8&lt;/li&gt;&#xA;&lt;li&gt;1c - write high byte of REG5, then do &lt;strong&gt;window-test&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;1d - write high byte of REG3, then do &lt;strong&gt;diff-max-plus-3/8-diff-min&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;1e - do &lt;strong&gt;max-plus-3/8-min&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;1f - unknown (selftest or signature analysis?)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Operation descriptions:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;sub-then-cross-product:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  REG4 -= REG2&#xA;  REG5 -= REG3&#xA;  do cross-product&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;cross-product:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  // inputs are 8.8 fixed-point&#xA;  // interpretable as 2d vectors (REG0, REG1) and (REG5, REG4)&#xA;  REG7 = REG0 * REG4 - REG1 * REG5&#xA;  result = REG7&#xA;  // REG7 receives whole part of result, fractional part goes nowhere&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;dot-product:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  // inputs are 8.8 fixed-point&#xA;  // interpretable as 2d vectors (REG0, REG1) and (REG5, REG4)&#xA;  REG8.REG9 = REG0 * REG5 + REG1 * REG4&#xA;  result = REG8&#xA;  // REG8 receives whole part of result,&#xA;  // REG9 receives fractional part - but with its lowest bit forced to 0&#xA;  //&#xA;  // WARNING: going by the mame source, this operation can continue and do &#xA;  // a divide-REG89 as well (also changing the result register) &#xA;  // if internal register REGf is not -1.&#xA;  // (Things like calling sub-then-cross-product or any divide  &#xA;  //  will set it to -1, but reset &amp;amp; window-test will likely set it&#xA;  //  to some other value.)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;divide-REG89:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  // REG8 should be the high/whole part of dividend, &#xA;  // REG9 - the low/fractional part. &#xA;  // REG7 is an integer&#xA;  result = REG8.REG9 / REG7, using a size of REG6 (see below)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;divide:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  // REG11 should be the high/whole part of dividend, &#xA;  // REG10 - the low/fractional part. &#xA;  // REG7 is an integer&#xA;  result = REG11.REG10 / REG7, using a size of REG6 (see below)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;divide's REG6 explanation:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;REG6 controls the size of the division as follows:&lt;/li&gt;&#xA;&lt;li&gt;if REG6 is set to 16, then the full 32-bit dividend is divided by the divisor, resulting in a 16-bit result.&lt;/li&gt;&#xA;&lt;li&gt;if REG6 is set to 8, then only the middle two bytes of the two-word dividend comprise an 8.8 fixed-point dividend, though the other bytes should be 0 (lowest byte) and sign-extension (highest byte) to get a correct result, which is in 1.8 fixed point.&lt;/li&gt;&#xA;&lt;li&gt;other REG6 values (&amp;lt;= 16) seem to act similarly, making up a REG6.REG6 fixed-point dividend, &quot;centered&quot; between the dividend's two words. (Other bits should be 0s and sign-extensions), with the result being in 1.REG6 fixed point.&lt;/li&gt;&#xA;&lt;li&gt;(a lower REG6 is faster)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;divide-products:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  // effectively, if REG0,REG1 and REG5,REG4 are 2D vectors&#xA;  // this operation computes their (dot-product + REG3),&#xA;  // divided by their (cross-product + REG2)&#xA;  // (TODO: there's probably a better explanation of what this actually achieves)&#xA;&#xA;  do cross-product // -&amp;gt; REG7&#xA;  do dot-product // -&amp;gt; REG8.REG9&#xA;  REG7 += REG2&#xA;  REG8 += REG3&#xA;  REG9 &amp;amp;= 0xff00 // mask lower byte (presumably to allow REG6 being &amp;gt;= 8)&#xA;  do divide-REG89 // this sets result to the division result&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;window-test:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  // likely related to computing midpoint-subdivision for line-clipping, or a similar algorithm (thanks @fadden)&#xA;  do (REG6 + 1) times:&#xA;  {&#xA;    midx = (REG4 + REG7) / 2&#xA;    midy = (REG5 + REG8) / 2&#xA;    if (midx &amp;gt; REG11 &amp;amp;&amp;amp; midx &amp;gt; midy &amp;amp;&amp;amp; midx + midy &amp;gt;= 0):&#xA;    {&#xA;      REG7 = midx&#xA;      REG8 = midy&#xA;    }&#xA;    else&#xA;    {&#xA;      REG4 = midx&#xA;      REG5 = midy&#xA;    }&#xA;  }&#xA;  REG6 = -1&#xA;  result = REG8&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;diff-max-plus-3/8-diff-min:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  REG2 = abs(REG2 - REG0)&#xA;  REG3 = abs(REG3 - REG1)&#xA;  do max-plus-3/8-min&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;max-plus-3/8-min:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  result = max(REG2, REG3) + (3/8) * min(REG2, REG3)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Thanks for Tommy and fadden for pointing out that the complex math is most likely meant to be vector math.&lt;/p&gt;&#xA;" OwnerUserId="10686" LastEditorUserId="10686" LastEditDate="2019-07-11T02:36:37.423" LastActivityDate="2019-07-11T02:36:37.423" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11628" PostTypeId="1" AcceptedAnswerId="11629" CreationDate="2019-07-10T22:14:46.487" Score="11" ViewCount="1475" Body="&lt;p&gt;I'm trying to understand how video memory worked on the Commodore64 in text mode. I see that the VIC-II has a memory setup register (at $D018) that keeps track of some of this information along with the CIA 2's VIC Memory Bank register (at $DD00).&lt;/p&gt;&#xA;&lt;p&gt;In looking at &lt;a href=&quot;http://sta.c64.org/cbm64mem.html&quot; rel=&quot;noreferrer&quot;&gt;this description of the C64 memory map&lt;/a&gt;, I'm a little confused about what the combination of these 2 registers is pointing at. I think I understand how to construct the appropriate pointer from those values, but I don't think I understand what it's pointing to. I'm wondering if anyone can elucidate this for me?&lt;/p&gt;&#xA;&lt;p&gt;The memory bank appears to be a pointer to one of 4 16k-aligned areas of memory. The Memory Setup Register is a (bit-shifted) offset from that. It says this about the the memory setup register:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Memory setup register. Bits:&lt;/p&gt;&#xA;&lt;p&gt;    Bits #1-#3: In text mode, pointer to character memory (bits #11-#13), relative to VIC bank, memory address $DD00. Values:&lt;/p&gt;&#xA;&lt;p&gt;        %000, 0: $0000-$07FF, 0-2047.&lt;/p&gt;&#xA;&lt;p&gt;        %001, 1: $0800-$0FFF, 2048-4095.&lt;/p&gt;&#xA;&lt;p&gt;        %010, 2: $1000-$17FF, 4096-6143.&lt;/p&gt;&#xA;&lt;p&gt;        %011, 3: $1800-$1FFF, 6144-8191.&lt;/p&gt;&#xA;&lt;p&gt;        %100, 4: $2000-$27FF, 8192-10239.&lt;/p&gt;&#xA;&lt;p&gt;        %101, 5: $2800-$2FFF, 10240-12287.&lt;/p&gt;&#xA;&lt;p&gt;        %110, 6: $3000-$37FF, 12288-14335.&lt;/p&gt;&#xA;&lt;p&gt;        %111, 7: $3800-$3FFF, 14336-16383.&lt;/p&gt;&#xA;&lt;p&gt;Values %010 and %011 in VIC bank #0 and #2 select Character ROM instead.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What is &amp;quot;character memory&amp;quot; in this case? Is it some sort of bitmap of what each character should look like, or is it the encoding of actual characters that are on the screen? (Like when you do &lt;code&gt;POKE 1024,1&lt;/code&gt; and it puts an &amp;quot;A&amp;quot; in the upper left of the screen?) The reason I'm confused is because each range is 2 kilobytes, and that seems too little for character bitmaps (only 64 characters) and too big for the number of characters displayed on screen (which can only fit 1000 characters).&lt;/p&gt;&#xA;" OwnerUserId="14588" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-11T02:50:58.267" Title="Understanding C64 Character Memory" Tags="&lt;commodore-64&gt;&lt;text&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11629" PostTypeId="2" ParentId="11628" CreationDate="2019-07-11T02:45:23.383" Score="10" Body="&lt;p&gt;&quot;Character memory&quot; is the bitmapped definitions for each of the characters (e.g. &quot;glyphs&quot;) that are displayed in text mode, based on the &quot;character codes&quot; that are poked into the &quot;screen memory&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on which graphics mode you enable, there are several different memory areas that will be accessed by the VIC-II in creating the display. If we only focus on text mode (ignoring bitmapped graphics mode), then the relevant memory areas are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;em&gt;VIC-II bank&lt;/em&gt; - specifies which 16KB bank of the memory map is used by the VIC-II. Default is $0000-$3FFF, and depends on bits 0/1 in $DD00.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Screen memory&lt;/em&gt; - for text mode, this is the 1KB used to hold the character codes for each character in the 40x25 screen. Default is $0400-$07FF and depends on bits 4-7 of $D018, given as an offset to the VIC-II bank.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Character memory&lt;/em&gt; - for text mode, this is the 2KB used to hold the glyph data for the 256 possible characters, where each character is an 8x8 bitmap. Default is the Character ROM data $D000-$D7FF and depends on bits 1-3 of $D018, also given as an offset. Special provisions are made to tell the VIC-II to use the character ROM vs. user-defined characters in the VIC-II bank memory.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Color memory&lt;/em&gt; - for text mode, this is the 1KB used to hold the (normally foreground) color code for each character specified in screen memory. Only the lower nibble is used to specify 1 of 16 possible colors per character glyph. Color memory is always located at $D800-$DBFF.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There are additional memory areas and &quot;complexifiers&quot; if you enable multicolor and bitmap modes.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-07-11T02:50:58.267" LastActivityDate="2019-07-11T02:50:58.267" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11630" PostTypeId="2" ParentId="11597" CreationDate="2019-07-11T05:04:43.623" Score="1" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Floppy disks were extremely unreliable. As a consumer, if I knew a game would only be usable by booting from it's own floppy disk, I'd be immediately turned off on buying that game because I know that sooner or later, that floppy disk is going to be rubbed raw by the floppy drive's read heads and turned into rubbish. Then I'll be out of my money and without my game. Even if the bootable game didn't employ copy protection schemes (which most bootable games did), I'd still be out the cost of a replacement floppy disk.&lt;/p&gt;&#xA;&lt;p&gt;Hard drives, while still a bit unreliable back then, were significantly better.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Self booting means you don't have access to any of the FAT filesystem code in DOS. That means you can't safely access the hard disk. In fact, you couldn't even use many of the standard C library routines. You'd have to make BIOS calls yourself and try accessing the raw disk directly, which is pretty impractical. Tiny games could be contained within the size limitations of a floppy so that using raw BIOS reads (without a filesystem) might be manageable, but beyond that it was so much more reasonable to just simply require DOS.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Booting was really slow in the old days. Many BIOS's would do a Power On Self Test procedure that would take way too long. Imagine trying to develop a game where you had to reboot to test each iteration of your code? Pretty impractical. So, most programs were developed under DOS where you could switch back and forth between testing your code and running your development environment pretty quickly. Your game was by default already DOS compatible at this point, so making it into a self-booting image meant you had to do MORE development before you could release. Waste of time for most people, other than those bent on implementing copy protection schemes.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Incompatibility. The IBM PC was largely popular because there were so many competing vendors producing different, yet still mostly compatible clones of each other's hardware, driving down costs of computers. The problem is, you often needed software to, at the very least, initialize the hardware into a state of compatibility at boot time. Or in the case of Mice and CD-ROM drives, you needed a terminate and stay resident driver that knew how to talk the proprietary hardware protocols, while providing a generic API for applications. Making a self booting game meant that your game very likely would have compatibility problems for many of your otherwise potential users.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="14591" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-12T03:35:15.023" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="11631" PostTypeId="2" ParentId="11622" CreationDate="2019-07-11T07:44:02.033" Score="8" Body="&lt;p&gt;&lt;strong&gt;Complete reedit due to new information and 30K limit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ok I tried your &lt;a href=&quot;https://ulozto.net/!HPLYtSyXMtdg/basic-ascii-zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;new files&lt;/a&gt;. the files without extensions should have &lt;code&gt;*.HPI&lt;/code&gt; extensions (HP Image) and should be decoded to files first. They have &lt;code&gt;HFSLIF&lt;/code&gt; signature at start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To decode them the easiest is to use emulator. However to do this on your own we need either decoding table + fileformat description or binary+ASCII of the same program so we can infer the file format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After some googling I found this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.hp9845.net/9845/projects/hpdir/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The HPDir Project&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;see there the part &lt;strong&gt;Background: The LIF File System&lt;/strong&gt; it looks like the files you linked matches their fileformat description. Here start of &lt;strong&gt;FW_UPGRADE&lt;/strong&gt; in hex:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00000000: | 80 00 48 46 53 4c 49 46 00 00 00 01 10 00 00 00 | € HFSLIF   &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;so:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;8000         magic&#xA;4846534c4946 volume label &quot;HFSLIF&quot;&#xA;00000001     directory start&#xA;1000         LIF ID&#xA;0000         unused&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So now its just the matter of decoding the DISC/file image into binary and try to detokenize. btw at the same page is also their utility to do this for download... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the non ASCII files are DISC images not files !!! I tried the &lt;code&gt;hpdir&lt;/code&gt; utility from the previous link and this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;hpdir -c -extract FW_UPGRADE.htm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;will extract the PROG file from DISC image into file &lt;code&gt;WS_FILE.PROG&lt;/code&gt; which is a bit smaller than the original DISC image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However It looks like there is absolutely no tool to convert the binary into ASCII (all just extract files from the DISC images) nor I can find any TOKEN code table anywhere (with codes not just Keyword listing) so the only way now would be to reverse engineer the encoding. For that its necessary to have ASCII and Binary files of the same program containing all the Keywords and data representations (integer,float,string ...) Which we have now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end of &lt;a href=&quot;https://archive.org/details/bitsavers_hp9000basi5.0LanguageReferenceVol2Aug88_13838350/&quot; rel=&quot;nofollow noreferrer&quot;&gt;HP9000 BASIC 5.0 Language Reference Vol2&lt;/a&gt; (thx to wizzwizz4) I found table of &lt;strong&gt;BASIC keywords&lt;/strong&gt; supported by HP9000 &#xA;Sadly without the tokenisation codes :( so a cross-match or inferring is needed (some commands are recognizable like &lt;code&gt;PRINT,REM&lt;/code&gt; others need some reversing or pairing with known BASIC ASCII source ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Here actual FileFormat summary:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-------------------------------------------------------------------------&#xA;// file start&#xA;// 16 bit: 0000 FFFF size 4000 0007? 00     00C2     00C2 00 FFFF          0000&#xA;// 32 bit: 0000 FFFF size 4000 0007? 00 000000C2 000000C2 40 0000 FFFFFFFF 0000&#xA;&#xA;// 16bit line encoding examples&#xA;[02 BA 01 B3]                   RETURN Model$&#xA;[B5] 2 [00 02] RP [02 FB BA 01 B3 8E]       RETURN &quot;RP&quot;&amp;amp;File$&#xA;[B5] 2 [00 06] 46020A [BA 01 B3 8E]     RETURN &quot;46020A&quot;&#xA;[B5] 2 [00 05] OTHER [BA 01 B3]         RETURN &quot;OTHER&quot;&#xA;[81 BA 01 B3]                   RETURN 1&#xA;[80 BA 01 B3]                   RETURN 0&#xA;[84 BD] # [B3]                  WAIT 4&#xA;[85 BD] # [B3]                  WAIT 5&#xA;B5 31 02 80 B5 18 3F D3 33 33 33 33 33 33 BD 24 02 B3       BEEP 640,.3&#xA;[B5] 1 [00 C8 B5 18] ? [E0 00 00 00 00 00 00 BD] $ [02 B3]  BEEP 200,.5&#xA;[8B B5 18 8E] ? [E0 00 00 00 00 00 00 BD] $ [02 B3]     BEEP 100,.5&#xA;&#xA;-------------------------------------------------------------------------&#xA;all offsets: are in decadic !!!&#xA;-------------------------------------------------------------------------&#xA;[16 bit Header]&#xA;08: DWORD   start of last BASIC line&#xA;12:     Starting section&#xA;17: DWORD   00C200C2&#xA;38: DWORD   start of first BASIC line&#xA;46: DWORD   start of variable table&#xA;&#xA;[16 bit Section]&#xA;00: BYTE    ID 40/48/C0/C8&#xA;03: BYTE    intendation (probably ORed with another flags in higher bits)&#xA;04: WORD    line umber (0 for starting section which is not code)&#xA;14: WORD    offset to next section&#xA;28: WORD    offset to next line (inside section)&#xA;??:     code&#xA;&#xA;[16 bit line]&#xA;00: BYTE    ID 40/48/C0/C8&#xA;01: BYTE    length of pevious line (0 for sections)&#xA;02: BYTE    length of this line (0 if section)&#xA;03: BYTE    intendation (probably ORed with another flags in higher bits)&#xA;04: WORD    line umber (0 for starting section)&#xA;06:     code&#xA;-------------------------------------------------------------------------&#xA;[32 bit Header]&#xA;08: DWORD   start of last BASIC line&#xA;12:     Starting section&#xA;17: DWORD   000000C2&#xA;21: DWORD   000000C2&#xA;&#xA;[32 bit Section]&#xA;??&#xA;&#xA;[32 bit line]&#xA;00: BYTE    ID 40/48/C0/C8&#xA;01: BYTE    length of pevious line (0 for sections)&#xA;02: BYTE    length of this line (0 if section)&#xA;03: BYTE    intendation (probably ORed with another flags in higher bits)&#xA;04: DWORD   line umber (0 for starting section)&#xA;08:     code&#xA;-------------------------------------------------------------------------&#xA;[code]&#xA;&#xA;each line ends with B3 or B3,8E all codes are in [hex]&#xA;&#xA;first byte:&#xA;&#xA;    00      - label: (index of label)&#xA;    &amp;lt;01,30)     - index of variable + 1&#xA;    &amp;lt;80,8E)     - constant &amp;lt;00,0E)&#xA;&#xA;any? byte:&#xA;&#xA;    B6      - ! comment (B6,8E,BYTE size, char string[size])&#xA;    30/07,D4    - Cprint (BYTE parentis,BYTE ?,WORD size+1,char string[size])&#xA;    BC,01,0B/0F - REM (BYTE size,char string[size])&#xA;    B9      - END IF&#xA;    95,B3,8E    - GOSUB&#xA;    9B,A5       - PRINT&#xA;    B8,8E,00,00 - ELSE (WORD ??)&#xA;    BA,00       - RETURN&#xA;    BA,01       - RETURN&#xA;    BC,02,12    - DATA (BYTE size,char string[size])&#xA;    BC,06       - REAL (index of variable) ends A4&#xA;    BC,07       - INTEGER (index of variable) ends A4&#xA;    BD,1C       - STOP&#xA;    BD,05       - END&#xA;    BD,06       - FNEND&#xA;    BD,0D       - OFF ERROR&#xA;    BD,17       - PAUSE&#xA;    BD,23       - WAIT&#xA;    BD,24       - BEEP&#xA;    BC,02,12    - DATA (BYTE size,char string[size])&#xA;    BB,03,0B    - REPEAT&#xA;    BB,03,15    - END SELECT&#xA;    BB,1F,22    - CLEAR ERROR&#xA;    BB,1F,40    - CLEAR SCREEN&#xA;    BB,03,10,8E,00,00 CASE ELSE (WORD ??)&#xA;&#xA;not first byte:&#xA;&#xA;    00      - string operand (BYTE size, char string[size])&#xA;    09      - n-dimensional array variable declaration (WORD: i0:i1,i2:i3,... BYTE A4)&#xA;    B5      - signals combination of more operands&#xA;    90      - operand = operand (operands are stored before)&#xA;-------------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see there are 2 file-formats 16 bit and 32 bit (sadly I got just single 32 bit file and without ASCII one of the first linked firmwares). You can use the &lt;code&gt;00C200C2/000000C2000000C2&lt;/code&gt; pattern to detect it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code is comprised of sections and lines. First section (line number = 0) does not have any code in it but it contains variable table and additional still undetermined stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All other sections contain lines. The last section has negative offset to next section. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Here current decoder C++/VCL:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//---------------------------------------------------------------------------&#xA;AnsiString decode(AnsiString file)  // read HP9000 *.PROG file and convert it to text&#xA;    {&#xA;    // view config&#xA;    bool _enable_wordwrap=true;     // turn word wrapping on/off&#xA;    bool _enable_hexview=true;      // turn hexview on/off&#xA;    // view end columns&#xA;    const int _sz_lin=13;           // adr: lno&#xA;    const int _sz_bas=140;          // adr: lno WAIT 4&#xA;    const int _sz_hex=140+7+(32*3); // adr: lno WAIT 4 | adr: C0 0C 0A 23 ...&#xA;    const int _ops=32;              // max operands&#xA;    // variables&#xA;    DWORD dw;&#xA;    BYTE *dat=NULL,c,*cmd;&#xA;    int a0,a1,a,adrv,adrb,adre;&#xA;    int i,l,_hex,_txt,_ok,_beg,_16bit=0,_32bit=0;&#xA;    int hnd,siz,adr,adr0,adr1,adrh,len,lno,tab,ops;&#xA;    bool eof,eos,sos;               // end of file, end of section, start of section&#xA;    AnsiString lin,txt=&quot;&quot;,op[_ops],cm,s,slin,sbas;&#xA;&#xA;    for (slin=&quot;&quot;,i=0;i&amp;lt;_sz_lin;i++) slin+=&quot; &quot;;  // code intendation&#xA;    for (sbas=&quot;&quot;,i=0;i&amp;lt;_sz_bas;i++) sbas+=&quot; &quot;;  // hex view intendation&#xA;&#xA;    // load file to memory&#xA;    hnd=FileOpen(file,fmOpenRead);  // open source file&#xA;    siz=FileSeek(hnd,0,2);          // get its length&#xA;        FileSeek(hnd,0,0);          // and point to start again&#xA;    dat=new BYTE[siz];              // create buffer&#xA;    FileRead(hnd,dat,siz);          // load to file into it&#xA;    FileClose(hnd);                 // close file&#xA;&#xA;&#xA;    // detect 16/32 bit&#xA;    dw =dat[17]; dw&amp;lt;&amp;lt;=8;&#xA;    dw+=dat[18]; dw&amp;lt;&amp;lt;=8;&#xA;    dw+=dat[19]; dw&amp;lt;&amp;lt;=8;&#xA;    dw+=dat[20];&#xA;    _16bit=(dw==0x00C200C2);&#xA;    _32bit=(dw==0x000000C2);&#xA;&#xA;    // adr of last BASIC line&#xA;    dw =dat[ 8]; dw&amp;lt;&amp;lt;=8;&#xA;    dw+=dat[ 9]; dw&amp;lt;&amp;lt;=8;&#xA;    dw+=dat[10]; dw&amp;lt;&amp;lt;=8;&#xA;    dw+=dat[11]; adre=dw;&#xA;    if (adre+8&amp;gt;siz) adre=siz-8;&#xA;    // adr of first BASIC line&#xA;    dw =dat[38]; dw&amp;lt;&amp;lt;=8;&#xA;    dw+=dat[39]; dw&amp;lt;&amp;lt;=8;&#xA;    dw+=dat[40]; dw&amp;lt;&amp;lt;=8;&#xA;    dw+=dat[41]; adrb=dw+12;&#xA;    if (adrb&amp;gt;adre) adrb=adre;&#xA;    // adr of variables table&#xA;    dw =dat[46]; dw&amp;lt;&amp;lt;=8;&#xA;    dw+=dat[47]; dw&amp;lt;&amp;lt;=8;&#xA;    dw+=dat[48]; dw&amp;lt;&amp;lt;=8;&#xA;    dw+=dat[49]; adrv=dw+12;&#xA;    if (adrv&amp;gt;adrb) adrv=adrb;&#xA;&#xA;    // decode variables to text&#xA;    txt+=&quot;[Variables]\r\n adr sz ix:\r\n&quot;;&#xA;    for (l=0,adr=adrv;adr&amp;lt;adrb;adr++)&#xA;     if (dat[adr])  // size&#xA;        {&#xA;        len=dat[adr]; adr++;&#xA;        txt+=AnsiString().sprintf(&quot;%04X %02X %02X: &quot;,adr-1,len,l);&#xA;        for (lin=&quot;&quot;,i=0;(i&amp;lt;len)&amp;amp;&amp;amp;(adr&amp;lt;adrb);i++)&#xA;            {&#xA;            c=dat[adr]; adr++;&#xA;            if (c&amp;lt;32) c='.';&#xA;            lin+=char(c);&#xA;            } adr--;&#xA;        txt+=lin+&quot;\r\n&quot;; l++;&#xA;        } txt+=&quot;\r\n&quot;;&#xA;&#xA;    // decode BASIC to text&#xA;    if (_16bit) txt+=&quot;[Code 16bit]\r\n&quot;;&#xA;    if (_32bit) txt+=&quot;[Code 32bit]\r\n&quot;;&#xA;    txt+=&quot; adr:    lno code\r\n&quot;;&#xA;    for (adrh=0,adr=0x000C,eof=false;!eof;)         // process all sections&#xA;        {&#xA;        // section start line info&#xA;        adr0=adr;                                   // store starting line&#xA;        tab=dat[adr+ 3];                            // intendation&#xA;        if (_16bit)                                 // line number&#xA;            {&#xA;            dw= dat[adr+4]; dw&amp;lt;&amp;lt;=8;&#xA;            dw+=dat[adr+5]; lno=dw;&#xA;            }&#xA;        if (_32bit)&#xA;            {&#xA;            dw =dat[adr+4]; dw&amp;lt;&amp;lt;=8;&#xA;            dw+=dat[adr+5]; dw&amp;lt;&amp;lt;=8;&#xA;            dw+=dat[adr+6]; dw&amp;lt;&amp;lt;=8;&#xA;            dw+=dat[adr+7]; lno=dw;&#xA;            }&#xA;        sos=(lno&amp;gt;0);                                // section start (except first line (lno = 0)&#xA;        dw =dat[adr+28]; dw&amp;lt;&amp;lt;=8;                    // offset to next line (normal line length)&#xA;        dw+=dat[adr+29]; len=dw;&#xA;        dw =dat[adr+14]; dw&amp;lt;&amp;lt;=8;                    // offset to next section (section length)&#xA;        dw+=dat[adr+15];&#xA;        if (dw&amp;gt;=0x8000)                             // last size iso negative&#xA;            {&#xA;            adr1=adr0-(dw^65535)-1;&#xA;            eof=true;&#xA;            }&#xA;        else adr1=adr0+dw;&#xA;        if (!sos)&#xA;            {&#xA;            adr+=len;                               // first line of code offset&#xA;            adrh=adr;&#xA;            }&#xA;        if (sos)&#xA;         sos=sos;&#xA;        for (eos=false;!eos;)                       // process section lines&#xA;            {&#xA;            // inside section lin info&#xA;            if (!sos)&#xA;                {&#xA;                len=dat[adr+ 1];                    // line length&#xA;                tab=dat[adr+ 3];                    // intendation&#xA;                if (_16bit)                         // line number&#xA;                    {&#xA;                    dw= dat[adr+4]; dw&amp;lt;&amp;lt;=8;&#xA;                    dw+=dat[adr+5]; lno=dw;&#xA;                    }&#xA;                if (_32bit)&#xA;                    {&#xA;                    dw =dat[adr+4]; dw&amp;lt;&amp;lt;=8;&#xA;                    dw+=dat[adr+5]; dw&amp;lt;&amp;lt;=8;&#xA;                    dw+=dat[adr+6]; dw&amp;lt;&amp;lt;=8;&#xA;                    dw+=dat[adr+7]; lno=dw;&#xA;                    }&#xA;                }&#xA;&#xA;            // ----------------------------------------------------------------------------------&#xA;            // process line decoded line lno from dat[adr+0] to dat[adr+len] with intendation tab&#xA;            // ----------------------------------------------------------------------------------&#xA;            // line start&#xA;            lin=AnsiString().sprintf(&quot;%04X: &quot;,adr);&#xA;            // line number&#xA;            lin+=AnsiString().sprintf(&quot;%6u &quot;,lno);&#xA;            // intendation&#xA;            if (tab&amp;lt;=32) for (i=0;i&amp;lt;tab;i++) lin+=&quot; &quot;;&#xA;&#xA;            // decode tokenized line to text&#xA;            a0=adr; a1=adr+len;&#xA;            if (_16bit) a0+=6;&#xA;            if (_32bit) a0+=8;&#xA;            ops=0;      // no operands yet&#xA;            cm=&quot;&quot;;      // no command yet&#xA;&#xA;            if (lno==22)&#xA;             lno=lno;&#xA;&#xA;            for (_hex=0,_txt=0,_ok=1,_beg=1;a0&amp;lt;a1;)&#xA;                {&#xA;                cmd=dat+a0;                             // pointer just to simplify relative decoding for more BYTE tokens&#xA;                c=dat[a0]; a0++;                        // actual processed BYTE&#xA;                if (_ok)                                // no discrepancy yet?&#xA;                    {&#xA;                    if ((c==0x00)&amp;amp;&amp;amp;( _beg))             // Label:&#xA;                        {&#xA;                        a0++; lin+=AnsiString().sprintf(&quot;label%02X:&quot;,cmd[1]); continue;&#xA;                        }&#xA;                    if ((c==0x00)&amp;amp;&amp;amp;(!_beg))             // string operand&#xA;                        {&#xA;                        l=dat[a0]; a0++;                // size&#xA;                        if (a0+l&amp;gt;a1) l=a1-a0;&#xA;                        for (op[ops]=&quot;\&quot;&quot;,i=0;i&amp;lt;l;i++,a0++)&#xA;                         op[ops]+=char(dat[a0]);&#xA;                        op[ops]+=&quot;\&quot;&quot;;&#xA;                        ops++; if (ops&amp;gt;=_ops) break; continue;&#xA;                        }&#xA;                    if ((c&amp;gt;=0x01)&amp;amp;&amp;amp;(c&amp;lt;0x30)&amp;amp;&amp;amp;(_beg))    // variable operand&#xA;                        {&#xA;                        op[ops]=AnsiString().sprintf(&quot;var%02X&quot;,c-1);&#xA;                        ops++; if (ops&amp;gt;=_ops) break; continue;&#xA;                        }&#xA;                    if ((c&amp;gt;=0x80)&amp;amp;&amp;amp;(c&amp;lt;0x8E)&amp;amp;&amp;amp;(_beg))    // small integer constant perand&#xA;                        {&#xA;                        op[ops]=BYTE(c-0x80);&#xA;                        ops++; if (ops&amp;gt;=_ops) break; continue;&#xA;                        }&#xA;                    _beg=0;&#xA;                    if (c==0x8E)                        // end of line [B3 8E]&#xA;                        {&#xA;                        lin+=&quot; |8E|&quot;;&#xA;                        continue;&#xA;                        }&#xA;                    if ((c==0x90)&amp;amp;&amp;amp;(ops==2))            // op1 = op2&#xA;                        {&#xA;                        lin+=op[0]+&quot;=&quot;+op[1]; ops=0; continue;&#xA;                        }&#xA;                    if (c==0xB3)                        // end of line [B3 8E]&#xA;                        {&#xA;                        if (cm!=&quot;&quot;) lin+=cm;&#xA;                        for (i=0;i&amp;lt;ops;i++) lin+=&quot; &quot;+op[i];&#xA;                        lin+=&quot; |B3|&quot;;&#xA;                        ops=0;&#xA;                        cm=&quot;&quot;;&#xA;                        continue;&#xA;                        }&#xA;                    if (c==0xB5)                        // combination of operands&#xA;                        {&#xA;                        a0++; _beg=1;&#xA;                        continue;&#xA;                        }&#xA;                    if (c==0xB6)                        // ! comment&#xA;                        {&#xA;                        a0+=2;                          // skip [B6 8E 07]&#xA;                        l=dat[a0]; a0++;                // size&#xA;                        if (a0+l&amp;gt;a1) l=a1-a0;&#xA;                        for (lin+=&quot;! &quot;,i=0;i&amp;lt;l;i++,a0++)&#xA;                         lin+=char(dat[a0]);&#xA;                        continue;&#xA;                        }&#xA;                    if ((cmd[0]==0x30)||(cmd[0]==0x07)) // Cprint&#xA;                     if (cmd[1]==0xD4)&#xA;                        {&#xA;                        c=' ';&#xA;                        if (cmd[2]==0xB5) c='&quot;';        // parentis&#xA;                        dw =cmd[4]; dw&amp;lt;&amp;lt;=8;             // string size&#xA;                        dw+=cmd[5]; l=dw-1;&#xA;                        lin+=&quot;Cprint(&quot;; lin+=char(c);&#xA;                        a0+=5; if (a0+l&amp;gt;=a1) l=a1-a0-1;&#xA;                        for (i=0;i&amp;lt;=l;i++,a0++) lin+=char(dat[a0]);&#xA;                        lin+=char(c);&#xA;                        lin+=&quot;)&quot;;&#xA;                        continue;&#xA;                        }&#xA;                    if ((cmd[0]==0xBC)&amp;amp;&amp;amp;(cmd[1]==0x01)&amp;amp;&amp;amp;(cmd[2]==0x0B)||(cmd[2]==0x0F))&#xA;                        {&#xA;                        lin+=&quot;REM &quot;; l=cmd[3];&#xA;                        a0+=3; if (a0+l&amp;gt;a1) l=a1-a0;&#xA;                        for (i=0;i&amp;lt;l;i++,a0++) lin+=char(dat[a0]);&#xA;                        continue;&#xA;                        }&#xA;                    if ((cmd[0]==0xBC)&amp;amp;&amp;amp;(cmd[1]==0x06)) // REAL variable declaration&#xA;                        {&#xA;                        lin+=&quot;REAL &quot;+AnsiString().sprintf(&quot;var%02X&quot;,cmd[2]-1); a0+=2; continue;&#xA;                        }&#xA;                    if ((cmd[0]==0xBC)&amp;amp;&amp;amp;(cmd[1]==0x07)) // INTEGER variable declaration&#xA;                        {&#xA;                        lin+=&quot;INTEGER &quot;+AnsiString().sprintf(&quot;var%02X&quot;,cmd[2]-1); a0+=2; continue;&#xA;                        }&#xA;                    if ((cmd[0]==0xBC)&amp;amp;&amp;amp;(cmd[1]==0x02)&amp;amp;&amp;amp;(cmd[2]==0x12)) // DATA&#xA;                        {&#xA;                        lin+=&quot;DATA &quot;; l=cmd[3]; &#xA;                        a0+=3; if (a0+l&amp;gt;a1) l=a1-a0;&#xA;                        for (i=0;i&amp;lt;l;i++,a0++) lin+=char(dat[a0]);&#xA;                        continue;&#xA;                        }&#xA;                    if (cmd[0]==0x09)                   // n dimensional array ???&#xA;                        {&#xA;                        lin+=&quot;(&quot;;&#xA;                        for (;a0+4&amp;lt;=a1;)&#xA;                            {&#xA;                            if (dat[a0]==0xA4) break;   // end of variable declaration&#xA;                            dw =dat[a0]; a0++; dw&amp;lt;&amp;lt;=8;&#xA;                            dw+=dat[a0]; a0++; lin+=AnsiString().sprintf(&quot;%i:&quot;,dw);&#xA;                            dw =dat[a0]; a0++; dw&amp;lt;&amp;lt;=8;&#xA;                            dw+=dat[a0]; a0++; lin+=AnsiString().sprintf(&quot;%i,&quot;,dw);&#xA;                            }&#xA;                        lin[lin.Length()]=')'; continue;&#xA;                        }&#xA;                    if (cmd[0]==0xB9){ cm=&quot;END IF&quot;; continue; }&#xA;                    if ((cmd[0]==0x9B)&amp;amp;&amp;amp;(cmd[1]==0xA5)){ a0+=1; cm=&quot;PRINT&quot;; continue; }&#xA;                    if ((cmd[0]==0xBA)&amp;amp;&amp;amp;(cmd[1]==0x00)){ a0+=1; cm=&quot;RETURN&quot;; continue; }&#xA;                    if ((cmd[0]==0xBA)&amp;amp;&amp;amp;(cmd[1]==0x01)){ a0+=1; cm=&quot;RETURN&quot;; continue; }&#xA;                    if ((cmd[0]==0xBD)&amp;amp;&amp;amp;(cmd[1]==0x1C)){ a0+=1; cm=&quot;STOP&quot;; continue; }&#xA;                    if ((cmd[0]==0xBD)&amp;amp;&amp;amp;(cmd[1]==0x05)){ a0+=1; cm=&quot;END&quot;; continue; }&#xA;                    if ((cmd[0]==0xBD)&amp;amp;&amp;amp;(cmd[1]==0x06)){ a0+=1; cm=&quot;FNEND&quot;; continue; }&#xA;                    if ((cmd[0]==0xBD)&amp;amp;&amp;amp;(cmd[1]==0x0D)){ a0+=1; cm=&quot;OFF ERROR&quot;; continue; }&#xA;                    if ((cmd[0]==0xBD)&amp;amp;&amp;amp;(cmd[1]==0x17)){ a0+=1; cm=&quot;PAUSE&quot;; continue; }&#xA;                    if ((cmd[0]==0xBD)&amp;amp;&amp;amp;(cmd[1]==0x23)){ a0+=1; cm=&quot;WAIT&quot;; continue; }&#xA;                    if ((cmd[0]==0xBD)&amp;amp;&amp;amp;(cmd[1]==0x24)){ a0+=1; cm=&quot;BEEP&quot;; continue; }&#xA;                    if ((cmd[0]==0x95)&amp;amp;&amp;amp;(cmd[1]==0xB3)&amp;amp;&amp;amp;(cmd[2]==0x8E)){ a0+=2; lin+=&quot;GOSUB&quot;; continue; }&#xA;                    if ((cmd[0]==0xBB)&amp;amp;&amp;amp;(cmd[1]==0x03)&amp;amp;&amp;amp;(cmd[2]==0x0B)){ a0+=2; lin+=&quot;REPEAT&quot;; continue; }&#xA;                    if ((cmd[0]==0xBB)&amp;amp;&amp;amp;(cmd[1]==0x03)&amp;amp;&amp;amp;(cmd[2]==0x15)){ a0+=2; lin+=&quot;END SELECT&quot;; continue; }&#xA;                    if ((cmd[0]==0xBB)&amp;amp;&amp;amp;(cmd[1]==0x1F)&amp;amp;&amp;amp;(cmd[2]==0x22)){ a0+=2; lin+=&quot;CLEAR ERROR&quot;; continue; }&#xA;                    if ((cmd[0]==0xBB)&amp;amp;&amp;amp;(cmd[1]==0x1F)&amp;amp;&amp;amp;(cmd[2]==0x40)){ a0+=2; lin+=&quot;CLEAR SCREEN&quot;; continue; }&#xA;                    if ((cmd[0]==0xB8)&amp;amp;&amp;amp;(cmd[1]==0x8E)&amp;amp;&amp;amp;(cmd[2]==0x00)&amp;amp;&amp;amp;(cmd[3]==0x00)){ a0+=3+2; lin+=&quot;ELSE&quot;; continue; }&#xA;                    if ((cmd[0]==0xBB)&amp;amp;&amp;amp;(cmd[1]==0x03)&amp;amp;&amp;amp;(cmd[2]==0x10)&amp;amp;&amp;amp;(cmd[3]==0x8E)&amp;amp;&amp;amp;(cmd[4]==0x00)&amp;amp;&amp;amp;(cmd[5]==0x00)){ a0+=5+2; lin+=&quot;CASE ELSE&quot;; continue; }&#xA;                    }&#xA;                _ok=0;&#xA;&#xA;                if ((c&amp;lt;32)||(c&amp;gt;127))    // non ASCII character&#xA;                    {&#xA;                    if ( _txt){ _txt=0; lin+=&quot;' &quot;; }&#xA;                    if (!_hex){ _hex=1; lin+=&quot; [&quot;; } else lin+=&quot; &quot;;&#xA;                    lin+=AnsiString().sprintf(&quot;%02X&quot;,c);&#xA;                    }&#xA;                else{                   // ASCII character&#xA;                    if ( _hex){ _hex=0; lin+=&quot;] &quot;; }&#xA;                    if (!_txt){ _txt=1; lin+=&quot; '&quot;; }&#xA;                    lin+=char(c);&#xA;                    }&#xA;                }&#xA;            if (_hex){ _hex=0; lin+=&quot;] &quot;; }&#xA;            if (_txt){ _txt=0; lin+=&quot;' &quot;; }&#xA;&#xA;            if ((cm!=&quot;&quot;)||(ops))        // forced end of line [B3 8E]&#xA;                {&#xA;                if (cm!=&quot;&quot;) lin+=cm;&#xA;                for (i=0;i&amp;lt;ops;i++) lin+=&quot; &quot;+op[i];&#xA;                lin+=&quot; |!!|&quot;;&#xA;                }&#xA;            // word wrap + hex debug&#xA;            for (i=1;;)     // proces wrapped lines&#xA;                {&#xA;                if (_enable_wordwrap)   // cut code&#xA;                    {&#xA;                    if (i==1) s=lin.SubString(i,_sz_bas);&#xA;                    else      s=lin.SubString(i,_sz_bas-_sz_lin);&#xA;                    }&#xA;                else{&#xA;                    if (i==1) s=lin;&#xA;                    else      s=&quot;&quot;;&#xA;                    }&#xA;                l=s.Length(); if (l==0) break;&#xA;                if (i!=1) s=slin+s; i+=l;&#xA;                if (_enable_hexview)&#xA;                    {&#xA;                    while (s.Length()&amp;lt;_sz_bas) s+=&quot; &quot;;  // align to end of basic column&#xA;                    // add hex view&#xA;                    for (s+=AnsiString().sprintf(&quot;| %04X:&quot;,adrh);(adrh&amp;lt;a1)&amp;amp;&amp;amp;((s.Length()&amp;lt;=_sz_hex-3)||(!_enable_wordwrap));adrh++) s+=AnsiString().sprintf(&quot; %02X&quot;,dat[adrh]);&#xA;                    }&#xA;                txt+=s+&quot;\r\n&quot;;&#xA;                }&#xA;            // hex view (if not finished yet)&#xA;            if (_enable_hexview) for (;adrh&amp;lt;a1;)&#xA;                {&#xA;                for (s=sbas+AnsiString().sprintf(&quot;| %04X:&quot;,adrh);(adrh&amp;lt;a1)&amp;amp;&amp;amp;((s.Length()&amp;lt;=_sz_hex-3)||(!_enable_wordwrap));adrh++) s+=AnsiString().sprintf(&quot; %02X&quot;,dat[adrh]);&#xA;                txt+=s+&quot;\r\n&quot;;&#xA;                }&#xA;            // ----------------------------------------------------------------------------------&#xA;            // ----------------------------------------------------------------------------------&#xA;            // ----------------------------------------------------------------------------------&#xA;&#xA;            // next line offset&#xA;            if (!sos)&#xA;                {&#xA;                adr+=len;                               // point out next line first byte position&#xA;                c=dat[adr];&#xA;                if (((c!=0x40)&amp;amp;&amp;amp;(c!=0x48)&amp;amp;&amp;amp;(c!=0xC0)&amp;amp;&amp;amp;(c!=0xC8))||(adr==adr1))  //check if this is 0x40/0xC0 or not!&#xA;                    {&#xA;                    eos=true;                           // if it is not or we are past the lines for this SUB/FN, done for this SUB/FN&#xA;                    adr=adr1;                           // quick jump to next start of SUB/FN&#xA;                    }&#xA;                }&#xA;            // secnd line in section offset&#xA;            else{&#xA;                sos=false;&#xA;                adr+=len;                               // increment to next real line!&#xA;                }&#xA;            }&#xA;        }&#xA;&#xA;    // remove zeros from txt&#xA;    for (l=txt.Length(),i=1;i&amp;lt;=l;i++)&#xA;     if (txt[i]==0) txt[i]='.';&#xA;&#xA;    delete[] dat;&#xA;    return txt;&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I think this could get you started quite nicely. Simple commands has 4 BYTE codes where first BYTE also tells if the command use constant (&lt;code&gt;0x80+constant&lt;/code&gt; up to unknown range probably just 0..9 or similar) or variable operand (&lt;code&gt;0x00+variable_index&lt;/code&gt;). End of line usually ends with &lt;code&gt;0xB3 0x8E&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here few decoded lines outputted from the decoder (&lt;code&gt;PS_EDI~1.PROG&lt;/code&gt;):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;3250:    385          END SELECT |B3|                | 3250: 40 0A 5E 09 01 81 BB 03 15 B3&#xA;325A:    386          WAIT 5 |B3|                    | 325A: 40 0A 0A 09 01 82 85 BD 23 B3&#xA;3264:    387           [D4 B2 00 B3 8E]  var09 |!!|  | 3264: 40 0C 0A 09 01 83 0A D4 B2 00 B3 8E&#xA;3270:    388          RETURN 0 |B3|                  | 3270: 40 0A 0C 09 01 84 80 BA 01 B3&#xA;327A:    389        FNEND |B3| |8E|                  | 327A: 40 0A 0A 07 01 85 BD 06 B3 8E&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the same from ASCII reference file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;385     END SELECT&#xA;386     WAIT 5&#xA;387     Title_screen&#xA;388     RETURN 0&#xA;389   FNEND&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-08-19T14:36:43.207" LastActivityDate="2019-08-19T14:36:43.207" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11632" PostTypeId="2" ParentId="11503" CreationDate="2019-07-11T09:14:34.637" Score="-1" Body="&lt;p&gt;You are getting &lt;code&gt;COPY mode&lt;/code&gt; because your &lt;code&gt;Copy&lt;/code&gt; command has been replaced with the more powerful &lt;code&gt;CopyReplace&lt;/code&gt;, which also has a &lt;code&gt;MOVE mode&lt;/code&gt; and much else.&lt;/p&gt;&#xA;" OwnerUserId="9074" LastActivityDate="2019-07-11T09:14:34.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11633" PostTypeId="2" ParentId="11516" CreationDate="2019-07-11T11:58:57.880" Score="0" Body="&lt;p&gt;As can be seen on this picture of a Selectric typewriter the badge there is very similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess would be that it was as simple as &quot;We need a place for the IBM badge&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ilDA2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ilDA2.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="447" LastActivityDate="2019-07-11T11:58:57.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11634" PostTypeId="1" CreationDate="2019-07-11T17:04:32.360" Score="4" ViewCount="1749" Body="&lt;p&gt;My father's computer in the early 90s (probably 1991, or at the latest 1992) had a piece of software that acted as an application launcher. I think it was simply called &quot;menu&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its graphics were simple text-based ones, with all borders drawn as characters such as full block (similarly to classic DOS software like QBASIC and LOTUS 1-2-3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The application simply displayed a 3x3 grid of white rectangles, and each had the name of a program in it. Pressing a function key (F1-F9) would launch the corresponding software, and page up/down switched &quot;pages&quot; (groups of 9 applications).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other keys were used to edit which application corresponded to each rectangle, probably with the path to an executable and a display name.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once an application was launched an exited, it would simply drop back to a command line. I think the command to make the menu appear again was simply &lt;code&gt;menu&lt;/code&gt;.This was definitely not run on Windows, simply MS-DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried a few searches but I couldn't find any reference to such a launcher. Given the simplicity, I think it's entirely possible that a programmer friend of my father had made it for us, but I'd like to be sure.&lt;/p&gt;&#xA;" OwnerUserId="13815" LastEditorUserId="2080" LastEditDate="2019-07-11T18:09:15.400" LastActivityDate="2020-11-15T12:03:52.437" Title="What was this menu application in DOS?" Tags="&lt;ms-dos&gt;&lt;identify-this-software&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11635" PostTypeId="2" ParentId="11634" CreationDate="2019-07-11T17:58:14.697" Score="8" Body="&lt;p&gt;There were a number of menu builders for DOS such as &lt;a href=&quot;https://www.youtube.com/watch?v=tHY7kM-XN9I&quot; rel=&quot;noreferrer&quot;&gt;MenuWorks&lt;/a&gt; and PowerMenu. &lt;a href=&quot;https://books.google.com/books?id=5D4EAAAAMBAJ&amp;amp;lpg=PA39&amp;amp;ots=Kd4IWb0n2I&amp;amp;pg=PA39#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; is a 1988 article that reviews some others.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2019-07-11T17:58:14.697" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11636" PostTypeId="2" ParentId="11634" CreationDate="2019-07-11T17:59:58.037" Score="1" Body="&lt;p&gt;I believe the first official TUI (Text User Interface) file manager for DOS was &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS_Shell&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOS Shell&lt;/a&gt;, first distributed as part of MS-DOS and PC DOS v4.0 (1988). Microsoft eventually dropped it from its distributions (though it would still function), probably as a small incentive to MS-DOS users to add an early version of Windows instead.  I believe PC DOS kept it thru its final version (7.x).&lt;/p&gt;&#xA;&lt;p&gt;(Note that until 1993, with MS-DOS 6.0 and PC DOS 6.1, they were essentially differently-branded versions of the same software. After that, there was still a lot of commonality.  Immediate differences included Microsoft's dropping of DOS Shell, IBM's dropping of QBASIC and adding the superior E editor instead.  (The Microsoft editor had been QBASIC with a different skin.) PC DOS 7 added IBM's own Rexx language to re-offer a programming language to its distribution.)&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="15334" LastEditDate="2020-11-15T12:03:52.437" LastActivityDate="2020-11-15T12:03:52.437" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11637" PostTypeId="5" CreationDate="2019-07-11T18:10:25.097" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-07-11T18:10:25.097" LastActivityDate="2019-07-11T18:10:25.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11638" PostTypeId="4" CreationDate="2019-07-11T18:10:25.097" Score="0" Body="For questions seeking identification of retro software." OwnerUserId="2080" LastEditorUserId="2080" LastEditDate="2019-07-12T07:23:37.720" LastActivityDate="2019-07-12T07:23:37.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11639" PostTypeId="1" AcceptedAnswerId="11640" CreationDate="2019-07-11T20:08:24.880" Score="7" ViewCount="312" Body="&lt;p&gt;I just recently stumbled across information about DDR minicomputer &lt;a href=&quot;http://www.pofo.de/P8000/&quot; rel=&quot;noreferrer&quot;&gt;P8000&lt;/a&gt;  and its unixoid operating system WEGA. The website above as well as Wikipedia seem to claim some compatibility or even derivation from western commercial Unix systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the computer was built in DDR ie behind the iron curtain, how much of the operating system was genuinely implemented there and how much of it was simply copied with or without permission?&lt;/p&gt;&#xA;" OwnerUserId="4378" LastActivityDate="2019-07-12T21:29:13.577" Title="WEGA operating system origins" Tags="&lt;history&gt;&lt;unix&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11640" PostTypeId="2" ParentId="11639" CreationDate="2019-07-11T20:57:42.100" Score="7" Body="&lt;p&gt;AFAIK it was a complete source level reimplementation of AT&amp;amp;T's System III. Looking at the &lt;a href=&quot;https://github.com/OlliL/P8000/tree/master/WEGA/src&quot; rel=&quot;nofollow noreferrer&quot;&gt;source code reconstruction pages&lt;/a&gt;, it looks as if the basic structure is quite literal. There are slight differences in variable names and alike - and more so all comments are in German :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been several unix(oide) implementations like V7 based ones in the early 80s on DEC clones as well as /370 mainframes. Plus there has been a System V alike called &lt;a href=&quot;http://robotrontechnik.de/index.htm?/html/software/mutos.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;MUTOS&lt;/a&gt; abailable for U830 (Bitslice), 8086 and Z8001 and K1840 (a VAX Clone)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a nice article about &lt;a href=&quot;https://www.golem.de/news/computergeschichte-unix-hinter-dem-eisernen-vorhang-1905-141247.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unix development in Eastern Germany&lt;/a&gt; (German).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-12T21:29:13.577" LastActivityDate="2019-07-12T21:29:13.577" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11641" PostTypeId="1" CreationDate="2019-07-11T21:08:55.950" Score="3" ViewCount="1222" Body="&lt;p&gt;Further to my &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11001/how-to-use-isa-card-in-modern-pc&quot;&gt;previous question&lt;/a&gt;, I am wondering how best to connect an &lt;a href=&quot;http://chiclassiccomp.org/docs/content/computing/SCM/01-50-001_SCMSwapBoxHardwareSoftwareInstallation.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCM Swapbox&lt;/a&gt; &quot;SBI-D2P&quot; (Classic X2) PCMCIA card reader to a modern PC (PCI/PCI Express/SATA/USB). I am aware there are USB PCMCIA readers, and in fact I have one also, but I want to use this Swapbox because it is nice. I am mainly interested in using it for memory cards, but also have hard drives (double size card), Ethernet, Wifi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the reader (3.5&quot; floppy bay):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Syf40.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Syf40.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The card goes in from the bottom, upwards. The button for ejecting the card is visible in the lower right of the picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And here is the ISA card:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YT99D.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YT99D.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6sjIx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6sjIx.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that I do have the cables, although they are not shown in the pictures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two 50-pin cables from the reader to some modern interface. What is the easiest solution?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: I note that &lt;a href=&quot;https://www.ebay.com/itm/New-PCI-to-PCMCIA-Cardbus-Convert-Adapter-PCMCIA-PCI-Card-ENE-Chip/113724229694?hash=item1a7a7e083e:g:9jUAAOSwUpxcuwN1&quot; rel=&quot;nofollow noreferrer&quot;&gt;new Chinese PCI adapters&lt;/a&gt; are available from Ebay for USD 20.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2019-07-14T17:03:51.400" LastActivityDate="2019-08-13T18:01:15.083" Title="Connecting SCM Swapbox PCMCIA reader (ISA) to modern PC" Tags="&lt;isa&gt;&lt;pcmcia&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11642" PostTypeId="1" CreationDate="2019-07-12T00:40:08.943" Score="-3" ViewCount="208" Body="&lt;p&gt;I am trying to make a portable version of a Sega Genesis Classic. (See this example on &lt;a href=&quot;https://www.youtube.com/watch?v=X2PE3Oqqt48&quot; rel=&quot;nofollow noreferrer&quot;&gt;Youtube&lt;/a&gt;.)&#xA;I'm wondering what kind of display module I would need to solder to the board for this project.&lt;/p&gt;&#xA;" OwnerUserId="14599" LastEditorUserId="6659" LastEditDate="2020-05-08T21:37:04.343" LastActivityDate="2020-05-08T21:37:04.343" Title="Building a Sega Genesis Classic Portable - What kind of display?" Tags="&lt;display&gt;&lt;sega-genesis&gt;&lt;portable&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2019-07-12T15:37:17.997" ContentLicense="CC BY-SA 4.0" />
  <row Id="11643" PostTypeId="2" ParentId="11642" CreationDate="2019-07-12T05:39:01.660" Score="5" Body="&lt;p&gt;In the video you linked (at 01:12), I notice that this device has the standard yellow and white connectors for composite video and audio. Many cheap portable LCD TVs support this kind of input, and are often battery powered, too.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-07-12T05:39:01.660" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11644" PostTypeId="2" ParentId="11641" CreationDate="2019-07-12T05:48:32.607" Score="2" Body="&lt;p&gt;I think this swapbox could be connected to a more modern machine, but it'd require some soldering work to achieve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From looking at the connectors on the cable and card reader, it appears to use a pair of 50-pin &lt;a href=&quot;https://en.wikipedia.org/wiki/Insulation-displacement_connector&quot; rel=&quot;nofollow noreferrer&quot;&gt;IDC ribbon cables&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mgaz0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mgaz0.jpg&quot; alt=&quot;Image of 50-pin IDC ribbon cable&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PCMCIA / Cardbus cards have &lt;a href=&quot;https://pinouts.ru/Slots/PcCard_pinout.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;68 connectors each&lt;/a&gt;, however. There doesn't appear to be any duplication of pins (e.g. multiple ground lines), so the manufacturer has managed to squeeze 2x68 wires for the two slots into 2x50 connectors somehow. They might have done this by not duplicating some wires used by both slots (e.g. the 25 address lines).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the &quot;modern PC&quot; end, PCI adapters for PCMCIA / Cardbus cards were (and are still) commercially available. They tend to be one-card adapters, rather than two-card ones, so you'd need two of them if you wanted to use both of your swapbox's slots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bGiqT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bGiqT.jpg&quot; alt=&quot;PCI PCMCIA Adapter&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That leaves the trickier issue of connecting the swapbox to the new adapters. This would probably require making a new, bespoke cable. The swapbox clearly uses a non-standard pinout, so you'd need to reverse-engineer this part first. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the swapbox have any chips or active components inside it? It'd be worth opening the cover to have a look first. If the swapbox is just a passive adapter, it would be possible to use continuity test function of a multimeter to work out how each slot's pins are connected to the IDC connectors. It'd be a slow job, but not a complicated one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you know the pinout of the swapbox's IDC connectors, you'd need to come up with a way of connecting it to the PCI adapter. Bare PCMCIA connectors can be bought &lt;a href=&quot;https://www.te.com/usa-en/product-5146228-4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;new&lt;/a&gt;, but they're relatively expensive for what they are. I'd suggest using the PCI card as-is, and cannibalising an inexpensive CompactFlash / Microdrive adapter for its PCMCIA connector instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7blj1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7blj1.jpg&quot; alt=&quot;PCMCIA adapter for CompactFlash or Microdrive cards&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could be soldered to a ribbon cable leading to the swapbox, using the pinout that you created earlier.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;If, on the other hand, the swapbox has some active computer chips inside, connecting a PCI-PCMCIA adapter to the IDC connectors may not work correctly: the PCI-PCMCIA adapter would expect to be connected to a PCMCIA card, not to an intermediate interface chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're able to remove the swapbox's case and photograph the circuit board inside, it may be possible to give a more definitive answer.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-07-12T09:30:24.517" LastActivityDate="2019-07-12T09:30:24.517" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11645" PostTypeId="2" ParentId="11604" CreationDate="2019-07-12T06:20:22.227" Score="6" Body="&lt;p&gt;The product ID on the sticker (819475G) identifies the machine as an IBM ThinkCentre A50p, model 8194.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A search for the 8194 model on a few RAM sellers' websites gives us the following &lt;a href=&quot;https://www.memorystock.com/memory/IBMThinkCentreA50p8194.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;information&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The IBM ThinkCentre A50p 8194 Computer takes the PC2700 DDR SDRAM DIMMs. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.memoryx.com/a50p8194.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;and&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Memory Speed options: PC2700 DDR333 184Pin SDRAM DIMM&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;These are industry standard DDR1 parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pinout of DDR RAM (184 pins) was different to its predecessor SDRAM (168 pins), and DDR2 RAM used a different pinout again (240 pins). Perhaps your uncle found that the ThinkCentre's RAM was incompatible with the RAM used in other (SD or DDR2) systems, as opposed to being actually non-standard.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-07-12T10:13:30.600" LastActivityDate="2019-07-12T10:13:30.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11646" PostTypeId="2" ParentId="11001" CreationDate="2019-07-12T07:44:33.327" Score="3" Body="&lt;p&gt;As mentioned is a comment above by @scruss, some manufacturers (such as &lt;a href=&quot;http://arstech.com/install/ecom-prodshow/usb2isa.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARS Technologies&lt;/a&gt;) have created a USB device that provides an USB-ISA bridge and an ISA slot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FPDbb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FPDbb.jpg&quot; alt=&quot;ARS tech usb2isa card&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is an expensive option, as it's a niche product, and most people needing this kind of item will be in a position where they have to support some old mission-critical peripheral that can't easily be replaced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This approach deals with the hardware issue, but you may also have issues finding drivers to support your old ISA card in a modern OS. One person has recorded their experience of getting an old ISA network card working &lt;a href=&quot;http://disbauxes.upc.es/code/applied-physics-department/dealing-with-the-ars-usb2isa-hardware-emulator-1/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-07-12T07:56:51.373" LastActivityDate="2019-07-12T07:56:51.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11647" PostTypeId="2" ParentId="4488" CreationDate="2019-07-12T08:56:38.070" Score="1" Body="&lt;p&gt;I have made use of &lt;a href=&quot;https://en.wikipedia.org/wiki/Petroleum_jelly&quot; rel=&quot;nofollow noreferrer&quot;&gt;petroleum jelly&lt;/a&gt; as a lubricant grease for moving parts in a number of old electronic devices, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A Dreamcast laser stepper's noisy rails and gears&lt;/li&gt;&#xA;&lt;li&gt;The base of an N64's analog stick&lt;/li&gt;&#xA;&lt;li&gt;The volume knob on an old hi-fi&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;among many others. Some of these repairs were done a decade ago, and are still working fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My wife buys it in half-kilo tubs for treating skin conditions, so it's readily available and inexpensive. I keep a small pot of it in my toolbox.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-07-12T08:56:38.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11649" PostTypeId="2" ParentId="2970" CreationDate="2019-07-12T13:41:28.310" Score="3" Body="&lt;p&gt;The &quot;Turbo XT&quot; 4.77/8mhz clock switching first appeared on no-name clones, and was carried over into the 386 era with 16/33mhz switching.&lt;/p&gt;&#xA;" OwnerUserId="14606" LastEditorUserId="129" LastEditDate="2019-07-12T14:08:07.773" LastActivityDate="2019-07-12T14:08:07.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11652" PostTypeId="2" ParentId="8196" CreationDate="2019-07-12T19:47:42.703" Score="5" Body="&lt;p&gt;The character of Mr Game and Watch was created by Makato Kano. In an &amp;quot;Iwata Asks&amp;quot; &lt;a href=&quot;http://iwataasks.nintendo.com/interviews/#/clubn/game-and-watch-ball-reward/0/0&quot; rel=&quot;nofollow noreferrer&quot;&gt;interview&lt;/a&gt; from April 2010, Satoru Iwata describes him as being&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;... involved with every aspect of design, from the character known as Mr. Game &amp;amp; Watch to the exterior box.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A later section discussed the design of the LCD graphics:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Iwata: After an idea came together, what was the next step?&lt;/p&gt;&#xA;&lt;p&gt;Kano: After we all brainstormed and the basic situation of the game had been determined, Yokoi-san would say, &amp;quot;The rest is up to you.&amp;quot; (laughs)&lt;/p&gt;&#xA;&lt;p&gt;Izushi: By &amp;quot;you,&amp;quot; he meant Kano-san. (laughs) Kano-san would redraw our clumsy drawings on the black board, and then it would look really interesting and we'd say, &amp;quot;Let's do it!&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://iwataasks.nintendo.com/interviews/#/clubn/game-and-watch-ball-reward/0/1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Elsewhere&lt;/a&gt; in the interview, they discuss the use of an LCD driver designed for a calculator. This could drive 72 display segments. (In a calculator these would be similar shapes &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Seven-segment_display&quot; rel=&quot;nofollow noreferrer&quot;&gt;grouped together&lt;/a&gt; to display digits, but the LCD could be manufactured with segments of different shapes and sizes.)&lt;/p&gt;&#xA;&lt;p&gt;Displaying a four-digit score counter (and also watch) used several of these segments, leaving roughly 44 available for displaying &lt;em&gt;all&lt;/em&gt; the game elements. For a moving character, that includes all the positions the character can be in. To save on segment use, the character would best be drawn with a single contiguous segment.&lt;/p&gt;&#xA;&lt;p&gt;The interview includes &lt;a href=&quot;http://iwataasks.nintendo.com/interviews/#/clubn/game-and-watch-ball-reward/0/2&quot; rel=&quot;nofollow noreferrer&quot;&gt;several photos&lt;/a&gt; of Kano's artwork for the LCD displays. They have a similar style, which is unsurprising given that they were all drawn by one person. As the games were released on a monthly basis, there would have been little time to explore different visual styles.&lt;/p&gt;&#xA;&lt;p&gt;In what is a fairly wide-ranging interview, there is no mention of Mr. Game and Watch being an intentionally recurring character.&lt;/p&gt;&#xA;&lt;p&gt;Given the limitations of the technology used, and the fact that a single artist drew all the LCD designs, I think it's reasonable to conclude that the similarity between the characters in the Game and Watch games was a natural occurrence, as opposed to an intentional choice to have a recurring character.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-13T10:07:48.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11653" PostTypeId="1" AcceptedAnswerId="11656" CreationDate="2019-07-12T20:13:30.543" Score="16" ViewCount="4744" Body="&lt;p&gt;The original gameboy, GBP and GBC all had screen resolutions of 160x144&lt;a href=&quot;https://www.nintendo.co.uk/Support/Game-Boy-Pocket-Color/Product-information/Technical-data/Technical-data-619585.html&quot; rel=&quot;noreferrer&quot;&gt;[1]&lt;/a&gt; while the Game Boy Advanced had a resolution of 240x160&lt;a href=&quot;https://gameboy.fandom.com/wiki/Game_Boy_Advance&quot; rel=&quot;noreferrer&quot;&gt;[2]&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how does the actual stretching occur? It seems pretty uniform, but I can't wrap my head around how it's technically achievable without a second screen.&lt;/p&gt;&#xA;" OwnerUserId="14264" LastActivityDate="2019-07-14T08:18:50.247" Title="How did the Game Boy Advance stretch Game Boy games to widescreen?" Tags="&lt;game-boy&gt;&lt;game-boy-advance&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11654" PostTypeId="2" ParentId="11606" CreationDate="2019-07-12T20:42:17.477" Score="1" Body="&lt;p&gt;Two decades ago I read an essay (sadly now impossible to find) that used this and a few other similar tech platform competitions to make a rather deep point: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In a competition between two at least somewhat competitive platforms, the more open platform wins every time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now personally I'm not so sure about the &quot;every&quot;, but I've found this statement to have a lot of predictive power since.&lt;sup&gt;*&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem the less open platform has is that all the incentives for developers are to produce for the more open platform. APIs and tech specs are cheaper (often free), and there's no authority they have to answer to other than customers. The devices themselves will end up being cheaper, at first due to lower barriers, but eventually due to the fact that there are more companies producing for that platform, so the market competition on it is far more intense. The lower prices drive up unit sales, which increases competition more, which puts even more pressure on prices. Its a huge win for the consumer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What this also means is that the closed platform has great trouble not falling behind technically. In a contest of innovation between the two platforms, its one company's engineers against the rest of the world. That one company may have some truly rocking engineers, but its highly unlikely they can outdo the entire rest of the world indefinitely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The obvious solution is to open up the platform. Commodore &lt;em&gt;actually saw this&lt;/em&gt; and tried sanctioning 3rd party clones for a while. The problem here of course is those are &lt;em&gt;competitors&lt;/em&gt;, and no company can really justify going out of its way to help competitors. A closed platform is essentially golden handcuffs for the company that maintains it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;* - OK. Admittedly this predicts Android would obliterate iOS, but iOS is now bumping around in the 15-20% market share territory, with nearly all the remaining 80-85% being Android. 5 years ago it was close to even. However, Apple has learned over its history how to survive having more expensive products on niche platforms. If anyone can beat the odds with a closed platform, they can.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="4345" LastActivityDate="2019-07-12T20:42:17.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11656" PostTypeId="2" ParentId="11653" CreationDate="2019-07-12T21:11:07.480" Score="22" Body="&lt;p&gt;Firstly, the stretching isn't done in the vertical direction: Game Boy (and Color) games only used 144 rows of the 160 available on Advance screen, so there'd be black &quot;letterbox&quot; bars at the top and bottom, whether you stretched the image widescreen (with the shoulder buttons) or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vINAl.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vINAl.jpg&quot; alt=&quot;Golf title screen on GBA SP, unstretched&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/OHLL1.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OHLL1.jpg&quot; alt=&quot;Golf title screen on GBA SP, stretched&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Horizontally, the image is definitely stretched. If the Advance had twice the horizontal resolution of the Game Boy, it would be easy to stretch: each column of pixels could be repeated twice. It would effectively mean that each of the Game Boy's pixels were twice as wide as before. It's not always feasible to double the resolution of your screen; it's likely that such a resolution wasn't available (or affordable) in a handheld size at the time of the Advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, Nintendo selected a screen for the Advance that had a resolution that is one and a half times (or 3/2) that of the original Game Boy (160 x 3/2 = 240). Every two columns of pixels from an old Game Boy game will now need to be &quot;stretched&quot; over three columns of the Advance's screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what values should be assigned to the pixels in these extra third columns? You could double up some of the original columns' pixels, doubling the &quot;width&quot; of all the odd columns, or perhaps the even ones. It's a simple method, but doesn't look that good, because some columns won't be doubled at all, but others will.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative approach is to use a technique called &lt;a href=&quot;https://en.wikipedia.org/wiki/Interpolation&quot; rel=&quot;noreferrer&quot;&gt;interpolation&lt;/a&gt;.[*1] In this instance, rather than choosing to duplicate one column to fill the empty pixels, you take an average of the values in the columns to the left and the right of each empty pixel, and use this calculated value instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look closely at the Advance's display with an un-stretched Game Boy game, then a stretched one, it's possible to identify which columns have had their values calculated by this &quot;averaging&quot; interpolation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some detailed photos of the &quot;AY&quot; from the &quot;1Player&quot; text:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FVCUd.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FVCUd.jpg&quot; alt=&quot;Letters AY, unstretched&quot;&gt;&lt;/a&gt; &amp;lt;-unstretched&#xA;&lt;a href=&quot;https://i.stack.imgur.com/mCNBG.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mCNBG.jpg&quot; alt=&quot;Letters AY, stretched&quot;&gt;&lt;/a&gt; &amp;lt;-stretched&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the left side of the &quot;A&quot;, a column of pixels has been interpolated between the dark pixels of the &quot;A&quot; and the light pixels of the background. These pixels have been averaged out as a medium gray.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the right side of the &quot;A&quot;, another column of interpolated pixels has ended up in between the two columns of dark pixels. The average of two dark pixels is also dark, so it is the same colour as the rest of the &quot;A&quot;. Similar interpolations are visible on the left and right sides of the &quot;Y&quot;, and elsewhere on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is pair of pictures from another game, taken on the AGS-101 model of the Advance SP (which has a brighter, backlit screen).[*2] You can play guess-the-game if you like!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DVjhm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DVjhm.jpg&quot; alt=&quot;AGS-101 detail, unstretched&quot;&gt;&lt;/a&gt; &amp;lt;- unstretched&#xA;&lt;a href=&quot;https://i.stack.imgur.com/GKWqt.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GKWqt.jpg&quot; alt=&quot;AGS-101 detail, stretched&quot;&gt;&lt;/a&gt; &amp;lt;- stretched&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did Nintendo choose to stretch the Game Boy display in one direction, and not the other? One reason is that interpolating in &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_interpolation&quot; rel=&quot;noreferrer&quot;&gt;one dimension&lt;/a&gt; is a lot simpler than doing it in &lt;a href=&quot;https://en.wikipedia.org/wiki/Bilinear_interpolation&quot; rel=&quot;noreferrer&quot;&gt;two&lt;/a&gt;. But stretching the screen vertically would also have created unsightly visual artefacts in the game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If Nintendo had decided to stretch the 144 rows of pixels over the 160 rows available on the Advance's screen, they would have had to insert 16 interpolated rows of pixels. 16 is a factor of 160, so the interpolated rows could be spaced evenly: one every 10 rows. But of the nine original rows, only two would be next to a new row pf pixels, the other seven wouldn't. As a result, some rows would be &quot;stretched&quot; out by the interpolation, others wouldn't. This would result in Mario's hat stretching and compressing slightly as he jumped, for example, and would be distracting for the player.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;This technique (specifically the two-dimensional &lt;a href=&quot;https://en.wikipedia.org/wiki/Bilinear_interpolation&quot; rel=&quot;noreferrer&quot;&gt;bilinear interpolation&lt;/a&gt;) is used when you resize a picture in image manipulation software such as Photoshop or GIMP. It's also used on computer LCD displays, if you select a resolution (e.g. 640x480) that doesn't match the display's native resolution (e.g 1024x768). But because the GBA only stretches the display in one dimension (horizontally), it only needs to do a simpler &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_interpolation&quot; rel=&quot;noreferrer&quot;&gt;linear interpolation&lt;/a&gt; of the image.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Courtesy of &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/75/snips-n-snails&quot;&gt;snips-n-snails&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-07-14T08:18:50.247" LastActivityDate="2019-07-14T08:18:50.247" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11657" PostTypeId="2" ParentId="11634" CreationDate="2019-07-13T02:52:32.420" Score="3" Body="&lt;p&gt;I think I know what software you're talking about. I picked up an IBM PC AT off of eBay about a year ago, and the hard drive worked perfectly fine. When I first booted the machine, I was greeted with a text-based menu software, looking like this (I took this photo long after I restored the computer):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uVcqh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uVcqh.jpg&quot; alt=&quot;Menu software displayed on an IBM PC AT&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a quick Google search of the company and software, which I have forgotten the name of, all I could find was a Google Books copy of a magazine from the 80's briefly mentioning the release of the software. As far as I know, I'm one of the only people with a copy of the software, named &quot;menu.exe&quot;. I hope this is what you were looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: After looking through the magazine linked in snips-n-snails' answer, I found a picture of the software, made by Direct Access.&lt;/p&gt;&#xA;" OwnerUserId="8389" LastActivityDate="2019-07-13T02:52:32.420" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11658" PostTypeId="1" CreationDate="2019-07-13T16:32:07.977" Score="1" ViewCount="149" Body="&lt;p&gt;The order wasn't easy for me to memorize. I would like to know if there is a historical story.&lt;/p&gt;&#xA;" OwnerUserId="14611" LastActivityDate="2019-07-13T16:32:07.977" Title="Why is the order of the special characters on the keyboard like !@#$%^&amp;*()?" Tags="&lt;history&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2019-07-13T21:47:04.470" ContentLicense="CC BY-SA 4.0" />
  <row Id="11659" PostTypeId="1" AcceptedAnswerId="11662" CreationDate="2019-07-14T04:37:42.803" Score="11" ViewCount="1720" Body="&lt;p&gt;It seems to me that there's effectively two ways that the zero bit could work.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;Z&lt;/code&gt; is set iff the result of a computation is mathematically equal to 0.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Z&lt;/code&gt; is set iff a bit pattern consisting entirely of 0 is stored in the destination (whatever that may be)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;These may seem identical, but consider the following fragment of 6502 assembly:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LDA #$FF&#xA;CLC&#xA;ADC #$01&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So what's &lt;code&gt;Z&lt;/code&gt; for this? Mathematically, &lt;code&gt;0xFF&lt;/code&gt; + &lt;code&gt;0x01&lt;/code&gt; = &lt;code&gt;0x100&lt;/code&gt;, but 256 doesn't fit in an 8-bit register, so the &lt;code&gt;C&lt;/code&gt; flag gets set, and the bit pattern &lt;code&gt;0b00000000&lt;/code&gt; is stored in &lt;code&gt;A&lt;/code&gt;. Often time, manuals will say something like &quot;The Z flag is set if the result is zero&quot; but that seems hopelessly ambiguous to mean. I'm very curious, cross-architecturally, how this has varied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, it's unclear how the &lt;code&gt;N&lt;/code&gt; (negative/sign) flag &quot;should behave. Is it set according to the &quot;actual&quot; sign of the result, or does it literally just reflect the MSB of the result actually stored in the destination, irrespective of whether signed overflow occurred?&lt;/p&gt;&#xA;" OwnerUserId="10966" LastEditorUserId="3290" LastEditDate="2020-08-03T14:30:27.803" LastActivityDate="2020-08-03T14:30:27.803" Title="Behavior of the zero and negative/sign flags on classic instruction sets" Tags="&lt;6502&gt;&lt;instruction-set&gt;&lt;cpu-flag-bits&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11660" PostTypeId="2" ParentId="11659" CreationDate="2019-07-14T06:33:26.767" Score="6" Body="&lt;p&gt;In the case you describe, the 6502 will set the Zero flag (in other words, the Z flag will be one if the operation left the accumulator equal to 0 mod 256). That's convenient, because usually a programmer is interested either in &lt;code&gt;Z&lt;/code&gt;, to test for an actual zero condition, &lt;em&gt;or&lt;/em&gt; in &lt;code&gt;C&lt;/code&gt;, to test for a carry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 works in the same way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that it's also easier to implement, since that's effectively an 8-input NAND.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-07-14T06:33:26.767" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11661" PostTypeId="1" AcceptedAnswerId="11665" CreationDate="2019-07-14T08:21:28.693" Score="73" ViewCount="14537" Body="&lt;p&gt;Many people remember this operating system as not exactly &lt;em&gt;a walk in the park&lt;/em&gt;, namely that it could crash as early as during the installation phase or at unexpected times when the user wasn't doing anything particular. It left a bitter taste, especially when compared to its predecessor Windows 98 SE which was a real treat compared to Windows 95.&lt;/p&gt;&#xA;&lt;p&gt;I am unsure about what made it so crash prone; the first thing that comes to my mind would be bad drivers, however this is unlikely since the driver model hasn't changed from Windows 98 (unless I'm mistaken).&lt;/p&gt;&#xA;&lt;p&gt;Online, there is little about what were the technical changes that ended up making it such a terrible operating system. The only plausible thing I could read about it was that it was forked from Windows 95 instead of Windows 98 but how could that be a possibility, as it doesn't really make much sense in the end?&lt;/p&gt;&#xA;&lt;p&gt;What were the technical changes inside Windows Me that made it such an unstable operating system?&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="15334" LastEditDate="2021-01-19T09:59:51.947" LastActivityDate="2021-01-20T09:54:57.523" Title="What made Windows Me so crash-prone?" Tags="&lt;windows-me&gt;&lt;bugs&gt;" AnswerCount="4" CommentCount="15" FavoriteCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11662" PostTypeId="2" ParentId="11659" CreationDate="2019-07-14T09:47:56.200" Score="13" Body="&lt;p&gt;Neither. In the 6502, the Z flag is set if there's an all-zero pattern on the internal data bus in the last instruction cycle and cleared if it isn't. This means specifically instructions as &lt;strong&gt;PLA&lt;/strong&gt; or &lt;strong&gt;TAX&lt;/strong&gt; affect the Z flag. On the 65&lt;strong&gt;C&lt;/strong&gt;02, e.g. &lt;strong&gt;PLX&lt;/strong&gt; does, too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see this from the &lt;strong&gt;CMP, CPX, CPY, BIT&lt;/strong&gt; instructions, which store nothing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same for the N flag, it's simply copied from bit 7 of the internal data bus.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastEditorUserId="3459" LastEditDate="2019-07-14T11:58:50.477" LastActivityDate="2019-07-14T11:58:50.477" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11663" PostTypeId="2" ParentId="2024" CreationDate="2019-07-14T11:29:46.457" Score="1" Body="&lt;h2&gt;Reading multiple floppies&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As mentioned in other answers, reading from multiple floppy disks that share the same controller is unlikely to give much of a speed increase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PCs originally supported up to four floppy drives, which could be achieved by using two controller cards (with two drives each). These controller cards (which also include Super-IO cards and some SCSI adapters) only existed in ISA (and EISA) forms, which may or may not suit the computers you have available.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Formatting multiple floppies&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When it comes to wiping/formatting your disks, there may be a method of doing these in bulk. If you have two (or more) identically configured floppy drives connected to the same floppy drive controller, commands to format a disk &lt;em&gt;should&lt;/em&gt; be executed by all the drives at once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order for this to work, the floppy drives should all be connected to a floppy cable with no twists in the cable (which swap control lines for drives A: and B: around). The number of drives you can connect will be limited by the electrical load they put on the controller's control lines, and the number of connectors on a cable that you can find/make.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This approach obviously won't work for reading floppies, as each drive will send different data to the controller at the same time. But when formatting a disk you will be overwriting this data with identical content before it's written.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PCs and many other systems use an index pulse (triggered by a hole on the disk) to decide where the start of a track should be. The multiple drives wouldn't have their disks in exactly the same position at the same time, so there'd be several index pulses generated by the bank of drives. If you were using a platform that doesn't use the index pulse (such as old Apple drives) this wouldn't be a problem. For others, your mileage may vary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another limitation is what happens if a bad sector is found while formatting. I can think of two possibilities:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The OS reports a bad sector and stops formatting, but you won't know which of the disks is at fault&lt;/li&gt;&#xA;&lt;li&gt;The response from the &quot;correct&quot; drives drown out the error from the drive with a faulty disk, meaning you end up with an apparently formatted disk, but are unaware of its fault.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Bad sectors probably wouldn't be an issue if you were using brand new floppies, but as you're recycling old ones, your mileage may vary. Some faulty disks would probably be weeded out at the archiving stage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a bulk eraser on the floppy disks before formatting them may also help. (They're not very common these days, but as magnetic media, a bulk eraser for tapes could be used instead.)&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-07-15T10:11:22.453" LastActivityDate="2019-07-15T10:11:22.453" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11664" PostTypeId="2" ParentId="11659" CreationDate="2019-07-14T14:34:20.863" Score="8" Body="&lt;p&gt;While Wilson and Janka already explain the &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11660/6659&quot;&gt;arithmetic&lt;/a&gt; and &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11662/6659&quot;&gt;6502 related&lt;/a&gt; (*1) implication, I somehow get the feeling this question is not about the 6502&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Behavior of the zero and negative/sign flags on classic instruction sets&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;but rather some generic, absolute meaning.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm very curious, cross-architecturally, how this has varied.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is no variation, as there is no absolute meaning (*2) what Z should be, or that Z even stands for Zero.&lt;/p&gt;&#xA;&lt;h2&gt;So short answer:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;There is no one size fits all. One has to look at every ISA on its own, as similar naming will may mean different things based on different assumptions for each architecture.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;[Insert...&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If at all, one may think of it as with languages. There can be words with similar meanings in different languages, but they rarely overlap exactly, even for simple things. Even if these words sound (almost) the same and their meaning seems quite similar, they are not - like for Z and flags.&lt;/p&gt;&#xA;&lt;p&gt;Think of English 'Hound' and German 'Hund'. Both are about a dog, but while the German Hund means dog in general, English Hound is a subset of dog. Much like the Z80 Z flag is a subset of the 6502 Z flag, isn't it? (*2)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;...back to CPUs and conditions]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long Answer:&lt;/h2&gt;&#xA;&lt;p&gt;There are CPUs&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;without flags at all - like some &lt;a href=&quot;https://en.wikipedia.org/wiki/Very_long_instruction_word&quot; rel=&quot;nofollow noreferrer&quot;&gt;VLIW&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;without flags but relational tests - like &lt;a href=&quot;https://en.wikipedia.org/wiki/DEC_Alpha#Control_instructions&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEC ALPHA&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;without flags but conditional traps&lt;/li&gt;&#xA;&lt;li&gt;with condition codes instead of flags - like &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360_architecture#Program_Status_Word_(PSW)&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM /360ish&lt;/a&gt; (it can't get more classic :))&lt;/li&gt;&#xA;&lt;li&gt;with flags much like 6502 or Z80 but many different compositions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;(I guess with some thinking the list may be extended many more ways.)&lt;/p&gt;&#xA;&lt;p&gt;As well as combinations thereof, where MIPS is a great example (*3) again:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;basic MIPS with &lt;a href=&quot;https://en.wikipedia.org/wiki/MIPS_architecture#ALU&quot; rel=&quot;nofollow noreferrer&quot;&gt;relations and traps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;MIPS II and &lt;a href=&quot;https://en.wikipedia.org/wiki/MIPS_architecture#MIPS_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;traps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;or MIPS SIMD with relations, traps and &lt;a href=&quot;https://en.wikipedia.org/wiki/MIPS_architecture#MIPS_SIMD_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;VLIW like flagless operation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Bottom line: CPU architectures with &lt;strong&gt;flags are just one case of many&lt;/strong&gt;, rather a minority among all designs - that is, unless we count the number of delivered devices (even considering MIPS working hard in many cheap consumer products won't change this).&lt;/p&gt;&#xA;&lt;p&gt;The reason is rather simple, as &lt;strong&gt;using flags is the least effort hardware wise&lt;/strong&gt;. Basically flags are just cached output signals of the ALU (like on Z80) sometimes enriched by additional test logic(*4). They only make very basic observations available to software. Fine as long as there are only a few and rather basic 'notifications' to be made about the result of an operation. But as soon as we leave the very basic domain and the number of resulting conditions may become quite crowded, hard to be handled in a systematic way - even less in similar ways across architectures.&lt;/p&gt;&#xA;&lt;p&gt;While a 'simple' Zero or the mentioned Negative introduces only minor differences between architectures, it gets quite messy when the meaning to be transported gets more and more complex. Just take a look at the handling of signed numbers and overflow in 8080 vs. 6502. Here several new flags with only minor overlap are introduced. And this is still only integer arithmetic.&lt;/p&gt;&#xA;&lt;p&gt;Architectures offering a more diverse set of operations (*5) usually drop the whole flag part and go either for generation of a more abstract operation result, like a condition code, to be used on a case-by-case basis(*6), or move the whole result/condition testing away from the operation completely (like MIPS, Alpha)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Status_register#CPU_architectures_without_arithmetic_flags&quot; rel=&quot;nofollow noreferrer&quot;&gt;Doing away with flags&lt;/a&gt; can&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;simplify software structure and&lt;/li&gt;&#xA;&lt;li&gt;improve performance&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Well, both contain part of the workings within a 6502. The signal for Zero (DBZ) is generated by an 8-input NAND, but that Z not always reflect what's (in the last cycle) on the internal data bus (DB part). After all, this would mean that (for example) in case of a &lt;code&gt;JMP&lt;/code&gt; instruction Z would be set according to the high byte of the address.&lt;/p&gt;&#xA;&lt;p&gt;To avoid this the control logic enable flag setting for Z in a case by case situation via distinct control signals. Within the Hanson diagram they are mentioned as &lt;code&gt;DBI/Z&lt;/code&gt; in case of input operations (like &lt;code&gt;LDA #&lt;/code&gt;) and &lt;code&gt;DBZ/Z&lt;/code&gt; for arithmetic. In hardware it's an OR combination driven by several lines from the decoder PLA detecting certain opcode/sequence cases.&lt;/p&gt;&#xA;&lt;p&gt;*2 - But beware Gift vs Gift :))&lt;/p&gt;&#xA;&lt;p&gt;*3 - A rare case where a Wiki entry has at least some information to serve as pointer for details.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Like parity on a 8080 or zero detection for data by the 6800/6500 series.&lt;/p&gt;&#xA;&lt;p&gt;*5 - By initial design that is, as 'grown' architectures like x86 have to squeeze them in.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Basically the same number of markers (avoiding the term Flag on purpose) gets used differently on different instructions. For example on a /370&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;an arithmetic operation produced CC=0 for result zero, CC=1 for negative and CC=2 for positive and CC=3 for overflow&lt;/li&gt;&#xA;&lt;li&gt;A compare operation produces  CC=0 for equal, CC=1 for less than and CC=2 for greater than&lt;/li&gt;&#xA;&lt;li&gt;a logic operation produces CC=0 for zero and CC=1 for non zero&lt;/li&gt;&#xA;&lt;li&gt;a bit test operation produces CC=0 for all-zero, CC=1 for mixed and CC=3 for all-one&lt;/li&gt;&#xA;&lt;li&gt;a move long produces CC=0 for all transferred, CC=1 for receive-is-too-short and CC=2 for receive-field-was-padded&lt;/li&gt;&#xA;&lt;li&gt;and so on...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As a result only two bits of condition code are needed to store such an abstract result - and only a single set of test instructions are necessary to act, no matter how different the instruction results are.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-03T12:19:54.723" LastActivityDate="2020-08-03T12:19:54.723" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11665" PostTypeId="2" ParentId="11661" CreationDate="2019-07-14T15:54:26.097" Score="83" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I am unsure about what made it so crash prone&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To start with, it wasn't. Windows ME was not much different from 98SE and &lt;em&gt;on its own&lt;/em&gt; as stable as its predecessor.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The only plausible thing I could read about it was that it was forked from Windows 95 instead of Windows 98 but how could that be a possibility as it doesn't really make much sense in the end?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It wasn't. ME was based on 98SE with some parts (like the network stack) ported down from Win2k. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What were the technical changes inside it that made it such an unstable operating system?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now this comes closer to one of the factors why ME was such a failure, as MS did take away much compatibility for DOS without offering any replacement. Like ignoring all installations done via AUTOEXEC.BAT and CONFIG.SYS. Likewise HIMEM handling was changed - and while it improved performance notably, it broke the ability of many DOS programs to run. But not only DOS programs were affected, even rather up-to-date Windows programs could fail due to a changed registry structure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;More important than all technical reasoning, ME was a product and marketing failure&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First ME was hyped as kind of a Win2k 'light'.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Creating a feeling of buyers being second class.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Next ME switched (after initially different communication) to be DOS based,&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;but at the same time with reduced DOS compatibility&lt;/li&gt;&#xA;&lt;li&gt;Even worse, some of these changes crippled a major use for home PCs: &lt;em&gt;Games&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;All announced new features targeted only the home market (Not SOHO)&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Creating an image of being just good for non serious work (whereas Win98 was perceived as generally capable).&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;MS supported this by pushing professional users toward &lt;em&gt;Windows 2000 &lt;strong&gt;Professional&lt;/strong&gt;&lt;/em&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Indicating once more that ME is not intended for anything but 'simple' home use.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;MS advertisement focused on &quot;easy&quot;, &quot;simple&quot; and &quot;just works&quot;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Again creating the image it's meant for some 'less experienced' user group, not existing Windows users.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;While some internal components were taken from Win2k, no new capabilities were ported.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Offering no incentive to adapt advanced software to ME&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Real new/improved applications like Internet Exploder, Office, etc. were available for Win98 as well.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Removing any reason to switch because of applications. &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;The desktop was a crude mix-up of Win2k elements with a Win98 colour scheme.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Thus it was hard to see any improvement at first.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of this already created a rather negative image upfront, by reviews and word of mouth. Most common a feeling of ME being without any gain. By actual users this was enhanced due to&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;incompatibility issues&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;especially for DOS,&lt;/li&gt;&#xA;&lt;li&gt;and many Games&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;a crude UI mix-up between Win2k and Win98 (*1),&lt;/li&gt;&#xA;&lt;li&gt;no new functionality (*2),&lt;/li&gt;&#xA;&lt;li&gt;additional investment for new device drivers (Device driver signature) &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As a result ME combined the spending money and incompatibility issues with the burden of learning a new OS without any benefit of a real new one (for most cases).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A perfect storm and self fulfilling prophecy.&lt;/strong&gt; Negative reviews create even more negative response with everyone competing to find the bad sides. A product with no need doesn't sell in masses in tech.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: Archive.Org has got a nice &lt;a href=&quot;https://web.archive.org/web/20061231183738/http://www.winsupersite.com/reviews/millennium_b2_intro.asp&quot; rel=&quot;noreferrer&quot;&gt;Test of ME&lt;/a&gt; from when it was new.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Colours have already been mentioned, but it goes deeper, like having Network dialogue looking like Win2k, while working like Win98, Menus looking like Win2k but missing functions, or even worse, the items in the control panel being halfway between Win98 and Win2k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - To be fair, MS did add a lot of features in media handling, game support and power management - just none of them anywhere near a killer feature.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-16T00:03:02.970" LastActivityDate="2019-07-16T00:03:02.970" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="11666" PostTypeId="1" CreationDate="2019-07-14T19:52:29.087" Score="5" ViewCount="302" Body="&lt;p&gt;I am looking for a dimensioned drawing of a 64-pin SIMM PCB like the ones used in the Macintosh II series for the ROM SIMM. I looked in &lt;em&gt;Guide to the Macintosh Family Hardware&lt;/em&gt; and &lt;em&gt;Designing Cards and Drivers for the Macintosh Family&lt;/em&gt; and found the pinouts but no drawings showing where to put the holes and curved features on the board. Does anyone have this?&lt;/p&gt;&#xA;" OwnerUserId="7486" LastActivityDate="2019-07-18T07:45:16.113" Title="Dimensioned drawing of 64-pin SIMM?" Tags="&lt;apple-macintosh&gt;&lt;apple&gt;&lt;rom&gt;&lt;simm&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11667" PostTypeId="2" ParentId="11532" CreationDate="2019-07-15T06:45:44.490" Score="3" Body="&lt;p&gt;Those cables you're looking at have exactly the right number of pins for GPIB; your issue is that the arm doesn't use GPIB, at least not the arm's connectors used to interface it to a computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following information is taken from &lt;a href=&quot;https://web.archive.org/web/20100414140249/www.roboex.com/rv-m1.PDF&quot; rel=&quot;nofollow noreferrer&quot;&gt;this copy of the manual&lt;/a&gt; that I found on &lt;code&gt;archive.org&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The 36-pin &lt;a href=&quot;https://en.wikipedia.org/wiki/Micro_ribbon_connector&quot; rel=&quot;nofollow noreferrer&quot;&gt;micro-ribbon&lt;/a&gt; connector is a standard Centronics parallel interface used for PCs and printers, and you can use any standard PC&amp;lt;-&gt;printer parallel cable with that port. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The 25-pin &lt;a href=&quot;https://en.wikipedia.org/wiki/D-subminiature&quot; rel=&quot;nofollow noreferrer&quot;&gt;D-subminiature&lt;/a&gt; DB-25 connector is a standard serial connector with the device acting as DTE (data terminal equipment, like a computer, as opposed to DCE like a modem) so you will need to use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Null_modem&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;null modem&quot;&lt;/a&gt; cable to connect it to your computer. It's set to 9600 bps 7 data bits even parity and 2 stop bits by default; this is set with SW2 and SW3 under the door on the unit. (I suggest always turning the unit off before changing any switch settings.) Detailed instructions on the various settings are given in Appendix 2.3 of &lt;a href=&quot;https://web.archive.org/web/20100414140249/www.roboex.com/rv-m1.PDF&quot; rel=&quot;nofollow noreferrer&quot;&gt;the manual&lt;/a&gt;, but the most standard setting would be 9600/N/8/1 set with:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SW2: Switches 1-8: &lt;code&gt;1 0 1 1 0 0 0 1&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;SW3: Switch 8 on, all others off.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Either of these can be used to send commands to the arm. Serial is probably easier when using a computer, but there's also &lt;a href=&quot;https://learn-cnc.com/mitsubishi-movemaster-joint-tracking-part-2-communication/&quot; rel=&quot;nofollow noreferrer&quot;&gt;an example here&lt;/a&gt; of connecting and programming an Arduino for parallel communication, if you want to see how that works at a lowish level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Comands are simple short sequences of ASCII characters. The manual suggests that sending &lt;code&gt;NT&lt;/code&gt;, the &quot;return to origin&quot; command, is a good test sequence to see if communications is working. The full set of commands is described in chapter 3 of the &lt;a href=&quot;https://web.archive.org/web/20100414140249/www.roboex.com/rv-m1.PDF&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The additional 50-pin micro-ribbon connector, if present, gives connectivity to one of four different kinds of &quot;external I/O&quot; cards using different protocols from the ones described below. This is more complex to use and you probably don't want to bother with it unless you're good with electronics and ready to dig into the detailed description of it in the manual.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-15T10:04:04.093" LastActivityDate="2019-07-15T10:04:04.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11668" PostTypeId="1" AcceptedAnswerId="11669" CreationDate="2019-07-15T13:50:54.757" Score="9" ViewCount="416" Body="&lt;p&gt;From the Wikipedia's &lt;a href=&quot;https://en.wikipedia.org/wiki/CSG_65CE02&quot; rel=&quot;noreferrer&quot;&gt;65CE02 page&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Internally, the pipeline of the 65CE02 was redesigned to reduce the&#xA;  number of cycles required to execute an instruction. The 65CE02 can&#xA;  recover faster from engagement of the SYNC signal, which reduces the&#xA;  minimum instruction execution time from 2 cycles to 1 cycle.[3] These&#xA;  improvements allow the 65CE02 to execute code up to 25% faster than&#xA;  previous 65xx models.[2]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Are the two points, &quot;internally... redesign&quot; and &quot;recover faster&quot; one and the same, or two different things?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC, SYNC is the &lt;em&gt;result&lt;/em&gt; of an opcode fetch, not the &lt;em&gt;cause&lt;/em&gt; of it. But the way this is worded suggests the CPU was waiting on SYNC to stabilize or something?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone clarify what the original issue is and what they did to address it? This seems pretty major and I'm curious if this was something that could have happened in earlier generations.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="6794" LastEditDate="2019-07-18T01:15:22.100" LastActivityDate="2019-07-18T01:15:22.100" Title="SYNC and the 65CE02 instruction timing" Tags="&lt;6502&gt;&lt;instruction-set&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11669" PostTypeId="2" ParentId="11668" CreationDate="2019-07-15T14:59:01.337" Score="9" Body="&lt;p&gt;The two points are the same. The signal on the SYNC pin is neither the result nor the cause of an opcode fetch; it's internal signals in the chip that cause both the SYNC pin to go high and the data from the next memory fetch to be treated as the next opcode to execute. The Wikipedia article and the referenced patent are both talking about this separate internal &quot;SYNC&quot; signal, similar to but not the same thing as what appears on the SYNC pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original 6502 always did a memory access (read or write) with every clock cycle, and always took at least two clock cycles to execute an instruction. For multibyte instructions it would normally set up things internally so that as it was reading the last byte, the next memory access would read the next instruction and load it into the appropriate internal CPU latches, where it would be ready to execute as soon as the current instruction had completed executing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Single-byte instructions, however, still took two cycles so the second cycle would read the next byte but, since that wasn't further data for the current instruction, what was read would just be ignored. On the subsequent clock cycle (the third since the instruction had been read), the same memory location that had just been read would be read again, and this would load the internal latches with the next instruction to be executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good example of this can be seen in the first example in &lt;a href=&quot;https://xania.org/201405/jsbeeb-getting-the-timings-right-cpu&quot; rel=&quot;nofollow noreferrer&quot;&gt;jsbeeb Part Three - 6502 CPU timings&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Cycle 2 reads a &lt;code&gt;TAY&lt;/code&gt; (transfer A to Y) instruction from &lt;code&gt;$0002&lt;/code&gt; that takes no arguments.&lt;/li&gt;&#xA;&lt;li&gt;Cycle 3 reads the subsequent instruction, &lt;code&gt;CLC&lt;/code&gt; (clear carry), from &lt;code&gt;$0003&lt;/code&gt; but the read data are ignored by the CPU during this cycle as it executes the TAY.&lt;/li&gt;&#xA;&lt;li&gt;Cycle 4 re-reads the &lt;code&gt;CLC&lt;/code&gt; from &lt;code&gt;$0003&lt;/code&gt;, loading the internal chip latches to execute it on the next cycle.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Clearly this could be done a bit more efficiently by changing the internal signalling to understand that, when cycle 4 comes around, the &lt;code&gt;CLC&lt;/code&gt; has been loaded already (and presumbably the data read has been stored in some appropriate internal latches) and so that can be executed now, without re-reading it, and the memory controller can continue on reading the next byte from memory. That's what the patent describes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, this probably could have happened in earlier generations; it's basically just improved pipelining. However, it does seem to add not-insignificant extra logic, where part of the point of the 6502 was its very low transistor count for its relatively good feature set.* Adding such a feature later (when it's cheaper to do so) introduces the usual problem where changing timings breaks some existing software (games, drivers, copy protection—anything relying on tricks using timing) thus making it less useful as a substitute in existing microcomputer systems.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*For example, the 6502 had significantly more indexed addressing modes than the Intel 8080/8085, despite having not much more than half the transistor count.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-16T07:12:09.820" LastActivityDate="2019-07-16T07:12:09.820" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11670" PostTypeId="2" ParentId="11666" CreationDate="2019-07-15T15:08:56.043" Score="3" Body="&lt;p&gt;Here is what you likely need. However, note that I don't own a Mac II and I therefore can't be quite definitive. But I had a thorough look at Mac ROM SIMM photographs on the internet and it seems consistent. Unless they used some specific custom-manufactured connector that looks similar to the standard without being the standard, this should be it (just double-check the dimensions with the real hardware).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Mac ROM SIMM is much taller, though, according to what I've seen. But the height isn't a critical dimension for fitting the card in the connector, the only limit being what the case allows for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The drawing shows the 68-pin version, but the 64-pin version has the same layout, just look at the specific values for the A, F and E dimensions that I hilighted in the table. Dimensions are given in mm[inches]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dv7vm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dv7vm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://www.te.com/commerce/DocumentDelivery/DDEController?Action=showdoc&amp;amp;DocId=Customer+Drawing%7F822033%7FL%7Fpdf%7FEnglish%7FENG_CD_822033_L.pdf%7F822033-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;TE/AMP 822033-2 datasheet&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4614" LastEditorUserId="4614" LastEditDate="2019-07-17T13:34:02.207" LastActivityDate="2019-07-17T13:34:02.207" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11671" PostTypeId="2" ParentId="11661" CreationDate="2019-07-15T17:10:26.257" Score="3" Body="&lt;p&gt;My experience with ME was on a new build I made (1 GHz!) and I found it be the best build yet of Windows... However, I think I know what was wrong with it for others' uses. The memory handling was seriously flawed. I ran a little 'extra' called RAM something, and I could have it free up memory before running anything 'intensive' - or at any time really - as it showed the available, freeable and used amount all the time. Using that little extra made it extremely reliable - and it still is the only Windows build I ever used that would stay up 'clean' for weeks at a time. Perhaps 2 BSOD incidents in several years of use - until Linux took over my systems.&lt;/p&gt;&#xA;" OwnerUserId="14628" LastActivityDate="2019-07-15T17:10:26.257" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11672" PostTypeId="2" ParentId="2046" CreationDate="2019-07-15T20:12:54.320" Score="5" Body="&lt;p&gt;The 64KB of RAM for the 65C102 co-processor is provided by eight MB8264 64k x 1-bit chips. Each chip provides one bit of memory for every address, meaning that all eight chips are used for every memory location. In many instances, the failure of a RAM chip will affect all memory locations (including the 6502's page 0 registers), meaning that the co-processor won't be able to boot far enough to run any memory tests! But let's assume that the co-processor boots, and you want to test the rest of the memory.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Memory Map&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Before you start testing specific memory locations, you'll need to know what use is made of different locations. The &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/Acorn/Manuals/Acorn_65C102CoProUG.pdf&quot; rel=&quot;noreferrer&quot;&gt;User Guide&lt;/a&gt; for the 65C102 Co-Processor includes a memory map for the host (I/O) processor and the co-processor. When using Hi-BASIC, it is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         -------------- &amp;amp;FFFF&#xA;          Used by MOS&#xA;         -------------- &amp;amp;F7FF&#xA;          Hi-BASIC&#xA;          (or other&#xA;          Hi-language)&#xA;HIMEM -&amp;gt; -------------- &amp;amp;C000&#xA;&#xA;          User's BASIC&#xA;          program area&#xA;&#xA;PAGE --&amp;gt; -------------- &amp;amp;0800&#xA;          Used by MOS&#xA;         -------------- &amp;amp;0000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that the I/O processor will also have a memory space with addresses from &amp;amp;0000 to &amp;amp;FFFF. Because programs can access memory from either processor, references to the co-processor's memory are prefixed with FFFF. So the command &lt;strong&gt;?&amp;amp;2000=&amp;amp;55&lt;/strong&gt; would write the hexadecimal value &amp;amp;55 at &amp;amp;2000 in the I/O processor's memory, but &lt;strong&gt;?&amp;amp;FFFF2000=&amp;amp;55&lt;/strong&gt; would write it at &amp;amp;2000 in the co-processor's memory.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Testing Memory Locations (without crashing the machine)&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In my experience, most BBC Micro and Master RAM faults show up at many (if not all) possible locations, so you shouldn't worry about testing the highest and lowest 2K of RAM. Between PAGE and HIMEM, BASIC will arrange it's variables &lt;a href=&quot;http://beebwiki.mdfs.net/BASIC_memory_usage&quot; rel=&quot;noreferrer&quot;&gt;as follows&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   +-----------+ HIMEM&#xA;   |   BASIC   |&#xA;   |   stack   |&#xA;   +-----------+ STACK        ^&#xA;   |   free    |              |&#xA;   |   space   |              |&#xA;   +-----------+ VARTOP  increasing&#xA;   |   heap    |           memory&#xA;   |(variables)|          addresses&#xA;   +-----------+ LOMEM&#xA;   +-----------+ TOP&#xA;   |  program  |&#xA;   +-----------+ PAGE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So any addresses between the values returned by STACK and VARTOP are safe for you to PEEK and POKE at as much as you like. Writing and reading a selection of values (e.g. &amp;amp;00, &amp;amp;5A, &amp;amp;A5, %FF) from each address, and comparing the output with what you wrote, is a good strategy. You can use the PEEK and POKE commands or the &lt;a href=&quot;http://central.kaserver5.org/Kasoft/Typeset/BBC/Ch39.html&quot; rel=&quot;noreferrer&quot;&gt;indirect operators&lt;/a&gt; to do so. There are a few example BASIC programs on &lt;a href=&quot;https://stardot.org.uk/forums/viewtopic.php?t=4282&quot; rel=&quot;noreferrer&quot;&gt;this forum thread&lt;/a&gt; to help you get started. Remember to prefix your memory locations with FFFF to use the co-processor's memory!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to test the area of co-processor memory used for the language ROM (e.g. BASIC), this memory space is written to by the Master when copying BASIC there in the first place. You can read it back and compare it against the original. I suggest using BASIC rather than Hi-BASIC for this, as you can then test directly against the copy in the I/O processor's memory: testing for &lt;strong&gt;?&amp;amp;FFFF8000 &amp;lt;&gt; ?$8000&lt;/strong&gt; (and looping through to $BFFF) will pick out any memory locations that don't match.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, when using regular BASIC (instead of Hi-BASIC) on the co-processor, the 14k of memory from &amp;amp;C000 to &amp;amp;F7FF is free RAM, so you can test this memory be PEEKing and POKEing with the same BASIC programs as earlier.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Identifying the Faulty Chip&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you find any faults when writing to and reading from a memory location, you should be able to identify which bits of that byte are incorrect. The bits D0 to D7 (from most to least significant) correspond to the RAM chips IC18 to IC25 on the co-processor board, as seen in &lt;a href=&quot;https://www.domesday86.com/wp-content/uploads/2018/05/6502-Second-processor-schematic.jpg&quot; rel=&quot;noreferrer&quot;&gt;this circuit diagram&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;D0 is provided by IC18&#xA;D1 is provided by IC19&#xA;D2 is provided by IC20&#xA;D3 is provided by IC21&#xA;D4 is provided by IC22&#xA;D5 is provided by IC23&#xA;D6 is provided by IC24&#xA;D7 is provided by IC25&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-07-15T20:12:54.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11673" PostTypeId="2" ParentId="7148" CreationDate="2019-07-15T20:17:26.827" Score="1" Body="&lt;p&gt;Found it! Thanks to the excellent PET game database, it turns out I was looking for &lt;a href=&quot;https://www.commodoregamebase.com/PET/159.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Attack!&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-07-15T20:17:26.827" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11674" PostTypeId="1" CreationDate="2019-07-15T23:36:45.527" Score="13" ViewCount="4581" Body="&lt;p&gt;The Intel 8086 CPU uses memory segmentation, which means that when, for example, you write the value &lt;code&gt;123&lt;/code&gt; to the memory address &lt;code&gt;1001&lt;/code&gt;, the memory address &lt;code&gt;1001&lt;/code&gt; will actually get converted first into another real memory address and then the value &lt;code&gt;123&lt;/code&gt; will be written to that real memory address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I have read that the Intel 8085 CPU does not use memory segmentation, so does that mean that when you write the value &lt;code&gt;123&lt;/code&gt; to the memory address &lt;code&gt;1001&lt;/code&gt;, the value &lt;code&gt;123&lt;/code&gt; will actually be written to the memory address &lt;code&gt;1001&lt;/code&gt;, or does the Intel 8085 CPU use some other mechanism (other than memory segmentation) to convert the memory address &lt;code&gt;1001&lt;/code&gt; to another real memory address?&lt;/p&gt;&#xA;" OwnerUserId="14630" LastEditorUserId="836" LastEditDate="2019-07-16T13:13:58.457" LastActivityDate="2019-07-17T23:54:19.627" Title="Does the Intel 8085 CPU use real memory addresses?" Tags="&lt;history&gt;&lt;cpu&gt;&lt;segmentation&gt;" AnswerCount="7" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11675" PostTypeId="2" ParentId="11674" CreationDate="2019-07-15T23:44:52.497" Score="27" Body="&lt;p&gt;The 8085 is effectively the same as the 8080 microprocessor. The 8080 has a flat 16-bit address space and no segment registers. So yes, the 8085 uses real memory addresses without any translation.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2019-07-15T23:44:52.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11676" PostTypeId="2" ParentId="11674" CreationDate="2019-07-16T00:09:22.700" Score="5" Body="&lt;p&gt;We might speak to what happens within the CPU and what happens or can happen external to the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Between the CPU and memory subsystem, there is an address bus and a data bus (among some other signals that indicate when to read or write).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each new CPU defines the number of address pins it provides, and this width (count) of the address bus (pins) generally defines the maximum size of the address space, hence size of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data bus width generally says something about the performance, e.g. an 8-bit data bus means two transfers are required to transfer a 16-bit value to/from the memory subsystem, while a 16-bit data bus means a single transfer can do an 8- or 16-bit value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8080 and 8085 processors have 16 address pins.&amp;nbsp; They place the register or computed effective address directly on these address pins.&amp;nbsp; (Technically, what happens after that is up to the memory subsystem.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8086 has 20 address pins.&amp;nbsp; Since it is basically a 16-bit machine, the extra 4 bits have to come from somewhere, and the answer of course is the segment registers.&amp;nbsp; They are added (in a shifted-by-4 bit position) to the 16-bit effective address that was computed by the addressing mode, to produce a full 20 bit address for the address bus and hence the memory subsystem to see.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Systems well before the 8080 and well after the 8080 supported one form or another of address translation external to the CPU, so an MMU (memory management unit) might be interposed between the CPU and main memory.&amp;nbsp; Of late, though very sophisticated MMU functionality is incorporated into the CPU.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastActivityDate="2019-07-16T00:09:22.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11677" PostTypeId="2" ParentId="11674" CreationDate="2019-07-16T00:10:50.397" Score="14" Body="&lt;p&gt;Simply Yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A basic 8080/85 (or Z80) does just output the 16 bit address generated by an instruction. There is no inherent translation, Segmentation or whatsoever.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-07-16T00:10:50.397" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11678" PostTypeId="2" ParentId="11674" CreationDate="2019-07-16T00:53:50.090" Score="4" Body="&lt;p&gt;Depends on the memory subsystem and what you mean by &quot;real memory&quot; and memory address.  It's possible some 8085 systems had multiple external memory banks (e.g. totaling more than 64 kB) switched by an external register.  Switchable ROM overlays were common, not sure about RAM.  The bank switch pins might or might not be called address pins, but they do the same thing, in terms of selecting which bits of actual physical RAM to read or write, beyond what was in the instruction write target value.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2019-07-16T15:48:33.503" LastActivityDate="2019-07-16T15:48:33.503" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11680" PostTypeId="2" ParentId="6620" CreationDate="2019-07-16T01:08:53.890" Score="3" Body="&lt;p&gt;The original Apple II case was designed before the FCC started enforcing Part-15 consumer product RFI emission rules.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Atari used a metal shell inside a plastic case for the 400/800 because they thought the FCC rules would be enforced more strongly.  Apple instead switched to plastic with a conductive coating inside and lots of gaskets instead so the Apple II+/IIe could squeak by the US FCC RFI standards (just barely).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, yes, Steve Jobs wanted a case with a certain specific type of chamfered corners, which was much more costly and difficult to do in metal (although Apple did get a metal transmission case vendor to make them for the Apple III).&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2019-07-16T01:14:10.763" LastActivityDate="2019-07-16T01:14:10.763" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11681" PostTypeId="2" ParentId="11674" CreationDate="2019-07-16T07:11:20.557" Score="5" Body="&lt;p&gt;The Intel 8085 CPU can only send out 16-bit addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What happens to those 16-bit addresses is out of the control of the CPU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a normal system, some number of those bits would be sent to every RAM and ROM chip in the machine. At the same time, the remaining bits would be passed to a decoder chip which has one output going to each of those memory chips. According to the bit pattern, &lt;strong&gt;one&lt;/strong&gt; of those outputs would say “ENABLE - please output the 8 bits of data corresponding to the address you are seeing” and all the others would say “DISABLE - do nothing and ignore the address”.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I said that the decoder acts according to the address bits it receives. This is not true. The decoding subsystem also has a &lt;em&gt;state&lt;/em&gt;. To take one universal example: when the machine is switched on, it is in a “startup” state. In that state the decoder will send ENABLE to the ROM for certain addresses. This is how the system can start up at all: the ROM contains the initial program instructions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the system has started, it is in a “run” rather than a “startup” state. In that state, the ROM never receives ENABLE: one of the RAM chips receives it instead. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 8080/8085/Z80 systems, the setting of the “startup/run” state is done by outputting a value to an I/O port using the &lt;code&gt;OUT&lt;/code&gt; instruction. Which port, and which value, is decided by the designer of the machine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have this mechanism, and once RAM has got cheaper, there is nothing to stop you switching not between ROM and RAM but between RAM and RAM. For instance, in a multitasking operating system such as MP/M or TurboDOS, you could organise things so that the top 16KB of memory addresses will always enable the same memory chip(s), while the remainder of the addresses will enable different memory chip(s) depending on what value had most recently been written to the special output port. To switch between one “bank” of chips and another thus means: output a new bank number to the special output port. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is more or less an equivalent to loading a segment register in the 8086.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you search for “Z80” and “bank switching” you will see many thorough and authoritative articles on the subject. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And to revert to your original 8085 question: no, the 8085 chip had no memory management, and yes, an 8085system could have as much memory management as its designer felt like including. &lt;/p&gt;&#xA;" OwnerUserId="11867" LastActivityDate="2019-07-16T07:11:20.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11682" PostTypeId="1" CreationDate="2019-07-16T07:44:15.777" Score="21" ViewCount="5293" Body="&lt;p&gt;I'd like to build an FPGA replica of a home computer based on the Intel 8080. I am not looking to design my own computer, since I would like to tap into an existing software base. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there any Intel 8080 based home computers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify, I would like something that meets the following criteria:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It is a general computing device, not a game console  / arcade machine (this rules out &lt;a href=&quot;https://en.wikipedia.org/wiki/Space_Invaders&quot; rel=&quot;noreferrer&quot;&gt;Space Invaders&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;A standalone machine (not a terminal like the &lt;a href=&quot;https://oldcomputers.net/compucolor-8001.html&quot; rel=&quot;noreferrer&quot;&gt;Compucolor 8001&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Keyboard and video output (unlike the &lt;a href=&quot;https://oldcomputers.net/altair-8800.html&quot; rel=&quot;noreferrer&quot;&gt;Altair 8800&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Boots to BASIC or comparably user-friendly setting&lt;/li&gt;&#xA;&lt;li&gt;Non-CPU parts documented well enough; even better if an open-source emulator exists&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I know there is no shortage of Z80-based home computers, so there's always the plan B of just extending my i8080 into a full-blown Z80 and going from that, but if possible, I'd like to avoid that for now.&lt;/p&gt;&#xA;" OwnerUserId="115" LastEditorUserId="5436" LastEditDate="2019-07-16T17:32:55.403" LastActivityDate="2020-02-25T07:04:33.143" Title="Intel 8080-based home computers" Tags="&lt;8080&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="9" CommentCount="4" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11683" PostTypeId="2" ParentId="11682" CreationDate="2019-07-16T08:03:48.740" Score="12" Body="&lt;p&gt;The Intel 8080 was apparently not that popular in the West for home computers. I think it was more marketed at industrial control or whatever, but I can't say for sure. Either way, Intel soon came up with its successors, the 8088 and so on, so the plain old 8080 wasn't that common. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in the Soviet Union the KR580VM80A is basically the same thing as an 8080. It saw some use in some home computers (but was markedly less common than Z80 derivatives and PDP-11 derivatives). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Orion-128&quot; rel=&quot;noreferrer&quot;&gt;Orion-128&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Specialist_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Specialist&lt;/a&gt; are two examples of DIY computers that match your criteria, except that they boot to a monitor, not to BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://muuseum.at.mt.ut.ee/kogu/165.html&quot; rel=&quot;noreferrer&quot;&gt;Baltijets Juku&lt;/a&gt; from Estonia I believe booted to BASIC, but I don't know that much is known about its internals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Vector-06C&quot; rel=&quot;noreferrer&quot;&gt;Vector 06C&lt;/a&gt; from the Moldovan SSR is at any rate well-understood and boots to BASIC and has a library of software including homebrew games and has a lively community even today.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-07-16T08:03:48.740" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11684" PostTypeId="2" ParentId="11682" CreationDate="2019-07-16T08:05:07.490" Score="11" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PMD_85&quot; rel=&quot;nofollow noreferrer&quot;&gt;PMD85&lt;/a&gt; was reasonably popular in Czechoslovakia, there is &lt;a href=&quot;http://www.schotek.cz/pmd/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;a lot&lt;/a&gt; &lt;a href=&quot;https://pmd85.borik.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;of documentation&lt;/a&gt; (if you can read Slovak or Czech), there are &lt;a href=&quot;https://pmd85.borik.net/wiki/Emulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;several emulators&lt;/a&gt;, including &lt;a href=&quot;https://github.com/mborik/GPMD85Emulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;an Open Source one&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="476" LastEditorUserId="476" LastEditDate="2019-12-08T12:05:24.163" LastActivityDate="2019-12-08T12:05:24.163" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11685" PostTypeId="2" ParentId="11661" CreationDate="2019-07-16T08:49:59.620" Score="1" Body="&lt;p&gt;This was just part of MS operating cycle. If you look at the iterations of Windows (not including the NT line) from Win95 onwards then it looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 95 - good&lt;br&gt;&#xA;Windows 98 - flaky&lt;br&gt;&#xA;Windows 98SE - good&lt;br&gt;&#xA;Windows ME - flaky&lt;br&gt;&#xA;Windows XP - good&lt;br&gt;&#xA;Windows Vista - flaky&lt;br&gt;&#xA;Windows 7 - good&lt;br&gt;&#xA;Windows 8 - flaky&lt;br&gt;&#xA;Windows 10 - good  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it can be seen that every second version was flaky* in some way, either more prone to crashes than its predecessor or otherwise just &quot;not as good&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;* This is entirely subjective, dependent on the particular hardware in use, other software installed, and on the opinion of the user. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;** This answer should be taken with a measure of skepticism as to whether it is a serious answer or a little tongue-in-cheek.&lt;/p&gt;&#xA;" OwnerUserId="4763" LastActivityDate="2019-07-16T08:49:59.620" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="11686" PostTypeId="2" ParentId="11682" CreationDate="2019-07-16T09:20:25.650" Score="21" Body="&lt;p&gt;The 8085, which came out two years after the 8080, rapidly became more popular for most applications because it required only +5 V power (as opposed to +5/-5/+12 V) and less external support circuitry. (Today there are a number of 8085 single-board computer designs available, such as &lt;a href=&quot;https://www.glitchwrks.com/2018/06/30/8085-sbc-rev3&quot; rel=&quot;noreferrer&quot;&gt;glitchworks&lt;/a&gt; and &lt;a href=&quot;https://hackaday.com/2018/08/20/omen-alpha-a-diy-8085-based-computer/&quot; rel=&quot;noreferrer&quot;&gt;OMEN&lt;/a&gt;; 8080 designs &lt;a href=&quot;http://www.s100computers.com/My%20System%20Pages/8080%20CPU%20Board/8080%20CPU%20Board.htm&quot; rel=&quot;noreferrer&quot;&gt;exist&lt;/a&gt; but seem few and far between.) Because of this, I'd suggest you should consider an 8085-based design, rather than an 8080-based design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The supply voltage differences are obviously of no importance to you given that you're rolling your own FPGA, but the other 8085 changes make a slight to large difference depending on just to what extent you're going to emulate the hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At one extreme you could simply emulate everything in the FPGA, in which case you may still want to include a few extra software-visible features that the 8085 had over the 8080, such as the &lt;code&gt;SIM&lt;/code&gt; and &lt;code&gt;RIM&lt;/code&gt; (set and read interrupt mask) instructions and the additional interrupts, just in case you want to port 8085 software from other systems to yours. (This shouldn't affect backwards compatibility at all.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you start to bring specific buses/signals out of the FPGA so that you could interface external parts to it the way you could with a real 8080 or 8085, there are more differences you'd need to be congnizant of, such as the multiplexed address/data bus of the 8085. (Intel's chips designed for use with the 8085 had built-in support for this.) But in this case you'd also need to be concerned about the interfaces presented by the original computer system you're emulating.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="13472" LastEditDate="2019-07-18T17:07:26.657" LastActivityDate="2019-07-18T17:07:26.657" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11687" PostTypeId="2" ParentId="11682" CreationDate="2019-07-16T09:41:36.540" Score="10" Body="&lt;p&gt;I've found two computers that fit my bill of a &quot;home computer&quot; that use the Intel 8080 processor:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Compucolor_II&quot; rel=&quot;noreferrer&quot;&gt;Compucolor II&lt;/a&gt; from 1977 uses an SMC CRT5027 / TMS9927 video chip to produce color graphics. An open source emulator is &lt;a href=&quot;https://github.com/jtbattle/ccemu&quot; rel=&quot;noreferrer&quot;&gt;available on GitHub&lt;/a&gt;. This one is very promising.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Interact_Home_Computer&quot; rel=&quot;noreferrer&quot;&gt;Interact Model One&lt;/a&gt; from 1978 has a name that is very unsuited for googling, after all, which computer didn't have a Model One and what emulator isn't Interactive... I've found &lt;a href=&quot;http://dchector.free.fr/&quot; rel=&quot;noreferrer&quot;&gt;this page in French&lt;/a&gt; but the downloadable Zip only contains a Windows executable.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="115" LastActivityDate="2019-07-16T09:41:36.540" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11688" PostTypeId="2" ParentId="11682" CreationDate="2019-07-16T12:48:25.857" Score="9" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/DAI_Personal_Computer&quot; rel=&quot;noreferrer&quot;&gt;DAI Personal Computer&lt;/a&gt; (Belgium, 1980) used an 8080A. It had some interesting features (optional maths coprocessor, servo-controlled &lt;a href=&quot;https://fjkraan.home.xs4all.nl/comp/dai/&quot; rel=&quot;noreferrer&quot;&gt;microcassette data storage&lt;/a&gt;) but was rather expensive.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-07-16T12:48:25.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11689" PostTypeId="2" ParentId="11682" CreationDate="2019-07-16T13:30:31.780" Score="15" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Were there any Intel 8080 based home computers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, but the number is rather small, as at the point when the idea of a home computer as we know it today (and you describe) became popular, better 'versions' of the 8080 were already available, most notably the 8085 and Z80. Importantly for low cost computer design, they did away with -5 and +12V supply, thus simplifying power supply design a lot.&lt;/p&gt;&#xA;&lt;p&gt;Some on this list may be&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sol-20&quot; rel=&quot;nofollow noreferrer&quot;&gt;SOL 20&lt;/a&gt; of 1976. As early as it can get for a desktop computer.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Compucolor_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compucolor II&lt;/a&gt; of 1977. A prototypical home computer due to its consequent consumer design.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Interact_Home_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Interact Home Computer&lt;/a&gt; of 1978. Already quite late for an 8080 machine and mainly sold even later by liquidators. It might not fully fit your needs as the BASIC needs to be loaded from tape.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.old-computers.com/museum/doc.asp?c=151&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micronique Interact&lt;/a&gt; of 1980 (!). The same machine, but now made and sold by a French company.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/DAI_Personal_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;DAI Personal Computer&lt;/a&gt; of 1980. Originally designed to be the (European) TI home computer. Eventually the most ambitious machine of them all. Quite a great design for back then.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;As said, the time of the 8080 for new designs was already long gone when home computers became a thing, so these are rather oddities - at least in the west. History is different within the former east bloc as their hardware/CPU development lagged behind (due to cloning), while information about microprocessor applications was ready available (as &lt;a href=&quot;/a/11683&quot;&gt;Wilson already mentioned&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;There are 8080 clones like the Russian &lt;a href=&quot;https://en.wikipedia.org/wiki/KR580VM80A&quot; rel=&quot;nofollow noreferrer&quot;&gt;КР580ВМ80А&lt;/a&gt; (1979) or the Polish &lt;a href=&quot;http://www.cpu-world.com/CPUs/8080/Poland-MCY7880.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MCY7880&lt;/a&gt; (introduced rather late in the early 1980s). All of these machines were rather plain 8080 systems. Starting from Kits like &lt;a href=&quot;https://en.wikipedia.org/wiki/Micro-80&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micro-80&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Radio-86RK&quot; rel=&quot;nofollow noreferrer&quot;&gt;Радио-86РК&lt;/a&gt; all the way to quite modern, feature-rich systems like &lt;a href=&quot;https://en.wikipedia.org/wiki/Vector-06C&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vector-06C&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Orion-128&quot; rel=&quot;nofollow noreferrer&quot;&gt;Orion-128&lt;/a&gt;. The landscape was at least as diverse as in the West, if not more. All with a certain time shift.&lt;/p&gt;&#xA;&lt;p&gt;More relevant to your task would be the rather large selection of software these machines featured, as each had (in their countries) a quite strong fellowship. On the down side, it's usually in the local language with no English documentation and hard to find, as relevant web pages are also in the same language - Google Translate is only a help &lt;strong&gt;after&lt;/strong&gt; a relevant page is found.&lt;/p&gt;&#xA;&lt;p&gt;Of all the Eastern 8080 based machines, the Czechoslovakian &lt;a href=&quot;https://en.wikipedia.org/wiki/Tesla_(Czechoslovak_company)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tesla&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/PMD_85&quot; rel=&quot;nofollow noreferrer&quot;&gt;PMD 85&lt;/a&gt; is worth a look. Despite its name, it's not an 8085 CPU, but their own &lt;a href=&quot;http://www.cpu-world.com/CPUs/8080/Tesla-MHB8080A.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MHB8080A&lt;/a&gt; (the semiconductor division is nowadays part of &lt;a href=&quot;https://en.wikipedia.org/wiki/ON_Semiconductor&quot; rel=&quot;nofollow noreferrer&quot;&gt;ON Semiconductor&lt;/a&gt;). The machine is not only remarkable for its huge amount of available software, but also for having evolved over the years from B&amp;amp;W to colour and into several spin-offs like the &lt;a href=&quot;https://en.wikipedia.org/wiki/MA%C5%A4O&quot; rel=&quot;nofollow noreferrer&quot;&gt;MATO&lt;/a&gt; - while the basic hardware is rather straightforward.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;An oddity here was the otherwise usually advanced East Germany. While following the Intel lane (unlike &lt;a href=&quot;https://en.wikipedia.org/wiki/Pravetz_computers&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bulgaria&lt;/a&gt;), they skipped the 8080/8085 steps and went directly from i8008 (&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8008#Second_sources&quot; rel=&quot;nofollow noreferrer&quot;&gt;U808&lt;/a&gt;) to Z80 (&lt;a href=&quot;https://en.wikipedia.org/wiki/U880&quot; rel=&quot;nofollow noreferrer&quot;&gt;U880&lt;/a&gt;) - which is a story of its own. Thus even their earliest kits (&lt;a href=&quot;https://de.wikipedia.org/wiki/LC80&quot; rel=&quot;nofollow noreferrer&quot;&gt;LC80&lt;/a&gt;) and home/small computers (&lt;a href=&quot;https://en.wikipedia.org/wiki/Robotron_KC_87&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z9001&lt;/a&gt;/&lt;a href=&quot;https://en.wikipedia.org/wiki/KC_85&quot; rel=&quot;nofollow noreferrer&quot;&gt;HC900&lt;/a&gt;) used it from the start.&lt;/p&gt;&#xA;&lt;p&gt;Then, why not use using some Hungarian machine? Sure, all (genuine Hungarian) machines I know of (Mikrokey Primo, Triton, Aircomp) are Z80-based, but it should be fairly simple to adjust the design to work with an 8080 - especially in FPGA, were the RAM is embedded anyway. After all, you should have much less hassle to dig up documentation and software for these, shouldn't you? :)) Of course, you may need some backward translator Z80 to 8080. So not much fun.&lt;/p&gt;&#xA;&lt;p&gt;An only slightly different way would be switching the 8080 for an 8085, like &lt;a href=&quot;/a/11686&quot;&gt;Curt sugested&lt;/a&gt;. In most respects, the 8085 is only a hardware update to simplify system build. Only two official new operations were included, which in addition almost never got used in full. Of course it had some lesser known but &lt;a href=&quot;/a/8041&quot;&gt;quite handy extensions&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;While I can't think of a plain 8085 home computer, the CPU is most notable for being used by the quite well selling Kyotronic 85 series - usually disguised as NEC 8201/8300, Olivetti M10, Tandy M100/M102. They are stand alone, have BASIC, lots of other software (in ROM and loadable), are simple (all parts obvious). Only TV out is not by default but needs an extension. Now, doing an all-in-one Kyotronic would be a cool project I'd love to see - or may even join.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Conclusion:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'd like to build an FPGA replica of a home computer based on the Intel 8080.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If you want to have &lt;em&gt;some&lt;/em&gt; software to choose, you may settle for the Interact as the basic documentation is available in English (more advanced and most software in French) or any of the eastern (and learn Czech, Russian, ...)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you want hardware that allows to build your FPGA system in incremental but complete steps, the PMD 85 is your choice.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you want a well defined and satisfying system with lots of extraordinary features and few but awesome (system) software, go for the DAI (some French/Dutch might be helpful).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you want to have something with a &lt;strong&gt;huge&lt;/strong&gt; user and software base, maybe even useful today, go for the Kyotronic 85 (no Japanese required) .&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-05T10:58:39.287" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="11690" PostTypeId="1" CreationDate="2019-07-16T16:32:18.530" Score="1" ViewCount="375" Body="&lt;p&gt;The address bus of the Intel 8086 CPU is 20-bits, and when you want to specify a memory address to read from or write to, you would form the memory address using a segment register and an offset register combination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the memory address that the segment register+offset register forms is not a real memory address, it has to be converted first into another real memory address and then it can be used for reading or writing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why doesn't the Intel 8086 CPU use real memory addresses from the beginning?&lt;/p&gt;&#xA;" OwnerUserId="14630" LastActivityDate="2019-07-17T07:10:24.480" Title="Why doesn't the Intel 8086 CPU use real memory addresses?" Tags="&lt;history&gt;&lt;cpu&gt;&lt;segmentation&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2019-07-16T17:17:25.017" ContentLicense="CC BY-SA 4.0" />
  <row Id="11691" PostTypeId="2" ParentId="11690" CreationDate="2019-07-16T17:17:14.007" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;But the memory address that the segment register+offset register forms is not a real memory address, it has to be converted first into another real memory address and then it can be used for reading or writing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The only transformation is the “segment × 16 + offset” calculation, which yields a physical address which is emitted as-is on the address bus. There is no further transformation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But why doesn't the Intel 8086 CPU use real memory addresses from the beginning?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I’ve interpreted “from the beginning” as “internally”, or “in its address registers”, and your overall question as “why doesn’t the Intel 8086 CPU manipulate 20-bit physical addresses internally”, or as I put it earlier, “why does the Intel 8086 CPU encode its physical addresses using a segment and offset” (instead of a single 20-bit value).&lt;/p&gt;&#xA;&lt;p&gt;The simple answer to that is that it’s a 16-bit CPU, with 16-bit-wide registers (and words); so its 20-bit addresses can’t be represented using a single register, and it can’t perform arithmetic on them. The designers of the 8086 considered other approaches; &lt;a href=&quot;https://www.stevemorse.org/8086history/8086history.doc&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Intel Microprocessors: 8008 to 8086&lt;/em&gt;&lt;/a&gt; says that&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Various alternatives for extending the 8080 address space were considered. One such alternative consisted of appending 8 rather than 4 low-order zero bits to the contents of a segment register, thereby providing a 24-bit physical address capable of addressing up to 16 megabytes of memory. This was rejected for the following reasons:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Segments would be forced to start on 256-byte boundaries, resulting in excessive memory fragmentation.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The 4 additional pins that would he required on the chip were not available.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It was felt that a 1-megabyte address space was sufficient.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Beyond the technical considerations of supporting 24-bit- or 32-bit-wide addresses, there were also backward-compatibility considerations which led to the use of 16-bit-wide registers only; these are detailed in the answers to &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/6979/79&quot;&gt;Why didn&amp;#39;t the 8086 use linear addressing?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When developing on the 8086, developers didn’t really consider the segment:offset addresses as any different from physical memory addresses; I know my brain could quickly perform the shift and addition involved (helped by the choice of segment addresses which were usually “nice to handle”).&lt;/p&gt;&#xA;&lt;p&gt;This ignores the address decoding hardware, which can of course do anything it likes; see &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11674/79&quot;&gt;Does the Intel 8085 CPU use real memory addresses?&lt;/a&gt; for related discussions.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-17T07:10:24.480" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="11692" PostTypeId="2" ParentId="6960" CreationDate="2019-07-16T19:29:42.433" Score="11" Body="&lt;p&gt;There was no clock.  The way it worked was the Unibus and KA11 were intimate.  To read a word from the bus, maybe core, maybe something else, the cpu put out address, control bits and data if write, wait some Unibus specified delay nanoseconds, then assert master sync.  The slave decoded the master sync, address, and control then read the data or output data with slave sync.  The cpu would see slave sync, wait for skew, take the data if reading, turn off master sync and wait some Unibus specified nanoseconds.  The slave device slave sync response time set the speed of the transfer.  The KA11 took the data through the data path according to the current machine state or instruction.  The ALU in the data path had two distinct speeds.  If there was no carry, move, bit test, etc, the fast time was used.  If there was a carry involved, increment, add, etc, the slow time was used.  The two times were set by R and C values on a 74121 dual one shot timer chip.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, the asynchronous RC timing in the core memory, and the asynchronous RC timing in the CPU set the speed of the system. There was no 10 MHz oscillator.  All the other PDP-11 processors were microcoded and had oscillators.  Speed of execution of a program still depended on memory access time.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember, core, with a destructive read, required a write to restore the data that was read.  In the PDP-8 the CPU did the restore.  In the PDP-11 each core subsystem did it's own restore.  That made interleave possible.  The machine I used had 12K words of core in 3 4K word banks.  The bottom 8K words of addresses were split between the two bottom 4K word subsystems.  Rather than decoding address bits 13, 14, and 15 to select a memory system bits 1, 14, and 15 were used.  Odd words were in one bank, even words in the other.  With the program counter stepping through sequential words like mov #32, @#56, the words would come from alternate banks.  A core subsystem with an 800 ns read access and a 2 microsecond cycle time allows the second word read to happen while the first word restore is still in progress.  A program loop speed would then depend on whether the program was in the first 8k words with interleave or the last 4K word bank (selected by address bits 13, 14, and 15) without interleave.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know whether DEC typically shipped these machines with interleaved memory.  Systems with 2 or 4 memories were interleaved at least in some cases by the installing technician.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;DMA, using the Unibus, transferred data similarly.  The NPR, non processor request, and NPG, non processor grant, transferred Unibus mastership then the the IO device would do like the CPU and read or write.  Interleave worked there too if there were multiple sequential words to transfer.  If the IO device was run from a 10 MHz clock then the slave sync wouldn't be noticed until the next clock like a microcoded PDP-11/05.  &lt;/p&gt;&#xA;" OwnerUserId="14639" LastActivityDate="2019-07-16T19:29:42.433" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11693" PostTypeId="2" ParentId="11682" CreationDate="2019-07-16T21:04:58.667" Score="5" Body="&lt;p&gt;I think the 8080A based Triton meets your requirements (although it was a kit computer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.computinghistory.org.uk/det/6210/Transam-Triton/&quot; rel=&quot;noreferrer&quot;&gt;http://www.computinghistory.org.uk/det/6210/Transam-Triton/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember adding a S100 based 8K memory expansion out of 2114L chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I regret chucking it out when I moved home.&lt;/p&gt;&#xA;" OwnerUserId="14642" LastActivityDate="2019-07-16T21:04:58.667" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11694" PostTypeId="2" ParentId="9328" CreationDate="2019-07-17T03:20:55.893" Score="3" Body="&lt;p&gt;In the DEC book &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/www.computer.museum.uq.edu.au/pdf/DEC-11-NFPMA-C-D%20FPMP-11%20User%27s%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;FPMP-11 USER'S MANUAL&lt;/em&gt;&lt;/a&gt; DEC-11-NFPMA-C-D from 1972 they describe J5RR Mode.&lt;/p&gt;&#xA;&lt;p&gt;from page 3-10&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;3.3.2 J5RR Mode&lt;/p&gt;&#xA;&lt;p&gt;J5RR Mode is the calling convention used by most of the FORTRAN library functions.  J5RR mode calls are of the form&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;JSR   R5,subroutine  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;All argument addresses are placed in a list following the subprogram call.  The generalized standard sequence is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   .GLOBL SUBR  &#xA;   JSR  R5,SUBR  &#xA;   BR   XX  &#xA;   A  &#xA;   B  &#xA;   .  &#xA;   .  &#xA;   .  &#xA;   Z  &#xA;XX:  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Where A, B...Z are argument addresses.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is distinct from the form called polish mode where data are pushed on the stack and the call is followed by addresses of routines.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MOV   C+2,-(SP)  &#xA;MOV   C,-(SP)  &#xA;MOV   B+2,-(SP)  &#xA;MOV   B,-(SP)  &#xA;MOV   A+2,-(SP)  &#xA;MOV   A,-(SP)  &#xA;JSR   R4,$POLSH  &#xA;.WORD  $ADR   ;ADD A TO B  &#xA;.WORD  $MLR   ;MULTIPLY SUM BY C  &#xA;.WORD  .+2    ;LEAVE POLISH MODE  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If the number of parameter words might be variable in the J5RR mode the branch low byte is the count of parameter words actually present.&lt;/p&gt;&#xA;&lt;p&gt;So JSR R5 followed by addresses of data is J5RR and JSR R4 followed by addresses of code routines is polish.  I have seem polish used other places but this is the only place I recall seeing J5RR.&lt;/p&gt;&#xA;&lt;p&gt;Null terminated ASCII strings are different.&lt;/p&gt;&#xA;" OwnerUserId="14639" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-22T07:15:05.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11695" PostTypeId="2" ParentId="11674" CreationDate="2019-07-17T14:31:44.110" Score="2" Body="&lt;p&gt;In fact, both the 8086 and the 8085 use real addressing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8085, like the 8080, has a 16-bits address space from $0000 to $FFFF (65536 bytes). You can use any 16-bit register to hold an address, or push 2 bytes on the stack and return, use them in jumps etc. A 16-bit value in an addressing instruction or register directly matches a precise byte of memory or at least, a direct 16-bit address in addressing range. The actual hardware behind the bit pins of the CPU can interpret them differently, as it happened on various micro-computers of the 1980 era which sometimes had memory bank-switching systems. But the CPU addressing is a real-address scheme.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also a real-address scheme in the 8086 and its 80186 successor. Intel used segmentation with a 16-bit segment register and a 16-bit offset register, but the 8086 actually uses real addresses in the 20-bits space $00000 to $FFFFF (16 * 64 Kilobytes = 1 megabyte). The actual, real address is formed by shifting the segment register 4 bits to the left to make it a 20-bits value and adding the offset address. For example, the segment $1000 and the offset $2345 leads to the actual 20-bits address $10000+$2345 = $12345. The CPU pins outputs the final 20 bits on the address bus, there are not separate pins for the segment register content.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &quot;pseudo&quot; segmentation has been criticized in its time because it let the programmer think/feel a  segment is isolated from another one, which is absolutely NOT true. For instance, both $1000:$2345 and $1234:$0005 represent the same actual address $12345. There are less obvious examples such as $8800:$9f65 and $9100:$0f65. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Non-real addressing in Intel processors started with the 80286.&lt;/p&gt;&#xA;" OwnerUserId="10638" LastActivityDate="2019-07-17T14:31:44.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11697" PostTypeId="2" ParentId="11674" CreationDate="2019-07-17T23:54:19.627" Score="0" Body="&lt;p&gt;Not sure if it is applicable, but... there is a computer system that runs with Z-80 (which is a close relative to 8080/8085). It can map up to 4Mb of memory in a 16-bit address linking 16Kb pages into the CPU bus listening to a port (or a memory position), and the CPU doesn't even know about it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.lavandeira.net/2016/07/multi-review-msx-memory-mapper-mega-mapper-and-memory-samurai-part-1-of-2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.lavandeira.net/2016/07/multi-review-msx-memory-mapper-mega-mapper-and-memory-samurai-part-1-of-2/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, there are a number of ways to accomplish a memory mapping without direct CPU support, just hot-pluggging memory pages into CPU directly, through a hardware switcher. It was made for MSX, but I don't recall something like this on the IBM world.&lt;/p&gt;&#xA;" OwnerUserId="14659" LastActivityDate="2019-07-17T23:54:19.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11698" PostTypeId="1" CreationDate="2019-07-17T23:55:25.417" Score="22" ViewCount="9809" Body="&lt;p&gt;Based on my understanding, the bitness of a CPU specifies how much memory it can address (which is determined by the size of the CPU's address bus I guess). For example: a 32-bit CPU can address 2&lt;sup&gt;32&lt;/sup&gt; bytes of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why is the Intel 8086 CPU called a 16-bit CPU even though its address bus is 20-bit, shouldn't it be called a 20-bit CPU?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Addendum: There is a somewhat similar question about bitness and marketing of the Mega Drive: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11210/why-was-the-sega-genesis-marketed-as-a-16-bit-console&quot;&gt;Why was the Sega Genesis marketed as a 16-bit console?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="14660" LastEditorUserId="6659" LastEditDate="2019-07-19T14:30:49.980" LastActivityDate="2019-11-30T19:50:09.397" Title="Why is the Intel 8086 CPU called a 16-bit CPU?" Tags="&lt;8086&gt;" AnswerCount="7" CommentCount="7" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11699" PostTypeId="2" ParentId="11698" CreationDate="2019-07-18T00:08:12.113" Score="61" Body="&lt;p&gt;Generally, the &quot;bitness&quot; of a CPU is determined by the usual or common size of its data registers (or, the width of its data bus), rather than the width of the address bus. There are exceptions, for example while the 8086 is considered a 16-bit CPU because it has a 16-bit data bus, the 8088 (which is software compatible with the 8086 and is also a 16-bit CPU) only has an 8-bit data bus which was less efficient. But functionally, it works just like the 8086.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today's common 64-bit CPUs have 64-bit wide data registers and data bus, but the address bus isn't anywhere near 64 bits (that would be wasteful, because there isn't 2^64 bytes of memory that has &lt;em&gt;ever&lt;/em&gt; been manufactured, let alone installed in one system).&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2019-07-18T00:08:12.113" CommentCount="30" ContentLicense="CC BY-SA 4.0" />
  <row Id="11700" PostTypeId="2" ParentId="8504" CreationDate="2019-07-18T01:53:23.783" Score="4" Body="&lt;p&gt;The UBC Computer Centre had PDP-11s as front ends to its S/370 (and later Amdahl) computers; as far as I know there were no patent issues. There was also a company called Auscom that built interfaces: here's an &lt;a href=&quot;https://books.google.com/books?id=Icuq-8CViD4C&amp;amp;pg=RA1-PA16&amp;amp;lpg=RA1-PA16&amp;amp;dq=auscom%20peripherals&amp;amp;source=bl&amp;amp;ots=TZRZnWorhC&amp;amp;sig=ACfU3U1uU5ptdMAjR61kWxaF18iS5SxwCQ&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwjm_cmirL3jAhWTKM0KHbW3DNIQ6AEwAXoECAYQAQ#v=onepage&amp;amp;q=auscom%20peripherals&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;advert&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My recollection is that part of the Teletype anti-trust settlement, IBM was required to provide interface specifications. (At one time, a friend and I were considering starting a company to build S/370-compatible peripherals, but that was around 1980+/- and memory fades as to the details.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recall having the entire source for MFT on microfiche (written in assembler and PL/S), also the source for the PL/1 compiler. I was told that the MTS operating system used the core pieces of OS/360 MFT for its 1st and 2nd level interrupt handlers, time-slicing, I/O and disk layout (VTOC etc) and that was roughly 16KB.&lt;/p&gt;&#xA;" OwnerUserId="14661" LastActivityDate="2019-07-18T01:53:23.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11701" PostTypeId="2" ParentId="11698" CreationDate="2019-07-18T02:50:21.457" Score="29" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But why the Intel 8086 CPU is called a 16-bit CPU even though its address bus is 20-bit, shouldn't it be called a 20-bit CPU?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Address bus size is probably the &lt;em&gt;least&lt;/em&gt; used method to determine CPU &quot;size&quot;. For example, the Z80 and many other CPU chips that are commonly considered &lt;strong&gt;8-bit&lt;/strong&gt;, has a 16-bit address bus. That allows easy access to 64k of memory, which was the norm for many years for typical 8-bit CP/M systems (and many other systems). If the address bus determined the &quot;CPU size&quot; then either these would have been called 16-bit systems or the systems would have been limited to 256 bytes of memory. Similarly, the 4-bit 4004 operated on 4-bit words but had a 12-bit address bus and could access 4k of memory - actually a little more - 4k ROM plus 640 bytes of RAM.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2019-07-18T02:50:21.457" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11702" PostTypeId="2" ParentId="11698" CreationDate="2019-07-18T06:34:01.830" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Based on my understanding, the bitness of a CPU specify ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;One extreme example is the NS16032 or NS32016:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU was first sold as &quot;16-bit CPU&quot; named &quot;NS16032&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, the manufacturer decided to sell exactly the same CPU as &quot;32-bit CPU&quot; under the name &quot;NS32016&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This example shows that there is no real objective criterion that decides if a CPU is a 16- or a 32-bit CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another example is the Infineon XC2000 which was marketed as &quot;32-bit CPU&quot; some years ago although the derivative I was working with had 16- and 40-bit registers but (as far as I remember) absolutely nothing which was 32 bits wide.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... how much memory it can address.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have heard of different criteria why I CPU is seen as 16- or 32-bit CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I never saw that anybody used this criterion!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most CPUs I know do not have its &quot;bitness&quot; as address bus width:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern 64-bit PC CPUs have 48 bits address bus width which means that they can access 2^48 bytes of memory...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why the Intel 8086 CPU is called a 16-bit CPU?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are three common criteria to define the &quot;bitness&quot; of a CPU:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The width of the data bus&lt;/li&gt;&#xA;&lt;li&gt;The width of general purpose registers&lt;/li&gt;&#xA;&lt;li&gt;The width of operations (e.g. the CPU can perform a 16-bit addition)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There are a lot of examples of CPUs where these three criteria lead to different results:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Motorola 68000, Intel 80386SX, NS16032/NS32016&lt;br&gt;&#xA;(16 bits according to 1., but 32 bits according to 2. and 3.)&lt;br&gt;&#xA;This explains why NS could sell the CPU as &quot;16-bit&quot; CPU first and later sell it as &quot;32-bit CPU&quot;.&lt;/li&gt;&#xA;&lt;li&gt;Intel 8088 (8 bits according to 1., but 16 bits according to 2. and 3.)&lt;/li&gt;&#xA;&lt;li&gt;Zilog 8000 (16 bits according to 1. and 2., but 32 bits according to 3.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However, the 8086 is a &quot;16-bit CPU&quot; according to all three criteria!&lt;/p&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="8712" LastEditDate="2019-07-18T06:58:47.480" LastActivityDate="2019-07-18T06:58:47.480" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11703" PostTypeId="2" ParentId="11698" CreationDate="2019-07-18T07:40:08.300" Score="20" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why is the Intel 8086 CPU called a 16-bit CPU?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because &lt;strong&gt;that’s how Intel marketed it&lt;/strong&gt;. The 8086 is part of “the range of 16-bit processors from Intel” (see for example &lt;a href=&quot;http://bitsavers.org/components/intel/80286/210308-001_Introduction_to_the_iAPX_286_1982.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Introduction to the iAPX 286&lt;/em&gt;&lt;/a&gt;, page 3-1). &lt;a href=&quot;https://stevemorse.org/8086/index.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The 8086 Primer&lt;/em&gt;&lt;/a&gt; says “In 1978, Intel introduced the first high-performance 16-bit microprocessor, the 8086.”&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.org/components/intel/8086/9800722-03_The_8086_Family_Users_Manual_Oct79.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The 8086 Family User’s Manual&lt;/em&gt;&lt;/a&gt; isn’t quite so categorical, but it does describe the 8086 as an “8/16 bit general-purpose micro-processor” with a “16-bit external data path”; and it specifies that all CPUs in the 8086 family “operate on both 8-and 16-bit data types” with “internal data paths are at least 16 bits wide”. Regarding the 8086 and 8088’s execution units, “A 16-bit arithmetic/logic unit (ALU) in the EU maintains the CPU status and control flags, and manipulates the general registers and instruction operands. All registers and data paths in the EU are 16 bits wide for fast internal transfers.” (The EU is the execution unit.) Finally, “Both CPUs have the same complement of eight 16-bit general registers.”&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This covers all the sizes which are, in various combinations, typically used to determine a CPU’s “bit-size”:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the internal data path;&lt;/li&gt;&#xA;&lt;li&gt;the native data types;&lt;/li&gt;&#xA;&lt;li&gt;the (integer) register width;&lt;/li&gt;&#xA;&lt;li&gt;the ALU width.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The address bus wasn’t used to qualify a CPU’s size: the 8008, 8080, and 8085 were all considered 8-bit CPUs, even though the 8080 and 8085 had 16-bit address buses. Likewise, the 286 was marketed as a member of the 16-bit family, with a 24-bit address bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The address bus can in some ways be thought of as an implementation detail, as can the internal data path size. Thus, Pentium CPUs have a 64-bit internal data path, and Pentium Pro CPUs have a 36-bit address bus, but they are 32-bit CPUs; and current 64-bit x86 CPUs don’t have 64-bit address buses. Even on the 8086, the address bus only affected the bus interface unit. So using the address bus or even the internal data path size can be misleading; Intel only highlighted the latter in the 8086’s case because they were guaranteeing that it would be wide enough to transfer the native data types without splitting them up.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-07-18T21:04:15.747" LastActivityDate="2019-07-18T21:04:15.747" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11704" PostTypeId="2" ParentId="11666" CreationDate="2019-07-18T07:45:16.113" Score="0" Body="&lt;p&gt;The Mac IIFX used a 64-pin SIMM for its main memory (1MB DRAM was&#xA;Apple part #661-0548).  28-pin socketed ROM chips (not modules) for the Mac II (original, 1986 model)&#xA;were #661-0639, -0640, -0641, -0642 if the model had the high density&#xA;floppy disks, and #342-0639...if the model  had the (original) double-sided &#xA;floppy disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other models (IIx, IIcx, IIci, IIvx, IIvi, IIsi) may have had plug-in&#xA;ROM modules, but which one?   Video card RAM, network card may have modules,&#xA;too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At a guess, JEDEC standard MO-116 (for 1.27mm pitch SIMM socket) drawing would apply, but Apple might have used THAT standard for the DRAM, and could have&#xA;diverged for a ROM module to avoid confusion.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2019-07-18T07:45:16.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11705" PostTypeId="1" CreationDate="2019-07-18T08:59:33.617" Score="19" ViewCount="2889" Body="&lt;p&gt;Not sure if this exactly fits here, but I’m interested in the history of word “console” in game consoles and in computing in general.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can see at least two usages for the term, which at least superficially seem rather unrelated:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;game consoles&lt;/li&gt;&#xA;&lt;li&gt;console as in “main terminal” for a computing system &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When, how and why game consoles are called consoles? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS not native English speaker, so forgive me if I miss some implicit semantics of this word&lt;/p&gt;&#xA;" OwnerUserId="4378" LastActivityDate="2019-07-21T13:09:01.483" Title="Term “console” in game consoles" Tags="&lt;history&gt;&lt;game-consoles&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11706" PostTypeId="2" ParentId="11698" CreationDate="2019-07-18T09:10:31.460" Score="9" Body="&lt;p&gt;There are &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11701/6659&quot;&gt;many&lt;/a&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11703/6659&quot;&gt;great&lt;/a&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11702/6659&quot;&gt;answers&lt;/a&gt; here and it seems safe to assume that the given answers have established that bitness is about the data a CPU handles. After all, the task of a CPU is &lt;strong&gt;Data Processing&lt;/strong&gt; not &lt;strong&gt;Address Generation&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Next to all relevant criteria have been mentioned, but I'd like to take it a step back to a more generic approach, showing that there are three basic ways bitness can be defined by&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Marketing&lt;/li&gt;&#xA;&lt;li&gt;ISA&lt;/li&gt;&#xA;&lt;li&gt;Implementation&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;And it always works in this order.&lt;/p&gt;&#xA;&lt;p&gt;And the first one is often forgotten(*1) or ignored (*2).&lt;/p&gt;&#xA;&lt;h2&gt;Marketing&lt;/h2&gt;&#xA;&lt;p&gt;Noteworthy here is that it's not always about more is better - like Atari did by marketing the Jaguar as 64 bit. Motorola for example did originally &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11213/6659&quot;&gt;market the 68k as being 16 bit&lt;/a&gt; (and so did many early users). At that time 8 bit CPUs were standard for microcomputers, with the exception of some 16 bit families (&lt;a href=&quot;https://en.wikipedia.org/wiki/National_Semiconductor_PACE&quot; rel=&quot;noreferrer&quot;&gt;PACE&lt;/a&gt; et. al.), so 16 bit were seen as the next step. Going as sole 32 bit provider was seen as an uphill battle against every other offering, as customers would rather ask why spend money on something they don't need. So while some of the 16 bit age, like 9900 or 8086 were really 16 bit, Motorola, National and Zilog placed their new development as 16 bit - despite the fact that we today would see them as 32 bit.&lt;/p&gt;&#xA;&lt;h2&gt;Implementation&lt;/h2&gt;&#xA;&lt;p&gt;Tech people often focus on the lowest level, &lt;em&gt;implementation&lt;/em&gt;. What is the size of the data bus, internal or external, the size of the ALU, registers and so on. While this does have impacts on performance and for sure offers a good game of 'mine is better than yours', it is very specific on single implementations, making it hard to see the whole picture - after all, a &lt;a href=&quot;https://en.wikipedia.org/wiki/NS320xx&quot; rel=&quot;noreferrer&quot;&gt;NS32008&lt;/a&gt; is an 8 bit CPU, thus not better than an 8080, isn't it?&lt;/p&gt;&#xA;&lt;h2&gt;ISA - Instruction Set Architecture&lt;/h2&gt;&#xA;&lt;p&gt;Taking the (abstract) ISA as guideline is eventually not just the middle of the list but also the middle ground here. An ISA describes how a CPU works at instruction level. It describes what the CPU can do using the resources visible to a program handled by the instructions available. It doesn't care if a CPU is implemented bit serial or full parallel or anything inbetween. It doesn't rely on how wide an external bus is either.&lt;/p&gt;&#xA;&lt;h2&gt;ISA vs. Implementation&lt;/h2&gt;&#xA;&lt;p&gt;An ISA can be implemented in a wide variety, and that has been used all over since the early days (of computer families). IBM /360 were not always 32 bit implementations - but they always present the same 32 bit ISA. Or take PDP-8/S, a bit serial implementation of the &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-8&quot; rel=&quot;noreferrer&quot;&gt;PDP-8&lt;/a&gt; ISA. And not at least the 68008 vs. 68000 vs. 68020. While having many different bitnesses in terms of register, ALU and bus, they are all the same 32 bit ISA.&lt;/p&gt;&#xA;&lt;p&gt;In the end, it's the ISA that decides what a CPU is. Implementation differentiates two chips in usage not more than using the same at variations of clock speed. I guess noone will state that a 2 MHz 6502 is a different CPU than a 1 MHz one.&lt;/p&gt;&#xA;&lt;h2&gt;Technology vs. Marketing&lt;/h2&gt;&#xA;&lt;p&gt;(...silence ...)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Last but not least&lt;/strong&gt; it should be noted that all the bitness arguments are a thing of the past. And even back then not all that meaningful. It was (made) important during a phase of maturing, when going from barely usable architectures and implementations thereof toward today's all around capable ones. So trying to make sense from today's point of view does not always produce a valid result.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11702/6659&quot;&gt;Martin made a great point&lt;/a&gt; by the XC2000&lt;/p&gt;&#xA;&lt;p&gt;*2 - Especially here, as most of us are rather on the technological side than about pumping out funny phrases.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-11-30T19:50:09.397" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="11707" PostTypeId="2" ParentId="11705" CreationDate="2019-07-18T09:19:16.330" Score="16" Body="&lt;p&gt;A console is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Console_table&quot; rel=&quot;noreferrer&quot;&gt;piece of furniture&lt;/a&gt;. Originally only meant to describe a kind of writing desk to stand up to, usually with a tilted surface.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;In technology it got used to describe control boards, which often looked alike in the early days.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In general usage it describes today a self supported furniture (standing on the floor), meant to hold other items on top and/or serve as work table. More actual general it became a synonym for a low height shelf.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For game consoles this was taken as they are as well consoles like with 'large machinery' as well as meant as a piece of furniture to accompany the TV.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-18T11:03:33.770" LastActivityDate="2019-07-18T11:03:33.770" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11708" PostTypeId="1" CreationDate="2019-07-18T09:33:57.230" Score="10" ViewCount="2162" Body="&lt;p&gt;In the world of home entertainment and video games, two terms that were commonly used to describe machines from the 1970s onward are &quot;games console&quot; and &quot;home computer&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some devices appear to straddle both terms. To give one example, Wikipedia's article on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Nintendo_Entertainment_System&quot; rel=&quot;noreferrer&quot;&gt;Nintendo Entertainment System&lt;/a&gt; describes it as a &quot;home video game console&quot;, but it was sold in Japan as the &quot;Family Computer&quot; or Famicom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a commonly accepted definition of what is a home computer, and what is a games console?&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-07-19T06:32:46.773" Title="What was the difference between a Games Console and a Home Computer?" Tags="&lt;history&gt;&lt;game-consoles&gt;" AnswerCount="5" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11709" PostTypeId="2" ParentId="11708" CreationDate="2019-07-18T10:31:30.990" Score="5" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Video_game_console&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia,&lt;/a&gt; a video game console &quot;is a computer device that outputs a video signal or visual image to display a video game that one or more people can play&quot; while a home computer is a &quot;personal computer designed for home use for a variety of purposes, such as bookkeeping, accessing the Internet &lt;strong&gt;and&lt;/strong&gt; playing video games&quot; (emphasis mine).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on this, we can conclude that the difference between the two is the intention in the design which usually also manifests itself in the end product. Games consoles are not designed to be used for bookkeeping or word processing so they tend to lack a physical keyboard for example. Naturally, like with all taxonomies, the lines can be blurry but many products do fall into one or the other side of the -albeit blurry- line between &quot;designed solely for gaming&quot; and &quot;designed for gaming and other uses&quot;.&lt;/p&gt;&#xA;" OwnerUserId="8378" LastEditorUserId="8378" LastEditDate="2019-07-19T06:32:46.773" LastActivityDate="2019-07-19T06:32:46.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11710" PostTypeId="2" ParentId="11708" CreationDate="2019-07-18T10:48:05.860" Score="-1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there a commonly accepted definition of what is a home computer, and what is a games console?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Simply No.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If at all it's a case by case base incooperating design, technology and usage. One and the same device can be seen according to this in either role.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Let's see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Computer is a technological term.&lt;/li&gt;&#xA;&lt;li&gt;'Home' is a designator for use, not technology.&lt;/li&gt;&#xA;&lt;li&gt;Technology wise every game console with a MPU is a 'Computer'.&lt;/li&gt;&#xA;&lt;li&gt;Likewise 'Game' - but it does as well not realy help to distinguish.&lt;/li&gt;&#xA;&lt;li&gt;Thus a game console may be a home computer - but only at home.&lt;/li&gt;&#xA;&lt;li&gt;PCs are not home computers, but countless are used at home - any more often than not for games.&lt;/li&gt;&#xA;&lt;li&gt;Consoles not used for games (like browsing the web or running Linux) are what?&lt;/li&gt;&#xA;&lt;li&gt;And in addition, quite a majority of home computers is designed as a single console.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This can be continued for pages, but I guess it starts to become clear that these categories are rather fuzzy ones. Great for human interaction and fast, rough communication, but not really usable for a &lt;strong&gt;hard, clear and common accepted&lt;/strong&gt; definition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus next to all definitions found are as well either superficial or as well fuzzy and depend on the angle the issue is viewed.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If about usage, one and the same device can switch between the roles.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If about technology, again they can switch between both.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;More so over time as we should keep in mind that computer technology converges more and more toward a one fits all (*1)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - At least for standard usage.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-07-18T10:48:05.860" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11711" PostTypeId="2" ParentId="11708" CreationDate="2019-07-18T10:51:49.673" Score="11" Body="&lt;p&gt;There's no single commonly-accepted definition; the dividing line has shifted over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1977 when the Apple II, PET and TRS-80 collectively invented home computing the difference was pretty obvious: the computers had the ability to display good-quality text, and provided a textual interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That codified into a home computer having a keyboard and starting up in some sort of operating enviroment into which software was loaded on top — computers mostly had decent quantities of RAM, whereas a console would have a negligible amount and would usually boot directly into a ROM dedicated to one piece of software, without anything much of an OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idiomatic home-use machines also tended to provide a programming language as a shell for a while, but that ceased entirely with the 16-bit machines and was only a rule-of-thumb in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another axis of distinction is peripherals and expansions: use cases for computers tended to vary enough that a diverse range of peripherals would appear, such as disk drives, printers and light pens. So computers had much greater internal hardware diversity. The Apple II is the archetype of that with expansion slots right in the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays consoles still tend to be more single-task focussed but that expresses itself only in appropriate specialisation of the OS; the distinction is more a question of positioning and business model. A console is built primarily for games and sold at a loss on the presumption that the user will buy enough different pieces of software to make up the difference whereas with a computer, if it comes with an office bundle and a web browser then it is expected that a user may never buy another piece of software again.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-07-18T10:51:49.673" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11712" PostTypeId="2" ParentId="11698" CreationDate="2019-07-18T10:52:58.240" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;the bitness of a CPU specifies how much memory it can address (which is determined by the size of the CPU's address bus I guess)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. It is generally defined by the size of data it natively operates over, so the size of its registers. The definition is slightly fuzzy though as some CPUs have a range of register sizes for different features, and of course there is marketing involved as others have mentioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To give a few examples which should clarify the &quot;it is generally the registers that count&quot;, certainly for Intel CPUs and related implementations:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The 8086 has 16-bit registers (though can access many of them as 8-bit ones too) and a 16-bit data bus so is generally considered a 16-bit CPU despite the 20-bit address bus. Same for the 80186.&lt;/li&gt;&#xA;&lt;li&gt;The 8088 is basically an 8086 with an 8-bit data bus so can work on cheaper motherboards. Despite the smaller external bus it still deals with 16-bit vales internally (the bus has a shim between it and the rest of the CPU to translate one 16-bit request into two 8-bit ones), so is still considered a 16-bit CPU and can run all the software that the 8086 can.&lt;/li&gt;&#xA;&lt;li&gt;The 80286, still 16-bit like the 8086, had a 24-bit address bus, allowing eays use of 16Mb of memory instead of being limited to 1Mb (without paging tricks like EMS).&lt;/li&gt;&#xA;&lt;li&gt;The 80386 (latterly referred to as the DX once the SX was released) has 32-bit registers (though can use them in 16-bit and 8-bit chunks in many ways) and a 32-bit data bus and a 32-bit address bus. There is little question with this one!&lt;/li&gt;&#xA;&lt;li&gt;The 386SX is to the 386DX what the 8088 is to the 8086: the same internals but reduced external interfaces so it can run on cheaper motherboards. This had 32-bit internals, so is considered a 32-bit CPU, but a 16-bit data bus and 24-bit address bus for talking to the rest of the machine (more like a 286).&lt;/li&gt;&#xA;&lt;li&gt;The 486 had a built-in floating-point co-processor which operates on 80-bit &quot;long double&quot; registers. This does not make the whole chip 80-bit though as these are not &lt;em&gt;general purpose registers&lt;/em&gt;: the 486 is 32-bit mostly internally just like the 386 line.&lt;/li&gt;&#xA;&lt;li&gt;The original Pentium CPUs were still 32-bit internally (apart from the floating-point registers) with a 32-bit address bus, so are called 32-bit chips, but had a 64-bit data bus so that memory could be transferred to/from the CPUs internal cache faster (CPU&amp;lt;-&gt;RAM bandwidth being a major bottleneck by that point as CPUs sped up much faster than RAM did)&lt;/li&gt;&#xA;&lt;li&gt;Later versions of the Pentium had another little complication: the MMX registers were 64-bit. But like floating-point registers these are not general purpose registers, so they do not make the whole chip be considered 64-bit.&lt;/li&gt;&#xA;&lt;li&gt;Also, many 32-bit Pentiums (PPro, PIII, possible the PII, some Celerons) had 36-bit address busses allowing them to access 64GB or memory instead of being limited to 4GB as the first versions were (unless certain paging tricks like PAE were used).&lt;/li&gt;&#xA;&lt;li&gt;Straying quite far out from &quot;retro computing&quot; now, some of AMD's 64-bit designs used a 40-bit address bus (still 64-bit internals and 64-bit data bus) allowing a Terabyte of address space. Both they and Intel seem to have standardised on a 48-bit address bus.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Non-Intel chips follow very similar conventions. For instance most 8-bit CPUs like the 6502 family had 16-bit address busses (so they could address 64Kb of memory).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can be a bit confused, and it can get even more complicated when you start moving away from general purpose CPUs to start looking at more specialised processors, but hopefully this makes it a little clearer to you.&lt;/p&gt;&#xA;" OwnerUserId="8412" LastEditorUserId="8412" LastEditDate="2019-07-18T14:57:04.797" LastActivityDate="2019-07-18T14:57:04.797" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11713" PostTypeId="2" ParentId="11708" CreationDate="2019-07-18T10:54:29.133" Score="9" Body="&lt;p&gt;The main difference is that games consoles only run games, not productivity software or a visible operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, compare the Commodore 64 and C64GS, the latter being a dedicated games console. The keyboard was removed, the BASIC interpreter largely hidden (and useless due to the lack of a keyboard anyway) and games booted directly from cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A similar example is the Amstrad GX4000, which is a cut down Amstrad CPC computer with the keyboard and tape mechanism removed. Again the BASIC interpreter is hidden and it boots directly into games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga CD32 console was another example. Essentially a full Amiga 1200 computer with CD-ROM add-on it could run most Amiga software, but lacked a keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some systems did blur this line, primarily in Japan where accessories were sometimes released that turned games consoles into 8 bit computers. In the west the Playstation 3 console officially supported Linux, a fully desktop computer operating system.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-07-18T10:54:29.133" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11714" PostTypeId="1" CreationDate="2019-07-18T12:34:44.160" Score="43" ViewCount="4680" Body="&lt;p&gt;Long time ago I had an old IBM PS/2 that I had fished out of a dumpster. It ran IBM DOS 5.0 and was a solid little machine. Occasionally I would encounter the following scenario, and I recently started wondering what was going on internally:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes a program would hang, absolutely unresponsive to all user input with nothing on the screen updating (aside from the cursor blink, if it was in text mode). I would have to &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;Del&lt;/kbd&gt; to reboot and get it running again. When the computer was in this state, keypresses would do nothing, &lt;em&gt;until&lt;/em&gt; I had typed something like 5, 10, 15 (don't remember the precise number) keys. After the requisite number of keypresses, each keypress thereafter would cause the PC speaker to emit a short beep.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a user, I understood the meaning to be &quot;your actions are not productive, stop it.&quot; However nowadays I've been learning more about the way these systems worked, and it got me wondering what was actually happening inside. Presumably the program I was running at the time got wedged, either stuck in an infinite loop or blocked waiting for an interrupt that never came. Obviously the beep was not something the program itself was doing. And yet, to emit a beep, &lt;em&gt;something&lt;/em&gt; in the system had to set the tone frequency in the Programmable Interrupt Timer and open the speaker output gate for a moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was actually &quot;counting&quot; my keypresses? Did it have a full-fledged hardware input buffer, and for what purpose? What was actually responsible for controlling the speaker?&lt;/p&gt;&#xA;" OwnerUserId="12139" LastEditorUserId="15334" LastEditDate="2021-02-15T15:00:26.780" LastActivityDate="2021-02-15T15:00:26.780" Title="Locked-up DOS computer beeped on keypress. What mechanism caused that?" Tags="&lt;ibm-pc&gt;&lt;keyboards&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11715" PostTypeId="2" ParentId="11714" CreationDate="2019-07-18T12:46:36.053" Score="62" Body="&lt;p&gt;Well, it was simply the &lt;a href=&quot;https://en.wikipedia.org/wiki/PC_BIOS&quot; rel=&quot;noreferrer&quot;&gt;BIOS&lt;/a&gt;' way to tell you that the keyboard buffer is all the way filled up.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What was actually &quot;counting&quot; my keypresses?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In so far as there is a 16 entry (32 bytes) buffer area to type ahead while the main program is still working on something else. So if 16 keystrokes come in without a single one being read, it's full and the beeping tells you that this key press went into nirvana :)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did it have a full-fledged hardware input buffer, and for what purpose?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, not really hardware, rather a software one with hardware support. Whenever a keypress happens an interrupt occurs, in which the BIOS takes the waiting keycode, translates it and stores it in the buffer. Later to be read by any foreground program (via &lt;a href=&quot;https://en.wikipedia.org/wiki/INT_16H&quot; rel=&quot;noreferrer&quot;&gt;INT 16h&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS_API&quot; rel=&quot;noreferrer&quot;&gt;DOS&lt;/a&gt;). So it is a hardware event, but the buffer itself is handled by some (quite small) software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason is rather simple, the original PC was fricking slow, but intended to be used in an office environment where users were experienced in fast typing (like on a typewriter). So the keyboard buffer was a way to equal out when the program did need time for like a redraw (scroll) or insert or whatsoever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mentioned 16 entries are a compromise between usability and memory usage - after all, it was supposed to work the same way on a basic 16 KiB machine. Fast typers could still overrun it (not just when the machine was locked up). As a result, back then (with the original 4.77 MHz PC and PC XT), TSRs offering an extension to like 128 entries were quite common and well received.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What was actually responsible for controlling the speaker?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again the BIOS. After all, controlling all basic I/O is what it's supposed to do, isn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="10632" LastEditDate="2019-07-21T07:19:24.613" LastActivityDate="2019-07-21T07:19:24.613" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11716" PostTypeId="2" ParentId="11714" CreationDate="2019-07-18T12:46:47.283" Score="17" Body="&lt;p&gt;There is a circular buffer which holds all your keypresses. &#xA;The BIOS is always monitoring the keyboard and filling that buffer, even after some kinds of crashes. It is expected that MS-DOS or the application is going to eventually fetch some keypresses, but that wasn't happening. So as soon as the buffer filled up, the BIOS just wanted to warn you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most did a beep in that circumstance. Some BIOSes lit an LED or did nothing.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-07-18T12:46:47.283" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11717" PostTypeId="2" ParentId="11705" CreationDate="2019-07-18T12:48:19.483" Score="15" Body="&lt;p&gt;The use of the term &quot;console&quot; in reference to home video game systems arose because of the association of these systems with TV's in the U.S.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time these systems were gaining popular acceptance in the 1980s, most U.S. homes had a single main/larger TV that existed as a piece of furniture in the Living Room or Family Room. These were commonly referred to as &quot;console TV's&quot;, and were usually 25 inch diagonal CRT's surrounded by a wooden cabinet and including speakers. It served as a traditional piece of console furniture by virtue of its large, flat, top surface. Photos, vases, and other decorative items were typically found atop these TV's, before gradually being replaced by video components, such as VCR's and video game systems as such technologies were popularized.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole apparatus was commonly called the console, and this gradually led to terms like &quot;video game system&quot;, or &quot;video game module&quot; being replaced with the more casual reference to a &quot;game console&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SYGRA.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SYGRA.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-07-18T12:48:19.483" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11718" PostTypeId="2" ParentId="7222" CreationDate="2019-07-18T14:58:39.607" Score="-1" Body="&lt;p&gt;Yes, you can with external hardware. The MC6829 MMU for the 6809 is a good example of how to do it. It detects when the CPU answers an interrupt request (software or hardware), and puts itself into a supervisor state when it can be modified. The you touch the &quot;fuse register&quot; just before a return from interrupt to enter user state, where it's completely invisible to the programmer and CPU. &lt;/p&gt;&#xA;" OwnerUserId="9127" LastActivityDate="2019-07-18T14:58:39.607" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11719" PostTypeId="2" ParentId="7222" CreationDate="2019-07-18T15:20:00.877" Score="0" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Can one isolate processes on a 8086?&lt;/p&gt;&#xA;&lt;p&gt;Was there a way to run a memory safe POSIX on a 8086 or 80286?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To start with, 8086 or 286 (non protected mode), usually run DOS and thus only one process.&lt;/p&gt;&#xA;&lt;p&gt;And the general answer would be &lt;strong&gt;no&lt;/strong&gt; ...&lt;/p&gt;&#xA;&lt;p&gt;... but it is possible to run either CPU in &lt;a href=&quot;https://en.wikipedia.org/wiki/Trap_flag&quot; rel=&quot;nofollow noreferrer&quot;&gt;single step mode&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Sure, it'll slow down operation quite a lot, but for testing purpose it's a great way to monitor everything. With a few additional restrictions the downside can be (somewhat) kept in check. By making all used memory segments non overlapping and 64 KiB in size, the ISR only needs to check if an instruction loading a segment register is about to be executed, any only do detailed checking then, otherwise directly return.&lt;/p&gt;&#xA;&lt;p&gt;I used that when searching for a memory problem in a rather complex communication application. In fact, with this (and other) optimizations it was fast enough to even cape up with average work load, fine to have it running for long enough to finally catch the bug - about 3 weeks later.&lt;/p&gt;&#xA;&lt;p&gt;Bottom Line: Yes, it's possible, but you want to do it a lot.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-18T15:20:00.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11720" PostTypeId="1" AcceptedAnswerId="11722" CreationDate="2019-07-18T15:29:01.993" Score="19" ViewCount="3834" Body="&lt;p&gt;I'm &quot;re-learning&quot; 68000 assembly language and came across the &quot;MOVEQ&quot; command that is labeled &quot;MOVE QUICK&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the NXP Programmers Reference Manual (reference below), the command &lt;code&gt;MOVEQ&lt;/code&gt; (MOVE QUICK) is described as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Moves a byte of immediate data to a 32-bit data register. The data in an 8-bit&#xA;field within the operation word is sign- extended to a long operand in the data&#xA;register as it is transferred.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've searched the manual and cannot find &lt;em&gt;why&lt;/em&gt; it's &quot;quick&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Meaning, what's the difference (in performance) in the following instructions?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MOVEQ #100, D0&#xA;MOVE #100, D0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I gather the &lt;code&gt;MOVEQ&lt;/code&gt; is a better fit for moving 8-bit data.  Or, is it ONLY 8-bits of data as I cannot seem to confirm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;REF:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.nxp.com/files-static/archives/doc/ref_manual/M68000PRM.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.nxp.com/files-static/archives/doc/ref_manual/M68000PRM.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="-1" LastEditDate="2019-07-19T22:31:49.153" LastActivityDate="2019-07-20T07:36:27.563" Title="What makes MOVEQ quicker than a normal MOVE in 68000 assembly?" Tags="&lt;assembly&gt;&lt;motorola-68000&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11721" PostTypeId="2" ParentId="11720" CreationDate="2019-07-18T15:39:01.243" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I've searched the manual and cannot find why it's &quot;quick&quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simply because &lt;code&gt;MOVEQ&lt;/code&gt; is a single word (two byte) instruction, which can be fetched in a single memory cycle, while an equal constant move will be 2 (&lt;code&gt;MOVE.W&lt;/code&gt;) or 3 words (&lt;code&gt;MOVE.L&lt;/code&gt;) and need one/two additional memory cycles - each four clocks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So effectively you'll get the following execution timing:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;MOVEQ   #5,D0&lt;/code&gt; -  4 Clocks,&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;MOVE.B  #5,D0&lt;/code&gt; -  8 Clocks,&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;MOVE.W  #5,D0&lt;/code&gt; -  8 Clocks,&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;MOVE.L  #5,D0&lt;/code&gt; - 12 Clocks,&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;making &lt;code&gt;MOVEQ&lt;/code&gt; about 50/66% faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;MOVEQ&lt;/code&gt; even got it's own opcode (7) to squeeze all into a single word.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;ADDQ&lt;/code&gt; and &lt;code&gt;SUBQ&lt;/code&gt; works similar (*1) - except mixed into the &lt;code&gt;Scc&lt;/code&gt;/&lt;code&gt;DBcc&lt;/code&gt;/&lt;code&gt;TRAPcc&lt;/code&gt; group (5).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I gather the MOVEQ is a better fit for moving 8-bit data. Or, is it ONLY 8-bits of data as I cannot seem to confirm.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Only. There is no room for more than 8 bits of constant within the 16 bit instruction word (*2), as the encoding is&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;|OPCODE|Dest.| Res || Data      |&#xA;|Group |Reg. |     ||           |&#xA;| 0111 | xxx |  0  || yyyy yyyy |&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Not exactly like it as they may have additional parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Well, in the original 68000 encoding there was one unused bit, but won't get far.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-20T07:36:27.563" LastActivityDate="2019-07-20T07:36:27.563" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11722" PostTypeId="2" ParentId="11720" CreationDate="2019-07-18T15:47:58.807" Score="30" Body="&lt;p&gt;The MOVE immediate instruction takes 8 cycles in byte and word modes. There are two memory reads, one for the instruction and one for the immediate value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MOVEQ instruction encodes the immediate value into the instruction op-code itself, so only takes 4 cycles and 1 memory read. It can only take a byte immediate value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;MOVEQ #1, D0     (4 clocks, 1 memory read)&lt;/code&gt;&lt;br&gt;&#xA;&lt;code&gt;MOVE.b #1, D0    (8 clocks, 2 memory reads)&lt;/code&gt;&lt;br&gt;&#xA;&lt;code&gt;MOVE.w #1000, D0 (8 clocks, 2 memory reads)&lt;/code&gt;    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the immediate value loaded for byte and word size moves overwrites the entire 32 bits of the register, and is sign extended.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As such, for loading values $00-$FF, it is twice as fast in instruction cycles and uses half as much memory bandwidth (important on systems where it is shared with DMA).&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2019-07-19T07:56:33.563" LastActivityDate="2019-07-19T07:56:33.563" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11723" PostTypeId="2" ParentId="11698" CreationDate="2019-07-18T16:39:41.660" Score="9" Body="&lt;p&gt;An N-bit CPU is generally one which can perform a significant range of individual operations on N-bit values about as quickly as it could perform those operations on anything smaller.  There is sometimes a little wiggle room as to what &quot;about as quickly&quot; means, but usually it's pretty clear.  Note that while N would often match the size of the ALU, that isn't always the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 has a 4-bit ALU, but it can add two eight-bit values faster than it can add two values of any other size (four cycles for a register-to-accumulator add).  It has instructions to add two 16-bit values, but the fastest of those takes almost three times as long (11 cycles) as the instruction to add two 8-bit values.  Thus, it is essentially always described as an 8-bit processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CDP1802 has a one-bit ALU, but it the clock pulses eight times for each machine cycle.  The CDP has sixteen 16-bit registers, and can increment or decrement two of them (or increment one of them twice) in a two-machine-cycle instruction.  Despite the ability to directly increment and decrement any 16-bit register in a single machine cycle, however, and despite its one-bit ALU, it is always described as an 8-bit processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8088 has a 16-bit ALU, but an 8-bit memory bus.  Nearly all operations involving registers can be performed on 16-bit values just as fast as with 8-bit values, but operations which involve reading and writing memory are about 50% slower.  Because 16-bit register operations are generally as fast as 8-bit operations, it is often described as a 16-bit CPU, but occasionally as an 8-bit one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 68000 has a 16-bit ALU and memory bus.  Operations involving 32-bit values are generally about 50% slower than operations involving 16-bit ones.  It is thus usually described as a 16-bit CPU, but because most 32-bit operations take significantly less than twice as long as 16-bit ones, it is sometimes described as 32-bit.  C compilers for the 68000 often allow &lt;code&gt;int&lt;/code&gt; to be configured as either 16 or 32 bits.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-07-18T16:39:41.660" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11724" PostTypeId="2" ParentId="11720" CreationDate="2019-07-18T17:25:43.920" Score="11" Body="&lt;p&gt;To give the exact cycle-by-cycle breakdown:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MOVEQ is a one word instruction so will nominally perform in four cycles; in practice it can occur immediately following operation decoding because all necessary information is within the instruction word. Four cycles are then expended fetching the next value to feed into the instruction prefetch queue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both MOVE.b MOVE.w are two-word instructions. The 68000 actually knows both words before either instruction begins, so both can occur pretty much immediately but both then require that a further two words be fetched to repopulate the instruction prefetch queue, which occupies eight cycles before the next instruction can begin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MOVE.l is a three-word instruction. The 68000's prefetch queue is only two words long. So after decoding it can't actually be completed until a further word has been fetched, and after that fetch a further two will be needed to repopulate the queue. So twelve cycles total.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MOVEs are the most primitive operation available; the general rule is that the number of words needed to complete an operation plus the number needed then to [re]populate the prefetch queue is only a floor for cycle counting. See &lt;a href=&quot;https://raw.githubusercontent.com/larsbrinkhoff/m68k-microcode/master/doc/Yacht.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;Yacht.txt&lt;/a&gt; for a more detailed summary of the work each instruction does; bear in mind that things like RTS are only one word long but imply two further prefetches since the whole queue needs to be replenished, and anything that might change the supervisor flag will often result in a refetch of data that's ostensibly already in the queue, in case the memory subsystem is designed to serve conditional results.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-07-19T23:36:04.890" LastActivityDate="2019-07-19T23:36:04.890" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11725" PostTypeId="2" ParentId="7143" CreationDate="2019-07-18T21:03:31.420" Score="10" Body="&lt;p&gt;These directories have such terse names, don't they? And the etymology is not always documented, nor obvious. In many cases, the etymology of a name in UNIX is simply lost to obscurity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the directory you're asking about appears to contain images for &lt;strong&gt;m&lt;/strong&gt;agtapes and &lt;strong&gt;DEC&lt;/strong&gt;tapes, at least to begin with, or in the earliest versions of UNIX. From the manpage linked to by Stephen Kitt,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The &lt;em&gt;tp&lt;/em&gt; command places a bootstrap program on the otherwise unused block zero of the tape. The DECtape version of this program is called &lt;em&gt;tboot,&lt;/em&gt; the magtape version &lt;em&gt;mboot.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V4-Snapshot-Development/man/man8/mkfs.8&quot; rel=&quot;noreferrer&quot;&gt;There also is mention&lt;/a&gt; of a &lt;code&gt;/usr/mdec/uboot&lt;/code&gt;, which is a bootstrap of the filesystem. I don't know whether that was a magtape or a DECtape.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-07-18T21:03:31.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11726" PostTypeId="1" CreationDate="2019-07-19T00:57:19.553" Score="5" ViewCount="794" Body="&lt;p&gt;I have an old Adaptec PCI SCSI controller from around 1995 (BIOS date, will get full model if needed). It's lived its life in an old 133 MHz Pentium from around 1995 as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller is 50 pin and has a CD-ROM and 1 GB HDD connected. The CD-ROM is on ID #2 via jumpers, the hard drive is #0 via jumpers and controller is #7. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There used to be Windows 95 on a second HDD which died, so I decided to reinstall on the current 1 GB drive. However, the PC will not boot off the CD-ROM nor hardrive. When I put in a Windows 98 SE install disk, Linux live CD, and custom MS-DOS CD, it says bootable drive detected but gets stuck after saying bios installed with a flashing underscore. I then took the controller and drives out and placed in a bit newer PC in which it booted right off the CD-ROM and then I installed DOS to the hard drive and booted and it worked no problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Placed back in original PC and got the same error. Set to boot off the hard drive and it says invalid partition table.  What could be causing these errors? Since it works on the other PC without changing settings, it is confusing me. I feel the issue lies within PC, as the BIOS has no option to boot off external device, only A: and C:. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, I don't have a working floppy drive to boot off of to try that. I have tried all different settings in the Adaptec BIOS with no luck. &lt;/p&gt;&#xA;" OwnerUserId="14675" LastEditorUserId="1953" LastEditDate="2019-08-21T17:16:54.007" LastActivityDate="2019-08-21T17:16:54.007" Title="Old SCSI controller won't boot on certain PC" Tags="&lt;ms-dos&gt;&lt;scsi&gt;&lt;cd-rom&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11727" PostTypeId="2" ParentId="11708" CreationDate="2019-07-19T05:37:25.380" Score="0" Body="&lt;p&gt;Consoles had fixed hardware configurations, games you bought and owned physical read-only media for, that you could replay exactly as they were when you bought them, and that didn't change out from under you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Home computers, well, don't. And neither do the things that are sold as &quot;consoles&quot; nowadays.&lt;/p&gt;&#xA;" OwnerUserId="2070" LastActivityDate="2019-07-19T05:37:25.380" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11728" PostTypeId="2" ParentId="11622" CreationDate="2019-07-19T07:20:49.157" Score="3" Body="&lt;p&gt;@Spektre,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many thanks for your suggestions. I have received some more code and been able to figure out a little more from your investigation. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also at the start of file is some kind of header starting with:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;//  16 bit: 0000 FFFF size 4000 0007 00     00C2     00C2&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;//  32 bit: 0000 FFFF size 4000 0007 00 000000C2 000000C2&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. Size is in fact the position of last basic code line in the file. It is offset from the page (typically 0x200) where the header sits. &#xA;This may seem strange, but there may be a clue to this.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;After some small elaboration and hex viewing I found out that that are two formats (16 and 32 bit) in the files you linked. Lines are encoded like this in hex:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;ID &lt;code&gt;40,48&lt;/code&gt; or &lt;code&gt;C8&lt;/code&gt; for valid line start&#xA;  unknown 2 Bytes&#xA;  &lt;code&gt;07&lt;/code&gt;&#xA;  linenum 4 Bytes (32 bit) or 2 Bytes (16 bit)&#xA;  usually &lt;code&gt;B68E07&lt;/code&gt; but not always&#xA;  so to detect start of line just search for 40/48/C8 followed by 07 after 2 Byte gap. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Each basic line seems to start with 0x40, 0x48, 0xC0 or 0xC8. Then follows: xx yy zz lineno. xx is the count of bytes for the current line (so no line is longer than 255 bytes in tokenized format). yy is count of &lt;em&gt;previous&lt;/em&gt; line and zz is the indentation of this line (characters before the basic text starts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, knowing where the last line starts, one can track backwards until the first line, where the previous line has the length 0. Data before this should be configuration information I guess. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;[Edit1] some more info.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A bit of update on the file structure. I have uploaded two files that now combine each ASCII line with corresponding binary data. The link is &lt;a href=&quot;https://ulozto.net/!iCk2A6VJl6e1/combined-files-zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ulozto.net/!iCk2A6VJl6e1/combined-files-zip&lt;/a&gt;.&#xA;&lt;a href=&quot;https://ulozto.net/!iCk2A6VJl6e1/combined-files-zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;Combined files&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary (taken from notes - some repetition from @Spektre):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: the below discussion relates to a disc image file, possibly containing several basic files (.PROG files). A true .PROG file does not contain a header as mentioned below. The discussion for a .PROG file is valid, just subtract 0x200 from the address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All files seem to be have a header from 0x0000 to 0x01FF.&#xA; The actual code begins at 0x0200 with the following structure:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00000200: 0000 0000 ffff ffff 0001 e1da 4000 0007  ............@...&#xA;00000210: 0000 c200 c200 ffff 0000 1292 1000 0000  ................&#xA;00000220: 01aa 0000 ffff 0000 06fc 0000 124e 0000  .............N..&#xA;00000230: 0352 03aa 0000 1258 003a 0000 0352 004f  .R.....X.:...R.O&#xA;00000240: 0000 124e 0000 0000 0018 0000 0704 2020  ...N..........&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Important locations:&#xA; 0x020c: 0x40 - start of a valid code line. A code line starts with 0x40 or 0xC0. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This byte is followed by the following bytes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;aa bb cc dddd, where&lt;/p&gt;&#xA;&#xA;&lt;p&gt;aa - number of bytes in this line&lt;/p&gt;&#xA;&#xA;&lt;p&gt;bb - number of bytes in previous line&lt;/p&gt;&#xA;&#xA;&lt;p&gt;cc - number of characters (including line number) that the BASIC line is indented&lt;/p&gt;&#xA;&#xA;&lt;p&gt;dddd -  BASIC line number&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the above example, aa and bb are both zero, signifying that this is a special line. Most likely beginning of a section (e.g., SUB or FN definition - or in this case the beginning of the code). Each section seems to have the following structure:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Offset 0x0C from start location (0x020C), the offset to next section is stored as a 32 bit number (here: 0x00001292). 0x020C+0x1292 = 0x149E, being the start of next section (not shown here, but identified).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Offset 0x1C from start location, the offset to next valid line within this section is stored as a 16 bit number (here: 0x06fc). 0x020C + 0x06fC = 0x0908 - the first actual line! Possibly, the number is 32 bit starting at 0x1A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Offset 0x24 from start location, the offset to the first internal string is stored as a 16 bit number (here: 0x0352). 0x020C + 0x0352 = 0x055E where the first string is located! Actually, the first byte that is pointed out identifies the length of the following string, i.e., byte at 0x055E indicates the length of the following string.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, special to the first section of the program, in pos 0x208 (the four bytes just ahead of the first line), an offset from start location showing first byte outside the actual BASIC file is stored as a 32 bit value (here:0x0001E1DA). 0x020C + 0x1E1DA = 0x1E3E6, happening to be the first byte outside the actual file...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Minor addition. In several locations, the byte 0x8E seems to exist for no apparent reason. It is likely a filling byte making sure next relevant byte (new line etc) starts on an even address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There seem to be some very simple read protect of Basic files. As discussed in the following thread:&#xA;&lt;a href=&quot;https://groups.io/g/VintHPcom/topic/33005145#2030&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://groups.io/g/VintHPcom/topic/33005145#2030&lt;/a&gt;&#xA;it appears as the first bit (highest bit in first byte perhaps) in a program line has its value flipped - speaking for a 0xC0 or 0xC8 instead of 0x40 or 0x48 as start of line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Staffan&lt;/p&gt;&#xA;" OwnerUserId="14580" LastEditorUserId="14580" LastEditDate="2019-08-25T19:12:12.257" LastActivityDate="2019-08-25T19:12:12.257" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="11729" PostTypeId="2" ParentId="2494" CreationDate="2019-07-19T17:42:30.660" Score="6" Body="&lt;p&gt;Spend $24 and get R. Lowe's patch for Windows 95 to ME. I use it on a 4GB Windows 98SE computer - Rock Solid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://rloew.x10host.com/&quot; rel=&quot;noreferrer&quot;&gt;http://rloew.x10host.com/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the absolute best solution.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Update 2019-10-23: The above website is now down, and it seems the developer unfortunately passed away. Following this, somebody made the patch available here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/PATCHMEM&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/PATCHMEM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it can now be downloaded for free.&lt;/p&gt;&#xA;" OwnerUserId="14686" LastEditorUserId="4614" LastEditDate="2019-10-23T13:58:43.557" LastActivityDate="2019-10-23T13:58:43.557" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11731" PostTypeId="1" AcceptedAnswerId="11753" CreationDate="2019-07-20T17:53:43.690" Score="4" ViewCount="163" Body="&lt;p&gt;I have an ACA1221 accelerator (not EC). The card is clocked at 28MHz and get's VERY hot. Even when running on default 17MHz the temperature can go as high as 65'C. Is there any way to use any of the cards connectors to install some kind of fan?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2019-07-22T02:06:34.087" Title="ACA1221 cooling" Tags="&lt;hardware-mods&gt;&lt;amiga-1200&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11732" PostTypeId="1" AcceptedAnswerId="11735" CreationDate="2019-07-20T22:09:24.897" Score="23" ViewCount="6909" Body="&lt;p&gt;I'm writing a Game Boy emulator, but I don't completely understand how its memory mapping works. Here is what I (think) I know (and don't know).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU can address up to &lt;code&gt;0x10000&lt;/code&gt; memory locations with the 16-bit address bus. The memory is mapped as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$0000-$3fff&lt;/code&gt;: a 16KB ROM bank. Initially, reading from this accesses the bootloader, but afterwards ot accesses a fixed bank in the cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$4000-$7fff&lt;/code&gt;: accesses ROM from cartridge, but can access more memory by switching banks (what does this mean?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$8000-$9fff&lt;/code&gt;: VRAM, the PPU reads from this to draw the screen&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$a000-$bfff&lt;/code&gt;: external ram found in the cartridge, this is the switchable bank?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$c000-$cfff&lt;/code&gt;: actual work RAM stored in the Gameboy (not in the cartridge)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$d000-$dfff&lt;/code&gt;: also the switchable bank that is accessed when reading from $4000-$7fff?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$e000-$fdff&lt;/code&gt;: echo of &lt;code&gt;$c000-$dfff&lt;/code&gt;, accesses the same memory&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$fe00-$fe9f&lt;/code&gt;: sprite attribute table, used to hold sprites&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$ff00-$ff7f&lt;/code&gt;: IO registers&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$ff80-$fffe&lt;/code&gt;: also accessible ram that is supposedly fast to access?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$ffff&lt;/code&gt;: Interrupt Enable Register flag, used to allow or disable interrupts to the CPU. &lt;/p&gt;&#xA;" OwnerUserId="13631" LastActivityDate="2019-07-22T05:10:25.153" Title="How does the Gameboy's memory bank switching work?" Tags="&lt;memory&gt;&lt;game-boy&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11733" PostTypeId="2" ParentId="11732" CreationDate="2019-07-21T01:27:38.080" Score="9" Body="&lt;h3&gt;Address Decoding&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Any computer system (including video game consoles) with more than one&#xA;memory device needs hardware (usually) external to the CPU to&#xA;determine which device to access for any particular address. This&#xA;process is called &lt;a href=&quot;http://research.cs.tamu.edu/prism/lectures/mbsd/mbsd_l16.pdf&quot; rel=&quot;noreferrer&quot;&gt;address decoding&lt;/a&gt;. In the simplest case this&#xA;could be a single device that looks at the address and makes the&#xA;decision this way:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Address &amp;lt; &lt;code&gt;$c000&lt;/code&gt;: access the RAM chip by setting the chip select&#xA;signal for the RAM chip &quot;on&quot; and the chip select signal for the ROM&#xA;chip &quot;off.&quot;&lt;/li&gt;&#xA;&lt;li&gt;Address &gt;= &lt;code&gt;$e000&lt;/code&gt;: access the ROM chip by setting the chip select&#xA;signal for the RAM chip &quot;off&quot; and the chip select signal for the ROM&#xA;chip &quot;on.&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This can also cause the mirroring that you sometimes see. Say that the&#xA;RAM chip is only 4 KiB, and thus uses only 12-bit addresses, with the&#xA;CPU's address bus lines A0-A11 connected to the RAM chip's address&#xA;pins. In the case above accessing &lt;code&gt;$0003&lt;/code&gt; will access address 3 on the&#xA;RAM chip, but also so will accessing &lt;code&gt;$1003&lt;/code&gt; or &lt;code&gt;$2003&lt;/code&gt;, because in&#xA;all cases:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The address is less than &lt;code&gt;$c000&lt;/code&gt;, so the address decoding logic&#xA;enables the RAM chip and disables all other devices.&lt;/li&gt;&#xA;&lt;li&gt;The lower 12 bits of the address, are &lt;code&gt;$003&lt;/code&gt; (sometimes expressed&#xA;as &lt;code&gt;$x003&lt;/code&gt;, where the &lt;code&gt;x&lt;/code&gt; is the four &quot;don't care&quot; bits the RAM&#xA;chip doesn't see), accessing the third location on the RAM chip.&lt;/li&gt;&#xA;&lt;li&gt;The higher address bits A12-A15 are &lt;code&gt;$0&lt;/code&gt;, &lt;code&gt;$1&lt;/code&gt; or &lt;code&gt;$2&lt;/code&gt; (sometimes&#xA;expressed as &lt;code&gt;$0xxx&lt;/code&gt;, &lt;code&gt;$1xxx&lt;/code&gt; or &lt;code&gt;$2xxx&lt;/code&gt;), but these address bits&#xA;are not connected to the RAM chip and are thus ignored by it.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h3&gt;Bank Switching&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Bank_switching&quot; rel=&quot;noreferrer&quot;&gt;Bank switching&lt;/a&gt; extends this by changing which device is accessed&#xA;in a programmable way. Say you have a latch (basically, a one-bit&#xA;memory location) accessed at &lt;code&gt;$c000&lt;/code&gt;. (This would usually be on a&#xA;separate device, also enabled/accessed via appropriate address&#xA;decoding.) You might configure the hardware so that when this latch&#xA;contains a &lt;code&gt;0&lt;/code&gt; any access to &lt;code&gt;$e000&lt;/code&gt;-&lt;code&gt;$ffff&lt;/code&gt; will access ROM chip #0,&#xA;but when a &lt;code&gt;1&lt;/code&gt; is in this latch any access to &lt;code&gt;$e000&lt;/code&gt;-&lt;code&gt;$ffff&lt;/code&gt; will&#xA;instead access ROM chip #1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using this technique you can access more than &lt;code&gt;0x10000&lt;/code&gt; memory&#xA;locations even though you have only &lt;code&gt;0x10000&lt;/code&gt; addresses available by&#xA;having multiple devices at the same memory address and choosing them&#xA;based on further information such as the bit stored in the latch&#xA;example above. The system would start out at boot with a &lt;code&gt;0&lt;/code&gt; in that&#xA;latch, but at any time the program could write a &lt;code&gt;1&lt;/code&gt; to &lt;code&gt;$c000&lt;/code&gt;,&#xA;access the alternate memory, and when done, write a &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;$c000&lt;/code&gt; so&#xA;that further access would read the first memory again. (The program&#xA;would usually not be running from those &lt;code&gt;$e000&lt;/code&gt;-&lt;code&gt;$ffff&lt;/code&gt; memory&#xA;locations during this process. But with careful design of what's in&#xA;each memory bank, it could also be stored in both ROMs and switch&#xA;itself as it's running.)&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Read vs. Write Decoding&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;There's one more bit of complexity that can be added to address&#xA;decoding: different decoding for reads and writes. In the example&#xA;above I had &lt;code&gt;$c000&lt;/code&gt; dedicated to the latch switching the ROM banks at&#xA;&lt;code&gt;$e000&lt;/code&gt;-&lt;code&gt;$ffff&lt;/code&gt;. However, since ROM is read-only and thus never&#xA;written, I can make the ROM-addresses dual-purpose by making writes&#xA;access a different device from reads. So I could, for example, make my&#xA;ROM two banks of 16 KiB, both accessed by reading &lt;code&gt;$c000&lt;/code&gt;-&lt;code&gt;$ffff&lt;/code&gt;, and&#xA;still use &lt;code&gt;$c000&lt;/code&gt; to switch as well. That address would thus be&#xA;accessing three separate devices:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On write to &lt;code&gt;$c000&lt;/code&gt;, with the current value of the latch &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt;,&#xA;the data are always written to the latch.&lt;/li&gt;&#xA;&lt;li&gt;On read from &lt;code&gt;$c000&lt;/code&gt; with the current value of the latch = &lt;code&gt;0&lt;/code&gt; the&#xA;data are read from ROM chip #0.&lt;/li&gt;&#xA;&lt;li&gt;On read from &lt;code&gt;$c000&lt;/code&gt; with the current value of the latch = &lt;code&gt;1&lt;/code&gt; the&#xA;data are read from ROM chip #1.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Additional Hardware&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Though every non-trivial video game system will have some address&#xA;decoding hardware built-in, it's common to add extra address decoding&#xA;hardware on the cartridge if the game is bigger than will fit into the&#xA;cartridge's address space. If the built-in address decoding always&#xA;accesses the cartridge for addresses &lt;code&gt;$4000&lt;/code&gt;-&lt;code&gt;$7fff&lt;/code&gt;, that could be&#xA;just a single 16 KiB ROM chip on the cartridge, or the cartridge could&#xA;have additional address decoding to select one of multiple ROM chips&#xA;based on other information, such as a latch also added to the&#xA;cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cartridges may also have extra non-ROM hardware, such as RAM,&#xA;battery-backed RAM, timers, clocks, other sensors, and so on. The&#xA;address decoding on the cartridge also needs to manage how all these&#xA;devices are accessed, usually by assigning them specific memory&#xA;locations as well.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Game Boy Cartridge Memory Bank Controllers&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;On the Game Boy the additional address decoding logic on a cartridge&#xA;is called a &lt;a href=&quot;http://gbdev.gg8.se/wiki/articles/Memory_Bank_Controllers&quot; rel=&quot;noreferrer&quot;&gt;Memory Bank Controller (MBC)&lt;/a&gt;. There are several&#xA;different standard versions of this available, and you can find out&#xA;which one is used and the configuration of the cartridge by checking&#xA;certain memory locations in the &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/The_Cartridge_Header#0147_-_Cartridge_Type&quot; rel=&quot;noreferrer&quot;&gt;cartridge header&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;0x147&lt;/code&gt;: Cartridge type.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$00&lt;/code&gt; means it's a ROM-only cartridge, having no extra address&#xA;decoding. Addresses &lt;code&gt;$0000&lt;/code&gt;-&lt;code&gt;$7ffff&lt;/code&gt; each access one ROM location.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$01&lt;/code&gt; is an MBC1 controller, allowing bank switching for a maximum&#xA;of 2 MiB of ROM, as described below.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$02&lt;/code&gt; is MBC1+RAM, adding access to RAM on the cartridge (maximum&#xA;32 KiB) as described below.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$03&lt;/code&gt; is MBC1+RAM+battery, with battery-backed RAM so that it's&#xA;preserved when the cartridge is removed. You need to remember to&#xA;disable the RAM when you're not using it so that it's not&#xA;corrupted when the cartridge is removed.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$04&lt;/code&gt; is MBC2, which is similar to MBC1 but allows access to more&#xA;ROM and RAM. I don't describe this here; see the GB Dev Wiki for&#xA;details.&lt;/li&gt;&#xA;&lt;li&gt;Higher values are yet more memory bank controller systems and&#xA;arrangements; again, see the GB Dev Wiki for details.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;0x148&lt;/code&gt;: ROM size.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$00&lt;/code&gt; means one 32 KiB bank of ROM; this is the only valid value&#xA;for a cartridge type of &lt;code&gt;$00&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$01&lt;/code&gt; means 64 KiB of ROM. The first 16 KiB is bank 0 and is&#xA;always accessed at &lt;code&gt;$0000&lt;/code&gt;-&lt;code&gt;$3fff&lt;/code&gt;. The additional three 16 KiB&#xA;banks are accessed at &lt;code&gt;$4000&lt;/code&gt;-&lt;code&gt;$7fff&lt;/code&gt; via bank switching. To&#xA;select the current bank using this range you write the ROM bank&#xA;number &lt;code&gt;$01&lt;/code&gt;, &lt;code&gt;$02&lt;/code&gt; or &lt;code&gt;$03&lt;/code&gt; to any address in the &lt;code&gt;$2000&lt;/code&gt;-&lt;code&gt;$3fff&lt;/code&gt;&#xA;range. (This is ROM address space when read, but control latches&#xA;when written.)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;0x149&lt;/code&gt;: RAM size.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$00&lt;/code&gt; means no RAM.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$01&lt;/code&gt; and &lt;code&gt;$02&lt;/code&gt; are 2 KiB and 8 KiB of RAM respectively. The RAM&#xA;is accessed at addresses &lt;code&gt;$a000&lt;/code&gt;-&lt;code&gt;$bfff&lt;/code&gt;, after enabling it by&#xA;writing &lt;code&gt;$0a&lt;/code&gt; any address in the range &lt;code&gt;$0000&lt;/code&gt;-&lt;code&gt;$1fff&lt;/code&gt;. (This is&#xA;ROM address space when read, but control latches when written.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$03&lt;/code&gt; means 32 KiB of RAM in four 8 KiB banks. This still accessed&#xA;only in the 8 KiB range &lt;code&gt;$a000&lt;/code&gt;-&lt;code&gt;$bfff&lt;/code&gt;, but now you must bank&#xA;switch this to choose which of the four 8 KiB banks is read and&#xA;written when accessing that range.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$04&lt;/code&gt;, &lt;code&gt;$05&lt;/code&gt; mean 128 KiB and 32 KiB respectively, bank switched&#xA;(in 16 and 8 banks, respectively) as for 32 KiB above.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The above information is far from complete; it's just intended to give&#xA;the general idea of how this works. The &lt;a href=&quot;http://gbdev.gg8.se/wiki/articles/Memory_Bank_Controllers&quot; rel=&quot;noreferrer&quot;&gt;Memory Bank Controller&lt;/a&gt;&#xA;and &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/The_Cartridge_Header#0147_-_Cartridge_Type&quot; rel=&quot;noreferrer&quot;&gt;Cartridge Header&lt;/a&gt; pages on the &lt;a href=&quot;https://gbdev.gg8.se/wiki/&quot; rel=&quot;noreferrer&quot;&gt;Game Boy Development&#xA;Wiki&lt;/a&gt; (where this information came from) contain much more&#xA;extensive information about the devices and address decoding for the&#xA;Game Boy and its various cartridges. If you have specific questions&#xA;about how to access certain things in the Game Boy, it would probably&#xA;be best to ask them as separate questions here.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-21T02:18:14.627" LastActivityDate="2019-07-21T02:18:14.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11734" PostTypeId="1" AcceptedAnswerId="11744" CreationDate="2019-07-21T02:16:39.110" Score="25" ViewCount="2303" Body="&lt;p&gt;When installing an old  version of Windows, there is a step about application start tuning:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ep6tp.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ep6tp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not about the &lt;code&gt;PREFETCH&lt;/code&gt; folder, since this feature &lt;a href=&quot;https://en.wikipedia.org/wiki/Prefetcher&quot; rel=&quot;noreferrer&quot;&gt;appeared in Windows XP&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know what Windows performs during this step?&lt;/p&gt;&#xA;" OwnerUserId="3282" LastActivityDate="2019-07-21T18:34:27.480" Title="What does Windows' &quot;Tuning up Application Start&quot; do?" Tags="&lt;windows-98&gt;&lt;windows-me&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11735" PostTypeId="2" ParentId="11732" CreationDate="2019-07-21T04:50:36.500" Score="26" Body="&lt;p&gt;ROM and RAM bank switching is controlled by a memory bank controller present on the cartridge.&#xA;By writing values to areas of read-only memory, a game or program is able to specify which ROM banks to access when read operations are performed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplest cartridges simply contained ROM and had only had 32 KBytes of space.&#xA;It is mapped directly to &lt;code&gt;$0000-$7FFF&lt;/code&gt;.&#xA;There was no MBC on these types of cartridges because the entire game would be able to fit on the cartridge.&#xA;This types of cartridge could also contain up to 8KB of RAM, mapped to &lt;code&gt;$A000-$BFFF&lt;/code&gt;, though it would require an MBC-like circuit to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of a game that didn't use a MBC was Tetris, whose ROM is only 19KB.&#xA;Larger games required larger amounts of storage, which as you pointed out, the Gameboy was not natively able to address.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Types of Memory Bank Controllers&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There were 3 (and a half) types of MBCs that cartridges used.&#xA;They each possessed different amounts of ROM and RAM.&#xA;Each ROM bank was 16KB in size&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MBC1: max 2MByte ROM (125 banks) and/or up to 32KByte RAM&lt;/li&gt;&#xA;&lt;li&gt;MBC2: max 256KByte ROM (16 banks) and 512x4 bits RAM&lt;/li&gt;&#xA;&lt;li&gt;MBC3: max 2MByte ROM (128 banks) and/or 32KByte RAM (4 banks) and Timer&lt;/li&gt;&#xA;&lt;li&gt;HuC1: Similar to MBC1 with an Infrared Controller&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;One thing to note is that MBC1 and MBC3 both support 2MB, but have a different number of banks.&#xA;I will explain that once I explain the memory map and bank switching.&#xA;Before describing how the bank switching takes place, I'm going to explain how the MBC1 itself operates.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;MBC1 Memory Map&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This was the first MBC chip for the Gameboy.&#xA;It behaves much the same as the other, with a few exceptions.&#xA;A cartridge with an MBC1 uses to following memory ranges:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;$0000-$3FFF&lt;/code&gt;: ROM Bank &lt;code&gt;$00&lt;/code&gt; (Read Only)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This always contains the first 16KB of the cartridge, the first memory bank.&#xA;It is unable to be switched or modified.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;$4000-$7FFF&lt;/code&gt;: Additional ROM Banks (Read Only)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This area of memory will contain whatever memory bank is currently selected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;$A000-$BFFF&lt;/code&gt;: Ram Bank, if present (Read/Write)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is where RAM banks will be placed in memory.&#xA;They are able to be both written to and read from, allowing the game to store data.&#xA;If the cartridge contains a battery, like in Pokemon cartridges, the data written is able to be preserved across shutdowns.&#xA;This type of MBC had 3 different RAM options:&#xA; - 2KB: &lt;code&gt;$A000-A7FF&lt;/code&gt;&#xA; - 8KB: &lt;code&gt;$A000-BFFF&lt;/code&gt;&#xA; - 32KB: &lt;code&gt;$A000-BFFF&lt;/code&gt; (four switchable 8KB banks)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;$0000-$1FFF&lt;/code&gt;: RAM Enable (Write Only)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before a game is able to use the RAM, it must be specifically enabled.&#xA;This is done by writing a value with the lower 4 bits being &lt;code&gt;$0A&lt;/code&gt; somewhere in this address space.&#xA;To disable RAM, any number except &lt;code&gt;$0A&lt;/code&gt; can be written.&#xA;It does not matter where it is written, just as long as it within the address range.&#xA;You will notice that this address range is part of the first ROM bank, which is read only.&#xA;Because it is ROM, there is obviously no way to actually write data to those memory locations.&#xA;Instead, the write call is &quot;intercepted&quot; and interpreted differently by the MBC.&#xA;This method of writing to ROM is also used for the remaining memory areas I'll explain now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;$2000-$3FFF&lt;/code&gt;: ROM Bank Number (Write Only)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Writing a value to this address range will select the lower 5 bits of the bank number.&#xA;There are a few special cases though.&#xA;If the value &lt;code&gt;$00&lt;/code&gt; is written, it will converted to bank &lt;code&gt;$01&lt;/code&gt;.&#xA;This is not an issue because bank &lt;code&gt;$00&lt;/code&gt; is always present at &lt;code&gt;$0000-$3FFF&lt;/code&gt;.&#xA;The issue lies in writing the values &lt;code&gt;$20&lt;/code&gt;, &lt;code&gt;$40&lt;/code&gt;, and &lt;code&gt;$60&lt;/code&gt;.&#xA;When these values are written, instead of addressing the correct ROM banks they will address banks &lt;code&gt;$21``$41&lt;/code&gt; and &lt;code&gt;$61&lt;/code&gt; respectively.&#xA;I couldn't find an explanation of why this takes place, but I assume it has something to do with how the lower 5 bits are used when choosing the bank.&#xA;Each of these numbers have all zeros as the lower 5 bits (&lt;code&gt;0x0XX&lt;/code&gt;&lt;strong&gt;&lt;code&gt;00000&lt;/code&gt;&lt;/strong&gt;).&#xA;This issue is not present in MBC2 and MBC3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;$6000-$7FFF&lt;/code&gt;: ROM/RAM Mode Select (Write Only)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Writing either &lt;code&gt;$00&lt;/code&gt; or &lt;code&gt;$01&lt;/code&gt; to this area will select which mode the MBC is in.&#xA;On an MBC1, there are two modes: 16Mb ROM/8KB RAM and 4Mb ROM/32KB RAM.&#xA;The game is able to switch between the modes on the fly, allowing a game to access extended ROM banks during normal operation and switch to RAM mode temporarily when data needs to be read.&#xA;Valid values are &lt;code&gt;$00&lt;/code&gt; for ROM mode and &lt;code&gt;$01&lt;/code&gt; for RAM mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;$4000-$5FFF&lt;/code&gt;: RAM Bank Number or Upper Bits of ROM Bank Number (Write Only)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Writing to this area of memory will effect the ROM or RAM modes, depending on what is written in &lt;code&gt;$6000-$7FFF&lt;/code&gt;.&#xA;Only the first two bits of the value matter.&#xA;If in ROM mode (no RAM bank switching), it will specify the upper two bits of the ROM bank number.&#xA;In this mode, only RAM bank &lt;code&gt;$00&lt;/code&gt; may be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If in RAM mode, it will specify which RAM bank to load into &lt;code&gt;$A000-$BFFF&lt;/code&gt;.&#xA;In this mode, only ROM banks &lt;code&gt;$00-$1f&lt;/code&gt; may be used.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The MBC1 is only able to switch between 125 different ROM banks, instead of the expected 128.&#xA;The ROM banks are addressed using a 6 bit number created from writing to &lt;code&gt;$2000-$3FFF&lt;/code&gt; and &lt;code&gt;$4000-$5FFF&lt;/code&gt;.&#xA;The reason is because of the number conversion when writing &lt;code&gt;$20&lt;/code&gt;, &lt;code&gt;$40&lt;/code&gt;, and &lt;code&gt;$60&lt;/code&gt; to &lt;code&gt;$2000-$3FFF&lt;/code&gt;.&#xA;This results in it being able to address 128-3 or 125 banks for a actual total of 1.95MB, not 2MB.&#xA;This issue is not present in MBC2 and MBC3.&#xA;MBC2 has a maximum of 16 banks, so the issue is never encountered.&#xA;The MBC3 chip correctly addresses &lt;code&gt;$20&lt;/code&gt;, &lt;code&gt;$40&lt;/code&gt;, and &lt;code&gt;$60&lt;/code&gt; and does not perform the conversion.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Examples&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;That was a lot of numbers and memory ranges, so now I'll give a few examples of bank switching and the process a game would take.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the Gameboy is first turned on, the cartridge header is read and gives information on the ROM and RAM sizes present on the cartridge.&#xA;Byte &lt;code&gt;$0147&lt;/code&gt; specifies the type of MBC and what hardware is present on the cart.&#xA;Byte &lt;code&gt;$0148&lt;/code&gt; specifies the size of the ROM, from which the number of banks can be derived.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These examples assume the cart has a MBC1 type chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Switching to a ROM Bank &amp;lt; &lt;code&gt;$20&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Switching to banks &lt;code&gt;$01-$1F&lt;/code&gt; is very simple.&#xA;We only need to write our intended bank to &lt;code&gt;$2000-$3FFF&lt;/code&gt;.&#xA;Here we are switching to bank &lt;code&gt;$05&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld $2000, $05&#xA;; Now able to read data from bank $05&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Switching to a ROM Bank &gt; &lt;code&gt;$1F&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To switch to a ROM bank greater than &lt;code&gt;$1F&lt;/code&gt;, there is some extra legwork to be done.&#xA;First, we need to switch to the ROM banking mode.&#xA;Then we write the lower 5 bits to &lt;code&gt;$2000-$3FFF&lt;/code&gt; and the upper 2 bits to &lt;code&gt;$4000-$5FFF&lt;/code&gt;.&#xA;For this example, I will be loading bank &lt;code&gt;$46&lt;/code&gt;.&#xA;This value is &lt;code&gt;0x0100 0x0110&lt;/code&gt; in binary.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld $6000, $00    ; Set ROM mode&#xA;ld $2000, $06    ; Set lower 5 bits, could also use $46&#xA;ld $4000, $02    ; Set upper 2 bits&#xA;; Now able to read data from bank $46&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Reading a Value from RAM Bank $00&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When reading a value from RAM Bank &lt;code&gt;$00&lt;/code&gt;, there is no need to change the banking mode.&#xA;This example assumes that there is RAM present on the cart.&#xA;Before reading and writing the RAM, we need to enable the RAM.&#xA;It is prudent to disable RAM after it is accessed in case the Gameboy is suddenly turned off.&#xA;If it it isn't turned off, an unexpected shutdown could leave the RAM in an inconsistent state.&#xA;Once we are done moving data in and out of RAM, we should disable once again.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld $0000, $0A    ; Enable RAM&#xA;&#xA;;    Perform operations on RAM data&#xA;&#xA;ld $0000, $00    ; Disable RAM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Reading a Value from RAM Bank $02&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To read a value from a RAM bank other than &lt;code&gt;$00&lt;/code&gt;, we need to switch to RAM mode.&#xA;Once this is done, we can select the RAM bank, enable RAM, and begin moving data.&#xA;Note we are able to select the RAM bank before enabling RAM.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld $6000, $01    ; Switch to RAM mode&#xA;ld $4000, $02    ; Select our RAM bank&#xA;ld $0000, $0A    ; Enable RAM&#xA;&#xA;;    Perform operations on RAM data&#xA;&#xA;ld $0000, $00    ; Disable RAM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2&gt;Reference / Further Reading&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://problemkaputt.de/pandocs.htm#memorybankcontrollers&quot; rel=&quot;noreferrer&quot;&gt;Pan Docs&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://gbdev.gg8.se/wiki/articles/Memory_Bank_Controllers&quot; rel=&quot;noreferrer&quot;&gt;GB Dev Wiki: Memory Bank Controllers&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf&quot; rel=&quot;noreferrer&quot;&gt;Gameboy CPU Manual&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11801" LastActivityDate="2019-07-21T04:50:36.500" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11736" PostTypeId="1" AcceptedAnswerId="11785" CreationDate="2019-07-21T05:45:24.657" Score="21" ViewCount="3054" Body="&lt;p&gt;According to Gameboy [sic] Development Wiki page &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/The_Cartridge_Header#0104-0133_-_Nintendo_Logo&quot; rel=&quot;noreferrer&quot;&gt;The Cartridge Header&lt;/a&gt;, locations 0x104 through 0x133 in the cartridge contain a bitmap of the Nintendo logo that's displayed when the Game Boy is turned on. (Presumably that's the &quot;Nintendo®&quot; text/logo &lt;a href=&quot;https://www.youtube.com/watch?v=-Fh9SpWFdn0&quot; rel=&quot;noreferrer&quot;&gt;shown in this video&lt;/a&gt;.) After booting and displaying the logo, these data are checked by the GB (the first 0x18 bytes on the Color Game Boy and all 0x30 bytes on other models) and, if the data are different from what's expected, the unit locks up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Game Boy has internal ROM used during the &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Power_Up_Sequence&quot; rel=&quot;noreferrer&quot;&gt;boot process&lt;/a&gt; that reads the cartridge header, and according to that document a copy of the image is stored there (though perhaps it's only a partial copy in the case of the Color Game Boy). What are the reasons for storing this image (or a copy of it) in the cartridge?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thought that comes to mind is that this is a licensing protection mechanism: the logo is intellectual property protectable under trademark laws and the specific binary representation of it under copyright laws, allowing Nintendo to sue anybody manufacturing working cartridges without a license from them. If this is the reason, references confirming this and discussion of its relationship to other licensing protection mechanisms would be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, Nintendo already had a seemingly more powerful version of this in the &lt;a href=&quot;https://en.wikipedia.org/wiki/CIC_(Nintendo)&quot; rel=&quot;noreferrer&quot;&gt;10NES&lt;/a&gt; chip, so why wouldn't they just use that? (It was eventually &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_Games_Corp._v._Nintendo_of_America_Inc.&quot; rel=&quot;noreferrer&quot;&gt;successfully used to enforce cartridge licensing&lt;/a&gt;, though Nintendo couldn't have known this would succeed in court when the Game Boy was being designed.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-22T09:23:01.070" LastActivityDate="2021-03-16T18:52:55.353" Title="Why is the unchangable Nintendo Game Boy logo in the cartridge?" Tags="&lt;game-boy&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11737" PostTypeId="2" ParentId="7906" CreationDate="2019-07-21T07:06:59.243" Score="1" Body="&lt;p&gt;Common 8-bit CPUs have sixteen address lines and eight data lines&#xA;appearing on their own dedicated pins on the chip; these are connected&#xA;in various ways to other devices in the system to form the system&#xA;&lt;em&gt;address bus&lt;/em&gt; and &lt;em&gt;data bus.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory and other devices have their own sets of address and data pins,&#xA;which will be connected in various ways to the address and data buses,&#xA;and also &quot;chip select&quot; lines that determine whether the chip will read&#xA;the address bus and read or write the data bus, or just ignore both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example here I'll use a common 27128 16K EPROM. This has:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Eight data pins, &lt;code&gt;D0&lt;/code&gt; through &lt;code&gt;D7&lt;/code&gt;, which you would connect directly&#xA;to the system data bus.&lt;/li&gt;&#xA;&lt;li&gt;14 (not 16!) address pins, &lt;code&gt;A0&lt;/code&gt; through &lt;code&gt;A13&lt;/code&gt;,  which you would&#xA;connect directly to lines &lt;code&gt;A0&lt;/code&gt; through &lt;code&gt;A13&lt;/code&gt; of the system address&#xA;bus.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Active-low&lt;/em&gt; chip select &lt;code&gt;C̅S̅&lt;/code&gt; and ouptut enable &lt;code&gt;O̅E̅&lt;/code&gt; pins. The&#xA;overbars indicate that the signal is active when low, i.e., bring it&#xA;down to ground level to select/enable the chip and up to +5 V to&#xA;disable the chip, making it ignore the buses. &lt;code&gt;C̅S̅&lt;/code&gt; makes the chip&#xA;read the address bus and &lt;code&gt;O̅E̅&lt;/code&gt; makes it write the data bus; here I&#xA;won't get into the reasons for separating these two functions.&lt;/li&gt;&#xA;&lt;li&gt;A &lt;code&gt;P̅G̅M̅&lt;/code&gt; signal for programming the ROM which in this example we will&#xA;assume is always disabled (high).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now if you connect the data and address lines as above and hardwire&#xA;&lt;code&gt;C̅S̅&lt;/code&gt; and &lt;code&gt;O̅E̅&lt;/code&gt; to ground, the chip will always be enabled and will have&#xA;no knowledge of what's happening on lines &lt;code&gt;A14&lt;/code&gt; and &lt;code&gt;A15&lt;/code&gt; of the&#xA;address bus. Any read by the CPU will return data from the EPROM.&#xA;Since the EPROM ignores the top two address lines, reads from any of&#xA;the four addresses &lt;code&gt;0x0000&lt;/code&gt;, &lt;code&gt;0x4000&lt;/code&gt;, &lt;code&gt;0x8000&lt;/code&gt;, &lt;code&gt;0xA000&lt;/code&gt; will return&#xA;the data from location 0 of the ROM. (These are usually referred to as&#xA;&quot;mirrored&quot; locations since, though they are different addresses from&#xA;the point of view of the CPU, they all access the same location in the&#xA;memory chip.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to add a second EPROM to the system, you need to have some&#xA;way of choosing, based on the address the CPU puts on to the bus, the&#xA;device from which you wish to read. You can do this by adding a bit of&#xA;extra logic, an inverter, to the board. Connect &lt;code&gt;A14&lt;/code&gt; directly to &lt;code&gt;C̅S̅&lt;/code&gt;&#xA;on EPROM #0 and run it through the inverter to &lt;code&gt;C̅S̅&lt;/code&gt; on EPROM #1. Now:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Reading from address 0x0000 (or address 0x8000) will make &lt;code&gt;C̅S̅&lt;/code&gt; low&#xA;(enabled) on #0 and, because it's going through the inverter, high&#xA;(disabled) on #1, and the data you read will come from EPROM #0.&lt;/li&gt;&#xA;&lt;li&gt;Conversely, reading from address 0x4000 (or address 0xA000) will&#xA;make &lt;code&gt;C̅S̅&lt;/code&gt; high (disabled) on EPROM #0 and low (enabled) on #1, and&#xA;the data you read will come from EPROM #1.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This can be extended further with devices like a &lt;a href=&quot;http://www.ti.com/lit/ds/symlink/sn74ls139a.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;74LS139&lt;/a&gt; chip, which&#xA;can translate a pair of address lines that represent values 00, 01,&#xA;10, and 11 in binary (0, 1, 2 and 3 in decimal or hexadecimal) into&#xA;individual signals that can be sent to the &lt;code&gt;C̅S̅&lt;/code&gt; pins on more chips.&#xA;The '139 has inputs &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt; for the binary input and active-low&#xA;outputs &lt;code&gt;Y0&lt;/code&gt;, &lt;code&gt;Y1&lt;/code&gt;, &lt;code&gt;Y2&lt;/code&gt; and &lt;code&gt;Y3&lt;/code&gt;. Each output is enabled (brough low)&#xA;by a specific binary input on the &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt;, with the rest of the&#xA;outputs disabled (high), as represented in this table:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Inputs | Outputs&#xA; A  B  | Y0 Y1 Y2 Y3&#xA;---------------------&#xA; 0  0  |  1  0  0  0&#xA; 0  1  |  0  1  0  0&#xA; 1  0  |  0  0  1  0&#xA; 1  1  |  0  0  0  1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(There are actually more pins on this chip, both for a second decoder&#xA;that works just like the one above and for chip select, but for&#xA;simplicity I ignore these in this example.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can see that you can connect &lt;code&gt;A14&lt;/code&gt; and &lt;code&gt;A15&lt;/code&gt; to inputs &lt;code&gt;A&lt;/code&gt; and&#xA;&lt;code&gt;B&lt;/code&gt; on the '139 and connect each output &lt;code&gt;Y0&lt;/code&gt; through &lt;code&gt;Y3&lt;/code&gt; to the &lt;code&gt;C̅S̅&lt;/code&gt;&#xA;pin on each of four EEPROMs and now you have a unique 16-bit address&#xA;for each of the 14-bits with of address space in each of the four&#xA;memory devices, the appropriate one being selected by the values of&#xA;the &lt;code&gt;A14&lt;/code&gt; and &lt;code&gt;A15&lt;/code&gt; address lines as set by the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's the basics of address decoding. Usually decoding will be&#xA;more sophisticated than this: you need to deal with the read vs. write&#xA;(&lt;code&gt;R/W̅&lt;/code&gt;) signal on systems with RAM, and you'll usually have I/O&#xA;devices such as keyboards or serial ports that need to be decoded too,&#xA;but all that works with simple expansion of the principles above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are plenty of online examples of address decoding systems for&#xA;8-bit microcomputers. Two good ones are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://searle.hostei.com/grant/6502/Simple6502.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Grant Searl's 6502 computer&lt;/a&gt; is a fairly simple but complete&#xA;computer system that has address decode logic for a 16K ROM, 32K&#xA;static RAM and memory-mapped I/O for a serial interface. This uses&#xA;just four NAND gates to map &lt;code&gt;A14&lt;/code&gt;, &lt;code&gt;A15&lt;/code&gt;, &lt;code&gt;R/W̅&lt;/code&gt; to the three&#xA;devices. (&lt;code&gt;PHI2&lt;/code&gt; or &lt;code&gt;φ2&lt;/code&gt; is also involved; this is a clock signal&#xA;that indicates when valid data to be written is on the data bus.)&lt;/li&gt;&#xA;&lt;li&gt;The Wilson Mines Co. &lt;a href=&quot;http://wilsonminesco.com/6502primer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;6502 PRIMER: Building your own 6502&#xA;computer&lt;/a&gt; has a full page with extensive details of how to do&#xA;address decoding.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;One further note: here I've discussed only memory address decoding,&#xA;which is all you need on CPUs like the 6502 where I/O devices are&#xA;accessed via memory reads and writes. Other processors, such as the&#xA;8080/Z80 have special instructions and their own address space to do&#xA;I/O (that is, &quot;IO port 0&quot; is separate from &quot;memory address 0&quot;); for&#xA;these you need a bit of further decoding if you want to use this I/O&#xA;space. But it works pretty much the same way as straight memory-only&#xA;address decoding, except you need to look at an additional &quot;I/O&quot; pin&#xA;on the chip to see if it's using the I/O address space instead of the&#xA;memory address space, and build that into your decoding.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-07-21T07:06:59.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11739" PostTypeId="1" AcceptedAnswerId="11742" CreationDate="2019-07-21T07:51:06.573" Score="26" ViewCount="17546" Body="&lt;p&gt;When a Nintendo Game Boy is turned on, it displays a logo &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11736/7208&quot;&gt;read from the cartridge&lt;/a&gt; (looking &lt;a href=&quot;https://www.youtube.com/watch?v=-Fh9SpWFdn0&quot; rel=&quot;noreferrer&quot;&gt;like this&lt;/a&gt;) before starting the game. What does it display if there's no cartridge inserted from which to read the logo? And what happens after that?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-21T07:56:56.343" LastActivityDate="2019-07-22T08:19:55.403" Title="What does a Nintendo Game Boy do when turned on without a game cartridge inserted?" Tags="&lt;game-boy&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11740" PostTypeId="2" ParentId="11739" CreationDate="2019-07-21T07:56:36.147" Score="10" Body="&lt;p&gt;This is what a GameBoy Pocket does:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mVBWU.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;Two black squares and an ® symbol&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mVBWU.jpg&quot; alt=&quot;Two black squares and an ® symbol&quot; title=&quot;Two black squares and an ® symbol&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two black blobs (and an ®) slowly descend from the top and come to rest half way down the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taken from the (somewhat interesting) video, &lt;a href=&quot;https://www.youtube.com/watch?v=cyzD8AdpCeE&quot; rel=&quot;noreferrer&quot;&gt;What it looks like when you turn on a game boy without a game&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other GameBoy versions (DMG, GBC) differ in behaviour, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11739/what-does-a-nintendo-game-boy-do-when-turned-on-without-a-game-cartridge-inserte/11742#11742&quot;&gt;Kaz's answer&lt;/a&gt; demonstrates.&lt;/p&gt;&#xA;" OwnerUserId="202" LastEditorUserId="202" LastEditDate="2019-07-21T20:00:13.527" LastActivityDate="2019-07-21T20:00:13.527" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11741" PostTypeId="2" ParentId="11739" CreationDate="2019-07-21T08:36:24.430" Score="19" Body="&lt;p&gt;To complement the previous answer on why this happens, the Game Boy contains a very small ROM that is executed by the CPU before running the cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of its routines include checking if the cartridge contains a Nintendo logo (Nintendo used this as a way of controlling game distribution by use of trademark law). Then another routine checks if the cartridge is correctly inserted (by doing a checksum of the cartridge’s rom header).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The logo shown on the screen is actually fetched from the cartridge rom (not the gameboy’s one) so if there was any problem with the cartridge header (such as not being present at all) the system will receive garbage data, manifested as scrambled graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sources:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HyzD8pNlpwI&quot; rel=&quot;noreferrer&quot;&gt;The Ultimate Game Boy Talk (33c3)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://dhole.github.io/post/gameboy_custom_logo/&quot; rel=&quot;noreferrer&quot;&gt;Booting the GameBoy with a custom logo&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;I research the different architecture of consoles and write some interesting findings in &lt;a href=&quot;https://copetti.org/projects/consoles/game-boy/&quot; rel=&quot;noreferrer&quot;&gt;my personal website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="14698" LastEditorUserId="14698" LastEditDate="2019-07-21T19:20:31.387" LastActivityDate="2019-07-21T19:20:31.387" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11742" PostTypeId="2" ParentId="11739" CreationDate="2019-07-21T08:38:32.100" Score="33" Body="&lt;p&gt;Here's a selection of Game Boys I've dug out from my drawer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/U9wPt.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/U9wPt.jpg&quot; alt=&quot;Game Boy with no cartridge&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original Game Boy displays a solid black rectangle (and a ®) which scroll down from the top of the screen, in the same way that the Nintendo logo would if a cartridge were inserted. This image remains on the screen until the Game Boy is switched off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note the difference with the picture of the Game Boy Pocket in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11739/what-does-a-nintendo-game-boy-do-when-turned-on-without-a-game-cartridge-inserte/11740#11740&quot;&gt;Greenonline's answer&lt;/a&gt;, which has a vertical break in the middle of the rectangle.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FCMfQ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FCMfQ.jpg&quot; alt=&quot;Game Boy Color with no cartridge&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Game Boy Color shows a coloured animation of the phrase &lt;em&gt;Game Boy&lt;/em&gt; in the centre of the screen, while a smaller black rectangle (with ®) is shown below the animation. Again, this remains until switched off. If a cartridge is inserted, the word &quot;Nintendo&quot; is displayed instead of the black rectangle, and the cartridge boots after the animation is complete.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BUBe1.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BUBe1.jpg&quot; alt=&quot;Game Boy Advance with no cartridge&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YOxEK.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YOxEK.jpg&quot; alt=&quot;Game Boy Advance SP with no cartridge&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Game Boy Advance (and SP) display a different coloured animation of the &lt;em&gt;Game Boy&lt;/em&gt; phrase, without a Nintendo logo. (The Nintendo logo is shown if a cartridge is present.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bear in mind that the GB Advance line supports network booting from another Advance or a Gamecube via link cable. When turned on without a cartridge inserted, they wait for communication with the host device, then transfer software over the link cable to execute (indicated by the Nintendo logo appearing in a non-standard, pulsing color chosen by the host device).&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-07-22T08:19:55.403" LastActivityDate="2019-07-22T08:19:55.403" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11743" PostTypeId="2" ParentId="11734" CreationDate="2019-07-21T10:14:52.930" Score="9" Body="&lt;p&gt;In short, Windows aligns application code on 4kb memory boundaries to load applications faster from disk or memory cache.&#xA;This works well for large applications like office, internet browsers, graphic editors...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good detailed explanation can be found here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.techrepublic.com/article/speed-up-windows-98-applications-with-winalign/&quot; rel=&quot;noreferrer&quot;&gt;https://www.techrepublic.com/article/speed-up-windows-98-applications-with-winalign/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8116" LastActivityDate="2019-07-21T10:14:52.930" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11744" PostTypeId="2" ParentId="11734" CreationDate="2019-07-21T11:44:43.000" Score="25" Body="&lt;p&gt;At that point, Setup executes &lt;code&gt;WALIGN.EXE&lt;/code&gt;. Some information could be found back then at Microsoft's Knowledge Base (*1):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Winalign.exe and Walign.exe (*2) optimize programs by rewriting a program's file headers, creating a new section table, and then writing file sections, each of which starts on a 4-kilobyte (KB) boundary. The new section table is then updated with this information, and the file headers are also updated to denote the file is now aligned to a 4-KB boundary. By aligning files in this manner, the Windows 98 CacheMap feature can map directly to sections in the cache memory. This can result in significant performance increases by freeing memory. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Wiki, BTW, also notes this under &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_98#Performance_improvements&quot; rel=&quot;noreferrer&quot;&gt;Performance Improvements&lt;/a&gt; in the Win98 entry:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;On the FAT32 file system, Windows 98 has a performance feature called MapCache that can run applications from the disk cache itself if the code pages of executable files are aligned/mapped on 4K boundaries, instead of copying them to virtual memory. This results in more memory being available to run applications, and lesser usage of the swap file.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;WinAlign (Walign.exe and Winalign.exe) are tools designed to optimize the performance of executable code (binaries). WinAlign aligns binary sections along 4 KB boundaries, aligning the executable sections with the memory pages. This allows the Windows 98 MapCache feature to map directly to sections in cache.[25] Walign.exe is included in Windows 98 for automatically optimizing Microsoft Office programs. Winalign.exe is included in the Windows 98 Resource Kit to optimize other programs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;WALIGN.EXE&lt;/code&gt; is distributed with the system install but looks only out for (older) MS programs which are not aligned. &lt;code&gt;WINALIGN.EXE&lt;/code&gt; can be used for a general optimization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The workings are based on the improved (disk) cache handling of Win98 offering the MapCache feature. It allows to map a cache page into program memory. Effectively switching from use of classic paging (for program files) to memory mapped (code) files.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;At that point some history/theory of operating systems, program loading and virtual memory might be helpful:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A classic program load means loading the code portion(s) from disk, execute them and if there's a shortage of memory, the least needed code gets moved out into a paging file, to be reloaded when needed again. That's a costly (and slow) disk operation, every time a code segment gets purged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like all disk operations this can be sped up by a disk cache. Except, taking cache memory from main memory may decrease performance, in tight memory situations, by having less memory for programs, resulting in programs being purged which could have resided happily in main memory without a cache taking up room. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some OSes optimized this by not swapping out code segments, but reloading them from its (EXE) file. Just this involves reading its block(s) from disk into a read buffer and then transferring it bytewise into the program memory before execution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a further step this can already be improved by aligning code segments to disk block/cluster boundaries, thus reducing the number of disk blocks read to a minimum (*3), as well as allowing to load code directly into program memory, not going thru read buffers and/or disk caches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the later does add considerable performance, but also opens several dilemmas in OS design.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By direct loading into program memory, sparing all levels of disk caching, may as well loose quite some performance. Especially if there is free space in cache. &lt;/li&gt;&#xA;&lt;li&gt;On the other hand, loading it via the regular load path (including cache) it may again add to memory hogging, as now the code resides in cache and program memory at the same time.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A (*4) tricky question isn't it?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Instead of fiddling around the issues as done before, MS took a bold step with Win98 and turned the problems into a solution by adding MapCache. MapCache allows to map (disk) cache pages into program memory (*5). Now, whenever a program gets loaded, its code segment get loaded quite the ordinary way thru the disk cache. But then they are not copied into program memory, but mapped in by just changing the corresponding page entry (*6).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result loading a segment becomes a single read operation, followed by no copy needed. Paging it out becomes (almost) zero effort, and reloading is again just a single operation - with the bonus if paged out due some other reason than memory shortage, it &lt;em&gt;may&lt;/em&gt; still be in disk cache. In fact, disk cache now turns into a virtual page manager able to balance program and data load at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quite clever, isn't it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, to have all of these benefits, code segments needed to be (memory) page aligned. That's were the 4 KiB size comes from (natural page size for 386ff). And  &lt;code&gt;WINALIGN.EXE&lt;/code&gt; does this for programs that are not already aligned (*7).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back then there have been some fuzz that Win98 bloats programs. Well, it doesn't, it just inserts some filler to align the segments on page boundaries.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The relevant articles are no longer available online (except for some cache inconsistency). The excerpt is taken from an ancient MSDN disk - jup, back then, they did not just point to their online resources :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - &lt;code&gt;WALIGN.EXE&lt;/code&gt;is a dedicated version for Office 98.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - As there can be no partial block at the beginning of a segment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Well, there are a few more pitfalls, but of lesser importance - and as well served by MapCache.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Simplified, there are more use cases including memory mapped files an so on, but that's a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Plus some bookkeeping to let the system remember that the block is not only used, but also mapped to some other address space and what for. This needs to be taken into account before reusing the block, to not impact performance the wrong way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - It also keeps a list of 'optimized' programs at &lt;code&gt;HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Winalign&lt;/code&gt;. This not only helps to avoid doing the job twice, but was quite useful to exclude programs from being optimized - like for if they needed special alignment situations, like for direct access to their EXE file, but didn't walk the headers, but accessed these data with fixed offset. Usually for ...  well, let's call it 'features'.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-21T18:34:27.480" LastActivityDate="2019-07-21T18:34:27.480" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11745" PostTypeId="2" ParentId="11705" CreationDate="2019-07-21T13:09:01.483" Score="5" Body="&lt;p&gt;I've recently done some research on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Magnavox_Odyssey&quot; rel=&quot;noreferrer&quot;&gt;Magnavox Odyssey&lt;/a&gt;,&#xA;the world's first video game console, and it appears that the term&#xA;&quot;console&quot; was never used for it during development or when it was&#xA;brought to market in 1972.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the &lt;a href=&quot;https://gamehistory.org/first-video-game-commercial/&quot; rel=&quot;noreferrer&quot;&gt;early marketing materials&lt;/a&gt;, it appears to have&#xA;first been seen by the public on the TV show &lt;em&gt;What's my Line&lt;/em&gt; in a&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=8F522GBtZPk&quot; rel=&quot;noreferrer&quot;&gt;programme recorded on August 24th, 1972&lt;/a&gt;, where the main unit is&#xA;referred to as a &quot;master control unit.&quot; This terminology is also used&#xA;in the 1972 &lt;a href=&quot;https://www.youtube.com/watch?v=jLGBtkKPj2U&quot; rel=&quot;noreferrer&quot;&gt;8 mm promotional film&lt;/a&gt; used in dealer showrooms.&#xA;The &lt;a href=&quot;https://www.youtube.com/watch?v=iCp-a90EP4c&quot; rel=&quot;noreferrer&quot;&gt;first 1972 commercial&lt;/a&gt; doesn't even go this far, calling it&#xA;just an &quot;electronic game simulator.&quot; &lt;a href=&quot;https://gamehistory.org/wp-content/uploads/2018/01/image3.png&quot; rel=&quot;noreferrer&quot;&gt;This 1973 print&#xA;advertisement&lt;/a&gt; includes a section on the Odyssey where they&#xA;not only don't refer to it as a &quot;console,&quot; but use &quot;color TV consoles&quot;&#xA;to refer to, clearly, televisions (and also stereo systems).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the 2005 book &lt;em&gt;Videogames: In the Beginning&lt;/em&gt; by Ralph Bear (the&#xA;inventor of the Odyssey) he refers to the Odyssey and other early&#xA;systems (such as the Coleco Telestar) as &quot;consoles,&quot; but this appears&#xA;to be an achronistic use. P. 60 of the book reproduces a memo he wrote&#xA;on 3/30/71 about a meeting with Magnavox where the main unit is&#xA;referred to as an &quot;electronics box.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The memo also says one of the people attending the meeting was &quot;Gerry&#xA;Martin VP, Console Product Dev't,&quot; who was basically the one&#xA;responsible for licensing the original &quot;brown box&quot; from Sanders&#xA;Associates for Magnavox to redesign and market. On p. 59 Bear writes&#xA;(in 2005):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For Magnavox, there was Gerald G. Martin. As the V.P. for Console&#xA;  Products Planning, it was he who had taken the lead to bring TV&#xA;  games into his product line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't know if that has anything to do with the &quot;electronics unit&quot;&#xA;eventually and retroactively being termed a &quot;console,&quot; though.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-07-21T13:09:01.483" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11747" PostTypeId="2" ParentId="11736" CreationDate="2019-07-21T14:11:23.820" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;According to Gameboy [sic] Development Wiki page The Cartridge Header, locations 0x104 through 0x133 in the cartridge contain a bitmap of the Nintendo logo that's displayed when the Game Boy is turned on. (Presumably that's the &quot;Nintendo®&quot; text/logo shown in this video.) After booting and displaying the logo, these data are checked by the GB (the first 0x18 bytes on the Color Game Boy and all 0x30 bytes on other models) and, if the data are different from what's expected, the unit locks up.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Describes the boot process in general - maybe it is good to consider that displaying the logo already is most of the boot process. After all, it's a game system, all useful initialization will be done by the game itself.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Clearly the Game Boy has internal ROM available at least during the boot process so that it can do system setup and read the cartridge header.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a 256 byte on-chip ROM. Not exactly a luxurious environment. More than 5/8th are already occupied with displaying the logo. The ROM is present at address 0000h - which makes sense for a Z80, doesn't it?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It seems to me that the image above could just as easily be stored there (though it looks like it's not).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, it is. Occupying address 00A8h...00DFh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The decision, to use the one in the cartridge (Adress 0104h) instead of the Boot-ROM copy (at 00A8h), may look arbitrary at first, but as a second thought, it reveals that this will be quite handy when such a cartridge is inserted, as the user will not see the Nintendo logic when the game locks up, but whatever foreign is stored there, thus &lt;strong&gt;making sure the blame is directed&lt;/strong&gt; at them.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What are the reasons for storing this image (or a copy of it) in the cartridge?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'd say it's a simple copy protection mechanism.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One thought that comes to mind is that this is a licensing protection mechanism: the logo is intellectual property protectable under trademark laws and the specific binary representation of it under copyright laws, allowing Nintendo to sue anybody manufacturing working cartridges without a license from them.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I guess that's exactly the intention - giving lawyers a leverage for the time there is a need to sue, while avoiding upfront cost of (ultimate broken) hardware based copy protection schemes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Important in this context is that they not just required some location to read Nintendo (like &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11736/why-is-the-unchangable-nintendo-game-boy-logo-in-the-cartridge/11747?noredirect=1#comment36256_11747&quot;&gt;Kaz mentioned&lt;/a&gt; with the &lt;a href=&quot;https://segaretro.org/TradeMark_Security_System&quot; rel=&quot;noreferrer&quot;&gt;Sega TMSS scheme&lt;/a&gt;), but hold a graphic image. Graphic images registered as trademark, even if it's 'just' the name, bear a higher degree of protection than a name represented as (ASCII) characters. While a trademarked name can be used in many ways in every day life, graphic trademarks can not.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;However, Nintendo already had a seemingly more powerful version of this in the 10NES chip,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not more powerful, but a total different tool. The image within the Game Boy code was intended to use the very strong trademark law against any (worthwhile) attempt to create compatible software. The CIC was meant as a copy protection device stopping any attempt to build cartridges without licencing (and buying the chip). And copyright was only used in addition in case someone did go all the length to reverse engineer it. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;so why wouldn't they just use that? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simply cost. The game boy was meant to be as cheap as possible (*1). It's start introduction price was less than 90 USD - half of what the NES was. Similar Game Boy games were lower priced than NES games. Using the CIC would have meant to add that chip not only to every GB, but also each and every cartridge. All increasing cost without a direct benefit.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - One reason why it got that in 1989 already outdated B&amp;amp;W screen instead of state of the art colour (like the Lynx).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-22T01:45:28.640" LastActivityDate="2019-07-22T01:45:28.640" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11748" PostTypeId="2" ParentId="8092" CreationDate="2019-07-21T17:28:47.757" Score="5" Body="&lt;p&gt;Stumbled upon this question. I experience this with defective trim capacitor C20 as well and can be an easy fix :-)&lt;/p&gt;&#xA;" OwnerUserId="14700" LastActivityDate="2019-07-21T17:28:47.757" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11749" PostTypeId="2" ParentId="11736" CreationDate="2019-07-21T19:28:45.560" Score="5" Body="&lt;p&gt;I completely agree to the answer provided by Raffzahn, but there is an additional perceived advantage of using the logo from the cartridge. The contact between the cartridge and the slot known for its suboptimal reliability (and created the impression that blowing into the cartridge to de-dust it helps). If reading the ROM is unreliable, the Logo on the screen is displayed in a garbled fashion, like containing vertical lines if data lines are stuck high or even complete noise if some high address lines fail to address the logo area at all. This helps indicating to the user that the cartridge connection is unreliable and the reason for the game to not boot.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="3290" LastEditDate="2020-08-13T01:51:28.520" LastActivityDate="2020-08-13T01:51:28.520" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11750" PostTypeId="2" ParentId="11726" CreationDate="2019-07-21T19:31:11.567" Score="3" Body="&lt;p&gt;Here's a list of things you could try to narrow down the scope of your problem :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;reset the BIOS of your PC and your SCSI card to default settings &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;remove all components except necessary ones to preform your test &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;try update the firmware of your PC, SCSI adapter and HDD (might be difficult for the latter)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;try to change the slot were your SCSI adapter is inserted in (not all slots are created equal) &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;try a different HDD if possible &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;check whether your adapter requires PCI parity and enable it accordingly (e.g.   a Matrox G400 in an IBM IntelliStation will never pass POST unless parity is explicitly enabled for its slot in the BIOS) &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;read the documentation of all hardware concerned, you might find relevant bits in regards to compatibility and requirements &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I had the same problem except that it was the other way around, a 2004 LSI Logic U320 SCSI controller with a 15K RPM Fujitsu hard drive on an 1998 IBM IntelliStation M would pass the POST but then never be able to boot, this, until I tried another hard drive. &lt;/p&gt;&#xA;" OwnerUserId="3282" LastActivityDate="2019-07-21T19:31:11.567" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11751" PostTypeId="1" CreationDate="2019-07-21T21:29:25.480" Score="1" ViewCount="281" Body="&lt;p&gt;Where in the memory map ($0000-$ffff) does the Gameboy address the memory of these accessories? (for example, the battery or the Gameboy Printer). Is this something I should implement in an emulator?&lt;/p&gt;&#xA;" OwnerUserId="13631" LastActivityDate="2019-07-21T23:08:52.673" Title="How does the Gameboy address external hardware?" Tags="&lt;memory&gt;&lt;game-boy&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11752" PostTypeId="2" ParentId="11751" CreationDate="2019-07-21T21:48:55.013" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How does the Gameboy address external hardware?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;By mapping it in&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Where in the memory map ($0000-$ffff) does the Gameboy address the memory of these accessories?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In general all decoding is external. The address decoding looks basically like this&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0000h..00FFh - 256 Byte Boot-ROM - gets paged out.&lt;/li&gt;&#xA;&lt;li&gt;0000h..7FFFh - ROM area usually handeled as two blocks&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0000h..3FFFh - 16 KiB fixed game ROM (page 0)&lt;/li&gt;&#xA;&lt;li&gt;4000h..7FFFh - 16 KiB swappable game ROM (page 1..n)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;8000h..9FFFh - 8 KiB Video RAM (don't forget to take care of the memory configuration about sprites, BG, etc.)&lt;/li&gt;&#xA;&lt;li&gt;A000h..BFFFh - 8 KiB External RAM area&lt;/li&gt;&#xA;&lt;li&gt;C000h..DFFFh - 8 KiB Internal RAM&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For a Colour Game Boy this 8 KiB get split in two 4 KiB regions with the second being banked.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;E000h..FDFFh - 7.5 KiB unassigned (mirroring the RAM). Some games DO use it with externam RAM.&lt;/li&gt;&#xA;&lt;li&gt;FE00h..FEFFh - 256 Byte OAM RAM - Object Attribute Memory (Video/Sprites)&lt;/li&gt;&#xA;&lt;li&gt;FF00h..FF7Fh - 128 Bytes I/O area&lt;/li&gt;&#xA;&lt;li&gt;FF80h..FFFFh - HRAM&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So in general the first 32 KiB and the 8 KiB at C000h can be used for external RAM - and many pages (banks) thereof. And here it gets tricky as all decoding (for cartridges) is done external. So next to any combination using the address ranges 0000h..7FFFh and A000h..BFFFh can be used for RAM/ROM and being banked as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To control the behaviour and mapping usually access to certain ROM location is used. Luckyly most games one of the &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Memory_Bank_Controllers&quot; rel=&quot;nofollow noreferrer&quot;&gt;standard memory controllers&lt;/a&gt;. thus the combinations are rather known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there is nothing that prevents games to work otherwise. In addition some games do use the 7.5 Kib starting in E000h as well (by ignoring /CS).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;for example, the battery or the Gameboy Printer&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm not so sure what you want to control with the battery, but &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Gameboy_Printer&quot; rel=&quot;nofollow noreferrer&quot;&gt;the printer is handled&lt;/a&gt; via the serial link. Usually looking at the memory controllers is again a good idea to see the workings of either expansion using them. For example the contoler used with &lt;a href=&quot;https://github.com/AntonioND/gbcam-rev-engineer/blob/master/doc/gb_camera_doc_v1_1_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the camera&lt;/a&gt; is basically a &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Memory_Bank_Controllers#MBC3_.28max_2MByte_ROM_and.2For_64KByte_RAM_and_Timer.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;MBC3&lt;/a&gt;, mapping the CCD into the RAM area, much like a RAM bank.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is this something I should implement in an emulator?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Depends what you want to emulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Did I mention that creating an emulator is an endless task of always being surprised when discovering a new way some game is handling it's resources)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-21T23:08:52.673" LastActivityDate="2019-07-21T23:08:52.673" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11753" PostTypeId="2" ParentId="11731" CreationDate="2019-07-21T23:10:59.090" Score="3" Body="&lt;p&gt;The manufacturer's wiki &lt;a href=&quot;http://wiki.icomp.de/wiki/File:ACA1221_RTC_USB.JPG&quot; rel=&quot;nofollow noreferrer&quot;&gt;shows&lt;/a&gt; that the ACA1221 provides a port to supply power to the RapidRoad USB accessory through a simple jumper cable. From the end of the third paragraph in the &lt;a href=&quot;http://wiki.icomp.de/wiki/ACA1221#clock_ports&quot; rel=&quot;nofollow noreferrer&quot;&gt;Clock Ports&lt;/a&gt; section of the ACA1221 wiki page:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For passing power to RapidRoad, the white power output of the ACA1221 can be used.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The RapidRoad's power connector is wired to be powered from either the ACA1221's power port or a standard floppy drive power plug, as stated in the final sentence of the &lt;a href=&quot;http://wiki.icomp.de/wiki/RapidRoad#Overview&quot; rel=&quot;nofollow noreferrer&quot;&gt;Overview&lt;/a&gt; section of the RapidRoad's wiki page:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The high-current switch can supply up to 1.5A of power per port. For this high power rating, separate power must be supplied through a 3.5-inch floppy power connector.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This would imply that the power output connector of the ACA1221 shares the same pinout as a floppy drive connector and can provide at least 3 Amps of current on the 5 Volt pin, and also that the 5 Volts available on the Clock Port is not able to supply 3 Amps of current.  The pinout could be easily verified using a digital multimeter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: After close inspection of a random web image of the back of the ACA1221, it appears as if I can make out a ring around the 12 Volt pin of the power connector, so at least it is not connected to the ground plane, and may very well have the 12 Volts routed through from the Zorro bus connector:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/a4SY9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/a4SY9.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11734" LastEditorUserId="11734" LastEditDate="2019-07-22T02:06:34.087" LastActivityDate="2019-07-22T02:06:34.087" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11754" PostTypeId="1" CreationDate="2019-07-22T04:25:10.830" Score="12" ViewCount="2649" Body="&lt;p&gt;According to the &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Memory_Bank_Controllers#A000-BFFF_-_RAM_Bank_00-03.2C_if_any_.28Read.2FWrite.29&quot; rel=&quot;noreferrer&quot;&gt;GBdevwiki&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;0000-1FFF - RAM Enable (Write Only)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Before external RAM can be read or written, it must be enabled by&#xA;  writing to this address space. It is recommended to disable external&#xA;  RAM after accessing it, in order to protect its contents from damage&#xA;  during power down of the gameboy.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What happens if you attempt to read/write while it's disabled? Does the CPU hang? The Gameboy crash? How should I implement this in an emulator? Just return a garbage value or crash the game?&lt;/p&gt;&#xA;" OwnerUserId="13631" LastActivityDate="2019-09-19T12:52:05.553" Title="On a Gameboy, what happens when attempting to read/write external RAM while RAM is disabled?" Tags="&lt;memory&gt;&lt;game-boy&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11755" PostTypeId="2" ParentId="11754" CreationDate="2019-07-22T04:47:21.820" Score="8" Body="&lt;p&gt;Generally, the RAM wouldn't respond to reads or writes (obviously). Writes would be discarded, the CPU moves on. Reads would return 0xFF if the cart leaves the lines floating, though 0x00 is a possibility. There's also the chance that a particular memory mapper that's actually its own processor could hang, with results similar to yanking out the cart. As far as I know, there are not mappers like that, so you don't need to consider it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TL;DR: Writes do nothing, reads return 0xFF&lt;/p&gt;&#xA;" OwnerUserId="4308" LastActivityDate="2019-07-22T04:47:21.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11756" PostTypeId="2" ParentId="11732" CreationDate="2019-07-22T05:10:25.153" Score="2" Body="&lt;p&gt;b13rg's answer is excellent, and covers the cartridge bank switching well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wanted to cover the gameboy side of things; the addresses from &lt;code&gt;$8000-$9FFF&lt;/code&gt;, and &lt;code&gt;$C000&lt;/code&gt; onwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Gameboy internal banking&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your description of VRAM is correct. The gameboy color makes it a little weirder. The area from &lt;code&gt;$8000-$9FFF&lt;/code&gt; is banked on a GBC. Both banks hold tile data between &lt;code&gt;$8000-$97FF&lt;/code&gt;, while the first bank holds tilemaps in &lt;code&gt;$9800-$9FFF&lt;/code&gt;, and the second bank holds attribute data for the first bank's tilemaps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To read/write to the first bank, you'd write a 0 to address &lt;code&gt;$FF4F&lt;/code&gt;, and for the second bank, you'd write a 1. There's also a bit in tilemap attributes for specifying which bank to pull tiledata from, as well as in sprites' attributes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$D000-$DFFF&lt;/code&gt; is RAM inside the gameboy, just like &lt;code&gt;$C000-$CFFF&lt;/code&gt;. On the gameboy color (not the original), this, too, is banked. All internal to the GBC, you can pick which 4 kilobytes to see in the &lt;code&gt;$D000-$DFFF&lt;/code&gt; window.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 7 banks of 4 kilobytes to choose from, which you pick by writing a number from 1 - 7 to address &lt;code&gt;$FF70&lt;/code&gt;. Writing a 0 behaves like writing a 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The workings of both these is just like a cartridge, with the exception of the addresses involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;HRAM&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The high addresses (from &lt;code&gt;$FF00&lt;/code&gt; onwards) are special for two reasons:&lt;br&gt;&#xA; - They are internal to the CPU&lt;br&gt;&#xA; - They can be accessed with special instructions&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Point 2 above refers to the &lt;code&gt;LDH&lt;/code&gt; instructions, where &lt;code&gt;LDH (nn),A&lt;/code&gt; only takes up two bytes instead of 3 for &lt;code&gt;LD (nnnn),A&lt;/code&gt; and is also faster because of it, and `LDH (c),A&lt;/p&gt;&#xA;" OwnerUserId="4308" LastActivityDate="2019-07-22T05:10:25.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11757" PostTypeId="2" ParentId="11754" CreationDate="2019-07-22T06:47:51.337" Score="19" Body="&lt;p&gt;Technically, the behaviour is what we call &quot;undefined,&quot;* meaning you can't know what will happen and the system is allowed to do anything it wants in response, up to and including launching a nuclear attack on another country.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That, of course, is highly unlikely (or you clearly got your hands on a Game Boy you should not have). The most likely scenario in this case is that writes would be ignored and reads would return unknown data. Exactly what would happen may vary with the particular cart and its specific memory controller; I can imagine perfectly plausible situations where on a read from one cart always returns 0, another returns random data, and a third returns exactly the contents of the RAM (i.e., &quot;disabling&quot; the RAM just write-protects it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Less plausible, but still possible, would be a cart specifically designed to have &quot;funny&quot; behaviour when accessing the cartridge RAM addresses while disabled. It might, for example, have extra ROM that's mapped to that space when RAM is disabled, allowing for access to more ROM with less bank switching. Or there might be special hardware on the cartridge that's manipulated by writes to that area when RAM is disabled. This would also serve as a type of copy protection (intentional or not) by making the game more difficult to run on emulators: essentially the emulator would have to know about the game and emulate the cartridge's specific hardware as well as the Game Boy itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may even vary as well with the particular model of Game Boy; it's not unusual for system designers explicitly to leave behaviour undefined so that they can take advantage of this to change how the hardware operates (usually to reduce costs) in later versions of the device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an emulator, I would start by generating an error and halting the emulation. This will help you find the cases where you need to deal with this and determine what the behaviour should be, which will hopefully be few and far between. (Nintendo puts all games through a farily detailed QA process, so they may well be checking the code to see game developers aren't doing this.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've found a game that triggers this, you need to figure out what to do about it, which will involve researching that particular game. There may be on-line resources for it where you can get advice from people who have already dealt with the issue. You can also reverse-engineer the game code to see what it might be trying to do (and whether it's a bug or the game is actually trying to use an undocumented feature) and change your emulator to try out different actions (returning random data, returning zeros, whatever) and test to see how that works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've figured out what to do, unless you can confirm that that particular behaviour is, even though undocumented, actually stable across all versions of the Game Boy and all cartridges and their memory management units, it's probably best to make the emulator detect that game and do your choosen behaviour only for it, continuing to abort the emulation for any other software that tries to do the same thing. This will let you continue to detect other games that are using undocumented and/or undefined behaviour and deal with their specific requirements when they come up.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*What is &quot;undefined&quot; is fairly clear when working with specifications from the original vendor: it's certainly whatever they tell you is not defined, and usually also what they omit to define in the documentation unless the behaviour is obvious by convention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reverse-engineered systems we're not working from original manufacturer documentation (detailed developer documentation for the GBA exists, but is proprietary) so the definition I'm using here for &quot;defined behaviour&quot; is &quot;what extensive testing has shown to be consistently true for hardware considered to be working correctly.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for example on cartridges where &lt;code&gt;$0147&lt;/code&gt; = &lt;code&gt;$02&lt;/code&gt; (thus claiming to adhere to MBC1+RAM behaviour) and &lt;code&gt;$0149&lt;/code&gt; = &lt;code&gt;$03&lt;/code&gt; (claiming 4 × 8KB RAM banks), I would call writing &lt;code&gt;$02&lt;/code&gt; to &lt;code&gt;$4000&lt;/code&gt;-&lt;code&gt;$5fff&lt;/code&gt; to switch RAM bank 2 to be &quot;defined&quot; behaviour, as per &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Memory_Bank_Controllers#4000-5FFF_-_RAM_Bank_Number_-_or_-_Upper_Bits_of_ROM_Bank_Number_.28Write_Only.29&quot; rel=&quot;noreferrer&quot;&gt;this widely confirmed document&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, since I've seen no widely confirmed evidence of consistent results from testing writes to disabled cartridge RAM, I call that &quot;undefined&quot; behaviour. This could change if sufficient testing is done to come to a fairly firm conclusion about what all correctly operating cartridge and main unit combinations do.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-23T01:18:21.620" LastActivityDate="2019-07-23T01:18:21.620" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="11758" PostTypeId="2" ParentId="11736" CreationDate="2019-07-22T08:58:12.843" Score="2" Body="&lt;p&gt;Regarding the 10NES chip, it proved ineffective. Eventually ways were found to disable or bypass it. Mostly that involved a circuit in the cartridge using a voltage spike to cause the 10NES chip to latch up and stop working temporarily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, where it was somewhat effective was when it was cloned. Tengen, a subsidiary of Atari, cloned the 10NES chip by obtaining the source code from the Copyright Office under false pretences. Nintendo sued and eventually won in court, due to the copyright infringement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This told Nintendo two things. Firstly, having a separate chip for copy protection was unlikely to work as it could be interfered with in the same way as 10NES was, and simply added cost to the system. So the Gameboy instead moved the protection to an on-die ROM that was part of the CPU, which make it extremely difficult to circumvent. In fact, it resisted attempts to read it until decades later, and the method used (clock glitching) was not something that a cartridge could do reliably itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, copyright and trademark law were more effective at deterring unlicensed games. Making the cartridge check look for the copyrighted and trademarked Nintendo logo graphic, which was then forced to be displayed on screen (similar to how Sega displayed &quot;produced by or under licence from Sega&quot; on some of their systems). If anyone copied the logo without authorization, Nintendo could sue them and have a very good chance of winning.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-07-22T08:58:12.843" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11759" PostTypeId="2" ParentId="6984" CreationDate="2019-07-22T09:55:13.867" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;As I know it probably does not have any effect on the IRQ routine. Or does it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It does indeed: It allows other IRQs to be serviced. The 6502 I flag &quot;masks&quot; IRQs, and it is set automatically as soon as an IRQ is serviced and cleared implicitly by &lt;code&gt;RTI&lt;/code&gt;. So, normally, IRQs are only ever serviced sequentially. By clearing the I flag yourself in an ISR (interrupt service routine), you actively allow this routine to be interrupted by serving a different IRQ.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code you show here is special, containing a bunch of &lt;code&gt;NOP&lt;/code&gt;s after the &lt;code&gt;CLI&lt;/code&gt;. This is typically done for (almost) cycle-exact timing of the code in an ISR, normally for an IRQ requested by the VIC graphics chip. To fully understand how this works, here's some in-depth information on 6502 IRQ handling (still not complete):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An IRQ is signaled to the 6502 by pulling down the IRQ line to low level. This low level is kept until the IRQ is serviced, which needs some assistence from the code in the ISR. With multiple IRQ sources, it's first necessary to check which one requested the ISR, then acknowledge the IRQ there, so this chip stops pulling down the IRQ line. When coding graphical effects on the C64, you often only enable a single IRQ source, so checking isn't necessary any more -- just acknowledge the IRQ at the VIC and it will stop pulling the line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the 6502 also has an internal flag for &quot;IRQ requested&quot;. During execution of an instruction, typically right before the last cycle (but that's different for a few instructions), the CPU checks the state of the IRQ line, and if it is low, the internal flag gets set. Right after each instruction, this internal flag is checked, and, if set (while the I flag is unset), servicing an IRQ is started instead of executing the next instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the &lt;em&gt;exact&lt;/em&gt; time when the CPU starts servicing an IRQ can vary quite a few cycles (the difference between max and min cycles for executing an instruction, plus one extra as there are instructions checking the IRQ line before the second last cycle), which is unacceptable for many graphical effects. &lt;strong&gt;One&lt;/strong&gt; strategy for achieving exact timing is to have the IRQ occur while the CPU does something we know: execute a bunch of &lt;code&gt;NOP&lt;/code&gt;s. They take 2 cycles each, so the exact time of servicing the IRQ can only vary by one cycle. This last cycle can be accounted for using another trick not relevant for this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code using this trick typically restores the stackpointer in the second ISR, so the stack looks like only one ISR was called by the CPU. Therefore, a simple &lt;code&gt;RTI&lt;/code&gt; in the second ISR will return to the main code.&lt;/p&gt;&#xA;" OwnerUserId="7040" LastActivityDate="2019-07-22T09:55:13.867" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11760" PostTypeId="2" ParentId="7466" CreationDate="2019-07-22T10:10:29.357" Score="11" Body="&lt;p&gt;I'm aware this is an old thread, but I thought it would be worth a brief comment given the relevance of some work I've done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally I hope the answer to this question is yes, since last year I started a personal project to implement an LLVM compiler for AGC (&lt;a href=&quot;https://github.com/lewis-revill/agc-llvm&quot; rel=&quot;noreferrer&quot;&gt;LLVM&lt;/a&gt;, &lt;a href=&quot;https://github.com/lewis-revill/agc-clang&quot; rel=&quot;noreferrer&quot;&gt;Clang&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found it took a lot of effort just to manipulate the existing framework of the compiler, designed for modern processors, to be able to represent the funky aspects of the AGC assembly and programming model. For example, the blurred lines between what is a register and what is 'memory' required quite a bit of thought.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also the question of searching through the entire pipeline of the compiler to track down places where numbers are assumed to be two's complement. Constant folding comes to mind as something that would completely mess up your code if it made this assumption.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only have experience with LLVM, but I would imagine even to an expert, writing a GCC backend would throw up the same class of issues. I'd expect there would be more chance of success from writing a well designed compiler from scratch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those who are interested I gave a talk this year at FOSDEM on this: &lt;a href=&quot;https://fosdem.org/2019/schedule/event/llvm_apollo/&quot; rel=&quot;noreferrer&quot;&gt;https://fosdem.org/2019/schedule/event/llvm_apollo/&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="14708" LastEditorUserId="14708" LastEditDate="2019-07-23T08:31:44.117" LastActivityDate="2019-07-23T08:31:44.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11761" PostTypeId="1" AcceptedAnswerId="11771" CreationDate="2019-07-22T12:47:17.980" Score="13" ViewCount="6073" Body="&lt;p&gt;This is inspired by the question&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11739/what-does-a-nintendo-game-boy-do-when-turned-on-without-a-game-cartridge-inserte&quot;&gt;What does a Nintendo Game Boy do when turned on without a game cartridge inserted?&lt;/a&gt;&quot;:&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Growing up in the 80s and 90s in the UK, it was &quot;common knowledge&quot; amongst my friends that turning on a games console without a cartridge inserted would cause damage to the console. We are talking about Game Boys, Master Systems, Mega Drives, NES, SNES and the like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume this wasn't actually the case but I am wondering where this &quot;fact&quot; came from and if it was limited to certain geographies or demographics, or if this was opinion all over the World.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course, I am excluding those consoles that had a game built in and simply booted into that game if no cartridge was inserted (I can think of at least one example of a Master System that had an Alex Kidd game built in).&lt;/p&gt;&#xA;" OwnerUserId="14713" LastEditorUserId="6659" LastEditDate="2019-07-22T15:55:01.797" LastActivityDate="2019-07-23T14:52:43.907" Title="Does switching on an old games console without a cartridge damage it?" Tags="&lt;power&gt;&lt;game-consoles&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11762" PostTypeId="2" ParentId="11761" CreationDate="2019-07-22T12:57:08.103" Score="5" Body="&lt;p&gt;I would be very surprised if a console would cause damage to itself if it's turned on without a cartridge. That's a serious defect!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't imagine there's any way to tell where this &quot;lie&quot; has come from. My guess is schoolyard scares, just like &quot;you know if you call the police it'll actually recharge your phone battery?&quot; (also a lie, don't do it)&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-07-22T12:57:08.103" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11763" PostTypeId="2" ParentId="11761" CreationDate="2019-07-22T13:04:15.550" Score="5" Body="&lt;p&gt;My nephew used to have a Videopac 2000 (if I recall correctly). It worked with cartridges, and we sometimes used to remove cartridges and reinsert it (mostly with just a second or less delay), to see what happens. Sometimes the game got corrupted software-wise which meant for a quite unusual gameplay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We did this so many times, that I can assure the Videopac neither the cartridges got damaged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not that I would advise this practice, I am sure it voids the warranty.&lt;/p&gt;&#xA;" OwnerUserId="7037" LastActivityDate="2019-07-22T13:04:15.550" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11764" PostTypeId="2" ParentId="11761" CreationDate="2019-07-22T15:30:33.813" Score="7" Body="&lt;p&gt;The documentation for the 6502 processor says nothing about what will happen if it attempts to execute opcodes beyond those defined by MOS Technologies.  Among other things, the designer made no particular effort to ensure that such opcodes wouldn't cause bus-control wires to be pulsed in sequences that would not otherwise occur under any specified conditions.  Systems using the 6502 were generally designed so that no sequence of pulses that could occur during defined operation could damage anything, but they could not offer such assurances for every imaginable way in which the 6502 might wiggle its outputs.  Among other things, if there had been any situation in which the 6502 would simultaneously issue a read request while driving the data bus low, and the read request caused some other device to drive the databus high, and such a condition persisted for many seconds, the output driver on the 6502 could get fried.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, the behavior of every possible 6502 opcode byte has been thoroughly analyzed--even at the transistor level--in the last few decades, and while there are some that will lock up the CPU hard enough that only the /RESET pin will restore normal operation, there aren't any that will yield invalid bus states.  The makers of game machines couldn't know that, however, and it's doubtful that even the makers of the 6502 really knew that for sure.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-07-22T15:30:33.813" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11765" PostTypeId="1" AcceptedAnswerId="11781" CreationDate="2019-07-22T16:30:21.903" Score="82" ViewCount="18258" Body="&lt;p&gt;Everyone who used early telecommunications services, not to mention the early dial-up Internet services, is familiar with the tones and hissing sounds of a modem establishing a connection. I recall all my home computer modems, from the early 1980s 300 baud units through to the late 1990s 56K units all having speakers to provide this audible status/feedback during dialing and connecting. Indeed, it is one of the strongest memories surrounding telecommunications during those &quot;pioneering&quot; years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But terminal programs were usually sophisticated enough to provide nice status indications (mainly visual, but possibly audible) about what was going on with the modem while trying to establish a connection. Such terminal UI features certainly seem superior to the horrendous &quot;groaning&quot; and &quot;hissing&quot; from the modem speaker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why were modem speakers such a persistent feature, and &quot;fixture&quot; of the time?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-07-24T19:38:16.930" Title="Why did modems have speakers?" Tags="&lt;modem&gt;&lt;internet&gt;" AnswerCount="9" CommentCount="15" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11766" PostTypeId="2" ParentId="11765" CreationDate="2019-07-22T16:37:34.197" Score="3" Body="&lt;p&gt;My guess is that's its mainly for easy human understandable notification. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably it can be compared a little bit with electrical cars. They do not make sound. Because people are not used to them, it can be dangerous if one suddenly approaches you (especially from a side you cannot see). To prevent this problem, some cars make sounds (like a motor) to 'warn' people there is a car near.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course this is more from a safety point of view, but when someone sees a car, it expects to hear one too. Since people were used to hear a sound from a modem, they need to hear the sound; if it is silent they might think it is nonfunctional (even with some terminal program indicating otherwise).&lt;/p&gt;&#xA;" OwnerUserId="7037" LastActivityDate="2019-07-22T16:37:34.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11767" PostTypeId="2" ParentId="11765" CreationDate="2019-07-22T16:40:39.407" Score="63" Body="&lt;p&gt;Not all modems from back in the day had speakers, for example an early popular modem was the Hayes Micromodem II (available for Apple ][ and S-100 machines) and it did not have a speaker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the speaker served a few purposes that I can think of:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Early modems were not very good at detecting various states, e.g. busy line, voice pickup, disconnected number notifications, etc. Without the modem supporting the detection of these states, the terminal program wouldn't do a very good job reporting it.&lt;/li&gt;&#xA;&lt;li&gt;You could quickly tell if the line was busy or if someone picked up the phone. Even with later modems, detecting voice was not quick or necessarily accurate.&lt;/li&gt;&#xA;&lt;li&gt;You could detect any dialing errors easier. Obviously, this would be more appropriate for complicated numbers rather than ones in your local area code / exchange.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Personally, I always left the speaker on though perhaps turned down low enough that I could hear the dial and busy tones. If anything, it did give me the ability to whistle a carrier tone by hearing it so many times :-)&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2019-07-22T17:02:01.243" LastActivityDate="2019-07-22T17:02:01.243" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="11768" PostTypeId="2" ParentId="11765" CreationDate="2019-07-22T16:51:48.107" Score="11" Body="&lt;p&gt;I suspect it could be a holdover from the days when a modem was a box that connected between your terminal and your phone.  The phone handset was used to dial the remote number; when you heard the whistle from the far modem, you'd press the 'online' button on the modem, and then replace the phone handset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, of course, if it wasn't a modem whistle you heard, it was either a confused human, or else some telephone-system signal telling you why you hadn't been connected (either tones or voice announcement).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So audible signals were an intrinsic part of knowing where you were in the connection sequence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mUEJC.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mUEJC.jpg&quot; alt=&quot;Image from _Handbook of Data Communications_, UK Post Office, 1975&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The photo is from &lt;em&gt;Handbook of Data Communications&lt;/em&gt;, UK Post Office, 1975. The modem's the box under the telephone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I seem to recall that the PC-board modems could be configured to not enable the speaker, but I for one always left the audio on, for reassurance that things were progressing in the desired manner.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-07-22T22:09:09.670" LastActivityDate="2019-07-22T22:09:09.670" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11769" PostTypeId="2" ParentId="11765" CreationDate="2019-07-22T16:53:54.633" Score="4" Body="&lt;p&gt;On an older modem, if one tried to dial a number, one of two things would happen:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Before a configurable timer expired, the modem received a carrier tone.  In this case, it would output &quot;CONNECT&quot; and then start exchanging data with the far end.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The timer expired without the modem having received a carrier tone.  In this case, the modem would output &quot;NO CARRIER&quot;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Older modems had circuitry to detect the carrier tone, but not to detect anything else that might happen on the line, since a modem had no real reason to care about such things.  All the modem cared about is whether the connection succeeded or failed.  A human might want to know more, but the simplest way of giving such information to a human was to add a speaker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, I remember a modem which had a configuration option to mute the speaker as soon as it heard the carrier pilot tone, rather than at the end of negotiation; I don't know why that wasn't a more common option.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-07-22T16:53:54.633" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11770" PostTypeId="2" ParentId="11765" CreationDate="2019-07-22T16:58:12.820" Score="32" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So why were modem speakers such a persistent feature, and &quot;fixture&quot; of the time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Three basic reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Adding a simple amplifier and a speaker is the most easy way to handle unexpected situations&lt;/li&gt;&#xA;&lt;li&gt;In many countries/networks having a speaker active while establishing a connection  was mandatory to make it legal/get a validation&lt;/li&gt;&#xA;&lt;li&gt;Adding it was as well the least cost intensive way to handle complex situations.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, the kind of modems most people used were not for dedicated lines, like today's cable or DSL installations, but operating over regular dial up. To start with, anything could happen - starting from some angry mom picking up the phone were her son has hooked up his BBS, wrong numbers, all the way to signal tones outside the spec the modem was built for (for example ring tones in various countries used different rhythms and frequencies).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So having a speaker was a quite good debugging tool - after all, whatever happened on a phone line would be within 3000 Hz, clearly noticeable by humans listening.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is also the reason why phone regulators/companies required them to be installed as well. They wanted to minimize interruption of third parties (due to mishandled/directed calls) as well as having the user able to detect special situations on his own, without calling for service. In fact, in many cases it was  required that each and every modem had to have a handset (or a complete phone) connected, so the operator can pick it up and talk to any (unintended) party on the other side to apologize and/or first talk to the other side before switching to data. In reality most private users ignored that part (as well).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the reasons why feeding the speaker, until a valid connection was established, was the default configuration - though, it wasn't really enforced. If you didn't like it, it could be configured away - at least with most modems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but for sure not least: modem producers liked it as well. After all, with a speaker they didn't have to invest much money in detecting all kinds of situations. Let the user handle it like he was used to doing with a regular phone call.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-07-23T08:15:06.370" LastActivityDate="2019-07-23T08:15:06.370" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11771" PostTypeId="2" ParentId="11761" CreationDate="2019-07-22T17:47:37.210" Score="20" Body="&lt;p&gt;In general, no. Cartridges from the first few generations were really only breakouts for ROM chips and thus were mostly a collection of address and data lines with a +5V and GND at minimum and perhaps a few others. In the case of the Intellivision, it also had SYNC, serial lines and a video passthrough (to support &lt;a href=&quot;https://en.wikipedia.org/wiki/Intellivoice&quot; rel=&quot;noreferrer&quot;&gt;IntelliVoice&lt;/a&gt;, Atari 2600 module, etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The consoles were designed to look for a cartridge and start executing code on them immediately. If there was no ROM, there was no code to run and thus the machine either sat there getting the same empty signals into the CPU (effectively doing nothing) or if more advanced, the minimal firmware was able to display some kind of message (e.g. &lt;a href=&quot;https://i.ytimg.com/vi/MKKfWrQvN4I/hqdefault.jpg&quot; rel=&quot;noreferrer&quot;&gt;ColecoVision error screen&lt;/a&gt; or how the NES just blinks, though that behavior is more the &lt;a href=&quot;https://en.wikipedia.org/wiki/CIC_(Nintendo)#10NES&quot; rel=&quot;noreferrer&quot;&gt;10NES lockout chip&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The risk of damage to a console, as far as I've ever been able to determine, comes from the possibility of static buildup on the cartridge or device being plugged in and having this discharge happen on one of the address or data lines. As such, many &quot;hot swappable&quot; connectors tend to have the pins for the GROUND slightly longer than anything else (e.g. USB does this) so that any discharge is safe before connecting the &quot;fragile&quot; data lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, turning on a console without a cartridge should not be a problem since the device will either not work or would have been designed to handle the situation. As far as (un)plugging a cartridge with the power on, it is in general not a good idea to do this if you can avoid it. However, consumer devices like cartridge video game consoles were targeting a non-technical audience and typically were designed to account for people who didn't RTFM and wouldn't have thought that unplugging a cartridge would potentially do damage.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="4858" LastEditDate="2019-07-23T11:34:20.367" LastActivityDate="2019-07-23T11:34:20.367" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11772" PostTypeId="5" CreationDate="2019-07-22T18:04:44.550" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-07-22T18:04:44.550" LastActivityDate="2019-07-22T18:04:44.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11773" PostTypeId="4" CreationDate="2019-07-22T18:04:44.550" Score="0" Body="For questions relating to single in-line memory modules" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-07-22T18:40:53.043" LastActivityDate="2019-07-22T18:40:53.043" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11774" PostTypeId="5" CreationDate="2019-07-22T18:14:29.863" Score="0" Body="&lt;p&gt;The &lt;strong&gt;Extended Binary Coded Decimal Interchange Code&lt;/strong&gt; uses eight bits per character to encode values. It is commonly used on mainframes, especially those compatible to the IBM /360 line&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="6659" LastEditDate="2019-07-22T18:22:34.437" LastActivityDate="2019-07-22T18:22:34.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11775" PostTypeId="4" CreationDate="2019-07-22T18:14:29.863" Score="0" Body="For questions related to the character encoding system, created by IBM for their System/360 range" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-07-22T18:40:41.540" LastActivityDate="2019-07-22T18:40:41.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11776" PostTypeId="1" AcceptedAnswerId="11787" CreationDate="2019-07-22T18:48:08.507" Score="38" ViewCount="12614" Body="&lt;p&gt;While early microcomputers used analog video outputs (often to use a television as a display), higher end machines such as the BBC Micro or Commodore 128 supported a digital RGB (or RGBI) video output. In the IBM-compatible world, the CGA and EGA display adapters likewise had digital outputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the VGA standard landed in 1987, it was analog, rather than digital. VGA and analog output held sway for well over a decade or two, but then DVI, DisplayPort and HDMI took video outputs back to digital.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did video standards abandon digital in the first place, and then return to it several years later?&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2020-02-06T06:20:37.177" Title="Why did computer video outputs go from digital to analog, then back to digital?" Tags="&lt;history&gt;&lt;video&gt;&lt;display&gt;" AnswerCount="8" CommentCount="6" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11777" PostTypeId="2" ParentId="11776" CreationDate="2019-07-22T19:12:34.763" Score="35" Body="&lt;p&gt;Early digital video outputs, like CGA, were not really akin to the later standards such as DVI and its follow-on's. The reason for using multiple lines to carry the different analog portions of the signal to the monitor was to prevent crosstalk interference of these signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see this in the very early computers like the Commodore 64 and Atari 800 separating the luminance and chrominance signals to produce a cleaner display. Similary, CGA (RGBI) separated each color component from the sync components in order to deliver a cleaner version of all those signals to the CRT, minimizing crosstalk. VGA, which was not limited to only 4 bits for representing color information, continued this approach of separate signal lines for color and sync.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember, within the CRT, there are only 3 color signals possible for controlling the 3 electron guns that will produce RGB on the display phosphors. So when VGA took the technology from CGA's 2^4 possible colors to VGA's 2^18 possible colors, it was still only necessary to separate the R from the G and the B signals. There would be no point to using 18 separate lines to carry the 18 bits of digital color data to only 3 electron guns in the CRT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the more essential technology change was the move from CRT's, which are analog peripherals, to LCD screens, which incorporate more digital processing in controlling their individual pixel intensities. With LCD's, obviously there are no purely analog electron guns assigned to the primary colors. This fact, coupled with excellent advances in the bandwidth of serial communications channels, allows modern displays to carry the full digital display signal in its computer-native form to the display's processor.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-07-22T22:32:25.723" LastActivityDate="2019-07-22T22:32:25.723" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11778" PostTypeId="2" ParentId="11776" CreationDate="2019-07-22T19:34:01.980" Score="2" Body="&lt;p&gt;I believe it was cost and terminal emulation.  The RGB monitors were very expensive at the time and would not work (easily) as dumb terminals.  IBM wanted a &quot;low&quot; cost display that was double the resolution of CGA and that could be used to emulate their mainframe 3270 terminals.  EGA was a temporary stop-gap design while work continued on VGA - 640x480 graphics and sharp 80 col x 25 row display in &quot;B&amp;amp;W&quot; and color. Lotus 123 never looked so good as did the 3270 display on a VGA screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Business PCs sales really took off when VGA hit the streets.  You could now use one display to do PC work and emulate an IBM mainframe 3270 terminal.  Dec VT100/200 emulation and Burroughs (Unisys) B6000/A10 TDI emulation soon followed.  VGA was the key to having only one terminal at your desk.  I was in banking in Chicago at the time and we couldn't get enough IBM XTs with VGA and 3270 cards.  We made a lot of money using those 640x480 VGA monitors for PC work and dumb terminals. Networks based on Ethernet were not mainstream yet - Mainframes paid the bills.&lt;/p&gt;&#xA;" OwnerUserId="14686" LastActivityDate="2019-07-22T19:34:01.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11779" PostTypeId="2" ParentId="11765" CreationDate="2019-07-22T19:45:05.330" Score="3" Body="&lt;p&gt;I listened for a dial tone - told me my phone line was working.  Phone outages were common in the 80's.&lt;/p&gt;&#xA;" OwnerUserId="14686" LastActivityDate="2019-07-22T19:45:05.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11780" PostTypeId="2" ParentId="11776" CreationDate="2019-07-22T20:16:41.343" Score="7" Body="&lt;p&gt;That question is built on somewhat weak ground. After all, most of the video formats you list as 'digital' aren't such - or at least not more as any of the analogue ones are. Just because an output like RGBI uses two levels per channel doesn't make it digital. They only feature a restricted number of signal levels.&lt;/p&gt;&#xA;&lt;p&gt;Digital signalling only started with formats like DVI/HDMI/etc., where signal data was not transferred as levels but a data stream. Everything before isn't digital.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Now, the decision to use RGBI is one about saving components to encode the signals by some complex modulation (like FBAS or SVIDEO) just to add even more components to the display to decode it again.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;And yes, as snips-n-snails suspects, it's all about the amount of data - just not so much about memory bandwidth but rather transfer bandwidth. Using multiple lines increases bandwidth without increasing data rate. Increasing values per step (and lane) also increases bandwidth without increasing signalling steps.&lt;/p&gt;&#xA;&lt;p&gt;Here also hides the reason why it took so long to switch to real digital transfer - analogue already delivered an awesome amount of bandwidth. But with increasing bandwidth even further, hard-to-compensate signal distortion grew as well.&lt;/p&gt;&#xA;&lt;p&gt;Going digital offers the solution by separating transfer from content. Distortion on transfer level are compensated or corrected) without influence to the data (and thus the image) transferred.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Addendum:&lt;/h2&gt;&#xA;&lt;p&gt;Bruce Abbot made an incredibly &lt;a href=&quot;/q/11776/#comment36331_11780&quot;&gt;good point&lt;/a&gt; about using the terms &amp;quot;analogue&amp;quot; and &amp;quot;digital&amp;quot; by citing Wikipedia's &lt;a href=&quot;https://en.wikipedia.org/wiki/Digital_signal&quot; rel=&quot;nofollow noreferrer&quot;&gt;definition of a digital signal&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;A digital signal is a signal that is being used to represent data as a sequence of discrete values; &lt;strong&gt;at any given time it can only take on one of a finite number of values&lt;/strong&gt;.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Using this definition &lt;strong&gt;all of the mentioned formats are digital&lt;/strong&gt;, as all of them only produce a finite number of values and only one of them at any given time. For example take VGA. By having 256 (=finite) values for each colour and three colours (still finite) and only one of these combinations is output for a pixel (at a time), it exactly fits this definition.&lt;/p&gt;&#xA;&lt;p&gt;Taking this definition seriously, and it's not a bad one, then no computer generated output is ever analogue. It will always be a series of finite levels over time.&lt;/p&gt;&#xA;&lt;p&gt;If that's valid, it may seam that this is just swapping the point above from before DVI &lt;em&gt;everything is analogue&lt;/em&gt; to &lt;em&gt;everything is digital&lt;/em&gt;, doesn't it? At least meaning that either way, there was no switching back and forth.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-23T08:15:01.100" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11781" PostTypeId="2" ParentId="11765" CreationDate="2019-07-22T20:17:08.430" Score="119" Body="&lt;p&gt;Much of this has been covered by previous answers, but to try to summarize:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Adding a speaker was &lt;em&gt;cheap and easy&lt;/em&gt;. The additional parts were standard, reliable, and inexpensive.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It provided &lt;strong&gt;rich, immediate, understandable&lt;/strong&gt; feedback on a variety of call-progress milestones.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Click&lt;/strong&gt; -- modem is responding enough to grab the line. (This click was usually from a mechanical relay, not the speaker, but it goes into the same sensory-processing pipeline.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Dial tone&lt;/strong&gt; -- phone line is available. No dial tone? Check whether you're plugged in, see if your regular phone has been off-hook long enough for the phone company to give up on it. If you hear a voice, someone else is using the line; try again later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Touch-tone/click signals&lt;/strong&gt; -- you're dialing the remote number. If there are too many or two few digits, you'll hear the difference; eventually, you might even learn to recognize the patterns for frequently-called numbers, so you can hear if you've accidentally dialed the wrong one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Remote ring&lt;/strong&gt; -- you've successfully reached the remote number. Busy signal, disconnected-line message, &quot;you must first dial 1&quot;? All much easier for a human ear to interpret than for 1980s hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Connect tones&lt;/strong&gt; -- you've reached a modem at the other end. Voice or recorded message? You haven't reached a modem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Silence following the previous stages&lt;/strong&gt; -- the modem thinks you've connected successfully. Continuing connect/handshake tones? You might have a bad line; if it goes on too long, hang up manually and try again.&lt;/p&gt;&#xA;" OwnerUserId="495" LastEditorUserId="495" LastEditDate="2019-07-23T19:42:02.463" LastActivityDate="2019-07-23T19:42:02.463" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11782" PostTypeId="2" ParentId="11776" CreationDate="2019-07-22T20:51:45.800" Score="12" Body="&lt;p&gt;Older monitors had analog timing and, with one notable exception, were designed so that the signals presented on their inputs at any moment would fully describe the color to be displayed at that moment.  The only monitors that used any sort of time multiplexing on their inputs were those that used the same analog composite color encoding methods used in broadcast television receivers (and typically used much of the same circuitry to decode the signals).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Older &quot;digital&quot; monitors would need to send video signals over enough wires to identify every possible color as a binary number.  For a 64-color monitor like an EGA display, that required using six signals, and for a 262,144-color monitor like the VGA it would have required 18--too many to be practical.  Using an analog RGB or YUV (today called &quot;component video&quot;) signal reduced the number of signals required to three without imposing any constraints on pixel timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Newer standards like HDMI require sending high-speed serial bit streams with many bits of data per pixel.  That in turn requires higher data rates and thus faster switching rates than could be accommodated with older technologies.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-07-22T20:51:45.800" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11783" PostTypeId="2" ParentId="11776" CreationDate="2019-07-22T20:56:56.450" Score="23" Body="&lt;p&gt;Before VGA was invented, CGA RGBI used 4 wires to get 16 colors and EGA used 6 wires to get 64 colors on the cable. Add 3 more for sync signals and signal ground, and this won't be an issue, simple cables and connectors exist for getting EGA's about 16.3 million pixels per second digital signals over to the monitor easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amiga was released. It supports 4 bits per color component, or 12 bits of color for 4096 colors. It can be connected to a standard color TV directly (via SCART analog RGB), and the RGB is also used to generate color composite and RF outputs. It also has digital RGBI interface, but only 16 colors so why use it, analog RGB is much better, and even composite with single RCA connection is tolerable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enter VGA. You have up to 8 bits per pixel at about 28.3 million pixels per second. Digital video links such as LVDS or SDI have not been invented yet, because there has been no need for them yet. But RAMDACs exist. What any sane designer would do is to add one of these to offer a color look-up table as well, and to generate 6 bit output per component, or 18 bits per pixel, directly converted to analog RGB. This means no huge amount of digital wires are needed, just 3 coaxial cables for analog video, plus 2 wires for sync. Plus the monitor can just eat analog signals as digital signals have to be converted to analog anyway for driving CRT guns. This just made no sense to connect VGA digitally, or the number of colors or color palette lookup feature would have to be discarded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides VGA, others use analog connections too (SUN/SGI, Apple..). Resolutions increase, refresh rates increase, color depths increase. Transmitting high bandwidth analog video needs more precision and engineering to have acceptable quality. Meanwhile, LVDS was invented, finds its use in LCD panels as a digital video link. Laptops need LCD panels so they have LVDS chips after color look-up table, so LVDS gets eventually integrated to chipsets. Finally CRT monitors start to be replaced with LCD displays. As the source and display device are digital, the high quality analog link between them could be eliminated cheaply with digital interface to avoid extra conversions. First using the laptop-based LVDS technology in various forms, but those were just external versions of internal laptop display links, so very early on TMDS-based DVI link replaced these. So more bandwith and quality is much more easily and cheaply gotten over digital link than doing analog conversions on both ends, since they are not even necessary. The rest is history.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-07-22T20:56:56.450" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11785" PostTypeId="2" ParentId="11736" CreationDate="2019-07-23T05:00:36.630" Score="8" Body="&lt;h3&gt;Summary/TLDR&lt;/h3&gt;&#xA;&lt;p&gt;From court documents it's clear that the primary purpose of a similar&#xA;technique used by Sega starting at least as early as 1988 (released&#xA;while the Game Boy was still under development) was to use trademark&#xA;law to stop distribution of original games by other developers without&#xA;a license from the console manufacturer. Nintendo had been dealing&#xA;with the same problems, possibly for longer than Sega had, and no&#xA;doubt had lawyers and managers who were just as smart and competent,&#xA;so it's likely they did it for the same reasons.&lt;/p&gt;&#xA;&lt;h3&gt;Sega's TMSS and its Purpose&lt;/h3&gt;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11736/7208#comment36256_11747&quot;&gt;mentioned by Kaz in a comment&lt;/a&gt;, in 1990 (a year after the&#xA;release of the GameBoy) Sega started doing the same thing with their&#xA;&lt;a href=&quot;https://segaretro.org/TradeMark_Security_System&quot; rel=&quot;noreferrer&quot;&gt;TradeMark Security System&lt;/a&gt; on the Genesis III. This was a great&#xA;clue, as it turns out to lead to fairly compelling evidence about why&#xA;they did this.&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://openjurist.org/977/f2d/1510&quot; rel=&quot;noreferrer&quot;&gt;977 F. 2d 1510 - Sega Enterprises Ltd v. Accolade&#xA;Inc&lt;/a&gt; ¶6:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;...Sega had grown concerned about the rise of software and hardware&#xA;piracy in Taiwan and other Southeast Asian countries to which it&#xA;exported its products. Taiwan is not a signatory to the Berne&#xA;Convention and does not recognize foreign copyrights. Taiwan does&#xA;allow prosecution of trademark counterfeiters. However, the&#xA;counterfeiters had discovered how to modify Sega's game programs to&#xA;blank out the screen display of Sega's trademark before repackaging&#xA;and reselling the games as their own.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's made clear in ¶79 that this was a conscious and explicit decision&#xA;by Sega:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;...Sega officials testified that Sega incorporated the TMSS into the&#xA;Genesis console, known in Asia as the Mega-Drive, in order to lay&#xA;the groundwork for the trademark prosecution of software pirates who&#xA;sell counterfeit cartridges in Taiwan and South Korea, as well as in&#xA;the United States.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It seems also that the system had been designed and implemented in&#xA;cartridges before the first release of the Genesis system in 1988, as&#xA;would obviously have been necessary if the old cartridges were to work&#xA;in the Genesis III. ¶8:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;During the reverse engineering process, Accolade engineers had&#xA;discovered a small segment of code—the TMSS initialization code—that&#xA;was included in the &amp;quot;power-up&amp;quot; sequence of every Sega game, but that&#xA;had no identifiable function. The games would operate on the&#xA;original Genesis console even if the code segment was removed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(Accolade instructed their developers to include this initialization&#xA;code in all their games, too, though at the time they didn't know the&#xA;purpose of it, and all their ran fine on the Genesis III except for&#xA;one, &lt;em&gt;Onslaught&lt;/em&gt;, where the developer didn't do this right.)&lt;/p&gt;&#xA;&lt;p&gt;While this is in Taiwan solving a much more serious problem than&#xA;unlicensed cartridges from other software developers—copyright&#xA;couldn't protect direct copies of the vendors' original games—SEGA at&#xA;least admitted that this was intended to be used in the U.S. as well&#xA;(see above), where it wasn't necessary to protect Sega's first-party&#xA;game cartridges as they were already well protected by copyright.&lt;/p&gt;&#xA;&lt;p&gt;Nintendo had to deal with the same IP issues for home video game&#xA;consoles as Sega did, and had possibly been dealing with them for&#xA;longer. The NES, released in 1985 (three years before the Genesis) had&#xA;already implemented technical measures to prevent use of unlicensed&#xA;cartridges, probably due to bad experience with the lack of a lockout&#xA;system in the Famicom.&lt;/p&gt;&#xA;&lt;p&gt;Nintendo's lawyers and managers were doubtless as smart and competent&#xA;as Sega's, so it's no surprise that they might come up with a similar&#xA;solution to the problem. Nintendo's solution might even be legally&#xA;slightly stronger than Sega's solution because rather than just a&#xA;short code (&lt;code&gt;SEGA&lt;/code&gt;) in the cartridge triggering trademark display, the&#xA;actual trademarked image was in the cartridge.&lt;/p&gt;&#xA;&lt;h3&gt;Actual Effectiveness of the Measure&lt;/h3&gt;&#xA;&lt;p&gt;It would be interesting to know if this was ever tested in Taiwanese&#xA;courts. A few years later Sega &lt;a href=&quot;https://en.wikipedia.org/wiki/Sega_v._Accolade&quot; rel=&quot;noreferrer&quot;&gt;sued an infringer&lt;/a&gt; in the United&#xA;States where this was brought up as part of the case, but on appeal it&#xA;was found allowable for third parties to trigger the trademark display&#xA;where necessary for compatibility &lt;a href=&quot;https://openjurist.org/977/f2d/1510&quot; rel=&quot;noreferrer&quot;&gt;¶1&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The question is whether the computer manufacturer may enjoin&#xA;competing cartridge manufacturers from gaining access to its&#xA;computers through the use of the code on the ground that such use&#xA;will result in the display of a &amp;quot;false&amp;quot; trademark. Again, our&#xA;holding is based on the public policies underlying the statute. We&#xA;hold that when there is no other method of access to the computer&#xA;that is known or readily available to rival cartridge manufacturers,&#xA;the use of the initialization code by a rival does not violate the&#xA;[Lanham Trademark] Act even though that use triggers a misleading&#xA;trademark display.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The more detailed reasoning given in ¶73 et seq. makes it &lt;em&gt;really&lt;/em&gt;&#xA;clear that it's Sega's fault the trademark was displayed when&#xA;Accolade's game was started and it was entirely on Sega to fix this.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Because the TMSS has the effect of regulating access to the Genesis&#xA;III console, and because there is no indication in the record of any&#xA;public or industry awareness of any feasible alternate method of&#xA;gaining access to the Genesis III, we hold that Sega is primarily&#xA;responsible for any resultant confusion.&lt;/p&gt;&#xA;&lt;p&gt;...while it may not have been Sega's ultimate goal to mislabel&#xA;Accolade's products, the record is clear that the false labeling was&#xA;the result of a deliberate decision on the part of Sega to include&#xA;in the Genesis III a device which would both limit general access&#xA;and cause false labeling. [This] compels us to place primary&#xA;responsibility for consumer confusion squarely on Sega.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is a slightly different situation from the Nintendo Game Boy one,&#xA;since, as noted above, the Game Boy carts must actually &lt;em&gt;contain&lt;/em&gt; the&#xA;trademark, rather than just &lt;em&gt;triggering&lt;/em&gt; display of it. But the&#xA;principle seems to me to hold: the actual display of the trademark is&#xA;done by Nintendo code, having the correct material on the cartridge to&#xA;trigger that is necessary for the game to play, and were it not for&#xA;Nintendo's code the end user wouldn't be seeing Nintendo's trademark.&lt;/p&gt;&#xA;&lt;p&gt;As a side note, Accolade had also needed to disassemble and&#xA;reverse-engineer Sega games to figure out how to overcomes TMSS, and&#xA;this involved making (internal) copies of the code. This was found to&#xA;be legal as a fair use when no other means could serve to understand&#xA;the (non-copyrightable) functionality of the program (&lt;a href=&quot;https://openjurist.org/977/f2d/1510&quot; rel=&quot;noreferrer&quot;&gt;¶31 et seq.,&#xA;ibid.&lt;/a&gt;), consistent with the earlier &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_Games_Corp._v._Nintendo_of_America_Inc.&quot; rel=&quot;noreferrer&quot;&gt;Atari Games Corp. v.&#xA;Nintendo of America Inc&lt;/a&gt; suit. (Atari lost that one not because&#xA;of their reverse-engineering, but because of copyright violations due&#xA;to also copying original Nintendo source code.)&lt;/p&gt;&#xA;&lt;p&gt;This and various other comments in the decision make it pretty clear&#xA;that the judge felt (at that point in time) that it was perfectly&#xA;legal to do whatever you needed to do to make your software run on any&#xA;computer you liked. Ah; the good old days; new legislation would&#xA;change that before the end of the decade.&lt;/p&gt;&#xA;&lt;h3&gt;Current Day&lt;/h3&gt;&#xA;&lt;p&gt;All this is probably purely historical now.&lt;/p&gt;&#xA;&lt;p&gt;The above decision regarding use of trademarks when required to run&#xA;software on a computer probably no longer holds in this age of the&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act&quot; rel=&quot;noreferrer&quot;&gt;DMCA&lt;/a&gt; where that check would be argued to be an &lt;a href=&quot;https://en.wikipedia.org/wiki/Anti-circumvention&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;effective&#xA;technological measure&amp;quot;&lt;/a&gt; restricting use of the computer.&lt;/p&gt;&#xA;&lt;p&gt;Taiwan (as &amp;quot;Chinese Taipei&amp;quot;) became a signatory to the Berne&#xA;convention on 2002-01-01.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-23T05:00:36.630" CommentCount="21" ContentLicense="CC BY-SA 4.0" />
  <row Id="11786" PostTypeId="1" AcceptedAnswerId="11789" CreationDate="2019-07-23T06:31:39.997" Score="2" ViewCount="317" Body="&lt;p&gt;I bought an Apple IIgs recently. I didn't do my research well enough and wound up with an M1297 monitor, which of course appears to only be compatible with Macintosh IIs and such, rather than the A2M6014 I needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could simply resell it as it works perfectly AFAICT, but that's a shipping hassle I'd rather avoid if possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any 8 or 16-bit systems that could work with this monitor? Adapters and cables are fine if necessary even if they degrade the signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My research so far; if any of this is incorrect please let me know:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;C64 / Atari 8-bit: not a chance&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Atari ST: this appears like it might be vaguely possible for lower resolutions (same refresh rate horizontally if I'm reading things right) though the monitor port on the ST has a bizarre pin arrangement&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Amiga: again, maybe, due to refresh rate&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Sharp X68000: don't know much about this one &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Obviously I could just get a Macintosh II or equivalent but I'd rather get a couple of the machines before that, if ever. I assume I'm correct on the C64 being completely incompatible even with a potential adapter, which is a shame as I have a C64 sitting around with no monitor.&lt;/p&gt;&#xA;" OwnerUserId="14725" LastActivityDate="2019-07-23T18:32:54.107" Title="Non-obvious compatibility of M1297 monitor" Tags="&lt;apple-macintosh&gt;&lt;crt-monitor&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11787" PostTypeId="2" ParentId="11776" CreationDate="2019-07-23T06:51:11.197" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;from digital to analog, then back to digital?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simple answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;It didn't go &quot;back&quot; to digital.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the EGA and the HDMI signal are both &quot;digital&quot; and the VGA signal is &quot;analogue&quot;, the (digital) EGA signal is quite similar to the (analogue) VGA signal but it is &lt;em&gt;completely&lt;/em&gt; different from the (digital) HDMI signal:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both in a VGA and in an EGA signal the voltages of electrical signals &lt;em&gt;directly&lt;/em&gt; reflect the color which is displayed at the position where the three electron beams of a CRT tube monitor &lt;em&gt;currently&lt;/em&gt; points to.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;EGA uses 6 digital signals for the color, two for each electron beam&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that 2^6 = 64 different colors are possible&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CGA uses 4 digital signals for the color&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that 2^4 = 16 different colors are possible&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;VGA uses 3 analogue signals, one for each electron beam&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;HDMI uses 4 digital signals. If HDMI worked like EGA, 16 colors would be possible using 4 digital signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, HDMI works completely differently:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The voltages of the four signals measured at a certain time do not directly reflect the color of a certain pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, the HDMI signal is more comparable to an Ethernet signal while you are streaming a video over the network: Data bits of a video file are transferred over the HDMI wire and some electronics in the monitor will perform the video file decoding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The analogue &quot;composite video&quot; signal (for TV sets) works differently than all of the signal types I described above.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did computer video outputs go from digital to analog&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In the 1980s, both analogue and &quot;EGA-like&quot; digital signals were used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, around 1990 higher color resolutions became standard. For 256 colors we would require 8 wires in a &quot;EGA-like&quot; digital signal; and for 16M colors we would require 24 wires. And of course we would need to change the monitor because a &quot;256-color monitor&quot; has only 8 input wires...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A VGA signal requires only 3 wires; and because a VGA monitor has an analogue input, it is theoretically able to display any color depth, so we don't have to change the monitor when changing from 256 to 16M colors.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... then ... to digital?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;With higher resolutions &quot;VGA-like&quot; signals will have problems. Just one example: The frequencies of the signals rise and you will have signal crosstalk between the wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using an &quot;Ethernet-like&quot; signal (such as HDMI) was the solution for these problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early 1990s such a technology would have been very expensive (unless it should only support a very low video resolution). For this reason nobody was thinking about such a technology.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="3316" LastEditDate="2020-02-06T06:20:37.177" LastActivityDate="2020-02-06T06:20:37.177" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="11789" PostTypeId="2" ParentId="11786" CreationDate="2019-07-23T08:16:10.383" Score="2" Body="&lt;p&gt;While the IIgs video and Mac video both decent from the Apple III video (connector) and even look superficial the same, the most important difference is how sync signals are handled. Where the Mac handles each sync signal seperate, the IIgs interface imposed sync on the colour signals. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Pin IIgs signal                          Mac Signal&#xA;  1 Signal ground (Red)                  Signal ground (Red)&#xA;  2 Analog RED with sync                 Analog RED&#xA;  3 Composite sync                       CSYNC&#xA;  4 No connection                        Monitor sense 0&#xA;  5 Analog GREEN with sync               Analog GREEN&#xA;  6 Signal ground (Green)                Signal ground (Green)&#xA;  7 -5 volts DC                          Monitor sense 1&#xA;  8 +12 volts DC                         No connection&#xA;  9 Analog BLUE with sync                Analog BLUE&#xA; 10 No connection                        Monitor sense 2&#xA; 11 Sound                                Signal ground (CSYNC/VSYNC)&#xA; 12 NTSC/composite color out             VSYNC&#xA; 13 Signal ground (Blue)                 Signal ground (Blue) &#xA; 14 No connection                        HSYNC ground&#xA; 15 No connection                        HSYNC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Are there any 8 or 16-bit systems that could work with this monitor? Adapters and cables are fine if necessary even if they degrade the signal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Then many are possible in theory. In reality it's not just signal adaption, but as well frame design. Looking at the &lt;a href=&quot;https://lowendmac.com/1987/13-applecolor-high-resolution-monitor/&quot; rel=&quot;nofollow noreferrer&quot;&gt;monitor's specs&lt;/a&gt; may help to decide. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most simple would be a VGA adaptor, which just needs to swap some lines. Of course you would need to only used modes fitting the frame timing. There are many descriptions out there, so pick your favorite :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;C64 / Atari 8-bit: not a chance&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure it's possible, but beside signal line twisting, some additional components might be needed.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Atari ST: this appears like it might be vaguely possible for lower resolutions (same refresh rate horizontally if I'm reading things right) though the monitor port on the ST has a bizarre pin arrangement&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again, just a pinout swap needed - much like ith VGA.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Amiga: again, maybe, due to refresh rate&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Same as Atari.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Sharp X68000: don't know much about this one&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Before thinking here, get one first .. they are somewhat rare outside Japan :)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Obviously I could just get a Macintosh II or equivalent&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Obviously you should. Best would be a Mac LC475 (family member) as not only the screen fits, but it's as well the best option for classic 68h Macs. But best of all, you could plug in a &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_IIe_Card&quot; rel=&quot;nofollow noreferrer&quot;&gt;IIe card&lt;/a&gt; and have both worlds in one machine.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I assume I'm correct on the C64 being completely incompatible even with a potential adapter, which is a shame as I have a C64 sitting around with no monitor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As said before, it would work, but only as B&amp;amp;W and with additional effort beyond a simple cable. Considering you seam to want a compact setup, I wouldn't do it, but rather look for one of these cheap Chinese converters able to input S-Video (C64, Atari 800), composite (TI 99/4A) or VGA and output VGA which in turn can be applied to this screen - or a new HDMI based. They are the most versatile solution for old/home computer video.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-23T09:34:42.887" LastActivityDate="2019-07-23T09:34:42.887" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11791" PostTypeId="2" ParentId="11765" CreationDate="2019-07-23T08:49:02.877" Score="10" Body="&lt;p&gt;All the answers above have concentrated on outgoing calls but modems also took incoming calls and, because phone lines were expensive, it was unusual to have multiple lines for fax, data, and voice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore the modem was usually installed in-line with the phone (i.e. the circuit came into the modem, and then continued onward to the handset).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually a modem would be set to answer after a set number of rings, allowing time for a human to pick up the phone.  Moreover, the modem could be set to answer in quiet mode and not do negotiation until it heard a remote modem, so as not to fry the ears of a voice caller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, the speaker was very useful, as the caller would hear the cessation of ring-tone as the call was answered but no sound.  They'd usually go &quot;hello&quot; or similar, and you could then pickup the handset and talk as usual.&lt;/p&gt;&#xA;" OwnerUserId="14729" LastActivityDate="2019-07-23T08:49:02.877" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11793" PostTypeId="2" ParentId="11761" CreationDate="2019-07-23T14:52:43.907" Score="4" Body="&lt;p&gt;No. This was no more than an expected user error at the time. In fact some versions of the Master System (and I believe the Genesis) had an inbuilt game that would launch when you power on the console without a game inserted, and the GBA initiated a network reciever (for simgle-cart multiplayer games).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way a console would typically boot up, it would try to reach out for a ROM on the cart. If it couldn't find that, it would simply hang.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There &lt;em&gt;was&lt;/em&gt; a risk of damage if you didn't leave a game in a cartridge-based system that didn't have a cartridge slot cover, due to dust build-up.&lt;/p&gt;&#xA;" OwnerUserId="11037" LastActivityDate="2019-07-23T14:52:43.907" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11794" PostTypeId="1" CreationDate="2019-07-23T16:05:18.660" Score="9" ViewCount="288" Body="&lt;p&gt;Looking over old BASICs I find two general approaches to handling string variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HP/Wang/Atari/et al used C-like array-of-char whose memory size is specified with a &lt;code&gt;DIM&lt;/code&gt; statement, with the upside of no heap management and the downside of always using the dimensioned amount of memory even for a string of length 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DEC/Microsoft used a heap of strings that did vary in length, but sometimes required periodic garbage collection runs to collect space again. BBC BASIC IIRC worked the same but didn't bother with the GC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems one could use a fixed-size heap with fragments of, say 8-bytes, which would help GC at the cost of an extra byte per string (pointer to index for next fragment) and some wasted space (0&gt;=x&amp;lt;8)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any other approaches used in classic BASICs?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="75" LastEditDate="2019-07-23T20:21:13.660" LastActivityDate="2019-07-23T22:15:39.313" Title="String libraries for BASIC" Tags="&lt;basic&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11795" PostTypeId="2" ParentId="11794" CreationDate="2019-07-23T16:16:41.280" Score="5" Body="&lt;p&gt;I don't know which of these variable length strings are used in Basic, but mainly there are several ways to implement variable arrays (maybe the list is incomplete);&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;As you mention: pointer to the next fragment; or actually, it denotes the length of the string (i.e. the number of characters following)&lt;/li&gt;&#xA;&lt;li&gt;Same like 1, but the first byte contains the length including the first byte (so the same as one, but the first byte is 1 higher)&lt;/li&gt;&#xA;&lt;li&gt;More common in C variable strings: Starting with the characters, and and end-of-string delimiter of a 0 (\0) byte. In the ZX80 the &quot; was used as end-of-string (see quote below). &lt;/li&gt;&#xA;&lt;li&gt;The high order bit as end of string flag (see second quote, TinyBasic).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;ZX80&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I could find one fragment about ZX80 Basic, which uses the &quot; character as string delimiter, see &lt;a href=&quot;https://en.wikipedia.org/wiki/String_(computer_science)&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiki/String_(computer_science)&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Using a special byte other than null for terminating strings has&#xA;  historically appeared in both hardware and software, though sometimes&#xA;  with a value that was also a printing character. $ was used by many&#xA;  assembler systems, : used by CDC systems (this character had a value&#xA;  of zero), and the ZX80 used &quot;[3] since this was the string delimiter&#xA;  in its BASIC language.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Somewhat similar, &quot;data processing&quot; machines like the IBM 1401 used a&#xA;  special word mark bit to delimit strings at the left, where the&#xA;  operation would start at the right. This bit had to be clear in all&#xA;  other parts of the string. This meant that, while the IBM 1401 had a&#xA;  seven-bit word, almost no-one ever thought to use this as a feature,&#xA;  and override the assignment of the seventh bit to (for example) handle&#xA;  ASCII codes.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Early microcomputer software relied upon the fact that ASCII codes do&#xA;  not use the high-order bit, and set it to indicate the end of a&#xA;  string. It must be reset to 0 prior to output.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TINY BASIC&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://www.ittybittycomputers.com/IttyBitty/TinyBasic/DDJ1/Design.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;TinyBasic Design&lt;/a&gt;, chapter Encoding partly:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In a number of places we have to indicate the end of a string of characters (or else we have to provide for its length somewhere). Commonly, one uses a special character (NUL = OOH for example) to indicate the end. This costs one byte per string but is easy to check. A better way depends upon the fact that ASCII code does not use the high order bit; normally it is used for parity on transmission. We can use it to indicate the end (that is, last character) of a string. When we process the characters we must AND the character with 07FH to scrub off the flag bit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7037" LastEditorUserId="7037" LastEditDate="2019-07-23T22:15:39.313" LastActivityDate="2019-07-23T22:15:39.313" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11796" PostTypeId="2" ParentId="481" CreationDate="2019-07-23T17:20:01.043" Score="-2" Body="&lt;p&gt;I was playing sometime in the past and I'm very satisfied with the &lt;a href=&quot;https://www.retroarch.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RetroArch&lt;/a&gt; Emu.&lt;/p&gt;&#xA;" OwnerUserId="14744" LastEditorUserId="278" LastEditDate="2019-07-23T19:04:42.707" LastActivityDate="2019-07-23T19:04:42.707" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11797" PostTypeId="1" AcceptedAnswerId="11809" CreationDate="2019-07-23T18:06:25.577" Score="2" ViewCount="361" Body="&lt;p&gt;I want to have my computer listen to messages between my Nintendo GameCube and a controller. (This is just for fun, not for streaming or anything.) I've spliced into the cable &lt;a href=&quot;https://docs.google.com/document/d/1ey-dRKVuAoKPt6--xVhUP7oPxb-2LLty6hI0Fe16Piw/mobilebasic&quot; rel=&quot;nofollow noreferrer&quot;&gt;as described here&lt;/a&gt; in order to use &lt;a href=&quot;https://github.com/jaburns/NintendoSpy&quot; rel=&quot;nofollow noreferrer&quot;&gt;NintendoSpy&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, most people do this by using arduinos and I am not willing to spend any money on this project. I am trying to use a Sparkfun Photon Redboard as the arduino with spliced extension cables and nintendospy, but it won't work, and I am 90% sure I have the correct wire colors plugged in to digital ports (for the data wire) and ground. NintendoSpy opens on COM8 (the port which the board is plugged into) but nothing pops up, even with the Gamecube on. Since the photon red board is very similar to an arduino I am not sure why it won’t work. Any help is appreciated &lt;/p&gt;&#xA;" OwnerUserId="14747" LastEditorUserId="7208" LastEditDate="2019-07-24T02:54:09.350" LastActivityDate="2019-07-24T12:25:01.793" Title="Connecting Computer to GameCube Controller Port" Tags="&lt;nintendo&gt;&lt;game-consoles&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11798" PostTypeId="2" ParentId="11786" CreationDate="2019-07-23T18:15:49.253" Score="0" Body="&lt;p&gt;While the M1297 is an excellent quality Trinitron CRT, it will be quite difficult to use it with anything other than the various color Macintosh systems for which it was designed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;main&lt;/strong&gt; issue is that it's the wrong input format for the 8-bit systems you mention (RGB vs. composite or S-video), and its the wrong horizontal sync frequency for the 16-bit systems you mention (not 15.7 kHz capable). Not to mention dealing with the 15-pin DSub connector, only common on Apple color Macs and (in modified form) IIgs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a quality Trinitron CRT that supports those systems, you should look at the Sony PVM series. They normally have inputs for RGB, CGA, S-Video, and Composite and they are designed for the 15.7 kHz horizontal frequency used by all those systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a Sony PVM-1342 which I have used as a CRT with:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Apple IIgs (RGB)&lt;/li&gt;&#xA;&lt;li&gt;Apple II/Plus/IIe/IIc (Composite)&lt;/li&gt;&#xA;&lt;li&gt;C64 (S-Video)&lt;/li&gt;&#xA;&lt;li&gt;C128 (40 column S-Video and 80 column RGBI)&lt;/li&gt;&#xA;&lt;li&gt;Atari 800 (S-video)&lt;/li&gt;&#xA;&lt;li&gt;Amiga (RGB)&lt;/li&gt;&#xA;&lt;li&gt;BBC Micro (RGB)&lt;/li&gt;&#xA;&lt;li&gt;Sega Genesis (RGB)&lt;/li&gt;&#xA;&lt;li&gt;PC clones with CGA/Tandy (RGBI)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All the above are a simple matter of the correct cable for me, &lt;strong&gt;except&lt;/strong&gt; for the Apple IIgs. For RGB output, I usually go from native port to SCART, then from SCART to BNC connectors on the PVM. So, it is actually two cables where the first is system-specific and the second is common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the IIgs, I  install a jumper on the bottom of the motherboard to move the Composite Sync signal to the pin that is expected by the common 15-pin DSub to HD15 (e.g. VGA style) dongles used on Macs. Then, I use my normal HD15 to BNC cable to go from the dongle to the BNC connectors on the Sony PVM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nothing I've found beats a Trinitron CRT for any of these retro systems, if you want an authentic CRT display, vice using scan converters and LCD displays.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-07-23T18:32:54.107" LastActivityDate="2019-07-23T18:32:54.107" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11800" PostTypeId="1" AcceptedAnswerId="11803" CreationDate="2019-07-23T20:16:25.107" Score="5" ViewCount="946" Body="&lt;p&gt;In Windows 3.X we had multiple type of error dialogs that could be displayed:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Application crash:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3OkKm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3OkKm.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Application error that could be recovered:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20150717-00/?p=90881&quot; rel=&quot;nofollow noreferrer&quot;&gt;What did the Ignore button do in Windows 3.1 when an application encountered a general protection fault?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FtktK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FtktK.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;System error (by the lack of a better name):&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;(simulated by pressing &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;Del&lt;/kbd&gt;)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ECsWM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ECsWM.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Were text mode errors more severe than graphical mode errors ?&lt;/p&gt;&#xA;&lt;p&gt;Or was the type error dialog being shown not related to its severity level at all?&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-10-11T08:54:02.173" Title="What determined the type of error dialog being shown in Windows 3.1?" Tags="&lt;windows-3.x&gt;" AnswerCount="5" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11801" PostTypeId="1" AcceptedAnswerId="11812" CreationDate="2019-07-23T20:42:12.827" Score="53" ViewCount="11493" Body="&lt;p&gt;Was there some particular design theory or constraint that made a 36 bit word size attractive for early computers?  As opposed to the various power-of-2 word sizes which seem to have won out?&lt;/p&gt;&#xA;" OwnerUserId="7551" LastEditorUserId="7551" LastEditDate="2019-07-24T04:22:30.740" LastActivityDate="2021-04-19T18:20:57.473" Title="What was the rationale behind 36 bit computer architectures?" Tags="&lt;architecture&gt;" AnswerCount="8" CommentCount="7" FavoriteCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11802" PostTypeId="1" AcceptedAnswerId="11808" CreationDate="2019-07-23T20:43:53.117" Score="2" ViewCount="318" Body="&lt;p&gt;From &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Wiki&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The final major release of BASIC-80 was version 5.x, which appeared in&#xA;  1981 and added support for 40-character variable names, WHILE...WEND&#xA;  loops, dynamic string allocation, and several other features. BASIC&#xA;  5.x removed the ability to crunch program lines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm only familiar with the 6502 code for MS BASIC, which had the two-char name limit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know how they implemented long names? Did they simply expand the variable table? Did they separate the names to their own list? Use the 2 bytes to point to the string in the source?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2019-07-24T14:13:51.597" LastActivityDate="2019-07-24T17:51:49.143" Title="Long variable names in MS BASIC" Tags="&lt;microsoft-basic&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11803" PostTypeId="2" ParentId="11800" CreationDate="2019-07-23T21:04:46.893" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Were text mode errors more severe than graphical mode errors ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's not so much about the severity, but if the system was able to handle it in context of a user processes or not. Some of them (like your example) have been handled in later versions in a more beautiful way, but the topic stays.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or was the type error dialog being shown not related to its severity level at all?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;More indirect, as severe errors are often errors not really related to a certain application but the core system - thus usually resulting in a blue screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Blue screens also differ not only in their source, but also by operating different than any message box. When a blue screen is displaye, the whole system is halted. This is important so no process may change the sate or continue harmful action.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When message boxes are displayed, basic OS operation and background processes are not halted. All they can do is halting UI interaction by being application or system global, thus preventing any user input for an application or the system at all  - except for the message box that is.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-07-23T21:04:46.893" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11804" PostTypeId="2" ParentId="11800" CreationDate="2019-07-23T21:32:00.117" Score="3" Body="&lt;p&gt;A General Protection Fault means the application tried to access memory that was not allocated to it. It's a user mode crash. The OS can recover from this by halting the application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A bluescreen is a kernel mode crash. Something in the kernel itself (often a driver) or faulty hardware did something wrong in a way from which the OS cannot recover. Of the two types of crashes, this is the most severe.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2019-07-23T21:32:00.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11805" PostTypeId="2" ParentId="11801" CreationDate="2019-07-23T21:48:40.840" Score="16" Body="&lt;p&gt;Wiki page &lt;a href=&quot;https://en.wikipedia.org/wiki/36-bit&quot; rel=&quot;noreferrer&quot;&gt;36-bit&lt;/a&gt; shows some reasons (all copied from the page):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&quot;This was long enough to represent positive and negative integers to an accuracy of ten decimal digits (35 bits would have been the minimum).  It also allowed the storage of six alphanumeric characters encoded in a six-bit character code. &quot;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And for characters:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;six 5.32-bit DEC Radix-50 characters, plus four spare bits&lt;/li&gt;&#xA;&lt;li&gt;six 6-bit Fieldata or IBM BCD characters (ubiquitous in early usage)&lt;/li&gt;&#xA;&lt;li&gt;six 6-bit ASCII characters, supporting the upper-case unaccented letters, digits, space, and most ASCII punctuation characters. It was used on the PDP-6 and PDP-10 under the name sixbit.&lt;/li&gt;&#xA;&lt;li&gt;five 7-bit characters and 1 unused bit (the usual PDP-6/10 convention, called five- seven ASCII)&lt;a href=&quot;https://en.wikipedia.org/wiki/36-bit&quot; rel=&quot;noreferrer&quot;&gt;1&lt;/a&gt;[2]&lt;/li&gt;&#xA;&lt;li&gt;four 8-bit characters (7-bit ASCII plus 1 spare bit, or 8-bit EBCDIC), plus four spare bits&lt;/li&gt;&#xA;&lt;li&gt;four 9-bit characters&lt;a href=&quot;https://en.wikipedia.org/wiki/36-bit&quot; rel=&quot;noreferrer&quot;&gt;1&lt;/a&gt;[2] (the Multics convention).&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7037" LastActivityDate="2019-07-23T21:48:40.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11806" PostTypeId="2" ParentId="11801" CreationDate="2019-07-23T21:49:05.670" Score="25" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;36 bit word size attractive&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Many sizes have been tried, but fundamentally, this results in a certain precision; from &lt;a href=&quot;https://en.wikipedia.org/wiki/36-bit&quot; rel=&quot;noreferrer&quot;&gt;Wikpedia on 36-bit&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;Early binary computers aimed at the same market therefore often used a 36-bit word length. This was long enough to represent positive and negative integers to an accuracy of ten decimal digits (35 bits would have been the minimum). It also allowed the storage of six alphanumeric characters encoded in a six-bit character code. &lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As opposed to the various power-of-2 word sizes?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It is lack of requirement to conform to pre-existing specifications, for example, no internet, even simple disc files were not easily shared between computers back in those days.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastActivityDate="2019-07-23T21:49:05.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11807" PostTypeId="2" ParentId="11801" CreationDate="2019-07-24T00:01:54.063" Score="68" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Was there some particular design theory or constraint that made a 36 bit word size attractive for early computers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Beside integer arithmetic, 36 bit words work quite fine with two different byte sizes: Six and nine. Six bit was what's needed to store characters of the standard code for data transmission at that time: Baudot code or more exactly &lt;a href=&quot;https://en.wikipedia.org/wiki/Baudot_code#ITA2&quot; rel=&quot;nofollow noreferrer&quot;&gt;ITA2&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As opposed to the various power-of-2 word sizes?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is no inherent benefit of power of two word sizes. Any number can do.&lt;/p&gt;&#xA;&lt;p&gt;Even more, there were no 'various power-of-two sizes' in the early and not so early days. Before the IBM/360 settled for a 32 Bit word size and four 8 bit bytes within a word and two nibble in a byte, power-of-two word sizes were an extreme exception (can't come up with any beside SAGE and IBM Stretch). &lt;strong&gt;The vast majority used word sizes divisable by 3, not least to allow the use of octal representation.&lt;/strong&gt; Before the IBM /360 with its 8 bit bytes, octal was as common to computer scientists as hex today - heck, Unix carries this legacy until today, making everyone learn octal at a time when hex is the generally accepted way to display binary data.&lt;/p&gt;&#xA;&lt;p&gt;Now, the reason why Amdahl did choose 8 bit bytes is rather simple: A byte size chosen had to be at least 6 bit to store a character, eventually 7 for the upcoming ASCII, but 8 would give the ability to store two BCD digits within. Any larger byte size would again waste storage with this important element. Operating in BCD was one main requirement for the /360 design, as it was meant to not only be compatible to, but as well replace all prior decimal machinery.&lt;/p&gt;&#xA;&lt;p&gt;What seems today as 'natural' use of power of two is just a side effect from being able to handle decimal by a binary computer.&lt;/p&gt;&#xA;&lt;p&gt;Conclusion: As so often in computing the answer is IBM /360 and the rest is history :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="5199" LastEditDate="2021-04-19T18:20:57.473" LastActivityDate="2021-04-19T18:20:57.473" CommentCount="23" ContentLicense="CC BY-SA 4.0" />
  <row Id="11808" PostTypeId="2" ParentId="11802" CreationDate="2019-07-24T02:08:51.157" Score="4" Body="&lt;p&gt;They expanded the variable table. Each entry starts with a type byte&#xA;followed immediately by the full variable name.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is based on an analysis of the Microsoft BASIC-80 5.2 source code&#xA;&lt;a href=&quot;https://winworldpc.com/download/c2bfc380-c2b2-c2b4-7d00-11c3a7c29d25&quot; rel=&quot;nofollow noreferrer&quot;&gt;found here&lt;/a&gt;. The core of the interpreter is &lt;code&gt;BINTRP.MAC&lt;/code&gt;,&#xA;which has most of the definitions used here. This includes &lt;code&gt;NAMCNT&lt;/code&gt;&#xA;(one byte) and &lt;code&gt;NAMBUF&lt;/code&gt; (&lt;code&gt;NAMLEN - 2&lt;/code&gt; bytes), which are pre-allocated&#xA;storage for a copy of a variable name read from the program text, and&#xA;&lt;code&gt;VARTAB&lt;/code&gt;, a pointer to the start of the area (immediately after the&#xA;program text, I believe) that stores the current list of variable&#xA;names and values when running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The routine I looked at was &lt;code&gt;PTRGET&lt;/code&gt; in &lt;code&gt;BIPTRG.MAC&lt;/code&gt;, which reads a&#xA;variable name at the current text position pointed to by &lt;code&gt;HL&lt;/code&gt; and&#xA;stores a pointer to its value in the location pointed to by &lt;code&gt;DE&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The core of the variable name search is &lt;code&gt;LOPTOP&lt;/code&gt;, which is entered with&#xA;&lt;code&gt;BC&lt;/code&gt; containing the first two chars of the variable name, &lt;code&gt;DE&lt;/code&gt; pointing&#xA;into &lt;code&gt;VARTAB&lt;/code&gt; and storage &lt;code&gt;NAMCNT&lt;/code&gt; and &lt;code&gt;NAMBUF&lt;/code&gt; containing the name length&#xA;count and chars beyond the first two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;LOPTOP&lt;/code&gt; compares the first char of the variable name (in &lt;code&gt;C&lt;/code&gt;) with&#xA;the first char of the name in &lt;code&gt;VARTAB&lt;/code&gt;, then compares the variable&#xA;type, then the second char of the name (in &lt;code&gt;D&lt;/code&gt;). I'm guessing that&#xA;this was the original full comparision routine in earlier versions of&#xA;BASIC. If all of these match, it continues on with &lt;code&gt;FINPTR&lt;/code&gt;, which&#xA;compares the remaining name chars in &lt;code&gt;NAMBUF&lt;/code&gt; with the rest of the&#xA;name in &lt;code&gt;VARTAB&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Postscript:&lt;/em&gt; I've found &lt;a href=&quot;http://altairbasic.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a disassembly of Altair Basic 3.2&lt;/a&gt;.&#xA;The symbol names are different for obvious reasons, but its routine&#xA;[&lt;code&gt;GetVar&lt;/code&gt;] is clearly the &lt;code&gt;PTRGET&lt;/code&gt; routine above. The start of it is&#xA;almost identical, the main differences being that &quot;read next char&quot; is&#xA;a routine called with &lt;code&gt;RST&lt;/code&gt; rather than a &lt;code&gt;MOV C,M&lt;/code&gt; and that the first&#xA;and second characters are in &lt;code&gt;B&lt;/code&gt; and &lt;code&gt;C&lt;/code&gt; rather than vice versa. There&#xA;are larger differences in the specific code for &lt;code&gt;LOPTOP&lt;/code&gt; (called&#xA;&lt;code&gt;FindVarLoop&lt;/code&gt; in the disassembly), some related to the &lt;a href=&quot;http://altairbasic.org/int_ex.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;simplified&#xA;variable storage&lt;/a&gt; (here called &lt;code&gt;VAR_BASE&lt;/code&gt;), but the&#xA;overall structure is clearly the same. The &lt;a href=&quot;http://altairbasic.org/int_ex.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;memory arrangement&#xA;overview&lt;/a&gt; is helpful reading before diving into either&#xA;this or the 5.2 source code.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-24T17:51:49.143" LastActivityDate="2019-07-24T17:51:49.143" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11809" PostTypeId="2" ParentId="11797" CreationDate="2019-07-24T03:17:12.857" Score="3" Body="&lt;p&gt;There are actually two software programs involved here: NintendoSpy running on your computer and a program that must run on the Arduino. The program running on the Arduino reads data from the spliced game controller cable and communicates with NintendoSpy on the PC to tell it what it saw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm guessing that NintendoSpy has contained in it a version of this program compiled for an ATMega328 CPU, uploads it to the Arduino device when it's first connected to it via the COM port, and then starts it. After that NintendoSpy would talk with the running program as above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, your RedBoard, though the same physical shape as an Arduino, is otherwise &lt;a href=&quot;https://learn.sparkfun.com/tutorials/photon-redboard-hookup-guide#arduino-shield-incompatibility&quot; rel=&quot;nofollow noreferrer&quot;&gt;vastly different&lt;/a&gt;. The voltage levels are different, which means that you probably shouldn't connect it to the Nintendo controller cable without using a voltage converter (or you may damage your board), it has a completely different CPU (ARM Cortex M3 instead of ATMega328) and it doesn't even appear to use the standard Arduino protocols for uploading software to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, your board is a certain physical shape so that it can use a few Arduino peripherals, but otherwise it seems not to be an Arduino. It's like a computer with IBM PC-shaped slots that is otherwise completely different from an IBM PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to use this board you would probably need to:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Modify the Arduino part of NintendoSpy code (under the &lt;a href=&quot;https://github.com/jaburns/NintendoSpy/blob/master/firmware/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;firmware/&lt;/code&gt;&lt;/a&gt; directory) to run on your board. Since your board doesn't appear to be supported by the Arduino IDE, this could be a very large project.&lt;/li&gt;&#xA;&lt;li&gt;Build a new version of NintendoSpy that would upload your modified code to your board; since the communications protocols seem to be different this could also be a huge project. Alternatively, modify NintendoSpy so that it doesn't do the upload but instead assumes the board software is already running, and do the upload and start the software yourself before asking NintendoSpy to connect.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you want to pursue this route, the &lt;a href=&quot;https://arduino.stackexchange.com/&quot;&gt;Arduino StackExchange&lt;/a&gt; is probably a good place to post questions related to this. But given its difficulty, it seems worthwhile to spend the $10-15 just to buy an Arduino Uno clone to run this. You may also be able to use a cheaper Micro or Nano ($5-10, or even less), though if those are not directly supported by NintendoSpy you may have to tweak the firmware program just slightly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if you do switch to an Arduino, the Adruino StackExchange is still probably better than here to post about difficulties connecting NintendoSpy to the Arduino itself, since they will know more about Arduino/PC connectivity. Once you've got NintendoSpy talking to the Arduino and have the cable pins plugged into the right sockets, questions about the actual game controller protocol would be appropriate here.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-24T12:25:01.793" LastActivityDate="2019-07-24T12:25:01.793" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11810" PostTypeId="2" ParentId="11801" CreationDate="2019-07-24T03:24:45.623" Score="21" Body="&lt;p&gt;The key point &lt;a href=&quot;https://en.wikipedia.org/wiki/36-bit&quot; rel=&quot;noreferrer&quot;&gt;made by Wikipedia&lt;/a&gt; seems to be:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Prior to the introduction of computers, the state of the art in precision scientific and engineering calculation was the ten-digit, electrically powered, mechanical calculator....Computers, as the new competitor, had to match that accuracy....&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Many early computers did this by storing decimal digits. But when switching to binary:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Early binary computers aimed at the same market therefore often used a 36-bit word length. This was long enough to represent positive and negative integers to an accuracy of ten decimal digits (35 bits would have been the minimum).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;35 bits is obviously a slightly more awkward size than 36 bits anyway, but there are other reasons to choose it if your minimium size is 35 bits.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;36 bits was on average a bit more efficient when packing characters into a word, especially for the 6-bit character encodings common at the time:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Char size | 35 bit word       | 36 bit word&#xA;----------+-------------------+-------------------&#xA;    6-bit | 5 + 5 bits unused | 6 + 0 bits unused&#xA;    7-bit | 5 + 0 bits unused | 5 + 1 bit unused&#xA;    8-bit | 4 + 3 bits unused | 4 + 4 bits unused&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you intend to make smaller computers later, having registers that are exactly divisible by two makes having some level of data interoperability easier, if not perfect. (Numerical data in a single large word can easily be split into two smaller high and low words, and a 6-char x 6-bit word can be split into two 3-char words, but splitting a 36-bit word with packed 7- and 8-bit character data would result in either splitting parts of characters between the smaller words or adding additional smaller words and ending up using more bits than the original larger word.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-27T02:41:43.510" LastActivityDate="2019-07-27T02:41:43.510" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11811" PostTypeId="1" AcceptedAnswerId="11943" CreationDate="2019-07-24T05:52:04.483" Score="9" ViewCount="1887" Body="&lt;p&gt;The Nintendo Game Boy has RAM called &quot;HRAM&quot; (meaning &quot;high ram&quot;)&#xA;decoded at locations &lt;code&gt;$ff80&lt;/code&gt; through &lt;code&gt;$fffe&lt;/code&gt;. (All other decoded&#xA;locations in the &lt;code&gt;$ffxx&lt;/code&gt; page appear to be I/O device and system&#xA;control mappings.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU also has a special &quot;high page&quot; load instruction that works&#xA;like the 6800/6502 zero page or 6809 direct page addressing modes.&#xA;This apparently &lt;a href=&quot;http://gameboy.mongenel.com/dmg/lesson5.html&quot; rel=&quot;noreferrer&quot;&gt;uses mnemonic &lt;code&gt;LDH&lt;/code&gt;&lt;/a&gt; (&quot;load from high&#xA;page&quot;) and the opcode is follwed by only the low byte of the address;&#xA;the high byte &lt;code&gt;$ff&lt;/code&gt; is implicitly assumed (i.e., &lt;code&gt;LDH A,$a0&lt;/code&gt; loads&#xA;from &lt;code&gt;$ffa0&lt;/code&gt;). This makes it one byte shorter (and thus faster to read&#xA;and execute) than a standard direct address &lt;code&gt;LD&lt;/code&gt; load instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions related to this are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Where is this HRAM, physically? Is it on the CPU die?&#xA;Outside of the clock cycles saved by the new high-page&#xA;instructions, is it any faster than any other RAM?&#xA;Does it have any other special properties? (E.g., there&#xA;seems to be a &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/OAM_DMA_tutorial&quot; rel=&quot;noreferrer&quot;&gt;DMA system&lt;/a&gt; which when running blocks access to&#xA;external RAM and ROM but not HRAM. I don't know if the DMA system&#xA;can itself access HRAM.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When HRAM is accessed, what appears on the external&#xA;address/data/control buses and cartridge port? Bonus points if you&#xA;have further interesting information about this when accessing&#xA;other parts of the high page.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What's the full list of additional instructions/addressing modes&#xA;added to the CPU that relate to HRAM and/or high-page access? Do&#xA;any other 8080-like CPUs provide this, or is this unique to the&#xA;Sharp LR35902? What assemblers understand extra mnemonics like&#xA;&lt;code&gt;LDH&lt;/code&gt;? Do any assemblers automatically choose the shorter&#xA;addressing mode when assembling instructions like &lt;code&gt;LD A,$ff80&lt;/code&gt;?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Gameboy_Bootstrap_ROM&quot; rel=&quot;noreferrer&quot;&gt;boot ROM&lt;/a&gt; sets up the stack in HRAM (the first instruction is&#xA;&lt;code&gt;LD SP,$fffe&lt;/code&gt;). What's the advantage of doing this over just&#xA;putting the stack in regular work RAM?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What are typical uses of HRAM, if any, that use its special&#xA;characteristics beyond just &quot;I saved a byte on a load or store&#xA;instruction&quot;?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you feel any of these questions are big enough to warrant being&#xA;extracted to a separate question on this site, mention this in your&#xA;answer or a comment and I'll look at doing that.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-24T10:42:54.190" LastActivityDate="2019-08-02T15:58:05.907" Title="How does Game Boy / Sharp LR35902 HRAM work?" Tags="&lt;8080&gt;&lt;game-boy&gt;&lt;microprocessor&gt;" AnswerCount="2" CommentCount="12" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11812" PostTypeId="2" ParentId="11801" CreationDate="2019-07-24T07:14:52.653" Score="17" Body="&lt;p&gt;I'm going to address the power of 2 part of the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that before microprocessors, computers were assembled by hand.  Increasing the number of bits in a computer was really a big deal.  Each time you added &lt;em&gt;one&lt;/em&gt; bit to the word size, you would need &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;more parts in the register file&lt;/li&gt;&#xA;&lt;li&gt;more parts in the ALU&lt;/li&gt;&#xA;&lt;li&gt;more wires in the buses&lt;/li&gt;&#xA;&lt;li&gt;more cells in memory&lt;/li&gt;&#xA;&lt;li&gt;more parts (relays, vacuum tubes, transistors, or small-scale ICs) to make all the above&lt;/li&gt;&#xA;&lt;li&gt;more circuit boards&lt;/li&gt;&#xA;&lt;li&gt;more time to assemble and solder (or wire-wrap) the parts&lt;/li&gt;&#xA;&lt;li&gt;and more cost for the parts and labor of all of the above.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This wasn't just a one-time design cost.  &lt;em&gt;Every&lt;/em&gt; unit sold had these extra costs for each added bit.  If there wasn't a good reason to add another bit, they didn't add it.  And rounding up to the next power of 2 was not a good reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This wasn't just limited to processor word sizes.  Drum memories were not powers of 2.  EBCDIC was not a power of 2 (6 bits).  ASCII was not a power of 2 (7 bits).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So why are powers of 2 dominant now?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IC transistors cost practically nothing compared to relays, vacuum tubes, or discrete transistors.  You don't have to hire someone to solder them together.  So there's little incentive to keep the part count low, and little penalty to round up the number of bits to a power of 2.&lt;/li&gt;&#xA;&lt;li&gt;Automated chip design tools make it very easy to add more bits during chip design.&lt;/li&gt;&#xA;&lt;li&gt;Doubling the width of registers can often make a new architecture compatible with the old architecture, either as source code or actual executables.  There were many 18-bit systems, and some of these architectures went on to become 36-bit systems.&lt;/li&gt;&#xA;&lt;li&gt;Intel created the first commercially-available microprocessor as a power of 2: the 4004 was 4 bits.  Subsequent architectures doubled the register size, resulting in power-of-2 architectures: the 8008 was 8 bits, 8086 was 16 bits, and 80386 was 32 bits.&lt;/li&gt;&#xA;&lt;li&gt;Competition causes different manufacturers to offer something similar to their competitors.  There was a time when 18 bits was popular among several manufacturers.  Then 36 bits were in vogue.  Then 8-bit microprocessors.  Followed by the age of 16-bit processors, then 32 bits, and 64 bits today.&lt;/li&gt;&#xA;&lt;li&gt;Finally, powers of 2 seem &quot;natural&quot; or &quot;elegant&quot;.  We are suspicious of a platform that isn't so, even if it is perfectly valid.  Would you like to buy this lovely 67-bit processor?  No?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-07-24T07:14:52.653" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="11813" PostTypeId="2" ParentId="11811" CreationDate="2019-07-24T08:57:08.647" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The CPU also has a special &quot;high page&quot; load instruction that works like the 6800/6502 zero page or 6809 direct page addressing modes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Looks like that's where the Nintendo guys came from, doesn't it? It couldn't be at zero, as thats where the vectors are stored (basically the reverse layout of a 6502, isn't it?)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This makes it one byte shorter (and thus faster to read and execute) than a standard direct address LD load instruction.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It basically replaces the standard IN/OUT instructions (plus adding an indexed version). Effectively moving I/O space into memory mapped, simplifying the memory design. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;My questions related to this are:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Looks more like a dozend to me. Quite a &lt;em&gt;broad&lt;/em&gt; pile, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Where is this HRAM, physically? Is it on the CPU die?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. In fact it's on what could be called the CPU-complex within the SoC.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Independent of using high page instructions, does that make it faster to access? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Of course, as the first half of the high page contains all I/O registers, it speeds up all hardware service - quite helpful on a system, which main job is to manipulate these registers. this feature is eventually more important for the existence of the high page than having RAM at that location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Or is this about access time in general?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If yes, then no. There is no saving in time compared to an original 8080 IN/OUT instruction. Having the high page enables the usage of any kind of memory operation to read/write/modify the I/O registers as with memory mapped in general, while keeping the shorter encoding for simple load and store&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does it have any other special properties?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In general no - except during DMA, as it's the only memory region the CPU can access during DMA (*1), so DMA code has to reside there to keep the system running.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I don't know if the DMA system can itself access HRAM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Interesting question. Never tried it, but I'd say rather not.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When HRAM is accessed, what appears on the external address/data/control buses and cartridge port?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, except during DMA (AFAIK).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Bonus points if you have further interesting information about this when accessing other parts of the high page.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Above is true for the whole high page. That's the way the TV adaptors work. Listening to what is done and repeating that for their video circuit.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What's the full list of additional instructions/addressing modes added to the CPU that relate to HRAM and/or high-page access?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Only LoaD from/to HRAM with an 8 bit address (F0h/E0h) or address offseted by C (F2h/E2h)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Do any other 8080-like CPUs provide this, or is this unique to the Sharp LR35902? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;None that I know of - then again, there have been countless implementation (much like with the 6502), so who knows.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What assemblers understand extra mnemonics like LDH?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Beside the original Devkit there are &lt;a href=&quot;http://gbdev.gg8.se/wiki/articles/Assemblers&quot; rel=&quot;nofollow noreferrer&quot;&gt;several&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Do any assemblers automatically choose the shorter addressing mode when assembling instructions like LD A,$ff80?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Depends on the assembler.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The boot ROM sets up the stack in HRAM (the first instruction is LD SP,$fffe). What's the advantage of doing this over just putting the stack in regular work RAM?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It'll works independent of any (other) RAM available. A boot ROM needs to be as conservative as possible with resources. Only use what's guaranteed, and only the least thereof.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What are typical uses of HRAM, if any, that use its special characteristics beyond just &quot;I saved a byte on a load or store instruction&quot;?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://gbdev.gg8.se/wiki/articles/OAM_DMA_tutorial#DMA_transfers.2C_and_how_to_use_them&quot; rel=&quot;nofollow noreferrer&quot;&gt;Again DMA&lt;/a&gt;. It's the only place can be executed when waiting for DMA to finish. And DMA is the way to update screen content.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well there is as well the Boot-ROM within the CPU complex, but so far noone has come up with a good use for that during DMA.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-24T12:48:16.783" LastActivityDate="2019-07-24T12:48:16.783" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11816" PostTypeId="1" AcceptedAnswerId="11817" CreationDate="2019-07-24T11:49:48.883" Score="10" ViewCount="2081" Body="&lt;p&gt;&lt;em&gt;(Note: by &amp;quot;object-compatible&amp;quot; I mean that the opcodes and their following operands are the same—the assembler produces the same output for equivalant assembler mnemonics. This of course excludes calling conventions, etc., because these are determined by the code one chooses to write.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Game Boy uses a Sharp LR35902 CPU (sometimes called a GB-Z80) that's usually said to be similar to an 8080. However, looking at some of the opcodes they don't seem compatible.&lt;/p&gt;&#xA;&lt;p&gt;For example, on the &lt;a href=&quot;https://www.pastraiser.com/cpu/i8080/i8080_opcodes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;8080&lt;/a&gt; and &lt;a href=&quot;https://clrhome.org/table/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z-80&lt;/a&gt; opcode &lt;code&gt;3A&lt;/code&gt; loads the contents of the memory address specified by the next two bytes into the A register: &lt;code&gt;LDA nnnn&lt;/code&gt; in 8080 assembler or &lt;code&gt;LD A,nnnn&lt;/code&gt; in Z-80 assembler. On the &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/CPU_Instruction_Set&quot; rel=&quot;nofollow noreferrer&quot;&gt;GBDevWiki&lt;/a&gt; opcode &lt;code&gt;3A&lt;/code&gt; is listed as &lt;code&gt;ldd  A,(HL)&lt;/code&gt;, loading into A the address pointed to by HL and then decrementing HL. (This indexed decrement addressing mode doesn't seem to exist at all on the 8080 or Z-80.) This seems confirmed by the &lt;a href=&quot;https://github.com/vhelin/wla-dx/blob/master/opcodes_gb.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;WLA DX assembler opcode table&lt;/a&gt;, which lists it as  &lt;code&gt;LDD A,(HL)&lt;/code&gt; (with alternatives &lt;code&gt;LD A,(HL-)&lt;/code&gt; and &lt;code&gt;LD A,(HLD)&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;The direct load on the LR35902 seems to be opcode &lt;code&gt;FA&lt;/code&gt; (&lt;code&gt;ld A,(nnnn)&lt;/code&gt;), and 16 cycles instead of 13); &lt;code&gt;FA&lt;/code&gt; is a &lt;code&gt;JMP&lt;/code&gt; instruction on the 8080 and Z-80.&lt;/p&gt;&#xA;&lt;p&gt;Am I looking at things terribly wrong somehow, or is the LR35902 actually a rather different CPU from the 8080/Z-80 that just happens to share the 8080 register set? And perhaps; Z-80 assembly syntax: the freely available assemblers use this though I don't know if the Nintendo dev kits did.&lt;/p&gt;&#xA;&lt;p&gt;If this is the case, it seems that I should study the LR35902 instruction set carefully before writing code for it because some of the very useful changes (indirect with postdecrement) wouldn't occur to an 8080 or Z-80 programmer.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2021-04-15T20:13:12.423" Title="Is the Game Boy Sharp LR35902 object-compatible with the 8080/Z-80?" Tags="&lt;z80&gt;&lt;8080&gt;&lt;game-boy&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11817" PostTypeId="2" ParentId="11816" CreationDate="2019-07-24T11:52:05.753" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;However, looking at some of the opcodes they don't seem compatible.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's your answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The LR35902, the Z80 and the 8080 really are different CPUs. They are similar in many ways, such as the register set and much of the programming model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 does not have the HL postdecrement addressing mode you're talking about, and some things the Z80 has the LR35902 doesn't, for example a second register set.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Am I looking at things terribly wrong somehow, or is the LR35902 actually a rather different CPU from the 8080/Z-80 that just happens to share the 8080 register set? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, you are completely correct. It's a rather different CPU. The Z80 is almost completely backward compatible with the 8080, excepting some undocumented bits and bobs, but the LR35902 has some opcodes remapped, some bits added or removed. So it's a Z80 &quot;inspired&quot; CPU, intended to be binary compatible with neither!&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-07-24T19:13:05.747" LastActivityDate="2019-07-24T19:13:05.747" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11818" PostTypeId="2" ParentId="309" CreationDate="2019-07-24T13:18:08.267" Score="0" Body="&lt;p&gt;A slight tangent but my first computer, a clone of the Ohio Superboard II called the UK101, had a cassette interface which was 300b/s using the &quot;Kansas City&quot; method of FSK. The computer had a simple UART whose TX connected to the frequency control of a simple modulator, and RX connected to a crude frequency detector and thus derived the binary stream from the &quot;warble&quot; of the FSK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a higher quality cassette recorder it was possible to run the tape interface at 600 baud (I can use baud and bps interchangeably in this context) or even 1200, but the latter was very supsceptible to the slightest tape glitch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, you could build an RS232 level converter and connect the UART to a 300 baud modem.&lt;/p&gt;&#xA;" OwnerUserId="14770" LastActivityDate="2019-07-24T13:18:08.267" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11819" PostTypeId="2" ParentId="11816" CreationDate="2019-07-24T13:27:31.880" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Is the Game Boy Sharp LR35902 object-compatible with the 8080/Z-80?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Depends what you call object-compatible. If that's about some object format than it depends more about the toolchain you're using.&lt;/p&gt;&#xA;&lt;p&gt;If the question is about one being a direct upward compatible of either on opcode level, then it's a &lt;em&gt;rather&lt;/em&gt; not.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Am I looking at things terribly wrong somehow, or is the LR35902 actually a rather different CPU from the 8080/Z-80 that just happens to share the 8080 register set?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes ... and no. It is a CPU build on base of the 8080 design, much like the Z80 is. But unlike the Z80 it isn't fully compatible as many operations got dropped to make room for 'new' operations. Many of them looking like inspired by the Z80, but rescheduled to improve performance.&lt;/p&gt;&#xA;&lt;p&gt;One issue with extending the 8080 is that its opcode space is already quite filled up, leaving only a few code points to be used. To cramp in all extension the Z80 added they had to use two byte opcodes (*1). Which did add a full fetch penalty - rendering many of them way less efficient than they could have been.&lt;/p&gt;&#xA;&lt;p&gt;Nintendo (Sharp) avoided this by simply dropping many nice but lesser used instruction as well as Sign and Parity bits with their corresponding 12 test operations (JP/CALL/RET) to make room for what they though to be great extensions that needed to be fast. At the same time they as well implemented some 'complex' opcodes which look a bit like Z80 two byte opcodes, even encoded as CBxxh like some Z80, but they are all fixed opcodes ot two bytes with no additional parameters, executing in 8 cycles.&lt;/p&gt;&#xA;&lt;p&gt;Some of the confusion about being a Z80 or alike may come from their usage of Z80 mnemonics for this 8080ish CPU. My guess would be that at that point of time programmers were more familiar with Zilog's codes than classic Intel mnemonics.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line, the Game Boy CPU is a true descent of an 8080 in the sense that it takes its basic recipe from it, as well as the Z80 by borrowing some of their instruction variations and iceing it over with its own changes, like no I/O address space, High Page and auto increment, making it a superb cake of it's own.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - It doesn't matter how some documentation tries to make them look better by calling it escape codes or alike, for all practical purpose they are two byte opcodes, adding another fetch penalty to execution.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-15T20:13:12.423" LastActivityDate="2021-04-15T20:13:12.423" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="11820" PostTypeId="2" ParentId="1141" CreationDate="2019-07-24T15:14:04.870" Score="5" Body="&lt;p&gt;Those &quot;memory locations&quot; are not used for anything; they don't exist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;addresses&lt;/em&gt; exist, of course, becuase the CPU can generate them, but there's no RAM there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though you access these addresses as if you were talking to a RAM device, by reading and writing memory locations, remember that that's not actually what's happening. Instead you're talking to a completely different kind of device, the sound chip. It listens for requests to read or write data in that address range and, when it sees one of its addresses on the bus, it executes whatever commands it needs to based on the exact address, the contents of the data bus, and whether it's a read or write.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when you generate a request to read &lt;code&gt;FF27&lt;/code&gt;, the device that considers that one of its addresses says, &quot;That doesn't mean anything to me, but I'll generate &lt;code&gt;FF&lt;/code&gt; as a response.&quot; I'm not sure why the designers made it do that; perhaps it was easier than just ignoring it and not responding at all.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-07-24T15:14:04.870" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11821" PostTypeId="1" CreationDate="2019-07-24T15:49:41.210" Score="4" ViewCount="658" Body="&lt;p&gt;I'm trying to understand the difference in &lt;code&gt;bus cycles&lt;/code&gt;, &lt;code&gt;clock cycles&lt;/code&gt; and &lt;code&gt;states&lt;/code&gt; within a 68000 processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the &lt;a href=&quot;https://www.nxp.com/docs/en/reference-manual/MC68000UM.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;user manual&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A bus cycle consists of eight states...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Lets assume the 68K has a CLK signal that is 8 MHz (based on an 8 MHz crystal oscillator attached to the CLK pin).  That, I believe, is a &quot;CPU Clock&quot; or just &quot;Clock&quot;.  It's the fastest clock signal the 68K is aware of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So each of the two phases of that signal (LOW and HIGH) would be 62.5ns.  Both the low and high phase of that clock would be one &lt;em&gt;clock cycle&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, referring back to the user manual, a &lt;em&gt;bus cycle&lt;/em&gt; would be 8 clock cycles in length.  Basically, 16 &quot;ticks&quot; or phase changes of the crystal oscillator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, that bus cycle is broken into 8 &lt;em&gt;states&lt;/em&gt;.  Each of those states would be two ticks of the crystal oscillator.  Which means each state is equivalent to a full cycle of the crystal oscillator.  Which would be 62.5ns x 2 in this example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After reading all of that, is my logic and understanding correct?  The user manual seems to toss around bus cycles, clock cycles, etc. and I want to make sure I understand their meanings.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="6659" LastEditDate="2019-07-24T16:09:41.680" LastActivityDate="2019-08-19T08:59:01.593" Title="How does states, bus cycles and clock cycles differ in the M68000?" Tags="&lt;cpu&gt;&lt;motorola-68000&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11822" PostTypeId="2" ParentId="11821" CreationDate="2019-07-24T16:08:59.440" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm trying to understand the difference in bus cycles,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A bus sycle is one transaction on the processor bus. Roughly one read or write.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;clock cycles&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A clock cycle is one high and low phase of the clock signal ... well, a cycle.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and states within a 68000 processor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;States are the in general the steps the CPU takes to execute an instruction - here especially about the sequence of signals the CPU outputs or reads during execution.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;According to the user manual,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you got this already, you might as well look at Page 4-2, giving a nice diagram as well as a list of the 8 basic states on p.4-3.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A bus cycle consists of eight states...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Jup&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During one clock cycle the CPU goes thru two states - using each edge to trigger one step (*1) One bus cycle needs to go thru 8 states, so it will be 4 clock cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And looking at the 68000 instruction timing you'll see that next to all take multiples of 4 clocks.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Now, referring back to the user manual, a bus cycle would be 8 clock cycles in length. Basically, 16 &quot;ticks&quot; or phase changes of the crystal oscillator.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, look at the graphics, it's 8 ticks thus 4 cycles.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;After reading all of that, is my logic and understanding correct?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Basically yes, except for above skew.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The user manual seems to toss around bus cycles, clock cycles, etc. and I want to make sure I understand their meanings.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;states are used to show the internal series of events,&lt;/li&gt;&#xA;&lt;li&gt;clock cycles to make it easy to refer to the system clock for speed calculation and&lt;/li&gt;&#xA;&lt;li&gt;bus cycles to look at the execution from a more abstract perspective, leaving all the dirty bits unmentioned :))&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Much like the 6502, except it uses also a shifted signals to turn the 2 edges into non overlapping clocks.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="609" LastEditDate="2019-08-18T20:03:03.597" LastActivityDate="2019-08-18T20:03:03.597" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11823" PostTypeId="2" ParentId="11821" CreationDate="2019-07-24T16:10:27.897" Score="3" Body="&lt;p&gt;That's correct in that example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A state is any constant (after settling) bus state. When the 68000 changes state, it does so on a clock transition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A clock cycle is one complete cycle of the clock. For an 8Mhz 68000, there are 8,000,000 clock cycles per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A bus cycle is the complete set of states that describes a bus interaction — most normally a read or write, and usually 4 cycles / 8 states long.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However it is not true that all bus cycles are 4 clock cycles long, e.g. TAS to memory is intended for multiprocessor mutual exclusion, so it uses an atomic read-modify-write bus cycle of 10 clock cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is also not true that every clock cycle contains two states. When performing operations like DIV[U/S] the 68000 will do a lot of internal processing before getting to its next bus interaction, signalling nothing* in the interim.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*) other than changes to E, the divide-by-10 clock it outputs for 6800-style peripherals.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-07-24T16:25:32.383" LastActivityDate="2019-07-24T16:25:32.383" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11824" PostTypeId="2" ParentId="11765" CreationDate="2019-07-24T19:38:16.930" Score="0" Body="&lt;p&gt;Originally, you had to dial the phone by hand and listen for the carrier.  When you heard it, you would place the handset into the acoustic coupler.  The telcos and PTTs did not allow direct connection to the communications equipment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, you could connect directly: you would pick up the handset and manually dial and listen for the carrier.  When you heard it, you would toggle the ONLINE switch and hang up the phone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the marketing people and the pointy-haired bosses wanted to &quot;dial in&quot; to what the geeks were doing, they wanted to have that squeaky sound coming out of their IBM too so everyone knew they were ahead of the game and working hard.  After that, it just became the way things were and always had been.&lt;/p&gt;&#xA;" OwnerUserId="7510" LastActivityDate="2019-07-24T19:38:16.930" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11825" PostTypeId="1" CreationDate="2019-07-24T22:41:59.960" Score="44" ViewCount="5919" Body="&lt;p&gt;On the C64 there was no threading, so how did games handle treating at the same time music and game code? Music requires exact timings, and the SID had to be instructed to change the note at the right time. How did they achieve this? I suspect master usage of interrupts, but I want to know more. &lt;/p&gt;&#xA;" OwnerUserId="4300" LastEditorUserId="129" LastEditDate="2019-07-25T22:18:00.133" LastActivityDate="2020-10-26T23:56:20.507" Title="How did C64 games handle music during gameplay?" Tags="&lt;commodore-64&gt;&lt;gaming&gt;&lt;sound&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="11829" PostTypeId="2" ParentId="11825" CreationDate="2019-07-25T01:54:13.003" Score="50" Body="&lt;p&gt;Your assumptions about timing and interrupts are correct. Actually, it is surprisingly easy to add SID music to games because they tend to follow a basic pattern.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Compose the tune in a C64 SID editor. &lt;a href=&quot;http://chordian.net/c64editors.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;There are many of these&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The SID editor generates a SID file, which actually includes both the data &lt;em&gt;&lt;strong&gt;and&lt;/strong&gt;&lt;/em&gt; code for playback. This file is easily incorporated as a DATA block into the game's assembly code. Later, attempts were made to &lt;a href=&quot;https://gist.github.com/cbmeeks/2b107f0a8d36fc461ebb056e94b2f4d6&quot; rel=&quot;nofollow noreferrer&quot;&gt;standardize the format&lt;/a&gt; for &amp;quot;PSID files&amp;quot; for the &lt;a href=&quot;https://hvsc.c64.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;HVSC project&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Initialize the code in the SID file with a call to some specified base/load address.&lt;/li&gt;&#xA;&lt;li&gt;Set up a VBLANK interrupt.&lt;/li&gt;&#xA;&lt;li&gt;In your VBLANK IRQ handler, call the subroutine provided in the SID file. It will be a specific offset from the base/load address.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Since the heavy-lifting is already done by the SID editor, the programmer's part is easy. As with any game on a platform like the C64, there's normally already a VBLANK IRQ to handle things like sprite updates. So it just becomes one extra sub-routine to call in your handler.&lt;/p&gt;&#xA;&lt;p&gt;The correct playback frequency is &amp;quot;guaranteed&amp;quot; based on the video running at either 50 Hz (PAL) or 60 Hz (NTSC). &lt;strong&gt;Naturally&lt;/strong&gt;, this means you have to compose the music specifically for either PAL or NTSC C64's, lest you have the playback speed faster or slower than you intended for the composition.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-10-26T23:56:20.507" LastActivityDate="2020-10-26T23:56:20.507" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11830" PostTypeId="1" AcceptedAnswerId="11835" CreationDate="2019-07-25T11:23:35.623" Score="5" ViewCount="368" Body="&lt;p&gt;A quote from the Wikipedia:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The PDP-5's instruction set was later expanded in its successor, the PDP-8, to handle more bit rotations and to increase the maximum memory size from 4K words to 32K words.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The part about the increase in max memory size I believe is false, since that's done by optional external hardware, the Memory Extension Controller which presumably may equally well augment the PDP-5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the part about handling more bit rotations, I also cannot see how the PDP-5's Group 1 &lt;code&gt;OPR&lt;/code&gt; is any different from that of the PDP-8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is the PDP-8 &lt;em&gt;really&lt;/em&gt; any different from the -5?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="6794" LastEditDate="2019-07-26T15:19:25.720" LastActivityDate="2019-08-24T11:55:45.557" Title="In what way does the Straight-8 expand on the PDP-5?" Tags="&lt;instruction-set&gt;&lt;pdp-8&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11831" PostTypeId="2" ParentId="11830" CreationDate="2019-07-25T12:06:14.077" Score="4" Body="&lt;p&gt;The PDP-5 also offered expansion up to 32K words, similar to the PDP-8. This was the &quot;Memory Extension Control Type 154&quot; as seen on the second-last page of &lt;a href=&quot;https://archive.computerhistory.org/resources/text/DEC/pdp-5/DEC.PDP-5.1964.102646094.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this PDP-5 brochure&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;MEMORY EXTENSION CONTROL&lt;br&gt;&#xA;  TYPE 154&lt;br&gt;&#xA;  Allows expansion of the PDP-5 memory from 4096&lt;br&gt;&#xA;  to 32,768 words in increments of 4096 words. Can&lt;br&gt;&#xA;  be attached to any PDP-5 without requiring changes&lt;br&gt;&#xA;  to the processor.  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So the claim that only the PDP-8 had the &quot;expanded instruction set&quot; for this is wrong. The claim that memory expansion required an expanded instruction set doesn't strike me as utterly unreasonable, since IIRC instruction decoding for additional &quot;IOT&quot; instructions was on the cards that added the peripheral, so you could argue that the particular &lt;code&gt;IOT&lt;/code&gt; (sub-?)instruction didn't exist in the machine until the peripheral was added.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding rotations, as well as the standard four (accumulator and link left/right 1/2 positions) shared by the PDP-5 and PDP-8  in operate group 1, DEC's 1974 &lt;a href=&quot;https://homepage.divms.uiowa.edu/~jones/pdp8/refcard/74.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-8 Pocket Reference Card&lt;/a&gt; includes a section called &quot;combined operate microinstructions&quot; that includes among other things two shifts and two additional rotates:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;COMBINED OPERATE MICROINSTRUCTIONS (1.2usec)&#xA;                                                Sequence&#xA;...&#xA;CLL RAR  7110  shift positive number one right     1,4&#xA;CLL RAL  7104  shift positive number one left      1,4&#xA;CLL RTL  7106  clear link, rotate 2 left           1,4&#xA;CLL RTR  7112  clear link, rotate 2 right          1,4&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's not clear to me if these rotate through the link or just rotate the accumulator. If the former, they're not different in how much gets rotated, but they are different in that they change the data before rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These don't seem to be documented in various other instruction set summaries, so I'm wondering if these were instructions added by optional hardware, rather than part of the base PDP-8.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-07-25T12:06:14.077" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11832" PostTypeId="2" ParentId="11800" CreationDate="2019-07-25T14:36:04.407" Score="9" Body="&lt;p&gt;The premise of your question is somewhat incorrect, though it's a common misconception by people conflating how Windows 3.1 worked and how Windows 95 worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Windows 3.1, if an application had an error, it would show the graphical box you included, and as it says in the Raymond Chen article you linked that box sometimes had an option to Ignore the error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You show the screen that one gets when hitting Ctrl+Alt+Del, but that's really &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20140902-00/?p=93&quot; rel=&quot;noreferrer&quot;&gt;just the Ctrl+Alt+Del screen&lt;/a&gt;. That's not an error screen, it's a tool used to help you stop a hung program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were some other &quot;blue screen&quot; messages, particularly for system messages that needed to coordinate between the DOS VMs and the Windows applications, such as handling device conflicts when more than one application was trying to use a serial port. You can see some examples in another Raymond Chen post, &quot;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20140909-00/?p=44123&quot; rel=&quot;noreferrer&quot;&gt;Steve Ballmer did not write the text for the blue screen of death&lt;/a&gt;&quot;. These were messages not really specific to an application, but regarding sharing the system resources between them and prompting you how to handle them. However, as that article says, Windows 3.1 didn't really have a &quot;blue screen of death&quot;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If an MS-DOS application crashed, you got a blue screen message saying that the application crashed, but Windows kept running. If it was a device driver that crashed, then Windows 3.1 shut down the virtual machine that the device driver was running in. But if the device driver crashed the Windows virtual machine, then the entire virtual machine manager shut itself down, sometimes (but not always) printed a brief text message, and handed control back to MS-DOS. So you might say that it was a black screen of death.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To answer your question, the presentation of the message wasn't related to the severity, but whether it was an application-level or system-level message.&lt;/p&gt;&#xA;" OwnerDisplayName="user616" LastActivityDate="2019-07-25T14:36:04.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11833" PostTypeId="2" ParentId="11800" CreationDate="2019-07-25T16:17:39.007" Score="3" Body="&lt;p&gt;There are three types of error in your question. I'll cover them in least to most severe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FtktK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FtktK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is an error that allows the application to continue. An example might be an attempt to access a resource that it does not have access to, such as a previously released file handle. The error can be ignored and the application can continue, but the effects are unpredictable which is why it advises you to save your work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3OkKm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3OkKm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This type of error is more severe, and prevents the application continuing. For example, the application's executable memory may have been corrupted, or its program counter been set to a bad address so there is no way to know where to continue running from. In that case, the application must be shut down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ECsWM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ECsWM.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This message is displayed when the user user pressed CTRL-ALT-Delete, which was used to kill and application that had locked up, but no applications were locked up as far as he system is aware. This can happen when a part of the OS itself locks up, or a vital service like a disk driver or filesystem handler. When that happens it is often impossible to save work or restart the computer normally, because those actions all end up waiting for the locked up component.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As such, the user's only choices are to return to Windows and continue waiting, or force a restart without a safe shutdown first.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-07-25T16:17:39.007" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11834" PostTypeId="2" ParentId="11825" CreationDate="2019-07-25T16:27:06.920" Score="14" Body="&lt;p&gt;Mostly, the same way that embedded code still does it today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Embedded code doesn't use threads.  In general, it also makes less use of stack and usually no use at all of dynamic memory allocation.  Instead we make widespread use of global variables (or at least static variables) which are statically allocated.  Reasons are twofold: firstly it's faster, and that matters when your processor is not very powerful; and secondly if you have limited stack/heap available then running out of stack/heap is a very real problem.  If what you're programming is something like a game where the processing loop keeps running with the same data, instead of a word processor where new files have to be loaded in, then there's no point in making life harder for yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course if you have lots of global variables then you have an encapsulation problem.  Structured programming solves that problem at the cost of stack/heap usage, and associated processing overhead.  The alternative of course is that you acknowledge the problem exists and &lt;em&gt;be careful&lt;/em&gt;.  If the expected interfaces to a block of code are clear, it doesn't matter too much if you can see the internals, so long as you're careful not to mess around with them.  Or of course the third option is that you write spaghetti code - and that was not at all uncommon back in the 8-bit days!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to the processing.  As described by BrianH, you'd have an interrupt triggered at a regular time interval.  That time interval gives you a window of processing, during which all your game play, all your sound, all your display updates, and anything else needs to happen.  This is real-time processing, and there is no difference conceptually from running a game like this, or running the control loop on your car engine controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For anything which doesn't need to be updated that fast, you can run that processing every 10 ticks of the main loop, say.  Or if you have a larger chunk of calculation which doesn't have to be run fast but takes a lot of number-crunching, then you can run part of it each time through the main loop.  Both are popular strategies in embedded code, if you have a low-end micro without prioritised interrupts.&lt;/p&gt;&#xA;" OwnerUserId="6749" LastActivityDate="2019-07-25T16:27:06.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11835" PostTypeId="2" ParentId="11830" CreationDate="2019-07-25T17:05:12.877" Score="6" Body="&lt;p&gt;There is a section in the &lt;a href=&quot;http://www.faqs.org/faqs/dec-faq/pdp8-models/section-1.html&quot; rel=&quot;noreferrer&quot;&gt;DEC FAQ&lt;/a&gt; that describes the differences between the PDP-5 and PDP-8 instruction set:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Compatability:  The core of the PDP-8 instruction set is present, but&#xA;      memory location zero is the program counter, and interrupts are&#xA;      handled differently.  The Group 1 OPR rotate instructions cannot&#xA;      be combined with IAC or CMA; this limits the ability of the&#xA;      PDP-5 to support code from later models.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This makes much more sense than &quot;handle[s] more bit rotations&quot; (can someone update the Wikipedia article?). Combining CLA CLC with IAC and/or CMA plus a rotate operation is useful to quickly load constants into AC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other differences:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The machine does not support 3 cycle data-break (DMA transfers using&#xA;      memory to hold buffer address and word-count information), so&#xA;      many later PDP-8 peripherals cannot be used on the PDP-5.  In&#xA;      addition, DMA transfers are not allowed outside the program's&#xA;      current 4K data field, severely limiting software compatability&#xA;      on systems with over 4K of memory where either interrupts or&#xA;      software initiated changes to the data field during a transfer&#xA;      would cause chaos.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But of course the main reason to prefer the PDP-8 over the PDP-5 was performance and price.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-07-25T17:05:12.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11836" PostTypeId="2" ParentId="11776" CreationDate="2019-07-25T17:11:00.620" Score="1" Body="&lt;p&gt;This all was driven by cost. The vertical and horizontal synchronization signals as well as the separate RGB signals had to be combined on the graphics card if using composite video. This greatly complicated the card and ran up the cost. It also complicated the graphics display as the display had to use circuitry to separate out the component parts of the signal inside the monitor. As wideband low cost video amplifiers were an oxymoron at the time the reduced complexity of the already expensive graphics card and reduced component count of the monitor which did not need as many parts to parse out a composite video the engineers was a win-win. It was simply simpler to make a cable with extra wires and less expensive.&lt;/p&gt;&#xA;" OwnerUserId="14800" LastActivityDate="2019-07-25T17:11:00.620" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11837" PostTypeId="2" ParentId="7419" CreationDate="2019-07-25T19:25:56.440" Score="3" Body="&lt;p&gt;The BBC Microcomputer did the exact opposite with its composite video output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Beeb has three different video outputs, RF (for use with a television), composite, and RGB. As shipped, the composite output was black and white only. However, by soldering a capacitor between two transistors (on early issue boards) or fitting a wire link (on later ones), the colour burst of the RF output could be connected to the composite video signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;http://www.sprow.co.uk/bbc/howto.htm#colourcvbs&quot; rel=&quot;nofollow noreferrer&quot;&gt;similar modification&lt;/a&gt; could be done to the Model B+, Master series, and the Electron, with the same effect of &quot;turning on&quot; the colour burst.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-07-25T19:25:56.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11838" PostTypeId="1" CreationDate="2019-07-26T11:38:44.953" Score="7" ViewCount="848" Body="&lt;p&gt;As &lt;a href=&quot;https://www.theregister.co.uk/2001/05/13/raiders_of_the_lost_altair/&quot; rel=&quot;noreferrer&quot;&gt;described by The Register&lt;/a&gt; in 2001, around 1987 journalists&#xA;and others started asking Bill Gates for a copy of the source code for&#xA;the original version of Altair (eventually Micro-Soft) BASIC, written&#xA;for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Altair_8800&quot; rel=&quot;noreferrer&quot;&gt;Altair 8800&lt;/a&gt; and other 8080-based machines. This turned out&#xA;to be fruitless, but a paper copy eventually was discovered at Harvard&#xA;and copies of that now apparently reside in the Pusey library there&#xA;and are available for public viewing. Ian Griffiths visited, read some&#xA;of the code and &lt;a href=&quot;http://altairbasic.org/other%20versions/ian.htm&quot; rel=&quot;noreferrer&quot;&gt;write about his experience here&lt;/a&gt;. (There are&#xA;various other copies of this page on the net.)&lt;/p&gt;&#xA;&lt;p&gt;Since then the source for various derivatives of this BASIC has&#xA;appeared on the 'net, apparently without major issues or takedown&#xA;threats. &lt;a href=&quot;https://winworldpc.com/download/c2bfc380-c2b2-c2b4-7d00-11c3a7c29d25&quot; rel=&quot;noreferrer&quot;&gt;BASIC-80 5.2&lt;/a&gt; appears to contain substantial amounts of code&#xA;from Altair BASIC, and the &lt;a href=&quot;https://www.pagetable.com/docs/M6502.MAC.txt&quot; rel=&quot;noreferrer&quot;&gt;6502&lt;/a&gt; port also clearly has substantial&#xA;reuse. Compare, for example, the &lt;code&gt;PTRGET&lt;/code&gt; routine in those and you'll&#xA;see that the header comment has the same structure and several&#xA;identical phrases, many symbol names are identical, and the structure&#xA;of the code is the same.&lt;/p&gt;&#xA;&lt;p&gt;Why, though it's been preserved and bits of it are available through&#xA;other versions anyway, does there seem to be an issue with making the&#xA;early 8080 BASIC source code available? The reasons do not seem to be&#xA;technical, since scanning paper documents from that era and making&#xA;them available on-line is commonly done.&lt;/p&gt;&#xA;&lt;p&gt;To be clear, I know that the object code and &lt;a href=&quot;http://altairbasic.org/&quot; rel=&quot;noreferrer&quot;&gt;annotated&#xA;disassemblies&lt;/a&gt; of it are widely available. I'm posting this&#xA;question not becuase I'm looking for the details of how this BASIC&#xA;works, but because I'm interested in the details of the original code&#xA;(particularly naming conventions and comments) as written by Gates,&#xA;Allen and Monte Davidoff.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-09-24T22:49:38.607" Title="Why is the original Altair BASIC (for the 8080 CPU) source code not available on-line?" Tags="&lt;8080&gt;&lt;microsoft-basic&gt;&lt;altair-8800&gt;" AnswerCount="0" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11839" PostTypeId="1" CreationDate="2019-07-26T12:33:55.423" Score="13" ViewCount="2436" Body="&lt;p&gt;Does the Intel 8086 CPU have user mode and kernel mode as modern CPUs do? and if it doesn't have user mode and kernel mode, does that mean that any user program written for the Intel 8086 CPU could do anything that the OS can do?&lt;/p&gt;&#xA;" OwnerUserId="14809" LastActivityDate="2019-07-27T18:04:38.017" Title="Does the Intel 8086 CPU have user mode and kernel mode?" Tags="&lt;history&gt;&lt;cpu&gt;&lt;8086&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11840" PostTypeId="2" ParentId="11839" CreationDate="2019-07-26T12:39:28.317" Score="28" Body="&lt;p&gt;No. There is no mechanism for any privilege levels or protection in 8086. As a consequence, there is nothing special about OS code, and thus user applications are allowed to do everything, including reading and writing to any physical memory address, directly access any I/O port, and enable/disable interrupts at will. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Protected mode was introduced in 80286. Some non-PC compatible systems with 8086/8088 might have had external hardware that was used to provide protection and distinction between kernel and userland code, but I haven’t found really good sources for those, so I can’t tell how it worked. &lt;/p&gt;&#xA;" OwnerUserId="4378" LastEditorUserId="4378" LastEditDate="2019-07-26T19:11:11.390" LastActivityDate="2019-07-26T19:11:11.390" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11841" PostTypeId="2" ParentId="11839" CreationDate="2019-07-26T15:01:46.530" Score="10" Body="&lt;p&gt;To answer the second part of the question, yes, any program could do what the OS could do.  Some of the useful reasons included:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Directly access hardware, especially to provide support for third-party expansion cards.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Directly access graphics memory, to draw graphics.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Overwrite system calls, to alter or extend the functionality of the OS.  Certain TSR programs that did this were especially popular.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2019-07-26T15:01:46.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11842" PostTypeId="2" ParentId="11801" CreationDate="2019-07-26T16:06:28.440" Score="5" Body="&lt;p&gt;When I was first exposed to this stuff in engineering school in 1978, I was taught that a &quot;byte&quot; could be either six or eight bits; the former were usually represented as two octal digits, and the latter by two hex digits. Most of the computers I used in college (PDP-8s and a CDC 6600) were based on six-bit bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were quite a few computers using odd word sizes in the '70s; probably there were more different architectures based on 6-bit bytes than 8-bit bytes. The PDP-8 was a 12-bit machine; Harris actually sold a microprocessor compatible with the PDP-8 instruction set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DEC also made 36-bit machines for a while. The CDC6600 and 7600 were 60-bit machines. I gather that there were quite a few 18-bit machines in military applications, but I've only ever worked with those architectures in emulation (and I'm confident there are still emulators of 18-bit processors being built). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There probably are still 36-bit machines (or at least 36-bit software) running production EDI applications, because General Electric kept using their own computers in their EDI services business long after they'd sold that hardware business off to Honeywell (and in fact after Honeywell sold it to Bull). Although these days I'd guess they're running in emulation on 8-bit hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my perspective there was no more rationale than success in the marketplace, and the turning point was Intel's choice of 8 bits for single-chip microprocessors.&lt;/p&gt;&#xA;" OwnerUserId="14811" LastEditorUserId="14811" LastEditDate="2019-07-26T16:16:49.120" LastActivityDate="2019-07-26T16:16:49.120" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11845" PostTypeId="2" ParentId="11801" CreationDate="2019-07-26T21:26:39.697" Score="3" Body="&lt;p&gt;Computers used to be all sorts of varying standards for varying reasons.  When only large businesses could afford a computer, they bought or designed a computer for the reasons they needed.  Thus, there were systems including 4, 6, 8, 13, 16, 18, 24, 26, 32, 36, etc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been computers using binary and trinary (ternary).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually, due to the popularization of Intel CPU along with many other Risc chips being 16-32-64 binary bits, these became the standard.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 7-x64-Home only allowed 8 or 16 GB of memory address space in 64-bit mode.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, most 64-bit CPU have a 48-bit memory interface, with 56 as an option.  Many BIOS/EFI don't have 48-bits, and might only allow 36, 38, 40 or whatever bits of memory space.  E.g. many systems cannot address more than 16 GB or 64 GB, or whatever.  The CPU and OS can use the remainder as swap/page file space.  &lt;/p&gt;&#xA;" OwnerUserId="8361" LastActivityDate="2019-07-26T21:26:39.697" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11846" PostTypeId="2" ParentId="11839" CreationDate="2019-07-26T21:42:05.960" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does the Intel 8086 CPU have user mode and kernel mode&amp;hellip;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&amp;hellip;as modern CPUs do?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I guess you mean &quot;modern&quot; x86 CPUs, the offspring of the 8086, right? Alas, the idea of an &lt;a href=&quot;https://en.wikipedia.org/wiki/Instruction_set_architecture&quot; rel=&quot;noreferrer&quot;&gt;ISA&lt;/a&gt; with privilege levels is &lt;strong&gt;way&lt;/strong&gt; older than the 8086.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and if it doesn't have user mode and kernel mode, does that mean that any user program written for the Intel 8086 CPU could do anything that the OS can do?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's what brought us the mess of direct screen addressing, user I/O, mangling with interrupts, and so on. These things made life hard for any proper OS to offer compatibility with DOS programs&amp;mdash;at least until CPUs got fast enough to just emulate everything.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="2037" LastEditDate="2019-07-26T22:18:04.740" LastActivityDate="2019-07-26T22:18:04.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11847" PostTypeId="2" ParentId="11839" CreationDate="2019-07-27T02:05:35.267" Score="3" Body="&lt;p&gt;The 8086 has no programmer-visible supervisor/user model in the instruction set architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it exposes a lot of state information through its pins, such as pins S0, S1 and S2 that interface to a bus controller (like the Intel 8288).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The S0, S1 and S2 pins indicate what kind of access the 8086 is making: code, data, I/O and so on. Together with the address pins, you can get an idea of what the CPU is doing: in what area of memory is it executing code and what it's trying to access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems very promising, therefore, that a supervisor/user-like protection scheme is possible if we control the board design. We could design a piece of hardware (to augment or replace the bus controller) which decodes the processor state from the S1-S2 pins, address pins and perhaps others, and acts as a gatekeeper to the external bus, preventing accesses to certain areas by unprivileged code. That piece of hardware could itself be programmable in various ways, and only by kernel code. It could be told to reveal certain address ranges, or close off access.  It could deliver an external interrupt to the processor if it attempts an illegal access.&lt;/p&gt;&#xA;" OwnerUserId="5202" LastEditorUserId="357" LastEditDate="2019-07-27T17:37:57.680" LastActivityDate="2019-07-27T17:37:57.680" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="11848" PostTypeId="1" CreationDate="2019-07-27T02:12:37.403" Score="19" ViewCount="1578" Body="&lt;p&gt;As I understand it, the Intel 8088 CPU used in the original IBM PC had two interrupt lines: INTR and NMI. INTR was fed from the Intel 8259 Programmable Interrupt Controller, which handled the IRQs from the rest of the system (and presented the interrupt number on lines AD0-AD7 for the CPU to read). What, if anything, was the NMI line connected to? What did BIOS/DOS do when interrupt 2 arrived? Were there any differences in this regard between the PC, XT, or AT?&lt;/p&gt;&#xA;" OwnerUserId="12139" LastActivityDate="2019-07-30T20:38:21.097" Title="Did the IBM PC use the 8088's NMI line?" Tags="&lt;ibm-pc&gt;&lt;ibm&gt;&lt;bios&gt;&lt;interrupt&gt;&lt;8088&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11849" PostTypeId="2" ParentId="11848" CreationDate="2019-07-27T02:38:39.423" Score="16" Body="&lt;p&gt;In a 100% compatible PC, NMI is used only to communicate unrecoverable errors — normally a RAM parity failure, but possibly something else, which should reveal itself &lt;a href=&quot;https://wiki.osdev.org/Non_Maskable_Interrupt&quot; rel=&quot;noreferrer&quot;&gt;via one of the system control ports&lt;/a&gt;, specifically you should check:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Port A:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;b4: watchdog timer status;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Port B:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;b6: channel check failure (i.e. a bus failure, likely a peripheral device);&lt;/li&gt;&#xA;&lt;li&gt;b7: parity check failure.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-07-27T02:38:39.423" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11850" PostTypeId="2" ParentId="11848" CreationDate="2019-07-27T03:15:54.047" Score="10" Body="&lt;p&gt;On the IBM PCJr, the NMI was used by the keyboard device to signal the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Source: “The Peter Norton Programmer’s Guide to the IBM PC”, chapter 3, under “Changing Interrupt Vectors” while discussing CLI)&lt;/p&gt;&#xA;" OwnerUserId="4577" LastEditorUserId="4577" LastEditDate="2019-07-30T20:38:21.097" LastActivityDate="2019-07-30T20:38:21.097" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11851" PostTypeId="2" ParentId="11848" CreationDate="2019-07-27T04:22:24.450" Score="12" Body="&lt;p&gt;As indicated by e.g. &lt;a href=&quot;https://archive.org/stream/SystemBiosForIbmPcxtAtComputersCompatibles/PhoenixBios_djvu.txt&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; description of the Phoenix BIOS, possible NMI sources are&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Memory parity errors&lt;/li&gt;&#xA;&lt;li&gt;x87 Coprocessor errors&lt;/li&gt;&#xA;&lt;li&gt;I/O card NMI (for whatever reason the I/O card decides to invoke it)&lt;/li&gt;&#xA;&lt;li&gt;DMA bus time-out errors (AT only)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Additionally, the Programmable Interrupt Timer (PIT; 8253 or 8254) could generate an NMI using a watchdog and possibly also on user (programmer) request.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least the Phoenix BIOS just displayed the error, and then the system must be rebooted (warm boot via Ctrl-Alt-Del was allowed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There seems to be some additional logic regarding Coprocessor errors.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-07-27T04:22:24.450" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11852" PostTypeId="2" ParentId="4948" CreationDate="2019-07-27T09:12:05.833" Score="9" Body="&lt;h1&gt;Yes, Microsoft 6502 BASIC was clearly a port of their 8080 BASIC.&lt;/h1&gt;&#xA;&lt;p&gt;Unfortunately the original 8080 source code for Microsoft BASIC &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11838/7208&quot;&gt;isn't&#xA;easily available&lt;/a&gt;, so we can't compare it directly to that&#xA;without going to the Harvard University library to read the paper&#xA;copy.&lt;/p&gt;&#xA;&lt;p&gt;But the Microsoft source code for a later version of their 8080 BASIC,&#xA;BASIC-80 5.2 (actually marked 5.11 in the source) is &lt;a href=&quot;https://winworldpc.com/download/c2bfc380-c2b2-c2b4-7d00-11c3a7c29d25&quot; rel=&quot;noreferrer&quot;&gt;available&#xA;online&lt;/a&gt;. This is copyright 1982 (from the copyright notice in&#xA;&lt;code&gt;INIT.MAC&lt;/code&gt;), but contains material obviously from the original 8080&#xA;source code, such as the following comment in &lt;code&gt;BINTRP.MAC&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;;--------- ---- -- ---- ----- --- ---- -----&#xA;;COPYRIGHT 1975 BY BILL GATES AND PAUL ALLEN&#xA;;--------- ---- -- ---- ----- --- ---- -----&#xA;;&#xA;;ORIGINALLY WRITTEN ON THE PDP-10 FROM&#xA;;FEBRUARY 9 TO  APRIL 9 1975&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Comparing this with the &lt;a href=&quot;https://www.pagetable.com/docs/M6502.MAC.txt&quot; rel=&quot;noreferrer&quot;&gt;6502 source code&lt;/a&gt; we see substantial&#xA;similarities in the overall organization of the code and almost exact&#xA;correspondence of many routines within it.&lt;/p&gt;&#xA;&lt;h3&gt;START and INIT&lt;/h3&gt;&#xA;&lt;p&gt;For example, the entry point in both versions is at address 0 and&#xA;contains &lt;code&gt;JMP INIT&lt;/code&gt;; in both cases the &lt;code&gt;INIT&lt;/code&gt; routine overwrites the&#xA;target of this &lt;code&gt;JMP&lt;/code&gt; with the address of a routine called &lt;code&gt;READY&lt;/code&gt; that&#xA;does a &amp;quot;warm start&amp;quot;. After that there are a couple of words storing&#xA;the addresses of routines to convert a floating point number to an&#xA;integer and vice versa.&lt;/p&gt;&#xA;&lt;p&gt;Here's the 8080 version from 1982:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        PUBLIC  START&#xA;START:&#xA;        PUBLIC  JMPINI&#xA;JMPINI: JMP     INIT                    ;INIT IS THE INTIALIZATION ROUTINE&#xA;                                        ;IT SETS UP CERTAIN&#xA;                                        ;LOCATIONS DELETES FUNCTIONS IF&#xA;                                        ;DESIRED AND&#xA;                                        ;CHANGES THIS TO JMP READY&#xA;                                        ;WARM START FOR ISIS&#xA;&#xA;                                        ;OF THE ROUTINE TO CONVERT [A,B]&#xA;                                        ;TO A FLOATING POINT NUMBER IN THE FAC&#xA;        DW      FRCINT                  ;TURN FAC INTO AN INTEGER IN [H,L]&#xA;        DW      MAKINT                  ;TURN [H,L] INTO A VALUE IN THE FAC&#xA;                                        ;SET VALTYP FOR INTEGER&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And the 6502 version from 1978:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;START:  JMP     INIT            ;INITIALIZE - SETUP CERTAIN LOCATIONS&#xA;                                ;AND DELETE FUNCTIONS IF NOT NEEDED,&#xA;                                ;AND CHANGE THIS TO &amp;quot;JMP READY&amp;quot;&#xA;                                ;IN CASE USER RESTARTS AT LOC ZERO.&#xA;RDYJSR: JMP     INIT            ;CHANGED TO &amp;quot;JMP STROUT&amp;quot; BY &amp;quot;INIT&amp;quot;&#xA;                                ;TO HANDLE ERRORS.&#xA;ADRAYI: ADR(AYINT)              ;STORE HERE THE ADDR OF THE&#xA;                                ;ROUTINE TO TURN THE FAC INTO A &#xA;                                ;TWO BYTE SIGNED INTEGER IN [Y,A]&#xA;ADRGAY: ADR(GIVAYF)&amp;gt;            ;STORE HERE THE ADDR OF THE&#xA;                                ;ROUTINE TO CONVERT [Y,A] TO A FLOATING&#xA;                                ;POINT NUMBER IN THE FAC.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3&gt;STROUT&lt;/h3&gt;&#xA;&lt;p&gt;Another example is the &lt;code&gt;STROUT&lt;/code&gt; routine, which clearly works in the&#xA;same way, modulo the differences in processor architecture, and even&#xA;has some comments that are nearly identical. Here's the 8080 version:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;;&#xA;; PRINT THE STRING POINTED TO BY [H,L] WHICH ENDS WITH A ZERO&#xA;; IF THE STRING IS BELOW DSCTMP IT WILL BE COPIED INTO STRING SPACE&#xA;;&#xA;STROUI: INX     H                       ;POINT AT NEXT CHARACTER&#xA;STROUT: CALL    STRLIT                  ;GET A STRING LITERAL&#xA;;&#xA;; PRINT THE STRING WHOSE DESCRIPTOR IS POINTED TO BY FACLO.&#xA;;&#xA;STRPRT: CALL    FREFAC                  ;RETURN TEMP POINTER BY FACLO&#xA;        CALL    GETBCD                  ;[D]=LENGTH [B,C]=POINTER AT DATA&#xA;        INR     D                       ;INCREMENT AND DECREMENT EARLY&#xA;                                        ;TO CHECK FOR NULL STRING&#xA;STRPR2: DCR     D                       ;DECREMENT THE LENGTH&#xA;        RZ                              ;ALL DONE&#xA;        LDAX    B                       ;GET CHARACTER TO PRINT&#xA;        CALL    OUTDO&#xA;        CPI     13&#xA;        CZ      CRFIN&#xA;        INX     B                       ;POINT TO THE NEXT CHARACTER&#xA;        JMP     STRPR2                  ;AND PRINT IT...&#xA;        PAGE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And here's the 6502 version:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;;&#xA;; PRINT THE STRING POINTED TO BY [Y,A] WHICH ENDS WITH A ZERO.&#xA;; IF THE STRING IS BELOW DSCTMP IT WILL BE COPIED INTO STRING SPACE.&#xA;;&#xA;STROUT: JSR     STRLIT          ;GET A STRING LITERAL.&#xA;;&#xA;; PRINT THE STRING WHOSE DESCRIPTOR IS POINTED TO BY FACMO.&#xA;;&#xA;STRPRT: JSR     FREFAC          ;RETURN TEMP POINTER.&#xA;        TAX                     ;PUT COUNT INTO COUNTER.&#xA;        LDYI    0&#xA;        INX                     ;MOVE ONE AHEAD.&#xA;STRPR2: DEX&#xA;        BEQ     PRTRTS          ;ALL DONE.&#xA;        LDADY   INDEX           ;PNTR TO ACT STRNG SET BY FREFAC.&#xA;        JSR     OUTDO&#xA;        INY&#xA;        CMPI    13&#xA;        BNE     STRPR2&#xA;        JSR     CRFIN           ;TYPE REST OF CARRIAGE RETURN.&#xA;        JMP     STRPR2          ;AND ON AND ON.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3&gt;PTRGET&lt;/h3&gt;&#xA;&lt;p&gt;Even routines that are different due to feature changes are pretty&#xA;clearly derived from common original source. For example, the &lt;code&gt;PTRGET&lt;/code&gt;&#xA;routine that that reads a variable name and fetches its value uses a&#xA;pair of zero-page memory locations in the 6502 version to store the&#xA;variable name, which is limited to two characters in that older&#xA;version of BASIC. The newer 8080 code allows up to 40 characters in a&#xA;variable name, but still stores the first two characters of the name&#xA;in the C and B registers (memory was used in the 6502 because it has&#xA;far fewer registers) and compares those first, only moving on to a&#xA;further comparison with the rest of the name in a memory buffer if&#xA;that fails.&lt;/p&gt;&#xA;&lt;p&gt;And of course there's the similarity in the comments and routine name&#xA;itself. The 8080 version:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; ROUTINE TO READ THE VARIABLE NAME AT THE CURRENT TEXT POSITION&#xA;; AND PUT A POINTER TO ITS VALUE IN [D,E]. [H,L] IS UPDATED&#xA;; TO POINT TO THE CHARACTER AFTER THE VARIABLE NAME.&#xA;; VALTYP IS SETUP. NOTE THAT EVALUATING SUBSCRIPTS IN&#xA;; A VARIABLE NAME CAN CAUSE RECURSIVE CALLS TO PTRGET SO AT&#xA;; THAT POINT ALL VALUES MUST BE STORED ON THE STACK.&#xA;; ON RETURN, [A] DOES NOT REFLECT THE VALUE OF THE TERMINATING CHARACTER&#xA;;&#xA;PTRGET: XRA     A                       ;MAKE [A]=0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And the 6502 version:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; ROUTINE TO READ THE VARIABLE NAME AT THE CURRENT TEXT POSITION&#xA;; AND  PUT A POINTER TO ITS VALUE IN VARPNT. [TXTPTR]&#xA;; POINTS TO THE TERMINATING CHARCTER.. NOT THAT EVALUATING SUBSCRIPTS&#xA;; IN A VARIABLE NAME CAN CAUSE RECURSIVE CALLS TO &amp;quot;PTRGET&amp;quot; SO AT&#xA;; THAT POINT ALL VALUES MUST BE STORED ON THE STACK.&#xA;;&#xA;PTRGET: LDXI    0               ;MAKE [ACCX]=0.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3&gt;Comparison with Other Object Code&lt;/h3&gt;&#xA;&lt;p&gt;Though we don't have original source for an 8080 version of Microsoft&#xA;BASIC from the same era as the 6502 source, we do have binaries that&#xA;can be disassembled. Comparing &lt;a href=&quot;http://altairbasic.org/&quot; rel=&quot;noreferrer&quot;&gt;this disassembly of Altair&#xA;BASIC 3.2&lt;/a&gt; we can also find substantial similarities in the&#xA;code (including all the routines mentioned above), though of course&#xA;there are no comments to compare.&lt;/p&gt;&#xA;&lt;p&gt;I myself have been working on a &lt;a href=&quot;https://github.com/0cjs/altair-680-basic&quot; rel=&quot;noreferrer&quot;&gt;disassembly of the 6800 BASIC&lt;/a&gt;&#xA;that Microsoft wrote for the Altair 680B after they'd written the 8080&#xA;basic for Altair's 8800 but probably before they started the 6502&#xA;version. Both ports were done by Ric Weiland, and again the 6800&#xA;version shows the same substantial similarities in code organization&#xA;and the details of how the particular routines work.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-07-27T09:12:05.833" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11854" PostTypeId="1" CreationDate="2019-07-27T16:05:06.027" Score="7" ViewCount="596" Body="&lt;p&gt;The Intel 8086 CPU could address up to 1 MB of memory using segmentation, and this CPU have 4 segment registers, which are &lt;code&gt;CS&lt;/code&gt; and &lt;code&gt;SS&lt;/code&gt; and &lt;code&gt;DS&lt;/code&gt; and &lt;code&gt;ES&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each segment in memory can have a maximum size of 64 KB, which means that if all 4 segment registers are used, then 256 KB of memory would be used, which leaves 768 KB of memory unused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how were the remaining 768 KB of memory used? was it possible to have many segments in memory of the same type, for example could we have 2 stack segments in memory, and we would modify the &lt;code&gt;SS&lt;/code&gt; register whenever we want to use a different stack segment?&lt;/p&gt;&#xA;" OwnerUserId="14821" LastEditorUserId="6794" LastEditDate="2019-07-31T15:46:14.937" LastActivityDate="2019-08-05T12:29:56.363" Title="Could the Intel 8086 CPU have many segments in memory of the same type?" Tags="&lt;history&gt;&lt;memory-layout&gt;&lt;cpu&gt;&lt;8086&gt;" AnswerCount="5" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11856" PostTypeId="2" ParentId="11854" CreationDate="2019-07-27T16:18:32.160" Score="2" Body="&lt;p&gt;8086 assemblers and compilers supported different &lt;a href=&quot;https://faculty.kfupm.edu.sa/COE/aimane/assembly/pagegen-39.aspx.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;memory models&lt;/a&gt; where a program could have one or more code segments combined with one or more data segments.  For example, a small model program would have one code segment (cs) and one data segment (ds/es).  A large model program would have multiple code segments (cs, using a far jump), multiple data segments (with the segment in one of ds or es).  The number (one/multiple) of stack segments would generally match the number of data segments (one/multiple).&lt;/p&gt;&#xA;" OwnerUserId="660" LastActivityDate="2019-07-27T16:18:32.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11857" PostTypeId="2" ParentId="11854" CreationDate="2019-07-27T16:26:00.060" Score="11" Body="&lt;p&gt;Segment registers can be changed, thus allowing access to full address space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to doing this ad hoc, there are different ways to model this, called memory models:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;small: code and data both reside in one segment, all code and data pointers are 16bit&lt;/li&gt;&#xA;&lt;li&gt;medium: single data segment, multiple code segments (code pointers 32bit)&lt;/li&gt;&#xA;&lt;li&gt;compact: single code segment, multiple data segments (data pointers 32bit)&lt;/li&gt;&#xA;&lt;li&gt;large: multiple code and data segments (all pointers 32bit)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;16bit pointers consist of offset only, and are called near pointers. 32bit pointers consist of segment and offset, and are called far pointers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For small and medium memory models, stack and data segments were always the same. This allowed accessing local and global variables as well as heap allocated memory within same segment and thus with near pointers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using far pointers is slower as segment registers need to be modified each time they are used, so their use is discouraged unless explicitly needed. &lt;/p&gt;&#xA;" OwnerUserId="4378" LastEditorUserId="4378" LastEditDate="2019-07-31T10:06:49.513" LastActivityDate="2019-07-31T10:06:49.513" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="11858" PostTypeId="2" ParentId="11854" CreationDate="2019-07-27T16:35:00.360" Score="8" Body="&lt;p&gt;The 8086 has 20 address pins so can access 1 MB of memory.&amp;nbsp; To be clear, the 20 bit address space is linear, and the memory subsystem doesn't know about segmentation or segment registers &amp;#8212; it just sees the 20 address pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The values put on the 20 address pins are generated by &lt;code&gt;segment register&lt;/code&gt; * 16 + &lt;code&gt;offset&lt;/code&gt;, where &lt;code&gt;offset&lt;/code&gt; comes from a regular register or other addressing mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is the programming model that is awkward since it is basically a 16-bit processor.&amp;nbsp; To access more you need to hold/store at least 20 bits per pointer, and rounding up pointer size to 32-bits is the most practical.&amp;nbsp; For pointers larger than 16-bits, pointer dereference and pointer assignment require multiple instruction sequences (e.g. dereference involves setting segment registers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@tuomas nicely details the various programming model options.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastEditorUserId="7985" LastEditDate="2019-08-05T12:29:56.363" LastActivityDate="2019-08-05T12:29:56.363" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11859" PostTypeId="1" AcceptedAnswerId="11860" CreationDate="2019-07-27T16:51:00.823" Score="8" ViewCount="709" Body="&lt;p&gt;The Macintosh 128k, 512k, and Plus use a DE-09 Serial port for the mouse. Is there some proprietary data-transfer method? Or is any DE-09 Serial mouse compatible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore: has anyone documented this data-transfer protocol?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: the reason I ask is because I'd like to build a custom mouse-input system (and eventually keyboard), perhaps over bluetooth. I am brainstorming a raspberry pi → Macintosh. Please comment with any insight.&lt;/p&gt;&#xA;" OwnerUserId="14823" LastActivityDate="2019-07-27T21:38:05.293" Title="Will any serial mouse connect to Classic Macs?" Tags="&lt;apple-macintosh&gt;&lt;serial&gt;&lt;mouse&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11860" PostTypeId="2" ParentId="11859" CreationDate="2019-07-27T17:56:00.523" Score="19" Body="&lt;p&gt;The pre-ADB Macintoshes use a simple quadrature-encoded mouse input, no formal serial protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quadrature encoding is a simple, physical process, that lends itself to a convenient cheat if you're synthesising input. Picture a cog, with an optical sensor pointing through the grooves. If you observed the digital output of that sensor, you'd be able to tell how fast the cog is turning, which is half the problem solved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Disclaimer: it's not really a cog, but that's an easy image)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What a quadrature encoder does is it uses two sensors, half a groove apart. Then if the cog is turning one way you'd expect to see the time-ordered input:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sensor 1 on, sensor 2 on, sensor 1 off, sensor 2 off, sensor 1 on, etc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But if it's turning the other way, you'd instead see:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sensor 2 on, sensor 1 on, sensor 2 off, sensor 1 off, sensor 2 on, etc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which the Macintosh (and most other similar computers) collapse into a simple process:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;every time sensor 1 changes state, observe the the mouse has moved by one pixel;&lt;/li&gt;&#xA;&lt;li&gt;if sensor 2 has the same value as sensor 1 when sensor 1 has just changed, that's one pixel left; otherwise it's one pixel right.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(for appropriate values of 'left' and 'right', of course)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is specifically embodied in the Macintosh by having inputs 'X1' and 'Y1' wired up to its serial controller chip, the SCC, to generate interrupts anytime they transition, and having inputs 'X2' and 'Y2' wired up as inputs to the 6522 VIA, which the processor manually polls upon receiving the X1 or Y1 interrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the shortcut I currently take in my emulator is very straightforward:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;keep a couple of values representing &quot;x offset not yet communicated&quot; and &quot;y offset not yet communicated&quot;, into which modern-style instantaneous mouse delta reports are accumulated;&lt;/li&gt;&#xA;&lt;li&gt;when motion is outstanding, toggle X1 and Y1 at a fixed frequency that's close to the maximum rate the Macintosh can process the relevant interrupts at; and&lt;/li&gt;&#xA;&lt;li&gt;upon each toggling, set X2 and Y2 as either the same value as X1 or Y1, if motion is leftward and downward, or the opposite value, if motion is rightward or upward.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That's a cheat coupled to the known software implementation of mouse input reading — really X2 and Y2 should mutate in between changes to X1 and Y1, rather than in lockstep with them. I will banish it from my emulator at some point, but it definitely works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I unscientifically arrived at a figure of toggling X1/Y1 every 1,250 cycles relative to the internal 7,833,600 Hz clock. Obviously you don't have access to that clock, but that implies that ~6266 Hz is not too fast for handling mouse input. My thinking here was that since I'm receiving mouse pointer movements of multiple pixels atomically, feeding them to the emulated Macintosh &quot;as close to atomically as possible&quot; is technically as accurate as the available information, even if it's nothing like how someone would move a real mouse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the pinout, per &lt;a href=&quot;http://old.pinouts.ru/Inputs/MacMouse_pinout.shtml&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;pin 5 is X1, the one that indicates velocity of x movement;&lt;/li&gt;&#xA;&lt;li&gt;pin 4 is X2, the one that — through comparison to X1 — indicates direction of x movement;&lt;/li&gt;&#xA;&lt;li&gt;pin 9 is Y1, for velocity of y movement;&lt;/li&gt;&#xA;&lt;li&gt;pin 8 is Y2, for direction of y movement exactly as per x.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Otherwise it looks line pins 1 and 3 are grounds, for the chassis and electronics respectively, pin 2 is +5v, pin 7 is for the button, and 6 isn't connected to anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in case it's any help, &lt;a href=&quot;https://github.com/TomHarte/CLK/blob/master/Inputs/QuadratureMouse/QuadratureMouse.hpp&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; is all there is to the virtual mouse electronics in the current version of my emulator. It accepts multiple buttons because I'm sure I'll reuse it for other machines. The actual stuff of feeding the SCC and 6522 isn't in that file, naturally, it's Macintosh-specific wiring outside of the mouse itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EXAMPLE:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One-dimensional pseudocode:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int x_delta;&#xA;&#xA;func add_x_motion(int number_of_pixels) {&#xA;    x_delta += number_of_pixels;&#xA;}&#xA;&#xA;// update() is called by a timer roughly 6,000 times/second; &#xA;// the timer needn't be very precise.&#xA;func update() {&#xA;    // Do nothing if no pixels are left to communicate.&#xA;    if(!x_delta) return;&#xA;&#xA;    // Toggle x1 (/pin 5) to indicate a single pixel's movement.&#xA;    toggle_x1_output();&#xA;&#xA;    // Set x2 (/ pin 4) to the same level as x1 to indicate motion&#xA;    // to the left. Set it to the opposite level to indicate motion&#xA;    // to the right. And then reduce `x_delta` appropriately.&#xA;    if(x_delta &amp;lt; 0) {&#xA;       set_x2_output(get_x1_output());&#xA;       ++ x_delta;&#xA;    } else {&#xA;       set_x2_output(!get_x1_output());&#xA;       -- x_delta;&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-07-27T21:38:05.293" LastActivityDate="2019-07-27T21:38:05.293" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="11861" PostTypeId="2" ParentId="11839" CreationDate="2019-07-27T18:04:38.017" Score="2" Body="&lt;p&gt;No, the original 8086 only has real mode, which is maintained in all later x86 CPUs. In this mode, memory is only accessible using physical addresses, although it's still not exactly a flat address space because of segmentation.&lt;/p&gt;&#xA;" OwnerUserId="14748" LastActivityDate="2019-07-27T18:04:38.017" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11862" PostTypeId="2" ParentId="8436" CreationDate="2019-07-27T18:09:13.170" Score="4" Body="&lt;p&gt;If you're looking for an N-Gage emulator, this seems to be the most active project at the moment.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/EKA2L1/EKA2L1&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/EKA2L1/EKA2L1&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As far as I'm aware, you do in fact need an emulator for the N-Gage itself to run games.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; The EKA2L1 project has finally developed an experimental Symbian OS emulator. The emulator currently emulates Symbian OS's EKA1 and EKA2 behavior, and reimplement most of its critical app servers. It can already boot many EKA2's apps and games, with EKA1 being worked on at the moment.&lt;/p&gt;&#xA;" OwnerUserId="14748" LastEditorUserId="11298" LastEditDate="2020-10-25T15:27:57.853" LastActivityDate="2020-10-25T15:27:57.853" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11863" PostTypeId="1" AcceptedAnswerId="11865" CreationDate="2019-07-27T18:25:37.357" Score="4" ViewCount="381" Body="&lt;p&gt;The Commodore 64 was very flexible in terms of how RAM could be controlled. ROMs and I/O devices could easily be swapped out by setting bits in the first two addresses of memory. The VIC-20's ROMs and I/O devices seem to be hardwired to certain addresses, and can't be disabled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Was there any sort of bank-switching(?) RAM expansion that enabled the VIC-20 to break the 40 KiB Barrier?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(40 KiB is whats let of the address space after ROM and I/O)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not looking for any modern development, but contemporary expansions (i-e- of the 1980s. Of course everything with more than 64 KiB is as wellcome.&lt;/p&gt;&#xA;" OwnerUserId="14748" LastEditorUserId="6659" LastEditDate="2019-07-27T18:48:33.047" LastActivityDate="2019-07-27T19:00:24.000" Title="Was there any VIC-20 expansion to bring memory beyond the default maximum of 40 KiB?" Tags="&lt;hardware&gt;&lt;memory&gt;&lt;commodore&gt;&lt;vic-20&gt;&lt;ram&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11864" PostTypeId="2" ParentId="11854" CreationDate="2019-07-27T18:30:56.597" Score="5" Body="&lt;p&gt;As already discussed, the 8086's memory addressing is a little... weird.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware addressing was 20-bit and bytewise, which gives you the 2&lt;sup&gt;20&lt;/sup&gt; addressable bytes (1 MiB).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To the software side, this was exposed as a segment (later, when the 80286 introduced protected mode, renamed a &lt;em&gt;selector&lt;/em&gt;, but by default in real mode selectors were set up to work identically to segments) and an offset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The physical address was generated by taking the segment, left-shifted by four bits (not multiplied by four, as another answer claims), and then adding the offset, then taking the lowest (most significant) 20 bits of the result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It follows that &lt;em&gt;any given physical memory address can be accessed via a number of different segment:offset pairs&lt;/em&gt;. There is no difference to the CPU-RAM interface between, say, F000:FFF0 and FFFF:0. (We can see this as F000&amp;lt;&amp;lt;4 becomes F0000, add FFF0 gives FFFF0; likewise, FFFF&amp;lt;&amp;lt;4 is FFFF0, add 0 gives FFFF0.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a consequence, it also follows that segments can overlap. In the above example, segments F000h and FFFFh overlap at address FFFF0h. In general, every segment selects a sliding 64 KiB window of the 1 MiB address space, shifted 16 bytes for each segment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory models are a distraction, here; they mostly influence &lt;em&gt;which segment value is the default&lt;/em&gt; for a particular type of operation, and which type of addressing is normally used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;To access a particular physical address, generally speaking, an appropriate segment register is loaded with the correct segment, and then a normal segment:offset access is performed&lt;/strong&gt; via that segment register. Some instructions (such as jumps) can or even require the programmer to bypass the segment load operation and specify the segment directly in the instruction; other instructions can use only a specific segment register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since loading a segment register is a relatively invasive operation (as it changes global CPU state which you'll potentially need to reset before doing something else), it's something you'd try to avoid. By carefully choosing how you're addressing memory, many segment changes could be avoided, or restricted to the extra segment register, ES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The CPU doesn't care about the &lt;em&gt;type&lt;/em&gt; of segment&lt;/strong&gt; (on the 8086/8088, there is nothing to mark a stack segment as different from a code or data segment; features like NX, or read-only segments, came later), but some operations have restrictions on which segment registers they can be used with. For example, you cannot perform an intersegment jump instruction into code pointed at by DS, but that's a restriction of the jump instruction, not the CPU. If for some strange reason you really want to jump to DS:IP+4, you just need to put that address in a place where a jump instruction can use it; there is no need to do anything to the memory itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Back in the day, the ability of the 8086/8088 to provide these different windows into the address space was sold as a feature by Intel,&lt;/strong&gt; proposing that it would ease the development of multitasking or multiuser environments. For example, from the iAPX 86/88 user's manual, page 2-11:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The segmented structure of the 8086/8088&#xA;  memory space supports modular software design&#xA;  by discouraging huge, monolithic programs. The&#xA;  segments also can be used to advantage in many&#xA;  programming situations. Take, for example, the&#xA;  case of an editor for several on-line terminals. A&#xA;  64k text buffer (probably an extra segment) could&#xA;  be assigned to each terminal. A single program&#xA;  could maintain all the buffers by simply changing&#xA;  register ES to point to the buffer of the terminal&#xA;  requiring service.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="357" LastActivityDate="2019-07-27T18:30:56.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11865" PostTypeId="2" ParentId="11863" CreationDate="2019-07-27T18:44:51.227" Score="4" Body="&lt;p&gt;There were several cards, in the mid 1980s, based on use of 64 KiB. Except that it was usually not to use full 64 Kib, but to get RAM at the right location some (game) program wanted it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example &lt;a href=&quot;http://vic20.de/html/64k_karten.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; shows three different boards of that time frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main issue with RAM in the VIC20 is less the amount of RAM, than that its use swaps around, depending how much memory is installed. So more care was taken to enable different configurations with simple switching. There is an overview on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_VIC-20#Memory_expansion&quot; rel=&quot;nofollow noreferrer&quot;&gt;VIC20 Wiki page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;And yes, there is of course new stuff like the fine crafted &lt;a href=&quot;https://www.c64-wiki.de/wiki/VC-20_Final_Expansion&quot; rel=&quot;nofollow noreferrer&quot;&gt;Final Expansion&lt;/a&gt; offering half a megabyte :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-27T19:00:24.000" LastActivityDate="2019-07-27T19:00:24.000" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11866" PostTypeId="1" CreationDate="2019-07-27T23:45:25.137" Score="10" ViewCount="1858" Body="&lt;p&gt;I want to make a homebrew 8-bit computer and I want to include a sound chip in it. It needs to be as cheap as possible (under 5$) and I also want it to be possibly controlled by an Arduino or ATmega-based microcontrollers for some testing and other projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the minimum specifications I need:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;at least 2 voices independently programmable&lt;/li&gt;&#xA;&lt;li&gt;can produce square waves, triangle waves, sawtooth, and noise&lt;/li&gt;&#xA;&lt;li&gt;an ADSR envelope (optional)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Something really cool would be putting a SID chip in there, but it is too expensive for me. I could also use a YM3812 chip, but I would want to use something even cheaper to further reduce cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may not be in the first revision of my computer but I would want to take all the circuitry needed for the sounds and put them in a separated sound card that would plug in a socket of the motherboard.&lt;/p&gt;&#xA;" OwnerUserId="14824" LastEditorUserId="14824" LastEditDate="2019-07-28T17:35:30.107" LastActivityDate="2019-10-29T01:59:11.767" Title="Low-cost sound chip" Tags="&lt;hardware&gt;&lt;sound&gt;" AnswerCount="7" CommentCount="16" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11867" PostTypeId="2" ParentId="11866" CreationDate="2019-07-28T00:10:01.307" Score="15" Body="&lt;p&gt;May I recommend the TI &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_SN76489&quot; rel=&quot;nofollow noreferrer&quot;&gt;SN76489&lt;/a&gt;, then? 3 channels + noise, clocked from a 4 MHz input. Small, cheap. Sounds like chiptunes. Simple to program. Easy to get surplus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only drawbacks:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;it powers on producing a loud continuous tone. You need logic at startup to tell it to make some other noise, or preferably no noise at all. Hence the BBC Micro's two-tone &lt;a href=&quot;https://www.youtube.com/watch?v=Nd9MzxIbuQI&quot; rel=&quot;nofollow noreferrer&quot;&gt;startup sound&lt;/a&gt;: the first tone is the SN76489's startup sound, the second is the Beeb's generated beep to shut it up.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;square wave only. Might be a dealbreaker.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="439" LastEditorUserId="7424" LastEditDate="2019-07-28T15:17:28.430" LastActivityDate="2019-07-28T15:17:28.430" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11868" PostTypeId="2" ParentId="11866" CreationDate="2019-07-28T01:56:08.313" Score="14" Body="&lt;p&gt;If you're comfortable with programming microcontrollers already, I suggest you just &lt;strong&gt;use another microcontroller&lt;/strong&gt; and adapt its output to be an audio signal.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can use a DSP-type with an audio output (Microchip dsPIC has stereo audio out off the top of my head, your favourite brand may have their own) if you want potential stereo, fine grained control with sampled waveforms (like an Amiga's tracker-style playback), or any kind of simple algorithmic waveform you want (give yourself two squares, two pulses, two triangles in software and there you go).&lt;/li&gt;&#xA;&lt;li&gt;You could use a very basic MCU with just GPIOs and have a n-channel square wave output (without volume control) with a basic resistor summer. (The Ocelot Arcade System is a dsPIC33 design that creates its four channel square audio output with just spare gpios used in this manner)&lt;/li&gt;&#xA;&lt;li&gt;If you're good with analogue electronics you could improve the previous option by using your super basic sound MCU to mastermind a small analogue section with 555 timers, caps, opamps, etc, to ultimately produce a sophisticated 'synth card' with different primitive waveform channels mixed together, all abstracted behind the sound MCU's basic interface you design.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The advantages of using a microcontroller in this way:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;very very low cost (you could get basically anything you want for 25c thereabouts, much cheaper than any surplus chip, as requested in your question)&lt;/li&gt;&#xA;&lt;li&gt;high availability - a contemporary chip will have many suppliers and reliable stock as compared to surplus as-and-when availability, and you can get it at the same time as the rest of your components&lt;/li&gt;&#xA;&lt;li&gt;a variety of form factors and packages (surface mount or dip, instead of restricted to dip)&lt;/li&gt;&#xA;&lt;li&gt;a higher likelihood of being voltage compatible with your main microcontroller (old sound chips are 5V usually, a modern MCU is likely 3.3V)&lt;/li&gt;&#xA;&lt;li&gt;potentially higher resilience and forgiveness - using a rare SID is nice, but I'd be a lot more comfortable throwing around easily replaceable 2019-tech microcontrollers in experimental circuits. Old ASIC chips can self destruct under normal conditions from their own heat; I believe I've read guides for C64 buffs that recommend  you ought to apply heat sinks to them etc.&lt;/li&gt;&#xA;&lt;li&gt;easier assimilatability into your design - you can use a spi channel to communicate asynchronously easily, instead of the old-style parallel access with many register writes and obtuse 'knock' combinations to push data into your sound chip byte by byte.&lt;/li&gt;&#xA;&lt;li&gt;a fun project programming the mixer/behaviour of the sound MCU yourself :) (or you can use someone else's firmware as if it were a reprogrammable dedicated sound chip. Now you would have the same experience as programming a sound chip except you'd be using whatever physical and software interface this sound firmware author provided for you)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As a compromise, you may be surprised to find that there are sound firmwares for certain MCUs that specifically emulate the capabilities, signature sound and (as much as practically possible) physical interface of specific old sound chips. A 28 pin MCU with lots of IO pins can be very close to a SID, FM or PSG style chip in both form and use if you want it to be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also see this similar question on EE stack&#xA;&lt;a href=&quot;https://electronics.stackexchange.com/questions/98003/where-have-the-8-bit-sound-chips-gone&quot;&gt;https://electronics.stackexchange.com/questions/98003/where-have-the-8-bit-sound-chips-gone&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that question, the asker mentions using a modern Parallax Propellor MCU to provide SID, FM or PSG sound in their project.&lt;/p&gt;&#xA;" OwnerUserId="14825" LastEditorUserId="14825" LastEditDate="2019-07-28T02:39:51.427" LastActivityDate="2019-07-28T02:39:51.427" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11869" PostTypeId="2" ParentId="11848" CreationDate="2019-07-28T03:27:47.293" Score="8" Body="&lt;p&gt;The original IBM 5150 Personal Computer (the IBM PC) connected the Non-Maskable Interrupt to the I/O Check signal, which could be driven by an add-in card, or by the on-board memory. If the systems memory detected a parity error, it would trigger a NMI, and the systems software would halt the machine and display an on screen error. You can read about this in the IBM PC Technical Reference Manual.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM decided to do this because in a business setting they felt it was better to crash than to provide an incorrect computational result. Imagine if a payroll run added $32768.00 to someones paycheck due to a single-bit flip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern PC systems still use NMI as a response to PCIe errors.  However consumer grade computers no longer have parity protected DRAM, and server grade systems use ECC that no only detects, but corrects errors.  These errors are reported though a new mechanism called the Machine Check Architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Funny story... years ago Microsoft engineers discovered they could deliberately blue screen windows by shorting out the A1/B1 pins (IO Check and GND) on a computers ISA slot. This was a helpful debug aid when needing to halt a hung computer (the blue screen activated the windows kernel debugger). When the ISA slot was replaced with PCI, some manufactures added a special button to trigger an NMI so that this debug 'hack' would not be lost.&lt;/p&gt;&#xA;" OwnerUserId="9123" LastActivityDate="2019-07-28T03:27:47.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11870" PostTypeId="2" ParentId="11866" CreationDate="2019-07-28T08:07:42.993" Score="3" Body="&lt;p&gt;Sounds like a job for SAA1099P. It is a 6 channel square wave tone genrator with stereo output. Each channel has volume control and it includes two envelope generators and two noise channels. While it directly does not support triagle and sawtooth waveforms, the envelope generator has these waveforms so low frequency basses are available as triangle and sawtooth.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2019-07-28T14:45:49.643" LastActivityDate="2019-07-28T14:45:49.643" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11871" PostTypeId="2" ParentId="2521" CreationDate="2019-07-28T12:09:57.920" Score="3" Body="&lt;p&gt;Hi we've started this project for new Amiga-style keyboards and mice here: &lt;a href=&quot;https://www.simulant.uk/input/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.simulant.uk/input/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14828" LastActivityDate="2019-07-28T12:09:57.920" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11872" PostTypeId="1" AcceptedAnswerId="11873" CreationDate="2019-07-28T12:14:19.643" Score="3" ViewCount="423" Body="&lt;p&gt;I have a really basic question. I have to design an 65C02-based personal computer for a school project. I have to draw my own footprint for the 65C02. My question is what type of pin is the IRQB (Interrupt) pin? I know what the purpose of the pin is. I have no idea if it is Input or Output... or Bidirectional. The datasheets have no mentions on what each pin is as far as type.&lt;/p&gt;&#xA;" OwnerUserId="14827" LastEditorUserId="10260" LastEditDate="2019-07-28T12:32:21.290" LastActivityDate="2019-07-29T02:32:45.883" Title="Interrupt pin type on the 6502" Tags="&lt;6502&gt;&lt;interrupt&gt;&lt;microprocessor&gt;&lt;65c02&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11873" PostTypeId="2" ParentId="11872" CreationDate="2019-07-28T12:27:05.853" Score="3" Body="&lt;p&gt;The interrupt pin is an input.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-07-28T12:27:05.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11874" PostTypeId="2" ParentId="11872" CreationDate="2019-07-28T14:05:16.030" Score="5" Body="&lt;p&gt;The &lt;a href=&quot;http://datasheets.chipdb.org/Western%20Design/W65C02S.pdf&quot; rel=&quot;noreferrer&quot;&gt;W65C02 data sheet&lt;/a&gt; does explain it (p. 9):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;3.4     Interrupt Request (IRQB)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The Interrupt Request (IRQB) input signal is used to request that an interrupt sequence be initiated. The program&#xA;  counter (PC) and Processor Status Register (P) are pushed onto the stack and the IRQB disable (I) flag is set to a &quot;1&quot;&#xA;  disabling further interrupts before jumping to the interrupt handler. These values are used to return the processor to&#xA;  its original state prior to the IRQB interrupt. The IRQB low level should be held until the interrupt handler clears&#xA;  the interrupt request source. When Return from Interrupt (RTI) is executed the (I) flag is restored and a new&#xA;  interrupt can be handled. If the (I) flag is cleared in an interrupt handler, nested interrupts can occur. The Wait-for-&#xA;  Interrupt (WAI) instruction may be used to reduce power and synchronize with, as an example timer interrupt&#xA;  requests.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So it not only tells you that this is an input signal, it also explains how long it should be held at low level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The General Timing Diagram (Figure 6-3, p. 26) has some more timing information for IRQB.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-07-28T14:05:16.030" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11875" PostTypeId="2" ParentId="11866" CreationDate="2019-07-28T15:05:33.910" Score="7" Body="&lt;p&gt;There is a project called SwinSID that uses an ATMega to replicate the original C64 SID chip here: &lt;a href=&quot;http://www.swinkels.tvtom.pl/swinsid/&quot; rel=&quot;noreferrer&quot;&gt;SwinSID based on ATMEGA88&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could conceivably use an ATMega with the firmware developed by this project to get what you are looking for.  I've no idea if this solution is like is using a bazooka to shoot a fly, or what the cost looks like, but at a minimum you might get some ideas from the project.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2019-07-28T15:05:33.910" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11876" PostTypeId="2" ParentId="11866" CreationDate="2019-07-28T16:36:58.910" Score="10" Body="&lt;h1&gt;AY-3-8910&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/4/40/AY-3-8910.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/General_Instrument_AY-3-8910&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/General_Instrument_AY-3-8910&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.vgmpf.com/Wiki/index.php/AY-3-8910&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.vgmpf.com/Wiki/index.php/AY-3-8910&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pretty popular chip used in arcade machines and home computers. eBay has clones for quite cheap.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Yamaha YM3812 (OPL2)&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/b/b2/Yamaha_YM3812.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Yamaha_YM3812&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Yamaha_YM3812&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.vgmpf.com/Wiki/index.php?title=YM3812&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.vgmpf.com/Wiki/index.php?title=YM3812&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Used in home computer sound cards in the late 90s. eBay has many chips still floating around for cheap.&lt;/p&gt;&#xA;" OwnerUserId="8230" LastEditorUserId="8230" LastEditDate="2019-10-29T01:59:11.767" LastActivityDate="2019-10-29T01:59:11.767" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11877" PostTypeId="1" CreationDate="2019-07-28T17:41:46.850" Score="41" ViewCount="9280" Body="&lt;p&gt;Was the SysRq key ever used on any common operating system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Google tells me it wasn't. But then how did it end up on so many keyboards?&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="10566" LastEditDate="2019-07-29T15:21:39.750" LastActivityDate="2019-07-29T15:27:54.180" Title="How did the SysRq key get onto modern keyboards if it's rarely used?" Tags="&lt;history&gt;&lt;keyboards&gt;" AnswerCount="6" CommentCount="15" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11878" PostTypeId="1" AcceptedAnswerId="11903" CreationDate="2019-07-28T17:56:25.470" Score="32" ViewCount="16220" Body="&lt;p&gt;Example situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are using a program in Windows 95 and screen goes blue only for you to restart the whole computer&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are using a program in Windows 7 and the program stops responding only to be stopped by the task manager.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was there a difference?&lt;/p&gt;&#xA;" OwnerUserId="8033" LastEditorUserId="10260" LastEditDate="2019-07-29T05:01:27.437" LastActivityDate="2020-05-07T16:53:03.563" Title="Why did Windows 95 crash the whole system but newer Windows only crashed programs?" Tags="&lt;operating-system&gt;&lt;windows&gt;" AnswerCount="6" CommentCount="17" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11879" PostTypeId="2" ParentId="11877" CreationDate="2019-07-28T18:29:29.233" Score="28" Body="&lt;p&gt;SysRq is popular because the PC AT was popular, and its clones were too. PC clone manufacturers copied all the features of the computers they were cloning, with the exception of BASIC in ROM, and that included SysRq — both the physical key, and its associated handling in ROM (&lt;a href=&quot;http://delorie.com/djgpp/doc/rbinter/id/30/15.html&quot; rel=&quot;noreferrer&quot;&gt;interrupt 0x15 function 0x85&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any OS or software running on the AT could end up relying on SysRq, so it became entrenched, even though in practice it wasn’t used much.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-07-28T18:29:29.233" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11880" PostTypeId="2" ParentId="3045" CreationDate="2019-07-28T18:39:30.303" Score="3" Body="&lt;p&gt;In order not to trigger the NMI with every contact bounce when hitting the Restore Key, there is a simple RC filter. The timing constant is marginal for the purpose, though. This is why the key has to be tapped and not just pressed down like any other. &#xA;Back in the day there were some tutorials on which parts to exchange to make it behave normally.&#xA;As to why Commodore never changed the parts themselves, several stories made the rounds. Some of the people involved liked the behaviour, or others in the chain were too lazy to get the changes into production. &lt;/p&gt;&#xA;" OwnerUserId="14833" LastActivityDate="2019-07-28T18:39:30.303" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11881" PostTypeId="2" ParentId="11878" CreationDate="2019-07-28T19:24:08.427" Score="37" Body="&lt;p&gt;The decision about whether to kill a process or crash the OS generally depends on whether the problem can be isolated to the process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if a running process in user mode attempts to read from an address that's not present in its address space, that's not going to affect anything else. The process can be terminated cleanly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the other extreme, if the file system running in kernel mode discovers that some data structure is not as expected, then it is wise to crash the entire system immediately, because the consequence of corrupt in-memory control structures could be loss of disk data, and that's the worst thing that could happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With specific respect to the Windows NT (-2000, -XP, -7) family: the OS was designed with good process isolation from the beginning. For Windows 9x, the heritage of Windows up through 3.x required some compromises in the name of compatibility.  In particular, the first megabyte of address space is common to all processes: corruption there can kill the whole system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TL;DR - process isolation is a day-0 design issue.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-07-28T19:24:08.427" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="11882" PostTypeId="2" ParentId="3045" CreationDate="2019-07-28T20:58:46.093" Score="2" Body="&lt;p&gt;There are very good answers describing the functions of C64's special keys. But nobody mentioned the modern counterparts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;kbd&gt;C=&lt;/kbd&gt; is a modifer key. It is used to bring additional PETSCII characters and also to change text color. Obviously, it has branding function, too. Modern counterparts can be &lt;kbd&gt;⌘&lt;/kbd&gt; (Old Apple key) or Windows key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;kbd&gt;run/stop&lt;/kbd&gt; Normal function of this key is to stop running program listings or basic programs. Modern counterpart is &lt;kbd&gt;ESC&lt;/kbd&gt;. When used in combination with shift it loads the first program from datasette. There is no modern day counterpart of this function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;kbd&gt;Clr/Home&lt;/kbd&gt; Home function is identical to modern keyboard Home button. ClR is same as CLS command in Dos console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;kbd&gt;Restore&lt;/kbd&gt; button, also called as soft-reset, returns the computer into the initial opening state without clearing the memory. It is very useful debugging/or hacking tool. Not used much by the gamers as the key was mostly disabled by the game developers as the first step of copy protection efforts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware triggered soft-reset idea carried over to Amiga as &lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;Left-Amiga&lt;/kbd&gt;+&lt;kbd&gt;Right-Amiga&lt;/kbd&gt;. In some ways it can be seen as a variation of modern &lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;ALT&lt;/kbd&gt;+&lt;kbd&gt;DEL&lt;/kbd&gt;&lt;/p&gt;&#xA;" OwnerUserId="3422" LastActivityDate="2019-07-28T20:58:46.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11883" PostTypeId="2" ParentId="11877" CreationDate="2019-07-28T23:49:03.973" Score="18" Body="&lt;p&gt;I think you're coming at this kind of backwards. The commonly used keys are commonly used &lt;em&gt;because&lt;/em&gt; they're on keyboards and are widely available. Software follows hardware in this instance. The system request key was put there because the hardware designers thought it would be useful, and even if they were wrong, removing keys from the standard keyboard as dictated by whatever IBM was doing would mean introducing potential incompatibilities.&lt;/p&gt;&#xA;" OwnerUserId="14748" LastActivityDate="2019-07-28T23:49:03.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11884" PostTypeId="2" ParentId="11872" CreationDate="2019-07-29T02:32:45.883" Score="1" Body="&lt;p&gt;An interrupt pin of a CPU will always be an &lt;strong&gt;Input&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all, it's whole purpose is to tell the CPU about an interrupt pending. Wouldn't work if it's an output, would it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-07-29T02:32:45.883" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11885" PostTypeId="2" ParentId="11878" CreationDate="2019-07-29T09:12:26.813" Score="11" Body="&lt;p&gt;Although Windows 95 introduced support for 32 bit applications with memory protection, it was still somewhat reliant on MS DOS. For example, where native 32 bit drivers were not available, it used 16 bit DOS drivers instead. Even 32 bit applications had to be synchronized with the 16 bit DOS environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A fault in the DOS part of the system would bring the whole thing crashing down. 16 bit DOS applications do not have any meaningful memory protection or resource management and a crash cannot be recovered in most instances. And since even 32 bit applications had to interact with DOS components, they were not entirely immune either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another major cause of instability was that 32 bit drivers ran inside the Windows kernel (the core of the system). That reduced the amount of memory protection they had, and meant bugs would crash or corrupt the kernel too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the time Windows 7 came around drivers had mostly been moved out of the kernel and faults could be recovered from similar to an application crashing. There are some exceptions such as low level storage drivers.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-07-29T09:12:26.813" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11886" PostTypeId="2" ParentId="11877" CreationDate="2019-07-29T09:14:43.147" Score="0" Body="&lt;p&gt;History. It was on the original IBM keyboard for the IBM PC. Later, IBM rearranged the keys on the keyboard, but they kept the original keys. Most keyboard manufacturers copied the IBM layout because &quot;IBM compatibility&quot; was a big deal back then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are lots of useless keys on standard keyboards. There's the entire &quot;numeric keypad&quot; with the number-key arrangement upside down. (OK, accountants probably use it.) There's the Caps Lock key, whose existence is an annoying nuisance for most people.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a &lt;strong&gt;really&lt;/strong&gt; annoying keyboard, take a look at the Swiss keyboard. There's a key devoted to  § and ° , and in order to make room for ü and some accented letters, it sacrifices | and ~ while also requiring awkward alt-key combinations for {}.&lt;/p&gt;&#xA;" OwnerUserId="14837" LastActivityDate="2019-07-29T09:14:43.147" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="11887" PostTypeId="2" ParentId="11825" CreationDate="2019-07-29T09:37:09.703" Score="2" Body="&lt;p&gt;There are already good answers, so I just add a few thoughts. But first, to make this a complete answer, the basic concept:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're doing all the SID register updates from an ISR (interrupt service routine) that's triggered regularly. That's by the way the &quot;lowest level&quot; progamming model to achieve &lt;em&gt;some&lt;/em&gt; sort of parallelism. Other things that should work in the background (like e.g. querying input devices like keyboard, joystick, mouse) are often implemented in ISRs as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yes, basically it's simple. Whether you use a music editor generating some code or you write all the code yourself, it's always the same scheme: One routine initializes the sound chip and some internal data, this is only called once to start the music. The other routine is designed to be called regularly and updates registers as needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you need to decide what you use as the source of your interrupt. The C64 has CIA chips with timers that can generate interrupts, they seem like a good choice at first, as the timing is guaranteed. Most of the time, you will instead use the VIC (graphics chip) for the interrupt source anyways, even if this means added complexity if your music should sound somewhat similar on PAL and NTSC machines, because they have differing frequencies. The reason is that you need to do other work in VIC-triggered interrupts anyways for anything displayed on the screen that is non-trivial, and often the timing for this is critical. So, using a timer interrupt for music, it would happen at different places on the screen, and eventually delay your timing-critical VIC interrupt from being served, thus ruining your display. Therefore, you pick a place on the screen where you know you don't have to do anything else (might be the border area), arrange to get a raster IRQ from the VIC there and in the ISR, call your music play routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This covers most needs and is indeed very simple to do, escpecially if you use a music editor (or tracker) to compose your music, which generates ready-to-call routines for you. But there are at least two scenarios that are a lot more complex:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;You might need/want sound effects that require SID register updates much more often than once per screen frame. A typical example is playback of digital samples. I won't go into depth here, as there are a lot of approaches, but it requires tricky coding and you are very limited with what can happen on the screen at the same time.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You need to access the floppy drive while playing music. Unfortunately, this can't be done using the builtin I/O routines. For ...&lt;sup&gt;*)&lt;/sup&gt; reasons, floppy I/O is done completely in software on the C64 (bit-banging) and the builtin routines are very timing sensitive, they only work with IRQs completely disabled. The solution here is to use own routines with a different communication protocol (which requires to reprogram the floppy drive side as well). To know more about that, ask google for &quot;IRQ loaders&quot;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;*) basically: crappy/buggy hardware that didn't work as designed, namely the VIA I/O chips in the floppy...&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7040" LastEditorUserId="7040" LastEditDate="2019-07-30T07:08:14.227" LastActivityDate="2019-07-30T07:08:14.227" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11888" PostTypeId="1" CreationDate="2019-07-29T09:48:58.883" Score="15" ViewCount="2380" Body="&lt;p&gt;This is a followup to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11854/could-the-intel-8086-cpu-have-many-segments-in-memory-of-the-same-type/11857?noredirect=1#comment36792_11857&quot;&gt;Could the Intel 8086 CPU have many segments in memory of the same type?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the event of a hardware interrupt or user interrupt through the INT instruction, was there a risk that the user program had left the stack pointer close to wrapping round, so that the interrupt itself (which pushes three words onto the stack) or the code running in the interrupt would overwrite part of the stack segment?&lt;/p&gt;&#xA;&lt;p&gt;Was there a standard value of stack that had to be reserved in order to handle interrupts safely?&lt;/p&gt;&#xA;&lt;p&gt;Was there provision made in MS-DOS to switch stacks in order to run more complex code than the reserved space allowed?&lt;/p&gt;&#xA;&lt;p&gt;Other systems had multiple stacks: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6339/motorola-6809-two-stacks-design&quot;&gt;Motorola 6809 two stacks design&lt;/a&gt;, the ARM FIQ system. Protected mode and multiple-ring systems also generally use separate stacks making this a non-issue.&lt;/p&gt;&#xA;&lt;p&gt;(It's been a very long time since I've written real mode 8086 code, and I can't remember having to worry about this)&lt;/p&gt;&#xA;" OwnerUserId="778" LastEditorUserId="15334" LastEditDate="2020-11-14T06:55:00.133" LastActivityDate="2020-11-14T06:55:00.133" Title="8086 stack segment and avoiding overflow in interrupts" Tags="&lt;8086&gt;&lt;interrupt&gt;" AnswerCount="7" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11889" PostTypeId="2" ParentId="11888" CreationDate="2019-07-29T10:07:08.927" Score="6" Body="&lt;p&gt;Unless your IRQ routine was large you'd expect enough space to be left on the stack. You could swap to your own dedicated stack before carrying on. Most of the time you would usually just be copying data over from the interrupting device anyway (or setting the next DMA buffer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Terminate and stay resident code (e.g. SideKick) that hooked keyboard vectors would normally swap to it's own stack once it had decided to popup and take over the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example the source code to print.com &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/80ab2fddfdf30f09f0a0a637654cbb3cd5c7baa6/v2.0/source/PRINT_v211.ASM&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/microsoft/MS-DOS/blob/80ab2fddfdf30f09f0a0a637654cbb3cd5c7baa6/v2.0/source/PRINT_v211.ASM&lt;/a&gt; has this code to swap the stack once it's decided to do some work.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;GOAHEAD:&#xA;        PUSH    AX              ;Need a working register&#xA;        MOV     [SSsave],SS&#xA;        MOV     [SPsave],SP&#xA;        MOV     AX,CS&#xA;        CLI&#xA;;Go to internal stack to prevent INT 24 overflowing system stack&#xA;        MOV     SS,AX&#xA;        MOV     SP,OFFSET DG:ISTACK&#xA;        STI&#xA;        PUSH    ES&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2019-07-29T10:13:53.737" LastActivityDate="2019-07-29T10:13:53.737" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11890" PostTypeId="2" ParentId="11888" CreationDate="2019-07-29T10:09:01.857" Score="3" Body="&lt;p&gt;1) indeed there is a risk if user program leaves very little stack space. Hardware interrupt handlers, DOS and BIOS calls and TSRs have to assume there is &quot;enough&quot; stack space so they can work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) it would be difficult to say what is a standard value that must be available all times, as there are a lot of manufacturers for device drivers, video BIOSes, SCSI BIOSes, network packet driver TSRs etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) MSDOS hooks some interrupts to run via a trampoline to change stack so that user given stack is not used during the interrupt.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-07-29T10:09:01.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11891" PostTypeId="2" ParentId="11888" CreationDate="2019-07-29T10:23:56.583" Score="20" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;was there a risk that the user program had left the stack pointer close to wrapping round, so that the interrupt itself (which pushes three words onto the stack) or the code running in the interrupt would overwrite part of the stack segment?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yep. The 8086 required space to put 6 bytes on the stack:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The processor status&lt;/li&gt;&#xA;&lt;li&gt;The current instruction pointer&lt;/li&gt;&#xA;&lt;li&gt;The current code segment&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If the stack had less than 6 bytes of space left, an interrupt would corrupt it (or something else if the program hadn't allocated 64k for the stack).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would expect an operating system that needed to use the stack during the interrupt routine to change the stack segment to some other area to protect the user stack from overflow. This is fairly normal on operating systems for computers where the stack can be moved (i.e. not the 6502).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said the above, if the user stack was within six bytes of overflowing, there was almost certainly going to be a stack overflow anyway even without the interrupt.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2019-07-29T10:23:56.583" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11893" PostTypeId="2" ParentId="11888" CreationDate="2019-07-29T11:44:46.023" Score="12" Body="&lt;p&gt;We need to distinguish here between the &quot;stack,&quot; which is a data&#xA;structure in the imagination of the programmer, and what the CPU does&#xA;with stack registers and the memory pointed to by them, which is a&#xA;mechanical process. When the CPU pushes a value on the stack it simply&#xA;changes the values in the stack pointer register and certain memory&#xA;locations; whether this action changes what the programmer decided was&#xA;the &quot;stack&quot; or some other area of memory depends on the program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later processors such as the 80826 offered hardware memory management&#xA;that allowed the programmer to tell the CPU what the top and bottom&#xA;addresses of his stack are and the hardware would generate an&#xA;exception if an instruction using the stack pointer tried to write to&#xA;memory outside this range. The progammer thus reserved memory for the&#xA;stack by use of these settings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But earlier processors offered no such thing; a programmer &quot;reserves&quot;&#xA;an area for the stack only in his mind, and then attempts to make sure&#xA;that his code and any other code called during the course of running&#xA;his code (such as interrupt routines) won't write outside that area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The stack pointer &lt;a href=&quot;https://stackoverflow.com/a/34567241/107294&quot;&gt;wrapping around&lt;/a&gt; may or may not be an issue&#xA;depending on how the programmer set up the stack (though it usually&#xA;would be). If the first free location on the stack is &lt;code&gt;0000&lt;/code&gt; and you&#xA;push two bytes, these bytes will be stored in location &lt;code&gt;0000&lt;/code&gt; and&#xA;&lt;code&gt;FFFF&lt;/code&gt; and the next free stack location will be &lt;code&gt;FFFE&lt;/code&gt;. Whether this&#xA;is a problem depends on if &lt;code&gt;FFFF&lt;/code&gt; was being used for something else.&#xA;E.g.:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If the programmer had started the stack at &lt;code&gt;FFFF&lt;/code&gt;, the write&#xA;to&lt;code&gt;FFFF&lt;/code&gt; would be overwriting information earlier in the stack and&#xA;you will have a problem if this is used at some point later on.&lt;/li&gt;&#xA;&lt;li&gt;If the programmer had started the stack at &lt;code&gt;7FFF&lt;/code&gt; and the memory&#xA;above that was being used for other purposes, whatever was using&#xA;that memory location pointed to by &lt;code&gt;SS:FFFF&lt;/code&gt; (even though they may&#xA;not have been using the Stack Segment register to access that&#xA;location) will have its data changed, again likely causing problems.&lt;/li&gt;&#xA;&lt;li&gt;If the programmer had started the stack at &lt;code&gt;7FFF&lt;/code&gt;, but nothing was&#xA;using the location &lt;code&gt;FFFF&lt;/code&gt; 32K above that until after that value was&#xA;popped off the stack, the programmer's expectations might be&#xA;violated but no harm would come from this since it was &quot;free&quot; memory&#xA;anyway.&lt;/li&gt;&#xA;&lt;li&gt;If the programmer had started the stack at &lt;code&gt;7FFF&lt;/code&gt;, but considered&#xA;the entire 64K stack segment to be &quot;stack&quot; anyway, things would be&#xA;just fine. The &quot;top half&quot; of the stack would be &lt;code&gt;0000-7FFF&lt;/code&gt; and the&#xA;&quot;bottom half&quot; would be &lt;code&gt;8000-FFFF&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Programmers always had to have some awareness of what interrupt code&#xA;was running in the system and what its stack usage requirements were&#xA;likely to be. For example, normally the &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1427/7208&quot;&gt;8254 system timer calls&#xA;&lt;code&gt;INT 08h&lt;/code&gt;&lt;/a&gt; on a regular basis, and the default handler in the&#xA;BIOS will need a little bit of stack space. A handler similar to &lt;a href=&quot;https://sourceforge.net/p/bochs/code/HEAD/tree/trunk/bochs/bios/rombios.c#l11662&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&#xA;one from the Bochs emulator&lt;/a&gt; would use four bytes of stack&#xA;when it pushes &lt;code&gt;AX&lt;/code&gt; and &lt;code&gt;DS&lt;/code&gt;, and an additional six bytes would have&#xA;been used by CPU automatically pushing the flags, instruction pointer&#xA;and code segement register. That handler also invokes &lt;code&gt;INT 1Ch,&lt;/code&gt; which&#xA;by default &lt;a href=&quot;https://sourceforge.net/p/bochs/code/HEAD/tree/trunk/bochs/bios/rombios.c#l11739&quot; rel=&quot;nofollow noreferrer&quot;&gt;points to just an &lt;code&gt;IRET&lt;/code&gt; instruction&lt;/a&gt; and so that&#xA;would use an additional six bytes of stack, for a total of 16.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this &lt;code&gt;INT 1Ch&lt;/code&gt; handler could be, and often was, replaced by&#xA;something else that wanted to be called on a regular basis, such as&#xA;with a TSR (terminate and stay resident) utility. Multiple TSRs might&#xA;stack on each other, each one replacing the value for &lt;code&gt;INT 1Ch&lt;/code&gt; with its&#xA;own value and then doing both its own thing and invoking the previous&#xA;handler when called.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also typically several other interrupts regularly happening&#xA;in the system (e.g., for disk drives, serial ports, and the like),&#xA;some of which might even be called when the system was already handling&#xA;an interrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The combination of non-determinancy in the &quot;standard&quot; set of hardware&#xA;interrupts along with some random and unknown collection of TSRs and&#xA;similar software being loaded by the user before running a program&#xA;meant that it's nearly impossible to know how much spare stack space&#xA;you really needed. And if you overflowed your stack space, the program&#xA;or user might not even know about it for some time, depending on how&#xA;the stack was set up and what else was using areas of memory that&#xA;might be referenced by the stack pointer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the basic approach you'd take is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Leave as much extra space on the stack, beyond your program's&#xA;requirements, as reasonably possible. If you get close to using 64K&#xA;in your own stack, consider using multiple stack segments to keep a&#xA;reasonable amount of free space in every one.&lt;/li&gt;&#xA;&lt;li&gt;Try to ensure that any interrupt handler routines you write use the&#xA;minimum possible amount of the interrupted program's stack.&#xA;Consider allocating your own stack area and switch the stack to&#xA;that shortly after entering the handler if you use more than a few&#xA;dozen bytes of stack space.&lt;/li&gt;&#xA;&lt;li&gt;Hope for the best.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Early MS-DOS didn't offer any special facilities for switching to a&#xA;different stack, though of course there's nothing stopping anybody&#xA;writing an interrupt handler from just saving the old &lt;code&gt;SS:SP&lt;/code&gt; pair and&#xA;loading new values pointing to an area of memory they've allocated.&#xA;But starting in 3.2 MS-DOS could be configured to allocate additional&#xA;stack areas and switch to them after receiving a hardware interrupt&#xA;but before calling its handler. See &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11921/7208&quot;&gt;Eric Towers' answer&lt;/a&gt; for&#xA;details.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Multiple Stack Registers and ARM FIQ&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This isn't really related to the core of your question, but since you&#xA;mention these, I'll briefly elucidate on them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you mention, MC6809 had two &quot;stack&quot; registers, the system stack&#xA;pointer S and the user stack pointer U. Only the system stack pointer&#xA;was used by the CPU interrupt system. Whether U was even a separate&#xA;stack depended on how the program decided to use it; it could also be&#xA;used as another pointer into the main stack, as described in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6345/7208&quot;&gt;this&#xA;answer to the question you linked&lt;/a&gt;, or it could even be used as&#xA;just another index pointer, without using its push and pull operations&#xA;at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://bootlin.com/blog/fiq-handlers-in-the-arm-linux-kernel/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARM implmentation of faster interrupts&lt;/a&gt; had a separate set&#xA;of hardware registers that replaced r8 through r14 during an FIQ,&#xA;meaning that you don't need to push them on the stack at all, saving&#xA;the time it takes to do that. (It's actually a little more complex&#xA;than this, due to user vs. system mode and other things, but none of&#xA;that is really relevant to this question.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-31T03:44:44.300" LastActivityDate="2019-07-31T03:44:44.300" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11894" PostTypeId="2" ParentId="11877" CreationDate="2019-07-29T12:12:29.983" Score="7" Body="&lt;p&gt;As for how it got on keyboards, I'd assume that's because the basic 104+ key IBM style keyboard had it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though you might not use it often, it's still got a purpose.&#xA;On linux, hitting alt+sysreq allows you to send messages to the kernel even if everything else is locked up. &lt;a href=&quot;https://en.wikipedia.org/wiki/Magic_SysRq_key&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Magic_SysRq_key&lt;/a&gt;&#xA;I've had to use it to reboot a number of times.&lt;/p&gt;&#xA;" OwnerUserId="14838" LastActivityDate="2019-07-29T12:12:29.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11895" PostTypeId="2" ParentId="11877" CreationDate="2019-07-29T12:30:35.773" Score="39" Body="&lt;p&gt;Before IBM PC even existed, terminal keyboards for IBM Mainframes make extensive use of the SysRq or (System Request) key. I recall using SysReq key on IBM 5251 and 5291 terminals for IBM S/36. Probably the key (and function) was already present in the 1970s IBM 3270 terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its function was to suspend the current job and display the System Request Menu. The System Request Menu allows the user to send and display messages, transfer to a second job, or end the current job. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was included in the first IBM PC 5150 just because it was used also as a mainframe terminal (with the appropiate card).&lt;/p&gt;&#xA;" OwnerUserId="4109" LastActivityDate="2019-07-29T12:30:35.773" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11896" PostTypeId="1" AcceptedAnswerId="11909" CreationDate="2019-07-29T15:10:47.633" Score="6" ViewCount="350" Body="&lt;p&gt;Having only a single index register and no addressing mode indexing against 16-bit addresses in memory seems to have been widely considered a primary reason that the Motorola 6800 fared poorly in benchmarks against its contemporiries, the Intel 8080 and the MOS 6502. (It was, indeed, an explicit design goal of the 6502 to mitigate this problem with the 6800.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought I had seen a microprocessor or microcontroller object-compatible with the 6800 that added an additional index register. However, I no longer seem to be able to find a reference for this, if indeed I'd really seen it in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody know of a microprocessor or microcontroller from the '70s or '80s, manufactured by Motorola or anyone else, that added another index register and/or an additional addressing mode that would mitigate this problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be clear, processors such as the 6805 and 6809 that do not run 6800 object code do not qualify. (The &lt;a href=&quot;https://archive.org/details/bitsavers_motorola68d1983_7821641&quot; rel=&quot;noreferrer&quot;&gt;6805&lt;/a&gt; was &quot;mostly&quot; like a 6800—much closer than the 6809—and did fix the problem by adding a new indexing mode with a 16-bit offset to which X was added, like the 6502, but it also reduced the size of the X register to 8 bits.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-30T07:52:07.300" LastActivityDate="2019-07-30T07:52:07.300" Title="Are there any CPUs or MCUs object-compatible with the 6800 that have additional index registers or addressing modes?" Tags="&lt;microprocessor&gt;&lt;6800&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11897" PostTypeId="2" ParentId="11877" CreationDate="2019-07-29T15:12:41.717" Score="15" Body="&lt;p&gt;As other answers and comments have already said, the SysRq key was first introduced with the keyboard of the PC/AT of 1984, and had parallels to similar keys on IBM mainframe keyboards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if it was rarely used, keyboard manufacturers kept including it, as removing it would make their keyboard incompatible with the few pieces of software that &lt;em&gt;did&lt;/em&gt; use it. Only in recent years have manufacturers started to drop it and other little-used keys, chiefly &lt;a href=&quot;http://forum.notebookreview.com/threads/no-insert-and-sysrq-keys-on-e220s.579456/&quot; rel=&quot;noreferrer&quot;&gt;on laptops&lt;/a&gt; where space is at a premium.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So why was this key so rarely used on the home PC, rare enough that you ask whether any OS ever used it?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mid 1980s, only the brand-new AT (and compatibles) would have the SysRq key. If a software developer wanted to support the older XT and PC machines, they'd have to stick to using keys that existed on both keyboard variants. New versions of MS-DOS, for example, couldn't use it without losing backward compatibility with earlier machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As described on Wikipedia's page about the &lt;a href=&quot;https://en.wikipedia.org/wiki/System_request&quot; rel=&quot;noreferrer&quot;&gt;SysRq&lt;/a&gt;* key, it behaves differently to all other keys on the keyboard, and bypasses the keyboard buffer and the OS' usual input processing. Pressing SysRq can only be detected with a dedicated BIOS function (int. 0x15, function 0x85). Under DOS, any user application could access the BIOS functions directly, but that was no longer possible under Windows. For good or ill, the developers of Windows saw no need to make special use of this special key, other than some specialist debugging purposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linux, however, &lt;em&gt;does&lt;/em&gt; use it. The '&lt;a href=&quot;https://en.wikipedia.org/wiki/Magic_SysRq_key&quot; rel=&quot;noreferrer&quot;&gt;magic SysRq key&lt;/a&gt;' can be used to issue simple commands to an unresponsive computer: remounting filesystems, terminating processes, or restarting the machine. This uses SysRq's ability to bypass the normal keyboard-handling interface, and issue signals directly to the underlying operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*Note: &lt;em&gt;At the time of writing, the SysRq article on Wikipedia includes a weakly sourced claim that the key was meant for switching between operating systems on the PC/AT&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-07-29T15:27:54.180" LastActivityDate="2019-07-29T15:27:54.180" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11898" PostTypeId="5" CreationDate="2019-07-29T15:25:47.300" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-07-29T15:25:47.300" LastActivityDate="2019-07-29T15:25:47.300" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11899" PostTypeId="4" CreationDate="2019-07-29T15:25:47.300" Score="0" Body="Motorola 6800 family of processors. This does not include the similarly-numbered but different 6809 family." OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-29T16:44:10.227" LastActivityDate="2019-07-29T16:44:10.227" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11900" PostTypeId="1" AcceptedAnswerId="11901" CreationDate="2019-07-29T15:34:48.980" Score="10" ViewCount="685" Body="&lt;p&gt;As far as I know, the popular low-end home computers in the UK around the mid-1980s were the Sinclair ZX-Spectrum (&quot;Speccy&quot;) and the Commodore C64. I know the BBC micro also had a following, but my assumption is it was too expensive to compete, whereas the Speccy and C64 were not so far apart on price.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was the Speccy mainly a less costly alternative to the C64? Or, were they priced so close that consumer preference was more important than price difference?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-07-29T16:37:52.253" Title="How did the Sinclair compare on price with the C64 in the UK?" Tags="&lt;commodore-64&gt;&lt;zx-spectrum&gt;&lt;cost&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11901" PostTypeId="2" ParentId="11900" CreationDate="2019-07-29T16:11:54.013" Score="14" Body="&lt;p&gt;Sinclair certainly competed vigorously on price, and designed their machines to achieve as low a price as possible. The ability to sell a computer for less than £100 was &lt;a href=&quot;https://books.google.co.uk/books?id=RYH7o-4ykmMC&amp;amp;pg=PA33#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;one of Clive Sinclair's goals&lt;/a&gt; with his earlier ZX machines, for example. One example of this influence on the Spectrum line was their membrane keyboard, another was the fact that they were sold in variants with less RAM (which was one of the more expensive parts of a microcomputer.) Price was a key area of competition between manufacturers throughout the 1980s, with manufacturers trying to meet and beat each others' prices and specifications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A dig through the August 1983 issue of the UK's Your Computer Magazine (found on &lt;a href=&quot;https://archive.org/details/your-computer-magazine-1983-08/page/n25&quot; rel=&quot;noreferrer&quot;&gt;archive.org&lt;/a&gt;) includes advertisements from several retailers of microcomputers, and a full-page spread &lt;a href=&quot;https://archive.org/details/your-computer-magazine-1983-08/page/n23&quot; rel=&quot;noreferrer&quot;&gt;advertising a price drop&lt;/a&gt; for the Spectrum.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The 16K Spectrum was newly reduced from £125 to £99.95, and the 48K Spectrum was reduced from £175 to £129.95.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A nationwide dealership (confusingly named Spectrum) advertises the Commodore 64 at the much higher price of £345, as well as a clearance deal on Commodore's VIC-20 at £139.99. They offer the ZX Spectrum at the reduced prices mentioned above.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Other manufacturers' machines (with RAM sizes) offered by this retailer are priced as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TI-99/4A: £149.95&lt;/li&gt;&#xA;&lt;li&gt;Atari 400 (16K): £149.95, 800 (48K) £299.95&lt;/li&gt;&#xA;&lt;li&gt;Oric 1 (48K): £169.95&lt;/li&gt;&#xA;&lt;li&gt;Dragon (32K): £175&lt;/li&gt;&#xA;&lt;li&gt;Colour Genie (16K): £194&lt;/li&gt;&#xA;&lt;li&gt;Lynx: 48K £225, 96K £299&lt;/li&gt;&#xA;&lt;li&gt;BBC Micro Model B (32K): £399&lt;/li&gt;&#xA;&lt;li&gt;Sharp MZ-80A (48K): £546.25&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As you can see, the price drops on the ZX Spectrum placed the machine cheaper than any of these competitors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC Micro was expensive compared to the competition, but it was very highly specified, with all sorts of expansion interfaces. It was more popular in the education and technical markets. Acorn introduced the Electron to try to compete at a lower price point, but it was late to market and had limited success.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;One year later...&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;By &lt;a href=&quot;https://archive.org/details/your-computer-magazine-1984-11/page/n25&quot; rel=&quot;noreferrer&quot;&gt;November 1984&lt;/a&gt;, the same retailer is advertising the Commodore 64 with joystick, cassette recorder, and 4 games at £249. The new Commodore 16 (with only 16K RAM) is sold with a cassette recorder for £139.99.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other machines haven't dropped much in price, but have bundled extras. The 48K Spectrum is still £129.95, but has 6 pieces of software thrown in for free. The BBC Model B is still £399, but now includes a cassette recorder and 5 pieces of software. Acorn's Electron is priced at £199.95 for the machine only.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-07-29T16:37:52.253" LastActivityDate="2019-07-29T16:37:52.253" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11902" PostTypeId="2" ParentId="11896" CreationDate="2019-07-29T16:12:12.983" Score="13" Body="&lt;p&gt;68HC11 should be opcode compatible and it has extra index register. But using the other index register requires an extra prefix byte to indicate non-default register.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-07-29T16:12:12.983" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11903" PostTypeId="2" ParentId="11878" CreationDate="2019-07-29T17:14:55.350" Score="78" Body="&lt;p&gt;&lt;strong&gt;You are comparing apples to motorcycles.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 95 traces its lineage back through Windows 3.x all the way to Windows 1.x and MS-DOS/PC-DOS, themselves inspired by CP/M. It was conceived and designed as a single-user, cooperatively multitasking environment in which applications have a large degree of freedom in what to do. Windows 95 moved towards a preemptive multitasking design, but still had significant cooperative elements built-in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact that it was intended as a consumer OS replacement for the combination of MS-DOS and Windows 3.1/3.11, and was to work (not necessarily provide a great user experience, but boot and allow starting applications) on as low end a system as &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_95#System_requirements&quot; rel=&quot;noreferrer&quot;&gt;any 386DX with 4 MB RAM and around 50 MB of hard disk space&lt;/a&gt;, also put huge limitations on what Microsoft could do. Not least of this is its ability to use old MS-DOS device drivers to allow interoperability with hardware which did not have native Windows 95 drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while Windows 95 provided a hugely revamped UI compared to Windows 3.x, many technical improvements and paved the way for more advanced features, &lt;strong&gt;a lot of it had compatibility restraints based on choices, and to support limitations in hardware, dating back over a decade.&lt;/strong&gt; (The 386 itself was introduced in 1985.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now compare this to modern versions of Windows, which don't trace their lineage back to MS-DOS at all. Rather, &lt;strong&gt;modern versions of Windows are based on Windows NT&lt;/strong&gt; which was basically a complete redesign, &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_NT#Development&quot; rel=&quot;noreferrer&quot;&gt;originally&lt;/a&gt; dubbed &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_NT_3.1#As_NT_OS/2&quot; rel=&quot;noreferrer&quot;&gt;NT OS/2&lt;/a&gt; and named Windows NT prior to release.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows NT was basically designed and written from the beginning with such things as user isolation (multiuser support), process isolation, kernel/userspace isolation (*), and no regard for driver compatibility with MS-DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a contemporary version, Windows NT 3.51 was released three months before Windows 95, and required at a minimum &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_NT_3.51#Hardware_requirements&quot; rel=&quot;noreferrer&quot;&gt;a 386 at 25 MHz, 12 MB RAM, and 90 MB hard disk space&lt;/a&gt;. That's quite a step up from the requirements of Windows 95; three times the RAM, twice the disk space, and quite possibly a faster CPU (&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80386&quot; rel=&quot;noreferrer&quot;&gt;the 386&lt;/a&gt; came in versions clocked at 12-40 MHz over its product lifetime), and again, that's just to boot the operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that at the time, a 486 with 8-12 MB RAM and 500 MB hard disk was a reasonably high end system. Compare Multimedia PC &lt;a href=&quot;https://en.wikipedia.org/wiki/Multimedia_PC#MPC_Level_2&quot; rel=&quot;noreferrer&quot;&gt;level 2&lt;/a&gt; (1993) and &lt;a href=&quot;https://en.wikipedia.org/wiki/Multimedia_PC#MPC_Level_3&quot; rel=&quot;noreferrer&quot;&gt;level 3&lt;/a&gt; (1996), only the latter of which went beyond a minimum of 4 MB RAM. Even a MPC Level 3 PC in 1996 wouldn't meet the hardware requirements of the 1995 Windows NT 3.51, as MPC 3 only required 8 MB RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a stability point of view, even Windows NT 3.51 was vastly better than Windows 95 could ever hope to be. &lt;strong&gt;It achieved this, however, by sacrificing a lot of things&lt;/strong&gt; that home users would care about; the ability to run well on at the time reasonably affordable hardware, the ability to run DOS software that accessed hardware directly (as far as I know, while basic MS-DOS application compatibility was provided, there was no way other than dual-boot to run most DOS games on a Windows NT system), plug-and-play, and the ability to use hardware that lacked dedicated Windows NT drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;And that's what Microsoft has been building on for the last about two decades&lt;/strong&gt; to create what we now know as Windows 10, by way of Windows NT 4.0, Windows 2000, XP, Vista, 7 and 8. (The DOS/Windows lineage ended with Windows ME.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11881/357&quot;&gt;As another-dave said&lt;/a&gt; in another answer, process isolation (which is a cornerstone for, but on its own not sufficient to ensure, system stability) isn't a bolt-on; it pretty much needs to be designed in from the beginning as, if it isn't there, programmers (especially back in the day, when squeezing every bit of performance out of a system was basically a requirement) will take shortcuts which will break if you add such isolation later on. (Compare all the trouble Apple had adding even basic protections to classic Mac OS; they, too, ended up doing a complete redesign of the OS that, among other things, added such protections.) Windows 95 didn't have it, nor was the desire from Microsoft to do the work needed to add it there; Windows NT did have such isolation (as well as paid the cost for having it). So even though Windows NT was far from uncrashable, this difference in the level of process isolation provided by the operating system shows in their stability when compared to each other, even when comparing contemporary versions.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*) The idea behind kernel/userspace isolation (usually referred to as &quot;ring 0&quot; and &quot;ring 3&quot; respectively in an Intel environment) is that while the operating system kernel has full access to the entire system (it needs to, in order to do its job properly; a possible exception could perhaps be argued for a true microkernel design, but even there, &lt;em&gt;some&lt;/em&gt; part of the operating system needs to perform the lowest-level operations; there's just &lt;em&gt;less&lt;/em&gt; of it), normal applications generally don't need to have that level of access. In a multitasking environment, for just any application to be able to write to just any memory location, or access any hardware device directly, and so on, comes with the completely unnecessary risk of doing harm to the operating system and/or other running applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This isn't anywhere near as much of a problem in a single-tasking environment such as MS-DOS, where the running application is basically assumed to be in complete control of the computer &lt;em&gt;anyway&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually, the only code (other than the operating system kernel proper) that actually needs to have such a level of access &lt;em&gt;in a multitasking environment&lt;/em&gt; is hardware drivers. With good design, even those can usually be restricted only to the portions of the system they actually need to work with, though that does increase complexity further, and absent separate controls, a driver can always claim to need more than it strictly speaking would need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 95 did have rudimentary kernel/userspace and process/process separation, but it was pretty much trivial to bypass if you wanted to, and drivers (even old DOS drivers) basically bypassed it by design. Windows NT fully enforced such separation right from the beginning. The latter makes it much easier to isolate a fault to a single process, thereby greatly reducing the risk of an errant userspace process causing damage that cannot be known to be restricted only to that process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even with Windows NT, back then as well as today, if something went/goes wrong in kernel mode, it would generally cause the OS to crash. It was just a lot harder to, in software, cause something to go sufficiently wrong in kernel mode in Windows NT than in Windows 95, and therefore, it was correspondingly harder to cause the entire operating system to crash. &lt;em&gt;Not impossible, just harder.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="357" LastEditDate="2019-08-08T08:06:30.550" LastActivityDate="2019-08-08T08:06:30.550" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11904" PostTypeId="1" CreationDate="2019-07-29T21:25:33.647" Score="1" ViewCount="243" Body="&lt;p&gt;Quoting a comment from this question: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11878/why-did-windows-95-crash-the-whole-system-but-newer-windows-only-crashed-program&quot;&gt;Why did Windows 95 crash the whole system but newer Windows only crashed programs?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;A lot of effort has gone into automatically enforcing that drivers are more robust. This is one of the reasons that Windows 7 seldom bluescreens.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What technologies were used to as windows progressed. I won't restrict this to any particular version, as I think it would be nice to see the timeline of innovation.&lt;/p&gt;&#xA;" OwnerUserId="5439" LastActivityDate="2019-07-29T21:25:33.647" Title="What technologies were used to harden Windows against Bluescreens" Tags="&lt;windows&gt;" AnswerCount="0" CommentCount="9" ClosedDate="2019-07-30T07:18:17.697" ContentLicense="CC BY-SA 4.0" />
  <row Id="11905" PostTypeId="2" ParentId="11682" CreationDate="2019-07-30T00:10:54.233" Score="2" Body="&lt;p&gt;I don't know if these meet all of the criteria, but posting them since no one has .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Polymorphic_Systems_(computers)#Poly-88&quot; rel=&quot;nofollow noreferrer&quot;&gt;Polymorphic POLY 88&lt;/a&gt; - 8080 ? 8080A ? ( &lt;a href=&quot;http://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=563&quot; rel=&quot;nofollow noreferrer&quot;&gt; Heres states it was a 8080A&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Micral#Later_models&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micral G and Micral S&lt;/a&gt; - 8080&lt;/p&gt;&#xA;" OwnerUserId="11744" LastEditorUserId="439" LastEditDate="2019-07-30T00:24:18.257" LastActivityDate="2019-07-30T00:24:18.257" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11906" PostTypeId="2" ParentId="11550" CreationDate="2019-07-30T01:06:37.210" Score="3" Body="&lt;p&gt;Since the 'Manchester Baby' is mentioned above, I thought I might mention this one, since it's very interesting, for those who may accept  game-sprite like objects instead of text,  although I don't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://ultimatehistoryvideogames.jimdo.com/pool/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIDSAC computer&lt;/a&gt;  computer had a billiards game in 1954, very impressive .&lt;/p&gt;&#xA;" OwnerUserId="11744" LastActivityDate="2019-07-30T01:06:37.210" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11907" PostTypeId="1" CreationDate="2019-07-30T01:45:50.990" Score="3" ViewCount="376" Body="&lt;p&gt;I'm currently using [this version of f9dasm] on Linux to disassemble a&#xA;moderately large Motorola 6800 program (&lt;a href=&quot;https://github.com/0cjs/altair-680-basic&quot; rel=&quot;nofollow noreferrer&quot;&gt;Altair 680 Basic&lt;/a&gt;,&#xA;about 8 KB in size).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;f9dasm isn't too bad, but I'd prefer to use something more featureful&#xA;and/or easier to modify and extend so I can add features to it more&#xA;easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disassembly features I'd like to have include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Better handling of ASCII characters with the high bit set.&lt;/li&gt;&#xA;&lt;li&gt;Being able to assign one of a choice of multiple symbols with the&#xA;same value, so that I could have e.g. &lt;code&gt;EXTIO = 0&lt;/code&gt; and &lt;code&gt;DISKIO = 0&lt;/code&gt;&#xA;in the disassembly and annotate different locations to use the&#xA;appropriate symbol for that code (or no symbol at all). This applies&#xA;both to definitions of constants and to addresses that have multiple&#xA;names because they're used for different purposes in different parts&#xA;of the code.&lt;/li&gt;&#xA;&lt;li&gt;A choice of ouput formats, including a &quot;list&quot; format (addresses and&#xA;values on the left) as well as a format suitable for input to an&#xA;assembler.&lt;/li&gt;&#xA;&lt;li&gt;The ability to add comments and other text in arbitrary locations,&#xA;not just before the disassembly for particular address.&lt;/li&gt;&#xA;&lt;li&gt;The ability to define macros and have the disassembler generate the&#xA;macro call as output when it finds matching code, or at least when I&#xA;ask it to. (This may be asking too much, I know.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Some of the things that make f9dasm hard to modify and extend (for me,&#xA;anyway) are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It is mainly large, complex functions rather than smaller, simpler&#xA;ones that are easier to re-use, understand and test.&lt;/li&gt;&#xA;&lt;li&gt;Lack of unit tests to make modifying individual functions easier.&lt;/li&gt;&#xA;&lt;li&gt;Lack of functional tests to make adding/changing features easier.&lt;/li&gt;&#xA;&lt;li&gt;Being written in C rather than a higher-level language (e.g.,&#xA;Python).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm specifically looking for something I can run on modern machines&#xA;(Linux/Unix strongly preferred), rather than something I'd have to&#xA;bring up in an emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody have any suggestions for me? I'd be willing to consider&#xA;adding 6800 support to a multi-architecture disassembler that doesn't&#xA;currently support it if the code is in good shape to make that&#xA;relatively easy.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="4921" LastEditDate="2019-07-30T02:51:58.043" LastActivityDate="2019-12-27T06:01:10.133" Title="What is a more featureful and/or better coded 6800 disassembler for modern machines than f9dasm?" Tags="&lt;disassembly&gt;&lt;6800&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11908" PostTypeId="2" ParentId="11907" CreationDate="2019-07-30T04:36:20.830" Score="2" Body="&lt;p&gt;I had largely same requirements for similar CPU but ended up using f9dasm. But if you are serious then look at IDA Pro.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-07-30T04:36:20.830" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11909" PostTypeId="2" ParentId="11896" CreationDate="2019-07-30T04:51:09.383" Score="5" Body="&lt;p&gt;The main problem I found with having only one index register on the 6800 was having to constantly load and save source and destination addresses when doing a memory copy (though you could use SP as extra 'index' register so long as interrupts were disabled). Another thing that didn't help was that many instructions took longer than they could have.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://archive.org/details/bitsavers_motorola68ReferenceManualMay84_19173732&quot; rel=&quot;nofollow noreferrer&quot;&gt;6801/6803/68701&lt;/a&gt; was a microcontroller based on the 6800 which had 10 extra instructions. It still only had the one index register, but some of the extra instructions made it easier to manipulate. ABX added B to X, PUSHX and PULX saved and restored it from the stack, and CPX set the Carry flag as well as N, Z and V flags. The 16 bit D register (concatenation of A and B) had indexed addressing modes for instructions such as LDD (load double) and ADDD (add double). Some instructions were also sped up, eg. STX to extended address only took 5 cycles instead of 6.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hitachi's HD6303 had all the 6803 instructions and a few more, including XGDX (exchange D and X).&lt;/p&gt;&#xA;" OwnerUserId="4663" LastEditorUserId="7208" LastEditDate="2019-07-30T07:05:43.340" LastActivityDate="2019-07-30T07:05:43.340" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11910" PostTypeId="2" ParentId="11866" CreationDate="2019-07-30T05:54:02.003" Score="2" Body="&lt;p&gt;I have a lateral thinking answer which may be of greater interest if you have the equipment:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of using a sound chip, &lt;strong&gt;connect your project to a MIDI instrument&lt;/strong&gt; through a MIDI-compatible serial connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Information about the physical specifications of MIDI can be found here. &lt;a href=&quot;http://www.personal.kent.edu/~sbirch/Music_Production/MP-II/MIDI/midi_physical_layer.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.personal.kent.edu/~sbirch/Music_Production/MP-II/MIDI/midi_physical_layer.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seems like the MCUs UART and a buffer and a resistor or two is all it'll take to make your system a compliant MIDI message source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'A MIDI instrument' can be anything here that takes in a MIDI signal, like a sampler or a PCs game port.&lt;/p&gt;&#xA;" OwnerUserId="14825" LastEditorUserId="14825" LastEditDate="2019-07-30T16:14:02.860" LastActivityDate="2019-07-30T16:14:02.860" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11911" PostTypeId="1" AcceptedAnswerId="11933" CreationDate="2019-07-30T06:52:15.533" Score="16" ViewCount="1692" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6800&quot; rel=&quot;noreferrer&quot;&gt;According to Wikipedia&lt;/a&gt;, The Motorola 6800 was released in 1974. Between that and the release of the 6809 in 1979 (or 1978?) there was at least one other 6800-series CPU released, the 6802 microcontroller with the same registers and instruction set as the 6800. The 6801/6803 microcontrollers, which added some additional instructions, were apparently released in 1978 or 1979, but I don't know if this was before or after the 6809.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like a list of all 6800-like processors and microcontrollers released by Motorola up to the time the 6809 became available for purchase in non-sample quantities, along with notes on programming model changes (such as additional instructions or registers). I don't need details about changes, on-chip or not, that are not directly part of the CPU, such as on-board memory or I/O.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm mainly interested in availability dates, by which I mean the date any random person or company could walk in off the street and buy them in quantities of a thousand or more. But feel free to provide announcement dates, too, so long as the announcement covers the final details of the processor programming model.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-08-02T09:02:21.777" LastActivityDate="2019-08-14T11:38:41.007" Title="What's the timeline of Motorola 6800-family CPUs from 1974 to 1979?" Tags="&lt;6800&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11912" PostTypeId="2" ParentId="11888" CreationDate="2019-07-30T11:18:13.847" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was there a standard value of stack that had to be reserved in order to handle interrupts safely?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, setting a standard is next to useless (beyond wanting to have at least room for on entry, i.e. 3 words for an 8086)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was there provision made in MSDOS to switch stacks in order to run more complex code than the reserved space allowed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, that's something that has always been up to the task in question (user program, interrupt routine, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;So far this has been as well answered by several other good writeups. But it sounds as if there's an implied assumption that there can be an absolute protection against stack overrun, which I want to address:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Other systems had multiple stacks: Motorola 6809 two stacks design , the ARM FIQ system. Protected mode and multiple-ring systems also generally use separate stacks making this a non-issue.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Separating doesn't solve the problem of a stack overflow. It is only meant to simplify OS programming, as it removes the ned to juggle with user stacks during mode switch and/or switching stacks between user tasks.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It's been a very long time since I've written real mode 8086 code,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A stack overrun can happen in any configuration and setup - unless the absolute nesting level of all concurrent users/uses of a stack is known. Something even hard to calculate for small and well defined embedded systems - real world is is always up to screw ambitions, isn't it:))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least, even with a protected mode system able to detect stack overrun (like by bound values or segment sizes) and allocate more stack on the fly can not prevent all possible situations, as their workings rely on the ability to interrupt a such instructions, but there may be interrupt situations with higher priority than stack monitoring.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So full protection is only possible on systems without a hardware stack. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-07-30T11:18:13.847" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11913" PostTypeId="1" AcceptedAnswerId="11914" CreationDate="2019-07-30T12:06:58.587" Score="9" ViewCount="871" Body="&lt;p&gt;The three official video modes &lt;a href=&quot;https://www.cpcwiki.eu/index.php/CPC_old_generation#Video_.28graphics.29:_modes.2C_outputs&quot; rel=&quot;noreferrer&quot;&gt;described on the CPC wiki&lt;/a&gt; are&#xA;all bitmap modes, and &lt;a href=&quot;https://www.cpcwiki.eu/index.php/Source_Codes#General_Notes&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; mentions that the &quot;screen is&#xA;bitmapped. You must draw/erase your own sprites and text.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what was the standard way of generating text on the screen,&#xA;scrolling it, and so on? Were there ROM routines that most programs&#xA;used, or was it just left up to the individual programs to do it with&#xA;their own code? Was there any special hardware support to help with&#xA;text and, particularly, scrolling? Were there standard text &quot;modes,&quot;&#xA;used by most programs and, if so, what were they?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, since the CPC was normally sold with a monitor, were text modes&#xA;with more than 40 columns per line frequently used? I am guessing that&#xA;with a monitor (particularly the monochrome one) the usual color vs.&#xA;resolution issues on TVs could be avoided and so 64, 71 or even 80&#xA;column modes might be common, especially for business software.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="11916" LastEditDate="2020-01-26T13:47:49.217" LastActivityDate="2021-02-20T15:36:44.443" Title="How was text handled on the Amstrad CPC 464?" Tags="&lt;text&gt;&lt;cpc464&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11914" PostTypeId="2" ParentId="11913" CreationDate="2019-07-30T12:27:01.533" Score="13" Body="&lt;p&gt;All text is painted as bitmaps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The highest-resolution built-in mode is 640x200 pixels, so that provides an 80x25 text mode. 80-column modes were used in business software (e.g. DBase II) and even in the CP/M 2.2 and 3.0 OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPC uses a CRTC6845, which is wired up atypically to create linear scan lines but nevertheless can still hardware scroll in multiples of 8 lines. So a hardware text scroll is available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cantrell.org.uk/david/tech/cpc/cpc-firmware/txtvdu.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Firmware routines&lt;/a&gt; are provided to establish text windows, move the cursor, set colours, optionally set a custom font, and to paint text. So they're there if you want to use them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disk-based CPCs came with an implementation of CP/M that emulates the control codes of a Zenith Z19.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On clarity, I grabbed the following from &lt;a href=&quot;https://youtu.be/3ebFE5CZRQc?t=889&quot; rel=&quot;nofollow noreferrer&quot;&gt;a Youtube video demonstrating the 6128 hardware&lt;/a&gt; showing 80-column text on a real CPC:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/48CVY.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/48CVY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can see that the screen is very sharp at that resolution; the colour screen received just as sharp a signal as the green screen shown, being a full RGB connection. But see @rwallace's comment re: dot pitch; &lt;a href=&quot;https://youtu.be/YqouZCVMMwg?t=129&quot; rel=&quot;nofollow noreferrer&quot;&gt;the best video evidence I could find&lt;/a&gt; is unfortunately a glancing shot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/k5ev3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/k5ev3.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though I think that at least establishes the absence of most of the standard computer-with-a-TV artefacts, at least for the era when only France could boast wide adoption of Peritel/SCART.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-01-27T18:14:03.987" LastActivityDate="2020-01-27T18:14:03.987" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11915" PostTypeId="2" ParentId="11888" CreationDate="2019-07-30T15:30:34.907" Score="3" Body="&lt;p&gt;On some systems, context is stored during interrupts using mechanisms that are entirely separate from the subroutine call stack.  An application on such a system may safely move the stack pointer to arbitrary locations without disabling interrupts, without risk of any storage near the stack pointer being unexpectedly disturbed (obviously if an application is going to make any subroutine calls or push anything on the stack, the stack pointer would have to be at a suitable location for such purposes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On many microprocessors and microcontrollers that, like the 8088/8086, are not designed to support multi-user operating systems, however, interrupts will cause information to be stored in addresses that are computed relative to whatever the stack pointer happens to be when they are triggered.  This effectively means that except when interrupts are disabled, the contents of storage in the vicinity of the stack pointer (typically at addresses below, but not including, the stack pointer) must be presumed capable of changing in arbitrary fashion at arbitrary times.  Typically the amount of information stored by the processor itself for a given interrupt will be small, and the number of interrupts that can nest will likewise be small.  Thus, if if no interrupt-handling code stores anything beyond that, the amount of storage one must leave available at all times would be fairly modest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In many cases, however, interrupt-handling code will need to store the states of more registers than are used by the underlying application, and may be written in a language like C or Pascal which expects to store information on the stack.  There are two ways this can be accommodated: (1) have the interrupt handler try to keep its stack usage reasonably small (under 256 bytes or so, and preferably under 100), and hope that the underlying application has enough stack space available, or (2) have the interrupt handler reserve its own storage for keeping such information, and have it start with something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;savedSP: .ds 1&#xA;savedSS: .ds 1&#xA;mySP: .ds 1&#xA;mySS: .ds 1&#xA;IrqEntryPoint:&#xA;    mov [cs:savedSP],sp&#xA;    mov [cs:savedSS],ss&#xA;    lss sp,[cs:mySP]&#xA;    jsr far myInterruptHandler&#xA;    lss sp,[cs:savedSP]&#xA;    reti&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The two main problems with this approach are: (1) it will fail very badly if the interrupt ends up being invoked recursively; (2) if other interrupts that don't use their own stacks might be triggered during this one, it will need to leave enough stack to accommodate those.  In general, having all interrupts use the same stack as the application will be most time- and memory-efficient if applications leave enough space for the purpose, a situation which could have been improved if there were a standard means by which drivers could let the system know how much stack space they require, along with a means by which applications could ask the OS how much stack space must be left for all registered drivers, combined.  Having all interrupts use their own stacks would be the second-best approach--not as efficient, but still robust.  Using a hybrid, which is what actually happened, is the worst approach, but things somehow tended to work pretty well anyway.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-07-30T15:30:34.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11916" PostTypeId="2" ParentId="360" CreationDate="2019-07-30T15:47:52.013" Score="6" Body="&lt;p&gt;I confirmed this worked as expected, using Am386/DX-40 + Intel 387 co-processor. The trick with the Am386 is having separate clock for CPU/co-processor, as the former runs at 40 MHz and the latter at 33 MHz. The UMC-386 mainboard supports this configuration fine.&lt;/p&gt;&#xA;" OwnerUserId="7694" LastEditorUserId="7694" LastEditDate="2019-07-31T18:24:44.643" LastActivityDate="2019-07-31T18:24:44.643" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11917" PostTypeId="1" AcceptedAnswerId="11928" CreationDate="2019-07-30T19:50:37.933" Score="9" ViewCount="950" Body="&lt;p&gt;First, a bit of context.  I wrote an&#xA;&lt;a href=&quot;https://6502bench.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;interactive disassembler for 6502 code&lt;/a&gt; that,&#xA;among other things, attempts to identify ASCII strings automatically.&#xA;Appropriate source code for different assemblers is generated.&#xA;This works well for ASCII and the &quot;high ASCII&quot; often&#xA;found in Apple II code, but having never worked with Commodore machines&#xA;I'm at a bit of loss when it comes to PETSCII.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I know comes from &lt;a href=&quot;https://en.wikipedia.org/wiki/PETSCII&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia&lt;/a&gt;,&#xA;which has a couple of graphics showing the &quot;shifted&quot; and&#xA;&quot;unshifted&quot; character sets.  These show the letters in&#xA;the 0x41-5a range (upper-case only) or the 0x41-7a range (mixed case,&#xA;with lower case coming first).  The article also mentions &quot;text mode&quot;,&#xA;in which lowercase letters run from 0x41-5a, and uppercase&#xA;letters run from 0xc1-da.  This latter mode seems to be what the 64tass&#xA;assembler is aware of, e.g. in this example from the manual:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; .enc &quot;petscii&quot;      ;define an ascii-&amp;gt;petscii encoding&#xA; [...]&#xA; &amp;gt;1000 93 d4 45 58 54 20 49 4e    .text &quot;{clr}Text in PETSCII\n&quot;&#xA; &amp;gt;1008 20 d0 c5 d4 d3 c3 c9 c9 0d&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Confusing me somewhat is an example of using &quot;screen encoding&quot;, in which&#xA;lower-case letters are in the range 0x01-1a:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                                .enc  &quot;screen&quot; ;screen code mode&#xA; &amp;gt;1000 13 03 12 05 05 0e 20 03  .text &quot;screen codes&quot;&#xA; &amp;gt;1008 0f 04 05 13&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This doesn't seem to match up with anything on the wikipedia page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to auto-detect PETSCII strings, present them in the disassembled&#xA;output in a useful way, and generate assembly source code that is readable&#xA;and generates the correct output.  This is clearly important for string&#xA;constants, but also matters for immediate character operands like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CMP #'m'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I think there needs to be a general &quot;here there be PETSCII&quot; flag, which&#xA;would change the way the disassembler handles character data and be used&#xA;to set command-line flags for the cross-assembler (e.g. ca65's &lt;code&gt;-t&lt;/code&gt; flag).&#xA;I'm concerned that it might be insufficient.  If there are multiple character&#xA;sets in use, and they change from one line to the next, then some support&#xA;for character set mode tagging may be required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ca65 assembler has a PETSCII conversion table that seems to&#xA;correspond to &quot;text mode&quot;, and is enabled with a command-line switch.  However,&#xA;the assembler also provides a &lt;code&gt;.charmap&lt;/code&gt; pseudo-op that lets you override&#xA;the global setting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The approach I'm leaning toward mirrors the way cross-assemblers like ca65&#xA;and 64tass work, with a global &quot;treat characters as PETSCII&quot; flag.  The other&#xA;character modes would either be handled as hex data or as an explicit special-case format.  Before I settle on this I want to be sure my understanding of PETSCII usage is accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Various questions arise:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How do assembly-language programs on Commodore systems commonly deal with text?  Is &quot;text mode&quot; the dominant form?&lt;/li&gt;&#xA;&lt;li&gt;Is it common for programs to use multiple encodings, e.g. &quot;screen codes&quot;?  Which system does keyboard input use?&lt;/li&gt;&#xA;&lt;li&gt;Does regular ASCII get used with any regularity?  Is it reasonable to expect that all character data will be some flavor of PETSCII?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; Just to untangle myself a bit, the C64 has two character sets in ROM.  The system starts up with a set that only has upper-case letters and symbols.  You can toggle it to a different set where various symbols have been replaced with lower-case letters.  I have seen this second mode referred to as &quot;shifted mode&quot; (because you switch to it by holding Shift and then tapping the Commodore key), &quot;lower case mode&quot;, or &quot;text mode&quot; (because text looks nicer in mixed case).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way the characters are stored in the text screen buffer is similar but everything is shuffled around a bit.  All of the symbols are represented from 0x00-7f.  If the high bit is set, the character is shown with its colors inverted.  This is what's meant by &quot;screen codes&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The charts in &lt;a href=&quot;https://www.aivosto.com/articles/petscii.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.aivosto.com/articles/petscii.pdf&lt;/a&gt; do a good job of expressing all this.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="15407" LastEditDate="2019-12-23T03:08:28.087" LastActivityDate="2019-12-23T03:08:28.087" Title="How is PETSCII used by assembly-language programs?" Tags="&lt;commodore-64&gt;&lt;6502&gt;&lt;commodore&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11918" PostTypeId="2" ParentId="11917" CreationDate="2019-07-30T20:01:43.030" Score="4" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Most text is shown in text mode, as opposed to being drawn in bitmap mode.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Yes, programs can very easily use more than one encoding. PETSCII is what the OS APIs all use, including the ones to print things to the screen, but when actually printing to the screen it is converted to screen codes. Some software might decide to forgo the OS APIs and print to the screen directly, in which case it makes sense to store strings as screen codes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Regular ASCII might come up in GEOS, but in programs that run in the BASIC environment, you can probably expect everything to be PETSCII. As software starts banking out the ROMs and replacing more and more of the OS with its own routines, these assumptions become a bit less reliable, and you can't really make as many assumptions. Games commonly define their own character sets, for example.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="14748" LastActivityDate="2019-07-30T20:01:43.030" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11919" PostTypeId="2" ParentId="11917" CreationDate="2019-07-30T20:21:15.317" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How do assembly-language programs on Commodore systems commonly deal with text? Is &quot;text mode&quot; the dominant form?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Assuming that you mean screen encoding by &quot;text mode&quot;: If the programmer wants to put the text on screen by copying the string from memory, screen codes is the prefered storage method, since no conversion is necessary during the copy routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the color of the characters should be also set or if control codes (color set, cursor movement, carriage return, etc) one would store the text in Commodore's version of ASCII which is called PETSCII and output the text character by character via the $FFD2 routine (which actually points to $F1CA on a C64). This, however, is much slower&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Which system does keyboard input use?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The get character function in the ROM ($FFE4) gives back the PETSCII code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note also that PETSCII is often used to emphasize rather the specific character graphics of Commodore computers rather than indicating the possibility to map control codes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does regular ASCII get used with any regularity? Is it reasonable to expect that all character data will be some flavor of PETSCII?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I would say yes. Unless one writes a program for a Commodore computer that should read ASCII files I don't see many applications for using ASCII instead of PETSCII. ASCII is also missing control characters for setting text color, moving cursor (other than down via line feed), and clear screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than that there is quite some overlap between ASCII and PETSCII, as long as one switches uppercase and lowercase characters.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="6659" LastEditDate="2019-07-30T20:28:34.167" LastActivityDate="2019-07-30T20:28:34.167" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11920" PostTypeId="2" ParentId="11878" CreationDate="2019-07-30T20:44:38.980" Score="3" Body="&lt;p&gt;Addendum:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some special memory areas (eg the infamous &quot;GDI resources&quot;) that all applications needed were extremely limited in size (due to being shared with 16-bit APIs, which needed segment size limits respected) - and very easily ran into exhaustion, with no effective safeguards present.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of essential system APIs did not sanity check their parameters well - if you accidentally fed them invalid pointers or pointers to resources of a different type of resource than expected, all kinds of unwanted behaviour could happen - especially when involving something in a 16-bit-shared area. Getting GDI object handles in a twist ... ouch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the system was trusting the responses to certain messages too much. I remember you could make Windows 9x extremely hard to shut down properly by simply installing a WM_QUERYENDSESSION handler that silently FALSE'd out everytime...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;16-bit apps were run with A LOT of gratuitous privileges for compatibility reasons - enough to directly access ... and in the worst case crash! ... some of the hardware.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2019-07-30T20:44:38.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11921" PostTypeId="2" ParentId="11888" CreationDate="2019-07-30T21:51:24.403" Score="6" Body="&lt;p&gt;Responding only to&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was there provision made in MSDOS to switch stacks in order to run more complex code than the reserved space allowed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, sort of.  MS-DOS (3.2 and later) permitted the &lt;code&gt;CONFIG.SYS&lt;/code&gt; &lt;a href=&quot;http://www.dewassoc.com/support/msdos/stacks.htm&quot; rel=&quot;noreferrer&quot;&gt;command&lt;/a&gt; &lt;code&gt;stacks=n,s&lt;/code&gt;, where &lt;code&gt;n&lt;/code&gt; and &lt;code&gt;s&lt;/code&gt; were small integers.  &lt;code&gt;n&lt;/code&gt; specified the number of stacks and &lt;code&gt;s&lt;/code&gt; specified their size in bytes.  On the IBM PC, PC/XT, and PC-Portable, these integers &lt;a href=&quot;https://www.vfrazee.com/ms-dos/6.22/help/stacks.htm&quot; rel=&quot;noreferrer&quot;&gt;defaulted&lt;/a&gt; to 0 and 0.  On anything else, &lt;code&gt;n&lt;/code&gt; was 9 and &lt;code&gt;s&lt;/code&gt; was 128, specifying nine stacks, each of 128 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MS Windows 3.1 and 3.11 &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/082/Q82774/&quot; rel=&quot;noreferrer&quot;&gt;installers added&lt;/a&gt; &quot;&lt;code&gt;stacks=9,128&lt;/code&gt;&quot; to &lt;code&gt;CONFIG.SYS&lt;/code&gt;.  (This was in response to potentially excessive stack usage by a combination of EMM386.EXE, SMARTDRV.EXE, the mouse driver, and TSRs hooking the keyboard interrupt.)  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Documentation of this stack switching exists, describing that the stack switching was specifically to address the problem of interrupts occurring on nearly full stacks.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Beginning in MS-DOS version 3.2, MS-DOS added code to swap the stack whenever an asynchronous hardware interrupt occurs, before passing control to the original interrupt handler. (Interrupt vectors 02H, 08-0EH, 70H, and 72-77H, corresponding to IRQs 0-15.) Before MS-DOS 3.2, interrupt handlers received control with the stack set to that of whatever program or device driver was executing when the interrupt occurred. Thus, if a program stack is nearly full and a hardware interrupt occurs, random and unpredictable behavior will result (typically a system hang).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If stack switching is enabled, MS-DOS ensures nested interrupts do not get the same stack. Upon completion of the interrupt processing, the stack is released so that MS-DOS may use it for a future interrupt.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Having too low values could be diagnosed by&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If the STACKS values are not equal to 0,0 and you see a &quot;Stack Overflow&quot; or &quot;Exception error 12&quot; message, increase the number or size of the stacks.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If stack switching is enabled and MS-DOS runs out of free stacks, the&#xA;  following message will be displayed:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;FATAL : Internal Stack Failure, System Halted.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If the above message is displayed, try a higher number for n in STACKS=n,m. If you experience random hangs or other strange behavior, try increasing the m value in STACKS=n,m.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;One last thing on hardware interrupt handlers.  There is conflicting documentation on how to use stacks in the &lt;code&gt;stacks&lt;/code&gt; pool.  Some say you cannot:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If you are hooking interrupts with the MS-DOS get/set interrupt vector services, stack switching will not be done before your interrupt handler gets control. Any stack switching necessary must be done &#xA;  by your interrupt handler.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am not aware of a method to request a stack from the &lt;code&gt;stacks&lt;/code&gt; pool from MS-DOS, so you will have to create your own stack in the usual way.  (&lt;code&gt;malloc()&lt;/code&gt; a chunk of memory and use it as a stack.  &lt;a href=&quot;http://www.fysnet.net/tsrdemo.htm&quot; rel=&quot;noreferrer&quot;&gt;Examples&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.o3one.org/hwdocs/bios_doc/dosref22.html&quot; rel=&quot;noreferrer&quot;&gt;Others say&lt;/a&gt; it happened automatically on using DOS function 25h.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Function  25h  Set Interrupt Vector&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;note ... 4) When you use function 25 to set an interrupt vector, DOS 3.2 doesn't point the actual interrupt vector to what you requested. Instead, it sets the interrupt vector to point to a routine inside DOS, which does this:&lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;&lt;p&gt;Save old stack pointer&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Switch to new stack pointer allocated from DOS's stack pool&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Call your routine&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Restore old stack pointer&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;  &#xA;  &lt;p&gt;The purpose for this was to avoid possible stack overflows when there are a large number of active interrupts. IBM was concerned (this was an IBM change, not Microsoft) that on a Token Ring network there would be a lot of interrupts going on, and applications that hadn't allocated very much stack space would get clobbered.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So whether use of the hardware interrupt stack pool happens automatically depends on which reference you believe.  Some experimentation may be required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the above (solely about hardware interrupt handling) only addresses half of your query.  You also asked about DOS function calls.  For these, MS-DOS (3.1 and later) maintained three stacks and &lt;a href=&quot;http://www.piclist.com/techref/dos/Stacks.htm&quot; rel=&quot;noreferrer&quot;&gt;their use was&lt;/a&gt; complicated.  Simplifying, entering a DOS function, one is on stack 3, then for certain functions, further execution switches to stack 1 or stack 2, depending on the function.  I am not aware of any mechanism (other than the methods described above to switch stacks for hardware interrupt handlers and the use of three internal stacks to spread around the stack overhead of interrupts) used by MS-DOS to prevent/detect overflows of these stacks.&lt;/p&gt;&#xA;" OwnerUserId="3784" LastActivityDate="2019-07-30T21:51:24.403" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11922" PostTypeId="2" ParentId="11854" CreationDate="2019-07-30T22:06:13.433" Score="6" Body="&lt;p&gt;Before &quot;protected memory,&quot; all bytes were basically the same as far as the CPU was concerned. The segment registers are a lot like &quot;bank selectors&quot; that you'd see in other segmented memory schemes, except that they overlapped every 16 bytes. So, if you needed to use 128KB of RAM for a game data file, you would just change the DS register between two or more values to choose which 64k chunk of the 128k file you were reading/writing. Of course, developers had to be careful to either use MS-DOS or BIOS routines to make sure they didn't accidentally overwrite the Interrupt Vector Table, etc, but aside from that, the CPU and memory controller didn't actually enforce many sanity checks directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, MS-DOS's &quot;COM&quot; format was just raw machine code without any headers. Before execution, CS, DS, and SS were all set to the same value. However, a developer could write code to move SS up 64k, giving access to a full-sized stack, and then move DS around as they like to load and save memory as they'd like. The EXE format had additional headers before the machine code, allowing CS, DS, and SS to be different initially. From there, if you were using a higher level language (C was common back then), the langage's memory manager could change CS and SS as necessary to access more than 64k. The only limit is that you could only access 64k of memory per register at one time, without changing the segment register.&lt;/p&gt;&#xA;" OwnerUserId="2059" LastActivityDate="2019-07-30T22:06:13.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11923" PostTypeId="2" ParentId="9093" CreationDate="2019-07-31T07:12:21.800" Score="2" Body="&lt;p&gt;I think the answer is the dataflow analysis part of the dragon book. Take common subexpression elimination for example, available expression analysis will be performed to achieve this optimization for non-SSA IR.&lt;/p&gt;&#xA;" OwnerUserId="14863" LastActivityDate="2019-07-31T07:12:21.800" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="11925" PostTypeId="1" AcceptedAnswerId="11938" CreationDate="2019-07-31T08:56:01.467" Score="7" ViewCount="844" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Serial_Peripheral_Interface&quot; rel=&quot;nofollow noreferrer&quot;&gt;SPI&lt;/a&gt; four-wire serial bus is a very common interface between chips and other small devices these days, but was originally developed by Motorola in the mid-1980s. What were the first Motorola and non-Motorola devices that supported SPI in hardware? Did they call it &quot;SPI&quot; or &quot;Serial Peripheral Interface&quot; (in the sense of, &quot;this device conforms to the SPI pseudo-standard and should be able to talk to any other SPI device&quot;) at that time, or did that come later?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For devices that &quot;run programs,&quot; such as CPUs and perhaps certain very flexible serial interface chips, I'm interested only in hardware that provided explicit support for dealing with the SPI physical layer timing without program intervention during communication. For example, if the program is responsible for dealing with the moment-to-moment details of clock phase (e.g., via bit-banging) rather than just specifying &lt;a href=&quot;https://en.wikipedia.org/wiki/Serial_Peripheral_Interface#Clock_polarity_and_phase&quot; rel=&quot;nofollow noreferrer&quot;&gt;CPOL and CPHA settings&lt;/a&gt; at setup, I don't count that device as having &quot;SPI hardware.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For peripheral devices, I'm interested only in ones that themselves directly implement SPI and use only one single slave select, not ones that can &quot;support&quot; SPI via adding an external shift register and extra address decoding or register selection outside of the standard SPI lines. In other words, all communication between the controller and the device is done via SCLK, MOSI and MISO, and the device is selected with a single S̅S̅ line.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-07-31T16:47:56.997" LastActivityDate="2019-08-02T06:23:10.600" Title="What were the first chips with hardware support for SPI?" Tags="&lt;hardware&gt;&lt;chip&gt;" AnswerCount="3" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="11926" PostTypeId="2" ParentId="11925" CreationDate="2019-07-31T09:28:54.950" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What were the first chips with hardware support for SPI?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Asking for any chip here is a bit fruitless, as this would end up by naming some synchronous serial chip of the 74xx line or even before. After all, SPI wasn't really a new invention but a formal description of the interface of next to any shift register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The SPI block was meant to offer a generic, configurable interface to any kind of clocked serial transfer to the outside world.&lt;/strong&gt; Input and/or output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serial transfer is the most simple way to communicate over the least amount of wires. The SPI block was created to handle this at the lowest possible level, one that can attach any hardware from a single flip-flop all the way to some (other) microcontroller. No matter if it's output, input, or even a mixture of both. All needed is the ability to clock in (or out) data when selected. It was meant to ease of the task of bit-banging from the CPU, while being as flexible as possible to attach as many existing devices that fit this protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's also the reason why Motorola even bothered to implement CPOL/CPHA at all - to make it compatible to as many existing serial shift devices as possible. If SPI would be just as a new bus there would be no need for additional modes, as Motorola could just have defined one mode as the one to be used and save all effort here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So lets take, for the sake of it, a 74164 of 1973.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By anding SCK and SS to be feed into CLK (pin 8) and hooking up MOSI to A and B (Pin 1,3), the '164 will accept single byte transfers and display them on its output lines. A nice little 8 bit output port, and rather straight foreward, isn't it? And that's exactly the reason why SPI was made.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The SPI four-wire serial bus [...] originally developed by Motorola in the mid-1980s.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The earliest controller I know would be 1984, the earliest relevant &lt;a href=&quot;https://worldwide.espacenet.com/publicationDetails/biblio?locale=de_EP&amp;amp;CC=US&amp;amp;NR=4816996&quot; rel=&quot;nofollow noreferrer&quot;&gt;patent&lt;/a&gt; I could find was registered in 1987 and granted in 1989 - but about a more complex high performance controller. To my knowledge, Motorola never tried to protect the basic SPI implementation/protocol. After all, doing so would have slowed adoption which may have not been a good idea to promote it.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What were the first Motorola [...] devices that supported SPI in hardware&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'd say the &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68HC11&quot; rel=&quot;nofollow noreferrer&quot;&gt;M68HC11&lt;/a&gt; would make a good candidate. Introduced in 1984 it held a basic SPI interface assigned to 4 pins of Port D.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[What were the first] non-Motorola devices that supported SPI in hardware&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Do Motorola licensees count? Like Philips had several controllers early on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For sure the &lt;a href=&quot;https://en.wikipedia.org/wiki/AVR_microcontrollers&quot; rel=&quot;nofollow noreferrer&quot;&gt;AVR family&lt;/a&gt; is completely separate from the Motorola world but was able to do SPI from the start by their Universal Serial Interface (USI) block. But that's 1996.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did they [other manufacturers] call it &quot;SPI&quot; or &quot;Serial Peripheral Interface&quot; at that time, or did that come later?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;AFAIK there has been never made a fuzz around using name or abbreviation, as Motorola did neither trademark or copyright the name ... would be hard anyway, as it's just a function description.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For peripheral devices, I'm interested only in ones that themselves directly implement SPI and use only one single slave select, not ones that can &quot;support&quot; SPI via adding an external shift register and extra address decoding or register selection outside of the standard SPI lines&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Erm. You're missing the point. A shift register &lt;strong&gt;is&lt;/strong&gt; already the peripheral device to be connected - not an intermediate part. Hook it up to a SPI port and it offers 8 input or output lines to extend the CPU's GPIO.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-07-31T18:16:21.213" LastActivityDate="2019-07-31T18:16:21.213" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11927" PostTypeId="2" ParentId="11925" CreationDate="2019-07-31T12:10:53.677" Score="8" Body="&lt;p&gt;The first Motorola microcontrollers having an integrated SPI interface were the MC6805S2, MC6805K2 and MC6805K3, available in 1983. See the &lt;a href=&quot;https://usermanual.wiki/Document/19838BitMicroprocessorandPeripheralData.2109768863/view&quot; rel=&quot;noreferrer&quot;&gt;Microprocessors and Peripherals databook&lt;/a&gt;  of the time. I doubt other manufacturers had this available before Motorola (if we exclude discrete logic implementations using shift registers, and only consider complete MCUs or peripherals).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They were already identifying this as &quot;Serial Peripheral Interface&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But note that SPI isn't a standard anyway. It is more a tradition in electronic engineering, and it is very easily abused by manufacturers. It is not implemented quite the same everywhere, and compatibility can break in some corner cases (especially with older devices).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, even now, you can't really say &quot;this device conforms to the SPI pseudo-standard and should be able to talk to any other SPI device&quot; without checking the datasheet details of the two devices you want to be talking together. So in 1983, I don't think it yet crossed the mind of anyone to consider this as a universal way of interfacing devices. It was probably initially seen as just something practical that could easily be interfaced with shift registers to expand the GPIO capabilities. For example, in the databook I linked, I have been unable to find a single peripheral who has a slave SPI interface. They are all supposed to be interfaced to the CPU through a regular memory interface (with address and data bus).&lt;/p&gt;&#xA;" OwnerUserId="4614" LastEditorUserId="4614" LastEditDate="2019-07-31T12:50:41.287" LastActivityDate="2019-07-31T12:50:41.287" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11928" PostTypeId="2" ParentId="11917" CreationDate="2019-07-31T13:40:52.027" Score="7" Body="&lt;p&gt;I'd say you're a bit out of luck with your objective, unfortunately. I'll focus on the C64, which is the only Commodore machine I programmed regularly, but it's probably quite similar on other machines using PETSCII as well:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PETSCII encoding is a variation of ASCII, this is used by the builtin operating system for text. But at least the C64 has fonts in a completely different encoding, called &quot;screen codes&quot;. The OS routines for text output do the conversion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, you will find two things kind of widespread:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;programs storing all their texts in PETSCII because they use OS routines for input/output.&lt;/li&gt;&#xA;&lt;li&gt;programs storing all their texts in &quot;screen code&quot;, because they don't bother with the OS and directly write to screen memory.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I already doubt you can come up with a decent heuristic to distinguish between them. But of course, it can get worse: The C64 (and other Commodore machines) allow you to use custom fonts. I used this possibility in a document viewer recently, with a font &quot;re-pixelled&quot; in 8x8 after the CGA font, so the encoding is CP-437. Of course, all the text is in CP-437 encoding as well. Although you probably won't find many programs using neither PETSCII nor &quot;screen code&quot;, it is possible.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it common for programs to use multiple encodings, e.g. &quot;screen codes&quot;? &lt;em&gt;Which system does keyboard input use?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As for input, the situation is somewhat similar. The OS routines will return characters in PETSCII encoding, so a program using them expects input in PETSCII. A program using the hardware directly (scanning the keyboard matrix) will get matrix positions (row/column) of the key pressed and translate that itself. It might translate to PETSCII, to &quot;screen code&quot;, or to anything else.&lt;/p&gt;&#xA;" OwnerUserId="7040" LastEditorUserId="7040" LastEditDate="2019-07-31T13:47:59.663" LastActivityDate="2019-07-31T13:47:59.663" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11929" PostTypeId="1" CreationDate="2019-07-31T15:37:18.113" Score="13" ViewCount="378" Body="&lt;p&gt;In &lt;a href=&quot;http://www.sunburstandluminary.com/SLhome.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;his account&lt;/a&gt; of the history of the Apollo Guidance Computer, &lt;a href=&quot;https://wehackthemoon.com/bios/don-eyles&quot; rel=&quot;nofollow noreferrer&quot;&gt;Don Eyles&lt;/a&gt; describes the role of a parity bit as follows (p. 80):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... if one of those hair thin wires in our woven &lt;a href=&quot;https://en.wikipedia.org/wiki/Core_rope_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;core-rope memory&lt;/a&gt; happened to break, a parity failure might occur. Each of our fifteen-bit words of memory actually had an additional, sixteenth bit, called the parity bit, which the assembler set to a one or a zero to force the total number of ones among the 16 bits to be odd. When the computer accessed a word of memory it counted the bits that were set to one and if the result was not an odd number it would trigger a restart.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I understand how parity is working here to detect the broken wire; but it's not clear to me what restarting accomplishes. If the cause of the parity error was a broken wire, won't that wire still be broken after the restart, trigging another, and so on?&lt;/p&gt;&#xA;" OwnerUserId="8757" LastEditorUserId="10260" LastEditDate="2019-08-27T18:37:41.077" LastActivityDate="2019-08-27T18:37:41.077" Title="How did restarts resolve parity errors triggered by broken core-rope wires?" Tags="&lt;hardware&gt;&lt;memory&gt;&lt;apollo-guidance-computer&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11930" PostTypeId="2" ParentId="11878" CreationDate="2019-07-31T15:42:29.083" Score="1" Body="&lt;p&gt;Everyone is talking about the improvements in software between Windows 95 and Windows 7, but in those 15 years there were huge advancements in hardware as well. You can run an identical copy of Linux on some consumer-grade hardware from 1996 and some hardware from 2016 and you will find a world of difference in system stability. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Older hardware simply crashed more often, and it was only really around 2003-2004 that things really changed. Manufacturers of motherboards, CPUs, RAM and various other hardware upped their game significantly as businesses and home users demanded better stability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the most popular motherboard manufacturers in the 90s was a company named &quot;PC Chips&quot;, who also traded under about 20 other names. They produced these shonky, poorly-soldered, barely-shielded motherboards at rock bottom prices. A lot of the system crashes back then were due to people running those motherboards, and not Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, Win95 was horribly crash prone itself, and it was always a guessing game as to whether your crashes were hardware or software related.&lt;/p&gt;&#xA;" OwnerUserId="14577" LastActivityDate="2019-07-31T15:42:29.083" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11931" PostTypeId="1" AcceptedAnswerId="11934" CreationDate="2019-07-31T16:21:18.223" Score="15" ViewCount="763" Body="&lt;p&gt;I know the Atari's FP package used BCD for &lt;em&gt;rather&lt;/em&gt; dubious reasons, but does anyone know of other examples of basic &quot;operating system&quot; level code on common platforms that used BCD?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect BCD was added due to the history of using micros in calculator roles, but I am wondering if this is something that was common in the home computer role.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By common platform I refer to Apple II, BBC, Commodore, etc.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="3290" LastEditDate="2020-05-28T21:17:41.123" LastActivityDate="2020-05-28T21:17:41.123" Title="Did any micros use the 6502 BCD mode in their OS?" Tags="&lt;6502&gt;&lt;binary-coded-decimal&gt;" AnswerCount="3" CommentCount="16" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11932" PostTypeId="1" CreationDate="2019-07-31T19:55:51.100" Score="3" ViewCount="350" Body="&lt;p&gt;Programs like &lt;a href=&quot;http://beagle.applearchives.com/the_software/vintage_beaglebros_software/the_beagle_compiler.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Beagle Compiler&lt;/a&gt; allow AppleSoft BASIC or other Apple II BASIC variants to be compiled. How do the compilers compare in terms of compatibility with AppleSoft language features? Eg how often does unmodified BASIC code work with different compilers.&lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="175" LastEditDate="2021-01-05T15:04:28.010" LastActivityDate="2021-01-05T15:04:28.010" Title="How do Apple II BASIC compilers compare?" Tags="&lt;apple-ii&gt;&lt;compilers&gt;&lt;applesoft-basic&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2019-08-08T04:47:21.750" ContentLicense="CC BY-SA 4.0" />
  <row Id="11933" PostTypeId="2" ParentId="11911" CreationDate="2019-07-31T20:18:41.280" Score="25" Body="&lt;p&gt;Figure 1-1 (page 1-4) in [&lt;a href=&quot;https://archive.org/details/bitsavers_motoroladaMicroprocessorsDataManual_80083566&quot; rel=&quot;noreferrer&quot;&gt;mot81&lt;/a&gt;] gives an overview of the early days&#xA;of the 6800 family:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wZ4pc.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wZ4pc.png&quot; alt=&quot;Genealogy of the cohesive M6800 microprocessor/microcomputer family&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can't be read for exact dates so I've included everything that is&#xA;not clearly after the 6809 and added further details from other&#xA;sources documented below.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Production  Annnounced      Product&#xA;1974-11     1974-03         6800 microprocessor&#xA;1976-07?    ?               68A00, 68B00 (1.5 and 2 MHz)&#xA;            1977-03         6802, 6808 (onboard clock+RAM, clock)&#xA;            1978-08         6801, 6803&#xA;1979?       1978-07?        6809, 68HC09&#xA;            1979?           6805&#xA;            1979-12         68HC05&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;6800&lt;/strong&gt;: &quot;[A]nnounced in March 1974 and was in full production by&#xA;the end of that year.&quot; &quot;The M6800 microcomputer system was finally&#xA;in production by November 1974.&quot; Sourced in [&lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6800&quot; rel=&quot;noreferrer&quot;&gt;wp6800&lt;/a&gt;].&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;68A00&lt;/strong&gt;, &lt;strong&gt;68B00&lt;/strong&gt;: &quot;The new parts were available in July 1976.&quot;&#xA;Sourced in [&lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6800&quot; rel=&quot;noreferrer&quot;&gt;wp6800&lt;/a&gt;].&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;6802&lt;/strong&gt;, &lt;strong&gt;6808&lt;/strong&gt;: Added onboard clock and (6802 only) 128 bytes of&#xA;RAM. Announced by March 3rd 1977. Sourced in [&lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6800&quot; rel=&quot;noreferrer&quot;&gt;wp6800&lt;/a&gt;].&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;6801&lt;/strong&gt;, &lt;strong&gt;6803&lt;/strong&gt;: Adds 16-bit &quot;D&quot; register as concatenation of A&#xA;and B and various new instructions, including multiply. Slightly to&#xA;the left of 1979 in the [&lt;a href=&quot;https://archive.org/details/bitsavers_motoroladaMicroprocessorsDataManual_80083566&quot; rel=&quot;noreferrer&quot;&gt;mot81&lt;/a&gt;] diagram, though data sheets for it&#xA;don't appear until [&lt;a href=&quot;https://usermanual.wiki/Document/19838BitMicroprocessorandPeripheralData.2109768863/view&quot; rel=&quot;noreferrer&quot;&gt;mot83mpu&lt;/a&gt;]. [&lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6800&quot; rel=&quot;noreferrer&quot;&gt;wp6800&lt;/a&gt;] references &quot;&lt;em&gt;Product&#xA;Preview MC6801&lt;/em&gt;, Austin, Texas: Motorola Semiconductor Products.&#xA;August 1978. NP-93.&quot; This or a very similar MCU appears to have been&#xA;in use by General Motors as early as 1977[&lt;a href=&quot;http://www.cpushack.com/2016/08/19/cpu-of-the-day-motorola-mc6801-the-second-first-6800-mcu/&quot; rel=&quot;noreferrer&quot;&gt;shack&lt;/a&gt;]; it's referred to&#xA;in [&lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102702020&quot; rel=&quot;noreferrer&quot;&gt;oral&lt;/a&gt;] as a &quot;GMCM&quot; and in [&lt;a href=&quot;https://archive.org/details/bitsavers_motoroladacessorMicrocontrollerandPeripheralDataVo_47516431/page/n13&quot; rel=&quot;noreferrer&quot;&gt;mot88v1&lt;/a&gt;] Figure 1-1 (p. 1-3) as&#xA;&quot;custom CPU.&quot;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;6809&lt;/strong&gt;: The earliest mention I can find that includes a month is&#xA;in an Elsevier journal.[[elsev]] This seems unlikely to be the&#xA;initial announcement, but is probably well before production. (6809s&#xA;were not on sale in the back pages of &lt;em&gt;Byte&lt;/em&gt; in December 1977.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;6805&lt;/strong&gt;: Optimized for controller applications; incompatible&#xA;architectural changes such as X register reduced to 8 bits. It may&#xA;have existed internally at Motorla as early as 1977 or 1978: &quot;this&#xA;is '77-'78 timeframe -- they came and said, 'Hey, we'd like to have&#xA;a CMOS version of this 6805 variant.&quot;[&lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102702020&quot; rel=&quot;noreferrer&quot;&gt;oral&lt;/a&gt;]. (The M14605 is the&#xA;CMOS 6805. It and several 6805 variants have data sheets in&#xA;[&lt;a href=&quot;https://archive.org/details/bitsavers_motoroladaMicroprocessorsDataManual_80083566&quot; rel=&quot;noreferrer&quot;&gt;mot81&lt;/a&gt;].) [&lt;a href=&quot;http://www.cpushack.com/2016/08/19/cpu-of-the-day-motorola-mc6801-the-second-first-6800-mcu/&quot; rel=&quot;noreferrer&quot;&gt;shack&lt;/a&gt;] claims release in 1979. &lt;code&gt;archive.org&lt;/code&gt; has an&#xA;&lt;em&gt;M6805 M14605 Family Users Manual&lt;/em&gt; dated 1980.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;68HC05&lt;/strong&gt;: &quot;A low-power variation of the 05,&quot; &quot;shipped..in December&#xA;of 1979.&quot;[&lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102702020&quot; rel=&quot;noreferrer&quot;&gt;oral&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In case you're wondering about the &quot;holes&quot; in this numbering scheme:&#xA;The &lt;strong&gt;6804&lt;/strong&gt; was a reduced cost modification of the 6805 released&#xA;around 1982. The &lt;strong&gt;6806&lt;/strong&gt; and &lt;strong&gt;6807&lt;/strong&gt; designations were never used,&#xA;as far as I can tell. The &lt;strong&gt;6810&lt;/strong&gt; was a RAM chip. The &lt;strong&gt;6811&lt;/strong&gt; was a&#xA;6801 extension introduced in 1984. The &lt;strong&gt;6812&lt;/strong&gt; in turn extended that,&#xA;but not until the 1990s. From the beginning parts from &lt;strong&gt;6820&lt;/strong&gt;&#xA;onwards were peripherals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;[elsev] &quot;MC6809 microprocessor&quot;, Microprocessors, Elsevier, vol 2&#xA;issue 3 p. 162. July 1978.&lt;/li&gt;&#xA;&lt;li&gt;[mot81] &lt;a href=&quot;https://archive.org/details/bitsavers_motoroladaMicroprocessorsDataManual_80083566&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Motorola Microprocessors Data Manual&lt;/em&gt;&lt;/a&gt;. 1981.&lt;/li&gt;&#xA;&lt;li&gt;[mot83mpu] &lt;a href=&quot;https://usermanual.wiki/Document/19838BitMicroprocessorandPeripheralData.2109768863/view&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;8-Bit Microprocessor &amp;amp; Peripheral Data&lt;/em&gt;&lt;/a&gt;.&#xA;Motorola, 1983.&lt;/li&gt;&#xA;&lt;li&gt;[mot83mcu] &lt;a href=&quot;https://archive.org/details/bitsavers_motoroladaipMicrocontrollerData_42672102&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Single-chip Microcomputer Data&lt;/em&gt;&lt;/a&gt;. Motorola,&#xA;1983.&lt;/li&gt;&#xA;&lt;li&gt;[mot88v1] &lt;a href=&quot;https://archive.org/details/bitsavers_motoroladacessorMicrocontrollerandPeripheralDataVo_47516431/page/n13&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Microprocessor, Microcontroller and Peripheral Data,&#xA;Volume I&lt;/em&gt;&lt;/a&gt;. Motorola, 1988.&lt;/li&gt;&#xA;&lt;li&gt;[oral] &lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102702020&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Motorola 6800 oral history panel: development and&#xA;promotion&lt;/em&gt;&lt;/a&gt;. Computer History Museum, 2008.&lt;/li&gt;&#xA;&lt;li&gt;[shack] &lt;a href=&quot;http://www.cpushack.com/2016/08/19/cpu-of-the-day-motorola-mc6801-the-second-first-6800-mcu/&quot; rel=&quot;noreferrer&quot;&gt;CPU of the Day: Motorola MC6801 – The (second) first&#xA;6800 MCU&lt;/a&gt;. www.cpushack.com, 2016.&lt;/li&gt;&#xA;&lt;li&gt;[wp6800] &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_6800&quot; rel=&quot;noreferrer&quot;&gt;Motorola 6800&lt;/a&gt;. Wikipedia.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-08-14T11:38:41.007" LastActivityDate="2019-08-14T11:38:41.007" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11934" PostTypeId="2" ParentId="11931" CreationDate="2019-07-31T20:24:37.353" Score="14" Body="&lt;p&gt;(Only partly my answer, as the important list is a collection of what has been found and noted by others in comments to the question - I thought putting it in an answer would be helpful to others looking)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I know the Atari's FP package used BCD for rather dubious reasons,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I wouldn't call it dubious, but rather obvious. Using BCD based FP will always return the same result as done 'by hand' as there will be no binary artefacts. All roundings due to precision will be the same as by 'classic' methods, thus yielding the 'right' result.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but does anyone know of other examples of basic &quot;operating system&quot; level code on common platforms that used BCD?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I guess &lt;em&gt;&quot;operating system level&quot;&lt;/em&gt; in this code covers what usual home computers of that time had in ROM. Right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the list:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;/q/11931&quot;&gt;According to Tim Locke&lt;/a&gt;, systems using BCD-FP were&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Kyotronic 85 (Tandy M100/102, etc.) with a 8085 CPU.&lt;/li&gt;&#xA;&lt;li&gt;TI 99/4 (9900CPU)&lt;/li&gt;&#xA;&lt;li&gt;MSX (!) on Z80&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of them were 8 byte implementation with 14 digit precision (Atari was 6 byte/10 digit). MSX-BASIC also offered a 4 byte, 6 digit single format. &lt;a href=&quot;https://en.wikipedia.org/wiki/MSX_BASIC&quot; rel=&quot;noreferrer&quot;&gt;MSX-BASIC&lt;/a&gt; is also is quite notable as it's based on Microsoft BASIC 4.5 which had binary FP. So there must have been an explicit request to change to decimal based FP (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition Tim mentions the quite marvellous &lt;a href=&quot;https://www.atarimagazines.com/v4n7/kyanpascal.html&quot; rel=&quot;noreferrer&quot;&gt;Kyan-Pascal&lt;/a&gt;, available for several 6502 machines including Atari 8 Bit, Apple II and Commodore C64. Its real format was also BCD-based with a length of 8 bytes and 13 valid digits (*2). This is especially remarkable as Kyan produced (in comparison) exceptional fast code.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I suspect BCD was added due to the history of using micros in calculator roles&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Isn't any FP use a 'calculator' one?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but I am wondering if this is something that was common in the home computer role.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Rather not. It may be safe to assume it's just by intention due to the targets set for development. If the designers / customers thought of producing 'right' results as a design goal, then it was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is as well the reason why Microsoft used BCD-FP for Multiplan. After all, it'd be quite odd if some super expensive modern computer with even more expensive software would produce a result that differs from what the old worn-out mechanical calculator says - and is obviously wrong when checking (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, offering some package with 'right' precision was a valid sales argument. I remember many articles in (micro) computer papers back then musing about artefacts and errors introduced into mathematics by usage of binary FP and how to avoid them. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On a side note, &lt;a href=&quot;/q/11931&quot;&gt;Jeremy P mentions&lt;/a&gt; that &lt;em&gt;Pet Space Invaders&lt;/em&gt; on the Commodore did use BCD for some calculation. Not OS level, but quite interesting.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I wouldn't be surprised if the FP handling was taken from their COBOL compiler (*4) or Multiplan, as both used BCD as well - BCD is a requirement for &lt;a href=&quot;https://en.wikipedia.org/wiki/COBOL&quot; rel=&quot;noreferrer&quot;&gt;COBOL&lt;/a&gt; anyway, and it makes a quite sense for a spreadsheet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - In difference to all other BCD-FP here, the exponent was also stored in BCD - others used binary to increase range (works as it's a fixed point value)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Never bet on users not finding a hidden error - anyone remember the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pentium_FDIV_bug&quot; rel=&quot;noreferrer&quot;&gt;Pentium Bug&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Fun fact, MS-COBOL wasn't just some product for customers with old business code, but used a lot within (early) MS products for micros - take &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Sort&quot; rel=&quot;noreferrer&quot;&gt;Sort&lt;/a&gt; as an example :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-08-05T13:38:01.997" LastActivityDate="2019-08-05T13:38:01.997" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11935" PostTypeId="2" ParentId="11929" CreationDate="2019-07-31T21:07:30.230" Score="11" Body="&lt;p&gt;The Apollo Guidance Computer had fixed and erasable memory.  The former (which is the focus of this question) contained instructions and constants, and was functionally equivalent to ROM.  The latter was where data was stored, and was functionally equivalent to RAM.  The response to parity errors in either memory was the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The effect of a failed memory bit is highly variable.  In the worst cases, it could lock up the computer or branch to the wrong code.  Most likely would be an incorrect computation with the computer otherwise proceeding normally.  It's also possible that a bit error may be in code that would not be used, or in branch cases that did not get taken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The AGC had several dozen programs, which the astronauts could select and run.  The computer's response to a parity error was to reset the AGC to a state where the astronauts could select a new program (possibly even the same program they had been running).  Unless absolutely needed to reset the computer to this state, data was preserved.  So the astronauts could try the same program, a different program, manual control (if applicable), or (for the lunar module) use the Abort Guidance System instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would the same problem recur?  Again, it depends heavily on the location of the error bit.  Some subroutines are used in virtually every program, and the problem would again manifest itself; other parts of the code execute under very specific circumstances and may never again be touched.  In the worst case, there were procedures for dealing without the AGC, and the astronauts and ground crews practiced various contingencies in simulators before launch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the computer was in the cabin, it was not practical to repair it during flight.  Both types of memory were woven by hand under a microscope.  The problem poses a &lt;em&gt;broken wire&lt;/em&gt;, which would require unweaving and then re-weaving that line of memory.  Even if the astronauts had the tools and materials available, they would be more likely to cause more damage or to get the pattern wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Patching the code was not an option. The fixed memory was physically permanent. Even if you could write code to the erasable memory, there was no mechanism to execute code at an arbitrary address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://space.stackexchange.com/a/35942/26446&quot;&gt;No parity error&lt;/a&gt; actually occurred during the entire Apollo Program.  That link to Space.SE provides more information on parity errors.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2019-08-01T15:52:17.653" LastActivityDate="2019-08-01T15:52:17.653" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11937" PostTypeId="1" AcceptedAnswerId="11939" CreationDate="2019-08-01T09:30:04.723" Score="13" ViewCount="615" Body="&lt;p&gt;A useful way to do concurrent programming is, say, a Compare-And-Swap instruction, which really is two operations, executed one after the other, atomically. This was available on the IBM 370 and on the 68000 as &lt;code&gt;CAS&lt;/code&gt;, (and on later x86's as &lt;code&gt;cmpxchg&lt;/code&gt;, but not on the PDP-10 as far as I can tell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-10 also allows an interrupt to occur part-way through one instruction, so there's no guarantee that even one instruction is atomic. Yet, they were sold and maintained in ASMP configurations, and in other multiprocessing topologies as well I expect, so there must have been ample support for it. How was it done in those days?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-10-28T12:05:02.510" Title="How was concurrent programming achieved on the PDP-10?" Tags="&lt;pdp-10&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11938" PostTypeId="2" ParentId="11925" CreationDate="2019-08-01T09:51:01.527" Score="3" Body="&lt;p&gt;The first mention of SPI that I can find is in the Motorola data book&#xA;&lt;a href=&quot;https://archive.org/details/bitsavers_motoroladaipMicrocontrollerData_42672102&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Single-chip Microcomputer Data&lt;/em&gt;&lt;/a&gt; from 1984.¹&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The three devices in that book that support &quot;Serial Peripheral&#xA;Interface&quot; are the 6505K2/K3, 6505S2 and 68HC11A4. The data sheets for&#xA;all of these are marked &lt;em&gt;&quot;This document contains information on a&#xA;product under development. Motorola reserves the right to change or&#xA;discontinue this product without notice.&quot;&lt;/em&gt; Contrasting this with&#xA;&lt;em&gt;&quot;This document contains information on a new product&quot;&lt;/em&gt; or no notice&#xA;at all on other data sheets, I conjecture that these devices were not&#xA;available for some time after the book had been printed, but the&#xA;descriptions themselves make it clear that this is when SPI had been&#xA;invented. (Nothing like it appears in the 1981 data book).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6805K2/K3 (227/275) data sheet and 6805S2 (390/438) description&#xA;label the SPI interface pins differently from what eventually became&#xA;the standard: &lt;code&gt;SPIS&lt;/code&gt; (slave select, still active low, despite no&#xA;overbar), &lt;code&gt;SPICL&lt;/code&gt; (clock), and two pins both labeled &lt;code&gt;SPID&lt;/code&gt; (data)&#xA;which correspond to &lt;code&gt;MISO&lt;/code&gt; and &lt;code&gt;MOSI&lt;/code&gt;. (I guess at the time of writing&#xA;they'd not figured out how to clearly separate the two, since they&#xA;both do both input and output, depending on role.) The 68HC11A4 data&#xA;sheet (599/647), however, uses the now-standard &lt;code&gt;S̅S̅&lt;/code&gt;, &lt;code&gt;SCK&lt;/code&gt;, &lt;code&gt;MOSI&lt;/code&gt;&#xA;and &lt;code&gt;MISO&lt;/code&gt; designations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6505K2/K3 data sheet gives no information on SPI, other than to&#xA;say that it's there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 68HC11A4 data sheet, which describes it on the first page as &quot;A&#xA;&lt;em&gt;New&lt;/em&gt; Serial Peripheral Interface&quot; (emph. mine), provides little more:&#xA;just a half page of text containing a brief description and a&#xA;paragraph on each pin. (613/661) But the two sample system&#xA;configurations they give (figure 5) are quite interesting. The first&#xA;is a &quot;Master-slave system configuration&quot; consisting of five MC68HC11A4&#xA;MCUs, one master and four slaves. The second is the same hardware in a&#xA;multi-master configuration (three master/slave, two slave).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6805S2 description, however, really gets into the details,&#xA;providing an entire 25 page section on SPI (415/463) which describes&#xA;not only the hardware but how to use it in many different ways.² Much&#xA;of it, the majority in fact, discusses how to deal with bus&#xA;arbitration using the clock line, the data line, a common select line&#xA;or combinations of these. There's also discussion of addressing&#xA;devices via addresses in the messages, rather than using select lines&#xA;for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The example configuration in figure 4-15 (438/486) shows a three-wire&#xA;daisy-chain configuration with slaves &quot;MCU 1&quot;, &quot;MCU 2&quot; and&#xA;&quot;Peripheral&quot; and master device &quot;MCU 3.&quot; These all share a common slave&#xA;select line with a pull-up resistor to Vcc. As the text mentions, all&#xA;devices must understand some sort of protocol within the data stream&#xA;to determine if messages are addressed to them, they should change the&#xA;direction of information flow, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The example configuration in figure 4-16 (439/487) is three MCUs in a&#xA;bus configuration, again sharing a common slave select line with a&#xA;pull-up resistor to Vcc. This could be multi-master using any of a&#xA;variety of arbitration methods described in the text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this attention paid to multiple masters, bus arbitration,&#xA;suggestions of addressing in packets and so on makes me disagree with&#xA;the the other answers here that suggest this was designed primarily as&#xA;a simple way to talk to 74xxx shift registers and the like. The&#xA;ability to do that as well was clearly something they had in mind (the&#xA;68HC11A4 data sheet mentions that it provides both &quot;Interface With Low&#xA;Cost 'Dumb' Peripherals&quot; and &quot;Interface With Intelligent Peripherals&#xA;on Master/Slave Basis&quot; (613/661)) since with some minimal design work&#xA;it comes &quot;for free,&quot; but the massive amount of work put into desiging&#xA;for and describing bus arbitration and the multiple examples of&#xA;multi-MCU systems, including multi-master multi-MCU systems, makes it&#xA;clear that the intent was to provide a &lt;em&gt;lot&lt;/em&gt; more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As well demonstrating use of the SPI interface be used for MCU-MCU&#xA;communication, Motorola had at least two peripherals in this catalogue&#xA;explicitly claiming to use an SPI interface:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MC68HC68A1: Serial 10-bit analog-to-digital converter.&#xA;&quot;Interface to the A/D converter is through a standard serial&#xA;peripheral interface (SPI) unit.&quot; (623/671) This appears to use a&#xA;two-way communication protocol with configuration commands sent to&#xA;the chip and results and samples sent back to the controller, but&#xA;the exact protocol isn't documented here.&lt;/li&gt;&#xA;&lt;li&gt;MC68HC68R1/2: 8-bit serial static RAMs. &quot;Directly compatible&#xA;with SPI interface.&quot; (624/672) And address/control byte followed by&#xA;data bytes are sent to the RAM and (on reads) it sends back data&#xA;bytes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹ Except where noted otherwise, page references here are to this book&#xA;in the form &quot;(&lt;em&gt;nnn&lt;/em&gt;/&lt;em&gt;mmm&lt;/em&gt;)&quot; where &lt;em&gt;nnn&lt;/em&gt; is the page number from&#xA;section 3 and &lt;em&gt;mmm&lt;/em&gt; is the page of the PDF document: &quot;(227/275)&quot; is&#xA;page 3-227 in the book and page 275 of the PDF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;² Interestingly, the 6805S2 offers some extra capabilities in the SPI&#xA;hardware let it (with a bit of software support) do one-wire operation&#xA;without a clock line. (435/483) This is claimed to allow you to use&#xA;the SPI hardware to communicate with the ACIA built-in to the 6801.&#xA;This did not appear in later 68HC11 data sheets I've looked at.&#xA;There's also discussion of configurations that today would not be&#xA;considered &quot;SPI,&quot; such as single-line half-duplex data&#xA;transmission/reception.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-08-02T06:23:10.600" LastActivityDate="2019-08-02T06:23:10.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11939" PostTypeId="2" ParentId="11937" CreationDate="2019-08-01T10:47:58.450" Score="12" Body="&lt;h2&gt;Short Answer&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It's done by use of the EXCHange instruction with interrupts disabled.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The PDP-10 also allows an interrupt to occur part-way through one instruction, so there's no guarantee that even one instruction is atomic.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Even the PDP-10 could disable interrupts.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How was it done in those days?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The old fashioned way of semaphores to protect the pointers to be exchanged, using the good old 3 step process.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Wait for semaphore to be unassigned&lt;/li&gt;&#xA;&lt;li&gt;Acquire semaphore&lt;/li&gt;&#xA;&lt;li&gt;Check if acquired; if not, restart.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To make this work, (only) basic memory access has to be atomic (*1). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are in general three set of instructions used to do so&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Test-and-set&quot; rel=&quot;nofollow noreferrer&quot;&gt;TS type&lt;/a&gt; instructions check a bit (byte) to be zero and set it if true. In either case a condition code is set to learn about success or not (*2).&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TS on IBM 360, BSET on M68k or SBITL NS32K&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Branch-And-Set instructions will test a bit for being set (cleared), branch if true, or set (clear) it if false. (*3)&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BBSSI/BBCCI on DEC VAX machines&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Exchange type instructions, which exchange a target bit/byte/word with a value in a private storage (usually a register).&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;EXCH on PDP-10, LOCK XCHG on x86 CPUs&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The PDP-10 works here like the 8086 (or rather the other way around :)). To acquire a semaphore its value is first checked to signal 'free', then exchanged with a new (unique) value. If the exchange was successful (had to be checked) than carry on, else go on with error handling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mentioned &lt;strong&gt;CS&lt;/strong&gt; (*4) is more than a basic function, but the luxury of combining the simplicity of TS with the ability to exchange whole words (addresses) at once, thus making it perfect for elegant and fast handling of linked list in multiprocessing/-processor environments.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Of course, it also has to be a basic access on the shared memory itself, no cache or alike inbetween.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - TS (on the /360) is a quite nifty thing, as its function is outsourced to the memory controller and based on how core memory works. Reads on core are destructive, so content had to be written back within the same memory cycle, an otherwise never interrupted sequence. By having the test for zero done by logic in the memory controller, setting it to FF could be done within this cycle. It can't get more atomic than that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By putting that part of the operation all the way down into the memory module, no locking was needed. It's like the perfect speed up by avoiding the costly operation at all. Of course, later, semiconductor based memory had to add a locking (and synchronisation) protocol, thus making TS as slow as a CS would be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Strictly speaking Branch-And-Set instructions are a variation of TS where the branch according to the test result is already embedded in the test instruction, still I'd rather see them separate - much like the CS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - CS on /360, CAS on M68k, CMPXCHG on Intel x86. On RISC implementations this gets turned into &lt;a href=&quot;https://en.wikipedia.org/wiki/Load-link/store-conditional&quot; rel=&quot;nofollow noreferrer&quot;&gt;two operations&lt;/a&gt; of Load-Link reading and marking a word to be exchanged and Store-Conditional to do the store if no other access has happened. The idea is to avoide RMW cycles. But to me it seams more of a cheap trick just handing down the problem to the memory controller (but without the elegance of the original TS) - thus adding quite some restrictions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-28T12:05:02.510" LastActivityDate="2019-10-28T12:05:02.510" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11940" PostTypeId="1" AcceptedAnswerId="11944" CreationDate="2019-08-02T08:46:07.220" Score="15" ViewCount="999" Body="&lt;p&gt;Most modern platforms have pretty well-defined file formats; e.g. Windows uses PE, Linux and BSD - ELF (previously a.out), macOS - Mach-O, AIX - XCOFF and so on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What were (are?) common executable file formats used on mainframes (besides ELF used on Linux for s390x)? Are there official specifications describing them?&lt;/p&gt;&#xA;" OwnerUserId="3783" LastActivityDate="2019-08-02T17:31:42.470" Title="IBM mainframe classic executable file formats" Tags="&lt;ibm&gt;&lt;mainframe&gt;&lt;file-format&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11941" PostTypeId="2" ParentId="11940" CreationDate="2019-08-02T09:16:14.170" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What were (are?) common executable file formats used on mainframes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/OS/360_Object_File_Format&quot; rel=&quot;noreferrer&quot;&gt;OS/360 object file format&lt;/a&gt; (OFF) has been pretty stable since the 1960s and used by next to all /360ff based OS up until now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;em&gt;addition&lt;/em&gt;, in the late 1990s IBM introduced the &lt;a href=&quot;https://en.wikipedia.org/wiki/GOFF&quot; rel=&quot;noreferrer&quot;&gt;Generalized Object File Format&lt;/a&gt; to give more support to features helpful to 'modern' languages, like long names and alike. For most parts it can be seen as an extension to OFF which it has not replaced as defailt format.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Are there official specifications describing them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The are pretty well documented and easy to find looking for &quot;IBM /370 Object File Format&quot; - but the two linked Wiki entries should already offer a good start.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-08-02T09:16:14.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11942" PostTypeId="2" ParentId="11937" CreationDate="2019-08-02T13:07:42.727" Score="5" Body="&lt;p&gt;I'm pretty sure that the KA-10 processor, the first of the PDP-10 processors, had a read-pause-write memory cycle that allowed retrieving and altering a memory location in an atomic operation.  Otherwise, instructions like AOSE (Add One and Skip if Equal) would be vulnerable to interrupts.  &lt;strong&gt;Edit:&lt;/strong&gt; Also vulnerable to other processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any instruction could be interrupted after it was fetched, but before it was executed.  The program counter after the interrupt was dismissed would cause the instruction fetch to be repeated.  Very few instructions could be interrupted &quot;in the middle&quot;.  The only ones that come to mind are ILDB, IDPB, and BLT.  BLT,  Block Transfer, could do thousands on memory cycles in the course of operation,  and might update the referenced accumulator, or not, depending on interrupts. Also relevant is a processor flag called &quot;First part done&quot;.  This was used in the ILDB and IDPB instructions to prevent the byte pointer from being incremented twice, if it was interrupted in the middle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the TOPS-10 operating system, there was an operation called &quot;requeuing a job&quot; that took six instructions to accomplish,  and interrupts were, in fact, turned off before requeuing a job, and turned back on after.  The later VAX architecture had complex requeuing instructions to allow this kind of operation to be done atomically without disabling interrupts.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this is from memory, and I apologize for that.  I wasn't able to back up the above claims from quick online searches.  I have a TOPS-10 Monitor Internals Guide somewhere, but I haven't searched for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; For the mechanics of transferring a job from one queue to another,  you can read the &lt;a href=&quot;http://www.textfiles.com/bitsavers/pdf/dec/pdp10/TOPS10_monitorInternalsCourse/TOPS-10_Version_7.04_Monitor_Internals_Course_Jun89.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;TOPS-10 Monitor Internals Guide&lt;/a&gt;.  The part I'm talking about is in section 6.2.1 Queue Transfers. Unfortunately, it doesn't show the six instructions I remember.&lt;br&gt;&#xA;For a good discussion of semaphores,  you might read the section on Shareable Resources.  &lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2019-08-03T19:42:34.213" LastActivityDate="2019-08-03T19:42:34.213" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11943" PostTypeId="2" ParentId="11811" CreationDate="2019-08-02T15:58:05.907" Score="7" Body="&lt;p&gt;The Game Boy is an &lt;a href=&quot;https://en.wikipedia.org/wiki/System_on_a_chip&quot; rel=&quot;nofollow noreferrer&quot;&gt;SoC&lt;/a&gt;; with the exception of the on-board work RAM&#xA;and video RAM (8 KB each), the CPU and all on-board peripherals are&#xA;contained on a single chip. (The cartridge adds external ROM and&#xA;&lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/The_Cartridge_Header#0147_-_Cartridge_Type&quot; rel=&quot;nofollow noreferrer&quot;&gt;optionally a memory bank controller, RAM and other peripherals&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;Thus, the HRAM is on the CPU die. Is not inherently faster than&#xA;external memory: all accesses to it take the same number of cycles as&#xA;accesses to external memory.&lt;/p&gt;&#xA;&lt;p&gt;You may be able to save some cycles when accessing any address in the&#xA;&lt;code&gt;$FF00-$FFFF&lt;/code&gt; range (whether HRAM or not) by using one of four new&#xA;instructions added for this purpose, each adding either an 8-bit&#xA;constant or the contents of register C to &lt;code&gt;$FF00&lt;/code&gt; to generate the&#xA;effective address:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;E0 nn       ldh (nn),A      ; 12 cycles&#xA;F0 nn       ldh A,(nn)      ; 12 cycles&#xA;E2          ld (C),A        ; 8 cycles&#xA;F2          ld A,(C)        ; 8 cycles&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;These are understood by all &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Assemblers&quot; rel=&quot;nofollow noreferrer&quot;&gt;assemblers targeting Game Boy&lt;/a&gt;.&#xA;Optimizations vary from assembler to assembler. RGBDS does &lt;a href=&quot;https://github.com/rednex/rgbds/blob/master/src/asm/asmy.y#L1883-L1899&quot; rel=&quot;nofollow noreferrer&quot;&gt;optimize&#xA;&lt;code&gt;ld a,($FFnn)&lt;/code&gt; to an &lt;code&gt;ldh&lt;/code&gt; opcode&lt;/a&gt; (and the same for stores)&#xA;unless the &lt;code&gt;-L&lt;/code&gt; option is given to disable that. WLA DX does not,&#xA;though it does &lt;a href=&quot;https://github.com/vhelin/wla-dx/blob/master/opcodes_gb.c#L226-L227&quot; rel=&quot;nofollow noreferrer&quot;&gt;assemble &lt;code&gt;LD A,($FF00+nn)&lt;/code&gt; to the shorter&#xA;opcodes&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;But standard 8080/Z80 instructions of the same length are just as&#xA;fast. For example, the one-byte instruction &lt;code&gt;ld A,(HL)&lt;/code&gt; (opcode &lt;code&gt;$7E&lt;/code&gt;)&#xA;is also only 8 cycles, whether HL is loaded with an &lt;code&gt;$FFnn&lt;/code&gt; address or&#xA;not.&lt;/p&gt;&#xA;&lt;p&gt;The only special property or use of the HRAM visible to the&#xA;programmer, besides that it's in the &lt;code&gt;$FF00-$FFFF&lt;/code&gt; address range and&#xA;thus accessible using the additional instructions above, is that the&#xA;DMA controller, when operating, does not cut off access to it as it&#xA;does for external memory. When you &lt;a href=&quot;http://bgb.bircd.org/pandocs.htm#lcdoamdmatransfers&quot; rel=&quot;nofollow noreferrer&quot;&gt;trigger a DMA transfer&lt;/a&gt;&#xA;the CPU cannot access external memory for 160 microseconds, so the&#xA;code the CPU runs during this period must be read from HRAM. (I have&#xA;no idea what happens if you try to read code from or otherwise access&#xA;external memory during this period.) More details and an example of&#xA;how this is handled can be found at &lt;a href=&quot;https://exez.in/gameboy-dma&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Gameboy DMA Transfers&amp;quot;&lt;/a&gt;,&#xA;though be warned that that page appears to have a few errors/typos.&lt;/p&gt;&#xA;&lt;p&gt;Whether or not the DMA can use HRAM as a source (the DMA destination&#xA;is fixed to the object attribute memory or OAM—the sprite table), it&#xA;would never make sense to use it in a real program because it always&#xA;copies &lt;code&gt;$9F&lt;/code&gt; bytes, 32 more than the entire size of HRAM, and&#xA;peripheral registers are adjacent to HRAM on both ends.&lt;/p&gt;&#xA;&lt;p&gt;The bus mentioned in the question is the external bus; there are&#xA;several internal buses as well. &lt;a href=&quot;http://iceboy.a-singer.de/doc/mem_patterns.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;GameBoy Memory Access Paterns&lt;/a&gt;&#xA;has logic analyzer traces of this bus for various kinds of accesses.&#xA;In the section &amp;quot;Boot ROM external bus access&amp;quot; we can see a detailed&#xA;trace for writes to two IO ports (line 13's &lt;code&gt;ldd (hl),a&lt;/code&gt; with&#xA;HL=&lt;code&gt;$FF26&lt;/code&gt; and line 14's &lt;code&gt;ldh (c),a&lt;/code&gt; with C=&lt;code&gt;$11&lt;/code&gt;). It appears to me&#xA;that, as per the explanation given in the text, C̅S̅ remains high (as it&#xA;must) and the address lines are correct, but neither the other control&#xA;(R̅D̅ and W̅R̅) nor data lines reflect what's on the internal buses. The&#xA;text says that HRAM is the same, though the next trace including a&#xA;program running from HRAM isn't detailed enough in that section for me&#xA;to confirm that.&lt;/p&gt;&#xA;&lt;p&gt;I see no particular reason for the boot ROM to use HRAM rather than&#xA;work RAM for the stack in normal operation. However, it might make it&#xA;easier to test systems with defective internal RAM as you'd still be&#xA;able to boot a cartridge (presumably one containing a diagnostic&#xA;program).&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-02T15:58:05.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11944" PostTypeId="2" ParentId="11940" CreationDate="2019-08-02T17:31:42.470" Score="13" Body="&lt;p&gt;@raffzahn describes object files, which are not executable. They need to be read into the linkage editor, which produces a load module. That is what CSV (the newer name of the component that loads modules and relocates addresses) loads, and then the operating system eventually branches to the entry point (not always the first byte).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you are looking for is covered in &lt;a href=&quot;https://www-01.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R3sa231393/$file/ieab100_v2r3.pdf&quot; rel=&quot;noreferrer&quot;&gt;MVS Program Management: User Guide and Reference&lt;/a&gt; (see chapter 2) and &lt;a href=&quot;https://www-01.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R3sa231392/$file/ieab200_v2r3.pdf&quot; rel=&quot;noreferrer&quot;&gt;MVS Program Management: Advanced Facilities&lt;/a&gt; (see appendix B). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though these links are for z/OS 2.3, the information still applies for the most part. (I can't think of anything other than AMODE/RMODE that would not apply to OS/360 up to MVS/SP.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Load modules are stored in a PDS, and the PDS directory contains information regarding length, options such as whether scatter and overlay are active, etc. The load module text contains items such as the overlay order, how to scatter, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going to the other operating system, DOS, there were significant changes when libraries were introduced with DOS/VS. Before that, phases (executable programs) were stored in the &quot;core image library&quot; by the linkage editor (LNKEDT) or placed in storage and then freed after a single execution. After libraries were introduced, you could link edit into library/sublibrary, giving the logical equivalent of STEPLIBs. &lt;a href=&quot;ftp://public.dhe.ibm.com/eserver/zseries/zos/vse/pdf3/zvse62/VSEAF94DRM.pdf&quot; rel=&quot;noreferrer&quot;&gt;VSE/AF Supervisor DRM&lt;/a&gt; is basically unchanged since those days; deep within Chapter 2, Program Retrieval, you'll find some limited information on the format. &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/ibm/370/DOS_VS/plm/SY33-8551-1_DOS_VS_SupervisorLogic_Nov73.pdf&quot; rel=&quot;noreferrer&quot;&gt;DOS/VS Supervisor Logic&lt;/a&gt; has older information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also VM/370 and earlier; a search of Bitsavers should prove fruitful.&lt;/p&gt;&#xA;" OwnerUserId="3697" LastActivityDate="2019-08-02T17:31:42.470" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11945" PostTypeId="2" ParentId="5245" CreationDate="2019-08-03T02:03:08.870" Score="4" Body="&lt;p&gt;Some 16K computers can be upgraded very easily, because they were designed for it.  The BBC Micro Model A is one such, though you're unlikely to encounter one in original configuration any more.  An additional 16KB can be added to the main RAM bank using unpopulated spaces on the motherboard, and two 16KB &quot;sideways&quot; slots (using banking in the $8000-$BFFF range) can also be filled with RAM via an adapter board, for a total of 64KB.  All of this is supported, to some extent, by the standard ROMs for the machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also go further and fill more &quot;sideways&quot; slots with RAM; the BBC Master came with four as standard, and 128KB &quot;sideways RAM&quot; expansion boards for the original machines were commonly available in the mid-1980s.  These boards usually also included an extra four sockets for sideways ROMs, for a total of eight.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-08-03T02:03:08.870" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11946" PostTypeId="2" ParentId="11931" CreationDate="2019-08-03T19:31:55.397" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/VisiCalc&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visicalc&lt;/a&gt; for the Apple II used &lt;a href=&quot;http://www.bricklin.com/history/saiearly.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;a variation of decimal arithmetic&quot;&lt;/a&gt; which I assume means BCD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason they give is the same reason decimal arithmetic was used on mainframes:  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] so all money values could be represented exactly, with no funny behavior common at the time from binary floating point.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And this would probably also be the reason for the usage of BCD anywhere else, so you must look for applications or languages geared towards business. (E.g. a COBOL compiler would be another good place to look).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As for 'basic &quot;operating system&quot; level code', am I not sure what this is supposed to be. E.g. on the Apple II, the disk operating system only dealt  with disks, as the name says. It didn't deal with floating point or any other number representation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ROM of homecomputers often included BASIC, which ofen had floating point (and no kind of decimal arithmetic), but again, I wouldn't count this as &quot;operating system&quot;.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-08-03T19:31:55.397" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11947" PostTypeId="2" ParentId="9260" CreationDate="2019-08-04T15:05:02.343" Score="2" Body="&lt;p&gt;The Nascom II reached 2400 bps with synchronous keying of 2400Hz and 1200Hz and had discrete logic for recovering data.  It was very robust and even damaged tapes with audible flutter and loudness variations were often properly read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do remember that at the end of the cassette storage era (and beyond) people built cassette interfaces and/or decoding software that put remarkable data rates (approaching IDSN modem data rates) on stereo tape decks with the caveat that you needed to replay them on the same device because identical head alignment was crucial (holds for best analog audio similarly of course).  But those devices/software were not standard equipment in any manner and so likely did not exist in numbers exceeding a few hundred.&lt;/p&gt;&#xA;" OwnerDisplayName="user14890" LastActivityDate="2019-08-04T15:05:02.343" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11948" PostTypeId="1" CreationDate="2019-08-05T00:37:10.940" Score="3" ViewCount="497" Body="&lt;p&gt;Anyone heard of 'something like' EDITLN or EDITLINE or LINEDIT statement in BASIC for editing lines of a program's own code while executing ?&lt;/p&gt;&#xA;&lt;p&gt;I seem to remember a statement that was spelled 'something like'  EDITLN or EDITLINE or LINEDIT, and wonder if maybe there was one -&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In any version of BASIC&lt;/li&gt;&#xA;&lt;li&gt;Used for editing lines of a program's own code while executing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Yes, this question would be a duplicate of &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11286/was-self-modifying-code-possible-using-basic&quot;&gt;Was self-modifying code possible using BASIC?&lt;/a&gt;, so I expect it should be immediately closed, and I will paste it into &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11286/was-self-modifying-code-possible-using-basic&quot;&gt;Was self-modifying code possible using BASIC?&lt;/a&gt; .&lt;/p&gt;&#xA;&lt;p&gt;EDIT -&lt;br /&gt;&#xA;The edit command in GW-Basic is an answer. It seems I was probably remembering EDLIN in MS-DOS and couldn't remember what it was. I find it difficult to significantly distinguish this question from the original. I myself won't close this question, in case anyone else is hoping for more answers. The vote should decide it.&lt;/p&gt;&#xA;" OwnerUserId="11744" LastEditorUserId="15334" LastEditDate="2020-11-14T20:02:09.340" LastActivityDate="2020-11-14T20:02:09.340" Title="Anyone heard of 'something like' EDITLN or EDITLINE or LINEDIT statement in BASIC?" Tags="&lt;basic&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11949" PostTypeId="2" ParentId="11931" CreationDate="2019-08-05T15:53:11.343" Score="4" Body="&lt;p&gt;The KIM Math package used packed BCD for storage and unpacked decimal for computation.  I used to have a vintage bound copy of the source code, but sold it to a collector.  I have no idea whether any loadable-program computers included the KIM Math routines in ROM for use by loaded programs, but the package was published by MOS Technologies--makers of the 6502--so it would seem that the chip designers were expecting people to use the BCD for math work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I suspect that operating systems that need to output multi-digit values in decimal format may use BCD mode, because BCD to decimal conversion can be done rather compactly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For values 0-999:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    sed&#xA;    lda #0&#xA;    sta desth&#xA;    ldx #16&#xA;lp:&#xA;    asl srcl&#xA;    rol srch&#xA;    adc #0&#xA;    rol desth&#xA;    dex&#xA;    bne lp&#xA;    sta destl&#xA;    cld&#xA;    rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Values up to 25,500 could be accommodated by using the above to process the bottom two digits, and moving desth to srcl, and repeating the procedure.  Bigger values can be easily accommodated if one can afford temporary space the same size as the source.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-08-05T15:53:11.343" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11950" PostTypeId="1" AcceptedAnswerId="11951" CreationDate="2019-08-05T20:08:01.420" Score="11" ViewCount="2500" Body="&lt;p&gt;So far I've figured out that means something about the ram bit I haven't been able to figure out what the problem is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: &lt;a href=&quot;https://streamable.com/xky9k&quot; rel=&quot;noreferrer&quot;&gt;video link&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14897" LastEditorUserId="14897" LastEditDate="2019-08-05T20:25:35.633" LastActivityDate="2019-08-05T20:51:47.633" Title="3 beeps on a 486 computer with an American Megatrends bios?" Tags="&lt;x86&gt;&lt;ram&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11951" PostTypeId="2" ParentId="11950" CreationDate="2019-08-05T20:43:13.333" Score="26" Body="&lt;p&gt;Here is a reference to &lt;a href=&quot;https://www.computerhope.com/beep.htm&quot; rel=&quot;noreferrer&quot;&gt;BIOS beep codes&lt;/a&gt;.  For American Megatrends, look under AMI.  3 beeps means the low 64K failed  - a very basic test - which probably means the RAM isn't working at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should first check whether the RAM is compatible with your machine.  At that time, there was a lot of variation - 5V vs 3.3V, 30-pin vs 72-pin, EDO vs FPM, not to mention response latency grades from 60ns to 150ns.  Usually 70ns FPM will work in a 486.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Watching the first few seconds of video I see you have quite an early board with 30-pin SIMMs, which each provide 8 bits width to the data bus.  Since the 486 is a 32-bit bus CPU (unlike the 386 it was never made in a 16-bit bus variant), you always need 4 identical SIMMs together.  If you had a board that took 72-pin SIMMs, which have 32-bit width each, you'd be able to try just one like you are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The effect of fitting just one SIMM in this machine would be to provide storage only at one out of every four bytes in sequence.  Software just isn't written to cope with that on the PC.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2019-08-05T20:51:47.633" LastActivityDate="2019-08-05T20:51:47.633" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11952" PostTypeId="2" ParentId="9260" CreationDate="2019-08-05T22:29:07.723" Score="7" Body="&lt;p&gt;As other answers note, the data rate varied considerably between machines.  I'll give two concrete examples from popular machines - the BBC Micro and the Commodore 64.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Acorn adopted the 300-baud &quot;Kansas City&quot; or &quot;CUTS&quot; format for their early machines, and adapted this for higher performance with the BBC Micro.  The basic baud rate is 1200, stored using ordinary TTY-modem style 1200/2400Hz FSK, but there is a lot of byte and block level framing which dilutes this in practice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The standard block size is 256 bytes, plus 24-33 bytes of header and trailing CRC (depending on length of filename), each byte taking 11 bit times (8N2 serial framing).  This totals 3080 bits per frame with a 1-character filename, taking 2.5667 seconds on the tape.  Add 1.3 seconds of sync tone to allow stopping and restarting the tape motor between blocks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A long file might thus approach 256 bytes per 3.8667 seconds throughput, or &lt;strong&gt;66.2 bytes per second&lt;/strong&gt;, in the standard format on the &lt;strong&gt;BBC Micro&lt;/strong&gt;.  It was possible to use longer blocks to speed up bulk loading directly into memory, but these files would then not work with the standard byte-by-byte file reading routines; probably some commercial games used this trick to speed up loading and reduce tape manufacturing costs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this speed a C30 tape (15 mins per side) could hold a little under 60KB per side.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The C64 had a standard format supported by the KERNAL ROM, and additionally many &quot;fastloader&quot; formats supported by first loading a tiny program in the standard format.  Let's start with the standard format, which was designed for robustness rather than speed - its lack of the latter naturally inspired the many fastloader formats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of FSK, the C64 uses square-wave pulses of three different lengths (352, 512, 672 µs).  Each byte consists of 9 bits stored as either a short then medium, or a medium then short - so the total length of each bit is constant.  This is followed by a 10th marker bit which includes a long pulse and usually a medium pulse.  Thus the total length of each byte is 672+9*352+10*512 = 8960µs, or 111.6 bytes per second raw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, like the BBC Micro there is also overall framing which dilutes this somewhat.  Most notably, every file is stored on the tape twice in four blocks (HEADER, HEADER REPEAT, DATA, DATA REPEAT).  Unlike the BBC Micro however, the data block is continuous (except for SEQ files) and not broken up into smaller blocks.  So for large files the data rate for calculating &lt;strong&gt;C64&lt;/strong&gt; tape capacity approaches half the raw data rate, so about &lt;strong&gt;55 bytes per second&lt;/strong&gt;.  However you could technically use a tape of half that length, and only lose the backup copy provided afterwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this speed a C30 tape could hold about 48KB per side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C64 fastloaders generally adapted the standard format at the bit level by dropping one of the two pulses needed to store each bit - so either one short or one medium pulse made one bit, and the overall bitrate would be somewhere between the two.  Then they would make the pulses themselves shorter and remove some of the less essential robustness features of the standard encoding.  There is usually not even an explicit marker between bytes!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An average bitrate of 360µs or 2778bps was typical for fastloaders, though some went significantly faster than this.  The overall speed of a large &lt;strong&gt;C64 Fastloader&lt;/strong&gt; file would thus be about &lt;strong&gt;347 bytes per second&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this speed a C30 tape could hold about 300KB per side, and would be practically as fast as the (rather sluggish by any standards) 1541 floppy drive.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2019-08-07T19:35:01.573" LastActivityDate="2019-08-07T19:35:01.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11953" PostTypeId="1" CreationDate="2019-08-06T06:08:51.970" Score="26" ViewCount="491" Body="&lt;p&gt;I was recently looking at some documentation for programming the Apple Lisa: &lt;a href=&quot;https://lisa.sunder.net/LOS_Reference.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://lisa.sunder.net/LOS_Reference.pdf&lt;/a&gt; and I was surprised how advanced it was for the time.  It had a lot of features that didn't make it to the Mac until much later.  For example, multiple processes and the ability to do IPC with named pipes on the filesystem.  But, the documentation on pipes warns me not to use them for any new development because they were expected to be removed from the future releases of the Lisa OS that the author expected were forthcoming.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Pipes will not be supported in future releases of the operating&#xA;  System. Do not use the pipe mechanism if you want your software to be&#xA;  upward-compatible.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, what was wrong with Pipes on Lisa?  Were they implemented badly?  Did they cause some problems?  Did something about the Lisa architecture make them impractical?  Obviously, modern Unix and MacOS X retain the feature, so they clearly weren't a terrible idea or too difficult for programmers to use in general.&lt;/p&gt;&#xA;" OwnerUserId="5309" LastActivityDate="2019-08-09T15:54:20.073" Title="Why were pipes removed from the Lisa?" Tags="&lt;apple-lisa&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11954" PostTypeId="1" AcceptedAnswerId="11956" CreationDate="2019-08-06T08:59:42.500" Score="17" ViewCount="2942" Body="&lt;p&gt;It's pretty well documented how to get the 286 &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/7683/357&quot;&gt;from real mode to its 16-bit protected mode&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also widely stated that the 286 had no officially supported way of going back &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/219/357&quot;&gt;from protected mode into real mode&lt;/a&gt; without losing its current state. The &quot;obvious&quot; way to do it was pretty much a no-op.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, developers still managed to coax the 286 into switching back to real mode from protected mode to access real-mode-only services while protected-mode software was and remained running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What techniques were used to make the switch back to real mode?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; I am specifically asking about the 286 here; I am not interested in answers pertaining to the 386 or newer CPUs.&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="357" LastEditDate="2019-08-06T19:41:17.410" LastActivityDate="2019-08-07T10:55:49.143" Title="How to switch an 80286 from protected to real mode?" Tags="&lt;80286&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11955" PostTypeId="2" ParentId="11954" CreationDate="2019-08-06T09:18:39.753" Score="10" Body="&lt;p&gt;The trick is that resetting the CPU leaves the RAM intact (unless the system designers have done something that will clear some or all RAM on a reset). So if you leave appropriate information in the RAM to be read by the (real-mode) startup code, it can detect that before the reset a &quot;message&quot; was left to it to do whatever needs to be done in real mode before going back to protected mode. (Re-entering protected mode would also generally use the &lt;a href=&quot;https://stackoverflow.com/a/37288606/107294&quot;&gt;protected mode descriptor tables and other information&lt;/a&gt; also left intact in RAM, though of course any setup for other devices (such as interrupt controllers) that were also reset also needs to be redone.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is documented in a bit more detail &lt;a href=&quot;https://en.wikipedia.org/wiki/Real_mode#Switching_to_real_mode&quot; rel=&quot;noreferrer&quot;&gt;on Wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-08-06T09:23:40.217" LastActivityDate="2019-08-06T09:23:40.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11956" PostTypeId="2" ParentId="11954" CreationDate="2019-08-06T09:20:14.183" Score="34" Body="&lt;p&gt;I’m aware of three main techniques used to exit protected mode on 286s; they all involve resetting the CPU, they vary on how that is done:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;using the keyboard controller (which IBM endowed with the ability to reset the CPU);&lt;/li&gt;&#xA;&lt;li&gt;using a chipset-specific “fast reset”;&lt;/li&gt;&#xA;&lt;li&gt;using a triple fault.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There’s a detailed discussion of the first and last approaches on &lt;a href=&quot;http://rcollins.org/articles/pmbasics/tspec_a1_doc.html&quot; rel=&quot;noreferrer&quot;&gt;Robert Collins’ site&lt;/a&gt;. To reset using the keyboard controller, you write 0xFE (the code for the shutdown command) to the 8042 status port (0x64). To reset using a triple fault, you set the limit of the IDTR to 0, and generate an interrupt; since the segment is now invalid, the CPU faults, but that also involves an invalid segment, so the CPU faults again twice before resetting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the CPU resets, it starts running from near the top of memory, in the BIOS; the BIOS checks a code in the CMOS, or a value in RAM, to determine whether it’s running a full boot-up or it’s recovering from a protected mode exit. To set this up, store the restart address (the real mode address your program will resume from) in the DWORD at 0x0040:0x0067, and set the CMOS shutdown type to 5 (see &lt;a href=&quot;http://rcollins.org/ftp/source/pmbasics/tspec_a1.l1&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;SETPM_RET_ADDR&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;http://rcollins.org/ftp/source/pmbasics/tspec_a1.l1&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;SET_SHUTDOWN_TYPE&lt;/code&gt;&lt;/a&gt; for details; these run in real mode before the switch to protected mode, but the setup can also be done in protected mode). After resetting, the program needs to restore the CPU state properly (in particular, it needs to reload all the segment registers and the stack pointer); see Robert Collins’ documentation for details.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-08-07T10:55:49.143" LastActivityDate="2019-08-07T10:55:49.143" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="11957" PostTypeId="2" ParentId="11954" CreationDate="2019-08-06T12:20:53.217" Score="2" Body="&lt;p&gt;Fastest way was not to go to protected mode in the first place. Using the undocumented LOADALL opcode the CPU state can be freely set, except it can't be used to return from protected mode to real mode. But actually most compatible way was to cause a triple fault when return from protected mode was needed.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2019-08-06T12:34:44.967" LastActivityDate="2019-08-06T12:34:44.967" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11958" PostTypeId="1" CreationDate="2019-08-06T12:34:10.957" Score="2" ViewCount="128" Body="&lt;p&gt;I was reading a bit about the 'Hacker Manifesto' written by Loyd 'The Mentor' Blakenship and was also reading about the hacker group 'Legion of Doom' and was wondering what influence these groups / people had on early computer culture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm especially curious as to how the freedom of information attitudes that where common in these early groups filtered down into more mainstream attitudes to open source software / information.&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="12298" LastEditDate="2019-08-06T13:11:58.273" LastActivityDate="2019-08-06T13:11:58.273" Title="What was the influence of the 'Legion of Doom' and the e-zine Phrack on early computer culture?" Tags="&lt;history&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2019-08-12T09:47:44.377" ContentLicense="CC BY-SA 4.0" />
  <row Id="11959" PostTypeId="1" AcceptedAnswerId="11960" CreationDate="2019-08-06T13:47:58.627" Score="19" ViewCount="1820" Body="&lt;p&gt;Most of the history of Commodore in personal computers took place while East and West Germany were divided, and Commodore maintained a significant corporate presence in West Germany. While I believe that the center for Commodore's R&amp;amp;D was Its Headquarters in West Chester, Pennsylvania, I am curious about the technical contributions made by the facility in West Germany.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not particularly interested in the regional sales, marketing, distribution, or assembly activities that were undoubtedly contributed. Specifically, I'd like to know about technical engineering or design done in West Germany.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which Commodore products were significantly designed or engineered in West Germany rather than West Chester?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-12-17T04:17:38.130" Title="What was the role of Commodore-West Germany?" Tags="&lt;history&gt;&lt;amiga&gt;&lt;commodore&gt;&lt;design-choices&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11960" PostTypeId="2" ParentId="11959" CreationDate="2019-08-06T14:50:41.687" Score="15" Body="&lt;p&gt;&lt;strong&gt;[Insert: Some site history&lt;/strong&gt; While the German subsidiary (Commodore Büromaschinen GmbH), originally set in Neu-Isenburg near Frankfurt, had facilities for import handling and distribution, this was soon moved to a distribution center in Braunschweig and accomplished by a final assembly line and a development center. At the same time the company moved into Frankfurt city. This was the setup from 1982 until the end.&#xA;&lt;strong&gt;]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Commodore Germany did in the beginning quite a lot adaptations and variations for the PET line. This includes rebadged devices like the 8026 daisy wheel printer bought from &lt;a href=&quot;https://de.wikipedia.org/wiki/Olympia-Werke&quot; rel=&quot;nofollow noreferrer&quot;&gt;Olympia&lt;/a&gt; all the way to 'genuine' Commodore products like the &lt;a href=&quot;https://de.wikipedia.org/wiki/Datei:CBM8028-2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;8028&lt;/a&gt; based on the East German Robotron &lt;a href=&quot;http://www.robotrontechnik.de/html/drucker/sd1152.htm#sd1152-253&quot; rel=&quot;nofollow noreferrer&quot;&gt;SD1152/253&lt;/a&gt; printer mechanic (well, and several other parts, like switches, were bought from across the iron curtain). PET development ended with certain models of the &lt;a href=&quot;http://www.6502.org/users/sjgray/computer/cbm2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PET-II&lt;/a&gt; line. After their demise the German surplus market was flooded with Commodore PET/PET-II computers as well as empty shells.&lt;/p&gt;&#xA;&lt;p&gt;The first complete system developed in Germany would be the &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_PC_compatible_systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC compatible&lt;/a&gt; PC-10 of 1984 (Introduction in the US 1986), followed by the Z8000 based &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_900&quot; rel=&quot;nofollow noreferrer&quot;&gt;CBM-900&lt;/a&gt; of 1985. The 900 was scraped soon after introduction - it is said because of the upcoming Amiga - but the PC series was quite a success in Germany and other countries, running until the very end. Notable here the PC-1 (or Colt in the US). Hardware wise a shrunk PC-10/III developed in Braunschweig on request of Commodore USA to counter the &lt;a href=&quot;http://www.atari-computermuseum.de/pc1.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari PC1&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_Sidecar&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga 1060 sidecar&lt;/a&gt; (1986) was as well designed and built in Braunschweig. It does make sense with their experience in PC machines. Similar (AFAIK) the various bridge cards for the Amiga 2000 were made and built in Germany. Now due even more heritage as the 2000 itself was designed in Germany as well.&lt;/p&gt;&#xA;&lt;p&gt;If you ever wondered why the &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_2000&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga 2000&lt;/a&gt; design looks so different from the A1000 as well as any other (US) Commodore, just compare it with the 900 and PC-10. The 2000 was intended to be sold in Europe and should fit the design of all other professional machines. In addition considerable part of the newer chipset designs (A3000) were as well done in Germany.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;There has been much more development after Commodore International went belly up, but that's a different story. BTW, it might be notable here, that Commodore Germany as well as Commodore UK were profitable until the end - and at that time generating about 2/3rd of all business.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-15T12:59:07.073" LastActivityDate="2020-12-15T12:59:07.073" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11961" PostTypeId="1" AcceptedAnswerId="11970" CreationDate="2019-08-06T15:23:31.700" Score="28" ViewCount="15416" Body="&lt;p&gt;Is it true that &lt;kbd&gt;ctrl&lt;/kbd&gt;+&lt;kbd&gt;alt&lt;/kbd&gt;+&lt;kbd&gt;del&lt;/kbd&gt; only became a thing because IBM would not build Bill Gates a computer with a button specifically for the task manager? Making it so that Microsoft had to develop a workaround.&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="357" LastEditDate="2019-08-06T21:05:53.353" LastActivityDate="2019-08-10T14:57:11.733" Title="Is it true that control+alt+delete only became a thing because IBM would not build Bill Gates a computer with a task manager button?" Tags="&lt;history&gt;&lt;ibm-pc&gt;" AnswerCount="6" CommentCount="17" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11962" PostTypeId="2" ParentId="11961" CreationDate="2019-08-06T15:51:27.750" Score="25" Body="&lt;h2&gt;Simply: NO&lt;/h2&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is it true that ctrl+alt+del only became a thing because IBM would not build Bill Gates a computer with a button specifically for the task manager?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As if Gates would have had a request for a special key in 1981, when the PC was introduced,for some software that wouldn't be published until 4 years later (1985).&lt;/p&gt;&#xA;&lt;p&gt;Sorry, that story smells way like made up afterwards.&lt;/p&gt;&#xA;&lt;p&gt;It's rather the other way around. At the time Windows was released in 1985 the PC-AT was the actual design, and it &lt;em&gt;did&lt;/em&gt; include a special key for exactly this: &lt;a href=&quot;https://en.wikipedia.org/wiki/System_request&quot; rel=&quot;noreferrer&quot;&gt;&lt;kbd&gt;SysReq&lt;/kbd&gt;&lt;/a&gt; - a new and special key to invoke system services of a multiprogramming system.&lt;/p&gt;&#xA;&lt;p&gt;So the question is rather why Microsoft &lt;strong&gt;did not use the special key&lt;/strong&gt;. One may guess it was to allow sales for existing PC users.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Making it so that Microsoft had to develop a workaround.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It isn't a work-around, but a definite hook intended to reboot, guaranteed to work in next to all situations. Back at the time when the PC was designed, having a Reset button as regular key wasn't uncommon. In fact, the Apple II, without any doubt a major influence in the PC design, used Reset as a next to normal key in this role - to bring the system into a defined state to enter a command.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-06T16:14:02.400" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11963" PostTypeId="2" ParentId="11961" CreationDate="2019-08-06T15:54:35.280" Score="1" Body="&lt;p&gt;Control-alt-delete was well known from early on as a means of rebooting a computer that was much faster (by about 30 seconds to a minute, depending upon RAM capacity) than cycling the power.  The primary usage was escaping stuck applications, but rebooting to change what terminate-but-stay-resident programs were installed was also common.  Under DOS, there wasn't much need to exit a stuck program without rebooting the machine, but under Windows that of course changed, and thus the key combination shifted focus to the former meaning, though for awhile it also provided the latter.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-08-06T15:54:35.280" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11964" PostTypeId="2" ParentId="11948" CreationDate="2019-08-06T16:00:31.737" Score="3" Body="&lt;p&gt;Many versions of BASIC had an &quot;edit&quot; command to allow character-based interactive editing of an existing statement, but invoking it from within a running program would terminate execution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If memory serves, on a typical implementation such as the TRS-80, the system would display the line number with the cursor immediately following.  Pressing spacebar would copy one character from the original line and advance the &quot;original line position&quot; pointer.  Backspace would remove a character and move the &quot;original line position&quot; pointer back one character.  Using other keys would allow one to insert, delete, or replace text within the program line, and pushing enter would copy all remaining text from the original line and exit edit mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This facility was useful on systems like the TRS-80 which did not allow text to be read off the screen, but wasn't needed on the Commodore or Apple II, which did.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-08-06T16:00:31.737" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11965" PostTypeId="1" AcceptedAnswerId="12091" CreationDate="2019-08-06T16:04:07.283" Score="4" ViewCount="391" Body="&lt;p&gt;I've been following Ben Eater's series of videos about designing a small computer from discrete logic gates, I'm curious if there is a similar tutorial/book/reference for building a stack computer. I was thinking in the vein of Charles Moore's Sh-Boom processor or one of the individual computers in his green array chips. If not are there any references about building a stack computer that would be useful for a hobbyist at home?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: If there is specific knowledge about circuit diagrams, implementations or information relating to the NOVIX NC4016C, the soviet copies the Dauphin-1610/20, or the previously mentioned Sh-Boom processor I would be very interested. To my knowledge this covers the major stack processors developed during the 80's. &lt;/p&gt;&#xA;" OwnerUserId="14903" LastEditorUserId="10566" LastEditDate="2019-08-06T17:39:49.833" LastActivityDate="2019-08-19T20:24:55.920" Title="Reference material for building a DIY Stack Computer from Logic Gates" Tags="&lt;hardware&gt;&lt;forth&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11966" PostTypeId="2" ParentId="11961" CreationDate="2019-08-06T16:04:45.437" Score="57" Body="&lt;p&gt;No, CTRL-ALT-DELETE was a thing before there were tasks to manage.  The original IBM PC used this key sequence to reboot the computer, in case the computer crashed or the user just wanted to boot some other operating system or application. This was implemented by the BIOS, so any operating system, like MS-DOS, that used the BIOS services would get this behaviour unless they did something to change or disable it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The use CTRL-ALT-DELETE as a &quot;secure attention&quot; key was first implemented in Windows NT. Microsoft considered allowing users to easily reboot the their computers with a simple key stroke combination like this undesirable.  On the other hand, they needed some way for users to be able to securely login with their username and password without having to worry about being fooled by some program that displayed a fake login screen.  So they repurposed the CTRL-ALT-DELETE as a special key combination that no application could intercept and that would always bring up a secure screen that users could trust.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(MS-DOS-based versions of Windows had a different and partial repurposing of CTRL-ALT-DELETE.  With Windows 3.1 it would bring up a screen where you could kill the currently running task, while on Windows 95, and 98 and ME, it would bring up screen where you could select a task to kill.  On both versions pressing CTRL-ALT-DELETE for a second time would cause the computer to reboot.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsoft had no need to ask IBM to put a special button on keyboards for this.  Just look at the bottom of the keyboard you're using now, there's a good chance you can see a Windows logo key there. That's wasn't something IBM agreed to add to their keyboards, it was something Microsoft put on their own keyboards and encouraged other keyboard manufacturers to do as well. If Microsoft wanted a special button for this they could've easily had one without IBM's help.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2019-08-06T23:15:14.330" LastActivityDate="2019-08-06T23:15:14.330" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="11967" PostTypeId="2" ParentId="11961" CreationDate="2019-08-06T20:35:14.410" Score="13" Body="&lt;p&gt;&lt;strong&gt;That claim does indeed smell like it was made up later, and with no regard to real world history&lt;/strong&gt; or even realizing what &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Personal_Computer#Original_PC&quot; rel=&quot;noreferrer&quot;&gt;the original IBM PC was capable of&lt;/a&gt; and the configurations in which it was sold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original IBM PC (IBM's model number 5150) wasn't powerful enough for anything resembling modern multitasking. It certainly had no need for a specific key for a &quot;task manager&quot;. For that matter, neither do modern PCs, even though Microsoft have been quite successful in encouraging keyboard manufacturers to include a specific key adorned with the Microsoft Windows logo on just about every keyboard manufactured in the last upwards of 25 years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't even entirely uncommon for it to be used without much of an operating system as we think of them today. &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11597/357&quot;&gt;Boot games weren't as common as later DOS-based games, but they were hardly unheard of either.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider that &lt;strong&gt;the minimal configuration of the IBM 5150 had &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Personal_Computer#Original_PC&quot; rel=&quot;noreferrer&quot;&gt;16 KiB RAM and only a cassette port&lt;/a&gt; for storage.&lt;/strong&gt; It didn't even come with a floppy disk drive unless you wanted one (and paid the premium for it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, most units which were actually sold were ordered with one or two floppy disk drive(s), or possibly had those installed as add-ons soon afterwards (not to mention having a bit more RAM than 16,384 bytes). But the architecture didn't require it, and the ROM BASIC included support for loading programs from cassette tape. This is similar to how other, contemporary systems were used, particularly in home settings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The choice of the Control+Alt+Delete combination to reboot the computer was made by David Bradley and Mel Hallerman, &lt;a href=&quot;https://en.wikipedia.org/wiki/Control-Alt-Delete#History&quot; rel=&quot;noreferrer&quot;&gt;two IBM engineers on the PC project&lt;/a&gt;. Regardless of the specific choice, one could argue that there is a benefit to having a multi-key combination to reboot the system, as it is harder to hit multiple keys simultaneously by mistake. (In fact, Wikipedia discusses how Bradley's initial choice of Ctrl+Alt+Esc was a poor choice because it was possible to hit that combination by accident, especially on the original Model F keyboard.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless something is done by software to change this, on an IBM compatible, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Control-Alt-Delete#BIOS&quot; rel=&quot;noreferrer&quot;&gt;BIOS&lt;/a&gt; keyboard handler code will generally be what intercepts Ctrl+Alt+Del, and trigger a soft reboot when detecting it. Modern operating systems, including &lt;a href=&quot;https://en.wikipedia.org/wiki/Control-Alt-Delete#DOS-based_Windows&quot; rel=&quot;noreferrer&quot;&gt;Windows 3.0 and newer when running in 386 Enhanced mode&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Control-Alt-Delete#OS/2&quot; rel=&quot;noreferrer&quot;&gt;OS/2&lt;/a&gt; and Linux will generally override this and use their own code to intercept that key combination and handle it appropriately. (On Linux, it can be configured to do everything from nothing at all to initiating a clean system reboot or shutdown.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows versions which &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11903/357&quot;&gt;trace their lineage to Windows NT&lt;/a&gt; use it as the &quot;Secure Attention Sequence&quot;; the decision to use Ctrl+Alt+Del for this was made because, when the issue came up for Microsoft (which probably would have been in &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_NT_3.1#History&quot; rel=&quot;noreferrer&quot;&gt;1989 or so&lt;/a&gt;), &lt;a href=&quot;https://blogs.msdn.microsoft.com/larryosterman/2005/01/24/why-is-control-alt-delete-the-secure-attention-sequence-sas/&quot; rel=&quot;noreferrer&quot;&gt;it was the only key combination that wasn't already being used by a shipping application&lt;/a&gt; and therefore the only key combination that could be reserved by the operating system for its own purposes while retaining compatibility with existing software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also worth remembering that &lt;strong&gt;at the time, Microsoft was little more than another software vendor&lt;/strong&gt; for the IBM PC (as well as many other platforms). They lucked out in that they were one of the vendors who delivered early operating systems (other choices, besides no disk operating system at all, were &lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M#The_16-bit_world&quot; rel=&quot;noreferrer&quot;&gt;CP/M&lt;/a&gt; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/UCSD_Pascal&quot; rel=&quot;noreferrer&quot;&gt;UCSD p-System&lt;/a&gt;), and in that MS-DOS, under the name PC-DOS, quickly became a dominant choice on the IBM PC. However, &lt;strong&gt;Microsoft was in a far less privileged position back then&lt;/strong&gt; compared to five, ten or fifteen years later.&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="357" LastEditDate="2019-08-06T20:52:02.240" LastActivityDate="2019-08-06T20:52:02.240" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11968" PostTypeId="1" AcceptedAnswerId="11983" CreationDate="2019-08-07T02:23:51.540" Score="0" ViewCount="652" Body="&lt;p&gt;I've got an early 486 motherboard that doesn't seem to have a manufacturer name or FCC number on it and I'm having trouble identifying it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've placed some photos of the motherboard in this &lt;a href=&quot;https://imgur.com/a/SrOF56j&quot; rel=&quot;nofollow noreferrer&quot;&gt;Imgur album&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BIOS ID on the boot screen is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(C) American Megatrends Inc.,&#xA;&#xA;     DPAQ-6156-043090-KF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="14897" LastEditorUserId="357" LastEditDate="2019-08-08T08:24:32.333" LastActivityDate="2019-08-09T11:31:58.557" Title="What 486 motherboard is this, with American Megatrends BIOS identifying is DPAQ-6156-043090-KF?" Tags="&lt;intel&gt;&lt;identify-this-computer&gt;&lt;x86&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="11969" PostTypeId="1" CreationDate="2019-08-07T05:34:53.527" Score="5" ViewCount="351" Body="&lt;p&gt;Trying to recover data from Conner CP341 HDD i took from an old Compaq Portable III.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data is important enough to go through the effort of recovering it, and i would like to do this myself (rather than pay for a service to attempt it if at all possible).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I purchased a IDE to USB device and have tested it on an old Maxtor drive to confirm that it works. A drive letter was assigned to the drive and i could browse the drive via Windows Explorer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I plugged the Conner CP341 into it and it says 'no drive found' in the software that came with the device, and no drive is displayed in Windows Explorer. I tried opening 'Disk Management' and i get a message saying the drive needs to be initialised and gives me an option for GPT or MBR. I selected MBR and got an 'Incorrect function' error box. I tried GPT but got the same result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have access to both Linux (Ubuntu 18.04) OS and Windows 10 OS.&#xA;What are the next steps i can take to recover the important data from this old drive?&lt;/p&gt;&#xA;" OwnerUserId="14910" LastActivityDate="2020-04-13T13:31:49.330" Title="Steps to recover data from Conner CP341" Tags="&lt;hard-disk&gt;&lt;ide&gt;" AnswerCount="3" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="11970" PostTypeId="2" ParentId="11961" CreationDate="2019-08-07T09:11:02.667" Score="61" Body="&lt;p&gt;The answer to the question as written is no. However, I can see where it came from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Microsoft developed Windows NT, they decided they needed a &quot;secure attention key&quot; (SAK). This was a key, or key combination, that was guaranteed to bring up the genuine log in screen. The reason they wanted this is because, any sequence that could be intercepted by a user program could be used to spoof the login screen and thus capture login credentials. The SAK provides a means to get to communicate with the OS which no user program can stop or spoof.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 2013 in an interview, Bill Gates said they asked IBM to add a key to the keyboard for this purpose but, by the time Windows NT was released in 1993, IBM had lost control of the PC hardware business and was in no position to force through such changes. Thus Microsoft fell back on using ctrl-alt-delete. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://arstechnica.com/gadgets/2017/09/if-bill-gates-really-thinks-ctrl-alt-del-was-a-mistake-he-should-have-fixed-it-himself/&quot; rel=&quot;noreferrer&quot;&gt;https://arstechnica.com/gadgets/2017/09/if-bill-gates-really-thinks-ctrl-alt-del-was-a-mistake-he-should-have-fixed-it-himself/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2019-08-07T09:11:02.667" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11971" PostTypeId="2" ParentId="11961" CreationDate="2019-08-07T12:12:42.353" Score="7" Body="&lt;p&gt;My points have individually been covered in other answers but I'd like to present my own summary here.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;ctrl+alt+del was added by IBM as a 'reboot' command to the BIOS. This did not involve the OS (though the OS could override the BIOS action).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For DOS-based Windows, a multitasking operating system, unmediated reboot (say to recover from a single stuck app) seems like not a good idea, thus the OS intercepted it, and where possible allowed the user to terminate specific tasks.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Windows NT needed a secure-attention-key for orange book(*) conformance. Since NT also aimed to run DOS-based Windows apps, it would not be a good idea to use any key combination needed by some app (the S-A-K must not be interceptable by apps). ctrl+alt+del fitted that requirement.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(*) The orange book is more properly known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Trusted_Computer_System_Evaluation_Criteria&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Trusted Computer System Evaluation Criteria&lt;/em&gt;&lt;/a&gt;, a late-20th-century US DoD document specifying requirements for computing systems to be certified as reaching specified levels of security.  At the 'B3' level there must be a 'Trusted path to the Trusted Computing Base for the user authentication function' -- for NT, typing ctrl+alt+del ensured subsequent input was not intercepted by a rogue app (unless the OS itself had been compromised).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-08-10T14:57:11.733" LastActivityDate="2019-08-10T14:57:11.733" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11972" PostTypeId="2" ParentId="11968" CreationDate="2019-08-07T15:35:29.657" Score="3" Body="&lt;p&gt;&lt;em&gt;I'm editing my answer (again).&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Originally I thought this board might be a variation of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stason.org/TULARC/pc/motherboards/B/BEC-COMPUTER-ENTERPRISE-486-80486AT-Ver-1-0.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;BEC COMPUTER ENTERPRISE 80486AT (Ver. 1.0)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything except the position of the BIOS and the TAG seemed to match, but that could have been errors in the diagram.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am now thinking this is a better match:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://stason.org/TULARC/pc/motherboards/K/KOUWELL-ELECTRONIC-CORPORATION-486-486-33EZ.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;KOUWELL ELECTRONIC CORPORATION 486-33EZ&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As near as I can tell, everything on this diagram matches the pictures from the OP, with two exceptions.  First, there is a bank of dip switches labeled SW1 on the diagram but this switch is labeled SW2 and shaped differently in the OP's picture. Second, there is a (I think) battery displayed in the corner of the board on the diagram, but no such battery exists in the OP's picture (but the silkscreen in the OP's picture looks like there was space/connections for the battery) (if it is a battery).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not ignoring the great detective work by Igor, but the Genoa board in his answer doesn't seem to match the physical layout of the OP's picture. However the BEC board is close, and the KOUWELL board is &lt;em&gt;really&lt;/em&gt; close.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="2080" LastEditDate="2019-08-09T11:31:58.557" LastActivityDate="2019-08-09T11:31:58.557" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11975" PostTypeId="1" AcceptedAnswerId="11976" CreationDate="2019-08-07T22:30:02.720" Score="16" ViewCount="4200" Body="&lt;p&gt;I know dual socket motherboards were around in the 90's before Intel released the Core series.  And SMP hardware and operating systems have been around earlier than the PC platform of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multiprocessor support on the IBM PC-based platform, as far as I know, required BIOS support and additional hardware support, and introduced things like the MPS specification and the APIC.  This is an interesting event in the evolution of the architecture, possibly up there with the introduction of the PCI/PCIe bus and the integration the northbridge with the CPU.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So which motherboard was the first to support multiple CPUs and SMP?  Basically asking what would be the first PC-compatible motherboard I could ever buy that could take 1 or 2 CPUs.&lt;/p&gt;&#xA;" OwnerUserId="746" LastEditorUserId="746" LastEditDate="2019-08-07T23:37:42.670" LastActivityDate="2019-08-12T06:04:12.477" Title="What was the first multiprocessor x86 motherboard?" Tags="&lt;ibm-pc&gt;&lt;x86&gt;&lt;motherboard&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11976" PostTypeId="2" ParentId="11975" CreationDate="2019-08-07T23:31:17.907" Score="19" Body="&lt;h2&gt;Preface&lt;/h2&gt;&#xA;&lt;p&gt;The question is a bit unclear(*1) about the margins set regarding:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Must it be a single motherboard or do separate assemblies qualify?&lt;/li&gt;&#xA;&lt;li&gt;Must it be PC-compatible or does any x86 system qualify?&lt;/li&gt;&#xA;&lt;li&gt;Must the board have been available separately (to the general public) or do complete assembled systems qualify?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So answers do vary a lot depending on what criteria are to be applied, offering year tags from 1979 all the way to 1995. Pick your choice.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Three Quick Answers:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If it's just about being x86 and SMP, then the earliest 8086 multibus boards will qualify - even way before the PC.&lt;/li&gt;&#xA;&lt;li&gt;If it's about PC compatibility, then the dual 80386 configured &lt;a href=&quot;https://en.wikipedia.org/wiki/Compaq_SystemPro&quot; rel=&quot;noreferrer&quot;&gt;Compaq SystemPro&lt;/a&gt; will make it.&lt;/li&gt;&#xA;&lt;li&gt;In the most strict sense of the above criteria, then the &lt;a href=&quot;/a/11980/6659&quot;&gt;motherboards found by Stephen Kitt&lt;/a&gt; are the answer you're looking for.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;p&gt;The original 8086 was already not only capable of sharing the bus between multiple CPUs, it was a core feature to enable operation of configurations with an 8089 I/O processor - as well as multiple CPUs and multiple I/O processors in one system. It was there from the very beginning. In fact, the first ever systems made by Intel for Multibus have been used in SMP configurations.&lt;/p&gt;&#xA;&lt;p&gt;Intel can't really be blamed for IBM using the CPU in a somewhat crippling design.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Multiprocessor support on the IBM PC-based platform, as far as I know, required BIOS support and additional hardware support, and introduced things like the MPS specification and the APIC.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. It just simplifies standard usage.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So which motherboard was the first to support multiple CPUs and SMP?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, ignoring pre/non-PC MP systems like Sequent's 80386-based Symmetry systems (1987), the dual 80386 &lt;a href=&quot;https://en.wikipedia.org/wiki/Compaq_SystemPro&quot; rel=&quot;noreferrer&quot;&gt;Compaq SystemPro&lt;/a&gt; of 1989 might be a good starting point for dual CPU and PC compatible. That was before the APIC and way before MPS. Though, I'm not really sure if it does fully fit the SMP category, as the second CPU acted as a dedicated I/O processor running driver code; it didn't take any user tasks. So while memory access was common to both, processing was asymmetric.&lt;/p&gt;&#xA;&lt;p&gt;Then again, according to a quite interesting &lt;a href=&quot;https://www.vogons.org/viewtopic.php?f=25&amp;amp;t=50361&quot; rel=&quot;noreferrer&quot;&gt;benchmarking project&lt;/a&gt; (&lt;a href=&quot;/q/11975/#comment37241_11976&quot;&gt;found&lt;/a&gt; by Stehen Kitt), Windows NT 3.1 does seem to recognize both CPUs, so there might be more research necessary.&lt;/p&gt;&#xA;&lt;p&gt;The very same machine could be ordered after 1990 with dual 80486 which also introduced APIC (*2). But APIC was restricted to Intel systems as its workings were patented - AMD and other compatible manufacturers introduced &lt;a href=&quot;https://en.wikipedia.org/wiki/OpenPIC_and_MPIC&quot; rel=&quot;noreferrer&quot;&gt;openPIC&lt;/a&gt;, but with limited success (*3). There was simply no real need for SMP when it came to machines that had to be 100% compatible, while at the same time multi-CPU servers were a special case anyway. This continued with the Pentium (*4). Fully PC-compatible systems stayed rather rare.&lt;/p&gt;&#xA;&lt;p&gt;The restriction to a  &lt;em&gt;'motherboard'&lt;/em&gt; makes it a bit problematic, as the SystemPro has the CPUs plus all arbitration logic on a sub-assembly. The motherboard itself is agnostic of the number of CPUs installed. So again, not sure if it counts.&lt;/p&gt;&#xA;&lt;p&gt;It only took off with the Pentium Pro, after 1995, when Intel pushed dual socket systems for high end PCs. Almost every major manufacturer had one or more such system made close to Intel's specifications, including the separate voltage converter modules(*5). Compaq's &lt;a href=&quot;https://www.google.com/search?q=Compaq%20273708-001&quot; rel=&quot;noreferrer&quot;&gt;273708-001&lt;/a&gt; board may serve as a good example for a workstation - here both sockets and all logic are on the motherboard. On the server side there was a dual PPro card for the &lt;a href=&quot;https://www.vibrant.com/models/compaq-proliant-5500/index.html&quot; rel=&quot;noreferrer&quot;&gt;ProLiant 5500 Model 6/200&lt;/a&gt; (type 285100-001), which could take two of them making it a quad CPU system, but that would again be not on the motherboard.&lt;/p&gt;&#xA;&lt;p&gt;By the time of the Pentium II, AMD licensed APIC from Intel for their K7 design and the rest is history...&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;A notable mention should go here as well for Intel's &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_iPSC&quot; rel=&quot;noreferrer&quot;&gt;iPSC&lt;/a&gt; of 1985. Although not SMP, the system is, with up to 128 80286 CPUs, the first major example for using off-the-shelf x86 components to build a supercomputer, something standard in today's high-end world. (These x86-based systems are not really PC compatible, even though they are standard x86 SoCs.)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - It's not always easy to set a history question from today's POV, is it?&lt;/p&gt;&#xA;&lt;p&gt;*2 - For the advent of multi-processor systems, Intel's &lt;a href=&quot;https://en.wikipedia.org/wiki/MultiProcessor_Specification&quot; rel=&quot;noreferrer&quot;&gt;MPS&lt;/a&gt; of 1994 was way more important than the APIC hardware itself. Before that, everyone tried their own methods for communication.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Interestingly, IBM, Apple and Motorola implemented openPIC in the form of MPIC for PowerPC based systems, like various RS/6000 or Macs.&lt;/p&gt;&#xA;&lt;p&gt;*4 - At this point Alan Cox might be helpful, as he, AFAIR, brought MPS for the Pentium into Linux.&lt;/p&gt;&#xA;&lt;p&gt;*5 - One of the hassles of finding PPro System is when they are taken, as it renders the machine useless. This is quite similar to 68k Macs, where the socketed system ROM was taken out by someone salvaging RAM modules.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-09T07:06:51.370" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11977" PostTypeId="2" ParentId="11975" CreationDate="2019-08-08T00:03:53.813" Score="5" Body="&lt;p&gt;If you expand the criteria to include systems where the two CPUs are not on the same circuit board, the &lt;a href=&quot;https://books.google.com/books?id=ET4EAAAAMBAJ&amp;amp;lpg=PA14&amp;amp;ots=zvGiYHnY8J&amp;amp;pg=PA14#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel ISBC 86/12&lt;/a&gt; from 1979 is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Multibus&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multibus&lt;/a&gt;-compatible single board computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Compaq_SystemPro&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compaq SystemPro&lt;/a&gt; from 1989 supported up to two 33 MHz 386 processors, also on their own cards, and could run Windows NT 3.1, but this version of SystemPro only supported asymmetric multiprocessing (ASMP). SystemPro/XL from 1992 which was based on the 486/50 was SMP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another interesting product is the Evergreen &lt;a href=&quot;https://books.google.com/books?id=79i1lfAqumUC&amp;amp;lpg=PP1&amp;amp;pg=PA66#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rev to SMP&lt;/a&gt; from 1995 which allows you to plug two 486 CPUs into a single socket on the motherboard.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-08-08T20:31:12.450" LastActivityDate="2019-08-08T20:31:12.450" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11979" PostTypeId="2" ParentId="11969" CreationDate="2019-08-08T07:02:19.883" Score="9" Body="&lt;p&gt;The hard drive is so old that it pre-dates the era of auto-detecting the drive parameters. If the USB adapter cannot determine the correct drive parameters automatically then there is no way to force the parameters. Connecting it to a PC where you can manually set the drive parameters in BIOS is the fastest solution. The standard drive parameters should be 980 cylinders, 5 heads and 17 sectors per track, but the MBR and FAT partition should reveal what parameters were in use on the original system.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-08-08T07:02:19.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11980" PostTypeId="2" ParentId="11975" CreationDate="2019-08-08T09:37:43.893" Score="12" Body="&lt;p&gt;If you’re looking specifically for motherboards directly supporting multiple x86 CPUs, in a multiprocessor configuration, and available for purchase outside the system they were designed for, a likely candidate for the first such motherboard is the &lt;a href=&quot;https://www.gigabyte.com/Motherboard/GA-586ID/support#support-manual&quot; rel=&quot;noreferrer&quot;&gt;Gigabyte GA-586ID&lt;/a&gt;, which supported two socket 5 Pentium CPUs in an SMP configuration. It was released in 1994. Supermicro and Tyan apparently produced dual-486 motherboards too but I haven’t found them yet. There were quite a few dual-Pentium motherboards, see &lt;a href=&quot;http://lists.de.freebsd.org/archive/de-bsd-questions/de-bsd-questions.200302/0669.html&quot; rel=&quot;noreferrer&quot;&gt;this post&lt;/a&gt; for a selection (thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/75/snips-n-snails&quot;&gt;snips-n-snails&lt;/a&gt; for the link).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were multiprocessor x86 &lt;em&gt;systems&lt;/em&gt; available for purchase earlier than that, as described in the other answers. They typically used per-CPU daughtercards. Multiprocessing on PC-based x86 only became possible in generic systems with the advent of the &lt;a href=&quot;https://en.wikipedia.org/wiki/MultiProcessor_Specification&quot; rel=&quot;noreferrer&quot;&gt;MultiProcessor Specification&lt;/a&gt; in 1994; before that, operating systems needed hardware-specific support (as was the case with &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/121/Q121043/&quot; rel=&quot;noreferrer&quot;&gt;Windows NT 3.1&lt;/a&gt; on the SystemPro).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also motherboards which supported multiple CPUs, but only used one at a time; I used to have a &lt;a href=&quot;https://stason.org/TULARC/pc/motherboards/F/FOREX-COMPUTER-CORPORATION-486-386-486-CACHE-SYSTE.html&quot; rel=&quot;noreferrer&quot;&gt;Forex board&lt;/a&gt; which could use a 386 or 486. Arguably any 486SX motherboard with a socket for a 487 qualifies in this category, since the 487 is a full-blown 486DX, so a 486SX with a 487 is a system with two CPUs, only one of which is used.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-08-08T21:29:53.287" LastActivityDate="2019-08-08T21:29:53.287" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11981" PostTypeId="2" ParentId="11975" CreationDate="2019-08-08T11:27:59.873" Score="4" Body="&lt;p&gt;The DEC Rainbow (1982) was built with two CPUs on the motherboard.  One was an 8088 and the other was a Z80.  It could run 8 bit CPM,  16 bit CPM,  or MS-DOS.  When running MS-DOS, the 8080 was used as an I/O processor for disk access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This doesn't quite fit your criterion, because only one of the two CPUs was x86, and because there was no OS that allowed user tasks to run concurrently on the two CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rainbow_100&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Rainbow_100&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2019-08-08T17:26:06.740" LastActivityDate="2019-08-08T17:26:06.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11982" PostTypeId="2" ParentId="11969" CreationDate="2019-08-08T15:07:40.847" Score="6" Body="&lt;p&gt;@Justme has covered the topic of drive detection, but since the question is requesting &quot;next steps&quot; for data recovery I'd like to speak to reading the data once your hardware is able to &quot;see&quot; the drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you have access to Linux, I highly recommend using &lt;a href=&quot;https://www.gnu.org/software/ddrescue/&quot; rel=&quot;nofollow noreferrer&quot;&gt;GNU ddrescue&lt;/a&gt; for reading the disk especially given its age.  ddrescue will create an image of the drive or partition which you can then mount and work with.  This way you only have to connect the drive once but can go back to the image as often as you need or want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ubuntu provides this with the &lt;code&gt;gddrescue&lt;/code&gt; package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a good tutorial at &lt;a href=&quot;https://www.linux.com/learn/intro-to-linux/2017/3/gnu-ddrescue-best-damaged-drive-rescue&quot; rel=&quot;nofollow noreferrer&quot;&gt;linux.com&lt;/a&gt; but here are two sample commands:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sudo ddrescue -r3 /dev/sdb1 cp341partition.img logfile&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will read the &lt;strong&gt;first partition&lt;/strong&gt; of the disk mounted as &lt;em&gt;sdb&lt;/em&gt; and write it to &lt;em&gt;cp341partition.img&lt;/em&gt;, logging progress to &lt;em&gt;logfile&lt;/em&gt; and making 3 attempts to recover bad blocks.  This is most useful if the disk only has one partition and no additional tools are needed.  The result can be mounted with &lt;code&gt;mount -o loop,ro cp341partition.img /mnt&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sudo ddrescue -r3 /dev/sdb cp341disk.img logfile&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will read the &lt;strong&gt;entire disk&lt;/strong&gt; mounted as &lt;em&gt;sdb&lt;/em&gt; and write it to &lt;em&gt;cp341disk.img&lt;/em&gt;, logging progress to &lt;em&gt;logfile&lt;/em&gt; and making 3 attempts to recover bad blocks.  This images the original MBR and all partitions in one file.  This is most useful if you have multiple partitions and is a little more complex to mount, my recommendation is to use &lt;a href=&quot;https://www.systutorials.com/docs/linux/man/8-kpartx/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;kpartx&lt;/code&gt;&lt;/a&gt; (Ubuntu package &lt;code&gt;kpartx&lt;/code&gt;).  This can be done with &lt;code&gt;kpartx -av cp341disk.img -r&lt;/code&gt; which will map the image into virtual partitions.  These can then be mounted &lt;code&gt;mount -o loop,ro /dev/mapper/loop0p1 /mnt&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that in both cases this mounts the image read-only for safety.&lt;/p&gt;&#xA;" OwnerUserId="4822" LastEditorUserId="4822" LastEditDate="2020-04-13T13:31:49.330" LastActivityDate="2020-04-13T13:31:49.330" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11983" PostTypeId="2" ParentId="11968" CreationDate="2019-08-08T19:48:17.350" Score="3" Body="&lt;p&gt;&lt;a href=&quot;http://www.idhw.com/textual/guide/inst_mobo_ami.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.idhw.com/textual/guide/inst_mobo_ami.html&lt;/a&gt; offers the following breakdown of the BIOS ID:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;D: BIOS w/ diagnostics&lt;/li&gt;&#xA;&lt;li&gt;PAQ: Compaq compatible 386 boards&lt;/li&gt;&#xA;&lt;li&gt;6156: this Manufacturer code is &lt;a href=&quot;http://www.idhw.com/textual/guide/inst_mobo_ami_manu.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;not listed&lt;/a&gt;, but &lt;strong&gt;Genoa&lt;/strong&gt; is 6165 and &lt;strong&gt;American Predator Corp.&lt;/strong&gt; is 6155, so possibly an alternative code for one of those. Wim's BIOS &lt;a href=&quot;https://www.wimsbios.com/aminumbers.jsp&quot; rel=&quot;nofollow noreferrer&quot;&gt;lists&lt;/a&gt; 6156 as &lt;strong&gt;Genoa&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;043090: MMDDYY BIOS release date&lt;/li&gt;&#xA;&lt;li&gt;KF: AMI keyboard BIOS rev. level&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stason.org/TULARC/pc/motherboards/G/GENOA-SYSTEMS-CORPORATION-486-486-BABY-AT.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;GENOA SYSTEMS CORPORATION 486 BABY AT&lt;/strong&gt;&lt;/a&gt; seems to be somewhat similar to your photos, although chipset is listed as UMC, so possibly you have an earlier version. The &lt;strong&gt;FAB&lt;/strong&gt; marking on the back also suggests that this could be a development or test version of the board.&lt;/p&gt;&#xA;" OwnerUserId="3783" LastActivityDate="2019-08-08T19:48:17.350" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11984" PostTypeId="2" ParentId="9187" CreationDate="2019-08-08T21:29:08.237" Score="-2" Body="&lt;p&gt;A direct electrical connection between a phone line and a computer &lt;strong&gt;would immediately destroy the computer&lt;/strong&gt;, because the phone line carries a 50V DC supply to power telephones connected to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible to get over that hurdle, of course, by inserting an isolating audio transformer or an acoustic coupler into the connection.  You must then contend with the fact that a phone line will typically carry &lt;strong&gt;only signals in the 300-3000 Hz range&lt;/strong&gt;, so you must arrange for the signals to be emitted from the sending computer to fall into that range.  This is, in fact, precisely what a modem does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do not have a modem designed for use on telephone lines, but you do have &lt;strong&gt;a tape-cassette interface on both machines and a suitable electrical-isolation device&lt;/strong&gt; as noted above, then it is likely that the tape-cassette interface will work sufficiently well as a modem.  Not only is the problem of storing signals on tape reasonably similar to the problem of sending signals over a phone line, but in many home computers the very same techniques were used.  The 1200/2400Hz FSK signal used by the Kansas City standard is nearly identical to that used by half-duplex TTY-modems of the period (Bell 202 or ITU V.23).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do not have suitable hardware, then it is possible to encode the data in ways that are easy to read out loud, or send by hand in Morse Code, requiring only a proficient operator at the far end to transcribe these voice or CW signals back into the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, 5-bit digits can be represented using Base32 encoding and printed out in four-digit groups, two such groups conveying five 8-bit bytes; Base32 is specifically designed to resist transcription errors by humans, as similar-looking letters and numerals are mapped to the same meaning.  Similarities in the pronunciation of letters (or differences between national conventions for same) should be disambiguated by using the NATO phonetic alphabet, if reading the digits out loud.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2019-08-08T22:02:27.580" LastActivityDate="2019-08-08T22:02:27.580" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11985" PostTypeId="1" CreationDate="2019-08-09T01:49:09.030" Score="1" ViewCount="251" Body="&lt;p&gt;Didn't find anything with a search and need to replace the tube due to it being severely burnt in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[&lt;img src=&quot;https://i.postimg.cc/tJ0X5NzM/IMG-20190808-204339.jpg&quot; alt=&quot;CRT label&quot;&gt;]&#xA;[&lt;img src=&quot;https://i.postimg.cc/1zjRgQVP/IMG-20190808-204343.jpg&quot; alt=&quot;More CRT label&quot;&gt;]&lt;/p&gt;&#xA;" OwnerUserId="14897" LastEditorUserId="10260" LastEditDate="2019-08-09T05:03:53.683" LastActivityDate="2019-08-09T05:03:53.683" Title="Identify Toshiba CRT" Tags="&lt;crt-monitor&gt;&lt;identify-this-computer&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11986" PostTypeId="1" AcceptedAnswerId="11987" CreationDate="2019-08-09T07:06:20.870" Score="11" ViewCount="1344" Body="&lt;p&gt;I am doing a design based on the Motorola 68332 MCU made for embedded applications, which is based on the CPU32 core.  The CPU32 core is very similar to the 680x0 CPUs, but there are some subtle differences that I need to know.  So for a better understanding, I would like to hear if anybody can help with the questions below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was CPU32 core created, when Motorola had the 680x0 CPU cores already ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.nxp.com/files-static/archives/doc/ref_manual/M68000PRM.pdf&quot; rel=&quot;noreferrer&quot;&gt;&quot;M68000 FAMILY PROGRAMMER’S REFERENCE MANUAL&quot;&lt;/a&gt; points out a large number of differences between the 680x0 and the CPU32, but the differences are scattered over a long document.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody know a description of only the differences between a 680x0 CPU core and the CPU32 core?&lt;/p&gt;&#xA;" OwnerUserId="14929" LastActivityDate="2019-08-09T17:33:59.520" Title="Why was CPU32 core created, and how is it different from 680x0 CPU cores?" Tags="&lt;motorola-68000&gt;&lt;motorola-680x0&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11987" PostTypeId="2" ParentId="11986" CreationDate="2019-08-09T07:47:36.743" Score="14" Body="&lt;p&gt;I can suggest why it was created. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Freescale_683XX&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page for CPU32&lt;/a&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The instruction set of the CPU32 core is similar to the 68020 without bitfield instructions, and with a few instructions unique to the CPU32 core, such as table lookup and interpolate instructions, and a low-power stop mode. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The objective for CPU32 seems to have been a processor for embedded uses, rather than a powerful minicomputer/workstation processor, which was the original objective of the 68000. The most important requirement for an embedded processor is usually low cost, followed by low power consumption. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;In the 1970s, when the 68000 was first created, bit-field instructions were a popular concept in CISC architectures: the DEC VAX is another example. They've become essentially obsolete in the light of experience with RISC architectures, so taking them out to save chip area, and thus cost, for the CPU32 is reasonable. That makes it no longer 68000-software-compatible, and thus allows more changes to the instruction set. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The table lookup and interpolate instructions are useful for a common trick with embedded systems. Rather than running a complex algorithm, pre-compute its value for a range of inputs, and then use lookups and interpolations. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The low-power stop instruction is definitely for power saving, and is one of the simplest means for that: having a processor consume power when it has no work to do is deadly for battery-powered devices. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-08-09T17:33:59.520" LastActivityDate="2019-08-09T17:33:59.520" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11988" PostTypeId="1" AcceptedAnswerId="11990" CreationDate="2019-08-09T11:13:23.947" Score="13" ViewCount="659" Body="&lt;p&gt;From the Atari SM124 Monochrome Monitor Service Manual, I get that the video signal timing for one line is 20µs. With the horizontal resolution of 640 pixels, this gives a 31.25ns pixel clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the T3-T4 times of the 8MHz 68000 CPU to access RAM, I find that there is 250ns left in the T1-T2 times for the video hardware to fetch 16bits to generate the signal during the T1-T4 period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only problem with this assumption is that on every picture of the original 520ST motherboard that I could get my hands on, the 256Kx1 RAM chips have an 150ns access time, thus a 260ns cycle time, according to original datasheets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How two 260ns RAM accesses could fit in 500ns?&lt;/p&gt;&#xA;" OwnerUserId="14931" LastEditorUserId="4335" LastEditDate="2019-08-09T13:35:01.813" LastActivityDate="2019-08-13T15:35:42.967" Title="Atari ST DRAM timing puzzle" Tags="&lt;video&gt;&lt;atari-st&gt;&lt;ram&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11989" PostTypeId="2" ParentId="11948" CreationDate="2019-08-09T11:44:43.917" Score="1" Body="&lt;p&gt;Nearest I can get is this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recall a BASIC command to receive an input and execute as an instruction while the program was running. It was in a microcomputer at school (the early 80s), can't remember the model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The command was EVAL. So you get a string with a BASIC instruction and then EVAL will execute that string as a normal BASIC instruction, while the program was running. This command wasn't present in every BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Eval&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Eval&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4109" LastActivityDate="2019-08-09T11:44:43.917" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11990" PostTypeId="2" ParentId="11988" CreationDate="2019-08-09T13:17:04.027" Score="13" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How two 260ns RAM accesses could fit in 500ns?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By using a 250ns (*1) tRC cycle?&lt;/p&gt;&#xA;&lt;p&gt;And yes, strictly that's out of spec. Still chances are very good that each and every chips will make it, as the timing range selected is rather conservative to start with. Even more so as this value is usually defined by the makers as being guarantied over the the whole temperature range (*2). But most important chips are usually way better than designated and downgraded for marketing reason.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long Answer:&lt;/h2&gt;&#xA;&lt;p&gt;There are three factors&lt;/p&gt;&#xA;&lt;h3&gt;a) Angst Timing.&lt;/h3&gt;&#xA;&lt;p&gt;When looking at the &lt;a href=&quot;http://matthieu.benoit.free.fr/cross/data_sheets/HYB41256.pdf&quot; rel=&quot;noreferrer&quot;&gt;data sheet&lt;/a&gt; it becomes obvious that the timing for the lowest grade (-15) is even more careful than for any other:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;     tRAS   tCSH   tRP    tRC&#xA;-10  100    100     90    200&#xA;-12  120    120     90    220&#xA;-15  150    150    100    260&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This might look fine, until one notices that they don't add up in case of 150ns chips. tRC is defined as tRAS+tRP (or tCSH+tRP) (*3). So by suddenly adding another 10 ns, chip manufacturer allowed more chips to fall into the -15 category. Something only real relevant in the beginning of production.&lt;/p&gt;&#xA;&lt;h3&gt;c) Less Stressful Environment&lt;/h3&gt;&#xA;&lt;p&gt;Datasheet values are always guaranteed for certain conditions like humidity and temperature. In case of 41256, they all guaranteed the values to be acceptable over the whole range of 0 to 70 degree Celsius (*4,5). An Atari gets rarely heated up to more than 40 degree (after all, its user needs to stay alive), so there is quite some room.&lt;/p&gt;&#xA;&lt;h3&gt;b) Market Optimization.&lt;/h3&gt;&#xA;&lt;p&gt;All speed grades (-10, -12 and -15) are made from the same wafers, just selected to grade. Higher grade will fetch higher prices from the ones that need it. Over time production yield gets better, so there will be more high grade chips. But the market doesn't need that many. Pushing them out at real grades would make the price drop. So they get get stamped, not only to grade but also what can be sold/is in demand.&lt;/p&gt;&#xA;&lt;p&gt;While yield is an issue in the very beginning of a new production, it soon closes in on 100% levels. 41256 were introduced in 1983, so by the time the Atari hit the market (Christmas 1985), production yield was already maxed out.&lt;/p&gt;&#xA;&lt;p&gt;So it's all about profit maximization when a wafer yields 100% -10 chips, the manufacturer can of course sell them as -10, but prices will drop quite fast to what -15s are. Selling most of it as -15 and some as -12 and -10 grades, the over all profit will be higher - just by applying a different stamp (*6)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In reality it was even a tiny bit less than 250ns.&lt;/p&gt;&#xA;&lt;p&gt;*2 - See footnote 12 on page 42 of this &lt;a href=&quot;http://matthieu.benoit.free.fr/cross/data_sheets/HYB41256.pdf&quot; rel=&quot;noreferrer&quot;&gt;Siemens HYB41256 datasheet&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Yes, I know there are more finer details, but for this we can ignore them, as they would add up the same way.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Not doing so would have been a major hurdle in competition.&lt;/p&gt;&#xA;&lt;p&gt;*5 - In reality they are usually way more reliable, but again, guaranteeing this for customers needing the extended range is a great way to ramp up prices. Ever wondered why the very same chip when installed in some military device suddenly costs a fortune? High cost in these areas are less to hide payments for experiments on aliens, but go to manufacturers who let the government bleed whatever is possible ... like with all of us. It's called market.&lt;/p&gt;&#xA;&lt;p&gt;*6 - The whole thing is a bit like ticket prices on an airplane. All passenger will get the same flight time and all have to wait for the last tourist to stow his baggage. The plane's seat configuration isn't fixed and can be changed (at a base) within hours (if it's not done by changing the little head cushions colour). So how many first, business and sardine seats are mounted is determinated by how many higher priced seats can be sold during the day on the segments the plane will do. And these seats will make much of the profit, as their increased price is not in relation to the increased effort.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-09T19:41:57.183" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11991" PostTypeId="2" ParentId="11953" CreationDate="2019-08-09T15:54:20.073" Score="6" Body="&lt;p&gt;As the manual explains:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Pipes (See Section 2 .. 9) The pipe facility has been removed.&#xA;  MAKE_PIPE has:been deleted, and any attempt to OPEN an old pipe object&#xA;  will return an error number 948. All the inter-process communication&#xA;  (IPC) features provided by pipes are also provided by event channels.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is a bit interesting for the simple reason that the event channels were not &lt;em&gt;designed&lt;/em&gt; to be a pipes replacement, but were dedicated to short, well understood data. I suspect one could stuff free-form data just as easily though. With the same basic functionality being duplicated, but only one of the APIs being widely used, the lesser-used pipes was redundant.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-08-09T15:54:20.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11992" PostTypeId="1" AcceptedAnswerId="11993" CreationDate="2019-08-09T15:59:09.360" Score="4" ViewCount="491" Body="&lt;p&gt;I was always under the impression that MS BASIC implemented &lt;code&gt;NEXT&lt;/code&gt; by pushing the &lt;em&gt;address&lt;/em&gt; of the &lt;code&gt;FOR&lt;/code&gt; on the stack. So convinced that when I read the &lt;a href=&quot;https://github.com/mist64/msbasic/blob/master/eval.s&quot; rel=&quot;noreferrer&quot;&gt;source code&lt;/a&gt; I assumed &lt;code&gt;CURLIN&lt;/code&gt; &lt;em&gt;had&lt;/em&gt; to be referring to the address. Quelle surprise!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So does anyone know why they &lt;em&gt;didn't&lt;/em&gt; point to the line's address, or at least the statement after it? MS didn't allow self-modification, and one could have made this an instance where &lt;code&gt;CONT&lt;/code&gt; wouldn't be allowed. It seems this would also offer a &lt;em&gt;significant&lt;/em&gt; performance boost and (very slightly) reduce code size as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I missing something obvious?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-08-10T08:00:38.450" Title="Why did MS BASIC use the line number for FOR loops?" Tags="&lt;microsoft-basic&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="11993" PostTypeId="2" ParentId="11992" CreationDate="2019-08-10T08:00:38.450" Score="9" Body="&lt;p&gt;Your initial interpretation was correct -- Microsoft Basic is storing the address of the first statement of the &lt;code&gt;FOR&lt;/code&gt;/&lt;code&gt;NEXT&lt;/code&gt; loop.  But it is also storing the line number of the first statement.  See the comment at the top of &lt;a href=&quot;https://github.com/mist64/msbasic/blob/master/flow1.s&quot; rel=&quot;noreferrer&quot;&gt;flow1.s&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; ----------------------------------------------------------------------------&#xA;; &quot;FOR&quot; STATEMENT&#xA;;&#xA;; FOR PUSHES 18 BYTES ON THE STACK:&#xA;; 2 -- TXTPTR&#xA;; 2 -- LINE NUMBER&#xA;; 5 -- INITIAL (CURRENT)  FOR VARIABLE VALUE&#xA;; 1 -- STEP SIGN&#xA;; 5 -- STEP VALUE&#xA;; 2 -- ADDRESS OF FOR VARIABLE IN VARTAB&#xA;; 1 -- FOR TOKEN ($81)&#xA;; ----------------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In &lt;a href=&quot;https://github.com/mist64/msbasic/blob/master/eval.s&quot; rel=&quot;noreferrer&quot;&gt;eval.s&lt;/a&gt; we see the code that happens when a &lt;code&gt;NEXT&lt;/code&gt; continues the loop.  The current line &lt;strong&gt;and&lt;/strong&gt; the pointer to the next statement are copied off the stack into their zero page variables.  Then it jumps to &lt;code&gt;NEWSTT&lt;/code&gt; to continue execution at &lt;code&gt;TXTPTR&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        sbc     STACK+BYTES_FP+4,x&#xA;        beq     L2C22&#xA;        lda     STACK+2*BYTES_FP+5,x&#xA;        sta     CURLIN&#xA;        lda     STACK+2*BYTES_FP+6,x&#xA;        sta     CURLIN+1&#xA;        lda     STACK+2*BYTES_FP+8,x&#xA;        sta     TXTPTR&#xA;        lda     STACK+2*BYTES_FP+7,x&#xA;        sta     TXTPTR+1&#xA;L2C1F:&#xA;        jmp     NEWSTT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The current line isn't really needed unless an error occurs at which point BASIC will want to report the line where the error was triggered.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2019-08-10T08:00:38.450" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="11995" PostTypeId="1" AcceptedAnswerId="17602" CreationDate="2019-08-10T18:14:00.927" Score="13" ViewCount="537" Body="&lt;p&gt;I remember in the 90s, there existed a Unix command line utility named &lt;code&gt;smiley&lt;/code&gt; that decoded emoticons. A sample use would be like this (the output is likely not the exact output the program gave):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ smiley ':-o'&#xA;:-o  surprise&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've tried to search for it, but couldn't find it. Does it still exist, and if so, where can you get it? I'd also be interested in any other information you may have about it.&lt;/p&gt;&#xA;" OwnerUserId="2087" LastActivityDate="2021-01-10T15:35:48.217" Title="Unix utility &quot;smiley&quot; to decode emoticons: Where to get it?" Tags="&lt;unix&gt;&lt;utilities&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11996" PostTypeId="1" AcceptedAnswerId="12028" CreationDate="2019-08-11T01:27:35.647" Score="5" ViewCount="547" Body="&lt;p&gt;I am trying to reverse engineer an old Wolf3D style Dos game named &quot;Nitemare 3D&quot;. I can get a raycasting engine with directional sprites running pretty easily using SDL2, but I have no experience with opening file archives. There is an old game file extractor that sadly does not have any available source code. Does anyone know how I can read these files with c or c++?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://drive.google.com/file/d/1v35uyIEFCop_kapNkMc6YRsNAuWfpEdE/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;file extractor and game files&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14942" LastEditorUserId="6794" LastEditDate="2019-08-12T14:50:02.493" LastActivityDate="2021-01-19T10:09:49.520" Title="How can I extract game data from Nitemare 3D files?" Tags="&lt;gaming&gt;&lt;file-format&gt;&lt;file-system&gt;&lt;reverse-engineering&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11997" PostTypeId="2" ParentId="11097" CreationDate="2019-08-11T07:20:27.967" Score="1" Body="&lt;p&gt;The design of the C64 hardware makes it somewhat complex to properly disambiguate joystick and keyboard inputs. The routines in the ROM for scanning the keyboard and joystick don't address all of this complexity, but they do allow better disambiguation of joystick port 2 than 1, so developers who use that routine (or a similar one) can improve joystick/keyboard scanning in a single-joystick game by using port 2 instead of port 1. The quote in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11099/7208&quot;&gt;Geo's answer&lt;/a&gt; gives a little more high-level detail on this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though it's not clear from the other answers here (or in some cases they're just wrong), it is possible to do scanning of one or both joysticks and the keyboard that is either perfectly or highly probable to be interference-free. This is not trivial, however, since it involves not just writing and testing custom code to do the scanning, but also analysis and possibly slight redesign of gameplay details. (For example, whether there are certain keyboard-triggered actions that need be detected only if a joystick is being held in a certain direction.) &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11191/7208&quot;&gt;This answer&lt;/a&gt; provides the information needed to do that, and should give you a sense of its level of complexity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lack of knowledge by the developers may sometimes explain the choice of the port 2 solution, with its downside that the user must figure out which port to use and probably unplug and replug his joystick stick, but likely more often it's simply a matter of cost-benefit: the time saved on designing a better solution to this problem can be spent on improving other areas of the game, such as adding a new feature or improving a level.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-08-11T07:20:27.967" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11998" PostTypeId="2" ParentId="11996" CreationDate="2019-08-11T08:28:36.590" Score="8" Body="&lt;p&gt;The &lt;code&gt;IMG.*&lt;/code&gt; files contains all textures and sprites in uncompressed/unencrypted state so its very easy to render, but there is no VGA palette there (nor in other files you posted). I found this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.dosgamesarchive.com/download/nitemare-3d/&quot; rel=&quot;noreferrer&quot;&gt;Nightmare3D DOS Archive&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and inside the game zip I found &lt;code&gt;GAME.PAL&lt;/code&gt; file containing the palette ... Its &lt;code&gt;1924 Bytes&lt;/code&gt; long and its look like the palette for &lt;code&gt;IMG.*&lt;/code&gt; sprites is at offset &lt;code&gt;1156 dec&lt;/code&gt;  till end of file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;IMG.*&lt;/code&gt; file format is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0000: DWORD 00000000 magic ID?&#xA;// directory&#xA;0004: DWORD 0000BC00 1st image start &#xA;0008: DWORD          2nd image start &#xA;000C: DWORD          3th image start &#xA;      ...&#xA;// 1st image&#xA;BC00: BYTE xs&#xA;BC01: BYTE ys &#xA;BC02: BYTE unknown[8]&#xA;BC0A: BYTE pixels[xs*ys]&#xA;// 2nd image&#xA;      ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However the directory has some hacks in it I did not yet recognize so its safer to scan for image by incrementing start address of image by &lt;code&gt;10+xs*ys&lt;/code&gt; to move to next image (until end of file reached). I decoded all the images starts and create own linear directory to speed up the rendering and usage instead (see the code).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pixels are stored 8bpp 256 color pixels in column major order !!! Most likely to speed-up/simplify the ray-casting engine Scanlines. This is my test code in C++/VCL to render it:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//$$---- Form CPP ----&#xA;//---------------------------------------------------------------------------&#xA;#include &amp;lt;vcl.h&amp;gt;&#xA;#pragma hdrstop&#xA;&#xA;#include &quot;Unit1.h&quot;&#xA;//---------------------------------------------------------------------------&#xA;#pragma package(smart_init)&#xA;#pragma resource &quot;*.dfm&quot;&#xA;TForm1 *Form1;&#xA;Graphics::TBitmap *bmp;&#xA;int xs,ys;&#xA;//---------------------------------------------------------------------------&#xA;class Nightmare3D_img&#xA;    {&#xA;public:&#xA;    // palette&#xA;    DWORD pal[256];&#xA;    // file&#xA;    BYTE *dat;          // file&#xA;    DWORD *dir;&#xA;    int siz,num;        // filesize, images&#xA;    // decoded/rendered image&#xA;    Graphics::TBitmap *bmp;&#xA;&#xA;    Nightmare3D_img()&#xA;        {&#xA;        dat=NULL; siz=0; num=0; dir=NULL;&#xA;        bmp=new Graphics::TBitmap;&#xA;        bmp-&amp;gt;HandleType=bmDIB;&#xA;        bmp-&amp;gt;PixelFormat=pf32bit;&#xA;        }&#xA;    Nightmare3D_img(Nightmare3D_img&amp;amp; a) { *this=a; }&#xA;    ~Nightmare3D_img()  { _free(); }&#xA;    Nightmare3D_img* operator = (const Nightmare3D_img *a) { *this=*a; return this; }&#xA;    //Nightmare3D_img* operator = (const Nightmare3D_img &amp;amp;a) { ...copy... return this; }&#xA;&#xA;    void _free(){ if (dat) delete[] dat; siz=0; num=0; dir=NULL; }&#xA;&#xA;    void load_pal(AnsiString filename)  // load palette to memory&#xA;        {&#xA;        int hnd,adr,i0,i,j;&#xA;        BYTE a[1924],*p;&#xA;        hnd=FileOpen(filename,fmOpenRead); if (hnd&amp;lt;0) return;   // open file&#xA;        FileRead(hnd,a,1924);                                   // load it to memory&#xA;        FileClose(hnd);                                         // close file&#xA;        // extract palette&#xA;        p=(BYTE*)pal;&#xA;        i0=1156;&#xA;        for (i=0,j=0;i&amp;lt;3*256;i+=3,j+=4)&#xA;            {&#xA;            p[j+0]=a[i0+i+2];&#xA;            p[j+1]=a[i0+i+1];&#xA;            p[j+2]=a[i0+i+0];&#xA;            p[j+3]=0;&#xA;            }&#xA;        }&#xA;    void load(AnsiString filename)  // copy file to memory&#xA;        {&#xA;        _free();&#xA;        int hnd,adr,xs,ys;&#xA;        hnd=FileOpen(filename,fmOpenRead); if (hnd&amp;lt;0) return;   // open file&#xA;        siz=FileSeek(hnd,0,2);                                  // get its size&#xA;            FileSeek(hnd,0,0);                                  // point to its start&#xA;        dat=new BYTE[siz];&#xA;        if (dat) FileRead(hnd,dat,siz); else siz=0;             // load it to memory&#xA;        FileClose(hnd);                                         // close file&#xA;        // recreate linear directory&#xA;        dir=(DWORD*)(dat+4);&#xA;        for (adr=0xBC00,num=0;(adr&amp;lt;siz)&amp;amp;&amp;amp;(num&amp;lt;12030);)&#xA;            {&#xA;            dir[num]=adr; num++;&#xA;            xs=dat[adr+0];&#xA;            ys=dat[adr+1];&#xA;            adr+=10+(xs*ys);&#xA;            }&#xA;        }&#xA;    void draw(int ix)&#xA;        {&#xA;        if (!siz) return;&#xA;        DWORD **pyx,c;&#xA;        int x,y,xs,ys,adr;&#xA;        // find image start&#xA;        if ((ix&amp;lt;0)||(ix&amp;gt;=num)) return;                      // image index out of range&#xA;        adr=dir[ix];&#xA;        if ((adr&amp;lt;0)||(adr+2&amp;gt;siz)) return;                   // end of file check&#xA;        xs=dat[adr+0];&#xA;        ys=dat[adr+1];&#xA;        bmp-&amp;gt;SetSize(xs,ys);&#xA;        pyx=new DWORD*[ys];&#xA;        for (y=0;y&amp;lt;ys;y++) pyx[y]=(DWORD*)bmp-&amp;gt;ScanLine[y];&#xA;        adr+=10;&#xA;        x=0; y=0;&#xA;        for (;adr&amp;lt;siz;)&#xA;            {&#xA;            pyx[y][x]=pal[dat[adr]]; adr++;&#xA;            y++; if (y&amp;gt;=ys){ y=0; x++; if (x&amp;gt;=xs) break; }&#xA;            }&#xA;        delete[] pyx;&#xA;        }&#xA;    } img;&#xA;//---------------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;//---------------------------------------------------------------------------&#xA;void draw()&#xA;    {&#xA;    bmp-&amp;gt;Canvas-&amp;gt;FillRect(TRect(0,0,xs,ys));&#xA;&#xA;    int ix,x=0,y=0,dx,dy,q,w=4;&#xA;&#xA;    for (dx=0,dy=0,ix=Form1-&amp;gt;sb_img-&amp;gt;Position;ix&amp;lt;img.num;ix++)&#xA;        {&#xA;        img.draw(ix);&#xA;        bmp-&amp;gt;Canvas-&amp;gt;Draw(x,y,img.bmp); x+=w+img.bmp-&amp;gt;Width;&#xA;        q=img.bmp-&amp;gt;Width;  if (dx&amp;lt;q) dx=q;&#xA;        q=img.bmp-&amp;gt;Height; if (dy&amp;lt;q) dy=q;&#xA;        if (x&amp;gt;=xs-dx-w){ x=0; y+=w+dy; if (y&amp;gt;=ys-64) break; dx=0; dy=0; }&#xA;        }&#xA;    Form1-&amp;gt;Caption=AnsiString().sprintf(&quot;image: %i-%i/%i &quot;,Form1-&amp;gt;sb_img-&amp;gt;Position,ix,img.num);&#xA;//  bmp-&amp;gt;SaveToFile(&quot;out.bmp&quot;);&#xA;&#xA;    Form1-&amp;gt;Canvas-&amp;gt;Draw(0,0,bmp);&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner)&#xA;    {&#xA;    bmp=new Graphics::TBitmap;&#xA;    bmp-&amp;gt;HandleType=bmDIB;&#xA;    bmp-&amp;gt;PixelFormat=pf32bit;&#xA;    FileListBox1-&amp;gt;Directory=&quot;..\\Files&quot;;&#xA;    FileListBox1-&amp;gt;Mask=&quot;IMG.*&quot;;&#xA;    FileListBox1-&amp;gt;Update();&#xA;&#xA;    img.load_pal(&quot;..\\Files\\GAME.PAL&quot;);&#xA;    img.load    (&quot;..\\Files\\IMG.1&quot;);&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void __fastcall TForm1::FormPaint(TObject *Sender)&#xA;    {&#xA;    draw();&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void __fastcall TForm1::FormResize(TObject *Sender)&#xA;    {&#xA;    xs=sb_img-&amp;gt;Left;&#xA;    ys=ClientHeight;&#xA;    bmp-&amp;gt;Width=xs;&#xA;    bmp-&amp;gt;Height=ys;&#xA;    draw();&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void __fastcall TForm1::FormActivate(TObject *Sender)&#xA;    {&#xA;    draw();&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void __fastcall TForm1::FileListBox1Change(TObject *Sender)&#xA;    {&#xA;    if (FileListBox1-&amp;gt;FileName!=&quot;&quot;)&#xA;        {&#xA;        img.load(FileListBox1-&amp;gt;FileName);&#xA;        draw();&#xA;        }&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void __fastcall TForm1::FormDestroy(TObject *Sender)&#xA;    {&#xA;    delete bmp;&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;void __fastcall TForm1::sb_imgChange(TObject *Sender)&#xA;    {&#xA;    draw();&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can ignore the VCL stuff the only important thing is the class ... the &lt;code&gt;img.load&lt;/code&gt; just loads entire &lt;code&gt;IMG.*&lt;/code&gt; file into memory and &lt;code&gt;draw(ix)&lt;/code&gt; render &lt;code&gt;ix&lt;/code&gt;th sprite into img.bmp bitmap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a scroll bar &lt;code&gt;sb_img&lt;/code&gt; that selects which image is rendered first and file list to select which &lt;code&gt;IMG.*&lt;/code&gt; file to load for testing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Here some previews from IMG.1 file:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DWWCG.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DWWCG.png&quot; alt=&quot;preview&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ZwUuI.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZwUuI.png&quot; alt=&quot;preview&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tXiEd.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tXiEd.png&quot; alt=&quot;preview&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need help with porting the VCL graphics code see bullets &lt;strong&gt;#3,#4&lt;/strong&gt; in here:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/21699076/2521214&quot;&gt;Graphics rendering&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For the ray-casting see this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/47251071/2521214&quot;&gt;Ray Casting with different height size&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-08-12T12:17:53.830" LastActivityDate="2019-08-12T12:17:53.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11999" PostTypeId="2" ParentId="6700" CreationDate="2019-08-11T11:29:06.953" Score="1" Body="&lt;p&gt;Or alternatively, you could have the awesome CoCoVGA installed in your CoCo2 and hook it up to any VGA monitor. It will add a plethora of colours and other options the original never had! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://cocovga.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://cocovga.com/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="12274" LastActivityDate="2019-08-11T11:29:06.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12000" PostTypeId="2" ParentId="4598" CreationDate="2019-08-11T17:59:39.433" Score="2" Body="&lt;p&gt;A form of structural pattern matching is presented in a 1963 paper &lt;em&gt;&lt;a href=&quot;https://dspace.mit.edu/handle/1721.1/6106&quot; rel=&quot;nofollow noreferrer&quot;&gt;METEOR: A LISP Interpreter for String Transformations&lt;/a&gt;&lt;/em&gt; by Danied Bobrow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Don't be fooled by the term &quot;string&quot;).&lt;/p&gt;&#xA;" OwnerUserId="5202" LastActivityDate="2019-08-11T17:59:39.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12001" PostTypeId="1" AcceptedAnswerId="17067" CreationDate="2019-08-11T18:03:26.950" Score="5" ViewCount="332" Body="&lt;p&gt;Which programming system first introduced &quot;destructuring&quot; denoting accessing various parts of an object using some sort of pattern, and binding those parts to variables, like Common Lisp's &lt;a href=&quot;http://clhs.lisp.se/Body/m_destru.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;destructuring-bind&lt;/a&gt;, either as an the name of an operator in the actual implementation, or perhaps as a term in its documentation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now it's a bit of a buzzword, what with new versions of JavaScript and other languages supporting &quot;destructuring assignment&quot;, but I suspect it might have arisen in Lisp development circles, first appearing in some Lisp system.&lt;/p&gt;&#xA;" OwnerUserId="5202" LastEditorUserId="5202" LastEditDate="2019-08-12T16:49:01.857" LastActivityDate="2020-11-25T06:27:16.817" Title="First use of &quot;destructuring&quot; in computing?" Tags="&lt;terminology&gt;" AnswerCount="1" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12002" PostTypeId="2" ParentId="11975" CreationDate="2019-08-12T06:04:12.477" Score="3" Body="&lt;p&gt;Does an Apple II motherboard count?  Back circa early 1981, I used a design similar to that of the Z80 Softcard to prototype an 8088 softcard that could do asymmetric shared memory multiprocessing with the 6502 in an Apple II.  Used it to demo using the 8087 as a math accelerator for the Apple II.  Jobs was unimpressed, but didn’t fire me.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2019-08-12T06:04:12.477" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12003" PostTypeId="2" ParentId="9187" CreationDate="2019-08-12T07:55:11.243" Score="0" Body="&lt;p&gt;As the question specifically states that this is about common home computers of the early 1980s, the answer has to be &lt;strong&gt;no&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To interface with the analogue telephone system, a modem is required (internal or external).  Provision of an internal modem would add to the cost (both in bill-of-materials and in testing and regulatory compliance), and networking was such a minority interest at the time that this would not be justified by the demand.  On many systems, even a standard serial interface is an optional extra.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The nearest you could get without a proper modem would be to abuse a cassette interface to drive an acoustic coupler (but even between a pair of like systems, you'd need to write your own driver, as the bandwidth of a telephone line is much narrower than that of cassette tape).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turns out that the lack of provision of internal modems was probably a blessing in disguise - separate modems connected by RS-232 cables allowed innovation by modem manufacturers to advance transfer speeds without significant changes to the home computers driving them.&lt;/p&gt;&#xA;" OwnerUserId="7946" LastActivityDate="2019-08-12T07:55:11.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12004" PostTypeId="1" AcceptedAnswerId="12039" CreationDate="2019-08-12T11:00:22.013" Score="13" ViewCount="820" Body="&lt;p&gt;On Intel iAPX &lt;strong&gt;80286&lt;/strong&gt;, as I recall from experience, the undocumented – officially unassigned – opcode position &lt;code&gt;0F1h&lt;/code&gt; was actually decoded as an instruction prefix, thus counting for maximum allowed instruction length (ten bytes), but otherwise not modifying the prefixed instruction: a &amp;quot;no operation&amp;quot; prefix of sorts. Now, what I have always wondered and could not ascertain, lacking appropriate lab equipment (logic analyzer or a mere oscilloscope): was &lt;code&gt;0F1h&lt;/code&gt; perhaps an alias for the lock prefix (&lt;code&gt;0F0h&lt;/code&gt;), or was it just ignored by the CPU (apart from counting for instruction length)?&lt;/p&gt;&#xA;&lt;p&gt;Note: we know that position &lt;code&gt;0F1h&lt;/code&gt; of the opcode matrix was later reused for a one-byte &lt;code&gt;int 1&lt;/code&gt; opcode (not a prefix) starting with the &lt;strong&gt;i80386&lt;/strong&gt;, that also was not documented until much later. This later conflicting assignment of the opcode position is &lt;em&gt;not&lt;/em&gt; part of the question here.&lt;/p&gt;&#xA;" OwnerUserId="14948" LastEditorUserId="15334" LastEditDate="2020-10-10T07:42:16.443" LastActivityDate="2020-10-10T07:42:16.443" Title="0F1h opcode-prefix on i80286" Tags="&lt;80286&gt;&lt;undocumented-opcodes&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12005" PostTypeId="2" ParentId="12004" CreationDate="2019-08-12T12:11:50.573" Score="12" Body="&lt;p&gt;According to &lt;a href=&quot;https://www.pcjs.org/pubs/pc/reference/intel/80286/exceptions/&quot; rel=&quot;noreferrer&quot;&gt;an Intel document describing opcodes which don’t result in exception 6&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 0F1H opcode is a prefix which performs no function. It counts like any other prefix towards the maximum instruction length. No restrictions apply to its execution.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The same document mentions explicitly when opcodes are aliases for others. I interpret the above as meaning that 0xF1 is &lt;em&gt;not&lt;/em&gt; an alias for 0xF0. If it was, I would have hoped the locking behaviour would be mentioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However &lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.lang.asm.x86/1xYGbLfanco&quot; rel=&quot;noreferrer&quot;&gt;this 2010 post in &lt;code&gt;comp.lang.asm.x86&lt;/code&gt;&lt;/a&gt; does mention that 0xF1 &lt;em&gt;is&lt;/em&gt; an alias for 0xF0, and that the only way to determine this is by testing it, since the Intel documentation is unreliable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don’t have a 286 handy to test this behaviour though. To test this on a real 80286, you’d need either a logic analyser (as you mention), or a protected-mode test program — since &lt;code&gt;LOCK&lt;/code&gt; is a privileged prefix, if 0xF1 is an alias for it, it should generate a general protection fault if it’s used without the appropriate privilege. (On a 386 or later CPU, the test would be easier, since &lt;code&gt;LOCK&lt;/code&gt; with an inappropriate instruction or operand generates an invalid opcode exception, but 0xF1 is different there.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-08-12T13:25:06.140" LastActivityDate="2019-08-12T13:25:06.140" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="12006" PostTypeId="1" CreationDate="2019-08-12T12:30:47.040" Score="1" ViewCount="287" Body="&lt;p&gt;I know that nowadays Tantalum is very common in computer components, specifically capacitors, due to its desirable electrical properties.  I'm curious when it was first used specifically in the context of computing, and for what purpose?  Bonus: did the computer spur the use of Tantalum (that is, was Tantalum useless before computers took off) or were computer engineers looking for something that had desirable properties and found that Tantalum, being used elsewhere, would do the job?&lt;/p&gt;&#xA;" OwnerUserId="4407" LastActivityDate="2019-08-13T05:35:47.960" Title="When was Tantalum first used in computing?" Tags="&lt;hardware&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12007" PostTypeId="2" ParentId="12006" CreationDate="2019-08-12T12:59:22.217" Score="4" Body="&lt;p&gt;It is not used so much as it used to. It tends to be replaced by ceramic and polymer electrolytics as tantalums have their limitations. But back in the 1970s the electronic calculators needed small capacitors with high capacitance and low ESR (impedance) for power supply bypass capacitors, and tantalum capacitor technology had been improving so much over the decades that those properties were met.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-08-12T12:59:22.217" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12008" PostTypeId="1" AcceptedAnswerId="12014" CreationDate="2019-08-12T14:43:35.113" Score="2" ViewCount="200" Body="&lt;p&gt;Cannot find any documentation on this computer, need some help identifying it. I am pretty sure this is some kind of print server and the date on the parts is 1989.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/Qq26aNy.jpg&quot; alt=&quot;Pic1&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/AYGvpJ9.jpg&quot; alt=&quot;Pic2&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="14897" LastEditorUserId="6794" LastEditDate="2019-08-13T16:33:27.503" LastActivityDate="2019-08-13T16:33:27.503" Title="Xerox 3700 Documentation?" Tags="&lt;identify-this-computer&gt;&lt;documentation&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12009" PostTypeId="2" ParentId="6480" CreationDate="2019-08-12T15:00:20.073" Score="5" Body="&lt;p&gt;Personally I also found that running in MODE 7 (the teletext mode) was far faster than any of othe other screen modes. The video had to handle 20K of screen memory in MODEs 0-2, 16K in MODE 3, 10K in MODEs 4 and 5, and 8K in MODE 6.  MODE 7 required just 1K. So, not only were screen updates massively faster, the hardware had to spend less time accessing the RAM.&lt;/p&gt;&#xA;" OwnerUserId="14950" LastActivityDate="2019-08-12T15:00:20.073" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12010" PostTypeId="2" ParentId="12006" CreationDate="2019-08-12T16:13:22.010" Score="1" Body="&lt;p&gt;I am no expert in this topic, but the other comments and answer lack the purpose of the capacitor usage OP is asked for, so here it is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look at any digital circuit it contains gates. The gates are like a power switch - they turn on/off. The problem is that if you have a complicated circuit with many gates (like CPU) with very fast speeds, then to propagate signals through all gates during small time you need very sharp edges of the signals, hence relatively big current impulses for short time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more gates and the less time, the bigger current spikes we need. Ah frequencies above 10 KHz the lines on a PCB are behaving more like a distributed transfer circuit constructed from capacitors, coils and resistors instead of simple wire. And the energy needed to transport from power supply to the final gate gets distorted, diminished, reversed, lost ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of all this, big current changes over small time will create induction to nearby circuitry causing problems (because the PCB lines behave also like antennas).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution to all these problems is to add blocking and filtering capacitors. What they do? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Blocking capacitors&lt;/strong&gt; shortcut very fast frequencies so they do not jump to another circuit nearby. You can look at them as antenna dampers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually, several capacitors in parallel are used with different technologies very close to power supply pins of each digital IC. Each blocking capacitor has a different capacity (each filtering different frequency). Usual values are &lt;code&gt;33pF + 1nF + 10nF + 100nF&lt;/code&gt; in parallel. For low frequency or less noisy ICs, usually only 100nF is used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Filtering capacitors&lt;/strong&gt; provide temporary power storage to cover the current spikes without propagating the spikes through power lines all over the nearby circuitry. These caps have to be fast and have enough capacity in storage. They simply convert the fast discrete current pulses to slow continuous small current from power supply. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Technology of capacitor&lt;/strong&gt; affects its capacity and also usage as they differ in behavior too (not just capacity) like durability, current response, localised frequency response ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ceramic caps are the best as they last forever, can handle current in both directions, but they have only small capacities so they used for blocking. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tantalums can have much bigger capacities (1µF and more) and also last forever but can not handle reversed current (exploding, offsetting voltage, making mess). They are ideal for medium power filtering, but are sometimes also used for blocking too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Electrolytes can have big capacities (1000µF and more), have limited lifespan and also can not handle reverse current (exploding, leaking), on top of which they are very susceptible to higher temperatures. They are ideal for power hungry supply filtering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rolled capacitors are not very often used in digital circuitry, as they are too big in comparison to ceramic/tantalum counterparts doing the same job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are more technologies out there like polymer, supercap,... but those were not usable in the Retro era.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="7946" LastEditDate="2019-08-12T17:53:19.080" LastActivityDate="2019-08-12T17:53:19.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12011" PostTypeId="2" ParentId="11937" CreationDate="2019-08-12T18:40:54.123" Score="4" Body="&lt;p&gt;Digital Equipment Corporation designed the hardware for the AOSE (Add One and Skip if Equal) instruction so that NOTHING could interrupt it.  Once that instruction started, it finished.  Period.  It was specifically intended for use as the hardware-based synchronization primitive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a sentence in the processor reference manual that read something like &quot;Since it takes several days at full speed to count through 36 bits, this is good enough.&quot;&lt;/p&gt;&#xA;" OwnerUserId="1995" LastActivityDate="2019-08-12T18:40:54.123" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12012" PostTypeId="2" ParentId="11995" CreationDate="2019-08-12T19:22:11.817" Score="13" Body="&lt;p&gt;The smiley program was posted to the comp.sources.misc Usenet newsgroup multiple times.  Here is the description from the Volume 20, Issue 73 posting:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Submitted-by: DaviD W. Sanderson &lt;br&gt;&#xA;  Posting-number: Volume 20, Issue 73&lt;br&gt;&#xA;  Archive-name: smiley/part01&lt;br&gt;&#xA;  Supersedes: smiley: Volume 18, Issue 82&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;smiley(1) is a &quot;smiley server&quot; I wrote for my own pleasure. Its list&#xA;  of smileys is more comprehensive than any other I have seen; it&#xA;  subsumes all the smiley lists I have ever seen posted to the net.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This version has more than a hundred more smileys than version 2, and&#xA;  a more informative -V switch.  Keep those smileys coming!&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;DaviD W. Sanderson (dws@cs.wisc.edu)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="70" LastActivityDate="2019-08-12T19:22:11.817" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12013" PostTypeId="2" ParentId="12006" CreationDate="2019-08-13T05:15:18.833" Score="2" Body="&lt;p&gt;Tantalum is a good conductor which can easily form a thin layer of oxide on its surface, which in turn acts as a good dielectric.  This makes it a very good material for constructing electronic capacitors.  In this form it was probably used as soon as semiconductor diodes and transistors became the principal computing medium.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is also used for making high-power resistors, and as part of a &quot;getter&quot; to maintain the vacuum in thermionic valves.  So it's entirely probable that early computers (1940s-50s) based on thermionic valves also used tantalum in either or both of these components.  Valves using tantalum were first made for HF/VHF radio applications.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2019-08-13T05:35:47.960" LastActivityDate="2019-08-13T05:35:47.960" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12014" PostTypeId="2" ParentId="12008" CreationDate="2019-08-13T06:40:09.983" Score="4" Body="&lt;p&gt;It looks like you have the control unit (probably including the hard disk, etc.) for a &lt;a href=&quot;https://books.google.co.jp/books?id=q03IhagslNsC&amp;amp;pg=PA12&amp;amp;lpg=PA12&amp;amp;dq=xerox+3700&amp;amp;source=bl&amp;amp;ots=1dSVPvHEfb&amp;amp;sig=ACfU3U0CtwYRH1987_befugRtx0pJHs6Jw&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwi3s7Cvmv_jAhUvyosBHZnfC2I4ChDoATAEegQICBAB#v=onepage&amp;amp;q=xerox%203700&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;high-end Xerox 3700&lt;/a&gt; laser printing system:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hmDB9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hmDB9.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt; (&lt;a href=&quot;https://www.kunhardt-computer.de/steinburg/drucker.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;image source&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;The &amp;quot;3700&amp;quot; on the front of the unit and &amp;quot;Product Code M75&amp;quot; on the label both match &lt;a href=&quot;https://www.xerox.com/downloads/usa/en/3/3700-ess.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this product safety data sheet&lt;/a&gt; for a &amp;quot;3700 (ESS only).&amp;quot; The unit is described as 54/27/41 cm in width/height/depth, which is about the size of that terminal/control unit on top of the main unit in the picture above.&lt;/p&gt;&#xA;&lt;h3&gt;Documentation Sources&lt;/h3&gt;&#xA;&lt;p&gt;This did a lot more than what you would normally think of even an &amp;quot;intelligent&amp;quot; printer doing today; for example you could [design forms] for it that the printer could locally merge with fill-in data and print for you. Thus, there would have been a lot of manuals for the various hardware and software capabilities; you need to specify more specifically what you're looking for.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Centre for Computing History in the UK has &lt;a href=&quot;http://www.computinghistory.org.uk/det/39797/Rank-Xerox-3700-Distributed-Electronic-Printing-System-Government-Branch-Introduction/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a page claiming they've scanned a background/intro manual&lt;/a&gt;, but it has only an image of the cover; I can't find a link there for the full scan. At only 21 pages, this wouldn't include detailed information about printer operation anyway.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Watch out, by the way, for various search results saying things like &amp;quot;Xerox Laserjet 3700 Repair Service Manual User Guides PDF, ePub eBook&amp;quot;; these are the usual &amp;quot;pay to get a free manual&amp;quot; sites that have worked to bump their search engine rankings, but the actual manual they provide appears to be for the HP LaserJet 3700, a completely different product. Xerox never used the term &amp;quot;Laserjet&amp;quot; for any of their products; it's an HP trademark.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-13T14:32:08.140" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12015" PostTypeId="1" CreationDate="2019-08-13T07:42:48.087" Score="10" ViewCount="847" Body="&lt;p&gt;Looking at the &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11191/7208&quot;&gt;schematic and explanation of how the C64 joystick&#xA;ports work&lt;/a&gt;, it seems clear that the stick direction and button&#xA;lines (&lt;code&gt;JOYA0&lt;/code&gt;, through &lt;code&gt;JOYA3&lt;/code&gt; for port 1 and &lt;code&gt;JOYB0&lt;/code&gt;, through&#xA;&lt;code&gt;JOYB3&lt;/code&gt; for port 2) can also be used as outputs by having the attached&#xA;device sense the levels of those lines (5V and 0V) and programming the&#xA;CIA to pull the levels high and low in the same way as is done for&#xA;keyboard scanning. (Or, for that matter, manually pressing appropriate&#xA;keys on the keyboard to bring the levels low.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This should also work on the VIC-20, and perhaps other Commodore&#xA;computers with joystick ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were any devices that used this technique manufactured and sold? If&#xA;so, what were they, and how did they deal with keyboard interference&#xA;with the scanning?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This question was inspired by a comment on the pagetable.com blog&#xA;post &lt;a href=&quot;https://www.pagetable.com/?p=1365&quot; rel=&quot;nofollow noreferrer&quot;&gt;NES and SNES Controllers on a 6502 (like the C64)&lt;/a&gt;. It&#xA;seems to me that you could use the same technique with NES/SNES&#xA;controllers plugged into the joystick ports instead of the user port,&#xA;albeit you'd need to deal with the issue of keys pressed on the&#xA;keyboard interfering with the I/O.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="11916" LastEditDate="2020-01-04T16:28:07.690" LastActivityDate="2020-09-15T15:59:04.823" Title="Did any devices use the Commodore 64 joystick ports as outputs or two-way communications ports?" Tags="&lt;commodore-64&gt;&lt;commodore&gt;&lt;joystick&gt;&lt;vic-20&gt;&lt;input-devices&gt;" AnswerCount="4" CommentCount="17" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12016" PostTypeId="2" ParentId="11988" CreationDate="2019-08-13T08:26:11.747" Score="1" Body="&lt;p&gt;Actually, many of the early microcomputer systems were designed in violation of worst case timing specifications, perhaps under the assumption that if the prototypes worked (due to statistical variation in the chips and environment (temperature, voltage, EM noise, etc.)), so would a high enough percentage of the production line.  High temperature burn-in was often used to help weed out the units that failed due to worst case timing.  (Customer returns of flakey units may have been higher during summer months.)&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2019-08-13T15:35:42.967" LastActivityDate="2019-08-13T15:35:42.967" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12017" PostTypeId="2" ParentId="12015" CreationDate="2019-08-13T08:32:12.743" Score="10" Body="&lt;p&gt;The dongle for the &lt;a href=&quot;https://csdb.dk/release/?id=107546&quot; rel=&quot;noreferrer&quot;&gt;PaperClip&lt;/a&gt; word processor plugged into joystick port 1. &lt;a href=&quot;https://c64preservation.com/index.php/bbs/dm.php?thread=1579&quot; rel=&quot;noreferrer&quot;&gt;It read bits 0 and 1 from the dongle and wrote bits 2, 3 and 4 to control it.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keyboard interference probably wasn't an issue with this use case.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2019-08-13T08:32:12.743" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12018" PostTypeId="1" AcceptedAnswerId="12019" CreationDate="2019-08-13T13:27:39.190" Score="71" ViewCount="18304" Body="&lt;p&gt;IBM released the IBM 5150 Technical Reference manual in August, 1981, and included in it the fully commented source code listing for the BIOS. I find this odd for two reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;IBM must have realized that creating a legal &quot;clone&quot; PC would be simplified by having this source code.&lt;/li&gt;&#xA;&lt;li&gt;Other manufacturers (Commodore, Apple, for example) fully documented their systems for programmers without including firmware source code.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Since cloning the PC ultimately undermined IBM's personal computer business, this &lt;em&gt;seems&lt;/em&gt; like a case of incompetence in handing your competitor something that makes it easier for them, while providing no benefits for IBM. Is there an alternate or documented explanation for IBM doing this, besides simple &lt;em&gt;incompetence&lt;/em&gt;?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="837" LastEditDate="2019-08-14T11:22:01.510" LastActivityDate="2020-03-10T10:42:07.810" Title="Why did IBM make the PC BIOS source code public?" Tags="&lt;history&gt;&lt;ibm-pc&gt;&lt;bios&gt;" AnswerCount="8" CommentCount="9" FavoriteCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="12019" PostTypeId="2" ParentId="12018" CreationDate="2019-08-13T14:06:06.467" Score="103" Body="&lt;p&gt;In the late '70s and very early 80s it was not unusual to make BIOS source code available. Apple did indeed do so; the full source listing starts at &lt;a href=&quot;https://archive.org/details/applerefjan78/page/n78&quot; rel=&quot;noreferrer&quot;&gt;page 76 of the &lt;em&gt;Apple II Reference Manual&lt;/em&gt;&lt;/a&gt;. Atari did the same in their &lt;a href=&quot;https://archive.org/details/CO16555AtariHomeComputerTechnicalReferenceNotes1982/page/n259&quot; rel=&quot;noreferrer&quot;&gt;Operating System Source Listing&lt;/a&gt; section of their &lt;em&gt;Atari 400/800 Technical Reference Notes&lt;/em&gt;.¹ For CP/M machines, having the BIOS source was near essential if you wanted to add new hardware to the system that could be used by CP/M. So IBM's publication of their BIOS source code in Appendix A of the &lt;a href=&quot;http://www.minuszerodegrees.net/manuals/IBM_5150_Technical_Reference_6025005_AUG81.pdf&quot; rel=&quot;noreferrer&quot;&gt;Technical Reference Manual&lt;/a&gt; was not unusual.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nor does having BIOS source available simplify making a clone; in fact it may make it more complex. To avoid copyright issues, your clone's BIOS must not copy anything from the published source. This means that even if you independently come up with a similar solution for similar reasons, you may have to rewrite your solution not to be so similar to what the published source does because you could be accused of copying it from the original source. Having source code with comments increases the scope of work that can't be copied, as compared to just object code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nor was it incompetent not to foresee, before the release of the first IBM PC, that clones would eat IBM's lunch. Nobody at that point even could be sure that a single standard system for microcomputers would ever become a thing; it certainly hadn't happened up to that point. Even if someone had had such amazing precognitive abilities that they could have seen this, I'm not sure that IBM ended up making less from their fraction of a huge PC market than they would have made from the totality of a much smaller IBM PC market that they owned exclusively. The whole point of clones was that they were significantly cheaper, and if the market couldn't move to cheaper by cloning PCs, it would have moved to cheaper by using less-compatible hardware and moving the compatibility burden to software developers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹&lt;sub&gt;Of the early PC manufacturers, Commodore appears to be one of the very few that did not distribute their BIOS (which they called &quot;KERNAL&quot;) source, though it &lt;a href=&quot;http://6502.org/users/sjgray/dj/&quot; rel=&quot;noreferrer&quot;&gt;later leaked out&lt;/a&gt;. Perhaps this was because it was somewhat more substantial than other early BIOS code, being a bit closer to an actual operating system.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-03-10T10:42:07.810" LastActivityDate="2020-03-10T10:42:07.810" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="12020" PostTypeId="2" ParentId="12018" CreationDate="2019-08-13T15:39:08.870" Score="30" Body="&lt;p&gt;Just because they released the source code didn't mean that copyright no longer applied. They didn't &quot;open source it&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having access to the source was as effective documentation on interoperating with the machine as anything was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the day, we had a stack of microfiche (I'd guess 100+ pages of fiche film) with (apparently) the source code to DECs VMS on it. It came with the system. Pages of assembly printouts.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="469" LastEditDate="2019-08-14T04:01:57.027" LastActivityDate="2019-08-14T04:01:57.027" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="12022" PostTypeId="2" ParentId="5341" CreationDate="2019-08-13T17:27:34.683" Score="6" Body="&lt;p&gt;Something not mentioned in other answers here here is that pretty much&#xA;everyone learning computer programming on microcomputers through the&#xA;mid-80s used line editing by default. The most common programming&#xA;language was BASIC, and the most common &quot;editor&quot; was the line-oriented&#xA;editing system provided as part of the BASIC implementation. You'd use&#xA;the &lt;code&gt;LIST&lt;/code&gt; command with line numbers to see some part of your current&#xA;program, and retype lines by typing the line number followed by the&#xA;new code. If you were moderately lucky, you could move your cursor up&#xA;the screen to a line printed by that &lt;code&gt;LIST&lt;/code&gt; command, edit it, and hit&#xA;ENTER to have it replace that line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even when moving to other languages, assembly language being the most&#xA;common after BASIC, line editing was the general rule. Apple's &lt;a href=&quot;https://archive.org/details/EDASM-ProDOS_Assembler_Tools_Manual/page/n33&quot; rel=&quot;noreferrer&quot;&gt;EDASM&lt;/a&gt;&#xA;and Atari's &lt;a href=&quot;https://archive.org/details/AssemblerEditor/page/n24&quot; rel=&quot;noreferrer&quot;&gt;Assembler Editor&lt;/a&gt; cartridge both used&#xA;line-oriented editors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for someone coming from this background (as I did), the general use&#xA;of &lt;code&gt;ed&lt;/code&gt; was no big deal; it was more or less the same as what we'd&#xA;been doing before. It was just a bit nicer because it had some extra&#xA;features that weren't always present in microcomputer systems, at&#xA;least when working in BASIC:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You could easily insert new lines, with line numbering being&#xA;completely automatic. That is, &lt;code&gt;2i&lt;/code&gt; followed by a line of text and&#xA;&lt;code&gt;.&lt;/code&gt; (end input) would make the newly inserted line number 2, and&#xA;what was line 2 became line 3.&lt;/li&gt;&#xA;&lt;li&gt;Line numbers became &quot;metadata,&quot; rather than part of the line itself,&#xA;as it had been in BASIC.&lt;/li&gt;&#xA;&lt;li&gt;We had the concept of a &quot;current line.&quot;&lt;/li&gt;&#xA;&lt;li&gt;We had commands for making specific edits to part of the current&#xA;line, and we could look at the result and do further edits based on&#xA;that. (&lt;code&gt;s/foo/baz/p&lt;/code&gt;, examine result, try &lt;code&gt;s/baz/bar/p&lt;/code&gt;.)&lt;/li&gt;&#xA;&lt;li&gt;We had better commands for moving to a new current line, especially&#xA;via searching (&lt;code&gt;/foo()&lt;/code&gt; to jump to the function definition).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This turns out to be not much different from how an effective Vim user&#xA;works nowadays anyway, except that you'd manually &quot;print&quot; or &quot;number&quot;&#xA;some lines on to the screen before entering various editing commands&#xA;to change them. A typical bit of editing might be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/^int foo(          Set current line to the function defintion.&#xA;                    (The line is printed so you can see it's correct.)&#xA;.,.+15n             Print first 15 lines of function with line numbers.&#xA;                    (Let's say that the first line printed was 70.)&#xA;70s/)/, y)/         Add another parameter to the function&#xA;83a                 Append after line 73 (in this example, the last&#xA;                    line of the parameter declarations).&#xA;int y               Declare type of new parameter&#xA;.                   End of input&#xA;88i                 Insert new code for new parameter before line 88,&#xA;                    which was 87 before inserting the above line&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And so on. So just as with modern editors you still had the bit of&#xA;code you were working on displayed on the screen (not the whole file),&#xA;you edited based on what was on the screen, and you moved your&#xA;&quot;viewport&quot; around as you worked on different parts the file. The&#xA;commands were usually slightly more awkward (&lt;code&gt;.,.+20p&lt;/code&gt; instead of&#xA;&lt;code&gt;Ctrl-F&lt;/code&gt; to show the next &quot;page&quot;) but not unduly so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;ex&lt;/code&gt; was a rather more sophisticated line editor (basically, &lt;code&gt;vi&lt;/code&gt;&#xA;without full screen mode) and offered an easier way of making edits&#xA;within a line if you were using a &quot;glass TTY,&quot; i.e., a screen-based&#xA;terminal that didn't have an addressible cursor. Called &quot;open mode,&quot;&#xA;it was basically a one-line visual editor that used backspace,&#xA;carriage return and reprinting of characters to move the cursor around&#xA;so you could use the standard visual left/right by character and word&#xA;etc. commands to move back and forth within the line. Moving up or&#xA;down would simply start a new line on the screen showing the line&#xA;above or below that you'd moved to.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-08-13T17:27:34.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12023" PostTypeId="1" CreationDate="2019-08-13T20:06:09.800" Score="3" ViewCount="243" Body="&lt;p&gt;I read some related information in a SAM question but I want to know exactly &lt;strong&gt;how to write amplitudes directly to the DAC, sample by sample, like in a bytebeat formula&lt;/strong&gt;. I understand it is possible on C64, is it? And if you know how to do the same on similars like VIC-20, it would be appreciate, thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="14957" LastEditorUserId="11916" LastEditDate="2020-01-04T16:59:34.440" LastActivityDate="2020-01-04T16:59:34.440" Title="How to write directly to the Commodore 64 (or similar) DAC" Tags="&lt;commodore-64&gt;&lt;commodore&gt;&lt;audio&gt;&lt;vic-20&gt;&lt;digital-audio&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2019-08-13T23:57:15.460" ContentLicense="CC BY-SA 4.0" />
  <row Id="12024" PostTypeId="2" ParentId="12023" CreationDate="2019-08-13T20:26:51.003" Score="5" Body="&lt;p&gt;DAC is a digital analog converter. There is no such periphery on C64, but the closest to it is the SID chip, for playing sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the SID chip was not designed for that. It can play ADSR (attack-decay-sustain-release) sounds with 4 pre-configured waveforms:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MTYJB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MTYJB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be hacked to work like a DAC. It can only 16 signal levels, but it is enough to produce recognizable sound (for example, human speech).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also set a master sound volume with the lower 4 bits of the register &lt;code&gt;$D418&lt;/code&gt;. (The higher 4 bit configures the filters, best to leave them unmodified!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hack is the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Start a sound with an short AD.&lt;/li&gt;&#xA;&lt;li&gt;The important thing is that you can make the &quot;sustain&quot; phase so long, as you wish! It requires a write to a  SID register to start the &quot;release&quot; phase.&lt;/li&gt;&#xA;&lt;li&gt;On this way, you have a constant sound. Ideally, best if you set up a pulse waveform with the highest possible frequency (around 8kHz)&lt;sup&gt;1&lt;/sup&gt;, and with a high duty level (to approximate a constant output level).&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Then, by regulating the master volume&lt;sup&gt;2&lt;/sup&gt;, you effectively have the DAC.&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The result will be only 4 bits and it will be contaminated with the original sound, but it will work: it is enough to make recognizable human speech, although only at some tens of seconds have place in the RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output will appear on the audio output (needless to say, this and requirement for the master volume control&lt;sup&gt;2&lt;/sup&gt; makes the play of other sounds impossible).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;sub&gt;Thanks @Janka the important fix.&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;sub&gt;Comments (another thanks @Janka) suggest that it can be done with the sustain level, too, what gives yet another 4 bits. Combining these, we could have a nearly-logarithmic 8-bit signal output. As I can remember, the master volume control is a requirement for this trick, but I am not sure. &lt;a href=&quot;https://www.c64-wiki.com/wiki/SID&quot; rel=&quot;nofollow noreferrer&quot;&gt;This doc&lt;/a&gt; says that the sustain level can be set up for all the 3 sound channels independently.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="129" LastEditorUserId="129" LastEditDate="2019-08-13T20:49:51.380" LastActivityDate="2019-08-13T20:49:51.380" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12025" PostTypeId="1" AcceptedAnswerId="12026" CreationDate="2019-08-13T20:48:27.500" Score="6" ViewCount="519" Body="&lt;p&gt;I’m trying to make some graphics in Processing that look just like what I’d get on an Apple //e. I think the info I seek is in the ROM disassembly but I can’t find anything by googling. I'm also interested in the algorithms behind other Applesoft Basic commands.&lt;/p&gt;&#xA;" OwnerUserId="14945" LastEditorUserId="14945" LastEditDate="2019-09-09T22:12:00.737" LastActivityDate="2019-09-09T22:12:00.737" Title="Where can I find the Applesoft line-drawing algorithm?" Tags="&lt;apple-ii&gt;&lt;applesoft-basic&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12026" PostTypeId="2" ParentId="12025" CreationDate="2019-08-13T22:35:12.970" Score="12" Body="&lt;p&gt;You can find the hi-res drawing code in an &lt;a href=&quot;http://www.txbobsc.com/scsc/scdocumentor/F5BA.html&quot; rel=&quot;noreferrer&quot;&gt;Applesoft disassembly&lt;/a&gt;. HPLOT starts at $F6FE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ROM code is optimized for size, and parts are tricky to sort out.  If you want something a bit more straightforward, you can find Applesoft-ish line drawing in &lt;a href=&quot;https://github.com/fadden/fdraw&quot; rel=&quot;noreferrer&quot;&gt;fdraw&lt;/a&gt;.  Some commentary on how Applesoft's line drawing code sets bits on the hi-res screen can be found in the &lt;a href=&quot;https://github.com/fadden/fdraw/blob/master/docs/manual.md#nutshell&quot; rel=&quot;noreferrer&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One difference between Applesoft's routines and a typical Bresenham implementation is called out in the fdraw docs:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Applesoft routine isn't quite the same as the standard Bresenham&#xA;  algorithm, because it doesn't move diagonally. Consider a line from&#xA;  (0,0) to (50,10) -- gently sloping down and to the right. The standard&#xA;  algorithm would plot exactly 51 pixels, one in each horizontal&#xA;  position. The &quot;pen&quot; always moves one pixel right, but sometimes also&#xA;  moves down.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In Applesoft, the &quot;pen&quot; can move either right or down, but can't do&#xA;  both at once. This results in lines that feel thin when near&#xA;  horizontal or vertical, but become thicker as they approach 45&#xA;  degrees. This reduces performance, because Applesoft draws twice as&#xA;  many pixels for a diagonal line as the basic algorithm. It can also be&#xA;  visually jarring when animated, because lines get very thick when near&#xA;  diagonal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2019-08-14T00:41:10.960" LastActivityDate="2019-08-14T00:41:10.960" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12027" PostTypeId="1" AcceptedAnswerId="12030" CreationDate="2019-08-14T00:23:35.023" Score="30" ViewCount="2870" Body="&lt;p&gt;As an example, say we have a DOS MZ EXE file that's around 20 KiB in size. The EXE header contains the value &lt;code&gt;0x1400&lt;/code&gt; at offset &lt;code&gt;0x0A&lt;/code&gt; indicating that the program is requesting 5,120 paragraphs (or 80 KiB) to be allocated in addition to the space occupied by the load image. When the load is complete, a total of 100 KiB will be available for the program's direct use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know what the &quot;official&quot; term was for the 80 KiB allocation in this example, but I know it as BSS from the *nix world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is simply, did DOS zero out this area when it loaded the program, or could there be garbage inside it from whatever held the memory previously? If DOS did &lt;em&gt;not&lt;/em&gt; zero it out, was it something that most programs (or the runtimes they were compiled/linked with) did on their own?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm mainly interested in the perspective from a typical C program of the day. If I understand it correctly, C guarantees that all static variables without an explicit initializer get set to &lt;code&gt;0&lt;/code&gt;, and those variables seem to end up being stored in the BSS area. So whose job was it to ensure they were properly zeroed?&lt;/p&gt;&#xA;" OwnerUserId="12139" LastEditorUserId="15279" LastEditDate="2019-09-23T21:46:32.960" LastActivityDate="2019-09-23T21:46:32.960" Title="Did DOS zero out the BSS area when it loaded a program?" Tags="&lt;ms-dos&gt;&lt;memory&gt;&lt;memory-layout&gt;&lt;c&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12028" PostTypeId="2" ParentId="11996" CreationDate="2019-08-14T00:38:54.917" Score="4" Body="&lt;h1&gt;Read and extract &lt;code&gt;SND.DAT&lt;/code&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Code is C# but is easy enough to understand and port to another language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically there are 6 bytes entries that tells where is what in the file, some of them are dummy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already identified for you the different types of files in it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IBK&#xA;MID&#xA;VOC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Winamp will play MIDI files out of the box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VLC will play VOC files properly unlike Winamp.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For IBK files check these links:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.shikadi.net/moddingwiki/IBK_Format&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.shikadi.net/moddingwiki/IBK_Format&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/Wohlstand/OPL3BankEditor&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/Wohlstand/OPL3BankEditor&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;using System;&#xA;using System.Collections.Generic;&#xA;using System.IO;&#xA;using JetBrains.Annotations;&#xA;using Microsoft.VisualStudio.TestTools.UnitTesting;&#xA;&#xA;namespace UnitTestProject1&#xA;{&#xA;    [TestClass]&#xA;    public class UnitTest1&#xA;    {&#xA;        [TestMethod]&#xA;        public void TestMethod1()&#xA;        {&#xA;            const string directory = @&quot;C:\Temp\nite3d20&quot;;&#xA;&#xA;            var path = Path.Combine(directory, &quot;SND.DAT&quot;);&#xA;&#xA;            using (var stream = File.OpenRead(path))&#xA;            using (var reader = new BinaryReader(stream))&#xA;            {&#xA;                stream.Position = 0;&#xA;&#xA;                var samples = new List&amp;lt;Sample&amp;gt;();&#xA;&#xA;                while (true)&#xA;                {&#xA;                    var sample = new Sample(reader);&#xA;&#xA;                    if (sample.Position == stream.Length)&#xA;                        break;&#xA;&#xA;                    samples.Add(sample);&#xA;                }&#xA;&#xA;                var index = 0;&#xA;&#xA;                foreach (var sample in samples)&#xA;                {&#xA;                    string extension;&#xA;&#xA;                    switch (index)&#xA;                    {&#xA;                        case 0:&#xA;                            extension = &quot;IBK&quot;;&#xA;                            break;&#xA;                        case int n when n &amp;gt;= 1 &amp;amp;&amp;amp; n &amp;lt;= 15:&#xA;                            extension = &quot;MID&quot;;&#xA;                            break;&#xA;                        case int n when n &amp;gt;= 34 &amp;amp;&amp;amp; n &amp;lt;= 110:&#xA;                            extension = &quot;VOC&quot;;&#xA;                            break;&#xA;                        default:&#xA;                            extension = &quot;.BIN&quot;;&#xA;                            break;&#xA;                    }&#xA;&#xA;                    var name = $&quot;{path}.{index++:D3}.{extension}&quot;;&#xA;&#xA;                    if (sample.Length == 0)&#xA;                        continue;&#xA;&#xA;                    stream.Position = sample.Position;&#xA;&#xA;                    var bytes = reader.ReadBytes(sample.Length);&#xA;&#xA;                    File.WriteAllBytes(name, bytes);&#xA;                }&#xA;            }&#xA;        }&#xA;    }&#xA;&#xA;    public struct Sample&#xA;    {&#xA;        public readonly short Length;&#xA;        public readonly int Position;&#xA;&#xA;        public Sample([NotNull] BinaryReader reader)&#xA;        {&#xA;            if (reader == null)&#xA;                throw new ArgumentNullException(nameof(reader));&#xA;&#xA;            Length = reader.ReadInt16();&#xA;            Position = reader.ReadInt32();&#xA;        }&#xA;&#xA;        public override string ToString()&#xA;        {&#xA;            return $&quot;{nameof(Position)}: {Position}, {nameof(Length)}: {Length}&quot;;&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You will end up with the following files:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; Directory of C:\Temp\nite3d20\New Folder With Items&#xA;&#xA;[.]               [..]              SND.DAT.000.IBK   SND.DAT.001.MID   SND.DAT.002.MID   SND.DAT.003.MID&#xA;SND.DAT.004.MID   SND.DAT.005.MID   SND.DAT.006.MID   SND.DAT.007.MID   SND.DAT.008.MID   SND.DAT.009.MID&#xA;SND.DAT.010.MID   SND.DAT.011.MID   SND.DAT.012.MID   SND.DAT.013.MID   SND.DAT.014.MID   SND.DAT.015.MID&#xA;SND.DAT.034.VOC   SND.DAT.035.VOC   SND.DAT.036.VOC   SND.DAT.037.VOC   SND.DAT.038.VOC   SND.DAT.039.VOC&#xA;SND.DAT.040.VOC   SND.DAT.041.VOC   SND.DAT.042.VOC   SND.DAT.043.VOC   SND.DAT.044.VOC   SND.DAT.045.VOC&#xA;SND.DAT.046.VOC   SND.DAT.047.VOC   SND.DAT.048.VOC   SND.DAT.049.VOC   SND.DAT.050.VOC   SND.DAT.051.VOC&#xA;SND.DAT.052.VOC   SND.DAT.053.VOC   SND.DAT.054.VOC   SND.DAT.055.VOC   SND.DAT.056.VOC   SND.DAT.057.VOC&#xA;SND.DAT.058.VOC   SND.DAT.059.VOC   SND.DAT.060.VOC   SND.DAT.061.VOC   SND.DAT.063.VOC   SND.DAT.064.VOC&#xA;SND.DAT.065.VOC   SND.DAT.066.VOC   SND.DAT.067.VOC   SND.DAT.068.VOC   SND.DAT.069.VOC   SND.DAT.070.VOC&#xA;SND.DAT.071.VOC   SND.DAT.073.VOC   SND.DAT.074.VOC   SND.DAT.078.VOC   SND.DAT.079.VOC   SND.DAT.080.VOC&#xA;SND.DAT.081.VOC   SND.DAT.082.VOC   SND.DAT.083.VOC   SND.DAT.084.VOC   SND.DAT.085.VOC   SND.DAT.086.VOC&#xA;SND.DAT.087.VOC   SND.DAT.088.VOC   SND.DAT.089.VOC   SND.DAT.090.VOC   SND.DAT.091.VOC   SND.DAT.092.VOC&#xA;SND.DAT.093.VOC   SND.DAT.094.VOC   SND.DAT.095.VOC   SND.DAT.096.VOC   SND.DAT.097.VOC   SND.DAT.098.VOC&#xA;SND.DAT.099.VOC   SND.DAT.100.VOC   SND.DAT.101.VOC   SND.DAT.102.VOC   SND.DAT.103.VOC   SND.DAT.104.VOC&#xA;SND.DAT.105.VOC   SND.DAT.106.VOC   SND.DAT.107.VOC   SND.DAT.108.VOC   SND.DAT.109.VOC   SND.DAT.110.VOC&#xA;              88 File(s)        560,142 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that I increment index before potentially skipping it, you then end up with the intended index for it, i.e. you might find relevant info on other files and they should point at correct index, else adjust.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Better DAT reading algorithm&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;In fact, DAT files share the same structs describing where is what:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;UINT16LE Length&lt;/p&gt;&#xA;    &#xA;    &lt;p&gt;UINT32LE Position&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This will read and extract DATs into subdirectories:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What changes from previous code is members in struct and the logic to infer last entry in that FAT.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;using System;&#xA;using System.Collections.Generic;&#xA;using System.IO;&#xA;using System.Text;&#xA;using JetBrains.Annotations;&#xA;using Microsoft.VisualStudio.TestTools.UnitTesting;&#xA;&#xA;namespace UnitTestProject1&#xA;{&#xA;    [TestClass]&#xA;    public class UnitTest1&#xA;    {&#xA;        [NotNull]&#xA;        private static Entry[] GetEntries([NotNull] Stream stream)&#xA;        {&#xA;            if (stream == null)&#xA;                throw new ArgumentNullException(nameof(stream));&#xA;&#xA;            using (var reader = new BinaryReader(stream, Encoding.Default, true))&#xA;            {&#xA;                var entries = new List&amp;lt;Entry&amp;gt;();&#xA;&#xA;                while (true)&#xA;                {&#xA;                    var entry = new Entry(reader);&#xA;&#xA;                    if (entry.Position + entry.Length == stream.Length)&#xA;                        break;&#xA;&#xA;                    entries.Add(entry);&#xA;                }&#xA;&#xA;                return entries.ToArray();&#xA;            }&#xA;        }&#xA;&#xA;        [NotNull]&#xA;        private static string GetPath([NotNull] string fileName)&#xA;        {&#xA;            if (fileName == null)&#xA;                throw new ArgumentNullException(nameof(fileName));&#xA;&#xA;            const string directory = @&quot;C:\Temp\nite3d20&quot;;&#xA;&#xA;            var path = Path.Combine(directory, fileName);&#xA;&#xA;            return path;&#xA;        }&#xA;&#xA;        [TestMethod]&#xA;        public void Extract_UIF_DAT()&#xA;        {&#xA;            Extract(&quot;UIF.DAT&quot;);&#xA;        }&#xA;&#xA;        [TestMethod]&#xA;        public void Extract_SND_DAT()&#xA;        {&#xA;            Extract(&quot;SND.DAT&quot;);&#xA;        }&#xA;&#xA;        private static void Extract([NotNull] string fileName)&#xA;        {&#xA;            if (fileName == null)&#xA;                throw new ArgumentNullException(nameof(fileName));&#xA;&#xA;            var path = GetPath(fileName);&#xA;&#xA;            using (var stream = File.OpenRead(path))&#xA;            using (var reader = new BinaryReader(stream))&#xA;            {&#xA;                var entries = GetEntries(stream);&#xA;&#xA;                var directory = Directory.CreateDirectory($&quot;{path} content&quot;);&#xA;&#xA;                var index = 0;&#xA;&#xA;                foreach (var entry in entries)&#xA;                {&#xA;                    stream.Position = entry.Position;&#xA;&#xA;                    var entryPath = Path.Combine(directory.FullName, $&quot;{index++:D3}.BIN&quot;);&#xA;                    var entryData = reader.ReadBytes(entry.Length);&#xA;&#xA;                    File.WriteAllBytes(entryPath, entryData);&#xA;                }&#xA;            }&#xA;        }&#xA;    }&#xA;&#xA;    public struct Entry&#xA;    {&#xA;        public readonly ushort Length;&#xA;        public readonly uint Position;&#xA;&#xA;        public Entry([NotNull] BinaryReader reader)&#xA;        {&#xA;            if (reader == null)&#xA;                throw new ArgumentNullException(nameof(reader));&#xA;&#xA;            Length = reader.ReadUInt16();&#xA;            Position = reader.ReadUInt32();&#xA;        }&#xA;&#xA;        public override string ToString()&#xA;        {&#xA;            return $&quot;{nameof(Position)}: {Position}, {nameof(Length)}: {Length}&quot;;&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h1&gt;Unpacking the executable&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/x6eGQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/x6eGQ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use the following to unpack it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/joncampbell123/dosbox-x&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/joncampbell123/dosbox-x&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://unp.bencastricum.nl/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://unp.bencastricum.nl/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the game won't run when you extract it, complaining that the EXE is corrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And I guess that with the free version of IDA decompiler, you will be able to see many interesting strings in it.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;UIF.DAT images&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Each of the files in it are images as some strings in EXE tells, they probably use some form of RLE encoding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at their header, I think the following could be valid:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cFB06.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cFB06.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the palette is 768 bytes after image data highlighted in yellow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck for your game!&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2019-08-14T19:30:48.390" LastActivityDate="2019-08-14T19:30:48.390" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12029" PostTypeId="2" ParentId="12018" CreationDate="2019-08-14T00:56:54.503" Score="33" Body="&lt;p&gt;&lt;em&gt;Harry Potter and the Half-Blood Prince&lt;/em&gt; is another work whose source code is entirely available for public view, &lt;em&gt;yet it's definitely under copyright and you will get in big trouble for commercially copying it&lt;/em&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making it public and releasing it from copyright are &lt;em&gt;two separate things&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to clone the IBM BIOS, they had to write totally new software &lt;em&gt;that did the same things&lt;/em&gt;, but prove in court that the writers of this software did not lift or copy any part of the original.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This process is covered in detail in the first few episodes of &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(TV_series)&quot; rel=&quot;noreferrer&quot;&gt;Halt and Catch Fire&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="447" LastEditDate="2019-08-14T11:21:57.337" LastActivityDate="2019-08-14T11:21:57.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12030" PostTypeId="2" ParentId="12027" CreationDate="2019-08-14T01:04:51.123" Score="49" Body="&lt;p&gt;No, it didn't.  MS-DOS never bothered to zero out allocated memory, as there was no security reason to do so like there is in a multi-user operating system.  It was up to the C runtime startup code to zero out the BSS segment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, from the Borland C++ 3.1 startup code:  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;       Reset uninitialized data area&#xA;&#xA;                xor     ax, ax&#xA;                mov     es, cs:DGROUP@@&#xA;                mov     di, offset DGROUP: bdata@&#xA;                mov     cx, offset DGROUP: edata@&#xA;                sub     cx, di&#xA;                cld&#xA;                rep     stosb&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;_BSS            SEGMENT&#xA;bdata@          label   byte&#xA;                ENDS&#xA;&#xA;_BSSEND         SEGMENT&#xA;edata@          label   byte&#xA;                ENDS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2019-08-14T14:49:52.353" LastActivityDate="2019-08-14T14:49:52.353" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12031" PostTypeId="2" ParentId="12018" CreationDate="2019-08-14T02:20:28.590" Score="70" Body="&lt;p&gt;When other manufacturers attempted to copy the BIOS from the source listings, &lt;a href=&quot;https://books.google.com/books?id=gy4EAAAAMBAJ&amp;amp;lpg=PA15&amp;amp;pg=PA15#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;IBM sued them for copyright violation and won.&lt;/a&gt;  Besides, even without the listings, anyone would have been able to dump and disassemble the BIOS.  Publishing the source code made it harder to argue that the engineers hadn’t seen or used it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What took IBM by surprise was the strategy of a company called Phoenix Technologies in 1984.  They had one team of engineers look at the BIOS source and write a complete specification of what each part of it did, and a second team, who had never seen IBM’s copyrighted code, re-implement the BIOS from the spec in a “clean room.”  This stood up in court and became the missing piece that allowed other companies to make 100% IBM-compatible PCs.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastActivityDate="2019-08-14T02:20:28.590" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12034" PostTypeId="2" ParentId="12018" CreationDate="2019-08-14T07:47:01.867" Score="10" Body="&lt;p&gt;When IBM published this source code, it was to make it easier for other companies to make peripherals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They wanted there to be a lot of cards to could be slotted into the PC and just work.  Having all these cards available would increase the marked for the PC itself.&lt;/p&gt;&#xA;" OwnerUserId="428" LastActivityDate="2019-08-14T07:47:01.867" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12035" PostTypeId="1" AcceptedAnswerId="12070" CreationDate="2019-08-14T12:41:40.867" Score="11" ViewCount="747" Body="&lt;p&gt;The Amiga custom chip set, in its ECS and AGA versions, seems to contain some registers for what is called an &quot;Ultra-HighRes/DUAL&quot; mode: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DFF078  SPRHDAT     W   Ext. logic UHRES sprite pointer and data identifier&#xA;DFF07A  BPLHDAT     W   Ext. logic UHRES bit plane identifier&#xA;DFF1D0  SPRHSTRT    W   UHRES sprite vertical start&#xA;DFF1D2  SPRHSTOP    W   UHRES sprite vertical stop&#xA;DFF1D4  BPLHSTRT    W   UHRES bit plane vertical start&#xA;DFF1D6  BPLHSTOP    W   UHRES bit plane vertical stop&#xA;DFF1D8  HHPOSW      W   DUAL mode hires H beam counter write&#xA;DFF1DA  HHPOSR      R   DUAL mode hires H beam counter read&#xA;DFF1DC  BEAMCON0    W   Beam counter control register (SHRES,UHRES,PAL)&#xA;DFF1E6  BPLHMOD     W   UHRES bit plane modulo&#xA;DFF1E8  SPRHPTH     W   UHRES sprite pointer (high 5 bits)&#xA;DFF1EA  SPRHPTL     W   UHRES sprite pointer (low 15 bits)&#xA;DFF1EC  BPLHPTH     W   VRam (UHRES) bitplane pointer (hi 5 bits)&#xA;DFF1EE  BPLHPTL     W   VRam (UHRES) bitplane pointer (lo 15 bits)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(list taken from this page: &lt;a href=&quot;http://amiga-dev.wikidot.com/information:hardware&quot; rel=&quot;noreferrer&quot;&gt;http://amiga-dev.wikidot.com/information:hardware&lt;/a&gt; ) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do remember that ECS added Super-HighRes mode (pixel duration of 35ns as opposed to the 70ns for HighRes and 140ns for Lowres), but I don't remember any mention of other modes, and, at least for the ECS chipset, I remember that using SuperHighRes mode already put quite a strain on my A500 Plus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notably, some of the registers's descriptions mention &quot;VRam&quot;, that is Video RAM (a kind of RAM that is double port, one of which is usually a serial high-speed port to fetch an entire row of bits). VRam were never supported on classic Amigas and indeed they were supposed to be used only in the never completed AAA chipset (Andrea, Linda, Monica, Mary).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;BEAMCOM0&lt;/code&gt; register also contains many flags related to this DUAL/Ultra-HighRes mode, and in one case a register description seems to imply that DAUL mode may actually be meant to allow using two displays (so DUAL is different from Ultra-HighRes?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;What is all of this? What is Ultra-HighRes, what is the DUAL mode? Are they the same mode or two different modes?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strike&gt;Is the Ultra-HighRes mode related to Hedley (aka Commodore A2024 monitor) mode?&lt;/strike&gt; See Valentino Milazzo's answer below, plus, the A2024 also works under OCS so it clearly isn't connected.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the allegedly external circuitry that would have been needed to interface with VRam chips? What is its purpose? Is it just interface logic or does it do something more?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In the case of ECS, which does not have Fast Page Mode and 32 bit data access mode, does the chipset have enough bandwidth available to handle mode that supposedly - by its name - would move even more (twice?) the pixel of Super-HighRes?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Can someone come up with an hypothesis of the timings (pixel clock/period, horizontal clock) and resolution this mode would have provided, from the registers' descriptions in the URL above?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Addendum: the &lt;a href=&quot;https://web.archive.org/web/20090824015340/http://www.thule.no/haynie/research/nyx/docs/AAA.pdf&quot; rel=&quot;noreferrer&quot;&gt;internal memo describing the AAA chipset&lt;/a&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;AAA is designed to be largely register compatible with the ECS chip set. Most of the&#xA;  RGA registers from ECS are supported. &lt;strong&gt;The ECS “Ultra hires” registers have been eliminated, as&#xA;  they were never supported in actual practice.&lt;/strong&gt; Some other display-generation details of ECS are&#xA;  no longer required or supported in AAA.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So it looks like this feature has ben around since ECS.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2019-08-18T10:38:33.217" LastActivityDate="2019-08-18T10:38:33.217" Title="What are the Ultra-Highres registers in ECS and AGA for?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;video&gt;&lt;mos-agnus&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12036" PostTypeId="2" ParentId="12018" CreationDate="2019-08-14T13:04:38.613" Score="0" Body="&lt;p&gt;I find the position of this decision as incompetence rather interesting. This is presuming that every business is only, ever, out to make money and/or monopolize the market. I realise this is common place in a capitalist system, but don't like to assume that it is prevalent EVERYWHERE. Perhaps they just provided the source code to be nice, or to advance personal computing faster than they as a company could do themselves.&lt;/p&gt;&#xA;" OwnerUserId="14968" LastActivityDate="2019-08-14T13:04:38.613" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12037" PostTypeId="2" ParentId="12025" CreationDate="2019-08-14T14:36:47.347" Score="5" Body="&lt;p&gt;The routines are documented in the Programmers Aid #1 manual&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/programmers-aid-1/page/n81&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/programmers-aid-1/page/n81&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are basically the same as the ones in the Applesoft ROM. They might use different zero page locations and won't handle floating point numbers but they are the same algorithms.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2019-08-14T14:36:47.347" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12038" PostTypeId="1" CreationDate="2019-08-14T14:48:21.333" Score="50" ViewCount="6923" Body="&lt;p&gt;I have access to several meters of manuals of various sorts around CP/M on PCs and various bits on mainframes. These are earmarked to go after decades of &quot;cannot dump that&quot; heartbleed. Most are originals, but also many copies. I helped to put some on eBay but nobody wanted them. What should I do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a postal address to which we can send several parcels?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Thank you for the suggestions. The problems with those have also been raised. The folks with these kinds of manuals in their attic/cellar are unlikely to happily invest a couple of 1000s of $/€/whatever to get those digitized. Skimming through those manuals one easily recognizes the cores/seeds of today's technologies, also the introductions are nice. But most striking are the touch and feel of some excellent quality folders, typically. Some come with leather. Others just just feel rock solid with nice colors and have wonderful separators for the chapters throwing your antique favorite technical keywords at you. You don't kill them, being digital or not. And I am afraid I would be in trouble for putting them up as  a piece of craft and decoration at our place - but that is what they (often) are - both your mind and for your physical habitat.&lt;/p&gt;&#xA;" OwnerUserId="14971" LastEditorUserId="14971" LastEditDate="2019-08-19T07:50:46.240" LastActivityDate="2019-09-15T01:47:51.100" Title="What should we do with manuals from the 80s?" Tags="&lt;documentation&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12039" PostTypeId="2" ParentId="12004" CreationDate="2019-08-14T14:56:52.560" Score="11" Body="&lt;p&gt;While it is officially documented as &quot;a prefix which performs no function&quot;, &lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?70386-I-found-the-SAVEALL-opcode&amp;amp;p=576206#post576206&quot; rel=&quot;noreferrer&quot;&gt;a thread on the vcfed.org forums&lt;/a&gt; has discovered it is an ICE-mode prefix that forces the instruction's memory access to be performed using the normal bus pins instead of the extra pins normally used by the bond-out version of the 286.&lt;/p&gt;&#xA;" OwnerUserId="14972" LastActivityDate="2019-08-14T14:56:52.560" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12040" PostTypeId="2" ParentId="12038" CreationDate="2019-08-14T15:06:12.147" Score="45" Body="&lt;p&gt;You could have a look on &lt;a href=&quot;http://bitsavers.org&quot; rel=&quot;noreferrer&quot;&gt;bitsavers.org&lt;/a&gt;. They catalogue and preserve computer manuals. If you have any unique manuals which are not yet catalogued on there, I am sure they would accept a scanned copy, but not in the form of dead trees.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="7037" LastEditDate="2019-08-15T17:40:16.860" LastActivityDate="2019-08-15T17:40:16.860" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12041" PostTypeId="2" ParentId="12035" CreationDate="2019-08-14T15:33:35.543" Score="1" Body="&lt;p&gt;The ECS chipset appears to have had support for a new UHRES mode added, but it was never completed. It seems to be related to the Ranger chipset developed by Jay Miner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea seems to have been to move display fetch off Agnus to a separate chip with its own VRAM, which was never completed. That would allow greater bandwidth to video memory, one of the major limitations of the Amiga architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that Agnus would still generate video timing and perhaps even addresses for video fetch, but the actual fetch cycles would be done by a different chip. Perhaps the DUAL mode referenced would allow OCS Amiga modes to be combined with this new mode. It's not clear how the blitter and copper would have interacted with it, if at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In principal it's a good idea. The Amiga OCS chipset suffers from a limited amount of memory bandwith available for the CPU, screen refresh, copper, audio, blitter, disk DMA and more to all use. A separate dedicated VRAM with its own bus would have freed up a huge number of cycles for the CPU, and could have potentially offered high resolutions and large numbers of sprites or a very fast blitter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end it seemed that VRAM was too expensive and the idea was dropped by Commodore, releasing the ECS chipset with the registers and probably some of the necessary hardware implemented but without the extra chip or VRAM.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2019-08-15T10:09:02.007" LastActivityDate="2019-08-15T10:09:02.007" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12043" PostTypeId="2" ParentId="12018" CreationDate="2019-08-14T17:04:07.700" Score="8" Body="&lt;p&gt;I can assure you it was not altruism! In fact, it made it darn hard to copy legally (see Eagle Computer) and get away with it. Phoenix had to prove that none of the people who wrote the code EVER read the IBM published code. And I can tell you that nearly all of us in that era had. So while it seems simple, it was a great way to freeze the competition. They had to wait until there were enough assembler programmers on the 808x series who resisted temptation. Copyright law specifies about 60% commonality I think. So it was harder than it looked. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eagle did rewrite theirs under duress, and while it was a darn good copy, the rest of the industry was already moving on to Phoenix.  IBM pulled a subtle, well executed strategy. Sadly they blew it in the MCA debacle, but hey, all of the companies at that time made a few of those! &lt;/p&gt;&#xA;" OwnerUserId="14975" LastEditorUserId="7946" LastEditDate="2019-08-14T17:36:05.203" LastActivityDate="2019-08-14T17:36:05.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12044" PostTypeId="2" ParentId="12018" CreationDate="2019-08-14T20:47:03.037" Score="6" Body="&lt;p&gt;You are working from the rather popular assumption that hogging a brook will be preferable to tapping a river.  The comparatively open nature of the IBM PC internals created a market that would not have existed otherwise, and IBM's profits from that market exceeded their expectations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now make no mistake: this was not particularly unprecedented.  CP/M had example BIOS code available, my own NASCOM II came with a complete assembly listing of its system ROM, and I have the same for an Atari 400 here in an official Atari binder.  It was quite customary for home computers to have schematics and system ROM listings readily available, and the market was sort of split here.  In comparison, it was a bit unusual that the typical Microsoft ROM Basic that was also included with a number of home computers never came with the assembly listings or even API documentations and was a black box.&lt;/p&gt;&#xA;" OwnerDisplayName="user14981" LastActivityDate="2019-08-14T20:47:03.037" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12045" PostTypeId="2" ParentId="12038" CreationDate="2019-08-14T21:30:52.877" Score="10" Body="&lt;p&gt;I'd get a nice sheetfed document scanner, &lt;a href=&quot;https://forum.diybookscanner.org/viewtopic.php?t=1278&quot; rel=&quot;nofollow noreferrer&quot;&gt;cut off the spines&lt;/a&gt;, and feed in the manuals one at a time. Then upload to &lt;a href=&quot;http://archive.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;archive.org&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-08-15T18:40:16.333" LastActivityDate="2019-08-15T18:40:16.333" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12046" PostTypeId="2" ParentId="12038" CreationDate="2019-08-14T21:50:44.623" Score="32" Body="&lt;p&gt;First, check if the documents aren't already present on Bitsavers and Archive.org.&#xA;If you do have something unique that hasn't been scanned yet, you can maybe try the new initiative &lt;a href=&quot;https://twitter.com/textfiles/status/1161700352045064192&quot; rel=&quot;noreferrer&quot;&gt;announced today&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/textfiles&quot; rel=&quot;noreferrer&quot;&gt;Jason Scott aka @texfiles&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Announcing SCANTASTIX, a project that  &lt;a href=&quot;https://twitter.com/KevinSavetz&quot; rel=&quot;noreferrer&quot;&gt;@KevinSavetz&lt;/a&gt;  and I have&#xA;whipped up to go after a class of what I call &amp;quot;Unadvocated Materials&amp;quot;&#xA;and can be summarized as &amp;quot;If you have a few extra bucks, you can&#xA;ensure neat stuff gets scanned and put on the Internet Archive&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;p&gt;If you saw how we did the Ted Nelson Junk Mail project, this would be&#xA;similar. We take boxes of material, loose or bound, and scan it into&#xA;digital form and store away the originals.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Alternatively, you can try a service like &lt;a href=&quot;http://1dollarscan.com/pricing.php&quot; rel=&quot;noreferrer&quot;&gt;1dollarscan.com&lt;/a&gt; (there may be others)&lt;/p&gt;&#xA;" OwnerUserId="3783" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-14T21:50:44.623" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12047" PostTypeId="2" ParentId="9367" CreationDate="2019-08-14T21:59:00.983" Score="6" Body="&lt;p&gt;There's reason to believe that this is a qemu bug (actually a problem caused by the configuration of SeaBIOS in qemu 3.0 and 3.1). If this is the case, the CD driver will work fine in qemu 2.12.1 or older (SeaBIOS will be 1.11.1 or older), or qemu 4.0.0 or newer (SeaBIOS will be 1.12.1 or newer). A qemu displaying a SeaBIOS version of 1.11.2 or 1.12.0 will not work.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2019-08-14T21:59:00.983" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12048" PostTypeId="1" CreationDate="2019-08-14T22:07:27.753" Score="28" ViewCount="3815" Body="&lt;p&gt;Browsing &lt;a href=&quot;https://github.com/microsoft/MS-DOS&quot; rel=&quot;noreferrer&quot;&gt;MS-DOS sources on GitHub&lt;/a&gt;, I often see  mentions of XENIX:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/DOSSYM.ASM&quot; rel=&quot;noreferrer&quot;&gt;DOSSYM.ASM&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; XENIX calls all return error codes through AX.  If an error occurred then the    &#xA;; carry bit will be set and the error code is in AX.  If no error occurred then    &#xA;; the carry bit is reset and AX contains returned info.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/ALLOC.ASM&quot; rel=&quot;noreferrer&quot;&gt;ALLOC.ASM&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;&#xA;; xenix memory calls for MSDOS&#xA;;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/MSHEAD.ASM&quot; rel=&quot;noreferrer&quot;&gt;MSHEAD.ASM&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; 1.40 06/15/82 Tree structured directories.  XENIX Path Parser MKDIR CHDIR&#xA;;               RMDIR Xenix calls&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are even files called &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/XENIX.ASM&quot; rel=&quot;noreferrer&quot;&gt;XENIX.ASM&lt;/a&gt; and &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/XENIX2.ASM&quot; rel=&quot;noreferrer&quot;&gt;XENIX2.ASM&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the story here? Did XENIX and DOS share source code? &lt;/p&gt;&#xA;" OwnerUserId="3783" LastActivityDate="2019-08-19T12:48:01.910" Title="What's the relationship betweeen MS-DOS and XENIX?" Tags="&lt;ms-dos&gt;&lt;microsoft&gt;&lt;xenix&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12050" PostTypeId="2" ParentId="12048" CreationDate="2019-08-14T23:19:24.893" Score="15" Body="&lt;p&gt;The source code files in question appear to have the implementation for the MS-DOS 2.0 'XENIX-style' APIs to open/close/etc. files without a File Control Block used in MS-DOS 1.0 and CP/M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I strongly suspect the authors used 'XENIX' as a shorthand for 'those new-fangled IO methods'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays, of course, everyone uses the 'new-fangled' APIs and the FCB APIs have long since been removed.&lt;/p&gt;&#xA;" OwnerUserId="11046" LastActivityDate="2019-08-14T23:19:24.893" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="12051" PostTypeId="2" ParentId="12048" CreationDate="2019-08-15T00:10:35.380" Score="44" Body="&lt;p&gt;They didn't share any source, no. However, the &lt;code&gt;TITLE&lt;/code&gt; directive twenty lines or so down from the top in both &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/XENIX.ASM&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;XENIX.ASM&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/XENIX2.ASM&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;XENIX2.ASM&lt;/code&gt;&lt;/a&gt; explains what this is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;TITLE   XENIX - IO system to mimic UNIX&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Pre-2.x MS-DOS was somewhere between heavily inspired by CP/M and a complete rip-off of it. But with 2.x they decided to go in a quite different direction, and one of the huge differences was using directories and subdirectories, rather than &lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M#File_system&quot; rel=&quot;noreferrer&quot;&gt;user areas&lt;/a&gt;, to make it easier to organize files on disks expected to hold hundreds or even thousands of files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the CP/M API was entirely unsuited to this. The main problem was that CP/M (and MS-DOS 1.0) used &lt;a href=&quot;https://en.wikipedia.org/wiki/File_Control_Block&quot; rel=&quot;noreferrer&quot;&gt;file control blocks&lt;/a&gt; in the memory space of the program to hold information about files and their current state; changing the format of these was a breaking API change. (They couldn't be extended because older programs assumed they were a specific length, and nor could the &quot;public&quot; fields be changed without breaking older programs' expectations.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather than just randomly rolling their own new API the MS-DOS 2.x developers looked elsewhere for inspiration, in this case at Unix via its derivative Xenix, a port of Unix to Intel processors done by Microsoft. Since the new API was modeled on the Unix/Xenix file I/O API, these new API calls were called &quot;XENIX calls.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As well as providing an API that could handle the extra information about directories, this also changed the API to use &quot;file handles&quot; referencing data structures owned by DOS, rather than in the program's memory space, thus allowing these structures to be further changed in the future without breaking compatibility with older software. (APIs that had previously been direct manipulation of the FCB by the program now became functions that took and returned file handles, with the OS updating the data structures it owned.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-08-19T12:48:01.910" LastActivityDate="2019-08-19T12:48:01.910" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="12052" PostTypeId="1" AcceptedAnswerId="12071" CreationDate="2019-08-15T05:56:28.267" Score="17" ViewCount="960" Body="&lt;p&gt;There has been several implementations of &lt;a href=&quot;https://en.wikipedia.org/wiki/Forth_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;Forth&lt;/a&gt; that were &lt;a href=&quot;https://www.c64-wiki.com/wiki/Forth&quot; rel=&quot;noreferrer&quot;&gt;running on, and targeting, the C64&lt;/a&gt;. Were there any commercial software releases (not throw-away hobby projects or in-house utilities) that were implemented in such a Forth system? The more widespread the better; my favorite would be if there was a released game.&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2020-07-25T11:29:42.313" Title="Commercial C64 software implemented in Forth?" Tags="&lt;commodore-64&gt;&lt;forth&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12053" PostTypeId="2" ParentId="8835" CreationDate="2019-08-15T07:34:31.463" Score="8" Body="&lt;p&gt;RISC OS Pico on the Raspberry Pi boots to BASIC. See &lt;a href=&quot;https://www.riscosopen.org/content/downloads/raspberry-pi&quot; rel=&quot;noreferrer&quot;&gt;https://www.riscosopen.org/content/downloads/raspberry-pi&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;full fat&quot; RISC OS could also be made to boot to BASIC using *CONFIGURE commands like you can with the Archimedes and RISC PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that riscosopen.org do not list the RasPi4 as being compatible (and RISC OS Pico has a smaller compatibility list than the &quot;full fat&quot; version).&lt;/p&gt;&#xA;" OwnerUserId="14950" LastActivityDate="2019-08-15T07:34:31.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12054" PostTypeId="2" ParentId="12048" CreationDate="2019-08-15T13:24:29.793" Score="10" Body="&lt;p&gt;The &lt;em&gt;major&lt;/em&gt; relationship between MS-DOS and Xenix is that both were Microsoft products. MS-DOS was originally 86-DOS, from Seattle Computer Products, and was licensed by MS to develop PC-DOS. Xenix was a version of Unix which Microsoft licensed from Bell Labs (which was legally prohibited from selling software to consumers) and re-sold.&lt;/p&gt;&#xA;" OwnerUserId="1921" LastActivityDate="2019-08-15T13:24:29.793" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12055" PostTypeId="2" ParentId="12035" CreationDate="2019-08-15T14:04:40.883" Score="1" Body="&lt;p&gt;I think you are not taking into account both of the new video modes supported by the Amiga ECS chipset using the higher dot clock:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Super-Hires Mode: 1280 pixel horizontal resolution, interlaced or non-interlaced lines, with a 15.7 kHz horizontal frequency.&lt;/li&gt;&#xA;&lt;li&gt;Productivity Mode: 640 pixel horizontal resolution (same as Hires), 480 lines, with a 31 kHz horizontal frequency.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Because of the different scan mode/# of lines for Productivity Mode, additional &quot;DUAL&quot; registers were needed to fully support this mode. The UHRES registers just applied to the higher dot clock; thus, they worked for either Super-Hires or Productivity. &lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-08-15T20:43:37.053" LastActivityDate="2019-08-15T20:43:37.053" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12056" PostTypeId="1" AcceptedAnswerId="12060" CreationDate="2019-08-15T16:01:29.337" Score="26" ViewCount="4555" Body="&lt;p&gt;The Commodore 128 had 2 CPUs, 2 video graphic chips, and 2 I/O systems/chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It had 3 modes: Commodore 64 mode, Commodore 128 mode and CP/M. The first shared one of each CPU/chip, the CP/M mode the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was it the original intention to combine them? Or was it intended the way it was launched (two computers, or three in one case and that's it, simly said). &#xA;I wonder if they could get more out of all those peripherals.&lt;/p&gt;&#xA;" OwnerUserId="7037" LastEditorUserId="3297" LastEditDate="2019-10-31T08:11:19.567" LastActivityDate="2019-10-31T08:11:19.567" Title="What was the intention with the Commodore 128?" Tags="&lt;cp-m&gt;&lt;commodore-128&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12057" PostTypeId="2" ParentId="12056" CreationDate="2019-08-15T16:14:23.840" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was it the original intention to combine them? Or was it intended the way it was launched (two computers, or three in one case and that's it, simly said).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Basically yes. It was a sounding approach to get more revenue from an, at that time already ageing, 8 bit concept without investing much, while running a small risk of failure, as there was no risk of alienating existing customers&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;New Customers could see it as a better 64 they always wanted to buy.&lt;/li&gt;&#xA;&lt;li&gt;Existing C64 customers could see an upgrade path without loosing all investment (read games) thy had spend.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Maybe most important&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Both got offered a more semi professional, output related usage.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Especially the later was important to bind customers growing out from playing with a (classic) home computer into every day productivity related computer use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite all the work dedicated users have done, the C64 wasn't a real replacement on for professional PET series. Mostly due the lack of a good keyboard and an 80 character display. The 128 did offer both, and with CP/M as OS it could tap a great amount of existing productivity software - from word processing to databases and much more. While CP/M had as well past it's peak, it was still considered a good choice. Neither the PC nor DOS was as all mighty as it became a few years later.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I wonder if they could get more out of all those peripherals.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really as the 128 was for most part just a combination of existing enhancements for the C64 - adjusted for better integration, not anything really new.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-08-15T16:51:00.813" LastActivityDate="2019-08-15T16:51:00.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12058" PostTypeId="2" ParentId="12056" CreationDate="2019-08-15T16:15:01.703" Score="9" Body="&lt;p&gt;The original intention was basically to have the functionality of two separate computers: a 6502-based system running Commodore's OS (with some features added beyond what the Commodore 64 offered, such as 80-column display and more memory) and a Z80-based system running CP/M. (&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/1226/7208&quot;&gt;These could not be used at the same time.&lt;/a&gt;) This is obviously cheaper than having two separate machines for the same functionality, since they can share a lot of hardware. It may or may not be more convenient depending on whether you actually wanted to use them at the same time, how much space you had on your desk, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a distance it sounds like a good idea to try to use the CPUs and other dedicated hardware together, but in practice it's far more complex than is worthwhile. Consider that they shared the same memory subsystem and co-ordinating two CPUs sharing memory would have required both extra, fairly complex hardware, significant software changes (likely to both operating systems), and would probably have slowed memory access unless they added more or faster memory, either of which would have increased the cost. (If you want to get an idea of the complexities involved in even making both able to use the same memory and video display, have a look at the &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2361/7208&quot;&gt;answers to this question&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, there was always at least one more CPU, another 6510 in the disk drive. (That was true from the PET systems onward.) That, too, is dedicated to its task and not shared with other parts of the system.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-08-15T17:17:55.107" LastActivityDate="2019-08-15T17:17:55.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12059" PostTypeId="2" ParentId="12056" CreationDate="2019-08-15T16:17:13.607" Score="31" Body="&lt;p&gt;The Commodore 128 was intended to be a fully-compatible, more professional, upgrade to the popular Commodore 64. The marketing called for addressing the most widely criticized shortcomings of the C64 that made it unsuitable in competing with more &quot;professional&quot;/business-oriented machines like the Apple //e and //c and the IBM clones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C64 compatibility was essential. Additionally, the most requested features included:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;80 column text mode for business/productivity applications. This necessitated two video chips since the VDC provided 80 column mode while the VIC-II provided C64 compatibility.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;More addressable memory and CPU performance. This resulted in the C128 MMU and the two distinct operating modes for C64 and C128, which have different memory maps, different firmware, and allow different CPU clock speeds (1 MHz or 2 MHz).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Full C64 compatibility also implied working with the C64's Z80 add-on card to support CP/M. &lt;a href=&quot;https://www.reddit.com/r/c128/comments/682da4/c128_ama_from_bil_herd/&quot; rel=&quot;noreferrer&quot;&gt;According to designer Bil Herd&lt;/a&gt;, it was not feasible to get this card working with the C128 because of the cards many timing hacks and power supply issues. That necessitated the second Z80 CPU in the C128 to support CP/M.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Improved floppy disk performance and capacity. This necessitated the additional &quot;Burst&quot; serial port mode and 1571 floppy drive upgrade, which also has a second mode to emulate the 1541.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You can see how &lt;em&gt;the above features are all specifically called out&lt;/em&gt; in the advertising for the C128, pictured below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the added hardware basically came from the designers meeting the marketing demands for the machine. It was also done in a rush, as was the case with most Commodore 8-bit machines. So they used the parts that mostly already existed, rather than taking more time to develop a &quot;VIC-III&quot; to support 80 columns and higher resolution, for example. The MMU was the only newly developed part specifically for the C128. The rest of the new stuff was firmware and peripherals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VGKhD.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VGKhD.jpg&quot; alt=&quot;C128 ad&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-08-16T15:59:50.420" LastActivityDate="2019-08-16T15:59:50.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12060" PostTypeId="2" ParentId="12056" CreationDate="2019-08-15T16:57:48.000" Score="33" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was it the original intention to combine them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. The Z80 was not even part of the original design.  It was added out of necessity to meet a &quot;100% C64 compatible&quot; claim of the original marketing.  The C64 offered a CP/M expansion cartridge, which for some reason would not run correctly when inserted into early C128 prototypes.  So about 2 months into a 5-month design cycle, the engineers decided to throw a Z80 CPU chip right onto the C128 motherboard.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Additional Information&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wzMsgnnDIRE&quot; rel=&quot;noreferrer&quot;&gt;Commodore History Part 5 - The C128&lt;/a&gt; (YouTube video by The 8-Bit Guy)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2361/why-does-the-commodore-c128-perform-poorly-when-running-cp-m/&quot;&gt;Why does the Commodore C128 perform poorly when running CP/M?&lt;/a&gt; (detailed)&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2019-08-15T16:57:48.000" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12062" PostTypeId="2" ParentId="9187" CreationDate="2019-08-15T19:51:03.557" Score="0" Body="&lt;p&gt;The kind of circuitry needed/used to drive a tape recorder that only offers audio connections, for purposes of storing digital data from a computer or similar device ... IS A MODEM. Even if is not a (purpose built) telephone modem (which is usually implied when people speak of modems these days).&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2019-08-15T19:51:03.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12063" PostTypeId="2" ParentId="12048" CreationDate="2019-08-15T20:05:40.630" Score="6" Body="&lt;p&gt;I found the following  in the &lt;a href=&quot;https://www.pcjs.org/pubs/pc/reference/microsoft/mspl13/msdos/encyclopedia/section1/&quot; rel=&quot;noreferrer&quot;&gt;history section of &lt;em&gt;The MS-DOS Encyclopedia&lt;/em&gt;&lt;/a&gt; (around &quot;Version 2&quot;). Sorry for the long text but I could not find a good way to trim it without losing relevant details. Emphasis is mine.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In developing the first version, the programmers had had two primary&#xA;  goals: running translated CP/M-80 software and keeping MS-DOS small.&#xA;  They had neither the time nor the room to include more sophisticated&#xA;  features, such as those typical of Microsoft's UNIX-based multiuser,&#xA;  multitasking operating system, &lt;strong&gt;XENIX&lt;/strong&gt;. But when IBM informed Microsoft&#xA;  that the next major edition of the PC would be the Personal Computer&#xA;  XT with a 10- megabyte fixed disk, a larger, more powerful version of&#xA;  MS-DOS--one closer to the operating system Microsoft had envisioned&#xA;  from the start--became feasible.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;There were three particular areas that interested Microsoft: a new,&#xA;  hierarchical file system, installable device drivers, and some type of&#xA;  multitasking. Each of these features contributed to version 2.0, and&#xA;  together they represented a major change in MS-DOS while still&#xA;  maintaining compatibility with version 1.0.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[...]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Ultimately, it was a hierarchical file system that found its way into&#xA;  MS-DOS 2.0 and eventually convinced everyone that it was, indeed, the&#xA;  better and more flexible solution to the problem of supporting a fixed&#xA;  disk. The file system was logically consistent with the &lt;strong&gt;XENIX&lt;/strong&gt; file&#xA;  structure, yet physically consistent with the file access incorporated&#xA;  in versions 1.x, and was based on a root, or main, directory under&#xA;  which the user could create a system of subdirectories and sub-&#xA;  subdirectories to hold files. Each file in the system was identified&#xA;  by the directory path leading to it, and the number of subdirectories&#xA;  was limited only by the length of the pathname, which could not exceed&#xA;  64 characters.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In this file structure, all the subdirectories and the filename in a&#xA;  path were separated from one another by backslash characters, which&#xA;  represented the only anomaly in the XENIX/MS-DOS system of&#xA;  hierarchical files. XENIX used a forward slash as a separator, but&#xA;  versions 1.x of MS-DOS, borrowing from the tradition of DEC operating&#xA;  systems, already used the forward slash for switches in the command&#xA;  line, so Microsoft, at IBM's request, decided to use the backslash as&#xA;  the separator instead. Although the backslash character created no&#xA;  practical problems, except on keyboards that lacked a backslash, this&#xA;  decision did introduce inconsistency between MS-DOS and existing UNIX-&#xA;  like operating systems. And although Microsoft solved the keyboard&#xA;  problem by enabling the user to change the switch character from a&#xA;  slash to a hyphen, the solution itself created compatibility problems&#xA;  for people who wished to exchange batch files.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Another major change in the file-management system was related to the&#xA;  new directory structure: In order to fully exploit a hierarchical file&#xA;  system, Microsoft had to add a new way of calling file services.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Versions 1.x of MS-DOS used CP/M-like structures called file control&#xA;  blocks, or FCBs, to maintain compatibility with older CP/M-80&#xA;  programs. The FCBs contained all pertinent information about the size&#xA;  and location of a file but &lt;strong&gt;did not allow the user to specify a file in&#xA;  a different directory.&lt;/strong&gt; Therefore, version 2.0 of MS-DOS needed the&#xA;  added ability to access files by means of handles, or descriptors,&#xA;  that could operate across directory lines.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In this added step toward logical device independence, MS-DOS returned&#xA;  a handle whenever an MS-DOS program opened a file. All further&#xA;  interaction with the file involved only this handle. MS-DOS made all&#xA;  necessary adjustments to an internal structure--different from an FCB-&#xA;  -so that the program never had to deal directly with information about the file's location in memory. Furthermore, even if future versions of&#xA;  MS-DOS were to change the structure of the internal control units,&#xA;  program code would not need to be rewritten--the file handle would be&#xA;  the only referent needed, and this would not change.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Putting the internal control units under the supervision of MS-DOS and&#xA;  substituting handles for FCBs also made it possible for MS-DOS to&#xA;  redirect a program's input and output. A system function was provided&#xA;  that enabled MS-DOS to divert the reads or writes directed to one&#xA;  handle to the file or device assigned to another handle. This&#xA;  capability was used by COMMAND.COM to allow output from a file to be&#xA;  redirected to a device, such as a printer, or to be piped to another&#xA;  program. It also allowed system cleanup on program terminations.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[...]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;At IBM's request, version 2.0 of MS-DOS also possessed the&#xA;  undocumented ability to perform rudimentary background processing--an&#xA;  interim solution to a growing awareness of the potentials of&#xA;  multitasking.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Background print spooling was sufficient to meet the needs of most&#xA;  people in most situations, so the print spooler, PRINT.COM, was&#xA;  designed to run whenever MS-DOS had nothing else to do. When the&#xA;  parent application became active, PRINT.COM would be interrupted until&#xA;  the next lull. This type of background processing, though both limited&#xA;  and extremely complex, was exploited by a number of applications, such&#xA;  as SideKick.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To summarize:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;With bigger disks, hierarchical organization of files has become necessary and MS chose the directory tree used by XENIX.&lt;/li&gt;&#xA;&lt;li&gt;The MS-DOS 1.x FCB APIs could not deal with directories, so they added new APIs which operated on file paths (instead of just name.ext) and returned handles, again apparently inspired by XENIX. &lt;/li&gt;&#xA;&lt;li&gt;[conjecture] To properly support print spooler, the free-for-all memory management of DOS 1.x (&quot;all memory after the load address belongs to the user program&quot;) was no longer usable and DOS needed a way to track which memory area was used by which program. Apparently the memory management code was also borrowed from/inspired by XENIX.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="3783" LastEditorUserId="3783" LastEditDate="2019-08-15T20:13:02.723" LastActivityDate="2019-08-15T20:13:02.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12064" PostTypeId="2" ParentId="11969" CreationDate="2019-08-15T20:51:26.020" Score="2" Body="&lt;p&gt;From another good answer: &quot;Connecting it to a PC where you can manually set the drive parameters in BIOS is the fastest solution.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hint for finding such a PC: The facilities to manually set such parameters in the BIOS setup will often be present in mainboards that are equipped with ISA/EISA slots. Such boards still physically supported some ancient ISA/EISA connected ESDI or ST506 disk controller cards (these were actual disk controllers in function, not host adapters) that always needed such configuration to be done, so there was a reason to keep the options. A PCI or PCIe only board cannot support any such controllers, which is why the options were likely removed, ignoring first generation IDE drives that need the same support.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2019-08-15T20:51:26.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12065" PostTypeId="2" ParentId="12038" CreationDate="2019-08-16T01:29:01.577" Score="7" Body="&lt;p&gt;Your options seem to be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Donating them to a local or non-local museum&lt;/li&gt;&#xA;&lt;li&gt;Donating them to &lt;a href=&quot;https://archive.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Internet Archive&lt;/a&gt; or &lt;a href=&quot;https://bitsavers.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bitsavers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.diybookscanner.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Digitizing them yourself&lt;/a&gt; (Stack Exchange thread &lt;a href=&quot;https://lifehacks.stackexchange.com/questions/13487/how-would-one-digitize-a-thick-book-into-a-pdf-version-in-the-most-time-efficien&quot;&gt;here&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Posting to a special interest mailing list (perhaps &lt;a href=&quot;http://classiccmp.org/lists.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;CCTalk&lt;/a&gt; or one of the lists &lt;a href=&quot;http://planetmvs.com/links/news.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;))&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Additionally I'm sure that if you posted to the &lt;a href=&quot;https://sdf.org/?tutorials/bboard-tutorial&quot; rel=&quot;nofollow noreferrer&quot;&gt;SDF bulletin board&lt;/a&gt; or somewhere on the &lt;a href=&quot;http://tilde.club/~pfhawkins/othertildes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;tildes network&lt;/a&gt; that someone there would definitely be interested.&lt;/p&gt;&#xA;" OwnerUserId="8101" LastEditorUserId="8101" LastEditDate="2019-09-15T01:47:51.100" LastActivityDate="2019-09-15T01:47:51.100" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12067" PostTypeId="2" ParentId="8835" CreationDate="2019-08-16T12:33:33.070" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp11/rsts/V04/DEC-11-ORSUA-A-D_RSTS_UserMan_Sep72.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;RSTS-11&lt;/a&gt; on PDP-11, though itself written in MACRO-11, only supported user programming in &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp11/rsts/V04/DEC-11-ORBPA-A-D_BASIC-PLUS_LangMan_Oct72.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASIC-PLUS&lt;/a&gt;, which was a compatible extension to Dartmouth BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(RSTS-11 became RSTS/E with support for other programming languages and with runtime systems providing partial compatibility with other PDP-11 operating systems, but originally it was BASIC-only)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To the best of my knowledge, a single &quot;program&quot; (actually the resident runtime system) provided command interpreter and BASIC-PLUS compilation. But my experience is with RSTS/E, not RSTS-11.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-08-16T12:33:33.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12068" PostTypeId="1" AcceptedAnswerId="12069" CreationDate="2019-08-16T14:17:48.930" Score="5" ViewCount="926" Body="&lt;p&gt;Furthering my reading of MS BASIC and Woz's FP code and comparing the two leads to another question specific to the 6502...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I can see looking over the 6502 instruction guides, it appears that the cycle times for a given instruction like &lt;code&gt;ADC&lt;/code&gt; will vary depending on the addressing mode, but not on the decimal mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that to properly handle the V and N flags there's a few additional instructions that are needed if you want to address that issue. The &lt;a href=&quot;http://www.6502.org/tutorials/decimal_mode.html#3.2.3&quot; rel=&quot;nofollow noreferrer&quot;&gt;65C02 addresses these&lt;/a&gt; at the cost of a single cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(tweaked) But beyond that, is the &lt;em&gt;fundamental&lt;/em&gt; performance of BCD and non-BCD math the same? Do the algorithms for higher-level functionality, like multiplication, have to change in &lt;em&gt;basic&lt;/em&gt; form?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="3290" LastEditDate="2020-05-28T21:17:23.293" LastActivityDate="2020-05-28T21:17:23.293" Title="6502: is BCD *fundamentally* the same performance as non-BCD?" Tags="&lt;6502&gt;&lt;binary-coded-decimal&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12069" PostTypeId="2" ParentId="12068" CreationDate="2019-08-16T14:31:10.233" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But beyond that, is there any fundamental difference in performance?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;On a fundamental base: &lt;strong&gt;No&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In code looping and adjusting needs to take into account that digits are shifted by 4 instead of 1 and carry ripples at 10 instead of 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speed will be about the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ofc, it helps to have a BCD mode to do so. But not as much as one may assume. When doing FP most time is spend in looping and shifting code, arithmetic instructions account only for a small fraction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For over all speed it's way more important that the chosen number format can be handled efficient within the basic memory element. On byte orientated machines it helps if when 8 base 2 digits - or two base 10 (or base 16 like IBM /360s FP) - go into a byte. Base 4 would also work as well, but 8 or 32 would be less handy. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-08-16T15:38:21.070" LastActivityDate="2019-08-16T15:38:21.070" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12070" PostTypeId="2" ParentId="12035" CreationDate="2019-08-16T18:49:24.143" Score="4" Body="&lt;p&gt;I think the idea behind UHRES was to have VRAM connected to an indipendent DAC/CLUT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VRAM has a second data port where it outputs the content of a row.&#xA;This output was connected to the DAC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Agnus had the responsibility to configure the second data port at each scanline. For this reason, it emits, at the 2nd cycle, on the RGA bus a 078 (BPLHDAT) and on the address bus the content of BPLHPT*.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some external circuitry monitors the RGA bus and when detects the 078 value, it samples the address bus and uses it to configure the VRAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same happens for the single UHRES Sprite.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DUAL seems related to having two video signals generated at the same time. One by Denise and one by the VRAM DAC. Since the VRAM display had arguably more lines than the Denise's one there was the need to generate more VRAM scanlines for each Denise scanlines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not related to the 2024 which had an internal frame buffer filled by sampling the Amiga digital video output across 4 frames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As explained this mode didn't use the Amiga chip ram address bus or the RGA bus to fetch the pixels. This was done through the VRAM second port. The  chip ram address bus or the RGA bus were needed only few cycles per scanlines just to configure the VRAM. No need for page mode or 32 bit bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vertical resolution is dependent from how the timers were configured. The horizontal resolution from the VRAM timing. Since this external circuitry was never been documented it is hard to know this horizontal resolution.&lt;/p&gt;&#xA;" OwnerUserId="124" LastEditorUserId="124" LastEditDate="2019-08-17T05:34:25.327" LastActivityDate="2019-08-17T05:34:25.327" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12071" PostTypeId="2" ParentId="12052" CreationDate="2019-08-16T19:29:28.830" Score="13" Body="&lt;p&gt;Amnesia (Electronic Arts) is probably the most famous one.  The King Edward Adventure Game system was just a wrapper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hard Hat Mack (Electronic Arts) copy-protection was written partially in Forth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Among educational titles, Davidson and Associates published a few, like Alge-Blaster and Read 'N Roll.&lt;/p&gt;&#xA;" OwnerUserId="4476" LastActivityDate="2019-08-16T19:29:28.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12072" PostTypeId="2" ParentId="12068" CreationDate="2019-08-16T19:56:30.257" Score="0" Body="&lt;p&gt;Yes, there is a performance difference if you need to compute with numbers much more than a few digits or bits in size.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, you can add 2 numbers in the range of 1 to a billion using 4 adds (3 with carry) in binary, but you will need 5 adds (4 with carry) using BCD, for the same range of integer data inputs and results.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2019-08-16T19:56:30.257" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12073" PostTypeId="2" ParentId="12068" CreationDate="2019-08-16T21:05:29.993" Score="1" Body="&lt;p&gt;Yes, there are differences in the algorithms used for BCD compared with binary arithmetic.  The code for BCD is more complex, so larger and probably slower, if implemented with roughly equivalent skill and tradeoff between size and speed.  That's even assuming there is not also a basic difference in execution speed, which there also is on the 65C02 (and on most non-65xx family CPUs, which tend to use a separate &quot;BCD adjust&quot; post-processing instruction rather than a mode flag).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most basic difference is that with binary arithmetic, you only need to decide whether to perform a sub-operation or not, and then move on to the next binary place either way.  With BCD, you need to perform the sub-operation between zero and nine times (inclusive), and then move on to the next digit which occupies the upper half of the byte, so a reasonable strategy is to repeat the inner loop specialised for that high digit instead of just looping over the bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence the average number of sub-operations in binary is 0.5 per bit, or 4 per byte - but in BCD it is 4.5 per digit, or 9 per byte.  Assuming each sub-operation (addition for multiplication, compare-subtract for division and square-root) has the same cost, BCD will therefore be less than half the speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to reduce the number and complexity of these operations somewhat, for both binary and BCD modes, but this requires additional memory which is often not available in 6502-based machines.  A modern design can of course make use of a large RAM or ROM set up as a lookup table, possibly through a banking arrangement.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2019-08-17T20:48:44.323" LastActivityDate="2019-08-17T20:48:44.323" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12074" PostTypeId="2" ParentId="8835" CreationDate="2019-08-16T21:06:49.273" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Pick_operating_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pick operating system&lt;/a&gt; is mostly accessed through its dialect of BASIC, which was adopted in 1973. Nowadays you can run it as a guest OS on Windows.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Pick operating system consists of a database, dictionary, query language, procedural language (PROC), peripheral management, multi-user management and a compiled BASIC Programming language&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-08-16T21:06:49.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12075" PostTypeId="2" ParentId="5809" CreationDate="2019-08-16T21:46:17.180" Score="1" Body="&lt;p&gt;Some background:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TVs of the area before video recorders, satellite receivers etc became common and worked best with a baseband video connection, did have little reason to offer such a connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neither would such a connection have been trivial to implement or retrofit. TVs of that era were very commonly of a so called live chassis design, which made it very difficult to provide for any DC or AF coupled external connections at all (anyone touching a wire connected to such a port would stand a high chance of getting bit!).&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2019-08-16T21:46:17.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12076" PostTypeId="2" ParentId="5809" CreationDate="2019-08-16T22:12:44.060" Score="1" Body="&lt;p&gt;I still have a small CRT TV in my house (belongs to my landlord) which has a composite video input on the front (which can still be used with a Raspberry Pi), and a SCART socket on the back.  The latter is used with a digital TV receiver, as the analogue TV signal has long since been switched off.  For context, this is in Finland.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the UK, I remember the Microvitec Cub monitor being nearly ubiquitous in schools throughout the 1980s and, to a lesser extent, into the 1990s.  This had an RGB component input in PAL timings, and essentially went with the equally ubiquitous BBC Micro.  At home we also had a BBC Micro, and a somewhat better RGB monitor to go with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you didn't have an RGB monitor, or your computer didn't have a component RGB output with a sensible cable available (I'm looking at you, ZX Spectrum family), the usual solution was a UHF modulator and a Y-splitter to incorporate the rooftop antenna signal.  The TV then had to have a spare channel tuned to the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The major exception to this rule was the IBM PC clone family, which had 9-pin CGA/EGA and then the now familiar 15-pin VGA outputs.  The latter was adopted by later home computers such as the Acorn RiscPC, while the Acorn-built BBC A3000 of 1989 seems to have had both a composite video and a 9-pin EGA output.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-08-16T22:12:44.060" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12077" PostTypeId="1" CreationDate="2019-08-17T02:03:32.547" Score="2" ViewCount="579" Body="&lt;p&gt;I'm trying to get &lt;a href=&quot;https://codegolf.stackexchange.com/q/48476/19365&quot;&gt;Programming Languages Through The Years&lt;/a&gt; over on the Code Golf site going again.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/Timeline_of_programming_languages&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia article&lt;/a&gt; that the challenge has been working from only lists &lt;a href=&quot;https://en.wikipedia.org/wiki/COMIT&quot; rel=&quot;nofollow noreferrer&quot;&gt;COMIT&lt;/a&gt; for 1961, and calling it a &quot;language that first became generally available in 1961&quot; seems to be stretching things a bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what other languages became available in 1961?&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2019-10-16T11:02:15.300" Title="What programming languages appeared in 1961?" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12078" PostTypeId="2" ParentId="12004" CreationDate="2019-08-17T08:54:12.933" Score="5" Body="&lt;p&gt;I've done an experiment to confirm what Stephen Kitt says in his answer. I've tried some instructions on my AMD 286 system, using the boot sector-based playground given at the bottom of this answer (compilable with FASM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Namely, when I have &lt;code&gt;lock&lt;/code&gt; uncommented and &lt;code&gt;db 0xf1&lt;/code&gt; commented out (see the code after the &lt;code&gt;enterRing3&lt;/code&gt; label), my 286 system prints &lt;code&gt;#BP #GP&lt;/code&gt; (#BP for &lt;code&gt;int3&lt;/code&gt; and #GP for &lt;code&gt;LOCK ADD&lt;/code&gt;), which confirms that the &lt;code&gt;LOCK&lt;/code&gt; prefix is privileged on 80286. If I run the code with &lt;code&gt;lock&lt;/code&gt; commented out and &lt;code&gt;db 0xf1&lt;/code&gt; uncommented, I get the same result as when both prefixes are commented out, i.e. &lt;code&gt;#BP #DE&lt;/code&gt; (#BP for &lt;code&gt;int3&lt;/code&gt; and #DE for &lt;code&gt;DIV&lt;/code&gt;), which confirms that the &lt;code&gt;F1&lt;/code&gt; prefix is simply ignored instead of being equivalent to &lt;code&gt;LOCK&lt;/code&gt;, and also that it doesn't result in #UD (which is why I use division by zero instead of &lt;code&gt;UD2&lt;/code&gt; at the end).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The boot sector of the playground:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; BOOT_ADDR = 0x7c00&#xA; org BOOT_ADDR&#xA; use16&#xA;&#xA; CODE_SELECTOR_RING0     = code_descr_ring0 - gdt&#xA; CODE_SELECTOR_RING3     = (code_descr_ring3 - gdt) or 3&#xA; DATA_SELECTOR_RING0     = data_descr_ring0 - gdt&#xA; DATA_SELECTOR_RING3     = (data_descr_ring3 - gdt) or 3&#xA; VRAM_SELECTOR           = vram_descr - gdt&#xA; TSS_SELECTOR            = tss - gdt&#xA;&#xA; macro GDT_ENTRY_286 base_,limit_,present_,ring_,system_,codeseg_,conforming_,writable_,accessed_&#xA; {&#xA;     dw       limit_&#xA;     dw       base_ and 0xffff&#xA;     db       base_ shr 16&#xA;     db       (present_ shl 7) or (ring_ shl 5) or (system_ shl 4) or (codeseg_ shl 3) or (conforming_ shl 2) or (writable_ shl 1) or accessed_&#xA;     dw       0     ; reserved on 286&#xA; }&#xA; PRESENT_SEG=1&#xA; ABSENT_SEG=0&#xA; SYSTEM_SEG=0&#xA; NONSYSTEM_SEG=1&#xA; DATA_SEG=0&#xA; CODE_SEG=1&#xA; CONFORMING_SEG=1&#xA; EXT_DOWNWARDS_SEG=CONFORMING_SEG ; same bit, but for data segments&#xA; NONCONFORMING_SEG=0&#xA; EXT_UPWARDS_SEG=NONCONFORMING_SEG ; same bit, but for data segments&#xA; WRITABLE_SEG=1&#xA; READABLE_SEG=WRITABLE_SEG ; same bit, but for code segments&#xA; NONWRITABLE_SEG=0&#xA; ACCESSED_SEG=1&#xA; NOT_ACCESSED_SEG=0&#xA;&#xA;    jmp      0x0000:start ; make sure we know distribution of linear address bits between CS and IP&#xA;start:&#xA;    ; print &quot;OK&quot; on the screen to see that we've actually started&#xA;    push     0xb800&#xA;    pop      es&#xA;    xor      di,di&#xA;    mov      ax, 0x0700+'O'&#xA;    stosw&#xA;    mov      ax, 0x0700+'K'&#xA;    stosw&#xA;    ; clear the rest of the screen to have a clear view of the exceptions we'll generate&#xA;    mov      cx, 80*25*2-2&#xA;    mov      ax, 0x0700+' '&#xA;    rep stosw&#xA;&#xA;    lgdt     [cs:gdtr]&#xA;    cli&#xA;    mov      cx, DATA_SELECTOR_RING0&#xA;    smsw     ax&#xA;    or       al, 1&#xA;    lmsw     ax&#xA;    jmp      CODE_SELECTOR_RING0:enterPM&#xA;enterPM:&#xA;    mov      ds, cx&#xA;    mov      ss, cx&#xA;    mov      sp, 0xfffe&#xA;    lidt     [idtr]&#xA;&#xA;    ; fill ring0 stack in the TSS and load TR - so that we could handle ring3-originating exceptions&#xA;    mov      word [2], sp   ; ring0 SP&#xA;    mov      word [4], cx   ; ring0 ss&#xA;    mov      dx, TSS_SELECTOR&#xA;    ltr      dx&#xA;&#xA;    mov      ax, sp&#xA;    push     DATA_SELECTOR_RING3&#xA;    push     ax&#xA;    pushf&#xA;    push     CODE_SELECTOR_RING3&#xA;    push     enterRing3&#xA;    iret&#xA;enterRing3:&#xA;    push     ss&#xA;    pop      ds&#xA;    int3     ; check that at least interrupts and returns from them work&#xA;    db       0xf1 ; the prefix we wanted to check for equivalence to LOCK&#xA;;    lock          ; LOCK itself&#xA;    add word [0], 0&#xA;    xor      ax, ax      ; make sure we don't pass&#xA;    div      ax          ; through to execute data&#xA;gdt:&#xA;    dq       0&#xA;data_descr_ring0:&#xA;    GDT_ENTRY_286 0x00000,0xffff,PRESENT_SEG,0,NONSYSTEM_SEG,DATA_SEG,EXT_UPWARDS_SEG,WRITABLE_SEG,ACCESSED_SEG&#xA;data_descr_ring3:&#xA;    GDT_ENTRY_286 0x10000,0xffff,PRESENT_SEG,3,NONSYSTEM_SEG,DATA_SEG,EXT_UPWARDS_SEG,WRITABLE_SEG,ACCESSED_SEG&#xA;vram_descr:&#xA;    GDT_ENTRY_286 0xb8000,0xffff,PRESENT_SEG,0,NONSYSTEM_SEG,DATA_SEG,EXT_UPWARDS_SEG,WRITABLE_SEG,ACCESSED_SEG&#xA;code_descr_ring0:&#xA;    GDT_ENTRY_286 0x00000,0xffff,PRESENT_SEG,0,NONSYSTEM_SEG,CODE_SEG,NONCONFORMING_SEG,READABLE_SEG,ACCESSED_SEG&#xA;code_descr_ring3:&#xA;    GDT_ENTRY_286 0x00000,0xffff,PRESENT_SEG,3,NONSYSTEM_SEG,CODE_SEG,NONCONFORMING_SEG,READABLE_SEG,ACCESSED_SEG&#xA;tss:&#xA;    GDT_ENTRY_286 0x00000,0x002c,PRESENT_SEG,3,SYSTEM_SEG,0,0,0,1 ; 16-bit available TSS (in place of real-mode IVT)&#xA;&#xA;gdtr:&#xA;    dw       gdtr-gdt-1&#xA; gdtBase:&#xA;    dd       gdt&#xA;&#xA;idt:&#xA; rept 14 COUNTER&#xA; {&#xA;    dw       intHandler#COUNTER&#xA;    dw       CODE_SELECTOR_RING0&#xA;    db       0&#xA;    db       11100111b    ; present, ring3, system, 16-bit trap gate&#xA;    dw       0            ; reserved on 286&#xA; }&#xA;idtr:&#xA;    dw       idtr-idt-1&#xA; idtBase:&#xA;    dd       idt&#xA;&#xA;INT_NAME_SIZE=3&#xA; rept 14 COUNTER&#xA; {&#xA;intHandler#COUNTER:&#xA;    mov      si, intNames+(COUNTER-1)*INT_NAME_SIZE&#xA;    mov      bx, COUNTER-1&#xA;    jmp      handleInt&#xA; }&#xA;handleInt:&#xA;    pusha&#xA;    push     ds&#xA;    mov      cx, VRAM_SELECTOR&#xA;    mov      es, cx&#xA;    push     ss&#xA;    pop      ds&#xA;    mov      di, [offsetInVRAM]&#xA;    mov      cx, INT_NAME_SIZE&#xA;    mov      al, 7&#xA; printLoop:&#xA;    movsb     ; character&#xA;    stosb     ; attribute&#xA;    loop     printLoop&#xA;    inc      di&#xA;    inc      di&#xA;    mov      [offsetInVRAM], di&#xA;    cmp      bx, 3 ; test that our interrupts work as expected, return after INT3&#xA;    jne      $&#xA;    pop      ds&#xA;    popa&#xA;    iret&#xA;intNames:&#xA;    db &quot;#DE#DBNMI#BP#OF#BR#UD#NM#DFCSO#TS#NP#SS#GP&quot;&#xA;offsetInVRAM:&#xA;    dw       0&#xA;&#xA;finish:&#xA;    db       (0x7dfe-finish) dup(0)&#xA;    dw       0xaa55&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1992" LastActivityDate="2019-08-17T08:54:12.933" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12079" PostTypeId="2" ParentId="12077" CreationDate="2019-08-17T09:21:45.833" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So, what other languages became available in 1961?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The first that comes to mind would be COBOL as there was a &lt;a href=&quot;https://en.wikipedia.org/wiki/COBOL#COBOL-61_to_COBOL-65&quot; rel=&quot;nofollow noreferrer&quot;&gt;1961 definition/version&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But all the way back than it gets hard to tie a language to a certain year, as &quot;Software as a Product&quot; wasn't really a thing - and thus sales dates are rarely available. Similar for release dates, as that was often a gradual process involving user feedback (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if I understand this challenge right, any language available in 1961 will do, wouldn't it? So pick any with some date before 1960 - like COBOL-60 .. ups :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm trying to get Programming Languages Through The Years over on the Code Golf site going again.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think the 'at least 5 years older' clause makes it hard to come up with more than a few iterations. Trying to eliminate that for anything before, lets say, 1970 could be helpful.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - In fact, what I so much love about today's open source development cycle of &lt;em&gt;putting stuff on Github, having users play with it, supplying comments and patches back into the main branch&lt;/em&gt;, is quite much like software development originally worked. The way it always should have been. Now supported by the internet and complex tools instead of sneaker-net and card punches.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-16T10:50:33.687" LastActivityDate="2019-09-16T10:50:33.687" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12080" PostTypeId="2" ParentId="2706" CreationDate="2019-08-17T09:48:43.680" Score="1" Body="&lt;p&gt;Answering my own question as a way to spur up discussion two years later...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on this question and its accepted answer here: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12035/what-are-the-ultra-highres-registers-in-ecs-and-aga-for&quot;&gt;What are the Ultra-Highres registers in ECS and AGA for?&lt;/a&gt; , namely, the fact that AGA, and perhaps ECS already, has a DUAL/UHRES mode that is meant to drive an external CLUT/DAC connected to Vram to generate a second, high-resolution, display independently of the one generated by Denise/Lisa, I'm now convinced that &lt;strong&gt;indeed the Ranger chipset may actually have been implemented as either ECS or AGA&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, these are reportedly the feature that Ranger had (&lt;a href=&quot;http://www.amigahistory.plus.com/jayinterview2.jpg&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;at the bottom right&quot;&gt;1&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The chip RAM maximum being 2MB rather than 512K.&lt;/li&gt;&#xA;&lt;li&gt;The possibility for a 1024x1024 non-interlaced display.&lt;/li&gt;&#xA;&lt;li&gt;The use of VRam to attain the above resolution.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;ECS has:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2MB for chip RAM maximum.&lt;/li&gt;&#xA;&lt;li&gt;The 35ns SuperHires mode, which prove that it's fast enough to go above the ~ 700 pixel horizontal resolution that OCS can do (with overscan).&lt;/li&gt;&#xA;&lt;li&gt;a &quot;DUAL&quot; bit in register BEAMCOM0 (introduced in ECS) to enable a mode that is described as a &quot;Special ultra resolution mode&quot; (briefly mentioned in the &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node00A7.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;RKM: Hardware book, 3rd edition&lt;/a&gt;, but never described in detail).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Note that Alice in AGA isn't much more than ECS's Super Agnus with the ability to run a 2-cycles Fast Page mode access on a 32bit wide bus for bitplane and sprite data &lt;em&gt;only&lt;/em&gt; and very little more than that).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IMHO it may very well be that after Jay Miner left Commodore in 1987/88 when Los Gatos closed, Commodore did indeed use his design for &quot;Ranger&quot; and implemented a version of the design already in ECS with Super Agnus, and then later in Alice (with the version in ECS perhaps being buggy or incomplete, and the version in AGA being instead stable enough to being documented in the official list of the chipset registers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... except then they never went on releasing a system that actually used the VRam mode (due to requiring RTG in software? due to the usual lack of vision?), least implement a new custom chip to drive the VRam (*).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thoughts?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Addendum: the &lt;a href=&quot;https://web.archive.org/web/20090824015340/http://www.thule.no/haynie/research/nyx/docs/AAA.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;internal memo describing the AAA chipset&lt;/a&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;AAA is designed to be largely register compatible with the ECS chip set. Most of the&#xA;  RGA registers from ECS are supported. &lt;strong&gt;The ECS “Ultra hires” registers have been eliminated, as&#xA;  they were never supported in actual practice.&lt;/strong&gt; Some other display-generation details of ECS are&#xA;  no longer required or supported in AAA.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So it looks like this feature has ben around since ECS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(*): &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;could this VRam driver/CLUT/DAC &quot;external circuitry&quot; implementation actually be the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1536/what-is-the-kelly-chip&quot;&gt;Kelly&lt;/a&gt; chip originally developed for AGA?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;could it be that the 0xC000000 &quot;slow-fast RAM&quot; memory is known as the &quot;Ranger RAM&quot; because this is where the VRam was supposed to be mapped in the memory map. VRam still needs to be accessible as normal RAM too, after all.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2019-10-10T13:13:31.537" LastActivityDate="2019-10-10T13:13:31.537" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12081" PostTypeId="1" AcceptedAnswerId="12096" CreationDate="2019-08-17T14:05:44.893" Score="18" ViewCount="481" Body="&lt;p&gt;The TECO editor, (originally Tape Editor and COrrector, later Text Editor...) found in some form on just about every computer and operating system DEC ever made, provides variables in which you can store numbers and/or text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These variables are called &quot;Q-registers&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone know why that name was used?  Is this related to anything on PDP-1 (which had the original TECO implementation)?&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="142" LastEditDate="2020-05-20T07:28:12.657" LastActivityDate="2020-05-20T07:28:12.657" Title="Why were TECO variables called Q-registers?" Tags="&lt;history&gt;&lt;dec&gt;&lt;text&gt;&lt;editor&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12083" PostTypeId="2" ParentId="2927" CreationDate="2019-08-17T18:25:31.360" Score="8" Body="&lt;p&gt;Yes, it might seem somewhat odd that Intel added extra logic to set&#xA;the segment registers but not not the stack pointer; this means that&#xA;even though you don't need to set up both the stack segmeent register&#xA;SS and the stack pointer register SP to have a working stack, you&#xA;still need to do some setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The decision to set the segment registers at start had a cost, too:&#xA;extra gates are needed in the reset logic for each register that you&#xA;want to have a predetermined value after reset rather than a random&#xA;one. That leads to either removing other features you'd like to have&#xA;or a bigger die and its consequent lower yield.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it starts to make sense when you remember that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Marketed as source compatible, the 8086 was designed to allow&#xA;  assembly language for the 8008, 8080, or 8085 to be automatically&#xA;  converted into equivalent (suboptimal) 8086 source code, with little&#xA;  or no hand-editing.[&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8086&quot; rel=&quot;noreferrer&quot;&gt;wp&lt;/a&gt;]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 8080 didn't define the SP's value because there is no sensible&#xA;default for it: where the stack can be depends entirely on the system&#xA;address map design. This means that any 8080 code you &quot;auto-port&quot; to&#xA;the 8086 will not be using the stack unless it has set up the SP&#xA;first. But such code certainly won't be setting up the SS, because&#xA;that didn't exist on the 8080. Thus, to make such auto-porting easier,&#xA;and offer an alternative to changing the software, the system designer&#xA;updating hardware to use an 8086 instead of an 8080 can simply design&#xA;it to have a similar enough memory map to the 8080 system that the&#xA;code that sets up the stack can be re-assembled for the 8086 without&#xA;changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why is &lt;code&gt;0000h&lt;/code&gt; a reasonable default for the SS? The default is only&#xA;necessary for systems designed for auto-ported code (systems with new&#xA;code would set SS at the same time as they set SP). On such systems it&#xA;does force the designer to put RAM at the bottom of the memory map,&#xA;but this is a reasonable enough place to put it anyway, since it&#xA;doesn't actually matter what segement the RAM or ROM is in: the ported&#xA;code assumed it was running in a single 64K address space anyway. This&#xA;also allows you to re-use almost exactly the 8080 board's existing&#xA;memory decoding logic on an 8088 system as well; you simply ignore or&#xA;force to zero the top four bits of the 20-bit external addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why make the CS different, &lt;code&gt;FFFFh&lt;/code&gt; instead of &lt;code&gt;0000h&lt;/code&gt;? Doing this&#xA;gives a little more flexability with a new 8088 design intended to&#xA;upgrade an existing 8080 design. The new design you must always have a&#xA;little bit of new startup code at &lt;code&gt;FFFF0&lt;/code&gt; since the 8080 did not run&#xA;code there at startup (it loaded the program counter with &lt;code&gt;0000h&lt;/code&gt; at&#xA;reset), but there are two simple options for this depending on what&#xA;you're trying to achieve with the upgrade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your new 8088 system still can live within a 64 KB memory space for&#xA;RAM and ROM, you can re-use almost exactly the existing address&#xA;deocding logic and minimize the amount of new logic you need to add&#xA;for the 8088 by ignoring the top four bits of the 20-bit address bus,&#xA;causing the second and subsequent 64K chunks of the address space to&#xA;be mirrors of the first 64K chunk. The only thing you need to add is a&#xA;bit of ROM at &lt;code&gt;0FFF0&lt;/code&gt; with a new startup routine that loads CS with&#xA;&lt;code&gt;0000&lt;/code&gt; and does a &lt;code&gt;JMP #0000&lt;/code&gt;, which would call the original&#xA;(auto-ported) startup code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need more than 64K address space in the new system (perhaps&#xA;because that was the whole point of switching from an 8080 to an 8088,&#xA;or you can't conveniently put any ROM at &lt;code&gt;0FFF0&lt;/code&gt;), you can put the new&#xA;ROM outside that 64K address space or also map the original ROM to a&#xA;new address at &lt;code&gt;10000&lt;/code&gt; or above, giving you 64K of address space for&#xA;RAM at &lt;code&gt;00000&lt;/code&gt; and another 64K of address space for ROM above that.&#xA;(This would be a fairly easy way of solving the problem of having an&#xA;8080 system that had run out of address space for RAM and ROM but was&#xA;otherwise satisfactory.) In either case, your new startup code is as&#xA;described above: load the CS with an appropriate value for the ROM&#xA;location and jump to your original (auto-ported) startup code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of moving the ROM outside the lowest 64K of address space,&#xA;if your code never ran data from the &quot;data area,&quot; this should be a&#xA;pretty simple conversion with almost all of the machine code&#xA;re-assembled automatically from the original 8080 source code. (If&#xA;not, you'll still probably have an easier time than doing a full&#xA;rewrite.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are actually some further subtle issues with the above that I am&#xA;ignoring here in the interests of saving space, but you (or anyone&#xA;else) could ask another question specifically about this kind of&#xA;conversion if you're interested.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-08-17T18:25:31.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12084" PostTypeId="2" ParentId="12068" CreationDate="2019-08-18T15:20:57.337" Score="4" Body="&lt;p&gt;Let's write some actual code for fixed point arithmetic and see how it goes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) &lt;strong&gt;Addition&lt;/strong&gt; and &lt;strong&gt;Subtraction&lt;/strong&gt; is obviously fundamentally the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) &lt;strong&gt;Multiplication&lt;/strong&gt;. There are quite a few ways to do multiplication. A reasonably performant and still straightforward algorithm uses shifts and adds. Pseudo code to calculate &lt;code&gt;z = x * y&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;z := 0&#xA;while x != 0:&#xA;  x := x / 2&#xA;  if odd (old x) then:&#xA;    z := z + y&#xA;  y := y * 2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Unoptimized implementation for 2 bytes arguments and a 4 byte result with binary arithmetic, using &lt;code&gt;crasm&lt;/code&gt;: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        cpu 6502&#xA;&#xA;vx      = $10&#xA;vy      = $20   &#xA;vz      = $30&#xA;&#xA;*       = $300&#xA;&#xA;        code&#xA;&#xA;        lda #$46&#xA;        sta vx+0&#xA;        lda #$59&#xA;        sta vx+1&#xA;        lda #$92&#xA;        sta vy+0&#xA;        lda #$63&#xA;        sta vy+1&#xA;&#xA;        cld&#xA;        lda #$00        ; z := 0&#xA;        sta vz+0&#xA;        sta vz+1&#xA;        sta vz+2&#xA;        sta vz+3&#xA;        sta vy+2&#xA;        sta vy+3&#xA;&#xA;.3      lda vx+0        ; while x != 0&#xA;        ora vx+1&#xA;        beq .1&#xA;        lsr vx+1        ; x := x / 2&#xA;        ror vx+0&#xA;        bcc .2          ; if odd (old x)&#xA;        clc&#xA;        lda vz+0        ; z := z + y&#xA;        adc vy+0&#xA;        sta vz+0&#xA;        lda vz+1&#xA;        adc vy+1&#xA;        sta vz+1&#xA;        lda vz+2&#xA;        adc vy+2&#xA;        sta vz+2&#xA;        lda vz+3&#xA;        adc vy+3&#xA;        sta vz+3&#xA;.2      asl vy+0        ; y := y * 2&#xA;        rol vy+1&#xA;        rol vy+2&#xA;        rol vy+3&#xA;        jmp .3&#xA;.1      brk&#xA;&#xA;        code&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This calculates &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$5946 * $6392 = 22854 * 25490 = 582548460 = $22b8fbec&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and using &lt;code&gt;sim65&lt;/code&gt; one can verify that it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For BCD arithmetic, we have to re-write division and multiplication by two. The latter is easy, just add the number to itself:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.2      clc             ; y := y * 2&#xA;        lda vy+0&#xA;        adc vy+0&#xA;        sta vy+0&#xA;        lda vy+1&#xA;        adc vy+1&#xA;        sta vy+1&#xA;        lda vy+2&#xA;        adc vy+2&#xA;        sta vy+2&#xA;        lda vy+3&#xA;        adc vy+3&#xA;        sta vy+3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The former is a bit difficult, I ended up doing the decimal adjust manually. Other variants would have been to replace &lt;code&gt;x / 2&lt;/code&gt; with &lt;code&gt;x / 10 * 5&lt;/code&gt;, or to keep the shifts for &lt;code&gt;x&lt;/code&gt; without adjustments, and use an alternative for every 4th bit in &lt;code&gt;y * 2&lt;/code&gt; (which would require loop unrolling).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        lsr vx+1        ; x := x / 2&#xA;        ror vx+0&#xA;        php&#xA;        sec&#xA;        lda vx+1&#xA;        bit const08&#xA;        beq .4&#xA;        sbc #$03&#xA;.4      sta vx+1&#xA;        lda vx+0&#xA;        bpl .5&#xA;        sbc #$30&#xA;.5      bit const08&#xA;        beq .6&#xA;        sbc #$03&#xA;.6      sta vx+0        &#xA;        plp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Again using &lt;code&gt;sim65&lt;/code&gt;, one can verify that&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;5946 * 6392 = 38006832&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;These are the only parts that have to be changed, so &lt;em&gt;structurally&lt;/em&gt; it's exactly the same. The observation here is that having an automatic decimal adjustment for division by two would have really helped (possibly there's a better way to do that.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course I picked a variant where the similarities are very pronounced, but Chromatix claim that you have to do it a particular way as he describes it is wrong, and therefore the conclusions he draws are also wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is true, however, that the BCD variant will always be more complex, but not asymptotically so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3a) &lt;strong&gt;Division with restore&lt;/strong&gt;. Using the above method for BCD division by two, again the binary and BCD variants of the straightforward algorithm should be structurally the same. I didn't write code for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3b) &lt;strong&gt;Division without restore&lt;/strong&gt;. I am not sure if this will work in BCD as well, but it might.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, BCD algorithms do indeed have &lt;em&gt;fundamentally&lt;/em&gt; (asymptotically) the same performance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding exponents for BCD floating point, and doing the necessary shifts and normalization are not difficult, though note that the main application for BCD is fixed point (monetary values), so BCD floating point, BCD transcendental functions etc. are not as useful: In natural science, you don't really care if your rounding errors stem from a binary or a decimal representation.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-08-18T15:20:57.337" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12085" PostTypeId="2" ParentId="5809" CreationDate="2019-08-18T19:22:16.883" Score="5" Body="&lt;p&gt;For the home market, TVs were often used because of their easy availability: most households already had one, and the image was often good enough for the low resolution of early machines. Professional users would often buy a purpose-made computer monitor, which would become essential as display resolutions increased and computers entered the GUI era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I'll concentrate on dedicated computer monitors&lt;/strong&gt;, as other answers have already given good explanations of the connections available on TVs of the retro era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early 1980s, a high-quality colour monitor would use an input with separate RGB pins, and potentially an Intensity pin. These inputs would be driven at TTL voltages, giving 2^3=8 or 2^4=16 colours onscreen (similar to CGA/EGA displays for IBM-compatibles). The physical connector itself would be manufacturer-dependent, but was often a &lt;a href=&quot;https://en.wikipedia.org/wiki/DIN_connector&quot; rel=&quot;noreferrer&quot;&gt;DIN 41524&lt;/a&gt; socket. Here is an example of a Microvitec CUB monitor using a 6-pin socket for TTL video:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6kuDk.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6kuDk.jpg&quot; alt=&quot;Rear of a CUB QL 14 monitor sold for use with a Sinclair QL&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other manufacturers, such as Philips(*1), used an 8-pin DIN socket. There was little standardisation of the pinout for either of these connectors, just like there was no standard connector on the computer end. The usual advice for customers was to &quot;ask your dealer&quot; if they had a suitable cable, or if they could make one for you. (A benefit of using off-the-shelf DIN connectors.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;High resolution monochrome monitors would typically use a phono (RCA) or BNC connector. Some monitors supported more than one type of input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As computers started to use non-TTL (i.e. linear or analogue) RGB colour, manufacturers could support both by adding a second connector on the rear of the monitor. At first this was done with a second DIN connector, but as the SCART standard (which supported analogue RGB) became popular in Europe, they too were used. Here's the back of a Phillips CM8833, which supports monochrome/composite video (Input I) as well as TTL RGB via DIN connector or analogue RGB via SCART:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5A6po.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5A6po.jpg&quot; alt=&quot;Rear of Philips CM8833 Monitor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The use of DIN connectors for video fell out of fashion after the end of the 8-bit era, with &lt;a href=&quot;https://en.wikipedia.org/wiki/D-subminiature&quot; rel=&quot;noreferrer&quot;&gt;D-sub&lt;/a&gt; connectors becoming more prevalent. Philips released a revised &lt;a href=&quot;http://www.amibay.com/showthread.php?41459-philips-cm8833-II-question&quot; rel=&quot;noreferrer&quot;&gt;CM8833-II&lt;/a&gt; which replaced the DIN and SCART connectors with a single DE-9 connector, with a toggle switch to select analogue or TTL input levels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SCART and RCA composite connectors were also found on contemporary TVs, but DIN and D-sub connectors were rare or non-existent. DE-15 (VGA) connectors didn't become common until TVs had switched over to LCD displays, which takes us beyond the &quot;retro&quot; era.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Philips also made OEM monitors on behalf of a number of computer manufacturers, including Acorn and Commodore.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-08-18T19:22:16.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12086" PostTypeId="1" AcceptedAnswerId="12087" CreationDate="2019-08-18T20:53:19.357" Score="4" ViewCount="695" Body="&lt;p&gt;I have a Sharp Super Scientific EL-9000 calculator (that used to be my mom's back in the day) which came with a Korean manual. I am a Korean American, and I can't understand the manual well. Does anybody have access to an English one? The format doesn't matter.&lt;/p&gt;&#xA;" OwnerUserId="15039" LastActivityDate="2021-01-27T04:01:35.367" Title="Sharp Super Scientific EL-9000 English Manual" Tags="&lt;sharp-el9000&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12087" PostTypeId="2" ParentId="12086" CreationDate="2019-08-19T00:24:42.417" Score="3" Body="&lt;p&gt;You might want to look for EL-5200 (not EL-5200X - which is related but different - like the whole 9x00 series) as well, as that's (AFAIK) the very same model. A quick search revealed &lt;a href=&quot;http://www.gelhaus.net/cgi-bin/page.py?loc:8bit/%20content:EL-5200.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;a page with some handling information&lt;/a&gt; maybe good for first steps (and cross referencing to your Korean manual).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, here's a &lt;a href=&quot;http://pockemul.com/Documents/9000.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;French manual&lt;/a&gt; and the &lt;a href=&quot;https://sharppocketcomputers.com/4HK7JnFJDuVm/Service/ce50p_service_manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;service manual&lt;/a&gt; for the printer/cassette interface CE-50P  - quite helpful if you want to hack some interface to modern devices. Heck, there's even a book describing it's &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0030927269&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;use for statistics&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-08-19T00:24:42.417" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12088" PostTypeId="2" ParentId="11821" CreationDate="2019-08-19T08:59:01.593" Score="3" Body="&lt;p&gt;Your description isn't quite right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At 8MHz there are 8,000,000 clock cycles per second. Each clock cycle consists of one transition from high to low and one from low to high, i.e. the waveform returns to its original state at the start of each clock cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 68k splits each cycle into two states, one on the falling edge and one on the rising edge of the signal. So at 8MHz there are 16,000,000 states per second. The minimum required to execute any instruction is 8 states, so a maximum of 2,000,000 instructions per second or 1/4th the CPU's clock speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look at he 68000 manual it gives instruction timings in CPU clocks, with the minimum being 4 (8 states). Note also that all execution times are some multiple of 4 states or 2 CPU clocks.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-08-19T08:59:01.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12089" PostTypeId="1" AcceptedAnswerId="12090" CreationDate="2019-08-19T15:35:48.417" Score="3" ViewCount="212" Body="&lt;p&gt;From memory, the Nokia N73 had two web browsers; one WAP browser, and another, fully-functional HTML application. Would somebody be able to remind me what both of these options are labeled as when navigating through the menu of the phone? I think the main web browser was labeled &quot;Web&quot; or similar, but I can't remember what the WAP browser was listed as.&lt;/p&gt;&#xA;" OwnerUserId="15043" LastActivityDate="2019-08-19T15:43:13.827" Title="Could somebody remind me how to access the WAP browser on the Nokia N73?" Tags="&lt;internet&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12090" PostTypeId="2" ParentId="12089" CreationDate="2019-08-19T15:43:13.827" Score="3" Body="&lt;p&gt;See &lt;a href=&quot;http://download-support.webapps.microsoft.com/files/support/apac/phones/guides/Nokia_N73-5_APAC_UG_en.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the N73 manual&lt;/a&gt; (now available from Microsoft), pages 72 and following.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The HTML browser is called “Web” (“Internet” → “Web”), and the WAP browser is called “Services” (“Internet” → “Services”).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-08-19T15:43:13.827" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12091" PostTypeId="2" ParentId="11965" CreationDate="2019-08-19T18:39:24.873" Score="2" Body="&lt;p&gt;I've collected a number of resources in this answer that I've managed to find with additional searching on the internet. Additionally my copy of Stack Computers arrived in the mail and has been very useful. I've split links into professional/academic vs hobbyist. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PROFESSIONAL/ACADEMIC &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Phil Koopman's Stack Computers dedicates its fourth chapter to hardware implementations of different stack computers. In particular it includes the &lt;a href=&quot;https://users.ece.cmu.edu/~koopman/stack_computers/sec4_4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;NOVIX NC4016&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ultratechnology.com/chips.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ultratechnology&lt;/a&gt; has a very good listing of forth chips, unfortunately listings to the Sh-Boom manual and associated information are broken and I have been unable to find them via google. Using the wayback machine gets you to the following &lt;a href=&quot;https://web.archive.org/web/20040604165217/http://www.eforth.com.tw/academy/chips/shboom.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;page&lt;/a&gt; but unfortunately none of the actual documentation appears to have been archived.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am unaware of any online resources regarding the soviet Dauphin chips. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;HOBBYIST/STUDENT &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Andrew Holmes has built two forth &lt;a href=&quot;http://www.aholme.co.uk/Mk1/Architecture.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;computers&lt;/a&gt; using TTL logic chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to user RETRAC for pointing out &lt;a href=&quot;http://madscientistroom.org/mippy/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mippy&lt;/a&gt;, another homebrew forth CPU. Unfortunately at this point there are no schematics online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rob Chapman built an 8 bit stack processor as a graduate student at the University of Alberta. He later on did work for Green Arrays and is listed on their &lt;a href=&quot;http://www.greenarraychips.com/home/about/bios.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;website&lt;/a&gt;. A number of his &lt;a href=&quot;https://web.archive.org/web/20050218082826/http://www.compusmart.ab.ca/rc/Papers/8bitprocessor/&quot; rel=&quot;nofollow noreferrer&quot;&gt;papers&lt;/a&gt; were archived by the wayback machine. They include a &lt;a href=&quot;https://web.archive.org/web/20050304044023/http://www.compusmart.ab.ca/rc/Papers/writablecomputer.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;project report&lt;/a&gt; and a &lt;a href=&quot;https://web.archive.org/web/20050304044023/http://www.compusmart.ab.ca/rc/Papers/writablecomputer.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;design document&lt;/a&gt; for a stack based computer. &lt;/p&gt;&#xA;" OwnerUserId="14903" LastActivityDate="2019-08-19T18:39:24.873" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12092" PostTypeId="1" CreationDate="2019-08-19T20:00:32.933" Score="1" ViewCount="319" Body="&lt;p&gt;I'd like to examine (disassemble and memory dump) and run the &lt;a href=&quot;http://www.swtpc.com/mholley/swtbug/SWTBUG_Index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;SWTBUG&#xA;monitor ROM&lt;/a&gt; in the SIMH SWTP6800 emulator, but I seem to be&#xA;having difficulty getting the devices attached properly, or I'm lost&#xA;in some other way I don't understand. I can set up RAM and ROM devices&#xA;to a certain point, but I can't seem to get them mapped to the CPU's&#xA;address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below I've provided a lot of detail on what I've tried so far, but if&#xA;you don't want to go through all of that, I would still be pleased to&#xA;see any answers (even perhaps for another CPU) that show any of the&#xA;following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How to attach ROM into the CPU's memory space and&#xA;examine/disassemble it there.&lt;/li&gt;&#xA;&lt;li&gt;How to attach RAM into the CPU's memory space, deposit data into&#xA;it, and examine it.&lt;/li&gt;&#xA;&lt;li&gt;How to run a simple routine in RAM or ROM.&lt;/li&gt;&#xA;&lt;li&gt;How to run the SWTBUG monitor and interact with it.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I've tried this with both the &lt;code&gt;simh-4.0-Current--2019-07-30-354a1e42&lt;/code&gt;&#xA;&lt;a href=&quot;https://github.com/simh/Win32-Development-Binaries&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows build&lt;/a&gt; and my own build from the current head&#xA;(&lt;code&gt;2b6675b2&lt;/code&gt;) of &lt;a href=&quot;https://github.com/simh/simh&quot; rel=&quot;nofollow noreferrer&quot;&gt;the source&lt;/a&gt; on Debian 9. The examples below come&#xA;from the latter, but I get similar results with the former.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've got both the &lt;code&gt;swt6800mp-a&lt;/code&gt; and &lt;code&gt;swtp6800mp-a2&lt;/code&gt; binaries, which&#xA;both seem to start ok; I'm currently using the former since that seems&#xA;to have a slightly simpler configuration than the latter.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ ./swtp6800mp-a&#xA;&#xA;SWTP 6800, V2, MP-A CPU Board simulator V4.0-0 Current        git commit id: 2b6675b2&#xA;sim&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I also have the &lt;a href=&quot;http://simh.trailing-edge.com/kits/swtp6800-swk.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;swtp6800-swk.zip&lt;/code&gt;&lt;/a&gt; contents downloaded from the&#xA;&lt;a href=&quot;http://simh.trailing-edge.com/software.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;software kits&lt;/a&gt; page, which includes the &lt;code&gt;swtbug.bin&lt;/code&gt; file. My&#xA;work below is based on the &lt;code&gt;swtp6800mp-a.ini&lt;/code&gt; file that's distributed&#xA;in this kit, though I've moved that to another directory to ensure&#xA;that the session below has not accidentally run any of that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can attach that file to the &lt;code&gt;bootrom&lt;/code&gt; device and see that the file&#xA;has been successfully read. The data below match what I see in the&#xA;&lt;a href=&quot;http://www.swtpc.com/mholley/swtbug/SWTBUG_Listing.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SWTBUG assembly listing&lt;/a&gt;, as does the disassembly, with the&#xA;caveat that the destination address of the branch, being relative, is&#xA;not what we'd see in system memory because the offsets here are from&#xA;the start of the ROM image, rather than the location at which the ROM&#xA;image should be mapped in memory.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sim&amp;gt; set bootrom 2708&#xA;sim&amp;gt; attach bootrom swtbug.bin&#xA;sim&amp;gt; e -h bootrom d0/5&#xA;D0: 8E&#xA;D1: A0&#xA;D2: 42&#xA;D3: 20&#xA;D4: 2D&#xA;sim&amp;gt; e -m bootrom d0/5&#xA;D0: LDS  #$A042&#xA;D3: BRA  $0102&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, it appears that this ROM is not (or at least not yet) mapped&#xA;into the address space of the CPU:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sim&amp;gt; e -m e0d0/5&#xA;Unit not attached&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So I carry on with the the next commands from the INI file to see if&#xA;something there &quot;attaches&quot; it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sim&amp;gt; set cpu hex,itrap,mtrap&#xA;sim&amp;gt; reset&#xA;sim&amp;gt; e -m e0d0/5&#xA;Unit not attached&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Maybe a power-on reset (which according to &lt;a href=&quot;http://simh.trailing-edge.com/pdf/simh_doc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the documentation&lt;/a&gt;&#xA;does not clear memory) is necessary?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sim&amp;gt; reset -p&#xA;sim&amp;gt; reset -p ALL&#xA;sim&amp;gt; e -m e0d0/5&#xA;Unit not attached&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Do I have the wrong address?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sim&amp;gt; e 0/5&#xA;Unit not attached&#xA;sim&amp;gt; e a000/5&#xA;Unit not attached&#xA;sim&amp;gt; e e000/5&#xA;Unit not attached&#xA;sim&amp;gt; e f000/5&#xA;Unit not attached&#xA;sim&amp;gt; e fff0/5&#xA;Unit not attached&#xA;sim&amp;gt; e ffff&#xA;Unit not attached&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Well, I can't seem to examine memory at all, but maybe I can see if it&#xA;runs. Using the following INI file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;set bootrom 2708&#xA;attach bootrom swtbug.bin&#xA;set cpu hex,itrap,mtrap&#xA;reset&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I look at where I'm going to start:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sim&amp;gt; e cpu pc&#xA;PC: E0C6&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Wait, that's weird; that's not the proper entry point for the ROM.&#xA;What's should in the vectors at the top of the address space if the&#xA;ROM were correctly mapped there?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sim&amp;gt; e bootrom 3f8/8&#xA;3F8:    E0&#xA;3F9:    00&#xA;3FA:    E1&#xA;3FB:    6B&#xA;3FC:    E1&#xA;3FD:    87&#xA;3FE:    E0&#xA;3FF:    C6&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Sure would be nice if there were a way to dump multiple bytes on a&#xA;single line.) And how did that PC value get loaded? On reset it should&#xA;be loaded with the contents of memory locations FFFE and FFFF, but I&#xA;still can't see them in memory:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sim&amp;gt; e fffe/2&#xA;Unit not attached&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But anyway, this doesn't match what's supposed to be there according&#xA;to the listing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;E3F8                    ORG     $E3F8&#xA;E3F8 E0 00              FDB     IRQV        IRQ VECTOR&#xA;E3FA E1 8B              FDB     SFE         SOFTWARE INTERRUPT&#xA;E3FC E1 A7              FDB     NMIV        NMI VECTOR&#xA;E3FE E0 D0              FDB     START       RESTART VECTOR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Maybe a different ROM version? Anyway, let's check the code at that&#xA;entry point:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sim&amp;gt; e -m bootrom c6/f&#xA;C6: BRA  $0073&#xA;C8: BSR  $00C2&#xA;CA: BSR  $00C2&#xA;CC: LDAA #$20&#xA;CE: BRA  $007D&#xA;D0: LDS  #$A042&#xA;D3: BRA  $0102&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and compare with the listing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;E0C6 20 A3              BRA     OUTHR       OUTPUT RIGHT HEX CHAR&#xA;E0C8 8D F5      OUT4HS  BSR     OUT2H       OUTPUT 4 HEX CHAR + SPACE&#xA;E0CA 8D F3      OUT2HS  BSR     OUT2H       OUTPUT 2 HEX CHAR + SPACE&#xA;E0CC 86 20      OUTS    LDA A   #$20        SPACE&#xA;E0CE 20 A5              BRA     OUTCH       (BSR &amp;amp; TRS)&#xA;&#xA;                *ENTER POWER ON SEQUENCE&#xA;E0D0 8E A0 42   START   LDS     #STACK&#xA;E0D3 20 2C              BRA     AL1         BRANCH FOR ADDRESS COMPATIBIL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Yeah, pretty clearly the correct entry point is still &lt;code&gt;E0D0&lt;/code&gt;. And we&#xA;can confirm that the &lt;code&gt;E0C6&lt;/code&gt; entry point doesn't work:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sim&amp;gt; run&#xA;PC=E1AB SP=0000 IX=0000 A=0E B=00 CCR=D0&#xA;Invalid Opcode, PC: E1AB&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Restarting the whole simulator and trying the proper address doesn't&#xA;seem to work either, though:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;...&#xA;sim&amp;gt; e cpu pc&#xA;PC: E0C6&#xA;sim&amp;gt; d cpu pc e0d0&#xA;sim&amp;gt; e cpu pc&#xA;PC: E0D0&#xA;sim&amp;gt; g&#xA;&#xA;PC=8005 SP=A040 IX=E114 A=FF B=FF CCR=D9&#xA;Invalid Opcode, PC: 8005&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-08-20T06:13:00.550" LastActivityDate="2021-01-11T09:02:50.257" Title="How do I examine and use the SWTBUG monitor ROM in the SIMH SWTP6800 simulator?" Tags="&lt;simh&gt;&lt;6800&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12093" PostTypeId="2" ParentId="11965" CreationDate="2019-08-19T20:24:55.920" Score="2" Body="&lt;p&gt;Additional information to complement the answer by Fuzzy_Bunnys:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) An Forth chip I like very much is the &lt;a href=&quot;https://www.excamera.com/sphinx/fpga-j1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;J1&lt;/a&gt;. It even comes with the Verilog source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It runs e.g. on an Xilinx Spartan 3E FPGA at 80 MHz, and is used for a real-word application (a Ethernet camera). It has a high code density, but a very simple &quot;unencoded&quot; instruction format (even simpler than the Novix NC4000 format). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though it targets an FPGA, you could probably implement it with discrete chips with a bit of fiddling. But even for a Hobbyists, today's FPGA chips are not that hard to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It makes very clever use of the dual-port RAM on the chip; and the (custom) data and return stack is also dual-port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) You were asking about the Sh-Boom. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The company Patriot, which acquired the patent for the Sh-Boom, rebranded and reworked the Sh-Boom as the PSC1000 and targeted it to the Java market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I don't know any resource for the Sh-Boom itself, there is &lt;a href=&quot;http://ranger.uta.edu/~al-khaiy/cse3322_fall99/projects/paper/p21.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation&lt;/a&gt; for the PSC 1000 to at least get a good idea about the structure (even though the documenation only mentions Java, and not Forth, and it's not clear how much has changed from the Sh-Boom).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you can clearly see the original 16 general purpose registers of the Sh-Boom, an additional Local-Register stack that might have been the return stack on the Sh-Boom, the Operand stack which would have been the data stack, and the overall instruction format which probably hasn't changed much (though details of the instructions might have).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though it doesn't look simple enough I'd use it to base any hobbyist project on, the J1 architecture looks much better suited to that.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-08-19T20:24:55.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12094" PostTypeId="2" ParentId="12092" CreationDate="2019-08-19T22:44:33.127" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I've got copies of the swt6800mp-a and swtp6800mp-a2 binaries,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They are basically the same. The A2 only offers 4 'sockets' for 2 KiB (EP)ROMs at C000, C800, F000, F8000 in addition.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I thought it should be as simple as this, but I keep getting a mysterious &quot;Unit not attached&quot; error:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, you might want to name the unit you want to examine as well:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sim&amp;gt; e bootrom 0/10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This will show you the first 16 bytes of your bootrom content. Or&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sim&amp;gt; e -m bootrom 0/10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to get it disassembled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know it's odd (*1), but the whole SWTPC integration in SIMH is kind of an half finished hack.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To run it, it'll be a good idea to enable some RAM. Either by switchign on the default 128 bytes at A000 with &lt;code&gt;set MP-A2 RAM&lt;/code&gt; or 'fliping in' a 8 KiB RAM-card at A000 with &lt;code&gt;set MP-B2 bd5&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - But nonetheless described as &lt;em&gt;modifier&lt;/em&gt; under '3.5 Examining and Changing State' in the manual: &quot;A device/unit name identifies the device and unit whose address space is to be examined or modified&quot;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-08-19T22:56:08.377" LastActivityDate="2019-08-19T22:56:08.377" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12095" PostTypeId="2" ParentId="7796" CreationDate="2019-08-19T23:09:56.110" Score="3" Body="&lt;p&gt;AFAIK Mostek M/OS-80 was a licensed derivative of an Infosoft CP/M-compatible operating system. There is an M/OS-80 manual on bitsavers in this directory:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.trailing-edge.com/components/mostek/z80/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.trailing-edge.com/components/mostek/z80/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11178" LastActivityDate="2019-08-19T23:09:56.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12096" PostTypeId="2" ParentId="12081" CreationDate="2019-08-20T02:09:41.667" Score="9" Body="&lt;p&gt;It's really more of a conjecture, but if it is considered suitable as an answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Already in early TECO, the letter q (&quot;quantity&quot;) was used to &lt;a href=&quot;http://tenex.opost.com/anhc-31-4-anec.pdf&quot; rel=&quot;noreferrer&quot;&gt;retrieve&lt;/a&gt; the value of a register. That might have been the reason to call them Q-registers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trying to trace reasons for why things are named a certain way is always difficult; they way this usually goes is that someone comes up with a name, other people start using it, and the name then sticks. This process doesn't leave a lot of written records, and even if you ask people involved, they are probably not aware of how this happened.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-08-20T02:09:41.667" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12097" PostTypeId="1" AcceptedAnswerId="12098" CreationDate="2019-08-20T12:26:03.050" Score="7" ViewCount="585" Body="&lt;p&gt;So, recently I've been researching old tech because I want to write some fiction about some typewriter that can access the command line(yep) that shows up in many youtube videos like &lt;a href=&quot;https://www.youtube.com/watch?v=X9ctLFYSDfQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;This one.&lt;/a&gt; I want full accuracy for some reason. However, I can't seem to find a tutorial on how to setup one, and I would like to know. Suppose that I have a Teletype ASR 33. How would I setup it with some operating system's terminal, given that I have the materials in &lt;a href=&quot;https://www.youtube.com/watch?v=X9ctLFYSDfQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;this youtube video?&lt;/a&gt;(Hayes Smart modem, something that's able to connect to the internet through telephone e.g.. Livermore Model B, a rotary telephone, etc.)&lt;/p&gt;&#xA;" OwnerDisplayName="user15049" LastEditorDisplayName="user15049" LastEditDate="2019-08-23T11:01:59.900" LastActivityDate="2019-08-23T11:01:59.900" Title="How to setup a teletype to a unix shell" Tags="&lt;unix&gt;&lt;terminal&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12098" PostTypeId="2" ParentId="12097" CreationDate="2019-08-20T15:07:18.757" Score="10" Body="&lt;p&gt;The presumption in this situation is that there is some computer out there that already has one or several modems connected to phone lines, set up to automatically answer incoming calls and establish terminal sessions on them.  I'm not going to go into detail on how this is done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once that's in place, connecting using an Model 33 ASR is similar to connecting with any other terminal.  You do need to ensure that your Model 33 has the EIA interface (we call it RS-232 nowadays) rather than the 20mA current loop interface that was the norm before EIA became so common.  If it has the EIA interface then it will probably work with almost any RS-232 equipped modem (or the terminal can be attached directly to a computer if it's not too far away for the cable to reach).  I say &quot;probably&quot; because a Teletype Model 33 ASR ran at a fixed speed of 110 bps (bits per second) and sometimes you will find equipment with a minimum speed of 150 bps.  But as long as the device you're connecting the Teletype to supports 110 baud, you should be fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sidebar: At low bit rates the terms &quot;bps&quot; and &quot;baud&quot; are interchangeable.  At higher bit rates they technically mean different things but people will often misuse &quot;baud&quot; when they meant &quot;bps&quot;.  &quot;bps&quot; is bits per second, which is the aggregate number of bits transmitted per second.  &quot;baud&quot; is the number of signals transmitted per second.  At low bit rates, each symbol represents 1 bit, so the number of symbols per second is the same as the number of bits per second.  At higher bit rates, a symbol might represent 2, or 3, or even more bits, so you might have for example a 2400 baud modem transmitting 4 bits per symbol yielding 9600 bps.  Connections between a terminal and modem are almost universally done using 1 bit per symbol, but high speed modems will almost always use multiple bits per symbol when communicating with another modem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, back to your Teletype.  Connect your Teletype and your modem using an EIA cable (aka an RS-232 cable), then connect your modem to the phone line using whatever plug is appropriate for the decade (the commonly seen RJ jacks we have today weren't the norm when Teletypes were in common use).  If your modem has switches to establish the EIA baud rate with the terminal those will need to be set.  Terminals often also had switches to set the baud rate, but a Teletype Model 33 only runs at one speed -- 110 baud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some modems have the ability to dial the phone, but if yours doesn't you should also hook up a telephone to use for dialing.  A Hayes Smartmodem can automatically dial the phone so once everything is connected you can type dialing commands to the modem on the Teletype keyboard (e.g. ATDP5551212).  If you have touch-tone service (this was an extra-cost option in those days) you can use &quot;ATDT&quot; instead of &quot;ATDP&quot;.  Once the modem establishes a connection anything you type will be forwarded down the line rather than being interpreted as a command to the modem.  To return to 'modem command mode' you type three plus signs in a row (+++).  You would need to do this if you want to instruct the modem to hang up the phone (ATH).  The Hayes &quot;AT&quot; command set (and the use of +++ to get back to command mode) were a standard adopted by almost every other modem manufacturer so you will see them a lot.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2019-08-20T15:07:18.757" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12099" PostTypeId="2" ParentId="12097" CreationDate="2019-08-20T16:07:48.647" Score="5" Body="&lt;p&gt;As other answers will point out, you simply need to ensure that you&#xA;have a teletypewriter that can talk ASCII and a way to make it&#xA;communicate over a modern serial link such as RS-232 (possibly via an&#xA;adapter as used in the video), and the rest is exactly the same as&#xA;you'd do if you were using a terminal program on your Mac. (And&#xA;probably a USB serial interface cable/dongle, given that modern Macs&#xA;no longer have built-in ASCII serial interfaces.)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;But you also mention that you want &amp;quot;full accuracy,&amp;quot; which I think you&#xA;may need to think about and expand upon. If you're just after &amp;quot;it&#xA;looks like what a movie-goer would imagine old things to be like,&amp;quot; as&#xA;with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Blinkenlights&quot; rel=&quot;nofollow noreferrer&quot;&gt;blinkenlights&lt;/a&gt; and [old tape drive cabinets] that appear in&#xA;the movies wherever someone has a &amp;quot;mainframe,&amp;quot; you'll be fine. But the&#xA;technologies you're talking about putting together are rather&#xA;anachronistic, so &amp;quot;accurate&amp;quot; to history it will not be.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletype_Model_33&quot; rel=&quot;nofollow noreferrer&quot;&gt;Teletype Model 33&lt;/a&gt; was far from the the first printing&#xA;terminal used as a computer console; it wasn't introduced until 1963.&#xA;By that time the &lt;a href=&quot;https://en.wikipedia.org/wiki/Friden_Flexowriter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fridan Flexowriter&lt;/a&gt; and similar devices had&#xA;been used as computer consoles for as long as computers had had&#xA;printing consoles. What made the ASR-33 popular over the next few&#xA;years was a combination of low cost and that it used the brand new&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;ASCII&amp;quot;&lt;/a&gt; encoding rather than the &lt;a href=&quot;https://en.wikipedia.org/wiki/Baudot_code&quot; rel=&quot;nofollow noreferrer&quot;&gt;BAUDOT&lt;/a&gt; code that had been&#xA;standard up to that time. (Non-IBM computers happened to be switching&#xA;from various proprietary codes to ASCII around the same time.)&lt;/p&gt;&#xA;&lt;p&gt;Nor was it a &amp;quot;modern&amp;quot; printing terminal when it was introduced. By&#xA;that time the uppercase-only &amp;quot;chugga-chugga&amp;quot; printing thing had one&#xA;foot in the grave. The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1050&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 1052&lt;/a&gt; was introduced in the same year and&#xA;with its Selectric typewriter mechanism it offered both upper and&#xA;lower case and was faster and quieter. By the end of the decade, even&#xA;before VDTs became affordable, there was hardly reason to manufacture&#xA;something like the ASR-33 any more; Selectric, daisy-wheel and&#xA;dot-matrix mechanisms had taken over the market. This was, however,&#xA;advantageous to microcomputer hobbyists in the 1970s who had limited&#xA;budgets, since ASR-33s were now very cheap on the used market.&lt;/p&gt;&#xA;&lt;p&gt;It was only as the teletypewriter terminals were having their final&#xA;hurrah that the &amp;quot;command line&amp;quot; (i.e. timesharing) started to appear.&#xA;Shortly after the ASR-33 was introduced the first commercially&#xA;successful timesharing system, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Dartmouth_Time_Sharing_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dartmouth Time-Sharing&#xA;System&lt;/a&gt; was developed, and over the next decade it and similar&#xA;systems started to become popular. &lt;s&gt;But there were never any&#xA;&amp;quot;terminal rooms&amp;quot; full of ASR-33s, as far as I'm aware; there just&#xA;wasn't enough overlap in time there. (And who would be able to stand&#xA;the noise, anyway?)&lt;/s&gt;&lt;/p&gt;&#xA;&lt;p&gt;There were cases of terminal rooms being filled with ASR-33s, as&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12097/how-to-setup-a-teletype-to-a-unix-shell/12099#comment37745_12099&quot;&gt;another-dave mentions&lt;/a&gt;, but I don't think this was terribly&#xA;common; the incredible noise produced by this certainly would have not&#xA;made for a comfortable interactive development environment. I know I&#xA;would probably have preferred to do most of my programming off-line to&#xA;minimize the time I would have to spend on a terminal in such a&#xA;situation. And more off-line work than on- was common until the&#xA;microcomputer era, since the demand for terminals was almost&#xA;invariably higher than availability. It was not unusual to have a&#xA;limited supply of &amp;quot;soft dollars&amp;quot; to pay for computer resources,&#xA;including interactive time as well as CPU and disk. Programming&#xA;off-line and limiting on-line time to debugging was of course quite&#xA;different from how we do things today.&lt;/p&gt;&#xA;&lt;p&gt;Then you bring in the WWW and HTTP. The main difference between that&#xA;and the many previously existing hypertext systems was that the WWW&#xA;was explicitly designed &lt;em&gt;not&lt;/em&gt; to be used from a command-line&#xA;interface, but with a graphical one. Even though it was made available&#xA;to the public only shortly after the text-based &lt;a href=&quot;https://en.wikipedia.org/wiki/Gopher_(protocol)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gopher&lt;/a&gt; protocol&#xA;started becoming popular on the Internet, because Gopher was better&#xA;for use with a command line interface it remained more popular than&#xA;WWW/HTTP for several years. And FTP, which was also designed for&#xA;command-line use, remained the most popular protocol for file transfer&#xA;for even longer.&lt;/p&gt;&#xA;&lt;p&gt;So in short, this particular experiment or demonstration you're doing&#xA;is an utterly inauthentic combination of technologies. There's nothing&#xA;wrong with that if authenticity is not what you're trying to achieve,&#xA;but if it &lt;em&gt;is&lt;/em&gt; what you're trying to achieve, you probably need to&#xA;think further about just what you're trying to be authentic to, and&#xA;then do some research to find out what the contemporary technologies,&#xA;protocols and the like were.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-21T01:21:35.663" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12100" PostTypeId="1" AcceptedAnswerId="12107" CreationDate="2019-08-20T17:10:15.397" Score="5" ViewCount="804" Body="&lt;p&gt;I finally bought a ceramic 8086-1 (from ebay, from China - I'm not sure that it is not fake chip) and 8284 (it make the necessary synchronization signal for the processor from the crystal).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I want to check if it works - just run through part of the address space on the LEDs.&#xA;I don’t know what frequency of the crystal to set so that a person can see how the addresses change and whether the processor will work at such a low frequency? As an option, use circuit in which one processor cycle is performed at the click of a button.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have such circuit? I saw such for the Z-80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I use this circuit for generating clock signal - &lt;a href=&quot;https://i.stack.imgur.com/bScRs.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bScRs.jpg&quot; alt=&quot;8086&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13852" LastActivityDate="2021-02-18T22:34:55.360" Title="Need circuit - manual step-by-step clock for 8086/8088" Tags="&lt;intel&gt;&lt;8086&gt;&lt;8088&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12101" PostTypeId="1" CreationDate="2019-08-20T18:28:37.853" Score="23" ViewCount="3637" Body="&lt;p&gt;When and why did hexadecimal representation become more common than octal for displaying and printing out multi-bit binary fields?&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="6794" LastEditDate="2020-08-20T13:37:45.090" LastActivityDate="2020-08-20T13:37:45.090" Title="What is the hex versus octal timeline?" Tags="&lt;display&gt;&lt;hexadecimal&gt;" AnswerCount="5" CommentCount="13" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12102" PostTypeId="2" ParentId="9593" CreationDate="2019-08-20T19:04:00.127" Score="5" Body="&lt;p&gt;A later example was the original RS/6000 workstation's POWER1 (or RIOS-1) CPU, which was later developed into the PowerPC architecture.  Each of the eight VLSI chips contained one major subsystem, along with associated registers and cache; each line in the following diagram is a 32-bit bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bXTXL.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bXTXL.png&quot; alt=&quot;RIOS-1 chip complex&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Instruction Cache Unit (ICU)&lt;/strong&gt; - L1 I-cache, I-TLB, Program Counter (PC), Link Register (LR), Count Register (CTR), Condition Registers (CR0-7), dispatcher, branch predictor.  The ICU executed branch instructions internally, and dispatched other instructions (two per cycle) to the FXU and FPU.  The contents of the LR, CTR and CR could also be sent wholesale to one of the FXU's registers.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Fixed Point Unit (FXU)&lt;/strong&gt; - General Purpose Registers (R0-31), integer execution units, XER, accumulator, D-TLB.  Integer and address calculations were carried out here.  There was an output to the ICU to update the Condition Registers, upon which a subsequent branch could be predicated, or send a new value to the LR or CTR.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Floating Point Unit (FPU)&lt;/strong&gt; - Floating Point Registers (FP0-31), double-precision IEEE-754 execution units.  As with the FXU, there was an output to the ICU to update a CR.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Storage Control Unit (SCU)&lt;/strong&gt; - the smallest of the eight chips, this was responsible for arbitrating data transfers both between the other chips and with off-CPU buses.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;4x Data Cache Units (DCUs)&lt;/strong&gt; - each contained 16KB of the L1 D-cache, as well as ECC logic for workstation-class memory reliability.  The RAM was connected directly to these, rather than going through a separate &quot;northbridge&quot; as on the PC.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A ninth chip, known as the I/O Unit, was not formally part of the main CPU chip complex, but could be considered equivalent to the &quot;southbridge&quot; of PC motherboard chipsets.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-08-20T19:04:00.127" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12103" PostTypeId="2" ParentId="12100" CreationDate="2019-08-20T19:07:12.590" Score="4" Body="&lt;p&gt;its common to have minimal circuit in the CPU (complete) datasheet&lt;/p&gt;&#xA;&lt;p&gt;This is first I found:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://nptel.ac.in/courses/Webcourse-contents/IISc-BANG/Microprocessors%20and%20Microcontrollers/pdf/Teacher_Slides/mod1/M1L3.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;i8086 datasheet&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Here image taken from page 59:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/s7JYg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/s7JYg.png&quot; alt=&quot;image from pdf above&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Looks like this page handles it in more depth:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://edurev.in/studytube/Minimum-and-Maximum-Mode-8086-System-Microprocesso/98ca259c-5c41-4d19-a85c-8ddec2e7a9b7_t&quot; rel=&quot;nofollow noreferrer&quot;&gt;min/max mode 8086 system&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-20T19:07:12.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12104" PostTypeId="2" ParentId="12101" CreationDate="2019-08-20T22:12:15.383" Score="8" Body="&lt;p&gt;Minicomputers and mainframes typically used octal, as many early mainframes had word sizes that were a multiple of 3 bits, and so did some minis.  Operators and engineers within those environments became used to this, so even power-of-two word size minicomputers kept using octal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microcomputers, however, almost always had power-of-two word sizes for both address and data buses (or at least, a multiple of four bits), and there was a whole new generation of users who were not mentally locked into the mainframe/mini way of thinking.  It was thus natural to start using hexadecimal instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll probably find, therefore, that hexadecimal rose to prominence about when microcomputers did, in the mid to late 1970s.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-08-20T22:12:15.383" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12105" PostTypeId="2" ParentId="12101" CreationDate="2019-08-20T22:28:26.737" Score="22" Body="&lt;p&gt;Addressing the &quot;why&quot; part of the question - from my point of view as an assembly-code programmer on PDP-11 and VAX, the &quot;standard&quot; radix is most usefully chosen to match the instruction layout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PDP-11 had 8 registers and 8 operand-mode indicators.  Its double-operand instruction layout was&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 bit generally byte/word indicator (b)&#xA;3 bits opcode (o)&#xA;3 bits source mode (s)&#xA;3 bits source register (r)&#xA;3 bits destination mode (d)&#xA;3 bits destination register (R)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;making octal the perfect way to express it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;booosssrrrdddRRR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The VAX, on the other hand, had 16 registers and 16 bits for operand mode (though some combinations were used for short literals).   A basic operand specifier, in the variable-length instruction format was&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;4 bits mode (m)&#xA;4 bits register (r)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;thus hex was perfect to express these.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mmmmrrrr&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Of course, the larger address space used on VAX gives other advantages to hex: fewer characters in an address. This might have some bearing on &quot;when&quot;.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-08-20T23:33:01.923" LastActivityDate="2019-08-20T23:33:01.923" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12106" PostTypeId="2" ParentId="12101" CreationDate="2019-08-20T23:24:04.327" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;When and why&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;That is quite close tied to the IBM /360 and its introduction in 1964.&lt;/strong&gt; The /360 is based on the use of an 8 bit byte, 32 bit word (16 bit half word) and 24 bit address. Thus all basic memory items were multiples of 8 bit units - which are, without any remainder, best be displayed in hex. In addition displaying bytes in hex correlates well with the main reason to use 8 bit bytes as well: the usage to store two BCD in one byte (*1). A hex dump will show them as easy readable numerals - while the rest is code anyway. The same way it works for (half, double) words. In a dump they can be read and decoded as what they are without any additional concern (*2). In octal a word displayed as bytes, like in a dump, will get a different numeric expression than displayed as a (half, double) word (*3). Effectively the same reasoning why decimal isn't used in the first place (*4).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Before that&lt;/strong&gt; size of bytes, half words and words were (more often than not) multiples of 3, which works quite fine with octal. After all, grown up with decimal it's way less mental work to not use two numbers, than to learn six more. It seams more natural, doesn't it?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;After that&lt;/strong&gt; next to all new designs switched to 8 bit bytes to allow easy data exchange with IBM mainframes. This happened even faster for mini computers as they where usually supplementary systems to (/360ish) mainframes.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Additional thought about the transition and it being different due environment.&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12101/what-is-the-hex-versus-octal-timeline/12106#comment37751_12106&quot;&gt;Another-dave made the point&lt;/a&gt; that he'managed to cope with octal [on a PDP-11]', noting the prevalence of octal in an DEC envirionment even way later. Thinking of, the PDP-11 is a rather late comer to his as being from 1970. At that time the 6 to 8 bit byte was done history - likewise the switch to hex - for major suppliers. In fact, the PDP-11 marks that spot in DEC history. But DEC as a company (and its machines users) made a rather smooth transition from 6/12/36 bit computers to 8/16/32 bit - DEC did not only continue to support their existing line, but also continued to sell and even develop new models of their 36 bit line well into the 1980s.&lt;/p&gt;&#xA;&lt;p&gt;In contrast with IBM the switch was done in a brutal manner as the /360 not only almost killed the company but in turn replaced any other (mainframe) architecture. After that 8 bit (and hex) was rolled out across all new products and everything else eliminated quite fast. Some 'islands' remained with existing supercomuter installations into the early 1970s but got moved either to /360 or non-IBM (often CDC/Cray). Some of the later carrying on for more years with octal representation.&lt;/p&gt;&#xA;&lt;p&gt;Almost anyone entering the market after 1964 did start with 8 bit bytes and hex notion for binary data. This is (as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12108/6659&quot;&gt;Curt notes&lt;/a&gt;) especially true for micro-computers, as next to all of them started with 8 bit bytes and their OSes/UIs preferring hex notation.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;So while the general turning point it quite clear and fixed in time with IBMs choice for an 8 bit byte holding two BCD, adoption did vary across manufacturers, its user base and application areas.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Adoption of changes by humans are always gradual .. keep in mind, even after 100+ years of road regulation and harmonisation, there are still countries with right-hand traffic :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;See also &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11801/what-was-the-rationale-behind-36-bit-computer-architectures&quot;&gt;this question&lt;/a&gt; about the rational of 36 bit designs. While not a true duplicate, it's quite related here.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Previous machines (often) stored one decimal per 6 bit byte, thus wasting more than 1/3 of memory when handling decimal (which was a major task - after all, accountants always got the computers first, not scientists). By switching to 8 bit bytes, holding two nibbles with one decimal each, memory usage was close to optimum without resorting to base 100 (7 bit byte) or base 1000 (10 bit byte).&lt;/p&gt;&#xA;&lt;p&gt;*2 - Beyond &lt;a href=&quot;https://en.wikipedia.org/wiki/Endianness&quot; rel=&quot;nofollow noreferrer&quot;&gt;byte sex&lt;/a&gt; that is&lt;/p&gt;&#xA;&lt;p&gt;*3 - For example the Number &lt;code&gt;1024&lt;/code&gt;(Dec) is &lt;code&gt;0401&lt;/code&gt;(Hex Word) and &lt;code&gt;04 01&lt;/code&gt; (Hex Byte) but&lt;code&gt;002001&lt;/code&gt; (Oct Word) and &lt;code&gt;004 001&lt;/code&gt; (Oct Byte)&lt;/p&gt;&#xA;&lt;p&gt;*4 - BASIC programmers on home computers offer an additional nice example here, as many of them used assembly as series of PEEKs and POKEs expressed in decimal numbers. I met more than one who was fluent in 6502 assembly, still I had a hard time understanding their all decimal opcode numbers :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-21T17:53:37.223" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="12107" PostTypeId="2" ParentId="12100" CreationDate="2019-08-21T08:24:57.770" Score="5" Body="&lt;p&gt;The HMOS 8086 (as opposed to the CMOS 80C86) has a specified maxmial clock period of 500ns which translates to 2MHz in &lt;a href=&quot;https://www.archive.ece.cmu.edu/~ece740/f11/lib/exe/fetch.php?media=wiki:8086-datasheet.pdf&quot; rel=&quot;noreferrer&quot;&gt;its datasheet on page 15&lt;/a&gt; . It will fail to work if it is clocked significantly slower. So manual clocking is not possible on that chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what you &lt;em&gt;can&lt;/em&gt; do is to generate an arbitrary amount of wait states. My recommendation would be to set up the 8086 together with the 8284 clock generator, because the clock generator generates a properly synchronized ready signal. Then you &quot;just&quot; need to manually apply ready pulses to the 8284 to single-step the system. You should still make sure to meet the RDY timing requirements (check rise times and duration) of the 8284, that's why I put scare quotes around &quot;just&quot;.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2019-08-21T08:24:57.770" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12108" PostTypeId="2" ParentId="12101" CreationDate="2019-08-21T09:18:50.180" Score="16" Body="&lt;p&gt;The &lt;em&gt;when&lt;/em&gt; and &lt;em&gt;why&lt;/em&gt; of use of hexadecimal over octal representation&#xA;is intimately tied in with &lt;em&gt;where&lt;/em&gt; and &lt;em&gt;what&lt;/em&gt;: the use of one over the&#xA;other depended greatly on environmental factors, as well as the&#xA;machine itself, with programmer preference mainly being developed by&#xA;the influence of these.&lt;/p&gt;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12106/7208&quot;&gt;Raffzahan points out&lt;/a&gt;, IBM 360 environments used hexadecimal&#xA;from their start in the early 60s. This did not particularly influence&#xA;other computing environments (particularly minicomputers) because IBM&#xA;at that point was still its own separate world within computing for&#xA;both technical reasons (e.g., using EBCDIC instead of ASCII) and&#xA;because, despite the &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_IBM#1956_Consent_Decree&quot; rel=&quot;noreferrer&quot;&gt;1956 consent decree&lt;/a&gt;, they were still&#xA;successfully using various measures to stifle compatibility and&#xA;competition. (This wouldn't start to change in a serious way until the&#xA;various lawsuits started pouring out in 1968 and 1969.)&lt;/p&gt;&#xA;&lt;p&gt;Octal was a good fit for DEC minicomputers and early &amp;quot;micro-sized&amp;quot;&#xA;machines (such as the PDP-8) because of their word sizes (18, 36 and&#xA;12 bits). Existing systems were naturally used to help develop new&#xA;platforms, and thus new platforms after these would tend to inherit&#xA;the octal versus hexadecimal choice from the existing ones. Famously,&#xA;early versions of Microsoft Basic were assembled on a PDP-10 using&#xA;MACRO-10, which didn't support hexadecimal, and so the source code&#xA;used octal throughout where the bit values were considered important&#xA;to the programmer, despite hexadecimal being the preferred number base&#xA;for all of the first three CPUs (8080, 6800, 6502) for which it was&#xA;written.&lt;/p&gt;&#xA;&lt;p&gt;The same was true of the PDP-11, which was DEC's first major computer&#xA;where the various word sizes were all multiple of 4 bits rather than&#xA;3. Even though software development rapidly moved to being done on the&#xA;PDP-11 itself, DEC environments up to that time had been entirely&#xA;octal, and so with programmers of DEC equipment mostly being more&#xA;comfortable with that, it &amp;quot;stuck.&amp;quot; (While &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12105/7208&quot;&gt;other-dave points&#xA;out&lt;/a&gt; that the bitfields in the instructions tended to be 3&#xA;bits wide, I don't buy this as a major factor; by 1970 hand-assembly&#xA;was rare for machines of minicomputer size and up, in which category&#xA;the PDP-11 indubitably fell.)&lt;/p&gt;&#xA;&lt;p&gt;My guess is that the &amp;quot;it's what I'm used to&amp;quot; effect was at least part&#xA;of the reason for the front panel of the original Altair 8800 being&#xA;clearly organized for octal, despite Intel using hexadecimal&#xA;throughout &lt;a href=&quot;http://altairclone.com/downloads/manuals/8080%20Programmers%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;the 8080's documentation&lt;/a&gt;. However, there were a&#xA;number of instructions, particularly &lt;code&gt;MOV&lt;/code&gt;, with three-bit fields&#xA;aligned with octal, so perhaps they did also have in mind that people&#xA;might be hand-assembling to octal for this reason. (The typical Altair&#xA;owner was unlikely to have another, larger computer handy for&#xA;cross-development.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/4/43/Living_Computers_-_Altair_8800_%2839802981903%29.jpg&quot; alt=&quot;Altair 8800 front panel&quot; /&gt; (Source: &lt;a href=&quot;https://commons.wikimedia.org/wiki/Category:Altair_8800&quot; rel=&quot;noreferrer&quot;&gt;Wikimedia Commons&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;That said, the awkwardness here is apparent if you open the image in a&#xA;new tab and look at the upper set of markings (&amp;quot;SENSE SW&amp;quot; and &amp;quot;DATA&amp;quot;)&#xA;underneath the switches themselves; the split between the two 8-switch&#xA;halves falls in the middle of one of the groups of three. (The owner&#xA;of this system was obviously annoyed enough by the octal layout that&#xA;he added tape to the front panel to visually indicate four groups of&#xA;four!)&lt;/p&gt;&#xA;&lt;p&gt;The 6800-based &lt;a href=&quot;https://www.vintagecomputer.net/MITS/680/altair_680_front_panel_right.jpg&quot; rel=&quot;noreferrer&quot;&gt;Altair 680B&lt;/a&gt;, released barely a year later, had&#xA;already switched to panel markings that grouped the switches in fours,&#xA;rather than threes.&lt;/p&gt;&#xA;&lt;p&gt;By the late 70s the 8080/6800/6502 and their various progeny were&#xA;starting to dominate the computing landscape, at least as far as&#xA;numbers goes, and because they in particular tended toward use of&#xA;hexadecimal it became more likely that's what a programmer would be&#xA;comfortable with if he were not equally comfortable with both. But as&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/56/fadden&quot;&gt;fadden points out&lt;/a&gt; in a comment, even into the 90s there were&#xA;still environments where octal was the norm and hexadecimal was&#xA;generally rejected.&lt;/p&gt;&#xA;&lt;p&gt;This continues to this day in certain areas where it's unlikely ever&#xA;to change because octal is significantly easier to read than&#xA;hexadecimal. For example, the POSIX file permission bits are a group&#xA;of two bits for sgid/suid followed by three groups of three bits for&#xA;owner/group/other permissions of read/write/execute: these are&#xA;normally and most easily specified (both for command line tools such&#xA;as &lt;code&gt;chmod&lt;/code&gt; and when programming) as four octal digits.&lt;/p&gt;&#xA;&lt;p&gt;So if you're going to try to treat the computing community as&#xA;monolithic, and just go on the number of programmers that preferred&#xA;one over the other, I'd agree with &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12104/7208&quot;&gt;Chromatix&lt;/a&gt; that the &amp;quot;shift&amp;quot;&#xA;happened in the mid- to late-70s. But I think that is probably too&#xA;simplistic a way of looking at it to be a particularly valuable&#xA;insight.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-21T22:51:37.230" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="12109" PostTypeId="1" AcceptedAnswerId="12110" CreationDate="2019-08-21T10:34:04.503" Score="15" ViewCount="931" Body="&lt;p&gt;I know that the 486SX had its FPU disabled, maybe by binning 486 CPUs into those with and without functioning FPUs. But did Intel eventually make a 486SX revision without an FPU on the die?&lt;/p&gt;&#xA;" OwnerUserId="8337" LastEditorUserId="13480" LastEditDate="2019-08-21T20:29:00.683" LastActivityDate="2019-08-24T19:37:50.307" Title="Were there 486SX revisions without an FPU on the die?" Tags="&lt;80486&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12110" PostTypeId="2" ParentId="12109" CreationDate="2019-08-21T11:19:50.167" Score="23" Body="&lt;p&gt;Yes, Intel did make 486SX CPUs with no FPU on the die. You can see the difference in die shots, &lt;em&gt;e.g.&lt;/em&gt; from &lt;a href=&quot;http://www.cpu-world.com/forum/viewtopic.php?t=26344&quot; rel=&quot;noreferrer&quot;&gt;this CPU-World.com thread&lt;/a&gt;: &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Intel_486SX_SX411.jpg&quot; rel=&quot;noreferrer&quot;&gt;early 486SXs&lt;/a&gt; are nearly indistinguishable from &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Intel_80486DX_33.jpg&quot; rel=&quot;noreferrer&quot;&gt;486DXs&lt;/a&gt;, but &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Intel_486SX_SX679.jpg&quot; rel=&quot;noreferrer&quot;&gt;later 486SXs&lt;/a&gt; are simpler (the right-hand side has been reworked, and is missing the FPU which was in the lower-right-hand corner).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a 486DX:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/3/31/Intel_80486DX_33.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/3/31/Intel_80486DX_33.jpg&quot; alt=&quot;486DX die shot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is an early 486SX, with a disabled FPU on-die:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/1/12/Intel_486SX_SX411.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/1/12/Intel_486SX_SX411.jpg&quot; alt=&quot;486SX die shot with disabled FPU&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a later 486SX, with no FPU on-die:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/9/9f/Intel_486SX_SX679.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/9/9f/Intel_486SX_SX679.jpg&quot; width=&quot;543&quot; alt=&quot;486SX die shot with no FPU&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-08-22T07:26:09.257" LastActivityDate="2019-08-22T07:26:09.257" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12111" PostTypeId="1" AcceptedAnswerId="12112" CreationDate="2019-08-21T11:22:16.083" Score="95" ViewCount="27761" Body="&lt;p&gt;On faster MS-DOS systems, it wasn't entirely uncommon for applications built using Borland's Turbo Pascal to fail to start, and (before exiting back to the command prompt) to report a division by zero error immediately upon launch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I recall, this behavior could be observed even with simple &quot;Hello world&quot; style programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Patches were available which fixed the issue both for freshly built executables as well as already-built ones, but my question here is: &lt;strong&gt;What actually caused the error in the first place?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A great answer will also discuss &lt;strong&gt;what the fix was, and how it fit into the executable code without requiring a recompilation.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="357" LastEditorUserId="15334" LastEditDate="2021-02-21T16:14:17.063" LastActivityDate="2021-02-21T16:14:17.063" Title="Why did MS-DOS applications built using Turbo Pascal fail to start with a division by zero error on faster systems?" Tags="&lt;ibm-pc&gt;&lt;pascal&gt;&lt;borland&gt;&lt;delay-loop&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="12112" PostTypeId="2" ParentId="12111" CreationDate="2019-08-21T11:30:08.823" Score="135" Body="&lt;p&gt;Turbo Pascal programs start by calibrating a delay loop (so that the &lt;code&gt;Delay&lt;/code&gt; function knows how much to spin to achieve a certain delay). The calibration counts the number of times a certain loop is run for 55ms (as measurable using the PC’s timer interrupt with its default setting), then divides the number of loops by 55 so that &lt;code&gt;Delay&lt;/code&gt; can then busy-wait in millisecond increments. On fast CPUs, 200MHz and up (on Intel CPUs), the loop runs too many times, and the division overflows. The CPU throws a “divide overflow” error, which the Pascal runtime reports as a division by zero error.&lt;/p&gt;&#xA;&lt;p&gt;There are quite a few sites which explain this and provide patches; for example, &lt;a href=&quot;http://ss64.net/merlyn/pas-r200.htm&quot; rel=&quot;noreferrer&quot;&gt;J R Stockton’s page on the topic&lt;/a&gt;, which says&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Borland Crt unit is included in the TURBO.TPL &amp;amp; TPP.TPL libraries; its initialisation routine will be linked if Crt is cited in a uses clause. The problem lies in the initialisation of Crt.Delay, but will appear if the Crt unit is cited regardless of whether Delay or any other Crt routine is called.&lt;/p&gt;&#xA;&lt;p&gt;During Crt unit initialisation, a loop executed for 55 ms increments a counter. Up to and in TP6, this was a 16-bit counter, and would happily overflow on a PC above about 20 MHz, leading to subsequent incorrect delays.&lt;/p&gt;&#xA;&lt;p&gt;The counter in TP7 &amp;amp; BP7 is now 32-bit, and should not itself overflow until processor speeds reach the 100 GHz region. But the count is divided by 55, and if the result cannot fit into a 16-bit word, the CPU raises a &amp;quot;divide overflow&amp;quot; error. This is reported by Borland as a &amp;quot;divide by zero&amp;quot; error, Runtime Error 200, since the only way that a user's Pascal code can cause a divide overflow is by dividing by zero.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12111/why-did-ms-dos-applications-built-using-turbo-pascal-fail-to-start-with-a-divisi/12112?noredirect=1#comment37865_12112&quot;&gt;pointed out by Peter Cordes&lt;/a&gt;, the last sentence is incorrect; it’s easy to cause a divide overflow using integer division in Pascal. Borland’s runtime does however report that as a “divide by zero” error.)&lt;/p&gt;&#xA;&lt;p&gt;Arguably the best fix is to fix the Crt unit, and relink Pascal program. There are various approaches; for example, increasing the space allocated for the delay counter in &lt;code&gt;CRT.ASM&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DelayCnt        DD      ?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(instead of &lt;code&gt;DW&lt;/code&gt;), then altering the calibration routine to use both words instead of a single word.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Patching&lt;/em&gt; a fix into existing executables isn’t all that obvious since the fixed calibration routines take more space than the original, but that’s exactly what &lt;a href=&quot;http://ss64.net/merlyn/pas-r200.htm#tppatch&quot; rel=&quot;noreferrer&quot;&gt;Andreas Bauer’s patch&lt;/a&gt; (available on &lt;a href=&quot;https://www.sac.sk/download/utilprog/tppatch.zip&quot; rel=&quot;noreferrer&quot;&gt;SAC&lt;/a&gt;, &lt;a href=&quot;http://www.retroarchive.org/garbo/pc/turbopa7/tppatch.zip&quot; rel=&quot;noreferrer&quot;&gt;Garbo&lt;/a&gt;, or &lt;a href=&quot;https://smartcomputerinc.com/tppatch/&quot; rel=&quot;noreferrer&quot;&gt;manassehkatz’s site&lt;/a&gt;) does: he shortened earlier initialisation code to make room for his fixed calibration routine, as detailed in the &lt;code&gt;README&lt;/code&gt; file in his archive. Andreas’ patch doesn’t increase &lt;code&gt;DelayCnt&lt;/code&gt;’s size, it only ensures that the calibration routine doesn’t overflow; as a result, on fast CPUs the &lt;code&gt;Delay&lt;/code&gt; routine might not wait as long as intended.&lt;/p&gt;&#xA;&lt;p&gt;Another approach is used by &lt;a href=&quot;http://ss64.net/merlyn/pas-r200.htm#TP2&quot; rel=&quot;noreferrer&quot;&gt;c’t’s patch&lt;/a&gt;: it relies on shortening another function in Crt (&lt;code&gt;Break&lt;/code&gt;) to free up space for an improved version of &lt;code&gt;Delay&lt;/code&gt;, and adjusting the divisor in the calibration routine so that the division no longer overflows. The calibration routine’s result isn’t used in this scenario.&lt;/p&gt;&#xA;&lt;p&gt;There are also &lt;a href=&quot;http://www.reimagery.com/fsfd/system.htm#pascalfix&quot; rel=&quot;noreferrer&quot;&gt;a number of TSRs&lt;/a&gt; which will handle the problem at runtime, without patching; one significant difference here is that most (if not all) such TSRs won’t work with protected-mode Turbo Pascal programs. Here also there are number of different approaches. &lt;code&gt;PROT200&lt;/code&gt; relies on handling the divide-by-zero error in the TSR instead of letting Borland’s code handle it. &lt;code&gt;TP7P5FIX&lt;/code&gt; hooks the interrupt setup function in DOS and intercepts the initialisation code when it tries to setup its divide-by-zero handler, instead patching the initialisation code to return the highest possible value (0xFFFF). &lt;code&gt;R200FIX&lt;/code&gt; patches dummy &lt;code&gt;OUT&lt;/code&gt; instructions into the delay loop, which allows it to provide correct delays. (Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/10479/michael-karcher&quot;&gt;Michael Karcher&lt;/a&gt; for the investigations.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-23T13:20:41.400" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="12113" PostTypeId="1" CreationDate="2019-08-21T18:25:54.340" Score="13" ViewCount="2416" Body="&lt;p&gt;The power supply of my 386DX computer (an unknown brand M320 motherboard) is not trustworthy anymore, so I'm planning to use an ATX power supply, plus an ATX to AT adapter for P8-P9 connectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is that AT power suuplies provide +5V, +12V, -5V and -12V. ATX power supplies, until not much time ago, supplied the same outputs, plus 3.3V, but it seems that the -5V output has phased out, and some ATX supplies mark that pin as NC (not connected).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when it comes to chosing the right ATX power supply (otoh, one that does not have any fans in the upper side, but in the back side, because ATX supplies are mounted upside down in an AT case and the fan faces the upper side of the case which is most ofently closed) it's hard to tell if the ATX connector includes the white cable that should carry -5V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I would like to know if AT-class motherboards need that supply for its internal things (chipset, CPU, SuperIO, etc). I can say that the very usual UM82C206L chip, used to implement most of the AT system chips (DMA, RTC, PIC, Timer, etc) does use only +5V.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2019-08-22T22:19:37.080" Title="Do AT motherboards (286, 386, 486) really need -5V (besides redirecting it to ISA connectors)?" Tags="&lt;power&gt;&lt;pc-at&gt;" AnswerCount="4" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12114" PostTypeId="2" ParentId="12113" CreationDate="2019-08-21T18:32:33.047" Score="10" Body="&lt;p&gt;Anecdotal answer, because I don't feel like googling for lots of schematics: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Most AT mainboards only use +5V. &lt;/li&gt;&#xA;&lt;li&gt;In some cases, +12V is used for miscelleanous stuff, I remember an auto-voltage mainboard where the +5V/+3.45V switch for the 80486 processor used the voltage detection pin, and controlled the +5V Vcc connection using a FET that got its gate drive from +12V (via a resistor; pulled down if a 3.45V cpu is installed).&lt;/li&gt;&#xA;&lt;li&gt;If a board has onboard serial ports, the &lt;a href=&quot;http://www.ti.com/product/MC1488&quot; rel=&quot;noreferrer&quot;&gt;1488&lt;/a&gt;/&lt;a href=&quot;http://www.ti.com/product/MC1489&quot; rel=&quot;noreferrer&quot;&gt;1489&lt;/a&gt; level shifters also use +/-12V. &lt;/li&gt;&#xA;&lt;li&gt;You should nearly always be fine with missing -5V.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="1953" LastEditDate="2019-08-21T20:29:25.397" LastActivityDate="2019-08-21T20:29:25.397" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12115" PostTypeId="2" ParentId="12101" CreationDate="2019-08-21T18:38:38.050" Score="1" Body="&lt;p&gt;As others stated, of course this is related to word size on your machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started learning higher programming languages on a WANG 2200T in 1977, and everything was hexadecimal there. My &quot;Junior Computer&quot; in 1980 was programmed in 6502 assembly, and everything was hexadecimal there as well. The first time I heard about octal notation was when I learned C with the K&amp;amp;R book in 1982. And my understanding was that on older machines you would prefer octal to hexadecimal.&lt;/p&gt;&#xA;" OwnerUserId="6650" LastActivityDate="2019-08-21T18:38:38.050" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12116" PostTypeId="2" ParentId="12113" CreationDate="2019-08-21T18:48:23.110" Score="6" Body="&lt;p&gt;Looking at the three ATX PSUs I have to hand, all three of them have a bottom-mounted fan, and only one (the oldest, least efficient and noisiest) provides a -5V line.  That's a Nexus NX-3500.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the others is actually an &lt;a href=&quot;https://www.silverstonetek.com/product.php?pid=527&amp;amp;area=en&quot; rel=&quot;noreferrer&quot;&gt;SFX-L form factor&lt;/a&gt;, which mounts to an ATX case using an adapter plate which leaves a significant gap on all sides relative to a full-size ATX PSU.  This may expand your options somewhat, especially as the SFX-L mounting bolts are symmetric, allowing you to mount it with the fan inwards in free air.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7t9YB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7t9YB.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To fit an ATX PSU to an AT m/board, you'll need to insert an adapter between the plug and socket on the low-voltage side.  You could take advantage of this to derive the -5V supply from the -12V one, as not much current is carried on that line to begin with.  A &lt;a href=&quot;https://eu.mouser.com/ProductDetail/ON-Semiconductor/MC7905BTG?qs=sGAEpiMZZMt1hubY80%2Fs8CMR5%252BQE%2F8Ay2OsSxsDWLJk%3D&quot; rel=&quot;noreferrer&quot;&gt;7905-series linear regulator&lt;/a&gt; should do the trick; just add a small heatsink on top and a bypass capacitor on each side.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2019-08-21T19:12:34.710" LastActivityDate="2019-08-21T19:12:34.710" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12118" PostTypeId="2" ParentId="12113" CreationDate="2019-08-22T02:10:58.967" Score="2" Body="&lt;h2&gt;Engineering is Driven by Specifications&lt;/h2&gt;&#xA;&lt;p&gt;In general, it is always dicey to not implement the full breadth of a spec.&lt;/p&gt;&#xA;&lt;p&gt;This is engineering, not magic or wish.&lt;/p&gt;&#xA;&lt;p&gt;In the absence of other information, you &lt;em&gt;must&lt;/em&gt; assume that all voltages in the  spec are required.&lt;/p&gt;&#xA;&lt;p&gt;So to explicitly answer your question,  the only sound answer is &amp;quot;yes&amp;quot;, although there may be many exceptions.&lt;/p&gt;&#xA;&lt;h3&gt;Your Board May Be an Exception&lt;/h3&gt;&#xA;&lt;p&gt;For a particular AT motherboard, one could examine the schematic or trace the -5 V pin to be sure it doesn't connect with anything.&lt;/p&gt;&#xA;&lt;h3&gt;Seeming to Work Does Not Equal Actually Working&lt;/h3&gt;&#xA;&lt;p&gt;The -5 V rail may not be needed at all, or it may only be needed for functions you aren't currently using.  Any particular motherboard may or may not require the negative voltage.  Add-on cards may or may not require the negative voltage.&lt;/p&gt;&#xA;&lt;h3&gt;At Least One Did Require -5 V&lt;/h3&gt;&#xA;&lt;p&gt;At an earlier company,  we designed a 386 motherboard.  As I remember,  it used -5 V, to power the on-board RS-232 drivers, probably with a capacitive voltage doubler.  I think we also had an OP-amp using negative voltage.   I would need a schematic to verify those statements.&lt;/p&gt;&#xA;&lt;p&gt;For early motherboards,  it is possible that PMOS parts were used,  some of which used a -5 V supply.&lt;/p&gt;&#xA;" OwnerUserId="10500" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-22T22:19:37.080" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12119" PostTypeId="2" ParentId="9030" CreationDate="2019-08-22T03:21:55.933" Score="0" Body="&lt;p&gt;It seems unlikely to me that doing cycle-stepping rather than&#xA;instruction-stepping was cost-related or a kludge. First, the logic to&#xA;complete an instruction before doing something else is required anyway&#xA;in order to handle interrupts since interrupts must always occur&#xA;between instructions, not cycles. Second, the Motorola 6800, a CPU of&#xA;the same generation and slightly lower transistor count (~5000 as&#xA;opposed ~6000 for the 8080) did offer instruction-stepping (as seen in&#xA;&quot;Figure 13 - H̅A̅L̅T̅ and Single-instruction Execution for System Debug&quot;&#xA;in the &lt;a href=&quot;https://usermanual.wiki/Document/19838BitMicroprocessorandPeripheralData.2109768863/view&quot; rel=&quot;nofollow noreferrer&quot;&gt;data sheet&lt;/a&gt;); it did not offer cycle-steppping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nor does this seem a strange way of doing things; in fact it seems a&#xA;more reasonable way of doing things. &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/9039/7208&quot;&gt;Raffzahn points out&lt;/a&gt; that&#xA;this is more useful for hardware debugging (I can see how this would&#xA;be better for checking that, e.g., address decoding logic is accessing&#xA;the right device), but even leaving that aside it seems to me also to&#xA;make software debugging easier when working from the front panel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Playing around with &lt;a href=&quot;https://www.s2js.com/altair/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this simulator&lt;/a&gt; I noticed that one of my&#xA;more frequent errors was entering the wrong value into a location when&#xA;loading a program. For example, at &lt;code&gt;0003h&lt;/code&gt; I might have meant to enter&#xA;&lt;code&gt;IN 33h&lt;/code&gt; (&lt;code&gt;CB 33&lt;/code&gt;) but instead say I entered &lt;code&gt;IN 32h&lt;/code&gt; (&lt;code&gt;DB 32&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That simulator (incorrectly) single-steps instructions, rather than&#xA;cycles, and so my debugging sequence ends up looking like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Address     Data&#xA;0003        (previous value)        Before stepping into that instr&#xA;0005        (data read from port)   After stepping the IN 33h&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The mistake isn't at all obvious here, though I might wonder why the&#xA;port returned the &quot;wrong&quot; value. But if we were using a real 8800 (or&#xA;a better simulator), stepping through in cycles would clearly show the&#xA;problem:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Address     Data&#xA;0003        (previous value)        Before stepping into that instr&#xA;0004        DB                      Read of IN&#xA;0005        32                      Ah! Wrong port value!&#xA;3232        (data read from port)   What was read and whence, should I decide to continue.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Additional status lights provide further help showing what's going on&#xA;as well. The MEMR (memory read), INP (input from port), M1&#xA;(instruction read cycle) and WO (read/write) indicators would all&#xA;change during the above and would provide further confirmation that my&#xA;code is (or is not) executing as I expect it to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(There may actually be some errors in the details above, since I don't&#xA;have handy an Altair 8800 or simulator that does stepping correctly.&#xA;But I think this still gets the idea across.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-08-22T03:21:55.933" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12120" PostTypeId="2" ParentId="12113" CreationDate="2019-08-22T07:45:04.440" Score="0" Body="&lt;p&gt;I would say: test it. If everything you need works fine without -5V then it would not matter even if your motherboard used it for something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you find out it does not work properly without -5V (or if you want to be extra certain nothing is missing), why not just add a 7905 regulator to generate -5V from -12V. Those cost roughly a dollar a pop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They have 3 pins, Input (connect -12V), GND (connect GND) and Output (connect to motherboards -5V)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;79xx series regulators are made by many manufacturers and are generally negative voltage linear regulators. Linear regulator are easier to use than switching regulators, but has the downside of burning excess wattage to heat. So if your motherboard would draw 100mA of -5V, 7905 would dissipate 7V*100mA = 700mW of heat.&lt;/p&gt;&#xA;" OwnerUserId="15057" LastEditorUserId="15057" LastEditDate="2019-08-22T07:55:58.883" LastActivityDate="2019-08-22T07:55:58.883" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12121" PostTypeId="2" ParentId="5544" CreationDate="2019-08-22T08:16:38.710" Score="2" Body="&lt;p&gt;There's no need to go down the hardware route to run 32-bit apps. 32-bit apps run on 64-bit Windows. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, not all old apps run on newest operating systems despite the bitness. I own for example CorelDraw X3, which does not run on Windows 10. But I run it on a 32-bit Windows 7 Client OS on virtual machine regularly (on a 64-bit Windows 10 host). That setup is also useful for running 16-bit apps on a 64-bit windows Machine, which is not supported directly.&lt;/p&gt;&#xA;" OwnerUserId="15057" LastActivityDate="2019-08-22T08:16:38.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12122" PostTypeId="1" AcceptedAnswerId="12128" CreationDate="2019-08-22T08:19:10.697" Score="9" ViewCount="3166" Body="&lt;p&gt;I’ll clarify what I mean. The sound chip (c64's SID, spectrum's Yamaha, etc.) is connected either to the input / output port, which will be reserved for the sound chip, or directly to the CPU data bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say the sound chip is connected to the port. And let's say that the CPU is 8086/8088.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turns out that for the chip to play music, I need to submit the assembler commands of this sound chip to sound chip from the assembler commands of the CPU. And this must be done at regular intervals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something like (x86 pseudo asm) :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;byte db portSound 2&#xA;byte db musicPart1 0x5A //asm command of sound chip&#xA;byte db musicPart2 0x2C&#xA;byte db musicPart3 0x10&#xA;&#xA;out portSound, musicPart1 &#xA;//here delay 1&#xA;out portSound, musicPart2 &#xA;//here delay 2&#xA;out portSound, musicPart3&#xA;//here delay 3&#xA;&#xA;etc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, is there a base in which for a sound chip I can find music for it in the form of assembler commands for this chip?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I mean source code for real music, and not just a single tone sounds/melodies like for the buzzer in Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S.S. I searched google for the information itself. Finding music in different formats is not a problem. Playing it on a PC is also not a problem. If the music format contains commands for the sound chip, it means that it must also contain delays (for a reading program on a PC). It turns out that I should just find the music in the right format, open it in the hex editor and take out byte by byte, according to the format description?&lt;/p&gt;&#xA;" OwnerUserId="13852" LastEditorUserId="5382" LastEditDate="2019-08-23T12:28:56.417" LastActivityDate="2019-08-24T09:52:56.697" Title="Is there any music source code for sound chips?" Tags="&lt;cpu&gt;&lt;sound&gt;" AnswerCount="6" CommentCount="3" FavoriteCount="5" ClosedDate="2019-08-24T09:52:57.903" ContentLicense="CC BY-SA 4.0" />
  <row Id="12123" PostTypeId="2" ParentId="12122" CreationDate="2019-08-22T08:28:15.807" Score="6" Body="&lt;p&gt;The &lt;a href=&quot;http://www.vgmpf.com/Wiki/index.php?title=SID&quot; rel=&quot;noreferrer&quot;&gt;&quot;SID&quot; file format&lt;/a&gt; is basically this, especially if you're using an actual SID. However it's an executable in 6502 assembly, so to run it on another architecture some work will be required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lots of MIDI music is also adaptable to run on various sound chips, although that will require you to set up the &quot;instruments&quot;. This was popular with the &quot;AdLib&quot; synthesis cards for PCs.&lt;/p&gt;&#xA;" OwnerUserId="778" LastActivityDate="2019-08-22T08:28:15.807" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12125" PostTypeId="2" ParentId="12122" CreationDate="2019-08-22T08:47:16.803" Score="4" Body="&lt;p&gt;I guess what you need is a file which contains a dump of the registers modified and at what time they were modified. Such dumps can be created, for example, from a SID file. Not much time ago, I updated a little program:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;SIDDump V1.06 by Cadaver (loorni@gmail.com) and Stein Pedersen&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That, esentially, is a C64 emulator, which can accept a SID file as an input, &quot;play it&quot; for a certain amount of time, and produce a binary dump file of values written to all registers every 20 miliseconds.&#xA;&lt;a href=&quot;http://www.zxuno.com/forum/viewtopic.php?f=47&amp;amp;t=491&amp;amp;p=16383#p16376&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.zxuno.com/forum/viewtopic.php?f=47&amp;amp;t=491&amp;amp;p=16383#p16376&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2019-08-22T08:47:16.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12126" PostTypeId="2" ParentId="12122" CreationDate="2019-08-22T09:41:50.177" Score="5" Body="&lt;p&gt;There are many player programs with source code to play various formats for these chips. Many music files from e.g. DOS games for AdLib (Yamaha YM3812 chip) can be directly in register dump format or can be converted to one, such as DRO, IMF, RAW or VGM just to name a few. DosBox can save DRO files when a game is running.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-08-22T09:41:50.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12127" PostTypeId="2" ParentId="12122" CreationDate="2019-08-22T10:11:34.710" Score="6" Body="&lt;p&gt;To me this question is not really good because it cannot be properly answered. You really need to decide what specific chip/format/platform you want to focus on and read up. At the moment your ideas about how things might work show a clear lack of background research.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are actually &lt;em&gt;many&lt;/em&gt; sound chips, even &lt;em&gt;many approaches to sound generation&lt;/em&gt;. If we are talking about retro sound chips - none of them use &quot;assembler commands&quot;. They do not execute commands. Instead, they are specialized waveform generators, with various parameters fed to them by a player.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Changing parameters of the generators changes the sound, usually with an immediate effect. So the player works off an external timer to check what needs to be changed every once in a while and, when necessary, sends the relevant data to the sound chip. How this external timer works is again platform dependent. Some retro computers have system timers and can use them; many rely upon a video vertical blank interrupt to provide a regular timing event (this is why 50hz or 60hz timers are so common for the basic unit of time in retro trackers). Some retro computers do not have even that, so they have to resort to hand-tuned timing loops of various kinds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the players themselves &lt;em&gt;also&lt;/em&gt; vary massively. Some of the players would store literal parameter values to be passed to the sound chip at every timer tick (such players are often called players of register dumps). Storing music in the form of register dumps is actually not popular, because they tend to require too much storage space for the music data. Hence, most players, in an attempt to save storage space, do substantial amount of processing while translating from tracker representations, or intermediate representations, into register values for the sound chip. So, simply reading tracker music representation in binary is going to be fairly hard, because such translation would require very detailed understanding of how tracker commands are going to be interpreted by the player.&lt;/p&gt;&#xA;" OwnerUserId="5039" LastEditorUserId="5039" LastEditDate="2019-08-22T13:05:10.937" LastActivityDate="2019-08-22T13:05:10.937" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12128" PostTypeId="2" ParentId="12122" CreationDate="2019-08-22T11:56:27.930" Score="24" Body="&lt;p&gt;From your source code, it looks like you're expecting to be able to find individual songs as standalone assembly listings for a 'master' CPU (such as your 8086) that you can execute to play a song on a sound chip. Outside of very small examples, that's not a very useful way to use a sound chip, since unless the song code is designed like a &lt;a href=&quot;https://en.wikipedia.org/wiki/Coroutine&quot; rel=&quot;nofollow noreferrer&quot;&gt;coroutine&lt;/a&gt;, you won't be able to do anything else while the song is playing. (1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(An earlier version of this answer misread your source code, apologies.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a game, the more common usage is to have a music playback routine separate from the song data, called at regular intervals to interpret a data-dense music binary format, to send instructions to the sound chip on every 'tick'. &lt;strong&gt;This routine is often referred to as a 'tracker', 'player', 'monitor' or 'playroutine'&lt;/strong&gt; (2). This is what I think you're looking for.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Short answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an example of a complete game written in Z80 assembly for the Sega Master System that has a music player routine and binary music format, you can look at the source to &lt;a href=&quot;https://www.mrdictionary.net/gravitybeam_mastersystem/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Gravity Beam: Master Gaiden&lt;/em&gt;&lt;/a&gt; (MIT licensed). Disclaimer: I wrote it. :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can listen to the music on &lt;a href=&quot;https://www.youtube.com/watch?v=SfdC1Mm-G0A&quot; rel=&quot;nofollow noreferrer&quot;&gt;YouTube&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The music binary blobs are stored in &lt;code&gt;musicmodule_*.bin&lt;/code&gt;, and the playback routine is in &lt;code&gt;audio.z80asm&lt;/code&gt;. My routines are heavily commented, so &lt;strong&gt;you'll be able to see a typical way to control a SN76489 sound chip from within a game running on a Z80&lt;/strong&gt;. (3)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Long answer, and why your question isn't straightforward to answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a game, music playback would be controlled by a music library on the master CPU, with its own state machine in memory wrapping the hardware state machine of the underlying sound chipset. The role of the music library would be to abstract the sound chip and present simpler routines for the game code to use. It would hold all of the state regarding the current song, current song position, volume, etc. The music library would have entry points like: &lt;code&gt;music_select_song:&lt;/code&gt;, &lt;code&gt;music_begin_playback:&lt;/code&gt;, &lt;code&gt;music_pause:&lt;/code&gt;, &lt;code&gt;music_set_volume:&lt;/code&gt;. The musical data itself lives in a separate binary blob.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game would advance the music playback at regular intervals (4) by calling some &lt;code&gt;music_advance:&lt;/code&gt; routine that would move some internal pointer along the current music track in memory, read the next bytes of data, identify what notes had been triggered or silenced, or what track parameters must be altered, and alter the state of the music chipset appropriately through &lt;code&gt;OUT&lt;/code&gt; or memory mapped I/O. (5) If this sounds like the role of a MIDI player, well, that's because that's exactly what a MIDI player does. :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On retro systems, music binary format standards were uncommon, and ROM and RAM space were at a premium so formats and trackers and players were often bespoke - written by the musicians themselves to easily expose whatever functionality they felt they needed, like &lt;a href=&quot;https://www.exotica.org.uk/wiki/TFMX&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chris Hülsbeck &amp;amp; Peter Thierolf's TFMX&lt;/a&gt; format. Player routines could even add additional functions that the underlying hardware didn't have, which would have to be simulated by the routine as it proceeded through the song - things like pitch slides, rapid arpeggios (&lt;a href=&quot;https://www.youtube.com/watch?v=Tfm_0YGPCbo&quot; rel=&quot;nofollow noreferrer&quot;&gt;like the characteristic 'bubbling' SID sound&lt;/a&gt;) and warping/flanging from duty-cycle tricks. These would either be calculated in real time by the play routine (producing a pseudo-instrument sometimes known as a 'patch' or 'programme') or baked into a list of instructions by the editor (so effects like echo and reverb would be achieved by the editor simply adding additional quieter notes automatically into the note list).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;em&gt;Gravity Beam: Master Gaiden&lt;/em&gt;, the binary music format is heavily packed to save ROM space, and the music player routine must analyse the bytes of the song to determine the delay until the next event, the track to alter, the pitch, and the patch to use (by itself the SN76489 doesn't have &lt;a href=&quot;https://en.wikipedia.org/wiki/Envelope_(music)&quot; rel=&quot;nofollow noreferrer&quot;&gt;ADSR&lt;/a&gt; envelopes, so fading notes in and out must either be in-song instructions or part of the patch).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And every system is different, and ports of the same game across different 8-bit platforms might be written (quickly) by completely different people, the underlying music code could be totally different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the modern day, it's much easier to write something that would play an unmodified MIDI file on any system by interpreting the data in real-time, or translate a MIDI file off-line in advance to a more appropriate format for a given system. With better computers and communication, there are much more transparent standards and cooler tools and editors and off-line patch simulators for things like the YM2612.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So, anything is possible!&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be able to answer your question, &lt;strong&gt;you'd need to give us an example of what sound chip you're interested in&lt;/strong&gt;. Then, we'd be able to identify tracker programs to edit common music formats for that chip, and suggest playback routines to go with it. Software like &lt;a href=&quot;http://www.sidmusic.org/goattracker/mac/&quot; rel=&quot;nofollow noreferrer&quot;&gt;GoatTracker for the C64 (and its SID)&lt;/a&gt; and &lt;a href=&quot;http://coppershade.org/articles/More!/Topics/A_Guide_to_Playroutines/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ProTracker for the Amiga (and its Paula)&lt;/a&gt; are editors that come with an assembly language playback routine you can use in your projects to play their songs. An example of a commercial music library used at the time would be &lt;a href=&quot;https://segaretro.org/GEMS&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sega GEMS for the Mega Drive&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to make a standalone music player of the kind you describe (uninterruptible, no graphics ability, etc.), then you'll still need to tell us what system and what sound chip it ought to target. Some tracker editors can output a standalone playable listing like the one you want, like the BASIC-headered self-loading and self-executing SID files described in pjc50's answer. :)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Unless you're asking for 'all systems' and want a catalogue-like list of systems together with their most-common editor+playback pairs?&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;An example of a situation where sound code and data would be interleaved is if you had very limited CPU and controlled some aspect of the chipset directly with asm commands to produce some effect. E.g. playing a digitised speech on a 48K Spectrum like in &lt;em&gt;Ghostbusters&lt;/em&gt;. In &lt;em&gt;Ghostbusters&lt;/em&gt; everything freezes while the shout is played, so I don't doubt there's a &lt;code&gt;play_ghostbusters_speech:&lt;/code&gt; routine in there somewhere with amplitudes and delays all mixed up together.&lt;/li&gt;&#xA;&lt;li&gt;A 'tracker' more commonly refers to the editor for making tracker songs (ProTracker, OctaMED, GoatTracker etc.), but the playing routine is often called a 'tracker' too. A monitor is a term for a resident ROM/RAM program that lives in the background and can be invoked to describe the current state of a program. Since a music player lives in the background, it is occasionally called a monitor. &lt;a href=&quot;https://www.exotica.org.uk/wiki/SoundMon&quot; rel=&quot;nofollow noreferrer&quot;&gt;SoundMon by Brian Postma&lt;/a&gt; is music player/editor on the Amiga found in games like Exodus 3010. &lt;/li&gt;&#xA;&lt;li&gt;Incidentally, since the Sord M5 / CGL M5 has the same sound chip and processor, I've had the same routine running on an M5 to play the same music (with a little accomodation for the different timing).&lt;/li&gt;&#xA;&lt;li&gt;This can also be called by an interrupt built into the system hardware, like a Master System VBlank interrupt, or a configurable timer. &lt;/li&gt;&#xA;&lt;li&gt;If you'd like to see what SN76489 'instructions' look like, you can see &lt;a href=&quot;http://www.vgmpf.com/Wiki/images/7/78/SN76489AN_-_Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The SN76489 datasheet&lt;/a&gt; or &lt;a href=&quot;http://www.smspower.org/Development/SN76489&quot; rel=&quot;nofollow noreferrer&quot;&gt;the programming guide at SMS POWER&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15060" LastEditorUserId="-1" LastEditDate="2019-08-24T09:52:56.697" LastActivityDate="2019-08-24T09:52:56.697" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12129" PostTypeId="1" AcceptedAnswerId="15024" CreationDate="2019-08-22T19:40:23.193" Score="6" ViewCount="534" Body="&lt;p&gt;For those who want to study retro computing in depth, starting by understanding 74xxx logic and CPU design is (IMHO), one of the best paths there is. Malvino's &quot;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0028005945&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Digital Computer Electronics&lt;/a&gt;&quot; (DCE), with its SAP-1, 2 and 3 is probable &lt;em&gt;the&lt;/em&gt; authoritative book out there, with its designs popularised by &lt;a href=&quot;https://eater.net/8bit&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ben Eater's tutorials&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any recent (post-2000) book on Electronics and CPU design that might provide an alternative to Malvino's book? I know of Nisan and Schocken's &quot;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0262640686&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Elements of Computing Systems&lt;/a&gt;&quot; (from the NAND to Tetris series), but I find it lacks the depth of DCE. &lt;/p&gt;&#xA;" OwnerUserId="14893" LastEditorUserId="10666" LastEditDate="2020-05-31T18:18:30.507" LastActivityDate="2020-06-03T20:24:53.800" Title="Modern Alternative to Malvino's Digital Computer Electronics" Tags="&lt;cpu&gt;&lt;books&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12131" PostTypeId="1" AcceptedAnswerId="12134" CreationDate="2019-08-23T07:00:22.977" Score="7" ViewCount="431" Body="&lt;p&gt;I use software like Fritzing or Autodesk EAGLE to draw my Raspberry Pi or Arduino projects and was wondering if there is a source for PCB plans of for example an Amiga 500 in a format readable for such software?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm currently working on an old Commodore PC and only found PDF scans of plans from manuals, that are hard to read.&lt;/p&gt;&#xA;" OwnerUserId="11204" LastActivityDate="2019-08-23T12:05:29.687" Title="Digital PCB Plans for Retro Computers" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;commodore&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12132" PostTypeId="2" ParentId="11830" CreationDate="2019-08-23T09:06:57.063" Score="-2" Body="&lt;p&gt;&lt;strong&gt;The following information is incorrect, but preserved for future notice&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most important difference is that PDP-5 doesn't have &quot;Zero Page Addressing&quot; as on PDP-8&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PDP-5's instruction format:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Op-code: 3 bits&lt;/li&gt;&#xA;&lt;li&gt;Indirect: 1 bit&lt;/li&gt;&#xA;&lt;li&gt;In-Page Address: 8 bits&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;PDP-8's instruction format:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Op-code: 3 bits&lt;/li&gt;&#xA;&lt;li&gt;Indirect: 1 bit&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Zero Page: 1 bit&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;In-Page Address: &lt;strong&gt;7 bits&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="12118" LastEditorUserId="12118" LastEditDate="2019-08-24T11:55:45.557" LastActivityDate="2019-08-24T11:55:45.557" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12133" PostTypeId="2" ParentId="9569" CreationDate="2019-08-23T09:36:41.210" Score="6" Body="&lt;p&gt;Here's an Amstrad PCW8512, which featured two 3&quot; hard-shelled floppy drives, both vertically oriented &lt;em&gt;and&lt;/em&gt; vertically stacked, built into the side of the monitor.  A very space-saving design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Q5WRG.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q5WRG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-08-23T09:36:41.210" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12134" PostTypeId="2" ParentId="12131" CreationDate="2019-08-23T12:05:29.687" Score="5" Body="&lt;p&gt;There have been several attempts on things like this. For the Amiga there are for example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Re-Amiga &lt;a href=&quot;http://wordpress.hertell.nu/?p=587&quot; rel=&quot;noreferrer&quot;&gt;http://wordpress.hertell.nu/?p=587&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;A4000TX &lt;a href=&quot;http://www.amibay.com/showthread.php?101477-A4000TX-ATX-Amiga-motherboard&quot; rel=&quot;noreferrer&quot;&gt;http://www.amibay.com/showthread.php?101477-A4000TX-ATX-Amiga-motherboard&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And there were older examples as well, some of which got lost in time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also examples for IBM PCs, sometimes designed from scratch, sometimes reverse engineered.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Various PC cards and XT mainboards: &lt;a href=&quot;http://www.malinov.com/Home/sergeys-projects&quot; rel=&quot;noreferrer&quot;&gt;http://www.malinov.com/Home/sergeys-projects&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Adlib clone &lt;a href=&quot;https://github.com/schlae/adlib&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/schlae/adlib&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;SoundBlaster clone &lt;a href=&quot;https://github.com/schlae/snark-barker&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/schlae/snark-barker&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And there are many more examples in the homebrew community. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you only want to explore Amiga PCBs, there is &lt;a href=&quot;http://www.amigapcb.org/&quot; rel=&quot;noreferrer&quot;&gt;http://www.amigapcb.org/&lt;/a&gt; -- it has quite a bunch of mainboards.&lt;/p&gt;&#xA;" OwnerUserId="8337" LastActivityDate="2019-08-23T12:05:29.687" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12135" PostTypeId="2" ParentId="12122" CreationDate="2019-08-23T13:15:36.953" Score="0" Body="&lt;p&gt;On the C64, there used to be a couple of &quot;standard&quot; sound formats. One(s) which only contained the sound &lt;em&gt;data&lt;/em&gt;, including delays &amp;amp;c., to be interpreted by a seperate player program, and others which bundled the data with a corresponding player routine (usually in assembler) into a single file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 'embedded' playing routine usually provided a call address which would have to be called 50 (PAL) or 60 (NTSC) times per second to keep playing the sound. This &quot;standard&quot; way of handling allowed for easy playback in the background as it could simply be hooked up to a CRT interrupt firing once per frame, at a time where the sound processing would not block other critical processing, e.g. after the content for the next screen was prepared in the background buffer waiting to be displayed.&lt;/p&gt;&#xA;" OwnerUserId="3777" LastActivityDate="2019-08-23T13:15:36.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12136" PostTypeId="1" AcceptedAnswerId="12185" CreationDate="2019-08-23T16:31:21.897" Score="3" ViewCount="424" Body="&lt;p&gt;I am trying to remember about a bare-board sound card which plugged into the parallel port of an Exidy Sorcerer (circa 1980). The card and software (&amp;quot;Music System&amp;quot;) was made by Arrington Software Service in Boise, Idaho. It had no speaker, so it needed to be plugged into an amplifier and speaker. (Your home music system would work if it had an input jack.) One could enter the 4-voice song from sheet music, or you could buy pre-compiled digital music libraries. Note that the system was polyphonic, but not stereo.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately I don't have either my Sorcerer or the sound card anymore.  I'd like to know what D/A converter the latter used.  Maybe I was just ignorant, but I don't remember any other such system, with both 4 voices and the ability to type in sheet music.  The editor literally looked like part of a page of sheet music.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Did other systems of the era have these features?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;... scavenged around and found Mr. Arrington's 1980 brochure in a cabinet. Quoted extract:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;HARDWARE -- Assembled A/D converter connects to parallel port. Simply connect an amplifier to your stereo to listen to music. ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(sic; I'm sure he meant &amp;quot;D/A&amp;quot;)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;MUSIC GENERATION -- Machine language routine generates four part harmony of true frequencies over a 4 and 1/2 octave range.  The routine easily interfaces with your Basic programs to add sound effects and music.  Well documented.&lt;/p&gt;&#xA;&lt;p&gt;EDITOR -- System includes a screen editor that displays the two musical staves upon which musical notes are placed. ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It cost $40 (which today would probably be about $150). An optional entertainment add-on called &lt;em&gt;Piano Player&lt;/em&gt; cost $15. It showed a &lt;del&gt;full-screen&lt;/del&gt; man seated at a piano, playing it. His motions reacted to the music being played. !! See image in exidyboy's answer. I obviously remembered it wrong.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-29T18:53:03.833" Title="Was the Music System for the Exidy Sorcerer as exceptional as I remember?" Tags="&lt;sound&gt;&lt;exidy-sorcerer&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12137" PostTypeId="1" CreationDate="2019-08-23T20:55:29.800" Score="5" ViewCount="314" Body="&lt;p&gt;When a peripheral in an 8080 system generates an interrupt request and the 8080 acknowledges the interrupt, the peripheral is expected to put an instruction opcode on the data bus which the 8080 will execute.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically this is an &lt;code&gt;RST n&lt;/code&gt; instruction, which cases the PC to be pushed on to the stack and 8*&lt;em&gt;n&lt;/em&gt; to be loaded into the PC, running whatever subroutine is located there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, as mentioned specifically on page 60 of the &lt;a href=&quot;http://www.classiccmp.org/dunfield/r/8080asm.pdf&quot; rel=&quot;noreferrer&quot;&gt;Intel 8080 Assembly Language Programming Manual&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Any device may supply an RST instruction (and indeed may supply any 8080 instruction).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Were there any systems that actually used an opcode other than &lt;code&gt;RST n&lt;/code&gt; when handling interrupts? (I'm looking for examples of real systems here, ideally, rather than just &quot;here's how you would do it if you wanted to.&quot;) What was the reason for doing so?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-08-23T22:42:23.330" LastActivityDate="2019-08-24T00:53:52.740" Title="What are examples of providing non-RST instructions for 8080 interrupts?" Tags="&lt;z80&gt;&lt;8080&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12138" PostTypeId="1" AcceptedAnswerId="12141" CreationDate="2019-08-23T21:40:48.530" Score="6" ViewCount="832" Body="&lt;p&gt;So, modern video cards include two devices - a video signal generator and a graphic accelerator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first of them converts data from video memory into MDA / CGA / VGA / RCA / DVI / HDMI / etc format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second is another co-processor (like mathematical co-processor), the purpose of which is to free the CPU from graphic calculations. This co-processor implements algorithms (as I understand it is not software but hardware) copying bits, drawing lines, scrolling, working with sprites, etc. It can implement acceleration of 2D or 3D calculations. Well, or both together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Old computers, of course, had their own &quot;video cards&quot;, or more precisely - video chips. If my searches are correct, not all of these &quot;video cards&quot; contained a video accelerator - that is, the poor CPU had to calculate the graphics completely by itself. And this includes computing graphics algorithms (Brezenham, etc.) and copying bytes. Least. For example, this is done in Atari 2600. This is a very slow way to work with graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sega Genesis, C64, Gameboy, Gameboy Color, Amiga's PC (just a couple of examples) had their own video chips for implementing graphics. Moreover, different platforms produced different graphics due to the different implementation of video chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, since now I work with a homebrew for my pleasure, I can make design decisions that differ from those that were in old computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if in the system that I design, do not use video chips from old computers, but use another CPU. The program of which is independent of the main CPU and implements video algorithms -  Bresenham's, scrolling, copying bytes, etc. These algorithms, of course, I should write. And the data exchange between CPU1 and CPU2 = GPU goes through a buffer. For example, CPU1 writes to the buffer that the GPU needs to draw a line from (x1, y1) to (x2, y2) or draw the desired sprite in the desired position. Well, this is an option, you can make an exchange in another way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will such a method be faster than classic old video chips?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, could Sega Genesis play heavier games if its video chip were replaced with a second Motorotola 68000 (8 Mhz) in the program of which video algorithms would be implemented?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I understand that a direct replacement in the board will not work :) :)).&#xA;I mean, if the engineers made that decision at the design stage.)&lt;/p&gt;&#xA;" OwnerUserId="13852" LastActivityDate="2019-08-24T03:17:29.383" Title="GPU chip implementation on CPU - will it be faster?" Tags="&lt;video&gt;&lt;cpu&gt;" AnswerCount="2" CommentCount="7" ClosedDate="2019-08-24T09:57:37.993" ContentLicense="CC BY-SA 4.0" />
  <row Id="12139" PostTypeId="2" ParentId="12137" CreationDate="2019-08-23T22:28:31.370" Score="4" Body="&lt;p&gt;Preface:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8080 interrupt system is one of the most simple and straightforward. Instead of having sophisticated built-in mechanics, reacting to interrupts, the 8080 just accepts a single instruction from an external source, marking this cycle with &lt;code&gt;INTA&lt;/code&gt;. This opens up many more possibilities for external interaction than fixed handling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;RSTx&lt;/code&gt; instructions are just the most simple way, as they are implied subroutine calls encoded in a single byte, thus requiring the least external effort to inject an encapsulated software response.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using multi-byte instructions (like a call) works as well, but needs a bit more decoding hardware (for call all included within the 8228 system controller (*1)).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What are examples of providing non-RST instructions for 8080 interrupts?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;One example (with extended decoding) would be inserting a &lt;code&gt;CALL&lt;/code&gt; issuing any possible routine as a response.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But maybe more important is single-byte instruction for tightly coupled interrupt response. For example, an &lt;code&gt;INC&lt;/code&gt; instruction could be used to fire a wait loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine the main program waiting for an external input in a tight loop like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  MVI B,FFh&#xA;WAIT:&#xA;  DCR B&#xA;LP:&#xA;  JZ  LP&#xA;  [...]&#xA;  [Interrupt Reaction]&#xA;  [...]&#xA;  JMP WAIT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This might seem strange at first, as when it runs into LP, it becomes an infinite loop. But now let an interrupting device insert an &lt;code&gt;INR B&lt;/code&gt; (04h), and suddenly the CPU will drop out of the loop. The remarkable part here is that its latency is always shorter than 15 clocks (5 for ICR and 10 for JZ) while an &lt;code&gt;RST&lt;/code&gt; will take whatever the actual instruction is (at least 4) plus 11 cycles for the &lt;code&gt;RST&lt;/code&gt;. In addition, no &lt;code&gt;RET&lt;/code&gt; or stack adjustment at the end is needed (*2). For tight reactions, this is close to the optimal way (*3) on an 8080.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, the use of &lt;code&gt;INR&lt;/code&gt;/&lt;code&gt;DCR&lt;/code&gt; forms a counter catching additional activations during its run time and serializes processing (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Constructions like that are hard to make with other CPUs (*5).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Where there any systems that actually used an opcode other than RST n when handling interrupts?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, using such constructions was almost standard on any embedded system past the most simple applications.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What was the reason for doing so?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Speed, flexibility, speed, integration and ... well ... speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think of a real-time data acquisition system. Here every microsecond may count. At the same time, the data recorded is usually rather simple. Often just bits or a single byte. With the right combination of interrupts and injected code the 8080 can be turned into a multi-channel DMA unit while still running some data management application in the foreground. And so on.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - System Controller is a bit of pompous name for the 8228, as it's basically a data bus buffer and a status latch. In addition, it can also either offer a single &lt;code&gt;RST7&lt;/code&gt; interrupt response, as well as handling an inserted &lt;code&gt;CALL&lt;/code&gt; instruction the right way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When configured for simple &lt;code&gt;RST7&lt;/code&gt; insertion (by pulling the &lt;code&gt;INTA&lt;/code&gt; output to +12 (!) Volt) the 8080's interrupt input will work like almost all other manufacturers' interrupt inputs, jumping to 56h.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, it can detect an inserted &lt;code&gt;CALL&lt;/code&gt; and keep &lt;code&gt;INTA&lt;/code&gt; asserted over the next two fetches. Too bad they didn't make it work with any multi-byte instruction, so doing this will still require additional circuitry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Not to mention that an RST routine usually has to do some PUSHing and POPping&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - There are possible tweaks improving thereon, but they not as simple and beyond the scope here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - This can also be used with multiple registers and more complex structures for extremely tight-coded reactions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Using the 6502's &lt;code&gt;SO&lt;/code&gt; input can be used in a somewhat similar fashion, but way less flexible.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-08-24T00:53:52.740" LastActivityDate="2019-08-24T00:53:52.740" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12140" PostTypeId="2" ParentId="12138" CreationDate="2019-08-23T22:40:05.567" Score="8" Body="&lt;p&gt;As you surmise, one way of dividing up graphic image generation is&#xA;into two parts: building a bitmap in memory (with or without hardware&#xA;assistance) and then converting the bitmap into a video signal. And&#xA;that is how modern graphics cards do this.&lt;/p&gt;&#xA;&lt;p&gt;Some older systems also did this, but as well there were three other&#xA;common methods of dividing up the work.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Instead of having a bitmap in memory, keep a &amp;quot;block map&amp;quot; that&#xA;mapped shorter codes to small bitmaps, and use these codes to&#xA;generate the screen image on the fly. The most common use would be&#xA;for text screens, usually mapping a single 8-bit value to a 64-bit&#xA;or larger bitmap, letting e.g. a 960 byte array of memory map 40x24&#xA;character cells to a 240x192 screen image which would otherwise&#xA;have needed 5760 bytes for a bitmap, requiring both more memory and&#xA;more processing time if the CPU was itself filling that RAM with&#xA;appropriate patterns for the characters.&lt;/p&gt;&#xA;&lt;p&gt;Text-based systems would usually have the characters/blocks in ROM;&#xA;on some systems these were fixed, though usually there would be&#xA;characters containing specific subpatterns that could be used to&#xA;generate &amp;quot;block graphics.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;Systems supporting graphical (particularly gaming) applications&#xA;would often allow the programmer to specify a set of custom block&#xA;patterns in RAM.&lt;/p&gt;&#xA;&lt;p&gt;Systems with a block map mode might offer only that, as the&#xA;Commodore PET and Sinclair ZX80, did. (The Z80 also offered the&#xA;ability to have a shorter map that left out blank characters on the&#xA;screen, so if you were displaying only a dozen short lines, your&#xA;map would be smaller than if you had to display a full screen of&#xA;text.) Or they might offer a choice of modes, such as the Apple II&#xA;with a black-and-white character block mode, a 16-colour &amp;quot;low-res&#xA;graphics&amp;quot; block mode, and a 2-4 colour bitmapped &amp;quot;high-res&amp;quot;&#xA;graphics mode.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Avoid having a screen bitmap at all, and instead directly generate&#xA;data that is eventually turned into the video signal. This is how&#xA;the Atari 2600 worked: the CPU would load registers on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Television_Interface_Adaptor&quot; rel=&quot;noreferrer&quot;&gt;TIA&lt;/a&gt;&#xA;that specified information about what was to appear on the current&#xA;scan line, wait until the TIA had finished sending that scan line&#xA;to the video output, reload the registers, and continue on in this&#xA;way until a full video frame had been written. This has the&#xA;advantage of needing no RAM to hold a screen bitmap; the Atari 2600&#xA;had only 128 bytes of RAM in total.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Have a combination of the two, using either bitmap or block mode&#xA;for the &amp;quot;background&amp;quot; of the image, but additionally generating&#xA;further image information from other data on top of that. Often the&#xA;extra image data generated on top of the background was a lot more&#xA;sophisticated than the Atari 2600 example above; typically you'd&#xA;have 8x8, 8x16 or 16x16 bitmaps called &amp;quot;sprites&amp;quot; that would be&#xA;placed at arbitrary locations on the screen, and as well as being&#xA;used for display the positions could be checked to see if they had&#xA;collided and so on.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So these are the types of systems you'll be comparing with your idea&#xA;of using a coprocessor to generate graphics. You'll note that these&#xA;systems can have certain limitations on what kind of graphics they can&#xA;generate: for example, a block map system will not be able to generate&#xA;certain kinds of images that a bitmap system can generate because&#xA;typically there will not be enough different blocks to give each block&#xA;on the screen its own individual pattern. This can be worked around by&#xA;simplifying the image being generated, and this might also produce an&#xA;increase in speed of generation, but it would be up to you to decide&#xA;whether the simplified result is still acceptable for your&#xA;application.&lt;/p&gt;&#xA;&lt;p&gt;What speed all comes down to in the end, as you compare these systems,&#xA;is how much work the CPU needs to do to generate the image. The less&#xA;data you need the CPU to move, the faster it generally works. Assuming&#xA;that your video coprocessor has full access to all of memory it should&#xA;be able to emulate any of the systems above and thus be just as fast.&#xA;If you want it to be faster, you'd need to find ways to let the CPU&#xA;send the same &amp;quot;instructions&amp;quot; to the graphics system using less memory&#xA;movement. One example might be to be able to specify vectors that the&#xA;coprocessor could render, or even go as far as a full 3D rendering&#xA;system like modern graphics cards use. These are actually a&#xA;combination of hardware and software; the developer writes small&#xA;programs (&amp;quot;shaders&amp;quot;) in a special langauge that are sent to the GPU to&#xA;execute.&lt;/p&gt;&#xA;&lt;p&gt;Here are some further resources you may find useful when thinking&#xA;about how you want to design your graphics coprocessor.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://www.atomiczombie.com/vulcan-74/&quot; rel=&quot;noreferrer&quot;&gt;Vulcan-74&lt;/a&gt; is a mostly 7400-based graphics processer that lets&#xA;a 6502 do Amiga-level graphics. It's built with mainly 7400 series&#xA;parts (except for its 12.5 MB of memory, for obvious reasons) on&#xA;breadboards, and is full of good ideas for both the software&#xA;CPU/coprocessor interface and how to actually build something like&#xA;this. See also its &lt;a href=&quot;http://forum.6502.org/viewtopic.php?t=3329&quot; rel=&quot;noreferrer&quot;&gt;discussion thread on forums.6502.org&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &amp;quot;Pixel Processing Unit&amp;quot; section of &lt;a href=&quot;https://youtu.be/HyzD8pNlpwI?t=1758&quot; rel=&quot;noreferrer&quot;&gt;The Ultimate Game Boy&#xA;Talk&lt;/a&gt; video provides a nice overview of the GameBoy's block&#xA;map (here called &amp;quot;tile&amp;quot;) plus sprites system, including information&#xA;about smooth scrolling and screen overlays. This is heavily&#xA;optimized for certain kinds of games, and gives you an idea of what&#xA;you need to be able to compete with if you're trying to be as fast&#xA;or faster. Take careful note of the particular structures and&#xA;features they offer to let the CPU specify images with minimal&#xA;processing.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-23T23:04:02.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12141" PostTypeId="2" ParentId="12138" CreationDate="2019-08-24T03:17:29.383" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, could Sega Genesis play heavier games if its video chip&#xA;  were &lt;strong&gt;replaced&lt;/strong&gt; with a second Motorotola 68000 (8 Mhz) in the program of&#xA;  which video algorithms would be implemented?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it would be slower - &lt;em&gt;much&lt;/em&gt; slower. The Yamaha YM7101 VDP can display 80 32x32 pixel sprites (20 per scanline), over 2 tile maps which can be freely scrolled vertically and horizontally. To do that completely in software would require many logical operations and memory accesses per pixel.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An 8MHz 68000 can barely execute 2 instructions per microsecond, and most memory operations take several microseconds. Creating those VDP functions in software would be many times slower, even with the help of a 'dumb' frame buffer. If the CPU had to do it all then it would be maxed out just trying to produce a static display, let alone scrolling and rendering sprites over it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A CPU executes general purpose instructions, which gives it a lot of flexibility but slows it down relative to a video display 'processor' whose job is to simply push pixels out from a frame buffer. The VDP doesn't execute instructions, it has DMA buffers controlled by hardware counters that are synchronized to the video frame. Once the control registers have been set up it just continuously reads video memory and outputs pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga's custom chipset is an example of a video subsystem that &lt;em&gt;does&lt;/em&gt; have a processor, called the 'Copper' (short for co-processor). It only has 3 instructions - Move, Skip, and Wait, all of which are 32 bits long. Move loads an immediate value into any custom chip register, Wait waits until the beam counters reach a particular horizontal and vertical position on the screen, and Skip jumps over the next instruction if past a particular position. This is about as RISC as you can get, but it still isn't fast enough to produce a full-resolution bitmap display directly.               &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-08-24T03:17:29.383" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12143" PostTypeId="2" ParentId="9187" CreationDate="2019-08-24T19:10:37.573" Score="0" Body="&lt;p&gt;It was quite common to communicate to a computer without a modem, teletype interfaces worked over the phone lines and did not used modems.  They switched up to 20 mA on up to a 48V phone line.  The fact that old phone lines were DC-coupled (your handset was powered from the local exchange) was one of the reasons the phone companies tried to keep strict control over all equipment you could attach to the phone socket, making it illegal to connect uncertified devices and in many cases they insisted on renting you the equipment.  Up through to the late 1970s the typical console of a computer was a teletype machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used an IBM System/7 in 1973 to receive data from rotary phones in a factory.  Touch tone phones did not exist yet, and they put dials along a Ford production line so that workers would dial in the number of an approaching chassis so we could send them a print out (teletype, outgoing lines only) of the options to be added.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The S/7 had a number of options for digital and analog I/O in factory and laboratory work, and in this case I was using a module which could report open/closed circuit which was a variation on the teletype interface which could be programmed with different timings.  The dialing mechanism was much slower, if I remember correctly the pulse rate was about 10 per second and you just counted from 1 to (1)0, then a longer pause indicated the end of the digit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early time sharing systems used teletypes over the phone system, essentially just generalizing the adjacent console mechanism to support multiple phone lines each of which had a teletype at the other end.  I also used those in 1973 to run APL on a time-sharing service, remotely in another city.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also used signalling like this in early 1981 to connect a Victor 9000 to a brand new IBM PC (we had them talking the same day the PC was unboxed) and although the outputs were only toggling 12V the circuits were most likely compatible with the telephone voltages, as that was a common signalling standard at the time.  I suspect some folks may have programmed PCs to work with teletypes including answering the phone lines.  Modems were still expensive and rare, while many teletypes were in use, almost every medium business had a teletype machine (like more recently they would have a fax machine).&lt;/p&gt;&#xA;" OwnerUserId="15091" LastEditorUserId="15091" LastEditDate="2019-08-24T19:17:07.143" LastActivityDate="2019-08-24T19:17:07.143" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12145" PostTypeId="1" CreationDate="2019-08-25T07:13:31.247" Score="0" ViewCount="668" Body="&lt;p&gt;Since ATMega328 is a microcontroller, and Motorola 68000/68010 is a CPU, we consider only the processor core - command execution speed, memory access speed, arithmetic speed, registers in RAM or CPU, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ATMega datasheet says that for 1 Mhz the chip produces 1 Mips. Usually these chips work on 8/16 Mhz, which means they give out 8/16 Mips.&#xA;A Mips article on the wiki says that Motorola 68010 at 16 Mhz produces ~ 3.2 Mips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, M68k is CISC, and AVR is RISC. In theory, one MIPS of M68k has more calculations inside the core, due to CISC. And one MIPS of AVR has fewer calculations within the core, due to RISC. It turns out that in terms of the amount of information processed, MIPS of CISC is denser than MIPS of RISC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, which of these two chips will be more productive at the processor core level?&lt;/p&gt;&#xA;" OwnerUserId="13852" LastActivityDate="2019-08-25T09:08:05.660" Title="Arduino Uno (ATMega328) vs Motorola 68000/68010" Tags="&lt;motorola-68000&gt;&lt;m68k&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2019-08-25T09:59:49.877" ContentLicense="CC BY-SA 4.0" />
  <row Id="12146" PostTypeId="2" ParentId="12145" CreationDate="2019-08-25T07:52:52.000" Score="7" Body="&lt;p&gt;Chips aren't either &quot;RISC&quot; or &quot;CISC&quot;; they fall on a spectrum between the two. The 68000 is less &quot;CISC&quot; than an 80x86, for example, and you could plausibly call the 6502 a somewhat &quot;RISC&quot; processor by the kind of definitions used that make the Amtel AVR &quot;RISC.&quot; This isn't really very useful as a guideline for how much processing power you have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And MIPS particularly don't make sense when you're comparing a machine with 8-bit registers to one with 32-bit registers. A 68000 can do a 32-bit add or shift in one instruction; an AVR will take four or more instructions. A simple load of 32-bits of data from memory into registers takes one instruction on the 68000, but four on the AVR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another issue to consider is bus widths; the ATMega328 has an 8-bit data bus whereas the 68000 has (with most variants) a 16-bit data bus, and so it would, all else being equal, be moving data from RAM twice as fast as the AVR. (But all else is not equal, since the AVR has RAM on chip.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, of course, productivity depends on the application. If you are doing long sequences of manipulation of 8-bit values, having 32-bit registers that could work just as fast with 32-bit values isn't really any advantage at all. (In fact, you might even be worse off.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in short, your question can't be answered because &quot;it depends on the application.&quot; Neither of these is clearly faster than the other most of the time. (And this is likely true of most popular CPUs operating in this clock range.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-08-25T07:52:52.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12147" PostTypeId="2" ParentId="12145" CreationDate="2019-08-25T09:08:05.660" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The ATMega datasheet says that for 1 Mhz the chip produces 1 Mips. Usually these chips work on 8/16 Mhz, which means they give out 8/16 Mips.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Atmel (Microchip) doesn't claim 1 Mips per MHz, but &lt;em&gt;&quot;Up to 16 MIPS Throughput at 16MHz&quot;&lt;/em&gt;. It would be 16 MIPS if only 1 clock instructions were uses, but there are many (*1) taking two cycles, some doing 3 (*2) or even 4 (*3) lowering this depending on the instruction mix used to maybe 0.7 MIPS per MHz.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A Mips article on the wiki says that Motorola 68010 at 16 Mhz produces ~ 3.2 Mips.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sounds like a reasonable number in a real world szenario.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;THen again MIPS doesn't mean anything - at least not across different ISA. It was coined as a figure for comparison in the commercial mainframe world, where all all CPUs adhere to the basic /370 ISA and does work there. People asking the same for other architectures did only get meaningless numbers. In fact, it gets even meaningless in the same ISA - family when comparing at too distant offspring, like 8086 vs. Pentium, as the relevant code will differ vastly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing so for complete different architectures is useless. For example around 1981 an 8 MHz Z80 could deliver in the 1 MIPS region, making a good PC running Wordstar for a single user. At the same time a /370 compatible Siemens 7760 (X4S CPU) delivered about 0.9 MIPS - but served up to 300 concurrent users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This difference is only in part due the 8 vs. 32 bit nature, but moreso a result of the whole CPU and machine structure. With a good amount of additional hardware (dedicated CPU for I/O plus DMA and lotsa memory), this Z80 can be made to serve 5-8 users as well, but that's still several magnitude less than the /370 does with less MIPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, MIPS do work within one ISA and a defined application mix to measure against.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But, M68k is CISC, and AVR is RISC.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;RISC and CISC again doesn't mean much - and most definitely less than marketing wants to tell us. Keep in mind, there was no CISC definition before RISC proponents coined their ideas - but at the same time many pre RISC CPUs did already implement all of them (*4). So it's more of a design guideline how to structure an ISA than a real difference. And like any such, real life application will diverge when there's a gain (*5)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So, which of these two chips will be more productive at the processor core level?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;MIPS numbers do not give any answer to productivity. Similar MHz (*6) This can only be seen when it comes to real applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example when it comes to byte operations a 68000 is, clock for clock, not faster than a 6502, but when handling 16 bit values and lots thereof, it'll run circles around its 8 bit distant relative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;Pick your application and measure&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess that's where your question &lt;strong&gt;may&lt;/strong&gt; be originated: Selecting the right core for an application. More than ISA and basic performance this is about application related capabilities. If every data you need fits into 2 KiB of RAM, is satisfied by the peripherals available and operations are mostly control instructions, then an ATMega may be a real good choice. But if you need to handle more memory, address more (diverse) I/O, or got some serious 32 bit number crunchign ahead, then a ColdFire will be a better choice.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Most notably all jumps, taken branches, loads and stores.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Relative/indirect call, indirect jump and LPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - CALL/RET/IRET&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Like any type casting diverges from the good idea of type restricted access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - A bit like in 1980 when in the US Disco was declared dead and House being the new, total different style - except it got exported to the rest of the world still as Disco :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Already in the mid 70s it was no big issue to build a 30 MHz transfer based CPU (eventually the ultimate RISC) from standard TTL on a Eurocard, and it has been done. Then again, its real world performance was only as impressive as the MHz/MIPs imply in very special spplications. Using such a beast on word processing would bring it down at least a magnitude. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-08-25T09:08:05.660" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12148" PostTypeId="1" AcceptedAnswerId="12149" CreationDate="2019-08-25T18:10:51.680" Score="8" ViewCount="2134" Body="&lt;p&gt;I'm building a custom interface unit for a &lt;a href=&quot;https://en.wikipedia.org/wiki/Game_port&quot; rel=&quot;nofollow noreferrer&quot;&gt;game port&lt;/a&gt; joystick. To use/test it, I have a &lt;a href=&quot;https://www.google.com/search?q=ch+mach+iii&quot; rel=&quot;nofollow noreferrer&quot;&gt;CH Products Mach III&lt;/a&gt;. (This is the IBM PC version, not the Apple version.) I purchased the joystick for this purpose and have not tested it with an original computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found that the second button was registering as always-pressed. On investigation, there is a resistance of about 60 Ω between &quot;button 2&quot; pin 7 and &quot;ground&quot; pin 4 (pin 5 is absent from the plug) when the button is not pressed, &amp;lt;1 Ω when the button is pressed, and no connection between pin 7 and any other pin. Button 1 behaves more as expected, an open circuit when the button is not pressed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is this a special signaling mechanism of some sort, or does it merely indicate that the switch is dirty?&lt;/strong&gt; (It is not clear how to open the joystick to inspect the circuit, or I would have done this first. Perhaps I'll ask a separate question about that.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would ideally like to design the interface unit to be broadly compatible with different models of joysticks (including, possibly, Apple-style joysticks with an alternate socket; and excluding proprietary extensions or anything requiring digital decoding), so I am preferably looking for expectations on button interfacing, perhaps with recommended (or historical) detection thresholds, not just information about this specific joystick.&lt;/p&gt;&#xA;" OwnerUserId="8286" LastEditorUserId="8286" LastEditDate="2019-08-27T04:09:21.407" LastActivityDate="2019-08-27T04:09:21.407" Title="Are game port joystick button circuits more than plain switches? Is this one just faulty?" Tags="&lt;ibm-pc&gt;&lt;joystick&gt;&lt;old-hardware-adaptation&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12149" PostTypeId="2" ParentId="12148" CreationDate="2019-08-25T18:19:06.130" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is this a special signaling mechanism of some sort,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. Buttons are always on/off mechanics. The PC doesn't have any means to detect anything but high or low, according to the threshold (*1) the input circuit has (*2).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or does it merely indicate that the switch is dirty?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, a dirty switch, a used up one, a broken one, some bad soldering adding a bridge and so on.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: Here's a real nice detailed &lt;a href=&quot;http://mysite.du.edu/~etuttle/electron/elect57.htm&quot; rel=&quot;noreferrer&quot;&gt;page about the GCA&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.P.S.:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I would ideally like to design the interface unit to accommodate as many joysticks as possible &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;'as many'&lt;/em&gt; as in many different joystick (styles) on a single GCA style interface, or as in many joysticks at the same time? If the later, then the maximum is about 16 pairs, as the address range for joysticks ports is 200h..20Fh with 201h being the default. This is ofc only true if you're designing a classic ISA type card. Going by USB, it's all up to your driver.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - For the 74LS244, as used in the original IBM GCA, requires at least 2.0V to detect a high or less than 0.8V to detect low. Since all pullups are ~5 kOhm this means that a button (including all cabling) should have a resistance less than ~0.9 kOhm when closed and above ~4 kOhm when 'open'. So 60 Ohm for sure mean it's always detected as low or closed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course these values may differ for any of the countless other game port inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Of course, being a digital input, they &lt;em&gt;could&lt;/em&gt; be used for some serial data transmission. But that's way beyond standard button usage.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-08-26T05:14:38.540" LastActivityDate="2019-08-26T05:14:38.540" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12151" PostTypeId="1" AcceptedAnswerId="12924" CreationDate="2019-08-25T21:31:52.667" Score="8" ViewCount="412" Body="&lt;p&gt;Wondering why a C64 VIC chip (fully functional) that I got off eBay had an 8565R2 label fitted on top of it:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/GAThn.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GAThn.jpg&quot; alt=&quot;MOS 8565R2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I peeled it off to find this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/amXmv.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/amXmv.jpg&quot; alt=&quot;MOS 8656R2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't ever heard of a VIC-II (PAL) labelled MOS 8656R2. What is this - a mistake in the naming of a production run, or some variant other than the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_VIC-II#List_of_VIC-II_versions&quot; rel=&quot;noreferrer&quot;&gt;generally known versions&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note: The C64 Reloaded2 board that I tested it in does detect it as an 8565.)&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2019-08-25T21:47:47.250" LastActivityDate="2019-11-30T01:16:20.753" Title="Origin of VIC-II (PAL) chip labelled 8656R2?" Tags="&lt;commodore-64&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12152" PostTypeId="1" AcceptedAnswerId="12153" CreationDate="2019-08-26T13:04:17.080" Score="7" ViewCount="916" Body="&lt;p&gt;I have a virtual disk image file&lt;a href=&quot;https://1drv.ms/u/s!Avqi6Pt1BGP3gblpl0dnIfk9B0f_Yw&quot; rel=&quot;nofollow noreferrer&quot;&gt; os9000-xibase.img &lt;/a&gt;and Windows can't read it nor mount it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With ImDisk Virtual Disk, I'm able to mount it, but not read it, because it is a Random Block File System disk image of 'Microware os-9 (which is now maintained by Radisys)'. Edit: Qemu image&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering if there was any tool available to make RBF discs/diskettes readable in a file-manager like windows explorer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found 2 tools:&lt;a href=&quot;http://www.reischke.de/dtr/os9max.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt; OS9Max, &lt;/a&gt;but that is through a terminal and costs money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.osadl.org/RBF-File-System.rbf.0.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The other tool I found &lt;/a&gt;was for Linux 2.6, but I couldn't get it to compile, can somebody else get it to work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know an Explorer-like tool, to help me view the contents of this RBF Image? Edit: Qemu image&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I reposted&lt;a href=&quot;https://superuser.com/questions/1427393/how-to-read-microware-os-9-rfb-filesystem-under-windows-10&quot;&gt; this on SuperUser &lt;/a&gt;, on &lt;a href=&quot;https://softwarerecs.stackexchange.com/questions/58484/how-to-read-microware-os-9-rfb-filesystem-under-windows-linux&quot;&gt;Software Recommendations&lt;/a&gt; and on&lt;a href=&quot;https://askubuntu.com/questions/1136190/how-to-read-os-9-rbf-filesystem-under-ubuntu-8-04&quot;&gt; AskUbuntu.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: The link I got it from was: &lt;a href=&quot;http://lsw.ee.hm.edu/~tasin/qemu-and-os9000/OS9000-4.9_on_QEmu-with-XiBase9_en.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://lsw.ee.hm.edu/~tasin/qemu-and-os9000/OS9000-4.9_on_QEmu-with-XiBase9_en.zip&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turns out it was very easy to run, once entered xb , it looks exactly like windows XP, It was a Qemu image, thus a virtual harddrive, not an installer.&lt;/p&gt;&#xA;" OwnerUserId="15103" LastEditorUserId="439" LastEditDate="2019-08-28T13:57:32.537" LastActivityDate="2019-08-28T13:57:32.537" Title="How to read Microware OS-9 RBF Filesystem under Windows / Linux?" Tags="&lt;operating-system&gt;&lt;file-system&gt;&lt;disk-image&gt;&lt;os-9&gt;&lt;qemu&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12153" PostTypeId="2" ParentId="12152" CreationDate="2019-08-26T14:58:22.283" Score="7" Body="&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/p/toolshed/wiki/Home/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ToolShed&lt;/a&gt; seems to be the current maintained OS9/descendants disk manager tool. It's not a file browser but works on the command line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are you sure your disk image is a valid RBF image, though? Toolshed refuses to read it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ os9 dir os9000-xibase.img&#xA;dir: error 216 opening 'os9000-xibase.img,'&#xA;dir: error 216 opening 'os9000-xibase.img'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Similarly, checking the image gives this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ os9 dcheck os9000-xibase.img&#xA;Volume - '3' in file: os9000-xibase.img&#xA;$D0BC bytes in allocation map&#xA;124 sectors per cluster&#xA;$FA33C0 total sectors on media&#xA;Sector $8BF450 is start of root directory file descriptor&#xA;Building secondary allocation map...&#xA;Sector wrong size, terminating (001).&#xA;LSN: 9172048&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: the image is a PC hard disk image for Virtualbox/QEMU, and it contains a demo of OS/9000 for x86.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2019-08-28T01:49:50.037" LastActivityDate="2019-08-28T01:49:50.037" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12154" PostTypeId="1" AcceptedAnswerId="12155" CreationDate="2019-08-26T16:26:36.033" Score="14" ViewCount="1094" Body="&lt;p&gt;In one of Edsger Dijkstra's most famous essays &quot;&lt;a href=&quot;https://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1041.html&quot; rel=&quot;noreferrer&quot;&gt;By way of introduction&lt;/a&gt;&quot; there is this paragraph:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As final example of skirting the programming issue I mention “software engineering”, the IPSE’s, the ASPE’s, the FRIPSE’s and the GRIPSE’s and all further animation tools you can think of. They come from a world that has accepted its charter “How to program if you cannot.”. The best of these efforts just confuse composing with the physical act of writing the score, others are foolish at best, and some are criminal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From the context, it seems like those are some graphical tools from the 80s (the essay is dated 12 Feb 1989), which were used for computer programming education, however I wasn't able to find any information on the Internet about them.&lt;/p&gt;&#xA;" OwnerUserId="7113" LastActivityDate="2019-08-28T08:22:22.280" Title="What are the IPSE’s, the ASPE’s, the FRIPSE’s and the GRIPSE’s?" Tags="&lt;history&gt;&lt;identify-this-software&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12155" PostTypeId="2" ParentId="12154" CreationDate="2019-08-26T16:58:33.987" Score="16" Body="&lt;pre&gt;&lt;code&gt;IPSE   = Integrated Project Support Environment&#xA;     (or Integrated Programming Support Environment&#xA;ASPE   = Ada Programming Support Environment&#xA;FRIPSE = Formal Reasoning Integrated Programming Support Environment&#xA;GRIPSE = Graphical Integrated Programming Support Environment&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, Dijkstra's rant is about the formal programming hype of the late 1980s which he didn't consider to be fruitful, wise man he was.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Some further links:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.chilton-computing.org.uk/inf/se/sw/p005.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;IPSE&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The preliminary specification of FRIPSE, KD Jones, 1987&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.chilton-computing.org.uk/inf/se/sw/p004.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;MURAL&lt;/a&gt; (as what is FRIPSE known today) (Also &lt;a href=&quot;https://link.springer.com/book/10.1007%2F978-1-4471-3180-9&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S0020737383710382&quot; rel=&quot;nofollow noreferrer&quot;&gt;A uniform graphical view of the program construction process: GRIPSE&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some examples can be found in a &lt;a href=&quot;http://homepages.cs.ncl.ac.uk/cliff.jones/publications/MUCS-TRs/UMCS-87-12-8.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1987 paper&lt;/a&gt; provided by alephzero&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When searching, adding &lt;em&gt;&quot;Formal Verification&quot;&lt;/em&gt; might be helpful, as that was the core idea. After all, programming is just mathematics, right? So it should be possible to program in a way that makes it possible to prove the correctness in an automated, formalized way. Thankfully that's mostly (*1) dead by now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does live on is the idea of functional programming as a paradigm, further refining certain ways of design and coding. As so often, what happened, got similarities to the clasic &lt;a href=&quot;https://en.wikipedia.org/wiki/Hype_cycle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hype Cycle&lt;/a&gt;, were above projects where at the forefront of hype, while today we're way into the production plateau. Most high hopes didn't come true as predicted (flying cars) while at the same time realistic application has taken over.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As a side note, if there's any writing of his that can be considered &lt;em&gt;most&lt;/em&gt; famous, then it's his 1968 &lt;em&gt;&quot;Go To Statement Considered Harmful&quot;&lt;/em&gt;. This one influenced eventually each and every modern programming language (except possibly Brainfuck).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - There are languages like Haskel and Erlang that do incooperate and even enforce formal programming due their strict functional style. Still hard to see them becoming mainstream the same way structured languages did.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-08-28T08:22:22.280" LastActivityDate="2019-08-28T08:22:22.280" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="12156" PostTypeId="2" ParentId="12154" CreationDate="2019-08-26T17:10:35.687" Score="7" Body="&lt;p&gt;IPSE stands for &quot;Integrated Project Support Environment&quot;; this was one of a series of names given to projects related to using theorm proving in software engineering. &lt;a href=&quot;https://en.wikipedia.org/wiki/Integrated_Project_Support_Environment&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt; has a brief blurb on it, but &lt;a href=&quot;http://www.chilton-computing.org.uk/inf/se/sw/p005.htm&quot; rel=&quot;noreferrer&quot;&gt;this Chilton Computing page&lt;/a&gt; offers more detail and probably gives a better sense of what it is and what it does. FRIPSE and GRIPSE were related (FR meaning &quot;formal reasoning&quot; and &quot;GR&quot; meaning &quot;graphical.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your concern is not about the details of these particular packages at those times but instead what Dijktra was talking about when he mentioned those (certainly any modern example could be substituted in that paper and still preserve what he was trying to say), the &lt;a href=&quot;https://softwareengineering.stackexchange.com&quot;&gt;Software Engineering StackExchange&lt;/a&gt; would be a better place for questions.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-08-26T17:10:35.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12157" PostTypeId="2" ParentId="12148" CreationDate="2019-08-27T01:41:53.580" Score="5" Body="&lt;p&gt;To answer the &lt;em&gt;gist&lt;/em&gt; of your question of&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm building a custom interface unit for a game port joystick.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I would ideally like to design the interface unit to be broadly&#xA;  compatible with different models of joysticks&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I refer you to some resources of my own past research:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;History of the Gameport, and analog joysticks:&lt;br&gt;&#xA;&lt;a href=&quot;https://mysite.du.edu/~etuttle/electron/elect57.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://mysite.du.edu/~etuttle/electron/elect57.htm&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Info about &quot;Digital&quot; Joysticks, and also some history:&lt;br&gt;&#xA;&lt;a href=&quot;https://sites.google.com/site/joystickrehab/analog-vs-digital&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sites.google.com/site/joystickrehab/analog-vs-digital&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Joystick manufacturers began to use signal mixing&lt;/strong&gt; to produce joysticks&#xA;  which adhered to their own standards and did not strictly adhere to&#xA;  IBM's DA15 specification.  That is, instead of using a single pin on&#xA;  the DA15 port to address the joystick's functions, it would use a&#xA;  combination of pins per signal.  These controllers also posessed the&#xA;  first Point of View hats.  &lt;strong&gt;They would be the first Digital Joysticks&lt;/strong&gt;. &#xA;  These would require their own driver software in order to be utilized&#xA;  by Windows 95; in MS-DOS the game title would have to directly be&#xA;  programmed for it.  Even then, DA15 port was ultimately not able to&#xA;  handle the demands of newer and more complicated games and their&#xA;  correspondingly more intricate controllers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Linux Joystick driver source code could be a good ressource when&#xA;trying to understand these &quot;digital&quot; gameport joystick&#xA;implementations:&lt;br&gt;&#xA;&lt;a href=&quot;https://www.kernel.org/doc/html/latest/input/joydev/joystick.html#hw-specific-driver-information&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.kernel.org/doc/html/latest/input/joydev/joystick.html#hw-specific-driver-information&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://github.com/torvalds/linux/tree/master/drivers/input/joystick&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/torvalds/linux/tree/master/drivers/input/joystick&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Furthermore, some of the existing USB adapter interfaces like the&#xA;one you perhaps intend to create:&lt;br&gt;&#xA;&lt;a href=&quot;https://sites.google.com/site/joystickrehab/itemcatal&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sites.google.com/site/joystickrehab/itemcatal&lt;/a&gt;&lt;br&gt;&#xA;Info on the Hardware side for USB joystick programming:&lt;br&gt;&#xA;&lt;a href=&quot;https://helmpcb.com/electronics/usb-joystick&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://helmpcb.com/electronics/usb-joystick&lt;/a&gt;&lt;br&gt;&#xA;And you might find various other adapter builds when searching for&#xA;&lt;em&gt;microcontroller, arduino and usb joystick&lt;/em&gt; keywords.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Finally, some specifics to the special art of &lt;em&gt;Force-Feedback&lt;/em&gt;&#xA;MIDI-port Joysticks:&lt;br&gt;&#xA;Microsoft used the MIDI I/O pins of the CreativeLabs gameport spec for&#xA;bi-directional communication of Force definitions, by emulating a MIDI&#xA;instrument.&lt;br&gt;&#xA;Aside from this, these sticks were using ingenious methods to do serial&#xA;communication over the gameport, known as the OverDrive protocol and&#xA;patented by MS in&#xA;&lt;a href=&quot;https://patents.google.com/patent/US5628686A/en&quot; rel=&quot;nofollow noreferrer&quot;&gt;US Patent 5628686&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DescentBB thread about reverse-engineering the protocol:&lt;br&gt;&#xA;&lt;a href=&quot;https://www.descentbb.net/viewtopic.php?t=19061&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.descentbb.net/viewtopic.php?t=19061&lt;/a&gt;&lt;br&gt;&#xA;and resulting code:&lt;br&gt;&#xA;&lt;a href=&quot;https://github.com/tloimu/adapt-ffb-joy/wiki&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/tloimu/adapt-ffb-joy/wiki&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In your specific case, it's possible you have a dirty button (&amp;lt;1 Ω), but the earlier answer is incorrect in saying &lt;em&gt;&quot;Buttons are always on/off mechanics&quot;&lt;/em&gt; in this case. Reading the patent on the OverDrive protocol explains how the Gameport mechanics, described in the first link (charging a capacitor over time and polling capacitor charge), can be (ab)used to do much more than on/off switches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this information can help you build the very best custom joystick gameport interface. Good luck!&lt;/p&gt;&#xA;" OwnerUserId="15105" LastEditorUserId="15105" LastEditDate="2019-08-27T02:16:22.870" LastActivityDate="2019-08-27T02:16:22.870" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12158" PostTypeId="1" AcceptedAnswerId="12162" CreationDate="2019-08-27T18:35:18.183" Score="51" ViewCount="11175" Body="&lt;p&gt;This &lt;a href=&quot;https://www.hq.nasa.gov/office/pao/History/alsj/ic-pg5.html&quot; rel=&quot;noreferrer&quot;&gt;NASA webpage&lt;/a&gt; makes this claim about the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apollo_Guidance_Computer&quot; rel=&quot;noreferrer&quot;&gt;Apollo Guidance Computer&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By 1963, MIT - during the testing and development of the AGC Block I units - had ordered and consumed some 60% of the then world's available IC's !&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is this claim plausible&lt;/strong&gt; -- whether counting already produced ICs or those in production, whether directly by NASA or indirectly through MIT?  Please support your answer with references, rather than speculating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some information that may help:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Jack Kilby made the first integrated circuit (IC) in 1958.  The chip did not include the wires between the components.&lt;/li&gt;&#xA;&lt;li&gt;Robert Noyce invented the first monolithic IC -- including the wires on the chip -- in 1959.&lt;/li&gt;&#xA;&lt;li&gt;This was the early &quot;Block I&quot; version of the AGC, which was made of 4100 three-input NOR gates, each packaged as a single gate in a TO-5 can.  This was the version that flew on the &lt;em&gt;unmanned&lt;/em&gt; flights.&lt;/li&gt;&#xA;&lt;li&gt;Not to be confused with the more famous &quot;Block II&quot; version that flew on the &lt;em&gt;manned&lt;/em&gt; flights.  That version had 2800 ICs, each a dual 3-input NOR gate in a flatpack.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="4921" LastEditDate="2020-01-16T06:31:51.997" LastActivityDate="2020-01-16T06:31:51.997" Title="Did the Apollo Guidance Computer really use 60% of the world's ICs in 1963?" Tags="&lt;history&gt;&lt;apollo-guidance-computer&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="12159" PostTypeId="5" CreationDate="2019-08-27T18:44:58.473" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-08-27T18:44:58.473" LastActivityDate="2019-08-27T18:44:58.473" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12160" PostTypeId="4" CreationDate="2019-08-27T18:44:58.473" Score="0" Body="The Apollo Guidance Computer was created in the 1960s for the Apollo space program.  There are numerous simulators and replicas available." OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2019-08-28T08:13:29.837" LastActivityDate="2019-08-28T08:13:29.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12161" PostTypeId="1" AcceptedAnswerId="12163" CreationDate="2019-08-27T20:19:40.860" Score="11" ViewCount="727" Body="&lt;p&gt;I have a C64 that has recently stopped responding to two 'columns' of keys, namely '9,0' 'i,o' 'j,k' and 'n,m' - I've swapped the CIA chips (U1 and U2) to no effect, so I pulled a keyboard from a spare C64 and tried it and it worked perfectly.  This leads me to conclude there is something wrong with the &lt;em&gt;actual&lt;/em&gt; keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this document: &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/documents/cables/c64-keyboard.txt&quot; rel=&quot;noreferrer&quot;&gt;Commodore 64 keyboard connector and keyboard matrix&lt;/a&gt; and it appears all the keys I am having difficulty with are related to (I think) Port A Bit 4, which is pin 16 on the keyboard header.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm uncertain what to do next.  Does this sound like a simple broken wire inside the keyboard?  Or is there any active electronics inside the keyboard? - To open the keyboard further would require me to de-soldier the &lt;strong&gt;Shift Lock&lt;/strong&gt; key and I suspect the keyboard internals are nothing more than the typical flat membrane affair.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note, While obviously highly related, I don't think this question is a duplicate of &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/320/commodore-64-with-partly-working-keyboard/321#321&quot;&gt;Commodore 64 with partly working keyboard&lt;/a&gt; because that question was answered by swapping the CIA chips and does not provide any troubleshooting guidance beyond a bad CIA and/or inspecting the keyboard header.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="75" LastEditDate="2019-08-27T23:11:55.323" LastActivityDate="2019-12-01T21:16:30.387" Title="Commodore 64 with partly working keyboard (part 2)" Tags="&lt;commodore-64&gt;&lt;commodore&gt;&lt;keyboards&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12162" PostTypeId="2" ParentId="12158" CreationDate="2019-08-28T00:07:04.220" Score="60" Body="&lt;p&gt;Short answer: in the 1960s, NASA was buying and testing large numbers of integrated circuits (most of which would never be used) to make the technology mature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://www.fastcompany.com/90362753/how-nasa-gave-birth-to-modern-computing-and-gets-no-credit-for-it&quot; rel=&quot;noreferrer&quot;&gt;FastCompany&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The MIT Instrumentation Lab tried to design the Apollo computer using&#xA;  transistors, which in the early 1960s were well-settled&#xA;  technology—reliable, understandable, relatively inexpensive. But 15&#xA;  months into the design effort, it became clear that transistors alone&#xA;  couldn’t give the astronauts the computing power they needed to fly to&#xA;  the Moon. In November 1962, MIT’s engineers got NASA’s permission to&#xA;  use a very new technology: integrated circuits. Computer chips.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;MIT, on behalf of NASA, bought so many of the early chips that it&#xA;  drove the price down dramatically: from $1,000 a chip in that first&#xA;  order to $15 a chip in 1963, when MIT was ordering lots of 3,000. By&#xA;  1969, those basic chips cost $1.58 each, except they had significantly&#xA;  more capability, and a lot more reliability, than the 1963 version.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;MIT and NASA were able to do all that because for year after year,&#xA;  Apollo was the No. 1 customer for computer chips in the world.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.npr.org/2019/07/20/742379987/space-spinoffs-the-technology-to-reach-the-moon-was-put-to-use-back-on-earth&quot; rel=&quot;noreferrer&quot;&gt;NPR&lt;/a&gt; concurs:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Apollo program didn't invent the microchip, but it guaranteed a&#xA;  huge early market – by 1963, Project Apollo absorbed up to 60 percent&#xA;  of the U.S. supply of chips. The military also installed chips in its&#xA;  Minuteman-II missiles.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Both NASA and the Air Force forced companies like Fairchild&#xA;  Semiconductor to prove the chips' reliability by subjecting them to&#xA;  extreme temperatures and G-forces and rigorous visual and electrical&#xA;  inspections. The result? Apollo helped in part to accelerate the&#xA;  silicon chip revolution, at the pace predicted by Gordon Moore's&#xA;  famous law about the accelerating pace of computing power.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="15109" LastEditorUserId="15109" LastEditDate="2019-08-28T02:35:03.400" LastActivityDate="2019-08-28T02:35:03.400" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12163" PostTypeId="2" ParentId="12161" CreationDate="2019-08-28T04:59:27.737" Score="8" Body="&lt;p&gt;There are no active electronics in the keyboard: it's just membrane switches. So yes, you should desolder the shift-lock key, take it apart, and start investigating with a continuity tester.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key membrane switches themselves do become dirty and are worth cleaning with 99% isopropyl alcohol if you have the keyboard apart anyway, but given that specific columns are your issue, it's likely not the key contacts themselves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jan Beta has a video, &lt;a href=&quot;https://www.youtube.com/watch?v=ecr_iWbmnXU&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cleaning and fixing a C64C Keyboard&lt;/a&gt;, which you may find helpful to see how to take it apart. (The C64C keyboard is pretty much the same as the C64.) Also, bwack's video &lt;a href=&quot;https://www.youtube.com/watch?v=5Br9hLEXXiQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;C64 Keyboard restoration. Revive key response&lt;/a&gt; shows a neat little jig that lets you easily test all the keys on a keyboard directly using a continuity tester, without it being plugged into the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, if you're looking for further information on the keyboard subsystem beyond what you've already found, you can find extracts from and links to the Commodore service manual and keyboard page of the C64 wiki in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11191/7208&quot;&gt;this answer&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-08-31T00:40:23.023" LastActivityDate="2019-08-31T00:40:23.023" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12164" PostTypeId="2" ParentId="12158" CreationDate="2019-08-28T06:37:12.277" Score="22" Body="&lt;p&gt;Edit: as Darrel Hoffman points out, the title question is false; the proper statement is that 60% of the &lt;em&gt;U.S.&lt;/em&gt; IC production went to the Apollo Guidance Computer. (Other countries were also producing ICs, e.g. Ferranti's MicroNOR IC (&lt;a href=&quot;https://www.computerhistory.org/siliconengine/aerospace-systems-are-first-the-applications-for-ics-in-computers/&quot; rel=&quot;noreferrer&quot;&gt;1961&lt;/a&gt;) for the British Navy.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The claim that 60% of US ICs went to the AGC is found in the book &lt;em&gt;Journey to the Moon&lt;/em&gt; by Eldon Hall, the inventor of the AGC. He quotes on page 85:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Since building four or five prototypes consumed 60 percent of the country's production of integrated circuits, we can conclude this [i.e. using integrated circuits] was a bold and risky decision.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The reference for the quote is an Apollo program manager at the MIT Instrumentation in an interview in April 1966. Reference: &quot;Interview, Ralph Ragan, MIT, Cambridge MA by Ivan Ertel, April 28, 1966, JSC History Office Transcript.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same 60% figure appears in the NASA book &lt;a href=&quot;https://archive.org/details/nasa_techdoc_19880069935/page/n41&quot; rel=&quot;noreferrer&quot;&gt;Computers in Spaceflight: The NASA Experience&lt;/a&gt;, again attributed to the Ragan interview: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;by the summer of 1963, 60% of the total U.S. output of microcircuits was being used in Apollo prototype construction.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I haven't been able to find the original interview, so I'm not totally happy with these sources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Page 80 of &lt;em&gt;Journey to the Moon&lt;/em&gt; lists the multiple IC purchases for the AGC for 1962 and the first half of 1963. This totals 9866 integrated circuits, many of which were delivered late. In addition, an order for 4100 ICs from Texas Instruments was canceled because they couldn't deliver them. This shows that they ordered a large number of integrated circuits, and companies were having difficulty producing them in these quantities. Incidentally, the price dropped from $115 per chip to $12.75 over the course of these purchases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The book &lt;a href=&quot;https://pdfs.semanticscholar.org/0a42/e4f20ae4715a7e3099eccbc66f59aad6a3eb.pdf&quot; rel=&quot;noreferrer&quot;&gt;Economic Impact of Large Public Programs: The NASA Experience&lt;/a&gt; page 58 has information on the fraction of ICs used for defense (including but not limited to NASA). The estimates are 100% in 1962, 94% in 1963 and 85% in 1964.&lt;/p&gt;&#xA;" OwnerUserId="4158" LastEditorUserId="4158" LastEditDate="2019-08-28T16:54:33.060" LastActivityDate="2019-08-28T16:54:33.060" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="12165" PostTypeId="1" AcceptedAnswerId="12166" CreationDate="2019-08-28T06:41:47.183" Score="8" ViewCount="562" Body="&lt;p&gt;I remember programming a ZX spectrum in 128 basic (about 20 years ago). I remember I was able to save a third of the screen into a variable. Something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 LET A$ = [16384 BYTES starting at 16384]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But I can't remember the syntax I used. I remember then being able to store the whole screen memory in three strings. And being able to use these to store and play animations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried things like &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LET A$ = CODE 16384,16384&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LET A$ = SCREEN$(0 to 10, 0 to 32)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But I can't for the life of me remember what it was. And I can't even find it in the documentation. Since there doesn't seem to be a way to read and store strings at memory addresses. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been able to do something similar just by using a RAM disk like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SAVE! &quot;picture&quot; SCREEN$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But I am sure I was able to store the screen pixels inside a string. But all I can find in the documentation is peeking and poking one byte at a time. And ideas?&lt;/p&gt;&#xA;" OwnerUserId="15112" LastActivityDate="2019-08-28T08:13:22.497" Title="Saving screen pixels to string in ZX Basic" Tags="&lt;zx-spectrum&gt;&lt;basic&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12166" PostTypeId="2" ParentId="12165" CreationDate="2019-08-28T07:46:16.410" Score="9" Body="&lt;p&gt;Did you, by any chance, use &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=0007956&quot; rel=&quot;noreferrer&quot;&gt;Beta Basic&lt;/a&gt; for the Spectrum?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There you could assign memory ranges to strings and vice versa like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 REM Move memory to a string&#xA;20 LET a$=MEMORY$()(16384 TO 22527)&#xA;30 REM Move back&#xA;40 POKE 16384,a$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I doubt standard Sinclair BASIC would have allowed anything like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a bit of machine code, you could, however, easily implement stream input and output to and from memory. I remember having a piece of code somewhere that implemented an &quot;M&quot; stream type that could do that. &lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-08-28T07:55:55.173" LastActivityDate="2019-08-28T07:55:55.173" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12167" PostTypeId="2" ParentId="12165" CreationDate="2019-08-28T07:54:11.030" Score="3" Body="&lt;p&gt;Three strings sounds odd, as a picture is either two regions (of 6 KiB for pixels and 0.75 KiB for colour) or one 6.75 KiB chunk. See &lt;a href=&quot;/a/217/6659&quot;&gt;this great answer&lt;/a&gt; for details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As standard Spectrum basic only allowed saving the whole screen (&lt;code&gt;SAVE &quot;x&quot;  SCREEN$&lt;/code&gt;) or a memory section (&lt;code&gt;SAVE &quot;x&quot; CODE 16384,6912&lt;/code&gt;), I assume you used some machine language routine, or a BASIC extension to do your animation.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-08-28T08:13:22.497" LastActivityDate="2019-08-28T08:13:22.497" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12168" PostTypeId="1" CreationDate="2019-08-28T10:29:00.110" Score="6" ViewCount="1970" Body="&lt;h2&gt;Question&lt;/h2&gt;&#xA;&lt;p&gt;Was there any BASIC or extension or toolbox for BASIC allowing to &lt;code&gt;PEEK&lt;/code&gt; &lt;strong&gt;multiple bytes&lt;/strong&gt; from memory &lt;strong&gt;in one instruction&lt;/strong&gt; - besides the often-used &lt;code&gt;DPEEK&lt;/code&gt; (or alike) to read a word?&lt;/p&gt;&#xA;&lt;p&gt;I'm asking specifically for a &lt;code&gt;PEEK&lt;/code&gt;-like general purpose function, not specialized ones like for screen access or similar and especially not any kind of programming tricks.&lt;/p&gt;&#xA;&lt;p&gt;Giving examples of specialized functions in addition will still be nice for comparison and bonus points.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;I just learned of an awesome new piece of ancient, ancient usage from an &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12166/6659&quot;&gt;answer given by Tofro&lt;/a&gt;. There has been a BASIC extension for the Sinclair Spectrum allowing to POKE whole byte sequences to memory. In &lt;a href=&quot;https://en.wikipedia.org/wiki/Beta_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Beta BASIC&lt;/a&gt; a line like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;40 POKE 16384,A$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;will poke the content of &lt;code&gt;A$&lt;/code&gt; into address &lt;code&gt;4000h&lt;/code&gt; and the following memory.&lt;/p&gt;&#xA;&lt;p&gt;This is such a genuine simple and perfect sensible implementation. By now I'm mad at myself. Over the years I created many solutions beating around that bush, but that I've never thought about utilizing &lt;code&gt;PEEK&lt;/code&gt; that way. It's brilliant.&lt;/p&gt;&#xA;&lt;p&gt;Sure, it introduces a little bit of polymorphism into BASIC, which otherwise only goes for a fixed type and optional conversion, like float to int with conventional &lt;code&gt;PEEK&lt;/code&gt;/&lt;code&gt;POKE&lt;/code&gt;, but that has been done in other places as well.&lt;/p&gt;&#xA;&lt;p&gt;Now while extending &lt;code&gt;POKE&lt;/code&gt; is straight forward (from a language point), the much needed counterpart of &lt;code&gt;PEEK&lt;/code&gt; is not. That's mainly due the fact that BASIC strings are by default of variable length, thus the interpreter can not take the length to be read from the string (*1,2). Tofro cites in his answer a special access function:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;20 LET A$=MEMORY$()(16384 TO 22527)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Not that I would call this elegant, but more important, it's a quite Sinclair-ish notation. So my desire would be to find something more generic with a syntax compatible to more .. lets say standard BASIC.&lt;/p&gt;&#xA;&lt;p&gt;And that's what I'm looking for.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;P.S.:&lt;/h2&gt;&#xA;&lt;p&gt;A discovery like this tickles my urge to code. I want this. So far my own approach would be an extension to &lt;code&gt;PEEK&lt;/code&gt; like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;var&amp;gt; = PEEK(&amp;lt;adr&amp;gt; [,&amp;lt;len])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Here compatibility is maintained by having an implied length of 1 if not given. In addition it also needs to act differently based on the type of the receiving variable.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's an integer (&lt;code&gt;A%&lt;/code&gt;) then the bytes addressed get assigned as integer, so optional twisted for byte order (replacing the &lt;code&gt;DPEEK&lt;/code&gt; as well).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's a string (&lt;code&gt;A$&lt;/code&gt;) then they get just assigned there.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's a float (&lt;code&gt;A&lt;/code&gt;, &lt;code&gt;A!&lt;/code&gt;) everything gets blurry and must be settled by definition.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In fact, having such a function adds several possible errors - like selecting a range to large for the string data type (many BASICs can do only 255 char), or for an integer selecting more bytes than fit in one, and so on.&lt;/p&gt;&#xA;&lt;p&gt;So I'm even more interested in what kind of solutions in that area were available back then (or today) &lt;strong&gt;in BASIC&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Ignoring for the moment, that this again would be a violation of the basic BASIC design.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Yes, it would be possible to make the string to contain the wanted amount of bytes beforehand (like in &lt;code&gt;A$=SPACE$(16)&lt;/code&gt;) but that's not only clumsy but also a horrible design, quite hard to read and error prone.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-23T22:41:50.830" Title="What ways are there to &quot;PEEK&quot; of memory sections in (different) BASIC(s)?" Tags="&lt;basic&gt;" AnswerCount="7" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12169" PostTypeId="2" ParentId="12168" CreationDate="2019-08-28T10:58:26.297" Score="14" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;BBC BASIC&lt;/a&gt; didn't use the &lt;code&gt;PEEK&lt;/code&gt; or &lt;code&gt;POKE&lt;/code&gt; keywords, but had the &lt;code&gt;?&lt;/code&gt; operator and statement which had the same effect. So the statement &lt;code&gt;?128 = 0&lt;/code&gt; is equivalent to &lt;code&gt;POKE 128, 0&lt;/code&gt;, and the expression &lt;code&gt;?128&lt;/code&gt; is equivalent to &lt;code&gt;PEEK 128&lt;/code&gt;. However, it also had &lt;code&gt;!&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt; which did 32-bit and string peeks and pokes and e.g. &lt;code&gt;$128 = &quot;HELLO&quot;&lt;/code&gt; would write the ASCII bytes of &quot;HELLO&quot; into locations 128–132, and terminate the string with a carriage-return (0x0D) terminator in location 133.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Syntax such as &lt;code&gt;A?3&lt;/code&gt; could also be used and was equivalent to &lt;code&gt;?(A+3)&lt;/code&gt;. This is obviously useful for packing and unpacking structures. &lt;del&gt;This also leads to confusing syntax such as &lt;code&gt;A$1 = &quot;foo&quot;&lt;/code&gt;.&lt;/del&gt; [Deleted as this turns out to not be valid syntax.] (BBC BASIC written with all of the efficiency tricks turned up to eleven could be hard to read.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The terminator in the string operation was occasionally undesired, since it might either be unnecessary and clobbering something else in memory, or was the wrong terminator and required a bit of a dance to work around. Such strange limitations quickly push people towards the assembler...&lt;/p&gt;&#xA;" OwnerUserId="80" LastEditorUserId="80" LastEditDate="2019-08-29T13:14:10.253" LastActivityDate="2019-08-29T13:14:10.253" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12171" PostTypeId="2" ParentId="12168" CreationDate="2019-08-28T11:15:07.270" Score="8" Body="&lt;p&gt;&lt;b&gt;ZX Spectrum Beta Basic&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MEMORY$ is a pseudo-variable that considers the whole 64k of memory a string. By slicing it (Sinclair's way of implementing LEFT$, RIGHT$,...) you can pick memory areas into string variables.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 REM Move memory to a string&#xA;20 LET a$=MEMORY$()(16384 TO 22527)&#xA;30 REM Move back&#xA;40 POKE 16384,a$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;Sinclair QL SuperBASIC and Turbo Toolkit Basic extension&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Standard QL BASIC nows how to PEEK and POKE scalar integer types to/from memory&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 x$ = PEEK (x)     : REMark PEEK a byte&#xA;20 POKE x, x$        : REMark POKE it back&#xA;30 x% = PEEK_W (x)   : REMark PEEK a 16-bit word&#xA;40 POKE_W (x, x%)    : REMark POKE it back&#xA;45 REMark Note Sinclair QL BASIC doesn't have a 32-bit int type&#xA;50 x = PEEK_L (y)    : REMark PEEK a 32-bit long, convert it to float&#xA;60 POKE_L (y, x)     : REMark convert float to long, poke it&#xA;70                   : REMark last two obviously only work on even addresses&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Some toolkits (BASIC extensions) did the logical thing and implemented the same for strings (just like you proposed):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 x$ = PEEK$ (x)       : REMark assume x holds a string in standard QL format&#xA;20                      : REMark (word length, then characters), fill x$ with it&#xA;30 POKE$ (x, x$)        : REMark POKE it back&#xA;40 x$ = PEEK$ (x, len)  : REMark Does the same thing, but takes the string length&#xA;50                      : REMark as an argument, and PEEKs only the characters&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You also had the same for floating point variables&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 x = PEEK_F (y)    : REMark assumes y holds 6-byte FP in QL native format&#xA;20 POKE_F (y, x)     : REMark poke it back without first converting to byte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;Sinclair QL MEM pseudo-device&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another elegant (in my opinion, even more elegant than the above) approach to do the same thing is to supply a pseudo-device driver that pretends the memory is a random-access device:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 OPEN #4, MEM&#xA;20 GET #4\x,x$       : REMark position file pointer (i.e. address) to x, then read string x$&#xA;30 PUT #4\x,x$       : REMark put it back&#xA;40 CLOSE #4          : REMark close the &quot;file&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note this works with any other type as well, including arrays (and is, thus, way more flexible than the above approach of extending PEEK and POKE). The MEM device driver I am working with has the added feature that you can add an address to the device name like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 a = ALCHP (1024)   : REMark allocate 1k of common heap, put the address into a&#xA;20 OPEN #4,&quot;MEM_&quot; &amp;amp; a : REMark device name is now MEM_&amp;lt;address&amp;gt;. &#xA;30                    : REMark You can now work with relative offsets from a&#xA;40                    : REMark and not from 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Because the QL had some rudimentary network and a file server function, you could even open the &quot;MEM&quot; pseudo device on a server, and &quot;PEEK and POKE&quot; there:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 OPEN #4,NET1_MEM_131072&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Would open #4 to the screen memory of the QL with network station address 1. You could then save (or modify) the screen from the other box on a file on your local drives. Not extactly &quot;safe&quot;, but nerdy ;)&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-08-28T13:02:52.573" LastActivityDate="2019-08-28T13:02:52.573" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12172" PostTypeId="2" ParentId="12168" CreationDate="2019-08-28T13:21:02.273" Score="0" Body="&lt;p&gt;POKE and PEEK were used a lot in the Commodore 64 BASIC V2, as it was completely lacking in high-level commands to manipulate the screen, sprites, IO and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;POKE 53281, 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would set the screen background to black.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C = PEEK(53281)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would return an integer corresponding to the screen background colour and place it in variable 'C'.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2019-08-28T13:21:02.273" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12173" PostTypeId="1" CreationDate="2019-08-28T13:43:35.140" Score="2" ViewCount="349" Body="&lt;p&gt;EDIT: previously I added a lot of examples to this questions. I removed the examples, because the question was voted to be &quot;too broad&quot;, so I put more emphasis on the question again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an example of a library written in a &quot;modern&quot; multi-purpose language (C++, Python, Java, Go) that loads binaries of an old platform (e.g. 8-bit, 16-bit or 20-bit DOS) and emulates it partially until a given condition, like a break point?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for a library that allows mixing emulated old binaries with a modern language that doesn't have the same limitations.&lt;br&gt;&#xA;I am not looking for an emulator with a scriptable debugger, unless the debugger can be scripted in a common multi-purpose language without restrictions and can be invoked in an automated way.&lt;br&gt;&#xA;I am also not looking for software disassembled and ported to a new language.&lt;br&gt;&#xA;I am also not looking for porting a modern language to an old system.&lt;/p&gt;&#xA;" OwnerUserId="15117" LastEditorUserId="15117" LastEditDate="2019-08-29T18:55:58.363" LastActivityDate="2019-08-30T08:37:22.697" Title="emulator library that allows to partially emulate old games" Tags="&lt;programming&gt;&lt;emulation&gt;" AnswerCount="2" CommentCount="24" ClosedDate="2019-08-29T10:13:00.213" ContentLicense="CC BY-SA 4.0" />
  <row Id="12174" PostTypeId="2" ParentId="12161" CreationDate="2019-08-28T16:35:20.813" Score="5" Body="&lt;p&gt;&quot;9&quot;, &quot;0&quot;, &quot;I&quot;, &quot;O&quot; &quot;J&quot;, &quot;K&quot;, &quot;N&quot; and &quot;M&quot; are all on the same row of the &lt;a href=&quot;http://www.dg1sfj.de/images/elektronik/selbstbau/C64_SX64_keyboard/c64_keyboard_matrix.jpg&quot; rel=&quot;noreferrer&quot;&gt;keyboard matrix&lt;/a&gt;, connected to PA4 of the CIA U1. When a whole row is missing, this is unlikely to be caused by a defect or dirty membrane, but rather other reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Broken keyboard cable: Check whether PA4 of the CIA (U1, pin 6) is connected to the keyboard via the keyboard cable pin 16. A simple multi meter to check continuity would do the job. This is very likely the reason for your problem. (measure between the CIA pin and a PCB trace on the keyboard, very likely there is no connection, then move closer to the mainboard, along connector and cable to find the interruption)&lt;/li&gt;&#xA;&lt;li&gt;Single port failure of the CIA - unlikely, as the problem doesn't go away in your case whenn you swap the chips. Just mentioned for completeness here.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-08-28T16:46:28.990" LastActivityDate="2019-08-28T16:46:28.990" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12175" PostTypeId="2" ParentId="9443" CreationDate="2019-08-28T16:55:05.620" Score="7" Body="&lt;p&gt;Unix and UNIX are different stylizations of the same group of operating systems. It was originally styled as UNIX, and many variations use UNIX as the trademark.  Using either styles for all Unix operating systems in general is correct, but you can not claim that a specific version of Unix is named UNIX unless the current or past trademark holders (currently The Open Group) have also called that version a UNIX.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Open Group will extend the UNIX trademark to any system that qualifies for (and pays to be tested under) the &lt;a href=&quot;https://en.wikipedia.org/wiki/Single_UNIX_Specification&quot; rel=&quot;noreferrer&quot;&gt;Single UNIX Specification&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Unix operating system is an operating system that derives from the original UNIX developed at AT&amp;amp;T's Bell Labs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been several forks, some of which have remained proprietary, and some which have become open source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Posix specifications was created to describe various components of Unix operating systems, and to ensure interoperability of various Unix and similar systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linux is not a Unix, because it does not derive its source from any Unix distribution, despite being very similar in practice and in feel to popular open Unix distributions of the time.  Distros of Linux, however, are overwhelmingly likely to be Posix systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One early fork of the original Unix was Research Unix, which AT&amp;amp;T sold both source rights and licensing rights to various universities, to allow their researchers to adapt and redistribute those modification among others computer science academics.  The Berkeley Standard Distribution (BSD Unix) came from this fork, and was very influential in other academic versions of Unix.  The University of California at Berkeley distributed this version under a very permissive license, effectively granting full open source status to that branch of Unix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Various child projects of this BSD Unix include FreeBSD, NetBSD, OpenBSD, Mac OS X (now simply just macOS), and iOS.  Projects that derive from BSD Unix and BSD licensed software are not required to redistribute their software under similar open source licenses, unlike competing open source licenses such as the GPL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other branches of Unix have remained proprietary, and starting with the System V UNIX, it has continued to be released by various copyright holders throughout the years.  Proprietary versions of Unix will often seek the Single Unix Specification certification, thus earning the right to use the UNIX trademark.  Various UNIX systems include AIX, FTC, EurlerOS, HP-UX, IRIX, K-UX, macOS, OpenServer, Solaris, Tru64 UNIX, UnixWare, and z/OS USS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, the Single UNIX Specification does not specify that a compliant operating system must be derived from a Unix distribution.  Thus, a Linux distro can apply for the UNIX trademark.&lt;/p&gt;&#xA;" OwnerUserId="12050" LastEditorUserId="12050" LastEditDate="2019-08-28T17:00:47.040" LastActivityDate="2019-08-28T17:00:47.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12176" PostTypeId="2" ParentId="12173" CreationDate="2019-08-28T20:53:33.087" Score="2" Body="&lt;p&gt;&lt;strong&gt;Your question seems to have an inherent contradiction in it.&lt;/strong&gt; You appear to be saying that you don't want to &quot;[d]isassemble the original game and rewrite the...routines,&quot; but all the examples you give (intercept a call to a memory location, intercept a software interrupt when a register has a specific value) are ones that would require the kind of knowledge of the code you get only through disassembly (or access to source code) and, once you have that, the easiest way to implement changes is usually just to change the code directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt you'll find an emulator that provides that kind of &quot;intercept&quot; facility because that capability is already easily available in the machine itself: just change the code at a memory location or an interrupt handler to do what you want. (This is in fact often exactly how debuggers do this.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this technique does not limit your capabilities in any way: &lt;strong&gt;you can use it to call new code in any language runnining within the emulated machine&lt;/strong&gt; or, by using the I/O facilities provided by the emulator, communicate with code running outside the emulated machine. (Your new routine needs to provide the API provided by the original routine, but it can of course marshal arguments for the substitute routine as necessary, e.g., push information in registers on to the stack to call compiled C code or call into a Python interpreter, and when that returns, unmarshal the results back into registers to return to the game code.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's look at your examples:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If the subroutine at 0x1234 returns a key code whose value is used for movement (say, one of the two arrow keys) and you wish to use a gamepad, replace the routine with one that calls the emulator's I/O routines for gamepad input and translates the left/right presses on the gamepad to the appropriate key codes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you have a machine learning model running in another process outside the emulator, attach the communications channel between these two processes as an I/O device into the emulator and, in your substitute routine(s), write information out to that I/O device to send it to the other process, reading from that I/O device to get whatever information the other process wants to send back.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To replace only some of the code for a software interrupt handler (or anything else, for that matter), copy that routine elsewhere and replace it with your own code that calls your new routine if AH = 0x3F or calls the original code otherwise.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Changing the display of a side-scroller to have a bigger screen area can't be done by just replacing a few routines. As &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12180/7208&quot;&gt;Bruce Abbott points out&lt;/a&gt;, this typically involves substantial changes to the game code itself because it won't be drawing more than the screen area and a little bit around it on a continuous basis, as you can see in the examples given at 32:32 and later in Michael Steil's &lt;a href=&quot;https://youtu.be/HyzD8pNlpwI?t=1755&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Ultimate Game Boy Talk&lt;/a&gt;. (The link I give you starts at 29:15; to understand the difficulties with what you're proposing you very much need to understand everything in the Pixel Processing Unit section of that video.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Loading more data than fits into the memory/address space limitations of the original hardware has similar deep issues: the game doesn't know how to access the additional memory you wish to add, and you need to change the game itself to understand that the additional memory is there and how to access it. There's no way an emulator can do this for you.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Speeding up parts of the program to make it do more (e.g., allow more players in a multiplayer game) is an even deeper problem yet: remember that most action game code outside of modern platforms has assumptions about machine timing deeply embedded throughout the entire program: this is why older IBM PC clones used to include a &quot;turbo&quot; button to slow the machine down to original IBM PC speed, and why emulators take very great care not to run instructions faster or slower than the original hardware they're emulating.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It's certainly possible to write a &quot;scriptable debugger&quot; (as &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/225/flavio&quot;&gt;flavio aptly terms it&lt;/a&gt;) integrated into an emulator, but I doubt anybody would see much point, since once you've decided to change something beyond the API provided by the hardware I/O devices in the system it's easier and more reliable just to change the code you're running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because you're asking here about a particular implementation of a solution to a seemingly vague and general problem that you don't describe in detail, on reflection I think this question should probably be closed as too broad. I'd suggest you create a new question stating exactly what game you're trying to modify and describing specifically what you want to change about it, and let others suggest the best way of implementing that change. Once you have a few questions like this, you may be able to start asking about more general techniques for dealing with that type of problem. (For things like this, it's almost invariably better to generalize from specific solved cases, rather than try to generalize before anybody's seen specific problems and solutions.)&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;An Example Change&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Your question appears to be an example of an &lt;a href=&quot;https://en.wikipedia.org/wiki/XY_problem&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;XY problem&quot;&lt;/a&gt;: you're asking &quot;how can I use X to do Y&quot; when the easiest solution is &quot;don't use X, use something else.&quot; Here I provide a small example that I hope will help clarify this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say a game uses the arrow keys to move left and right because when it was originally designed the computer it ran on didn't have a gamepad. A gamepad was later made available on that system (as an expansion card or added to a later version of the computer) and the emulator emulates this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You've disassembled and analyzed the game to the degree that you know it calls a routine at &lt;code&gt;$3210&lt;/code&gt; to check for input, and expects &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;1&lt;/code&gt; or &lt;code&gt;2&lt;/code&gt; to be returned in the &lt;code&gt;A&lt;/code&gt; register indicating nothing, left or right being held down at that moment. The routine itself writes and reads I/O ports to scan the keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your suggestion for doing this seems to be to add code to the emulator that keeps a list of addresses at which it should stop emulation, and call host code that is dynamically linked in in some way. That code then needs to use internal APIs (if they even exist) to interface with the emulator's code that handles device input and to get the gamepad status, load the emulated machine's &lt;code&gt;A&lt;/code&gt; register with the appropriate &lt;code&gt;0&lt;/code&gt;/&lt;code&gt;1&lt;/code&gt;/&lt;code&gt;2&lt;/code&gt; result, and somehow externally reset the machine's state to return from that call to &lt;code&gt;$3210&lt;/code&gt;. This is quite tricky; perhaps it could fake an instruction load of &lt;code&gt;RET&lt;/code&gt; instead of letting the emulator load whatever instruction the PC currently points to? And keep in mind that you may have to maintain timing dependencies, too, by delaying for however long the original routine would have taken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's the hard way of doing it. The easy way is simply to replace the routine at that location with one that reads different I/O ports supplied by the emulator to read the gamepad instead of the keyboard. This requires no changes to the emulator at all, no access to the emulator's internal APIs or internal code, and is much less code and much less complex code overall. Even if the emulator doesn't offer the emulated device you need, it's far easier to add just the emulation for that device than to add what's essentially a debugger and go grovelling around in the internals of the emulator's code. Note that the emulator side of the device can do anything it wants on the host machine, even starting and communicating with other processes or the like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're not likely to find emulators that already support your solution because why would the developers of an emulator go to all the work of adding this pseudo-debugger and internal APIs and the like when there's a much simpler solution available?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's really important that an unpatched binary be loaded, you might tweak the emulator to load and apply patches after the original binary is loaded, but before emulation starts.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-08-30T08:37:22.697" LastActivityDate="2019-08-30T08:37:22.697" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12177" PostTypeId="2" ParentId="12158" CreationDate="2019-08-28T21:56:10.630" Score="6" Body="&lt;p&gt;To add to the already good answers: according to the book &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0262516101&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Digital Apollo&lt;/a&gt; (which also cites the 60% number), that AGC consumed such a large percent of the world market was intentional and strategic decision on NASA's part, as a way to both influence the design of the ICs they bought and to ensure that the supplier would stay in business:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Only one company, Fairchild, made the required chips. Would they remain available for the entire length of the project, or were they just another passing fad in electronics?... Would Apollo be a sufficiently large customer to encourage the suppliers to stay in the business? To increase the demand, [Eldon] Hall proposed all the ground test equipment for the computer be build with the MicroLogic circuits as well.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(page 126)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The major guidance components, such as the inertial unit and the accelerometers, were supplied under specific subcontracts. The integrated circuits, which proved as critical as the larger components, were simply bought from vendors... The only leverage Hall had over the suppliers, then, was as a customer. He hoped that by buying large numbers of a single part he could persuade them to improve their processes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="15122" LastActivityDate="2019-08-28T21:56:10.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12178" PostTypeId="2" ParentId="12168" CreationDate="2019-08-28T23:01:28.177" Score="2" Body="&lt;p&gt;Although it didn't let you assign data to a variable directly, GW-BASIC had &lt;a href=&quot;http://www.antonis.de/qbebooks/gwbasman/bsave.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;BSAVE&lt;/code&gt;&lt;/a&gt;, which in conjunction with &lt;a href=&quot;http://www.antonis.de/qbebooks/gwbasman/defseg.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;DEF SEG&lt;/code&gt;&lt;/a&gt;, allowed you to store from anywhere in memory to a file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 REM Save some BIOS space&#xA;20 DEF SEG=&amp;amp;HF800&#xA;30 BSAVE &quot;BIOS.BIN&quot;, 0, 255&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.antonis.de/qbebooks/gwbasman/bload.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;BLOAD&lt;/code&gt;&lt;/a&gt; worked as the reverse of this, with the interesting feature that the loaded file contained the original offset and length, and you could relocate the loaded data (but not alter its length):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 REM Restore the BIOS space to a string&#xA;20 REM DEF SEG isn't needed as it defaults to GW-BASIC's DS&#xA;30 DIM S$=STRING$(0,255)&#xA;30 BLOAD &quot;BIOS.BIN&quot;, VARPTR(S$)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;NOTE: This should work but I haven't tested it; it's been a long time since I've done this.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2019-08-28T23:01:28.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12179" PostTypeId="1" AcceptedAnswerId="12181" CreationDate="2019-08-29T00:12:04.250" Score="4" ViewCount="534" Body="&lt;p&gt;The power supply for one of my computers needs a new fan.  How do I discharge the power-supply capacitors to make it safe to open up?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With an ATX power supply, it's just a matter of unplugging it, waiting for the standby power LED on the mainboard to go off, and punching the power switch a few times to discharge any remaining power.  But AT doesn't have standby power, and the power switch is connected between mains power and the PSU.  Is it simply a matter of turning it off and waiting a few seconds, or is there more to it?&lt;/p&gt;&#xA;" OwnerUserId="4" LastActivityDate="2019-08-29T06:28:25.967" Title="Discharging an AT power supply for maintenance" Tags="&lt;power&gt;&lt;pc-at&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12180" PostTypeId="2" ParentId="12173" CreationDate="2019-08-29T00:56:30.073" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I am imagining to combine the best of both worlds by having a&#xA;  emulation library that allows me to do everything an emulator does,&#xA;  but also gives me the opportunity to only emulate parts of the code&#xA;  (e.g. run a subroutine until it returns), or have callbacks that give&#xA;  the control back to the language I am calling it from.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is what emulators already do, since at some point they have to translate virtual machine operations into real OS calls and operations that access the actual hardware. Many emulators have a built-in debugger with breakpoints that can be set at code locations or when certain operations occur, which could be a good place to add your own callback hooks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However this doesn't mean you can just tap into the emulated code at any point and jam stuff into it expecting it to work. Most games for home computers such as Amstrad CPC etc. were written in assembly language (or even raw machine code) without the use of standard libraries or APIs other than perhaps file and keyboard I/O. They often used tricks such as self-modifying code to squeeze more out of the limited memory and processing power. And they were intimately tied to the hardware, wringing the most out of it with whatever worked (sometimes using undocumented 'features' that have taken emulator writers years to reproduce accurately). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you start playing with the code all bets are off, unless you know exactly what it is doing and how it can be safely modified. Even something as 'simple' as increasing the number of characters or making the screen bigger is likely to break the code that uses that data. Graphics may be stored in a non-standard format which is specific to the particular game, with a structure that needs to be understood and preserved. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What this means is that before you can consider using emulated code as a 'library', you need to understand what its requirements and dependencies are. Making significant enhancements such as larger screen size or more objects may require extensive modifications which increase the chances of creating bugs.    &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;is there any examples of games that are extensions of&#xA;  old games that use a hybrid approach of emulating code of the original&#xA;  platform and running code on the emulating host platform.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Closest I can think of is the &lt;a href=&quot;http://www.emulatronia.com/emusdaqui/spec256/comofunciona-eng.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;SPEC256&lt;/a&gt;, which is a ZX Spectrum emulator enhanced to provide 256 color graphics. To handle the extra memory required it runs a '64 bit Z80' in parallel with the normal 8 bit CPU emulation. The developers have created tools for extracting monochrome graphics from a game and integrating the 256 color equivalents. However they haven't released the tools or any source code, and I'm betting that each game needs a lot of custom patches to get the 256 color graphics working properly.       &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-08-29T00:56:30.073" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12181" PostTypeId="2" ParentId="12179" CreationDate="2019-08-29T03:03:13.247" Score="11" Body="&lt;p&gt;Normally you would just let it sit for a few minutes.  While the output capacitors may have some residual charge, the most any one would have is 12 Volts, which isn't really dangerous to your fingers.  The input filter capacitor after the full wave rectifier, however, is a more likely threat, but killing the AC input while the power supply is under load will almost immediately drain the input DC filter capacitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The power supply sources the current required for it to operate from the AC input, which is then converted to DC and filtered by the input capacitor.  When the AC input is no longer present, the power supply will continue to try to operate from the residual voltage in the input capacitor.  If the power supply is no longer capable of powering the system, that means that the input filter capacitor has been mostly drained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It never hurts to check first with a meter, and/or discharge through a resistor.&lt;/p&gt;&#xA;" OwnerUserId="11734" LastEditorUserId="11734" LastEditDate="2019-08-29T06:28:25.967" LastActivityDate="2019-08-29T06:28:25.967" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12182" PostTypeId="2" ParentId="12168" CreationDate="2019-08-29T11:58:57.297" Score="3" Body="&lt;p&gt;&lt;strong&gt;Oric-1&lt;/strong&gt; and &lt;strong&gt;Oric Atmos&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;had the &lt;code&gt;DEEK(address)&lt;/code&gt; and the statement &lt;code&gt;DOKE address, word&lt;/code&gt; alongside of &lt;code&gt;PEEK&lt;/code&gt; and &lt;code&gt;POKE&lt;/code&gt; that worked on 16 bit values. It was really handy as it replaced the very common&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  POKE A, V AND 255 : POKE a+1, v / 256&#xA;  DOKE A, V&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  LET V=PEEK(A)+256*PEEK(A+1)&#xA;  LET V=DEEK(A)&#xA;&#xA;      &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-08-29T11:58:57.297" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12183" PostTypeId="2" ParentId="12136" CreationDate="2019-08-29T12:13:13.283" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PDWwM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PDWwM.png&quot; alt=&quot;Howard Arrington Piano Player aka Jukebox&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recovered a few weeks ago from some Sorcerer floppies.&lt;/p&gt;&#xA;" OwnerUserId="15127" LastActivityDate="2019-08-29T12:13:13.283" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12184" PostTypeId="2" ParentId="12168" CreationDate="2019-08-29T12:44:45.587" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://www.ultimateamiga.co.uk/HostedProjects/AMOSFactory/AMOSProManual/14/1404.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;AMOS Basic&lt;/a&gt; had, in addition to the usual 8-bit &lt;code&gt;Peek()/Poke&lt;/code&gt;, double-length &lt;code&gt;Deek()/Doke&lt;/code&gt; and the 32-bit (longword) &lt;code&gt;Leek()/Loke&lt;/code&gt;. This was probably inherited from STOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise, Blitz Basic had &lt;code&gt;Peek.b()/Poke.b&lt;/code&gt;, where the &lt;code&gt;.b&lt;/code&gt; could be replaced by &lt;code&gt;.w&lt;/code&gt; or &lt;code&gt;.l&lt;/code&gt;, reflecting 68000 assembly language usage.&lt;/p&gt;&#xA;" OwnerUserId="9074" LastActivityDate="2019-08-29T12:44:45.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12185" PostTypeId="2" ParentId="12136" CreationDate="2019-08-29T17:56:22.090" Score="2" Body="&lt;p&gt;Having looked into my best guess of where a competing product might be found in the same timeframe, the Apple II, the ever-questionable source of Wikipedia &lt;a href=&quot;https://en.wikipedia.org/wiki/ALF_Products#Apple_Music_Synthesizer_/_Music_Card_MC16&quot; rel=&quot;nofollow noreferrer&quot;&gt;offers&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[The Music Card MC16] was the first hardware music product sold for&#xA;  the Apple II ... demonstrated to Apple and Apple dealers late in 1978,&#xA;  and volume sales began in June 1979.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The sophisticated software written by John Ridges for this synthesizer&#xA;  was the first to implement graphical entry for a personal computer&#xA;  music product. [...] Since the Apple II had no mouse, the GUI was&#xA;  implemented using the Apple's &quot;game paddles&quot;; one moved an arrow to&#xA;  select the desired icon, and the other moved the selected icon to the&#xA;  desired position on the musical staff on the screen display. When&#xA;  entering a musical note, the sound of the note was simultaneously&#xA;  played by the synthesizer for confirmation that the correct pitch had&#xA;  been selected.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Each card could produce three simultaneous voices, each with an 8 octave range (starting at the same pitch as a piano but extending 8 semitones higher) with excellent tuning accuracy (within 2 cents) and 256 envelope/volume levels with an exponential scaling (78 dB range). Each voice could also produce quarter tones (pitches exponentially halfway between each piano pitch). Two cards could be used for six voices or three cards for nine voices; with two or three cards the audio output was in stereo.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The related screenshot is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1oUVs.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1oUVs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The entire article also covers earlier S100 hardware from the same company that was more sonically capable, but unsurprisingly limited in terms of the user interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to answer your question — &quot;Did other systems of the era have these features?&quot; — the Apple II had something similar a year earlier, but only three voices rather than four (unless you bought multiple cards).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd also distinguish this and the Exidy product from the game-oriented Pokey/SN/AY-type chips of the era as they seem to have put a lot of thought into pitch control rather than just thrown a variable clock divider at it and let the [non-linear] range fall where it may, so I didn't look seriously at the Atari 8-bit but I dare imagine that may have had some sort of composition software by 1980.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-08-29T18:53:03.833" LastActivityDate="2019-08-29T18:53:03.833" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12186" PostTypeId="2" ParentId="2663" CreationDate="2019-08-29T18:20:20.317" Score="5" Body="&lt;p&gt;We used coroutines in a system where we were implementing a new human interface. The original code was a disaster, no - strike that, was not well layered so that new interfaces were reasonably accommodated. So our approach was to redirect the original I/O register addresses to a memory block. Then the new interface code would read from real registers and spoon feed the shared memory to the old code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We implemented this with two functions KBD and DISP in place of the original code's idle loop and used coroutine calls to go between them. There were probably 20 or so places inside KBD where input sequences were being accumulated and I/O waits were in progress. Instead of waiting in the KBD code the code would call DISP. DISP looks at the shared memory and when something changes it writes to the new display. While DISP was doing that it may have had to wait and would go back to KBD with a cocall. So neither KBD nor DISP knew exactly where in the peer's process the cocall would go each could call the other with the exact $PC after the last cocall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;KBD might go line this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while true {&#xA;  while no_input { cocall }&#xA;  read input&#xA;  dispatch on input data&#xA;  do-x:&#xA;    while no_input { cocall }&#xA;    read extra input&#xA;    write to memory block&#xA;    while old_code_reads_memory_block { cocall }&#xA;  do-y:&#xA;    write to memory block&#xA;    while old_code_reads_memory_block { cocall }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then DISP does similarly:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while true {&#xA;    while memory_block_is_unchanged {cocall}&#xA;    figure out what display objects to write&#xA;    write a:&#xA;      place data in register A&#xA;      while waiting_for_ack {cocall}&#xA;      signal to memory block that data is accepted&#xA;      while waiting for memory block ack {cocall}&#xA;    write b:&#xA;      &amp;lt;more of the same&amp;gt;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the PDP-11 you couldn't set this up with normal JSR and RTS calls. There was a startup gimmick where KBD would push the address of DISP on the stack. Then as KBD wanted to defer processing it would execute the &lt;code&gt;JSR PC,@(SP)+&lt;/code&gt; and go off into DISP. So the two merrily bounce back and forth each using their respective $PC registers as a context pointer for the other to return to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were, of course, some down sides to this approach but it was pretty slick.&lt;/p&gt;&#xA;" OwnerUserId="15130" LastActivityDate="2019-08-29T18:20:20.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12187" PostTypeId="2" ParentId="5080" CreationDate="2019-08-30T01:30:41.313" Score="6" Body="&lt;p&gt;Searching for &quot;fastest Z80&quot; finds this discussion.  I have overclocked a 20Mhz Z80 with KIO (Z84C90) as the IO device to 33 MHz.  Everything is running zero wait state.  It can execute the comprehensive instruction test, zexall.com, in CPM under 24 minutes.  So is this the fastest plain old Z80?  More info here: &lt;a href=&quot;https://www.retrobrewcomputers.org/doku.php?id=builderpages:plasmo:k80&quot; rel=&quot;noreferrer&quot;&gt;https://www.retrobrewcomputers.org/doku.php?id=builderpages:plasmo:k80&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15134" LastActivityDate="2019-08-30T01:30:41.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12188" PostTypeId="1" CreationDate="2019-08-30T01:31:26.103" Score="8" ViewCount="1691" Body="&lt;p&gt;These days we are constantly seeing low-cost boards that have huge power (raspberry pi, various arduino-like microcontrollers.)&lt;/p&gt;&#xA;&lt;p&gt;I am hoping I could make, or get, a clone or emulation of an Apple II that was &amp;quot;stand alone&amp;quot; in a piece of hardware... instead of running within a larger PC.&lt;/p&gt;&#xA;&lt;p&gt;Can you tell me the options in doing such a thing?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I know that one option is Linapple or Linapple-Pi.   Is that pretty much the main option? -- for example &lt;a href=&quot;https://www.reddit.com/r/apple2/comments/8uxiwr/35_apple_powered_by_linapple_and_raspberry_pi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.reddit.com/r/apple2/comments/8uxiwr/35_apple_powered_by_linapple_and_raspberry_pi/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No chance that someone has (maybe illegally) taken the whole Apple II, placed it onto chips in a small board, and sells that?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15133" LastEditorUserId="6659" LastEditDate="2021-01-24T22:27:10.980" LastActivityDate="2021-01-24T22:27:10.980" Title="Build a hardware clone or emulator of Apple II?" Tags="&lt;apple-ii&gt;&lt;emulation&gt;&lt;clone&gt;&lt;diy-computing&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12189" PostTypeId="2" ParentId="12188" CreationDate="2019-08-30T04:19:23.317" Score="13" Body="&lt;p&gt;There's &lt;a href=&quot;http://www.willegal.net/appleii/appleii-recreation.htm&quot; rel=&quot;noreferrer&quot;&gt;a full clone of a revision 0 Apple II motherboard&lt;/a&gt; made by one avid retrocomputing enthusiast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He no longer has kits for sale, but the board Gerber files are available.  Order some boards from a PCB manufacturer, source the components, and you'll have everything to build your own complete Apple II mainboard.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2019-08-30T04:19:23.317" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12190" PostTypeId="1" AcceptedAnswerId="12192" CreationDate="2019-08-30T08:07:34.607" Score="11" ViewCount="1669" Body="&lt;p&gt;Most of the reference material for the Apple II that I have seen refers to the 4116 RAM chip which held 16x1 kbit.  This provided 16, 32 or 48 KB in banks of 8 chips.  The Apple II motherboard layout seems to confirm this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, early Apple II material refers to 4 KB, 8 KB, 12 KB and other memory sizes.  Did this actually exist?  How was it implemented?&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="175" LastEditDate="2019-08-30T15:11:27.947" LastActivityDate="2020-08-19T12:59:33.647" Title="Small RAM 4 KB on the early Apple II?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;ram&gt;&lt;motherboard&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12191" PostTypeId="2" ParentId="12190" CreationDate="2019-08-30T08:25:35.797" Score="8" Body="&lt;p&gt;The following information comes mainly from pages 70-72 of the &lt;a href=&quot;https://archive.org/details/Apple_II_Reference_Manual_1979_Apple/page/n80&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Apple&#xA;II Reference Manual&lt;/em&gt;, 1979 edition&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Apple II had three rows of eight sockets for DRAM: rows C through&#xA;E from front to back. Each row could accept either 4116 16Kbit×1 or&#xA;4104 4Kbit×1 DRAM chips.&lt;/p&gt;&#xA;&lt;p&gt;Each row also had next to it a DIP socket for a 14-pin &amp;quot;memory&#xA;configuration block&amp;quot; that contained three jumper wires that would set&#xA;the DRAM chip sizes and locations of the rows in that Apple II's&#xA;memory map. All three blocks must have the same pairs of pins&#xA;connected or Weird Things will happen. (What exactly those Weird&#xA;Things are would be the topic of another question.)&lt;/p&gt;&#xA;&lt;p&gt;The memory configuration blocks were normally supplied by Apple (when&#xA;you bought the system or when you bought more RAM from Apple), and&#xA;there were nine configurations for which Apple supplied configuration&#xA;blocks, each of which gave contiguous memory from address &lt;code&gt;$0000&lt;/code&gt; up&#xA;to the top of RAM:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Total  Row C  Row D  Row E&#xA; 48K    16K    16K    16K&#xA; 36K    16K    16K     4K&#xA; 32K    16K    16K     -&#xA; 24K    16K     4K     4K&#xA; 20K    16K     4K     -&#xA; 16K    16K     -      -&#xA; 12K     4K     4K     4K&#xA;  8K     4K     4K     -&#xA;  4K     4K     -      -&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;However, Apple also gives the details of the configuration blocks,&#xA;which allowed you to create your own non-contiguous mappings if you&#xA;wished. Typically this was used to allow you to map memory into the&#xA;high-resolution screen buffer memory areas if you didn't have enough&#xA;memory for a contiguous map to include those, as &lt;a href=&quot;https://apple2history.org/history/ah03/#01&quot; rel=&quot;nofollow noreferrer&quot;&gt;described at&#xA;apple2history.org&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The first 4K of memory always had to have RAM present, since it was&#xA;used by the 6502 processor, the ROM routines, and the text screen&#xA;display. If, for example, you only had two other [rows of] 4K RAM chips to&#xA;install and you wanted to display hi-res graphics, you could strap&#xA;one [row of] chip[s] to the lower half of hi-res memory from $2000-$2FFF, and&#xA;the other to the upper half of hi-res memory from $3000-$3FFF.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The configuration blocks had three pins, 14, 13 and 12, for rows C, D&#xA;and E, and each of these should be connected to another pin indicating&#xA;the size and starting memory address to which the row would be mapped:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Pin  Size  Start       Pin  Size  Start&#xA; 1    4K   $0000         6    4K  $5000&#xA; 2    4K   $1000         7    4K  $8000&#xA; 3    4K   $2000         8   16K  $0000&#xA; 4    4K   $3000         9   16K  $4000&#xA; 5    4K   $4000        10   16K  $8000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The manual mentions that:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If a row contains eight chips of the 16K variety, then you should&#xA;connect a jumper wire from the pin corresponding to that row to a&#xA;pin corresponding to a 16K range of memory. Similarly, if a row&#xA;contains eight 4K chips, you should connect a jumper wire from the&#xA;pin for that row to a pin corresponding to a 4K range of memory. You&#xA;should &lt;em&gt;never&lt;/em&gt; put 4K chips in a row strapped for 16K, or vice&#xA;versa. It is also not advisable to leave a row unstrapped, or to&#xA;strap two rows into the same range of memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The manual goes on to give the example of mapping 4K of RAM starting&#xA;at page 0 and two more 4K blocks covering the high-res screen buffer&#xA;at location &lt;code&gt;$2000&lt;/code&gt;, as described in the apple2history.org quote&#xA;above.&lt;/p&gt;&#xA;&lt;p&gt;The manual also mentions that Revision 0 boards have a bug mirroring&#xA;the 8K range at &lt;code&gt;$4000&lt;/code&gt; at &lt;code&gt;$6000&lt;/code&gt;, regardless of whether the latter&#xA;contains memory or not. This was fixed in the revision 1 boards.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-08-19T12:59:33.647" LastActivityDate="2020-08-19T12:59:33.647" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12192" PostTypeId="2" ParentId="12190" CreationDate="2019-08-30T08:30:28.683" Score="15" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Most of the reference material for the Apple II that I have seen refers to the 4116 RAM chip which held 16x1 kbit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Jup, at the time the Apple II really took off, 4116 chips had already dropped to less than twice the price of 4104, making any use of 4104 impractical. Not many were delivered using 4104, and while some users may have had 4104, they all soon replaced them by 4116, thus it's highly unlikely to find any Apple II board with 4104.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Apple II motherboard layout seems to confirm this.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Depends on what motherboard you look at. Only newer are tied to 4116 usage. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;However, early Apple II material refers to 4 KB, 8 KB, 12 KB and other memory sizes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes (*1).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did this actually exist?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. All boards before the II+ were made that way, see below.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How was it implemented?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The first series of the original II board had one 16-pin DIL socked for each of the RAM rows (*2), made to 'jumper' for 4 or 16 Ki DRAM use. Here a premade block with wiring for either type could be placed, according to what chips were used. The blocks connected the necessary lines to switch CS0 (4104) and A6 (4116) as well address select lines to make RAM continuous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The top row of this beautiful board pictured features three blocks for 16 Ki usage:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tBilK.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tBilK.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;(Taken from this &lt;a href=&quot;http://www.willegal.net/appleii/appleii-kit.htm&quot; rel=&quot;noreferrer&quot;&gt;interesting project page&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later production runs (of the original board) had the 16 Ki version of these blocks directly soldered to the board, so only 4116 could be used. With newer board revisions the whole blocks were dropped and replaced by fixed wiring, allowing only 4116 to be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A look at the &lt;a href=&quot;https://downloads.reactivemicro.com/Apple%20II%20Items/Hardware/II_&amp;amp;_II+/Schematic/Apple%20II%20Schematics.pdf&quot; rel=&quot;noreferrer&quot;&gt;original schematics&lt;/a&gt; shows these blocks (left of the RAM area) as well as a pinout of 4104 vs 4116 (direct below RAM area)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Valid memory combinations were&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  4/ 8/12 KiB with only 4104&#xA; 16/20/24 KiB with 1 row 4116 and 0/1/2 rows of 4104&#xA;    32/36 KiB with 2 rows 4116 and 0/1 row of 4104&#xA;       48 KiB with 3 rows 4116&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Anything above needed RAM cards and memory switching - the 16 KiB Language Card being the granddaddy of all of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - At position D1/E1/F1 - basically shifted one row up from the RAM row (C/D/E) they configured.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-08-31T05:27:15.107" LastActivityDate="2019-08-31T05:27:15.107" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12193" PostTypeId="2" ParentId="12161" CreationDate="2019-08-30T16:25:10.897" Score="6" Body="&lt;p&gt;&lt;em&gt;I'm posting the result of troubleshooting and fixing my broken keyboard in the hope it might help others.  However, I am accepting Curts answer as the solution because he responded first and his advice confirmed there were no active electronics to worry about in the keyboard itself, and his linked information helped me to understand how to interpret the keyboard matrix to properly ring out the keyboard PCB.  I'd also like to thank Tofro for his answer which I also found helpful.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After disassembling the keyboard and visually examining the PCB, I was able to spot quite a bit of corrosion in all the traces coming from where the keyboard harness wires are soldiered to the PCB.  I suspect a certain careless 15 year old probably left a nice thumbprint covered in pizza grease here sometime in the 1980's...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I knew from the keyboard matrix that the keys giving me problems were all related to Port A Bit 4, which is pin 16 on the header - so I started by testing continuity from the female keyboard connector to the soldier point labeled 'E' on the PCB.  Indeed this rang out without any problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next I tried tracing further into the PCB by checking for continuity between point 'E' and the first exposed keypad contact, which did NOT work.  This seemed to indicate the  problem existed in the trace just after point 'E', but before the keypad - which correlated with the noted corrosion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a picture of point 'E', the first keypad and the corrosion:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GcLsf.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GcLsf.jpg&quot; alt=&quot;Keyboard PCB Before Fix&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I decided the easiest way to fix this would be to tack a short wire between point 'E' and the 'Y' shaped part of the trace past the corroded area.  To accomplish this I first drilled two small through-holes in the PCB beside point 'E' and the 'Y' junction.  Next, I then removed the green coating on the 'Y' junction by gently scraping the area with a sharp Exacto knife to expose the bare copper.  Finally, I routed a piece of copper wire through the hold I drilled and soldiered it as neatly as I could.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the trace side of the PCB:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7Jg6M.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7Jg6M.jpg&quot; alt=&quot;Keyboard PCB After Fix (Inside)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the wire routed on the outside of the board:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sBMFf.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sBMFf.jpg&quot; alt=&quot;Keyboard PCB After Fix (Outside)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I re-assembled the keyboard and connected it back to my C-64.  A quick test revealed all keys are now functioning normally again.  I'm a bit concerned about the corrosion in that area, as it may cause future problems with other traces.  I guess time will tell.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2019-08-30T16:25:10.897" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12194" PostTypeId="1" AcceptedAnswerId="12196" CreationDate="2019-08-31T02:59:55.320" Score="15" ViewCount="1363" Body="&lt;p&gt;My understanding is that when you toggle in an address on the Altair 8800 front panel switches and then press the EXAMINE switch, it loads the program counter with that address, or at any rate does something so that you can then press SINGLE STEP or RUN to start executing the instruction at that address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How exactly does it load the program counter, given that there's no obvious way to tell the CPU to do this without excecuting instructions to do so? Does it actually put instructions on the bus and get the CPU to execute them? Or is there some other clever trick?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;References to schematics are welcome; if you can provide additional information on exactly how the circuits work, that's even better.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;A Note on the Answers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've accepted &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12196/7208&quot;&gt;比尔盖子's answer&lt;/a&gt; because after (slowly) walking through it in conjunction with the full schematic page I understood just how the data bus was being manipulated, which is the level of detail I was personally looking for. (His schematic excerpts really helped to make sure I was focusing on the right parts for each step.) But if you just want a more general description, or want an overview before diving into the details, you may want to read the other answers before the accepted one.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-01T08:02:20.243" LastActivityDate="2019-09-01T12:18:47.470" Title="How did the Altair 8800 front panel load the program counter?" Tags="&lt;altair-8800&gt;&lt;front-panel&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12195" PostTypeId="2" ParentId="12194" CreationDate="2019-08-31T04:16:14.530" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How exactly does it load the program counter, given that there's no obvious way to tell the CPU to do this without excecuting instructions to do so?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Seams like you know it already :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does it actually put instructions on the bus and get the CPU to execute them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's exactly what is done: &lt;strong&gt;Let the CPU jump to that address&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of 'EXAMINE' the front panel injects a jump to set the desired address. When presses, a &lt;code&gt;JMP&lt;/code&gt; (opcode &lt;code&gt;11 000 011&lt;/code&gt;) is inserted, followed by the two address bytes and one cycle to halt the CPU again. All orchestrated by a little sequencer build from the two flip-flops of a 7473.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of 'EXAMINE NEXT', similar, a &lt;code&gt;NOP&lt;/code&gt; (opcode &lt;code&gt;00 000 000&lt;/code&gt;) gets inserted to make the CPU advance to the next address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'DEPOSIT' issues a single memory write cycle without having the CPU do anything, while 'DEPOSIT NEXT' does the same plus triggering the &lt;code&gt;NOP&lt;/code&gt; execution of 'EXAMINE NEXT' after that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Looking at page 25 of this &lt;a href=&quot;http://chiclassiccomp.org/docs/content/computing/MITS/MITS_Altair8800TheoryOperation_1975.pdf&quot; rel=&quot;noreferrer&quot;&gt;scan of the manual&lt;/a&gt; will show it to you in all detail)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or is there some other clever trick?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Isn't already quite clever?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic trick is the same as with Sinclair's ZX80 Video access (which itself is an application of the 'Cheap Video' circuit) and others. Except operating in stop motion :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-08-31T04:40:36.837" LastActivityDate="2019-08-31T04:40:36.837" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="12196" PostTypeId="2" ParentId="12194" CreationDate="2019-08-31T11:46:31.117" Score="21" Body="&lt;p&gt;Just about a week ago, I encountered the same question as I was thinking about the idea of building a front panel for my homebrew computer, but I didn't understand how could one &quot;move&quot; the CPU to execute code at an user-specified address without affecting other components such as the content inside the RAM, I even searched at RC.SE! And so, I decided to take a look at Altair 8800. As I'm a bit late for the question, I'll just post some details from page 25 of &lt;a href=&quot;http://chiclassiccomp.org/docs/content/computing/MITS/MITS_Altair8800TheoryOperation_1975.pdf&quot; rel=&quot;noreferrer&quot;&gt;the schematics&lt;/a&gt; to show the additional information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The circuitry was surprisingly simple and clever.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When the &quot;Examine&quot; button is pressed it generates a high pulse to &lt;code&gt;1CK&lt;/code&gt; below to activate a counter made from two 7473s. Also, at this point, there is no memory or I/O activity, the bus is free.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tSwH4.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tSwH4.png&quot; alt=&quot;7473 counters&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;(a) On the first count, the processor is started, and a logical &quot;1&quot; is sent to four 7405 inverter gates, which are connected to data line &lt;code&gt;D2&lt;/code&gt;, &lt;code&gt;D3&lt;/code&gt;, &lt;code&gt;D4&lt;/code&gt;, &lt;code&gt;D5&lt;/code&gt;. Thus, they are pulled to ground and became hardwired logical &quot;0&quot;. The 7405 is used, because it has open-collector outputs, it either pulls a line down, or doesn't touch the line at all, avoid the need of tristate outputs.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aEFVL.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aEFVL.png&quot; alt=&quot;7405 inverters&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;(b) On the other hand, the undriven pins &lt;code&gt;D0&lt;/code&gt;, &lt;code&gt;D1&lt;/code&gt;, &lt;code&gt;D6&lt;/code&gt;, &lt;code&gt;D7&lt;/code&gt; are kept at logical &quot;1&quot;, because the data lines have 4.7k ohm pull-up resistors.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Wr5yH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Wr5yH.png&quot; alt=&quot;pull-up resistors&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;(c) As a result, the opcode &lt;code&gt;11000011&lt;/code&gt;, generated from a completely hardwired circuit, is injected directly on the data bus. Also, the address bus is completely ignored - no matter what address the CPU wants to read from, it gets the ones and zeros we just injected, which is the opcode for &lt;code&gt;JMP&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On the second count, another 8 gates of 7405 inverters are activated, correspond to the 8 toggle switches for address bits &lt;code&gt;A0-A7&lt;/code&gt;. If a switch is toggled, it completes the circuit and allows our 7405 to pull the line to logical &quot;0&quot;. Otherwise, the lines are untouched and kept at logical &quot;1&quot; by pull-up resistors. Thus, the CPU gets the next byte from the data bus, still injected by us, which is the low 8-bit part of the 16-bit address.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/811PI.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/811PI.png&quot; alt=&quot;7405 injects low 8-bit address&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;On the third count, another 8 gates of 7405 inverters are activated in the same way, this time, they correspond to the 8 toggle switches for address bits &lt;code&gt;A8-A15&lt;/code&gt;. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MAIwI.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MAIwI.png&quot; alt=&quot;7405 inject high 8-bit address&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;5&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Therefore, CPU gets the final byte we injected from the data bus. At this point, the CPU has fetched a complete instruction,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;JMP XXYYh&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;JMP&lt;/code&gt; is generated by our hardwired circuit, and XX and YY are derived from the toggle switches. Great, we have just modified the Program Counter without affecting anything else!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On the fourth count, the counter resets, which in turn pulls EXM line low, and causes PRDY to be low and stops the processor again.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h3&gt;Appendix I: How does Altair 8800 avoid bus conflicts?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Cautious readers would immediately notice a critical problem: The RAM is not disabled while we're injecting instructions to the data bus! It means, the RAM would also respond and start outputting data simultaneously, creating a bus contention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does Altair 8800 avoid this problem? First of all, it's important to notice that our code injection circuitry and the toggle switches from the front panel are &lt;em&gt;not connected&lt;/em&gt; to the demultiplexed, buffered &quot;normal&quot; data bus, instead, it is &lt;em&gt;connected directly&lt;/em&gt; to Intel 8080's bidirectional &quot;raw&quot; data bus, see page 24.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/enEmb.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/enEmb.png&quot; alt=&quot;The location of front panel&amp;#39;s connection&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From this segment of the schematics, one can see that all the data from the CPU to the bus (&quot;output&quot;) is buffered by a group of 8T97 tristate buffers, all the data from the bus to the CPU (&quot;input&quot;) is buffered by another group. When the CPU needs to write data, the output buffer is enabled, driving the data from the CPU to the bus; when the CPU needs to read, the input buffer is enabled, driving the data from the bus to the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key to our success is this part of the circuitry, which is connected to pin 1 of the 8T97 buffer, responsible for enabling/disabling the input buffer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1F4fm.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1F4fm.png&quot; alt=&quot;input buffer control&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will enable the input buffer and allow the data to flow towards the CPU, only if the following conditions are met (see page 4).&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;CPU needs to read data from the data bus (&lt;code&gt;DBIN&lt;/code&gt;), or the CPU releases data bus due to DMA (&lt;code&gt;HLDA&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The front panel is switched to Run (&lt;code&gt;RUN&lt;/code&gt;) or Single Step (&lt;code&gt;SS&lt;/code&gt;) mode.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The buffer is not explicitly disabled by the &lt;code&gt;/SSW DSB&lt;/code&gt; signal from the front panel.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;When the front panel is used for examining the memory, the RUN/STOP switch is flipped to &lt;code&gt;STOP&lt;/code&gt;. As a result, the Condition (2) is unsatisfied,  the input buffers are disabled, effectively isolating the CPU from all RAM and I/O ports, leaving only the pull-up resistors and our front panel. Therefore, the bus contention problem is avoided without disabling the RAM explicitly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Meanwhile, the RAM is not disabled for a good reason: we need to inspect them. To do this, indicator lights are simply connected to the &quot;normal&quot; bus lines (&lt;code&gt;DI_0-7&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VXNx0.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VXNx0.png&quot; alt=&quot;Indicator Lights&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The final conclusions: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;When we need to examine the RAM: Instead of driving the address bus and generate the proper RAM-access signals by ourselves, we simply exploit the existing Intel 8080 CPU to do it for free, by injecting a &lt;code&gt;JMP&lt;/code&gt; instruction.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When we need to capture the data from RAM: Instead of latching the data by ourselves, we simply disable the input buffers, inject the instructions from one side, and watch the bits coming out from RAM to the indicator lights at the other side.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As a side-effect, this process also modifies current Program Counter of the CPU.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Using this simple circuit design and a minimum number of components, we hit three birds with one stone. This design is not without its limitation, which helped to explain the reason behind two oddities on the Altair 8800: (1) &quot;EXAMINE&quot; also modifies PC, (2) The indicator lights only shows input, not output. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The designers in Ed Roberts's company must have put great effort to reduce the cost and complexity of the Altair 8800 system.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Appendix II: What is &lt;code&gt;/SSW DSB&lt;/code&gt;?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;As you see, pulling the signal &lt;code&gt;/SSW DSB&lt;/code&gt; to ground will disable the input buffers as well. Why don't we use this signal? What is it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Altair 8800 has a special input port, 0xFF, which is the current position of the sense switch. As I mentioned, toggle switches are connected directly to the raw, unbuffered 8080 data bus. If we want to read the input from the sense switch, the input buffer must be switched off. The &lt;code&gt;/SSW DSB&lt;/code&gt; is used for this purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EB2LF.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EB2LF.png&quot; alt=&quot;sense switch control logic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Signal &lt;code&gt;/SSW DSB&lt;/code&gt; is generated to switch off the input buffer, when...&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The CPU needs to read data from the data bus (&lt;code&gt;DBIN&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The source is an I/O port (&lt;code&gt;SINP&lt;/code&gt;). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The address is 0xFF (255). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="12128" LastEditorUserId="12128" LastEditDate="2019-09-01T12:18:47.470" LastActivityDate="2019-09-01T12:18:47.470" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12197" PostTypeId="2" ParentId="2664" CreationDate="2019-08-31T15:13:49.877" Score="0" Body="&lt;p&gt;I am documenting a file format that uses 32-bit floating point data in a DEC, Intel and SGI/MIPS environments and just created an image that might help document the different storage formats for floating point numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yNeNO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yNeNO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15141" LastActivityDate="2019-08-31T15:13:49.877" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12198" PostTypeId="2" ParentId="2664" CreationDate="2019-08-31T20:05:56.023" Score="0" Body="&lt;p&gt;separate sign bit allows very easy &lt;code&gt;abs&lt;/code&gt; value extraction which can have huge impact on performance as many floating point operations need to handle sign separately. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means less gates and or better processing speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simple example is mantissa bit shifting (which is used for almost all FPU operations). Absolute value can be bit-shifted directly (injecting zeros) but two's complement needs to copy the highest bit for bit shift right instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other operations (like multiplication) need to handle negative two's complement values in a different way than positive which leads to more circuitry and or &lt;code&gt;case&lt;/code&gt; code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also using lower bit-width ALU for IEEE &lt;code&gt;float/double&lt;/code&gt; SW emulation need to stack up more operations (like for big integers) which is much more easier with separate sign (for similar reasons)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I assume that was the major reason to chose current FPU representation by IEEE ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-08-31T20:10:57.060" LastActivityDate="2019-08-31T20:10:57.060" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12199" PostTypeId="2" ParentId="11959" CreationDate="2019-08-31T21:56:31.317" Score="4" Body="&lt;p&gt;The CBM900 came before PC10, the prototypes were sent out early 1984 (I started in Commodore Denmark on august 1st 1984 with half the job being supporting the CBM900).&lt;/p&gt;&#xA;&lt;p&gt;I believe we got the first PC10 prototypes in early 1985, but they were embargoed because the BIOS was too identical to IBM's for legal comfort.&lt;/p&gt;&#xA;&lt;p&gt;The 900 were designed in US, but the prototypes were built in Germany because they could handle the large PCB.&lt;/p&gt;&#xA;&lt;p&gt;The cabinet was designed for the C900, and there were significant carry-over from that to both PC10 and the Amiga.&lt;/p&gt;&#xA;" OwnerUserId="15145" LastEditorUserId="3316" LastEditDate="2020-12-15T08:49:54.940" LastActivityDate="2020-12-15T08:49:54.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12200" PostTypeId="1" AcceptedAnswerId="12201" CreationDate="2019-09-01T00:47:19.447" Score="14" ViewCount="1890" Body="&lt;p&gt;I'm considering building some custom gizmos to connect to the gameport on my retro-hobby PC (SNES controller adapter, macro/turbo box, etc.) but I haven't been able to find much information on details such as allowed current limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Just &lt;a href=&quot;https://www.dslreports.com/forum/r6942497-Gameport-How-much-power-is-available&quot; rel=&quot;noreferrer&quot;&gt;this un-cited mention on the DSLReports forums&lt;/a&gt; which claims &quot;The standard operating voltage for a MIDI/Gameport is 5 Volts ± 5% and a current output of 40mA when active and 22mA when in standby.&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given some of the fancier digital joysticks that didn't require external power supplies, I know it's possible to hang &lt;em&gt;some&lt;/em&gt; kind of fancy load off the gameport's 5V lines, but I don't want to gamble that the SoundBlaster 16 I carefully sourced off eBay a few years ago is at least as robust as whatever combination of still-in-production USB-Gameport adapter and Raspberry Pi that I risk for development testing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the side of protecting the host PC, I'm hoping to find a solid source for details such as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Maximum safe peak current&lt;/li&gt;&#xA;&lt;li&gt;Maximum safe sustained current&lt;/li&gt;&#xA;&lt;li&gt;The DOs and DON'Ts that digital joysticks stuck to when pinouts like &lt;a href=&quot;https://old.pinouts.ru/Inputs/GameportPC_pinout.shtml&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt; list multiple 5V supply lines and specify that each GND line is intended for a specific button.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On the side of protecting the microcontroller, does anyone have any specs on maximum observed current when the buttons are pressed or the X and Y axis lines are at the 0Ω end of their range?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(In case it's relevant, I'm hoping to use those sub-$1 Chinese STM8S boards with &lt;a href=&quot;https://tenbaht.github.io/sduino/&quot; rel=&quot;noreferrer&quot;&gt;Sduino&lt;/a&gt; if the numbers check out. 16MHz should be enough to bit-bang things and you can't beat 'em for size or price.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A citation which also has similar information on PC and PS/2 keyboard ports would be appreciated since I'm also considering building a knock-off of the &lt;a href=&quot;https://www.youtube.com/watch?v=Ko1SEP-VtGs&quot; rel=&quot;noreferrer&quot;&gt;Dynapoint GameStar&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastEditorUserId="6794" LastEditDate="2019-09-05T05:40:12.413" LastActivityDate="2019-09-05T05:40:12.413" Title="What are the electrical characteristics of a PC gameport?" Tags="&lt;ibm-pc&gt;&lt;joystick&gt;&lt;documentation&gt;&lt;ports&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12201" PostTypeId="2" ParentId="12200" CreationDate="2019-09-01T06:09:04.723" Score="14" Body="&lt;p&gt;The &lt;a href=&quot;http://www.minuszerodegrees.net/oa/OA%20-%20IBM%20Game%20Control%20Adapter.pdf&quot; rel=&quot;noreferrer&quot;&gt;documentation for IBM's original Game Control Adapter&lt;/a&gt; has some details that will be of use. Even though you're using a SoundBlaster card instead, it should still be compatible with the IBM original.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the documentation doesn't specify maximum currents for any pins, it does have a logic diagram:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gdJFV.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gdJFV.png&quot; alt=&quot;Circuit Diagram of IBM Game Control Adapter&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can be seen that on the original gameport, the button inputs are fed to a 74LS244 buffer (via 1Kohm pull-up resistors and 51pF capacitors). The &lt;a href=&quot;http://www.ti.com/lit/ds/symlink/sn74ls244.pdf&quot; rel=&quot;noreferrer&quot;&gt;74LS244's datasheet&lt;/a&gt; specifies a maximum low-level output current of 24mA per pin, and high-level output current of -15mA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The potentiometer (axes) inputs are fed to the timing inputs of an NE558 quad timer (via inline 2.2kohm resistors and .01uF capacitors). Its &lt;a href=&quot;https://web.stanford.edu/class/archive/physics/physics105/physics105.2002/datasheets/Analog_Linear_OpAmp_ICs/7555_and_555/NE558_QuadBJT.pdf&quot; rel=&quot;noreferrer&quot;&gt;datasheet&lt;/a&gt; lists no details for the current load on these input pins; they're used as RC timing values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM diagram shows all the grounds (and 5V supplies) connected in common. I suspect the gameport's 5V pins are connected directly to the ISA slot's 5V supply; this could be verified for your card with a continuity test on a multimeter. If this is the case, the maximum current draw permitted for an ISA card may give some further guidance.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-09-01T06:09:04.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12202" PostTypeId="2" ParentId="12194" CreationDate="2019-09-01T06:18:04.953" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://kyozoufs.blob.core.windows.net/filestoragedb1/Pictures/_17/16780/16779875.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;IMSAI 8080 front panel&lt;/a&gt; seems to be nearly identical to the&#xA;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Living_Computers_-_Altair_8800_(39802981903).jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Altair 8800 front panel&lt;/a&gt;.¹ I just stumbled across a 1999&#xA;document, &lt;a href=&quot;https://imsai.net/support/cpa_rev4.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;IMSAI CPA Front Panel Control Board&lt;/a&gt;, that gives an&#xA;excellent description of how this works:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Several CP-A function switches operate by providing the 8080 with an&#xA;instruction, executing the instruction, and then stopping the&#xA;processor on the next cycle. The open collector 7405's and support&#xA;gating put these instructions on the 8080's bi-directional bus. The&#xA;EXAMINE function uses a jump instruction (hex C3) followed by two&#xA;bytes of the address selected on the front panel switches. This&#xA;operation causes the processor to jump to the selected address and,&#xA;then, the processor is stopped during the next cycle. When stopped,&#xA;the processor was reading the selected byte from memory as if it&#xA;were going to execute it. Therefore, the processor stops with the&#xA;desired address displayed on the address bus and the contents of&#xA;that address is displayed on the data bus. If the RUN switch is&#xA;operated at this time, IMSAI 8080 CPA Front Panel the processor will&#xA;continue to pull the selected byte from memory and execute it.&lt;/p&gt;&#xA;&lt;p&gt;The EXAMINE NEXT and DEPOSIT NEXT switches use similar schemes and&#xA;the NO-OP (hex 00 or octal 000) instruction to increment the&#xA;address. Much of the remaining logic of the CP-A is used to sequence&#xA;these commands to provide the desired functions. The RUN/STOP&#xA;flip-flop line, the SINGLE STEP line, the EXAMINE line, and the&#xA;EXAMINE NEXT-line are all input to an OR-gate controlling the&#xA;X-READY line. (The X-READY line must be high for the processor to&#xA;run its function is identical to the P-READY line used by the memory&#xA;and I/O boards. The X-READY line is reserved for use of the front&#xA;panel to avoid conflicts of two gates driving the same backplane&#xA;line). During each of these functions, the processor is permitted to&#xA;execute an instruction, and then is stopped in the next cycle in a&#xA;manner similar to the RUN/STOP flip-flop cycle described earlier&lt;/p&gt;&#xA;&lt;p&gt;For the SINGLE STEP function, a one-shot, triggered by the&#xA;SINGLE-STEP switch, is used to produce a pulse and the trailing edge&#xA;of that pulse is used to set a flip-flop, which controls the SINGLE&#xA;STEP line. This permits the processor to execute the present&#xA;instruction. [Actually, not the whole instruction but just one bus&#xA;cycle of the current instruction. --cjs] The SINGLE STEP flip-flop&#xA;is reset by the occurrence of the sync pulse on the following&#xA;instruction, thus causing the SINGLE STEP level to be removed and&#xA;the processor to stop on the following cycle.&lt;/p&gt;&#xA;&lt;p&gt;The EXAMINE-NEXT flip-flop is similarly controlled by the leading&#xA;edge of a pulse from a one-shot driven by either the DEPOSIT NEXT or&#xA;EXAMINE NEXT switch. The output of the flip-flop is used both to put&#xA;the NO-OP (hex 00 or octal 000) onto the bi-directional data bus,&#xA;and also to provide the READY signal so that the processor will&#xA;execute the instruction. It is reset by the sync pulse on the&#xA;following cycle, thus stopping the processor again.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The document goes on to explain EXAMINE and DEPOSIT in similar detail,&#xA;including the use of a gating to ensure that the MPU board is not&#xA;trying to drive the data bus while the front panel is using it to&#xA;write to memory.&lt;/p&gt;&#xA;&lt;p&gt;Unrelated to this, the document also explains the EXT. CLR. (CLR on&#xA;the Altair) switch, which sends a reset signal to everything &lt;em&gt;but&lt;/em&gt; the&#xA;processor, which I had been wondering about.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;¹ &lt;sub&gt;The Altair's interrupt acknowledge light, INT, is called INTA on the&#xA;IMSAI. The WO light (write/output cycle) on the earlier Altair front&#xA;panels was actually negative logic; this is correctly labeled W̅O̅ on&#xA;the IMSAI. The PROT light and PROTECT/UNPROTECT switches don't exist&#xA;on the IMSAI, but most Altair memory boards didn't support the protect&#xA;feature anyway. The IMSAI adds RUN, WAIT and HOLD lights that don't&#xA;exist on the Altair, as well as the PROGRAMMED OUTPUT lights&#xA;displaying whatever was written to the latch on port &lt;code&gt;FFh&lt;/code&gt;. All&#xA;switches appear identical in both designation and operation. Much of&#xA;the information in this note came from deramp5113's Altair 8800&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=3_73NwB6toY&quot; rel=&quot;nofollow noreferrer&quot;&gt;Video #4 - Front Panel Status Lights&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=l5CHGm1eOio&quot; rel=&quot;nofollow noreferrer&quot;&gt;Video #5 - Interrupt&#xA;Acknowledge Cycle&lt;/a&gt;.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-01T06:18:04.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12203" PostTypeId="5" CreationDate="2019-09-01T08:03:31.040" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-09-01T08:03:31.040" LastActivityDate="2019-09-01T08:03:31.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12204" PostTypeId="4" CreationDate="2019-09-01T08:03:31.040" Score="0" Body="Use of front panels (lights, switches and buttons) to view and control CPU state." OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-01T13:10:21.160" LastActivityDate="2019-09-01T13:10:21.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12205" PostTypeId="2" ParentId="12200" CreationDate="2019-09-01T08:19:55.473" Score="6" Body="&lt;p&gt;back in the (x386) days I was using GAME port as an ADC for home made scanner and other self build HW. As it is usual during development there is occasional set back like short circuit etc. The GAME Ports I was using was always GoldStar chip powered IDE/ports ISA card (they where very common) and a short circuit on the analog pins always burn up +5V power line on the PCB (no chip was harmed I know of as by bypassing the burned wire all worked again) so there is no obvious current limit other than the current density of the PCB wires used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The wires back in the day could safely transfer 0.5A (they usually start burning above 1A) but I would not make a load bigger than 100mA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However when I looked at the NE558 datasheet (link is in the Kaz's answer) apart of the pinout bug here is equivalent circuit of single timer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rHyim.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rHyim.png&quot; alt=&quot;NE558&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the timing interval is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;t = R.C&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;C = 0.1 uF&lt;/code&gt; and &lt;code&gt;R &amp;gt;= 2K2&lt;/code&gt;. Considering &lt;code&gt;Vcc = 5V&lt;/code&gt; and  according to &lt;a href=&quot;http://www.physics.unlv.edu/~bill/PHYS483/transbas.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Transistor basics&lt;/a&gt; the transistor drop voltage &lt;code&gt;Vce = ~0.2V&lt;/code&gt;then absolute &quot;safe&quot; maximum current for Timing output (GAMEPORT analog pin) is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;I = (Vcc-Vce) / R = (5-0.2)/2200 = 2.18 mA&#xA;tmin = R.C = 2200*0.1/1000000 = 220 us&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which sound reasonable considering its the input current for a comparator. After such analysis The short circuit currents I remember are impossible so my GAMEPORT either did have different circuitry or the currents where through different pins (maybe VCC/GND).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Gameport analog pins have &lt;code&gt;2.18 mA&lt;/code&gt; current limit.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;beware the load should be passive as the pin drains the current on its own so either Potentiometer or a NPN transistor (collector-&gt;Vcc,emitter-&gt;GAMEPORT_analog_pin) doing the same job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However SB16 and or USB adapters might have different circuitry (especially if they include MIDI interface) but 2mA is common value for comparators and amplifiers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beware lower currents mean bigger conversion times so you need to find a compromise so your polling reading code does not wait too long and have enough resolution... for example &lt;code&gt;1 ms&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;t = (Rl+R)*C&#xA;Rl = (t/C)-R&#xA;Rl = (0.001/0.1)*1000000-2200 = 7800 ohm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;so if I see it right if your load is &lt;code&gt;0 .. 7K8&lt;/code&gt; then the conversion will end in &lt;code&gt;1 ms&lt;/code&gt; tops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measuring my old Rockfire joystick the x axis has 160K right position zero on left and 68K in the middle (haven't used it for ages so the center position might be shifted) leading to max conversion time &lt;code&gt;t = 16.22 ms&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-09-03T06:53:13.277" LastActivityDate="2019-09-03T06:53:13.277" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12206" PostTypeId="2" ParentId="12200" CreationDate="2019-09-01T10:28:27.840" Score="4" Body="&lt;p&gt;There is no official specs for game port current limit. Some adapters may have resistors, ferrite beads or fuses for current limiting, but usually a short circuit still fries something (except for a polyfuse). I'd say 100mA is a safe limit in any case. The original adapter has 1k pull ups on buttons, so for all four buttons simultaneously pressed, it adds up to 20mA of current from button wires to ground wire. The analog inputs have 2.2k in series so all analog input pots being at 0R extreme position adds up to about 9mA of current from 5V wire to analog input wires.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-09-01T10:28:27.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12207" PostTypeId="2" ParentId="12158" CreationDate="2019-09-01T12:25:30.243" Score="3" Body="&lt;p&gt;This appears to be quite plausible because until 1964 integrated circuits were expensive and unpopular. Leslie Berlin covers the early history of Fairchild in ICs in &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B004RTH6WK&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;The Man Behind the Microchip: Robert Noyce and the Invention of Silicon Valley&lt;/em&gt;&lt;/a&gt;, from which the following quotes are taken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fairchild introduced Micrologic in 1961 and attracted a lot of interest. However, despite refusing to license their patents in order to limit competition:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The reaction was gratifying but did not translate into widespread adoption. By the end of 1961, Fairchild had sold fewer than $500,000 of its Micrologic devices, which were priced at about $100 apiece. Texas Instruments, the only other major supplier, was having such problems selling integrated circuits that it cut prices from $435 to $76 in 90 days. The move had little effect.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Customers objected to them because they were expensive, possibly less efficient in certain ways, and because they might limit their own ability to design how they wanted:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If the integrated circuit manufacturers designed and built the circuits themselves, what would the engineers at the customer companies do? Moreover, why would a design engineer with a quarter-century’s experience want to buy circuits designed by 30-year-old employee of a semiconductor manufacturing firm? And furthermore, while silicon was ideal for transistors, there were better materials for making the resistors and capacitors that would be built into the integrated circuit. Making these other components out of silicon might degrade the overall performance of the circuits.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;As late as the spring of 1963, most manufacturers believed that integrated circuits would not be commercially viable for some time, telling visitors to their booths at an industry trade show that “these items would remain on the R&amp;amp; D level until a breakthrough occurs in technology and until designs are vastly perfected.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As other answers have mentioned, there were also plenty of production issues in the early '60s:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A brief flurry of customer interest in 1962 proved little more than a frustration because Fairchild could not build circuits in any real quantity. “Inventory on all [Micrologic] short,” Noyce wrote with great irritation in May 1962, “13K [orders] backlog.” He worried that Signetics, the company started by the former Fairchild integrated circuit team, might be first in line to meet customer demand if it ever materialized in any serious way.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So between the production problems and the lack of customer intrest, through 1962 integrated circuits were selling only to the government and military, and not in huge quanitites:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By the end of 1962, Noyce had to admit that the integrated circuit had thus far had “less than a 10 percent effect on our conventional sales.” He called his staff together on a weekend to discuss “how to get more effort on micro ckts [circuits].”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Eventually they would have to start pushing ICs toward commercial customers, but this took a couple of years:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The need to crack the commercial market became more acute after 1962, when Defense Secretary Robert McNamara instituted changes in military procurement and cost-cutting measures that began shrinking the defense market for integrated circuits. (The military would move from buying 100 percent of integrated circuits produced in 1962 to 55 percent of those made in 1965.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It was in the spring of 1964 that they finally cracked (or created) the commerical market for ICs:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To [Noyce] it was obvious that despite their other purported concerns about the&#xA;  integrated circuit, customers’ primary objection to the new technology was its cost.... If their technical objections had been met and they still were not buying, the problem had to be the price tag. Accordingly, in the spring of 1964, Noyce made a little-discussed but absolutely critical decision. Fairchild would sell its low-end flip-flop integrated circuits for less than it would cost a customer to buy the individual components and connect them himself, and less than it was costing Fairchild to build the device.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This brazen play for market share leapfrogged Fairchild to the top position in number of circuits sold each year. At the same time, the entire market for integrated circuits took off. In early 1964, industry-wide integrated circuit sales for 1966 were projected to reach $58 million, or 8 million units at an average cost of $7.25 a unit. Within a year of the Fairchild-triggered price drop, estimates had been upped more than 150 percent, to $157 million annually— remarkable growth, given that the average price per unit had dropped.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Less than a year after the dramatic price cuts, the market had so expanded that Fairchild received a single order (for half-a-million circuits) that was equivalent to 20 percent of the entire industry’s output of circuits for the previous year. One year later, in 1966, computer manufacturer Burroughs placed an order with Fairchild for 20 million integrated circuits.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So to summarize, until early 1964 it would be easy for any large customer for ICs to be buying a substantial fraction of total production because the market was just so darn small.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-09-01T12:25:30.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12208" PostTypeId="1" CreationDate="2019-09-01T18:50:08.383" Score="37" ViewCount="3630" Body="&lt;p&gt;In short, 3 µm looks like it was the &quot;standard&quot; process size at the time, and it was available to Commodore before the chips were designed. Therefore it &lt;em&gt;looks&lt;/em&gt; like using the larger 5 to 7 µm process nodes was a deliberate choice in designing these chips. But I can't seem to find a sound reason &lt;em&gt;why&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;What I know so far&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://spectrum.ieee.org/ns/pdfs/commodore64_mar1985.pdf&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; case study from IEEE spectrum states, the VIC-II was designed for a 5 µm process, and the SID used a 7 µm process which occasionally dipped to 6 µm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This doesn't make a lot of sense to me because by the time these chips were designed beginning in 1981, 5 µm and especially 7 µm processes were outdated: 3 µm was available and used in actual products (like the Intel 8085) no later than 1976. Some products in development were even using 1.5 µm already, such as the Intel 80286 and NEC's 64k RAM, which were released in the same year the Commodore 64 was released in 1982.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The obvious culprit would be if MOS/Commodore specifically didn't have 3 µm yet, but according to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7379/when-did-mos-technology-upgrade-to-5%c2%b5m&quot;&gt;this&lt;/a&gt; question, they probably had 3.5 µm by 1980, over a year before design for the VIC-II and SID began in 1981.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In interviews, the chip designers have cited chip area as a notable limitation. In other words, there were solid engineering reasons to prefer working with a smaller process and working with a larger process anyways had a clear negative impact on the design process. So the larger process nodes must offer something fairly significant to justify such restrictions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why did they intentionally design these chips using a larger process node?&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Possible (entirely speculative) reasons&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;These are some things I've thought about, but I have absolutely no basis for believing any of them are true. I'm hoping some else will know more and offer some actual insight.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Was the older 5 to 7 µm somehow cheaper than the newer 3.5 µm?&lt;/li&gt;&#xA;&lt;li&gt;Was 3.5 µm manufacturing not mature enough to risk for the new design? (seems unlikely, but maybe)&lt;/li&gt;&#xA;&lt;li&gt;The newer 3.5 µm was HMOS-I instead of NMOS. Is that somehow significant?&lt;/li&gt;&#xA;&lt;li&gt;The VIC-II &amp;amp; SID were originally designed with the idea of being sold for use in other systems. This explains some design restrictions, like why the VIC-II couldn't assume DRAM is necessarily larger than 16 kB or faster than 2 MHz, even though the specific DRAM in the Commodore 64 was 64 kB and could in theory handle clocks faster than 2 MHz. I can't think of any sensible reason why larger nodes would help broader compatibility, but compatibility clearly influenced other quirky design decisions, so maybe there's a link somehow?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; Rephrased first summary for clarity, and also rephrased second and fourth paragraphs for clarity&lt;/p&gt;&#xA;" OwnerUserId="15149" LastEditorUserId="15149" LastEditDate="2019-09-01T21:01:14.043" LastActivityDate="2019-09-03T08:39:00.000" Title="Why did the VIC-II and SID use 6 µm technology in the era of 3 µm and 1.5 µm?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;commodore-64&gt;&lt;chip&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12209" PostTypeId="2" ParentId="12208" CreationDate="2019-09-01T19:52:19.440" Score="15" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;In short, 3 µm looks like it was available at the time,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The questions are rather:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;to whom it was available&lt;/strong&gt; and&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;is it worth the investment&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Processes aren't anything you'd buy from some supplier but develop in house. The fact that Intel got a 3 µm process does not translate to any other manufacturer being able to do so and more important doing so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Developing one in house requires considerable investment of money and time. This is true even when buying an existing process from a competitor.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;so it looks like using the larger 5 to 7 µm process nodes was a deliberate choice in designing these chips. But I can't seem to find a sound reason why.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's what they had machinery for and experience about. So it rather needs a reason why they should have invested considerable amount of money into updating/extending their &amp;lt;5µm production lines to meet increased use - eventually even building a new fab - when they could do these new chips with available and smooth running &gt;5µm production line(s).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, putting new designs on the older line even solves the task to keep them occupied, increasing return of investment in them. The machines were written off, everything produced was pure profit. Throwing them away when still able to make the chips needed would be exceptional stupid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding some more manpower to make the new chips fit the older lines would pay off quite fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be helpful that Commodore wasn't in the chip business like Intel. Their goal wasn't to produce as many chips as possible a to make a return, but as many computers as possible. With computers chips are only a small part of the bill. In addition only a part of the chips used were produced in house, so every investment there would have an even smaller return than compared with pure chip manufacturers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When comparing this with today's race for smaller structures it is also noteworthy that producing SIDs was not done in any competitive setup. They were special to type chips, not commodities (*1), with a fixed performance and no race for performance records. They were produced by exactly one chip maker, CSD, for exactly one customer: Commodore. In such a closed relation the race is for lowest production cost at the time and in the existing setting, not for some theoretical lower cost that can be achieved by making rather notable investments (*2).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So the larger process nodes must offer something fairly significant to justify such restriction.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They had existing and mature 5 µm production lines. Using them not only needed the least upfront investment, while having the fastest ramp up as well, but also kept them productive. All resulting in a better over all profit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: Business decisions are almost never driven by technology.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - In fact, if they would have been commodity chips, it is a sure bet that Tramiel would have turned for the cheapest source and shut CSD down the very next day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - There was no huge projected sales case for the any designated computer at the time the chips were designed. Again a good reason to use the less expensive process regarding setup cost.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="1953" LastEditDate="2019-09-02T01:25:02.137" LastActivityDate="2019-09-02T01:25:02.137" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12210" PostTypeId="2" ParentId="12208" CreationDate="2019-09-01T20:15:24.623" Score="8" Body="&lt;p&gt;I think that this question can be answered in a more general &quot;why use a particular semiconductor process for a particular chip&quot; way. Even today not all chips are made using the latest process. Choosing a process is all about tradeoffs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rough outline:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The more advanced (smaller) process the higher the mask costs (so you don't use a more advanced process unless you have to)&lt;/li&gt;&#xA;&lt;li&gt;More advanced process has a higher manufacturing cost&lt;/li&gt;&#xA;&lt;li&gt;EDA tools and engineering cost also get more expensive&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;You can not simply take an existing chip, shrink the layout and manufacture it with a different process&lt;/strong&gt;, so you need a really good business case to make a new version of a chip&lt;/li&gt;&#xA;&lt;li&gt;When the process shrinks the logic parts of the chip shrink (and the power consumption of the digital parts), but the analog parts don't necessairly scale that way. Example: if you make a motor driver or power supply chip you simply need a big enough transistor to handle the power, so you get almost nothing for using a smaller process. &lt;strong&gt;If a chip has significant analog parts the die size will not get much smaller with a process change.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Not all semiconductor devices are available for every process (&quot;semiconductor device&quot; in the sense of flash memory, high-voltage transistor etc.). Even today high-performance CPUs, RAMs and flash memories in smartphones are separate chips. It also takes time to develop such devices for new processes, so not all types of devices are available when a new process is initially developed.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Obligatory automotive analogy&lt;/em&gt;: each process is like a building material, for example concrete and carbon fiber, you don't build bunkers with carbon fiber and spacecraft out of concrete. But of course you could. It would be just inefficient.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="12083" LastActivityDate="2019-09-01T20:15:24.623" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12211" PostTypeId="1" AcceptedAnswerId="12213" CreationDate="2019-09-02T00:17:39.193" Score="54" ViewCount="15593" Body="&lt;p&gt;When you play old games, especially platformers, a common &quot;special effect&quot; is rapid blinking of your character when they are hit. Also, enemies often blinked before dying. Not all games did this, but it was very common, to the point in practically became a trope, and today many games that aim for the &quot;pixelart&quot; look also emulate this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me, this effect has always seemed quite jarring, like the system is kinda malfunctioning; or is being forced to do what it's not supposed to do, and this is a side-effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, why was this so widespread? Was it simply because it was easier to do than anything else (and, you know, limited hardware of the day), or was it something else?&lt;/p&gt;&#xA;" OwnerUserId="14839" LastEditorUserId="6794" LastEditDate="2019-09-05T06:54:05.173" LastActivityDate="2019-09-22T19:39:40.557" Title="Why do old games use flashing as means of showing damage?" Tags="&lt;graphics&gt;&lt;gaming&gt;" AnswerCount="6" CommentCount="12" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12212" PostTypeId="2" ParentId="12208" CreationDate="2019-09-02T00:41:18.090" Score="48" Body="&lt;p&gt;After some more research, I believe I've stumbled across the real answer: The VIC-II and SID used a larger process node size because Commodore's fabrication line circa 1981 was uniquely positioned produce chips at that size at effectively no production cost whatsoever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on what I've read, here's my best guess at what Commodore's fabrication situation looked like in the months when the VIC-II and SID were being designed:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1981, Commodore had two fabrication lines: the older NMOS line which could handle no smaller than 5 µm, and the newer HMOS line then capable of 3.5 µm. For the new line, Commodore's priority was updating their CPUs because they stood to benefit the most from smaller process nodes. This is shown by the first products they released from the new line: MOS 7501 and MOS 8501, both die shrunk upgrades of the 6510. Additionally, they recognized their process was lagging the rest of the world, so they wanted to shrink to 2 µm in a bid to catch up. This is shown by the MOS 8501, released around the same time as MOS 7501, but successfully using 2 µm technology. The end result was the HMOS line was occupied with these two high priority challenges at least until 1984 when the MOS 7501/8501 were ready.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this was happening, the older NMOS line was no longer operating at full capacity because the HMOS line was taking over some of the responsibility for CPU fabrication, especially the new R&amp;amp;D fabrication. But chip fabs don't simply turn off if you aren't using them: it costs money and manpower to keep the facilities running even during the slower periods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is where the new chips come in. From &lt;a href=&quot;https://spectrum.ieee.org/ns/pdfs/commodore64_mar1985.pdf&quot; rel=&quot;noreferrer&quot;&gt;the very source I cited when asking the question&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Because MOS Technology's fabrication facility was not running at full capacity, the equipment used for C64 test chips and multiple passes of silicon would otherwise have been idle. &quot;We were using people who were there anyway,&quot; said Ziembicki. &quot;You waste a little bit of silicon, but silicon's pretty cheap. It's only sand.&quot; &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In other words, there was a huge design and debugging benefit from using the older line because they could build and debug test chips almost whenever they wanted and there was no cost to doing so.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;With this, Winterble explained, a circuit buried deep inside the chips could be lifted out and run as a test chip, allowing thorough debugging without concern for other parts of the circuitry.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Of course, when mass production began, the production &lt;em&gt;would&lt;/em&gt; cost something because it wouldn't be absorbed in overhead anymore. But that still offered a significant cost advantage in production yield.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Not only the development costs absorbed into company overhead, but there was no mark-up to pay, as there would have been if the chips had been build by another company. And yields were high because the chips were designed for a mature semiconductor-manufacturing process. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yield seemed to have been a significant cost concern when designing the chips from the very beginning.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;We defined in advance the silicon size that would give a yield we were willing to live with...&quot; - Charles Winterble&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is especially true when considering the overall design goals of the machine.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;When the design of the Commodore 64 began, the overriding goals were simplicity and low cost. The initial production cost of the Commodore 64 was targeted at $130; it turned out to be $135.&quot; - Al Charpentier&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is enough to construct a comparison of what the two process sizes would offer the VIC-II and the SID:&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Pros of the newer, 3.5 µm process:&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;More chip area, meaning more features for the chips and fewer design compromises.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Pros of the older, 5 µm process:&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Higher production yield, meaning lower production cost overall&lt;/li&gt;&#xA;&lt;li&gt;Zero cost test chips&lt;/li&gt;&#xA;&lt;li&gt;Does not impact the high priority projects of updating the CPU line and improving the new fab process.&lt;/li&gt;&#xA;&lt;li&gt;Adequate chip area: Video and sound chips are expected to benefit less (in terms of business value) from smaller process nodes compared to a CPU.&lt;/li&gt;&#xA;&lt;li&gt;Better match for one of the key overridng design goals: Low cost.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Given all this, &lt;em&gt;of course&lt;/em&gt; they went with the older 5 µm process. It's almost hard to think why the newer fab would even have been considered to begin with.&lt;/p&gt;&#xA;" OwnerUserId="15149" LastEditorUserId="7208" LastEditDate="2019-09-03T08:39:00.000" LastActivityDate="2019-09-03T08:39:00.000" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12213" PostTypeId="2" ParentId="12211" CreationDate="2019-09-02T00:48:54.210" Score="68" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So, why was this so widespread? Was it simply because it was easier to do than anything else (and, you know, limited hardware of the day),&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly that. To make a sprite blink, all you've got to do is to set it to be not displayed and then displayed again. Usually by just writing a single register or pointer or setting a flag to skip drawing it. No additional sprites (for dying or whatsoever) needed and especially no complex (*1) animation code to be developed and added. All of that would have not only required additional effort, but code space and certain functionalities, both which may have been quite restricted on early systems (think Atari 2600). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, as you noticed, it was already these very very early, limited game systems that coined the trope of blinking being usually some badness indicator - like losing a life. So with that topic set, it was just natural for later games, on more capable machines to still go the same way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course it was used for other effects as well, like invulnerability, in which case dying did need a different visualisation.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Complex as in relative to environment and time. Doing even simple animation on a system with restricted RAM/ROM can be challenging. Squeezing another sprite into a 2 KiB Atari 2600 game-ROM might be impossible, even if it's 'just' about a few dozen bytes for the definition and handling.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="15279" LastEditDate="2019-09-21T20:20:01.220" LastActivityDate="2019-09-21T20:20:01.220" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12214" PostTypeId="1" CreationDate="2019-09-02T04:07:53.690" Score="9" ViewCount="715" Body="&lt;p&gt;This question is about computers with front panels that use only&#xA;toggle switches for input of binary data (such as address and data&#xA;values), as opposed to keypads for numerical input or other methods.&lt;/p&gt;&#xA;&lt;p&gt;On these front panels, as well as state set by ON-OFF switches as&#xA;above, there's a need for momentary-contact switches for &amp;quot;commands&amp;quot;&#xA;such as examine, deposit, reset, start/run, and so forth.&lt;/p&gt;&#xA;&lt;p&gt;In the 1950s either push buttons, such as on the &lt;a href=&quot;https://en.wikipedia.org/wiki/File:IBM_1620.jpg&quot; rel=&quot;noreferrer&quot;&gt;IBM 1620&lt;/a&gt;, or&#xA;momentary-contact toggle switches (that spring back to &amp;quot;off&amp;quot; when&#xA;released), such as on the &lt;a href=&quot;https://en.wikipedia.org/wiki/File:PDP-1_control_board.jpg&quot; rel=&quot;noreferrer&quot;&gt;PDP-1&lt;/a&gt;, were used, depending on the&#xA;manufacturer and model:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/2/26/IBM_1620.jpg/320px-IBM_1620.jpg&quot; alt=&quot;IBM 6120 front panel&quot; /&gt;&#xA;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/8/8a/PDP-1_control_board.jpg/320px-PDP-1_control_board.jpg&quot; alt=&quot;PDP-1 front panel&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;But by the 1970s, it seems that momentary-contact toggle switches were&#xA;by far preferred over push buttons, both for minicomputers such as&#xA;[various versions of the PDP-8] and the Data General &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Nova1200.agr.jpg&quot; rel=&quot;noreferrer&quot;&gt;Nova&lt;/a&gt; and&#xA;[Nova 3], and microcomputers such as the &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Living_Computers_-_Altair_8800_(39802981903).jpg&quot; rel=&quot;noreferrer&quot;&gt;Altair 8800&lt;/a&gt;, &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Computer_Museum_of_America_(70).jpg&quot; rel=&quot;noreferrer&quot;&gt;IMSAI 8080&lt;/a&gt;,&#xA;and &lt;a href=&quot;https://www.vintagecomputer.net/MITS/680/altair_680_front_panel_right.jpg&quot; rel=&quot;noreferrer&quot;&gt;Altair 680&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/0/0c/Computer_Museum_of_America_%2870%29.jpg/640px-Computer_Museum_of_America_%2870%29.jpg&quot; alt=&quot;IMSAI 8080 front panel&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Above, the left-hand two banks of eight switches are standard ON-OFF&#xA;toggle switches for address and data input. All of the right-hand bank&#xA;of six switches, except for the right-most POWER switch, are two-way&#xA;(ON)-OFF-(ON) momentary toggle switches for functions like EXAMINE,&#xA;EXAMINE NEXT, DEPOSIT, RESET, etc.)&lt;/p&gt;&#xA;&lt;p&gt;In at least the case of the Altair 8800 and the IMSAI 8080, these&#xA;momentary contact toggles were still (mostly two-way) SPST switches,&#xA;no different electricially from normally-open push buttons.¹&lt;/p&gt;&#xA;&lt;p&gt;Was there any particular technical or ergonomic reason for this&#xA;seemingly wholesale move to toggle switches, or was it just chance or&#xA;fashon?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;¹ &lt;sub&gt;See the bottom centre of the schematic on PDF page 25 of the&#xA;&lt;a href=&quot;http://chiclassiccomp.org/docs/content/computing/MITS/MITS_Altair8800TheoryOperation_1975.pdf&quot; rel=&quot;noreferrer&quot;&gt;Altair 8800 Theory of Operation Manual &amp;amp; Schematics&lt;/a&gt;. S4&#xA;is an SPST momentary-contact toggle switch; S5 and S6 are three-way&#xA;toggles (resting at centre, with momentary up and down) which are&#xA;effectively a pair of SPST switches sharing a common terminal. For all&#xA;of these one terminal is grounded by Q̅ from the run/stop flip-flop&#xA;(upper left) when the system is stopped. A line connected to the other&#xA;terminal, normally held high by a 1K pull-up, is momentarily brought&#xA;low when the switch is held. This signal is debounced by half of a&#xA;74123 dual pulse generator.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-08T00:11:13.893" Title="Why did 1970s front panels prefer momentary toggle switches to push buttons?" Tags="&lt;front-panel&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12215" PostTypeId="2" ParentId="8573" CreationDate="2019-09-02T07:17:16.133" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The point is that it works in the terminal, meaning that a pixel is rendered using curses and a  # character.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, there are a lot more characters than just &lt;code&gt;#&lt;/code&gt; available, even in ASCII. :-) While there are many clever ways to get an apparent high resolution from text displays by using &lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII_art&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;ASCII art&quot;&lt;/a&gt; techniques, one very simple thing you might consider is expanding your repertoire minimally to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Block_Elements#Compact_table&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unicode block element characters&lt;/a&gt;. Using full block, half block and quadrant characters (and of course space), you can render four pixels per character cell:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;▘▝▖▗▀▄▌▐▚▞▟▙▜▛█&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is well supported on modern terminals, since most Unicode fonts that they use include these. (It's frequently used for displaying QR codes in text terminals.)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I know that the Gameboy is something like 160x144, which could probably fit, but you'd have to shrink your font quite a lot to make it work.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Using the above you would divide by two to get the number of character cells you need in each direction, so you'd want an 80×72 terminal (or 160×72 if you wanted to preserve the aspect ratio). This is not much of a shrink at all on modern systems, even laptops; a 160×72 window with the font size I normally use for editing would easily fit on a 1080p display of 23&quot; or larger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This unfortunately is monochrome, whereas the Game Boy has two additional shades of gray. You can emulate this to some degree in a terminal that supports colours (most do), but you are unfortunately restricted to one colour for every block of four pixels, so you can't just copy the gray levels directly. Clever use of more than two additional colours would let you produce an &quot;averaged&quot; colour for the block that would improve things, but that's getting rather more complex than what's described above.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-02T09:38:43.170" LastActivityDate="2019-09-02T09:38:43.170" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12216" PostTypeId="2" ParentId="12214" CreationDate="2019-09-02T08:08:28.223" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;On these front panels, as well as state set by ON-OFF switches, there's a need for momentary-contact switches [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Don't forget three way switches as well.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was there any particular technical or ergonomic reason for this seemingly wholesale move to toggle switches, or was it just chance or fashion?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's all of the above (and more), with technical/design being the lead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(It helps to keep in mind, for all of these points, that basic on/off have to be toggle switches to begin with - using arresting push buttons would be ratehr expensive)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(board) &lt;strong&gt;Design&lt;/strong&gt; - using switches from the same series/family requires only one mechanical layout. Why making your life harder a it must.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Availability&lt;/strong&gt; - designers are usually requested to order from an catalogue of already contracted suppliers. Doing otherwise is shunned at by logistics.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Reliability&lt;/strong&gt; - switches of the same design tend to have the same operational margins.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Economics&lt;/strong&gt; - buying more switches from the same series from the same manufacturer will usually result in a lower per piece cost.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Management&lt;/strong&gt; - only one contract has to be made covering several part.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Production&lt;/strong&gt; - only one tooling for all switches due having the very same measurements.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And yes, it's as well about design and ergonomics:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Design&lt;/strong&gt; - doesn't it look neat if they are all the same?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ergonomics&lt;/strong&gt; - there is only one movement direction (up/down), not mutiple (up/down, push(pull)). Also having all of the same series/family leads attention to grouping and deliberate marking insted of different forms of switches.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-02T08:47:29.110" LastActivityDate="2019-09-02T08:47:29.110" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12217" PostTypeId="1" AcceptedAnswerId="12222" CreationDate="2019-09-02T08:09:39.537" Score="16" ViewCount="2590" Body="&lt;p&gt;We can see that the University of Manchester &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_computers#Transistor_Computer&quot; rel=&quot;noreferrer&quot;&gt;built a transistor computer&lt;/a&gt; in 1952. This appears to have been &lt;a href=&quot;https://en.wikipedia.org/wiki/Transistor_computer#History&quot; rel=&quot;noreferrer&quot;&gt;the first&lt;/a&gt; transistor computer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can see that the design was used in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Metrovick_950&quot; rel=&quot;noreferrer&quot;&gt;Metrovick 950&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: &lt;strong&gt;Do we know the problems the University of Manchester's Transistor Computer was intended to solve?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="3500" LastActivityDate="2019-09-02T13:31:34.003" Title="Do we know the problems the University of Manchester's Transistor Computer was intended to solve?" Tags="&lt;early-computer&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12218" PostTypeId="1" CreationDate="2019-09-02T10:50:47.803" Score="4" ViewCount="1701" Body="&lt;p&gt;How slow is z80 compared to Arduino Uno when they read an output pin if the Z80 is 2.5Mhz??&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I/O cycle and cpu herz and is there anything else to consider?&lt;/p&gt;&#xA;" OwnerUserId="15150" LastActivityDate="2019-09-03T08:57:04.997" Title="How slow is Z80 compared to Arduino Uno?" Tags="&lt;z80&gt;" AnswerCount="4" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12219" PostTypeId="2" ParentId="12218" CreationDate="2019-09-02T11:31:49.843" Score="0" Body="&lt;p&gt;The Arduino Uno has an ATmega328P, which is clocked at 16 MHz so it is considerably faster regarding MHz speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both are 8 bit CPUs, so that is comparable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know about the efficiency of a Z80 to read a pin, for an Atmel it's selecting the port and pin number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is (mostly based on the difference in MHz), that the Arduino Uno is faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE: See comment of Curt J. Sampson below.&lt;/p&gt;&#xA;" OwnerUserId="7037" LastEditorUserId="7037" LastEditDate="2019-09-03T08:57:04.997" LastActivityDate="2019-09-03T08:57:04.997" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12220" PostTypeId="2" ParentId="12218" CreationDate="2019-09-02T11:55:45.287" Score="1" Body="&lt;p&gt;As said earlier, AVR core in this arduino runs at 16MHz, and it has ~2 clocks to read a pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z80 has 11 or 12 clocks to read IO port. Thus, it is ~6 times slower in clocks and 6*(16/2.5) ~ 38 times slower in absolute values.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-09-02T11:55:45.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12221" PostTypeId="2" ParentId="12218" CreationDate="2019-09-02T12:05:53.090" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How slow is z80 compared to Arduino Uno when they read an output pin if the Z80 is 2.5Mhz??&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Quite slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An &lt;code&gt;IN&lt;/code&gt; instruction to read a port will take 12 (11 with &lt;code&gt;IN A,&amp;lt;port&amp;gt;&lt;/code&gt;) cycles. An AVR &lt;code&gt;IN&lt;/code&gt; takes a single cycle. So a 16 MHz Arduino Uno is about &lt;code&gt;(12/2,500,000) / (1/16,000,000) = 76.8&lt;/code&gt; times faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course extracting the pin from the byte read will add some more cycles, but won't change the over all picture.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I/O cycle and cpu herz and is there anything else to consider?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Looking at just the I/O instruction will show just a tiny part of the picture. While it gives a rough estimation, speed of an application is usually not defined by this single instruction, but over all code. So a CPU with a dedicated instruction set may execute way certain tasks better than a different one with just a faster I/O instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example it it's about testing a port bit for being set will take on a 65C02 a single instruction of 5 cycles, where a Z80 (or AVR) has to have at least 3 instructions, puting it somewhere inbetween both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom Line: &lt;em&gt;Since all three of them are rather simple and similar constructions, any comparsion based on &lt;strong&gt;clocks per instruction per MHz&lt;/strong&gt; will be sufficient for a rough estimate.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-02T13:05:47.757" LastActivityDate="2019-09-02T13:05:47.757" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12222" PostTypeId="2" ParentId="12217" CreationDate="2019-09-02T13:09:56.277" Score="25" Body="&lt;p&gt;Quoting &lt;a href=&quot;http://curation.cs.manchester.ac.uk/computer50/www.computer50.org/kgill/transistor/trans.html&quot; rel=&quot;noreferrer&quot;&gt;the 50th anniversary page on the topic&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In parallel to the Meg project it was decided to build a relatively small and economic computer. When design was started in 1952 it was clear that the project could provide valuable experience in the use of the recently introduced transistors. It was built even though the germanium point transistors were more unreliable than valves, because semi-conductors held out the promise of lower power consumption, higher operating speeds, smaller size and greater reliability in the future.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A prototype was completed in 1953, and a full-size version in 1955; this was then reproduced by Metropolitan Vickers (replacing all the germanium point transistors with more reliable transistors, and using printed circuit boards), but never sold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I’m not sure the transistor computer was really intended to &lt;em&gt;solve&lt;/em&gt; problems; I suspect its aim was rather to &lt;em&gt;identify&lt;/em&gt; the problems which would need to be solved in order to produce a smaller, cheaper, and ultimately, faster computer, using transistors. After all, this was the first transistor-based computer, so no one knew what it would be like to build a computer using transistors. Quoting the same source:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The most important impact of the Transistor Computer was it provided early experience in transistor circuit techniques.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simon H. Lavington’s &lt;em&gt;Early British Computers&lt;/em&gt; &lt;a href=&quot;http://ed-thelen.org/comp-hist/EarlyBritish-05-12.html#Ch-09&quot; rel=&quot;noreferrer&quot;&gt;puts it this way&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Kilburn’s group at Manchester University built a small transistor research computer to gain some experience with the new devices.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The project certainly contributed to subsequent transistor-based computers built at Manchester University, including the famous Atlas, which did have a problem statement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design was led by Richard Grimsdale, who gave a talk on the subject at the Computer History Museum in 2000; this was filmed and is &lt;a href=&quot;https://www.youtube.com/watch?v=hJ2WW__czHI&quot; rel=&quot;noreferrer&quot;&gt;available on Youtube&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-09-02T13:31:34.003" LastActivityDate="2019-09-02T13:31:34.003" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12223" PostTypeId="2" ParentId="7626" CreationDate="2019-09-02T16:45:20.863" Score="6" Body="&lt;p&gt;I did 3d on both and optimizations were different on both machines; I didn't do very advanced stuff at the time, mostly rotating simple objects, etc but no game or complex scenes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Amiga, you would use the blitter to draw lines and fill the bitplanes. The different bit planes were not interleaved but sequential, so the size of the blitter pass you had to do was depending on the colors used.&#xA;You would draw the same lines in all the planes needed and then do a blitter fill, but filling plane 0 and plane 3 in two passes was slower than filling plane 0 and 1 in a single pass which was slower than filling only plane 1 for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The blitter really sped up the filling, but the bitplane layout forced color palette organization in order to make sure the largest surfaces of your objects were the fastest to fill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Atari ST, it was a different story: you had to draw your picture as you were building your triangles, so you needed to sort the vertices vertically and then, as you were doing line interpolations, you were filling up the screen.&#xA;The edges were tricky to work with, but large surfaces could be filled in a single pass.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, the ST required more CPU work, but drawing the picture could be done in a single pass. On the Amiga, the process was generally faster, but the memory layout generated a lot more memory traffic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite these differences, the two came remarkably close in performance.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2019-09-02T16:45:20.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12224" PostTypeId="2" ParentId="12211" CreationDate="2019-09-02T17:01:24.760" Score="34" Body="&lt;p&gt;In addition to the other answer and comments, a character would often enjoy a brief period of invulnerability after sustaining damage — this period was indicated with the character blinking. The blinking effect here helps suggest an ethereal state where you can’t suffer more physical damage. &lt;/p&gt;&#xA;" OwnerUserId="15155" LastActivityDate="2019-09-02T17:01:24.760" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12225" PostTypeId="2" ParentId="12211" CreationDate="2019-09-02T17:11:07.400" Score="13" Body="&lt;h3&gt;Because it was an acceptable way to show damage&lt;/h3&gt;&#xA;&lt;p&gt;Remember who's playing these games. Primarily it was children. Games back then were entirely aimed at children (or at least young people). With that in mind, some way of showing damage without graphic imagery became necessary.&lt;/p&gt;&#xA;&lt;p&gt;As a counter-example, consider &lt;a href=&quot;https://en.wikipedia.org/wiki/Barbarian:_The_Ultimate_Warrior&quot; rel=&quot;noreferrer&quot;&gt;Barbarian&lt;/a&gt; which had more graphic depictions of violence which included blood and decapitation. As Raffzahn correctly says, earlier games simply didn't have the ability to do this with sprites, but later games became more sophisticated, and of course newer computers could manage more. The outcry at the time was incredible. It's notable that no future home-computer games continued with this for some time after.&lt;/p&gt;&#xA;&lt;p&gt;A number of years later, &lt;a href=&quot;https://en.wikipedia.org/wiki/Mortal_Kombat&quot; rel=&quot;noreferrer&quot;&gt;Mortal Kombat&lt;/a&gt; appeared in the arcades with more graphic violence.  Earlier games like &lt;a href=&quot;https://en.wikipedia.org/wiki/Pit-Fighter&quot; rel=&quot;noreferrer&quot;&gt;Pit-Fighter&lt;/a&gt; had started to use more realistic rotoscoped characters, but still did not include visible damage or blood.  Mortal Kombat again provoked a significant outcry.  Not long after that,  &lt;a href=&quot;https://en.wikipedia.org/wiki/Wolfenstein_3D&quot; rel=&quot;noreferrer&quot;&gt;Wolfenstein&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Doom_(1993_video_game)&quot; rel=&quot;noreferrer&quot;&gt;Doom&lt;/a&gt; emerged on home computers as the start of the first-person shooter genre, and the outcry over them was immense and is still ongoing, with claims that they allow people to &amp;quot;rehearse&amp;quot; mass murder.&lt;/p&gt;&#xA;" OwnerUserId="6749" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-03T09:04:38.880" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12226" PostTypeId="2" ParentId="12214" CreationDate="2019-09-02T20:30:49.017" Score="7" Body="&lt;p&gt;There are usually multiple contacts made when a switch is operated (it's called&#xA;bounce).   Debouncing a large number of (SPST) pushbutton switches is difficult (requires lots of&#xA;components, or even a short computer program), BUT if you use a double-throw&#xA;switch (SPDT), this can be accomplished with a S-R flipflop.   The S-R&#xA;circuit is simple, early integrated circuits could incorporate several such&#xA;(the SN7400 NAND chip makes two S-R flipflops).   More info here&lt;a href=&quot;http://www.learnabout-electronics.org/Digital/dig52.php&quot; rel=&quot;noreferrer&quot;&gt;set-reset flipflop debouncing&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, a toggle switch with a buckling-spring mechanism (a &quot;microswitch&quot; of&#xA;the SPDT type) with a bit of electronic support, made a noise-suppressed &#xA;logical input, ideal for the front panel switch application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only a few (strobe-generating) functions really required good debouncing,&#xA;but once you designed such switches into the front panel, it was convenient&#xA;to use lots of identical ones, for noncritical functions as well.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2019-09-02T20:30:49.017" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12227" PostTypeId="1" AcceptedAnswerId="12235" CreationDate="2019-09-03T03:27:16.017" Score="3" ViewCount="292" Body="&lt;p&gt;I replaced all leaking capacitors about 4 months ago. I cleaned it out the board tediously. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every-time I switch on my old computer it is stuck on the menu screen. The machine does not respond to the keys I press. Even the clock is frozen on the screen.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Holding done &lt;em&gt;CTRL, Break and Reset&lt;/em&gt; &lt;em&gt;20 times&lt;/em&gt; does nothing to break out of the freeze state. Turning off the memory switch doesn't work either. It was working fine for 4 months.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Question&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;How do I break out of these lock ups? What's the likely culprit to the lockups?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/m100service/page/n1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Linked to troubleshoot pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11944" LastEditorUserId="7208" LastEditDate="2019-09-13T01:52:48.100" LastActivityDate="2019-09-13T01:52:48.100" Title="TRS-80 Model 100 is frozen, even after multiple resets" Tags="&lt;trs-80-model-100&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12228" PostTypeId="2" ParentId="12218" CreationDate="2019-09-03T06:13:40.957" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I/O cycle and cpu herz and is there anything else to consider?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If we are talking &lt;strong&gt;Arduino&lt;/strong&gt; then we should also consider software overheads and overall system throughput. The ATmega328 is much faster clock for clock than a Z80, but some &lt;strong&gt;Arduino&lt;/strong&gt; functions need a lot of instructions. &lt;code&gt;DigitalWrite()&lt;/code&gt; for example is about 20 times slower than writing directly to an I/O port. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interrupt overhead on the ATmega328 can be huge because up to 32 registers may have to be stacked and unstacked, whereas the Z80 has EX AF,AF' and EXX which exchange all registers in a few microseconds.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 can directly address 64k RAM and run code from it, whereas the ATmega328 only has 2k RAM and can only execute code from Flash. As soon as you need more than 2k the ATmega328 gets very slow, since you must use SPI, I2C or I/O port manipulation to access external RAM. If you want to load and run user programs then it gets slower still, since sketches have to be uploaded and written to flash via the bootloader.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line - If you took a 2.5MHz Z80 CP/M machine and replaced the CPU board with an Arduino Uno (with sufficient 'glue' logic to interface it to the S100 bus), then converted the OS and user programs into Arduino sketches, how much faster - &lt;em&gt;or slower&lt;/em&gt; - would it be?     &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-09-03T06:13:40.957" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12229" PostTypeId="2" ParentId="2722" CreationDate="2019-09-03T09:13:30.847" Score="0" Body="&lt;p&gt;If you are going to do this &quot;properly&quot;, @mcleod_ideafix's pipeline of circuits to extract the luminance and then re-encode it onto just the green channel is the way forwards. I would enhance the design by adding some sliders/pots to allow tuning the exact RGB colour, since &quot;green&quot; monitors and colour monitors did not always use the same shade of green phosphor, and also you might fancy an amber display one day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the way I'd probably do this, at least as a prototype, is to turn the &quot;colour&quot; right down to get a monochrome display and then stick some coloured film over the screen. Hey, it worked for the original Space Invaders! It would probably also have fewer transcoding artefacts than multiple stages of re-encoding a composite video signal.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2019-09-03T09:13:30.847" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12230" PostTypeId="1" CreationDate="2019-09-03T14:33:02.707" Score="1" ViewCount="106" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/AogFf.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S7p0R.jpg&quot; alt=&quot;enter image description here&quot;&gt;&#xA;I want to use an old commodore64. In the 80s we connected a small tv, as a monitor, but the cable for that connection is missing. What kind of cable connection do I need?&lt;/p&gt;&#xA;" OwnerUserId="15167" LastActivityDate="2019-09-03T14:33:02.707" Title="What cable do I need to connect my old commodore64 with a tv (as monitor)" Tags="&lt;commodore-64&gt;" AnswerCount="0" CommentCount="7" ClosedDate="2019-09-03T17:49:30.920" ContentLicense="CC BY-SA 4.0" />
  <row Id="12231" PostTypeId="2" ParentId="12211" CreationDate="2019-09-03T15:25:59.777" Score="1" Body="&lt;p&gt;Just wanted to add my 2 cents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making the enemy blink upon damaging them was/is an effective way of informing the player that the enemy took damage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember plenty of times seeing my weapon &quot;strike&quot; the enemy but the lack of blink let me know that my attack failed without needing to constantly check if the enemy's HP bar decreased.&lt;/p&gt;&#xA;" OwnerUserId="10323" LastEditorUserId="10323" LastEditDate="2019-09-05T17:53:58.077" LastActivityDate="2019-09-05T17:53:58.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12232" PostTypeId="2" ParentId="8573" CreationDate="2019-09-03T23:38:32.257" Score="3" Body="&lt;p&gt;Well, Raffzahn mentioned this game mode in passing... but of course there was the original product Simon. Which had four buttons that lit up in patterns that players would mimic with button presses. So you could say that Simon was a four-pixel game: &lt;a href=&quot;https://en.wikipedia.org/wiki/Simon_(game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Simon_(game)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd also been thinking of Merlin, which had eleven blinking buttons: &lt;a href=&quot;https://en.wikipedia.org/wiki/Merlin_(console)&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Merlin_(console)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thinking about it a little more, I think you could argue there is a one-pixel game that's installed all over the world and is in constant use today. Not really electronic, but it's called a doorbell (lighted variation, of course). Push it, wait, and the fun begins.&lt;/p&gt;&#xA;" OwnerUserId="15172" LastActivityDate="2019-09-03T23:38:32.257" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12233" PostTypeId="2" ParentId="5341" CreationDate="2019-09-03T23:55:02.390" Score="3" Body="&lt;p&gt;I haven't used 'ed' seriously, but I've used several line-oriented editors: the Eldon 2 'amender' (EE KDF9), the George3 editor (ICL 1900), SOS (TOPS-10, on DECsystem-10).  They all are similar editors, though with one significant difference: could you revisit 'previous' lines in the file or not?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The George3 editor/Eldon 2 amender were, if memory serves, single-pass sequential editors; SOS held a 'page' at a time, so you could revisit lines on the same page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The navigation commands available in all of these were basically 'go to line N' or 'go to the next line containing X'.  Then to edit, you got facilities for retyping the entire line, replacing substrings, and various other operations.   If you needed to go backwards, this was accomplished by writing out the rest of the file and starting again from the top (depending on editor, there might be a command to do that, otherwise you did it 'manually').&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 'big changes' you might well list the program source on a lineprinter and mark it up, not necessarily with exact changes, but whatever you needed to know what you're doing.  For minor stuff, well, you wrote the code, you knew what it looked like.  And last week's listing, not entirely accurate now since the code had changed, would be a memory-jogger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A certain amount of work was done away from the teletype, but this had as much to do with the fact that there were generally more teletype users than teletypes, so you wanted to maximize your efficiency when you got some machine time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even TECO, a character-oriented editor rather than a line editor, required similar skills to keep track of whether you are, though it did have the benefit that you could navigate backwards, at least up to the last page boundary/yank command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, yeah, in response to the 'how' part of the question: we learned how to work with the tools we'd got, or to come up with incremental improvements within the technological limits of the systems we worked on. Because whatever limits there were on interactive editing, it was much better than working offline with papertape or punchcards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As regards to programmers remembering their code, or not, I once was fairly sure I could intimately remember up to 3K PDP-11 words of MACRO-11 assembler.  This was fine since I was writing kernel code that had to be structured as 'processes' of no more than 4K words (there were several such processes making up the 'program', of course).  I can't really remember, but I think that 3K words is about a couple of inches of lineprinter paper.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-09-04T00:11:37.043" LastActivityDate="2019-09-04T00:11:37.043" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12234" PostTypeId="2" ParentId="12211" CreationDate="2019-09-04T07:45:37.407" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why do old games use flashing as means of showing damage?&lt;br&gt;&#xA;  ... Not all games did this, but it was very common, to the point in practically became a trope, and today many games that aim for the &quot;pixelart&quot; look also emulate this.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Games were of a limited resolution, it would be very difficult to show a little piece missing to indicate damage. There needed to be light, sound, and often a gauge, bar, or number to indicate gains and losses. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't as though if the player piece had a recognizable face that you would be able to see sweat or tears (unless they were comically huge), or an unhappy face (unless the player was essentially a smiley). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some games, such as ones with &lt;a href=&quot;https://www.youtube.com/watch?v=WLx1Ozrtad8&quot; rel=&quot;noreferrer&quot;&gt;Mario&lt;/a&gt; or &lt;a href=&quot;https://www.youtube.com/watch?v=rIM1hN_qw8Y&quot; rel=&quot;noreferrer&quot;&gt;Pac-Man&lt;/a&gt;, used no flashing for damage or death.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were a limit to what could be portrayed and how it could be shown, both from a technological and creative point of view.  It far more of a &lt;strong&gt;trope&lt;/strong&gt; that video game deaths are &lt;a href=&quot;https://tvtropes.org/pmwiki/pmwiki.php/Main/PlayerDeathIsDramatic&quot; rel=&quot;noreferrer&quot;&gt;prolonged&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The website TVTropes describes the effect as &quot;&lt;a href=&quot;https://tvtropes.org/pmwiki/pmwiki.php/Main/FlashOfPain&quot; rel=&quot;noreferrer&quot;&gt;flash of pain&lt;/a&gt;&quot; and that it's a simple palette swap or turning on and off of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sprite_(computer_graphics)&quot; rel=&quot;noreferrer&quot;&gt;sprite&lt;/a&gt; that is easy to do (uses minimal CPU cycles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The website Giant Bomb has a page explaining &quot;&lt;a href=&quot;https://www.giantbomb.com/damage-flash/3015-3282/&quot; rel=&quot;noreferrer&quot;&gt;Damage Flash&lt;/a&gt;&quot; and a list of 128 games (probably incomplete) of where flashes are used to indicate that one is taking damage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They claim that the video game &quot;&lt;a href=&quot;https://www.giantbomb.com/laplace-no-ma/3030-10041/&quot; rel=&quot;noreferrer&quot;&gt;Laplace no ma&lt;/a&gt;&quot; (1987) was the first to &lt;a href=&quot;https://youtu.be/tcrudKzwzD0?t=259&quot; rel=&quot;noreferrer&quot;&gt;use flashes&lt;/a&gt; (video) to show damage. Earlier games &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pac-Man&quot; rel=&quot;noreferrer&quot;&gt;Pac-Man&lt;/a&gt;&quot; (1980) used flashing to draw attention to something, and &lt;a href=&quot;https://www.youtube.com/watch?v=-0KgQbQzZv0&quot; rel=&quot;noreferrer&quot;&gt;dying was animated&lt;/a&gt; (video) (&lt;em&gt;damage&lt;/em&gt; not being part of the game, it was live or die).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game called &lt;a href=&quot;https://www.giantbomb.com/mad-crasher/3030-51203/&quot; rel=&quot;noreferrer&quot;&gt;Mad Crasher&lt;/a&gt; (1984), also listed on the Giant Bomb website, used &lt;a href=&quot;https://youtu.be/rIvj5Y7jGVw?t=625&quot; rel=&quot;noreferrer&quot;&gt;flashing&lt;/a&gt; (video) to indicate that shield was being applied or lost. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flashing (and other sounds or screen shaking) are simple to do from a hardware standpoint (and easy on the very limited CPU cycles per second that were available) but were used to indicate a number of things besides damage or dying.&lt;/p&gt;&#xA;" OwnerUserId="13513" LastActivityDate="2019-09-04T07:45:37.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12235" PostTypeId="2" ParentId="12227" CreationDate="2019-09-04T08:27:28.580" Score="4" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;does the board have any sockets for ICs ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if yes remove all chips and pull them back (&lt;strong&gt;not all at once do it one by one&lt;/strong&gt;) sometimes the pins oxidize and or get out of the socket a bit making bigger resistance and noisy buses creating havoc usually ending up with freeze or reset or gfx errors.  &lt;strong&gt;Be careful not to bend and or broke the pins&lt;/strong&gt; and use the &lt;strong&gt;same IC orientation&lt;/strong&gt; sometimes cleaning with alcohol helps (using tooth brush but do not push too hard).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the same goes for any connectors (like connection between more PCBs)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;did you replace all capacitors in the correct position?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if you swap +/- pins the cap will diminish its capacity or leak or blow much faster than it should so check all replaced caps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if you use tantals make sure they can be used in such way (some blocking and filtration caps need to be a specific technology and not interchangeable) and also have correct orientation. These suckers either blow but more likely generate weird voltage offsets (even several volts) where they should not and are causing electrical havoc in all interconnected circuitry which might help to blown other caps and or even ICs ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastActivityDate="2019-09-04T08:27:28.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12236" PostTypeId="2" ParentId="12168" CreationDate="2019-09-04T11:44:14.020" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/GFA_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;GFA BASIC&lt;/a&gt; has several &lt;strong&gt;PEEK&lt;/strong&gt; and &lt;strong&gt;POKE&lt;/strong&gt; instructions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;PEEK(addr)&lt;/code&gt;: reads one byte at &lt;em&gt;addr&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;DPEEK(addr)&lt;/code&gt;: reads a word (2 bytes) at &lt;em&gt;addr&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LPEEK(addr)&lt;/code&gt;: reads a long word (4 bytes) at &lt;em&gt;addr&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;along with their counterparts:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;POKE addr, byte&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;DPOKE addr, word&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LPOKE addr, long&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(and also &lt;code&gt;SPOKE&lt;/code&gt;, &lt;code&gt;SDPOKE&lt;/code&gt; and &lt;code&gt;SLPOKE&lt;/code&gt; to put the 68000 into supervisor mode before writing, at least on the Atari ST and Amiga versions)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to that, it also has the &lt;strong&gt;BMOVE&lt;/strong&gt; instruction to copy any number of bytes from a memory area to another (even if they are overlapping):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BMOVE source_addr, target_addr, n&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7850" LastActivityDate="2019-09-04T11:44:14.020" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12237" PostTypeId="1" AcceptedAnswerId="12238" CreationDate="2019-09-05T06:35:15.820" Score="30" ViewCount="6802" Body="&lt;p&gt;From &lt;a href=&quot;https://en.wikipedia.org/wiki/8-bit_color&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The other form is where the 8 bits directly describe red, green, and blue values, typically with three bits for red, three bits for green and two bits for blue. This second form is often called 8-bit truecolor&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What is the reason only 2 bits are used for blue as opposed to red or green? Does it have to do with human perception of color or was it just an arbitrary decision?&lt;/p&gt;&#xA;" OwnerUserId="15186" LastActivityDate="2019-09-05T20:20:36.620" Title="Why does 8 bit truecolor use only 2 bits for blue?" Tags="&lt;color-display&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12238" PostTypeId="2" ParentId="12237" CreationDate="2019-09-05T07:02:16.160" Score="59" Body="&lt;p&gt;Because the human eye is less sensitive to blue colour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also more senstitive to green than red, so depending on the number of bits available modulo 3 :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0 : The same number of bits is used for each colour (example: 24-bit)&lt;/li&gt;&#xA;&lt;li&gt;1 : The extra bit is accorded to the green colour, which is the one the human eye is most sensitive (example: 16-bit)&lt;/li&gt;&#xA;&lt;li&gt;2 : The extra bits are accorded to green and red, as the human eye is less sensitive to blue (example: 8-bit, 32-bit)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2123" LastActivityDate="2019-09-05T07:02:16.160" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="12239" PostTypeId="1" AcceptedAnswerId="12244" CreationDate="2019-09-05T08:19:24.760" Score="13" ViewCount="928" Body="&lt;p&gt;Browsing around the FS-UAE source code I discovered a 65(S)C02 emulation core, which appears to not be referenced anywhere outside of some CDTV-CR related source file. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently, a CDTV is essentially an Amiga 500 in a slightly different housing. Now, from what I can see, the -CR in CDTV-CR means cost-reduced. (I don't believe the cost-reduction involved swapping the 68000 for a 65C02, that would be quite a silly thing). And the 65C02 is not mentioned anywhere if you google CDTV-CR processor or anything like that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what is this emulation core doing in FS-UAE? Or, if it's emulating actual hardware, where is the 65C02?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="6794" LastEditDate="2019-09-12T00:07:46.057" LastActivityDate="2019-09-12T00:07:46.057" Title="Does the Commodore CDTV-CR contain a 65C02 for some reason?" Tags="&lt;amiga&gt;&lt;emulation&gt;&lt;6502&gt;&lt;commodore&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12240" PostTypeId="2" ParentId="12237" CreationDate="2019-09-05T10:38:23.060" Score="18" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What is the reason only 2 bits are used for blue as opposed to red or green? Does it have to do with human perception of color or was it just an arbitrary decision?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a combination of being practical constraint by 8 bit words (*1) and adapting this to human physiology. The human eye is most sensitive to green and red (with a little tilt toward green), while least sensitive to blue (*2,3). See also this answer regarding why green is quite common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For computing the most simple solution is to assign the colours in a colour word to an independent bit, leaving the misery that 8 cannot be divided by 3 without rest (*4). So next best is assigning a different amount to each. To do so the assignment with the least loss is to be selected, and that's where human physiology comes in again and tells that a reduction of resolution for blue is the least offensive. So the bit gets dropped there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12238/6659&quot;&gt;Bregalads Answer&lt;/a&gt; offers a nice and easy to use cookbook to decide what colours should get which bit length assigned when using dedicated bit fields.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, looking at the way we perceive light, It may be way more appropriate to use a palette instead of bitfields. Here colours (including brightness) can be specified in a way more natural way - just, handling them isn't as easy and cheap (*5).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - This is where 'octal' word sizes would give a more 'natural' representation. Considering that computing started out with the majority of designs using multiple of 3 word sizes (&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11807/6659&quot;&gt;see here as well&lt;/a&gt;), today's ubiquitous use of colour graphics seems like staircase wit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Colour is a continuum, and the human eye has got certain spots of maximum sensitivity, but they are not hard focused, but ranges with a main peak. These ranges even overlap quite a lot between red and green while overlap between green and blue is small. Also the distances between are not the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make it even more complex, Human vision also has a fourth component we usually assume with light and dark (B&amp;amp;W). While it has a quite wide sensitivity, it also has a peak just at the border between green and blue, partly filling that gap - one of the reason why we experience bluish light to be brighter than any other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As result, we do see brightness on its own (with peak at 500 nm) plus three colours, but they are as well in different grades of brightness and all of them overlapping - perfect for neuronal networks, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that &lt;a href=&quot;https://en.wikipedia.org/wiki/The_dress&quot; rel=&quot;noreferrer&quot;&gt;white/black/blue/gold dress&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - See also this answer regarding &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7912/6659&quot;&gt;why green (and amber) screens were most common&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - One of the disadvantages of being a Human. (Many) Birds feature four colour sensors, the additional being in near-UV. In addition, some have filters within their colour regions 'sharpening' colours. Something we seem to have lost. So they see colour not only more differentiated, but as well separated from brightness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - While light itself is defined on a linear scale and presented of a mixture of discrete values, human vision is not. Just have a look at the various colour scales that have been invented to describe human vision and you'll see that there's not an easy way to describe it in 2 or 3 dimensions at all. It's been a topic since ancient times and may go on forever.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2019-09-05T15:21:42.037" LastActivityDate="2019-09-05T15:21:42.037" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12241" PostTypeId="1" CreationDate="2019-09-05T10:44:04.640" Score="6" ViewCount="386" Body="&lt;p&gt;The &lt;a href=&quot;https://archive.org/details/Neo_Kobe_NEC_PC-6001_2016-02-25&quot; rel=&quot;noreferrer&quot;&gt;Neo Kobe - NEC PC-6001&lt;/a&gt; &quot;software capsule&quot; on Internet Archive includes a 126 MB ZIP file, &lt;a href=&quot;https://archive.org/download/Neo_Kobe_NEC_PC-6001_2016-02-25/Neo%20Kobe%20-%20NEC%20PC-6001%20%282016-02-25%29.zip&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;Neo Kobe - NEC PC-6001 (2016-02-25).zip&lt;/code&gt;&lt;/a&gt;, containing a subdirectory &lt;code&gt;1-Screen Programs (Kaw)/&lt;/code&gt;. This contains two &lt;code&gt;.7z&lt;/code&gt; archives:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1-Screen Programs [CT].7z&#xA;1-Screen Programs [extras].7z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The first, when unpacked, gives me files around 300-500 bytes long with &lt;code&gt;.p6&lt;/code&gt; extensions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1-Screen Programs (01 On-naji) {m1p1}.p6&#xA;1-Screen Programs (02 Iroai) {m1p1}.p6&#xA;1-Screen Programs (03 Tiny Typing Game) {m1p1}.p6&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Based on looking at the files themselves, the accompanying descriptions in &lt;code&gt;.txt&lt;/code&gt; files in the &quot;extras&quot; archive and the &quot;CT&quot; in the archive name, I am guessing that these are the data of cassette tape saves of tokenzied BASIC programs. Here's a dump of the tiny typing game from above:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00000000: d3d3 d3d3 d3d3 d3d3 d3d3 546e 7954 7970  ..........TnyTyp&#xA;00000010: 0dc4 0000 53d2 303a 54d2 3000 35c4 0100  ....S.0:T.0.5...&#xA;00000020: a03a a526 4831 3035 383a 50d2 353a 57d2  .:.&amp;amp;H1058:P.5:W.&#xA;00000030: d528 dd28 3129 cc32 3629 ca39 373a 54d2  .(.(1).26).97:T.&#xA;00000040: 54ca 3100 53c4 0200 58d2 d528 dd28 3129  T.1.S...X..(.(1)&#xA;00000050: cc33 3229 3a59 d2d5 28dd 2831 29cc 3134  .32):Y..(.(1).14&#xA;00000060: 2900 6ec4 0300 a158 2c59 3a95 e928 5729  ).n....X,Y:..(W)&#xA;00000070: 3a81 4ad2 30c3 3530 cb54 3a82 0082 c404  :.J.0.50.T:.....&#xA;00000080: 0049 24d2 c63a 8a49 24d2 e928 5729 c737  .I$..:.I$..(W).7&#xA;00000090: 0095 c405 0050 d250 cb31 3aa0 3a8a 50d1  .....P.P.1:.:.P.&#xA;000000a0: 30c7 3200 9cc4 0600 8838 00c6 c407 00a1  0.2......8......&#xA;000000b0: 3135 2c31 323a 9522 4f4b 2122 3aa7 2266  15,12:.&quot;OK!&quot;:.&quot;f&#xA;000000c0: 223a 53d2 53ca 503a 814a d230 c335 303a  &quot;:S.S.P:.J.0.50:&#xA;000000d0: 823a 8831 00d1 c408 008a 50d1 30c7 3100  .:.1......P.0.1.&#xA;000000e0: 08c5 0900 a131 2c31 313a 9522 596f 7520  .....1,11:.&quot;You&#xA;000000f0: 6172 6522 54cb 3122 2074 696d 6573 204f  are&quot;T.1&quot; times O&#xA;00000100: 4b2c 222c 5322 2f22 54cc 3522 2070 7473  K,&quot;,S&quot;/&quot;T.5&quot; pts&#xA;00000110: 2047 6574 2e22 0000 0000 0000 0000 0000   Get.&quot;..........&#xA;00000120: 0000 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This one is slightly unusual in that appears to include its name near the beginning of the file; only one other does this. My guess is that this would be the name you can assign to a cassette tape save to be shown on load, or specified so that one can skip past files with other names.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody know how I might detokenize these to read them, turn them into WAV files or similar that I could load in via the cassette interface on my PC-6001, or otherwise get them on to my PC-6001?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I would also welcome hints in the comments pointing to other sources of PC-6001 software that, if investigated, might provide illumination on this matter.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I've also found another file, &lt;a href=&quot;https://www.theoldcomputer.com/roms/getfile.php?file=Li9ORUMvUEMtNjAwMS9EZW1vcy9BeDclMjBEZW1vJTIwJTI4MTl4eCUyOSUyOC0lMjklNUJNb2RlJTIwMSUyQyUyMFBhZ2UlMjAxJTVELnppcA==&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;Ax7 Demo (19xx)(-)[Mode 1, Page 1].cas&lt;/code&gt;&lt;/a&gt; from a completely different source that has a &lt;code&gt;.cas&lt;/code&gt; extension instead of of &lt;code&gt;.p6&lt;/code&gt;, but also appears to be in the same format: five words of &lt;code&gt;$d3d3&lt;/code&gt; followed by a filename. It may be machine language instead of tokenized basic, or a BASIC loader followed by machine language in some form, but it seems to be becoming clear that these are cassette tape file images.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-05T13:10:52.153" LastActivityDate="2019-09-05T14:05:40.217" Title="How do I use NEC PC-6001 .p6 or .cas files?" Tags="&lt;nec-pc&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12242" PostTypeId="5" CreationDate="2019-09-05T10:47:57.597" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-09-05T10:47:57.597" LastActivityDate="2019-09-05T10:47:57.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12243" PostTypeId="4" CreationDate="2019-09-05T10:47:57.597" Score="0" Body="For NEC PC-nnnn series desktop computers, including the PC-8000, PC-6000, PC-8800 and PC-9800. This does not include the portable PC-8300 series known as the Tandy Model 100 outside of Japan." OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-05T14:50:40.193" LastActivityDate="2019-09-05T14:50:40.193" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12244" PostTypeId="2" ParentId="12239" CreationDate="2019-09-05T11:09:47.160" Score="15" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does the Commodore CDTV-CR contain a 65C02 for some reason?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, but it's a rather plain (NMOS) 6500 core.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or, if it's emulating actual hardware, where is the 65C02?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Hiden in a &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6500-1_one-chip_microcomputer_oct_1986.pdf&quot; rel=&quot;noreferrer&quot;&gt;CSG 6500/1&lt;/a&gt; microcontrollers (*1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All Amigas used variations thereof. They are basically a 6503 CPU (*2) plus a 6531 RRIOC(*3) with RAM halved to 64 Byte (*4) joint in a single chip. Base type number is (usually) 6570/71.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga 500 contained the same 6500/1 as the Amiga 3000, here called 6570-36 (part number 328191-02), while the Amiga 1000 had a 6570-33 (*5).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the CDTV a version named &lt;em&gt;&quot;Remote Control Input Converter&quot;&lt;/em&gt; was made to handle things like joystick input. It got no chip type stamped on, but a part number (252609-02).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://mingos-commodorepage.com/sammlung/zubehoer_detail.php?rubtable=sammlung_zubehoer&amp;amp;id=105&amp;amp;detailf=zubehoer_detail&amp;amp;title=CDTV%20Tastatur%20(CD-1221)&amp;amp;listtype=icondetail&quot; rel=&quot;noreferrer&quot;&gt;CD-1221 Keyboard&lt;/a&gt; itself did contain another 6500/1, this time stamped as 6571R6PD, part number 315107-01, doing the matrix scan much like with any other Amiga keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you see, there may be even more than just one 6500 with a CDTV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://www.amiga-stuff.com/hardware/6500_1.html&quot; rel=&quot;noreferrer&quot;&gt;this fine page&lt;/a&gt; for more details of 6500/1 usage within Commodore products as well as pinout and usage for the CDTV.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - As the name hints, they are not really a MOS/CSG design at all, but Rockwell's first 6500 microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Internal address bus is just 12 bit (PC is still 16).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The 6531 RRIOC (&lt;em&gt;ROM-RAM-I/O-COUNTER&lt;/em&gt;) is a less known type of the 653x family. Mostly like a 6530, but as well available in a quite unusual 52 pin DIP offering additional Ports C (8 bit output) and D (4 bit input only), as well as battery backup for the RAM. It offered 128 Byte RAM and 2 KiB ROM&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Or a 6503 CPU plus a &lt;a href=&quot;http://en.wikipedia.org/wiki/MOS_Technology_6532&quot; rel=&quot;noreferrer&quot;&gt;6532 RIOT&lt;/a&gt; with RAM halved to 64 Bytes plus a 6540 ROM and modified ports. Or a 6503 CPU plus &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_RRIOT&quot; rel=&quot;noreferrer&quot;&gt;6530 RRIOT&lt;/a&gt; with ROM doubled to 2 KiB and  Pick your choice. In any case it's a selection of chip components used before arranged to form the 6570.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - The postfix seams to denote a ROM version/revision, much like it was always done by MOS/CSG when it came devices containing ROM, like with the &lt;a href=&quot;http://retro.hansotten.nl/6502-sbc/6530-6532/&quot; rel=&quot;noreferrer&quot;&gt;6530 RRIOT&lt;/a&gt; or 6540 ROM.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-06T00:28:07.210" LastActivityDate="2019-09-06T00:28:07.210" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12245" PostTypeId="2" ParentId="12241" CreationDate="2019-09-05T13:11:02.557" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;am guessing that these are the data of cassette tape saves of tokenzied BASIC programs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly. It's what they are. &lt;code&gt;.P6&lt;/code&gt; files are basically cassette images for some Emulators. Detecting the extension allows automatic switching to P[C-]6[001] mode - or at least helps the user to keep them apart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, it's common practice in the P6 community to use the program name of cassette files to denote video mode and pages, as they differ between models and emulators have to be set up the right way &lt;em&gt;beforehand&lt;/em&gt;. Something like &lt;code&gt;{m1p1}.p6&lt;/code&gt; is a casettte save for a program to be executed on a computer (emulation) capable (set) to screen mode 1, using 1 page of video RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.retropc.net/mm/pc6001/&quot; rel=&quot;nofollow noreferrer&quot;&gt;IP6WIN&lt;/a&gt; and &lt;a href=&quot;http://p6ers.net/bernie/develop/pc6001vw3.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC6001VW&lt;/a&gt; being the most well known Emulators. Another one would be &lt;a href=&quot;http://takeda-toshiya.my.coocan.jp/pc6001/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;yaPC-6001&lt;/a&gt; for Windows. It's part of the '&lt;a href=&quot;http://takeda-toshiya.my.coocan.jp/common/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Common Source Code Project&lt;/a&gt;', kind of a Japan specific MAME, and for sure wort a second and third look.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This one is slightly unusual in that appears to include its name near the beginning of the file; only one other does this. My guess is that this would be the name you can assign to a cassette tape save [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. When saved with a name, the name can be used for searching along a tape. Names are not required, so not every file will have one. Much like with other BASICs of that era, like PET BASIC. After all, the P6's BASIC is a straight Microsoft Z80-BASIC.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does anybody know how I might detokenize these to read them, turn them into WAV files or similar that I could load in via the cassette interface on my PC-6001, or otherwise get them on to my PC-6001?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They are straight forward saves of the cassette data, so the best way is to just load them with the corresponding emulator. For use with a real machine it's as usual your specific setup, especially the ways data can be transferred to them. But that's a huge topic on it's own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Turning them into sound files again seams like a way too complicated attempt (*1) There was a serial interface (PC-6061) which could be build into the base housing (*2). This might be hard to find nowadays (unless already build in by the previous owner), but the PC-6001 is a rather clean Z80 machine, so building a new one - maybe even compatible - should be not hard (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With some willingness to write code and an interface it may be a considerable task to write a small program receiving these files from a PC, striping the headers and placing them in memory, ready to be saved to disk. Programming can be done with Z88DK's ZCC C-Compiler as it got as well a PC-6001 target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend to browse thru Japanese sites for the P6001 as there are plenty of information hidden (yes, I know, it takes lots of time :)) &lt;a href=&quot;http://p6ers.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;p6ers.net&lt;/a&gt; is a very active community and may be the best starting point to dig into the P6-Verse.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - There is no tool I know of to convert .P6 into .WAV again, but one for the other way around: &lt;a href=&quot;http://morigon.jp/p6.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;P6DatRec&lt;/a&gt;. It also can convert them to BASIC listings. So maybe a starting point if there's source available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Note the little break out area in the upper right corner when looking at from behind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - In similar cases I tend to use a &lt;a href=&quot;https://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_UM245R.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;FTDI UM245R&lt;/a&gt; module to directly bring a USB connection to the 8 bit machine without going thru all the hassles of serial drivers and so on. The Module handles all USB communication and offers an extreme simple parallel port, easy to integrate - sometimes all it needs are a few wires - and software is thus extreme simple - read byte/write byte style.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-05T14:01:33.890" LastActivityDate="2019-09-05T14:01:33.890" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12246" PostTypeId="2" ParentId="12241" CreationDate="2019-09-05T13:56:15.360" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;http://papicom.net/p6v/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC6100V&lt;/a&gt; emulator has a file format called &lt;a href=&quot;http://papicom.net/p6v/tech.html#p6t&quot; rel=&quot;nofollow noreferrer&quot;&gt;P6T&lt;/a&gt; which appears to describe cassette tape files as their audio format, rather than as the data in them. There is a conversion tool &lt;a href=&quot;http://papicom.net/p6v/tool.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;P6toP6T&lt;/a&gt; (C source included) that converts P6 files to P6T files. (A quick scan of the &lt;code&gt;read_basic()&lt;/code&gt; function seems to indicate that the &quot;P6&quot; format it reads is the one described in the question.) So that gets one part way to getting an audio version of the cassette file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option, if one just wants to read the BASIC code from the above files on a modern computer (perhaps to type it in by hand :-)) is to use the &lt;code&gt;bas2txt&lt;/code&gt; program from &lt;a href=&quot;http://eighttails.seesaa.net/article/305067428.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;N6XBasicChecker&lt;/a&gt; (source available), which converts from the tape images with BASIC programs described in the question to text files.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-05T14:05:40.217" LastActivityDate="2019-09-05T14:05:40.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12247" PostTypeId="1" AcceptedAnswerId="12250" CreationDate="2019-09-05T19:35:05.113" Score="11" ViewCount="1049" Body="&lt;p&gt;I did a fresh install of the Cloanto &lt;code&gt;amiga-os-310-install.adf&lt;/code&gt; disk to a hard drive, and then I wanted to change the keyboard layout to Swedish. I tried &lt;code&gt;SYS:System/SetMap s&lt;/code&gt; but then I've learned that &lt;code&gt;SetMap&lt;/code&gt; was deprecated in Workbench 2. Then I tried &lt;code&gt;SETKEYBOARD s&lt;/code&gt; which seems to work from a shell, but not when I put it in &lt;code&gt;S\Startup-Sequence&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What can I put in &lt;code&gt;S\Startup-Sequence&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="4369" LastEditorUserId="11374" LastEditDate="2019-09-06T08:42:38.007" LastActivityDate="2019-10-06T02:01:06.480" Title="Set keyboard layout in Amiga Workbench 3.1" Tags="&lt;amiga&gt;&lt;amiga-workbench-3.1&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12248" PostTypeId="2" ParentId="12237" CreationDate="2019-09-05T20:20:36.620" Score="3" Body="&lt;p&gt;One way to avoid this imbalance is to divide the total palette by something other than a power of two when assigning colour channels.  This is done most famously by the Web Safe Palette, which is a uniform 6x6x6 RGB cube totalling 216 colours.  For comparison the RGB332 palette is an 8x8x4 RGB cuboid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because there is no integer cube-root of 256, there are a few palette entries left over from this process.  These can be used to cover spot-colours which would otherwise need to be dithered to be displayed accurately with the base palette.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-09-05T20:20:36.620" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12249" PostTypeId="1" AcceptedAnswerId="12255" CreationDate="2019-09-06T04:56:09.680" Score="6" ViewCount="798" Body="&lt;p&gt;I have several different Japanese 8-bit computers, and they use similar DIN connectors for video and cassette I/O:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Composite video: 180° 5-pin DIN&lt;/strong&gt;: Fujitsu FM-7, NEC PC-8001mkII&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Color TTL (digital) RGB/RGBI video: 8-pin 270° DIN&lt;/strong&gt;: Fujitsu FM-7, NEC PC-8001mkII&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cassette: 270° 8-pin DIN&lt;/strong&gt;: Fujitsu FM-7, NEC PC-8001mkII, NEC PC-6001&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These are just ones I have examined myself; I have seen various other examples on the net that look as if they also output the above signals out the same jacks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a common (even if informal) standard for any or all of these, or do Japanese 8-bit computers frequently use the same 5-pin and 8-pin DIN connectors for these signals but with different pinouts?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am interested just in the signals listed above: cassette audio, composite video and TTL (digital) video. (I believe that would restrict this mainly to pre-MSX and MSX1 computers.) Standards for the monitor side of the connection or analogue RGB signals outside the scope of this question, unless they have a direct bearing on the connectors/signals above.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-06T16:02:07.873" LastActivityDate="2020-07-08T08:15:18.043" Title="Are there standard DIN pinouts for cassette and video ports on early Japanese 8-bit computers?" Tags="&lt;hardware&gt;&lt;video&gt;&lt;cassette-tape&gt;" AnswerCount="4" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12250" PostTypeId="2" ParentId="12247" CreationDate="2019-09-06T08:06:22.760" Score="9" Body="&lt;p&gt;&lt;a href=&quot;https://wiki.amigaos.net/wiki/AmigaOS_Manual:_AmigaDOS_Command_Reference#SETKEYBOARD&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;SETKEYBOARD&lt;/code&gt;&lt;/a&gt; only changes the keyboard layout for the current console (unlike &lt;code&gt;SETMAP&lt;/code&gt; from older AmigaOS versions, which changes the layout globally), hence running &lt;code&gt;SETKEYBOARD&lt;/code&gt; from &lt;code&gt;s/startup-sequence&lt;/code&gt; won't affect other shells than the startup shell itself. Permanent/global keyboard layout changes can be made in &lt;code&gt;Input Preferences&lt;/code&gt; in &lt;code&gt;Prefs&lt;/code&gt;, where the language/layout can be selected as &lt;code&gt;Keyboard Type&lt;/code&gt;. As described in Daedalus' comment below, desired keymaps can be copied to &lt;code&gt;DEVS:Keymaps&lt;/code&gt; from &lt;code&gt;Storage&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11374" LastEditorUserId="11374" LastEditDate="2019-10-06T02:01:06.480" LastActivityDate="2019-10-06T02:01:06.480" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12251" PostTypeId="2" ParentId="12247" CreationDate="2019-09-06T08:41:38.567" Score="5" Body="&lt;p&gt;I'll add to v-joe's answer that &lt;strong&gt;you should never, ever modify the &lt;code&gt;Startup-Sequence&lt;/code&gt;&lt;/strong&gt;. Since Release 2.0 the &lt;code&gt;Startup-Sequence&lt;/code&gt; was declared for private use by Commodore, because the system boots in a way to improve compatibility with releases 1.x. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, the combination of &lt;code&gt;SetPatch&lt;/code&gt; and &lt;code&gt;IPrefs&lt;/code&gt; enable advanced features that otherwise stay disabled (the most important one is &lt;code&gt;graphics.library&lt;/code&gt; and &lt;code&gt;Intuition&lt;/code&gt; to use new fetch modes when running under an AGA machine, but there are other tidbits too). &lt;strong&gt;How the two commands interact was never fully documented, and probably not even tested by Commodore, so adding anything in-between is looking for undefined behavior&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's occasionally required to run commands before &lt;code&gt;SetPatch&lt;/code&gt;, but these are commands that mess with the very low levels of the OS, such as developer's tools, debuggers, commands that play with the MMU, or tools to configure third-party accelerator boards; in this case the command's documentation will explicitly say to add it before &lt;code&gt;SetPatch&lt;/code&gt;, and you can trust them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: if you need to run DOS commands during the boot, use the &lt;code&gt;User-Startup&lt;/code&gt; mechanism introduced in Release 2.0: create a file named &lt;code&gt;User-Startup&lt;/code&gt; inside the &lt;code&gt;S:&lt;/code&gt; assign (if it is not already there; it usually is) and add your command(s) there. For the record, this is also where &lt;code&gt;Install&lt;/code&gt; adds commands required by third-party application.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2019-09-06T08:41:38.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12252" PostTypeId="2" ParentId="12249" CreationDate="2019-09-06T11:42:33.647" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there a common (even if informal) standard for these,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, they have been different from the beginning. Not even the ubiquitous MSX standard could establish a unified connector and even less a pinout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In later years SCART/JP21 established a common use by market force, as it became a standard for TV sets in Japan and large parts of Asia. Still, compatibility was often reached by supplying a cable to connect a computer's proprietary plug to JP21 required by standard monitors/TVs.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or do Japanese 8-bit computers frequently use the same 5-pin and 8-pin DIN connectors with different pinouts?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not only that, but they also use both versions of the &lt;em&gt;DIN 45326 type 8&lt;/em&gt; connector. 8A with 45° (also called 270°), but also type B with 41° (sometimes marked as 262°) - like the most beautiful of all MSXes, the Yashica YC-64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanically it's down to two main connectors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DIN 45326 type 8A&lt;/li&gt;&#xA;&lt;li&gt;SCART/NFC 92250 (only the connector)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With the DIN connector, next to all manufacturers had their own pinout. Some even changed between machines, as Panasonic did. They not only differ in signals present (RGB or YUV, sync on green, separate sync, combined sync, ...), but also in where they are placed (FM-X has +12V on pin 1, while Sanyo puts blue on 1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The situation changed a bit after Japan adopted its version of SCART with the TTC-3/CPE-1201 standard. In Japan and Korea, it's usually called/labeled RGB-21, while outside (in Europe at least) JP-21 is the common name. While using the 21 pin SCART connector, the signal assignment is completely different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;De facto standardisation on the monitor/TV side happened in the mid-1980s when Japanese (and later Korean) manufacturers offered RGB (and later S-Video) input by default via JP21 connectors. In the late 1980s next to every Japanese home computer was sold either with a proprietary-to-JP21 cable, or newer machines already had JP21 built-in, so standard cables could be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this is only true for machines for Asian markets. Units designated for Europe (like Sony HB-G900) had fully SCART compatible connectors on the back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom Line: &lt;strong&gt;JP-21 may be the closest answer here.&lt;/strong&gt; It did, beginning in the mid-1980s, clean up the CRT side, but only in part replaced proprietary connectors on the console side. And it's not a DIN either.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="10678" LastEditDate="2020-06-10T10:35:54.037" LastActivityDate="2020-06-10T10:35:54.037" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12254" PostTypeId="1" CreationDate="2019-09-06T19:50:34.853" Score="4" ViewCount="314" Body="&lt;p&gt;Normally, Windows 9x must be installed on each PC individually so that it can be loaded/configured with the appropriate set of drivers. I'm wondering if there is any way to make a boot HDD that can be transported between machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two PCs with vastly different hardware specs that can both run Windows 9x, though using their own specific drivers for the video, sound, and probably other stuff. I boot both from a Compact Flash card using an IDE-to-CF converter. I'd like to find a way to have just one CF card that I can use interchangeably with both machines. I suppose part of the solution could be a scheme with partitions and BIOS settings so that each PC actually boots from a different partition. This would be fine providing I can access a main partition where apps/games are installed from both PCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to setup such an interchangeable HDD for Windows 9x?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;NOTE&lt;/em&gt;: I'd like to share a 64GB CF card, so assume I'll use FAT32.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-09-06T19:59:03.967" LastActivityDate="2020-04-18T14:31:56.030" Title="Can a bootable Win9x HDD be made interchangeable between PCs?" Tags="&lt;ibm-pc&gt;&lt;hard-disk&gt;&lt;windows-95&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12255" PostTypeId="2" ParentId="12249" CreationDate="2019-09-06T20:14:54.113" Score="5" Body="&lt;p&gt;[This is a community wiki post. However, if you don't have &lt;a href=&quot;https://retrocomputing.stackexchange.com/help/privileges/edit-community-wiki&quot;&gt;enough reputation to edit it&lt;/a&gt;, or just don't feel like doing the work, feel free to post a comment on it linking to the source of a pinout that's not yet here and I will add it to the post --cjs.]&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The page &lt;a href=&quot;https://www14.big.or.jp/%7Enijiyume/hard/jyoho/connect.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;OLD Hard　旧機種情報 &amp;gt;&amp;gt;Connecter Infomation　ケーブル情報&lt;/a&gt; (Japanese) has a &lt;em&gt;lot&lt;/em&gt; of information on various cables for Japanese computers, including a summary table at the bottom of that page covering CRT, keyboard, mouse, CMT (cassette), FDD and power (電源) connectors for 36 different computers. This information should be integrated into what's below.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;This won't help with determining if there are any formal standards, but we can at least figure out if there are informal/accidental standards by looking at actual machines. MSX1 seems to be fairly consistent (excepting analogue RGB, which we're not covering here), so between that and the pre-MSX computers there aren't all that many of them. The listings below are in approximately chronological order of release.&lt;/p&gt;&#xA;&lt;p&gt;In this answer we use the standard pin numbering, below looking in to the female jack on the computer. Note that some references are different, in particular some that give a numbering marked &amp;quot;male&amp;quot; are actually looking at the side of the connector you solder, which gives the same numbering as below. But check the reference carefully!&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       ∪                 ∪&#xA;                      7     6&#xA;  3         1       3    8    1&#xA;    5     4           5     4&#xA;       2                 2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The critical signals to make the interface work are in CAPS below; &amp;quot;extra&amp;quot; signals that shouldn't harm operation if left unconnected are in lower-case.&lt;/p&gt;&#xA;&lt;h2&gt;Cassette&lt;/h2&gt;&#xA;&lt;p&gt;Verdict so far: &lt;strong&gt;very standard&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;                     1      2      3      4      5      6      7      8&#xA;NEC PC-8001         GND    GND    GND    REC    PLAY   REM+   REM-   GND&#xA;NEC PC-6001mkII     cmt1   cmt2   GND    REC    PLAY   REM+   REM-   GND&#xA;Fujitsu FM-77       GND    GND    GND    REC    PLAY   REM+   REM-   GND&#xA;Panasonic JR-200    GND    GND    GND    REC    PLAY   REM+   REM-   GND&#xA;MSX Standard        GND    GND    GND    REC    PLAY   REM+   REM-   GND&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cables almost invariably connect only pin 2 to sleeve on record/play plugs, 4/5 to tip on rec/play, and 6/7 to ring/tip on remote, leaving all other pins unconnected.&lt;/li&gt;&#xA;&lt;li&gt;There are a few exceptions to the standard for the &lt;a href=&quot;https://www.msx.org/wiki/Data_Recorder_connector&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSX CMT&lt;/a&gt; interface. Most of them use a 5-pin port, and so are obviously different. It's not clear if the Frael Bruc 100, a not-quite-MSX computer, uses an 8-pin port, but at any rate it's Italian, not Japanese.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Sources: &lt;a href=&quot;http://www43.tok2.com/home/cmpslv/Pc80/EnrPc.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-8001 CMT&lt;/a&gt;, &lt;a href=&quot;https://archive.org/details/PC6001mkII/page/n159&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-6001mkII CMT&lt;/a&gt;, &lt;a href=&quot;https://archive.org/details/FM7SystemSpecifications&quot; rel=&quot;nofollow noreferrer&quot;&gt;FM-77 CMT&lt;/a&gt;, &lt;a href=&quot;https://github.com/0cjs/sedoc/blob/master/8bit/jr200.md#cmt&quot; rel=&quot;nofollow noreferrer&quot;&gt;JR-200 CMT&lt;/a&gt;, &lt;a href=&quot;https://www.msx.org/wiki/Data_Recorder_connector&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSX CMT&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;Composite Video&lt;/h2&gt;&#xA;&lt;p&gt;Verdict so far: &lt;strong&gt;two standards&lt;/strong&gt;, one for non-MSX, one for MSX.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;                     1      2      3      4      5&#xA;NEC PC-8001         ???    GND    COMP   ???    ???&#xA;Fujitsu FM-77       2MHz   GND    COMP   hsync  vsync&#xA;Sega SC-3000        audio  GND    COMP   gnd    gnd&#xA;MSX Yamaha/Victor   sound  GND    a/v+5  nc/rf  COMP           &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://www.msx.org/wiki/Composite_monitor_(5-pin_DIN_41524)&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSX comp&lt;/a&gt; used by Yamaha and Victor may not be an MSX-defined standard. It's incompatible with other systems listed here. The &lt;code&gt;a/v+5&lt;/code&gt; is used as a control signal to &lt;a href=&quot;https://en.wikipedia.org/wiki/SCART#JP-21&quot; rel=&quot;nofollow noreferrer&quot;&gt;JP-21&lt;/a&gt; (and possibly SCART) connections to set the aspect ratio.&lt;/li&gt;&#xA;&lt;li&gt;The Sega Master System/Mega Drive 8-pin video connector is &lt;a href=&quot;http://members.optusnet.com.au/eviltim/gamescart/gamescart.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;also compatible&lt;/a&gt; with a 5-pin composite video cable using 2:GND and 3:COMP.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Sources: Sources: &lt;a href=&quot;https://github.com/0cjs/sedoc/blob/master/8bit/pc-8001.md#bw-composite-5-pin-180-din&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-8001 comp&lt;/a&gt;, &lt;a href=&quot;https://archive.org/details/FM7SystemSpecifications&quot; rel=&quot;nofollow noreferrer&quot;&gt;FM-77 comp&lt;/a&gt;, &lt;a href=&quot;http://www.smspower.org/forums/13789-8PinDINCableForSC3000#71667&quot; rel=&quot;nofollow noreferrer&quot;&gt;SC-3000 comp&lt;/a&gt;, &lt;a href=&quot;https://www.msx.org/wiki/Composite_monitor_(5-pin_DIN_41524)&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSX comp&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;Digital RGB Video&lt;/h2&gt;&#xA;&lt;p&gt;Verdict so far: &lt;strong&gt;very standard&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;                     1      2      3      4      5      6      7      8&#xA;NEC PC-8001         vcc    GND    14Mhz  HSYNC  VSYNC  RED    GREEN  BLUE&#xA;NEC PC-8801         +12V   GND    ?      HSYNC  VSYNC  RED    GREEN  BLUE&#xA;NEC PC-6001mkII     14MHz  GND    ccont  HSYNC  VSYNC  RED    GREEN  BLUE&#xA;Sharp MZ-700        video  GND    csync  HSYNC  VSYNC  RED    GREEN  BLUE&#xA;Fujitsu FM-7        +12V   GND    2MHz   HSYNC  VSYNC  RED    GREEN  BLUE&#xA;Panasonic JR-200    vblank GND    comp.  HSYNC  VSYNC  RED   GREEN  BLUE&#xA;MSX Digital         +12V   GND    n/c    HSYNC  VSYNC  RED    GREEN  BLUE&#xA;Sharp MZ-800        i      GND    unused HSYNC  VSYNC  RED    GREEN  BLUE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The NEC PC-6001mkII &lt;code&gt;ccont&lt;/code&gt; signal is the 色相制御信号 or RGBI intensity bit.&lt;/li&gt;&#xA;&lt;li&gt;The Sharp &lt;a href=&quot;https://original.sharpmz.org/mz-700/download/sm700.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MZ-700 RGB&lt;/a&gt; scan has been corrected by hand to reverse the original 3:HSYNC and 5:CSYNC description, which was presumably a typo. The &lt;a href=&quot;https://www.sharpmz.no/articles/the-mz-series/mz-700/mz-700-connecting-a-monitor-or-a-tv-to-the-mz-700/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MZ-800 RGB&lt;/a&gt; source also gives an MZ-700 pinout that matches the correction.&lt;/li&gt;&#xA;&lt;li&gt;National/Panasonic JR-200 includes DIN-5-compatible composite color output on the same DIN-8 connector used for DRGB.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Warning:&lt;/strong&gt; The &lt;a href=&quot;https://www.msx.org/wiki/RGB_(8-pin_DIN_45326)&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSX RGB&lt;/a&gt; pinout above applies only to those MSX computers that use &lt;strong&gt;digital RGB&lt;/strong&gt; output, which is very few (Fujitsu FM-X, Pioneer PX-7, PX-V7 and PX-V60 according to the source). Most MSX computers seem to use analogue RGB outputs on 8-pin connectors, which are not compatible with digital and vary in the pins they use for which signals.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Sources: &lt;a href=&quot;https://hkjunk0.com/computer/hardware-and-maintenance/pc8001-rgb-output.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-8001 RGB&lt;/a&gt;, &lt;a href=&quot;https://www.leadedsolder.com/2018/09/24/pc88-colour-video.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-8801 RGB&lt;/a&gt;, &lt;a href=&quot;https://archive.org/details/PC6001mkII/page/n157&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-6001mkII RGB&lt;/a&gt;, &lt;a href=&quot;https://original.sharpmz.org/mz-700/download/sm700.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MZ-700 RGB&lt;/a&gt; (p.19), &lt;a href=&quot;https://archive.org/details/FM7SystemSpecifications&quot; rel=&quot;nofollow noreferrer&quot;&gt;FM-7 RGB&lt;/a&gt;, &lt;a href=&quot;https://www.msx.org/wiki/RGB_(8-pin_DIN_45326)&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSX RGB&lt;/a&gt;, &lt;a href=&quot;https://www.sharpmz.no/articles/the-mz-series/mz-700/mz-700-connecting-a-monitor-or-a-tv-to-the-mz-700/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MZ-800 RGB&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-07-08T08:15:18.043" LastActivityDate="2020-07-08T08:15:18.043" CommentCount="0" CommunityOwnedDate="2019-09-06T20:14:54.113" ContentLicense="CC BY-SA 4.0" />
  <row Id="12256" PostTypeId="1" AcceptedAnswerId="12257" CreationDate="2019-09-06T22:21:42.470" Score="20" ViewCount="1646" Body="&lt;p&gt;On IBM keyboards, scan code sets 1 and 2 have a long make code and lack a break code for the &lt;kbd&gt;Pause/Break&lt;/kbd&gt; key. Moreover, when &lt;kbd&gt;Ctrl&lt;/kbd&gt; is pressed, the make code is different, although break code still doesn't exist.*&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In scan code set 3 there does appear the break code, but this set isn't used much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the reason for &lt;kbd&gt;Pause/Break&lt;/kbd&gt; to be treated so specially to not even have a break code?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;&lt;sup&gt;*&lt;/sup&gt;See detailed tables in e.g. &lt;a href=&quot;http://www.emc.com.tw/eng/database/Data_Sheet/PC/EM83053D.pdf&quot; rel=&quot;noreferrer&quot;&gt;this spec&lt;/a&gt; for EM83053DH keyboard encoder. I've checked experimentally that description for &lt;kbd&gt;Pause/Break&lt;/kbd&gt; is correct at least with set 2 active.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="1992" LastActivityDate="2019-09-06T23:14:53.307" Title="Why does PAUSE key have a long make code and no break code?" Tags="&lt;keyboards&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12257" PostTypeId="2" ParentId="12256" CreationDate="2019-09-06T23:14:53.307" Score="25" Body="&lt;p&gt;In scancode set 2, the &quot;break&quot; scancodes consist of the &quot;make&quot; scancodes prefixed by &lt;code&gt;F0&lt;/code&gt;.  This is consistent across nearly all the keys.  Some keys include a modifier prefix in the &lt;code&gt;Ex&lt;/code&gt; range as well, and this is repeated in the &quot;break&quot; sequence.  Additionally some keys behave as if two keys are pressed at once, and thus include multiple &lt;code&gt;F0&lt;/code&gt; codes to ensure that both virtual keys are seen as released by the host PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;make&quot; scancode for the Pause/Break key, however, is &lt;code&gt;E1 14 77 E1 F0 14 F0 77&lt;/code&gt;.  Examining this closely, this is actually a combined &quot;make&quot; then &quot;break&quot; sequence for a composite scancode: &lt;code&gt;E1 14 77&lt;/code&gt;, then &lt;code&gt;E1 F0 14 F0 77&lt;/code&gt;.  So when you press that key, it is seen as pressed only momentarily by the host PC, even if you hold it down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, this is a hopeless mess.  I think it resulted from the gradual evolution of the PC keyboard through its early history.  The USB-HID scancode set is completely different, this obviously being seen as an opportunity to discard the cruft.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-09-06T23:14:53.307" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12258" PostTypeId="1" AcceptedAnswerId="12259" CreationDate="2019-09-07T02:33:01.837" Score="39" ViewCount="7937" Body="&lt;p&gt;I remember my old 8088 used to do this (640K OK) but can't remember seeing anything like this since.  Does this still happen and it's just not visible?  If not, when did it stop, and why? (Imagining it might take too long with today's memory and/or not be necessary?)&lt;/p&gt;&#xA;" OwnerUserId="8856" LastActivityDate="2019-09-09T19:37:21.823" Title="When did computers stop checking memory on boot?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;memory&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12259" PostTypeId="2" ParentId="12258" CreationDate="2019-09-07T03:52:54.567" Score="45" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;When did computers stop checking memory on boot?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Never.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I remember my old 8088 used to do this (640K OK) but can't remember seeing anything like this since. Does this still happen and it's just not visible?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly. And it has been simplified and speed up as well. But more important, it's usually hidden under some manufacturer boot logo or whatsoever funny pic one installs. Check your BIOS and you should find an option to make it visible.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Imagining it might take too long with today's memory&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It was already way too long back then. The original PC and its direct clones did a thruout check, way more detailed than most other contemporary (desktop) computers. A habit IBM took from their professional systems to increase reliability.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and/or not be necessary?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It still is, but nowadays, at least on consumer machines, it's reduced to a general initialization. Convenience trumps reliability. For serious usage (Servers) memory test is still a thing that will take up quite some time. After all, one wants to be sure that there is no hidden memory error crashing the machine during productive work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today BIOSes often offer a setup option to select &lt;em&gt;no test&lt;/em&gt;, &lt;em&gt;fast test&lt;/em&gt;, or &lt;em&gt;full test&lt;/em&gt;. Or it's hidden under an subsumizing 'quick boot' option. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(Followup question as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12258/when-did-computers-stop-checking-memory-on-boot/12259#comment38354_12259&quot;&gt;recomended by Kaz&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[W]hen did computers stop doing this comprehensive memory check on boot?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I can't tell an exact date or BIOS Version, but it has been in the end of the 1980s when RAM sizes of more than 1 MiB became standard for consumer machines. So about the time of fast 286, NEAT boards, upcomming 386 and Windows. The focus is here really the consumer segment, as boot times don't really matter on office machines (*1). About that time people became conscious about startup time and companies using it as sales argument. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Every employee likes a reason to fetch a fresh brew :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-09T19:37:21.823" LastActivityDate="2019-09-09T19:37:21.823" CommentCount="28" ContentLicense="CC BY-SA 4.0" />
  <row Id="12260" PostTypeId="1" AcceptedAnswerId="12262" CreationDate="2019-09-07T08:31:21.653" Score="11" ViewCount="500" Body="&lt;p&gt;Conventional IDE (or parallel ATA) controllers support two devices per controller; these are designated Master and Slave, and need to be configured as such with jumpers on the devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In later years, another option was available: the use of Cable Select. In this arrangement the drive was not jumpered as Master or Slave, but a third option that would allow the drive to select either option depending on its position on the IDE cable. I believe this was done by only connecting pin 28 to one of the two device connectors on a compatible IDE connector, the presence or absence of which would be detected by the device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can picture situations where the ability to have the drive configure itself based on the cable location would be useful, such as a machine with a number of removable drive bays. I never had occasion to use it myself (or at least never got it working), so continued to use the Master / Slave options until the advent of SATA devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;When did IDE devices (and controllers/cables) supporting Cable Select become available?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-09-07T20:34:01.070" Title="When was &quot;Cable Select&quot; introduced for IDE devices?" Tags="&lt;ide&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12262" PostTypeId="2" ParentId="12260" CreationDate="2019-09-07T09:50:05.827" Score="13" Body="&lt;p&gt;Cable Select (CS) appeared as an optional component of ANSI standard X3.221-1994 in 1994, the first published standard describing “IDE” (and later known as ATA-1). This also seems to correspond to the availability of drives implementing the standard; for example, &lt;a href=&quot;https://stason.org/TULARC/pc/hard-drives-hdd/conner/CFS-210A-210MB-3-5-SL-IDE-AT.html&quot; rel=&quot;noreferrer&quot;&gt;Conner’s CFS-210A&lt;/a&gt;, introduced in October 1993, doesn’t support it, but their drives introduced in 1994, such as &lt;a href=&quot;https://stason.org/TULARC/pc/hard-drives-hdd/conner/CFL-350A-350MB-2-5-SSL-ATA2-FAST.html&quot; rel=&quot;noreferrer&quot;&gt;the CFS-350A&lt;/a&gt;, do. I first came across CS in Compaq systems around that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you describe, CS was implemented using pin 28. That line on the bus changed purpose before the standard was published: initially, it was the drive address latch enable line, then it became the spindle sync (SPSYNC) line (used to synchronised two drives’ rotation, &lt;em&gt;e.g.&lt;/em&gt; for mirroring setups), and finally cable select. Technically, at least in early drafts of ATA-1, line 28 is dual-purpose, and drives can implement SPSYNC and/or CS. See &lt;a href=&quot;https://www.ele.uri.edu/courses/ele408/s2001/projects/roland_ide/ide.html&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; for details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CS has also changed over time. With 40-wire cables, drive 0 is the drive closest to the controller, and the cable is left dangling in single-drive systems. This causes issues with signal reflection, so with 80-wire cables, drive 0 is at the end of the cable.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-09-07T20:34:01.070" LastActivityDate="2019-09-07T20:34:01.070" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12263" PostTypeId="2" ParentId="12249" CreationDate="2019-09-07T11:11:49.053" Score="1" Body="&lt;p&gt;There's a seller on &lt;a href=&quot;https://auctions.yahoo.co.jp&quot; rel=&quot;nofollow noreferrer&quot;&gt;Yahoo Auctions in Japan&lt;/a&gt; named&#xA;&lt;a href=&quot;https://auctions.yahoo.co.jp/seller/michael_torojirou&quot; rel=&quot;nofollow noreferrer&quot;&gt;michael_torojirou&lt;/a&gt; who makes cables for pre-90s computers. Over the&#xA;last several years has sold a lot (several thousand, from the looks of&#xA;it) of them with consistently good feedback, so it's likely that they&#xA;work.&lt;/p&gt;&#xA;&lt;p&gt;From his offerings for cables that connect 8-pin DIN digital RGB&#xA;outputs to various kinds of monitors, we can see that the same cable&#xA;is used for a wide variety of computers, indicating that these outputs&#xA;are fairly standardized, even beyond the early 8-bit computers and&#xA;MSX1.&lt;/p&gt;&#xA;&lt;p&gt;Some examples:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://page.auctions.yahoo.co.jp/jp/auction/f369565850&quot; rel=&quot;nofollow noreferrer&quot;&gt;MZ/PC-8801/8001/6001/6601/FM-7&lt;/a&gt;&lt;/strong&gt; to &amp;quot;RGB21&amp;quot; (i.e., the&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/SCART#JP-21&quot; rel=&quot;nofollow noreferrer&quot;&gt;JP-21&lt;/a&gt; variant of SCART). There's obviously digital-to-analogue RGB&#xA;conversion circuitry in this cable because most of the computers he&#xA;discusses have only digital outputs, and he's tested it with an&#xA;analogue RGB display (Sanyo CMT-A14F1G) and several up/down-scalers.&#xA;He lists this as usable with:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fujitsu FM-8、FM-7、FM-NEW7&lt;/li&gt;&#xA;&lt;li&gt;SHARP MZ-700/1500/2200/2500 (2500 at 16 colours, 15 KHz only)&lt;/li&gt;&#xA;&lt;li&gt;Casio FP-1100&lt;/li&gt;&#xA;&lt;li&gt;NEC PC-6001mk2、PC-6601/SR、PC-8001mk2/SR&lt;/li&gt;&#xA;&lt;li&gt;NEC PC-8801mk2 series digital 8-pin ouput (8 colours)&lt;/li&gt;&#xA;&lt;li&gt;NEC PC-9801 series digital 8-pin output (8 colors at 15 KHz low resolution)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://page.auctions.yahoo.co.jp/jp/auction/u298712408&quot; rel=&quot;nofollow noreferrer&quot;&gt;MZ/PC-8001/6001/6601/FM-7&lt;/a&gt;&lt;/strong&gt; to DB-15 (not DE-15), for&#xA;monitors with a 15-pin analogue RGB input. It seems basically the same&#xA;as the cable above with a different monitor-side connector, and&#xA;supports the same set of computers as above.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://page.auctions.yahoo.co.jp/jp/auction/h418235251&quot; rel=&quot;nofollow noreferrer&quot;&gt;MZ/PC-8001/6001/FM-7三菱液晶MDT221WG/MDT242WG/RDT202WLM&lt;/a&gt;&lt;/strong&gt;&#xA;to DE-15. This seems to be for monitors like the Mitsubish [MDT242WG]&#xA;that support analogue RGB at 24 kHz. It's been tested to work with:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SHARP MZ-700, 1500 (startup screen), 2500 (several games; 16/8 colours only)&lt;/li&gt;&#xA;&lt;li&gt;Fujitsu FM-7, FM-NEW7 (several games)&lt;/li&gt;&#xA;&lt;li&gt;Casio FP-1100 (startup screen)&lt;/li&gt;&#xA;&lt;li&gt;NEC PC-6001mk2 (startup screen; PC60/PC66 16 colors not supported)&lt;/li&gt;&#xA;&lt;li&gt;PC-8001mk2 (startup screen; 40-cols not supported)&lt;/li&gt;&#xA;&lt;li&gt;PC-8801mk2FR (several games; 24 KHz)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;He goes on to say that this is supposed to work with (I guess some)&#xA;MSX2 computers and game consoles as well.&lt;/p&gt;&#xA;&lt;p&gt;So it seems that there is a fairly standard pinout for digital RGB on&#xA;8-pin DIN connectors for early Japanese 8-bit computers.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-08T02:38:55.827" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12264" PostTypeId="2" ParentId="12258" CreationDate="2019-09-07T18:21:05.477" Score="10" Body="&lt;p&gt;The DDR4 spec actually includes a RAM tuning test, to be performed at boot time, as part of supporting today's multi-gigahertz signalling speeds on a consumer-priced motherboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This accounts for the several seconds that often elapses between the machine powering up and the graphics output coming alive; the GPU is only initialised after this initial RAM check is complete.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-09-07T18:21:05.477" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12265" PostTypeId="1" CreationDate="2019-09-07T19:54:59.567" Score="2" ViewCount="298" Body="&lt;p&gt;I have a ZX Spectrum+2 with the built in tape deck.&#xA;I can load tapes no problem, when I try to save, I get the border lines. When I try to reload the program I get nothing &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be greatly appreciated &lt;/p&gt;&#xA;" OwnerUserId="15196" LastActivityDate="2019-09-10T04:59:21.720" Title="ZX Spectrum +2 not saving" Tags="&lt;zx-spectrum&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12266" PostTypeId="2" ParentId="12247" CreationDate="2019-09-07T22:44:39.963" Score="3" Body="&lt;p&gt;As an alternative option to changing the global keyboard layout in &lt;code&gt;Prefs&lt;/code&gt;, there is a free &lt;code&gt;SetMap&lt;/code&gt; replacement for Workbench 2.x and 3.x: &lt;a href=&quot;http://aminet.net/package/util/cli/SetMap.lha&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://aminet.net/package/util/cli/SetMap.lha&lt;/a&gt; (which can change the keymap from the command line and also for all consoles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To e.g. change the keyboard layout systemwide to Swedish:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SetMap s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To only change the layout for the current shell (i.e. to have it behave like &lt;code&gt;SetKeyboard&lt;/code&gt;), &lt;code&gt;WINDOW&lt;/code&gt; must be specified as a second argument.&lt;/p&gt;&#xA;" OwnerUserId="14576" LastEditorUserId="14576" LastEditDate="2019-09-08T04:02:41.240" LastActivityDate="2019-09-08T04:02:41.240" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12267" PostTypeId="2" ParentId="12214" CreationDate="2019-09-08T00:11:13.893" Score="0" Body="&lt;p&gt;I used a PDP-11/45 a bit when I was an undergrad. I also used a few computers with some manner of push buttons, including keypads, on their front panels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The one thing I liked about the 11/45's front panel was that eventually I was able to change multiple switches at once, or sequence switches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also likely design decisions. If you look at the IMSAI 8080 front panel, the on-off and momentary contact switches are similarly designed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that fingers aren't all the same length, and trying to press multiple buttons is really only possible of the buttons are on a flat surface, like a modern keyboard. With with toggle / paddle switches, you can (and I learned to quite well) change multiple switches with much less effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So ... while not one of the people who actually made that design decision, that was my experience.&lt;/p&gt;&#xA;" OwnerUserId="8796" LastActivityDate="2019-09-08T00:11:13.893" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12268" PostTypeId="2" ParentId="6456" CreationDate="2019-09-08T02:47:01.320" Score="1" Body="&lt;p&gt;The answer is in your question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;By the early 90s, the earliest successful expert systems, such as XCON, &lt;strong&gt;proved&lt;/strong&gt; too expensive to maintain. They were difficult to update, they could not learn, they were &quot;brittle&quot; (i.e., they could make grotesque mistakes when given unusual inputs), and they fell prey to problems (such as the qualification problem) that had been identified years earlier in research in nonmonotonic logic.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It took time for people to realize that things which worked in strictly controlled academic settings often don't translate well to the &quot;real&quot; world.&lt;/p&gt;&#xA;" OwnerUserId="3683" LastActivityDate="2019-09-08T02:47:01.320" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12269" PostTypeId="2" ParentId="5341" CreationDate="2019-09-08T09:43:57.330" Score="2" Body="&lt;p&gt;It's perhaps worth noting that line editors were originally developed for printing teletypes, before addressable CRT terminals were widely available.  They did require a certain amount of holding your program file in memory, although you could print out sections of the code.  In practice, this was a cognitive skill that programmers using them tended to learn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Uphill both ways etc.  Now get off my lawn.&lt;/p&gt;&#xA;" OwnerUserId="3796" LastActivityDate="2019-09-08T09:43:57.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12270" PostTypeId="1" AcceptedAnswerId="13754" CreationDate="2019-09-08T09:48:27.897" Score="6" ViewCount="365" Body="&lt;p&gt;I have a NEC PC-8001mkII computer (sometimes incorrectly called a &quot;PC-8001mk2&quot;) which has a built-in disk controller for PC-8000-series double-density 5.25&quot; drives. (The &lt;a href=&quot;https://en.wikipedia.org/wiki/PC-8000_series#PC-8001mkII&quot; rel=&quot;noreferrer&quot;&gt;English&lt;/a&gt; and &lt;a href=&quot;https://ja.wikipedia.org/wiki/PC-8000%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA#PC-8001mkII&quot; rel=&quot;noreferrer&quot;&gt;Japanese&lt;/a&gt; Wikipedia pages contain a bit of information about this model.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The floppy disk connector on the back is a female &lt;a href=&quot;https://en.wikipedia.org/wiki/Micro_ribbon_connector&quot; rel=&quot;noreferrer&quot;&gt;36-pin micro-ribbon connector&lt;/a&gt;, also known as a &quot;Centronics&quot; connector, similar to printer and SCSI drive connectors from the 1980s. That Wikipedia link shows the male and female connectors, and a picture of the female connector on the computer is below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to know what the pinout for this connector is. Bonus points given if you can describe how to hook it up to an &lt;a href=&quot;https://hxc2001.com&quot; rel=&quot;noreferrer&quot;&gt;HxC 2001&lt;/a&gt; or similar floppy emulator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the number of pins, I'm guessing that it's moderately likely that NEC is directly running Shugart's 34-pin SA-400 interface through that connector. I have an oscilloscope; if you have suggestions for me about how to reverse-engineer the pinout for interface I'll happily take them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/baZJq.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/baZJq.jpg&quot; alt=&quot;NEC PC-8001mkII floppy disk connector&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-08T10:34:22.607" LastActivityDate="2020-05-06T09:30:45.897" Title="What is the floppy disk port pinout for the NEC PC-8001mkII?" Tags="&lt;disk-drive&gt;&lt;floppy-drive&gt;&lt;nec-pc&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12271" PostTypeId="1" CreationDate="2019-09-08T16:16:19.043" Score="12" ViewCount="1011" Body="&lt;p&gt;Commodore disk drives such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_1541&quot; rel=&quot;noreferrer&quot;&gt;1541&lt;/a&gt; used with the Commodore 64 and similar computers, and the earlier &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_8050&quot; rel=&quot;noreferrer&quot;&gt;8050&lt;/a&gt; used with the PET series, had their own 6502 CPU and 2 kB or so of RAM used to run the code that read/wrote the disk and talked to the computer via the serial bus protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/4692/7208&quot;&gt;Obscure uses of the Commodore 8050/1541 disk drive&lt;/a&gt; discusses downloading new programs that do interesting things such as directly search the disk (returning only the results), change how the disk is read and/or written, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How exactly does one send a new routine to the drive and execute it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that I'm &lt;em&gt;not&lt;/em&gt; asking here how I can make sure the code I send works with Commodore DOS or whatever else is in the drive or anything like that; I just want to understand how I could send code to the drive that would, e.g., &lt;code&gt;LDA #0&lt;/code&gt;, and then how I would execute that, even if I can't see the result (and even if it requires resetting the drive afterwards to make it usable again).&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-09T05:42:53.700" LastActivityDate="2020-09-07T11:08:27.873" Title="How do you send code to a Commodore disk drive and run it?" Tags="&lt;commodore&gt;&lt;disk-drive&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12272" PostTypeId="2" ParentId="12271" CreationDate="2019-09-08T16:39:14.187" Score="12" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How exactly does one send a new routine to the drive and execute it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Usually by executing the &lt;strong&gt;Memory-Write&lt;/strong&gt; command twice followed by &lt;strong&gt;UserN&lt;/strong&gt; command, as described in &lt;a href=&quot;https://archive.org/details/Commodore_1541_Disk_Drive_Users_Guide_1982-09_Commodore/page/n49&quot; rel=&quot;nofollow noreferrer&quot;&gt;chapter 8 of the floppy manual&lt;/a&gt; (*1).&lt;/p&gt;&#xA;&lt;p&gt;Once to place the routine to be used and then to setup its address as user function (or whatever it is supposed to replace).&lt;/p&gt;&#xA;&lt;p&gt;A suitable function to do so may look like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;1000 REM Write to Floppy RAM&#xA;1010 REM AD  -&amp;gt; Address to be written to&#xA;1020 REM DA$ -&amp;gt; Data (code) to be stored&#xA;1030 OPEN 15,8,15 : REM Open command channel&#xA;1040 PRINT#15,&amp;quot;M-W&amp;quot;;CHR$(AD);CHR$(AD/256);CHR$(LEN(DA$)) : REM Send Memory Write command&#xA;1050 PRINT#15,DA$ : REM Send Data (code)&#xA;1060 CLOSE 15&#xA;1070 Return&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Alternative, a Memory-Execute can be inserted, to execute the code right away:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;1055 PRINT#15,&amp;quot;M-E&amp;quot;;CHR$(AD);CHR$(AD/256)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;(The code shown is made for C64/&lt;a href=&quot;http://sta.c64.org/cbm1541mem.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;1541/DOS 2.6&lt;/a&gt; and from memory, thus no warranty on correctness. Nonetheless the instructions used should work on next to all Commodore computers/drives. Of course you may want to look up the specific  address layout for the drive you're using, as well as more advanced command if using a newer BASIC.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The function can move any data to any place (*2).&lt;/p&gt;&#xA;&lt;p&gt;If it's about extending DOS, then pointers within DOS needs to be updated. This can be done as well with the above function (without the M-E line). Of course addresses to be used for program, and how to patch pointers and where they are located, depends on the drive in use and the DOS installed. So you may want to take a look at the corresponding DOS disassemblies.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Going into all detail of Commodore DOS and possible usage is way too broad for this (or any single question), so here only a few hints. &lt;em&gt;While they work on most drives, this will use the 1541 as base&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Using a file buffer is a great place to store a routine (best one were no other file operation is interfering). 1541 got 5 buffers, of 256 bytes each, located at $300.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's about making simple routines for parallel processing, then the &lt;strong&gt;User-Functions&lt;/strong&gt; U3..U8 are made for that (*3). Their entry points are located at $500+((N-3)*3) (*4) and can be called by simply sending the &lt;strong&gt;User&lt;/strong&gt; command (&amp;quot;Un&amp;quot;) as often as desired.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Further parameters can be put in the command string - just keep it short as the command buffer is just 66 (?) bytes.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Since the default pointer for the User commands is in buffer 2, writing your code to $500 may set up &amp;quot;Un&amp;quot;-entry point and code in one operation.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In fact, all of that can be done in one operation if the code resides on floppy, &lt;strong&gt;Block-Execute&lt;/strong&gt; (&amp;quot;B-F&amp;quot;), which loads a floppy block into a buffer and executes right there. Of course the block has to be written to disk first.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A more sophisticated way is to use explicit &lt;strong&gt;Block-Read&lt;/strong&gt; operations to 'page in' code blocks, from disk, to be executed by User function (or Memory-Execute). Now even complex module/overlay solutions are possible.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The most simple way to get information back it reading some memory (like the very same buffer the code has been written to or parts thereof) with &lt;strong&gt;Memory Read&lt;/strong&gt; (&amp;quot;M-R&amp;quot;).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Otherwise writing to the error buffer can be used to return results as error messages&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Or put it into file buffer of a file that has been opened previous and just read it. This may need a bit of fiddling with buffer internals, but may be the most rewarding way.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Isn't it funny how much pseudo secrets are running around this when everything needed is described in the manual?&lt;/p&gt;&#xA;&lt;p&gt;*2 - Ofc, only useful if there's RAM and only if none of the locations are used by the parts of DOS involved with this command.&lt;/p&gt;&#xA;&lt;p&gt;*3 - U1/2 points to otherwise useful functions and can't be redirected as easy.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Yes, that's right in buffer #2. But there's also a pointer somewhere that can be made to locate them else were&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2020-09-07T11:08:27.873" LastActivityDate="2020-09-07T11:08:27.873" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12273" PostTypeId="2" ParentId="12271" CreationDate="2019-09-08T16:58:02.510" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How exactly does one send a new routine to the drive and execute it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The file called &amp;quot;&lt;a href=&quot;http://www.ffd2.com/fridge/devpack/bin/instructions&quot; rel=&quot;nofollow noreferrer&quot;&gt;instructions&lt;/a&gt;&amp;quot; in the &amp;quot;1541 Fastload Routine&amp;quot; directory explains:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;The fast-loader consists of two separate programs: one program in the C-64 controls the loading process, and another program in the 1541 sends over the file that is being loaded.&lt;/p&gt;&#xA;&lt;p&gt;The 1541 code sits immediately at the end of the C-64 code, and when the program is run, it transfers the 1541 code into the disk drive and executes it.&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;See the &lt;a href=&quot;http://www.ffd2.com/fridge/devpack/bin/&quot; rel=&quot;nofollow noreferrer&quot;&gt;directory&lt;/a&gt; for numerous examples and source code. If you can read .ARC compressed files everything seems to be packaged in this &lt;a href=&quot;http://www.ffd2.com/fridge/devpack/arc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;directory&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Another explanation is offered on the webpage: &amp;quot;&lt;a href=&quot;https://www.pagetable.com/?p=53&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Ultimate Commodore 64 Talk @25C3&lt;/a&gt;&amp;quot;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;Since loading an application or a game takes minutes on an unmodified C64, several 'floppy speeders' appeared (either as software on disk or built into applications, as ROM extension cartridges, or as internal replacement ROMs), that consisted of implementations of more optimized protocols for the IEC bus for both the C64 and the 1541.&lt;/p&gt;&#xA;&lt;p&gt;The 1541 code was uploaded using the old bus protocol. Such a new protocol would for example not do a handshake on every bit using the clock line, but shift a complete byte through in 4 steps, two bits at a time, using the clock and data line at the same time.&lt;/p&gt;&#xA;&lt;p&gt;This would of course only work if both CPUs were not interrupted. VIC timing on the C64 side could already affect this, so many floppy speeders turned off the screen while loading.&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;[Note: It is possible to avoid screen blanking by using timing protocols based on scan line information on the Vic chip to transfer only on those boundaries – the horizontal flyback and vertical flyback windows.]&lt;/p&gt;&#xA;&lt;p&gt;A more in-depth explanation is offered on the webpage: &amp;quot;&lt;a href=&quot;https://www.pagetable.com/?p=568&quot; rel=&quot;nofollow noreferrer&quot;&gt;A 256 Byte Autostart Fast Loader for the Commodore 64&lt;/a&gt;&amp;quot;, it even explains the trick of writing the code on a disk sector and executing on the drive without transfering the program over the bus.&lt;/p&gt;&#xA;" OwnerUserId="13513" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-08T16:58:02.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12274" PostTypeId="2" ParentId="12258" CreationDate="2019-09-08T19:32:29.227" Score="3" Body="&lt;p&gt;...It just seemed to disappear! Certainly my old 486-100 had it. I think it's no longer done, as a result of reliable RAM, and the vast amounts of RAM now fitted. This machine has 8GB, a little tight by modern standards. My 486 started off with 4MB, and finally ended up with I think 24MB. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, RAM and CPUs have got faster since then, partly making up the difference. But that 486's RAM ran at 33MHz. For my modern machine with 2048x as much, it would need to run at 66GHz, all things being equal. This next part I was going to guess at, but let's ask Sandra... 1.6GHz RAM speed. Actually 800MHz double-data-rate. So to check the RAM now would take 40x longer than my 486 did. Not acceptable! It started to get annoying when I'd upgraded it to 8MB! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And usually, back in the day, you'd press Esc to skip the test anyway. That's why BIOSes started to add the skip option. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;RAM tests don't really need doing at bootup. If it worked when it was installed, it'll almost certainly be fine now. Any RAM problems that do occur will show up soon enough one way or another. And they're so rare, it's just not worth checking. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't say for certain it doesn't check, say, every millionth byte just to be sure. But the old tests are no longer needed. They probably weren't even in the 486 days. The early PCs with low-density single-chip RAM, where you'd have a few dozen individual RAM chips installed on the motherboard, sometimes pressed into sockets, not soldered, were a reliability liability! But no longer. So because it's impractical and barely necessary, they dropped it at some point down the line. I haven't seen a BIOS in a long time that even mentions RAM test, and I tinker with a lot of PCs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There you go! I even mentioned the old dozens of RAM chips, often with only 8K &#xA;(64k x 1-bit) per chip. The 4164 DRAMs. And they were the modern ones! Before about 1982, companies used the 4116's instead. You can guess the capacity! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.old-computers.com/history/detail.asp?n=43&amp;amp;t=3&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.old-computers.com/history/detail.asp?n=43&amp;amp;t=3&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tells me the 4164 is from October 1978. But they were very expensive for the first few years. Too expensive for the fun home computers we all love!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early PCs really did have lots of RAM chips, when I say dozens... using the relatively large 4164s, you'd need 80 of them for the full 640K! Often you'd install a card into one of the ISA slots with 256K on it. Or two of these for 512K, plus the 64K on the motherboard (if you went for that option, not the 16K base option), would be 576K. So RAM expansion cards were a sea of little chips, and early RAM ran hot. Not enough to use heatsinks like the fusion furnaces of modern CPUs, but still hot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later PCs could use the 61256 chips, 256kx1, which is 32K altogether, so more RAM was less error-prone, and indeed possible to fit on a motherboard. Then eventually to SIMMs but we all know that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[If you want a bonus factoid... Sometimes the RAM chips could climb out of the sockets by themselves! The RAM chip's pins were bent slightly outward. The connectors in the socket were springy to push themselves onto the pins. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's thought the cause was thermal cycling, ie hot and cold through working in the day and cooling off at night. This would cause minute expansion and contraction of the metal in the chip's pins, causing them to gradually push themselves up and out of their socket. One day, something would go weird (on early IBM PC's with 9-bit parity-checking RAM, you'd get a &quot;PARITY CHECK 2&quot; error, the mainboard raising an interrupt to tell the processor something was wrong). You might open the case, eventually notice one of the dozens of RAM chips was gone, and perhaps find it rattling around somewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern consumer PCs don't bother with parity. It added 1/8th to the RAM cost, and all it got you was an immediate crash to an error message you had to turn off the machine for. ECC RAM for servers is it's grandchild. It costs more, mostly because of the lower demand for it, but also because people who want reliability like that are willing to PAY for it! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some early computers, though not IBM PCs I think, a maintenance option was to drop it onto a concrete floor from 1 metre up! Re-seated the RAM chips nicely! Wish I could remember which computer that was. Anything with a floppy drive or other mechanics would be right out. ]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enjoy your free RAM related fact-let!&lt;/p&gt;&#xA;" OwnerUserId="14475" LastEditorUserId="14475" LastEditDate="2019-09-08T20:03:06.970" LastActivityDate="2019-09-08T20:03:06.970" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12275" PostTypeId="2" ParentId="12265" CreationDate="2019-09-08T19:38:35.367" Score="2" Body="&lt;p&gt;Incorrect head alignment, dirty saving head, &quot;dry&quot; solder joints, oxide deposits on the head(s) over the years. Many things can have gone wrong over the years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;People usually prefer opening the Spectrum up to clean the heads, as many do not trust cleaning tapes. I would try to align and clean the tape deck heads as a first effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that does not work out, it might be a (slightly) loose cable, and it will involve opening the computer and inspecting it.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2019-09-09T11:07:42.613" LastActivityDate="2019-09-09T11:07:42.613" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12276" PostTypeId="2" ParentId="12081" CreationDate="2019-09-08T20:11:34.997" Score="8" Body="&lt;p&gt;&lt;strong&gt;TLDR:&lt;/strong&gt; TECO uses single-character commands. When extending TECO to&#xA;add registers to store numeric values, there was a limited set of&#xA;unused characters left for the commands associated with this&#xA;functionality. &lt;code&gt;q&lt;/code&gt; was chosen as one of these command characters&#xA;because it could serve as a mnemonic for &quot;quantity.&quot; This led to the&#xA;numeric registers being called &quot;Q-registers&quot; and, though an&#xA;unfortunate misunderstanding, eventually this was applied to the&#xA;completely separate set (albeit sharing the same names) of text-valued&#xA;registers as well.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12096/7208&quot;&gt;dirkt's answer&lt;/a&gt; gives us the paper describing the timeline of&#xA;how registers storing text and numeric values came about: &lt;a href=&quot;http://tenex.opost.com/anhc-31-4-anec.pdf&quot; rel=&quot;noreferrer&quot;&gt;&quot;The&#xA;Beginnings of TECO&quot;&lt;/a&gt; by the original author of TECO, Dan&#xA;Murphy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On page 113 (PDF page 4), in the section &quot;TECO becomes a programming&#xA;language,&quot; Murphy describes the appearance of storage registers:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By late 1962, TECO had about the level of capabilities that simple&#xA;  editors would have for years to come, but TECO’s development didn’t&#xA;  stop there....&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;I added the concept of text variables—that is, a variable that would&#xA;  hold an arbitrary section of text. The command to move a range of&#xA;  text into a text variable was &lt;code&gt;x&lt;/code&gt;. &lt;em&gt;(I was running low on unused&#xA;  letters by then.)&lt;/em&gt; [emph. added] ...&lt;code&gt;g&lt;/code&gt; (get) was used to copy the&#xA;  contents of a text variable into the main buffer at the editing&#xA;  point.... Despite the lack of a mnemonic association for &lt;code&gt;x&lt;/code&gt;, it&#xA;  quickly came to seem natural, almost intuitive. To &lt;code&gt;x&lt;/code&gt; something&#xA;  became as easily spoken and understood by TECO users as &quot;store&quot;&#xA;  would have been.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;He goes on to discuss a separate set of registers for numeric values,&#xA;sharing the same names:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Integer variables were also added around this time, again from the&#xA;  single-letter set a–z, 0–9. &lt;code&gt;u&lt;/code&gt; (use) would store its argument into&#xA;  the variable, and &lt;code&gt;q&lt;/code&gt; (quantity) would stand as the stored value in&#xA;  an expression. The same variable name could have both a text and&#xA;  numeric value; the command determined which was being referenced.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&quot;Q-register&quot; was a natural name for the registers retrieved by the &lt;code&gt;q&lt;/code&gt;&#xA;command. The name &quot;Q-register&quot; had been codified by 1965: Peter&#xA;Samson, in &lt;a href=&quot;ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-081.pdf&quot; rel=&quot;noreferrer&quot;&gt;AIM-81 &quot;PDP-6 TECO&quot;&lt;/a&gt; (July 1965) writes (p.2):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There are three kinds of storage areas within TECO: (1) the&#xA;  &lt;em&gt;buffer&lt;/em&gt;; (2) the 36 &lt;em&gt;Q-registers&lt;/em&gt;; designated 1,...9, A,B,...Z; (3)&#xA;  the &lt;em&gt;command string&lt;/em&gt; area....&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Each Q-register may: (a) be undefined; (b) contain a positive or&#xA;  negative integer; (c) contain a character string.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...the Q-registers are locations for remembering quantities, or&#xA;  strings of text, for later use;...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, Samson is clearly confused here about the nature of the&#xA;registers, stating that there are only 36 registers holding either an&#xA;integer or textual value, whereas there are actually 72 registers, 36&#xA;holding integers and another 36—sharing the same names—holding&#xA;textual values. Thus he unfortunately applies the term &quot;Q-register&quot;&#xA;not only to the registers retrieved with &lt;code&gt;q&lt;/code&gt; but also the other set&#xA;retrieved with &lt;code&gt;g&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite changes in terminology, no version of TECO I'm aware of has&#xA;ever combined the two register sets into one, but always maintained&#xA;numeric and textual values as separate registers. The Standard TECO&#xA;&lt;a href=&quot;https://github.com/blakemcbride/TECOC/blob/master/doc/teco-manual.txt#L1886&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;User's Guide and Language Reference Manual&lt;/em&gt;&lt;/a&gt; (May, 1985,&#xA;describing TECO-11 version 40, TECO-10 version 3 and TECO-8 version 7)&#xA;correctly describes the split, though using Samson's terminology of&#xA;&quot;Q-register&quot; to refer to both the text and integer registers and&#xA;instead giving each &quot;register&quot; the ability to store two values:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;3.3.2 Q-registers&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;TECO provides data storage registers, called  Q-registers,  which&#xA;  may  be  used  to  store  single  integers and/or ASCII character&#xA;  strings.  Each Q-register is divided into two storage areas.   In&#xA;  its  numeric  storage  area, each Q-register can store one signed&#xA;  integer.  In its text storage area, each Q-register can store  an&#xA;  ASCII  character  string  (which  can  be any text, including the&#xA;  important case of a TECO command string).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, to summarize, the numeric registers were reasonably referred to as&#xA;&quot;Q-registers&quot; because they were retrieved with the &lt;code&gt;q&lt;/code&gt; command, and a&#xA;misunderstanding about the nature of the registers caused a separate&#xA;set of registers retrieved by the &lt;code&gt;g&lt;/code&gt; command also to be referred to&#xA;as &quot;Q-registers.&quot; This misunderstanding was probably due to both sets&#xA;of registers sharing the same (single-character) names.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-09-08T20:11:34.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12277" PostTypeId="2" ParentId="5341" CreationDate="2019-09-09T00:39:11.310" Score="6" Body="&lt;p&gt;Cool thread! I thought of something I could contribute, an ed session captured just now, which as I came up with it, reminded me how &lt;em&gt;not bad&lt;/em&gt; ed is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ ed hello.c&#xA;hello.c: No such file or directory&#xA;a&#xA;#include &amp;lt;stdio.h&amp;gt;&#xA;int main() {&#xA;  printf(&quot;hello, world!\n&quot;);&#xA;  return 0;&#xA;}&#xA;.&#xA;w&#xA;75&#xA;q&#xA;$ cc -o hello hello.c&#xA;$ ./hello&#xA;hello, world!&#xA;$ &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;okay, so that could have been done more easily with cat &gt; hello.c, but now let's edit the file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ ed hello.c&#xA;75&#xA;1&#xA;#include &amp;lt;stdio.h&amp;gt;&#xA;&#xA;int main() {&#xA;&#xA;  printf(&quot;hello, world!\n&quot;);&#xA;d&#xA;i&#xA;  printf(&quot;hello again, world!\n&quot;);&#xA;.&#xA;w&#xA;81&#xA;q&#xA;$ !cc&#xA;cc -o hello hello.c&#xA;$ ./hello&#xA;hello again, world!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;that's pretty cool, IMO. Doable over a hard tty with no cursor movement.&lt;/p&gt;&#xA;" OwnerUserId="590" LastActivityDate="2019-09-09T00:39:11.310" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12278" PostTypeId="1" AcceptedAnswerId="12279" CreationDate="2019-09-09T03:44:21.203" Score="9" ViewCount="1891" Body="&lt;p&gt;LISP is generally considered an interpreted language, but compilers&#xA;have been made for it. What was the first compiler?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be clear, this is about compilers that compile LISP code stored for interpretation (whether as S-expressions, ASTs or some other internal form) to machine code, such that it then runs faster than the interpreted form did. It's not about &quot;dumpers&quot; that simply remove a parsing step or other such mechanisms.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-21T05:59:06.783" LastActivityDate="2019-09-21T05:59:06.783" Title="What was the first LISP compiler?" Tags="&lt;history&gt;&lt;compilers&gt;&lt;lisp&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12279" PostTypeId="2" ParentId="12278" CreationDate="2019-09-09T03:44:21.203" Score="21" Body="&lt;p&gt;&lt;strong&gt;The first LISP compiler was implemented very early in the life of&#xA;the first LISP, &lt;a href=&quot;http://www.softwarepreservation.org/projects/LISP/lisp15_family/&quot; rel=&quot;noreferrer&quot;&gt;LISP I for the IBM 704&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;The LISP I Compiler&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;http://bitsavers.org/pdf/mit/rle_lisp/LISP_I_Programmers_Manual_Mar60.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;LISP I Programmer's Manual&lt;/em&gt;&lt;/a&gt; (March 1, 1960)&#xA;section 4.2, &quot;Definitions of Functions in LISP&quot;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In Chapter 2 functions are connected to their names only through the&#xA;  use of the form LABEL. In the current LISP system, there are two&#xA;  further ways a function can be defined:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The first of these relates to functions defined in the system by&#xA;  machine-language subroutines. Such a subroutine for a function may&#xA;  be already available as part of the LISP system itself, in which&#xA;  case it appears among the functions given in Section 9, or it may&#xA;  have been produced by the LISP compiler.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Section 4.6, &quot;The Compiler,&quot; describes its operation in detail:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The LISP compiler is itself a pseudo-funciton which is available to&#xA;  the APPLY operator. The compiler is called in by the LISP function,&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;                      &lt;em&gt;comdef&lt;/em&gt;[x],&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;where x is a list of names of the functions to be compiled. Each&#xA;  function on the list will be compiled into a binary machine&#xA;  program....&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The compiler runs in several stages: producing a (LISP) list of&#xA;assembly instructions, a two-pass assembly of this list to binary&#xA;code, and then binding the name in the system so it calls the&#xA;machine-language code rather than the original S-expression. The&#xA;assembly code list looks like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(( ,LXD,0,4),( ,TXI,G0007,4,-1),( ,TRA,*+5),(G0008,BSS,0),...)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This appears also to be the first use of something like&#xA;&lt;a href=&quot;https://stackoverflow.com/q/30108137/107294&quot;&gt;&lt;code&gt;gensym&lt;/code&gt;&lt;/a&gt;: &quot;In this example, the objects beginning with G are&#xA;atomic symbols generated for use within the compiler.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Linking&quot; was done at compile time, so one had to be careful of order&#xA;when compiling functions in separate &lt;code&gt;comdef&lt;/code&gt;s, though circular&#xA;references were fine if done within a single compile run:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If a function f uses a function g as a subfuction, then g should be&#xA;  included in a &lt;em&gt;comdef&lt;/em&gt; which comes before the &lt;em&gt;comdef&lt;/em&gt; involving f&#xA;  &lt;em&gt;except&lt;/em&gt; in the following special case: if a closed circle of&#xA;  function usage occurs, e.g.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;                      f₁ uses f₂&lt;br&gt;&#xA;                        f₂ uses f₃&lt;br&gt;&#xA;                        .&lt;br&gt;&#xA;                        .&lt;br&gt;&#xA;                        .&lt;br&gt;&#xA;                        fₙ uses f₁,  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;then all of the functions in this circle must be compiled in the&#xA;  same &lt;em&gt;comdef&lt;/em&gt;. thus the functions listed in a given &lt;em&gt;comdef&lt;/em&gt; should&#xA;  be unrelated or related in this circular sense.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;The LISP 1.5 Compiler&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The compiler was actively maintained and extended for at least several&#xA;years. &lt;a href=&quot;ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-039.pdf&quot; rel=&quot;noreferrer&quot;&gt;AIM-039&lt;/a&gt;, &quot;Artificial Intelligence Project--RLE and MIT&#xA;Computation Center Memo 39--The New Compiler,&quot; by T. Hart and M. Levin&#xA;has no date, but from its &lt;a href=&quot;http://publications.csail.mit.edu/ai/browse/0000browse.shtml&quot; rel=&quot;noreferrer&quot;&gt;sequence in the AIM list&lt;/a&gt; it&#xA;appears to have been written sometime between January 1962 (AIM-31)&#xA;and October 1962 (AIM-46). By this point the compiler had become&#xA;self-hosting:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This memo introduces the brand new LISP 1.5 Compiler designed and&#xA;  programmed by Tim Hart and Mike Leven. It is written entirely in&#xA;  LISP and is the first compiler that has ever compiled itself by&#xA;  being executed interpretively.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The purpose of the LISP Compiler is to replace S-expression&#xA;  definitions of functions with efficient machine language&#xA;  subroutines. A subroutine can be expected to run about 40 times as&#xA;  fast as the interpreter can execute the same function from its&#xA;  S-expression definition. Subroutines typically take 70-80 per cent&#xA;  of the storage required by their corresponding S-expressions.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The compiler as it exists on the standard compiler tape is a machine&#xA;  language program that was obtained by having the S-expression&#xA;  definition of the compiler work on itself through the interpreter.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The compiler is designed so that compiled functions and interpretal&#xA;  [sic] functions can be intermixed freely. Suitable declarations&#xA;  allow free variables to be transmitted between the compiled&#xA;  functions and the interpreter.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There were some interesting limitations to the compiler, perhaps for&#xA;performance reasons. For example, checks for the existence of free&#xA;variables used by the compiled functions seem to have been left out.&#xA;From section &quot;Free Variables&quot;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When a variable is used free, it must have been bound by a higher&#xA;  level function. If a program is being run interpretively, and a free&#xA;  variable is used without having been bound on a higher level, error&#xA;  diagnostic *A  8* will occur.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If the program is being run compiled, the diagnostic may not occur,&#xA;  and the variable may have value NIL.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;em&gt;All free variables in compiled programs must be declared SPECIAL or&#xA;  COMMON.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt; &lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-09T04:14:48.327" LastActivityDate="2019-09-09T04:14:48.327" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12280" PostTypeId="2" ParentId="12270" CreationDate="2019-09-09T09:16:01.837" Score="4" Body="&lt;p&gt;Starting with the working assumption that it's a variant of the 34-pin Shugart interface is a good start for reverse-engineering the connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every even-numbered pin in the &lt;a href=&quot;https://old.pinouts.ru/HD/InternalDisk_pinout.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;Shugart pinout&lt;/a&gt; (and the PC variant) is grounded. You can use a multimeter to test for continuity between the pins of the Centronics connector, and see if every other pin along the connector are electrically connected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are able to open the computer, it would be useful to be able to trace the other pins back to the ICs that are connected to them. The part number of the chip could give you some information on the function of those pins. As an example, if you find some pins are driven by a &lt;a href=&quot;https://www.futurlec.com/74/IC7438.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;7438&lt;/a&gt; chip, the fact that this is a chip with &lt;a href=&quot;https://en.wikipedia.org/wiki/Open_collector&quot; rel=&quot;nofollow noreferrer&quot;&gt;open collector&lt;/a&gt; outputs would indicate that these are generating outputs to be sent to the floppy drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the computer running, you could issue commands that should operate the floppy drive, and observe the waveforms on the non-ground pins that you believe are outputs. control signals for Shugart floppy drives are active-low, so you should see the voltage drop to zero when you start trying to access the non-existent drive, and return high if/when the computer times out. One would expect to see this behaviour on the Drive Select lines (e.g. /DS0, pin 10), and on the /MOTOR-ON line (pin 16). There may also be activity on the /STEP (pin 20) and /DIRECTION (pin 18) lines as the floppy controller tries to step the drive's read/write heads back to track 0. (The controller expects to be told when it's there by the floppy drive, by an input signal on pin 26, and will continue stepping towards it until it gets there or gives up.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If these tests match up with the 34-pin Shugart pinout, I'd suggest that what &quot;walks like a duck and quacks like a duck&quot; probably is a Shugart floppy interface, and it's worth assembling a cable to try it with an actual floppy drive.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-09-09T09:16:01.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12281" PostTypeId="2" ParentId="12258" CreationDate="2019-09-09T10:59:34.927" Score="3" Body="&lt;p&gt;Certainly not before standards for RAM enumeration (SPD serial presence detect) were introduced (with the SDRAM 168pin form factor). Earlier systems needed the memory check to established what memory was actually installed, and at which addresses (especially since there could even be discontigous configurations with some even earlier, expansion board based schemes...).&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2019-09-09T10:59:34.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12282" PostTypeId="2" ParentId="658" CreationDate="2019-09-09T12:33:44.520" Score="4" Body="&lt;p&gt;&lt;em&gt;(Note: This answer is pretty seriously TLDR, but I needed to work&#xA;through the following analysis of the paper in order to confirm my&#xA;understanding of FLIP; the paper itself is not terribly clear, IMHO.&#xA;If you think that the analysis should be removed, let me know in a&#xA;comment, but I have no better home for this right now.)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first appearance of regular expressions as we know them now&#xA;(&lt;code&gt;[abc].*def&lt;/code&gt; etc.) appears to have been Ken Thompson's implementation&#xA;of them in the QED editor in 1967. In the following I'll call these&#xA;&quot;Thompson regexps.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Daniel G. Bobrow's April 1966 paper &lt;a href=&quot;https://apps.dtic.mil/dtic/tr/fulltext/u2/633242.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Format-directed List Processing&#xA;in LISP&quot;&lt;/a&gt; describes a pattern matching and replacment language&#xA;called &quot;FLIP&quot; that is embedded in LISP using patterns and formats that&#xA;are &quot;greatly generalized versions of the left-half and right-half&#xA;rules of COMIT and SNOBOL.&quot; (FLIP was implemented in LISP 1.5.) While&#xA;the matching and replacement applies to lists of characters, these are&#xA;clearly isomorphic to strings of charcters: &lt;code&gt;&quot;ABC&quot;&lt;/code&gt; is expressed as&#xA;&lt;code&gt;(A B C)&lt;/code&gt; here. However, FLIP can also deal with deeper structure&#xA;within these lists, such as &lt;code&gt;(A (B C) D)&lt;/code&gt;, as we shall see.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike &lt;a href=&quot;http://www.mt-archive.info/MT-1958-Yngve.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;COMIT&lt;/a&gt; or SNOBOL, FLIP is in the following ways very much the&#xA;modern concept of Thompson regexps in modern programming languages:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The pattern matching language is embedded in a general-purpose&#xA;programming language (unlike COMIT or SNOBOL); patterns are&#xA;executed by passing to a &lt;em&gt;match&lt;/em&gt; function the pattern and a target&#xA;list against which to match it.&lt;/li&gt;&#xA;&lt;li&gt;The pattern language is similar (although differing in surface&#xA;syntax) to Thompson regexps, though also offering more powerful&#xA;facilities for subtitution of variables, composition, etc.&#xA;(Substitution of variables and the like is also available via host&#xA;programming language facilities in modern programming languages,&#xA;consider the Python code &lt;code&gt;pat = re.compile('Hello, ' + name)&lt;/code&gt;; FLIP&#xA;also uses the host language to aid in this.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;FLIP patterns are not, however, compiled to a finite-state automaton,&#xA;as Thompson regexps are, in part because they're more general.&#xA;(Arbitrary LISP functions can be included in the pattern matching&#xA;language both to produce pattern fragments and to modify how the&#xA;pattern matches the target.) They can, however, be translated from the&#xA;&quot;external&quot; notation used here to a more efficient internal format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, FLIP patterns are also more general in that they can deal&#xA;with nested lists, matching &lt;em&gt;structures&lt;/em&gt; within them, as mentioned&#xA;above and described in more detail below. (According to the paper,&#xA;&quot;COMIT has lists only to depth 3 and SNOBOL and AXLE deal only with&#xA;linear strings.&quot;)&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;FLIP Description&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The following is my summary of the relevant parts of the paper, as&#xA;best I understand it. The order here is not ideal since I'm closely&#xA;following the paper, which seems to jump around a bit in its&#xA;introduction of various concepts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FLIP uses two functions, &lt;em&gt;match&lt;/em&gt; and &lt;em&gt;construct&lt;/em&gt; to match patterns in&#xA;lists and reconstruct lists based on a format, respectively. Here I'll&#xA;deal only with the former, as it's not clear to me if you were also&#xA;asking about formatting of replacement strings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;match&lt;/em&gt; takes two arguments, a list to be parsed and a pattern to&#xA;match, and returns a parsing of the list with respect to that pattern&#xA;if it matches the pattern. (This parsed representation can later be&#xA;passed to &lt;em&gt;construct&lt;/em&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Basic Constant and Pattern Matching&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The first matching constructs described in the paper are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FLIP    regexp  meaning&#xA;------------------------------------------------------------------&#xA;x       x       match constant element x&#xA;$       .*      match anything, including zero-length sequence&#xA;$n      .{n}    match a segment of length n&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The first example (aligned by me for convenience in reading, and&#xA;equivalant regexp added by me):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Regexp:      .*    .{3}    A   .*      .   B   .*&#xA;Pattern:    ($     $3      A   $       $1  B   $  )&#xA;List:       (A W   X Y Z   A   B C D   E   B   C D)&#xA;Parse:      [A W] [X Y Z] [A] [B D C] [E] [B] [C D]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The next example shows how both variables can be used and sublists can&#xA;be matched. Given a binding of &lt;code&gt;A&lt;/code&gt; to list &lt;code&gt;(X Y Z)&lt;/code&gt; we can match that&#xA;list as a sublist within the list we're parsing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Pattern:    ($         (=A)      $)&#xA;List:       (A X Y Z   (X Y Z)   Q)&#xA;Parse:      [A X Y Z] [(X Y Z)] [Q])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;=&lt;/code&gt; is actually an evaluation operator, so arbitrary LISP expressions&#xA;and functions can be called for the value that will be matched.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;**&lt;/code&gt; operator treats the expression to which it is applied not as&#xA;a sublist but as a segment of the main list. So we can match the&#xA;&lt;code&gt;X Y Z&lt;/code&gt; segment within the main list, rather than the subsequent&#xA;&lt;code&gt;(X Y Z)&lt;/code&gt; sublist, with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Pattern:    ($  (** (=A))  $)&#xA;List:       (A   X Y Z     (X Y Z) Q)&#xA;Parse:      [A] [X Y Z]   [(X Y Z) Q])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;*&lt;/code&gt; operator treats the expression to which it's applied as a&#xA;single item, i.e., the standalone &lt;code&gt;(=A)&lt;/code&gt; in the earlier example is&#xA;really &lt;code&gt;(* (=A))&lt;/code&gt;; the translator inserted &lt;code&gt;*&lt;/code&gt; by default because it's&#xA;a common use case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sublists can also be matched with constants:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Pattern:    ($           ($   F $)   $)&#xA;List:       (A (B C) D   (B E F  )   G)&#xA;Parse:      [A (B C) D] [(B E F  )] [G]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The parse there is actually the &quot;top-level&quot; parsing; parsing of the&#xA;nested pattern is also done, meaning that &lt;code&gt;[B E] [F] []&lt;/code&gt; is also&#xA;somehow in the output parse. (The paper doesn't go into the details of&#xA;the parse representation.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The expressions in the example above produced constants to be matched&#xA;(e.g., &lt;code&gt;=A&lt;/code&gt; matched the constant &lt;code&gt;(X Y Z)&lt;/code&gt;), but it's also possible to&#xA;have expressions produce &lt;em&gt;patterns&lt;/em&gt; to be matched. For this the &lt;code&gt;*&lt;/code&gt;&#xA;and &lt;code&gt;**&lt;/code&gt; operators have corresponding &lt;code&gt;$*&lt;/code&gt; and &lt;code&gt;$**&lt;/code&gt; operators. Thus&#xA;one could set &lt;code&gt;A&lt;/code&gt; to &lt;code&gt;($ F $)&lt;/code&gt; and &lt;code&gt;($ ($* (=A)) $)&lt;/code&gt; would be the same&#xA;pattern as given in the example above.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Alternation and Repetition&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The paper now moves on to the remaining missing bits from the requirements&#xA;in the question: alternation and repetitions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternation is expressed with the &lt;code&gt;EITHER&lt;/code&gt; function which takes a list&#xA;of the alternates to match:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  digit = ( (EITHER (1) (2) (3) (4) (5) (6) (7) (8) (9)) )&#xA;integer = ( (EITHER (=digit) (($** (=digit)) ($** (=integer)))) )&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(I corrected the parens for the definition of &lt;code&gt;integer&lt;/code&gt;; the&#xA;right-hand side appears to be cut off in the paper.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;digit&lt;/code&gt; matches any digit from 1 to 9. (Don't ask why 0 was left out.&#xA;It's just that kind of paper.) &lt;code&gt;integer&lt;/code&gt; matches a single digit or a&#xA;single digit followed by an &lt;code&gt;integer&lt;/code&gt;, i.e. a list of digits of any&#xA;length. Note the use of &lt;code&gt;$**&lt;/code&gt; here to ensure that the value returned&#xA;by &lt;code&gt;(=digit)&lt;/code&gt; or &lt;code&gt;(=integer)&lt;/code&gt; is interpreted as a &lt;em&gt;pattern&lt;/em&gt;, rather&#xA;than a constant list. This would be used in a top-level expression&#xA;just as it is internally, with &lt;code&gt;($** (=integer))&lt;/code&gt; to match a sequence&#xA;of digits within a list.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Repetition is expressed with &lt;code&gt;(REPEAT p)&lt;/code&gt; which matches zero or more&#xA;occurrences of pattern &lt;em&gt;p&lt;/em&gt;, or &lt;code&gt;(REPEAT n p)&lt;/code&gt; which matches &lt;em&gt;n&lt;/em&gt; or&#xA;more occurances of &lt;em&gt;p&lt;/em&gt;. A sequence of patterns &lt;em&gt;p q ...&lt;/em&gt; may be also&#xA;be given in which case &lt;code&gt;REPEAT&lt;/code&gt; matches zero or more (&lt;em&gt;n&lt;/em&gt; or more)&#xA;segments matching that sequence. Examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;((REPEAT $2))&lt;/code&gt; would match a list only if it had an even number of&#xA;items. (Note the lack of &lt;code&gt;$&lt;/code&gt; before and after the &lt;code&gt;(REPEAT $2)&lt;/code&gt;,&#xA;leaving that expression anchored to the beginning and end of the&#xA;list it's attempting to match.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;((REPEAT 1 (=digit)))&lt;/code&gt; would match a list consisting of one or more&#xA;digits, as with &lt;code&gt;(($** (=integer)))&lt;/code&gt; above.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;(REPEAT A $1 B)&lt;/code&gt; would match &lt;code&gt;(A X B  A Y B  A Z B)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Presumably &lt;code&gt;EITHER&lt;/code&gt; and &lt;code&gt;REPEAT&lt;/code&gt; produce parse output with the&#xA;details of the matches in the same way as given in the initial&#xA;Pattern/List/Parse examples; that's not described in this paper.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point Bobrow points out that FLIP can directly express regular&#xA;expressions:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The EITHER and REPEAT subpatterns are similar to the operations of&#xA;  disjunction, &quot;v&quot; and * in the formation of regular expressions. In&#xA;  fact, given the definition of a regular expression, it is very easy&#xA;  to write the FLIP matching pattern which will parse a string if, and&#xA;  only if, it is an example of that regular expression. For example,&#xA;  the pattern&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  (REPEAT (EITHER (A B) ((REPEAT (EITHER (B C) (D E F)) )) ))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;will be equivalent to the regular expression&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  (A B v (B C v D E F) * ) *&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;and will match with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  A B D E F B C B C D E F A B.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h3&gt;Further Notes&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The paper goes on to say that &quot;the operation of the match is a&#xA;sequential, left to right process.&quot; Thus, matching &lt;code&gt;($ C $)&lt;/code&gt; against&#xA;&lt;code&gt;(A B C D C D E)&lt;/code&gt; will result in the parse &lt;code&gt;[A B] [C] [D C D E]&lt;/code&gt;, not&#xA;&lt;code&gt;[A B C D] [C] [D E]&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of this left-to-right process, back-matches are available.&#xA;Each &quot;elementary pattern&quot; is assigned a numerical mark corresponding&#xA;to its position in the total pattern (sort of an automatic version of&#xA;Thompson regexp grouping with &lt;code&gt;\(&lt;/code&gt; and &lt;code&gt;\)&lt;/code&gt;): in &lt;code&gt;($ $2 A $)&lt;/code&gt; mark 2&#xA;references whatever &lt;code&gt;$2&lt;/code&gt; matched and mark 3 references the &lt;code&gt;A&lt;/code&gt; match.&#xA;This can be referenced with a number; e.g., to match two repeated&#xA;items in a list:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Pattern:    ($   $2    $     2     $)&#xA;List:       (A   B C   D E   B C   D)&#xA;Parse:      [A] [B C] [D E] [B C] [D]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Note that the 2 in &lt;code&gt;$2&lt;/code&gt; refers just to two items, and is no relation&#xA;to the later &lt;code&gt;2&lt;/code&gt; referring to the second item in the pattern list. I&#xA;think this example could be better written, but I didn't want to&#xA;change what the paper gave.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Items can be named using the &lt;code&gt;NAME&lt;/code&gt; operator, e.g.&#xA;&lt;code&gt;($ (NAME FOO $2) A $)&lt;/code&gt; will assign to variable &lt;code&gt;FOO&lt;/code&gt; whatever was&#xA;matched by &lt;code&gt;$2&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a lot more functionality and notation for marks, such as&#xA;describing segments of subpatterns, little of which is discussed in&#xA;the paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Particularly powerful is the ability to attach predecates to patterns&#xA;which can take previously matched segments as arguments.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Pattern:    ($3      $3 / (EQUAL (=REVERSE 1)) )&#xA;List:       (A B C   C B A)&#xA;Parse:      [A B C] [C B A]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are also optimizations available because full information about&#xA;the parse is kept. The paper mentions that &lt;code&gt;($1 $ 1 $5 $)&lt;/code&gt;, which&#xA;matches any target list where the first item is repeated at least five&#xA;times before the end of the target list, can involve continuing to try&#xA;matches when there's no possibility of the pattern actually matching.&#xA;Attaching a special failure predeciate to &lt;code&gt;$&lt;/code&gt; can optimize this,&#xA;though the paper doesn't give the details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also a method of doing a reverse (right-to-left) search,&#xA;&lt;code&gt;$R&lt;/code&gt;, which can be convenient in certain situations.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Conclusion&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;There's even more before the paper gets on to the &lt;em&gt;construct&lt;/em&gt; process,&#xA;but I think what we've got to this point makes it pretty clear that&#xA;FLIP is indeed a (particularly powerful) implementation of matching&#xA;that can do everything done with regular expressions in programs as we&#xA;know them today.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-09T15:17:18.303" LastActivityDate="2019-09-09T15:17:18.303" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12283" PostTypeId="1" CreationDate="2019-09-09T12:52:44.707" Score="20" ViewCount="1826" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;This led to the infamous technical note where Apple recommended users facing problems with the Apple III to lift the computer two inches and then drop it, as this would set the circuits back in place.[1]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I couldn't find that technical note in the Apple III Technotes page of apple3.org[2]. Was this really a recommended procedure by Apple or is it just an urban legend?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The earliest reference to this procedure that I can find is page 33 of &quot;The Mac Bathroom Reader&quot; dated 1994:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As a solution, Apple actually recommended lifting the front of the computer six inches off the desktop, then letting go with the hopes that the chips would reseat themselves.[3]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Other people around the Internet remember getting the technical advisory/bulletin and making copies of it,[4][5] suggesting that it really exists. Can anyone locate the document to confirm?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] Torres, G. (2012, May 31). &lt;em&gt;Inside the Apple III.&lt;/em&gt; Retrieved from &lt;a href=&quot;https://web.archive.org/web/20150406155418/http://www.hardwaresecrets.com/article/Inside-the-Apple-III/1563&quot; rel=&quot;noreferrer&quot;&gt;https://web.archive.org/web/20150406155418/http://www.hardwaresecrets.com/article/Inside-the-Apple-III/1563&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] &lt;a href=&quot;http://apple3.org/iiitechnotes.html&quot; rel=&quot;noreferrer&quot;&gt;http://apple3.org/iiitechnotes.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3] Linzmayer, O. (1994). &lt;em&gt;The Mac Bathroom Reader&lt;/em&gt; (ISBN: 0-7821-1531-4). Alameda, CA: SYBEX Inc. Retrieved from &lt;a href=&quot;https://archive.org/details/mac_The_Mac_Bathroom_Reader_1994/page/n43&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/mac_The_Mac_Bathroom_Reader_1994/page/n43&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[4] &quot;Apple issued a tech bulletin that in the case of a malfunctioning Apple III the first thing to do was to pick the unit up 6 inches AND DROP IT! ... I took to carrying a copy of the bulletin with me and showing it to the customer before I started dropping their system.&quot; &lt;a href=&quot;https://www.overclockers.com/forums/showthread.php/669766-Tell-us-your-greatest-story-about-fixing-computers?s=4b3e638d88057292eaf1f7f57562e1f7&amp;amp;p=6790582&amp;amp;viewfull=1#post6790582&quot; rel=&quot;noreferrer&quot;&gt;https://www.overclockers.com/forums/showthread.php/669766-Tell-us-your-greatest-story-about-fixing-computers?s=4b3e638d88057292eaf1f7f57562e1f7&amp;amp;p=6790582&amp;amp;viewfull=1#post6790582&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[5] &quot;I worked at ComputerLand in the Silicon Valley at that time and I remember getting the technical advisory from Apple about this, and how the “approved” method of reseating the chips was to lift the system box about 6″ above a solid desk or table, and let it drop flat to the surface...we made copies of the official Apple notice and gave it to all our customers who brought the units in for service.&quot; &lt;a href=&quot;https://www.technologizer.com/2009/06/14/fifteen-classic-pc-design-mistakes/#comment-14525&quot; rel=&quot;noreferrer&quot;&gt;https://www.technologizer.com/2009/06/14/fifteen-classic-pc-design-mistakes/#comment-14525&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-09-17T18:54:05.837" LastActivityDate="2019-09-21T20:20:43.643" Title="Did Apple really advise customers to lift up and then drop their computers?" Tags="&lt;history&gt;&lt;apple-iii&gt;" AnswerCount="4" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12284" PostTypeId="2" ParentId="9684" CreationDate="2019-09-09T14:30:37.517" Score="7" Body="&lt;p&gt;In 1968 or so the Lawrence Radiation Laboratory, with several hundred terminals and at least four &quot;host&quot; computers (running applications), all communicating via a central PDP-6, decided to move to a distributed networking system with more direct connections between the computers, the PDP-8 terminal concentrators and peripheral systems. This was documented in a technical report by Samuel F. Mendicino, &lt;a href=&quot;http://www.rogerdmoore.ca/PS/OCTOA/OCTO.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;The Lawrence Radiation Laboratory Octopus,&quot;&lt;/a&gt; presented at the Courant Institute of NYU on November 30th or December 1st, 1970, several years before Bob Metcalfe started developing Ethernet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The move towards direct communication between individual machines, rather than having all communications go through the PDP-6, was for reliability and redundancy reasons:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Two major problems with this system became apparent about two years ago. The usefulness of the hosts, the data base, the interactive terminals etc., was totally dependent on the reliability of the central (PDP-6) system. If the central CPU or memory failed (often at times) there was no network at all. If a channel between a host and PDP-6 failed the host was isolated simultaneously from the data base, user terminals, and remote I/O.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Over those two years they built protocols (which they refer to as &quot;sub-networks&quot;) for message routing (used in cases where direct connections between two hosts wanting to communicate were not available), terminal connectivity, file sharing (including files and directories shared between users), and remote peripheral (e.g., printer and card reader) access, and were continuing development further in this direction. The report's summary:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The original centralized LRL Octopus network was abandoned in favor of an almost fully connected distributed network. The network consists of a superimposition of sub-networks, each independent of the other, performing a specific network function.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Whether you consider this a true &quot;LAN&quot; like Etherent depends on your definition of &quot;LAN,&quot; but this was clearly headed in that direction.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-10T03:07:30.740" LastActivityDate="2019-09-10T03:07:30.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12285" PostTypeId="2" ParentId="674" CreationDate="2019-09-09T16:05:07.020" Score="3" Body="&lt;p&gt;&lt;a href=&quot;http://publications.csail.mit.edu/ai/browse/0000browse.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;AIM&lt;/a&gt;-51, &lt;a href=&quot;ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-051.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;METEOR: A LISP Interpreter for String Transformations&amp;quot;&lt;/a&gt; (Daniel G. Bobrow, April 1963), provides a detailed description and complete source code (about 250 lines) for a COMIT interpreter that takes input as LISP S-expressions. It's written for LISP 1.5. There's a probably slightly newer and much more readable (but I think longer and I'm not sure how different) version of the source code on page 259 of &lt;a href=&quot;http://www.softwarepreservation.org/projects/LISP/book/III_LispBook_Apr66.pdf#page=259&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Programming Language Lisp : Its Operation and Applications&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;How useful this is I'm not sure:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Getting LISP 1.5 up and running on an &lt;a href=&quot;http://www.cozx.com/dpitts/ibm7090.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 7090 emulator&lt;/a&gt; (or a &lt;a href=&quot;http://www.frobenius.com/univac.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Univac 1100 emulator&lt;/a&gt;) seems daunting, at best.&lt;/li&gt;&#xA;&lt;li&gt;It might be portable without too much difficulty to LISP 1.5's direct successor, &lt;a href=&quot;https://en.wikipedia.org/wiki/Maclisp&quot; rel=&quot;nofollow noreferrer&quot;&gt;MACLISP&lt;/a&gt;. Maybe. Though you'd still need a (probably easier to handle) PDP-10 emulator. (Or you could try &lt;a href=&quot;https://multicians.org/simulator.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multics&lt;/a&gt;.)&lt;/li&gt;&#xA;&lt;li&gt;Perhaps it could be ported to a more modern LISP, though these tend to be substantially different to LISP 1.5.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All that said, the source itself might provide useful information about the workings of COMIT, particularly for other folks here writing their own COMIT interpreters.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-09T16:19:40.057" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12287" PostTypeId="2" ParentId="9684" CreationDate="2019-09-09T23:57:58.467" Score="8" Body="&lt;p&gt;The way I interpret Bob Metcalfe's words &lt;a href=&quot;https://archive.computerhistory.org/resources/access/text/2013/05/102746650-05-01-acc.pdf&quot; rel=&quot;noreferrer&quot;&gt;in this interview&lt;/a&gt;, the Xerox team used a Data General local area network prior to the work on the Alto, for which Ethernet was invented.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And we started working on this personal computer and I started&#xA;  working on how to network them together. And the predecessor system&#xA;  that we had also built used Nova 800s, a product of Data General. So&#xA;  we had, I think, we had 32 of them all tied together in a local area&#xA;  network. And this was a local area network built by Data General&#xA;  called the MCA, Multi-Processor Communications Adaptor, which was a, I&#xA;  believe, a 16-bit parallel cable that ran from one machine the other&#xA;  and carried data among them at about 1.5 megabits per second.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So that means that Xerox did &lt;em&gt;not&lt;/em&gt; develop the first LAN, at least not in the view of the inventors of Ethernet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With respect to the &quot;got no backing from the company&quot; part of the question, that presumably refers to the whole Alto effort, for which Ethernet was developed.  Xerox made copiers, not computers!&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-09-09T23:57:58.467" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12288" PostTypeId="2" ParentId="12265" CreationDate="2019-09-10T03:39:32.250" Score="0" Body="&lt;p&gt;Silly question but you're pressing Record and Play together, right? Then press any key!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tape head isn't likely to be faulty since the same head records and plays. Recording though, requires the tape to be blank, so an erase head does that. You could try erasing a tape in another tape recorder (ie just record nothing onto it, perhaps stick a mic lead in there with nothing on the other end {this would all be stuff you'd have if you had a Speccy 48, probably not otherwise!}. Use an old stereo system to record nothingness onto a tape.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then try recording onto this newly-blanked tape. Make sure the little holes on the top edge of the tape, where there are little tabs you can break off, are not empty. IE the tabs are still there! Obviously a pre-recorded tape has no tabs to start with. The tabs are write-protect, for tapes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are you trying to save? Saving a program from BASIC, even &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 print &quot;I AM GREAT!&quot;&#xA;20 goto 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would do. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SAVE &quot;IROCK&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to save it. Will be a short one! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then... I don't need to tell you how to load something! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's really confusing. The border gently flashing red / cyan just means &quot;not a peep on the tape, not a sausage&quot;. The tape is moving, when you save, and when you load? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the record and play head is just one head, this is very confusing! You will check the tabs at the top, won't you? Record button shouldn't even go down if they're missing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A really weird possibility would be something has gone in the record circuit. IE obscure hardware problem. &lt;/p&gt;&#xA;" OwnerUserId="14475" LastEditorUserId="7208" LastEditDate="2019-09-10T04:59:21.720" LastActivityDate="2019-09-10T04:59:21.720" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12289" PostTypeId="1" AcceptedAnswerId="12290" CreationDate="2019-09-11T06:34:16.890" Score="2" ViewCount="618" Body="&lt;p&gt;Just picked up my first retro PC the other day. Unfortunately, it's lacking a PSU so I need to find one. What kind of a PSU (in terms of wattage) do I need to comfortably run an AMD 386DX-40 system? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually I aim to install an ATX power supply and use ATX to AT converter cable. Would a power rating required for an ATX supply differ from AT one? Perhaps, due to different max load distribution across various voltages than AT PSUs were designed for?&lt;/p&gt;&#xA;" OwnerUserId="10663" LastActivityDate="2019-09-15T05:56:43.227" Title="How much PSU power do I need for an AMD 386DX-40 computer?" Tags="&lt;power&gt;&lt;80386&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12290" PostTypeId="2" ParentId="12289" CreationDate="2019-09-11T07:34:28.487" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What kind of a PSU (in terms of wattage) do I need to comfortably run an AMD 386DX-40 system?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Unlike with today's systems, the CPU played only a minor role in power consumption back then. Over all configuration, like number and size of disks as well as size of RAM was way more important. Hard to give any number without more information - like if it's just the board, or a whole system, or what configuration it is and what peripherals are used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an over all size it may be helpful to look at of the shelf systems of back then. Typical PSU sizes in that area ranged between 80 and 200 Watt. Examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DELL 333P (Slimline case), 386/486 @ 33 MHz of 1991 &lt;strong&gt;85 Watt&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;DELL 333D (Standard Desktop size case), 386 @ 25 MHz of 1991: &lt;strong&gt;177 Watt&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Compaq Proliant 1000 (Server), 486DX2-66 of 1994: &lt;strong&gt;300 Watt&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;DELL Power Edge (Server), Pentium/90 of 1994: &lt;strong&gt;300 Watt&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;IBM PC Server, 486DX2-66 of 1994: &lt;strong&gt;300 Watt&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I had to search hard to find some (mainstream) top end server with more than 300 Watt (*1):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HP NetFile Server 486/LF, 486DX2/66 of 1994: &lt;strong&gt;350 Watt&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;IBM PS/2 Server 95 Array 566, Pentium 66 of 1994: &lt;strong&gt;400 Watt&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All servers one being a monstrous huge machines in the 15-20 kUSD range with humongous RAM sizes (like 64 MiB) and disk arrays sucking quitesome power..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for an average 386 system of that time any 150-200 Watt PSU is more than adequate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Best source to see what's good/recomended/needed would be a peek into the boards manual.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Eventually I aim to install an ATX power supply and use ATX to AT converter cable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Should work fine. Don't forget to bridge &lt;code&gt;Power_On&lt;/code&gt; (Pin#16) to &lt;code&gt;Gnd&lt;/code&gt; (#15 or #17) using a wire or some ~100 Ohm resistor.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Would a power rating required for an ATX supply differ from AT one?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Power ratings always differ in the way they are generated. While manufacturers of larger  models usually use the 12V wattage, smaller are often advertized by summing up all rails. As usual, a look into a detailed data sheet and/or manual will clear things.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Perhaps, due to different max load distribution across various voltages than AT PSUs were designed for?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's true, but then again, to be sure you need to check for each (used) voltage. The board itself almost entirely relies on +5V and should stay well below 10A (50 Watt) including reasonable memory. More if there's a lot of I/O cards with much processing and/or RAM. +12V is mainly used for drives and supplied with their own connectors. It may be more important to check if that PSU can work &lt;em&gt;without&lt;/em&gt; load on 3.3V. If not, some dummy load (right sized resistor) has to be applied to burn away some juice. A &lt;a href=&quot;https://eu.mouser.com/ProductDetail/Vishay-Dale/CP00101R000KE14?qs=sGAEpiMZZMtbXrIkmrvidDnVsdYYat5oDWqPGutazu4%3D&quot; rel=&quot;nofollow noreferrer&quot;&gt;10 Watt 1 Ohm&lt;/a&gt; may already do the trick - again, to be sure &lt;em&gt;check the PSU-manual&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In general, chances are good to use some modern (low end) PSU - if you can't find an AT one somewhere&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1  but I'm pretty sure others will find some - everything man can imagine has been done to PCs.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-11T08:51:40.590" LastActivityDate="2019-09-11T08:51:40.590" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12291" PostTypeId="1" CreationDate="2019-09-11T10:13:04.477" Score="25" ViewCount="4090" Body="&lt;p&gt;The &lt;code&gt;BRK&lt;/code&gt; instruction on the MOS 6502 seems to be one of the more&#xA;ill-documented features of the processor. The &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6500_mpu_preliminary_may_1976.pdf&quot; rel=&quot;noreferrer&quot;&gt;1976 preliminary data&#xA;sheet from MOS&lt;/a&gt; indicates that it's a 1-byte instruction using&#xA;the &amp;quot;implied&amp;quot; addressing mode (i.e., it has no operands), as does the&#xA;the &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6500_mpu_mar_1980.pdf&quot; rel=&quot;noreferrer&quot;&gt;1980 CSG data sheet&lt;/a&gt;.¹ (Edit: the &lt;a href=&quot;https://archive.org/details/6500-50a_mcs6500pgmmanjan76&quot; rel=&quot;noreferrer&quot;&gt;MCS6500 Microcomputer&#xA;Family Programminng Manual&lt;/a&gt; does describe the details and&#xA;intention of the &lt;code&gt;BRK&lt;/code&gt; instruction in §9.11  pp. 144-146.)&lt;/p&gt;&#xA;&lt;p&gt;However, unlike an IRQ interrupting any other 1-byte instruction, the&#xA;program counter pushed on to the stack when a &lt;code&gt;BRK&lt;/code&gt; is executed does&#xA;not point to the byte immediately after the opcode but instead to the&#xA;&lt;em&gt;second&lt;/em&gt; byte after the opcode. (This is mentioned nowhere in those&#xA;two data sheets.²)&lt;/p&gt;&#xA;&lt;p&gt;Given the lack of documentation about this, I'm guessing that this was&#xA;unintentional³ (though evidence otherwise is welcome!), because it&#xA;wastes the byte after the &lt;code&gt;BRK&lt;/code&gt; if the interrupt handler does an &lt;code&gt;RTI&lt;/code&gt;&#xA;to the address pushed by the &lt;code&gt;BRK&lt;/code&gt; after handling it. (If there was no&#xA;&lt;code&gt;RTI&lt;/code&gt;, the byte need not be wasted: control would never flow past the&#xA;&lt;code&gt;BRK&lt;/code&gt; and so another routine could have an entry point immediately&#xA;after it. This was the case on, e.g., the Apple II, where a BRK would&#xA;stop whatever program was executing and enter the monitor.⁴)&lt;/p&gt;&#xA;&lt;p&gt;I'm looking for examples in &amp;quot;real-world&amp;quot; code (as opposed to&#xA;demonstration or example code) of how this &amp;quot;spare byte&amp;quot; was used in&#xA;systems with IRQ routines that did an &lt;code&gt;RTI&lt;/code&gt; to return to the address&#xA;pushed by the &lt;code&gt;BRK&lt;/code&gt; instruction.⁵ This could be use by the IRQ routine&#xA;itself (as a parameter, or similar, e.g. as Woz sugested in his&#xA;&lt;a href=&quot;http://amigan.1emu.net/kolsen/programming/sweet16.html&quot; rel=&quot;noreferrer&quot;&gt;November 1977 &lt;em&gt;BYTE&lt;/em&gt; article on Sweet 16&lt;/a&gt;) or something else.&lt;/p&gt;&#xA;&lt;p&gt;Ideally the examples would be from widely distributed software for&#xA;6502-based general purpose computers. Again, I'm not too interested in&#xA;demo code that shows how it &lt;em&gt;could&lt;/em&gt; be used in a theoretical&#xA;real-world program. But if you feel you have an example that has&#xA;something useful to offer beyond the limited technical details of&#xA;&lt;em&gt;how&lt;/em&gt; to implement this, feel free post an answer about it.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;¹&lt;sub&gt;Both have a note &amp;quot;See Fig. 1&amp;quot; beside the instruction in the&#xA;instruction set/opcde table, but none of the figures in either&#xA;document are numbered, and none seem to be relevant. I welcome&#xA;clarification of this.&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;²&lt;sub&gt;The ignored byte after the &lt;code&gt;BRK&lt;/code&gt; is kind of implied by the cycle&#xA;breakdown of the &lt;code&gt;BRK&lt;/code&gt; instruction on page A-11 of the 1976 &lt;a href=&quot;http://archive.6502.org/books/mcs6500_family_hardware_manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;MCS6500&#xA;Microcomputer Family Hardware Manual&lt;/a&gt;, where after the T0&#xA;cycle reads the opcode the subsequent T1 cycle puts on the address bus&#xA;&amp;quot;PC + 1 (PC on hardware interrupt)&amp;quot; before pushing the PC on to the&#xA;stack in T2 and T3. But documenting it as a one-byte instruction or&#xA;opcode with no operands, despite the byte after it being skipped,&#xA;persists even today in the 2018 &lt;a href=&quot;http://archive.6502.org/datasheets/wdc_w65c02s_oct_8_2018.pdf&quot; rel=&quot;noreferrer&quot;&gt;WDC W65C02S data sheet&lt;/a&gt;.&#xA;&lt;br/&gt;&#xA;     &lt;a href=&quot;http://forum.6502.org/viewtopic.php?t=1917#p15845&quot; rel=&quot;noreferrer&quot;&gt;This post on forum.6502.org&lt;/a&gt; does say, &amp;quot;WDC&#xA;describes BRK as '...a 2 byte instruction. The NMOS and CMOS devices&#xA;simply skips [sic] the second byte (i.e. doesn’t care about the second&#xA;byte) by incrementing the program counter twice.'&amp;quot; However, it doesn't&#xA;give a source for that quote.&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;³&lt;sub&gt;By &amp;quot;unintentional&amp;quot; I mean that having that unused byte after the&#xA;&lt;code&gt;BRK&lt;/code&gt; instruction was not a design goal. In this context, &amp;quot;we've got&#xA;an unused byte there but it isn't a problem and that lets us save&#xA;transistors (or whatever) elsewhere&amp;quot; does not count as&#xA;&amp;quot;intentional.&amp;quot;&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;⁴&lt;sub&gt;See the &lt;code&gt;IRQ&lt;/code&gt; routine at &lt;code&gt;$FA86&lt;/code&gt; in the BIOS listing on page 81&#xA;(PDF page 84) of the &lt;a href=&quot;https://archive.org/details/bitsavers_appleapple_10059029/page/n83&quot; rel=&quot;noreferrer&quot;&gt;Apple II Reference Manual&lt;/a&gt;.&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;⁵&lt;sub&gt;An IRQ routine could use bit 4 of the program status register&#xA;value pushed on to the stack to determine it had been invoked by a&#xA;&lt;code&gt;BRK&lt;/code&gt; and then use the PC pushed on to the stack to find the spare&#xA;byte. &lt;a href=&quot;http://wilsonminesco.com/6502interrupts/#2.2&quot; rel=&quot;noreferrer&quot;&gt;Wilson Mines&lt;/a&gt; gives details on how to do this.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-13T09:02:42.883" Title="What are uses of the byte after BRK instruction on 6502?" Tags="&lt;6502&gt;&lt;interrupt&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12292" PostTypeId="1" AcceptedAnswerId="12295" CreationDate="2019-09-11T10:43:25.600" Score="1" ViewCount="436" Body="&lt;p&gt;I'd like to find some documentation for this mainboard I just picked up for my very first retro computer, but I don't see any brand or model markings whatsoever. Does anyone have any tips?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Vqzwf.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Vqzwf.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/41JyU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/41JyU.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/uTdPp.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uTdPp.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xfgZX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xfgZX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P. S. I know I need to replace this Ni-Cd rechargeable battery before it leaks and I already ordered a replacement, but the battery is in remarkable shape for its age (at least it's not leaking yet!), so I hope it will hold for a couple weeks until the replacement arrives.&lt;/p&gt;&#xA;" OwnerUserId="10663" LastActivityDate="2019-09-20T18:34:33.840" Title="Can you help me identify this AMD 386-DX40 motherboard?" Tags="&lt;identify-this-computer&gt;&lt;motherboard&gt;" AnswerCount="1" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="12293" PostTypeId="2" ParentId="12291" CreationDate="2019-09-11T11:16:01.750" Score="20" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The BRK instruction on the MOS 6502 seems to be one of the more ill-documented features of the processor. [...]&#xA;  Given the lack of documentation about this&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It is documented quite well and in depth in the corresponding &lt;em&gt;MCS 6500 Microcomputer Family Programming Manual&lt;/em&gt; of January 1976 (and all follow ups). Check page 144 and after for description, reasoning and examples.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(This is mentioned nowhere in those two data sheets.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Data sheets aren't meant as full documentation, but rather giving an overview.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;However, unlike an IRQ interrupting any other 1-byte instruction, &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This might be a first misunderstanding. &lt;code&gt;BRK&lt;/code&gt; isn't a 1-byte instruction interrupted by &lt;code&gt;IRQ&lt;/code&gt;, but rather an instruction working like &lt;code&gt;IRQ&lt;/code&gt;. The difference is in cause and effect - here the way the instruction works. With an external interrupt it gets handled &lt;em&gt;before&lt;/em&gt; the PC is advanced on the next instruction (technically by inserting a &lt;code&gt;BRK&lt;/code&gt;). With a BRK the instruction gets fetched and processed (over two cycles) before the PC is pushed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still this doesn't make it a two byte instruction, it stays a one byte instruction with the workings of advancing PC by two before pushing. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm guessing that this was unintentional (though evidence otherwise is welcome!),&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'd say it was quite intentional. With the 6500 being designed as an extremely low cost CPU, it was what could be achieved with a bare minimum in additional circuitry. So instead of setting up a separate vector the IRQ vector was used - in fact, BRK processing is even used to make IRQ/NMI/RES happen. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The increment by two is part of this too, as that's the default behaviour of 6502 instructions, as all take two cycles at least. Single byte instructions need to explicitly disable the increment during the second cycle. Since BRK isn't a normal instruction, intended to be executed in a regular sequence and situation, adding that correction wouldn't make any difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BRK was never intended to be more than a debugging aid. A use that never comes up in regular use, thus its rather cumbersome detection and the need to readjust PC as well did not do much harm. In fact, being a debugging tool, readjusting the PC to the original instruction address and replacing the instruction overwritten (*1) had to be done anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's all about offering an in-place debugging-aid with the least effort possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar the use of x'00' as opcode as any (back then) (E)PROM can always be patched to contain all zero in a location, enabling debugging of PROM code. Similar is forcing the data bus to zero, to detect a special case during problem analysis,  an easy task, not requiring a lot of hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this has to be seen interlinked.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but it does allow you to do something interesting, which is to use the byte after the BRK as a parameter to the IRQ routine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, that has been done many times. After all, and at first sight, it seems like a really nifty &lt;em&gt;&lt;strong&gt;S&lt;/strong&gt;uper&lt;strong&gt;V&lt;/strong&gt;isor &lt;strong&gt;C&lt;/strong&gt;all&lt;/em&gt; type of instruction. Looking closely it does involve quite some address juggling. So much so that more performance-aware developers usually preferred to use &lt;code&gt;JSR&lt;/code&gt; calls instead, as their return address can be used directly with less stack mangling as well (*2).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm not terribly interested in examples from embedded systems&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure, valid point - still, to understand why things have been made the way they are, it's always a good idea to keep in mind that the 6502 wasn't developed with a general purpose computer in mind, but embedded use. The whole point was to make a very cheap CPU and support it with (for that time) quite complex and versatile I/O companion chips integrating several previous separate components into one (e.g. 653x type).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Or emulating it and advancing the PC to after the whole instruction &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - See the &lt;a href=&quot;http://www.easy68k.com/paulrsm/6502/PDOS8TRM.HTM#4&quot; rel=&quot;nofollow noreferrer&quot;&gt;ProDOS MLI&lt;/a&gt; as main example, but IIRC Woz used it already in 1977 to call &lt;a href=&quot;http://amigan.1emu.net/kolsen/programming/sweet16.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sweet-16&lt;/a&gt; sequences.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-13T09:02:42.883" LastActivityDate="2019-09-13T09:02:42.883" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12294" PostTypeId="2" ParentId="12291" CreationDate="2019-09-11T11:23:19.777" Score="25" Body="&lt;p&gt;On the BBC Micro, the byte after the BRK instruction held the error number, followed by the error message string terminated with 0x0D. CALLing the address of the BRK instruction would cause an error to be raised.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update with example, as a runnable BBC BASIC program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 DIM b% 32&#xA;20 ?b%=0: REM BRK&#xA;30 ?(b%+1)=42: REM Error number 42&#xA;40 $(b%+2)=&quot;StackExchange&quot;&#xA;50 CALL b%&#xA;&amp;gt;RUN&#xA;&#xA;StackExchange at line 50&#xA;&amp;gt;PRINT ERR&#xA;        42&#xA;&amp;gt;_&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="14950" LastEditorUserId="14950" LastEditDate="2019-09-11T13:12:54.537" LastActivityDate="2019-09-11T13:12:54.537" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="12295" PostTypeId="2" ParentId="12292" CreationDate="2019-09-11T11:39:40.620" Score="6" Body="&lt;p&gt;Not a full identification, but a hint from the chipset:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's an Acer (ALI - Acer Lab Inc) &lt;a href=&quot;https://en.wikipedia.org/wiki/ALi_Corporation#80X86_Chipsets&quot; rel=&quot;nofollow noreferrer&quot;&gt;M1429&lt;/a&gt;, a somewhat late (1993+) ISA/VLB chipset for 386 and 486 systems. South Bridge is M1431 of the same series. Sometimes called Aladdin II as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This chipset was &lt;strong&gt;extremely&lt;/strong&gt; common for low-end 386/486 consumer boards with VLB, back then, and Acer sold them to every other shack in Taiwan producing mainboards. Similarly, the BIOS serial is for a generic BIOS for this chipset. Without taking out the mainboard and looking for markings on the edges, front or back, there is little chance to pin it down. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, it seems as vanilla as it gets.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-20T18:34:33.840" LastActivityDate="2019-09-20T18:34:33.840" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12296" PostTypeId="2" ParentId="12291" CreationDate="2019-09-11T19:36:29.463" Score="12" Body="&lt;p&gt;The SOS operating system written for the Apple /// used &lt;code&gt;BRK&lt;/code&gt; for operating system calls.  The byte following the &lt;code&gt;BRK&lt;/code&gt; holds the OS function number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the two bytes after that are also used as inline data, so you can argue that it's not a true example of &lt;code&gt;BRK&lt;/code&gt; with a signature byte.  Still, it's an example of &quot;real world&quot; code using inline data after a &lt;code&gt;BRK&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the &lt;code&gt;RTI&lt;/code&gt;: looking at &lt;a href=&quot;http://www.apple3.org/Documents/SourceCode/Apple3_SOS_1.3.pdf&quot; rel=&quot;noreferrer&quot;&gt;this disassembly&lt;/a&gt;, page 112 in the PDF, &lt;code&gt;IRQ.RCVR&lt;/code&gt; appears to be the &lt;code&gt;BRK&lt;/code&gt; entry point.  It eventually jumps to &lt;code&gt;DISPATCH&lt;/code&gt; on page 118.  At the bottom of page 119 it invokes an &lt;code&gt;RTI&lt;/code&gt; instruction.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2019-09-11T19:44:50.443" LastActivityDate="2019-09-11T19:44:50.443" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12297" PostTypeId="2" ParentId="12283" CreationDate="2019-09-11T20:10:55.547" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;On Jan 7, 2012, Dave Ottalini, Washington Apple Pi Apple III SIG Chair, announced on the Facebook Apple /// Enthusiasts group that their Apple /// DVD, which formerly sold for $35, is now reclassified as public domain&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is now on archive.org: &lt;a href=&quot;https://archive.org/details/dvdrom-wap-apple3&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/details/dvdrom-wap-apple3&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notable in this collection (which you can browse) is some Q&amp;amp;A with the aforementioned Dan Kottke, where he interestingly does NOT mention this issue (even in 2002):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ia902607.us.archive.org/view_archive.php?archive=/9/items/dvdrom-wap-apple3/A3DVD.iso&amp;amp;file=A3%20Info%2FA3%20History%2FRe_%20A3%20FAQ%205.0%20-%20Daniel%20Kottke%20.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ia902607.us.archive.org/view_archive.php?archive=/9/items/dvdrom-wap-apple3/A3DVD.iso&amp;amp;file=A3%20Info%2FA3%20History%2FRe_%20A3%20FAQ%205.0%20-%20Daniel%20Kottke%20.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(He does talk about a loose connection with a memory board, but that's a different thing than chips popping loose from sockets due to thermal expansion/contraction...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also included is a 500+ page document of tech notes, which (from what I can tell) does not include a technical note on this subject either:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ia802607.us.archive.org/view_archive.php?archive=/9/items/dvdrom-wap-apple3/A3DVD.iso&amp;amp;file=A3%20Tech%20Library%2FTechnical%20Info%20Library%2FApple%20IAC%20Tech%20Notes%201982.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ia802607.us.archive.org/view_archive.php?archive=/9/items/dvdrom-wap-apple3/A3DVD.iso&amp;amp;file=A3%20Tech%20Library%2FTechnical%20Info%20Library%2FApple%20IAC%20Tech%20Notes%201982.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize this is trying to prove a negative, and it's a lot of manual searching of old documents scanned as images.  Perhaps someone can find evidence in here and prove this post wrong. :)&lt;/p&gt;&#xA;" OwnerUserId="599" LastEditorUserId="599" LastEditDate="2019-09-14T15:49:46.003" LastActivityDate="2019-09-14T15:49:46.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12298" PostTypeId="2" ParentId="12283" CreationDate="2019-09-12T03:48:16.810" Score="6" Body="&lt;p&gt;I had an Apple III on my desk at Apple, and IIRC, Dan Kottke, who was working at a lab bench near mine, told me to try this if the III started acting flakey.  Then later, he found another solution (forget what that was).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, I would periodically open the case and press the chips and connectors fully back into their sockets.  Sometime I would feel/hear a sound indicating that indeed they had become not fully seated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don’t know if this was publicized to the retail customer base.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2019-09-12T03:54:39.100" LastActivityDate="2019-09-12T03:54:39.100" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12299" PostTypeId="2" ParentId="12289" CreationDate="2019-09-12T14:34:48.673" Score="1" Body="&lt;p&gt;I'd connect any PSU (with some more wattage) and then connect it to a Wattmeter ...so that one can measure the consumption when being idle and under full load. Likely it wouldn't even draw 100 Watt under load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ATX with adapter might be better than AT, because a) it being newer components and b) those can still be recycled into current machines - and it can also be used as a test PSU for such... while testing scraped PSU with that mainboard might easily produce toast (there are PSU testers for AT/X).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most important might be, that it still retro-fits into the existing housing ...newer PSU are often 50% larger than they were back then.&lt;/p&gt;&#xA;" OwnerDisplayName="user13661" LastEditorDisplayName="user13661" LastEditDate="2019-09-15T05:56:43.227" LastActivityDate="2019-09-15T05:56:43.227" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12300" PostTypeId="1" AcceptedAnswerId="12303" CreationDate="2019-09-12T16:25:00.617" Score="20" ViewCount="2773" Body="&lt;p&gt;Did bit one of the Intel 8080's Flags register, the bit between the carry and parity flags, get set to one on startup? If so what was the reason for this, and was this inherited from the 8008 Flags register?&lt;/p&gt;&#xA;" OwnerUserId="15219" LastEditorUserId="15219" LastEditDate="2019-09-12T16:31:07.917" LastActivityDate="2019-09-17T10:48:06.227" Title="Bit one of the Intel 8080's Flags register" Tags="&lt;8080&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12301" PostTypeId="2" ParentId="12300" CreationDate="2019-09-12T16:57:20.993" Score="6" Body="&lt;p&gt;According to the &lt;a href=&quot;http://bitsavers.org/components/intel/MCS80/98-153B_Intel_8080_Microcomputer_Systems_Users_Manual_197509.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Intel 8080 microcomputer systems user’s manual&lt;/em&gt;&lt;/a&gt;, the contents of registers are indeterminate on startup:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The contents of its&#xA;  program counter, stack pointer, and the other working registers are naturally subject to random factors and cannot be&#xA;  specified.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And further on:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Note, however, that&#xA;  the &lt;code&gt;RESET&lt;/code&gt; has no effect on status flags, or on any of the&#xA;  processor's working registers (accumulator, registers, or&#xA;  stack pointer). The contents of these registers remain indeterminate, until initialized explicitly by the program.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="79" LastEditorUserId="7946" LastEditDate="2019-09-17T10:48:06.227" LastActivityDate="2019-09-17T10:48:06.227" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12302" PostTypeId="2" ParentId="12300" CreationDate="2019-09-12T17:05:11.560" Score="6" Body="&lt;p&gt;According to the manual, the only thing that is explicitly set after RESET in the 8080 is the program counter. Everything else is indeterminate:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Note, however,that the RESET has no effect on status flags, or on any of the processor's working registers (accumulator, registers, or stackpointer). The contents of these registers remain indeterminate, until initialized explicitly by the program.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If they don't initialize anything at all, it is very unlikely they'd initialize something that isn't even used.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="2037" LastEditDate="2019-09-13T00:51:07.717" LastActivityDate="2019-09-13T00:51:07.717" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12303" PostTypeId="2" ParentId="12300" CreationDate="2019-09-12T17:38:29.103" Score="32" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Did bit one of the Intel 8080's Flags register, the bit between the carry and parity flags, get set to one on startup?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;No, as there is no flag register on the 8080&lt;/strong&gt;. Only separate flags. The 'filler' bits (1, 3, 5) only get their values when &lt;code&gt;PUSH PSW&lt;/code&gt; is executed.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long Read:&lt;/h2&gt;&#xA;&lt;p&gt;The 8080 does not have a flag register, but like its predecessor the 8008, separate flags. Which are, like &lt;a href=&quot;/a/12302/6659&quot;&gt;other answers&lt;/a&gt; &lt;a href=&quot;/a/12301/6659&quot;&gt;correctly describe&lt;/a&gt;, in random states after power-up/reset.&lt;/p&gt;&#xA;&lt;p&gt;The 8080 flags have no access in register form for the programmer. Only testing in conditioned instructions is possible. Setting could only be done via instructions with implied result stored in any of them.  The only access as byte data was when pushed onto the stack.&lt;/p&gt;&#xA;&lt;p&gt;When storing the flags to the stack (&lt;code&gt;PUSH PSW&lt;/code&gt;) the second byte is synthesized from the flag bits and completed by 'filler' values for positions 1, 3, 5 (1, 0, 0).  This guarantees that &lt;em&gt;in memory&lt;/em&gt; bit 1 always will be 1.&lt;/p&gt;&#xA;&lt;p&gt;(From &amp;quot;8080 Assembly Language Programming Manual&amp;quot;, &amp;quot;Rev B&amp;quot;, p.22/23)&lt;/p&gt;&#xA;&lt;p&gt;During store (&lt;code&gt;PUSH PSW&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;If register pair PSW is specified, the first byte of information&#xA;saved holds the contents of the A register; the&#xA;second byte holds the settings of the five condition bits,&#xA;i.e., Carry, Zero, Sign, Parity, and Auxiliary Carry. The format&#xA;of this byte is:&#xA;&#xA;| | | |A| | | | |&#xA;|S|Z|0|C|0|P|1|C|&#xA;&#xA;S  State of Sign bit&#xA;Z  State of Zero bit&#xA;0  always 0&#xA;AC State of auxiliary Carry bit&#xA;0  always 0&#xA;P  State of Parity bit&#xA;1  always 1&#xA;C  State of Carry bit&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;For retrieval (&lt;code&gt;POP PSW&lt;/code&gt;):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[...] If register pair&#xA;PSW is specified, the byte of data indicated by the contents&#xA;of the stack pointer plus one is used to restore the values of&#xA;the five condition bits (Carry, Zero, Sign, Parity, and Auxiliary&#xA;Carry) using the format described in the last section.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If so what was the reason for this, and was this inherited from the 8008 Flags register?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In part, as they were separate single-bit entities. Except the 8008 did not allow any access to the flags beside testing them in conditional instructions. There was no instruction to store or retrieve them at all.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tidbits on x80-Family Flags:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The grand daddy of all things 80, the &lt;strong&gt;Datapoint 2200&lt;/strong&gt; laid the ground here by defining them as separate flip-flops, only accessible using conditional instructions. They are not presented as a register-like structure in any way.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yN49Rt.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yN49Rt.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/IoeG0m.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IoeG0m.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;strong&gt;8008&lt;/strong&gt;, being a single chip implementation of the 2200, followed that, while the &lt;strong&gt;8080&lt;/strong&gt; did introduce a register-like view for its programming model, but not in hardware.&lt;/p&gt;&#xA;&lt;p&gt;Only the follow up &lt;strong&gt;8085&lt;/strong&gt; did introduce a real flag register (*1), still not in the register file, but kept separate, like the A register (*2). Now bit 1 was used as &lt;a href=&quot;http://www.righto.com/2013/02/looking-at-silicon-to-understanding.html&quot; rel=&quot;noreferrer&quot;&gt;V flag&lt;/a&gt;. That's one of the incompatibilities with 8080 code - and one way to detect a 8085: by pushing a cleared HL, popping PSW, pushing PSW again and then checking L. If bit 1 is still cleared, it's an 8085.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;strong&gt;Z80&lt;/strong&gt;, in contrast, added a flag register (or more accurately two, as there's one in the alternate register set too) as part of its huge register file, but workings were still based on separate flip-flops located near the ALU. At the beginning of every instruction the content of the flag register in use got copied into the flag flip-flops, and copied back at the end. This process is a must when handling two separate register sets and also keeping the flags close to the ALU.&lt;/p&gt;&#xA;&lt;p&gt;The Datapoint 2200 Version 2 also had two register sets: no flag register, but two sets of flag flip-flops multiplexed toward the ALU (like the registers).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Well, almost, as only 7 storage bits are implemented. Bit 3 was replaced by a circuit to always drive 0 when read.&lt;/p&gt;&#xA;&lt;p&gt;*2 - On the 8008 and 8080, the A register was also not a member of the register file.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-17T10:31:43.940" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="12304" PostTypeId="2" ParentId="12283" CreationDate="2019-09-12T18:04:59.373" Score="2" Body="&lt;p&gt;I can't speak to the original question, but similar issues/solutions are well known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had an Atari ST with socketed ROMs. They would periodically work their way out due to heat causing the mobo to flex. This was periodically solved by the &quot;Atari twist&quot;, which would reset them sometimes, or simply dropping the machine. These would eventually stop working and would require you to open the machine and seat them by hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've never been convinced this wasn't people getting confused about the part numbers, but there were mentions in magazines about &quot;the Atari twist&quot; being applied to printers and all sorts of other devices as well.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-09-12T18:04:59.373" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12305" PostTypeId="1" CreationDate="2019-09-12T17:38:03.280" Score="5" ViewCount="2150" Body="&lt;p&gt;I am interested in old Intel processors. I'll try to be as concise as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been studying both Jeff Duntemann's &lt;a href=&quot;https://books.google.pl/books?id=veMTOpapeZkC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Assembly Language Step-by-Step&lt;/a&gt; - Chapter 4 and &lt;a href=&quot;http://www.c-jump.com/CIS77/ASM/Memory/lecture.html#M77_0170_real_flat&quot; rel=&quot;nofollow noreferrer&quot;&gt;Modes of Memory Addressing on x86&lt;/a&gt; from Bristol Community College's CIS-77 course - which explictly say about &lt;a href=&quot;https://books.google.pl/books?id=veMTOpapeZkC&amp;amp;q=real+mode+flat+model#v=snippet&amp;amp;q=real%20mode%20flat%20model&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;real mode flat model&lt;/a&gt; and the difference between this model and real mode segmented model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just want to know if - in real mode flat model the 64KB limits also the OS or the os just reserves 64KB for the program? Now I know that in real mode flat model you don't have to mess around with segments because the segment registers remain the same and you only have to worry about the offset&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;In real mode flat model, does the CPU and operating system see all 1MB but only programs see 64KB or the operating system and the CPU is also limited to 64KB (16-bit)? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do 16-bit processors run in both real mode flat model and real mode segmented model but 32-bit processors run in protected mode flat model?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What are the examples (Windows) of real mode flat model, real mode segmented model and protected mode flat model (like MS-DOS, Windows 3.1 to Windows XP - or higher)? (Can't find it in the Internet)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15225" OwnerDisplayName="Ady" LastEditorUserId="15334" LastEditDate="2021-02-18T11:31:32.923" LastActivityDate="2021-02-18T11:31:32.923" Title="How does the ‘real mode flat model’ work?" Tags="&lt;x86&gt;&lt;books&gt;&lt;real-mode&gt;" AnswerCount="5" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12306" PostTypeId="2" ParentId="12305" CreationDate="2019-09-12T18:51:21.047" Score="27" Body="&lt;p&gt;I’m assuming you’re asking about x86 processors, not the older 8-bit CPUs.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Real mode is always segmented, and everything (CPU, operating system, programs, even peripherals on the CPU bus) has access to all the system’s address space up to just over 1 MiB (1 MiB strictly before the 286). You can write programs without paying attention to segments, and you’ll be limited to 64 KiB per segment register, but nothing enforces that; this is the memory model used by default for COM programs under DOS (with the additional constraint that all segment registers point to the same segment). There’s no practical distinction between “real mode flat model” and “real mode segmented model”.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;a href=&quot;http://www.c-jump.com/CIS77/ASM/Memory/lecture.html#M77_0170_real_flat&quot; rel=&quot;nofollow noreferrer&quot;&gt;“real mode flat model”&lt;/a&gt; as described in the document you’re referring to, all the above remains true: there is no limitation imposed by the architecture. Programs are written &lt;em&gt;voluntarily&lt;/em&gt; without ever touching the segment registers, which means that they only have direct access to 64 KiB per segment register; as mentioned above, this is the model used by default in COM programs under DOS, and facilitates porting programs from 8-bit platforms. Programs always end up accessing other segments, indirectly, through operating system or BIOS services; for example when reading or writing files, or reading from the keyboard buffer, or writing to the screen. And nothing prevents programs from changing their segment registers and accessing other segments directly. When the operating system (DOS) starts a program, it gives it its own segments, separate from the operating system’s memory areas (and in systems with small amounts of memory, the program might not really have access to the full 64 KiB).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, the architecture doesn’t impose any limitations on the use of segments (that’s why protected mode was added, later).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The 8086/8088 and 80186/80188 CPUs only run in real, segmented mode. (Even if your program ignores segments, the CPU doesn’t.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 80286 introduced 16-bit protected mode with a 24-bit address space. This protected mode is segmented; segment registers now point to segment descriptions, which specify the location of each segment in memory, and their length, access permissions etc. Segments are &lt;em&gt;necessary&lt;/em&gt; to take advantage of the protection provided by protected mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 80386 introduced 32-bit protected mode, which also relies on segments; however the availability of 32-bit addresses means that segments can be configured to give access to all 4 GiB of address space, so programs can again be written without taking much account of segments (and this is what most people refer to as “flat mode”). The 386 also introduced paging, which allows memory protection to be implemented without relying on segments (once the segments are configured appropriately).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Newer CPUs support all the modes available in older CPUs.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Up to &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2386/79&quot;&gt;Windows 3.0&lt;/a&gt; included, Windows could run in real mode, using segments. Windows/386, Windows 3.0 and later could also run in protected mode, on 286s (Windows 3.0) and 386s. Windows NT, Windows 95 and all subsequent versions of Windows run in 32-bit protected mode. MS-DOS always ran in real mode; there were several DOS extenders which allowed programs to run in protected mode on top of DOS, such as DOS/4GW.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;16- and 32-bit x86 protected mode still relies heavily on segments; like real mode, protected mode is always segmented. It’s possible to give the appearance of a flat mode in 32-bit protected mode, with segments set to cover all the address space, and that’s how most 32-bit operating systems work; instead of using segments to separate programs from each other, they rely on paging.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There is an &lt;a href=&quot;https://board.flatassembler.net/topic.php?t=11940&quot; rel=&quot;nofollow noreferrer&quot;&gt;“unreal flat mode”&lt;/a&gt; on 386s and later, which allows programs to run in real mode while accessing all 4 GiB, but it’s difficult to use and never gained much popularity. Sometimes this is referred to as &lt;a href=&quot;https://board.flatassembler.net/topic.php?p=1442#1442&quot; rel=&quot;nofollow noreferrer&quot;&gt;“flat real mode”&lt;/a&gt;, when running 16-bit code with 32-bit registers and 4 GiB segment limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most other 386-based operating systems run in 32-bit protected mode, generally with a flat model where segments cover all of the address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The different ways of using segments in real mode were given names, and most compilers offered the choice of different &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_Memory_Model&quot; rel=&quot;nofollow noreferrer&quot;&gt;memory models&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;tiny mode, with the same segment used for code, data and the stack (so 64 KiB for everything);&lt;/li&gt;&#xA;&lt;li&gt;small mode, with one code segment, and one segment shared for data and the stack (so 64 KiB of code, and 64 KiB of data);&lt;/li&gt;&#xA;&lt;li&gt;medium mode, with multiple code segments, and one segment shared for data and the stack (so more than 64 KiB of code, and 64 KiB of data);&lt;/li&gt;&#xA;&lt;li&gt;compact mode, with a single code segment, and multiple data segments (so 64 KiB of code, and more than 64 KiB of data);&lt;/li&gt;&#xA;&lt;li&gt;large mode, with multiple code and data segments (so more than 64 KiB of code and more than 64 KiB of data);&lt;/li&gt;&#xA;&lt;li&gt;huge mode, same as large mode but with the ability to manipulate single objects larger than 64 KiB.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-09-16T08:41:13.733" LastActivityDate="2019-09-16T08:41:13.733" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12307" PostTypeId="2" ParentId="12305" CreationDate="2019-09-12T20:40:10.390" Score="5" Body="&lt;p&gt;1) All software sees the full 20bit address space, since there is no distinction between kernel and user land.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Flat mode is simply all segment descriptors set to maximum length and base offset 0. This is not feasible in 16 bit protected mode (80286), but most 80386 operating systems will use this mode in protected mode. There are other alternatives supported by the hardware, however&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) MS-DOS in real mode was always segmented. There are DOS extenders that allow flat modes beyond 16 bit addressing. 16 bit windows is designed in such way it is mostly transparent whether the cpu is running in real or protected mode. &lt;/p&gt;&#xA;" OwnerUserId="4378" LastActivityDate="2019-09-12T20:40:10.390" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12308" PostTypeId="5" CreationDate="2019-09-13T01:56:25.897" Score="0" Body="&lt;p&gt;(This tag may be considered confusing for posts specifically discussing Kyotronic 85 variants that are not the TRS-80 Model 100. For discussion of this, see &lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/q/799/7208&quot;&gt;this meta post&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-03-07T04:47:21.037" LastActivityDate="2020-03-07T04:47:21.037" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12309" PostTypeId="4" CreationDate="2019-09-13T01:56:25.897" Score="0" Body="Kyocera Kyotronic 85 and its rebadges/variants, including the TRS-80 Models 100, 102 and 200, Olivetti M10, NEC PC-8201 and PC-8300." OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-13T01:56:25.897" LastActivityDate="2019-09-13T01:56:25.897" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12310" PostTypeId="2" ParentId="9537" CreationDate="2019-09-13T10:27:55.567" Score="2" Body="&lt;p&gt;Several BASIC dialects have &lt;code&gt;DIV&lt;/code&gt; and &lt;code&gt;MOD&lt;/code&gt; operators, which return the quotient and remainder respectively from integer division.  This is nearly equivalent to using &lt;code&gt;/&lt;/code&gt; and &lt;code&gt;%&lt;/code&gt; operators on integers in C.  They are infix operators, even though their syntax is a keyword rather than a symbol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, the &lt;code&gt;/&lt;/code&gt; operator in most BASICs performs floating-point division and has no remainder counterpart.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A = 124&#xA;D = 34&#xA;Q = A DIV D&#xA;R = A MOD D&#xA;F = A / D&#xA;PRINT Q,R,F&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;yields&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;3    22    3.6471&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2019-09-13T17:31:33.797" LastActivityDate="2019-09-13T17:31:33.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12311" PostTypeId="2" ParentId="12305" CreationDate="2019-09-13T13:41:25.370" Score="0" Body="&lt;p&gt;There's one other legacy mode. On a 286, Windows 3.1 (possibly Windows 3.0), has a 286 protected mode, where GlobalAlloc() and GlobalLock() are used to allocate and lock a large amount of memory returning a far pointer where the upper half is a selector value. This allocates and locks a set of 64KB blocks of memory, and incrementing a selector (segment register) by 8 (the 8 is defined with _AHINCR with Microsoft compiler) advances to the next 64KB block of memory (a selector can not be set to other than the start of 64KB block, increasing the overhead of data or records that span 64KB blocks). Early versions of OS/2 and some other OS can run in 286 protected mode:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80286#OS_support&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Intel_80286#OS_support&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4660" LastEditorUserId="4660" LastEditDate="2019-09-13T14:51:16.253" LastActivityDate="2019-09-13T14:51:16.253" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12312" PostTypeId="2" ParentId="12305" CreationDate="2019-09-13T16:04:47.723" Score="0" Body="&lt;p&gt;I've not heard the phrase &quot;real mode flat model&quot;, but it may be referring to the fact that real mode allows a memory manager to manage memory as a linear sequence of 65,536 16-byte paragraphs (of which 40,960 would be within the first 640K).  A memory manager which rounds all allocations to multiples of 16 bytes can avoid the need for any kind of 32-bit computation or address-normalization logic by simply having every allocation start at a fixed offset (perhaps 4) of some segment.  Indeed, if the memory manager knows what range of paragraphs it has to work with, and if client code specifies the number of paragraphs (rather than bytes) it needs for each allocation , the memory manager won't need to know or care how big the paragraphs are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the people who designed later Intel processors failed to realize the advantages and power of this approach.  If segment registers on the 80386 had been implemented as e.g. a 4-bit selector and a 28-bit scaled offset, it would have been practical for frameworks like Java or .NET to use 32-bit object references to access more than a terabyte of storage (e.g. use one of the 16 segment descriptors for a &quot;huge object&quot; segment holding up to a terabyte worth of objects whose sizes would be rounded up to the next multiple of 4096 bytes, one for a &quot;large object&quot; segment holding 64GiB of objects with sizes rounded to 256, and one holding 4GiB of &quot;medium&quot; objects rounded to 16 bytes, and maybe one for 1GiB worth of &quot;tiny&quot; objects whose size would round to 4 bytes; one could have all those areas and still have 12 segments left over for whatever purpose might be needed.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-09-13T16:04:47.723" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12313" PostTypeId="1" AcceptedAnswerId="12315" CreationDate="2019-09-13T19:59:04.063" Score="8" ViewCount="275" Body="&lt;p&gt;I know that a video interlace mode was available on the Apple /// prototype and eventually on the Apple ///+, but I haven't seen anything that says what it was for. Did it provide a higher resolution mode or was it simply to fill in the horizontal raster gaps?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2019-09-14T06:09:20.547" Title="What was the purpose of the Apple /// interlace mode?" Tags="&lt;video&gt;&lt;apple-iii&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12314" PostTypeId="2" ParentId="12305" CreationDate="2019-09-13T21:02:17.753" Score="1" Body="&lt;p&gt;&quot;Flat model&quot; is simply unsegmented linear address space (3.2.1).&lt;br&gt;&#xA;&lt;a href=&quot;https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf&lt;/a&gt;&lt;br&gt;&#xA;This is processor's definition of flat model. And OS defines flat memory model, &quot;tiny&quot; memory model, as well.&lt;br&gt;&#xA;(in my own experience, I never felt flatness in &quot;tiny&quot; model&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I stand processor's definition - when you particularly say &lt;em&gt;Real-mode&lt;/em&gt; flat model, I guess that's unprotected mode (= real mode) with linear widen address space (up to 4GB).&#xA;Once you entered protected mode, set GDT up, then you return to real mode. That's it.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It depends. Today I answer 'NO' for 1st of the questions. Because one segment's extendable up to 32bit (4GB) in 386. If &quot;rela mode flat model&quot; means &quot;tiny&quot;-memory model and it's only on 16bit-processor, this answer was YES. &lt;/li&gt;&#xA;&lt;li&gt;Yes. A x86 16bit processor has linear address space up to 1MB (if A20line is asserted). But an address area where's accessible w/o segmentation is only 64KB because almost such processors don't support a segment descriptor. Note that 286, 16bit processor, can enter to protected mode. &lt;/li&gt;&#xA;&lt;li&gt;If I stand Intel's definition of &quot;flat&quot; model, a samples is memtest86+ &lt;a href=&quot;https://www.memtest.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.memtest.org/&lt;/a&gt; . freedos may be for real mode segmented model. PC-UNIXs are protected mode segment model. protected mode flat model's sample is ... some RTOS? I don't know.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;memtest86+ head.s:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;first 4 entries of GDT are 4GB-wide:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GDT, Global Descriptor Table is the table of segment descriptor, {BASE, PAGES, MODE}.&#xA;The entry's pointed by segment register, and now segment register is NOT a apart of effective address.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;gdt:&#xA;    .quad 0x0000000000000000    /* NULL descriptor */&#xA;    .quad 0x0000000000000000    /* not used */&#xA;    .quad 0x00cf9b000000ffff    /* 0x10 main 4gb code at 0x000000 */&#xA;    .quad 0x00cf93000000ffff    /* 0x18 main 4gb data at 0x000000 */&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;returning to real mode. and all segment registers are unified.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    .code16&#xA;    /* Disable Paging and protected mode */&#xA;    /* clear the PG &amp;amp; PE bits of CR0 */&#xA;    movl    %cr0,%eax&#xA;    andl    $~((1 &amp;lt;&amp;lt; 31)|(1&amp;lt;&amp;lt;0)),%eax&#xA;    movl    %eax,%cr0&#xA;&#xA;    /* make intersegment jmp to flush the processor pipeline&#xA;     * and reload %cs:%eip (to clear upper 16 bits of %eip).&#xA;     */&#xA;    ljmp    *(realptr - RSTART)&#xA;real:&#xA;    /* we are in real mode now&#xA;     * set up the real mode segment registers : %ds, %ss, %es, %gs, %fs&#xA;     */&#xA;    movw    %cs, %ax&#xA;    movw    %ax, %ds&#xA;    movw    %ax, %es&#xA;    movw    %ax, %fs&#xA;    movw    %ax, %gs&#xA;    movw    %ax, %ss&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15229" LastEditorUserId="15229" LastEditDate="2019-09-14T17:05:54.180" LastActivityDate="2019-09-14T17:05:54.180" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12315" PostTypeId="2" ParentId="12313" CreationDate="2019-09-14T03:49:23.657" Score="9" Body="&lt;p&gt;According to the &lt;a href=&quot;https://archive.org/details/Apple_III_Plus_Owners_Guide_1982_Apple_Computer/&quot; rel=&quot;noreferrer&quot;&gt;Apple III Plus Owner's Guide&lt;/a&gt;, the interlace mode is called &quot;&lt;a href=&quot;https://archive.org/details/Apple_III_Plus_Owners_Guide_1982_Apple_Computer/page/n239&quot; rel=&quot;noreferrer&quot;&gt;text interlace&lt;/a&gt;&quot;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;text interlace&lt;/strong&gt; a Feature of the Apple III console that, when activated, increases the resolution of text characters on the display screen.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/Apple_III_Plus_Owners_Guide_1982_Apple_Computer/page/n57&quot; rel=&quot;noreferrer&quot;&gt;Page 39&lt;/a&gt; provides a little more detail:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/jmPvl.png&quot; alt=&quot;The Apple III has text interlace, a function that allows you to turn on a second picture, or matrix of dots, which is in computer memory. When you turn on text interlace, the two identical sets of dots merge, creating a grid of 384 lines of 560 dots per line. The two sets of dots that make up the character *A* merge together, or interlace, to form a more crisply defined character.&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &quot;text interlace&quot; is simply a mode designed to enhance the appearance of text characters on the screen, without using any additional video memory, or even character ROM! It achieves this by switching from a progressive (non-interlaced) resolution of 560&amp;times;192 pixels to an interlaced resolution of 560&amp;times;384 pixels and doubling each row of pixels to stretch each 7&amp;times;8 character into a 7&amp;times;16 matrix. But &lt;a href=&quot;https://archive.org/details/Apple_III_Plus_Owners_Guide_1982_Apple_Computer/page/n59&quot; rel=&quot;noreferrer&quot;&gt;note&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Text interlace works best with green-phosphor and other long-persistence video displays. If you have a black-and-white or color display, text interlace may make the picture flicker.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-09-14T06:09:20.547" LastActivityDate="2019-09-14T06:09:20.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12316" PostTypeId="2" ParentId="9373" CreationDate="2019-09-14T10:44:34.303" Score="2" Body="&lt;p&gt;I have my doubts Nintendo ever intended to use the 68000 for the SNES. It sounds like the plan was to use the 65816 from the start for attempted backwards compatibility and also include the DSP1 (used in games like Pilotwings and Super Mario Kart) on the motherboard to speed up certain calculations. &lt;/p&gt;&#xA;" OwnerUserId="15233" LastActivityDate="2019-09-14T10:44:34.303" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12318" PostTypeId="2" ParentId="2979" CreationDate="2019-09-15T00:15:30.927" Score="1" Body="&lt;p&gt;If it was actually RAM at both addresses, you would almost certainly just find that both chips take the write, and both chips return the same data at the same time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It'd probably be fine. The sequence of pins you set to read DRAM chips mean that the chip will only put it's data on the bus when it actually has the data ready. So there shouldn't be a case of one chip returning a 1 and a slower one still having a 0 hanging round. They'd both be tristated off the bus, if not themselves then by the logic controlling them, until they were ready to return good data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;POST etc, or the other hardware, would have no way of detecting such an address clash in any case. The ISA bus is a very simple bus. It's basically the 8088's pins, with a few extra lines from the interrupt controller etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it were some weird bit of hardware that wasn't actually RAM, but in the RAM address space, clashing with actual RAM, then you might have a problem if it was returning some non-previously-stored result. But you'd have to be insane to build something like that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that happened, any 0s and 1s would mean 5V and 0v were fighting. Although usually only with the weak strength the chips could muster. Wouldn't affect other hardware but might possibly blow a chip. But that's real winning the lottery on your birthday, every year, stuff. Not something you'd ever look for or plan for. Even if it happened it would need to persist long enough to cause damage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's one (of many!) nice things about chips with a separate I/O range (and pin!). The only things on an ISA bus responding to RAM addresses should be other RAM. On a CGA card or whatever, it's still just RAM.&lt;/p&gt;&#xA;" OwnerUserId="14475" LastEditorUserId="14475" LastEditDate="2019-09-15T00:35:47.557" LastActivityDate="2019-09-15T00:35:47.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12319" PostTypeId="2" ParentId="4499" CreationDate="2019-09-15T01:07:19.300" Score="4" Body="&lt;p&gt;Knuth was at CalTech before moving to Stanford in 1968 and continued consulting with Burroughs until that time. As ShreevatsaR mentions, he worked on an Algol-58 compiler for the Burroughs 205 (1954), which was a decimal, drum-memory, vacuum tube system with a 143KHz clock rate, 11-digit words (10 plus sign), and sequential, digit-by-digit arithmetic. Average access time on the main portion of the memory drum was 8.4ms, but there was a small portion of the drum that provided 10x faster access. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Execution of an integer or floating-point add (including fetch) would typically take 2.5ms if executed from the fast portion of the drum and 18ms if from the main portion. [private correspondence with Prof. Knuth and Tom Sawyer]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Knuth also worked on the BALGOL compiler for the Burroughs 220 (1958). This was a core-memory system with a 200KHz clock rate. It used essentially the same digit-sequential arithmetic as the 205. Integer add time was 0.185-0.245ms; floating add took 0.215-0.415ms. &lt;a href=&quot;http://www.bitsavers.org/pdf/burroughs/electrodata/220/5020A_B220_OperCharac_Aug60.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;B220 Operational Characteristics&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Knuth also worked during this time on the Burroughs B5000/B5500. This ran at 1MHz and used a 48-bit binary word with a 4-6µs memory access time. It used a unified integer/floating numeric format where integers were considered specially-normalized floating-point numbers. Add times are difficult to generalize due to stack adjustment and variance in normalization, but it had a 1-clock parallel adder, so my guess is that most adds took about 10µs. &lt;a href=&quot;http://www.bitsavers.org/pdf/burroughs/B5000_5500_5700/service/B5281.55_ProcessorTrainingManual_Aug66.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;B5281 Processor Training Manual&lt;/a&gt;, &lt;a href=&quot;http://www.bitsavers.org/pdf/burroughs/B5000_5500_5700/service/B5000_Processor_Flow_Chart.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;B5000 Processor Flow Charts&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15236" LastActivityDate="2019-09-15T01:07:19.300" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12320" PostTypeId="2" ParentId="12188" CreationDate="2019-09-15T01:09:36.270" Score="7" Body="&lt;p&gt;The &lt;a href=&quot;https://github.com/MiSTer-devel/Main_MiSTer/wiki&quot; rel=&quot;noreferrer&quot;&gt;MiSTer project&lt;/a&gt; is an Open Source effort to create clone consoles/computers on the &lt;a href=&quot;http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&amp;amp;CategoryNo=167&amp;amp;No=1046&quot; rel=&quot;noreferrer&quot;&gt;Terasic DE10-nano&lt;/a&gt; FPGA dev kit&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They have an &lt;a href=&quot;https://github.com/MiSTer-devel/Apple-II_MiSTer&quot; rel=&quot;noreferrer&quot;&gt;Apple II+ core&lt;/a&gt; available and the MiSTer can be configured to boot directly into it&lt;/p&gt;&#xA;" OwnerUserId="272" LastActivityDate="2019-09-15T01:09:36.270" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12321" PostTypeId="2" ParentId="4499" CreationDate="2019-09-15T13:26:24.443" Score="1" Body="&lt;p&gt;The answer can perhaps be inferred from &lt;a href=&quot;http://www.roylongbottom.org.uk/whetstone.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; with results from the Whetstone benchmarks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A B5500 clocks in at 0.064 &quot;million whetstone instructions per second&quot;, an HP Pentium II system gets 169.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I selected the B5500 since Knuth is known to have been associated with Burroughs at that time (see other answers), and the HP system since it was the most recent Intel-based computer I could see at a quick glance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Whetstone benchmark is explained at the same site, in case you're not familiar with it.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-09-15T13:26:24.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12323" PostTypeId="2" ParentId="641" CreationDate="2019-09-15T15:43:14.477" Score="4" Body="&lt;p&gt;The RAMBUS bus was a very specific sort of thing, optimised for it's purpose of very-high-speed RAM, which was a black art then. So it wouldn't be suitable, or the best choice, for other hardware. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides which, any other hardware would be likely to mess up the functioning of the machine's internal RAM. The fact that a &quot;jumper&quot; (actually termination) pack goes there leads me to believe that there's only one RAMBUS channel on the machine. So anything plugging into that slot would've been connected to the onboard RAM's dedicated bus, which, as I mention, was very specifically tuned. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern PCs are the same. Early PCs had RAM and I/O devices all sharing the same CPU bus, but modern CPUs have specialised RAM controllers onboard, with dedicated pins for connecting only to RAM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So no. If they had, it would've made the machine unreliable and cost a ton of money to adapt hardware to a specialised RAMBUS RAM bus, for no imaginable gain. Instead, you'd just put extra hardware in the slot underneath, the cartridge slot, or a controller port for slower speed data access. The cartridge slot would be a much friendlier place for electrical engineers! The underneath expansion slot was just an extension, same circuit connections, of the cart slot. &lt;/p&gt;&#xA;" OwnerUserId="14475" LastActivityDate="2019-09-15T15:43:14.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12324" PostTypeId="1" AcceptedAnswerId="12325" CreationDate="2019-09-15T18:00:54.927" Score="13" ViewCount="3503" Body="&lt;p&gt;Superficially the Amiga 500 and Mega Drive are similar. Both run a Motorola 68000 CPU at similar clocks and both have dedicated hardware for sprite and other graphics operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/QGkhi004pYs&quot; rel=&quot;nofollow noreferrer&quot;&gt;Comparing the arcade ports of Mortal Kombat&lt;/a&gt; (which were both handled by Probe), the Mega Drive version is visually improved in the following ways:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Has parallax scrolling&lt;/li&gt;&#xA;&lt;li&gt;Has background animation&lt;/li&gt;&#xA;&lt;li&gt;Has higher frame rate&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This finding also seems to apply more generally when comparing Mega Drive and Amiga ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I accept that these differences can often be best explained by software factors like developer skill and budget.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Putting that aside, what extra hardware capabilities does the Mega Drive have (if any) that could explain the graphical improvements?&lt;/p&gt;&#xA;" OwnerUserId="272" LastEditorUserId="11916" LastEditDate="2019-12-05T21:58:39.950" LastActivityDate="2020-02-20T11:25:23.407" Title="Amiga 500 OCS/ECS vs Mega Drive VDP" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;graphics&gt;&lt;sega-genesis&gt;&lt;amiga-500&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12325" PostTypeId="2" ParentId="12324" CreationDate="2019-09-15T20:14:12.663" Score="24" Body="&lt;p&gt;The [pre-AGA] Amiga:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;uses a planar frame buffer, stored in memory that is shared with the CPU (and which therefore reduces the CPU's speed);&lt;/li&gt;&#xA;&lt;li&gt;provides dual-playfield hardware scrolling, but the total bit fetch total per output byte doesn't stretch beyond six, so you end up with e.g. a 7 colour foreground and an eight colour background;&lt;/li&gt;&#xA;&lt;li&gt;provides 8 hardware sprites, but with no DMA support for positions and image pointers the programmer is responsible for sorting and finding appropriate transition points if multiplexing is desired; but&lt;/li&gt;&#xA;&lt;li&gt;has the Copper for no-CPU cost raster racing (including sprite multiplexing); and&lt;/li&gt;&#xA;&lt;li&gt;has a blitter for quickly populating frame buffer contents.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Not all memory has to be shared with the CPU but Commodore being the company it was, the mainstream stock Amigas shipped with only shared memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Philosophically the Mega Drive is from a completely different school of thought:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the VDP has 64kb of its own memory, which the CPU can access very slowly or else it can request a DMA transfer and yield the bus;&lt;/li&gt;&#xA;&lt;li&gt;from that memory the Mega Drive draws two tile-based play fields of 4bpp each, for which the programmer is permitted directly to supply per-line scrolling offsets;&lt;/li&gt;&#xA;&lt;li&gt;one of those play fields may optionally also display a non-scrolling window;&lt;/li&gt;&#xA;&lt;li&gt;it also supports a sprite layer with another 4bpp, for which it parses an 80-entry table to draw up to 20 16px-across sprites per line; and&lt;/li&gt;&#xA;&lt;li&gt;it has a Z80 entirely dedicated to audio, making that one less thing to do.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So unlike the Amiga, the Mega Drive is heavily optimised for 2d games of the era, providing native tile-based graphics and a large number of sprites that it can automatically multiplex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tiles and sprites are also great for forcing the programmer's hand: either the hardware can display what you want, and it'll work at the native refresh rate, or it can't. Unlike the blitter on the Amiga you can't decide you're going to run at 25fps rather than 50 in order to draw more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also the advantage of the dedicated VDP RAM and the greater bandwidth the Mega Drive therefore enjoys, giving it two background layers of 4bpp graphics compared to the Amiga's 6bpp total — even before you start counting the 320px of further per-line video data provided by the Mega Drive's comparatively large sprite total.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, anything that can't be rationalised down to sprites and tiles isn't a good fit. You can see it in the relative frame rate of the few 3d titles that are on both platforms, such as Hard Drivin', and productivity software would likely have been very tiresome had there ever been a reason to write any. The Amiga is leagues ahead for anything that most naturally maps to a frame buffer.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-09-16T21:18:08.573" LastActivityDate="2019-09-16T21:18:08.573" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12326" PostTypeId="2" ParentId="12324" CreationDate="2019-09-15T22:42:13.983" Score="5" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;For all of this it might be helpful and take a step back from bits and bytes and take a step back to look at the whole process of Game development. Doing so will show that quality is much more dependant on the budget available than the hardware to be used. Budget can buy time to create quality and pay for creativity.&lt;/p&gt;&#xA;&lt;p&gt;The market for Mega Drive games was, depending on the region 5-10 times as large as for Amiga developments - and so were the budgets available to be invested in game quality. For example &lt;a href=&quot;https://en.wikipedia.org/wiki/Sonic_the_Hedgehog_2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sonic 2&lt;/a&gt; (*1) alone &lt;a href=&quot;https://en.wikipedia.org/wiki/Sonic_the_Hedgehog#Sales&quot; rel=&quot;nofollow noreferrer&quot;&gt;sold with 6 million&lt;/a&gt; more copies for the Mega Drive, than there have been Amigas ever produced (&amp;lt;5M).&lt;/p&gt;&#xA;&lt;p&gt;We, as computer nerds, tend to over emphase on bits, bytes and hardware in general, even when they don't really matter for the product the customer sees (and buys).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What extra hardware capabilities did the Mega Drive have that could explain these differences?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It doesn't need to be any hardware differences. As soon as machines reach a certain level it's all about game programming (and design). Usually ports are not done the same team or company across various system. Even less are they done with the same dedication. So quality may differ quite a lot according to selected contractor and budget. (*2)&lt;/p&gt;&#xA;&lt;p&gt;Remember Xenon2? An awesome scroller, with several layers scrolling in different speed and direction, iced with animation was extreme at its time. Noteworthy the original Atari ST version looked and played best, while the Amiga version, despite the more capable hardware, played still great, but less perfect - and &lt;a href=&quot;http://www.honestgamers.com/9234/genesis/xenon-2-megablast/review.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Mega Drive version simply sucked&lt;/a&gt;. Not only was gameplay horrible and graphics less what other games of the same time offered, they even cut down the originally quite good sound track so much it became extreme boring. Having a dedicated sound processor didn't help here either.&lt;/p&gt;&#xA;&lt;p&gt;So while hardware can play a role, at the time of 16 bit systems of the mid to late 1980s it became less of a defining issue while budget became the ruling issue. Money defined the quality of programmers/companies to be hired and how much time they got to make the game great.&lt;/p&gt;&#xA;&lt;p&gt;And that's where scale of a market comes into play. The market for Mega Drive games was at least a magnitude (10 times) larger than for Amiga games (*3). As a result game development fr the Mega Drive was based on way better funding and larger margins than anything done for the Amiga.&lt;/p&gt;&#xA;&lt;p&gt;Base line: Within the 16 bit era the hardware played a minor role. &lt;strong&gt;Good game development&lt;/strong&gt; (portage as well) &lt;strong&gt;needs good funding which in turn needs good market expectations&lt;/strong&gt;. Here the Mega Drive played in a different league than the Amiga (or any other home computer).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - &lt;a href=&quot;https://en.wikipedia.org/wiki/Sonic_the_Hedgehog_(1991_video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sonic 1&lt;/a&gt; sold more than 15 million copies, but it was in many markets bundled with the console, so not really useful as measurement.&lt;/p&gt;&#xA;&lt;p&gt;*2 - In fact, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sonic_the_Hedgehog_(8-bit_video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;backport of Sonic 1&lt;/a&gt; to the Master System is an equal great example that it's not so much about the hardware available but dedication and support for programmers doing a port. The Master System version has been noted as on par to the Mega Drive version, despite the fact that Sonics movement was considered top line development in 1991, it was possible to move it quite good over to the way less capable system.&lt;/p&gt;&#xA;&lt;p&gt;*3 - The Mega Drive sold in the US during its first year about 500k units (plus about 400k in Japan), while the Amiga sold less than 100k worldwide. Over the 10 year lifetime of either machine the Amiga &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga#Commercial_success&quot; rel=&quot;nofollow noreferrer&quot;&gt;sold less than 5M units&lt;/a&gt; (worldwide, all models combines) and about 700k in the US. Sega alone sold more than 30 million units during the first run - 4 M units alone in the US during the first 4 years.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-16T09:17:46.707" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12327" PostTypeId="1" AcceptedAnswerId="12331" CreationDate="2019-09-16T05:06:12.043" Score="8" ViewCount="1140" Body="&lt;p&gt;Wikipedia has a &lt;a href=&quot;https://en.wikipedia.org/wiki/Logo_(programming_language)#Implementations&quot; rel=&quot;noreferrer&quot;&gt;long list of Logo implementations&lt;/a&gt;, but I'd like to know what the earliest implementation is &lt;em&gt;on a microcomputer&lt;/em&gt;, or, more likely, what are the earliest ones if there isn't one with clear priority. (I am not interested in mainframe or minicomputer implementations.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for the &lt;em&gt;language&lt;/em&gt; implementation here, not just something that lets me do turtle graphics. (In fact, if it doesn't have turtle graphics, I couldn't care less.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if the earliest ones on microcomputers did not offer tail call optimization, which one is/ones were the first to do that? (I ask because it appears to be that TCO is pretty essential to Logo, unless a lot more extensive iteration support is added beyond what the standard language seems to provide.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bonus points if you can point me to a source for the code so that I can run it in an emulator (or on real hardware).&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7946" LastEditDate="2019-09-17T11:04:56.627" LastActivityDate="2020-01-16T20:28:37.323" Title="What was the earliest microcomputer Logo language implementation?" Tags="&lt;programming&gt;&lt;logo-language&gt;" AnswerCount="4" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="12328" PostTypeId="2" ParentId="12324" CreationDate="2019-09-16T08:07:06.763" Score="4" Body="&lt;p&gt;Let's assume your assumption &quot;MegaDrive games are generally 'better' than Amiga games&quot; was true - Which is a statement hard to prove and very probaby only backed by opinion:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt; Games Console vs. Home Computer - Marketing goals&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main (rather: only) selling point for consoles is the quality of games available for the platform. There is absolutely no other reason people buy them. A console manufacturer needs to put a lot more focus on availability of &lt;em&gt;killer games&lt;/em&gt; for the platform than a company selling home computers. It is part of the marketing machine of a games console manufacturer that they need to &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Support game developers as far as they can (documentation, (cross) development systems, training, tech tips, ...) to enable them to create technically &quot;good&quot; games. Most console manufacturers even had in-house game development divisions that could work closely with hardware guys.&lt;/li&gt;&#xA;&lt;li&gt;Quality Control: Games for consoles are typically marketed through the manufacturer's channels rather than independent publishers. That gives the manufacturer a choice of accepting a game into their sales channel or not. Crap games are filtered out early and don't even reach the market. &lt;/li&gt;&#xA;&lt;li&gt;Price control: Traditionally, there never was a budget games market for consoles (which definitlely existed for home computers). The manufacturer of the console fixes a price level for the game, and can make sure the game's quality justifies that price level. A console manufacturer could simply not accept low quality games, because that would have depreciated the console's value.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, generally, the amount of control the manufacturer had (and had to have) on the software available for their machine was much higher on the console market than in the home computer market. There's a reason the Megadrive had special circuitry that would only allow Sega-licenced games to be run on the console...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Home computers, on the other hand, are entirely different. Even if some home computer manufacturers had own software labels to distribute their own games, traditionally there has always been an independent market for software in general (not only games) - That typically also not had the rigid quality control that console manufacturers had. Support for developers was much more basic, beyond documentation of various quality and depth, there wasn't much. Developers traditionally had to explore the innards and capabilities of the hardware themselves. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Amiga is yet again a special case: Commodore's initial aim was to sell the Amiga as a &quot;Multimedia Machine&quot;, rather than a home computer, or, heaven forbid, a games console - Games were, at least in the early years, not the main focus of Amiga marketing (on the contrary: Initially, Commodore went to a great extent to market the Amiga as a Multimedia machine and tried to avoid at all cost the Amiga to be categorized as &quot;games machine only&quot;. Games were seen as software that tended to erode the market price of the machine. That also influenced the choice of developers they supported and software they pushed. Only as late as in the early nineties Commodore marketing was actually starting to accept the Amiga as a games machine and started to change their marketing strategy)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;Hardware Differences&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Comparing a games console and a home computer is, typically, comparing apples to oranges. They're built with an entirely different focus, and, obviously, with very different architecture. Games console architecture is mainly driven by no-compromise video and sound performance, while a home computer needs to achieve a much higher amount of versatility and flexibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main difference between a Megadrive and an Amiga is (apart from the Megadrive's architecture and custom chips being at least 5 years newer) the video subsystem: The Megadrive is architectured for raw 2D-graphics performance. VRAM is isolated from the CPU bus and only mapped to the VDP. The CPU &quot;only&quot; tells the graphic subsystem to shove tiles and sprites around, and can then concentrate on what it does best: computing. The CPU is not able to adress single pixels on the screen (and doesn't have to).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aiming at versatility, the Amiga graphics chips have to share the bus and the VRAM with the CPU - That makes the graphics subsystem more flexible, but at a cost: Graphics is slower and more limited (number and size of sprites and tiles that can be managed) than with dedicated VRAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;Ports&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ported games between platforms are yet another story. I actually can't remember a single game that was ported from one platform to another (the direction traditionally was &lt;em&gt;Arcade&lt;/em&gt;-&gt;&lt;em&gt;Console&lt;/em&gt;-&gt;&lt;em&gt;Home computer&lt;/em&gt;) where the port was considered &quot;better&quot; than the original. The simple reason: Obtaining the legal rights to a game that already exists consumes a large upfront amount of development budget. The original game's mechanics might also have been tailored to the original hardware, so ports are specifically hard to do. You could also assume that ports often simply relied on the fame of the original rather than technical perfection of the actual implementation. Considering that, it is relatively unfair to compare platforms based on games ported between them.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-09-16T09:43:38.963" LastActivityDate="2019-09-16T09:43:38.963" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12329" PostTypeId="2" ParentId="7817" CreationDate="2019-09-16T08:33:50.320" Score="5" Body="&lt;p&gt;Hardware choice of the IBM engineers, when they put the graphic hardware from address A0000 upward. From a software point of view it was possible to overcome the 640KiB limit if there was memory mapped into the A0000-BFFFF range. On regular PC compatibles it was quite difficult to do but some exotic hardware were able to use that.&#xA;I personally used a hardware emulator based on a NEC-V30 CPU that was inserted in the Atari ST that made it compatible with a PC. It worked fantastically well and because the Atari had at least 1 MiB linear memory (mine had 2 MiB) it had memory in the A0000-AFFFF area. This allowed to have 704 KiB for MS-DOS instead of the usual 640 KiB (it was even possible to use the B0000-B7FFF area giving 736 KiB DOS memory, but that was annoying as it limited the graphics to CGA compatibility losing the MDA emulation and the 640x400 B&amp;amp;W Olivetti mode was also lost.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the limit was a hardware limit, not a MS-DOS limit (there were also incompatible PC's that had more than 640KiB like the Sirius 1 and the Apricots who had up to 896 KiB of memory under MS-DOS).&lt;/p&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="7095" LastEditDate="2019-09-18T08:41:50.483" LastActivityDate="2019-09-18T08:41:50.483" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12330" PostTypeId="2" ParentId="12327" CreationDate="2019-09-16T10:09:10.580" Score="10" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Wikipedia has a long list of Logo implementations, but I'd like to know what the earliest implementation on a microcomputer is or, more likely, what the earliest ones are if there isn't one with clear priority. (I am not interested in mainframe or minicomputer implementations.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://el.media.mit.edu/logo-foundation/what_is_logo/history.html&quot; rel=&quot;noreferrer&quot;&gt;A good starting point is here&lt;/a&gt;, as a quick introduction to understand from where the first logo microcomputer implementations came from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first LOGO implementation in its inception was designed at the MIT Artificial Intelligence Lab (1967) as a simplified derivative/dialect of LISP. After spreading across several labs they started to work with several elementary schools, even though no microcomputers where still publicly available &lt;a href=&quot;ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-307.pdf&quot; rel=&quot;noreferrer&quot;&gt;at that time (1971)&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;LOGO had to wait to &lt;a href=&quot;https://el.media.mit.edu/logo-foundation/what_is_logo/history.html&quot; rel=&quot;noreferrer&quot;&gt;jump into the microcomputer market at the late 1970s&lt;/a&gt;. Among the earliest microcomputers to have a LOGO implementation there's the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II&quot; rel=&quot;noreferrer&quot;&gt;Apple ][&lt;/a&gt; (1980 LCSI Logo;PASCAL-based) as well as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TI-99/4A&quot; rel=&quot;noreferrer&quot;&gt;Texas Instruments TI 99/4&lt;/a&gt; (1981, PASCAL-based)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And if the earliest ones on microcomputers did not offer tail call optimization, which one is/ones were the first to do that? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/27596248/why-languages-such-as-c-pascal-cannot-implement-tail-recursion?noredirect=1&quot;&gt;Neither LISP nor PASCAL supported TCO (more details there)&lt;/a&gt;, so the first LOGO implementations didn't support either TCO as long as they were based on these early, high level languages. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like there's &lt;a href=&quot;https://people.eecs.berkeley.edu/~bh/logo.html&quot; rel=&quot;noreferrer&quot;&gt;a Berkeley's UCBLogo based program&lt;/a&gt; mention about a &lt;a href=&quot;https://www.wikiwand.com/en/UCBLogo&quot; rel=&quot;noreferrer&quot;&gt;'tailend recursive call' here&lt;/a&gt;. We find another example in the &lt;a href=&quot;http://www.educa.fmf.uni-lj.si/logo/doc/Apr.96/chpt8.pdf&quot; rel=&quot;noreferrer&quot;&gt;following link&lt;/a&gt;, so probably UCBLogo may be the first one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For further reference, here's an astounding list of &lt;a href=&quot;http://www.burcsi.hu/_inf/JsLogo/doku/LogoTreeProject.pdf&quot; rel=&quot;noreferrer&quot;&gt;all the Logo derivatives produced for any machine&lt;/a&gt; and a family tree with their relationships at the final pages to review.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Bonus points if you can point me to a source for the code so that I can run it in an emulator (or on real hardware).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A real trip to another time may be to try this &lt;a href=&quot;http://history.dcs.ed.ac.uk/archive/languages/ai2logo/&quot; rel=&quot;noreferrer&quot;&gt;IMP-based implementation&lt;/a&gt;, or dive into a &lt;a href=&quot;https://github.com/guillaume-michel/cl-logo&quot; rel=&quot;noreferrer&quot;&gt;Common LISP implementation there&lt;/a&gt;. Here's a &lt;a href=&quot;https://sourceforge.net/projects/fmslogo/files/FMSLogo/FMSLogo%207.0.0/&quot; rel=&quot;noreferrer&quot;&gt;tail call implemented, modern approach for Windows&lt;/a&gt; and &lt;a href=&quot;https://github.com/inexorabletash/jslogo&quot; rel=&quot;noreferrer&quot;&gt;another tail call implemented one in JavaScript&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, here's an &lt;a href=&quot;https://github.com/luvisi/continuinglogo&quot; rel=&quot;noreferrer&quot;&gt;UBCLogo compatible example with TCO&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just as trivia:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Scheme_%28programming_language%29&quot; rel=&quot;noreferrer&quot;&gt;Scheme (1970)&lt;/a&gt; is among the earliest mainframe languages to support TCO&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://es.wikipedia.org/wiki/Micro-PROLOG&quot; rel=&quot;noreferrer&quot;&gt;Micro-Prolog (1980)&lt;/a&gt; was a popular TCO-supported language for 8-bit microcomputer machines, sold until 1990.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15243" LastEditorUserId="15243" LastEditDate="2019-09-16T14:57:42.487" LastActivityDate="2019-09-16T14:57:42.487" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12331" PostTypeId="2" ParentId="12327" CreationDate="2019-09-16T12:09:59.130" Score="5" Body="&lt;p&gt;Given that much of the early '70s work on Logo was &lt;a href=&quot;https://el.media.mit.edu/logo-foundation/what_is_logo/history.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;done at the MIT AI&#xA;Lab&lt;/a&gt; (link from &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12330/7208&quot;&gt;ignos&lt;/a&gt;), it seems quite possible that the&#xA;microcomputer implementations that &lt;a href=&quot;https://web.archive.org/web/20060903203951/http://www.csail.mit.edu/timeline/timeline.php/timeline.php?query=event&amp;amp;id=260&quot; rel=&quot;nofollow noreferrer&quot;&gt;they started in 1980&lt;/a&gt;&#xA;were at least among the first, if not the first.&lt;/p&gt;&#xA;&lt;p&gt;The sources for various early versions (and some other software and&#xA;documentation) are available in the &lt;a href=&quot;https://github.com/PDP-10/its-vault/tree/master/files/aplogo&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;files/aplogo/&lt;/code&gt;&lt;/a&gt; subdir&#xA;of the ITS archive (link from &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12327/what-was-the-earliest-microcomputer-logo-language-implementation/12331#comment38644_12330&quot;&gt;dirkt&lt;/a&gt;). There are also some other&#xA;programs and some usage documentation They're a bit of a mess, but&#xA;poking through them we seem to have the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/PDP-10/its-vault/blob/master/files/aplogo/usage.doc&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;usage.doc&lt;/code&gt;&lt;/a&gt;: A brief summary of the commands. Undated,&#xA;and many of the commands in this appear not to exist in the versions&#xA;of Logo below. (The screen editor commands are &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12335/7208&quot;&gt;documented&#xA;here&lt;/a&gt;.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/PDP-10/its-vault/blob/master/files/aplogo/logo.958&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;logo.958&lt;/code&gt;&lt;/a&gt; (13451 lines): Seemingly the earliest&#xA;version, marked &amp;quot;Preliminary Version&amp;quot; and &amp;quot;Assembled 8/06/80.&amp;quot;&#xA;There's a disk image, &lt;a href=&quot;https://github.com/pneubauer/ptp2bin/raw/master/LOGO.dsk&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;LOGO.dsk&lt;/code&gt;&lt;/a&gt;, available in the&#xA;&lt;a href=&quot;https://github.com/pneubauer/ptp2bin/&quot; rel=&quot;nofollow noreferrer&quot;&gt;pneubauer/ptp2bin&lt;/a&gt; repo on GitHub that appears to be a build from&#xA;this source. (The README in that repo points to a different repo&#xA;that now has newer source, but this source is &lt;a href=&quot;https://github.com/PDP-10/its/blob/e3ba11ffbc1cc0e7932d3faff7472b56588b15fc/src/aplogo/logo.958&quot; rel=&quot;nofollow noreferrer&quot;&gt;in its&#xA;history&lt;/a&gt;.) This version seems to be a bit buggy; in my&#xA;testing it frequently crashed into the machine-language monitor.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/PDP-10/its-vault/blob/master/files/aplogo/nlogo.931&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;nlogo.931&lt;/code&gt;&lt;/a&gt; (13348 lines): Hard to tell if this is&#xA;earlier or later than &lt;code&gt;logo.958&lt;/code&gt;; it has the same &amp;quot;Assembled&amp;quot; date&#xA;embedded in it.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/PDP-10/its-vault/blob/master/files/aplogo/slogo.1&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;slogo.1&lt;/code&gt;&lt;/a&gt; (14858 lines): &amp;quot;Development version; Assembled&#xA;11/22/80.&amp;quot;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/PDP-10/its-vault/blob/master/files/aplogo/lsave.1300&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;lsave.1300&lt;/code&gt;&lt;/a&gt; (14445 lines): &amp;quot;Assembled&#xA;November 25, 1980.&amp;quot;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/PDP-10/its-vault/blob/master/files/aplogo/msave.6&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;msave.6&lt;/code&gt;&lt;/a&gt; (14480 lines): &amp;quot;Assembled December 18, 1980,&amp;quot;&#xA;&amp;quot;For MIT internal use only.&amp;quot;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/PDP-10/its-vault/blob/master/files/aplogo/nlogo.378&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;nlogo.378&lt;/code&gt;&lt;/a&gt; (13014 lines): &amp;quot;Assembled 11 June 1981,&amp;quot;&#xA;&amp;quot;For use at authorized test sites only.&amp;quot;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/PDP-10/its-vault/blob/master/files/aplogo/logo.299&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;logo.299&lt;/code&gt;&lt;/a&gt; (15018 lines): This seems to be the version&#xA;for which there are many &lt;a href=&quot;https://archive.org/details/MIT_LOGO_for_the_Apple_II_1981&quot; rel=&quot;nofollow noreferrer&quot;&gt;disk images&lt;/a&gt; on archive.org,&#xA;usually labeled &amp;quot;MIT LOGO for the Apple II&amp;quot; and sometimes &amp;quot;1.0&amp;quot;.&#xA;Contains &amp;quot;This version assembled 7/9/81.&amp;quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The &lt;code&gt;logo.299&lt;/code&gt; version has tail call optimization (or supports an&#xA;improbably large call stack of at least depth 5000). I wasn't able to&#xA;test the &lt;code&gt;logo.958&lt;/code&gt; version because I couldn't seem to get it to store&#xA;procedures correctly.&lt;/p&gt;&#xA;&lt;p&gt;The August 1982 &lt;em&gt;BYTE&lt;/em&gt; magazine has a review including the commercial&#xA;releases of these, &lt;a href=&quot;https://archive.org/details/byte-magazine-1982-08-rescan/page/n231&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Logo for the Apple II, the TI-99/4A, and the&#xA;TRS-80 Color Computer&amp;quot;&lt;/a&gt; (p.230). It covers the Apple Logo, Kriel&#xA;Logo and Terrapin Logo variations. Archive.org has an image of&#xA;&lt;a href=&quot;https://archive.org/details/TerrapinLogo104amCrack&quot; rel=&quot;nofollow noreferrer&quot;&gt;Terrapin Logo 1.0 (4am crack)&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If you need a version with more free nodes (heap, memory),&#xA;&lt;a href=&quot;https://archive.org/details/Apple_Logo_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple Logo II&lt;/a&gt; (1984) and its &lt;a href=&quot;https://archive.org/details/Apple_Logo_II_Reference_Manual_HiRes&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Apple Logo II Reference&#xA;Manual&lt;/em&gt;&lt;/a&gt; is the 128K Apple IIe/IIc descendent of these. And&#xA;Terrapin's later (3.0) &lt;a href=&quot;https://archive.org/details/TerrapinLogo3.0ForAppleII/page/n538&quot; rel=&quot;nofollow noreferrer&quot;&gt;LOGO for the Apple II Technical&#xA;Manual&lt;/a&gt; has some technical information about their&#xA;implementation that may be useful.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-17T04:05:29.990" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12332" PostTypeId="2" ParentId="12324" CreationDate="2019-09-16T17:46:31.610" Score="6" Body="&lt;p&gt;The Megadrive comes from an arcade machine lineage, it's cut-down Sega arcade machine hardware. The Amiga comes from a computer lineage, it's an evolution of the Atari 800, same designer, and many of the same features, just expanded. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Particularly, the Amiga, like most computers, deals with pixels. Better for things like line drawing, proportional text, and er anything you might want pixels for!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Megadrive deals in tiles. A tile is an 8x8 block of pixels. They are laid out in a grid of 40x30, as the background. Actually there are 2 background layers, 2 grids, for better effects. Parts of each layer can go on top of, or behind things, according to the game code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Master System and NES only had one background layer, so weren't as impressive. You can see that the Megadrive has two, in many games. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just one access to the tile table in graphics RAM lets you change any tile in the 40x30 grid. 64 pixels, 8x8, can be swapped out in an instant. The Amiga had to do that one at a time, though admittedly it had custom chips to help some things. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 2D arcade games tiles are a great thing. It's most of the reason why 80s and early 90s arcade machines had such an advantage over home computers, despite using processors that weren't much faster. It's the reason the SNES does so well, even though it's CPU has an 8-bit bus and runs at half the clock rate of the Megadrive's. The graphics chip does basically all the lifting, the CPU just sends it arrangements! By splitting the display into tiles, a processor can throw around graphics at an amazing rate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the CPU tells the graphics chip what pixels to put in each tile, often as the level is loading. Then it says which tiles to put in each location of the 2 background layers. Once each tile has been defined, to switch the tiles about is very quick. That's where the power is!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sprites go on top of the background. Or sometimes behind it, depending on priority! Sprites are made up of a grid of tiles. Each sprite has a table in RAM telling the graphics chip which tiles to use. A sprite can be moved around the screen, rather than staying fixed like the background does. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Megadrive's multiple layers of screen make parallax effects easy. If you want true parallax, ie per-scanline, that's also a hardware function, a program can add a horizontal offset, a different amount per scanline. Scroll each scanline at a different speed and you have parallax. All for free, done by the graphics chip. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are lots of interesting differences, but the important one is &quot;tile mapped&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do per-pixel access on a Megadrive, by storing your tiles in RAM, and altering a pixel of the relevant tile. If you lay your tiles on the screen in a fairly straightforward order, the formula to calculate what address your pixel is stored at isn't complicated. Still generally slower than a computer though. So there were few polygon games on 16-bit consoles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://megacatstudios.com/blogs/press/sega-genesis-mega-drive-vdp-graphics-guide-v1-2a-03-14-17&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://megacatstudios.com/blogs/press/sega-genesis-mega-drive-vdp-graphics-guide-v1-2a-03-14-17&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;is a very good guide to this, with lots of example screens from games with parts of each layer showing or removed, so you can see how it all adds up. Should tell you everything, and more, you need to know! And as a bonus you'll also understand the NES, SNES, Master System, MSX, and most old arcade boards too!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[I've edited this to make it a bit clearer, hope it helps!]&lt;/p&gt;&#xA;" OwnerUserId="14475" LastEditorUserId="14475" LastEditDate="2019-09-19T04:30:06.887" LastActivityDate="2019-09-19T04:30:06.887" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12333" PostTypeId="2" ParentId="12327" CreationDate="2019-09-16T18:12:08.467" Score="2" Body="&lt;p&gt;I can't answer the question &quot;what was the earliest microcomputer Logo implementation&quot;, but I can give some details on &lt;em&gt;one&lt;/em&gt; early microcomputer Logo implementation, namely MIT Logo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As ignos has outlined in his excellent answer, LOGO started as a simplified Lisp variant on a PDP-10 mainframe, and then was ported to microcomputers, among those the Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The source code for Apple II logo has &lt;a href=&quot;https://blog.adafruit.com/2018/10/04/the-apple-ii-source-code-for-the-logo-language-found/&quot; rel=&quot;nofollow noreferrer&quot;&gt;recently been found&lt;/a&gt;; it's available on &lt;a href=&quot;https://github.com/PDP-10/its/tree/master/src/aplogo&quot; rel=&quot;nofollow noreferrer&quot;&gt;github&lt;/a&gt;, and more files and variants are in a &lt;a href=&quot;https://github.com/PDP-10/its-vault/tree/master/files/aplogo&quot; rel=&quot;nofollow noreferrer&quot;&gt;sister repository&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that development all happened on a PDP-10 under ITS; it's cross-assembled to the Apple II, and it's complete enough you can &lt;a href=&quot;https://mobile.twitter.com/larsbrinkhoff/status/1047366585546149890&quot; rel=&quot;nofollow noreferrer&quot;&gt;run this&lt;/a&gt; on a PDP-10 emulator, then &lt;a href=&quot;https://github.com/pneubauer/ptp2bin/blob/master/aplogo.sh&quot; rel=&quot;nofollow noreferrer&quot;&gt;convert&lt;/a&gt; the resulting file to an Apple II disk image, and run this image in an emulator, for example online on &lt;a href=&quot;https://archive.org/details/MIT_LOGO_for_the_Apple_II_1981&quot; rel=&quot;nofollow noreferrer&quot;&gt;archive.org&lt;/a&gt; directly in your browser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how would the porting process work? You'd need to write a lisp-like interpreter, first for the core functions, then for the rest of the functions; finally you'd hit the space constraints of the microcomputer, and would have to make decisions which parts to keep; you'd tinker with the implementation to compact it and get a bit more space, or you'd add an overlay or paging system etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is of course conjecture to some degree, but if you've ever written programs yourself, you'll know there's not much choice in this. You can see traces of this in various of the files: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;DOC.187&lt;/code&gt; mentions three &quot;unwritten&quot; routines, &lt;code&gt;XFLOAT&lt;/code&gt;, &lt;code&gt;XINT&lt;/code&gt;, and &lt;code&gt;XFCOMP&lt;/code&gt; (which seem to be implemented in the actual code files), so that's the kind of non-core features you won't implement at first and add later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you compare &lt;code&gt;logo.958&lt;/code&gt; (older) with &lt;code&gt;logo.299&lt;/code&gt; (newer), you'll see &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;      LOGO:     $4000 - $95FF: $5600 bytes (21.5K bytes)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;versus&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;      LOGO:     $4000 - $977F: $57FF bytes (22.5K bytes, maximum) Logo code&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;so in the later stage the code has been tinkered with to allow for more space for the user-defined Logo code (while increasing the interpreter source code size from 209,446 bytes to 278,794 bytes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, LOGO isn't the only system which was ported from a mainframe to micros in this way (using some sort of virtual machine), two others are Zork and UCSD-Pascal (which ended up using paging and overlays, respectively, while LOGO didn't seem to have made this step).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, this LOGO variant ran on a Apple II with 48K and a language card (64K RAM total), no need for an 128K //e or //c. (And I know this from personal experience, because I used it back then on an Apple II).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you see, if you are &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;interested specifically in how much of the language could be made to run and how useful it could be in within the constrained resource environment (particularly memory) of early microcomputers, &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;you (a) cannot dismiss the mainframe code, and (b) cannot restrict yourself to the &quot;earliest&quot; implementation; lots of interesting things happen in the later implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, it probably would be very educating to compare this one to the PDP-11 implementation (also available in the github repositories mentioned) and the original PDP-10 lisp implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, &lt;em&gt;please&lt;/em&gt;, don't ask about &quot;what is the &lt;strong&gt;earliest&lt;/strong&gt; microcomputer implementation of X?&quot; if you are really interested in &quot;how do LOGO implementations on microcomputers deal with the resource restriction on micros?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are two completely different things. For the latter, you need the context (like all intelectual exercise, software development doesn't happen in a vacuum): both before (on non-microcomputers) and after (not the earliest variant).&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-09-16T18:12:08.467" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12334" PostTypeId="1" AcceptedAnswerId="12335" CreationDate="2019-09-17T03:42:09.537" Score="2" ViewCount="117" Body="&lt;p&gt;I'm playing with &lt;a href=&quot;https://archive.org/details/MIT_LOGO_for_the_Apple_II_1981&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIT LOGO for the Apple II (1981)&lt;/a&gt;. When I&#xA;type &lt;code&gt;TO GREET :NAME&lt;/code&gt; and hit ENTER it drops me into the &quot;MIT LOGO&#xA;screen editor.&quot; What are the commands I can use here to edit, save,&#xA;etc.?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-09-17T03:42:09.537" Title="What are the screen editor commands for MIT LOGO for the Apple II?" Tags="&lt;apple-ii&gt;&lt;logo-language&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12335" PostTypeId="2" ParentId="12334" CreationDate="2019-09-17T03:42:09.537" Score="4" Body="&lt;p&gt;This disk image is probably built from&#xA;&lt;a href=&quot;https://github.com/PDP-10/its-vault/blob/master/files/aplogo/logo.299&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;files/aplogo/logo.299&lt;/code&gt;&lt;/a&gt; in the&#xA;&lt;a href=&quot;https://github.com/PDP-10/its-vault&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;PDP-10/its-vault&lt;/code&gt;&lt;/a&gt; repo on GitHub.com, or very similar&#xA;source. That same directory has a documentation file,&#xA;&lt;a href=&quot;https://github.com/PDP-10/its-vault/blob/master/files/aplogo/usage.doc&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;usage.doc&lt;/code&gt;&lt;/a&gt;, but unfortunately that doesn't seem to&#xA;document the screen editor commands. (It also seems to document a&#xA;number of things not in that particular version of LOGO.)&lt;/p&gt;&#xA;&lt;p&gt;The commands are dispatched from a table called &lt;a href=&quot;https://github.com/PDP-10/its-vault/blob/master/files/aplogo/logo.299#L8081-L8140&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;EDSTBL&lt;/code&gt;&lt;/a&gt;,&#xA;which contains the ASCII character to match followed by the routine to&#xA;which to jump. They are as follows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;^A&lt;/code&gt;: Go to beginning of line&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^B&lt;/code&gt;: Go back one screen&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^C&lt;/code&gt;: Complete edit (save and exit)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^D&lt;/code&gt;: Delete char under cursor&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^E&lt;/code&gt;: Go to end of line&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^F&lt;/code&gt;: Go to next screen&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^G&lt;/code&gt;: Quit without saving&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;←&lt;/code&gt;, &lt;code&gt;^H&lt;/code&gt;: Move back one character&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^K&lt;/code&gt;: Delete to end of line (&amp;quot;Kill&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^L&lt;/code&gt;: Center current line on screen&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^M&lt;/code&gt;: Insert newline&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^N&lt;/code&gt;: Move down to next (logical) line&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^O&lt;/code&gt;: Insert a newline, leaving the cursor at the end of the&#xA;existing line (&amp;quot;Open&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^P&lt;/code&gt;: Move up to previous (logical) line&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;→&lt;/code&gt;, &lt;code&gt;^U&lt;/code&gt;:  Move forward one character&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ESC&lt;/code&gt;, &lt;code&gt;^[&lt;/code&gt;: Delete previous character&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Lines longer than 40 characters will be wrapped, with an exclamation&#xA;point &lt;code&gt;!&lt;/code&gt; displayed at in column 40 of the screen for all screen lines&#xA;but the last that are part of the logical line.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;RETRIEVE&lt;/code&gt; command from &lt;code&gt;usage.doc&lt;/code&gt;, to re-enter a screen editor&#xA;session abandoned with &lt;code&gt;^G&lt;/code&gt;, doesn't seem to exist in this version of&#xA;LOGO, but &lt;code&gt;EDIT&lt;/code&gt; (or &lt;code&gt;ED&lt;/code&gt;) with no argument does the same thing.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-17T03:42:09.537" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12336" PostTypeId="1" CreationDate="2019-09-17T04:05:17.687" Score="0" ViewCount="177" Body="&lt;p&gt;I'm using a TI-84+ and am trying to setup an equation that requires rounding up&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know how to round and round down with the TI-84 but I can't seem to figure out how to round up&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: the 'round down' function I mentioned isn't truly round down it's 'ipart' which gives you the integer portion of the number which for positive numbers does round down but for negative numbers rounds up which negates the suggestion of negate the number then round down then negate again&lt;/p&gt;&#xA;" OwnerUserId="15250" LastActivityDate="2019-09-17T07:05:05.880" Title="How do I round up on a TI-84+" Tags="&lt;calculator&gt;&lt;ti-83&gt;" AnswerCount="2" CommentCount="7" ClosedDate="2019-09-17T08:39:02.983" ContentLicense="CC BY-SA 4.0" />
  <row Id="12337" PostTypeId="2" ParentId="12336" CreationDate="2019-09-17T04:09:26.390" Score="1" Body="&lt;p&gt;Add one and then round down. But make sure the number is not &lt;em&gt;already&lt;/em&gt; an integer, because adding 1 and then rounding down would end up adding 1.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2019-09-17T04:09:26.390" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12339" PostTypeId="2" ParentId="12336" CreationDate="2019-09-17T06:53:23.750" Score="6" Body="&lt;p&gt;Aside from the &lt;code&gt;ipart&lt;/code&gt; function that you mention, there is also &lt;code&gt;int&lt;/code&gt; which, according to the manual, returns the largest integer smaller equal to the input, i.e. it truly rounds down.&#xA;You can use this to round &lt;em&gt;up&lt;/em&gt; with the expression &lt;code&gt;-int(-x)&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="13608" LastEditorUserId="13608" LastEditDate="2019-09-17T07:05:05.880" LastActivityDate="2019-09-17T07:05:05.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12341" PostTypeId="2" ParentId="5748" CreationDate="2019-09-17T22:58:35.170" Score="10" Body="&lt;p&gt;Generally speaking, Z80 is two to three times slower than 6502 since its fastest instruction is 4 cycles and 6502's is just 2. Then, if you take into account additional instruction bytes and memory addressing, Z80 looks like it's completely behind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But things in real life differs a bit. Z80 has more registers (7 primary, 7 secondary and 4 additional that are accessible via IX and IY halves) and a rather fast stack operations. Writing a complicated software like an operating system is much simplier on Z80 since you may use all registers anytime. And you need to share the zero page among all pieces of code on 6502. This reduces 6502's final performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fastest data copying is 10.5 cycles per byte on Z80 with no address limits using the stack pointer:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld HL, 16-bit-dataN&#xA;push HL&#xA;ld HL, 16-bit-dataN-1&#xA;push HL&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's rather inconvenient since the source data is interleaved with the 0x21 (ld HL) opcode but it was used in many ZX-Spectrum demos where the maximum performance was needed. On the other hand if you need a lot of inderect memory access within the relatively straightforward code (like software wave synthesizer), 6502 probably would be up to three times faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, finally, I'd say Z80 is about two times slower than 6502 if they are running on the same frequency. Or 4 MHz Z80 has about the same speed as 2 MHz 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But Z80 has other important advantages over 6502:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Built-in 7-bit DRAM regeneration. This allows using the standard CMOS DRAM like 4164 (up to 64 KBytes in total) with no additional regeneration circuitry and thus you won't have any additional delays needed for it in 6502.&lt;/li&gt;&#xA;&lt;li&gt;Any physical memory (or I/O port) access in Z80 lasts two clock cycles. This means that the RAM speed may be twice lower than the CPU speed with no additional delays.&lt;/li&gt;&#xA;&lt;li&gt;Z80 accesses the bus only when it needs to. So there are cycles when the CPU does not accesses the bus at all and they can be used for other hardware without any additional performance penalty.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;UPD. Thanks to @Raffzahn I checked 6502 bus cycles more precisely and found out that if it runs at 2 MHz it leaves 290 ns only for the memory to be read. I.e. it requires a 3.45 MHz memory. And it leaves only a half of the cycle (i.e. 250 ns) for the memory to be written to. This means that it really requires two times faster memory than its own clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z80 on the other hand waits 1.5 clocks when it reads instruction and 2 clocks when it reads or writes data. This allows 4 MHz Z80 to use 2.67 MHz memory for instruction fetching and 2 MHz memory for other operations. Since most memories perform write operation slowly than the read one, we can say that if we have a specific RAM we can use it with Z80 that runs four times faster than 6502. And since it was the RAM speed that was the bottleneck of computer building at times of Z80 and 6502, a computer with Z80 was faster. Also Z80 system benefited from hardware and software simplicity.&lt;/p&gt;&#xA;" OwnerUserId="15256" LastEditorUserId="15256" LastEditDate="2019-09-18T20:55:08.197" LastActivityDate="2019-09-18T20:55:08.197" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12342" PostTypeId="2" ParentId="2008" CreationDate="2019-09-18T10:46:09.853" Score="2" Body="&lt;p&gt;Memory may not have been quite so much of an issue as people were&#xA;making it out to be. Keep in mind that the base version of the&#xA;Altair 8800 (kit price $439) shipped with a &quot;1024 word&quot; (by which they&#xA;mean byte) memory board populated with only 256 bytes of RAM. If you&#xA;were willing to work with less, and in particular design your computer&#xA;to use RAM more efficiently than the 8080 did, you could build a&#xA;working system that could run basic, small programs. (I wonder how&#xA;many of the original Altair owners actually toggled in programs much&#xA;larger than a few dozen bytes, anyway?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One example of such a design is given by Hilary D Jones in &lt;a href=&quot;https://archive.org/details/byte-magazine-1977-11/page/n77&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Building&#xA;A Computer from Scratch&quot;&lt;/a&gt; (&lt;em&gt;BYTE&lt;/em&gt; magazine Vol 2 No 11,&#xA;Nov. 1977). It describes a small but complete system built from&#xA;entirely from TTL parts costing about $65 at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The memory used TI &lt;a href=&quot;https://panda-bg.com/datasheet/391-000089-TTL-7489-TI.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SN7489&lt;/a&gt; 64-bit RAM chips (offering 16×4-bit&#xA;registers); these were available by 1973. The configuration described&#xA;uses eight of these, giving 64 bytes of memory (the full address range&#xA;of the computer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All rest of the parts appear to be standard older ones (e.g., the&#xA;&lt;a href=&quot;http://www.ti.com/lit/ds/symlink/sn54ls181.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SN74181&lt;/a&gt; ALU slice) that were available by 1973 as well, except&#xA;probably the 74188 PROMs used for the microcontrol instruction store.&#xA;That could have been worked around by instead hardwiring the&#xA;instruction logic. That would probably not have been so difficult,&#xA;given that the computer had only four instructions!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this limited instruction set shows how appropriate design can save&#xA;on RAM. Unlike the 8080 (and even the 4004) which used multi-byte&#xA;instructions, all instructions for this CPU are single-byte:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00nnnnnn    WIO N   Wait for input to location N, displaying&#xA;                    current contents of N while waiting.&#xA;01nnnnnn    ADD N   Add data in location N to accumulator.&#xA;10nnnnnn    STN N   Store negative of accumulator in location N.&#xA;11nnnnnn    JGE N   Jump to location N if accumulator is greater&#xA;                    than or equal to zero.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Writing programs with this instruction set took some cleverness, but&#xA;it sure is compact!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even at the time, CPUs seemed to be considered by some to be a bit of&#xA;a black art. Jones says that it's not really so difficult:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...the design of a computer from the ground plane up is still&#xA;  generally regarded as an art that only the foolhardy would&#xA;  unkertake. In reality, though, the job is not nearly as mysterious&#xA;  as it seems. For proof I offer the fact that when I begain this&#xA;  project I had no design experience with TTL (or experience with any&#xA;  form of electronics design for that matter).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-09-18T10:46:09.853" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12343" PostTypeId="1" CreationDate="2019-09-18T11:19:13.560" Score="4" ViewCount="540" Body="&lt;p&gt;The term &amp;quot;1977 trinity&amp;quot; has been used, &lt;a href=&quot;https://retrocomputing.stackexchange.com/search?q=trinity&quot;&gt;here on Retrocomputing&#xA;SE&lt;/a&gt; and elsewhere, to refer to a set of three computers that&#xA;started shipping in mid- to late-1977: the Apple II, the TRS-80 Model&#xA;I and the Commodore PET 2001.&lt;/p&gt;&#xA;&lt;p&gt;This kind of term does not seem to have been unusual; the Japanese had&#xA;an almost identical one (allowing for cultural differences) by the&#xA;early '80s: 「&lt;a href=&quot;https://ja.wikipedia.org/wiki/8%E3%83%93%E3%83%83%E3%83%88%E5%BE%A1%E4%B8%89%E5%AE%B6&quot; rel=&quot;nofollow noreferrer&quot;&gt;御三家&lt;/a&gt;」 (&lt;em&gt;gosanke&lt;/em&gt;), referring to their&#xA;trinity of the Hitachi Basic Master, Sharp MZ-80K and NEC PC-8001.&#xA;(With the rise of 16-bit machines this term was later amended to&#xA;「8ビット御三家」, &lt;em&gt;hachi-bitto gosanke&lt;/em&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;Wikipedia mentions the &amp;quot;1977 trinity&amp;quot; in several places, but their&#xA;reference is to the &lt;a href=&quot;https://web.archive.org/web/20080618072507/http://www.byte.com/art/9509/sec7/art15.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;web version&lt;/a&gt; of a &lt;em&gt;BYTE&lt;/em&gt; magazine&#xA;article from almost twenty years later: &lt;a href=&quot;https://archive.org/details/byte-magazine-1995-09/page/n119&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Most Important&#xA;Companies&amp;quot;&lt;/a&gt; (&lt;em&gt;BYTE&lt;/em&gt; Vol 20 No 9, Sept. 1995, p.99). It says,&#xA;under &amp;quot;Commodore International&amp;quot; (p.100),&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But along with Apple and Tandy, it was one of the 1977 Trinity:&#xA;the three companies who brought out ready-to-run PCs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But I can't find any references to the term in contemporary issues of&#xA;&lt;em&gt;BYTE&lt;/em&gt;. Carl Helmers' column &lt;a href=&quot;https://archive.org/details/byte-magazine-1977-09/page/n7&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Reflections on Entry into Our Third&#xA;Year&amp;quot;&lt;/a&gt; (&lt;em&gt;BYTE&lt;/em&gt; Vol 2 No 9, Sept. 1977, p.6) says,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The &amp;quot;appliance&amp;quot; computer, a complete system presented in an&#xA;assembled and tested package is on the threshold of its ultimate&#xA;dominance in the general purpose personal computer field: from the&#xA;high end, moving down in price, we find products like the Apple-II&#xA;and the Commodore PET 2001 machines....&lt;/p&gt;&#xA;&lt;p&gt;The last half of 1977 represents the entry of several relatively&#xA;large concerns into the marketplace, in the form of Heathkit this&#xA;summer and Commodore soon to follow. Rumors have it that companies&#xA;ranging from Atari...to Radio Shack and Texas Instruments are in the&#xA;process of developing general purpose systems appropriate for&#xA;personal computing uses.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No other computer, much less &amp;quot;trinity,&amp;quot; is mentioned in &lt;em&gt;BYTE&lt;/em&gt;'s&#xA;coverage of the PET announcement, &lt;a href=&quot;https://archive.org/details/byte-magazine-1977-10/page/n51&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Commodore's New PET&#xA;Computer&amp;quot;&lt;/a&gt; (&lt;em&gt;BYTE&lt;/em&gt; Vol 2 No 10, Oct. 1977, p.50), or the TRS-80&#xA;announcement, &lt;a href=&quot;https://archive.org/details/byte-magazine-1977-11/page/n45&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;The TRS-80: Radio Shack's New Entry&amp;quot;&lt;/a&gt; (&lt;em&gt;BYTE&lt;/em&gt; Vol&#xA;2 No 11, Nov. 1977, p.446).&lt;/p&gt;&#xA;&lt;p&gt;A quick scan of the tables of contents of &lt;em&gt;BYTE&lt;/em&gt; from September to&#xA;December of that year shows nothing else that looks like it would&#xA;mention this &amp;quot;trinity,&amp;quot; either.&lt;/p&gt;&#xA;&lt;p&gt;So was this term really first coined in 1995, or were people using it&#xA;earlier?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-18T11:19:13.560" Title="What's the first use of the term, &quot;1977 Trinity&quot;?" Tags="&lt;apple-ii&gt;&lt;commodore-pet&gt;&lt;trs-80&gt;" AnswerCount="0" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="12344" PostTypeId="2" ParentId="5791" CreationDate="2019-09-18T16:08:02.410" Score="10" Body="&lt;p&gt;Radio Shack product names not infrequently differed from country to&#xA;country, even if only subtly. This answer covers only U.S. naming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But yes, the TRS-80 Model I was sold new under that name and always&#xA;used the Roman numeral. This happened only after the Model II was&#xA;released, and the full name including &quot;Model I&quot; was not used&#xA;consistently.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;1979&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1979/h176.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zO8PD.jpg&quot; alt=&quot;1979 back page&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1979/h079.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/173sQ.jpg&quot; alt=&quot;1979 p.79&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In their U.S. catalogs through 1979, before the introduction of the&#xA;Model II, the Model I was always referred to only as the&#xA;&quot;TRS-80™ computer.&quot; See, for example, the &lt;a href=&quot;http://www.radioshackcatalogs.com/html/1979/h176.html&quot; rel=&quot;noreferrer&quot;&gt;back page&lt;/a&gt; and&#xA;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1979/h079.html&quot; rel=&quot;noreferrer&quot;&gt;page 79&lt;/a&gt; of the 1979 catalog, the latter headlined &quot;The&#xA;Breakthrough Radio Shack TRS-80™ Computer!&quot;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;1980&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1980/h176.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7MtrD.jpg&quot; alt=&quot;1980 back page&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1980/h170.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FTRs8.jpg&quot; alt=&quot;1980 page 170&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1980/h174.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MxS22.jpg&quot; alt=&quot;1980 page 174&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1980/h175.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ePIvw.jpg&quot; alt=&quot;1980 page 175&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the introduction of the Model II, Radio Shack starts using the&#xA;term &quot;Model I&quot; sometimes, but not always, and usually only when a&#xA;Model II is nearby.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.radioshackcatalogs.com/html/1980/h176.html&quot; rel=&quot;noreferrer&quot;&gt;back page&lt;/a&gt; of the 1980 catalog has an inset headlined&#xA;&quot;New Low Price on Model I.&quot; However, at the computer section of the&#xA;catalog starts on &lt;a href=&quot;http://www.radioshackcatalogs.com/html/1980/h170.html&quot; rel=&quot;noreferrer&quot;&gt;page 170&lt;/a&gt; with the Model I but always&#xA;called simply the &quot;TRS-80™ Computer&quot; or &quot;TRS-80.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This continues through the next three pages until we get to printers&#xA;on &lt;a href=&quot;http://www.radioshackcatalogs.com/html/1980/h174.html&quot; rel=&quot;noreferrer&quot;&gt;page 174&lt;/a&gt;, where the page is headlined &quot;Add Printed Output&#xA;to Your Model I or II TRS-80.&quot; Yet even there the product lines have&#xA;things like &quot;Cable for TRS-80 Expansion Interface&quot; listed next to&#xA;&quot;Cable for TRS-80 Model II.&quot; (Arguably, that's fine because there was&#xA;no Expansion Interface for the Model II, only the Model I.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even on &lt;a href=&quot;http://www.radioshackcatalogs.com/html/1980/h175.html&quot; rel=&quot;noreferrer&quot;&gt;page 175&lt;/a&gt;, where the catalog moves on to the Model&#xA;II, the headline is &quot;Meet the TRS-80's Big Brother!&quot; though it&#xA;eventually goes on to use &quot;Model I&quot; in the text, mostly:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...whose capabilities &lt;em&gt;begin&lt;/em&gt; where the TRS-80 Model I approaches&#xA;  upper limits. Model II operates at twice Model I's speed, but it's&#xA;  not intended to replace — or compete with — the original TRS-80.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;1981&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1981/h176.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fFW5m.jpg&quot; alt=&quot;1981 back cover&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1981/h169.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/A7PwW.jpg&quot; alt=&quot;1981 page 169&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1981/h170.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XIb9m.jpg&quot; alt=&quot;1981 page 170&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1981/h171.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uMmM5.jpg&quot; alt=&quot;1981 page 171&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By 1981 the term &quot;TRS-80&quot; refers to Radio Shack's entire line of&#xA;computers, not just the Model III but also the CoCo and the Pocket&#xA;Computer (PoCo?), all of which were introduced that year. The&#xA;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1981/h176.html&quot; rel=&quot;noreferrer&quot;&gt;back cover&lt;/a&gt; of the 1981 catalog has no reference at all to&#xA;the Model I, but displays pictures and descriptions of the &quot;TRS-80&#xA;Color Computer,&quot;, &quot;TRS-80 Model III&quot; and &quot;TRS-80 Pocket Computer&quot;&#xA;under the headline &quot;Radio Shack Introduces a Whole New World of&#xA;&lt;em&gt;Affordable&lt;/em&gt; TRS-80™ Computer Systems.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer section of the catalog starts on &lt;a href=&quot;http://www.radioshackcatalogs.com/html/1981/h169.html&quot; rel=&quot;noreferrer&quot;&gt;page 169&lt;/a&gt; with&#xA;a page devoted entirely to the Model I, but the headline &quot;The&#xA;Amazingly Expandable TRS-80™.&quot; Below this, however, the product&#xA;description uses &quot;TRS-80 Model I&quot; (twice). Usage varies throughout the&#xA;page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next page, &lt;a href=&quot;http://www.radioshackcatalogs.com/html/1981/h170.html&quot; rel=&quot;noreferrer&quot;&gt;page 170&lt;/a&gt;, introduces the successor to the&#xA;Model I, headlined &quot;The New Model III.&quot; The description compares it&#xA;with &quot;Model I,&quot; and &quot;Model III&quot; is used as a qualifier throughout on&#xA;accessories such as disk drives that work only on the Model III.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1981/h171.html&quot; rel=&quot;noreferrer&quot;&gt;Page 171&lt;/a&gt; is headlined &quot;TRS-80 Model I &amp;amp; III Software,&quot; and&#xA;stating that &quot;All programs will work on Model I or Model III unless&#xA;otherwise noted.&quot; Just a few items have &quot;Mod I only&quot; beside them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the rest goes on in that vein.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;1982&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.radioshackcatalogs.com/html/1982/h172.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YvZVc.jpg&quot; alt=&quot;1982 page 172&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By 1982 the Model I itself is no longer in the catalog, though there&#xA;is a small section of &quot;TRS-80 Model I Accessories&quot; on &lt;a href=&quot;http://www.radioshackcatalogs.com/html/1982/h172.html&quot; rel=&quot;noreferrer&quot;&gt;page&#xA;172&lt;/a&gt;. The software page still offers &quot;The Growing Library of&#xA;TRS-80 Model I &amp;amp; III Software,&quot; but &quot;Mod I only&quot; software is gone.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-18T16:51:39.897" LastActivityDate="2019-09-18T16:51:39.897" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12345" PostTypeId="2" ParentId="12283" CreationDate="2019-09-18T16:38:26.883" Score="1" Body="&lt;p&gt;I remember that was a fix advised for the Amiga 500, I can only find this (not very good) &lt;a href=&quot;http://theweeks.org/toms-stuff/files/TDTTS_reseat_agnus.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;reference from 1996&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[Amiga Tech Secret: One of Commodore's authorized &quot;checks&quot; for a &quot;mis-seated&#xA;   A500 agnus&quot; was to power off a green screen machine, lift it 6-8 inches above the &#xA;  bench, and drop it FLAT onto the bench top, (thus using inertia)  partially &#xA;  reseating/jostling the agnus, powering it back on and seeing if the symptom changes!&#xA;  THAT'S the kind of trouble shooting that goes on out of the customers sight...&#xA;   why do you think most tech centers do all their work in a back room behind a closed &#xA;  door? Scaaaary stuff eh?!?! hehehe... You should see the stuff AUDIO techs do! ;v) ]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am not sure if Commodore recommended it...&lt;/p&gt;&#xA;" OwnerUserId="11305" LastEditorUserId="15279" LastEditDate="2019-09-21T20:20:43.643" LastActivityDate="2019-09-21T20:20:43.643" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12346" PostTypeId="1" AcceptedAnswerId="12350" CreationDate="2019-09-19T01:36:22.970" Score="14" ViewCount="4268" Body="&lt;p&gt;I'm quite unfamiliar with how operating systems used to be written but its clear to me that operating systems were clearly written for these systems. I'm particularly interested in how operating systems were written for systems like the 6502 like Apple DOS. A modern operating system's responsibilities seem to (greatly simplified) entail the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Provide automatic switching between processes. The standard trick here is to have a clock attached to an interrupt that the OS can use to perform a context switch. This seems doable on the 6502 with the correct external hardware.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Ensure not only that a process can't access other processes' memory but that a process can't access the operating system's memory. If we assume that all memory is written to disk on a context switch, it isn't so hard to isolate one process from another but it doesn't seem clear to me how the operating system protects itself on the 6502 or PDP-11. The oldest method of accomplishing this that I'm aware of is segmentation which also provides RWX permissions as well, a thing that I wouldn't even begin to expect on something like the 6502. Surely there has to be some set of privileged instructions or some mechanism to ensure that an errant process can't break the system, right? It seems it would be sufficient to ensure that there was some space in memory that could be accessed (written and executed) during an interrupt that couldn't be accessed outside of an interrupt.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Manage drivers for external hardware. This seems pretty doable since interrupt tables exist.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15259" LastEditorUserId="6794" LastEditDate="2019-09-25T23:30:30.707" LastActivityDate="2019-10-31T22:16:58.050" Title="Late 1970s and 6502 chip facilities for operating systems" Tags="&lt;apple-ii&gt;&lt;6502&gt;&lt;operating-system&gt;&lt;software-development&gt;&lt;apple-dos&gt;" AnswerCount="12" CommentCount="13" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12347" PostTypeId="2" ParentId="12346" CreationDate="2019-09-19T02:05:40.817" Score="33" Body="&lt;p&gt;The simple answer is that early operating systems for the systems you mention did not provide those features.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple DOS, for example, makes no use of interrupts, and has no concept of processes or memory protection.  Nor does DOS have any concept of hardware drivers, as it includes support to drive the Disk II (a deep assumption in DOS) and nothing else.  Apple DOS doesn't even have a proper shell, instead hooking into BASIC to intercept commands.  Ultimately, Apple DOS is little more than some subroutines for disk IO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ProDOS is a bit more sophisticated, with the concept of device drivers to provide a general interface to block and character devices.  Still no processes, protection, or shell though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is typical of most early 8-bit systems including those beyond the Apple II.  For example, CP/M 2.2 is quite similar.  While CP/M had some features like a separate shell, beyond that it really only provides some utilities and disk and console IO.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2019-09-19T02:05:40.817" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12348" PostTypeId="2" ParentId="12346" CreationDate="2019-09-19T02:06:00.643" Score="18" Body="&lt;p&gt;We talk about the late 1970s and mainstream 6502 machines, right? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't so much that programs run under OS control as that OS was a support function to Programs. More like what we would today see as a standard library with routines supporting simple I/O abstraction plus basic file handling on the user side and hard coded drivers within. Some, like Apple DOS provided only the file handling part. Features like memory management were rare. Memory protection ot loadable drivers were basically unheard of due missing hardware support and more important, missing RAM size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is true for next to all OS including PC-DOS - which can be seen as one of the most advanced offspring, as it did offer some of the features you mentioned.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;1) Provide automatic switching between processes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are no processes in these old system. They are single user, single task, single program.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2) Ensure not only that a process can't access other processes memory but that a process can't access the operating system's memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There was no memory protection. Not even between OS and user&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If we assume that all memory is written to disk on context switch&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again, No context switch - there wasn't anything to switch. Not to mention that an Apple II had 64 or more KiB of memory, while the Disk II offered 143 KiB of storage - not much room to swap out a process anyway.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Surely there has to be some set of privileged instructions or some mechanism to ensure that an errant process can't break the system, right? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nope. Again, no processes, no support for such and no need as well.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;3) Manage drivers for external hardware.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nop. There were no manageable drivers. Drivers were hard build into the OS/BIOS. o way to add such or alike.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This seems pretty doable since interrupt tables exist.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, they didn't. At least not as easy. The 6502 had only one interrupt, and if all, it had to be chained. The Apple II had no provision for cooperative interrupt support. While some standard evolved later on, it was always more of a hack than a solution. Similar for other 6502 Systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While there were very few more advanced systems, &lt;em&gt;What you have in mind are solutions for problems that didn't exist back then on most of systems.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later OS (like ProDOS) added some of the rudimentary features like mentioned (basic Memory management interrupt handling, even basic driver detection), but still stayed true to the original &lt;strong&gt;one man, one machine, one program dogma&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-20T11:05:43.193" LastActivityDate="2019-09-20T11:05:43.193" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12349" PostTypeId="2" ParentId="12346" CreationDate="2019-09-19T03:17:13.517" Score="10" Body="&lt;p&gt;Contemporary operating systems for the 6502 did not have those features. But not because they couldn't. It just wasn't considered necessary or desirable.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Provide automatic switching between processes. The standard trick here&#xA;  is to have a clock attached to an interrupt that the OS can use to&#xA;  perform a context switch. This seems doable on the 6502 with the&#xA;  correct external hardware.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, this is quite easy to do. But with limited RAM and no GUI, pre-emptive multitasking isn't much use.  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Ensure not only that a process can't access other processe's memory&#xA;  but that a process can't access the operating system's memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Memory protection could be achieved using an external MMU, which in a simple implementation could just be bank switching. But why have it? So long as programs behave there's no reason not to let them access all the memory, and good reasons to allow it.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If we assume that all memory is written to disk on context switch it&#xA;  isn't so hard to isolate one process from another...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Using floppy disks? Only if you don't mind slowing down to a crawl...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but it doesn't seem clear to me how the operating system protects&#xA;  itself on the 6502&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It doesn't. However if the OS code is stored in ROM it only takes a second to reboot if the RAM gets corrupted. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Surely there has to be some set of privileged instructions or some&#xA;  mechanism to ensure that an errant process can't break the system,&#xA;  right?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why? Much easier (and more efficient) to just ensure that errant processes don't exist in the first place.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It seems it would be sufficent to ensure that there was some space in&#xA;  memory that could be accessed (written and executed) during an&#xA;  interrupt that couldn't be accessed outside of an interrupt.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Perhaps. But when you have a slow CPU, limited RAM, low resolution screen etc. it makes more sense to just let the current 'process' access everything.     &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many features of modern operating systems that we consider 'essential' today are only relevant to modern hardware and applications. Security was a non-issue when you didn't have the Internet and the computer was truly 'personal'. When the machine could barely run &lt;em&gt;one&lt;/em&gt; process at an acceptable speed, you didn't want to load it up with multiple tasks running at the same time. You certainly didn't want virtual memory when the disk drive had access times in the seconds range, and if you just wanted to play games...&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-09-19T03:17:13.517" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12350" PostTypeId="2" ParentId="12346" CreationDate="2019-09-19T03:31:35.953" Score="29" Body="&lt;p&gt;For &amp;quot;home&amp;quot; computer systems such as the Apple II, the &amp;quot;operating&#xA;system&amp;quot; wasn't anything like a modern one with processes and device&#xA;drivers and so on; by the standards of modern OSes there wasn't really&#xA;one at all.&lt;/p&gt;&#xA;&lt;p&gt;As a warning: all these explanations (long as they are) are for the&#xA;most part considerably simplified. This answer is intended to give you&#xA;the general sense of how things worked, but you should ask separate,&#xA;more specific questions if you need to know the exact details.&lt;/p&gt;&#xA;&lt;h3&gt;The &amp;quot;BASIC&amp;quot; System&lt;/h3&gt;&#xA;&lt;p&gt;The most common &amp;quot;operating system&amp;quot; of late-70s/early-80s, home&#xA;computers, especially starting with the &amp;quot;1977 trinity&amp;quot; of the Apple&#xA;II, Commodore PET 2001, and TRS-80 Model I, was the BASIC interpreter.&#xA;Here you could type in either line numbers followed by BASIC code or&#xA;&amp;quot;direct&amp;quot; commands, which along with many regular BASIC commands&#xA;(&lt;code&gt;PRINT&lt;/code&gt;, &lt;code&gt;LET&lt;/code&gt;, etc.) would usually include commands such as &lt;code&gt;LOAD&lt;/code&gt;&#xA;and &lt;code&gt;SAVE&lt;/code&gt;. This was just as single process with full access to and&#xA;control over all aspects of the hardware.&lt;/p&gt;&#xA;&lt;p&gt;Typically the binary code (in ROM or RAM) wasn't entirely monolithic.&#xA;Generally it consisted of two parts. The BIOS (Basic Input Output&#xA;System) or KERNAL (if you were Commodore and couldn't spell) had&#xA;low-level routines that dealt with things such as input/output and&#xA;other handling of devices. The BASIC interpreter itself, most often&#xA;provided by Microsoft, would handle most higher-level stuff and talk&#xA;to the BIOS to interact with the hardware. The line here was pretty&#xA;hazy, though, and it was quite normal for BASIC programs to directly&#xA;&lt;code&gt;PEEK&lt;/code&gt; and &lt;code&gt;POKE&lt;/code&gt; the hardware or directly call machine-language&#xA;routines to do what they wanted to get done.&lt;/p&gt;&#xA;&lt;p&gt;The BIOS could be as simple as a few routines to check for, read and&#xA;write a character from/to an attached terminal or considerably more&#xA;sophisticated.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Simple Example: Altair&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;One of the simplest examples of a BIOS was the 1975 &lt;a href=&quot;http://www.swtpc.com/mholley/Altair/PROM_LST.TXT&quot; rel=&quot;noreferrer&quot;&gt;Altair 680 PROM&#xA;Monitor&lt;/a&gt;. This provided &lt;code&gt;POLCAT&lt;/code&gt; (check for character&#xA;available), &lt;code&gt;INCH&lt;/code&gt; (read character) and &lt;code&gt;OUTCH&lt;/code&gt; (print character)&#xA;routines used by both itself and BASIC, and a few simple commands for&#xA;examining and depositing values to memory, loading memory from a paper&#xA;tape, and jumping to a memory location to start a program, all in 256&#xA;bytes. This would be used to load &lt;a href=&quot;http://www.swtpc.com/mholley/Altair/Altair_Basic.htm&quot; rel=&quot;noreferrer&quot;&gt;Altair BASIC&lt;/a&gt; (which&#xA;expected &lt;code&gt;POLCAT&lt;/code&gt;, &lt;code&gt;INCH&lt;/code&gt; and &lt;code&gt;OUTCH&lt;/code&gt; to be at specific addresses in&#xA;memory) from paper tape and start it, at which point that would be&#xA;doing everything you could do. (If it had LOAD and SAVE commands,&#xA;those would have been built directly into the BASIC binary. But if you&#xA;weren't so lucky to have a cassette tape interface and a BASIC that&#xA;knew how to use it, you would &amp;quot;save&amp;quot; your program merely by typing&#xA;&lt;code&gt;LIST&lt;/code&gt;, turning on the paper tape punch on your Teletype, and hitting&#xA;Return.)&lt;/p&gt;&#xA;&lt;p&gt;If you didn't have any ROM at all in your system, even the &lt;code&gt;INCH&lt;/code&gt; etc.&#xA;routines would have been &amp;quot;baked in&amp;quot; to the BASIC itself, and you'd&#xA;toggle in a small routine to load the tape and run it, as demonstrated&#xA;in &lt;a href=&quot;https://www.youtube.com/watch?v=8InWiihlIQw&quot; rel=&quot;noreferrer&quot;&gt;this Altair 8800 video&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sophisticated Example: Commodore&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;At the other extreme, Commodore from the start had split their&#xA;software into two parts. The &lt;a href=&quot;https://en.wikipedia.org/wiki/KERNAL&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;KERNAL&amp;quot;&lt;/a&gt;, usually in its own 8K&#xA;ROM, was a fairly sophisticated I/O core that handled regular keyboard&#xA;scanning via interrupts, had a longish list of routines to do I/O, and&#xA;even had a concept of device-independent I/O. For example, you could&#xA;open/setup devices 1 (cassette), 3 (screen), 4 (printer) and 8&#xA;(diskette drive), assigning them file numbers of your choice, and use&#xA;the same &lt;code&gt;CHROUT&lt;/code&gt; routine with all of them, passing it the file&#xA;number. &lt;code&gt;CHROUT&lt;/code&gt; would, based on the file number, find the correct&#xA;device and use the correct &amp;quot;device driver&amp;quot; for each of these.&lt;/p&gt;&#xA;&lt;p&gt;Commodore's version of Microsoft BASIC, in its own 8K ROM, was then&#xA;built on top of this and the BASIC &lt;code&gt;LOAD&lt;/code&gt; &lt;code&gt;OPEN&lt;/code&gt;, &lt;code&gt;PRINT&lt;/code&gt; etc.&#xA;commands let you specify the device numbers or logical file numbers&#xA;assigned with &lt;code&gt;OPEN&lt;/code&gt; to do I/O to various devices via the KERNAL.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;quot;Had to Hack It&amp;quot; Example: Apple II&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Apple II did have a logical split between the &amp;quot;monitor ROM&amp;quot; and&#xA;the BASIC ROM, but it wasn't as well planned out as the Commodore&#xA;version and, in particular, it didn't start with much support for&#xA;devices beyond the keyboard, screen and cassette. The system design&#xA;did provide for code in ROM on each card intended to handle input and&#xA;output, callable with the BASIC &lt;code&gt;INPUT&lt;/code&gt; and &lt;code&gt;PRINT&lt;/code&gt; statements, but&#xA;this was fairly limited. So when DOS came along it had to wedge itself&#xA;between the BASIC and the BIOS without any real coöperation from&#xA;either.&lt;/p&gt;&#xA;&lt;p&gt;It did this by having a &amp;quot;print&amp;quot; routine in ROM to start the bootstrap&#xA;process (thus the famous &lt;code&gt;PR#6&lt;/code&gt; to boot a disk). This would load in&#xA;DOS from disk and run its initialization routine, which in turn would&#xA;replace some vectors that let it intercept keyboard input and screen&#xA;output. So after booting, when you typed a command at the BASIC prompt&#xA;it would first be checked by DOS to see if it was a DOS command. If it&#xA;was one, like &lt;code&gt;CATALOG&lt;/code&gt;, DOS would execute it, print the output and&#xA;return you to the prompt. If not, the input line would be passed on to&#xA;BASIC which would execute your &lt;code&gt;LIST&lt;/code&gt; command or whatever you gave it.&lt;/p&gt;&#xA;&lt;p&gt;While this worked for interactive commands, BASIC had no facilities&#xA;for calling DOS. So DOS hooked into the screen output routines as well&#xA;and you'd use an escape character, Ctrl-D at the start of an output&#xA;line, to inform DOS that it should treat output as a command. Thus, to&#xA;print a list of the files on the disk from BASIC you'd use something&#xA;like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;100 PRINT CHR$(4);&amp;quot;CATALOG&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If you wanted to read or write a file, this would have to be done by&#xA;changing the source or destination of the standard input and output&#xA;routines via a sequence of commands like the one above. This of course&#xA;meant that you couldn't get input from the user or print to the screen&#xA;while you had a file open for input or output.&lt;/p&gt;&#xA;&lt;h3&gt;Other Operating Systems&lt;/h3&gt;&#xA;&lt;p&gt;There were other systems not oriented around BASIC (and not used so&#xA;much on &amp;quot;home&amp;quot; computers) that are much closer to what you'd think of&#xA;as a &amp;quot;real OS&amp;quot; today. The most famous of these is CP/M, but there was&#xA;also North Star DOS and a few others. These provided a a core set of&#xA;&amp;quot;system calls&amp;quot; to do disk and terminal I/O and a few programs that ran&#xA;on top of them, such as a command-line interpreter, a program to copy&#xA;files, and so on. These would be used to launch your applications&#xA;(word processor, editor, assembler, the assembly-language program&#xA;you'd written) in a way much like you do today when using a&#xA;command-line interface. But once running, they were still a single&#xA;process with no real separation (other than what the programmer&#xA;desired) between the application code and the OS code, or even the&#xA;hardware.&lt;/p&gt;&#xA;&lt;p&gt;In 1979 Microware introduced &lt;a href=&quot;https://en.wikipedia.org/wiki/OS-9&quot; rel=&quot;noreferrer&quot;&gt;OS-9&lt;/a&gt; on the Motorola 6809, which did&#xA;support multiple processes (using co-operative multitasking) and many&#xA;other modern features. But for various reasons (high pricing as&#xA;mentioned by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4138/richf&quot;&gt;RichF&lt;/a&gt; below, using a less popular—in the U.S.,&#xA;anyway—processor), it started out as a niche product. Though these&#xA;problems were addressed (including a port to the very popular 68000)&#xA;it never really overcame this, probably because by the time these&#xA;problems were finally getting worked out we were on significantly&#xA;larger machines and could get something even closer to a &amp;quot;real&amp;quot; Unix,&#xA;such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Coherent_(operating_system)&quot; rel=&quot;noreferrer&quot;&gt;Coherent&lt;/a&gt; or maybe even Xenix.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-20T04:44:51.003" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12351" PostTypeId="2" ParentId="12346" CreationDate="2019-09-19T03:55:36.783" Score="13" Body="&lt;p&gt;The typical circa-1980 8-bit CPU provided almost no support for modern operating system features.  It was often possible to add such support using external logic, but very few machines actually did so because it would have added costs to the hardware with little practical benefit.  Even many minicomputers of the time left those features out, at least in the cheaper models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was considered a major advance, for example, when the 68030 and the i80386 arrived with built-in MMUs in the mid-1980s.  The MMU is what enabled memory paging and protection, a central feature in any modern OS.  Prior to that, the nearest equivalent was the 65551 which was an external MMU for the 68020.  Even then, it was many years before home-computer operating systems actually made good use of those features, as they had been designed around &lt;em&gt;not&lt;/em&gt; having them, and there were still many older computers which had to be supported.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may, however, be interested in the BBC Micro and its MOS operating system.  The BBC Micro's hardware is not particularly special, but it does have a built-in mechanism to map any of 16 ROMs onto the $8000-$BFFF segment, and with a common hardware mod, it was also possible to put paged RAM there.  This was the basis for providing floppy-disk and network support as loadable drivers, as well as alternative languages and applications.  The BBC Master embraced this mechanism even further.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was also possible to extend the BBC Micro with a primitive user/system distinction, in the form of the Second Processor module.  This was actually a complete extra 6502 CPU and 64KB RAM set which communicated with the &quot;host&quot; machine over a ribbon cable called the &quot;Tube&quot;.  Application code would then run on the external CPU (which was faster and had much more usable RAM available) while the BBC Micro itself took care of such drudgery as keyboard, display, and disk handling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was possible because not only did MOS have something resembling a coherent system-call API, but those calls were automatically sent over the Tube by the Second Processor's firmware to be processed.  But there was very little &lt;em&gt;hardware&lt;/em&gt; support involved.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-09-19T03:55:36.783" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12352" PostTypeId="2" ParentId="12346" CreationDate="2019-09-19T12:05:54.493" Score="3" Body="&lt;p&gt;I have done this with an 8051, (8 bit running about same speed as 6502)  with a 4 task scheduler, driven by interrupts, task switching at about 10Hz.&lt;br&gt;&#xA;Reading position from NMEA on a GPS, sending and receiving GSM SMS messages, logging data to flash. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;No memory protection at all.  Running in something like 1k RAM and 32k of ROM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Used a combination of preeemptive and cooperative multitasking to allow more than 4 tasks in total while only ever having 4 live tasks. &lt;/p&gt;&#xA;" OwnerUserId="15263" LastActivityDate="2019-09-19T12:05:54.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12353" PostTypeId="2" ParentId="11754" CreationDate="2019-09-19T12:52:05.553" Score="7" Body="&lt;p&gt;The latest research shows that while writes are properly defined (ignored), reads are not. tl;dr: You will get a value with some bits reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Slightly more expanded: The behavior is open-bus with semi-weak pull-ups.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The long way around:&#xA;The cartridge appears not to react at all, leaving the data bus (think of it as a temporary location for all bytes going in and out of the CPU) unchanged. The CPU normally has pull-up resistors which should set all the bits to 1, but it appears that they are a tad too weak to guarantee doing their job on time: some 0 bits might still be at 0. (gekkio even joked that this behavior can depend on room temperature)&#xA;Note that the cartridge might have pull-ups of its own which would guarantee $FF to be read; however, RAM-less cartridges (Tetris...) have no circuitry to handle $A000-BFFF, and so the behavior ends up being as described above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the bus is also used for the instruction bytes the CPU reads, so the value read also depends on which instruction you used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an emulator implementation, returning $FF is &quot;good enough&quot;, implementing the behavior described above might be better, but the best thing to do is to provide a toggleable warning for developers. (For example, BGB does this.)&lt;/p&gt;&#xA;" OwnerUserId="15264" LastActivityDate="2019-09-19T12:52:05.553" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12354" PostTypeId="2" ParentId="5013" CreationDate="2019-09-19T15:56:20.883" Score="2" Body="&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5014/7208&quot;&gt;Raffzahn points out&lt;/a&gt;, because memory can be bank-switched in&#xA;the address space available to cartridges, the maximum size is limited&#xA;only by the intersection between the technology available and how&#xA;expensive and physically large you're willing to make the cartridge,&#xA;and how you're willing to power it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nonetheless, you're probably thinking of cartridges of standard size&#xA;that use no more power than can be provided by the cartridge port. As&#xA;you point out, by the later age of 16-bit game systems, these had&#xA;progressed into the megabyte range, but this was certainly possible on&#xA;virtually any earlier system, within the limits of the memory chips&#xA;available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you mention the Commodore 64, I will give you here the example&#xA;of the &lt;a href=&quot;http://www.multimax.co/hardware/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MultiMAX cartridge&lt;/a&gt;. This is designed for the the &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_MAX_Machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;MAX&#xA;Machine&lt;/a&gt;, a predecessor to the C64 that (RAM size aside) is very&#xA;similar to the C64, and this cartridge can indeed be played on the C64&#xA;as well. The MultiMAX contains the contents of every cartridge ever&#xA;released by Commodore for the MAX:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tzm2Z.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tzm2Z.png&quot; alt=&quot;MultiMAX menu screen&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The MAX was clearly not too successful a computer; in fact there's&#xA;plenty of unused space left in the cartridge.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MultiMAX contains a one megabyte EPROM and a few other simple&#xA;chips. Though the EPROM, an &lt;a href=&quot;https://datasheet.octopart.com/M27C801-100B1-STMicroelectronics-datasheet-5665.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;STM Microelectronics MC27C801&lt;/a&gt;,&#xA;dates from 2006, everything else in the cartridge was available back&#xA;in 1982 when the MAX was first released. By 1985 &lt;a href=&quot;https://maltiel-consulting.com/Semiconductor_technology_memory.html#nvram&quot; rel=&quot;nofollow noreferrer&quot;&gt;various vendors were&#xA;presenting 1 Mbit (128 KB) EPROMs&lt;/a&gt;, and you probably could&#xA;have squeezed four of those into a cartridge for a half-megabyte&#xA;capacity. In fact, that alone would have held the entire contents of&#xA;the MultiMAX.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-09-19T15:56:20.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12355" PostTypeId="1" CreationDate="2019-09-19T17:59:41.747" Score="7" ViewCount="485" Body="&lt;p&gt;&lt;a href=&quot;https://www.c64-wiki.com/wiki/Bank_Switching#Memory_Configurations&quot; rel=&quot;nofollow noreferrer&quot;&gt;According to the C64 wiki&lt;/a&gt;, asserting &lt;code&gt;G̅A̅M̅E̅&lt;/code&gt; on the&#xA;cartridge port (and not asserting &lt;code&gt;E̅X̅R̅O̅M̅&lt;/code&gt;) of the C64 leaves three&#xA;blocks of the C64 address space &quot;unmapped&quot;: 28 KB @ $1000 (otherwise&#xA;RAM), 8 KB @ $A000 (otherwise BASIC ROM or, in some modes, ROMH on the&#xA;cartridge) and 4 KB @ $C000 (otherwise RAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it safe for the cartridge to respond to read and write requests to&#xA;these areas? (Say, because the cartridge wanted to have I/O in that&#xA;area or—for some reason I can't currently fathom—its own RAM.) I&#xA;assume here that the cartridge would have its own address decoding to&#xA;handle this, and that the hardware would be kept off the bus until&#xA;software had set up the C64 memory map properly to unmap these areas&#xA;before enabling the cartridge to respond to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ask because I know that even when certain onboard devices (in this&#xA;case, RAM) are not mapped in, they still respond to write requests. (I&#xA;have verified that writing to KERNAL ROM will of course not change the&#xA;ROM, but still write to the RAM at the same addresses.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is possible, are there any cartridges out there that actually&#xA;use this technique?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="11916" LastEditDate="2019-10-21T20:42:37.773" LastActivityDate="2019-10-21T20:42:37.773" Title="Is it safe for C64 cartridges to respond to read and/or write requests on &quot;unmapped&quot; addresses?" Tags="&lt;commodore-64&gt;&lt;rom&gt;&lt;game-cartridge&gt;&lt;ram&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12356" PostTypeId="1" AcceptedAnswerId="12357" CreationDate="2019-09-19T21:21:04.200" Score="20" ViewCount="2133" Body="&lt;p&gt;I have a Macintosh SE  in my collection and I noticed these &lt;a href=&quot;https://i.postimg.cc/ydjpzGF5/IMG-20190919-161814.jpg&quot; rel=&quot;noreferrer&quot;&gt;odd looking traces&lt;/a&gt; on the mainboard. Not quite sure what to think of it &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W2BEf.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W2BEf.jpg&quot; alt=&quot;odd looking traces&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14897" LastEditorUserId="7208" LastEditDate="2019-09-19T21:43:29.503" LastActivityDate="2019-09-26T14:06:40.650" Title="What causes the traces to wrinkle like this and should I be worried" Tags="&lt;apple-macintosh&gt;&lt;motherboard&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12357" PostTypeId="2" ParentId="12356" CreationDate="2019-09-19T21:40:41.207" Score="24" Body="&lt;p&gt;They were most likely wrinkled like that from the start, due to the way they were manufactured, and thus you should not be worried.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Until the mid-90s, boards often went through an HASL, or &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Hot_air_solder_leveling&quot; rel=&quot;noreferrer&quot;&gt;hot air solder leveling&lt;/a&gt;&quot; process that put solder on the traces before the &lt;a href=&quot;https://en.wikipedia.org/wiki/Solder_mask&quot; rel=&quot;noreferrer&quot;&gt;solder mask&lt;/a&gt; (a protective layer over the board) was applied. This initial solder over the PCB's copper traces helped avoid corrosion and, when near a point where a component would later be soldered, would help &lt;a href=&quot;https://en.wikipedia.org/wiki/Wetting&quot; rel=&quot;noreferrer&quot;&gt;wetting&lt;/a&gt; so that the component could be more reliably connected to the PCB trace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Excess solder on the traces would be removed before the mask was applied, but usually not completely on large traces. So, after being masked, when the board was &lt;a href=&quot;https://en.wikipedia.org/wiki/Wave_soldering&quot; rel=&quot;noreferrer&quot;&gt;wave soldered&lt;/a&gt; to attach the electronic components, the original HASL solder, now underneath the solder mask, would melt again and reform unevenly under the mask during cooling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a more detailed &lt;a href=&quot;https://www.reddit.com/r/AskElectronics/comments/6wnphs/why_are_older_pcbs_wrinkly_like_this/&quot; rel=&quot;noreferrer&quot;&gt;discussion about this on Reddit&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-09-19T21:40:41.207" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12358" PostTypeId="1" AcceptedAnswerId="12359" CreationDate="2019-09-20T02:05:28.797" Score="5" ViewCount="182" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pJOg9.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pJOg9.png&quot; alt=&quot;coordinate capture peripheral&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From an 80s Royal Air Force recruitment &lt;a href=&quot;https://youtu.be/rHjU0sdHRV8?t=392&quot; rel=&quot;noreferrer&quot;&gt;video&lt;/a&gt;, a peripheral is shown and it is used to capture coordinates off a map, onto a computer, for the flight plan to be written on a casette, for loading on the combat jet's (a &lt;a href=&quot;https://en.wikipedia.org/wiki/Panavia_Tornado&quot; rel=&quot;noreferrer&quot;&gt;Panavia Tornado&lt;/a&gt;) navigation computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did this coordinate capture peripheral work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I tried to google it, but I couldn't finding anything.)&lt;/p&gt;&#xA;" OwnerUserId="15267" LastEditorUserId="15267" LastEditDate="2019-09-20T02:29:50.540" LastActivityDate="2019-09-20T02:51:34.963" Title="How did this coordinate capture peripheral work?" Tags="&lt;hardware&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2019-09-20T06:48:21.373" ContentLicense="CC BY-SA 4.0" />
  <row Id="12359" PostTypeId="2" ParentId="12358" CreationDate="2019-09-20T02:51:34.963" Score="7" Body="&lt;p&gt;This looks like a large digitizer board (a.k.a. digitizer, digitizing tablet, graphics tablet, and variations) with a map overlaid on it. They were very popular in CAD (computer-aided design) applications in the '80s and early '90s, and are, to my surprise, still available today. They are quite useful for any application which requires precise coordinate entry, such as tracing outlines of objects for machining, or, as shown here, inputting map coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The board has a fine wire grid inside it, and the cursor or pen creates an electrical field which is sensed by the grid. Depending on the resolution of the grid in the board, it can determine the coordinates of the cursor to a very high degree of accuracy. Modern ones work over USB, but older ones would use some form of serial connection to report the cursor's position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can sometimes be hard to find information on these devices, since, without knowing what to search for, your search results will be skewed toward modern graphics tablets and tablet computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More information is available from The Logic Group's &lt;a href=&quot;http://www.logicgroup.com/LogicTraceCncDxf.html&quot; rel=&quot;noreferrer&quot;&gt;Logic Trace Digitizing System&lt;/a&gt; page and their &lt;a href=&quot;http://www.logicgroup.com/Guide/Digitizer_Board.htm&quot; rel=&quot;noreferrer&quot;&gt;Digitizer Board&lt;/a&gt; page. Additional manufacturers' boards boards are shown at &lt;a href=&quot;http://www.digitizerzone.com/index.html&quot; rel=&quot;noreferrer&quot;&gt;DigitizerZone&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I have no affiliation to these sites; they're just ones I turned up when I searched.)&lt;/p&gt;&#xA;" OwnerUserId="4744" LastActivityDate="2019-09-20T02:51:34.963" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12360" PostTypeId="1" CreationDate="2019-09-20T06:06:12.530" Score="7" ViewCount="1367" Body="&lt;p&gt;The VIC-20 used a &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6522&quot; rel=&quot;noreferrer&quot;&gt;6522 VIA&lt;/a&gt; chip with a couple of 8-bit PIO ports, a&#xA;couple of timers and a (buggy) shift register. (The bug in the shift&#xA;register could be &lt;a href=&quot;http://forum.6502.org/viewtopic.php?t=342#p2310&quot; rel=&quot;noreferrer&quot;&gt;worked around with external hardware&lt;/a&gt; or in&#xA;other ways.)&lt;/p&gt;&#xA;&lt;p&gt;The Commodore 64 used what appears to be basically a new and improved&#xA;version of the VIA, the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_CIA&quot; rel=&quot;noreferrer&quot;&gt;6526 CIA&lt;/a&gt;. This fixed the shift register bug,&#xA;but the shift register &lt;a href=&quot;http://spectrum.ieee.org/ns/pdfs/commodore64_mar1985.pdf&quot; rel=&quot;noreferrer&quot;&gt;went unused anyway&lt;/a&gt; because it had to be&#xA;compatible with older diskette drives using the VIA. (See p.56, &amp;quot;The&#xA;albatross of the C-64,&amp;quot; in that article.)&lt;/p&gt;&#xA;&lt;p&gt;The only other feature added by the 6526 appears to have been a&#xA;time-of-day (TOD) clock. This presumably replaced other means of&#xA;running the clock used for &lt;a href=&quot;https://www.c64-wiki.com/wiki/TIME$&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;TIME$&lt;/code&gt;&lt;/a&gt; in BASIC, but doesn't&#xA;appear to have been particularly necessary, since it worked before.&lt;/p&gt;&#xA;&lt;p&gt;Was there anything that the CIA offered over the VIA that was fairly&#xA;essential to the operation of the C64, or could it reasonably have&#xA;been designed with a VIA instead? Or in other words, what was the&#xA;advantage of spending the money to design and use the CIA over the VIA&#xA;in the C64?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-10-02T20:52:32.580" Title="Could the Commodore 64 have used the 6522 VIA instead of the 6526 CIA?" Tags="&lt;commodore-64&gt;&lt;mos-6526&gt;&lt;mos-6522&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12361" PostTypeId="2" ParentId="12346" CreationDate="2019-09-20T11:50:17.317" Score="1" Body="&lt;p&gt;These computers were meant to be usable without a disk drive (which was sold separately and often cost as much as the computer did). DOS stood strictly for Disk Operating System and was just a way for the CPU to communicate with a disk drive. It wasn't an operating system in today's terms, which didn't come about until Mac OS and Windows took over in the late '80s.&lt;/p&gt;&#xA;" OwnerUserId="15269" LastActivityDate="2019-09-20T11:50:17.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12363" PostTypeId="2" ParentId="12360" CreationDate="2019-09-20T13:47:26.720" Score="8" Body="&lt;p&gt;&lt;em&gt;Preface: Speculations of an alternate history are unfit for RC.SE, so this answer is restricted to fact checking.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;p&gt;From a software (Kernal) PoV there is no reason for using a 6526, but there are two indicators from the hurried &lt;strong&gt;design case&lt;/strong&gt; and &lt;strong&gt;business case: Volume&lt;/strong&gt;. The new 652x family member (*1) was designated to be the base I/O chip for all upcoming machines needing the most complex functions. Thus it will most certainly fit whatever will come up during design with little chance for reselection need, which would cost time not available (*2).&lt;/p&gt;&#xA;&lt;p&gt;In addition, it was available and as designated part, using it as often as possible will decrease per unit cost and increase profit - over all, not just the meagre C64 run (as planned).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;6522 VIA chip with [...] a (broken) shift register. (The bug in the shift register could be worked around with external hardware.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The Shift register is not broken per se. There are many applications using it without any issue - for example the &lt;a href=&quot;https://steckschwein.de/hardware/via-65c22-as-spi-master/&quot; rel=&quot;noreferrer&quot;&gt;SPI implementation&lt;/a&gt; of the Steckschwein.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This fixed the shift register bug, but the shift register went unused anyway because it had to be compatible with older diskette drives using the VIA.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That may be s light misinterpretation here. Compatibility with the VIC 20 was regarding speed, not used hardware er se. The Floppy doesn't care what device creates the serial signal. Using Port A of CIA2 is a direct result of using the VIC20 Kernal with as little changes as possible.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;At that point it's, as so often when it comes to the C64 design, quite important to keep in mind, that it was designed in a great hurry, meant to be a stop gap measure against the imagined 64 KiB Atari. Development speed was the only goal here. In hardware and software. So new chips like the 6526 were used, and use of their features may have been intended, but it got all pushed back to make it for the 1982 Winter CES. To cut on software development time, the use of the VIC-20 Kernal was decided, with as little modifications as possible. As a result several of the advanced features full memory use for of the C64 were not or only barely supported.&lt;/p&gt;&#xA;&lt;p&gt;This wasn't so much seen as a problem, as for one, the C64 was meant to be a only available for a short time, but more important, the engineers planned to add a better adapted Kernal/BASIC (*2) soon after ... which in typical Tramiel style got cut out to save the investment. After all, it got sold, so why invest more than the bare minimum?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;So it wasn't a general VIC-20 compatibility issue, and especially not the floppy, but rather the result of using the VIC-20 Kernal.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Commodore 64 used what appears to be basically a new and improved version of the VIA, the 6526 CIA.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That was the intention. Creating an improved 6522 - most notably the steamlined handshake mode, intended to simplify an IEEE-488 style interface as well. The 6526 was meant to replace the 6522 on all future designs.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The only other feature added by the 6526 appears to have been a time-of-day (TOD) clock. This did allow them to add the TIME$ function to BASIC, giving the time since power-up/reset (or any other time the programmer cared to set it to),&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;TI and TI$ have been with Commodore BASIC since the very first PET. Since VIC-20 times even as stable Kernal call ($FFDB/SETIM &amp;amp; $FFDE/RETIM).&lt;/p&gt;&#xA;&lt;p&gt;More important here, the C64 BASIC/Kernal (original BASIC 2.0) didn't use the TOD clock(s) at all. The Jiffy Clock ($A0/1/2) was driven by an interrupt issued by CIA1 60 times a second. Using the TOD funcionality would have improved handling a lot by removing all lag.&lt;/p&gt;&#xA;&lt;p&gt;Like the not-use of the serial register it's a direct result of the hurried adaption of the VIC-20 BASIC 2.0 for the C64 (See before).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but I don't know how much TOD clock was ever used, from either BASIC or machine language.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Many useful (aka non game) offered it to handle time and date. Though, most using the Jiffy Clock.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(This could have perhaps have been emulated to some degree in software, such as by using VIA timer or video interrupts, though a hardware change routing one of these to NMI would have been needed to avoid loss of time should interrupts be disabled for too long.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As said, TI($) was based on such a clock, driven by IRQ and notorious lagging depending on Video/Interrupt use.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was there anything that the CIA offered over the VIA that was fairly essential to the operation of the C64,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Nop. At least not the way the Kernal was made.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;or could it reasonably have been designed with a VIA instead?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The way it was delivered yes, for what was planned: no.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or in other words, what was the advantage of spending the money to design&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The CIA was designed independently of the C64. No chip was designed for the C64. The whole C64 design was made up from components already available before. See above, it was a quick solution to a marketing problem, not a planned development&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and use the CIA over the VIA in the C64?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Simply the combination of availability and using the most capable chip to avoid short comings and possible redesign, all geared toward making it in time.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - It was a whole group of chips modelled as 6522 follow up so serve various purpose, like 6523/25 TPI, 6526 CIA, 6529 SPI or variations of these building block like 8520 CIA or 7360 TED.&lt;/p&gt;&#xA;&lt;p&gt;*2 - That case changed with the 264 series, weras the TED did include the most complex functions in one chip, so a more simple TPI could be used to extend available ports - also, being less time pressured helped as well&lt;/p&gt;&#xA;&lt;p&gt;*3 - BASIC 3.5 delivered for the TED machines what what was intended for the C65. Native TOD support, BASIC commands for graphics, sound and input (joysick) and quite important, memory management to allow use of all RAM for BASIC.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-10-02T20:52:32.580" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="12364" PostTypeId="2" ParentId="4457" CreationDate="2019-09-20T13:58:28.940" Score="1" Body="&lt;p&gt;Here are the schematics. Don't know which version of VBS.&#xA;&lt;a href=&quot;http://leszczamiga.ppa.pl/elektronika/vbs.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://leszczamiga.ppa.pl/elektronika/vbs.gif&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15271" LastActivityDate="2019-09-20T13:58:28.940" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12365" PostTypeId="2" ParentId="12355" CreationDate="2019-09-20T14:38:29.183" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;asserting /GAME on the cartridge port of the C64 leaves three blocks of the C64 address space &quot;unmapped&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, at least not alone. /EXROM also needs to be high. Otherwise standard RAM/ROM configuration prevails.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it safe for the cartridge to respond to read and write requests to these areas?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I assume here that the cartridge would have its own address decoding to handle this,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As usual, as there are no select lines beyond /ROMLOW and /ROMHIGH, selecting 8 KiB each at $8000/$E000.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and that the hardware would be kept off the bus until software had set up the C64 memory map properly to unmap these areas before enabling the cartridge to respond to them.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, that's not necessary, as the mapping is done in hardware. With /EXROM=High; /GAME=Low all CPU side memory mapping (HIRAM, LORAM, CHAREN) is simply disabled. Attention to the CPU port signals is only required if the cartridge 'decides' to change the /EXROM;/GAME setting.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I ask because I know that even when certain onboard devices (in this case, RAM) are not mapped in, they still respond to write requests. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, but that's not for 'certain' devices, only the RAM. Its handling and timing is entirely controlled by the 82S100 PLA. THe very same chip doing the EXROM/GAME decoding. So the effect is either on purpose or more plausible simply due not caring. It generates RAS/CAS signalling for each and every access, no matter what address is used (*1).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If this is possible, are there any cartridges out there that actually use this technique?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I bet some did.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 -  That way, even the RAM behind the build in port at 0000/0001 gets writen each - also great for external (debugging) hardware to help follow up on it's state&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-21T08:08:31.407" LastActivityDate="2019-09-21T08:08:31.407" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12366" PostTypeId="2" ParentId="12346" CreationDate="2019-09-20T15:03:06.783" Score="1" Body="&lt;p&gt;I can't speak to the PDP-11,  but the earlier PDP-10 was a computer built for timesharing.  Memory protection was built into the processor.  Every user mode memory reference went through a translation process controlled by two protection and relocation registers that in turn were controlled by the operating system.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This memory system allowed the operating system to protect both other programs and itself from rogue programs.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later models of the PDP-10 featured a page map which allowed a more sophisticated translation scheme.  This more sophisticated scheme would allow for virtual memory as well as separate user spaces.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The earliest microprocessors lacked these facilities,  and a rogue program could indeed bring down the system, or carry out misdeeds by manipulating memory not allocated to that process. Other answers speak to the facilities on a 6502. &lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2019-09-20T15:03:06.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12367" PostTypeId="1" CreationDate="2019-09-20T16:40:10.047" Score="6" ViewCount="177" Body="&lt;p&gt;The Zilog SCC in the early Macs could operate in either 232 or 422 mode. AppleTalk used the later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;422 and 423 differed primarily in that the former used separate return lines for each data line, while the later shared lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AppleTalk used three wires. Even PhoneNet only used three of the four available. This would tend to imply that it was &quot;really&quot; 423.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am not clear on whether there were other differences between the two standards? Voltages perhaps?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know for sure whether AppleTalk used one standard or the other?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-09-20T22:12:01.130" Title="Was AppleTalk 422, 423, or something else entirely?" Tags="&lt;apple-macintosh&gt;&lt;appletalk&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12368" PostTypeId="2" ParentId="12367" CreationDate="2019-09-20T18:30:33.883" Score="5" Body="&lt;p&gt;&lt;em&gt;(For this Answer I assume your question is about LocalTalk interfaces, not AppleTalk as system)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TL;DR: &lt;em&gt;&lt;strong&gt;If at all, the network side could be described as EIA-485.&lt;/strong&gt;&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess a basic problem is that not only all of these do have similarities, but LocalTalk in fact uses two different interfaces. One between computer and the little box, and the other between these boxes. Equally important, both of them are used in a proprietary way. After all, it's LocalTalk, not either of these standard interfaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The Principal Setup&lt;/strong&gt; is formed by a serial interface from the computer connected to a little box, called 'Connector Module', which in turn on the network side has two sockets for cables to be connected to other connector modules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;On the Computer Side&lt;/strong&gt; an EIA-422 (V.11) interface is used. But the lines aren't fed into a (digital) comperator within the box, but are simply joined via resistors in the RXD lines and feed to one side of a transformer. So strictly this is no longer an EIA-422 implementation, but something different, vaguely compatible - and only guaranteed to work with an SCC and as implemented by Apple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;On the Network Side&lt;/strong&gt; signal lines of both connectors (Pin 1/2) were connected to each other, making them two uninterrupted lines, connecting all stations. For signalling the other side of the transformer was put between the lines. This is strictly not daisy-chaining like often stated, but parallel taping - much like on old fashioned yellow cable. When no cable was plugged on either side a 100 Ohm resistor was switched in as termination. All together forming a two wire bus being neither of the named standards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far the network side looks &lt;strong&gt;similar to EIA-485&lt;/strong&gt;. Except the signaling levels as well as termination are different. Then again, most EIA-485 implementations differ not only by the protocol, but in implementation as well. It's more of a family of relatives than a plug and play product. Everyone who tries to connect an IBM POS printer to a Profibus controller will know :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-20T22:12:01.130" LastActivityDate="2019-09-20T22:12:01.130" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12369" PostTypeId="2" ParentId="12346" CreationDate="2019-09-20T22:42:23.847" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;it doesn't seem clear to me how the operating system protects itself&#xA;  on the 6502 or PDP-11.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;With respect to the PDP-11: it's pretty conventional.  In general, there are at least 2 execution modes (kernel, user; some models add a third, supervisor); certain instructions are legal in kernel mode only; there is a memory management unit that controls virtual to physical mapping on a page basis (4KW/page, therefore 8 pages) with separate maps for the different processor modes.   That's all you need to isolate tasks from each other and from the kernel.  Each task gets its own memory map; context switches require reloading the user-mode map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the older, smaller models the MMU hardware that gives all this is 'optional'. As soon as you get to the point where a 28KW system (note1) is too small, then you're going to need the MMU anyway. And it's generally not an optional option on larger systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original PDP-11, the 11/20, did not have a standard MMU, though DEC's Computer Special Systems (note2) division could supposedly fit you up with one by special order (&lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp11/1120/KT11-B_OD_Apr71.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;KT11-B&lt;/a&gt;).  The smaller and cheaper PDP-11/10 had no standard MMU, and AFAIK nothing from CSS either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The replacement for the 11/20, the 11/40, had an optional &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp11/1140/KT11D_UsersMan.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;KT11-D MMU&lt;/a&gt;. The 'fast' machine, the 11/45, had an optional &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp11/1145/KT11C_MaintMan.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;KT11-C MMU&lt;/a&gt;. Here, optional means required if you want more than 28KW of core.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case anyone is wondering, I don't know whether there was ever a KT11-A.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Note1: 16 bit address space = 64K byte, 32 K words. Top 4K words of physical address space is the I/O page, so that leaves 28 K words for memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note2: CSS was separate from central engineering; they built hardware either for specific customer requests, or because they saw a need that central engineering was not addressing.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-09-20T23:07:19.483" LastActivityDate="2019-09-20T23:07:19.483" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12370" PostTypeId="1" CreationDate="2019-09-21T01:25:09.360" Score="3" ViewCount="190" Body="&lt;p&gt;I was taking a look at the logic diagram in &lt;a href=&quot;http://minuszerodegrees.net/oa/OA%20-%20IBM%20Game%20Control%20Adapter.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the manual&lt;/a&gt; for the original IBM game port adapter card:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/djtRx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/djtRx.png&quot; alt=&quot;IBM game card schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the upper-left corner of the schematic, there is the circuitry responsible for decoding the I/O address lines from the host system. As I read it, it's constructed from two discrete 74LS138&lt;sup&gt;[1]&lt;/sup&gt; decoders cascaded in the following way:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;U2 is reading address lines A4 - A9. It expects all lines to be low except for A9, which is expected to be high. If those conditions are met, the Y0 output is pulled low.&lt;/li&gt;&#xA;&lt;li&gt;U1 is reading address lines A0 - A3, AEN, and the Y0 output from the previous decoder. It expects all lines to be low except for A0, which is expected to be high. If those conditions are met, the Y0 output is pulled low.&lt;/li&gt;&#xA;&lt;li&gt;The Y0 output of U1 controls activation of the entire rest of the card, based on signals from either /IOW or /IOR.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;74LS138 Truth Table&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;|           INPUTS           ||                 OUTPUTS               |&#xA;| G1 | G2A | G2B | C | B | A || Y0 | Y1 | Y2 | Y3 | Y4 | Y5 | Y6 | Y7 |&#xA;| ---|-----|-----|---|---|---||----|----|----|----|----|----|----|----|&#xA;| X  | X   | H   | X | X | X || H  | H  | H  | H  | H  | H  | H  | H  |&#xA;| X  | H   | X   | X | X | X || H  | H  | H  | H  | H  | H  | H  | H  |&#xA;| L  | X   | X   | X | X | X || H  | H  | H  | H  | H  | H  | H  | H  |&#xA;| H  | L   | L   | L | L | L || L  | H  | H  | H  | H  | H  | H  | H  |&#xA;| H  | L   | L   | L | L | H || H  | L  | H  | H  | H  | H  | H  | H  |&#xA;| H  | L   | L   | L | H | L || H  | H  | L  | H  | H  | H  | H  | H  |&#xA;| H  | L   | L   | L | H | H || H  | H  | H  | L  | H  | H  | H  | H  |&#xA;| H  | L   | L   | H | L | L || H  | H  | H  | H  | L  | H  | H  | H  |&#xA;| H  | L   | L   | H | L | H || H  | H  | H  | H  | H  | L  | H  | H  |&#xA;| H  | L   | L   | H | H | L || H  | H  | H  | H  | H  | H  | L  | H  |&#xA;| H  | L   | L   | H | H | H || H  | H  | H  | H  | H  | H  | H  | L  |&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Putting everything together, the card activates if A0 and A9 are high while everything else (including AEN) is low. That's 1000000001b, or 201h. And hey, the card responds to I/O address 201h.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the question: Nothing on the card verifies that address lines A10 - A19 are low when decoding the I/O address. If that's true, and the schematic doesn't omit anything that's actually on the board, that means the card would activate on any I/O operation on an address whose low 9 bits matched 201h, regardless of the high bits. (So, 601h, A01h, E01h...) Did that actually occur in practice on the real hardware?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cursory tests in DOSBox do not show a game port on any of the alias addresses above 201h, but I take that with a grain of salt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1]: It's not clear in the scanned schematic, but it's super clear in a &lt;a href=&quot;http://minuszerodegrees.net/5150_5160/cards/5150_5160_game_adapter_2085x2032.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;photo of the board&lt;/a&gt;: &lt;strong&gt;SN74LS138N&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="12139" LastEditorUserId="12139" LastEditDate="2019-09-21T02:19:18.187" LastActivityDate="2019-09-21T02:20:22.180" Title="Did the IBM Game Control Adapter have I/O port aliases?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;joystick&gt;&lt;ports&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12371" PostTypeId="2" ParentId="12370" CreationDate="2019-09-21T02:20:22.180" Score="6" Body="&lt;p&gt;The original IBM PC and AT designs allocated 10 bits for I/O addressing, and only decoded address lines A0-A9 for on-board I/O devices. However there was no physical limitation to 10 bits, so a card could use A10-A19 so long as it didn't clash with the aliases of 10 bits cards or motherboard devices.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yes, the game-port card has aliases at 601h etc., but you are not supposed to use them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern PCs have 16 bit I/O addressing and filter the 10 bit addresses so legacy devices don't clash with others using the full 16 bit I/O range. This may explain why DOSBox doesn't show any aliases.     &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-09-21T02:20:22.180" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12372" PostTypeId="1" AcceptedAnswerId="12375" CreationDate="2019-09-21T06:31:47.597" Score="15" ViewCount="757" Body="&lt;p&gt;To be clear, I'm talking about the actual memory cells at addresses&#xA;$0000 and $0001 in the DRAM chips. Devices can of course initiate read&#xA;or write requests to these address on the address/data buses to&#xA;which they're connected, but that doesn't necessarily mean that this&#xA;will result in an actual read from or write to the RAM device.&lt;/p&gt;&#xA;&lt;p&gt;According to §4 of &lt;a href=&quot;https://www.cebix.net/VIC-Article.txt&quot; rel=&quot;noreferrer&quot;&gt;Christian Bauer's excellent VIC-II&#xA;article&lt;/a&gt;, the CPU's data bus is tri-stated during a write&#xA;access to the registers of the 6510's on-board PIO at addresses $0000&#xA;and $0001. (This is not mentioned in the &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6510_mpu.pdf&quot; rel=&quot;noreferrer&quot;&gt;6510 data sheet&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;He says, however, that these memory locations can be written anyway&#xA;though a mechanism that I don't really understand¹, involving the&#xA;VIC-II actually doing the write.&lt;/p&gt;&#xA;&lt;p&gt;He also says that, at least on some C64s, those locations in RAM can&#xA;be read by the processor via reads in the $DE00 &amp;quot;I/O 1&amp;quot; area&#xA;(presumably so long as a cartridge or whatever hasn't mapped some I/O&#xA;devices in there) or via &amp;quot;sprite collisions.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;So how exactly does this work? What devices (the 6510, the VIC-II,&#xA;external devices you add yourself on the expansion bus, etc.) can read&#xA;from and/or write to locations $0000 and $0001 in the RAM devices, and&#xA;how exactly do they do it?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;¹&lt;sub&gt; It seems to be something to do with what goes on during φ1—the&#xA;&amp;quot;VIC-II's phase&amp;quot; of RAM access—where the VIC-II has enabled RAM for&#xA;its own purposes and &lt;code&gt;R/W̅&lt;/code&gt; is low, causing a write to happen anyway.&#xA;But I don't see at all where the data come from, or why there would&#xA;not be a re-write of random data to that location during φ2, when&#xA;presumably nothing is driving the data bus. And I guess for this to&#xA;work the VIC-II needs to be programmed to be using the first 16K block&#xA;of memory? This is probably all wrong; I include this speculation just&#xA;to give you an idea of where I am in my confusion. &lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-03T21:39:22.930" Title="Under what circumstances would RAM locations 0 and 1 be written and/or read on the C64?" Tags="&lt;commodore-64&gt;&lt;memory&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12375" PostTypeId="2" ParentId="12372" CreationDate="2019-09-21T08:17:24.907" Score="18" Body="&lt;p&gt;&lt;strong&gt;Data lines hold their previous state if nothing drives them&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each trace on the motherboard has some tiny capacitance, depending on its length, routing, and distance from the ground plane. Each time there is some traffic on the data lines, the data lines D0-D7 are charged to high or depleted to low level, depending on the data put on them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VIC reads some data from memory on &lt;em&gt;every&lt;/em&gt; φ&lt;sub&gt;1&lt;/sub&gt; half-cycle, no matter whether it needs to or not (when displaying the border). If nothing is driving the data bus during the φ&lt;sub&gt;2&lt;/sub&gt; half-cycle, this data remains on the data bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Writing to &lt;code&gt;$00&lt;/code&gt;/&lt;code&gt;$01&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you have noted, when the CPU executes an instruction to write to &lt;code&gt;$00&lt;/code&gt; or &lt;code&gt;$01&lt;/code&gt;, the external data lines are not driven, so they hold their value (charge) from the previous VIC access. Although the CPU doesn't drive the data lines, it sets the address and control lines, going through all the motions to write some data without putting anything on the data bus. So the data that just happen to sit on the data bus from the previous access by the VIC gets written to memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can figure out which memory address would be accessed by the VIC just before the write by the CPU, and store some value there, that value gets copied to &lt;code&gt;$00&lt;/code&gt; or &lt;code&gt;$01&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Reading from &lt;code&gt;$00&lt;/code&gt;/&lt;code&gt;$01&lt;/code&gt; through the unmapped area&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a somewhat similar fashion, executing a read from anywhere between &lt;code&gt;$DE00&lt;/code&gt; and &lt;code&gt;$DFFF&lt;/code&gt; would return whatever the VIC has read just before. I'm not sure that it can be arranged that the load instruction is executed exactly when the VIC reads from &lt;code&gt;$0000&lt;/code&gt;, because it should happen on a &lt;em&gt;bad line&lt;/em&gt;, when the CPU is stopped, but if there is a clever VIC timing trick to do it, then the CPU read would return the byte at &lt;code&gt;$0000&lt;/code&gt;. However it's certainly possible to read &lt;code&gt;$0001&lt;/code&gt; this way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Reading from &lt;code&gt;$00&lt;/code&gt;/&lt;code&gt;$01&lt;/code&gt; through sprite collision&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bits in the VIC sprite collision register are set whenever there is a non-transparent pixel of the respective sprite at the same position as a non-background pixel of the main graphics plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Set the VIC to graphics mode, bitmap starting at &lt;code&gt;$0000&lt;/code&gt;. Now the contents of &lt;code&gt;$0000&lt;/code&gt; and &lt;code&gt;$0001&lt;/code&gt; are displayed at the beginning of line 0 and 1, respectively. You can actually &lt;em&gt;see&lt;/em&gt; the contents on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let all sprites have an empty (&lt;code&gt;$00&lt;/code&gt;) bitmap except byte 0. Set byte 0 of sprite 0 to &lt;code&gt;$01&lt;/code&gt;, byte 0 of sprite 1 to &lt;code&gt;$02&lt;/code&gt;, byte 0 of sprite 2 to &lt;code&gt;$04&lt;/code&gt;, etc, i.e. sprite x has bit x of the first byte set. Display all of them at (0,0) and wait for the collision register to get updated. Bit x would be set, if the single pixel of sprite x collided with a pixel on the bitmap screen, effectively giving back the contents of &lt;code&gt;$0000&lt;/code&gt;. Move the sprites down one pixel to get the value at &lt;code&gt;$0001&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="348" LastActivityDate="2019-09-21T08:17:24.907" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12376" PostTypeId="2" ParentId="5013" CreationDate="2019-09-21T10:28:50.490" Score="2" Body="&lt;p&gt;If you examine the cartridges produced during the active life of 8-bit computers, then first of all you need to look at the Japanese and MSX. One-, two-, three-megabit cartridges with mappers were produced in rather large editions - in general, the picture was similar to the one that Sega had for the Master System.&#xA;&lt;a href=&quot;http://bifi.msxnet.org/msxnet/tech/megaroms&quot; rel=&quot;nofollow noreferrer&quot;&gt;Megabit ROM Cartridges&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2019-09-21T10:28:50.490" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12377" PostTypeId="1" AcceptedAnswerId="12393" CreationDate="2019-09-21T14:22:39.633" Score="11" ViewCount="643" Body="&lt;p&gt;In &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5204/were-there-any-lsi-11-like-home-computers-outside-of-Russia&quot;&gt;an answer&lt;/a&gt; by user RichF, it is claimed that the previous-address-space moves were able to access 'all of memory' without memory management being enabled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The instructions MFPI (move from previous instruction space), MFPD (… previous data space), MTPI (move to previous instruction space), MTPD (… previous data space) facilitate implementation of OS kernel services; user space and kernel space are usually non-overlapping so the kernel can't immediately see user space.  Memory management generally uses the current-mode (kernel/super/user) field from the processor status (PSW) to determine which map to use; these instructions use the previous-mode field instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've never really thought about what the previous-mode moves would do if the MMU was not enabled. The answer I linked to above says that the previous-mode bits from the PSW are used directly as the high-order 2 bits of the 18-bit bus address (the low 16 bits are provided via the usual operand).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've poked around the manuals I have at home, and on bitsavers, but I can't see any mention of this usage. The instruction definitions all assume the MMU is enabled.  E.g., for MFPD (from the 11/70 handbook, even though it says 11/45 in the text):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This instruction is provided in order to allow interaddress space&#xA;  communication when the PDP-11/45 is using the Memory Management unit.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The address of the source operand is determined in the current address&#xA;  space. That is, the address is determined using the SP and memory&#xA;  pages determined by PS&amp;lt;15:14&gt;. The address itself is then used in the&#xA;  previous D space (as determined by PS&amp;lt;13:12&gt; to get the source&#xA;  operand. This operand is then pushed on to the current R6 stack.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;OH, I'm supposed to have an actual question?  OK: does anyone have documentation or actual experience to say what these 4 instructions do when memory management is not enabled?   Was this 'off-label' use model-specific?&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-12-14T18:39:32.307" Title="Was it really possible for a PDP-11 to address more than 32K words memory without an MMU?" Tags="&lt;pdp-11&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12378" PostTypeId="2" ParentId="5013" CreationDate="2019-09-21T15:17:06.027" Score="1" Body="&lt;p&gt;The largest ROM space the Atari 2600 could address was 4K. But a number of bank switching schemes (and some &lt;em&gt;fiendishly&lt;/em&gt; clever ways to do it cheaply!), allowed carts up to 32K. Although really there's no limit, you can always amend the bankswitching to allow more. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This applies to all consoles, and computers. With bankswitching, possible with all ROM-based consoles, there's no upper limit. The NES called bankswitching chips &quot;mappers&quot;, since they altered the memory map, and perhaps because they wanted to give a nicer name to an ugly technique!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later 8-bit computers used bankswitching to allow more than 64K RAM. Or even just to allow a full 64K. For example the Commodore 64 had ROM in it's memory space, but that could be switched out, to allow a bank of RAM instead. Other computers did the same. The Spectrums with 128K also used bankswitching, as did other 8-bitters with 128K. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it's a shame the Spectrums with 128K didn't allow a better graphics mode, with less colour-clash, or even none. Problem would be, you'd need a game to come in a version with extra graphics for that version. Still, the extra RAM would make up for that. They could also have added a palette, and still kept compatibility. The Amstrad CPC had the same Z80 CPU as the Speccy and had much nicer graphics, so it was possible. Maybe a faster CPU, too, a Z80H could run at double the clock speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But anyway it didn't happen, and there's no point producing one now since the software has all already been written. Nobody would write much for an enhanced Speccy, they'd get even less people playing it, if the original machine couldn't do it. &lt;/p&gt;&#xA;" OwnerUserId="14475" LastEditorUserId="14475" LastEditDate="2019-09-21T18:41:11.630" LastActivityDate="2019-09-21T18:41:11.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12379" PostTypeId="2" ParentId="9453" CreationDate="2019-09-21T16:45:11.757" Score="4" Body="&lt;p&gt;All the various &lt;a href=&quot;http://web.cse.ohio-state.edu/~rountev.1/6341/pdf/Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;LISP 1.5&lt;/a&gt; systems (on the IBM 7090 and&#xA;otherwise) appears always to have used only &lt;code&gt;PLUS&lt;/code&gt;, &lt;code&gt;DIFFERENCE&lt;/code&gt;,&#xA;&lt;code&gt;MINUS&lt;/code&gt; (unary), etc. (§4.2 p.25) Its small derivative &lt;a href=&quot;https://www.computerhistory.org/pdp-1/_media/pdf/DEC.pdp_1.1964.102650371.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-1&#xA;LISP&lt;/a&gt; (1964) also did as well (§2 p.3 Table 1, though I don't&#xA;know what happened to &lt;code&gt;DIFFERENCE&lt;/code&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.softwarepreservation.org/projects/LISP/lisp2/TM-2260_002_00-Internal_Language.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;LISP 2&lt;/a&gt;, discussed extensively in the early '60s but never&#xA;implemented, did use symbols for arithmetic in the ALGOL-like &quot;source&#xA;language,&quot; but I think you're not talking about this. The S-expression&#xA;&quot;internal language&quot; still used &lt;code&gt;PLUS&lt;/code&gt; etc. (See example of both in&#xA;§5.2 on p.13.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBN descendent, &lt;a href=&quot;https://archive.org/details/bitsavers_xeroxinterfMan_35779510/page/n247&quot; rel=&quot;nofollow noreferrer&quot;&gt;INTERLISP&lt;/a&gt; (also started on the PDP-1, but&#xA;eventually moving to the PDP-10 amongst many other machines) was still&#xA;using &lt;code&gt;plus&lt;/code&gt; etc. in 1974, and had added &lt;code&gt;iplus&lt;/code&gt; and friends to do&#xA;faster integer arithmetic that avoided boxing the values where&#xA;possible. (§13.1 p.13.2) This continued on through &lt;a href=&quot;https://archive.org/details/bitsavers_xeroxinternceManualOct1983_52302609/page/n71&quot; rel=&quot;nofollow noreferrer&quot;&gt;at least&#xA;1983&lt;/a&gt;. (§2.9.4 p.2.44)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other direct descendant, Maclisp, through &lt;a href=&quot;http://www.softwarepreservation.org/projects/LISP/MIT/AIM-190-White-Interim_LISP_Users_Guide.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;at least 1970&lt;/a&gt;&#xA;was the same, as far as names of numerical functions go. (No list of&#xA;functions in this one, but see code on pp. 14, 20, 25, and 30.)&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;The Start of Symbols&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;However, &lt;a href=&quot;https://www.saildart.org/MACLSP.DBA%5BUP,DOC%5D&quot; rel=&quot;nofollow noreferrer&quot;&gt;by 1973&lt;/a&gt;, as well as using &lt;code&gt;'A&lt;/code&gt; as a shorter form&#xA;of &lt;code&gt;(QUOTE A)&lt;/code&gt; (which I think was first introduced in &lt;a href=&quot;https://dspace.mit.edu/handle/1721.1/6203&quot; rel=&quot;nofollow noreferrer&quot;&gt;CONNIVER&lt;/a&gt; in 1972),&#xA;Maclisp started using symbols for arithmetic functions. (§7.1.4). (This seems&#xA;to have been part of the changes made during Moon's project to&#xA;reimplement Maclisp on the Honeywell 6180 running MULTICS.) However,&#xA;these were used for type-specific versions of the&#xA;functions; &lt;code&gt;plus&lt;/code&gt; etc. was still used for the generic versions. Here I&#xA;quote from the &lt;a href=&quot;https://en.wikipedia.org/wiki/David_A._Moon&quot; rel=&quot;nofollow noreferrer&quot;&gt;published manual&lt;/a&gt; of 1974 because it's much&#xA;easier to read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Section 7 &quot;Functions on Numbers&quot; covers the numerical operations.&#xA;From §7.2 &quot;Comparison&quot;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;p&gt;&lt;code&gt;=&lt;/code&gt;         SUBR 2 args&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;(= &lt;em&gt;x&lt;/em&gt; &lt;em&gt;y&lt;/em&gt;) is &lt;code&gt;t&lt;/code&gt; if &lt;em&gt;x&lt;/em&gt; and &lt;em&gt;y&lt;/em&gt; are numerical equal. &lt;em&gt;x&lt;/em&gt; and &lt;em&gt;y&lt;/em&gt;&#xA;  must be both fixnums or both flonums.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;p&gt;&lt;code&gt;greaterp&lt;/code&gt;         LSUBR 2 or more args&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;greaterp&lt;/code&gt; compares its arguments, which must be numbers, from&#xA;  left to right. If any argument is not greater than the next,&#xA;  &lt;code&gt;greaterp&lt;/code&gt; returns &lt;code&gt;nil&lt;/code&gt;. But if the arguments to &lt;code&gt;greaterp&lt;/code&gt; are&#xA;  strictly decreasing, the reault is &lt;code&gt;t&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;         SUBR 2 args&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;(&gt; &lt;em&gt;x&lt;/em&gt; &lt;em&gt;y&lt;/em&gt;) is &lt;code&gt;t&lt;/code&gt; if &lt;em&gt;x&lt;/em&gt; is strictly greater than &lt;em&gt;y&lt;/em&gt; and &lt;code&gt;nil&lt;/code&gt;&#xA;  otherwise. &lt;em&gt;x&lt;/em&gt; and &lt;em&gt;y&lt;/em&gt; must be both fixnums or both flonums.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And from §7.4 &quot;Arithmetic&quot;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;p&gt;&lt;code&gt;plus&lt;/code&gt;         LSUBR 0 or more args&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;plus&lt;/code&gt; returns the sum of its arguments, which may be any kind of&#xA;  numbers. Conversions to flonum or bignum representation are done&#xA;  as needed. Flonum representation will be used if any of the&#xA;  arguments are flonums; otherwise fixnum representation will be&#xA;  used if the results can fit in fixnum form. If it cannot, bugnum&#xA;  representation will be used.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;&lt;code&gt;+&lt;/code&gt;         LSUBR 0 or more args&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;+&lt;/code&gt; returns the sum of its arguments. The arguments must be&#xA;  fixnums, and the result is always a fixnum. Overflow is ignored.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h3&gt;Symbols Replace Words&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The original paper on Scheme, AIM-349 &lt;a href=&quot;https://web.archive.org/web/20171201033214/http://repository.readscheme.org/ftp/papers/ai-lab-pubs/AIM-349.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Scheme: An Interpreter for the&#xA;Extended Lambda Calculus&quot;&lt;/a&gt; (Sussman and Steele, December 1975)¹,&#xA;uses symbols such as &lt;code&gt;=&lt;/code&gt; and &lt;code&gt;+&lt;/code&gt; for the &lt;code&gt;EQUAL&lt;/code&gt; and &lt;code&gt;PLUS&lt;/code&gt; functions,&#xA;as you can immediately see from the first example in section 2, and&#xA;there's no a mention of the word versions. This seems to be the first&#xA;time that these were used for generic, rather than integer&#xA;type-specific, functions and replaced, rather than augmenting, the&#xA;word functions. This is not formally defined, however, nor&#xA;is it in AIM-452 &lt;a href=&quot;https://dspace.mit.edu/handle/1721.1/6283&quot; rel=&quot;nofollow noreferrer&quot;&gt;R¹RS&lt;/a&gt;. It's not until 1985, with the publication of&#xA;AIM-848 &lt;a href=&quot;https://dspace.mit.edu/handle/1721.1/5600&quot; rel=&quot;nofollow noreferrer&quot;&gt;R²RS&lt;/a&gt; (§II.6 p.39) that the numerical operations are&#xA;specifically defined to be &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt;, etc. and by that time of course&#xA;Common LISP had already done this too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to dig around yourself for more information or try to find&#xA;earlier examples, a good source of documentation for many, many&#xA;versions of LISP is the Software Preservation Group's &lt;a href=&quot;http://www.softwarepreservation.org/projects/LISP&quot; rel=&quot;nofollow noreferrer&quot;&gt;History of&#xA;LISP&lt;/a&gt; page.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹This is the first &quot;Lambda Paper&quot;, and might also retroactively&#xA;be called &quot;R⁰RS.&quot;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-22T15:06:22.197" LastActivityDate="2019-09-22T15:06:22.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12380" PostTypeId="2" ParentId="12377" CreationDate="2019-09-21T19:52:47.567" Score="7" Body="&lt;p&gt;Dave, I'm not sure how it worked on every PDP-family chip.  What I can tell you for certain is that, on an LSI-11/73 and Q-Bus, the MFP? and MTP? instructions did allow random access to any word in the 18-bit address space. No MMU need be involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Description of MFPD from the &lt;em&gt;PDP-11 Architecture Handbook&lt;/em&gt; (c) 1983:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Pushes a word onto the current R6 stack from an address in previous space determined by PS &amp;lt;13:12&gt;. The source address is computed using the current registers and memory map. When MFPI is executed and both previous mode and current mode are User, the instruction functions as thought it were MFPD.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;MTPD is similar but not exactly parallel:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This instruction pops a word off the current R6 stack determined by PS bits &amp;lt;15:14&gt; and stores that word into an address in previous space as determined by PS bits &amp;lt;13:12&gt;. The destination address is computed using the current registers and memory map.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I never thought about it before, but if the MMU were not active, the current memory map would be the flat, actual, contiguous 18-bit address bus. An MMU would likely allow kinds of fragmented mapping, but I didn't want that.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;background&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;from memory, about 40 years ago: The OS was Forth, and I was programming in Forth and Forth's embedded assembler.  I did not want to calculate a 15-bit HSI (Hue, Saturation, Intensity) to RGB (Red, Green, Blue) for every pixel on the fly. Instead, as the program started, it would load three, pre-calculated, static 64kb LUTs (R, G, and B).  Then, as needed, the color transform would simply be direct look-ups using the same HSI index for the 3 pixel colors.  IIRC, the color DAC received 8-bit values, so only the low-order byte was used for each component.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2019-09-21T19:52:47.567" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12381" PostTypeId="5" CreationDate="2019-09-21T19:55:44.483" Score="0" Body="&lt;p&gt;Logo, alternatively styled LOGO, is a programming language designed at the MIT AI Lab in 1967. It was &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/12327/278&quot;&gt;ported to microcomputers in the early 1980s&lt;/a&gt;, and has found widespread use in educational environments ever since.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most early microcomputer versions of Logo derived from MIT LOGO.&lt;/p&gt;&#xA;" OwnerUserId="15279" LastEditorUserId="15279" LastEditDate="2019-09-21T21:07:03.080" LastActivityDate="2019-09-21T21:07:03.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12382" PostTypeId="4" CreationDate="2019-09-21T19:55:44.483" Score="0" Body="For questions about the Logo programming language and its retro implementations." OwnerUserId="15279" LastEditorUserId="15279" LastEditDate="2019-09-21T22:08:48.467" LastActivityDate="2019-09-21T22:08:48.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12383" PostTypeId="1" CreationDate="2019-09-21T20:58:03.443" Score="19" ViewCount="3666" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Logo_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;Logo programming language&lt;/a&gt; was created by researchers at MIT's AI Lab. Its post-1980s use has been predominately in the educational field, but is this what the language was originally designed for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://github.com/PDP-10/its-vault/blob/master/files/11logo/turtle.61&quot; rel=&quot;noreferrer&quot;&gt;PDP-11 assembly&lt;/a&gt; contains numerous references to a &quot;real turtle&quot; and a &quot;display turtle&quot;. Since tortoises, an analogue precursor to turtles, were originally developed as a demonstration on cognition, the MIT AI Lab might've wanted to explore (potentially more powerful) digital implementations – was &lt;em&gt;this&lt;/em&gt; what the language was originally designed for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or was it something else?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="142" LastEditDate="2020-01-20T16:35:00.127" LastActivityDate="2020-01-20T16:35:00.127" Title="Why was Logo created?" Tags="&lt;history&gt;&lt;pdp-11&gt;&lt;pdp-10&gt;&lt;logo-language&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12384" PostTypeId="2" ParentId="12383" CreationDate="2019-09-21T21:21:17.080" Score="9" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Logo_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia: Logo, second paragraph fragment&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The language was conceived to teach concepts of programming related to&#xA;  Lisp and only later to enable what Papert called &quot;body-syntonic&#xA;  reasoning&quot;, where students could understand, predict, and reason about&#xA;  the turtle's motion by imagining what they would do if they were the&#xA;  turtle.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7037" LastActivityDate="2019-09-21T21:21:17.080" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12385" PostTypeId="2" ParentId="12383" CreationDate="2019-09-21T21:46:12.910" Score="19" Body="&lt;p&gt;LOGO was intimately tied up with research into educational methods, and in teaching children how to use computers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-246.pdf&quot; rel=&quot;noreferrer&quot;&gt;project proposal by Seymour Papert&lt;/a&gt; mentions &quot;research on children's thinking and elementary education&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further LOGO memos are &lt;a href=&quot;http://web.sonoma.edu/users/l/luvisi/logo/logo.memos.html&quot; rel=&quot;noreferrer&quot;&gt;found here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question remains is, is this what the language was &quot;originally&quot; for, or was the language co-opted for the educational research project?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My reading of &lt;a href=&quot;https://el.media.mit.edu/logo-foundation/what_is_logo/history.html&quot; rel=&quot;noreferrer&quot;&gt;this page on the history of LOGO&lt;/a&gt; says that it's been intended as an educational tool all along, but there's still some wiggle-room in interpretation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edited&lt;/em&gt; to add: this page at the MIT Media Lab &lt;a href=&quot;https://www.media.mit.edu/posts/in-memory-seymour-papert/&quot; rel=&quot;noreferrer&quot;&gt;in memory of Papert&lt;/a&gt; says that &quot;Papert came up with the idea for Logo, the first programming language for children&quot;.  Assuming it to be accurate, and since it has the air of an 'official' posting it probably is, that seems to answer the question.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-09-21T22:20:28.803" LastActivityDate="2019-09-21T22:20:28.803" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12386" PostTypeId="2" ParentId="7492" CreationDate="2019-09-22T02:34:36.723" Score="1" Body="&lt;p&gt;Perhaps &lt;a href=&quot;https://atariage.com/programmer_page.php?ProgrammerID=360&quot; rel=&quot;nofollow noreferrer&quot;&gt;Anthony Henderson?&lt;/a&gt; AtariAge says he worked at Atari circa the 2600, and worked on Graphics there.&lt;/p&gt;&#xA;" OwnerUserId="590" LastActivityDate="2019-09-22T02:34:36.723" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12387" PostTypeId="2" ParentId="12346" CreationDate="2019-09-22T08:02:24.717" Score="1" Body="&lt;p&gt;I wrote some fairly deep systems code for the BBC Micro, a popular 6502 based machine. The OS for that machine struck me at the time as a lot more systematic than most of its 8 bit peers, in the sense of being well organised and a well thought out overarching design, but that was just my impression, it could be wrong.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Ensure not only that a process can't access other processes' memory but that a process can't access the operating system's memory&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 6502 didn't support privilege levels. It supported a simple hierarchy of interrupts (IRQ which could be temporarily set as ignorable during sensitive operations, NMI - Non Maskable Interrupts - which couldn't be ignored), and it had additional circuitry that allowed one of several 16KB ROMs to be paged in as alternatives, but that was all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software was simply trusted to use the machine while running. There was no equivalent of protected pages, or R^X, or user vs. system, except informally - the manual directed programmers what memory areas were used for what, and beyond that, programmers were trusted to write code that worked. Usually it did. As one example, when a program had loaded from tape or disk, the storage buffer used by that device wouldn't be needed by the OS and the program could assume it was usable space, if memory was tight.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Provide automatic switching between processes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There wasn't multitasking as such. Any multitasking was limited to system interrupt handling, and anything implemented in the software that the user was running.  What happened instead was, events such as keyboard presses, data available from storage devices, or video scan refreshes, gave rise to interrupts. The interrupt would process the event, and return control to whatever had been running previously - usually the user's software.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Surely there has to be some set of privileged instructions or some mechanism to ensure that an errant process can't break the system, right?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Wrong. Surprisingly, by today's standards, software was generally &quot;worked reliably on release&quot;. The internet didn't exist for downloads, and you didn't take your tape/ROM chip/disk/cartridge back to the store to upgrade Game v1.2 to Game v1.2.1 for bugfixes. The OS released with the BBC was the OS you kept. And it was reliable. Games and software you bought, were reliable, too, for the most part. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the systems weren't multitasking, basically whatever you were running got the whole machine to play with. So the consequences of an errant process were simply that your machine stopped working. If it happened enough, you just didn't use that software, or avoided the part with the bug in it. Your data for other programs was typically on different disks or tapes, and unaffected. Restarting the OS was a simple key press and 0.2 second delay (it was all in ROM and almost nothing to set up) and you often used that to exit programs too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the point being, there was actually not much of a problem from errant software. Software was usually reliable, and where it wasn't, you learned to avoid the issue or ditched it. But either way bugs and erroneous processing had very little potential to do harm. After all, your system was ROM based, so it wasn't like it could overwrite or modify any of it. Restarting the OS always got you back to a clean starting point anyway.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Manage drivers for external hardware&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Drivers as we have them now, didn't exist. Hardware control came in 3 ways:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;some was baked into the OS: tape, keyboard, audio.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;some hardware was standardised and different ROMs could be bought to manage them: Acorn and Watford Electronics were both popular ROMs for handling a typical disk drive. You wanted a disk, you got the ROM chip, and plugged it into the motherboard. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;in some cases, software authors also wrote their own hardware handlers. This was often done as a form of early copyright protection. The disk, tape or ROM couldn't be copied by usual processes, because it wasn't written using standard methods. A disk containing a game, might have a custom driver that stored 13 sectors per track, or scrambled the sectors, or manually controlled the servo motor to access data on half-track physical locations. This was pretty common on the Apple II as well as the BBC Micro.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As above, these usually worked first time, and updates weren't needed.&lt;/p&gt;&#xA;" OwnerUserId="6472" LastActivityDate="2019-09-22T08:02:24.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12388" PostTypeId="2" ParentId="12383" CreationDate="2019-09-22T09:31:21.790" Score="7" Body="&lt;p&gt;Seymour Papert was a developmental psychologist, and in the early days of computers had lots of interesting ideas about how children might be taught using them. His work's online if you're interested. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;real&quot; turtle wasn't like the autonomous robot &quot;tortoise&quot;, it was simply a plotter on wheels. A domed robot with 2 large wheels, one per side, that could pivot in place and go forward and backward. Early computers didn't have bitmapped graphical displays, not for a long time, so the early Logo turtles were physical. &lt;/p&gt;&#xA;" OwnerUserId="14475" LastActivityDate="2019-09-22T09:31:21.790" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12389" PostTypeId="1" AcceptedAnswerId="12400" CreationDate="2019-09-22T11:12:14.650" Score="12" ViewCount="873" Body="&lt;p&gt;We &lt;a href=&quot;https://books.google.com.au/books?id=piNNAAAAMAAJ&amp;amp;printsec=frontcover&amp;amp;source=gbs_ge_summary_r&amp;amp;cad=0#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;know that&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Charles_Babbage&quot; rel=&quot;noreferrer&quot;&gt;Charles Babbage&lt;/a&gt; wrote a book of &lt;a href=&quot;https://en.wikipedia.org/wiki/Mathematical_table#Tables_of_logarithms&quot; rel=&quot;noreferrer&quot;&gt;log tables&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wO96p.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wO96p.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/hvdD6.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hvdD6.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In doing this, Babbage was inspired to create Log Tables mechanically, leading to his design of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Difference_engine#targetText=A%20difference%20engine%2C%20first%20created,small%20set%20of%20polynomial%20coefficients.&quot; rel=&quot;noreferrer&quot;&gt;Difference Engine&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Difference Engine didn't produce Log Tables, but a 'tabulation of polynomial functions'. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can see that the &lt;a href=&quot;https://en.wikipedia.org/wiki/Difference_engine#Operation&quot; rel=&quot;noreferrer&quot;&gt;operation&lt;/a&gt; of the Difference engine could produce a table that &lt;a href=&quot;https://en.wikipedia.org/wiki/Difference_engine#Operation&quot; rel=&quot;noreferrer&quot;&gt;looked&lt;/a&gt; like this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9fgPH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9fgPH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference engine exists today in the &lt;a href=&quot;https://www.sciencemuseum.org.uk/&quot; rel=&quot;noreferrer&quot;&gt;Science Museum in London&lt;/a&gt;, and was rebuilt in 1991. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now it seems to me that you either input a polynomial to be evaluated(doesn't seem possible with the technology), or you set up a series of differences in the third column to be summed up into the first column. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: &lt;strong&gt;How do you program Babbage's Difference Engine?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="3500" LastActivityDate="2019-10-02T16:42:05.067" Title="How do you program Babbage's Difference Engine?" Tags="&lt;difference-engine&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12390" PostTypeId="5" CreationDate="2019-09-22T11:12:56.973" Score="0" Body="" OwnerUserId="3500" LastEditorUserId="8701" LastEditDate="2019-09-22T12:23:06.887" LastActivityDate="2019-09-22T12:23:06.887" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12391" PostTypeId="4" CreationDate="2019-09-22T11:12:56.973" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-09-22T11:12:56.973" LastActivityDate="2019-09-22T11:12:56.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12392" PostTypeId="2" ParentId="12389" CreationDate="2019-09-22T12:44:46.140" Score="8" Body="&lt;p&gt;Not at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Difference Engine is not what we would call a programmable device. (So, it would also be considered off-topic for this site). It's more a slide rule than a computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The polynomal approximations to mathemathical functions are &quot;hard-coded&quot; into the gear transmission ratio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What your linked Wikipedia article refers to as &quot;programming&quot; is only setting initial values.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-09-22T12:50:24.737" LastActivityDate="2019-09-22T12:50:24.737" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="12393" PostTypeId="2" ParentId="12377" CreationDate="2019-09-22T18:17:33.607" Score="5" Body="&lt;p&gt;I asked Bob Supnik (J-11 CPU project lead, SIMH creator) about this, and this is his response.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The answer is no. If the MMU is not operating, the MT/FPI/D&#xA;  instructions  operate on physical addresses and are limited to 16bit&#xA;  addresses.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The PSW mode bits (in particular, previous mode) are operative for &#xA;  choosing which stack pointer is used if the operand specification is&#xA;  R6.  So MTPI SP will store the operand popped from the stack in the&#xA;  stack  pointer selected by PSW. The address calculation on&#xA;  the stack  is purely physical, ie, 16 bits.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If the MMU is not enabled, programs can only see memory addresses&#xA;  000000 &#xA;  - 157777 and the IO page. DMA devices can see (on the Unibus or the  original Qbus) 18 bits of memory addresses or (on the Q22 bus or a &#xA;  Unibus system with an IO map) 22 bits of memory addresses.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That is in fact what I suspected; if the MMU is not enabled, then the mapping is 16 bits virtual = 16 bits physical. Using two bits taken from the PS as address bits makes no sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So we're at an impasse here. RichF recalls accessing beyond 64KB with the MMU off on an 11/73; Bob says the CPU doesn't work like that.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-09-22T18:17:33.607" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12394" PostTypeId="2" ParentId="12211" CreationDate="2019-09-22T19:39:40.557" Score="3" Body="&lt;p&gt;From an UX stand of point, the blinking of the &lt;strong&gt;Player character&lt;/strong&gt; when it takes damage it's both the &lt;strong&gt;&lt;em&gt;cheapest&lt;/em&gt;&lt;/strong&gt; way and the &lt;strong&gt;&lt;em&gt;best&lt;/em&gt;&lt;/strong&gt; way to inform the &lt;strong&gt;human player&lt;/strong&gt; that it took damage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine what happens if you have a &lt;strong&gt;Player character&lt;/strong&gt; that walks up, down, left/right and also jumps, fires melee and ranged weapons and has a bunch of other states.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say the player is walking down:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fJus3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fJus3.png&quot; alt=&quot;Player walking down&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then it takes damage, while walking down:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MqDhT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MqDhT.png&quot; alt=&quot;Player waling down - taking damage&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is an entirely different sprite and animation (say 3 to 6 frames).&#xA;This is expensive, it has to be done &lt;strong&gt;for all the Player states&lt;/strong&gt; that have a visual representation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the animation takes precious time. If you're playing a platformer or an adventure game where your reflexes matter, you, as a human player will be frustrated with the outcome of waiting for the animation to finish rendering (let's say 3 frames, 16ms / frame, that is 48ms +input lag, it's 50ms of waiting time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the player was jumping while getting hurt, that means you also need four JUMP_GET_HURT animations (up, down, left/right).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a game developer, this is expensive both art-wise and developer wise as oppose to just applying a mask (as suggested in the other answers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This answer may not apply to NPCs, because from a player POV, you like seeing them getting hurt, you enjoy getting feedback from your action but not some much vice-versa.&lt;/p&gt;&#xA;" OwnerUserId="15285" LastActivityDate="2019-09-22T19:39:40.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12395" PostTypeId="1" AcceptedAnswerId="12396" CreationDate="2019-09-22T22:27:44.447" Score="7" ViewCount="580" Body="&lt;p&gt;The graphics chip of the VIC-20 has a setting for the number of columns and the number of rows to display. So, instead of the default values of 22 columns and 23 rows, for example, it is possible to set 24 columns and 25 rows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;POKE 36866,128+24:REM SET 24 COLUMS&#xA;POKE 36867,2*25  :REM SET 25 ROWS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, the OS would still align printed text to lines 22 columns wide and avoid printing into the additional rows, making the mode only usable for characters which are directly poked into the screen memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to adjust the actual value for rows and columns for the OS without the need for reimplementing the &lt;code&gt;CHROUT&lt;/code&gt; function?&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11916" LastEditDate="2020-01-04T14:46:16.270" LastActivityDate="2020-02-19T15:25:46.943" Title="How do I adjust the OS print output to different screen dimensions on VIC-20?" Tags="&lt;commodore&gt;&lt;vic-20&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12396" PostTypeId="2" ParentId="12395" CreationDate="2019-09-22T23:31:51.360" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Is it possible to adjust the actual value for rows and columns for the OS without the need for reimplementing the CHROUT function?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;Simple Answer:&lt;/h2&gt;&#xA;&lt;p&gt;No, you need to write a 'driver' and have it hooked.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Background:&lt;/h2&gt;&#xA;&lt;p&gt;While the Kernal does have attempts to support size independent operation, like with the  SCREEN call at $FFED, returning screen size in X/Y to applications to adapt, all internal functions use hard coded values of 22/23.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;How-to:&lt;/h2&gt;&#xA;&lt;p&gt;Hook the CHROUT vector (#10 at $0326) and, check in your driver if the current output (at $9A) is the screen (#3), if yes, do your thing, if no, continue with the original vector.&lt;/p&gt;&#xA;&lt;p&gt;For a clean install it is a good idea to use the vector copy function at $FF8D to first copy the original vector table ($20 bytes) to some place in your memory (X/Y=address, CY set), then move the existing vector to your code (the exiting jump for not screen condition), then modify the table entry (Table+18/19) and finally move it back using the vector copy function (X/Y=address, CY cleared).&lt;/p&gt;&#xA;&lt;p&gt;Caveat: &lt;strong&gt;This will only let program output use your driver and obey whatever new margins there are. The program editor will still work with its build in 22/23 values.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;And while it would be nice to intercept $FFED as well, it isn't possible. So all programs checking for screen size will still see a 22/23 sized screen.&lt;/p&gt;&#xA;&lt;p&gt;So, if someone wants to write an improved ROM, this would be one point to take care of :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.S.: All mentioned calls work on all Kernals on VC20, C64 Family (C64, C128, C65) and TED Family (C16, C116, Plus/4) and are assigned the same addresses. They don't exist, or have different addresses on PET/PET II family computers.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-23T14:01:40.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12397" PostTypeId="1" CreationDate="2019-09-23T08:14:21.323" Score="3" ViewCount="110" Body="&lt;p&gt;I have a CF HDD with installed WB3.1, which works as expected on real A1200. Yesterday I wanted to copy over the latest ACA1221 soft, took the CF out, connected to PC just as normal. The WinUAE is set up exactly as my A1200 (without aca) and in fact is set up exactly the same way that allowed me to install WB in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;WorkBench loads in WinUAE from CF, the WB window shows after the  boot, with all the icons, but the clock cursor icon remains on the screen (betterWB, MUI, etc. Not loading). If left like this it will be in this state forever, not loading fully, but only on WinUAE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;WinUAE uses rom dumped from my licensed chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way to fix it? I just need to copy over few files. I don't want to reinstall WB if I don't have to.&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2019-09-23T17:27:24.267" LastActivityDate="2019-09-23T17:27:24.267" Title="CF with Workbench not loading in WinUAE but works on real A1200" Tags="&lt;amiga-1200&gt;&lt;amiga-workbench-3.1&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12398" PostTypeId="2" ParentId="12389" CreationDate="2019-09-23T09:27:46.477" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Now it seems to me that you either input a polynomial to be evaluated(doesn't seem possible with the technology), or you set up a series of differences in the third column to be summed up into the first column.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In your example, the table is one way to represent the polynomial. So you have effectively input it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you repeatedly differentiate any polynomial function, you eventually end up with a constant. The first derivative of 2x&lt;sup&gt;2&lt;/sup&gt;-3x+2 is 4x-3. The second derivative is simply 4. This means that, if you take the difference between successive values of the polynomial (for integer x), and put them in a column, then have another column which is the differences of the last column and so on, eventually you get a column where all the numbers of are the same as in the third column of your example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can calculate new values of the polynomial by adding the last column to the second to last column, then the new second to last column to the third to last column etc until you get to the first column. In your example, row 3 of column 3 must have a 4 in it which means row 4 of column 2 must have 11+4 = 15 in it which means the value for x = 5 is 22 + 55 = 37.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the Difference Engine calculates successive values of a polynomial simply by doing repeated additions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In maths a lot of functions can be approximated by polynomials. So you find a polynomial that approximates your function, set the Difference Engine up for that polynomial and then start churning out values. You have to be careful, because, after a while the error in the approximation will be greater than your desired accuracy and you have to stop.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastEditorUserId="611" LastEditDate="2019-09-23T20:08:40.587" LastActivityDate="2019-09-23T20:08:40.587" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12399" PostTypeId="2" ParentId="12395" CreationDate="2019-09-23T09:46:49.557" Score="9" Body="&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12396/7208&quot;&gt;Raffzahn&lt;/a&gt; points out, unfortunately you can't &quot;adjust&quot; the OS; you&#xA;need to replace KERNAL code to have a different number of screen&#xA;columns work mostly as expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while there are demos out there such as &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/vic20/demos.basic/unexpanded/&quot; rel=&quot;noreferrer&quot;&gt; &lt;code&gt;Big One (s).prg&lt;/code&gt; and&#xA;&lt;code&gt;Big 2.prg&lt;/code&gt;&lt;/a&gt; (PAL version), which are nice to look at, they&#xA;don't help when you actually want to program using such a screen.&#xA;(They may well be worth looking at to get more details about how this&#xA;technique works, however.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If what you're looking for is a way to make programming more&#xA;comfortable, however, and you have at least an 8K expansion, you might&#xA;do better with one of the software 40-column systems. These might also&#xA;serve as sophisticated examples of how to replace the KERNAL code, if&#xA;you're willing to disassemble them or can find source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TechTinkering reviews both &quot;The Big One&quot; above and several 40-column&#xA;solutions &lt;a href=&quot;https://techtinkering.com/articles/40-columns-in-basic-on-the-commodore-vic-20/&quot; rel=&quot;noreferrer&quot;&gt;in this blog post&lt;/a&gt;  and demos them &lt;a href=&quot;https://youtu.be/AjRAtJbWOAQ&quot; rel=&quot;noreferrer&quot;&gt;in this&#xA;video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He covers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;VIC 40/FAT-40&lt;/strong&gt; (&lt;code&gt;Fat 40.prg&lt;/code&gt;, PAL): This is one of the most&#xA;memory-hungry extensions because it includes a lot of code to add&#xA;PET compatibility; the intent is to make the VIC-20 able to run PET&#xA;BASIC programs. It can also overlay &quot;high&quot; resolution graphics (such&#xA;as they are on the VIC-20 :-)) on text. The demo (&lt;code&gt;Fat40 demo.prg&lt;/code&gt;)&#xA;is fairly impressive.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Screen-40&lt;/strong&gt; (&lt;code&gt;Screen-40.prg&lt;/code&gt;, NTSC): Similar to VIC 40/FAT-40 but&#xA;drops PET compatibility, using 653 fewer bytes. This actually worked&#xA;for me on PAL as well, though the text area was offset far to the&#xA;upper-left on the screen, probably in the overscan area of a real&#xA;television.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Super Screen&lt;/strong&gt; (PAL): Leaves slightly less memory free than&#xA;Screen-40 and, but it does indeed have an nicer font. I've not&#xA;played with (it needs to be pulled out of a tape image), but&#xA;apparently in BASIC it prints annoying extra newlines. There may be&#xA;an NTSC version available as well.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;PET Loader&lt;/strong&gt; (&lt;code&gt;PET Loader.prg&lt;/code&gt;, but it's actually a cartridge&#xA;image; PAL): A cartridge that lets you boot up right into 40&#xA;columns. Provides PET emulation, but not as good as VIC-40/FAT-40.&#xA;Doesn't work on NTSC, though some people are working on that.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The first two above are available on from Zimmer's archive&#xA;under &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/vic20/utilities/8k/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;/pub/cbm/vic20/utilities/8k&lt;/code&gt;&lt;/a&gt;. The PET Loader cartridge&#xA;image is available under &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/vic20/roms/tools/8k/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;/pub/cbm/vic20/roms/tools/8k/&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-09-23T09:46:49.557" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12400" PostTypeId="2" ParentId="12389" CreationDate="2019-09-23T14:01:11.703" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How do you program Babbage's Difference Engine?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Simply you don't, as it is not programmable.&lt;/strong&gt; (*1)&lt;/p&gt;&#xA;&lt;p&gt;A Difference Engine is a fixed sequence adder.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Workings&lt;/h2&gt;&#xA;&lt;p&gt;A differential engine adds a series of values, called columns (registers), in the form &lt;code&gt;R(n) = R(n) + R(n+1)&lt;/code&gt; with &lt;code&gt;n&lt;/code&gt; ranging from 1 to the number of registers - in case of Babbage's machine six.&lt;/p&gt;&#xA;&lt;p&gt;From an engineering point the machine isn't anything different from a &lt;a href=&quot;https://en.wikipedia.org/wiki/Pinwheel_calculator&quot; rel=&quot;nofollow noreferrer&quot;&gt;pinwheel calculator&lt;/a&gt;, which, being able to solve a multiplication as a sequence of additions, is still just an adder.&lt;/p&gt;&#xA;&lt;p&gt;Well, the Difference Engine is maybe special the way of organizing the adders in two groups to allow parallel operation. It only needs a fixed number of two calculation steps, independent of the number of columns, as a side effect the optimal number of columns is even. Calculation is done in two steps with all even columns in step 1 and all odd in step 2. A very simple and admirable way to increase performance due parallel processing.&lt;/p&gt;&#xA;&lt;p&gt;Beside the number of columns, which defines the complexity of polynomial that can be calculated/approximated, there is the number of digits per column defining the precision. Babbage's machine was planned for 20, the prototype had 6, the 1991 #2 has 31.&lt;/p&gt;&#xA;&lt;p&gt;Like the mentioned multiplication by a pinwheel calculator, a differential engine is not programmable at all (*2).&lt;/p&gt;&#xA;&lt;h2&gt;Use Case&lt;/h2&gt;&#xA;&lt;p&gt;The specific use case comes not from its mechanics or any 'programming', but the fact that a wide range of mathematical descriptions can be turned into a &lt;a href=&quot;https://en.wikipedia.org/wiki/Polynomial&quot; rel=&quot;nofollow noreferrer&quot;&gt;polynomial&lt;/a&gt; function, which again can be expressed as a series of addition, subtractions and multiplications, which then again can be reduced into simple additions.&lt;/p&gt;&#xA;&lt;p&gt;And that's what the Difference Engines are about: &lt;em&gt;&lt;strong&gt;Adding up a fixed sequence of intermediate values&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;Change of Operation&lt;/h2&gt;&#xA;&lt;p&gt;The only change that could be done to a difference engine, much like to any adder, is to change the gearing to work in different number systems. Like using base 60 gears to calculate trigonometry or 1/20/12 gears to handle English currency, the later a use case for interest tables.&lt;/p&gt;&#xA;&lt;h2&gt;'Standard' Implementations&lt;/h2&gt;&#xA;&lt;p&gt;Since a difference engine is just a series of adders, it can as well be formed from any machine capable to add a series of values and keep track of each. Notable later examples showing this might be&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Alexander_John_Thompson&quot; rel=&quot;nofollow noreferrer&quot;&gt;Alexander Thompson&lt;/a&gt;'s Machine build from four coupled standard &lt;a href=&quot;https://en.wikipedia.org/wiki/Odhner_Arithmometer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ohdner style&lt;/a&gt; Triumphator C1&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Leslie_Comrie&quot; rel=&quot;nofollow noreferrer&quot;&gt;Leslie Comrie&lt;/a&gt; work showing the use of existing accounting machines, like Hollerith tabulating machines and others.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - As Tofro already &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12392/6659&quot;&gt;pointed out&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Going as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12398/6659&quot;&gt;far as JeremyP does&lt;/a&gt; and call the preparation of the input programming might be quite over the edge, as it would turn any preparation of input values into programming, effectively making the term equivalent to preparation and thus meaningless.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-23T22:51:11.287" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12401" PostTypeId="2" ParentId="5733" CreationDate="2019-09-23T15:06:27.840" Score="4" Body="&lt;p&gt;This &lt;em&gt;will&lt;/em&gt; work with the USB floppy drive you have mentioned, a Chuanganzhuo one, using Windows 10. You have to use a proper Double Density floppy disk, not a High Density one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried it with a High Density floppy disk and it gave me &lt;code&gt;Parameters not supported by drive&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C:\Users\J&amp;gt;format a: /T:80 /N:9&#xA;Insert new disk for drive A:&#xA;and press ENTER when ready...&#xA;The type of the file system is FAT.&#xA;Formatting 720 KB&#xA;Parameters not supported by drive.&#xA;Format failed.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So then I tried with a Double Density floppy and I got:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C:\Users\J&amp;gt;format a: /T:80 /N:9&#xA;Insert new disk for drive A:&#xA;and press ENTER when ready...&#xA;The type of the file system is FAT.&#xA;Verifying 720 KB&#xA;Initializing the File Allocation Table (FAT)...&#xA;Volume label (11 characters, ENTER for none)? CREATOR&#xA; Format complete.&#xA;     713.0 KB total disk space.&#xA;     713.0 KB are available.&#xA;&#xA;        1,024 bytes in each allocation unit.&#xA;           713 allocation units available on disk.&#xA;&#xA;           12 bits in each FAT entry.&#xA;&#xA;Volume Serial Number is 040B-DA30&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am lucky enough to have a DD floppy lying about, not everyone is. On the off chance someone Googles this in future, here is the answer...in my case I am transferring files from a PC over to an Atari ST and I can confirm that this worked with the Atari and that the disk was also writeable in the Atari drive.&lt;/p&gt;&#xA;" OwnerUserId="15288" LastEditorUserId="15288" LastEditDate="2019-09-23T15:15:03.033" LastActivityDate="2019-09-23T15:15:03.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12402" PostTypeId="1" CreationDate="2019-09-23T18:52:06.160" Score="5" ViewCount="610" Body="&lt;p&gt;It ran on Windows 95 or 98 I believe. It allowed you to make music by placing colored blocks in various rows. I think it was associated with MTV, but I'm not sure (I had never actually heard of MTV at the time I had this program). It also had an odd feature where you could make music videos made up of moving geometric shapes. One of the sample songs, which was some kind of rock/metal thing if I remember right, featured a green box 'inflating' in time to the music.&lt;/p&gt;&#xA;&lt;p&gt;What program was this?&lt;/p&gt;&#xA;&lt;p&gt;edit: It looks like the MTV music generator from Jester Interactive released in 2000, however, that was a ps1 game. I played this on the computer if I remember right.&lt;/p&gt;&#xA;" OwnerDisplayName="user15292" LastEditorUserId="15334" LastEditorDisplayName="user15292" LastEditDate="2021-01-23T18:54:06.810" LastActivityDate="2021-01-23T18:54:06.810" Title="What was this music program I played with around the late 90s?" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12403" PostTypeId="1" AcceptedAnswerId="12574" CreationDate="2019-09-23T21:07:25.537" Score="6" ViewCount="259" Body="&lt;p&gt;I am trying to get an Amiga 3000T up and running, all seems good but there's no Fast RAM.  All Zips ard populated.  Is there any (easy) way to test the ZIPs?  Also, could something like a bad cap kill the Fast RAM?  An alternate Ramsey was tried.&lt;/p&gt;&#xA;" OwnerUserId="13803" LastEditorUserId="7208" LastEditDate="2019-10-25T06:14:06.633" LastActivityDate="2019-10-25T13:15:44.403" Title="Why does my Amgia 3000 show no Fast RAM even though the ZIP sockets are populated?" Tags="&lt;amiga&gt;&lt;memory&gt;&lt;amiga-3000&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12404" PostTypeId="1" AcceptedAnswerId="12409" CreationDate="2019-09-23T21:54:20.193" Score="3" ViewCount="372" Body="&lt;p&gt;Is the 3000T's case made by Commodore, or was it stock from elsewhere?  I need a side panel for one.&lt;/p&gt;&#xA;" OwnerUserId="13803" LastEditorUserId="7208" LastEditDate="2019-10-25T06:12:04.473" LastActivityDate="2019-10-25T06:12:04.473" Title="Is the 3000T's case made by Commodore, or was it stock from elsewhere?" Tags="&lt;amiga&gt;&lt;case&gt;&lt;amiga-3000&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12405" PostTypeId="5" CreationDate="2019-09-23T21:54:37.740" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-09-23T21:54:37.740" LastActivityDate="2019-09-23T21:54:37.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12406" PostTypeId="4" CreationDate="2019-09-23T21:54:37.740" Score="0" Body="For questions about the BetterWB Amiga Workspace pack." OwnerUserId="15279" LastEditorUserId="15279" LastEditDate="2019-09-24T16:36:25.313" LastActivityDate="2019-09-24T16:36:25.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12407" PostTypeId="5" CreationDate="2019-09-23T21:57:31.977" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-09-23T21:57:31.977" LastActivityDate="2019-09-23T21:57:31.977" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12408" PostTypeId="4" CreationDate="2019-09-23T21:57:31.977" Score="0" Body="For questions about the Kansas City standard for digital data storage on Compact Audio Cassettes." OwnerUserId="15279" LastEditorUserId="15279" LastEditDate="2019-09-24T12:14:48.563" LastActivityDate="2019-09-24T12:14:48.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12409" PostTypeId="2" ParentId="12404" CreationDate="2019-09-24T06:37:12.243" Score="8" Body="&lt;p&gt;The case of the Amiga 3000T was actually modified from the Commodore PC-60 III (their top-range PC). I doubt, however, that this makes it an easier find. Those monsters are sought after as well, apparently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore was still fully functional when the PC-60 and 3000T were produced, so it is very unlikely a generic stock item from a third-party supplier.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2019-09-24T07:25:25.983" LastActivityDate="2019-09-24T07:25:25.983" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12410" PostTypeId="1" AcceptedAnswerId="12411" CreationDate="2019-09-24T11:14:40.767" Score="3" ViewCount="282" Body="&lt;p&gt;We define programmable machines as those that can do:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;sequence&lt;/li&gt;&#xA;&lt;li&gt;selection, and&lt;/li&gt;&#xA;&lt;li&gt;iteration&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;ie the &lt;a href=&quot;https://en.wikipedia.org/wiki/Turing_machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turing Model of Computing&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://vimeo.com/70589461&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here we see&lt;/a&gt; the &lt;a href=&quot;http://newsroom.ucla.edu/stories/video-1948-mechanical-computer-247581&quot; rel=&quot;nofollow noreferrer&quot;&gt;UCLA's 1948 Mechanical Computer&lt;/a&gt; performing a calculation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me this appears to be a &lt;a href=&quot;https://en.wikipedia.org/wiki/Differential_analyser&quot; rel=&quot;nofollow noreferrer&quot;&gt;Differential Analyser&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: &lt;strong&gt;Was UCLA's 1948 Mechanical Computer programmable, or merely a calculator?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="3500" LastActivityDate="2019-09-24T11:44:54.777" Title="Was UCLA's 1948 Mechanical Computer programmable, or merely a calculator?" Tags="&lt;early-computer&gt;&lt;mechanical&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12411" PostTypeId="2" ParentId="12410" CreationDate="2019-09-24T11:44:54.777" Score="4" Body="&lt;p&gt;From what I know, and what the video supports, this is 'simply' an &lt;a href=&quot;https://en.wikipedia.org/wiki/Analog_computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;analogue computer&lt;/a&gt;. Analogue computers are not programmable in a sense like we use the term today. They are more like Construction Sets with predefined blocks and mounting plates. In this case like a highest quality &lt;a href=&quot;https://en.wikipedia.org/wiki/Meccano&quot; rel=&quot;nofollow noreferrer&quot;&gt;Meccano-like&lt;/a&gt; set. Analogue computers work, as their name say, &lt;strong&gt;by building&lt;/strong&gt; a device working analogous to the problem in question. When build/configured, they represent a fixed function machine. Depending on the setup with fixed values, or parameterized input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a 'premade' analogue computer is not different than building the same machine from scratch. It just simplifies the construction process and enables repetition due its premade parts, designed to ease construction (*1). In this it doesn't matter if  made from mechanical parts, to be bolted into a frame (like the example) and driven by some motor, or a structured set of amplifiers and resistors in an electronic analogue computer to be wired up according to the problem (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In either way, the term programming, as it used today with computers, is at best borderline, but usually not applicable here. They are fixed function setups.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Which is the very definition of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Construction_set&quot; rel=&quot;nofollow noreferrer&quot;&gt;construction set&lt;/a&gt;, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Note that this is to be distinct from early digital, patch (board) driven machines like &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Tabelliermaschine_D11_DEHOMAG_TSD_(3).JPG&quot; rel=&quot;nofollow noreferrer&quot;&gt;D11&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/ENIAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;ENIAC&lt;/a&gt; that had to be wired up as well.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-09-24T11:44:54.777" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12414" PostTypeId="1" CreationDate="2019-09-24T18:25:52.707" Score="6" ViewCount="118" Body="&lt;p&gt;I've seen people ask about restoring printer or typewriter ribbons, but my situation's a little different. I have a self-inking ribbon for a DECwriter Correspondent. It's easy to open up the casing, and inside there's an &quot;infinite&quot; ribbon (the ends are connected together). There's a large wheel that's supposed to be saturated with ink; it rolls against a small wheel which then rolls against the ribbon, transferring ink to it (at least that's the plan).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything, or course, is dried out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried saturating the large wheel with stamp pad ink but it doesn't seem to be transferring to the ribbon. It transfers to my fingers just fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas how to get this working?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you,&#xA;   Bob&lt;/p&gt;&#xA;" OwnerUserId="15295" LastActivityDate="2019-09-24T18:25:52.707" Title="Restoring a self-inking printer cartridge" Tags="&lt;terminal&gt;&lt;restoration&gt;&lt;dec&gt;&lt;printer&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12417" PostTypeId="1" CreationDate="2019-09-24T19:01:03.317" Score="4" ViewCount="2662" Body="&lt;p&gt;I bought a model m keyboard for use at work. The keyboard functions fine, but the cord is in bad shape. Functionally, the cord does not cause any shorts, but the plastic is very brittle and large chunks of it have fallen off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a 1994 model m (Part Number 71G4644) with the attached PS/2 cable. I want to replace the cable with a new one, preferably like the classic, coiled cords. My question is where I can find a replacement cord?&lt;/p&gt;&#xA;" OwnerUserId="15297" LastEditorUserId="70" LastEditDate="2019-09-24T19:23:03.873" LastActivityDate="2019-09-25T04:53:54.457" Title="Replacing cord for IBM model M keyboard" Tags="&lt;keyboards&gt;&lt;ibm&gt;&lt;maintenance&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12418" PostTypeId="2" ParentId="12346" CreationDate="2019-09-24T19:20:42.113" Score="3" Body="&lt;p&gt;The specific details of what a 6502 Apple II was doing when it was sitting at the BASIC command prompt or Monitor command prompt is this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Periodically check for a keyboard key press to be detected at address $C000&lt;/li&gt;&#xA;&lt;li&gt;If no input, it runs a delay routine to display a blinking white box or a square checkerboard (later enhanced IIe ROM) as a cursor at the current screen position.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And that is all. Nothing else is going on. The 6502 processor is frantically spinning away at a constant 1 million cycles per second to... blink the cursor and read the keyboard input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system Monitor ROM and BASIC ROM were designed to be extremely memory efficient, because the very first of the Apple II series could be sold with as little as 4 kilobytes of memory installed. For such a tiny amount, nearly half of it is reserved for use by the system:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$0000-$00FF - 256 bytes - Zero page for 1-byte CPU memory instructions&lt;/li&gt;&#xA;&lt;li&gt;$0100-$01FF - 256 bytes - CPU Stack &lt;/li&gt;&#xA;&lt;li&gt;$0200-$02FF - 256 bytes - Keyboard input buffer&lt;/li&gt;&#xA;&lt;li&gt;$03D0-$03FF -  24 bytes - Interrupt vector, soft vector table&lt;/li&gt;&#xA;&lt;li&gt;$0400-$07FF - 1024 bytes - 40x24 text page 1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Which left just 2048 bytes free for an actual BASIC program, and still less than that if the BASIC program needed number or string variables, as those had to fit into that same available 2048 byte region of memory. (Hi-res graphics are impossible with 4k, need at least 4k + 8k addressed to hi-res page 1 bank, skipping over the 4k from $1000-1FFF.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the programmer knew how to write 6502 assembly, they could tuck a tiny set of custom 6502 subroutines into the 208 byte gap at $0300-$03CF such as to play sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 Apple II boot process was equally just as simple. There is a small amount of ROM for each interface card, but what is there is absolutely tiny.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each slot only had a permanent 256 bytes of ROM reserved to it, from $C100-C1FF for slot 1 to $C700-C7FF for slot 7. There was a way to activate an additional 2k of ROM for each slot, but each slot had to share the same 2 kilobytes from $C800-CFFF, and two of these extended ROM spaces could not be active at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the Apple II boot, all that happens is that the Monitor ROM tries to locate some signature bytes to identify the location of the Disk II interface, scanning in reverse from slot 7 to slot 1, and then runs the boot ROM on the first Disk II interface it finds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The boot ROM is only capable of selecting drive 1, turning on the spindle motor, moving the drive head to track zero, and then sitting there looking for the sync bytes for sector zero of track zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it succeeds, the boot ROM reads sector zero into memory and then runs whatever code it found there. If the boot ROM can't find sector zero, it will keep trying, and spins the drive motor forever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually booting the early DOS 3.2 (13-sector) / DOS 3.3 (16-sector) involved a similar set of tiny steps, one after the other. Sector zero contains just enough code in 256 bytes, to tell the drive to re-read sector zero and then also read sector one. The combined two sectors have enough code to tell the drive how to read all the sectors in track zero, and run that code. The combined sectors of track zero are now finally large and complex enough to read in the rest of DOS in tracks 1 and 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With DOS now running, it tries to find a startup program on the disk, and run it. If no such program is found, it returns control to the BASIC/Monitor prompt, but with &quot;hooks&quot; active to check for typed DOS commands before BASIC commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's all that is happening, there are no background tasks running, no task manager. Two different programs can't run at the same time. It was all very simple back in the early days.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastActivityDate="2019-09-24T19:20:42.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12419" PostTypeId="2" ParentId="12417" CreationDate="2019-09-24T19:31:54.140" Score="5" Body="&lt;p&gt;Replacement cables are available from Unicomp (&lt;a href=&quot;https://www.pckeyboard.com/&quot; rel=&quot;noreferrer&quot;&gt;https://www.pckeyboard.com/&lt;/a&gt;) but you might not be able to get a coiled cord in the 'permanently attached' variant.  They do appear to have coiled cords of the 'detachable' type, but you would need the corresponding socket on your keyboard (it looks vaguely like an RJ45 connector, but with plastic tangs on both sides rather than the top).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unicomp also sells 'modern' Model M variants (with USB interface and Windows keys) if you're interested.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2019-09-24T19:31:54.140" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12420" PostTypeId="1" AcceptedAnswerId="12903" CreationDate="2019-09-25T00:51:26.750" Score="11" ViewCount="643" Body="&lt;p&gt;I have an old Colorado 250MB tape drive, which connects to the PC's floppy controller, that I'd like to use to read a QIC-80 cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that very old versions of the Linux kernel used to have the &lt;code&gt;ftape&lt;/code&gt; driver built into them (which would theoretically let me read the raw data from the tape), but I've never actually used it, and I'm not sure how to get it to work properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've connected the tape drive to the PC, booted into Linux, and executed the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$ sudo modprobe ftape&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That seemed to load the &lt;code&gt;ftape&lt;/code&gt; driver successfully, but I still don't see any new devices under &lt;code&gt;/dev&lt;/code&gt; that are related to the tape drive, e.g. /dev/qft0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then tried the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$ sudo /dev/MAKEDEV ftape&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...but that still didn't create any new devices under &lt;code&gt;/dev&lt;/code&gt;.  I assume I must be missing something very simple. Does anyone have any previous experience getting &lt;code&gt;ftape&lt;/code&gt; set up?&lt;/p&gt;&#xA;" OwnerUserId="13540" LastEditorUserId="13540" LastEditDate="2019-11-27T01:12:44.047" LastActivityDate="2019-11-27T21:24:13.133" Title="Reading old QIC-80 tape using Linux with ftape" Tags="&lt;magnetic-tape&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12421" PostTypeId="2" ParentId="12417" CreationDate="2019-09-25T04:53:54.457" Score="3" Body="&lt;p&gt;This is not your typical model M! I can see why you like it. :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Honestly, a donated ps/2 cable from another keyboard would work the best. They usually have stress relief blocks molded on, and it should not be hard to make a slightly larger one fit with a sharp knife. Then just crimp or solder the new wire to your keyboard mainboard, and shinkwrap the connections. Make sure the stress relief is working and not pulling on the wires.&lt;/p&gt;&#xA;" OwnerUserId="15298" LastActivityDate="2019-09-25T04:53:54.457" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12422" PostTypeId="1" CreationDate="2019-09-26T04:05:00.017" Score="4" ViewCount="1062" Body="&lt;p&gt;&lt;a href=&quot;http://vice-emu.sourceforge.net/vice_7.html#SEC111&quot; rel=&quot;nofollow noreferrer&quot;&gt;Section 7.1.1.2 of the VICE manual&lt;/a&gt; mentions that cartridge&#xA;slot 1 (of the four slots 0, 1, Main and I/O) in the emulator is&#xA;special in that it's designed to support &quot;mostly RAM-based cartridges&quot;&#xA;(of which there seem to be just four that are officially supported in&#xA;this slot).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cartridges are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Double Quick Brown Box (DQBB), on which I've found no information.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Trilogic_Expert_Cartridge&quot; rel=&quot;nofollow noreferrer&quot;&gt;Expert Cartridge&lt;/a&gt;, which seems like a fairly standard fast&#xA;loader and freezer except that it &quot;held its system software in an 8&#xA;KB RAM that could be reprogrammed.&quot;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ISEPIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;ISEPIC&lt;/a&gt;, another freezer, this one with 2 KB of RAM, &quot;banked into a&#xA;256-byte page at 0xDF00 – 0xDFFF.&quot; (This is the IO2 area, not used&#xA;by internal devices except RAM, when mapped in.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/ytmytm/c64-ramcart128&quot; rel=&quot;nofollow noreferrer&quot;&gt;RamCart&lt;/a&gt;, a memory expansion with battery backup, also banking the&#xA;RAM into the $D000-FF IO2 area (and using $DE00 and $DE01 in the IO1&#xA;area to control which page is banked in), used as a RAM disk.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What was special about these cartridges that they need a separate slot&#xA;in the emulator? Were there cartridges with RAM that don't need the&#xA;special emulated slot? (Here I'm speaking of contemporary cartridges,&#xA;rather than modern hardware like the &lt;a href=&quot;https://www.protovision.games/hardw/mmc64.php?language=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;MMC64&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two above that I have details about use the standard external I/O&#xA;areas, but there's already an I/O slot that most I/O cartridges seem&#xA;to use. It looks as if these cartridges probably all had ROM as well,&#xA;which would likely be mapped into the usual areas so that it could be&#xA;run &lt;a href=&quot;https://www.c64-wiki.com/wiki/Cartridge#Cartridge_boot-up&quot; rel=&quot;nofollow noreferrer&quot;&gt;in the usual way&lt;/a&gt; or via MAX mode when the C64 is&#xA;started. And two or three of these seem to be freezer cartridges, but,&#xA;as with I/O cartridges, other freezer cartridges don't get a special&#xA;slot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that I'm not asking about VICE in particular; I'm assuming there&#xA;that there's some good reason &lt;em&gt;related to the actual hardware itself&lt;/em&gt;&#xA;that made the emulator developers decide things like, &quot;yes, this&#xA;cartridge and this other one can be used at the same time, but these&#xA;two can't, and perhaps &quot;this cartridge needs special emulation code.&quot;&#xA;(Note that the C64 itself never prevented anyone from using any pair&#xA;of cards at the same time; you could just plug in a bus expander and&#xA;plug in both cards. Whether they would work together is another&#xA;question, of course, and one similar to this one.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="11916" LastEditDate="2020-01-03T21:39:17.157" LastActivityDate="2020-01-03T21:39:17.157" Title="How did &quot;RAM&quot; cartridges for the C64 work?" Tags="&lt;commodore-64&gt;&lt;memory&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12423" PostTypeId="2" ParentId="10850" CreationDate="2019-09-26T04:59:24.737" Score="0" Body="&lt;p&gt;This is intended to supplement the other answers here; you should also&#xA;read them if you've not done so already.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Address Mapping&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;There are basically two possible situations when it comes to address&#xA;mapping and interaction with the cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you assert &lt;code&gt;G̅A̅M̅E̅&lt;/code&gt; and do not assert &lt;code&gt;E̅X̅R̅O̅M̅&lt;/code&gt;, there's only one&#xA;address mapping configuration possible because bits 0-2 of the&#xA;processor's PIO output (&lt;code&gt;$0001&lt;/code&gt;) are ignored by the PLA. This gives&#xA;you:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RAM at &lt;code&gt;$0000-$0FFF&lt;/code&gt;; this can never be disabled in any mode.&lt;/li&gt;&#xA;&lt;li&gt;I/O at &lt;code&gt;$D000-$DFFF&lt;/code&gt;. The C64 internal I/O devices respond to&#xA;requests in &lt;code&gt;$D000-$DDFF&lt;/code&gt;, but &lt;code&gt;$DE00-$DFFF&lt;/code&gt; are free for your use.&#xA;The &lt;code&gt;I̅O̅1&lt;/code&gt; and &lt;code&gt;I̅O̅2&lt;/code&gt; lines will be asserted for accesses to the lower&#xA;and upper half of these areas, but you don't really need these&#xA;because you already know that there are no C64 devices there.&lt;/li&gt;&#xA;&lt;li&gt;Everything else &quot;unmapped&quot; as far as internal devices go. For&#xA;accesses to locations &lt;code&gt;$8000-$9FFF&lt;/code&gt; and &lt;code&gt;$E000-$FFFF&lt;/code&gt; the &lt;code&gt;R̅O̅M̅L̅&lt;/code&gt; and&#xA;&lt;code&gt;R̅O̅M̅H̅&lt;/code&gt; signals will be asserted, but in this mode you don't need&#xA;them since you know that no C64 internal devices will ever be using&#xA;this range anyway.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In this mode you can never get access to the C64 KERNAL, BASIC or&#xA;character set ROMs. Writes will go through to C64 RAM, but you can&#xA;never read from it.¹&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In all other states that can be set by the cartridge (i.e., any where&#xA;&lt;code&gt;G̅A̅M̅E̅&lt;/code&gt; is not asserted), the memory mapping is affected by the low&#xA;three bits of &lt;code&gt;$0001&lt;/code&gt; as read by the PLA. The cartridge can't read&#xA;these directly, since these are lines between the processor and PLA&#xA;only, the only knowledge the cartridge hardware can have of what parts&#xA;of the memory map won't be responded to by internal devices (causing&#xA;great trouble if the cartrdige also tries to respond to a read) are&#xA;the &lt;code&gt;I̅O̅1&lt;/code&gt;, &lt;code&gt;I̅O̅2&lt;/code&gt;, &lt;code&gt;R̅O̅M̅L̅&lt;/code&gt; and &lt;code&gt;R̅O̅M̅H̅&lt;/code&gt; lines. If you're using only&#xA;software entirely under your control and understood by you, it can set&#xA;the memory map appropriately to let the cart use other areas, but if&#xA;any other software might change this map without disabling appropriate&#xA;cartridge hardware, you are likely to see problems.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;&lt;code&gt;BA&lt;/code&gt;&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I've checked the schematics, and from my limited knowledge &lt;a href=&quot;https://www.c64-wiki.com/wiki/Talk:Expansion_Port&quot; rel=&quot;nofollow noreferrer&quot;&gt;it looks&#xA;to me that the &lt;code&gt;BA&lt;/code&gt; signal is an output from the VIC&lt;/a&gt;.&#xA;But it would be good if someone with more knowledge than me would&#xA;confirm this.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹&lt;sub&gt;Actually, there are some special tricks that might let you get&#xA;access to some of this ROM and RAM, but that's a subject for [other&#xA;questions]&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/12372/7208&quot;&gt;rc&#xA;12372&lt;/a&gt;.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-09-26T04:59:24.737" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12424" PostTypeId="1" CreationDate="2019-09-26T11:20:34.460" Score="3" ViewCount="357" Body="&lt;p&gt;The &lt;a href=&quot;http://shop-pdp.net/ashtml/asxdoc.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASxxxx&lt;/a&gt; assembler system is a multi-platform assembler that&#xA;supports a lot of different CPUs, including Z80, 6800, 6502, 6809,&#xA;etc. I'm intending to use it to build software for a variety of&#xA;popular retrocomputing platforms based on these CPUs.&lt;/p&gt;&#xA;&lt;p&gt;Its linker, &lt;a href=&quot;http://shop-pdp.net/ashtml/aslink.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASlink&lt;/a&gt;, supports three basic output formats. &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_HEX&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel HEX&lt;/a&gt;&#xA;and &lt;a href=&quot;https://en.wikipedia.org/wiki/SREC_(file_format)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motorola S-record&lt;/a&gt; are ASCII formats that are both well&#xA;known and documented (if slightly informal) standards.&lt;/p&gt;&#xA;&lt;p&gt;The linker's one binary output format is &amp;quot;Tandy Color Computer Disk&#xA;BASIC binary format&amp;quot; This format, while simple, seems obscure; the&#xA;only documentation I've ever been able to find for it, outside of the&#xA;&lt;a href=&quot;http://shop-pdp.net/ashtml/asls01.htm#CoCoDiskBasic&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASlink documentation itself&lt;/a&gt;, is in a book that&#xA;reverse-engineered the ROMs in the CoCo disk controller, &lt;a href=&quot;https://archive.org/details/Disk_Basic_Unravelled_II_1999_Spectral_Associates/page/n18&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Disk Basic&#xA;Unravelled II&lt;/em&gt;&lt;/a&gt; (p.17).&lt;/p&gt;&#xA;&lt;p&gt;The format itself is record-based, with two types of records,&#xA;distinguished by the first byte:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;00 l1 l0 a1 a0&lt;/code&gt;: A record with data of length &lt;em&gt;l1&lt;/em&gt; * 256 + &lt;em&gt;l0&lt;/em&gt;,&#xA;starting at address &lt;em&gt;a1&lt;/em&gt; * 256 + &lt;em&gt;a0&lt;/em&gt;. The data follow this header.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;FF 00 00 a1 a0&lt;/code&gt;: End record, with &lt;em&gt;a1&lt;/em&gt; * 256 + &lt;em&gt;a0&lt;/em&gt; giving the&#xA;entry point of the program.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For other binary formats, even simpler and more popular ones such as&#xA;the &amp;quot;two byte location header followed by data&amp;quot; used by Commodore,&#xA;others, or even just a raw binary dump, the developer seems expected&#xA;to provide a program to convert one of the three formats above. (One&#xA;such program for OS-9 is provided with ASxxxx; it reads the S-record&#xA;output format.)&lt;/p&gt;&#xA;&lt;p&gt;So my actual questions are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is this format really used only by to ASxxxx and CoCo Disk BASIC,&#xA;or is it actually a format that's been used elsewhere under&#xA;different names?&lt;/li&gt;&#xA;&lt;li&gt;What tools, outside of custom-written ones, are avilable for&#xA;manipulating this format and converting it to other formats used by&#xA;popular retrocomputing platforms?&lt;/li&gt;&#xA;&lt;li&gt;It seems unlikely that, of all the hundreds of platforms for which&#xA;this suite of assemblers could be used, a particular output format&#xA;for only one not-particularly-popular (relatively) computer would&#xA;be added. Are there non-platform-specific general technical reasons&#xA;why this output format would be chosen? What are similar&#xA;alternative formats that might have been considered, and how do&#xA;they compare?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="3290" LastEditDate="2020-08-16T12:43:21.017" LastActivityDate="2020-08-16T12:43:21.017" Title="What's up with the ASxxx and the &quot;CoCo Disk BASIC binary format&quot;?" Tags="&lt;file-format&gt;&lt;coco&gt;&lt;link-editor&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12426" PostTypeId="2" ParentId="12356" CreationDate="2019-09-26T14:06:40.650" Score="7" Body="&lt;p&gt;This is actually a comment, but images cannot be inserted in a comment, so I wrote an &quot;answer&quot;, just to point out that this kind of trace looking is already known in other computers, like the ZX Spectrum. AFAIK, this is due to the wave soldering process used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how it looks like on the solder side:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/MIQhL.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MIQhL.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2019-09-26T14:06:40.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12427" PostTypeId="1" CreationDate="2019-09-27T08:48:49.893" Score="12" ViewCount="2587" Body="&lt;p&gt;MS-DOS (at least 6.22) had optional features such as &lt;code&gt;DOSKEY&lt;/code&gt; to remember the command line history, which is now standard on modern command prompts. However, I'm not aware of an autocomplete feature, such as on modern systems by pressing &lt;kbd&gt;Tab&lt;/kbd&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there a Microsoft supplied or third party utility for autocomplete on MS-DOS?&lt;/p&gt;&#xA;" OwnerUserId="2067" LastEditorUserId="15334" LastEditDate="2020-12-17T18:30:12.147" LastActivityDate="2020-12-17T18:30:12.147" Title="Was there an autocomplete utility in MS-DOS?" Tags="&lt;ms-dos&gt;&lt;software-recommendation&gt;&lt;shell&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12428" PostTypeId="2" ParentId="12427" CreationDate="2019-09-27T08:55:09.740" Score="23" Body="&lt;p&gt;Microsoft didn’t provide anything like this for MS-DOS, but there are a number of third-party tools which can add auto-completion to the shell (along with other command-line editing features). A number of these are listed in &lt;a href=&quot;http://www.reimagery.com/fsfd/keyb.htm#cleditors&quot; rel=&quot;noreferrer&quot;&gt;the &lt;code&gt;DOSKEY&lt;/code&gt; replacement section&lt;/a&gt; of the Free Software for DOS catalog: Toddy, CmdEdit, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.4dos.info/&quot; rel=&quot;noreferrer&quot;&gt;4DOS&lt;/a&gt; and &lt;a href=&quot;http://wiki.freedos.org/wiki/index.php/FreeCOM&quot; rel=&quot;noreferrer&quot;&gt;FreeCOM&lt;/a&gt;, which are full shell replacements (the latter for FreeDOS, and somewhat anachronistic if you’re asking specifically about MS-DOS), have completion support built-in.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-09-27T17:23:21.217" LastActivityDate="2019-09-27T17:23:21.217" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12429" PostTypeId="2" ParentId="12427" CreationDate="2019-09-27T14:59:33.723" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/DR-DOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;DR-DOS&lt;/a&gt;, which was not MS-DOS but which was, by design, largely compatible at many levels, and was a contemporaneous single-user Intel CPU based system operating system, included command-line history and, IIRC, some search/autocomplete functionality. Unfortunately, I don't have any running systems to check the specifics now (well, for many years...). At least the basic command-line history was very nice - having just MS-DOS's one line (F3 - wow, just checked and that still works in the Windows 7 CMD) after learning to program on bigger systems was quite annoying.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2019-09-27T14:59:33.723" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12430" PostTypeId="2" ParentId="8975" CreationDate="2019-09-27T17:08:59.910" Score="1" Body="&lt;p&gt;Another precision test, previously mentioned in a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9372/modern-examples-of-creative-computing-ahl-benchmark-being-used#comment30158_9372&quot;&gt;comment&lt;/a&gt; by Tim Locke on this site, was published in &lt;a href=&quot;https://archive.org/stream/AnticVol5No8/Antic/Antic_Vol_1_No_4#page/n15/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Antic&lt;/a&gt; magazine Vol 1 No.4. It was submitted by one &amp;quot;R. Broucke&amp;quot; (the late &lt;a href=&quot;https://en.wikipedia.org/wiki/Roger_A._Broucke&quot; rel=&quot;nofollow noreferrer&quot;&gt;Roger A. Broucke&lt;/a&gt;, then at UT Austin):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 S=0&#xA;20 X=0&#xA;30 FOR N=1 TO 1000&#xA;40 S=S+X*X&#xA;50 X=X+0.00123&#xA;60 NEXT N&#xA;70 PRINT S,X&#xA;80 PRINT &amp;quot;CORRECT RESULT: 503.54380215, 1.23&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When run on a binary floating point interpreter (&lt;a href=&quot;https://github.com/mist64/cbmbasic&quot; rel=&quot;nofollow noreferrer&quot;&gt;cbmbasic&lt;/a&gt;) it produces:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; 503.543832            1.23000004&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;On a decimal floating point interpreter (&lt;a href=&quot;https://www.pagetable.com/?p=288&quot; rel=&quot;nofollow noreferrer&quot;&gt;tibasic&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; 503.5438022   1.23 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Typically (but not always) binary floating point interpreters add spurious digits after the &lt;code&gt;1.23&lt;/code&gt; result. Microsoft produced a few interpreters that used decimal floating point around 1983-4. These include BASIC for the Tandy 100 portable and MSX BASIC. Microsoft BASIC for Macintosh included two interpreters, one binary, one decimal.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2020-12-17T15:45:21.877" LastActivityDate="2020-12-17T15:45:21.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12431" PostTypeId="1" CreationDate="2019-09-27T18:22:38.383" Score="3" ViewCount="469" Body="&lt;p&gt;I figured out how to make square, triangle, and sawtooth waves in pygame. However, I have no clue what kinds of waves I need to make to produce a 'noise' sound effect like you see in older computer systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone reveal to me how that was accomplished? I don't even know what kind of wave pattern I need to make for such a sound effect.&lt;/p&gt;&#xA;" OwnerDisplayName="user15292" LastActivityDate="2019-09-29T09:32:11.787" Title="How did computers generate 'noise' sound files?" Tags="&lt;sound&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12432" PostTypeId="2" ParentId="12431" CreationDate="2019-09-27T19:43:44.640" Score="15" Body="&lt;p&gt;Random noise patterns were usually generated by one of two common methods back in the 80s when simple waveform generating sound chips were popular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One technique is the Linear Feedback Shift Register or LFSR. This is basically a shift register where some of the bits are fed from one part of the register to another using a simple logic function, typically XOR. The result is pseudo-random, it will eventually repeat but for audio that didn't really matter. LFSRs were fairly easy to build in to chips and didn't require too much silicon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another technique was to use two out of phase timers. The key is to have the timers be free running so that they don't synchronize. This technique can actually produce extremely good true random numbers with a bit of care. Sound had a clock of some sort already to regulate playback speed, actually only one additional clock was needed to create a &quot;good enough&quot; result, and the simplest option was to use a series of NOT gates strung together in a loop. The speed at which changes to each gate propagates to the next is essentially random and creates a free-running and unstable oscillator, which can can be sampled periodically to generate random bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally there is another technique that is a little less common due to being more complex to set up and, particularly in the 80s, requiring a high voltage to work. P-N junctions, when reverse biased with a high enough voltage (typically 20V or more) generate random noise. That noise can be used to generate a random waveform or bits.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-09-27T19:43:44.640" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12433" PostTypeId="2" ParentId="12431" CreationDate="2019-09-27T20:18:53.400" Score="6" Body="&lt;h3&gt;Preface:&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I figured out [...] in pygame.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Pygame is an actual modern, up to date environment and not anything on topic for RC.SE at all.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, I have no clue what kinds of waves I need to make to produce a 'noise' sound effect like you see in older computer systems. I don't even know what kind of wave pattern I need to make for such a sound effect&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There isn't a wave pattern at all, it's noise - the absence of a pattern. It's random frequencies in random mixture and random order.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Background&lt;/h2&gt;&#xA;&lt;h3&gt;Randomness&lt;/h3&gt;&#xA;&lt;p&gt;Perfect, so called &lt;a href=&quot;https://en.wikipedia.org/wiki/White_noise&quot; rel=&quot;nofollow noreferrer&quot;&gt;white noise&lt;/a&gt; (*1) is defined as a random signal with equal intensity at different frequencies. This resulting in a constant spectral density. Maybe you're old enough to remember a classic (pre digital) TV set turned to an unassigned channel? What's shown on the screen (and played on speakers) is white noise.&lt;/p&gt;&#xA;&lt;p&gt;And like with any randomness there are many way to generate this.&lt;/p&gt;&#xA;&lt;h3&gt;Random Sound&lt;/h3&gt;&#xA;&lt;p&gt;In case of sound for computers, it just means generating a new random value per sound clock and output it. Today one may fill up a sound buffer with consecutive random values. A few hundret bytes to a few KiB will do it, depending on the quality you want. Then just loop that sound to your sound output (DAC) (*2)&lt;/p&gt;&#xA;&lt;p&gt;Now, for early computers this isn't a great solution. In fact no data based solution would have been great, as it requires attention of the CPU and precious memory space as well. That's why they got sound generators. So the natural choice to add (white) noise was implementing a random number generator in hardware and send it's output to the DAC and amplifier chain (including optional filters). A simple way to do so is adding a &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear-feedback_shift_register&quot; rel=&quot;nofollow noreferrer&quot;&gt;Linear Feedback Shift Register&lt;/a&gt; with sufficient length to tap the desired data word &lt;em&gt;and&lt;/em&gt; enough 'filler' digits to provide the right feedback. For quality of randomness length and feedback are connected - more feedback means less length needed.&lt;/p&gt;&#xA;&lt;p&gt;As said, there are many other ways to generate randomness, the LFSR is just a common one, especially for early systems.&lt;/p&gt;&#xA;&lt;h3&gt;Example: The C64's SID&lt;/h3&gt;&#xA;&lt;p&gt;For example for Commodore's SID a 24 bit &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear-feedback_shift_register#Fibonacci_LFSRs&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fibonaci type LFSR&lt;/a&gt; was used (*3). More than enough for taping 8 output bits, but since they used only two feedback bits a shorter length would be way less desirable (*4).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Taping was done at bits 2, 4, 7, 11, 13, 16, 20, 22&#xA;Feedback was taken from bits 17 and 22, XORed together.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;A pseudo code to generate SID noise may look like this&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;byte GetNoiseByte()&#xA;{&#xA; static unsigned int LSFR : 24 =0x7FFFF8;&#xA; unsigned int NewBit;&#xA;&#xA; GetNoiseByte = LSFR[22]&amp;lt;&amp;lt;7&#xA;              + LSFR[20]&amp;lt;&amp;lt;6&#xA;              + LSFR[16]&amp;lt;&amp;lt;5&#xA;              + LSFR[13]&amp;lt;&amp;lt;4&#xA;              + LSFR[11]&amp;lt;&amp;lt;3&#xA;              + LSFR[ 7]&amp;lt;&amp;lt;2&#xA;              + LSFR[ 4]&amp;lt;&amp;lt;1&#xA;              + LSFR[ 2]&#xA;&#xA; NewBit       = LSFR[17] XOR LSFR[22];&#xA; &#xA; LSFR         = (LSFR &amp;lt;&amp;lt; 1) OR NewBit;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This code will produce exactly the same number random sequence as a SID does (*5).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Other &lt;a href=&quot;https://en.wikipedia.org/wiki/Colors_of_noise&quot; rel=&quot;nofollow noreferrer&quot;&gt;'colours' of noise&lt;/a&gt; are pink, brown or grey, depending on the signal intensity (loudness) across frequencies. Strictly classic sound generators are never true white noise, but good enough for game purpose.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Nice side effect, when using (simple) software random number generators, such a sequence may have frequency properties noticeable to listeners when looped.&lt;/p&gt;&#xA;&lt;p&gt;One way to keep that down will be to play a shifting window, that gets repositioned every repeat. Using prime numbers for buffer length, window and repositioning distance will reduce chances repetition a lot (and/or reduce needed buffer size).&lt;/p&gt;&#xA;&lt;p&gt;The effect is even more noticeable when producing stereo, having different content in both buffers won't help (And using the same buffer twice produces only mono). Again a shifting window does solve this. Best by using a different offset value for each so no stereo artefacts repeat (early on). In fact, by doing so, a single buffer for both channels will be preferable, as it guarantees that the spectrum for both sides will be exactly the same.&lt;/p&gt;&#xA;&lt;p&gt;A good combination of values may be&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Table Length: 1021 (biggest prime below 1024)&lt;/li&gt;&#xA;&lt;li&gt;Window Size: 1019 (next smaller prime)&lt;/li&gt;&#xA;&lt;li&gt;Offset First Chanel: 3&lt;/li&gt;&#xA;&lt;li&gt;Offset Second Channel: 5&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With these values the pattern repeats after more than a million uses. At CD rate (44 kHz) that'll be after more than 25 seconds - wayout side any harmonics. For all practical use 251, 241, 3, 5 in would do as well - keeping all values in 8 bit range - ofc, now even more in need of good randomness.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Well, 23 were used, the lowest bit was always 1 to simplify the structure.&lt;/p&gt;&#xA;&lt;p&gt;*4 - I guess there is more to it when going into all the math about, for real world estimations, remembering this simple relation will do it.&lt;/p&gt;&#xA;&lt;p&gt;*5 - I do not recommend to use it. Just go ahead and use whatever random number generator sour modern system offers - they are way better and incredible more weighted in their randomness.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-29T09:32:11.787" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12434" PostTypeId="2" ParentId="12420" CreationDate="2019-09-27T21:53:31.377" Score="2" Body="&lt;p&gt;To verify that the module has loaded, use &lt;code&gt;cat /proc/devices&lt;/code&gt; and verify that there is an entry for device 27.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once that has worked, use &lt;code&gt;sudo /dev/MAKEDEV qft&lt;/code&gt; to create the device special files if they are not present.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2019-09-27T21:53:31.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12435" PostTypeId="2" ParentId="12422" CreationDate="2019-09-28T00:08:51.243" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What was &lt;em&gt;special&lt;/em&gt; about these cartridges that they need a separate slot in the emulator?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The original hardware has one &lt;a href=&quot;https://www.c64-wiki.com/wiki/Expansion_Port&quot; rel=&quot;nofollow noreferrer&quot;&gt;expansion port&lt;/a&gt;. Some 3rd party manufacturers (such as Aprospand, &lt;a href=&quot;http://www.pcmuseum.ca/Brochures/AproSpand64.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;.PDF Manual&lt;/a&gt;) made &lt;em&gt;bus extenders&lt;/em&gt; that plugged into the port, allowing you to install multiple cartridges which could be used one at a time.&lt;/p&gt;&#xA;&lt;p&gt;The Vice Emulator uses software to recreate all the available hardware (that is supported) and since it's emulated in &lt;em&gt;&lt;strong&gt;some&lt;/strong&gt;&lt;/em&gt; cases you can use more than one cartridge at a time.&lt;/p&gt;&#xA;&lt;p&gt;What is &amp;quot;&lt;em&gt;special&lt;/em&gt;&amp;quot; is that you don't buy a cartridge or plug it in anywhere. You can run VICE on a Desktop PC or an Android phone (and other platforms). Just activate the feature and it works, assuming no bugs.&lt;/p&gt;&#xA;&lt;p&gt;If you want a particular cartridge game there are places to download it. If by chance it was a two player game that connected to a friend using a modem you could use a Desktop with a modem and play the game (faster than 2400 baud), and probably using Ethernet and Wi-Fi (you have the source code) on your phone.&lt;/p&gt;&#xA;&lt;p&gt;An old phone has a more powerful processor than the C64, so emulation isn't a problem (as long as you don't get too carried away with what you expect to emulate, emulating the audio hardware chips uses a lot of cycles).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://vice-emu.sourceforge.net/vice_7.html#SEC107&quot; rel=&quot;nofollow noreferrer&quot;&gt;Section 7&lt;/a&gt; of the manual explains:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;The cartridge system is organized in &amp;quot;Slots&amp;quot; to allow more than one cartridge connected at a time, like it can be done using an expansion port expander on a real C64 (see below).&lt;/p&gt;&#xA;&lt;p&gt;Generally a cartridge can be enabled by attaching its respective cartridge image, or using the respective menu option for cartridges that do not require an image.&lt;br /&gt;&#xA;...&lt;/p&gt;&#xA;&lt;p&gt;The &lt;em&gt;&lt;strong&gt;imaginary&lt;/strong&gt;&lt;/em&gt; &lt;strong&gt;expansion port expander&lt;/strong&gt; is organized in 4 slots, the cartridges are associated with them like this: ...&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sZF7r.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gV8BC.jpg&quot; alt=&quot;Aprospand Port Extender&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(Tap to enlarge)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;7.1.1.1 Slot 0&lt;/p&gt;&#xA;&lt;p&gt;All carts that have a passthrough connector go here. Once a &amp;quot;Slot 0&amp;quot; cartridge is enabled all further cartridges are connected to its respective passthrough port.&lt;/p&gt;&#xA;&lt;p&gt;Only &lt;strong&gt;one&lt;/strong&gt; cartridge &lt;strong&gt;of this type&lt;/strong&gt; can be active at a time.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Slot 0&amp;quot; carts have individual &amp;quot;enable&amp;quot; switches, enabling means enabling permanently. ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;7.1.1.2 Slot 1&lt;/p&gt;&#xA;&lt;p&gt;Mostly RAM based cartridges which for one reason or the other might make sense to be enabled together with one of the &amp;quot;Main Slot&amp;quot; cartridges go here.&lt;/p&gt;&#xA;&lt;p&gt;Only &lt;strong&gt;one&lt;/strong&gt; cartridge &lt;strong&gt;of this type&lt;/strong&gt; can be active at a time.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Slot 1&amp;quot; carts have individual &amp;quot;enable&amp;quot; switches, enabling means enabling permanently. ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;7.1.1.3 Main Slot&lt;/p&gt;&#xA;&lt;p&gt;All other cartridges which are not pure i/o extensions go here.&lt;/p&gt;&#xA;&lt;p&gt;Only &lt;strong&gt;one&lt;/strong&gt; cartridge &lt;strong&gt;of this type&lt;/strong&gt; can be active at a time.&lt;/p&gt;&#xA;&lt;p&gt;Cartridges in the &amp;quot;Main Slot&amp;quot; must be explicitly set as default to enable them permanently. ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;7.1.1.4 I/O Slot&lt;/p&gt;&#xA;&lt;p&gt;All carts that are pure I/O extensions go here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Any number&lt;/strong&gt; of &amp;quot;I/O Slot&amp;quot; Carts &lt;strong&gt;may be active at a time&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;I/O Slot&amp;quot; carts have individual &amp;quot;enable&amp;quot; switches, enabling means enabling permanently. ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That means that you can enable one &amp;quot;&lt;em&gt;cartridge&lt;/em&gt;&amp;quot; per &lt;em&gt;slot&lt;/em&gt; of each category.&lt;/p&gt;&#xA;&lt;p&gt;The original hardware, without modification, accepted one expansion at a time:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rIO1t.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rIO1t.jpg&quot; alt=&quot;C64 Expansion Port&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;PS: The &amp;quot;&lt;a href=&quot;https://www.worthpoint.com/worthopedia/commodore-64-128-quick-brown-box-1806282806&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quick Brown Box&lt;/a&gt;&amp;quot; is a memory expander. The were a few versions produced. The &amp;quot;&lt;em&gt;double&lt;/em&gt; Quick Brown Box&amp;quot; is the &lt;a href=&quot;https://cc65.github.io/mailarchive/2010-01/7794.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;name of the emulator's driver&lt;/a&gt; that (super) simulates the &amp;quot;Quick Brown Box&amp;quot; manufactured by the company &amp;quot;Brown Box Inc.&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="13513" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-28T00:24:07.067" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12436" PostTypeId="1" CreationDate="2019-09-28T08:40:53.397" Score="5" ViewCount="95" Body="&lt;p&gt;I'm searching for the electronics schematics for IBM terminals 3477 and 3486. I've already googled for it without success. I've to mend this hw and the power side seems ok but doesn't function, so I need electronics schematics to go on. Any advice ?&lt;/p&gt;&#xA;" OwnerUserId="15311" LastActivityDate="2019-09-28T08:40:53.397" Title="IBM terminal schematics" Tags="&lt;hardware&gt;&lt;ibm&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12437" PostTypeId="2" ParentId="12427" CreationDate="2019-09-28T10:55:38.387" Score="2" Body="&lt;p&gt;Norton Command for DOS had both a command line history and a feature to quickly paste filenames into the command line: Pressing &lt;kbd&gt;Alt&lt;/kbd&gt; and a letter would jump to the next file starting with that letter, more letters would refine the search prefix, or one could move to other files with the arrow keys. Pressing &lt;kbd&gt;Ctrl-Enter&lt;/kbd&gt; would then paste the highlighted file into the command line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this is not exactly tab-completion, in practice it was very very similar. So I guess that would count as a third-party utility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't uncommon to do all file system work completely in Norton Commander anyway (at least that's what I did).&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-09-28T10:55:38.387" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12438" PostTypeId="1" CreationDate="2019-09-28T12:43:32.100" Score="5" ViewCount="265" Body="&lt;p&gt;I am trying to identify / find an online copy of a multimedia technology demonstration video. Timeframe: late 1980s / early 90s? Source: IBM. Format: VHS.&lt;/p&gt;&#xA;&lt;p&gt;The content of this video was a computer program with a voice recording of either the original Greek &lt;a href=&quot;https://en.wikipedia.org/wiki/Odyssey&quot; rel=&quot;nofollow noreferrer&quot;&gt;epic of Ulysses&lt;/a&gt; or maybe James Joyce's &lt;a href=&quot;https://en.wikipedia.org/wiki/Ulysses_(novel)&quot; rel=&quot;nofollow noreferrer&quot;&gt;book of the same title&lt;/a&gt;. The video showed details of how the program would display the text simultaneously with the reading, and had some annotations and other features.&lt;/p&gt;&#xA;&lt;p&gt;I think the point of it was to show off the multimedia capabilities they had developed by using a real application of the book I mentioned; it may have been touting it for educational purposes.  Today this kind of technology it obviously taken for granted but at the time it was innovative and impressive!&lt;/p&gt;&#xA;&lt;p&gt;All these recollections are probably subject to error but that's what I remember...&lt;/p&gt;&#xA;&lt;p&gt;I've done some searching but can't find any reference to it - but I bet its out there somewhere.&lt;/p&gt;&#xA;" OwnerUserId="11795" LastEditorUserId="11795" LastEditDate="2021-05-21T11:28:46.523" LastActivityDate="2021-05-21T11:28:46.523" Title="Looking for an IBM multimedia demo from the 80s/90s about &quot;Ulysses&quot;" Tags="&lt;ibm&gt;&lt;text&gt;&lt;identify-this-software&gt;&lt;multimedia&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12439" PostTypeId="1" AcceptedAnswerId="12443" CreationDate="2019-09-28T21:45:14.940" Score="3" ViewCount="608" Body="&lt;p&gt;I am fairly sure that this clicking wasn't just because my computer had issues, although that would be interesting to find out.  I distinctly remember that the first computers I owned would make a rapid clicking noise on powerup.  These were always desktops (I didn't own a laptop until about 2004, and it did not click on powerup).  My current desktops haven't made that sound for more than a decade, so I presume that things progressed.  Still...what was clicking?&lt;/p&gt;&#xA;" OwnerUserId="4407" LastEditorUserId="15334" LastEditDate="2021-02-28T19:05:37.693" LastActivityDate="2021-02-28T19:05:37.693" Title="What was the distinctive rapid clicking sound in late 1990s desktops?" Tags="&lt;boot&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12440" PostTypeId="2" ParentId="12438" CreationDate="2019-09-28T21:57:18.813" Score="6" Body="&lt;p&gt;Was it &lt;a href=&quot;https://www.youtube.com/watch?v=mJGhxVOR4gA&quot; rel=&quot;noreferrer&quot;&gt;Ulysses&lt;/a&gt;, Tennyson's poem from &lt;em&gt;&lt;a href=&quot;https://www.worldcat.org/title/illuminated-books-and-manuscripts/oclc/32056663&quot; rel=&quot;noreferrer&quot;&gt;Illuminated books and manuscripts&lt;/a&gt;&lt;/em&gt; (pub. IBM Educational Systems, 1992)?&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-09-28T21:57:18.813" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12441" PostTypeId="2" ParentId="12439" CreationDate="2019-09-28T22:03:37.080" Score="8" Body="&lt;p&gt;Most likely the floppy drive and/or initializing on power up. The drives had to seek a few times to ascertain what track they were on or if there was a disk present. Most machines don't have floppies or indeed any spinning media, so this motor sound is absent from many new computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None quite as loud as the Apple II “&lt;a href=&quot;https://www.youtube.com/watch?v=Dub4nraPLlQ&quot; rel=&quot;noreferrer&quot;&gt;machine gun&lt;/a&gt;”, though. &lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-09-28T22:03:37.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12442" PostTypeId="1" CreationDate="2019-09-28T22:23:37.840" Score="20" ViewCount="2397" Body="&lt;p&gt;I am trying to figure out what type of machines could be used to reconstruct these chips nowadays. It doesn't need to use exactly the same machines used to build them, it's just that the product should be very close. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot find much about the original chips though. The 6502 has plenty of documentation, but I cannot find much about the original manufacturing machines used to manufacture it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 68000 is harder find, as it was manufactured by many different companies, so, not even I can find what was the original node. Wikipedia says the original was done  in 3.5 um and Hitachi later shrank for a 2.7 um node.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It used HMOS, licensed from Intel: &lt;a href=&quot;https://en.wikipedia.org/wiki/Depletion-load_NMOS_logic#The_HMOS_processes&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Depletion-load_NMOS_logic#The_HMOS_processes&lt;/a&gt; But, there was several versions of this process, so, I am not sure if there was any improvement to the node. (I would like to also reproduce those used in arcade machines and videogames, which used 7.5MHz, 10MHz an and 12MHz vesions).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For these nodes, it seems the g-line of lamp mercury was used(436nm). But some steppers are compatible with the h-line 404.7nm, which seems to be close to violet laser pointers (405nm), which are diode based. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that these thick nodes could use contact steppers, but there is not much information about them. Perhaps their used ceased due to low yields? (that's all I could find).&lt;/p&gt;&#xA;" OwnerUserId="15315" LastEditorUserId="3683" LastEditDate="2019-09-29T14:38:54.250" LastActivityDate="2019-09-30T19:23:22.917" Title="What does it take to recreate microchips like 68000 and 6502 in their original process nodes nowadays?" Tags="&lt;hardware&gt;&lt;old-hardware-adaptation&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12443" PostTypeId="2" ParentId="12439" CreationDate="2019-09-28T22:23:39.707" Score="17" Body="&lt;p&gt;Its hard to tell exactly from just that brief description, but I think you're probably referring to the sound of the hard drive head seek (repositioning to different areas of the disk) as data is read from the drive.  That's the repetitive ticking you can hear in this &lt;a href=&quot;https://youtu.be/JpSfgusep7s?t=30&quot; rel=&quot;noreferrer&quot;&gt;video&lt;/a&gt; when the Windows 95 splash screen is showing and the OS is being loaded from the hard drive (starting at 30 seconds into the video).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern spinning hard drives drives still make clicking noises on seek, just at a much lower sound level.  Generally you can only hear it if you put your ear close to the drive and the sound is different because seeks occur much faster so the distinct clicks tend to blend into a single buzzing or humming sound.&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2019-09-28T22:23:39.707" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12444" PostTypeId="2" ParentId="12439" CreationDate="2019-09-28T22:29:20.957" Score="5" Body="&lt;p&gt;On powerup, a memory test happens. During that test, for each of the tested memory blocks, a click is emitted from the speaker. If a key was pressed to skip the test, or the test was disabled in the settings, then it would sound all the clicks in a burst and continue the boot process.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-09-28T22:29:20.957" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12445" PostTypeId="1" AcceptedAnswerId="12448" CreationDate="2019-09-28T22:46:58.947" Score="17" ViewCount="5831" Body="&lt;p&gt;Imagine a modern computer, where let's say Python is a high level programming language and needs to be interpreted in order to execute a piece of code. You could write some code in C, compile it, which will be much closer to the actual hardware and therefore runs faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if we take a C64, if I write a piece of code in BASIC, would it be much slower than Assembly? If so, is there any comparison I could make? Is it even possible to quantify it this way?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="6794" LastEditDate="2019-09-30T07:04:01.640" LastActivityDate="2019-10-02T05:47:53.630" Title="How slow was the 6502 BASIC compared to Assembly" Tags="&lt;assembly&gt;&lt;basic&gt;&lt;6502&gt;&lt;performance&gt;" AnswerCount="6" CommentCount="15" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12446" PostTypeId="2" ParentId="12445" CreationDate="2019-09-29T00:36:37.537" Score="16" Body="&lt;p&gt;Most implementations of BASIC for 8-bit home computers were interpreters, and in that sense they're similar to the standard versions of Python.  You could typically expect simple programs to run 100 times slower in BASIC than in assembly of ordinary quality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it would normally take much less time to write that program in BASIC than in assembly.  For that reason, some commercial games were still written in BASIC, if the full performance of the machine wasn't needed and thus the cost of production mattered more.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-09-29T00:36:37.537" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12447" PostTypeId="2" ParentId="12442" CreationDate="2019-09-29T00:55:54.297" Score="16" Body="&lt;p&gt;It should be feasible to manufacture NMOS-process parts using 0.6µm equipment that is still in current use.  WDC's W65C02S, as well as their other current products, are made at TSMC on 0.6µm, though they are CMOS chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would need to obtain examples of the original masks, have them converted to a format usable by the newer equipment (probably whole-wafer masks with the &quot;stepping&quot; procedure already baked in), and discuss with silicon-process experts how to map the steps of an NMOS process onto those available in a CMOS plant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, if what you actually want is a 65C02, then just buy a new one direct from one of WDC's distributors.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-09-29T00:55:54.297" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12448" PostTypeId="2" ParentId="12445" CreationDate="2019-09-29T03:25:31.127" Score="45" Body="&lt;p&gt;Yes, BASIC is &lt;em&gt;much&lt;/em&gt; slower than assembly for many operations. For an&#xA;easy example, try out this program on a Commodore 64 or emulator:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for i = 1024 to 1984 : poke i,peek(i) or 128 : next&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You will see each character on the screen reverse, row by row, over&#xA;the course of ten seconds. By contrast, the exact same routine in&#xA;machine language inverts the entire screen in a fraction of a second;&#xA;there's almost no perceptable gap between the first character and last&#xA;character being inverted. (The source and a BASIC loader for it are&#xA;appended below, if you want to see how it works or run it yourself.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two main issues that make it much slower are that each line of&#xA;BASIC is read and interpreted before it's executed, and the data&#xA;formats used by BASIC often have much higher overhead than the wider&#xA;variety of formats one can use in machine language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some cases the latter is due to BASIC not using the most efficient&#xA;formats it has available. For example, BASIC always uses floating&#xA;point for the index of a &lt;code&gt;for&lt;/code&gt; loop rather than having extra code to&#xA;determine whether it could use integer variables instead. Thus, adding&#xA;one to &lt;code&gt;i&lt;/code&gt; in the code above ends up executing machine-language&#xA;procedures to copy several bytes of data to the FAC (floating point&#xA;accumator), do the floating point addition, and copy it back out. This&#xA;is many dozens of instructions, whereas a loop that meets the&#xA;restrictions that allow integers to be used (as in the&#xA;machine-language routine below) can do its math in a small handful of&#xA;instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other cases, BASIC just doesn't support at all the kind of&#xA;techniques and formats you can use in assembler. As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12445/how-slow-was-the-6502-basic-compared-to-assembly?answertab=votes#comment39042_12448&quot;&gt;Harper points out&#xA;in a comment below&lt;/a&gt;, unrolling the loop in the following&#xA;assembly routine would save some arithmetic and several memory&#xA;lookups, probably doubling the speed of the routine. That kind of&#xA;optimization is something that assembler programmers can do in the&#xA;right circumstances, and you can't really work at the level at all in&#xA;BASIC.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Appendix&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following is a machine language routine to invert the screen on a&#xA;Commodore 64 in a way similar to how it was done in BASIC above. Note&#xA;that this is deliberately not optimized; it's written instead with an&#xA;eye towards clarity and generality. (For example, a simple change&#xA;could make this update 32 KB, rather than just 1 KB.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All numbers in the listing are in hexadecimal (base 16). The &lt;code&gt;#&lt;/code&gt; in&#xA;front of some of them means to load that actual number itself into the&#xA;A or Y register; otherwise it's loading data from the address in&#xA;memory specified by that number. In the case of the &lt;code&gt;[addr],Y&lt;/code&gt;&#xA;references, it's loading a 16-bit address from &lt;code&gt;addr&lt;/code&gt;, adding the Y&#xA;register to that value, and that determines the memory location of the&#xA;load or store. We need to do this because the Y register is only 8&#xA;bits, holding values up to only FF (256 decimal), so we need to count&#xA;through 256 four times to to read and write all 1024 screen addresses.&#xA;(Actually, there are only 960 displayed on the screen, but we do 4×256&#xA;to keep the code simple.)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00FC        addr      .equ 00fc     ; unused zero-page location&#xA;&#xA;C000 A9 00  invscr:   lda  #00      ; screen RAM start low byte&#xA;C002 85 FC            sta  addr     ; unused zero-page location&#xA;C004 A9 04            lda  #04      ; screen RAM start high byte&#xA;C006 85 FD            sta  addr+1   ; unused zero-page location&#xA;C008 A0 00  nextpage: ldy  #00      ; set 8-bit register Y to 0&#xA;C00A B1 FC  nextchar: lda  [addr],Y ; load character from addr + Y&#xA;C00C 09 80            ora  #80      ; set bit 7 to make it inverse&#xA;C00E 91 FC            sta  [addr],y ; store modified character&#xA;C010 C8               iny           ; increment Y&#xA;C011 D0 F7            bne  nextchar ; branch back if y != 0&#xA;C013 E6 FD            inc  addr+1   ; increment 16-bit screen address by 256&#xA;C015 A5 FD            lda  addr+1&#xA;C017 C9 08            cmp  #08      ; reached end of screen?&#xA;C019 D0 ED            bne  nextpage&#xA;C01B 60               rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And here's a BASIC program that will load the routine; you can run it&#xA;after that with &lt;code&gt;sys 49152&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 loc=49152 : rem store the routine at $c000&#xA;20 read v: if v = -1 then end&#xA;30 poke loc,v : loc = loc + 1 : goto 20&#xA;50 data 169,0,133,252,169,4,133,253&#xA;60 data 160,0,177,252,9,128,145,252,200,208,247&#xA;70 data 230,253,165,253,201,8,208,237,96&#xA;90 data -1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-09-30T08:18:39.967" LastActivityDate="2019-09-30T08:18:39.967" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="12449" PostTypeId="2" ParentId="12445" CreationDate="2019-09-29T10:07:51.663" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;if I write a piece of code in Basic, would it be much slower than Assembly?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, it's interpreted. So even though it's a simple language, it'll never reach native speed - not even coming close.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If so, is there any comparison I could make?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For most parts like with Python vs. Assembler on a PC (*1). Except of course, BASIC is a way less comfortable language than Python, with way less build in functionality, so it usually ends up with more source code to interpret to do the same job. And it's the interpreted part making it slow (*2).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it even possible to quantify it this way?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Simply no.&lt;/strong&gt; Any quantification can only be done in relation to a concrete task to be done, as it relates much to&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Interpreter used&lt;/li&gt;&#xA;&lt;li&gt;Algorithms used&lt;/li&gt;&#xA;&lt;li&gt;Functions used&lt;/li&gt;&#xA;&lt;li&gt;Task selected&lt;/li&gt;&#xA;&lt;li&gt;Implementation tehreof.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Real world examples will range between BASIC being 100 times slower (e.g. when doing bit level graphics) to almost as fast as Assembly (Like with only FP-Math). Trying to tie it to single constructions (and examples) in either language will be like judging a natural language by a single word - useless for a generalized observation. Not to mention 'good' BASIC coding vs. 'bad' Assembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just picking a CPU or its assembler won't give any relation - except that BASIC will never be faster.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Assembler should be at least as fast as a C binary for the same problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Ofc, assumed the used functions/libraries are sufficient well implemented.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-09-29T11:20:51.520" LastActivityDate="2019-09-29T11:20:51.520" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12450" PostTypeId="1" CreationDate="2019-09-29T13:26:04.323" Score="9" ViewCount="909" Body="&lt;p&gt;It's possible to extend the Commodore 64 expansion port bus with&#xA;boards like the [Aprospand-64]:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ar.c64.org/rrwiki/index.php?title=File:AproSpand_Advert_Run_Issue_31_1986_Jul.jpg&amp;amp;limit=50&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zKqvj.png&quot; alt=&quot;Aprospand-64&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This example dates from 1986, but there appear to have been &lt;a href=&quot;https://ar.c64.org/wiki/Category:Port_Expanders&quot; rel=&quot;noreferrer&quot;&gt;a number&#xA;of contemporary expanders&lt;/a&gt;, and the idea predates the&#xA;Commodore 64 itself. (I don't have a date for the &lt;a href=&quot;https://sleepingelephant.com/denial/wiki/index.php?title=VIC-1010_Slot_Expander&quot; rel=&quot;noreferrer&quot;&gt;VIC-1010 slot&#xA;expander&lt;/a&gt;, but a schematic for the &lt;a href=&quot;https://sleepingelephant.com/denial/wiki/index.php?title=VIC-1020_expansion_chassis&quot; rel=&quot;noreferrer&quot;&gt;VIC-1020 expansion&#xA;chassis&lt;/a&gt; is dated 1982-04-20, half a year before the release of&#xA;the C64.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus it was physically possible to have more than one cartridge&#xA;connected at once, though whether these would actually operate&#xA;together rather than getting into a &quot;bus fight&quot; depended on the&#xA;particular cartridges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What cartridges, if any, were typically used together at the same time&#xA;by regular &quot;end users&quot; (as opposed to people with a good understanding&#xA;of electronics who could make modifications to the cartridges and/or&#xA;bus extenders)?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-10-29T03:09:35.033" LastActivityDate="2019-10-29T16:04:49.483" Title="Which cartridges were typically used together on Commodore 64 systems?" Tags="&lt;commodore-64&gt;&lt;game-cartridge&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12451" PostTypeId="2" ParentId="12450" CreationDate="2019-09-29T14:00:54.397" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;extend [...] with boards like this one&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It might be notable, that the mentioned X-pander-3 is a rather new and comfortable solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many extenders, as they were called back then, were much less capable, often barely a switch to enable power to either cartridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typical examples are&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Apotek's &lt;a href=&quot;https://pcmuseum.ca/details.asp?id=41542&amp;amp;type=Peripheral&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aprospand-64&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Cardcos &lt;a href=&quot;https://www.lyonlabs.org/commodore/hardware/index.html#cb5&quot; rel=&quot;nofollow noreferrer&quot;&gt;CARDBOARD/5&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Various Extenders from &lt;a href=&quot;https://retroport.de/rex-datentechnik-1/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rex Datentechnik GmbH&lt;/a&gt; (also known as DELA Elektronik) (*1)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;all the way down to straight plug multipliers with no switching functionality at all, like their&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(DELA's) &lt;a href=&quot;https://www.commodore-info.com/cartridge/item/dela_userportexpander/en&quot; rel=&quot;nofollow noreferrer&quot;&gt;User Port Extender&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What cartridges were typically used together on Commodore 64 systems?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Typically: None. The C64 expansion port was only designed with a single module in mind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The default purpose is to no have to plug them all the time when switching between cartridges, but just press a button (or two). This is a principle shared by many cartridge switchers - all the way back to the VCS)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Thus it was physically possible to have more than one cartridge connected at once,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Usually not. Most expanders offer a way to enable only one of them. Some could be configured to have more than one attached at the same time, but uses are rather rare, as the expansion bus only provides a limited set of non managed resource identifiers and requirement signaling. Namely &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IO1 (page $DE)&lt;/li&gt;&#xA;&lt;li&gt;IO2 (page $DF)&lt;/li&gt;&#xA;&lt;li&gt;ROML ($8000..$9FFF)&lt;/li&gt;&#xA;&lt;li&gt;ROMH ($A000..$BFFF)&lt;/li&gt;&#xA;&lt;li&gt;EXROM&lt;/li&gt;&#xA;&lt;li&gt;GAME&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(*2)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;though whether these would actually operate together rather than getting into a &quot;bus fight&quot; depended on the particular cartridges.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Usually all expected to be sole 'owners' of the bus. Thus not being able to cooperate at all. Exemptions are combinations of pure interfaces (using IO*) and a single ROM cartridge.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What cartridges, if any, were typically used together at the same time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If at all, only interfaces using (only) one of the IO* selects - and only if being configurable to either/or an expansion interface allowing configuration, like the mentioned X-pander-3. In addition a ROM cartridge can be used. Then again, such interfaces, more often than not, also contained already ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A different situation might have been with the comparably small user base of DIY hackers, building their own interfaces. But their creations were anything but a standard to be asked for (Note *1 as well).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.c64-wiki.de/wiki/Magic_Voice&quot; rel=&quot;nofollow noreferrer&quot;&gt;Magic Voice&lt;/a&gt;&lt;/strong&gt; has been &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12457/6659&quot;&gt;mentioned by bodgit&lt;/a&gt;. Unlike as it may seam at first sight, the Magic Voice isn't a (one slot) extender offering to have (an) additional cartridge, but a combination of speech hardware with its own ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ROM can be disabled, allowing access to a ROM from a plugged cartridge. To do so all management signals (see above) are routed thru the controlling gate array and/or the 6525 TPI. The hardware is (unchangeable) tied to IO2 (See the &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/cartridges/c64/magic-voice/schematic.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;reworked schematics&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When booting up the C64 detects EXROM pulled and hands control to the ROM. After that the Magic Voice ROM installs its routines in RAM (below BASIC and KERNAL ROM as well as at $C000) and disables its own ROM. Next a check for a ROM cartridge plugged in its slot is performed (reading EXROM/GAME via the TPI). If not, it hooks BASIC and continues in KERNAL (skipping its vector initialization), ending up in regular BASIC startup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a (game) cartridge is detected, it gets mapped in according to its GAME/EXROM (and optional CBM80 signature) setting and started. If the cartridge is voice enabled, it will check $C000 for a signature and use the loaded software as provided. If not, it'll just use the C64 as is - rendering the preloaded speech software random data :) (*3)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: Stand alone it's speech cartridge with BASIC extension, with a speech enabled cartridges it's an expansion hardware (*4). In neither mode it's an extender.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Rex Datentechnik GmbH modules are an interesting exception to all of this, as that company not only offered the usual extender types, but mainly a huge palette of modules. Many of them for data acquisition and alike. Most of them configurable to coexist with others of the series on a single bus. So by buying only of their series many different boards could be used at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The mentioned X-pander 3 is a great example of a good solution, short of using active components, as it allows to switch all of these plus power. Though, adding two LED to show the state of GAME and EXROM (for the selected one) would be nice as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Thus using Magic Voice with a non enabled cartridge always adds a (rather short) start delay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - One may think of it as of some &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Super_NES_enhancement_chips&quot; rel=&quot;nofollow noreferrer&quot;&gt;SNES enhancement chips&lt;/a&gt;. Except here the user buys it separate, lowering the cost for follow up game cartridges while at the same time earning additional money.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-04T22:08:39.543" LastActivityDate="2019-10-04T22:08:39.543" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12453" PostTypeId="2" ParentId="12442" CreationDate="2019-09-29T19:04:16.030" Score="1" Body="&lt;p&gt;Similar processes/equipment will likely still exist for SSI and especially analog ICs - you could not shrink either of these indefinitely without messing with their robustness/current handling capacity, and analog parts would suffer terrible noise, precision, and drift issues in addition....&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2019-09-29T19:04:16.030" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12454" PostTypeId="2" ParentId="12445" CreationDate="2019-09-30T00:18:53.400" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;[Modern Python compared to C; C64 BASIC compared to assembly.]&lt;/p&gt;&#xA;&lt;p&gt;is there any comparison I could make? Is it even possible to quantify it this way?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, you have the right idea.  That is exactly the comparison you can make.&lt;/p&gt;&#xA;&lt;p&gt;BASIC was easier to write (don't underestimate the value of that), but &amp;quot;slower&amp;quot; to &amp;quot;dreadfully slower&amp;quot;, depending on what you were doing.&lt;/p&gt;&#xA;&lt;h2&gt;Speed: BASIC vs assembler&lt;/h2&gt;&#xA;&lt;p&gt;Obviously, everything is worlds slower.  Especially operations the CPU just can't do, like divide or compute a cosine.  But there are more gotchas.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the unpredictability of the duration of certain operations. For instance sin(x) was very quick if x=90, otherwise not.&lt;/li&gt;&#xA;&lt;li&gt;the dreaded &amp;quot;Garbage collection&amp;quot;, where the system runs out of clear memory space to allocate for variable-length records like strings, and &amp;quot;defrags&amp;quot; RAM by repacking all existing strings to the bottom of free RAM. I have seen garbage collections take 3 seconds.  That's an eternity in game time.&lt;/li&gt;&#xA;&lt;li&gt;Even with tokenization (go Woz!), the language isn't very compact.  That mattered on ROM cartridges, where space was money.&lt;/li&gt;&#xA;&lt;li&gt;Outside of Apple Integer Basic, BASICs had bugs. And a future revision of the system could add bugs. Assembler had precious few and they were well-known.&lt;/li&gt;&#xA;&lt;li&gt;If the CPU had to do extremely timing-sensitive tasks, like soft-listen to serial ports, modulate the cassette deck, make sound without a sound chip, or especially beam-riding for sprite manipulation such as in games, it was impossible in BASIC and you had to go assembler. Even the entry/exit from assembler to BASIC was too time-consuming to use in action games, unless you did it once per field.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Our Speed metaphor: modern vs RC&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Because they have loads of RAM and code space, code optimization is much, much better today.  They're still never as fast as C, but they do much better than you'd expect. &lt;em&gt;While you could always count on BASIC to always be balefully slower than assembly&lt;/em&gt;. Advantage: modern.&lt;/li&gt;&#xA;&lt;li&gt;modern processors include complex math.  This means that all the gory complexities of, say, a double-wide floating point divide are both done by hardware at the same speed, whether we're calling from Python or C.  Older processors did complex math in software, &lt;em&gt;which was a heck of a motivation for assembler programs to bypass the need for complex math&lt;/em&gt;. In BASIC you would ask for a cosine and wait, wait, wait... In assembler you wouldn't even try cosine, you'd just find a way to make a lookup table work.   Advantage: RC.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;As for quantifying, that is a wet noodle.&lt;/h2&gt;&#xA;&lt;p&gt;A safe bet is it will be 10-100 times slower. It's very difficult to quantify more precisely, unless you have a lot of experience timing both sides' operations.&lt;/p&gt;&#xA;&lt;p&gt;And in the pro world, that's exactly what we did.  We put a quickie version up in BASIC and assembler, wrapped iteration code around it, and got out the stopwatch.  When we were serious, we also timed how long the iteration code &lt;em&gt;itself&lt;/em&gt; took with no payload.&lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-09-30T00:18:53.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12455" PostTypeId="2" ParentId="12445" CreationDate="2019-09-30T03:24:54.147" Score="1" Body="&lt;p&gt;I've had experience with the TRS-80, and there were three programs I wanted to do that I simply could not get good performance in BASIC.  All three programs were dealing with the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first program was to fill the screen with a single arbitrary character (if you used space, it's the same as clear screen, else I could fill it with whatever character I wanted).  The naïve way is is to just make a for loop for all 1024 characters and print them.  This actually took around 6-8 seconds to fill the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A faster way is possibly to generate a fairly long string and print them in quick succession.  I think this still would take 2 seconds to fill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was not acceptable, so I decided to program them in assembly/machine code.  The resultant code I recall poking into a string variable (very common at the time to prevent memory clashes as there is no mmu) and the screen filled so fast that I could not time it.  From memory I did do some repeated filling and timed those, and recall them to be around 1/20 of a second or faster to fill the display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next problem I wanted to do was fill the screen with RANDOM characters.  This took almost a minute to fill the display, if I remember correctly and the string optimization doesn't help.  However I did cheat in machine code and used the refresh counter as the RNG which may not be as &quot;random&quot; as the PRNG, but the machine code was fast enough to make my screen look like snow when called in quick succession, probably also around 1/20 of a second to fill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The third problem is that despite the poor graphics of the TRS-80 with its 6-block, I wanted to save/restore &quot;bitmap&quot; graphics.  If I recall correctly, the BASIC program that peek/poked into video memory and wrote/read from disk took upwards 5 minutes to save 1KB of memory handled byte at a time.  OS calls were &lt;em&gt;expensive&lt;/em&gt; on the TRS-80 I suppose.  I did not try string optimization at the time to save on OS calls, but did write the code in assembly... which took about 5-10 seconds to complete.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today, these pieces of code sequences are kind of childish and &quot;simplistic&quot;.  Code sequences to hash a key to access a piece of dynamic data in memory would take eons to code in assembly not to mention how error prone it was (I've crashed my TRS-80 many times getting the machine code right.)  Most of the time coding in assembly simply would not give you the time to market, and sometimes won't even give you performance - keep in mind a well coded interpreted language program with the proper support libraries that well implements the functions you need will give you fairly good performance with no risk of buffer overflows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the function library bonus didn't exist as much then as it does today.  BASIC pretty much maps one to one and you don't gain much speed improvement calling its functions - though one can say that if you had a program that had to continually run floating point transcendental functions (sin, cos, x^y, etc.) you may not see as much of a difference between assembly and BASIC as computing floating point natural logarithms in assembly is not much faster than calling ln() in BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now today imagine if BASIC also had matrix multiplies, hash tables functionality, etc. as functions then - Now you can see the performance gap decrease between BASIC and assembly as more compute time is spent in the complex functions instead of parsing code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this issue still applies today when writing python, perl, java.  If you want performance, no excuse not to use the dedicated functions else you'll be back to BASIC speed problems just like if you were to write x^y with a for loop instead of just using the builtin.&lt;/p&gt;&#xA;" OwnerUserId="15322" LastActivityDate="2019-09-30T03:24:54.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12456" PostTypeId="2" ParentId="9771" CreationDate="2019-09-30T09:48:09.070" Score="3" Body="&lt;p&gt;It's possible to try both CTSS and ITS yourself.  Both operating systems run on emulators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for differences, Tom Knight, one of the ITS creators, wrote:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I would actually say that the main influence of CTSS on ITS was a demonstration of just what it was that we didn't want to do.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;See more here: &lt;a href=&quot;https://github.com/PDP-10/its/issues/1588&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/PDP-10/its/issues/1588&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2019-09-30T09:48:09.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12457" PostTypeId="2" ParentId="12450" CreationDate="2019-09-30T10:42:22.737" Score="7" Body="&lt;p&gt;Although not an extender in the true sense as it only had one cartridge port, the &lt;a href=&quot;https://www.floodgap.com/retrobits/ckb/secret/operiph.html&quot; rel=&quot;noreferrer&quot;&gt;Magic Voice expansion&lt;/a&gt; allowed game cartridges plugged into it to take advantage of its abilities to provide speech in games. This ended up only being used by the Wizard of Wor and Gorf titles. However, it is technically two cartridges working simultaneously that an &quot;end user&quot; might have used back in the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Lz0HU.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Lz0HU.jpg&quot; alt=&quot;Magic Voice&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All other uses I've seen are using cartridges that have only come into existence in recent years such as combining one of the various NIC cartridge implementations with the Ultimate II/II+ emulated-1541-in-a-cartridge.&lt;/p&gt;&#xA;" OwnerUserId="7506" LastEditorUserId="7506" LastEditDate="2019-09-30T11:37:37.777" LastActivityDate="2019-09-30T11:37:37.777" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12458" PostTypeId="1" AcceptedAnswerId="12459" CreationDate="2019-09-30T12:10:36.613" Score="28" ViewCount="10946" Body="&lt;p&gt;Back in the early 90's I remember downloading a graphics demo called, I think, &quot;Unreal&quot;. This was on DOS on a standard PC and probably downloaded from a BBS.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Identifying information:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It ran for several minutes at least and contained multiple segments of animations &amp;amp; music / sound effects. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some segments were somewhat screen-saver like, others had more the appearance of a video game. But it was not interactive. Combinations of 2D and 3D rendering effects, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At one point in the demo it showed the text &quot;apparently this can be done&quot;, presumably referring to a particular effect. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;From that text and other clues I got the impression this was some kind of portfolio of work on the part of the programmers who put it together. Maybe intended for a conference, convention, or competition. Seems like the work was pushing the limits of what was possible with A/V effects given the hardware of the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Periodically since then I've searched around for another copy of this, but no luck. Maybe the term &quot;unreal&quot; is too vague. Finding a video recording would definitely be fine, I wouldn't necessarily expect it to even run on a modern PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note -- I think there is a video game called &quot;Unreal&quot; which AFAIK is unrelated to the software I have in mind.&lt;/p&gt;&#xA;" OwnerUserId="11795" LastActivityDate="2019-09-30T20:30:55.133" Title="Looking for PC graphics demo software from the early 90s called &quot;Unreal&quot;" Tags="&lt;ms-dos&gt;&lt;graphics&gt;&lt;ibm-pc&gt;&lt;identify-this-software&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12459" PostTypeId="2" ParentId="12458" CreationDate="2019-09-30T12:21:15.113" Score="46" Body="&lt;p&gt;&lt;a href=&quot;http://www.pouet.net/prod.php?which=1274&quot; rel=&quot;noreferrer&quot;&gt;Unreal Megademo&lt;/a&gt;, Future Crew, 1992 possibly? Certainly has all the elements you mention.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2019-09-30T12:21:15.113" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12460" PostTypeId="1" AcceptedAnswerId="12490" CreationDate="2019-09-30T17:17:16.780" Score="1" ViewCount="223" Body="&lt;p&gt;I'm looking over examples of FOCAL code, and I see that group numbers in the examples start with a 0 if need be. That is, it's 01.10, not 1.10. Was a leading zero optional?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-10-03T02:21:05.900" Title="Was 1.10 a valid line number in FOCAL?" Tags="&lt;pdp-8&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12461" PostTypeId="2" ParentId="12460" CreationDate="2019-09-30T17:30:03.140" Score="2" Body="&lt;p&gt;I used FOCAL briefly back in about 1970, and I don't remember anything about leading zeros at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.bitsavers.org/www.computer.museum.uq.edu.au/pdf/DEC-08-AJAB-D%20PDP-8-I%20FOCAL%20Programming%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;programming manual&lt;/a&gt; doesn't mention them in section 2.9 where it introduces line numbers, but they do appear in the program listings later on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose they might have made the listing look neater, since the valid line numbers were 1.01 through 15.99 (excluding 1.00, 2.00, … 15.00).&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2019-09-30T17:35:34.817" LastActivityDate="2019-09-30T17:35:34.817" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12462" PostTypeId="2" ParentId="12442" CreationDate="2019-09-30T19:23:22.917" Score="1" Body="&lt;p&gt;Small amounts (around 10 chips) are available at some manufactureres for prices of ~5..10k$ per batch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here &lt;a href=&quot;http://www.nedopc.org/forum/viewtopic.php?f=79&amp;amp;t=218&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.nedopc.org/forum/viewtopic.php?f=79&amp;amp;t=218&lt;/a&gt; is the report of an enthusiast who successfully manufactured his own trinary logic chips in such a way on 0.5um CMOS process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess that NMOS-style schemes are still available in any CMOS process, probably with bigger area and power.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-09-30T19:23:22.917" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12463" PostTypeId="2" ParentId="12458" CreationDate="2019-09-30T20:25:32.110" Score="21" Body="&lt;p&gt;You can find it at &lt;a href=&quot;https://files.scene.org/search/?q=unreal&quot; rel=&quot;noreferrer&quot;&gt;https://files.scene.org/search/?q=unreal&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The file you want is &lt;code&gt;/demos/groups/future_crew/demos/unreal11.zip&lt;/code&gt; - the latest version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many other fantastic demos worth checking out, available there as well! It is an official archive. If you like &lt;em&gt;Unreal&lt;/em&gt;, then you'll love its sequel, &lt;em&gt;Second Reality&lt;/em&gt;!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also find recordings of these demos on YouTube, rendered on decent hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's another more descriptive source, which also includes the other contestants' entries from that particular competition (Assembly '92): &lt;a href=&quot;https://demozoo.org/parties/70/&quot; rel=&quot;noreferrer&quot;&gt;https://demozoo.org/parties/70/&lt;/a&gt; (you'll find Unreal at the bottom, in the &lt;strong&gt;PC Demo&lt;/strong&gt; section)&lt;/p&gt;&#xA;" OwnerUserId="15328" LastEditorUserId="15328" LastEditDate="2019-09-30T20:30:55.133" LastActivityDate="2019-09-30T20:30:55.133" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12464" PostTypeId="2" ParentId="12460" CreationDate="2019-09-30T23:26:58.850" Score="2" Body="&lt;p&gt;Wikipedia seems to have a &lt;a href=&quot;https://en.wikipedia.org/wiki/FOCAL_(programming_language)#Statements&quot; rel=&quot;nofollow noreferrer&quot;&gt;good explanation of this&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As with JOSS, [program] line numbers are fixed-point numbers consisting of two two-digit integers separated by a period. In FOCAL-8, valid line numbers range from 1.01 through 31.99. When printed out, using WRITE, leading zeros will be added so that all line numbers will be a total of five characters including the period, but statements referring to those lines do not need the leading zeros, for instance, GOTO 1.10&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It goes on to explain how the left-hand part is treated as a grouping element for lines:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The number on the left of the period is known as the &quot;group number&quot;. Groups provide some level of code organization that is lacking in languages like Fortran or BASIC. The primary use of these was to use a group as a subroutine which can be called with DO, for instance, DO 5 which will jump to the subroutine written in group 5. The editor also used these during edit-time, for instance, one could WRITE 2 to produce a listing of the code in group 2, or ERASE 4 to delete all of the lines in group 4.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-09-30T23:26:58.850" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12465" PostTypeId="2" ParentId="3045" CreationDate="2019-10-01T06:46:22.113" Score="4" Body="&lt;h3&gt;Background: The Original PET Keyboard and PETSCII&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Most of these keys have their roots in the original &lt;a href=&quot;https://en.wikipedia.org/wiki/File:PET_Keyboard.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore&#xA;PET 2001 keyboard&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/PET_Keyboard.svg/640px-PET_Keyboard.svg.png&quot; alt=&quot;PET 2001 Keyboard Layout&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://sourceforge.net/p/vice-emu/code/HEAD/tree/techdocs/PET/PETdoc.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;scanning and conversion was complex&lt;/a&gt; and seems to have&#xA;varied somewhat by ROM version, but eventually a &lt;a href=&quot;https://en.wikipedia.org/wiki/PETSCII#Character_set&quot; rel=&quot;nofollow noreferrer&quot;&gt;PETSCII&lt;/a&gt; code would&#xA;be produced from a keypress. For the original keyboard, typing a key&#xA;with a printable character would produce that PETSCII character, and&#xA;holding shift would produce the same character code but with the high&#xA;bit set (128 added to it) to give the graphic symbol printed on the&#xA;shifted portion of the key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other keys produced PETSCII control characters very similiar to&#xA;ASCII control characters. As you can see from the table at line&#xA;551 of &lt;a href=&quot;https://sourceforge.net/p/vice-emu/code/HEAD/tree/techdocs/PET/PETdoc.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;petdoc.txt&lt;/code&gt;&lt;/a&gt;, these were:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    Lower       Shifted     Code&#xA;    --------------------------------------------------&#xA;    RETURN                  ^M (CR or carriage return)&#xA;    RVS         RVS OFF     ^R&#xA;    STOP        RUN         ^C (CAN, cancel)&#xA;    HOME        CLR         ^S&#xA;    CRSR ↓      CRSR ↑      ^Q&#xA;    CRSR →      CRSR ←      ^]&#xA;    DEL         INST        ^T&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using shift with the above keys (excepting &lt;kbd&gt;RETURN&lt;/kbd&gt;) would&#xA;also set the high bit, just as with the other keys, giving a PETSCII&#xA;code in the &quot;high control&quot; area.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;STOP/RUN and HOME/CLR&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The &lt;kbd&gt;STOP/RUN&lt;/kbd&gt; and &lt;kbd&gt;HOME/CLR&lt;/kbd&gt; keys, along with&#xA;&lt;kbd&gt;DEL/INST&lt;/kbd&gt;, &lt;kbd&gt;CRSR↓/↑&lt;/kbd&gt;, &lt;kbd&gt;CRSR→/←&lt;/kbd&gt;, do just&#xA;what they did on the PET: they send the appropriate key codes which&#xA;are then interpreted by the screen editor or, when embedded into a&#xA;BASIC string and printed, perform their action. From BASIC you can&#xA;also print the PETSCII code directly with, e.g. &lt;code&gt;CHR$(19)&lt;/code&gt; or&#xA;&lt;code&gt;CHR$(128+19)&lt;/code&gt; to home the cursor or clear the screen, just as if&#xA;you'd pressed or stored the &lt;kbd&gt;HOME/CLR&lt;/kbd&gt; key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;kbd&gt;CTRL&lt;/kbd&gt; key on the Commodore 64 allows input of the same&#xA;characters as all of the unshifted keys above; &lt;kbd&gt;CTRL S&lt;/kbd&gt; will&#xA;do the same thing as pressing &lt;kbd&gt;HOME&lt;/kbd&gt;. However,&#xA;&lt;kbd&gt;CTRL SHIFT&lt;/kbd&gt; combinations don't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The one exception here is &lt;kbd&gt;STOP/RUN&lt;/kbd&gt;. Neither its unshifted&#xA;(&lt;code&gt;CHR$(3)&lt;/code&gt;) nor shifted (&lt;code&gt;CHR$(128+3)&lt;/code&gt;) code does anything when&#xA;printed. Additionally, the shifted key does not embed when typing into&#xA;a quoted BASIC string and will always type its &lt;code&gt;LOAD&lt;/code&gt; followed by&#xA;&lt;code&gt;RUN&lt;/code&gt; sequence.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;The Commodore &lt;kbd&gt;C=&lt;/kbd&gt; Key&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The VIC-20 removed the numeric keypad that the PET keyboards had,&#xA;combining the numeric and punctuation keys on the top row with the&#xA;unshifted keystrokes giving numbers and the shifted keystrokes giving&#xA;punctuation (&lt;code&gt;!&lt;/code&gt;, &lt;code&gt;&quot;&lt;/code&gt;, etc.). They also added colour and assigned&#xA;character codes to change the colour of the text. A good guess would&#xA;be that this is the reason they added the &lt;kbd&gt;C=&lt;/kbd&gt;: it's a second&#xA;kind of shift that now allows three PETSCII codes to be produced from&#xA;each key rather than just two. This allows all the original graphics&#xA;codes still to be produced and adds enough extra keystroke inputs to&#xA;cover the new colours as well. The same keyboard and decoding was used&#xA;on the C64, with a few extra color codes added.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, while &lt;kbd&gt;SHIFT L&lt;/kbd&gt; produced PETSCII code 204 (lower left&#xA;box) on both the PET and the C64, &lt;kbd&gt;SHIFT 6&lt;/kbd&gt; produced code 182&#xA;(right half-box) on the PET but an ampersand &lt;code&gt;&amp;amp;&lt;/code&gt; on the C64, and to&#xA;get that code 182 on the C64 you'd instead use &lt;kbd&gt;C= L&lt;/kbd&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;The RESTORE Key&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;As others have pointed out, the new &lt;kbd&gt;RESTORE&lt;/kbd&gt; key added on&#xA;the VIC-20 isn't actually connected to the keyboard matrix; it's&#xA;connected to the CPU's non-maskable interrupt (NMI) line - this connection is routed through a VIA 6520 interface chip on the VIC-20, but it was turned into a direct connection through a minimal filtering circuit on the C-64. This allows&#xA;you to send an interrupt that can't be blocked (like RESET) but makes&#xA;it easier to have the running code do a &quot;soft reset&quot; when pressed,&#xA;which is a reasonable enough idea. The standard ROMs intercept this&#xA;and, if the &lt;kbd&gt;STOP/RUN&lt;/kbd&gt; is held down while &lt;kbd&gt;RESTORE&lt;/kbd&gt;&#xA;is pressed, do a soft reset, returning you to a clear screen and BASIC&#xA;prompt with memory left intact.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="16504" LastEditDate="2020-04-01T09:59:44.347" LastActivityDate="2020-04-01T09:59:44.347" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12466" PostTypeId="1" CreationDate="2019-10-01T06:54:07.880" Score="5" ViewCount="490" Body="&lt;p&gt;Starting in 1980 the VIC-20 keyboard seems to have become sort of a&#xA;standard for Commmodore, being re-used on the MAX Machine (in membrane&#xA;form), C64, C16 and (with additional keys added) the 128.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What keyboards and layouts did Commodore use up until the VIC-20 and&#xA;how did they compare? In particular, which keyboards ever had&#xA;&lt;kbd&gt;CTRL&lt;/kbd&gt; and &lt;kbd&gt;ESC&lt;/kbd&gt; keys? Did any have keys or&#xA;characters not available on the VIC-20 keyboard?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I would be interested to see information on country-specific&#xA;keyboard variants, it may be simpler to ignore these and focus on&#xA;just the U.S. keyboards.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-10-01T09:51:42.270" Title="What were Commodore's keyboard layouts before the VIC-20?" Tags="&lt;commodore&gt;&lt;keyboards&gt;&lt;commodore-pet&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12467" PostTypeId="2" ParentId="12466" CreationDate="2019-10-01T08:55:19.257" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;VIC-20 keyboard seems to have become sort of a standard for [...] the MAX Machine (in membrane form), C64, C16 and (with additional keys added) the 128.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The C64 decision was easy, as it was done to save development time - existing part. Similar for the C16. For Max as  well for the C128 it was a compatibility issue.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What keyboards and layouts did Commodore use up until the VIC-20 and how did they compare?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There are basically three keyboard setups, with some variations in usage (assignment of sybols/functions):&lt;/p&gt;&#xA;&lt;h3&gt;PET Chiclet (*1) keyboard&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SduS5.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SduS5.jpg&quot; alt=&quot;Commodore PET Chiclet Keyboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Taken from  Steve Gray's page on 6502.org)&lt;/p&gt;&#xA;&lt;p&gt;That's the well known 73-key (*2) chiclet (*3) one we all love and hate. It sets the tone for all keyboards to follow.&lt;/p&gt;&#xA;&lt;h3&gt;PET/CBM Graphics keyboard&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/75Czm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/75Czm.jpg&quot; alt=&quot;Commodore PET/CBM Graphics Keyboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Taken from Steve Gray's page on 6502.org)&lt;/p&gt;&#xA;&lt;p&gt;Next in line was the graphics keyboard introduced with the PET 2001-N. Essentially the chiclet moved into more standard form with 70 keys (*4), featuring a real space bar and all keys of the fifth row moved to the sides of the main section. This was the primary Keyboard for all 40 column models.&lt;/p&gt;&#xA;&lt;p&gt;Despite the name, the keyboard, used thruout the 3/4000 series, was available with and without graphics symbols printed on.&lt;/p&gt;&#xA;&lt;h3&gt;PET/CBM Business Keyboard&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vjP79.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vjP79.jpg&quot; alt=&quot;Commodore PET/CBM Graphics Keyboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Taken from  Steve Gray's page on 6502.org)&lt;/p&gt;&#xA;&lt;p&gt;Commodore was, before becoming a (home) computer company a competitive business supplier, so it was natural to place the PET for the office. Just leaving of the graphics symbols from the front of the graphics keyboard, as offered with the graphics keyboard, wasn't really doing it. So a 'new' machine, the CBM 2001-16B was introduced, featuring a keyboard version more fitting to office user expectations.&lt;/p&gt;&#xA;&lt;p&gt;For the now (again only) 73 key (*5) version this meant foremost creating a numerical block in line with desktop calculators. To accommodate this the numeric block was striped of everything but digits and period (the zero key was double width), and moved in line with the main keyboard, removing any keys at 'space level'. Much like with the transition from chiclet to graphics, all unique (*6) key got again moved to the sides of the main keyboard.&lt;/p&gt;&#xA;&lt;p&gt;Later it became the standard for the 8000 (80 column business) series.&lt;/p&gt;&#xA;&lt;h3&gt;Later Keyboards&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;PET II keyboards moved ahead to an even more conventional layout with lots of extras adding up.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;VIC-20 keyboard is based on the main section of the business keyboard with some keys moved for eronomic reasons (cursor) and &lt;kbd&gt;CTRL&lt;/kbd&gt; instead of &lt;kbd&gt;TAB&lt;/kbd&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;C64 keyboard is the same as VIC-20&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;C16 (TED) Keyboard is a shaken up VIC-20/C64 Keyboard, with &lt;kbd&gt;ESC&lt;/kbd&gt; added and cursor keys up again but finally on seperate keys. Over all more following the at the time establishing standard while still using the same small layout.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;C128 is a complete redesign, and for sure the most weird modern (*7) keyboard. Of course that's in part due the imperative of C64 compatibility.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In particular, which keyboards ever had CTRL and ESC keys?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;CTRL:&lt;/strong&gt; When ignoring international layouts, it was the VIC-20 introducing a control-modifier key - instead of the &lt;kbd&gt;TAB&lt;/kbd&gt; key present on PET machines.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;ESC:&lt;/strong&gt; The CBM business keyboard did first feature an escape key.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did any have keys or characters not available on the VIC-20 keyboard?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To start with &lt;kbd&gt;TAB&lt;/kbd&gt; of course, as well as &lt;kbd&gt;OFF/RVS&lt;/kbd&gt; and &lt;kbd&gt;Repeat&lt;/kbd&gt;. More important here would be different symbol assignment. So for writing keyboard based action games you may want a different assignment table per model.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;it may be simpler to ignore these [country-specific keyboards] and focus on just the U.S. keyboards.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Too bad, as that excludes the eventual first occurance of &lt;code&gt;ESC&lt;/code&gt; as well as &lt;code&gt;CTRL&lt;/code&gt; on CBM keyboards with the (well, a) German variant of the business keyboard.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Further reading:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;André Fachat's &lt;a href=&quot;http://www.6502.org/users/andre/petindex/keyboards.html&quot; rel=&quot;noreferrer&quot;&gt;page about pet keyboards&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Steve Gray's &lt;a href=&quot;http://www.6502.org/users/sjgray/projects/editrom/cbmkeyboards.html&quot; rel=&quot;noreferrer&quot;&gt;page about keyboard support&lt;/a&gt; in his editor package&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Both hosted on the ever great &lt;a href=&quot;http://www.6502.org&quot; rel=&quot;noreferrer&quot;&gt;6502.org&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Nicolas Welte's &lt;a href=&quot;http://vic-20.de/x1541/cbm/keyboards.html&quot; rel=&quot;noreferrer&quot;&gt;C128 Mystery Keyboard&lt;/a&gt; page&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Often as well named as chic&lt;strong&gt;k&lt;/strong&gt;let, as it fits  the typing style - picking like a chicken - quite good. Also, &lt;a href=&quot;https://en.wikipedia.org/wiki/Chiclets&quot; rel=&quot;noreferrer&quot;&gt;the gum&lt;/a&gt; isn't known in many places.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Key caps that is - but as well decoded keys, as it was a full scan with no duplicates&lt;/p&gt;&#xA;&lt;p&gt;*3 - While the term chiclet keyboard has been used for the PET keyboard, it isn't one. It's not basedn a rubber mat, but 'real' keys, build from switches and springs. So &lt;a href=&quot;https://en.wikipedia.org/wiki/Chiclet_keyboard&quot; rel=&quot;noreferrer&quot;&gt;technology wise&lt;/a&gt; most modern keyboards are chiclet disguised with hard keycaps instead :)&lt;/p&gt;&#xA;&lt;p&gt;*4 - Interestingly the 70 keys come down to again 73 unique switches for decoding.&lt;/p&gt;&#xA;&lt;p&gt;*5 - While it got 73 keys again, they now produce 78 unique switch positions.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Meaning only the keys that did not already occure on the main section, like operators (&lt;kbd&gt;/&lt;/kbd&gt;, &lt;kbd&gt; *&lt;/kbd&gt;, &lt;kbd&gt;+&lt;/kbd&gt;, &lt;kbd&gt;-&lt;/kbd&gt;, &lt;kbd&gt;=&lt;/kbd&gt;), got moved&lt;/p&gt;&#xA;&lt;p&gt;*7 - By 1985 the search for default layouts was basically done even for home computers&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-10-01T09:51:42.270" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12468" PostTypeId="1" AcceptedAnswerId="12469" CreationDate="2019-10-01T09:14:41.537" Score="5" ViewCount="313" Body="&lt;p&gt;How can I change the texts assigned to MSX function keys using Z80 ASM?&lt;/p&gt;&#xA;" OwnerUserId="15329" LastActivityDate="2019-10-02T07:17:34.330" Title="How can I change the MSX function keys using ASM?" Tags="&lt;z80&gt;&lt;assembly&gt;&lt;msx&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12469" PostTypeId="2" ParentId="12468" CreationDate="2019-10-01T09:51:54.850" Score="8" Body="&lt;p&gt;I answer myself:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At address 0xf87f (FNKSTR), at the system variables memory, there are 160 bytes where you can change the values of the 10 function keys (16 bytes each).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The strings are in ASCIIZ (zero terminated string).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; Sample code (compiled with sjasmplus)&#xA;    OUTPUT test.bin&#xA;    db $fe&#xA;    dw start, newtext_end, start&#xA;    ORG $8000&#xA;&#xA;; Change the F1 key text&#xA;start:&#xA;    ld hl,newtext&#xA;    ld de,$f87f&#xA;    ld bc,newtext_end-newtext&#xA;    ldir&#xA;    ret&#xA;&#xA;newtext:&#xA;    db &quot;?\&quot;Hi you!\&quot;&quot;,0&#xA;newtext_end:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zneET.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zneET.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15329" LastEditorUserId="15329" LastEditDate="2019-10-02T07:17:34.330" LastActivityDate="2019-10-02T07:17:34.330" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12470" PostTypeId="2" ParentId="1053" CreationDate="2019-10-01T10:26:54.573" Score="7" Body="&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/apoloval/artemisa&quot; rel=&quot;noreferrer&quot;&gt;Artemisa&lt;/a&gt;&lt;/strong&gt; is a very interesting open project: creating a &lt;strong&gt;first-generation MSX&lt;/strong&gt; computer from scratch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the author say in the repository:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;This repository contains documentation and designs for a MSX computer that can be build using discrete components and original integrated circuits, codenamed Artemisa.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;This is still work in progress, but you may find some specs and designs in this repository.&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;Schematics, PCB designs and HDL simulations to build a 8-bits MSX computer&quot;&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="15329" LastEditorUserId="15329" LastEditDate="2019-10-01T16:47:15.927" LastActivityDate="2019-10-01T16:47:15.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12471" PostTypeId="1" AcceptedAnswerId="12474" CreationDate="2019-10-01T12:05:11.460" Score="12" ViewCount="3361" Body="&lt;p&gt;2M disks where formatted using &lt;a href=&quot;https://en.wikipedia.org/wiki/2M_(DOS)&quot; rel=&quot;nofollow noreferrer&quot;&gt;2MGUI&lt;/a&gt; to increase 3&quot;1/2 &amp;amp; 5&quot;1/4 DD/HD/ED disks' capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way today to recover/dump these disks to a file with modern hardware? Specially the 5&quot;1/4 ones...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've got both kind of floppy drives but not controllers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding a link to a tool suit to manage 2M disks under linux named &lt;a href=&quot;http://www.manty.net/www.geocities.com/SiliconValley/Lakes/1486/gtools-0_1_0.tgz&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gtools&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can read more about &lt;a href=&quot;http://www.manty.net/www.geocities.com/SiliconValley/Lakes/1486/smanty.html#gtools&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; (spanish only).&lt;/p&gt;&#xA;" OwnerUserId="15329" LastEditorUserId="15329" LastEditDate="2019-10-31T17:59:27.877" LastActivityDate="2019-10-31T17:59:27.877" Title="Is there any way today to recover/dump 2M disks?" Tags="&lt;ms-dos&gt;&lt;floppy-disk&gt;&lt;data-preservation&gt;&lt;floppy-drive&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12472" PostTypeId="2" ParentId="12471" CreationDate="2019-10-01T12:16:06.480" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;There is any way today to recover/dump to a file these disks with modern elements? specially the 5&quot;1/4 ones...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Only by using the same drive/controller combination with the 2M Software. Especially the controller is important, as the software bypasses regular format to increase density, which may not be possible with newer hardware.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I've both kind of floppy drives but not controlers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Controller may be found at scrap dealers or eBay. But without the software it won't work at all. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-10-01T12:16:06.480" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12473" PostTypeId="2" ParentId="12471" CreationDate="2019-10-01T13:43:13.057" Score="9" Body="&lt;p&gt;I'm not sure if this is technically possible for the disk format you are asking about, but there is an open source project by David Given called &lt;strong&gt;&lt;a href=&quot;https://github.com/davidgiven/fluxengine&quot; rel=&quot;noreferrer&quot;&gt;FluxEngine&lt;/a&gt;&lt;/strong&gt; that has been trying to read all kinds of weird and exotic disk formats by reading the magnetic flux changes directly - creating a sort of 'disk image' that can then be deciphered in software to reconstruct the actual data.  I'm only following the project tangentially, and the Github page does not mention the disk format you are interested in - but you might try contacting the author and asking about the viability of reading your 2M disks.   &lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2019-10-01T13:43:13.057" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12474" PostTypeId="2" ParentId="12471" CreationDate="2019-10-01T13:45:36.793" Score="19" Body="&lt;p&gt;In my experience, your best bet to read 2M/2MGUI disks is to find an old PC with a built-in floppy controller, and run either DOS (with &lt;a href=&quot;https://www.sac.sk/download/utildisk/2m30.zip&quot; rel=&quot;noreferrer&quot;&gt;2M&lt;/a&gt; and &lt;a href=&quot;https://www.sac.sk/download/utildisk/2mgui19.zip&quot; rel=&quot;noreferrer&quot;&gt;2MGUI&lt;/a&gt;) or Linux (with &lt;a href=&quot;https://www.gnu.org/software/mtools/&quot; rel=&quot;noreferrer&quot;&gt;Mtools&lt;/a&gt;, which supports 2M formats) to try to read the disks. Even then, some 2M disks will be hard to read — beyond the usual problems with old floppy disks, since 2M formats really push the limits, it can be difficult to read a 2M floppy using any other drive than the one which wrote it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a few “modern” options you could try, although both will require some work. If you’d like hardware you can buy, you can use either a &lt;a href=&quot;https://kryoflux.com/&quot; rel=&quot;noreferrer&quot;&gt;Kryoflux&lt;/a&gt; or a &lt;a href=&quot;http://www.cbmstuff.com/proddetail.php?prod=scp&quot; rel=&quot;noreferrer&quot;&gt;SuperCard Pro&lt;/a&gt; to read the raw data from the disks; or if you don’t mind building your own, give &lt;a href=&quot;http://cowlark.com/fluxengine/&quot; rel=&quot;noreferrer&quot;&gt;David Given’s FluxEngine&lt;/a&gt; a go. Once you’ve got the raw data, you’ll need decoding software for the 2M formats. I’m not aware of any existing 2M decoding software for raw streams, but I haven’t been paying all that much attention to 2M recovery; take a look at &lt;a href=&quot;https://github.com/keirf/Disk-Utilities&quot; rel=&quot;noreferrer&quot;&gt;Keir Fraser’s disk utilities&lt;/a&gt; to get started if you feel like writing your own.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-10-01T13:45:36.793" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12475" PostTypeId="1" CreationDate="2019-10-01T15:08:07.150" Score="4" ViewCount="345" Body="&lt;p&gt;From the website &lt;a href=&quot;https://plan28.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://plan28.org/&lt;/a&gt; and blog &lt;a href=&quot;http://blog.plan28.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://blog.plan28.org/&lt;/a&gt;, it seems that the original documents are scattered and hard to decipher. It might be that the plans are not even close to be finished. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I wonder, why not, at first, build machine, made of 3D printed parts, that would closely resemble the original mechanics and have the same programing language? Wouldn't it at least help to understand the original schemes?&lt;/p&gt;&#xA;" OwnerUserId="15315" LastActivityDate="2019-10-01T15:52:53.047" Title="Why not build an &quot;approximate&quot; Analytical Engine before the complete one?" Tags="&lt;history&gt;&lt;analytical-engine&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12476" PostTypeId="1" AcceptedAnswerId="12479" CreationDate="2019-10-01T15:50:39.867" Score="7" ViewCount="554" Body="&lt;p&gt;I remember playing a side-scroller at a Babbage's at the mall (on probably a sweet Compaq; I don't think it was on a C64, an Amiga, an Apple, or anything more exotic), probably around 1993, where the player controlled a robot that was modeled on the ED-209 from Robocop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also seem to remember the sprite size for the character being memorably small relative to the size of the screen, perhaps to show more of the surroundings. The environment was futuristic metal caves or factories or something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone remember this, or am I imagining things?&lt;/p&gt;&#xA;" OwnerUserId="10513" LastEditorUserId="4921" LastEditDate="2020-01-16T06:32:58.727" LastActivityDate="2020-09-27T10:37:10.320" Title="Does anyone remember an early 90s side-scroller with a player-controlled ED-209-like robot?" Tags="&lt;ibm-pc&gt;&lt;identify-this-game&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12477" PostTypeId="2" ParentId="12475" CreationDate="2019-10-01T15:52:53.047" Score="10" Body="&lt;p&gt;For the same reason you don't build a bridge by grabbing some metal and stone, dragging it to the shore of a river, and start stacking it and bolting it together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trying just to build and run the Analytical Engine from incomplete plans is about as likely to work or be useful as typing in an incomplete computer program and &quot;just running it.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But worse, since these are physical parts you're talking about, fabricating them without without sufficient planning is would inevitably lead to massive amounts of expensive rework as you find out that pieces you've built don't fit together and/or work properly because you didn't bother to check the design first. It's much cheaper, especially in this age of easy 3-D modelling, to build a computer model and test it before doing the real thing. (And by the way, it's unlikely that much of it could be built from 3D printed parts; the stresses many of the components have to deal with will require fabrication in metal.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since there's currently no plan in complete, ready-to-build form, that needs to be made first, and that's made by carefully studying all of Babbage's work over the decades he did it. Even then, we'll need to &lt;em&gt;understand&lt;/em&gt; the plan and the techniques used in it, and that's also what we get through study. (Imagine you were given detailed plans for a modern bridge. Would you be able to supervise the construction workers to get it built safely and economically?)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-10-01T15:52:53.047" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12478" PostTypeId="2" ParentId="12476" CreationDate="2019-10-01T16:22:33.003" Score="4" Body="&lt;p&gt;I suspect this is &lt;a href=&quot;https://www.mobygames.com/game/robozone&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robozone&lt;/a&gt;. It was released in 1991 on a number of platforms, including DOS PCs, and features a robot which looks similar to the ED-209:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.mobygames.com/game/atari-st/robozone/screenshots/gameShotId,297931/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Uwb15.png&quot; alt=&quot;Robot destroying an enemy&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There’s a &lt;a href=&quot;https://archive.org/details/Amiga_500_Longplay_062_Robozone&quot; rel=&quot;nofollow noreferrer&quot;&gt;longplay of the Amiga version&lt;/a&gt; on archive.org; skip ahead to 5:30 to see the gameplay.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-10-01T16:31:18.823" LastActivityDate="2019-10-01T16:31:18.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12479" PostTypeId="2" ParentId="12476" CreationDate="2019-10-01T18:57:57.823" Score="6" Body="&lt;p&gt;Upgraded from a mere comment, my suggestion is the Psygnosis title The Killing Game Show (Amiga/ST), also released as Fatal Rewind (Sega Mega Drive/Genesis):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lwDsl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lwDsl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/J0qBF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/J0qBF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was released in 1990 for the computers and 1991 for the Sega; another notable element of the game besides the robot and metallic corridors is the rising water level that acts like a level timer. A full review of the Sega version, including more detailed gameplay details, can be found &lt;a href=&quot;http://www.sega-16.com/2006/09/fatal-rewind/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-10-01T21:26:03.497" LastActivityDate="2019-10-01T21:26:03.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12480" PostTypeId="2" ParentId="12471" CreationDate="2019-10-01T23:13:04.540" Score="0" Body="&lt;p&gt;Linux systems can support a lot of hardware floppy formats (maybe not ALL that these old tools offered), that is what the various fd* (eg fd0h1722) devices in a classical /dev filesystem are meant for. See the fd(4) manual page. If the format you use is supported, you will be able to simply mount the appropriate device as the appropriate filesystem (vfat, likely). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your mileage may vary; a built in 34pin port on an older mainboard, plus a 34pin floppy drive, will likely yield more success than usb connected drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mind that using such above-normal-capacity formats made the resulting disks extremely liable to problems from media defects, drive calibration errors, or subtle hardware differences. That is why they were not used for mainstream applications.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2019-10-01T23:13:04.540" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12482" PostTypeId="2" ParentId="12445" CreationDate="2019-10-02T05:42:40.447" Score="2" Body="&lt;p&gt;The Byte Sieve benchmark, in Applesoft Basic took 2806 seconds, according to Byte Magazine, September 1981 issue, page 192.    Byte Sieve in 6502 Assembly language took 13.9 seconds, according to Byte Magazine, January 1983 issue, page 292.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's a factor of 200X between a tokenizing Basic interpreter and hand-coded assembly for the 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;200X is in about the right ballpark, as various other Basic interpreters that I've benchmarked (including my own Chipmunk Basic) on a bunch of different CPU's range from 40X to 500X slower than Asm or C code running the equivalent algorithm.  Modern REPL language systems run faster by including a JIT compiler to machine code, or tokens for a fast VM.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2019-10-02T05:47:53.630" LastActivityDate="2019-10-02T05:47:53.630" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12483" PostTypeId="2" ParentId="12389" CreationDate="2019-10-02T11:58:49.297" Score="1" Body="&lt;h2&gt;Short answer&lt;/h2&gt;&#xA;&lt;p&gt;By our definition of programming of the last 30 years - you didn't program it, you merely gave integer parameters to a function and let it loop a few times and provide an integer answer.&lt;/p&gt;&#xA;&lt;p&gt;Keep in mind people who performed mathematical calculations given to them during World War II were called &amp;quot;Computers.&amp;quot; (i.e. computing can mean calculating and programming can mean scheduling something - like a TV program).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long Answer&lt;/h2&gt;&#xA;&lt;p&gt;Charles Babbage took took much longer than he thought to design his Difference Engine; only a small part got built in his lifetime.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wis5o.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wis5o.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is from the Science Museum in London.&lt;/p&gt;&#xA;&lt;p&gt;There are a number of parts to this answer:&lt;/p&gt;&#xA;&lt;h2&gt;&lt;strong&gt;How do you calculate log₁₀ 60 without a calculator?&lt;/strong&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0P1sH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0P1sH.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;We can see the row for log₁₀ 60 in the book above. First we will cover off some assumed knowledge in Babbage's book:&lt;/p&gt;&#xA;&lt;p&gt;The logarithm is the inverse function to exponentiation.&#xA;This means:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;log₁₀ 1 = 0&lt;/li&gt;&#xA;&lt;li&gt;log₁₀ 10 = 1&lt;/li&gt;&#xA;&lt;li&gt;log₁₀ 100 = 2&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So log₁₀ 60 must be between 1 and 2.&lt;/p&gt;&#xA;&lt;p&gt;Now as @xxavier has suggested - we can do logarithms using a &lt;a href=&quot;https://en.wikipedia.org/wiki/Taylor_series#Natural_logarithm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Taylor series&lt;/a&gt; - ie&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q1RuL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q1RuL.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;but this approximation only works for logs where 0 &amp;lt; x &amp;lt; 1.&lt;/p&gt;&#xA;&lt;p&gt;Also note that this is natural log &lt;a href=&quot;https://i.stack.imgur.com/x3FaP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/x3FaP.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt; not base 10 log, so we'll have to convert back later.&lt;/p&gt;&#xA;&lt;p&gt;So how do we get to log₁₀ 60?&lt;/p&gt;&#xA;&lt;p&gt;We look at another Logarithmic identity:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zs9VY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zs9VY.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;How does that help?&lt;/p&gt;&#xA;&lt;p&gt;We can take what we did before - and simplify things:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1pD5f.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1pD5f.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;so&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6yXyd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6yXyd.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now we can go back to our Taylor series approximation:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Znu2y.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Znu2y.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Which is pretty close to a value provided by a calculator (-0.510826).&lt;/p&gt;&#xA;&lt;p&gt;Now we convert back to log₁₀ n using another logarithmic identity.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/toDRQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/toDRQ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This means we can do:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WvXH2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WvXH2.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So to convert back to&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/G639L.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G639L.png&quot; alt=&quot;$$ \log_{10}x $$&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;we can divide by&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/brY3B.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/brY3B.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;which is approx. 2.302.&lt;/p&gt;&#xA;&lt;p&gt;So now&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/H9xvA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/H9xvA.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Which looks close to what Babbage got:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0P1sH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0P1sH.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So we can confidently calculate a logarithm by hand.&lt;/p&gt;&#xA;&lt;p&gt;But the Difference Engine can't expand Taylor series, it uses the &lt;a href=&quot;https://en.wikipedia.org/wiki/Finite_difference_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Finite Differences Method&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;How do you calculate a logarithm by the &lt;a href=&quot;https://en.wikipedia.org/wiki/Finite_difference_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Finite Differences Method&lt;/a&gt;?&lt;/h2&gt;&#xA;&lt;p&gt;Babbage &lt;a href=&quot;https://en.wikipedia.org/wiki/Gaspard_de_Prony#Influence_on_Charles_Babbage&quot; rel=&quot;nofollow noreferrer&quot;&gt;used&lt;/a&gt; the approach of &lt;a href=&quot;https://en.wikipedia.org/wiki/Gaspard_de_Prony&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gaspard de Prony&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;We'll use our Binomial expansion above to the sixth order:&lt;/p&gt;&#xA;&lt;p&gt;We'll do this for a sixth order polynomial:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ovy5n.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ovy5n.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As an Excel function - this looks like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;=(C161-1)-(1/2)*POWER((C161-1),2)&#xA;+(1/3)*POWER((C161-1),3)-(1/4)*POWER((C161-1),4)&#xA;+(1/5)*POWER((C161-1),5)-(1/6)*POWER((C161-1),6)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now we build a table for this polynomial of sum of the differences between 0 and 1:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3nXtJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3nXtJ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now we shuffle top of columns to top row&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vMpFy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vMpFy.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then we fill in first row with precomputed values, then populate each cell  by adding the cell above and the cell above right:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JDWMw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JDWMw.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So again we get&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VkKsJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VkKsJ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;which we converted back to base 10 above.&lt;/p&gt;&#xA;&lt;p&gt;You can see a detailed video of the finite differences method &lt;a href=&quot;https://www.youtube.com/watch?v=PFMBU17eo_4&amp;amp;feature=youtu.be&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;How do we use Finite Differences in relation to the Difference Engine?&lt;/h2&gt;&#xA;&lt;p&gt;When initialising the engine - you can set values:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/twHMM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/twHMM.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The values you are setting are the top row of the Finite Differences method from before.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JDWMw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JDWMw.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Babbage's Difference Engine No.2 &lt;a href=&quot;https://en.wikipedia.org/wiki/Difference_engine#Charles_Babbage%27s_difference_engines&quot; rel=&quot;nofollow noreferrer&quot;&gt;was designed for 7th order polynomials&lt;/a&gt; (our calculation was sixth order). This means our Finite Differences Method would have had 7 columns.&lt;/p&gt;&#xA;&lt;p&gt;On the Difference Engine each vertical axle represents a number with 31 digits - with a gear corresponding to each digit, the most significant digit at the top:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MNruL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MNruL.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note that the Difference Engine &lt;a href=&quot;https://en.wikipedia.org/wiki/Difference_engine#Subtraction&quot; rel=&quot;nofollow noreferrer&quot;&gt;represents negative numbers&lt;/a&gt; using &lt;a href=&quot;https://en.wikipedia.org/wiki/Method_of_complements&quot; rel=&quot;nofollow noreferrer&quot;&gt;tens complement&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So to enter our first value -0.10536 - we have to convert it to tens complement.&lt;/p&gt;&#xA;&lt;p&gt;10's complement of a decimal number can be found by adding 1 to the 9's complement of that decimal number. It is just like 2's complement in binary number representation. For example, let us take a decimal number 10536; 9's complement of this number will be 99999-10536 which will be 89463. Now 10s complement will be 89463+1=89464.&lt;/p&gt;&#xA;&lt;p&gt;(I'm assuming - similar to digital logic - there is a way to flag a 10s complement number - but that wasn't available to me at the time of writing.)&lt;/p&gt;&#xA;&lt;p&gt;So assuming we are entering the value 0.89464 - this means we'll need to turn the 31 wheels to look like:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aGBP8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aGBP8.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(We have entered a decimal fraction as an integer representing the numbers scaled up - and assume that it will be scaled back down later).&lt;/p&gt;&#xA;&lt;p&gt;Then we repeat this activity for the other 6 columns of the table - against the next 6 vertical axles of gear-values.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gmCZD.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gmCZD.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;How does the Difference Engine Add Numbers?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In our Finite Differences method - we had to take the cell above, and the cell above right.&lt;/p&gt;&#xA;&lt;p&gt;Here &lt;a href=&quot;https://www.youtube.com/watch?v=vdra5Ms__9s&quot; rel=&quot;nofollow noreferrer&quot;&gt;we have&lt;/a&gt; two wheels representing values in the calculation, and the gear in the middle that adds.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cAatZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cAatZ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;How does the Difference Engine carry values to the next significant digit during addition?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;To carry numbers up - &lt;a href=&quot;https://www.youtube.com/watch?v=vdra5Ms__9s&quot; rel=&quot;nofollow noreferrer&quot;&gt;there was&lt;/a&gt; an external device:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eSPVv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eSPVv.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This was stacked in an vertical array for each value gear on the axle:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NCrOo.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NCrOo.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can see the addition gear and the carry mechanism here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wM5be.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wM5be.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the context of the 1800s, when ships were getting lost or crashing, and reliable log tables were worth real money, the Difference Engine was (and is) a machine of great beauty.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o0Mhk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o0Mhk.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;(The difference engine in the London Science Museum)&lt;/p&gt;&#xA;" OwnerUserId="3500" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-10-02T16:42:05.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12484" PostTypeId="1" AcceptedAnswerId="12493" CreationDate="2019-10-02T13:58:44.600" Score="8" ViewCount="1144" Body="&lt;p&gt;Back in the 90's I remember playing a 2d shooter-platformer game on my family's home computer. I sucked at the game, and as far as I remember I never managed to beat the first level.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The details I can (somewhat) remember&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You could play as either a man or a woman&lt;/li&gt;&#xA;&lt;li&gt;You where shooting green zombies, but there were aliens as well&lt;/li&gt;&#xA;&lt;li&gt;You could obtain a grenade&lt;/li&gt;&#xA;&lt;li&gt;There was a boss by the end of the level that was a grey alien (like the classical area 51 grey alien) in a yellow robot suit&lt;/li&gt;&#xA;&lt;li&gt;You were fighting the boss on top of either a destroyed skyscraper or a skyscraper that was under construction&lt;/li&gt;&#xA;&lt;li&gt;It must have been released in the mid to late 90's&lt;/li&gt;&#xA;&lt;li&gt;I remember the graphics as quite colourful and cartoonish&lt;/li&gt;&#xA;&lt;li&gt;I believe the background was a city&lt;/li&gt;&#xA;&lt;li&gt;It was played on an old Windows computer (i think Windows 95)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;I know it is not these games:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Alien Storm&lt;/li&gt;&#xA;&lt;li&gt;Duke Nukem&lt;/li&gt;&#xA;&lt;li&gt;Rainworm Jim&lt;/li&gt;&#xA;&lt;li&gt;Rent a Hero&lt;/li&gt;&#xA;&lt;li&gt;Vendetta&lt;/li&gt;&#xA;&lt;li&gt;Xenophobe&lt;/li&gt;&#xA;&lt;li&gt;Gateworld&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15340" LastEditorUserId="15334" LastEditDate="2021-05-26T07:02:48.757" LastActivityDate="2021-05-26T07:06:20.757" Title="Looking for a 90's shooter-platformer game" Tags="&lt;ibm-pc&gt;&lt;identify-this-game&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12485" PostTypeId="2" ParentId="12484" CreationDate="2019-10-02T14:11:34.087" Score="11" Body="&lt;p&gt;I'm going to venture a guess with &lt;em&gt;Alien Carnage&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XQrQG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XQrQG.png&quot; alt=&quot;first screenshot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NQ0B3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NQ0B3.png&quot; alt=&quot;second screenshot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It was a shareware title released initially as &lt;em&gt;Halloween Harry&lt;/em&gt; but later retitled, and the plot revolves around aliens that turn people into zombies. Another notable gameplay element is the character's sometimes jetpack.&lt;/p&gt;&#xA;&lt;p&gt;It has a &lt;a href=&quot;https://en.wikipedia.org/wiki/Alien_Carnage&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page&lt;/a&gt;, which reports that at the time of the name change they also switched around the episode order; since Apogee always offered the first episode of a game for free as shareware you should download the demos of both &lt;em&gt;Halloween Harry&lt;/em&gt; and &lt;em&gt;Alien Carnage&lt;/em&gt; to get two different episodes for free.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="15334" LastEditDate="2021-05-26T07:04:08.173" LastActivityDate="2021-05-26T07:04:08.173" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12486" PostTypeId="1" CreationDate="2019-10-02T15:14:27.353" Score="8" ViewCount="318" Body="&lt;p&gt;I only recently learned of the JOSS language, and then only through a roundabout fashion from an &lt;a href=&quot;https://computingpioneers.com/index.php/Dave_Ahl_and_Betsy_Ahl&quot; rel=&quot;noreferrer&quot;&gt;interview with David Ahl where he mentions FOCAL&lt;/a&gt;. This led me to read the available manuals for all versions of these languages. And that leads to a mystery...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/JOSS&quot; rel=&quot;noreferrer&quot;&gt;JOSS&lt;/a&gt; is both a language and an operating system. It supports time-sharing and basic file management in addition to a user-facing editor and a program store. Users can enter commands/statements at the command line in &quot;direct&quot; mode where they run immediately, or they can prepend it with a line number, in which case it is entered into the store and can be performed by entering &lt;code&gt;Go&lt;/code&gt; at the command prompt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Dartmouth_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Dartmouth BASIC&lt;/a&gt; is both a language and an operating system. It supports time-sharing and basic file management in addition to a user-facing editor and a program store. Users can enter commands/statements at the command line in &quot;immediate&quot; mode where they run immediately, or they can prepend it with a line number, in which case it is entered into the store and can be performed by entering &lt;code&gt;RUN&lt;/code&gt; at the command prompt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This may seem like a forced comparison. It is not. With one major exception, the two languages are almost identical and have 1:1 correspondence between instructions. JOSS has &lt;code&gt;Type&lt;/code&gt;, BASIC has &lt;code&gt;PRINT&lt;/code&gt;. JOSS has &lt;code&gt;Demand&lt;/code&gt;, BASIC has &lt;code&gt;INPUT&lt;/code&gt;. JOSS has &lt;code&gt;Set&lt;/code&gt;, BASIC has &lt;code&gt;LET&lt;/code&gt;. It's not just the instructions, the entire structure is similar. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The major difference is the structure of loops and conditionals. In BASIC, they precede the code they control, for instance, &lt;code&gt;IF X&amp;gt;5 THEN PRINT &quot;YES!&quot;&lt;/code&gt;. In JOSS this order is reversed, &lt;code&gt;Type &quot;YES!&quot; if X&amp;gt;5&lt;/code&gt;. I point this out because of one very interesting fact: BASIC-PLUS allowed either form, and I assume it took that note from JOSS. There are other differences, but overall they are minor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally: JOSS began in 1961 and was running in 1963. It was &lt;em&gt;widely&lt;/em&gt; shown to industry in 63 and 64. Dartmouth BASIC started in 1964 and was shipped that year.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my question. In spite of reading every history I can find for both languages, I cannot find any mention of JOSS as an inspiration for BASIC. Given the parallels between the two I find it difficult to believe JOSS was not known to the Dartmouth team.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, does anyone know of an article on either that specifically links the two, or one of the many other offshoots of JOSS?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-10-02T19:00:00.557" Title="Any historical references to links between JOSS and BASIC?" Tags="&lt;basic&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12487" PostTypeId="2" ParentId="12486" CreationDate="2019-10-02T15:41:13.410" Score="10" Body="&lt;p&gt;I have a hard time to see any similarities beyond basic structures one will find in any language. And all of the ones cited are of such generic structure - heck, the very same list could be made for COBOL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC is clearly influenced by FORTRAN - up to the point of being a simplified FORTRAN. JOSS on the other hand focuses on a more natural language like structure with postfix modifiers/conditions. It is hard to find any influence from JOSS in BASIC. In fact, the Wiki article does JOSS a bad favour by referring to BASIC at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, I wouldn't argue against being known to the designers of BASIC, but they clearly have decided to not go down the JOSS road.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-02T19:00:00.557" LastActivityDate="2019-10-02T19:00:00.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12488" PostTypeId="1" AcceptedAnswerId="12489" CreationDate="2019-10-02T20:07:55.753" Score="7" ViewCount="545" Body="&lt;p&gt;If you look at the results of the Rugg/Feldman benchmarks, shown in &lt;a href=&quot;https://en.wikipedia.org/wiki/Rugg/Feldman_benchmarks&quot; rel=&quot;noreferrer&quot;&gt;this Wiki entry&lt;/a&gt;, you'll see that Sinclair ZX80 is much faster than Sinclair Spectrum on all tests despite the fact that both computers use the same CPU. Why is that?&lt;/p&gt;&#xA;" OwnerUserId="15342" LastEditorUserId="6659" LastEditDate="2019-10-02T20:37:43.823" LastActivityDate="2019-10-04T09:03:10.363" Title="Why is ZX80 much faster than Spectrum on Rugg/Feldman benchmarks?" Tags="&lt;zx-spectrum&gt;&lt;basic&gt;&lt;performance&gt;&lt;sinclair&gt;&lt;zx80&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12489" PostTypeId="2" ParentId="12488" CreationDate="2019-10-02T20:21:40.480" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] Sinclair ZX80 is much faster than Sinclair Spectrum on all tests despite the fact that both computers use the same CPU.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's not about the CPU, but because these are vastly different BASIC implementations. In this case it's due to integer vs. floating point maths. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact is marked in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rugg/Feldman_benchmarks#Sample_results&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX80 entry&lt;/a&gt; by noting &lt;em&gt;'integer only'&lt;/em&gt;. The numbers shown are for the original, not upgraded ZX80 with its 4 KiB integer-only BASIC, not be confused with the 'backported' 8 KiB ZX81 BASIC. Having the upgrade installed, the numbers should be quite in line with the Spectrum readings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A similar difference is shown in the Apple II entries for Integer BASIC vs. Applesoft.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-10-04T09:03:10.363" LastActivityDate="2019-10-04T09:03:10.363" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="12490" PostTypeId="2" ParentId="12460" CreationDate="2019-10-03T02:21:05.900" Score="4" Body="&lt;p&gt;Yes.   This is FOCAL 69 running under TSS/8, on a PiDP-8.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*1.1 TYPE &quot;HELLO WORLD&quot;,!!&#xA;*GO&#xA;HELLO WORLD&#xA;&#xA;*WRITE ALL&#xA;C-FOCAL,1969&#xA;&#xA;01.10 TYPE &quot;HELLO WORLD&quot;,!!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Observe I gave the line number as 1.1; the listing from 'write all' rendered it as 01.10.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(As far as I can recall, this is my first-ever FOCAL program. Probably my last, too.)&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-10-03T02:21:05.900" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12491" PostTypeId="1" CreationDate="2019-10-03T07:50:01.940" Score="5" ViewCount="212" Body="&lt;p&gt;I'm looking for the exact tape data format of old SVI-318/328 computers, some kind of whitepapers explaining it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've obtained several information from a real tape, but I don't known if the infered rules are correct, if exists any variants, the correct bauds...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Empirically taken from a WAV file the format is:&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The bits are codified like this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0: 4 pulses at ~2400 Hz&lt;/li&gt;&#xA;&lt;li&gt;1: 4 pulses at ~4800 Hz&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Each data block have a pilot tone followed by the data without a pause between them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pilot can be codified like 199 bytes with value &lt;em&gt;0xAA&lt;/em&gt; + 1 byte with value &lt;em&gt;0xFF&lt;/em&gt;. These bytes don't have leading or trailing bits and are in MSb format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And data come codified not using leading bits, and one 0 valued trailing bit. They are also using MSb.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;What I need is a confirmation of this coding or not in case there is something missing or not accurate.&lt;/p&gt;&#xA;" OwnerUserId="15329" LastEditorUserId="15329" LastEditDate="2019-10-03T14:02:22.547" LastActivityDate="2019-10-06T01:11:24.890" Title="Exact tape recording format for SVI-318/328 computers" Tags="&lt;cassette-tape&gt;&lt;data-preservation&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12492" PostTypeId="1" AcceptedAnswerId="12494" CreationDate="2019-10-03T22:13:14.807" Score="11" ViewCount="706" Body="&lt;p&gt;I want to compile and run a Hello World program in C with the cc65 compiler for an unexpanded VIC-20 model. For printing I'm using the &lt;code&gt;conio.h&lt;/code&gt; function &lt;code&gt;cprintf&lt;/code&gt;, since the &lt;code&gt;conio&lt;/code&gt; implementation requires less memory than &lt;code&gt;stdio&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The program looks like this (originally suggested by Ulrich von Bassewitz &lt;a href=&quot;https://cc65.github.io/mailarchive/2002-12/2099.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  #include &amp;lt;stdlib.h&amp;gt;&#xA;  #include &amp;lt;conio.h&amp;gt;&#xA;&#xA;  int main (void)&#xA;  {&#xA;      cprintf (&quot;Hello world!\r\n&quot;);&#xA;      return EXIT_SUCCESS;&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I compiled with &lt;code&gt;cl65 -t vic20 helloworld.c -o helloworld.prg --mapfile map.txt&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mapfile shows that the compiled code fits, stack starts at 0x1A00, so there is 151 bytes left between 0x18AF and the stack:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  Name                   Start     End    Size  Align&#xA;  ----------------------------------------------------&#xA;  ZEROPAGE              000002  00001B  00001A  00001&#xA;  LOADADDR              000FFF  001000  000002  00001&#xA;  EXEHDR                001001  00100C  00000C  00001&#xA;  STARTUP               00100D  001046  00003A  00001&#xA;  ONCE                  001047  001052  00000C  00001&#xA;  CODE                  001053  001709  0006B7  00001&#xA;  RODATA                00170A  001834  00012B  00001&#xA;  DATA                  001835  001868  000034  00001&#xA;  INIT                  001869  001882  00001A  00001&#xA;  BSS                   001883  0018AF  00002D  00001&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However when I run the program on the VIC20 emulator of VICE, the program terminates without printing any visible output (except for the &quot;READY.&quot; from the OS).&#xA;It turned out that the text is actually there, but it was printed with white characters on white background, although the foreground color was the default blue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After adding a &lt;code&gt;clrscr()&lt;/code&gt; command, &lt;code&gt;cprintf&lt;/code&gt; is working:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  #include &amp;lt;VIC20&amp;gt;   /* this line seems to have no effect */&#xA;  #include &amp;lt;stdlib.h&amp;gt;&#xA;  #include &amp;lt;conio.h&amp;gt;&#xA;&#xA;  int main (void)&#xA;  {&#xA;      clrscr();&#xA;      cprintf (&quot;Hello world!\r\n&quot;);&#xA;      return EXIT_SUCCESS;&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On the C64 the printing works independently if there is a &lt;code&gt;clrscr()&lt;/code&gt; or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the &lt;a href=&quot;https://www.cc65.org/doc/library-5.html&quot; rel=&quot;noreferrer&quot;&gt;cc65 documentation&lt;/a&gt;, &lt;code&gt;conio.h&lt;/code&gt; should work for the VIC20 platform. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the reason that &lt;code&gt;cprintf&lt;/code&gt; plays up in the version without the &lt;code&gt;clrscr()&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2019-10-04T09:37:24.660" LastActivityDate="2019-10-30T03:18:19.380" Title="cprintf printing invisible characters in C program on VIC 20" Tags="&lt;c&gt;&lt;vic-20&gt;&lt;cc65&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12493" PostTypeId="2" ParentId="12484" CreationDate="2019-10-04T06:41:50.040" Score="12" Body="&lt;p&gt;So trough @Tommy's answer I was able to find the game I was looking for. Turns out it was a title called &lt;em&gt;Zombie Wars&lt;/em&gt;, also known as &lt;em&gt;Halloween Harry 2&lt;/em&gt;. Essentially it was a sequel to Alien Carnage released in 1996.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/G91LZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G91LZ.jpg&quot; alt=&quot;Zombie Wars Screenshots&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15340" LastEditorUserId="15334" LastEditDate="2021-05-26T07:06:20.757" LastActivityDate="2021-05-26T07:06:20.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12494" PostTypeId="2" ParentId="12492" CreationDate="2019-10-04T07:24:36.690" Score="18" Body="&lt;h3&gt;The Fix for cc65&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This was discussed in &lt;a href=&quot;https://github.com/cc65/cc65/issues/946&quot; rel=&quot;nofollow noreferrer&quot;&gt;cc65 issue #946&lt;/a&gt; and fixed by&#xA;&lt;a href=&quot;https://github.com/cc65/cc65/pull/965&quot; rel=&quot;nofollow noreferrer&quot;&gt;cc65 PR #965&lt;/a&gt;. That was merged to the master branch on&#xA;2019-10-26, and should appear in V2.19 of cc65. (I don't know when&#xA;that release will happen, however; it's been five months since the&#xA;last release.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is, however, quite easy to do your own build of cc65 if you want to&#xA;use the master branch version (which seems quite stable) for your&#xA;project. For one example of how to do this see my &lt;a href=&quot;https://github.com/0cjs/vic20cc65&quot; rel=&quot;nofollow noreferrer&quot;&gt;vic20cc65&lt;/a&gt; repo&#xA;(which is what I used for debugging this issue and testing the fix).¹&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;The Workaround to Avoid the Problem&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This is necessary only when using a version of cc65 without the fix&#xA;above, such as v2.18 or earlier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the VIC-20, always call &lt;code&gt;cputc('\r')&lt;/code&gt; or a routine that does a&#xA;cursor move (e.g., &lt;code&gt;gotoxy()&lt;/code&gt;, &lt;code&gt;clrscr()&lt;/code&gt;) before printing anything&#xA;else with conio, i.e., anything that uses &lt;code&gt;cputc()&lt;/code&gt; to print,&#xA;including &lt;code&gt;cputs()&lt;/code&gt; and &lt;code&gt;cprintf()&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;The Details&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;There is a bug in the VIC 20 Kernal PLOT routine at $FFF0 that sets&#xA;the pointer into the colour RAM to the wrong value. cc65 has a&#xA;workaround for this in &lt;code&gt;libsrc/vic20/kplot.s&lt;/code&gt;. I suspect that this is&#xA;properly used by &lt;code&gt;cputc()&lt;/code&gt; and other routines, but from reading the&#xA;code it's clear that &lt;code&gt;cputc()&lt;/code&gt; would only call it when a CR is&#xA;printed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, at startup the Kernal has left the colour RAM pointer pointing&#xA;at the wrong location as compared to the screen RAM pointer, and&#xA;&lt;code&gt;cputc()&lt;/code&gt; sets colour values in the wrong memory locations until the&#xA;working version of &lt;code&gt;PLOT&lt;/code&gt; in &lt;code&gt;kplot.s&lt;/code&gt; has been called.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;The Debugging&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;asminc/vic20.inc&lt;/code&gt; in the &lt;a href=&quot;https://github.com/cc65/cc65&quot; rel=&quot;nofollow noreferrer&quot;&gt;cc65 source code&lt;/a&gt; contains&#xA;definitions for locations storing the current screen position, colour&#xA;and so forth on the VIC-20. All the symbolic names and locations below&#xA;come from that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;libsrc/vic20/cputc.s&lt;/code&gt; contains the &lt;code&gt;cputc()&lt;/code&gt; function which is used&#xA;by &lt;code&gt;cputs()&lt;/code&gt;, &lt;code&gt;cprintf()&lt;/code&gt; and so on. This function uses and updates&#xA;locations from the file above as it deposits values into the screen&#xA;and colour RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To track down the problem, I used the program listed below to print&#xA;out various screen-related pointers and values before and after&#xA;various calls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going through the various values used by &lt;code&gt;cputc()&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The colour setting itself, &lt;code&gt;CHARCOLOR&lt;/code&gt; ($286) appears to be fine;&#xA;it's $06 (blue) when the program starts and remains that way&#xA;throughout.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CURS_X&lt;/code&gt; ($D3) and &lt;code&gt;CURS_Y&lt;/code&gt; ($D6) seem fine on entry, pointing to&#xA;0,6 at start and 0,8 after &lt;code&gt;gotoxy(0,8)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SCREEN_PTR&lt;/code&gt; also seems ok: it starts $1E84 (132 = 6*22+0 chars&#xA;from the screen base) and after &lt;code&gt;gotoxy(0,8)&lt;/code&gt; changes to $1EB0 (176&#xA;= 8*22+0 chars from screen base).&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CRAM_PTR&lt;/code&gt; starts at $966E, which is only 110 = 5*22+0 chars from&#xA;the colour RAM base, and after &lt;code&gt;gotoxy(0,8)&lt;/code&gt; changes to $96B0,&#xA;176 = 8*22+0 chars from the colour RAM base.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So this is why your output routine that eventually uses &lt;code&gt;cputc()&lt;/code&gt; is&#xA;failing at program start: the current output position in the colour&#xA;RAM is at line 5, whereas the current output position in the screen&#xA;RAM is at line 6, so &lt;code&gt;cputc()&lt;/code&gt; is writing the colour information to&#xA;the line above the characters it put on the screen.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;The Program&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Here's the code I used to debug this. I make no claims to it being&#xA;beautiful; it's just a quick hack that I threw together.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;vic20.h&amp;gt;&#xA;#include &amp;lt;stdlib.h&amp;gt;&#xA;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &amp;lt;conio.h&amp;gt;&#xA;&#xA;int main (void)&#xA;{&#xA;    /*  asminc/cvic.inc&#xA;        CURS_X      $D3  211&#xA;        CURS_Y      $D6  214&#xA;        SCREEN_PTR  $D1  209&#xA;        CRAM_PTR    $F3  243&#xA;        CHARCOLOR   $286 646&#xA;    */&#xA;&#xA;    unsigned char *pl, *ph, cl, ch, dl, dh;&#xA;    pl = (unsigned char *) 0xF3;&#xA;    ph = (unsigned char *) 0xF4;&#xA;&#xA;    cl = *pl; ch = *ph;&#xA;    gotoxy(0, 8);&#xA;    dl = *pl; dh = *ph;&#xA;    cprintf(&quot;HelloHelloHelloHello!\r\n&quot;);&#xA;&#xA;    cprintf(&quot;cl=%02x ch=%02x\r\n&quot;, cl, ch);&#xA;    cprintf(&quot;dl=%02x dh=%02x\r\n&quot;, dl, dh);&#xA;    cprintf(&quot;pl=%02x ph=%02x\r\n&quot;, *pl, *ph);&#xA;&#xA;    return EXIT_SUCCESS;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹&lt;sub&gt;The &lt;a href=&quot;https://github.com/0cjs/vic20cc65&quot; rel=&quot;nofollow noreferrer&quot;&gt;vic20cc65&lt;/a&gt; repo pulls in the cc65 source as a Git&#xA;submodule, which locks it to a particular commit. That's typically&#xA;what you'd want for &quot;production&quot; code where you want others to be&#xA;using the version of cc65 you've tested, rather than possibly a more&#xA;recent version of the master branch. If you always want to use just&#xA;the latest code on master you'd want to clone the code yourself&#xA;without using a submodule. &lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-10-30T03:18:19.380" LastActivityDate="2019-10-30T03:18:19.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12495" PostTypeId="1" CreationDate="2019-10-04T15:41:34.870" Score="17" ViewCount="797" Body="&lt;p&gt;I kept one floppy from my Commodore 128 (which I used mostly in C64 mode), labelled ‘Oxford C compiler’. It is a 5.25″ floppy. Don't ask me why I kept just this one; probably because I thought I wanted not to keep a game but something ‘serious’. I think it even doesn't work anymore (nor I can play it back since I don't own a Commodore anymore).&lt;/p&gt;&#xA;&lt;p&gt;However, I cannot remember I ever used C, and most of all, I cannot find any references of an Oxford C compiler. The only reference I find is an Oxford Pascal compiler (like &lt;a href=&quot;https://www.lyonlabs.org/commodore/onrequest/collections.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Was there ever an Oxford C compiler, or was it for a different computer somehow, or maybe I labelled it wrongly (and it should be Oxford Pascal); note the label is handwritten, so it's not an official disk.&lt;/p&gt;&#xA;&lt;p&gt;I'm just a bit curious.&lt;/p&gt;&#xA;" OwnerUserId="7037" LastEditorUserId="15334" LastEditDate="2021-01-22T13:40:56.807" LastActivityDate="2021-01-22T13:40:56.807" Title="Oxford C compiler for Commodore 64" Tags="&lt;commodore-64&gt;&lt;c&gt;&lt;compilers&gt;&lt;identify-this-software&gt;" AnswerCount="0" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="12496" PostTypeId="1" CreationDate="2019-10-04T17:38:38.087" Score="6" ViewCount="2462" Body="&lt;p&gt;Inspired by a &lt;a href=&quot;https://www.youtube.com/watch?v=H62hZJVqs2o&quot; rel=&quot;noreferrer&quot;&gt;YouTube video&lt;/a&gt; I saw recently that claims a very high uptime for the computers on the Voyager probes, I was curious -- what computer currently has the longest continuous runtime?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the purposes of this question, let's define &quot;computer&quot; as a stored program digital electronic computer.&lt;/p&gt;&#xA;" OwnerUserId="15351" LastActivityDate="2019-10-08T16:11:04.017" Title="What computer has the longest uptime?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="15" FavoriteCount="1" ClosedDate="2019-10-05T10:12:28.763" ContentLicense="CC BY-SA 4.0" />
  <row Id="12497" PostTypeId="2" ParentId="12496" CreationDate="2019-10-04T18:46:56.960" Score="11" Body="&lt;p&gt;The question is tricky in a fundamental way.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] very high uptime [...] longest continuous runtime&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;One part&lt;/strong&gt; lies in the definition of these, partly contradicting, terms as well in what the computer is. Uptime is a term used for high level operating systems - such as a Unix system - but the Voyager systems are embedded computers running their application on bare metal. So the basic definition for uptime is already hard to tie to a core component.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Embedded systems are quite different from general purpose systems by being almost entirely interrupt-driven. One feature of embedded systems is that they routinely restart - restart being in fact the most important non-maskable interrupt. All to increase stability. So of course, some 'working since installed' time can be counted (*1), but it is rather meaningless in sense of computing value, as the systems aren't really running continuously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even by settling on some hypothetical overall working time, the result is still a rather meaningless value. After all, any such number would only be useful to compare &lt;em&gt;comparable&lt;/em&gt; systems - and the Voyager computers are in no way comparable to any non-embedded systems in operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The other part&lt;/strong&gt; is within the meaning of &quot;uptime&quot; itself. It can be given for various components with different meaning. It could define how long a system has been continuously powered. Or how long an OS has been running unstopped on a machine, or how long an application has run unstopped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think for example about an x86 machine running Linux running some large scale application like a database server - or better, a MUD. To a hardware person, the power up time is all that counts, while players would only look at the duration their game world persists. Fun part: neither cares about the OS-uptime. In fact, not even the admin does, as his job is to provide a running MUD, not just hardware or an OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The single case that the OS-uptime would matter is only true in a situation where the OS itself is the service provided - to many independent users. Not often nowadays, where everyone got has their own machine using services on remote servers - making one of our most favoured benchmark values rather useless to real life :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; &lt;em&gt;The question sounds cool, but doesn't work out in this case.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, if we accept all of this and just settle for some 'working since installed' time, the best candidates might well be some traffic light systems of the early 1970s. :)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, and then it can't, as probe systems are usually don't work full-time, but go into sleep mode as often as possible to save on power.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-10-08T16:11:04.017" LastActivityDate="2019-10-08T16:11:04.017" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12498" PostTypeId="1" AcceptedAnswerId="12499" CreationDate="2019-10-05T02:02:29.117" Score="2" ViewCount="354" Body="&lt;p&gt;Why do some IBM PS/2's have a red switch, while others have a white switch?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1QcxBm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1QcxBm.jpg&quot; alt=&quot;IBM PS/2s&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the red or white power switch on the power supply signify something about the model number, CPU, or options that the computer shipped with?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastActivityDate="2019-10-05T04:11:30.820" Title="Power switch color on IBM PS/2 red vs white?" Tags="&lt;ibm-pc&gt;&lt;ibm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12499" PostTypeId="2" ParentId="12498" CreationDate="2019-10-05T04:11:30.820" Score="4" Body="&lt;p&gt;I don't think the color of the power switch signifies anything except the age of that model.  Originally the power switches were red, and at some point they changed to white.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, at some point the floppy drive eject button changed from large to small.  It's just another minor styling change that was applied as time passed by.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2019-10-05T04:11:30.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12500" PostTypeId="2" ParentId="12450" CreationDate="2019-10-05T16:13:18.437" Score="5" Body="&lt;p&gt;The most common usage for an expansion bus extender was to simply eliminate the wear-and-tear on the computer's expansion connector from frequently swapping cartridges in and out. Instead, the expander offered a more &quot;sacrificial&quot; connector for this purpose, and could more easily be replaced if the connectors wore out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most common case I know of for sharing the expansion slot was the addition of RS-232 cartridges for communication with higher speed modems. User port RS-232 was notoriously slow before software workarounds for that were eventually found. So, many users opted for a 6551 UART (ACIA) based solution that connected to the expansion port and could be used with the standard serial connectors on higher speed external modems (usually 2400 bps and up). IF the user wanted to combine this UART expansion cartridge with something like a Fast Loader cartridge or a RAM expansion cartridge, they could co-exist without conflicts. The UART cartridges usually only needed either /IO1 or /IO2 for data transfer, and the IRQ line for synchronization. These lines were not needed for ROM cartridges and for most RAM expanders, thus allowing them to coexist with the UART cart.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-10-29T16:04:49.483" LastActivityDate="2019-10-29T16:04:49.483" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12501" PostTypeId="1" AcceptedAnswerId="13607" CreationDate="2019-10-05T21:31:42.310" Score="11" ViewCount="539" Body="&lt;p&gt;I just spent an enjoyable day at the local ham fest with my father - digging through boxes of other peoples junk.  I'm a sucker for weird electronics, especially when it's in the free pile, and so I am now the proud owner of two Parallel to Serial interface boards and I'm left wondering what they originally came out of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The boards are populated with some intriguing chips (which is why I nabbed them); assuming my quick googling is correct - an EF6809P (an 8-bit MC6809 CPU), an EF6850P ACIA, three EF6821P PIAs, and an AMD AM9128-20PC static RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So obviously the chip complement seems to support the board label as some kind of a parallel to serial interface, but to what?  Below are some snapshots to hopefully help identify the board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First a view of the component side of the board (note the 50 pin connector J4)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/sWREs.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sWREs.jpg&quot; alt=&quot;component side&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, the assembly number and board description (sorry for the lack of definition here, the camera simply wouldn't pick up the silver grey lettering)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ScUR2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ScUR2.jpg&quot; alt=&quot;board description and assembly number&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU, ACIA, RAM, one PIA an an &lt;s&gt;unidentified chip (26A1063/A)&lt;/s&gt; AM2716DC EPROM.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/XMeNY.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XMeNY.jpg&quot; alt=&quot;chips&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, the edge of the board (probably 2 RS-232? and 1 Parallel?)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ZITxc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZITxc.jpg&quot; alt=&quot;connectors&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, anyone having any brain-waves?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="7208" LastEditDate="2019-10-14T18:09:18.973" LastActivityDate="2020-02-07T07:56:45.903" Title="Can anyone identify this Parallel to Serial Interface Board?" Tags="&lt;6809&gt;&lt;identify-this-card&gt;" AnswerCount="1" CommentCount="18" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12502" PostTypeId="2" ParentId="30" CreationDate="2019-10-06T00:54:44.617" Score="1" Body="&lt;p&gt;Take a look at this page, especially the wav2cas en cas2wav programs.&#xA;I think this is what you need.&#xA;&lt;a href=&quot;http://home.planet.nl/~ernest/atarixle.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://home.planet.nl/~ernest/atarixle.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15354" LastActivityDate="2019-10-06T00:54:44.617" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12503" PostTypeId="2" ParentId="12491" CreationDate="2019-10-06T01:11:24.890" Score="1" Body="&lt;p&gt;In the absence of any technical manual:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20120810012024/http://home.student.uu.se/jowi4905/svi/#SWC&quot; rel=&quot;nofollow noreferrer&quot;&gt;SviWav2Cas&lt;/a&gt; comes with source to decode sampled SVI3x8 tapes. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://openmsx.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;openMSX&lt;/a&gt; can emulate the SVI machines and creates WAV files from &lt;code&gt;SAVE&lt;/code&gt;/&lt;code&gt;BSAVE&lt;/code&gt; that SviWav2Cas seems to understand.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Maybe save known data from openMSX in SVI mode (say a 1024 zero bytes, or 1024 &amp;amp;hFF bytes) and analyze the WAV files it produces?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(the CAS files from SviWav2Cas don't appear to work with openMSX, though)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-10-06T01:11:24.890" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12504" PostTypeId="2" ParentId="4736" CreationDate="2019-10-06T17:10:14.540" Score="0" Body="&lt;p&gt;Adding a little information to the existing and accepted answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I concur with the answer that the STRETCH (the IBM 7030) was likely the first commercially-available computer to use ECC memory, in conjuction with the 7302 core storage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For evidence that STRETCH had ECC, I point you to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- &lt;a href=&quot;http://bitsavers.org/pdf/ibm/7030/ADescriptionOfStretch_Dec59.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this description from 1959&lt;/a&gt; -- see page 13, checking principles&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- &lt;a href=&quot;http://bitsavers.org/pdf/ibm/7030/22-6530-2_7030RefMan.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the 7030 reference manual&lt;/a&gt; -- see under 'core storage'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- &lt;a href=&quot;http://www.computer-history.info/Page4.dir/pages/IBM.7030.Stretch.dir/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this memoir&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For evidence that STRETCH was 'first', I'm betting on the date alone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since IBM sold at least half-a-dozen, I claim the &quot;commercially available&quot; part of the question is satisfied, even though the system was immediately withdrawn as not financially viable.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-10-06T18:53:08.727" LastActivityDate="2019-10-06T18:53:08.727" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12505" PostTypeId="1" AcceptedAnswerId="12506" CreationDate="2019-10-06T17:34:06.743" Score="2" ViewCount="182" Body="&lt;p&gt;My SE was working fine until I took it apart to clean it, and after reassembly the tube won't turn on, what could cause this? &lt;a href=&quot;https://files.catbox.moe/i6o1x1.mp4&quot; rel=&quot;nofollow noreferrer&quot;&gt;enter link description here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14897" LastActivityDate="2019-10-06T20:58:19.720" Title="Mac SE tube won't come on?" Tags="&lt;apple-macintosh&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12506" PostTypeId="2" ParentId="12505" CreationDate="2019-10-06T20:51:34.133" Score="4" Body="&lt;p&gt;Without any other information, my first likely response has to be for you to verify the reassembly. Since I don't know what you actually took apart/disconnected, any errors made putting it back the way it started need to be eliminated first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I assume that you did a minimal disassembly of the internals, or have verified everything is back in its proper place (and connected properly and with proper polarity, etc.), then the next thing to check should be the most common causes of a blank screen on compact Macs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my experience, the most common cause of this symptom for a previously working machine is a cracked solder joint on the analog board. One of the &quot;features&quot; of these machines was they have good convective cooling because heat generated at the bottom of the machine is allowed to rise and escape through the top, like the cute little chimney that is the original Mac. This subjects the analog board on the left side of the machine to thermal gradients and after so many cycles the solder joints tend to crack from the extra strain, and this can disrupt the video signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've fixed several machines by going over the solder side of the analog board with a magnifying glass to identify any suspect looking joints and reflowing them. You can easily do this with just the case removed and moving the white mylar (or cardboard) sheet that covers the solder side out of your way.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-10-06T20:58:19.720" LastActivityDate="2019-10-06T20:58:19.720" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12507" PostTypeId="1" AcceptedAnswerId="12508" CreationDate="2019-10-07T10:01:58.323" Score="10" ViewCount="729" Body="&lt;p&gt;I own a fairly early Amiga 500 with Kickstart 1.2 ROMs, Commodore Logo key and the OCS Agnus 8371. Is this system completely compatible with Workbench 1.3? Or does WB 1.3 require Kickstart 1.3 ROMs? What kind of problems, if any, can I expect when running WB 1.3 on it?&lt;/p&gt;&#xA;" OwnerUserId="15358" LastEditorUserId="15358" LastEditDate="2019-10-07T10:53:38.863" LastActivityDate="2019-10-07T14:25:30.413" Title="Any Issues with running Workbench 1.3 on a Kickstart 1.2 Amiga 500?" Tags="&lt;amiga&gt;&lt;amiga-kickstart&gt;&lt;amiga-500&gt;&lt;amiga-workbench-1.3&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12508" PostTypeId="2" ParentId="12507" CreationDate="2019-10-07T13:10:48.837" Score="9" Body="&lt;p&gt;No, you can and, more importantly, &lt;em&gt;it is fully supported&lt;/em&gt; to run Workbench 1.3 on a Kickstart 1.2 machine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was rather common back at that time, because Workbench 1.3 brought some nice new features (like the RAD: drive, better printer drivers), and at least in Europe the first batches of Amiga 500 and Amiga 2000 arrived still with Kickstart 1.2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On almost the same subject you can see question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1360/what-exactly-are-the-differences-between-kickstart-1-2-and-1-3?rq=1&quot;&gt;What exactly are the differences between Kickstart 1.2 and 1.3?&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="4147" LastEditDate="2019-10-07T14:25:30.413" LastActivityDate="2019-10-07T14:25:30.413" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12509" PostTypeId="1" CreationDate="2019-10-08T03:07:50.520" Score="4" ViewCount="519" Body="&lt;p&gt;The Neo Geo had a remarkable capacity to scale sprites, as we can see in fighting games, but it does not have any racing, flight or any game that simulated a non ray casting pseudo 3D to my knowledge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have listed a number of Sega games running on different hardware including Power Drift, After Burner and Galaxy Force. If Sega wanted, to what extent can they support these graphical capabilities with a native Neo Geo? Could it pull something as good looking and with high fps as Galaxy Force?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sega Space Harrier: &lt;a href=&quot;https://www.system16.com/hardware.php?id=696&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.system16.com/hardware.php?id=696&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sega Out Run: &lt;a href=&quot;https://www.system16.com/hardware.php?id=697&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.system16.com/hardware.php?id=697&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sega Y board: &lt;a href=&quot;https://www.system16.com/hardware.php?id=699&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.system16.com/hardware.php?id=699&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sega X board: &lt;a href=&quot;https://www.system16.com/hardware.php?id=698&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.system16.com/hardware.php?id=698&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sega 32 board: &lt;a href=&quot;https://www.system16.com/hardware.php?id=709&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.system16.com/hardware.php?id=709&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sega Multi 32: &lt;a href=&quot;https://www.system16.com/hardware.php?id=710&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.system16.com/hardware.php?id=710&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15315" LastEditorUserId="15315" LastEditDate="2019-10-08T19:06:23.613" LastActivityDate="2019-10-09T10:52:09.763" Title="How well can a NEO GEO theoretically run Sega´s Super Scallers Games?" Tags="&lt;arcade&gt;&lt;game-consoles&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12510" PostTypeId="1" AcceptedAnswerId="12511" CreationDate="2019-10-08T04:57:46.027" Score="12" ViewCount="1618" Body="&lt;p&gt;It had long been my impression that while brackets &lt;code&gt;[&lt;/code&gt; and &lt;code&gt;]&lt;/code&gt; could&#xA;be displayed by the Apple II, the standard Apple II keyboard was not&#xA;capable of generating them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some time ago I noticed that on &lt;a href=&quot;https://www.nightfallcrew.com/30/09/2012/apple-ii-keyboard-for-spare-parts/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; there is a photo of&#xA;what appears to be a) a standard U.S. Apple II keyboard, and b) some&#xA;variant of it that has the &lt;kbd&gt;REPT&lt;/kbd&gt; key replaced with a&#xA;&lt;kbd&gt;^  ]&lt;/kbd&gt; key, i.e., &lt;code&gt;^&lt;/code&gt; and, when shifted, &lt;code&gt;]&lt;/code&gt;. (The lower&#xA;keyboard also has a &lt;kbd&gt;CAPS LOCK&lt;/kbd&gt; key; I am suspecting that it&#xA;may be either a modified Apple keyboard or a third-party keyboard.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.nightfallcrew.com/wp-content/gallery/apple-ii-keyboard-for-spare-parts/IMG_2486.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/itEYi.jpg&quot; alt=&quot;Nightfall Crew&amp;#39;s Apple II keyboards&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More recently, I read on apple2history.org's page &lt;a href=&quot;https://apple2history.org/history/ah03/#PA1&quot; rel=&quot;nofollow noreferrer&quot;&gt;The&#xA;Apple II&lt;/a&gt; that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;An unmarked special character was the right square bracket, “]”,&#xA;  accessed by pressing SHIFT-M.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is in addition to the keys with marked &quot;special&quot; characters,&#xA;&lt;kbd&gt;N  ^&lt;/kbd&gt; and &lt;kbd&gt;P  @&lt;/kbd&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the second keyboard in the picture above includes all of&#xA;these, but in different positions; N and M have&#xA;no markings for a shifted symbol (perhaps because they are now needed&#xA;for lower and upper case versions of &lt;code&gt;N&lt;/code&gt; and &lt;code&gt;P&lt;/code&gt;?) and the symbols are&#xA;now on &lt;kbd&gt;0  @&lt;/kbd&gt; and &lt;kbd&gt;^  ]&lt;/kbd&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my questions about this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Can the &lt;code&gt;]&lt;/code&gt; character really be generated on all unmodified Apple&#xA;II (and Apple II+) keyboards with Shift-M?&lt;/li&gt;&#xA;&lt;li&gt;Are there any other &quot;hidden&quot; characters like this?&lt;/li&gt;&#xA;&lt;li&gt;For keyboards with the popular mod that connected &lt;kbd&gt;SHIFT&lt;/kbd&gt;&#xA;to joystick button 2, could you still type &lt;code&gt;^&lt;/code&gt;, &lt;code&gt;@&lt;/code&gt; and &lt;code&gt;]&lt;/code&gt;? How&#xA;did they handle this?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you have further information related to those characters or&#xA;additional characters on non-U.S. Apple keyboards, popular keyboard&#xA;modifications, or the second keyboard in the photograph above, I'd be&#xA;interested in hearing about that, too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, rather than a point-by-tiny-point breakdown of questions and&#xA;answers, I'd prefer to see a wholistic explanation designed to answer&#xA;all the small questions along the route it takes to putting everything&#xA;in proper persepective. That is, treat your answer as &quot;here is how you&#xA;understand Apple II keboards as a whole,&quot; rather than &quot;here are some&#xA;specific points that assume you already have a good understanding of&#xA;the general design of Apple II keyboards.&quot;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-10-09T04:04:52.717" LastActivityDate="2019-10-09T08:36:45.457" Title="On what Apple II and II+ keyboards can the ']' character be generated?" Tags="&lt;apple-ii&gt;&lt;keyboards&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12511" PostTypeId="2" ParentId="12510" CreationDate="2019-10-08T08:16:49.937" Score="13" Body="&lt;p&gt;(It is assumed that this question is about the II or II+, not any later or third party model)&lt;/p&gt;&#xA;&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Can the ] character really be generated on all unmodified Apple II (and Apple II+) keyboards with Shift-M?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Are there any other &amp;quot;hidden&amp;quot; characters like this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Straight away no, but the original II and very early II+ keyboards (with MM5740 encoder) could generate &lt;code&gt;_&lt;/code&gt;, &lt;code&gt;[&lt;/code&gt; and &lt;code&gt;\&lt;/code&gt; with 'phantom' key combinations by pressing 4 keys at a time (usually also producing unwanted characters as well).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For keyboards with the popular mod that connected SHIFT to joystick button 2, could you still type ^, @ and ]? How did they handle this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The II/II+ Shift-Key Modification does not modify the workings of the keyboard, but allows software to detect if the shift key is pressed (*1). It is complete up to each software how to handle this, including what way they offer to access them.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you have further information related to those characters or additional characters on non-U.S. Apple keyboards,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;All original Apple II/II+ keyboards follow that scheme (*2). There is no way around.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;popular keyboard modifications,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Popular is one of these bungee words ... The Shift-Key mod has been so popular that &lt;a href=&quot;https://archive.org/details/II_II-Shift-Key_Modification&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple had to recognize it&lt;/a&gt; - and make it an optional part of the IIe design.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;or the second keyboard in the photograph above,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Both shown keyboards are &lt;strong&gt;not&lt;/strong&gt; Apple II keyboards but third party developments.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'd be interested in hearing about that, too.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Apple II and keyboards are a way too broad issue for a single question. As an Apple II+ user I had already 4 different keyboards over the years (the last being fully programmable with a 65xx running faster than the Apple itself :)). The number of after market keyboards and even more clone keyboards is huge.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail:&lt;/h2&gt;&#xA;&lt;p&gt;(AKA: Everthing you never wanted to know about Apple Keyboards)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Insert: Apple II Keyboard history:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The very first would be the Datanetics (a NS &lt;a href=&quot;http://matthieu.benoit.free.fr/cross/data_sheets/National_Semiconductor_Data_Update6.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MM5740/AAE&lt;/a&gt; based ASR33 type parallel keyboard), recomended for the Apple 1 and bare bone Apple II. The encoder chip sits at the top, a PCB cable connector at the top left. It got three additional black keys, &lt;code&gt;B&lt;/code&gt; located right of right arrow and &lt;code&gt;C&lt;/code&gt; and &lt;code&gt;R&lt;/code&gt; located left and right of the space bar.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Followed by the first Apple version, used in early Apple II, basically a clone of the Datanetics. The MM5740 now sits at the top left. The parallel PCB contacts moved to the left and are no longer carved out, the DIL socked is added to the right. The PCB got a slot carved between keyboard and encoder - maybe prepared for break away for a planned separate mounting, like with the later II+.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next is the revised version, used in later II and early II+. Here the encoder is no longer 'break away' but integrated beside the Keyboard, the MM5740 sits all the way to the lower left and mounted horizontal. Somewhen around the transition to II+ the power lamp 'key' cap was replaced with a flat lamp cover. There are examples of both machines with either.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The third in series is the most common Apple II+ board with a separate encoder mounted on a single row pin header below the keyboard. It no longer uses the National Semi MM5740 but a General Instrument &lt;a href=&quot;https://archive.org/details/General_Instrument_AY-5-3600_Keyboard_Encoder/page/n1&quot; rel=&quot;nofollow noreferrer&quot;&gt;AY-5-3600&lt;/a&gt; or a compatible Standard Micro Systems &lt;a href=&quot;http://www.appleii-box.de/APPLE2/Keyboard/KR3600_XX.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;KR3600&lt;/a&gt;, mask programmed for use in the Apple.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Keyboard Decoding&lt;/h3&gt;&#xA;&lt;p&gt;Now, for the encoding: The NS MM5740/AAE is a standard variant for teletypes, producing only uppercase letters, numerals and control codes plus a few symbols. For some letters there are multiple positions, offering the ability to get different results when shifted. This effectively allows to produce all 7-bit ASCII characters - if intended. On MM5740 based Apple II keyboards this feature was used to add additional characters for all shifted digits, plus &lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;P&lt;/kbd&gt; for &lt;code&gt;@&lt;/code&gt;, &lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;N&lt;/kbd&gt; for &lt;code&gt;^&lt;/code&gt; and&lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;M&lt;/kbd&gt; for &lt;code&gt;]&lt;/code&gt; are used (*3). &lt;code&gt;@&lt;/code&gt; and &lt;code&gt;^&lt;/code&gt; were as well printed on the key caps. By basic design, all others are not wired and thus can't be used ... except:&lt;/p&gt;&#xA;&lt;p&gt;The MM5740 can be used in 2-key-rollover or n-key-rollover mode (*4). When used as 2-key, like in the Apple, pressing more than two keys may produce 'phantom characters' (*5) by connecting multiple rows and make the chip see keys pressed at positions that aren't wired up at all. The following combinations produce usable characters (*6):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;U&lt;/kbd&gt;+&lt;kbd&gt;I&lt;/kbd&gt;+&lt;kbd&gt;Y&lt;/kbd&gt; for &lt;code&gt;_&lt;/code&gt; (Underscore)&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;U&lt;/kbd&gt;+&lt;kbd&gt;I&lt;/kbd&gt;+&lt;kbd&gt;J&lt;/kbd&gt; for &lt;code&gt;[&lt;/code&gt; (Left Square Bracket)&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;U&lt;/kbd&gt;+&lt;kbd&gt;I&lt;/kbd&gt;+&lt;kbd&gt;H&lt;/kbd&gt; for &lt;code&gt;\&lt;/code&gt; (Backslash)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Wiring wise this works by having &lt;kbd&gt;U&lt;/kbd&gt; and &lt;kbd&gt;I&lt;/kbd&gt; connecting two scan columns making the third letter appear in both columns, while &lt;kbd&gt;SHIFT&lt;/kbd&gt; selects shifting for this. For the Apple II this means that &lt;kbd&gt;Y&lt;/kbd&gt;/&lt;kbd&gt;J&lt;/kbd&gt;/&lt;kbd&gt;H&lt;/kbd&gt; which all reside in the same column as &lt;kbd&gt;U&lt;/kbd&gt; now are mirrored into non populated places of the column of &lt;kbd&gt;I&lt;/kbd&gt;, namely &lt;kbd&gt;O&lt;/kbd&gt;, &lt;kbd&gt;K&lt;/kbd&gt; and &lt;kbd&gt;L&lt;/kbd&gt;, but this time the versions with &lt;code&gt;_&lt;/code&gt;, &lt;code&gt;[&lt;/code&gt; and &lt;code&gt;\&lt;/code&gt; assigned when shifted (*7).&lt;/p&gt;&#xA;&lt;p&gt;Of course pressing 3 characters at once isn't exactly how the keyboard is supposed to work, so hitting them will, more often than not, produce additional, intermediate characters as well. But that's what editing is for :))&lt;/p&gt;&#xA;&lt;p&gt;The later II+ keyboard, based on the AY-5-3600 is mask programmed for the Apple II and only emulate the 'official' keys (including &lt;code&gt;]&lt;/code&gt;). It moves all encoding variations into the custom ROM, making the key matrix simply filled up with all points used and no redundancy. So no more phantom keys anymore :(&lt;/p&gt;&#xA;&lt;h3&gt;Shift-Key Modification&lt;/h3&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Insert: Lower Case and Shift on the unmodified Apple 2&lt;/h3&gt;&#xA;&lt;p&gt;The Basic II/II+ did neither support entering nor displaying lower case characters (*8), so programs had to come up with ways to circumvent this. Apple Writer may be the most prominent example. They set the lead for many others.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;For output&lt;/strong&gt; simply all lower case was displayed as normal text (upper case) letters, while upper case was shown by inverting it. Of course, as soon as there was a 80 column card used, lower case were possible.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;For Input&lt;/strong&gt; the &lt;kbd&gt;ESC&lt;/kbd&gt; key was used. Pressing it once marked the next character to be entered as upper case. This of course disabled cursor movement, as this was based on escape sequences as well (*9). Thus pressing Escape twice let the next character entered work as escape sequence. It truly created a new style of typing and a learning curve (*10).&lt;/p&gt;&#xA;&lt;p&gt;To support editing the cursor could take 3 shapes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt; &lt;/code&gt; (White block) for lower case&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;+&lt;/code&gt; (Plus) for upper case&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^&lt;/code&gt; (Caret) for cursor movement.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This lead to the result that &lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;M&lt;/kbd&gt; sill produced a &lt;code&gt;]&lt;/code&gt; while &lt;kbd&gt;ESC&lt;/kbd&gt; &lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;M&lt;/kbd&gt; gave a &lt;code&gt;}&lt;/code&gt; - displayed as inverse &lt;code&gt;]&lt;/code&gt;. The corresponding opening brackets had to be entered as &lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;N&lt;/kbd&gt; and &lt;kbd&gt;ESC&lt;/kbd&gt; &lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;N&lt;/kbd&gt;, while &lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;N&lt;/kbd&gt; produced &lt;code&gt;~&lt;/code&gt; (Tilde), displayed as &lt;code&gt;^&lt;/code&gt; and &lt;kbd&gt;ESC&lt;/kbd&gt; &lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;N&lt;/kbd&gt; gave &lt;code&gt;^&lt;/code&gt;displayed as inverse &lt;code&gt;^&lt;/code&gt;. Similar for &lt;code&gt;@&lt;/code&gt;(&lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;P&lt;/kbd&gt;) to give Backtick and At. Complicated? Of course all of this could display complete different on a printer ... not to mention when used with a different language setup :)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The Shift-Key mod is done by pulling a wire from the shift signal pin the keyboard PCB to Push Button 2 (the third) of the game connector. Since usually done by wire clips it's non intrusive and easy removable. It did not change or modify the keyboard behaviour at all. Programs reading (direct from $C000 or by using RDKEY) will still get the same char as without the modification. Unless an application active detects the shift key, nothing is changed.&lt;/p&gt;&#xA;&lt;p&gt;Detection is fully done in application software and not supported by either ROM. Whenever a program detects a key press, it will get the key as usual (*11) and may now check for PB2 at $C063. If set, shift is pressed - at the time the read happenes, which may be way later than the keypress, depending on program load. Thus it may have been already released, or pressed for the next character to be typed. Fast typers (or users of slow software) thus may experience missing capitalization or capitalization of a previous character.&lt;/p&gt;&#xA;&lt;p&gt;The mod was so popular (and some software really depending on it), that Apple did include a broken bridge on the IIe motherboard, which, when closed, would connect the shift key(s) again to PB2.&lt;/p&gt;&#xA;&lt;p&gt;Adapting a program for the mod &lt;strong&gt;added a serious problem for shifted letters with Symbols&lt;/strong&gt; (P/N/M). Now a user rightfully expects pressing &lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;M&lt;/kbd&gt; to bring up an upper case &lt;code&gt;M&lt;/code&gt; - no more room to ESC/SHIFT/CTRL/whatsoever them as before.&lt;/p&gt;&#xA;&lt;p&gt;Solutions to bring back symbols were of course again program specific. In case of Apple Writer they abused its glossary feature. It allowed to assign for each typable character a phrase. These phrases would be inserted when typing &lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;G&lt;/kbd&gt; followed by that character. A premade file assigning special characters was provided:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;G&lt;/kbd&gt; &lt;kbd&gt;b&lt;/kbd&gt; -&amp;gt; &lt;code&gt;\&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;G&lt;/kbd&gt; &lt;kbd&gt;c&lt;/kbd&gt; -&amp;gt; &lt;code&gt;^&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;G&lt;/kbd&gt; &lt;kbd&gt;t&lt;/kbd&gt; -&amp;gt; &lt;code&gt;~&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;G&lt;/kbd&gt; &lt;kbd&gt;u&lt;/kbd&gt; -&amp;gt; &lt;code&gt;_&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;G&lt;/kbd&gt; &lt;kbd&gt;c&lt;/kbd&gt; -&amp;gt; &lt;code&gt;|&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;G&lt;/kbd&gt; &lt;kbd&gt;&amp;lt;&lt;/kbd&gt; -&amp;gt; &lt;code&gt;[&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;G&lt;/kbd&gt; &lt;kbd&gt;&amp;gt;&lt;/kbd&gt; -&amp;gt; &lt;code&gt;]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;G&lt;/kbd&gt; &lt;kbd&gt;(&lt;/kbd&gt; -&amp;gt; &lt;code&gt;{&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;G&lt;/kbd&gt; &lt;kbd&gt;)&lt;/kbd&gt; -&amp;gt; &lt;code&gt;}&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;(Yes, another steep learning curve)&lt;/p&gt;&#xA;&lt;p&gt;Of course, this was only Apple Writer. Other programs tried other ways.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Hopefully that is, as the shift key may have already been released when the program reads the button input, due to load and the buffering nature of the keyboard port.&lt;/p&gt;&#xA;&lt;p&gt;*2 - I may have to check my &lt;a href=&quot;http://www.macgeek.org/museum/apple2jplus/&quot; rel=&quot;nofollow noreferrer&quot;&gt;IIj+&lt;/a&gt;, but I'm pretty sure it doesn't have any different wiring .&lt;/p&gt;&#xA;&lt;p&gt;*3 - It remains a mystery why that feature hasn't been used for all letter keys with optional shifted symbols (like K/L/O).&lt;/p&gt;&#xA;&lt;p&gt;*4 - Key-rollover describes how many keys can be pressed simultaneous and still detected.&lt;/p&gt;&#xA;&lt;p&gt;*5 - It works somewhat like the 'illegal' opcodes on the 6502, as unplanned connections are done.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Other three key combinations will as well produce 'strange' characters, but AFAIR no useful at all.&lt;/p&gt;&#xA;&lt;p&gt;*7 - The MM5740 is meant to handle ASR33 type keyboards, thus the assignment is exactly like on a  real ASR33, wheere SHIFT-K/L/M produces &lt;code&gt;[&lt;/code&gt;/&lt;code&gt;\&lt;/code&gt;/&lt;code&gt;]&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;*8 - Another sign how little thought was given to now ubiquitous text editing back then.&lt;/p&gt;&#xA;&lt;p&gt;*9 - Same &lt;kbd&gt;I&lt;/kbd&gt;/&lt;kbd&gt;J&lt;/kbd&gt;/&lt;kbd&gt;K&lt;/kbd&gt;/&lt;kbd&gt;M&lt;/kbd&gt; as with the ROM&lt;/p&gt;&#xA;&lt;p&gt;*10 - With the Shift-Key modification installed and Apple writer II this behaviour could be ignored ... resulting in a quite annoying phase of unlearning hitting ESC for every upper case letter and in front of every escape sequence. Of course now special characters work again different as well :)&lt;/p&gt;&#xA;&lt;p&gt;*11 - &lt;kbd&gt;M&lt;/kbd&gt; encoded as $CD (&lt;code&gt;M&lt;/code&gt;), &lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;M&lt;/kbd&gt; as $DD (&lt;code&gt;]&lt;/code&gt;). All with high bit set, as that's the key pressed indicator.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-10-09T08:36:45.457" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12512" PostTypeId="1" AcceptedAnswerId="12513" CreationDate="2019-10-08T12:14:47.850" Score="8" ViewCount="345" Body="&lt;p&gt;In spring of 1978, Apple took the updated 6502 BASIC from Microsoft,&#xA;fixed some bugs and added some new commands, and released it as&#xA;&lt;a href=&quot;https://apple2history.org/history/ah16/#05&quot; rel=&quot;noreferrer&quot;&gt;Applesoft II&lt;/a&gt;. This was soon released as a ROM set (shipped&#xA;standard with the Apple II+) that replaced the Integer BASIC ROM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were various other non-BASIC-related features in the Integer&#xA;BASIC ROM, such as the miniassembler, that were lost when this change&#xA;was made. Excactly what features were lost?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-10-08T12:39:22.607" LastActivityDate="2019-10-08T12:39:22.607" Title="What Apple System Monitor/Integer BASIC ROM features were removed in the Applesoft II/Autostart ROM?" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12513" PostTypeId="2" ParentId="12512" CreationDate="2019-10-08T12:14:47.850" Score="9" Body="&lt;p&gt;Page references below refer to the &lt;a href=&quot;https://archive.org/details/Apple_II_Reference_Manual_1979_Apple/page/n80&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Apple II Reference Manual&lt;/em&gt;, 1979&#xA;edition&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As well as Integer BASIC itself, the following machine-language&#xA;features were lost:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The miniassembler (p.49), allowing one to type in 6502 opcodes that&#xA;it would assemble into memory. (The format was the same as the&#xA;monitor's &lt;code&gt;L&lt;/code&gt; &quot;list&quot; command printed.) While it didn't support&#xA;symbols or labels, it did let you give absolute addresses to branch&#xA;instructions for which it would calculate the proper relative&#xA;offsets. (The miniassembler was started from the monitor with&#xA;&lt;code&gt;F666G&lt;/code&gt;, and you could go back to the monitor with &lt;code&gt;$FF69G&lt;/code&gt;.)&lt;/li&gt;&#xA;&lt;li&gt;Monitor step &lt;code&gt;S&lt;/code&gt; and trace &lt;code&gt;T&lt;/code&gt; commands (p.51). &lt;code&gt;S&lt;/code&gt; would print a&#xA;disassembly of the next instruction, execute it, and then print the&#xA;registers. &lt;code&gt;T&lt;/code&gt; would execute instructions continuously, printing the&#xA;disassembly before and registers after each instruction, until it&#xA;hit a &lt;code&gt;BRK&lt;/code&gt; instruction or the user pressed RESET.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/SWEET16&quot; rel=&quot;noreferrer&quot;&gt;SWEET16&lt;/a&gt;, a byte-code interpreter for a simple 16-bit virtual&#xA;machine. This provides a more compact, albeit slower, way of&#xA;manipulating 16-bit data than using 6502 assembly language directly.&lt;/li&gt;&#xA;&lt;li&gt;Some simple machine-language floating point routines. These are&#xA;described in detail on pp. 110-117 of the Call-A.P.P.L.E.&#xA;publication &lt;a href=&quot;https://web.archive.org/web/20120311044310/www.applefritter.com/files/Call-APPLE%20Woz%20Pak%202%201979.pdf&quot; rel=&quot;noreferrer&quot;&gt;The WOZPAK II&lt;/a&gt;. They appear to be similar to,&#xA;possibly the same as, the ones published in the &lt;a href=&quot;https://archive.org/details/dr_dobbs_journal_vol_01/page/n208&quot; rel=&quot;noreferrer&quot;&gt;August 1976&#xA;issue&lt;/a&gt; of &lt;em&gt;Dr. Dobb's Journal&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Additionally, Integer BASIC was small enough that it left two 2K ROM&#xA;sockets free. One of these could be filled with a ROM sold by Apple&#xA;called &lt;a href=&quot;https://archive.org/details/programmers-aid-1&quot; rel=&quot;noreferrer&quot;&gt;&quot;Programmer's Aid #1&lt;/a&gt;, which would also have to be&#xA;removed if upgrading an Apple II; the Apple II+ lacked a free socket&#xA;for this ROM. As well some utilities specific to Integer BASIC (for&#xA;renumbering lines, appending programs to each other, and verifying&#xA;Integer BASIC programs on tape) it contained the following routines&#xA;useful for machine-language programming:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Verify saved machine-language code or data on tape.&lt;/li&gt;&#xA;&lt;li&gt;A relocator for machine-language code, to automatically translate&#xA;addresses to allow the code to run at a different location.&lt;/li&gt;&#xA;&lt;li&gt;A RAM test utility.&lt;/li&gt;&#xA;&lt;li&gt;A machine-language routine to generate musical tones.&lt;/li&gt;&#xA;&lt;li&gt;High-resoulution graphics routines (though probably not a huge loss&#xA;given that Applesoft has similar routines).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-10-08T12:38:25.237" LastActivityDate="2019-10-08T12:38:25.237" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12514" PostTypeId="2" ParentId="9584" CreationDate="2019-10-08T16:54:43.260" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;If you took all the electronics from a monitor like the IBM 5153 and substituted just the picture tube from a color TV, what would still be lacking in terms of display quality?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The answer to your question depends almost entirely on &lt;strong&gt;which&lt;/strong&gt; color TV CRT you wanted to use as a monitor. While any color computer monitor from the 1980s could serve as a color TV, just by adding the needed TV tuner circuitry, the converse of this statement is &lt;em&gt;not true&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The suitability of monitor tube as TV vs. TV tube as monitor comes down to the physics of light, the discernment limitations of the human eye, and the tradeoffs between brightness and sharpness that are inherit in CRT shadow mask specifications. Fundamentally, a TV is (usually) meant to be viewed from across a room while a computer monitor is meant to be viewed from a couple feet away. For the former TV, brightness is critical as the light travels farther before reaching the viewer. For the latter computer monitor sharpness is critical because small text and fine line graphics are best viewed that way, and because broken areas caused by inter-pixel spacing are visibly discontinuous at this close viewing range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With these considerations, it is obvious that certain specifications, like a higher dot pitch, may be perfectly suitable for a TV while being severely degrading to the quality of a computer monitor display. Specifically, a dot pitch of 0.28 or less is often cited as appropriate for computer monitor CRTs, while TVs can go significantly higher. So, that means you ought to choose a TV CRT that has &lt;em&gt;the right specs&lt;/em&gt; to use as a monitor. In the case of you care greatly about monitor quality, you might spend the extra money required to build the CRT to your desired specification when there were no mass-produced CRT's already meeting those specifications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A case in point would be Apple's early RGB displays. These were very high spec'd and expensive CRT's optimized for sharpness and a small dot pitch. The screens were often only 9 to 12 inches diagonal, which is usually too small for a consumer grade color TV. So Apple opted for the CRT that emphasized the specs that matter for close-up viewing, and their customers paid the extra cost to reap the benefit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; I've seen the IBM 5153 dot pitch claimed to be 0.31. This would make it so-so quality, and would explain why many PC users preferred working in MDA/Hercules modes, or springing for a Princeton color monitor.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-10-08T17:08:55.763" LastActivityDate="2019-10-08T17:08:55.763" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12516" PostTypeId="2" ParentId="12509" CreationDate="2019-10-08T20:18:47.713" Score="4" Body="&lt;p&gt;I'm basing the following on &lt;a href=&quot;https://www.chibiakumas.com/68000/neogeo.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;a secondary source&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Neo Geo offers up to 380 sprites total, a maximum of 96 per line, each sprite being up to 16x512 in size and optionally being scaled down. It doesn't scale upward, or rotate. Multiplying that out to look at bandwidth, 96*16 = 1536 source pixels per line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Per &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Y_Board&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia&lt;/a&gt; the Sega Y Board that powers Galaxy Force offers 397 to 400 sprites per line with a total fetch bandwidth of 3180 to 3200 source pixels, supporting larger sprites and rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, assuming it exploits its hardware, Galaxy Force would need to be scaled down for the Neo Geo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving upward along that page, I notice that the Outrun board has very similar graphical capabilities to the Neo Geo: 128 sprites/line and a total fetch bandwidth of 1600 source pixels. It also scales but doesn't rotate. So the Neo Geo hardware is close to parity with Outrun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: and, indeed, here’s something very close to Outrun, faulty not-quite-1/z perspective and all, for the Neo Geo:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/X6J9u9abRWI&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pseudo 3D Racing Game Engine Demo&lt;/a&gt; (YouTube)&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-10-08T20:23:55.057" LastActivityDate="2019-10-08T20:23:55.057" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12517" PostTypeId="1" AcceptedAnswerId="12518" CreationDate="2019-10-08T22:31:11.380" Score="12" ViewCount="653" Body="&lt;p&gt;I have a DEC VT220 from 1986, it has a composite output.  Works great in all its max-19200Kbps monochrome glory.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The composite output plug is a BNC, and it looks like BNC-to-RCA composite jack cables are available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a few YouTube videos of VT220 output from this connected a capture card.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So ... is the output close enough to black and white NTSC that I could connect it to a TV through something that converts NTSC to RF or a TV that has a composite input?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure the 132 column mode will be horribly unreadable on an analog TV, but just wondering if it's at all possible before I waste a few bucks on the cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the effective resolution of this is 640x200 but am having trouble finding this information from old documentation.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Update:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yep, it worked great.  Doesn't look half bad for the type of TV it is either, even though the image isn't centered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SH1vG.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SH1vG.jpg&quot; alt=&quot;VT220 connected to a cheap 5 inch B&amp;amp;W TV with composite input&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/cgKX0.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cgKX0.jpg&quot; alt=&quot;132 column mode closeup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="746" LastEditorUserId="746" LastEditDate="2020-04-02T20:29:52.173" LastActivityDate="2020-04-02T20:34:10.217" Title="Can I use the DEC VT220 composite output to connect it to a TV?" Tags="&lt;terminal&gt;&lt;dec&gt;&lt;television&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12518" PostTypeId="2" ParentId="12517" CreationDate="2019-10-09T00:53:57.163" Score="11" Body="&lt;p&gt;This information is based on information from the &lt;a href=&quot;https://archive.org/details/bitsavers_decterminaT220TechnicalManualNov84_11727585&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;DEC VT220&#xA;Technical Manual&lt;/em&gt;&lt;/a&gt;. I've not actually tried this out myself, but it &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12517/can-i-use-the-dec-vt220-composite-output-to-connect-it-to-a-tv/12518#comment47125_12518&quot;&gt;did work for the OP&lt;/a&gt; when he tried it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TLDR:&lt;/strong&gt; Yes, it's likely to work, and quite cheap to try using a&#xA;sub-$1 BNC to RCA adapter if you already have an RCA-RCA video cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Section 1.4 says that the &quot;BNC connector for composite video output to&#xA;an optional slave monitor&quot; uses &quot;&lt;a href=&quot;http://www.epanorama.net/documents/video/rs170.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;RS170&lt;/a&gt;-like&quot; output, which is the&#xA;NTSC black-and-white television standard. Thus, the signal timing and&#xA;format should be compatible, as far as that goes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are three issues that might cause problems, most likely some&#xA;degradation of the display.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;There's not general agreement on the voltage levels of RS-170;&#xA;signals range from &lt;a href=&quot;http://www.interfacebus.com/RS170_Video_Interface.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;0.7 V peak-to-peak&lt;/a&gt; or even less&#xA;up to the 1.4 V peak-to-peak of the original standard. Given that&#xA;your system is monochrome or will have only a couple of shades of&#xA;grey, whatever voltage range VT-200 uses is unlikely likely to be&#xA;an issue.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There's a warning in in that section of the manual: &quot;the use of dc&#xA;coupling is not in strict agreement with RS170 specifications.&quot; I&#xA;don't think that this would be an issue either since it's only the&#xA;AC signal that carries the information; input issues might also be&#xA;fixed with a simple coupling capacitor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As you pointed out, horizontal resolution may be an issue. As far&#xA;as horizontal lines are concerned this is purely an analogue&#xA;signal, so no harm can come from the TV not having enough&#xA;horizontal bandwidth to display well the full horizontal resolution&#xA;the monitor is using, but even 80-column text may be difficult to&#xA;read. Since this will vary for each television or monitor, the only&#xA;way to find out how good or bad it is is to test it with your&#xA;particular TV.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Rather than buying a whole cable there are BNC to RCA adapters are&#xA;available for less than a dollar from many sources. If you already own&#xA;an RCA-RCA video cable, sourcing one of these is likely to be cheaper.&#xA;(Note that your RCA-RCA cable must be a coaxial cable for &lt;em&gt;video&lt;/em&gt;;&#xA;using a non-coaxial audio RCA-RCA cable is likely to hugely degrade&#xA;the signal quality.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xaqf0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xaqf0.png&quot; width=&quot;150&quot; alt=&quot;BNC plug to RCA jack adapater&quot; title=&quot;BNC plug to RCA jack adapater&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-04-02T20:34:10.217" LastActivityDate="2020-04-02T20:34:10.217" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12519" PostTypeId="2" ParentId="9584" CreationDate="2019-10-09T04:00:56.070" Score="4" Body="&lt;p&gt;CGA, EGA and VGA each have scan rates broadly comparable with broadcast TV signals.  There should be no real difficulty in getting a reasonably good-quality TV picture tube to display a CGA signal, regardless of its physical construction (of which there were many, &lt;em&gt;many&lt;/em&gt; variants).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The major difference you would probably run into is in beam focus.  TVs were designed to display mostly photographic material, and broadcast stations learned to adapt overlaid text and graphics to the typical TV's capabilities.  This included Teletext, which adopted a 40-column text format and character generators optimised for TV characteristics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A computer display, by contrast, is much more likely to have a viewer interested in pixel-level detail, and the pixels of an 80-column terminal are 2-3 times narrower than the typical beam width of a TV.  I remember using a (non-CGA) RGB monitor of the time with a BBC Micro, and noting that individual horizontal pixels could not be resolved in the 80-column modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On some TV tubes, you may be able to adjust the beam focus to a narrower pattern and thus improve resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another difference is likely to be in the RGB phosphor colours.  These have different specs between NTSC and PAL, never mind computer monitors.  However, CGA is not exactly reputed for high colour definition, so it probably won't matter.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2019-10-09T05:21:35.467" LastActivityDate="2019-10-09T05:21:35.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12520" PostTypeId="2" ParentId="12509" CreationDate="2019-10-09T10:52:09.763" Score="2" Body="&lt;p&gt;The main issue is that the Neo Geo can only scale sprites down in size and only to a limited degree. It can't make them larger or rotate them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some games appear to make sprites larger on the Neo Geo, but actually they just store an enlarged version of the graphic in ROM and reduce it's size. That of course eats more ROM space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While in theory you could, given a large enough ROM, include pre-scaled and rotated graphics, in practice the two systems are not really comparable.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-10-09T10:52:09.763" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12521" PostTypeId="1" AcceptedAnswerId="12522" CreationDate="2019-10-09T19:39:39.063" Score="58" ViewCount="10804" Body="&lt;p&gt;On all Unix-like operating systems, &lt;code&gt;sudo&lt;/code&gt; is often provided as the standard package for executing commands as superuser (or an alternative user). When &lt;code&gt;sudo&lt;/code&gt; is invoked by the user for the first time, many systems print the following well-known &quot;Sudo Warning&quot;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;#1) Respect the privacy of others.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;#2) Think before you type.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;#3) With great power comes great responsibility.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Password:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;When was this warning message introduced to &lt;code&gt;sudo&lt;/code&gt;? Under what background? By whom?&lt;/p&gt;&#xA;" OwnerUserId="12128" LastEditorUserId="12128" LastEditDate="2019-10-10T16:58:58.057" LastActivityDate="2019-10-11T14:01:24.117" Title="When was the famous &quot;sudo warning&quot; introduced? Under what background? By whom?" Tags="&lt;history&gt;&lt;unix&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12522" PostTypeId="2" ParentId="12521" CreationDate="2019-10-09T20:02:28.530" Score="70" Body="&lt;p&gt;The message appears in &lt;code&gt;sudo&lt;/code&gt;’s revision control (in its current guise) &lt;a href=&quot;https://www.sudo.ws/repos/sudo/rev/c101e9572d7f&quot; rel=&quot;noreferrer&quot;&gt;in June 1993&lt;/a&gt;, in the University of Colorado version of &lt;code&gt;sudo&lt;/code&gt;, in a slightly shorter form:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;We trust you have received the usual lecture from the local Systems&#xA;Administrator. It usually boils down to these two things:&#xA;&#xA;        #1) Respect the privacy of others.&#xA;        #2) Think before you type.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This initial commit also introduced &lt;code&gt;sudo&lt;/code&gt;’s &lt;a href=&quot;https://xkcd.com/838/&quot; rel=&quot;noreferrer&quot;&gt;other famous message&lt;/a&gt;, “This incident will be reported.”&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The author of the commit is Todd C. Miller, the maintainer of CU &lt;code&gt;sudo&lt;/code&gt; (now plain &lt;code&gt;sudo&lt;/code&gt;, still maintained by Todd), but the source code predates the commit; and while the source mentions Jeff Nieusma, the messages &lt;a href=&quot;https://www.quora.com/Who-wrote-the-message-that-comes-up-when-you-use-sudo-for-the-first-time/answer/Brian-Bi&quot; rel=&quot;noreferrer&quot;&gt;predate his involvement too&lt;/a&gt; and their author is presumably either Bob Coggeshall or Evi Nemeth (see also “&lt;a href=&quot;https://www.sudo.ws/history.html&quot; rel=&quot;noreferrer&quot;&gt;A Brief History of Sudo&lt;/a&gt;”). The source history doesn’t suggest any particular background to the change. The message is typical of warning messages which were displayed when logging in to academic systems at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sudo&lt;/code&gt; was published in the &lt;em&gt;UNIX System Administration Handbook&lt;/em&gt;, written by  Evi Nemeth, Garth Snyder, and Scott Seebass; &lt;a href=&quot;https://archive.org/details/isbn_0139334416/page/468&quot; rel=&quot;noreferrer&quot;&gt;the version published in the first edition&lt;/a&gt; doesn’t include a warning in the program itself, but the authors mention that users who were granted &lt;code&gt;sudo&lt;/code&gt; access were sent a (lengthy) email reminding them of the responsibilities associated with that privilege.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The third item was &lt;a href=&quot;https://www.sudo.ws/repos/sudo/rev/ebd5a76ccd7e&quot; rel=&quot;noreferrer&quot;&gt;added in January 2004&lt;/a&gt;, with a more interesting commit message:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Add Stan Lee / Uncle Ben quote to the lecture from RedHat&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Said quote (which, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4147/tommy&quot;&gt;Tommy&lt;/a&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12521/when-was-the-famous-sudo-warning-introduced-under-what-background-by-whom#comment39312_12522&quot;&gt;points out&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/With_great_power_comes_great_responsibility&quot; rel=&quot;noreferrer&quot;&gt;wasn’t coined by Stan Lee&lt;/a&gt;) was added to Red Hat’s &lt;code&gt;sudo&lt;/code&gt; package as a patch on top of version 1.6.6, in June 2002.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Historical artifacts: &lt;a href=&quot;https://archive.org/download/usenet-net/net.sources.mbox.zip&quot; rel=&quot;noreferrer&quot;&gt;these &lt;code&gt;net.sources&lt;/code&gt; archives&lt;/a&gt; contain two versions of &lt;code&gt;sudo&lt;/code&gt;, posted by Cliff Spencer and Don Gworek in December 1985 (also available in the UTZOO tapes); &lt;a href=&quot;https://archive.org/download/utzoo-wiseman-usenet-archive/news061f1.tgz&quot; rel=&quot;noreferrer&quot;&gt;this &lt;code&gt;unix-pc.sources&lt;/code&gt; archive&lt;/a&gt; contains a different implementation by Lenny Tropiano.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="4931" LastEditDate="2019-10-11T14:01:24.117" LastActivityDate="2019-10-11T14:01:24.117" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12523" PostTypeId="1" AcceptedAnswerId="12525" CreationDate="2019-10-10T09:45:16.760" Score="13" ViewCount="2820" Body="&lt;p&gt;&lt;a href=&quot;https://www.theregister.co.uk/2019/10/09/ken_thompsons_old_unix_password_cracked/&quot; rel=&quot;noreferrer&quot;&gt;This article&lt;/a&gt; is about Ken Thompson's old Unix password hash being cracked.  One line in the article intrigues:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;Even an exhaustive search over all lower-case letters and digits took several days (back in 2014) and yielded no result,&quot; wrote Neukirchen, who wondered whether Thompson might &lt;strong&gt;somehow&lt;/strong&gt; have used &lt;strong&gt;uppercase or special characters&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(emphasis mine)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there some reason why Ken Thompson would not have been able to use uppercase or special characters?  The word &quot;somehow&quot; suggests that it wasn't easily done.&lt;/p&gt;&#xA;" OwnerUserId="7882" LastActivityDate="2019-10-10T19:05:38.623" Title="Could you use uppercase or special characters in a password in early Unix?" Tags="&lt;history&gt;&lt;unix&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12524" PostTypeId="2" ParentId="12523" CreationDate="2019-10-10T09:52:28.667" Score="15" Body="&lt;p&gt;Yes, you could use uppercase and special characters in passwords in early Unix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No, there was no Unix-related reason Ken Thompson wouldn’t have been able to use uppercase or special characters. Many of the passwords found in 2014 used special characters; none used uppercase, which doesn’t say anything about the original password requirements, only about the search parameters for the hashing tool used in 2014. When attempting to crack passwords, you have to start somewhere; Leah Neukirchen got &lt;a href=&quot;https://inbox.vuxu.org/tuhs/87bluxpqy0.fsf@vuxu.org/&quot; rel=&quot;noreferrer&quot;&gt;interesting results&lt;/a&gt; with only lowercase characters, numbers, and a few special characters (at least ‘/’, ‘.’, ‘,’, ‘!’, ‘%’, and ‘;’). Adding uppercase characters would have significantly added to the time required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turns out Ken’s password &lt;a href=&quot;https://inbox.vuxu.org/tuhs/CACCFpdx_6oeyNkgH_5jgfxbxWbZ6VtOXQNKOsonHPF2=747ZOw@mail.gmail.com/&quot; rel=&quot;noreferrer&quot;&gt;did only use&lt;/a&gt; lowercase characters (and numbers and special characters), so Leah Neukirchen’s probably mis-remembered the search space used in 2014 — adding ‘-’ to the mix of characters would have found it.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-10-10T19:05:38.623" LastActivityDate="2019-10-10T19:05:38.623" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12525" PostTypeId="2" ParentId="12523" CreationDate="2019-10-10T17:38:37.170" Score="28" Body="&lt;p&gt;In later versions of Unix, Ken Thompson would most certainly have been able to use upper-case characters but it's unclear whether he would have wanted to.  It's not that Unix itself prevented it, but rather that there were still plenty of terminals at that time that supported only the 64-character ASCII character set, which were upper-case only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;7th Edition UNIX - Summary&quot; document found in the 7th edition programmer's manual (volume 2) listed the hardware requirements for v7 Unix and stated that &quot;full duplex 96- character ASCII terminals&quot; were &quot;strongly recommended&quot; (i.e., not &quot;required&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, in &quot;UNIX For Beginners - Second Edition&quot; (Kernighan, 1978) it's stated:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But note: UNIX is strongly oriented towards devices with lower case.&#xA;  If your terminal produces only upper case (e.g., model 33 Teletype,&#xA;  some video and portable terminals), life will be so difficult that you&#xA;  should look for another terminal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Unix was able to deal with such terminals by converting upper-case to lower-case, effectively turning that terminal into a lower-case-only device, so that Unix interpreted everything as lower-case, even if the user was seeing it in upper-case.  It was possible in these situations to tell Unix to treat certain characters as upper-case by using a special escape sequence (namely, a backslash), but it was a nuisance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the strong possibility that Ken Thompson might find himself logging on to a Unix system on, say, a Teletype Model 33, it would have made sense for him to avoid upper-case characters in his own password, simply to avoid the nuisance of using escape sequences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that in very early versions of Unix (e.g. 1st through 3rd editions) the console Teletype was always mapped to lower-case (i.e. it was not possible to type upper-case characters at the console), and given that Ken Thompson would have been one of the people likely to use the console typewriter, there would have been a technical obstacle preventing him from using upper-case characters in his password, at least in those early versions.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2019-10-10T17:38:37.170" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12526" PostTypeId="1" CreationDate="2019-10-10T23:51:00.527" Score="1" ViewCount="563" Body="&lt;p&gt;The stats are: &lt;a href=&quot;https://en.wikipedia.org/wiki/Cray-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Cray-1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory‎: ‎8.39 Megabytes (up to 1 048 576 words)&#xA;CPU‎: ‎64-bit processor @ 80 MHz&#xA;The 24-bit address arithmetic was performed in an add unit and a multiply unit. The scalar portion of the system consisted of an add unit, a logical unit, a population count, a leading zero count unit and a shift unit. The vector portion consisted of add, logical and shift units. The floating point functional units were shared between the scalar and vector portions, and these consisted of add, multiply and reciprocal approximation units.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system had limited parallelism. It could issue one instruction per clock cycle, for a theoretical performance of 80 MIPS, but with vector floating-point multiplication and addition occurring in parallel theoretical performance was 160[11] MFLOPS.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I am not sure how graphics would implemented, but I`d like sprites with arbitrary size and of arbitrary number, Amiga's Denise like &lt;a href=&quot;https://en.wikipedia.org/wiki/Original_Chip_Set#Denise&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Original_Chip_Set#Denise&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="15315" LastEditorUserId="7208" LastEditDate="2019-10-11T01:01:44.913" LastActivityDate="2019-10-17T15:53:12.763" Title="How good a Cray could be as a video game console?" Tags="&lt;game-consoles&gt;&lt;cray&gt;" AnswerCount="1" CommentCount="7" ClosedDate="2019-10-14T07:06:49.560" ContentLicense="CC BY-SA 4.0" />
  <row Id="12527" PostTypeId="2" ParentId="12526" CreationDate="2019-10-11T00:43:59.877" Score="10" Body="&lt;p&gt;The Cray you're describing there is nothing but a block of pure processing power. You're not describing any sort of input or output, so the question is very vague. You could put any sort of rendering front-end onto a generic computer like that:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Older 8-bit home micros could have bitmap modes, or tile modes with sprites, or some combination of these, making them a lot more console-like than computer-like.&lt;/li&gt;&#xA;&lt;li&gt;Bitplaned graphics like the Commodore Amiga series OCS chipset. Memory efficient, but requiring finesse to draw arbitrary graphics.&lt;/li&gt;&#xA;&lt;li&gt;Chunky graphics like 320x200 13h VGA. Accessible, easy.&lt;/li&gt;&#xA;&lt;li&gt;A fully-hardware accelerated graphics card capable of hardware transform and lighting etc. The processor lines up the shots and the graphics card takes them.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm going to assume by the way you're mentioning the memory size and computational throughput, you want to know more about the software rendering capability of a computer of that level of sophistication, which sounds to me a lot like how DOS games were rendered into VGA-style chunky output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take a typical early-nineties VGA card and attach it to our Cray. Something like the Trident TVGA9000C (&lt;a href=&quot;http://old.vgamuseum.info/zaatharens-collection/69-trident-microsystems-inc/1129-trident-tvga9000c.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://old.vgamuseum.info/zaatharens-collection/69-trident-microsystems-inc/1129-trident-tvga9000c.html&lt;/a&gt;). It's got a flat framebuffer, with no acceleration whatsoever. No block image transfers (blits), no hardware scrolling beyond a couple of coarse register tricks. It's just a rectangle of memory in the Cray's memory space linked to a 256-colour palette.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we can have a look at a couple of DOS games:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the minimum requirements for Quake in DOS. &lt;a href=&quot;https://gamesystemrequirements.com/game/quake&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://gamesystemrequirements.com/game/quake&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IBM PC and Compatible Computers&#xA;Pentium 75 MHz processor or better (absolutely must have a Math Co-Processor!)&#xA;VGA Compatible Display or better&#xA;DOS -- 8 MB RAM required&#xA;CD-ROM drive required&#xA;Hard Drive Space Needed: 80 MB&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That'll get you 75 fps 256-colour palettized 320x200 3D graphics with some lighting effects. That's all software rendered in DOS Quake.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the minimum requirements for Jazz Jackrabbit in DOS. &lt;a href=&quot;https://pcgamingwiki.com/wiki/Jazz_Jackrabbit&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pcgamingwiki.com/wiki/Jazz_Jackrabbit&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Operating system (OS)   5.0 &#xA;Processor (CPU) Intel 386 33 MHz    486&#xA;System memory (RAM) 4 MB    &#xA;Hard disk drive (HDD)   13 MB   &#xA;Video card (GPU)    VGA &#xA;Sound (audio device)        Gravis Ultrasound, Sound Blaster, Sound Blaster Pro, Sound Blaster 16, Pro Audio Spectrum 16&#xA;Controller      Gravis Gamepad or generic joystick&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Jazz Jackrabbit is a very console-like game with tiled backgrounds, sprites (let's say 64 16x16 sprites going around if there's a lot of bullets, explosions and enemies), software-mixed music. The game offers levels of detail settings, which I believe affects things like coloured sky, amount of explosion sprites, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jazz also has a 3D bonus stage section that resembles SNES Mode-7 graphics with overlaid sprites, with Jazz running around a flat but textured landscape in pseudo-3D collecting floating gems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that fast math is going to be a great help for these games!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's move up a level to the original Unreal: &lt;a href=&quot;https://wiki.beyondunreal.com/Legacy:Unreal&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://wiki.beyondunreal.com/Legacy:Unreal&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; Operating System  WIN 95/98/NT/Linux&#xA; CPU  Intel Pentium 166 MHz&#xA; Memory  16 MB RAM&#xA; Hard Disk Space  100 MB&#xA; CD ROM or CD/DVD ROM  4x&#xA; Audio System  Windows® compatible sound card&#xA; Video System  Video Card 1MB&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the Cray isn't going to cut it software rendering Unreal. It might be able to do a low resolution mode or something, but it won't be pleasant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here &lt;a href=&quot;https://www.alternatewars.com/BBOW/Computing/Computing_Power.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.alternatewars.com/BBOW/Computing/Computing_Power.htm&lt;/a&gt; the FLOPS of a Pentium 100 is given as &lt;strong&gt;Benchmarks: 0.09 GFLOPS&lt;/strong&gt; (i.e. 90 MFLOPS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You said:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The system had limited parallelism. It could issue one instruction per clock cycle, for a theoretical performance of 80 MIPS, but with vector floating-point multiplication and addition occurring in parallel theoretical performance was 160[11] MFLOPS.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, as a back-of-the-envelope, like-for-like comparison of the various attributes, as a computer, it resembles &lt;strong&gt;a 1994/5/6 DOS 6.22 machine&lt;/strong&gt;. I'd say you'd be playing &lt;em&gt;Jazz Jackrabbit&lt;/em&gt;, &lt;em&gt;Quake&lt;/em&gt;, &lt;em&gt;Need For Speed 1&amp;amp;2&lt;/em&gt;, &lt;em&gt;Theme Hospital&lt;/em&gt;, &lt;em&gt;Dungeon Keeper&lt;/em&gt;, &lt;em&gt;Sim City 2000&lt;/em&gt;, &lt;em&gt;Tomb Raider&lt;/em&gt;, &lt;em&gt;Little Big Adventure&lt;/em&gt;, &lt;em&gt;Abe's Oddysee&lt;/em&gt; and &lt;em&gt;Command &amp;amp; Conquer&lt;/em&gt; on your Cray - DOS machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, looking at that list of games, what console does it most closely resemble in visual output power for real-time gaming? &lt;strong&gt;A PlayStation 1&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But depending on how things work out in this fictional computer - I'd say it would be heavily fill-rate limited due to the &lt;em&gt;memory&lt;/em&gt; rather than the processing power. For either 2D or 3D, there's going to be lots of copying backwards and forwards of blocks of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For purely 2D output, it'd be juicier than a SNES I would say, since there are SNES emulators for DOS. Other 2D consoles it would be able to completely encompass: Spectrum, C64, Master System, NES, Amiga 500/1200/CD32, Mega Drive, PC-Engine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd say it would be &lt;strong&gt;within ±20% of what a Neo Geo's display hardware can do&lt;/strong&gt;, in terms of independent layers and sprites. &lt;a href=&quot;https://en.wikipedia.org/wiki/Neo_Geo_(system)&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Neo_Geo_(system)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a video of &lt;em&gt;Metal Slug&lt;/em&gt; on the Neo Geo AES: &lt;a href=&quot;https://www.youtube.com/watch?v=qsMWIbnKrqk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=qsMWIbnKrqk&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your entirely-software-based rendering system would have no restrictions on layer or sprite size since they'd just be (masked) rectangle copies. The limitation would simply be how much memory assignment power (i.e. the fill rate) was available. Rotating and scaling sprites in software would be a large cost - to be avoided by prescaling in advance when the game assets where made, or just-in-time scaling in memory before whatever scene needed them began.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Bear in mind that the Neo Geo uses cartridges to contain all the source graphics. Would your hypothetical Cray-console have that?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit - Addressing alephzero's comment:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;All this is probably an overestimate of the Cray performance for this type of application, since memory was word (64-bit) addressable only, there were no 64-bit integer machine code instructions, and there was no &quot;quick&quot; way to do anything with 8 or 16 bit data. The maximum performance (in reality 132Mflops not 160, because of vector start up overheads) was only possible with 64-bit floating point operations on vectors that were a multiple of 64 elements long, which is pretty irrelevant for a video game. &quot;Scalar&quot; performance was typically about 5 Mflops, not 132&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You're right alephzero, insofar as the values 80-160 MFLOPS are at maximum, fully-populated vector performance, and that outside this ideal, the scalar performance would be low. However for many kinds of 2D games under DOS the amount of decision-based, highly-branching computation is pretty low. Assuming again that the asker is interested in shmups, fighting games and other Neo-Geo-like titles with large bgs and sprites, there's going to be a lot of predictable, repeated, direct rectangular copying going on. Since the Cray-1 has a &quot;memory-memory&quot; (see Wikipedia) architecture, the vector instructions will be ideal for block memory reads, masks and copies!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vector operations are not necessarily floating point: they can be scalar. The following operations can be performed by the &lt;em&gt;scalar logical units&lt;/em&gt; with their contents populated, advanced and written to memory by the vector system. (See 2240004  3-11    C in the Cray-1 Hardware Reference Manual &lt;a href=&quot;http://ed-thelen.org/comp-hist/CRAY-1-HardRefMan/CRAY-1-HRM.html#p3-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ed-thelen.org/comp-hist/CRAY-1-HardRefMan/CRAY-1-HRM.html#p3-3&lt;/a&gt;) Sure, this might be not particularly great match for the interface of the standard VGA card I described, but for the case of getting values around from one place to another, it would be somewhat helpful.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The contents of a V register are transferred to or from memory by specifying a first word address in memory, an increment for the memory address, and a length.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From the sounds of that, it might be possible to have these vector operations working on a byte granularity, satisfying the use of a VGA card in 13h with chunky pixels. (And if not, then you'll have to use word-aligned sprites perhaps?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unmasked direct rectangular blit:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DEST = SRC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The contents of the lines of graphics within SRC overwrite those in DEST.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what you could use for filling the screen, drawing rectangular layers where the underlying content is unimportant, or drawing rectangular objects. (Alternatively, you can use it as a scrappy way of drawing sprites if you don't care about weird corners disappearing.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Masked rectangular blit:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DEST = DEST &amp;amp; MASK &#xA;DEST = DEST | SRC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where MASK contains all 0s in pixels occupied by visible pixels of the sprite (that should be erased before the sprite is copied) and all 1s where the sprite is transparent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will let you draw graphics while keeping the background intact, for sprites, GUI elements, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, note the following:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A result may be received by a V register and re-entered as an operand to another vector computation in the same clock period. This mechanism allows for &quot;chaining&quot; two or more vector operations together. Chain operation allows the CRAY-1 to produce more than one result per clock period.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This means that the operation &lt;code&gt;DEST = (DEST &amp;amp; MASK) | SRC&lt;/code&gt; could be performed without the intermediate write to memory taking place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More complicated algorithms for texture mapped graphics might benefit from the vector floating point performance as the pixels of a textured/shaded triangle are drawn in a vectorisible fashion.&lt;/p&gt;&#xA;" OwnerUserId="15371" LastEditorUserId="15371" LastEditDate="2019-10-17T15:53:12.763" LastActivityDate="2019-10-17T15:53:12.763" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12528" PostTypeId="2" ParentId="8074" CreationDate="2019-10-11T09:19:51.427" Score="3" Body="&lt;p&gt;Another idea could be to dump some Kickstart ROM to a file, then either add a new &lt;code&gt;Resident&lt;/code&gt; module if there is space available in the image, or overwrite a non-essential one (&lt;code&gt;audio.device&lt;/code&gt; comes to mind, see below), with a custom module that calls &lt;code&gt;Debug()&lt;/code&gt; on Exec (You could use the module's Init function to do this). Then you burn your new ROM to an EPROM and use that as the Kickstart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point you will have a system with working multitasking, and RomWack or SAD should function normally (of course multitasking won't actually run while you're in SAD or RomWack).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Your custom resident module should be a &lt;code&gt;RTF_COLDSTART&lt;/code&gt; one, with a reasonable priority. Depending on the priority, you will get a system that is less and more initialised and similar to a standard environment.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You cannot use &lt;code&gt;RTF_AFTERDOS&lt;/code&gt; because those modules are initialised by &lt;code&gt;dos.library&lt;/code&gt; itself, and &lt;code&gt;dos.library&lt;/code&gt; is initialised not by Exec but by either the boot blook on floppy disks or by a hard disk firmware when it registers its MountLists for the partitions on disk.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You may indeed try to do what HD firmwares do, and &lt;code&gt;FindResident()&lt;/code&gt; and &lt;code&gt;InitResident()&lt;/code&gt; &lt;code&gt;dos.library&lt;/code&gt; itself, but I have no idea if the system at that point would be in a state consistent enough to do anything meaningful with DOS.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;SAD in Kickstart 3.0 is broken; you may want to base this on Kickstart 3.1 instead. Alternatively, if you want RomWack, Kickstart 2.04/2.1 should be a safe bet; in this case you can certainly overwrite &lt;code&gt;audio.device&lt;/code&gt; since it is guaranteed not to be used by the bootstrap process.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2019-10-11T09:19:51.427" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12529" PostTypeId="1" CreationDate="2019-10-11T17:11:44.253" Score="10" ViewCount="529" Body="&lt;p&gt;It's something I've always been wondering:&lt;/p&gt;&#xA;&lt;p&gt;Almost all of the hardware registers on the Gameboy are placed between &lt;code&gt;$ff00&lt;/code&gt; and &lt;code&gt;$ff7f&lt;/code&gt; (with plenty of gaps and empty space), the HRAM is located between &lt;code&gt;$ff80&lt;/code&gt; and &lt;code&gt;$fffe&lt;/code&gt;, and just the Interrupt Enable register is at &lt;code&gt;$ffff&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I would've expected the HRAM to span up to &lt;code&gt;$ffff&lt;/code&gt; and the Interrupt Enable register to be somewhere in the regular hardware registers area, for example perhaps next to the Interrupt Flag register at &lt;code&gt;$ff0f&lt;/code&gt; (and &lt;code&gt;$ff0e&lt;/code&gt; is unused, even).&lt;/p&gt;&#xA;&lt;p&gt;Thus, there's must've been some benefit or rationale for placing the Interrupt Enable register at &lt;code&gt;$ffff&lt;/code&gt;, and I'm wondering what it is.&lt;/p&gt;&#xA;" OwnerUserId="10686" LastEditorUserId="15334" LastEditDate="2021-02-07T17:13:05.450" LastActivityDate="2021-02-07T17:31:47.430" Title="Why is the Interrupt Enable Hardware Register in the HRAM area on the Gameboy?" Tags="&lt;memory-layout&gt;&lt;game-boy&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12531" PostTypeId="2" ParentId="12529" CreationDate="2019-10-13T04:26:03.473" Score="7" Body="&lt;p&gt;You'll need to understand something about &lt;a href=&quot;https://en.wikipedia.org/wiki/Address_decoder&quot; rel=&quot;noreferrer&quot;&gt;address decoding&lt;/a&gt; to&#xA;understand what's likely going on in the Game Boy. The &lt;a href=&quot;http://wilsonminesco.com/6502primer/addr_decoding.html&quot; rel=&quot;noreferrer&quot;&gt;Wilson Mines&#xA;address decoding page&lt;/a&gt; is well worth a read, but to summarize, you&#xA;use logic gates to examine various parts of the address on the address&#xA;bus and enable and disable different chips (RAM, ROM, I/O devices)&#xA;based on the address that appears there. Generally you wouldn't do&#xA;&quot;full decoding&quot; because examining all sixteen lines of the address bus&#xA;takes more logic (more &lt;a href=&quot;https://en.wikipedia.org/wiki/Logic_gate&quot; rel=&quot;noreferrer&quot;&gt;gates&lt;/a&gt;) than examining, say, just eight or&#xA;twelve of them.¹&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Game Boy is a &quot;system on a chip&quot;: with the exception of the RAM&#xA;and (most of) the ROM, &lt;em&gt;everything&lt;/em&gt; is placed on the same die as the&#xA;CPU, including the video circuitry, sound generator, and so on.&#xA;However, designs like this are not generally made &lt;em&gt;de novo&lt;/em&gt;, but&#xA;usually by combining existing discrete chips on to a single die. Thus,&#xA;their interfaces will tend to remain consistent with the interfaces&#xA;they had when they were in separate packages. So the decoding logic&#xA;for I/O access between the CPU component and the other components will&#xA;still be quite similar to what it was when these separate devices were&#xA;on separate chips, even though they're now all put side-by-side on the&#xA;same chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, one still accesses the peripheral devices just as if they were&#xA;on separate chips: access to the registers of the peripherals is done&#xA;by decoding specific addreses to set enable signals that cause those&#xA;peripherals to read the data (and sometimes a few low bits of the&#xA;address) bus. If you look through Game Boy I/O map (the &lt;a href=&quot;https://fms.komkon.org/GameBoy/Tech/Software.html&quot; rel=&quot;noreferrer&quot;&gt;I/O Ports&#xA;section of this page&lt;/a&gt; is probably the easiest overview to&#xA;read, but less accurate than &lt;a href=&quot;http://bgb.bircd.org/pandocs.htm&quot; rel=&quot;noreferrer&quot;&gt;the pandocs&lt;/a&gt;), you'll notice it&#xA;divides into fairly easily decodable pieces along these lines, with&#xA;unused &quot;holes&quot; in places you'd expect them when doing binary address&#xA;encoding:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$FF00 - $FF0F   Misc. I/O Buttons, serial interface, timers,&#xA;                interrupt source (hole from $FF08 to $FF0E)&#xA;$FF10 - $FF2F   Sound (hole from $FF27 to $FF2F)&#xA;$FF30 - $FF3F   Wave pattern RAM&#xA;$FF40 - $FF7F   Video (hole from $FF4C to $FF7F)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The interrupt logic is a bit special. 8080 CPUs require not only that&#xA;the interrupt line be asserted by a peripheral, as is typical in&#xA;microprocessor systems, but also that after this a specific value is&#xA;put on the data bus to determine which interrupt routine to call. The&#xA;GB's customized LR35902 CPU preserves the separate interrupt vectors&#xA;(from $0040 through $0060, as &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Interrupts&quot; rel=&quot;noreferrer&quot;&gt;documented here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were doing a system with traditional separated chips for the GB&#xA;hardware and a real 8080 CPU, you'd need some substantial additional&#xA;external logic to handle determining the correct interrupt vector for&#xA;a device and getting that on to the bus. My guess is that Nintendo,&#xA;since they were tweaking the CPU core anyway, probably decided the&#xA;easiest way to handle this was with further changes to the this part&#xA;of the CPU core, controlled by a register written via a memory&#xA;location. Since this would be accessed very differently from how&#xA;&quot;external&quot; devices (not part of the CPU core) would accessed, it's not&#xA;a great surprise to find this register in a completely different&#xA;memory area from the external devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is just speculation, of course; reverse-engineering the chip&#xA;would actually show whether or not the circuitry is built along these&#xA;lines.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹&lt;sub&gt;My personal experience is that I/O layouts and access can be&#xA;&lt;em&gt;very&lt;/em&gt; mysterious and confusing until you truly understand decoding&#xA;logic, down to the level of the individual AND, OR, etc. gates being&#xA;used. If this answer doesn't make any sense at all to you, you&#xA;probably need to better under address decoding. Unfortunately, this&#xA;isn't entirely trivial and a proper explanation of which is beyond the&#xA;scope of this answer. But &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/12370/7208&quot;&gt;this example&lt;/a&gt; may help.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-10-13T14:17:48.607" LastActivityDate="2019-10-13T14:17:48.607" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12532" PostTypeId="1" AcceptedAnswerId="12533" CreationDate="2019-10-13T06:59:39.790" Score="2" ViewCount="713" Body="&lt;p&gt;I´m planning to build a small computer system, based on the W65C02 from Western Design Center. This computer system should also have a VGA interface with a graphic and a text mode, defined with the following parameters:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;640x480 pixel&lt;/li&gt;&#xA;&lt;li&gt;25.175 MHz &lt;/li&gt;&#xA;&lt;li&gt;Color mode: 8x8 pixel blocks with one color each (so the whole image fit in 8K RAM) &lt;/li&gt;&#xA;&lt;li&gt;Text mode: ASCII character set&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But I´m struggling with the video memory. Please take a look at my schematic (without the text mode). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/G9U8h.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G9U8h.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don´t know how I should realize the CPU interface for the video RAM. One idea was to use double buffering, so the VGA controller uses another memory than the CPU or is it enough to only write to the memory when a blank phase is active. This would result in 639 pauses with 6,3 µs each and one pause with 1,4 ms per frame (the CPU should run with a clock of 1 MHz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next thing is: How do I implement the text mode. My first idea is to use the video data as an address for a character EEPROM (some small EEPROM containing the ASCII character set) and the pixel address bits 0 to 2 for the pixel of the character, stored in the EEPROM. But the EEPROM has an access time of 70 ns. Is this enough? Assuming that I use the textmode and the pixel address is 0, so the first pixel of the EEPROM will be read 70 ns later and then the pixel address is 1. So I have some delay. Is this assumption wrong? How was the text mode in some older PC systems realized?&lt;/p&gt;&#xA;" OwnerUserId="15386" LastActivityDate="2020-05-12T14:56:09.637" Title="VGA controller for my W65C02 computer" Tags="&lt;vga&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12533" PostTypeId="2" ParentId="12532" CreationDate="2019-10-13T08:18:56.047" Score="2" Body="&lt;p&gt;(Preface, this is RC.SE, not EE.SE, so less appropriate for such questions - so I wont go into schematic details)&lt;/p&gt;&#xA;&lt;h2&gt;a) Video RAM Access&lt;/h2&gt;&#xA;&lt;p&gt;As usual there are many ways. The most common are synchronizing CPU speed and video to&#xA;use 'the' other half. Or separate both RAMs and access only during pause. Or use a dedicated video chip already offering separation.&lt;/p&gt;&#xA;&lt;h3&gt;- Synchronized Memory&lt;/h3&gt;&#xA;&lt;p&gt;Eventually the most common in way used in 6502 systems - at least by number of sold units since every Apple II or Commodore does it. After all, a 1 MHz 6502 needs 2 MHz memory to function, but uses only every second 'slot' for access - leaving half the bandwith for some other device. In this case Video. To build it, a bunch of muxes are needed to access RAM from either (video, CPU) side. While it seams to offer simple access, it does have several disadvantages&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Grabbing memory from already limited address space&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Grabbing quite a lot for higher resolutions&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CPU clock must be in sync with video clock, resulting in rather strange CPU-Speeds (*1)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For a new system I'd rather not go that way. It got way to harsh limitations.&lt;/p&gt;&#xA;&lt;h3&gt;- Separate Memory&lt;/h3&gt;&#xA;&lt;p&gt;This needs about the same set of muxes, but now not handled directly by the CPU, but via a few latches. While adding a tiny overhead in writing to RAM, it simplifies not only design and removes most of the obstacles from synchronized memory but as well&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Speed of CPU can be set independent of Video and vice versa&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Frees up lots of rare CPU address space as only 3-4 memory locations are needed within CPU address space, leaving all the 'rest' for program and data&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Access latches can be organized independent of memory structure, offering a application centric view of like Rows and columns in separate registers&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The last one will considerable simplify low level programming, more than offseting the added instructions to set registers, as now conversion between row/column and memory address is done in hardware.&lt;/p&gt;&#xA;&lt;h3&gt;- Use Of a Dedicated Chip&lt;/h3&gt;&#xA;&lt;p&gt;Add a 9928 or 9950, have it do all the video mode, RAM and whatsoever handling and concentrate on video output circuitry.&lt;/p&gt;&#xA;&lt;h2&gt;b) Character ROM access time&lt;/h2&gt;&#xA;&lt;p&gt;Well, it depends on all the timing you want to have. You got to do the math yourself, figuring out how it fits - after all, that's the most basic task here. If you're doing something like classic home computers, it'll be more than enough. Then again, doing it at 100 Hz and high resolution you may want to rethink the whole concept&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Why a text mode at all?&lt;/h3&gt;&#xA;&lt;p&gt;Text modes are a classic way to save on RAM need for image storage. Quite handy back when each KiB counted, and large flat bitmaps were a high end luxury. But here you got high resolution bitmap, so why bothering with a text mode at all, complicating the design? Draw them, like next to any computer does nowadays. It'll be just 8 bytes instead of 1, done at quite low level, so not much slow down either. Especially when using separate memory (*2). Offering much freedom in character design and combination of graphics and text as well. There's a reason the very first Mac got bitmap (*3).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Think the odd speeds of various Commodores, making them run as well at different speeds depending on video standard, creating hurdles for timing dependant software. Or the variable clock length of an Apple II.&lt;/p&gt;&#xA;&lt;p&gt;*2 - With readable latches a simple INC ROW will do all necessary address handling.&lt;/p&gt;&#xA;&lt;p&gt;*3 - And as well why the planned 6809 got replaced by a 68k - having a considerable bitmap in 64 KiB address space sucks.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-10-13T08:28:13.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12534" PostTypeId="1" CreationDate="2019-10-13T23:29:14.917" Score="2" ViewCount="610" Body="&lt;p&gt;I'm trying to remember an old game I used to play as a kid.  It may have been a Commodore 64 game, not sure.  All I remember was you answered questions like for math or something like that and as you got questions correctly, it helped build your robot friend.  I remember it was a cartridge game that slipped in the side of a keyboard.  Any help would be greatly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="15390" LastEditorUserId="15334" LastEditDate="2021-05-14T17:40:19.900" LastActivityDate="2021-05-14T17:40:19.900" Title="Old computer game about a robot and questions" Tags="&lt;identify-this-game&gt;&lt;game-cartridge&gt;" AnswerCount="0" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="12535" PostTypeId="2" ParentId="12532" CreationDate="2019-10-14T06:02:33.253" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How do I implement the text mode.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The usual method is to send the video data Byte to the 8 higher address inputs of the character ROM to select the character pattern, and the low bits of the video line counter to the low ROM address inputs (eg. A0-3 for an 8x16 font) to select the pattern row. The character ROM then outputs 8 bits which are latched and serialized to pixels via a parallel to serial shift register. Since the ROM is only read once at the start of each character row, the access time just has to be less than 8 pixels.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But will 70nS be fast enough for VGA? At 25.175MHz and 640 pixels (80 characters per line) the pixel width is 39.7ns. Multiplied by 8 pixels per character gives you ~310ns for ROM access - plenty enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want individually colored characters then you also need color attributes stored in another area of video RAM (which could be a small separate RAM chip eg. 2kx8 for 80x25 characters). This is read at the same time as the character ROM, and its output latched while the row pixels are being sent. The upper and lower nibbles of the latched attribute Byte are fed into a 4 bit 2-1 mux switched by the pixel bit to color each pixel. The 4 bit output is then converted to analog to produce 16 foreground and 16 background colors.        &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-10-14T06:02:33.253" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12536" PostTypeId="1" AcceptedAnswerId="12538" CreationDate="2019-10-14T14:29:14.817" Score="41" ViewCount="5460" Body="&lt;p&gt;The 6502 has a group of opcodes which copy bit 5 from the opcode into one of the status flags. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I know it's not implemented this way, but it looks as though the bit fields are: 2 bits to select the flag out of &lt;code&gt;CIVD&lt;/code&gt;, one bit to clear or set, followed by 11000).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0001 1000   CLC    Clear carry&#xA;0011 1000   SEC    Set carry&#xA;0101 1000   CLI    Clear interrupt flag&#xA;0111 1000   SEI    Set interrupt flag&#xA;1001 1000   CLV    Clear overflow flag&#xA;1011 1000   TAY    Transfer A to Y&#xA;1101 1000   CLD    Clear decimal flag&#xA;1111 1000   SED    Set decimal flag&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The blatant odd one out here is &lt;code&gt;TAY&lt;/code&gt;, which takes the place of what looks like should be &lt;code&gt;SEV&lt;/code&gt;. &lt;code&gt;SEV&lt;/code&gt; does not exist, but intuitively is exactly as useful as &lt;code&gt;CLV&lt;/code&gt;, and very easy to implement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, the group of instructions &lt;code&gt;TAY&lt;/code&gt;, &lt;code&gt;TYA&lt;/code&gt;, &lt;code&gt;TAX&lt;/code&gt;, &lt;code&gt;TXA&lt;/code&gt; are not really laid out regularly enough that I see any motive for &quot;overriding&quot; what could've been &lt;code&gt;SEV&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What happened?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2020-02-10T13:47:47.727" LastActivityDate="2020-02-10T13:47:47.727" Title="What happened to the SEV instruction on the 6502?" Tags="&lt;6502&gt;&lt;instruction-set&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12537" PostTypeId="2" ParentId="12536" CreationDate="2019-10-14T14:46:22.427" Score="45" Body="&lt;p&gt;Setting and clearing carry, the decimal or interrupt flags is useful:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the carry flag because the 6502 offers only add and subtract &lt;em&gt;with carry&lt;/em&gt;;&lt;/li&gt;&#xA;&lt;li&gt;the decimal flag because it changes the mode of the processor; and&lt;/li&gt;&#xA;&lt;li&gt;the interrupt flag because it masks or unmasks the maskable interrupt.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Conversely, explicitly setting and clearing the other flags mostly isn't useful — that's unambiguously true of the negative, zero and break flags. So the more helpful question is: why allow overflow to be cleared, rather than ignoring it completely like negative et al?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer is that the 6502 has a specific input pin, SO, which can be used by external hardware to set the overflow flag. The intention is low-latency hardware interfacing — the programmer enters a spin loop like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;       CLV&#xA;.here: BVC .here&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The worst-case latency there (assuming no page jump) is three cycles — after two cycles the entire BVC has been read and the decision is made to branch, the overflow flag is set but just too late, an extra cycle is spent performing the branch and then two more rereading the BVC. That's substantially faster than even the fastest IRQ, which starts at 7 cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main example of usage I'm aware of is the C1540/1541 disk drive where overflow can be enabled to be set each time the flux transition shift register is full.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-10-15T21:23:32.563" LastActivityDate="2019-10-15T21:23:32.563" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12538" PostTypeId="2" ParentId="12536" CreationDate="2019-10-14T14:55:44.597" Score="26" Body="&lt;p&gt;&lt;strong&gt;There is simply no need for setting Overflow&lt;/strong&gt;. The same is as well true for Negative/Sign and Zero. No operation will be influenced by any of them, it's only used to signal an overflow during &lt;code&gt;ADC&lt;/code&gt; and &lt;code&gt;SBC&lt;/code&gt; (well, and &lt;code&gt;BIT&lt;/code&gt; for testing bit#6).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, &lt;strong&gt;the question is rather, why there is a &lt;code&gt;CLV&lt;/code&gt;&lt;/strong&gt; present, as there is no reason, within the boundaries of the instruction set, to set &lt;em&gt;or&lt;/em&gt; clear V at all (*1). Any of the three &lt;code&gt;V&lt;/code&gt; changing instructions will always set/reset it without looking at the former state (*2). Looking at the various transfer instruction it seams rather that &lt;code&gt;TAY&lt;/code&gt; ist out of order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The need to add &lt;code&gt;CLV&lt;/code&gt; becomes obvious&lt;/strong&gt; when considering that hardware can set V via the SO (Set Overflow) input pin. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The combination of SO input and the &lt;code&gt;BVC&lt;/code&gt; instruction creates the shortest possible timing to react for an external signal. Having &lt;code&gt;BVC&lt;/code&gt; loop on itself will reduce reaction time to a maximum of 3 cycle.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;L1  BVC  L1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Way shorter than any IO test or interrupt handling. In fact, the overhead is zero (compared to more than 13 clocks with an interrupt (*3)) and all response time is reduced to 'instruction jitter' i.e. the time needed before either condition can be detected and the instruction stream is redirected. With an interrupt the actual instruction always needs to finish, which may take anywhere between 1 and 6 cycles. (*4)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since this can only work as intended if V is cleared before entering the loop, software needs a way to do so. That's why &lt;code&gt;CLV&lt;/code&gt; got added.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;Why &lt;code&gt;V&lt;/code&gt; was choosen:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The reason why &lt;code&gt;V&lt;/code&gt; has been used is simply that of the non-modal flags (*5), &lt;code&gt;C&lt;/code&gt;, &lt;code&gt;N&lt;/code&gt; and &lt;code&gt;Z&lt;/code&gt; are changed with next to any data manipulating instruction, while &lt;code&gt;V&lt;/code&gt; is only influenced by &lt;code&gt;BIT&lt;/code&gt;, &lt;code&gt;ADC&lt;/code&gt; and &lt;code&gt;SBC&lt;/code&gt;. By using &lt;code&gt;V&lt;/code&gt;, it is still possible to write meaningful programs that check for an external events while doing other tasks, essentially allowing synchronous event detection with the least possible effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any generic IO-Test would require at least a &lt;code&gt;BIT&lt;/code&gt; instruction (if the bit to test is #6 or #7) and a follow up branch, resulting in at least 5/6 cycles and 4 bytes used. If not placed that nice, it'll needs loading and testing a value, which not only needs more cycles and program bytes, but as well destroys a register as well, serious reducing usefulness. With SO and &lt;code&gt;BVS&lt;/code&gt; detection can be inserted as often as needed by spending just two bytes and two cycles (in case of not set) each.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;Background: Other CPUs&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;While the V/SO combination is quite restricted and seams more like added on afterthought, having direct testable CPU pins was quite common. Basically two types were used:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Reflecting the state in one or more Flag bits or&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Offering fast checks, either&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;By moving them to flags by a single byte instruction, or&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;By offering a combined check and branch instruction for these pins.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In any variation the goal was to allow a few (usually 1..4) input pins to be checked with as least instructions and as fast as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition some had as well similar fast output pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some Examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8085&quot; rel=&quot;noreferrer&quot;&gt;Intel 8085&lt;/a&gt; - &lt;code&gt;RIM&lt;/code&gt;/&lt;code&gt;SIM&lt;/code&gt; instruction to read SID and control SOD&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Signetics_2650&quot; rel=&quot;noreferrer&quot;&gt;Valvo/Signetics 2650&lt;/a&gt; - Two bits (#6/7) in upper status register (PSU) with #6 controlling an output pin (Flag) and #7 reflecting the (Sense) input pin.&lt;/li&gt;&#xA;&lt;li&gt;Valvo/Signetics 2650 - As well as direkt I/O instructions (&lt;code&gt;WRTC&lt;/code&gt;/&lt;code&gt;WRTD&lt;/code&gt;;&lt;code&gt;REDC&lt;/code&gt;/&lt;code&gt;REDD&lt;/code&gt;) for two implied addressed ports (called &lt;em&gt;C&lt;/em&gt;ommand/&lt;em&gt;D&lt;/em&gt;ata).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Fairchild_F8&quot; rel=&quot;noreferrer&quot;&gt;Fairchild F-8&lt;/a&gt; - Had two 8 bit ports &lt;em&gt;on chip&lt;/em&gt; (*6), operated by special short &lt;code&gt;INS&lt;/code&gt;/&lt;code&gt;OUTS&lt;/code&gt; instructions.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/National_Semiconductor_SC/MP&quot; rel=&quot;noreferrer&quot;&gt;National SC/MP&lt;/a&gt; - Maxes the Flag-in-Status-Register concept with two input bits (Sense A/B) and 3 output (Flag 0/1/2)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/RCA_1802&quot; rel=&quot;noreferrer&quot;&gt;RCA/Intersil CDP1802&lt;/a&gt; - Offering a single output (Q) set/reset by &lt;code&gt;SEQ&lt;/code&gt;/&lt;code&gt;REQ&lt;/code&gt; and four inputs (EF1/2/3/4). The Inputs are not visible in any status register (the 1802 doesn't have one) but direct testable by a separate set of branch instructions (&lt;code&gt;B1&lt;/code&gt;..&lt;code&gt;B4&lt;/code&gt;/&lt;code&gt;BN1&lt;/code&gt;..&lt;code&gt;BN4&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/General_Instrument_CP1600&quot; rel=&quot;noreferrer&quot;&gt;General Instruments CP1600&lt;/a&gt; - Maxing out the testable input lines to 16 by having a special branch instruction (&lt;code&gt;BEXT&lt;/code&gt;- Branch on EXTernal condition) which outputs a 4 bit address on EBCA0..4 and reads the addressed bit via EBCI.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Likewise for &lt;code&gt;N&lt;/code&gt; and &lt;code&gt;Z&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Unlike the related Carry flag, which needs not only to be checked, but also cleared or set before doing an &lt;code&gt;ADC&lt;/code&gt; or &lt;code&gt;SBC&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - 7 for the interrupt itself plus 6 for &lt;code&gt;RTI&lt;/code&gt; -being an interrupt it as well preservation of registers will usually be needed, weras done via &lt;code&gt;BVC&lt;/code&gt; (as wait or inline) will already have all registers set as they need to be and no need to restore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Not 7, as an instruction only needs to finish when already started :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Modal flags are such that change CPU operation, like the Decimal or Interrupt Disable&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - No, despite its odd style, it's not a microcontroller&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2019-10-17T14:08:33.957" LastActivityDate="2019-10-17T14:08:33.957" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12539" PostTypeId="2" ParentId="12536" CreationDate="2019-10-15T02:27:39.550" Score="10" Body="&lt;p&gt;Here are a few further thoughts on the setting of flags and the &lt;code&gt;SO&lt;/code&gt;&#xA;(set overflow) pin mentioned in the other answers, in response to&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12536/what-happened-to-sev#comment39386_12536&quot;&gt;Joe's comment&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The fact that there's a direct pin that can set the overflow flag is&#xA;  definitely a bit of a &quot;i guess someone somewhere had a use case that&#xA;  needed it&quot;. The use of it in the 1540/1541(and I'd guess 1570/1571?)&#xA;  is really fascinating, I don't know if I ever heard of another&#xA;  real-world use of the pin.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I wouldn't be surprised if there were no specific use case at the time&#xA;and this were just another example of Chuck Peddle's great design&#xA;skills.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fast response to external signals was clearly a design goal of&#xA;the 6502. Note, for example, how unlike the 6800 it stacks only the&#xA;minimum number of registers when responding to an IRQ. (The 6809 later&#xA;copied this with its additional &quot;Fast IRQ.&quot;) And then there was the&#xA;BIT instruction, setting not one but two¹ flags directly from memory&#xA;(read: I/O ports), and various other instructions that directly&#xA;twiddled memory without needing to touch registers, also saving cycles&#xA;when doing I/O.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But one thing that Peddle needed was to be able to compete with the&#xA;6800's WAI instruction, which basically &quot;pre-executed&quot; the initial&#xA;part of the interrupt response (immediately stacking the registers and&#xA;loading the PC with the address in the IRQ vector) and waited for the&#xA;interrupt, allowing it to start executing the interrupt code with no&#xA;latency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know how expensive that would have been to implement (the 6502&#xA;was, if anything, even more focused on being cheap than fast), but&#xA;that technique also had a major issue: once the response was complete,&#xA;there was significant time until the next response could be generated&#xA;because the CPU would still have to go through the whole RTI/WAI or&#xA;RTI/INT sequence before the interrupt code could be executed again.&#xA;Peddle's solution avoided this by not using an interrupt at all but&#xA;instead a spin loop. This increased the latency in response to the&#xA;external signal by up to three cycles, but meant that when processing&#xA;of the signal was completed, one could be ready to respond to the next&#xA;instance of that signal &lt;em&gt;much&lt;/em&gt; faster than the 6800 could, increasing&#xA;the maximum signal frequency that the 6502 could handle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setting flags to branch based on the state of a chip pin was not a&#xA;technique original to Peddle; the &lt;a href=&quot;https://archive.org/details/bitsavers_rcacosmacR_3918911&quot; rel=&quot;nofollow noreferrer&quot;&gt;RCA COSMAC 1801&#xA;processor&lt;/a&gt;, released in early 1975 as the 6502 design was&#xA;being worked on, had &quot;four I/O flag inputs directly testable by branch&#xA;instructions.&quot; (You can see more about how this works on the&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/RCA_1802#Registers_and_I/O&quot; rel=&quot;nofollow noreferrer&quot;&gt;RCA 1802&lt;/a&gt;, which was basically just a single-chip version of the&#xA;two-package 1801.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹&lt;sub&gt;The N (negative) and V (overflow) flags are copied directly from&#xA;bits 7 and 6 of the memory location tested. Additionally, the Z (zero)&#xA;flag is also updated based on the AND of the A register and the memory&#xA;value; this may or may not be useful and/or a time saver depending on&#xA;what's currently in the A register at the time you do the test.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-10-16T15:48:15.997" LastActivityDate="2019-10-16T15:48:15.997" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12540" PostTypeId="2" ParentId="12052" CreationDate="2019-10-16T13:22:35.420" Score="19" Body="&lt;p&gt;I wrote C64-Forth way back in the early 80's (we sold it to Commodore but they disbanded their software products group shortly thereafter and it never made it out of the loading dock). Had some interesting users of it, including Lawrence Livermore Labs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Portions of it were in assembler. All the math was implemented by calling the C64's internal ROM math code, so it's fast. I did one unusual thing - I stuck with C64's normal file structure. This meant you didn't need Forth-formatted floppy disks - in Forth, you could read and write normal data files, and you could read/write C64-Forth data from Basic or assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should anyone come across a copy of it, I still have a manual for it. I'd consider scanning it in or photocopying it.  Gregg&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: Following advice below, I have scanned in the manual (to two PDF files) and uploaded them to: &lt;a href=&quot;https://archive.org/details/c64forthmainmanual&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/c64forthmainmanual&lt;/a&gt;. I will occasionally monitor this thread and would like to hear from anyone who actually runs it (I don't know if the version available at the site named below has copy-protection defeated. It may not be runable as is). If someone wishes to have a more extensive discussion of their experience with it, leave a message here, I'll create a temporary email address and post it here, and we can keep in touch.&lt;/p&gt;&#xA;" OwnerUserId="15399" LastEditorUserId="-1" LastEditDate="2019-11-11T21:47:46.973" LastActivityDate="2019-11-11T21:47:46.973" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12541" PostTypeId="1" CreationDate="2019-10-16T19:51:03.310" Score="12" ViewCount="309" Body="&lt;p&gt;I'm curious if anyone is aware of actual uses of Unix on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Heathkit_H11&quot; rel=&quot;noreferrer&quot;&gt;Heathkit H11&lt;/a&gt;? I don't see any technical reason a memory-expanded H11 couldn't run Unix, but can't find any examples of it doing so.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2019-10-16T19:58:57.347" LastActivityDate="2019-10-16T19:58:57.347" Title="Unix on the H11?" Tags="&lt;unix&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12542" PostTypeId="2" ParentId="2494" CreationDate="2019-10-17T08:20:14.100" Score="5" Body="&lt;p&gt;Purposely registered here to let know. Sadly can't comment due to the 50 reputation limit&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Traditionally, the solution provided by Aoresteen is the best. Unfortunately, &lt;a href=&quot;https://msfn.org/board/topic/180215-rloew-1952-2019-has-passed-away/&quot; rel=&quot;noreferrer&quot;&gt;rloew has passed away in September 2019&lt;/a&gt;. Rest in peace&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The full version of his patch is now available for free, &lt;a href=&quot;https://archive.org/details/PATCHMEM&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15407" LastEditorUserId="15407" LastEditDate="2019-10-17T08:25:26.863" LastActivityDate="2019-10-17T08:25:26.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12543" PostTypeId="2" ParentId="12052" CreationDate="2019-10-17T21:33:36.430" Score="10" Body="&lt;p&gt;I worked for a company called ibidinc in the 80s. We released an adventure game called THE ALPINE ENCOUNTER in 1985. It was written in Forth, so we were able to release simultaneously on the Apple II, Commodore 64, and IBM PC. There were plans for a sequel but they never came to fruition.&lt;/p&gt;&#xA;" OwnerUserId="15413" LastActivityDate="2019-10-17T21:33:36.430" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12544" PostTypeId="1" CreationDate="2019-10-18T01:30:39.227" Score="5" ViewCount="217" Body="&lt;p&gt;I like to play with old networks, uucp is really and advanced(is from the 1978) for that time.&#xA;I have setup a uucp server in a tru64 unix server.&#xA;On tru64 server&#xA;I have edit &lt;code&gt;/etc/inetd.conf&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;uucp    stream  tcp     nowait  root    /usr/sbin/uucpd         uucpd&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then I create the nuucp user for login from remote machines&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;useradd -d /var/spool/uucppublic -s /usr/lib/uucp/uucico&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The I have edit the Systems file&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;linux.my.site Any TCP,t - - in:--in: nuucp word: mypass&#xA;tru64-1.my.site Any TCP,t - - in:--in: nuucp word: mypass&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then edit the Permission file&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MACHINE=slack64.my.site REQUEST=yes READ=/var/spool/uucppublic WRITE=/var/spool/uucppublic  COMMANDS=rmail:uucp&#xA;LOGNAME=nuucp REQUEST=yes SENDFILES=yes READ=/var/spool/uucppublic WRITE=/var/spool/uucppublic&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And after restart inetd&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;kill `ps -e -o pid,comm |grep inetd|grep -v grep|head -1|awk '{print $1}'`&#xA;inetd&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have test from tru64 server the uucp..and works&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/usr/lib/uucp/uucico -r1 -x9 -stru64-1.my.site&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now the configuration on linux side&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have edit the file /etc/uucp/sys&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;system tru64-1.my.site&#xA;address tru64-1.my.site&#xA;time any&#xA;call-login *&#xA;call-password *&#xA;chat ogin: \L\n\c word: \P&#xA;port TCP&#xA;protocol t&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the file /etc/uucp/port&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;port            TCP&#xA;type            tcp&#xA;service         uucp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the file &#xA;/etc/uucp/call&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;tru64-1.my.site nuucp mypass&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And..nothing work.&#xA;I have tried to debug with uucico, but I cannot see the &quot;full procedure&quot; even if I enable the debug,uucico exit silent!&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;uucico -f --debug 9 -x9 -stru64-1.my.site&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;uulog said&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;uucp tru64-1.my.site (10/18-3:13:31,31103,0) Calling system tru64-1.my.site (port TCP)&#xA;uucp tru64-1.my.site (10/18-3:13:32,31103,0) ERROR: Line disconnected&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I think the error is in the chat script but not sure, probably bad configuration of uucp via tcp.&lt;/p&gt;&#xA;" OwnerUserId="12079" LastActivityDate="2019-12-09T10:52:06.493" Title="How to test a chat script with a uucp linux and uucp(server) unix?" Tags="&lt;unix&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12545" PostTypeId="2" ParentId="4536" CreationDate="2019-10-18T07:55:15.677" Score="3" Body="&lt;p&gt;I would recommend:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.theweb.dk/KickAssembler/Main.html#frontpage&quot; rel=&quot;nofollow noreferrer&quot;&gt;KickAssembler&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sublimetext.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sublime Text&lt;/a&gt; with the KickAssembler package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/projects/c64-debugger/&quot; rel=&quot;nofollow noreferrer&quot;&gt;C64Debugger&lt;/a&gt; for running and debugging the code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It takes a smallish bit of setup but it's excellent overall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Dc245.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Dc245.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2019-10-18T07:55:15.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12546" PostTypeId="1" AcceptedAnswerId="12548" CreationDate="2019-10-18T14:48:34.637" Score="9" ViewCount="462" Body="&lt;p&gt;I stumbled upon a divergence in the ASCII upper case/lower case handling when using assembler and linker of the &lt;code&gt;cc65&lt;/code&gt; suite separately (I used cc65 V2.15 on Win10).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a test I made the following assembler file &lt;code&gt;helloworld.s&lt;/code&gt; for the default target (C64):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;           ;code for a BASIC line containing SYS2061&#xA;           .byte $0B,$08,$e3,$07,$9e,$32,$30,$36,$31,$00,$00,$00&#xA;&#xA;           lda #&amp;lt;textout&#xA;           ldy #&amp;gt;textout&#xA;           jmp $AB1E&#xA;&#xA;textout:   .asciiz &quot;hello world&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I assemble and link the file with the command &lt;code&gt;cl65 -C c64-asm.cfg helloworld.s -o helloworld.prg&lt;/code&gt; I get a program that outputs &quot;hello world&quot; on the C64 - it appears with uppercase letters with the default charset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when I assemble to an object file first with &lt;code&gt;ca65 helloworld.s&lt;/code&gt; and then link the object file with &lt;code&gt;cl65 -C c64-asm.cfg helloworld.o -o helloworld.prg&lt;/code&gt;, I get a program that outputs the respective PETSCII characters when viewed with the default charset or, in lower case mode, &quot;HELLO WORLD&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why is there a difference between the two ways of building? Both &lt;code&gt;cl65&lt;/code&gt; and &lt;code&gt;ca65&lt;/code&gt; are from the &lt;code&gt;cc65&lt;/code&gt; toolchain.&#xA;Second, is there a way to annotate the source code or to instruct &lt;code&gt;ca65&lt;/code&gt; not to change the case of the ASCII text? &lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2021-04-18T19:51:20.503" Title="Different handling of ASCII interpretation between ca65 and cl65" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;cc65&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12547" PostTypeId="2" ParentId="4536" CreationDate="2019-10-18T15:16:15.947" Score="4" Body="&lt;p&gt;The absolutely minimalistic approach would be to just start the Commodore 64 emulator, the C64 then greets you with its starting message and a blinking cursor. Here, you can already start programming in BASIC. There are many tutorials out there for programming the C64 in BASIC, for example &lt;a href=&quot;https://twobithistory.org/2018/09/02/learning-basic.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you want to write more performant programs, you either need to learn 6502 Assembler or use C. Please note that with C you will be still a bit limited on what you can achieve, but if you already know C programming, it is probably a good compromise. For programming in C, look out for &lt;a href=&quot;https://www.cc65.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;cc65&lt;/a&gt;, which is a cross-development tool: you write and compile your code on the PC and then open the compiled program with the emulator.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="4663" LastEditDate="2019-10-18T19:59:05.293" LastActivityDate="2019-10-18T19:59:05.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12548" PostTypeId="2" ParentId="12546" CreationDate="2019-10-18T16:30:23.623" Score="12" Body="&lt;h2&gt;Simple reason&lt;/h2&gt;&#xA;&lt;p&gt;CL65 is using &amp;quot;C64&amp;quot; target as default, while CA65 uses &amp;quot;none&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Adding a &lt;code&gt;-t none&lt;/code&gt; should make this disappear.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Details:&lt;/h2&gt;&#xA;&lt;p&gt;The CL65 documentation for -t does clearly point out the difference:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;-t sys, --target sys&lt;/p&gt;&#xA;&lt;p&gt;The default for this option is different from the compiler and linker in the case that the option is missing: While the&#xA;other tools (compiler, assembler and linker) will use the &amp;quot;none&amp;quot;&#xA;system settings by default, cl65 will use the C64 as a target system&#xA;by default. This was chosen since most people seem to use cc65 to&#xA;develop for the C64.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's always good to keep in mind that CL65 is 'just' a 'wrapper' to combine the various tools (in this case CA65 and LD65) to ease use. It should simplify handling by reducing what to type. Like any tool, meant to simplify things, it either cuts off abilities and/or replaces them by assumptions.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Background:&lt;/h2&gt;&#xA;&lt;p&gt;Since CC65 and it's tools are meant to support various systems, each with it's own charset, the handling of text is postponed until linking. Oly then LD65 will translate all (recognized) strings into the appropriate code set, depending on the target. A very nice structure, allowing not only machine independent source code, but object modules as well. So the one module can be compiled and then linked for an Apple II, as well as for Commodore PET, without the need for recompilation.&lt;/p&gt;&#xA;&lt;p&gt;For the C64 the (C64-)PETSCII with only uppercase chars is used, as that guarantees working, independent of which of the default charsets is selected at runtime.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-18T19:51:20.503" LastActivityDate="2021-04-18T19:51:20.503" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12549" PostTypeId="1" AcceptedAnswerId="12550" CreationDate="2019-10-19T16:28:44.723" Score="27" ViewCount="7476" Body="&lt;p&gt;I've been looking into implementing Gameboy Link Cable compatibility into Bizhawk (which does not support it yet) using Lua. The problem is that I can't find any mention of how it works online. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to know how I can modify the gameboy's memory in order to emulate link cable behavior. Nothing on the &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Serial_Data_Transfer_(Link_Cable)&quot; rel=&quot;noreferrer&quot;&gt;Serial Data Transfer (Link Cable)&lt;/a&gt; page was helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does the Gameboy know that it's being linked? What memory addresses does it utilize?&#xA;What specific part of memory tells the Gameboy that no link cable is connected? IE where does the Gameboy check before say &quot;no link cable is connected&quot;&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="10751" LastEditDate="2019-10-21T17:59:41.030" LastActivityDate="2019-10-22T08:07:09.377" Title="How does the Gameboy Link Cable work?" Tags="&lt;emulation&gt;&lt;game-boy&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12550" PostTypeId="2" ParentId="12549" CreationDate="2019-10-19T18:59:14.493" Score="26" Body="&lt;p&gt;You'll need to manipulate the memory address &lt;code&gt;0xFF02&lt;/code&gt;, and shift the data (MSB first) into &lt;code&gt;0xFF01&lt;/code&gt;, as stated below. If there is no cable - ergo, no gameboy connected - then &lt;code&gt;0xFF&lt;/code&gt; is received, in &lt;code&gt;0xFF01&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Serial_Data_Transfer_(Link_Cable)&quot; rel=&quot;noreferrer&quot;&gt;Serial Data Transfer (Link Cable)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Communication between two Gameboys happens one byte at a time. One&#xA;  Gameboy acts as the master, uses its internal clock, and thus controls&#xA;  when the exchange happens. The other one uses an external clock (i.e.,&#xA;  the one inside the other Gameboy) and has no control over when the&#xA;  transfer happens. If it hasn't gotten around to loading up the next&#xA;  data byte at the time the transfer begins, the last one will go out&#xA;  again. Alternately, if it's ready to send the next byte but the last&#xA;  one hasn't gone out yet, it has no choice but to wait.&lt;/p&gt;&#xA;  &#xA;  &lt;h3&gt;FF01 - SB - Serial transfer data (R/W)&lt;/h3&gt;&#xA;  &#xA;  &lt;p&gt;Before a transfer, it holds the next byte that will go out. During a&#xA;  transfer, it has a blend of the outgoing and incoming bytes. Each&#xA;  cycle, the leftmost bit is shifted out (and over the wire) and the&#xA;  incoming bit is shifted in from the other side:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;o7 o6 o5 o4 o3 o2 o1 o0&#xA;o6 o5 o4 o3 o2 o1 o0 i7&#xA;o5 o4 o3 o2 o1 o0 i7 i6&#xA;o4 o3 o2 o1 o0 i7 i6 i5&#xA;o3 o2 o1 o0 i7 i6 i5 i4&#xA;o2 o1 o0 i7 i6 i5 i4 i3&#xA;o1 o0 i7 i6 i5 i4 i3 i2&#xA;o0 i7 i6 i5 i4 i3 i2 i1&#xA;i7 i6 i5 i4 i3 i2 i1 i0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;h3&gt;FF02 - SC - Serial Transfer Control (R/W)&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; Bit 7 - Transfer Start Flag (0=No transfer is in progress or requested, 1=Transfer in progress, or requested)&#xA; Bit 1 - Clock Speed (0=Normal, 1=Fast) ** CGB Mode Only **&#xA; Bit 0 - Shift Clock (0=External Clock, 1=Internal Clock)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;The gameboy acting as master will load up a data byte in SB and then&#xA;  set SC to 0x81 (Transfer requested, use internal clock). It will be&#xA;  notified that the transfer is complete in two ways: SC's Bit 7 will be&#xA;  cleared (i.e., SC will be set up 0x01), and also the Serial Interrupt&#xA;  handler will be called (i.e., the CPU will jump to 0x0058). The other&#xA;  gameboy will load up a data byte and can optionally set SC's Bit 7&#xA;  (i.e., SC=0x80). Regardless of whether or not it has done this, if and&#xA;  when the master gameboy wants to conduct a transfer, it will happen&#xA;  (pulling whatever happens to be in SB at that time). The passive&#xA;  gameboy will have its serial interrupt handler called at the end of&#xA;  the transfer, and if it bothered to set SC's Bit 7, it will be&#xA;  cleared.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;During a transfer, a byte is shifted in at the same time that a byte&#xA;  is shifted out. The rate of the shift is determined by whether the&#xA;  clock source is internal or external. The most significant bit is&#xA;  shifted in and out first. When the internal clock is selected, it&#xA;  drives the clock pin on the game link port and it stays high when not&#xA;  used. During a transfer it will go low eight times to clock in/out&#xA;  each bit.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The state of the last bit shifted out determines the state of the&#xA;  output line until another transfer takes place.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If a serial transfer with internal clock is performed and no external&#xA;  GameBoy is present, a value of $FF will be received in the transfer.&#xA;  The following code initiates the process of shifting $75 out the&#xA;  serial port and a byte to be shifted into $FF01:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld   a,$75&#xA;ld  ($FF01),a&#xA;ld   a,$81&#xA;ld  ($FF02),a&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;The Game Boy does not support wake-on-LAN. Completion of an externally&#xA;  clocked serial transfer does not exit STOP mode.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This link, &lt;a href=&quot;http://www.devrs.com/gb/files/gbspec.txt&quot; rel=&quot;noreferrer&quot;&gt;Everything You Always Wanted To Know About GAMEBOY&lt;/a&gt;, also shows the memory map (indicating the interrupt locations and the comms bytes) which will clarify the data from the first link:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;GB General Memory Map*&#xA;&#xA;---------------------&#xA;&#xA;  Interrupt Enable Register&#xA;&#xA; --------------------------- FFFF&#xA;&#xA;  Internal RAM&#xA;&#xA; --------------------------- FF80&#xA;&#xA;  Empty but unusable for I/O&#xA;&#xA; --------------------------- FF4C&#xA;&#xA;  I/O ports&#xA;&#xA; --------------------------- FF00&#xA;&#xA;  Empty but unusable for I/O&#xA;&#xA; --------------------------- FEA0&#xA;&#xA;  Sprite Attrib Memory (OAM)&#xA;&#xA; --------------------------- FE00&#xA;&#xA;  Echo of 8kB Internal RAM&#xA;&#xA; --------------------------- E000&#xA;&#xA;  8kB Internal RAM&#xA;&#xA; --------------------------- C000&#xA;&#xA;  8kB switchable RAM bank&#xA;&#xA; --------------------------- A000&#xA;&#xA;  8kB Video RAM&#xA;&#xA; --------------------------- 8000&#xA;&#xA;  32kB Cartridge&#xA;&#xA; --------------------------- 0000&#xA;&#xA;&#xA;&#xA;&#xA;&#xA; * NOTE: b = bit, B = byte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="202" LastEditorUserId="202" LastEditDate="2019-10-22T08:07:09.377" LastActivityDate="2019-10-22T08:07:09.377" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12551" PostTypeId="2" ParentId="12549" CreationDate="2019-10-19T19:49:11.677" Score="14" Body="&lt;p&gt;&lt;em&gt;Note, this is a supplement to Greenonline's answer.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of emulating the bitwise transfer I would just emulate the bytewise transfer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If some game depends on the transmission time, you need to emulate this period for the reset of bit 7 of SC. When exactly in this period you transfer the bytes doesn't matter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If some game depends on the bitwise transfer, think about if it's worth to support it. But I'll be right astonished if such a game exists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A shortly described (and perhaps erroneous) abstract algorithm might be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;forever&#xA;    if SC.7 becomes 1 then&#xA;        if SC.0 = 1 then&#xA;            # You are a master device.&#xA;            send(SB)&#xA;            SB = receive() # clears &quot;received&quot;&#xA;            SC.7 = 0&#xA;    if received() then&#xA;        # You are a slave device.&#xA;        send(SB)&#xA;        SB = receive() # fetch received byte&#xA;        SC.7 = 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You still have to think about what happens if two masters are connected. I have no idea what happens on the hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Connecting two slaves is no problem. Bytes will not be exchanged and SC.7 will remain set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, it's all in the quoted description! It &quot;just&quot; needs to be translated in behaviour.&lt;/p&gt;&#xA;" OwnerUserId="14875" LastEditorUserId="14875" LastEditDate="2019-10-21T11:02:08.203" LastActivityDate="2019-10-21T11:02:08.203" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12552" PostTypeId="2" ParentId="12015" CreationDate="2019-10-19T20:47:55.597" Score="5" Body="&lt;p&gt;The &lt;a href=&quot;http://www.c64.cz/index.php?static=inception&quot; rel=&quot;noreferrer&quot;&gt;Inception 8 joysticks adapter&lt;/a&gt; uses a joystick port for two-way communication between C64 and Inception board. Basically, a program at the C64 would send a command sequence via the joystick port, switches the port to listen and receives the Inception board's reply. In most cases, the information communicated is the state of the joysticks connected to the Inception board, but the board's FPGA can also act as an external math coprocessor.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2019-10-19T20:47:55.597" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12553" PostTypeId="1" AcceptedAnswerId="14580" CreationDate="2019-10-20T08:20:27.977" Score="3" ViewCount="191" Body="&lt;p&gt;The Censor 932 CPU architecture has one instruction type that takes a 3-bit &quot;index register&quot; field, but looking at the rest of the instruction set, I can't see any instructions that read, write, or otherwise manipulate index registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the possibilities that occurred to me is that it may just be that index register 1--7 are shadowed onto general register 1--7, but I hesitate to bake that assumption in to my emulator code right now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edit&lt;/em&gt;: The Censor machine architecture started out as a Standard Radio &amp;amp; Telefon machine in 1967-1968. In 1971 the computer division was split off and merged into Stansaab. In 1973, Facit's terminal divison was merged in. And in 1978, it was merged into Datasaab.&lt;/p&gt;&#xA;" OwnerUserId="3842" LastEditorUserId="3290" LastEditDate="2020-04-30T12:14:53.700" LastActivityDate="2020-04-30T12:14:53.700" Title="How are the index registers on the Censor 932 accessed?" Tags="&lt;architecture&gt;&lt;registers&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12554" PostTypeId="1" AcceptedAnswerId="12555" CreationDate="2019-10-20T10:30:34.423" Score="5" ViewCount="414" Body="&lt;p&gt;According to the &lt;a href=&quot;https://cc65.github.io/doc/ca65.html&quot; rel=&quot;noreferrer&quot;&gt;cc65 documentation&lt;/a&gt;, a string constant in assembler programs can be defined with the &lt;code&gt;.ASCIIZ&lt;/code&gt; command. However, I could not manage to sneak control commands in, for example, the backslash character is transcribed literally into character &lt;code&gt;0xBF&lt;/code&gt;. Given that commodore systems provide a powerful set of control characters including color setting this would be useful. Is there an escape character in &lt;code&gt;ca65&lt;/code&gt; to add such commands to a text string?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;msg .ASCIIZ &quot;hello world&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How could I add, for example, a control character for changing to white color before the second word? The CBM code for white is &lt;code&gt;05&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2019-10-20T11:35:39.677" LastActivityDate="2020-06-19T02:19:49.907" Title="Adding control characters to string constants in ca65 assembler" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;cc65&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12555" PostTypeId="2" ParentId="12554" CreationDate="2019-10-20T11:22:42.287" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Is there an escape character in ca65 to add such commands to a text string?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In general: No.&lt;/p&gt;&#xA;&lt;p&gt;The whole ASCII(Z) mechanic is meant to write device independent code, so adding device specific sequences is rather outside of the scope. To get arbitary inserts, you may want to use the good old &lt;code&gt;.BYTE&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;msg  .BYTE &amp;quot;Hello &amp;quot;,$05,&amp;quot;World&amp;quot;,0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Then again, &lt;strong&gt;there is a way&lt;/strong&gt; to do it, it just comes with a big caveat.&lt;/p&gt;&#xA;&lt;p&gt;Starting with version 2.18 (*1,2) escape code processing can be enabled via a &lt;a href=&quot;https://cc65.github.io/doc/ca65.html#ss11.43&quot; rel=&quot;nofollow noreferrer&quot;&gt;feature&lt;/a&gt; (*3)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.FEATURE STRING_ESCAPES&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will enable C-style escape codes for special characters. Now it's possible to write&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;msg   .ASCIIZ &amp;quot;Hello \x05World&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So far a great thing, except, this is only painless on the source/module side, as &lt;strong&gt;character mapping according to the target&lt;/strong&gt; will kick in when linking (*4). When linking, stings get translated into target codes, which can be  vastly different depending on each machine.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Now, since we already left the path of compatibility&lt;/strong&gt;, there is a way to add (somewhat) machine independent support by using defined character codes and have their mapping fixed using the &lt;code&gt;.CHARMAP&lt;/code&gt; directive. And with a bit of Macro-Fu logical names could be used as well ... but all of that is a complete different story :)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - More correct, it wasn't there in 2.15, but is available in 2.18.&lt;/p&gt;&#xA;&lt;p&gt;*2 - It also seams to be a backport by Oliver Schmidt from 2.5 into the free version.&lt;/p&gt;&#xA;&lt;p&gt;*3 - When using the command line option features need to be specified all lower case as &lt;code&gt;--feature string_escapes&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*4 -Unless no target is specified (&lt;code&gt;-t none&lt;/code&gt;).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-19T02:19:49.907" LastActivityDate="2020-06-19T02:19:49.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12556" PostTypeId="5" CreationDate="2019-10-20T11:40:44.283" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-10-20T11:40:44.283" LastActivityDate="2019-10-20T11:40:44.283" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12557" PostTypeId="4" CreationDate="2019-10-20T11:40:44.283" Score="0" Body="The cc65 C compiler and toolchain, including ca65 (Assembler), cl65, ar65, etc." OwnerUserId="11100" LastEditorUserId="15334" LastEditDate="2021-03-05T18:34:34.610" LastActivityDate="2021-03-05T18:34:34.610" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12558" PostTypeId="1" AcceptedAnswerId="12560" CreationDate="2019-10-21T02:51:05.720" Score="12" ViewCount="1243" Body="&lt;p&gt;Does &lt;code&gt;SUB B&lt;/code&gt; on Intel 8080 set the auxiliary carry flag when the accumulator and the B register are 1 and 0, respectively? On Z80, which was designed to be a backward-compatible, albeit not fully, extension to 8080, the half-carry flag is defined so that it gets set if subtraction results in a borrow from bit 4 (Z80 CPU User Manual, p. 68). Therefore, &quot;1 - 0&quot; will reset the flag on Z80 because no borrow occurs in the subtraction. Is it also the case on 8080? More generally, does the auxiliary carry flag on 8080 behave in the exactly same way as the half-carry flag on Z80?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The official 8080 manuals appear less clear about when subtraction turns on the auxiliary carry flag than the Z80 manual. I have observed that some 8080 emulators turn the flag on for &quot;1 - 0&quot; but others do not. As another example, the first and second algorithms in &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11262/15419&quot;&gt;Can someone explain this algorithm used to compute the auxiliary carry flag?&lt;/a&gt; will reset and set the flag for the subtraction, respectively.&lt;/p&gt;&#xA;" OwnerUserId="15419" LastEditorUserId="15419" LastEditDate="2019-10-30T12:19:33.693" LastActivityDate="2019-10-30T12:19:33.693" Title="The behavior of the auxiliary carry flag in subtraction on Intel 8080" Tags="&lt;8080&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12560" PostTypeId="2" ParentId="12558" CreationDate="2019-10-21T13:36:59.517" Score="8" Body="&lt;p&gt;To get the correct answer, one should take a real i8080 system and make simple experiments with it. However, if no such system is available, one can take the result of &lt;a href=&quot;https://zeptobars.com/en/read/KR580VM80A-intel-i8080-verilog-reverse-engineering&quot; rel=&quot;noreferrer&quot;&gt;reverse engineering of i8080&lt;/a&gt; and make simple experiments in HDL simulator. So did I.&#xA;The program suggested to the CPU:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// simple ROM&#xA;reg [7:0] rom [0:15] = &#xA;'{&#xA;    8'h31, //&#xA;    8'h10, //&#xA;    8'h80, // ld   sp,#8010&#xA;&#xA;    8'h3e, //&#xA;    8'h00, // ld   a,#00&#xA;&#xA;    8'h06, //&#xA;    8'h01, // ld   b,#01&#xA;&#xA;    8'h90, // sub  b&#xA;&#xA;    8'hf5, // push af&#xA;&#xA;    8'h3e, //&#xA;    8'h01, // ld   a,#01&#xA;&#xA;    8'h06, //&#xA;    8'h00, // ld   b,#00&#xA;&#xA;    8'h90, // sub  b&#xA;&#xA;    8'hf5, // push af&#xA;&#xA;    8'h76  // halt&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(I used Z80 mnemonics because they are more concise).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The full testbench is &lt;a href=&quot;https://pastebin.com/iuJenQLU&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, it contains the model (vm80a, called so after the name of russian i8080 clone, КР580ВМ80А), simple ROM and simple RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result is here:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/6RduP.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6RduP.png&quot; alt=&quot;i8080 simulation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see that auxiliary carry (&lt;code&gt;psw_ac&lt;/code&gt; on the picture) set to 0 when, in the first subtraction, subtracting one from zero and set to 1 when subtracting zero from one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same info is in the data pushed on the stack: &lt;code&gt;PSW&lt;/code&gt; is &lt;code&gt;0x87&lt;/code&gt; for the first subtraction (0-1) and &lt;code&gt;0x12&lt;/code&gt; for the second (1-0). Look for bit position 4, which is exactly &lt;code&gt;AC&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for such 'unintuitive' behaviour is actually simple. Given the adder with two arguments, carry in and carry out, one does subtraction by simply inverting the second (subtrahend) argument and inverting carry that ins and carry that outs as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, as there was no need in i8080 to make &lt;code&gt;DAA&lt;/code&gt; after subtractions, the auxiliary carry was cared only for additions and was taken directly from the middle of carry chain in the ALU, without any extra optional inversions.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2019-10-21T14:10:44.857" LastActivityDate="2019-10-21T14:10:44.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12561" PostTypeId="2" ParentId="12355" CreationDate="2019-10-21T14:05:01.227" Score="2" Body="&lt;p&gt;To add to user Raffzahn's answer - this&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It generates RAS/CAS signalling for each and every access, no matter what address is used (*1).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;would imply that - talking about a system without any cartridges inserted - when a Program writes to the I/O area, for example some VIC or CIA hardware register, RAM memory in the $Dxxx area gets clobbered. Unless I'm quite mistaken this is not the case - I've used this memory back in the day, must have been around 1989/1990, to &quot;hide&quot; code when modifying a game that otherwise didn't use it (the game was called Die Dunkle Dimension, kind of a German Ultima IV clone), to put fastloader code there - in addition to a small stub elsewhere that disables interrupts, enables all of RAM and then jumps to $D000. The code there would swap part of the contents of $Dxxx with e.g. $Cxxx and then jump there. The code there would re-enable I/O, do the actual fastloading, then at the end disable I/O again, jump into the $Dxxx area, code there would swap things back and return to the stub, which would re-enable I/O and return to the actual game. The details are quite foggy after such a long time, but none of this could have worked if writing to the I/O area had modified RAM at $Dxxx.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before anybody asks, I gave away all my old C64 disks a few years later, so no, I don't have this modified version of DDD around any more.&lt;/p&gt;&#xA;" OwnerUserId="15358" LastActivityDate="2019-10-21T14:05:01.227" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12563" PostTypeId="1" CreationDate="2019-10-22T19:13:31.980" Score="5" ViewCount="668" Body="&lt;p&gt;I am a big fan of the TV show lost, and I was trying to make the Dharma Initiative logo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But at certain point I couldn't add new lines of code and the final part of the logo was cut off. I tried to change to HGR2 and worked, but now I can't write below the image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I need the HGR2 $4000 memory (or more) and the mixed text and graphics mode of HGR. And I pretended to do more, write a whole program based on Lost, so I need more than just the logo.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am programing basic in Apple II+, more specific, in AppleWin emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know very basic of programing so my code is a mess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;5 REM DHARMA INITIATIVE LOGO &#xA;10 HOME&#xA;15 HGR&#xA;20 HPLOT 108,4 TO 170,4 TO 213,47 TO 213,110 to 170,153 TO 107,153 TO 64,110 TO 64,47 TO 107,4&#xA;25 HPLOT 108,5 TO 170,5 TO 212,47 TO 212,110 to 170,152 TO 107,152 TO 65,110 TO 65,47 TO 107,5&#xA;30 HPLOT 108,6 TO 170,6 TO 211,47 TO 211,110 to 170,151 TO 107,151 TO 66,110 TO 66,47 TO 107,6&#xA;31 HPLOT 108,7 TO 170,7 TO 210,47 TO 210,110 to 170,150 TO 107,150 TO 67,110 TO 67,47 TO 107,7&#xA;35 HPLOT 108,8 TO 170,8 TO 209,47 TO 209,110 to 170,149 TO 107,149 TO 68,110 TO 68,47 TO 107,8&#xA;40 HPLOT 108,9 TO 170,9 TO 208,47 TO 208,110 to 170,148 TO 107,148 TO 69,110 TO 69,47 TO 107,9&#xA;45 HPLOT 117,17 TO 160,17 TO 160,18 TO 117,18 TO 117,19 TO 160,19 : HPLOT 159,20 TO 118,20 TO 118,21 TO 159,21 : HPLOT 120,22 TO 157,22&#xA;50 HPLOT 167,21 TO 179,33 : HPLOT 179,34 TO 166,21 : HPLOT 166,22 TO 178,34 : HPLOT 178,35 TO 166,23 : HPLOT 165,23 TO 177,35 : HPLOT 177,36 TO 165,24 : HPLOT 165,25 TO 176,36  &#xA;55 HPLOT 184,38 TO 196,50 : HPLOT 196,51 TO 183,38 : HPLOT 183,39 TO 195,51 : HPLOT 194,51 TO 182,39 : HPLOT 182,40 TO 194,52 : HPLOT 193,52 TO 181,40 : HPLOT 181,41 TO 192,52  &#xA;60 HPLOT 200,57 TO 200,100 TO 199,100 TO 199,57 TO 198,57 TO 198,100 TO 197,99 TO 197,58 TO 196,58 TO 196,99 : HPLOT 195,97 TO 195,60 &#xA;65 HPLOT 197,107 TO 167,137 : HPLOT 166,137 TO 197,106 : HPLOT 196,106 TO 166,136 : HPLOT 166,135 TO 195,106 : HPLOT 195,105 TO 165,135 : HPLOT 165,134 TO 194,105 : HPLOT 193,105 TO 165,133&#xA;70 HPLOT 159,140 TO 141,140 TO 141,139 TO 159,139 TO 159,138 TO 141,138 TO 141,137 TO 158,137 TO 158,136 TO 141,136 : HPLOT 141,135 TO 156,135&#xA;75 HPLOT 135,140 TO 117,140 TO 117,139 TO 135,139 TO 135,138 TO 117,138 TO 118,137 TO 135,137 TO 135,136 TO 118,136 : HPLOT 120,135 TO 135,135 &#xA;80 HPLOT 109,136 TO 97,124 : HPLOT 97,123 TO 110,136 : HPLOT 110,135 TO 98,123 : HPLOT 98,122 TO 110,134 : HPLOT 111,134 TO 99,122 : HPLOT 99,121 TO 111,133 : HPLOT 111,132 TO 100,121 &#xA;85 HPLOT 92,119 TO 80,107 : HPLOT 80,106 TO 93,119 : HPLOT 93,118 TO 81,106 : HPLOT 82,106 TO 94,118 : HPLOT 94,117 TO 82,105 : HPLOT 83,105 TO 95,117 : HPLOT 95,116 TO 84,105 &#xA;90 HPLOT 77,100 TO 77,57 TO 78,57 TO 78,100 TO 79,100 TO 79,57 : HPLOT 80,58 TO 80,99 TO 81,99 TO 81,58 : HPLOT 82,60 TO 82,97    &#xA;95 HPLOT 81,50 TO 93,38 : HPLOT 94,38 TO 81,51 : HPLOT 82,51 TO 94,39 : HPLOT 95,39 TO 83,51 : HPLOT 83,52 TO 95,40 : HPLOT 96,40 TO 84,52 : HPLOT 85,52 TO 96,41    &#xA;100 HPLOT 98,33 TO 110,21 : HPLOT 111,21 TO 98,34 : HPLOT 99,34 TO 111,22 : HPLOT 111,23 TO 99,35 : HPLOT 100,35 TO 112,23 : HPLOT 112,24 TO 100,36 : HPLOT 101,36 TO 112,25&#xA;105 HPLOT 121,26 TO 135,26 TO 135,27 TO 121,27 TO 122,28 TO 135,28 TO 135,29 TO 122,29 TO 123,30 TO 135,30 TO 135,31 TO 123,31  &#xA;110 HPLOT 141,26 TO 156,26 TO 156,27 TO 141,27 TO 141,28 TO 155,28 TO 155,29 TO 141,29 TO 141,30 TO 154,30 TO 154,31 TO 141,31&#xA;115 HPLOT 164,30 TO 174,40 TO 174,41 TO 163,30 TO 163,31 TO 173,41 TO 173,42 TO 163,32 TO 162,32 TO 172,42 TO 172,43 TO 162,33 TO 162,34 TO 171,43&#xA;120 HPLOT 178,44 TO 187,53 TO 187,54 TO 177,44 TO 177,45 TO 186,54 TO 185,54 TO 176,45 TO 176,46 TO 185,55 TO 184,55 TO 175,46 TO 175,47 TO 183,55&#xA;125 HPLOT 191,61 TO 191,96 TO 190,96 TO 190,61 : HPLOT 189,62 TO 189,95 TO 188,95 TO 188,62 : HPLOT 187,63 TO 187,94 TO 186,94 TO 186,63&#xA;130 HPLOT 187,104 TO 163,128 : HPLOT 162,128 TO 187,103 : HPLOT 186,103 TO 162,127 : HPLOT 162,126 TO 185,103 : HPLOT 185,102 TO 161,126 : HPLOT 161,125 TO 184,102 : HPLOT 183,102 TO 161,124&#xA;135 HPLOT 156,131 TO 121,131 TO 121,130 TO 156,130 : HPLOT 155,129 TO 122,129 TO 122,128 TO 155,128 : HPLOT 154,127 TO 123,127 TO 123,126 TO 154,126&#xA;140 HPLOT 113,127 TO 103,117 : HPLOT 103,116 TO 114,127 : HPLOT 114,126 TO 104,116 : HPLOT 104,115 TO 114,125 : HPLOT 115,125 TO 105,115 : HPLOT 105,114 TO 115,124 : HPLOT 115,123 TO 106,114 &#xA;145 HPLOT 99,113 TO 90,104 : HPLOT 90,103 TO 100,113 : HPLOT 100,112 TO 91,103 : HPLOT 92,103 TO 101,112 : HPLOT 101,111 TO 92,102 : HPLOT 93,102 TO 102,111 : HPLOT 102,110 TO 94,102&#xA;150 HPLOT 86,96 TO 86,82 TO 87,82 TO 87,96 : HPLOT 88,95 TO 88,82 TO 89,82 TO 89,95 : HPLOT 90,94 TO 90,82 TO 91,82 TO 91,94 &#xA;155 HPLOT 86,76 TO 86,61 TO 87,61 TO 87,76 TO 88,76 TO 88,62 TO 89,62 TO 89,76 TO 90,76 TO 90,63 TO 91,63 TO 91,76&#xA;160 HPLOT 89,54 TO 113,30 : HPLOT 114,30 TO 89,55 : HPLOT 90,55 TO 114,31 : HPLOT 114,32 TO 91,55 : HPLOT 91,56 TO 115,32 : HPLOT 115,33 TO 92,56 : HPLOT 93,56 TO 115,34&#xA;165 HPLOT 125,34 TO 152,34 TO 152,35 TO 125,35 : HPLOT 126,36 TO 151,36 TO 151,37 TO 126,37 : HPLOT 127,38 TO 150,38 TO 150,39 TO 127,39 &#xA;170 HPLOT 160,38 TO 168,46 : HPLOT 168,47 TO 160,39 : HPLOT 160,40 TO 167,47 : HPLOT 167,48 TO 159,40 : HPLOT 159,41 TO 166,48 : HPLOT 166,49 TO 159,42 : HPLOT 159,43 TO 165,49&#xA;175 HPLOT 172,50 TO 179,57 : HPLOT 178,57 TO 171,50 : HPLOT 171,51 TO 177,57 : HPLOT 177,58 TO 170,51 : HPLOT 170,52 TO 176,58 : HPLOT 175,58 TO 169,52 : HPLOT 169,53 TO 174,58 &#xA;180 HPLOT 183,65 TO 183,76 TO 182,76 TO 182,65 : HPLOT 181,66 TO 181,76 TO 180,76 TO 180,66 : HPLOT 179,67 TO 179,76 TO 178,76 TO 178,67&#xA;185 HPLOT 183,82 TO 183,92 TO 182,92 TO 182,82 TO 181,82 TO 181,91 TO 180,91 TO 180,82 TO 179,82 TO 179,90 TO 178,90 TO 178,82&#xA;190 HPLOT 179,100 TO 160,119 : HPLOT 160,118 TO 178,100 : HPLOT 177,100 TO 160,117 : HPLOT 159,117 TO 177,99 : HPLOT 176,99 TO 159,116 : HPLOT 159,115 TO 175,99 : HPLOT 174,99 TO 159,114&#xA;195 HPLOT 152,123 TO 141,123 TO 141,122 TO 152,122 : HPLOT 151,121 TO 141,121 TO 141,120 TO 151,120 : HPLOT 150,119 TO 141,119 TO 141,118 TO 150,118&#xA;200 HPLOT 135,123 TO 125,123 TO 125,122 TO 135,122 TO 135,121 TO 126,121 TO 126,120 TO 135,120 TO 135,119 TO 127,119 TO 127,118 TO 135,118 &#xA;205 HPLOT 117,119 TO 98,100 : HPLOT 99,100 TO 117,118 : HPLOT 117,117 TO 100,100 : HPLOT 100,99 TO 118,117 : HPLOT 118,116 TO 101,99 : HPLOT 102,99 TO 118,115 : HPLOT 118,114 TO 103,99&#xA;210 HPLOT 94,92 TO 94,82 TO 95,82 TO 95,92 : HPLOT 96,91 TO 96,82 TO 97,82 TO 97,91 : HPLOT 98,90 TO 98,82 TO 99,82 TO 99,90&#xA;215 HPLOT 94,76 TO 94,65 TO 95,65 TO 95,76 TO 96,76 TO 96,66 TO 97,66 TO 97,76 TO 98,76 TO 98,67 TO 99,67 TO 99,76&#xA;220 HPLOT 97,58 TO 116,39 : HPLOT 116,40 TO 98,58 : HPLOT 99,58 TO 116,41 : HPLOT 117,41 TO 99,59 : HPLOT 100,59 TO 117,42 : HPLOT 117,43 TO 101,59 : HPLOT 102,59 TO 117,44 &#xA;225 REM DHARMA LOGO CORE&#xA;230 HPLOT 135,46 TO 143,46 : HPLOT 130,47 TO 148,47 : HPLOT 127,48 TO 151,48 : HPLOT 125,49 TO 153,49 : HPLOT 124,50 TO 155,50 : HPLOT 122,51 TO 156,51 : HPLOT 120,52 TO 158,52&#xA;235 HPLOT 119,53 TO 160,53 : HPLOT 118,54 TO 160,54 : HPLOT 117,55 TO 161,55 : HPLOT 116,56 TO 162,56 : HPLOT 115,57 TO 163,57 : HPLOT 114,58 TO 164,58 : HPLOT 114,59 TO 164,59&#xA;240 HPLOT 113,60 TO 165,60 : HPLOT 112,61 TO 166,61 : HPLOT 112,62 TO 166,62 : HPLOT 111,63 TO 167,63 : HPLOT 111,64 TO 167,64 : HPLOT 110,65 TO 168,65 : HPLOT 109,66 TO 168,66&#xA;245 HPLOT 109,67 TO 169,67 : HPLOT 109,68 TO 169,68 : HPLOT 109,69 TO 169,69 : HPLOT 108,70 TO 170,70 : HPLOT 108,71 TO 170,71 : HPLOT 108,72 TO 170,72 : HPLOT 107,73 TO 170,73&#xA;250 HPLOT 107,74 TO 112,74 : HPLOT 119,74 TO 122,74 : HPLOT 124,74 TO 127,74 : HPLOT 129,74 TO 133,74 : HPLOT 136,74 TO 140,74 : HPLOT 146,74 TO 171,74&#xA;255 HPLOT 107,75 TO 112,75 : HCOLOR = 0 : HPLOT 112,75 : HCOLOR = 3: HPLOT 121,75 : HPLOT 125,75 TO 126,75 : HPLOT 129,75 TO 132,75 : HPLOT 136,75 TO 139,75 : HPLOT 148,75 TO 149,75&#xA;256 HPLOT 159,75 TO 162,75 : HPLOT 151,75 TO 156,75 : HPLOT 165,75 TO 171,75 &#xA;260 HPLOT 107,76 TO 111,76 : HPLOT 115,76 TO 117,76 : HPLOT 121,76 : HPLOT 125,76 TO 126,76 : HPLOT 129,76 TO 132,76 : HPLOT 137,76 TO 139,76 : HPLOT 142,76 TO 145,76 : HPLOT 148,76 TO 149,76 : HPLOT 152,76 TO 155,76 &#xA;265 HPLOT 159,76 TO 161,76 : HPLOT 166,76 TO 171,76&#xA;270 HPLOT 107,77 TO 111,77 : HPLOT 115,77 TO 118,77 : HPLOT 121,77 : HPLOT 125,77 TO 126,77 : HPLOT 129,77 TO 131,77 : HPLOT 134,77 TO 135,77 : HPLOT 138,77 TO 139,77 : HPLOT 142,77 TO 144,77 : HPLOT 148,77 TO 149,77 &#xA;275 HPLOT 153,77 TO 154,77 : HPLOT 159,77 TO 160,77 : HPLOT 163,77 TO 164,77 : HPLOT 166,77 TO 171,77&#xA;280 HPLOT 107,78 TO 111,78 : HPLOT 115,78 TO 118,78 : HPLOT 121,78 : HPLOT 129,78 TO 131,78 : HPLOT 134,78 TO 135,78 : HPLOT 138,78 TO 139,78 : HPLOT 147,78 TO 149,78 : HPLOT 159,78 TO 160,78 : HPLOT 167,78 TO 171,78&#xA;285 HPLOT 107,79 TO 111,79 : HPLOT 115,79 TO 117,79 : HPLOT 121,79 : HPLOT 129,79 TO 130,79 : HPLOT 139,79 : HPLOT 146,79 TO 149,79 : HPLOT 152,79 : HPLOT 156,79 : HPLOT 159,79 : HPLOT 167,79 TO 171,79&#xA;290 HPLOT 107,80 TO 111,80 : HPLOT 120,80 TO 121,80 : HPLOT 125,80 TO 126,80 : HPLOT 129,80 : HPLOT 139,80 : HPLOT 142,80 TO 143,80 : HPLOT 148,80 TO 149,80 : HPLOT 152,80 TO 153,80 : HPLOT 155,80 TO 156,80 : HPLOT 159,80&#xA;295 HPLOT 162,80 TO 165,80 : HPLOT 168,80 TO 171,80 &#xA;300 HPLOT 107,81 TO 111,81 : HPLOT 119,81 TO 121,81 : HPLOT 125,81 TO 126,81 : HPLOT 129,81 : HPLOT 133,81 TO 136,81 : HPLOT 139,81 : HPLOT 142,81 TO 144,81 : HPLOT 149,81 : HPLOT 152,81 TO 156,81 : HPLOT 159,81 &#xA;305 HPLOT 162,81 TO 165,81 : HPLOT 169,81 TO 171,81 &#xA;310 HPLOT 107,82 TO 111,82 : HPLOT 117,82 TO 122,82 : HPLOT 124,82 TO 127,82 : HPLOT 129,82 : HPLOT 132,82 TO 137,82 : HPLOT 139,82 : HPLOT 142,82 TO 145,82 : HPLOT 149,82 : HPLOT 152,82 TO 156,82 : HPLOT 159,82 &#xA;315 HPLOT 161,82 TO 166,82 : HPLOT 169,82 TO 171,82 &#xA;320 HPLOT 107,83 TO 171,83 : HPLOT 108,84 TO 170,84 : HPLOT 108,85 TO 170,85 : HPLOT 108,86 TO 170,86 : HPLOT 108,87 TO 170,87 : HPLOT 108,88 TO 169,88 : HPLOT 109,89 TO 169,89 : HPLOT 109,90 TO 169,90     &#xA;325 HPLOT 109,91 TO 169,91 : HPLOT 110,92 TO 168,92 : HPLOT 110,93 TO 168,93 : HPLOT 111,94 TO 167,94 : HPLOT 112,95 TO 166,95 : HPLOT 112,96 TO 166,96 : HPLOT 113,97 TO 165,97 : HPLOT 114,98 TO 164,98  &#xA;330 HPLOT 114,99 TO 164,99 : HPLOT 115,100 TO 163,100 : HPLOT 116,101 TO 162,101 : HPLOT 117,102 TO 162,102 : HPLOT 118,103 TO 160,103 : HPLOT 119,104 TO 159,104 : HPLOT 121,105 TO 157,105  &#xA;335 HPLOT 122,106 TO 156,106 : HPLOT 124,107 TO 154,107 : HPLOT 125,108 TO 153,108 : HPLOT 127,109 TO 151,109 : HPLOT 131,110 TO 148,110 : HPLOT 135,111 TO 143,111 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15427" LastEditorUserId="31" LastEditDate="2019-10-24T20:51:52.623" LastActivityDate="2019-10-24T20:51:52.623" Title="How to use HGR2 (or HGR) on an Apple II" Tags="&lt;apple-ii&gt;&lt;graphics&gt;&lt;programming&gt;&lt;memory-layout&gt;&lt;applesoft-basic&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12564" PostTypeId="2" ParentId="12563" CreationDate="2019-10-22T20:08:50.377" Score="3" Body="&lt;p&gt;(Warning, all from Memory without checking any manual)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AFAI read the question, you're using an Apple II with highres graphics from BASIC and did run into memory problems - usually by interference of BASIC memory management with the graphics location. You 'solved' it (well, not rally) by moving to page two, but now you can't write any text.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Problem #1 Text with HGR2&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Your idea to use HGR2 with text is by default incompatible with BASIC, as highres page 2 uses text page 2 for display. This is hard coded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Text page 2 starts at $0800. When adapting Applesoft, Apple did not reserve this area (like with $400..7FF for page 1), but used it for program storage. In other words, BASIC code starts at $800.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make text page 2 usable (and thus HGR2 with text), the BASIC start has to be moved up &lt;em&gt;before&lt;/em&gt; any program is entered or loaded. This can be done by poking the new start value into the BASIC start address at $67/$68. A good new value would be $0C03. So &lt;code&gt;POKE 103,3 : POKE 104,12&lt;/code&gt; will do the trick. As said, this has to be done &lt;em&gt;before&lt;/em&gt; a BASIC program is loaded. Either by hand, or by using a batch file (under DOS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, for activating text page you may need to toggle some additional softswitches - which depends on your program structure.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Problem #2 Use of BASIC and HGR in general&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;(Something you already have stumbled in and 'seemingly' resolved by using HGR2 - except, that only postponed the problem)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the issues of the Apple II design is that graphics memory is located right in the middle of its RAM at $2000 for HGR1 and $4000 for HGR2. Basic programs start usually at $800 and grow upward when editing, while during program execution variables grow from Program End upward as well as downward from RAM end. To solve coexistence of BASIC and graphics screen three possible solutions exist:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Solutions:&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Restrict BASIC to use only RAM until the first (or second) highres page starts.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When using page 1 execute &lt;code&gt;HIMEM:8191&lt;/code&gt;. This leaves 6 KiB for BASIC program and variables.&lt;/li&gt;&#xA;&lt;li&gt;When using page 2 execute &lt;code&gt;HIMEM:16383&lt;/code&gt;. Now 14 KiB are available for BASIC program and variables&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using the the RAM before the highres page for BASIC and everything thereafter for variables&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When using page 1 &lt;code&gt;LOWMEM: 16384&lt;/code&gt; will give 6 KiB to the BASIC program and up to 32 KiB to variables (*1)&lt;/li&gt;&#xA;&lt;li&gt;When using page 2 &lt;code&gt;LOWMEM: 24576&lt;/code&gt; will give 14 KiB to the BASIC program and up to 24 KiB to variables.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Moving all Basic and Variables beyond the highres pages. This is done by poking the new start value into the BASIC start address in $67/$68 _ before_ any program is loaded or written.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When using page 1 &lt;code&gt;POKE 103,0 : POKE 104,64&lt;/code&gt; will leave 32 KiB for BASIC program and variables&lt;/li&gt;&#xA;&lt;li&gt;Then using page 2 &lt;code&gt;POKE 103,0 : POKE 104,96&lt;/code&gt; will leave 24 KiB for BASIC program and variables.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2&gt;Caveats:&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;HIMEM:&lt;/code&gt;and &lt;code&gt;LOWMEM:&lt;/code&gt; can be used within a program, but invalidate all variables, so it should be done right at the program start.&lt;/li&gt;&#xA;&lt;li&gt;Using the LOWMEM solution (#2), will offer the most amount of RAM, but there is no protection against the BASIC code growing into either graphics page, an thus destruct itself when executing graphics commands (*2).&lt;/li&gt;&#xA;&lt;li&gt;Adding a check is possible, but rather complicated, as there is no pointer to check.&lt;/li&gt;&#xA;&lt;li&gt;Poking the programm start address (#3) has to be done before any program is loaded.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Conclusion:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Solution #1 is the most simple but offers the least memory.&#xA;Solution #2 carries a risk of failure but offers the most memory in total.&#xA;Solution #3 offers the most continuous RAM, making coding easy, but needs manual preset&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Recomendation&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I'd start with solution #1 and page one, as it's the most simple. If this really doesn't work out, try the same with HGR2 (*3). Solution #3 is simple a well, and maybe the most fitting, but requires to be run from a batch file. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either way, you need to know what you want to do and what your requirements are.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: If you only want to load a logo, use some Apple II drawing program to create it and simply load it from disk, instead of drawing it from BASIC. It'll only need a simple &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PRINT CHR$(4)&quot;BLOAD LOGO,A$4000&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;from BASIC. No code wasted for generation and quite fast drawn as well. In fact, this can be hidden by only switching to highres after drawing with the appropriate softswitches.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Usually less if some DOS is loaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - As so often, it's a great idea to save any new version before runing - more so if it may be self-destructing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - keep in mind, that HGR2 can not be used in conjunction with text, unless the BASIC start is moved as with solution #3&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-22T21:22:05.810" LastActivityDate="2019-10-22T21:22:05.810" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12565" PostTypeId="2" ParentId="12563" CreationDate="2019-10-23T13:52:25.770" Score="7" Body="&lt;h1&gt;Problem&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Here is a picture (to scale) of how memory is being used in&#xA;units of &quot;pages&quot; (256 bytes) on the Apple 2.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 000000001111111111111111 2222222222222222 3 ...     ... 9&#xA; 89ABCDEF0123456789ABCDEF 0123456789ABCDEF 0 ...     ... 6&#xA;+------------------------+----------------+--------------+&#xA;|Basic:::::::::::::::::::|:::    HGR      |              |&#xA;|Program:::::::::::::::::|:::  Page 1     |              |&#xA;+------------------------+----------------+--------------+&#xA;&amp;lt;-- Low Memory                             High Memory --&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is a zoomed-out view of memory (not to scale):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;+----------+----------+----------+----------+----------+&#xA;|Basic/////:// HGR    :  HGR     : Free     : DOS or   |&#xA;|Program///:// Page 1 :  Page 2  : Memory   : BASIC    |&#xA;+----------+----------+----------+----------+----------+&#xA;$0800      $2000      $4000      $6000      $9600&#xA;\_________/                      \__________/&#xA;6,143 bytes                      13,823 bytes&#xA; ~5 KB                             ~13 KB&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Applesoft BASIC programs starts at memory address $0801 by default.  Your program is so HUGE, that is &gt; 5 KB, that it is spilling over into the memory of the HGR graphics page 1.  When run the the &lt;code&gt;HGR&lt;/code&gt; command literally &quot;clears&quot; the middle of your program and that is why it crashes at line 330.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i.e.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SYNTAX ERROR AT 330&#xA;&#xA;]LIST 330-&#xA;&#xA; 330  HPLOT 114,99 TO 164,99: HPLOT     &#xA;    115,                               &#xA; 65535  h  DATA  DIM  h  DATA           &#xA; 1019 b CAN'T CONTINUE  CAN'T CONTINUE  &#xA;      SPC( L&amp;lt; ABS L: RND                &#xA; 19646                                  &#xA; 0  h  h                                &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You see &quot;junk&quot; because the bytes of the HGR graphics page are being&#xA;(re)interpreted as BASIC tokens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also has a bug where you leave &lt;code&gt;HCOLOR&lt;/code&gt; uninitialized and will use the&#xA;last HCOLOR set. That is easy to fix by adding &lt;code&gt;HCOLOR=3&lt;/code&gt; at the start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can move your program to be above HGR page 1 by telling Applesoft&#xA;where your program now resides at.  You will also need to set the first&#xA;byte to be zero.  By consulting the classic &lt;a href=&quot;http://www.lazilong.com/apple_II/bbros/chart.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Beagle Bros Peeks and Pokes Chart&lt;/a&gt; we see that Zero Page address&#xA;locations 103 and 103 point to the start of the Applesoft BASIC program.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;? PEEK(103)&#xA;1&#xA;? PEEK(104)&#xA;8&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That is, $801, is the default start address as previously mentioned.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Solution 1&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;To tell Applesoft that our programs now starts at $4001 (16385 in decimal) we can execute these commands:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;POKE 103,1:POKE 104,64:POKE 16384,0&#xA;RUN LOST.BAS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Voilà! Your program now runs without crashing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: We also need to set the byte before the start of the program to zero due to a bug/feature of Applesoft BASIC. For anyone curious the zero page variable TXTTAB in &lt;a href=&quot;http://www.txbobsc.com/scsc/scdocumentor/EFEA.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;COLD.START&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;F1B0- 91 67    3550        STA (TXTTAB),Y    FIRST BYTE IN PROGRAM SPACE = 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h1&gt;Solution 2&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;If you don't want to mess around with moving your Applesoft program to be&#xA;&quot;above&quot; the HGR memory to $4000 or $6000 then one solution would to split&#xA;your program into multiple programs that &lt;code&gt;BLOAD&lt;/code&gt; &amp;amp; &lt;code&gt;BSAVE&lt;/code&gt; partial image updates. Basically, (pardon the pun), composite the scene layer by layer, the same way artists due in Photoshop, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i.e.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RUN MAKE.LOST.1.BAS&#xA;RUN MAKE.LOST.2.BAS&#xA;HGR&#xA;BLOAD LOST.HGR,A$2000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can split the program into two like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;File: &lt;code&gt;MAKE.LOST.1.BAS&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;NEW&#xA;5 REM DHARMA INITIATIVE LOGO &#xA;10 HOME&#xA;15 HGR:HCOLOR=3&#xA;20 HPLOT 108,4 TO 170,4 TO 213,47 TO 213,110 to 170,153 TO 107,153 TO 64,110 TO 64,47 TO 107,4&#xA;25 HPLOT 108,5 TO 170,5 TO 212,47 TO 212,110 to 170,152 TO 107,152 TO 65,110 TO 65,47 TO 107,5&#xA;30 HPLOT 108,6 TO 170,6 TO 211,47 TO 211,110 to 170,151 TO 107,151 TO 66,110 TO 66,47 TO 107,6&#xA;31 HPLOT 108,7 TO 170,7 TO 210,47 TO 210,110 to 170,150 TO 107,150 TO 67,110 TO 67,47 TO 107,7&#xA;35 HPLOT 108,8 TO 170,8 TO 209,47 TO 209,110 to 170,149 TO 107,149 TO 68,110 TO 68,47 TO 107,8&#xA;40 HPLOT 108,9 TO 170,9 TO 208,47 TO 208,110 to 170,148 TO 107,148 TO 69,110 TO 69,47 TO 107,9&#xA;45 HPLOT 117,17 TO 160,17 TO 160,18 TO 117,18 TO 117,19 TO 160,19 : HPLOT 159,20 TO 118,20 TO 118,21 TO 159,21 : HPLOT 120,22 TO 157,22&#xA;50 HPLOT 167,21 TO 179,33 : HPLOT 179,34 TO 166,21 : HPLOT 166,22 TO 178,34 : HPLOT 178,35 TO 166,23 : HPLOT 165,23 TO 177,35 : HPLOT 177,36 TO 165,24 : HPLOT 165,25 TO 176,36  &#xA;55 HPLOT 184,38 TO 196,50 : HPLOT 196,51 TO 183,38 : HPLOT 183,39 TO 195,51 : HPLOT 194,51 TO 182,39 : HPLOT 182,40 TO 194,52 : HPLOT 193,52 TO 181,40 : HPLOT 181,41 TO 192,52  &#xA;60 HPLOT 200,57 TO 200,100 TO 199,100 TO 199,57 TO 198,57 TO 198,100 TO 197,99 TO 197,58 TO 196,58 TO 196,99 : HPLOT 195,97 TO 195,60 &#xA;65 HPLOT 197,107 TO 167,137 : HPLOT 166,137 TO 197,106 : HPLOT 196,106 TO 166,136 : HPLOT 166,135 TO 195,106 : HPLOT 195,105 TO 165,135 : HPLOT 165,134 TO 194,105 : HPLOT 193,105 TO 165,133&#xA;70 HPLOT 159,140 TO 141,140 TO 141,139 TO 159,139 TO 159,138 TO 141,138 TO 141,137 TO 158,137 TO 158,136 TO 141,136 : HPLOT 141,135 TO 156,135&#xA;75 HPLOT 135,140 TO 117,140 TO 117,139 TO 135,139 TO 135,138 TO 117,138 TO 118,137 TO 135,137 TO 135,136 TO 118,136 : HPLOT 120,135 TO 135,135 &#xA;80 HPLOT 109,136 TO 97,124 : HPLOT 97,123 TO 110,136 : HPLOT 110,135 TO 98,123 : HPLOT 98,122 TO 110,134 : HPLOT 111,134 TO 99,122 : HPLOT 99,121 TO 111,133 : HPLOT 111,132 TO 100,121 &#xA;85 HPLOT 92,119 TO 80,107 : HPLOT 80,106 TO 93,119 : HPLOT 93,118 TO 81,106 : HPLOT 82,106 TO 94,118 : HPLOT 94,117 TO 82,105 : HPLOT 83,105 TO 95,117 : HPLOT 95,116 TO 84,105 &#xA;90 HPLOT 77,100 TO 77,57 TO 78,57 TO 78,100 TO 79,100 TO 79,57 : HPLOT 80,58 TO 80,99 TO 81,99 TO 81,58 : HPLOT 82,60 TO 82,97    &#xA;95 HPLOT 81,50 TO 93,38 : HPLOT 94,38 TO 81,51 : HPLOT 82,51 TO 94,39 : HPLOT 95,39 TO 83,51 : HPLOT 83,52 TO 95,40 : HPLOT 96,40 TO 84,52 : HPLOT 85,52 TO 96,41    &#xA;100 HPLOT 98,33 TO 110,21 : HPLOT 111,21 TO 98,34 : HPLOT 99,34 TO 111,22 : HPLOT 111,23 TO 99,35 : HPLOT 100,35 TO 112,23 : HPLOT 112,24 TO 100,36 : HPLOT 101,36 TO 112,25&#xA;105 HPLOT 121,26 TO 135,26 TO 135,27 TO 121,27 TO 122,28 TO 135,28 TO 135,29 TO 122,29 TO 123,30 TO 135,30 TO 135,31 TO 123,31  &#xA;110 HPLOT 141,26 TO 156,26 TO 156,27 TO 141,27 TO 141,28 TO 155,28 TO 155,29 TO 141,29 TO 141,30 TO 154,30 TO 154,31 TO 141,31&#xA;115 HPLOT 164,30 TO 174,40 TO 174,41 TO 163,30 TO 163,31 TO 173,41 TO 173,42 TO 163,32 TO 162,32 TO 172,42 TO 172,43 TO 162,33 TO 162,34 TO 171,43&#xA;120 HPLOT 178,44 TO 187,53 TO 187,54 TO 177,44 TO 177,45 TO 186,54 TO 185,54 TO 176,45 TO 176,46 TO 185,55 TO 184,55 TO 175,46 TO 175,47 TO 183,55&#xA;125 HPLOT 191,61 TO 191,96 TO 190,96 TO 190,61 : HPLOT 189,62 TO 189,95 TO 188,95 TO 188,62 : HPLOT 187,63 TO 187,94 TO 186,94 TO 186,63&#xA;130 HPLOT 187,104 TO 163,128 : HPLOT 162,128 TO 187,103 : HPLOT 186,103 TO 162,127 : HPLOT 162,126 TO 185,103 : HPLOT 185,102 TO 161,126 : HPLOT 161,125 TO 184,102 : HPLOT 183,102 TO 161,124&#xA;135 HPLOT 156,131 TO 121,131 TO 121,130 TO 156,130 : HPLOT 155,129 TO 122,129 TO 122,128 TO 155,128 : HPLOT 154,127 TO 123,127 TO 123,126 TO 154,126&#xA;140 HPLOT 113,127 TO 103,117 : HPLOT 103,116 TO 114,127 : HPLOT 114,126 TO 104,116 : HPLOT 104,115 TO 114,125 : HPLOT 115,125 TO 105,115 : HPLOT 105,114 TO 115,124 : HPLOT 115,123 TO 106,114 &#xA;145 HPLOT 99,113 TO 90,104 : HPLOT 90,103 TO 100,113 : HPLOT 100,112 TO 91,103 : HPLOT 92,103 TO 101,112 : HPLOT 101,111 TO 92,102 : HPLOT 93,102 TO 102,111 : HPLOT 102,110 TO 94,102&#xA;150 HPLOT 86,96 TO 86,82 TO 87,82 TO 87,96 : HPLOT 88,95 TO 88,82 TO 89,82 TO 89,95 : HPLOT 90,94 TO 90,82 TO 91,82 TO 91,94 &#xA;155 HPLOT 86,76 TO 86,61 TO 87,61 TO 87,76 TO 88,76 TO 88,62 TO 89,62 TO 89,76 TO 90,76 TO 90,63 TO 91,63 TO 91,76&#xA;160 HPLOT 89,54 TO 113,30 : HPLOT 114,30 TO 89,55 : HPLOT 90,55 TO 114,31 : HPLOT 114,32 TO 91,55 : HPLOT 91,56 TO 115,32 : HPLOT 115,33 TO 92,56 : HPLOT 93,56 TO 115,34&#xA;165 HPLOT 125,34 TO 152,34 TO 152,35 TO 125,35 : HPLOT 126,36 TO 151,36 TO 151,37 TO 126,37 : HPLOT 127,38 TO 150,38 TO 150,39 TO 127,39 &#xA;170 HPLOT 160,38 TO 168,46 : HPLOT 168,47 TO 160,39 : HPLOT 160,40 TO 167,47 : HPLOT 167,48 TO 159,40 : HPLOT 159,41 TO 166,48 : HPLOT 166,49 TO 159,42 : HPLOT 159,43 TO 165,49&#xA;175 HPLOT 172,50 TO 179,57 : HPLOT 178,57 TO 171,50 : HPLOT 171,51 TO 177,57 : HPLOT 177,58 TO 170,51 : HPLOT 170,52 TO 176,58 : HPLOT 175,58 TO 169,52 : HPLOT 169,53 TO 174,58 &#xA;180 HPLOT 183,65 TO 183,76 TO 182,76 TO 182,65 : HPLOT 181,66 TO 181,76 TO 180,76 TO 180,66 : HPLOT 179,67 TO 179,76 TO 178,76 TO 178,67&#xA;185 HPLOT 183,82 TO 183,92 TO 182,92 TO 182,82 TO 181,82 TO 181,91 TO 180,91 TO 180,82 TO 179,82 TO 179,90 TO 178,90 TO 178,82&#xA;190 HPLOT 179,100 TO 160,119 : HPLOT 160,118 TO 178,100 : HPLOT 177,100 TO 160,117 : HPLOT 159,117 TO 177,99 : HPLOT 176,99 TO 159,116 : HPLOT 159,115 TO 175,99 : HPLOT 174,99 TO 159,114&#xA;195 HPLOT 152,123 TO 141,123 TO 141,122 TO 152,122 : HPLOT 151,121 TO 141,121 TO 141,120 TO 151,120 : HPLOT 150,119 TO 141,119 TO 141,118 TO 150,118&#xA;200 HPLOT 135,123 TO 125,123 TO 125,122 TO 135,122 TO 135,121 TO 126,121 TO 126,120 TO 135,120 TO 135,119 TO 127,119 TO 127,118 TO 135,118 &#xA;205 HPLOT 117,119 TO 98,100 : HPLOT 99,100 TO 117,118 : HPLOT 117,117 TO 100,100 : HPLOT 100,99 TO 118,117 : HPLOT 118,116 TO 101,99 : HPLOT 102,99 TO 118,115 : HPLOT 118,114 TO 103,99&#xA;210 HPLOT 94,92 TO 94,82 TO 95,82 TO 95,92 : HPLOT 96,91 TO 96,82 TO 97,82 TO 97,91 : HPLOT 98,90 TO 98,82 TO 99,82 TO 99,90&#xA;215 HPLOT 94,76 TO 94,65 TO 95,65 TO 95,76 TO 96,76 TO 96,66 TO 97,66 TO 97,76 TO 98,76 TO 98,67 TO 99,67 TO 99,76&#xA;220 HPLOT 97,58 TO 116,39 : HPLOT 116,40 TO 98,58 : HPLOT 99,58 TO 116,41 : HPLOT 117,41 TO 99,59 : HPLOT 100,59 TO 117,42 : HPLOT 117,43 TO 101,59 : HPLOT 102,59 TO 117,44 &#xA;221 PRINT CHR$(4)&quot;BSAVE LOST.HGR,A$2000,L$1FF8&quot;&#xA;222 END&#xA;SAVE MAKE.LOST.1.BAS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;File: &lt;code&gt;MAKE.LOST.2.BAS&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;NEW&#xA;223 HGR:HCOLOR=3&#xA;224 PRINT CHR$(4)&quot;BLOAD LOST.HGR,A$2000&quot;&#xA;225 REM DHARMA LOGO CORE&#xA;230 HPLOT 135,46 TO 143,46 : HPLOT 130,47 TO 148,47 : HPLOT 127,48 TO 151,48 : HPLOT 125,49 TO 153,49 : HPLOT 124,50 TO 155,50 : HPLOT 122,51 TO 156,51 : HPLOT 120,52 TO 158,52&#xA;235 HPLOT 119,53 TO 160,53 : HPLOT 118,54 TO 160,54 : HPLOT 117,55 TO 161,55 : HPLOT 116,56 TO 162,56 : HPLOT 115,57 TO 163,57 : HPLOT 114,58 TO 164,58 : HPLOT 114,59 TO 164,59&#xA;240 HPLOT 113,60 TO 165,60 : HPLOT 112,61 TO 166,61 : HPLOT 112,62 TO 166,62 : HPLOT 111,63 TO 167,63 : HPLOT 111,64 TO 167,64 : HPLOT 110,65 TO 168,65 : HPLOT 109,66 TO 168,66&#xA;245 HPLOT 109,67 TO 169,67 : HPLOT 109,68 TO 169,68 : HPLOT 109,69 TO 169,69 : HPLOT 108,70 TO 170,70 : HPLOT 108,71 TO 170,71 : HPLOT 108,72 TO 170,72 : HPLOT 107,73 TO 170,73&#xA;250 HPLOT 107,74 TO 112,74 : HPLOT 119,74 TO 122,74 : HPLOT 124,74 TO 127,74 : HPLOT 129,74 TO 133,74 : HPLOT 136,74 TO 140,74 : HPLOT 146,74 TO 171,74&#xA;255 HPLOT 107,75 TO 112,75 : HCOLOR = 0 : HPLOT 112,75 : HCOLOR = 3: HPLOT 121,75 : HPLOT 125,75 TO 126,75 : HPLOT 129,75 TO 132,75 : HPLOT 136,75 TO 139,75 : HPLOT 148,75 TO 149,75&#xA;256 HPLOT 159,75 TO 162,75 : HPLOT 151,75 TO 156,75 : HPLOT 165,75 TO 171,75 &#xA;260 HPLOT 107,76 TO 111,76 : HPLOT 115,76 TO 117,76 : HPLOT 121,76 : HPLOT 125,76 TO 126,76 : HPLOT 129,76 TO 132,76 : HPLOT 137,76 TO 139,76 : HPLOT 142,76 TO 145,76 : HPLOT 148,76 TO 149,76 : HPLOT 152,76 TO 155,76 &#xA;265 HPLOT 159,76 TO 161,76 : HPLOT 166,76 TO 171,76&#xA;270 HPLOT 107,77 TO 111,77 : HPLOT 115,77 TO 118,77 : HPLOT 121,77 : HPLOT 125,77 TO 126,77 : HPLOT 129,77 TO 131,77 : HPLOT 134,77 TO 135,77 : HPLOT 138,77 TO 139,77 : HPLOT 142,77 TO 144,77 : HPLOT 148,77 TO 149,77 &#xA;275 HPLOT 153,77 TO 154,77 : HPLOT 159,77 TO 160,77 : HPLOT 163,77 TO 164,77 : HPLOT 166,77 TO 171,77&#xA;280 HPLOT 107,78 TO 111,78 : HPLOT 115,78 TO 118,78 : HPLOT 121,78 : HPLOT 129,78 TO 131,78 : HPLOT 134,78 TO 135,78 : HPLOT 138,78 TO 139,78 : HPLOT 147,78 TO 149,78 : HPLOT 159,78 TO 160,78 : HPLOT 167,78 TO 171,78&#xA;285 HPLOT 107,79 TO 111,79 : HPLOT 115,79 TO 117,79 : HPLOT 121,79 : HPLOT 129,79 TO 130,79 : HPLOT 139,79 : HPLOT 146,79 TO 149,79 : HPLOT 152,79 : HPLOT 156,79 : HPLOT 159,79 : HPLOT 167,79 TO 171,79&#xA;290 HPLOT 107,80 TO 111,80 : HPLOT 120,80 TO 121,80 : HPLOT 125,80 TO 126,80 : HPLOT 129,80 : HPLOT 139,80 : HPLOT 142,80 TO 143,80 : HPLOT 148,80 TO 149,80 : HPLOT 152,80 TO 153,80 : HPLOT 155,80 TO 156,80 : HPLOT 159,80&#xA;295 HPLOT 162,80 TO 165,80 : HPLOT 168,80 TO 171,80 &#xA;300 HPLOT 107,81 TO 111,81 : HPLOT 119,81 TO 121,81 : HPLOT 125,81 TO 126,81 : HPLOT 129,81 : HPLOT 133,81 TO 136,81 : HPLOT 139,81 : HPLOT 142,81 TO 144,81 : HPLOT 149,81 : HPLOT 152,81 TO 156,81 : HPLOT 159,81 &#xA;305 HPLOT 162,81 TO 165,81 : HPLOT 169,81 TO 171,81 &#xA;310 HPLOT 107,82 TO 111,82 : HPLOT 117,82 TO 122,82 : HPLOT 124,82 TO 127,82 : HPLOT 129,82 : HPLOT 132,82 TO 137,82 : HPLOT 139,82 : HPLOT 142,82 TO 145,82 : HPLOT 149,82 : HPLOT 152,82 TO 156,82 : HPLOT 159,82 &#xA;315 HPLOT 161,82 TO 166,82 : HPLOT 169,82 TO 171,82 &#xA;320 HPLOT 107,83 TO 171,83 : HPLOT 108,84 TO 170,84 : HPLOT 108,85 TO 170,85 : HPLOT 108,86 TO 170,86 : HPLOT 108,87 TO 170,87 : HPLOT 108,88 TO 169,88 : HPLOT 109,89 TO 169,89 : HPLOT 109,90 TO 169,90     &#xA;325 HPLOT 109,91 TO 169,91 : HPLOT 110,92 TO 168,92 : HPLOT 110,93 TO 168,93 : HPLOT 111,94 TO 167,94 : HPLOT 112,95 TO 166,95 : HPLOT 112,96 TO 166,96 : HPLOT 113,97 TO 165,97 : HPLOT 114,98 TO 164,98  &#xA;330 HPLOT 114,99 TO 164,99 : HPLOT 115,100 TO 163,100 : HPLOT 116,101 TO 162,101 : HPLOT 117,102 TO 162,102 : HPLOT 118,103 TO 160,103 : HPLOT 119,104 TO 159,104 : HPLOT 121,105 TO 157,105  &#xA;335 HPLOT 122,106 TO 156,106 : HPLOT 124,107 TO 154,107 : HPLOT 125,108 TO 153,108 : HPLOT 127,109 TO 151,109 : HPLOT 131,110 TO 148,110 : HPLOT 135,111 TO 143,111 &#xA;339 PRINT CHR$(4)&quot;BSAVE LOST.HGR,A$2000,L$1FF8&quot;&#xA;SAVE MAKE.LOST.2.BAS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Sooner or later you WILL run out of memory.  That leads us to the next solution.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Solution 3&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;If we take a step back and apply a &lt;a href=&quot;https://en.wikipedia.org/wiki/Data-oriented_design&quot; rel=&quot;nofollow noreferrer&quot;&gt;Data-Orientated Design&lt;/a&gt; methodology, of which &lt;a href=&quot;https://en.wikipedia.org/wiki/Data-driven_programming&quot; rel=&quot;nofollow noreferrer&quot;&gt;Data-driven programming&lt;/a&gt; is a subset of, we see that the &lt;strong&gt;root problem&lt;/strong&gt; is ASCII is &lt;strong&gt;horribly&lt;/strong&gt; &lt;em&gt;inefficient at storing numeric data!&lt;/em&gt;  A single coordinate takes up anywhere from 3 to 4 bytes!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e.g.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;HPLOT 123  ,   23 TO&#xA;      \_/ \_/ \_/ \_/&#xA;       3   1   2   1  Bytes&#xA;&#xA;Total bytes for a pair: ~8 bytes (depending if the Y coordinate has 2 or 3 digits.)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How do we compress this data?  Should we use delta compression? LZ4?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first rule of DOD is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;KNOW THY DATA&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;By examining all the X and Y coordinates we see that each number is less then 256 due to the Apple's HGR screen being 280 x 192 and us never plotting beyond column 256.  This means that we could simply store each number in binary as an 8-bit number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, let's convert this into a data-driven program:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;READ and DATA&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I've added extra indentation to make it easier to spot the &quot;logical groupings&quot;.  (Whitespace doesn't effect functionality in Applesoft BASIC however whitespace &lt;em&gt;after&lt;/em&gt; a &lt;code&gt;DATA&lt;/code&gt; statement IS stored thus it has been removed since it is completely redundant and just wastes memory.)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;NEW&#xA;  0 HGR:HCOLOR=3:GOTO 20&#xA;  1 FOR J=1 TO N:READ X,Y:HPLOT X,Y:FOR I=1 TO M:READ X,Y:HPLOT TO X,Y:NEXT:NEXT:RETURN&#xA;  2 M= 1:GOTO 1&#xA;  4 M= 3:GOTO 1&#xA;  5 REM DHARMA INITIATIVE LOGO &#xA;  6 M= 5:GOTO 1&#xA;  9 M= 8:GOTO 1&#xA; 10 M= 9:N=1:GOTO 1&#xA; 12 M=11:N=1:GOTO 1&#xA; 14 M=13:N=1:GOTO 1&#xA; 20 N= 6:GOSUB  9:DATA108,4,170,4,213,47,213,110,170,153,107,153,64,110,64,47,107,4,108,5,170,5,212,47,212,110,170,152,107,152,65,110,65,47,107,5&#xA; 30               DATA108,6,170,6,211,47,211,110,170,151,107,151,66,110,66,47,107,6,108,7,170,7,210,47,210,110,170,150,107,150,67,110,67,47,107,7&#xA; 35               DATA108,8,170,8,209,47,209,110,170,149,107,149,68,110,68,47,107,8,108,9,170,9,208,47,208,110,170,148,107,148,69,110,69,47,107,9&#xA;&#xA; 45 N= 1:GOSUB  6:DATA117,17,160,17,160,18,117,18,117,19,160,19 &#xA; 46 N= 1:GOSUB  4:DATA159,20,118,20,118,21,159,21&#xA; 47 N=15:GOSUB  2:DATA120,22,157,22,167,21,179,33,179,34,166,21,166,22,178,34,178,35,166,23,165,23,177,35,177,36,165,24,165,25,176,36&#xA; 55               DATA184,38,196,50,196,51,183,38,183,39,195,51,194,51,182,39,182,40,194,52,193,52,181,40,181,41,192,52  &#xA; 60      GOSUB 10:DATA200,57,200,100,199,100,199,57,198,57,198,100,197,99,197,58,196,58,196,99&#xA; 61 N= 8:GOSUB  2:DATA195,97,195,60&#xA; 65               DATA197,107,167,137,166,137,197,106,196,106,166,136,166,135,195,106,195,105,165,135,165,134,194,105,193,105,165,133&#xA; 70      GOSUB 10:DATA159,140,141,140,141,139,159,139,159,138,141,138,141,137,158,137,158,136,141,136&#xA; 71 N= 1:GOSUB  2:DATA141,135,156,135&#xA; 75      GOSUB 10:DATA135,140,117,140,117,139,135,139,135,138,117,138,118,137,135,137,135,136,118,136&#xA; 76 N=15:GOSUB  2:DATA120,135,135,135&#xA; 80               DATA109,136,97,124,97,123,110,136,110,135,98,123,98,122,110,134,111,134,99,122,99,121,111,133,111,132,100,121 &#xA; 85               DATA92,119,80,107,80,106,93,119,93,118,81,106,82,106,94,118,94,117,82,105,83,105,95,117,95,116,84,105 &#xA; 90 N= 1:GOSUB  6:DATA77,100,77,57,78,57,78,100,79,100,79,57&#xA; 91 N= 1:GOSUB  4:DATA80,58,80,99,81,99,81,58&#xA; 92 N=15:GOSUB  2:DATA82,60,82,97,81,50,93,38,94,38,81,51,82,51,94,39,95,39,83,51,83,52,95,40,96,40,84,52,85,52,96,41    &#xA;100               DATA98,33,110,21,111,21,98,34,99,34,111,22,111,23,99,35,100,35,112,23,112,24,100,36,101,36,112,25&#xA;&#xA;105      GOSUB 12:DATA121,26,135,26,135,27,121,27,122,28,135,28,135,29,122,29,123,30,135,30,135,31,123,31  &#xA;110      GOSUB 12:DATA141,26,156,26,156,27,141,27,141,28,155,28,155,29,141,29,141,30,154,30,154,31,141,31&#xA;115      GOSUB 14:DATA164,30,174,40,174,41,163,30,163,31,173,41,173,42,163,32,162,32,172,42,172,43,162,33,162,34,171,43&#xA;120      GOSUB 14:DATA178,44,187,53,187,54,177,44,177,45,186,54,185,54,176,45,176,46,185,55,184,55,175,46,175,47,183,55&#xA;125 N= 3:GOSUB  4:DATA191,61,191,96,190,96,190,61,189,62,189,95,188,95,188,62,187,63,187,94,186,94,186,63&#xA;130 N= 7:GOSUB  2:DATA187,104,163,128,162,128,187,103,186,103,162,127,162,126,185,103,185,102,161,126,161,125,184,102,183,102,161,124&#xA;135 N= 3:GOSUB  4:DATA156,131,121,131,121,130,156,130,155,129,122,129,122,128,155,128,154,127,123,127,123,126,154,126&#xA;140 N=14:GOSUB  2:DATA113,127,103,117,103,116,114,127,114,126,104,116,104,115,114,125,115,125,105,115,105,114,115,124,115,123,106,114 &#xA;145               DATA99,113,90,104,90,103,100,113,100,112,91,103,92,103,101,112,101,111,92,102,93,102,102,111,102,110,94,102&#xA;150 N= 3:GOSUB  4:DATA86,96,86,82,87,82,87,96,88,95,88,82,89,82,89,95,90,94,90,82,91,82,91,94 &#xA;155      GOSUB 12:DATA86,76,86,61,87,61,87,76,88,76,88,62,89,62,89,76,90,76,90,63,91,63,91,76&#xA;160 N= 7:GOSUB  2:DATA89,54,113,30,114,30,89,55,90,55,114,31,114,32,91,55,91,56,115,32,115,33,92,56,93,56,115,34&#xA;&#xA;165 N= 3:GOSUB  4:DATA125,34,152,34,152,35,125,35,126,36,151,36,151,37,126,37,127,38,150,38,150,39,127,39&#xA;170 N=14:GOSUB  2:DATA160,38,168,46,168,47,160,39,160,40,167,47,167,48,159,40,159,41,166,48,166,49,159,42,159,43,165,49&#xA;175               DATA172,50,179,57,178,57,171,50,171,51,177,57,177,58,170,51,170,52,176,58,175,58,169,52,169,53,174,58 &#xA;180 N= 3:GOSUB  4:DATA183,65,183,76,182,76,182,65,181,66,181,76,180,76,180,66,179,67,179,76,178,76,178,67&#xA;185      GOSUB 12:DATA183,82,183,92,182,92,182,82,181,82,181,91,180,91,180,82,179,82,179,90,178,90,178,82&#xA;190 N= 7:GOSUB  2:DATA179,100,160,119,160,118,178,100,177,100,160,117,159,117,177,99,176,99,159,116,159,115,175,99,174,99,159,114&#xA;195 N= 3:GOSUB  4:DATA152,123,141,123,141,122,152,122,151,121,141,121,141,120,151,120,150,119,141,119,141,118,150,118&#xA;200      GOSUB 12:DATA135,123,125,123,125,122,135,122,135,121,126,121,126,120,135,120,135,119,127,119,127,118,135,118&#xA;205 N= 7:GOSUB  2:DATA117,119,98,100,99,100,117,118,117,117,100,100,100,99,118,117,118,116,101,99,102,99,118,115,118,114,103,99&#xA;210 N= 3:GOSUB  4:DATA94,92,94,82,95,82,95,92,96,91,96,82,97,82,97,91,98,90,98,82,99,82,99,90&#xA;215      GOSUB 12:DATA94,76,94,65,95,65,95,76,96,76,96,66,97,66,97,76,98,76,98,67,99,67,99,76&#xA;220 N= 7:GOSUB  2:DATA97,58,116,39,116,40,98,58,99,58,116,41,117,41,99,59,100,59,117,42,117,43,101,59,102,59,117,44 &#xA;SAVE LOST.DATA.BAS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;After we run it to verify it produces the same output (*) we can trivially convert this into an &quot;encoder&quot;.  We'll read the raw data and poke the binary numbers into memory starting at HGR page 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(*) &lt;strong&gt;NOTE:&lt;/strong&gt; Converting lines 225-335 of the original program (&quot;DHARMA LOGO CORE&quot;) is left as an exercise for the reader.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We'll also need to store a 2-byte header:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;M = number of X,Y pairs to HPLOT TO, and&#xA;N = number of &quot;lines&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Lastly, we'll mark the end-of-data with a double zero sentinel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to the data-driven program we only need to make 3 small line changes to convert it to an encoder:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  0 A=16384:P=A:GOTO 19&#xA;  1 X=M:Y=N:GOSUB 3:FOR J=1 TO N:READ X,Y:GOSUB 3:FOR I=1 TO M:READ X,Y:GOSUB 3:NEXT:NEXT:RETURN&#xA;  3 POKE P,X:POKE P+1,Y:P=P+2:RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2&gt;Encoder&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Here is the complete program of the encoder:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;NEW&#xA;  0 A=16384:P=A:GOTO 20&#xA;  1 X=M:Y=N:GOSUB 3:FOR J=1 TO N:READ X,Y:GOSUB 3:FOR I=1 TO M:READ X,Y:GOSUB 3:NEXT:NEXT:RETURN&#xA;  2 M= 1:GOTO 1&#xA;  3 POKE P,X:POKE P+1,Y:P=P+2:RETURN&#xA;  4 M= 3:GOTO 1&#xA;  6 M= 5:GOTO 1&#xA;  9 M= 8:GOTO 1&#xA; 10 M= 9:N=1:GOTO 1&#xA; 12 M=11:N=1:GOTO 1&#xA; 14 M=13:N=1:GOTO 1&#xA; 20 N= 6:GOSUB  9:DATA108,4,170,4,213,47,213,110,170,153,107,153,64,110,64,47,107,4,108,5,170,5,212,47,212,110,170,152,107,152,65,110,65,47,107,5&#xA; 30               DATA108,6,170,6,211,47,211,110,170,151,107,151,66,110,66,47,107,6,108,7,170,7,210,47,210,110,170,150,107,150,67,110,67,47,107,7&#xA; 35               DATA108,8,170,8,209,47,209,110,170,149,107,149,68,110,68,47,107,8,108,9,170,9,208,47,208,110,170,148,107,148,69,110,69,47,107,9&#xA;&#xA; 45 N= 1:GOSUB  6:DATA117,17,160,17,160,18,117,18,117,19,160,19 &#xA; 46 N= 1:GOSUB  4:DATA159,20,118,20,118,21,159,21&#xA; 47 N=15:GOSUB  2:DATA120,22,157,22,167,21,179,33,179,34,166,21,166,22,178,34,178,35,166,23,165,23,177,35,177,36,165,24,165,25,176,36&#xA; 55               DATA184,38,196,50,196,51,183,38,183,39,195,51,194,51,182,39,182,40,194,52,193,52,181,40,181,41,192,52  &#xA; 60      GOSUB 10:DATA200,57,200,100,199,100,199,57,198,57,198,100,197,99,197,58,196,58,196,99&#xA; 61 N= 8:GOSUB  2:DATA195,97,195,60&#xA; 65               DATA197,107,167,137,166,137,197,106,196,106,166,136,166,135,195,106,195,105,165,135,165,134,194,105,193,105,165,133&#xA; 70      GOSUB 10:DATA159,140,141,140,141,139,159,139,159,138,141,138,141,137,158,137,158,136,141,136&#xA; 71 N= 1:GOSUB  2:DATA141,135,156,135&#xA; 75      GOSUB 10:DATA135,140,117,140,117,139,135,139,135,138,117,138,118,137,135,137,135,136,118,136&#xA; 76 N=15:GOSUB  2:DATA120,135,135,135&#xA; 80               DATA109,136,97,124,97,123,110,136,110,135,98,123,98,122,110,134,111,134,99,122,99,121,111,133,111,132,100,121 &#xA; 85               DATA92,119,80,107,80,106,93,119,93,118,81,106,82,106,94,118,94,117,82,105,83,105,95,117,95,116,84,105 &#xA; 90 N= 1:GOSUB  6:DATA77,100,77,57,78,57,78,100,79,100,79,57&#xA; 91 N= 1:GOSUB  4:DATA80,58,80,99,81,99,81,58&#xA; 92 N=15:GOSUB  2:DATA82,60,82,97,81,50,93,38,94,38,81,51,82,51,94,39,95,39,83,51,83,52,95,40,96,40,84,52,85,52,96,41    &#xA;100               DATA98,33,110,21,111,21,98,34,99,34,111,22,111,23,99,35,100,35,112,23,112,24,100,36,101,36,112,25&#xA;&#xA;105      GOSUB 12:DATA121,26,135,26,135,27,121,27,122,28,135,28,135,29,122,29,123,30,135,30,135,31,123,31  &#xA;110      GOSUB 12:DATA141,26,156,26,156,27,141,27,141,28,155,28,155,29,141,29,141,30,154,30,154,31,141,31&#xA;115      GOSUB 14:DATA164,30,174,40,174,41,163,30,163,31,173,41,173,42,163,32,162,32,172,42,172,43,162,33,162,34,171,43&#xA;120      GOSUB 14:DATA178,44,187,53,187,54,177,44,177,45,186,54,185,54,176,45,176,46,185,55,184,55,175,46,175,47,183,55&#xA;125 N= 3:GOSUB  4:DATA191,61,191,96,190,96,190,61,189,62,189,95,188,95,188,62,187,63,187,94,186,94,186,63&#xA;130 N= 7:GOSUB  2:DATA187,104,163,128,162,128,187,103,186,103,162,127,162,126,185,103,185,102,161,126,161,125,184,102,183,102,161,124&#xA;135 N= 3:GOSUB  4:DATA156,131,121,131,121,130,156,130,155,129,122,129,122,128,155,128,154,127,123,127,123,126,154,126&#xA;140 N=14:GOSUB  2:DATA113,127,103,117,103,116,114,127,114,126,104,116,104,115,114,125,115,125,105,115,105,114,115,124,115,123,106,114 &#xA;145               DATA99,113,90,104,90,103,100,113,100,112,91,103,92,103,101,112,101,111,92,102,93,102,102,111,102,110,94,102&#xA;150 N= 3:GOSUB  4:DATA86,96,86,82,87,82,87,96,88,95,88,82,89,82,89,95,90,94,90,82,91,82,91,94 &#xA;155      GOSUB 12:DATA86,76,86,61,87,61,87,76,88,76,88,62,89,62,89,76,90,76,90,63,91,63,91,76&#xA;160 N= 7:GOSUB  2:DATA89,54,113,30,114,30,89,55,90,55,114,31,114,32,91,55,91,56,115,32,115,33,92,56,93,56,115,34&#xA;&#xA;165 N= 3:GOSUB  4:DATA125,34,152,34,152,35,125,35,126,36,151,36,151,37,126,37,127,38,150,38,150,39,127,39&#xA;170 N=14:GOSUB  2:DATA160,38,168,46,168,47,160,39,160,40,167,47,167,48,159,40,159,41,166,48,166,49,159,42,159,43,165,49&#xA;175               DATA172,50,179,57,178,57,171,50,171,51,177,57,177,58,170,51,170,52,176,58,175,58,169,52,169,53,174,58 &#xA;180 N= 3:GOSUB  4:DATA183,65,183,76,182,76,182,65,181,66,181,76,180,76,180,66,179,67,179,76,178,76,178,67&#xA;185      GOSUB 12:DATA183,82,183,92,182,92,182,82,181,82,181,91,180,91,180,82,179,82,179,90,178,90,178,82&#xA;190 N= 7:GOSUB  2:DATA179,100,160,119,160,118,178,100,177,100,160,117,159,117,177,99,176,99,159,116,159,115,175,99,174,99,159,114&#xA;195 N= 3:GOSUB  4:DATA152,123,141,123,141,122,152,122,151,121,141,121,141,120,151,120,150,119,141,119,141,118,150,118&#xA;200      GOSUB 12:DATA135,123,125,123,125,122,135,122,135,121,126,121,126,120,135,120,135,119,127,119,127,118,135,118&#xA;205 N= 7:GOSUB  2:DATA117,119,98,100,99,100,117,118,117,117,100,100,100,99,118,117,118,116,101,99,102,99,118,115,118,114,103,99&#xA;210 N= 3:GOSUB  4:DATA94,92,94,82,95,82,95,92,96,91,96,82,97,82,97,91,98,90,98,82,99,82,99,90&#xA;215      GOSUB 12:DATA94,76,94,65,95,65,95,76,96,76,96,66,97,66,97,76,98,76,98,67,99,67,99,76&#xA;220 N= 7:GOSUB  2:DATA97,58,116,39,116,40,98,58,99,58,116,41,117,41,99,59,100,59,117,42,117,43,101,59,102,59,117,44 &#xA;225 X=0:Y=0:GOSUB 3:PRINT CHR$(4)&quot;BSAVE LOST.BIN,A&quot;;A;&quot;,L&quot;;(P-A):END&#xA;SAVE LOST.ENCODE.BAS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2&gt;Decoder&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Our decoder becomes extremely trivial.  The other good news is that we keep the spiral drawing effect!  (That was an assumption that was never originally specified in the question.)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  NEW&#xA;   0 A=16384:HGR:HCOLOR=3:GOTO 10&#xA;   1 X=PEEK(A):Y=PEEK(A+1):A=A+2:RETURN     &#xA;  10 PRINT CHR$(4)&quot;BLOAD LOST.BIN,A&quot;;A&#xA;  20 GOSUB 1:IF X = 0 THEN END&#xA;  30 M=X:N=Y:FOR J=1 TO N:GOSUB 1:HPLOT X,Y:FOR I=1 TO M:GOSUB 1:HPLOT TO X,Y:NEXT:NEXT:GOTO 20&#xA;  SAVE LOST.DECODE.BAS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h1&gt;Results&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;If we SAVE lines 5-220 of the original program as &lt;code&gt;LOST.1.BAS&lt;/code&gt; then under DOS 3.3 we notice it takes a whopping 17 sectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our binary file &lt;code&gt;LOST.BIN&lt;/code&gt; takes 6 sectors while our &lt;code&gt;LOST.DECODE.BAS&lt;/code&gt; takes 2 sectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's a savings of around 100*(17-8)/17 = 52% smaller!&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Conclusions&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do NOT use ASCII to store numeric data.  It significantly bloats the data.&lt;/li&gt;&#xA;&lt;li&gt;Be mindful of the platform you are developing on.&lt;/li&gt;&#xA;&lt;li&gt;Analyse the data. Look at how the data is being used.&lt;/li&gt;&#xA;&lt;li&gt;Convert redundant code into data&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;NOTE:&lt;/em&gt; With AppleWin you can use &lt;code&gt;Shift-Insert&lt;/code&gt; to paste text into the emulator.&lt;/p&gt;&#xA;" OwnerUserId="31" LastEditorUserId="31" LastEditDate="2019-10-24T19:32:50.020" LastActivityDate="2019-10-24T19:32:50.020" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12566" PostTypeId="2" ParentId="12563" CreationDate="2019-10-24T00:52:33.163" Score="3" Body="&lt;p&gt;Here is a simple way for you to get your program working and continue working on it (for now).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Save your existing DHARMA INITIATIVE LOGO program to disk as a file called MAIN.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SAVE MAIN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now type this program and save it as START:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 POKE 103,1:POKE 104,64:POKE 16384,0&#xA;20 PRINT CHR$(4);&quot;RUN MAIN&quot;&#xA;SAVE START&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When you run START it will set up and run the MAIN program at $4000, above HGR1.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RUN START&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For now this will get you going, but you'll run into problems again when your program gets big enough to hit DOS up around $9600. Your best bet would be to have multiple programs and RUN them, but under DOS you'll lose the values of variables. You can either use certain utilities to help, or you could use PRODOS and use the CHAIN command. Anyway, now you have time to research those.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2019-10-24T01:03:04.550" LastActivityDate="2019-10-24T01:03:04.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12567" PostTypeId="1" AcceptedAnswerId="12569" CreationDate="2019-10-24T13:43:11.087" Score="9" ViewCount="522" Body="&lt;p&gt;I've heard the term 'DMA' being used a lot in reference to older consoles. My very basic understanding is that it's a way for the console to access memory directly. But directly as apposed to what? isn't RAM always accessed directly?&lt;/p&gt;&#xA;" OwnerUserId="10751" LastActivityDate="2020-02-07T21:42:38.467" Title="what is DMA and how does it work?" Tags="&lt;memory&gt;&lt;ram&gt;&lt;dma&gt;" AnswerCount="3" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12568" PostTypeId="2" ParentId="12567" CreationDate="2019-10-24T13:49:43.627" Score="4" Body="&lt;p&gt;(Too long for a comment)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DMA is not in any way console or retro computing related. It is actual technology and today used more than ever. Each of your disk reads and writes, each transfer to your graphics or network card will usually involve DMA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DMA describes the access of components, other than the CPU, on (a CPU's) memory. In general it's the ability to run a multi master bus system. Further information can be found at the corresponding &lt;a href=&quot;https://en.wikipedia.org/wiki/Direct_memory_access&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki page&lt;/a&gt; and next to endless other resources on the web.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-24T13:51:55.883" LastActivityDate="2019-10-24T13:51:55.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12569" PostTypeId="2" ParentId="12567" CreationDate="2019-10-24T13:54:03.313" Score="10" Body="&lt;p&gt;&quot;The console&quot; (or other computer) is made up of various parts, including the processor, the memory, and peripherals such as video display controllers, I/O chips to read from a keyboard or joystick, disk controllers, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When using &quot;programmed I/O,&quot; the CPU reads data from or writes data to a peripheral and, if the data need to be stored in memory, the CPU does that as well. So the CPU might read a byte from the disk controller, store that byte into a buffer in memory, and repeat that to read an entire sector from disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DMA allows the CPU to be paused and/or disconnected from the memory bus so that peripherals can directly read data from or write data to the memory without the involvement of the CPU. Thus, instead of the example given above, a disk controller could write its bytes directly to memory while the CPU waits, which is faster because rather than &quot;read byte then write byte&quot; by the CPU there's just &quot;write byte&quot; by the peripheral.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-10-24T13:54:03.313" CommentCount="3" CommunityOwnedDate="2019-10-25T06:39:48.310" ContentLicense="CC BY-SA 4.0" />
  <row Id="12570" PostTypeId="1" AcceptedAnswerId="12571" CreationDate="2019-10-24T14:16:11.627" Score="38" ViewCount="3150" Body="&lt;p&gt;I just got a Z84C0020PEC and wired it up to test it, using this circuit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ympz1.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ympz1.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except that I've added LEDs to A0 through A9.  It appears that A0 through A6 operate correctly, but A7 though A9 (I've not tested the rest of the upper bits) are only active on the clock edge.  That is, those LEDs flash when they should be staying on.  Is this normal behavior?  Do I have a bad CPU?&lt;/p&gt;&#xA;" OwnerUserId="6751" LastActivityDate="2020-09-23T15:01:22.920" Title="Z80 CPU address lines not stable" Tags="&lt;z80&gt;&lt;cpu&gt;&lt;hardware-testing&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12571" PostTypeId="2" ParentId="12570" CreationDate="2019-10-24T14:47:38.827" Score="44" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;It appears that A0 through A6 operate correctly, but A7 though A9 (I've not tested the rest of the upper bits) are only active on the clock edge.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Doesn't that exactly look like refresh cycles? :))&lt;/p&gt;&#xA;&lt;p&gt;Basic Z80 bus behaviour, here especially the M1 cycle:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Z80 timing is structured in Machine cycles (M-states).&lt;/li&gt;&#xA;&lt;li&gt;A machine cycle consists of several Clock cycles (T-states).&lt;/li&gt;&#xA;&lt;li&gt;The first M cycle of any operation is M1 (signalled as such on the /M1 pin).&lt;/li&gt;&#xA;&lt;li&gt;A M1 cycle is done whenever an opcode is read.&lt;/li&gt;&#xA;&lt;li&gt;The M1 cycle takes 4 clock cycles.&lt;/li&gt;&#xA;&lt;li&gt;The M1 cycle consists of two memory operations: Opcode access and refresh.&lt;/li&gt;&#xA;&lt;li&gt;During the first two clocks (T1, T2) of an M1 cycle the PC gets outputted on A0..A15 and the opcode gets fetched.&lt;/li&gt;&#xA;&lt;li&gt;A refresh is done during the next two cycles (T3, T4) of a M1 cycle.&lt;/li&gt;&#xA;&lt;li&gt;During a refresh the 8 bits of the refresh counter (&lt;code&gt;R&lt;/code&gt; register) get outputted on A0..A7(*1).&lt;/li&gt;&#xA;&lt;li&gt;Only the lower 7 bits of &lt;code&gt;R&lt;/code&gt; are a counter, bit 7 is not modified (*2).&lt;/li&gt;&#xA;&lt;li&gt;A8..A15 is not valid (*3).&lt;/li&gt;&#xA;&lt;li&gt;During M1 the &lt;code&gt;R&lt;/code&gt; register gets incremented by 1.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Implications for your setup&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A NOP features a single machine cycle.&lt;/li&gt;&#xA;&lt;li&gt;It is always a M1 cycle&lt;/li&gt;&#xA;&lt;li&gt;Your 'program' thus consists of only M1 cycles.&lt;/li&gt;&#xA;&lt;li&gt;It takes 4 clock cycles to execute.&lt;/li&gt;&#xA;&lt;li&gt;During the first two clock cycles the &lt;code&gt;PC&lt;/code&gt; gets outputted.&lt;/li&gt;&#xA;&lt;li&gt;During the next two clock cycles &lt;code&gt;R&lt;/code&gt; get outputted (*4).&lt;/li&gt;&#xA;&lt;li&gt;Both, &lt;code&gt;PC&lt;/code&gt; and &lt;code&gt;R&lt;/code&gt; get incremented with each M1 cycle.&lt;/li&gt;&#xA;&lt;li&gt;After Reset &lt;code&gt;PC&lt;/code&gt; and &lt;code&gt;R&lt;/code&gt; (and &lt;code&gt;I&lt;/code&gt;) are zero.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;PC&lt;/code&gt; increments modulo 65536.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;R&lt;/code&gt; increments modulo 128.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You see the picture?&lt;/p&gt;&#xA;&lt;p&gt;For the first 128 steps, the address outputed during opcode read (T1, T2) and refresh (T3, T4) is (seams to be) the same, after that, &lt;code&gt;R&lt;/code&gt; restarts, while &lt;code&gt;PC&lt;/code&gt; continues. If you had traced 1025 (*5) steps you may have noticed that sequence again - giving an even bigger headache :))&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Do I have a bad CPU?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, there is nothing wrong, your CPU works exactly like expected.&lt;/p&gt;&#xA;&lt;p&gt;I guess, whoever did make the original design, didn't explain the finer details, as it works great within the given setup - that is, unless LED get attached to A7..A15.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.S.: This question is so classic RTFM, one has to love it - that and the clear and complete description the OP provided, makes me want to give it +5 points :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - To be exact, only A0..A6 are validated by /RFSH&lt;/p&gt;&#xA;&lt;p&gt;*2 - Bit 7 is (like all of &lt;code&gt;R&lt;/code&gt;) cleared after reset, but can be modified when &lt;code&gt;R&lt;/code&gt; is set via &lt;code&gt;LD I,A&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Neither the 1976 nor the 1984 manual mention what happened on the upper 8 bits, but actual (2004) Z80 CPU User Manual states that &lt;code&gt;I&lt;/code&gt; gets outputted. This is consistent with the way the registers are organized, so it is save to assume the same behaviour for any Z80.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Plus &lt;code&gt;I&lt;/code&gt; on the upper 8 bits.&lt;/p&gt;&#xA;&lt;p&gt;*5 - With 10 LED your setup injects a modulo 1024 behaviour as well.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-09-23T15:01:22.920" LastActivityDate="2020-09-23T15:01:22.920" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12572" PostTypeId="2" ParentId="2421" CreationDate="2019-10-24T19:48:42.137" Score="5" Body="&lt;p&gt;Yes it is possible to have an IDE controller on a 8087 NPU (FPU) coprocessor socket.&#xA;Most of these adapters had a circuit to switch in a BIOS and RAM cache Overlay when the IDE controller logic required it.&#xA;..&#xA;Another example of this would be any expansion card that used the Dec. Rainbow 100 computers memory expansion card slot for peripherals. The card would switch in the ROM BIOS code and the cache RAM overlay when its Int (NMI) signal line is tripe. The overlay RAM and BIOS will be disabled at the end of (Int.) EONMI. AKA Return form Interrupt/NMI Instruction was called.&#xA;... EONMI End of None Masked Interrupt or any EOIR type of instruction calls.&lt;/p&gt;&#xA;" OwnerUserId="15437" LastActivityDate="2019-10-24T19:48:42.137" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12573" PostTypeId="1" AcceptedAnswerId="12577" CreationDate="2019-10-25T07:32:51.077" Score="4" ViewCount="2885" Body="&lt;p&gt;For those of you who are unfamiliar, Super Mario 64 is an extremely competitive speed game, and because glitches are allowed on most major leaderboards, many very talented glitch hunters have torn the game to pieces. One of the more obscure glitches is the ability for Mario to enter parallel universes. How does something so obscure and so unusual exist? What causes the game to create them?&lt;/p&gt;&#xA;" OwnerUserId="10751" LastActivityDate="2019-10-27T23:07:12.333" Title="Why do parallel universes exist in Super Mario 64?" Tags="&lt;nintendo&gt;&lt;nintendo-64&gt;&lt;glitches&gt;" AnswerCount="1" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="12574" PostTypeId="2" ParentId="12403" CreationDate="2019-10-25T13:15:44.403" Score="4" Body="&lt;p&gt;There can be all sorts of reasons for this that you will need to investigate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can start by measuring the voltage between pin 5 and 15 (GND and 5V) to make sure they are being powered. If you have an oscilloscope check for activity on all the address pins too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way to test ZIPs is to put them in another known working machine. If you don't have one you can swap them around to see if it's just one that has failed.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2019-10-25T13:15:44.403" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12575" PostTypeId="1" AcceptedAnswerId="12576" CreationDate="2019-10-25T13:16:54.237" Score="1" ViewCount="317" Body="&lt;p&gt;I am sorry, if this is not a good place to ask, but is there any general rule of thumb about how much precious metals could you expect to get out from 197x(?) printed circuit boards, especially Soviet ones?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have at work finally got to send to utilization an old Soviet monster like this, and it is full of the PCBs:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NOL1i.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NOL1i.jpg&quot; alt=&quot;the module all-together&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LgZge.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LgZge.jpg&quot; alt=&quot;one example of PCBs&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bMuid.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bMuid.jpg&quot; alt=&quot;other example&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9015" LastEditorUserId="15407" LastEditDate="2019-12-20T01:58:34.400" LastActivityDate="2019-12-20T01:58:34.400" Title="Estimating contents of old printed circuit boards" Tags="&lt;history&gt;&lt;hardware&gt;&lt;ussr&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12576" PostTypeId="2" ParentId="12575" CreationDate="2019-10-25T13:59:30.623" Score="5" Body="&lt;p&gt;First of all: Wow, nice exchange. A fun piece for a museum. Where is it located?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I am sorry, if this is not a good place to ask,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, as your question seems to be about electronics and scrap metal, not old computers.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but is there any general rule of thumb about how much precious metals could you expect to get out from 197x(?) printed circuit boards,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not much - at least judging from the pictures. There are no chips, which may have gold bonding, not gold covered pins (not that they yield much anyway). The transistors &lt;em&gt;may&lt;/em&gt; have some, but again, it doesn't seam like a lot. Guessing from the boards shown, I'd say it's less than 10 USD gold in total. And that needs to be extracted. Heck, even the steel may be more valuable as scrap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most valuable part here might be the copper wires - which in itself is rather meager.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;People tend to overestimate the value of scrap boards. They only make sense (and money) for recyclers when handled by container loads, not single racks or boards. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;especially Soviet ones?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is no principal difference here - except for the time line as in the USSR every thing happened (military excluded) a few years later. So above is rather late 60s technology when seen from the west.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;We have at work finally got to send to utilization an old Soviet monster like this, and it is full of the PCBs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The best would be to keep it complete in working condition and donate it to a museum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise be happy to get rid of it without paying for disposal.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-10-25T14:07:22.000" LastActivityDate="2019-10-25T14:07:22.000" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12577" PostTypeId="2" ParentId="12573" CreationDate="2019-10-25T19:52:41.523" Score="9" Body="&lt;p&gt;This answer is based solely on the information &lt;a href=&quot;https://pannenkoek2012.fandom.com/wiki/Parallel_Universe&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; and the original Parallel Universe &lt;a href=&quot;https://www.youtube.com/watch?v=kpk2tdsPh0A&quot; rel=&quot;noreferrer&quot;&gt;video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a part of the game's code that detects whether Mario is standing on the floor. This part of the code uses 16 bits to process Mario's position in the X, Y and Z direction (so 48 bits total, but 16 bits per direction). 16 bits is enough to store a number between -32768 and 32767. The Y direction (up and down) is irrelevant, so let's focus on X and Z.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say there is a floor you can stand on, at coordinates X=0, Z=0. If Mario is at the same coordinates X=0, Z=0, then the code will (of course) detect that he's standing on the floor at X=0, Z=0. And Mario will be able to stand on the floor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's say Mario is at coordinates X=0, Z=32769. When the game runs the code to check whether he's standing on a floor, it will try to store 32769 in 16 bits. 32769 is out of the range that will fit, and it wraps around to -32767. Then, the floor-checking code will look for a floor at the coordinates X=0, Z=-32767, which is not Mario's actual position!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If Mario is at X=0, Z=65536, then it wraps all the way around back to 0. Basically, &lt;em&gt;any multiple of 65536 gets removed.&lt;/em&gt; So if there's a floor at X=0, Z=0, then Mario is allowed to stand at X=0, Z=0, or at X=0, Z=65536, or at X=0, Z=131072, or at X=65536, Z=0, or at X=65536, Z=65536, or at X=65536, Z=131072, or so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This makes a grid of valid positions for Mario, which is the &quot;PU grid&quot; (Parallel Universe grid). If Mario is in any position where it gets wrapped around for the floor check (i.e. any of his coordinates are less than -32768 or greater than 32767), then we say he's in a parallel universe.&lt;/p&gt;&#xA;" OwnerUserId="411" LastActivityDate="2019-10-25T19:52:41.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12579" PostTypeId="2" ParentId="5733" CreationDate="2019-10-26T08:36:40.767" Score="0" Body="&lt;p&gt;try it!&#xA;Find the square hole that does not have a slider. (Circled in the above pictures). Take a short length of tape, (3-4cm or 1 1/2inchs long), and cover both sides of the hole.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason this works, is that there is no physical difference between 1.44MB floppy disks and 720K disks, except that the 720K disk is missing the hole that you just covered. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Format A: /T:80 /N:9&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;its work on XP&lt;/p&gt;&#xA;" OwnerUserId="15452" LastEditorUserId="611" LastEditDate="2020-05-05T12:22:15.920" LastActivityDate="2020-05-05T12:22:15.920" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12580" PostTypeId="1" CreationDate="2019-10-26T20:10:38.007" Score="18" ViewCount="2366" Body="&lt;p&gt;While trying to use a &quot;modern&quot; sound card (an Aztech Sound Galaxy Pro 16 II) in an XT compatible 8086 computer, I encountered the problem that the drivers and tools (like the mixer initialization tool and the resource configuration tool) are compiled with 286 real mode instructions (&lt;code&gt;ENTER&lt;/code&gt;, &lt;code&gt;LEAVE&lt;/code&gt;, &lt;code&gt;PUSH imm8&lt;/code&gt;, &lt;code&gt;PUSH imm16&lt;/code&gt;, &lt;code&gt;SHL r/m, imm8&lt;/code&gt;). I considered different approaches:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Disassemble the whole program with IDA, mark up all offsets, and reassemble it with an assembler that synthesizes 8086 instructions to emulate the 80286 instructions.&lt;/li&gt;&#xA;&lt;li&gt;Re-Engineer the tools I need&lt;/li&gt;&#xA;&lt;li&gt;Write an automatic debugger, that places breakpoints on all 80286 instructions and emulates them.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I dropped the first two ideas because of the great amount of manual work they need after getting the idea for the third approach. I am in no way striving for perfect 286 emulation, just emulation of the features typically used by compiled C programs. I am sure some one had that idea before me, though. Does anyone know of an implementation of that idea, so I don't have to implement it myself?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am aware that I don't have to use that specific sound card, but I anticipate I will repeatedly encounter software that uses 286 instructions without being otherwise useless on XT computers, so a generic solution might be helpful in the future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The program at hand, &lt;code&gt;HWSET.EXE&lt;/code&gt;, contains the following 286 real mode instructions (and a consideration, how easy the &lt;code&gt;JMP FAR&lt;/code&gt; suggestion by Raffzahn could be implemented). This list is complete according to the list of unsupported first bytes of the 8086. I made no effort to detect instructions that are invalid on an 8086 only due to certain bits in subsequent bytes, as I am not aware of any:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;27 instances of &lt;code&gt;ENTER&lt;/code&gt;, 22 of them as &lt;code&gt;ENTER 2, 0&lt;/code&gt;. Enter is 4 Bytes, so a &lt;code&gt;JMP FAR&lt;/code&gt; overwrites the first byte of the following instruction, which is &lt;code&gt;PUSH SI&lt;/code&gt;, &lt;code&gt;PUSH DI&lt;/code&gt;, &lt;code&gt;MOV AX, imm16&lt;/code&gt; or &lt;code&gt;PUSH imm8&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;61 insances of &lt;code&gt;LEAVE; RET&lt;/code&gt; (this is more than &lt;code&gt;ENTER&lt;/code&gt; because of functions with multiple return instructions). This is just 2 bytes, and the bytes after these two bytes can not be patched, as &lt;code&gt;RET&lt;/code&gt; is followed by a new entry point.&lt;/li&gt;&#xA;&lt;li&gt;33 instances of &lt;code&gt;PUSH imm16&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;145 instances of &lt;code&gt;PUSH imm8&lt;/code&gt; (most of them &lt;code&gt;PUSH 0&lt;/code&gt; or &lt;code&gt;PUSH 1&lt;/code&gt; (these push instructions are generally used in conjunction with &lt;code&gt;CALL (near)&lt;/code&gt;, so there are 5 bytes at least in total.&lt;/li&gt;&#xA;&lt;li&gt;18 instances of &lt;code&gt;SHL r8, imm8&lt;/code&gt; (with imm8 != 1), no obvious usage pattern, but 2 bytes afterwards seem to be at all samples I inspected by hand.&lt;/li&gt;&#xA;&lt;li&gt;25 instances of &lt;code&gt;SHR r8, imm8&lt;/code&gt; (with imm8 != 1), seems to be from macro-assisted assembly code. This 3-byte instruction is mostly followed by 2 pops, so it can be replaced by a far jump.&lt;/li&gt;&#xA;&lt;li&gt;6 instances of imul r16, rm16, imm8&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="10479" LastEditDate="2019-10-26T21:42:23.453" LastActivityDate="2019-11-07T05:06:44.920" Title="80286 real mode emulator for 8086" Tags="&lt;ibm-pc&gt;&lt;emulation&gt;&lt;8086&gt;&lt;80286&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12581" PostTypeId="2" ParentId="12580" CreationDate="2019-10-26T20:47:44.873" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I am sure some one had that idea before me, &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As always :)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does anyone know of an implementation of that idea, so I don't have to implement it myself?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nop. Sorry. You may have to go ahead with your debug idea, catching them using Int3.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Still, it wouldn't be anywhere near acceptable speed as Int/Ret already eats up 72+44=116 cycles - a table look up (Pulling the interrupt return address and checkign which instruction has been replaced) followed interpretation (including parameter load from the follow up bytes) may take several hundert cycles. Not really cool.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next best thing might be a hybrid approach, still using INT3 to enter the emulator, but build a separate replacement code for each and every replaced instruction. Thus only INT and table lookup has to happen, followed by execution of the replacement code and a direct return jump instead of IRET (JMP far is just 15 clocks) as easy to implement, but only shaves of 29 cycles - while still burning way past 200, depending on the instruction.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The eventually best performing approach might be classic patching. Replace the offending instruction (and maybe a following to gain space) by a far jump direct into a replacement routine (like before) - just this time eventually including the additionaly overwritten instructions and return. This reduces the overhead added per instruction to a minimum of 30 clocks (two near or far jumps).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Your choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, some statistics about all instances would give some oversight for further decisions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-26T20:57:52.777" LastActivityDate="2019-10-26T20:57:52.777" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12582" PostTypeId="2" ParentId="12580" CreationDate="2019-10-26T21:04:55.293" Score="14" Body="&lt;p&gt;There are 386 real-mode emulators for 286s, such as Eko Priono’s &lt;code&gt;EMU386&lt;/code&gt;; but they relied on one important feature which 8086s don’t have, the invalid instruction exception. Whenever a 286 attempts to run an invalid instruction, it traps, and a handler can be put in place to emulate the instruction (if it really is a “missing” instruction from a later architecture).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On 8086s, you’d really have to patch the binary, either by disassembling it and re-assembling it as described in your first approach, or by tracing it at runtime and replacing the missing instructions with hooks. The latter would involve re-implementing something like IDA’s block analysis, ultimately, although it might be possible to get away with something less involved — at worst, run the programs in single-stepping mode (&lt;code&gt;TF&lt;/code&gt; set, and handle INT 1), assuming the programs in question don’t disable that mode themselves, or insert &lt;code&gt;CC&lt;/code&gt;s at entry points and scan ahead for jumps or calls...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Single-stepping mode would work quite well for this scenario: when &lt;code&gt;TF&lt;/code&gt; is set, the CPU invokes interrupt 1 after the next instruction, and clears &lt;code&gt;TF&lt;/code&gt; (so that the handler isn’t run in single-stepping mode...). The return pointer pushed on the stack points to the next instruction; the handler can then examine it and determine what to do with it: let the CPU run it directly, emulate it, replace it with something else... The handler can choose whether &lt;code&gt;TF&lt;/code&gt; should be set again on return by changing the flags pushed on the stack, and it can also skip instructions by changing the return address (after making sure the instruction at the new return address doesn’t need special handling either).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some further peculiarities on single-stepping one has to consider:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you don't have the first stepping of the 8088, no single-step interrupt is entered for the instruction following a segment register change, even if the target segment register is &lt;em&gt;not&lt;/em&gt; &lt;code&gt;SS&lt;/code&gt;. There is real world code in which a &lt;code&gt;IMUL r16, r/m16, immed8&lt;/code&gt; follows &lt;code&gt;MOV ES, [screen_segment]&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;If an interrupt is recognized during the execution of an instruction, that interrupt gets entered &lt;em&gt;before&lt;/em&gt; the single step is recognized — i.e. you get a single step interrupt &quot;pointing to&quot; first instruction of the interrupt handler. What happens when that handler returns &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12693/does-single-stepping-on-the-8086-behave-as-described-in-the-user-manual&quot;&gt;differs between internal and external interrupts, even if that is not clearly mentioned in the 8086 family user's manual&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I’m not aware of any existing, available program which would do this.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="10479" LastEditDate="2019-11-07T05:06:44.920" LastActivityDate="2019-11-07T05:06:44.920" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="12583" PostTypeId="1" CreationDate="2019-10-26T22:42:31.850" Score="2" ViewCount="243" Body="&lt;p&gt;Is there such thing as a para-emulation? Like para-virtualization but for emulation? If so, where could I find a website that describes it?&lt;/p&gt;&#xA;" OwnerUserId="15455" LastEditorUserId="6659" LastEditDate="2019-10-27T17:55:12.047" LastActivityDate="2019-10-27T17:55:12.047" Title="Is there such thing as para-emulation?" Tags="&lt;emulation&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2019-10-28T09:12:44.400" ContentLicense="CC BY-SA 4.0" />
  <row Id="12584" PostTypeId="2" ParentId="12583" CreationDate="2019-10-27T02:34:22.337" Score="4" Body="&lt;p&gt;Paravirtualisation is virtualisation in which the virtualised machine is provided with an API that allows it to make some calls to the hypervisor, for things the hypervisor can inherently do — typically to do things like expose native network or storage drivers directly to the virtualised OS. The virtualised OS will be aware that it is inside a virtual machine and instead of trying to access network or storage hardware directly will simply call out to the hypervisor with those requests.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore I assume a paraemulator would be the same thing, except that the code inside the virtual instance is for a different processor and is therefore interpreted or dynamically recompiled, rather than being for the native processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that's what you intended by the term then plenty of examples exist. Off the top of my head:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Xbeeb&lt;/strong&gt; is a BBC Micro emulator first released in 1994. As may not be surprising from its vintage, it appears never to have had a website, being distributed via Usenet and FTP. Amongst its features, this taken from the announcement of version 0.3 in 1996 but present all the way along:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Emulated DFS.  Xbeeb comes with it's own DFS ROM to allow emulation of many of the Acorn DFS commands.  File images are created as part of the standard UNIX directory structure.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note the &quot;&lt;strong&gt;file&lt;/strong&gt; images are created as part of the standard UNIX directory structure&quot;. What the custom ROM that Xbeeb serves to its emulated BBC Micro does is pipe file manipulations through the emulator to the native filing system. There are no disk images or tape images or anything else, there is only direct loading and saving from your outer machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd say that's as close to something you could call paraemulation as you're going to get. So, yes, there is such a thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I picked Xbeeb as an example because it's very straightforward in its approach. No media emulation whatsoever, just a bridge into your native filing system. Other emulators do very similar things, especially very old emulators as it was still an open question whether they'd be an extension of an old computer platform — allowing it to continue in a new form — or merely a preservation of one.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-10-27T02:34:22.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12585" PostTypeId="2" ParentId="12583" CreationDate="2019-10-27T14:17:43.430" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there such thing as a para-emulation? Like para-virtualization but for emulation?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In fact, if present it would still be para-virtualization, wouldn't it? There ist no principal difference between an emulated machine and a real one here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, the strict answer is &lt;strong&gt;No&lt;/strong&gt;. There is no para-virtualization in emulations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Para-virtualization requires the guest system to explicite use host functions as services instead of their own functions. This is done by using new/unused opcodes known as hyper-call or diagnose-code to provide an escape from emulation. Implementing such a switch over is somewhat easy with modern OS and applications software, where user side software never does any hardware access and OS services are modularized as well as driver based. this gives a few, easy points to modify the guest software to make it run and utilise the speed advantage of the host system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Classic computer software usually doesn't follow that approach. There is neither a well layered system of OS calls nor a sufficient high level layer of services worth to be shifted over, nor do these systems rely on clear encapsulated drivers. Worst of all, user side software regularly handles hardware directly on their own. As a result para-virtualization is quite fruitless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Equally important, modern hardware is so much faster than the emulated systems, that even full hardware emulation will result in a performance magnitudes faster than the original system. Thus shortcuts to increase performance - and that's that para-virtualisation is about, don't make much sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, back in the time when speed difference between what the host provided and what the guest expected was still small, there have been attempts made to do emulations and use shortcuts to improve performance by moving part of the tasks into host system code.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;One approach is &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12584/6659&quot;&gt;Xbeep Tommy mentions&lt;/a&gt; where a new 'OS' was made, based on forwarding of guest calls into one or more host calls. 1994 Unix systems weren't that fast and even less timing precise. The drawback is a comparable huge implementation effort and at the same time only restricted capabilities. On the other hand, it made every well behaved guest program quite portable among the new world.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A different approach from back then was for 8080 software on PCs using &lt;a href=&quot;https://en.wikipedia.org/wiki/NEC_V20&quot; rel=&quot;nofollow noreferrer&quot;&gt;NEC's V20&lt;/a&gt; series chips. The V20 can be switched in a full hardware based 8080 mode. The only difference was an instuction to switch back into x86 mode. Using this offered essentially two modes of para-virtualization. Either replacing BIOS (hardware drivers) or BDOS (the OS). All approched I've seen so far went straight for the BDOS, writing a very small OS stub handing over the CP/M calls to the x86 side and there mapping them onto MS-DOS calls - which after all had direct equivalents to each of them. The result was running CP/M software in acceptable speed even on a standard 4.77 MHz machine.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Another approach, seen tried during early days, worked with intercepting subroutine calls to system functions so detecting what address a subroutine call was going to and if it's one of the virtualized, a corresponding host function was called from within the emulator. It still requested full figured emulation - or at least detection - for all code, as programs may jump into any ROM location. I'm not aware of any (still maintained) emulator doing this.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-27T17:49:54.550" LastActivityDate="2019-10-27T17:49:54.550" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12586" PostTypeId="2" ParentId="12580" CreationDate="2019-10-27T14:23:02.627" Score="8" Body="&lt;p&gt;Have you ever thought of changing the 8088 in your PC to a &lt;a href=&quot;https://en.wikipedia.org/wiki/NEC_V20&quot; rel=&quot;nofollow noreferrer&quot;&gt;NEC V20 (uPD70108)&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The V20 is basically a 80186/286 EU with an 8088 BU. This offers all the 'new' real mode instructions (*1) you need, while still being pin-compatible with the 8088. And in addition you'll get some 30% sped up as well - quite handy, isn't it? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a V20 would remove all need to modify or patch any software on the PC, and it is contemporary to 1980s PCs. Many (including me) replaced their 8088 by a V20 as soon as they were available (ca.1983).  In fact, many late 'turbo' PCs used it by default - after all, it could be clocked up to 16 MHz, making a V20-based XT quite capable of outrunning an 8-10 MHz AT under DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike speed upgrades on game machines / home computers (like C64 or Amiga), it is reasonable to assume PC games will cope with the speed-up. Even early on, way before the PC became a serious game platform, a huge spread in speed was real. XTs running at anything from 4.77 MHz to 16 MHz as well as being 8 or 16 bit (8088 vs. 8086) or using a compete different timing (86 vs. 186 vs. 286 ...) made up the landscape in the mid 1980s. Any software intended to sell across as many machines as possible used timers and interrupts for synchronization; timing loops were almost never used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;V20 improvements were:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8086-2 instruction set (aka 286 real mode).&lt;/li&gt;&#xA;&lt;li&gt;General speed up, mostly due to a much improved BIU (*2).&lt;/li&gt;&#xA;&lt;li&gt;Most instruction timings are similar to the 80188 (or 80286 working on odd addresses).&lt;/li&gt;&#xA;&lt;li&gt;8080 emulation mode - a gift from heaven for 'porting' of CP/M software to MS-DOS. Nowadays a great way for retro-nerds to run an upscale CP/M and MS-DOS in one setup.&lt;/li&gt;&#xA;&lt;li&gt;Additional instructions for BCD/Nibble handling.&lt;/li&gt;&#xA;&lt;li&gt;Greatly improved instructions for bit handling, including bit field extraction.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are plenty of NOS dealers offering V20 anywhere between €5 and €50 apiece.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Intel called the enhanced ISA &lt;em&gt;8086-2 instruction set&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Bus Interface Unit - the part of the x86 dandling all data address calculation as well as data access and instruction prefetch.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2019-10-30T10:25:56.083" LastActivityDate="2019-10-30T10:25:56.083" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12588" PostTypeId="1" AcceptedAnswerId="12589" CreationDate="2019-10-27T16:49:53.463" Score="8" ViewCount="5006" Body="&lt;p&gt;The original NES has a label printed onto it that the device would not &quot;cause harmful interference&quot;. Why would they write that? Did people think the NES might be dangerous? Is this some kind of legal thing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Vkl6R.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Vkl6R.png&quot; alt=&quot;NES Warning Label&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="276" LastEditDate="2019-10-27T18:21:07.450" LastActivityDate="2019-10-28T02:55:26.200" Title="What was the point of the label on the bottom of the NES?" Tags="&lt;nintendo&gt;&lt;nes&gt;" AnswerCount="2" CommentCount="5" ClosedDate="2019-10-29T01:14:38.120" ContentLicense="CC BY-SA 4.0" />
  <row Id="12589" PostTypeId="2" ParentId="12588" CreationDate="2019-10-27T18:03:20.573" Score="22" Body="&lt;p&gt;Any electronic equipment using radio frequencies which is sold in the USA has to be tested to show that it doesn't cause interference to other equipment, and also that it doesn't fail in a dangerous manner if it is subjected to interference from other devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Interference&quot; could be anything from messing up the display on your own TV, through disrupting radio communications by the emergency services etc, up to the (very unlikely, for a games console) possibility of causing health risks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first USA legislation controlling use of radio equipment was passed in 1912. The FCC was founded in 1934, replacing an earlier enforcement organization, and with a name change from &quot;radio&quot; to &quot;communications&quot; reflecting the wider use of technology - i.e. the FCC also covers cable communications, not just radio transmissions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The actual regulations have changed over time as new technology is developed. Part 15 of the regulations dates from 1975, but previously computer equipment would probably have been covered by a more general regulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other countries have similar regulations and regulatory organizations, but most major countries accept each other's regulatory standards - i.e. FCC compliance is generally acceptable world wide, not just in the USA.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2019-10-27T18:03:20.573" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12590" PostTypeId="2" ParentId="9482" CreationDate="2019-10-27T19:07:59.470" Score="-1" Body="&lt;p&gt;Multi-megabyte memory expansion cards for ATs absolutely WERE a thing, including more than a few sold by IBM themselves. I recommend having a scoot around the various document archives of the interwebs such as Bitsavers, Google Books' back catalogue of Byte / Infoworld / Computer Shopper etc, and various others whose names/URLs I forget but that frequently feature any time I do an arbitrary google search for information on some old bit of hardware. Simply dropping &quot;PC-AT memory expansion card&quot; into the search bar will probably get you endless hits, if you bother to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SIMMs may have been &lt;em&gt;invented&lt;/em&gt; in 1982, but that doesn't mean they were immediately &lt;em&gt;adopted&lt;/em&gt; in any great way. The Atari STe was one of the first mainstream proponents of the idea that I'm aware of, and that dates to 1989. I've a slightly earlier (1987/88, I think?) AT-clone in my collection, that a family friend gave me wayback, and it has a grand total of ... two. Just 2x 30-pin SIMM slots, and they don't support any module size other than 256KByte; having filled them, and expanded its onboard memory from 640 to 1152KB, it'll just about boot Windows, but what you can do with the system once you've loaded it is pretty limited (&quot;Write&quot; will run, &quot;Word&quot; and &quot;Works&quot; won't), and it's a damn good thing that the video adapter has its own memory instead of having to share it with the rest of the machine. If you wanted to use any more sophisticated software with the machine, then your only recourse would be to add memory cards. Motherboards sporting a meaningful rack of SIMM slots, and that supported the larger capacity (and, at the time, still deadly expensive, especially compared to SIPPs, or the lower-frequency DIPs used on the expansion cards) 1MB and 4MB modules, were rather more a 386-era thing, or at least &lt;em&gt;later&lt;/em&gt;-286.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare it to the 3.5&quot; diskette drive. That was already a thing since, what, 1983, 1984? It also pre-dated the PC-AT. IBM, and PC clone manufacturers in general, didn't adopt it as a format, outside of portable machines, until the debut of the PS/2, many years later. It might have been there as an option, and even used (alongside other competing compact formats like the 3&quot; flippy-disk cartridge as beloved of Sinclair and Amstrad) by a good number of rivals from 84/85 onwards, but it doesn't mean the 5.25&quot; format was immediately obsoleted by it. Indeed, 5.25 was the first to get HD, and remained the larger-but-higher-capacity option (at 1200KB vs 720 or 800KB) until the even higher tech 3.5&quot; HD floppies came along nearer to the turn of the 90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or indeed... CDRs and other removable media didn't disappear when DVDR came along. USB didn't immediately displace all other interconnects (THAT took &lt;em&gt;ages&lt;/em&gt;). Integrated graphics and sound, or indeed floppy/hard drive controllers, serial/parallel ports, etc, didn't completely do away with discrete add-on cards. Often, much like those two lonely low-capacity SIMM sockets, the early examples of the form were rather limited compared to what could be achieved with a dedicated, if rather costly and bulky, optional upgrade card, and were only really meant as a low cost, get-you-started convenience option. A lot of people don't need anything better than integrated graphics, but there's still the option for installing a dedicated GPU if you want it. Or a RAID card to expand your storage options beyond what the built in controller can do. At the time &quot;my&quot; 286 was made, Windows was still a novelty and even competing somewhat with lower-requirement things like GEM and DesqView; most of what the machine ran (indeed, all that it originally came with) were DOS apps, which for the most part worked just fine with the original 640KB. Adding the extra half meg unlocked a few nice additional features, like using WYSIWYG fonts in Lotus Symphony, but I never really got the impression that the computer was crying out for anything additional to that until I tried it with Windows. There aren't really any games which demand greater amounts of memory that don't also want a better processor (and, until I added the SVGA, a better graphics card). Most home or office buyers of the system would have been satisfied with what it offered, and if they found it still limited - say, they actually wanted to use it for some kind of heavier business or scientific analysis or industrial purpose - could have just used one of the several open slots to add a memory card, and been able to make a business-case justification for the expense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, as we were speaking of video cards... that aforementioned 286 clone came with a Hercules Mono card installed; before I added the SIMMs, its total memory complement between system board and video was only about 704KB. It didn't have much advantage over an XT other than a good extra turn of speed (having the 12MHz option), a larger hard drive (40MB), and better compatibility with later software (how much of what was installed on it &lt;em&gt;wasn't&lt;/em&gt; still XT compatible though, I wouldn't want to guess). After some dumpster diving salvage runs at my old school, it gained an arguably over-the-top half-meg Trident SVGA card, as well as a Soundblaster Pro (sadly, no Gravis Ultrasounds or AWE32s to be had). AGP and its addressing &quot;window&quot; being more than a decade away, that memory is directly mapped into the machine's architecture, and I expect the SIMMs probably sat above the 1MB boundary too; I dunno if the soundcard has any usable RAM to speak of, but even so the computer likely has RAM mapped to at least 1.75MB logical, maybe even blocked out to 2MB to simplify addressing. On top of which, the 640 to 1024KB &quot;hole&quot; is typically joined by another at ... either 14 to 15, or 15 to 16MB on typical ATs (I forget which), allowing a wider range of extended BIOS ROM and memory-mapped IO on expansion cards, alleviating some of the pressure and conflict that could be experienced with everything vying for shared use of that 384KB block (and allowing things like the mapping of the &quot;high memory&quot; area out to 768KB or more of usable sub-1MB RAM in later versions of DOS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a VGA card on an XT class machine can be quite tricky (and likely one reason for IBM creating the weird, crippled MCGA... its lack of EGA compatibility is inexplicable, but its limited memory is likely so it would fit within the 8088 address space on the lowest-end PS/2s without having to resort to complicated memory paging routines such as were needed for operation of over-1MB XT memory cards), and a lot of the other stuff above, probably including use of any kind of SVGA (or at least, anything over 800x600 16-colour - which just skims inside of 240KB), would be entirely impossible due to the more limited addressing range for both RAM, ROM, and mapped IO.&lt;/p&gt;&#xA;" OwnerUserId="10196" LastEditorUserId="10196" LastEditDate="2019-10-27T19:19:57.910" LastActivityDate="2019-10-27T19:19:57.910" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12591" PostTypeId="1" CreationDate="2019-10-27T20:58:03.083" Score="1" ViewCount="256" Body="&lt;p&gt;I'm reviewing the historical original ASCII standard.  There are many control characters.  Does anyone know the history of them and where finite state machines that made use of them may be documented?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ask because it's not in the document with the ASCII standard I found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pictures attached of what I'm referring to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tAuWm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tAuWm.jpg&quot; alt=&quot;1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/psc3Q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/psc3Q.png&quot; alt=&quot;2&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xjfnf.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xjfnf.jpg&quot; alt=&quot;3&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15466" LastActivityDate="2019-10-27T22:31:46.590" Title="ASCII ASA X3.4-1963 and Finite State Machines?" Tags="&lt;history&gt;&lt;keyboards&gt;&lt;terminal&gt;&lt;ascii&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12592" PostTypeId="2" ParentId="7655" CreationDate="2019-10-27T21:58:36.210" Score="-2" Body="&lt;p&gt;It's not just the systems you mentioned; in almost everything from the era, other than the IBM PC (with its discrete - and not particularly high performance, merely higher performance than hanging something directly off the 8088 bus - graphics cards) and the MSX/Console type machines using a TMS VRAM graphics system, or an Amiga equipped with FastRAM, the CPU had to contend with the video system for access to RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's various reasons for this. One major driver was that of sheer cost. If you run two buses in your machine, one with main memory accessible by the CPU alone, another with video memory that's looked after by a discrete chip, you greatly increase the complexity, and thus the design and building cost of your machine. It also increases the potential points of failure, which is an undue risk if you're making a simple and cheap home starter system. One bus with everything hanging off it, and a somewhat simpler Glue ULA / PLC / etc gating the access on a timeshare basis, especially if the &quot;video chip&quot; is little more than a shift register that has video data serially DMA'd into it, is far more streamlined and straightfoward, and can be banged out for minimal cost without suffering too much in the way of reliability issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another is, well... &lt;em&gt;need&lt;/em&gt;. Video bandwidth in the early days really wasn't that much. The sheer amount of available memory (the PC's 16KB CGA was positively massive for its launch era, especially considering the machine's base RAM wasn't any larger, and the MDA only had 4KB; by the time of the Mac, ST and Amiga some years later, the screenbuffer size had only increased, respectively, to 1.33, 2.0, or 2.5x (default; max of 10x for the rather less frequently used, slow, memory squashing, flickery hi-rez interlace), with the competing EGA coming with 64KB by default) limited the practical resolution and colour depth you could deliver, and that reduced how much data you had to stream from memory to screen per second*. The best you tended to get with any 8-bit or other early 80s machine was in the realm of 256 or 320 pixels on a line and 2 bits per pixel (direct, or equivalent via block attributes). 512 or 640 bits, a little under 16,000 times per second, isn't &lt;em&gt;that&lt;/em&gt; much... it's in the realm of 8 to 10MBit, or 1.0 to 1.25MByte/s (actually a little higher because of blanking, but let's not split hairs for the sake of a demo; we can consider it doesn't go above 2MB/s, and probably settles around 1.5).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OK, when you've got a 6502 system running at all of 1 or 2MHz, or even a Z80 at 4MHz (both limited as much by the &lt;em&gt;memory&lt;/em&gt; speed as anything else - in fact, a decrease in the cost of high-frequency DRAM is literally what made it possible to run the BBC Micro at 2MHz and have it deliver an 80-column display with graphics capability, when the original design only produced half of those specs), this still sounds like quite a lot. But, there's more; you have to consider the CPU demand as well. And early processors just weren't very efficient when it came to memory access. Modern chips can easily completely saturate the memory bus with continual access, and indeed often end up momentarily paused waiting for the next RAM cycle if they get multiple cache misses in a row. Not so the earlier generation of chips. You'd be lucky to get 4 clocks per cycle a lot of the time (excepting some oddities of efficiency like the 6502's zero-page mode), and ignoring the other specifics it was typical for the bus to sit idle a good 50% of the time; this was even true of the 8086 (the 8088 hammered the bus a bit more as it was trying to fit a 16-bit architecture into 8 bits), and persisted into at least the 68000/68010 era, maybe the 80286 as well. Anything sitting idle in a computer, generally, is just a waste of silicon and electricity. What's to be done with it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, er... we could fit the video access into it. If things are arranged with sufficient grace, the impact on processing could be anything from &quot;nothing&quot; or &quot;so minor that you wouldn't notice outside of detailed benchmarks&quot;, to &quot;moderate, but still not worth adding an extra bus and chipset to overcome&quot;, depending on machine and, indeed, the video mode. We can even trace the decisions regarding default video modes to these arrangements, somewhat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later examples which are the ones I'm most familiar with are the aforementioned trio of Mac, ST and Amiga. All use the 68000 CPU at 7 to 8MHz, and pixel clocks in the 7 to 32MHz range depending on mode (higher clock/resolution meaning lower bit depth, so roughly the same bandwidth - including the Amiga's interlace mode, which essentially halves the framerate). The 68000 has a 4-clock memory cycle, which is, nominally, continually active when filling the prefetch queue or running through strings of short instructions... but in reality it's only active on the bus for two out of every four cycles, maximum, and it's designed for memory rated at only half the CPU's clock speed. If your computer's Glue logic is in any way competent, and you have full-speed memory (which by the time these machines came around was fairly affordable), it can fool the processor into thinking it's got exclusive use of the bus, when in fact the graphics system (and/or other DMAs) have free reign of it at an effective 3.5MHz or more. Meaning you can run a 7 to 8MB/sec graphics mode using shared memory with almost no performance penalty whatsoever - the only times the processor is made to wait is if it's just finished processing one of the relatively rare longer instructions that runs for a total number of cycles not divisible by four... in which case that longer instruction is extended by one, two or three clocks. But even in the worst case scenario (say, adding 3 clocks onto a 5-clock instruction), it's not quite a 50% slowdown, and the greater majority of instructions are either 4-clock aligned, or take so long to process that the extra latency after each one causes only a very fractional increase to processing time. That bandwidth is what gets you the common 320x200p (or x256p, 400i, 512i) 16-colour or 640x200p (etc) 4-colour ST or default Amiga modes, 640x400p (72Hz) mono ST mode, and is in fact rather in excess of the Mac's relatively lowly 512x342p (60Hz) mono which, in concert with somewhat reduced blanking, needs half as much bandwidth again (possibly down to it being derived from the lower frequency Lisa, where 720x364p 60Hz used the full available bandwidth, and maybe intended to run at 4MHz or less vs the Lisa's 5MHz). We also see evidence of it in the Amiga's higher quality modes, which demand an extra 25% (lo-rez 32-colour), 50% (lo-rez 64-colour/hi-rez 8-colour) or even 100% (hi-rez 16-colour) bandwidth, and sap the processor speed accordingly (in the latter mode, it can ONLY run during the border/blanking periods of the screen scan, being completely HALTed during the active parts of the video, audio and disc DMA cycle). In those modes, the ability for the custom chipset to compensate for the hobbled CPU, or even for the CPU to run on a separate bus with its own &quot;Fast&quot; RAM (one of the many reasons it was a comparitively expensive machine), become absolutely essential.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Backtracking to the 8-bits, we can still see similar, though there's often more of a tradeoff in terms of speed vs cost. The Spectrum needs about 14Mbit/s video bandwidth (=1.75MByte), with 7MHz pixels at 2bpp equivalent. The system clock spins at 3.5MHz, transferring 8 bits every other clock assuming ~2MHz memory and the usual 2-clock DRAM R/W cycle. So that's just enough to support the normal graphics mode (or the double rez, colourless option in its Timex sibling), with the processor halted during the active video period. This may be why the machine's video appears in a relatively small window with thick borders; you can still deliver reasonably good resolution this way, with high-ish clocks and a PAL signal, without entirely crippling the processor. There's exactly 224 clock ticks per line, of which 128 are taken up by video access, so you lose a little over half the potential memory accesses in this scheme... but, also, only 192 of the 312 scanlines are active. Overall, only 35% of the actual scanned frame is active video. If your programmer is sufficiently wizard-grade with their use of machine code and cycle counting, and can arrange so that the processor is fed a long-running instruction just before the start of the active video period (then writes out the result as soon as it's allowed, and spins through some shorter ones in the blanking period), you may only really lose a third of the available bandwidth... less still, if they can do it on every line. This, I expect, would have been considered entirely acceptable in the pursuit of a lowest-possible-cost Colour Computer that still gave &lt;em&gt;acceptable&lt;/em&gt; (rather than &quot;blazing&quot;) performance, especially as it was using what would otherwise have been considered a pretty speedy processor only a few years earlier when even pretty expensive CP/M based micros were using things like 2.5MHz i8080s. Compared to those, it had performance to burn. And if you were really bothered more by processing than visuals, there was likely still the option of turning the display off (except for syncs) altogether, such as what happened with the ZX81's &quot;Fast&quot; mode, or whenever you pressed a key on the ZX80. Or you could just buy a machine that cost more than £149 fully assembled...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(In fact, sanity checking my memory via Wikipedia to make sure it didn't run the bus at 7MHz instead with 4MHz memory... turns out the Spectrum improved on the ZX81 in more ways than just adding colour, sound, and a larger internal RAM/ROM. It actually WAS a split-bus design... maybe not fully a true two-bus system, but there was an at least notionally Amiga-like separation of &quot;memory accessible by the video/Glue system AND the CPU&quot;, being the lower 16KB (or &lt;em&gt;only&lt;/em&gt; 16KB, in the base model, where the above dissection would still hold true), and &quot;memory accessible only by the CPU&quot;, being the upper 32KB (or 112KB) in the larger-memory models. In which case, if you were writing 16KB code, you'd have to be exquisitely careful about your timing in order to squeeze out the best performance, but it's not like you were going to write anything THAT complicated in the approx 9KB of usable program RAM available to you anyway so optimisation was rather a given; if you were writing 48K or 128K code, you just had to make sure anything timing-critical lived above that 16K boundary, and save the spare 9-and-a-bit K of lower memory for less important stuff such as infrequently referenced data that could be specifically called upon during vsync, maybe a double-buffer for the screen or a larger scrollable area, music replay routines, etc... this would be analogous to using a higher Amiga video mode - EHB low rez in deep overscan, or 16-colour hi-rez with a reduced viewport - on a system with only 512K or even the very base 256K of the launch model, but 2x or more that amount hanging off the FastRAM bus, with the same considerations about what goes where, including whether the AV system could directly access it or not)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C64 I'm fairly sure I read as actually having GREATER memory bandwidth... like, the processor might have only run at about 1MHz, but the bus / RAM was clocked somewhat higher, and a typical video mode tended to share access on about a 2:1 basis (video:CPU) during the active periods. Atari 8-bits similar. These systems of course, particularly the Ataris, had the additional advantage of offering multiple screen modes, with contention varying - much like in the Amiga - according to the combination of text vs graphics, resolution and colour depth, as well as having hardware sprites that meant you could produce the illusion of a visually richer display (through use of a limited number of small, but higher resolution and higher colour depth elements, on top of an otherwise more rudimentary playfield; again, this helped the Amiga no end, especially in its later years when VGA-equipped PCs, later Macs, and 16-bit consoles became its main competitor, rather than the ST, 8-bit consoles and mono Macs) without having to significantly increase actual video bandwidth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(OK, I haven't done as well sanity-checking THAT, but what wiki knowledge I have dredged up says that the commie's VIC-II &quot;shares the RAM with the CPU, each accessing it on alternate half-cycles, other than so-called BadLines where the VIC blocks the CPU&quot;. Which, all in all, sounds rather like how the 68000 vs Video works in the later machines; as the VIC has a dedicated 4-bit mini-bus connection to the half-kilobyte &quot;colour RAM&quot; chip (presumably accessed at a higher frequency derived from the master 14MHz colourburst crystal?), which lies outside of the normal 64KB memory map, and that is responsible entirely for holding information about the attributes of the background character/tilemap, one assumes that in normal use the VIC alternates reading actual character information from RAM with attribute information from the ColourRAM (during phases where the CPU has memory access), and BadLines are... IDK... where the ColourRAM has to be updated from normal RAM, via the VIC, as it can't be directly written by the CPU? Perhaps it's refreshed on one out of every eight scanlines, always copying the data afresh with each new frame as that's a lot simpler than trying to determine when and what to copy, and as the characters are blocks of 8x8 (or 4x8) pixels the colours read from the first line are good for the other seven; in this way, the processor runs at full speed almost all of the time, only being halted for the active width of one scanline out of eight through the active height of the display... or in other words, about 80 out of 114 ticks, on 25 out of 262 or 312 lines per frame = 5.6 to 6.7 percent of the time, which again could be ameliorated slightly by clever time-sensitive machine language programming. Having to run just four short additional traces to one very small, simple, cheap additional chip on the board, to enable the CPU to run at about 93 to 95% of its theoretical maximum potential, with an otherwise maximally simplified design, seems like a reasonable compromise, vs either massively slowing it without that small additional buffer (losing more like 45 to 54% of its speed), or having to provide a wholly separate memory bank just for the video system in order to recover that last 6% or so.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Indeed, though it was not a conscious bit of copying, a thought-exercise design I came up with for a more comprehensively enhanced STe vs what Atari actually delivered incorporated something vaguely similar in order to allow more Amiga-like graphics modes without a second bus or increased clock frequencies; essentially, a small SRAM buffer which could be DMA'd into in the usual video-readout fashion, starting immediately after the end of an actual display period, but not stopping - and, in the real life machine, essentially idling/wasting cycles, not even recovering them (as the Amiga does) for Blitter or Disk transfers - during the border/blank area. The only slightly modified (to add extra modes) main video chip then reading out of that buffer during the usual display period, starting just as it becomes completely full up, and FIFOing for the remainder of the display time (reading out at a greater rate than it's being written into, but discontinuously), until it's emptied at the end of the active frame. In this way, a fairly cheap and simple 16KB SRAM, a mildly upgraded &quot;shifter&quot;, and a minimal tweak - not addition - to the existing Glue logic would allow a 50% increase of either resolution or colour depth (enough to finally produce a 16-colour 80-column display, albeit with only a 6x8 font, or with 4 colours/greys in the 400-line mode, or a true 640x200 display with 8 colours, or 320x200 with 64... or, say, 20% to one and 25% to the other... or a reduction of one with a greater than otherwise expected increase to the other) over what could be provided by the usual 32KB screenbuffer, and without causing any additional processor slowdown (UNLIKE the Amiga case), simply by taking advantage of the unused and &quot;wasted&quot; areas of the video scan. It's not quite the same idea as the C64 colour RAM / Badlines, but there's a good bit of overlap between them)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Atari... IDK what their approach was in that regard, but everything was a bit more modular and separate anyway, so there may have been full separation. But the wide proliferation of video modes, including some pretty weird ones with e.g. &quot;1.5 bit&quot; colour depth, means that it was probably all shared, and left up to the programmer to decide on an appropriate division of system bandwidth between AV and CPU)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later on is where this model started to fall apart, with systems like the A1200, Mac LC, Atari Falcon (somewhat; its architecture was largely designed to extend and make the most of a shared-memory model with a focus on improved graphics, but still suffered in the higher modes) and even the PCjr / Tandy series, not to mention a good bunch of peri-millennial PC systems which used AGP to share system memory with graphics, all showing increasing levels of system hamstringing with use of high quality graphics modes, particularly anything beyond the level of Generic VGA (ie, 320x200 256-colour thru 640x480 16-colour... in some cases the latter having to be interlaced to retain speed, unless the former was scandoubled anyway). But the fact that their makers thought that it was still a viable idea - and essentially provided for programmers and users to, as before, decide on the best mix of graphical quality and processor speed on a case-by-case basis (and, in the LC and A1200 at least, still provided for multiple memory areas so a well-behaved operating system or bootloaded program could keep time-critical code away from the AV memory) - shows that they had got well-used to it being an entirely workable concept with their earlier machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and another couple of considerations, which are certainly relevant to both the PC, and the TMS based machines: Code complexity, cross compatibility, and speed of video updating. Having to send data through a different chip, possibly at the end of a whole additional bus, makes for less efficient code than simply dropping it into a certain place in main memory, or moving it from one memory address to another. You have to write more lines in your programs to carry out the same task, you may have to duplicate data to a greater extent (having some things both in your main RAM and in the video RAM, for speed of access or just displaying it at all, and paging things in and out as needed), and it takes longer. You can't just MOV a bunch of bytes using the same mechanisms as any other transfer, but instead have to shuttle them through another chip, with particular instructions, acknowledgements, maybe a slower bus in-between, and that other chip isn't guaranteed to be particularly efficient or work as fast as the rest of your system. Plus in most of these early examples the available maximum VRAM is pretty limited (typically 16KB) and it doesn't always make the best use of it... EG often the only settable modes use the entire memory as a single display page... and even if they don't, the half-page capabilities are so poor that you wouldn't realistically employ them for anything but the most simplistic purposes. So you have to suffer a much slower full-screen update, by streaming the entire new screen across whatever bus is between your main memory and the video controller, and avoid doing that instead of rewriting small portions (or, where the facility even exists, moving sprites around on top of a static background), whereas on a lot, if not all of the shared-memory systems mentioned above, the screenbuffer is quite a bit smaller than the total memory space (and crucially, a good bit smaller than the range accessible by the AV system), so you can have multiple video pages (a la Hercules, EGA, VGA and later, more memory-dense PC video cards, or the graphics memory of later and more advanced consoles) within the shared memory area and flit between them with a simple single register write - that is, changing the start address of the active video area. Boom, double buffering and all its advantages, such as moderately smooth scrolling and/or sprite movements without &quot;tearing&quot;, zipper-effects, orphaned-pixel trails/smears, or &quot;snow&quot;, are yours for the taking, if you even need to use them anyway because of the increased write speed to the video memory and much improved ease of blitting sprites in from nearby offscreen areas, or shifting the entire image around by a few pixels (or chunky-scrolling by whole character spaces in the hybrid text/graphics models), if indeed the video chip itself doesn't allow hardware sprites and scrolling (for which a larger-than-the-screen memory page is &lt;em&gt;absolutely essential&lt;/em&gt;) in the first place, obviating some of those procedures entirely. This in part is why a lot of early PC games are single-screeners; the background is fixed and everything that moves does so against that static background, with any change of scene being a flip-screen affair. EG, Alley Cat, Round 42, or any number of first-gen arcade conversions (early arcade boards themselves being pretty simplistic and having very little memory). Also why almost anything that uses the TMS system or a derivative - including both the NES and SMS, as well as the first generation of MSX machines - operates on a tilemap (ie, background is essentially harware-scrollable textmode, but with a customised graphical character set) and sprite basis, rather than using bitmaps, because that's the only way to produce a dynamic, scrolling display with the available memory and update bandwidth (and usually they cheat somewhat by using the cartridge as a character ROM, instead of relying on having one in the machine, or using internal RAM to hold that data, so the notional memory space is a bit larger)... otherwise they'd be stuck with single/flipscreen action as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*(ironically, textmode could often be what made the highest demand, and was one reason CGA had to be a discrete card; 8 graphics pixels in monochrome use no more bandwidth than an 8-bit text character of the same width, and in 2-bit/4-colour mode they use as much as a character plus simple attributes... and on top of that the character/attribute data has to be converted into actual pixels by feeding through a font ROM and colour gating system... the only saving is memory &lt;em&gt;amount&lt;/em&gt; because that same character is read out from the same RAM address several times to build the image one scanline at a time. An integrated system probably could have dealt with CGA's graphics mode, and 40-col attributed or 80-col unattributed text, but the 80x25 full colour textmode that formed the basis for all standard PC text displays for the next 30+ years would have been unsustainable... hence the original problem of having to choose between slow / flickery screen-blanking Vsynced updates when scrolling, or putting up with &quot;snow&quot; as data transfer interferred with read-out to the screen) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS. The Spectrum's method of producing separate memory areas is likely rather simpler, and less costly than it would be in the Amiga... it is after all already a very pared-down architecture with the minimum of chips. Having a bank of 16KB and another of 32KB means you only need 14 (or maybe 7, if they're time-multiplexed) address lines going one way, and 15 (or 8) the other. Or if the lower bank shares space with the ROM (backwards to how you'd usually expect it - often, ROM is freely accessible by the CPU, but Sinclair was often found going against the grain, and in any case you're gonna need access to the character glyphs), each of them only needs 15 lines, instead of the 16 for the whole system. It's a small saving, but it's still a saving. In the 68000 system you'd have a minimum of 18 on the shared side (assuming 512KB and word rather than byte width access; more likely 20) and potentially 22~24 for the CPU-only side. Of course, the data lines would only count 8 on both legs, rather than 16, and I wouldn't be entirely surprised to find that they're actually shared and time-multiplexed somehow (like the chips are strobed one clock tick apart and the data coming off them gated, buffered inside the ULA, and delivered in just-in-time fashion to their respective destinations - which is somewhat like how the Atari ST Glue logic works when arbitrating CPU vs Video memory access; the access request from one chip is woven around the response to the other, and the actual addressing AND data is buffered through the chipset). And, in any case, the lines are WAY shorter; the Amiga motherboard version may find itself routed through 16 (1x256K, so each data line has a different length and path, alongside the address lines) internal chips for the video part, and off to an arbitrarily-placed external connector on the FastRAM side. The Spectrum one? A single 8x16K chip on one side, and two on the other, each getting all of the data lines and most of the address lines, making the routing short and uncomplicated... And of course the C64 one is simpler still. Just four (eight?) extremely short traces between the VIC and the CRAM. Comparing either of those (or, say, the Falcon's Videl) to the Amiga, or the entirely separate video and VRAM subsystem in a TMS design, let alone the complete multi-slot expansion bus in a PC, is like apples to oranges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PPS FWIW the BBC used &lt;em&gt;4MHz&lt;/em&gt; memory. It clocked the memory bus at twice what the processor and video sections ran at, allowing zero-contention access by both to the same memory areas. It just so happened to exist at a time when that speed of memory had become affordable, but the processor speeds hadn't yet increased to match. Thus CGA-like graphics (but with greater height, slightly better choice over palette, and a higher-colour/lower-resolution option, with no &quot;snow&quot; or other silliness, at the expense of its most colourful textmode being limited to a &quot;mere&quot; 40x25 in 8 colours) and a fairly nippy 6502 (probably acquitting itself quite well against the PC's 5MHz 8088 in a straight fight), all on a cost-efficient shared system architecture, leaving overhead in the budget for all the additional nice-to-haves like the coprocessor bus, sideways ROMs, disk operations, decent BASIC, surprisingly good soundchip (at the time, only really beaten by the SID), relatively professional keyboard, monitor output, more ports than you can shake a stick at, EcoNet capabilities, surprising memory expansion capability, etc. Showing that, at least with an extra year or two of development and serendipity, you need not make something along the same lines as, or costing as much as, the IBM in order to enjoy similar performance.&lt;/p&gt;&#xA;" OwnerUserId="10196" LastEditorUserId="10196" LastEditDate="2019-10-27T22:22:37.033" LastActivityDate="2019-10-27T22:22:37.033" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12593" PostTypeId="2" ParentId="12591" CreationDate="2019-10-27T22:06:00.710" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm reviewing the historical original ASCII standard.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 1963 iteration was still mostly TTY orientated and got only partly adaption with TTYs. Computer use was incosistent, especially since most logical control characters were not standardized at all.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There are many control characters. Does anyone know the history of them&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Except for the Sn series they're all TTY related and direct descendants of other prior codes and applications (mostly ITA2 as base and FIELDATA for computer use). You might want to consultate other teleprinter setups and manufacturers here, as well as their protocols.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and where finite state machines that made use of them may be documented?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mind to explain what kind of purpose the a state machine you're asking for should have? Without that question doesn't make much sense.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I ask because it's not in the document with the ASCII standard I found.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As it's not any business of the standard? Keep in mind, back than standards were made for practical use by engineers, not theoretical clean room definitions. All control codes used are of obvious meaning to a 1960s user, so no need for much explanation, beside spelling their function that is.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-27T22:28:23.183" LastActivityDate="2019-10-27T22:28:23.183" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12594" PostTypeId="2" ParentId="12591" CreationDate="2019-10-27T22:31:46.590" Score="3" Body="&lt;p&gt;The ASCII standard doesn’t explain how it was constructed, but &lt;a href=&quot;https://textfiles.meulie.net/bitsaved/Books/Mackenzie_CodedCharSets.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Charles E. Mackenzie’s &lt;em&gt;Coded Character Sets, History and Development&lt;/em&gt;&lt;/a&gt; does. Section 14.9 covers control characters. When building the 1963 version of the standard, a number of control characters were deemed essential for transmission control, and these were placed in the code space in such a way as to minimise the risk of transmission corruption; in addition, a few “format effectors” (tabs, line feed, form feed, carriage return), code extensions (Escape etc.), and some miscellaneous control characters (bell etc.) were included. The remaining characters were assigned general meanings but nothing specific (device control and separators). The addition of the lower-case alphabet in the 1967 standard meant that some control characters had to be moved; others were renamed, or removed, and quite a few were added (including backspace, EOT...). The 1967 standard is the version still in use today.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-10-27T22:31:46.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12595" PostTypeId="2" ParentId="3061" CreationDate="2019-10-27T22:49:39.457" Score="1" Body="&lt;p&gt;It's a first generation, &lt;em&gt;first party&lt;/em&gt; piece of primary hardware for the IBM PC, before anyone even started thinking about offering additional video adaptors for the platform. Video was laid out in the system specs as being addressible at a certain set of addresses depending on the type of adaptor - and, indeed, it's something you set up using DIP switches on the motherboard, picking between a limited set of options (IIRC... &quot;Color&quot;, i.e. CGA; &quot;Mono&quot;, i.e. MDA; &quot;None&quot;, or &quot;Other&quot;... as well as &quot;40&quot; vs &quot;80&quot; column modes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, who decided it? Er... &lt;em&gt;IBM did&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10196" LastActivityDate="2019-10-27T22:49:39.457" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12596" PostTypeId="2" ParentId="6066" CreationDate="2019-10-27T23:07:36.987" Score="4" Body="&lt;p&gt;Short answer: No.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long answer: Noooooooooooooooooooooooooooooooooooo. You've made a fundamental misunderstanding about the nature of the early IBM PC hardware, and all those hours of puzzling could have been solved by, well... going back and reading up on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PC and XT mainboards could &lt;em&gt;address&lt;/em&gt; a maximum memory range of 1 megabyte, as that's all that the lines coming out of the processor could span. But, the architecture had to allow for various other things in the memory map: a not inconsiderable amount of onboard ROM (the early machines being BASIC-centred, as neither a disk drive nor a DOS could be assume as present), plus any number of expansion cards (the machine was made to be hugely expandable - you could even buy a secondary Expansion Chassis box with a load of extra slots and its own power supply) acting as memory-mapped IO devices, often with their own RAM and ROM that needed access ranges outside of the usual RAM zone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Initially this was split 50/50, as in 1981 a half megabyte of memory was huge; the base model of the PC came with 16KB, and the deluxe model had 64KB. When power users started demanding even more, and it became clear that 384KB of address range was more than enough to fit in the usual complement of ROM and IO, a revised BIOS was issued that adjusted it to more like 5/3... that is, you could have upto 640KB of RAM without using special banking/paging drivers to access supersized cards. Hence the familiar conventional memory limit of many successive generations of DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No PC/XT therefore has 1MB on the motherboard. 3/8ths of it would be wasted, and at early 80s prices, that's a LOT of money to burn for no reason. It may look like there's two equal banks on some of them, but that's an illusion; one will use more expensive, high density chips to provide 512KB, the other will use cheaper low-density ones (but the same amount, as typically they're arranged as 1-bit wide devices, thus there's 8 in a bank) for the additional 128KB. Others will make it a little more obvious by having three banks; two of 256K and one of 128K. A lot of XTs were sold with 512K on board and the user had to supply the rest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ATs, it's anyone's guess. A lot were sold with 512K or 640K just because that's what made economic sense in the market segment and was most convenient (no need for extra drivers under DOS or whatever), and some early configurations even had less. But I doubt it would have been uncommon to find later ones with at &lt;em&gt;least&lt;/em&gt; a full meg onboard, and/or maybe additional SIMM slots or an EMS/XMS memory card in one of the expansion slots to increase the total amount to 1MB or more with use of HIMEM or other such drivers. They could &lt;em&gt;support&lt;/em&gt; more, natively, indeed all the way up to 16MB (though with the typical PC 640-to-1024K memory hole, and another near the top of the expanded range, a max of 15MB was more common), but a fully loaded example would be a fancy machine indeed, and expensive with it. I doubt many ever had more than 2MB, or 4 at most. Either way, just having 1MB on the mainboard would likely have been an uncommon occurrence overall, apart from a certain period, probably just before they started giving way to 386s in great numbers, when that became a briefly common standard setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I actually have a 286... with 640K on the mainboard, and two SIMM slots. Populated with the only valid configuration, it's still not &quot;one meg&quot; - instead, it's 1152KB)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the video cards, etc... yeah, their onboard memory had to &lt;em&gt;fit into&lt;/em&gt; the overall system map, but it didn't become a true &lt;em&gt;part&lt;/em&gt; of it. You couldn't load programs into it and execute from there, as far as I'm aware. Though I'll admit a little confusion on that front myself, as &lt;em&gt;ROMs&lt;/em&gt; that sit in the over-640KB region are entirely executable without being &quot;shadowed&quot; into main RAM, so, maybe? I don't think many people have tried it as a realistic thing, though, because by the point graphics cards started coming with a large enough amount of memory to make that a worthwhile tactic (and started pushing the boundaries of what would fit in the IO zone) - namely, enough to allow multiple logical graphics pages, so you could write data into a part of the adapter that wouldn't immediately show up on-screen, and pull off tricks like double buffering - actual system memory had also expanded quite considerably and it wouldn't have given quite the same boost as before. Plus reading anything over the expansion bus was pretty dang slow, hence the common tactic of &quot;shadowing&quot; ROM for faster execution. Plus any card with more than 64KB - e.g. VGAs, or EGAs with more than the basic, somewhat crippled memory count - didn't expose all their memory in one go, and instead had paged access via 64KB blocks and a page register, to avoid overloading the available address space (especially crucial with the PGC, XGA and other expanded-VGA cards that had 320, 384, 512KB or more...)&lt;/p&gt;&#xA;" OwnerUserId="10196" LastEditorUserId="10196" LastEditDate="2019-10-27T23:12:44.073" LastActivityDate="2019-10-27T23:12:44.073" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12597" PostTypeId="2" ParentId="4652" CreationDate="2019-10-27T23:28:51.500" Score="0" Body="&lt;p&gt;Hmm... quite the puzzler! Other than what others have already written, I can't think of any - the TMS series were about all I was aware of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were some more-or-less single-chip, and very definitely intended as &quot;off the shelf&quot; PC options intended for use by graphics card OEMs that pretty much anyone building a system - PC or otherwise - could have bought, but I dunno if they'd count for your purposes. The EGA-clones had a variety of interesting accelerated writing and graphics manipulation functions and modes, including multiple software-definable character sets (usable in just the same way as console tilemaps) and smooth hardware scrolling even of text displays, but nothing that would so much count as a &quot;sprite&quot; engine. The VGA-clones added at least a single hardware sprite - for the mouse cursor - but it wasn't exactly very sophisticated or useful (limited to 32x32 pixels, 2-bit colour, and a fixed location and pattern that could only be updated at Vsync, IIRC) compared to pretty much any other sprite engine all the way back to the VCS. In a lot of cases it wasn't even used for the mouse, and programmers just blitted the cursor onto the display instead, making use of the chip's manifold other accelerated drawing functions to speed up everything else. You start getting Super-VGAs and XGA-clones just before the turn of the 90s, which may include a few such functions, but they're already moving more into the realm of Window Accelerators, and accelerating general memory transfers and blits as much as possible, with an emphasis on CPU-driven and GPU-assisted general drawing functions, with simple copying of a small, limited colour chunk of bitmap on top of it all being considered a fairly trivial thing for a target system to pull off without any particular assistance at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apart from the TMS derivatives used in a huge array of consoles and console-ish computers, and the PC series (and exotic, expensive stuff like the 34010), most manufacturers of the era were pretty insular and relied on home-rolled designs for their graphics hardware, as far as I knew. The fact that MOS didn't bother marketing the VIC outside of their own machinery maybe indicates that they didn't even think there'd be a market for it (...that or they figured it and the SID were so far in advance of everything else, they didn't want to lose the advantage), and/or that they figured said market was already pretty well sewn up by Texas Instruments and whoever it was made the Teletext/Prestel character generator...&lt;/p&gt;&#xA;" OwnerUserId="10196" LastActivityDate="2019-10-27T23:28:51.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12598" PostTypeId="2" ParentId="8624" CreationDate="2019-10-27T23:39:03.170" Score="1" Body="&lt;p&gt;An interesting proposal... I do wonder if we may have seen the like if other advances hadn't made it irrelevant. For instance, in the case of the Amiga (and somewhat, the Atari STe) as well as a lot of consoles, the main things that this design would accelerate are instead cared for quite well by hardware scrolling, sprite engines (and/or general blitters), palette manipulation and special effects such as halfbrite, shadow/highlight, tinting etc. All of which make tactics like doublebuffering, and so the additional speed of writing to two separate, switchable memory buffers, mostly or wholly unnecessary. On the PC side, we have Window Accelerator functions which can draw into the active display memory (e.g. the 256KB of a VGA, which is insufficient to hold two separate pages at any resolution above 640x400) fast enough that most routine functions can be completed in less than a single frame scan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(That said, in lower resolutions, I have a feeling VGA, possibly even EGA can be set up to operate almost exactly as you describe ... with the difference being, of course, that they don't provide most systems with any kind of CPU-executable RAM. But they can be chained so that their memory space is divided into two or more entirely discrete buffers, one of which can be written into without any kind of performance penalty, even with regular single ported DRAM, whilst another is being used to construct the display... at least, if I'm remembering things correctly. It might be that they still have contention but just hide it really well through FIFO buffering and simply being much faster than most other home computer chipsets...)&lt;/p&gt;&#xA;" OwnerUserId="10196" LastActivityDate="2019-10-27T23:39:03.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12599" PostTypeId="2" ParentId="5994" CreationDate="2019-10-27T23:51:18.203" Score="0" Body="&lt;p&gt;This could have been figured out just by looking up what actual hardware is in an Amiga, or even any typical 16-bit computer. 400-ish nanosecond latency is &lt;em&gt;slooooooow&lt;/em&gt; for this kind of machine. Even the IBM PC used DRAMs faster than 300ns (it was either 250 or 200, I forget which). The actual memory used in yer typical Amiga (or ST, even) was 150ns. Sometimes 120ns when that became cheaper, because technically the 150ns stuff was being somewhat overdriven (especially in the Atari) - the actual memory cycle in an Amiga is not 280ns, but 140ns, because for every access the 7.1MHz 68000 makes (on a 4-clock cycle), &lt;em&gt;the video also makes one&lt;/em&gt; (and similar for the 8MHz ST).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[EDIT - OK, I got that a bit backwards; a full 68K cycle is in fact 560ns, with two actual memory access slots of 280ns each - usually one to CPU, one to DMA (covering video, audio, blitter, disk...) - themselves composed of two 140ns clock ticks. It's the ticks that are crucial, as the memory has to be able to respond to an issued RW request within ~roughly~ 140ns (thus, you can &quot;push&quot; decent 150ns parts)... every 280ns, continually. It's easy to get confused by it, I admit; getting it straight requires an understanding of how memory works, how the timings are designated, and how the computer architecture is set up]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This is assuming the default 16-colour 320-pixel mode, or 4-colour 640-pixel, which gives the best balance of CPU performance vs image quality; the majority of 68000 instructions are aligned to a 4-clock rhythm, and a memory access is a minimum of 4 clocks, but only 2 of them are actually used for data transfer, allowing the system chipset to buffer the request and only hit RAM then deliver the result when it's truly needed. The actual memory bandwidth is the same in higher colour modes, but the balance shifts, so that the video system gets not just 4 out of every 8 memory accesses during the active drawing period, but 5, 6, or the full 8)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1 billion nanoseconds, divided by 140, gives you approximately 7.1MHz. The latency in this case is the time taken between the memory receiving the R/W access setup (with the address and type of request) on one clock tick, and being able to either deliver the Read data or accept the Write data on the next, and also the time between doing that and being ready to start again on the third tick. There's sufficient wiggle room with chips operating at 150ns, expecting a maybe less than perfect jitter from their host circuitry, that they can be safely run at 140 in most systems, or even 125 (=8MHz) if the voltage is strong enough and the signal swing fairly sharp.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And in the PC, which operated at a touch less than 5MHz, 200ns would have been more than sufficient; 250ns is still within the realms of possibility, especially as it may well have inserted Wait States as a matter of routine anyway. If we go all the way to 400 or so, we're down into the realm of 2.5MHz operation; that's not even really enough to support a fast Z80, for which you might want 300 or even the full 250ns - memory that slow is limited more to older Z80/i8080 systems, or 6502/6800 based designs. Maybe you're confusing the operation of the shared-video-memory, higher-speed Amiga with the reference design for the 68000, which started off at just 5MHz and didn't expect anything but the CPU to access RAM directly, and therefore was entirely happy specifying much slower memory?)&lt;/p&gt;&#xA;" OwnerUserId="10196" LastEditorUserId="10196" LastEditDate="2019-10-28T00:01:10.057" LastActivityDate="2019-10-28T00:01:10.057" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12600" PostTypeId="2" ParentId="1494" CreationDate="2019-10-28T00:14:41.843" Score="0" Body="&lt;p&gt;Interesting question. It would hinge on whether &lt;em&gt;anything&lt;/em&gt; other than the CPU is able to interfere with Fast RAM, or attempt to interfere with the CPU whilst it's in the middle of a TAS cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with running it in Chip memory is that it's non-interruptible, and the Amiga architecture (as per that of many other contemporary 68000-based, shared video memory, single processor machines) hinges on being able to insert 2-clock video memory-access cycles in the &quot;idle&quot; parts of the usual 4-clock 68K memory access, using buffers in the chipset, and asserting waitstates on the processor to briefly halt it (for 1 to 3 clocks) if it happens to execute a longer-running instruction that means it attempts to start a memory access cycle outside of that usual 4-clock aligned rhythm (and, in certain video modes in the Amiga, for a clock or two at the end of each scanline, to keep it locked to the correct broadcast scan frequency). Obviously, a 5-cycle memory access instruction that is, by design, noninterruptible, and sends the processor into a seizure if it can't complete as intended, upsets that particular applecart somewhat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally, Fast RAM is dedicated entirely to the processor, and one of its main benefits is that there's no limits on how it's timed (even with the chipset using a video mode that would otherwise cause the CPU to be halted much more of the time than usual, there's no slowdown, and it can execute unaligned instructions to its heart's content without even the usual minor stuttering that would cause; and, of course, it can have faster and higher-end chips like the 68030 attached, which have shorter inherent memory cycles, and operate those at their native cycle alignment)... therefore it can do whatever the dickens it wants to within that realm, including executing TAS instructions. If that is indeed the case, then I don't see why it shouldn't be legal to do so... notwithstanding that it's intended (IIRC) as a method of ... message passing? checking for bus/process lock? in a multiprocessor system, so you'd have to be running an Amiga expanded with not only Fast RAM but an additional 68000 (or better) set up not as a system-overriding accelerator but a true parallel coprocessor. Which kinda limits its usefulness and the cases in which you'd want to code it into your program in the first place, because I don't know if I've ever &lt;em&gt;heard&lt;/em&gt; of a multiprocessor Amiga before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Also you'd need be able to absolutely ensure that your program was running 100% in FastRAM and there was no possibility that the crucial parts of it executed from Chip ... I'm not expert enough about &lt;em&gt;that&lt;/em&gt; to know whether it's difficult, but I do remember seeing utilities to force programs to &lt;em&gt;prefer&lt;/em&gt; loading into FastRAM first if at all possible, so it's certainly not an automatic thing that the system does, and even that wouldn't seem to make it guaranteed)&lt;/p&gt;&#xA;" OwnerUserId="10196" LastActivityDate="2019-10-28T00:14:41.843" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12601" PostTypeId="2" ParentId="7626" CreationDate="2019-10-28T00:32:18.610" Score="2" Body="&lt;p&gt;It's because of the particular things each system was best at, and could better accelerate. 3D games were actually one of the few cases (plus a few other number-crunching sims?) where games ran faster (not just &quot;at the same speed&quot;) &lt;em&gt;on the ST&lt;/em&gt; rather than the Amiga. And it's entirely because of the reason you first posit; the Atari had an ~11% faster CPU clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The games in question were very heavily CPU-bound, their simulation, and their drawing as well, relied almost entirely upon numeric calculation (and getting stuff in and out of RAM, which was also faster). The actual moving-data-to-the-screenbuffer part was a relatively small piece of the whole setup; I daresay that the Amiga's custom chipset still made &lt;em&gt;that&lt;/em&gt; operation somewhat faster than the same job in the ST, at least what parts of the job it was actually capable of accelerating (it's not really much of a GPU; it's pretty much just a console style hardware-sprite-and-scroll engine, with a few fancy tricks like line-by-line auto-fill which helps a bit with rendering solid polygons &lt;em&gt;if the programmer knows how to / can be bothered making use of it&lt;/em&gt;, or the register bit-banging provided by the Copper), but the ST was already entirely capable of shoving the calculated and rendered output to the screen pretty much as fast as it was produced (by double buffering, so the final &quot;painting&quot; of the screen was a single register-write), so the best it could have done was maybe shave one scan-time off the construction and display of each frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's no line or box or other primitive drawing acceleration, no large-area auto fill, no bezier curves, absolutely nothing that would count as even the most rudimentary 3D acceleration, the sprites or second playfield only appear as overlays (and for the most part are irrelevant here, other than PF2 being used as a cockpit/HUD for a fairly minor speedup), hardware scrolling is pretty much useless, as are most Copper tricks, and even the (less efficient than the ST's - assuming the Atari had one fitted of course) Blitter is of limited usefulness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the complexity of the scene was such that it took the Amiga CPU fully 8 scans to finish computing and rendering the image, but the ST only needed 7 (entirely plausible given that a lot of 3D polygon games really struggled to do any better than maybe 6~7fps, which is a 7 to 8 &quot;frameskip&quot; on a PAL monitor, and worse on NTSC), then even that minor improvement to the rest of the system latency wouldn't do anything more than bring them back to level-pegging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pretty much any other type of contemporary game, sure, the Amiga had it comfortably in the bag. But for sims and other 3D stuff, the ST just about nosed ahead.&lt;/p&gt;&#xA;" OwnerUserId="10196" LastActivityDate="2019-10-28T00:32:18.610" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12603" PostTypeId="2" ParentId="12588" CreationDate="2019-10-28T02:55:26.200" Score="5" Body="&lt;p&gt;Pretty much every piece of electronics that's sold in the US, and may potentially be powered off the AC mains, has a label like that on it somewhere. It is basically a legal requirement... no certification, not legal to plug in and use outside of some very limited circumstances. And I think it's actually harder / more complicated to get certified for home equipment than for offices; there's some urban myth that off-white casings became de rigeur for PC-type computers and other items of office paraphenalia (vs woodgrain or other more interesting designs) in order to mark out those which weren't licensed for use outside of that setting (a bit like educational equipment being bright orange to deter theft), which obviously died a death as a useful visual cue once manufacturers just started using the same casings for all their models regardless of license.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wasn't always a thing, I think it was an optional certification at first, but became more stringently required after home computers/consoles and VCRs started becoming popular and the more poorly made ones were found to emit ludicrous amounts of RF that actually could interfere with other devices, sometimes catastrophically (OK, it's annoying if it disrupts your TV program, worse if it smokes your TV, but think about how many other device it'd be far less amusing to have that happen to), as well as being vulnerable to outside interference (e.g. the ignition of an old and similarly poorly grounded/shielded car driving past), so they're probably more prominent on 80s machines when it was still a relatively novel thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look around the other things you have scattered about and you'll likely start finding loads of them, in all manner of unexpected places.&lt;/p&gt;&#xA;" OwnerUserId="15467" LastActivityDate="2019-10-28T02:55:26.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12604" PostTypeId="2" ParentId="6174" CreationDate="2019-10-28T03:21:08.580" Score="1" Body="&lt;p&gt;In addition to the above explanations re: sprites actually only having 8 bits of position resolution, the first column blanking option etc, the NES - and others following its same general design - actually had another, simpler, more physical tactic to address the problem: Overscan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pixel generator clock, derived from the NTSC colourburst crystal by some particular divider, was conveniently just slow enough that, on a &quot;normally adjusted&quot; CRT television (calibrated with the standard test card and other tools), the console couldn't quite show a full 256 pixels within the visible borders of the tube / bezel. ISTR your likely visible width being rated as somewhere around 240 to 252 pixels depending how well in-spec your TV is, and it being more likely that things would disappear off the left than the right due to the NES timing. Which is why on-screen text rarely goes all the way to the edges, despite how low resolution it already is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This tactic is also used at the top and bottom, even though the 8-bit range isn't really a problem there. There's quite a bit of garbage that can be seen around the vertical borders, on emulators and I think PAL machines also (as the screen exposes more scanlines, usually a &lt;em&gt;minimum&lt;/em&gt; of 256). The machine is generally set to produce 224 lines, sometimes 240, but yer typical TV can only display somewhere around 212 to 220 at best. Without having to do any particular work, therefore, most if not all of the junk is just pushed away off the top or bottom physical limits of the screen where no-one will ever see it ... at least, in the originally intended field of use. It doesn't therefore matter if weird things happen at the edges of the image, because, technically, you shouldn't be able to see it, or if you can it's right on the edge of the screen where the whoopsies will only be visible right near the centreline and will clip off for certain at the corners.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just like how regular broadcast television tends to work, in fact. If you capture an old tape using a USB converter card, or even just play it on a modern flatscreen TV with &lt;em&gt;way&lt;/em&gt; less inherent overscan (which also makes NES games look like crap, for that and various other reasons), you can see all kinds of little telling details at the margins that would have been totally invisible during the original broadcast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for what that particular pixel clock is, I forget exactly. It's five-point-something megahertz. 5.3? 5.7? It's a little odd in that it's derived from the slightly unusual NES master crystal that's not 4x the base colourburst, but 6x (so 21ish MHz vs the more familiar 14ish), owing to how the machine builds its colour output using a 6-bit quasi-binary pattern, so there's a different set of factors vs most other contemporary machines (other than those which use a similar video setup of course; the TI-99/4A, Colecovision, original MSX range, SMS, and Megadrive in 256px mode, are all at least close if not identical). I do know it's a little slower than 4/5ths of the Amiga's 7.1MHz (itself 2x colourburst, so it likely ain't 4/15ths of 21.whatever, which would be a weird and hard-to-engineer divisor anyway), because on the same range of TVs which exhibit the described behaviour, the Amiga (and Atari 8-bits - and C64? - before it), by a similar confluence of luck and design, manages to cram in 320 (or 640 (or 160)) pixels just &lt;em&gt;inside&lt;/em&gt; of the overscan border, losing a few right in the corners of curvier tubes. So... less than 5.73MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably 5.37ish? That's a nice round 1/4 of colourburst x 6, and conveniently is 3/4 of Amiga frequency - meaning mathematically it gives us 240 pixels &quot;just&quot; inside the overscan, with a single 8-pixel block on each side cut off by the bezel to a certain extent, or - if it's aligned more completely at the right - only a little bit missing on the right hand side, a mostly or completely missing first column on the left, and a second column which is either wholly visible or slightly cropped after it...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(NB I'm working off the on-screen appearance PAL machines here, which run just a little lower frequency than their NTSC counterparts; a US Amiga likely doesn't quite overscan even in the corners, and a US NES likely just neatly shears off most or all of the first column whilst leaving the second and all the other 30 intact... the figures are correct, however; colourburst frequency is exactly 315MHz divided by 88...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS, the &quot;working out screen position from memory address without use of division/multiply&quot; thing is... &lt;em&gt;convenient&lt;/em&gt; for those systems which happen to have a 256- (or 128-, 512-) pixel screen width, or have the option of setting it (e.g. Atari 8-bits include the lower two amongst their many choices), but it's not universal. There are plenty of 8-bit systems (and, heck 16-bit ones which had MUL/DIV instructions but didn't exactly execute them particularly fast) where the screen wasn't a binary-aligned width - VIC20, C64, VCS, every other Atari mode, Apple ][, Amstrad (CPC &lt;em&gt;and&lt;/em&gt; PCW), Gameboy, Gamegear... etc. Presumably there must still be ways - perhaps using modulo functions? - of carrying out the same task without spending inordinate processor time or wasting memory on huge lookup tables?&lt;/p&gt;&#xA;" OwnerUserId="15467" LastEditorUserId="15467" LastEditDate="2019-10-28T03:34:03.167" LastActivityDate="2019-10-28T03:34:03.167" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12605" PostTypeId="2" ParentId="2138" CreationDate="2019-10-28T04:29:43.540" Score="0" Body="&lt;p&gt;No, NTSC does not have 240 (or 241, or 243, or whatever other similar figure a particular source might state) &lt;em&gt;visible&lt;/em&gt; scanlines. It has 240 &lt;em&gt;active&lt;/em&gt; scanlines. This includes a fair bit of overscan, to allow for both some variation in the analogue camera and the analogue receiver, so that the viewer sees a seemingly continuous picture all the way to the visible edge of their tube without any of the spurious studio paraphenalia that may sneak into the edge of shot momentarily until the camera operator corrects for it, weird glitches due to nearby sync pulses and so-on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may notice that a VCR, DVD player, or games console (particularly a later model) which is designed to give a fully overscanned image will claim to output 240 (or 480) lines, or something close to that, but there are a &lt;em&gt;great&lt;/em&gt; number of home computers, and indeed earlier consoles, which instead output something closer to 200. The lower end like the VIC20 run maybe 184, the majority are 192 or 200 (or double up to it from 96 or 100), and a few push the boat out to maybe 212 (the MSX2 range, for example) or 216, which is pretty much the theoretical max that can be just about seen on a good majority of sets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is because they are made not only as screen-filling graphical entertainment devices where a little bit of detail lost at the edges is unimportant, but as general purpose machines where a good portion of user interaction is through text, or detailed on-screen diagrams, which you ideally want all, or certainly a good 99% of to be clearly visible. There's no point going to the programming and processing trouble of generating and rendering that text or graphic to the screen if no-one's going to see it, and the memory and/or effort that would go towards provisioning the extra lines is a waste that could be used to improve the rather less fixed/prescribed horizontal resolution, or the colour depth, or just storing additional character definitions and program data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some others straddle the line with 220 or 224, which is generally enough to achieve overscan on most NTSC TVs without bothering to generate the extra 16 lines that no-one will ever see. They can however generally be considered cousins of the 240-line models, and for the same reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general these modes persist in PAL-land, largely through inertia, laziness/ignorance, and economics, as well as compatibility reasons. If you're going to make a certain design of machine that will, hopefully, become as popular as possible and have global reach, you don't want the software causing problems in different parts of the world because the screen resolutions don't match (and depending on the program it can be as trouble some to have too many lines, as not enough). So you fix the screen mode to be the same everywhere... and just set up the video hardware to have an extra 50 lines of blanking in the PAL models vs the NTSC ones. In most cases this just means the Euros get slightly annoying but workable letterbox-o-vision with about 10% of the screen both above and below the active image being a flat border instead of containing useful imagery that extends almost to the screen edge; in some, ironically often those which have hardwired regional lockouts which you'd think would be partly aimed at providing fully localised and resolution-adapted versions of NTSC software, it can be a bit more troublesome where the generated image runs almost all the way to the edges but has loads of visual garbage along each edge...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except in a few very limited cases, which tend to have suffered their own daft compatibility issues. Firstly the BBC Micro, which defaults to 256 lines in its original PAL incarnation; this is about as good a fit for our screens as the 212-line MSX2 display is for NTSC... that is, with an optimally calibrated screen, it's pretty much a perfect maximum. 240 lines would be a more logical equivalent, given the ratios of active linecount and the framerate vs linerate relationships, and appear about as tall as 200-line on NTSC, but I guess the draw of that perfect binary alignment is just too much, as we see 256 rather more often. Anyway, though 200-line is an entirely routine, official alternative mode (all of the regular 256 modes have a 200 counterpart, perhaps with a mind towards globalisation or just using a 60Hz monitor for less flicker, perhaps to make porting software from lower resolution rivals and predecessors easier), enough native software was made to run strictly in 256 mode that it probably caused a good deal of headaches trying to localise and market it for e.g. the US market, and is a pointer for why it didn't ever take off there. That and it was essentially stepping on the toes of both the Apple ][ and the Atari 8-bits, both 6502 based machines of, clock speed aside, rather similar capabilities and expandability... and domestically produced to boot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar to that, the Amstrad PCW. Its green screen and high resolution gave an impression of something similar to the IBM MDA, or - thanks to the graphics - a Hercules Mono card. Actually it was just a CPC with tweaked firmware and the guts of a regular B/W TV, calibrated for a slightly smaller scan than usual (so 720x256 at the regular clock rate would still fit with a fair bit of underscan) and mated to a long-persistence green phosphor tube. For reasons known only to Alan Sugar, when exported to the states, it too defaulted to the optional 200-line/60Hz mode despite the screen being built-in and looking perfectly fine at 256/50, considerably reducing how many rows of text / cells you could fit on-screen with the word processor and spreadsheet programs, and breaking compatibility with pretty much every single other program, especially the games, ever made for the platform. At least in that case it was just a software command to switch it back before retrying...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the Amiga, which is a bit of an odd fish given that it's a US product, the PAL mode seems to almost be an afterthought (and the flicker, especially in interlace, was enough to make 60Hz modeswitch utilities fairly common), but it then ended up becoming more popular in, and being heavily programmed for in Euroland than its actual home. Some softies just went with the ROM-default 256-line mode and then had their programs fall down hard on NTSC machines because they can't even &lt;em&gt;set&lt;/em&gt; that as a deep-overscan mode (unless they're first tripped into PAL mode somehow, by hardware tweaks or clever software), topping out instead at about 243 lines, and the alternative of 128 lines doubled up by interlace just looks horrific. A rare few made dual 200 and 256 line versions of their programs. And the rest just threw in the towel and defaulted to plain 200-line mode for wider compatibility, or maybe just through laziness as that (or 192-line) was what the original/most other versions of the game they were porting TO the Amiga used, so why rock the boat and end up spending ages redrawing all the graphics from scratch? The problem with that being ... they rarely bothered checking for a PAL machine, and offering the option either of attempting to force it into 60Hz mode (which generally looked better because of the corrected aspect ratio and reduced eyestrain), or staying at 50Hz but with properly adjusted borders so the image was squashed but centred. Instead they just ran with the defaults, and the picture therefore clamped itself to the top of the screen, and had the lower 20 to 25 percent blanked out with border colour. Jeez. (If you had something like the quite widely adjustable Philips CM8833 or Commie 1084 monitor, it wasn't so bad, as you could stretch and reposition, but on a TV or simpler monitor you were stuck). And that's before considering the oddities of things like DblPAL mode promotion on later machines...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, if memory serves, the Playstation and PS2... which could go up to 256p or 512i in PAL regions, but precious few titles ever went beyond 240/480 or even the more common 224/448 or 216/432. I think TOCA Touring Cars was amongst them, which makes sense for a UK-developed game. Even the otherwise reasonably well adapted Gran Turismo and SSX series seemed to have a hint of a letterbox border, presumably running 240 line, just slightly breaking their otherwise pretty decent immersion. (GT4 on the PS2 actually reveals their CRT, as well as NTSC focus/prejudice; if you hook the machine up over component cables to get 1080i HD output, there's a clear border around the image on an LCD, where the resolution has been trimmed a bit to keep the framerate up, possibly to 1024i, maybe even 960, but would likely not be visible on a hi-def CRT with the same degree of overscan as a standard def model...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FWIW: PAL does not have 288 / 576 (or whatever) &quot;visible&quot; lines either. As per the above, you get about 256. Some sets maybe only low 250s, maybe 252, but unlikely to be even as low as 240. Probably some you might nudge into the 260s. But the only time I can push my A600's interlace overscan past 560 lines (or, indeed, the horizontal overscan up past 350/700 pixels) is if it's connected to that same minimal-overscan LCD as per other examples above. On a regular CRT it's barely worth playing with the settings, as the default 320/640 x 256/512 more or less completely fills the visible area already (and, if you use a 60Hz switch, the default 200/400 lines are only a little bit shorter; you could maybe add another 20 through overscan mode at the most)&lt;/p&gt;&#xA;" OwnerUserId="15467" LastActivityDate="2019-10-28T04:29:43.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12606" PostTypeId="2" ParentId="6827" CreationDate="2019-10-28T04:52:01.440" Score="3" Body="&lt;p&gt;One thing I have seen is that with the reprogrammability of the 6845 CRTC on the CGA - and moreso its workalike on the EGA - you can indeed put more than 200 lines on the 5153 if you really want to. To make it work on CGA you either have to reduce the horizontal resolution, or use 40-col text mode, because of memory concerns, but it's doable. However it's not really worth it so much... you can fit maybe another extra couple of text lines, like one above and one below, 216 scanlines, before starting to hit the bezel. Similarly you can push the horizontal rez somewhat, with the same caveats, though there's a little more rez to be had (maybe in the same proportion?) that way vs vertically. And of course with the later adapter you can do both. It's such a meaningless change, though, and potentially incompatible, that hardly anyone bothered ever using that extra space in anger, other than maybe the makers of certain upgrade graphics cards... and then only really in the service of emulating higher-rez text or graphics standards (MDA, EGA-hi, Herc...) with less compression/line dropping/no interlace, or offering mildly expanded abilities, mostly in pure textmode (e.g. the much coveted 132-column mode, which I doubt was very readable on the heinously coarse-pitched 5153, and maybe 27- or 28-line mode... or both). And then only when it wasn't about as cheap - and value for money - to just get a better class of adapter and matching monitor (or multisync) straight-off. What would you prefer... 700ish by 220ish on a CGA monitor, or 640x350 with a wider colour selection on an EGA? (Or the odd, but onetime common 752x410 on a multisync, probably using the same card that offered both of the other two modes)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end of the day it was a device built to do a fairly specific set of jobs as well as it could deliver them, no more no less, and it did them pretty well. To display the terminal-like 40/80 x 25 textmode of the CGA, and the matching graphics modes which happened to be the exact same pixel size due to a happy accident of what would fit into the largest amount of memory they could afford to cram onto the card, both financially and physically (there is barely a square millimetre of bare PCB on the original CGA, it is ram-packed with chips), and because of the pretty rudimentary nature of said card outside of its overpopulation of low density DRAMs (the CGA featureset is often decried for being crap, but it's about the most sophisticated thing they could build into the available space, given the lack of resources to make a proper ASIC, and the tight deadlines). It just needs to show 200 scanlines, each 44.7 microseconds long (which is 320 pixels at double the colourburst, or 640 pixels at twice that rate), making them about as large as is reasonably possible, with a certain small strip of coloured border all round... and that's it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wondering why it can't do more is a bit like wondering why a 1960s TV can't show 1080p hi-def or tune into more than a dozen or so channels. It's simply not the need it was built to address, and the hardware / signals to drive it to any greater capability didn't even exist yet, so it would have been fruitless. Outside of special graphics workstations, no-one else was making anything particularly higher resolution or with more video memory at the time. The 5152 was the real oddity, with its non-broadcast-TV-compatible, more high-end-terminal-like 350-line at 49Hz refresh rate and minimal blanking scan setup.&lt;/p&gt;&#xA;" OwnerUserId="15467" LastActivityDate="2019-10-28T04:52:01.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12607" PostTypeId="2" ParentId="2715" CreationDate="2019-10-28T05:10:29.763" Score="-1" Body="&lt;p&gt;Depends how forgiving your TV is about the line rate. If we consider that the actual sweep rate of both the horizontal and vertical sections are fixed, then by upping the line sync frequency we can physically fit more scanlines in the same space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good estimate for the normally visible number of lines is around 216. Thus we need to increase the line rate by 240/216 = 1.111, or about 1/9th. That's actually quite a bit when we're talking about adjusting the scan rate of a more or less fixed-frequency display. For a regular colour NTSC television, that'd increase from 15.734kHz to 17.482kHz, which is most of the way towards MDA scanrate, and certainly beyond even the 16.5kHz of &quot;enhanced resolution&quot; arcade monitors (which are likely just normal TVs tweaked to their limits to fit as many visible scanlines as possible within a roughly 50Hz refresh rate).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not saying you'll not find a TV that's happy playing along with that, but I think it'd be difficult. You're more likely to blow quite a few. Might have better luck with a proper computer monitor, as they're apparently somewhat flexible (there are a bunch of &quot;extreme&quot; Amiga modes which tweak almost down to 15.0kHz, and well up into the 16s, all allegedly 15.7kHz monitor compatible), but it feels a bit too much even so; a multisync would be better, but that kind of takes the fun out of it because you can just set whatever mode you like. And even with the regular monitor... you could just set a normal 240-line mode and then play with the picture controls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other consideration is that you'd have to shorten each scanline by 10%. That's maybe not so much of a problem, if with a typical machine we may have 455 pixels times per line, the adjusted version is still about 410, but it's eaten into our blanking quite a bit; with a 320 pixel line, we had 135 spare clocks per line, now it's only 90, and that could actually be kinda minimal for getting active area, border, blanking, sync, blanking, border and repeat. The deepest workable overscan tends to be barely any tighter. Or in other words, a line was about 63.5us before, now it's 57.2, and the usual full width (albeit with overscan) active period is about 53.3 (and visible, around 48us tops). The penny's been considerably shaved, and we may well find ourselves hitting flyback before the beam's off the right hand size (if we assume it always flies back to the same place ... which itself could be an issue for generating a biased AC waveform in the flyback/sweep circuitry and thus making considerable DC current), maybe even displacing the image to the left...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in conclusion, whilst it's a decent idea, and could possibly be workable with a more modest goal (and, heck, I have a feeling it might even be employed to produce fake interlace on some recent Atari ST demos by hacking the length of several early lines on every other frame - as this is a system with NO native hardware interlacing ability, but the demowriters claim a true 720x440i colour resolution on a system only normally capable of 640x200p colour or 640x400p mono), to achieve what you want would almost certainly demand just too much of an everyday TV and cause it to go up in smoke.&lt;/p&gt;&#xA;" OwnerUserId="15467" LastActivityDate="2019-10-28T05:10:29.763" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12608" PostTypeId="2" ParentId="11866" CreationDate="2019-10-28T05:45:08.767" Score="1" Body="&lt;p&gt;I can't think of anything that would directly match your requirements other than using another uC programmed to act as if it's a soundchip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SID... has the waveforms, at least most of them, but doesn't have the envelopes, and probably too expensive these days&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AY3 / YM2149 ... has the envelope (of a sort), but only squares and noise&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SN7 is essentially the same thing just with certain subtle differences, none of which are relevant, other than the loss of the envelope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nintendo chips are themselves also CPUs, so a bit beyond the scope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Various Yamaha FM chips come close, particularly the OPL3 may offer a wide enough range of timbres to more or less cover your requirements - or the simpler OPL2 or OPLL may yet be flexible enough to displace that requirement; alternatively the OPN series combine an AY3 core with various levels of vaguely OPL-ish FM and/or (AD)PCM (the latter needs a source of sample data of course) which can cover a lot of the bases, and built-in ADSR is a given for all of the FM engines (albeit only programmable for a single voice with the OPLL). Again, the issue is availability and cost. I wouldn't even want to guess how much any one chip may set you back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About the closest direct hit is the Atari POKEY, it may not have those exact waveforms but it has a variety of interesting algorithmic ones which are probably fairly close. Though admittedly IDK if it does hardware enveloping so it may still be worse than the SID, and it's probably no cheaper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If all you want is some bloops with at least 2-channel polyphony, I'd suggest looking for an AY3 or its Yamaha clone (especially, if you don't need the IO ports, the cut-down later models, as those are rather more compact and thus more suitable for a dinky microcontroller project, plus probably less sought after/collectable overall), or the Texas Instruments soundalike as featured in the BBC Micro, Mockingbird PC board, cloned in the various Sega VDPs etc, which is even smaller and probably cheaper even as NOS. You can get some reasonable sound out of them, as demonstrated by the systems they were installed in (the SN often doing about as well as the AY/YM because it has a few nonobvious advantages that compensate for e.g. lack of hardware envelope), and if you figure you can knock together a replayer routine for your chosen controller there's an absolutely humongous library of ready-to-run music capture dumps out there waiting to be plundered. The cleverer ones for the AY include stuff like SIDvoice, syncbuzzer, digidrum, even samples, etc which make use of the envelope, or note retriggering, so on and so forth to e.g. emulate the SID triangle/saw waves, make a fair stab at a sine, adjust the duty cycle of the squarewave into something more like a Nintendo pulsewave, create a reasonable set of 303 drums using square-noise combos... and use volume control abusing sample replay to emulate everything else. Potentially computationally expensive, but at the end of the day all the replayer really has to do is decompress the packed file on the fly (if it's not been pre-unpacked) and then fling the data contained within at the relevant registers in accordance with the internal timestamps.&lt;/p&gt;&#xA;" OwnerUserId="15470" LastActivityDate="2019-10-28T05:45:08.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12609" PostTypeId="2" ParentId="2464" CreationDate="2019-10-28T06:35:23.543" Score="0" Body="&lt;p&gt;A simpler way of putting the above very good explanations is... they cheated ;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not proper 3D. If it was, you could face and move in something other than the four cardinal directions. Ever wonder why the movement feels so strange? It's because of that faked checkerboard motion as you move around the pitch. And that's the only &quot;rendered&quot; part; everything else is just flat sprites, drawn to look like 3D objects (again, the limited number of directions they can face massively reduces the data load of this precalculation), and moved and scaled by the machine's hardware (or on other platforms, just by CPU horsepower) on top of the playfield.&lt;/p&gt;&#xA;" OwnerUserId="15471" LastActivityDate="2019-10-28T06:35:23.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12610" PostTypeId="2" ParentId="8275" CreationDate="2019-10-28T06:38:14.927" Score="0" Body="&lt;p&gt;Just for a comedy fifth option: The somewhat unsung but interesting little thing known as &quot;Simulcra&quot;? I can't even remember much of it but it did involve piloting a small ship with limited movement around a sparse 3D landscape a bit like what you describe.&lt;/p&gt;&#xA;" OwnerUserId="15471" LastActivityDate="2019-10-28T06:38:14.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12611" PostTypeId="2" ParentId="6963" CreationDate="2019-10-28T06:49:32.177" Score="1" Body="&lt;p&gt;Just as a correction to a bit of the above: Hercules cards use regular MDA monitors. Their 350-line, nominal 50Hz mode (actually a bit below) isn't anything to do with regular broadcast monitors. They scan at 18.4kHz, which is a good way above that of typical TVs and low-rez monitors at 15.5~15.9kHz (and has the nice side effect of being effectively ultrasonic for most users - no more tube whistle... but a much worse one if you're high frequency sensitive). If you try feeding MDA/Herc syncs into a PAL TV, it could well blow up - and vice versa. Otherwise, there'd be no need for emulation - you could just throw regular CGA signals at it, and it'd work fine. The biggest difference between 50 and 60Hz broadcast monitors is the line count, and plenty of &quot;15kHz&quot; computer monitors can not only vary between those two standards without issue, but also other oddball settings like 45, 56, or 72Hz (with their own greater/intermediate/lesser number of scanlines - the latter having the bare minimum amount of blanking for a 200-line display).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was, essentially, about as far as IBM were able to custom-tweak the circuitry of a common monochrome video monitor, with a long persistence phosphor on the tube to reduce the flickering effect, without having to go to the expense of a fully re-engineered high frequency item as later used for EGA (which retained much of the scan structure of MDA, but increased the line frequency closer to 22kHz, thus fully ultrasonic, and the Vsync back to 60Hz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The monitors were somewhat adaptable to different setups, though; there's mention in some manuals for old ATI Wonder graphics cards about their Herc emulation also including the &quot;special&quot; / &quot;little used&quot; custom mode (Herc had NO ROM BIOS, all their modes were setup in software, so the &quot;normal&quot; ones were pretty much just matters of convention, and due to different clock crystals and slightly wonky maths weren't exact matches for the IBM standard anyway) of 640x400. Which was apparently used by some &quot;eastern software&quot; (presumably to better display Japanese/Chinese/Korean script) and wasn't guaranteed to work on all monitors. That mode, of course, would be just dandy for producing a better emulation of CGA, especially the hi-rez monochrome setting, as well as the highest resolution of certain 400-line / 25kHz &quot;super CGA&quot; machines... Unfortunately I have absolutely no idea of its setup, register values etc. The closest I've ever seen is a 90 column by 45 row (720x360 pixel, 8x8 font) textmode, emulated in graphics, which pushes the boundaries of both the available memory and what's displayable on a relatively inflexible MDA.&lt;/p&gt;&#xA;" OwnerUserId="15471" LastActivityDate="2019-10-28T06:49:32.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12613" PostTypeId="2" ParentId="975" CreationDate="2019-10-28T07:46:37.380" Score="3" Body="&lt;p&gt;Having found my way back here by accident, I'd like to put a shorter adjunct to my original longer answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Growing up in PAL land, with generally smaller TVs and monitors, I don't recall there being much in the way of scanlines around, other than maybe when we switched to 60Hz mode on our ST and/or stretched the monitor V-size as far as possible to get rid of the big Atari borders. That of course was something the Spectrum we once borrowed, and the one I was later given by a schoolmate and plugged into the one-time family 14&quot; set in the bedroom I shared with my brother couldn't do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first time they were ever routinely apparent to me was when we had a Playstation plugged into our newer, larger 25&quot; set... and even then, mostly when it had been chipped and was playing NTSC-region copies, which meant making sure it was plugged into the correct SCART socket if you wanted the image to be in colour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PAL just has a greater density of lines, with the bloom between them on a CRT helping to close the apparent gap somewhat, and each scan itself seems to be a bit taller than what's produced for NTSC. Maybe as an effort to incorporate more physical phase-shifting into the PAL colour decoding process? But as seen in the pictures, even without the interlace, the lines very nearly run up against each other - there's only the merest hint of a darker stripe between them, unlike the very plain gaps visible with pictures from NTSC screens.&lt;/p&gt;&#xA;" OwnerUserId="15475" LastActivityDate="2019-10-28T07:46:37.380" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12615" PostTypeId="2" ParentId="8624" CreationDate="2019-10-28T12:59:46.450" Score="2" Body="&lt;p&gt;Yes, such computers existed.&#xA;First of all, we must remember about &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%90%D0%B3%D0%B0%D1%82_%28%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Agat&lt;/a&gt;, the Soviet almost-clone of Apple II. The native Agat-8 video mode (not compatible with Apple II) allowed using a memory page (one of many, with the ability to quickly randomly switch) for the video buffer that was disconnected from the address space of the processor.&#xA;Later versions (from the mid-90s) of semi-home-made (small-scale, handicraft) post-Soviet home computers relatively often used a similar architecture.&lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2019-10-28T12:59:46.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12616" PostTypeId="2" ParentId="8624" CreationDate="2019-10-28T14:46:05.547" Score="3" Body="&lt;p&gt;The Sega &lt;a href=&quot;https://segaretro.org/Category:Sega_System_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;Super Scaler&lt;/a&gt; series arcade machine boards did this, to a certain extent. They used multiple processors to update sprites while they were off screen. For example the &lt;a href=&quot;https://segaretro.org/Sega_Y_Board&quot; rel=&quot;nofollow noreferrer&quot;&gt;Y Board&lt;/a&gt; had three 68000s sharing multiple RAM banks, two of which held separate sprite banks. The later &lt;a href=&quot;https://segaretro.org/Sega_System_32&quot; rel=&quot;nofollow noreferrer&quot;&gt;System 32&lt;/a&gt; had 768 K of dual-ported VRAM set up for sharing between the V60 main processor and the graphics chips. The Super Scalers were essentially sprite based, however, so their entire display wasn't buffered by simple page flips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the 8-bit world, the Amstrad CPC used &lt;a href=&quot;http://www.cpcwiki.eu/index.php/CRTC#The_6845_Registers&quot; rel=&quot;nofollow noreferrer&quot;&gt;6845 CRTC registers 12 and 13&lt;/a&gt; to define the screen memory address. One could page flip between them very quickly (by alternating between &amp;amp;4000 and &amp;amp;c000, say), but this would use half the available RAM of the computer for display and you'd still have to redraw in time for the screen refresh to keep the display smooth.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-10-28T14:46:05.547" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12617" PostTypeId="2" ParentId="2421" CreationDate="2019-10-28T20:34:56.103" Score="5" Body="&lt;p&gt;Yes, there were other co-processors for the IBM PC computer other then Intel 8087 NPU/FPU Units. Many of them had additional circuity with some RAM and a ROM chips. The ROM chips on some of them contained an FPU emulation program if it was using a standard microprocessor other than a Intel model. Others had a BIOS extension for the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some older issues of Byte magazine have some co-processor cards&#xA;that work with the IBM PC's ISA bus slots but can be adapted to use the 8087's FPU Socket.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Z8000 based microprocessor (out of production by Zilog) see&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Byte May  1984 Ciarcia's Circuit Cellar (Build the) Trump card part 1&lt;/li&gt;&#xA;&lt;li&gt;Byte June 1984 Ciarcia's Circuit Cellar (Build the) Trump card part 2&lt;/li&gt;&#xA;&lt;li&gt;Byte some time after June 1984, Schematic bug fix for above. One chip pin out was missed labeled.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Definicon DSI-32 co-processor used the NS32032 processor.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;See Byte magazine August 1985 and Sept. 1985&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Most of these cards were more expensive than the 8087 NPU chip and came with some custom software. Additional hardware circuits may have to be added to remap the systems IORQ's, NMI's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other cards were based on:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Motorola 88000 ISA coprocessor board from Opus system.&lt;/li&gt;&#xA;&lt;li&gt;ARM board, MC68K series, SPARC card, 65816 and other microprocessors and DSP's.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15437" LastEditorUserId="15437" LastEditDate="2019-10-31T18:52:07.597" LastActivityDate="2019-10-31T18:52:07.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12618" PostTypeId="1" AcceptedAnswerId="12619" CreationDate="2019-10-28T21:02:34.820" Score="12" ViewCount="2338" Body="&lt;p&gt;Poking about in early issues of &lt;strong&gt;Dr Dobbs' Journal&lt;/strong&gt; (the journal of the &lt;em&gt;People's Computer Company&lt;/em&gt;, or PCC) I came across a listing for &lt;a href=&quot;https://archive.org/details/dr_dobbs_journal_vol_01/page/n64&quot; rel=&quot;noreferrer&quot;&gt;BASIC games available on tape&lt;/a&gt;. Many of these are widespread, but a number I have not heard of and Google is not helping. Does anyone have listings for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Motie&lt;/li&gt;&#xA;&lt;li&gt;Rescue&lt;/li&gt;&#xA;&lt;li&gt;Trader (assume early version of space trader?)&lt;/li&gt;&#xA;&lt;li&gt;Crash&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="439" LastEditDate="2019-10-29T01:08:16.343" LastActivityDate="2020-07-21T23:57:39.970" Title="Sources for some old BASIC games" Tags="&lt;basic&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12619" PostTypeId="2" ParentId="12618" CreationDate="2019-10-28T22:04:28.573" Score="17" Body="&lt;p&gt;&lt;a href=&quot;https://archive.computerhistory.org/resources/access/text/2017/09/102661095/102661095-05-v4-n4-acc.pdf#page=20&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; is the listing for Motie, followed immediately by Rescue. The full list of archived issues of People's Computer Co. (PCC) is &lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102661095&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2019-10-28T22:04:28.573" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12620" PostTypeId="2" ParentId="8624" CreationDate="2019-10-28T23:53:03.407" Score="1" Body="&lt;p&gt;The Soviet home computers &lt;a href=&quot;https://en.wikipedia.org/wiki/Electronika_BK#Electronika_BK-0011&quot; rel=&quot;nofollow noreferrer&quot;&gt;Elektronika BK-0011(M)&lt;/a&gt; had 2 video pages. For some reason, the English page does not mention that fact, only the Russian one does:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;две страницы памяти можно было поочерёдно отображать на экран, что&#xA;  обеспечивало мгновенное обновление информации&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;which means (Google translate)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;two pages of memory could be displayed alternately on the screen,&#xA;  which provided an instant update of information&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2019-10-28T23:53:03.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12621" PostTypeId="2" ParentId="12450" CreationDate="2019-10-29T04:19:54.680" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://www.lyonlabs.org/commodore/hardware/index.html#cb5&quot; rel=&quot;nofollow noreferrer&quot;&gt;CARDBOARD/5&lt;/a&gt; was an expansion unit released no later&#xA;than 1985. Appendix A of its &lt;a href=&quot;https://www.lyonlabs.org/commodore/hardware/Cardco_Cardboard_5.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual&lt;/a&gt; discusses enabling more&#xA;than one cartridge at once. They mention 80-column display interfaces&#xA;and IEEE-488 bus interfaces (for connecting to PET peripherals) as&#xA;usable simultaneously with other cartridges. They provide a detailed&#xA;description of handling the situation where you want to use the IEEE&#xA;interface to save data from a cartridge-based word processing program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it's a discussion from 2016, the &lt;a href=&quot;https://www.lemon64.com/forum/viewtopic.php?t=59536&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cartridge expanders&lt;/a&gt;&#xA;topic on the lemon64.com forums provides some examples that apply to&#xA;cartridges available in the 1980s. The most common pairing appears to&#xA;be an &lt;a href=&quot;https://www.c64-wiki.com/wiki/REU&quot; rel=&quot;nofollow noreferrer&quot;&gt;REU&lt;/a&gt; (Ram Expansion Unit, released 1985) with a utility or&#xA;fast-loader cartridge. Other (1980s) cartridges people mention pairing&#xA;with the REU are a &lt;a href=&quot;http://www.mycommodore64.com/2011/07/19/passport-midi-interface/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIDI interfaces&lt;/a&gt; and the &lt;a href=&quot;http://mikenaberezny.com/hardware/c64-128/swiftlink-rs232-interface/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SwiftLink RS-232&#xA;interface&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though a decade after the 80s, &lt;em&gt;Commodore World&lt;/em&gt; Issue 7 from 1995 has&#xA;a &lt;a href=&quot;https://archive.org/details/commodore-world-07/page/n39&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hardware in Review&lt;/a&gt; article that discusses the EX3 expansion&#xA;board, which had facilities for swapping I/O1 and I/O2 on one&#xA;cartridge to allow two cartridges both using I/O1 (or both using I/O2)&#xA;to be used together. The examples given include all of the above, as&#xA;well as the HART and SID Symphony cartridges.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-10-29T04:19:54.680" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12622" PostTypeId="1" CreationDate="2019-10-29T08:33:42.773" Score="3" ViewCount="468" Body="&lt;p&gt;For those of you who are unaware, professional speedrunner Trent Hall discovered a now banned strategy in Goldeneye 007. This strategy (called Trent's Circuit Board Strategy) consisted of plugging a dismantled second controller into the second controller port. Then, when there is a countdown timer, pushing down on the exposed circuit board to freeze the game while the countdown continued. Because the Elite Goldeneye Rankings are ranked in IGT (in-game time) as opposed to RTA (real time attack), this strategy would save tens of seconds on many levels.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/HEYR4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HEYR4.jpg&quot; alt=&quot;where to press down on the controller&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is... well, what causes the N64 to behave in this way? This seams like an extremely unlikely result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A video by former Goldeneye Champion Ryan &quot;RWhiteGoose&quot; White on the strategy:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=tr6txZdNcc0&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=tr6txZdNcc0&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Read more about Trent:&#xA;&lt;a href=&quot;http://www.shootersforever.com/forums_message_boards//viewtopic.php?t=6332&amp;amp;view=previous&amp;amp;sid=6a6704f2fa89f78f2d42239d5cd4205f&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.shootersforever.com/forums_message_boards//viewtopic.php?t=6332&amp;amp;view=previous&amp;amp;sid=6a6704f2fa89f78f2d42239d5cd4205f&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="10751" LastEditDate="2019-11-01T08:55:46.987" LastActivityDate="2019-11-01T08:55:46.987" Title="What is the cause of Trent's circuit board strategy?" Tags="&lt;hardware&gt;&lt;nintendo&gt;&lt;glitches&gt;" AnswerCount="0" CommentCount="8" ClosedDate="2019-10-30T00:48:16.950" ContentLicense="CC BY-SA 4.0" />
  <row Id="12623" PostTypeId="2" ParentId="8624" CreationDate="2019-10-29T11:11:46.557" Score="2" Body="&lt;p&gt;The BBC Master was designed with a fairly complex memory-map overlay system.  There was 32KB of primary RAM, 128KB of ROM, four 16KB &quot;sideways RAM&quot; banks which could be loaded with ROM-like data from disk, and a 32KB &quot;shadow RAM&quot; bank which was used to move the video display and the disk filesystem workspace out of the primary RAM.  This left much more of the primary RAM available for user programs than in the earlier BBC Microcomputer, with which it remained mostly compatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;shadow&quot; system could be switched off at runtime, so that user software could write directly to the video RAM, as was common for games which found the operating system graphics routines too slow and restrictive.  It was also possible to use the primary and shadow RAM alternately for double buffering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quoting &lt;a href=&quot;https://github.com/simondotm/bbc-shadow-ram&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/simondotm/bbc-shadow-ram&lt;/a&gt; :-&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; Accessing &amp;amp; controlling the Shadow RAM is achieved using the Access control register (ACCCON) at &amp;amp;FE34 &#xA;; See page 162 of the New Advanced User Guide (http://www.msknight.com/bbc/manuals/new-advanced-user-guide.pdf)&#xA;; Bit 7 - IRR - IRQ control&#xA;; Bit 6 - TST - always 0&#xA;; Bit 5 - IFJ - 1MHz bus/ROM cartridge select &#xA;; Bit 4 - ITU - TUBE select&#xA;; Bit 3 - Y - 8Kb RAM function select&#xA;; Bit 2 - X - Main memory RAM source select&#xA;; Bit 1 - E - VDU Driver RAM Source select&#xA;; Bit 0 - D - CRTC RAM Source select&#xA;&#xA;&#xA;; D=0 Use main memory for screen, D=1 Use Shadow RAM for screen (contrary to what is specified in AUG)&#xA;; E=0 VDU Driver uses Shadow RAM, E=1 VDU Driver uses main memory&#xA;; X=0 Normal RAM in main memory, X=1 Shadow RAM in main memory&#xA;; Y=0 8K RAM at &amp;amp;C000 to &amp;amp;DFFF, Y=1 VDU Driver code at &amp;amp;C000&#xA;; ITU=0 enable external TUBE, ITU=1 enable internal TUBE&#xA;; IFJ=0 1Mhz bus at &amp;amp;FC00 to &amp;amp;FDFF, IFJ=1 cartridge at &amp;amp;FC00&#xA;; TST=0 normal state (do not change), TST=1 hardware test&#xA;; IRR=0 after IRQ processed, IRR=1 IRQ to CPU&#xA;&#xA;; so double buffer rendering works as follows:&#xA;;   D=0,X=1 - Display from main memory, Draw to shadow memory (&amp;amp;3000-&amp;amp;7FFF)&#xA;;   D=1,X=0 - Display from shadow memory, Draw to main memory (&amp;amp;3000-&amp;amp;7FFF)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The BBC Micro &amp;amp; Master hardware could access video memory at full speed from the CPU and display hardware simultaneously, so this alternating technique was not necessary for high performance at all.  It was simply a secondary use of a system designed to optimise the layout of a limited address space.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-10-29T11:11:46.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12625" PostTypeId="1" AcceptedAnswerId="12627" CreationDate="2019-10-29T17:42:00.753" Score="10" ViewCount="3765" Body="&lt;p&gt;Is there a software method of disabling memory refresh on the Z80? Or would it be acceptable to create a hardware method of disabling the address bus during the refresh cycle? If I switch off the output-enable of the bus transceiver during refresh cycles, the memory and peripherals would never see this request, but I'd need to add some extra glue logic and I'm not sure if it's worth it. I really would like to disable the refresh. Is there a version of the Z80 that doesn't refresh?&lt;/p&gt;&#xA;" OwnerUserId="5389" LastActivityDate="2019-11-05T07:16:18.843" Title="Disable memory refresh on Z80" Tags="&lt;z80&gt;&lt;memory-layout&gt;" AnswerCount="3" CommentCount="12" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12626" PostTypeId="2" ParentId="12625" CreationDate="2019-10-29T19:24:35.713" Score="8" Body="&lt;p&gt;I can't speak as to derivatives, but the plain Z80 does not permit you to disable refresh. One refresh cycle will be attached to every operation byte fetched from the instruction stream (with the exception of offsets in IX/IY+d mode).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, the value placed on the bus during refresh is I:R — the I register is used to populate the top 8 bits, and is guaranteed 0 at reset. So as long as you have something in the first 128 bytes that isn't troubled by the refreshes, such as a ROM, it shouldn't be problematic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if your first 128 bytes are only transiently ROM, it might be acceptable to set I and the top bit of R appropriately during machine startup so that the refresh requests miss anything sensitive.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;EDIT: there seems to be some controversy about this, for some reason. Secondary sources are more explicit, so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Per &lt;a href=&quot;http://z80.info/z80info.htm&quot; rel=&quot;noreferrer&quot;&gt;this extract from the ZX Spectrum FAQ&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The R register is a counter that is updated every instruction, where DD, FD, ED and CB are to be regarded as separate instructions. So shifted instruction will increase R by two. There's an interesting exception: doubly-shifted opcodes, the DDCB and FDCB ones, increase R by two too.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So that says: if your instruction has two bytes, it'll increment R twice. Note that &quot;doubly-shifted opcodes&quot; are those with an offset, using IX/IY+d addressing, so they're three instruction bytes but only two of those increment R. So, if you buy that R is incremented only during a refresh cycle, that FAQ says exactly what I said.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;http://map.grauw.nl/resources/z80instr.php&quot; rel=&quot;noreferrer&quot;&gt;this table of MSX instruction timings&lt;/a&gt;. What's interesting about the MSX is that it inserts one extra cycle into every M1. Check out the differences between the Z80 and Z80+M1 columns. The following is the first of the hundreds of entries where the difference is more than 1:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;ADC A,(IX+o)  19  21  5   7   DD 8E o 3&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, from the two sources cited so far you can conclude:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;R is incremented twice for &lt;code&gt;ADC A,(IX+d)&lt;/code&gt;; and&lt;/li&gt;&#xA;&lt;li&gt;hardware that inserts a one-cycle WAIT every time it sees an M1 cycle will insert two cycles of wait total for &lt;code&gt;ADC A,(IX+d)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Spoiler: it's because there are two M1 cycles and two refreshes in &lt;code&gt;ADC A,(IX+d)&lt;/code&gt;, on account of it contributing two bytes to the instruction stream other than its offset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alas the &lt;a href=&quot;http://z80.info/zip/z80cpu_um.pdf&quot; rel=&quot;noreferrer&quot;&gt;official Z80 User Manual&lt;/a&gt; is a little more oblique, but it defines M1 as:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;M1. Machine Cycle One (output, active Low). M1, together with MREQ, indicates that the current machine cycle is the op code fetch cycle of an instruction execution. M1, when operating together with IORQ, indicates an interrupt acknowledge cycle.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's an unfortunate use of 'the', but the sentiment to equate M1 cycles with op code fetches is basically correct, and correlates with the much lazier later in-place definitions:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Figure 5 depicts the timing during an M1 (op code fetch) cycle.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Total point? The definition given above is exactly correct. There is one refresh cycle per byte fetched from the instruction stream, with the exception of offsets in IX/IY+d instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As tangential evidence I also offer my Z80 emulator, one of the cycle-perfect ones which just so happens to be used in emulations of the ZX80/81 (refresh cycle used for graphics fetch), the MSX (one cycle's delay on every M1 machine cycle) and the Amstrad CPC (WAIT strobed for three out of four cycles, which will properly stretch the instruction stream only if you're sampling WAIT properly). It gets 100% perfection on every timing test I've been able to source, including across all three of those platforms.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-10-29T22:14:21.677" LastActivityDate="2019-10-29T22:14:21.677" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12627" PostTypeId="2" ParentId="12625" CreationDate="2019-10-29T19:53:02.223" Score="16" Body="&lt;p&gt;A Z80 will always do a refresh cycle during T3/T4 of an M1 cycle. Disabling is not possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During a refresh cycle the /RFSH signal will be active for both cycles, signaling a valid refresh address, while /MREQ is active during the second half of T3 and the first half of T4. Neither /RD nor /WR will be active during T3/T4. Thus a refresh cycle is never a valid data access cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question isn't clear to what purpose the refresh has to be disabled.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Normally no precaution is to be taken for refresh. At least if decoding includes /RD and /WR (*1), as neither is signalled during non-data-transfering cycles memory access. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it is meant to avoid detecting refresh as memory cycle (due /MREQ being active) when decoding an address, integrating /RFSH to disable decoding is all that's needed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's about to use that time for some hidden memory access, then buffers have to be added to seperate address bus as well as all other memory access signaling.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - In general Z80 address decoding should always include /RD and /WR before doing anything substantial, as these are the lead signals to indicate a valid memory access. /MREQ only signals a valid address bus content. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-10-30T13:19:47.127" LastActivityDate="2019-10-30T13:19:47.127" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12628" PostTypeId="2" ParentId="12580" CreationDate="2019-10-29T20:58:03.843" Score="3" Body="&lt;p&gt;There seems to be no known software product implementing the idea yet - possibly the idea is not viable in the end. To find it out, I started a &lt;a href=&quot;https://github.com/karcherm/xtize&quot; rel=&quot;nofollow noreferrer&quot;&gt;project on github&lt;/a&gt; to develop said 286 emulator. There is nothing interesting to see yet, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea of this answer is to provide a link to my GitHub project. If that project yields anything useful, I will edit this answer and accept it. If the project fails, I will document the reason of the failure and accept one of the answers already given.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="10479" LastEditDate="2019-10-29T22:15:38.470" LastActivityDate="2019-10-29T22:15:38.470" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12630" PostTypeId="2" ParentId="12625" CreationDate="2019-10-30T07:49:44.087" Score="10" Body="&lt;p&gt;No, it cannot be disabled, although it can be ignored by the rest of the hardware. Just OR /MREQ  with /RFSH negated. Decoding /MREQ along with /RD or /WR is also fine, and you won't need /RFSH. A 74HCT138 3 to 8 decoder can do the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No, there is no Z80 pin compatible, software compatible processor that allows the user to disable the refresh cycle, but the eZ80 microcontroller series have a Z80 compatible mode, in which machine code programs written for the original Z80 can still be executed, while using a fully pipelined execution mode (as opposed to the overlapping execution mode employed by the original Z80) for executing instructions, thus removing the refresh cycle (although the R register still exists).&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="202" LastEditDate="2019-11-05T07:16:18.843" LastActivityDate="2019-11-05T07:16:18.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12632" PostTypeId="1" CreationDate="2019-10-30T23:17:30.190" Score="6" ViewCount="500" Body="&lt;p&gt;I've read that the usual way to execute code on the N64 is to use DMA to copy it from ROM into RAM, and then run from RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it seems that the contents of the ROM are directly visible to the CPU (e.g. from address &lt;code&gt;0x9000_0000&lt;/code&gt;). Is it possible to run code directly from ROM (as was standard on the NES and Super NES) by jumping into this region of the address space?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If so, why did games generally copy code into RAM before running it?&lt;/p&gt;&#xA;" OwnerUserId="15249" LastActivityDate="2019-10-30T23:45:36.683" Title="Can the Nintendo 64 run code directly from ROM?" Tags="&lt;nintendo&gt;&lt;rom&gt;&lt;memory-layout&gt;&lt;nintendo-64&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12633" PostTypeId="2" ParentId="12632" CreationDate="2019-10-30T23:45:36.683" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it possible to run code directly from ROM [...] by jumping into this region of the address space?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Game Code can of course be run from ROM. And most games will do so.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If so, why did games generally copy code into RAM before running it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Generally sounds a bit too much here. In fact, as game cartridges range from 4 MiB to 64 MiB (and more), the existing 4.5 MiB RAM couldn't hold not even the smallest games. Even more so as most of the RAM was used for video anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The N64 is very much a streaming architecture with emphasis on continuous high speed access. The MIPS CPU, as well as the video processors, did benefit from  the RDRAM feature of fast read for consecutive data (burst access). As a result, RAM was, when it came to continous access about twice as fast as ROM. A peak rate of 562,5 MiB/s could be reached when reading RDRAM while ROM access, due its 'classic' structure, only yielded with 264 MiB/s  about half the rate (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Games did foremost copy graphics data (textures etc.) into RAM to allow best possible rendering. After than, time critical routines were as well moved to improve speed - were needed.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Yes, 264 is half of 562,5, as the RAM was 9 (!) bit wide :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-10-30T23:45:36.683" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12634" PostTypeId="1" AcceptedAnswerId="12636" CreationDate="2019-10-31T08:05:16.053" Score="2" ViewCount="600" Body="&lt;p&gt;I play around with emulators, but I would love to go back to my roots, with physical ZX81, BBC Micro, Amiga, etc.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, those all require a CRT monitor, or a TV, as output. I suppose that I could buy a cheap one on AliExpress.&lt;/p&gt;&#xA;&lt;p&gt;I am curious as to which, if any, home or business computer from &amp;quot;the golden age of retro&amp;quot; (the '80s, for me) could be used with an analogue VGA monitor, without the use of modern day &lt;a href=&quot;https://www.retrorgb.com/upscalers.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;upscalers&lt;/a&gt;, such as the Framemeister.&lt;/p&gt;&#xA;" OwnerUserId="3477" LastEditorUserId="5222" LastEditDate="2020-11-06T14:28:37.780" LastActivityDate="2020-11-06T14:28:37.780" Title="Which retro personal computers, if any, can use a modern day VGA monitor?" Tags="&lt;amiga&gt;&lt;bbc-micro&gt;&lt;vga&gt;&lt;zx81&gt;" AnswerCount="1" CommentCount="13" FavoriteCount="1" ClosedDate="2019-10-31T12:00:41.657" ContentLicense="CC BY-SA 4.0" />
  <row Id="12635" PostTypeId="2" ParentId="12249" CreationDate="2019-10-31T08:54:43.593" Score="1" Body="&lt;p&gt;I'm not sure if this is the right place to to mention this, but I&#xA;confirm the outputs mentioned in the question (and reverse-engineer&#xA;ones I'm not sure of) with this breakout DIN connector that I made:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/psmbZ.jpg&quot; width=&quot;200&quot; alt=&quot;8-pin DIN breakout&quot; title=&quot;8-pin DIN breakout&quot;/&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This allows me to bring the signals on to a breadboard where I can&#xA;'scope them out, cross-connect them to a more standard video cable&#xA;into a monitor, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pin to wire colour assigment &lt;a href=&quot;https://github.com/0cjs/sedoc/blob/master/hw/din-connector.md#cjss-din-8-breakout&quot; rel=&quot;nofollow noreferrer&quot;&gt;that I use&lt;/a&gt; is designed to be&#xA;reasonably mnemonic for the (informal) standard for 8-pin DIN RGB&#xA;video on Japanese 8-bit computers as described in the &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12255/7208&quot;&gt;community wiki&#xA;answer&lt;/a&gt;, though this of course can be used for CMT&#xA;(cassette) ports as well:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1-Orange  2-Black   3-Yellow  # [V+/audio], GND, [clock]&#xA;4-White   5-Grey              # hsync/vsync (usu. grey/black); MIC/EAR&#xA;6-Red     7-Green   8-Blue    # TTL RGB; 6/7 cassette relay&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(A similar breakout could be made for 5-pin ports.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the wires are kept quite short; this is important when using&#xA;this for video since obviously this isn't coax.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-10-31T08:54:43.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12636" PostTypeId="2" ParentId="12634" CreationDate="2019-10-31T10:45:03.113" Score="5" Body="&lt;p&gt;A few 'home' computers from the '80s could output a VGA signal, including:-&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Acorn Archimedes &lt;/li&gt;&#xA;&lt;li&gt;Commodore Amiga (with &lt;a href=&quot;http://amiga.resource.cx/dir/ff&quot; rel=&quot;noreferrer&quot;&gt;Flicker Fixer&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;PC clones that had VGA on board or could take a VGA card (eg.&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/PPC_512#Amstrad_PC20_/_Sinclair_PC200&quot; rel=&quot;noreferrer&quot;&gt;Sinclair PC200&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But for the vast majority that didn't produce a VGA signal you need an &lt;a href=&quot;https://www.retrorgb.com/upscalers.html&quot; rel=&quot;noreferrer&quot;&gt;upscaler&lt;/a&gt;. Computers that only had RF output, such as the ZX81, ZX Spectrum, Tandy Color Computer etc. will need modifications to get composite or RGB output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheap composite to VGA upscalers are available on eBay (eg.&lt;a href=&quot;https://www.ebay.com/itm/AV-to-VGA-HD-Converter-Adapter-TV-RCA-Composite-Monitor-S-Video-US-UK-EU-AU/223360684154&quot; rel=&quot;noreferrer&quot;&gt;AV to VGA HD Converter&lt;/a&gt;). Alternatively you could just use a small LCD TV (which often also have VGA input).    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For RGB to VGA the cheapest solution is the &lt;a href=&quot;https://www.ebay.com/itm/Gonbes-GBS-8200-CGA-15kHz-EGA-25kHz-Arcade-JAMMA-PCB-to-1-x-VGA-Converter/111462912684&quot; rel=&quot;noreferrer&quot;&gt;Gonbes GBS8200&lt;/a&gt;. Like most upscalers it has some artifacting and frame lag, but this can be reduced by overriding the onboard controller with a &lt;a href=&quot;http://www.bhabbott.net.nz/gbs8200.html&quot; rel=&quot;noreferrer&quot;&gt;custom programmed MCU&lt;/a&gt;.  &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-10-31T10:45:03.113" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="12637" PostTypeId="1" AcceptedAnswerId="12638" CreationDate="2019-10-31T13:12:21.127" Score="14" ViewCount="1444" Body="&lt;p&gt;I had always assumed that &lt;code&gt;EMM386.EXE&lt;/code&gt; was responsible for managing the Upper Memory Blocks - UMBs - the memory space between 640KiB and 1MiB in real mode x86. For example, on MS-DOS 6.22, &lt;code&gt;help emm386.exe&lt;/code&gt; shows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Provides access to the upper memory area and uses extended memory to simulate expanded memory&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;EMM386.EXE is also where you configure, with I=nnnn and X=nnnn directives, which UMBs are available or not for DOS use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I recently read &lt;a href=&quot;http://www.phatcode.net/res/219/files/xms20.txt&quot; rel=&quot;noreferrer&quot;&gt;eXtended Memory Specification (XMS), ver 2.0&lt;/a&gt;, which contains programming APIs for &quot;Upper Memory Management Functions&quot;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;10h)  Request Upper Memory Block&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;11h)  Release Upper Memory Block&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The document's definition of Upper Memory Block matches my definition above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The eXtended Memory Manager in MS-DOS is &lt;code&gt;HIMEM.SYS&lt;/code&gt; but I had always assumed that it managed the extended memory area (memory beyond 1MiB) only. &lt;code&gt;help himem.sys&lt;/code&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;HIMEM is an extended-memory-manager -- a program that coordinates the use your computer's extended memory, including the high memory area (HMA)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It does not mention managing the UMBs, neither does it describe a mechanism for controlling which UMBs are available are not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what is the true story - what manages UMBs in MS-DOS? Has this changed over MS-DOS' lifetime - is the XMS spec doc no longer accurate?&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2021-01-18T16:17:17.877" Title="What manages Upper Memory Blocks (UMBs) in MS-DOS?" Tags="&lt;ms-dos&gt;&lt;ibm-pc&gt;&lt;memory&gt;&lt;memory-layout&gt;&lt;x86&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12638" PostTypeId="2" ParentId="12637" CreationDate="2019-10-31T14:11:51.663" Score="17" Body="&lt;p&gt;The XMS specification is still accurate: functions 0x10 and 0x11 provide access to UMBs. However, the specification doesn’t decide &lt;em&gt;where&lt;/em&gt; those functions are implemented.&lt;/p&gt;&#xA;&lt;p&gt;On its own, &lt;code&gt;HIMEM.SYS&lt;/code&gt; does indeed only provide access to memory above 1MiB, &lt;em&gt;i.e.&lt;/em&gt; the HMA (so it also controls the A20 line) and extended memory (which it makes available as XMS). If you only load &lt;code&gt;HIMEM.SYS&lt;/code&gt;, setting &lt;code&gt;DOS=UMB&lt;/code&gt; (in MS-DOS 5 and later) won’t do anything useful; you’ll only be able to use &lt;code&gt;DOS=HIGH&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In typical setups on 386+ systems, &lt;code&gt;EMM386.EXE&lt;/code&gt; implements the UMB functions 0x10 and 0x11, and fulfills them by mapping extended memory to addresses in the UMA. To do this, it needs to run the system in V86 mode, which causes compatibility problems with some programs which expect to run in real mode (and take over ring 0).&lt;/p&gt;&#xA;&lt;p&gt;Other tools also implement those functions. For example, &lt;a href=&quot;https://www.uwe-sieber.de/umbpci_e.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;UMBPCI&lt;/a&gt; can provide UMBs by activating the corresponding shadow RAM, using chipset-specific features. This was common on 286s, where chipset-specific drivers could activate shadow RAM to provide memory between 640K and 1M. The Last Byte Memory Manager was a shareware memory manager which included lots of chipset-specific drivers to do this. Another approach, on 8086s and 286s, was to use EMS 4.0 features to map expanded memory into the UMA; QRAM can do this (as well as use shadow RAM on C&amp;amp;T-based 286 systems). All these memory managers are capable of providing UMBs without leaving real mode... 386-specific memory managers such as QEMM386 use the same techniques as &lt;code&gt;EMM386&lt;/code&gt; (and the grandfather of them all, Compaq’s &lt;code&gt;CEMM&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;In all cases, memory managers which work with &lt;code&gt;HIMEM.SYS&lt;/code&gt; need to piggy-back on top of it, which is why you always load &lt;code&gt;HIMEM.SYS&lt;/code&gt; first. On its own, &lt;code&gt;HIMEM.SYS&lt;/code&gt; responds to interrupt 0x2F functions 0x4300 and 0x4310. Subsequent memory managers call those functions, find &lt;code&gt;HIMEM.SYS&lt;/code&gt;, then hook interrupt 0x2F themselves, and either take over function 0x4310 in particular to point to their own entry point, or overwrite the code at the start of the existing entry point with a far jump to their own entry point (see the XMS specification for details). Having stored &lt;code&gt;HIMEM.SYS&lt;/code&gt;’s entry point somewhere, they can then pass on appropriate calls to &lt;code&gt;HIMEM.SYS&lt;/code&gt;. QEMM386 and other “high-end” memory managers replace &lt;code&gt;HIMEM.SYS&lt;/code&gt; entirely so it shouldn’t be loaded at all.&lt;/p&gt;&#xA;&lt;p&gt;As far as programs running on top of DOS are concerned, UMBs are managed by DOS. If a program wants to allocate memory in the UMA, it should try to do so using the usual DOS memory allocation functions, after setting the allocation strategy using &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/dos_kernel/2158.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;interrupt 0x21 function 0x58&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Microsoft’s &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/095/Q95555/&quot; rel=&quot;nofollow noreferrer&quot;&gt;knowledge base entry 95555&lt;/a&gt;, “Overview of Memory-Management Functionality in MS-DOS”, provides a good introduction to the whole topic.&lt;/p&gt;&#xA;&lt;p&gt;(This answer describes MS-DOS; I can’t remember the details for DR DOS and Novell DOS, but at least on OpenDOS, &lt;code&gt;HIMEM.SYS&lt;/code&gt; also manages the UMA in some cases.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-01-18T16:17:17.877" LastActivityDate="2021-01-18T16:17:17.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12639" PostTypeId="1" AcceptedAnswerId="12641" CreationDate="2019-10-31T15:47:54.443" Score="21" ViewCount="1070" Body="&lt;p&gt;I'm looking over what little I can find on the 8502, and from what I can see it appears to be a 2 MHz version of the 6510 with an extra I/O pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much ado about the speed, but the Atari's 6502B's were doing 2 MHz years earlier, and the BBC Micro as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there any other timing/speed related changes that are not obvious?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="6794" LastEditDate="2019-11-07T03:04:09.523" LastActivityDate="2019-11-07T03:04:09.523" Title="MOS 8502, just a 6510B?" Tags="&lt;cpu&gt;&lt;commodore-128&gt;&lt;mos-650x&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12640" PostTypeId="2" ParentId="551" CreationDate="2019-10-31T19:57:50.217" Score="6" Body="&lt;p&gt;&lt;strong&gt;Warning about USB to IDE converters and early (before 1995 or so) IDE drives:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those USB adaptors will kill most early IDE drives, I don't know if that's the only reason but early drives used ALE on PIN 28 (goes to ISA BUS ADDRESS LATCH ENABLE) then it was redefined to SPSYNC:CSEL (Spindle synchronization/cable select) and some drives support SPSYNC but not Cable Select, others support both modes.&#xA;On ATA-2 and newer drives it's always CSEL and it must be grounded to set the drive as MASTER which the USB adapter does to be able to read a drive witouth having to change it's jumpers in case it was set to cable select.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also &quot;modern&quot; mainboards with PCI solts or PCI IDE controllers can have this pin grounded or have a jumper to select between ATA-1 or newer drives. I've seen boards with the jumper pads on the PCB but never one with the jumper pins fitted.&#xA;Other mainboards have electronic switching and can set it depending on BIOS settings or guessing the kind of drive with IDE IDENTIFY command, I don't know for sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a IDE extension cable with the wire from PIN28 removed or well cutted and isolated may prevent those damages &lt;strong&gt;but I'm not 100% sure, use as a last resource only&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;I've tested that with good results on the opposite case: to connect modern drives and Compact Flash adapters on old mainboards which otherwise won't detect any drive&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of doubt or valued data it's better to use a 286/386/early 486 board to read those disks, or any computer which can be fitted with and ISA IDE or MULTI I/O card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are still lots of early ISA MULTI I/O boards for sale online with at least one IDE and one floppy ports (some will have also IDE 2, Floppy 2, PRINTER, COM1, COM2, GAME...) based on GoldStar, NEC, UMC or Winbond chips which can read any of those early drives if supported by the computer BIOS or using drivers to bypass BIOS limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that some 8 BIT ISA boards can be XTA instead of IDE, or have jumper(s) to switch between IDE and XTA, and boards made by hard disk manufacturers can be custom for specific drive models only.&lt;/p&gt;&#xA;" OwnerUserId="15496" LastActivityDate="2019-10-31T19:57:50.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12641" PostTypeId="2" ParentId="12639" CreationDate="2019-10-31T20:28:16.693" Score="23" Body="&lt;p&gt;The change in the MOS designator from 65xx to 85xx was due to the process change - original 65xx were NMOS process, while later 85xx changed to the new HMOS process. This allowed for better densities and lower power dissipation. A positive benefit being that the 85xx used less power even at higher speeds, with obvious benefits for cooling, PSU budget, and reliability. This likely explains why the 1MHz 85xx CPUs were chosen by Commodore for the Plus/4 and C16. Since the C128 needed to support a 2MHz mode, the obvious choice for Commodore by that time (1984) was the 8502 with the more advanced process technology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's not that earlier NMOS CPUs could not be made to run at 2MHz. It's just that by the time Commodore made the C128 they had a better choice available in the 8502.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-10-31T20:28:16.693" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12642" PostTypeId="2" ParentId="12346" CreationDate="2019-10-31T22:16:58.050" Score="0" Body="&lt;p&gt;Depending on your requirements, I would argue that operating systems need only provide a system to allow them to operate: input, output, and load/run programs.  The 6502 based Apple-1 with a 256 byte ROM facilitated this and not really much more.  Even today, there are simple &quot;operating&quot; systems built for &quot;modern&quot; CPUs that merely provide keyboard input, simple text output, and a simple monitor to load/run programs.&lt;/p&gt;&#xA;" OwnerUserId="6741" LastActivityDate="2019-10-31T22:16:58.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12643" PostTypeId="1" AcceptedAnswerId="12644" CreationDate="2019-11-01T07:32:55.307" Score="6" ViewCount="815" Body="&lt;p&gt;I have this monitor, which I think is a Commodore 64 monitor.&#xA;I would like to connect it to a pc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone know how to convert VGA or HDMI to this connector format?&#xA;I've tried searching, but so far I've only found solutions for hooking a C64 up with a VGA monitor, which is kind of the opposite of what I'm aiming for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5J33Z.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5J33Z.jpg&quot; alt=&quot;Connector&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/2xrf8.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2xrf8.jpg&quot; alt=&quot;Back of screen&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/fW6eg.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fW6eg.jpg&quot; alt=&quot;Front of screen&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7832" LastEditorUserId="75" LastEditDate="2019-11-01T10:53:41.710" LastActivityDate="2019-11-04T20:28:37.907" Title="Commodore monitor to VGA or HDMI" Tags="&lt;commodore-64&gt;&lt;commodore&gt;&lt;vga&gt;&lt;mda&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12644" PostTypeId="2" ParentId="12643" CreationDate="2019-11-01T12:47:12.703" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I have this monitor, which I think is a Commodore 64 monitor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. And especially not for the C64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The screen was manufactured in Taiwan (*1) for/by Philips. It was widely sold as a monochrome screen to many countries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is true is, that Commodore OEMed it ca. 1985 as 1901(*2) or later 75BM13 (*3) for/with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_PC_compatible_systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC10/20/... series&lt;/a&gt; (*4) of IBM compatible computers equipped with their AGA card (*3), a &lt;a href=&quot;https://en.wikipedia.org/wiki/Color_Graphics_Adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;CGA&lt;/a&gt; / &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Monochrome_Display_Adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;MDA&lt;/a&gt; / &lt;a href=&quot;https://en.wikipedia.org/wiki/Hercules_Graphics_Card&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hercules&lt;/a&gt; compatible adapter.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I would like to connect it to a pc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It is already a PC one - for MDA cards/output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;monochrome at &lt;/li&gt;&#xA;&lt;li&gt;18.432 kHz with an&lt;/li&gt;&#xA;&lt;li&gt;effective resolution of 720x350 pixels and&lt;/li&gt;&#xA;&lt;li&gt;analogue intensity of&lt;/li&gt;&#xA;&lt;li&gt;4 levels (used by MDA).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;While MDA required 720 pixels at a 16.25 MHz pixel clock (video bandwith) Commodore speced the monitor at 800 and 20 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only difference to a standard IBM compatible screen is that a DIN plug is used instead of a &lt;a href=&quot;https://en.wikipedia.org/wiki/D-subminiature#DE-9&quot; rel=&quot;nofollow noreferrer&quot;&gt;DE-9S&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Anyone know how to convert VGA or HDMI to this connector format?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nope. I bet you would as well not like the loss of information due the downscaling.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I've tried searching, but so far I've only found solutions for hooking a C64 up with a VGA monitor, which is kind of the opposite of what I'm aiming for.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But that's what the usual way is: using older output generators, like a C64, with modern displays.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, widening up a bit why not use either an old PC, or if it has to be the new one, why not add an old graphics card to your new PC?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;There are a large number of USB to ISA boards, ranging from hobbyist projects to commercial products, offering anywhere between a single slot or 8 slots.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Heck, there are even PCIe to ISA bridges except they are usually a bit expensive.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Legally, going by the FCC ID &lt;a href=&quot;https://fccid.io/BOU&quot; rel=&quot;nofollow noreferrer&quot;&gt;BOU&lt;/a&gt;, by Philips Consumer Lifestyle of Hong Kong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Not to be confused with the 1901 colour monitor, based on a Thomson model, that got sold with C128 and early PC10 (for CGA Mode).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - While 75BM13 sounds like directly taken form Philip's name for the green version BM7513, Commodore used it (only) for the amber one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - You may want to take a look at the &lt;a href=&quot;https://de.wikipedia.org/wiki/Commodore_PC-10_bis_PC-70&quot; rel=&quot;nofollow noreferrer&quot;&gt;German Wiki entry for the PC10&lt;/a&gt;, containing a bit more information, as these machines were not only developed at Commodore Braunschweig, but also quite popular as 'high quality' clones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - &lt;em&gt;Advanced Graphics Architecture&lt;/em&gt; - not to be confused with the later Amiga Chipset of the same name - which got in turn named AA in Germany :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-11-04T16:01:27.130" LastActivityDate="2019-11-04T16:01:27.130" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12645" PostTypeId="1" AcceptedAnswerId="12689" CreationDate="2019-11-01T13:58:56.027" Score="9" ViewCount="925" Body="&lt;p&gt;I have a strange desire to make an imaginary competitor to the Atari 800 (6502 + different custom chips). As far as I can see people are mostly interested in making &amp;quot;my childhood computer, but with superpowers&amp;quot;. I want to do something that would be completely realistic for 1979 within roughly the same budget. I'd be happy with writing an emulator only, but obviously it's just too easy to incorporate things that were not possible in that era without even realising it. Implementing it in FPGA with every chip as a separate FPGA chip seems to be the way to keeping it more real, but the difference with original technology seems to be massive (am I wrong?) hence it'd be hard to keep it real. What else can I do to limit myself to what was available at that time?&lt;/p&gt;&#xA;&lt;p&gt;If I design a computer comparable to the Atari 800, what can I do to be sure that, after the design is altered to use similar parts to those available in 1979, it could have been mass-produced in the year 1979 and would cost less than $1000 to make?&lt;/p&gt;&#xA;" OwnerUserId="15499" LastEditorUserId="15334" LastEditDate="2021-01-24T20:12:16.560" LastActivityDate="2021-01-24T20:12:16.560" Title="How can I ensure my computer design is not anachronistic?" Tags="&lt;hardware&gt;&lt;atari-800&gt;&lt;diy-computing&gt;" AnswerCount="3" CommentCount="18" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12646" PostTypeId="1" CreationDate="2019-11-01T15:51:55.907" Score="19" ViewCount="1614" Body="&lt;p&gt;This is an essentially trivial question, but anyway: several operating systems have a command to display a specified text string on the terminal, or standard out, or whatever (depends on system to some extent).  This command is often called &quot;echo&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is it called that? What is the origin?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The function is unrelated to echoing, which is about reflecting input (possibly modified) to output - for example where a teletype driver operating in full-duplex mode will echo input characters to have them appear on the output.  As another example, there's the possibility of displaying commands from a non-interactive source (script file) on the terminal as those commands are processed; this also seems within the definition of 'echo'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why is a command to display some arbitrary text called 'echo'?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect we've all got used to this and no longer consider it to be an abnormal use of the word.  In most major programming languages, the function to output some text has a name like 'print' or 'display'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some systems (e.g., MS DOS) have a hybrid command where 'echo' can either, depending on arguments, control display of scripted commands or output a specified text string.  It's the latter operation I'm interested in.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-11-01T16:04:43.027" LastActivityDate="2020-06-18T18:12:53.987" Title="Why is the 'echo' command called 'echo'?" Tags="&lt;history&gt;&lt;shell&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12648" PostTypeId="2" ParentId="12646" CreationDate="2019-11-01T16:11:52.747" Score="18" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;It's about the viewpoint these functions were designed.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Command line is all about interaction&lt;/li&gt;&#xA;&lt;li&gt;Programming is about deferred execution&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As a result command/statement names were picked to reflect either viewpoint&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The long read:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The function is unrelated to echoing, which is about reflecting input (possibly modified) to output&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But that's exactly the core function. Imagine yourself standing in a rift with a great echo. Whatever you shout comes back to you. And much like the echo on a lake, it is someone else 'speaking' here: the machine, not you. Type it at the command line and it, well, commands the machine to 'echo' what you 'said'.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for example where a teletype driver operating in full-duplex mode will echo input characters to have them appear on the output.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Teleprinter&quot; rel=&quot;noreferrer&quot;&gt;Teleprinters&lt;/a&gt; usually operated in local echo mode(*1). Noone in his right mind would use remote echo and wait for each character to be returned. Keep in mind, a standard teleprinter (TTY) like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletype_Model_33&quot; rel=&quot;noreferrer&quot;&gt;ASR-33&lt;/a&gt; (*2) was at maximum capable of &lt;strong&gt;10 characters per second&lt;/strong&gt; (*3). So even with a zero delay computer (*4), that's a 0.2 second communication delay between typing a character and receiving the character to be printed, plus whatever time the mechanics need to punch the type (*5).&lt;/p&gt;&#xA;&lt;p&gt;Remote echo only became a thing when faster attachment speeds became possible with affordable glass-TTY appeared in the early 1970s. And even then it is really only acceptable for small machines with a single or a few users. There is a reason mainframes with high throughput and a large number of concurrent users went along the way of local editing and block orientated communication: Responsiveness. What's fine with just a few users is unbearable with hundreds or thousands.&lt;/p&gt;&#xA;&lt;p&gt;A command line typed on an early setups was thus not produced by a computer mirroring what you typed, but local echo. &lt;code&gt;ECHO&lt;/code&gt; as a command made the machine echo the input - in contrast to local echo - so you could see exactly what has been received. Showing possible command line modification was a plus as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I suspect we've all got used to this and no longer consider it to be an abnormal use of the word.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I fail to see the 'abnormal' part. Well, unless you got a very specific view what a computer is and how it works in relation to yourself and commands given. These are not 'god-given' points of view, but have evolved over time - and still do.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In most major programming languages, the function to output some text has a name like 'print' or 'display'.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Unlike &lt;code&gt;print&lt;/code&gt;, echo clearly refers to returning it to the device that has issued the command (*6), while print implies a dedication to some printer, local or remote. &lt;code&gt;DISPLAY&lt;/code&gt; in contrast is a very generalized view.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;PRINT&lt;/code&gt; and &lt;code&gt;DISPLAY&lt;/code&gt; can in fact be traced back to two influential languages: FORTRAN used &lt;code&gt;PRINT&lt;/code&gt;, while COBOL went for &lt;code&gt;DISPLAY&lt;/code&gt;. But even these two mighty forefathers didn't keep others from using different statements - like Pascal's &lt;code&gt;WRITE(LN)&lt;/code&gt;. The use of different statements in programming languages for the same working does quite well reflect that &lt;strong&gt;there is no one size fits all&lt;/strong&gt; solution, but different views at work.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The most important point here&lt;/strong&gt; might be the question referring to programming languages. Programming has an inherently different view about how to interact than a command line. When programming it's about setting an explicit sequence of actions for the machine to do at a way later point.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Programming languages were made with this deferred execution in mind&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Print, display, write, etc. were chosen within the context of programming&lt;/p&gt;&#xA;&lt;p&gt;Command line in contrast is about direct interaction. Everything typed gets done right away.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Command line was developed with this viewpoint in mind.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;code&gt;ECHO&lt;/code&gt; was picked with teleprinter-/terminal-operation as template&lt;/p&gt;&#xA;&lt;p&gt;Having direct commands stacked in a batch file doesn't change that part. In fact, classic BATCH languages (like JCL) do not contain statement to print like &lt;code&gt;ECHO&lt;/code&gt; does. Batch doesn't have a need for it. Modern batch, as command line entries from a file, wasn't always there, but is a later development.&lt;/p&gt;&#xA;&lt;p&gt;As so often, things that are believed to be fundamental aren't as much basic when going back.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;It might be noteworthy to compare with another common command: &lt;code&gt;TYPE&lt;/code&gt; like for example used by MS-DOS. It is used to 'type out' some input (file). Noone really expects the computer to type it - he got no fingers to hit the typewriter keys - but output on a teleprinter looked much like some ghost, like the ghost in the machine, would be sitting there and type the file.&lt;/p&gt;&#xA;&lt;p&gt;For &lt;code&gt;TYPE&lt;/code&gt; the same argument could be made, that &lt;code&gt;PRINT &lt;/code&gt; would be way more appropriate, isn't it?&lt;/p&gt;&#xA;&lt;p&gt;It comes all down to what analogy the creators could find - and what idea of the machine they fostered. Like so many commands it has its origin at a time when people where still struggling to find a canonical about how to view interaction.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The issue here is local vs. remote echo, not full or half duplex, as that only describes how the line is shared, not how echo is handled.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Unix development started on a &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-7&quot; rel=&quot;noreferrer&quot;&gt;PDP-7&lt;/a&gt; with an ASR-33 at 10 cps as 'fast' terminal.&lt;/p&gt;&#xA;&lt;p&gt;*3 - While capable of 10 characters per second, standard setting was in most cases 6 char/s.&lt;/p&gt;&#xA;&lt;p&gt;*4 - On a computer using fancy stuff like 'drivers' this add quite more delay. Multics, the paragon for Unix was quite remarkable in being sluggish due the modular design. Something great today, but over the edge back then, slowing down even a fast machine like the GE mainframe.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Try telling that to any of today's gamers already writing negative critics about screens and mice with a few milliseconds delay :) - and while we may think of funny here, I experience on a regular base that such delays are really inconceivable to them. It's like telling someone that starting an early car took anything between 10 minutes and an hour - but so it was.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Scripting hides this relationship a bit, doesn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-06-09T19:02:33.627" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="12649" PostTypeId="1" CreationDate="2019-11-01T19:35:26.893" Score="10" ViewCount="1146" Body="&lt;p&gt;An installation of DOS (e.g. MS-DOS 5.0) will typically include a statement in its CONFIG.SYS such as &lt;code&gt;DEVICE=C:\DOS\HIMEM.SYS&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When installing Windows 3.1, it's setup comments (REMs) that line out, and adds &lt;code&gt;DEVICE=C:\WINDOWS\HIMEM.SYS&lt;/code&gt; instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Presumably there is some material difference between these two files for the setup to make this modification. What does the Windows version do that the DOS one doesn't?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This question is prompted in part by an Aleph One expansion card for Acorn Archimedes machines, which adds hardware support for running PC software under RISC-OS. Loading the DOS version of HIMEM.SYS results in an unstable system, but the Windows version works correctly, even when running DOS. A forum discussion about these symptoms can be found &lt;a href=&quot;https://stardot.org.uk/forums/viewtopic.php?p=252506&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2020-12-02T12:10:33.387" Title="What's the difference between the DOS HIMEM.SYS and the Windows 3.x version?" Tags="&lt;ms-dos&gt;&lt;memory&gt;&lt;archimedes&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12650" PostTypeId="1" CreationDate="2019-11-01T20:53:56.870" Score="3" ViewCount="196" Body="&lt;p&gt;Sun's SBus is particular for having virtual addressing and address translation even for device drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any other buss design which had this peculiarity ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out Ben Catanzaro's book The SPARC technical papers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is an addition to the latest DMA questions&lt;/p&gt;&#xA;" OwnerUserId="15497" LastActivityDate="2019-11-04T11:35:18.060" Title="virtual addressing in device drivers" Tags="&lt;memory-layout&gt;&lt;virtual-memory&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12651" PostTypeId="2" ParentId="12649" CreationDate="2019-11-01T22:11:03.173" Score="12" Body="&lt;p&gt;Different versions of MS-DOS and Windows shipped with different versions of &lt;code&gt;HIMEM.SYS&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Windows/286 2.10: &lt;code&gt;HIMEM.SYS&lt;/code&gt; 1.1 (not an XMS driver)&lt;/li&gt;&#xA;&lt;li&gt;Windows/386 2.10, Windows 2.11: &lt;code&gt;HIMEM.SYS&lt;/code&gt; 2.04&lt;/li&gt;&#xA;&lt;li&gt;Windows 3.0: &lt;code&gt;HIMEM.SYS&lt;/code&gt; 2.60&lt;/li&gt;&#xA;&lt;li&gt;MS-DOS 5.0: &lt;code&gt;HIMEM.SYS&lt;/code&gt; 2.77&lt;/li&gt;&#xA;&lt;li&gt;Windows 3.1: &lt;code&gt;HIMEM.SYS&lt;/code&gt; 3.07&lt;/li&gt;&#xA;&lt;li&gt;MS-DOS 6.2 and later, Windows for Workgroups 3.11: &lt;code&gt;HIMEM.SYS&lt;/code&gt; 3.10&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;(See &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/074/Q74977/&quot; rel=&quot;nofollow noreferrer&quot;&gt;KB74977&lt;/a&gt; and &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/084/Q84388/&quot; rel=&quot;nofollow noreferrer&quot;&gt;KB84388&lt;/a&gt; for some of these.)&lt;/p&gt;&#xA;&lt;p&gt;The major difference between MS-DOS 5.0’s version of &lt;code&gt;HIMEM.SYS&lt;/code&gt; and Windows 3.1’s is in the major version: &lt;code&gt;HIMEM.SYS&lt;/code&gt; 2.&lt;em&gt;x&lt;/em&gt; implements &lt;a href=&quot;http://www.phatcode.net/res/219/files/xms20.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;version 2.0 of the XMS&lt;/a&gt;, &lt;code&gt;HIMEM.SYS&lt;/code&gt; 3.&lt;em&gt;x&lt;/em&gt; implements &lt;a href=&quot;http://www.phatcode.net/res/219/files/xms30.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;version 3.0&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I don’t have details off-hand of all the changes between these versions, but &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/084/Q84388/&quot; rel=&quot;nofollow noreferrer&quot;&gt;KB84388&lt;/a&gt; mentions that version 2.77 only provides access to 16MiB of RAM (XMS 2.0 is limited to 64MiB), whereas 3.07 can detect up to 4GiB and make use of up to 1GiB (although Windows 3.&lt;em&gt;x&lt;/em&gt; can’t use that much). This limitation is actually a Windows 3.0 limitation, inherited from the 286’s 24-bit descriptors — Windows 3.0 only supports 16MiB of RAM and “relies on the XMS driver to enforce this limit.” There are presumably other differences, including bug fixes and possibly better support for certain systems.&lt;/p&gt;&#xA;&lt;p&gt;Older versions of &lt;code&gt;HIMEM.SYS&lt;/code&gt; were made available &lt;a href=&quot;http://www.os2museum.com/wp/a-brief-history-of-unreal-mode/&quot; rel=&quot;nofollow noreferrer&quot;&gt;with source code&lt;/a&gt;, but I don’t think that was still the case with the versions shipped in Windows 3.0 or later. There might be a list of changes somewhere on the Internet but it escapes me just now. Some changes can be gleaned from Microsoft knowledge base articles; for example, &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/072/Q72112/&quot; rel=&quot;nofollow noreferrer&quot;&gt;version 2.77 added a switch to reserve memory for the interrupt 0x15 interface&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-11-06T08:09:52.377" LastActivityDate="2020-11-06T08:09:52.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12652" PostTypeId="2" ParentId="12650" CreationDate="2019-11-01T22:12:22.970" Score="7" Body="&lt;p&gt;DEC PDP-11 and VAX systems using the Q-Bus had a 'Q-bus map' to map from the bus address space into the physical memory space.   This is basically an MMU for devices.  On an I/O request from a program, the driver and OS would allocate and initialize map registers, and pass the appropriate bus-virtual address to the device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible for a contiguous bus-virtual address to be non-contiguous in physical memory, which probably mattered on VAX but not on the -11 systems I programmed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Q-bus map is necessarily separate from the map used by running programs (PARs/PDRs in -11, page tables in VAX) because the program that requested the I/O is not necessarily current on the CPU by the time the I/O transfer happens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See section 3.8.1 in &lt;a href=&quot;http://bitsavers.org/pdf/dec/vax/650/EK-KA650-UG-003_KA650_CPU_Module_Technical_Manual_Mar89.pdf&quot; rel=&quot;noreferrer&quot;&gt;this technical manual&lt;/a&gt; for an arbitrarily-chosen MicroVAX CPU.  You'll note that the entire map is actually held in physical memory, with a 16-entry TLB to avoid memory accesses. That is, it's your basic (system-wide) page table arrangement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar arrangements exist for Unibus machines, and in particular, the map is needed when there's more than 124 Kwords (18-bits-worth less the I/O page) of memory, since the Unibus is only 18 bits wide.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-11-01T22:36:43.853" LastActivityDate="2019-11-01T22:36:43.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12653" PostTypeId="2" ParentId="12643" CreationDate="2019-11-02T03:51:08.533" Score="7" Body="&lt;p&gt;The monitor shown is a Philips BM7523 which is a 12 inch amber monochrome MDA/Hercules display. The cable shown in your photo ends in a DE-9 plug which is standard for MDA, CGA, and EGA. (VGA uses a DE-15/HD-15 connector.) The service manual with specifications is &lt;a href=&quot;https://gona.mactar.hu/Commodore/monitor/schematics/Commodore_1901_Mono_Monitor.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, you might be able to put your VGA adapter into a mode whose timings are &lt;a href=&quot;https://www.reddit.com/r/vintagecomputing/comments/33umve/ibm_mda_monitor_working_on_a_modern_laptop_with/&quot; rel=&quot;nofollow noreferrer&quot;&gt;compatible with MDA&lt;/a&gt; without releasing any &lt;a href=&quot;https://en.wikipedia.org/wiki/Magic_smoke&quot; rel=&quot;nofollow noreferrer&quot;&gt;magic smoke&lt;/a&gt;. If not, read on...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MDA has a resolution of 720&amp;times;350 while VGA is 640&amp;times;480 or 800&amp;times;600, so the first problem is to figure out how to squeeze or stretch a VGA resolution into an MDA resolution, and how to handle MDA's non-square pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edit: &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12644/75&quot;&gt;Raffzahn's answer&lt;/a&gt; says your particular monitor supports 800 pixels across, so that helps a little.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next problem is that MDA is monochrome and supports only 3 levels of brightness per pixel (off, low intensity, high intensity).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've decided how to deal with the mismatched resolution and colors, the technical hurdles begin, starting with converting VGA's horizontal 31.469 kHz and vertical 59.94 Hz scanning frequencies to MDA's horizontal 18.432 kHz and vertical 50 Hz frequencies. You will need to constantly capture the VGA signal to a RAM frame buffer 60 times (frames) per second, and read the same RAM to create an MDA signal 50 frames per second while doing the conversions you decided upon above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But now you have one more conversion: converting 60 fps progressive to 50 fps interlaced. You'll get some judder or tearing depending on how you do it. If you're adapting from HDMI, you could avoid the problem by sending the monitor a 50 Hz PAL signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these problems can be overcome, but not without tradeoffs. You might design your VGA/HDMI to MDA adapter in an FPGA due to tight timing requirements and lack of modern supporting chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One more thing, this monitor has a long-persistence phosphor, another reason why it won't be very good for video or games. If I were you, I would keep the monitor in its native habitat by finding a nice old computer that outputs MDA/Hercules. Then if you still want to connect this monitor to a modern computer, you can do that through RS-232 and a terminal emulator running on the old computer, with perhaps &lt;a href=&quot;https://en.wikipedia.org/wiki/Getty_(Unix)&quot; rel=&quot;nofollow noreferrer&quot;&gt;getty&lt;/a&gt; running on the modern computer.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-11-04T20:28:37.907" LastActivityDate="2019-11-04T20:28:37.907" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12654" PostTypeId="1" AcceptedAnswerId="12657" CreationDate="2019-11-02T04:44:42.770" Score="22" ViewCount="6673" Body="&lt;p&gt;There is plenty of literature about its meaning, the current directory, but I would like to ask about why such thing do exist in first instance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While &lt;code&gt;CHDIR ..&lt;/code&gt; usefulness is obvious, i.e. go to the parent directory, &lt;code&gt;CHDIR .&lt;/code&gt; is a bit confusing since it does nothing but switching to the same directory the user is already in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the single dot directory exists purely for architectural symmetry reasons or were there technical reasons back then that made this a necessity? &lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2019-11-02T13:29:16.520" LastActivityDate="2019-11-04T16:46:48.397" Title="Why does the single dot entry exist in file systems?" Tags="&lt;ms-dos&gt;&lt;file-system&gt;" AnswerCount="9" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12655" PostTypeId="2" ParentId="12654" CreationDate="2019-11-02T09:50:17.583" Score="4" Body="&lt;p&gt;At least in MS-DOS, when a new directory is created, it is first populated with two special entries, .. which points to parent directory where it was created from, and . which points to itself. It is possible that being currently in some directory just means keeping a pointer to a directory, and absolute path name can be get by just following the .. entries until you hit the root where there is no .. entry. Therefore the . and .. entries can actually be handled just like other directory names in the code, as everything is related to the directory you currently are in, and it enables to  give the target directory whether it is a parent, current, or sub-directory.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-11-02T09:50:17.583" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12656" PostTypeId="2" ParentId="12654" CreationDate="2019-11-02T10:06:28.443" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;code&gt;CHDIR .&lt;/code&gt; is a bit confusing since &lt;code&gt;CHDIR&lt;/code&gt; produces the exact same result and both in fact are pretty much a no-op.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, not even at first sight, as (under MS-DOS) &lt;code&gt;chdir&lt;/code&gt; prints out the current directory, while &lt;code&gt;chdir .&lt;/code&gt; does not. Of course, this may vary depending on the OS in use. For example under Unix, neither &lt;code&gt;cd .&lt;/code&gt; nor &lt;code&gt;cd&lt;/code&gt; produce anything but a linefeed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, &lt;code&gt;chdir .&lt;/code&gt; and &lt;code&gt;cd .&lt;/code&gt; do in fact change the directory, which includes triggering various checks and actions within the OS - like access rights. &lt;code&gt;chdir&lt;/code&gt; also isn't a no-op, as it may have additional functions depending on the OS. Under MS-DOS for example, it prints the current path - which is also a visible difference from &lt;code&gt;chdir .&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does the single dot directory exists purely for architectural symmetry reasons or was there a technical reason back then that made this a necessity?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The reason is still there and it's the same as for the double-dot-entry (&lt;code&gt;..&lt;/code&gt;): providing a symbolic name for the current directory. Either entry can be used whenever a directory name is required. Within commands this may arise for two reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;To name a directory without knowing the actual name&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Whenever a command needs a directory as parameter, the dot-entries can be used to specify one. Having them not only simplifies typing, but also allows position independent scripting. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;To satisfy the need for a positional parameter to not be empty&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Unix (and DOS) commands rely on positional parameters. Even if the default value for such a parameter is the current directory, it does need to be present when another positional parameter follows. For example &lt;code&gt;cp &amp;lt;from&amp;gt; &amp;lt;to&amp;gt;&lt;/code&gt; would lose its meaning if &lt;code&gt;&amp;lt;from&amp;gt;&lt;/code&gt; is simply left empty. Using a single-dot will make it work without having to type the whole path or some weird construction like &lt;code&gt;../&amp;lt;name&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both cases, &lt;strong&gt;&lt;code&gt;*&lt;/code&gt; can not be used&lt;/strong&gt;, as it does not specify a (single) directory, but the list of files/directories within an directory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12654/why-does-the-single-dot-entry-exist-in-file-systems/12656?noredirect=1#comment39826_12656&quot;&gt;UncleBod reminds&lt;/a&gt;, the single-dot-entry is quite necessary to form a full path name to make sure a file from the current directory is executed. When looking up a command Unix searches only within the given search path, unlike MS-DOS, where the actual directory is always searched first.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Adding both symbolic entries to the directories was basically a quick hack to add the feature of a symbolic name for 'actual' and 'parent' directory to each and every path handling without having to implement it with every command. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-03T07:45:00.783" LastActivityDate="2019-11-03T07:45:00.783" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="12657" PostTypeId="2" ParentId="12654" CreationDate="2019-11-02T11:32:31.257" Score="30" Body="&lt;p&gt;It simply makes sense to have a symbol that stands for the current directory.  It makes sense for the symbol to be easy to type and to stand out from ordinary directory names.  Dot is a pretty good choice.  It makes learning a lot easier if the same symbol means the same thing in multiple contexts.  consider the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;chdir .\subdir&#xA;copy c:\test\*.* .&#xA;start .&#xA;chdir .&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Only one of these is a no-op.  the dot refers to the same thing in all of them, except for the dot that separates the two asterisks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, a side issue.  How did dot come to mean the current &quot;location&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer is probably in DDT for the PDP-1, a program written in 1961, give or take a year.  DDT allowed interactive debugging of programs written for the PDP-1 computer.  In DDT, dot slash meant open the current location for examination and possible alteration. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;./  {current contents displayed}  {new contents may be entered}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now the &quot;current location&quot; meant one 18 bit word in DDT, while it means a directory in commands like CHDIR.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's likely that dot as a symbol for the current location comes down to DOS from that source.  Adaptations of DDT were produced for the PDP-6, PDP-7, and PDP-10.&lt;br&gt;&#xA;Bill Gates used PDP-10 DDT while in high school.  Unix was first implemented on  a PDP-7, where the authors would have been exposed to DDT.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2019-11-02T14:28:36.697" LastActivityDate="2019-11-02T14:28:36.697" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12658" PostTypeId="1" CreationDate="2019-11-02T13:02:32.840" Score="1" ViewCount="156" Body="&lt;p&gt;If I have a 100-pin connector that may be connected to any of several known devices (NES, SNES, Gameboy, and so forth), can the device somehow auto-detect which device it's connected to?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some of these, it may be possible to send a reset signal, or set an NMI address and trigger an IRQ, allowing simple brute force.&lt;/p&gt;&#xA;" OwnerUserId="15503" LastActivityDate="2019-11-02T13:02:32.840" Title="100-pin connector to FPGA/SOC, can I auto-detect if attached to NES, SNES, Genesis, N64, GB, GBA?" Tags="&lt;nes&gt;&lt;snes&gt;&lt;sega-genesis&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12659" PostTypeId="2" ParentId="12654" CreationDate="2019-11-02T15:41:27.077" Score="-3" Body="&lt;p&gt;The contrarian view is that the use of &quot;.&quot; to represent the current directory is not a necessary feature, and is not really a &quot;feature&quot; at all. Rather, it is a legacy of unsophisticated command-line parsers that we simply became stuck with as mostly an accident of history.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All early disk operating systems relied on a command line to interact with the filesystem. There are many conventions that can be used for command line parsers and these range from very simple to quite sophisticated. On this spectrum, the simplest approach is to make all essential parameters be required, and to parse these required parameters positionally. Optional parameters can also be positional (at the end). More advanced command line parsers add possibilities like parameter defaults, flags, named parameters, and positional independence of the arguments. It's akin to the difference in the parameter passing to functions in a simple language like ANSI &quot;C&quot; vs. something with a more advanced parser like Python.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what was this accident of history? It's just that the OS's that went for the simpler command line parsing conventions ended up being the dominant ones, and therefore the ones we best remember and still use (in the case of Unix derivatives). While MS-DOS was taking over the world, many of us contrarian types were using AmigaDOS, which had a more advanced command line parser that would use the current directory as the default parameter when none was specified. Additionally AmigaDOS supported position independence, named parameters, and other more advanced parsing features. Note how these are actual &quot;features&quot; of the parser, whereas the use of the &quot;.&quot; for the current directory is a way to deal with parser simplicity when the parser is not sophisticated enough to choose sensible parameter defaults by itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By viewing the &quot;.&quot; convention for current directory as a convention necessary for simpler command line parsers, rather than as some &quot;feature&quot; that was consciously developed, it becomes more clear how we ended up using it decades later.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-11-02T15:46:41.333" LastActivityDate="2019-11-02T15:46:41.333" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12660" PostTypeId="2" ParentId="12654" CreationDate="2019-11-02T15:42:27.540" Score="11" Body="&lt;p&gt;Another use of the dot that I think has not been mentioned is that it allows you to specify what executable to use and tells the OS to not search the PATH. If I type (DOS or Unix) &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;pdflatex&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;then the OS will search for an executable named like that, starting with the current directory and then those listed in the PATH variable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you type (in DOS; in Unix you would use the regular slash)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;.\pdflatex&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;then the OS will only search the current directory and ignore other instances of pdflatex that may exist in the PATH. &lt;/p&gt;&#xA;" OwnerUserId="445" LastEditorUserId="445" LastEditDate="2019-11-02T15:49:23.410" LastActivityDate="2019-11-02T15:49:23.410" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12661" PostTypeId="2" ParentId="775" CreationDate="2019-11-02T16:54:37.280" Score="3" Body="&lt;p&gt;CD distribution media is difficult/expensive to make unique. I once worked on a very low-volume product. We devised a technique to make the CD &quot;proof of purchase&quot; i.e. baked the product key into a unique CD which could not be copied. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What we did:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our technique relied on burning a writable CD and then making a small scratch on the label side at a fairly specific radial distance. The CD distribution included one huge file which contained nothing more than the product key in a specific encoding and pattern. The scratch rendered some portion of this file unreadable. The installation process would read this file and expect to find it mostly readable with the correct data pattern, and some portion unreadable. If the file met this criteria, it would accept the CD and register the installed software with the license key encoded in the file. Any attempt to copy the CD would fail because of the damaged file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What was wrong with our technique:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The technique itself worked well. We could reliably produce a CD that could not be copied and was proof of purchase. It worked for our low-volume product (a few dozen copies), might have been sustainable for hundreds of copies, but impractical for larger distributions because each CD had a one-off generated license file which took time to generate and even longer to burn the distribution onto the CD. Typical CD distributions involve a CD master which is pressed in the same way as vinyl records; each CD is identical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; while it is possible to bind a product key to a specific key (we demonstrated one way to do it), it isn't practical or economic to do for anything published in volume, especially not on the scale of an O/S.&lt;/p&gt;&#xA;" OwnerUserId="4561" LastActivityDate="2019-11-02T16:54:37.280" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12662" PostTypeId="2" ParentId="12645" CreationDate="2019-11-03T00:12:28.170" Score="8" Body="&lt;p&gt;I would simply consider the complexity of the ANTIC, POKEY, and GTIA chips -- how many transistors etc., and use that as a transistor budget for your gate arrays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simply assume that the designers made the chips &quot;as complex as they could given technology and economics&quot;, and use them as a benchmark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, you need to keep the clock rates down like they were back then and also consider the limitations of the TV screens they were being displayed on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, if you had come piece of logic that lets you plug your thing in to a modern VGA or HDMI monitor due to simply being the reality of modern times. That's fine. No different from that little RCA box that converted the computer signal in to the antenna signal for a generic TV, right? Showing 320x192 B&amp;amp;W pixels on a VGA monitor.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2019-11-03T00:12:28.170" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12663" PostTypeId="2" ParentId="8116" CreationDate="2019-11-03T05:37:35.970" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;IIRC, Windows 98 &amp;amp; ME are versions of 95, and 2000 is a version of NT? Later Windows versions are more different?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;All modern windows is based on the &quot;NT line&quot;, but of course it has evolved over the years and sometimes things break.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC in terms of windows system stuff NT4-&gt;2K was a pretty big change, 2K-&gt;XP was realtively minor, XP-&gt;Vista was a big change and Vista-&gt;7-&gt;8-&gt;10 were again relatively minor.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Can it be a configuration problem? Which is the latest processor I can use for this software?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's not so much about the processor as about the whole system. PCs aren't fundamentally all that different from they were in the 2000s, but there are enough little things that can make getting older OS's to run on newer hardware difficult or impossible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's worth trying windows XP if you haven't already. It might be old enough for your software to run, while being new enough for the rest of your hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also worth setting the SATA mode to &quot;legacy&quot; in the BIOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Failing that it is worth considering virtualisation, virtualisation tools (virtualbox, vmware etc) often get on better with older operating systems than real hardware does.&lt;/p&gt;&#xA;" OwnerUserId="499" LastActivityDate="2019-11-03T05:37:35.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12664" PostTypeId="2" ParentId="5302" CreationDate="2019-11-03T07:47:21.160" Score="3" Body="&lt;p&gt;The Ready signal is part of the original Shugart floppy bus specification, but the IBM PC and compatibles used a different pinout. (One key benefit was to eliminate the need to configure floppy drive numbers with jumpers, by configuring them all the same at the factory, and using a twist in the cable to distinguish between two floppy drives.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PCs expect to receive a different signal on pin 34, to indicate whether the disk is still in the drive or if it's been ejected and swapped (Disk Change). Shugart-compatible systems such as Amiga, Acorn, or Amstrad machines still expected to receive a Ready signal on this pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather than design different floppy drive circuit boards for each market, it would make economic sense to have one circuit board which could be configured to operate to either standard. The addition (or omission) of this resistor is how the configuration would be selected when the board was assembled, and how you can modify the board yourself later if you wish.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-11-03T07:47:21.160" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12665" PostTypeId="2" ParentId="12654" CreationDate="2019-11-03T10:41:55.017" Score="2" Body="&lt;p&gt;In many file systems, having the 'dot' (.) directory as referring to the current directory is necessary to determine the name of the current directory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In UNIX file systems as well as the FAT file systems used in DOS, the names of files and directories are stored as tuples in the parent directory, as opposed to file systems like NTFS where the name is a property of the file itself. If you are not familiar with the file allocation table (FAT) file system, then its structure can be understood as a series of clusters, with a table containing information about which block follows which. Then there are directories, that are basically files containing information about names of their entries along with the index of the first block of data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, to determine the name of the current directory, you need to look into the parent by opening 'dotdot' (..) and looking for the entry that matches the id of the 'dot' (.) directory. That's still how you would do it on inode based modern linux file systems.&lt;/p&gt;&#xA;" OwnerUserId="15506" LastActivityDate="2019-11-03T10:41:55.017" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12666" PostTypeId="2" ParentId="12654" CreationDate="2019-11-03T21:11:30.483" Score="5" Body="&lt;p&gt;The . entry exists in MS-DOS because it was copied from Unix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Unix, it serves the purpose of supplying a name to the current working directory. If we want to traverse the current working directory, we need to pass something to the &lt;code&gt;opendir&lt;/code&gt; function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DIR *d = opendir(&quot;.&quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The dot is also useful for executing programs that are in a relative path. For security reasons, relative paths are not included in &lt;code&gt;PATH&lt;/code&gt; by default.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ cc myprogram.c -o myprogram&#xA;$ myprogram&#xA;file not found: myprogram&#xA;$ ./myprogram&#xA;Hello, World&#xA;$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;PATH&lt;/code&gt; searching rule is that if the command name contains no slashes, then &lt;code&gt;PATH&lt;/code&gt; is used, otherwise it is taken as-as. In order to insert a slash into the &lt;code&gt;myprogram&lt;/code&gt; path name, we need to put it in front, and then we need a &lt;code&gt;.&lt;/code&gt;, otherwise we have the absolute path &lt;code&gt;/myprogram&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that still doesn't answer the question of why &lt;code&gt;.&lt;/code&gt; entries have to actually be in the file system. We can guess here that the reasons is a certain elegance: it avoid special cases elsewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that in early versions of Unix, it was the &lt;a href=&quot;https://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/mkdir.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;mkdir&lt;/code&gt; utility&lt;/a&gt;  which created both the &lt;code&gt;.&lt;/code&gt; and &lt;code&gt;..&lt;/code&gt; entries. (Click the link for &lt;code&gt;mkdir.c&lt;/code&gt; source from 1979.)  In early Unix, the &lt;code&gt;mknod&lt;/code&gt; system call (familiar for creating character and block special files) also created directories. I.e. nodes in the filesystem tree; hence &quot;make node&quot;. The &lt;code&gt;mkdir&lt;/code&gt; program used &lt;code&gt;mknod&lt;/code&gt; to create the directory, and then &lt;code&gt;link&lt;/code&gt; to make the &lt;code&gt;.&lt;/code&gt; and &lt;code&gt;..&lt;/code&gt; links.  Today, making hard links to directories typically is not allowed in Unix-like operating systems, and there is a dedicated &lt;code&gt;mkdir&lt;/code&gt; system call. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, these were conventions established by user space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If user space didn't create the &lt;code&gt;.&lt;/code&gt; link, then to have that convention, the kernel's name lookup routine would've had to implement it as a special case, which the designers might have regarded as an inelegant option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, when non-Unix filesystems are integrated into Unix, they don't necessarily have a dot entry. But their respective filesystem drivers can simulate the presence of that entry to conform to the convention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also noteworthy that the &lt;code&gt;mkdir.c&lt;/code&gt; program is taking advantage of the &lt;code&gt;.&lt;/code&gt; being a prefix of &lt;code&gt;..&lt;/code&gt;; it uses &lt;code&gt;strcat&lt;/code&gt; to add the dots to a path buffer one at a time as it is making the links.&lt;/p&gt;&#xA;" OwnerUserId="5202" LastEditorUserId="5202" LastEditDate="2019-11-04T15:17:28.060" LastActivityDate="2019-11-04T15:17:28.060" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12668" PostTypeId="2" ParentId="12650" CreationDate="2019-11-04T11:35:18.060" Score="2" Body="&lt;p&gt;Nowadays there is such thing as IOMMU, when every device that needs to do DMA with system memory, receives essentially virtual address and the host converts that address with the help of IOMMU device, before actually going into physical memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, we can say that PCI-express have this feature as well, though the address is irrelevant to the bus, it is the target on that bus, who does really care of the address.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-11-04T11:35:18.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12669" PostTypeId="2" ParentId="12654" CreationDate="2019-11-04T13:14:11.947" Score="-2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;While CHDIR .. usefulness is obvious, i.e. go to the parent directory, CHDIR . is a bit confusing since it does nothing but switching to the same directory the user is already in.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sometimes one needs to do a &lt;code&gt;CHDIR .&lt;/code&gt; - for example, if the current directory is deleted (by another process, usually) and the recreated, the OS doesn't know where you are until you do a &lt;code&gt;CHDIR .&lt;/code&gt;. (From &lt;em&gt;bitter experience&lt;/em&gt; in current Linux systems.)&lt;/p&gt;&#xA;" OwnerUserId="7877" LastActivityDate="2019-11-04T13:14:11.947" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12670" PostTypeId="2" ParentId="12654" CreationDate="2019-11-04T16:46:48.397" Score="-1" Body="&lt;p&gt;I'd venture the opinion that &quot;it's simply the Unix way&quot;.  From what I'd read, the file system was one of the first parts of the system to be designed.  Unix tends to put in the file system things which, on other systems, tend to be elsewhere.  For example, devices (and their drivers) appear as special files, where metadata in the inode identifies the actual driver and unit number. You could achieve the same effect without the special files, as for example NT and its offspring do through the Object Manager.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that file-centered mindset, it seems a small step to consider that if you want a &quot;self&quot; entry in a directory, actually creating the entry on the disk is the way to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my point of view, building around the file system is a good unification concept. Unix started on the path; Plan 9 (a subsequent system from some of the same people) followed through to a greater degree. The approach provides an underlying consistency to the entire system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lest I be accused of being one of the biased &quot;high priests&quot; of Unix mentioned in another answer: I've lost count of the number of OSes I've programmed on, and Unix only puts in a small appearance in that roster. I merely recognize a good idea when I see one.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-11-04T16:46:48.397" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12671" PostTypeId="5" CreationDate="2019-11-04T20:37:34.367" Score="0" Body="" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-11-04T20:37:34.367" LastActivityDate="2019-11-04T20:37:34.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12672" PostTypeId="4" CreationDate="2019-11-04T20:37:34.367" Score="0" Body="For questions related to MDA/Hercules signals, sources or receivers." OwnerUserId="75" LastEditorUserId="75" LastEditDate="2019-11-04T20:37:34.367" LastActivityDate="2019-11-04T20:37:34.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12674" PostTypeId="2" ParentId="8116" CreationDate="2019-11-04T22:01:54.573" Score="2" Body="&lt;p&gt;You mention the processor but not the amount of memory installed.  It's possible that it contains more RAM than older versions of Windows can deal with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could try using a virtual machine (VM) such as &lt;a href=&quot;https://www.virtualbox.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;VirtualBox&lt;/a&gt; which can be configured to support older versions of Windows with a single CPU and a small amount of RAM (512MB might be a place to start).  Your preferred flavor of &quot;classic&quot; Windows should install with little issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can mount the media for your software within the VM and install it.&lt;/p&gt;&#xA;" OwnerUserId="4822" LastEditorUserId="4822" LastEditDate="2019-11-05T20:45:49.287" LastActivityDate="2019-11-05T20:45:49.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12675" PostTypeId="1" CreationDate="2019-11-05T01:32:01.120" Score="6" ViewCount="262" Body="&lt;p&gt;After &lt;a href=&quot;http://finapple.hho.fi/finapple/index.php/2018/11/21/go-see-the-doctor-apple-e-diagnostic-card/&quot; rel=&quot;noreferrer&quot;&gt;reading about the Apple //e diagnostics card&lt;/a&gt;, I noticed on the screenshot below that it reports a CPU test and that the microprocessor is OK:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KG5tt.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KG5tt.jpg&quot; alt=&quot;APPLE //e DIAGNOSTICS SCREEN&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm curious did the PROCESSOR TEST actually do anything? One would think that if the computer got far enough to boot the diagnostics and display the screen, then the CPU &lt;em&gt;MUST&lt;/em&gt; be OK, right? Or is there something that it attempted to do to validate that the CPU was indeed OK?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2019-11-06T21:19:18.173" Title="Did the CPU test on the Apple //e Diagnostics utility do anything?" Tags="&lt;apple-ii&gt;&lt;cpu&gt;&lt;diagnostics&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12676" PostTypeId="2" ParentId="12675" CreationDate="2019-11-05T02:06:29.673" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So I'm curious did the PROCESSOR TEST actually do anything?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;AFAIR it's exactly the same as loaded from the diagnostics disk. It runs a bunch of subroutines, each testing several instructions. All NMOS instructions are tested, none of the CMOS additions (*1).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One would think that if the computer got far enough to boot the diagnostics and display the screen, then the CPU MUST be OK, right&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For one, there isn't many code until the card gets booted by the Autostart ROM - and not all instructions are used until then. I wouldn't wonder if it's less than 30%. Keep in mind, there are ~160 different opcodes - plus decimal mode for all ADC/SBC to be testet.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or is there something that it attempted to do to validate that the CPU was indeed OK?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As said, it calls up all instructions and verifies the results.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The original Apple II, II+ and early IIe had an NMOS 6502, while the later IIe and all IIc used a CMOS 65C02 which offered additional instructions. AFAIK the CPU tests have never been extended to cover the new instructions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-06T21:19:18.173" LastActivityDate="2019-11-06T21:19:18.173" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12677" PostTypeId="1" CreationDate="2019-11-05T10:29:36.990" Score="9" ViewCount="517" Body="&lt;p&gt;As seems to be typical with Apple IIc purchases these days, mine came&#xA;without the external power supply. I have ordered some 7-pin female&#xA;DIN plugs and other adapters that will let me plug a modern laptop&#xA;power supply (in my case, a standard ThinkPad 20 V 65 W PSU) into the&#xA;IIc power connector, but these will take a few weeks to arrive and I'd&#xA;like to use the IIc safely in the meantime, if possible, while not&#xA;doing anything that's likely to cause a short circuit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The male DIN jack, documented on &lt;a href=&quot;https://archive.org/details/Apple_IIc_Technical_Reference_Manual/page/n261&quot; rel=&quot;noreferrer&quot;&gt;p. 234 of the Apple IIc Technical&#xA;Reference Manual&lt;/a&gt; on which one is to deliver +9 V to +20 V&#xA;has enough room to fit one alligator clip, which could be connected&#xA;either to pins 2 and/or 3 (signal ground) or 5 and/or 6 (+V). (All pin&#xA;numbers given here on this connector use the numbering from the Apple&#xA;manual, not standard DIN pin numbering.) It's not clear if it's&#xA;touching one or both pins, but since the adjacent pins seem to be&#xA;shorted together, and it's definitely not touching the other pins on&#xA;either side, it shouldn't matter which one/both it's touching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mHjru.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mHjru.jpg&quot; alt=&quot;Apple IIc power input connector with alligator clip&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That gets us one of ground or +V. However, finding another accessible&#xA;location to which one could hook an alligator clip for its counterpart&#xA;is difficult in the cramped space when the disk drive and PSU are&#xA;installed. Looking at the bottom of page 2 of &lt;a href=&quot;https://archive.org/details/Schematic_Diagram_of_the_Apple_IIc&quot; rel=&quot;noreferrer&quot;&gt;the schematics&lt;/a&gt;&#xA;I see the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eIxyv.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eIxyv.png&quot; alt=&quot;Apple IIc power input schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here CCC and EEE are the ground and +V pins on the DIN connector, and&#xA;FFF goes off to pin 12 on the &quot;internal voltage converter&quot; (the PSU&#xA;providing regulated +5, +12, -12 and -5 V power) card edge connector.&#xA;The switch physically looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fC5Fl.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fC5Fl.jpg&quot; alt=&quot;Apple IIc power switch&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a continuity tester, I've confirmed that the bottom, middle and&#xA;top connections to the switch in the photo above are poles 1, 2 and 3&#xA;in the schematic. When the switch is in the off position, connecting&#xA;pole 2/FFF to pole 3, pin 12 on the voltage converter edge connector&#xA;is connected to +V on the DIN connector. When the switch is in the on&#xA;position, connecting pole 2/FFF to ground, pin 12 on the voltage&#xA;converter edge connector is connected to the ground pins on the DIN&#xA;connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the connection to switch pole 3 is easily accessible to attach&#xA;an alligator clip to without danger of shorting anything, my current&#xA;plan is to connect +15 V from a regulated (bench) power supply to that&#xA;and clip the 0 V side of same supply to pins 2/3 on the DIN power&#xA;connector, like so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yU3Xp.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yU3Xp.jpg&quot; alt=&quot;Proposed power connection&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will, however, bypass both 10 A fuse F1 and inductor L1. I&#xA;suspect that bypassing the fuse will make no difference since my bench&#xA;supply won't deliver more than 5 A. (It goes into constant-current&#xA;mode if asked to deliver more than that, which will cause the voltage&#xA;to drop dramatically, which in turn should cause the voltage converter&#xA;to shut down, according to the Apple manual). I have no real idea&#xA;about the inductor, which you can see in the photo above as the big&#xA;black cylinder next to the capacitor, but I suspect it's there merely&#xA;for noise suppression.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is what I'm proposing to do here likely to work ok? What are the risks&#xA;associated with it? Can anybody think of a better way to connect power&#xA;to this short of waiting for my 7-pin DIN connector to arrive and&#xA;soldering up a proper cable?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-11-07T09:48:07.450" Title="What's the best way to hook up an external power supply to the Apple IIc without a 7-pin female DIN plug?" Tags="&lt;apple-ii&gt;&lt;power&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12678" PostTypeId="1" AcceptedAnswerId="12695" CreationDate="2019-11-05T10:31:46.187" Score="7" ViewCount="680" Body="&lt;p&gt;By reading register $D012/$D011 or when pausing the execution of an emulation in VICE starting the monitor and entering &lt;code&gt;io d000&lt;/code&gt;, it is possible to get information about the current rasterline. For some time-crucial programs it would be also helpful to know the current position of the raster beam (usually it moves 8 pixels per clock tick). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it is not possible to derive this information from the VIC registers I think that a timer used as counter or information in the simulator would be able to provide this information. Is it possible to obtain the current raster beam position somehow by checking the timer/counter, via the interface of the VICE simulator, or by analyzing a snapshot image?&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2019-11-08T10:33:00.260" LastActivityDate="2019-11-08T10:33:00.260" Title="Get exact position of raster beam on C64/C128" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;commodore-128&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12679" PostTypeId="2" ParentId="12677" CreationDate="2019-11-05T15:21:22.833" Score="9" Body="&lt;p&gt;If you're really willing to do some &lt;em&gt;jiggery-pokery&lt;/em&gt;, find some small gauge solid copper wire (like the twisted pairs from a CAT5 cable - I like to cannibalize old multi-conductor telecom cables) and get yourself two longish bits of wire.  Strip the insulation back about 1 inch on one end of both wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now find a toothpick or something very close to the diameter of the pins on the DIN connector. You want a diameter that is just a little bit smaller than the DIN pins. Twist the 1&quot; copper around the enlarged toothpick like you are wire-wrapping a board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should have something similar to this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/g5K0u.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/g5K0u.jpg&quot; alt=&quot;twisted wire end&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can slide the improvised connector over one of the pins of the DIN.  If you are careful, and lucky, friction will hold the improvised connector on the pin giving you an 'extension' you can easily connect an alligator clip to on the other end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a quick example.  It's the wrong connector, but the principle is the same...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pxU7e.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pxU7e.jpg&quot; alt=&quot;a random example&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course &lt;em&gt;ALWAYS&lt;/em&gt; visually inspect your work and ring it out to make sure you are not shorting anything.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2019-11-05T15:21:22.833" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12680" PostTypeId="1" CreationDate="2019-11-05T16:15:05.177" Score="4" ViewCount="110" Body="&lt;p&gt;I'm reading (well, writing...) about the &lt;a href=&quot;https://en.wikipedia.org/wiki/FLOW_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;FLOW language&lt;/a&gt; and it mentions the &quot;MICRO 800 assembler&quot;. This was in the early 1970s, and I can't imagine what this might be. The context suggests it was on the Nova. Anyone familiar with this?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-11-05T16:15:05.177" Title="MICRO 800 assembler?" Tags="&lt;assembly&gt;&lt;data-general&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12681" PostTypeId="1" AcceptedAnswerId="12683" CreationDate="2019-11-05T17:13:44.333" Score="14" ViewCount="1979" Body="&lt;p&gt;What was the first operating system that supported preemptive multitasking?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By preemptive multitasking I mean that user processes were able to run in a time-sliced manner without special programming, not as loaded interrupt services, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've heard an opinion expressed that it was CTSS, but couldn't find any specific documentation to substantiate this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Closely related, I would also be interested in the first operating system that implemented cooperative multitasking, where one process would execute only after another process yielded control.&lt;/p&gt;&#xA;" OwnerUserId="7551" LastEditorUserId="7551" LastEditDate="2019-11-05T19:10:13.080" LastActivityDate="2019-11-06T01:51:01.033" Title="What was the first operating system that supported preemptive multitasking?" Tags="&lt;history&gt;&lt;multitasking&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12682" PostTypeId="1" CreationDate="2019-11-05T18:23:18.760" Score="17" ViewCount="2196" Body="&lt;p&gt;I have an audio file in WAV format, which supposedly comes from a cassette sound file. Moreover, it contains a BASIC program, but I don't know how to decode it. I have tried to convert the wav file to a tap file, but then I don't know how to convert it to a BASIC file or a text file and I have spent hours searching on the Internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If someone could help me I would really appreciate it.&lt;/p&gt;&#xA;" OwnerUserId="15512" LastEditorUserId="15512" LastEditDate="2019-11-08T11:53:17.477" LastActivityDate="2019-11-13T18:23:44.280" Title="How to decode an audio file which contains an MSX BASIC program?" Tags="&lt;basic&gt;&lt;cassette-tape&gt;&lt;audio&gt;&lt;msx&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="2" ClosedDate="2019-11-09T22:40:38.310" ContentLicense="CC BY-SA 4.0" />
  <row Id="12683" PostTypeId="2" ParentId="12681" CreationDate="2019-11-05T18:33:16.800" Score="9" Body="&lt;p&gt;In support of your CTSS suggestion, see &lt;a href=&quot;http://bitsavers.org/pdf/mit/ctss/MAC-TR-16_CTSStecNote_Mar65.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this document&lt;/a&gt;, in particular page 11, which describes clock-trap handling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A clock interrupt can cause a program swap, thus multiprogramming with preemption.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This does not itself prove that CTSS was first, but it is strong evidence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For cooperative multiprogramming, the British were likely near the forefront. The &lt;a href=&quot;http://www.ourcomputerheritage.org/ccs-l3x4.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;'master program'&lt;/a&gt; for the &lt;a href=&quot;http://www.ourcomputerheritage.org/ccs-l3x2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;LEO 3&lt;/a&gt; (1960) would suspend a program that had issued I/O, and run the next available. I do not know whether the first program would be resumed when the I/O completed.  Later British systems, e.g. the KDF9 under the timesharing Director, would resume the highest priority program on end of I/O transfer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Electrologica X-1 was probably the first to &lt;a href=&quot;https://academic.oup.com/comjnl/article/2/1/39/398496&quot; rel=&quot;nofollow noreferrer&quot;&gt;demonstrate cooperative multiprogramming&lt;/a&gt; (switching on I/O requests) but since it was not part of an OS, I am not counting it for the purposes of this answer.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-11-06T01:51:01.033" LastActivityDate="2019-11-06T01:51:01.033" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12684" PostTypeId="1" CreationDate="2019-11-05T19:40:30.207" Score="10" ViewCount="906" Body="&lt;p&gt;Archive.org has plenty of Apple II disk images, such as &lt;a href=&quot;https://archive.org/download/DOS_3.3&quot; rel=&quot;noreferrer&quot;&gt;this DOS 3.3 image&lt;/a&gt; which is a &lt;code&gt;.dsk&lt;/code&gt; file. I also see &lt;code&gt;.nib&lt;/code&gt; and &lt;code&gt;.d13&lt;/code&gt; files, e.g. in &lt;a href=&quot;https://mirrors.apple2.org.za/ftp.apple.asimov.net/images/programming/lisp/&quot; rel=&quot;noreferrer&quot;&gt;this ASIMOV LISP collection&lt;/a&gt;. There seem to be further formats around as well; the Ciderpress documentation seems to list &lt;a href=&quot;https://a2ciderpress.com/features.htm#disks&quot; rel=&quot;noreferrer&quot;&gt;a half dozen or more&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The HXC floppy emulator lists &lt;code&gt;.nyb&lt;/code&gt; as the only supported Apple II format in the &lt;a href=&quot;https://hxc2001.com/download/floppy_drive_emulator/HxC_Floppy_Emulator_Software_User_Manual_ENG.pdf&quot; rel=&quot;noreferrer&quot;&gt;supported disk images list&lt;/a&gt; in their documentation. &lt;a href=&quot;https://www.bigmessowires.com/floppy-emu/&quot; rel=&quot;noreferrer&quot;&gt;Floppy Emu&lt;/a&gt; mentions &lt;code&gt;.dsk&lt;/code&gt;, &lt;code&gt;.do&lt;/code&gt;, &lt;code&gt;.po&lt;/code&gt;, &lt;code&gt;.2mg&lt;/code&gt;, &lt;code&gt;.nib&lt;/code&gt; and &lt;code&gt;.woz&lt;/code&gt; formats. &lt;a href=&quot;http://pcedric3.free.fr/SmartportVHD/index.html&quot; rel=&quot;noreferrer&quot;&gt;Smartport&lt;/a&gt; doesn't say what they use. &lt;a href=&quot;http://tulip-house.ddo.jp/digital/SDISK2V1/english.html&quot; rel=&quot;noreferrer&quot;&gt;SDISK II&lt;/a&gt; appears to use a &lt;code&gt;.nic&lt;/code&gt; format, with a conversion tool for &lt;code&gt;.dsk&lt;/code&gt; files. I'm not clear on what &lt;a href=&quot;http://thesvd.com/&quot; rel=&quot;noreferrer&quot;&gt;SVD&lt;/a&gt; uses.&lt;/p&gt;&#xA;&lt;p&gt;What are the most commonly used formats? Which ones are compatible with multi-platform hardware disk drive emulators? (I'd prefer to buy one emulator that I can use not just with my Apple IIc but with other systems using Shugart SA400 or similar interfaces as well.) Which ones have image manipulation tools for multiple platforms, particularly Linux?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-05-01T07:23:56.177" Title="What are the most common Apple II disk image formats and what hardware disk drive emulators can use them?" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;&lt;floppy-drive&gt;&lt;disk-image&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12685" PostTypeId="2" ParentId="12684" CreationDate="2019-11-05T20:49:42.747" Score="8" Body="&lt;p&gt;I can offer a partial answer only:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;.dsk&lt;/code&gt;, &lt;code&gt;.do&lt;/code&gt; and &lt;code&gt;.po&lt;/code&gt; are all the same file format: sector contents only, implicitly ordered. The difference is that DOS 3.3 and Pro-DOS use different orderings, so it's fairly common to use &lt;code&gt;.do&lt;/code&gt; or &lt;code&gt;.po&lt;/code&gt; as a file extension in order to be explicit about which of those filing systems' orderings the disk image should be interpreted in. What a particular tool assumes for a plain &lt;code&gt;.dsk&lt;/code&gt; isn't really standardised.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;.dsk&lt;/code&gt; is far and away the most common format in terms of images distributed, and I would be surprised if there were a hardware drive emulator that didn't support them, though a conversion tool might well be necessary since GCR encoding must be applied to the data to convert it back into its on-disk form and drive emulators often lack either the processing or the temporary storage to do so in real-time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;.nib&lt;/code&gt; is an awkward mess in terms of describing a disk. It is a list of the bytes that were read back directly from the Disk II hardware when spinning a disk. What that means is that timing is implicit. Real disks use slip bits for synchronisation — specially crafted on-disk bytes with appropriate holes that allow the disk controller to determine the proper windowing of bits from then on — and you are left with no clue as to where those are. So trying to produce something that would read the same as a NIB when handed to real hardware involves searching for sequences that would work with slip bits inserted*. Which usually means applying some rules about the usual layout of a Disk II disk. Which completely defeats the intended purpose of the thing, of being able to image arbitrary disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;.nib&lt;/code&gt;s are rarely supported in drive emulators, if at all, because of the inherent difficulty in doing that reliably. Really the only context they are reliable in is emulators that aren't actually emulating the physical hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://applesaucefdc.com/woz/reference2/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;.woz&lt;/code&gt;s&lt;/a&gt; are relatively new, but are very well-formed. They're just a record of the bitstream per track, with advocated behaviour on how properly to generate weak bits (i.e. produce noise if you go too far between signal). The only simplification it applies is that bit timing is assumed consistent across the track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a relatively new format, though it &lt;a href=&quot;https://www.bigmessowires.com/2019/01/24/floppy-emu-adds-woz-support/&quot; rel=&quot;noreferrer&quot;&gt;is definitely supported by at least the Big Mess o' Wires FloppyEmu&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(*) the policy I apply in my emulator is to seek an identifiable epilogue sequence, and treat as much of the following as a sync region as looks reasonable. I have no doubt this breaks at least one piece of protected software.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="7208" LastEditDate="2019-11-06T06:40:36.570" LastActivityDate="2019-11-06T06:40:36.570" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12686" PostTypeId="2" ParentId="12678" CreationDate="2019-11-05T20:51:26.537" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://www.codebase64.org/doku.php?id=base:using_a_timer_as_an_inverted_raster_x-pos_register_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.codebase64.org/doku.php?id=base:using_a_timer_as_an_inverted_raster_x-pos_register_method&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The link describes, basically: first, how to synchronize timer to the raster interrupt; second, how to use that synchronized timer that counts from 0 to 6, to get the CPU in &quot;hard&quot; (i.e. cycle-exact) sync with the beam position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This link and the described method is relevant, though partially, to this particular question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar to the described method, you can start timer counting up to 63 cycles and synchronize it with the raster IRQ, thus the timer from now on contains a value that is proportional to the exact horizontal beam position (in the multiples of 8 pixels).&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-11-05T20:51:26.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12687" PostTypeId="1" AcceptedAnswerId="12690" CreationDate="2019-11-05T20:52:26.220" Score="15" ViewCount="466" Body="&lt;p&gt;I know that the Sega Master system had two primary game formats: cartridges just like the NES and other game consoles of the time and the &quot;Sega Card&quot; which was a 2mm thick plastic card with contact pads on the back making it look sort of like a credit card sized SD card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These were supposedly cheaper for publishers to distribute games on (though limited to games small enough that they wouldn't require banking/mapper chips) but I'm wondering why that was the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From all that I can tell it &lt;em&gt;seems&lt;/em&gt; like the cards were just a single 4KB to 32KB rom chip epoxied into a plastic shell. That would remove the extra cost of a circuit board and larger plastic body but compared to the cost of the custom ROM chip it doesn't seem like it would make much of a difference if the game was already small enough to not need a mapper or other special chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there other differences that made the price difference big enough to justify having a second game slot and special format just for small games?&lt;/p&gt;&#xA;" OwnerUserId="15514" LastActivityDate="2019-11-06T03:50:34.777" Title="What differentiated the Master System's Sega Card format from cartridges?" Tags="&lt;game-cartridge&gt;&lt;sega&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12688" PostTypeId="2" ParentId="12682" CreationDate="2019-11-05T21:25:53.643" Score="8" Body="&lt;p&gt;The good news is the next few steps are easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most (all?) of the MSX emulators include a &quot;virtual tape&quot; that can open a WAV file. &lt;a href=&quot;https://openmsx.org/&quot; rel=&quot;noreferrer&quot;&gt;openMSX&lt;/a&gt; does for sure. It's right in the instructions for the emulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know enough about MSX to know if it stored programs as text or in tokenized format, but in either case, once it is loaded you can use the &quot;virtual printer&quot; to &lt;code&gt;LIST&lt;/code&gt; the program to a text file and you're off to the races.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-11-05T21:25:53.643" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12689" PostTypeId="2" ParentId="12645" CreationDate="2019-11-05T21:55:12.003" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I have a strange desire to make an imaginary competitor to the Atari&#xA;  800&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So there are a couple of places one could build a better 800 and still be entirely within the 1979 (well actually, 1978) tech tree. There's also some things that might not have been possible. So here goes...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Atari was odd (unique?) in that it did not interleave memory access between the CPU and ANTIC. Instead, it ran both close to the maximum performance of the memory and allowed the ANTIC to pause the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast, systems like the C64 used down-times in the 6502's clock to grab memory. Now since the memory was generally 2 MHz (although other posts here suggest this was not absolutely the case) that means if you go the interleave route, generally your CPU is going to be 1 MHz, or there won't be enough time left over for the display to grab data while the CPU is off doing its own thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The upside to the Atari design is that while the ANTIC had to pause the CPU to grab data, in common display modes, like the 40-column GRAPHICS 0, the CPU only needs to be paused about 35% of the time (IIRC). So overall performance was like a machine running at perhaps 1.25 MHz, and one could recover all 1.8 MHz by turning off the display. It seems like this was a better solution than the interleave option, which meant you were stuck at 1 MHz even with the display off. This of course assumes that the price of the 6502B model wasn't much higher than the A model, otherwise your price goal might get hit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So two things to consider: was the 6502C model (no, not Sally, the &lt;em&gt;real&lt;/em&gt; C) actually available in quantity and at a similar price point? And was memory also available at 4 MHz with the same constraints? It was for the BBC in 1981, but perhaps not 1978/9? If both are &quot;yes&quot; then the most obvious change would be to simply double the speed of the CPU and let the ANTIC pause it longer (in relative terms, same absolute). Since the pausing doesn't happen during VBI and margins (vertical at least) this would result in a significant performance boost (well, duh) with basically no other changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond that, the most obvious low-hanging-fruit of that design was the sprites in the GTIA. These were, simply, terrible. Although moving them horizontally was trivial using a timer triggered on the HBI, vertical positioning required moving the sprite map in memory! This not not something the 6502 is known for, and doing so in BASIC... &lt;em&gt;shudders&lt;/em&gt;. It also meant every sprite took up 1k of RAM!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neither is good enough, this is, IMHO, the platform's most significant flaw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a programming standpoint, eight sprites of 8-bits width with separate vertical positioning registers would be infinitely preferable. One could expand this, as did the C64, to provide more bits of width or multi-color options. These, however, require more time during the HBI to read, and thus the CPU would spend more time paused. This is a small price to pay. One could further offset that cost by expanding GRACTL to use the upper four bits to turn on or off sets of sprites - say two sprites per bit - and thus allow the programmer to easily tune performance with minor bit-fiddling. You might need a few more color registers, depending on how many colors you allow per sprite and in total, but even that seems trivial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rest of the possibilities seem rather more questionable. POKEY's sound was not stellar, but it worked and did so with a very low gate count, and having heard enough C64 sound in my life I'm not convinced the SID was an order of magnitude better. Sadly, stereo TV sound was not yet a thing (even in theory I believe) so that's not something you could have added at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the hardware side, obviously a RS232 and printer port were absolutely required on the 800, and SIO could easily be a 8P8C (with MOTOR on CLOCK OUT), but overall the platform was pretty solid, especially for the era. Besting it is not trivial, the C64 did, barely, but only after another three years and two Moore's.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2019-11-06T12:28:04.863" LastActivityDate="2019-11-06T12:28:04.863" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12690" PostTypeId="2" ParentId="12687" CreationDate="2019-11-06T03:50:34.777" Score="11" Body="&lt;p&gt;The price difference was indeed entirely in the packaging. The important thing to remember about mask ROMs is that, though the setup costs and lead times were high, they had the lowest marginal cost of any form of memory. The reasons behind this are fairly clear if you look through this &lt;a href=&quot;http://smithsonianchips.si.edu/ice/cd/MEM96/SEC09.pdf&quot; rel=&quot;noreferrer&quot;&gt;ROM, EPROM, &amp;amp; EEPROM Technology&lt;/a&gt; document from Integrated Circuit Engineering: mask ROMs not only used the minimum number of transistors per cell (one) but also had simpler processes, higher densitities, and higher yields.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, historical pricing information for mask ROM seems very hard to come by. This has been &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2103/7208&quot;&gt;asked here before&lt;/a&gt;, where one answer gives the price of 2 KB (16 Kbit) mask ROMs as $15/unit in 1976.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time a 2708 1 KB PROM &lt;a href=&quot;https://archive.org/details/byte-magazine-1977-01/page/n132&quot; rel=&quot;noreferrer&quot;&gt;retailed for $68&lt;/a&gt;. By 1983 2708s and 2 KB 2716s &lt;a href=&quot;https://archive.org/details/byte-magazine-1983-01/page/n537&quot; rel=&quot;noreferrer&quot;&gt;were both retailing for $3.95&lt;/a&gt;. A year and a half later in mid-1984, 8 KB 2764s &lt;a href=&quot;https://archive.org/details/byte-magazine-1984-07/page/n437&quot; rel=&quot;noreferrer&quot;&gt;could be had for $5.95&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While PROMs and retail pricing are not directly comparable to mask ROMs and manufacturer pricing, this gives us a sense that there was probably something like a hundred-fold decrease in ROM pricing, so we can guess that 16 KB mask ROM would certainly cost well under a dollar, perhaps even under fifty cents, to produce.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that PC boards at the time were not as cheap to manufacture as they are now, and the costs of dealing with the assembly of a PC board, cartridge halves and their associated fasteners (which is mainly what was removed in the Sega Card), it doesn't surprise me at all that there would be considerable manufacturing savings with the Sega Card and similar formats.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-11-06T03:50:34.777" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12691" PostTypeId="2" ParentId="12684" CreationDate="2019-11-06T08:45:37.400" Score="10" Body="&lt;p&gt;Another partial answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;.d13&lt;/code&gt; is a format for storing the 13-sector floppy disks that were used on the Apple II before mid-1980, by Apple OS's before before DOS 3.3; i.e. Apple DOS 3.1, 3.2 and 3.2.1, the earliest versions of Microsoft's Softcard-based Apple CP/M 2.2, and maybe by the first version of Apple PASCAL (not sure about that though); those floppies use a simpler GCR encoding scheme (called 5-and-3) and thus they can fit only 13 256-byte sectors per track, as opposed to the 16 sectors of the much more common post-1980 format with more modern (6-and-2) GCR encoding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I defined this format many years ago when creating &lt;code&gt;ADT13&lt;/code&gt;, a fairly straightforward hack of the Apple-DOS-based &lt;code&gt;ADT&lt;/code&gt; (Apple disk transfer), which itself has been largely superseeded by the Apple-ProDOS-based &lt;code&gt;ADTPro&lt;/code&gt; today. &lt;code&gt;.d13&lt;/code&gt; is simply a variant of the most common format &lt;code&gt;.dsk&lt;/code&gt;, just storing 13 instead of 16 sectors per track. The difference between &lt;em&gt;DOS-Ordering&lt;/em&gt; and &lt;em&gt;ProDOS-ordering&lt;/em&gt; does not apply to the &lt;code&gt;.d13&lt;/code&gt; format since ProDOS never supported 13-sector disks. Thus it consists simply of a concatenation of all 35 (tracks)*13 (sectors)*256 (bytes per sector) bytes on such a disk without any further headers, thus the file size will be 116.480 bytes, or 113,75 KiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus &lt;code&gt;.d13&lt;/code&gt; is a sort-of-common format for the very earliest Apple II disk-based software, but otherwise of little use. The other way to store such old disk images is the &lt;code&gt;.nib&lt;/code&gt; format which stores the raw GCR data that real hardware will see coming into the floppy disk read register (but doesn't store the timing with which it will arrive).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Regarding &lt;code&gt;.dsk&lt;/code&gt;, &lt;code&gt;.do&lt;/code&gt; and &lt;code&gt;.po&lt;/code&gt; there's a few things to say:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;You can store DOS-based disks in ProDOS order and vice versa. So there is really no NEED to have two different orderings.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Most &lt;code&gt;.dsk&lt;/code&gt; images encountered in the wild use DOS ordering, even if the software stored on them is ProDOS-based.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Contrary to the comment by Tommy on another answer, neither DOS ordering nor ProDOS ordering corresponds to the physical ordering (which sector directly follows which other sector on the track) or the physical numbering (which number is stored in the sector's header) of sectors on a 16-sector disk. On a 13-sector disk, DOS order (the only one there is for 13-sector disks) corresponds to the physical numbering, but not to the physical ordering of sectors. The reason for this state of affairs is sector skew, which allows the computer enough time to encode or decode a sector before the next needed sector arrives under the drive's read/write head.&lt;/li&gt;&#xA;&lt;li&gt;DOS ordering vs. ProDOS ordering is only relevant for images of 16-sector 5¼&quot; floppies, as that is the only format usable by &lt;em&gt;both&lt;/em&gt; DOS &lt;em&gt;and&lt;/em&gt; ProDOS. High-level images of 13-sector 5¼&quot; floppies always use DOS ordering; high-level images of 3½&quot; floppies and hard disks always use ProDOS ordering.&lt;/li&gt;&#xA;&lt;li&gt;The more or less &quot;raw&quot; low-level disk image formats, such as &lt;code&gt;.nib&lt;/code&gt; and &lt;code&gt;.woz&lt;/code&gt; use physical ordering, corresponsing to neither DOS ordering nor ProDOS ordering.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Regarding &lt;code&gt;.2mg&lt;/code&gt; - this was supposed to be a common format for all Apple-II high-level disk images. In practice, it is most commonly used for 3½&quot; floppy images as those are not covered by &lt;code&gt;.dsk&lt;/code&gt;, &lt;code&gt;.do&lt;/code&gt;, &lt;code&gt;.po&lt;/code&gt; or &lt;code&gt;.nib&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15517" LastEditorUserId="15517" LastEditDate="2019-11-06T09:12:08.223" LastActivityDate="2019-11-06T09:12:08.223" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12692" PostTypeId="2" ParentId="12682" CreationDate="2019-11-06T09:48:05.483" Score="18" Body="&lt;p&gt;You need to use OpenMSX, and get the system ROMs for the machine in question. Then run OpenMSX, set the machine to the FS-A1WSX. There's a little menu button at the top left of the OpenMSX window. In there, set your tape to the WAV file. Then:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Tx782.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Tx782.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 M$ = &quot;E4E8O3G16G32R32G2G4R4O4C8D8E8F8G2G8F8E8F4E8D8E4D8C4&quot;&#xA;20 PLAY M$+M$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The listing above is the content of the WAV you linked to, so to be honest you'd be quicker typing it back in.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastEditorUserId="439" LastEditDate="2019-11-13T18:23:44.280" LastActivityDate="2019-11-13T18:23:44.280" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12693" PostTypeId="1" AcceptedAnswerId="12694" CreationDate="2019-11-06T22:45:21.963" Score="17" ViewCount="1572" Body="&lt;p&gt;The 1979 version of the 8086 family user's manual is available at different places in the internet, see &lt;a href=&quot;https://edge.edx.org/c4x/BITSPilani/EEE231/asset/8086_family_Users_Manual_1_.pdf&quot; rel=&quot;noreferrer&quot;&gt;1&lt;/a&gt;,&lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/components/intel/8086/9800722-03_The_8086_Family_Users_Manual_Oct79.pdf&quot; rel=&quot;noreferrer&quot;&gt;2&lt;/a&gt;,&lt;a href=&quot;https://www.ceibo.com/eng/datasheets/Intel_8086_Family_Users_Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;3&lt;/a&gt;. It seems there is no newer version available. This manual documents the single-stepping feature in figure 2-29 on page 2-23 and figure 2-31 on page 2-27. Are these diagrams accurate? The emphasis of this question is in the corner cases like concurrent request of single stepping, external interrupts and internal interrupts.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="10479" LastEditDate="2019-11-08T07:53:01.903" LastActivityDate="2019-11-08T07:53:01.903" Title="How does single-stepping on the 8086 interact with internal and external interrupts?" Tags="&lt;8086&gt;&lt;interrupt&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12694" PostTypeId="2" ParentId="12693" CreationDate="2019-11-06T22:45:21.963" Score="21" Body="&lt;p&gt;It seems the diagrams are &lt;em&gt;not&lt;/em&gt; accurate. I wrote a test program that traces &lt;code&gt;INT1&lt;/code&gt; invocations (and delays execution during &lt;code&gt;INT1&lt;/code&gt; to increase the chance of getting hit by timer interrupts) while executing the following machine language fragment:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pushf&#xA;mov  ax, 300h      ; 100h = TF; 200h = IF&#xA;push ax&#xA;popf               ; This instruction sets the trace flag&#xA;mov  ax, 1234h&#xA;mov  bl, 1    &#xA;inc  ax       &#xA;mov  dx, ds   &#xA;mov  es, ax        ; On 8086/8088: No interrupts before NOP is executed&#xA;nop           &#xA;mov  dx, ss   &#xA;mov  ss, dx        ; On any x86 processor: No interrupts before NOP is executed&#xA;nop           &#xA;int  0A1h     &#xA;dec  cx       &#xA;popf               ; This instruction clears the trace flag&#xA;dec  ax       &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The results of executing this fragments on an 8088-1 clocked at 10 MHz are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;No&lt;/em&gt; &lt;code&gt;INT1&lt;/code&gt; is generated after executing &lt;code&gt;popf&lt;/code&gt;. This is surprising, because the flow diagram 2-29 contains the step &lt;em&gt;COMPLETE CURRENT INSTRUCTION&lt;/em&gt; before the branch on &lt;em&gt;TF&lt;/em&gt;. After completing &lt;code&gt;popf&lt;/code&gt;, the &lt;code&gt;TF&lt;/code&gt; is set, and the action of entering the single-step handler should be taken.&lt;/li&gt;&#xA;&lt;li&gt;Also &lt;em&gt;no&lt;/em&gt; &lt;code&gt;INT1&lt;/code&gt; is generated after the subsequent &lt;code&gt;mov ax, 1234h&lt;/code&gt; instruction. So &lt;em&gt;even if&lt;/em&gt; we assume &lt;code&gt;TF&lt;/code&gt; in diagram 2-29 to mean the state of &lt;code&gt;TF&lt;/code&gt; at the beginning of execution an instruction, we observe a further delay of one instruction. This is comparable to the effect that &lt;code&gt;STI&lt;/code&gt; also enable interrupts to be recognized only after the subsequent instruction (the manual explicitly says so on page 2-48).&lt;/li&gt;&#xA;&lt;li&gt;If an external interrupt (e.g. a timer interrupt) is recognized, the 8088 triggers a single-step interrupt after pushing the state to the stack and clearing &lt;code&gt;IF&lt;/code&gt; and &lt;code&gt;TF&lt;/code&gt;, just as the datasheet shows in diagram 2-29 and explains on page 2-28: &quot;If the processor is single-stepping, it processes an interrupt (either internal or external) as follows. Control is passed normally (flags, CS and IP are pushed) to the procedure designated to handle the type of interrupt that has occurred. However, before the first instruction of that procedure is executed, the single-step interrupt is &quot;recognized&quot; and control is passed normally (flags, CS and IP are pushed) to the type 1 interrupt procedure&quot;.&lt;/li&gt;&#xA;&lt;li&gt;During execution of the interrupt handlers, no single-stepping occurrs, because the processor clears &lt;code&gt;TF&lt;/code&gt; on interrupt entry.&lt;/li&gt;&#xA;&lt;li&gt;When an external interrupt returns with &lt;code&gt;IRET&lt;/code&gt;, another &lt;code&gt;INT1&lt;/code&gt; is triggered before the next instruction of the interrupted program is executed. This seems to contradict Figure 2-31. The flow diagram shows the recognition of the single step condition before the first IRQ handler instruction is executed, but on return of the IRQ handler it goes straight into &lt;em&gt;EXECUTE NEXT INSTRUCTION&lt;/em&gt; without recognizing the single step interrupt.&lt;/li&gt;&#xA;&lt;li&gt;On the other hand, if an internal interrupt is caused by executing an instruction (like the &lt;code&gt;int 0A1h&lt;/code&gt; instruction; the vector points directly to &lt;code&gt;IRET&lt;/code&gt;), there is in fact &lt;em&gt;no&lt;/em&gt; &lt;code&gt;INT1&lt;/code&gt; after the &lt;code&gt;INT A1&lt;/code&gt; returns before &lt;code&gt;dec cx&lt;/code&gt; gets executed. The datasheet is accurate on this topic.&lt;/li&gt;&#xA;&lt;li&gt;After clearing the &lt;code&gt;TF&lt;/code&gt; by issuing &lt;code&gt;POPF&lt;/code&gt; at the end of the fragment, a last &lt;code&gt;INT1&lt;/code&gt; is triggered, with the return address pointing to &lt;code&gt;DEC AX&lt;/code&gt;. Again, this is an effect of delayed recognition of changes to &lt;code&gt;TF&lt;/code&gt; I could not find in the data sheet.&lt;/li&gt;&#xA;&lt;li&gt;If an external interrupt is requested during execution of the single-step handler, the external interrupt is entered after returning from the single-step handler &lt;em&gt;before&lt;/em&gt; executing the next instruction.&lt;/li&gt;&#xA;&lt;li&gt;Even though the instruction following &lt;code&gt;int 0A1h&lt;/code&gt; (i.e. &lt;code&gt;dec cx&lt;/code&gt;) is not seen as return address of a single-step handler invocation, an external interrupt can be recognized at that point, and one might see a single-step invocation on the first instruction of the timer interrupt, with the return address of the timer interrupt pointing to the instruction &lt;code&gt;dec cx&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To expand on the second-to-last item: I observed the following pattern:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;mov bl, 1&lt;/code&gt; is executed&lt;/li&gt;&#xA;&lt;li&gt;the single-step handler is entered, with the return address pointing to the subsequent instruction &lt;code&gt;inc ax&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;the single-step handler is entered again, with the return address pointing to the first instruction of the timer interrupt handler. The return address of the timer interrupt handler is &lt;em&gt;still&lt;/em&gt; the instruction &lt;code&gt;inc ax&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;(the timer interrupt handler is executed without further single-step invocations)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;inc ax&lt;/code&gt; is executed&lt;/li&gt;&#xA;&lt;li&gt;the single-step handler is entered, with the return address pointing to the instruction &lt;code&gt;mov dx, ds&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This behaviour means that you can &lt;em&gt;not&lt;/em&gt; rely on the return instruction of the single-step handler being executed before the single-step handler might be entered again. This detail tripped me in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12580/80286-real-mode-emulator-for-8086&quot;&gt;my 286 emulator attempt&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This behaviour also means that if the combined process of the single-step handler and the timer interrupt handler is slow enough that it takes longer than a time tick, the processor might be spinning in timer interrupt executions (with a single-step invocation on the first instruction each) without &lt;em&gt;any&lt;/em&gt; instructions of the interrupted code getting executed inbetween. I verified this by adding a 50 millisecond delay into the single-step code with standard PC/DOS timer period of 55ms, and observed a burst of 6 single-step handler invocations, all of them pointing to the entry point of the timer interrupt, without any change of the timer interrupt return adderss.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2019-11-06T22:45:21.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12695" PostTypeId="2" ParentId="12678" CreationDate="2019-11-06T23:04:39.073" Score="9" Body="&lt;p&gt;On a C64 PAL model, the VIC chip processes through 312 lines where each lines takes 63 clock cycles to display (including some time for horizontal and vertical blanking for returning the raster beam). So, if a timer counting every clock cycle is once synchronized to the beginning of rasterline 0, then the timer value &lt;code&gt;t&lt;/code&gt; tells us the number of the current line with &lt;code&gt;INT(t/63)&lt;/code&gt; and &lt;code&gt;(t MOD 63)*8&lt;/code&gt; yields the X coordinate. Alternatively, the current line can be read from VIC register at $D012 and $D011 (9th bit). Note that the raster beam will be long gone from this position when the CPU is done with the calculation, but it might be helpful to record the timer value at a given point in a program and calculate where the rasterline had been in an offline debug session. The CIA 6526 latch value for a PAL-synchronized timer is &lt;code&gt;19656-1&lt;/code&gt; or &lt;code&gt;$4CC7&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In the VICE emulator, the problem is much easier solved because the monitor allows to stop execution and provides access to a CPU cycle counter which starts at value &lt;code&gt;0&lt;/code&gt; when VICE is started or a reset takes place. This event exactly coincides with the raster beam starting at the beginning of line 0.&#xA;The cycle counter can be printed with the command &lt;code&gt;stopwatch&lt;/code&gt; in the monitor. Thus, with &lt;code&gt;c&lt;/code&gt; being the cycle counter value, the current X position of the beam can be estimated with &lt;code&gt;(c MOD 63)*8&lt;/code&gt; and the current raster line with &lt;code&gt;int((c MOD 19656) / 63)&lt;/code&gt;. The line value can also be obtained by checking the VIC registers with &lt;code&gt;io d000&lt;/code&gt; in the monitor.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TZLAc.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TZLAc.png&quot; alt=&quot;Timing of rasterbeam&quot; /&gt;&lt;/a&gt;&#xA;Image explaining timing of rasterbeam (Figure by Dustlayer based on Michael Steil's Ultimate Commodore 64 Talk) Note that the coordinate system for calculation of line and X position has its origin in the border.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-11-06T23:10:29.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12696" PostTypeId="1" CreationDate="2019-11-07T00:00:49.230" Score="14" ViewCount="679" Body="&lt;p&gt;In his autobiography, Steve Wozniak recounts[1] his difficulty getting interrupts working on the 6502 microprocessor:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The next step was to debug the 256-byte monitor program on  the PROMs. I spent a couple of hours trying to get the interrupt  version of it working, but I kept failing. I couldn’t write a new program into the PROMs. To do that, I’d have to go to that other building again, just to burn the program into the chip. I studied the chip’s data sheets to see what I did wrong, but to this day I never found it. As any engineer out there reading this knows,  interrupts are like that. They’re great when they work, but hard  to get to work.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Finally I gave up and just popped in the other two PROMs, the  ones with the “polling” version of the monitor program. I typed a few keys on the keyboard and I was shocked! The letters were &#xA;  displayed on the screen!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Can anyone shed some light on the root cause of the problem? Were the 6502's data sheets wrong?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;[1] Wozniak, Steve. &lt;em&gt;iWoz&lt;/em&gt;. W. W. Norton, 2006.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="10260" LastEditDate="2021-03-17T02:52:40.177" LastActivityDate="2021-03-17T02:52:40.177" Title="Why didn't Wozniak's interrupts work on the Apple I monitor program?" Tags="&lt;programming&gt;&lt;6502&gt;&lt;apple&gt;&lt;interrupt&gt;&lt;apple-1&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12697" PostTypeId="1" CreationDate="2019-11-07T02:13:51.243" Score="26" ViewCount="5043" Body="&lt;p&gt;The NPR.org news article and podcast &lt;a href=&quot;https://www.npr.org/2019/11/06/775467055/how-the-world-has-changed-science-during-the-40-years-of-morning-edition&quot; rel=&quot;noreferrer&quot;&gt;How The World Has Changed! Science During The 40 Years Of 'Morning Edition'&lt;/a&gt; includes the photo below with the caption&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Before the introduction of the personal computer, mainframe computers were the norm. &lt;strong&gt;The IBM System/370 mainframe computer, introduced in 1970, was one of the first computers to include &quot;virtual memory&quot; technology.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It says the /370 was &quot;one of the first&quot;, and &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7739/7118&quot;&gt;this answer&lt;/a&gt; to &lt;em&gt;Did Cray computers use virtual memory?&lt;/em&gt; also mentions the /370.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; But was there a clear &quot;first computer&quot; to use virtual memory, or was it an incremental development with no clear first instance?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be helpful to differentiate the first commercial product from the first developmental demonstration.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ooSyV.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ooSyV.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://www.npr.org/2019/11/06/775467055/how-the-world-has-changed-science-during-the-40-years-of-morning-edition&quot; rel=&quot;noreferrer&quot;&gt;NPR&lt;/a&gt;, Credit: Getty Images&lt;/p&gt;&#xA;" OwnerUserId="7118" LastActivityDate="2019-11-08T19:31:17.657" Title="Was there a clearly identifiable &quot;first computer&quot; to use or demonstrate the use of virtual memory?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;virtual-memory&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12698" PostTypeId="2" ParentId="12697" CreationDate="2019-11-07T03:03:35.010" Score="12" Body="&lt;p&gt;IBM's original virtual memory machine was the System/360 Model 67, released in 1965, which was a variant of the Model 65 modified to add the address translation logic necessary to add virtual memory support. So virtual memory support at least predates the System/370 by that much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/360/funcChar/GA27-2719-2_360-67_funcChar.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.bitsavers.org/pdf/ibm/360/funcChar/GA27-2719-2_360-67_funcChar.pdf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://howlingpixel.com/i-en/IBM_System/360_Model_67&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://howlingpixel.com/i-en/IBM_System/360_Model_67&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360_Model_67&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/IBM_System/360_Model_67&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4522" LastEditorUserId="428" LastEditDate="2019-11-08T10:17:35.197" LastActivityDate="2019-11-08T10:17:35.197" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12699" PostTypeId="2" ParentId="12697" CreationDate="2019-11-07T05:15:56.493" Score="27" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Virtual_memory#History&quot; rel=&quot;noreferrer&quot;&gt;History section of the Wikipedia Virtual Memory page&lt;/a&gt; seems to have the details of this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The concept of virtual memory was first developed by German physicist Fritz-Rudolf Güntsch at the Technische Universität Berlin in 1956 in his doctoral thesis, Logical Design of a Digital Computer with Multiple Asynchronous Rotating Drums and Automatic High Speed Memory Operation; it described a machine with 6 100-word blocks of primary core memory and an address space of 1,000 100-word blocks, with hardware automatically moving blocks between primary memory and secondary drum memory. Paging was first implemented at the University of Manchester as a way to extend the Atlas Computer's working memory by combining its 16,384 words of primary core memory with an additional 98,304 words of secondary drum memory.[8] The first Atlas was commissioned in 1962 but working prototypes of paging had been developed by 1959.5 In 1961, the Burroughs Corporation independently released the first commercial computer with virtual memory, the B5000, with segmentation rather than paging.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, all the good sources appear to be paywalled. Elke Jessen's &quot;Origin of the Virtual Memory Concept&quot; from &lt;em&gt;IEEE Annals of the History of Computing&lt;/em&gt; (2004, 26 (4), pp. 71–72) is likely to be accurate, if you can get hold of a copy.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-11-07T05:15:56.493" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12700" PostTypeId="2" ParentId="12677" CreationDate="2019-11-07T09:48:07.450" Score="1" Body="&lt;p&gt;Well, this does work, though it produces a quite noticable spark at the PSU output when I plug in the banana connector, even though the Apple's power switch is in the off position. (The Apple IIc still draws about 35 mA of current at 15 V even when it's powered off. When off, the +V power input is connected to a single pin on the PSU card connector via line FFF in the schematic above.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of that, I think I probably wouldn't recommend this unless you have a switch on your external PSU. (The manual for my bench PSU says it ought not to be powered up with a load.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-11-07T09:48:07.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12701" PostTypeId="1" CreationDate="2019-11-07T07:57:30.500" Score="13" ViewCount="1414" Body="&lt;h2&gt;This question is about the old MSX-1  computers. I have a game I wrote, as a ROM file, and I now want to play it on a real MSX computer by putting the game into cartridge form. The game has been tested on an MSX emulator and it works. So my question is what is the simplest circuit for building an MSX-1 16K ROM cartridge or 32K ROM cartridge (using modern easy to get components)?. I have an Atmel AT28C256 EEPROM available to use. I am asking for a 16K and 32K circuit because there are two versions of the game.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Diagram below is part of a reply to answer by Anonymous. Note you could also &#xA;use the 27c256 in the 16K cartridge, but I realised after more thought,&#xA;it is cheaper and easier to use the 27c128 (a related similar chip) instead of 27c256. Optionally a capacitor can be put across the power lines to the EEPROM to smooth the voltage to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WoBAl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WoBAl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 27c256 is powered by 5v this can be obtained by using pin 45 or 47 (which are both a +5v power source) and using pin 41 or 43 (which are both ground). The +12v pin, which supplies a maximum of 50ma, can also be uses to obtain a +5v power source after using a suitable circuit to reduce the voltage to +5v (though I do not know what a suitable voltage reduction circuit will be here). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aternatively-as shown in the Alternative circuit diagram below-&#xA;(as anonymous mentions in its answer)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CE is connected to SLSTL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OE can be connected to CS12 for a 32K cartridge&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OE can be connected to CS2 for a 16K cartridge&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ACQIx.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ACQIx.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A pull down resistor (of value 5000 ohms or more)&#xA;needs to be&#xA;simultaneously connected (from OE to ground) &#xA;to the MSX &#xA;ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the OE pin is shared between ground and CS12 for the 32k cartridge , &#xA;or &#xA; the OE pin is shared between ground and CS2 for the 16k cartridge&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two ground wires on the MSX cartridge slot (pins 41 and 43)&#xA;can be wired together to create a single ground; the two VCC wires&#xA; on the MSX cartridge slot (pins 45 and 47)  can be wired together&#xA; to create a single Vcc; and so the circuit can be powered by these&#xA;four wires (41,43,45,47) used as the two power wires that deliver&#xA;5v (at up to 300 ma).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the circuit can likely work theoretically without the capacitor and resistor -it is preferred to use it with a capacitor and resistor so it works&#xA;100% of the time. Thus the preferred circuit is the alternative circuit diagram above. The value of the capacitor in the above circuit is between 0.05uf and 0.2 uf.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The AT28C256 flash EEPROM has a similar enough pinout compared to the 27c256 EPROM (as far as I am aware these EPROMs do not have a direct flash equivalent), except that a few of the pins are different, so it can be used instead of the 27c256 in the both circuits above. Thus an AT28C256 can be used in place of the 27c256, in both circuits above, to make a flash based cartridge (this avoids the inconvenient possibility of using UV light to bring some 27c256 into a programmable state). So using the AT28C256, in this way, would mean wiring Vcc and WE together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: the pull down resistor is not required (see updated answer by anonymous)&lt;/p&gt;&#xA;" OwnerUserId="15527" OwnerDisplayName="Rosemary" LastEditorUserId="15527" LastEditDate="2019-11-25T18:38:23.693" LastActivityDate="2020-01-10T07:11:38.497" Title="What is the Circuit for a 16K or 32K MSX computer cartridge?" Tags="&lt;rom&gt;&lt;msx&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12702" PostTypeId="2" ParentId="11311" CreationDate="2019-11-07T20:05:33.783" Score="2" Body="&lt;p&gt;One possibility is that because there’s no keyboard attached, it’s coming up with serial console only. Attach a terminal to the console serial port and see if you get anything on boot. You’ll need to set it to the standard 9600/8/N/1 and may need to use a null modem cable.&lt;/p&gt;&#xA;" OwnerUserId="4496" LastActivityDate="2019-11-07T20:05:33.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12703" PostTypeId="2" ParentId="2781" CreationDate="2019-11-08T01:48:05.573" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;http://forum.6502.org/viewtopic.php?f=3&amp;amp;t=5517&quot; rel=&quot;nofollow noreferrer&quot;&gt;reverse engineering Robotron 2084 for the Apple II&lt;/a&gt; topic on &lt;code&gt;forum.6502.org&lt;/code&gt; discusses, through several dozen posts over a few months, forum user fschuhi's reverse-engineering of the Robotron: 2084 game on the Apple II. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;He did this using execution tracing of with &lt;a href=&quot;http://jtauber.com/applepy/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple II emulator (written in Python)&lt;/a&gt;, what appears to be a homebrew disassembler, &lt;a href=&quot;https://www.xlwings.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;xlwings&lt;/a&gt; to interface Python with MS Excel, and further homebrew Excel code to help with the disassembly and analysis, including creating heat maps of memory accesses and &lt;a href=&quot;https://en.wikipedia.org/wiki/DOT_(graph_description_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOT&lt;/a&gt; code to describe call graphs. He's essentially created a workbench that lets him run parts of the code, analyze what happened during the run and annotate a disassembly with this information. It's brilliant work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sadly, the code for all this is not available. (fschuhi said he might refactor it and upload it to GitHub at some point, but the project seems to have been set aside for the moment, so I wouldn't hold my breath waiting for that to happen.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, just looking at the images and reading the text provides a lot of good ideas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the top level of the workbench, with a bit of disassembled code:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EKSYK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EKSYK.png&quot; alt=&quot;Splash1 (Workbench).jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a call graph of the code that generates the title screen:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/00Aa9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/00Aa9.png&quot; alt=&quot;call_tree.dot3.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And here's a heat map showing reads and writes to a small area of memory. (These can be zoomed out to let you easily see all memory accesses done by any particular routine you emulate.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Sdn2O.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Sdn2O.png&quot; alt=&quot;reads top.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-11-08T01:48:05.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12704" PostTypeId="2" ParentId="2781" CreationDate="2019-11-08T07:32:27.507" Score="1" Body="&lt;p&gt;If you want to get proficient with the first option, that is disassembling a ROM and finding out which part does what, you should get used to an interactive analysis tool that responds immediately to adding label names, retyping data, declaring something as code and shows proper cross-referencing. The two best-known freely available tools that include 6502 support are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.6502.org/tools/asm/ida37fw.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;IDA 3.7&lt;/a&gt;. It works on modern computers inside DOSBox, but as this software is quite dated, the user interface also is. If you want to run it inside DOSBox, consider getting the &lt;a href=&quot;https://www.vogons.org/viewtopic.php?t=22617&amp;amp;start=19&quot; rel=&quot;nofollow noreferrer&quot;&gt;3rd party video mode utilities&lt;/a&gt; to set a 132-character video mode. Newer Freeware versions of IDA do not support anything except x86 code. The commercial edition is an option though, but the price likely is prohibitive for intermittent hobby use.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ghidra-sre.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ghidra&lt;/a&gt;. This a heavy-weight generic reverse engineering tool that even includes a decompiler. I did not check the quality of the decompiler output for 6502 code, but the disassembler should be fine anyway.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;None of these tools comes with NES-specific support (like names for NES hardware registers) in the standard install (at least I didn't stumble across it during the quick evalution for this answer), but both support scripting. I suspect that (at least for IDA, due to its age) NES analysis support scripts are available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Getting used to static analysis with tools like this takes some time, and using them in conjunction with an emulator with debugger is likely the easiest way to get started. With some experience, these tools add a lot of value though by you being able to document your analysis results (mostly by adding comments and renaming things) and the cross-referencing functionality (&quot;show me where this variable is written from&quot;).&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2019-11-08T07:32:27.507" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12706" PostTypeId="2" ParentId="12697" CreationDate="2019-11-08T15:35:26.937" Score="3" Body="&lt;p&gt;Let me introduce yet another supplier of a Virtual Memory System. Tens of thousands of programmers (I'm guessing here) used VAX's VMS, which allowed RAM to be swapped in and out for temporary storage on disc. The PDP 11, which used VMS, sold over 600,000 units from the early 1970s until the 90s. Research on this machine is easy because so many people used them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I programmed the PDP 11 once, back in the early 1970s and it was the friendliest, neatest little computer ever. My sometimes unreliable memory tells me I also programmed the IBM 650 in the mid 1960s, which was NOT all the above. I remember the engineer clearing the 650's memory by holding a bar magnet, wrapped in chamois leather, on the surface of the still-rotating drum memory! The Symbolic Optimizing Assembler Program placed each machine code instruction on the drum so that it's sector was just coming &quot;over the drum's horizon&quot; as the previous instruction finished executing. (I'm not too sure I believe that myself, but I remember being told it. It certainly makes a believable story.) This 650 was installed in IBM, Greenock, Scotland where they made IBM's card punches and verifiers.&lt;/p&gt;&#xA;" OwnerUserId="15530" LastActivityDate="2019-11-08T15:35:26.937" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12707" PostTypeId="2" ParentId="12697" CreationDate="2019-11-08T19:31:17.657" Score="2" Body="&lt;p&gt;I'd suggest that the fact that there are two different &quot;VM&quot; interpretations muddies the water. Burroughs et al. had &quot;virtual memory&quot; implemented by transparent swapping between core and disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM 370 had &quot;virtual machines&quot; allowing multiple operating systems to be run on the same physical hardware (i.e. a single copy of CP hosting multiple copies of CMS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is clearly overlap between the ideas, but it's probably safe to say that while having an MMU capable of handling multiple virtual machines probably implies that it would be easy to implement virtual memory, the reverse doesn't necessarily apply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any event: IBM was fairly late to the party as far as virtual memory is concerned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MarkMLl&lt;/p&gt;&#xA;" OwnerUserId="15532" LastActivityDate="2019-11-08T19:31:17.657" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12708" PostTypeId="1" CreationDate="2019-11-08T21:21:44.600" Score="6" ViewCount="321" Body="&lt;h1&gt;Context&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sdcc.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SDCC&lt;/a&gt; claims to support C11.&#xA;I use it to write games on Z80 target (for fun and experience).&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;C11 defines &lt;code&gt;restrict&lt;/code&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/C11_(C_standard_revision)&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;C11 (C standard revision) - Wikipedia&quot;&gt;C11&lt;/a&gt; specifies the &lt;code&gt;restrict&lt;/code&gt; keyword on pointers, which can improve generated code speed (and size often).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a nutshell, when the programmer adds &lt;code&gt;restrict&lt;/code&gt; to a pointer definition, they (the programmer) promises that the memory accessed by this pointer will never overlap with any other memory.  It is very often the case in (sane) API usage, but the compiler cannot guess what's sane.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Restrict and retrocomputing&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Now, back to our retro world. Analysis and examples in &lt;a href=&quot;https://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Demystifying The Restrict Keyword - CellPerformance&quot;&gt;Demystifying The Restrict Keyword&lt;/a&gt; analyses this in terms of load scheduling, which doesn't exist in Z80 (no delay, loads and store are committed at the end of all such instructions).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, though the example in Wikipedia mentions &quot;'load' may have to wait until preceding 'store' completes&quot;, the example still partially makes sense without such notions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, although SDCC implements a number of optimizations, enough to actually produce good Z80 code, &lt;a href=&quot;http://sdcc.sourceforge.net/doc/sdccman.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SDCC manual&lt;/a&gt; does not mention &lt;code&gt;restrict&lt;/code&gt; (or even strict aliasing rules).&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Question 1&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Is &lt;code&gt;restrict&lt;/code&gt; actually useful in a Z80 context?  Intuitively it does make sense, but perhaps in practice due to the small number of registers it virtually never practically makes sense?&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Experiment before asking&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I compiled the example code on &lt;a href=&quot;https://en.wikipedia.org/wiki/Restrict#Optimization&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;restrict - Wikipedia&quot;&gt;the Wikipedia page about restrict&lt;/a&gt; with and without the restrict keyword, the result was exactly the same.&lt;/li&gt;&#xA;&lt;li&gt;I simplified the code using &lt;code&gt;char *&lt;/code&gt; instead of &lt;code&gt;size_t *&lt;/code&gt;, the code was simpler on both sides.&lt;/li&gt;&#xA;&lt;li&gt;All compilations with &lt;code&gt;sdcc -mz80 --allow-unsafe-read --max-allocs-per-node 100000&lt;/code&gt; and two variants: &lt;code&gt;--opt-code-size&lt;/code&gt; and &lt;code&gt;--opt-code-speed&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Result: in all cases, adding &lt;code&gt;restrict&lt;/code&gt; keyword did not change generated code at all.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;SDCC: read the source before asking&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Does SDCC actually meaningfully implement &lt;code&gt;restrict&lt;/code&gt;? Checking the source code I can only confirm that it performs some checks (see for example &lt;a href=&quot;https://sourceforge.net/p/sdcc/code/HEAD/tree/trunk/sdcc/src/SDCCicode.c#l2010&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sourceforge.net/p/sdcc/code/HEAD/tree/trunk/sdcc/src/SDCCicode.c#l2010&lt;/a&gt; ), but cannot confirm that adding the keyword in source code can actually change generated code in any situation.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Code style&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The example in Wikipedia :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&#xA;void updatePtrs(size_t *ptrA, size_t *ptrB, size_t *val)&#xA;{&#xA;  *ptrA += *val;&#xA;  *ptrB += *val;&#xA;}&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;can be rewritten&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&#xA;void updatePtrs(size_t *ptrA, size_t *ptrB, size_t *val)&#xA;{&#xA;  size_t v = *val;&#xA;  *ptrA += v;&#xA;  *ptrB += v;&#xA;}&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In practice, generated Z80 is slightly better, but &lt;code&gt;restrict&lt;/code&gt; still changed nothing.  Perhaps writing C in a specific style is what counts in such a context?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Considerations like &quot;use global variables because Z80 is inefficient dealing with C-style stack and even code that access data at variable location&quot; are generally relevant but that's not what I'm asking for.)&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Questions&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can anyone confirm what SDCC does with the &lt;code&gt;restrict&lt;/code&gt; keyword?&lt;/li&gt;&#xA;&lt;li&gt;Can anyone provide style recommendations specific to the topic or pointer aliasing and the benefit supposedly provided by the &lt;code&gt;restrict&lt;/code&gt; keywords when the compiler does not actually support it?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="574" LastEditorUserId="130" LastEditDate="2019-11-11T10:02:31.340" LastActivityDate="2019-11-11T10:02:31.340" Title="Why isn't the 'restrict' keyword useful in SDCC when compiling for Z80 target?" Tags="&lt;z80&gt;&lt;c&gt;&lt;compilers&gt;&lt;sdcc&gt;" AnswerCount="2" CommentCount="18" ClosedDate="2019-11-10T04:55:05.103" ContentLicense="CC BY-SA 4.0" />
  <row Id="12709" PostTypeId="5" CreationDate="2019-11-08T21:31:12.570" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://sdcc.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;SDCC - Small Device C Compiler&quot;&gt;SDCC - Small Device C Compiler&lt;/a&gt; is a retargettable, optimizing Standard C (ANSI C89, ISO C99, ISO C11) compiler suite that targets many 8 and 16 bit microcontrollers and chips used in vintage computers like Z80/Z180.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It supports all standard C types (even float) and performs a host of standard optimizations such as global sub expression elimination, loop optimizations (loop invariant, strength reduction of induction variables and loop reversing), constant folding and propagation, copy propagation, dead code elimination and jump tables for 'switch' statements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can run on Linux, Windows, Mac OS X.&lt;/p&gt;&#xA;" OwnerUserId="574" LastEditorUserId="574" LastEditDate="2019-11-08T21:46:16.907" LastActivityDate="2019-11-08T21:46:16.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12710" PostTypeId="4" CreationDate="2019-11-08T21:31:12.570" Score="0" Body="For question regarding the SDCC ISO C compiler which targets CPUs used in retro machines like z80." OwnerUserId="574" LastEditorUserId="574" LastEditDate="2019-11-08T22:52:20.663" LastActivityDate="2019-11-08T22:52:20.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12711" PostTypeId="2" ParentId="12708" CreationDate="2019-11-08T22:52:04.970" Score="5" Body="&lt;p&gt;&lt;strong&gt;Preface:&lt;/strong&gt; &lt;em&gt;I just &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12708/sdcc-supports-restrict-but-apparently-ignore-it-does-it-what-to-do?noredirect=1#comment40019_12708&quot;&gt;commented&lt;/a&gt; in support of my close request, that the question is, in its current way, as well as in any simple rephrasing I could think, of off-topic for RC.SE due its recent nature of C11 as well as SDCC. Both of the questions voiced at the end are about the same non-RC.SE quality.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Following Stéphane's &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12708/sdcc-supports-restrict-but-apparently-ignore-it-does-it-what-to-do#comment40017_12708&quot;&gt;intend for rephrase&lt;/a&gt; I came to think that looking at the base and motivation for 'restrict' to be added to C in fact can lead to some RC.SE relevant topic and knowledge - except, it would be a total different question, not any kind of rephrasing.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;At the core, &lt;code&gt;restrict&lt;/code&gt; is about telling the compiler that, within a given code section (scope), no  aliasing of pointers exist. Aliasing means simply that they point to the same (overlapping) memory location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this information seams at first of just theoretical relevance, it becomes important when considering that modern (*1) CPUs rely on pipelining, reordering and caching. Within this context it becomes quite helpful for compilers to assume every target accessed by a pointer is guaranteed to be not accessed by any other pointer at the same time. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Without &lt;code&gt;restrict&lt;/code&gt;, the compiler has to make sure all pointed to access is sequenced and completed, before any other pointed access is done. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With &lt;code&gt;restrict&lt;/code&gt;, the compiler can interleave access and manipulation of different pointer targets in arbitrary order, leaving room for pipelines and caches to perform well.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;[Insert Practical example]&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets take two operations on an array, handling two elements independently&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Array(I) := Array(I) + 1.&#xA;Array(J) := Array(J) - 1.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Without telling the compiler that I and J never hold the same value, it has to produce code that finishes accessing the first before touching the second, which might look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LOAD  reg,Array(I)&#xA;INC   reg&#xA;STORE reg,Array(I)&#xA;LOAD  reg,Array(J)&#xA;INC   reg&#xA;STORE reg,Array(J)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On a pipelined CPU this &lt;em&gt;might&lt;/em&gt; stall the execution, as each instruction has to wait for the prior to finish before it can execute. While caching might help a bit, neither reordering nor a write buffer will be of any use here. In fact, this is close to the worst case of code for a modern CP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By declaring the pointers as independent and never overlapping, the compiler may interleave the code of both lines (and maybe others to come, depending on the pipeline structure), allowing code like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LOAD  reg1,Array(I)&#xA;LOAD  reg2,Array(J)&#xA;INC   reg1&#xA;INC   reg2&#xA;STORE reg1,Array(I)&#xA;STORE reg2,Array(J)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now each instruction gets time to 'settle' before its result is needed, thus allowing pipelined operation. as well as write back buffering and alike.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, interleaving has not been superseded by instruction reordering in (more) modern CPUs, as these mechanics can still not guess dependencies, and checking for addresses can only be done at a (rather) late stage, so not gaining as much as already interleaved code does. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So at the core, &lt;code&gt;restrict&lt;/code&gt; is a hint for compilers to allow generation of interleaved code, code 'modern' systems benefit a lot from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'Modern' is the key word in relation to classic (micro) processors - they do not use pipelining (*2). That's especially true for oldtimers like a Z80 (*3). It doesn't matter if above code is generated interleaved or not, as it would not improve performance at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So re-thinking above question in context of RC.SE would mean to ask:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;When became CPUs pipelined in a way that benefits from interleaved code?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is ratehr trivial. Or put more specific to Stéphane's Z80 case:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Does the Z80 benefit from interleaved code in respect to execution speed?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which would make a good question - cursed with a rather simple answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;No.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of C11 this means that &lt;code&gt;restrict&lt;/code&gt; solves an issue that can not arise on a Z80 at all. Thus SDCC will (and should) not generate different code if present or not.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Modern feels a bit wrong here, as such features are mainstream since the late 1960s - it just took some time until they reached micros as well - just, I have a hard time to come up with an equally spot on term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - No, the 6502 does not count, as it's pipeline is more of a prefetch than a real pipeline with separate stages for data access and execution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - And interestingly as well for first generation RISC CPUs. After all, it was their main design goal to get rid of dependencies between instructions to reduce complexity of pipelined execution. Something that got lost soon after.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-09T03:35:24.367" LastActivityDate="2019-11-09T03:35:24.367" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12712" PostTypeId="1" CreationDate="2019-11-09T17:00:57.817" Score="24" ViewCount="2561" Body="&lt;p&gt;After reading &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/12697/278#comment39995_12697&quot;&gt;Charles Duffy's comment&lt;/a&gt; on &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/12697/278&quot;&gt;Was there a clearly identifiable &amp;quot;first computer&amp;quot; to use or demonstrate the use of virtual memory?&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I had a computer science professor around 1999 or therebouts who still bemoaned that virtual memory had won out over use of dropfiles (completely serializing/deserializing process state). My class at CSU Chico learned more about virtual memory in our systems architecture class than we did in our operating system courses... – &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/6704/charles-duffy&quot;&gt;Charles Duffy&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I tried to find out what a &quot;dropfile&quot; was. Unfortunately, I was unable to do so, probably because the words &quot;drop&quot; and &quot;file&quot; are so often used to refer to the more modern virtual memory / swap combination that, once those were filtered out, my search engine returned only irrelevant results about config files passed to BBS games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What actually &lt;em&gt;are&lt;/em&gt; dropfiles, what were they used for, and why?&lt;/p&gt;&#xA;" OwnerUserId="278" LastActivityDate="2019-11-14T11:41:14.413" Title="What is a dropfile?" Tags="&lt;memory&gt;&lt;terminology&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12714" PostTypeId="2" ParentId="12712" CreationDate="2019-11-09T18:33:55.817" Score="34" Body="&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;p&gt;Dropfiles are somewhat related to virtualization as they allow to remove a process complete from execution and restart it later. Agent_L &lt;a href=&quot;/q/12712//12714?noredirect=1#comment40081_12714&quot;&gt;describes it&lt;/a&gt; quite head on as 'per-process hibernation'. A whole process will be taken off a machine with the option to restart it later on the same or another machine under the same or another user.&lt;/p&gt;&#xA;&lt;p&gt;Dropfiles are originated from a complete different view of computer operation. They exist in environments that try to avoid the overhead of virtual memory. Usually these were machines where a process occupied the whole machine, running without interruption.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;p&gt;A dropfile is exactly what essentially Charles Duffy said, &lt;strong&gt;a complete serialization of a process' state&lt;/strong&gt;. Important detail to be added: &lt;em&gt;Issued by the OS&lt;/em&gt;. It's essentially a recording of all state of a process to a disk file. Depending on the OS, this includes&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Registers&lt;/li&gt;&#xA;&lt;li&gt;Allocated Memory Content&lt;/li&gt;&#xA;&lt;li&gt;OS Values, like&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Assigned Devices&lt;/li&gt;&#xA;&lt;li&gt;File Tables&lt;/li&gt;&#xA;&lt;li&gt;Job Stack (*1)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;To a degree, it's much like a dump, except written to file and reloadable.&lt;/p&gt;&#xA;&lt;p&gt;The main reason for a dropfile to be written is either processing timeout (assigned total CPU time or run time exhausted) or an operator issued abort - like when needing space to load a different job.&lt;/p&gt;&#xA;&lt;p&gt;While dropfiles quickly went out of use (see below) and were replaced by virtualization for commercial mainframes, they remained a major thing on scientific mainframes. CDC's operating systems were based around dropfiles. There was a whole set of utilities to handle dropfiles, especially to move them between production environment and development.&lt;/p&gt;&#xA;&lt;p&gt;To understand this, it's important to keep in mind that these machines were about number crunching, not data processing. Here, any addition of virtual memory meant slowing down the machine, so they worked without such fancy stuff (see &lt;a href=&quot;/q/7737&quot;&gt;this answer&lt;/a&gt; about Cray machines) . Also they (often) got a fixed number of processes that could run concurrently, defined by the number of 'PCs'. Processes got a fixed amount of memory assigned, as well as a total run time. Each process was expected to work full time, with not much I/O at all - after all, that's what a supercomputer was for: crunching numbers. Such jobs needed the whole attention of a machine - and having the ability to operate more than one program at the same time at high speed was a major USP of Cray's designs.&lt;/p&gt;&#xA;&lt;p&gt;If the assigned run time was reached, a dropfile got written, memory freed and its PC assigned to the next job in line. Usually a job was not expected to reach that limit, but this depends on the way jobs were structured. There was no automatic restart; it was always done manually - after all, that job already exceeded what was assumed to be the time needed, so there must be something wrong. Tools (like &lt;code&gt;SWITCHP&lt;/code&gt; on VSOS (*2)) allowed developers to load a dropfile to do a 'live' system diagnosis.&lt;/p&gt;&#xA;&lt;p&gt;Of course, researchers quickly learned about the benefits for their 'private' projects. Stuff that didn't get enough processing time was lined up at very low priority, having the operator (or operator scripts) restarting their job whenever there was no other to run.&lt;/p&gt;&#xA;&lt;p&gt;Dropfiles are a quite efficient way to handle a few jobs with long run times and low exchange rates. Compared to virtualization, run time overhead is negligible.&lt;/p&gt;&#xA;&lt;p&gt;Once dropfiles were available, they became a great tool to not only suspend a job for diagnosis or later restart, but also to move it between different (compatible) machines or even sites. A programs could be developed on some small machine, debugged until it seemed to work fine, dropped and restarted on a faster production machine. Or copied and put onto several machines in parallel A whole job became a tradeable commodity like a single program. In some way, dropfiles (when handled accordingly) can even be seen as a form of containerization (*3).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;So while dropfiles are somewhat related to virtualization, they are result of a completely different view on computer operation.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Modern Dropfile Implementation(s)&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;[While knowing I'm going totally off-topic here, I feel it might be helpful to see how these ideas may be still relevant in modern computing]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/CRIU&quot; rel=&quot;noreferrer&quot;&gt;CRIU (Checkpoint/Restore In Userspace)&lt;/a&gt; is a project implementing something quite similar to dropfiles for Linux (as &lt;a href=&quot;/q/12712//12714?noredirect=1#comment40085_12714&quot;&gt;mentioned here&lt;/a&gt; by noɥʇʎԀʎzɐɹƆ). CRIU enables the packaging of all content and state of a Linux user process in a set of files and restoration from there. Like often with modern developments, incorrect historic names are reused - see below for the original meaning of &lt;em&gt;checkpoint&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;There are/have been several other similar atempts like &lt;a href=&quot;https://crd.lbl.gov/departments/computer-science/CLaSS/research/BLCR/&quot; rel=&quot;noreferrer&quot;&gt;BLCR (Berkeley Lab Checkpoint/Restart)&lt;/a&gt;, but they went all, AFAICT, into hibernation many years ago.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Checkpoints&lt;/h2&gt;&#xA;&lt;p&gt;Checkpoints are a somewhat similar concept developed prior to dropfiles and persistent in commercial operation way into the 90s.&lt;/p&gt;&#xA;&lt;p&gt;Where dropfiles capture the whole process state for an automated and complete restart, checkfiles keep 'only' data (pointers) enabling continued operation after the application is loaded again.&lt;/p&gt;&#xA;&lt;p&gt;Here a process can request a 'checkpoint' written with data it needs for an optional restart. An OS managed one checkpoint file per process (if requested): whenever a new checkpoint was written the prior was deleted.&lt;/p&gt;&#xA;&lt;p&gt;Unlike with a dropfile, restarting from a checkpoint required cooperation of the program to be restarted. The job got started again as with the prior run, but the program checked for a checkpoint and, if present, read it, setup all data as before and proceed from there.&lt;/p&gt;&#xA;&lt;p&gt;The whole operation is much like what modern office software (like Libre Office) does when being started after a crash.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Modern Checkpointing&lt;/h2&gt;&#xA;&lt;p&gt;While with a similar goal to CRIU, &lt;a href=&quot;https://crd.lbl.gov/departments/computer-science/CLaSS/research/BLCR/&quot; rel=&quot;noreferrer&quot;&gt;DMTCP (Distributed MultiThreaded CheckPointing)&lt;/a&gt;  walks some middle line between checkpointing and dropfile. Like a dropfile, the whole application memory space gets saved; but like checkpointing, it is done by the application using specific interfaces (called plugins) to handle all resources that need to be saved. It feels like a very interesting project, recovering (and rediscovering) things that have worked well in &lt;em&gt;ye olde times&lt;/em&gt; to be used for today's tasks.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - No, that's not a CPU stack, but the commencing punch card job - today's analogy would be 'the script' :)&lt;/p&gt;&#xA;&lt;p&gt;*2 - Which in fact as based on virtual memory operation - still the job structure was still based around long running batch operation.&lt;/p&gt;&#xA;&lt;p&gt;*3 - As I like to say: There isn't anything really new when it comes to computing - just improved reuse :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-11-14T11:41:14.413" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="12715" PostTypeId="2" ParentId="1132" CreationDate="2019-11-10T01:34:42.740" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;have some PS/2 to USB converters, and I know they are very 'moody', often only working with keyboards they were shipped with, and sometimes not even that.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are two very different types of converters you might be dealing with in this situation.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Wire Converter&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;One simply connects the wires, changing the connection from a mini-DIN to a USB connector, with no protocol changes at all. These work only with modern keyboards that know how to do &lt;em&gt;both&lt;/em&gt; AT (more often called &quot;PS/2&quot;) and USB keyboard protocols, and automatically switch depending on what they're plugged into. In other words, what's happening with these is that the protocols is &lt;em&gt;already&lt;/em&gt; USB at the PS/2 connector, and the adapter is just changing the connector shape. They typically look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/k7o64.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/k7o64.png&quot; alt=&quot;mini-DIN to USB type A&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically if an adapter is supplied with a keyboard, it will be one of these &quot;wired through&quot; connectors because it's much cheaper to build a keyboard that speaks both protocols than it is to build a keyboard that speaks just one and an entirely separate electronic system to convert the protocols.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;PS/2  to USB Converter&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The second type talks the AT protocol on one side and the USB protocol on the other, being essentially itself a small computer that converts between the two. These will often look a little bit larger, but not always:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/E3tkH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/E3tkH.png&quot; alt=&quot;PS/2 to USB protocol converter&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;What You Need&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Because your old AT keyboard talks the AT (PS/2) protocol only, you must use the second type of adapter. Anything that came with a keyboard is most likely the first type of adapter. Anything without a second connector for a mouse is probably the first type of adapter, unless you have some evidence otherwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll also probably need a connector to convert from your larger DIN connector used by AT keyboards to the smaller mini-DIN connector used by PS/2 keyboards, but the protocol is exactly the same for both AT and PS/2, so these will simply be wired through.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-11-10T01:34:42.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12716" PostTypeId="2" ParentId="12708" CreationDate="2019-11-10T01:56:19.963" Score="6" Body="&lt;p&gt;SDCC &quot;supports&quot; the &lt;code&gt;restrict&lt;/code&gt; keyword as a requirement of supporting C11.  Supporting C11 allows it to compile code written for other modern compilers more easily.  Programmers may also use &lt;code&gt;restrict&lt;/code&gt; as a means of having the compiler check certain aspects of their work, reducing the number of difficult-to-diagnose bugs they introduce.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to the simplicity of the Z80 CPU, the only measures needed to correctly support &lt;code&gt;restrict&lt;/code&gt; are recognising the keyword in its correct syntactical context, checking that the preconditions for using &lt;code&gt;restrict&lt;/code&gt; are verified to the extent that the C11 standard requires, and issuing diagnostics if the input code does not conform.  No changes to code generation are required, in much the same way as for the &lt;code&gt;const&lt;/code&gt; keyword.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-11-10T01:56:19.963" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12718" PostTypeId="1" AcceptedAnswerId="12720" CreationDate="2019-11-10T09:33:46.107" Score="9" ViewCount="2308" Body="&lt;p&gt;Was it possible for NMOS based 6502 system operate in the following fashion: while 6502 is not touching the bus one custom chip sets up memory read op, then two chips read the data off the bus at the same cycle. If yes what else beside a signal from the master chip to the slave chip was needed? The chips must have retained the ability to use the system bus separately. As far as I understand ANTIC and CTIA never read from their data pins at the same time&lt;/p&gt;&#xA;" OwnerUserId="15499" LastEditorUserId="6659" LastEditDate="2019-11-10T14:57:22.867" LastActivityDate="2019-11-18T08:23:08.793" Title="How to implement bus sharing / DMA on a 6502 system" Tags="&lt;hardware&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12719" PostTypeId="2" ParentId="12718" CreationDate="2019-11-10T11:06:37.800" Score="12" Body="&lt;p&gt;The 6502 drives the address bus full-time, but the &quot;Phi2 low&quot; or &quot;Phi1&quot; phase of the bus can be (and often was) used for non-CPU data transfers without interfering with the CPU's performance.  Most often the Phi1 phase was simply dedicated to video display reads, with the side-effect of performing DRAM refresh cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your system design includes this type of display logic, you'll need to suppress your other DMA cycles while the display is actively driving pixels, ad perform them only during blanking intervals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will in any case need memory that's fast enough to perform a complete read or write cycle in just the Phi2 phase of the CPU cycle, and buffers to isolate the CPU's address and data pins from the bus so that the DMA transfer can be substituted.  You'll also need to account for the NMOS CPU's relatively weak drive towards logic high when handing control of the bus back to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a CMOS CPU might be easier, not least because many versions of it came with a &quot;bus enable&quot; or &quot;data bus enable&quot; signal by which the address/data or only data lines could be tri-stated at the CPU itself, saving you a buffer.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-11-10T11:06:37.800" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12720" PostTypeId="2" ParentId="12718" CreationDate="2019-11-10T14:56:24.103" Score="14" Body="&lt;p&gt;The 6502 is one of the few CPUs without build in capabilities to share the bus (*1,2). &lt;strong&gt;It always drives the bus&lt;/strong&gt;. Any sharing will need external logic to detach the CPU and let others drive the bus  (see &lt;em&gt;CMOS Enhancements&lt;/em&gt; below as well).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Full bus access&lt;/strong&gt; can be gained (*3) by waiting for any non write cycle (&lt;code&gt;R/W = high&lt;/code&gt; during &lt;code&gt;PHI2 = high&lt;/code&gt;) and halting the CPU by pulling &lt;code&gt;RDY&lt;/code&gt; low&lt;code&gt;prior to the falling edge of&lt;/code&gt;PHI2`  (see &lt;em&gt;CMOS Enhancements&lt;/em&gt; below as well). The CPU will halt operation and external logic can be used to decouple bus control signals allowing external circuitry to access. With the bus acquired timing can be complete independent from the CPU clock, thus as well allowing asynchronous as well as faster access. After releasing RDY the CPU will continue as before (*4).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now, since the 6502 only uses the bus during half of it's cycle (&lt;code&gt;PHI2 = high&lt;/code&gt;) there is a possibility to offer&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hidden Access&lt;/strong&gt; by restricting non-CPU access to &lt;code&gt;PHI2&lt;/code&gt;low time. This should always be possible (*5). Here the BUS gets simply detached at the start of &lt;code&gt;PHI2 = low&lt;/code&gt; and reattached when &lt;code&gt;PHI2&lt;/code&gt; gets high again.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;While this seams simple at first it carries the disadvantage that all access must be guaranteed to be finished within this time, as well as being in sync with the CPU. While the first may be no problem for single byte access, it gets a distinct hurdle when more than a byte must be accessed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second means, that if the access has to be hard coupled to a external clock (like video), the CPU has to be clocked accordingly - either by having it run at video access clock (or multiples thereof), like for example the C64, or by applying a variable speed clock, like the Apple II did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of the &lt;strong&gt;C64&lt;/strong&gt; tying the CPU to video clock, to enable hidden access for the VIC, could only solve part of it, as memory bandwidth still wasn't sufficient for full display resolution. Here the VIC had to stop the CPU every 8th line to refill it's buffer in addition to access RAM during &lt;code&gt;PHI2 = low&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;8-bit Atari setup of SALLY, (G/C)TIA and ANTIC&lt;/strong&gt; is a more complex beast but more straight forward at the same time. To start with, while SALLY was basically a NMOS 6502 CPU, it could be directly stopped by asserting a &lt;code&gt;/HALT&lt;/code&gt; signal on pin 35 (*6). When applied, the CPU not only halted operation, but as well put all bus signals into tristate to allow full external access. In addition, Address (and data) bus were always tri-stated during &lt;code&gt;PHI2 = low&lt;/code&gt;, automatically freeing the bus for hidden access without external logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now wile the ANTIC accesses video memory, it's not just a stupid graphics chip, but a processor in it's own right, executing a program, the display list. For any access it halts the CPU. This is done in three cases:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Programm access (Display list)&lt;/li&gt;&#xA;&lt;li&gt;Graphics data (Playfield)&lt;/li&gt;&#xA;&lt;li&gt;Sprite data (Player/Missile)&lt;/li&gt;&#xA;&lt;li&gt;RAM refresh&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(Once again it's quite obvious where the Amiga design is originated)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using DMA of course slows the CPU down to speeds between ~90% with low res (mode 8/9) down to ~60% with high res. Then again, the CPU is clocked at 1.8 MHz, so this translates to 1.0 .. 1.6 MHz, which is still quite fast compared to other machines of the same or even later time (*7).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if there's an intention to build an Atari like system, a standard NMOS 6502 will only fit with a lot of external components. A R65102 might save some of them but may be hard to come by, while a 65C02 is eventually the closest to a SALLY that was (and still is) sold. Though it does need some tweeking to work like in an Atari. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;CMOS Enhancements&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this all of this is true for the NMOS version, the 1982 CMOS does aid bus sharing by having tri-state buffers included, controlled by the 'new' &lt;code&gt;BE&lt;/code&gt; (*2). It  will put all R/W as well as all address and data lines into high impedance. BE operates exactly like external buffers by being non sychronized with clock or bus cycles. All prior caution about bus synchron operation needs to apply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition &lt;code&gt;RDY&lt;/code&gt; signal is now obeyed for write cycles as well, taking away the need to create a bus available signal that includes &lt;code&gt;R/W&lt;/code&gt;. Bus access can now be applied basically any time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a CMOS version will save at least 4 external TTL chips for bus detachment and remove the need to wait for write operations to finish when acquiring the bus - also it's the only one available today, so I'd go for it.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;General advice&lt;/strong&gt; for system design with DMA:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is always a good idea to see what memory regions do need DMA at all and only share these. Instead of stopping the CPU every time a DMA access happens, have them act independent as long as they do not interfere - that's as in accessing the same component. Sinclairs Spectrum is a great example, as the CPU only gets stopped when accessing the lower 16 KiB of same which it shares with video. All other RAM and ROM access is handled at full speed, even while video reads its RAM. This ofc only works as great due the Spectrum having two independent RAM devices. But even with a single RAM (16 KiB Spectrum), the method still provides considerable speedup for ROM code. The same is true for a 6502 as more than 70% of all reads are code fetches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With concurrent access restricted to RAM, ROM code (like BASIC) will only be slowed when a collision happens during RAM access. With device specific sharing the mentioned CPU halt during VIC buffer load would have been less influential for BASIC programs or ROM based games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when using external buffers, putting them not around the CPU, but before the RAM may bring additional performance gains without much additional hardware.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The original NMOS 6501 did feature a protocol for bus arbitration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - While the 6502 didn't offer it, Rockwell's  NMOS R65102/R65112 did - and so did Atari's (NMOS) SALLY.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Strictly speaking, pulling &lt;code&gt;RDY&lt;/code&gt; does not stop the CPU, but extends the current cycle. So this isn't really a feature for bus sharing, but access extention for low speed peripherals that can be twisted to insert external bus cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - It might be still advertised to synchronize this with a rising edge of &lt;code&gt;PHI2&lt;/code&gt; to make sure CPU (and memory) gets a full phase to finish the resumed bus operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Unless that time is already used by other mechanics, like DRAM refresh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - In addition the &lt;code&gt;R/W&lt;/code&gt; pin was moved from pin 34 to pin 36.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - C64 being ~0.98/1.02 MHz (PAL/NTSC) with slowed down to less than 0.9 when using full graphics.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-10T17:24:03.840" LastActivityDate="2019-11-10T17:24:03.840" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12721" PostTypeId="1" AcceptedAnswerId="12723" CreationDate="2019-11-10T18:23:16.520" Score="12" ViewCount="1796" Body="&lt;p&gt;Hello: I have an old Seagate ST-238R drive. I'm the original owner and it stopped working in the early-90s when I foolishly deleted system files to make room for a football game. (I was 12 at the time).  However, I still have the drive and am hoping to get the data from it as it has various writing by me and my family saved on it. I've brought to some harddrive recovery places to no avail. A friend of mine told me about retrocomputing and suggested I post here. I'm wondering if the data might be salvageable and how I might go about extracting it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/K6jgJ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K6jgJ.jpg&quot; alt=&quot;top of Seagate ST-238R&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/DydxY.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DydxY.jpg&quot; alt=&quot;bottom of Seagate ST-238R&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15544" LastEditorUserId="6659" LastEditDate="2019-11-10T18:41:33.130" LastActivityDate="2019-11-11T18:57:02.430" Title="Getting data from Seagate ST-238R drive" Tags="&lt;hardware&gt;&lt;hard-disk&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12722" PostTypeId="2" ParentId="12721" CreationDate="2019-11-10T18:58:17.337" Score="5" Body="&lt;p&gt;The fact that there are two edge-connectors on the drive tells me that this drive uses the MFM or &lt;a href=&quot;https://en.wikipedia.org/wiki/ST506/ST412&quot; rel=&quot;nofollow noreferrer&quot;&gt;ST506/ST412 interface&lt;/a&gt; (or related interfaces such as RLL or &lt;a href=&quot;https://en.wikipedia.org/wiki/Enhanced_Small_Disk_Interface&quot; rel=&quot;nofollow noreferrer&quot;&gt;ESDI&lt;/a&gt;). These were used on the earliest of PCs and compatibles, as well as other computer systems of the 1980s. This predates the use of SCSI and IDE (ATA) hard drive interfaces that were common from the 1990s onwards, so your options will be limited. Here are the two main options I see:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Get an old computer / interface card&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you're able to find a suitable MFM interface card, it will most likely be an ISA card, so you will need a computer that has ISA slots to connect it to. Alternatively, there were MFM to SCSI bridge boards, which could allow you to connect the drive to a SCSI card instead. (That means you could use a computer with a regular PCI slot, if you have a suitable card.) This &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2405/how-can-a-st-412-mfm-hard-drive-be-integrated-with-a-modern-pc&quot;&gt;related question&lt;/a&gt; has some more details on this option.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Use an emulated interface on custom hardware&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Some people have developed bespoke hardware interfaces that can connect directly to the hard drive (emulating the computer) and image its contents, or connect to a computer and use such an image to emulate the hard drive. Two examples of these interfaces are the &lt;a href=&quot;https://www.drem.info/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DREM&lt;/a&gt; hard drive emulator, and a &lt;a href=&quot;https://www.pdp8.net/mfm/mfm.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-8 oriented board&lt;/a&gt;. Neither of these options is particularly cheap, however.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2019-11-11T12:37:11.367" LastActivityDate="2019-11-11T12:37:11.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12723" PostTypeId="2" ParentId="12721" CreationDate="2019-11-10T19:49:17.320" Score="18" Body="&lt;p&gt;The ST-238R shown in the image is an RLL (Run Length Limited) drive and will not work correctly with a standard MFM controller, although it has the same &lt;a href=&quot;https://en.wikipedia.org/wiki/ST506/ST412&quot; rel=&quot;noreferrer&quot;&gt;ST506&lt;/a&gt; electrical interface and cabling. To read back your data, you will need an RLL controller, which unfortunately are less common than MFM controllers and might not be easy to find.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RLL is an encoding method that allowed 50% more data to be stored on the same hard drive platter compared to MFM, and allowed for higher data transfer speeds. However, it needed more accurate drive mechanics. Back in the day it was even possible to connect a normal MFM drive to an RLL controller and get 50% more capacity (albeit less reliable).&lt;/p&gt;&#xA;" OwnerUserId="15545" LastActivityDate="2019-11-10T19:49:17.320" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12724" PostTypeId="1" AcceptedAnswerId="12725" CreationDate="2019-11-11T00:16:20.067" Score="3" ViewCount="155" Body="&lt;p&gt;&lt;a href=&quot;http://web.archive.org/web/20040131100640/http://www.geocities.com:80/chris-o/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Archie&lt;/a&gt;, an older &lt;a href=&quot;https://en.wikipedia.org/wiki/Acorn_Archimedes&quot; rel=&quot;nofollow noreferrer&quot;&gt;Archimedes&lt;/a&gt; emulator for DOS had a feature called &quot;PCFS&quot; that allowed Archimedes files to be stored on the filesystem of the machine running the emulator. The files themselves were stored directly on the PC's filesystem, but there was also a metadata file&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know what this metadata files contain so I can restore the metadata in a more modern &lt;a href=&quot;https://en.wikipedia.org/wiki/RISC_OS&quot; rel=&quot;nofollow noreferrer&quot;&gt;RISC OS&lt;/a&gt; environment, but googling is not turning anything up.&lt;/p&gt;&#xA;" OwnerUserId="499" LastEditorUserId="499" LastEditDate="2019-11-11T14:03:50.220" LastActivityDate="2019-11-11T14:03:50.220" Title="Archimedes emulator &quot;archie&quot; PCFS file metadata format?" Tags="&lt;file-system&gt;&lt;archimedes&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12725" PostTypeId="2" ParentId="12724" CreationDate="2019-11-11T00:16:20.067" Score="3" Body="&lt;p&gt;Inspecting a couple of the files with hexdump and cross-referencing &lt;a href=&quot;https://www.riscosopen.org/wiki/documentation/show/FileSwitch%20Key%20Features&quot; rel=&quot;nofollow noreferrer&quot;&gt;riscos documentation&lt;/a&gt; the file seems to be a sequence of 32-bit little endian words. Looking at the values the following is my best-guess as to the fields meaning.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Word 0 appears to be the &quot;load address&quot;* field, on riscos this normally follows the form 0xFFFtttdd where ttt is the file type and dd is the most significant byte of the date/time stamp (I have not cross-checked that the timestamp makes sense)&lt;/li&gt;&#xA;&lt;li&gt;Word 1 appears to be the &quot;executation address&quot; field, on riscos this typically contains the rest of the date/time stamp.&lt;/li&gt;&#xA;&lt;li&gt;Word 2 appears to be the size of the file.&lt;/li&gt;&#xA;&lt;li&gt;Word 3 had the value 3, I am guessing this corresponds to the &quot;access flags&quot;.&lt;/li&gt;&#xA;&lt;li&gt;Word 4 had the value 1, I have no idea what this relates to.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If someone has more authoritative information I would be happy to see it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;* The names &quot;load address&quot; and &quot;execution address&quot; are largely historical, dating back to the BBC micro days.&lt;/p&gt;&#xA;" OwnerUserId="499" LastEditorUserId="79" LastEditDate="2019-11-11T11:16:29.270" LastActivityDate="2019-11-11T11:16:29.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12726" PostTypeId="2" ParentId="11291" CreationDate="2019-11-11T10:23:57.423" Score="1" Body="&lt;p&gt;For the Librascope/Royal Precision/General Precision computers, i.e. the LGP-30 and its little and big brothers (LGP-21 and RPC-4000), the actual data transmission is 6 bit parallel. Two sets of 6 data lines, to and from the Flexowriter respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is complemented by a handful of handshake and sync signals, to indicate that characters are available, trigger their processing, or signal that an &quot;end of input&quot; code has been entered by the user or read by the paper tape reader.  Some of the Flexowriter's handshake signals are directly derived from its mechanical camshaft. So they expose an amount of machine detail to the computer which is unexpected by today's standards.&lt;/p&gt;&#xA;" OwnerUserId="15550" LastActivityDate="2019-11-11T10:23:57.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12727" PostTypeId="2" ParentId="12724" CreationDate="2019-11-11T13:11:37.923" Score="3" Body="&lt;p&gt;Some of the metadata attributed to files on Acorn filing systems date from the 8-bit implementations of ADFS (and the earlier DFS) on the BBC Micro. These include the address to load the file in memory (RAM) whean read from disk, and the address at which the OS should start executing the file (if it is executable).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Key additions for RISC OS as used by the Archimedes include the three-byte file type that RISC OS uses to identify what programs should be used to open particular files (or whether they are executable themselves).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inability to store the file type was the main issue with using DOS filing systems with an Archimedes, so this data will &lt;em&gt;certainly&lt;/em&gt; be listed in the metadata file. I suspect it may include some or all of the information returned by the OS call &lt;a href=&quot;https://www.riscosopen.org/wiki/documentation/show/OS_GBPB%2012&quot; rel=&quot;nofollow noreferrer&quot;&gt;OS_GBPB 12&lt;/a&gt;, which consists of &lt;a href=&quot;https://www.riscosopen.org/wiki/documentation/show/OS_GBPB%2012%20Buffer&quot; rel=&quot;nofollow noreferrer&quot;&gt;the following&lt;/a&gt; data (at the given offsets):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0    Load address&lt;/li&gt;&#xA;&lt;li&gt;+4   Exec address&lt;/li&gt;&#xA;&lt;li&gt;+8   Length&lt;/li&gt;&#xA;&lt;li&gt;+12  &lt;a href=&quot;https://www.riscosopen.org/wiki/documentation/show/FileSwitch%20Key%20Features#file_attributes&quot; rel=&quot;nofollow noreferrer&quot;&gt;Attributes&lt;/a&gt; (read, write permissions etc.)&lt;/li&gt;&#xA;&lt;li&gt;+16  &lt;a href=&quot;https://www.riscosopen.org/wiki/documentation/show/File%20Object%20Types&quot; rel=&quot;nofollow noreferrer&quot;&gt;Object type&lt;/a&gt; (e.g. file, directory)&lt;/li&gt;&#xA;&lt;li&gt;+20  &lt;a href=&quot;https://www.riscosopen.org/wiki/documentation/show/File%20Types&quot; rel=&quot;nofollow noreferrer&quot;&gt;Filetype&lt;/a&gt; (as described above)&lt;/li&gt;&#xA;&lt;li&gt;+24  Name (0 – terminated string)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note: the ZIP file format has provision for storing RISC OS file types, which means that software for RISC OS machines is often stored in ZIP folders for distribution via non-RISC machines. The ZIP format stores all the metadata returned by OS_GBPB 12, as seen &lt;a href=&quot;http://www.riscos.com/support/developers/riscos6/programmer/zipper.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2019-11-11T13:11:37.923" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12728" PostTypeId="1" CreationDate="2019-11-11T13:26:21.107" Score="11" ViewCount="996" Body="&lt;p&gt;I've parsed a lot of websites and can't find answer anywhere. But still wonder to know why famicom cartridges are so colorful and different, but American and European cartridges grey only?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/1ZJQp.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1ZJQp.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/vjBaV.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vjBaV.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15552" LastEditorUserId="15552" LastEditDate="2019-11-11T13:39:25.600" LastActivityDate="2019-11-20T18:24:17.867" Title="Why are NES cartridges grey while Famicom are rather colourful?" Tags="&lt;nes&gt;&lt;game-cartridge&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12729" PostTypeId="2" ParentId="12728" CreationDate="2019-11-11T13:45:48.020" Score="5" Body="&lt;p&gt;There is most definitely no technical reason. And since some NES games featured different colours than just grey (think Zelda), it can't be based on some licensing directive either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the forms for the enclosure are made, there is no substantial cost in choosing any specific colour. Japanese games do show this quite nice. So there can't be no financial reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same point about colours can be made for Atari VCS cartridges as well, here the overwhelming majority came in black. Similar Intellivision or ColecoVision, or various European consoles like G7000 or VC4000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might end up being more of a cultural/style issue, where Japanese may see colourful variations as an addition, while western gamers (or at least western management) though of them as oddities?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Maybe we need to think it from the other end:&lt;/strong&gt; Is there any rational for game companies to make the additional effort of ordering cartridges in varying colours?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All measures, beside game development itself, are about sales and marketing. Cartridges came packed in boxes (*1), invisible to potential customers. Whatever colour they are will not have any effect on a purchase decision. The customer will only see the box - which in turn did come in quite many friendly colours. Some used to mark separate game types, while others just yelled &lt;em&gt;I'm different&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/urdHp.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/urdHp.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;There is no technical, legal or financial reason but maybe it was an issue not worth doing at all?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Boxes are by the way another major difference in console games in and outside of Japan. While in Japan a large number of games were sold in boxes barely bigger than the cartridge itself. Boxes outside Japan were usually comparable large, more like a book.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-19T22:48:55.680" LastActivityDate="2019-11-19T22:48:55.680" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="12730" PostTypeId="2" ParentId="12721" CreationDate="2019-11-11T18:57:02.430" Score="2" Body="&lt;p&gt;One other thing to consider, in addition to having the correct interface, is whether the electronics are damaged in some way as to cause the drive to overheat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've had some success in the past pulling data from &quot;dead&quot; drives by putting them in a refrigerator or freezer and cooling them down to the point where it's possible to get (some) data off the drive before it overheats and stops working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;YMMV.  Good luck!&lt;/p&gt;&#xA;" OwnerUserId="3720" LastActivityDate="2019-11-11T18:57:02.430" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12731" PostTypeId="1" CreationDate="2019-11-11T23:48:42.423" Score="12" ViewCount="970" Body="&lt;p&gt;I've recently acquired an Apple IIc. The internal 5.25&quot; drive does&#xA;seem to make appropriate noises at boot, but I do not (at least not&#xA;yet) have any floppy disks, with software or otherwise. It's an&#xA;earlier 16-RAM-chip motherboard that currently has ROM version 255, in&#xA;case that makes any difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given software (both disk images and individual files) and data files&#xA;on my Linux system, what currently are my options for getting these on&#xA;to the IIc and running/reading them, and, if possible, for copying&#xA;back information generated on the IIc? (I also have a Windows system&#xA;available, but that's far less convenient for me to use for this&#xA;purpose.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Particularly helpful answers will include details about any&#xA;modifications that need to be made to the IIc (including updated ROMs,&#xA;if necessary), additional hardware or supplies required by the&#xA;solution, such as hardware devices, cables, floppy disks, etc., and&#xA;where to get any software required by the solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm open to solutions that do and do not need actual floppies for the&#xA;floppy drive, but of course I'd like to have at least one solution in&#xA;reserve that doesn't use the current floppy drive in case it's&#xA;irreparably broken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of my applications is to do cross-development from my Linux system&#xA;(building and doing initial testing of the software on Linux and then&#xA;copying it to the actual Apple IIc for further testing), so also&#xA;welcome would be comments on how convenient (or not) this would be&#xA;with the various solutions you offer.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-11-13T01:00:26.803" Title="What are my modern options for loading programs and data files on the Apple IIc?" Tags="&lt;apple-ii&gt;&lt;data-transfer&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12732" PostTypeId="2" ParentId="12731" CreationDate="2019-11-12T01:44:01.123" Score="8" Body="&lt;p&gt;You might want to investigate &lt;a href=&quot;http://adtpro.com/&quot; rel=&quot;noreferrer&quot;&gt;ADTPro&lt;/a&gt;.  Since you are using an Apple //c, which already has a serial port, you can easily bootstrap the software by connecting the //c to another computer via a serial cable and/or NULL modem and simply issuing an IN#2 on the Apple.  Once you have ADTPro running, you can start transferring disk images via the serial cable to floppy.   I did this a year or two ago with my Laser 128 and it was super easy to get up and running.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2019-11-12T01:44:01.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12733" PostTypeId="1" CreationDate="2019-11-12T03:57:41.150" Score="19" ViewCount="1697" Body="&lt;p&gt;The C64 has two Time of Day (TOD) clocks, one in each of its &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf&quot; rel=&quot;noreferrer&quot;&gt;6526 CIA&#xA;chips&lt;/a&gt; U1 and U2. These calculate time based on a 60 Hz or 50 Hz&#xA;input to the TOD pin (pin 19); the clock input frequency assumed by&#xA;the CIA is selected via programming bit 7 (TODIN) of CRA (Control&#xA;Register A) to 0 for 60 Hz or 1 for 50 Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the &lt;a href=&quot;https://www.retro-kit.co.uk/user/custom/Commodore/C64/manuals/C64C_Service_Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;C64/C64C Service Manual&lt;/a&gt;, 50 Hz or 60 Hz&#xA;input to both TOD pins is generated from the 9 V AC power input&#xA;converted to a TTL signal using one of the AND gates of a 74LS08&#xA;(U27). Though the schematic on page 21 claims that this is a 60 Hz&#xA;signal, this will surely be 50 Hz in regions of the world where AC&#xA;mains power is 50 Hz, since as far as I know the external power supply&#xA;always generated unregulated 9 V AC from the from the region's AC&#xA;mains via a transformer. (The schematic for a newer version of the&#xA;board on page 32 does say &quot;50 Hz OR 60 Hz&quot; at the AND gate output/U2&#xA;input, though it still says just &quot;60 Hz&quot; at the U1 input.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't seem possible to conclusively tell whether the input is&#xA;actually 50 Hz or 60 Hz. Not only might someone run a PAL C64 in a 60&#xA;Hz mains power region (using that region's external power supply or&#xA;via a step-down transformer), but the NTSC C64 was &lt;a href=&quot;http://www.zimmers.net/cbmpics/c64js.html&quot; rel=&quot;noreferrer&quot;&gt;also sold in&#xA;Japan&lt;/a&gt;, where consumers might have either 50 Hz or 60 Hz mains&#xA;power, depending on region.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the Commodore-supplied software (Kernal, BASIC, other programs)&#xA;have any facilities to set TODIN, or was that just always set to 60&#xA;Hz, causing the TOD clock to run 17% slow outside of North America,&#xA;western Japan and other 60 Hz regions? (And did the software set the&#xA;bit for both CIAs, or was there one that was considered the standard&#xA;one to use?) How did third-party programs that relied on the TOD clock&#xA;deal with this?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Bonus points if you can give the implications of all this for popular&#xA;emulators. For example, Codebase 64's has an article &lt;a href=&quot;https://codebase64.org/doku.php?id=base:initialize_tod_clock_on_all_platforms&quot; rel=&quot;noreferrer&quot;&gt;&quot;Initializing&#xA;TOD clock on all platforms&quot;&lt;/a&gt; which explains how to count&#xA;screen cycles against a TOD clock set for 60 Hz input in order to&#xA;figure out what the actual input should be. But it also says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When running this in Vice, it will always end up detecting the Vice&#xA;  TOD Clock as 60Hz clocked and it will always be counting correct&#xA;  despite of this. In other words: Vice seems to ignore bit 7 of $dc0e&#xA;  and just always clock correctly.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Here are some related questions for even further bonus points. (I&#xA;include these here since the answers are likely to be turned up during&#xA;research for this question.)&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Did C64 BASIC use one of the TOD clocks, or can one check if the&#xA;TOD clock is accurate only with PEEK/POKE or machine language?&lt;/li&gt;&#xA;&lt;li&gt;Were there any other components of the C64 that might also be&#xA;affected by the 50 Hz vs. 60 Hz difference in the 9 V AC power&#xA;supply?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-11-12T07:37:11.017" LastActivityDate="2019-11-13T12:32:12.513" Title="How does the C64 get an accurate TOD clock on 50 Hz power?" Tags="&lt;commodore-64&gt;&lt;power&gt;" AnswerCount="1" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12734" PostTypeId="2" ParentId="12731" CreationDate="2019-11-12T07:05:29.993" Score="14" Body="&lt;p&gt;If you're happy to copy files and use Sneakernet then you could use a disk emulator like &lt;a href=&quot;https://www.bigmessowires.com/floppy-emu/&quot; rel=&quot;noreferrer&quot;&gt;Floppy Emu&lt;/a&gt;, &lt;a href=&quot;http://www.a2heaven.com/webshop/index.php?rt=product/product&amp;amp;path=73&amp;amp;product_id=124&quot; rel=&quot;noreferrer&quot;&gt;SDFloppy II&lt;/a&gt;, &lt;a href=&quot;http://kboohk.com/cart/index.php?route=product/category&amp;amp;path=59&quot; rel=&quot;noreferrer&quot;&gt;wDrive&lt;/a&gt;, etc. (Obviously all product links in this answer are likely to break in the future.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that SmartPort disk emulators require at least a ROM 0 //c. Instructions for upgrading are &lt;a href=&quot;https://www.bigmessowires.com/2015/05/29/apple-iic-rom-upgrade/&quot; rel=&quot;noreferrer&quot;&gt;given here&lt;/a&gt;. There are various upgrade kits that include pre-burned ROMs, e.g. &lt;a href=&quot;https://www.ebluejay.com/ads/item/4629688&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt; and on &lt;a href=&quot;https://www.ebay.com/itm/c-ENHANCEMENT-ROM-3-CHIP-APPLE-IIC-ADDS-UNIDISK-3-5-LIFETIME-WARRNTY-12-/221710345031&quot; rel=&quot;noreferrer&quot;&gt;eBay&lt;/a&gt;. Also note that there is a project developing ehancements to Apple's official //c(+) ROMs: &lt;a href=&quot;https://github.com/mgcaret/rom4x&quot; rel=&quot;noreferrer&quot;&gt;4X and 5X&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But really your first port of call should be the amazing &lt;a href=&quot;http://adtpro.com/&quot; rel=&quot;noreferrer&quot;&gt;ADTPro&lt;/a&gt;. (It's written in Java, so OK for Linux.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First you'll need a serial cable. The ADTPro website provides &lt;a href=&quot;http://adtpro.com/connectionsserial.html#DIN5&quot; rel=&quot;noreferrer&quot;&gt;instructions&lt;/a&gt; on how to make one, and a vendor of both &lt;a href=&quot;http://retrofloppy.com/products/#DIN5DE9&quot; rel=&quot;noreferrer&quot;&gt;serial cables&lt;/a&gt; and known good &lt;a href=&quot;http://retrofloppy.com/products/#USB&quot; rel=&quot;noreferrer&quot;&gt;USB serial adapters&lt;/a&gt; (to use if your PC doesn't have an RS-232 port). Also note:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;... that the original IIc motherboard was not supposed to be able to&#xA;  operate the serial port accurately at speeds higher than 300 baud, but&#xA;  in practice they work fine at all speeds.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For cross-development, ADTPro's ProDOS &lt;a href=&quot;http://adtpro.com/vdrive.html&quot; rel=&quot;noreferrer&quot;&gt;Virtual Drive&lt;/a&gt; feature will likely be of interest. Installing the VSDRIVE driver on a ProDOS disk booted by the //c will allow it to access two virtual hard drives hosted on your PC. You can code on your PC, build into the VSDRIVE drive images, then access them from the //c. (Geo...'s comment suggests you could also host this on a Raspberry Pi.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To avoid having to insert a disk with VSDRIVE into your //c you could add one of the aforementioned drive emulators, and perhaps &lt;a href=&quot;https://www.bigmessowires.com/2018/05/04/apple-iic-internalexternal-drive-switcher/&quot; rel=&quot;noreferrer&quot;&gt;a solution&lt;/a&gt; to switch between the external and internal drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option for a turnkey system (hat tip to Brian H for his comment) is using the previously mentioned &lt;a href=&quot;https://github.com/mgcaret/rom4x&quot; rel=&quot;noreferrer&quot;&gt;ROM 4X&lt;/a&gt; with a RAM disk in a2heaven's battery backed RAM card &lt;a href=&quot;http://www.a2heaven.com/webshop/index.php?rt=product/product&amp;amp;path=73&amp;amp;product_id=146&quot; rel=&quot;noreferrer&quot;&gt;for the original //c motherboard&lt;/a&gt; (or &lt;a href=&quot;http://www.a2heaven.com/webshop/index.php?rt=product/product&amp;amp;path=73&amp;amp;product_id=144&quot; rel=&quot;noreferrer&quot;&gt;subsequent motherboards with the RAM expansion connector&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2019-11-13T01:00:26.803" LastActivityDate="2019-11-13T01:00:26.803" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12735" PostTypeId="2" ParentId="12733" CreationDate="2019-11-12T12:10:08.513" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How does the C64 get an accurate TOD clock on 50 Hz power?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It doesn't, as the Kernal doesn't care for the build in TOD. The Kernal is a quick hack, taken straight from the VC20, operating the clock on interrupt base - like since PET times (as explained on another &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12363/6659&quot;&gt;question about the 6526&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it would care, it could do so by simply handling Bit 7 of CRA (Register 14, $DC0E for CIA1, $DD0E for CIA2).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set to ZERO lets the counter wrap at 60, while&lt;/li&gt;&#xA;&lt;li&gt;set to ONE already flips the second at 50&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] 50 Hz or 60 Hz input to both TOD pins is generated from the 9 V AC power input [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly, thus any clock delivered is based on the power frequency - and its reliability at point of measurement (*1).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It doesn't seem possible to conclusively tell whether the input is actually 50 Hz or 60 Hz&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As with measuring any external signal, it needs to be quantified against a known source. The C64 offers in fact two. One is the system clock, the other would be the video frame rate. While both vary according to the video system used, their relation is in either case unique.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are three basic methods to do so:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Using the 6526 timer to test TOC advancement vs. CPU clock.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Counting frames vs. CPU clock&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Comparing TI$ and TOD&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Especially the last one can easy be done from BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there is of course the ability to cheat by peeking the Kernal to get the Jiffy-Clock setting :)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did the Commodore-supplied software (Kernal, BASIC, other programs) have any facilities to set TODIN,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, not as part outside of diagnosis that is.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How did third-party programs that relied on the TOD clock deal with this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In the only case I've seen back then, the program peeked the Kernel to get the clock rate and set the TOD flag accordingly. Ofc, this would have failed in places where the mains frequency diverged from that assumption.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did C64 BASIC use one of the TOD clocks,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, as already included before, neither Kernal nor BASIC uses the TOD function(*2). Heck, not even &lt;a href=&quot;https://en.wikipedia.org/wiki/Simons%27_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Simons' BASIC&lt;/a&gt;, sold by Commodore to cover the lack of BASIC V2.0 (*3), didn't touch the TOD clock(s).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or can one check if the TOD clock is accurate only with PEEK/POKE or machine language?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly. Well, unless using some BASIC extension that is.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Were there any other components of the C64 that might also be affected by the 50 Hz vs. 60 Hz difference in the 9 V AC power supply?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;None - unless you count interference to sound and graphics due inadequate shielding :) &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Little nitpick:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Not only might someone run a PAL C64 in a 60 Hz mains power region (using that region's external power supply or via a step-down transformer)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;a) PAL is not necessarily associated with 50 Hz. For example, Brazil (and other South American countries) use 60 Hz power and 60 Hz frame rate, but PAL encoding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;b) &lt;em&gt;Usually&lt;/em&gt; it would be a step-up, as most 60 Hz places do as well feature lower mains voltages than 50 Hz countries.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Means that this is only a good source if noise stays beyond a certain threshold. Otherwise it may be read and let the clock run faster than expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Once in a while it's worth to remember that the C64 design was a quick hack based on existing hardware (proposed console) and Software (VIC20 Kernal and PET BASIC). As a result none of the new abilities are used in the BASIC, while the Kernal got only minor adjustments to make it work as fast as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - In some countries, notably the UK, the C64 faced tough competition by computers offering way better BASIC, so Commodore made several special bundling where Simons' BASIC was included.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-13T12:32:12.513" LastActivityDate="2019-11-13T12:32:12.513" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12736" PostTypeId="2" ParentId="5893" CreationDate="2019-11-12T14:24:59.190" Score="3" Body="&lt;p&gt;A more abstract answer : speeding up the computations always relies on narrowing some of the data spaces.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Narrowing the color space : Simplifying any kind of alpha&#xA;transparency or remove it entirely. Simplifying / factorizing the RGB&#xA;encoding by using indexed colors. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Narrowing the rendering space : Don't redraw the whole scene at each&#xA;cycle, instead buffer the &quot;dirty&quot; parts and redraw only those ones.&#xA;In #d, use a BSP tree or culling to render only the faces that can be&#xA;seen by the player.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Narrowing the 3d space : don't use floats for coordinates. Round&#xA;everything up all the time. Use parallax instead of real 3d.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Narrow the angles : Instead of 360 degrees, only allow stuff directly&#xA;facing the camera (pure 2d) or only at 45 degrees angle (isometric),&#xA;or fake the height (doom-like raytracing engine). Pre-buffer the&#xA;values of the cos and sin for the most used angles.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Even narrowing the computer code space : Use assembly language to disregard a lot of failsafes in loops or potential input/output values, and instead go straight to the point. Sometimes, copy and paste the same code 10 times rather than having a for..next loop&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="8164" LastActivityDate="2019-11-12T14:24:59.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12737" PostTypeId="1" CreationDate="2019-11-12T20:56:20.127" Score="43" ViewCount="9058" Body="&lt;p&gt;Some of the early PC 3D graphics cards such as the 3dfx Voodoo Graphics cards had a passthrough port to enable them to switch to a secondary card to display 2D graphics.&#xA;I am curious to know why these cards were incapable of good 2D graphics in themselves, and what caused them to depend on another card for 2D rather than using their 3D accelerated chipset to also do 2D, as is usually done today.&lt;/p&gt;&#xA;" OwnerUserId="3776" LastEditorUserId="3776" LastEditDate="2019-11-13T09:53:36.633" LastActivityDate="2019-11-20T08:42:48.830" Title="Why were some early PC 3D cards unsuitable for 2D graphics?" Tags="&lt;ibm-pc&gt;&lt;graphics&gt;&lt;video&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12738" PostTypeId="2" ParentId="12737" CreationDate="2019-11-12T21:19:58.797" Score="60" Body="&lt;p&gt;Early high-performance 3D accelerators such as &lt;a href=&quot;https://en.wikipedia.org/wiki/3dfx_Interactive#Voodoo_Graphics_PCI&quot; rel=&quot;noreferrer&quot;&gt;the Voodoo Graphics&lt;/a&gt; have limited framebuffer resolutions (640×480 for most Voodoo Graphics configurations, 800×600 for the Voodoo2 in non-SLI) and colour depths (16-bit with dithering), which make them unsuitable for 2D — in the second half of the nineties, 1024×768 was a requirement at least in computer magazines. Their texture mapping units don’t support very large textures either (256×256), so they can’t map a 2D display onto 3D. The architecture also uses a number of optimisations which work for games but not for general desktop use: textures are compressed, and the output is low-pass filtered to minimise the impact of dithering (so it ends up somewhat blurry).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Skipping the 2D section also means that the chipsets don’t have to deal with all the complexities of PC graphics: text-mode support (character generator etc.), a VGA-compatible BIOS... The 3Dfx hardware first met with success in the arcade world where these aspects aren’t a consideration. To some extent 3Dfx’s success was a case of serendipity: they happened to have a good 3D chip, proven in the arcade, which could be used in an add-on PC product just at the time PCs became fast enough to whet gamers’ appetite for 3D games but leave them wanting (Quake...) and RAM got fast enough and cheap enough. They also had a decent API (Glide) and managed to land some significant games (Tomb Raider, Grand Theft Auto...). And perhaps most importantly, their 3D acceleration was significant enough, compared with software rendering and the hardware competition, that gamers were willing to buy a 3D-specific add-on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setting aside transistor budget to implement 2D support would have meant reducing the 3D performance; early accelerators were large chips for their time. There was one Voodoo competitor which supported 2D, &lt;a href=&quot;https://en.wikipedia.org/wiki/Rendition_(company)#V%C3%A9rit%C3%A9_V1000&quot; rel=&quot;noreferrer&quot;&gt;the Rendition Vérité&lt;/a&gt;, but it was slower than the Voodoo Graphics and its VGA performance was abysmal (10 fps in DOOM). The other realistic Voodoo competitor, &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerVR#Series1_(NEC)&quot; rel=&quot;noreferrer&quot;&gt;the PowerVR Series1&lt;/a&gt;, was also 3D-only. Other combined 2D/3D accelerators at the time (&lt;a href=&quot;https://en.wikipedia.org/wiki/Matrox_Mystique&quot; rel=&quot;noreferrer&quot;&gt;Matrox Mystique&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/S3_ViRGE&quot; rel=&quot;noreferrer&quot;&gt;S3 ViRGE&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/ATI_Rage&quot; rel=&quot;noreferrer&quot;&gt;ATI 3D RAGE&lt;/a&gt;) had much lower 3D performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The situation with 3D accelerators is similar to that of sound cards a few years earlier: they were sold primarily for game-players, until they became unavoidable for everyone... As long as they targeted a subset of the market, it made sense for them to be add-on cards rather than replacements (or until the GeForce came out).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-11-13T13:21:29.613" LastActivityDate="2019-11-13T13:21:29.613" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12739" PostTypeId="1" AcceptedAnswerId="12741" CreationDate="2019-11-13T07:26:16.823" Score="9" ViewCount="595" Body="&lt;p&gt;The Commodore 64/128 &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_REU&quot; rel=&quot;noreferrer&quot;&gt;RAM Expansion Unit&lt;/a&gt;s used a DMA controller&#xA;to move data between the REU's RAM and system RAM (or I/O space). One&#xA;would set the addreses, length and direction for the transfer (or&#xA;verify) operation and trigger it; the CPU would then be &quot;paused&quot; while&#xA;the DMA controller took over the bus to do the transfer, with the CPU&#xA;resuming when the transfer was complete. (The REU DMA unit would also&#xA;handle the situation where DMA had to be paused so the VIC-II video&#xA;chip could access memory during what were normally &quot;CPU&quot; memory&#xA;cycles.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm guessing, based on the schematics in the &lt;a href=&quot;https://www.retro-kit.co.uk/user/custom/Commodore/C64/manuals/C64C_Service_Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;C64/C64C Service&#xA;Manual&lt;/a&gt;, that this worked something along the lines of the&#xA;DMA controller asserting &lt;code&gt;D̅M̅A̅&lt;/code&gt; on the cartridge port, which will bring&#xA;the CPU's &lt;code&gt;RDY&lt;/code&gt; (&quot;pause CPU&quot;) and &lt;code&gt;CAEC&lt;/code&gt; (CPU &quot;address enable&#xA;control,&quot; tristating the address/data buses and &lt;code&gt;R/W̅&lt;/code&gt;) lines low when&#xA;the VIC-II is asserting &lt;code&gt;BA&lt;/code&gt; (&quot;bus available,&quot; also on the cartridge&#xA;port) and its &lt;code&gt;AEC&lt;/code&gt; line, at which point the DMA controller could do&#xA;its thing (pausing when the VIC-II needs the bus) until completion,&#xA;then releasing &lt;code&gt;D̅M̅A̅&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody know the exact details and timings of how this worked, or&#xA;have a reference to documentation describing this?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-11-13T17:16:06.583" Title="What is the exact bus protocol used by the C64/C128 REU?" Tags="&lt;commodore-64&gt;&lt;commodore-128&gt;&lt;dma&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12740" PostTypeId="2" ParentId="12737" CreationDate="2019-11-13T12:25:40.487" Score="10" Body="&lt;p&gt;In the case of the PowerVR PCX1 and PXC2 devices (as in e.g. the Matrox 'm3D' and Videologic 'Apocalyse3D/3Dx') there was never any intention to directly support the 2D operations (e.g. blitting/rectangle filling/ bit map caching) required for the Windows system.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since these devices could write directly to the 2D card's framebuffer memory, via the burst write facility of the PCI bus, there seemed little point in duplicating the 2D card's functionality. Instead, the silicon was dedicated entirely to 3D rendering functions.(IIRC the 3Dfx system had 3 packages whereas the PowerVR solution was all crammed into a single device)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another reason was the frame buffer itself; Why completely duplicate storage (and increase cost) when the user had already paid for the RAM on the 2D card?&#xA;Those particular PowerVR devices could &lt;em&gt;directly&lt;/em&gt; render to (up to) a 1024x1024 image, which was a fair chunk of RAM in those days&lt;sup&gt;&lt;b&gt;&amp;#9827;&lt;/b&gt;&lt;/sup&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(In theory, given that the stride register was 12bit, I &lt;strong&gt;guess&lt;/strong&gt; the drivers could have been modified to allow the card to render a larger frame buffer by doing it in multiple sections, but I would be surprised if (m)any 2D cards of that era supported higher resolutions)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This eventually changed due to increasing integration of 2D and 3D, in silicon, increased render target and FPS requirements (&lt;em&gt;and also &lt;strong&gt;possibly&lt;/strong&gt; because, IIRC (but this was a long time ago so take with the usual measure of salt), later versions of Windows made it impossible to hot-patch the 2D card driver...&lt;/em&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&lt;b&gt;&amp;#9827;&lt;/b&gt;&lt;/sup&gt; &lt;em&gt;IIRC it was tricky enough to convince a couple of vendors that 1 or 2MB of texture memory was not really sufficient for a 3D game and that they really should go for 4M&lt;/em&gt;B.&lt;/p&gt;&#xA;" OwnerUserId="6712" LastEditorUserId="6712" LastEditDate="2019-11-20T08:42:48.830" LastActivityDate="2019-11-20T08:42:48.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12741" PostTypeId="2" ParentId="12739" CreationDate="2019-11-13T17:05:02.837" Score="10" Body="&lt;p&gt;The basic behavior is correctly stated in the question. However, the details of the timing have to account for the rather complicated details of how RDY works on the NMOS version 6502 &lt;em&gt;and&lt;/em&gt; MOS 6510 (&lt;strong&gt;Note&lt;/strong&gt;: 65C02 is different). From the data sheet from Commodore, it states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Ready (RDY)&lt;/strong&gt; - This input signal allows the user to single cycle the microprocessor on all cycles &lt;strong&gt;except write cycles.&lt;/strong&gt; A negative transition to the low state during or &lt;strong&gt;coincident with phase one (01) and up to 100ns after phase two (02)&lt;/strong&gt; will halt the microprocessor with the output address lines reflecting the current address being fetched. This condition will remain through a subsequent phase two in which the Ready signal is low. This feature allows microprocessor interfacing with low speed PROMS as well as fast&#xA;  (max. 2 cycle) Direct Memory Access (DMA). &lt;strong&gt;If Ready is low&#xA;  during a write cycle, it is ignored until the following read operation.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, besides what is specified for timing in the question, the critical bit is that you need to wait until a read cycle is being setup by the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of the REU, this is implicit in how the device works. Since the DMA operation is triggered by the CPU writing to the I/O space ($DE00), the following CPU operation would be to fetch the next instruction. So that guarantees a read is being setup by the CPU when the REU asserts D̅M̅A̅ during Phi2 low.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To summarize, D̅M̅A̅ should be asserted while Phi2 is low and BA is high, AND with the CPU pending a READ operation. Then, the DMA device (REU) is able to master the bus on the next Phi2 high cycle, and may continue to do so unless BA is removed. In that case, it has to wait on the VIC-II to reassert BA, and then continue. When the operation is done, the D̅M̅A̅ signal is removed by the device, and then the CPU continues with its read operation.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-11-13T17:16:06.583" LastActivityDate="2019-11-13T17:16:06.583" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12742" PostTypeId="2" ParentId="12701" CreationDate="2019-11-14T10:42:31.437" Score="8" Body="&lt;p&gt;16 KB cartridge does not require any additional components, you connect &lt;code&gt;OE&lt;/code&gt; to the &lt;code&gt;/CS1&lt;/code&gt;, and &lt;code&gt;CE&lt;/code&gt; to the &lt;code&gt;/SLTSL&lt;/code&gt; signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;32KB cartridge also does not require any additional components, you connect OE to the &lt;code&gt;/CS12&lt;/code&gt; signal, and &lt;code&gt;CE&lt;/code&gt; to &lt;code&gt;/SLTSL&lt;/code&gt; signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course all address and data pins must be connected to the bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All above mentioned signals are present on the &lt;a href=&quot;https://www.msx.org/wiki/MSX_Cartridge_slot#Pinout_of_Standard_MSX_Cartridge_slot&quot; rel=&quot;nofollow noreferrer&quot;&gt;slot connector&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design is very simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reading updates to your question I wonder where did you take your assumptions from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have EEPROM/flash chip, and you have slot connector, you need to wire them properly so that bus can read contents of the chip (and possibly be able to write to chip if it supports this operation).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you connect address lines of the slot connector to the address input of the chip, number of address inputs of the chips defines number of wires from the connector;&lt;/li&gt;&#xA;&lt;li&gt;you connect 8 data lines between bus connector and chip;&lt;/li&gt;&#xA;&lt;li&gt;you connect /SLTSL to the chip's /CE;&lt;/li&gt;&#xA;&lt;li&gt;you connect /CS1 or /CS12 to the chip's /OE;&lt;/li&gt;&#xA;&lt;li&gt;you connect /WR to the chip's /WE (if this chip has this input);&lt;/li&gt;&#xA;&lt;li&gt;you connect pins 45 and 47 together, and connect them to the Vcc pin of the chip;&lt;/li&gt;&#xA;&lt;li&gt;you connect pins 41 and 43 together, and connect them to the GND pin of the chip;&lt;/li&gt;&#xA;&lt;li&gt;you put power decoupling capacitor of 0.1 uf between Vcc ad GND pins of the chip, closer to these pins is the better.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Some ROM/flash chips may have some more inputs (like PGM) and you &lt;strong&gt;must&lt;/strong&gt; read the datasheet and connect them as instructed by the datasheet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to yor question and assumptions.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you do not need a pull down resistor on the /OE line unless you are obsessed with electircal termination, but if you are - this possible one-fix-all termination solution is wrong;&lt;/li&gt;&#xA;&lt;li&gt;you should connect /SLTSL to /CE and /CSxx to /OE and not vice versa. You can do other way around, and it will work, but it is practically wrong in terms of power consumption;&lt;/li&gt;&#xA;&lt;li&gt;you must not have +5V and /WR signals of the connector connected together;&lt;/li&gt;&#xA;&lt;li&gt;you can connect +5V to the /WE input of the EEPROM/flash, but then you will not be able to update chip contents in circuit programmatically through the machine;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="8258" LastEditorUserId="8258" LastEditDate="2019-11-25T08:44:09.197" LastActivityDate="2019-11-25T08:44:09.197" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="12743" PostTypeId="2" ParentId="12701" CreationDate="2019-11-14T11:11:59.253" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So my question is what is the simplest circuit for building an MSX-1 16K ROM cartridge or 32K ROM cartridge (using modern easy to get components)?.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As described &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12742/6659&quot;&gt;in this answer&lt;/a&gt;, there is no need for any additional circuitry (*1). This is true for up to 64 KiB (512 KiBit) in size. Only such larger as 64 KiB (often dubbed as Megabit cartridges) do need mapper logic/chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These Boards are quite simple:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aPQ2Z.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aPQ2Z.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Picture taken from &lt;a href=&quot;https://www.msx.org/forum/msx-talk/hardware/msx-eprom-cart-testing?page=2&quot; rel=&quot;nofollow noreferrer&quot;&gt;a thread&lt;/a&gt; on &lt;a href=&quot;https://www.msx.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSX.org&lt;/a&gt; about EPROM test boards)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have an Atmel AT28C256 EEPROM available to use. I am asking for a 16K and 32K circuit because there are two versions of the game.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You may use the same board/circuit for both. MSX design was made with lowering cartridge cost in mind - at least for sizes imaginable in the early 80s :) Next to all boards available today (and even several from original games) are configurable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since MSX is well supported by new developments, several companies offer simple cartridge boards (and housings) like you need. RC.SE does not favour any such, thus use the engine of your choice and search for &lt;em&gt;'MSX Cartridge Kit'&lt;/em&gt; or &lt;em&gt;'Empty MSX Cartridge'&lt;/em&gt; or &lt;em&gt;'MSX cartridge PCB'&lt;/em&gt;. you'll be surprised about the offers available. Some already include Flash chips like yours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if you really want to go all the length, several comments on the question have recommended this &lt;a href=&quot;https://github.com/apoloval/msx-cartridge&quot; rel=&quot;nofollow noreferrer&quot;&gt;Githup repository&lt;/a&gt; which, on first sight, seams quite adequate. They are made using &lt;a href=&quot;http://www.kicad-pcb.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;KiCad&lt;/a&gt;. If KiCad isn't your thing, there's a project for &lt;a href=&quot;https://easyeda.com/feather/MSX_Eprom_Cart-jXRL3lDxP&quot; rel=&quot;nofollow noreferrer&quot;&gt;a similar PCB&lt;/a&gt; up on &lt;a href=&quot;https://easyeda.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;EasyEDA&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - A buffer capacitor to ease power issues is always welcome.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-14T12:51:38.087" LastActivityDate="2019-11-14T12:51:38.087" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12744" PostTypeId="2" ParentId="5941" CreationDate="2019-11-14T11:18:17.923" Score="9" Body="&lt;p&gt;Computer &quot;Composit&quot; (Leningrad+).&#xA;&lt;a href=&quot;http://sblive.narod.ru/ZX-Spectrum/Composite/Composite.htm&quot; rel=&quot;noreferrer&quot;&gt;http://sblive.narod.ru/ZX-Spectrum/Composite/Composite.htm&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/V1oEG.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V1oEG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sblive.narod.ru/ZX-Spectrum/Composite/CompositeSCH-MONT.gif&quot; rel=&quot;noreferrer&quot;&gt;http://sblive.narod.ru/ZX-Spectrum/Composite/CompositeSCH-MONT.gif&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Left to right:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;KEMPSTON&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Right &lt;/li&gt;&#xA;&lt;li&gt;Left&lt;/li&gt;&#xA;&lt;li&gt;Down &lt;/li&gt;&#xA;&lt;li&gt;Up &lt;/li&gt;&#xA;&lt;li&gt;Attack/Fire &lt;/li&gt;&#xA;&lt;li&gt;Common&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;TAPE&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Input&lt;/li&gt;&#xA;&lt;li&gt;Ground&lt;/li&gt;&#xA;&lt;li&gt;Out&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;TV&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Red&lt;/li&gt;&#xA;&lt;li&gt;Green&lt;/li&gt;&#xA;&lt;li&gt;Audio Out&lt;/li&gt;&#xA;&lt;li&gt;Blue&lt;/li&gt;&#xA;&lt;li&gt;Video Out&lt;/li&gt;&#xA;&lt;li&gt;Ground&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;+5V 0.6 Ampers&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;+5 Volts, 1 Amper&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Ground &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Ground &lt;/li&gt;&#xA;&lt;li&gt;Ground &lt;/li&gt;&#xA;&lt;li&gt;Ground &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The circuit board is similar to Leningrad-1.&#xA;&lt;a href=&quot;http://sblive.narod.ru/ZX-Spectrum/Leningrad48k/Leningrad48k.htm&quot; rel=&quot;noreferrer&quot;&gt;http://sblive.narod.ru/ZX-Spectrum/Leningrad48k/Leningrad48k.htm&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/6iO5U.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6iO5U.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15563" LastEditorUserId="15563" LastEditDate="2019-11-14T11:53:24.203" LastActivityDate="2019-11-14T11:53:24.203" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12745" PostTypeId="1" AcceptedAnswerId="12746" CreationDate="2019-11-14T14:46:46.333" Score="9" ViewCount="1347" Body="&lt;p&gt;Were there any MS-DOS games or graphics software that were known to take advantage of VESA BIOS Extensions/Accelerator Functions (VBE/AF)?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;some of the functions defined in the standard are ... Bit Block Transfers (Bit Blt), off screen sprites, hardware panning&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now that Amiga/Atari ST games relied on hardware blitting and sprites very heavily, I'd be surprised if MS-DOS game developers wouldn't start using similar capabilities as soon as video cards started supporting them.&lt;/p&gt;&#xA;" OwnerUserId="3303" LastEditorUserId="4744" LastEditDate="2019-11-15T07:20:30.890" LastActivityDate="2019-11-15T07:20:30.890" Title="Were any DOS games (or software) known to use VBE/AF?" Tags="&lt;ms-dos&gt;&lt;graphics&gt;&lt;programming&gt;&lt;gaming&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12746" PostTypeId="2" ParentId="12745" CreationDate="2019-11-14T15:30:40.250" Score="17" Body="&lt;p&gt;Yes, there were, even though AF became available rather late in the day for DOS games (1996). However AF was never successful or even really relevant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the nineties, supporting graphics resolutions beyond those defined by VGA was complex; see Fractint’s source code for evidence of that. Some programs had driver interfaces (notably, AutoCAD and Windows), but for most DOS programs, support was limited to whatever the developers knew or whatever was handled by the underlying library they used. The VESA BIOS extensions were introduced to alleviate this to some extent, and became popular quite quickly (for the time). VBE was designed as a firmware extension, supported by display adapters’ option ROMs, but it could also be implemented by TSRs. Many manufacturers’ implementations of VBE were sub-par, and of course older cards didn’t have them; a company named SciTech carved a niche for itself with its &lt;a href=&quot;https://en.wikipedia.org/wiki/UniVBE&quot; rel=&quot;noreferrer&quot;&gt;UniVBE&lt;/a&gt; tool, which provided a high-quality VBE implementation for a large number of cards. This allowed developers to drop chipset-specific code and rely on VBE instead (at least to set video modes, palettes, and obtain a framebuffer). Many games even shipped UniVBE, or included built-in runtime versions (&lt;em&gt;e.g.&lt;/em&gt; Grand Theft Auto).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time, manufacturers were also adding acceleration features to their display adapters: hardware-supported functions such as bitblt, drawing geometric shapes, and even handling the mouse cursor. VBE didn’t provide access to any of these, but the target markets were higher-level anyway (AutoCAD, Windows, OS/2...) and drivers could be relied upon to provide an interface to the accelerated features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SciTech, alongside UniVBE (and SciTech Display Doctor), also developed a &lt;a href=&quot;https://github.com/kendallb/scitech-mgl&quot; rel=&quot;noreferrer&quot;&gt;Multi-platform Graphics Library&lt;/a&gt;, and this did include functions which could benefit from hardware acceleration. They proposed AF to VESA, no doubt based on interface ideas (if not an actual implementation) between MGL and UniVBE, following a driver-based model (&lt;code&gt;VBEAF.DRV&lt;/code&gt;) rather than firmware-hosted functions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unsurprisingly, any game which used &lt;a href=&quot;https://github.com/kendallb/scitech-mgl&quot; rel=&quot;noreferrer&quot;&gt;SciTech’s Multi-platform Graphics Library&lt;/a&gt; &lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.archives/WMrZXwwQoUo&quot; rel=&quot;noreferrer&quot;&gt;4.0 or later&lt;/a&gt; (1997) for operations such as &lt;a href=&quot;https://github.com/kendallb/scitech-mgl/blob/cdfdbfcc097079c2c237440fcbe77946dbb2ec06/src/mgl/bitblt.c#L754&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;MGL_bitBlt&lt;/code&gt;&lt;/a&gt; would end up using VBE/AF functions if MGL determined that that was appropriate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least one other DOS library included support for VBE/AF, &lt;a href=&quot;https://liballeg.org/&quot; rel=&quot;noreferrer&quot;&gt;Allegro&lt;/a&gt; (which started life on the Atari ST, although it wasn’t released there). Shawn Hargreaves, the original developer of Allegro, also developed an alternative VBE/AF implementation (replacing UniVBE), &lt;a href=&quot;http://www.shawnhargreaves.com/freebe/&quot; rel=&quot;noreferrer&quot;&gt;FreeBE/AF&lt;/a&gt;. I’m not sure that any commercial game was ever developed for DOS using Allegro. See &lt;a href=&quot;https://archive.org/details/pachorror&quot; rel=&quot;noreferrer&quot;&gt;Pac-Horror&lt;/a&gt; for one example of an actual game which looks for &lt;code&gt;VBEAF.DRV&lt;/code&gt; (the tell-tale sign of a program attempting to use VBE/AF).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It’s possible that some games included VBE/AF support without using a third-party library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagine that SciTech hoped that other companies would also provide AF drivers, and that other developes would rely on AF for graphics. But by the time AF came out, Windows 95 dominated the desktop, and DirectX had made it viable for games, with widespread support from hardware manufacturers (July 1997 saw the release of DirectX 5). SciTech themselves didn’t push AF much after this, and moved on to another driver architecture (Nucleus, which formed the core of &lt;a href=&quot;https://en.m.wikipedia.org/wiki/SciTech_SNAP&quot; rel=&quot;noreferrer&quot;&gt;SNAP&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-11-15T06:05:21.853" LastActivityDate="2019-11-15T06:05:21.853" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12747" PostTypeId="1" AcceptedAnswerId="12748" CreationDate="2019-11-14T19:56:16.907" Score="60" ViewCount="19216" Body="&lt;p&gt;Standard belief is that the floppy disk controllers used on PCs are incapable of reading Amiga floppy disks, due to the PC disk controller expecting a very specific low-level format of disks, whilst the Amiga disk controller is much more flexible and choosing a low-level format which is incompatible but can fit more data onto a disk. This has been discussed in a few questions on this site (put &lt;code&gt;amiga floppy&lt;/code&gt; into the search box to see them).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there's references to a &quot;two-drive trick&quot; which allows a PC with two floppy drives to successfully read an Amiga floppy disk and generate an ADF image file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found &lt;code&gt;adfread-1.1&lt;/code&gt; which implements the two-drive trick. Its instructions are pretty simple:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;- Install fdrawcmd.sys from http://simonowen.com/fdrawcmd/&#xA;- Insert your Amiga disk in A:&#xA;- Insert the PC-formatted disk in B:&#xA;- From a command prompt, run:  adfread.exe newimage.adf&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There's no information about how the &quot;two-drive trick&quot; works. Source code is included but largely uncommented so I'm mystified as to how this is supposed to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How does the two-drive trick work? Why does it require two drives, and how does having two drives get over the fundamental incompatibility of Amiga disks and PC floppy disk controllers?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="149" LastEditorUserId="11916" LastEditDate="2020-01-03T12:39:24.237" LastActivityDate="2020-01-03T12:39:24.237" Title="What is the &quot;two-drive trick&quot; that can read Amiga disks on a PC?" Tags="&lt;amiga&gt;&lt;ibm-pc&gt;&lt;floppy-disk&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="12748" PostTypeId="2" ParentId="12747" CreationDate="2019-11-14T20:29:45.177" Score="71" Body="&lt;p&gt;This only works with 2 drives on the same controller and cable. The floppy controller doesn't know when the disk (hardware) has been switched on the port (software), so a transfer command can be issued on the IBM formatted disk, but run on the Amiga disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This answer comes from the documentation for the utility Disk2FDI.  Here's an excerpt from docs\tech\rawflopy.doc in the Disk2FDI zip file:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I.2. The algorithm&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This algorithm requires two disk drives installed (read the&#xA;  1DISKDRV.TXT file to get an explanation why reading raw data generally&#xA;  with only 1 disk drive is physically impossible). Insert the disk you&#xA;  want to fully read in one drive (let’s say A: in this example). Insert&#xA;  another disk in the other drive (B: in this example). This disk must&#xA;  be IBM-formatted.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Select drive A: using port 3F2h. Also turn on motors for both A: and&#xA;  B:. Go to the desired track and side using standard FDC 765 commands.&#xA;  Swap to B: using port 3F2h. Select density appropriate for&#xA;  IBM-formatted disk in B: using port 3F7h. Issue a “Read a Track&#xA;  (Diagnostic)” command using the FDC 765. The parameters should match a&#xA;  sector that is physically present on the IBM-formatted disk, for&#xA;  example sector #1. For this command, set a sector size of at least 8KB&#xA;  (even if the physical sector is 512 bytes long). 16KB and 32KB sector&#xA;  sizes can be set to read more raw data. DMA registers should have been&#xA;  set accordingly. Watch continuously the DMA address until it is&#xA;  different from the starting address. When it is so, it means that the&#xA;  765 has begun transferring sector data, so it has previously found the&#xA;  sector header on B:. As soon as the DMA address is increased, swap to&#xA;  A: using port 3F2h. This is the main idea behind this technique. The&#xA;  765 has no way to know disk selection has changed because port 3F2h is&#xA;  not linked to it. This 1st step was discovered on the 11th of&#xA;  December, 1999. Change density (bit rate) using port 3F7h. For a full&#xA;  track read, including MFM synchronization bits, you must set a bit&#xA;  rate twice the standard value. For example, when reading a 250 000&#xA;  bits/sec track (double-density track), set the bit rate to 500 000&#xA;  bits/sec. This 2nd step was discovered on the 18th of December, 1999.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The FDC 765 will now read the disk in drive A: from now on, thinking&#xA;  it is a big sector on disk in drive B:. Wait for FDC interrupt. Of&#xA;  course, most status bits at the end of this operation should be just&#xA;  ignored, such as the data error (CRC) flag (which will be obviously&#xA;  set). The main indicator of a successful operation is the DMA counter&#xA;  or address. For a 32KB “sector” read, the DMA address will equal the&#xA;  starting address plus 32768 if the operation was successful.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Since some bytes were read at first from drive B:, and the swap of&#xA;  drives and bit rates will require a little time to settle, it is wise&#xA;  not to consider the first 50 bytes read.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If the track to be read contains an IBM sector, drive swapping may&#xA;  not be necessary. Yet, bit rate swapping can be useful, especially for&#xA;  protected or non-standard tracks.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is credited in the documentation to Bernd Schmidt&lt;/p&gt;&#xA;" OwnerUserId="7160" LastEditorUserId="2037" LastEditDate="2019-11-15T07:48:31.180" LastActivityDate="2019-11-15T07:48:31.180" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12749" PostTypeId="2" ParentId="12745" CreationDate="2019-11-14T23:58:06.747" Score="3" Body="&lt;p&gt;At the time where new capabilities came, the market was very fragmented.&#xA;It was the 80486 era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some PCs had low end graphic cards that couldn't do anything (like Tridents, etc) and the top of the line, at that time, was the ET4000 from Tseng Labs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A common problem is that you couldn't access the whole video memory at once, but by segments. Also, on some cards writing to video memory was very slow (let's not even think about reading).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to segments, it was more practical to draw video frames in main memory and then copy the whole thing to the video ram as switching segments not only took some time but made drawing code very complex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fastest way to draw sprites on a PC at the time was to compress the sprite in RLE with a width matching the width of the screen and generate code that would simply draw the sprite: copy x bytes to the buffer, skip x bytes in the video buffer, copy x bytes to the buffer, etc. It was almost impossible to switch the screen banks in a high performance way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things started to get standardized with VESA, normalizing the cards themselves, and SciTech making a driver supporting many cards and giving access to the whole buffer on many models.&#xA;It looked good for a couple years, but I don't recall anyone using card specific features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually the Pentium came out and, all of this became phased out as the VESA architecture was tied to the 80486.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to answer the question: I don't remember anyone (I worked on different commercial game projects back then) using card specific features. Usually development was made with cards that exposed the whole video buffer because it was simpler to see when things go wrong.&#xA;Afterwards, the display was either done directly in video ram for fast cards (they would just put data in a small stack and then write it to their main ram, freeing the CPU faster), or in ram and then copied to video afterwards for small ones.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastActivityDate="2019-11-14T23:58:06.747" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12750" PostTypeId="1" CreationDate="2019-11-15T02:30:30.553" Score="5" ViewCount="209" Body="&lt;p&gt;&lt;a href=&quot;https://www.myabandonware.com/game/el-fish-1lo&quot; rel=&quot;noreferrer&quot;&gt;El-Fish&lt;/a&gt; is a fish tank &quot;game&quot;, where you have virtual fish on your screen. The game has no goal, it's more like an interactive screen saver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got my version from a number of different sources, one was Vetusware, but since no copy I got worked, I tried a number different ones - however literally none of them worked in the end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to install El-Fish on an MS-DOS 6.22 VM (Virtualbox). The VM otherwise works fine, including Windows (for work groups) 3.11, networking, CD-ROM, sound, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When running the &lt;code&gt;install.exe&lt;/code&gt; from whatever install media, it hangs, doesn't read any of the drives, and just sits there. When I remove the install media drive, it brings up an error message that &lt;code&gt;install.prg&lt;/code&gt; cannot be found (that file is in the root directory of the install media, right next to &lt;code&gt;install.exe&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering if this is a known issue, and whether there's a trick I could use to install the game/screensaver without going through the installation routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;when running &lt;code&gt;file elfish.pkd&lt;/code&gt; on my Linux host it returns: &lt;code&gt;elfish.pkd: Biosig/Heka Patchmaster&lt;/code&gt;. So, some sort of archived directory structure, I assume?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;install.prg&lt;/code&gt; file, is some sort of script file, similar to an NSIS install script, as far as I can tell. Since it's an ASCII text file, I've uploaded the text here (&lt;em&gt;paste binned&lt;/em&gt;): &lt;a href=&quot;https://0bin.net/paste/raBfhFIfDBj7l05W#HnJnyE9RnJ0q8aJhFqL-/C8B4HGx2thxY8LztFf4XTd&quot; rel=&quot;noreferrer&quot;&gt;https://0bin.net/paste/raBfhFIfDBj7l05W#HnJnyE9RnJ0q8aJhFqL-/C8B4HGx2thxY8LztFf4XTd&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The goal here, is to get the software unpacked and installed, if I can just get the files to decompress, I can simply copy the files over to the target MS-DOS computer or VM, respectively.&lt;/p&gt;&#xA;" OwnerUserId="3287" LastActivityDate="2019-11-15T09:52:20.137" Title="Can't install El-Fish on MS-DOS 6.22" Tags="&lt;ms-dos&gt;&lt;software&gt;&lt;compression&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12752" PostTypeId="1" AcceptedAnswerId="12756" CreationDate="2019-11-15T04:56:40.073" Score="8" ViewCount="927" Body="&lt;p&gt;The ever-so-popular &lt;a href=&quot;https://en.wikipedia.org/wiki/Epyx_Fast_Load&quot; rel=&quot;noreferrer&quot;&gt;EPYX Fast Load cartridge&lt;/a&gt; for the&#xA;Commodore 64 included a &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS_Wedge&quot; rel=&quot;noreferrer&quot;&gt;DOS wedge&lt;/a&gt; (adding commands such as&#xA;&lt;code&gt;$&lt;/code&gt; to list the files on a disk, &lt;code&gt;/filename&lt;/code&gt; to load a file and &lt;code&gt;@&lt;/code&gt; to&#xA;show the disk error status) and a &lt;a href=&quot;https://en.wikipedia.org/wiki/Fast_loader&quot; rel=&quot;noreferrer&quot;&gt;fast loader&lt;/a&gt; that sped up&#xA;certain disk operations, such as loading files from the disk. There&#xA;were &lt;a href=&quot;https://www.c64-wiki.com/wiki/Comparison_of_fast_loaders&quot; rel=&quot;noreferrer&quot;&gt;many other&lt;/a&gt; cartridges, KERNAL ROM replacements, etc.&#xA;with similar functionality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any freely usable and modifiable open source projects that&#xA;offer either or both of these functionalities? I'm interested in both&#xA;pure software solutions (presumably loaded from disk) and solutions&#xA;that involve hardware so a cartridge could be used. (The Epyx Fast&#xA;Load had not only the software in ROM, but also &lt;a href=&quot;https://rr.pokefinder.org/wiki/Epyx_FastLoad&quot; rel=&quot;noreferrer&quot;&gt;special&#xA;support&lt;/a&gt; in the cartridge to allow it to &quot;disappear&quot; after&#xA;a short time, restoring RAM to the $8000-$9FFF address range so that&#xA;programs could use it.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is intended for use on real hardware as well as emulators, and&#xA;ideally the software should work with an &lt;a href=&quot;https://www.c64-wiki.com/wiki/SD2IEC&quot; rel=&quot;noreferrer&quot;&gt;SD2IEC&lt;/a&gt; as well. Also,&#xA;cross-build from a Linux platform would be greatly appreciated, though&#xA;this is probably something one could add oneself if the standard build&#xA;platform were a C64 or something else.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-01-14T19:25:04.830" Title="Are there any open-source C64 DOS wedges and fast loaders?" Tags="&lt;commodore-64&gt;&lt;floppy-disk&gt;&lt;game-cartridge&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12754" PostTypeId="2" ParentId="12750" CreationDate="2019-11-15T09:52:20.137" Score="3" Body="&lt;p&gt;I haven’t tried VirtualBox for this, but DOSBox runs the installer fine:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;copy all the files on the installation disks to a single installation directory, &lt;em&gt;e.g.&lt;/em&gt; &lt;code&gt;ELINST&lt;/code&gt; (in a temporary directory) — you’ll end up with &lt;code&gt;ELFISH.PKD&lt;/code&gt;, &lt;code&gt;INFO.EXE&lt;/code&gt;, &lt;code&gt;INSTALL.EXE&lt;/code&gt;, &lt;code&gt;INSTALL.PRG&lt;/code&gt;, and &lt;code&gt;READ.ME&lt;/code&gt;, along with a &lt;code&gt;DATA&lt;/code&gt; subdirectory containing 122 files;&lt;/li&gt;&#xA;&lt;li&gt;start DOSBox in &lt;code&gt;ELINST&lt;/code&gt;’s parent directory;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;inside DOSBox,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cd elinst&#xA;install&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;follow the prompts, choosing the resolution, entering your name, and choosing the installation directory;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;wait for the installation to complete.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This will leave a fully-installed and configured copy of El-Fish in the installation directory you chose; you can copy this to your VM.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-11-15T09:52:20.137" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12755" PostTypeId="1" CreationDate="2019-11-15T10:09:35.913" Score="9" ViewCount="432" Body="&lt;p&gt;There seems to be something called the &quot;Jiffy protocol&quot; used for some fast load systems. I know of the &lt;a href=&quot;http://www.go4retro.com/products/jiffydos/&quot; rel=&quot;noreferrer&quot;&gt;JiffyDOS&lt;/a&gt; product, which seems to require replacing ROMs in both the C64 and the drive, but it seems that other programs and devices (such as &lt;a href=&quot;https://www.thefuturewas8bit.com/index.php/sd2iec-info&quot; rel=&quot;noreferrer&quot;&gt;SD2IEC&lt;/a&gt;'s GPL'd firmware and &lt;a href=&quot;https://csdb.dk/release/?id=176967&quot; rel=&quot;noreferrer&quot;&gt;SDOS V1.1&lt;/a&gt;) also support this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this protocol documented anywhere? How does it work? What libraries, software and hardware (both real and emulated) support faster disk transfers using this?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-11-15T13:56:32.853" Title="What is the C64 disk drive &quot;Jiffy&quot; protocol?" Tags="&lt;commodore-64&gt;&lt;floppy-drive&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12756" PostTypeId="2" ParentId="12752" CreationDate="2019-11-15T10:13:08.530" Score="6" Body="&lt;p&gt;Here are the ones I've come across:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;SDOS V1.1&lt;/strong&gt;, a &amp;quot;C64 disk utility and speed loader,&amp;quot; which has had development done on it as recently as 2019. According to the readme, it's &amp;quot;Public Domain: open-source and freeware.&amp;quot; It's based on earlier programs &amp;quot;VDOS&amp;quot; (1986), &amp;quot;SJLOAD (v0.96)&amp;quot; (2008-2009) and &amp;quot;SDOS (v1.0)&amp;quot; (2016).&lt;/p&gt;&#xA;&lt;p&gt;I discovered it on &lt;a href=&quot;https://csdb.dk/release/?id=176967&quot; rel=&quot;nofollow noreferrer&quot;&gt;csdb.dk&lt;/a&gt;, but the original source seems to be &lt;a href=&quot;http://istennyila.hu/stuff/sdos.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://istennyila.hu/stuff/sdos.zip&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I've not yet had time to try it out (perhaps someone else can provide a better answer describing it), but it seems to include fast loaders for both &amp;quot;Jiffy protocol&amp;quot; drives and others, and a simple wedge.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.c64-wiki.com/wiki/SJLOAD&quot; rel=&quot;nofollow noreferrer&quot;&gt;SJLOAD&lt;/a&gt;&lt;/strong&gt;: Fast loader only; no wedge. Works only with JiffyDOS-enabled drives (including the SD2IEC). The source &lt;code&gt;SJLOAD.ASM&lt;/code&gt; is included on the &lt;code&gt;SJLOAD.D64&lt;/code&gt; image (&lt;a href=&quot;https://www.c64-wiki.com/images/1/1d/SJLOAD.ZIP&quot; rel=&quot;nofollow noreferrer&quot;&gt;download&lt;/a&gt;) and also &lt;a href=&quot;https://www.c64-wiki.com/wiki/SJLOAD/SJLOAD.ASM&quot; rel=&quot;nofollow noreferrer&quot;&gt;viewable on the C64 Wiki&lt;/a&gt;. It's based on VDOS, a disassembly of which is also included in the image as &lt;code&gt;VDOS.ASM&lt;/code&gt;. Sounds like it's got some bugs (&amp;quot;incomplete,&amp;quot; it's described as) and it's no longer under development by the original author.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-11-16T10:04:20.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12757" PostTypeId="2" ParentId="12755" CreationDate="2019-11-15T13:56:32.853" Score="6" Body="&lt;p&gt;This is an incomplete answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.pagetable.com/?p=1018&quot; rel=&quot;noreferrer&quot;&gt;https://www.pagetable.com/?p=1018&lt;/a&gt; references an as-yet-unwritten article about JiffyDOS:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;JiffyDOS, a 3rd party ROM patch for computers and drives, replaces layer 2 byte transmission of Standard Serial by using the clock and data lines in a more efficient way. Bus arbitration is unchanged. The controller detects a device’s JiffyDOS support and can fall back to the Standard Serial protocol.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.baltissen.org/newhtm/sourcecodes.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.baltissen.org/newhtm/sourcecodes.htm&lt;/a&gt; includes a link to JiffyDOS source, apparently licensed from the original author (Mark Fellows) to Jim Brain (via &lt;a href=&quot;http://www.go4retro.com/products/jiffydos/&quot; rel=&quot;noreferrer&quot;&gt;http://www.go4retro.com/products/jiffydos/&lt;/a&gt;) and then to this page, though it should be noted the page explicitly says you should have a JiffyDOS license to use the code: &lt;a href=&quot;http://www.baltissen.org/files/C64-kerJD.a65&quot; rel=&quot;noreferrer&quot;&gt;http://www.baltissen.org/files/C64-kerJD.a65&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="599" LastActivityDate="2019-11-15T13:56:32.853" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12758" PostTypeId="2" ParentId="12747" CreationDate="2019-11-15T16:30:59.093" Score="22" Body="&lt;p&gt;You can actually read about 98% of an Amiga disk with a PC controller and just one drive, but at risk of destroying 2% of the data. The two-drive solution overcomes these limitations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Credit for the two-drive trick should probably go to Vincent Joguin, who first implemented this in 1999. He applied it to NEC's floppy controller, but others are compatible with this chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vincent indeed cited Bernd Schmidt, but only to show that the problem was thought to be impossible to solve. Toni Wilen and Simon Owen wrote adfread (able to run on Windows NT/2000 and later systems), which was inspired by Vincent's Disk2FDI (which ran only on Windows 9x/Me) and paper. You can read more about the various tools at &lt;a href=&quot;https://www.amigaforever.com/kb/13-118&quot; rel=&quot;noreferrer&quot;&gt;https://www.amigaforever.com/kb/13-118&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To read Vincent Joguin's high-quality presentation from 2000 get DISK2FDI.ZIP from &lt;a href=&quot;http://web.archive.org/web/20010723045656/http://fast.emuunlim.com/disk2fdi/&quot; rel=&quot;noreferrer&quot;&gt;http://web.archive.org/web/20010723045656/http://fast.emuunlim.com/disk2fdi/&lt;/a&gt;, then look for DOCS/TECH/RAWFLOPPY.DOC inside the ZIP.&lt;/p&gt;&#xA;" OwnerUserId="4005" LastActivityDate="2019-11-15T16:30:59.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12759" PostTypeId="1" CreationDate="2019-11-15T18:38:15.053" Score="14" ViewCount="512" Body="&lt;p&gt;&lt;a href=&quot;https://tools.ietf.org/html/rfc309&quot; rel=&quot;noreferrer&quot;&gt;RFC 309&lt;/a&gt; is an announcement of the 1972 Data and File Transfer Workshop announcement. The suggested reading section has 12 entries, 11 of which are RFCs and the last of which is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;             8. Data Language, CCA,  NIC # 8208&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This document appears difficult to find.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The one non-RFC document is a publication called “Data Language” by Computer Corporation of America, but I can't find something with that exact name online to link.&lt;br&gt;&#xA;  — Darius Kazemi, &lt;a href=&quot;https://write.as/365-rfcs/rfc-309&quot; rel=&quot;noreferrer&quot;&gt;RFC-309 — 365 RFCs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What is this paper? Who was it written by, when was it published and where can it be found?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="611" LastEditDate="2019-11-15T21:37:38.887" LastActivityDate="2019-11-15T21:37:38.887" Title="What is the &quot;Data Language&quot; paper referenced in RFC 309?" Tags="&lt;history&gt;&lt;internet&gt;&lt;documentation&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12760" PostTypeId="2" ParentId="12752" CreationDate="2019-11-15T18:57:36.117" Score="6" Body="&lt;p&gt;There's a recent improvement in C64 fast loading technology made by Linus Åkesson. The main idea is to decode GCR inside 1541 thus gaining more transfer speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An introductory article into the problems of GCR decoding inside 1541 (with the memory for both code and data of just 2048 bytes) is here: &lt;a href=&quot;https://www.linusakesson.net/programming/gcr-decoding/index.php&quot; rel=&quot;noreferrer&quot;&gt;https://www.linusakesson.net/programming/gcr-decoding/index.php&lt;/a&gt;. The main idea there is to have wiser tables and faster code that uses heavily many undocumented 6502 instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The complete fastloader, with the sources included, is here &lt;a href=&quot;https://www.linusakesson.net/software/spindle/v2.php&quot; rel=&quot;noreferrer&quot;&gt;https://www.linusakesson.net/software/spindle/v2.php&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-11-15T18:57:36.117" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12761" PostTypeId="2" ParentId="12759" CreationDate="2019-11-15T19:35:24.283" Score="15" Body="&lt;p&gt;&lt;a href=&quot;https://www.ietf.org/rfc/rfc565.txt&quot; rel=&quot;noreferrer&quot;&gt;RFC565&lt;/a&gt; identifies NIC 8208 as: &lt;code&gt;Computer Corporation of America, Datacomputer Project Working Paper No. 3, Datalanguage, 29 Oct '71, 78 pp.&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A copy of this document is available in the online repository of the US DoD's &lt;a href=&quot;http://www.dtic.mil/&quot; rel=&quot;noreferrer&quot;&gt;Defense Technical Information Center&lt;/a&gt; in a pdf document titled &quot;&lt;a href=&quot;https://apps.dtic.mil/dtic/tr/fulltext/u2/741263.pdf#page=6&quot; rel=&quot;noreferrer&quot;&gt;Semi-Annual Technical Report, March 1972&lt;/a&gt;&quot;. Working Paper No. 3 is bundled with Working Paper No. 4 in the same file.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2019-11-15T19:35:24.283" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12762" PostTypeId="5" CreationDate="2019-11-15T21:42:12.690" Score="0" Body="&lt;p&gt;Use this tag for questions about historical computers’ connections to the Internet, or historical aspects of the Internet, its software, hardware or protocols.&lt;/p&gt;&#xA;&lt;p&gt;It should not be used for questions about resources about historical computing found on the Internet today.&lt;/p&gt;&#xA;" OwnerUserId="611" LastEditorUserId="15334" LastEditDate="2021-02-19T23:56:12.293" LastActivityDate="2021-02-19T23:56:12.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12763" PostTypeId="4" CreationDate="2019-11-15T21:42:12.690" Score="0" Body="Connecting retro systems to the Internet, and historical aspects of the Internet: software, hardware, protocols. DO NOT USE WHEN MERELY ASKING ABOUT HISTORICAL RESOURCES ON THE INTERNET OF TODAY." OwnerUserId="611" LastEditorUserId="15334" LastEditDate="2021-02-19T23:56:12.293" LastActivityDate="2021-02-19T23:56:12.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12764" PostTypeId="5" CreationDate="2019-11-15T21:43:20.683" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-11-15T21:43:20.683" LastActivityDate="2019-11-15T21:43:20.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12765" PostTypeId="4" CreationDate="2019-11-15T21:43:20.683" Score="0" Body="Use this tag for questions regarding documentation on historical computers." OwnerUserId="611" LastEditorUserId="611" LastEditDate="2019-11-15T22:03:26.110" LastActivityDate="2019-11-15T22:03:26.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12766" PostTypeId="5" CreationDate="2019-11-15T21:45:21.373" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-11-15T21:45:21.373" LastActivityDate="2019-11-15T21:45:21.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12767" PostTypeId="4" CreationDate="2019-11-15T21:45:21.373" Score="0" Body="Floppy drives and accessing floppy disks from historical computers, ranging from 8″ down to 3.25″ and other non-standard sizes." OwnerUserId="611" LastEditorUserId="15334" LastEditDate="2021-02-08T17:29:35.670" LastActivityDate="2021-02-08T17:29:35.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12768" PostTypeId="1" AcceptedAnswerId="12771" CreationDate="2019-11-16T01:02:46.010" Score="27" ViewCount="6278" Body="&lt;p&gt;I remember using a utility back in MS-DOS 3.3 days, called MAXI Disk, that somehow magically managed to get 420K on a 360K 5¼″ disk. I assume it managed it by destroying some redundancy like a backup FAT.&lt;/p&gt;&#xA;&lt;p&gt;How did it work? Were there other tricks to “get more space”? I also remember DoubleSpace, but that was compression and not special formats/drivers/physical storage tricks.&lt;/p&gt;&#xA;" OwnerUserId="6798" LastEditorUserId="6798" LastEditDate="2021-01-18T22:53:32.510" LastActivityDate="2021-01-19T08:30:42.690" Title="What other tricks were there to get more data onto floppy disks?" Tags="&lt;ms-dos&gt;&lt;floppy-disk&gt;" AnswerCount="9" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12769" PostTypeId="2" ParentId="12768" CreationDate="2019-11-16T07:09:05.253" Score="7" Body="&lt;p&gt;There were tools such as 2M and fdformat that were able to use non-standard floppy formats. The data rate is fixed, but by shortening the gaps between sectors it was possible to increase the number of sectors per track. On some drives it was also possible to increase the amount of tracks on the disk, but it depends on the actual drive how many if any extra tracks were possible, so it was not that compatible to do that. Even without changing the physical formatting, formatting the file system with only 1 FAT or reducing the amount of root directory entries did make more sectors available for storing files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to Maxi Disk website and it works exactly as mentioned above.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2019-11-16T08:14:52.093" LastActivityDate="2019-11-16T08:14:52.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12770" PostTypeId="2" ParentId="12768" CreationDate="2019-11-16T08:42:52.577" Score="3" Body="&lt;p&gt;Both Microsoft and IBM had their own distribution disk formats.&lt;/p&gt;&#xA;&lt;p&gt;Microsoft had DMF, which allowed the disk to contain 1680 KiB of data on a 3½-inch disk, instead of the standard 1440 KiB. It was used for software distribution. It worked by increasing the cluster size and sector count but cutting down the FAT.&lt;/p&gt;&#xA;&lt;p&gt;IBM used XDF format for software distribution, which could go up to 1840 KiB, using similar techniques.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="15334" LastEditDate="2021-01-12T20:36:02.907" LastActivityDate="2021-01-12T20:36:02.907" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12771" PostTypeId="2" ParentId="12768" CreationDate="2019-11-16T10:18:42.780" Score="23" Body="&lt;p&gt;420K was common for 360K floppies (not only on PC) it was done like this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;increasing number of sectors&lt;/p&gt;&#xA;&lt;p&gt;original format has 9 sectors per track but there is space for 10 (the physical gaps are smaller but the formatted gaps are still the same).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;increasing number of tracks&lt;/p&gt;&#xA;&lt;p&gt;original format has 40 tracks but floppy is big enough and most (I mean all) drives can handle 42 tracks and some even 43 tracks. So using 42 tracks is sort of safe too.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Both combined lead to:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10*512(sectors)*2(sides)*42(tracks) = 430080 Byte = 420 KiByte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;from:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;9*512(sectors)*2(sides)*40(tracks) = 368640 Byte = 360 KiByte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So there are no file system changes happening, all is just physical formatting...&lt;/p&gt;&#xA;&lt;p&gt;We used this on ZX Spectrum and D40 all the time...&lt;/p&gt;&#xA;&lt;p&gt;No tool was needed on ZX to use this you just manually select the formatting parameters (number of sectors and tracks) while formatting the floppy disc.&lt;/p&gt;&#xA;&lt;p&gt;On PC (MS-DOS) there is the&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FORMAT A: /T:42 /N:10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;however newer versions I have access to right now consider those values as illegal (not sure if old format did that too or its just that I do not have a floppy drive installed) so in case it does you need some kind of format utility that accepts such parameters ... But I do not remember using different formatting utility for this on PC... The only one we used was FHformat for low level 1.44MByte flopies format to make them reusable ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-11-16T10:38:22.713" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12772" PostTypeId="2" ParentId="12768" CreationDate="2019-11-16T10:33:17.897" Score="17" Body="&lt;p&gt;Floppy disks store data on each side, in tracks, each track split into sectors, with gaps between each sector. On top of that comes the file system, FAT for DOS-compatible systems, which defines how data is stored in sectors, and how much space is used for metadata.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on this, using the PC’s disk controller, there are two main ways to increase a floppy’s data storage capacity:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;increase the number of tracks, sectors, and/or reduce the gaps&lt;/li&gt;&#xA;&lt;li&gt;reduce the amount of space taken by metadata&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Increasing tracks etc.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The standard formats are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;9 (double density), 15 (5.25” high density), or 18 sectors per track (3.5” high density)&lt;/li&gt;&#xA;&lt;li&gt;40 tracks (5.25” double density) or 80 tracks per side&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With 512-byte sectors, this produces the standard capacities: 360K, 720K, 1.2M, 1.44M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A number of tools allow disks to be formatted with increased capacity. The most famous of these, and the most flexible, is &lt;a href=&quot;https://github.com/christoh/fdformat&quot; rel=&quot;noreferrer&quot;&gt;Christoph H. Hochstätter’s &lt;code&gt;FDFORMAT&lt;/code&gt;&lt;/a&gt;. This allows all the physical parameters to be tweaked, up to the maximum values supported by drives:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;41 or 82 tracks (more in some drives, but then disks become harder to read in other drives)&lt;/li&gt;&#xA;&lt;li&gt;10 sectors per track on DD disks, 18 on 5.25” HD, 21 on 3.5” HD&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Thus without changing the data format, you can format disks up to 410K (5.25” DD), 820K (3.5” DD), 1.48M (5.25” HD), and 1.72M (3.5” HD).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By pushing the tracks a little on 5.25” disks, to 42, and 10 sectors, you get your 420K format:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FDFORMAT N10 T42&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2&gt;Reducing metadata overhead&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;FDFORMAT&lt;/code&gt; also supports variations in the FAT generated:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;number of sectors per cluster&lt;/li&gt;&#xA;&lt;li&gt;number of root directory entries&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Depending on the purpose of the disk, this can be useful to increase the amount of storage available. This is what Microsoft did for its DMF format, used for installation disks (which contain a small number of large files); these provide 1.68M by using 21 sectors per track, 80 tracks, 4 sectors per cluster, and 16 directory entries.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Further tweaks&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;To reach even larger capacities, as used for example in IBM’s XDF format or the various 2M formats, you need other tweaks: reducing the gap size, changing the data rate, varying the sector size, and in 2M’s case dropping the FAT backup. 2M and XDF also vary the format between the first track and the rest of the disk, so that DOS can still read the first track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many of these disk formats aren’t directly supported under DOS, you’d need TSRs to read the disks (such as &lt;code&gt;FDREAD&lt;/code&gt; for &lt;code&gt;FDFORMAT&lt;/code&gt;). The best PC operating system for reading PC floppies is now Linux, which has built-in support for all &lt;code&gt;FDFORMAT&lt;/code&gt; formats, most 2M formats, and XDF.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-11-17T08:31:06.163" LastActivityDate="2019-11-17T08:31:06.163" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12773" PostTypeId="5" CreationDate="2019-11-16T16:08:01.203" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-11-16T16:08:01.203" LastActivityDate="2019-11-16T16:08:01.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12774" PostTypeId="4" CreationDate="2019-11-16T16:08:01.203" Score="0" Body="Use this tag for questions about the specialist diagnostic software provided by manufacturers, or built into equipment. Do not use this tag for questions generally asking how to diagnose a problem or diagnostic techniques." OwnerUserId="611" LastEditorUserId="611" LastEditDate="2019-11-16T18:04:56.130" LastActivityDate="2019-11-16T18:04:56.130" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12775" PostTypeId="5" CreationDate="2019-11-16T16:11:24.190" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-11-16T16:11:24.190" LastActivityDate="2019-11-16T16:11:24.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12776" PostTypeId="4" CreationDate="2019-11-16T16:11:24.190" Score="0" Body="Use this tag for questions regarding the use DMA (direct memory access) in historical computers or the history of DMA itself. DMA allows peripherals to access memory directly without using the main processor." OwnerUserId="611" LastEditorUserId="611" LastEditDate="2019-11-16T19:05:11.407" LastActivityDate="2019-11-16T19:05:11.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12777" PostTypeId="2" ParentId="12768" CreationDate="2019-11-16T16:30:35.403" Score="4" Body="&lt;p&gt;Each track of a normal floppy disk contains one repetition per sector of the sequence:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sync pattern; sector header; short space; sync pattern; sector data; longer space&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When a computer is asked to read a sector, it looks for a sync pattern followed by a header for the desired sector.  It will then ask the controller to look for a sync pattern and grab whatever follows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a computer is asked to write a sector, it looks for a sync pattern followed by a header for the desired sector.  It will then instruct the controller to start &lt;em&gt;blindly&lt;/em&gt; overwriting whatever was on the disk with a sync pattern followed immediately by a quantity of supplied data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a drive is reading data, it will automatically adjust the data rate to match what was written, within a fairly broad tolerance (even +/-20% would likely not pose a problem).  Data will generally be written at a fixed speed, however.  Thus, the physical length of the data stripe written by the drive will vary based upon the rotational speed of the drive.  If the length of the data happens to be long enough to reach the sync pattern for the start of the next sector, that next sector of data will be destroyed.  The inter-sector gaps are often sized somewhat generously to ensure that this won't happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If one has a disk which will be written all in one go, without any need to update individual sectors, all but one of the inter-sector gaps (the one between the last sector and the first) can be eliminated.  This will allow significantly more data to be written on the disk than would otherwise be possible, at the cost of being unable to update an individual sectors without trashing the next sector on the track.  Such an approach might even be usable with certain &quot;incremental&quot; update strategies, but I'm unaware of any efforts to use such things other than with disks that would be mastered once and not written to after that.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-11-16T16:30:35.403" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12778" PostTypeId="2" ParentId="12768" CreationDate="2019-11-16T16:33:37.003" Score="4" Body="&lt;p&gt;Someone used to make disk drives that spun slower when the head(s) were on outer tracks, so that those tracks could hold more bits.&lt;/p&gt;&#xA;" OwnerUserId="10645" LastEditorUserId="15334" LastEditDate="2021-01-12T20:43:02.000" LastActivityDate="2021-01-12T20:43:02.000" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12779" PostTypeId="1" CreationDate="2019-11-16T18:27:39.697" Score="5" ViewCount="610" Body="&lt;p&gt;Were there any games/software that used memory beyond what was advertised as available to BASIC on the machine ?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On home / personal computers any time up to 1984 .&lt;/li&gt;&#xA;&lt;li&gt;Without needing to plug in any additional hardware .&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;How common was it on home / personal computers of this era that assembly-code or BASIC could access more memory than what was advertised as available to BASIC on the machine (e.g. like storing non-video data on video-memory)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there any other type of RAM that was normally not accessible to BASIC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Added To Question&lt;br&gt;&#xA;If a machine had 24k RAM, and only 18k of that available to BASIC, was that 8k empty, or, on any existing machines, was anything ( other than assembly-code which could use all of the 24k ) stored on there, if anything was stored on there, exactly why was it stored there . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example, may be for the Bally Astrocade, using video memory, although I don't know any details / games / software .&lt;/p&gt;&#xA;" OwnerUserId="11744" LastEditorUserId="15930" LastEditDate="2020-06-13T13:36:21.227" LastActivityDate="2020-06-18T10:50:18.857" Title="Were there any games/software that used memory beyond what was advertised available to BASIC on the machine?" Tags="&lt;hardware&gt;&lt;memory&gt;&lt;software&gt;&lt;memory-layout&gt;" AnswerCount="9" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12783" PostTypeId="1" CreationDate="2019-11-17T09:28:16.377" Score="15" ViewCount="2968" Body="&lt;p&gt;I am digitizing about 40 tapes with programs for the ZX Spectrum. &#xA;I am somewhat puzzled by the waveform after digitization.&#xA;The signal of most cassettes is meander-shaped.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/RVV2r.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RVV2r.png&quot; alt=&quot;meander-shaped&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/BFNfN.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BFNfN.png&quot; alt=&quot;meander-shaped&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/AmFn5.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AmFn5.png&quot; alt=&quot;meander-shaped&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://www.dropbox.com/s/gas033rb93qy02m/GORR34_Firetrap_Carlos_Sainz.mp3?dl=0&quot; rel=&quot;noreferrer&quot;&gt;One of the cassettes can be downloaded from DropBox.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some cassettes have a sinusoidal signal. This is an example of a cassette with a bad record. This cassette has an unstable amplitude.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/LEVTX.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LEVTX.png&quot; alt=&quot;sine wave&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/fd92z.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fd92z.png&quot; alt=&quot;sine wave&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://www.dropbox.com/s/mbqyi5ltp7oqxbz/GORR11_A_SDII_B_TLL.mp3?dl=0&quot; rel=&quot;noreferrer&quot;&gt;This cassette can be downloaded from DropBox&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes there are records with &quot;dancing&quot; short pulses.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Z4rxS.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z4rxS.png&quot; alt=&quot;short pulses&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Questions:&lt;/strong&gt;&#xA;1. What shape should the pulses be for successfully decoding programs recorded on these tapes?&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;What programs can help in decoding or preparing audio files for processing?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Any hacks for successful processing of tapes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;P.S. After some experiments with adjusting the signal level and the tape recorder head, I came to the conclusion that this is important for some audio tapes. And returning to the topic - the waveform must be sinusoidal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Demonstration of the same piece of tape as an example (this files can be downloaded from Dropbox.):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.dropbox.com/s/n2upyq48xghwu91/GORR30_BallBreaker_A.wav?dl=0&quot; rel=&quot;noreferrer&quot;&gt;Before&lt;/a&gt;  adjust the tape recorder head&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ExzEH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ExzEH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...&lt;a href=&quot;https://www.dropbox.com/s/lnw7h453x444kqk/GORR30_BallBreaker_A_sin441_16.wav?dl=0&quot; rel=&quot;noreferrer&quot;&gt;after&lt;/a&gt;  adjust the tape recorder head&#xA;&lt;a href=&quot;https://i.stack.imgur.com/LYf5n.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LYf5n.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15563" LastEditorUserId="15563" LastEditDate="2019-11-25T20:51:01.303" LastActivityDate="2021-05-05T19:46:40.010" Title="What should be the waveform for ZX Spectrum tapes?" Tags="&lt;zx-spectrum&gt;&lt;cassette-tape&gt;&lt;audio&gt;&lt;data-preservation&gt;" AnswerCount="6" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12784" PostTypeId="2" ParentId="12783" CreationDate="2019-11-17T09:54:48.763" Score="10" Body="&lt;p&gt;Those variable amplitudes looks like electronics problem like failing caps somewhere along the way (recording/playback) or unshielded too long cables or partial remagnetization or even HW bug (some recorders like ELTA have a bug in writing head circuitry that corrupted tapes a bit each time it was played ...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the correct output should be a rectangular signal with 2 levels of amplitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not know any tools for tapes but audio people are using &lt;a href=&quot;https://www.audacityteam.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;AUDACITY&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However writing own SW recognizing pulses and correcting the signal should be easy to do...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is captured GIF from mine emulator executing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SAVE &quot;xxx&quot; CODE 0,16384&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/INsNY.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/INsNY.gif&quot; alt=&quot;SAVE capture&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the left is border and on the right is Oscillogram of the SOUND output going to Soundcard...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;[Edit1]&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I finally had some time/mood for this. I made an win32 app for filtering the wav files in manner I described in my comments. Here it is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://ulozto.net/file/hqEi8NEwKPdW/filter-zx-wav-tape-zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;My Win32 ZX_emu 1.56 + tape wav filter app&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;both apps are win32 standalone no need to install anything. Read the &lt;code&gt;readme.txt&lt;/code&gt; inside zip to know how to use it ... I included also full source code for the filtering app (Borland/Embarcadero BDS 2006 Turbo C++)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The filter sum all channels into mono and find local min/max peaks and center it around 0 and also rescale to uniform amplitude ... +/- some noise detection/handling. The filter itself is in &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;riff_filter_tape.h &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;source file in case you want to tweak it ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I applied it on your &lt;code&gt;GORR30_BallBreaker_A.wav&lt;/code&gt; here screenshot so you see the signal change after filtering:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dk0s2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dk0s2.png&quot; alt=&quot;filter preview&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your original wav does not load into my emulator. It does not go pass the first file header (no sync and no error). After filtering It got pass the file header:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bSp0q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bSp0q.png&quot; alt=&quot;header&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but error while code:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7KRig.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7KRig.png&quot; alt=&quot;error&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so loader code is not correctly loaded (due to too much corruption of the tape):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GKnSF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GKnSF.png&quot; alt=&quot;code&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So try to adjust the tape recorder head (with screw driver) first until you hear more clear sound, then play with volume ... digitize apply filter and try to load&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heh &lt;strong&gt;FUXOFT&lt;/strong&gt; :) he had nice games, brings up memories &lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-11-26T04:09:54.073" LastActivityDate="2019-11-26T04:09:54.073" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="12785" PostTypeId="2" ParentId="8442" CreationDate="2019-11-17T12:42:31.300" Score="2" Body="&lt;p&gt;I remember copying games on my ZX Spectrum 48k (one of clones). First, most games were already cracked (like &quot;Cracked by Bill Gilbert&quot;), so there usually were no copy protection.&#xA; &lt;a href=&quot;https://i.stack.imgur.com/OZ8wp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OZ8wp.png&quot; alt=&quot;Cracked by Bill Gilbert&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The copies were actually made with the help of tape copying programs. They would load blocks into memory and then, after the cassete changed, replay everything back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember using &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=0008843&quot; rel=&quot;nofollow noreferrer&quot;&gt;TF-Copy&lt;/a&gt;, &lt;a href=&quot;http://www.worldofspectrum.org/infoseek.cgi?regexp=%5ECopy%2086M$&amp;amp;loadpics=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Copy 86M&lt;/a&gt; and &lt;a href=&quot;http://www.worldofspectrum.org/infoseekid.cgi?id=0020690&quot; rel=&quot;nofollow noreferrer&quot;&gt;Copy copy&lt;/a&gt;. Among others, Copy 86M was packing data online as it was loaded from the tape that sometimes allowed us to copy the whole game in a single pass.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-11-17T12:42:31.300" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12786" PostTypeId="2" ParentId="12783" CreationDate="2019-11-17T12:51:51.387" Score="10" Body="&lt;p&gt;Check this &lt;a href=&quot;https://faqwiki.zxnet.co.uk/wiki/Spectrum_tape_interface&quot; rel=&quot;noreferrer&quot;&gt;Spectrum tape interface&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Pulses&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;A 'pulse' here is either a mark or a space, so 2 pulses makes a&#xA;  complete square wave cycle.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Pilot tone: before each block is a sequence of 8063 (header) or 3223&#xA;  (data) pulses, each of length 2168 T-states.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Sync pulses: the pilot tone is followed by two sync pulses of 667 and&#xA;  735 T-states resp.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;A '0' bit is encoded as 2 pulses of 855 T-states each.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;A '1' bit is encoded as 2 pulses of 1710 T-states each (ie. twice the&#xA;  length of a '0')&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The initial polarity of the signal does not matter - everything in the&#xA;  ROM loader is edge-triggered rather than level-triggered.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-11-17T12:51:51.387" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12787" PostTypeId="2" ParentId="12779" CreationDate="2019-11-17T14:17:10.717" Score="7" Body="&lt;p&gt;Answers for the Apple II:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Please have a look at &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1919/apple-ii-applesoft-basic-memory-management/1920#1920&quot;&gt;this answer&lt;/a&gt; to understand the memory layout, and where the areas used by BASIC are placed).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;1) Were there any games/software that used memory beyond what was advertised as available to BASIC on the machine?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Assuming that &quot;advertised as available to BASIC&quot; means &quot;between $801 and DOS&quot;, then yes, machine code programs (games) would regularly use other free areas. In some cases they'd even overwrite DOS, making a reboot after the end of the program necessary. There were even BASIC programs which manipulated the memory layout of the BASIC areas themselves, for various reasons (for example, to have machine code subroutines as BASIC extensions).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2) How common was it on home / personal computers of this era that assembly-code or BASIC could access more memory than what was advertised as available to BASIC on the machine &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;See above, very common.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(e.g. like storing non-video data on video-memory)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Actually, just having a lot of BASIC program code could already put BASIC code into video-memory, prohibiting the use of graphics (and it happened in practice).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;3) Was there any other type of RAM that was normally not accessible to BASIC?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, RAM in the so-called &quot;language card&quot;, which was in the same place as ROM. A few games used that (e.g. Zork and other Infocom games), as well as non-DOS systems (UCSD Pascal).&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-11-17T14:17:10.717" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12788" PostTypeId="2" ParentId="12779" CreationDate="2019-11-17T14:34:33.693" Score="13" Body="&lt;p&gt;The Commodore 64 advertises 38911 bytes free for BASIC upon startup. It's a 64kb machine. Non-BASIC programs could use the full 64kb rather than the ~38kb. Therefore using more memory than is available to BASIC was routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference was primarily that BASIC and the rest of the kernel don't need to be present, so if you're not using them then you can have some RAM instead.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-11-17T14:34:33.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12789" PostTypeId="1" CreationDate="2019-11-17T15:58:39.310" Score="6" ViewCount="518" Body="&lt;p&gt;Were there any games/software that used a resolution or resolution-mode higher than what was advertised available on the machine ?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On home / personal computers between anytime - 1984 .&lt;/li&gt;&#xA;&lt;li&gt;Without needing to plug in any additional hardware .&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There may be an example for the Bally Astrocade, although I don't know any details / games / software &lt;/p&gt;&#xA;" OwnerUserId="11744" LastActivityDate="2019-11-20T20:33:46.683" Title="Were there any games/software that used a resolution or resolution-mode higher than what was advertised available on the machine?" Tags="&lt;hardware&gt;&lt;software&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12790" PostTypeId="2" ParentId="12768" CreationDate="2019-11-17T16:11:11.680" Score="7" Body="&lt;p&gt;The &quot;busman's punch&quot; from Solar Mike's comment was common in the 8 inch days. Disks were sold as &quot;SSSD&quot; (Single Sided, Single Density) and there was a hole in the sleeve near the hub, offset from the head slot, aligned with an optical sensor. When a hole in the disk passed under this hole. the sensor generated an &quot;index pulse&quot; to signal the start of a track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By punching a symmetrically offset hole (in each side of the sleeve separately, to avoid punching through the disk itself), you could insert the disk upside down, and use the other side, doubling its storage. (The media was always coated both sides, but the back side wasn't guaranteed ... in practice it was almost always fine). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This saved the premium for DSSD (Double Sided) disks, storing 480K instead of 240K.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the right drive electronics, another punched hole would illuminate a second sensor. (Add a label covering the first hole!) This told the drive the disk was certified for &quot;DSDD&quot;(Double Sided, Double Density) operation giving almost 1 MB per drive - with the convenience of a head on each side, so no need to turn the disk over. (Of course, if your drive doesn't support Double Density, this doesn't work)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's about all a hacker could do ... but at least, Burroughs in 1980 had re-engineered the whole floppy drive, with hard sleeves and shutters like the much later 3.5&quot; drives, much closer track spacing, tribit tracks for thermal calibration, and were getting 10MB from a dual 8&quot; drive (5MB/disk). That's in the same ballpark as some hard drives of the time (I don't know if these were used outside the Burroughs B80 office systems) Burroughs' own hard drives used 14 inch platters, from 20MB (1 platter) to 80MB (4 platters).&lt;/p&gt;&#xA;" OwnerUserId="6700" LastEditorUserId="6700" LastEditDate="2019-11-17T16:22:19.937" LastActivityDate="2019-11-17T16:22:19.937" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12791" PostTypeId="2" ParentId="2464" CreationDate="2019-11-17T16:30:47.190" Score="0" Body="&lt;p&gt;While all these answers make up part of the reason for the great screen refresh rate, there is one big item that actually makes the game work so smoothly, blitter chip.&#xA;The 'Ballblazer' cartridge was unique out of all the carts that were produced. It was the only cart that had this chip incorporated into it. The blitter chip is/was basically a graphics processor unto itself, so the game would send the data to this chip and continue working as the blitter would process the info and manipulate it for the screen. That is it in a VERY basic form. This chip is used in a couple Full standing coin-op arcade machines that I repair. 'Robotron', 'Bubbles', 'Stargate', 'Sinistar' and 'Splat' from Williams Games all used this blitter chip. Unfortunately this great chip is no longer available so these games are not repairable if the blitter chip dies.&lt;/p&gt;&#xA;" OwnerUserId="13570" LastEditorUserId="3912" LastEditDate="2019-11-18T12:09:56.493" LastActivityDate="2019-11-18T12:09:56.493" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12792" PostTypeId="1" CreationDate="2019-11-17T16:57:07.153" Score="2" ViewCount="390" Body="&lt;p&gt;I have an Apple IIc for which I would like an FDD emulator and I am&#xA;considering buying an HxC Floppy Emulator to use with it. The Slim&#xA;model does work with the Apple II, as demonstrated in &lt;a href=&quot;https://www.youtube.com/watch?v=MaR9noqb0JE&amp;amp;t=5s&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&#xA;video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there are &lt;a href=&quot;http://hxc2001.free.fr/floppy_drive_emulator/index.html#SALESPOINTS&quot; rel=&quot;nofollow noreferrer&quot;&gt;several different hardware platforms&lt;/a&gt;&#xA;for the HxC Floppy Emulator, varying significantly in price. The&#xA;project itself (or its partners) offers hardware for sale and build&#xA;instructions for &quot;Rev C,&quot; &quot;Rev F,&quot; &quot;Slim&quot; (all ~$70-$100) and &quot;USB&quot;&#xA;(~$50) platforms. The project also offers firmware for GoTek floppy&#xA;emulators (often under $20 for the hardware, and €10 for the HxC&#xA;firmware). The web site isn't particularly clear about the differences&#xA;between them, and has seems to have no mention of the Apple II at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the differences, if any, between these various HxC platforms&#xA;when used with the Apple II? Do they all support the Apple II, or is&#xA;there special hardware or firmware needed that some models don't have?&#xA;Do any popular disk image formats work with some but not others? Which&#xA;ones can write to an Apple II image? Which ones can format an Apple II&#xA;image?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(This is not part of the question, but for those wondering why I'm&#xA;asking about the HxC platforms specifically, it is both between $50&#xA;and $100 cheaper than the Apple-II-specific FDD emulators that I'm&#xA;aware of and I also have other systems with more standard SA400 floppy&#xA;interfaces that the HxC supports and the Apple-II-specific FDD&#xA;emulators do not. Thus I am looking at an order of magnitude price&#xA;difference between the cheapest possibility of spending $25 on one HxC&#xA;GoTek system and the most expensive possibility of spending $250 or&#xA;more on a dedicated Apple II FDD emulator and an expensive HxC&#xA;platform. Feel free to take this into account if you like, or ignore&#xA;it if that would make the question &quot;too broad.&quot;)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-11-17T20:30:11.100" Title="What are the differences between the various HxC Floppy Emulator hardware options when used with an Apple II?" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;&lt;hxc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12793" PostTypeId="1" AcceptedAnswerId="12805" CreationDate="2019-11-17T17:02:39.263" Score="3" ViewCount="152" Body="&lt;p&gt;Punchcards were the primary way to get information into computers up through the sixties. The familiar eighty column format was designed by IBM, and was a factor in the later de facto standard eighty column CRT displays for personal computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the first company other than IBM, to sell a reader that could read IBM format eighty column punchcards? As I understand it, the industry of IBM plug compatible peripherals didn't really take off until the late sixties, but I would be interested to know whether compatible punchcard readers existed earlier than that.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-11-17T22:26:41.643" Title="What was the first company to sell an IBM compatible punchcard reader?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;punched-cards&gt;&lt;minicomputers&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12794" PostTypeId="1" AcceptedAnswerId="12803" CreationDate="2019-11-17T16:34:33.813" Score="35" ViewCount="13739" Body="&lt;p&gt;After seeing &lt;a href=&quot;https://electronics.stackexchange.com/questions/467614/why-chip-designers-chose-to-jump-from-32bit-to-64bit-cpus&quot;&gt;this question&lt;/a&gt;, I was struck with an intense curiosity to know:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there ever processors with word sizes that aren't powers of two, &lt;em&gt;specifically&lt;/em&gt; after the 8-bit byte became the industry standard? (I'm well aware of the 9-, 18-, and 36-bit computers that predate the 8-bit byte.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen some things that are &lt;em&gt;close&lt;/em&gt; to this, for example the PIC24 series of 16-bit processors that uses a 24-bit instruction word, but I'm not aware of any actual 24-bit (etc) processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not, why not? I can think of a few possible downsides, but I'm not knowledgeable enough about the history to actually know.&lt;/p&gt;&#xA;" OwnerUserId="15593" OwnerDisplayName="Hearth" LastActivityDate="2019-11-24T17:25:04.583" Title="Were there ever 12-, 24-, 48-, etc bit processors?" Tags="&lt;microprocessor&gt;" AnswerCount="10" CommentCount="13" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12795" PostTypeId="2" ParentId="12794" CreationDate="2019-11-17T17:11:52.917" Score="53" Body="&lt;p&gt;Certainly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DEC PDP-8 family was 12-bit, and so was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intersil_6100&quot; rel=&quot;noreferrer&quot;&gt;Intersil 6100&lt;/a&gt;, a single-chip CMOS implementation of the PDP-8 ISA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been many 24-bit DSP-type processors, from Motorola, Microchip, Analog Devices, among others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Burroughs_large_systems&quot; rel=&quot;noreferrer&quot;&gt;Burroughs large systems&lt;/a&gt; (mainframes), starting with the B-5000 in 1961, used an ISA called &quot;E-mode&quot;, which had 48-bit data words (8 &amp;times; 6-bit characters).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been other unusual word sizes as well. The &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_6600&quot; rel=&quot;noreferrer&quot;&gt;CDC 6600&lt;/a&gt; used 60-bit words. Wikipedia has a &lt;a href=&quot;https://en.wikipedia.org/wiki/Word_(computer_architecture)#Table_of_word_sizes&quot; rel=&quot;noreferrer&quot;&gt;fairly complete list&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4183" LastEditorUserId="4183" LastEditDate="2019-11-17T17:17:37.457" LastActivityDate="2019-11-17T17:17:37.457" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12796" PostTypeId="2" ParentId="12794" CreationDate="2019-11-17T17:12:02.310" Score="5" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/ICT_1900_series&quot; rel=&quot;noreferrer&quot;&gt;ICL1900&lt;/a&gt; was a 24 bit computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Atlas_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Atlas&lt;/a&gt; was a 48 bit computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a list of &lt;a href=&quot;https://en.wikipedia.org/wiki/12-bit&quot; rel=&quot;noreferrer&quot;&gt;12 bits machines on Wikipedia&lt;/a&gt; which includes the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ferranti_Argus&quot; rel=&quot;noreferrer&quot;&gt;Ferranti Argus&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2019-11-17T17:12:02.310" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12798" PostTypeId="2" ParentId="12792" CreationDate="2019-11-17T18:02:24.133" Score="2" Body="&lt;p&gt;The HxC/Gotek floppy emulators are designed to work with a &lt;a href=&quot;https://en.wikipedia.org/wiki/Shugart_bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;Shugart type floppy interface&lt;/a&gt;, which was widely used in many retro-computers, but is not directly compatible with the Apple ][ floppy controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The video you linked notes in the description that both the HxC firmware was replaced and a new cable/interface was created in order to make the floppy emulator work with the Apple //c.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;List of &lt;a href=&quot;https://hxc2001.com/download/floppy_drive_emulator/support.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;supported devices and computers&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-11-17T20:30:11.100" LastActivityDate="2019-11-17T20:30:11.100" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12799" PostTypeId="2" ParentId="12794" CreationDate="2019-11-17T18:12:36.730" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Were there ever 12-, 24-, 48-, etc bit processors?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes!  See &lt;a href=&quot;https://en.wikipedia.org/wiki/Word_(computer_architecture)&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Word_(computer_architecture)&lt;/a&gt; for an enumeration of historical word sizes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before the 8-bit byte became standard, computers were not byte addressable, only word addressable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Originally, computation was mostly numeric oriented, so a (sometimes double) word data size of 24 or 36 bits was common depending on the numeric range &amp;amp; precision desired.&amp;nbsp; 36 bits gives a decent precision in decimal digits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Character data was stuffed into words, and handled via packing &amp;amp; unpacking.&amp;nbsp; Prioritization of efficiency was for numerics not text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Over time, the importance of text processing grew. The 8-bit byte became standardized, and byte addressable computers became the norm.&amp;nbsp; Further, the need for interoperability of data between differing computers also required standardization.&amp;nbsp; For these reasons today, it no longer makes sense to have a word size that is not a multiple of the 8-bit byte.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Your tag says microprocessors, so a quick comment on that.&amp;nbsp; By the time microprocessors were developed, the size of byte was already 8-bits.&amp;nbsp; As the utility of computers increased, applications became increasingly hungry for memory, so address spaces were already larger than ~32k, 64k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Integrated circuits represented a substantial increase in performance and dramatic reduction in size, though came with the early cost of having a somewhat fixed maximum and relatively small number total transistors.&amp;nbsp; These factors heavily influenced the design of microprocessors, in that they tended to have only 8-bit ALUs, though by then required 16-bit addressing and address manipulating capabilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Over time, microprocessors far surpassed capabilities of the old pre- integrated circuit computers (we now have 64-bit computers and RISC V has standardized a 128-bit architecture), but there was a time when things went a bit backward in word sizes before getting larger again.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastEditorUserId="7985" LastEditDate="2019-11-18T15:06:51.303" LastActivityDate="2019-11-18T15:06:51.303" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12800" PostTypeId="2" ParentId="12794" CreationDate="2019-11-17T18:21:30.413" Score="4" Body="&lt;p&gt;Yes. Semi-modern example: &lt;a href=&quot;https://www.nxp.com/products/no-longer-manufactured/24-bit-digital-signal-processor:DSP56002&quot; rel=&quot;nofollow noreferrer&quot;&gt;DSP56002 24-bit DSP&lt;/a&gt; from NXP &lt;/p&gt;&#xA;" OwnerUserId="12083" LastActivityDate="2019-11-17T18:21:30.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12801" PostTypeId="2" ParentId="12789" CreationDate="2019-11-17T18:24:40.580" Score="11" Body="&lt;p&gt;&lt;em&gt;Since I know that little machine quite OK I think I'll throw my 2 cents.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the &lt;strong&gt;ZX81&lt;/strong&gt; came out it was advertised with a character based screen of 24 lines by 32 characters, each 8x8 pixels in black and white. Of these 24 lines only 22 lines are available for user programs per default. The system variable to change this setting was documented, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its character set had some special characters dividing the 8x8 pixels in 4 quadrants. This enabled some kind of &quot;high resolution graphics&quot; that could be generated by &lt;code&gt;PLOT&lt;/code&gt; and &lt;code&gt;UNPLOT&lt;/code&gt; commands giving 64 (horizontally) by 44 (vertically) &quot;dots.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some clever guys found out that the video signal was controlled by &lt;em&gt;and in&lt;/em&gt; software so they wrote smart screen &quot;drivers&quot; that produced graphics with pixel resolution. However, due to the restrictions of the hardware it was not possible to set or reset each pixel individually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this a really simple modification was invented that &quot;merged&quot; the &lt;code&gt;RFSH&lt;/code&gt; signal into the &lt;code&gt;RD&lt;/code&gt; of its Z80 CPU. Now they got a high resolution graphic with 256 by 192 pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, I had a self-built clone back in 1982 or so. But because my interests changed fast I never touched it again until the late 90s. That time I invented a graphic mode that added one level of grey to the standard black and white. Yes, that computer had no other colours!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not only that, I also wrote a driver that extended the resolution to 320 x 240 pixel. This could be expanded still a bit more, but you need to maintain the video parameters for vertical and horizontal frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Games were and are written for this machine, affectionally called &quot;little black door-stopper,&quot; which use these screen modes. Since I never did &quot;serious&quot; work on it I don't know of any non-game software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two issues may render this story as not compatible to your requirements:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;For the &quot;real&quot; HRG (high resolution graphic) you need the mentioned little patch. However, it is built from a single logic gate. Those who know where the hot end of a soldering iron is can build it.&lt;/li&gt;&#xA;&lt;li&gt;You need more memory than the built-in 1KB (or 2KB if you use the US version by Timex) but the 16KB extension was a standard module. Almost everyone had the original or one of the countless clones.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Footnote: This cute little machine is so special that until today more than a few &quot;oldtimers&quot; still use it and write new software. Just search the web.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="14875" LastActivityDate="2019-11-17T18:24:40.580" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12802" PostTypeId="2" ParentId="12794" CreationDate="2019-11-17T18:28:36.153" Score="6" Body="&lt;p&gt;&lt;a href=&quot;http://www.cs.man.ac.uk/CCS/res/res18.htm#c&quot; rel=&quot;noreferrer&quot;&gt;KDF9&lt;/a&gt; was 48 bits, though this probably predates the 8-bit byte standard.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;KDF9 did not have 'a' character code; codes were device-specific.  Printer code was for example 6 bits.  However, the PROMPT file system (and ELDON2 which adopted the same) used 8 bit 'characters', with the benefit that Algol basic symbols such as underlined &lt;em&gt;procedure&lt;/em&gt; were stored as single 'characters'. In this sense KDF9 was using an 8-bit byte, though it was still only a word-addressable machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;48 bits was a good choice for word size, I believe based on the resulting precision+range for floating-point numbers.  KDF9 used a 39-bit characteristic, 8-bit exponent, and 1-bit sign.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;48 bits was on KDF9 also a good choice since it allowed a &lt;a href=&quot;http://www.findlayw.plus.com/KDF9/The%20Hardware%20of%20the%20KDF9.pdf&quot; rel=&quot;noreferrer&quot;&gt;counter/increment/modifier value&lt;/a&gt;, 16 bits per subvalue (loaded in a &quot;Q-store&quot; for use) to be stored in a memory word. &lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-11-17T18:35:03.733" LastActivityDate="2019-11-17T18:35:03.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12803" PostTypeId="2" ParentId="12794" CreationDate="2019-11-17T19:17:23.550" Score="26" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;specifically&lt;/em&gt; after the 8-bit byte became the industry standard?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's no clear point of time where the 8-bit byte became a standard, since it's still just a &lt;em&gt;de facto&lt;/em&gt; standard nowadays&lt;sup&gt;1&lt;/sup&gt;. However probably the 1970s were the transition time due to many newer architectures and standards with 8-bit bytes, and if you look at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Word_(computer_architecture)&quot; rel=&quot;nofollow noreferrer&quot;&gt;word size list&lt;/a&gt; then you'll see that architectures from 1975 onward use word sizes that are powers of 2 (the list is not exhausted of course)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to legacy reasons, in the later decades updates to processors with odd word sizes (12/18/24/48/whatever-bit) of the previous architectures are still developed. For example the &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_1100/2200_series#UNISYS_2200_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;UNISYS 2200 series&lt;/a&gt; with one's complement math and 36-bit word is still supported until &lt;a href=&quot;https://stackoverflow.com/a/12277974/995714&quot;&gt;at least 2015&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you just care about some of the buses or (fixed) instruction length then some CPUs with 24-bit address bus (but not data bus) were also produced when RAM was still expensive and there wasn't enough transistor budget. For example the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80286&quot; rel=&quot;nofollow noreferrer&quot;&gt;16-bit Intel 80286&lt;/a&gt; (yes, it's the predecessor of modern x86) and &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68000#Address_bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;32-bit Motorola 68k&lt;/a&gt;. And current x86-64 CPUs still only have a &lt;a href=&quot;https://en.wikipedia.org/wiki/X86-64#Virtual_address_space_details&quot; rel=&quot;nofollow noreferrer&quot;&gt;48-bit address bus with 48 or 52-bit virtual address space&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nevertheless most of them aren't as common as 24-bit architectures which are still widely used and produced even in the 21&lt;sup&gt;th&lt;/sup&gt; century, mainly in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Digital_signal_processor&quot; rel=&quot;nofollow noreferrer&quot;&gt;DSP&lt;/a&gt; domain, since DSPs are designed specifically for a single purpose to churn a lot of data in a known format quickly. Some modern examples&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ti.com/tool/DLPR350#descriptionArea&quot; rel=&quot;nofollow noreferrer&quot;&gt;DLPC350&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.njr.com/semicon/products/NJU26060Series.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;NJU26060&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.nxp.com/products/processors-and-microcontrollers/additional-architectures/digital-signal-processors/24-bit-dual-core-symphony-dsp:DSP56720&quot; rel=&quot;nofollow noreferrer&quot;&gt;DSP56720&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.dream.fr/items.php?item=27&quot; rel=&quot;nofollow noreferrer&quot;&gt;SAM5504B&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;They're all DSPs for &lt;strong&gt;audio processing&lt;/strong&gt;, because professional audio formats sample data at 24-bit resolution. &lt;strong&gt;20-bit DSPs also exist&lt;/strong&gt;, for example the &lt;a href=&quot;https://www.byclb.com/TR/Tutorials/dsp_advanced/ch4_1.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zoran ZR3800x family&lt;/a&gt;. There are 20-bit ADCs and DACs for them, for example the &lt;a href=&quot;https://www.analog.com/en/products/ad1871.html#product-overview&quot; rel=&quot;nofollow noreferrer&quot;&gt;AD1871&lt;/a&gt; which supports &lt;em&gt;16-/20-/24-bit word lengths&lt;/em&gt;. And believe it or not, Analog Devices also has a &lt;strong&gt;28-/56-bit&lt;/strong&gt; &lt;a href=&quot;https://www.analog.com/en/products/adau1701.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ADAU1701&lt;/a&gt; audio DSP&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Read Analog Devices' blog &lt;em&gt;Relationship of Data Word Size to Dynamic Range and Signal Quality in Digital Audio Processing Applications&lt;/em&gt;, section &lt;a href=&quot;https://www.analog.com/en/education/education-library/articles/relationship-data-word-size-dynamic-range.html#processingprofessional&quot; rel=&quot;nofollow noreferrer&quot;&gt;6. Processing 110-120 dB, 20-/24-bit Professional-Quality Audio&lt;/a&gt; if you're interested.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously there are higher-end 32-bit audio DSPs. But high-end audio enthusiasts need even more resolution so &lt;a href=&quot;https://www.eetimes.com/document.asp?doc_id=1177883&quot; rel=&quot;nofollow noreferrer&quot;&gt;TI was pushing 48-bit DSPs&lt;/a&gt; although I'm not sure how successful it was&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/2098149/995714&quot;&gt;What platforms have something other than 8-bit char?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/5516044/995714&quot;&gt;System where 1 byte != 8 bit?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Even the &lt;a href=&quot;https://www.iso.org/obp/ui/#iso:std:iso-iec:2382:-1:ed-3:v1:en&quot; rel=&quot;nofollow noreferrer&quot;&gt;ISO/IEC 2382-1:1993 standard&lt;/a&gt; doesn't specify a byte to contain 8 bits. Only &lt;em&gt;octet&lt;/em&gt; is a unit of 8 bits:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;byte&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;A string that consists of a number of bits, treated as a unit, and usually representing a character or a part of a character.&lt;br&gt;&#xA;  Note 1 to entry: The number of bits in a byte is fixed for a given data processing system.&#xA;  Note 2 to entry: The number of bits in a byte is usually 8.&lt;/li&gt;&#xA;  &lt;/ul&gt;&lt;/li&gt;&#xA;  &lt;li&gt;octet&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;8-bit byte&lt;br&gt;&#xA;  A byte that consists of eight bits.&lt;/li&gt;&#xA;  &lt;/ul&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="1981" LastEditorUserId="15108" LastEditDate="2019-11-24T17:25:04.583" LastActivityDate="2019-11-24T17:25:04.583" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12804" PostTypeId="2" ParentId="12794" CreationDate="2019-11-17T19:48:12.647" Score="11" Body="&lt;p&gt;The Garrett AiResearch &lt;a href=&quot;https://en.wikipedia.org/wiki/Central_Air_Data_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;MP944&lt;/a&gt; has a good claim to be the first microprocessor. It's 20-bit, designed from 1968 to 1970, and classified until 1998, so it is not well known. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Toshiba &lt;a href=&quot;https://en.wikipedia.org/wiki/Toshiba_TLCS#TLCS-12&quot; rel=&quot;nofollow noreferrer&quot;&gt;TLCS-12&lt;/a&gt; family was designed from 1971-73 and is 12-bit. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Intersil_6100&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intersil 6100&lt;/a&gt; has already been mentioned, it was a single-chip implementation of the older 12-bit DEC PDP-8. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been numerous 4-bit micro-controllers, but 4 is a power of two, and hence outside the OP's question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 1-bit computer is an interesting corner case, and existed in the form of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_MC14500B&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motorola MC14500B&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2019-11-20T02:16:30.870" LastActivityDate="2019-11-20T02:16:30.870" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12805" PostTypeId="2" ParentId="12793" CreationDate="2019-11-17T22:26:41.643" Score="3" Body="&lt;p&gt;[Preface: The question misses to restrict it to &lt;em&gt;electronic&lt;/em&gt; computer equipment, as I assume that#s what you're after. 80 column punch cards were already a thing before and there was much competition]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, the story of compatilbe punch card equipment predates mainframes by far. In fact, The 80 column rectangular hole punch card was in part developed to shake of competition. For next to all prior designs (22x8, 24x10, 45x12) competitors did build compatible machinery, foremost data entry devices, but anything else as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mid 1920s IBM wanted to increase data density once more, but this time with an additional goal of making it in a way that allowed patenting it. That's were the 80x12 with rectangular holes came into play - them being the patent worthy part Watson Sr. wanted to keep competition away (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The patent got awarded in 1928, thus valid until 1946 &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remington Rand, at that time eventually the biggest competitor to IBM of course had to counter this. They kept the 45x12 card with round holes, but changed encoding, storing two characters in one column, so it was called the 90 column card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other manufacturers developed similar formats with up to 130 characters per card - all with compatibility to the 45x12 card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM tried very hard to corner that market, for example their tabulating machinery was rented out with the obligation to only use IBM supplied cards. At some point they made more than 1/3rd of their business in selling paper, not machinery. All based around that patent. This came to an end in the mid 1930s, when the US government sued IBM to open up the card market. From that point on only card punches making square holes were the only devices were they could keep competition away. This means keypunches, as well as duplicators and interpreting punches.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What was the first company other than IBM, to sell a reader that could read IBM format eighty column punchcards?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now, readers there were plenty, as reading wasn't protected by the 1928 patent. Only punching square holes :)) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;when it's about computers, the first legally to do so would be again Remington Rand. When they unveiled their UNIVAC, they had a great advantage over IBM, so IBM was keen to get some licences - and Remington Rand did want a licence for square holes since the 1928, so they exchanged patents. A great deal for IBM, no so great for Remington Rand - but who would have guessed back then that punch cards soon would loos being the most important part in data processing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the UNIVAC was tape based (seriously ahead of it's time in using magnetic media), but users wanted to combine the computing power with their punced data stacks, a pair of card to tape and tape to card converters were the first products. These were stand alone machines. The idea of direct connected peripherals was still in the making. Being able to operate them independant of the main computer was quite preferable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, as we all know, when Remington Rand became Sperry, several members of the ERA/UNIVAC team became soon disenfranchised, left and formed CDC in 1957(?). CDC started business by building quite successful magnetic drum memories. Next was a tape device, followed by card readers and punches - the famous 405/415 - followed by printers. The card devices were 80x12 IBM card compatible (*2). While their CDC 1604 mad a big intro in 1960 - and layed ground for many to follow, CDC was already in the mid 1960s a major player in peripherals. Right at the time the /360 was introduced.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As I understand it, the industry of IBM plug compatible peripherals didn't really take off until the late sixties, but I would be interested to know whether compatible punchcard readers existed earlier than that.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The whole plug compatible business only became a thing after the introduction of the /360 in 1964. At that time the patents were gone for good and next to every mainframe or mid size computer manufacturer offered readers and punches. A great number of them using OEMed CDC devices. In fact, CDC was so early - and willing to deliver - that only very few tried to build their own devices. Instead these companies focused on their computers and just bought CDC punch equipment (and drives and printers ...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only other company that made a larger inroad with punch cards - and here only for readers - was &lt;a href=&quot;https://en.wikipedia.org/wiki/Documation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Documation&lt;/a&gt;. Their readers targeted the lower end, were CDC didn't supply anything, with very compact desktop models. They became kind of standard for minis with a need to read IBM stacks.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Long story short:&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If it's about the 80 column catd in general, look into tabulating machines of the 1930s.&lt;/li&gt;&#xA;&lt;li&gt;If it's about electronic computers, look at Remington Rand/Sperry&lt;/li&gt;&#xA;&lt;li&gt;If it's about peripherals, then CDC is what you're looking for.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Funny twist here, for the new, high density 96 column format, introduced in the 1960s, IBM switched back to round holes - making them rectangular wasn't as great of a choice as IBM did promote it in the 1930s :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - There is also a story about them trying to circumvent the IBM patents (as Sperry, not CDC was a licencee of IBM) with oval holes, until they realized they could do it anyway.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-11-17T22:26:41.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12806" PostTypeId="1" CreationDate="2019-11-17T22:33:55.463" Score="11" ViewCount="834" Body="&lt;p&gt;In my organization's archive I just found some 5¼″ floppies, presumably IBM PC 320/360k. They contain information that we have on paper, but I'd really like to have on electronic media, not least so we can make searchable PDFs of it without a whole bunch of archival work.&lt;/p&gt;&#xA;&lt;p&gt;What is my most expedient way to read these? I have access to an IBM &lt;a href=&quot;https://en.m.wikipedia.org/wiki/IBM_PC_Series#PC_300PL&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC 300PL&lt;/a&gt; &lt;strong&gt;Type 6862&lt;/strong&gt; running Win98SE with a 3½″ floppy, a late Power Mac running 10.5, and an early Intel Mac running 10.11.&lt;/p&gt;&#xA;&lt;p&gt;Any chance a run of the mill 5¼″ floppy off eBay will plug into the PC300?&lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="15334" LastEditDate="2020-08-31T17:40:32.873" LastActivityDate="2020-08-31T17:40:32.873" Title="How can I read a 5¼″ drive on 1996–2007 equipment?" Tags="&lt;ibm-pc&gt;&lt;floppy-disk&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12807" PostTypeId="2" ParentId="12806" CreationDate="2019-11-17T22:48:16.747" Score="17" Body="&lt;p&gt;The answer will depend on the exact model of 300PL you have, but there’s a good chance it will be possible to use a 5.25” drive with your computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many 300PL models, such as &lt;a href=&quot;http://www.ibmfiles.com/ibmfiles/pc300/65xx_technical_information.pdf&quot; rel=&quot;noreferrer&quot;&gt;type 6592&lt;/a&gt;, &lt;a href=&quot;http://oldcomputer.info/pc/ibm300/d4ca3mst.pdf&quot; rel=&quot;noreferrer&quot;&gt;type 6565&lt;/a&gt;, and your &lt;a href=&quot;http://ps-2.kev009.com/pccbbs/commercial_desktop/6275tim.pdf&quot; rel=&quot;noreferrer&quot;&gt;type 6862&lt;/a&gt;, explicitly support 5.25” drives, and support connecting two drives at once; so with one of those, you should be able to connect the drive, configure the BIOS and go. The 6862 at least is supplied with a very short cable with only two connectors, so you will need to replace the existing floppy cable with one appropriate for 5.25” drives, which normally use an edge connector. Compatible cables looks like the one shown &lt;a href=&quot;https://kitchentablecomputers.com/drcables1.php&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, with five connectors and a twist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the physical layout of the 6862, you might have trouble routing the floppy cable if you try to connect both the 3.5” drive and the 5.25” drive at once. You will at least need a rather long cable, and in particular one with a decent length in between both sets of drive connectors (where the twist in the cable is found). You’ll probably find it much easier to only connect one drive at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other types might or might not directly support 5.25” drives; for example, &lt;a href=&quot;http://www.ibmfiles.com/ibmfiles/pc300/65xx_technical_information.pdf&quot; rel=&quot;noreferrer&quot;&gt;type 6562&lt;/a&gt;’s manual claims it doesn’t. However if the BIOS doesn’t support the drive, you may be able to configure Windows to use it anyway, and if that fails, you can buy a cheap ISA floppy controller and plug it into one of the ISA slots.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-11-19T09:05:56.157" LastActivityDate="2019-11-19T09:05:56.157" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12808" PostTypeId="2" ParentId="12718" CreationDate="2019-11-18T08:23:08.793" Score="2" Body="&lt;p&gt;There was a simpler but much more expensive solution used in the 1981 BBC Micro, it used 4MHz RAM and a 2MHz 6502A and let the 6845/VideoULA have the other 2MHz (every other 4MHz cycle). There is a modern blitter for the BBC Micro, but it wouldn't have been available BITD. &lt;a href=&quot;https://stardot.org.uk/forums/viewtopic.php?t=14125&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://stardot.org.uk/forums/viewtopic.php?t=14125&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11490" LastActivityDate="2019-11-18T08:23:08.793" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12809" PostTypeId="2" ParentId="12794" CreationDate="2019-11-18T09:11:00.563" Score="0" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_eZ80&quot; rel=&quot;nofollow noreferrer&quot;&gt;ez80&lt;/a&gt; is a continuation of the z80 family, sporting 24-bit register pairs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's quite frankly fantastically stupid, in that a register is 8 bits, but a pair of registers is 24 bits. What's even better is that the upper, most significant bits of a register pair is hidden, so you have to go through hoops to get those upper 8 bits as a separate register.&lt;/p&gt;&#xA;" OwnerUserId="15073" LastActivityDate="2019-11-18T09:11:00.563" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12810" PostTypeId="2" ParentId="12789" CreationDate="2019-11-18T09:21:46.267" Score="3" Body="&lt;p&gt;On &lt;strong&gt;ZX Spectrum&lt;/strong&gt; there where these approaches I know of:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;using Border area&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the border has single color but by fast alternating it (in respect to CRT electron beam position) it can be used for rendering. Demos and even some games used it for printing some text or stuff. IIRC there was one flight simulator that used it to show the horizon cant remember its name and I think one of the first games using Border technique was &lt;a href=&quot;https://www.youtube.com/watch?v=xoCuSZeQspE&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aquaplane&lt;/a&gt; but that is not the flight simulator mentioned before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The resolution increase depended on how much CPU cycles you where able to use but in theory you could use whole CRT resolution in y. In x its more rough as the CPU based memory to IO transfer bandwith was not so good so maybe every 4-8 pixels. So you would render small horizontal lines instead of pixels. Some custom tape loaders for games used that to show noise like lines instead of the common stripes ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;double the scanlines&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;by switching the video content every frame you could double the number of y lines due to fact that CRTs show even and odd lines in separate frames (interlacing). I do not know if any games used that (as it required quite a lot of CPU time without bank switching available) but demos certainly did that trick. Even I did code an image viewer using this technique. so going from 256x192 to 256x384 ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;MultiTech&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using DMA is fast enough to apply the Border technique on the main screen area too but instead of enhancing pixel resolution it enhances attribute resolution so instead of 1 attr per 8x8 pixels you got 1 per 8 pixels instead enhancing colors. For more info see&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4859/6868&quot;&gt;Z8410 DMA chip as GPU?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;but this required additional HW plugged in your computer ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;On &lt;strong&gt;PC&lt;/strong&gt; with &lt;strong&gt;VGA&lt;/strong&gt; there where the &lt;a href=&quot;https://en.wikipedia.org/wiki/Mode_X&quot; rel=&quot;nofollow noreferrer&quot;&gt;X-modes&lt;/a&gt; and also &lt;a href=&quot;https://en.wikipedia.org/wiki/UniVBE&quot; rel=&quot;nofollow noreferrer&quot;&gt;UNIVBE&lt;/a&gt; which could increase resolutions supported by gfx card and in some cases even bit depth (not sure how I suspect dithering but it was able to use my old trident with high and true color even if it does not have any HW support for it or my mind plays tricks on me again? and there where high color support and output was truncated to it, or it was just turned off in firmware as I remember I got even few similar tridents with high/true color at that time). IIRC UNIVBE was shipped with some games directly as part of them...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-11-18T11:20:01.770" LastActivityDate="2019-11-18T11:20:01.770" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12811" PostTypeId="2" ParentId="12794" CreationDate="2019-11-18T12:11:48.550" Score="4" Body="&lt;p&gt;Microchip's PIC family has processors with lots of weird word sizes. For instance for the PIC16F1454/5/9:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;program counter is 15 bits (and stack is thus 15-bits wide as well)&lt;/li&gt;&#xA;&lt;li&gt;instruction words are 14 bits&lt;/li&gt;&#xA;&lt;li&gt;data addresses are 12 bits (7 bits for bank and 5 bits within the bank)&lt;/li&gt;&#xA;&lt;li&gt;but data words are 8 bits&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4329" LastActivityDate="2019-11-18T12:11:48.550" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12812" PostTypeId="2" ParentId="12728" CreationDate="2019-11-18T21:28:19.403" Score="4" Body="&lt;p&gt;As said in the Raffzahn's answer, it's mostly a marketting or design choice and has no technicalities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, you are mistaken in beliving all western NES cartridges were gray : They were some games released in gold cartridges as well. But you're right in that it's still much less varied than the famicom which featured countless different colours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the west, the NES cartridges were marketted to as &quot;game packs&quot;. In Japan they were marketted to as &quot;casette&quot;, similarly named to the audio tape casettes, and those definitely came in all kind of colours. This tradition probably came because some other home computers at the time actually used casette tapes as storage media. This &lt;em&gt;could&lt;/em&gt; have played a role in design choices but this is just a supposition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll also notice another huge difference other than the colour : The size !&#xA;Western NES cartridges are largely oversized. They have a fixed size which is the maximum available, and usually the PCB inside takes between 1/4 to 1/3 of the available area. Only prototypes (not released to the public) and some MMC5 games uses the majority of the area, and even then, the whole area is still not fully used up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Famicom carts can be variable in size as the load on the top of the console and can grow vertically as much as needed. As such, most games tended to be just the size of the PCB, which uses all the area. In the few cases where the PCB was larger, they made a larger game case. As such Famicom games featuring complex mappers such as MMC5 will be actually in physically larger cartridges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another major difference is that in the west, only Nintendo was officially able to make and sell cartridge. Some unlicenced developers broke this rule, and Tengen even had a trial against Nintendo. In Japan, Nintendo openly allowed any company to make their own cartridge, so large game companies such as Konami and Namco had their own cartridges cases, which differs significantly from Nintendo's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My source is my experience with the NES/Famicom as well as &lt;a href=&quot;http://bootgod.dyndns.org:7777/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bootgod's cart database&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2123" LastEditorUserId="2123" LastEditDate="2019-11-20T18:24:17.867" LastActivityDate="2019-11-20T18:24:17.867" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12813" PostTypeId="2" ParentId="12794" CreationDate="2019-11-18T22:53:52.253" Score="3" Body="&lt;p&gt;The ICL 1900 series was indeed 24-bit words, used as four 6-bit characters. Using 8-bit media like papertape required escape characters called alpha, beta and delta to switch case and special characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ICL replaced 1900s with 2903 and ME29, which was a 32-bit architecture machine cut back to 24 bits for compatibility with 1900s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ICL also had office machines called System 10 and System 25, which it inherited from the Singer Sewing Machine Company. That wasn't even binary. It used 60-bit words as 10 6-bit chars holding decimal digits for calculation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Burroughs large systems was 64-bit memory, with only 48 bits available to user code. It had 8 parity bits per word too. The other 8 bits were assigned to various protection mechanisms, of which I remember read-only, code/data, and system/user bits. Serious memory protection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those four systems ate my life for 20 years.&lt;/p&gt;&#xA;" OwnerUserId="15606" LastActivityDate="2019-11-18T22:53:52.253" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12814" PostTypeId="1" AcceptedAnswerId="12815" CreationDate="2019-11-18T23:29:05.887" Score="27" ViewCount="4663" Body="&lt;p&gt;I’m a big fan of early/mid 1980s personal computers like the Amstrad CPC, Commodore 64 and the Sinclair Spectrum. One thing these computers all had was a version of BASIC. Well known ones being MS-BASIC, &lt;a href=&quot;https://en.wikipedia.org/wiki/Locomotive_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Locomotive BASIC&lt;/a&gt;, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a language hacker myself I’m curious: were these interpreters implemented as tree-walker interpreters (simply traversing the parse tree) or bytecode interpreters? I can’t find a lot of information on how they were implemented. It’s fascinating to me how they were built given the limitations of the hardware at the time.&lt;/p&gt;&#xA;" OwnerUserId="15607" LastEditorUserId="15607" LastEditDate="2019-11-20T07:42:07.653" LastActivityDate="2019-12-03T21:05:32.103" Title="What type of interpreter were most 8-bit BASIC implementations?" Tags="&lt;basic&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12815" PostTypeId="2" ParentId="12814" CreationDate="2019-11-18T23:39:40.547" Score="43" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;[W]ere these interpreters implemented as tree-walker interpreters or bytecode interpreters?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Neither, or both. They are kind of source code interpreters - much like (classic) shell scripts - except they used a tokenized storage format (*1). Their structure was dictated by balancing lack of memory, lack of interpreter code and desired optimization for speed (*2,3) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Almost all (*4) were simple two part systems consisting of&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;an editor to fetch a line entered, parse it into tokens(*5) and store it, as line structure, at its desired position (*6) and&lt;/li&gt;&#xA;&lt;li&gt;an interpreter swinging along the tokenised program when executed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So in modern terms it's like a combination of shell, editor and lexer for part 1 while part 2 combines parser and evaluator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, categorised by today's standards, they are somewhat like byte code interpreters - except, byte code implies usually some kind of virtual machine (*7), which isn't the case for back then interpreters, as the code used is literal translated BASIC source text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, memory was scary rare. There is no room to store a source code and some byte code. Even less parsing trees or other fancy constructions. There was only room for one representation, which must be able to be put back into a readable text without any difference (*8) to the statements entered.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I can’t find a lot of information on how they were implemented.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They are quite well documented and information is to be found all over the web. But note that such documentation may use terminology that has changed since back then - or leave out information that was considered well known to everyone - like the very basic process how they worked. It was so ubiquitously used that no further explanation seams to be needed. It's almost as if reading a book from another century. Interesting, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The use of the term token differs a bit from todays usage (as pointed out later) and is tied to a way more basic concept to save on storage and simplify interpretation compared to an interpreter running over full source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While most contemporary documents usually call it tokenization, comments in the original 8080 Microsoft BASIC source, rather call the process crunching. That part was, BTW, written by Paul Allen, as part of what they called 'non-runtime' functions, e.g. Line insertion, line editing, NEW, RUN, LIST, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Most differences between BASIC interpreters are based thereon, especially with their optimization in tokenisation and data storage - which are of course needed to fit more more (or better) code into ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - There are almost endless variations in detail across BASIC implementations. Mentioning these would go way overboard for a explanation. If there is anything you need to know for a specific BASIC/solution, please feel invited to write up separate questions regarding them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Well, with the exception of &lt;a href=&quot;https://en.wikipedia.org/wiki/Dartmouth_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dartmouth BASIC&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Tiny_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tiny BASIC&lt;/a&gt; that is. Both did interpret the otherwise unprepared source code text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - These tokens are always single byte values - not strings or token-name/token-value pairs like with modern parsers. Data is usually represented as itself in ASCII (Sinclair being quite different here). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Or hand it to (direct) interpretation if not preceded by a line number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - Well, unless we take BASIC as the machine code of this virtual CPU. But that's quite far fetched, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - Beside formatting that is.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-03T21:05:32.103" LastActivityDate="2019-12-03T21:05:32.103" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="12817" PostTypeId="2" ParentId="12814" CreationDate="2019-11-19T10:35:18.790" Score="19" Body="&lt;p&gt;The Sinclair systems were tokenised directly at the keyboard, so there was almost no lexical analysis. Keys were inputs to a state machine that implemented the BASIC language structure in a ROM table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first keystroke would have a label on it -- maybe the P key was also labelled Print, G was Goto, and the L key was Let. After that was hit, the state machine went to &quot;expecting variable name&quot; or &quot;label&quot; or whatever the syntax called for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;State machine contents included &quot;what do I do with this value&quot; and &quot;what state do I got to next&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the byte codes were off the wall. For example, the keystrokes also coded into strings directly, to give the words Let, Print, Goto. The &quot;newline&quot; was chosen to be the same as an interrupt instruction (far as i recall) so that the line display would wake up the z80, which is why the ZX80 flickered on every keystroke.&lt;/p&gt;&#xA;" OwnerUserId="15606" LastActivityDate="2019-11-19T10:35:18.790" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12818" PostTypeId="1" AcceptedAnswerId="12820" CreationDate="2019-11-19T11:50:01.633" Score="4" ViewCount="554" Body="&lt;p&gt;In the 1970's IBM popularized an early word processing solution using their popular &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Selectric_typewriter#Selectric-based_machines_with_data_storage&quot; rel=&quot;nofollow noreferrer&quot;&gt;Selectric typewriter&lt;/a&gt; line and something called &quot;Mag Card&quot;. This &lt;a href=&quot;https://www.youtube.com/watch?v=H92dJbp-KNM&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; demonstrates the system in operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fascinating thing to me is the way in which the media is a hybrid of a punched card and a floppy. It seems to have existed when both of those were in use, but it also seems to have been a niche solution only found in this IBM word processing use-case. So, it did not find widespread use as a substitute for either punched card or floppy, as far as I know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to know how the drive functioned, and why its application seems to have been limited to this one niche.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-11-19T19:40:50.750" LastActivityDate="2019-11-19T22:12:42.923" Title="How did IBM's &quot;Mag Card&quot; drive and magnetic media work?" Tags="&lt;ibm&gt;&lt;magnetic-tape&gt;&lt;floppy-drive&gt;&lt;punched-cards&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12819" PostTypeId="2" ParentId="12818" CreationDate="2019-11-19T13:15:27.197" Score="1" Body="&lt;p&gt;I'm not sure why you're calling it a &quot;hybrid&quot; &amp;mdash; it clearly has nothing in common with a punched card, other than the approximate shape and size of the card, which may have been chosen to take advantage of the storage facilities that already existed for punched cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is clear from the video that there is a pair of counter-rotating drive wheels, each with a solenoid-controlled pinch roller that drive the card back and forth along its long axis. You can also see the mechanism that steps the read/write head across the short axis. Not too different from how a floppy disk works, except for how the media moves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suspect that the media itself had a short life, because without any protection (like the permanent sleeve of a floppy disk), it would be subject to a lot of wear and tear both inside and outside the drive. A bent card would probably jam instantly if inserted into the drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, because of the mechanical tolerances involved, I suspect that the capacity of each card was rather low. Yes, &lt;a href=&quot;https://www.ibm.com/ibm/history/exhibits/modelb/modelb_office2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this source&lt;/a&gt; says that the capacity of the card was just 5000 characters, which doesn't compare favorably with the 80 kB capacity of the first &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_the_floppy_disk#The_8-inch_disk&quot; rel=&quot;nofollow noreferrer&quot;&gt;8-inch floppy disks&lt;/a&gt; (introduced at about the same time, and which quickly grew to over 250 kB).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These constraints make it a form of storage that is non-volatile &amp;mdash; but strictly short-term &amp;mdash; which makes it suitable for a niche like word processing, but not so much for other applications.&lt;/p&gt;&#xA;" OwnerUserId="4183" LastEditorUserId="4183" LastEditDate="2019-11-19T13:30:17.827" LastActivityDate="2019-11-19T13:30:17.827" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12820" PostTypeId="2" ParentId="12818" CreationDate="2019-11-19T14:17:12.473" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The fascinating thing to me is the way in which the media is a hybrid of a punched card and a floppy.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's more like a floppy - especially in its original version, the &lt;a href=&quot;https://www.ibm.com/ibm/history/exhibits/storage/storage_2321.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 2321 Data Cell Drive&lt;/a&gt; of 1964 (see below). MagCards are a downscale from the 2321, which was, at its time the top end of random accessible online storage. They provide much larger storage than any punch card, and were introduced (1969) way before floppies in the early 1970s (*1).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It seems to have existed when both of those were in use, but it also seems to have been a niche solution only found in this IBM word processing use-case.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The MagCards were specifically developed for this niche as an upgrade to the former tape system.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So, it did not find widespread use as a substitute for either punched card or floppy, as far as I know.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It only utilizes the form factor of punch cards to allow the use of existing mechanics. Beside that there are no similarities with punch cards. It was developed as an upgrade to the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_MT/ST&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Magnetic Tape Selectric Typewriter&lt;/strong&gt;&lt;/a&gt; (MSTS) introduced in 1964 (*2).&lt;/p&gt;&#xA;&lt;p&gt;Unbeknownst to most, IBM was a big player at &lt;a href=&quot;https://www.ibm.com/ibm/history/exhibits/vintage/vintage_4506VV4019.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;dictating equipment&lt;/a&gt; during the 1960s. It was a whole system called &amp;quot;&lt;a href=&quot;https://archive.org/details/TNM_IBM_Executary_magnetic_dictation_equipment_20170710_0520&quot; rel=&quot;nofollow noreferrer&quot;&gt;Executary&lt;/a&gt;&amp;quot;. The Office Division developed several products from that base, turning into the MSTS in 1964. It can be seen as kind of a modernized Flexowriter, using a Selectric typewriter and special magnetic tape cassettes. The Tape was transported with a sprocket, much like paper tapes. While tapes could also be transferred to a mainframe, using an &lt;strong&gt;IBM 2495 Tape Cartridge Reader&lt;/strong&gt;, it was mainly meant to support editing capabilities for putting dictations down to paper.&lt;/p&gt;&#xA;&lt;p&gt;Think about the classic office circle of some cigarette smoking 1960s manager using an IBM &lt;a href=&quot;https://www.youtube.com/watch?v=oFn9XD7yXG4&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dictaphone 214&lt;/a&gt; (*3), calling his secretary to take the tape, turn it into writing, having the printout returned, to be redacted. And that's where storing it onto tape became a thing to speed up the cycle. An equally important use was duplication - having one paper typed ('printed') several times for distribution. No more carbon paper, every copy looks like a hand made original - or if used, even more copies could be done.&lt;/p&gt;&#xA;&lt;p&gt;It was upgraded in 1969 with the introduction of the MagCard as &lt;strong&gt;Magnetic Card Selectric Typewriter&lt;/strong&gt; (MCST). One card could store about 5000 characters - advertised as 'more than a page'. It could handle a single card at a time.&lt;/p&gt;&#xA;&lt;p&gt;Another update happened in 1973 with the MagCard II, like shown in the &lt;a href=&quot;https://www.youtube.com/watch?v=H92dJbp-KNM&quot; rel=&quot;nofollow noreferrer&quot;&gt;video you linked&lt;/a&gt;. Now not only was capacity increased to 8000 characters per card, but the mechanics could also handle a stack of up to 50 cards. Now even quite large papers could be handled - more importantly printed - within a (comparably) short time.&lt;/p&gt;&#xA;&lt;p&gt;Just, by the mid 1970s, IBM lost its leadership in this area. Other manufacturers like Wang or Lexitron had taken over - all to be put aside when microprocessor-based systems entered the market around that time.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'd like to know how the drive functioned,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The first MagCard recorded data in 50 tracks of 100 characters each. Encoding was done neither in ASCII nor EBCDIC, but kind of a Selectrics ball position code (*4)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and why its application seems to have been limited to this one niche.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because it was only meant for that niche - and soon to be replaced by floppies during the 1970s.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;IBM 2321 Data Cell Drive&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2321_Data_Cell&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM's Data Cell drive&lt;/a&gt;, as well as similar systems from competitors (including CDC as major OEM manufacturer) grew out of the idea of drum storage, but with exchangeable media. Instead of having a fixed magnetic surface, the drum featured tiny holes and a vacuum, able to suck exchangeable magnetic cards to its surface. Cards were stored in exchangeable boxes, called 'cells', each holding 200 stripes. 10 boxes could be held at a time, resulting in 381 MiB online capacity.&lt;/p&gt;&#xA;&lt;p&gt;Access time, of course, varied a lot between reading from a loaded card and having to fetch one. Much like drums, there were several fixed heads (20). Access was instant. Unlike drums these heads could be moved into 5 positions, thus accessing 100 tracks (as groups of 20) (*5). Now access time was near 100 ms. Quite in line with the 2311 disk drive of the same time (7 MiB). This would drop to something like 600 ms, when the card addressed needs to be fetched from its cell. Still great.&lt;/p&gt;&#xA;&lt;p&gt;Especially when considering that a cell drive held about 50+ times the capacity of said disk. Or the same as a full size 2401 tape (~45 MiB). So a 2321 held an equivalent of 10 mounted tapes with an access speed close to a disk drive. Handling wise each cell could be seen like a disk pack, and exchanged as easily - just with 5 times as much storage.&lt;/p&gt;&#xA;&lt;p&gt;It gets even bigger, as up to 8 data cell drives could be operated from one controller, allowing instant access to &lt;strong&gt;three whole gigabytes&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The technology wasn't just used by IBM, but others as well:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SIEMENS 568-11 (a CDC OEM drive) with 511 MiB at 500 ms (average)&lt;/li&gt;&#xA;&lt;li&gt;NCR 353/5 with 5 MiB at 110 ms&lt;/li&gt;&#xA;&lt;li&gt;Bull Bullrac with 324 MiB at 215 ms&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;(Access time always average)&lt;/p&gt;&#xA;&lt;p&gt;As usual, all the competition used to offer either more storage, or faster access - and always faster data transmission (not noted). All of them also used wider cards than IBM did, as well as a kind of mechanical card addressing using a kind of variation of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Edge-notched_card&quot; rel=&quot;nofollow noreferrer&quot;&gt;Edge-Notched-Card&lt;/a&gt;. All of this was to avoid IBM patents, as IBM had patents on the way the stripe was pulled and transported, as well as how it gets reinserted in exactly the location it was taken out.&lt;/p&gt;&#xA;&lt;p&gt;These drives were an extremely important storage solution for about a decade between 1965 and 1975. At that time a single 3336 Disk stack held ~200 MiB and a unit could hold two of them - the equivalent of a single 2321 unit.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - While the floppy drive was created in 1967 as a microcode loader for mainframes, it wasn't introduced until 1971. Usage outside microcode storage was only reached after 1972 when Shugart/Memorex introduced the 650 drive. See &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_the_floppy_disk#The_8-inch_disk&quot; rel=&quot;nofollow noreferrer&quot;&gt;History of the floppy disk&lt;/a&gt; on Wikipedia.&lt;/p&gt;&#xA;&lt;p&gt;*2 - There is an incredible, almost &lt;a href=&quot;https://en.wikipedia.org/wiki/German_Expressionism&quot; rel=&quot;nofollow noreferrer&quot;&gt;expressionist&lt;/a&gt;, 1967 film about the system: &lt;a href=&quot;https://www.youtube.com/watch?v=_IZw2CoYztk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Paperwork Explosion&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*3 - It's the hypermodern 1960s, so no more lap sitting dictation.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Ball position is encoded with rotate as -5..+5, tilt as 0..3 plus Corr, resulting in 88 valid positions encoded in 7 bit. Additional functions filled (some) holes to make it an encoding unlike any other. For example switching between upper/lower case (shift) is done with separate codes, much like in CCITT No.2. Others were index functions, tab or alike.&lt;/p&gt;&#xA;&lt;p&gt;*5 - For synchronizing/positioning there was a 21st head reading the 101st track with sector information.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-11-19T22:12:42.923" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12821" PostTypeId="2" ParentId="12728" CreationDate="2019-11-19T15:12:57.547" Score="8" Body="&lt;p&gt;The story I have always heard (I will try to find and add sources later) is that in the wake of the 1983 video game crash, which primarily affected the US, Nintendo decided to re-evaluate their North American branding, and what they decided on was to avoid as far as possible any association with the console being a &lt;em&gt;toy&lt;/em&gt;. Thus the NES is an &quot;Entertainment System&quot;, and the main unit is a &quot;Control Deck&quot;. The boxy gray design with a front-loading slot lets it sit side-by-side with home entertainment hardware of the day, and the case is bigger than it needs to be, which makes it seem more substantial. The same is true of the cartridges — the Japanese cartridges are small, come in various bright colors, and have rounded edges, all of which screams &quot;toy&quot;, while NES cartridges are oversized, use subdued colors (mostly a gray that matches the console), and are extremely angular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems strange today to deliberately shy away from the appearance of &lt;em&gt;fun&lt;/em&gt; in a video game console's marketing, but in 1985 it seems to have been the right move, contributing to a long dominance of the console market by Nintendo.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2019-11-19T15:12:57.547" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12822" PostTypeId="2" ParentId="12814" CreationDate="2019-11-19T15:38:11.680" Score="16" Body="&lt;p&gt;Most early 8-bit personal computer Basic interpreters were tokenized recursive descent interpreters.  Tokenized to reduce the size of the program text, as well as speed up the interpreter by not have to parse text at runtime, and runtime recursive descent, trading off stack space usage versus having to build a parse tree in memory beforehand. Very few (if any?) built any sort of parse tree, or generated bytecodes for a run-time VM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the Basic programs as saved on disk were saved in tokenized form to reduce disk storage use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can detect tokenization in some interpreters from the fact the the List listing of program text is slightly different from the input text in formatting, as the output is re-generated from tokens on the fly, and the original text formatting information was not saved in the token record.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most implementations used 8-bit tokens (much smaller than uncompressed ASCII keywords), but IIRC Woz further compressed the tokens down to 6-bits for Apple I integer basic.  Many of the Tiny Basic's (Palo Alto, et.al.) did not tokenize, thus trading off larger Basic program text size (full ASCII text in memory), versus smaller interpreter code size (no separate token table and token decoder needed).&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2019-11-20T20:14:13.233" LastActivityDate="2019-11-20T20:14:13.233" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12823" PostTypeId="2" ParentId="12779" CreationDate="2019-11-19T15:41:34.117" Score="6" Body="&lt;p&gt;For nearly all machines with BASIC, I would expect any non-BASIC programs to use BASIC's workspace. Also, people (inc me) would not allow the OS to get a look-in and use its memory too ;)&lt;/p&gt;&#xA;" OwnerUserId="11490" LastActivityDate="2019-11-19T15:41:34.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12824" PostTypeId="2" ParentId="12789" CreationDate="2019-11-19T15:48:15.873" Score="2" Body="&lt;p&gt;On the VIC-20, you only had character mode (22x23) but you could redefine the character set, allowing 128x128 I think (may have been less) or what looked like more if you repeated characters around the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BBC Micro had a 6845 CRTC which allowed very flexible displays and you could display 640x512i (although as this used 40K of the available 32K, some was repeated. There were also games that had wider or taller modes.&lt;/p&gt;&#xA;" OwnerUserId="11490" LastActivityDate="2019-11-19T15:48:15.873" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12825" PostTypeId="2" ParentId="12814" CreationDate="2019-11-19T17:34:50.270" Score="15" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;were these interpreters implemented as tree-walker interpreters&#xA;  (simply traversing the parse tree) or bytecode interpreters?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have been looking at various BASICs for the last while. The answer is &quot;all of the above&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Pure interpreters - Tiny BASIC&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TinyBASIC parsed the line to the extent of converting the line number to an 8-bit value to see if the line already existed. If it did, it put it in the proper place and then stored the rest of the line behind it, unchanged in its original text form. Lines were separated by carriage returns, which is nice. You can read a discussion of the storage strategy &lt;a href=&quot;https://archive.org/details/dr_dobbs_journal_vol_01_201710/page/n11&quot; rel=&quot;nofollow noreferrer&quot;&gt;on page 11 of the volume 1 collection&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The goal of Tiny BASIC was to be as small as possible. Machines of the era often shipped with only 4k of RAM, which had to fit both the interpreter AND the user's program. As such, there was so little room left over that a single byte for the line number was not a real limitation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this means that the interpreter has to re-parse every line during run-time. It used a simple recursive descent system for this. As it parsed the line it converted the resulting tokens into an abstract syntax tree in the intermediary language and then ran the resulting AST through the IL interpreter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other versions of the language, notably Palo Alto TB, replaced the last step with one that ran the AST directly in assembly. This made the evaluation run much faster, although it still had the same overhead of parsing the line repeatedly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Semi-tokenized - MS&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; I found a good description of CB so I've made some edits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next up is the MS series, as typified (numerically if no other way) by Commodore BASIC. It started off like TB in that it would convert the line number from ASCII to binary, but in this case used a 16-bit value. It then continued scanning the line, converting keywords like &lt;code&gt;PRINT&lt;/code&gt; and &lt;code&gt;FOR&lt;/code&gt; into single-byte tokens. Everything else, variable names, numbers and strings, it left as-in in the code. To indicate that a given byte was a token vs. data, they set the high bit, meaning that you only had a total of 128 possible tokens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At runtime, anything with the high bit triggered a jump through a vector table into the parser for that function. For instance, the &lt;code&gt;FOR&lt;/code&gt; code would begin reading the following data to parse out the &lt;code&gt;I=1 TO 10&lt;/code&gt;. Because this was performance-critical, this code was placed in the zero page in the 6502, and I assume similar places on other CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that when it sees a variable it has to go look it up in a table. That table had two bytes of name, so that's why variables were only two letters long (you could type more, but they did nothing). Likewise, numbers were in ASCII format, so it had to convert them - over and over - into the 40-bit internal format to put it on the evaluation stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Fully tokenized - Atari&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, we come to Atari BASIC. AB tokenized everything, not just the statements. So in the case of &lt;code&gt;FOR I=1 TO 10&lt;/code&gt; it would not only convert the &lt;code&gt;FOR&lt;/code&gt; and &lt;code&gt;TO&lt;/code&gt; into tokens, but also the &lt;code&gt;1&lt;/code&gt; and &lt;code&gt;10&lt;/code&gt; would be converted from ASCII to the 40-bit internal format right then. Likewise, the &lt;code&gt;I&lt;/code&gt; variable had space set aside for it and its index in the table became its token, with the high-bit set to indicate this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in AB, a simple line like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT &quot;HELLO WORLD&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would result in something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0A 0F 00 20 0F 0B HELLO WORLD 13&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The 0F indicates a string literal follows 0B long, 13 is EOL. I'm going by memory here so always compare to &lt;a href=&quot;https://www.atariarchives.org/dere/chapt10.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;De Re Atari&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At runtime, there's nothing to convert or look up. The variable is an index pointing to its value so it's one operation to put its value onto the stack, the 1 and 10 are already converted so you just copy them onto the stack, etc. In theory, you can see that this should run &lt;em&gt;much&lt;/em&gt; faster than either MS or TB, and this was indeed the case for some BASICs like BASIC09, that used this strategy. However, AB managed to throw this out the window with some truly horrible code in places that made it one of the slowest BASICs ever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Upsides and downsides: most programs are small, so line numbers generally might be 3 chars on average. In AB these get expanded to 40 bits, whereas in MS they remain 3 bytes. So AB will take up more room for the same program in some cases. On the other hand, large numbers become smaller, 1.23456E-17 goes from 88 bits to 40 on AB. Other things are pretty much the same, so I am &lt;strong&gt;very&lt;/strong&gt; curious which is ultimately smaller. I suspect MS would be smaller on average simply because of the small-number rule.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a &lt;em&gt;little&lt;/em&gt; extra work one could have a second numeric constant type for small numbers, using a single byte to store two BDC digits. During the tokenization you start by assuming it's small and only change to the long token if need be. That would encode something like 75% of all numbers found in actual programs and expand the number only one byte (the token header) in the case of single-digit numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can see there are a range of solutions and all of them were used in production systems.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2019-11-29T12:46:53.573" LastActivityDate="2019-11-29T12:46:53.573" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12826" PostTypeId="1" AcceptedAnswerId="12827" CreationDate="2019-11-19T20:23:30.610" Score="11" ViewCount="1273" Body="&lt;p&gt;In the early days of transistors, when they cost on the order of a dollar each, it was possible to implement CPU registers with magnetic cores (the technology used for main memory at the time) instead of transistors, trading away performance for cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM 360 architecture had sixteen registers of 32 bits each, a generous allowance at the time, and was designed to scale over multiple orders of magnitude of price and performance, making it a likely candidate for such trade-offs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did any 360-compatible machine ever actually implement its registers with magnetic cores?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="12128" LastEditDate="2020-06-07T10:51:59.690" LastActivityDate="2020-06-07T10:51:59.690" Title="Did any 360-compatible machine implement registers in core?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;ibm&gt;&lt;mainframe&gt;&lt;s360&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12827" PostTypeId="2" ParentId="12826" CreationDate="2019-11-19T22:15:47.717" Score="13" Body="&lt;p&gt;Yes, for the IBM 360/30 at least the 16 32-bit registers (and 4 64-bit floating-point registers) were stored in the same core memory as the main memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM 360/30 used the IBM 2030 Processing Unit as it's CPU, and the &lt;a href=&quot;http://bitsavers.org/pdf/ibm/360/fe/2030/Y24-3360-1_2030_FE_Theory_Opns_Jun67.pdf&quot; rel=&quot;noreferrer&quot;&gt;IBM 2030 Processing Unit Field Theory of Operation&lt;/a&gt; manual states on the page 1-4 that &quot;The sixteen general registers and the four floating point registers are in local storage.&quot;  On page 2-72 it states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Included in the 8,192-position storage unit is&#xA;  an additional 512-position auxiliary&#xA;  storage section. In this section, 256&#xA;  positions are reserved for use by the miltiplexor [sic]&#xA;  channel. &lt;strong&gt;The other 256 positions&#xA;  of local storage are used by the CPU for&#xA;  special and general purpose registers&lt;/strong&gt; &#xA;  (Figure 2-74).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Emphasis mine)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FoYvu.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FoYvum.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar statements are made for the 16K and 32K storage units.  These storage units use core memory.  On page 3-10 you can see how the the registers are laid out in local memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM 2030 is basically an 8-bit CPU that executes microcode that actually executes the 32-bit IBM 360 instruction set.  It has internal 8-bit registers that I assume are implemented with semiconductor logic, but IBM 360's architectural registers are stored in core memory alongside the main memory.  &lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2019-11-19T22:27:49.993" LastActivityDate="2019-11-19T22:27:49.993" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12828" PostTypeId="2" ParentId="12826" CreationDate="2019-11-19T22:28:19.720" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did any 360-compatible machine ever actually implement its registers with magnetic cores?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, of course, in fact, it was standard for low end machines. Beside IBM, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12827/6659&quot;&gt;Ross Ridge details&lt;/a&gt;, many early compatible manufacturers did so. Examples are Sperry's &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_9000_series&quot; rel=&quot;noreferrer&quot;&gt;Univac 9000&lt;/a&gt; series, RCA's low end &lt;a href=&quot;https://en.wikipedia.org/wiki/RCA_Spectra_70&quot; rel=&quot;noreferrer&quot;&gt;Spectra 70&lt;/a&gt; models 15 and 25, or Siemens 4004/15.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-11-19T22:28:19.720" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12829" PostTypeId="2" ParentId="12768" CreationDate="2019-11-20T04:39:34.143" Score="2" Body="&lt;p&gt;For Apple II diskettes, some games used one &quot;sector&quot; per track, thus using all the sector header and inter-sector space on each track for more data.  This is because all the sectoring was &quot;soft&quot; and done strictly in software (custom RWTS code).&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2019-11-20T04:39:34.143" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12830" PostTypeId="2" ParentId="12789" CreationDate="2019-11-20T19:17:48.973" Score="2" Body="&lt;p&gt;For standard displays the Atari ST purports to offer at most a 640x200 pixel resolution, with a classic '80s big old border around the display. In PAL world the border is about 36% of the vertical time, which is conservatively at least 20% of the visible area, and 37.5% (/~22%) of the horizontal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clever programming allowed Atari ST programmers to remove the borders, increasing the total resolution.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The user doesn't get to pick the size of the viewport, or its location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But they do get to pick their output frequency and display type — 50Hz or 60Hz for colour monitors and televisions, or ~72Hz for monochrome monitors. Which Atari had implemented in a standard fashion, e.g. for each line having a horizontal counter and a bunch of attached tests:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if(counter == 2 &amp;amp;&amp;amp; frequency == 72) enable_horizontal_output();&#xA;if(counter == 13 &amp;amp;&amp;amp; frequency == 60) enable_horizontal_output();&#xA;if(counter == 14 &amp;amp;&amp;amp; frequency == 50) enable_horizontal_output();&#xA;&#xA;if(counter == 82 &amp;amp;&amp;amp; frequency == 72) enable_horizontal_output();&#xA;if(counter == 93 &amp;amp;&amp;amp; frequency == 60) disable_horizontal_output();&#xA;if(counter == 94 &amp;amp;&amp;amp; frequency == 50) disable_horizontal_output();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;... and similar tests on a line counter, with pixels being output only when both horizontal and vertical output enables are active. Those counter values are from memory, don't quote me on them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, you're probably already ahead of me here but once the state machine had been reverse engineered the demo scene first managed to beat the advertised resolution by raster racing and implementing code conceptually equivalent to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;get_into_phase_with_counter();&#xA;&#xA;set_frequency(72);&#xA;wait(3);&#xA;/* Just passed counter value 2; display is enabled 12 slots early! */&#xA;&#xA;set_frequency(60);&#xA;wait_until(counter == 13);&#xA;set_frequency(50);&#xA;/* Now none of the disable output conditions were ever satisfied, so output&#xA;continued right the way across the line! */&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Doing that and the vertical equivalent does what ST programmers call opening the borders, i.e. it gets rid of them. You now have a framebuffer beyond the visible screen area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, rather than the designed (non-monitor) maximum of 640x200 you can now expand to something like 864x285, at the cost of having to race the raster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Late demos manage to deploy the system's timers to do most of the raster racing, leaving a comfortable majority of the processing time available for animation. See e.g. &lt;a href=&quot;http://live.aldabase.com/2016/codef-ovr-interrupt-fullscreen/?sc1224&quot; rel=&quot;nofollow noreferrer&quot;&gt;Interrupt Fullscreen&lt;/a&gt; (link to an in-browser emulation), which conveniently starts with a fake out version of the usual hardware borders to give you an idea of scale (though it's probably border extending the more normal 320x200 4bpp graphics mode rather than the highest advertised of 640x200 2bpp; timings are the same you just distribute the fetched bits amongst pixels differently).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a fuller discussion of the state machine see the &lt;a href=&quot;http://www.atari-wiki.com/?title=ST_STE_Scanlines&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari-Forum Wiki&lt;/a&gt;. Measurements there are at a scale of 512 ticks/scanline, mine are at a scale of 128 ticks/scanline, map appropriately. I know of this stuff only thanks to that forum, so if any of my specifics deviate from what's documented there, prefer that documentation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Footnote 1: I'm even less confident of the specifics, but I'm pretty sure the Commodore 64 was amenable to similar tricks based on similar constraints and objectives. A counter plus a bunch of exactly-equals tests is an efficient way to design video hardware, so the same probably also applies elsewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Footnote 2: the same avenue of exploration has also led to other Atari ST scenesters being able to produce things like a hardware scroll that the hardware doesn't intend to provide, but that's not really relevant to your question.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-11-20T20:33:46.683" LastActivityDate="2019-11-20T20:33:46.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12831" PostTypeId="2" ParentId="481" CreationDate="2019-11-20T21:53:57.347" Score="0" Body="&lt;p&gt;In &lt;a href=&quot;https://msdos-games.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://msdos-games.com&lt;/a&gt; you can play ms-dos games emulated in your browser.&lt;/p&gt;&#xA;" OwnerUserId="15626" LastActivityDate="2019-11-20T21:53:57.347" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12832" PostTypeId="1" AcceptedAnswerId="12833" CreationDate="2019-11-21T00:04:31.310" Score="4" ViewCount="594" Body="&lt;p&gt;I have that awesome book - Zx Spectrum ROM Disassembled (correct the title if I got it wrong), where the author wrote about the audio code in the ROM and referring to &quot;T&quot; state, &quot;... T200... T5000, etc&quot;. What is this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&#xA;In reference to 48K Spectrum, in Australia under the 50Mhz spectrum (PAL).&lt;/p&gt;&#xA;" OwnerUserId="4948" LastEditorUserId="3290" LastEditDate="2020-04-22T19:38:18.007" LastActivityDate="2020-04-22T19:38:18.007" Title="ZX Spectrum: What is the &quot;T&quot; state value, with reference to sound?" Tags="&lt;zx-spectrum&gt;&lt;rom&gt;&lt;terminology&gt;&lt;digital-audio&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12833" PostTypeId="2" ParentId="12832" CreationDate="2019-11-21T00:49:15.797" Score="6" Body="&lt;p&gt;In the Spectrum lexicon, a t-state is just a &quot;time state&quot; — a single cycle of the ~3.5Mhz clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For implied evidence of that, see e.g. &lt;a href=&quot;https://www.worldofspectrum.org/faq/reference/128kreference.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this document of 128K ZX Spectrum Technical Information&lt;/a&gt;, which states &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...  there are 70908 T states per frame, and the '50 Hz' interrupt occurs at 50.01 Hz.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;70908 t-states per frame * 50.01 Hz = 3.546 million t-states per second. Which is the clock rate of the processor (slightly rounded, because the 50.01 is slightly rounded).&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-11-21T13:02:32.293" LastActivityDate="2019-11-21T13:02:32.293" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12834" PostTypeId="1" CreationDate="2019-11-21T00:58:34.830" Score="4" ViewCount="528" Body="&lt;p&gt;On home / personal computers (such as before 1984), a machine might be described as having 24k RAM, but only 18k of that available to BASIC. If the machine had BASIC and the OS (or BIOS) stored in ROM, what would have been in this 6k of RAM that wasn't available to BASIC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume this space would have been used to store variables or strings (or assembly-code which could use all of the memory), so I'm looking to see if anything else was stored there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would this computer need to load the entire OS/BIOS into RAM, or only some variable components .&lt;/p&gt;&#xA;" OwnerUserId="11744" LastEditorUserId="11916" LastEditDate="2019-11-22T22:07:20.163" LastActivityDate="2019-12-07T15:06:13.523" Title="What was stored in memory that was &quot;unavailable to BASIC&quot;?" Tags="&lt;hardware&gt;&lt;basic&gt;&lt;ram&gt;" AnswerCount="3" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12835" PostTypeId="1" AcceptedAnswerId="12837" CreationDate="2019-11-21T04:26:46.270" Score="80" ViewCount="17894" Body="&lt;p&gt;I am wondering what were the color shades and brightness of the text appearing on classic monochrome terminals? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were to recreate approximately the green-text-on-black-screen or amber-text-on-black-screen in the user-interface of an app on modern computers, what color should I use for such text? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;➥ Any idea of the &lt;a href=&quot;https://en.wikipedia.org/wiki/RGB_color_model&quot; rel=&quot;noreferrer&quot;&gt;RGB&lt;/a&gt; values of such text? Brightness? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Photographs of computer stations from that era seem to have very poor color fidelity. So I am left wondering… and asking.&lt;/p&gt;&#xA;" OwnerUserId="851" LastEditorUserId="851" LastEditDate="2019-11-27T19:45:18.833" LastActivityDate="2019-11-27T19:45:18.833" Title="Exactly what color was the text on monochrome terminals with green-on-black and amber-on-black screens?" Tags="&lt;terminal&gt;" AnswerCount="6" CommentCount="15" FavoriteCount="35" ContentLicense="CC BY-SA 4.0" />
  <row Id="12836" PostTypeId="1" AcceptedAnswerId="12857" CreationDate="2019-11-21T05:51:58.357" Score="5" ViewCount="628" Body="&lt;p&gt;My CRT all of a sudden is shifted to the right. I cannot adjust it via the adjustment potentiometers, nothing changes when these are turned. If I increase the brightness, the whole screen turns green (green monochrome crt).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The monitor is in an old compaq portable I. Any suggestions as to what to look for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was working normally and all of sudden did this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer a few of the questions.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;As another user commented, the compact portable has a built-in CRT, so I think they are all the same.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I have looked at the service manual, it does go through the steps to calibrate the monitor using the 8 various POTs on the top of the monitor assembly. The vertical adjustment POTs work, but the horizontal ones have no affect on the display at all. The service manual does only goes as far as to mention how to turn these POTs. It doesn't say what to do if the POTs do not work.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I measured the resistance of the POTs, they are all working so I believe there is some control circuitry (transistor, capacitor?) that has gone bad.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The reason I do not suspect a capacitor is because the issue happened all of a sudden.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I have tried another Video Card on this computer and the same problem occurs (Both video cards are for the Compaq portable I with the internal CRT connector).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Edit: &#xA;The reference guide I was using is from here: &lt;a href=&quot;https://www.repairfaq.org/sam/monfaq.htm#monpicshor&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.repairfaq.org/sam/monfaq.htm#monpicshor&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I increase brightness, the entire CRT goes green so I think that means the CRT itself is working correctly but that there is an issue with the horizontal phase (bullet point #2), or Horizontal Output Transistor (HOT) (bullet point #3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no wrap-around on the image, the entire image is shifted to the right and the missing section is missing. When the computer is put into low-resolution mode the horizontal offset becomes even worse. In hi-resolution (80 column mode iirc) the offset is maybe 25% shift to the right. In low-resolution (40 column mode?) it is more like 50% shifted to the right (half the screen is cut off).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a picture of the adjustments possible. According to the compaq manual, &quot;Master Vid Ctr&quot; and &quot;Hi Scan Ctr&quot; are used to adjust the horizontal position. These two adjustments do nothing to the image when turned. The other POTs for Vertical and Brightness do change the image.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/qf48y.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qf48y.jpg&quot; alt=&quot;Adjustment POTs&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are two pictures of the screen, one in low-res and one in hi-res mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gYT1E.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gYT1E.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/TnU9n.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TnU9n.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another update:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was asked about what happens to the right side of the screen. Well, it appears the image itself gets cut off. Even if I reduce the width as much as possible, the right columns of text are cut off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vN0TF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vN0TF.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was also able to move the bad CRT driver board into a known working Compaq Portable. The issue follows the CRT driver. So I know there is definitely something wrong with the driver board and not with the power supply, video card or tube itself.&lt;/p&gt;&#xA;" OwnerUserId="12117" LastEditorUserId="12117" LastEditDate="2019-11-22T13:07:16.963" LastActivityDate="2019-11-23T02:24:07.220" Title="Monochrome CRT Repair - Horizontal offset" Tags="&lt;crt-monitor&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12837" PostTypeId="2" ParentId="12835" CreationDate="2019-11-21T06:39:38.240" Score="72" Body="&lt;p&gt;Based on the phosphors used for green and amber screens, &lt;a href=&quot;https://superuser.com/a/1206781/414739&quot;&gt;this answer&lt;/a&gt; on Super User gives the following values:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Rctk9.png&quot; alt=&quot;green/amber RGB values&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;i.e.&lt;/em&gt; #FFB000 for dark amber, #FFCC00 for light amber, and variations around #33FF33 or #66FF66 for green.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, colours vary with brightness adjustments and with the age of the phosphors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should be pointed out that reproduction of colours isn't consistent across current generation monitors. Thus, even if the values in this answer are used, what each person will see on their screen will be slightly different than what another person will see with different hardware. For applications where accurate color reproduction is important, there are monitors/software/systems/test hardware which can be used to &lt;a href=&quot;https://www.google.com/search?q=calibrate+color+gamut&quot; rel=&quot;noreferrer&quot;&gt;calibrate the colour gamut of the monitor&lt;/a&gt; in order to more accurately reproduce colours.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="674" LastEditDate="2019-11-21T17:16:24.143" LastActivityDate="2019-11-21T17:16:24.143" CommentCount="12" CommunityOwnedDate="2019-11-21T06:39:38.240" ContentLicense="CC BY-SA 4.0" />
  <row Id="12838" PostTypeId="1" AcceptedAnswerId="12839" CreationDate="2019-11-21T10:03:59.543" Score="13" ViewCount="1357" Body="&lt;p&gt;Turbo C follows the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_Memory_Model&quot; rel=&quot;noreferrer&quot;&gt;Intel Memory Model&lt;/a&gt; where in Tiny, Small and Compact models calling a function is near but in Medium, Large and Huge models calling a function uses far calls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I want to develop a Turbo C library using assembly, is there a way to make this library functional for all memory models? My problem is that functions in the library will return control using either RETN or RETF - and in either way they will malfunction in half of the memory models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a method to detect memory model from within the program, so as to notify the function in some way and make it decide between RETN and RETF?&lt;/p&gt;&#xA;" OwnerUserId="13911" LastActivityDate="2019-11-22T05:11:23.537" Title="Memory models for assembly libraries for Turbo C" Tags="&lt;assembly&gt;&lt;c&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12839" PostTypeId="2" ParentId="12838" CreationDate="2019-11-21T10:19:15.337" Score="11" Body="&lt;p&gt;I don’t think there’s a surefire way to detect the memory model being used at run-time, or even adjust code post-build in an object during linking. Libraries were provided in multiple variants, one for each supported memory model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is however possible to write code which will adjust to different memory models at build time, so a single assembly file can be used to produce all the required object file variants. In your procedure declarations, you can write&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MYPROCEDURE proc DIST&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;DIST&lt;/code&gt; is a macro you define as &lt;code&gt;NEAR&lt;/code&gt; or &lt;code&gt;FAR&lt;/code&gt; depending on the memory model (either detected, or specified by flags you provide when building all the variants of your library), and then the assembler will generate &lt;code&gt;RETN&lt;/code&gt; or &lt;code&gt;RETF&lt;/code&gt; as appropriate. You can also get the assembler to adjust &lt;code&gt;CALL&lt;/code&gt; sites by declaring the external symbols appropriately each time (&lt;code&gt;extrn MYPROCEDURE:DIST&lt;/code&gt; for TASM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will also need to handle segment registers differently in some cases (at least in the tiny memory model).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to handle C calling conventions, things get a little more complex, especially if you need to handle pointers passed as arguments — their size will change depending on the memory model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://www.cs.cmu.edu/~ralf/files.html&quot; rel=&quot;noreferrer&quot;&gt;Ralf Brown’s AMISLIB&lt;/a&gt; for one such implementation.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-11-21T10:55:45.897" LastActivityDate="2019-11-21T10:55:45.897" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12840" PostTypeId="2" ParentId="12838" CreationDate="2019-11-21T17:09:29.817" Score="6" Body="&lt;p&gt;Given a function declaration like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void far copyAnywhere(void far *dest, void far *src, unsigned len);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;it will be usable from within any memory model except &lt;code&gt;huge&lt;/code&gt;.  If called from within e.g. small model code, passing non-qualified pointers, the generated machine code would look something like (arguments are pushed right to left)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; Set up argument len&#xA;push [len]&#xA;; Set up argument src&#xA;push ds&#xA;push [src]&#xA;; Set up argument dest&#xA;push ds&#xA;push [dest]&#xA;; Do the call, pushing both CS and IP&#xA;push cs&#xA;call _copyAnywhere ; Just pushes IP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The effect of memory models is to determine whether functions and pointers default to being &lt;code&gt;near&lt;/code&gt; or &lt;code&gt;far&lt;/code&gt;, but explicit &lt;code&gt;far&lt;/code&gt; qualifiers can be used to handle cases contrary to that default.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-11-21T17:09:29.817" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12841" PostTypeId="2" ParentId="12814" CreationDate="2019-11-21T20:55:58.650" Score="5" Body="&lt;p&gt;Dartmouth Basic wasn't an interpreter at all — it compiled directly into machine code when the user typed RUN. It was designed so that the program appeared to start executing almost immediately, and there were a number of tricks that made this possible.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Speed of compilation was a design criterion. The compiler only needed a single pass over the input, and did almost no optimization.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The compiler and the standard runtime library were generated at the same time and had matched versions, so the compiler knew where in memory the called library routines would be. This meant that no separate linker was needed for the standard library.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The command shell (it wasn't called that, but I'll use the Unix/Linux name for clarity) printed out a header (the program name and current date/time) before running the program. At 10 char/sec, this took about 3 seconds, so any compilation &amp;lt; 3 seconds appeared &quot;instantaneous&quot;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4311" LastEditorUserId="4311" LastEditDate="2019-11-27T08:04:15.423" LastActivityDate="2019-11-27T08:04:15.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12842" PostTypeId="2" ParentId="12835" CreationDate="2019-11-21T21:57:09.890" Score="40" Body="&lt;p&gt;If your aim is to recreate more closely the effect of an old CRT (at the expense of readability), whatever color you choose based on the previous answer, you should consider using a very bright (almost white) color for the text itself, and then using the chosen color as a glowing neon-like effect &lt;em&gt;around&lt;/em&gt; the outline of the text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, here is what you can obtain based on the #00FF66 color:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vw0AQ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vw0AQ.png&quot; alt=&quot;Simulation of phosphor bleed&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a reference, here is the CSS style that corresponds to the above effect:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;font-size: 30px;&#xA;color: #f0fff8; /* almost white */&#xA;text-shadow: 0 0 3px #80ffc0, 0 0 10px #00ff66, 0 0 20px #00ff66, 0 0 30px #00ff66;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using multiple shadows with increasing radius makes for a better effect. Also note the first, small radius (3px) shadow is also chosen in a color closer to white.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the font I used is &lt;a href=&quot;http://sensi.org/~svo/glasstty/&quot; rel=&quot;noreferrer&quot;&gt;Glass TTY VT220&lt;/a&gt; (cool font by the way, and public domain).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a real image of an old computer (I don't even know what it is, it looks like a french minitel) where you can see the text is actually very bright, and the general appearance looks very close from what I recreated above (maybe more cyan-ish than green-ish, but we clearly see the glow):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MCHMJ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MCHMJ.jpg&quot; alt=&quot;Computer showing phosphor bleed effect&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is also how graphs appeared on old analog oscilloscopes.&lt;/p&gt;&#xA;" OwnerUserId="4614" LastEditorUserId="276" LastEditDate="2019-11-27T15:28:45.993" LastActivityDate="2019-11-27T15:28:45.993" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="12843" PostTypeId="2" ParentId="12838" CreationDate="2019-11-22T02:20:33.113" Score="5" Body="&lt;p&gt;You can't really detect the memory model the C code was compiled with at runtime.  I suppose you check some sort of variable that indicates what model was used but you'd be constantly testing it in your assembly code making your code horribly inefficient. A much better way to handle multiple memory models with a library is to assemble a separate version of each function for each memory model.  Fortunately this doesn't mean you need write a separate function for each memory model.  You can use certain features of your assembler, assuming you're using TASM or other MASM derived assembler, so that you only write each function once.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Handling far and near RET&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The specific problem of RETN or RETF can be handled more or less automatically.  Normally you would just use the RET instruction, and the assembler will automatically pick the correct near or far return instruction based on how the procedure you use them in is defined.  For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;nearproc PROC   NEAR&#xA;    ret               ; generates opcode C3, near RET&#xA;nearproc ENDP&#xA;&#xA;farproc PROC    FAR&#xA;    ret               ; generates opcode CB, far RET&#xA;farproc ENDP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2&gt;The .MODEL directive&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Normally if you don't specify NEAR or FAR, the default is NEAR, but this can be changed by the .MODEL directive:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    .MODEL  SMALL&#xA;    .CODE&#xA;smallproc PROC&#xA;    ret               ; generates opcode C3, near RET&#xA;smallproc ENDP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    .MODEL  LARGE&#xA;    .CODE&#xA;largeproc PROC&#xA;    ret               ; generates opcode CB, far RET&#xA;largeproc ENDP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2&gt;Specifying a calling convention&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The .MODEL directive can also set a default calling convention when using the assemblers facilities for handling arguments to functions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    .MODEL  COMPACT, C&#xA;    .CODE   &#xA;&#xA;memcpy PROC dest:PTR, src:PTR, len:WORD&#xA;    push    cx&#xA;&#xA;    IF      @DataSize       ; FAR data model&#xA;&#xA;    push    ds&#xA;    push    es&#xA;    les     di, [dest]&#xA;    lds     si, [src]&#xA;&#xA;    ELSE                    ; NEAR data model&#xA;&#xA;    mov     di, [dest]&#xA;    mov     si, [src]&#xA;&#xA;    ENDIF&#xA;&#xA;    mov     cx, [len]&#xA;    cld&#xA;    rep movsb&#xA;&#xA;    IF      @DataSize       ; FAR data model&#xA;    pop     es&#xA;    pop     ds&#xA;    ENDIF&#xA;&#xA;    pop     cx    &#xA;    ret    &#xA;memcpy ENDP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Because the &quot;C&quot; language was specified with the .MODEL directive, the assembler handles generating the necessary prologue (&lt;code&gt;push bp&lt;/code&gt; &lt;code&gt;mov bp, sp&lt;/code&gt;) and epilogue (&lt;code&gt;pop bp&lt;/code&gt;) and figures out where the arguments to function live on the stack relative to BP.  It automatically handles the fact that arguments will have different sizes depending on whether the code is using a near or far data model. It also automatically adds an underscore (&lt;code&gt;_&lt;/code&gt;) to the name of the function, so the actual symbol being defined is &lt;code&gt;_memcpy&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't however handle picking the instructions needed to load the arguments. As you can see this code is conditionalized on the &lt;code&gt;@DataSize&lt;/code&gt; predefined symbol. This symbol is set to 0 for near data models and to 1 for far data models.  There's also &lt;code&gt;@CodeSize&lt;/code&gt; predefined symbol you can use to determine the code model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The .MODEL directive and the &lt;code&gt;@DataSize&lt;/code&gt; and &lt;code&gt;@CodeSize&lt;/code&gt; symbols it sets are all you need to not only ensure the correct RET instruction is used, but also to lets you handle the fact that your code will need to change in order accommodate the different memory models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is true whether you use the argument handling and automatic prologue and epilogue and other similar facilities of the compiler.  These can be a double edged sword though as the code that they generate isn't always optimal.  Instead of specifying a calling convention with the .MODEL directive you can also specify it on a procedure by procedure basis as an additional parameter in the PROC directive. Use NOLANGUAGE to tell the assembler not to do any of this code generation for the current procedure.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;How to pass a memory model on the command line&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Now there's one problem left, how to tell the assembler which memory model to use.  The simple way would be define a symbol using the &lt;code&gt;/D&lt;/code&gt; command line option, giving the name of the memory model you wanted:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ml /c /DMemModel=MEDIUM memcpy.asm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You could then use &lt;code&gt;MemModel&lt;/code&gt; with the .MODEL directive:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    .MODEL MemModel, C&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The problem with this is that only works with MASM 6.  With TASM or MASM 5 the &lt;code&gt;/D&lt;/code&gt; option works differently. These assemblers would define &lt;code&gt;MemModel&lt;/code&gt; as a symbol that's equal to the symbol &lt;code&gt;MEDIUM&lt;/code&gt;, where as MASM 6 defines &lt;code&gt;MemModel&lt;/code&gt; as a text macro that expands to &lt;code&gt;MEDIUM&lt;/code&gt;.  Since TASM and MASM 5 would define &lt;code&gt;MemModel&lt;/code&gt; as a symbol, you'll get an error because the .MODEL directive doesn't accept symbols.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, if you're using either of these older assemblers you need something more complicated.  The command line is almost the same, but note that the quotes are important:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;tasm /ml /DMemModel=&quot;MEDIUM&quot; memcpy.asm&#xA;masm /ml /DMemModel=&quot;MEDIUM&quot; memcpy.asm;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(The &lt;code&gt;/ml&lt;/code&gt; options are there so the assemblers define &lt;code&gt;_memcpy&lt;/code&gt; in lower case, otherwise they'll convert it to uppercase &lt;code&gt;_MEMCPY&lt;/code&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this work, you'll need this code at the start of your assembly source:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    IFIDNI  &amp;lt;&quot;TINY&quot;&amp;gt;, %MemModel&#xA;    .MODEL  TINY, C&#xA;    ELSEIFIDNI  &amp;lt;&quot;SMALL&quot;&amp;gt;, %MemModel&#xA;    .MODEL  SMALL, C&#xA;    ELSEIFIDNI  &amp;lt;&quot;MEDIUM&quot;&amp;gt;, %MemModel&#xA;    .MODEL  MEDIUM, C&#xA;    ELSEIFIDNI  &amp;lt;&quot;COMPACT&quot;&amp;gt;, %MemModel&#xA;    .MODEL  COMPACT, C&#xA;    ELSEIFIDNI  &amp;lt;&quot;LARGE&quot;&amp;gt;, %MemModel&#xA;    .MODEL  LARGE, C&#xA;    ELSEIFIDNI  &amp;lt;&quot;HUGE&quot;&amp;gt;, %MemModel&#xA;    .MODEL  HUGE, C&#xA;    ENDIF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To save having to having to repeat this code in every source file you can put it in an include file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    INCLUDE memmodel.inc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2019-11-22T05:11:23.537" LastActivityDate="2019-11-22T05:11:23.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12844" PostTypeId="2" ParentId="10881" CreationDate="2019-11-22T04:19:39.787" Score="0" Body="&lt;p&gt;There were TONS of games written in the '70s for the 8080 and CP/M that could run on the IMSAI 8080.  A lot of games written in BASIC, too.&lt;/p&gt;&#xA;" OwnerUserId="15638" LastActivityDate="2019-11-22T04:19:39.787" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12845" PostTypeId="2" ParentId="12835" CreationDate="2019-11-22T06:09:28.297" Score="19" Body="&lt;p&gt;I dimly recall these two specific hue frequencies were picked because the human eye focuses them the most accurately.  Other colors would focus in front of or behind the retina.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A modern RGB green is pretty close to the right color of green, I believe so can be used as is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recreating the old amber on an RGB screen &lt;strong&gt;does not work&lt;/strong&gt; because it generates not a single easy-to-focus amber wavelength, but two &lt;em&gt;different&lt;/em&gt; wavelengths, one of green and one of red, that definitely do not focus at the same distance, and further won't be bent the same by the glasses of an eyeglass wearer, thus separating into separate red and green characters.  You can create a color that seems to be the same, if you want, but it will lack the key property of the original of being easy on the eyes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Outside the scope of your question, but since RGB's green channel is so sharply-focused on the retina, you can make equally easy-to-focus text with any foreground you want.  The background should simply use the same R and B channels, and have the G channel be 0 or maximum, whichever is farther from the foreground's G channel.&lt;/p&gt;&#xA;" OwnerUserId="13920" LastActivityDate="2019-11-22T06:09:28.297" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12846" PostTypeId="1" CreationDate="2019-11-22T07:43:20.460" Score="10" ViewCount="699" Body="&lt;p&gt;My Apple IIc is what appears to be the first US model: A2S4000 with&#xA;version 255 ROMs. The keyboard PCB is marked 820 0108 03 ©1983, and&#xA;the keyswitches are the &quot;cross&quot; type as seen below, without any&#xA;obvious brand markings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y3JJY.jpg&quot; width=&quot;300&quot;/&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the keys on the keyboard are very stiff and do not depress&#xA;smoothly, requiring more than usual pressure to depress and then often&#xA;depressing with an uncomfortable sort of a small &quot;crunch&quot; after which&#xA;the pressure needed to bottom out the key decreases enormously. This&#xA;happens particularly when not striking a key dead centre, getting&#xA;worse as one moves further from the center of the key, though it&#xA;happens for many keys even when pressed dead centre. The degree of the&#xA;problem varies between keys; &lt;kbd&gt;Q&lt;/kbd&gt; is pretty smooth for both&#xA;centre and edge presses, whereas &lt;kbd&gt;W&lt;/kbd&gt; is bad even for presses&#xA;dead centre. The &lt;kbd&gt;reset&lt;/kbd&gt; has the same issue. (That's not&#xA;really a surprise; it appears to use the same keyswitch as the rest of&#xA;the keys.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;kbd&gt;caps lock&lt;/kbd&gt; key and &lt;kbd&gt;80/40&lt;/kbd&gt; and&#xA;&lt;kbd&gt;keyboard&lt;/kbd&gt; switches (again, all appear to be using the same&#xA;keyswitch) also don't release easily from their depressed (&quot;on&quot;)&#xA;state; they need to be wiggled as one depresses them when trying to&#xA;get them to release.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are my options for improving the feel of my keyboard? Is there&#xA;some sort of cleaning (perhaps involving isopropyl alcohol or contact&#xA;cleaner) or lubrication I could do that would help fix things? Or do I&#xA;need to replace the switches? In the latter case, the easiest option&#xA;would be to find a replacement keyboard, but those seem difficult to&#xA;find and expensive. If I were going to go so far as to desolder all&#xA;the switches and replace them, what switches could I use?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="11916" LastEditDate="2019-12-30T14:13:42.917" LastActivityDate="2021-05-13T19:08:30.853" Title="How do I clean/refurbish an Apple IIc Keyboard?" Tags="&lt;apple-ii&gt;&lt;keyboards&gt;&lt;maintenance&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12847" PostTypeId="1" CreationDate="2019-11-22T07:49:51.200" Score="4" ViewCount="238" Body="&lt;p&gt;My Apple IIc is what appears to be the first US model: A2S4000 with&#xA;version 255 ROMs. The upper half of the case is held to the base with&#xA;six Phillips drive button-head 2 cm screws with a very wide thread, of&#xA;which I'm missing two. They look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/giaHd.jpg&quot; height=&quot;130&quot;/&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/bDl5U.jpg&quot; height=&quot;130&quot;/&gt;&#xA;Larger images: &lt;a href=&quot;https://i.stack.imgur.com/giaHd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;bit&lt;/a&gt;, &lt;a href=&quot;https://i.stack.imgur.com/bDl5U.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;head&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The front four screws going through the keyboard tap straight into&#xA;plastic sleeeves molded into the case, so there's a danger of&#xA;destroying the existing threads of I use the wrong screw (which&#xA;obviously I want to avoid). The rear two screws go through a hole in a&#xA;plastic tab with a small piece of thin sheet metal, with two similar&#xA;holes, folded around it, so I am guessing that this would conform with&#xA;screws with a different pitch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are these screws called, or what terms should I use when&#xA;searching for replacements? What are the dimensions I should be&#xA;confirming (I'm likely to be ordering these over the Internet) and, if&#xA;you don't already know what dimensions Apple specified for this screw,&#xA;how ought I measure them?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-11-22T21:23:31.247" LastActivityDate="2019-11-22T21:23:31.247" Title="What is the name/type of the Apple IIc case screws?" Tags="&lt;apple-ii&gt;&lt;screw&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12848" PostTypeId="2" ParentId="12834" CreationDate="2019-11-22T09:16:29.087" Score="5" Body="&lt;p&gt;Let's take for example an MSX computer with 64K RAM. That's what you get on boot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PuNxC.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PuNxC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where does this 28815 come from?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To start with, a MSX is a Z80 based machine. The Z80 has an addressing space of 64K. The MSX standard divides these 64K in four 16K pages that can be independently switched to any internal or external memory slot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When booting in BASIC mode (the default unless there's a disk system present or a game cartridge inserted) the first page is switched to the BIOS ROM and the second page is switched to the BASIC interpreter ROM. This leaves two more pages that are switched to RAM, so 32K RAM are available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the MSX system reserves some RAM for BIOS work area. This area starts at F380h, so this turns those 32K into 29568 bytes. Add (or better, substract) one extra K or so for BASIC-specific work area and the stack itself, and that's it, 28K free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Side note: when a disk system is present additional work area is required for MSX-DOS, so the free space in BASIC turns into 23K)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;And what happens with those &quot;invisible&quot; 32K RAM in the lower two pages?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nothing. That is, BASIC does nothing with them. The MSX2 standard introduced &lt;a href=&quot;https://github.com/Konamiman/MSX2-Technical-Handbook/blob/master/md/Chapter2.md#211-additions-for-ram-disk&quot; rel=&quot;noreferrer&quot;&gt;a limited RAM disk mechanism&lt;/a&gt; that made use of that memory area, but other than that, that RAM was &quot;wasted&quot; as far as MSX-BASIC was concerned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course you were free to use that extra RAM from BASIC using the BIOS inter-slot read/write routines (you'd need custom assembly code for that, though) but from the point of view of the BASIC interpreter itself that RAM didn't exist.&lt;/p&gt;&#xA;" OwnerUserId="130" LastActivityDate="2019-11-22T09:16:29.087" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12849" PostTypeId="2" ParentId="12834" CreationDate="2019-11-22T10:03:50.500" Score="5" Body="&lt;p&gt;If by &quot;unavailable to store BASIC program text,&quot; the general answer&#xA;would be &quot;all sorts of stuff.&quot; A &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/12834/7208&quot;&gt;typical memory map for an early&#xA;Apple system&lt;/a&gt; would be along the lines of the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$0000 - $00FF (0 - 255): Zero Page (system variables)&#xA;$0100 - $01FF (256 - 511): 6502 Processor Stack&#xA;$0200 - $02FF (512 - 767): GETLN Line Input Buffer&#xA;$0300 - $03CF (768 - 975): Free Space for Machine Language, Shape Table, etc.&#xA;$03D0 - $03FF (976 - 1023): DOS, ProDOS, and Interrupt Vectors&#xA;$0400 - $07FF (1024 - 2047): Text Video Page and Peripheral Screenholes&#xA;$0800 - $0BFF (2048 - 3071): Text Video Page 2 or Applesoft Program and Variables&#xA;$0C00 - $1FFF (3072 - 8191): Free Space for Machine Language, Shapes, etc.&#xA;(might be overwritten if you use a lot of variables or BASIC program is long)&#xA;$2000 - $3FFF (8192 - 16383): High Resolution Graphics Page 1&#xA;$4000 - $5FFF (16384 - 24575): High Resolution Graphics Page 2&#xA;$6000 - $95FF (24576 - 38399): Applesoft String Data&#xA;(may have a little space free)&#xA;(some BASIC programs move the variables all the way up to $4000 or even $6000)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There's a lot of machine code and corresponding data needed to do the&#xA;basic operations of a machine such as reading from the keyboard,&#xA;keeping track of what program is loaded, and so on. As you can&#xA;probably guess, you've asked a &lt;em&gt;really&lt;/em&gt; broad question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best thing to do is to read through, or at least skim, the&#xA;(non-BASIC) reference manuals for some typical computers, such as the&#xA;&lt;a href=&quot;https://archive.org/details/Apple_II_Reference_Manual_1979_Apple&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Apple II Reference Manual&lt;/em&gt;&lt;/a&gt; and the &lt;a href=&quot;https://archive.org/details/Commodore_64_Programmers_Reference_Guide_1983_Commodore&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Commodore 64 Programmer's&#xA;Reference Guide&lt;/em&gt;&lt;/a&gt;. These go into detail about how the memory is&#xA;used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To understand them, you may need some basic knowledge of assembly&#xA;language programming. If you don't have that at all, you should&#xA;probably start with a beginner's machine-language tutorial first.&#xA;There are tons of books and other resources out there for this,&#xA;varying vastly in quality, but one I came across recently that looks&#xA;good is Roger Wagner's &lt;a href=&quot;https://archive.org/details/AssemblyLinesCompleteWagner/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Assembly Lines: The Complete Book&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-11-25T16:41:48.267" LastActivityDate="2019-11-25T16:41:48.267" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12850" PostTypeId="2" ParentId="12847" CreationDate="2019-11-22T10:47:33.637" Score="6" Body="&lt;p&gt;They are self-tapping but not self-drilling (the tip is also blunt.)&lt;/p&gt;&#xA;" OwnerUserId="15497" LastActivityDate="2019-11-22T10:47:33.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12851" PostTypeId="2" ParentId="12847" CreationDate="2019-11-22T10:48:34.673" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What are these screws called&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exact term may depend on manufacturer, but usually they are classed as &lt;strong&gt;single threaded&lt;/strong&gt;, &lt;strong&gt;self-tapping&lt;/strong&gt; with &lt;strong&gt;thread-forming&lt;/strong&gt; as sub-class. The tip shown is close (*1) to a &lt;strong&gt;Type B Tip&lt;/strong&gt; indicating that it's meant to be used with a predrilled hole of about the same diameter as the inner one of the screw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applicable standards are DIN 7981 / ISO 7049 (old) or  DIN/ISO 1478..1483 (new).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your intention is to get exact replacement to avoid recutting, it may need some luck and a good way to measure the valid parameters (inner/outer diameter, thread inclination, thread form), as these screws are usually odered in a more relaxed manners than bolts are. After all, their counterpart is a metal/plastic hole, it'll cut the way it needs on its own and it's not intended to be opened or used again - or at least not many times.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Close, as there is almost no cone at the tip - still within the definition.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-22T11:00:05.507" LastActivityDate="2019-11-22T11:00:05.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12852" PostTypeId="2" ParentId="12835" CreationDate="2019-11-22T17:02:32.007" Score="1" Body="&lt;p&gt;I have never seen an amber display, but I have seen a whole lot of different hues of green - yellow-ish, blue-ish, cyan-ish, white-ish, deep green, probably whatever the tube maker had left for the mix. And I am even not sure that the &quot;deep green&quot; I remember is at all possible to represent by all-positive RGB values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An important aspect to represent is the phosphor persistence - the pixels fading in slow fashion (1/10..1/2s) after being illuminated. Some of them even faded to warmer color before going completely dark.&lt;/p&gt;&#xA;" OwnerUserId="15647" LastActivityDate="2019-11-22T17:02:32.007" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12853" PostTypeId="1" AcceptedAnswerId="12854" CreationDate="2019-11-22T20:13:17.917" Score="8" ViewCount="680" Body="&lt;p&gt;I'm working my way through my retrobasic interpreter, feeding it an expanding diet of 101 BASIC Games. Here's an odd one...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;40 DIM F(6,6),H(6,6),A(4),B(4),C(6),L(3)&#xA;...&#xA;90 A=INT(6*RND(1)+1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This kills my interpreter because the DIM says this is an array, but on line 90 we try to set its value without a subscript and it expects two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the right thing here:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;are DIM A(4) and A two different variables?&lt;/li&gt;&#xA;&lt;li&gt;when there's no subscript, do you assume 1,1...?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Anyone know what a real BASIC does here?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2019-11-22T20:19:21.647" LastActivityDate="2019-11-23T22:10:19.493" Title="MS BASIC, access a DIMed variable with no index?" Tags="&lt;microsoft-basic&gt;" AnswerCount="4" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12854" PostTypeId="2" ParentId="12853" CreationDate="2019-11-22T20:20:57.050" Score="15" Body="&lt;p&gt;They're two different variables, at least in the version of MS BASIC on the C64:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DIM A(4)&#xA;&#xA;READY.&#xA;PRINT A, A(1)&#xA; 0         0&#xA;&#xA;READY.&#xA;A = 1&#xA;&#xA;READY.&#xA;PRINT A, A(1)&#xA; 1         0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Basically &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;A(...)&lt;/code&gt; refer to two different variables, just like &lt;code&gt;A$&lt;/code&gt; and &lt;code&gt;A%&lt;/code&gt; are also different variables than &lt;code&gt;A&lt;/code&gt;. &lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2019-11-22T20:26:46.767" LastActivityDate="2019-11-22T20:26:46.767" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="12855" PostTypeId="2" ParentId="12853" CreationDate="2019-11-22T20:52:50.017" Score="4" Body="&lt;p&gt;It depends on your BASIC. Some Basic distinguish between arrays and simple variables, some don't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-BASIC, Sinclair's ZX81 and many other separate them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar for simple variables, some BASIC distinguish between simple varables of different type. So &lt;code&gt;A&lt;/code&gt;, &lt;code&gt;A$&lt;/code&gt;, &lt;code&gt;A!&lt;/code&gt; and &lt;code&gt;A%&lt;/code&gt; are different variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The workings come from the way variables are searched. The interpreter always scans a whole variable name until the first stop character. If it's one of the type characters it will be part of then name - this includes opening parentheses as array delimiters.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-22T21:15:22.703" LastActivityDate="2019-11-22T21:15:22.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12856" PostTypeId="2" ParentId="12853" CreationDate="2019-11-23T00:43:05.263" Score="2" Body="&lt;p&gt;I propose that Dartmouth's implementation of BASIC should be regarded as definitive, since they invented the language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Dartmouth BASIC, A and A() were distinct variables.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The single letter denoting a list or table name may also be used to&#xA;  denote a simple variable without confusion.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(In this context, &quot;list&quot; is a 1-dimensional array, &quot;table&quot; is a 2-dimensional array).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://bitsavers.org/pdf/dartmouth/BASIC_Oct64.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this 1964 Dartmouth College Computation Center document&lt;/a&gt;, page 36.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's true that the OP is specifically asking about Microsoft BASIC, but since he also asks in the final line &quot;Anyone know what a real BASIC does here?&quot;, I think Dartmouth BASIC is relevant. Dartmouth BASIC is the real and original BASIC; any other implementation claiming language compatibility is obliged to follow suit in this respect.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-11-23T20:04:06.420" LastActivityDate="2019-11-23T20:04:06.420" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12857" PostTypeId="2" ParentId="12836" CreationDate="2019-11-23T02:24:07.220" Score="6" Body="&lt;p&gt;&lt;strong&gt;The quick answer:&lt;/strong&gt; C410 capacitor was bad, replacing it fixed the horizontal offset and now the potentiometers actually adjust the horizontal position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How I found (stumbled onto?) the answer&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Searched more online and found this similar, but not identical CRT schematic. It is the same manufacturer and many of the same components. &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/elston/Elston_DM30_DM40.pdf&quot; rel=&quot;noreferrer&quot;&gt;Elston DM30 DM40 Schematic&lt;/a&gt;&#xA;My board only has 2 NE555 timers, the schematic on page 5 is close, but has 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I knew the horizontal adjustment wasn't working, the schematic has documentation that mentions U401 (same on my pcb) is used to adjust the horizontal delay which positions the image horizontally. It is a fairly simple circuit, and I knew that the components downstream seemed to work as the image was clear other than this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had extra 555 timer ICs so I swapped that out. After that, I was able to see a very slight movement of the screen when adjusting the horizontal POTs. I saw the only other component really connected to pins 6/7 was this capacitor. I swapped it out, reconnected the PCB and now everything works!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The longest part was having to keep desoldering this controller board and also making sure I kept grounding out the CRT after every test. There does appear to be a bleeder resistor on this model as I never heard a pop or crackle as mentioned in the various guides on how to discharge a CRT. I still made sure to discharge it manually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KSFIs.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KSFIs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wEY2z.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wEY2z.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q8qWw.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q8qWw.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="12117" LastActivityDate="2019-11-23T02:24:07.220" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12858" PostTypeId="1" CreationDate="2019-11-23T13:29:05.967" Score="19" ViewCount="3123" Body="&lt;p&gt;I was looking over an old article on the 6809 and was perusing the opcodes and noticed that the branch instructions came in two flavors, long and short. That sparked a memory about one of the 6502-series CPUs that added similar long-branches - 65CE02 perhaps?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, why &lt;strong&gt;are&lt;/strong&gt; branches in most 6502 systems based on 8-bit relative addresses instead of absolute? One byte less in the opcode, but it would seem that would be just as useful to JMP, but BRA was only added sometime later. Performance? Isn't the add into the PC the same as reading another address byte?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="3296" LastEditDate="2019-11-23T22:53:11.063" LastActivityDate="2020-02-10T14:58:15.123" Title="Why are branches relative in many 8-bit CPUs?" Tags="&lt;assembly&gt;&lt;6502&gt;&lt;instruction-set&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12859" PostTypeId="2" ParentId="12858" CreationDate="2019-11-23T14:29:52.083" Score="29" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;It is all about making one of the most important instructions as performant as possible, while keeping everything manageable for tools at the time (plus a little bit of dogma). The branching is thus the most optimized instruction of the whole 6502 design.&lt;/p&gt;&#xA;&lt;p&gt;In addition, long branches are not really in demand (*1). Of the 116 branches used in the original &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/src/kim-1/kim.asm&quot; rel=&quot;noreferrer&quot;&gt;KIM ROM&lt;/a&gt; not a single one is followed by a JMP - which would be the case if any longer distance had to be covered. Same observation can be made by looking at many other contemporary sources (*2).&lt;/p&gt;&#xA;&lt;p&gt;So why add 8 (9) opcodes for something as exotic and little of practical use?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why were (are?) branches relative in most 8-bit CPUs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because it saves code space and covers the great majority of cases - long versions can easily be created by using the inverted case branching around a long jump (absolute or relative), thus halving the number of code positions needed (*3) at the expense of a few cycles in rare cases where a long distance is to be covered.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;[Insert]&lt;/p&gt;&#xA;&lt;h3&gt;Generic Considerations About Jumping and Branching&lt;/h3&gt;&#xA;&lt;p&gt;Beside the semantic separation of branching as result of a decision and jumping as unconditional, design of an instruction set is always about waging alternatives and finding a middle ground.&lt;/p&gt;&#xA;&lt;p&gt;Without any doubt, a system needs a way to set the PC to any location within the program address space. Usually called a &lt;strong&gt;Jump&lt;/strong&gt;. Many systems offer in addition a &lt;strong&gt;Subroutine Call&lt;/strong&gt; as special case with return address management, often accomplished by a specific &lt;strong&gt;Return&lt;/strong&gt; instruction (*4).&lt;/p&gt;&#xA;&lt;p&gt;In addition it does make quite sense to be able to easily change control instruction flow based on conditions (*5). In a simple and symmetric world, this could apply to all three mentioned variations (Jump, Call, Return).&lt;/p&gt;&#xA;&lt;p&gt;A classic example would be the 8080 with having all of them as unconditional and conditional version. Nice and symmetric, but comes at a hefty cost of 27 opcodes. That's more than 10% of the instruction set.&lt;/p&gt;&#xA;&lt;p&gt;Now, while conditional jumping is neat and may save code length, looking at real code shows that the vast amount of Calls and Returns are unconditional. So it might be acceptable to drop conditions from them and just go by having jumps conditional - and when needed, Call or Return can be prefixed by a jump using the inverse condition. This reduced the needed codepoints to only 11.&lt;/p&gt;&#xA;&lt;p&gt;Looking even closer will reveal that the huge majority of conditional jumps only reach for quite short distances forth or back. Often just a single or a few instructions. Thus, kind of a short distance jump could be used to save in code size, an important measure. For most classic CPUs code length is also quite related to execution time (*6) thus a shorter distance encoding will speed up execution - as well as reducing penalty when prefixing non conditional instructions.&lt;/p&gt;&#xA;&lt;p&gt;While there are CPUs having very short distance branches, given the 8 bit code nature, a +/- 7 bit offset seems like a good compromise here. And that's what did set the 6800 apart from its 8080 counterpart. Short branches that save on code in most cases (as well as code points), which can be used to synthesize other conditional instructions with an acceptable penalty.&lt;/p&gt;&#xA;&lt;p&gt;Skips would be an even more generic approach, by skipping always the next instruction when its condition is met. Here no length is needed, thus they'd be single byte instructions needing only 8 (based on 8080) code points in total. Not only any conditional jump can be synthesized, but all instructions can be made conditional. On the backside, all conditional instructions would take additional time and as soon as more than one instruction is to be skipped, it gets quite costly. So trade off is speed (many standard cases) for simplicity and general usability.&lt;/p&gt;&#xA;&lt;p&gt;The last resort could be adding conditions to every opcodes (like on ARM). It's like combining the original (8080) approach with the generic skip application - but now at great expense of most of the code space.&lt;/p&gt;&#xA;&lt;p&gt;Long story short, optimized short and relative branches offer a trade off between all of this with an emphasis on most common use cases.&lt;/p&gt;&#xA;&lt;p&gt;[Back to the Question]&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So, why are branches in most 6502 systems based on 8-bit relative addresses instead of absolute?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I guess you mean as well 16 bit relative.&lt;/p&gt;&#xA;&lt;p&gt;It's all about most-used case. Branches are for short distance decision making. Like testing if the upper half of a pointer needs to be incremented, a sign to be adjusted, or a compare is successful or not.&lt;/p&gt;&#xA;&lt;p&gt;Adding another set of long relative would have added at least 8 long branch instructions, some more ROM space, but more important now always requiring an additional cycle to do the 16 bit calculation (plus the additional fetch).&lt;/p&gt;&#xA;&lt;p&gt;Maybe most important for the 6502 philosophy, it would have added the need to make the 8/16 bit offset decision detectable for the (very primitive) single pass assembler they had in mind. The whole 6502 assembly syntax is made in a way that encoding can be determined in whole by only looking at the actual line processed. With two encoding variations for relative, it would have required either:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a long opcode name variant like BEL, BNL, BCSL ... oops, breaking the 3 letter structure they wanted for their simple assembler. So this would end up with something quite ugly and hard to remember. Or&lt;/li&gt;&#xA;&lt;li&gt;some additional keyword like SHORT and LONG (*8), again breaking the syntax, or&lt;/li&gt;&#xA;&lt;li&gt;adding some 'special' symbol for either case, like &lt;code&gt;BNE !$02&lt;/code&gt; for short or alike.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In all cases the burden to decide which is right is put on the programmer to know ahead of time which to use. Of course, using&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a two pass Assembler&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;could have resolved that - for the cost of making the assembler a magnitude more complex and costly - hard to do on such simple system as they were thinking about at the time. The simple straight forward assembling was one of the major advantages compared to 'big' systems.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;One byte less in the opcode,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's the first and most important, as it saves a whole cycle. And it's a cycle that gets more often than not saved at highly utilized code sections - like decisions when scanning a string, comparing a lot of alternatives in a case like structure, or some tight counting loop.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but it would seem that would be just as useful to JMP, but BRA was only added sometime later.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Admittedly the 6502 makers were somewhat into dogma(*9), thus branches had to be conditioned, while jumps are unconditioned (and absolute). So the handy BRA, which was already existing in the 6800, got left out for the 6502 (*10). Sometimes one gets quite stuck during design.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Performance?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yup, exactly that. Branches are essential to any computing - which is, after all, about decision making on many levels - and most of them all the way down on signs, carry and equal or not.&lt;/p&gt;&#xA;&lt;p&gt;Looking at contemporary sources shows that branches are among the most used instructions. Within the &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/src/kim-1/kim.asm&quot; rel=&quot;noreferrer&quot;&gt;KIM source&lt;/a&gt; they are, with 116 instances, the second most prevalent group, right after &lt;code&gt;LDx&lt;/code&gt; (162, thereof 108 &lt;code&gt;LDA&lt;/code&gt;) and &lt;code&gt;STx&lt;/code&gt; (153, thereof 115 &lt;code&gt;STA&lt;/code&gt;) and on par with &lt;code&gt;JSR&lt;/code&gt; and far ahead of everything else (*11). The combination of being one of the most used instruction (*12) and its potential for optimization makes it the most desirable target for doing so.&lt;/p&gt;&#xA;&lt;p&gt;In fact, the branch is eventually the most optimized instruction within the 6502. It's really worth to study its workings using the Visual 6502 emulator. Several special items have been added to make sure that its execution is down to the minimum number of cycles, that is two for not taken and three for taken, unless a page is crossed. The later optimization was for example not considered worthwhile for any of the indexed writes, were a page crossing could happen - here instructions always took the additional cycle.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Isn't the add into the PC the same as reading another address byte?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, it's done in parallel, ahead of time (during PHI1) so no time is wasted to calculate it.&lt;/p&gt;&#xA;&lt;p&gt;Branches are one of the niftiest parts in 6502 logic. I really suggest taking a few hours and go thru their details on Visual 6502 to understand.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - This should be already clear from a design point of view: Code needing long conditional branches is usually not well structured to start with.&lt;/p&gt;&#xA;&lt;p&gt;*2 - For example the much later (1978) and way bigger (8 KiB) &lt;a href=&quot;https://www.pagetable.com/?p=774&quot; rel=&quot;noreferrer&quot;&gt;MS-Basic 1.1&lt;/a&gt;, used for PET, OSI and Apple II, features only 23 cases of a jump following a branch - of ~140 jumps at all.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Since a long jump (usually) always exists, branches are needed only once (as short).&lt;/p&gt;&#xA;&lt;p&gt;*4 - Some designs go for the bare minimum having only a single jump instruction, always delivering the previous PC (return address) in a special location (usually a register), and handling everything via this single instruction. Others have different jumps, but no return, and so on. But for this we stay with what's common on mainstream 8 bit.&lt;/p&gt;&#xA;&lt;p&gt;*5 - It is quite possible to do computation without changing instruction flow (branching), not at least used by Raul Ronjas proof about the Z3 being a full figured computer. Still, it gets easily out of hand even with small programs and is as useful as a Turing machine for real life computing.&lt;/p&gt;&#xA;&lt;p&gt;*6 - This is not only true for the 6502 being quite close in its execution time with the number of memory cycles, but as well for the Z80. Many of its really nice enhanced operations are not as great when it comes to execution time due the needed prefix adding 4 cycles just to mark them.&lt;/p&gt;&#xA;&lt;p&gt;*7 - Quite handy when it comes to all the little cases were only a single instruction has to be bypassed, like increment of a multi byte pointer. With conditional jumps a 16 bit pointer some &lt;code&gt;INC; JNC +n; INC&lt;/code&gt;, costing 5 byte code for absolute, 4 bytes with relative, but only 3 with skip.&lt;/p&gt;&#xA;&lt;p&gt;*8 - Oops, did anyone say x86?&lt;/p&gt;&#xA;&lt;p&gt;*9 - Like the infamous 'real' indexing argument over the 6800 way, that brought two 8 bit 'real' indices at the cost of no base register, making structure handling on the 6502 rather clumsy.&lt;/p&gt;&#xA;&lt;p&gt;*10 - I wouldn't have minded if it had just be renamed to JMP  or short, but then again, this would have collided with the single pass assembly they had in mind.&lt;/p&gt;&#xA;&lt;p&gt;*11 - The next most used group are compares (&lt;code&gt;CMx&lt;/code&gt;), way down at 39 instances (38 of them being &lt;code&gt;CMP&lt;/code&gt;)  and absolute jumps (&lt;code&gt;JMP &lt;/code&gt;) at 31. It nicely reflects that most work of a CPU is about shoveling data and branching accordingly.&lt;/p&gt;&#xA;&lt;p&gt;*12 - Of course, this is just quick static analysis, dynamic quantities will differ - then again, due to branches being part of each and every looping, they usually end up with an even bigger share.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-12-11T22:35:54.100" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="12860" PostTypeId="2" ParentId="7087" CreationDate="2019-11-23T20:14:10.063" Score="0" Body="&lt;p&gt;A major question to consider is whether it would be acceptable to tie up the Z80 during significant parts of each frame.  If one is willing to tolerate a severe amount of CPU loading, one could produce a Z80 video subsystem with a surprisingly small number of off-the-shelf parts.  The Sinclar ZX80 used off-the-shelf chips but couldn't maintain a video display while the CPU was trying to do anything else.  The ZX81 used some custom silicon, but added a &quot;slow mode&quot; that would let the CPU run for a little while each frame and then interrupt it when needed to generate the video.  The &quot;slow mode&quot; could also have been achieved using off-the-shelf chips, but I think the custom silicon was a little cheaper.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-11-23T20:14:10.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12861" PostTypeId="2" ParentId="12853" CreationDate="2019-11-23T22:10:19.493" Score="2" Body="&lt;p&gt;To further confuse the issue, both ANSI/ECMA BASIC standards, in their minimal and full implementations, &lt;strong&gt;do not&lt;/strong&gt; allow simple scalars an arrays to have the same name. This from &lt;a href=&quot;https://archive.org/details/ecma-55-1978/page/n13&quot; rel=&quot;nofollow noreferrer&quot;&gt;ECMA-55: Minimal BASIC, page 9&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The same letter &lt;strong&gt;shall not&lt;/strong&gt; be the name of both a simple variable &#xA;  and an array, nor the name of both a one-dimensional and a two- &#xA;  dimensional array.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(emphasis mine).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is surprising, as:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Kemeny, one of the authors of Dartmouth BASIC, was on the ANSI standard committee;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Microsoft BASIC-80 v5 — which claims ANSI Minimal BASIC compatibility, including passing its test suite — allows arrays and scalars to share the same name.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For example, running this code through the strict &lt;a href=&quot;https://github.com/jorgicor/bas55&quot; rel=&quot;nofollow noreferrer&quot;&gt;bas55&lt;/a&gt; Minimal BASIC interpreter:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 DIM A(3)&#xA;20 LET A(1)=5&#xA;30 LET A=1&#xA;40 PRINT A,A(1)&#xA;50 END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;results in the following errors:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;30: error: type mismatch for variable A&#xA; info: it was previously used or DIM as a one-dimension array&#xA; LET A=1&#xA;     ^&#xA;40: error: type mismatch for variable A&#xA; info: it was previously used or DIM as a one-dimension array&#xA; PRINT A,A(1)&#xA;       ^&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Every other interpreter I have runs the program without complaint.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-11-23T22:10:19.493" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12862" PostTypeId="2" ParentId="12858" CreationDate="2019-11-24T03:57:19.967" Score="14" Body="&lt;p&gt;On the 6502, the designers did this for efficiency. This is documented&#xA;in the original &lt;a href=&quot;https://archive.org/details/6500-50a_mcs6500pgmmanjan76&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;MCS 6500 Microcomputer Family Programming&#xA;Manual&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If one considers that the instruction JMP required three bytes, one&#xA;  for OP CODE, one for new program counter low (PCL) and one for new&#xA;  program counter high (PCH) it is seen that jump on carry set would&#xA;  also require three bytes. Because most programs for control require&#xA;  many continual jumps or branches, the MCS650X uses &quot;relative&quot;&#xA;  addressing for all conditional test instructions. To perform any&#xA;  branch, the program counter must be changed. In relative addressing,&#xA;  however, we add the value in the memory location following the OP&#xA;  CODE to the program counter. This allows us to specify a new program&#xA;  counter location with only two bytes, one for the OP CODE and one&#xA;  for the value to be added. &lt;em&gt;(§4.1.1 p. 38)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is obviously more space-efficient (one byte for the opcode and one&#xA;byte for the 8-bit offset versus one byte for the opcode and two bytes&#xA;for a 16-bit absolute address), but also (perhaps less obviously) more&#xA;time-efficient when averaged out: a branch not taken is only two&#xA;cycles (to read the opcode and offset) with the relative address, but&#xA;still three cyles with an absolute address. (Taken is three cycles in&#xA;both cases. The one exception is that a taken relative branch needs&#xA;four cycles when it crosses a page boundary, due to the need for a&#xA;second add for the carry from the low byte of the address, but that's&#xA;relatively infrequent.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be possible to try to achieve this with partial absolute&#xA;addresses (e.g., by specifying only the lower eight bits of the&#xA;absolute address and taking the upper eight bits from the PC,&#xA;effectively using &quot;the current page,&quot;), but that gets pretty complex&#xA;for the programmer because you'd need to know about the absolute&#xA;location of your code to avoid accidental jumps to the wrong page.¹&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another reason for having some sort of relative jumps is to allow&#xA;creation of more easily relocatable code. Code that uses only relative&#xA;jumps can be copied to another location and &quot;just work&quot;; code with&#xA;absolute jumps must have those patched up for the new jump target&#xA;locations. While having a limited set of relative branch instructions&#xA;doesn't let you relocate arbitrary code, it still makes it easy to&#xA;relocate small routines, which is valuable. There are, for example,&#xA;not-infrequent cases where using self-modifying code on the 6502 can&#xA;increase both speed and memory efficiency. Self-modifying code can't&#xA;be run from ROM, but if you can easily copy small routines from ROM to&#xA;RAM that opens up this technique for code intended to be in ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Relocatable code wasn't a major priority on the 6502 (though I have&#xA;little doubt that the designers did have in mind some support for this&#xA;from the start—whatever they could fit in without adding cost to the&#xA;design), but it was for the 6809, where you noticed that they'd added&#xA;long branches. The &lt;a href=&quot;https://archive.org/details/bitsavers_motorolada_3224333&quot; rel=&quot;nofollow noreferrer&quot;&gt;MC6809 data sheet&lt;/a&gt; says in its very first&#xA;paragraph that it &quot;supports modern programming techniques such as&#xA;position independence,&quot; and later in the discussion of long and short&#xA;relative branches, &quot;Position-independent code can be easily generated&#xA;through the use of relative branching&quot; (p. 20). Somewhere there's a&#xA;larger discussion of Motorola's vision of building ROMs for specific&#xA;machines from a large library of relocatable code, but I don't have a&#xA;reference for that at the moment.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹ That's more complex than it sounds on some CPUs. Consider a branch&#xA;in the last two bytes of a page on a 6502: that puts the PC on the&#xA;next page before it's used to calculate the branch address. There are&#xA;ways of working around this, too, such as considering addresses in the&#xA;&quot;other half&quot; of the page to be in the previous or next page, as&#xA;appropriate, but now you're piling complexity on complexity.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="15108" LastEditDate="2019-12-11T23:21:38.777" LastActivityDate="2019-12-11T23:21:38.777" CommentCount="25" ContentLicense="CC BY-SA 4.0" />
  <row Id="12863" PostTypeId="2" ParentId="12835" CreationDate="2019-11-24T05:20:42.323" Score="1" Body="&lt;p&gt;Green screens are still used today, in bank environments IBM iSeries systems are still popular. These terminals are not monochrome anymore, are software based (emulated), but basically they are just old green screens. If you do image search for &lt;a href=&quot;https://www.google.com/search?q=iseries%20green%20screen&amp;amp;newwindow=1&amp;amp;tbm=isch&quot; rel=&quot;nofollow noreferrer&quot;&gt;'iseries green screen&lt;/a&gt;' you can find this colorfull example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vl4JA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vl4JA.png&quot; alt=&quot;iSeries green screen&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if I look into terminal settings, &lt;strong&gt;green color is RGB 00FF00&lt;/strong&gt;. I do not see amber color, but there is &lt;strong&gt;mustard color RGB A0A000&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6777" LastActivityDate="2019-11-24T05:20:42.323" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12864" PostTypeId="1" AcceptedAnswerId="12865" CreationDate="2019-11-24T08:49:45.893" Score="21" ViewCount="3253" Body="&lt;p&gt;The Amstrad CPC range of Z80 machines shipped with &#xA; a ROM BASIC, designed and implemented by Locomotive Software. The most well known competitor was the Sinclair ZX Spectrum, also a Z80 machine, with similar capabilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm aware that both Sinclair and Locomotive Basics were more advanced than the C64 Microsoft implementation, but neither had the procedure functions or other niceties of BBC BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In what ways did Locomotive BASIC significantly improve the language when compared to Sinclair BASIC, for example on the 48k or 128k Spectrum?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, I'm not interested in comparisons between the two machines.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2019-11-24T14:50:24.160" LastActivityDate="2019-11-26T14:29:54.017" Title="Was Locomotive BASIC significantly better than Sinclair BASIC?" Tags="&lt;basic&gt;&lt;zx-spectrum&gt;&lt;cpc&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12865" PostTypeId="2" ParentId="12864" CreationDate="2019-11-24T10:25:45.987" Score="25" Body="&lt;p&gt;The big improvement to the &lt;em&gt;language&lt;/em&gt; in Locomotive BASIC, compared to Sinclair BASIC (and many other BASICs), was the addition of timer support:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;AFTER 50,0 GOSUB 320&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would call the subroutine at line 320 &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Locomotive_BASIC#AFTER_.E2.80.B9time_delay.E2.80.BA.5B.2C.E2.80.B9timer_number.E2.80.BA.5D_GOSUB_.E2.80.B9line_number.E2.80.BA&quot; rel=&quot;noreferrer&quot;&gt;after a second&lt;/a&gt;, and&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;EVERY 500,0 GOSUB 320&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would call the subroutine &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Locomotive_BASIC#EVERY_i.5B.2Ct.5D_GOSUB_ln&quot; rel=&quot;noreferrer&quot;&gt;every ten seconds&lt;/a&gt;. In both cases, the first value is the interval in fiftieths of a second, and the second is the timer channel (there are four timers, with different priorities, driven by a 300Hz timer interrupt).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were also improvements to the sound support but they were hardware-specific and not really improvements to the language itself. These provided access to the &lt;a href=&quot;https://en.wikipedia.org/wiki/AY-3-8912&quot; rel=&quot;noreferrer&quot;&gt;AY-3-8912&lt;/a&gt;’s features, within the limitations of the BASIC interpreter: &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Locomotive_BASIC#ENT_.E2.80.B9tone_envelope_number.E2.80.BA.5B.2C.E2.80.B9tone_env._section.E2.80.BA.5D.5B.2C.E2.80.B9tone_env._section.E2.80.BA.5D.5B.2C.E2.80.B9tone_env._section.E2.80.BA.5D.5B.2C.E2.80.B9tone_env._section.E2.80.BA.5D.5B.2C.E2.80.B9tone_env._section.E2.80.BA.5D&quot; rel=&quot;noreferrer&quot;&gt;tone shape control&lt;/a&gt;, &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Locomotive_BASIC#ENV_.E2.80.B9volume_envelope_number.E2.80.BA.5B.2C.E2.80.B9volume_env._section.E2.80.BA.5D.5B.2C.E2.80.B9volume_env._section.E2.80.BA.5D.5B.2C.E2.80.B9volume_env._section.E2.80.BA.5D.5B.2C.E2.80.B9volume_env._section.E2.80.BA.5D.5B.2C.E2.80.B9volume_env._section.E2.80.BA.5D&quot; rel=&quot;noreferrer&quot;&gt;volume shape control&lt;/a&gt;, multiple channels, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compared to many BASICs Locomotive BASIC had good graphics support, but Sinclair BASIC also had decent graphics support, and both used similar commands (&lt;code&gt;INK&lt;/code&gt;, &lt;code&gt;DRAW&lt;/code&gt;, &lt;code&gt;FILL&lt;/code&gt; etc.) — Locomotive’s main improvement here was the addition of windows, &lt;em&gt;i.e.&lt;/em&gt; a way to &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Locomotive_BASIC#WINDOW.5B.23.E2.80.B9stream_expression.E2.80.BA.5D.2C.5BL.5D.2C.5BR.5D.2C.5BT.5D.2C.5BB.5D&quot; rel=&quot;noreferrer&quot;&gt;subdivide the screen&lt;/a&gt; into up to eight areas, and send different output streams to each one.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-11-26T14:29:54.017" LastActivityDate="2019-11-26T14:29:54.017" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="12866" PostTypeId="2" ParentId="12864" CreationDate="2019-11-24T13:22:01.963" Score="24" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Was Locomotive BASIC significantly better than Sinclair BASIC?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;TL;DR: Oh, yes, it was!&lt;/h2&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm aware that both Basics were more advanced than the C64 Microsoft implementation,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Comparison of C64 BASIC to other BASICs of the same time is never in favour for the C64, as  it's a quick port of the original 1977 PET Version.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but neither [Locomotive BASIC, BBC BASIC] had the subroutine functions or other niceties of BBC BASIC.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While Locomotive BASIC differs in some parts, it is quite close to BBC Basic - in functionality and due to history - while offering many improvements over BBC BASIC.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In what ways did Locomotive BASIC significantly improve the language when compared to Sinclair BASIC, for example on the 48k or 128k Spectrum?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sinclair BASIC&lt;/strong&gt;, developed by &lt;a href=&quot;http://www.ninetiles.com/docs/About_Nine_Tiles.htm&quot; rel=&quot;noreferrer&quot;&gt;Nine Tiles&lt;/a&gt; in Cambridge is a rather conventional BASIC, based on the standards set by Microsoft regarding functionality. The Spectrum version is a straight evolution from the 4 KiB BASIC of the ZX80, over the 8 KiB ZX81 BASIC, which grew out of the FP version for the ZX80, to the 16 KiB Spectrum ROM. In fact, its development had much in common with the way Commodore BASIC evolved. Much like Tramiel, Sinclair's focus was on the product to be sold - with a core point about cramping as much functionality in at a given cost point.&lt;/p&gt;&#xA;&lt;p&gt;Unlike Tramiel, he could be convinced by his developers about necessary improvements - like doubling the ROM size for the Spectrum to cover new functionality. Still he didn't give them a go for a real redesign, while adding much time pressure(*1), resulting in untidy and slow code, while at the same time missing essential functionality - to be fixed with the shadow ROM of the &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Interface_1&quot; rel=&quot;noreferrer&quot;&gt;Interface 1&lt;/a&gt; (*2).&lt;/p&gt;&#xA;&lt;p&gt;As a result, Sinclair Spectrum BASIC is a straightforward standard BASIC with additions to handle&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Screen (&lt;code&gt;AT&lt;/code&gt;, &lt;code&gt;ATTR&lt;/code&gt;, &lt;code&gt;INVERSE&lt;/code&gt;, &lt;code&gt;OVER&lt;/code&gt;, &lt;code&gt;SCREEN$&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Colour (&lt;code&gt;BORDER&lt;/code&gt;, &lt;code&gt;FLASH&lt;/code&gt;, &lt;code&gt;INK&lt;/code&gt;, &lt;code&gt;PAPER&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Graphics (&lt;code&gt;CIRCLE&lt;/code&gt;, &lt;code&gt;DRAW&lt;/code&gt;, &lt;code&gt;PLOT&lt;/code&gt;, &lt;code&gt;POINT&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;SOUND (&lt;code&gt;BEEP&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;File I/O for microdrives (&lt;code&gt;CAT&lt;/code&gt;, &lt;code&gt;ERASE&lt;/code&gt;, &lt;code&gt;FORMAT&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Plus the quite helpful &lt;code&gt;BIN&lt;/code&gt; to enter binary numbers for graphics.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for example on the 48k or 128k Spectrum&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Above is true for the original 48 KiB Spectrum as the 128 is a beast of its own - well, when not looking at all the unfinished features :))&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Locomotive BASIC&lt;/strong&gt; in contrast is a newer development based on the BASIC for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Tube_(BBC_Micro)&quot; rel=&quot;noreferrer&quot;&gt;Z80 tube&lt;/a&gt;. Development started for a proposed but never released Z80-based business system by Acorn. It was thus heavily influenced by Acorn/&lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_BASIC&quot; rel=&quot;noreferrer&quot;&gt;BBC BASIC&lt;/a&gt;. It's last incarnation is &lt;em&gt;Mallard BASIC&lt;/em&gt; for the PCW.&lt;/p&gt;&#xA;&lt;p&gt;It is said that it was Locomotive Software's request that changed the CPC design from using a 6502 to be Z80-based. Amstrad agreed, as it would save quite some cost in software development (*3). As a result, Locomotive Software delivered most system software for the CPC, including AMSDOS.&lt;/p&gt;&#xA;&lt;p&gt;Listing everything where Locomotive BASIC is enhanced over standard BASIC would go way off-road - much like doing the same for BBC BASIC. But comparing the latter two is an interesting point, due to their common origin. Here Locomotive BASIC improves a lot of the rather awkward parts. For example, most of the cryptic &lt;code&gt;*FX&lt;/code&gt; and &lt;code&gt;VDU&lt;/code&gt; commands in BBC BASIC have nice keywords in Locomotive BASIC. Of course hardware-related issues will differ - like screen modes, colour numbers or coordinates - as they did on almost any machine back then.&lt;/p&gt;&#xA;&lt;p&gt;Comparing two BASICs is, to some degree, up to taste and opinion - as many articles show. For a somewhat objective approach it has been proven useful to see what effort it is to port/convert a program between two BASIC dialects.&lt;/p&gt;&#xA;&lt;p&gt;When porting BBC BASIC programs to Locomotive BASIC, only the BBC's approach to (somewhat) structured programming is a hurdle. While &lt;code&gt;TRUE&lt;/code&gt; and &lt;code&gt;FALSE&lt;/code&gt; can be replaced by &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;-1&lt;/code&gt; and &lt;code&gt;REPEAT ... UNITL&lt;/code&gt; replaced by &lt;code&gt;WHILE ... WEND&lt;/code&gt; with an inverted test, the mentioned PROCedures are missing at all and needs replacement by classic parameter passing and &lt;code&gt;GOSUB&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Porting the other way around is way more challenging, as Locomotive BASIC added a lot of directly accessible functionality. It not only made screen handling much more readable, it also added basic functionality which would need large code sections or assembly routines in BBC BASIC. For example, the timer handling as mentioned by &lt;a href=&quot;/a/12865/6659&quot;&gt;Stephen Kitt&lt;/a&gt;, but also really comfortable sound management, including queue management, text windowing and much more.&lt;/p&gt;&#xA;&lt;h3&gt;Conclusion:&lt;/h3&gt;&#xA;&lt;p&gt;While BBC BASIC has an advantage with the mentioned PROCedure in structuring, Locomotive and BBC are &lt;em&gt;quite feature rich&lt;/em&gt; BASICs of their time and &lt;em&gt;in general on par&lt;/em&gt; with Locomotive being the richer of both - no wonder, given it being the newer of both.&lt;/p&gt;&#xA;&lt;p&gt;Sinclair BASIC on the other hand is a much more simple implementation than either. It does cover the basic functionality of its machine quite well, due to fitting commands, while missing innovation on the BASIC side.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Again, as the same already happened with the ZX81 ROMs resulting in the infamous &lt;em&gt;square root of .25&lt;/em&gt; bug for the first series.&lt;/p&gt;&#xA;&lt;p&gt;*2 - A nice twist of history here is, that Sinclair never owned the rights to the original ROMs, just the shadow ROM patches. So Amstrad had to buy them from Nine Tiles later on.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Back then BASIC interpreters, and next to all other system software, was written in Assembly, making the choice of the CPU to be used reliant on more than just speed and chip cost.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-11-26T13:00:25.377" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12867" PostTypeId="1" AcceptedAnswerId="12868" CreationDate="2019-11-24T23:56:36.130" Score="24" ViewCount="6285" Body="&lt;p&gt;MS-DOS a.k.a. PC-DOS nee QDOS, was commonly just referred to as DOS. But 'disk operating system' is a very obvious acronym; there must have been previous operating systems so called.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the first operating system called DOS?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-12-02T18:46:11.927" Title="What was the first operating system called DOS?" Tags="&lt;history&gt;&lt;operating-system&gt;&lt;mainframe&gt;&lt;minicomputers&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12868" PostTypeId="2" ParentId="12867" CreationDate="2019-11-25T00:36:49.840" Score="51" Body="&lt;p&gt;&lt;a href=&quot;http://bitsavers.org/pdf/ibm/360/dos/&quot; rel=&quot;noreferrer&quot;&gt;DOS/360&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(As distinct from TOS/360, the tape OS)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Announced at the end of 1964 &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS/360_and_successors&quot; rel=&quot;noreferrer&quot;&gt;per Wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-11-25T00:43:10.717" LastActivityDate="2019-11-25T00:43:10.717" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12869" PostTypeId="2" ParentId="12864" CreationDate="2019-11-25T01:07:36.633" Score="12" Body="&lt;p&gt;Considering how much of a &lt;a href=&quot;https://www.theregister.co.uk/2014/02/12/archaeologic_amstrad_cpc_464/&quot; rel=&quot;noreferrer&quot;&gt;rush job&lt;/a&gt; Locomotive BASIC was, it's remarkably good. But it's not perfect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sinclair BASIC has one powerful keyword that Locomotive BASIC lacks: &lt;strong&gt;VAL&lt;/strong&gt;. Sure, Locomotive BASIC has a &lt;code&gt;VAL()&lt;/code&gt; function, but Sinclair's one is a function evaluator:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR X=-5 TO 5&#xA;20 PRINT X,VAL (&quot;X * X&quot;)&#xA;30 NEXT X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This would fail on an Amstrad CPC, but on a ZX Spectrum it prints out -5 … 5 and the squares of those numbers. This is similar to BBC BASIC's &lt;code&gt;EVAL&lt;/code&gt; keyword.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few of Locomotive BASIC's shortcomings include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Even with a disc drive, Locomotive BASIC has no random access functions. You're limited to one file open as input and one as output, all with sequential access only.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;AMSDOS relied heavily on RSXs (resident system extensions, aka “bar commands”, eg &lt;code&gt;|CPM&lt;/code&gt;, &lt;code&gt;|DIR&lt;/code&gt;) instead of adding commands to the interepreter.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The syntax of those RSXs changed from BASIC 1.0 + AMSDOS on the CPC464 to BASIC 1.1 on the CPC664/CPC6128. In Locomotive BASIC 1.0, you couldn't give a string as an RSX parameter. So, for example, to delete &lt;code&gt;FILE.DAT&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Locomotive BASIC 1.0:&#xA;    &lt;code&gt;A$=&quot;FILE.DAT&quot;: |ERA, @A$&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Locomotive BASIC 1.1:&#xA;    &lt;code&gt;|ERA, &quot;FILE.DAT&quot;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2019-11-25T16:10:22.073" LastActivityDate="2019-11-25T16:10:22.073" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12870" PostTypeId="2" ParentId="6569" CreationDate="2019-11-25T02:19:40.207" Score="1" Body="&lt;p&gt;If your looking for concepts to add to BASIC, One of the most advanced BASICS of the time was Microware's &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC09&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASIC09&lt;/a&gt; for the 6809.  It had removed line numbers as well as added structured programming concepts.  It had a number of features that took advantage of the processor that might be very difficult to do on a 6502.&lt;/p&gt;&#xA;" OwnerUserId="15664" LastActivityDate="2019-11-25T02:19:40.207" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12871" PostTypeId="2" ParentId="3081" CreationDate="2019-11-25T11:36:44.473" Score="2" Body="&lt;p&gt;There were two fairly well known RAM expansions developed specifically with the purpose of improving disk copying:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;http://d81.de/CLD-RAMBOard/index.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;RAMBOard&lt;/a&gt; originally by Chip Level Design.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://www.cbmstuff.com/proddetail.php?prod=SC71&quot; rel=&quot;nofollow noreferrer&quot;&gt;SuperCard+&lt;/a&gt; originally by Utilities Unlimited.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Both supported the various 1541/1571 drives and each added an additional 8KB RAM. Software designed for one expansion doesn't necessarily work on the other due to the SuperCard+ having an additional ROM with extra routines used by the copying software.&lt;/p&gt;&#xA;" OwnerUserId="7506" LastEditorUserId="7506" LastEditDate="2019-11-25T13:53:04.810" LastActivityDate="2019-11-25T13:53:04.810" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12872" PostTypeId="1" AcceptedAnswerId="12873" CreationDate="2019-11-25T19:10:41.717" Score="2" ViewCount="219" Body="&lt;p&gt;I certainly don't recall this at the time, but I'll ask to be sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the GW-BASIC documentation, a semicolon between the INPUT prompt and the variable &lt;a href=&quot;http://www.antonis.de/qbebooks/gwbasman/input.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;suppresses the question-mark prompt&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not believe this was the case on the Apple or PET/C64, anyone have a sim handy to try?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My interpreter is coming along, if I get another day or two free I'll post it for people to try.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-11-26T14:27:20.873" Title="INPUT with comma vs. semi" Tags="&lt;applesoft-basic&gt;&lt;microsoft-basic&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12873" PostTypeId="2" ParentId="12872" CreationDate="2019-11-25T19:21:15.080" Score="4" Body="&lt;p&gt;The comma syntax does not work in Commodore BASIC, neither on the PET (Commodore BASIC V4.0), nor on C64 (Commodore BASIC V2.0), C16/116 (Commodore BASIC V3.5) or Commodore 128 (Commodore BASIC V7.0). Using a construction like &lt;code&gt;INPUT &quot;ENTER SOMETHING&quot;,A$&lt;/code&gt; yields a &lt;code&gt;SYNTAX ERROR&lt;/code&gt;. There are however other ways to suppress the question mark prompt on a C64, see the answers to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4883/c64-basic-how-to-suppress-the-sign-when-using-the-input-command&quot;&gt;this question&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2019-11-25T19:23:12.373" LastActivityDate="2019-11-25T19:23:12.373" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12874" PostTypeId="2" ParentId="12872" CreationDate="2019-11-25T20:47:42.050" Score="0" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;INPUT with comma vs. semi&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'm not sure what this is supposed to ask, but ...&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;According to the GW-BASIC documentation, a semicolon between the INPUT prompt and the variable suppresses the question-mark prompt.&lt;/p&gt;&#xA;&lt;p&gt;I do not believe this was the case on the Apple or PET/C64,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It was on the Apple and all other MS-BASIC versions, but not on the PET.&lt;/p&gt;&#xA;&lt;p&gt;Examples:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 INPUT A&#xA;20 INPUT &amp;quot;NUMBER&amp;quot;; A&#xA;10 INPUT &amp;quot;&amp;quot;; A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;will display on an Apple II (&amp;quot;&lt;code&gt;_ &lt;/code&gt;&amp;quot;being the cursor)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;?_&#xA;NUMBER_&#xA;_&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;while the PET does always give the question mark &lt;em&gt;and&lt;/em&gt; a space&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;? _&#xA;NUMBER? _&#xA;? _&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;In addition maybe relevant here that the &lt;a href=&quot;http://www.ecma-international.org/publications/files/ECMA-ST-WITHDRAWN/ECMA-55,%201st%20Edition,%20January%201978.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;ECMA-55 (1978)&lt;/a&gt; standard &amp;quot;For minimal BASIC&amp;quot; (adopted by ANSI as ANSI X3.60-1978) makes the whole prompt implementation defined and optional, while recommending:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   It is recommended that the input-prompt consists of a question-&#xA;   mark followed by a single space.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So Commodore's implementation is close to standard .. albeit I'm not sure if by purpose.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[Also, if you're about to write any new BASIC, make sure it is able to handle ECMA-55 programs as means for general compatibility. The National Bureau of Standards' &lt;a href=&quot;https://archive.org/search.php?query=nbs%20minimal%20basic&quot; rel=&quot;nofollow noreferrer&quot;&gt;Minimal BASIC Test Suite&lt;/a&gt; might be of help]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Later ECMA-116 defines that&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  If an input-prompt specifier is present in the input-statement, then&#xA;  the implementation-defined input-promt shall not be output;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Though, it also requests a quite different syntax using keywords and a colon to seperate between modifiers and variable list:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;INPUT PROMT &amp;quot;Name? &amp;quot;: A$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;While using a keyword does allow for a prompt to be supplied in a string variable, the colon may tick off many. ECMA-116 is eventually a great language definition, but came way to late for any influence.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Input in (early) MS BASIC has another nice side effect when using the notation without assigning a prompt. A statement like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;INPUT ;A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which should produce a syntax error right away when executed, will still &lt;em&gt;first&lt;/em&gt; prompt for a value, only to break &lt;em&gt;after&lt;/em&gt; it has been entered.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-11-26T14:27:20.873" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12875" PostTypeId="1" CreationDate="2019-11-26T08:15:28.480" Score="7" ViewCount="3392" Body="&lt;p&gt;I just took the hard drive out of my old beige Mac G4 (don’t know if it still works). I haven’t used this computer for the longest time and I’m interested to see what is on the drive. Is there an adapter that will allow me to plug the drive externally into a five year old MacBook Pro?&#xA;The drive is a 6 GB Quantum Fireball SE 3.5 series, the computer’s original drive. &lt;/p&gt;&#xA;" OwnerUserId="15674" LastEditorUserId="79" LastEditDate="2019-11-26T12:40:37.787" LastActivityDate="2019-11-26T12:40:37.787" Title="SCSI to USB interface" Tags="&lt;scsi&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12876" PostTypeId="2" ParentId="11286" CreationDate="2019-11-26T10:58:59.057" Score="2" Body="&lt;p&gt;In the APPLE II, the DOS 3.3 had a program called Phone List which stored the data of the phone numbers by modifying itself. It had empty DATA instructions from the lines 200 to 400 and this instructions would get filled when one entered new records. Upon program termination a SAVE would be executed to save the contents of the program again. Next time the program was loaded, the data would be read directly with READ instructions. &lt;/p&gt;&#xA;" OwnerUserId="15556" LastActivityDate="2019-11-26T10:58:59.057" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12877" PostTypeId="2" ParentId="11286" CreationDate="2019-11-26T11:29:11.403" Score="4" Body="&lt;p&gt;Beta Basic for the ZX Spectrum had &lt;code&gt;ALTER&lt;/code&gt;, which was specifically intended to &quot;alter references in the program&quot; as demonstrated by this code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 LET free=MEM()  &#xA;2 FOR n=1 TO 100 &#xA;3 ALTER (n) TO &quot;VAL&quot;+CHR$ 34+STR$ n+CHR$ 34  &#xA;4 NEXT n 5 PRINT &quot;Saved &quot;;MEM()+28-free;&quot; bytes&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This replaces all numbers in the program from 1 to 100 with a variable. The manual also warns about careless usage of &lt;code&gt;ALTER&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;NOTE: Be cautious when using ALTER. You can make irreversible changes to a program if you are careless. For example, if you change all uses of the numeric variable &quot;apple&quot; to &quot;a&quot; and  then  realise  that  you  have  already  used  the  variable  name  &quot;a&quot;,  you  cannot  simply  alter  all  uses  of  &quot;a&quot;  to  &quot;apple&quot;  to  rectify  matters!  You  should  have  checked  for  previous  use  of  &quot;a&quot; using the REF or LIST REF command. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="8083" LastActivityDate="2019-11-26T11:29:11.403" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12878" PostTypeId="2" ParentId="11286" CreationDate="2019-11-26T11:58:41.780" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I seem to remember a statement that was spelled 'something like' EDITLN or EDITLINE or LINEDIT,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;TL;DR: &lt;strong&gt;There was EDIT in many (MS-)BASICs, but it was a direct command, not applicable during runtime.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Long Story:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess that memory is about &lt;code&gt;EDIT &amp;lt;line&amp;gt;&lt;/code&gt;. A command present since Altair BASIC, but optional, depending on the philosophy and space. It was left out in PET BASIC due it's screen editor (*1), and of Applesoft to make room for additional commands (*2). It is for example present in Tandy's &lt;a href=&quot;http://www.1000bit.it/support/manuali/trs/Introduction%20to%20TRS-80%20Level%20II%20BASIC%20%281980%29%28Michael%20Zabinski%29%28pdf%29.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Level II Basic&lt;/a&gt; (based on BASIC 80) and &lt;a href=&quot;http://www.colorcomputerarchive.com/coco/Documents/Manuals/Hardware/Getting%20Started%20With%20Extended%20Color%20Basic%20%28Tandy%29.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;ColourBASIC&lt;/a&gt; (BASIC 69). It was supported all the way to BASIC 5.28 and thus &lt;a href=&quot;https://hwiegman.home.xs4all.nl/gw-man/EDIT.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;GW-BASIC&lt;/a&gt; as well. Some systems (like IBM's BASICA) kept it, despite the existence of a screen editing feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;EDIT&lt;/code&gt; is part of the program editing commands like &lt;code&gt;NEW&lt;/code&gt;, &lt;code&gt;DEL&lt;/code&gt; or &lt;code&gt;AUTO&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was meant to support editing on dumb, teleprinter level terminals. It invoked a line editor for a single (existing) BASIC line given as parameter. The cursor was moved by &lt;em&gt;Space&lt;/em&gt; and &lt;em&gt;Backspace&lt;/em&gt;. Several commands were available to overwrite, insert and delete characters - including repetition.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Not really a screen editor in today's understanding, but rather working on logical lines displayed and the ability to change &lt;em&gt;one&lt;/em&gt; and hand it over to BASIC again like a newly entered one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - A 'shadow cursor' handling allowed to copy (parts of) lines from screen into the promt line. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-11-26T11:58:41.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12879" PostTypeId="2" ParentId="12875" CreationDate="2019-11-26T12:28:21.660" Score="7" Body="&lt;p&gt;There’s a related question, &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/634/79&quot;&gt;How can I take an image of a 50-pin SCSI hard-drive&lt;/a&gt;, which covers most approaches available to connect a 50-pin SCSI drive to a recent-ish computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Limiting options to a laptop means the only option to connect the drive to your computer is to use a USB-to-SCSI adapter. These aren’t manufactured any more, as far as I’m aware; but they are readily available second-hand, for rather large amounts of money. If you go down this route, there are a number of points to consider:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;USB-to-SCSI adapters provide external SCSI connectors, so you’ll need something else to connect the external SCSI connector to the internal SCSI connector on your drive — options include full-blown SCSI enclosures (which also provide power), or an adapter cable;&lt;/li&gt;&#xA;&lt;li&gt;you’ll need to provide power to the drive, unless you use an enclosure;&lt;/li&gt;&#xA;&lt;li&gt;you might also need to provide termination for the drive (see the linked question).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Another potential problem is the availability of drivers for your operating system; SCSI should mostly “just work”, but I’m not sure what the level of support for USB-to-SCSI adapters is on macOS. (While USB mass storage is pretty much SCSI over USB, that doesn’t mean USB-to-SCSI adapters are supported in the same way.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, watch out for USB-to-SATA adapters marketed as SCSI adapters; they won’t fit the bill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end it might be simpler to buy an older SCSI-equipped Mac (or resurrect your G4), or even an older PC for which an internal SCSI host-bus adapter can be purchased cheaply. In my neck of the woods, ten-year-old PCs can be found for free, and an appropriate SCSI HBA with cable would cost around ten times less than a USB-to-SCSI adapter (without all the other paraphernalia required in the latter case), with no driver uncertainty.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-11-26T12:39:44.707" LastActivityDate="2019-11-26T12:39:44.707" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12880" PostTypeId="1" CreationDate="2019-11-26T14:51:35.333" Score="4" ViewCount="421" Body="&lt;p&gt;For a C64 SID project of mine (&lt;a href=&quot;https://soundcloud.com/c64er&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://soundcloud.com/c64er&lt;/a&gt;) I was using an converter almost 10 years ago, but it is missing now with its name... I researched many sites, but no lucky. Is there any SID to WAV converter that exports every channel separately? &lt;/p&gt;&#xA;" OwnerUserId="7348" LastEditorUserId="11916" LastEditDate="2020-01-03T20:12:15.753" LastActivityDate="2020-01-03T20:12:15.753" Title="SID to WAV converter that exports per channel separately" Tags="&lt;commodore-64&gt;&lt;software&gt;&lt;sound&gt;&lt;sid&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12881" PostTypeId="2" ParentId="12835" CreationDate="2019-11-26T16:07:42.073" Score="2" Body="&lt;p&gt;It's kind of an impossible question, since (as others have mentioned), it is entirely dependent on the monitor that you are trying to recreate it on.  In fact, I have two identical monitors, HP Compaq LA2306x, side-by-side, with identical settings.  If I drag any image/window/text to where I can see part on one monitor and part on the other, there is a clear difference in appearance, even if viewed from the same angle.  One is older than the other, so maybe that is the reason, but that just points out another variable to color perception.  One uses Thunderbolt conversion to VGA, and the other uses HDMI converted to DisplayPort, so that could be the cause, but again, that only points out more variables.&lt;/p&gt;&#xA;" OwnerUserId="15681" LastActivityDate="2019-11-26T16:07:42.073" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12882" PostTypeId="1" AcceptedAnswerId="12883" CreationDate="2019-11-26T16:47:21.873" Score="3" ViewCount="451" Body="&lt;p&gt;Switches are intended for just turning ON or OFF the power supply by either closing or opening the circuit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I often wonder how does mankind got idea to use these switch for sake of processing (simple processing like motor control) even before the thought of using Boolean algebra for analysing switch networks in mid 1930s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are some early applications which used switches not just mere purpose of turning ON or OFF the circuit but for processing?How may be these early devices be developed without aid of Boolean algebra?&lt;/p&gt;&#xA;" OwnerUserId="15682" LastEditorUserId="10260" LastEditDate="2021-05-12T04:17:36.180" LastActivityDate="2021-05-12T04:17:36.180" Title="What is the first (say early) use of switches (mechanical or electromechanical) for sake of processing (like automatic motor control)simple data?" Tags="&lt;early-computer&gt;&lt;relay-computer&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12883" PostTypeId="2" ParentId="12882" CreationDate="2019-11-26T17:29:59.590" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Switches are intended for just turning ON or OFF the power supply by either closing or opening the circuit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. Switches in process control are intended to sense a state. That the result and its use can be combined is rather a nice shortcut.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Already early on, contactors were used to control power machienery with lower voltage circuits, itself controlled by series of switches, either direct handeled, or by prior contactors - like having Motor B only running if A is already running and up. Same is true for mechanical constructions.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I often wonder how does mankind got idea to use these switch for sake of processing (simple processing like motor control) even before the thought of using Boolean algebra for analysing switch networks in mid 1930s.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Relais are around since the 1820s and have been used for logic combinations since short thereafter - way before Boole wrote his book in the 1840s. Practical use of logic has been around since maybe the begin of time - and documented since Roman times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each Cuckoo clock is a piece of staggered logic for process control. More so every tower clock ringing bells accordingly at the hour for the hour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bools book is an exercise to formalize logic notation and fix its notation as well as rules. History goes way before - as well as it's important to keep in mind, that in the way we understand it today, it was developed in the 1900s to 1930s. And it wasn't until after Shannon that it became a valid tool for engineering. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What are some early applications which used switches not just mere purpose of turning ON or OFF the circuit but for processing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Turning on and off is an inseparable result of processing. Even no matter how trivial it may seam. And all of this processing has been used way before any electricity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think of a lever moved by water level, pressing a plug into a tube when the level gets to low, thus saving a mill from getting overflown and damaged when stuck because of not generating enough power to drive whatever machinery. Clearly some (analogue) processing of water level vs. power requirement.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How may be these early devices be developed without aid of Boolean algebra?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Take above lever and plug and replace it by a switch and solenoid. Or as control circuit for the generator, switching of users when power level slides, or many alike.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Logic is independent of implementation,&lt;/li&gt;&#xA;&lt;li&gt;Implementation can be done in many different ways, analogue and digital, electrical and mechanic, and finally&lt;/li&gt;&#xA;&lt;li&gt;Boolean Algebra is only a way to express logic in as a formal system, not precondition nor result of processing.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Bottom line: It's not applicable to condition on independant areas.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-26T22:58:41.457" LastActivityDate="2019-11-26T22:58:41.457" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12884" PostTypeId="2" ParentId="12882" CreationDate="2019-11-26T18:24:20.777" Score="8" Body="&lt;p&gt;The first recorded use of relays in process control computing is in a patent granted to John Saxby in 1856.  A brief description is given &lt;a href=&quot;https://en.wikipedia.org/wiki/Interlocking&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They were used to control railway signalling.  The 'interlocking' superseded the mechanical interlocking systems used in Victorian signal boxes.  It was only permitted to set a signal to &quot;Proceed&quot; if the track behind it was clear and points correctly set etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is interesting to note that relay interlockings are not only still in use on the world's railway systems, they are still being manufactured in almost the same format as well over 100 years ago.  Modern SSI (Solid State Interlockings) still use the same relay logic as these safety-critical relay systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I spent a significant part of my working life programming these things).&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2019-11-26T18:24:20.777" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12885" PostTypeId="1" CreationDate="2019-11-26T19:13:44.203" Score="1" ViewCount="220" Body="&lt;p&gt;According to &lt;a href=&quot;https://moluch.ru/archive/211/51768/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt; (&lt;a href=&quot;https://translate.google.com/translate?sl=ru&amp;amp;tl=en&amp;amp;u=https%3A%2F%2Fmoluch.ru%2Farchive%2F211%2F51768%2F&quot; rel=&quot;nofollow noreferrer&quot;&gt;translation&lt;/a&gt;), one of the early soviet machines, &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%9C-1_(%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%BE-%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0)&quot; rel=&quot;nofollow noreferrer&quot;&gt;M-1&lt;/a&gt;, was only able to print decimal, and not alphabetical numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which other early electronic stored program computers (i.e. those that are based on vacuum tubes, transistors or ICs) also printed only decimals? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By saying 'printed only decimals' I mean that there were no provisions during the design phase to print anything except numbers, as otherwise any computer would formally apply.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2019-11-26T20:21:31.053" LastActivityDate="2019-11-26T20:21:31.053" Title="What early computers were only able to print numbers?" Tags="&lt;early-computer&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12886" PostTypeId="1" AcceptedAnswerId="12893" CreationDate="2019-11-26T19:18:25.700" Score="9" ViewCount="809" Body="&lt;p&gt;Being an Amiga fan, I have a fondness for the Rexx language.  On that platform, almost every significant program supported ARexx, allowing a high degree of interoperability and customability.  So when PCDOS 7 added Rexx (after dropping MS Basic with v6), I expected good things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... But I don't know of any.  Was it just too late in DOS' lifetime for folks to take advantage of this powerful tool? Or was it inferior in some way that would not allow the benefits ARexx offered Amiga programs?  I know a major feature offered on the Amiga was &quot;ARexx ports&quot;, which were actually native AmigaOS IPC channels which ARexx made simple to use.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2019-11-26T21:30:13.517" Title="Did any significant programs or environments take advantage of the Rexx which came with PCDOS 7 (aka PCDOS 2000)?" Tags="&lt;amiga&gt;&lt;rexx&gt;&lt;pc-dos&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12887" PostTypeId="5" CreationDate="2019-11-26T19:19:43.050" Score="0" Body="" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2019-11-26T19:19:43.050" LastActivityDate="2019-11-26T19:19:43.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12888" PostTypeId="4" CreationDate="2019-11-26T19:19:43.050" Score="0" Body="Use for the Rexx language on any platform." OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2019-11-26T19:19:43.050" LastActivityDate="2019-11-26T19:19:43.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12889" PostTypeId="5" CreationDate="2019-11-26T19:22:27.467" Score="0" Body="" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2019-11-26T19:22:27.467" LastActivityDate="2019-11-26T19:22:27.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12890" PostTypeId="4" CreationDate="2019-11-26T19:22:27.467" Score="0" Body="Use for questions relating specifically to IBM PC DOS, which veered from MS DOS at its version 6.1." OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2019-11-26T19:22:27.467" LastActivityDate="2019-11-26T19:22:27.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12891" PostTypeId="2" ParentId="12885" CreationDate="2019-11-26T19:54:20.340" Score="1" Body="&lt;p&gt;Simpy any computer with just a numerical printer attached.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As integrated device,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;a first may be &lt;a href=&quot;https://en.wikipedia.org/wiki/Powers_Accounting_Machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;Powers&lt;/a&gt; (*1) Printing Tabulator of 1915. With a replaceable 'Connection-Box' it may as well count as programmable.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CTR's Hollerith Tabulator Type III (later IBM 091) of 1921 is eventually a better known example.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It's follow up, the 1928 Type IV (later IBM 301) finally featured a &lt;a href=&quot;https://en.wikipedia.org/wiki/Plugboard&quot; rel=&quot;nofollow noreferrer&quot;&gt;plugboard&lt;/a&gt;,  like it became standard for the next decades, for programming.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Until that point printing of alphanumeric data was, if possible at all, restricted to interpreters. Standardization of alpha encoding as general feature was only done in the late 1920s - like with IBM's 80 column punch card.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IBM's 401 in turn merged alpha functionality in 1938.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - &lt;a href=&quot;https://en.wikipedia.org/wiki/Remington_Rand&quot; rel=&quot;nofollow noreferrer&quot;&gt;Remington Rand&lt;/a&gt; eventually acquired Power in the late 1920s, becoming IBMs biggest rival. Much like it's spin off CDC some decades later :) &lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-11-26T19:54:20.340" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12892" PostTypeId="1" AcceptedAnswerId="12934" CreationDate="2019-11-26T20:19:21.117" Score="1" ViewCount="248" Body="&lt;p&gt;I have got a Snes which is in pretty good shape. My problem is that the RF jack is very dirty and corroted. I haven't tried cleaning it because I think I could accidentally break it. (The jack is working perfectly) &lt;/p&gt;&#xA;" OwnerUserId="15691" LastEditorUserId="6659" LastEditDate="2019-12-01T13:47:32.457" LastActivityDate="2019-12-01T16:58:15.133" Title="How can I clean the RF-Out jack of the SNES" Tags="&lt;maintenance&gt;&lt;snes&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12893" PostTypeId="2" ParentId="12886" CreationDate="2019-11-26T20:41:03.363" Score="12" Body="&lt;p&gt;The answer is a resounding no. Rexx was not a popular scripting language for DOS because it didn't offer any significant advantage over DOS batch files, besides the differing syntax which is a subjective benefit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where Rexx really shines is as a scripting language for automating applications. That's how it was used on the Amiga. But since PC-DOS/MS-DOS is single-tasking, using a centralized script run-time to automate applications isn't nearly as practical. In a single-tasking system, it makes more sense to make applications scriptable by &lt;strong&gt;embedding&lt;/strong&gt; some scripting engine within the application itself. So that was the most likely route for DOS applications that needed &quot;scriptability&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ARexx for the Amiga, and the equally popular AppleScript for classic (and newer) Macs added a scripting layer to the platform that would not find its way onto PC's until they adopted multitasking. I think the realistic equivalent to ARexx for the Amiga would be Microsoft's Visual Basic for Applications, which made its way into Windows in 1993.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-11-26T21:30:13.517" LastActivityDate="2019-11-26T21:30:13.517" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12894" PostTypeId="2" ParentId="12882" CreationDate="2019-11-26T22:00:30.367" Score="4" Body="&lt;p&gt;Maybe not the earliest, but early and important, and very elaborate uses:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Automatic telephone exchanges. Strowger, 1891.&lt;/li&gt;&#xA;&lt;li&gt;Elevator control (early 20th century).&lt;/li&gt;&#xA;&lt;li&gt;Telegraphy, especially teleprinters (from the early 1900s).&lt;/li&gt;&#xA;&lt;li&gt;Railroad signalling, especially railroad safety (eg INDUSI, 1930s).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="785" LastActivityDate="2019-11-26T22:00:30.367" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12895" PostTypeId="2" ParentId="4489" CreationDate="2019-11-26T22:11:20.320" Score="1" Body="&lt;p&gt;Profit for vendors of preformatted disks :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC, many such disks failed when you actually reformatted them (certainly more often than those originally sold unformatted), making it appear like selling them preformatted actually was a method of reusing partially defective media respectively achieving higher production yields.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2019-11-26T22:11:20.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12896" PostTypeId="2" ParentId="12806" CreationDate="2019-11-26T22:23:55.217" Score="5" Body="&lt;p&gt;Generally, most 1996 mainboards WILL deal with a 5 1/4&quot; floppy just fine IF you use the appropriate cable (which will often NOT have been supplied with a computer or mainboard in 1996). The important thing is BIOS support. Which is likely on any mainboard that still has ISA slots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC I did use a 5 1/4&quot; drive just fine on a ca. 1998 ASUS P5A based system, with Windows 98SE and various Unices.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2019-11-26T22:23:55.217" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12897" PostTypeId="2" ParentId="12880" CreationDate="2019-11-27T05:23:24.353" Score="4" Body="&lt;p&gt;I'm not sure about built-in support for rendering per-track wave files automatically, but you could write a batch file or shell script to drive a command-line SID-to-Wave tool to play it multiple times, leaving a different channel un-muted each time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/projects/jsidplay2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;JSIDPlay2&lt;/a&gt; can be used that way.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;✓ Works on all major platforms&lt;/li&gt;&#xA;&lt;li&gt;✓ Supports your choice of cycle-accurate emulation or hardware SID cards&lt;/li&gt;&#xA;&lt;li&gt;✓ Can be run in a shell script or batch file via the &lt;code&gt;--audio WAV&lt;/code&gt;, &lt;code&gt;--muteVoice1&lt;/code&gt;, &lt;code&gt;--muteVoice2&lt;/code&gt;, etc. options&lt;/li&gt;&#xA;&lt;li&gt;✓ According to &lt;a href=&quot;https://www.lemon64.com/forum/viewtopic.php?t=45631&amp;amp;sid=50de7d4748263925e9a1e6312acf36f3&quot; rel=&quot;nofollow noreferrer&quot;&gt;this thread&lt;/a&gt;, filtering support isn't contingent on having all channels un-muted like with SidAmp.&lt;/li&gt;&#xA;&lt;li&gt;✗ Unless you have a powerful machine, you may find it takes more than 3 minutes to render a 3 minute song to Wave on the emulated SID.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Running the command-line version without arguments will tell you what options it takes.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2019-11-27T05:23:24.353" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12898" PostTypeId="1" AcceptedAnswerId="12900" CreationDate="2019-11-27T05:43:42.830" Score="16" ViewCount="4721" Body="&lt;p&gt;Interesting discussion by someone thinking of procuring a PDP-11/34, though having difficulty finding suitable space for it: &lt;a href=&quot;https://www.reddit.com/r/retrobattlestations/comments/dztvci/minimum_viable_system_for_pdp11/&quot; rel=&quot;noreferrer&quot;&gt;https://www.reddit.com/r/retrobattlestations/comments/dztvci/minimum_viable_system_for_pdp11/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A comment that caught my eye:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Keeping it in the garage will destroy it with the humidity and condensation as the seasons change. I've worked on machinery over the years that's been kept in garages and sheds, corrosion - and these are basic machines, it will be much less kind to electronics.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That seems surprisingly pessimistic! I don't have experience with mainframes or minicomputers, but I've been working with personal computers of various kinds for going on four decades, and I have never seen hardware rendered inoperable just by being in a location that is not climate controlled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there something about the technology with which the older minicomputers were built, that makes them more susceptible to moisture damage?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-11-28T19:36:54.370" Title="Why are old computers so vulnerable to temperature changes and moisture?" Tags="&lt;hardware&gt;&lt;minicomputers&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12899" PostTypeId="1" AcceptedAnswerId="12908" CreationDate="2019-11-27T15:05:56.110" Score="5" ViewCount="441" Body="&lt;p&gt;Why can my PC not boot FAT larger than 2GB (FAT32) in legacy mode, but FAT16 and NTFS work fine?&lt;/p&gt;&#xA;&lt;p&gt;It just gives me a non-system disk error, while booting the same (DOS boot disk) files under FAT16 works fine. Can someone explain to me what's happening, or do I just have bad 32-bit formatting tools or a weird UEFI/BIOS. It's a SCSI drive by the way.&lt;/p&gt;&#xA;" OwnerUserId="15103" LastEditorUserId="15334" LastEditDate="2020-12-08T17:01:04.820" LastActivityDate="2020-12-08T17:01:04.820" Title="Can't boot FAT32 larger than 2GB, unlike FAT16" Tags="&lt;ms-dos&gt;&lt;boot&gt;&lt;file-system&gt;&lt;scsi&gt;&lt;bios&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12900" PostTypeId="2" ParentId="12898" CreationDate="2019-11-27T15:20:26.990" Score="24" Body="&lt;p&gt;If you watch enough YouTube videos of repairing old micros &amp;mdash; and even ones that aren't that old (486s didn't come out that long ago, did they?) &amp;mdash; you'll see a lot that have suffered some sort of damage due to storage over the years. Some damage, such as corrosion due to battery leakage or cracked circuit boards, is not due to climate. However some, such as oxidized contacts or corroded circuit board traces, is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Old mainframes and minicomputers have a lot of points of failure compared to micros. Their construction often involves a lot of socketed components, plugs and connectors, and wire-wrapped connections. Each of these is an unprotected point where corrosion can occur. Repeated heating and cooling cycles can unseat socketed components and connectors, or weaken iffy solder joints. Humidity can corrode exposed wire, pins, and traces. Many old printed circuit boards do not have protective solder mask layers, which leaves them exposed as well. And there are a &lt;em&gt;lot&lt;/em&gt; of boards, discrete components, and wired connections, which means a lot more pieces that can go bad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Contrast this to the construction of most micros: more modern circuit boards, often (but not always, depending on age) with a protective solder mask layer. Many components are directly soldered to the board, and there are often only one or two boards. Almost all the connections are internal to the circuit boards. There are fewer discrete components, because there are more complex integrated circuits. There are far fewer exposed connections that can flake out, or components to be damaged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, don't discount age as a factor. Depending on the computer, the quality of construction of some of the components may simply not have been as good because no one yet knew how to make them better, so ambient conditions may damage them too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Saying &quot;will destroy&quot; may be something of an exaggeration depending on climate. A moderate or even hot, fairly dry climate will likely be reasonably kind to electronics if they're sheltered. A cool and damp one without too much temperature variation may not be a death sentence. In my opinion, a warning like that is still a good idea to someone who doesn't know the ins and outs of old electronics, since it will prevent disappointment and wasted money.&lt;/p&gt;&#xA;" OwnerUserId="4744" LastActivityDate="2019-11-27T15:20:26.990" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12901" PostTypeId="2" ParentId="12898" CreationDate="2019-11-27T17:25:17.570" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there something about the technology with which the older minicomputers were built, that makes them more susceptible to moisture damage?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it's about any human made - in fact even any pysical item at all.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I've been working with personal computers of various kinds for going on four decades, and I have never seen hardware rendered inoperable just by being in a location that is not climate controlled.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The issue isn't about being climate controlled or not, but what conditions it experiances over each day and years. Stuff in a shed in SoCal will stay much longer without damage than in a nice garage in the North-West.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's why you find way more worthwhile project material when searching for an old car in Nevada vs. Oregon. And the same is true for old computers and anything else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: What people tell you about their experience when storing computers in garages or alike, &lt;strong&gt;depends mostly on their values for $GARAGE and $KLIMA&lt;/strong&gt; which need to be mentioned to make the story worthwhile.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-27T17:35:46.580" LastActivityDate="2019-11-27T17:35:46.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12902" PostTypeId="2" ParentId="12882" CreationDate="2019-11-27T17:45:10.263" Score="4" Body="&lt;p&gt;Mechanical switches were put to good use by Jacquard in his &lt;a href=&quot;https://en.wikipedia.org/wiki/Jacquard_machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;loom&lt;/a&gt; in 1804.  This was a refinement of automated controls originating in the early 1700s, and his ideas were later adopted by Charles Babbage for his analytical engine in the 1830s, all before the invention of Mr. Boole's algebra.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe not electrical switches, but definitely mechanical switches used for automating industrial controls.&lt;/p&gt;&#xA;" OwnerUserId="7510" LastActivityDate="2019-11-27T17:45:10.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12903" PostTypeId="2" ParentId="12420" CreationDate="2019-11-27T21:24:13.133" Score="4" Body="&lt;p&gt;(Credit goes to @tofro for the answer)&#xA;The actual command to activate &lt;code&gt;ftape&lt;/code&gt; is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$ sudo modprobe zftape&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This loads both &lt;code&gt;zftape&lt;/code&gt; and &lt;code&gt;ftape&lt;/code&gt;, and creates all the necessary devices under &lt;code&gt;/dev&lt;/code&gt;, so there's no need to run &lt;code&gt;MAKEDEV&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="13540" LastActivityDate="2019-11-27T21:24:13.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12904" PostTypeId="2" ParentId="12898" CreationDate="2019-11-27T23:41:27.733" Score="3" Body="&lt;p&gt;Someone can correct me if I am wrong, but I think larger components/contacts create larger shear forces due to the different rates of thermal expansion in different materials.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, a tiny solder joint will have a much smaller difference between the expansion of the solder and of the plastic.&lt;/p&gt;&#xA;" OwnerUserId="647" LastActivityDate="2019-11-27T23:41:27.733" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12905" PostTypeId="1" AcceptedAnswerId="12910" CreationDate="2019-11-28T01:08:35.620" Score="2" ViewCount="173" Body="&lt;p&gt;With the exception of DEF FN and the handful of direct-mode commands (CONT, LIST, etc), my interpreter is &lt;em&gt;running&lt;/em&gt; most programs, but layout remains an issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are three lines from the BASIC Computer Games' &lt;a href=&quot;https://annarchive.com/files/Basic_Computer_Games_Microcomputer_Edition.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;23 Matches&quot;&lt;/a&gt;...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;270 PRINT &quot;THE NUMBER OF MATCHES IS NOW&quot; N&#xA;...&#xA;350 PRINT &quot;THERE ARE NOW &quot;;N;&quot;MATCHES REMAINING.&quot;&#xA;...&#xA;390 PRINT &quot;MY TURN ! I REMOVE&quot; Z &quot;MATCHES&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;First, look at line 350. There is a space inside the string before the first semi, so that the value isn't run up against the text. However, the second string doesn't have a space. Is there a trailing space on numbers, or is this going to cause it to run up against the number?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now consider the other two lines. They print a list of items without any separators, something I didn't think was legal but I'm now trying to support. In both cases, the first string has no trailing space. In these cases, is the space between the string constant and the variable significant? I believe MS drops all whitespace, and my code assumes that, so my suspicion is that these are not significant. However, &lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-11-28T19:39:17.527" Title="Semis and spaces in MS-alike BASIC PRINT commands" Tags="&lt;microsoft-basic&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12906" PostTypeId="1" AcceptedAnswerId="12913" CreationDate="2019-11-28T01:28:22.857" Score="5" ViewCount="229" Body="&lt;p&gt;Back in the day my copies of Creative Computing always had a two-page add from Dynacomp somewhere in it, like &lt;a href=&quot;https://archive.org/details/creativecomputing-1982-01/page/n117&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tracking down some of the programs, it appears they are also almost all also associated with &lt;a href=&quot;http://www.artworx.com/adieu.htm&quot; rel=&quot;noreferrer&quot;&gt;Artworx&lt;/a&gt;. I tried contacting Art, but the email is still out there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know if these two companies were one and the same?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4138" LastEditDate="2019-11-28T10:11:37.260" LastActivityDate="2020-05-07T13:49:22.747" Title="Were Artworx and Dynacomp the same?" Tags="&lt;gaming&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12907" PostTypeId="2" ParentId="12905" CreationDate="2019-11-28T02:03:19.223" Score="2" Body="&lt;p&gt;Not all MS BASICs include spaces. AppleSoft — which is derived from MS BASIC — would output&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A5B&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;if it saw&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PRINT &quot;A&quot;;5;&quot;B&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-11-28T02:03:19.223" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12908" PostTypeId="2" ParentId="12899" CreationDate="2019-11-28T08:24:02.810" Score="8" Body="&lt;p&gt;My hypothesis is as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The last time you successfully formatted the drive to be bootable, you did it with something that only understands FAT16 booting, so it installed a boot sector that only knows how to hand off to FAT16 partitions.&lt;/li&gt;&#xA;&lt;li&gt;When you formatted for FAT32, you didn't properly ask for a &lt;em&gt;bootable&lt;/em&gt; FAT32 partition, so you've got a boot sector that expects to boot a FAT16 partition that no longer exists.&lt;/li&gt;&#xA;&lt;li&gt;NTFS is irrelevant if the boot sector is the problem because UEFI booting bypasses the boot sector. (Bootloaders got much bulkier in the intervening years and legacy booting with bootloaders like GRUB already has to do a messy dance involving putting a tiny little stub in the boot sector that just knows how to load the real bootloader from a defined location on one of the partitions.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Alternatively, maybe you didn't ask your partitioning tool to set the &quot;boot&quot; metadata flag in the MBR. I can't remember how strict old bootloaders are about expecting the boot partition to be a primary partition &lt;em&gt;and&lt;/em&gt; flagged as &quot;boot&quot;.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2019-11-28T08:24:02.810" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12909" PostTypeId="1" CreationDate="2019-11-28T14:19:08.797" Score="21" ViewCount="3548" Body="&lt;p&gt;I think they represent data because I feel it is a mechanical machine which is fully configured and the holes decide only that the thread related to each hole  must be moved or not. Thus &lt;strong&gt;the holes represent whether the mechanical energy should be transferred to that thread or not&lt;/strong&gt;. In digital circuits program code decides the arrangement of the transistors thus configuring the circuit. Whereas the &lt;strong&gt;input data just turns ON or OFF transistors making the electrical power available to the output&lt;/strong&gt;. Hence I think the holes (decide whether to transfer mechanical energy to output) and input data (decides whether to transfer electrical energy to output) are analogous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But some sources say that the holes represents program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what is the best view here?&lt;/p&gt;&#xA;" OwnerUserId="15682" LastEditorUserId="6794" LastEditDate="2019-12-04T22:03:15.417" LastActivityDate="2019-12-05T08:33:53.250" Title="Do the holes in Jacquard loom punched cards represent input data or program code?" Tags="&lt;file-format&gt;&lt;early-computer&gt;&lt;punched-cards&gt;" AnswerCount="8" CommentCount="21" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12910" PostTypeId="2" ParentId="12905" CreationDate="2019-11-28T14:30:48.257" Score="2" Body="&lt;p&gt;When I did my MS basic clone I found I needed the trailing space on numbers and a leading space if the number wasn't negative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the tests I wrote STR$ always puts a leading space in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I ended up testing with a UK101,Pet,Apple and CP/M version of MS basic in the end.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2019-11-28T14:30:48.257" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12911" PostTypeId="2" ParentId="12909" CreationDate="2019-11-28T14:34:14.643" Score="11" Body="&lt;p&gt;For most parts it's code. Well, code is a quite sloppy term, it covers a huge list of uses, from card scratching to encryption. So more correctly, it's a program (*1), as it defines a sequence of action to be taken by the machine - interpreted when the loom runs the cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;If at all,&lt;/em&gt; then thread is data. It is input from spools, processed by the loom according to the program and output as cloth.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The holes represent whether the mechanical energy should be transferred to that thread or not.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Exactly the same way an instruction describes what buffers are to be opened or latches to be enabled when executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example a &lt;code&gt;TAX&lt;/code&gt; instruction of a 6502 defines that the &lt;code&gt;AC/SB&lt;/code&gt; signal is to be pulled during &lt;code&gt;PHI1&lt;/code&gt;, as well as the &lt;code&gt;SB/X&lt;/code&gt; signal, thus transferring the content of Accumulator output buffer onto the SB-bus to be latched by the X (register).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact, that it's 'punched' as an encoded 8 bit value, instead of separate 'holes' for each latch/buffer doesn't change the workings. Making it explicit for each circuit would turn the 6502 into a VLIW processor - many 'holes', nonetheless a CPU. Isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, how energy is transferred doesn't matter. Direct or indirect, level or type can be of any and does only make a statement about the construction, not the process. A CPU can as well be build using high voltage FET operating at 200V DC. Heck, tube computers did exactly that :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In digital circuits program code decides the arrangement of the transistors thus configuring the circuit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not. Code doesn't configure any transistor or circuit. The circuit is static, and a program commands, when sequenced, its actions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's the core point here: programming is sequencing of actions (*2). And that's exactly what loom cards do - they define a sequence of actions to be performed to generate a certain cloth.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Further Considerations:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This question seams to stir a lot of emotions and many logical shortcuts are taken, so let's look at the details (and some claims made in comments)&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;What is a Program&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Wikipedia (*3): &quot;A [computer] program is a collection of instructions that performs a specific task when executed [by a computer.]&quot;. It doesn't require anything special from a program beside instructions (being executed) performing a task. Instructions, when turned into explicite form are usually called code.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;What are Instructions&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Interestingly Wiki points here again to 'Computer Program'. It seams to be one of the words that are so obvious that there is no need to add an entry. Still, I think it's agreeable to say that an instruction is a data element, that instructs a machine, when read, to show a certain behaviour - aka executing it. &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;It needs to have Conditionals&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Or as Chris puts it: &lt;em&gt;'That lack of any provision for flow control or conditionals makes the continuous loop of cards clearly just data, not a &quot;program&quot; in the computing sense of the word'&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure what a &quot;computing sense&quot; is and why it needs to be introduced. But even in computing conditionals are optional. They are only a requirement if the goal is to create an &lt;em&gt;universal&lt;/em&gt; computer. Just because it's the standard we use, doesn't make it the only way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But let's take a look at this by a very simple example. Assume we have a trafic light, controlled by an 8080 CPU, executing on a fixed (ROM based) program. It runs steady, monotone and forever thru the light cycle. Such a program could look this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;OUT YELLOW&#xA;OUT WAIT_1&#xA;OUT RED&#xA;OUT WAIT_15&#xA;OUT RED_YELLOW&#xA;OUT WAIT_1&#xA;OUT GREEN&#xA;OUT WAIT_15&#xA;JMP START&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Each accessing either port switches on the marked configuration (may vary per country) or halts the execution for a given time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think we all can agree this is a program, don't we? Sure, it doesn't use conditionals, and doesn't need to, but it's a programmed sequence doing the job. And it's not a fixed function machine, but executing a stored program, which can be exchanged - like with a version for a light scheme used in the US.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's play evil scientist, pull out the 8080, take our handy laser tool and burn all conditional opcodes (and there's 24 of them) from the 8080s instruction decoder. Geniuses as we are, we do not damage any other part. Putting it back, it will run the lights as before. No chance visible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there are no longer any provisions for conditions. Does it mean that the &lt;em&gt;unchanged&lt;/em&gt; code now is no longer code? &lt;strong&gt;No&lt;/strong&gt;. It still is. All this proves is, that code does not need an &lt;em&gt;universal&lt;/em&gt; computer to run. It still is (the very same) code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What we have changed is the processor executing the instructions - exchanging a __universal_ for a &lt;em&gt;non-universal&lt;/em&gt; one. And that's exactly what a Jacquard loom is. A &lt;em&gt;non-universal&lt;/em&gt; processor running code.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;But the punch cards got a separate hole for each lever to be pulled&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;True. But also, isn't that the way instructions on a VLIW processor are? Having separate bits for each function available?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take above 8080 and turn it into a VLIW machine with bits for each and every sup function. While it would be somewhat uneconomical (*4), engineers would like it for the simplicity to build it. It would work great, wouldn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we can go ahead and remove every function except for the 5 functions needed for the 6 output functions plus the jump - on a loom we can even save that by just splicing the ends to form a card loop. It would still work, despite having separate 'holes' for each function to be executed. In fact, we can even save on one, as we now can encode RED-YELLOW as a combination of the two holes for RED and YELLOW. The benefits of VLIW :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like before it wouldn't change neither meaning nor operation.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;But again, what's on the cards is data describing the pattern&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Maybe on an abstract level. With enough abstraction even humans may count as rational. A real answer needs a closer look, which in this case reveal the holes as instructions to the processor in the of the form&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;Shed group 1/4/5&lt;/code&gt;; &lt;code&gt;Use shuttle B&lt;/code&gt;; (&lt;code&gt;Pick&lt;/code&gt;; &lt;code&gt;Batten&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not a description for a pattern, but &lt;strong&gt;an instruction for the machine to operate&lt;/strong&gt;. The pattern is what results from processing these instructions by the means of sheding, picking and batting. With different instructions a different pattern will emerge &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;But I Mean ....&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Hmm, meaning is maybe another good angle to look at it - not the personal opinion, but meaning vs. purpose. &lt;em&gt;The Purpose&lt;/em&gt; of the holes of punch cards in a loom are to create a pattern - much like the purpose of a game is to entertain you (*5). But &lt;em&gt;the Meaning&lt;/em&gt; of the holes is to instruct the movement of machine parts - exactly like the instructions in said video game code is to make 'move' parts of your computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The separation between goal to be reached and action to be taken is, as usual a quite a significant one.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: A Jacquard loom is a processor running a stored programm from a loop of punched cards - thus what's on the cards is code.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - To distinguish between data and code is rather artificial when it comes to stored program computers, or how would you characterise a program consisting only of instructions using implied or immediate data? Code? Data? CoTa? DaDe? The line isn't just blurry, but effectively nonexistent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Data as explicit item&quot; comes only into play when external to the program - and even then one could argue, that the program is a virtual machine, and the data read is the code it runs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Which is why we talk about TV, Radio or Theater programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - No, I'm not implying in any way, that Wiki got any more authority here than other sources. None the less, it seams like a reliable definition others can agree.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - And that's by the way the whole reason for having compact opcodes instead of VLIW.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Not entirely shure about that, With some tripple-A titles it seamed more as if they were made on purpose to make me angry at having spend all that money.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-29T13:43:10.360" LastActivityDate="2019-11-29T13:43:10.360" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12912" PostTypeId="2" ParentId="12905" CreationDate="2019-11-28T16:16:31.000" Score="2" Body="&lt;p&gt;MS-BASIC is for many parts modelled after DEC's PDP-11 BASIC. And PDP-11 BASIC is as well quite related to ECMA-55 Minimal BASIC, so as usual when talking about old BASIC details a look at the fine crafted ECMA-55 specification is helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For PRINTing of number is notes:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   Numeric-expressions shall be evaluated to produce a string of&#xA;   characters consisting of a leading space if the number is po-&#xA;   sitive or a leading minus-sign if the number is negative fol-&#xA;   lowed by the decimal representation of the absolute value of&#xA;   the number and a trailing space. The possible formats for the&#xA;   decimal representation of a number are the same as those des-&#xA;   cribed for numeric-constants in 6 and are used as follows.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So line &lt;code&gt;350&lt;/code&gt; looks like with exactly this formating in mind. A space in front of the number element to make sure that an optional negative sign will not be glued to the text, while no space after, as the number will already produce one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The standard continues about number output formation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   Each implementation shall define two quantities, a significance-&#xA;   width d to control the number of significant decimal digits&#xA;   printed in numeric representations, and an exrad-width e to con-&#xA;   trol the number of digits printed in the exrad component of a&#xA;   numeric representation. The value of d shall be at least six&#xA;   and the value of e shall be at least two.&#xA;&#xA;   Each number that can be represented exactly as an integer with&#xA;   d or fewer decimal digits is output using the implicit point&#xA;   unscaled representation.&#xA;&#xA;   All other numbers shall be output using either explicit point&#xA;   unscaled notation or explicit point scaled notation. Numbers&#xA;   which can be represented with d or fewer digits in the unscaled&#xA;   format no less accurately than they can be represented in the&#xA;   scaled format shall be output using the unscaled format. For&#xA;   example, if d = 6, then 10^(-6) is output as .000001&#xA;   and 10^(-7) is output as 1.E-7.&#xA;&#xA;   Numbers represented in the explicit point unscaled notation shall&#xA;   be output with up to d significant decimal digits and a full-&#xA;   stop; trailing zeroes in the fractional part may be omitted.&#xA;   A number with magnitude less than 1 shall be represented with&#xA;   no digits to the left of the full-stop. This form requires up&#xA;   to d+3 characters counting the sign, the full-stop and the&#xA;   trailing space.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Well, there is mich more to PRINT here - including the TAB() cell argument wich is for example present with DEC and Applesoft BASIC, positioning any following output to a given TAB cell. Which BTW doesn't mean 8 like in terminal speak, but 14 or more, depending on the number printing format used, as a tab cell is supposed to hold a full numeric output. A feature quite handy to print nice lists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar requires to check if there's enough space on the remaining line to output the whole print item or otherwise start a new line first.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   If the evaluation of any print-item in a print-list would cause&#xA;   the length of a nonempty line to exceed the margin, then an&#xA;   end-of-line is generated prior to the characters generated by&#xA;   that print-item. Subsequently, if the evaluation of a print-&#xA;   item generates a string whose length is greater than the mar-&#xA;   gin, then end-of-lines are inserted after every m characters&#xA;   in the string, where m is the margin value.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A remarkable point many microcomputer BASICs never implemented - but minis did. Lime many other side effects, programmers may have made use of this, rendering output in a different BASIC different. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In general it is important to keep in mind, that most of the games in 101 BASIC Games weren't first (or at all) developed on a some micro computer, but came from minis with their own BASICs&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-11-28T19:39:17.527" LastActivityDate="2019-11-28T19:39:17.527" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12913" PostTypeId="2" ParentId="12906" CreationDate="2019-11-28T17:23:59.697" Score="5" Body="&lt;p&gt;They were geographically close by; I see addresses for Dynacomp in Rochester and Webster, and for Artworx in Penfield and Fairport, all in New York State. However they were separate companies, as recounted by Art Walsh &lt;a href=&quot;http://ataripodcast.libsyn.com/antic-interview-284-art-walsh-dynacomp-and-artworx&quot; rel=&quot;nofollow noreferrer&quot;&gt;in ANTIC interview #284&lt;/a&gt;. He founded Dynacomp with Fred Ruckdeschel in 1978, but they ended up splitting the company up. Fred bought Art’s share of Dynacomp, and they split the software catalog in two. Art took two of the local programmers who were working for Xerox in Rochester at the time, and created Artworx, officially incorporating in 1981.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is supported by other sources. In particular, &lt;a href=&quot;https://archive.org/details/DynacompCatalogNo30/page/n73&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Dynacomp catalog&lt;/a&gt; mentions its “Bridge 5.2” product, which won a bridge tournament, competing against “Troup’s Bridge Baron and Artworx’ Bridge 4.0”. Additionally, the same catalog mentions that Dynacomp’s founder and president was Dr. F. R. Ruckdeschel, whereas &lt;a href=&quot;https://archive.org/details/ArtworxWinter1982SoftwareCatalog/page/n1&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Artworx catalog&lt;/a&gt; and &lt;a href=&quot;http://www.artworx.com/adieu.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;its defunct web site&lt;/a&gt; mention that Artworx’ president was Arthur M. Walsh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some titles, such as &lt;a href=&quot;http://www.atarimania.com/game-atari-400-800-xl-xe-rings-of-the-empire_19790.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rings of the Empire&lt;/a&gt;, do appear in both companies’ catalogs, but there are many titles which are unique to &lt;a href=&quot;http://www.atarimania.com/list_games_atari-400-800-xl-xe-artworx_publisher_1094_8_G.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Artworx&lt;/a&gt; and &lt;a href=&quot;http://www.atarimania.com/list_games_atari-400-800-xl-xe-dynacomp_publisher_1195_8_G.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dynacomp&lt;/a&gt; (although these lists of Atari games may not be exhaustive).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of Artworx’ major titles, &lt;a href=&quot;https://www.mobygames.com/game-group/bridge-series_&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bridge&lt;/a&gt;, developed by Art, was released in multiple versions, the earlier ones published by Dynacomp, before Artworx was founded. When Art founded Artworx, he took Bridge with him; but it seems Dynacomp continued publishing later versions, only on the Commodore 64, so perhaps Artworx and Dynacomp both continued developing it separately. Artworx’ other major title, &lt;a href=&quot;https://www.mobygames.com/game-group/strip-poker-series&quot; rel=&quot;nofollow noreferrer&quot;&gt;Strip Poker&lt;/a&gt;, doesn’t appear in Dynacomp’s catalogs; it was published after the split, after Jerry White (&lt;a href=&quot;http://ataripodcast.libsyn.com/antic-interview-124-jerry-white-atari-author-and-programmer&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANTIC interview #124&lt;/a&gt;) brought a poker program to Artworx.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-07T13:49:22.747" LastActivityDate="2020-05-07T13:49:22.747" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12914" PostTypeId="2" ParentId="12898" CreationDate="2019-11-28T19:36:54.370" Score="2" Body="&lt;p&gt;The specifications for most computers include (or used to) prohibition of 'condensing moisture' conditions.&#xA;The 'condensing moisture' means dew.   On a ship, below waterline,&#xA;if there's no air conditioning, you'd violate that condition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason is that the electronic parts of a computer have multiple&#xA;different small metal parts.   Adjacent dissimilar  metals (copper traces,&#xA;tin/lead/copper/silver/antomony solder, silver/gold/nickel/zinc plating,&#xA;steel/brass screws, etc.) are subject to electrolytic corrosion if they&#xA;get wet, and are SMALL parts, so it only takes a small bit of corrosion to&#xA;ruin them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most working and living spaces don't get the moisture, or temperature&#xA;swings, that produce that dew (unless it's on a windowpane) but&#xA;in my garage, it certainly CAN happen.   It wouldn't be good for &#xA;the electronic parts of a computer, or even the mechanical ones.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2019-11-28T19:36:54.370" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12915" PostTypeId="2" ParentId="12909" CreationDate="2019-11-28T21:10:34.730" Score="17" Body="&lt;p&gt;Program code for modern CPUs, in practice, consists of &lt;strong&gt;opcodes&lt;/strong&gt; which tell the CPU what operation to perform, and &lt;strong&gt;operands&lt;/strong&gt; which provide data to operate on. &#xA; In RISC CPUs these are necessarily both encoded into the same instruction word, while in CISC CPUs the two usually live in separate bytes, with the operands following each opcode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there are oddities known as &lt;strong&gt;One Instruction Computers&lt;/strong&gt; which have no opcodes, only operands.  One such machine can only execute a &quot;decrement and conditional branch&quot; instruction, but allows the programmer to choose which memory locations are the input and output of the decrement operation, and the branch targets for both the zero and non-zero results of the decrement.  Such a machine is Turing-complete and can be used for general computation, albeit inefficiently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Jacquard loom is in principle such a one-instruction machine, though it is not a computer but merely an automatic labour-saving device.  The cards encode operands, which are best described as data, consisting of what amount to pixels in the weaving pattern.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-11-28T21:10:34.730" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12916" PostTypeId="2" ParentId="12909" CreationDate="2019-11-29T09:15:45.953" Score="44" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Do the holes in Jacquard loom punched cards represent input data or program code?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me tell you a story. Somebody I used to work with many years ago was flying into the USA (or it might have been Britain from the USA) with some half inch tapes containing the source code for a Cobol program. Because he was carrying the tapes separately to his luggage, he was stopped by customs and asked what they were for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Is it code or data?&quot; said the customs official. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Why does it matter?&quot; said my friend.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Because, if it's code, we have to charge import duty [or whatever tax it was]&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Ah, well, it's data... for a compiler&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distinction between code and data is blurry at best. The punched cards for a Jacquard loom can be considered as both code and data depending on your point of view. It's code that tells the loom how to move its mechanical linkages to produce a pattern and it's also data that represents a pattern. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My personal preference is to view the punched cards as data. The holes have an exact one to one correspondence with features of the pattern in the cloth, much like the bytes of a bitmap image. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That doesn't mean that Raffzahn's answer is wrong, although I think his reasoning is incorrect. Just because something can be viewed as a sequence of actions doesn't mean it isn't data. Also, the &quot;sequence of actions&quot; thing just refers to a particular kind of program called an imperative program. There are other kinds of programming that aren't sequences of actions.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;fib 0 = 0&#xA;fib 1 = 1&#xA;fib n = fib (n-1) + fib (n-2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The above is a Haskell program that calculates the Fibonacci numbers. It's three equations. There's no sequence implied, (although it will get translated into a sequence of instructions a computer can understand). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programs are data. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2019-11-29T09:15:45.953" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="12917" PostTypeId="1" AcceptedAnswerId="12919" CreationDate="2019-11-29T11:17:05.597" Score="9" ViewCount="1123" Body="&lt;p&gt;I'm curious if there are any extant examples of commercial games for classic consoles (let's say, pre-32-bit era here) which make uses of self-modifying code. As far as I know, all the systems I've listed are capable of executing from RAM. I know this for a fact, in the case of the Gameboy, and I can't conceive of anything which would limit the others from doing so.&lt;/p&gt;&#xA;" OwnerUserId="10966" LastActivityDate="2020-01-09T03:50:53.000" Title="Self-modifying code in commercial games for the (S)NES, Gameboy, Genesis/MD, PC Engine, Atari, etc" Tags="&lt;nes&gt;&lt;snes&gt;&lt;sega-genesis&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12918" PostTypeId="2" ParentId="12909" CreationDate="2019-11-29T12:10:37.827" Score="15" Body="&lt;p&gt;All code &lt;em&gt;is&lt;/em&gt; data. But &lt;strong&gt;not all data is code&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, you can take a digital photo and the numbers represent light intensity across a 2D rectangle. Nobody would dispute that this is data but not code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code is a special kind of data which &lt;em&gt;controls behaviour.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;... but it's not that simple.&lt;/strong&gt; Arguably the digital photo controls the behaviour of whatever compression/decompression software processes it, and of the motion of the printer parts if you print it out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, wait, isn't controlling a printer &lt;em&gt;exactly the same&lt;/em&gt; as controlling a loom? Ha! Got you there!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is meant by &quot;code&quot; is context-dependent. It seems to have different meanings for different objects (a computer, a loom, a synthesiser, a 3D printer). So here is my attempted definition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;is data that expresses a series of steps* in a certain well-defined language&lt;/li&gt;&#xA;&lt;li&gt;controls the behaviour of a (real or abstract) machine&lt;/li&gt;&#xA;&lt;li&gt;has the capacity to dictate a wide variety of behaviours, &lt;em&gt;relative to the capabilities of the machine.&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So I would say &lt;strong&gt;yes, a punched card contains code for a Jacquard loom&lt;/strong&gt;. A digital image is only data for a computer. For an old-fashioned dumb printer, a digital image might be called code, but for modern printers which have advanced configuration and job handling protocols and font loading and typesetting... an actual image to print would probably be considered &quot;trivial&quot; and thus data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;*Code does not actually need to be sequential, but it has to express some kind of process. cf. &lt;a href=&quot;https://en.wikipedia.org/wiki/Dataflow_architecture&quot; rel=&quot;noreferrer&quot;&gt;dataflow architectures&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Lambda_calculus&quot; rel=&quot;noreferrer&quot;&gt;lambda calculus&lt;/a&gt;&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; How about instructions like &quot;forward, left, right&quot; for the &lt;a href=&quot;http://botlogic.us/&quot; rel=&quot;noreferrer&quot;&gt;simulated robots&lt;/a&gt; that are often used to introduce kids to programming? I would say that for the &quot;abstract machine&quot; that is a robot, they are code, but for the computer, or even the app itself, they are data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; What about code for DSP chips and FPGAs? It's as far removed from a sequence of steps as you can get—and yet it controls the behaviour of a machine, and is capable of expressing &lt;em&gt;even more&lt;/em&gt; behaviours than code for a CPU. It's code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, what about a wiring diagram for a motherboard? I wouldn't call it code... but why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After some thinking, I realised that there is only one &quot;sensible&quot; way to connect the components together. Reconfiguring it doesn't change the behaviour, it just breaks it. E.g. if you switched the address bus and the data bus, the system just wouldn't work.&lt;/p&gt;&#xA;" OwnerUserId="647" LastEditorUserId="647" LastEditDate="2019-12-01T00:14:56.877" LastActivityDate="2019-12-01T00:14:56.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12919" PostTypeId="2" ParentId="12917" CreationDate="2019-11-29T12:22:55.883" Score="6" Body="&lt;p&gt;I know about one Atari 8bit game called &lt;a href=&quot;https://www.mobygames.com/game/robbo&quot; rel=&quot;noreferrer&quot;&gt;Robbo&lt;/a&gt;. There are &lt;a href=&quot;http://sources.pigwa.net/files/gry/robbo.zip&quot; rel=&quot;noreferrer&quot;&gt;source codes published&lt;/a&gt; where in file R1.ASM you can see:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;     LDA LMVT,X&#xA;     STA JMP1+1&#xA;     LDA LMVT+4,X&#xA;     STA JMP1+2&#xA;JMP1 JMP *&#xA;&#xA;LMVT DTA L(UP_)&#xA;     DTA L(DW_)&#xA;     DTA L(LT_)&#xA;     DTA L(RT_)&#xA;&#xA;     DTA H(UP_)&#xA;     DTA H(DW_)&#xA;     DTA H(LT_)&#xA;     DTA H(RT_)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;LDA gets address from table indexed by X register, STA stores this address in JMP instruction (after OPCODE, so JMP1+1). JMP jumps to different locations depending on value in X register.&#xA;I think this is quite typical situation for self modifying code - modify only parameters of instruction not whole instruction.&lt;/p&gt;&#xA;" OwnerUserId="11331" LastEditorUserId="79" LastEditDate="2019-11-29T12:40:04.833" LastActivityDate="2019-11-29T12:40:04.833" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12920" PostTypeId="1" AcceptedAnswerId="12921" CreationDate="2019-11-29T13:58:34.010" Score="12" ViewCount="864" Body="&lt;p&gt;In a &lt;a href=&quot;http://unusedino.de/ec64/technical/misc/vic656x/colors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;well known letter&lt;/a&gt; to Philip Timmermann, Robert Yannes describes C64 color generation hardware as capable of producing any color (the palette was fixed, of course, but chosen semi-arbitrarily and could have any colors). The trick was to use a &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_trigonometric_identities#Sine_and_cosine&quot; rel=&quot;nofollow noreferrer&quot;&gt;certain trigonometric identity&lt;/a&gt; so that theoretically the same approach could be used in earlier computers as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm curious - still, what were theoretical limits on color generation at that time? Let's assume a computer with separate luma/chroma outputs, an average color TV (NTSC) from the year 1978, and limitations of chip manufacturers of that era. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was it possible to place any resistor on a chip or were there any limitations in that regard (aside from obvious desire not to have too many different resistors)? How many chroma values would look (at least a little) different on TV of that era? How many of them would survive being sent over the wire and being decoded by TV?&lt;/p&gt;&#xA;" OwnerUserId="15499" LastEditorUserId="4921" LastEditDate="2019-12-03T00:56:48.550" LastActivityDate="2019-12-03T15:43:05.190" Title="Limitations for Color Usage in NTSC" Tags="&lt;ntsc&gt;&lt;s-video&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12921" PostTypeId="2" ParentId="12920" CreationDate="2019-11-29T15:32:35.747" Score="22" Body="&lt;h2&gt;TL;DR&lt;/h2&gt;&#xA;&lt;p&gt;Any (*1) colour can be displayed. The signal is analogue and can be very fine tuned.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;But&lt;/strong&gt; tuning needs time, thus not every colour can be shown beside each other (without a transition thru others).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read:&lt;/h2&gt;&#xA;&lt;p&gt;NTSC, like PAL or any other colour encoding can produce any colour, well, within its 'spec' that is. Colour encoding is based on a relative position within the 'colour wheel':&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Q5yQm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q5yQm.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Picture taken &lt;a href=&quot;http://c-128.freeforums.net/thread/86/colors&quot; rel=&quot;noreferrer&quot;&gt;from this great C-128 forum entry&lt;/a&gt; which illuminates the point about axis in a circle way better than the more abstract squares the corresponding Wiki articles show. )&lt;/p&gt;&#xA;&lt;p&gt;Basic encoding is done as &lt;a href=&quot;https://en.wikipedia.org/wiki/YIQ&quot; rel=&quot;noreferrer&quot;&gt;YIQ&lt;/a&gt; (*2)&lt;/p&gt;&#xA;&lt;p&gt;While Y defines the luma (B&amp;amp;W component), IQ defines the coordinate system to pick a colour. I marks on the orange/blue Axis while Q does the same for purple/green. So in theory, any colour within that circle can be displayed.&lt;/p&gt;&#xA;&lt;p&gt;Harsh reality dictates limits. So luma can't jump instantly between black and white, but is tied to the maximum signal frequency allowed (~4.2 MHz for NTSC) and in reality even less (~3.5 MHz). Thus from total black to total white at least ~120 ns will pass - and the area shown will change over grayish between both. This is basic for what TV-speak means with &lt;a href=&quot;https://en.wikipedia.org/wiki/Television_lines&quot; rel=&quot;noreferrer&quot;&gt;'lines'&lt;/a&gt;. A full spec NTSC with perfect signalling can do ~330 lines - which translated to computer speak would mean 660 pixel (*3). On consumer grade equipment (like home computer modulators and TV sets) it's more like 240 lines - or 480 pixel. So far a C64 image is below that, thus it should be displayed crisp &amp;amp; clear - with acceptable equipment that is.&lt;/p&gt;&#xA;&lt;p&gt;Sadly the same restrictions apply to the IQ colour signal. Except here the bandwidth is even smaller (*4). Only (maximum) 1.3 MHz for I and 0.4 MHz for Q. As a result, there can be way less 'colour lines' then B&amp;amp;W ones.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When alternating between (full) blue and (full) orange (I) a maximum of about 110 lines can be shown - 220 pixels.&lt;/li&gt;&#xA;&lt;li&gt;When doing the same between (full) purple and (full) green it goes down to less than 30 (60 pixels)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This can easy be tried by putting alternating sections of green and purple on a screen line and (with some back lines in between to ease viewing) alternations of orange/blue.&lt;/p&gt;&#xA;&lt;p&gt;Already with rather wide (like 8 on a C64) sections, the green/purple corners will look mushy. With decreasing section size, their line will start to look blurry up to a point where it's even hard to distinguish the colours at all. The blue/orange line will look (comparatively) sharp, but also decrease in quality as the sections get shorter.&lt;/p&gt;&#xA;&lt;p&gt;As a matter of fact, already a (comparatively) simple resolution (like the C64 offers) can not be displayed in arbitrary colours. Then again, many great looking 8-bit games do use this 'negative' effect to smooth display or enhance colour.&lt;/p&gt;&#xA;&lt;p&gt;It's always important to keep in mind that NTSC encoding (compression; *4) was created to cover the transmission of 'real world' pictures. Something where colours rarely jump to their opposites on sharp borders. Everything smooth and in time. Also it was not designed to give the best picture, but a 'good enough' display - that's the reason why NTSC's weak colours are a great improvement over B&amp;amp;W, but at the same time why S-Video made a much bigger impact in the US than in Europe where PAL already supplied a better colour bandwidth.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion for video design meant for NTSC era TV:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Any resolution past 660 pixels is possible but does only make sense in very specific setups, colour depth can be arbitrary, and benefits a lot past 8 or 16. Even more than 256 can be useful. It would enable such a system to show off awesome pictures - even with low resolutions like 320x200. Colour depth is less useful when doing UI/Business graphics, as it will limit usable horizontal resolution.&lt;/p&gt;&#xA;&lt;p&gt;The only drawback is data size. 8-bit CPUs aren't usually fitted to handle the sheer data created by 8 bits or more per pixel.&lt;/p&gt;&#xA;&lt;p&gt;In addition, always think about PAL as well - after all, you want to sell your machine worldwide - it was Europe where Commodore had great sales until the very last day.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;As said in the beginning:&lt;/h3&gt;&#xA;&lt;p&gt;Almost (*1) every colour can be displayed, but not side by side. It is quite possible to do &lt;strong&gt;24 bit colour&lt;/strong&gt; on NTSC - and video generation for TV does exactly this - So &lt;strong&gt;go for it&lt;/strong&gt;. But don't expect to have crisp, clear, red and blue dots side by side in high resolution.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Almost, since NTSC colour space - like any other - can always display only a fraction of what nature can produce. It's limited by what the underlying RGB hardware can do (plus other limitations). This is mostly due the fact, that RGB is only an emulation with three colours, while nature serves each colour as its own.&lt;/p&gt;&#xA;&lt;p&gt;It can again be seen as a compression thing that works quite well for humans - as most of us have a similar set of detectors. And while each may differ, we all learned to call similar situations the same colour.&lt;/p&gt;&#xA;&lt;p&gt;And in fact it's as much about interpretation as it is about 'true' colour seeing. The black/blue/gold dress thing was a great example for this, as the colour information gathered by our eyes is post processed in the brain with knowledge about the situation. This is most usable to always see the same colour, no matter what lightning (within limits) is used. Grass is recognised as green at noon in summer as well as at dusk in winter. It's an important auto correction to give us a consistent world view.&lt;/p&gt;&#xA;&lt;p&gt;In the case of pictures, that hard knowledge gets replaced by assumptions about the situation the picture was taken. And different people make different assumptions. Was it taken outdoors at bright daylight, or indoors at candle light? In either case the seen colour will be transcribed into the perceived.&lt;/p&gt;&#xA;&lt;p&gt;*2 - &lt;a href=&quot;https://en.wikipedia.org/wiki/YUV&quot; rel=&quot;noreferrer&quot;&gt;YUV&lt;/a&gt; like used with PAL, modern NTSC and many computer applications is similar for all respects. Its plane is just 'rotated' by 33 degree, placing the colours more in quadrants, making it (look) 'symmetric' which simplifies numeric handling.&lt;/p&gt;&#xA;&lt;p&gt;*3 - That's why 640x480 VGA interlaced is still within NTSC specs - even though it gets blurry when broadcasted and received on classic consumer level devices.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Colour TV signal can be seen as a lossy compression with most information preserved for Y (~60%) and less for I (30%) and Q (10%). It works much as this is a model quite fitting the human eye with being most sensitive on B&amp;amp;W in general, and on Blue/Red when it comes to colour.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-12-03T15:43:05.190" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12922" PostTypeId="2" ParentId="12909" CreationDate="2019-11-29T21:32:23.727" Score="7" Body="&lt;p&gt;I think the other answers cover the topic pretty well, but allow me to ask a related question as food for thought: is the music roll of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Player_piano&quot; rel=&quot;noreferrer&quot;&gt;player piano&lt;/a&gt; code or data?  On the one hand, the piano just sits there and does nothing without the roll, suggesting that it's &quot;code&quot;.  On the other, the roll is morally equivalent to sheet music that a human musician might read to execute the same notes on a piano.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you think of &lt;a href=&quot;https://en.wikipedia.org/wiki/Sheet_music&quot; rel=&quot;noreferrer&quot;&gt;sheet music&lt;/a&gt; as code or data?  If sheet music is &quot;code&quot;, does that mean the musician is the &quot;processor&quot;?  Are the notes &lt;em&gt;instructions&lt;/em&gt; for the &quot;musician-CPU&quot;?  Or are they &lt;em&gt;data points&lt;/em&gt; for a &quot;music-program&quot; in the musician's brain to consume?  As others have noted, the line is blurry, and perhaps not as meaningful as we would like.&lt;/p&gt;&#xA;" OwnerUserId="15720" LastActivityDate="2019-11-29T21:32:23.727" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12923" PostTypeId="2" ParentId="4446" CreationDate="2019-11-29T21:58:18.837" Score="10" Body="&lt;p&gt;The answer by @Raffzahn is close, but it has at least one important detail wrong: the total length of the token names has nothing to do with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following facts all all relate to the issue.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Commodore Basic (any Microsoft Basic really) stores programs in a tokenized form in memory. That means here that all Basic keywords are replaced by a single byte, and other text is stored as &lt;code&gt;PETSCII&lt;/code&gt; (Commodore's variant of ASCII).&lt;/li&gt;&#xA;&lt;li&gt;The token values start at $80 (0x80).&lt;/li&gt;&#xA;&lt;li&gt;In particular on the first PETs, there is a very strong relationship between the PETSCII value of a key and its shifted variant. Pressing shift adds $80. On later models, keyboards have been rearranged, and this connection is much less clear (but the character encoding has not changed).&lt;/li&gt;&#xA;&lt;li&gt;Text that follows the REM statement is just copied into the program, without tokenizing, but also without checking if it is pure text. &lt;/li&gt;&#xA;&lt;li&gt;Normally, bytes of $80 and higher that are meant to be text are only allowed in string denotations. When &lt;code&gt;LIST&lt;/code&gt;ing, strings are treated separately from non-strings.&lt;/li&gt;&#xA;&lt;li&gt;The first version of Basic allowed spaces in keywords while tokenizing. So if you write &lt;code&gt;GO TO 10&lt;/code&gt;, this gets tokenized the same way as &lt;code&gt;GOTO 10&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;This led to problems for instance with the statement &lt;code&gt;IF ST AND 64 THEN&lt;/code&gt;..., which gets tokenized as &lt;code&gt;IF S TAN D 64 THEN&lt;/code&gt;... which is of course a syntax error.&lt;/li&gt;&#xA;&lt;li&gt;The second version did not allow the spaces any more. But apparently it was deemed important that people could still write &lt;code&gt;GO TO 10&lt;/code&gt;, so an extra keyword &lt;code&gt;GO&lt;/code&gt; was added. &lt;code&gt;TO&lt;/code&gt; already existed: &lt;code&gt;FOR I=1 TO 10:&lt;/code&gt;...&lt;/li&gt;&#xA;&lt;li&gt;Now it was discovered that if you used the new &lt;code&gt;GO&lt;/code&gt; keyword on a computer with the &lt;em&gt;newer&lt;/em&gt; Basic and transported it to the &lt;em&gt;older&lt;/em&gt; version, you would get the &lt;code&gt;?SYNTAX ERROR&lt;/code&gt; when listing the program there.&lt;/li&gt;&#xA;&lt;li&gt;The token value of &lt;code&gt;GO&lt;/code&gt; is 203 (75 + 128 or shift-K).&lt;/li&gt;&#xA;&lt;li&gt;The reason was that the &lt;code&gt;GO&lt;/code&gt; token was (there) just 1 past the allowed tokens (for that Basic version).&lt;/li&gt;&#xA;&lt;li&gt;The same problem exists on the &lt;em&gt;new&lt;/em&gt; version, just with a token value 1 higher: 204, aka 76 + 128, aka shift-L.&lt;/li&gt;&#xA;&lt;li&gt;The VIC-20 and the Commodore 64 both use this version, substantially unchanged.&lt;/li&gt;&#xA;&lt;li&gt;This shows that the total length of the token strings being some magic value is NOT the cause of the problem: in the two BASIC variants, this total differs.&lt;/li&gt;&#xA;&lt;li&gt;The problem also exists for an even later version of Basic (BASIC 4.0 with disk management keywords added). Here the problematic value is 219 (91 + 128, or shift-[). Unfortunately, on keyboards of emulators, or the ones supplied with the PET model 8032, this is difficult or impossible to type. But if you enter a program &lt;code&gt;10 REM X&lt;/code&gt; and then &lt;code&gt;POKE 1031,219&lt;/code&gt; (which overwrites the &lt;code&gt;X&lt;/code&gt;, if you didn't add anything extra), you can see the effect.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So what &lt;em&gt;does&lt;/em&gt; cause the problem?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The full text of the tokens is stored sequentially, in numeric order. The last letter of each token has $80 added to it.&lt;/li&gt;&#xA;&lt;li&gt;The table is terminated by a 00 byte, so the tokenizer can recognize the end when tokenizing. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here is the code from &lt;code&gt;LIST&lt;/code&gt; in the Basic ROM which prints out a token (Commodore 64 version): (source: &lt;a href=&quot;https://www.pagetable.com/c64disasm/#A724&quot; rel=&quot;noreferrer&quot;&gt;https://www.pagetable.com/c64disasm/#A724&lt;/a&gt; comments from Lee Davison)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea here is to start with a pointer (the Y index register) to the beginning of the token table.&#xA;Subtract $7F from the token, which leaves the lowest value now at 1 (not 0).&#xA;Decrement the token number (X register). If now 0, Y points to the correct token now, and skip ahead to print it.&#xA;Else, skip until past the next byte with the $80 bit set and go back.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.,A724 38       SEC            else set carry for subtract &#xA;.,A725 E9 7F    SBC #$7F       reduce token range to 1 to whatever &#xA;.,A727 AA       TAX            copy token # to X &#xA;.,A728 84 49    STY $49        save index for line &#xA;.,A72A A0 FF    LDY #$FF       start from -1, adjust for pre increment &#xA;.,A72C CA       DEX            decrement token # &#xA;.,A72D F0 08    BEQ $A737      if now found go do printing &#xA;.,A72F C8       INY            else increment index &#xA;.,A730 B9 9E A0 LDA $A09E,Y    get byte from keyword table &#xA;.,A733 10 FA    BPL $A72F      loop until keyword end marker &#xA;.,A735 30 F5    BMI $A72C      go test if this is required keyword, branch always found keyword, it's the next one&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So what happens with our 1-too-high token?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, our token pointer Y will have skipped past the last valid token text (and Y points at the terminator 00 byte). When decrementing the token number in X we end up at 00, which must mean we're at the right token text, so we decide to print this text. See &lt;code&gt;A737&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note how the &lt;code&gt;BNE $A737&lt;/code&gt; is marked &quot;branch always&quot;. However, with our $00 byte that we just printed, this doesn't actually happen. The &quot;print character&quot; routine at $AB47 helpfully restores the status flags for the just-printed character.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                               print keyword&#xA;&#xA;.,A737 C8       INY            increment keyword table index &#xA;.,A738 B9 9E A0 LDA $A09E,Y    get byte from table &#xA;.,A73B 30 B2    BMI $A6EF      go restore index, mask byte and print if byte was end marker &#xA;.,A73D 20 47 AB JSR $AB47      else go print the character&#xA;.,A740 D0 F5    BNE $A737      go get next character, branch always&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So as a result, we fall into the interpreter routine for the FOR keyword. It will try to fetch bytes from the program and interpret them as following a FOR keyword. However, what it gets isn't valid (the relevant pointer is pointing just past the LIST command we just issued), and hence: &quot;?SYNTAX ERROR&quot;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                               perform FOR&#xA;&#xA;.,A742 A9 80    LDA #$80       set FNX&#xA;.,A744 85 10    STA $10        set subscript/FNX flag&#xA;.,A746 20 A5 A9 JSR $A9A5      perform LET&#xA;.,A749 20 8A A3 JSR $A38A      search the stack for FOR or GOSUB activity&#xA;.,A74C D0 05    BNE $A753      branch if FOR, this variable, not found&#xA;                               FOR, this variable, was found so first we dump the old one&#xA;.,A74E 8A       TXA&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is the print character routine, shown because it explicitly restores the Zero flag.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                               print character&#xA;&#xA;.,AB47 20 0C E1 JSR $E10C      output character to channel with error check&#xA;.,AB4A 29 FF    AND #$FF       set the flags on A&#xA;.,AB4C 60       RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7059" LastActivityDate="2019-11-29T21:58:18.837" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12924" PostTypeId="2" ParentId="12151" CreationDate="2019-11-30T01:16:20.753" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://www.forum64.de/index.php?thread/6414-vic-8656r2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Other people&lt;/a&gt; have observed this chip in the wild, and it seems like the consensus is that these chips are from a mislabelled 8565 production run, where the stamping text has accidentally swapped the 5 and 6 digit occurances.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastActivityDate="2019-11-30T01:16:20.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12925" PostTypeId="2" ParentId="12917" CreationDate="2019-11-30T11:01:52.703" Score="6" Body="&lt;p&gt;RAM and ROM are reachable by the CPU for execution, so most consoles can execute code from RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The consoles using cartridges usually don't have a lot of RAM, so I think it's VERY rare if someone uses the small RAM used for data to store code just to perform self-modifying code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On computers on the other hand it happened all the time, just because&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;it's sometimes easier than creating a table&lt;/li&gt;&#xA;&lt;li&gt;it saves cycles and an indirection.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A CD console like the Amiga CD32 is a console but cannot run the code from CD obviously, so it &lt;em&gt;has&lt;/em&gt; to load it into its 2MB RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same can be said for the Commodore CDTV, an earlier version, less powerful, which inherited a lot of Amiga games too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since those 2 consoles inherited a lot of Amiga games with very little adaptation, and some amiga games use self-modifying code, you can say that those consoles can use self-modifying code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CD32 console can also run CDTV titles. The fact that the processor is a 680EC20 could cause issues, so when detecting a CDTV title, the CD32 console turns the caches off, to handle CPU-dependent issues such as CPU-busy loops and cache issues (i.e. self-modifying code).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's difficult to find an example of a real game that used self-modifying code on an official CD32 game but I found one: &lt;a href=&quot;http://hol.abime.net/1635&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zool CD32&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disassembling the executable, we found several occurrences of this instruction in the code, (setting a label plus 2 is fishy enough and often a sign of self-modifying code):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MOVE.L  #LAB_0411,LAB_0404+2    ;00cefe: 23fc0000b2fa0000abd6&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;now at &lt;code&gt;LAB_0404&lt;/code&gt; we find:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LAB_0404:&#xA;    JSR LAB_0868        ;00abd4: 4eb90001538c&#xA;    CLR.L   LAB_002F+2      ;00abda: 42b9000004ea&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So the code changes the jump address depending on the situation (without flushing the caches afterwards). The 68020 instruction cache isn't big enough for this to be a (visible) issue.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Another completely unrelated example is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pengo_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pengo&lt;/a&gt; arcade video game. I reverse engineered the set 1 back in 2010 quite extensively, and browsing my notes I came across this piece of Z80 code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;; install a modifiable routine in $8C24 (self-modifying code used&#xA;;; for maze path drawing)&#xA;&#xA;2DB6: 06 85         ld   b,$0D&#xA;2DB8: 11 11 2E      ld   de,$2E39&#xA;2DBB: 21 24 8C      ld   hl,$8C24&#xA;2DBE: 1A            ld   a,(de)&#xA;2DBF: 77            ld   (hl),a&#xA;2DC0: 13            inc  de&#xA;2DC1: 23            inc  hl&#xA;2DC2: 10 7A         djnz $2DBE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As we can see, the game installs some code into &lt;code&gt;$8C24&lt;/code&gt; which is in RAM (as opposed to the lower half like the above code which is in ROM). The code is installed in RAM so self-modifying code will work (this is a maze drawing algorithm, something quite complex to code in Z80 so if they had something working which used self-modifying code, so be it, they're going to use it)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Part of the code using this small smc routine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ;; those routines below use a self-modifying code technique to&#xA;    ;; change opcode and op value (bit &amp;amp; res and value)&#xA;    ;; 30CA tests if way is clear&#xA;    ;; 30D2 clears bits to mark that way is clear&#xA;    ;;&#xA;    ;; this kind of technique is used in tree scan recursive algorithms&#xA;&#xA;    ;; returns z if way is clear, nz if not&#xA;is_way_clear_30CA&#xA;    : 16 CE         ld   d,$46  ; z80 operand mask&#xA;30CC: 18 8E         jr   $30D4&#xA;    ;; 30CE is not used&#xA;30CE: 16 EE         ld   d,$C6  ; z80 operand mask&#xA;30D0: 18 8A         jr   $30D4&#xA;&#xA;set_way_clear_30D2&#xA;     16 86         ld   d,$86   ; z80 operand mask&#xA;30D4: 21 AF 8C      ld   hl,maze_hole_wall_bit_table_8C27&#xA;30D7: 79            ld   a,c&#xA;30D8: 2F            cpl&#xA;30D9: E6 07         and  $07&#xA;30DB: 07            rlca&#xA;30DC: 07            rlca&#xA;30DD: 07            rlca&#xA;30DE: B2            or   d&#xA;30DF: 32 0D A4      ld   ($8C25),a ; change operand of the bit/res opcode&#xA;30E2: 16 88         ld   d,$00&#xA;30E4: 58            ld   e,b&#xA;30E5: 19            add  hl,de&#xA;30E6: C3 0C A4      jp   $8C24  ; calls self-modifying code bit/res test routine!!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-01-05T22:45:07.267" LastActivityDate="2020-01-05T22:45:07.267" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12926" PostTypeId="2" ParentId="11917" CreationDate="2019-11-30T15:24:22.080" Score="1" Body="&lt;p&gt;The Wikipedia page on PETSCII is unfortunately very wrong. I advise you to have a look at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Talk:PETSCII&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;talk&quot; page&lt;/a&gt;. For reference I'm copying my own contribution there with some elaborations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of &quot;shifted&quot; and &quot;unshifted&quot;, the two text modes were commonly called &quot;lowercase&quot; (or sometimes &quot;business&quot;) and &quot;graphics&quot; mode. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the shift key sets the high bits in the character, the way the wikipedia article mentions the repeating characters is the wrong way around. Normal characters are 0x20-0x5F (as in old-style ASCII with only uppercase letters) and with shift they range 0xA0-0xDF. It is the others who were repeats. The reason for the repeats is that the PETSCII characters all map to 128 different &quot;screen codes&quot; (in the video memory) and they don't map 1-to-1, but the conversion code didn't care about that. In screen codes, the high bit is used for reverse video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On &lt;a href=&quot;https://www.nightfallcrew.com/wp-content/gallery/commodore-pet-2001-8c-chicklet-keyboard-mos-6550-ram-version/commodore_pet_2001_chiclet_keyboard.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this image&lt;/a&gt; you can nicely see how each shifted character relates to its unshifted one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the keyboards after this, there were fewer keys, so the nice regular mapping of the shift key to the high bit was partially lost. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;About screen code values: In BASIC programs, and for file I/O, PETSCII values are used which as mentioned above are derived from an older ASCII version that only contains upper case letters, and has an up-arrow instead of &lt;code&gt;^&lt;/code&gt;, and a left-arrow instead of the underscore. So printable characters start at value 32. But in the character cell screen memory, it would be wasteful to not use the first 32 values. So the first screen code, 0, is used for the @ character (so screen codes 0-31 correspond to PETSCII 64-91, then screen codes 32-63 correspond to PETSCII 32-63, then the following 64 screen codes are the shifted variants of the first 64, and finally everything is repeated in inverse video)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make things more confusing, in the very first PET model the screen codes for upper and lower case letters were swapped (compared to later versions, including the Commodore 64). So if you switched to lower case mode, your upper case letters remained on screen as they were, and to get lower case letters you had to press shift. Presumably because that was inconvenient, the character generator rom was rearranged, and that meant that when you changed into lower case mode, your existing on-screen uppercase letters became lower case (and some graphics became upper case letters), as it is known also on the 64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going from PET to VIC-20 and 64, the backslash was changed into a pound symbol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to get to your questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If an assembler program contains something like &lt;code&gt;CMP #'m'&lt;/code&gt;, what most assemblers would do is simply lift the given character code from the source and use that value. Since generally the program is written in PETSCII this would result in a PETSCII encoding&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Many programs would likely use screen coding, but it would depend on how they show text to the user. If it stores the bytes directly into screen memory, it would need to use screen codes. Machine language programs would often fall into this category. But if the author preferred to use the ROM file I/O functions, they would use PETSCII. It would be slower, but easier since you don't need to take cursor positions and movement into account. BASIC programs would do this a lot (but for instance games which don't want to bother with moving the cursor around to have random access to screen positions would often include some &lt;code&gt;POKE&lt;/code&gt;ing to screen memory as well).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Most programs would in my expectation not use &quot;regular ASCII&quot;, unless they would try to be compatible with the outside world. Say a terminal program such as Kermit. But since PETSCII includes the &quot;uppercase only&quot; parts of ASCII, a limited compatibility exist anyway.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7059" LastEditorUserId="7059" LastEditDate="2019-11-30T15:29:39.320" LastActivityDate="2019-11-30T15:29:39.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12927" PostTypeId="2" ParentId="12917" CreationDate="2019-11-30T17:12:27.073" Score="2" Body="&lt;p&gt;(This is slightly off-topic, but related.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 65816 CPU has a pair of block move instructions, &lt;code&gt;MVN&lt;/code&gt; and &lt;code&gt;MVP&lt;/code&gt;, which allow you to copy up to 64KiB from one 24-bit address to another.  The instructions work like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ldx #{16-bit source address}&#xA;ldy #{16-bit destination address}&#xA;lda #{16-bit count - 1}&#xA;mvn src_bank, dest_bank&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(The &quot;bank&quot; is the high 8 bits of the 24-bit address.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tricky part is the instruction itself, because part of the address is embedded in it.  If you happen to know the bank addresses at assembly time (e.g. you know source and destination are both in bank 0) you're fine, but in the general case you're &lt;em&gt;required&lt;/em&gt; to use self-modifying code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to use these instructions from ROM code, you have to set up a move instruction somewhere in RAM and call it.  If your code is reentrant (due to interrupts) you can't simply use a fixed location.  IIRC the Apple IIgs ROM pushed the instruction onto the stack and called it there.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2019-11-30T17:12:27.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12928" PostTypeId="1" CreationDate="2019-11-30T21:04:44.520" Score="5" ViewCount="186" Body="&lt;p&gt;I remember reading (probably in some issue of the newsletter of the PET Benelux Exchange (PBE)) about a strange effect during tape loading of a PET program. Back in the day, I tried it and it worked. I do not recall if it occurred with &quot;old ROMs&quot; (&lt;code&gt;*** COMMODORE BASIC ***&lt;/code&gt;) or &quot;new ROMs&quot; (&lt;code&gt;### COMMODORE BASIC ###&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing was that if you would &lt;code&gt;LOAD&lt;/code&gt; a program from tape, and while it was searching for a program header, simultaneously kept the &lt;code&gt;&amp;lt;&lt;/code&gt; key down, it would slowly print &lt;code&gt;&amp;lt;&lt;/code&gt; characters to the screen if it found &quot;something&quot; on the tape. You could use this to check if you're on an empty part of tape or not, and decide if you needed to fast-forward (or rewind).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried to reproduce the behaviour in VICE (xpet), but as I expected, although the emulation is pretty good, it didn't manage to reproduce this one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One practical difference in emulation is that to press the &lt;code&gt;&amp;lt;&lt;/code&gt; key on an emulator you need to press &lt;code&gt;shift&lt;/code&gt; as well. To make the emulation closer to reality, I made a special keymap where I swapped &lt;code&gt;,&lt;/code&gt; and &lt;code&gt;&amp;lt;&lt;/code&gt; so that I could depress &lt;code&gt;&amp;lt;&lt;/code&gt; without shift, but this made no difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometime, I did have an effect (with the &quot;old ROMs&quot; only): on occasion there seemed to be memory corruption somewhere, soon followed by a crash.&#xA;Also, after loading was complete, you would expect a single &lt;code&gt;&amp;lt;&lt;/code&gt; to be printed after the &lt;code&gt;READY.&lt;/code&gt; prompt (due to pressing a key, once). But fairly reliably there would be two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PET's keyboard matrix has the &lt;code&gt;STOP&lt;/code&gt;, &lt;code&gt;&amp;lt;&lt;/code&gt; and &lt;code&gt;RVS&lt;/code&gt; keys all on the same scan row. This fact is used to test, during the periodic screen retrace interrupt, for the &lt;code&gt;STOP&lt;/code&gt; and &lt;code&gt;RVS&lt;/code&gt; keys, to respectively interrupt a program, or slow down text scrolling. Since &lt;code&gt;&amp;lt;&lt;/code&gt; is present on the same row and therefore can be detected in the same way, there is some plausibility that something &quot;strange&quot; happens during these checks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What caused this effect?&lt;/p&gt;&#xA;" OwnerUserId="7059" LastActivityDate="2019-11-30T21:04:44.520" Title="PET LOAD command and the &lt; key" Tags="&lt;cassette-tape&gt;&lt;commodore-pet&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12929" PostTypeId="2" ParentId="12909" CreationDate="2019-11-30T23:21:56.773" Score="6" Body="&lt;p&gt;The Jacquard loom predates the computer by a long time. As such, the distinction is a bit like asking whether or not a horse runs on diesel or petrol; whatever distinction you're trying to make by applying terminology from a different technology isn't likely to be useful or meaningful. The distinction between code and data is mostly a relic of Von Neumann architecture's separation between instruction and data memories, which doesn't even apply to the majority of computers, let alone anything which is not a computer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you choose define code as data which contains instructions for a computer, well it's no more code than a recipe is, as there is no computer; if you define code as data which has instructions for a machine of any type, then it is is code, and so are lots of things. Only thing which has changed is where you draw the line between computers and automatic machinery, which has nothing to do with data in the punched cards themselves. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not a distinction that any of the inventors of the Jacquard loom would have any use for; but if you find it a useful analogy then call it code, if you don't, then don't. &lt;/p&gt;&#xA;" OwnerUserId="5445" LastActivityDate="2019-11-30T23:21:56.773" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12930" PostTypeId="1" CreationDate="2019-12-01T11:05:38.703" Score="-5" ViewCount="242" Body="&lt;p&gt;I'm asking in Retrocomputing because the Caviar line of HDDs was released in the most recent era of retrocomputing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know why they named the line &quot;Caviar&quot;? Why do they associate Sturgeons eggs with reliable data storage? &lt;/p&gt;&#xA;" OwnerUserId="4331" LastActivityDate="2019-12-01T11:17:52.747" Title="Why did Western Digital name their drives &quot;Caviar&quot;?" Tags="&lt;hardware&gt;&lt;storage&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2019-12-02T08:34:17.293" ContentLicense="CC BY-SA 4.0" />
  <row Id="12931" PostTypeId="2" ParentId="12930" CreationDate="2019-12-01T11:17:52.747" Score="6" Body="&lt;p&gt;Caviar, as a word, is associated directly with luxury.  That's most likely what the marketing focus group were thinking when they put it forward as a possibility.  Most likely only one possibility of several, which were then selected by C-level executives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Relatively few people know what the eggs actually taste like.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-12-01T11:17:52.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12932" PostTypeId="2" ParentId="12892" CreationDate="2019-12-01T11:29:40.530" Score="0" Body="&lt;p&gt;Well, I tried the methods recommended. I cleaned it with some Isopropanol. The corrosion isn't gone but I guess it's better.&lt;/p&gt;&#xA;" OwnerUserId="15691" LastActivityDate="2019-12-01T11:29:40.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12933" PostTypeId="2" ParentId="12892" CreationDate="2019-12-01T14:07:54.167" Score="0" Body="&lt;p&gt;Perhaps a &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B003NHDITW&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;scratch pen&lt;/a&gt; ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've successfully used one of these for cleaning contacts inside a camera, where the corrosion has been due to leaving alkaline batteries in until they leak.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-12-01T14:07:54.167" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12934" PostTypeId="2" ParentId="12892" CreationDate="2019-12-01T16:58:15.133" Score="1" Body="&lt;p&gt;You need a &lt;a href=&quot;https://en.wikipedia.org/wiki/Contact_cleaner&quot; rel=&quot;nofollow noreferrer&quot;&gt;contact cleaner&lt;/a&gt;. Wikipedia does mention isopropyl alcohol as being one, but I've found that the industrial products designed specifically for contact cleaning do a much better job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I currently use &lt;a href=&quot;https://www.amazon.co.jp/dp/B001D2CVD8/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kure Contact Spray&lt;/a&gt;; a quick spraw of it causes oxidation to visibly vanish. This exact product doesn't appear to be available outside Japan, but the label has the trademarked &quot;CRC&quot; logo on it, so it's probably the same as or similar to &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B000BXOGNI&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;CRC QD Electronic Cleaner&lt;/a&gt; or another CRC product. There are many products designed for cleaning electronic and electrical contacts; just search for &quot;contact cleaner&quot; on your favourite shopping site.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that some vendors offer different products for removing corrosion and protecting against corrosion. Back in the 80s I used Cramolin Red to clean contacts on audio equipment; there was also a Cramolin Blue for protecting contacts once they were clean. These are no longer manufactured, but &lt;a href=&quot;https://caig.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Caig&lt;/a&gt;, which I believe was their manufacturer, suggests that &lt;a href=&quot;http://store.caig.com/core/media/media.nl?id=808&amp;amp;c=ACCT113328&amp;amp;h=3f8d8512c835e9a69f64&quot; rel=&quot;nofollow noreferrer&quot;&gt;DeoxIT D100L and PreservIT P100L are their replacements&lt;/a&gt;. There's also a &lt;a href=&quot;https://www.siber-sonic.com/electronics/caig.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;discussion from a user&lt;/a&gt; on the history of these and which product should be used for what.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-12-01T16:58:15.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12936" PostTypeId="2" ParentId="12909" CreationDate="2019-12-02T13:40:02.223" Score="2" Body="&lt;p&gt;Program code is a specific type of data.&#xA;So the question is really: &lt;strong&gt;What is it that distinguishes code data from other forms of data?&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Non-code data is a representation of state.&lt;/li&gt;&#xA;&lt;li&gt;Code data is a representation of a process for manipulating data.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Data states remain stable until they are acted upon over time according to the instructions in the code data.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Consider a simple spread-sheet:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Most cells contain data (usually numbers).&lt;/li&gt;&#xA;&lt;li&gt;Some cells contain &quot;=Formula&quot;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The formulas are code that tells the spread-sheet software how to manipulate the data.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Consider a web page:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The HTML is data.&lt;/li&gt;&#xA;&lt;li&gt;The JavaScript is code that can manipulate that data.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Consider a bash interpreter:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The command lines are data as far as the interpreter is concerned.&lt;/li&gt;&#xA;&lt;li&gt;The interpreter is code that manipulates the data.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;And&lt;/em&gt; the the command lines are &lt;em&gt;also&lt;/em&gt; code, as they are instructions for manipulating other data.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;With a loom:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The positions of the various parts (shuttles, lifters, bobbins, etc.) are the data.&lt;/li&gt;&#xA;&lt;li&gt;The cards are the code.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The cards contain instructions for how the parts should be manipulated (how to change the state of the data).&lt;/p&gt;&#xA;" OwnerUserId="15689" LastActivityDate="2019-12-02T13:40:02.223" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12937" PostTypeId="2" ParentId="12920" CreationDate="2019-12-02T13:49:49.067" Score="1" Body="&lt;p&gt;Realistically, no analog color monitor can output a single color, except maybe it's black level.  There is always some noise in the system (tv's don't work at absolute zero).  And this electronic noise sent to the 3 or so CRT emitters will cause the color to vary.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, even with a 5e6 turn resistor pot on the IQ voltages:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, the amount of different colors has to be larger than some fraction of this variational noise floor in color, or else no one will detect it above the color noise floor in any finite amount of time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This limit is probably well below human perceptual levels.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2019-12-02T13:55:08.867" LastActivityDate="2019-12-02T13:55:08.867" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12940" PostTypeId="1" CreationDate="2019-12-03T04:34:08.450" Score="11" ViewCount="775" Body="&lt;p&gt;Obviously, given age, doesn't have to be as secure and fancy and the modern builds, but is there there a git build for Windows 9x, &lt;a href=&quot;https://superuser.com/questions/1153883/git-for-windows-xp&quot;&gt;just like there is for Windows XP&lt;/a&gt;? Also wondering whether there is a Linux/GNU-like set of utilities compatible with Windows 9x, such as &lt;code&gt;sort&lt;/code&gt; or &lt;code&gt;tail&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="15407" LastEditorUserId="129" LastEditDate="2020-02-11T11:24:12.820" LastActivityDate="2020-02-11T11:24:12.820" Title="Is there a prebuilt git binary available for Windows 9x?" Tags="&lt;windows-98&gt;&lt;windows-95&gt;&lt;windows-me&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="3" ClosedDate="2020-02-10T16:22:55.970" ContentLicense="CC BY-SA 4.0" />
  <row Id="12941" PostTypeId="2" ParentId="12940" CreationDate="2019-12-03T12:54:47.510" Score="16" Body="&lt;p&gt;Install Cygwin using &lt;code&gt;setup-legacy.exe&lt;/code&gt; from &lt;a href=&quot;http://www.crouchingtigerhiddenfruitbat.org/cygwin/timemachine.html&quot; rel=&quot;noreferrer&quot;&gt;the Cygwin Time Machine&lt;/a&gt;, pointing it at the &lt;a href=&quot;http://ctm.crouchingtigerhiddenfruitbat.org/pub/cygwin/circa-legacy/index.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;cygwin-legacy&lt;/code&gt;&lt;/a&gt; URL, which  pins the package versions to the last set released for Cygwin 1.5, the &lt;a href=&quot;https://www.osnews.com/story/22653/cygwin-17-released/&quot; rel=&quot;noreferrer&quot;&gt;last release for Windows 9&lt;i&gt;x&lt;/i&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Cygwin Time Machine serves frozen-in-place versions of Cygwin, so it will work as well today as it did back then, which was pretty good, actually. There are many good reasons why Cygwin steamrolled all of the other Unix-on-Windows efforts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Beware: The Cygwin Time Machine service is a single person's hobby, so do not expect high speed file service, quick response to support questions, etc. Be patient with it.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the many packages available for Cygwin 1.5 is Git 1.6, which &lt;em&gt;may&lt;/em&gt; be new enough to work with your current repos. You get everything else you ask for in your question, too: &lt;code&gt;sort&lt;/code&gt;, &lt;code&gt;tail&lt;/code&gt;, etc. Basically, Cygwin is the command-line userland of a Linux environment contemporaneous with its release.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I say it &lt;em&gt;may&lt;/em&gt; work because software that old often won't talk directly to modern systems, especially where cryptography is involved, which means using Git over HTTPS or SSH may not work if the remote system is sufficiently tightened down. What ends up happening is that the cryptosystems that were current at the time that software was last maintained are no longer in use, so that your old system cannot negotiate a mutually acceptable ciphersuite with the remote system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have many options for coping with this problem:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;1. Unencrypted Access&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Use Git over HTTP rather than HTTPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem with this option is that HTTP access is getting hard to come by as modern security practice is to automatically forward all HTTP hits to HTTPS, providing no actual service over HTTP.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;2. Proxy HTTPS or SSH&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There are a couple of variations on this option:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Many web servers can be set up to do HTTP proxying, and some of these can speak HTTPS outbound. Thus, you could point Git on Win9x at the HTTP side of that proxy, and it would speak to your remote Git repo over HTTPS by configuration.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;SSH allows port forwarding, so you could use a modern system to SSH into the remote system and use that to expose a tunnel to the Win9x box that it could use to securely access the remote repo.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The details of setting such things up are well beyond the scope of this answer.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;3. Backport a Newer Version of Git&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Download the source code for a modern version of Git and whatever dependencies it has, then use the Cygwin toolchain to build up a current environment atop the old substrate. This will be roughly as difficult as backporting Git to a 10-year-old version of Linux: doable, but not trivial.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;4. Double Clone&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Git is a distributed version control system. This means you can clone from a clone, and you can push changes up through another clone to a third system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, you could use a modern system to clone from a remote repo that will only talk to the modern system then expose that intermediate repo to the Win9x box over a less secure channel that the old version of Git will talk to. (SMB, local HTTP-only proxy, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The modern system could be another computer on the same LAN, with an IP matching rule that allows only the Win9x box to talk to it over the insecure channel, thus maintaining a reasonable overall level of security.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pushes to the intermediate repo work the same way: Win9x to the modern system, and the modern system up to the secure remote system.&lt;/p&gt;&#xA;" OwnerUserId="11024" LastEditorUserId="11024" LastEditDate="2020-02-09T13:15:27.113" LastActivityDate="2020-02-09T13:15:27.113" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12942" PostTypeId="1" AcceptedAnswerId="12943" CreationDate="2019-12-03T15:50:46.940" Score="32" ViewCount="11437" Body="&lt;p&gt;I am experimenting with a graphics pen and tablet and it got me thinking about the difference between it and my mouse.  One huge difference is that the tablet's working area covers the whole screen, so that you can tap on an absolute position.  My mouse always outputs relative x/y from its last position.  This is obviously a huge benefit because it does not restrict the mouse to one part of your desk.  I am wondering if this was how the original mice/trackballs/whatevers did, or were they absolute position?&lt;/p&gt;&#xA;" OwnerUserId="4407" LastActivityDate="2019-12-06T15:28:17.990" Title="Did the computer mouse always output relative x/y and not absolute?" Tags="&lt;mouse&gt;" AnswerCount="7" CommentCount="13" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12943" PostTypeId="2" ParentId="12942" CreationDate="2019-12-03T16:01:09.160" Score="58" Body="&lt;p&gt;&lt;a href=&quot;https://www.dougengelbart.org/content/view/145/000/&quot; rel=&quot;noreferrer&quot;&gt;The first mouse&lt;/a&gt; tracked relative motion along two axes, and as far as I know all standalone mice produced since have followed suit. It would be difficult to build and use a mouse relying on absolute positioning: it would have to track its movement very accurately, with no slippage, or else allow for regular recalibration; as you mention, it would only be usable in a specific area; and it wouldn’t support varying sensitivity (&lt;em&gt;i.e.&lt;/em&gt; slow movement being translated at higher resolutions than fast movement).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even early optical mice, which used specific mouse mats (as used for example on Sun workstations), didn’t track their position on the mat itself, only their relative movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are mouse-like devices which produce absolute coordinates: &lt;a href=&quot;https://en.wikipedia.org/wiki/Graphics_tablet#Pucks&quot; rel=&quot;noreferrer&quot;&gt;pucks on graphical digitisers&lt;/a&gt;. These are used on large tablets, and are not practical replacements for mice in most cases.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2019-12-03T16:01:09.160" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="12945" PostTypeId="2" ParentId="12942" CreationDate="2019-12-03T16:27:09.463" Score="10" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I am experimenting with a graphics pen and tablet and it got me thinking about the difference between it and my mouse. One huge difference is that the tablet's working area covers the whole screen,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, that's scaling of your software. The tablet has its own coordinate set, which gets adjusted to your document and/or screen. Usually by the drawing application using it in absolute mode. For screen the driver may be configured to do it, or offer it as relative to fit usual mouse handling.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;so that you can tap on an absolute position.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Jo. After all, with a tablet, the detection is not done by the moving device, but the fixed surface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's imperative for drawing tablets to work absolute, as for one there's no detected movement when the pen is (way) up. Only absolute detection will work to catch it when going down again. But more importantly, with a mouse a user usually 'homes in' to a target - meaning the movement is controlled via an optic feedback on the screen - while with a tablet the user expects to hit the point like with a pen on paper. No matter how much movement has happened in between. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;My mouse always outputs relative x/y from its last position.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In general, without a fixed reference can only detect relative movement. Even a 'simple' device like an odometer only adds up data delivered as relative. And like everything working relative, it adds up errors. Thus relative recording isn't a great idea with tablets anyway, as the user assumes the device to read the exact spot he targets.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This is obviously a huge benefit because it does not restrict the mouse to one part of your desk.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The same can be done for tablets by scaling and panning. Take touch pads for example, here a cursor can be moved several times in one direction by repeated moves. Despite the fact that it delivers absolute coordinates. Similar is done for drawing tablets.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I am wondering if this was how the original mice/trackballs/whatevers did, or were they absolute position?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Always relative. Anything else would be incredibly complex and end up in a system resembling a drawing tablet. There have been combinations that looked like a mouse, but had to be used on a tablet (or with a fitting tablet like sensor setup), but they were incredibly expensive while combining disadvantages of mice and tablets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a generic, not very exact input device, relative is the way to go. Even more when the task is about relative positioning anyway.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4921" LastEditDate="2019-12-04T01:47:05.807" LastActivityDate="2019-12-04T01:47:05.807" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12946" PostTypeId="1" AcceptedAnswerId="12947" CreationDate="2019-12-03T21:33:08.330" Score="13" ViewCount="3928" Body="&lt;p&gt;I'd like to setup a Windows 98 SE system that boots into the included MS-DOS 7.1 command line, and which can also run Windows 3.11. I've seen various disjointed posts online that suggest this is possible without using multiple boot partitions, and that all 3 OS's will support a large FAT32 partition and Long Filenames (LFN).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is indeed supported, what would be the rough order of steps to get it working?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, I want to use a boot menu to choose the environment, including dumping me into &quot;vanilla&quot; MS-DOS with the memory manager of my choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: I'm doing this because I want the convenience of a single &lt;strong&gt;large&lt;/strong&gt; drive/partition that can run most of the software from the 1990s for DOS, Win3, and Win9x. And I'm hoping DOS 7.1 is also backwards compatible enough to run some 1980s software too. &lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-12-07T12:46:08.920" Title="Running DOS, Windows 3, and Windows 98 from one FAT32 partition?" Tags="&lt;ms-dos&gt;&lt;windows-98&gt;&lt;windows-3.x&gt;&lt;windows&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12947" PostTypeId="2" ParentId="12946" CreationDate="2019-12-03T22:10:17.780" Score="21" Body="&lt;p&gt;The first part isn’t too difficult: install Windows 98 as usual, then edit &lt;a href=&quot;http://www.mdgx.com/msdos.htm&quot; rel=&quot;noreferrer&quot;&gt;MSDOS.SYS&lt;/a&gt; to change its &lt;code&gt;BootGUI&lt;/code&gt; setting to 0. This will disable the automatic GUI startup, and the computer will boot to a &lt;code&gt;COMMAND.COM&lt;/code&gt; prompt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can install Windows 3.11 in a different directory than Windows 98. Before you can, you’ll need to &lt;a href=&quot;https://www.vogons.org/viewtopic.php?t=31922&quot; rel=&quot;noreferrer&quot;&gt;patch &lt;code&gt;IO.SYS&lt;/code&gt;&lt;/a&gt; using Ralf Buschmann’s Win3xStart program (in &lt;code&gt;osr2fix.exe&lt;/code&gt;). Once that’s done, Windows 3’s &lt;code&gt;SETUP&lt;/code&gt; will work; choose “user defined setup” so that you can specify what directory to use, and make sure you don’t let the installation program make any changes to &lt;code&gt;CONFIG.SYS&lt;/code&gt; and &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt;. After installation, you should also patch &lt;code&gt;WIN386.EXE&lt;/code&gt; (see the previous link) to avoid issues after exiting Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 3.11 doesn’t support FAT32 directly, so some of its features won’t be enabled (32-bit file access in Windows for Workgroups 3.11 for example), and it can produce confusing results with large partitions. Some third-party installers will refuse to install on disks where the available space is “too large”. Windows 3 also doesn’t support long file names; you can however use &lt;a href=&quot;http://adoxa.altervista.org/doslfn/&quot; rel=&quot;noreferrer&quot;&gt;DOSLFN&lt;/a&gt; and &lt;a href=&quot;https://web.archive.org/web/20090729180519/http://geocities.com/alexanrsousa/calmira.html&quot; rel=&quot;noreferrer&quot;&gt;Calmira LFN&lt;/a&gt; to get some level of support for long file names. 32-bit disk access will only work if you use Windows 3’s version of &lt;code&gt;IFSHLP.SYS&lt;/code&gt;. Windows 98 also no longer supports &lt;code&gt;SHARE.EXE&lt;/code&gt;, but its DOS kernel is apparently incompatible with Windows 3’s &lt;code&gt;VSHARE.386&lt;/code&gt;, so programs which need the corresponding features will fail to run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6803/79&quot;&gt;&lt;code&gt;CONFIG.SYS&lt;/code&gt; menu system&lt;/a&gt; is still available under Windows 98, so you can use that to build your boot menu.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In situations where you don’t need FAT32, Windows 98 also supports dual-booting with MS-DOS 6 in the same partition, as long as you install the latter first, and choose the option to back up your previous operating system during the Windows 98 installation. See &lt;a href=&quot;http://www.mdgx.com/osr2.htm#2BOOT&quot; rel=&quot;noreferrer&quot;&gt;this guide&lt;/a&gt; for details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the vast majority of Windows 3 programs will work fine under Windows 98, so you might find it simpler to use that instead, as explained in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12949/79&quot;&gt;Ross’ answer&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/722/ross-ridge&quot;&gt;Ross Ridge&lt;/a&gt; for the pointer to &lt;a href=&quot;https://www.vogons.org/viewtopic.php?t=31922&quot; rel=&quot;noreferrer&quot;&gt;this Vogons thread&lt;/a&gt; on the subject!&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-12-04T15:11:05.840" LastActivityDate="2019-12-04T15:11:05.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12948" PostTypeId="2" ParentId="12942" CreationDate="2019-12-04T01:48:57.470" Score="28" Body="&lt;p&gt;It was by no means a mass market device, but Hayward and Ramstein's &lt;a href=&quot;https://www.microsoft.com/buxtoncollection/detail.aspx?id=67&quot; rel=&quot;noreferrer&quot;&gt;Pantograph&lt;/a&gt; (1993) encoded linkage positions as absolute coordinates. It also provided force feedback, and could ‘drive’ itself based on screen content&lt;a href=&quot;https://i.stack.imgur.com/azyaa.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/azyaa.png&quot; alt=&quot;Pantograph&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-12-04T01:48:57.470" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="12949" PostTypeId="2" ParentId="12946" CreationDate="2019-12-04T01:49:25.220" Score="30" Body="&lt;p&gt;I'm going to post a frame challenge answer and say that if your goal is to run MS-DOS and Windows software from the early 90s and before then you don't want to do what you propose.  Instead you're better off just installing Windows 98 SE and booting (or rebooting) into MS-DOS mode for the few applications that need it.  In particular trying to force Windows (for Workgroups) 3.11 to work under MS-DOS 7.1 requires various hacks and will likely result in something that's less compatible with applications. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsoft has always taken backwards compatibility very seriously (even today, the 32-bit version of Windows 10 will run many old 16-bit Windows applications), and Windows 98 wasn't an exception.  It's predecessor, Windows 95 wasn't the revolutionary new operating system that it superficially appears to be.  It was just an evolution of Windows 3.11, with a lot of new features but also with a lot of the same code.  The most likely reason for an old Windows applications not to work is because of new hardware.  Things like drives being bigger than the software assumed possible, or the CPU being 10 or 100 times faster. Problems that your proposed setup wouldn't fix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For old 16-bit Windows software written for Windows 3.11 or earlier, you're just better off running them under Windows 98.  No patches, no extra drivers are necessary. They won't automagically get full long filename support, as they'll still be using the old 8.3 interfaces, but they'll work just fine. If you do manage to find something that doesn't work, you'll probably need to install MS-DOS 6.22 and Windows 3.11 on a separate FAT16 partition in order to fix the problem anyways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-DOS software compatibility wasn't quite as good, because Windows, including Windows 3.11, runs in protected mode and that necessarily limited what MS-DOS applications could do, and MS-DOS applications could do anything.  In practice, almost all MS-DOS applications worked within these constraints, but a few MS-DOS applications require that they be run in plain MS-DOS.  For those you can either change the BootGUI option in MSDOS.SYS, or select the &quot;Restart in MS-DOS mode&quot; from the shutdown menu.  You can even set up shortcuts so do they automatically do this and launch the application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used Windows 98 as my primary computer for a long time after it became obsolete just because of its excellent backwards compatibility, especially for games.  It's very likely all you need.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2019-12-04T01:49:25.220" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12951" PostTypeId="1" CreationDate="2019-12-04T14:56:58.353" Score="1" ViewCount="366" Body="&lt;p&gt;In the game you were a spider which could run from one wall to the other.&#xA;The snake could either destroy your net or you.&lt;/p&gt;&#xA;&lt;p&gt;If you reached another wall the room where snake could move got smaller. If said room was small enough you beat the level.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bRPMW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bRPMW.png&quot; alt=&quot;New version of it&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It looked like that this seems to be a &lt;a href=&quot;https://apps.apple.com/us/app/tarantula-vs-snake/id483584037&quot; rel=&quot;nofollow noreferrer&quot;&gt;mobile rework&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15744" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2021-05-04T02:59:31.267" Title="Spider and snake in a square" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12952" PostTypeId="2" ParentId="12951" CreationDate="2019-12-04T15:30:24.133" Score="4" Body="&lt;p&gt;From the description it could have been &lt;a href=&quot;https://en.wikipedia.org/wiki/Xonix&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xonix&lt;/a&gt;. Difficult to say without knowing the platform.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2019-12-04T15:30:24.133" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12953" PostTypeId="2" ParentId="12942" CreationDate="2019-12-04T17:47:06.683" Score="15" Body="&lt;p&gt;Some of the HP Omnibook series of laptops and sub-notebooks from the mid 1990s had a curious pop-out “mouse on a stick”:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zehQF.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zehQF.png&quot; alt=&quot;HP Omnibook 800 Mouse, from 1996 manual&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While hardly part of the original mouse timeline dating back to the 1960s, this HP mouse used encoders built into the computer body. The encoders — as shown in this &lt;a href=&quot;https://www.youtube.com/watch?v=s4sXUnxOUzA&amp;amp;t=640&quot; rel=&quot;noreferrer&quot;&gt;Omnibook repair video&lt;/a&gt; from 10' 40&quot; on — appear to track the extension and angle of the mouse stick. In order to produce PS/2 mouse compatible &lt;a href=&quot;https://isdaman.com/alsos/hardware/mouse/ps2interface.htm&quot; rel=&quot;noreferrer&quot;&gt;movement counter&lt;/a&gt; signals, the (∆&lt;em&gt;r&lt;/em&gt;, ∆&lt;em&gt;θ&lt;/em&gt;) from the internal encoders would have to be temporarily converted to an absolute (X, Y) position from which (∆&lt;em&gt;x&lt;/em&gt;, ∆&lt;em&gt;y&lt;/em&gt;) signals were derived.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From memory, the Omnibook mouse would continue to produce (∆&lt;em&gt;x&lt;/em&gt;, ∆&lt;em&gt;y&lt;/em&gt;) signals if it hit the relevant end stops, so there were perhaps some additional limit switches in the mouse hardware. It was a fairly terrible mouse, and completely unusable by left-handed people.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2019-12-04T17:47:06.683" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="12954" PostTypeId="1" AcceptedAnswerId="12955" CreationDate="2019-12-04T19:49:21.973" Score="28" ViewCount="10428" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MYUc2.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MYUc2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The windows 95 is known for introducing a couple of classic screensavers including: Maze, Pipes and starfield among others. It looks like DirectX is a collection of multimedia APIs but for this question is really only Direct3D sublibrary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like most Windows 95 shipped with DirectX 2 but I could foresee the developers using their own libraries or procedure calls. &lt;/p&gt;&#xA;" OwnerUserId="4251" LastEditorUserId="4251" LastEditDate="2019-12-04T20:46:07.177" LastActivityDate="2019-12-06T16:58:50.773" Title="Did the Windows 95 screensavers use hardware acceleration APIs?" Tags="&lt;graphics&gt;&lt;windows-95&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12955" PostTypeId="2" ParentId="12954" CreationDate="2019-12-04T20:48:30.010" Score="26" Body="&lt;p&gt;All of the classic 3D screensavers (3D Maze, 3D Pipes, 3D Flying Objects, 3D Text, and 3D Flower Box) used OpenGL instead of DirectX.  This was a virtual necessity for two reasons: (1) the original version of Windows 95 didn't ship with any version of DirectX, and (2) the Direct3D API required hardware acceleration that most PCs of the time wouldn't have had.  On the other hand, OpenGL could fall back to software rending if hardware acceleration wasn't available. (In fact, I'm not sure there was any hardware support for OpenGL on Windows 95 when it first came out.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least some of these 3D screensavers&amp;mdash;in particular, 3D Pipes&amp;mdash;were actually introduced in Windows NT 3.5, a year before Windows 95 came out. In theory, these screensavers could have been rewritten to use Direct3D in later releases of Windows, but that never happened. While DirectX became a standard part of Windows with Windows 95 OSR2, by the time you could pretty much always depend on 3D hardware support (some time during the Windows XP era), these screensavers were no longer being included with Windows. Direct3D never got a practical software renderer that you could use in production applications until Windows 7.  There was a painfully slow reference rasterizer before that, but it has never been part of Windows or the DirectX end-user installs. You can only use it if you have the DirectX SDK installed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were at least some third-party screensavers that used Direct3D, but they were very uncommon. It didn't help that the official Windows screensaver API made it difficult to write a screen saver using Direct3D.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorUserId="2037" LastEditDate="2019-12-05T06:33:40.237" LastActivityDate="2019-12-05T06:33:40.237" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="12956" PostTypeId="1" AcceptedAnswerId="12957" CreationDate="2019-12-05T02:03:56.703" Score="6" ViewCount="268" Body="&lt;p&gt;I've been connecting my Tandy Model 100 to a serial port on a Linux box via the TELCOM program with some success. The main downside is that in whatever the default terminfo/&lt;code&gt;$TERM&lt;/code&gt; setting it gets, a few keys (input from the Model 100) don't work as expected and anything that relies on fancy cursor/layout control (output to the Model 100) are broken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the builtin TELCOM program have any sort of support for terminal style &quot;rendering&quot; or does it literally just echo back every character it can from the server and ignore the rest?&lt;/p&gt;&#xA;" OwnerUserId="13904" LastEditorUserId="13904" LastEditDate="2019-12-05T05:13:34.747" LastActivityDate="2019-12-05T19:36:56.707" Title="Does the TELCOM program on the Tandy Model 100 support any Unix terminal–like control codes?" Tags="&lt;unix&gt;&lt;terminal&gt;&lt;trs-80-model-100&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12957" PostTypeId="2" ParentId="12956" CreationDate="2019-12-05T04:55:43.507" Score="9" Body="&lt;p&gt;Thanks in large part to the &lt;a href=&quot;https://github.com/hackerb9/Tandy-Terminfo&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tandy-Terminfo&lt;/a&gt; project, which provides ready-to-compile .terminfo definition for the TRS-80 Model 100 and Tandy Models 102 and 200, I believe the answer is: &lt;strong&gt;yes&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example the sequence &lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;E&lt;/kbd&gt; will clear the screen, the sequence &lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;H&lt;/kbd&gt; will move the cursor &quot;Home&quot;, etc. These are set up in that mentioned &lt;a href=&quot;https://raw.githubusercontent.com/hackerb9/Tandy-Terminfo/master/tandy.terminfo&quot; rel=&quot;nofollow noreferrer&quot;&gt;terminfo file&lt;/a&gt; and backed up by a few references I found:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The official &lt;em&gt;TANDY 200 TELCOM Manual&lt;/em&gt; lists these &quot;ASCII Sequence Codes&quot; on &lt;a href=&quot;https://archive.org/details/Telcom_for_Tandy_200_1985_Microsoft/page/n47&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 88&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Exploring the Radio Shack Model 100&lt;/em&gt; by Marvin Mallon has a similar table Appendix B: Escape Sequences on &lt;a href=&quot;https://archive.org/details/ExploringTheRadioShackModel100/page/n157&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 141&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So this is explicitly documented for the Model 200, and also confirmed on the Model 100. Should be safe to assume the Model 102 followed suit as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the full list of escape sequences as documented in the scanned references:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;A&lt;/kbd&gt; Move cursor up one line&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;B&lt;/kbd&gt; Move cursor down one line&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;C&lt;/kbd&gt; Move cursor right one space&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;D&lt;/kbd&gt; Move cursor left one space&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;H&lt;/kbd&gt; Home cursor (moves cursor to top left corner)&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;I&lt;/kbd&gt; Answerback&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;J&lt;/kbd&gt; Erase to end of screen&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;K&lt;/kbd&gt; Erase to end of line&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;L&lt;/kbd&gt; Insert line&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;M&lt;/kbd&gt; Delete line&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;P&lt;/kbd&gt; Turn cursor on&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;Q&lt;/kbd&gt; Turn cursor off&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;T&lt;/kbd&gt; Set system line&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;U&lt;/kbd&gt; Reset system line&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;V&lt;/kbd&gt; Disable video&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;W&lt;/kbd&gt; Enable video&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;Y&lt;/kbd&gt; (plus &lt;code&gt;r,c&lt;/code&gt; or possibly &lt;code&gt;x y&lt;/code&gt;) Move cursor to specified row/column position&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;j&lt;/kbd&gt; Clear screen&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;l&lt;/kbd&gt; Erase entire line&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;p&lt;/kbd&gt; Enter reverse video mode&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;Esc&lt;/kbd&gt; &lt;kbd&gt;q&lt;/kbd&gt; Exit reverse video mode&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="13904" LastEditorUserId="13904" LastEditDate="2019-12-05T19:36:56.707" LastActivityDate="2019-12-05T19:36:56.707" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12958" PostTypeId="2" ParentId="12909" CreationDate="2019-12-05T07:49:27.287" Score="2" Body="&lt;h1&gt;Intro&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I already added an answer, but this time I want to expand on the idea more forcefully.  First, let me say that I think this question perhaps better belongs on &lt;a href=&quot;https://cs.stackexchange.com/&quot;&gt;CS&lt;/a&gt;.  It's more about philosophy and theory than it is about the Jaquard Loom, per se.  Even so, let's run with it and see how far we get.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;New Claim&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;We all agree that a given bit string &lt;em&gt;might&lt;/em&gt; be viewed as code or data or both, depending on the context.  However, I am going to disagree with @Artelius, who claimed that: &quot;All code is data. But not all data is code.&quot;  Hopefully, everyone else also agrees that &quot;all code is data.&quot;  What I would like to introduce is the notion that &quot;all data is code...&lt;em&gt;with respect to some computational model&lt;/em&gt;.&quot;&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Weak Version&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Now, there is a trivial sense and a more subtle sense in which the claim above can be understood.  The trivial sense is that for any bit string, we can define an infinite number of instruction sets for which that bit string is a well-formed sequence of one or more instructions (or, if you prefer, it is a complete well-formed &quot;program&quot;).  This sense is weak, because it basically says: &quot;Well, I see you have a random string of bits.  That's a beautiful program for CPU X, but you've never heard of CPU X before, and it has a rather ridiculous instruction set that nobody would actually care to implement.  By the way, there are an infinite number of unique designs for CPU X.  Enjoy.&quot;  Hopefully we agree that the trivial sense is manifestly true, but also not terribly interesting, so let us not consider it further.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Strong Version&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The strong version of the claim is that for every bit string, there exists a &quot;computational model&quot; which interprets the bit string as a well-formed program which is &quot;useful and relevant.&quot;  Obviously, &quot;useful&quot; and &quot;relevant&quot; are hopelessly imprecise terms, so I cannot provide a rigorous proof of this claim.  Instead, I will work through a few examples and let readers decide if the claim is reasonable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, when we talk about &quot;code&quot;, we either mean &quot;machine code&quot; that can be directly executed by some logic unit (a microprocessor, usually), or &quot;source code&quot; that conforms to some programming language.  And naturally, a compiler thinks of both &quot;source code&quot; and &quot;machine code&quot; to just be data, and compilation as an algorithm or information process that turns one string of data into another.  Whereas, an interpreter will generally treat source code in an analogous way to a CPU executing machine code, but using an abstract machine model implied by the interpreter itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So just looking at &quot;things which touch code&quot;, we already have trouble deciding whether a bit string is &quot;code&quot; or &quot;data&quot;.  A compiler with a REPL will look at a bit of source code, and when you ask: &quot;Is it code or data?&quot; it &lt;em&gt;must&lt;/em&gt; answer: &quot;yes&quot;, with each aspect depending on whether you ask it to compile or evaluate.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Not Code?&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;But what about things which seem so obviously &lt;em&gt;not&lt;/em&gt; code?  Like, a JPEG?  Well, bit strings conforming to the JPEG specification are not intended to be consumed as bit strings, in general.  Clearly, humans create and direct machines to create JPEGs so that they can be rendered as visible images (or processed as images to extract information from them).  To that extent, we can view a JPEG as &quot;program input&quot; to a JPEG viewer in a similar way that &lt;a href=&quot;https://en.wikipedia.org/wiki/Printer_Command_Language&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCL&lt;/a&gt; is &quot;program input&quot; to a printer.  This speaks to the view noted by @Michael Kay in a comment.  However, unlike Michael, I am not the least bit concerned about whether the resulting language is Turing-complete.  After all, a Jaquard controller appears to me manifestly &lt;em&gt;not&lt;/em&gt; Turing-complete, but I think many of us are happy to accept the &quot;command&quot; cards as &quot;code&quot;, with the controller as the &quot;processor&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we accept this notion, then we have covered all structured data which is rendered or processed by some program, whether hardware or software.  So what about data that isn't consumed by a program?  Is there such data?  Let's consider the output of a program written by a CS student.  In the general case, this will not be designed to be consumed by another program, as it will often just be some lines of text producing the result of a basic calculation.  One may even struggle to label such data as &quot;structured&quot;, depending on the tidiness of the student in question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this scenario, we struggle to identify the &quot;program&quot;, let alone &lt;em&gt;microprocessor&lt;/em&gt; which would interpret the data as code!  In such a case, I claim that the program is in your head!  Just as high-level source code often cannot be executed directly by physical hardware, but can be executed just fine by brains, most data floating around human spaces is not necessarily designed for machine consumption, but rather for wetware consumption.  If we accept human minds as a kind of sloppy &quot;program&quot; or &quot;microprocessor&quot; (actually pretty large compared to most CPUs made after the 80's), then all human-readable data now falls under the &quot;structured data&quot; umbrella.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Non-Human Data&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;So what about data which doesn't originate near humans?  What about the pattern of X-ray pulses emitted by the accretion disk surrounding a black hole?  Surely that is data?  But how is it code?  Here is where we take a very philosophical turn.  By &lt;a href=&quot;https://en.wikipedia.org/wiki/Digital_physics#Pancomputationalism&quot; rel=&quot;nofollow noreferrer&quot;&gt;some accounts&lt;/a&gt;, every physical process &lt;em&gt;is&lt;/em&gt; an &lt;em&gt;information process&lt;/em&gt;, and the the universe itself is a kind of &quot;computer&quot;.  This is stronger than the &quot;weak interpretation&quot; we noted above, as we are limited to physically realized CPUs.  But it's still a kind of catch-all that reduces computation to something that perhaps seems less interesting because of its scope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would argue that what is unsatisfying in this formulation is that it makes computation utterly &lt;em&gt;impersonal&lt;/em&gt;.  If minds have nothing to do with computation, then how is computation distinguishable from mere physics?  Have we reduced all of computer science to a small subset of the physical sciences?  I feel that doesn't capture the essence of what we mean by &quot;computation&quot;.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;What is Computation?&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Peter Denning tackles this question in a &lt;a href=&quot;http://denninginstitute.com/pjd/PUBS/CACMcols/computation.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;lecture&lt;/a&gt; he gave about a decade ago.  I think this covers a lot of good ground, and I encourage readers to give it a look.  But I would like to go further than Denning, and give computation a kind of &quot;anthropic definition&quot;, because as far as we know, humans are the only creatures who actually care about what &quot;computation&quot; means in the first place.  Even if the &lt;em&gt;principles&lt;/em&gt; of computation transcend humanity and apply to processes occurring all over the universe, the &lt;em&gt;notion&lt;/em&gt; of computation still comes back to &lt;em&gt;things humans care about&lt;/em&gt;.  Since we invented the word, we get to decide what it means.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to propose that a &quot;computation&quot; is an &lt;em&gt;informational mapping&lt;/em&gt;, &lt;em&gt;extended in time&lt;/em&gt;, which has &lt;em&gt;manifest relevance to conscious experience&lt;/em&gt;.  I assume that we can agree on the first two qualifications, and that we need only debate the last.  For clarity, the first part means that we have a &quot;start state&quot; and a desired &quot;end state&quot;, and the second that a process requires non-zero time to evolve between the states.  So, a lookup table is not, per se, a computation.  &lt;em&gt;Using&lt;/em&gt; the lookup table to map one bit string to another &lt;em&gt;is&lt;/em&gt; a computation, and requires non-zero time.  Since all more complicated computations can be reduced to computing the corresponding lookup table (or mapping between the domain and codomain), we have essentially covered the first two features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I say that a computation has &quot;manifest relevance to conscious experience&quot;, I mean this: somewhere in intergalactic space, there's a random cloud of hydrogen atoms lazily vibrating by themselves and basically minding their own business.  By pure luck, the exact pattern of atoms corresponds to a great many things, such as the positions of stars in some galaxy, the location of cities on a map, the firing neurons in some brain at some point in time.  The evolution of that cloud might then justifiably be described as a kind of computation which corresponds to the evolution of one of the given mappings.  But I argue that the cloud of hydrogen atoms is &lt;em&gt;not computing anything&lt;/em&gt;.  Because it's just a cloud of gas, out there in intergalactic space.  We can't interact with it, we can't change it, we can't even see it.  It's minding its own business, which includes &lt;em&gt;not computing&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though a computation running on a human-made computer could almost exactly describe the time evolution of that hydrogen gas cloud, my argument is that the real cloud is itself &lt;em&gt;not a computation&lt;/em&gt;.  Because in my mind, in order to have a computation, &lt;em&gt;something needs to care about the result&lt;/em&gt;.  Obviously, if someone took the time to create a hydrogen gas cloud simulation, they care very much about the result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I originally said: &quot;manifest relevance to the &lt;em&gt;human&lt;/em&gt; experience&quot;.  But I had to go back and change it, because that would mean that aliens living near another star could not do something we recognize as &quot;computation&quot;, and that seems patently absurd to me.  I think the minimum requirement for computation is that some conscious being cares about the start and end states.  And this brings us back to the black hole.  As long as nobody cares about the pulsar and nobody is looking at us, the pulsar is &lt;em&gt;being&lt;/em&gt;, but it isn't &lt;em&gt;computing&lt;/em&gt;.  As soon as someone points an X-ray detector at it, and starts counting/timing the pulses, and using them to infer principles of stellar mechanics, the black hole system &lt;em&gt;becomes a computation&lt;/em&gt;, of the physical model the astronomer is attempting to infer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So then my thesis hinges on one question: are the X-ray pulses &lt;em&gt;data&lt;/em&gt; if nobody is observing them?  The &quot;all data is code&quot; claim can only be true if we answer in the negative.  That is, if a tree falls in the forest, and nobody records the event or otherwise takes note of it, then I claim it is not data.  And if it &lt;em&gt;is&lt;/em&gt; noted by a conscious being, then it &lt;em&gt;is&lt;/em&gt; data, &lt;em&gt;and&lt;/em&gt; code, even if the code is merely reduces to: &quot;demonstrate the sounds and images of a tree falling in the forest&quot;.&lt;/p&gt;&#xA;" OwnerUserId="15720" LastActivityDate="2019-12-05T07:49:27.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12959" PostTypeId="2" ParentId="12942" CreationDate="2019-12-05T13:01:54.333" Score="8" Body="&lt;p&gt;The Commodore 1351 mouse, created as an afterthought for the C64 and C128 and (ab-)using those systems' analog paddle inputs to transfer mouse position data (since no mouse support was planned when those computers were designed), maintains an internal sort-of-absolute position on a wrapping 64x64 pixel grid which it then provides to the computer. While mouse-supporting software running on those computers will have to convert those 64x64 grid positions to really absolute values by correcting for the wrapping and optionally applying some sort of acceleration algorithm, this type of mouse does not transfer relative position in terms of signed x/y displacement values.&lt;/p&gt;&#xA;" OwnerUserId="15754" LastEditorUserId="15754" LastEditDate="2019-12-05T14:54:13.400" LastActivityDate="2019-12-05T14:54:13.400" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12960" PostTypeId="2" ParentId="12942" CreationDate="2019-12-05T13:38:11.077" Score="6" Body="&lt;p&gt;As Stephan Kitts mentions, the mouse puts out relative coordinates. In reality the mouse sends its x/y &lt;strong&gt;movement&lt;/strong&gt; (not coordinates) in mickeys (yes that's the name of the unit) to the PC in the form of interupts. The software can intercept these interupts and process them to do whatever: move a cursor, scroll, move an item in a game or more. Not necessarily anything to do with position on a screen. That is only a (now the most common) usage of a mouse. &lt;/p&gt;&#xA;" OwnerUserId="15755" LastActivityDate="2019-12-05T13:38:11.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12961" PostTypeId="1" AcceptedAnswerId="12962" CreationDate="2019-12-05T14:57:14.527" Score="5" ViewCount="161" Body="&lt;p&gt;I have an old MAI DT4315A that my company was going to throw out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd love to get it setup as a terminal for a linux based system or raspberry pi, just for fun. However, I've never completed anything like this before and was wondering if anyone else has, and can push me in the right direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's what I know so far:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Many people have done this project with VT100 systems or similar. However, those use RS232 I believe, and this terminal uses an RJ45. (Not sure if that even matters.)&lt;/li&gt;&#xA;&lt;li&gt;There's someone who's obviously done it but there's no way to contact them to ask questions: &lt;a href=&quot;https://www.youtube.com/watch?v=XHAECaEK3dc&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=XHAECaEK3dc&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;I've found some documentation on the terminal's pin assignment that may help me come up with a wiring solution to the R-Pi's serial connection: &lt;a href=&quot;http://chiclassiccomp.org/docs/content/computing/MAI/Fibs/N119.txt&quot; rel=&quot;noreferrer&quot;&gt;http://chiclassiccomp.org/docs/content/computing/MAI/Fibs/N119.txt&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;I think that it's not as simple as just connecting the pins properly, but that the voltage is also a consideration and I might need something inbetween the Pi and the terminal for that.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Are there any 'defacto' projects/blogs I should be looking at to help with this, or sites that someone else may have read that are commonly pointed to?&lt;/p&gt;&#xA;" OwnerUserId="15756" LastActivityDate="2019-12-05T16:31:25.683" Title="Using MAI DT4315A as a terminal for RaspberryPI or other linux system" Tags="&lt;terminal&gt;&lt;vt100&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12962" PostTypeId="2" ParentId="12961" CreationDate="2019-12-05T16:31:25.683" Score="5" Body="&lt;p&gt;The RJ45 standard just defines which RS232 signal is on which pin of the connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your RPi has a genuine RS232 output interface, you don't need to do any more level shifting because that will have been done already. RS232 signals use both positive and negative signal voltages, unlike almost anything else in modern digital electronics. The RS232 spec allows for any signal voltage between +/-3V and +/-15V (with an absolute maximum of +/-25V). Most computer-based RS232 ports use +/-5V or +/-10V. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, one reason old computer power supplies had -12V and -5V outputs was to provide the negative voltages for the RS232 ports, but electronic circuit design has move on a bit since then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the link in the question, your terminal uses VT100 control codes for cursor movement, clearing the screen, etc. But you should be able to prove the hardware part of the link is working just by sending some letters or digits, without worrying about exactly where they appear on the screen!&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2019-12-05T16:31:25.683" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12964" PostTypeId="1" CreationDate="2019-12-05T19:33:18.430" Score="27" ViewCount="3249" Body="&lt;p&gt;The line editor &lt;code&gt;ed&lt;/code&gt; in UNIX/Linux has a &quot;command mode&quot; and an &quot;insert mode&quot; and there is no visual way to tell which mode you are in.  However, there is a &lt;code&gt;-p&lt;/code&gt; option that causes it to display a prompt when you are in command mode, which is very helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is the default to have no prompt?  Masochism? &lt;/p&gt;&#xA;" OwnerUserId="4468" LastActivityDate="2020-03-18T16:44:43.700" Title="Why does UNIX ed not have a prompt by default" Tags="&lt;unix&gt;" AnswerCount="6" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12965" PostTypeId="2" ParentId="12964" CreationDate="2019-12-05T20:10:03.787" Score="16" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;However, there is a -p option that causes it to display a prompt when you are in command mode&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;-p&lt;/code&gt; option is meant to set a different prompt. When used, a side-effect is that ed starts in addition with prompt enabled.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why is the default to have no prompt?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is a default, &lt;code&gt;*&lt;/code&gt; (asterisk); it's just not switched on. Prompt display can be toggled by applying a &lt;code&gt;P&lt;/code&gt; command (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ed is meant as well for automated (scripted) use (*2). Having the prompt displayed for each command entered is at least annoying; on a real TTY it will waste a lot of paper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To display no prompt by default seems sensible in an early environment, doesn't it?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In addition, it might be good to keep in mind that programming back then, especially when done online, was handled mostly in the head, not on a screen or alike. When using ed, one had to have a proper image present. Printing the whole file or just parts thereof would eat up a lot of paper and even more important time. Listing just a page would easily take a minute or two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that background it's rather trivial to keep aware what mode one is in. After all, it's not complicated, as default is command and input is only activated on request.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The prompt is a rather new addition as Stephen Kitt &lt;a href=&quot;/q/12964//12965#comment41020_12965&quot;&gt;mentioned&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - I always loved the feature to 'open' any shell command as input 'file'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, ed even predates next to all other Unix tools as well as basic output direction itself (which was a shell feature until pipes were added in V3 (?)). So the standard way to capture a program output was to 'open' it as ed input file and save it as text file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ ed&#xA;r !ls -l&#xA;w directory_listing&#xA;q&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="15108" LastEditDate="2019-12-11T23:01:44.017" LastActivityDate="2019-12-11T23:01:44.017" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12966" PostTypeId="2" ParentId="12964" CreationDate="2019-12-05T20:49:52.493" Score="7" Body="&lt;p&gt;The &lt;code&gt;-p&lt;/code&gt; option is a late addition.  I did some checking and the Seventh Edition man page for ed doesn't mention the &lt;code&gt;-p&lt;/code&gt; option, but it does appear in the Ultrix 4.2 man page.  Fifth Edition Unix also doesn't mention a &lt;code&gt;-p&lt;/code&gt; option, but it does say that if ed is invoked as a login shell (i.e. the program name provided in &lt;code&gt;argv[0]&lt;/code&gt; is &lt;code&gt;&quot;-&quot;&lt;/code&gt;) that it will enable a &lt;code&gt;*&lt;/code&gt; prompt.  This was presumably done in support of the early use of Unix as a text editing system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am guessing that the &lt;code&gt;-p&lt;/code&gt; option was added to provide an easier way to enable a prompt without jumping through the required hoops to invoke ed with &lt;code&gt;arg[0]&lt;/code&gt; set to &lt;code&gt;&quot;-&quot;&lt;/code&gt;.  But by that time, I suspect that very few people were still using ed for interactive editing: vi/ex and Emacs would have taken over for most.  If you were still using ed, you were either familiar with it already due to using it for many years (in which case you wouldn't need the prompt), or you were using it non-interactively (giving it input from a file) and you wouldn't have wanted prompts anyway.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="7946" LastEditDate="2019-12-09T11:23:52.757" LastActivityDate="2019-12-09T11:23:52.757" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12967" PostTypeId="2" ParentId="12964" CreationDate="2019-12-05T22:18:30.543" Score="36" Body="&lt;p&gt;Having used ed years ago on a printing terminal (such as a teletype or a DECwriter), I think the reason for having no prompt was that on pressing RETURN after one command, you didn't have to wait for a prompt to be printed before starting to type the next command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar considerations made it better for ed to have ? as the only error message: you would have worked out what the mistake was long before a longer error message had finished printing.&lt;/p&gt;&#xA;" OwnerUserId="6510" LastEditorUserId="6510" LastEditDate="2019-12-06T14:45:11.760" LastActivityDate="2019-12-06T14:45:11.760" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12968" PostTypeId="1" AcceptedAnswerId="12972" CreationDate="2019-12-05T23:34:06.217" Score="70" ViewCount="10300" Body="&lt;p&gt;Many processors have an instruction called &quot;move&quot; (sometimes spelled MOV) which copies data from one location (the &quot;source&quot;) to another (the &quot;destination&quot;) in registers and/or memory. It does not do anything to the &quot;source&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is analogous to the &quot;copy&quot; (or &quot;cp&quot;) command in a filesystem.  In a &quot;move&quot; (or &quot;mv&quot;) in the filesystem, the &quot;source&quot; would no longer be there.  It is also contrary to the simple English meaning of &quot;move&quot;... after you move an object, it exists in its new location but no longer in its previous location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why call the instruction &quot;move&quot;?&lt;/p&gt;&#xA;" OwnerUserId="4468" LastEditorUserId="11916" LastEditDate="2019-12-27T17:59:22.797" LastActivityDate="2019-12-27T17:59:22.797" Title="Why is the processor instruction called &quot;move&quot;, not &quot;copy&quot;?" Tags="&lt;assembly&gt;&lt;instruction-set&gt;&lt;cpu&gt;&lt;terminology&gt;" AnswerCount="9" CommentCount="17" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12970" PostTypeId="2" ParentId="12968" CreationDate="2019-12-06T03:10:25.790" Score="38" Body="&lt;p&gt;Besides the matter of semantics and personal taste, there’s a much more practical reason: some instructions sets claim to be copyrighted, as &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80&quot; rel=&quot;noreferrer&quot;&gt;the Wikipedia Z80 article&lt;/a&gt; states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Because Intel claimed a copyright on their assembly mnemonics, a new assembly syntax had to be developed for the Z80. This time a more systematic approach was used.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, I think the mnemonic scheme of the instructions have to be unique and copyrightable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another important factor is the tendency to use 3-letter mnemonics in the 70’s instructions sets, probably to save source code memory and to make input quicker, while maintaining a degree of readability.  In the 8080 instruction set, which uses 3 letters, the &lt;code&gt;MOV&lt;/code&gt; mnemonic is easy understandable as &quot;move&quot;, while the hypothetical &lt;code&gt;COP&lt;/code&gt; mnemonic could have other meanings than &quot;copy&quot;.&lt;/p&gt;&#xA;" OwnerUserId="8047" LastEditorUserId="2037" LastEditDate="2019-12-06T21:34:13.610" LastActivityDate="2019-12-06T21:34:13.610" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="12971" PostTypeId="2" ParentId="12964" CreationDate="2019-12-06T03:49:29.607" Score="19" Body="&lt;p&gt;When I was a lad, the only reason ed was included at all in our environment is because it was used by the standard system scripts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Originally, having to clean the 'prompts' out of ed output to clean up the data would have just made everything more difficult -- much more difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, having ed default to something different would have just broken all the existing scripts.&lt;/p&gt;&#xA;" OwnerUserId="15767" LastActivityDate="2019-12-06T03:49:29.607" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12972" PostTypeId="2" ParentId="12968" CreationDate="2019-12-06T04:35:17.657" Score="30" Body="&lt;p&gt;&lt;strong&gt;Because &quot;move&quot; is the typical necessary function&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It isn't always this way, of course, but especially with earlier CPUs, there were limited destinations for data from a particular operation - e.g., arithmetic results could only be in certain registers. Or in the other direction, certain functions could only operate on a few locations, typically registers or a &quot;special&quot; area of memory. So the point wasn't simply to &lt;strong&gt;copy&lt;/strong&gt; in the sense that you might &quot;copy&quot; a file from one place to another, but more like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;I calculated a times b and now I need to &lt;strong&gt;move&lt;/strong&gt; it from the register into the location in memory for c. Yes, the ALU register will still have it, and I &lt;strong&gt;could&lt;/strong&gt; do something more with it there. But very often I will do a &lt;strong&gt;different&lt;/strong&gt; calculation into that register now that I have &lt;strong&gt;moved&lt;/strong&gt; the value elsewhere.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assembly language programming, especially with a small CPU with a handful of key registers, is very different from high-level language programming - even though one can be translated into the other.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2019-12-06T04:48:39.757" LastActivityDate="2019-12-06T04:48:39.757" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="12973" PostTypeId="2" ParentId="12968" CreationDate="2019-12-06T12:20:57.113" Score="5" Body="&lt;p&gt;Assembly language was initially just a tiny step up from machine programming and its main function was to convey a bit more meaning when drafting code and when dumping disassembly.  As a result, it tended to be very matter of fact and directly and mechanically translatable with little effort to machine code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take a look at the 8080 mnemonics, sort of the most widespread microcomputer mnemonics at their time due to CP/M's availability, you don't have various &quot;overlaid&quot; meanings of &quot;LD&quot; like the Z80 mnemonics had but rather every code point has its own mnemonic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The operators working with fixed registers (add/subtract, even things like exchange-top-of-stack-with-memory-pointed-to-by-HL) don't name those fixed registers as operands but, if at all, have them hardwired into the mnemonic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mnemonics are generally only 3 letters (with exceptions &quot;CALL&quot;, &quot;PUSH&quot;, &quot;SPHL&quot;, &quot;XCHG&quot;, and &quot;XTHL&quot;) for more compact printouts, with the 4 letter mnemonics having at most one argument.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To load register B with the value 7, you'd write &lt;code&gt;MVI 7,B&lt;/code&gt;.  The respective mnemonic &lt;code&gt;CPI&lt;/code&gt; (if one wanted to use &quot;copy&quot; as basis for the mnemonics) is already taken by &quot;compare accumulator to immediate value&quot;, with &lt;code&gt;CPI 3&lt;/code&gt; comparing the accumulator with the value 3 and setting the flags according to the result of the comparison.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a note aside, there are &lt;code&gt;CP&lt;/code&gt;, &lt;code&gt;CPE&lt;/code&gt;, and &lt;code&gt;CPO&lt;/code&gt; instructions for &quot;call when positive, parity even, parity odd&quot;.  This kind of high density in the &quot;CP&quot; realm may well have triggered a desire to search for a different synonym.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zilog did considerably decompressed mnemonics for its upwards compatible Z80 processor (where most of the data transfer stuff ran through &lt;code&gt;LD&lt;/code&gt;) even though TDL assembly mnemonics designed an Intel-style mapping of the Z80 machine code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Load&quot; and &quot;store&quot; were actually also in use early on but more used for indicating memory-&gt;register and register-&gt;memory transfers, respectively.  So instructions between registers were looking for alternative names early on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The strong move/copy distinction made it into computer science later than assembly language, with the UNIX &lt;code&gt;cp&lt;/code&gt;/&lt;code&gt;mv&lt;/code&gt; instructions for entire files and with the copy/move/cut/paste idioms from early graphical user interfaces.&lt;/p&gt;&#xA;" OwnerDisplayName="user15774" LastActivityDate="2019-12-06T12:20:57.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12974" PostTypeId="2" ParentId="12917" CreationDate="2019-12-06T13:25:46.493" Score="5" Body="&lt;p&gt;I rarely had occasion to use self-modifying code.  Doing that had a lot of overhead both in ROM space and RAM space, and I rarelysaw an occasion where it would be worth it. I did do it on the IBM PC, where I had bunches of block moves to do that were not contiguous, and doing so eliminated looping overhead during a critical time, at the expense of some RAM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did, however, use a variant for copy protection.  We ROM programmers were always in an arms race with people who cracked games. Usually, copy protection was bolted on after-the-fact by adding code that had no purpose but copy protection... typically a loop that wrote garbage into the ROM area (having no effect on ROM but destroying a RAM copy). It was easy enough for the crackers to disassemble the code and unbolt them.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, games have many tables of gameplay parameters. Some were binary:  The robots do not shoot on level 1, but do on level 3. If there were 30 levels, that was 30 bytes &lt;em&gt;per parameter&lt;/em&gt; unless you wanted to do a binary unpack.  ROM space was tight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I would store 3 binary tables in the same byte array: in bits 0, 6 and 7, and other values in bits 1-5.   To get to bit 0, I did&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; ROR ($TABLE_REF),Y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And the value would pop into the carry flag. (Y has the level number, loaded earlier. table_ref is a zero page location preloaded with the table location). For bits 6 and 7, I would ASL - bit 7 drops into carry and bit 6 drops into sign.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This operation writes the shifted value back to RAM.  That has no effect on ROM. But in a RAM copy,  &lt;strong&gt;it corrupts the gameplay table&lt;/strong&gt;. Playability is ruined: &lt;em&gt;The robots would never shoot&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By using only a 2-byte instruction, the cracker couldn't just replace it with a 3-byte JSR to a replacement subroutine.  It required rewriting that section of the code.  &lt;/p&gt;&#xA;" OwnerUserId="4330" LastActivityDate="2019-12-06T13:25:46.493" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12975" PostTypeId="2" ParentId="12968" CreationDate="2019-12-06T15:28:06.187" Score="11" Body="&lt;p&gt;This is actually a fun little question to answer, because I get to go into how a CPU actually works, including the major difference between typical CISC and RISC architectures.  In computing it is generally accepted that &quot;moving&quot; data is actually a copy operation, with the original remaining until overwritten; even in the bad old days of literal core memory, where the core &lt;em&gt;was&lt;/em&gt; erased by reading it, the memory hardware automatically rewrote it to preserve that idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll talk about &lt;strong&gt;RISC&lt;/strong&gt; first, or to put it more precisely, the &lt;strong&gt;three-operand load-store architecture&lt;/strong&gt;.  Here, the ALU is connected to the register bank (which is typically relatively large, 16 words or so) and does not have a direct path to or from external RAM.  The destination register for ALU ops is specified explicitly, so a typical instruction has three operands, two inputs and one output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a separate subsystem, which can usually operate in parallel with the ALU, for getting data in and out of RAM.  The instructions which activate this subsystem tend to carry mnemonics of &quot;load&quot; and &quot;store&quot;, indicating the direction of data movement explicitly.  But there usually is &lt;em&gt;not&lt;/em&gt; a dedicated instruction for getting data from one register to another.  Instead, an ALU instruction is chosen which doesn't modify the source data, and usually the assembler provides a &quot;pseudo mnemonic&quot; so the programmer doesn't have to remember how to do that.  Often the CPU itself will then recognise this special case and avoid having to physically pass the data through an execution pipeline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in PowerPC he can write &lt;code&gt;mr rD,rS&lt;/code&gt; and the assembler converts that to &lt;code&gt;ori rD,rS,0&lt;/code&gt;.  The mnemonics here are &quot;move register&quot; and &quot;OR immediate&quot;.  ARM has MOV for this purpose, but still uses &quot;load&quot; and &quot;store&quot; mnemonics for memory operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically &lt;strong&gt;CISC&lt;/strong&gt; is instead a &lt;strong&gt;two-operand accumulator architecture&lt;/strong&gt;.  Here, the ALU notionally has two physical operand buses, one connected directly to the register bank and the other to complex addressing mode logic that can take data directly from a register or from RAM.  The result bus leads directly from the ALU output to the write port of the register bank, and also to the writeback buffer on its way to RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consequently, the only way to get data into a register or back into RAM is to pass it through the ALU.  So one of the ALU's functions is to ignore one of the operands and pass the other through unchanged.  This function is selected by the &lt;code&gt;MOV&lt;/code&gt; or &lt;code&gt;MOVE&lt;/code&gt; opcode.  A very similar ALU mode is responsible for the &lt;code&gt;NOT&lt;/code&gt; and &lt;code&gt;NEG&lt;/code&gt; instructions, except that the data is then not unchanged, but the data &lt;em&gt;path&lt;/em&gt; is the same.  One advantage of this approach is that the same complex addressing modes are available for any ALU operation, of which MOV is just one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;6502&lt;/strong&gt; is a &lt;strong&gt;one-operand accumulator architecture&lt;/strong&gt;; because there is only one register (normally) accessible to the ALU, it doesn't need to be specified explicitly as the destination for ALU results.  Hence all 6502 instructions have at most one operand following the opcode, though that operand may be either one or two bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its mnemonics therefore adopt the &quot;load&quot; and &quot;store&quot; convention also used in RISC, and to get data from one register to another the instructions have mnemonics beginning with T for &quot;transfer&quot; (rather than M for &quot;move&quot;) followed by two letters indicating the source and destination (eg. &lt;code&gt;TAX&lt;/code&gt; transfers from Accumulator to X Index).  Indeed there are no 6502 mnemonics beginning with M at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there &lt;em&gt;are&lt;/em&gt; several that begin with C, and these are instructive as to why &quot;copy&quot; was not used in this CPU.  &lt;code&gt;CMP&lt;/code&gt; performs a comparison involving the accumulator, but &lt;code&gt;CPX&lt;/code&gt; and crucially &lt;code&gt;CPY&lt;/code&gt; perform similar comparisons involving the index registers.  With all 6502 mnemonics being 3 letters, &lt;code&gt;CPY&lt;/code&gt; would have been the obvious contraction of &quot;copy&quot;.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-12-06T15:28:06.187" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="12976" PostTypeId="2" ParentId="12942" CreationDate="2019-12-06T15:28:17.990" Score="1" Body="&lt;p&gt;When I was an older kid or early teen, my uncle took me to his office and let me play around on his computer. It was a dedicated CAD workstation, with a mouse that did actually encode absolute position on its pad (or whatever you would call it). The tail of the mouse was attached in the opposite position from modern mice, coming out under your wrist as you were holding it and plugging in to the &quot;mouse pad&quot; at the bottom, while a second cable connected the pad to the actual computer. At the top of the mouse, where the tail would normally connect, there was instead a crosshair that could be used to select icons that were actually printed on the &quot;mouse pad&quot; itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember getting frustrated because none of its four buttons were labelled, so you just had to remember which button did something with the mouse cursor on the screen, and which activated the function that the crosshair happened to be pointing at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is all from memory from quite a while ago, so I don't really have any more information about it, like a manufacturer or model or anything.&lt;/p&gt;&#xA;" OwnerUserId="15780" LastActivityDate="2019-12-06T15:28:17.990" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12978" PostTypeId="2" ParentId="12968" CreationDate="2019-12-06T18:19:31.460" Score="6" Body="&lt;p&gt;&lt;em&gt;Copy&lt;/em&gt; implies at the end you &lt;strong&gt;care&lt;/strong&gt; about having 2 independent copies.  &lt;em&gt;Move&lt;/em&gt; implies at the end you care only about having the destination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In assembly language, and particularly in register-starved architectures such as the 6502, you are moving (not wanting to copy) stuff around a lot because data has to be in a certain register to do something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional implementation circuitry is needed to perform an actual move where the source contents are destroyed.  Real moves would be something like &quot;Copy src-&gt;dest, set src to 0&quot; whereas simple copies are just the &quot;Copy src-&gt;dest.&quot;  So even though a move is what's meant, it's cheaper to implement as a copy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Inconsistent words have been used in various assembly language mnemonics to describe what is a copy over the history of CPUs.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;6502 uses &quot;load&quot; (&lt;code&gt;LDA&lt;/code&gt;) and &quot;transfer&quot; (&lt;code&gt;TXA&lt;/code&gt;, etc.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;MIPS uses &quot;load&quot; (&lt;code&gt;lui&lt;/code&gt;) and &quot;move&quot; (&lt;code&gt;mfhi&lt;/code&gt;, &lt;code&gt;mflo&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Intel and many others used &lt;code&gt;MOV&lt;/code&gt;, including the PDP-8 and VAX.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;68000's was &lt;code&gt;MOVE&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Z80 had &lt;code&gt;LD&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;POWER's instructions use &lt;code&gt;ld&lt;/code&gt; for load and &lt;code&gt;st&lt;/code&gt; for store.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;http://e4004.szyc.org/iset.html&quot; rel=&quot;noreferrer&quot;&gt;Intel 4004&lt;/a&gt; has mnenomics that refer to &quot;Load&quot; (not &quot;Store&quot; though), Fetch, Read and Write.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So it's really up in the air.&lt;/p&gt;&#xA;" OwnerUserId="746" LastActivityDate="2019-12-06T18:19:31.460" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12979" PostTypeId="2" ParentId="12968" CreationDate="2019-12-06T18:43:50.297" Score="18" Body="&lt;h1&gt;TL;DR&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;It's all about getting systematic, easy to memorise mnemonics, which &lt;em&gt;may&lt;/em&gt; reflect some underlaying structure, but most important ease practical use. Exact language is not always a handy one - except you're asking a lawyer :)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So why call the instruction &quot;move&quot;?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Oh, the age old copy-vs-move question. A beloved friend :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many different, equally plausible explanations, but before going into any it's quite important to keep in mind, that naming is not so much about being exact as being descriptive and distinctive. Also, meanings and usage evolves over time. And last but not least, people use terms they learned first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It as well depends on the features a computer offers, like if it is a generic two address machine or restricted to certain transfers - which may as well result in other alternative, often forgotten here: &lt;em&gt;Load/Store&lt;/em&gt; (*1) instead of &lt;em&gt;Copy&lt;/em&gt; or &lt;em&gt;Move&lt;/em&gt;. In a more generic view, they are all transfers - a word not really implying anything about what happens to the source (*2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, as with many items in computer history, the IBM /360 is deeply entrenched in the development of &lt;em&gt;Move&lt;/em&gt; vs. &lt;em&gt;Copy&lt;/em&gt; as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(points in no specific order)&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Machine Structure&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The copy issue usually only comes up when a machine offers more than a single accumulator. For example the &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Baby#Programming&quot; rel=&quot;nofollow noreferrer&quot;&gt;Manchester Baby&lt;/a&gt; as a single accumulator design used &lt;em&gt;Load&lt;/em&gt; and &lt;em&gt;Store&lt;/em&gt; for data transfer between accumulator and memory. A quite clear syntax - then again, not hard for an 8 instruction CPU :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, it's easy to complicate even a simple machine like that. The &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_1101#Instruction_set&quot; rel=&quot;nofollow noreferrer&quot;&gt;ERA/Atlas&lt;/a&gt; (Univac 1101) tried hard to confuse everyone by using a phletoria of terms for transfers:&#xA; - &lt;em&gt;Insert&lt;/em&gt; for memory (or Q) to accumulator (or Q),&#xA; - &lt;em&gt;Replace&lt;/em&gt; for accumulator to memory,&#xA; - &lt;em&gt;Transmit&lt;/em&gt; for accumulator to Q and,&#xA; - &lt;em&gt;Store&lt;/em&gt; for Q (or lower half of A) to memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://de.wikipedia.org/wiki/Siemens_2002&quot; rel=&quot;nofollow noreferrer&quot;&gt;Siemens 2002&lt;/a&gt;, a single accumulator machine, like the Baby and the ERA/Atlas, simplified it to an all covering &lt;em&gt;Transfer&lt;/em&gt; for register/memory transfers ... well, plus &lt;em&gt;Load&lt;/em&gt; to for bringing immediate values into registers (*3).&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Machine operation&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;It can depend on the view designers had on the machine. Is it some 'fast' parts, like registers, handling temporary items that get loaded and stored, or how memory works. In fact, with core memory, data really got moved, as the original content was destroyed due the read operation and had to be restored.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Easy Recognition&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Copy&lt;/em&gt; quite easy collides with &lt;em&gt;compare&lt;/em&gt; when using the usual way of 'compacting' words by leaving out vowels. CP vs. CMP is rather close.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Unique 'Encoding'&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;While the IBM 1401 forced the user to use single character symbols for instructions, it became already in the 1950s standard to name instructions in a way that the first letter of a mnemonic signals the general meaning or grouping, while the follow up was used to specify variations (like L -&gt; Load LH -&gt; Load Halfword) or to add readability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Siemens 2002 and IBM /360 are great examples here as they both used that scheme thruout. On the /370 &lt;em&gt;Load/Store&lt;/em&gt; as well as &lt;em&gt;Move&lt;/em&gt; was used, depending on source/target. It works like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A*  -&amp;gt; Add&#xA;B*  -&amp;gt; Branch&#xA;C*  -&amp;gt; Compare&#xA;...&#xA;L*  -&amp;gt; Load to register from register/memory&#xA;M*  -&amp;gt; Memory to memory move&#xA;ST* -&amp;gt; Store register to Memory&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The collision between &lt;em&gt;add&lt;/em&gt; and &lt;em&gt;and&lt;/em&gt; was solved by using N* for and-instructions.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Conclusion:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It was always more about having a nice decodable set of mnemonics than be super clear on the semantic side - after all, new usage creates new semantics, independent of prior application.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;And then there is x86 history.&lt;/h2&gt;&#xA;&#xA;&lt;h3&gt;Where it all started: Datapoint 2200&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The Datapoint 2200 was developed by CTC as a tool to replace card based terminals (*4). Thus the language used for their assembler was somewhat /360 orientated, with transfer instructions called &lt;em&gt;Load&lt;/em&gt; as they happened only between registers. In this context memory addressed by the memory pointer was just a special case. In fact, except for Jumps and Calls, the 2200 did not feature any memory addressing at all. For any random access H and L had to be loaded with separate 8 bit transfers. Further all mnemonics were created to directly represent an opcode, so each transfer had its own depending on source and destination (*5):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LA  # -&amp;gt; Load A with immediate #&#xA;LB  # -&amp;gt; Load B with immediate #&#xA;...&#xA;LAB   -&amp;gt; Load A with B&#xA;LBA   -&amp;gt; Load B with A&#xA;...&#xA;LAM   -&amp;gt; Load A with Memory (addressed by HL)&#xA;LBM   -&amp;gt; Load B with Memory (addressed by HL)&#xA;...&#xA;LMA   -&amp;gt; Load Memory (addressed by HL) with A&#xA;LMB   -&amp;gt; Load Memory (addressed by HL) with B&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;While an according assembler is thus straight forward and can be quite small (*6), this led to a 'mnemonic cloud' of &lt;strong&gt;59 valid mnemonics&lt;/strong&gt; for what most would considered a single or as maximum 4 different (*7) instructions.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Making it smaller: Intel 8008&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Intel's 8008 is a (mostly) straight forward implementation of the Datapoint 2200. No change so far compared to the Version 1 of the 2200.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Extending the design: Intel 8080&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The 8080 is a greatly enhanced version of the 8008. Most important due the addition of some 16 bit features (INX, DCX, DAD, LHLD, LXI, ...) or direct use of 16 bit addresses for other than Jump/Call (LDA, STA, SHLD, LHLD). In turn Intel simplified the mnemonic landscape by unifying all of the L** instructions into just two &lt;code&gt;MVI&lt;/code&gt; for immediate to register and &lt;code&gt;MOV&lt;/code&gt; for register to register (*8) transfer. Which register to be used was now encoded as parameters:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;8008     8080&#xA;====     ====&#xA;LA  # -&amp;gt; MVI A,#&#xA;LAB   -&amp;gt; MOV A,B&#xA;LAM   -&amp;gt; MOV A,M&#xA;LMB   -&amp;gt; MOV M,B&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's easy to see that this is just a more verbose but still stringent 1:1 relation between a source line and the opcode to be generated. Intel still stopped not only short of integrating the new instructions into the &lt;code&gt;MOV&lt;/code&gt; semantics, but even stayed back to use a single mnemonic for the new memory pointer access instructions or the direct load/stores which are at least in itself symmetric. So while cutting off 57 mnemonics, 6 more were clamped on.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Sidestep in Time Line: Zilog Z80&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;It seems, that the Z80 designers still had an eye on the Datapoint 2200 when designing their new CPU. Not only did they add a second register set, much like the 2200 Type 2, but they also went back to use &lt;em&gt;Load&lt;/em&gt; to name all transfer instructions (*10). Just this time all the way with sensible parameter detection. So not only all 8080 &lt;code&gt;MOV&lt;/code&gt; became &lt;code&gt;LD&lt;/code&gt;, but all the separate mnemonics for other transfers were brought in line:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;8008     8080        Z80&#xA;====     ====        ===&#xA;LA  # -&amp;gt; MVI  A,# -&amp;gt; LD  A,#&#xA;LAB   -&amp;gt; MOV  A,B -&amp;gt; LD  A,B&#xA;LAM   -&amp;gt; MOV  A,M -&amp;gt; LD  A,(HL)&#xA;         LDAX B   -&amp;gt; LD  A,(BC)&#xA;         STAX D   -&amp;gt; LD  (DE),A&#xA;         STA  adr -&amp;gt; LD  (adr),A&#xA;         LHLD adr -&amp;gt; LD  HL,(adr)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Zilog did not only straighten up all transfers, but as well moved conditionals out of the opcode column for all Calls, Jumps and Returns. While not being any result of the improved CPU itself, but a more capable assembler, it was quite used as argument to advertise how much more advanced and comfortable the new CPU was compared to its predecessor :)) (*10)&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;The end of all Future: Intel 8086&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The 8086 was developed as a stop gap measure until the i432 was ready, with a clear focus on existing 8080 users needing an upgrade. Its designers took the same step as Zilog did, but being used to &lt;code&gt;MOV&lt;/code&gt; as the generic instruction for data transfer they stayed with it - but now covering every variation. After all, with the huge number of varying addressing modes and data sizes, a simple one mnemonic one opcode with a hack for RI and RR decoding couldn't do it anymore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the rest is history, as they say.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Postscript&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;What I like about the question is that it leads to a core issue of our age: Real vs. Virtual world. Our language developed over millennia to describe physical objects that can only exist once, with a certain uniqueness - copying is an extraordinary process involving much effort. In the digital age, copying isn't special, but the very base of everything. Not only every data item gets copied uncountable times until it's displayed, but already the software doing so is a copy moved into memory from some storage, to be moved into the CPU to be executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our legal system(s) are badly torn when trying to judge the use of software and data (aka content) in terms of physical items, when they are in reality much more like a spoken word. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next to everything still struggles to handle this, language usage being right at the core and this question pointing to it.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Which then again opens the question what loading does to 'the item'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Again, but less, as a transfer paper adds copies, while a transfer ticket allows to use another transport. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Well, (next to) all assembler instructions were in German, so &lt;code&gt;TAS&lt;/code&gt; spelled out &lt;em&gt;Transferiere AR in Speicherzelle&lt;/em&gt; - literally: Transfer AR (accumulator register) to Storage (memory) cell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Back then a terminal wasn't a thing on your desk, but anything remote connected to a mainframe - like a card reader in some branch office where all transactions keypunched during the day were unloaded to be read remotely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - So at the very start 80 style assembler looked much more like later Motorola/MOS sources :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Every OP is a 1:1 encoding of the mnemonic, so it's a straight lookup in a 4 byte table. Operands are only possible for certain opcodes and come in only two flavours: 8 bit immediate and 16 bit address. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The resulting assembler was small enough to run on the machine itself, with as low as 4 KiB memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - Immediate, Register/Register, Memory/Register, Register/Memory&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - Including, like before, a memory cell addressed by HL as M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*9 - It is sometimes said this was for copyright considerations, but it's hard to justify  this in any way, as it wasn't just a renaming, but a complete reorganisation of the mnemonics as well as the assembly syntax. Also, descriptive names and sensible abbreviations thereof can't be trademarked or copyrighted in any country. If at all, the architecture might qualify - or the binary representation of opcodes, something DEC tried, without much success, for the VAX instruction set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*10 - The Game Boy uses a LR35902 is a great example how a mostly 8080 like CPU can gain from just using Z80 syntax. Likewise when restricting Z80 assemblers to 8080 features. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="15108" LastEditDate="2019-12-11T23:22:27.837" LastActivityDate="2019-12-11T23:22:27.837" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="12980" PostTypeId="2" ParentId="12968" CreationDate="2019-12-06T23:27:36.293" Score="2" Body="&lt;p&gt;In many machines, there are three primary forms of operation that cause something to hold a copy of something else:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Causing a register to hold a copy of something in memory, called &quot;loading&quot;.&lt;/li&gt;&#xA;&lt;li&gt;Causing memory to hold a copy of something in a register, called &quot;storing&quot;.&lt;/li&gt;&#xA;&lt;li&gt;Causing one register to hold a copy of another, called ... ?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;All three operations involve copying something.  If one recognizes that the first two operands move something to a new location but leave behind a copy that may or may not be useful, then describing the third operation as &quot;Move a value from one register to another, leaving a copy behind&quot; would fit that pattern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that in terms of semantic usage, code may sometimes want to make a backup copy of the value in a register but remain focused on the primary copy, but there's generally no need to have instruction sets worry about whether purpose of an operation is to have two copies of a value, as opposed to having the value available in a new place, while a useless copy is left behind.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2019-12-06T23:27:36.293" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="12981" PostTypeId="2" ParentId="12968" CreationDate="2019-12-07T13:49:02.153" Score="3" Body="&lt;p&gt;At first glance it just seems a matter of taste.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question actually starts off with an incorrect presumption: &quot;The&quot; &quot;processor&quot; instruction isn't called MOV(e), it's on &lt;em&gt;some&lt;/em&gt; instruction sets where it was called move, on others there is load, store, and transfer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having grown up with 6502, I totally &lt;em&gt;feel&lt;/em&gt; that &quot;load&quot; for load register from memory vs. &quot;store&quot; to store register into memory vs. &quot;transfer&quot; between registers is the best way to put it. Looking at the PDP-8 instruction set, apart from the odd fact that it has no no &quot;load&quot; at all (you always use TAD, add), it had &quot;store&quot; and &quot;transfer&quot; (though no other general register to transfer to). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Register transfer&quot; is a well understood concept, and usually thought different from &quot;load&quot; and &quot;store&quot; from and to memory, as the external address / data bus is not involved in the transfers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But now setting my quaint taste aside, I can also see the rationale for a single op-code mnemonic &quot;MOV&quot; (copy or transfer) because the source and destination are simply thought to be parameters, which is just an extension of the &quot;addressing modes&quot; (immediate, absolute/direct, indirect, indexed ...) there already are. Just include the registers into the domain of source and destinations, and hence a single &quot;move&quot; opcode is elegant, it's parameter polymorphic in what it does exactly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you continue thinking along those lines, understanding that &quot;load&quot; and &quot;store&quot; and &quot;transfer&quot; had already been used and have specific meanings, you'll begin to appreciate that for the abstract generalization of these opcodes, a new word had to be found. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The word &quot;copy&quot; (vs. move) may be known from the file system world, but copy is too specific because it implies that after the operation you will have 2 copies of the value, and that might not even always be true. For example, there are registers that clear themselves once they have been read (e.g., in memory-mapped I/O chips as were common in the 6502 world). So, the closest common English word to transfer is move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe thinking that way it all makes a lot of sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can wonder why they didn't also rename the &quot;jump&quot; instruction into &quot;move&quot; source to IP? &lt;/p&gt;&#xA;" OwnerUserId="15591" LastActivityDate="2019-12-07T13:49:02.153" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12982" PostTypeId="2" ParentId="12858" CreationDate="2019-12-07T15:00:09.403" Score="3" Body="&lt;p&gt;Another possible reason: with PC-relative addresses, you can easily relocate your program in the memory. Sometimes is a good idea to have a program you can load and run from any address (well, not really ANY, but you know...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you program like &quot;jump 10 bytes forward&quot;, you can easily relocate. With &quot;jump at $12A5&quot;, you have a fix memory location your program can be loaded into.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-07T15:00:09.403" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="12983" PostTypeId="2" ParentId="12834" CreationDate="2019-12-07T15:06:13.523" Score="1" Body="&lt;p&gt;In general: there were some system variables, system stack, display memory, buffers, etc. On some systems, there was a RAM area &quot;under&quot; the ROM (it means on the same address, but not accessible in a straight way) - for example, the Atari XL.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-07T15:06:13.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12984" PostTypeId="2" ParentId="12696" CreationDate="2019-12-07T15:34:09.323" Score="10" Body="&lt;p&gt;My two cents: I have written a lot of code with interrupts, and failed many times. Interrupts are very difficult to debug because they are asynchronous, you cannot easily enforce the same conditions again and again and you are fighting against race conditions and a lot of &quot;background&quot; operations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem, in my opinion, was that Woz had to program a PROM with a new version. It is very expensive (a lot of time, failed PROMs are destroyed forever, etc.) so he had only a few shots. With such conditions, it is better to give it up than keeping the &quot;try-fail&quot; approach.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-07T15:34:09.323" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12985" PostTypeId="2" ParentId="5401" CreationDate="2019-12-07T19:10:09.013" Score="16" Body="&lt;p&gt;Funny that this post still doesn't have the right answer. The Commodore 128 of course!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to Tommy for providing a beautiful picture of the mainboard, which reveals the Z80B very clearly:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/CbsFt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CbsFt.jpg&quot; alt=&quot;A beautiful picture provided by Tommy&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15103" LastEditorUserId="15103" LastEditDate="2019-12-26T18:57:05.140" LastActivityDate="2019-12-26T18:57:05.140" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="12986" PostTypeId="1" AcceptedAnswerId="12988" CreationDate="2019-12-08T03:30:05.243" Score="10" ViewCount="312" Body="&lt;p&gt;On IBM 709/7090/7094 mainframes, the effective address of an instruction could be modified by the contents of an index register specified in the instruction encoding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That much is a fairly standard feature, ever since the Manchester Mark 1 invented the 'B line'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the majority of computers, the content of the index register is added to the value in the address field of the instruction. However, in the IBM mainframes listed above, the index value was subtracted, rather than added.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the rationale for choosing subtraction rather than addition?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://bitsavers.org/pdf/ibm/7090/22-6528-4_7090Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;7090 reference manual&lt;/a&gt; on page 10 describes the indexing operation of the CPU as complementing the content of the index register and then adding that to the address field from the instruction, but I don't think that is useful as a rationale: &quot;complement and add&quot; is just a description of how subtraction is done in twos-complement.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-12-08T03:46:33.713" LastActivityDate="2019-12-08T09:52:29.747" Title="Why were index register contents on IBM 7090 subtracted in forming the effective address?" Tags="&lt;history&gt;&lt;ibm&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12987" PostTypeId="2" ParentId="12968" CreationDate="2019-12-08T03:54:18.153" Score="1" Body="&lt;p&gt;It is important to notice that the &lt;strong&gt;MOV&lt;/strong&gt; instruction isn't actually a single one : it actually corresponds to different opcodes according to what you're handling and which addressing mode you follow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the most rudimentary processors, if you can almost always read/store values from/to memory, you're very often unable to perform direct transfers from a register to another one, especially because these registers are meant to retain the read value to store it again elsewhere. And because of this same reason, you're almost never able to directly move/copy a value from an address to another one in a single operation (requires two distinct bus transactions with value retainment in between).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On 6809 processors, we had:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;LD&lt;/strong&gt;x : &lt;em&gt;Load&lt;/em&gt; - Load register &quot;x&quot; with a value from memory (even immediate) ;&lt;br&gt;&#xA;&lt;strong&gt;ST&lt;/strong&gt;x : &lt;em&gt;Store&lt;/em&gt; - Store register &quot;x&quot;'s content in memory ;&lt;br&gt;&#xA;&lt;strong&gt;TFR&lt;/strong&gt; x,y : &lt;em&gt;Transfer&lt;/em&gt; - Copy content of register x into register y ;&lt;br&gt;&#xA;&lt;strong&gt;EXG&lt;/strong&gt; x,y : &lt;em&gt;Exchange&lt;/em&gt; - Swap content of register x and y.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This makes senses but all combinations are available, and it remains consistant as long as instructions set and addressing modes are orthogonal enough. When there's too many exceptions to this schema, all these operations are considered as &lt;strong&gt;moves&lt;/strong&gt; in a global way. Thus the assembler mnemonic &lt;strong&gt;MOV&lt;/strong&gt;, which then recognizes what's to be done by looking at its operands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this has never been a &lt;strong&gt;move&lt;/strong&gt; by opposition with a &lt;strong&gt;copy&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15792" LastActivityDate="2019-12-08T03:54:18.153" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12988" PostTypeId="2" ParentId="12986" CreationDate="2019-12-08T09:45:46.627" Score="10" Body="&lt;p&gt;The earlier 704 also had a decrement part in the instruction, and the 7090 can emulate the 704, so one should look at the smaller instruction set of the 704 for reasons for this design decision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/704/24-6661-2_704_Manual_1955.pdf&quot; rel=&quot;noreferrer&quot;&gt;IBM 704 manual&lt;/a&gt; states on page 12, there are 5 &quot;Type A&quot; instructions which contain both a a decrement and an address field, namely &lt;code&gt;TIX&lt;/code&gt;, &lt;code&gt;TNX&lt;/code&gt;, &lt;code&gt;TXH&lt;/code&gt;, &lt;code&gt;TXL&lt;/code&gt;, &lt;code&gt;TXI&lt;/code&gt; (those instructions also exist for the 709 series). The T in those instructions stands for &quot;transfer&quot;, but that means &quot;transfer of control&quot; (modern jump/branch instructions), not &quot;transfer of register contents&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, &lt;code&gt;TIX&lt;/code&gt; &quot;transfer on index&quot; and &lt;code&gt;TNX&lt;/code&gt; &quot;transfer on no index&quot; &lt;strong&gt;decrement&lt;/strong&gt; the index register, compare it with zero (though it's phrased as if the comparison is with the decrement value, but that's an implementation detail), and depending on the result, store the decremented value in the index register and/or take the branch to the new address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for this is that it's difficult to provide both an increment/decrement value and a limit to compare with in a single instruction (one would need enough bits for both fields). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the limit is zero, then looping through indexes from the lower index to the upper limit requires a negation somewhere. And that's the reason indexing is done by &lt;em&gt;subtracting&lt;/em&gt; the index, and increasing the index is done by &lt;em&gt;decrementing&lt;/em&gt; the index register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also an instruction to &lt;em&gt;increment&lt;/em&gt; the index register (&lt;code&gt;TXI&lt;/code&gt;, transfer with index incremented), but that's an unconditional jump, so for tight loops, the other indexing instructions would be preferred.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As mentioned in the comment above, the PDP computers used a similar technique for indexing, except the two's complement had to be calculated manually, and core locations served as index values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a typical routine (scalar product) that uses indexing, taken from the &lt;a href=&quot;http://bitsavers.org/pdf/mit/computer_center/Coding_for_the_MIT-IBM_704_Computer_Oct57.pdf&quot; rel=&quot;noreferrer&quot;&gt;Coding for the IBM 704&lt;/a&gt; document, so one can see how it was used:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        LXA COUNT,1       load index register&#xA;LOOP    LDQ VECTA+3,1&#xA;        FMP VECTB+3,1&#xA;        FAD ANSWER&#xA;        STO ANSWER&#xA;        TIX LOOP,1,1&#xA;        HPR&#xA;COUNT   PZE 3             a constant&#xA;ANSWER                    originally contains 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2019-12-08T09:52:29.747" LastActivityDate="2019-12-08T09:52:29.747" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12989" PostTypeId="2" ParentId="2848" CreationDate="2019-12-08T15:49:30.287" Score="4" Body="&lt;p&gt;My advice for the first start:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Let the computer slowly warm up to room temperature.&lt;/li&gt;&#xA;&lt;li&gt;Perform a careful &quot;audio test&quot; - I mean tilt the case or slightly shake and hear. If some strange noise appears, it would be better to open it and find a part making the noise. It could be a piece of plastic or something torn off - a wire or some other part.&lt;/li&gt;&#xA;&lt;li&gt;Check all connectors with the metal pins. Is there any sign of rust? If so, better open the case (rust will be probably inside too) and clean it carefully.&lt;/li&gt;&#xA;&lt;li&gt;Once you have opened the case: check any strange things, e.g. stains of some liquids, dust or inflated capacitors.&lt;/li&gt;&#xA;&lt;li&gt;Smell it. Do you detect some &quot;burned electrical circuit&quot; scent?&lt;/li&gt;&#xA;&lt;li&gt;As someone already mentioned: Some of the old computers, like Spectrums, have parts which can degrade, e.g. the membranes, etc. Be ready to replace them. Membranes have often microscopic cracks...&lt;/li&gt;&#xA;&lt;li&gt;Do not open the case if not necessary.&lt;/li&gt;&#xA;&lt;li&gt;Last but not least: be ready to turn it off as soon as you smell something strange. :)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-08T15:49:30.287" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12990" PostTypeId="2" ParentId="3314" CreationDate="2019-12-08T16:00:04.123" Score="2" Body="&lt;p&gt;Writing games those days was a long process, full of &lt;em&gt;write - save - compile - run - crash - load - edit&lt;/em&gt; cycles. It was very frustrating, especially in the case you had only the tape recorder. Microdrives or floppy shorts the save / load time to minimum...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So basically: yes, you can develop the game on the ZX Spectrum itself. The assembler itself takes some memory, but the game is not only code, but there are also a lot of graphics or sprite data, etc. So you could write smaller parts of code, e.g. music routines, graphic routines, intro, each of them debugged, and on the very end of the whole process, you simply load all of those pieces together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have used DevPac (GENS/MONS) at first, then I moved to the PikAsm and V.A.S.T. combination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But of course, cross-compiling / cross-development with another computer was more comfortable, but not accessible to everyone.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-08T16:00:04.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12991" PostTypeId="2" ParentId="2070" CreationDate="2019-12-08T16:09:29.957" Score="2" Body="&lt;p&gt;There are a lot of easy and simple constructions, based on the Z80 CPU. I prefer the simple &lt;a href=&quot;https://searle.x10host.com/z80/SimpleZ80.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Grant Searle's Computer&lt;/a&gt;. If you prefer the more simple way, you could try the ready-made solution, like the &lt;a href=&quot;https://rc2014.co.uk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RC2014 Homebrew Computer&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-08T16:09:29.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12993" PostTypeId="2" ParentId="12964" CreationDate="2019-12-08T20:05:18.273" Score="5" Body="&lt;p&gt;Looking at the previous answers I see everyone has missed an essential feature most system run level 1 commands, and that is that they were amenable to piping. The non-interactive mode is therefore the default in ed, ex, sed, awk, grep etc &lt;/p&gt;&#xA;&#xA;&lt;p&gt;TFTP (Trivial FTP) is also another good example of a stripped down version of FTP used in disk-less boot-up processes to boot from a remote network boot image. No user prompts are emitted as is done in the full-blown FTP.&lt;/p&gt;&#xA;" OwnerUserId="15798" LastEditorUserId="15798" LastEditDate="2019-12-18T21:43:57.040" LastActivityDate="2019-12-18T21:43:57.040" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="12994" PostTypeId="1" CreationDate="2019-12-08T22:21:19.853" Score="13" ViewCount="1245" Body="&lt;p&gt;I am studying basic principles of instruction set architectures and am considering what it would take to not have any instruction decoding at all. I.e., all the control lines of the computer would be found directly in the bits of the instruction word?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a corollary, then, every instruction execution would take exactly one cycle (perhaps with 2 or 3 phases within a cycle, but not several micro-instruction cycles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen one home-brewer with a relay computer talk about that idea, and it grew on me. But I wonder if it is even possible or if it is traded off against variable length instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have found that there are really 3 opposing forces:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Instruction size constant one word vs. variable multiple words.&lt;/li&gt;&#xA;&lt;li&gt;Full word instruction operands for immediate values and absolute addresses vs. address segmentation scheme.&lt;/li&gt;&#xA;&lt;li&gt;Data vs. address bus same size, you can read an address in one memory fetch, vs. address bus bigger than data bus where you need to read an address in multiple memory accesses.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;And these 3 are mutually opposing. You can't have full word instruction operands in a constant instruction, and certainly not if your data bus is smaller than your address bus. E.g., typical 8 bit computer with 16 bit address bus. So the 6502 had to be (1) variable word instructions, (2) full word immediate values, while (3) absolute address values need multiple memory fetches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-8 for contrast had (1) constant word instruction sizes, (2) no way to have full word immediate values or addresses, requiring a segmentation scheme, but (3) data and address bus the same size, or rather, address bus is completely separate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And to that I add now:&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;Instruction decoding mapping instruction word to control line states vs. instructions that have their control line immediately in their bits.&lt;/li&gt;&#xA;&lt;li&gt;Single (or 2-3 phase) vs. variable (multi) step micro-coding.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I know there is the entire RISC vs. CISC debate, but even a RISC processor will have multiple execution cycles for an instruction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wonder, was there ever a computer in use that needed no instruction decoding, i.e., where the control lines were immediately the bits of the instruction word? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would only be possible in wider than 8 bit computers. I think the PDP-8 had a little bit of that, but still not quite. At least a pretty substantial hard wired instruction decoding gate network was there to interpret the bits of the the different instruction groups.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you ave a 32 bit word size, then it could be possible to fit all the control lines into a single word. But still, I find that some of the control lines might have to be repeated to be used in different phases For example, now that I need a full 24 or 32 bit instruction word just for the control lines, I have to load any operands in additional fetches from the instruction pointer, then to go through indirect addressing I will need another fetch from data memory to be interpreted as an address for yet another fetch. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From your experience with odd stuff developed in the past, do you have examples for some of the less conventional ideas I brought up here?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: I received a lot of feedback asking to define my terms better. I will try this here without changing my above text. So let's do a glossary:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Control Line&lt;/strong&gt;: any logic line that controls a logic device, e.g., register output enable, register load, register asynchronous clear, counter increment, counter reset, counter decrement, memory write-enable, tri-state buffer output-enable, bus-transceiver direction, ALU function selection lines, etc. Usually there are dozens of these control lines all over a CPU and the point of instruction decoding is to set the state of these control lines based on the current instruction and other status lines (e.g., flags for the conditional branches, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Instruction Decoding&lt;/strong&gt;: an instruction word is loaded into the instruction register, and that plus various status lines, and finally a micro-instruction counter will be the input of a state-control table. Input is the state lines and output is the control lines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I say &quot;no decoding&quot; in this context means that there is no need for such a state-control table, because the instruction word is comprised plainly of the bits of the control lines, but especially the number of microinstruction cycles is 1 or constant, not variable. I.e., every instruction takes the same number of cycles, without wasting any cycles either. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Cycle&lt;/strong&gt; - a clock cycle, consisting of at least 2 phases, and 2 instantaneous moments. They are: rising edge (instantaneous moment), high state of clock (phase), falling edge (instantaneous moment), low state of clock. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Phase&lt;/strong&gt; - given that any square wave clock signal has these 2 phases (high, and low) and their rising and falling edge moments, many processors require derivative signals. Sometimes called phi-2 or phi' (prime), etc. These are obviously necessary to subdivide a single clock cycle into multiple sub-steps in which different things happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example for different things happening in the phases and moments of a normal square wave clock: rising edge: registers clock in the current state of the data bus or internal data bus, synchronous counters step at the rising edge. Falling edge: that's where a memory address latch may hold the address lines on a shared address/data bus so that in the low phase of the clock signal the data from memory appears on the bus while the address is held in the latch. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Microinstruction Cycle&lt;/strong&gt;: when instructions are executed in multiple micro-instruction steps, for example:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;IR = *IP // load instruction from instruction pointer&lt;/li&gt;&#xA;&lt;li&gt;DP = *IP // load absolute address into data pointer&lt;/li&gt;&#xA;&lt;li&gt;DP = *DP + Y // resolve indirect address adding the Y index&lt;/li&gt;&#xA;&lt;li&gt;AC = AC + *DP + C // add with carry data from memory to accumulator register &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Stuff like that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What's decoding anyway?&lt;/strong&gt; There has also been discussions about whether deriving some states from others is decoding or not? And whether register addresses have to have one line per register. I would say no. Register addresses may be a multi-bit binary number, and the register may decode that with a comparator to derive their line signal if the comparator find its address on the control line bus. In a more monolithic design, a 3-to-8 line decoder would also be &quot;allowed&quot; as it is not state dependent but only changes the &quot;representation&quot; of the register address from a binary number to a single line. Likewise, simple gating is &quot;permitted&quot;. Just not complex state-control-transition tables. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;RISC is the thing:&lt;/strong&gt; By now I have studied more about RISC processors and it is clear to me now that RISC processors allow doing exactly that. With this approach, each instruction takes one cycle, and instead of short instruction words and micro-coding, we have long instruction words and no micro coding. I can see how it is possible to have 2 cycles per instruction one instruction fetch and one instruction execution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Loading from absolute address would require two instructions, not two cycles of one instruction. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;load absolute address as an immediate value into data pointer&lt;/li&gt;&#xA;&lt;li&gt;read memory from data pointer.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Two instructions, each requiring 2 cycles: load the instruction, then load the data. Interesting that thinking this way there isn't even absolute addressing modes any more. Only immediate or implicit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And in that model, indeed there are no &quot;instructions&quot; but only registers output to or loaded from the various busses and enabling certain transformation steps along the data path (inversion, sum, and, etc.)&lt;/p&gt;&#xA;" OwnerUserId="15591" LastEditorUserId="15591" LastEditDate="2019-12-11T03:21:40.167" LastActivityDate="2019-12-16T01:49:46.253" Title="Has there ever been a instruction set architecture that did not require instruction decoding at all?" Tags="&lt;assembly&gt;&lt;instruction-set&gt;&lt;cpu&gt;&lt;minicomputers&gt;" AnswerCount="5" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="12995" PostTypeId="2" ParentId="12994" CreationDate="2019-12-08T22:49:13.663" Score="12" Body="&lt;p&gt;&lt;em&gt;(Preface: The question is a bit misleading, as many of the conditions implied are not well defined. See below)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;First candidate: Transport Triggered Architectures&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Transport_triggered_architecture&quot; rel=&quot;noreferrer&quot;&gt;Transport Triggered Architectures&lt;/a&gt; are not only a special case of single instruction architectures, but should this the 'no decoding' requirement quite nicely. Its only instruction is to transfer a data item between source and destination ports in a single cycle. Instruction is made up solely from addresses of both ports. Functionality is realized according to the port used. In such a system, an accumulator could be addressed by three different ports for Load, Load Inverted and Add. Adding two numbers (R1=R1+R2) would look like &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(transfer) Reg1 (to) Accuport&#xA;(transfer) Reg2 (to) Addport&#xA;(transfer) Accuread (to) Reg1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Each of these instructions would execute in a single cycle.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;RISC&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;RISC instructions sets can be made to have all instructions operating in a single cycle. Heck, with a few exceptions, which easy could be removed, even an AVR as used in many Arduinos might qualify :))&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;VLIW&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The basic idea for single bits or bit groups directly controlling function units is part of several VLIW architectures. The idea is present since very early computer architectures, like the 1955 Zuse Z22, where separate bits encode separate functions, so an instruction can be done in a single drum revolution - or even faster. Z22 instructions were always single machine words. See &lt;a href=&quot;/a/9674/6659&quot;&gt;this answer&lt;/a&gt; for some details.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The question is a bit misleading, as many terms are used in a loose fashion without exact context, like&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;what it would take to not have any instruction decoding at all.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What does '&lt;em&gt;no decoding&lt;/em&gt;' mean in this context? Should each bit just trigger a single (or a group) of units, or can such a signal be made of a group of bits, decoded by a simple static n:m decoder?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I.e., all the control lines of the computer would be found directly in the bits of the instruction word?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What does &lt;em&gt;directly&lt;/em&gt; mean? Must it be a 1:1 relation, or can 4 bits control 10 lines?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As a corollary, then, every instruction execution would take exactly one cycle &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What is a cycle? a single clock, or can it be a fixed number of clocks?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or is this about memory cycles?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(perhaps with 2 or 3 phases within a cycle,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What's a &lt;em&gt;phase&lt;/em&gt;? Would any classic 4 phase system fit as well?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but not several micro-instruction cycles).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So is this question about microcoded vs. random logic? &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have found that there are really 3 opposing forces:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Instruction size constant one word vs. variable multiple words.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If multiple 'phases' are allowed, then multiple words could be read. One per phase.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Full word instruction operands for immediate values and absolute addresses vs. address segmentation scheme.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really clear how this contradicts anything. Addresses could be also be built from multiple instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example assume a 16-bit CPU. Instructions are 16 bits. Loading a (16 bit) register with a 16-bit value, like an address, can be done by using two 8 bit loads, one moving its payload into the upper half of the target register, one into the lower. Or have automatic sign extension on 8-bit load. Or both. That way all values from -128..+127 will need only one instruction to load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this is used by many RISC CPUs in many variations.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Data vs. address bus same size, you can read an address in one memory fetch, vs. address bus bigger than data bus where you need to read an address in multiple memory accesses.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is no inherent need to have address size different to data size. Only if made an &lt;em&gt;arbitrary&lt;/em&gt; requirement.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And these 3 are mutually opposing. You can't have full word instruction operands in a constant instruction,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, but there is no need to do so. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and certainly not if your data bus is smaller than your address bus.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again, no need to do so.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So the 6402&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;6402? I assume this is meant to read 6502.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;had to be (1) variable word instructions, (2) full word immediate values, while (3) absolute address values need multiple memory fetches.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Within the design they have chosen, yes, but these were design decisions, not anything mandated by inherent contrary issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8008 in contrast did not have any 16 bit loads, despite the use of HL as 16 bit memory address. Each constant address had to be moved into HL with two instructions loading either part.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The PDP-8 for contrast had [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again, these were design decisions made by DEC, not anything inherent to CPU design.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Instruction decoding mapping instruction word to control line states vs. instructions that have their control line immediately in their bits.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This sentence doesn't make any sense. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Single (or 2-3 phase) vs. variable (multi) step micro-coding.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;See above.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but even a RISC processor will have multiple execution cycles for an instruction.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not necessarily. It is quite possible to create RISC instruction sets that are made up from only single word instructions, all executing within a 'single cycle'. The question isn't whether it's possible, but whether it makes sense.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I wonder, was there ever a computer in use that needed no instruction decoding, i.e., where the control lines were immediately the bits of the instruction word?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again, what kind of decoding is this about?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This would only be possible in wider than 8 bit computers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why? The same way a 16-bit address can be made up from two 8-bit loads, it can be made up from 16 one-bit load instructions.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I think the PDP-8 had a little bit of that, but still not quite. At least a pretty substantial hard wired instruction decoding gate network was there to interpret the bits of the the different instruction groups.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A n:m decoder is neither a big issue nor much of a performance issue.  Just think about ALU operations - there are many possible, but only a few make sense at the same time (if the hardware would be able to do them at simultaneous at all). So why create an encoding that wastes codespace? Combining mutually exclusive functions into a bit group is a quite sensible way to save code size.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;From your experience with odd stuff developed in the past, do you have examples for some of the less conventional ideas I brought up here?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Don't get me wrong, but I have a hard time to see anything in your write-up that hasn't been solved many times before. Most of the points mentioned (as I understand them) have been thought about and used quite often.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In total this feels a bit as if there is a confusion between what a cycle is, a phase and an instruction. Further it's about decoding in decoding bit fields vs. decoding as a pipeline stage. Pipelines may be another part of the 'Gordian knot' you'll try to cut - and not at least the basic duality of instruction cycles vs. instruction throughput.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;It may be helpful to specify exactly what your goals are ... there is a good chance that already preparing a new question with strict definitions may clear up the difference between requirements added at will vs. technological implications.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-09T21:57:12.457" LastActivityDate="2019-12-09T21:57:12.457" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12997" PostTypeId="1" CreationDate="2019-12-09T09:58:13.760" Score="3" ViewCount="85" Body="&lt;p&gt;The extended memory controller on the PDP-8 (the original one, sometimes called the Straight-8) &lt;a href=&quot;http://www.faqs.org/faqs/dec-faq/pdp8-models/&quot; rel=&quot;nofollow noreferrer&quot;&gt;apparently had difficulty when selecting a datafield that didn't exist:&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;On machines with 8K or more, an attempt to change the data field to a non-existant field caused a bizarre double-indirect and skip instruction execution that must be accounted for in memory diagnostics.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What is this instruction execution and why did it happen, and what is it supposed to achieve? How can it be double indirect, when that's an addressing mode that does not exist on the PDP-8?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2019-12-09T09:58:13.760" Title="What happens on the Straight-8 when changing to a non-existant data field?" Tags="&lt;pdp-8&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12998" PostTypeId="1" AcceptedAnswerId="13094" CreationDate="2019-12-09T10:34:13.940" Score="6" ViewCount="789" Body="&lt;p&gt;I have purchased a 64GB compact flash UDMA card and am unable to boot up in DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machine I'm running has a Pentium 1.6Ghz process in it just to give you an idea about how &quot;modern&quot; it is compared to say, a 486. The BIOS can see the drive fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I boot the machine using a Windows 98 SE floppy disk (or even a DOS6.22 boot disk), DOS can see the drive perfectly and I can easily work with files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have run clearhdd.exe and fdisk.exe to set the drive up, which worked without any problems at all. After that, I used the &lt;code&gt;format c: /s&lt;/code&gt; command which successfully worked and copied the files across.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the machine boots up though, I get a black screen with a blinking cursor, that's it. I have successfully used a 4GB CF card with this same machine and it booted fine which leads me to believe it's the CF card, however, DOS can see it perfectly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that it's not booting because it's looking at the wrong &quot;sector&quot; or part of the disk responsible for booting? I'm not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="13475" LastActivityDate="2020-12-28T18:22:36.157" Title="64GB compact flash not booting up in DOS" Tags="&lt;ms-dos&gt;&lt;boot&gt;" AnswerCount="3" CommentCount="13" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="12999" PostTypeId="2" ParentId="12544" CreationDate="2019-12-09T10:52:06.493" Score="1" Body="&lt;p&gt;From my vague recollections there was one configuration file that tied all the loose ends - that is, when a phone call came in the chat scripts tied to that tty came to life and did their handshakes. On my then Sun machines it was called /etc/system(s) or maybe /etc/uucp/system(s), with tty, baud rate, and maybe chat script path, but I have no way of ascertaining this. But I recall having one of these in my bedroom and every now and again a call would come in the middle of the night with NNTP updates from my office machines ...&lt;/p&gt;&#xA;" OwnerUserId="15798" LastActivityDate="2019-12-09T10:52:06.493" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13001" PostTypeId="2" ParentId="7331" CreationDate="2019-12-09T12:12:37.237" Score="1" Body="&lt;p&gt;Each byte is 2 bits of attributes and 6 bits of pixels.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bit 7: 1 = Flashing  &lt;/li&gt;&#xA;&lt;li&gt;Bit 6: 1 = Lower brightness (or &quot;darkness&quot; if you want so)&lt;/li&gt;&#xA;&lt;li&gt;Bit 5: &quot;Leftmost&quot; pixel (1 = white, 0 = black)&lt;/li&gt;&#xA;&lt;li&gt;...&lt;/li&gt;&#xA;&lt;li&gt;Bit 0: &quot;Rightmost&quot; pixel&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;PMD-85 version 3 has four levels of brightness instead (on a black paper): 00 is the most bright white, 11 is dark grey. There was a possibility to use an RGB output with green (00), red (01), blue (10) and magenta (11) color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that 16-bytes stripes of unused memory were often used for short routines, usable from BASIC-G too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Disclaimer: I am the author of the article mentioned in the question.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-09T12:12:37.237" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13002" PostTypeId="1" CreationDate="2019-12-09T14:00:17.110" Score="0" ViewCount="260" Body="&lt;p&gt;A word of caution regarding this question: I'm more a userland than kernel person but have this nagging concern which I think belongs to kernel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When configuring a system one decides on peripherals and assigns various tty's accordingly. Occasionally one had to consult termcaps and select or insert an entry for getty to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The procedure was similar for character and block devices, and if I recall also extended to graphics terminals with frame buffers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The termcaps file was large and populated by all previously known and many obsolete terminal types.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And all these devices plugged and played once assigned correctly, including SCSI disk units.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then came USB, and I noticed that open source kernels add them outside of termcaps, and mostly not plug-and-play, with each flavor of the unices needing a highly idiosyncratic procedure to plug and finally play.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question would these (especially the USB mass storage devices) not have been p-n-p configurable through termcaps, as I notice that at least in OpenBSD, they simply join the kernel through assigned SCSI ports?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related issue - I understand that Dennis Ritchie at AT&amp;amp;T enhanced stdio with streams to support hot swap plug-and-play (SysV), and if so would it not be possible to implement something similar in conjunction with termcaps to ease USB userland support on unices?&lt;/p&gt;&#xA;" OwnerUserId="15798" LastActivityDate="2019-12-13T08:36:34.330" Title="Role of Termcap under contemporary unices" Tags="&lt;unix&gt;&lt;terminal&gt;&lt;scsi&gt;&lt;usb&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13003" PostTypeId="2" ParentId="13002" CreationDate="2019-12-09T14:33:43.177" Score="5" Body="&lt;p&gt;Erm. I think here are a few misunderstandings at work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Termcap&lt;/em&gt; is a descriptional database about terminal features (*1), not device configurations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In sense of Unix terminals aren't devices, but something connected to a device. In a more general sense, Unix-devices are (*2) interfaces that can be accessed using OS measures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be this basic mixup between the use of 'Device' as a generic term for some physical ... well ... device, with the notation of 'Device' in Unix. So for now, lets call them &lt;em&gt;physical-device&lt;/em&gt; and &lt;em&gt;Unix-device&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Termcap&lt;/em&gt; describes an application layer used on top of communication via a Unix-device for example a serial interface - but others are possible as well. The operating system doesn't care about &lt;em&gt;termcap&lt;/em&gt; in particular or terminal functions at all. Only device parameters are handled by the driver - and not part of &lt;em&gt;termcap&lt;/em&gt;. All it handles is I/O to/from the Unix-device. Obeying/using &lt;em&gt;termcap&lt;/em&gt; (or not) is up to either application, which includes (hopefuly) the shell in use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SCSI and USB are not terminals, but devices. They are handled as such by device drivers. &lt;em&gt;Termcap&lt;/em&gt; has, as said, no role. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;It feels like the question is more about device drivers than terminals or termcaps, and here about some imagined standard. There is none. The way to do so under Unix are device drivers, and they are a breed of hermits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In sense of Unix-devices, SCSI and even more so USB are a bit special, as both are designed by default to handle a wide variety of physical-devices, concurrent, using the same interface. So this calls for layered model. A basic driver handling the USB host controller and on top drivers for either physical-device connected (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's were one point were all the various ways of implementations come in, as some argue that handling such physical-devices is a userland issue, while others prefer device drivers to do so. It gets complicated by the fast that many of them are already known to the system under other aspects, thus it is desirable to have them look like earlier incarnations - like a USB-Serial interface plugged to USB producing a TTY device entry instead of having to be handled by some user land library. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And mass storage added another twist, as USB mass storage is handled quite similar to SCSI mass storage, thus having them look like an SCSI interface would save many hours of programming and debugging by simply letting the SCSI mass storage driver do the work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, a physical-device can as well be represented in several ways, like as a 'raw' or 'cooked' and the later even in multiple ways. All of this can be done by either a stack of drivers, or a single driver offering multiple views. There isn't a best way, not even a standard one. Every Unix and every device on its own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what at first looks like an easy &lt;em&gt;Tower of Hanoi&lt;/em&gt; game, quickly runs into nightmarish &lt;em&gt;Jenga&lt;/em&gt; with uneven sized blocks.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Much the same way as printcap is a special case for printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Well, devicedrivers can be made for next to anything. This is about physical devices in the primary sense used with Unix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Including hubs, though, they are usually handled transparent by the generic USB driver due their basic nature to USB enumeration.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-09T15:08:54.650" LastActivityDate="2019-12-09T15:08:54.650" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13004" PostTypeId="2" ParentId="13002" CreationDate="2019-12-09T15:01:09.643" Score="10" Body="&lt;p&gt;The role of &lt;a href=&quot;https://en.wikipedia.org/wiki/Termcap&quot; rel=&quot;noreferrer&quot;&gt;Termcap&lt;/a&gt; in contemporary Unix-style systems is the same as it always has been: it provides a library and database allowing software to adapt to the varying capabilities of different terminals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These terminals can be physical (connected to a serial port, typically) or virtual, provided by any one of a number of terminal emulators (the console on Unix-style systems, or a GUI terminal emulator, or &lt;code&gt;tmux&lt;/code&gt;, or &lt;code&gt;screen&lt;/code&gt;, or PuTTY...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of this concerns mass storage devices, whatever the way they are connected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays however, &lt;a href=&quot;https://en.wikipedia.org/wiki/Terminfo&quot; rel=&quot;noreferrer&quot;&gt;Terminfo&lt;/a&gt; is more commonly-used than Termcap.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-12-09T15:09:14.563" LastActivityDate="2019-12-09T15:09:14.563" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13005" PostTypeId="5" CreationDate="2019-12-09T15:38:25.140" Score="0" Body="&lt;p&gt;For questions about the different versions of the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6581&quot; rel=&quot;nofollow noreferrer&quot;&gt;SID chips&lt;/a&gt;, used in various Commodore machines. Namely 6581 / 6582 / 8580.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="11446" LastEditDate="2019-12-09T16:04:58.883" LastActivityDate="2019-12-09T16:04:58.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13006" PostTypeId="4" CreationDate="2019-12-09T15:38:25.140" Score="0" Body="For questions about the different versions of the SID chips, used in various Commodore machines" OwnerUserId="11446" LastEditorUserId="11446" LastEditDate="2019-12-09T16:47:10.540" LastActivityDate="2019-12-09T16:47:10.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13007" PostTypeId="2" ParentId="12998" CreationDate="2019-12-09T15:59:49.180" Score="5" Body="&lt;p&gt;I've run into that issue before.  Try a smaller card.  Some systems do not like to boot off of cards greater than 16 GB.  Some 32 GB...&lt;/p&gt;&#xA;" OwnerUserId="481" LastActivityDate="2019-12-09T15:59:49.180" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13008" PostTypeId="2" ParentId="12998" CreationDate="2019-12-09T18:08:49.867" Score="6" Body="&lt;ol&gt;&#xA;&lt;li&gt;Check the &lt;a href=&quot;https://en.wikipedia.org/wiki/Master_boot_record&quot; rel=&quot;noreferrer&quot;&gt;MBR record&lt;/a&gt;. Did you use the &quot;fdisk /MBR&quot; command?&lt;/li&gt;&#xA;&lt;li&gt;Some of those cards do not support the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cylinder-head-sector&quot; rel=&quot;noreferrer&quot;&gt;CHS mode&lt;/a&gt; (Cylinder / Head / Sector), especially the larger ones. Try the smaller card.&lt;/li&gt;&#xA;&lt;li&gt;Check if the BIOS supports the LBA mode. Some older BIOSes can't...&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Generally, booting from the hard disk (or CF in this case) perform reading MBR from the very first sector of the disk. There is a small routine (just a few hundreds of bytes), which looks into the master partition table (it is a part of MBR too), find a bootable partition, reads its boot sector and perform a boot code from this sector. Reading the very first sector should be easy, but maybe there is a problem finding the bootable partition.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-09T18:08:49.867" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13009" PostTypeId="2" ParentId="12994" CreationDate="2019-12-09T18:28:48.360" Score="13" Body="&lt;p&gt;&lt;em&gt;Horizontal Microcode&lt;/em&gt; works exactly as you describe - one bit for each possible internal control line (&lt;em&gt;Vertical Microcode&lt;/em&gt; saves instruction bits by encoding sets of N mutually-exclusive control lines with log(N) bits, with appropriate demultiplexers in place).  In theory one &lt;em&gt;could&lt;/em&gt; use this as the primary instruction level, but of course it would be very expensive.  Whether anyone &lt;em&gt;actually did this&lt;/em&gt; I cannot say.  But it wouldn't surprise me.&lt;/p&gt;&#xA;" OwnerUserId="15802" LastActivityDate="2019-12-09T18:28:48.360" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13010" PostTypeId="1" CreationDate="2019-12-09T22:44:09.477" Score="4" ViewCount="287" Body="&lt;p&gt;Many dialects of 8-bit BASIC allow ‘crunched’ source; that is, most spaces can be ignored between keywords:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FORX=1TO10&#xA;20 PRINTX,X^2&#xA;30 NEXTX&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;After Microsoft BASIC-80 Rev. 5.x, however, spaces were required:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR X=1 TO 10&#xA;20 PRINT X,X^2&#xA;30 NEXT X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Other later BASIC interpreters (such as Locomotive BASIC on the Amstrad CPC) required spaces, while others didn't (for example BBC BASIC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for a program (Linux-capable preferred) that will reliably insert the necessary spaces into BASIC text. I'm not looking for the ability to detokenize: assume I have the text available.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2019-12-11T04:25:50.003" LastActivityDate="2019-12-11T04:25:50.003" Title="Looking for a BASIC decruncher: inserting spaces between keywords" Tags="&lt;basic&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13011" PostTypeId="2" ParentId="13010" CreationDate="2019-12-09T23:52:37.900" Score="6" Body="&lt;p&gt;If you're happy with a .net core solution you could take my MS Basic clone, load the code and then save it again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/peteri/ClassicBasic&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/peteri/ClassicBasic&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would need to remove the EditLine function in the GlassTeletype which uses Win32 interop to provide an line editor (invoked by edit nnnn where nnnn is the linenumber) and maybe give it a little tweak to get rid of the BOM when it saves.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2019-12-09T23:52:37.900" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13012" PostTypeId="2" ParentId="12994" CreationDate="2019-12-10T00:35:27.500" Score="7" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Pilot_ACE&quot; rel=&quot;noreferrer&quot;&gt;Pilot ACE&lt;/a&gt;, commercialized as the &lt;a href=&quot;http://www.ourcomputerheritage.org/ccs-n1x3.pdf&quot; rel=&quot;noreferrer&quot;&gt;English Electric DEUCE&lt;/a&gt;, had an instruction set which looks pretty peculiar to modern sensibilities. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It had no explicit 'opcode' field, instead just source and destination addresses (as well as 'next instruction' address and timing-related fields).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The address fields surely required some decoding, but then again it's difficult to believe any 32-register arrangement can afford 32 separate bits to select a register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if this question is really about determining which operation was to be executed then I think the no-opcode format of DEUCE fits the bill.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-12-10T00:35:27.500" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13013" PostTypeId="2" ParentId="2848" CreationDate="2019-12-10T05:16:25.373" Score="4" Body="&lt;p&gt;There can be no one size fits all recommendation for all vintage computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example some DEC power supplies incorporate an over voltage circuit that short-circuited the output of the power supply. If you attempted to apply power with the power supply disconnected from the computer this circuit would trigger. If you made major changes to the internal power supply load in the full sized boxes by removing all the memory and i/O cards in one change you could trigger this circuit. Taking the cards out in stages and adjusting the power supply voltage avoided this problem. The thinking behind this design was a replacement, modular power supply was only worth a small fraction of the total system cost. An over voltage power supply could instantly do tens of thousands of dollars worth of damage in a minicomputer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As well as looking for signs of leaking electrolytic capacitors, look for capacitors that have changed shape e.g. tops that have slightly bulge up. For an old system performing a visual inspection, assuming all is good then taking the final step of applying full mains power is asking for a loud bang, possibly with a small puff of smoke, the failure of the system to start, with smell of an electrolytic capacitor that has expired, a distinctive smell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a piece of equipment called a variac which allows you to control the mains voltage applied to a system. I would use a variac to very gradually increase the mains voltage while monitoring capacitor and power supply voltages. Depending on the circuits and physical layout this has the potential to deliver a fatal shock. What you are attempting is to reform the electrolytic capacitors. There is a high probability of very old components changing value. Due to manufacturing tolerances electrolytic capacitors tended to be sold with very wide tolerances compare to other components. Good designers assumed the worst and tended to specify electrolytic capacitors rated with a higher capacitance than absolutely necessary for good circuit behaviour. This means you have a reasonable chance of success. A good precaution is to use a Cathode Ray Oscilloscope (CRO) or modern equivalent to check power supply ripple. A Digital Multimeter (DMM) could also be used. Very old circuits may be specified for analog multimeters with an Ohms per volt (Ω/V) and using the wrong meter could give erroneous readings. The problem with a CRO is you may not know what is acceptable ripple and what is unacceptable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two types of integrated sockets used in vintage equipment and the more expensive machined pin type should be more reliable. The type using spring metal contacts can have reliability issues. Soldered joints should be more reliable. Check for hairline cracks on the Printed Circuit Boards (PCB) copper tracks. Dry or bad solder joints can cause problems and may be found during a close visual inspection. Search the internet for any active user groups and investigate known issues. Visual display units contain even more hazards due to the Extra High Tension (EHT) voltage supply and the dangers associated with a Cathode Ray Tube (CRT).&lt;/p&gt;&#xA;" OwnerUserId="15794" LastActivityDate="2019-12-10T05:16:25.373" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13014" PostTypeId="1" AcceptedAnswerId="13021" CreationDate="2019-12-10T18:35:04.423" Score="10" ViewCount="759" Body="&lt;p&gt;The Sega Dreamcast was released in 1999 (1998 in Japan) at just the time that the competition for 3D graphics on PCs was intensifying. It's my assumption that a high-end 1999 Pentium II PC with 3Dfx Voodoo2 SLI rig or new GeForce would run circles around the much cheaper Dreamcast. However, I'm not sure this wasn't mainly because of the PC just having a much faster CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All I have to compare today is a Pentium 1 with a single Voodoo2 card. Aside from slightly higher resolution on the PC, it seems comparable to the Dreamcast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which PC 3D card/CPU combination would one have needed to purchase in 1999 just to outshine the Dreamcast's graphical performance?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-12-13T10:17:19.133" Title="What PC graphics tech outperformed Sega Dreamcast in 1999?" Tags="&lt;history&gt;&lt;ibm-pc&gt;&lt;graphics&gt;&lt;performance&gt;&lt;sega&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13015" PostTypeId="2" ParentId="13010" CreationDate="2019-12-11T01:29:34.673" Score="7" Body="&lt;p&gt;Here's something that should do the trick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's written in AWK. Any language I picked will be the wrong language. awk (or gawk) is everywhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Copy and paste it into a file (say, expand.awk).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;awk -f expand.awk crunched.bas &amp;gt; uncrunched.bas&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The script:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# License: Creative Commons 0 https://creativecommons.org/share-your-work/public-domain/cc0/&#xA;# Assumes all uppercase, and inability to embed quotes in quoted strings.&#xA;# Basic philosophy is to break out the quoted strings, and then process&#xA;# the individual statements separated by colons. Then put it all back&#xA;# together again.&#xA;BEGIN {&#xA;    # list of keywords, EXCEPT for 'TO', it's handled special&#xA;    keywords=&quot;OPEN:CLOSE:CLEAR:INPUT:IF:THEN:ELSE:FOR:NEXT:GOTO:GOSUB:LINE:READ:DEF:DIM:PRINT&quot;;&#xA;    split(keywords, keylist, &quot;:&quot;);&#xA;}&#xA;&#xA;{&#xA;    # split out the quoted strings. They will be even fields when done.&#xA;    split($0, a, &quot;\&quot;&quot;);&#xA;    for(i = 1; i &amp;lt;= length(a); i++) {&#xA;        if (i % 2 == 0) {&#xA;            # quoted string, skip it&#xA;            continue;&#xA;        }&#xA;        # expand this chunk of the line&#xA;        a[i] = expand_line(a[i]);&#xA;    }&#xA;&#xA;    # rebuild the line&#xA;    line = &quot;&quot;;&#xA;    for(i = 1; i &amp;lt;= length(a); i++) {&#xA;        p = a[i]&#xA;        if (i % 2 == 0) {&#xA;            # quoted string, add the quotes back&#xA;            p = &quot;\&quot;&quot; p &quot;\&quot;&quot;;&#xA;        }&#xA;        line = line p;&#xA;    }&#xA;    # clean up PRINT&quot; and INPUT&quot;&#xA;    # if these happen to be in quoted strings, kind of out of luck.&#xA;    gsub(&quot;PRINT\&quot;&quot;, &quot;PRINT \&quot;&quot;, line);&#xA;    gsub(&quot;INPUT\&quot;&quot;, &quot;INPUT \&quot;&quot;, line);&#xA;&#xA;    # out it goes&#xA;    print line;&#xA;}&#xA;&#xA;function expand_line(line, i, k, l) {&#xA;    # break up in to statements&#xA;    split(line, statements, &quot;:&quot;);&#xA;    for(i = 1; i &amp;lt;= length(statements); i++) {&#xA;        # expand the keywords for each statement&#xA;        for(k = 1; k &amp;lt;= length(keylist); k++) {&#xA;            statements[i] = expand(statements[i], keylist[k]);&#xA;        }&#xA;        # because of GOTO, TO (of FOR TO NEXT) is handled special&#xA;        statements[i] = expand_to(statements[i]);&#xA;    }&#xA;    # rejoin with the :&#xA;    line = statements[1];&#xA;    l = length(statements);&#xA;    if (l == 1) {&#xA;        return line;&#xA;    }&#xA;    for(i = 2; i &amp;lt;= l; i++) {&#xA;        line = line &quot;:&quot; statements[i];&#xA;    }&#xA;    return line;&#xA;}&#xA;&#xA;&#xA;function expand(line, keyword) {&#xA;    # for each key word, check for space at each end&#xA;    rx=keyword &quot;[^ ]&quot;;&#xA;    if (match(line, rx) &amp;gt; 0) {&#xA;        gsub(keyword, keyword &quot; &quot;, line);&#xA;    }&#xA;    rx=&quot;[^ ]&quot; keyword;&#xA;    if (match(line, rx) &amp;gt; 0) {&#xA;        gsub(keyword, &quot; &quot; keyword, line);&#xA;    }&#xA;&#xA;    return line;&#xA;}&#xA;&#xA;function expand_to(line) {&#xA;    # hide any GOTOs&#xA;    gsub(&quot;GOTO&quot;, &quot;xxx&quot;, line);&#xA;&#xA;    # fix the TO&#xA;    if(match(line, &quot;TO[^ ]&quot;) &amp;gt; 0) {&#xA;        gsub(&quot;TO&quot;, &quot;TO &quot;, line);&#xA;    }&#xA;    if(match(line, &quot;[^ ]TO&quot;) &amp;gt; 0) {&#xA;        gsub(&quot;TO&quot;, &quot; TO&quot;, line);&#xA;    }&#xA;&#xA;    # put the GOTOs back&#xA;    gsub(&quot;xxx&quot;, &quot;GOTO&quot;, line);&#xA;    return line;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2019-12-11T01:29:34.673" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13016" PostTypeId="1" CreationDate="2019-12-11T01:58:08.163" Score="13" ViewCount="2199" Body="&lt;p&gt;Actually, unless there are actual design notes from WDC available, the&#xA;question is really one too long for the title field: &quot;What, precisely,&#xA;are the disadvantages of having a version of the WDC 65816 with a&#xA;16-bit data bus and/or non-multiplexed address bus as compared to the&#xA;advantages those would give?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All (non-soft¹) versions of the WDC 65816 that I'm aware of have an&#xA;external interface with an 8-bit data bus and the top 8 bits of the&#xA;address bus multiplexed on the data bus pins. Thus, two cycles are&#xA;required for 16-bit data accesses (e.g., &lt;code&gt;LDA&lt;/code&gt; with the &lt;code&gt;m&lt;/code&gt; bit set)&#xA;and external logic is required to latch the top 8 bits of the address&#xA;lines which also may introduce additional timing constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This does allow the chip to fit into a 40-pin package, which seems&#xA;like a reasonable option to make available, but that doesn't preclude&#xA;also having a version in a larger package. Four years earlier the&#xA;Motorola 68000 was first made available in a 64-pin DIP package with&#xA;separate 24-bit address and 16-bit data buses, so the technology to do&#xA;this at reasonable cost had long been available. And since then, of&#xA;course, many other high-pin-count packagings have become common, yet&#xA;even now WDC offers nothing larger than 44 pin (PLCC and QFP)&#xA;packages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nor does a 40-pin package preclude having a full 16-bit external data&#xA;bus, as the Intel 8086 did, with its 16-bit external data bus&#xA;multiplexed on to the 20 bit external address bus. This need not even&#xA;mean that separate 8- and 16-bit data bus versions need to be&#xA;manufactured: in 1990 Motorola replaced the MC68008 (a 68000 with an&#xA;8-bit external data bus) with the MC68HC001, which allowed selection&#xA;of external data bus width at reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why the lack, even to this day, of &quot;full 16-bit&quot; external&#xA;interfaces, as offered by other early 16-bit CPU vendors? What&#xA;disadvantages to the various forms of the full 16-bit external&#xA;interfaces am I missing?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹I.e., chips you can buy off the shelf, as opposed to FPGA or ASIC&#xA;cores you can integrate yourself into any package you like.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-05-07T22:41:55.430" Title="Why isn't the WDC 65816 available in &quot;externally&quot; 16-bit versions?" Tags="&lt;65816&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13017" PostTypeId="2" ParentId="13016" CreationDate="2019-12-11T01:58:08.163" Score="4" Body="&lt;p&gt;The advantage of the 8-bit external data bus and multiplexing of the&#xA;top 8 bits of the address bus in the first release of the 65816 seems&#xA;clear. There were actually two versions of the chip: the W65C816S as&#xA;described in the question and the W65C802. &lt;a href=&quot;https://en.wikipedia.org/wiki/WDC_65C816#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;According to&#xA;Wikipedia&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[The] 65C802...was identical inside to the 65C816. Both were&#xA;  produced on the same fabrication lines and diverged only during the&#xA;  last metalization stages when the chip was being connected to the&#xA;  external pins. In the 65C802, those pins had the same layout as the&#xA;  original 6502, which allowed it to be used as a drop-in replacement&#xA;  while still allowing the 16-bit processing of the CPU to be used.&#xA;  However, as it used the original pinout it had only 16 addressing&#xA;  pins, and could therefore only access 64 kB of external memory.&#xA;  Typically, when hardware manufacturers designed a project from the&#xA;  ground up, they used the 65C816 rather than the 65C802, resulting in&#xA;  the latter being withdrawn from production.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But this doesn't explain why all versions of the 65816 continued using&#xA;the external 8-bit interface even after the 65802 was discontinued.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-12-11T01:58:08.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13018" PostTypeId="2" ParentId="13010" CreationDate="2019-12-11T02:16:19.833" Score="1" Body="&lt;p&gt;Applesoft BASIC appears to not care about whitespace, but it gets a little weird with &lt;code&gt;AT&lt;/code&gt;/&lt;code&gt;ATN&lt;/code&gt;/&lt;code&gt;TO&lt;/code&gt;.  For example, you can write &lt;code&gt;A TO X AT O&lt;/code&gt;, but if you crunch the whitespace out it will instead be parsed as &lt;code&gt;A TO XA TO&lt;/code&gt;.  For everything else, whitespace is ignored.  &lt;code&gt;ON ERR GO TO&lt;/code&gt; becomes &lt;code&gt;ONERR GOTO&lt;/code&gt;.  The trick when scanning is to find the longest match (&lt;code&gt;ON&lt;/code&gt; is also a valid keyword).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know how various dialects of BASIC compare in this respect.  Just be aware that not everything that appears to ignore whitespace actually does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've written code that converts a text file with an Applesoft BASIC program to tokenized form, as well as code that converts the tokenized program to text.  They're built into &lt;a href=&quot;http://a2ciderpress.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;CiderPress&lt;/a&gt;.  You can find the C++ source for the parser &lt;a href=&quot;https://github.com/fadden/ciderpress/blob/master/app/BasicImport.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, and the pretty-printer &lt;a href=&quot;https://github.com/fadden/ciderpress/blob/master/reformat/BASIC.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  If your sources were in Applesoft you could launder them quite easily.  For anything else some coding will be required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(There's a comment in the parsing code with a chunk of the 6502 code from Applesoft, so you can see how it actually parses &lt;code&gt;AT&lt;/code&gt;/&lt;code&gt;ATN&lt;/code&gt;/&lt;code&gt;TO&lt;/code&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2019-12-11T02:16:19.833" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13019" PostTypeId="2" ParentId="13016" CreationDate="2019-12-11T04:15:47.670" Score="9" Body="&lt;p&gt;The 65816 is intended as an upgrade path to existing 6502 customers. Keeping it 8 bit was a sensible decision from a user view as it offers&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Easy upgrade of existing designs&lt;/li&gt;&#xA;&lt;li&gt;Fully compatible with existing software&lt;/li&gt;&#xA;&lt;li&gt;Standard 40 pin package needs less thru holes and offers cheaper handling&lt;/li&gt;&#xA;&lt;li&gt;Only a single latch is needed to use the extended address range&lt;/li&gt;&#xA;&lt;li&gt;Only standard 8 bit external components are needed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Especially the later are important for cost consideration. For manufacturing every hole counts, as it goes down in time to drill and thus cost. In 1983 16 bit components (RAM/ROM) were rather rare and expensive. With an 8 bit design a number of standard (EP)ROM and RAM chips were defined just by size needed, while a 16 bit data bus always requires at least two of each. After all, which design past prototype state isn't cost sensitive. The 65xx series was always targeted at a low cost/embedded applications. In fact, its target market was much like Intel envisioned for the 8086 as being an upgrade path for 8080/85 users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike Intel, which designed a 16 bit CPU and made 8 bit compatible (*1), WDC stayed 8 bit which made sense for CPU design as it simplified development due&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Basic internal structure could be kept from 65C02&lt;/li&gt;&#xA;&lt;li&gt;No changes in basic address generation&lt;/li&gt;&#xA;&lt;li&gt;no need for adding an 8/16 bit bus protocol to access bytes in a word&lt;/li&gt;&#xA;&lt;li&gt;no need for instruction queue management&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Going that route, the whole project was kept small enough to be handled by resources a small company like WDC could provide - without putting its future at risk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside being comparably easy to create, going 16 bit bus doesn't gain as much as one may assume at first. After all, performance is much about memory bandwidth, isn't it? The 8088 vs. 8086 is a great benchmark here, as both use exactly the same EU (Execution Unit; *1) while only differing in the bus width the BIU (Bus Interface Unit) uses to access memory. While in theory the 8086 should deliver about twice the performance due doubling the bandwidth at the same clock rate, real world performance gain is just about 30-40%. This is even more remarkable as the BIU design does work quite well in utilizing the bus close to 100% (*2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while doubling the bus width will always deliver less than double the speed, simply doubling the clock frequency of a design will do so without any uncertainty. By 1983 Memory had gotten up to a point where a 4 MHz 6500 style design was easy to achieve, quadrupling thruput without any jitter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: Staying 8 bit offered many advantages in design and for users, while avoiding unnecessary effort and cost.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least, as a side effect the 65802 could be created in addition, offering a drop in replacement to use 16 bit features with in existing 65C02 designs.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - For most parts the EU can be seen as the 'real' CPU core of the 8086&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Much of this comes due single byte access, but as well by unaligned memory words and jump targets, which will slow a 16 bit bus down to 8 bit operation. And while new software could take this into account, existing will not. A worst case example here may be Applesoft BASIC, were almost all &lt;a href=&quot;https://fadden.com/apple2/dl/zero-page.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;pointers in Zero Page&lt;/a&gt; as at odd addresses. For 8 bit noone cared, with 16 bit it's deadly.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-07T13:36:05.330" LastActivityDate="2020-05-07T13:36:05.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13020" PostTypeId="2" ParentId="13016" CreationDate="2019-12-11T05:38:09.013" Score="11" Body="&lt;p&gt;The 65816 physically has an 8-bit ALU, though many of the internal registers are now 16 bits wide.  It therefore takes an extra cycle to perform each ALU operation in 16-bit mode, and this helpfully gives the needed time to get the extra data over the data bus (which remains very simple to interface).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no part of the core where a 16-bit data bus is available to be exposed, even in the semi-custom versions of the 65816 core that WDC still offers for embedded systems developers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would of course be possible to design a new core with a wider ALU and external data bus, and thus with higher performance on 16-bit operations.  It would even be possible to introduce pipelining and caching to further improve performance.  But the result would only be 65816 ISA compatible; it would not be a 65816.  It would also be larger, more power hungry, more expensive (not least due to the more complex package required to expose the wider bus), and &lt;em&gt;much&lt;/em&gt; less hobbyist friendly.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-12-11T05:38:09.013" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="13021" PostTypeId="2" ParentId="13014" CreationDate="2019-12-11T10:42:02.380" Score="13" Body="&lt;p&gt;&lt;em&gt;On paper&lt;/em&gt;, based on the fill rate only, all the high-end graphics adapters available on PC in 1999 were at least as powerful as the Dreamcast’s PowerVR2:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerVR#Series2_(NEC)&quot; rel=&quot;noreferrer&quot;&gt;CLX2&lt;/a&gt; in the Dreamcast ran at 100MHz, with one operation/pixel/texture per clock, and memory bandwidth of 0.8GB/s;&lt;/li&gt;&#xA;&lt;li&gt;the PMX1 (PC-compatible PowerVR2) ran at 125MHz, again with one operation per clock, and memory bandwidth of 1GB/s;&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units#Pre-GeForce&quot; rel=&quot;noreferrer&quot;&gt;Riva TNT&lt;/a&gt; ran at 90MHz with two operations per clock and memory bandwidth of 1.76GB/s;&lt;/li&gt;&#xA;&lt;li&gt;the Riva TNT2 (March 1999) started at 125MHz with two operations per clock and memory bandwidth of 2.4GB/s and up;&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units#Rage_series&quot; rel=&quot;noreferrer&quot;&gt;Rage 128&lt;/a&gt; started at 103MHz with two operations per clock and memory bandwidths of 1.648GB/s and up;&lt;/li&gt;&#xA;&lt;li&gt;the “special” Rage Fury MAXX ran at 125MHz with &lt;em&gt;two&lt;/em&gt; graphics processors (on Windows 98 only), for four pixels per clock and 4.576GB/s in ideal circumstances;&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;https://en.wikipedia.org/wiki/Voodoo3#Models&quot; rel=&quot;noreferrer&quot;&gt;Voodoo 3&lt;/a&gt; started at 125MHz with one operation per clock but two texture units (in DirectX games), with memory bandwidths of 2.288GB/s and up;&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units#GeForce_256_series&quot; rel=&quot;noreferrer&quot;&gt;GeForce 256 SDR&lt;/a&gt; (October 1999) ran at 120MHz with four operations per clock, memory bandwidth of 2.656GB/s, and hardware T&amp;amp;L.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However the PowerVR2 and SH-4 combination could provide excellent results in games &lt;a href=&quot;https://docs.microsoft.com/en-us/previous-versions/ms834190(v=msdn.10)?redirectedfrom=MSDN&quot; rel=&quot;noreferrer&quot;&gt;written appropriately&lt;/a&gt;, using the PowerVR2 triangle and tile-based rendering pipeline and the SH-4’s arithmetic operations (dot product, inverse square root). This results in quoted speeds of 7M (opaque) polys per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To reach that using a PC GPU only, you’d need to wait for the GeForce 256 in late 1999, with 10M polys per second. However a mid-range Pentium II with any of the above GPUs could perform the same calculations in software, and 1999 was the year of the Pentium III and Athlon, providing ever-higher levels of CPU performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps the safest way to answer the question is to look at the specs for PC ports of Dreamcast games. &lt;a href=&quot;https://youtu.be/0j-mguqnRNk?t=320&quot; rel=&quot;noreferrer&quot;&gt;Crazy Taxi&lt;/a&gt; was released on PC in 2002 and requires a 500MHz Pentium III or equivalent with a DirectX 8-compatible GPU — of the PC graphics adapters available in 1999, only the GeForce 256 is officially supported. That suggests that a 500MHz Pentium III or Athlon with a GeForce 256 could at least equal the Dreamcast even on a game designed for the Dreamcast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My memories of games in the day suggest that a lesser PC could produce better graphics than the Dreamcast, at similar resolutions, assuming PC-specific optimisations: a high-end Pentium II (450MHz), or mid-range Pentium III (300MHz and up), or Athlon (the slowest ran at 500MHz...), paired with a TNT2 would have been sufficient to outperform the Dreamcast.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="4335" LastEditDate="2019-12-11T14:29:53.727" LastActivityDate="2019-12-11T14:29:53.727" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13022" PostTypeId="2" ParentId="13016" CreationDate="2019-12-11T11:48:31.987" Score="3" Body="&lt;p&gt;I guess the answer is simple: there is no need for such a version of 65C816 nowadays. The Western Design Center (WDC), the 65C816 manufacturer, focuses on IPs and IoT things. I guess the &quot;new 65C816&quot; production is a kind of nostalgia for them. Chip and package revision has no clear business case, IMHO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another question is &quot;why there was no 16bit data bus version back in the 80s?&quot; The reasonable explanation is: it was a sequence of external events. The market probably moved faster than WDC expected. In the first half of the 80s, when 65C816 was introduced, the 8bit data bus fitted better to the systems already designed for the 6502 chip and the market does not demand a 16bit data bus. Later, when 16bit peripherals became available, the 65C816 manufacturer did not offer the &quot;next-gen&quot; CPU in time, so the biggest customers, like Apple (//GS) or Nintendo (SNES), moved to the better, faster, etc. processors (Motorola, NEC MIPS, ...) when designed a new generation of their hardware. This move made &quot;16bit data bus 65C816&quot; obsolete before its own creation.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-11T11:48:31.987" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13023" PostTypeId="1" AcceptedAnswerId="13024" CreationDate="2019-12-11T11:58:27.273" Score="22" ViewCount="3269" Body="&lt;p&gt;In 6502 Assembly, we can use &lt;code&gt;INX&lt;/code&gt; and &lt;code&gt;INY&lt;/code&gt; to increase the value stored in X and Y. They can be decreased with &lt;code&gt;DEX&lt;/code&gt; and &lt;code&gt;DEY&lt;/code&gt;. However, it seems that there are no such instructions for A, like &lt;code&gt;INA&lt;/code&gt; or &lt;code&gt;DEA&lt;/code&gt;. There is however an instruction to increment and decrement the content of an address (&lt;code&gt;INC&lt;/code&gt; and &lt;code&gt;DEC&lt;/code&gt;). But why are there no instructions like that for A? Does this have a reason? Or am I missing something? I know that you could just use &lt;code&gt;adc&lt;/code&gt; or &lt;code&gt;sbc&lt;/code&gt; but I'm still wondering.&lt;/p&gt;&#xA;" OwnerUserId="15809" LastEditorUserId="576" LastEditDate="2019-12-11T13:54:31.757" LastActivityDate="2019-12-12T08:54:09.757" Title="Why didn't the 6502 have increase/decrease opcodes for A?" Tags="&lt;assembly&gt;&lt;6502&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13024" PostTypeId="2" ParentId="13023" CreationDate="2019-12-11T12:16:18.490" Score="24" Body="&lt;p&gt;The designers figured that you'd use X and Y for looping, indexing etc, and use A for adding and subtracting, shifts etc. So they saw a need for &lt;code&gt;INX&lt;/code&gt; and &lt;code&gt;INY&lt;/code&gt;, but didn't see a enough of a need for an instruction to increment or decrement the accumulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's also the reason why X and Y cannot participate in many ALU operations, like adds, shifts, and whatever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Later, with the 65C02, the instruction you are talking about was added, and variously called &lt;code&gt;INA&lt;/code&gt;, &lt;code&gt;INC A&lt;/code&gt; or &lt;code&gt;INC&lt;/code&gt;)&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2019-12-12T08:54:09.757" LastActivityDate="2019-12-12T08:54:09.757" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="13025" PostTypeId="2" ParentId="13023" CreationDate="2019-12-11T16:29:16.567" Score="9" Body="&lt;p&gt;If one writes opcodes in binary, using the format III-AAA-gg (with &quot;III&quot; generally being &quot;Instruction&quot;, &quot;AAA&quot; being &quot;Address mode&quot;, and &quot;gg&quot; as &quot;general instruction group&quot;), most instructions of the form III-AAA-01 or III-AA0-10 process addresses the same way using the address mode specified by AAA.  The latter group of instructions are read-modify-write except that 10I-AAA-xx are LD_/ST_, with the registers selected by xx (in particular, 10I-AAA-10 are LDX/STX).  The exception is that address mode 010, which would normally be immediate (e.g. ORA #imm is 000-010-01), becomes &quot;accumulator&quot; addressing for read-modify write instructions of the 0II-010-10 form.  The increment and decrement instructions have the form 11I-AA0-10, which doesn't match that pattern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The opcode map is a bit goofy in the areas which would match the general III-AAA-10 and 10I-AAA-xx patterns, but aren't used for read-modify-write or LD_/ST_ instructions.  I would guess that instructions like &quot;TXA&quot; and &quot;TAX&quot;, which are placed where &quot;STX #imm&quot; and &quot;LDX #imm&quot; would go, are placed at those spots to exploit the fact that instructions of the form 100-AAA-1x place X on the internal bus, and 101-AAA-1x loads X from the internal bus.  I'm not sure when chronologically it was decided that various instructions would be supported, but supporting accumulator mode with INC and DEC would have required some extra circuitry, and would also require relocating DEX (which uses the opcode that would have fit the patterns of 110-AAA-10 for &quot;decrement something&quot; and 1x0-AAA-1x for &quot;put something into X&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, one thing that made chip designs of the 1970s and 1980s very different from those of today was that chips had only three layers that could carry current and signals, and any place the bottom two layers crossed would form a transistor.  As a consequence, one needed to be very mindful of which signals would be sent to what part of a chip, or else a chip would spend more area on routing wires than on transistors.  Today's fabrication processes generally support at least five layers, and many support far more than that, which allows much more routing flexibility.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2019-12-11T16:35:44.653" LastActivityDate="2019-12-11T16:35:44.653" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13026" PostTypeId="1" AcceptedAnswerId="13027" CreationDate="2019-12-11T19:24:31.710" Score="6" ViewCount="419" Body="&lt;p&gt;I saw this labeled as an Atari 2600. However I thought all 2600s had toggle switches. This has flat switches. Its also all black, while all the ones I've seen have fake wood trim. Is it real? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gxXzq.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gxXzq.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8172" LastEditorUserId="8172" LastEditDate="2019-12-11T19:50:58.050" LastActivityDate="2019-12-11T19:58:17.907" Title="Is this really an Atari 2600?" Tags="&lt;atari-2600&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13027" PostTypeId="2" ParentId="13026" CreationDate="2019-12-11T19:58:17.907" Score="7" Body="&lt;p&gt;It does look like &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Atari_2600#Atari_2600_Jr.&quot; rel=&quot;noreferrer&quot;&gt;Atari 2600 Jr&lt;/a&gt; model, which is smaller, cost reduced version from 1986.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/I1q32.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I1q32.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4378" LastActivityDate="2019-12-11T19:58:17.907" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13028" PostTypeId="2" ParentId="12994" CreationDate="2019-12-11T21:35:31.613" Score="1" Body="&lt;p&gt;Pretty much any One Instruction Computer architecture could be described this way.  In such machines, there is no opcode field, and the operation performed each time is sufficiently flexible to have several different effects depending on the operands given.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the operation implemented is Decrement And Conditionally Branch (which has been shown to be Turing complete), the operands would be the memory location to be decremented, and the two addresses to branch to in the zero and non-zero cases.  It should be easy to see how this can be implemented with no decoding, just a basic control sequencer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more flexible design might specify the control inputs to an ALU, the addresses of two input operands to that ALU, two addresses in which to place the result depending on a selectable status bit, and a status field to update based on the ALU result.  If the program counter is itself made addressable (as many early CPUs did, up to and including the ARM), you then effectively have a no-decoding CPU that can do arithmetic and conditional branches fairly efficiently, albeit with a rather large instruction word.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-12-11T21:35:31.613" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13029" PostTypeId="2" ParentId="2848" CreationDate="2019-12-12T09:09:52.853" Score="1" Body="&lt;p&gt;Commodore 128D has an internal PSU so you don't have the risk to have a faulty external PSU, typical for older C64 and C128. Se this other answer: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2850/what-is-the-proper-way-to-test-the-psu-output-for-a-commodore-128d&quot;&gt;What is the proper way to test the PSU output for a Commodore 128D?&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore motherboard doesn't have an RTC battery and doesn't use tantalum capacitors so you don't have some problems that plaugue Amiga and IBM PCs and compatibles of that era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To add to the answer of PDP11 if you don't have a variac you could rig an incandescent bulb in series of the mains and put a 60W bulb. I f the bulb does not lights up there aren't shorts in the transformer. Do it with the PSU disconnected from the mainboard, because the C128 has a switching 5V regulator that should shut down on undervoltage.&lt;/p&gt;&#xA;" OwnerUserId="15814" LastActivityDate="2019-12-12T09:09:52.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13030" PostTypeId="1" AcceptedAnswerId="13031" CreationDate="2019-12-12T15:01:53.753" Score="10" ViewCount="446" Body="&lt;p&gt;This was prompted by a question on the electronics site (which was asking why only an open collector variant of a particularly old part existed and how it could be part of a data bus).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was a pretty important development as it revolutionised bus interfacing (such as memory systems) among other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that 3 state (tri-state in National Semiconductor parlance which was [is?] trademarked) came out sometime in the (early) 1970s but I am trying to pin it down to at least a year range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried searching for the date of the trademark without success so I am asking this here in the hope people here might remember their first parts with this feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have found a citation at &lt;a href=&quot;https://dl.acm.org/citation.cfm?id=804178&quot; rel=&quot;noreferrer&quot;&gt;ACM&lt;/a&gt; from 1978 that references this, but I am not sure if actual parts were in the wild prior to this. My first parts using this were in the early 80s (so I know it existed by then).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that I am looking for the first &lt;em&gt;commercial&lt;/em&gt; implementations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would appreciate any insight.&lt;/p&gt;&#xA;" OwnerUserId="4480" LastEditorUserId="6659" LastEditDate="2020-10-01T13:51:03.713" LastActivityDate="2021-03-09T21:07:51.200" Title="When was the first tri-state IC produced?" Tags="&lt;history&gt;&lt;hardware&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13031" PostTypeId="2" ParentId="13030" CreationDate="2019-12-12T16:19:26.427" Score="8" Body="&lt;p&gt;I don't know how to prove a &lt;em&gt;first&lt;/em&gt; commercial implementation, but the &lt;a href=&quot;https://archive.org/details/System74DesignersManual/page/n39&quot; rel=&quot;noreferrer&quot;&gt;Texas Instruments System 74 Designer's Manual (copyright &lt;strong&gt;1973&lt;/strong&gt;)&lt;/a&gt; includes the 74125 and 74126 quad 3-state buffers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://archive.org/details/bitsavers_motoroladaTTLIntegratedCircuitsDataBook_38442857/page/n9&quot; rel=&quot;noreferrer&quot;&gt;Motorola TTL databook from 1971&lt;/a&gt; doesn't include these circuits. Neither does &lt;a href=&quot;https://archive.org/details/bitsavers_signeticsdcsDigital5474TTLSeries_11483477/page/n5&quot; rel=&quot;noreferrer&quot;&gt;a Signetics databook from 1972&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I found all these references linked from &lt;a href=&quot;https://project5474.org/index.php?title=Databooks&quot; rel=&quot;noreferrer&quot;&gt;this project5474.org page&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2019-12-12T16:19:26.427" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13032" PostTypeId="1" AcceptedAnswerId="13033" CreationDate="2019-12-12T16:33:28.293" Score="1" ViewCount="801" Body="&lt;p&gt;What is the last VLC Media Player version for Windows 98/98SE/ME ?&lt;/p&gt;&#xA;" OwnerUserId="15407" LastActivityDate="2019-12-12T16:34:27.537" Title="What is the last VLC Media Player version for Windows 98/98SE/ME?" Tags="&lt;windows-98&gt;&lt;windows-me&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ClosedDate="2019-12-13T13:54:47.710" ContentLicense="CC BY-SA 4.0" />
  <row Id="13033" PostTypeId="2" ParentId="13032" CreationDate="2019-12-12T16:34:27.537" Score="7" Body="&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Not requiring &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Layer_for_Unicode&quot; rel=&quot;noreferrer&quot;&gt;unicows.dll&lt;/a&gt;, the last version for Windows 98/98SE/ME is 0.8.4a (13/12/2005; slighly newer than 0.8.4)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Requiring &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Layer_for_Unicode&quot; rel=&quot;noreferrer&quot;&gt;unicows.dll&lt;/a&gt;, the last version officially supported on Windows 98/ME is 0.8.6i (14 August 2008). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With KernelEx you can install up to version 3.0.8 (20 August 2019).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://kernelex.sourceforge.net/wiki/VLC_Media_Player&quot; rel=&quot;noreferrer&quot;&gt;VLC Media Player - KernelEx Wiki&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15407" LastActivityDate="2019-12-12T16:34:27.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13034" PostTypeId="1" AcceptedAnswerId="13045" CreationDate="2019-12-12T17:42:50.223" Score="11" ViewCount="953" Body="&lt;p&gt;All models of the Commodore PET line had built-in monitors, and at least the U.S. models had 60 Hz refresh. For the European models there was no need for compatibility with European television standards as far as I'm aware; did they also use 60 Hz refresh? Were there any situations in which a PET monitor did not use 60 Hz refresh?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If they all did, was the same true of the CBM-II hi-profile models with their built-in monitors?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2019-12-13T02:31:08.087" Title="Did all integrated Commodore PET monitors always use 60 Hz refresh?" Tags="&lt;commodore&gt;&lt;crt-monitor&gt;&lt;commodore-pet&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13035" PostTypeId="2" ParentId="13034" CreationDate="2019-12-12T18:23:50.403" Score="10" Body="&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Non-CRTC PETs (Original PET, early 30xx) are fixed to 60 Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CRTC (6545) based PETs (40xx/80xx/8x96/9000 - *1) use screen refresh rates set by its ROM (*2). 50 Hz for European machines, 60 Hz for US/Canadian units.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Regarding the details:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For the European models there was no need for compatibility with European television standards as far as I'm aware;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You're right. As self contained system, there is no need to synchronize to any external source. Why Commodore switched to 50 Hz seams strange. There is no technical need nor any legal to do so.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;did they also use 60 Hz refresh? Were there any situations in which a PET monitor did not use 60 Hz refresh?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Early did. Later not. The majority of European units did use 50 Hz.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;was the same true of the CBM-II hi-profile models with their built-in monitors&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Basically yes (as well as for external screens). So 'regular' 600/700 units for Sweden and Germany (distinction due keyboard) were using a 50 Hz refresh. Except 'regular' is a wide array here, as there is a wide variety of ROMs for the CBM-II series, all of them at best beta versions. So yes, they did use 50 Hz, but which did or did not is hard to tell.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - As a generalization this means all BASIC 4.0 machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The ROMs differ as well within the editor ROM for keyboard layout.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-13T01:22:49.103" LastActivityDate="2019-12-13T01:22:49.103" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="13036" PostTypeId="1" AcceptedAnswerId="13040" CreationDate="2019-12-12T20:47:10.013" Score="12" ViewCount="4649" Body="&lt;p&gt;I understand that only either &lt;em&gt;nonelectromechanical computing device&lt;/em&gt;s&lt;br&gt;&#xA;or &lt;em&gt;electromechanical computing device&lt;/em&gt;s were ever developed by humans.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also understand that the first electronic &lt;em&gt;general purpose computing device&lt;/em&gt; (&lt;strong&gt;GPCD&lt;/strong&gt;) which perhaps worked on the same electromechanic pattern of today's common computer devices was &lt;a href=&quot;https://en.wikipedia.org/wiki/ENIAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;ENIAC&lt;/a&gt; and was completed around February 1946.&lt;br&gt;&#xA;When I saw pictures of it, I didn't saw a screen device connected to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If an &lt;em&gt;electromechanical computing device&lt;/em&gt; is not screened (hence no CLUI/TUI/GUI) and/or is not sensored for general spatial activity (hence not a robot)&lt;br&gt;&#xA;What way or ways left to interact with it?&lt;/p&gt;&#xA;" OwnerDisplayName="user13751" LastEditorDisplayName="user13751" LastEditDate="2020-02-03T02:52:15.217" LastActivityDate="2020-02-03T03:14:51.367" Title="How did humans interact with early computers without screens or sensors?" Tags="&lt;screen&gt;&lt;robotics&gt;" AnswerCount="11" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13037" PostTypeId="2" ParentId="13030" CreationDate="2019-12-12T20:51:38.243" Score="5" Body="&lt;p&gt;National Semiconductor had the name Tri-State and introduced the first commercial devices. Texas Instruments and others adopted three-state logic into their product lines afterwards. There will be multiple search hits on Dale Mrazek who invented the logic family and National Semiconductor. NatSemi was always recognised due to the hold on Tri-State name.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://books.google.com.au/books?id=8E3VCwAAQBAJ&amp;amp;pg=PT33&amp;amp;lpg=PT33&amp;amp;dq=Dale+Mrazek&amp;amp;source=bl&amp;amp;ots=qYO3cEs9uA&amp;amp;sig=ACfU3U1BTZ6BXnCQQm3Y4ptpHWsrO3XpNg&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwi24obj_LDmAhXC6nMBHbmqD3gQ6AEwAnoECAkQAQ#v=onepage&amp;amp;q=Dale%20Mrazek&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;https://books.google.com.au/books?id=8E3VCwAAQBAJ&amp;amp;pg=PT33&amp;amp;lpg=PT33&amp;amp;dq=Dale+Mrazek&amp;amp;source=bl&amp;amp;ots=qYO3cEs9uA&amp;amp;sig=ACfU3U1BTZ6BXnCQQm3Y4ptpHWsrO3XpNg&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwi24obj_LDmAhXC6nMBHbmqD3gQ6AEwAnoECAkQAQ#v=onepage&amp;amp;q=Dale%20Mrazek&amp;amp;f=false&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15794" LastActivityDate="2019-12-12T20:51:38.243" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13038" PostTypeId="2" ParentId="13036" CreationDate="2019-12-12T21:15:50.407" Score="5" Body="&lt;p&gt;There have been many different kinds of I/O devices since the early years:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Indicator lights (often coloquially referred to as &lt;a href=&quot;https://en.wikipedia.org/wiki/Blinkenlights&quot; rel=&quot;noreferrer&quot;&gt;&quot;blinkenlights&quot;&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Front_panel&quot; rel=&quot;noreferrer&quot;&gt;Front panel&lt;/a&gt; toggle switches and pushbuttons&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Punched_tape&quot; rel=&quot;noreferrer&quot;&gt;Punched tape&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Punched_card&quot; rel=&quot;noreferrer&quot;&gt;Punched cards&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Teleprinter&quot; rel=&quot;noreferrer&quot;&gt;Teleprinter&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There is some more history available at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_terminal&quot; rel=&quot;noreferrer&quot;&gt;Computer terminal&lt;/a&gt; Wikipedia page.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2019-12-12T21:15:50.407" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13039" PostTypeId="2" ParentId="13036" CreationDate="2019-12-12T21:18:57.830" Score="17" Body="&lt;p&gt;Switches and lights.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the panel for an IBM 650: &#xA;&lt;a href=&quot;https://i.stack.imgur.com/w3KTN.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w3KTN.png&quot; alt=&quot;IBM 650 front panel&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The top row of dials are used to configure in decimal values (the IBM 650 being a decimal machine).  The repeated columns of 5 lights with 2 on top indicate 1 of 10 values for each digit of the 10 digit word the IBM 650 used.  The lights below that row indicate operation and address.  The other dials configure various settings, and the buttons trigger various actions based on the dials, like store to memory.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can deposit instructions and data, examine any memory address, and begin execution from the console.  That's all you need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the first programs you enter in such a way are routines to run a punch card or paper tape reader, to read in the rest of your routines in a more humane fashion.  Output was usually on punched card, paper tape, or printed to paper.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interactive teletypes acting as terminals which could provide a command line interface would start to become common in the 1960s.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2019-12-12T21:24:52.183" LastActivityDate="2019-12-12T21:24:52.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13040" PostTypeId="2" ParentId="13036" CreationDate="2019-12-12T21:47:10.510" Score="27" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I understand that either nonelectromechanical computing devices (analog)&#xA;  or electromechanical computing devices (digital) were ever developed by humans.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That distinction is a bit off, mixing unrelated categorisation. Analogue computers can be as well mechanical, as electromechanical as well as electronic (or pneumatic or hydoponic) - similar digital computers do not have to be electromechanical. For example Zuses Z1 is a fully mechanical-binary-floating-point computer that needs to be cranked to work :)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I also understand that the first electronic general purpose computing device (GPCD) which perhaps worked on the same electromechanic pattern of today's common computer devices was ENIAC which was completed around February 1946.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;ENIAC wasn't the first, nor was it general purpose (as Retrac already pointed out). Equally, electromechanical doesn't imply digital.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If an electromechanical computing device is not screened (hence no CLUI/TUI/GUI)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A UI doesn't have to be 'screened'. A UI is whatever lets the User interact/interface.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and/or is not sensored for general spatial activity (hence not a robot) What way or ways left to interact with it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;After excluding everything, nothing should be left. So, lets rather see what has been used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the input side:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;pulling levers&lt;/li&gt;&#xA;&lt;li&gt;turning dials&lt;/li&gt;&#xA;&lt;li&gt;plugging markers&lt;/li&gt;&#xA;&lt;li&gt;setting pointers on gauges&lt;/li&gt;&#xA;&lt;li&gt;pressing numbers on panels&lt;/li&gt;&#xA;&lt;li&gt;flipping switches&lt;/li&gt;&#xA;&lt;li&gt;typing numbers&lt;/li&gt;&#xA;&lt;li&gt;punch tapes&lt;/li&gt;&#xA;&lt;li&gt;punch cards&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For output: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lever positions&lt;/li&gt;&#xA;&lt;li&gt;wheel / knob positions&lt;/li&gt;&#xA;&lt;li&gt;pointers/gauges selecting number(s) on a scale&lt;/li&gt;&#xA;&lt;li&gt;flip-doors - much like flip-dot-displays today&lt;/li&gt;&#xA;&lt;li&gt;lamps&lt;/li&gt;&#xA;&lt;li&gt;nixies&lt;/li&gt;&#xA;&lt;li&gt;bells&lt;/li&gt;&#xA;&lt;li&gt;punch cards&lt;/li&gt;&#xA;&lt;li&gt;punch tapes&lt;/li&gt;&#xA;&lt;li&gt;printout&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Imagine some 1940s Frankenstein movie, or alike, and it still falls short of what man has used to communicate with machines. Anything that can be thought of has been used on one machine or another.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-03T03:14:51.367" LastActivityDate="2020-02-03T03:14:51.367" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="13041" PostTypeId="1" CreationDate="2019-12-12T22:23:41.477" Score="3" ViewCount="120" Body="&lt;p&gt;Obviously, crediting a &quot;Director&quot; was borrowed from the cinema industry. It was a new trend in computer game development in the late 1980s and early 1990s to embrace the story-telling aspect of a movie within games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd point to the aptly named &quot;Cinemaware&quot; games beginning in 1986. And the trend grew stronger with the rising popularity of CD-ROM and full-motion video as providing the necessary storage and playback to introduce more cinema like content to a game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Origin's &quot;Wing Commander&quot; was an early (1990) game that embraced these concepts and also credited &quot;Director Chris Roberts&quot; in the game itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When did this job title first appear in the credits for a video game? Who were the early/famous Directors, and what were they expected to contribute to the game development effort?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-12-13T15:20:43.453" LastActivityDate="2019-12-13T15:20:43.453" Title="When was the &quot;Director&quot; role added to Game Development?" Tags="&lt;history&gt;&lt;gaming&gt;" AnswerCount="0" CommentCount="7" ClosedDate="2019-12-13T19:16:18.220" ContentLicense="CC BY-SA 4.0" />
  <row Id="13042" PostTypeId="1" AcceptedAnswerId="13063" CreationDate="2019-12-12T22:49:54.080" Score="11" ViewCount="1266" Body="&lt;p&gt;As near as I can tell, there seems to have been roughly speaking two schools of thought when it comes to graphics hardware among early consoles, what I will call the Atari and Texas Instruments schools. The Atari school is exemplified by the Atari 8-bit computer series' ANTIC coprocessor, which contained a minimal instruction set that described, operationally, how to construct the screen. The TI school conversely, is typified by the TMS9918 chip, which contains a series of hardware registers, which describes the placement of objects on a screen, which are set by the CPU. Of course, neither of these examples are the first of their kind, but I would rather consider both to be the ur-example of their ilk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I am interested in are examples besides ANTIC of the Atari School of graphics hardware design. Also, I'm aware that displays are somewhat common in 3D hardware, so I'm mostly interested in the pre-3D era. Myer and Sutherland's 1968 paper &lt;em&gt;&lt;a href=&quot;http://cva.stanford.edu/classes/cs99s/papers/myer-sutherland-design-of-display-processors.pdf&quot; rel=&quot;noreferrer&quot;&gt;On the Design of Display Processors&lt;/a&gt;&lt;/em&gt; lists a few examples of this approach, for instance the DEC-338. The real question is what counts as a &quot;display list&quot; design. The MSX2's V9958 has hardware accelerated line drawing commands. On the other hand, TI's TMS340x0 series chips were just general purpose programmable CPUs with graphics-oriented instructions. In my mind, for a design to count, it must be able to execute a &lt;em&gt;series&lt;/em&gt; of instructions or commands, on it's own, without CPU-intervention, while having a sub-Turing complete (or at least, very limited) instruction set. (Yes, I know that all these systems have finite memory and thus aren't equivalent to a UTM strictly speaking anyway). So perhaps there are no conditionals, or no jumps, or something like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples I am aware of:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Aforementioned ANTIC&lt;/li&gt;&#xA;&lt;li&gt;Aforementioned DEC-338&lt;/li&gt;&#xA;&lt;li&gt;The Amiga's COPPER probably narrowly counts (unsurprising given the same team was behind it as the Atari)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I am not really convinced that the 7800 or Amstrad roller ram really count as display lists, since neither are really instruction sets. On the other hand, the TMS340x0 is simply too powerful and general purpose to be an example of what I mean.&lt;/p&gt;&#xA;" OwnerUserId="10966" LastActivityDate="2019-12-13T22:44:15.153" Title="What graphics sytems used display lists?" Tags="&lt;amiga&gt;&lt;graphics&gt;&lt;atari-800&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13043" PostTypeId="1" AcceptedAnswerId="13050" CreationDate="2019-12-12T23:45:00.683" Score="4" ViewCount="669" Body="&lt;p&gt;I've recently picked up a Toshiba T1910CS 486 laptop. It's in OK shape, with a 500MB hard drive and DOS installed. I also ordered a USB floppy disk drive and some floppy disks so that I could install software on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately when I insert a disk, I just hear a constant whine and disk reads timeout. I suspect the drive is broken. I opened up the machine and getting to the drive is going to be a pretty full on disassembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: What is the best way for me to get software onto this machine? Should I get a new floppy drive? A floppy drive emulator? Some kind of hard disk replacement?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a little lost, any guidance would be much appreciated. &lt;/p&gt;&#xA;" OwnerUserId="15819" LastEditorUserId="6712" LastEditDate="2019-12-13T09:22:09.160" LastActivityDate="2020-10-24T17:26:21.660" Title="Bad floppy drive in T1910CS 486 laptop" Tags="&lt;hard-disk&gt;&lt;floppy-drive&gt;&lt;laptop&gt;&lt;80486&gt;&lt;toshiba&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13044" PostTypeId="2" ParentId="13036" CreationDate="2019-12-13T00:33:30.107" Score="4" Body="&lt;p&gt;When your memory device is literally &lt;a href=&quot;https://en.wikipedia.org/wiki/Williams_tube&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;a screen&quot;&lt;/a&gt;, you can just &lt;a href=&quot;http://www.historyofinformation.com/detail.php?entryid=858&quot; rel=&quot;nofollow noreferrer&quot;&gt;look and see what is held in memory&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I think, but can't find a reference right now, that actually the display tube was a mirror of the actual storage tube - since the storage tube would have had a metal plate in front of it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The video in the second link is worth watching to get a glimpse of the very first fully electronic stored-program computer.  This is a bit of a fudge with respect to the question, since the Baby wasn't really intended to be used for 'real computing', but as a means to test the use of Williams tube storage.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2019-12-13T00:33:30.107" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13045" PostTypeId="2" ParentId="13034" CreationDate="2019-12-13T00:58:54.587" Score="2" Body="&lt;p&gt;The early PET models (all 2001, early 30xx) with discrete video circuitry used 60 Hz in all models worldwide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The later PET models (later 30xx, 40xx/80xx/8x96/9000) used a 6545 CRTC chip where the ROM could set the refresh rate. (These can usually be identified by the ROM providing BASIC 4.0.) Candian/U.S. ROMs set a 60 Hz refresh rate; European ROMs set a 50 Hz refresh rate. There was indeed no technical reason to use different refresh rates; it's not known why they did this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CBM-II series also used different refresh rates between country models. Certainly many of the series 600/700 models in Sweden and Germany were using 50 Hz refresh. But perhaps not all: there were a wide variety of ROMs for the CBM-II systems, none fully developed, so whether any particular unit, regardless of country, used 60 Hz or 50 Hz can be hard to tell.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2019-12-13T02:31:08.087" LastActivityDate="2019-12-13T02:31:08.087" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13046" PostTypeId="1" AcceptedAnswerId="13047" CreationDate="2019-12-13T01:52:35.223" Score="1" ViewCount="156" Body="&lt;p&gt;The worst imaginable thing you can think of happened. I've tried making a minor repair and it all rolled downhill like a snowball and now I have significant damage.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Extent of Damage&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The pads got yanked out.&lt;/strong&gt; I tried fixing them, but being that I'm relatively new to soldering I scorched the holes where the pads are suppose to be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This has also ended horribly for the &lt;strong&gt;traces that connected to the pads tearing them off&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here I have two pictures showing where the damage was done. (the red wire was my attempt at a fixing a trace. It worked sometimes, but ignore it. Its been deliberately cut off)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the damaged trace. Because there was no pads or copper on the top side I used super-glue after the solder job was done.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Backside of the motherboard (little blurry). 16 volt capacitors for the&#xA;  display-screen. The circled area is in the middle of the 16 volt caps. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LLOTg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LLOTg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other side I used conductive wire glue as there was a spot where the copper was ripped off.  It's hard to see, but you can see a black blur. This is the conductive wire glue. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ntmTB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ntmTB.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried fixing the traces with conductive wire. It would work for a time and then it would stop altogether. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Question&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;What methods did you use when fixing significantly damaged vintage computers?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Should I really just stop by the electronics repair shop and have them fix it?&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="11944" LastEditorUserId="7208" LastEditDate="2019-12-13T02:52:04.267" LastActivityDate="2019-12-13T16:33:27.697" Title="Need help with lifted pads/traces on a TRS-80 Model 100 PCB" Tags="&lt;repair&gt;&lt;printed-circuit-board&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13047" PostTypeId="2" ParentId="13046" CreationDate="2019-12-13T02:08:01.177" Score="5" Body="&lt;p&gt;&lt;strong&gt;Preface:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far it's hard to see anything on the pictures at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No offense, but from the descriptions it seams as if your skills are not up to the task. So having someone with sufficient knowledge handling it might be mandatory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With thorn apart traces, 'wire glue' and 'super glue' attached it even sounds more than a simple repair job, needing an effort beyond just quite good soldering skills, as it may need reconstruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may more effective to get yourself a new M100 (they are still cheap) and keep that one for spare parts.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Questions:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What methods did you use when fixing significantly damaged vintage computers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;With 40+ years of experience in soldering, my approach might not be usable to you. And even with that, there are quite some tasks where I nowadays ask younger colleagues to do the dirty job. Young hands without tools beat an old guy with a magnifying glass any day of the week :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More important, it depends way more on the damage in question, so no generic answer can be given.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Should I really just stop by the electronics repair shop and have them fix it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm not sure if a random 'electronics repair shop' is the best choice either. Also, their price might end up way above what a M100 is on eBay.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, if you really insist, and it seams as if, then please stop using stuff like glue, conducting paint, copper tape or alike, it'll all just make it worse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;[There are many ways to fix old boards, and some may be better under certain circumstances, but the one described in the following is usually the best generic approach]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try this (*1):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;first of all, get yourself an appropriate soldering iron.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Not more than 10W.&lt;/li&gt;&#xA;&lt;li&gt;Or a regulated one.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Get some &lt;a href=&quot;https://en.wikipedia.org/wiki/Magnet_wire&quot; rel=&quot;nofollow noreferrer&quot;&gt;magnet wire&lt;/a&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Size 0.15 or 0.18 mm might be right to start with, I'm using 0.1, but it needs experience.&lt;/li&gt;&#xA;&lt;li&gt;Nowadays magnet wire is available in &lt;a href=&quot;https://www.hoelleinshop.com/hoellein/prodpic/Kupfer-Lackdraht-Set-0-15mm-7x10m-DNLD15-MIX_b_0.JPG&quot; rel=&quot;nofollow noreferrer&quot;&gt;lots of colours&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Use these colours to keep track of certain signals for larger patches.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Get a &lt;a href=&quot;https://en.wikipedia.org/wiki/Wiring_pencil&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiring pencil&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Get solder&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;No, not the modern type, but good old fashioned led containing solder&lt;/li&gt;&#xA;&lt;li&gt;This is important as the existing joints are made using such and they have different melting points, thus mixing badly&lt;/li&gt;&#xA;&lt;li&gt;It doesnÄt need much solder as for most parts you'll be using the existing.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;get a fine (scalpel like) knife&lt;/li&gt;&#xA;&lt;li&gt;get a magnifying glass - mounted if possible.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now a quite important intermediate step: &lt;strong&gt;Learn to solder fine joints&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may look easy, but it needs practice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to get a feeling how long it takes until the solder melts, find the right timing when to add the solder to get the right temperature and when to remove the spool to avoid adding too much as well as to remove the iron at the right moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in apprenticeship they let us solder grids of 11x11 silver wires for about two weeks. It came to more than ten thousand joints done (and judged) before we were allowed to use it on real components :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't expect you to go the same length, but try to do at least a hundret or so to get a very basic feeling about timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you feel confident not to burn out even more of the M100, repair will work like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cleaning:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Position the maginfying glass to see the area to be repaired&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;No, it doesn't matter if your eyes are still fine. You want to do a good job, so remove any chance to miss out on details.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pick one trace to repair&lt;/li&gt;&#xA;&lt;li&gt;Take the knife and cut away all damaged parts.&lt;/li&gt;&#xA;&lt;li&gt;Now look for the first thruhole pin (or just thruhole) on either side&lt;/li&gt;&#xA;&lt;li&gt;These two are to be connected using the magnet wire&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Never connect anything on a trace. that's the best way to damage a board.&lt;/li&gt;&#xA;&lt;li&gt;Always look for existing solder surfaces, most desirable existing pins.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Soldering a wire:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;As usual start by 'wetting' (*1) the tip with solder&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This also serves as a test if its up to temperature&lt;/li&gt;&#xA;&lt;li&gt;Even if it's a temperature controlled one&lt;/li&gt;&#xA;&lt;li&gt;It's important to do this at the earliest possible time to reduce wear on the tip.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Drop any access solder with the prepared wet sponge&lt;/li&gt;&#xA;&lt;li&gt;Take the wiring pencil &lt;/li&gt;&#xA;&lt;li&gt;Use a little drop of solder with the tip and use it to burn away the lacquer on the end of the magnet wire.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Not too much, just about 1-2 mm&lt;/li&gt;&#xA;&lt;li&gt;With more experiance this step can be skipped, but for now it guarantees a better result.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Wipe off excess solder&lt;/li&gt;&#xA;&lt;li&gt;Put the wire end against the first pin to connect&lt;/li&gt;&#xA;&lt;li&gt;Press it with the soldering iron tip against the solder already existing&lt;/li&gt;&#xA;&lt;li&gt;Wait until the solder melts and the wire gets embedded.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Not longer, this needs to be fast&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Remove the tip, wait a second and test it's strength.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If it breaks away easy, the temperature wasn't right.&lt;/li&gt;&#xA;&lt;li&gt;But usually it's hard to make it not right.&lt;/li&gt;&#xA;&lt;li&gt;Just don't stay too long, there is no gain in frying chip or board.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Now look for the destination pin.&lt;/li&gt;&#xA;&lt;li&gt;Take enough wire to move it there&lt;/li&gt;&#xA;&lt;li&gt;Keep it loose, but not too loose.&lt;/li&gt;&#xA;&lt;li&gt;A good measurement is if you could move the wire after being attached for about 10 mm sideways.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If the pin is long enough, try to wind it once around&lt;/li&gt;&#xA;&lt;li&gt;If not, hold it against as with the last one.&lt;/li&gt;&#xA;&lt;li&gt;Make sure to have it not too tight.&lt;/li&gt;&#xA;&lt;li&gt;Solder it as before, using the existing solder&lt;/li&gt;&#xA;&lt;li&gt;Add only a little solder if really necessary.&lt;/li&gt;&#xA;&lt;li&gt;Again: Do not burn it - heating should be as short as needed.&lt;/li&gt;&#xA;&lt;li&gt;Pull again to test the joint strength&lt;/li&gt;&#xA;&lt;li&gt;This is not about proving your strength, just the joint.&lt;/li&gt;&#xA;&lt;li&gt;Now hold the wire pin tight and wiggle to breake the wire.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here it is, the first repair is done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Repeat the cleaning and soldering until all damage is removed and replaced by shiny new connections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are only the very basics. There is much more to learn when doing repairs like this. So don't go over board. Don't hurry. One wire and one carve out at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;... Now someone has to convince me why a soldering 101 needs to be on RC.SE, when there's Electronics.SE?&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I'm grateful for any help with english terms here&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-13T16:33:27.697" LastActivityDate="2019-12-13T16:33:27.697" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13048" PostTypeId="2" ParentId="13042" CreationDate="2019-12-13T03:17:31.953" Score="7" Body="&lt;p&gt;I don't think the list is very long. The history starts with the Atari 2600, which was firmly derived from older discrete logic but added a microprocessor primarily for raster racing: doing so is the only means to draw a 2d frame — it's not a clever way to get more from the system, it's the intended use of the system. That was consolidated as a dedicated coprocessor in the ANTIC, and extended by the Copper, but the members of the same design team who carried on working — primarily Mical and Needle — switched in both the Lynx and the 3DO to a plain frame buffer and doubling down on the blitter hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you won't count the PCW's roller RAM then the Enterprise 128's line parameter table is probably out — on that machine you provide a list defining individual blocks of video memory, each up to 256 lines in size, by their video mode, start address and partial palette.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As implied by Raffzahn, there are various terminals that might qualify, as there are two schools of thought on storing attributes, one in which they're 1:1 with characters and one in which they're modal — they take effect when the raster rolls over them and remain in effect until some other attribute is applied. So you've got something a bit like a Copper for seeing things like brightness, colour, inverse video, etc. No looping or branches, but raster-triggered modal changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see a similar idea in the teletext-type systems, except that the modal attributes are in the character stream. Each position can either contain a character or contain a modal change. On systems like the Oric the same approach is used for pixel modes, not only character modes.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-12-13T03:17:31.953" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13049" PostTypeId="2" ParentId="13042" CreationDate="2019-12-13T06:39:45.703" Score="4" Body="&lt;p&gt;The variant, which is vaguely similar to the display list, was used in a small-series Soviet personal computer of the PDP-11 line - Soyuz-Neon PK-11/16. Up to 576 32-bit line pointers - continuous areas in an arbitrary place of RAM with a length of 16 to 256 bytes, encoding a sequence of pixels in one of 16 possible interpretations.&lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2019-12-13T06:39:45.703" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13050" PostTypeId="2" ParentId="13043" CreationDate="2019-12-13T06:46:43.587" Score="6" Body="&lt;p&gt;As far as I know this laptop can’t easily be connected to a network, which leaves three options for getting software onto it:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;transfer over the serial or parallel ports, using an appropriate cable and software such as LapLink or the built-in transfer tools in MS-DOS 6.0 or later, PC-DOS 5.02 or later, and DR DOS 6.0 or later;&lt;/li&gt;&#xA;&lt;li&gt;the floppy drive;&lt;/li&gt;&#xA;&lt;li&gt;directly accessing the hard drive.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Option 1 requires a matching port on whatever other computer you’re using, and requires getting the software set up on the laptop if it’s not already there. In the long run though I think it’s the best option if you’re planning on using the laptop much!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Option 2 will involve a lot of disassembly and perhaps a fair amount of trial and error. At least if you’re in the US, replacement drives for this laptop are readily available; that’s not the case in other countries. I imagine the floppy drive uses the typical (for PCs) 34-pin interface, so you could replace it with an emulator, but I don’t know whether or how well an emulator would fit inside the case — I get the impression the T1910’s drive is a slimmed-down unit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Option 3 is the nicest if you have lots of files to transfer, and the T1910’s drive caddy simplifies part of the job (getting the drive out). You’ll need to buy a USB adapter for old laptop drives.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-12-13T08:27:55.477" LastActivityDate="2019-12-13T08:27:55.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13052" PostTypeId="2" ParentId="13014" CreationDate="2019-12-13T09:12:21.180" Score="3" Body="&lt;p&gt;I heard &quot;on the grapevine&quot; that Sega, with their benchmarks, felt CLX2 outperformed the PC parts of that era. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although CLX2 'only' had peak texture &amp;amp; shading fill rate of 100Mp/s, it performed rasterisation and hidden surface removal at a peak rate &lt;strong&gt;32x&lt;/strong&gt; higher, i.e. 3.2Gp/s.  Thus for 3D worlds where there is nearly always a reasonable amount of overdraw, the &lt;em&gt;effective&lt;/em&gt; texture fill rate was considerably higher than 100Mp/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the subject of memory bandwidth, you can't just compare raw figures:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The majority of textures on Dreamcast (IIRC Sega said ~75%) were compressed at ~2bpp and thus memory traffic is reduced considerably (say around 8x saving for compressed textures assuming uncompressed is 16bpp)&lt;/li&gt;&#xA;&lt;li&gt;The Tile-Based Deferred Rendering (TBDR) scheme also meant that there was &lt;strong&gt;no&lt;/strong&gt; Z-buffer traffic, which is a considerable saving given that the depth values on CLX2 were (just slightly smaller than) 32bit floats. (Other systems tended to reduce bandwidth by using lower precision, e.g. 16bits per z)&lt;/li&gt;&#xA;&lt;li&gt;Similarly, TBDR meant there was no (or didn't have to be) read-modify-writes of the framebuffer and, further, all writes were done in a coherent fashion.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There were also a number of features in CLX2 that were somewhat difficult to emulate in other graphics hardware though, admittedly, not all games made use of these.&lt;/p&gt;&#xA;" OwnerUserId="6712" LastEditorUserId="6712" LastEditDate="2019-12-13T10:17:19.133" LastActivityDate="2019-12-13T10:17:19.133" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13053" PostTypeId="2" ParentId="13036" CreationDate="2019-12-13T12:18:01.503" Score="4" Body="&lt;p&gt;The &lt;a href=&quot;https://www.youtube.com/watch?v=AvDUDGiL9EQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Harwell Dekatron&lt;/a&gt; is an excellent example of this type of machine, not least because it was designed for simplicity and reliability rather than speed, and this in turn makes it easy to understand.  This is a machine that operated entirely on decimal numbers, not on text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has a few buttons on its control panel, which are essentially used to start, stop and reset it.  It takes all its real input from a bank of perforated-tape readers, of the sort already in widespread use at telegraph offices at the time.  These contain both instructions and data for the machine to work on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Output can be to another paper tape (via a perforator), or to a printer.  Another option however is to directly read the contents of the ninety memory words, by observing the position of the discharge glow in each Dekatron tube.  Many early computers had an option similar to this, but it eventually grew impractical as the amount of memory increased.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-12-13T12:18:01.503" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13054" PostTypeId="2" ParentId="13042" CreationDate="2019-12-13T17:39:22.767" Score="11" Body="&lt;p&gt;The Super Nintendo Entertainment System (called Super Famicom in Asia) is mostly TMS9918-like. However, the CPU's integrated memory controller has its own counterpart to Amiga COPPER, called HDMA (horizontal blanking direct memory access). HDMA can reprogram PPU registers during hblank based on up to eight lists stored in work RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each HDMA channel has these parameters:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;B Bus destination address (&lt;code&gt;$00&lt;/code&gt; to &lt;code&gt;$3F&lt;/code&gt; select various PPU registers, and &lt;code&gt;$40&lt;/code&gt; to &lt;code&gt;$43&lt;/code&gt; select the sound CPU's communication ports)&lt;/li&gt;&#xA;&lt;li&gt;A Bus address of the list (usually within the console's work RAM at &lt;code&gt;$7E0000&lt;/code&gt; to &lt;code&gt;$7FFFFF&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Write pattern (different PPU registers need single writes, double writes, or writes to consecutive addresses)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Each entry in an HDMA list consists of one byte for the height (number of lines to wait afterward) followed by one to four bytes to write depending on the write pattern configured for the channel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Games use HDMA for several purposes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Lots of platformers use HDMA to the color palette port or the auxiliary color (&lt;code&gt;COLDATA&lt;/code&gt;) for sky gradients.&lt;/li&gt;&#xA;&lt;li&gt;HDMA to scroll registers warps the screen for hot rooms, underwater, or at the water's surface in &lt;em&gt;Donkey Kong Country&lt;/em&gt; series. It helps render abstract backgrounds in RPG battle scenes in &lt;em&gt;EarthBound&lt;/em&gt;. It does limited parallax warping of the floor in &lt;em&gt;NBA Jam&lt;/em&gt; and &lt;em&gt;Street Fighter II&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;When combined with vertical scrolling per column (offset-per-tile in modes 2, 4, and 6), HDMA to the horizontal scroll register allows rotating a background by up to 1/8 radian (7 degrees) without having to use mode 7. &lt;em&gt;Star Fox&lt;/em&gt; uses this for its sky box in order to draw the Super FX-rendered playfield as another background in front.&lt;/li&gt;&#xA;&lt;li&gt;Mode 7 by default offers only affine transformation (scrolling, scaling, rotation, and shearing) of the entire screen. HDMA to mode 7's affine matrix registers allows rewriting the matrix on each scanline, leading to the over-the-shoulder perspective popularized by &lt;em&gt;F-Zero&lt;/em&gt; and &lt;em&gt;Super Mario Kart&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Because of restrictions on mode 7's memory layout, games using mode 7 for the playfield (such as &lt;em&gt;Cameltry&lt;/em&gt;/&lt;em&gt;On the Ball&lt;/em&gt;) often use mode 1 for the sky box and status bar. If one of the HDMA channels is free, it can be set to change the mode instead of changing it with the CPU in an HV interrupt handler.&lt;/li&gt;&#xA;&lt;li&gt;The window registers allow showing or hiding background layers or color blending effects between two pairs of left and right coordinates. To give this shadow a shape, games use HDMA to change the windows' coordinates per line. For example, HDMA outlines the keyhole in &lt;em&gt;Super Mario World&lt;/em&gt;, the other vehicles' shadows in a few mode 7 racing games, the player's current place (e.g. &quot;2&quot; for second place) in &lt;em&gt;Super Mario Kart&lt;/em&gt;, and the de-materialized form of Sting Chameleon in &lt;em&gt;Mega Man X&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;A handful of homebrew games, such as &lt;em&gt;N-Warp Daisakusen&lt;/em&gt;, use HDMA to the sound CPU's communication ports to stream vocal samples without needing constant involvement from the main CPU.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Nintendo 64 uses a completely different architecture. It has a main CPU, a Reality Signal Processor (DSP for vertex shading), and a Reality Drawing Processor (fixed-function triangle drawing unit with depth buffering). Do the lists sent from the main CPU to the RSP or from the RSP to the RDP count as display lists?&lt;/p&gt;&#xA;" OwnerUserId="586" LastActivityDate="2019-12-13T17:39:22.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13055" PostTypeId="1" AcceptedAnswerId="13058" CreationDate="2019-12-13T18:04:18.967" Score="7" ViewCount="270" Body="&lt;p&gt;In the Apple II, DMA and IRQ priority is determined by a daisy-chain system, in which a card may only assert an IRQ or perform DMA when all higher-priority cards allow it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand the importance of “following the rules” with DMA and not doing DMA out of turn, since there can only be one bus master at a time. But what are the negative consequences of asserting an IRQ at the same time as another card? I have seen some cards with participate in the IRQ daisy chain and others which assert IRQ but which ignore the priority daisy chain. What additional considerations must be made when designing a card which asserts IRQ regardless of the IRQ daisy chain input?&lt;/p&gt;&#xA;" OwnerUserId="7486" LastEditorUserId="7486" LastEditDate="2019-12-13T22:32:32.293" LastActivityDate="2019-12-17T20:15:30.250" Title="Importance of obeying Apple II IRQ priority" Tags="&lt;apple-ii&gt;&lt;interrupt&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13056" PostTypeId="2" ParentId="13036" CreationDate="2019-12-13T18:05:35.380" Score="10" Body="&lt;p&gt;From the point-of-view of someone at the time, you interacted with early computers in the usual way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the 1930's onwards, business and some science used IBM and Remmington-Rand  mechanical punched-card processing machines. You set up the specialized gear-based machines for your job (payroll, overdue accounts, super-hard math equation), punched data onto cards, fed them in, and the output was either printed (all caps), or punched onto more cards (for example, payroll checks). Some systems used a long paper tape (which had been used for telegraphs for 50+ years) or very early (1900) systems had numeric dials -- you hand-copied the answer after it finished. But however you did it, it was 1 run with 1 set of results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 1950's computer (UNIVAC, IBM702, Honeywell D-1000) essentially replaced the middle part of that system. If you worked at Prudential, you typed the same cards, fed into the same readers, and generated the same printed reports. That was on purpose. Businesses could buy a computer without having to retrain the entire data-processing staff. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't that simple. Quickly we started using new magnetic tape for I/O. And computers weren't seen only as &quot;like the old machines, but faster&quot; -- early on we knew they could also do more. There was some early work interacting using light pens (SAGE). But in general, we thought it was normal to have Batch Jobs, which were &quot;1 run, 1 result, no interaction&quot; for quite a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.scribd.com/document/93125207/USN-Machine-Accountant-Training-1966&quot; rel=&quot;nofollow noreferrer&quot;&gt;An early 1960's manual&lt;/a&gt; gives a nice feeling for how computers fit right into the old system: Chapter 1 explains how ADP (automatic data processing) consists of EAM and EDP. The old mechanical systems are Electric Accounting Machines, while computers are Electronic Data Processing machines. Using either of them is the same job. Ch2, page 11+, gives a nice history, then page 31 starts on EDP (again, computers). It explains how the major difference is only programming (which someone else does) and knowing how to mount tape reels sometimes.&lt;/p&gt;&#xA;" OwnerUserId="15823" LastEditorUserId="15823" LastEditDate="2019-12-18T23:00:24.197" LastActivityDate="2019-12-18T23:00:24.197" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13057" PostTypeId="2" ParentId="13036" CreationDate="2019-12-13T19:05:46.773" Score="0" Body="&lt;p&gt;Besides dedicated LEDs/lights, some of the earlier computers printed out there.  In my first programming class, our college had an old PDP-11.  Running a program would result in an answer on the printer.  For batch programs running on other mini-computers, the output all went to a printer.  Fortunately, we were able to use terminals with screens for the actual development of the computer programs, as programming with punch cards (the way of some of the computers of the 50s/60s) would be unnecessarily tedious and error-prone.  But it is technically possible to be screenless and just type your answers and get your responses real-time on a printer.&lt;/p&gt;&#xA;" OwnerUserId="15825" LastActivityDate="2019-12-13T19:05:46.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13058" PostTypeId="2" ParentId="13055" CreationDate="2019-12-13T19:16:24.243" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But what are the negative consequences of asserting an IRQ at the same time as another card?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Overhead and delay during the interrupt handling, but more important potential mixed up priorities.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Priority&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;After all, the 6502 provides only a single interrupt. If multiple cards issue interrupts at the same time, the handlers will be called in the sequence they hooked the vector. When called a handler has to check if it's its own card the interrupt is about - by whatever means. If not, the chain is continued. This means priority is handled in reverse sequence of handlers installed - read, &lt;strong&gt;the last one installed gets the highest priority&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Possible Ways to Screw Up Priority&lt;/h3&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;When drivers are installed as part of initialization - like when searched by the Autostart Monitor, or some OS - they are usually installed top down, so from slot 7 down to slot 1 - which is the native priority on an Apple II. Due this sequence, lower slot number drivers will get higher priority - which is at least unexpected.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When drivers are installed after OS setup by some script or software, they come up in random order, resulting in random priority.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Both can be avoided when cards obey the hardware protocol as now priority is always fixed and following the same scheme which fis well the basic philosophy of geographic addressing/handling of the whole Apple II.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Interwoven Interrupts&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A good interrupt handling considers two factors&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Concurrent should be served in sequence of priority&lt;/li&gt;&#xA;&lt;li&gt;Lower priorized interrupts should give way as soon as possible if a higher one occures.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;While the first can as well be handled in software, the second needs cooperation of software and hardware. Usually an interrupt can be sliced into 4 pahses:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Interrupt recognition&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; Checking if the interrupt is about (one of) the handlers devices&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Data acquisition&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; All acivity that has to be done uninterrupted&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Interrupt acknowledge/clearing&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; Clearing the interrupt source&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Housekeeping&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whatever is needed to transport data and setup everything for the next interrupt round.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Getting ready for the next (own) interrupt&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; Whatever else needs to be done, but can happen without blocking other interrupts.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Usually phase 3 ends with a &lt;code&gt;CLI&lt;/code&gt;instruction allowing other interrupts to happen. From this point on any other interrupt may occur, no matter if of higher or lower priority - as the CPU itself has no knowledge about priority. While this is in general a good idea, it might lead to a situation where lower priorized interrupts hit and get the full time to finish - including housekeeping, before a higher can have his part done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With simple handlers/interrupts, this may work fine, but more often than not it leads to most housekeeping done during phase 2, and doing the &lt;code&gt;CLI&lt;/code&gt; only at the end of phase 5. As a result the the system will become a bit less responsive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if the hardware obeys not only the interrupt protocol (enabling priority), but active controls the interrupt protocol, over all responsiveness may/will improve.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What additional considerations must be made when designing a card which asserts IRQ regardless of the IRQ daisy chain input?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Hardware should for one obey the priority chain, so only issue an interrupt if no higher priority one is active and pulling the chain if it got one, but as well make releasing the chain again a separate step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This leaves it up to the software (interrupt handler) to act as cooperative as possible:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Check for prior handler when installing&lt;/li&gt;&#xA;&lt;li&gt;Mark down that address&lt;/li&gt;&#xA;&lt;li&gt;Check if the interrupt is really from your source.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If not, jump to any prior driver - if none, return (*1)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Handle whatever of that interrupt processing must be done without any time delay. Usually this isn't much - if any at all.&lt;/li&gt;&#xA;&lt;li&gt;Up until here the handler is protected against any interrupt&lt;/li&gt;&#xA;&lt;li&gt;Release the interrupts (&lt;code&gt;CLI&lt;/code&gt;), but keep the chain pulled.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;From this point on higher priorized interrupts as well as any interrupt not following the protocol can happen.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Continue with whatever has to be done.&lt;/li&gt;&#xA;&lt;li&gt;Release the chain&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;From this point on any lower priorized interrupt (that follows the protocol) may happen as well.&lt;/li&gt;&#xA;&lt;li&gt;The handler is still protected against his own interrupts &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Reinitialize your hardware to be able to issue new interrupts&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Now everyone, including your own hardware can interrupt again (*2).&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;RTI&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Sounds complicated, but isn't and easy to implement.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - In general this is done by having the jump always point to an RTS and patching it when a prior driver existed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - It might be a good idea to disable interrupts right before doing so - to be released by RTI - to avoid interrupt stacking under high load/overload.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="13904" LastEditDate="2019-12-17T20:15:30.250" LastActivityDate="2019-12-17T20:15:30.250" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13059" PostTypeId="1" AcceptedAnswerId="13061" CreationDate="2019-12-13T19:47:39.550" Score="6" ViewCount="404" Body="&lt;p&gt;Looking over the &lt;a href=&quot;https://archive.org/details/bitsavers_fairchildmflameDataSheetDec78_2098325&quot; rel=&quot;noreferrer&quot;&gt;9440 spec sheet&lt;/a&gt;, a question arises. The very first line notes that it has eight registers... eight? There's the four AC's, PC, carry bit (all 16-bits for that one!) and... what? On the NOVA3 you would have SP and SO, but this didn't have a stack. Anyone know?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2019-12-13T20:44:32.170" Title="8 registers in the 9440?" Tags="&lt;cpu&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13060" PostTypeId="2" ParentId="13036" CreationDate="2019-12-13T20:05:00.873" Score="3" Body="&lt;p&gt;The first computer I built was a &lt;a href=&quot;https://en.wikipedia.org/wiki/COSMAC_ELF&quot; rel=&quot;nofollow noreferrer&quot;&gt;COSMAC ELF&lt;/a&gt;.  It didn't have a keyboard or a monitor, no CLIUI/TUI/GUI.  It was a full-fledged digital electronic computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It had 8 toggle switches and a pushbutton for input and a dual 7-segment LED display for output.&lt;/p&gt;&#xA;" OwnerUserId="7510" LastActivityDate="2019-12-13T20:05:00.873" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13061" PostTypeId="2" ParentId="13059" CreationDate="2019-12-13T20:32:51.473" Score="5" Body="&lt;p&gt;Looking over the data sheet referenced, there is also an Instruction Register, and a &quot;Bus Register&quot;. The IR is obvious. The BR seems to perform a similar function for fetched data (not instructions).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Together with the 4 accumulators, PC, and SR makes 8 16-bit registers.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-12-13T20:32:51.473" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13062" PostTypeId="2" ParentId="13059" CreationDate="2019-12-13T20:44:32.170" Score="4" Body="&lt;p&gt;Try reading as far as Pages 2 and 3 of your data sheet:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Four general purpose registers, program counter, and three internal special-purpose registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calling something which &quot;holds the data being transferred from the ALU to the destination accumulator register for one clock cycle&quot; a &quot;scratch register&quot; might have been done by the marketing department who wanted more registers, not the chip designers, but who knows.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2019-12-13T20:44:32.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13063" PostTypeId="2" ParentId="13042" CreationDate="2019-12-13T22:37:20.607" Score="5" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Imlac_PDS-1&quot; rel=&quot;noreferrer&quot;&gt;Imlac PDS-1&lt;/a&gt; is exactly what you're looking for: A general purpose computer with two instruction sets - one instruction set was a &quot;stretched&quot; PDP-8 (16 bits instead of 12 bits, 2 registers instead of 1) and the other complete instruction set - with subroutine calls! - was for executing display lists on the built-in vector graphics console.  The instructions were relative moves with beam on and off - which had multiple instruction formats for short and long moves - and the subroutine call.  The CPU would switch between the instruction sets under program control - basically, you needed to switch to display list mode often enough that the lines glowing on the phosphor didn't fade away ... if you put too much stuff in your display list you'd get a really nasty (and headache causing) flicker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I programmed this computer in the Harvey Mudd College computer &quot;lab&quot; between 1973 and 1977.  Graphical programs I wrote included a terminal emulator, an &quot;IDE&quot; for creating/displaying/printing Mayan hieroglyphs, an implementation of the SIGGRAPH 2D and 3D &quot;Core Graphics&quot; API (though at that time I don't think the term &quot;API&quot; had been invented), and a solar system simulation (an &quot;orrery&quot;).  All in assembly language, whoohoo!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(In 1976-77, working part time while still at HMC, I programmed, for the Imlac, an instructor's control console for a sonar system trainer developed at Honeywell's Marine System Division (West Covina, CA) - it was shipped to the Navy with a couple of copies of the multi-computer trainer. Got me my first programming job as an FTE, there at Honeywell!)&lt;/p&gt;&#xA;" OwnerUserId="332" LastEditorUserId="332" LastEditDate="2019-12-13T22:44:15.153" LastActivityDate="2019-12-13T22:44:15.153" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13064" PostTypeId="2" ParentId="13036" CreationDate="2019-12-14T02:10:49.357" Score="0" Body="&lt;p&gt;When I started programing in 1974, I had a keyboard, printer, and punch card reader/writer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a command prompt in Windows the text is printed to the window rather than a real printer. Just the way it was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early hobbyist computer kits had switches, one set for address, one set to set the value of that address, and two sets of lights showing address/value. The only useful program I saw was tennis.&lt;/p&gt;&#xA;" OwnerUserId="15826" LastActivityDate="2019-12-14T02:10:49.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13065" PostTypeId="2" ParentId="13036" CreationDate="2019-12-14T02:57:07.887" Score="0" Body="&lt;p&gt;I used to maintain a sonar system with an embedded computer.  While the sonar system was certainly a sensor, and the computer could drive displays, it was also possible (but awkward) to use the computer itself with all the other cabinets shut down.  Programs could be entered, single-stepped, or ran by pushing buttons.  And results could be read from lights.  Each bit of each register was connected to a light which was also a button to change the state of that bit.&lt;/p&gt;&#xA;" OwnerUserId="10645" LastActivityDate="2019-12-14T02:57:07.887" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13066" PostTypeId="2" ParentId="13036" CreationDate="2019-12-14T03:41:40.647" Score="2" Body="&lt;p&gt;Before terminals, the most common method of interacting with large electronic tabulators, calculators, and computers (IBM mainframe, et.al.) was via punched cards for input, and line printer output for output.  Some minicomputers used punched paper tape instead of punched cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first terminals were mechanical teletypes (ASR-33, et.al.), with a keyboard plus a line-by-line printer above the keyboard.  No glass display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first personal computers (Altair, IMSAI, KIM-I, Cosmac Elf) had switches on the front panel for input and LEDs for output.  A serial port that could connect to a glass terminal was optional.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2019-12-20T00:14:46.133" LastActivityDate="2019-12-20T00:14:46.133" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13067" PostTypeId="1" CreationDate="2019-12-14T05:16:02.827" Score="1" ViewCount="117" Body="&lt;p&gt;I'm trying to track down a replacement faceplate for an IBM PS/2 Model 56. Mine was broken during shipping. Anybody have any ideas where I could find one?&lt;a href=&quot;https://i.stack.imgur.com/VaeEm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VaeEm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xjZsd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xjZsd.jpg&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15827" LastActivityDate="2019-12-14T09:58:42.003" Title="IBM PS/2 Model 56 486 SLC2 Faceplate replacement" Tags="&lt;ibm&gt;&lt;case&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13069" PostTypeId="2" ParentId="13067" CreationDate="2019-12-14T09:58:42.003" Score="1" Body="&lt;p&gt;Try to find another piece on eBay. You can set the &quot;search watch&quot; and then you will get a message when someone adds a suitable item. Sometimes you can find just &quot;case&quot; or &quot;plastic&quot;. But be patient.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-14T09:58:42.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13070" PostTypeId="1" AcceptedAnswerId="13071" CreationDate="2019-12-14T16:41:26.733" Score="5" ViewCount="263" Body="&lt;p&gt;Around 1984, Commodore transitioned from using round LED bulbs for power and drive indicators to rectangular ones. Some of these could be quite wide, like the ones pictured for a 1571 disk drive. They measure about 15mm in width and have four through-hole leads. C128 uses the same. Some Amiga gear has smaller rectangular LEDs, and some same size as pictured (A500).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where can replacements for these type of LEDs and similar rectangular varieties be found? (Looking on parts sites I've only seen two and three lead versions of smaller size).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QwSoH.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QwSoH.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2019-12-14T17:26:22.043" LastActivityDate="2019-12-15T14:07:16.200" Title="Finding replacement LEDs for Commodore gear?" Tags="&lt;hardware&gt;&lt;commodore&gt;&lt;repair&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13071" PostTypeId="2" ParentId="13070" CreationDate="2019-12-14T17:36:14.867" Score="8" Body="&lt;p&gt;&lt;em&gt;(This question is a bit close to 'what to buy', but examples given are just such, as there are other suppliers)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are not wide ones, but two within one package. Looking at the back will show that each pair is wired separate (AFAIR simply in parallel). Such dual package LED were already back then special types. Nowadays they are no longer needed, as LED became much brighter, able to lit up a long slot as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best way to replace then is using two standard rectangular LED adding up to the same size - after all, it's exactly what they are :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BIVAR R7GD (Diffused Green) or R7RT (Tinted Red) at 7x2 mm&lt;/li&gt;&#xA;&lt;li&gt;DIALIGHT 521-9266 (Tinted Green) at 7.3x2.4 mm&lt;/li&gt;&#xA;&lt;li&gt;Fairchild (ON) 0300 series at 7,4x2,5 mm&lt;/li&gt;&#xA;&lt;li&gt;Knightbridge L-153 series at 7x2.3 mm&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There is a rather large selection around that sweet spot. But be careful, sometimes sizes vary between colours for the same series.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Useless Knowledge:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Above pictured LED assembly (250754-04) for the 1571 did cost, as spare part, 8.96 Mark (+tax) in 1991.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-15T14:07:16.200" LastActivityDate="2019-12-15T14:07:16.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13072" PostTypeId="2" ParentId="12377" CreationDate="2019-12-14T18:39:32.307" Score="4" Body="&lt;p&gt;tabduikov's bounty led me to take another look.  I did some digging and found my old copy of the &lt;em&gt;KDJ11-A CPU Module User's Guide&lt;/em&gt; © 1984 Digital Equipment Corporation. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Dave, I'm not sure how it worked on every PDP-family chip. What I can tell you for certain is that, on an LSI-11/73 and Q-Bus, the MFP? and MTP? instructions did allow random access to any word in the 18-bit address space. No MMU need be involved.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It seems my &quot;certainty&quot; was in error.  This book is for the board which was in our system.  Its section 1.5, &lt;strong&gt;MEMORY MANAGEMENT&lt;/strong&gt;, has 16 pages, several of which contain notes which I wrote in the book and several sections show highlighting in the same sloppy traces I would make. So, even though I do not remember, I made them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt; I &lt;strong&gt;did&lt;/strong&gt; use the system's memory management unit after all.  I think I mapped a flat 18-bit space and did not mess with the MMU directly after that.  With Forth being the system's OS, language, application, and development environment, there was no worry of something else redefining the memory map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I did not have three 32 kword LUTs, but three 16 kword LUTs.  The video &lt;em&gt;cabinet&lt;/em&gt; (this was before such a thing could fit on a board) used 14-bit IHS (Intencity, Hue, Saturation) with two separate bit planes for overlays.  So mapping from an IHS value to its R, G, and B equivalents was only a 14-bit lookup.  Since the M?PD instructions moved a word at a time, I probably doubled up each byte value so I could simply access the lower byte without having to decide whether to use the upper or lower one.  Note this was important because every mapping (including raw physical) reserves the top 4 kwords for the CPU's I/O space.  I could not have had simple 64 Kbyte look-ups even if I had wanted them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I apologize to another-dave and his source Bob Supnik for insisting I was correct.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2019-12-14T18:39:32.307" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13074" PostTypeId="1" CreationDate="2019-12-15T04:30:41.113" Score="9" ViewCount="593" Body="&lt;p&gt;I have a &lt;a href=&quot;https://obsolescence.wixsite.com/obsolescence/pidp-11&quot; rel=&quot;noreferrer&quot;&gt;PiDP-11&lt;/a&gt; kit, which emulates a PDP-11/70 console. I've been using it as a launch point to gradual learning about the original machines and so far have been able to read/write memory and launch simple machine code routines from the console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I begin to tweak and debug such routines, I've had trouble tracking down how to (or whether one even can) inspect the R1–R5 and R6/R7 register contents via the console switches. Do I need to use the &quot;DISPLAY REGISTER&quot; setting on the bottom knob? How do I select which of the registers (and user vs. kernel group) is displayed?&lt;/p&gt;&#xA;" OwnerUserId="13904" LastActivityDate="2019-12-16T23:54:43.777" Title="How to view register contents on the PDP-11 console?" Tags="&lt;pdp-11&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13075" PostTypeId="2" ParentId="13074" CreationDate="2019-12-15T06:06:19.730" Score="6" Body="&lt;p&gt;Remember that the registers are also mapped to memory addresses. If you want to examine register R5, this is the same as examining memory location 177705 which you can do from the front panel.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="10854" LastEditDate="2019-12-15T14:13:56.270" LastActivityDate="2019-12-15T14:13:56.270" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13076" PostTypeId="2" ParentId="13074" CreationDate="2019-12-15T14:02:26.547" Score="5" Body="&lt;p&gt;Chapter 11 in the &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp11/1170/PDP-11_70_Handbook_1977-78.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-11/70 handbook&lt;/a&gt; describes the console operation of the actual 11/70.  The fidelity of the PiDP to this is of course a different question; my impression is that 'major' functions are fine, but of course anything related to microcode is not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speaking for the 11/70: all of the general registers are mapped to physical addresses, and they're listed in Appendix A (section 4). The two register sets and three stack pointers have different addresses. These are also listed on page 11-4 of the PDP-11/70 handbook:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The General Registers can be examined and deposited using the EXAM and&#xA;  DEP Switches provided the previous LOAD ADRS operation loaded the&#xA;  Address Display with a &quot;register address.&quot;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Address       Register&#xA;17 777 700    Register 0 (Set 0)&#xA;…&#xA;17 777 705    Register 5 (Set 0)&#xA;17 777 706    Register 6, Kernel Mode&#xA;17 777 707    Program Counter&#xA;17 777 710    Register 0 (Set 1)&#xA;…&#xA;17 777 715    Register 5 (Set 1)&#xA;17 777 716    Register 6, Supervisor Mode&#xA;17 777 717    Register 6, User Mode&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;Examining and depositing into General Register Addresses is&#xA;  independent of the Address Select Switch. It is not possible to be&#xA;  mapped to a General Register.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For 'bare machine' operation, it's probably convenient to have ADDRESS SELECT on CONS PHYSICAL (and thus addresses are 22 bit physical) and DATA SELECT on DATA PATHS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, there's a Google group specifically for PiDP-11 questions, in case that's useful. See the 'forum' link from &lt;a href=&quot;https://obsolescence.wixsite.com/obsolescence/pidp-11&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-12-16T23:54:43.777" LastActivityDate="2019-12-16T23:54:43.777" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13077" PostTypeId="1" AcceptedAnswerId="13081" CreationDate="2019-12-16T01:28:17.010" Score="9" ViewCount="1540" Body="&lt;p&gt;According to &lt;a href=&quot;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Joining_Apple_Computer&quot; rel=&quot;noreferrer&quot;&gt;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Joining_Apple_Computer&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Apple II displayed white text on a black background. I argued that to do graphics properly we had to switch to a white background like paper. It works fine to invert text when printing, but it would not work for a photo to be printed in negative. The Lisa hardware team complained the screen would flicker too much, and they would need faster refresh with more expensive RAM to prevent smearing when scrolling. Steve listened to all the pros and cons then sided with a white background for the sake of graphics.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What exactly was the refresh rate of the Lisa and Macintosh? Was it faster than the usual 60 Hz?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-12-19T15:17:49.267" Title="What was the screen refresh rate of the Lisa and original Macintosh?" Tags="&lt;history&gt;&lt;video&gt;&lt;apple-macintosh&gt;&lt;apple&gt;&lt;apple-lisa&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13078" PostTypeId="2" ParentId="12994" CreationDate="2019-12-16T01:43:58.317" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://www.ljw.me.uk/educ8/&quot; rel=&quot;nofollow noreferrer&quot;&gt;EDUC-8&lt;/a&gt; derived its control lines directly from an instruction and did not use any form of microcode ROM. It was a serial processor so a fixed number of timing cycles were required for each instruction. The only extension to the timing cycle were for Examine and Deposit related to operation of the front panel's memory examination or data entry from switches. I would argue these two are manual operations unrelated to program execution. The circuits and construction details are available at:&#xA;&lt;a href=&quot;https://ia601209.us.archive.org/26/items/Educ-8/educ8.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ia601209.us.archive.org/26/items/Educ-8/educ8.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15794" LastEditorUserId="15794" LastEditDate="2019-12-16T01:49:46.253" LastActivityDate="2019-12-16T01:49:46.253" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13079" PostTypeId="2" ParentId="13077" CreationDate="2019-12-16T02:14:51.503" Score="6" Body="&lt;p&gt;I wrote an emulator earlier the year, so I can answer on the Macintosh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The processor's clock rate is 7,833,600 Hz; the video subsystem is completely synchronous and completes each line in 352 processor cycles, outputting a total of 370 lines per frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore each frame is 130,240 cycles long.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the original Macintosh produces a touch less than &lt;strong&gt;60.15 frames per second&lt;/strong&gt;. So it's as much 60Hz as almost any other machine you care to mention, though nowhere near NTSC timings otherwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Additionally, for the curious: two pixels are output per processor clock, 512 are pixels, and the equivalent of an additional 192 are spent on blanking and retrace. Of the 370 line period that completes a frame, 342 contain pixels and the other 28 are blanking and retrace. So the actual output resolution is 512x342).&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4921" LastEditDate="2019-12-19T15:17:49.267" LastActivityDate="2019-12-19T15:17:49.267" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13080" PostTypeId="1" AcceptedAnswerId="13095" CreationDate="2019-12-16T02:17:42.957" Score="2" ViewCount="262" Body="&lt;p&gt;Friend uses old braille displays in his company, but their producer does not exist, they use serial port and there is problem with either drivers (Ethernet) for &amp;lt;= Win 98 or serial access on NT+ on new or newer machines. Are there any possibilities to upgrade old unreliable PC's and keep expensive braille displays working ?&#xA;&lt;hr&gt;&#xA;&lt;strong&gt;Edit&lt;/strong&gt;&#xA;Found something easy, seems to work:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.softpedia.com/get/System/System-Miscellaneous/PortTalk.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;PortTalk&lt;/a&gt; - allowio &quot;testio32.exe /R1 0x3F8&quot; 0x3F8&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;AllowIO for PortTalk V2.0&#xA;Copyright 2002 Craig Peacock&#xA;http://www.beyondlogic.org&#xA;Address 0x3F8 (IOPM Offset 0x7F) has been granted access.&#xA;Executing testio32.exe /R1 0x3F8 with a ProcessID of 4532&#xA;PortTalk Device Driver has set IOPM for ProcessID 4532.&#xA;&#xA;C:...&amp;gt;_inp(0x3F8) = 0xFF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And without last port to be open:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;allowio &quot;testio32.exe /R1 0x3F8&quot;&#xA;AllowIO for PortTalk V2.0&#xA;Copyright 2002 Craig Peacock&#xA;http://www.beyondlogic.org&#xA;Executing testio32.exe /R1 0x3F8 with a ProcessID of 4328&#xA;PortTalk Device Driver has set IOPM for ProcessID 4328.&#xA;&#xA;C:...&amp;gt;_inp(0x3F8) failed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15842" LastEditorUserId="15842" LastEditDate="2020-01-31T09:55:59.597" LastActivityDate="2020-01-31T09:55:59.597" Title="Serial Braille DOS driver on XP or higher?" Tags="&lt;ms-dos&gt;&lt;windows-98&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13081" PostTypeId="2" ParentId="13077" CreationDate="2019-12-16T02:19:33.007" Score="7" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;No, not really, the &lt;strong&gt;Mac&lt;/strong&gt;'s refresh rate is &lt;strong&gt;60.14 Hz&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I'm missing the exact data on the &lt;strong&gt;Lisa&lt;/strong&gt;, but it's as well close to (or at) &lt;strong&gt;60 Hz&lt;/strong&gt;  (*1).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;How Come?&lt;/h2&gt;&#xA;&lt;p&gt;The Mac timing is a bit odd and built around the Video timing.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Base clock is 7.83 MHz (*2)&lt;/li&gt;&#xA;&lt;li&gt;Line frequency is 22.255 kHz.&lt;/li&gt;&#xA;&lt;li&gt;Thus a video line is exactly 352 clock cycles&lt;/li&gt;&#xA;&lt;li&gt;A 68k needs 4 cycles per read/write&lt;/li&gt;&#xA;&lt;li&gt;This gives 88 memory access slots&lt;/li&gt;&#xA;&lt;li&gt;One line is 512 pixel or 32 (16 bit) words&lt;/li&gt;&#xA;&lt;li&gt;CPU and video access RAM alternating during the first 64 access slots&lt;/li&gt;&#xA;&lt;li&gt;CPU gets 24 exclusive slots during horizontal retrace.&lt;/li&gt;&#xA;&lt;li&gt;CPU gets as well all slots during vertical retrace&lt;/li&gt;&#xA;&lt;li&gt;There are ~32,560 access slots in frame (Refresh is 60.14 Hz)&lt;/li&gt;&#xA;&lt;li&gt;There are 342 lines per screen&lt;/li&gt;&#xA;&lt;li&gt;Resulting in 342 x 32 = 10,944 video reads&lt;/li&gt;&#xA;&lt;li&gt;This leaves about 2/3rd for the CPU&lt;/li&gt;&#xA;&lt;li&gt;If the CPU would utilize memory at all times, the effective speed would be close to 5.2 MHz&lt;/li&gt;&#xA;&lt;li&gt;Since the 68k isn't, and it's only stopped when there is a memory access, &lt;strong&gt;effective speed is more like 6 MHz&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Just flipped thru the whole Lisa 1 and 2 repair manuals (as well as MacXL modifications), but couldn't find any numbers. There is a reference to 22.9 kHz line frequency, which means it'll end up at 60 Hz +/- 3 Hz, but information to close that gap.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Not 8 MHz as it's usually claimed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-12-19T15:16:59.640" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13082" PostTypeId="1" CreationDate="2019-12-16T11:52:11.620" Score="12" ViewCount="658" Body="&lt;p&gt;Over time, I collected some rare and interesting emulators and their roms and software for, for example, region specific computer machines, rare 1-2 gen consoles and what not. Many of these emulators are no longer possible to find online (at least in 15 minutes). I wonder, if there an appropriate place to upload, for them to still be available to the public, and perhaps for them to be preserved?&lt;/p&gt;&#xA;" OwnerUserId="15407" LastActivityDate="2019-12-22T20:36:56.803" Title="Where to upload the odd and rare emulators and related to them ROMs &amp; software?" Tags="&lt;emulation&gt;&lt;archival&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13083" PostTypeId="2" ParentId="13082" CreationDate="2019-12-16T12:37:00.277" Score="14" Body="&lt;p&gt;You could upload them &lt;a href=&quot;https://archive.org/create&quot; rel=&quot;noreferrer&quot;&gt;to the Internet Archive&lt;/a&gt;, which already hosts large quantities of emulators and &lt;a href=&quot;https://archive.org/details/softwarelibrary&quot; rel=&quot;noreferrer&quot;&gt;software&lt;/a&gt; (much of which is now available in in-browser emulators).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you’ve finished uploading your archives, ping &lt;a href=&quot;http://ascii.textfiles.com/&quot; rel=&quot;noreferrer&quot;&gt;Jason Scott&lt;/a&gt; for help getting them categorised appropriately. Or even, if you’re planning on uploading lots of software, ping him before you get started, he’ll set you up with better tools for large quantities of uploads (thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4222/jim-nelson&quot;&gt;Jim Nelson&lt;/a&gt; for the reminder!).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-12-16T22:12:15.457" LastActivityDate="2019-12-16T22:12:15.457" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13084" PostTypeId="1" AcceptedAnswerId="13085" CreationDate="2019-12-16T14:28:41.140" Score="13" ViewCount="1603" Body="&lt;p&gt;Why do the OOB (out-of-bounds) areas of Doom look so unusual?&lt;a href=&quot;https://i.stack.imgur.com/naJ30.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/naJ30.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;As seen in the image above, the Doom engine not only incorrectly renders the scene, but also renders slices of other scenes that aren't even loaded in the map. This is not the case in other versions of doom. Just the MS-DOS original. Why does this happen and how is it possible?&lt;/p&gt;&#xA;" OwnerUserId="10751" LastEditorUserId="15334" LastEditDate="2020-11-13T21:13:02.540" LastActivityDate="2020-11-14T04:31:59.357" Title="Why are the out-of-bounds areas of Doom distorted on MS-DOS?" Tags="&lt;ms-dos&gt;&lt;gaming&gt;&lt;glitches&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13085" PostTypeId="2" ParentId="13084" CreationDate="2019-12-16T14:47:03.663" Score="20" Body="&lt;p&gt;This is known as &amp;quot;Hall of Mirrors&amp;quot; effect.&lt;/p&gt;&#xA;&lt;p&gt;The Doom Fandom Wiki states:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When the game renders the level to the screen, it draws it into a buffer, an area of memory. During gameplay, the previous contents of the buffer are overwritten by consecutive frames. However, if a player travels outside the level, there are no walls to draw, so Doom draws nothing. Instead, the previous contents of the buffer are displayed, left over from previous frames.&lt;/p&gt;&#xA;&lt;p&gt;If a player turns around and looks back toward the level, they can see through the walls and inside the level. The floors of the level stretch outwards toward the screen edge in vertical columns. This is because the Doom floor and ceiling drawing system is like a flood fill algorithm: because there are no walls to bound them, they simply &amp;quot;bleed&amp;quot; down to the edges of the screen.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://doom.fandom.com/wiki/Hall_of_mirrors_effect&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://doom.fandom.com/wiki/Hall_of_mirrors_effect&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The old MS-DOS release of DooM renders the scene different than newer source ports do. There are some good resources online that cover your question better than I could, but this answer may give you an idea on where to start looking :)&lt;/p&gt;&#xA;" OwnerUserId="15809" LastEditorUserId="148" LastEditDate="2020-11-14T04:31:59.357" LastActivityDate="2020-11-14T04:31:59.357" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13086" PostTypeId="1" CreationDate="2019-12-16T16:32:54.317" Score="17" ViewCount="1031" Body="&lt;p&gt;Some time back I asked if it was possible to get more than 8 sprites on a single scanline with the Amiga using a copper list.  It seems it is quite possible indeed!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I am wondering if it is possible to also split the screen horizontally using a copper list?  For example, can you change the resolution from lo-res to hi-res at some arbitrary X coordinate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, is it possible to change the scroll registers at an arbitrary X coordinate so that you could scroll two different planes on the same line?  For example, think of a Mario Kart type of game where the game was split vertically down the middle of the screen instead of top/bottom.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2019-12-16T17:51:13.843" Title="Can you split resolutions and scrolling (horizontally) on an Amiga?" Tags="&lt;amiga&gt;&lt;graphics&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13087" PostTypeId="2" ParentId="13086" CreationDate="2019-12-16T17:51:13.843" Score="20" Body="&lt;p&gt;Splitting the screen on an X coordinate is more involved since you'd naturally end up with some garbage at the instant you changed from one to the other. But since the copper can be instructed to WAIT accurately, the garbage would be very predictable. If you covered that with a hardware sprite, you could have two vertical views, which is exactly what you get in multiplayer Lemmings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Oe82F.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Oe82F.jpg&quot; alt=&quot;Lemmings multiplayer&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15855" LastActivityDate="2019-12-16T17:51:13.843" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13088" PostTypeId="1" CreationDate="2019-12-16T18:46:29.433" Score="14" ViewCount="3255" Body="&lt;p&gt;Within modern shells, I am able to leave a process via one of two control sequences:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Usually &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;C&lt;/kbd&gt; will directly send SIGINT to the majority of shell commands (e.g. &lt;code&gt;ping&lt;/code&gt;, &lt;code&gt;echo&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;A few processes capture the terminal and prevent that from working, but &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Z&lt;/kbd&gt; will still suspend them (e.g. &lt;code&gt;vi&lt;/code&gt;, &lt;code&gt;man&lt;/code&gt;, albeit not &lt;code&gt;screen&lt;/code&gt;) and then I can &lt;code&gt;kill %1&lt;/code&gt; to finish them off or &lt;code&gt;fg&lt;/code&gt; if I do want to resume later.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Both of these work from the very terminal running the process. That is, I can use them without needing a second login session in another window/tab.&lt;/p&gt;&#xA;&lt;p&gt;However, I am in the middle of trying to &lt;strong&gt;set up&lt;/strong&gt; a second serial port in older versions of Unix (e.g. Unix V6 or 2.11BSD) running in an emulator, and keep hitting situations where I run e.g.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;echo &amp;quot;test&amp;quot; &amp;gt; /dev/tty00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That command works fine for &lt;code&gt;/dev/tty&lt;/code&gt; but &lt;code&gt;/dev/tty00&lt;/code&gt; is apparently still not configured right on my part. And so the command just hangs! At this point, I can't do anything to stop it from trying/waiting. It doesn't seem to ever time out. Is there some more arcane key sequence or other strategy for resolving a Unix process that's stuck like this, when only one terminal is available?&lt;/p&gt;&#xA;&lt;p&gt;(I noticed this on a real PDP-11 at Living Computer Museum as well, where nothing I knew to type on the ASR-33 terminal seemed to be able to interrupt certain commands after I ran them.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: thanks for all the tips below! I can now note that it is possible to &lt;code&gt;kill&lt;/code&gt; the process by PID if I &lt;em&gt;do&lt;/em&gt; have a second terminal open, i.e. it's &lt;strong&gt;not&lt;/strong&gt; in what we would nowadays see as the dreaded &lt;a href=&quot;https://eklitzke.org/uninterruptible-sleep&quot; rel=&quot;nofollow noreferrer&quot;&gt;uninterruptible sleep&lt;/a&gt; state. However so far none of the key combinations below have worked, at least not as entered via the TELCOM program on a Tandy Model 102 (which I understand may complicate things as far as how keypresses get sent and I'll have to test separately).&lt;/p&gt;&#xA;" OwnerUserId="13904" LastEditorUserId="15334" LastEditDate="2020-11-28T19:28:17.143" LastActivityDate="2020-11-28T19:28:17.143" Title="Using only one terminal, can I interrupt a process that's hung on very early Unix versions?" Tags="&lt;unix&gt;&lt;terminal&gt;&lt;shell&gt;" AnswerCount="6" CommentCount="9" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13089" PostTypeId="2" ParentId="13088" CreationDate="2019-12-16T19:49:54.060" Score="3" Body="&lt;p&gt;It may be difficult to get signals to a process that's blocked on a syscall.  It's possible that some early UNIXes don't know how to interrupt a syscall on receipt of a signal.  In these cases you may just have to find some way to unblock the I/O device before the process blocked on it will terminate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you should be able to &lt;em&gt;send&lt;/em&gt; a signal to any process by first determining its PID with eg. &lt;code&gt;ps awx | grep echo&lt;/code&gt;, and then issue &lt;code&gt;kill -9 &amp;lt;pid&amp;gt;&lt;/code&gt;.  Both of these will need to run on an unblocked terminal, of course.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-12-16T19:49:54.060" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13090" PostTypeId="2" ParentId="13088" CreationDate="2019-12-16T20:26:38.777" Score="14" Body="&lt;p&gt;Yes, you should be able to interrupt a running process using the interrupt key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Unix v6, the default interrupt key (intr) is ^?, aka DELETE, aka RUBOUT (ASCII 127).  Also, the default character-erase key (erase) is #, and the default line-erase key (kill) is @.  You can use stty to change the 'erase' and 'kill' keys but v6 stty doesn't let you change the 'intr' key without changing the kernel (as far as I know).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 2.11BSD, I think the kernel defaults are still the same as in v6 (at least, using the old terminal driver), but the command &quot;stty dec&quot; will switch to the more common intr=^C, erase=^? and kill=^U all in a single step.  I would have to set up a 2.11BSD system and test this to be sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;^Z is a 'job control' key and wouldn't be available in Unix v6 at all.  In 2.11BSD it would only be available if you are using csh and the new terminal driver that supports jobs (2.11BSD included both an 'old' terminal driver inherited from Unix v7, as well as a 'new' BSD terminal driver that included a number of new features including process groups, used to support jobs).&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2019-12-16T20:26:38.777" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13091" PostTypeId="2" ParentId="13088" CreationDate="2019-12-17T00:11:49.593" Score="6" Body="&lt;p&gt;The 'quit' signal, though not yet called a signal, was apparently implemented in the kernel and tty driver by 1971 -- see &lt;a href=&quot;http://bitsavers.org/pdf/bellLabs/unix/UNIX_ProgrammersManual_Nov71.pdf&quot; rel=&quot;noreferrer&quot;&gt;this Unix manual&lt;/a&gt;, which I think must be the 1st edition, since there's also a 2nd edition manual at bitsavers, with a later date.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look for the 'sys quit' page, which as ever, is to be found in section II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To send a 'quit', type &lt;kbd&gt;ctrl-\&lt;/kbd&gt; on the tty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was possible for the program to handle or ignore a quit signal, but the manual warns against it, so perhaps your hung program can get unhung.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know the answer to whether a quit can be delivered to a program waiting in a syscall. I would assume the answer is in general that it could be, although if the process is hung on I/O, and this is still the &quot;need to swap out to context switch&quot; days, that might pose a difficulty.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2019-12-17T02:01:49.093" LastActivityDate="2019-12-17T02:01:49.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13092" PostTypeId="2" ParentId="5080" CreationDate="2019-12-17T01:35:28.393" Score="6" Body="&lt;p&gt;I'm a little late to this party, but here are schematics for my 20 MHz Z80180 CP/M-80 system&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.stuartball.com/retroz80/RetroZ80.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.stuartball.com/retroz80/RetroZ80.htm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15857" LastActivityDate="2019-12-17T01:35:28.393" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13093" PostTypeId="2" ParentId="13088" CreationDate="2019-12-17T15:00:55.230" Score="4" Body="&lt;p&gt;Ctrl-C, and other similar mechanisms rely on software at the receiving end reading the character, interpreting its meaning, and then sending a signal to the appropriate process.  The problem with this is that if the receiving program is hung, there is a long queue of characters ahead of the ctrl-c character waiting to be processed, or there is some other kind of deadlock in the terminal's output stream, the interrupt might never happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Dumb&quot; terminals were connected to computers (or their front-end processors) via &lt;a href=&quot;https://en.wikipedia.org/wiki/RS-232#Data_and_control_signals&quot; rel=&quot;nofollow noreferrer&quot;&gt;RS-232 - Wikipedia&lt;/a&gt; standard cables, with separate wires for request-to-send, ready-to-receive, receive-data, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a process hung, or if one simply wanted to interrupt it, the keyboard provided a &quot;Break&quot; key.&#xA;Unlike the other keys, this key didn't add a character onto the output stream.&#xA;Instead, it dropped the electrical signal on the transmit-data line (for perhaps a quarter second).&#xA;The hardware at the receiving end would notice this drop, and the hardware would notify the OS, which would send a SIGINT signal to the process that was attached to the terminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This method avoids most software and bypasses the normal data stream, so it was almost instantaneous and almost always successful.&lt;/p&gt;&#xA;" OwnerUserId="15689" LastActivityDate="2019-12-17T15:00:55.230" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13094" PostTypeId="2" ParentId="12998" CreationDate="2019-12-18T10:20:10.087" Score="6" Body="&lt;p&gt;Out of all the things I tried, what ended up working was:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Copy Windows 98 set up files to the CF card. Let windows do it's thing, and boom, it booted from the CF card.&lt;/p&gt;&#xA;" OwnerUserId="13475" LastActivityDate="2019-12-18T10:20:10.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13095" PostTypeId="2" ParentId="13080" CreationDate="2019-12-18T10:51:19.633" Score="3" Body="&lt;p&gt;Its absolutely unclear what and how you are connecting. You mentioned both COM (RS232) and LAN (Ethernet) and Win9X and NT OSes with MS-DOS tag. So we can only guess what you have and what exact issues you face...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here some stuff that might help:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;LAN&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Older MS-DOS and Win9x SW used IPX protocol instead of TCP/IP...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windowses above Win 9X do not install &lt;strong&gt;IPX&lt;/strong&gt; protocol for network adapters automatically anymore. But you can still install them manually (tested on W2K,XP) that usually solves the LAN problems for old win9X SW. You just need install CD for your Win9x. I think XP have the protocol chached in itself without any need for CD/DVD. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Newer Windows (Win7++) have some weird ballast virtual network adapters usually called &lt;code&gt;Tunneling device&lt;/code&gt; which are messing with the LAN and are hidden in device manager. If you turn on hidden devices in the &lt;strong&gt;device manager&lt;/strong&gt; menu and manually delete them all (they tend to install them self over and over many times) it usually solves older SW LAN connection problems. (Do not worry they are not needed for anything usefull)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also simpler workarounds for games like &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.solemnwarning.net/post/80&quot; rel=&quot;nofollow noreferrer&quot;&gt;IPXWrapper 0.4.1&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Where you simply place the wrapper DLL's into your executable directory and that is it. But this solution works only if both connected sides using it (games and file transfer SW or chats ets...). So this will most likely not help you at all as you got HW device where you can not place any DLL and most likely it runs on some MCU instead of x86 anyway...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Newer LAN cards do not have Win9X and MS-DOS driver support but many old 16 bit SW can still run in &lt;strong&gt;32 bit&lt;/strong&gt; OS like w2k,xp,win7 in compatibility mode ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can run older SW in emulation where you can still expose to real LAN connection&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;COM/RS232&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;this should not be a problem. There are still produced and even new machines still uses RS232 (I heavily use my on board RS232 on modern machines for ISP of MCUs without USB). So you can still make new machine with native COM port (no USB2RS232 crap that do not comply with voltage ratings and need special drivers not possible in Win9x and MS-DOS...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For SW that directly access I/O ports and memory space you need a special driver to make them working again in protected OSes like NT,W2K,WXP,... because such access is priviledged to kernel mode stuff ... To make this possible there is a very simple (but potentially high security risc so do not use this with machines connected to internet) solution:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.dlldownloader.com/io-dll/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DLL Port IO&lt;/a&gt; (I did not test the link its just first google hit)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The driver make your app Kernel mode so it can do anything without any access violations etc ... So simply write an app that opens file with the driver name, then start your SW from it and that is it ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also in case of RS232 connection you can still run MS-DOS on new machines directly. Just turn off all CACHEs in BIOS SETUP which will turn your machine into fast 386. And if needed slow it down even more using &lt;code&gt;slow&lt;/code&gt; utility or patch the TP7 CRT bug ... For more info about running real MS-DOS on new machine see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6256/6868&quot;&gt;What tools were used in late MS-DOS era for reverse engineering and patching binary executables?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2019-12-18T10:57:08.607" LastActivityDate="2019-12-18T10:57:08.607" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13096" PostTypeId="1" AcceptedAnswerId="13098" CreationDate="2019-12-18T16:40:33.897" Score="8" ViewCount="955" Body="&lt;p&gt;When working with the Focal cartridge inserted on my BK 0010, the area displayed on the monitor suddenly reduces to &lt;a href=&quot;https://i.stack.imgur.com/ftVg1.jpg&quot; rel=&quot;noreferrer&quot;&gt;just four lines&lt;/a&gt;&#xA;, instead of &lt;a href=&quot;https://i.stack.imgur.com/C953x.jpg&quot; rel=&quot;noreferrer&quot;&gt;the usual 20&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each time this has happened when I've been using a program which uses the X FV() function, to plot lines on the screen, though maybe it has also happened by me clumsily pressing a key combination in the area of the big red STOP key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems rather &quot;deliberate&quot; due to the neat line at the bottom, and the fact I can still list programs within this 36x4 box. But I am no longer to address areas of the screen outside the box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know what the cause of this might be? Is it hardware (the monitor is generally a bit shaky and sometimes fails to show anything but a white horizontal line in the middle of the screen), or is it due to some screen addressing error (though in general the Focal interpreter does not seem to complain when you try to draw a line which goes off the screen), or is it some arcane key combination I accidentally pressed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using an Elektronika BK 0010-10 with the Blok MSTD 3.069.007 Focal Cartridge, and a black-and-white MS 6105.1 monitor.&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="6659" LastEditDate="2019-12-21T11:55:52.170" LastActivityDate="2019-12-21T11:55:52.170" Title="What causes the monitor to reduce to four lines on BK 0010 Focal?" Tags="&lt;crt-monitor&gt;&lt;pdp-11&gt;&lt;ussr&gt;&lt;electronika-bk&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13097" PostTypeId="2" ParentId="13096" CreationDate="2019-12-18T17:07:25.217" Score="6" Body="&lt;p&gt;From &lt;a href=&quot;http://homecomputer.de/pages/easteurope_ussr.html&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; - It is in a section focused on BK0011, but symptoms are very similar:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It really had 32KB RAM onboard but by pressing the 'Expanded memory' button you could send it to the mode when only 4 lines of text were displayed on a screen, and saved video RAM was added to available memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I guess it could have the same reason (memory allocation for another usage).&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-18T17:07:25.217" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13098" PostTypeId="2" ParentId="13096" CreationDate="2019-12-18T17:55:59.833" Score="13" Body="&lt;p&gt;After pressing &quot;AP2+CБP&quot; key combination computer switches to extended memory mode, in which screen is reduced to 1/4 of original size giving about 12Kb memory of screen RAM to user (extending user RAM from 16K to 28K).&lt;/p&gt;&#xA;" OwnerUserId="15862" LastActivityDate="2019-12-18T17:55:59.833" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13099" PostTypeId="2" ParentId="13088" CreationDate="2019-12-18T17:56:21.083" Score="0" Body="&lt;p&gt;This isn't strictly an answer but might help you to discover one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When at a command prompt, enter the command &quot;stty -a&quot;. This should result in a listing of the key bindings for sending various signal types from the terminal to the currently running process. This might help in finding an answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some programs (as you've noted) do change the terminal mode and can disable at least some of the bindings when running. I remember (years ago) needing to kill programs and then type &quot;stty sane&quot; to get the terminal mode back to a reasonable state for the shell.&lt;/p&gt;&#xA;" OwnerUserId="15863" LastActivityDate="2019-12-18T17:56:21.083" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13100" PostTypeId="1" AcceptedAnswerId="13101" CreationDate="2019-12-18T23:29:05.780" Score="21" ViewCount="3042" Body="&lt;p&gt;The contract to develop ARPANET, the first version of the Internet, was awarded in 1969; usage of the system expanded exponentially through the seventies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The size and format of ARPANET packets were specified in terms of octets (8-bit bytes): &lt;a href=&quot;http://mercury.lcs.mit.edu/~jnc/tech/arpanet.html&quot; rel=&quot;noreferrer&quot;&gt;http://mercury.lcs.mit.edu/~jnc/tech/arpanet.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, at that time, the world had not yet settled on octets. Though the Honeywell used as the first IMP was a 16-bit computer, e.g. DEC was still selling 18/36-bit mainframes until 1983.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given a pair of PDP-10s trying to send native binary data to each other over the ARPANET, how did they go about formatting it for transmission?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-12-19T15:54:24.450" Title="How did 36-bit computers format ARPANET packets?" Tags="&lt;history&gt;&lt;dec&gt;&lt;internet&gt;&lt;pdp-10&gt;" AnswerCount="3" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="13101" PostTypeId="2" ParentId="13100" CreationDate="2019-12-19T02:06:36.490" Score="16" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;However, at that time, the world had not yet settled on octets. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I beg to differ. If you look through brochures and manuals of next to all manufacturers, they tried hard to be IBM compatible at least for data exchange. Being IBM compatible was effectively mandatory for the whole industry and with the /360 introduction in 1964 the size of a byte (for interchange) was settled at holding 8 bits.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Given a pair of PDP-10s trying to send native binary data to each other over the ARPANET, how did they go about formatting it for transmission?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The PDP-10 was quite capable to handle 8 bit data streams as well as peripherals. Its standard punchtape, the PC04, was 8 bit, and quite capable of loading binary data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I do not remember the PDP-11 binary tape format, I would assume it was not much different from the way a PDP-8 or 12 handled a binary paper tape on a PC05 (also 8 bits wide). Her a PAL/MACRO-8 binary tape stored 6 bits per character, with using the the high bits as markers. A loadertape looked like this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;10.000.000 marking the start&lt;/li&gt;&#xA;&lt;li&gt;10.xxx.xxx denoted the upper half of a loading address followed by&lt;/li&gt;&#xA;&lt;li&gt;00.xxx.xxx with the lower half of the loading address&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All following pairs of bytes with zero in the top two bits were decoded as words, until either another address was set (starting with 10), or a final mark (10.000.000) was read. If a final mark was detected. In this case the_last_ word read isn't data, but a 12 bit  checksum of the 6 bit (!) values (including the loading address) read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AFAIR if both bits are set, it addressed the field (memory block) the data had to be stored in. It had to come prior to any loader address and had the lower bits always set to zero to avoid generating a rubout - which was used to eliminate data.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-19T09:24:28.893" LastActivityDate="2019-12-19T09:24:28.893" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13102" PostTypeId="2" ParentId="13100" CreationDate="2019-12-19T15:52:42.080" Score="9" Body="&lt;p&gt;36-bit computers were used to communicate through channels which were not 36-bit. &#xA; ARPANET packets are not the only one, paper and magnetic tapes, connections to terminals, ... have also their frame which is not 36-bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Protocols and OS of the time were used to define various ways to transform 36-bit words in smaller units (search &lt;a href=&quot;http://www.bourguet.org/v2/pdp10/cmds/set&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; for &lt;code&gt;SET TAPE FORMAT&lt;/code&gt; for instance to see how TOPS-20 handled the matter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ARPANET is not an exception and FTP for instance define various types of transfer.  You can still see trace of that in the current &lt;code&gt;ftp&lt;/code&gt; command of Linux which still has &lt;code&gt;ascii&lt;/code&gt;, &lt;code&gt;binary&lt;/code&gt;, &lt;code&gt;image&lt;/code&gt; and &lt;code&gt;tenex&lt;/code&gt; commands (Tenex being the ancestor of TOPS-20) to set up the transfer types.  &lt;a href=&quot;http://www.inwap.com/pdp10/36to8.html&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; you can find a recollection of how PDP-10 sytems handled those conversion with references to RFC-959, &#xA;RFC-854 and RFC-683 (which describes how to deal with TENEX files with holes which seems to be of interest for you).&lt;/p&gt;&#xA;" OwnerUserId="5269" LastActivityDate="2019-12-19T15:52:42.080" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13103" PostTypeId="2" ParentId="13100" CreationDate="2019-12-19T15:54:24.450" Score="13" Body="&lt;p&gt;ARPANET isn't the only context in which the world of PDP-10 computing ran into data paths that used octets for framing.  Four other contexts come to mind:  9 track magnetic tape, PDP-11 file exchanges,  DECnet, and Kermit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;9 Track Magnetic Tape&lt;/strong&gt;.  9 Track tape rapidly became the most popular standard as IBM transitioned from 36 bit processors to the 360.  PDP-10 installations used 9 Tracks for backing up disks,  and also for reading and writing tapes to be used with a 360 or other mainframes.  9 track tapes had one track for a parity bit,  and an octet of data per frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PDP-11 file exchange&lt;/strong&gt;.  Many sites ended up with one or more PDP-11s sharing a data center with a PDP-10. There were a variety of needs to share native mode data,  and a variety of encoding schemes to accommodate octets and 36 bit words.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;DECnet&lt;/strong&gt;.  DECnet, like ARPANET, was built around octets.  In this context, you might want to find Technical Aspects of Data Communications (1988 3rd ed) by John E McNamara.  It's got a good writeup of the issues leading up to DECnet, especially DDCMP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Kermit&lt;/strong&gt;.  One of the first implementations of Kermit was for the PDP-10.  The Desktop computers that used Kermit were all octet oriented.  Here the issue was somewhat reversed.  Kermit could store a file made up of octets on a PDP-10 and return it to a desktop undamaged.  Seems trivial today,  but there were a number of contemporaneous tools that could only manage ASCII files. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Exploring these other contexts will give you additional handles on how people accustomed to 36 bit words adapted to octets.  &lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2019-12-19T15:54:24.450" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13105" PostTypeId="1" CreationDate="2019-12-20T02:49:57.153" Score="5" ViewCount="314" Body="&lt;p&gt;Why was the crystal clock frequency for the original Macintosh (128k,Plus, etc.) 15.667 MHz, instead of a multiple of 8 MHz (which was the maximum clock frequency for the speed grade of MC68000 choosen), or a multiple of NTSC color burst frequency, as was the predecessor Apple II/III line of computers.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2019-12-20T03:32:32.093" Title="Original Mac clock frequency" Tags="&lt;apple-macintosh&gt;&lt;design-choices&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13106" PostTypeId="2" ParentId="13105" CreationDate="2019-12-20T03:27:13.130" Score="10" Body="&lt;p&gt;15.667 Mhz is about 2% less than 16 Mhz. So for purposes of &quot;multiple of max. MC68000 frequency&quot;, it is close enough. The Mac wasn't competing based on being the fastest machine, so 2% was just not a big deal. And most of the competition was either older 8-bit or Intel family, not MC68000. In fact, the 8088 in the original IBM PC was clocked at 4.77 Mhz, which is about 5% less than the 8088's rated speed of 5 Mhz, so Apple was (sort of) copying IBM in this one aspect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main driver seems to be the video. See answers to this other recent question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13077/what-was-the-screen-refresh-rate-of-the-lisa-and-original-macintosh&quot;&gt;What was the screen refresh rate of the Lisa and original Macintosh?&lt;/a&gt; for more details. It gets complicated because Apple was doing some innovative things with video &amp;amp; graphics. Where most other computers of that time were designed (or could be relatively easily adapted) to run on ordinary monitors, Apple based the Mac on using a built-in, Apple-supplied, monitor &lt;em&gt;and nothing else&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2019-12-20T03:32:32.093" LastActivityDate="2019-12-20T03:32:32.093" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13108" PostTypeId="1" CreationDate="2019-12-20T21:10:00.113" Score="3" ViewCount="598" Body="&lt;p&gt;Years ago I was the original owner of a &quot;Titanium&quot; PowerBook G4.  Eventually, the unit bricked itself and refused to power on.  Some quick research at the time led me to believe the PRAM battery was DOA - and sure enough, replacing the little battery pack allowed the machine to work as expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, not long after, the computer was stolen during a burglary by some lowlife creep.  Since I had all the original packaging and accessories, and was certain I was never going to see my beloved G4 again (which I never did), I decided to replace the unit right away with a decent looking unit from ebay...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the replacement system has been powered off and in storage for several years and I'd like to dig it out and fire it up.  But before I do, I was going to go ahead and buy a new replacement PRAM battery for it... of course, I can't seem to find a supplier with them in stock anywhere.  Which leads to my question; Whats a retro enthusiast supposed to do to work around a DOA PRAM battery when no replacements are available?  Could a suitable &lt;em&gt;replacement&lt;/em&gt; be cobbled together from some coin cells?  Is there a work around to get the G4 to boot even when the PRAM battery is dead or missing?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2019-12-20T23:08:39.467" Title="How to work around the PRAM battery for a &quot;Titanium&quot; Powerbook G4" Tags="&lt;apple-macintosh&gt;&lt;battery&gt;&lt;powerbook&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13109" PostTypeId="2" ParentId="13108" CreationDate="2019-12-20T23:08:39.467" Score="3" Body="&lt;p&gt;The PRAM battery for a Titanium Powerbook G4 is  rechargeable, it might&#xA;not need replacing (though will certainly go flat on the shelf).&#xA;The cells are rechargeable lithium/vanadium pentoxide 3V coin cells, similar to&#xA;Panasonic VL2020, in a plastic (tape?) wrap, with pigtail connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hold down command-option-P-R at startup to reinitialize PRAM contents;&#xA;keep holding until you hear a second startup 'beep'.&#xA;If, after a day or so of power-on, the PRAM battery doesn't take&#xA;a charge, it does need replacing.   Suppliers such as OWC.COM might&#xA;have third-party parts for this.&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2019-12-20T23:08:39.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13110" PostTypeId="5" CreationDate="2019-12-21T11:54:20.107" Score="0" Body="&lt;p&gt;For all questions related to the Sovjet &lt;a href=&quot;https://en.wikipedia.org/wiki/Electronika_BK&quot; rel=&quot;nofollow noreferrer&quot;&gt;Elektronika BK&lt;/a&gt; (&lt;code&gt;Электроника БК&lt;/code&gt;) series of computers based on the K1801WM1 (&lt;code&gt;К1801ВМ1&lt;/code&gt;) LSI-11 compatible CPU. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BK-0010&lt;/li&gt;&#xA;&lt;li&gt;BK-0010.02&lt;/li&gt;&#xA;&lt;li&gt;BK-0010Sh (&lt;code&gt;БК-0010Ш&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;BK-0011&lt;/li&gt;&#xA;&lt;li&gt;BK-0011M&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-21T12:32:56.257" LastActivityDate="2019-12-21T12:32:56.257" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13111" PostTypeId="4" CreationDate="2019-12-21T11:54:20.107" Score="0" Body="Elektronika BK ( &quot;Электроника БК&quot;) series of computers &#xD;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-21T11:54:20.107" LastActivityDate="2019-12-21T11:54:20.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13113" PostTypeId="1" CreationDate="2019-12-21T20:00:43.000" Score="5" ViewCount="142" Body="&lt;p&gt;So I've finally got this Soviet &lt;a href=&quot;https://i.stack.imgur.com/LQXYC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;'Microtrainer' МТ1804&lt;/a&gt; up and running, but I'm experiencing problems with the execution of the example programs. Basically the memory seems to be working fine - I can assign values to memory locations using the front switches and they stay put. I can also assign values to registers programmatically, and I can see the results on the LEDs marked &quot;microcommand/микрокоманда&quot; when I run those lines of instructions. However, all other instructions I have tried seem to return a zero value (the LEDs show nothing). This is true for rotate, increment and add, as per the sample programs, and the commentaries on the programs suggest (and in one case explicitly states) you should be able to see the results right away on the LEDs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I can see there are two possible explanations, there may be more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) I've assumed that the LEDs in question will show me the results of operations, when in fact they only show me when values are being initially assigned to registers. However the commentary on the rotation programme specifically says that you will see the results of the rotation on the LEDs, and I don't see that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) There is something wrong with the &quot;arithmetic-logical unit&quot; (ie the CPU?) or with something downstream of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If 2 is the case, I'm wondering why I can assign values to registers, or is that a different kind of operation, not involving the &quot;arithmetic-logical unit&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I understand it, the chip in question is based on the AM2900 from AMD,and the Microtrainer is functionally identical to the &lt;a href=&quot;http://ferretronix.com/march/sbc/amd2900/&quot; rel=&quot;nofollow noreferrer&quot;&gt;AM 2900 Learning and Evaluation Kit&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wonder if people with more experience on or knowledge of this or similar machines might be able to advise as to what the likely problem is.&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="8072" LastEditDate="2019-12-23T02:28:19.747" LastActivityDate="2019-12-23T04:48:59.543" Title="Why am I not seeing the results of several operations on this &quot;Microtrainer&quot;?" Tags="&lt;ussr&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13114" PostTypeId="1" AcceptedAnswerId="13162" CreationDate="2019-12-21T22:22:47.177" Score="19" ViewCount="2196" Body="&lt;p&gt;In the early to mid-90s I was an OS/2 user and supporter. The operating system was originally jointly developed by both Microsoft and IBM.  Both companies claimed it was the future, including public statements from Bill Gates.  So major business application developers (Lotus, Wordperfect, etc) spent millions making programs for OS/2 version 3 (first version with GUI) and ignoring the &quot;dead-end&quot; Windows.  Well, there was a conspicuous hold-out -- Microsoft.  As far as I know, they never spent a dime developing 32-bit OS/2 versions of its application programs.  IMO, they were planning a double-cross of all its competitors, and it worked outstandingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But that's just introduction to my question.  &lt;strong&gt;Are there IBM insiders that have gone on the record to explain in the face of this betrayal, why IBM folded?&lt;/strong&gt;  One week before the release of Windows 95, IBM announced that OS/2 would not compete with Windows.  To me, that was worse than what Microsoft did.  Shortly thereafter, the IBM software division in Florida was shut down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From an outsider's perspective (mine anyway), it can only be explained by a civil war within IBM between its American hardware and software groups.  I can't find a link, but around 1994 IBM ran double page ads in the major computer magazines imploring portable customers to &quot;Demand OS/2 on your next portable.&quot; I did just that, calling the IBM store and tried to order an IBM Thinkpad with OS/2 pre-installed.  They would not do it.  I did try insisting, and referred her to the current ads. She said something like, &quot;Yes, we wish they wouldn't have done that.&quot;  BTW this was long before Lenovo bought the rights to Thinkpad and other IBM computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was particularly vexing to me about all this is that OS/2 Warp was clearly superior to Windows, not to mention IBM's decade-long claim that this was their future in the business and home market.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="11916" LastEditDate="2019-12-28T14:28:45.470" LastActivityDate="2020-12-02T12:53:15.090" Title="Are there statements from IBM insiders revealing why OS/2 was dropped?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;os2&gt;" AnswerCount="4" CommentCount="13" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13115" PostTypeId="2" ParentId="13114" CreationDate="2019-12-22T02:06:22.833" Score="8" Body="&lt;p&gt;IBM recognized that Microsoft was entrenched in the preinstalled retail and commercial markets, and wisely (sadly, but wisely, because I also loved Warp on my 486DX33) realized that Windows 3.1 compatibility was pointless in the face of the steamroller that was Windows 95.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, some fights can't be won.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that soon after this, IBM threw it's weight behind a MS competitor that &lt;em&gt;could&lt;/em&gt; win (Linux) in a battlefield that MS didn't dominate (the server market).&lt;/p&gt;&#xA;" OwnerUserId="3683" LastActivityDate="2019-12-22T02:06:22.833" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13116" PostTypeId="1" AcceptedAnswerId="13120" CreationDate="2019-12-22T12:47:07.997" Score="15" ViewCount="3664" Body="&lt;p&gt;The issue doesn't arise on today's LCD screens, but on a CRT screen, because the edges are slightly curved, and you might not be able to be sure exactly how the individual screen is tweaked, it's not possible for the displayed data to exactly match the visible area; you will inevitably get some overscan or underscan, i.e. you will inevitably either be unable to see some of your data, or leave some of the screen area unused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For business, you want (a little bit of) underscan, because you want to make sure you can see all the data; any of it might be important.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For games, on the other hand, you often actually want overscan; it looks better that way, and objects far from the player are probably not critical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accordingly, e.g. the NES normally overscans; if you play Super Mario Brothers, you can see landscape and enemies coming at you out of the right edge of the screen itself, with no intervening border.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Atari 800, being designed as both a general-purpose computer and games machine, made overscan optional; a program could set the pixel width per scan line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of those machines typically output to TV. I don't remember overscan being an option on anything designed to output to a non-TV monitor. They all underscanned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be sure, it was less of an issue on monitors, because they were more consistently calibrated, so the required underscan - amount of unused screen area - was smaller than on a TV. Still, many Amiga and PC games would've looked better with a little bit of overscan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did any computer allow overscan on a non-TV monitor?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-12-26T17:26:06.307" Title="Did any computer allow overscan on a CRT monitor?" Tags="&lt;history&gt;&lt;crt-monitor&gt;&lt;display&gt;" AnswerCount="6" CommentCount="5" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13117" PostTypeId="2" ParentId="13116" CreationDate="2019-12-22T13:37:19.017" Score="11" Body="&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did any computer allow overscan on a non-TV monitor?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Every computer that allowed overscan did the same on TV and non-TV.&lt;/p&gt;&#xA;&lt;p&gt;Computer-to-TV transmission only differs from computer-to-CRT by having the frame signal modulated onto a carrier during transmission. Modulation doesn't change any part of the payload (*1) regarding timing, which, relevant for all things cumulated under 'overscan'.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Background&lt;/h3&gt;&#xA;&lt;p&gt;Keep in mind 'overscan' is not a feature about the signal or a source, but the way it is displayed. From a display side, there is no such thing as an 'overscan'. A display only features a way of defining how much of a visible line content is really visible. Usually this setup is done external to the signal and handled manually when the display is setup.&lt;/p&gt;&#xA;&lt;p&gt;There is as well not overscan in signal generation, as before, a line got always the same timing and thus the same amount of visible content. There is no general issue to not use all of this - except for the usual effort vs usefulness. Especially with early computer systems it is about the memory spent for image data.&lt;/p&gt;&#xA;&lt;p&gt;It's easy to generate a full NTSC (alike) image with all content of all lines being software accessible. That's all lines and all visible part thereof. But if on average screens there are only like 80% of this signal visible (due the way it is manually set up), then why waste so much memory (and thus money) on parts not everyone will enjoy? Better fill some of the less likely displayed parts with default values and save up 20% of effort.&lt;/p&gt;&#xA;&lt;p&gt;This even gets more important when looking at early systems whose memory wasn't enough to generate even full resolution NTSC content. Here filling a portion of the visible signal with default values not only saved memory but allowed to cramp a higher resolution with the same amount of memory.&lt;/p&gt;&#xA;&lt;p&gt;As usual there are many ways to tackle this. And as more capable in sense of line generation a video circuit is, as more can be realized.&lt;/p&gt;&#xA;&lt;h3&gt;The Numbers&lt;/h3&gt;&#xA;&lt;p&gt;To generate a full spec NTSC (half) frame from a digital source and under full software control, a video circuit must provide some 262 lines with 660 pixel each, that's about 172,920 pixel, or 21,615 bytes in B&amp;amp;W (*2,3). Quite a lot in 8 bit times.&lt;/p&gt;&#xA;&lt;p&gt;If we generate 22 of the lines (~9,5%) with default values (black) we save accordingly display RAM, cutting it down to 19,800 Bytes. Cutting of 20 pixels per line saves another 600 bytes - down to 19,200 and a total of ~11% less memory without loosing much visible on an average screen.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[&lt;strong&gt;Insert&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;And by switching to a text storage and generate this by hardware usign lookup tables, aka character generators, we get this down to at or below a manageable 2 KiB.]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Still a lot - but it worked great so far, so why not going further by reducing lines to 200 and halving doubling the pixel, resulting in 320 per line? It gets us a high resolution picture with just 8 KiB of storage needed for display data. Cool.&lt;/p&gt;&#xA;&lt;p&gt;Except now the number of lines lines filled with default value make it look like a letterbox screen. Not cool. By making the pixels a bit smaller and increasing the default fill left and right of the generated picture we get a nice 4:3 size again.&lt;/p&gt;&#xA;&lt;p&gt;Now, since we already fill in some parts of the frame with default values (*4), we can as well make them configurable. Looks quite like a C64 screen, doesn't it?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Living in an analogue word, it does of course reduce the payload quality.&lt;/p&gt;&#xA;&lt;p&gt;*2 - For simplicity this is just about B&amp;amp;W, considering colour would lead to a way more complex consideration without changing the basic issue.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Interestingly that's roughly what the original Mac did - a bit less pixels per line (512) but a few more lines - and blacked out corners per software to allow maximum display.&lt;/p&gt;&#xA;&lt;p&gt;*4 - It's important to recognize this filling as default value, as it's really arbitrary and doesn't have to be black - like the ZX80 already perfectly shows :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-12-23T07:15:28.540" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13118" PostTypeId="2" ParentId="13116" CreationDate="2019-12-22T14:01:17.503" Score="4" Body="&lt;p&gt;From my experience using a &lt;a href=&quot;https://en.wikipedia.org/wiki/Vectrex&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vectrex&lt;/a&gt;: it does allow &quot;overscan&quot; by letting the ray get out of the phosphorous area of the CRT. Sometimes that results in electrons scattering and part of the scattered electrons bumping back to the phosphorous area, making some vague spots. An example of what I'm saying is this: &lt;a href=&quot;https://youtu.be/12juB-ySTWo?t=538&quot; rel=&quot;nofollow noreferrer&quot;&gt;youtube&lt;/a&gt;. Note the spots at the right of the screen.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-12-22T14:01:17.503" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13119" PostTypeId="2" ParentId="13113" CreationDate="2019-12-22T14:09:29.290" Score="5" Body="&lt;p&gt;So I solved it. You can set different monitor options when running programs using the &quot;multiplexer&quot; switches. When set to 0 (as I had it), you see the output of the &#xA;К1804ВУ1 chip (ie data going into memory). If you set the multiplexer to 1, you see data coming out of the К1804ВС1 (ie after logical operations).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also I should say that the different sets of LEDs provide different information with different settings. So the data going into memory appears on the middle set of LEDs when the multiplexer is set to 0. When set to 1, you can see the same data on the left hand set of LEDs, while the right hand set show the number of the all-purpose register being used. The results of operations only appear on the left hand set of LEDs, with the multiplexer set to 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't see the results of operations as I hadn't changed the monitor settings (the multiplexer) correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the multiplexer set to 1, I was able to see incrementation, rotation etc. as expected when the corresponding program lines were running.&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="8072" LastEditDate="2019-12-23T04:48:59.543" LastActivityDate="2019-12-23T04:48:59.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13120" PostTypeId="2" ParentId="13116" CreationDate="2019-12-22T14:47:25.090" Score="19" Body="&lt;p&gt;The Commodore Amiga (all models) had hardware support for overscan on CRTs. This was accessible to the user through the Preferences settings, as shown in the dialog panel below.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tc0ND.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tc0ND.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Preferences setting allows for quite a bit more screen real estate on the Workbench screen, and is quite useful for productivity apps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For games, software control of overscan is common. For demo scene productions, it is even more common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, the Commodore 64 supports overscan, just like the Atari 8-bit machines did. It is more commonly seen in demos than games, but games can use it if they are willing to pay strict attention to the costs incurred in terms of memory cycles available to the CPU.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-12-22T14:47:25.090" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13121" PostTypeId="2" ParentId="13114" CreationDate="2019-12-22T15:13:50.743" Score="3" Body="&lt;p&gt;I think that your question does not give quite enough credit to Microsoft, and the competitive advantage they established over OS/2 by making the Win32 API a common feature of both Windows 9x and Windows NT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows NT was originally envisioned within Microsoft as a successor to OS/2, and the first version of NT was already released by 1993. Essentially, Microsoft was positioning itself to be in front of OS/2 (IBM) in the Enterprise market too, not just the consumer/home PC market. NT had a lot of compelling, advanced, features for the enterprise. So it really was a step beyond OS/2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this is where the Win32 API becomes so significant. By targeting this common API, application developers could write compatible software for both consumer and enterprise versions of Windows. Microsoft led the way on this with their own very popular MS Office apps, and other application developers soon followed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OS/2's lack of support for the Win32 API became the limitation that it would not overcome. It can be argued that IBM had a very good OS product in OS/2 Warp, but they weren't willing to farther their investment by adding Win32 support and going head-to-head with both Windows 9x in the consumer market and Windows NT in the enterprise.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-12-22T15:13:50.743" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13122" PostTypeId="2" ParentId="13082" CreationDate="2019-12-22T20:36:56.803" Score="4" Body="&lt;p&gt;In addition to the Internet Archive, there’s also a “New Dumps” thread for ROM dumps on the MAME forums:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://forums.bannister.org/ubbthreads.php?ubb=showflat&amp;amp;Number=80278#Post80278&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://forums.bannister.org/ubbthreads.php?ubb=showflat&amp;amp;Number=80278#Post80278&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3783" LastActivityDate="2019-12-22T20:36:56.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13123" PostTypeId="2" ParentId="13116" CreationDate="2019-12-22T21:36:48.310" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Radio-86RK&quot; rel=&quot;nofollow noreferrer&quot;&gt;Radio 86 RK&lt;/a&gt; did not have any circuitry for forming the borders. These were created by writing the whitespace code (20H) inside the areas around edges that are often poorly displayed, or not at all. Only 64 characters per line were &quot;official&quot;, while there 80 characters per line in video RAM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence the &quot;overscan&quot; was kind of always on, and was used by some games. Supporting libraries in ROM (&quot;monitor&quot;) had the output functions that took care of respecting the margins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This computer used KR580VG75 (Intel 8275 clone) video controller that only provides text output, no graphics.&lt;/p&gt;&#xA;" OwnerUserId="496" LastEditorUserId="496" LastEditDate="2019-12-23T08:48:18.857" LastActivityDate="2019-12-23T08:48:18.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13124" PostTypeId="1" AcceptedAnswerId="13125" CreationDate="2019-12-22T22:26:23.963" Score="6" ViewCount="615" Body="&lt;p&gt;Sound playback and recording became mainstream on computers today, the most known introduction was around 1989-1991 with the release of windows 3.0 with Multimedia Extensions. However, what was the first computer to introduce this functionality?&lt;/p&gt;&#xA;" OwnerUserId="15875" LastEditorUserId="4921" LastEditDate="2019-12-22T22:35:28.520" LastActivityDate="2019-12-24T10:17:38.387" Title="What was the first PC/computer to have sound recording &amp; playback support?" Tags="&lt;sound&gt;&lt;windows&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13125" PostTypeId="2" ParentId="13124" CreationDate="2019-12-22T22:52:58.687" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;However, what was the first computer to introduce this functionality?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Recording and playback has been always there - at least for micros.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early S100 systems are a great example for example by using Cromemco's D+7A board of 1977, or Ithaca Audio's 8 chanel ADDA card of 1981 (AFAIR even MITS offered a suitable board in 1977) and sufficient storage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heck, there was even software to record and playback sound using an unexpanded Apple II. Ok, maybe not great, but quite functional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main issue for sound recording and playback is the availability of large RAM portions for buffering (I'd say anything above 16 KiB) and mass storage fast enough to store or retrive data fast enough. While floppies could deliver the needed transfer speed, their capacity was rather limited. So the critical point for availability can be set in 1980 with the introduction of Seagates ST-506 hard disk.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, a complete different issue might be when sound recording and playback became a mainstream commodity. This is way more related to system software able to mange sound streams. Apples Mac series was for example beginning with the very first 128k Mac capable to produce a continuous background sound stream. The hardware integrated Sound DMA it as part of the video timing. And it wasn't long that sound input hardware was as well available by third party (*1) and well supported by OS extensions. So it's safe to set a date around 1984/85 here.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Apple didn't supply any sound input hardware at all until the LC series, and no high quality until the Quadra 840 AV in 1993. This was due a settlement with the Beatles' &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Corps#Apple_Corps_v._Apple_Computer&quot; rel=&quot;noreferrer&quot;&gt;Apple Corp&lt;/a&gt;, which prevented Apple Inc. of going into 'musik business'.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-22T23:14:48.630" LastActivityDate="2019-12-22T23:14:48.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13126" PostTypeId="1" AcceptedAnswerId="13140" CreationDate="2019-12-22T23:58:35.150" Score="7" ViewCount="500" Body="&lt;p&gt;Role-playing games are distributed in various digital &amp;amp; non-digital formats AFAIK. What was the world's first computer RPG? It was written from scratch or was an adaption of a pen-and-paper RPG?&lt;/p&gt;&#xA;" OwnerUserId="15875" LastEditorUserId="11916" LastEditDate="2019-12-26T20:09:45.017" LastActivityDate="2019-12-26T20:09:45.017" Title="What was the world's first computer role-playing game?" Tags="&lt;history&gt;&lt;gaming&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13128" PostTypeId="1" AcceptedAnswerId="13131" CreationDate="2019-12-23T02:57:56.260" Score="2" ViewCount="4768" Body="&lt;p&gt;This could be due to Mac OS having performance optimizations to run on Mac hardware? As far as I know this has been happening since the first Mac from 1984 (128k) and the release of Windows 1.0 (1985).  And in the 1990s, Mac computers usually had slower clock speeds than most standard PC systems,but they were still faster.&lt;/p&gt;&#xA;" OwnerUserId="15875" LastEditorUserId="10323" LastEditDate="2019-12-23T20:11:11.853" LastActivityDate="2019-12-23T20:42:07.267" Title="Were Mac systems faster than Windows in processing performance?" Tags="&lt;apple-macintosh&gt;&lt;windows&gt;" AnswerCount="6" CommentCount="12" FavoriteCount="1" ClosedDate="2019-12-24T16:28:18.427" ContentLicense="CC BY-SA 4.0" />
  <row Id="13129" PostTypeId="2" ParentId="13128" CreationDate="2019-12-23T04:36:15.203" Score="24" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why Mac systems were always faster than Windows in processing performance?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mind to give any proof to this claim?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to various Benchmarks, the PCs usually outperform Macs of the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example a classic Macintosh (68k @ 7.8 MHz; *1) delivered about 0.40-0.52 &lt;a href=&quot;https://en.wikipedia.org/wiki/Dhrystone&quot; rel=&quot;noreferrer&quot;&gt;Dhrystone MIPS&lt;/a&gt; (*2), while a PC/AT (80286 @ 6 MHz) scored 0.40 to 0.71 DMIPS - that's close to double the performance of a Mac, depending on compiler used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Results for Whetstones are rather unfair, as already the first PC/XT could feature an 8087 FPU delivering 115 kWhetstones (a PC/AT with 80287 did about 300) where a Mac couldn't deliver more than 15. It wasn't until the 1987 that Apple offered an FPU (68881) with the top line Mac II and the mid 1990s until FPUs were delivered with volume models. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;Macs were never faster than PCs of the same time.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - That's any Mac before the introduction of the Mac II in 1987 or SE/30 in 1989.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Classic Dhrystone 1.1&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-12-23T04:36:15.203" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13130" PostTypeId="2" ParentId="13128" CreationDate="2019-12-23T08:08:20.277" Score="7" Body="&lt;p&gt;Although the &quot;computer speed&quot; is totally subjective and all those ***stones are just synthetic tests, let's take this question seriously, but from a different point of view.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are differences between the Intel x86 and the Motorola 68x family. Motorola has a slightly better performance and can do a few more memory operations than an Intel on the same frequency. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Windows/DOS combination, &lt;a href=&quot;https://www.techrepublic.com/article/a-legacy-of-windows-part-1-windows-1-2-3/&quot; rel=&quot;noreferrer&quot;&gt;at least in Windows 1 you are mentioning&lt;/a&gt;, runs in real mode, with almost no benefits of protected mode or 32bit architecture. It locked the whole Windows into the &quot;640kB world, segmented&quot;. On the other side, the 68k family was &quot;32bit by nature&quot; with full memory access, so it could do some operations faster. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing is &quot;user feeling&quot;. Mac OS had a better-optimized UI, so the user did not notice annoying slowdowns (as in the Windows did).&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="11446" LastEditDate="2019-12-23T08:40:29.260" LastActivityDate="2019-12-23T08:40:29.260" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13131" PostTypeId="2" ParentId="13128" CreationDate="2019-12-23T10:32:25.907" Score="14" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;This could be due to Mac OS having performance optiminizations to run&#xA;  on Mac hardware?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Artificial benchmarks aside, in real-world applications Macs were generally faster than Windows because the OS was indeed 'optimized' to run on Mac hardware - or more correctly, the hardware was optimized to run a Graphic User Interface. In comparison, Windows had to use whatever hardware was already in the PC, which was generally &lt;em&gt;not&lt;/em&gt; optimized for GUI operation.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And in the 1990s, Mac computers usually had slower clock speeds than&#xA;  most standard PC systems,but they were still faster.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Clock speed by itself doesn't mean much, particularly when comparing different architectures. For example a 486SX-25 and 386SX-25 run the same clock speed, but one is several times faster than the other. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 1990s was a time of very rapid advances in PC performance, so trying to make a valid &lt;em&gt;objective&lt;/em&gt; comparison between Mac and Windows in this time period is difficult. However I did find &lt;a href=&quot;https://books.google.co.nz/books?id=D8pyWaTBzyoC&amp;amp;pg=PA40#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; in the April 1991 issue of Computerworld magazine:-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/a2QJ5.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/a2QJ5.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The article claims that &quot;the Macintosh line, from the entry-level Classic to the high-end Macintosh IIFX, &lt;strong&gt;consistently outperformed its PC competitors - often by as much as 70%&lt;/strong&gt;&quot;. Notably the 'biggest leads' were in graphics and publishing applications, suggesting that GUI optimization was a major reason for the better performance.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naysayers may cite CPU benchmarks in an attempt to prove that the PC was actually faster than the Mac, but this actually &lt;em&gt;reinforces&lt;/em&gt; the point that GUI-heavy applications ran faster on the Mac &lt;em&gt;despite&lt;/em&gt; its 'slower' CPU. That is the advantage of building the GUI into the system from the start, rather than trying to bolt it on later. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But was there ever a time when the Mac was &lt;em&gt;always&lt;/em&gt; faster than Windows on an 'equivalent' PC? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original Macintosh 128k was released on January 24, 1984. It had built-in 512x342 pixel monochrome bitmap graphics, 128k of RAM, 64k ROM, and a single 400k 3.5 inch floppy drive. What would the equivalent PC be? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PCjr&quot; rel=&quot;noreferrer&quot;&gt;PCjr&lt;/a&gt; was released in March 1984. It also had built-in bitmap graphics with 640×200 pixels in 2 or 4 colors, 128k RAM, up to 64k of ROM and a 360k 5.25 inch floppy drive. Surely this is the closest contemporary PC to the original Macintosh? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But no. Microsoft Windows 1.0 required a minimum of 256k RAM and two 360k floppy drives. So the PCjr couldn't run it. If a version of Windows &lt;em&gt;had&lt;/em&gt; been produced for the PCjr its performance would been much worse than the Mac, due to the slower 8 bit CPU. The original IBM PC and PC/XT were not much better (a contemporary review of Windows 1.0 in the &lt;a href=&quot;https://www.nytimes.com/1986/02/25/science/personal-computers-windows-are-open-at-last.html&quot; rel=&quot;noreferrer&quot;&gt;New York Times&lt;/a&gt; described it as &quot;akin to pouring molasses in the Arctic&quot;).   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the closest equivalent would have to be the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Personal_Computer/AT&quot; rel=&quot;noreferrer&quot;&gt;PC/AT&lt;/a&gt;. It had a 16 bit 80286 CPU running at 6MHz, 256k RAM (expandable to 16MB), a 1.2M 5.25 inch floppy drive and 20MB hard drive, and could take an EGA graphics card. With those specs it should have been as fast as the Mac if not faster - at least on paper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only one problem. The PC/AT was introduced on August 14, 1984, but &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Windows_version_history#Windows_1.x&quot; rel=&quot;noreferrer&quot;&gt;Windows 1.0&lt;/a&gt; was released on November 20, 1985. So for nearly 2 years the Mac was indeed faster than Windows on &lt;em&gt;any&lt;/em&gt; PC, since it did not exist! But had it been available earlier the majority of IBM machines (PCs and XTs) would have run it much slower than a Mac. &lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2019-12-23T10:32:25.907" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="13136" PostTypeId="2" ParentId="13128" CreationDate="2019-12-23T13:47:37.180" Score="3" Body="&lt;p&gt;Are we comparing oranges to oranges?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A difference in the amount of RAM could explain the performance difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recall years ago learning a story that would help explain this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Macs typically had more memory than their PC counterparts in many colleges(/universities).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many colleges figured out that PCs were cheaper than Macs.  And so they gravitated towards using PCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, certain college programs like &quot;graphics design&quot; and &quot;desktop publishing&quot; reported that Macs provided better performance, and this was really needed for the tasks used by these specific industries.  The key reason that the Macs performed better was simply that the Macs tended to have beefier hardware, including notably higher amounts of RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The colleges were able to afford the higher prices for Macs, as long as they weren't buying too many of them.  So the college programs that needed the better hardware were supplied with the more expensive Macs which were supposedly necessary, while other departments got cheaper PCs since they weren't crying so loudly about an apparently-justified need for the more expensive hardware.  The PCs that ran word processors and spreadsheets could often get by with less RAM, and so the colleges saved money by buying computers with less RAM for the general-purpose computer labs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The end result is that Macs got a reputation for working better on graphics programs in college.  Then, the college graduates went into the industry and told their employers that they were Mac-trained because Macs were better, and so many companies cooperated by getting Macs for the departments that were going to be heavily staffed by such trained graduates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you want to have meaningful comparison between brands (like Apple vs. others), make sure you know how much RAM were in the machines.  If you don't know, then that could very well have likely been the cause of the performance difference.&lt;/p&gt;&#xA;" OwnerUserId="419" LastActivityDate="2019-12-23T13:47:37.180" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13137" PostTypeId="1" AcceptedAnswerId="13139" CreationDate="2019-12-23T14:09:02.417" Score="2" ViewCount="804" Body="&lt;p&gt;Was it possible to load integer basic and use it without a language card or were the addresses fixed to rom?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Sorry, I meant Apple II+ (I had an europlus) so I wrongly put IIe.&lt;/p&gt;&#xA;" OwnerUserId="15556" LastEditorUserId="278" LastEditDate="2019-12-26T20:10:31.033" LastActivityDate="2020-09-19T18:45:26.627" Title="Using Integer Basic on Apple II Plus without a Language Card?" Tags="&lt;apple-ii&gt;&lt;integer-basic&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13138" PostTypeId="2" ParentId="13137" CreationDate="2019-12-23T14:15:19.137" Score="0" Body="&lt;p&gt;The Apple II (pre-II+ or IIe) had Integer BASIC in ROM, and you didn&amp;rsquo;t need a language card to use it - and, in fact, if you had sufficient base RAM, you could load Applesoft BASIC from disk without a language card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple II+ and IIe both had Applesoft BASIC in ROM, so if you wanted Integer BASIC, you would have to load it from disk - but, again, if you had sufficient RAM, you still didn&amp;rsquo;t need a language card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To the best of my recollection, the only time you needed a language card was when you were running a language or application based on the UCSD P-System, which formed the basis of Apple Pascal, Apple FORTRAN, and Apple PILOT (and there were others, but I don&amp;rsquo;t recall them offhand).&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2019-12-23T14:15:19.137" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13139" PostTypeId="2" ParentId="13137" CreationDate="2019-12-23T14:24:28.203" Score="8" Body="&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was it possible to load integer basic and use it without a language card&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;No, at least not as an official Apple product.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS 3.3 only supplied an Integer BASIC image to be loaded into Language Card. Then again, &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Pugetsound_Program_Library_Exchange&quot; rel=&quot;nofollow noreferrer&quot;&gt;A.P.P.L.E.&lt;/a&gt; did sell a modified, relocable version of Integer BASIC, called &lt;em&gt;Integer BASIC+&lt;/em&gt;, offering many extensions as well. It was &lt;a href=&quot;https://archive.org/details/CallAPPLE1980May/page/n56&quot; rel=&quot;nofollow noreferrer&quot;&gt;published in Mai 1980&lt;/a&gt; on disk at 17.50 USD.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;How it happened&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Original Apple II had Integer Basic in ROM.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In January 1978 the first Version of Applesoft (*1,2) was made available to be loaded (from cassette) into regular RAM.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In 1978 Applesoft ][ (*3) was created and made available in 5 versions (*4):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Loadable from cassette into RAM (*2,6).&lt;/li&gt;&#xA;&lt;li&gt;Loadable from diskette into RAM (*2,6,7).&lt;/li&gt;&#xA;&lt;li&gt;As &lt;em&gt;Firmware Card&lt;/em&gt; holding the ROMs.&lt;/li&gt;&#xA;&lt;li&gt;Loadable into Language Card.&lt;/li&gt;&#xA;&lt;li&gt;Supplied as main board ROM.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With the Apple II+ introduction all machines had Applesoft in ROM.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now the Firmware Card could be used to hold the Integer BASIC ROMs, still supporting manual switching.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;DOS 3.1 (1978) supported switching between Applesoft and Integer BASIC in either mainboard ROM or Firmware Card using &lt;code&gt;FP&lt;/code&gt;and &lt;code&gt;INT&lt;/code&gt;commands.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Applesoft would be loaded automatic from disk if not in ROM - by trying to load a file called 'APPLESOFT' (*5,6).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Integer BASIC could only be used from ROM - if not present (*8) a &lt;em&gt;&quot;LANGUAGE NOT PRESENT&quot;&lt;/em&gt; error message was displayed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Apple didn't supply Integer BASIC with DOS 3.1 or 3.2, but it was possible to load a ROM image into a Language Card and DOS would switch as if a Firmware Card were installed..&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For DOS 3.3 the mechanics to select either BASIC were kept the same, but&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;RAM Applesoft was removed from the diskette. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It was no longer (by default) supported to run Applesoft on an Apple II with Integer BASIC in ROM without a Language Card&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Two ROM images named &lt;code&gt;FPBASIC&lt;/code&gt; and &lt;code&gt;INTBASIC&lt;/code&gt; (*10) were supplied.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Loading either BASIC image to the Language Card was supported by utilities.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The Applesoft program &lt;code&gt;HELLO&lt;/code&gt; did load &lt;code&gt;INTBASIC&lt;/code&gt; into Language Card RAM&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Integer BASIC program &lt;code&gt;APPLESOFT&lt;/code&gt; replaced the &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To avoid false detection, DOS 3.3 did clear the first byte of Language Card RAM during cold boot (*9). If one had already loaded either BASIC there, it was necessary to patch that back or have DOS reload it - which happend automatic, when loading/running a related program from diskette.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;For Apple never supplied Integer BASIC for RAM as a product.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Applesoft I, based on Microsoft BASIC 1.1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Applesoft was fix loaded at $800 and extended up to $3000, right in the middle of Highres page 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Applesoft ][ was based on Microsoft BASIC 2.0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - None of them was relocable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - To do so, the &lt;code&gt;FP&lt;/code&gt; command does accept parameters for slot/drive/volume (&lt;code&gt;INT&lt;/code&gt; doesn't).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - The file was a clever hack of BASIC code plus binary. While the begin was a valid Integer BASIC program, the remaining was the binary image of cassette Applesoft. When started, the BASIC part did setup some vectors, printed a copyright message and started a routine to move the binary part to $800.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - Starting it manually was a bad idea, as it unhooked DOS. When DOS started it (via the DOS &lt;code&gt;FP&lt;/code&gt; command or implied for file type A), It used some wraping to warmboot afterwards, restoring all pointers needed to hook BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - By testing address $E000. Applesoft starts with $4C (JMP) while Integer BASIC got a $20 (JSR) at this address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*9 - Write $00 to $E000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*10 - There are two different images for either available, distinguischable by size. The 50 sector versions delivered with the first (1980) version of DOS 3.3 contained the full 12 KiB of ROM, including the monitor, while the second (and third) version (1982/83) had 42 sectors. The monitor ROM was now excluded, as for the Apple IIe a different image would have been needed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-25T17:29:19.550" LastActivityDate="2019-12-25T17:29:19.550" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13140" PostTypeId="2" ParentId="13126" CreationDate="2019-12-23T14:28:43.930" Score="16" Body="&lt;p&gt;There are three early RPG-style computer games which vie for the title of “first RPG”: Rusty Rutherford’s &lt;code&gt;pedit5&lt;/code&gt;, Gary Whisenhunt and Ray Wood’s &lt;em&gt;Game of Dungeons&lt;/em&gt; (aka &lt;code&gt;dnd&lt;/code&gt;), both on the &lt;a href=&quot;https://cyber1.org/&quot; rel=&quot;noreferrer&quot;&gt;PLATO&lt;/a&gt;, and Don Daglow’s &lt;em&gt;Dungeon&lt;/em&gt; on the PDP-10. All three were available in 1975, and all three were at least inspired by, if not based on, paper-based games (particularly TSR’s &lt;em&gt;Dungeons &amp;amp; Dragons&lt;/em&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1975 such games weren’t even known as RPGs yet; TSR started describing &lt;em&gt;Dungeons &amp;amp; Dragons&lt;/em&gt; as a role-playing game in 1977 (second edition), and that’s when programmers started using the term for their adaptations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rutherford and Daglow explicitly name &lt;em&gt;Dungeons &amp;amp; Dragons&lt;/em&gt; as the inspiration for their implementations; Whisenhunt and Wood based their &lt;code&gt;dnd&lt;/code&gt; on &lt;em&gt;Dungeons &amp;amp; Dragons&lt;/em&gt; too, with the addition of lessons from &lt;code&gt;pedit5&lt;/code&gt; (which means &lt;code&gt;dnd&lt;/code&gt; can’t strictly speaking be considered &lt;em&gt;the&lt;/em&gt; first such game), in particular its limited availability — since &lt;code&gt;pedit5&lt;/code&gt; competed for CPU time with other legitimate uses of PLATO, system administrators regularly deleted it when they found it; Whisenhunt and Wood however administered their own PLATO system, so they didn’t have to deal with administrators deleting &lt;code&gt;dnd&lt;/code&gt;!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;dnd&lt;/code&gt; introduced a number of features: it has the first “boss” (the dragon guarding the Orb which the player must steal), the first level design tool, the first character creation and progression system based on experience points, and increasing difficulty levels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Source: Raphaël Lucas’ &lt;em&gt;L’histoire du RPG&lt;/em&gt;, Éditions Pix’n Love, 2014.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2019-12-24T21:58:33.767" LastActivityDate="2019-12-24T21:58:33.767" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13141" PostTypeId="1" CreationDate="2019-12-23T14:37:41.517" Score="15" ViewCount="2897" Body="&lt;p&gt;Most ZX Spectrum games were loaded from tape, and the traditional way of starting the loading process (at least in the 48K era) was to type&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LOAD &quot;&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and then start the tape. This would normally load a small BASIC loader, sometimes containing more sophisticated (and normally faster) custom loading routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, some 16K games (for example, QuickSilva's &lt;a href=&quot;https://spectrumcomputing.co.uk/index.php?cat=96&amp;amp;id=3148&quot; rel=&quot;noreferrer&quot;&gt;Meteor Storm&lt;/a&gt;) required&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LOAD &quot;&quot; CODE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to be used instead. I can only remember a handful of games that required &lt;code&gt;CODE&lt;/code&gt; to be included - what was the reason for this? Given that it seemed to only be required for 16K games, was it to save memory?&lt;/p&gt;&#xA;" OwnerUserId="17" LastEditorUserId="3290" LastEditDate="2020-04-23T13:03:57.467" LastActivityDate="2020-07-08T19:24:31.773" Title="Why did some Spectrum games need LOAD &quot;&quot; CODE?" Tags="&lt;zx-spectrum&gt;&lt;cassette-tape&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13142" PostTypeId="2" ParentId="13141" CreationDate="2019-12-23T15:02:55.517" Score="17" Body="&lt;p&gt;As you guessed, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LOAD &quot;&quot; &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;loads a BASIC loader. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LOAD &quot;&quot; CODE &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;loads a machine code program saved on the tape straight into memory, at the addresses given when using &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SAVE name CODE start, length&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Doing it this way means you can squeeze the most code into the memory, not wasting any on the loader or a loading screen.&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="8072" LastEditDate="2019-12-23T15:30:37.833" LastActivityDate="2019-12-23T15:30:37.833" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13143" PostTypeId="2" ParentId="13128" CreationDate="2019-12-23T15:36:39.353" Score="4" Body="&lt;p&gt;The users' perception of &quot;processing performance&quot; on Macs vs. Windows PCs is likely influenced by 3 unmentioned differentiators:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The relative performance of all versions of MacOS (macOS) vs. all the contemporary versions of Windows OS.&lt;/li&gt;&#xA;&lt;li&gt;The particular applications that the users are actually running.&lt;/li&gt;&#xA;&lt;li&gt;The extent to which the rest of the system has been adequately equipped to handle the particular applications.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For #1, it should not be particularly controversial that the OS shipped with Macintosh computers has, for the most part, maintained a performance advantage over contemporary Windows PCs when viewed through the subjective lens of user experience. An OS &quot;feeling responsive&quot; is mainly an issue of system integration; hardware and software working well together. Since the Macintosh OS has always been able to target a narrower set of hardware variations, this is easier and better achieved than for PCs that must target a much broader range of hardware. Just as is alluded to in the question, &quot;optimizing for the hardware&quot; requires the developers to know specifically the hardware that is being targeted. Since Apple is actually in the computer business, this was always part of their software development &quot;DNA&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Number 2 and #3 are best illustrated through examples, I think. Take Desktop Publishing for the Mac vs. Computer-aided Design (CAD) for PC's. An early adopter of Desktop Publishing applications had a relatively easy choice for a Macintosh. Aldus' products ran acceptably on Macs, and extremely well on Macs specifically expanded for that application, usually with higher resolution displays and plenty of RAM. The exact same can be said for AutoCAD users and PC's. Note that in the AutoCAD case, Windows was not initially a consideration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point is the choice of application dictates everything else about the system, including the right OS and the right hardware add-ons. Most AutoCAD users also chose specific graphics cards that included accelerated 2D drawing capabilities and very high-resolution frame buffers in order to get that optimized &quot;processing performance&quot; they needed. Such graphics cards were readily available for PCs to feed this market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, computers are not just CPU's, which compute certain quantities at certain speeds. They are complete systems of Hardware+OS+applications that are (optimally) tuned for the application workloads that their users are demanding from them. That's sort of why these are called &quot;Personal&quot; Computers to begin with, and why it should be obvious that comparing them based on something as mundane as MIPS or clock speed or numeric benchmarks is just a curiosity and not a recipe for deciding whether a given system is best for a given user.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2019-12-23T15:36:39.353" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13145" PostTypeId="1" CreationDate="2019-12-23T16:23:04.733" Score="1" ViewCount="189" Body="&lt;p&gt;Just to say I'm completely new to the world of PROM and I'm a bit bewildered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My ultimate aim is to be able to program &lt;a href=&quot;https://www.chipdip.ru/product/kr556rt5&quot; rel=&quot;nofollow noreferrer&quot;&gt;these Russian 4k bipolar PROM chips&lt;/a&gt;, which are the equivalent of Epson IP3604, in order to use with my Soviet Mikrolab КР580ИК80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am aware of various &quot;universal&quot; chip programmers, including relatively inexpensive ones from China, and the expensive one offered on the above site, but as none of these mention the IP3604, I am cautious.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is - is there a modern device which can flash these chips, and if not what do I need to look for on eBay? From some YouTube videos I've watched I guess in the latter case I might then have to go chasing other hardware which can interact with old chip programmers.&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="11446" LastEditDate="2019-12-24T11:40:01.043" LastActivityDate="2019-12-24T17:06:05.467" Title="Will any modern EEPROM programmer work with the IP3604/КР556РТ5?" Tags="&lt;hardware&gt;&lt;memory&gt;&lt;chip&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13146" PostTypeId="2" ParentId="13145" CreationDate="2019-12-23T16:36:24.097" Score="2" Body="&lt;p&gt;You can create such a device yourself. If you know how to program the 556PT5, you might end up with creating a simple dedicated programmer circuit. Then you can drive your programmer circuit using аrduinо, rаspbеrrу рi or anything alike.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2019-12-23T16:36:24.097" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13147" PostTypeId="2" ParentId="13137" CreationDate="2019-12-23T16:37:32.723" Score="2" Body="&lt;p&gt;Integer BASIC as shipped by Apple in the original ROMs or on DOS diskettes was intended only to run at address E000 to F7FF.  On the original Apple II this was ROM which held Integer BASIC.  With the language card, it was possible to bank-switch in RAM into this area, and DOS would load a binary image of Integer BASIC, the same as the ROM version, into the RAM in this area, which would then run just like ROM Integer BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technically, with a disassembly or the source code, it would not be terribly difficult to relocate Integer BASIC to run it elsewhere in the address space, like in the lower 48 KB of RAM.  This would break anything that called into Integer BASIC machine routines at specific addresses, but otherwise should have no side effects aside from less RAM being available to Integer BASIC programs.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to run DOS at the same time, you'd have to hack DOS to not overwrite the Integer BASIC in RAM, and to hook into its routines.  This would also not be terribly difficult, if I'm remembering right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't find anything online but I would be surprised if it &lt;em&gt;hasn't&lt;/em&gt; already been done by someone.  I also can't find the link right now, but I do remember reading about one hobbyist who adapted the earlier version of Woz's BASIC for the Apple 1, to run from RAM on an Apple II.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2019-12-23T16:37:32.723" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13148" PostTypeId="2" ParentId="13126" CreationDate="2019-12-23T18:52:13.927" Score="4" Body="&lt;p&gt;It's not the earliest, but: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a BASIC game listed for the Kim-1 that involved hiking through a forest, avoiding monsters, listed in a magazine.  I typed it into a friend's VIC-20 sometime around 1981 (and had to edit it down, since the game was 4K and the VIC only had 3.5K RAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adventurer, check.&#xA;Wilderness, check.&#xA;Monsters and peril, check.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it was D&amp;amp;D inspired.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it might straddle the fuzzy line between &quot;adventure&quot; game and RPG.&lt;/p&gt;&#xA;" OwnerUserId="15411" LastActivityDate="2019-12-23T18:52:13.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13149" PostTypeId="2" ParentId="13116" CreationDate="2019-12-23T19:42:50.187" Score="4" Body="&lt;p&gt;The Amstrad CPC machines came with a CRT monitor. Some games included use of the overscan area (border). For example, Arkanoid drew into the top and bottom borders to create a taller play area.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/nlJRH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2019-12-23T19:42:50.187" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13150" PostTypeId="2" ParentId="13128" CreationDate="2019-12-23T20:42:07.267" Score="6" Body="&lt;p&gt;If you'll forgive the imposition, I've been on a benchmark hunt. These tend to skew later because they assume some sort of convergence of application support. Of course, in sticking with a CPU benchmark I'm assuming that the interesting case is application software that does a lot of processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the early days of the 68000 versus the 286, I found both &lt;a href=&quot;http://marc.retronik.fr/motorola/68K/68000/BR147_An_Architectural_contrast_MC68000_and_8086_iAPX286_%5BMotorola_1983_58p%5D.pdf&quot; rel=&quot;noreferrer&quot;&gt;Motorola's &quot;AN ARCHITECTURAL CONTRAST: The M68000 Microprocessor Family and the 8086/IAPX 286&quot;&lt;/a&gt; and &lt;a href=&quot;https://docs.telegraphics.com.au/Intel_FAE_Newsletter_Vol_6_Issue_28_Special_Architecture_Edition_Microprocessor_Operation_Feb_1984.pdf&quot; rel=&quot;noreferrer&quot;&gt;Intel's rebuttal&lt;/a&gt;, both predating the launch of the Mac. The Intel response is better for citing Motorola's sources, but I was unable to obtain them online regardless, making the whole exercise very he-said-she-said. But my takeaway was that the 80286 would likely have the edge if it were used properly, though that verdict is muddied by a lot of squabbling about register quantities (68000 win!) versus access scheduling and how much effect wait states have (80286 win!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Closing the 68000 era, I found &lt;a href=&quot;https://textfiles.meulie.net/computers/486vs040.txt&quot; rel=&quot;noreferrer&quot;&gt;this on the 68040 versus the 486&lt;/a&gt;. It applied various synthetic benchmarks:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Drhystone (i.e. heavily integer-oriented): the 25 Mhz 68040 was twice as fast as the 25 Mhz 486 (and the 25 Mhz 486 was 20% faster than a 50 Mhz 68030);&lt;/li&gt;&#xA;&lt;li&gt;Linpack (i.e. floating pointy): the 25 Mhz 68040 was three times as fast as the 25 Mhz 486 — the article strongly implies it's a 486DX as it lists FPU registers in its mini-spec sheet, but it isn't explicit.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Caveat: the 68040 has a pipeline that's about 50% longer than the 486s, neither does branch prediction, and at least Dryhstones aren't very branchy. So the 68040 probably benefits in a way that it might not with actual application code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mid-PowerPC era, I found &lt;a href=&quot;http://macspeedzone.com&quot; rel=&quot;noreferrer&quot;&gt;http://macspeedzone.com&lt;/a&gt; which has a few broken links but still contains the relevant graphs for benchmarks comparing:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://macspeedzone.com/archive/4.0/WinvsMacmathematica.html&quot; rel=&quot;noreferrer&quot;&gt;Mathematica&lt;/a&gt;, where 400Mhz PowerMac G3 just barely trails a 400Mhz Pentium II;&lt;/li&gt;&#xA;&lt;li&gt;vector processing &lt;a href=&quot;http://macspeedzone.com/archive/4.0/g4vspent3signal.html&quot; rel=&quot;noreferrer&quot;&gt;comparing Intel's Signal Processing Library to G4 AltiVec versions of the same functions&lt;/a&gt;, in which a 500Mhz G4 trounces a 600Mhz Pentium III;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://macspeedzone.com/archive/4.0/WinvsMacSPECint.html&quot; rel=&quot;noreferrer&quot;&gt;SPEC&lt;/a&gt;, in which:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;when performing integer arithmetic: a 500Mhz G4 beats a 550Mhz Pentium III but is slightly outpaced by a 600Mhz Pentium III — top of the heap: an Alpha 21264; top of the PC/Mac heap: a 650Mhz Athlon, 25% faster than the G4;&lt;/li&gt;&#xA;&lt;li&gt;when performing floating point arithmetic: a 500Mhz G4 beats all of the Intel options and, just barely, the 650Mhz Athlon, but is heavily bested by a bunch of SPARCs, Alphas and PA-RISCs;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://macspeedzone.com/archive/4.0/WinvsMacbytemark.html&quot; rel=&quot;noreferrer&quot;&gt;BYTEMark&lt;/a&gt;, which skews Mac-happy by:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;integer: rating the 400Mhz G3 as almost 250% as fast as the 400Mhz Pentium II; and&lt;/li&gt;&#xA;&lt;li&gt;floating point: rating the 400Mhz G3 at 144% as fast as the 400Mhz Pentium II.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But in net I think there's enough there to disprove the statement that Mac systems were &lt;em&gt;always&lt;/em&gt; faster than Windows. It would seem more likely that they started either at parity or slightly behind, overtook during the 486 era, in theory roared ahead during the very early PowerPC period but was back in a tussle at least as early as the Athlon, and then sank slowly backwards as you head up towards the Intel transition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the heavy 'in theory' caveat on the early PowerPC days: in the real world it took several years just to get all the 680x0 code out of the OS, never mind applications. Having a fast processor that spends a decent amount of its time emulating another is only so much of a win.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2019-12-23T20:42:07.267" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13151" PostTypeId="2" ParentId="13145" CreationDate="2019-12-24T02:52:23.087" Score="2" Body="&lt;p&gt;I checked the device support list for my Dataman S4, but it doesn't go all the way back to 4Kbit (512x8) devices.  The S4 isn't quite a universal programmer, as it can only supply power and Vpp on certain pins of its socket, and so on, but it would be more likely to support relatively old devices than a new unit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wasn't even able to find a datasheet for the Epson IP3604, but I did find one for the Intel version, M3604A.  At that time, memory devices were Intel's main focus, and Epson would have been one of several second-source suppliers.  This is &lt;strong&gt;not an EEPROM&lt;/strong&gt; - those came in &lt;em&gt;much&lt;/em&gt; later - but a one-time-writable PROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence I would strongly suggest that you build an adapter to accept a newer type of chip in your Mikrolab.  Modern 8Kx8 EEPROMs are still in production, widely supported in programmers, and very cheap.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-12-24T02:52:23.087" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13152" PostTypeId="2" ParentId="13088" CreationDate="2019-12-24T04:39:15.563" Score="1" Body="&lt;p&gt;In the case of Version 6 Unix, the &lt;a href=&quot;http://doc.cat-v.org/unix/v6/operating-systems-lecture-notes/v6/doc/I/stty&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;stty&lt;/code&gt; shell command&lt;/a&gt; does not appear to allow configuration of the interrupt or quit sequences except to disable them completely via the &lt;code&gt;raw&lt;/code&gt; mode. In the &lt;a href=&quot;http://doc.cat-v.org/unix/v6/operating-systems-lecture-notes/v6/doc/II/stty.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;stty&lt;/code&gt; function&lt;/a&gt; documentation, it mentions the hardcoded characters almost in passing regarding raw mode where:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[…] the interrupt character (DEL) and the quit character (FS) are not treated specially [in raw mode].&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(&lt;strong&gt;UPDATE&lt;/strong&gt;: this is documented in even better detail within the &lt;a href=&quot;http://doc.cat-v.org/unix/v6/operating-systems-lecture-notes/v6/doc/IV/tty.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;TTY(IV)&lt;/a&gt; manpage.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my testing I found, using a command like &lt;code&gt;sleep 100&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Pressing &lt;kbd&gt;Ctrl-C&lt;/kbd&gt; has no effect.&lt;/li&gt;&#xA;&lt;li&gt;Pressing &lt;kbd&gt;delete&lt;/kbd&gt;, configured in my terminal emulator to send &lt;code&gt;DEL&lt;/code&gt; (instead of &lt;code&gt;BS&lt;/code&gt;) returns control to the shell silently&lt;/li&gt;&#xA;&lt;li&gt;Pressing &lt;kbd&gt;Ctrl-\&lt;/kbd&gt; returns to the shell, logging &quot;Quit -- Core dumped&quot;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So split between another-dave and Ken Gober's replies are the only two answers for this particular version of Unix. Specifically, most processes would be interrupted with &lt;code&gt;DEL&lt;/code&gt; (&quot;delete&quot;, ASCII 127) and can be quit with &lt;code&gt;FS&lt;/code&gt; (&quot;file separator&quot;, ASCII 28).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still have not found a way to exit my original &lt;code&gt;echo &quot;test&quot; &amp;gt; /dev/tty2&lt;/code&gt; style commands when they hang, except via &lt;code&gt;kill&lt;/code&gt; from another terminal. Which seems a bit strange to me, but is probably out of scope for my question here.&lt;/p&gt;&#xA;" OwnerUserId="13904" LastEditorUserId="13904" LastEditDate="2019-12-24T05:36:05.590" LastActivityDate="2019-12-24T05:36:05.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13154" PostTypeId="2" ParentId="5080" CreationDate="2019-12-24T06:35:37.097" Score="3" Body="&lt;p&gt;I recently came across the &lt;a href=&quot;http://www.chrisfenton.com/the-zedripper-part-1/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zedripper&lt;/a&gt;, which would definitely count as a contender, in particular because it uses multiple Z80 CPUs, so something similar would would have been possible with legacy technology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specs from the website:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;16-core Z80 processor running at 83.33 MHz&lt;/li&gt;&#xA;&lt;li&gt;64KB of dedicated RAM for each Z80&lt;/li&gt;&#xA;&lt;li&gt;16-way ANSI-compatible “Multiterm” terminal accelerator&lt;/li&gt;&#xA;&lt;li&gt;All CPUs and devices connected with a fully-synchronous, uni-directional ring network operating at 83 MHz&lt;/li&gt;&#xA;&lt;li&gt;128MB of storage on SD Card (available via 16 x 8MB disk drives in CP/M)&lt;/li&gt;&#xA;&lt;li&gt;A ‘server’ core that boots into CP/M 2.2 and runs a CP/NET file server (written in Turbo Pascal 3 on the machine!) allowing shared access to the SD card&lt;/li&gt;&#xA;&lt;li&gt;15 ‘client’ cores running CP/NOS from ROM. Each client can access the shared storage and run any CP/M 2.2 programs without resource contention with the other cores.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's implement on a &quot;monster FPGA board&quot; (Stratix IV 530GX) the constructor inherited from a lab cleanup. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.autometer.de/unix4fun/z80pack/cpnet/cpnet.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;CP/NET&lt;/a&gt; is also quite interesting.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2019-12-24T06:35:37.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13155" PostTypeId="2" ParentId="13145" CreationDate="2019-12-24T07:54:43.237" Score="2" Body="&lt;p&gt;I am not sure if any modern EEPROM programmer could do it. PROMs are too outdated nowadays. Better look for an older EPROM programmer. PROMs and EPROMs have similar programming process, using the high voltage (+12 V in the most usual cases), so it could, maybe, know how to program a PROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But my personal opinion: the best way is to find a datasheet, look for a programming process and use the Arduino (Mega would be better) to build a dedicated programmer. Programming those memories are generally the same: select an address, send the desired data and then send a short 12V pulse to the programming pin (often named &quot;Vpp&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;One more thing should be mentioned: PROMs are OTP (One-Time Programmed) devices. It depends on the exact type, but the majority of PROMs are full of 1s at all memory cells and they are programmed to 0s. Once you write the 0 in a memory bit, there is no way to write 1 back. But in the (very rare) case you need to re-program the PROM and the changes are only 1-to-0, you can alter its content.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-24T07:54:43.237" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13156" PostTypeId="2" ParentId="13141" CreationDate="2019-12-24T08:32:42.163" Score="9" Body="&lt;p&gt;I'd bet on some kind of prehistoric &quot;copy protection&quot;, or the oddity of the software house production process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most usual way was to have a short BASIC loader (e.g. 10 CLEAR 24899: LOAD &quot;&quot; CODE: RANDOMIZE USR 24900) saved with LINE 10 for autostart after load. The second file was a code itself. BASIC made the necessary operations: prepare the memory space, load the code and run the machine code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To save &quot;just a code, with autostart&quot; you need to save the code with some system variables. Then you will get something like a &quot;snapshot&quot;. You can try it too - try to write something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 SAVE &quot;test&quot; CODE 16384,16384: PRINT &quot;AUTO-RUN&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and run it. This program saves the whole memory of 16k Spectrum, from the screen through the system variables, the BASIC program itself and a lot of empty space. When you want to load this program back, you have to enter LOAD &quot;&quot; CODE. During load, the computer restores all the variables to the exactly same state as they were in the moment of saving. So the BASIC program will continue directly after the SAVE command. Et voila...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IMHO the main reason was those games were the first games ever wrote for ZX Spectrum and their authors had no &quot;best practices&quot; yet, so they had tried different ways...&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-24T08:32:42.163" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13157" PostTypeId="1" AcceptedAnswerId="13160" CreationDate="2019-12-24T08:48:52.297" Score="11" ViewCount="1011" Body="&lt;p&gt;The highly popular at the time build-it-yourself home computer Radio 86RK, designed in the Soviet Union, contained a rather mysterious video controller chip KR580VG75. It had a high end, feature rich capabilities for the text based output, including &quot;light pen&quot; support, switching colors, etc. Many features were not used in Radio 86RK. The device, however, was not providing graphical output of any kind, not counting pseudographics. It was extremely difficult component to obtain, way more than 8080 CPU, for instance. Looks like the device is the clone of Intel 8275.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All early popular computers for home from the western world I am aware of feature graphics so could not use that chip. Why it has been designed, where it has been used? Intel 8275 probably lived a very different life from its Russian brother KR580VG75.&lt;/p&gt;&#xA;" OwnerUserId="496" LastEditorUserId="11916" LastEditDate="2019-12-28T14:28:29.743" LastActivityDate="2019-12-28T14:28:29.743" Title="What is the history of the Intel 8275 video controller?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;terminal&gt;&lt;intel&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13158" PostTypeId="2" ParentId="13124" CreationDate="2019-12-24T10:17:38.387" Score="0" Body="&lt;p&gt;I remember having seen youtube videos on UNIX belonging to 1960s/1970s where the promotion videos of that time had playback support.&lt;/p&gt;&#xA;" OwnerUserId="15890" LastActivityDate="2019-12-24T10:17:38.387" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13159" PostTypeId="2" ParentId="12832" CreationDate="2019-12-24T11:24:12.650" Score="2" Body="&lt;p&gt;The mysterious &quot;T&quot; is CPU clock tick, as mentioned above, and it figures as a &quot;non-dividable time quantum&quot; on this computer. When you need to do something with perfect timing (e.g. audio generation), you had to compute how much ticks your routine takes (each instruction takes a known amount of T). It is very painful, but because ZX Spectrum has no HW timers, there was no other way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ZX Spectrum's BEEP is a quite simple &quot;square wave generator&quot;. At first, it computes how much Ts (= CPU clock ticks) it will need per one wave cycle, then repeat: toggle EAR output between 0 and 1 and wait for a given number of Ts.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-24T11:24:12.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13160" PostTypeId="2" ParentId="13157" CreationDate="2019-12-24T14:51:59.150" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why it has been designed, where it has been used?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Its target market was terminals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8275 is a very versatile logic chip for generating text displays (*1) so nearly any terminal format of that time, with up to 80 characters and whatever attributes needed, can be handled. It was made to cover the full range from simple 32x20 with 8x8 cells all the way to high end terminals with 80x25 using 16x12 characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can generate any display with up to 80 characters per line and 60 character lines per frame with up to 16 (pixel) rows per character and arbitrary number of pixel columns, which allows quite great looking displays. This adds a lot of design freedom about how the display should look. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's remarkable by having two line buffers to handle character timing independent from memory timing, while all access is done using external feeding. While Intel of course recommends their 8257 DMA controller, it can be done by any other logic as well. By using a 8275, integrated video can be designed without the need to synchronise system clock(s) with video timing (*2), as here video access synchronises with the host.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other remarkable feature is that it didn't simply output some fixed size character matrix, but worked the data read more like a stream of instructions or a display list. Somewhat like Atari or Sinclair later did. A set high bit denoted a function, which could be either setting attributes for the character(s) following, or controlling memory access. For example a F1h code stopped DMA (and display) for the remaining line. A nice way to reduce memory load. Similarly, a F3h would stop DMA for the remaining screen. So a cleared screen with a prompt would only need to read some 5-6 bytes, reducing memory load greatly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole 8275 was designed to not just create a display, but to be as flexible and minimal intrusive as possible — staying short of holding the whole screen memory local (*3). After all, even 'only' 4 KiB, for 80x25, on a single chip would have been lot in 1976. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the resulting screen data may look odd from today's perspective, it was quite in line with how terminals worked — and allowed an efficient handling of memory and memory load.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Intel 8275 probably lived a very different life from its Russian brother KR580VG75.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Intel had quite a remarkable lineup of peripherals. Eventually the most comprehensive of all manufacturers. Where some just had very basic offerings, like some serial and parallel plus timers, Intel tried to cover as much high level functionality as possible within their family. There was not only the 'simple' brother 8276, but there were keyboard controllers (8278), even some combining keypad scan and LED (8279), GPIB (HPIB) functions (8291/92/93), HDLC (8273) and many more (*4). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel's designs were great and quite useful — but as so often simpler devices, using brute force and software instead of clever design, gave them a run for their money.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Well, in theory as well graphics, but then most of its features would be useless, so taking a less capable controller is more appropriate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Within limits, as the controller should get enough memory access to fetch a whole line while the previous is displayed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Like the 9918 did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Heck, even including a DES chip, 8294. There was a DES hype in the late 1970s with Intel and TI (99541) supporting the lower end (400 Bytes/s throughput) for (credit card) terminals, while Fairchild (2002) and AMD (9518) targeted the high end (&gt;1.5 MiB/s) host side. Motorola (6859) and Western Digital (2001) somewhat in the middle, usable for both sides.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="79" LastEditDate="2019-12-24T16:16:46.147" LastActivityDate="2019-12-24T16:16:46.147" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13161" PostTypeId="2" ParentId="13145" CreationDate="2019-12-24T16:52:07.173" Score="0" Body="&lt;p&gt;I am grateful for the different answers, and I will probably try one of them, but for the sake of completeness, the people who sell the chips got back to me, and told me that the &lt;a href=&quot;http://www.sterh007.com/st-007.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;STERH 007 programmer&lt;/a&gt;, can be used with this chip, and sure enough it is listed as one of the supported chips. The downside is the cost - 250 USD for the basic model, plus the cost of adapters - and that's the manufacturer's price! Right now that's beyond my budget, but I thought I'd share it here as it seems to cover a lot of old PROMs and EPROMs, only a fraction of which are Russian-made.&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="8072" LastEditDate="2019-12-24T17:06:05.467" LastActivityDate="2019-12-24T17:06:05.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13162" PostTypeId="2" ParentId="13114" CreationDate="2019-12-24T19:46:37.760" Score="13" Body="&lt;p&gt;As others have noted, it's difficult to locate statements from IBM insiders dishing &lt;em&gt;exactly&lt;/em&gt; why OS/2 was sidelined, but I did find this &lt;a href=&quot;https://www.nytimes.com/1996/09/25/business/ibm-introducing-merlin-its-latest-os-2-software.html&quot; rel=&quot;noreferrer&quot;&gt;1996 &lt;em&gt;New York Times&lt;/em&gt; article&lt;/a&gt; which quotes John W. Thompson, &quot;the IBM general manager in charge of the software.&quot;  The &lt;em&gt;Times&lt;/em&gt; uses some weasel words (&quot;implied,&quot; &quot;all but conceded&quot;), but this may be as close as we will get to a direct quote from an IBM insider:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[Thompson] implied in an interview last week that the company had&#xA;  little choice but to continue supporting OS/2 because I.B.M.'s most&#xA;  important business customers still use it. But the company has all but&#xA;  conceded that OS/2 will not compete for users in the consumer market.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;OS/2's estimated 11 million users are a fraction of the 140 million&#xA;  users of Windows, according to the International Data Corporation of&#xA;  Framingham, Mass. But Mr. Thompson said that the 3,000 largest OS/2&#xA;  customers, which include big banks and insurers, generate 25 to 30&#xA;  percent of Big Blue's $72 billion in annual revenue, with purchases of&#xA;  other types of computers, services and software.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Mr. Thompson said he presented I.B.M.'s chairman and chief executive,&#xA;  Louis V. Gerstner, all the options concerning OS/2's future, including&#xA;  killing it, at a meeting this spring. The decision to continue&#xA;  supporting it was made, he said, because the company had made a&#xA;  commitment to its clients, many of whom spent a great deal to write&#xA;  custom programs that run on the software. &quot;OS/2 is broader than just&#xA;  an operating system to the I.B.M. company,&quot; he said.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It appears the key points are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IBM acknowledged OS/2 had failed to compete in the consumer market&lt;/li&gt;&#xA;&lt;li&gt;OS/2 had some success in the business market (25-30% of $72 billion, although that appears to include &quot;computers, services and software&quot; and not merely the operating system)&lt;/li&gt;&#xA;&lt;li&gt;Given all considered choices (including killing off OS/2 outright), Big Blue decided not to abandon paying corporate clients while quietly exiting the consumer market&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The original poster said:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;it can only be explained by a civil war within IBM between its American hardware and software groups.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't see anything in the &lt;em&gt;Times&lt;/em&gt; article suggesting such an internecine conflict within IBM.  Rather, Gerstner was offered all options, and doing the financial arithmetic, opted to focus on continued profits and IBM's competencies.&lt;/p&gt;&#xA;" OwnerUserId="4222" LastActivityDate="2019-12-24T19:46:37.760" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13163" PostTypeId="1" AcceptedAnswerId="13164" CreationDate="2019-12-24T23:49:14.050" Score="11" ViewCount="684" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/S-100_bus&quot; rel=&quot;noreferrer&quot;&gt;S-100 bus&lt;/a&gt; was something of an industry standard in the 1970s, for 8080 and Z80 computers built on a backplane design. It was invented with the Altair 8800, which apparently provided 16 or 18 expansion slots, depending on the model. That sounds like a lot, but you tended to need all the slots you could get; memory, for example, had to be added in the form of cards containing only a few kilobytes each. Presumably S-100 computers from different manufacturers, provided different numbers of expansion slots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the maximum number of cards you could put on an S-100 bus? I mean, presumably there must have been some limit, either in terms of the amount of power they would draw, or just in terms of how long the bus could be. Did some manufacturers, trying to offer very many expansion slots as a selling point, approach the limit, or was it so absurdly large that you would never get near it in practice?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="333" LastEditDate="2019-12-25T14:43:24.683" LastActivityDate="2019-12-25T14:43:24.683" Title="How many cards could you put on an S-100 bus?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;s-100&gt;&lt;altair-8800&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13164" PostTypeId="2" ParentId="13163" CreationDate="2019-12-25T00:26:41.680" Score="15" Body="&lt;p&gt;The standard (IEEE 696) is available &lt;a href=&quot;http://vintagecomputer.ca/files/Heathkit-Zenith/H100/IEEE%20696%20S-100%20Bus%20Specs.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Section 1.1 defines the scope of the standard as &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Data exchanged among the devices is digital.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A maximum of 22 devices are interconnected.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The total transmission path length does not exceed 25 inches&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The maximum switching rate is 6 MHz.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2019-12-25T00:26:41.680" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13165" PostTypeId="5" CreationDate="2019-12-25T02:57:52.967" Score="0" Body="&lt;p&gt;For questions regarding OS/2 (including OS/2 Warp) and technologies closely associated with the operating system, including Presentation Manager.&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="4222" LastEditDate="2019-12-25T09:27:32.030" LastActivityDate="2019-12-25T09:27:32.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13166" PostTypeId="4" CreationDate="2019-12-25T02:57:52.967" Score="0" Body="For questions regarding IBM's operating system OS/2." OwnerUserId="4222" LastEditorUserId="4222" LastEditDate="2019-12-25T09:28:07.240" LastActivityDate="2019-12-25T09:28:07.240" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13167" PostTypeId="2" ParentId="1373" CreationDate="2019-12-25T04:50:08.630" Score="6" Body="&lt;p&gt;Looks like one of the original authors chimed in on a USENET thread (comp.os.cpm):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm Michael Pagels, one of the two authors.  We had a great time&#xA;  writing this game, and it helped pay for grad school.  Of course, we&#xA;  had to change the name of Dungeon Master; something pesky about&#xA;  copyrights!  We never got to Nemesis II, but we did write one of the&#xA;  first multi-player games for MP/M or serially linked CP/M machines&#xA;  called StarJump.  I never continued in the games business, but I've&#xA;  continued innovating in the computer industry.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Michael&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.os.cpm/mfTdhZttbTo&quot; rel=&quot;noreferrer&quot;&gt;https://groups.google.com/forum/#!topic/comp.os.cpm/mfTdhZttbTo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;There is no copy to find&lt;/strong&gt; as it does not appear they ever completed the planned game.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the multi-player game &quot;StarJump&quot; may be of interest, given you can find an archive copy.&lt;/p&gt;&#xA;" OwnerUserId="15357" LastActivityDate="2019-12-25T04:50:08.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13168" PostTypeId="2" ParentId="7606" CreationDate="2019-12-25T05:27:06.283" Score="1" Body="&lt;p&gt;I did a similar thing in the mid 00's.  An R5K Indy can throw a couple hundred flat shaded polygons around at a respectable framerate, depending on their size, and the graphics sub-system installed.  There are a couple options, one having just a frame buffer, and at least one other that had onboard geometry hardware.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Indy machines have no texture memory and will perform very poorly on textured graphics.  An O2 will perform excellent.  It has a shared memory graphics sub-system that can actually handle very large 100mb+ images as textures and do so frame locked to the display.  These machines very widely in their overall capability and a lot depends on the option boards installed.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is what I remember:  (I do not have an IRIX machine to sort out more, but this info should help)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MIPSPro was an additional installation on IRIX.  Versions prior to IRIX 6.5.11, I believe, will compile programs and just include nag messages that encourage you to get a license.  Later ones refuse to compile.  An older MIPSPro is difficult to use on a newer IRIX.  You want a newer IRIX for other reasons, like installing more recent Open Source Software, which SGI referred to as &quot;freeware.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GCC and friends are on the Freeware distribution CD.  It is likely the packages can also be found online.  This will be a fairly old version of GCC today, but should suffice for what you are doing.  Ask around at the forum I linked below for other info.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For either compiler, you want to load the full &quot;Development Foundation&quot; distribution CD, which includes header and library files necessary for your program to be compiled.  This is necessary whether you use MIPSPro, or GCC.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;GCC is recommended, unless your version of IRIX is old enough to make the more permissive version of MIPSPro an option. Even then, you probably want GCC as MIPSPro can be a bit different to work with, though it's well documented. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Internet Archive has IRIX installation media:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/search.php?query=sgi+irix&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/search.php?query=sgi+irix&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may find what you need there.  You may also benefit by asking this question at one of the more active IRIX communities currently online:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://forums.irixnet.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://forums.irixnet.org/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They may have more current libraries and GCC tools to work with.  If so, use them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your first three includes should work.  I am not sure about the X related ones.  The SGI X Server was a highly customized version of 3WM, called 4dwm.  It had extensions to make 3D GL graphics network transparent.  (GLX) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A great resource for this kind of thing is the SGI Developer Books.  Here's an example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://retrogeeks.org/sgi_bookshelves/SGI_Developer/books/OpenGLonSGI/sgi_html/ch01.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://retrogeeks.org/sgi_bookshelves/SGI_Developer/books/OpenGLonSGI/sgi_html/ch01.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those can also be installed via the &quot;Documentation&quot; CD, and as part of the &quot;Development Foundation&quot; CD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use &quot;inst&quot; to launch the system software manager from the command line, or the much easier to understand, &quot;swmgr&quot; from any terminal on your Indigo Magic Desktop.  All SGI system software, including freeware and the GCC compiler, can be installed via this tool.  It's advanced, featuring version management and a lot of installation options.  As was typical for many SGI system tools, &quot;swmgr&quot; is just a spiffy GUI front end to &quot;inst&quot;, which does the real work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Newer versions of Software Manager can install right over the Internet via URL, (though I doubt https) and pretty much all versions can install from something like an NFS share.  You may be able to mount the CD images on a machine and get the tools onto your SGI that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you burn an actual CD, make sure you use ISO9660 format in order for it to work under all &quot;inst&quot; use cases, including installing a new instance of IRIX on an otherwise blank system.&lt;/p&gt;&#xA;" OwnerUserId="15357" LastEditorUserId="15357" LastEditDate="2019-12-25T05:33:14.817" LastActivityDate="2019-12-25T05:33:14.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13169" PostTypeId="1" CreationDate="2019-12-25T09:40:58.997" Score="2" ViewCount="245" Body="&lt;p&gt;I'm programming for the Sega Mega Drive using vasm 1.7d assembler. I'm copying a block of my code from ROM to RAM so I can do some self-modifying code.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        ; First $200 bytes are header, dc.b declarations etc.&#xA;RAM_BEGIN = $00FF0000&#xA;entry_point:&#xA;        ; Copy (cool_routine_in_rom_source, cool_routine_in_rom_source+SIZE-1) to RAM_BEGIN&#xA;        lea     cool_routine_in_rom_source,a0&#xA;        lea     RAM_BEGIN,a1&#xA;        move.w  #(SIZE-1),d0&#xA;copy_loop:        &#xA;        move.b  (a0)+,(a1)+&#xA;        dbf     d0,copy_loop&#xA;        jmp     cool_routine_in_ram_entry_point&#xA;&#xA;        align   2&#xA;cool_routine_in_rom_source = *&#xA;        org     RAM_BEGIN&#xA;cool_routine_in_ram_entry_point:&#xA;        ; Some code here that uses absolute addressing and self-modifying code.&#xA;cool_routine_in_ram_some_label1:&#xA;        ; code&#xA;        rts&#xA;cool_routine_in_ram_some_label2:&#xA;        ; code&#xA;        rts&#xA;        align   2&#xA;SIZE = (*-cool_routine_in_ram_entry_point)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If I assemble this using the command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;vasmm68k_mot_win32.exe -Fbin -o main.bin main.68k.asm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I get a binary that contains &lt;code&gt;entry_point&lt;/code&gt; then ~16 megabytes of zero padding up to address $00FF0000 then my &lt;code&gt;cool_routine_in_ram&lt;/code&gt; code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some assemblers (for 6502) let you change the current address while assembling the output consecutively by assigning to &lt;code&gt;*&lt;/code&gt; but I don't think vasm accepts that syntax.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What I want is &lt;code&gt;entry_point&lt;/code&gt; and &lt;code&gt;cool_routine&lt;/code&gt; to be assembled consecutively in ROM, with the second routine (and all labels following it) being assembled as if the PC was at &lt;code&gt;RAM_BEGIN&lt;/code&gt;. What is the correct directive/approach to use?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="15371" LastActivityDate="2019-12-25T12:36:29.220" Title="In vasm 1.7d targeting 68000, how to assemble with program counter at specific address without padding?" Tags="&lt;assembly&gt;&lt;motorola-68000&gt;&lt;sega-genesis&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13170" PostTypeId="2" ParentId="13169" CreationDate="2019-12-25T12:36:29.220" Score="2" Body="&lt;p&gt;Look at phase/dephase directives (also known as rorg/rend) - e.g. in &lt;a href=&quot;http://www.ibaug.de/vasm/doc/vasm.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the vasm manual&lt;/a&gt;. The whole code should like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;org real_entry_point&#xA;entry_point: &#xA;...&#xA;align 2&#xA;rorg RAM_BEGIN&#xA;cool_routine&#xA;... (will be assembled for &quot;org RAM_BEGIN&quot;, but stored immediately after previous code)&#xA;rend&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-25T12:36:29.220" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13171" PostTypeId="1" AcceptedAnswerId="13177" CreationDate="2019-12-25T16:04:27.183" Score="6" ViewCount="1788" Body="&lt;p&gt;Curious as to what model SBC this unit is using&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrogames.biz/thec64&quot; rel=&quot;noreferrer&quot;&gt;https://retrogames.biz/thec64&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;8 bit guys teardown says the internals are 'an ARM computer similar to a Raspberry Pi'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/kxx2F4ffmeE&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/kxx2F4ffmeE&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8856" LastActivityDate="2020-04-03T03:37:01.227" Title="What sort of SBC is in the C64 Maxi?" Tags="&lt;commodore-64&gt;&lt;arm&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13173" PostTypeId="1" AcceptedAnswerId="13176" CreationDate="2019-12-26T02:41:54.620" Score="8" ViewCount="964" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PU2Dl.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PU2Dl.png&quot; alt=&quot;Classic arcade font&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nearly anyone who has seen an early arcade game from any company has probably seen this or a very similar font. Who created it and where, and why did it become so widespread, ending up in games from completely different companies?&lt;/p&gt;&#xA;" OwnerUserId="11624" LastActivityDate="2020-02-04T04:06:00.810" Title="Where did the standard arcade font originate?" Tags="&lt;arcade&gt;&lt;font&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13174" PostTypeId="1" AcceptedAnswerId="13175" CreationDate="2019-12-26T07:00:27.617" Score="9" ViewCount="1046" Body="&lt;p&gt;The Osborne 1 was a luggable computer that contained a pair of 5.25-inch floppy drives. According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Osborne_1&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Osborne_1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Adam Osborne decided to use single-sided disk drives out of concern about double-sided drives suffering head damage from rough handling.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Is there a nonobvious reason why single-sided drives should be less vulnerable to this? Did other portable computers make the same design decision?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-12-27T04:54:25.270" Title="Were single-sided floppy drives really more tolerant of rough handling?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;portable&gt;&lt;floppy-drive&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13175" PostTypeId="2" ParentId="13174" CreationDate="2019-12-26T07:18:08.500" Score="13" Body="&lt;p&gt;In a double-sided drive, there are two heads which are necessarily closely spaced, facing both sides of the thin magnetic-coated disc once it is inserted.  The concern would have been that the heads could collide with each other if the drive was jarred.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the drive designs I'm familiar with have a mechanism to hold the heads and drive spindle away from the disc until the drive door is closed (or, for the 3&quot; and 3.5&quot; &lt;em&gt;stiffies&lt;/em&gt;, until the hard casing is detected in the inserted position).  This is to permit the disc to be inserted by an untrained user without damaging the disc, but it would also hold the heads apart from each other so that they could not collide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the drive were jarred with a disc inserted, the heads would collide with the disc surface - but that's also true of a single-sided drive.  I think floppy discs are a bit more tolerant of that than hard drives, mainly due to the lower speeds involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, double-sided drives became common and did not have a reputation for fragility.  I have had several laptops (and even an 8088-based Amstrad luggable) with 3.5&quot; double-sided drives, some of which had decidedly rough handling over the years but gave no trouble.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-12-26T07:18:08.500" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="13176" PostTypeId="2" ParentId="13173" CreationDate="2019-12-26T13:28:16.333" Score="5" Body="&lt;p&gt;&lt;strong&gt;It's a bold 8x8 pixel sans font.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hard- and software wise using an 8x8 font is the most simple way to go and to create emphasis making it bold needs the least effort. Within an 8x8 grid, there aren't many ways to create fonts and even fewer bold ones (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When bolding, the font design choice in 8x8 is usually vertical doubling, due the rather upright nature of latin characters. Vertical offers more room while still keeping a recognizable ratio. There is as well not much room for bells and whistles, as the main concern is still readability - after all, it's all geared to make the reader play, not decipher text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;Similarity evolved as a result of restricted resources and desired function.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which BTW is true for any classic 'font' design - next to all scripts design can in large parts be attributed to the technology used for creation. It wasn't until the movable letter and highres displays that it got freed from such mundane limitations :)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The font issue nothing specific to arcade games, but true for all microcomputers using low resolution displays, with 8x8 being a cornerstone. IBM's CGA gives a great example, as its charset was as well 8x8 and by default available in bold (lower half):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EBVNu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EBVNu.png&quot; alt=&quot;IBM PC CGA Font&quot;&gt;&lt;/a&gt;&#xA;(picture taken and upscaled from &lt;a href=&quot;https://www.seasip.info/VintagePC/cga.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.seasip.info/VintagePC/cga.html&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, using an 8x8 grid doesn't mean there is not room for variations, above CGA font designers even managed to include basic elements of a serifed font integrated - visible on some of the upper case letters - while the font mentioned in the question and many other 8x8 fonts go for a more simple sans style.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://int10h.org/oldschool-pc-fonts/fontlist/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This nice page&lt;/a&gt; (&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13173/where-did-the-standard-arcade-font-originate#comment41756_13176&quot;&gt;supplied&lt;/a&gt; by LangLangC) shows a wide variety of character sets used on PC and PC like systems. There are many font variations within 8x8. People invested a lot of time to customise appearance. But when it comes to simple, conventional, easy to read fonts, the limited resources in pixels and shapes make them superficially the same.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - As Ross Ridge already &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13173/where-did-the-standard-arcade-font-originate#comment41744_13173&quot;&gt;commented&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-26T17:08:59.247" LastActivityDate="2019-12-26T17:08:59.247" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="13177" PostTypeId="2" ParentId="13171" CreationDate="2019-12-26T15:48:32.740" Score="5" Body="&lt;p&gt;Per &lt;a href=&quot;http://thec64community.online/thread/426/inside-thec64-maxi&quot; rel=&quot;nofollow noreferrer&quot;&gt;a forum post&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;THEC64 Mainboard is based on this development board&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Rocket64&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;ROCK64 is a credit card size 4K60P HDR Media Board Computer powered by *Rockchip RK3328 Quad-Core ARM Cortex A53 64-Bit Processor [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Further details are in that post, and the development board it is referring to appears to be &lt;a href=&quot;https://www.pine64.org/devices/single-board-computers/rock64/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt; though the board from the C64 Maxi looks like a unique design, adding a heatsink and what appear to be solder pads for 9-pin joystick ports (presumably repurposing the GPIO) and omitting an ethernet connector (though it looks like that's what the other solder pad is for?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That should give you some decent information on the chipset though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: here's a direct reproduction of the high-resolution image from that forum thread, in case somebody who is better at this stuff wants to verify my guesses about solder pads:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Mmef8.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Mmef8.jpg&quot; alt=&quot;C64 Maxi main board&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-12-26T15:58:18.767" LastActivityDate="2019-12-26T15:58:18.767" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13178" PostTypeId="1" AcceptedAnswerId="13179" CreationDate="2019-12-26T16:27:08.100" Score="3" ViewCount="164" Body="&lt;p&gt;I have been surprised at how little use eighties computers made of fast page mode access to RAM. (A notable exception being the Sinclair Spectrum, which used it to get the necessary bandwidth to video memory.) The Amiga, for example, used 41256 RAM chips of 150-ns speed grade, and performed a random access every 280 ns, but those chips are capable of better; even the older 4164s can do a pair of accesses in fast page mode in less than half a microsecond. The Archimedes widened the data bus to 32 bits, but a road not taken would've been to keep the data bus at 16 bits and use fast page mode to transfer a 32-bit word, or even a pair of such words. So I'm trying to figure out exactly what was the potential of the available chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the 41256 RAM chips of 150-ns speed grade, that were readily and cheaply available in the mid-to-late eighties, just how long would it take to read four consecutive words, the second, third and fourth in fast page mode?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-12-26T16:40:18.443" Title="How long would a 41256 take to do 4 accesses in fast page mode?" Tags="&lt;hardware&gt;&lt;memory&gt;&lt;performance&gt;&lt;ram&gt;&lt;dram&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13179" PostTypeId="2" ParentId="13178" CreationDate="2019-12-26T16:40:18.443" Score="3" Body="&lt;p&gt;The speed rating of asynchronous DRAM devices is usually (as in this case), the &quot;RAS access time&quot; or tRAC.  This is the minimum guaranteed time for data to appear at the output after /RAS is provided with the row address, noting that this process also requires /CAS to be provided with the column address at some intermediate time.  The speed at which you can &lt;em&gt;cycle&lt;/em&gt; RAS, and therefore perform consecutive random accesses, is tRC which is always longer than tRAC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Referring to a Samsung datasheet for the 41256 family, I see that it has a &quot;nybble mode&quot; specifically for fast multi-cycle word loads, distinct from the &quot;page mode&quot;.  In the 150ns speed grade, tRC is 260ns (so nicely compatible with the Amiga's access cycle), while tNC for consecutive nybble-mode accesses is 75ns.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-12-26T16:40:18.443" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13180" PostTypeId="2" ParentId="13116" CreationDate="2019-12-26T17:26:06.307" Score="0" Body="&lt;p&gt;The Atari 8 bit computers provided for both over and under scan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DMACTL register provided options for 32, 40 and 48 byte DMA.  The 48 byte DMA allowed pixels in nearly all of the active display region of an NTSC scanline.  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;DMACTL $D400 Write SHADOW: SDMCTL $022F&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Direct Memory Access (DMA) Control&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Bit 7 Bit 6   Bit 5   Bit 4   Bit 3   Bit 2   Bit 1   Bit 0&#xA;  - -   Display List DMA    Player Missile Resolution   Player DMA  Missile DMA Playfield Width Playfield Width&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 48 byte DMA mode was not entirely visible on pretty much all home televisions of the era.  Flat screen type TV's did show more of the display, and PVM type displays offering an &quot;underscan&quot; option would display everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the day, I manually realigned a Zenith color television to display a full frame, with the corners of the raster aligned with the midpoint of the CRT radii at the corners to see the entire raster and make use of the extra pixels.  One could get a 384x220 pixel display (more possible in the Y direction, depending on how many lines one wanted to have active) on those computers using a custom screen display list and the wide DMA setting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing this would slow the machine CPU down another 15 to 20 percent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 40 byte DMA was roughly aligned with the NTSC &quot;Safe Area&quot;, a region defined as one nearly all TV sets would display.  The need for this region came about due to the many varied CRT designs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, most composite, monochrome monitors featured width and height controls and would display overscan easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was just for the &quot;playfield&quot;.  The &quot;Player Missile&quot; sprite objects were positioned according to &quot;color clocks&quot;, which were one period of the colorburst.  These objects could exist in the overscan by default.  40 byte DMA = 160 color clocks.  There were 160 sprite &quot;x&quot; positions possible, aligned with the 160 color pixels possible, for reference.&lt;/p&gt;&#xA;" OwnerUserId="15357" LastActivityDate="2019-12-26T17:26:06.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13181" PostTypeId="1" AcceptedAnswerId="13182" CreationDate="2019-12-26T17:38:23.467" Score="-6" ViewCount="1915" Body="&lt;p&gt;I already know that the maximum integers for ranges higher than 24-bit (16 777 216) will very likely exceed 1 000 000 000, so, what is the maximum &lt;strong&gt;64 bit&lt;/strong&gt; integer? It is larger than 10 bilion?&lt;/p&gt;&#xA;" OwnerUserId="15875" LastActivityDate="2019-12-26T17:48:30.770" Title="What is the maximum 64 bit integer (number) value?" Tags="&lt;programming&gt;&lt;microprocessor&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2019-12-26T18:28:12.477" ContentLicense="CC BY-SA 4.0" />
  <row Id="13182" PostTypeId="2" ParentId="13181" CreationDate="2019-12-26T17:48:30.770" Score="4" Body="&lt;p&gt;Ten billion can be represented in 34 bits, never mind 64.  The hexadecimal representation (in which each digit contains four bits) is &lt;code&gt;0x2540BE400&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The maximum (unsigned) 64-bit integer is &lt;code&gt;18446744073709551615&lt;/code&gt;.  This is (2^64)-1, which is essentially the square of (2^32)-1, which is &quot;about&quot; 4 billion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, you can estimate that every 10 bits represents 3 decimal digits.  For 64 bits, that means a good estimate would be 16 (from the 4 leftover bits) followed by 18 zeroes (6*3).  As you can see, this gets reasonably close to the true value.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-12-26T17:48:30.770" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13183" PostTypeId="1" CreationDate="2019-12-26T18:15:33.747" Score="5" ViewCount="499" Body="&lt;p&gt;I bought a small LCD TV today in part to use with my retro computers. My Sinclair ZX Spectrum 48k works perfectly with it - I can manually fine tune Channel 36 as shown in &lt;a href=&quot;https://youtu.be/3rmsjSeaAP8&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the ZX81 I get frustratingly close. I can see the K icon, and the results of anything I type, but the image will not stay still, and half the time the TV claims there is no input (usually while still showing the flickering image).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read the discussion on &lt;a href=&quot;https://www.sinclairzxworld.com/viewtopic.php?t=200&quot; rel=&quot;nofollow noreferrer&quot;&gt;this forum thread&lt;/a&gt;, though it is 10 years old, and not everything is there or linked any more*. Also as I understand it, most solutions involve some replacing/soldering of components onto/into the ZX81 and I absolutely don't want to do that for fear of breaking anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said that, I have opened up my ZX81 and ascertained that the root of the problem is the &lt;a href=&quot;https://i.stack.imgur.com/v9ibi.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;ULA 2C184E&lt;/a&gt; which, unlike later versions of the ULA, does not control video signal strength.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is - is there an external solution to my ZX81's weak video output?. I'm open to doing some soldering and creating some kind of device, as long as it is external to the ZX81. Or is it impossible to improve the situation without internal modification? Has anybody had success using a  generic TV signal boosters with the ZX81 video output to solve this problem? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(As an aside, even in the complete absence of a TV for a time, I was able to use the ZX81, using the printer as a kind of Teletype :-D).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;* But the thread does prove that this is not just a problem with my TV, and is a general problem with ZX80/81.&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="8072" LastEditDate="2019-12-26T20:28:21.340" LastActivityDate="2019-12-26T20:28:21.340" Title="(How) can I boost my ZX81 video output with an external device?" Tags="&lt;video&gt;&lt;zx81&gt;" AnswerCount="1" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="13184" PostTypeId="2" ParentId="13183" CreationDate="2019-12-26T19:20:59.870" Score="8" Body="&lt;p&gt;I would skip the existing output entirely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Buy a &lt;a href=&quot;https://newstuffforoldstuff.com/display_product.py?pid=47&quot; rel=&quot;noreferrer&quot;&gt;Chroma 81&lt;/a&gt;, which plugs into the expansion slot — no internal modifications necessary — and then monitors the internal bus to reproduce&#xA; the video stream of its own volition. It has a SCART socket that you can then connect to your TV, modern or retro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Chroma's primary purpose is to add colour graphics modes, but they're entirely optional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: re that final assertion, see &lt;a href=&quot;https://web.archive.org/web/20160321174542/http://www.fruitcake.plus.com/Sinclair/ZX81/Chroma/Files/Documents/Chroma81_TechnicalDescription.txt&quot; rel=&quot;noreferrer&quot;&gt;this archived version of the usage instructions&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Chroma 81 is a multi-function SCART interface for the ZX81, providing a clear, sharp picture on most modern TV sets.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Switch 6: ON=Enable colour facilities / additional 16K RAM [$C000-$FFFF].&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Though you shouldn't usually need to switch colour off at a hardware level — it's off by default when you start the machine and software must write to an $xxEF port to enable one of the two available colour modes, which most software won't do by accident.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2019-12-26T20:21:20.550" LastActivityDate="2019-12-26T20:21:20.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13186" PostTypeId="1" CreationDate="2019-12-27T09:01:36.017" Score="21" ViewCount="2992" Body="&lt;p&gt;Super Mario World (SMW) is known to have several bugs relating to re-use of memory for multiple purposes. For example some memory items are used for more than one type of item, and the designers are supposed to ensure that they never exist on screen at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most games of that era use static memory allocation. However I'm surprised that there is apparently so much pressure on memory that they have to double up single bytes. Perhaps there is some other reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is how is memory allocated by SMW? A memory map would be ideal.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="278" LastEditDate="2019-12-27T11:41:52.113" LastActivityDate="2019-12-29T04:56:21.520" Title="How is memory allocated in Super Mario World?" Tags="&lt;nintendo&gt;&lt;memory-layout&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13187" PostTypeId="2" ParentId="13186" CreationDate="2019-12-27T12:36:47.070" Score="35" Body="&lt;p&gt;Memory is allocated statically in Super Mario World. Every RAM location used is hard-coded into the game, although some are re-used by different parts of the code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A full, annotated, and searchable &lt;a href=&quot;https://www.smwcentral.net/?p=memorymap&amp;amp;game=smw&quot; rel=&quot;noreferrer&quot;&gt;memory map for Super Mario World&lt;/a&gt; (&lt;a href=&quot;https://web.archive.org/web/20191228181654/https://www.smwcentral.net/?p=memorymap&amp;amp;game=smw&amp;amp;max=9223372036854775807&quot; rel=&quot;noreferrer&quot;&gt;archive&lt;/a&gt;) with 824 entries in RAM (4949 total) is presented at &lt;a href=&quot;https://www.smwcentral.net/&quot; rel=&quot;noreferrer&quot;&gt;SMW Central&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're interested in glitches due to re-used memory locations, the user Thomas has identified many re-used locations in &lt;a href=&quot;https://www.smwcentral.net/?p=viewthread&amp;amp;t=91198&quot; rel=&quot;noreferrer&quot;&gt;this thread&lt;/a&gt; (&lt;a href=&quot;https://web.archive.org/web/20191228203546/https://www.smwcentral.net/?p=viewthread&amp;amp;t=91198&quot; rel=&quot;noreferrer&quot;&gt;archive&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="15894" LastEditorUserId="667" LastEditDate="2019-12-29T04:56:21.520" LastActivityDate="2019-12-29T04:56:21.520" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13188" PostTypeId="1" AcceptedAnswerId="13189" CreationDate="2019-12-27T13:01:13.517" Score="6" ViewCount="582" Body="&lt;p&gt;According to &lt;a href=&quot;https://www.cc65.org/faq.php#ORG&quot; rel=&quot;noreferrer&quot;&gt;cc65 / ca65 documentation&lt;/a&gt;, the &lt;code&gt;.org&lt;/code&gt; directive does not affect the placement of the code unlike with other 6502 assemblers. The docs suggest defining a memory segment with the intended address instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following the instructions &lt;a href=&quot;https://www.cc65.org/faq.php#ORG&quot; rel=&quot;noreferrer&quot;&gt;there&lt;/a&gt; I created an extended &lt;code&gt;.cfg&lt;/code&gt; file based on c64-asm.cfg that defines a new memory area &lt;code&gt;HIMEM&lt;/code&gt; and a new segment &lt;code&gt;HIMEMSEG&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  FEATURES {&#xA;      STARTADDRESS: default = $0801;&#xA;  }&#xA;  SYMBOLS {&#xA;      __LOADADDR__: type = import;&#xA;  }&#xA;  MEMORY {&#xA;      ZP:       file = &quot;&quot;, start = $0002,  size = $00FE,      define = yes;&#xA;      LOADADDR: file = %O, start = %S - 2, size = $0002;&#xA;      MAIN:     file = %O, start = %S,     size = $D000 - %S;&#xA;      HIMEM:    file = %O, start = $c000,  size = $D000 - $c000; #this line was added&#xA;  }&#xA;  SEGMENTS {&#xA;      ZEROPAGE: load = ZP,       type = zp,  optional = yes;&#xA;      LOADADDR: load = LOADADDR, type = ro;&#xA;      EXEHDR:   load = MAIN,     type = ro,  optional = yes;&#xA;      CODE:     load = MAIN,     type = rw;&#xA;      RODATA:   load = MAIN,     type = ro,  optional = yes;&#xA;      DATA:     load = MAIN,     type = rw,  optional = yes;&#xA;      BSS:      load = MAIN,     type = bss, optional = yes, define = yes;&#xA;      HIMEMSEG: load = HIMEM,    type = ro;   #this line was added&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The new segment &lt;code&gt;HIMEMSEG&lt;/code&gt; was then referenced in the code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    .export prg1,prg2&#xA;    prg1:&#xA;            lda #$41&#xA;            jsr $ffd2&#xA;            jmp prg1&#xA;&#xA;    .segment &quot;HIMEMSEG&quot;&#xA;&#xA;    prg2:&#xA;            lda #$42&#xA;            jsr $ffd2&#xA;            jmp prg2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I assembled for target C64 with the command &lt;code&gt;cl65 -t c64 -C c64x-asm.cfg prg.s -Ln labels.txt -o prg.prg&lt;/code&gt; and would have expected to get a large program with code parts at &lt;code&gt;$0801&lt;/code&gt;and &lt;code&gt;$c000&lt;/code&gt;.&#xA;Interestingly, the result is a file that places all code closely together:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  .C:0801  A9 41       LDA #$41&#xA;  .C:0803  20 D2 FF    JSR $FFD2&#xA;  .C:0806  4C 01 08    JMP $0801&#xA;  .C:0809  A9 42       LDA #$42&#xA;  .C:080b  20 D2 FF    JSR $FFD2&#xA;  .C:080e  4C 00 C0    JMP $C000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note the reference to &lt;code&gt;$C000&lt;/code&gt; t address &lt;code&gt;080f&lt;/code&gt;, also the exported labels in &lt;code&gt;labels.txt&lt;/code&gt; indicate the code was meant to be placed in the defined &lt;code&gt;HIMEMSEG&lt;/code&gt; (&lt;code&gt;$C000&lt;/code&gt;). However, the linker just added those parts one after the other, producing an executable with the second part of the code being at the wrong address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already searched existing forums for solutions, without success. I'm grateful for any suggestions on how to effectively putting code into two different memory areas with cc65. I want to be able to refer to the other code parts via &lt;code&gt;.export&lt;/code&gt; / &lt;code&gt;.import&lt;/code&gt; so building and loading the parts seperately is not an option.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11916" LastEditDate="2019-12-27T13:40:46.740" LastActivityDate="2020-10-27T17:47:20.950" Title="Putting code into two different memory areas with cc65/ca65" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;6502&gt;&lt;cc65&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13189" PostTypeId="2" ParentId="13188" CreationDate="2019-12-27T14:32:05.440" Score="3" Body="&lt;p&gt;&lt;em&gt;(Caveat: This is from memory with a quick peek into the &lt;a href=&quot;https://cc65.github.io/doc/ld65.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual&lt;/a&gt;. So some reply after trying it might be useful.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;h3&gt;Fill it&lt;/h3&gt;&#xA;&lt;p&gt;Try &lt;code&gt;fill=yes&lt;/code&gt; (*1) for the memory area of MAIN and make HIMEMSEG overwrite the area you added:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MEMORY {&#xA;    ZP:       file = &amp;quot;&amp;quot;, start = $0002,  size = $00FE,      define = yes;&#xA;    LOADADDR: file = %O, start = %S - 2, size = $0002;&#xA;    MAIN:     file = %O, start = %S,     size = $D000 - %S, fill = yes;&#xA;}&#xA;SEGMENTS {&#xA;    ...&#xA;    HIMEMSEG: load = MAIN, start= $C000, type = overwrite;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will fill the whole MAIN segment up to its end ($D000) and then put HIMEMSEG at it's location within.&lt;/p&gt;&#xA;&lt;h3&gt;Load it&lt;/h3&gt;&#xA;&lt;p&gt;Then again a better way would be using two files here. One holding the main program and another to hold HIMEM, to be loaded under program control:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  HIMEM: file = &amp;quot;%O-1.ovl&amp;quot;, start = $C000,  size = $D000 - $C000;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will move whatever code is (really) in HIMEM into a file with the same name plus a &amp;quot;-1.ovl&amp;quot; postfix (*2) like &amp;quot;prg-1.ovl&amp;quot; in your case. Of course, this needs some more startup code - but at the same time offers a good flexibility.&lt;/p&gt;&#xA;&lt;h3&gt;Move it&lt;/h3&gt;&#xA;&lt;p&gt;A more compact and at the same time more versatile way would be of course to add a loader of it's own. By adding a 'define = yes' to all segments containing data the linker will supply and populate three symbols for wach segment with load address, desired run address and size. Best solution, needs astonishingly little amount to be done but still to much to be covered here in full. IIRC there is a source example given with CC65.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;General Note&lt;/h2&gt;&#xA;&lt;p&gt;It's always good to keep in mind that all these tools are about taking work from the programmer, while allowing to do whatever is needed. The most important step is here always to use abstract definitions that allow independent handling as long as possible. As a programmer sou should not have to care were your program is loaded or in which sequence - unless it's absolute essential. And even in such case the exact values should be postponed and managed separate - that's what the cc65 suite does and the configuration files are to handle this at the latest stage, during linking.&lt;/p&gt;&#xA;&lt;h2&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;While it's imaginable where your idea come from, it's as well something that can only occur to people living today .. after all, it would take close to two minutes to load 50 Kib ($D000-$800) - that's 200 blocks - from a standard 1541. All for a program that would fit into 1-2 blocks and load in 2-3 seconds. On machines back then there is a quite huge pressure to save on I/O transfer. Each KiB transferred less equals to about 2.5 seconds faster loading.&lt;/p&gt;&#xA;&lt;p&gt;But beside the C64 limitations it's as well the way a linker operates (and this is a linke - LD65 - issue). A linker is supposed to prepare all segments into a file to be loaded. This is not necessarily a memory image, but a loadable image. Loading is not part of the linkers job, but to be done by an OS.&lt;/p&gt;&#xA;&lt;p&gt;LD65 links what is given to a continuous file. Segments are only outputted with whatever they contain, not what they may contain. LD65 is a very versatile utility, but restricted to it's job. The next stage, the loaders job, is responsible to arrange the linked binary data into memory.&lt;/p&gt;&#xA;&lt;p&gt;Where in most (past primitive) systems a loader exists that translates file layout into memory layout,a system like the C64 doesn't have such a loader. Only a simple load facility that moves a file into memory and starts execution.&lt;/p&gt;&#xA;&lt;p&gt;Here it's up to the user to add the desired layer here. Either by splitting the program up into several files and manage the loading under program control, or by adding a small loader translating the file layout to a memory layout.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Optional with a &lt;code&gt;filval=&lt;/code&gt; with whatever you like to see it filled.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-27T17:47:20.950" LastActivityDate="2020-10-27T17:47:20.950" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13190" PostTypeId="1" AcceptedAnswerId="13194" CreationDate="2019-12-28T09:19:32.797" Score="13" ViewCount="2269" Body="&lt;p&gt;This is probably an easy one, but I'm stumped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to run &lt;a href=&quot;https://atornblad.se/hello-world-in-zx-spectrum-machine-code&quot; rel=&quot;noreferrer&quot;&gt;this ZX Spectrum Hello World routine&lt;/a&gt; on my Sinclair ZX Spectrum 48k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm going to describe all the steps I took so it's easier to see where the problem lies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) I didn't change the default RAMTOP, so I started my routine at 65415.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) I translated the hex codes into decimal like so:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld   a, 2                ; 3E 02 ; =&amp;gt; 62 2&#xA;call CHAN_OPEN           ; CD 01 16; =&amp;gt; 205 1 22&#xA;ld   de, text            ; 11 0E 7F; =&amp;gt; 17 14 127&#xA;ld   bc, textend-text    ; 01 0E 00; =&amp;gt; 1 14 0&#xA;jp   PRINT               ; C3 3C 20; =&amp;gt; 195 60 32&#xA;&#xA;defb 'Hello, World!'     ; 48 65 6C 6C 6F 2C 20 57&#xA;                                 ; 6F 72 6C 64 21; =&amp;gt; 72 101 108 108 111 44 32 87 111 114 108 100 33&#xA;defb 13                  ; 0D; =&amp;gt; 13&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;3) I wrote a short basic program to put the code into memory:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR I=65415 TO 65535&#xA;20 PRINT I,&#xA;30 INPUT C&#xA;40 POKE I,C&#xA;50 PRINT C,&#xA;60 NEXT I&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;4) And one to check it was in place&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR I=65415 TO 65535&#xA;20 PRINT I, PEEK(I),&#xA;30 NEXT I&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;5) I ran it with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RANDOMIZE USR 65415&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The good news is that the routine ran &amp;amp; exited, but instead of &quot;Hello, World!&quot;, it printed ?????????????&lt;/p&gt;&#xA;&#xA;&lt;p&gt;6) For debugging I checked my hex to decimal calculations and made sure I hadn't missed anything. I also checked the character codes for the alphabet letters in the user manual.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is: Why did this not produce &quot;Hello, World!&quot; printed to screen as desired?&lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="8072" LastEditDate="2019-12-29T01:33:47.030" LastActivityDate="2019-12-29T14:34:43.673" Title="Why does this ZX Spectrum machine code &quot;Hello World&quot; routine not produce the expected result?" Tags="&lt;z80&gt;&lt;zx-spectrum&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13191" PostTypeId="1" AcceptedAnswerId="13195" CreationDate="2019-12-28T10:30:57.890" Score="6" ViewCount="799" Body="&lt;p&gt;The Sinclair ZX80 was the most popular personal computer in Britain at the beginning of the 1980s, due to its low price which was enabled by extreme minimalism; it consisted of not much more than a Z80 CPU and a kilobyte of static RAM, with an edge connector to which RAM expansion could be connected; according to &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX80#rampack&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/ZX80#rampack&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Other than the built-in cassette and video ports, the only provided means of expansion was a slot opening at the rear of the case, which exposed an expansion bus edge connector on the motherboard. The same slot bus was continued on the ZX81, and later the ZX Spectrum, which encouraged a small cottage industry of expansion devices, including memory packs, printers and even floppy drives. The original Sinclair ZX80 RAM Pack held either 1, 2 or 3 KB of static RAM[9] and a later model held 16 KB of dynamic RAM (DRAM).[10]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But as I understand it, the then current 16kbit RAM chips actually required three different voltages: -5, +5, +12. And I don't see those in the pinout of the expansion connector: &lt;a href=&quot;http://projectspeccy.com/documents/Edge_Connector_Diagram_ZX80.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://projectspeccy.com/documents/Edge_Connector_Diagram_ZX80.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how did the machine supply the necessary voltages to use dynamic RAM?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-12-28T22:32:12.223" Title="How did the ZX80 RAM pack use DRAM?" Tags="&lt;hardware&gt;&lt;zx81&gt;&lt;sinclair&gt;&lt;zx80&gt;&lt;dram&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13192" PostTypeId="1" CreationDate="2019-12-28T10:34:03.547" Score="3" ViewCount="158" Body="&lt;p&gt;I have here a &lt;a href=&quot;https://terminals-wiki.org/wiki/index.php/Perkin-Elmer_Bantam_550&quot; rel=&quot;nofollow noreferrer&quot;&gt;Perkin-Elmer “Bantam” 550&lt;/a&gt; serial terminal.  This terminal has a flap above the keyboard below which you can find a Baud rate selection slider, a switch for “transparent mode” (whatever that is) as well as DIP switches with unknown purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do these DIP switches do?  An explanation on the “transparent mode” is appreciated as well.&lt;/p&gt;&#xA;" OwnerUserId="24" LastActivityDate="2019-12-28T15:08:39.380" Title="What do the DIP switches in a Perkin-Elmer 550 terminal do?" Tags="&lt;terminal&gt;&lt;documentation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13193" PostTypeId="2" ParentId="13190" CreationDate="2019-12-28T12:27:27.243" Score="7" Body="&lt;p&gt;The DE register point to text address in memory, and they are based on the example, so they still point to the old address. You should change them to point to text in new address. If I did the math right, the line should be 11 95 FF in hex.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2019-12-28T12:33:28.170" LastActivityDate="2019-12-28T12:33:28.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13194" PostTypeId="2" ParentId="13190" CreationDate="2019-12-28T12:29:39.937" Score="21" Body="&lt;p&gt;It may help if you load the address of the text to be printed. After all, you relocated the routine including the text, but still load the old address:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld   de, text            ; 11 0E 7F; =&amp;gt; 17 14 127&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;7F0Eh equals 32,526, which is fine with the orriginal address of 32,512.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With 65,415 as start address, DE should now be loaded with 65,429, or FF95h, as in&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld   de, text            ; 11 95 FF; =&amp;gt; 17 149 255&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-12-28T12:29:39.937" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13195" PostTypeId="2" ParentId="13191" CreationDate="2019-12-28T13:04:40.103" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But as I understand it, the then current 16kbit RAM chips actually required three different voltages: -5, +5, +12.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Right, and the 'missing' voltages (-5V,+12V) get generated from the +9V source via a discrete DC-DC converter - that's all the little pieces on the second board.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The difference between the RAM-Packs for ZX80/81 is all in the colour :) In fact, for a short time, the new (black) packs were delivered using the old boxes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ZX80 and ZX81 are basically the same machine, their &lt;a href=&quot;https://faqwiki.zxnet.co.uk/wiki/ZX80/81_edge_connector&quot; rel=&quot;nofollow noreferrer&quot;&gt;board connector&lt;/a&gt; only differ in pin 23, not connected on the ZX80, but /ROMCS on a ZX81. This was done to simpify ROM updates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the schematic shows the RAM-Pack doesn't use /ROMCS in any way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zFcxk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zFcxk.png&quot; alt=&quot;ZX RAM-Pack Schematics&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All it uses are data lines, address lines (to be multiplexed) and associated control signals. For power supply the +9V supplied on lower side (B) pin 9 get turned into minus 5 Volt and plus 12 Volt, as shown in the lower right corner - the +12V tap is a bit hard to find as it's hidden within, below the leftmost 22 uF capacitor.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-28T22:32:12.223" LastActivityDate="2019-12-28T22:32:12.223" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13196" PostTypeId="2" ParentId="13192" CreationDate="2019-12-28T15:08:39.380" Score="1" Body="&lt;p&gt;There is some &lt;a href=&quot;http://www.bitsavers.org/pdf/datapro/alphanumeric_terminals/Datapro_C25_Perkin_Elmer.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation online&lt;/a&gt;. Transparent mode displays control characters, rather than obeying them, and is presumably intended for configuring terminal drivers. There's also a switch for white-on-black or black-on-white display, and presumably switch settings for full/half duplex operation, and odd/even and mark/space parity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the OP would care to list the labels on the switches, we might be able to guess at which switch controls what. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-12-28T15:08:39.380" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13197" PostTypeId="1" AcceptedAnswerId="13200" CreationDate="2019-12-28T16:58:44.760" Score="9" ViewCount="1898" Body="&lt;p&gt;I’m refurbishing my middle school computer, a Macintosh Performa 635CD which has the Motorola 68LC040 processor. It is a 33 MHz chip. This era didn’t use any sort of heat spreader or heat sink, and there’s a fan attached to the computer chassis that sits a couple inches or so above the chip. I know it’s not necessary, but if it won’t hurt it I’d like to put a heat sink on it just because this machine means very much to me and I’m doing a series of upgrades including even an SSD. Anyway,  I have never done this before so I’d like to ask a couple of honest questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Will it hurt the chip? I notice modern CPU’s have what looks like a thin metal plate that people put thermal paste onto when installing a heat sink, and this chip, just like the old 486’s does not. Is it ok to apply the compound directly to that beautiful dark grey chip surface?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Applying paste. Assuming it’s ok to directly apply, then I’m open to any advice on how for an old chip like this because I’ve looked at probably a dozen YouTube videos and most prefer the so called “pea method”, while others do that and demonstrate that it makes parts of the CPU hotter, because it doesn’t spread over the entire chip, yet spreading it with a card or something is dangerous, because it will sort of roll over the edge of the chip onto the board and cause damage. There are chipset heat sinks with thermal paste pads preinstalled where you just peel off the plastic or wax paper and then plop it right down on the CPU, but everything I’ve read about those says they’re junk.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15904" LastEditorUserId="535" LastEditDate="2019-12-30T14:20:47.950" LastActivityDate="2019-12-30T14:20:47.950" Title="Advice for heatsinking an old CPU" Tags="&lt;apple-macintosh&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13198" PostTypeId="2" ParentId="13197" CreationDate="2019-12-28T17:28:29.820" Score="10" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;No, it won't hurt it.  It's ceramic and you can stick a heatsink on it and it'll work.  It might discolour it a little.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The advice you've received is correct.  Thermal paste is usually electrically conductive, and it can cause short circuits and potentially cause damage that way, if it leaks over the edge.  Given that you don't need a heatsink in the first place, I'd recommend being conservative in applying thermal paste.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have to say though, it really is pointless.  A 68040 @ 33 MHz puts out less than 5 W of heat.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2019-12-28T17:28:29.820" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13200" PostTypeId="2" ParentId="13197" CreationDate="2019-12-28T19:07:26.137" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I’m refurbishing my middle school computer, a Macintosh Performa 635CD &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Cool. Eventually one the best 68k machine of all.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Will it hurt the chip?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If applied correctly not. Any increased cooling is welcome. Keep in mind that any heat spreader is at first an additional insulation, so its relative dissapation has to be higher than that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It it is always a good idea to keep temperature down to increase longevity of chips. While the 040 isn't as sensitive as faster CPUs. Its 6..10 Watt dissapation at 33 MHz may seam low, it does need cooling in every situation (well, maybe except mounted in a fridge :). For basic 6 Watt at room temperature (25 C) Motorola recommends an airflow of 250 &lt;a href=&quot;https://www.engineering.com/calculators/airflow.htm&quot; rel=&quot;noreferrer&quot;&gt;LFM&lt;/a&gt; or better. That's why Apple placed a fan right above the CPU. These 250 LFM are just enough to keep it within design limit, not optimal. So adding a heat sink will improve cooling considerable due the larger surface contact between airflow and heat sink.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, removed heat is a function of temperature difference, surface size and coolant (air) flow. By just adding a heat sink you improve only surface size. It might be a good idea to add on the air flow as well. So why not adding a CPU fan as well?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some old PC might be a good source for both.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Applying paste. Assuming it’s ok to directly apply, &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, and Motorola recommends it for not glued on heat sinks.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I’ve looked at probably a dozen youtube vids&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Don't let them scare you. Everything modern plays in a complete different league than a 040. If at all, you need to look at videos explaining the use with 486 and early Pentium - and I mean early real early.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;yet spreading it with a card or something is dangerous because it will sort of roll over the edge of the chip onto the board and cause damage.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Spreading with a straight object is not problem - and it's up to you to do it without making a mess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I usually put a little drop on, slightly out of center and used a razor blade to distribute it a bit. After that I put on the heat sink and turned it a bit sideways to really spread it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole point is to use as little as possible. The whole schmeer isn't meant to be anywhere between the heat sink and the packaging at all. It's only the lesser of two evils meant to fill only those areas were both parts don't align perfect as it's thermal conductivity is better than air.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There are chipset heatsinks with thermal paste pads [...] but everything I’ve read about those says they’re junk.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, they are good. In fact, most(default) cooler use them nowadays. They did win the race because of simplicity in setup. But as with all parts of the heat dissapation system, they are meant for a certain setup. Just picking a random one and using it may not be the best choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be a good idea to have a read of the &lt;a href=&quot;http://www.freescale.com/files/32bit/doc/ref_manual/M68040UM.pdf&quot; rel=&quot;noreferrer&quot;&gt;68040 User Manual&lt;/a&gt; section 11.8 &lt;em&gt;Thermal Characteristics&lt;/em&gt; and 11.9 &lt;em&gt;Thermal Management&lt;/em&gt;. They describe in great detail the various parameters. Section 11.9 not only discus various levels of cooling, but as well give tables for quick reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the tables adding a heat sink plus forced air (a reasonable sized fan) whill give quite great results and keep the gate temperature down.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Additional Musings:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As said, I belive the 630 to be one the greatest 68k Mac of all (*1). It can bring you quite close to the top performance possible back then while still being a quite compact desktop computer.  I got a 630 DOS on my workbench fo all things classic Mac and haven't found anything better. Depending on the mainboard it can hold up to 132 MiB of RAM - that's 4 MiB (the soldered on ones) more than the top of the line 840 AV (*2). Under classic OS 132 MiB is like infinite memory. At least I never managed to fill it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 630 can as well be fitted with a full 68040 to add an FPU and set to run at 40 MHz(!), again on par with the 840AV. Given, the disk system is a bit slower due using IDE, but as you already mentioned, it as well allows the use of a more modern Flash drive, flipping chart :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest to have a look into which board is used in your machine (while trying to max out RAM) to see how to turn the clockspeed to 40 MHz. Usually all 040 will go along. While this is as well possible without, it should go hand in hand with adding a heat sink &lt;em&gt;and&lt;/em&gt; CPU fan.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The best from today's view, might be the the &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_LC_475&quot; rel=&quot;noreferrer&quot;&gt;LC 475&lt;/a&gt; and its direct siblings. In RAM size and performance it's a 630 in a pizza case, missing the CD drive, but adding higher graphics resolution. Unlike the 630 it can still fit the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_IIe_Card&quot; rel=&quot;noreferrer&quot;&gt;IIe Card&lt;/a&gt; allowing it to double as a IIe as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Quadra 950 could do 256 MiB&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-28T23:01:21.527" LastActivityDate="2019-12-28T23:01:21.527" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13201" PostTypeId="1" AcceptedAnswerId="13203" CreationDate="2019-12-29T08:02:35.920" Score="12" ViewCount="789" Body="&lt;p&gt;So I've been whiling away some of a quiet Saturday night reading up on an early eighties computer called the Oric-1, which seems to be a curious little machine that has been largely unsung; moderately successful in its day according to the sales figures I'm seeing here, I never actually got to see one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Oric&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Oric&lt;/a&gt; makes the following curious remark:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Oric-1 improved somewhat over the ZX Spectrum's unusual chiclet keyboard.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As far as I can see in e.g. the photograph on that very page, the Oric-1 has a chiclet keyboard essentially equivalent to the ZX Spectrum. (Well, made of plastic rather than rubber? I would expect that to make either no difference or a slightly negative one.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did it actually improve on the Spectrum's keyboard? If so, how?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2019-12-29T08:28:09.337" LastActivityDate="2020-01-21T22:04:03.900" Title="Did the Oric-1 improve on the Spectrum's keyboard?" Tags="&lt;history&gt;&lt;zx-spectrum&gt;&lt;keyboards&gt;&lt;membrane-keyboard&gt;&lt;oric&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13202" PostTypeId="2" ParentId="13190" CreationDate="2019-12-29T14:34:43.673" Score="5" Body="&lt;p&gt;The hex codes are OK, but it is compiled for using from address 7F00h (32512). You have two options:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Option 1 - change the address:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Add line&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;5 CLEAR 32511&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Change line 10 to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR I=32512 TO 32767&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Input your numbers and use RANDOMIZE USR 32512&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Option 2 - change the routine itself as &quot;Raffzahn&quot; described. (17 14 127 change to 17 149 255)&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-29T14:34:43.673" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13203" PostTypeId="2" ParentId="13201" CreationDate="2019-12-29T15:10:04.890" Score="12" Body="&lt;p&gt;Having both an Oric Atmos and both a rubber Keyed and later plus Spectrum I can tell you the the Oric keyboard is vastly superior with a  firm and positive action to each key. The feel of the keyboard is not too far off the feel of a CBM 16 or 64 but not as good as the Acorn range .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Oric physical size is also similar to the rubber keyed Spectrum too , the former is a little bit larger. Myself I always considered the Oric a &quot;6502 based Speccy&quot; although it's release was relatively erm &quot;late to the party&quot; compared to other 8bit machines at least in the U.K. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Want to mention too that I have owned and used Spectrums since 1984 although the Oric I have only had a few months.&lt;/p&gt;&#xA;" OwnerUserId="15907" LastEditorUserId="3316" LastEditDate="2020-01-21T22:04:03.900" LastActivityDate="2020-01-21T22:04:03.900" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13204" PostTypeId="2" ParentId="13201" CreationDate="2019-12-29T16:25:38.627" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;The Oric-1 improved somewhat over the ZX Spectrum's unusual chiclet keyboard.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I guess the keyword too look for is &lt;em&gt;&quot;somewhat&quot;&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did it actually improve on the Spectrum's keyboard? If so, how?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, much the way you already mentioned by having hard plastic caps instead of those rubbers. It gives a better feeling about pressing a key or not as all feedback comes from the mechanic, not the squishy keycap.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I would expect that to make either no difference or a slightly negative one.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It does, and it's a positive one. The same reason the Spectrum+ got a better feeling than the original one - if it wouldn't be for the lousy membrane they used with the plus.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2019-12-29T16:25:38.627" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13205" PostTypeId="2" ParentId="13141" CreationDate="2019-12-29T16:32:52.743" Score="4" Body="&lt;p&gt;It was a vague anti tampering thing although there was no sane excuse not to have had a tiny piece of regular Basic before it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In most tapes using this &quot;code loading&quot; the actual code is usually only a few hundred bytes. It is actually just the system variables area and the Basic itself so it auto runs similar to Basic . The main erm advantages of a code like this was you could not easily &quot;merge&quot; it to prevent it auto running and because it had the system vars in it , various &quot;pokes&quot; could be applied before saving it too giving it an added layer of protection. Even back then it was trivial to defeat though .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't go into huge detail now but on a generic level saving a small Basic program can be done with CODE 23550, length . Getting the accurate length requires a calculation I have but not in my head . 500 will suffice if it's only a few statements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is very important to note that the Save  ommand for the code itself -must- be followed immediatey by the next command on the same line as when the code is loaded back in it will carry on from there . The easy way to do this is to have the first Basic program line being the actual save ( say line 10 for example ) then the rest of the Basic would start at line 20 . This way when it is loaded back having been saved as code the save has been already executed and the next line to deal with is 20 .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that does not make a huge deal of s sense try thinking of the small piece of code as a snapshot, although technically it is not it can help explain it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not immediately aware of this method working on other machines although lack of detailed knowledge of other platforms likely explains that.&lt;/p&gt;&#xA;" OwnerUserId="15907" LastActivityDate="2019-12-29T16:32:52.743" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13206" PostTypeId="5" CreationDate="2019-12-29T19:49:38.983" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-12-29T19:49:38.983" LastActivityDate="2019-12-29T19:49:38.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13207" PostTypeId="4" CreationDate="2019-12-29T19:49:38.983" Score="0" Body="Computers manufactured by Tangerine Computer Systems, namely Oric-1, Atmos, Stratos, Telestrat. This tag is suitable for Bulgarian Pravetz 8D (an Atmos clone)." OwnerUserId="11446" LastEditorUserId="15334" LastEditDate="2021-03-14T10:50:49.690" LastActivityDate="2021-03-14T10:50:49.690" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13208" PostTypeId="1" AcceptedAnswerId="13213" CreationDate="2019-12-29T20:18:25.330" Score="29" ViewCount="5242" Body="&lt;p&gt;The Sinclair ZX80 used a Z80A running at 3.25 MHz. But this chip was rated for 4 MHz. Why was it run below rated speed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently the master clock in the machine ran at 6.5 MHz, so the CPU clock ran at half that, but that just rephrases the question; why not run the master clock at 8 MHz? The CPU and video generation were linked, but that just means a higher frequency would produce a higher horizontal resolution, which seems harmless; it was a black-and-white machine, so it's not like the Atari 800 where the color burst frequency was an external reference standard that had to be taken into account.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-12-31T03:55:11.030" Title="Why did the ZX80 CPU run at only 3.25 MHz?" Tags="&lt;hardware&gt;&lt;sinclair&gt;&lt;zx80&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13209" PostTypeId="1" AcceptedAnswerId="13224" CreationDate="2019-12-29T21:41:00.160" Score="0" ViewCount="231" Body="&lt;p&gt;The motherboard of the IBM PC 5150 has labels of letters followed by numbers. What are the letters representing? Examples being U1, P1, C1, T1 and Y1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to ascertain which component is the crystal oscillator connected to the Intel 8284, so am particularly interested in the T1 and Y1 labels. There is also a C.ADJ label above T1, does this represent &quot;clock adjust&quot;?&lt;/p&gt;&#xA;" OwnerUserId="15219" LastActivityDate="2019-12-31T09:10:54.080" Title="IBM PC 5150 motherboard labelling" Tags="&lt;ibm-pc&gt;&lt;motherboard&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13210" PostTypeId="2" ParentId="13208" CreationDate="2019-12-29T21:48:01.143" Score="7" Body="&lt;p&gt;The usual answer to questions on early Sinclair machines is &quot;Because it was cheaper that way.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, a 40-column screen, implied by 4MHz, would have increased the screen buffer size to at least 960 bytes, leaving only 64 bytes for BASIC code. Increasing the RAM size would have raised the price point, and &quot;Under £100&quot; was crucial to the early success of the machine. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2019-12-29T21:48:01.143" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13211" PostTypeId="1" AcceptedAnswerId="13215" CreationDate="2019-12-29T21:49:57.380" Score="2" ViewCount="156" Body="&lt;p&gt;The ZX80 only came with 1K of RAM, which had to be shared between program and screen memory, so many customers bought the Sinclair 16K RAM pack, which plugged into the expansion bus (the edge connector at the back, that basically allowed access to the system address and data lines).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The expansion bus was also used for connecting peripherals such as the Sinclair spark printer, and third-party disk drives and joysticks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How was it possible to use peripherals and the RAM pack at the same time? Did one or the other have a pass-through for the expansion bus?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-06T13:28:11.667" Title="Did the ZX80 RAM pack pass the expansion bus through?" Tags="&lt;hardware&gt;&lt;sinclair&gt;&lt;zx81&gt;&lt;zx80&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13212" PostTypeId="2" ParentId="13209" CreationDate="2019-12-29T22:08:20.160" Score="2" Body="&lt;p&gt;AFAIK there is just one 14.318MHz crystal (not an oscillator) on the 5150 motherboard, right next to the 8284. It’s a flat metal component with two leads coming out of it from one side, probably marked with 14.318MHz. There might be a solid wire soldered to its housing, going across it. I’m pretty sure it was labeled as Y1 on the PCB.&lt;/p&gt;&#xA;" OwnerUserId="15545" LastEditorUserId="15545" LastEditDate="2019-12-29T22:13:56.127" LastActivityDate="2019-12-29T22:13:56.127" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13213" PostTypeId="2" ParentId="13208" CreationDate="2019-12-29T22:36:41.560" Score="45" Body="&lt;h1&gt;TL;DR&lt;/h1&gt;&#xA;&lt;p&gt;Because it needs the least chip count and thus makes it the cheapest. It's a Sinclair.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Full Story:&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Sinclair ZX80 used a Z80A running at 3.25 MHz. But this chip was rated for 4 MHz. Why was it run below rated speed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And the chip would have run for sure at more than 4 MHz. A computer design isn't about what a chip is rated, but what it's for.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;why not run the master clock at 8 MHz? The CPU and video generation were linked, but that just means a higher frequency would produce a higher horizontal resolution,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure, but clocking it at 8 MHz wouldn't have generated any gain for its designer, but acted against their goals. It's not about a single frequency, but, like any design, about finding a sweet spot between various goals. While there are many possible combinations, the &lt;strong&gt;absolute imperative for the ZX80 was to be cheap&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Speed was of no concern at all. There were other successful home computers with way lower clock speeds than 3.25 MHz (*1).&lt;/p&gt;&#xA;&lt;p&gt;Main lever to lower cost is the number of gates. For the ZX80/81 a combination of line length, character per row, and pixels per character defined a sweet spot for hardware needed. By using parts of the CPU with as little external logic as possible to handle video generation, these add up to what resolution is to be used. &lt;em&gt;For Details see below.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Atari 800 where the color burst frequency was an external reference standard that had to be taken into account.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The colour burst frequency is irrelevant for the workings of the Atari. It's the same with the ZX80. Using a single clock source for several issues keeps cost down and a colour burst frequency is needed anyway.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;The Details:&lt;/h1&gt;&#xA;&lt;h2&gt;How it works&lt;/h2&gt;&#xA;&lt;p&gt;Since we're talking about TV, all we need to look at is a single line - and the way the hardware is used to generate it. So, let's take a first look at how a line is generated:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;At the beginning of a line the refresh counter is cleared (*2).&lt;/li&gt;&#xA;&lt;li&gt;Each character to be displayed is read from RAM like an instruction.&lt;/li&gt;&#xA;&lt;li&gt;The lower 6 bits are used to load a bit image from ROM during the refresh cycle (T3/T4).&lt;/li&gt;&#xA;&lt;li&gt;The value read is outputted via a shift register as 8 pixels at double the CPU clock&lt;/li&gt;&#xA;&lt;li&gt;The CPU gets fed a NOP instead.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;A single byte NOP instruction takes 4 clocks.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Each single byte instruction contains one refresh cycle&lt;/li&gt;&#xA;&lt;li&gt;The refresh counter is incremented during each refresh cycle by one&lt;/li&gt;&#xA;&lt;li&gt;When the &lt;strong&gt;refresh counter reaches 32&lt;/strong&gt; it spills over to bit 6&lt;/li&gt;&#xA;&lt;li&gt;Bit 6 of the refresh counter issues an interrupt ending line generation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So the CPU timing for the visible part of a line consists of 32 characters each handled in 4 CPU clocks each or 128 clocks in total.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;These 128 clocks need to happen within the visible part.&lt;/li&gt;&#xA;&lt;li&gt;The (maximum) visible part of a line is ~52 µs.&lt;/li&gt;&#xA;&lt;li&gt;It's safe to leave at least 10% on each side to make sure it's well within any TV, including rather misaligned ones (*3).&lt;/li&gt;&#xA;&lt;li&gt;As a result some ~40 µs is what line data should take (*4).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This means to deliver this, the CPU clock cycle should take &lt;strong&gt;40 µs / 128 = 0,3125 µs&lt;/strong&gt;  or &lt;strong&gt;3.2 MHz&lt;/strong&gt;. 3.25 looks close, doesn't it?&lt;/p&gt;&#xA;&lt;h2&gt;What to do&lt;/h2&gt;&#xA;&lt;h3&gt;Using the same hardware&lt;/h3&gt;&#xA;&lt;p&gt;One way to increase resolution would be outputting more characters per line (*5). Without adding more hardware, the next higher number per line would be 64, by taping bit 7 of the refresh counter. Now, while a TV in theory could handle this fine (*6), it would need doubling the clock frequency to 6.4 MHz. The CPU may in fact still go along, but ROM and RAM most definitely not. So, even with widening the used time, which would generate other issues in line timing, it's not really possible to get it much below 5.5 MHz (*7).&lt;/p&gt;&#xA;&lt;p&gt;With the modulator used, the display would be hard to distinguish from static noise.&lt;/p&gt;&#xA;&lt;h3&gt;Modifying the hardware&lt;/h3&gt;&#xA;&lt;p&gt;Of course it is always possible to throw more hardware at the problem. So for example another gate to combine two bits of the refresh counter to detect line end. This would allow line length of 34, 36, 40 or 48 characters per line. By keeping the 40 µs limit, this results in clock frequencies of 3.4, 2.6, 4.0 or 4.8 MHz.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;So yes, it would work as you imagine, 40 characters and 4 MHz&lt;/strong&gt;, but it means an additional AND gate would be needed - since there is no unused one on the ZX80 board, this means a whole chip to be added. Not very Sinclair like.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - For example the &lt;a href=&quot;https://en.wikipedia.org/wiki/KC_85&quot; rel=&quot;noreferrer&quot;&gt;KC85&lt;/a&gt; using a Z80 at 1,75 MHz or &lt;a href=&quot;https://en.wikipedia.org/wiki/PMD_85&quot; rel=&quot;noreferrer&quot;&gt;PMD 85&lt;/a&gt; with an 8080 at 2 MHz&lt;/p&gt;&#xA;&lt;p&gt;*2 - That's why the refresh counter can not be used for RAM refresh.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Aka text safe area.&lt;/p&gt;&#xA;&lt;p&gt;*4 - AFAIR the real ZX80 uses ~37 µs, but as you'll see, 40 will give nice numbers allowing to do the math without a calculator.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Somewhat frivolous on a computer with just 1 KiB.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Assuming a good quality signal transmission.&lt;/p&gt;&#xA;&lt;p&gt;*7 - Like using 46 µs of the line will result in 46 µs/256=0,18 µs or 5.55 MHz&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2019-12-31T03:55:11.030" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="13214" PostTypeId="2" ParentId="11286" CreationDate="2019-12-29T22:37:51.043" Score="0" Body="&lt;p&gt;&lt;strong&gt;MERGE and the Cassette Buffer File/Tape Buffer&lt;/strong&gt;&lt;br&gt;&#xA;Many or most versions of BASIC on these machines would have had a &quot;Cassette Buffer File/Tape Buffer&quot;, and many would also have had a command like MERGE .&lt;br&gt;&#xA;.   .  .So maybe  the commands  &lt;code&gt;OPEN &quot;CAS: PROGRAM&quot; FOR OUTPUT AS #1&lt;/code&gt; and &lt;code&gt;PRINT #1,&quot;10 PRINT 1&quot;&lt;/code&gt;or one of the &lt;code&gt;Save to Cassette&lt;/code&gt; commands could write a program line ( or short program ) to that &quot;Cassette Buffer File/Tape Buffer&quot;, and then using the MERGE command to put( or replace ) a line in the main current program with what is in the tape buffer.&lt;br&gt;&#xA;  . . . NOTE - Obviously I mean using the tape buffer without even needing to plug in a tape-machine .&lt;br&gt;&#xA;( Interestingly, some programs for the c-64 were stored on and ran from the &quot;Cassette Buffer File/Tape Buffer&quot; . )  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;AUTO&lt;/strong&gt;&lt;br&gt;&#xA;GW-BASIC and others had a command like AUTO which generates new line numbers ( so you don't have to type them ), but I don't know if it could be used from a program.&lt;br&gt;&#xA;.   .If AUTO would function from a program,  then maybe lines could be replaced or added ( using AUTO and the PRINT command to enter text and ENTER )     &lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE -  I posted another question at the same time as this one asking how many programs could be on these machines at the same time / concurrently,  and one of the answers would have been identical to this answer I have posted (  although at the time I either just wasn't fully believing that tape-buffers etc existed, or wondered if it worked another way  ).  Unfortunately the other question I posted has been totally deleted of this site, not by me,  I would be happy to delete my answer,  maybe an issue for admin&lt;/p&gt;&#xA;" OwnerUserId="11744" LastEditorUserId="11744" LastEditDate="2020-01-01T18:12:46.670" LastActivityDate="2020-01-01T18:12:46.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13215" PostTypeId="2" ParentId="13211" CreationDate="2019-12-29T22:49:14.077" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did one or the other have a pass-through for the expansion bus?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There was no other peripheral (by Sinclair) for the ZX80 than the 1..3 KiB static RAM or the later 16 KiB DRAM version (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most (*2) third party vendors made theirs offering a pass-through.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did one or the other have a pass-through for the expansion bus?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;When the ZX-Printer came for the ZX81 (*3), it had a pass-through and was meant to be plugged before the RAM-Pack.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The only other &quot;expansion&quot; Sinclair ever offered for the ZX80 was the ROM Update to turn it into a (FAST only) ZX81.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - I own at least two different I/O expansions without. I'm still puzzled what they expected users to do with an I/O port and not enough RAM for even the most simple program using it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Usable with the ZX80 with ROM-update installed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2020-01-06T13:28:11.667" LastActivityDate="2020-01-06T13:28:11.667" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13216" PostTypeId="2" ParentId="13208" CreationDate="2019-12-30T00:00:26.393" Score="6" Body="&lt;p&gt;Answering your rephrased question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The master clock could have run at 8 MHz, but that would have meant pixels being narrower than if generated by a 6.5 MHz clock. As the computer was built with a horizontal resolution of 256 pixels in mind (the time spent by 32 NOP instructions), the border area would have been enlarged, resulting in a smaller display. Besides, running the CPU at its highest clock rate may introduce spurious errors, so Sinclair opted for leaving a security margin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take into account that, for cost reasons, the ZX80 doesn't have any buffers on the CPU lines. Being an NMOS device, the faster you operate it (without buffers), the uglier and less squared signals come from it, compromising the reliability of the computer.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="4921" LastEditDate="2019-12-30T00:45:02.290" LastActivityDate="2019-12-30T00:45:02.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13218" PostTypeId="1" AcceptedAnswerId="13220" CreationDate="2019-12-30T10:18:37.830" Score="4" ViewCount="1166" Body="&lt;p&gt;I've read about the Z80 interrupt priority daisy chain and it hasn't answered my question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When using interrupt mode 2, the Z80 needs to form a 16-bit address for an interrupt service routine. The most significant 8 address bits come from the I register and bits 1-7 come from the interrupting device. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm assuming to get those bits from the interrupting device the Z80 needs to execute an IN A,(*) instruction (or other input instruction)? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it executes that IN instruction, what gets put on the address bus for bits A0-A7? The interrupt enable daisy chain by itself doesn't seem sufficient to select the correct interrupting IO device, especially if address bits are used for chip enable logic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If each IO device in the interrupt priority daisy chain has its own address, then the CPU can only fetch a vector from one of them at a time anyways, regardless of the priority of any particular device in the daisy chain. If the CPU doesn't put a valid address on the address bus, none of those devices would be selected anyways via the chip enable address bits. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some reason, I can't find this specific point addressed in any of the Zilog documents. Does anybody know?&lt;/p&gt;&#xA;" OwnerUserId="15910" LastEditorUserId="11446" LastEditDate="2019-12-30T11:54:59.470" LastActivityDate="2019-12-30T17:37:17.847" Title="Z80 Interrupt Mode 2 - How does the CPU know the device address of the interrupting device to execute IN A,(*)?" Tags="&lt;z80&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13219" PostTypeId="2" ParentId="13218" CreationDate="2019-12-30T11:29:11.967" Score="7" Body="&lt;p&gt;No it does not execute any separate instruction to fetch the interrupt vector, but the CPU generates a special interrupt acknowledge bus cycle and during this cycle the interrupting device places the interrupt vector on data bus. That is then combined with I register to use it as an address from where to fetch the address to jump to.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2019-12-30T11:29:11.967" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13220" PostTypeId="2" ParentId="13218" CreationDate="2019-12-30T13:27:43.960" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So I'm assuming to get those bits from the interrupting device the Z80 needs to execute an IN A,(*) instruction (or other input instruction)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;[I assume the IN instruction mentioned is just meant as a place holder for an internal way to fetch the vector]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a special bus transaction to fetch the vector, the &lt;em&gt;Interrupt Response Cycle&lt;/em&gt;, as shown here from the 2004 CPU Manual:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cUupi.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cUupi.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This cycle is marked by being an M1 cycle (&lt;code&gt;/M1&lt;/code&gt; asserted) but with IO-Request (&lt;code&gt;/IORQ&lt;/code&gt;) asserted instead of Memory-Request (&lt;code&gt;/MREQ&lt;/code&gt;). This happens during two additional cycles between T2 and T3 of the Interrupt Response (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During this condition the interrupting device has to put out the desired vector number on D0..7.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When it executes that IN instruction, what gets put on the address bus for bits A0-A7? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nothing, as there is no 'real' I/O addressing (*2). The combination of &lt;code&gt;/M1&lt;/code&gt; and &lt;code&gt;/IORQ&lt;/code&gt; does the 'addressing'.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The interrupt enable daisy chain by itself doesn't seem sufficient to select the correct interrupting IO device, especially if address bits are used for chip enable logic.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Or course it can. After all, it's the whole purpose of the chain to determinate who is allowed to interrupt. A device issuing an interrupt 'knows' that it did so as it was pulling &lt;code&gt;/INT&lt;/code&gt; without any higher priorized device disabling it. So when the Interrupt Response comes around, it can put its vector on the bus.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For some reason, I can't find this specific point addressed in any of the Zilog documents.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Please see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;P.20 in the 1984 &lt;em&gt;Z80®Family Product Specifications Handbook&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;P.13/14 and 17..20 in the &lt;a href=&quot;http://www.z80.info/zip/z80cpu_um.pdf&quot; rel=&quot;noreferrer&quot;&gt;2016 &lt;em&gt;Z80 Family CPU User Manual&lt;/em&gt; (UM008004-1204)&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - While the documentation calls them wait states (Tw), they are in fact a different kind of T state i'd like ti call &lt;em&gt;Ti&lt;/em&gt;. Regular wait states extend the T2 signalling without any other action, effectively halting the CPU. In contrast, the signalling changes during the first Ti state as &lt;code&gt;/IORQ&lt;/code&gt; gets assigned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - To be correct, there is still the address of the instruction that would have been executed on A0..15. An arbitrary value with no meaning for I/O.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-30T17:37:17.847" LastActivityDate="2019-12-30T17:37:17.847" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13221" PostTypeId="1" AcceptedAnswerId="13223" CreationDate="2019-12-30T15:18:49.467" Score="2" ViewCount="995" Body="&lt;p&gt;For a concrete example, take the Vic-20. It is well documented that the 6560/6561 Video Interface Chip was also responsible for sound generation, having three voices and one noise generator. The pinout of this chip has one pin marked 'sound' which is presumably an analog signal that gets transmitted along with the video output to the circuitry that combines them into an RF signal for transmission to a TV set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What components exactly are required for handling sound, not in the chip, but between the chip and the TV set? Would these be the same in any early home computer that provided TV output?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2019-12-31T15:02:51.983" Title="What is the analog component of sound output in an early home computer?" Tags="&lt;hardware&gt;&lt;sound&gt;" AnswerCount="4" CommentCount="5" ClosedDate="2019-12-31T22:39:52.540" ContentLicense="CC BY-SA 4.0" />
  <row Id="13222" PostTypeId="2" ParentId="13221" CreationDate="2019-12-30T16:27:50.620" Score="4" Body="&lt;p&gt;This doesn't answer the question regarding circuit implementation, but the Wikipedia articles on &lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=NTSC&amp;amp;oldid=931043629#Transmission_modulation_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;NTSC&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=Broadcast_television_systems&amp;amp;oldid=925150326#Audio&quot; rel=&quot;nofollow noreferrer&quot;&gt;Broadcast televistion systems&lt;/a&gt; have some relevant background, at least for NTSC used in the US. It's possible that PAL differed or that there were variations to NTSC for other countries, so if one of those is your primary interest please update your question to clarify.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RF signal coming out of the computer is the same as would be used to broadcast from a station antenna, only much much weaker. Or better to say: the computer's output signal is like what the television would &lt;em&gt;receive&lt;/em&gt; from a nearby television station if it were broadcasting on Channel 3 or Channel 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The audio signal modulates the frequency of a separate carrier near the video channel. In other words, the circuit would be that of an FM transmitter for a frequency offset from the channel 3/4 video frequency. Specifically, the audio broadcast for Channel 3 is &lt;code&gt;61.25 MHz + 4.5 MHz = 65.75 MHz&lt;/code&gt; and for Channel 4 the FM signal is at 71.75 MHz (up 4.5 MHz from the 67.25 MHz AM video carrier).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These frequencies are within the &lt;a href=&quot;https://en.wikipedia.org/wiki/Very_high_frequency&quot; rel=&quot;nofollow noreferrer&quot;&gt;VHF&lt;/a&gt; radio band. Any FM transmitter circuit for VHF or higher frequencies should be ± suitable, and may be more in scope for the Electronics or Amateur Radio SE sites. See e.g. &lt;a href=&quot;https://ham.stackexchange.com/questions/3639/simple-fm-low-power-uhf-transmitter-circuit&quot;&gt;https://ham.stackexchange.com/questions/3639/simple-fm-low-power-uhf-transmitter-circuit&lt;/a&gt; and &lt;a href=&quot;https://electronics.stackexchange.com/questions/408644/need-help-understanding-simple-fm-transmitter&quot;&gt;https://electronics.stackexchange.com/questions/408644/need-help-understanding-simple-fm-transmitter&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There may have been a fairly standard implementation used across home computers but I'll leave that to other posters if so. There are a number of pictures of &lt;a href=&quot;https://wikivisually.com/wiki/RF_modulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;RF modulator circuits&lt;/a&gt; on that article I found via a page on the &lt;a href=&quot;https://wikivisually.com/wiki/Sup%27R%27Mod&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sup'R'Mod&lt;/a&gt; modulator.&lt;/p&gt;&#xA;" OwnerUserId="13904" LastActivityDate="2019-12-30T16:27:50.620" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13223" PostTypeId="2" ParentId="13221" CreationDate="2019-12-30T16:47:36.123" Score="5" Body="&lt;p&gt;The VIC-20 video interface (&lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_VIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;MOSTEK 6560 / 6561&lt;/a&gt;) had 3 outputs of interest here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Audio&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Video&lt;/strong&gt; which was output as Y/C (&lt;a href=&quot;https://en.wikipedia.org/wiki/S-Video&quot; rel=&quot;nofollow noreferrer&quot;&gt;S video&lt;/a&gt;); the S-video was converted to &lt;a href=&quot;https://en.wikipedia.org/wiki/Composite_video&quot; rel=&quot;nofollow noreferrer&quot;&gt;composite video&lt;/a&gt; as shown below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Om448.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Om448.png&quot; alt=&quot;VIC 20 S video to composite video&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://blog.tynemouthsoftware.co.uk/2019/09/how-the-vic20-works.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These 2 signals (composite video and audio) ended up on the 5 contact &lt;a href=&quot;http://www.hardwarebook.info/VIC-20_Video&quot; rel=&quot;nofollow noreferrer&quot;&gt;DIN connector&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To connect to a TV, an external &lt;a href=&quot;https://www.retrogames.co.uk/000933/Commodore/Vic-20-RF-Modulator-Box&quot; rel=&quot;nofollow noreferrer&quot;&gt;RF modulator&lt;/a&gt; was required and this was fairly common for the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are plenty of schematics around if you do a quick search.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference between the 6560 and 6561 is that one is for PAL and the other for NTSC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sound output is passed through a &lt;a href=&quot;https://en.wikipedia.org/wiki/Low-pass_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;passive low pass filter&lt;/a&gt; (-3dB at ~ 1.6kHz to probably prevent high frequency artifacts from the sound generation circuitry being heard) and buffered through an &lt;a href=&quot;https://electronics.stackexchange.com/questions/74563/emitter-follower&quot;&gt;emitter follower&lt;/a&gt; (which presents a low impedance source to the output).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The video is also buffered (emitter follower) and has plenty of base drive to ensure a clean output (the output at the connector for zero video is about 2.4V which will be the sync level; the black level for standard composite video would therefore be about 2.7V)&lt;/p&gt;&#xA;" OwnerUserId="4480" LastEditorUserId="4480" LastEditDate="2019-12-31T15:02:51.983" LastActivityDate="2019-12-31T15:02:51.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13224" PostTypeId="2" ParentId="13209" CreationDate="2019-12-30T17:20:29.033" Score="0" Body="&lt;p&gt;&quot;C.ADJ&quot; represents &quot;&lt;a href=&quot;http://www.minuszerodegrees.net/5150/misc/5150_motherboard_switch_settings.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Color Adjust&lt;/a&gt;&quot; - the 14.318MHz signal is used to derive the NTSC clock for the CGA card, so adjusting the trimmer affects the colours that appear if the composite output jack is in use.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="1912" LastEditDate="2019-12-31T09:10:54.080" LastActivityDate="2019-12-31T09:10:54.080" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13225" PostTypeId="1" CreationDate="2019-12-30T19:31:24.557" Score="3" ViewCount="484" Body="&lt;p&gt;Using &amp;amp; Programming the Epson HX-20 Portable Computer by Eric Balkan has a tantalising passage on p. 172*:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;T.L. Ronson of the HX-20 User's Group also notes that a monochrome monitor can be hooked directly to the RS-232 port of the HX-20. Contact him for details.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As Balkan's book was published in 1985, it is hardly surprising that Ronson's way of doing this seems lost to posterity. But I wonder if anyone else has tried and succeeded at something similar, or might have enough understanding of what an RS-232 port is capable of in general, or the HX-20 in particular to be able to say how a monochrome monitor connected to an RS-232 port might be coaxed into working as a display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds like it can be done 'directly' (ie with a single cable?), though I imagine some code would be necessary to get it to work (the HX-20 allows direct machine code input via its own Monitor function).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For clarity, I am not talking about using the official serial-to-PAL adapter box (the display controller), or the one made by the company Oval, and is described on pp.171-172 immediately preceding this passage, but am interested in Ronson's &quot;hack&quot; to connect a monochrome monitor to RS-232. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have experimented by connecting a DIN cable I have, which I use to connect my Soviet ZX Spectrum clone and my Elektronika BK-0010-01 to my monochrome Elektronika MC-6105-01 monitor, I know that only two of the five DIN pins of that 5-pin DIN connector are used to connect to the monitor. Once connected I tried each of the following commands on the HX-20:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SCREEN 0,1&#xA;SCREEN 0,2&#xA;SCREEN 1,0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(These are supposed to display text and graphics on the internal and external displays in different combinations).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For each command, my monochrome monitor did react, briefly turning on the screen to display greyish flickering, before switching off again, at which point the HX-20 threw:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DU Error&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;About which the manual says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;DU: Device unavailable. A device which is not connected to the HX-20 is specified.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But the reaction of the monitor to try to display something gives me some hope that communication between the RS232 and monitor might actually be possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be of interest to note that the HX-20 RS-232 port is an 8 pin DIN, mapped to RS-232 &lt;a href=&quot;https://i.stack.imgur.com/cyeVO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;like so.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;* This passage comes right after a description of the official serial-to-PAL converter, so it does not reference that device, but is given as an alternative. &lt;/p&gt;&#xA;" OwnerUserId="8072" LastEditorUserId="8072" LastEditDate="2019-12-31T06:03:31.513" LastActivityDate="2021-04-17T22:17:13.477" Title="How to connect an HX-20 to a monitor via the RS232 port?" Tags="&lt;crt-monitor&gt;&lt;rs232&gt;&lt;hx-20&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13226" PostTypeId="2" ParentId="13221" CreationDate="2019-12-30T20:40:23.457" Score="4" Body="&lt;p&gt;The BBC Micro simply led the sound output to an internal speaker.  On the &lt;a href=&quot;http://mdfs.net/Info/Comp/BBC/Circuits/BBC/bbc.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;circuit diagram&lt;/a&gt;, the output of the 76489 sound chip and the optional TMS5220 speech synthesiser are mixed, low-pass filtered and amplified through a series of ordinary op-amp based circuits.  There is also a take-off, just before the final amplifier, to an external output jack.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2019-12-30T20:40:23.457" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13227" PostTypeId="2" ParentId="13225" CreationDate="2019-12-30T21:03:57.533" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It sounds like it can be done 'directly'&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it can not. The interface hardware is not able to generate a valid TV signal.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;The RS232C port&lt;/em&gt; is a true RS232C operating as positive and negative voltage. &lt;strong&gt;The HX20 uses +8/-8 Volt level&lt;/strong&gt; (*1). Voltage is generated by a TL479 step-up/down converter and used to feed the 75188 line drivers. This Voltage is way outside the allowed range of 0..1V for a &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Composite_Video.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;composite signal&lt;/a&gt; (0V for sync; 0.3V for black; 1V for white).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;The SERIAL bus port&lt;/em&gt; does as well use levels of +8/-8 Volt. In addition is this bus not only used for external devices, but also for communication between master and slave CPU (in this case TTL level is used). Even without the voltage issue, using it to generate a different signal would render everything handled by the slave CPU inoperational.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Beside all the technical reason, what reason should Epson have go the length of developing a display controller (and Epson UK offering a third party controller), if everything needed is already build in?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13225/how-to-connect-an-hx-20-to-a-monitor-via-the-rs232-port#comment41905_13225&quot;&gt;Ross Ridge already mentioned&lt;/a&gt;, this most likely references to the H00DC-IA Display Controller Epson offered:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LIzHg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LIzHg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Display Controller is a box about 5x15x25 cm in size with connectors for power, Serial Bus, Composite Out and TV out. It is a genuine Epson product, not to be mixed up with the Oval HO-20 sold in the UK (see below). It outputs a 60 Hz NTSC compatible signal. The hardware is based on a (nother) 6301 CPU with a 6847 VDG, 2 KiB of Video RAM and a 4 KiB character ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller is connected via the 5-pin SERIAL bus, which it could share with a floppy drive named &lt;a href=&quot;https://fjkraan.home.xs4all.nl/comp/tf20/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;TF-20&lt;/a&gt; (5.25&quot;; 320 KiB; CP/M format). See page 65 of the &lt;a href=&quot;https://files.support.epson.com/pdf/hx20__/hx20__u1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual&lt;/a&gt;. I have no idea if there were other devices for the HX-20, but the bus is compatible with the PX-4/8 SERIAL (both can use the TF-20) which had printers supporting this &lt;a href=&quot;https://fjkraan.home.xs4all.nl/comp/hx20/epsp.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;protocol&lt;/a&gt; (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The serial bus is looped thru the devices and operates at 38,400 bps. The connector is a &lt;a href=&quot;https://en.wikipedia.org/wiki/DIN_connector&quot; rel=&quot;nofollow noreferrer&quot;&gt;5/180° DIN&lt;/a&gt; like used for PC keyboards or MIDI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pinout:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 - GND&#xA;2 - TX&#xA;3 - RX&#xA;4 - POUT&#xA;5 - PIN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Caution, on this connector pins are not numbered in sequence but as 1, 4, 2, 5, 3, when looking at the pins, notch at the top)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PIN/POUT are used as handshaking to define who's talking. AFAIK it's not used - in fact, the Display Controller does not forward PIN from a subsequent device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside original controller, there were as well compatible third party products, like the &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/epson/brochures/EpsonColurDisplay%20ControllerForHX20.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oval HO-80&lt;/a&gt; which was even sold by EPSON UK. Unlike the Epson product can it produce 50 Hz frames as well as PAL modulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0yUK6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0yUK6.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software wise they are compatible, but the HO-20 seams to offer additional modes for higher resolution as well, as I found a a note in one of the marketing brochures, but no further data.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The well known &lt;a href=&quot;http://members.aon.at/nkehrer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Norbert Kehrer&lt;/a&gt; did develop a quite useful emulation of setup of 4 drives and a display controller under Windows called &lt;a href=&quot;http://members.aon.at/nkehrer/flashx20.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;FLASHX20&lt;/a&gt;. One rather great feature is that all access is done on logic level. Files are not managed in any special format, but as regular files on your disk drive. THere is a directory for each of the four emulated drives. Copying to a HX-20 'disk' (or back) is done by simply moving it into the directory. A RasPI based Linux version is announced, which would allow creating a handy storage and display box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another &lt;a href=&quot;http://mh-aerotools.de/hp/hx-20/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-based emulation&lt;/a&gt; was created by &lt;a href=&quot;http://mh-aerotools.de/hp/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Martin Hepperle&lt;/a&gt; about a year ago.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Similar interesting, albeit older is the (DOS) program called &lt;a href=&quot;https://fjkraan.home.xs4all.nl/comp/px8/px8vfs/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PX8VFS&lt;/a&gt; which emulates a set of compatible disk drives which should as well work with the HX20.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - RS232C asks for 3 Volt minimum and 25 Volt maximum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - The PX-4/8 had quite a lot of peripherals like TF-15 5.25 dual floppy, &lt;a href=&quot;https://fjkraan.home.xs4all.nl/comp/px8/pf10/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PF-10&lt;/a&gt; single 3.5&quot; floppy.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2019-12-31T04:56:23.877" LastActivityDate="2019-12-31T04:56:23.877" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13228" PostTypeId="1" CreationDate="2019-12-31T04:06:54.330" Score="12" ViewCount="696" Body="&lt;p&gt;One of the major innovations of the Apple 1 when it was released in April 1976 was that instead of using a serial interface requiring an expensive external terminal it had a built-in 40×24 text video display that could be hooked up to an external monitor. (It may not have been the very first to do this, but it was certainly &lt;em&gt;one&lt;/em&gt; of the first.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was not, however, a memory-mapped display typical of later microcomputers. Rather than writing a character code to a byte of memory that would then be displayed in a corresponding position on the screen, this was a &quot;glass TTY&quot; circuit: you'd write an ASCII byte to the output port and that would be displayed in the next position on the display, with the display automatically scrolling when writing a &lt;code&gt;CR&lt;/code&gt; on the last line or writing the last position on the last line. There appears to have been little or no cursor control beyond this, I'm not even sure if backspace was available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand the computer side of this: the video circuit received data from port 2 of a a Motorola 6820 PIA (data register at addresss $D012); one would wait until bit 7 of the port (set to input) went high, indicating that it was ready to recieve data, and then write the desired character to the output bits 0-6.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'm interested in is how the circuit after this, on the second-last page of the &lt;a href=&quot;https://www.applefritter.com/files/a1man.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple 1 manual&lt;/a&gt;, worked. What control characters could it handle, and how did it do that? How did it store the characters for the screen and generate the video? As well as a general theory of operation, links to data sheets would also be appreciated since some of the parts seem to be quite rare (e.g., the &lt;a href=&quot;https://www.applefritter.com/node/8752&quot; rel=&quot;nofollow noreferrer&quot;&gt;Signetics 2519 hex 40-bit shift register&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-01-22T05:42:16.067" LastActivityDate="2020-01-22T05:42:16.067" Title="How did the Apple 1 video circuit work?" Tags="&lt;video&gt;&lt;apple-1&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13229" PostTypeId="2" ParentId="13228" CreationDate="2019-12-31T06:44:55.447" Score="12" Body="&lt;p&gt;&lt;em&gt;Preface: The whole circuit isn't complicated, but quite involved. I will try to use 'normal' language to make it less hard to read, as mentioning all the signals and interaction would end in an unreadable conglomeration of words.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;you'd write an ASCII byte to the output port and that would be displayed in the next position on the display,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;On the circuit side it waited until the 'cursor bit' in the 7th shift register (C11B) marking the cursor position, came along,. Then the character was inserted and the cursor position delayed by one, so it marked the next character position.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;with the display automatically scrolling when writing a CR on the last line or writing the last position on the last line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;CR&lt;/strong&gt; was a function, not a character written into the display. A CR waited like any other character for the cursor position to come around. But instead of getting inserted, it simply waited for the end of the line (*1) and inserted the cursor into the beginning of the next - which may include a scroll. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Scrolling&lt;/strong&gt; also wasn't exactly like one imagines from memory-mapped screens. The shift registers held 1024 bits each, thus 1024 character positions. The screen was made up as 24x40=960 characters, leaving 64 'invisible' ones. These positions were shifted through during retrace - and cleared. Thus there were always 64 spaces after the last visible line. Scrolling was now done by advancing the start of the screen by one line (40 characters), effectively moving the top line into the 'invisible area' and pulling an already empty one from there. During the next retrace the 'old' line was eliminated, ready for the next up-scroll operation :)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There appears to have been little or no cursor control beyond this, I'm not even sure if backspace was available.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it wasn't. The display understood only one control character, CR. The only other manipulation was by pulling CLR to clear the display.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How did it store the characters for the screen&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The six 2504 type 1024x1 shift registers build the screen memory. So each shift moves one character ahead.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and generate the video?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;During the first scan line of a character row, the screen memory is shifted 40 times and its content is moved into the 2519 type 40x6 shift register. It will output its content to the 2513 character ROM. Once during loading and 7 times thereafter, for each can further scan line. One of the 74161 (D8) addresses them. From the ROM it gets loaded into the 74166 shift register and shifted out to be displayed.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As well as a general theory of operation,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If the above isn't sufficient, please ask in comment. It's just too broad to describe everything here (I guess it'll take 3-5 A4 pages to do so in full detail).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;links to data sheets would also be appreciated&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most chips are standard TTL. The shift registers are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.applefritter.com/files/signetics2504.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;2504&lt;/a&gt; - 1024x1 shift register. Six are used in parallel to store the characters and a 7th holds the cursor position. They are a bit odd as they need voltages of -12V for clock low and +5V for clock high, as well as two alternating clocks, but essentially they are simple shift registers with 1024 bits, advancing one position per clock. The output is rerouted to input, unless a character is written or cleared.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.applefritter.com/node/8752&quot; rel=&quot;nofollow noreferrer&quot;&gt;2519&lt;/a&gt; - 40x6 shift register holding one character line during display. As a special feature, they have a 'recirculate' function. This can be seen as kind of a load. As long as pin 4 is high, each clock just moves the content one position ahead and outputs it. If low, the data at the input pins get loaded and at the same time outputted. As described above, during the first scan line of a text row (detected by gate B2 from the scan line counter) 40 characters get loaded from the 2504s holding the screen data. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Everything else is, AFAICT, basic TTL devices.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - This is a little oddity which is complicated to understand (or at least I can't). For one, when a CR occurs, there can't be any character after that position on the line, so CR does not need to delete anything. Still, the CR detection circuit does pull CLR until the end of the line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;can't be any character&quot; results from the fact that the only function that can set the cursor up again is clearing the screen. But when doing so, all lines are cleared, so CR does not need to clear to the end of the line. Similarly, any new line scrolled up is also cleared before (during retrace), so again there is no need to clear the line when CR comes along.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way to screw that up is by pulling CLR for less than a whole frame (16.7 ms). But even then the cursor would still be positioned after the last text, with all empty lines below.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-22T00:17:50.330" LastActivityDate="2020-01-22T00:17:50.330" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13230" PostTypeId="2" ParentId="13221" CreationDate="2019-12-31T11:40:07.287" Score="3" Body="&lt;p&gt;The Sinclair ZX Spectrum, for example, has the most simple analog circuit you could see in the early 80's home computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ZXS uses only one bit for a sound generator (and for tape output). In &lt;a href=&quot;https://spectrumforeveryone.com/wp-content/uploads/2017/08/ZXSpectrumIssue2-Schematics.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Issue 2 schematics&lt;/a&gt;, you can see the whole sound circuit in the upper left corner: It's the speaker and two diodes. (Speaker is an inductive device, so you have to protect digital circuits from the inductive flyback with &lt;a href=&quot;https://en.wikipedia.org/wiki/Flyback_diode&quot; rel=&quot;nofollow noreferrer&quot;&gt;a flyback diode&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later issues (e.g. 4a / 6a) adds a transistor as a simple current amplifier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A little bit sophisticated was a &quot;line output&quot; (EAR): the same line was isolated with capacitors, creating the simple low pass filter to modulate a square signal from ULA, adapting it for tape recorders.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2019-12-31T11:40:07.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13232" PostTypeId="1" CreationDate="2019-12-31T15:35:28.917" Score="3" ViewCount="128" Body="&lt;p&gt;I've spent a couple of hours looking at ROM lists, but cannot find this I used to play any more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a vertically scrolling Shoot'm'Up (or &quot;shmup&quot;), meaning you saw the world top-down, with your plane flying towards virtual &quot;north&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the beginning you had three or four fighter planes to choose from. I think they where white or blue and light red, maybe one yellow/gold. I think a humanoid character representing the pilot was shown too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Within the game you could transform your plane into a mecha, which probably gave you some extra powers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Graphics was very good, thus I'd say it's newer than 2000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could be that this game is one of those that didn't really make it outside of Japan. I was surprised I couldn't find it in any listing or even YouTube video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something tells me the name was just a single word, something with V or G maybe, but this guess could be completely false.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any guesses?&lt;/p&gt;&#xA;" OwnerUserId="15919" LastActivityDate="2019-12-31T15:35:28.917" Title="Name of NeoGeo Shoot'm'Up where your plane can turn into a mecha (giant robot)?" Tags="&lt;identify-this-game&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13233" PostTypeId="2" ParentId="9411" CreationDate="2019-12-31T19:27:05.330" Score="12" Body="&lt;p&gt;My writing career began in 1992 in Computer Shopper (in an article about using user groups for tech support), and I have a huge fondness for the magazine. I was also one of the sysops on the ZNT:SHOPPER forum on CompuServe. To this day, I'm still friends with many of its writers, most of whom went on to far more fame and success, and one of whom became my &quot;brother of another mother&quot; close friend. In fact, I just finished a writing gig where I worked with one of my first editors!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Shopper was an &lt;em&gt;outstanding&lt;/em&gt; publication to write for, as it had so much income that it could comfortably assign long, in-depth articles. The editorial staff was top notch, and I credit those people with turning me into a real journalist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, as one friend opined at the time, &quot;Writing for Computer Shopper is like writing for Playboy. They pay well, and the writing is great -- but who reads the articles?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, I think it would be hard to find anyone who kept every issue. Those suckers were big and heavy! One contributing editor told me, in the mid 90s, that she didn't subscribe to the magazine although she had an article in nearly every issue; she thought it was cruel to her postal-person. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have only a few issues, myself. It'd be a challenge to scan them, because of the large format; it's too big for my legal-paper-size scanner.&lt;/p&gt;&#xA;" OwnerUserId="11849" LastActivityDate="2019-12-31T19:27:05.330" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13236" PostTypeId="1" CreationDate="2020-01-02T15:37:33.843" Score="0" ViewCount="583" Body="&lt;p&gt;I tried many 98SE boot disks online, they all boot successfully on my mobile workstation from USB (C:\&amp;gt;), but all can't run the Windows 98SE Installer because of XMS Memory, giving an error like:&#xA;&lt;a href=&quot;https://i.imgur.com/VFet9DE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/VFet9DE.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;This of course happens inside of himem.sys.&lt;/p&gt;&#xA;&lt;p&gt;It's about how to get programs like the setup to run, not about the installation itself.&lt;/p&gt;&#xA;&lt;p&gt;I don't know what's a healthy config.sys, is there anything that makes this computer's ram work with DOS like any computer, because Hyper-V doesn't fail himem.sys under 20+ GB of ram and I've read old computers having this issue with way lower amounts.&lt;/p&gt;&#xA;&lt;p&gt;It's clearly about the bios not supporting big ram sizes, which already was a problem in 2003/2004 pc's, but no-one seems to have experience with this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; Nothing has worked yet as of 13 February, 2021.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Specs:&lt;/strong&gt; Vendor=Clevo, Model=P775DM3, GPU=GTX1070, Display=4K@60hz, RAM=2xDDR4-SODIMM 16GB@2.4ghz, CPU=I7-7700K@4.2ghz, EBD=USB C:\&amp;gt;, Bios=Aptio/AMI 1.06.09 .&lt;a href=&quot;https://1drv.ms/t/s!Avqi6Pt1BGP3gdIr6J241ytu0kSoSA?e=rBs1oC&quot; rel=&quot;nofollow noreferrer&quot;&gt;W10&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15103" LastEditorUserId="15103" LastEditDate="2021-02-13T17:33:04.687" LastActivityDate="2021-02-13T17:33:04.687" Title="Get himem.sys working on an AMI 1.06.09 bios (not on VM)" Tags="&lt;ms-dos&gt;&lt;memory&gt;&lt;windows-98&gt;&lt;cpu&gt;&lt;ram&gt;" AnswerCount="1" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13237" PostTypeId="1" AcceptedAnswerId="13248" CreationDate="2020-01-02T19:55:26.873" Score="8" ViewCount="420" Body="&lt;p&gt;In Pokémon Red/Blue (USA, I'm assuming in other gen 1 releases as well), you can carry 6 pocket monsters with you at once.  Extra ones are stored in &amp;quot;boxes&amp;quot; on the computer.  If you have 6 and catch a wild monster, it is sent to the box automatically.  However, each box can hold only a few Pokémon.  After the box is full, when you catch a wild one, the game gives an error message that you can't catch this one because the box is full.  If you go switch to another box, the game says it has to save before switching.&lt;/p&gt;&#xA;&lt;p&gt;Why is this?&lt;/p&gt;&#xA;&lt;p&gt;I assume there is some kind of hardware limitation related to writing to the SRAM, or in the bankable RAM where data is loaded, but I would appreciate a more detailed explanation.&lt;/p&gt;&#xA;" OwnerUserId="5032" LastEditorUserId="15334" LastEditDate="2021-02-17T08:20:32.993" LastActivityDate="2021-02-17T08:20:32.993" Title="What technological limitations required the &quot;box&quot; system in gen 1 Pokémon games?" Tags="&lt;game-boy&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13238" PostTypeId="2" ParentId="13236" CreationDate="2020-01-03T03:31:01.227" Score="7" Body="&lt;p&gt;The XMS api doesn't support as much memory as you have installed - it uses 16 bit registers to specify memory sizes in units of KiB, so the maximum amount of memory it can report to a program that queries the available memory is just under 64MiB. Windows 98 generally expects applications to use DPMI to request memory rather than XMS, which was only included for legacy support, which probably resulted in the XMS implementation not being updated to handle the larger memory sizes supported by the OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest taking steps to limit your apparent memory size to under 64MiB -- perhaps you have a BIOS setting that will allow you to override the installed memory size? If not, then it may be possible to install a driver before himem loads that returns a faked ram size, which could solve your issues. Unfortunately, i dont know of such a driver - however it is a simple enough job that im sure one must exist somewhere.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-01-03T03:31:01.227" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13239" PostTypeId="1" AcceptedAnswerId="13241" CreationDate="2020-01-03T12:11:26.877" Score="3" ViewCount="418" Body="&lt;p&gt;As I understand it, the ZX81 video system, which resides in the ULA like all the rest of the machine-specific logic, works by using the CPU as an address generator: during active scan line, it lets the CPU try to fetch an opcode from video memory, grabs the opcode for itself to use as a character cell byte, feeds the CPU a NOP instead, then uses its own 3-bit counter plus the character cell byte to fetch a bitmap byte from ROM. An advantage of this system is that the ULA does not need to contain the 10-bit counter that would otherwise have been needed to address video memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the pinout of the ULA: &lt;a href=&quot;https://www.sinclairzxworld.com/viewtopic.php?t=1249&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.sinclairzxworld.com/viewtopic.php?t=1249&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has D0-7, obviously needed, also A0-8, needed to generate 512 different ROM addresses, presumably corresponding to the 512-byte font for 64 different characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also has A14-15. What does it use these for?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-03T16:24:46.760" Title="What does the ZX81 ULA use A14 and A15 for?" Tags="&lt;hardware&gt;&lt;zx81&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13240" PostTypeId="2" ParentId="13239" CreationDate="2020-01-03T13:07:12.733" Score="1" Body="&lt;p&gt;From a glance at Chris Smith's &lt;em&gt;The ZX Spectrum ULA - How To Design A Microcomputer&lt;/em&gt;, the ULA for the Spectrum also has A14-A15. It uses these lines to identify whether the CPU is attempting to access the 16K of RAM where the video RAM is located. Changing these values when they're being read by the video circuitry would not be desirable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On page 192, he describes thus:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;During a memory operation the Z80 address bus contains a valid address from the start of T1 through T2 and T3. The ULA contention controller monitors A14 and A15 of the address bus, and if an access is made to the lower 16K RAM during T1, the clock wait signal is applied to the Z80 clock to hold it high. As the clock wait signal is active only when a video fetch is about to occur, or is in progress, the Z80 operation is suspended only when a contention condition exists.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The clock wait signal holds the CPU's clock signal high, effectively halting it until the video circuitry has finished accessing the RAM. I expect that a similar technique was used in the ZX81.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2020-01-03T16:00:59.713" LastActivityDate="2020-01-03T16:00:59.713" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13241" PostTypeId="2" ParentId="13239" CreationDate="2020-01-03T13:26:43.937" Score="3" Body="&lt;p&gt;The only detail you’re missing is that A15 must be active in order for a processor M1 cycle to be treated as a video fetch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The full memory map is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;0000&lt;/code&gt;–&lt;code&gt;3fff&lt;/code&gt;: ROM;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;4000&lt;/code&gt;–&lt;code&gt;7fff&lt;/code&gt;: RAM, no special handling;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;8000&lt;/code&gt;–&lt;code&gt;ffff&lt;/code&gt;: RAM, with M1 cycles subverted into video fetches.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Both ROM and RAM just mirror within their areas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That’s 16kb granularity, so the top two address lines are needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to answer more directly:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A15 is used as an input to the video system: only when it is active will an M1 cycle trigger the subterfuge of forcing a NOP and stealing the real opcode as video; and&lt;/li&gt;&#xA;&lt;li&gt;A15 and A14 together create the ROM and RAM chip selects: if either is active then select RAM. Otherwise, select ROM.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The logic behind the scheme is that you can then use RAM to contain both machine code and video content, and the programmer can indicate which use is appropriate based on which RAM mirror the processor is fetching from.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-01-03T16:24:46.760" LastActivityDate="2020-01-03T16:24:46.760" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13242" PostTypeId="1" AcceptedAnswerId="13245" CreationDate="2020-01-03T13:39:52.880" Score="1" ViewCount="140" Body="&lt;p&gt;On the ZX81, when the ULA that functions as the video chip is generating display output, it takes the character cell byte (that the CPU was tricked into fetching as an opcode) and combines it with an internal 3-bit counter, to generate an address to access the font in ROM and fetch a byte of bitmap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The font is 64 characters, 512 bytes, so it should be necessary to generate nine bits of address, and sure enough, looking at the pinout &lt;a href=&quot;https://www.sinclairzxworld.com/viewtopic.php?t=1249&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.sinclairzxworld.com/viewtopic.php?t=1249&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can see pins marked A0-8 (with ' marks that presumably indicate these pins generate addresses rather than reading addresses generated by the CPU?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But hang on. The ROM is 8K. That's 13 bits of address. It's true that the upper 4 bits are constant, because the font never moves, but they still have to be placed on the address bus, or there would be no guarantee that the generated 9-bit address was referring to the correct 512-byte section of the ROM. (I'm assuming the top 3 bits of the 16-bit address don't matter once ROMCS is enabled.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does the ULA generate a full 13-bit address for this?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-03T14:20:23.340" Title="How does the ZX81 ULA generate a full ROM read address?" Tags="&lt;hardware&gt;&lt;zx81&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13244" PostTypeId="1" AcceptedAnswerId="13252" CreationDate="2020-01-03T14:19:14.247" Score="3" ViewCount="576" Body="&lt;p&gt;How much did it cost, in dollars at the time, to develop the Zilog Z80 CPU?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to Wikipedia,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Z80 is an 8-bit microprocessor introduced by Zilog as the startup company's first product. The Z80 was conceived by Federico Faggin in late 1974 and developed by him and his 11 employees starting in early 1975. The first working samples were delivered in March 1976, and it was officially introduced on the market in July 1976.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If this were a software product, with which I am more familiar, you could get a first approximation by taking the typical salary of a skilled employee, doubling it for total cost of employment, multiplying by twelve for the team size, and by ~18 months for the project duration. But I don't know whether a hardware product like a CPU and supporting chips, has other costs that are not small compared to the cost of employing the developers themselves.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-03T19:20:15.710" Title="How much did it cost to develop the Z80 CPU?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;z80&gt;&lt;cost&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13245" PostTypeId="2" ParentId="13242" CreationDate="2020-01-03T14:20:23.340" Score="1" Body="&lt;p&gt;(Community Wiki because mcleod_ideafix’s answer was correct despite being deleted)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pixel fetch is a subversion of the refresh cycle; the ZX81 has the necessary analogue electronics in place to create an equivalent of the Spectrum’s floating bus for the low nine address pins so when the ULA drives its nine address pins, it overwrites the low nine bits of the refresh address as observed from the ROM. Therefore the other seven bits come from the Z80’s I register, that being what the Z80 loads during refresh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bonus: if the ROM doesn’t respond to the address but RAM does, whatever comes from RAM will be used as pixels. This is the basis of ‘high-resolution’ modes on compatible RAM expansions.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-01-03T14:20:23.340" CommentCount="1" CommunityOwnedDate="2020-01-03T14:20:23.340" ContentLicense="CC BY-SA 4.0" />
  <row Id="13246" PostTypeId="1" CreationDate="2020-01-03T14:51:59.263" Score="2" ViewCount="281" Body="&lt;p&gt;I would like to know which manufacturer/version is the Space Invaders game that I show playing in the video linked below. The game setup is similar to Galaxian/Galaga but it is not. It also feels faster/ more dynamic (or maybe it's just me)&#xA;&lt;a href=&quot;https://youtu.be/eng16esbe7Y&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/eng16esbe7Y&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15932" LastEditorUserId="15932" LastEditDate="2020-01-06T07:24:30.170" LastActivityDate="2020-01-06T07:24:30.170" Title="What version of Space Invaders is this?" Tags="&lt;arcade&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13247" PostTypeId="2" ParentId="13246" CreationDate="2020-01-03T14:58:23.803" Score="3" Body="&lt;p&gt;Regardless of the video title and the arcade art, that's Namco's &lt;a href=&quot;https://en.wikipedia.org/wiki/Gaplus&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gaplus&lt;/a&gt;, which is Galaga 3 outside of the USA. See also its &lt;a href=&quot;https://www.arcade-museum.com/game_detail.php?game_id=7911&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arcade Museum entry&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a &lt;a href=&quot;https://youtu.be/2SWqdUfv7J4?t=135&quot; rel=&quot;nofollow noreferrer&quot;&gt;Youtube video&lt;/a&gt; starting at the same place in the game as the video you've provided; if the time offset doesn't work then skip to 2:15.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-01-03T18:22:20.377" LastActivityDate="2020-01-03T18:22:20.377" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13248" PostTypeId="2" ParentId="13237" CreationDate="2020-01-03T16:09:52.660" Score="9" Body="&lt;p&gt;The boxes are indeed in different Saved RAM banks, as shown in &lt;a href=&quot;https://datacrystal.romhacking.net/wiki/Pok%C3%A9mon_Red/Blue:RAM_map&quot; rel=&quot;nofollow noreferrer&quot;&gt;this memory map&lt;/a&gt;; boxes 1-6 are in SRAM bank 2, with boxes 7-12 in bank 3.&lt;/p&gt;&#xA;&lt;p&gt;The memory map also notes that there are individual checksum addresses for each box, as well as a global checksum for each bank.&lt;/p&gt;&#xA;&lt;p&gt;Banks 2 and 3 are not accessed directly during gameplay. Instead, the data from the current box is copied into the working area of Bank 1. As described on &lt;a href=&quot;https://bulbapedia.bulbagarden.net/wiki/Save_data_structure_(Generation_I)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bulbapedia's page&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;when a box is selected its contents are copied and cached in bank 1. Think of bank 2 and 3 as warehouses where information is copied over to the more important areas when needed, and only updated on save in case anything changed in the copied versions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As only one box at a time is stored in Bank 1, changing boxes on the PC requires the following procedure:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Copy current box contents from Bank 1 to Bank 2 or3&lt;/li&gt;&#xA;&lt;li&gt;Calculate checksum for current box, update box checksum in Bank 2 or 3&lt;/li&gt;&#xA;&lt;li&gt;Calculate and update global checksum for Bank 2 or 3&lt;/li&gt;&#xA;&lt;li&gt;Copy new box contents from Bank 2/3 to Bank 1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If we decided not to calculate box checksums when they're copied back to bank 2/3 (to save time), they would have to be calculated later on while saving your game. Unless you keept track of which boxes had been touched, you'd have to recalculate each box's checksum, as well as the two global checksums. This would make saving your game an even &lt;em&gt;slower&lt;/em&gt; task than it already is on Pokémon Red/Blue.&lt;/p&gt;&#xA;&lt;p&gt;Additionally, switching the power off after a non-save box swap (and before saving) would leave an old checksum that didn't match the box data, and the game would think it had a corrupted save when it was next turned on.&lt;/p&gt;&#xA;&lt;p&gt;It would reasonable for a user to switch their game off without saving at times (if they want to replay a battle), and expect their game to resume from their last save. Corrupting a box in this scenario would be unacceptable, so checksums are updated on every box change.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, if box checksums were updated without saving the rest of the game data, you could have a box checksum that is newer than the rest of the save data. This could lead to situations where individual Pokémon end up being duplicated or lost when you load old save data, similar to how Pokémon can be cloned by &lt;a href=&quot;https://bulbapedia.bulbagarden.net/wiki/Cloning_glitches#Trading_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;switching off during a link-cable trade&lt;/a&gt;. The linked page notes that this can indeed be done to clone Pokémon in boxes, by switching the game off while saving. In fairness, it requires precise timing, and disobeying the DO NOT SWITCH OFF message, so shouldn't happen by accident.&lt;/p&gt;&#xA;&lt;p&gt;The fact that the Game Boy is a battery-powered platform, where power outages are to be expected, means that it is all the more imperative to make sure all save data (game, boxes, and checksums) are updated coherently, at the same time.&lt;/p&gt;&#xA;&lt;p&gt;So the long and the short of it is: if you want to have checksums on your box storage to avoid data corruption, that means you have to save the game whenever you update a checksum as you swap boxes, to keep everything consistent.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2021-02-16T13:37:59.143" LastActivityDate="2021-02-16T13:37:59.143" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13249" PostTypeId="1" AcceptedAnswerId="13250" CreationDate="2020-01-03T16:44:55.677" Score="20" ViewCount="6924" Body="&lt;p&gt;I know ARPANET wasn't available to the public until the '90s, but why didn't people just build modems (which most phone companies already had anyway), connect their phone's phone connector to it, dial up a &quot;server&quot; and connect to it that way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The phone infrastructure already existed and there was a definite need to quickly transfer data (like typing in games in magazines).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even without HTTP and HTML there's a lot of business that could be conducted that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know American Phone companies didn't allow people to hook up Homebrew to their phones, but what was stopping people in Europe?&lt;/p&gt;&#xA;" OwnerUserId="15934" LastEditorUserId="2067" LastEditDate="2020-01-05T01:20:34.863" LastActivityDate="2020-04-13T18:26:13.700" Title="Why weren't audio decoders used to create a makeshift internet in the 70 and 80s?" Tags="&lt;internet&gt;" AnswerCount="9" CommentCount="26" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13250" PostTypeId="2" ParentId="13249" CreationDate="2020-01-03T17:16:11.850" Score="55" Body="&lt;p&gt;Of course, people did use modems extensively for ad hoc networking at the time.  You'd call up your friend and transfer a file.  You'd call up the local BBS and chat and transfer files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your question seems to be more, why didn't this develop into a more formalized system of always-on network links.  Well, who's going to pay for all those phone lines?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something like the Internet or another packet-switched network is predicated on (mostly) always-up links.  Instead of calling your friend directly, you'd call a local access point who have another link to another site who have a link to another site who has a local link to your friend.  Great.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, now the local BBS needs at least one always-on 24/7 phone link to another site.  More than one link if it's more than just an end-point and is actually routing backbone traffic. Many of the necessary links would be a long distance phone call.  Consider that long distance rates could be a dollar a minute back then, and I think you have much of your answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Protocols like UUCP met halfway.  Sites would store-and-forward and connect a few times a day, often at night with cheaper long-distance rates.  But a UUCP feed was complicated to set up, could involve a ridiculous amount of data (Usenet was megabytes a day even by the mid-80s if you wanted access to the whole thing), and was mostly reserved for fairly powerful minicomputers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the late 1980s, it in fact wasn't uncommon for networks of BBSes to be linked that way, and your email might make it across the country or even the globe in seconds. But by the time large networks of BBSes like FidoNet started formalizing their forwarding connections, and sometimes even having connections up 24/7, the Internet came around and everyone jumped on that. &lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2020-01-03T17:21:22.840" LastActivityDate="2020-01-03T17:21:22.840" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13251" PostTypeId="2" ParentId="13249" CreationDate="2020-01-03T18:29:18.777" Score="26" Body="&lt;p&gt;Much more than speed (typical ordinary user modems in the 1970s and even early 1980s were just 300 bps), the problem was long distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many areas did not even have unlimited &lt;strong&gt;local&lt;/strong&gt; calling at the time (Maryland fortunately did, or my leap into computers primarily via dialup to timeshared systems would have been significantly stunted). Long distance was quite expensive and billed per minute. The 9600 bps backhaul lines of Arpanet were few &amp;amp; far between &lt;strong&gt;and not an option for little BBS owners&lt;/strong&gt;. The result was a lot of small (and some larger) local systems. It took a while for systems like Compuserve to connect it all together, providing local connections to a large nationwide system. Arguably the telegraph network of the 1800s was &lt;a href=&quot;https://amzn.to/2QleBHF&quot; rel=&quot;noreferrer&quot;&gt;the &quot;Victorian internet&quot;&lt;/a&gt; and that was far less than 300bps. The challenge wasn't speed - it was getting an &quot;always on&quot; + &quot;nationwide&quot; (and eventually worldwide) system which, more than cheap computers and more than fast modems, needed &lt;strong&gt;cheap long-distance connections&lt;/strong&gt;. Long distance is essentially free now (and unfortunately the scammers make tremendous use of that, at least for the next 18 months until the Robocall act passed by Congress &amp;amp; signed by the President is implemented), but that was not always the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I know American Phone companies didn't allow people to hook up homebrew to their phones&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While you could never (legally) hook up homebrew, after the &lt;a href=&quot;https://en.wikipedia.org/wiki/Carterfone&quot; rel=&quot;noreferrer&quot;&gt;Carterfone case&lt;/a&gt; it was legal to hook up a modem. The challenge was: who could you call at a reasonable price to make this pre-internet work?&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2020-01-03T21:05:57.147" LastActivityDate="2020-01-03T21:05:57.147" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13252" PostTypeId="2" ParentId="13244" CreationDate="2020-01-03T19:20:15.710" Score="6" Body="&lt;p&gt;In &lt;a href=&quot;https://archive.computerhistory.org/resources/access/text/2015/06/102658073-05-01-acc.pdf&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; document there is a mentioning of half a million dollars spent for designing the Z80.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-01-03T19:20:15.710" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13253" PostTypeId="2" ParentId="13249" CreationDate="2020-01-03T19:39:53.263" Score="17" Body="&lt;p&gt;While the UUCP store-and-forward protocol was largely UNIX-based and thus mostly catering to institutions until UNIX-compatible OSes started to appear for the personal computers, the &lt;a href=&quot;https://en.wikipedia.org/wiki/FidoNet&quot; rel=&quot;noreferrer&quot;&gt;FidoNet&lt;/a&gt; protocol was used on computers running MS-DOS and CP/M since early 1980s. The network of FidoNet-capable computers was vast and spanned the globe, although it could take many days for a message to reach an overseas recipient. My personal computer was a FidoNet point for a short while in the early 1990s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Surprisingly, FidoNet is being used to this day, according to the Wiki article.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-01-03T19:39:53.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13254" PostTypeId="1" AcceptedAnswerId="13256" CreationDate="2020-01-03T23:32:00.403" Score="6" ViewCount="666" Body="&lt;p&gt;Computers that used TV sets for display, needed to worry about the title safe area. By consensus, on NTSC sets, it was 200 scan lines, or 192 if you wanted to play it really safe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the equivalent on PAL sets? The BBC Micro could display 256 scan lines; did that ever run into overscan?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-03T23:50:34.577" Title="What was the title safe area on PAL TV sets?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;video&gt;&lt;display&gt;&lt;bbc-micro&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13255" PostTypeId="2" ParentId="13254" CreationDate="2020-01-03T23:41:15.223" Score="5" Body="&lt;p&gt;I can answer half of that only: the BBC did often run into trouble, to the point that they cite the &lt;code&gt;*TV&lt;/code&gt; command as early as Page 17 of &lt;a href=&quot;http://bbc.nvg.org/doc/BBCUserGuide-1.00.pdf&quot; rel=&quot;noreferrer&quot;&gt;the user guide&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If the picture on your television screen is either too far up or too&#xA;  far down the screen, you can move the whole display with the command&#xA;  &lt;strong&gt;*TV&lt;/strong&gt;.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;*TV 255&lt;/strong&gt; will move down one line  &lt;br&gt;&#xA;  &lt;strong&gt;*TV 254&lt;/strong&gt; will move down two lines &lt;br&gt;&#xA;  &lt;strong&gt;*TV 1&lt;/strong&gt; will move up one line &lt;br&gt;&#xA;  &lt;strong&gt;*TV 2&lt;/strong&gt; will move up two lines &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The movements come into effect next time you press &lt;strong&gt;BREAK&lt;/strong&gt; or change mode. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;*TV&lt;/strong&gt; also controls the interlace of the&#xA;  television display. See chapter 43.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They felt the need to drop that in at the end of the second chapter, 'Commands', which first introduces directly the idea of typing a command in order to get the computer to do something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having felt the need to mention that use right up front, they don't bother defining *TV in detail until Page 419.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-01-03T23:41:15.223" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13256" PostTypeId="2" ParentId="13254" CreationDate="2020-01-03T23:50:34.577" Score="11" Body="&lt;p&gt;According to &lt;a href=&quot;https://tech.ebu.ch/docs/r/r095.pdf&quot; rel=&quot;noreferrer&quot;&gt;EBU R95&lt;/a&gt;, the title-safe area for 576i format (corresponding to PAL SDTV) is 258 lines tall in each field.  This is just large enough to accommodate the 256 lines per field that the BBC Micro uses.  This is probably not a coincidence, as the BBC Micro was in part designed so that the BBC itself could use the micro for generating titles and graphics for broadcast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, by default the display area of the BBC Micro tended to be misaligned by about one line of text (8 graphics lines per field).  This could be corrected using the *TV command, which altered the width of the blanking intervals at the top and bottom of the screen.  The BBC Master allowed *TV settings (among others) to be saved in NVRAM, but this was not present on the original machines.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-01-03T23:50:34.577" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13257" PostTypeId="1" AcceptedAnswerId="13258" CreationDate="2020-01-04T12:18:27.557" Score="5" ViewCount="291" Body="&lt;p&gt;Many classic computers could optionally use a TV set as the display. At least in the early (pre-SCART) days, the TV would typically only have RF input, but if you were using a monitor, you could get a better color picture, not just because of the quality of the picture tube itself, but because you could use a better transmission format. Composite video would save an RF encoding step, but best of all was when computer and monitor could connect with an RGB cable, avoiding the distortion that comes with mixing the components together and separating them again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did some of this apply even with a monochrome system? That is, if you had a monochrome computer providing RF output to a black-and-white TV, and you wanted to instead connect it to a green-screen monitor, could the monitor produce a sharper image if it gets the signal in a different format than the TV could take?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-10T15:42:46.247" Title="Could monochrome systems produce better output for monitors than TV sets?" Tags="&lt;hardware&gt;&lt;video&gt;&lt;crt-monitor&gt;&lt;display&gt;&lt;s-video&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13258" PostTypeId="2" ParentId="13257" CreationDate="2020-01-04T13:42:12.613" Score="7" Body="&lt;p&gt;RF encoding introduces significant noise to the video signal because it moves the signal up to an area of the spectrum that is much more susceptible to interference. A monochrome 240p video signal of the best quality will be defined by its dot clock frequency at ~14 MHz. This would create a good quality 80 column text image as seen on machines like IBM CGA or Amiga. For RF compatibility, such a signal would be promoted to the TV VHF spectrum, which resides in a large and noisy range of ~50 MHz to ~250 MHz. Here, the signal is subject to interference from the many other signals present in the VHF spectrum. Thus, even without any distortion from the frequency shift (not possible), the quality of the signal as is transmitted to the TV is significantly degraded by noisy spectrum interference. Naturally, the TV also has to shift the signal back down to the native frequency as well, and this too is imprecise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you have noisy artifacts introduced through both the up and down frequency conversion needed for RF transmissions to the TV, and you have the fact that you are moving the signal into a much noisier spectrum band where it is interfered by other signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, yes, any avoidance of RF encoding, even for a basic text-only monochrome display, will benefit the display quality. Examples of bypassing RF encoding to achieve better results using a monitor are readily seen amongst various early computers, including the 1977 Apple ][, Commodore PET, and TRS-80 Model 1, all of which relied on bypassing RF for more readable text displays on monitors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my opinion, TV sets as computer monitors was never meant as a practical alternative to a monitor if you were utilizing anything other than low-resolution color output, probably for games. The fact that early computers supported RF was more for keeping the costs/barriers to entry lower for the target home market, since virtually all homes already had one or more TV sets. It's the same reality that has always applied to home game consoles, where the output capabilities improved almost lock-step with the capabilities of low-cost consumer display devices (e.g. &quot;TV's&quot;) to the present day.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-01-04T13:55:41.027" LastActivityDate="2020-01-04T13:55:41.027" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13259" PostTypeId="1" AcceptedAnswerId="13260" CreationDate="2020-01-04T21:46:49.153" Score="22" ViewCount="6151" Body="&lt;p&gt;The early versions of Microsoft BASIC required 4KB of ROM, and many versions existed in the 8KB and 16KB size. But Microsoft's IBM BASIC (known as &quot;Cassette BASIC&quot;) for the original IBM PC (Model 5150) required 32KB. This seems odd to me given competitors like:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;8KB CBM BASIC v2.0 in the Commodore 64, which had all the essential disk file functions (but no graphics).&lt;/li&gt;&#xA;&lt;li&gt;16KB CBM BASIC v7.0 in the Commodore 128, which had many enhanced features plus graphics.&lt;/li&gt;&#xA;&lt;li&gt;16KB BBC BASIC which perhaps had the broadest features of any comparable BASIC and even out-performed IBM BASIC running on the faster PC.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Why was the IBM BASIC so huge (relatively speaking) at 32 KB?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note/Update&lt;/strong&gt;: The total amount of ROM in the original IBM PC is 40KB. The additional 8KB being for the PC BIOS. It came on 5x8KB ROM chips.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-01-06T19:08:36.783" LastActivityDate="2020-02-11T02:32:08.263" Title="Why was IBM BASIC so Huge?" Tags="&lt;ibm-pc&gt;&lt;commodore&gt;&lt;bbc-micro&gt;&lt;microsoft-basic&gt;" AnswerCount="4" CommentCount="11" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13260" PostTypeId="2" ParentId="13259" CreationDate="2020-01-04T23:48:27.347" Score="29" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The early versions of Microsoft BASIC required 4KB of ROM&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 4k versions lacked a number of major features, including string variables. These were added in the 8k versions. The equivalent 6502 version, which also expanded the floating point from 32 to 40 bits, was about 10k.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But Microsoft's IBM BASIC (known as &quot;Cassette BASIC&quot;) for the original&#xA;  IBM PC (Model 5150) required 32KB.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are two primary reasons for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One is that the 16-bit format is naturally larger than the 8-bit format of the earlier machines. This likely accounts for half of the difference right off the bat, and perhaps more if I'm right that it didn't use an analog of zero-page for the parser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This version also included the screen editor and rudimentary operating system for the cassette. These too would be larger than their 8-bit cousins, and the editor, in particular, would normally be part of the underlying OS ROM, at least that was the case on the Atari and Commodore machines.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2020-01-04T23:56:04.197" LastActivityDate="2020-01-04T23:56:04.197" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13261" PostTypeId="2" ParentId="12015" CreationDate="2020-01-05T00:05:20.960" Score="4" Body="&lt;p&gt;The amazing little &lt;a href=&quot;https://en.wikipedia.org/wiki/AtariLab&quot; rel=&quot;nofollow noreferrer&quot;&gt;AtariLab&lt;/a&gt; was actually ported to the C64. This included pretty complete I/O, although it was &lt;em&gt;mostly&lt;/em&gt; used for input. I'm not sure how many, if any, actually shipped.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-01-05T00:05:20.960" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13262" PostTypeId="1" CreationDate="2020-01-05T01:14:53.953" Score="4" ViewCount="138" Body="&lt;p&gt;I'm writing a PDP11 emulator. When CPU read odd address on Unibus odd address exception is launched. But the code below INC increments PRTPTR by 1 which make TSTB @PRTPTR generate a exception when it try access odd address.    &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PRTAST:&#xA;    TSTB @PRTPTR&#xA;    BEQ 2$&#xA;    MOVB @PRTPTR,@#177566&#xA;    INC PRTPTR&#xA;    RTT&#xA;2$: CLRB @#177564&#xA;    RTT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How MOVB and TSTB and all byte instructions work with odd address?&lt;/p&gt;&#xA;" OwnerUserId="15938" LastEditorUserId="15938" LastEditDate="2020-01-05T18:10:09.490" LastActivityDate="2020-01-05T23:41:26.973" Title="How MOVB, TSTB and all byte instructions works in odd address read in PDP11?" Tags="&lt;pdp-11&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13265" PostTypeId="2" ParentId="13259" CreationDate="2020-01-05T03:05:36.773" Score="11" Body="&lt;p&gt;[&lt;em&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13260/6659&quot;&gt;Maury Markowitz' answer&lt;/a&gt; already nails it, so this is just to add some numbers for comparison]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Cassette BASIC 1.0/1.1 in the IBM PC ROM is a &lt;strong&gt;Microsoft BASIC V5.x&lt;/strong&gt; (*1). It's usually marketed as &lt;a href=&quot;https://en.wikipedia.org/wiki/MBASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;MBASIC&lt;/a&gt;. It was available as stand alone application or as program under CP/M and other OS. MS offered 3 basic flavours:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8 KiB BASIC&lt;/li&gt;&#xA;&lt;li&gt;Extended BASIC&lt;/li&gt;&#xA;&lt;li&gt;Disk BASIC&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;8 KiB BASIC was intended for (low cost) home computer with limited ROM space. I'm not really sure if there were any uses at all, but it's mentioned in some early manuals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So a good comparison may be typical Extended BASIC machines (Although Cassette BASIC is a bit different, see below):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;MSX BASIC (*2)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;MSX1&lt;/strong&gt; BASIC uses 16 KiB ROM for BASIC but needs a rather upper end BIOS to work, filling another 16 KiB for a total of 32 KiB ROM. For disk usage another 16 KiB Disk-ROM is added, which included a 4 KiB BASIC extension.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;MSX2&lt;/strong&gt; BASIC added another 16 KiB (*3) for BASIC for a total of 64 KiB ROM.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/Triumph_Adler_Alphatronic_PC&quot; rel=&quot;nofollow noreferrer&quot;&gt;TA Alphatronic PC&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This Z80 based machine featured 32 KiB ROM, of which 8 house the BIOS/OS, while 24 KiB are used for Microsoft Extended BASIC V5.11. This BASIC did not feature any disk extensions, which had to be loaded from disk - much like with the IBM-PC&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In addition it's important to see that IBM's &lt;strong&gt;Cassette BASIC is Disk BASIC sans disk support&lt;/strong&gt; (driver). Unlike Extended BASIC, all mechanics for abstract devices are already included. Access is done thru files, using names like &quot;LPTn&quot; or &quot;CAS1&quot;. It does no longer need (or support) specific commands like CLOAD/CSAVE for cassette or LPRINT for printer handling, as Extended BASIC does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: Microsoft Extended BASIC (without Disk support) for Z80 systems already filled ~24 KiB of ROM. So 32 KiB for an even more enhanced Version doesn't seam like a lot (*4)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Background IBM PC BASIC&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM offered BASIC in 3 flavours:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cassette (ROM) BASIC&lt;/li&gt;&#xA;&lt;li&gt;BASIC.COM, to extended ROM BASIC with functions for handling disk files (*2)&lt;/li&gt;&#xA;&lt;li&gt;BASICACOM, adding disk handling plus advanced Features for graphics and sound.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The later two were not stand alone solutions, but extensions to the ROM code. BASIC.COM only adds disk access and handling for serial ports(*4), while BASICA offers many more functions for graphics and sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The separation in BASIC.COM and BASICA.COM was made to maximize available RAM on machines with less than 128 KiB. 32 KiB is the absolute &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5289/how-did-an-ibm-5150-with-16kb-ram-work/5290#5290&quot;&gt;minimum to use DOS 1.x&lt;/a&gt;. With BASICA loaded this would leave about 1 KiB of RAM for BASIC. So not really usable. BASIC.COM reduced the footprint by ~6 KiB, enabling the use on a 32 KiB minimum system. Still not much better than what a VIC-20 could do for a fraction. For useful programs in BASIC, and comperable numbers to other computers of the time, 48 KiB was the minimum, leaving 17 KiB under BASICA and 23 KiB under BASIC.COM. And with 64 KiB the PC managed to beat the C64 with a whooping 43 KiB free under BASICA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In it's structure BASIC 5.0 was still an 8/16 bit program. All data (BASIC code plus all data) was held in a single segment (*5). Thus none of the three BASICs could provide more then 61 KiB to a BASIC user. A PC with 96 KiB RAM (*6) would be all a BASIC user could have dreamed about :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I'm not sure about the exact version, but it must be after 5.0, but before 5.28&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - After all, MSX is said to mean &lt;a href=&quot;https://en.wikipedia.org/wiki/MSX#Name&quot; rel=&quot;nofollow noreferrer&quot;&gt;MicroSoft eXtended BASIC&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - I'd say code size between Z80 and 8086 version is rather close. After all, the 8086 was made to support 8080 style programming without bloating the code too much - that's why there are many short encodings for instruction equivalent to 8080 instructions - which in turn the Z80 uses as well. Over all increase is somewhere around 20-30% without optimization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Due the already abstract file access mechanics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - While it can be speculated, that porting was kept simple by keeping the memory layout exactly like with the 8080 version, I think it's much more likely that 61 KiB maximum BASIC space seamed, as so often, &lt;em&gt;more than enough for everything&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - 64 KiB motherboard RAM plus 32 KiB Memory Expansion Option (card) - yes, there was such a thing&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-11T02:32:08.263" LastActivityDate="2020-02-11T02:32:08.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13266" PostTypeId="1" AcceptedAnswerId="13271" CreationDate="2020-01-05T09:38:07.660" Score="3" ViewCount="529" Body="&lt;p&gt;Perhaps the most visually distinctive feature of the BBC Micro is the row of red function keys on the keyboard. I don't know who came up with that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could swear I read somewhere that the BBC asked for a distinctive red color, not on the function keys, but on the Enter key, but I cannot find any reference to that now, and I can't rule out the possibility that I was misreading it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the BBC ask for any unusual key colors?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-05T18:56:00.253" Title="Did the BBC ask for any unusual key colors on the BBC Micro?" Tags="&lt;history&gt;&lt;keyboards&gt;&lt;bbc-micro&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13267" PostTypeId="1" AcceptedAnswerId="13270" CreationDate="2020-01-05T11:42:37.990" Score="4" ViewCount="431" Body="&lt;p&gt;Back in the day, I owned a Commodore 64, and I noticed that essentially all games on tape, provided their own code for reading the tape, instead of using the code provided in ROM. This had two benefits from the vendors' perspective: copy protection, and the ability to load many times faster than the ROM code would've done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, running I/O at a fraction of its potential speed was a Commodore-specific quirk, which means on other platforms, custom code would not have been necessary for that reason. I'm curious whether copy protection alone sufficed to motivate custom loader code. so to take a specific contemporary platform with many similarities:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did games on tape on the BBC Micro and Electron, have custom loader code?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-05T16:37:56.327" Title="Did BBC Micro and Electron games use custom tape loaders?" Tags="&lt;cassette-tape&gt;&lt;bbc-micro&gt;&lt;electron&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13268" PostTypeId="2" ParentId="13266" CreationDate="2020-01-05T13:55:13.907" Score="5" Body="&lt;p&gt;There exists a copy of some draft requirements that the BBC had for the new machine.  At the time, these had already been hashed out a bit with Acorn, so they match quite well with the resulting BBC Micro.  A relevant extract:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Keyboard: capable of generating all 128 ASCII codes.&lt;br&gt;&#xA;  Positive action keys (not touch sensitive).&lt;br&gt;&#xA;  ISO standard layout plus:&lt;br&gt;&#xA;  (a) Up/down/left/right cursor control&lt;br&gt;&#xA;  (b) A row of keys, above the&#xA;  numbers, which generate software definable codes - this could be done&#xA;  with a software look-up table to map the original codes to new values.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is no mention here of keycap colours.  On the actual machine, the cursor editing keys (four arrows and &lt;code&gt;COPY&lt;/code&gt;) are olive green, the ten function keys are red, and the rest are black.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result is instantly recognisable, but most likely arose from ergonomic considerations at a relatively late stage of design.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-01-05T13:55:13.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13269" PostTypeId="2" ParentId="13262" CreationDate="2020-01-05T16:33:07.473" Score="9" Body="&lt;p&gt;As far as the Unibus is concerned, all reads are word-sized (and from an even address), and the CPU simply ignores the portion of the word it wasn't interested in.  Thus, to read an odd-address byte, the CPU reads the even-address word containing that byte, and uses only the top 8 bits of the result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unibus writes are allowed to be byte-sized (there are 2 separate write cycle types: DATO and DATOB, which correspond to word-write and byte-write respectively).  Word writes are always to even addresses, but byte writes may specify an odd address.  Note however that for a byte written to an odd address, the byte value must occupy the &lt;em&gt;upper&lt;/em&gt; 8 bits of the Unibus data lines (i.e. it can be thought of as a word write with the lower even byte masked out).  To put it another way, for a DATOB byte write cycle, the lowest address bit is treated as a flag indicating whether the byte of the Unibus data word that is intended to be modified is the upper one, or the lower one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Q-Bus works the same way -- reads are always word-sized, and writes may be either word or byte sized, with byte-sized writes using the upper or lower byte depending on whether the address is odd or even.&lt;/p&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2020-01-05T23:41:26.973" LastActivityDate="2020-01-05T23:41:26.973" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13270" PostTypeId="2" ParentId="13267" CreationDate="2020-01-05T16:37:56.327" Score="9" Body="&lt;p&gt;Only very rarely because the tape hardware is completely distinct between the two machines, it’s very lightly documented and somewhat peculiar on the Electron, is fairly fixed in its functionality, the built-in routines are pretty good (including rewind and retry), and using the standard routines gives you a trivial pathway to adapting your title to ROM or to disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Re: hardware differences; the BBC offers a ULA that signals decoded bits to a standard ACIA (i.e. a one-slot UART) for byte accumulation. The Electron does the whole process in its ULA, making no effort to emulate the ACIA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Re: the Electron; interrupts are offered for received data full, transmit data empty, and high tone detect but most people tend to assume that the first two are labelled the wrong way around as documented, though the truth is that all three are simply always active; if you are writing bytes, the received data interrupt will still fire if enabled, provided it hasn’t fired recently and what looks like a start and stop but pair shift through.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both cases, because bit recognition occurs in hardware, there’s no leeway for the usual approaches to turbo loading. On an Electron you can’t even discard start and stop bit requirements — the byte packaging is hard-wired.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Acorn also did a great job abstracting filing systems so if you stick within usual load and save calls then the door is usually open to disk, ROMFS, etc releases for free. The only caveat is that some disk filing systems reduce available RAM slightly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That all being said, an occasional title has a custom loader. Off the top of my head: Way of the Exploding Fist is an Electron example, which omits the usual 256-byte chunk structure for a single block of data and either loads the whole thing successfully or doesn’t.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-01-05T16:37:56.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13271" PostTypeId="2" ParentId="13266" CreationDate="2020-01-05T18:56:00.253" Score="4" Body="&lt;p&gt;From a previous question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2402/what-bbc-microcomputer-features-were-requested-specifically-by-bbc-engineers/5391#5391&quot;&gt;What BBC Microcomputer features were requested specifically by BBC engineers?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which references &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/BBC/HardwareSpecification.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;this BBC document&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;both pound sign and number symbol (hash) must be included ... the RETURN key will be a different colour from the rest;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But that actually:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and certain that the return key ended up being the same colour as all the other keys&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and in a comment:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Interesting that the specification requests specifically the return key be a different colour; the eventual BBC micro keyboard did of course have multiple colours on its keyboard, but return was just plain black along with the majority of keys (the function keys and arrow keys being different colours)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2020-01-05T18:56:00.253" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13272" PostTypeId="1" CreationDate="2020-01-05T20:06:41.743" Score="6" ViewCount="923" Body="&lt;p&gt;I know the real answer is to download cracked games but in the era before Internet was afordable I have a lot of community games which never reached the Internet which I would like to rescue as some floppies starts to no longer be readable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you know, the system uses standard 3.5 inchs floppies and can read pc floppies. But in my case almost all floppies are formated using the Atari specific method which allowed them to put more data per floppies than on a floppy drive from a PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the official external floppy reader but the as you guess, the connector can t be plugged on a modern computer directly.&lt;br&gt;&#xA;&lt;img src=&quot;https://web.archive.org/web/20181111233303if_/http://www.seasip.info/AmstradXT/ppctech/power.png&quot; alt=&quot;&quot;&gt;&lt;br&gt;&#xA;The Atari also still works but the 250Volts eletrical inusulation is almost gone and many keys on the keyboard stopped working (otherwise games are still playable if careful). So I prefer using the external drive (maybe buying a scsi/ide converter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How I can dump those communities games on the msa or raw format in order to load them inside my Android phone emulator?&lt;/p&gt;&#xA;" OwnerUserId="15946" LastEditorUserId="15946" LastEditDate="2020-01-06T19:35:54.687" LastActivityDate="2020-01-09T18:18:41.017" Title="How to backup/dump Atari 520st floppy disks on modern hardware" Tags="&lt;floppy-disk&gt;&lt;atari&gt;&lt;data-preservation&gt;&lt;atari-st&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13273" PostTypeId="2" ParentId="13272" CreationDate="2020-01-05T22:31:15.440" Score="5" Body="&lt;p&gt;There are two problems here: dumping the disks, and loading them in your emulator.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The general answer&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;To dump Atari ST disks, you can use &lt;a href=&quot;http://pasti.fxatari.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pasti&lt;/a&gt; on your Atari computer; the advantage is that it works quite well, and won’t require any extra hardware. Using modern hardware, you’d probably have to look into a &lt;a href=&quot;http://www.kryoflux.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;KryoFlux&lt;/a&gt; or &lt;a href=&quot;http://www.cbmstuff.com/proddetail.php?prod=SCP&quot; rel=&quot;nofollow noreferrer&quot;&gt;SuperCard Pro&lt;/a&gt; and &lt;a href=&quot;http://info-coach.fr/atari/software/pc-projects/Aufit.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aufit&lt;/a&gt;, which converts KryoFlux or SCP dumps to Pasti format. Note that dumping to Pasti images means you then need to carefully check the result — Pasti can’t determine whether a bad read reflects a bad floppy or dirty head, or a copy-protection mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To load images into your emulator, assuming this is an emulator you’re writing, you’d have to add support for &lt;a href=&quot;http://www.atari-wiki.com/?title=Pasti_format&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pasti images&lt;/a&gt;. Otherwise, you’ll have to ask the emulator’s author, if it doesn’t already support them... There’s a Windows DLL (see the first Pasti link above) but that’s not going to be all that easy to use on Android.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;For straightforward images, using modern hardware&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If your disks use one of the formats supported by USB floppy drives, and you only need to dump the raw sector contents, that’s the simplest option: there are a number of tools for current operating systems which can read a floppy using a USB drive. On Linux, any tool which can read from the block device corresponding to the drive will do: &lt;code&gt;dd&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can’t find a USB floppy drive capable of reading your disks (and there might not be one), the next step is again devices such as the KryoFlux or SuperCard Pro. They come with tools to read MFM floppies’ contents, and dump images containing only the sector contents.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-01-09T18:18:41.017" LastActivityDate="2020-01-09T18:18:41.017" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13274" PostTypeId="2" ParentId="1616" CreationDate="2020-01-06T06:42:11.030" Score="6" Body="&lt;p&gt;Earlier answers describe the procedural generation system of the Elite &quot;galaxy&quot;.  Also relevant, I think, is the way the ships were designed to be both easy to render quickly on an 8-bit micro, and to take up as little space as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of the original Elite ships were &lt;strong&gt;convex hulls&lt;/strong&gt; with the possible exception of isolated spikes representing externally mounted guns.  This allowed the use of a very efficient hidden-line-removal algorithm, without which it would not have been possible to render even wireframe 3D graphics in realtime using only a 2MHz 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They were also &lt;strong&gt;symmetric&lt;/strong&gt; over at least one axis, and often two.  This allowed a significant reduction in the number of vertices, edges, and faces that had to be stored for each ship, since the fact of reflection took less space to encode than the extra vertices for the other half of the ship.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, they were also not stored as floating-point, but as tightly packed small integers:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Each vertex has 6 bytes of data. Bytes X,Y,Z are the magnitudes of the&#xA;  3D coordinate. The signs for each component are stored in bits 7,6,5&#xA;  of Byte S. The lower 5 bits are a visibility distance, with a maximum&#xA;  value of 31 ensuring the vertex is processed for all distances until&#xA;  the ship is plotted as a large dot. The 4 faces associated with each&#xA;  vertex are stored in the 4 nibbles of Bytes F1 and F2.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Each edge has 4 bytes of data. The visibility distance is stored in&#xA;  Byte V, with a maximum value of 31. The 2 faces associated with each&#xA;  edge are stored in the 2 nibbles of Byte F. Byte N1 contains the&#xA;  vertex id (*4) for one end of the line, Byte N2 the other end.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Each face has 4 bytes of data. The signs for each normal component are&#xA;  stored in bits 7,6,5 of Byte S. The lower 5 bits are a visibility&#xA;  distance, with a maximum value of 31 ensuring the face is processed&#xA;  for all distances until the ship is plotted as a large dot. The&#xA;  magnitudes of the normal's 3 components are stored in Bytes X,Y,Z.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The resulting hull shapes are still used in today's &lt;em&gt;Elite:Dangerous&lt;/em&gt;, though with much more detail added.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-01-06T06:42:11.030" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13275" PostTypeId="2" ParentId="9041" CreationDate="2020-01-06T08:22:59.893" Score="3" Body="&lt;p&gt;I worked on that system in Logel language, which is an old-fashioned language very similar  to IBM's RPG (Report Programming Language). Perhaps it also had COBOL, but I worked on that model in two different businesses and they only used Logel plus some accounting canned programs.&lt;/p&gt;&#xA;" OwnerUserId="15949" LastActivityDate="2020-01-06T08:22:59.893" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13276" PostTypeId="1" AcceptedAnswerId="13279" CreationDate="2020-01-06T09:34:50.360" Score="9" ViewCount="1907" Body="&lt;p&gt;Looking at the pinout of e.g. the 8088, it multiplexes the data lines onto eight of the address lines; presumably the designers judged that being able to squeeze the chip into a 40-pin package, would save more total system cost than the extra logic required in the memory system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was there also a potential slowdown due to having to use the same pin for two different signals one after the other, instead of having separate pins? Or is it irrelevant because address has to come before data anyway?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not that it would matter in the specific case of the 8088, which didn't drive the memory bus all that fast anyway, but I'm wondering if it would have been a limiting factor on a chip that did try to max out the memory bandwidth, e.g. using fast page mode where possible, and if so, whether 'we might need to make a cost-reduced version that multiplexes address and data lines' might have been one consideration to explain why pre-ARM CPUs did not max out the memory bandwidth (a surprising state of affairs in my opinion; memory bandwidth was a scarce resource, why leave some of it unused?).&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-07T00:30:53.973" Title="Did multiplexed address/data lines make memory access slower?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;memory&gt;&lt;cpu&gt;&lt;8088&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13277" PostTypeId="2" ParentId="13249" CreationDate="2020-01-06T10:03:50.587" Score="4" Body="&lt;p&gt;I would like to add a shout-out for BITNET.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting in the mid-70's IBM had an internal network connecting the multinational company's many sites.  It was called &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_VNET&quot; rel=&quot;nofollow noreferrer&quot;&gt;VNET&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then some bright soul decided &quot;Hey, our customers might like this too!&quot;  And so they did.  Starting in 1981, universities started connecting to each other using their IBM machines and the same protocols. (Though, obviously, IBM did &lt;em&gt;not&lt;/em&gt; let anybody connect to their internal network!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result was &lt;a href=&quot;https://en.wikipedia.org/wiki/BITNET&quot; rel=&quot;nofollow noreferrer&quot;&gt;BITNET&lt;/a&gt;. And it was glorious.  It spread to universities all over the world and convinced a generation of students that IBM was pretty neat.  The advertising value must have been enormous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later other computer manufacturers made compatible network suites so their computers too could take part. But soon after that, the Internet out-competed everything else and the world became its present boring self.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still miss some parts of BITNET, although I agree that taken as a whole, the Internet is way better.&lt;/p&gt;&#xA;" OwnerUserId="428" LastActivityDate="2020-01-06T10:03:50.587" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13278" PostTypeId="2" ParentId="13249" CreationDate="2020-01-06T10:28:57.143" Score="6" Body="&lt;p&gt;In the 80s the UK had &lt;a href=&quot;https://en.wikipedia.org/wiki/Prestel&quot; rel=&quot;noreferrer&quot;&gt;Prestel&lt;/a&gt;, an online videtex system delivered over phone lines and developed and operated by British Telecom. France had the similar &lt;a href=&quot;https://en.wikipedia.org/wiki/Minitel&quot; rel=&quot;noreferrer&quot;&gt;Minitel&lt;/a&gt; system, which had more content and more advanced functionality.&lt;/p&gt;&#xA;" OwnerUserId="14172" LastActivityDate="2020-01-06T10:28:57.143" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13279" PostTypeId="2" ParentId="13276" CreationDate="2020-01-06T12:48:26.520" Score="11" Body="&lt;p&gt;In general: memory needs &lt;em&gt;stable&lt;/em&gt; address for a while. So the real access time is &quot;time to address available + memory access time&quot;. If you use the CPU with a full address bus (Z80, 6502, ...), it can expose the whole address in one cycle, wait only &quot;memory access time&quot; interval, and you can read. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, let's take the 8085 CPU with a multiplexed data/address bus. Due &lt;a href=&quot;http://www.8085projects.info/Timing-Diagram-of-STA-IN-Instructions.html&quot; rel=&quot;noreferrer&quot;&gt;its timing diagram&lt;/a&gt;, the address is completely ready (i.e. buffered with the ALE signal) in the second half of T1. And &lt;em&gt;then&lt;/em&gt; you have to wait for the memory. At 2 MHz it is OK, safely under the memory access speed, but with faster CPU it should request some wait state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer is: yes, multiplexing is a little bit slower. Think about multiplexing as a special case of &quot;serial-parallel interface&quot; (or &quot;a serial interface on 8 data lines&quot;).&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-01-06T12:48:26.520" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13280" PostTypeId="2" ParentId="13276" CreationDate="2020-01-06T14:11:02.570" Score="8" Body="&lt;p&gt;The 65816 does the same thing; the most-significant 8 address bits are multiplexed onto the data bus pins during the Phi1 half of each clock cycle, and it reverts to being a data bus during the Phi2 half.  The WDC datasheet illustrates a simple external logic circuit which latches the address bits and isolates the data bus pins from a device responding prematurely to a read cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact this doesn't slow down memory access at all, provided you use sufficiently fast devices in the latching circuit.  There are people running the W65C816S-14 (rated up to 14MHz) at 16 and even 20 MHz, without any memory wait-states.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-01-06T14:11:02.570" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13281" PostTypeId="2" ParentId="13249" CreationDate="2020-01-06T14:48:25.900" Score="3" Body="&lt;p&gt;Another perspective: Before anyone could make such a network, they would have to &lt;em&gt;want&lt;/em&gt; one.  The usefulness of the Internet is obvious to us now that we have one, but if you assume its usefulness was obvious &lt;em&gt;before&lt;/em&gt; we had one, you are way off.&lt;/p&gt;&#xA;" OwnerUserId="15952" LastActivityDate="2020-01-06T14:48:25.900" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13282" PostTypeId="2" ParentId="13276" CreationDate="2020-01-06T15:42:57.403" Score="6" Body="&lt;p&gt;The 8088 (and Z80 and 1802 and many other older CPU designs, including minicomputers and mainframes) required multiple clock cycles to run each machine code instruction.  This was due to being implemented by internal microcoding, limited shared resources, or non-pipelined state machines, due to much lower transistor counts than todays processors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As long as the bus multiplex rate is sufficiently faster (in cycle time) than the CPU instructions that do memory loads and stores, there is no slow down. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Unless wait states are required, which can be needed on either multiplexed or non-multiplexed bus configurations, depending on memory subsystem latencies).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later designs of (internally)RISC or pipelined processor cores, which can execute one or more load/store instruction per clock cycle, require caches, non-multiplexed buses, and/or much wider buses to keep the CPU closer to fully utilized.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2020-01-07T00:30:53.973" LastActivityDate="2020-01-07T00:30:53.973" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13283" PostTypeId="1" CreationDate="2020-01-06T15:53:19.093" Score="4" ViewCount="113" Body="&lt;p&gt;A Telecommunication Devices for the Deaf (TDD, aka Text Telephony (TTY)) was an early modem capability to allow deaf people to use telephones by including a keyboard and output device (such as teletype, printer, line of LED text, etc.). There were devices available as early as 1964, communicating at about 50 baud using 5-bit characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the late 70s or early 80s I remember wondering why mass market analog modems did not include support for TDD devices.  Was there a technical reason, or did they just feel the potential market was too small for this feature?  I thought it would have been a good idea because then anyone with a modem could communicate with deaf people.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2020-01-06T15:53:19.093" Title="Did Hayes and/or other modem companies ever add TDD capability to their modems?" Tags="&lt;modem&gt;&lt;computer-accessibility&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13284" PostTypeId="5" CreationDate="2020-01-06T15:55:15.970" Score="0" Body="" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2020-01-06T15:55:15.970" LastActivityDate="2020-01-06T15:55:15.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13285" PostTypeId="4" CreationDate="2020-01-06T15:55:15.970" Score="0" Body="Use for questions regarding computer accessibility on older computer devices (prior to about 2000)." OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2020-01-06T15:55:15.970" LastActivityDate="2020-01-06T15:55:15.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13286" PostTypeId="2" ParentId="13259" CreationDate="2020-01-06T16:08:19.880" Score="4" Body="&lt;p&gt;Even Cassette Basic offered many features not present in the 6502 dialects, including the ability to use long variable names, support for both single and double-precision floating point, support for both 16-bit and 32-bit integer types, support for hex and octal numbers, and many other features.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-01-06T16:08:19.880" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13287" PostTypeId="2" ParentId="12645" CreationDate="2020-01-06T17:05:03.787" Score="3" Body="&lt;p&gt;I have a very similar desire as you.  However, mine goes much deeper.  I have a desire to create a competitor for the following: &lt;code&gt;KIM-1&lt;/code&gt;, &lt;code&gt;Atari 800&lt;/code&gt;, &lt;code&gt;NES&lt;/code&gt;, &lt;code&gt;Apple II&lt;/code&gt;, etc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 2018, I created, designed and produced my first SBC that could have been built in 1979 and would have competed with the Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I have a little bit of experience but I'm no expert.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days it's so easy to grab an entry-level FPGA and just create the entire computer.  That's fine for some people but not for me.  I also believe the Commander X16 is clearly David's &quot;dream computer&quot; and not anything that would have existed in the 80's.  He even calls it his &quot;dream computer&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computer you mentioned would be tough to beat in 1979.  But you said a competitor.  Not a &quot;killer&quot;.  In 1979, a competitor to the Atari 800 would have been the TI-99/4(a), TRS-80, PET and Apple II+.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what would it take to create a computer during that time?  I assume your fictional company wouldn't have had deep pockets to create custom chips.  Only Atari and TI could do that in 1979 (at least for the home market).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said all of that, I would assume the following specs for an Atari 800 competitor:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Color Graphics (TMS9918)&lt;/li&gt;&#xA;&lt;li&gt;At least 32KiB of RAM&lt;/li&gt;&#xA;&lt;li&gt;Audio (AY-3-8910)&lt;/li&gt;&#xA;&lt;li&gt;BASIC (EhBASIC)&lt;/li&gt;&#xA;&lt;li&gt;Serial&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now, the next step is to decide how authentic you want to be.  If you want real authenticity, you would only use parts that were manufactured back then.  This is certainly possible but I think you limit yourself and it makes the design much harder.  In my SBC (search for Potpourri6502 on the 6502 forums), I only used parts that are still made today.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One example I'm talking about is the RAM.  It is &lt;em&gt;MUCH&lt;/em&gt; easier to just use a static RAM chip (SRAM) in the quantities we're talking about than try to design a DRAM equivalent.  Most 8-bit computers at the time used dynamic RAM (DRAM) because it was cheaper.  SRAM DID exist.  But it was very expensive.  It still is.  But for &amp;lt; 128 KiB, SRAM is only a few dollars.  Your fictional computer could just pretend it used DRAM if you like.  :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means I think it's OK to take a few modern conveniences and still pretend you're competing with Atari.  This is all just for fun anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So let's start with graphics.  I would suggest using the TMS9918.  It's not made any more but they are very easy to obtain (don't buy from China...most are fakes or defects).  The TMS9918 isn't as powerful as the ANTIC/GTIA solution from Atari.  But it's very popular for the day and it's pretty easy to work with.  However, it requires its own RAM and that RAM is normally DRAM.  However, there are circuits out there that can use SRAM with it.  It's just a little more involved (my GitHub repo has an example here &lt;a href=&quot;https://github.com/cbmeeks/TMS9918/blob/master/SRAM%2BReplacement%2Bfor%2BTMS99x8%2BVRAM.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/cbmeeks/TMS9918/blob/master/SRAM%2BReplacement%2Bfor%2BTMS99x8%2BVRAM.pdf&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next is the CPU.  I would pick the 65C02.  Sure, the Z80 is a good choice too.  I'm just partial to the 6502.  BOTH are still produced today.  But remember, you're making a competitor.  There were Z80 based machines with the TMS9918 in the 80's.  You want something different.  Definitely get the 65C02 and visit the guys at the 6502 forums.  They have excellent information!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next is the RAM.  I would shoot for 32KiB.  The TMS9918 has it's own RAM which is 16KiB.  So your system could be advertised as &quot;48KiB&quot; system.  Which is what the Atari 800 had.  If you go with the 65C02, you can follow the EXCELLENT 6502 primer here:  &lt;a href=&quot;http://wilsonminesco.com/6502primer&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wilsonminesco.com/6502primer&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next would be audio.  I would recommend the AY-3-8910.  Like the TMS9918, it's not made anymore but obtaining them is very easy.  The 8910 also has two I/O ports that could be tied to joystick ports.  The 8910 isn't as good as the Pokey in the Atari 800.  But, you could use two of them.  Giving your computer 6 voices (channels) over the Atari's 4.  Or heck, use four of them like the Phasor did for the Apple II.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next would be I/O.  I suggest using a 65C22 VIA to control the audio chips and provide a simple parallel or serial port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next would be serial (UART).  The 65C22 VIA can do serial and parallel communications.  But I'm talking about true RS-232 communications with other computers.  A good example is the 65C51.  Which is also still produced (despite a nasty bug).  This chip is simple and easy to work with.  Just not very powerful.  Just keep in mind that if you want to connect to a real RS-232 port, you will need level converters such as the MAX232 (or variants).  Again, the folks at 6502 forums and primer can help with this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, software.  I recommend the excellent EhBASIC.  It's easy to get going.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these components would make an excellent computer.  If this computer came out in 1979 or 1980 and was actually made in quantity (with a reasonable price), it would have ran toe-to-toe with an Atari 800.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this helps.  Feel free to find me on the 6502 forums (cbmeeks) if you want to discuss further.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2020-01-06T17:05:03.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13288" PostTypeId="2" ParentId="13272" CreationDate="2020-01-06T19:02:44.717" Score="3" Body="&lt;p&gt;I have always gotten good results with ImageDisk (IMD) running on a retro PC under MS-DOS. You need a machine that has a compatible floppy controller, which most of the PC's from the 1980s and 1990s did. From the IMD manual:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;ImageDisk is a program to read entire diskette images into files (type .IMD),&#xA;  and to recreate a copy of the diskette from that image. A detailed analysis&#xA;  is performed on the diskette, and information about the formatting is recorded&#xA;  in the image file. This allows ImageDisk to work with virtually any soft-&#xA;  sectored diskette format that is compatible with the PC's type 765 floppy&#xA;  diskette controller and drives.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;My testing of IMD with Atari ST images is limited, but it is certainly an easy thing to try if you have access to a sufficiently vintage DOS PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can download IMD from &lt;a href=&quot;http://www.classiccmp.org/dunfield/img/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dave's Old Computers.&lt;/a&gt; The ZIP file includes pretty good documentation and the program has built-in help to explain the many things about the disk format that can be tweaked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have always found IMD to be very capable with floppies and images that are from machines that used the same basic floppy controller family as was used for PC clones - Atari ST, BBC, TRS-80, etc.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-01-06T19:02:44.717" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13290" PostTypeId="1" CreationDate="2020-01-06T19:44:50.200" Score="25" ViewCount="9105" Body="&lt;p&gt;In comments to a parallel question (&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/13259/6659&quot;&gt;Why was IBM BASIC so Huge?&lt;/a&gt;) one point discussed is code density of 8 vs. 16 bit CPUs. Some assumptions were that 16-bit must be more bloaty due to its need for an address mode byte in each instruction, whereas 8-bit includes this in the opcode, while others claimed 8086 code to be quite compact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this reminds of the old CPU-wars, there must be some tradeoff, as the ROM sizes in some examples are quite close between x80 and x86.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-09T21:55:26.607" LastActivityDate="2020-05-07T14:18:12.320" Title="8080 vs. 8086 - Are 16 Bit CPUs bloaty by nature?" Tags="&lt;8080&gt;&lt;8086&gt;" AnswerCount="4" CommentCount="15" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13291" PostTypeId="2" ParentId="13290" CreationDate="2020-01-06T19:44:50.200" Score="37" Body="&lt;p&gt;&lt;em&gt;[Preface: This is neither about discussing programming tricks nor how some changes could squeeze out a byte or two. Code can often be optimized by narrowing down the environment. The examples are meant rather for a generic estimation. ]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question has already been asked in ways of &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4481&quot;&gt;6502 vs. Z80&lt;/a&gt; and PNDC provided a &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4482/6659&quot;&gt;good answer&lt;/a&gt; pointing out that real code can always be seen as a form of variable length encoding preferring shorter codes for more often used instructions. He as well cites a quite nice paper about &lt;a href=&quot;http://web.eece.maine.edu/~vweaver/papers/iccd09/iccd09_density.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Code Density Concerns&lt;/a&gt;. Here various architectures, including Z80 and 8086 are treated in assembly to solve certain problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper puts x86 (*1), in all explicit examples, ahead of the Z80 (*2). So  16 bit seems like a clear winner in code size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except, it somehow feels wrong, doesn't it? I mean, it's easy to see that a &lt;code&gt;MOV A,B&lt;/code&gt; in 8080 is a single byte (78h), while a similar &lt;code&gt;MOV AL,CH&lt;/code&gt; in 8086 needs two bytes (88h C5h). So maybe some explicit example?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets take a routine like it's seen in many BASICs/OSes during startup - checking the available memory. One simple way to do is to see if bytes can be changed at will. There may be many machine specific ways to do so, this is a simple generic, checking every first byte of a 256 byte page of it can be written. It scans from some RAMSTRT to MAXRAM, whatever these values are on a specific system, and returns the highest page plus 1 when done. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I'm using straight 8080 code for this examples. Z80 doesn't differ much (*3))&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0000                RAMSTRT   EQU   0*1024   &#xA;0000                MAXRAM    EQU   48*1024   &#xA;0000                             ; &#xA;0000   21 00 00               LXI   H,RAMSTRT ;FIRST PAGE&#xA;0003   06 C0                  MVI   B,(MAXRAM-RAMSTRT)/256   ;MAX PAGES TO CHECK&#xA;0005   7E           NPAGE:    MOV   A,M     ;GET BYTE&#xA;0006   2F                     CMA           ;COMPLEMENT&#xA;0007   77                     MOV   M,A     ;STORE IT&#xA;0008   BE                     CMP   M       ;DID IT GET STORED&#xA;0009   C2 13 00               JNZ   MSIZE   ;NO -&amp;gt; NOT RAM&#xA;000C   2F                     CMA           ;COMPLEMENT BACK&#xA;000D   77                     MOV   M,A     ;RESTORE BYTE&#xA;000E   24                     INR   H       ;NEXT PAGE&#xA;000F   05                     DCR   B       ;MAX TESTED?&#xA;0010   C2 05 00               JNZ   NPAGE   &#xA;0013                MSIZE:    ;H CONTAINS THE MAXIMUM PAGE NUMBER+1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Simple, straightforward and 19 Bytes in length.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same, translated for 8086. After all the 8086 was made to make 8080 source translation simple by using tools like Trans86 or &lt;a href=&quot;http://www.s100computers.com/Software%20Folder/Assembler%20Collection/Digital%20Research%20XLT86%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;XLT86&lt;/a&gt; (*4)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;= 0000              RAMSTRT EQU      0*1024  &#xA;= C000              MAXRAM  EQU     48*1024&#xA;&#xA;0100  BB 0000               MOV     BX,0    ;FIRST PAGE&#xA;0103  B1 C0                 MOV     CL,(MAXRAM-RAMSTRT)/256 ;MAX PAGES TO CHECK&#xA;0105  8A 07         NPAGE:  MOV     AL,[BX] ;GET BYTE&#xA;0107  F6 D0                 NOT     AL      ;COMPLEMENT&#xA;0109  88 07                 MOV     [BX],AL ;STORE IT&#xA;010B  3A 07                 CMP     AL,[BX] ;DID IT GET STORED&#xA;010D  75 0A                 JNZ     MSIZE   ;NO -&amp;gt; NOT RAM&#xA;010F  F6 D0                 NOT     AL      ;COMPLEMENT BACK&#xA;0111  88 07                 MOV     [BX],AL ;RESTORE BYTE&#xA;0113  FE C7                 INC     BH      ;NEXT PAGE&#xA;0115  FE C9                 DEC     CL      ;MAX TESTED?&#xA;0117  75 EC                 JNZ     NPAGE&#xA;0119                MSIZE:  ;BH CONTAINS THE MAXIMUM PAGE NUMBER+1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Same program, but 25 Bytes in length. That's an &lt;strong&gt;increase of ~31%&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, the example is picked on purpose, as 8 of the 12 instructions are single byte on the 8080 side, which usually result in the worst case result of doubling code size. Except here it's offset already due no additional bytes used for R/M on the immediate loads and the short jumps the 8086 features. So already a straight translation without using any new feature or optimization produces acceptable results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now lets take something else, maybe were the x86 can use some of its advantage. For example swapping two memory blocks - a task which could happen for example in a simple multiprogram environment (*5).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0000                BLOCK1:   EQU   1000h   &#xA;0000                BLOCK2:   EQU   2000h   &#xA;0000   0E 00                  MVI   C,0     ;BLOCKLN = 256&#xA;0002   21 00 10               LXI   H,BLOCK1   &#xA;0005   11 00 20               LXI   D,BLOCK2   &#xA;0008   46           XLP:      MOV   B,M     ;LOAD BYTE FROM BLK1&#xA;0009   1A                     LDAX  D       ;LOAD BYTE FROM BLK2&#xA;000A   77                     MOV   M,A     ;STORE BYTE TO BLK1&#xA;000B   78                     MOV   A,B     ;&quot;SWAP&quot; TO A&#xA;000C   12                     STAX  D       ;STORE BYTE TO BLK2&#xA;000D   03                     INX   B       ;POINTER IN BLK1&#xA;000E   23                     INX   H       ;POINTER IN BLK2&#xA;000F   0D                     DCR   C   &#xA;0010   C2 08 00               JNZ   XLP     ;NOT DONE -&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;19 bytes so far for the ability to swap 1..256 bytes between two memory regions without (*6,7). On the 8086 the new instructions simplify the task:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;= 1000              BLOCK1 EQU   1000h&#xA;= 2000              BLOCK2 EQU   2000h&#xA;&#xA;0100  B9 0080              MOV   CX,128  ;BLOCKLN&#xA;0103  BF 1000              MOV   DI,BLOCK1&#xA;0106  BE 2000              MOV   SI,BLOCK2&#xA;0109  FC                   CLD           ;DIRECTION UPWARD&#xA;010A  8A 05         XLP:   MOV   AL,[DI] ;LOAD BYTE FROM BLK1&#xA;010C  86 04                XCHG  AL,[SI] ;EXCHANGE TO BLK2&#xA;010E  AA                   STOSB         ;STORE BYTE AND INC PTR&#xA;010F  46                   INC   SI      ;POINTER IN BLK2&#xA;0110  E2 F8                LOOP  XLP     ;DEC COUNTER AND LOOP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;18 Bytes, that's one byte or &lt;strong&gt;6% less&lt;/strong&gt; - plus the ability to swap up to 64 KiB at once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while the first example, made on purpose to let the 8086 look bad only resulted in 31% code bloat, the second did tune this. Both have been selected to be simple enough to show what it's about without hours of study. More complex examples will show that the 8086 will in next to all non trivial cases offer higher code density than an 8080 (or Z80).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The remarkable point here is 'greater ability' while singular instructions need slightly more encoding, the CPU offers a larger number of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conclusion: &lt;strong&gt;For similar tasks, 8086 code density will play in the same range as 8 bit code - or better.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One point to keep in mind is that cross platform programs, like the mentioned BASIC, have not been rewritten throughout for each new CPU (*8), but just adapted. So 30% increase (30 KiB instead of 24) looks much like in the range of what an automatic translation could provide - even when ignoring the enhanced features provided by the 8086 version.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - In form of i386.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - For total length (Fig.2) the Z80 gains a slight advantage, but it's explained that this may be rather due platform specific issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Due the use of a prefix byte most enhanced Z80 instructions do not perform as well as one might assume - but that's a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - I didn't pull out either, just hand translated. It's simple enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - This is inspired by a problem Alan Cox mentioned during Fuzix development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - This is on purpose not an example where the 8086 will excel due specific abilities, but something more common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*7 - To be less hard, I did skip one of the most obvious advantage of the 8086, the ability to hold two 16 bit pointers and a 16 bit counter at the same time. Here it would allow to swap more than 256 bytes at once with the very same code - for the 8080 a few more instructions would have been necessary, as it can not hold 3 16 bit pointers &lt;em&gt;plus&lt;/em&gt; two 8 bit values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*8 - Microsoft BASIC 2 as used for the Apple and Commodore is a great example. Its development process seemed to be based on an emulation of 8080 instructions via macros and a step by step optimization thereafter.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-07T14:18:12.320" LastActivityDate="2020-05-07T14:18:12.320" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13292" PostTypeId="1" AcceptedAnswerId="13293" CreationDate="2020-01-06T19:50:44.523" Score="2" ViewCount="165" Body="&lt;p&gt;As I understand it, the Vic-20 reads and writes the cassette deck by the low-tech expedient of just using the CPU to bit-bang a one-bit serial line. This presumably means that for a given code sequence, the cassette baud rate depends on the CPU clock speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way, on a stock Vic-20, to write a cassette tape such that it will be written at the same baud rate even if the CPU speed varies, e.g. if it were overclocked?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-06T20:52:37.063" Title="Vic-20 tape I/O dependence on CPU speed?" Tags="&lt;hardware&gt;&lt;cassette-tape&gt;&lt;vic-20&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13293" PostTypeId="2" ParentId="13292" CreationDate="2020-01-06T20:37:48.907" Score="4" Body="&lt;p&gt;You're in luck — I believe that tape reading and writing is already CPU speed independent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reading, the 1-bit tape input is provided as the CA1 input to the keyboard VIA. The OS sets it up to generate an interrupt on its rising edge. At each interrupt it interrogates the VIA's timer to determine how long the most recent wave was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So as long as you don't change the VIA clock speed, the CPU speed shouldn't matter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the routine from &lt;code&gt;LAB_F98E&lt;/code&gt; in &lt;a href=&quot;https://www.mdawson.net/vic20chrome/vic20/docs/kernel_disassembly.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;this disassembly&lt;/a&gt; which, as it purports to be, is the routine called by a relevant input-level transition interrupt, and interrogates the second timer of the keyboard VIA, VIA 2 in order to discriminate the wave just seen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a little vaguer on it, but I believe the same mechanism in reverse is used to write bytes — looking at &lt;code&gt;LAB_FBF5&lt;/code&gt; and calls into it, the procedure seems to be to toggle the output and establish a VIA timer interrupt for when the next toggle should occur.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-01-06T20:52:37.063" LastActivityDate="2020-01-06T20:52:37.063" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13294" PostTypeId="1" CreationDate="2020-01-06T20:44:30.943" Score="22" ViewCount="657" Body="&lt;p&gt;From Ed Nather's hacker-epic &lt;a href=&quot;http://catb.org/jargon/html/story-of-mel.html&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;The Story of Mel&amp;quot;&lt;/a&gt; (using the original paragraph-formatting to save space in this question):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The firm manufactured the LGP-30, a small, cheap (by the standards of the day)&#xA;drum-memory computer, and had just started to manufacture the RPC-4000, a much-improved, bigger, better, faster — drum-memory computer.&lt;br /&gt;&#xA;[...]&lt;br /&gt;&#xA;Perhaps my greatest shock came when I found an innocent loop that had no test in it. No test. &lt;em&gt;None&lt;/em&gt;. Common sense said it had to be a closed loop, where the program would circle, forever, endlessly. Program control passed right through it, however, and safely out the other side. It took me two weeks to figure it out.&lt;/p&gt;&#xA;&lt;p&gt;The RPC-4000 computer had a really modern facility called an index register. It allowed the programmer to write a program loop that used an indexed instruction inside; each time through, the number in the index register was added to the address of that instruction, so it would refer to the next datum in a series. He had only to increment the index register each time through. Mel never used it.&lt;/p&gt;&#xA;&lt;p&gt;Instead, he would pull the instruction into a machine register, add one to its address, and store it back. He would then execute the modified instruction right from the register. The loop was written so this additional execution time was taken into account -- just as this instruction finished, the next one was right under the drum's read head, ready to go. But the loop had no test in it.&lt;/p&gt;&#xA;&lt;p&gt;The vital clue came when I noticed the index register bit, the bit that lay between the address and the operation code in the instruction word, was turned on-- yet Mel never used the index register, leaving it zero all the time. When the light went on it nearly blinded me.&lt;/p&gt;&#xA;&lt;p&gt;He had located the data he was working on near the top of memory -- the largest locations the instructions could address -- so, after the last datum was handled, incrementing the instruction address would make it overflow. The carry would add one to the operation code, changing it to the next one in the instruction set: a jump instruction. Sure enough, the next program instruction was in address location zero, and the program went happily on its way.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A programmer's manual for the Royal Precision LGP-30 computer is available &lt;a href=&quot;http://ed-thelen.org/comp-hist/lgp-30-man.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. It does not seem to have an &amp;quot;index register&amp;quot;; it does have what it calls a &amp;quot;counter register&amp;quot; but that's just a traditional &amp;quot;program counter&amp;quot;/&amp;quot;instruction pointer.&amp;quot; Which also means that the LGP-30 definitely did not have the &amp;quot;every instruction followed by a GO TO&amp;quot; feature that Ed Nather attributes to its successor the RPC-4000. The lack of an &amp;quot;index register&amp;quot; is also indicated by how the LGP-30 manual uses instruction modification to do load-from-consecutive-indices in a loop, &lt;a href=&quot;http://ed-thelen.org/comp-hist/lgp-30-man.html#R3.07&quot; rel=&quot;noreferrer&quot;&gt;in this section of the manual&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Internet Archive has an &lt;a href=&quot;https://archive.org/details/bitsavers_royalPrecirogrammingManual_8537458/page/n25&quot; rel=&quot;noreferrer&quot;&gt;RPC-4000 manual&lt;/a&gt; which &lt;em&gt;does&lt;/em&gt; indicate the presence of a &amp;quot;next address&amp;quot; field and an &amp;quot;index tag field&amp;quot; (in the lowest-order bit). Ed Nather's story talks about &amp;quot;a jump instruction,&amp;quot; which the RPC-4000 doesn't have; but if you were to increment a command word whose index bit was set, you'd end up overflowing into the &amp;quot;next address&amp;quot; field, which could probably be made to do something similar, maybe?&lt;/p&gt;&#xA;&lt;p&gt;Can anyone provide an example of an &amp;quot;infinite loop&amp;quot; that uses anything resembling Mel's technique to break the loop?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;There's some previous discussion &lt;a href=&quot;https://news.ycombinator.com/item?id=20489273&quot; rel=&quot;noreferrer&quot;&gt;on Hacker News here&lt;/a&gt;. Commenter &amp;quot;kps&amp;quot; points to an FTP site where you can download an LGP-30 simulator (written in Pascal): &lt;a href=&quot;ftp://ftp.informatik.uni-stuttgart.de/pub/cm/lgp30/simulator/lgp30sim.zip&quot; rel=&quot;noreferrer&quot;&gt;ftp://ftp.informatik.uni-stuttgart.de/pub/cm/lgp30/simulator/lgp30sim.zip&lt;/a&gt;&lt;br /&gt;&#xA;and a blackjack game (ASCII dump of the machine code): &lt;a href=&quot;ftp://ftp.informatik.uni-stuttgart.de/pub/cm/lgp30/papertapes/Games/bkjck.tx&quot; rel=&quot;noreferrer&quot;&gt;ftp://ftp.informatik.uni-stuttgart.de/pub/cm/lgp30/papertapes/Games/bkjck.tx&lt;/a&gt;&lt;br /&gt;&#xA;If it's possible to &amp;quot;disassemble&amp;quot; that blackjack game, that at least would be very interesting, even if it might not answer the question because the LGP-30 wasn't much like the RPC-4000.&lt;/p&gt;&#xA;" OwnerUserId="3581" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-16T06:32:30.590" Title="Reconstruct the loop from &quot;The Story of Mel&quot;" Tags="&lt;instruction-set&gt;&lt;minicomputers&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13295" PostTypeId="2" ParentId="13290" CreationDate="2020-01-06T21:54:00.133" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;one point discussed is code density of 8 vs. 16 bit CPUs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;At least Sun Microsystems recommended to write 32-bit applications for 64-bit versions of Solaris unless 64-bit integer operations are used and/or there is the need of more than 4 GiB of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the reason was the data size (each pointer variable requires 8 instead of 4 bytes), not the code size (which is nearly the same in 32- and 64-bit code for Sparc CPUs).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Some assumption was that 16 bit must be more bloaty due its need for an address mode byte in each instruction ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;MC68HC11 is a 16-bit CPU; it is binary compatible to the 8-bit MC6800 - so instructions that already existed for the 6800 have the same length.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And even some 16-bit instructions (like &lt;code&gt;ADDD&lt;/code&gt;) have the same length as the corresponding 8-bit instruction (unless immediate data is used, of course).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same is true for the Hitachi 6301 which adds - according to Wikipedia - even (undocumented) 32-bit instructions to the MC6800 instruction set...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, you can design an 8-bit CPU with an additional addressing byte (for example an MC6809-compatible microcontroller without the D register instructions).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the reason for the longer code is not the word size (8- vs. 16 bits), but the additional addressing features.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... while others claimed 8086 code to be quite compact.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&quot;Compact&quot; compared to ...&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;... the 68000,&lt;/li&gt;&#xA;&lt;li&gt;... the Z80 with 64 KiB memory or&lt;/li&gt;&#xA;&lt;li&gt;... the Z80 addressing more memory using bank switching?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In this context you have to see the overhead needed to address more than 64 KiB of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;push ax&#xA;mov ax, XXXX&#xA;mov es, ax&#xA;pop ax&#xA;add ax, es:[YYYY]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Would look like this if you use the 8086 in a computer that has only 64 KiB of memory:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;add ax, [YYYY]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And in the case of BASIC there are even additional commands (&lt;code&gt;DEF SEG&lt;/code&gt;) which are required due to the segment registers.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2020-01-06T21:54:00.133" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13297" PostTypeId="2" ParentId="13290" CreationDate="2020-01-07T10:18:12.413" Score="13" Body="&lt;p&gt;It's possible to write bloated code for any CPU.  Reportedly one of the candidate operating systems for the Acorn Archimedes was dropped because it couldn't run sixteen simple tasks in 4MB RAM without swapping, while &quot;Arthur&quot; (which became RiscOS) was demonstrated to be able to do it in 256KB.  With RAM prices at the time, that was a huge advantage.  One reason was that Arthur was tightly coded in ARM assembly by people who knew what they were doing, while its rival was written in a Modula-2 variant with a particularly dumb compiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, 16-bit CPUs tend to have larger instruction words than their 8-bit ancestors, but it's possible to do more with each instruction.  For example, it's much more likely that a 16-bit CPU will have built-in multiply and divide instructions, and will handle more conveniently sized integers with single operations, reducing the need to write and call software routines for those purposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8086 is actually exceptional in that it &lt;em&gt;doesn't&lt;/em&gt; handle its full physical address space even &lt;em&gt;as&lt;/em&gt; conveniently as the typical 8-bit CPU; rivals such as the 65816, 6809 and 68000 are at least no worse than their ancestors, and often better (the latter two being able to hold and manipulate full-size pointers in registers).  Technically the 68000 should be classed as a 32-bit CPU, but machines based on it are generally counted in the &quot;16-bit generation&quot;.  But this means that code wanting to take full advantage of the 8086's memory space will be more bloated than average.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To illustrate this, let's take the memory-size-scanning benchmark from an earlier answer, and rewrite it for the 65816, probably the simplest 16-bit CPU of any note, with full 24-bit addressing support:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PTR=$80&#xA;ScanRAM:&#xA; ; select 8-bit accumulator, 16-bit index registers&#xA; SEP #$20&#xA; REP #$10&#xA; ; initialise pointer in zero page&#xA; STZ PTR&#xA; STZ PTR+1&#xA; LDA #RAMSTART ; high 8 bits of start address&#xA; STA PTR+2&#xA; LDX ##MAXRAM-RAMSTART&#xA; LDY ##0&#xA;scanloop:&#xA; LDA [PTR],Y&#xA; EOR #$FF&#xA; STA [PTR],Y ; write complement and see if it stuck&#xA; CMP [PTR],Y&#xA; BNE notram&#xA; EOR #$FF&#xA; STA [PTR],Y ; restore original RAM contents&#xA; INY&#xA; BNE scanloop&#xA; INC PTR+2 ; increment high byte of address&#xA; DEX&#xA; BNE scanloop&#xA;notram:&#xA; STY PTR&#xA; RTS ; 24-bit PTR now contains address of first non-RAM byte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If we compare this with 8-bit 65C02 code capable of operating in its full 16-bit address space, we find that we only need to drop the initial SEP and REP instructions (2 bytes each), the LDX and LDY instructions get one byte smaller each because they are loading 8-bit constants instead of 16-bit ones, and one of the early STZ instructions is deleted (2 bytes).  The &lt;em&gt;only&lt;/em&gt; other changes needed do not change the size or existence of any instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the 65816 code for a 24-bit address space takes 43 bytes, and the 65C02 code for a 16-bit address space takes 35 bytes; the 65816 code is 23% larger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if we say that 16-bit address support is sufficient for both CPUs, we can instead write the following for the 65816:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ScanRAM:&#xA; ; select 8-bit accumulator, 16-bit index registers&#xA; SEP #$20&#xA; REP #$10&#xA; LDY ##RAMSTART&#xA; LDX ##MAXRAM-RAMSTART  ; full 16-bit addresses&#xA;scanloop:&#xA; LDA $0000,Y ; absolute indexed, no zero-page reference&#xA; EOR #$FF&#xA; STA $0000,Y ; write complement and see if it stuck&#xA; CMP $0000,Y&#xA; BNE notram&#xA; EOR #$FF&#xA; STA $0000,Y ; restore original RAM contents&#xA; INY&#xA; DEX&#xA; BNE scanloop&#xA;notram:&#xA; RTS ; 16-bit Y register now contains address of first non-RAM byte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here some of the instructions actually get bigger, but some other instructions are deleted.  The total code size is now 33 bytes, &lt;strong&gt;smaller&lt;/strong&gt; than the 8-bit 65C02 equivalent, and considerably faster due to the use of more efficient addressing modes.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-01-07T10:18:12.413" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13298" PostTypeId="2" ParentId="9411" CreationDate="2020-01-07T12:25:20.463" Score="4" Body="&lt;p&gt;I'd think on the lines of the archive.org folks (many people has uploaded their significant magazines in the past, me included) or the Living Computer Museum. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scanning the tabloid-sized tomes is not going to be trivial, as the size is much larger than other magazines of the period, and the paper was thin and there is a lot of leakage from the other sides of the page (this could be an interesting endeavour for the image processing folk).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another approach is to check the nearest computer museum or library that is equipped to scan the volumes. You can volunteer some time to help do it, if they have the equipment but are a bit short in people.&lt;/p&gt;&#xA;" OwnerUserId="6854" LastActivityDate="2020-01-07T12:25:20.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13300" PostTypeId="2" ParentId="13249" CreationDate="2020-01-07T21:16:54.487" Score="3" Body="&lt;p&gt;In &quot;the 70s and 80s&quot; I for one had no need of a makeshift internet, because I worked for DEC which had its own worldwide computer network - limited to DEC employees, sure, but everyone you'd want to talk to worked for DEC anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many people, including me, had an async terminal at home, with an acoustic coupler or modem; we'd dial in to our office (typically to a switch that could then get you connected to multiple computers) and be on the network that way.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-01-07T21:16:54.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13301" PostTypeId="1" AcceptedAnswerId="13304" CreationDate="2020-01-07T22:17:31.810" Score="10" ViewCount="984" Body="&lt;p&gt;Early pioneers building memory cards for personal computers, tended to use static RAM, because it's quite a bit easier to get to work. Later, dynamic RAM became de rigueur, for the simple and sufficient reason that it costs a lot less per kilobyte; as far as I know, the Vic-20 was the last computer to use static RAM for its main memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I can tell, the difference in price per kilobyte became larger over time, as density increased. The ads in the back of Byte magazine are a good way to check memory prices... at least they become so from the late seventies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But looking at 1975-76, I'm surprised I can't find any ads for DRAM chips at all. I wonder is that more because the cost advantage was not yet that great, or because it was that great but the hardware hacking community was not yet ready to deal with them, no matter what the advantage?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: in, say, 1975, when the personal computer industry was just getting off the ground with the Altair and the Homebrew Computer Club: what was the cost differential between DRAM and SRAM?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-14T11:22:47.333" Title="Cost of dynamic versus static RAM in the early days" Tags="&lt;history&gt;&lt;memory&gt;&lt;cost&gt;&lt;ram&gt;&lt;dram&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13302" PostTypeId="1" AcceptedAnswerId="13303" CreationDate="2020-01-07T23:51:52.313" Score="7" ViewCount="346" Body="&lt;p&gt;By the title I mean a built in option rather than a software or hardware add on and saving / loading to regular domestic audio cassette tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We should exclude all third party type loaders from this aka &quot;hyperload&quot; or such as it is only aimed at built in options please.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I  aware of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Oric&quot; rel=&quot;noreferrer&quot;&gt;Oric&lt;/a&gt; offering a selectable 2400 or 300 rate as well as the &lt;a href=&quot;http://beebwiki.mdfs.net/Acorn_cassette_format&quot; rel=&quot;noreferrer&quot;&gt;BBC Micro&lt;/a&gt; (possibly Electron too but I cannot confirm that) offering a 1200 and 300 rate. The &lt;a href=&quot;http://cpctech.cpc-live.com/docs/loaders.html&quot; rel=&quot;noreferrer&quot;&gt;Amstrad CPC&lt;/a&gt; range also offers 1000 or 2000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question is as per the title , what other machines offered this choice as a built in option please ?&lt;/p&gt;&#xA;" OwnerUserId="15907" LastEditorUserId="6659" LastEditDate="2020-01-08T00:52:17.373" LastActivityDate="2020-01-11T07:30:32.297" Title="What home computers offered an adjustable tape baud rate" Tags="&lt;cassette-tape&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13303" PostTypeId="2" ParentId="13302" CreationDate="2020-01-08T00:51:03.097" Score="8" Body="&lt;p&gt;I'd say a rather large number of early systems did - maybe even a majority.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A quick list from memory:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(On purpose not exhaustive, only meant to show that there were many - and for a reason)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Processor Technology SOL-PC/10/20&lt;/li&gt;&#xA;&lt;li&gt;Any S100 machine with a Processor Technology CUTS board&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/3345/6659&quot;&gt;Exidy Sorcerer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Acorn Atom/BBC&lt;/li&gt;&#xA;&lt;li&gt;Heathkit H8&lt;/li&gt;&#xA;&lt;li&gt;NASCOM-1/-2&lt;/li&gt;&#xA;&lt;li&gt;OSI C1P&lt;/li&gt;&#xA;&lt;li&gt;TA Alphatronic PC&lt;/li&gt;&#xA;&lt;li&gt;MSX (1200/2400)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of them and many more offered a 300/1200 Bd storage. The reason lays within the topmost two entries, as Prozessor Technologies CUTS board, bzw. the SOL-PC/SOL-20 was used as base for the &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8100/6659&quot;&gt;Kansas City standard&lt;/a&gt; used by the large majority of early systems. While only compatibility was required for 300 Bd, many implemented 1200 Bd as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;MSX systems are a bit of an outlier here, as the lowest speed offered it a KCS compatible 1200 Bd, while the 2400 Bd uses the same format but modified frequencies.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-08T01:12:02.583" LastActivityDate="2020-01-08T01:12:02.583" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13304" PostTypeId="2" ParentId="13301" CreationDate="2020-01-08T03:03:14.980" Score="11" Body="&lt;p&gt;I did find some prices in BYTE:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/byte-magazine-1975-11/page/n91&quot; rel=&quot;noreferrer&quot;&gt;November 1975, page 91&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2107  4Kx1 Dynamic: $19.95 (0.49 cents/byte)&lt;br&gt;&#xA;  2111  256x4 Static: -- not listed&lt;br&gt;&#xA;  1101  256x1 Static: $2.25 (0.89 cents/byte)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/byte-magazine-1976-04/page/n89&quot; rel=&quot;noreferrer&quot;&gt;April 1976, page 89&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2107  4Kx1 Dynamic: $19.95 (0.49 cents/byte)&lt;br&gt;&#xA;  2111  256x4 Static: $7.95 (0.77 cents/byte)&lt;br&gt;&#xA;  1101  256x1 Static: $2.25 (0.89 cents/byte)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/byte-magazine-1977-05/page/n169&quot; rel=&quot;noreferrer&quot;&gt;Byte May 1977 - Page 170&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2107  4Kx1 Dynamic: $4.95 (0.12 cents/byte)&lt;br&gt;&#xA;  2111  256x4 Static: $6.95 (0.68 cents/byte)&lt;br&gt;&#xA;  1101  256x1 Static: $1.49 (0.58 cents/byte)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So it looks like even in 1975 dynamic ram was cheaper per bit.&lt;/p&gt;&#xA;" OwnerUserId="660" LastActivityDate="2020-01-08T03:03:14.980" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13305" PostTypeId="2" ParentId="13290" CreationDate="2020-01-08T05:18:24.003" Score="1" Body="&lt;p&gt;Depends on what your code is doing.  The amount of code (in bytes) needed to do heavy duty numerics (linear equation solvers, FFTs, etc.) would need to be much larger on a 6502 or 8080 than on an 8086+8087, or even a modern 64-bit ARM, due to more types of instructions and a larger register set.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2020-01-08T05:18:24.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13306" PostTypeId="1" AcceptedAnswerId="13307" CreationDate="2020-01-08T09:15:07.650" Score="10" ViewCount="1006" Body="&lt;p&gt;The ZX80/81 16K RAM pack used two PCBs joined with a connector in the middle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd initially assumed this was due to reuse of the original 3K RAM pack case (which has a single PCB and uses static ram) for ZX80 16K RAM packs and then the same case being used for the ZX81, however the case is significantly different and I think there wasn't enough space inside the older design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't figure out why Sinclair didn't create a RAM pack with physical packaging similar to the Memotech design. A single PCB should be more reliable and the additional plastic cost of a wider case can't have been that much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember there was an initial shortage of 16K RAM packs at the ZX81 launch, I originally ordered a ZX80 and received my ZX81 before the magazine reviews arrived but had to wait several months for a RAM pack, which leaves me wondering if there was some manufacturing issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some piece of Sinclair history or electronic reason I'm unaware of?&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="6712" LastEditDate="2020-01-08T14:53:45.037" LastActivityDate="2020-01-08T14:53:45.037" Title="Why did the ZX81 16K RAM pack use two PCBs?" Tags="&lt;zx81&gt;&lt;sinclair&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13307" PostTypeId="2" ParentId="13306" CreationDate="2020-01-08T12:56:08.173" Score="9" Body="&lt;p&gt;It was neither due history or electronic but for design reason:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 16 KiB RAM pack was intended to be sold to existing (and new *1) ZX80 users as well. The ZX80 has its expansion port on bavk side, all the way to the left, while the ZX81 got it moved over to the right side. Only a package not much wider than the connector would fit both equally well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ZX80 vs. ZX81 placement (Pictures taken from Wikipedia):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pugJtm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pugJtm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/sP3omm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sP3omm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is as well why the connector is 'open' on both sides, unlike most other PCB plugs. It needed to fit both board cutouts equally well - and in addition, the opening of the ZX80 was a bit smaller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same goes for making it the 'straight' way it is, compared to Memotech's more elegant shape, as the ZX80 didn't have that wedge.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - In some markets - like Germany - the ZX80 was sold for a short time in parallel to the ZX81 (at a reduced price).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-08T13:29:16.173" LastActivityDate="2020-01-08T13:29:16.173" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13308" PostTypeId="2" ParentId="13301" CreationDate="2020-01-08T14:39:17.920" Score="5" Body="&lt;p&gt;The Vic20 was not the last consumer product to use static ram on the main system board. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mid 90's a Socket 3 (486 class) motherboard was created by Ocean Technology &lt;code&gt;octek.com - defunct&lt;/code&gt;.  The &lt;a href=&quot;https://web.archive.org/web/19961112205813/http://www.oceanhk.com/Drivers/DCA2/DCA2SPEC.TXT&quot; rel=&quot;noreferrer&quot;&gt;HIPPO-DCA2&lt;/a&gt; motherboard which required at least one 4MB 72-pin SIMM of something called DynamiCache RAM in the first 2 slots. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;DynamiCache was a built from high density Static ram and was slated for 4/8/16 MB. However the slots on the DCA2 were too close together for the heat spreaders eventually needed on the 16MB module so the max you could use was two 8MB SIMMs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time, the fastest DRAM available was 60ns FPM.  DynamiCache operated at 15ns. As a comparison when DDR eventually reached consumers, it operated at 8ns.&lt;/p&gt;&#xA;" OwnerUserId="3648" LastEditorUserId="3648" LastEditDate="2020-01-08T15:27:43.890" LastActivityDate="2020-01-08T15:27:43.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13310" PostTypeId="1" AcceptedAnswerId="13317" CreationDate="2020-01-08T19:00:46.200" Score="13" ViewCount="2567" Body="&lt;p&gt;I am familiar with the various accelerator products that were developed over the years to improve the performance of popular 6502 home micros. A short list of the particularly well known devices would include:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/SuperCPU&quot; rel=&quot;nofollow noreferrer&quot;&gt;SuperCPU&lt;/a&gt; for the C64, based on 20MHz 65816.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_II_accelerators#Zip_Chip_%E2%80%93_Zip_Technologies&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zip Chip&lt;/a&gt; for Apple ][, based on 8MHz 65C02.&lt;/li&gt;&#xA;&lt;li&gt;Various Apple ][gs accelerators, which simply used a faster 65816 (up to 20 MHz) than was on the motherboard.&lt;/li&gt;&#xA;&lt;li&gt;BBC micro 4 MHz 6502 for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Tube_(BBC_Micro)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tube interface&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have not heard of any after-market, plugin accelerators for the popular Z80 micros of the era, like the ZX Spectrum, MSX, or TRS-80. Did any such accelerator products exist, based on either a higher clocked Z80 or a Z8000? If not, is there an obvious technical or marketplace reason for this?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="6679" LastEditDate="2020-01-10T18:10:46.323" LastActivityDate="2020-01-10T18:10:46.323" Title="Accelerators for Z80 micros?" Tags="&lt;z80&gt;&lt;zx-spectrum&gt;&lt;trs-80&gt;&lt;msx&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13311" PostTypeId="2" ParentId="13310" CreationDate="2020-01-08T19:45:31.517" Score="12" Body="&lt;p&gt;I'm not familiar with the C64, and didn't do much with the Apple ][ back in the day, but I did spend a lot of time under the hood of my TRS-80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There wasn't a lot of &lt;em&gt;room&lt;/em&gt; for plugin accelerators in the TRS-80 Model I. I did put in a &lt;a href=&quot;http://www.trs-80.org/omikron-mapper/&quot; rel=&quot;noreferrer&quot;&gt;CP/M daughtercard&lt;/a&gt;, which remapped system memory to get ROM out of the low address space, but didn't replace the processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a nominal expansion slot in the Expansion Interface, usually used for an RS232 interface board. Its connector was extremely twitchy and unreliable, and as I recall the system's architecture limited its utility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was also a further expansion card-edge on the Expansion Interface. I used this to connect a home-built video display board. I believe it did expose the signals you'd need to take over from the Z-80, but it was at the end of a fairly lengthy and not very clean bus, and I doubt you could have run a reliable daughtercard through it, at least if you wanted access to system RAM and the like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The refresh timing for system RAM was tightly tied to processor clock speed. There were various hacks to increase clock speed, and they generally required some fiddling with the refresh generation circuitry. I don't remember details. I think it would have been challenging, especially with 1980 technology, to tie in a faster processor while maintaining DRAM refresh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: technology was marching quickly at that time, the TRS-80 wasn't very robust for expansion, and there probably just wasn't enough time or market demand to produce accelerator daughtercards.&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2020-01-08T19:45:31.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13312" PostTypeId="2" ParentId="13310" CreationDate="2020-01-08T21:18:27.517" Score="6" Body="&lt;p&gt;Yes, accelerators did exist - but they were usually niche products, or handled completely differently (see below).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's more of a market-driven issue than ability to speed up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Home computers never really had a big need for speed improvement. After all, any speed up would not only break games, but also be rather expensive, as the host system wasn't really made to be extended in a fundamental way (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More so, manufacturers didn't have much interest in selling a CPU upgrade, when they could do as well by selling a new, faster machine instead. Cases were accelerators were successful are rather exceptions.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The Apple II because, its incarnations didn't offer any speedup for almost 10 years (until the IIgs and IIc+). This rare combination of a huge user base in a rather professional area, plus a manufacturer not upgrading the system, opened a huge window of opportunity for third party offerings of accelerators. Users taking this road usually had a professional need for higher speed -like crunching ever increasing VisiCalc sheets (*2). Much the same way as this group needed larger memory, making a fortune for Saturn Systems. These users were a quite large percentage on the Apple II (*3).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The C64 gives the perfect counter-example. Despite its quite high distribution, only a small minority saw any professional use. As a result, neither Commodore supplied memory expansions (17xx REU), nor did the Super CPU find much use.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The BBC Micro is again an exception, as it was intentionally designed to be expandable. Adding subsystems with other CPUs was intended. Doing the same with a faster 6502 came naturally.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The fact that all of them are 6502 systems is rather by accident.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z80 systems were basically only used in two large non-intersecting groups: S100-based professional systems and home computers, with MSX being eventually the biggest share.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;On the home computer side, manufacturers had no interest in upgrade sales, but unlike Apple, they did offer compatible follow-up models. It's interesting that in this segment it was much more important to add capabilities like better video than speeding up the CPU.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On the professional side, Z80 systems were usually S100 based, enabling easy swap of the CPU board for a new, faster one. Interestingly, the same worked for CP/M on the Apple, where the basic 2 MHz Z80 cards soon were swapped for boards with local memory and Z80 up to 12 MHz. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A special group to be mentioned as well are dedicated (office) systems. Here speed was as well of no concern in itself, but all about the ability to keep up with the user. The Amstrad PCW is a great example here as it sold quite well for more than a decade (1985-1996), making it one of the longest selling machines. A 4 MHz Z80 is more than capable of keeping up with typing text, handling addresses and printing (*4).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Mostly due the rather tight coupling of CPU and memory/I/O timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - We all know how users in management and marketing bloat their spreadsheets way past a point were any rational user would build a custom software, don't we?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - By 1984, less than 1.5 million Apple II were sold - and 700,000 copies of VisiCalc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - In some way the PCW is the antithesis to the Apple II. Whereas professional Apple II users were at the forefront, willing to spend a lot of money to get top-end tasks done, PCW users were rather the 'working' folks, needing a reliable and performing tool for work that didn't change much.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-09T15:10:08.413" LastActivityDate="2020-01-09T15:10:08.413" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13313" PostTypeId="2" ParentId="12917" CreationDate="2020-01-09T03:50:53.000" Score="2" Body="&lt;p&gt;The NES game &lt;em&gt;Gimmick!&lt;/em&gt; uses self modifying code as part of its anti-piracy check failure response. 96 bytes are decrypted while being copied from ROM to RAM and then jumped to. This is to hide a routine that halts the game and displays the message &lt;code&gt;BLACK HOLE&lt;/code&gt; when certain conditions are met.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://tcrf.net/Notes:Gimmick!&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://tcrf.net/Notes:Gimmick!&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15371" LastActivityDate="2020-01-09T03:50:53.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13314" PostTypeId="2" ParentId="11183" CreationDate="2020-01-09T07:29:14.973" Score="10" Body="&lt;p&gt;I have a full collection of 1978 and 1979 PCW magazines.&lt;/p&gt;&#xA;&lt;p&gt;The Benchmark Tests are documented in Vol. 1 No. 1 under the article &amp;quot;&lt;em&gt;Direct Addressing: Where to get your Personal computer&lt;/em&gt;&amp;quot;. The November issue is simply a report of showing the results of benchmark times that were submitted from contributors that ran the programs listed in issue 1.&lt;/p&gt;&#xA;&lt;p&gt;The following is a partial extraction from the text of the article....&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The first seven benchmarks were used in a series of tests carried out in the States and published in an article in the June 1977 issue of Kilobaud. The eighth&#xA;benchmark has been introduced to test the transcendental functions of the various interpreters.&#xA;Unusually poor performance on this benchmark is a clear indication of the use of poor algorithms and is more a reflection on the programmer than on the machine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Here's the BASIC code for the benchmark tests:&lt;/p&gt;&#xA;&lt;p&gt;BM1.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;300 PRINT &amp;quot;S&amp;quot;&#xA;400 FOR K=1 To 1000&#xA;500 NEXT K&#xA;700 PRINT &amp;quot;E&amp;quot;&#xA;800 END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;BM2.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;300 PRINT &amp;quot;S&amp;quot;&#xA;400 K=0&#xA;500 K=K+1&#xA;600 IF K &amp;lt; 1000 THEN 500&#xA;700 PRINT &amp;quot;E&amp;quot;&#xA;800 END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;BM3.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;300 PRINT &amp;quot;S&amp;quot;&#xA;400 K=0&#xA;500 K=K+1&#xA;510 A=K/K*K+K-K&#xA;600 IF K&amp;lt;1000 THEN 500&#xA;700 PRINT &amp;quot;E&amp;quot;&#xA;800 END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;BM4.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;300 PRINT &amp;quot;S&amp;quot;&#xA;400 K=0&#xA;500 K=K+1&#xA;510 A=K/2*3+4-5&#xA;600 IF K&amp;lt;1000 THEN 500&#xA;700 PRINT &amp;quot;E&amp;quot;&#xA;800 END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;BM5.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;300 PRINT &amp;quot;S&amp;quot;&#xA;400 K=0&#xA;500 K=K+1&#xA;510 A=K/2*3+4-5&#xA;520 GOSUB 820&#xA;600 IF K&amp;lt;1000 THEN 500&#xA;700 PRINT &amp;quot;E&amp;quot;&#xA;800 END&#xA;820 RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;BM6.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;300 PRINT &amp;quot;S&amp;quot;&#xA;400 K=0&#xA;430 DIM M(5)&#xA;500 K=K+1&#xA;510 A=K/2*3+4-5&#xA;520 GOSUB 820&#xA;530 FOR L=1 TO 5&#xA;540 NEXT L&#xA;600 IF K&amp;lt;1000 THEN 500&#xA;700 PRINT &amp;quot;E&amp;quot;&#xA;800 END&#xA;820 RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;BM7.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;300 PRINT &amp;quot;S&amp;quot;&#xA;400 K=0&#xA;430 DIM M(5)&#xA;500 K=K+1&#xA;510 A=K/2*3+4-5&#xA;520 GOSUB 820&#xA;530 FOR L=1 TO 5&#xA;535 M(L)=A&#xA;540 NEXT L&#xA;600 IF K&amp;lt;1000 THEN 500&#xA;700 PRINT &amp;quot;E&amp;quot;&#xA;800 END&#xA;820 RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;BM8.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;300 PRINT &amp;quot;S&amp;quot;&#xA;400 K=0&#xA;500 K=K+1&#xA;530 A=K^2&#xA;540 B=LOG(K)&#xA;550 C=SIN(K)&#xA;600 IF K&amp;lt;100 THEN 500&#xA;700 PRINT &amp;quot;E&amp;quot;&#xA;800 END  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15973" LastEditorUserId="439" LastEditDate="2020-08-15T15:36:05.893" LastActivityDate="2020-08-15T15:36:05.893" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13315" PostTypeId="2" ParentId="13310" CreationDate="2020-01-09T10:12:32.383" Score="7" Body="&lt;p&gt;For the Amstrad PCW, there was the &lt;a href=&quot;http://www.habisoft.com/irmia/?p=42&quot; rel=&quot;noreferrer&quot;&gt;Sprinter card&lt;/a&gt; - containing an 8MHz Z80 CPU that replaced the 4MHz original, a memory expansion, and cache RAM so that the processor wasn't restricted to the speed of motherboard memory. PCWs were largely used for word processing and DTP rather than gaming; in these applications it's useful to have more memory and a faster CPU.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2020-01-09T10:12:32.383" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13317" PostTypeId="2" ParentId="13310" CreationDate="2020-01-09T18:15:28.897" Score="8" Body="&lt;p&gt;The main TRS-80 line (Model I, III and 4) had several third party Z-80 accelerator boards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.trs-80.org/archbold-speedup-board/&quot; rel=&quot;noreferrer&quot;&gt;Archbold&lt;/a&gt; board could bring the Model I up to 5.3 MHz from 1.77 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.trs-80.org/holmes-sprinter/&quot; rel=&quot;noreferrer&quot;&gt;Holmes Sprinter&lt;/a&gt; boosted the Model I up to 5.32 MHz.  It came in a Model III version to boost it from 2.027 MHz to 5.07 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Model 4 had several speedup board options.  Incidentally, the Model 4 was compatible with the Model III and featured a Z-80 running at 4.055 MHz which could be software switched to match the Model III CPU speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.trs-80.org/super4/&quot; rel=&quot;noreferrer&quot;&gt;Alpha Technology Super 4&lt;/a&gt; could boost the Z-80 up to 6 MHz.  &lt;a href=&quot;http://www.trs-80.org/xlr8er/&quot; rel=&quot;noreferrer&quot;&gt;The H. I. Tech XLR8er&lt;/a&gt; did 6.144 MHz and the &lt;a href=&quot;http://www.trs-80.org/seatronics-super-speed-up/&quot; rel=&quot;noreferrer&quot;&gt;Seatronics Super Speed-Up&lt;/a&gt; gave a whopping 8 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The XLR8er was the one most commonly seen.  The Seatrontics was available for the Model I and III but it came out in 1986, well after the heyday of the Model I and III introduced in 1977 and 1980 respectively.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2020-01-09T18:15:28.897" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13318" PostTypeId="2" ParentId="12402" CreationDate="2020-01-10T02:17:47.267" Score="3" Body="&lt;p&gt;Consolidating other people's comments into a community wiki answer: the software may have been MTV Music Generator, shown here in its Windows version:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W3FX9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W3FX9.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... and viewable on Youtube &lt;a href=&quot;https://www.youtube.com/watch?v=uCQi8jTdUZU&quot; rel=&quot;nofollow noreferrer&quot;&gt;in motion&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There seem to have been several versions over the years, and unfortunately I can't find footage of the Windows version of the music video generator. I found some example footage from PlayStation versions: &lt;a href=&quot;https://www.youtube.com/watch?v=yqJptPTiFQ8&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=a2vwtyASgSY&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, which may or may not be similar to the Windows version.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-01-10T02:17:47.267" CommentCount="0" CommunityOwnedDate="2020-01-10T02:17:47.267" ContentLicense="CC BY-SA 4.0" />
  <row Id="13319" PostTypeId="1" CreationDate="2020-01-10T06:23:07.647" Score="2" ViewCount="916" Body="&lt;p&gt;I purchased an Apple IIc from an auction site, but it came without the&#xA;external power supply unit. While &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/12677/7208&quot;&gt;this question&lt;/a&gt; and its&#xA;answers describe how to open up the IIc and use alligator clips to&#xA;power it from a bench PSU, I'd like something more convenient and&#xA;portable. What are my options for this?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-01-10T06:23:07.647" Title="How can I make an external PSU for an Apple IIc?" Tags="&lt;apple-ii&gt;&lt;power&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13320" PostTypeId="2" ParentId="13319" CreationDate="2020-01-10T06:23:07.647" Score="7" Body="&lt;p&gt;The external power input on an Apple IIc is a male 7-pin DIN jack. The&#xA;standard Apple external PSU takes a country-specific input voltage&#xA;(105 to 129 VAC, 60 Hz for North America) and provides (unregulated)&#xA;15 VDC.&lt;/p&gt;&#xA;&lt;p&gt;Though on &lt;a href=&quot;https://archive.org/details/Apple_IIc_Technical_Reference_Manual/page/n38&quot; rel=&quot;noreferrer&quot;&gt;page 11&lt;/a&gt; of the &lt;a href=&quot;https://archive.org/details/Apple_IIc_Technical_Reference_Manual&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Apple IIc Technical Reference&#xA;Manual&lt;/em&gt;&lt;/a&gt; it says that the internal power supply &amp;quot;operates&#xA;from a 12 to 15 VDC input source,&amp;quot; this is actually too conservative.&#xA;&lt;a href=&quot;https://archive.org/details/Apple_IIc_Technical_Reference_Manual/page/n261&quot; rel=&quot;noreferrer&quot;&gt;Page 234&lt;/a&gt; of that manual gives the correct specifications:&#xA;the system unit accepts an input voltage of &amp;quot;+9 to 20 VDC&amp;quot; with a&#xA;maximum power consumption of 25 W. I have been using my IIc with 20 V&#xA;input with no problems.&lt;/p&gt;&#xA;&lt;p&gt;Conveniently, a lot of modern laptop PSUs provide voltages in this&#xA;range, and also work on any wall voltage from 100 V to 240 V, 50 or&#xA;60 Hz. I have several Lenovo ThinkPad PSUs used with older X200-series&#xA;laptops (and many other models) with a rated output of 20 V 65 W, so&#xA;I decided to use one of those..&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/Apple_IIc_Technical_Reference_Manual/page/n261&quot; rel=&quot;noreferrer&quot;&gt;Page 234&lt;/a&gt; also gives the pinouts of the external power&#xA;connector. Three pins are PSU ground; internally these are all&#xA;connected together anyway so it's probably safe to connect just one of&#xA;the ground pins if you need to go that way. Two more pins are for&#xA;positive voltage and, again, these are also connected together&#xA;internally. The last two pins are unconnected.&lt;/p&gt;&#xA;&lt;p&gt;Here's the pinout using standard DIN pin numbering. Beware: the&#xA;&lt;em&gt;Technical Reference&lt;/em&gt; uses a different, non-standard pin numbering,&#xA;also included that as well below. A &amp;quot;jack&amp;quot; is the connector on the&#xA;computer, a &amp;quot;plug&amp;quot; is the connector on the cable, and &amp;quot;LI&amp;quot; means&#xA;&amp;quot;looking into.&amp;quot;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DIN Numbering       DIN Numbering    Apple Numbering&#xA;LI female plug      LI male jack      LI male jack&#xA;      ∪                  ∪                  ∪&#xA;   7     6            6     7            7     1&#xA; 3         1        1         3        6         2&#xA;   5     4            4     5            5     3&#xA;      2                  2                  4&#xA;&#xA;DIN    Apple   Function&#xA;1,4     2,3    +15 V DC&#xA;  2       4    Chassis ground (AC input ground)&#xA;3,5     5,6    Signal ground&#xA;6,7     1,7    Not connected&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You'll obviously need an adapter to convert the laptop PSU output to a&#xA;female 7-PIN female DIN plug. Fortunately Lenovo changed their PSU&#xA;connector at some point causing people to sell converter cables into&#xA;which you can plug the round connector from an old PSU to convert it&#xA;to the new square connector. From AliExpress I bought I &lt;a href=&quot;https://www.aliexpress.com/item/4000116172409.html&quot; rel=&quot;noreferrer&quot;&gt;this&#xA;adapter&lt;/a&gt; (under $1), and also a 7-pin DIN plug with a&#xA;&lt;em&gt;female&lt;/em&gt; insert &lt;a href=&quot;https://www.aliexpress.com/item/32860020971.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; (under 50 cents). (Actually, I&#xA;purchased several of each in case I messed something up.)&lt;/p&gt;&#xA;&lt;p&gt;Building the adapter was relatively simple, but needs some care to&#xA;ensure you're connecting the right pins, and that pins are not&#xA;shorted.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The DIN plug I used had a cover that came up to very nearly the&#xA;edge of the metal shield. This type of plug won't fit into the IIc&#xA;because there's not enough clearance, so it needs to be cut back by&#xA;about a centimeter. I did this with a &lt;a href=&quot;https://en.wikipedia.org/wiki/Diagonal_pliers&quot; rel=&quot;noreferrer&quot;&gt;side cutter&lt;/a&gt;, ensuring that&#xA;I left intact the square hole in the cover for the latching tab on&#xA;the shield so that I could still remove the plug by grasping the&#xA;cover and pulling.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I confirmed my understanding of the IIc's power connector by doing&#xA;a continuity test on the power input pins. The three ground pins&#xA;are shorted to each other and also to the shields of all the&#xA;connectors on the back of the case (including the power connector&#xA;itself). The two positive voltage input pins should be connected to&#xA;each other and nothing else. It's important at this stage to ensure&#xA;you have confirmed you're using the right pins, and you should re-check&#xA;this on the IIc and the DIN plug after each step, ensuring both that&#xA;the ground and positive voltage lines are connected and that they're&#xA;not shorted to each other.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I cut off the square end of the Lenovo adapter and stripped back&#xA;the cable jacket, exposing red (+20V) and black (ground) wires,&#xA;which I stripped and tinned. After doing this you should plug the&#xA;adapter into your PSU and confirm the voltage and polarity with a&#xA;multimeter; it's quite possible that some adapter cables have&#xA;different colour assignments.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I stripped some solid-core hook-up wire and used a small length of&#xA;it to join the three ground pins together on the DIN plug. I used&#xA;another length to join the two power pins. My plug's connector tabs&#xA;had holes in them; I made sure for at least one hole for each line&#xA;to leave enough space to thread through them the tinned wires from&#xA;the adapter. I then confirmed from  the plug side that the two&#xA;power pins were connected to each other, that the three ground pins&#xA;were connected to each other, and that the positive voltage pins&#xA;were not shorted to the ground pins.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I placed the DIN plug cover over the Lenovo adapter cable (this is&#xA;easy to forget!) and then soldered the adapter cable's wires to the&#xA;appropriate pins on the DIN connector. I then confirmed ground&#xA;connectivity (the outside of the Lenovo barrel connector) to the&#xA;ground pins and positive voltage wire connectivity (the inner&#xA;surface, &lt;em&gt;not&lt;/em&gt; the inner pin, of the Lenovo adapter) to the&#xA;positive voltage pins on the DIN connector.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I checked the wire connections to the tabs on the DIN plug and&#xA;trimmed them down a bit to ensure that they wouldn't touch the&#xA;shield. (This isn't a big deal for the ground wire, since ground is&#xA;shorted to the shield in the IIc anyway, but it's vital that the&#xA;positive voltage wire not be at risk of contacting the shield.)&#xA;Then I assembled the shield over the plug, pushed the DIN cover&#xA;part-way on, and confirmed that the ground and power pins were not&#xA;shorted together.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I pulled up the latching tab on the DIN plug metal shield to ensure&#xA;that it would properly seat in the hole in the cover, pushed it all&#xA;the way on, and then plugged the adapter into the PSU and confirmed&#xA;that the voltage between the power and ground pins was correct.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Here's a picture of the assembled adapter and the parts used to make&#xA;it (click on the image to see a much larger version):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FTvyr.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FTvyr.jpg&quot; alt=&quot;Lenovo PSU to Apple IIc External Power Adapter&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the foreground at the left is an assembled DIN plug; to its right&#xA;is a DIN plug cover and the plug itself between the two parts of the&#xA;metal shield. Above these, from left to right, are the back panel of&#xA;an Apple IIc (the external power jack is next to the power switch),&#xA;the assembled adapter, the plug from a Lenovo PSU, and the PSU itself.&#xA;Behind the assembled adapter is the original Lenovo-old-style to&#xA;Lenovo-new-style adapter that I cut apart to make my adapter.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-10T06:23:07.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13321" PostTypeId="2" ParentId="12701" CreationDate="2020-01-10T07:11:38.497" Score="0" Body="&lt;p&gt;Have you looked at &lt;a href=&quot;https://hackaday.io/project/8473-msx-protocard&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hackaday.io/project/8473-msx-protocard&lt;/a&gt;? Based on all the information already provided, you may be able to expand the project and do a lot more with it. Check it out! Keep us posted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Twitter: @msxall&lt;/p&gt;&#xA;" OwnerUserId="15977" LastActivityDate="2020-01-10T07:11:38.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13322" PostTypeId="1" AcceptedAnswerId="13323" CreationDate="2020-01-10T09:49:29.963" Score="-1" ViewCount="123" Body="&lt;p&gt;I put together a retro gaming setup with a 2000ish spec (can post specs if required) and it's come together pretty nicely except the CPU fan is insanely shrill (it's a Coolermaster something).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were to pick up a small cheap silent case fan such as a Gelid Silent, would that have the right kind of screw holes to match what would be typical on an old heatsink?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Maybe something like this: &lt;a href=&quot;https://gelidsolutions.com/thermal-solutions/case-fan-silent-6/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://gelidsolutions.com/thermal-solutions/case-fan-silent-6/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15985" LastEditorUserId="15985" LastEditDate="2020-01-10T11:10:20.687" LastActivityDate="2020-01-10T11:10:20.687" Title="Fan for old socket A Athlon cooler" Tags="&lt;hardware&gt;&lt;hardware-mods&gt;&lt;compatibility&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2020-01-10T19:16:50.993" ContentLicense="CC BY-SA 4.0" />
  <row Id="13323" PostTypeId="2" ParentId="13322" CreationDate="2020-01-10T10:13:23.010" Score="0" Body="&lt;p&gt;Probably not, as 40mm is a very small fan - smaller than the CPU socket.  Usually you would expect to find 60mm or larger fans on a Socket A heatsink.  You should still be able to find complete Socket A compatible heatsinks, if you look in the &lt;a href=&quot;https://www.amazon.co.uk/StarTech-com-85x70x50mm-Socket-Heatsink-Connector-Black/dp/B00006B8DB/ref=sr_1_42?keywords=%22socket%2Ba%22&amp;amp;qid=1578650697&amp;amp;s=computers&amp;amp;sr=1-42&amp;amp;th=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;right places&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you should also try simply slowing the fan down when the CPU is cool enough to not require its full power.  This is probably the best option if the fan is working correctly, and is just a bit noisy.  There are several ways of doing this; if your m/board doesn't have the feature built in, there are variable resistors to insert in line, or sophisticated fan controller modules which can handle case fans as well as the CPU.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-01-10T10:13:23.010" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13324" PostTypeId="2" ParentId="13257" CreationDate="2020-01-10T15:42:46.247" Score="5" Body="&lt;p&gt;Not answering answering your question, but &quot;black and white&quot; TVs did produce a &quot;better&quot; picture as they didn't have the wire mask behind the glass, which was often very coarse on early TVs and even monitors. You could sometimes/often get a better grey image on a B&amp;amp;W TV than colour on a monitor.&lt;/p&gt;&#xA;" OwnerUserId="11490" LastActivityDate="2020-01-10T15:42:46.247" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13325" PostTypeId="2" ParentId="13302" CreationDate="2020-01-10T16:47:38.430" Score="3" Body="&lt;p&gt;The &lt;a href=&quot;https://ja.wikipedia.org/wiki/JR_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)#JR-200&quot; rel=&quot;nofollow noreferrer&quot;&gt;Panasonic Jr.200&lt;/a&gt; offered a choice of 600 or 2400 baud rates for tape saves, selectable via a switch on the bottom of the computer.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-01-10T16:47:38.430" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13327" PostTypeId="2" ParentId="8157" CreationDate="2020-01-10T19:45:01.033" Score="5" Body="&lt;p&gt;In Russia in early 90-th &quot;network-enabled&quot; computers used dialup (telephone network). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/FidoNet&quot; rel=&quot;noreferrer&quot;&gt;FIDO&lt;/a&gt; was very popular because it was free. 1990 was the year when first BBSes were installed in Moscow and Novosibirsk. AFAIK, they were connected to other parts of network through Czechoslovakia. I think &lt;a href=&quot;https://en.wikipedia.org/wiki/FrontDoor&quot; rel=&quot;noreferrer&quot;&gt;FrontDoor&lt;/a&gt; was the main software. FIDO used to be &quot;must have&quot; for any IT guy until 2000th.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the same time, company named &lt;a href=&quot;https://en.wikipedia.org/wiki/RELCOM&quot; rel=&quot;noreferrer&quot;&gt;RelCom&lt;/a&gt; was created by &lt;a href=&quot;https://en.wikipedia.org/wiki/Kurchatov_Institute&quot; rel=&quot;noreferrer&quot;&gt;Kurchatov Institute&lt;/a&gt; and soviet unix user group (There was a BSD derivation in USSR called &lt;a href=&quot;https://en.wikipedia.org/wiki/DEMOS&quot; rel=&quot;noreferrer&quot;&gt;DEMOS&lt;/a&gt;). In August 1990 they used dialup to connect to Helsinki University. After that, they decided to sell Internet access: NNTP (for news) and UUCP for email. Many people only had email at that time, it was much cheaper. This is how first ISP was created. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the late 90th we had lots of small ISPs with dialup pools. They were connected to several &quot;big&quot; providers like &lt;a href=&quot;https://en.wikipedia.org/wiki/TransTelekom&quot; rel=&quot;noreferrer&quot;&gt;TransTelekom&lt;/a&gt; (it was created by Russian Railways).&#xA;Email migrated to SMTP (while still there were &quot;email only&quot; plans), many people used ftp, web and ICQ (this messanger was really popular). There were several russian websites: free emails (like &lt;a href=&quot;http://mail.ru&quot; rel=&quot;noreferrer&quot;&gt;http://mail.ru&lt;/a&gt;), newspapers, web-forums and chats (&lt;a href=&quot;http://divan.ru&quot; rel=&quot;noreferrer&quot;&gt;http://divan.ru&lt;/a&gt;, &lt;a href=&quot;http://zerkalo.com&quot; rel=&quot;noreferrer&quot;&gt;http://zerkalo.com&lt;/a&gt; to name few, &lt;a href=&quot;https://web.archive.org/web/19981201043510/http://www.zerkalo.com/&quot; rel=&quot;noreferrer&quot;&gt;use webarchive to look there&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There also was SprintNet network that used X.25 protocol suite. Several ISPs gave access to it, and there was free 15 minute access: after that, you had to redial. People spent a lot of time there because it was free. &lt;a href=&quot;https://bugtraq.ru/library/underground/sprint.html&quot; rel=&quot;noreferrer&quot;&gt;Here is russian article&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11893" LastEditorUserId="11893" LastEditDate="2020-01-10T19:52:40.417" LastActivityDate="2020-01-10T19:52:40.417" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13328" PostTypeId="2" ParentId="13302" CreationDate="2020-01-10T20:48:25.747" Score="1" Body="&lt;p&gt;The C64 didn't use the typical FSK format, but could emit and interpret flux reversals with flexible timing.  Changing the baud rate was simply a matter of using different timing values with one of the CIAs.  The hardware involved was exceedingly simple, and relied much more on software assistance than in many other micros.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this flexibility, &quot;fastloaders&quot; which increased the data rate considerably over the standard format were common.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-01-11T07:30:32.297" LastActivityDate="2020-01-11T07:30:32.297" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13330" PostTypeId="2" ParentId="13294" CreationDate="2020-01-11T19:43:40.837" Score="9" Body="&lt;p&gt;I recently ended up looking into this myself, including reading the programming manuals for both machines mentioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some quirks of the RPC-4000 include that the last few addressable tracks of the drum have special fast-access features which change the way the data is laid out.  The last track actually has fewer usable locations due to this, so it would be very odd to find an array of any significant size there; you would use it for temporary variables instead.  Additionally the opcode that would have to be incremented to become a conditional-branch instruction - a compare - seems a bit unlikely to be used in a loop with no apparent conditional branch to begin with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it more likely that the strange loop construct actually existed in a version of the blackjack program written for the LGP-30 or one of its immediate descendants (more immediate than the RPC-4000, that is).  The opcode numbers are more logical for this purpose, and if the two don't-care bits between the operand and the opcode fields are set, incrementing the former could indeed carry into the latter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The narrator thus appears to be a bit unreliable.  One reasonable explanation, though, is that he tried to compare the two implementations of the same game to figure out where the bug might be, and got his memory of this confused after so many years had elapsed since then.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-01-11T19:43:40.837" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13331" PostTypeId="1" AcceptedAnswerId="13334" CreationDate="2020-01-12T11:34:32.340" Score="5" ViewCount="1577" Body="&lt;p&gt;This mouse plugged into the user port on the underside of the BBC micro models. The mouse came with software in the form of a sideways ROM which provided APIs, CLI commands for own programs as well as a mac-Like Desktop environment. There was &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/ROM.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;AMX Super Art software as well as Pagemaker&lt;/a&gt; - a Desktop Publishing (DTP) software package (up to 4 ROMs). For BBC models such as the BBC Master, with Sideways RAM, ROM images of the software could be loaded into those.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/ROM.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;product was made by Advanced Memory Systems&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: how did the code in that software ROM process the values that the mouse generated on the user port, for x and y movement (both up and down, left and right, and a mix, as well as variable speed and the 3 buttons).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many, many years ago, I did try to develop equivalent clean-room software, but only got as far as reading the buttons (bit on and off) and reading a pattern of 0s and 1s for x and y movement but only being able to detect this and not whether it was negative or positive movement. I did this by peeking some values in &lt;code&gt;PAGE 0000&lt;/code&gt; of the memory map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also recall that Superior Software, a 3rd-party software house, provided stand-alone (not dependent on AMX ROM) support for the AMX mouse in their game editor for the Repton series.&lt;/p&gt;&#xA;" OwnerUserId="8111" LastEditorUserId="8111" LastEditDate="2020-01-12T18:12:33.530" LastActivityDate="2020-01-14T12:56:51.920" Title="How did the BBC sideways ROM software for the AMX mouse process the user port input data to determine x and y movement?" Tags="&lt;memory-layout&gt;&lt;bbc-micro&gt;&lt;mouse&gt;&lt;driver&gt;&lt;ports&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13332" PostTypeId="2" ParentId="13331" CreationDate="2020-01-12T12:05:18.517" Score="4" Body="&lt;p&gt;I don't know the specific details, but in general the mouse uses standard quadrature encoders so for each axis you get two data pins that output movement data. While several ways to decode the quadrature data for each edge to achieve maximum resolution, the hardware uses a simplest possible approach with the PIO chip. Basically a pulse on one pin can be used to detect movement and other pin can tell the direction. These pins are connected to a PIO chip which seems to have some strobe inputs, connected to detect movement, and the direction pins are connected to normal PIO inputs. Either the strobe pins triggers a flag in PIO status so CPU can poll for happened movement events and then read direction, or the PIO chip may even latch the direction pin on strobe event and perhaps signal movement with interrupts to CPU.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2020-01-12T17:49:40.117" LastActivityDate="2020-01-12T17:49:40.117" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13333" PostTypeId="2" ParentId="8157" CreationDate="2020-01-12T15:09:00.090" Score="3" Body="&lt;p&gt;In Sweden, a early service provider was Algonet (started in 1994.)&#xA;They provided modem access to users, SLIP (i believe) and UNIX shell accounts. One other service was email addresses and via pop and smtp the ability to access personal email. They had a number of customers who via $work had e-mail but also wanted to be able to from work send and receive e-mail as themself. &#xA;Ericsson employees is one example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding Algonet: i found a mail from someone then the successor to Algonet closed down the old service.&#xA;After having logged into the Sun servers they could elect to run slirp.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Utfors as an ISP is one exampel but so is the different student networks in student apartments in different cities (i'm from Skövde) there the university provided the link when new-built apartments also got real ethernet directly. The student network in Skövde got a free sun ss2 (from Sun) to be used as a gateway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Utfors was from the beginning a student network in Uppsala...&lt;/p&gt;&#xA;" OwnerUserId="15497" LastEditorUserId="15497" LastEditDate="2020-01-12T15:14:24.870" LastActivityDate="2020-01-12T15:14:24.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13334" PostTypeId="2" ParentId="13331" CreationDate="2020-01-12T19:21:23.177" Score="9" Body="&lt;p&gt;Trying to get more into the specifics of the BBC connection, there is a substantial hint in the &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/AMX/AMX_MouseUG.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;user guide&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;However only 5 bits of the [user] port, and CB1, CB2 are used: This leaves bits 1,3 and 4 available for other uses.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which is backed up by &lt;a href=&quot;https://www.waitingforfriday.com/?p=827#BBC_Micro_User-Port_AMX_Mouse&quot; rel=&quot;nofollow noreferrer&quot;&gt;the schematic provided by Simon Inns in the doco for SmallyMouse2&lt;/a&gt;; comparing that to &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/Acorn/AN/238.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the user port's pinout&lt;/a&gt; the mouse provides inputs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;X1 on the VIA's CB1;&lt;/li&gt;&#xA;&lt;li&gt;Y1 on the VIA's CB2;&lt;/li&gt;&#xA;&lt;li&gt;X2 on bit 0 of the VIA's port B;&lt;/li&gt;&#xA;&lt;li&gt;Y2 on bit 2 of the VIA's port B; and&lt;/li&gt;&#xA;&lt;li&gt;the three buttons, left, middle, right on bits 5–7 of the VIA's port B respectively.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So the value you found in page 0 was that of the input to port B: three bits corresponded to the buttons, and two of the others related to motion in X and Y as you suspected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As per Justme's answer, mice of the era were quadrature encoded, producing two outputs per axis. On the x axis they are conventionally called X1 and X2. Both carry the output of a square wave that has a frequency proportional to the mouse velocity. They differ in that they're ninety degrees out of phase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So during a fast movement then they might output a signal like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;X1 = 00110011&#xA;X2 = 01100110&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now imagine the user changed direction partway through, so that the pattern reversed itself:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;X1 = 00110011 | 11001100&#xA;X2 = 01100110 | 01100110&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If they had halved their speed when they reversed direction:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;X1 = 00110011 | 11110000&#xA;X2 = 01100110 | 00111100&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So a cheap way to track such a mouse is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Set up an interrupt for each time X1 transitions from 0 to 1.&lt;/li&gt;&#xA;&lt;li&gt;When X1 transitions, note a pixel's movement and sample X2.&lt;/li&gt;&#xA;&lt;li&gt;If X2 is 1, move to the right. Otherwise move to the left.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(And for greater precision, also interrupt on X1 transitions in the other direction, but for those reverse your X2 test, and also interrupt on X2 transitions, doing the direction test on X1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6522 in the BBC is capable of raising an interrupt upon transitions in &lt;code&gt;CB1&lt;/code&gt; and &lt;code&gt;CB2&lt;/code&gt;, so that is how software is alerted to mouse movements without constantly polling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can ask the 6522 to interrupt on either an upward transition or a downward one, but not both, so I would imagine the implementation is the simplest that I've described: transitions on X1 trigger a cursor movement, and sampling of the other signal picks between a left or right movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It'll likely be transitions in one direction only (e.g. low to high, ignoring high to low) as although you could reprogram the 6522 on every transition I'll wager that they didn't out of a preference for lower interrupt processing time, and because the BBC Micro screen is already low resolution enough that input can be relatively low precision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the only thing you didn't spot in your investigation was the interrupts.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="1932" LastEditDate="2020-01-14T12:56:51.920" LastActivityDate="2020-01-14T12:56:51.920" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13335" PostTypeId="1" AcceptedAnswerId="13336" CreationDate="2020-01-12T19:40:48.960" Score="2" ViewCount="362" Body="&lt;p&gt;As per the title, we are obviously referring to machines that had cassette audio tape as their default medium even if other media was supported via expansion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be clear I mean what was &quot;in the box&quot; aside from the computer, manual, leads etc with regard to this. Not counting any retailer bundled extra bits please! I will give a few examples:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;16K/48K ZX Spectrum had the &quot;Horizons&quot; introductory tape included. Later models had a different intro tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oric Atmos had a welcome tape although its name currently escapes me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BBC Micro and Acorn Electron had a &quot;Welcome&quot; tape included, obviously disk models had a disc instead but we are asking about tapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amstrad CPC464 had a &quot;Welcome to AMSoft&quot; tape included. Other models were disc based.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am unaware of what other machines had in particular the full CBM machines (seems likely they had something given they had a dedicated cassette unit) as well as say machines such as the Tandy and machines such as the early Atari and Apple.&lt;/p&gt;&#xA;" OwnerUserId="15907" LastActivityDate="2020-01-13T10:15:11.103" Title="What 8bit home computers did not have a supplied intro tape" Tags="&lt;8-bit-microcomputers&gt;" AnswerCount="4" CommentCount="7" ClosedDate="2020-01-13T10:36:02.817" ContentLicense="CC BY-SA 4.0" />
  <row Id="13336" PostTypeId="2" ParentId="13335" CreationDate="2020-01-12T21:46:23.430" Score="5" Body="&lt;p&gt;This feels like it'll end up being a list answer, so this is a community wiki answer. Please edit!&lt;/p&gt;&#xA;&lt;p&gt;8-bit home computers that did not come with a welcome cassette include:&lt;/p&gt;&#xA;&lt;h1&gt;The ZX80 and ZX81&lt;/h1&gt;&#xA;&lt;p&gt;See &lt;a href=&quot;http://primrosebank.net/computers/zx80/ZX80%20Operating%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the ZX80's user manual&lt;/a&gt; and the &lt;a href=&quot;http://zxnext.narod.ru/manuals/ZX81_Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX81's&lt;/a&gt;; for the ZX80:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A twin cable with 3.5 mm jack plugs at both ends is provided to connect the ZX-80 to a cassette recorder. Don't worry about this for the moment.&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;p&gt;Before you can store programs on tape you'll have to write a program. The rest of this book is all about writing programs, so the first thing to do is to read on until you've got a program to store...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;i.e. the tape interface is introduced as the mechanism for user saving only, and the user is told to learn programming first, then worry about how to use tapes. if there were an introductory cassette, the manual would have introduced it as the first thing to do, or at least the first test of whether you've connected your tape player correctly.&lt;/p&gt;&#xA;&lt;p&gt;For the ZX81:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Unpack the ZX81, you will have found:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;This manual.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The computer. [...]&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A power supply. [...]&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An aerial lead [...]&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A pair of leads about a foot (30cm) long with 3.5mm jack plugs at both ends [...]&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;i.e. no introductory cassette.&lt;/p&gt;&#xA;&lt;h1&gt;The Exidy Sorcerer&lt;/h1&gt;&#xA;&lt;p&gt;Its excellent &lt;a href=&quot;https://archive.org/details/Sorcer_Software_Manual_1979-04_Exidy&quot; rel=&quot;nofollow noreferrer&quot;&gt;Software Manual&lt;/a&gt; (including assembler source for its 4k monitor!) makes no mention of an intro tape. And as an owner of the Sorcerer, I don't remember any tape which came with it.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-13T00:37:30.027" CommentCount="0" CommunityOwnedDate="2020-01-12T21:46:23.430" ContentLicense="CC BY-SA 4.0" />
  <row Id="13337" PostTypeId="2" ParentId="13335" CreationDate="2020-01-13T06:52:30.507" Score="4" Body="&lt;p&gt;As far as I remember the Czechoslovak computers from the mid-80s, namely PMD-85 or IQ-151 had no introductory cassette tapes too. Just a printed manual with basic information and BASIC description.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-01-13T06:52:30.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13338" PostTypeId="2" ParentId="13335" CreationDate="2020-01-13T09:15:12.630" Score="4" Body="&lt;p&gt;TI-99/4A had no specific presentation cassette. The special cassette recorder cable had to be purchased separately anyway. TI were pushing for cartridges and didn't care much for cassettes, even if their handling of it within TI-BASIC was remarkably better than other home computers.&#xA;EDIT: answer only for Europe as the markets were quite different.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastActivityDate="2020-01-13T09:15:12.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13339" PostTypeId="2" ParentId="13335" CreationDate="2020-01-13T09:28:53.260" Score="4" Body="&lt;p&gt;I had a &lt;a href=&quot;https://vintagecomputer.com/rca-cosmac-vip.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cosmac VIP&lt;/a&gt; - a bare board edition - it didn't even come with the case&lt;sup&gt;&amp;#8224;&lt;/sup&gt; shown in the first picture on the linked website.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The on-board ROM provided only the very lowest-level of boot-up/code entry/tape reading but a &quot;better&quot; (and I use that in a very loose sense) interpreted language, &quot;&lt;a href=&quot;http://ttps://en.wikipedia.org/wiki/CHIP-8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chip-8&lt;/a&gt;&quot;, was available but was only provided in printed hexadecimal form in the supplied manual. You had to tediously type this in and then save it to tape yourself. It would have been &lt;em&gt;so&lt;/em&gt; nice if a pre-recorded tape had also been included.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&#xA;&lt;sup&gt;&amp;#8224;&lt;/sup&gt; FWIW I ended up housing it in an &quot;upcycled&quot; case of a &lt;a href=&quot;http://www.digibarn.com/collections/games/science-fair-digital-computer/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tandys/RadioShack/Science Fair &quot;Digital Computer Kit&quot;&lt;/a&gt;. (If ever there was a court case for misleading marketing, this would be a leading contender. The box mine came in showed someone playing chess. What a waste of pocket money)&lt;/p&gt;&#xA;" OwnerUserId="6712" LastEditorUserId="6712" LastEditDate="2020-01-13T10:15:11.103" LastActivityDate="2020-01-13T10:15:11.103" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13340" PostTypeId="5" CreationDate="2020-01-13T11:25:16.040" Score="0" Body="&lt;p&gt;All about PCBs: repairing, making replicas, troubleshooting, drawing &amp;amp; original documentation, etc.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="11446" LastEditDate="2020-01-13T18:28:31.000" LastActivityDate="2020-01-13T18:28:31.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13341" PostTypeId="4" CreationDate="2020-01-13T11:25:16.040" Score="0" Body="All about PCBs: repairing, making replicas, troubleshooting, drawing &amp; original documentation, etc." OwnerUserId="11446" LastEditorUserId="11446" LastEditDate="2020-01-13T18:28:27.793" LastActivityDate="2020-01-13T18:28:27.793" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13342" PostTypeId="1" CreationDate="2020-01-14T04:28:05.080" Score="1" ViewCount="288" Body="&lt;p&gt;Have an old (HP Omnibook from 1993+) keyboard that feels too sluggish. It takes a little bit too much effort to press the buttons. There is no difference between individual buttons. This particular machine was like this when I got it, but I have used other ones that had better keyboards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IyUAC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IyUAC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(It feels like there is some additional resistance beyond the rubber springs, so the springs themselves are probably fine.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am wondering if it would be a good idea to add some lubrication (silicone), or if that would degrade the rubber (or cause some other problem)? Any other advice?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, are those rubber springs generally available for purchase?&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2020-01-15T10:26:44.737" LastActivityDate="2020-01-15T10:26:44.737" Title="How to make old keyboard more responsive" Tags="&lt;keyboards&gt;&lt;hp&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13343" PostTypeId="1" CreationDate="2020-01-14T06:34:53.997" Score="6" ViewCount="159" Body="&lt;p&gt;I am trying to use some Tandy 1000 drives &lt;a href=&quot;https://www.cbmstuff.com/forum/showthread.php?tid=674&quot; rel=&quot;noreferrer&quot;&gt;with a SuperCard Pro&lt;/a&gt; and have encountered some anomalies using them as &quot;standard&quot; floppy drives. It appears that with the original (or at least, working and as the machine came to me) jumper settings the motor of the 5.25&quot; drive set as DS0 does &lt;strong&gt;not&lt;/strong&gt; run while everything else does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, when SCP tries to use it the LED of the drive comes on, and the head seeking steppers respond. But the spindle motor does not spin. Some further testing is a bit inclusive but it appears that with the default settings the first drive's motor only comes on when the &lt;strong&gt;second&lt;/strong&gt; (DS1) drive is in use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question here is about the floppy drive controller (FDC) on the Tandy 1000 itself: does it have any special behaviors that are relevant to drive selection and the motor enable features? It uses a straight-through/non-twisted cable and so I sort of expected it to fully use the drive selection wires but it seems maybe the drive expects the motor controls to be a little different?&lt;/p&gt;&#xA;" OwnerUserId="13904" LastActivityDate="2020-01-14T06:34:53.997" Title="How did the Tandy 1000 select its drives?" Tags="&lt;floppy-drive&gt;&lt;tandy-1000&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13344" PostTypeId="2" ParentId="13342" CreationDate="2020-01-14T07:10:55.853" Score="2" Body="&lt;p&gt;Maybe it is a feature, not a bug. Many keyboard manufacturers have models with a bigger resistance (you have to press it with a slightly bigger force). Some people with &quot;heavy fingers&quot; appreciate it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;small rubber things&quot; are the &quot;cheap springs&quot; alternative. Those give the resistance against pushing and provides the proper reaction to pushing (force and tactile feeling of &quot;press&quot;). You can replace those rings with some more &quot;soften&quot; to get the desired effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know it's available now. Try search &quot;keyboard replacement rubber spring&quot;. Maybe the easiest way is to find some broken keyboard with the same mechanism and try to salvage them.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-01-14T07:10:55.853" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13345" PostTypeId="2" ParentId="13301" CreationDate="2020-01-14T11:17:40.977" Score="7" Body="&lt;p&gt;My firm designed microcomputer boards in the late 1970s to early 1980s, and we often had discussions about whether a particular design was going to use static or dynamic RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you say &quot;static RAM, because it's quite a bit easier to get to work&quot;, you also need to remember that the refresh circuits cost design time, chips, and board space.  (No surface-mount: a pull-up resistor was 0.1 by 0.2 inch at minimum).  You needed to have a certain amount of RAM before any extra circuitry is worth the savings on the memory itself.  We didn't have the gate arrays and similar circuits of today, and the refresh circuits were tricky if they weren't to hold up the bus for the CPU periodically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 was as far as I remember unique in having built-in support for dynamic RAM, and so you will see DRAM much more commonly than with other CPUs, but you still had to multiplex the address bus.  As the Z80 had a separate IO space you didn't have to chop up the address space so much (though still needed for ROM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One super-economic design we made was a Motorola 6809 board which had 64 Kbyte dynamic RAM, with about 8 Kbyte ROM mapped in on A15 for a short period after reset.  We used software refresh: if the memory rows are the low-order address lines, you can refresh all of memory by accessing enough bytes in a row to hit all the rows.  We put a timer on the non-maskable interrupt, and the NMI response was a block of 127 No-ops and a Return-From-Interrupt.  (In fact it was a block of PAGE2 markers, which were only 1 cycle each, rather than 2-cycle NOPs: as an undocumented feature multiple PAGE2 opcodes behaved like a single one.)  Brutal but small and cheap way to get lots of memory.&lt;/p&gt;&#xA;" OwnerUserId="11208" LastEditorUserId="11208" LastEditDate="2020-01-14T11:22:47.333" LastActivityDate="2020-01-14T11:22:47.333" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13346" PostTypeId="1" AcceptedAnswerId="13349" CreationDate="2020-01-14T12:11:05.063" Score="2" ViewCount="234" Body="&lt;p&gt;Note this only appplies to the Models AandB as the Master had configuration set in NVRam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the BBC's initial listed requirements for their computer to Acorn was a default of Mode 4 :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot; START-UP OPTIONS&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A set of internal links will define the input, output and storage channels, and the screen display option, to be used on machine start-up. Default options will be as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Console input - Keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Console output - VDU display in mode 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;File input - Cassette recorder, high speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;File output - Cassette recorder, high speed &quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source ( as well as other sites ) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/docs/BBC/HardwareSpecification.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://chrisacorns.computinghistory.org.uk/docs/BBC/HardwareSpecification.txt&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do realise the tape control speed was moved to an OS command and the links on production machines control the startup mode and disc drive timings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question here is simply -why- was the Mode 4 requirement dropped ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could say default available memory vs Mode 7 however any program worth it's salt would start by selecting a Mode. A standard Model A does support this mode although memory would be a bit sparse for Basic unless it was changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also if you look around at various keyboard pics which is where the option links or dip switches would live, it seems very few of any at all early models had these fitted. Back then I saw numerous new machines and I do not recall seeing any with the dip switch fitted and none with a default mode other than 7 :)&lt;/p&gt;&#xA;" OwnerUserId="15907" LastActivityDate="2020-01-14T13:16:42.210" Title="BBC Micro default Mode specifications vs reality of production models" Tags="&lt;bbc-micro&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13347" PostTypeId="1" AcceptedAnswerId="13348" CreationDate="2020-01-14T12:36:37.793" Score="9" ViewCount="2357" Body="&lt;p&gt;I used to wonder why different versions of Basic on 8bit machines would impose different limits on the highest line number permitted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should point out this excludes any trickery to manually change a line number to an otherwise inaccepted value ( line 0 or 10000 in ZXBasic for example) yes I am well aware and used to use such tweaks myself :D It would be off question to go into it being stored twice anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my memory Locomotive Basic as used on the Amstrad CPC machines accepts up to 65535 which is logical as for storing a number &gt; 255 one would usually use two bytes, a low and high byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This brings me onto the question itself , BBC Basic on the Model A and B at least are limited to 32767 and ZxBasic is limited to 9999. I have not looked into what other platforms limit this as and I am not asking for a list :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question really is why impose these ( what appear to be ) artificial limits when they are if I am correct stored as two bytes anyway giving a range of up to 65535 ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot fathom any likely design reason for it and given the variances in displays between platforms in general it is nothing to do with neatness, besides Basic statements spill quite messily anyway it's part of it!&lt;/p&gt;&#xA;" OwnerUserId="15907" LastActivityDate="2020-01-15T21:43:50.343" Title="Variances in Basic highest line numbers" Tags="&lt;basic&gt;" AnswerCount="8" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13348" PostTypeId="2" ParentId="13347" CreationDate="2020-01-14T12:49:50.187" Score="22" Body="&lt;p&gt;The answer is pretty straightforward:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;65535 is for BASICs, which can handle number lines as an unsigned integer (2 bytes wide)&lt;/li&gt;&#xA;&lt;li&gt;BASICs, which handles two-byte integers as &quot;signed&quot;, usually have the line number limit 32767 (highest positive number). Those BASICs often have the &quot;negative addresses&quot; for POKEs and PEEKs, i.e. &quot;POKE -1247,10&quot; etc.&lt;/li&gt;&#xA;&lt;li&gt;Sinclair ZX BASIC has the &quot;4 digit limitation&quot; due to the formatting reasons when listing on the screen. The line numbers are aligned to the right, so the cursor character &quot;&gt;&quot; is always at position 5... See:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UKN1M.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UKN1M.png&quot; alt=&quot;ZX Spectrum listing&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the first two cases, it is the consequence of internal number handling. ZX Spectrum has a minimalistic approach, so the &quot;4 digit&quot; is, in my opinion, a fair trade-off between the lines count and line length...&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="11446" LastEditDate="2020-01-14T13:00:17.877" LastActivityDate="2020-01-14T13:00:17.877" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13349" PostTypeId="2" ParentId="13346" CreationDate="2020-01-14T13:16:42.210" Score="6" Body="&lt;p&gt;I expect the default screen mode was changed to 7 &lt;em&gt;precisely&lt;/em&gt; because it used less memory.  For text display purposes, it has the same number of rows and columns as well as the ability to handle colour, but uses only a tenth of the RAM - on the Model A, that would have been a serious concern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A consequence of this is that a program of any size can be loaded using Shift-BREAK, without having to potentially make room for it first by changing screen mode.  This would have been an annoying and potentially confusing extra step for many of the machine's intended users, which included young children.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-01-14T13:16:42.210" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13350" PostTypeId="1" AcceptedAnswerId="13351" CreationDate="2020-01-14T14:37:06.227" Score="4" ViewCount="1064" Body="&lt;ol&gt;&#xA;&lt;li&gt;Create the Gen 1 machine with less than 512MiB Ram (above requires you to put MaxFileCache=524288 and MaxPhysPage=40000 in the system.ini later).&lt;/li&gt;&#xA;&lt;li&gt;Add either a virtual or physical IDE drive (physical requires you to go to Disk Management and right-click on the drive and click offline to be detected and doesn't need to be IDE itself).&lt;/li&gt;&#xA;&lt;li&gt;Add a CD ROM drive from your bootable Windows 98SE iso image.&lt;/li&gt;&#xA;&lt;li&gt;Boot it, you might either install right away or run a prompt entering setup /is to skip disk check.&lt;/li&gt;&#xA;&lt;li&gt;Your keyboard should work as long as you &lt;strong&gt;don't&lt;/strong&gt; click inside the window when the setup starts, else your keyboard and mouse get mounted and unusable, so only click the hyper-v title bar, or you might think the window froze which it did &lt;strong&gt;not&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;You can go trough the whole progress with only your keyboard and without mouse, or you can close and start over from step 4.&lt;/li&gt;&#xA;&lt;li&gt;When the installation is done you can reboot.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;You will be greeted with the fresh new message:&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/XwWy4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XwWy4.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;So how do &lt;strong&gt;you&lt;/strong&gt; get past this error?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The funny part is that it doesn't happen at the setup, only at start-up (finishing the installation).&lt;/p&gt;&#xA;&lt;p&gt;I just wanted to share this, because I've not seen anybody else post about it.&lt;/p&gt;&#xA;" OwnerUserId="15103" LastEditorUserId="15334" LastEditDate="2021-02-01T13:17:33.667" LastActivityDate="2021-02-01T13:17:33.667" Title="How I can install Windows 98SE in Hyper-V, but can't run it after" Tags="&lt;keyboards&gt;&lt;windows-98&gt;&lt;hard-disk&gt;&lt;mouse&gt;&lt;virtual-memory&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13351" PostTypeId="2" ParentId="13350" CreationDate="2020-01-14T14:50:02.090" Score="3" Body="&lt;p&gt;I recently had the exact same problem with Win98SE on VirtualBox on an AMD CPU. There the solution was to run&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;vBoxManage.exe modifyvm &quot;Win98&quot; --cpu-profile &quot;Intel Core i5-3570&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I think there is a similar option in Hyper-V to change used CPU profile.&lt;/p&gt;&#xA;" OwnerUserId="11204" LastEditorUserId="11204" LastEditDate="2020-01-15T11:30:07.007" LastActivityDate="2020-01-15T11:30:07.007" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13352" PostTypeId="2" ParentId="13347" CreationDate="2020-01-14T18:49:23.263" Score="20" Body="&lt;p&gt;With so many different implementations of BASIC a comprehensive answer is difficult.  So here's the limits for TRS-80 Model I and III BASIC (written by Microsoft).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line numbers are stored as a two byte word but the largest allowed by the input routines is 65529.  Primarily because this is an easier limit to test rather than checking for overflow.  The line number is converted from ASCII to binary a character at a time using a pretty standard algorithm.  Start with a 16 bit value &lt;code&gt;line&lt;/code&gt; = 0.  For each digit multiply &lt;code&gt;line&lt;/code&gt; by 10 and add the digit to &lt;code&gt;line&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To check if the line number is acceptable, compare &lt;code&gt;line&lt;/code&gt; against 6552 &lt;em&gt;before&lt;/em&gt; multiplying it by 10.  This will guarantee the value is &amp;lt;= 65529 because a digit can add only 9 at most.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Model I/III processor is a Z-80 which has no hardware multiply instruction.  Checking for carry after each step in the multiply by 10 code would require 4 branch instructions (and one after the digit add) whereas the comparison as written is only one.  ROM space was at a premium so losing a few line numbers was worth the space savings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This BASIC also reserves some line numbers for special purposes.  It tracks a current line number when running the program but uses a current line number of $FFFF (65535) to indicate &quot;direct&quot; mode (i.e., at the &lt;code&gt;READY&lt;/code&gt; prompt).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$FFFE (65534) triggers a reboot in the error message routine.  This is only used at startup when the ROM asks &lt;code&gt;Memory Size?&lt;/code&gt; allowing the user to set the top of available memory.  If an address too low or too high or an invalid number is entered the error routine is called which must reboot since BASIC hasn't been fully initialized.&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2020-01-15T18:26:38.757" LastActivityDate="2020-01-15T18:26:38.757" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13353" PostTypeId="2" ParentId="12752" CreationDate="2020-01-14T19:25:04.830" Score="3" Body="&lt;p&gt;There is an open-source C64 ROM replacement project in development: &lt;a href=&quot;https://github.com/MEGA65/open-roms&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/MEGA65/open-roms&lt;/a&gt;. It contains a DOS Wedge, it can also use JiffyDOS and DolphinDOS protocols to communicate with the drive.&lt;/p&gt;&#xA;" OwnerUserId="16004" LastActivityDate="2020-01-14T19:25:04.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13354" PostTypeId="2" ParentId="13347" CreationDate="2020-01-14T23:30:00.673" Score="13" Body="&lt;p&gt;On the original Dartmouth Time-Sharing BASIC (circa 1964), the maximum line number was 99999.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dartmouth Time-Sharing ran on a hybrid Datanet-30 / GE 235 system. The Datanet-30 could communicate with up to 128 terminals at once, and handled the I/O. The GE 235 was better at computation and was responsible for executing the BASIC programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;99999+1 was the largest power of 10 that could be stored in the Datanet-30's 18-bit words.&lt;/p&gt;&#xA;" OwnerUserId="4311" LastActivityDate="2020-01-14T23:30:00.673" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13355" PostTypeId="1" AcceptedAnswerId="13357" CreationDate="2020-01-15T01:33:31.797" Score="18" ViewCount="2295" Body="&lt;p&gt;Assuming that &lt;a href=&quot;http://www.weihenstephan.org/~michaste/pagetable/6502/6502.jpg&quot; rel=&quot;noreferrer&quot;&gt;this diagram&lt;/a&gt; is correct:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jcZM2.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jcZM2.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instructions like INC, INX, and INY can easily perform increment using ALU sum with data on B input, 0 on A input and carry_in set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But how do instructions like DEC, DEX and DEY work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can decrement by adding -1 which is 0xFF, and it can have 0xFF by inverting 0 BUT 0 can only be set on A input and inverting can only be done on B input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how does it perform a decrement?&lt;/p&gt;&#xA;" OwnerUserId="16008" LastEditorUserId="6794" LastEditDate="2020-01-16T10:07:23.937" LastActivityDate="2020-05-13T14:29:18.823" Title="How did the 6502 ALU perform a decrement?" Tags="&lt;6502&gt;&lt;instruction-set&gt;&lt;alu&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13357" PostTypeId="2" ParentId="13355" CreationDate="2020-01-15T04:16:18.187" Score="23" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;But how instructions like DEC, DEX and DEY works ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By adding $FF provided by the precharged internal data bus to the register content.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;In Detail:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The internal databus is precharged with $FF during PHI2 (*1)&lt;/li&gt;&#xA;&lt;li&gt;During the next phase it's loaded into the B register (signal DB/ADD)&lt;/li&gt;&#xA;&lt;li&gt;At the same time the index register is transfered via SB (*/SB) to the A register (SB/ADD)&lt;/li&gt;&#xA;&lt;li&gt;SUMS is pulled thus $FF is added to the register content, effectively decrementing it (*2).&lt;/li&gt;&#xA;&lt;li&gt;The result is transfered back via SB (ADD/SB7 + ADD/SB(0..6)) to either index register (SB/*).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Background 1: NMOS switching (Abbreviated Version)&lt;/h3&gt;&#xA;&lt;p&gt;While using the precharge to supply a $FF constant is a real nifty feature, it's more of a hack base on a side effect to speed up NMOS operation.&lt;/p&gt;&#xA;&lt;p&gt;The precharge exists due the way &lt;a href=&quot;https://en.wikipedia.org/wiki/MOSFET&quot; rel=&quot;nofollow noreferrer&quot;&gt;MOS-FET&lt;/a&gt; and NMOS Logic work. Effectively each FET (and line) is a (comparable) large capacitor. Loading and unloading takes time in relation to resistance in the circuit. In NMOS logic the transistor is placed between the output and ground. On the other side the output is connected to Vcc (+5V) via a resistor.&lt;/p&gt;&#xA;&lt;p&gt;When the Transistor switches on, the output is grounded with a very low resistance, puting the output extrem fast toward Low. When it's switched off, the output is loaded via the resistor. Thus changing a signal line from Low to High takes considerable longer than going from High to Low.&lt;/p&gt;&#xA;&lt;p&gt;By precharging lines with High value ahead of time and then pulling them down when a signal is to be transmitted, minimizes switch time to the lower of both, resulting in faster operation.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Background 2: Use of Precharge for Constant Generation on 6502&lt;/h3&gt;&#xA;&lt;p&gt;On the 6502 precharge is thus present on all 4 internal busses (DB, ADL, ADH, SB). Beside providing $FF for decrement on DB, it's well used on ADH and ADL to generate constant values:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Constant generated on DB&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$FF by default&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Constants generated on ADH:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$FF for vector pull - by default&lt;/li&gt;&#xA;&lt;li&gt;$01 for stack page addressing - by pulling 0/ADH(1-7)&lt;/li&gt;&#xA;&lt;li&gt;$00 for zero page addressing - by pulling 0/ADH(1-7) and 0/ADH0&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Constants generated on ADL:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$FE/$FF for INT - by default value plus 0/ADL0 on first access&lt;/li&gt;&#xA;&lt;li&gt;$FC/$FD for Reset - by 0/ADL1 plus 0/ADL0 on first access&lt;/li&gt;&#xA;&lt;li&gt;$FA/$FB for NMI - by 0/ADL2 plus 0/ADL0 on first access&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Another special use is with transfering ALU results to SB. The ALU does not shift-in Carry on a ROR, but always sets bit 7 to Zero. So when the ALU result is transfered after a ROR, bit 7 is only transfered if carry was cleared. Otherwise transfer for bit 7 is supressed, replacing it by a precharged One.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Precharge behaviour is a major reason why the 6502 is not static, as the precharged values will vanish after some time, making many operations invalid.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Background 3: Hanson Diagramm&lt;/h3&gt;&#xA;&lt;p&gt;It has been asked where the signal names originated. They are taken from the famous &lt;a href=&quot;http://www.witwright.com/DonPub/6502-Block-Diagram.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hanson diagram&lt;/a&gt; - as cited by the OP (*3) - which is nowadays the de-facto standard for interpreting the 6502 (despite having a few little inconsistencies; *4). It was part  of an equally famous 1995 &lt;a href=&quot;http://www.witwright.com/DonPub/DSH_6502_ComputerArch.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;article by Mr. Hanson&lt;/a&gt; about making D-Latches in VHDL. To my knowledge the diagram was first drawn up in 1982 during studies of the original 6502 blueprints.&lt;/p&gt;&#xA;&lt;p&gt;The names are rather straight forward, like Y/SB meaning connect Y output to Special Bus (the register data bus), or SB/Y to enable loading Y from SB. Next to all modern sources use these names, or derivations thereof. Most notable maybe the &lt;a href=&quot;http://www.visual6502.org/JSSim/expert.html?logmore=DPControl&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visual 6502 simulation&lt;/a&gt; (used in DPcontrol output; see the &lt;a href=&quot;https://github.com/trebonian/visual6502/blob/master/nodenames.js&quot; rel=&quot;nofollow noreferrer&quot;&gt;nodenames.js&lt;/a&gt; source for all names used; *5).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Note the Prechage MOSFET box in the top left quadrant, beside DB, right below the Data Output Register box&lt;/p&gt;&#xA;&lt;p&gt;*2 - It's an unsigned 8 bit addition &lt;code&gt;(n + 255) mod 256&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Please use, whenever possible the cleaned up version provided by Mr. Hanson at &lt;a href=&quot;http://www.witwright.com/DonPub/6502-Block-Diagram.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.witwright.com/DonPub/6502-Block-Diagram.pdf&lt;/a&gt;. The often used copies of copies of scans are quite ugly and hard to read.&lt;/p&gt;&#xA;&lt;p&gt;*4 - For example there is a signal generated if DB is negative or the flipflops shown as part of the logic don't fully add up, but these are details that only come up when trying to recreate the CPU.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Searching it is quite handy to find meaning and usage - as the Visual 6502 in general is a great tool to peek into the 6502.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-05-13T14:29:18.823" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="13358" PostTypeId="2" ParentId="13347" CreationDate="2020-01-15T11:20:03.443" Score="4" Body="&lt;p&gt;According to &lt;a href=&quot;https://mirrors.apple2.org.za/ground.icaen.uiowa.edu/apple8/Languages/ZBasic/ZBASIC.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z BASIC Interactive BASIC Compiler&lt;/a&gt; [170 page, 2MB PDF] (or &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/zedcor/Zbasic_4ed_Apr87.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this 772 page, 32MB version&lt;/a&gt;, from which quotes below are taken), the &lt;strong&gt;Z BASIC Interpreter&lt;/strong&gt; (which seemed to be available for MS-DOS, APPLE, Macintosh, CP/M and TRS-80 Models 1,3 and 4), has a maximum line number of 65,534 (and the minimum is 0):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Standard Line Editor requires each line of a program to have a line number for editing and reference purposes (labels are available too.) Line numbers may range from 0-65534. Each line can be up to 250 characters long&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;sub&gt;p14 (16 of PDF)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Although it may have other uses, line number 65,535 seems to be reserved for nuances in error-handling:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;ON ERROR statement&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;ON ERROR GOSUB 65535&lt;/code&gt;&lt;br&gt;&#xA;  Enable user disk error trapping. Errors are returned&#xA;  using the &lt;code&gt;ERROR&lt;/code&gt; function. You must check for&#xA;  errors---ZBasic will not when this parameter is set.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;ON ERROR GOSUB line&lt;/code&gt;&lt;br&gt;&#xA;  If a disk error occurs the program does a &lt;code&gt;GOSUB&lt;/code&gt; to&#xA;  the line or label specified.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;ON ERROR RETURN&lt;/code&gt;&lt;br&gt;&#xA;  Disable user disk error trapping. ZBasic will trap the&#xA;  disk errors and give error messages at runtime.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;sub&gt;p283 (285 of PDF)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;ON ERROR GOSUB 65535&lt;/code&gt; variant seems to be similar to &lt;code&gt;ON ERROR RESUME NEXT&lt;/code&gt; in Visual Basic, meaning: &quot;&lt;em&gt;don't complain, I'll check the error-code myself (if I can be bothered)&lt;/em&gt;&quot;.&lt;/p&gt;&#xA;" OwnerUserId="731" LastActivityDate="2020-01-15T11:20:03.443" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13359" PostTypeId="2" ParentId="13347" CreationDate="2020-01-15T14:40:56.357" Score="5" Body="&lt;p&gt;BBC BASIC V, as used on the Acorn Archimedes, had a maximum line number of 65279 according to Matt Godbolt's &lt;a href=&quot;https://xania.org/200711/bbc-basic-v-format&quot; rel=&quot;noreferrer&quot;&gt;analysis of the tokenised file format&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Each line is stored as a sequence of bytes:&lt;br&gt;&#xA;  &lt;code&gt;0x0d [line num hi] [line num lo] [line len] [data...]&lt;/code&gt;&lt;br&gt;&#xA;  The line number&#xA;  is as you’d expect — the line number — with one exception. The maximum&#xA;  line number is 65279 (0xfeff) as the special marker 0x0d 0xff is used&#xA;  to signify the end of the program. The line length includes the three&#xA;  preceding bytes, making the maximum length of a line 251 bytes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In the 8-bit versions of BBC BASIC (checked on a BBC B and BBC Master emulator), the maximum line number that can be entered at the prompt is 32767.  Higher numbers result in &lt;code&gt;Syntax error&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-01-15T14:40:56.357" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13360" PostTypeId="2" ParentId="9666" CreationDate="2020-01-15T16:26:40.337" Score="1" Body="&lt;p&gt;Modern CPU architectures also need to facilitate things like memory protection, so they need to implement restrictions on what machine code can and cannot effect depending on context. You do not want normal application code to be able to mess with other code in a multiuser/multitasking environment, and you certainly do not want it to be able to crash the machine wholesale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An architecture allowing a near arbitrary number of instructions with unintuitive effects, maybe even side effects of &quot;illegal&quot; instructions that arise from causing hardware-level conflicts, or even worse creating odd conditions that will cause unexpected behaviour of instructions further down the line, will make this very hard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a security context, even something that has the side effect of probabilistically or deterministically defining the behaviour of an undefined action can be bad news - this can facilitate unwanted monitoring of or communication with other running code....&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2020-01-15T16:26:40.337" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13361" PostTypeId="1" AcceptedAnswerId="13363" CreationDate="2020-01-15T17:27:53.293" Score="13" ViewCount="2033" Body="&lt;p&gt;According to Gordon Bell, the 6800 was based on the PDP-11. According to Chuck Peddle, it was a PDP-8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone with knowledge of the PDP's pass judgement?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="-1" LastEditDate="2020-01-16T02:23:28.197" LastActivityDate="2020-03-19T19:20:05.080" Title="Was the MC6800 a PDP-11 or PDP-8?" Tags="&lt;pdp-11&gt;&lt;pdp-8&gt;&lt;6800&gt;" AnswerCount="6" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13362" PostTypeId="2" ParentId="13347" CreationDate="2020-01-15T17:37:03.020" Score="5" Body="&lt;p&gt;I have actually looked into this in some depth. All major variations of BASIC that I can find source for store the line number as an int.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This includes even Tiny BASIC, which used a single unsigned byte, as one could not type a program with 255 lines into their target machines (4k total memory) anyway. All others that I have looked at - Altair, MS 6502, Atari and BBC all used a 16-bit int.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Tiny, the only parsing completed on the line at edit time was the line number. All of the rest of the line was left in its original text format. MS parsed the number and the first token of every statement, the rest text. Atari parsed the entire line into tokens - I can't recall what BBC did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Almost all BASICs reserved one line to indicate &quot;immediate mode&quot;, lines entered without a number. This was often 0 or -1, although I recall others being used as well. This often resulted in two lines being set aside, -1 and zero being illegal in the parser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Atari used a signed int and made everything -ve as immediate mode. In practice, you can only have a single immediate mode line, so that was -1 (or as &lt;a href=&quot;https://www.atariarchives.org/c1ba/page026.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;in some books&lt;/a&gt;, 32678). Zero &lt;em&gt;was&lt;/em&gt; allowed. I'm not sure why they did this, as there was no 16-bit math package or such, and using 0 or FFFF for immediate seems to be a better solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have written a BASIC parser in lex/yacc with the express intent of checking what ranges programs actually use.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2020-01-15T18:02:50.037" LastActivityDate="2020-01-15T18:02:50.037" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13363" PostTypeId="2" ParentId="13361" CreationDate="2020-01-15T17:58:34.330" Score="13" Body="&lt;p&gt;Most sources say it was based on PDP-11.&lt;/p&gt;&#xA;&lt;p&gt;Here are citations from &lt;a href=&quot;http://pediapress.com/books/show/early-home-computers-by-wikipedians/&quot; rel=&quot;noreferrer&quot;&gt;the book &amp;quot;Early Home Computers&amp;quot;&lt;/a&gt;, summarizing the similarities and the differences:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Unlike the PDP-11, 6502 and 8080, the 6800 was big-endian, as was the IBM 360 (...)&lt;/p&gt;&#xA;&lt;p&gt;Unlike the PDP-11 and 6502, but like the 8080, the 6800 used borrow carry (...)&lt;/p&gt;&#xA;&lt;p&gt;Unlike the 8080 and especially the PDP-8, but like the PDP-11, the 6800 had no special-purpose I/O instructions (...)&lt;/p&gt;&#xA;&lt;p&gt;(...) the zero-page is similar to the zero-page mode of the PDP-8 (...)&lt;/p&gt;&#xA;&lt;p&gt;The instruction set mnemonics owe a great deal to the PDP-11 (...)&lt;/p&gt;&#xA;&lt;p&gt;Unlike the 8080 and the 6502, the 6800 had a complete set of branch instructions, basically identical to those provided on the PDP-11, for comparing both signed and unsigned quantities (...)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(&lt;a href=&quot;https://books.google.cz/books?id=tC_ZpAyGwiMC&amp;amp;pg=PA875&amp;amp;lpg=PA875&amp;amp;source=bl&amp;amp;ots=oV3QNAoD6P&amp;amp;sig=ACfU3U1Js1Pv0yzLugviS2yQHJlCqBqDIA&amp;amp;hl=cs&amp;amp;sa=X&amp;amp;ved=2ahUKEwjFt_6alIbnAhVk5OAKHVwsA48Q6AEwBXoECAgQAQ#v=onepage&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;available online in the Google Archive&lt;/a&gt;, page 875)&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-15T18:00:24.433" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13364" PostTypeId="2" ParentId="13347" CreationDate="2020-01-15T19:58:21.907" Score="2" Body="&lt;p&gt;Donald Alcock's, who treats &quot;the need for portability as an axiom&quot;, wrote in &lt;em&gt;Illustrating BASIC&lt;/em&gt; (Cambridge University Press, 1977):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hKrxo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hKrxo.png&quot; alt=&quot;The first line number in a program must be greater than 0. There is always a limit to the highest line number: some BASICs stop at 9999, so it is best to accept this as the limit.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11208" LastEditorUserId="11208" LastEditDate="2020-01-15T20:20:33.003" LastActivityDate="2020-01-15T20:20:33.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13365" PostTypeId="1" AcceptedAnswerId="13367" CreationDate="2020-01-15T20:41:04.590" Score="16" ViewCount="1550" Body="&lt;p&gt;I know that the Commodore 1571 drive works perfectly well with a C64, since the 1571 will detect it is connected to a C64, and will enter 1541 emulation mode. After which, the 1571 just behaves as a 1541.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BUT, the 1571 is a much more capable drive. Enhanced capabilities beyond the 1541 that I'm aware of include:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Double-sided disk support, doubling the drive's capacity.&lt;/li&gt;&#xA;&lt;li&gt;Can reliably access tracks 36-40, for even greater capacity.&lt;/li&gt;&#xA;&lt;li&gt;MFM support, so compatible with CP/M and MS-DOS floppies.&lt;/li&gt;&#xA;&lt;li&gt;High-speed serial (&quot;Burst&quot;) mode for faster file access.&lt;/li&gt;&#xA;&lt;li&gt;Improved CBM-DOS 3.0 in the ROM.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is it possible to use the 1571 with the C64 in a manner that can utilize these enhanced capabilities?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: I'm especially interested in software hacks that can make 1571 capabilities accessible. I know there is little support in the C64 firmware for the 1571 since it pre-dates that drive by many years.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="13904" LastEditDate="2020-01-16T21:45:10.780" LastActivityDate="2020-01-16T21:45:10.780" Title="Can I use all features of a Commodore 1571 external drive from a C64?" Tags="&lt;commodore-64&gt;&lt;floppy-drive&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13366" PostTypeId="2" ParentId="13361" CreationDate="2020-01-15T20:41:57.673" Score="14" Body="&lt;p&gt;In spirit it's both, thus eventually neither.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Features of the 6800 can be put in line with many CPUs of that time - from PDP-8 and -11 all the way to TI's 990 or even IBM's /360 - but none will put it decisively into being based on either. In fact, many of the arguments that can be used to put the 6800 into PDP-8/-11 heritage can as well be applied to the 8080 - except, there is a quite clear lineage form the Datapoint 2200 to 8080 (and ultimately x86). It started before the PDP-11 and not really being anywhere like the PDP-8 - whose main feature is being a 12-bit CPU. So most of these similarities are rather due to the fact that these are obvious solutions than of a certain heritage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As said, the similarities can at best be attributed to the designers being exposed to either DEC machine before, and thus seeing it through that preposition.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2020-01-16T21:01:00.733" LastActivityDate="2020-01-16T21:01:00.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13367" PostTypeId="2" ParentId="13365" CreationDate="2020-01-15T20:44:44.127" Score="18" Body="&lt;h2&gt;Mode Selection and Switching&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By default a 1571 always boots up in 1541-mode&lt;/li&gt;&#xA;&lt;li&gt;when detecting the first burst (C128) transfer it switches automatic into 1571-mode.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;OPEN 1,8,15,&amp;quot;U0&amp;gt;M1&amp;quot;:CLOSE 1&lt;/code&gt; will switch 'manual' into 1571-mode.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;OPEN 1,8,15,&amp;quot;U0&amp;gt;M0&amp;quot;:CLOSE 1&lt;/code&gt; switches back to 1541-mode&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Additional Features in 1541 Mode&lt;/h2&gt;&#xA;&lt;p&gt;While the 1571 behaves by default (or when switched) like a 1541, many of the additional features can be used as well. For example handling both sides of the drive:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Command &amp;quot;U0&amp;gt;H0&amp;quot; will select the first (lower, standard) head.&lt;/li&gt;&#xA;&lt;li&gt;Command &amp;quot;U0&amp;gt;H1&amp;quot; will select the second (upper) head (*1).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Additional Tracks&lt;/h2&gt;&#xA;&lt;p&gt;The mentioned increased tracks are by default only available in MFM format.&lt;/p&gt;&#xA;&lt;h2&gt;Fast Transfer&lt;/h2&gt;&#xA;&lt;p&gt;Fast transfer can be used only with a modified/extended C64 Kernel/&lt;a href=&quot;http://d81.de/R.I.P/Floppy1571-Burstmode.pdf&quot; rel=&quot;noreferrer&quot;&gt;Fast-Loader&lt;/a&gt; - essentially behaving like a C128, thus using the automatic switch to 1571-mode. In fact, for next to everything but basic 1541 operations a modified handler is neccessary.&lt;/p&gt;&#xA;&lt;p&gt;Back in the days, there has been a near endless amount of utilities and patches to do so - at least it seams like when looking into old German magazines like 64'er. One of the most ambitious might have been BDOS, to handle IBM compatible MFM floppies. It runs as well on the C64 with some simple add on hardware to support burst mode. See &lt;a href=&quot;https://archive.org/details/64er_1989_06/page/n55?q=BDOS&quot; rel=&quot;noreferrer&quot;&gt;p.55 of June 1989 issue of 64'er&lt;/a&gt;. To my knowledge it was written by the well known &lt;a href=&quot;http://www.6502.org/users/andre/&quot; rel=&quot;noreferrer&quot;&gt;Andre Fachat&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - This still will not behave like a flipped disk on a 1541, as the direction isn't reversed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-16T16:03:43.137" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13368" PostTypeId="2" ParentId="13347" CreationDate="2020-01-15T21:13:45.640" Score="2" Body="&lt;p&gt;I tested that with an emulator and it appears that the Oric basic (coded Microsoft) accepts lines from 0 to 63999&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trying to create a line number 64000 (hex &lt;code&gt;0xFA00&lt;/code&gt;) results in a syntax error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.defence-force.org/computing/oric/library/lib_manual_oric/files/manual_atmos.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oric Atmos manual&lt;/a&gt; confirms this on page 15:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The line number may be any integer (whole number) up to 63999&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Some comments in the &lt;a href=&quot;http://www.defence-force.org/ftp/oric/documentation/v1.1_rom_disassembly.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oric disassembled rom&lt;/a&gt; seem to indicate that high byte &lt;code&gt;0xFF&lt;/code&gt; is reserved for in-line mode:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C4A0 A4 A9 LDY $A9 If high byte of line number&#xA;C4A2 C8 INY is #FF then the computer is in&#xA;C4A3 F0 03 BEQ $C4A8 immediate mode (not program).&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;also here:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C4C7 A2 FF LDX #$FF Set immediate mode&#xA;C4C9 86 A9 STX $A9&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Clearly this limits to maximum &lt;code&gt;0xFE00&lt;/code&gt; (65024). But this 64000 thing is probably clearer to remember from an user point of view than 65024. Also easier to test (only MSB to check against) and a multiple of 1000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The part that checks for that limit is probably here:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CAF2 C9 19 CMP #$19 Syntax error if MSB is over&#xA;CAF4 B0 D4 BCS $CACA 25 - result will be too big.&#xA;CAF6 A5 33 LDA $33 Multiply original number by&#xA;CAF8 0A ASL A 10, firstly adding itself to&#xA;CAF9 26 91 ROL $91 4 times itself to give 5 times&#xA;CAFB 0A ASL A itself. Then double result.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;as &lt;code&gt;0x1900&lt;/code&gt; is &lt;code&gt;6400&lt;/code&gt; and then value is multiplied by 10. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that those properties (direct mode &amp;amp; multiplication by 10) are very similar to TRS-80 Microsoft basic as exposed in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13352/3316&quot;&gt;another answer&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-01-15T21:43:50.343" LastActivityDate="2020-01-15T21:43:50.343" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13370" PostTypeId="2" ParentId="9202" CreationDate="2020-01-16T14:51:10.437" Score="1" Body="&lt;p&gt;The &quot;overheating&quot; smell might emerge from the dust accreted on the heating components, if the device was off for a long time. So you could try to clean the dust off the PCB and components to get rid of the smell.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-01-16T14:51:10.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13371" PostTypeId="2" ParentId="9666" CreationDate="2020-01-16T16:37:57.647" Score="3" Body="&lt;p&gt;Another good example of this basic architecture is the HP2100 series, which had a series of bit-field instructions that performed things like test-and-branch. They could combine up to eight instructions in some cases. This basic idea was relatively common in the few minicomputers I've looked at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason they fell out of favor was that they require expansion of the microcode engine to store more state, and thus they make simple pipelining more difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the 6502; it ran at roughly 2x the speed of other CPUs of the era at any given clock rate because it was always fetching the next instruction while the last was completing. This was simple to implement even though the instructions took anywhere from 2 to 7 cycles (IIRC) to complete.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But imagine if those instructions are, effectively, macros. In that case you have to decode and the feed the individual sub-instructions into the pipeline. Not impossible, but certainly complex. So the question ultimately comes down to code density - the 6502 was designed as a microcontroller, so density was not super-important while gate count was. In a mini, which cost the equivalent of $100,000 but may have still only had 4k of memory, things look very different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure I would say these are VLIW. As I understand it, VLIW extracts parallelism by encoding different instructions for different functional units into a single instruction. This is not the same; these multi-instructions loops over the same functional units. It seems more in keeping with something like the 68k's microprogram, no?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-01-16T16:37:57.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13373" PostTypeId="2" ParentId="13361" CreationDate="2020-01-16T18:52:06.833" Score="5" Body="&lt;p&gt;I wonder if there isn't a minor mistake in the CPU being discussed in one of those.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's very easy to see the 68K as nearly a direct descendant of the PDP-11. The 68K has separate data and address registers, but programming it is &lt;em&gt;mostly&lt;/em&gt; quite similar to programming a PDP-11.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd say the 6800 is (much) closer to a PDP-8. If memory serves, the 6800 has two accumulators and an index register (and PC and stack pointer). My recollection of the PDP-8 isn't quite as clear, but I think it had one accumulator, an index register, a &quot;memory transfer register&quot; (and a PC, but no stack pointer). So, both use an accumulator for most instructions, use a dedicated register for indirect transfers to/from memory, and so on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, it seems to me like it takes some thought to see the similarity between the PDP-8 and the 6800, where the similarity between the 68K and the PDP-11 always struck me as almost exceedingly obvious.&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2020-01-16T19:34:59.027" LastActivityDate="2020-01-16T19:34:59.027" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13374" PostTypeId="2" ParentId="12383" CreationDate="2020-01-16T19:09:55.413" Score="3" Body="&lt;p&gt;I have something to add.  It's not exactly an answer, but it's too long for a comment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are linking to 11Logo (which I put on GitHub, courtesy of CSAIL), but this wasn't the first version of Logo.  It was first implemented on PDP-1 at BBN, and later updated for a PDP-10.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-10 version was moved to MIT (the files still have a BBN copyright notice), where it served as a reference for future implementations.  Next, around 1971, were Lisp Logo and 11Logo, close in time.  In the second half of the 70s came Pascal Logo which inspired TI Logo.  And slightly later Apple Logo.  There was an abortive attempt at an Atari Logo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &quot;floor turtle&quot; (which is what they called the robot) was made at BBN.  I don't know if they also had a display turtle.  At MIT there was first the big yellow turtle for PDP-10 Logo, and later a smaller transparent half dome version.  I have the impression the MIT display turtle came after the floor turtle.  There was also a Nova minicomputer involved, which could drive several smaller displays.  These are visible in some Logo film footage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My references for this are from files backed up from the MIT-AI PDP-10, and from email conversations with Logo people.&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2020-01-16T19:39:11.160" LastActivityDate="2020-01-16T19:39:11.160" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13375" PostTypeId="2" ParentId="12327" CreationDate="2020-01-16T20:28:37.323" Score="1" Body="&lt;p&gt;Do you consider the LSI-11 a microcomputer?  It's an implementation of a PDP-11 using an 8-bit microprocessor under the hood.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;11Logo was ported to the LSI-11, which was the processor for the commercialized Logo computer (the 3500) from General Turtle.  This happened around 1978, which is clearly before the earliest &quot;true micro&quot; Logo ~1980.&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2020-01-16T20:28:37.323" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13376" PostTypeId="1" AcceptedAnswerId="13383" CreationDate="2020-01-17T03:50:01.667" Score="9" ViewCount="370" Body="&lt;p&gt;The Apple II provided the ability to connect to your TV (as opposed to purchasing a dedicated monitor). However, at that time, the FCC criterion for applying stringent RF emission limits was 'device that connects to your TV' (as opposed to in the eighties when it changed to 'device that is marketed to consumers'), and Apple was unable to comply with those limits, so they dodged the regulation by encouraging another company to supply the RF modulator: &lt;a href=&quot;https://en.wikipedia.org/wiki/Sup%27R%27Mod&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Sup%27R%27Mod&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was Apple unable to comply with the limits when e.g. Atari managed it? To some extent it was simply a matter of difficult engineering, but I have also seen it suggested that the expansion slots were the spoiler. I can understand how this might be so, given that the case had openings in the back through which cables could run to expansion cards. Later, the IBM PC solved the problem by covering all such openings with metal slats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was that the problem, and could the Apple II have solved it that way? Or was it a more fundamental problem of being unable to guarantee emissions compliance with every possible expansion card? Which way did the FCC see it?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-15T22:44:32.773" Title="Were expansion slots fundamentally incompatible with FCC regulations?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;apple-ii&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13377" PostTypeId="2" ParentId="4421" CreationDate="2020-01-17T04:09:41.850" Score="1" Body="&lt;p&gt;The HP ScanJet 5p may have done. I ran one under Linux before 2002, and it needed a different SCSI driver that was sold as part of the tummy.com XVScan package. It referred to itself as a &quot;SCSI SG driver&quot;, so maybe?&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-01-17T04:09:41.850" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13378" PostTypeId="1" AcceptedAnswerId="13379" CreationDate="2020-01-17T16:05:56.513" Score="18" ViewCount="3103" Body="&lt;p&gt;All the game consoles of the second through fourth generations, and several early home computers, had sprites, which were valuable though costly, e.g. the VIC-II spent 2/3 to 3/4 of its area on sprites, and the Atari 800, which shipped three years earlier so was more restricted in number of transistors per chip, split the graphics system into two separate chips for their sake.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know exactly how sprites work at the hardware level, but this pseudocode description &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/PPU_sprite_evaluation&quot; rel=&quot;noreferrer&quot;&gt;https://wiki.nesdev.com/w/index.php/PPU_sprite_evaluation&lt;/a&gt; certainly looks very complicated, as does the circuitry in a die photo of the VIC-II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing that strikes me about all these sprite systems is that they are &lt;em&gt;unrestricted&lt;/em&gt; in what can overlap what; you can have all eight sprites overlapping each other, with parts of background showing through, so that each pixel can come from one of nine different sources, and the hardware guarantees to handle this perfectly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intuitively, it seems like it should be possible to greatly simplify the circuits if you can place some restrictions on this, e.g. if the programmer can guarantee that sprites will never overlap each other, and that they will be presented in numerically increasing order on each scan line. For many games, it would be trivial to make the no-overlap guarantee (e.g. enemy attack waves fly in set patterns that never overlap anyway) and cost little CPU time to also ensure numerically increasing order (sprite 0 always to the left of sprite 1 etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did historical sprite systems provide unrestricted positioning and overlap because the designers believed this was very valuable in reducing game development cost? Or was it because my intuition is wrong (which is quite possible; I'm a programmer, not a hardware engineer), and once you are implementing sprites at all, the cheapest implementation provides unrestricted positioning and overlap more or less automatically?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-10-20T19:51:45.620" Title="Cost of unrestricted sprites" Tags="&lt;history&gt;&lt;hardware&gt;&lt;video&gt;&lt;chip&gt;&lt;sprite&gt;" AnswerCount="7" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13379" PostTypeId="2" ParentId="13378" CreationDate="2020-01-17T16:23:16.327" Score="17" Body="&lt;p&gt;Hardware of this sort has to be able to cope with the worst-case scenario in any given dot-clock cycle.  So it has to look at the top layer pixel, determine whether that is transparent, and if so go down to the next layer and repeat.  Only when it finds an opaque pixel (which may be the background) can it determine the colour to drive the video output with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most sprite hardware of this era therefore handles only a limited number of sprites.  In the case of the VIC-II used in the C64, that's 8 sprites.  The sprite registers can be reprogrammed each scanline (and this is commonly done in the demoscene), so there can be many sprites on screen in total, but only 8 on any given scanline.  In effect, this concept serves as a restriction on sprite placement, just as you describe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many SVGA cards for the PC can handle a &lt;em&gt;single&lt;/em&gt; sprite, which is used for the mouse pointer; most of the early Macintosh display hardware (up to the PCI PowerMac era) didn't even have that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern hardware, such as Broadcom's VideoCore series, can be capable of handling a much larger number of sprites.  This is achieved through the use of buffering and read-ahead, so that the worst case can occasionally be accommodated even if it exceeds the throughput of the memory and processing hardware.  But most games now implement sprites using the painter's algorithm, redrawing frames from scratch, rather than relying on the scanout hardware's capabilities; this is equivalent to providing enough read-ahead buffer for the whole frame.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-01-17T16:47:21.437" LastActivityDate="2020-01-17T16:47:21.437" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13380" PostTypeId="2" ParentId="13378" CreationDate="2020-01-17T16:50:21.867" Score="4" Body="&lt;p&gt;Supposing you have a fixed pixel output clock then the bottlenecks are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;shifters, since you need to be sure you may need to sample any sprite at the current location; and either:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;bandwidth to fill those shifters, if you're a TMS descendant (which includes all 2d Sega consoles) and are fetching sprite contents from regular video RAM; or&lt;/li&gt;&#xA;&lt;li&gt;storage for what will go into those shifters, if you're more like an Atari or a C64 and are expecting the programmer to push into dedicated registers.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Guaranteeing no overlap would be a benefit only if you can resolve the reloading the shift register problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to run with the Atari/Commodore approach of requiring the programmer to push contents then you're going to put a huge burden on the CPU (and, actually, on at least some of those systems you've already got that options, as some will allow sprites to be triggered arbitrarily many times per line as long as the ephemeral coordinates match up).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're going with a TMS-esque fetch-sprites-from-memory then either you need time to search the whole list again, which is unreasonable bandwidth, or you're going to require programmers to have the sprite list fully sorted. That's sorted per scan line. So you're actually doing very little to save time over the developer just drawing the sprites for themselves — indeed possibly you're doing worse because if you draw the sprites yourself then you're effectively doing a bucket sort, which is why almost nobody thinks of painting sprites as a pixel sorting problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most interesting data point is probably the Gameboy. It has an advantage that almost no other sprite system has: there's no deadline. It is in full control of its display clock, and it uses that fact. The amount of time spent outputting pixels per line is variable. It uses an algorithm close enough to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;seed a 16-bit shifter with the first two columns of background;&lt;/li&gt;&#xA;&lt;li&gt;if the current scroll position isn't exactly column-aligned, spend some cycles shifting prior to outputting any pixels;&lt;/li&gt;&#xA;&lt;li&gt;when shifting the output:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if there are now fewer than 8 pixels in the shifter, fetch some more background;&lt;/li&gt;&#xA;&lt;li&gt;if no sprite is positioned at the x position now reached, output whatever is at the head of the shifter and continue;&lt;/li&gt;&#xA;&lt;li&gt;otherwise, spend some cycles fetching the graphic that goes with the sprite at the current x, composite those onto the shifter, then continue.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Therefore the output is irregularly clocked, with pauses accruing whenever the output position hits the start of a sprite.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet Nintendo capped themselves at 10 sprites per line, for two reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;to put an upper limit on line generation time, making them able to enforce 60Hz output (otherwise whatever is left over after shifting is available to the programmer to access VRAM; line cadence is fixed despite lines being variable length); and&lt;/li&gt;&#xA;&lt;li&gt;to ensure that the number of comparisons per shift position has a fixed cost.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Point (2) there being specifically to avoid the programmer having to sort anything. In fact, they ended up at the opposite extreme: on most other systems you can affect sprite priority through sprite ordering. On the Gameboy you can't, priority is a direct function of position. So Nintendo started from relaxed time constraints and ended up doing the opposite of leaning into offering benefits for sorted sprite data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Possibly the Nintendo example is informative in another sense: sprite quantity just isn't what they were optimising for. Programmer ease seems to have been the preference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: for more specifics on the Gameboy, I'm really sorry, but all I can find is &lt;a href=&quot;https://www.youtube.com/watch?v=HyzD8pNlpwI&quot; rel=&quot;nofollow noreferrer&quot;&gt;a video&lt;/a&gt;. It's a good video but still just a video.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-01-17T16:58:35.127" LastActivityDate="2020-01-17T16:58:35.127" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="13381" PostTypeId="2" ParentId="13378" CreationDate="2020-01-17T18:31:14.727" Score="9" Body="&lt;h2&gt;TL;DR&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did historical sprite systems provide unrestricted positioning and overlap&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It wasn't unlimited and unrestricted, but limited by chip resources or memory bandwidth - or in case of inbetween systems by both.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;because the designers believed this was very valuable in reducing game development cost?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. Keep in mind, they often crippled machines quite hard to save a few gates.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[...] and once you are implementing sprites at all, the cheapest implementation provides unrestricted positioning and overlap more or less automatically?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, but:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;With off-chip sprite data the number of sprites is only limited by the RAM addressable (the way chosen to do so), but the number of sprites in a given time frame (like a line) heavily depends on the memory bandwidth available. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TMS9918&quot; rel=&quot;nofollow noreferrer&quot;&gt;9918&lt;/a&gt; for example allows 32 sprites, but only 4 of them may share any given line.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With on-chip memory the main limitation is the amount of chip space than can be afforded for storage - not much back then. Prioritization and access effort grows linear with the number of sprites available, but delivers free overlapping of any number of sprites&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Well, and then there is the &amp;quot;inbetween&amp;quot; selected by some manufacturers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;On-chip memory holds only management information (state, coordinates, etc.) but display data is held in off-chip RAM. The examples were Commodore's VIC systems. This combines the disadvantages of both. While it does allow full range checking, the number of sprites displayable within a line is limited by RAM access available.&lt;/p&gt;&#xA;&lt;p&gt;The number of sprites only scales up to how much data can be read within a line. After that, additional measures for priority management would be needed, increasing cost while delivering a diminishing benefit.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;[Prefix: No need to be a hardware buff - the whole issue in hardware is much the same as in software. It's about optimized data structures and the time needed to process the data, and the more straight forward processing is, the more can be done in a given time. In contrast, hardware can parallelize certain tasks already at low/simple level, gaining performance in areas software can't follow]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;To start with, it's important to keep in mind that sprites are not something great to have, but rather a way to position objects on a pixel base on systems that lack a memory (and processing) bandwidth to do so in plain bitmap. Still, why being a crouch to help around this, the are as well limited by the same mechanics - just, due different access patterns, in a different ways than the main CPU.&lt;/p&gt;&#xA;&lt;p&gt;The basic process for a controller with multiple sprites is to decide which sprites to display on a line and in which order. This means going thru coordinate storage and comparing to find overlap and sequence within a line, then moving relevant data on bit level into an output register, mixing them, only keeping the highest priority one in case of collision and outputting it.&lt;/p&gt;&#xA;&lt;p&gt;In general there are two major hurdles:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Memory access within a certain amount of time and&lt;/li&gt;&#xA;&lt;li&gt;memory addressable when doing so.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Memory to hold sprite data can be used in two ways:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;General purpose screen memory.&lt;/li&gt;&#xA;&lt;li&gt;Specialized on chip memory.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While &lt;strong&gt;sprite controllers using general purpose&lt;/strong&gt; memory do allow a large, almost unlimited number of sprites to be handled, their operation is rather slow because each item has to be fetched over and over again.&lt;/p&gt;&#xA;&lt;p&gt;The very common 9918 family is probably the best example here. Despite being one of the very first designs, it can handle a whopping 32 (monochrome) sprites within a picture (*1). But not more than 4 of them can be (have parts) within the same scan line. This is simply due the fact that there isn't enough time to check all coordinates &lt;em&gt;and&lt;/em&gt; fetch all display data to do so.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The most restricting factor is RAM bandwidth, as it defines how many checks can be made&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[Collision detection, BTW, is just a side effect of drawing them on a line, when data is touched for drawing its coordinates needs to be checked when to insert and in which order. This automaticly implies a check on pixel level, all needed in addition is a comparison on each pixel when drawn if there were two sprites active.]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sprite controllers with dedicated, on-chip memory&lt;/strong&gt; (registers) in contrast can reduce this stress and offer faster access or even parallel processing.&lt;/p&gt;&#xA;&lt;p&gt;This comes at a cost of making (relatively) large on-chip memories. An 8x8 monochrome sprite needs 64 bits of storage. With decoding and buffers its safe to assume 10 transistors per (static) bit. In addition at least another 18-24 bits are needed for coordinates and control storage, resulting in more than 500 transistors (*2, 3). So 8 sprites would already eat up the whole budget of a 6502 type chip. Just for storage, without any display logic at all. Using the 6845 as base, it will be about the same  - and we still haven't the most important part added: selection and priority logic.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;So first the most restricting factor for sprites is RAM size&lt;/strong&gt;, but selection and mixing will add as well.&lt;/p&gt;&#xA;&lt;p&gt;First step to placing a sprite is selecting if one (or more) of them is to be inserted on the actual line. This can be done by:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Cycle thru all coordinate storage, find all the sprites that match the line and merge them. This is essentially the same as with off-chip storage. Except it can of course be done faster and storage can be organized in a way to allow more direct access.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using tagged addressing to for sprite line. This means instead of some comparator looping over all sprite line entries to see if it's the actual line, each sprite gets a separate comparator for each of it's lines, firing if this line is the same as the actual one. This is very fast. Results are gained in parallel and basically instant. It does allow (in theory) an unlimited amount of sprites. Except, it's extremely costly. A comparator needs an effort similar to a storage cell. Adding one to each sprite line effectively doubles the chip size needed.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using a tagged and indexed addressing. Here only the top line coordinate of a sprite is held in tagged memory. When its comparator fires, a counter is started with the sprite height marking it over the following lines as active.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Mixing is again done in a similar way, but now according to horizontal (pixel) position. Again each sprite needs to be checked when to start supplying pixels. Again a tagged construction will give the best results.  But now the addressed pixels need as well to be selected and mixed according to priority.&lt;/p&gt;&#xA;&lt;p&gt;The most versatile solution is to give each sprite a read out register. Whenever the pixel position equals the X coordinate of a sprite its active line is copied and addressed as the pixel stream advances. To address a dedicated pixel counter or a shift register can be used. Either way, this needs as much read out circuitry as there are sprites.&lt;/p&gt;&#xA;&lt;p&gt;Additionally a priority logic is to be applied to see which of the pixel streams (background and all selected sprites) takes precedence. Such a logic is a rather simple network of switches. Simple, but space consuming as all of them have to be connected. Here lies a further way to spend (or save) on chip estate: the network gets way more simple if the assigned priority is fixed with each sprites storage. Variable priorities require a lot more connections.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[Visible or not is BTW a simple addition, as it just means sending 'transparent' thru the network during the whole sprite duration.]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now, at first sight there might be a way so save some readout/shift register, by having them global and only load them with the top priority overlapping sprites. It would save on the registers and even more on the priority logic, as it now only needs considering the smaller number of high priority sprites.&lt;/p&gt;&#xA;&lt;p&gt;Then again, the original priority logic is still needed to find the multiple top priority among all sprites - plus somewhat more complex logic is needed to load, reload, and eventually even rearrange the registers on the fly.&lt;/p&gt;&#xA;&lt;p&gt;As a result, reducing the number of active sprites will not save but increase cost.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;The main cost for on-chip sprites is storage, everything else that follows is linear.&lt;/strong&gt; There is no gain in restricting functionality, making numbers of sprites limited  by RAM available.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Are Sprites a Good Idea at all - or why did they vanish?&lt;/h3&gt;&#xA;&lt;p&gt;The underlying mechanics can easily be seen by how (2D) graphics evolved.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;First there was character based display, when moving only one byte per 64 pixels was already a considerable task.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next the definable characters were added to allow (comperable) high resolution graphics. Kind of a compromise between full scale bitmap and character based (indexed) graphics, keeping memory bandwidth needed for manipulation mostly down.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;About the same time sprites were added to allow fast manipulation of a few pixel wise moveable objects.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When memory not only became large enough to house full size bitmap, but as well fast enough to allow in time bitmap manipulations, sprite based controllers got replaced by specialized DMA engines called blitters. These could perform full bitmap manipulation faster than the still rather slow main CPU, while getting rid of all sprite based limitations.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Finally, when main CPUs got fast enough to not only handle its program, but as well sufficient data in time, all of this got abandoned in favour of plain bitmap.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;em&gt;Sprites always have been a substitute to circumvent (memory) speed issues.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Of course this number can be even further increased by exchanging them on the fly.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Motorola's 6810 128 Byte RAM had ~7000 transistors, or ~7 per bit.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Yes, this can be reduced by using dynamic storage, which would save a lot on the storage side, but at the same time needs refresh logic. Refresh logic doesn't scale with size. So while it is almost insignificant with large memories, it doesn't do well for small amounts.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-20T19:51:45.620" LastActivityDate="2020-10-20T19:51:45.620" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13382" PostTypeId="2" ParentId="13378" CreationDate="2020-01-17T19:37:30.647" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;One thing that strikes me about all these sprite systems is that they are unrestricted in what can overlap what; you can have all eight sprites overlapping each other, with parts of background showing through, so that each pixel can come from one of nine different sources, and the hardware guarantees to handle this perfectly.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The majority of earlier games can have more than 5 or 6 moving objects on the screen. And you cannot predict where they can be. Take Pacman for instance: 4 sprites for the ghosts, that can overlap, and 1 sprite for the main character, that can be very close to the ghosts too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And arcade machines are a different case: they know what game they'll have to run, so the hardware is designed with the game in mind. Not the case with generic consoles/computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So 8 unrestricted sprites isn't a luxury. If there were less, it would be even more difficult to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, the Amiga (OCS) has 8 sprites, but they can have 3 colors max (+ transparent) and each group of 2 sprites share the same 4 color palette.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sprites can also be combined into bigger/more colorful ones, that makes 4 of them now...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a lot of games, the sprites are &lt;em&gt;multiplexed&lt;/em&gt; by optimizing their vertical display using dynamic reuse of the registers according to scanlines. When a worst case happens (ex: all bullets are roughly on the same rasterline) you get flashes. See? there &lt;em&gt;are&lt;/em&gt; restrictions even with 8 sprites, because 16-bit games have a &lt;em&gt;lot&lt;/em&gt; of simultaneous objects on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also (still on the amiga) when you cannot use sprites because you don't have enough of them, or they're too small, or not enough colors, you have to use classic graphics. Even with a shifting/blitting chip, you have to perform some masking &amp;amp; some restoring of the background. And it costs CPU/blitter time. In amiga games, sprites are used in combination of other classic non-sprite techniques mostly to gain cycles.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-01-17T19:37:30.647" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13383" PostTypeId="2" ParentId="13376" CreationDate="2020-01-17T20:30:33.987" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why was Apple unable to comply with the limits when e.g. Atari managed&#xA;  it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Purely through engineering that Apple was unwilling to carry out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have added a relatively detailed explanation of this to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_8-bit_family&quot; rel=&quot;noreferrer&quot;&gt;Atari 8-bit article&lt;/a&gt; on the wikipedia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The long-and-short is that it wasn't the slots themselves that were the problem, but providing some sort of external connections for those slots. Any openings in the case would be an immediate RF leak point. I am aware of only two cards that ultimately did have an external connection, an 80-column card and a Centronics printer card, which required routing through the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other issue was that the shielding made airflow difficult, so the cards were limited in what they could do. I doubt that would have been difficult to fix had they desired it.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-01-17T20:30:33.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13384" PostTypeId="2" ParentId="13378" CreationDate="2020-01-17T20:45:46.793" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;if the programmer can guarantee that sprites will never overlap each other, and that they will be presented in numerically increasing order on each scan line. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A hardware designer's response would be &quot;programmers can't actually guarantee that.&quot; And they'd be right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware would have to be designed to do something sensible if those rules were broken. They often would be during development of games, owing to annoying things called &quot;bugs&quot;, but if the hardware were to drop a frame, or otherwise misbehave, there would be endless complaints and the hardware would acquire a reputation for unreliability. That's deadly for a manufacturer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best way to design hardware if you want it to become popular is to give it simple and reliable behaviour, and restrict its capabilities to what you can implement with that restriction. The market successes of fairly simple 8-bit machines like the Commodore 64 illustrate the point. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2020-01-17T22:29:06.807" LastActivityDate="2020-01-17T22:29:06.807" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13385" PostTypeId="1" CreationDate="2020-01-17T21:03:08.787" Score="3" ViewCount="383" Body="&lt;h1&gt;Modern Computer communicates with a 34-year-old Panasonic KX-W50TH&lt;/h1&gt;&#xA;&#xA;&lt;h2&gt;The Challenge&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I have a Panasonic KX-W50TH thermal typewriter with a nine pin serial interface port on the side. I have a RP-K105 interface connected to my Windows 10 computer using a Sabrent USB to Parallel cable. I set up a generic text printer and set the print processor up to auto form feed. My first transfer from the computer to the typewriter was &lt;em&gt;Hello world!&lt;/em&gt;. On the typewriter I got &lt;em&gt;Hlowd&lt;/em&gt;. Using a Linux computer I get the same result with is copy a file to /dev/usb/lp0. The text sent is missing characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;To be clear, the link between a modern computer (Windows 10 or Linux) and the typewriter is being made. The issue is that every other character is missing when sending output to the typewriter.&lt;/strong&gt; I think a configuration setting on the modern computer is the issue. At the typewriter, I cannot make any configuration edits other than CODE+T (turns on or off the terminal mode). The only changes that I can make with the interface are to switch it on or off and to bring it online or offline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have successfully sent data to an Olivetti 900x with the USB to parallel cable using Windows 10 and Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any thoughts? Has anyone else tried this? The Panasonic typewriter is an amazing device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2020-01-22 Edit:&lt;/strong&gt; Type Specimen added. I do not think that the typewriter is using the original ASCII set. The additional characters in KBII and KBIII are part of the Extended ASCII set.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Photos&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://007qbranch.files.wordpress.com/2020/01/img_20200122_0001.png&quot; alt=&quot;Type Specimen&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://007qbranch.files.wordpress.com/2020/01/wp-1579670653749.jpg&quot; alt=&quot;Parallel Port&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://007qbranch.files.wordpress.com/2020/01/wp-1579670653775.jpg&quot; alt=&quot;Typewriter data port and the interface plug&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://007qbranch.files.wordpress.com/2020/01/wp-1579670653789.jpg&quot; alt=&quot;kx-w50th&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://007qbranch.files.wordpress.com/2020/01/wp-1579670653756.jpg&quot; alt=&quot;RP-K105&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://007qbranch.files.wordpress.com/2020/01/wp-1579670653709.jpg&quot; alt=&quot;Helpful hints&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="16025" LastEditorUserId="16025" LastEditDate="2020-01-28T01:56:17.743" LastActivityDate="2020-06-22T22:23:28.663" Title="Panasonic KX-W50TH Data Transfer" Tags="&lt;old-hardware-adaptation&gt;" AnswerCount="2" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13386" PostTypeId="2" ParentId="13378" CreationDate="2020-01-18T00:36:50.617" Score="3" Body="&lt;p&gt;The other posts about hardware and gate costs better answer your question, but I'll add this as a counterpoint: A situation where &lt;a href=&quot;http://www.dadhacker.com/blog/?p=695&quot; rel=&quot;nofollow noreferrer&quot;&gt;a game programmer decided not to take advantage of hardware collision detection&lt;/a&gt; (in this case, for the Atari 8-bit port of &lt;a href=&quot;https://archive.org/details/atr_Super_Pacman_v2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Super Pac-Man&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;On the 400/800 I noticed that people knee-jerked toward using the player-missile hardware way too early in the design process, and that these special resources tended to blind people to the box’s real power…&lt;/p&gt;&#xA;&lt;p&gt;Hardware collision detection sucks in a lot of instances, but people used it because it was there to be used. The player loses a life because one of his outlying pixels happened to hit a single enemy pixel — that’s really unforgiving, and games that used it irritated the heck out of me. You know the tension when a Pac-ghost is right on your tail and you whip around a corner and get that last dot just as the ghost is about to eat you? You can’t get that feeling with pixel-perfect collision detection, the game just bloody clobbers you, and it feels mechanical and unfair…&lt;/p&gt;&#xA;&lt;p&gt;So collisions in Super Pac-Man were done with cross-shaped bounding boxes on the player and the ghosts. You could overlap the ghosts slightly, get away with it and feel like you cheated the game a little.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.dadhacker.com/blog/?p=695&quot; rel=&quot;nofollow noreferrer&quot;&gt;entire post&lt;/a&gt;—indeed, the &lt;a href=&quot;http://www.dadhacker.com/blog/&quot; rel=&quot;nofollow noreferrer&quot;&gt;entire blog&lt;/a&gt;—is well worth diving into for first-hand accounts of developing for the Atari 8-bit &amp;amp; 16-bit lines, Atari's corporate culture/history, technical insights, and working for the Tramiel family.&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-18T00:36:50.617" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13387" PostTypeId="1" AcceptedAnswerId="13396" CreationDate="2020-01-18T02:37:23.993" Score="23" ViewCount="2753" Body="&lt;p&gt;According to 'Commodore: The Final Years' (whole trilogy highly recommended, BTW), page 129, 'Jeff Porter realized it would not be possible to significantly cost reduce the Amiga 500 to get it into the $250 retail price range'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is really important. All the flailing around Commodore did in their final years, designing a bunch of different machines that missed the point. I used to wonder why it didn't occur to them that they needed to focus on cost-reducing the A500, get back to selling a good computer at a surprisingly low price, that was always their core strength. Well according to the above, it did occur to them, but they decided they would not be able to do it. And everything else the company did in the last few years of its life, was the rebound from that. (Okay, I exaggerate slightly. Some of their higher-end products would have been important anyway. But nothing else had the potential to sell millions of computers.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was such cost-reduction not possible? Two possibilities come to mind:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The late eighties was the time of the RAM famine; half a megabyte was significantly costly all by itself. (But then why did the verdict not change when the famine ended?)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There were a lot of chips on the board. They needed to be fused into fewer chips. But Commodore Semiconductor Group (nee MOS Technology) had been starved of capital to keep up in process technology, and could not make the larger chips that would be needed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is there something else I am missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-19T01:08:21.660" Title="Why was it not possible to cost-reduce the Amiga 500?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;amiga&gt;&lt;commodore&gt;&lt;amiga-500&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13388" PostTypeId="2" ParentId="13387" CreationDate="2020-01-18T02:55:57.247" Score="15" Body="&lt;p&gt;They did, with the A600. But in true late-stage Commodore fashion, they screwed it up and made it more expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To cost-reduce an A500, you'd have to reproduce its spec on simpler silicon. The market wasn't interested in an 8 MHz 68000 in 1991/92: the PC had stolen all of the Amiga's thunder at commodity prices. The Amiga's niche silicon was just too expensive to produce and couldn't benefit from commodity use from multiple vendors.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-01-18T02:55:57.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13389" PostTypeId="2" ParentId="6359" CreationDate="2020-01-18T03:33:56.467" Score="2" Body="&lt;p&gt;Going thru my junk box, I found the remains of a computer trainer that I think I got at Radio Shack. I attempted to hack it, but soon lost interest. 30+ years later I am ready to play around with it again. It used a TI MP1312 CPU. I think this may be the trainer in question. I cannot find any info on CPU.&lt;/p&gt;&#xA;" OwnerUserId="16028" LastActivityDate="2020-01-18T03:33:56.467" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13390" PostTypeId="2" ParentId="13376" CreationDate="2020-01-18T10:03:48.777" Score="2" Body="&lt;p&gt;The Apple Super Serial card did come with a metal back plate for the DB25 connector, which was clamped to the interior conductive coating on the plastic cases of later revisions of the Apple II+ and the Apple IIe.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;IIRC, circa 1981, the Apple II+ with Disk drives and a Super Serial Card plugged in was tested for compliance with FCC Part 15 RFI/EMI regulations, when used with a shielded serial cable (which many hobbyists likely didn’t use).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So expansion slots were not fundamentally incompatible.  But it did take a few years before Apple made that available in revisions of the Apple II that included coated plastic, conductive seals, and back plates for the expansion board connectors.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2020-02-15T22:44:32.773" LastActivityDate="2020-02-15T22:44:32.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13391" PostTypeId="1" CreationDate="2020-01-18T11:01:07.273" Score="3" ViewCount="157" Body="&lt;p&gt;Some context first: &lt;a href=&quot;https://de.wikipedia.org/wiki/Advanced_Boolean_Equation_Language&quot; rel=&quot;nofollow noreferrer&quot;&gt;ABEL&lt;/a&gt; (Advanced Boolean Equation Language) is an old hardware description language which has been mainly used in the 80/90s to program &lt;a href=&quot;https://de.wikipedia.org/wiki/Complex_Programmable_Logic_Device&quot; rel=&quot;nofollow noreferrer&quot;&gt;CPLDs&lt;/a&gt;. Unfortunately I have not found any meaningful information about the history of the language and why the 'flag' keyword has been deprecated (see below).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to (modern) language reference the 'flag' keyword is obsolete in ABEL HDL.&#xA;Nonetheless it is used in &lt;a href=&quot;https://commons.m.wikimedia.org/wiki/File:ABEL_HDL_example_SN74162.png#&quot; rel=&quot;nofollow noreferrer&quot;&gt;this listing on wikipedia&lt;/a&gt; in the module section with the argument '-r3'?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the initial purpose of this keyword and what is the meaning of the string following it?&lt;/p&gt;&#xA;" OwnerDisplayName="user6734" LastEditorDisplayName="user6734" LastEditDate="2020-01-18T15:29:34.580" LastActivityDate="2020-01-18T18:03:18.883" Title="ABEL HDL: What was the purpose of the 'flag' keyword?" Tags="&lt;hardware&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13392" PostTypeId="2" ParentId="13391" CreationDate="2020-01-18T16:25:29.793" Score="3" Body="&lt;p&gt;&lt;code&gt;FLAG&lt;/code&gt; is/was used to control behaviour of the language processor (compiler). It is to be placed between &lt;code&gt;MODULE&lt;/code&gt; and &lt;code&gt;TITLE&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its argument would be processed as if it was part of the command line. Command line settings would (usually) overwrite the same settings in &lt;code&gt;FLAG&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was deprecated due its usage being implementation dependant. It is still processed by most tools.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorDisplayName="user6734" LastEditDate="2020-01-18T18:03:18.883" LastActivityDate="2020-01-18T18:03:18.883" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13393" PostTypeId="2" ParentId="7395" CreationDate="2020-01-18T16:27:07.060" Score="3" Body="&lt;p&gt;Intel very likely did this with surplus batches of ROM-equipped microcontrollers - eg if you look closely at the pinout of the 8031 vs 8051/8751, an 8051 wired up like an 8031 WILL behave as an 8031 no matter what is in the ROM/EPROM.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2020-01-18T16:27:07.060" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13394" PostTypeId="2" ParentId="13387" CreationDate="2020-01-18T21:21:44.037" Score="-3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_International&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore&lt;/a&gt; obtained an infusion of cash from Gould, which Tramiel used beginning in 1976 to purchase several second-source chip suppliers, including MOS Technology, Inc., in order to assure his supply.[6] He agreed to buy MOS, which was having troubles of its own, only on the condition that its chip designer Chuck Peddle join Commodore directly as head of engineering. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They bought a company &lt;em&gt;to make their own chips&lt;/em&gt;, &quot;which was having troubles of its own&quot;, and on top of that they stole the guy in charge. Strikes, one and two.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In 1983, Tramiel decided to focus on market share and cut the price of the VIC-20 and C64 dramatically, starting what would be called the &quot;home computer war&quot;. TI responded by cutting prices on its TI-99/4A, which had been introduced in 1981. Soon there was an all-out price war involving Commodore, TI, Atari, and &lt;strong&gt;practically every vendor other than Apple Computer&lt;/strong&gt;. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why was that? Because Apple doesn't &lt;em&gt;make&lt;/em&gt; anything. They take off-the-shelf parts, purchased from the lowest bidder using buying power alone, and have things built for them in countries with lax labor laws. Strike three, you're out.&lt;/p&gt;&#xA;" OwnerUserId="4220" LastActivityDate="2020-01-18T21:21:44.037" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13395" PostTypeId="2" ParentId="13378" CreationDate="2020-01-18T23:01:55.280" Score="2" Body="&lt;p&gt;The Atari 7800 kept almost all information about sprites, including positions, in general-purpose RAM, re-fetching it every scan line.  Any time the RAM spent serving up sprite data was time stolen from the CPU, so the amount of data one could display was very dependent upon how much CPU time one wanted to have left.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware didn't make decisions about whether or not to fetch sprites based upon their positions.  Instead, the programmer would divide the screen into zones of 8 or 16 pixels, and for each zone provide a list of sprites in that zone.  For each sprite in the list, the data in RAM would specify the X position, mode, and either a data address for the bitmap, or the address of data that would specify the least-significant-byte of the bitmap address (useful for blocks of text).  I don't remember exactly how much data could be accommodated, but I think it could accommodate about six sprites that were about a third the width of the screen, or a couple of dozen really small sprites, or various quantities in between.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-01-18T23:01:55.280" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13396" PostTypeId="2" ParentId="13387" CreationDate="2020-01-19T01:00:38.687" Score="18" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;'Jeff Porter realized it would not be possible to significantly cost&#xA;  reduce the Amiga 500 to get it into the $250 retail price range'.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They &lt;em&gt;could&lt;/em&gt; have cost-reduced the A500 - perhaps even to $250 retail - but they would have had to make some compromises that (thankfully) they weren't willing to do. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There were a lot of chips on the board. They needed to be fused into&#xA;  fewer chips.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The custom chipset was only 4 chips (Agnus/Denise/Paula/Gary). You could keep those chips and still make significant cost savings in other areas. First step would be to remove little used features such as the serial and parallel ports, CPU expansion bus, and internal RAM expansion board / realtime clock connector. This also eliminates a lot of passive components that were required to meet EMI specs etc., and significantly reduces the board size and cost. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without serial and parallel ports the &lt;em&gt;essential&lt;/em&gt; I/O functions can be combined into a single CIA chip. Then all the custom chips can be made surface mount and soldered onto the motherboard to get rid of troublesome IC sockets. Finally the modulator can be integrated onto the motherboard, &lt;em&gt;or&lt;/em&gt; you could simply provide a basic RGB port and make users buy a separate monitor (not included in the base price!) or use a SCART TV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But for really big savings the answer would be to leverage the PC clone market. With small tweaks your cost-reduced A500 could use a standard AT keyboard, floppy drive, case and power supply - supplied by whichever Taiwanese manufacturer was cheapest - or you could just sell bare motherboards and let the purchaser choose what they require to complete it! (perhaps nothing if they can use bits from an existing PC).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Well according to the above, it did occur to them, but they decided&#xA;  they would not be able to do it. And everything else the company did&#xA;  in the last few years of its life, was the rebound from that.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, it seems that they considered, but rejected, going down that path. The A600 is commonly accused of being a failed attempt at producing a cost-reduced A500, but this may have had more to do with manufacturing costs in general rather than the design itself. The inclusion of IDE and PCMCIA ports shows that they wanted to do more - and those extra features justified a slightly higher price. If the A600 had been truly cut down to the bone it might have been cheaper, but much less desirable.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closest Commodore got to a true cut-down Amiga was the CD32. No keyboard, serial, parallel, RGB ports etc., essential I/O functions integrated into a single custom chip - yet they still (thankfully) provided a keyboard port and expansion bus. So even the CD32 wasn't as cut down as it could have been. Clearly even at this late stage Commodore held out hopes of the Amiga being more than just a games machine shoved out at the lowest possible price.  &lt;/p&gt;&#xA;" OwnerUserId="4663" LastEditorUserId="4663" LastEditDate="2020-01-19T01:08:21.660" LastActivityDate="2020-01-19T01:08:21.660" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13398" PostTypeId="2" ParentId="79" CreationDate="2020-01-19T05:05:12.960" Score="1" Body="&lt;p&gt;Yes, I pulled both dead pram batteries our of my emacs, they boot fine, just don’t keep settings when unplugged. &lt;/p&gt;&#xA;" OwnerUserId="16034" LastActivityDate="2020-01-19T05:05:12.960" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13399" PostTypeId="2" ParentId="9257" CreationDate="2020-01-19T07:22:37.527" Score="5" Body="&lt;p&gt;I'm about 11 months too late, but thought I'd add for anyone else looking for help with the same issue.  There are a couple utilities I wrote a long time ago which might be useful to someone attemping to access a raw drive.  They are part of the bffs package on Aminet:  &lt;a href=&quot;http://aminet.net/disk/misc/bffs16_src.lha&quot; rel=&quot;noreferrer&quot;&gt;http://aminet.net/disk/misc/bffs16_src.lha&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One is dcp.  With it, you can copy from/to a device (whether it's mounted or not), and a file.  The utility will copy in either direction.  A couple examples:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Copy 64kB (128 sectors) from an unmounted scsi device, unit 0, to a file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dcp -m 128 scsi.device,0 outfile&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;2) Copy from a mounted device (DH0), starting at sector 200, to a file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dcp -ss 200 dh0: outfile&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;dcp also lets you copy in the other direction (from a file to a device, or even from a device to a device).  I won't provide an example for fear of cut &amp;amp; paste.  :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another utility in the bffs package is rdb.  It's a CLI utility which lets you display and modify a RDB, an even repair some types of corruption.  Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rdb scsi.device 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16035" LastActivityDate="2020-01-19T07:22:37.527" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13400" PostTypeId="1" AcceptedAnswerId="13415" CreationDate="2020-01-19T15:38:55.507" Score="15" ViewCount="611" Body="&lt;p&gt;ARM Linux, at least Debian was traditionally (pre eabi) built for the FPA floating point unit*. Unfortunately under old ABI it was not easily possible to mix soft-float code with FPA code. The result of this is that many arm Linux systems ended up relying on kernel emulation of floating point, and this was a large part of the impetus for the eabi port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is puzzling me is how we got to this situation in the first place. It seems that few arm systems had it. It seems it was an optional extra for the Acorn A540 and Acorn A5000 and it was promised for the Acorn Risc PC, but I can't find any evidence it made it past the prototype stage, and the Risc PC was already about 5 years old by the time Debian was released for ARM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any history available on why this decision was made? Is there any other significant arm hardware with FPA that I have missed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;* Not to be confused with the VFP floating point units arm use today.&lt;/p&gt;&#xA;" OwnerUserId="499" LastEditorUserId="499" LastEditDate="2020-01-19T15:55:57.707" LastActivityDate="2020-01-21T22:49:34.690" Title="History of ARM Linux and FPA" Tags="&lt;linux&gt;&lt;arm&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13401" PostTypeId="2" ParentId="13361" CreationDate="2020-01-19T16:31:40.513" Score="1" Body="&lt;p&gt;In overall feel, the MC6800 is clearly more like a PDP-11 than a&#xA;PDP-8.&lt;/p&gt;&#xA;&lt;h3&gt;Word vs. Byte Architecture&lt;/h3&gt;&#xA;&lt;p&gt;Like many machines of the 1950s and '60s, from the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_701&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 701&lt;/a&gt; to DEC's&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-10&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-10&lt;/a&gt;, the PDP-8 was a &lt;em&gt;word-oriented&lt;/em&gt; machine. Addresses pointed&#xA;only to full words, loads and stores were always of a full word¹, and&#xA;every instruction was exactly one word in size, with any operands&#xA;(such as an address) also contained in that same word. A major&#xA;consequence of this design is that the PDP-8  cannot directly address&#xA;its entire address space: the address field in an instruction word is&#xA;only 7 bits long, so address operands point either to an address in&#xA;the lowest 128 bytes of memory (if the addtional &lt;code&gt;Z&lt;/code&gt; bit in the word&#xA;is clear) or to an address the current page determined by the top 5&#xA;bits of the program counter.²&lt;/p&gt;&#xA;&lt;p&gt;By contrast, the PDP-11 and MC6800 were &lt;a href=&quot;https://en.wikipedia.org/wiki/Word_(computer_architecture)#Word_and_byte_addressing&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;byte-oriented&lt;/em&gt;&lt;/a&gt; machines, with&#xA;16-bit words being subdivided into two individually addressed&#xA;eight-bit bytes which are often accessed as separate units of data,&#xA;rather than as a whole word. Though the PDP-11 used word-length&#xA;instructions and the MC6800 used byte-length instructions, in both&#xA;cases at least some operands were separate words/bytes after the&#xA;instruction word/byte, rather than always in the instruction word.&#xA;Being able to use two-byte address operands after the instruction&#xA;word/byte allowed both the -11 and the 6800 to access any byte in the&#xA;address space from any instruction.&lt;/p&gt;&#xA;&lt;p&gt;This division into bytes introduced two concepts that don't exist on&#xA;word-oriented machines. &lt;em&gt;Endianness&lt;/em&gt; refered to whether the lower byte&#xA;of a word in memory was the most-significant (big-endian) or&#xA;least-significant (little-endian) byte of an address. &lt;em&gt;Alignment&lt;/em&gt;&#xA;referred to whether or not a word was allowed to start on an odd&#xA;address in certain cases. Word-oriented machines had no need for&#xA;either of these concepts since a word was not divisible into smaller&#xA;units.&lt;/p&gt;&#xA;&lt;h3&gt;Other Similarities and Differences&lt;/h3&gt;&#xA;&lt;p&gt;Other similararities between the MC6800 and the PDP-11, and&#xA;differences from the PDP-8, included the following:&lt;/p&gt;&#xA;&lt;p&gt;The 6800 and -11 both used a &lt;em&gt;stack&lt;/em&gt;, the head of which was&#xA;pointed to by a register, for storing data and the return address of a&#xA;subroutine. This made subroutines automatically reentrant (so long as&#xA;the programmer stored all local data on the stack). The PDP-8&#xA;jump-to-subroutine instruction stored the return address in the first&#xA;word of the subroutine itself, which necessitated special handling if&#xA;the subroutine might be called again before it returned.&lt;/p&gt;&#xA;&lt;p&gt;The 6800 and the -11 had no dedicated I/O instructions, instead&#xA;having peripherals that monitored the memory addresses being accessed&#xA;and responded appropriately when an address assigned to them was&#xA;accessed. PDP-8 peripherals added new instructions to the instruction&#xA;set.&lt;/p&gt;&#xA;&lt;p&gt;The 6800 and the -11 had multiple registers available and operations&#xA;could be performed with only registers as operands. (For example the&#xA;6800's &lt;code&gt;ABA&lt;/code&gt; instruction would add the contents of the &lt;code&gt;B&lt;/code&gt; register to&#xA;the &lt;code&gt;A&lt;/code&gt; register, leaving the result in &lt;code&gt;A&lt;/code&gt;.) The PDP-8 had only a&#xA;single user-accessible register, &lt;code&gt;AC&lt;/code&gt;, besides the program counter,&#xA;and so all operations using more than one data value had to take the&#xA;second value from memory.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;¹&lt;sub&gt;Some word-oriented machines did have facilities for sub-word access,&#xA;such as the &amp;quot;byte&amp;quot; instructions of the PDP-10, but the PDP-8 did not,&#xA;with arguably the exception of the &lt;code&gt;BSW&lt;/code&gt; instruction, present only in&#xA;the 8/e and later models, that swapped the two 6-bit &amp;quot;bytes&amp;quot; in a&#xA;word.&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;²&lt;sub&gt;This was not the case, however, with many other word-oriented&#xA;machines, which had longer words capable of holding a full&#xA;address.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-20T01:29:26.117" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13402" PostTypeId="2" ParentId="13400" CreationDate="2020-01-19T19:20:37.897" Score="7" Body="&lt;p&gt;My experience with ARM Linux was that it was typically used for embedded systems which were not expected to routinely carry an FPU of any kind, with the notable exceptions of Android phones and the Raspberry Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even the initial builds of Raspbian used a softfloat build, which made no attempt to use the VFP.  I was actually involved in building a hardfloat image of Gentoo for the machine so that comparative benchmarks could be run, which led to the hardfloat build of Raspbian becoming standard.  This was already well into the EABI era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I fear your recollection may actually be backwards.  FPA code could be run via a kernel-supported software emulator known as FPE, and would merely take invalid-instruction traps to do so.  Acorn used this technique for their own BBC BASIC VI, which introduced 64-bit IEEE floating point, in contrast to earlier versions which used a proprietary 40-bit format which could not be hardware accelerated at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was not a very efficient mechanism, but a number of official FPA instructions were executed this way as the FPA hardware didn't directly support them.  FPA code could pass FP values in FPU registers even without FPU hardware physically fitted; they would then be in emulated registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems likely that early ARM Linux ports merely replicated this practice, with the absence of FPA hardware for Linux-compatible CPUs only being noticed later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No such emulator, however, was provided for running VFP code on an FPU-less machine.  Softfloat code did not contain any FPU instructions, and would keep FP values in integer registers for parameter passing.  Hardfloat code passes FP values in FPU registers.  Hence under EABI, softfloat and hardfloat code cannot be mixed (without a shim layer to translate ABIs, which is rarely implemented).&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-01-19T20:20:48.867" LastActivityDate="2020-01-19T20:20:48.867" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13403" PostTypeId="2" ParentId="13361" CreationDate="2020-01-20T02:03:52.730" Score="1" Body="&lt;p&gt;I say the 6800 is &lt;em&gt;not&lt;/em&gt; like a PDP-11 in any useful way. It does not have general registers and it does not have addressing modes as a separate construction from the registers used by the mode.  For example, the PDP-11 'indexed' mode is X(Rn), for n = 0 to 7; the case of n = 7 (the PC) gets you PC-relative addressing. By contrast the 6800 has only 1 register that is used for indexed mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gordon Bell agrees with me (or rather, I with him!) in what makes the PDP-11 special:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The basic design decision which sets the PDP-11 apart was based on the&#xA;  observation that by using truly general registers and by suitable&#xA;  addressing mechanisms it was possible to consider the machine as a&#xA;  zero-address (stack), one-address (general register), or two-address&#xA;  (memory-to-memory) computer. Thus, it is possible to use whichever&#xA;  addressing scheme, or mixture of schemes, is most appropriate.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://gordonbell.azurewebsites.net/tcmwebpage/timeline/chap38-39_pdp11_cs2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A New Architecture for Minicomputers: the DEC PDP-11&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6800 appears to me to be more of a throwback to earlier designs (presumably to fit the silicon processes of the day) -- separate accumulator, index register, stack pointer.  The PC is not an explicit component of operand evaluation; it's only implicitly involved in address modes that need further bytes from the instruction stream.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where I think some of the confusion might have arisen, is that Peddle said:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A small instruction set, great addressing, was the model for the 11&#xA;  that came under the Carnegie Mellon study, and we did the same thing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, he took some ideas from the set of ideas that went into the PDP-11. That does not mean that the 6800 is &lt;em&gt;like&lt;/em&gt; a PDP-11 in any way really expressed in the ISA, just that the PDP-11 provided some inspiration or guidance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My candidates for what ideas were taken:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;the desirability of memory-access instructions being able to address all of memory &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the desirability of indexed mode (constant displacement in instruction stream plus contents of index register)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the desirability of indirect addressing&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These are all under the heading of &quot;great addressing&quot;.  The small instruction set observation is the realization that you don't need a huge instruction set, and allows you to make the tradeoff between using more bits for addressing-related use (e.g., address mode) and using them for more opcode bits.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-01-20T02:20:28.983" LastActivityDate="2020-01-20T02:20:28.983" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13404" PostTypeId="2" ParentId="6009" CreationDate="2020-01-20T04:21:24.977" Score="3" Body="&lt;p&gt;I'm in Australia, and I wasn't too sure how to get a decent Amiga monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Within a short while of thinking about this, I found an old TV on the side of the road which had a UK power plug and SCART input on the back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I grabbed it, and took it home, and using the RGB-&gt;SCART cable that I'd bought in anticipation, I plugged it in and it works great!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That cable was called &quot;Amiga RGB Video / Audio SCART Cable (1 Meter)&quot; which I got from an eBay seller (&lt;a href=&quot;https://www.ebay.com.au/usr/ikonsgr74&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ebay.com.au/usr/ikonsgr74&lt;/a&gt;) from Greece for about US $15 delivered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TV I found was a Sony Bravia KDL-26S3000.&#xA;It's a 26&quot; 1366 x 768 TV.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's the only SCART monitor I've tried and it worked great.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that is just an example of what could work for you.  But bare in mind, I have an Australian Amiga, and it's a UK TV, and both are PAL regions.  So that may not work so well for US / NTSC residents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had also bought an &quot;Amiga RGB to VGA&quot; adapter (&lt;a href=&quot;https://amigakit.amiga.store/product_info.php?products_id=183&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://amigakit.amiga.store/product_info.php?products_id=183&lt;/a&gt;) but none of the monitors I've tried it with support the required 15 kHz input.  I've tried searching on eBay for lots of the monitors on the list of 15 kHz monitors, but they're either really expensive, or none turn up.  (I do still hope to maybe just stumble across one in a thrift store one day, though!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for me, I stumbled onto a SCART TV, and it just worked with the cable I bought.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thought these tales might help someone.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Murray&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16040" LastActivityDate="2020-01-20T04:21:24.977" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13405" PostTypeId="1" AcceptedAnswerId="13406" CreationDate="2020-01-20T04:34:54.840" Score="2" ViewCount="232" Body="&lt;p&gt;The MOS 6581 SID, the original version of the sound chip in the Commodore 64, was according to Wikipedia, 'produced in 7-micrometer technology to gain a high yield; the state of the art at the time was 6-micrometer technologies.'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that process size, area was a limiting factor, though not much of one; the chip didn't end up with every feature Bob Yannes wanted, but a Commodore manager famously pointed out to him, with only a little hyperbole, that the chip was ten times better than anything else out there, and twenty times better than it needed to be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the actual die size?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-20T08:14:53.077" Title="What was the die size of the 6581 SID?" Tags="&lt;commodore-64&gt;&lt;mos-6581&gt;&lt;sid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13406" PostTypeId="2" ParentId="13405" CreationDate="2020-01-20T07:35:48.403" Score="3" Body="&lt;p&gt;Looking at &lt;a href=&quot;ftp://retronn.de/chips/sid_6581r2/original/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a series of stepped die shots&lt;/a&gt;, and knowing that the steps were 0.5mm one way and 0.45mm the other way, we can estimate the die area as about 27.2 mm².&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="79" LastEditDate="2020-01-20T08:14:53.077" LastActivityDate="2020-01-20T08:14:53.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13407" PostTypeId="2" ParentId="11206" CreationDate="2020-01-20T07:47:30.237" Score="2" Body="&lt;p&gt;The waveform generator and DAC of each of the three voices is &lt;strong&gt;12-bit&lt;/strong&gt;, and calculates a new value for the DAC at the system clock speed, approximately &lt;strong&gt;1 MHz&lt;/strong&gt;.  The subsequent envelope generator and filtering is done in the analogue domain, so in general the output is &lt;strong&gt;unquantised&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-01-20T07:47:30.237" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13408" PostTypeId="1" AcceptedAnswerId="13410" CreationDate="2020-01-20T09:23:52.807" Score="5" ViewCount="215" Body="&lt;p&gt;The SID could play sampled sound by poking a click into the chip at an appropriate frequency, and some Commodore 64 games like Ghostbusters and Impossible Mission did this (though only for a few seconds, of course; it wouldn't take much sampled sound to exceed 64K).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would seem to involve a tight loop whose timing would depend on the exact speed of the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when tile-mode graphics are being displayed, as is usual for games, the CPU is locked out for one in eight scan lines ('bad lines'). This would seem to have the potential to alter the timing, thereby messing up the sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did games playing sampled sound, solve this problem?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-20T09:41:24.770" Title="SID, sampled sound and bad lines" Tags="&lt;commodore-64&gt;&lt;sound&gt;&lt;sid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13410" PostTypeId="2" ParentId="13408" CreationDate="2020-01-20T09:41:24.770" Score="3" Body="&lt;p&gt;One might select sampling rate to be half the display lines rate (around 7.8 kHz) and arrange things so, that CPU always gets interrupted to play digital at odd lines, not interfering with bad lines.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-01-20T09:41:24.770" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13411" PostTypeId="1" CreationDate="2020-01-20T16:57:45.557" Score="15" ViewCount="1511" Body="&lt;p&gt;Usually when talking about two-phase clocks in early CPUs, one means &lt;a href=&quot;https://en.wikipedia.org/wiki/Clock_signal#Two-phase_clock&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; type of clock, that consists of two non-overlapped pulses.&#xA;Examples are &lt;a href=&quot;https://console5.com/techwiki/images/f/fc/MC6800.pdf&quot; rel=&quot;noreferrer&quot;&gt;MC6800 clock (page 3)&lt;/a&gt; or &lt;a href=&quot;https://www.fecegypt.com/uploads/dataSheet/1481550148_8080.pdf&quot; rel=&quot;noreferrer&quot;&gt;i8080 clock (page 6)&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many ICs generate such clock phases internally from a single-phase input, for example AY-3-8910: &lt;a href=&quot;https://github.com/lvd2/ay-3-8910_reverse_engineered/blob/master/sch/ay-3-8910.pdf&quot; rel=&quot;noreferrer&quot;&gt;see clock divider in the central top position&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such two-phase clock usually feeds alternating latches as to simulate the flip-flop behaviour, or is used when it is handy to break one-cycle design into two steps, each latched during its clock phase is active.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, 6809 requires rather strange two-phase clock (see &lt;a href=&quot;http://www.gbgmv.se/dl/doc/md09/MC6809_DataSheet.pdf&quot; rel=&quot;noreferrer&quot;&gt;here, page 3&lt;/a&gt;, that consists of two square waves shifted by 90 degree. Actually, MC6809 generates those phases internally from x4 XTAL, but MC6809E, lacking XTAL generator, requires such phases as the input, so it could be thought as the internal requirement.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/A0rpT.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/A0rpT.gif&quot; alt=&quot;example of 6809 and 6809E two-phase clock&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In what ways such shifted two-phase clocks are used inside the 6809? Are there any other designs with similar clock requirements? Are there any papers introducing this type of clocking?&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-01-21T00:19:42.023" Title="Why did MC6809(E) require two-phase clock consisting of two square waves shifted by 90°?" Tags="&lt;6809&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13412" PostTypeId="2" ParentId="13411" CreationDate="2020-01-20T17:39:01.183" Score="13" Body="&lt;p&gt;E is used for memory selection in a similar way as 6502 do (or 6800 phi2). Q should be used as a signal &quot;data stable&quot; (due to &quot;&lt;a href=&quot;http://www.roust-it.dk/coco/The%20MC6809%20CookBook.pdf&quot; rel=&quot;noreferrer&quot;&gt;The MC6809 Cookbook&lt;/a&gt;&quot;). Let me quote: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Addresses from the MPU will be valid with the leading edge of Q. Data&#xA;  is latched on the falling edge of E.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It is called the &quot;quadrature clock&quot; and it is used sometimes in other systems too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below the line: The 8080 CPU uses a two-phase clock too, with more specific needs. The support IC 8224 generates the two-phase clock from a single time signal by division by 9. The first clock pulse has been active for 2/9 of the cycle, the other pulse is active for 5/9 of the cycle. (See &lt;a href=&quot;http://dls.makingartstudios.com/post/two_phase_clock/&quot; rel=&quot;noreferrer&quot;&gt;the description of operation&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-01-20T17:39:01.183" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13413" PostTypeId="2" ParentId="4537" CreationDate="2020-01-20T20:38:52.943" Score="0" Body="&lt;p&gt;If you want to count somewhat more primitive approaches, there was once a product called 'Sidekick'.  This program supported what was known as 'terminate and stay resident' programs; essentially, the code for several programs would be loaded into memory at once, and each was in a partial state of execution, with one 'running' and the others temporarily paused.  There was no automatic process switching as in a proper OS, but the user could switch from one to another via special keystrokes.  I don't remember if this was only for the IBM PC or anything earlier, though.&lt;/p&gt;&#xA;" OwnerUserId="16042" LastActivityDate="2020-01-20T20:38:52.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13414" PostTypeId="2" ParentId="13411" CreationDate="2020-01-21T00:14:31.647" Score="7" Body="&lt;p&gt;The skew between min and max propagation delays was a lot larger in old multi-micron NMOS processes (an understatement).  The digital rise and fall times could be quite asymmetric.  This made transistor sizing to prevent both setup and hold timing violations more difficult.  Arithmetic combinations of a two phase (or more) or quadrature clocks allow creating non-overlapping logic or clocking pulses that are far more immune to these timing skew race conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In NMOS precharge-evaluate logic methodology, one could also use the 1st quadrature quarter phase for precharge and that last half or 3/4 phase for evaluate logic, allowing more time for logic operations after the precharge.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2020-01-21T00:19:42.023" LastActivityDate="2020-01-21T00:19:42.023" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13415" PostTypeId="2" ParentId="13400" CreationDate="2020-01-21T01:10:59.857" Score="5" Body="&lt;p&gt;It seems FPA itself was pretty short lived.&#xA;From the &lt;a href=&quot;https://linux-arm-kernel.infradead.narkive.com/bgDT2nNh/question-about-coprocessor-15-and-exceptions&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARM Linux mailing list &lt;/a&gt; (2004):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There were only few devices&#xA;which contained the FPA (ARM7500FE which is a complete system-on-chip, and&#xA;FPA11 as external coprocessor to ARM3 if I remember correctly). Despite still&#xA;being widely used, this instruction set is not documented in the ARM ARM. The&#xA;only source for documentation about it that I know is the ARM7500FE data&#xA;sheet.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The only other FPA implementation I am aware of was &lt;a href=&quot;https://en.wikipedia.org/wiki/MaverickCrunch&quot; rel=&quot;nofollow noreferrer&quot;&gt;MaverickCrunch&lt;/a&gt; by Cirrus Logic (2000). Although seemingly not too successful by itself, it did introduce the FPA support into GCC and so FPA remained a commonly accepted interface for floating-point code until introduction of VFP by ARM (apparently with VFP9-S in 2002). Switching over to EABI took several years and FPA support was finally &lt;a href=&quot;https://gcc.gnu.org/ml/gcc-patches/2012-06/msg00825.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;removed from GCC in 2012&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;P.S. for compatibility, the ARM register layout used by GDB still reserves space for the FPA registers between PC and CPSR.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;: this  &lt;a href=&quot;http://netwinder.osuosl.org/users/s/scottb/public_html/notes/FP-Notes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;1999 writeup&lt;/a&gt; by Scott Bambrough from NetWinder project has more background on FPA in Acorn, StrongARM, NetBSD and Linux.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The NetWinder Floating Point Hardware&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There is none. The StrongARM unlike the Intel x86 series of CPU's has no integrated floating point&#xA;hardware. ARM manufactures a coprocessor floating point unit; the&#xA;FPA11, however it is only available on the ARM 7500FE and it is not&#xA;compatible with the Intel StrongARM chips. Hence the Netwinder has no&#xA;floating point hardware at all. It depends entirely on software that&#xA;emulates the FPA11 floating point unit.&lt;/p&gt;&#xA;&lt;p&gt;So how do various systems deal with the lack of floating point&#xA;hardware? Acorn developed their own emulator from scratch for their&#xA;RISC operating systems. The ARM port of NetBSD has a unique solution;&#xA;the binary object code for the ARM floating pointing routines was&#xA;converted into a text file of hexidecimal numbers. Some assembler glue&#xA;is added to the file and the assembler is then used to convert the&#xA;file back to binary form. Hence the NetBSD kernel, contains source of&#xA;a sort, although it is unreadable and not maintainable. Russell King&#xA;distributes a port of the Acorn floating point emulator that is&#xA;compatible with ARM Linux kernels.&lt;/p&gt;&#xA;&lt;p&gt;There are actually two floating point emulators available for ARM&#xA;Linux. A version of the Acorn emulator was ported to ARM Linux by&#xA;Russell King. He has a very specific licence which allows him to&#xA;distribute this emulator as a module with most of the symbols stripped&#xA;out from his web site. It is well established, in its third release.&#xA;It is highly optimized, and written in ARM assembly language.&lt;/p&gt;&#xA;&lt;p&gt;The licence restrictions on the Acorn FPE proved problematic for the&#xA;NetWinder. It looked like it would be expensive to licence the&#xA;emulator from Acorn.&lt;/p&gt;&#xA;&lt;p&gt;[...]&lt;/p&gt;&#xA;&lt;p&gt;As luck would have it Phil Blundell had brought to my attention&#xA;a free library of code implementing IEEE floating point algorithms.&#xA;SoftFloat is a complete IEEE 754 floating point library written by&#xA;John Hauser. Neil Carson had ported this software to run on the ARM&#xA;platform, and Phil had modified it to create a library for use with&#xA;the compiler when the -msoft-float compiler flag was used. With&#xA;SoftFloat in hand, it was possible to concentrate on building just the&#xA;emulation code for the floating point hardware. Thus the NWFPE was&#xA;born.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;NWFPE was &lt;a href=&quot;http://lists.infradead.org/pipermail/linux-arm-kernel/2013-April/163904.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;adopted by ARM Linux&lt;/a&gt; and &lt;a href=&quot;https://github.com/torvalds/linux/blob/master/arch/arm/nwfpe/ChangeLog&quot; rel=&quot;nofollow noreferrer&quot;&gt;the code is still there&lt;/a&gt;. I imagine it can still be used if you enable OABI support (e.g. if you need to support ARMv4 without Thumb).&lt;/p&gt;&#xA;&lt;p&gt;Additional reading: ARM &lt;a href=&quot;http://infocenter.arm.com/help/topic/com.arm.doc.dai0098a/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Application Note 98: &lt;em&gt;VFP Support Code&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3783" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-21T22:49:34.690" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13416" PostTypeId="2" ParentId="13400" CreationDate="2020-01-21T01:57:21.977" Score="0" Body="&lt;p&gt;There was indeed a computer I had missed, the Acorn A7000+ had FPA support using the ARM7500FE mentioned in Igors answer. &lt;/p&gt;&#xA;" OwnerUserId="499" LastActivityDate="2020-01-21T01:57:21.977" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13417" PostTypeId="5" CreationDate="2020-01-21T06:52:37.140" Score="0" Body="&lt;p&gt;This is sometimes referred to as the &quot;Apple I,&quot; with a Roman numeral, but in the original documentation it is always &quot;Apple 1,&quot; with an arabic numeral. Apple did not switch to using Roman numerals until the Apple II.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-01-21T06:52:37.140" LastActivityDate="2020-01-21T06:52:37.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13418" PostTypeId="4" CreationDate="2020-01-21T06:52:37.140" Score="0" Body="Topics relating to the Apple 1 computer." OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-01-21T06:52:37.140" LastActivityDate="2020-01-21T06:52:37.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13419" PostTypeId="1" CreationDate="2020-01-21T07:01:49.133" Score="2" ViewCount="296" Body="&lt;p&gt;What is the format of the video character ROM used in the Apple 1?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-01-21T07:01:49.133" Title="What is the format of the Apple 1 character set ROM?" Tags="&lt;video&gt;&lt;apple-1&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13420" PostTypeId="2" ParentId="13419" CreationDate="2020-01-21T07:01:49.133" Score="3" Body="&lt;h3&gt;Original ROM&lt;/h3&gt;&#xA;&lt;p&gt;The character ROM is a &lt;a href=&quot;https://www.applefritter.com/files/signetics2513.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Signetics 2513&lt;/a&gt; &amp;quot;64×8×5 Character&#xA;Generator,&amp;quot; a 2560-bit static ROM. (Data sheet &lt;a href=&quot;https://www.datasheetarchive.com/pdf/download.php?id=5065adad5e4757ac90073038091de3931e7380&amp;amp;type=M&amp;amp;term=2513&quot; rel=&quot;nofollow noreferrer&quot;&gt;alternate&#xA;source&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;Address lines A1-A3 (Signetics started the numbering at 1) select one&#xA;of the eight rows of five pixels for a character (the top row is&#xA;usually all-zero for a 5×7 matrix) and address lines A4-A9 indicate&#xA;the character code.&lt;/p&gt;&#xA;&lt;p&gt;The standard version (2513N/CM2140) had ASCII sticks 4-5 (upper-case&#xA;characters) at codes 0-31 and ASCII sticks 2-3 (punctuation and&#xA;numbers) at codes 32-63. There was also a &lt;a href=&quot;https://en.wikipedia.org/wiki/Katakana&quot; rel=&quot;nofollow noreferrer&quot;&gt;katakana&lt;/a&gt; version&#xA;(2513N/CM4800) available, and custom versions (assigned their own&#xA;CMnnnn code by Signetics) could be made. The glyphs in sequence are&#xA;thus:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ !&amp;quot;#$%&amp;amp;'()*+,-./0123456789:;&amp;lt;=&amp;gt;?&#xA;ﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜﾝﾞﾟ ｡｢｣､･ｦｧｨｩｪｫｬｭｮｯｰｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿ&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3&gt;ROM Dumps&lt;/h3&gt;&#xA;&lt;p&gt;Dumps of this ROM are frequently in a different format where character&#xA;data is stored in an array of 128 8-byte blocks designed for lookup by&#xA;ASCII code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$00-$1F  not data from ROM; all clear except for $01&#xA;$20-$3F  locs $20-$3F from ROM: ASCII punct. and digits&#xA;$40-$5F  locs $00-$1F from ROM: @ABC…&#xA;$60-$7F  duplicate of $40-$5F, or lower-case not from ROM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Each block is a sequence of eight bytes, each representing a row. The&#xA;bottom row, instead of the top, is the empty one and bits 1 through 6&#xA;contain the six bits from the ROM in reverse order, with bits 0 and 7&#xA;always 0.&lt;/p&gt;&#xA;&lt;p&gt;The Call-A.P.P.L.E. dump, &lt;code&gt;apple1.vid&lt;/code&gt;, available in the&#xA;&lt;code&gt;Apple1_bios.zip&lt;/code&gt; file downloadable from &lt;a href=&quot;https://www.callapple.org/soft/ap1/emul.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt;&#xA;duplicates the upper-case sticks ($00-$1F in the original ROM) in the&#xA;$60-$7F locations in the dump file, which will duplicate the Apple I&#xA;behaviour of outputting lower-case ASCII codes as upper-case letters&#xA;(and translating the punctuation in the lower-case sticks, backtick,&#xA;&lt;code&gt;{|}~&lt;/code&gt; and DEL, to the punctuation from the upper-case sticks, &lt;code&gt;@&lt;/code&gt; and&#xA;&lt;code&gt;[\]^_&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://pom1.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pom1 emulator&lt;/a&gt;'s dump, &lt;code&gt;src/rom/charmap.rom&lt;/code&gt;, has replaced&#xA;the standard upper-case and stick 4-5 punctuation glyphs in $60-$7F&#xA;with lower-case and stick 6-7 punctuation.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-21T07:01:49.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13421" PostTypeId="2" ParentId="7873" CreationDate="2020-01-21T09:17:22.720" Score="0" Body="&lt;p&gt;An additional reason - although this would be far less of a factor than the others posted - is that cartridges were a lot bulkier than CDs or floppy disks, and so a magazine with a bundled demo cartridge would take up more space on the newsagent's shelves and in shipping/storage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the newsagent wouldn't be able to have so many copies on the shelf at once, the post office or courier would not be able to deliver as many copies without charging a lot more, the newsagent's storage in the back of the shop might also be more pressed for space...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This isn't that much of a factor for some smaller cartridge types, like the Gameboy or Game Gear, but it would have been for the N64 or Sega Megadrive/Genesis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Note. I think the cost of buying/manufacturing the cartridges, or of submitting them to Nintendo/Sega's approval process, is the main reason it didn't happen. This is just an additional reason.)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="12247" LastActivityDate="2020-01-21T09:17:22.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13422" PostTypeId="2" ParentId="9127" CreationDate="2020-01-21T09:41:59.533" Score="1" Body="&lt;p&gt;The IBM Selectric went on sale in July of 1961 and was massively popular, this was 2 years before the original ASCII standard was released.  For some reason the American Standards Association, through numerous revisions between 1963 and 1986, decided to ignore the most popular typewriter of the 60's, 70's and 80's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only change from the 1961 Selectric number row to current keyboards is the 'cent' symbol (not ASCII) on the '6' key was replaced with '^'.  Other keys were added, IBM lost the computer market, but the Selectric keyboard layout survives.&lt;/p&gt;&#xA;" OwnerUserId="16046" LastEditorUserId="16046" LastEditDate="2020-01-21T09:52:31.157" LastActivityDate="2020-01-21T09:52:31.157" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13423" PostTypeId="1" CreationDate="2020-01-21T12:04:51.190" Score="5" ViewCount="940" Body="&lt;p&gt;After reading about the Signetics 2650, and being a bit familiar with the HP2100's, I'm curious how common the style of &quot;indirect addressing via the address value&quot; instruction was at the time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CPUs like the 6502 offered indirect addressing but did so via separate opcodes in the 8-bit instruction. In contrast, machines like the HP triggered indirection by setting the bit in the address itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see references to this style here and there, but I'm curious in a general fashion: was this sort of bit-stealing in the address common in machines of the mini era, or was the 6502 separate-opcode more common for indicating addressing modes?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="6659" LastEditDate="2020-01-21T13:11:49.070" LastActivityDate="2020-01-26T07:53:29.290" Title="Indirect addressing using address bits as marker (tagged address)" Tags="&lt;6502&gt;&lt;minicomputers&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13424" PostTypeId="2" ParentId="13423" CreationDate="2020-01-21T12:46:59.303" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm curious how common the style of &quot;indirect addressing via the address value&quot; instruction was at the time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To avoid a list answer and as an absolute answer isn't possible anyway, let's say &quot;quite&quot;. Notable examples in addition to the mentioned &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_2100&quot; rel=&quot;nofollow noreferrer&quot;&gt;HP2100&lt;/a&gt; are &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1620&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM's 1620&lt;/a&gt; of 1959 or &lt;a href=&quot;https://en.wikipedia.org/wiki/Data_General_Nova&quot; rel=&quot;nofollow noreferrer&quot;&gt;DG's NOVA&lt;/a&gt; of 1969. All of them are based on the idea that word size is larger than usable address size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all, up until the mid 1970s, were all these CPUs were designed, Memory sizes of 64 KiB were more of a theoretical limit. When the DSI-1000 (HP2100) was designed in the early 60s, even the biggest computers of it's time like the CDC 6600 had only 128 KiWords of Memory. Minis way less.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar for monolithic CPUs and semiconductor Memory in 1972 when the 2650 project started. Heck, 64 KiB was still close to unobtainium, in the second half of the 1970s, when CPU's like 8080 or 6502 were ready. It wasn't until DRAM in form of Mostek's MK4116 DRAM came about in 1976 that 64 KiB became a common sight for (upper end) micro computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result CPU designs of that time, like Datapoint 2200 or its follow up the i8008, did not use the full 16 Bit address, even without setting bits apart for indirect handling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So even if CPUs used a flat 64 Ki addressing, system designers than used single bits for function. Commodore being a great example by using 2^15 to distinguish between RAM and everything else. Easy for the PET in 1976, but making use of any RAM beyond 32 KiB a true pain for all that followed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Such decisions are usually rather based in what data structures the designers imagined, like linked lists and how the CPU is constructed, especially if it's microprogrammed in a way that allows to iterate over several levels of indirektion.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is mostly a decision about support to high level structures. For example following a linked list on a 6502 is clumsy at least - and more important, programmers had not only to embedded this in their code, but also use a different way of keeping track how many levels are to be used and/or special values for start or end. With an indirect feature embedded in the address word, programs didn't have to be adjusted to used indirection or not or how many levels, but let this to the hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, to some degree programmers 'reinvented' the idea of address tagging as different times. On /370 machines with 32 Bit words but 24 bit address, it was common to use the top byte of an address word as marker of various kind. oten to mark the end of a linked list as well. Similar did MacOS on the 68k use the top byte of its addresses (here called &lt;em&gt;Handle&lt;/em&gt;) to store information about locking, or if it was to be loaded first (much like being paged out). This is what added issues with less than clean programs when switching to 32 bit addressing. Newest incarnation might be the use on iOS where all pointers are always aligned to word boundries, 'freeing' two bits to be used for memory management.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, all of this makes only sense if the CPU is indended for tasks with highly dynamic data - like minis are. Embedded applications don't call for such a luxury. Tables are on fixed spots (thus the 6502 has an ABS,X/Y mode, but no (ABS),X/Y) and linked lists are rather uncommon.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;was this sort of bit-stealing in the address common [...], or was the 6502 separate-opcode more common [...]?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;On what measurements? Number of CPU's sold or designs? And if designs, which to include? Only those sold in a certain number? Even more important at what time? The question setretches from early 60s until mit 1970s, eventually the most dynamic time for CPU design. A time were borders were stretched a lot changing the base allowing to spend bits or not a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom Line: &lt;strong&gt;It is always a good use when word size is larger than address size.&lt;/strong&gt; Which was for the mentioned architectures the case - at a time when 64 Ki was way more than anyone could resonably afford.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-21T14:43:12.023" LastActivityDate="2020-01-21T14:43:12.023" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13425" PostTypeId="2" ParentId="13423" CreationDate="2020-01-21T13:10:55.933" Score="5" Body="&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; - I see the world divided into 'indirection indicated by dedicated field in instruction and (sometimes) in indirect words as well' versus 'indirection is a property of certain opcodes'.  No 'indirection indicated by bit in address'. I think dedicated-field is more common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Introductory remarks&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think there were many computers where indirection was indicated by a bit in the actual address. Some of the confusion may be more due to words used in the description rather than in the actual computer operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of my assembly-level experience has been with computers where indirection is a field in the instruction (and to a lesser extent, where chained indirection is supported, by a field in the indirect word).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps I have a big-machine (anything that can host a timesharing system) bias; perhaps early micros tended to specific instructions. I can't comment on that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The case where there are distinct opcodes for indirection is obvious enough; I merely think it's not particularly common in the sort of machines I am used to.  I don't discuss it further.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Machines with a separate field indicating indirection&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Indirection is indicated by a separate field (not part of the opcode, not part of the address field).  That is, it's the same MOVE or LOAD opcode regardless of whether there is indirection; in contrast to having a specific LOAD-INDIRECT opcode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be useful to consider two subcases: single-level indirection and multi-level indirection, the latter being where the indirect word itself can call for another indirection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Single level of indirection&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the indirection is not considered to be part of the opcode then it is a separate field in the instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the PDP-11, there are &quot;mode&quot; fields (potentially two, for operations with source and destination addresses), some values of which indicate &quot;indirect&quot; modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VAX follows the PDP-11 model, except that some operations have more than two operands, but there's still a mode value as part of each operand specifier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems unlikely that anyone would call this model &quot;indirect flag in address&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Multiple levels of indirection&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The initial indirection is again indicated by a field in the instruction word.  The processor then fetches an indirect word which in the machines I am familiar with tends to have a similar format to the original instruction -- for example if the computer supports indirection and indexing, then the indirect word will also have an indirection indicator and an indexing indication (flag or register number).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the PDP-10, there is an &quot;indirect bit&quot; in the instruction word and an &quot;indirect bit&quot; in the indirect word. The instruction and indirect words also indicate indexing by having a non-zero value in the &quot;index register&quot; field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SDS940 (which I have not programmed) is similar to the PDP-10.  The instruction word contains an indirect flag and an index flag, considered as distinct from the address.  Any indirect word also contains these flags.  Indirection proceeds to arbitrary depth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be considered a matter of opinion whether the indirect and index-reg fields are &quot;part of&quot; or &quot;separate from&quot; the address field.  Since it is natural to consider them as separate in the actual instruction word, and since the indirect word follows the same overall format as the instruction word, the indirect/index fields are also best considered as separate in the indirect word.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Opinion on the above&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, and even for computers I haven't programmed (but don't have them in mind's cache right now) this seems &quot;standard&quot; to me - to have a field or fields in the instruction that says how to form the effective address, but separate from the opcode and the address (displacement, whatever it is locally called).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I view this as clean design. It seems similar to having &quot;use a modifier register (index register) in address calculation&quot; not be implicit in the opcode but explicitly appearing in a separate field in the instruction word.  Or even which register to use as source/destination, in a machine with register/memory instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Machines quoted in the question&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;HP 2100&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have now read the &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_2100#Instructions&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page on the HP 2100&lt;/a&gt;. Based on that, I would describe the HP 2100 operation as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An initial indirection is indicated by a field in the instruction (bit 15), which is not described (by the wiki page) as part of the address in bits 0-9; it is a distinct flag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optionally, a second indirection can be requested by setting bit 15 in the indirect word.  And so on to any degree.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is analogous in some way to the way the PDP-10 handles chained indirect.  If bit 13 is set in the instruction, then it's indirect mode.  If bit 13 is set in the indirect word (the one fetched from the effective address in the instruction) then it's another indirection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the HP 2100 case (a machine I am not familiar with), I would prefer to regard the indirect bit, bit 15, as a separate flag rather than part of the address.  I have two reasons for this: (1) it's a separate flag in the instruction, not even contiguous with the address, so symmetry says it's a separate flag in the indirect word, (2) if bit 15 is set in the indirect word, then bits 0-14 are used as the address from which the next indirect word is fetched - i.e., bit 15 is not part of the address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if it turns out I'm only quibbling about terminology, note that &quot;bit in the address&quot; as used in the HP 2100 is only a consideration for CPUs that have a multi-level indirect capability.  Anecdotally, I think that's falling out of favour in mainstream processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(But the alternative is still not only &quot;separate instructions for direct/indirect cases&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Signetics 2650&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://amigan.yatho.com/2650UM.html#inst1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;This user manual&lt;/a&gt; (which I assume to be authoritative) describes the instruction format as having an 'indirect' bit.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Example:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The format of relative addressing instruction is: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;oooooorr    iaaaaaaa&#xA;76543210    76543210&#xA; Byte 0      Byte 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;o: operation code&lt;br&gt;&#xA;  r: register&lt;br&gt;&#xA;  i: indirect addressing flag&lt;br&gt;&#xA;  a: relative displacement  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and further, under the heading 'Indirect Addressing':&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Indirect addresses are 15-bit addresses stored right justified in two&#xA;  contiguous bytes of memory. As such, an indirect address may specify&#xA;  any location in addressable memory (0-32767). The high order bit of&#xA;  the two-byte indirect address is not used by the processor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So I see nothing that would cause me to describe this as an indirection flag in an address.  The flag is a separate field in the instruction, not part of the address and not implicit in the opcode.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-01-24T12:56:36.303" LastActivityDate="2020-01-24T12:56:36.303" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="13426" PostTypeId="2" ParentId="13423" CreationDate="2020-01-21T15:08:21.153" Score="8" Body="&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13425/7208&quot;&gt;another-dave points out&lt;/a&gt;, your &quot;indirect bit in the&#xA;instruction&quot; versus &quot;indirect bit in the address&quot; distinction can be&#xA;ambiguous. When the instruction and the address operand are always&#xA;contained within a single machine word at the same address, is the&#xA;indirect bit part of the address or part of the instruction?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think we can clearly say that for &lt;a href=&quot;https://en.wikipedia.org/wiki/Addressing_mode#Multi-level_memory_indirect&quot; rel=&quot;nofollow noreferrer&quot;&gt;multi-level memory&#xA;indirect&lt;/a&gt; addressing where, due to indirection, an address loaded&#xA;separately after an instruction has been executed can cause yet&#xA;another level of indirection, the indirect bit would be considered&#xA;part of the address. An example of this would be on the &lt;a href=&quot;https://www.researchgate.net/publication/220772067_The_Architecture_of_Sperry_Univac_1100_Series_Systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;UNIVAC 1100&#xA;series&lt;/a&gt;, where there was an &quot;&lt;em&gt;i&lt;/em&gt; bit&quot; in each word. If this is&#xA;set in a word read as an instruction and operand, the lower 22 bits of&#xA;that word (which include the &lt;em&gt;i&lt;/em&gt; bit) are replaced by the contents of&#xA;the referenced address; the &lt;em&gt;i&lt;/em&gt; bit is then checked again and, if set,&#xA;the replacement done again. This continues until the &lt;em&gt;i&lt;/em&gt; bit is clear&#xA;in the data loaded from the referenced address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This multi-level indirect was reasonably popular in the 1950s and&#xA;1960s, implemented in the IBM 1620 (1959), &lt;a href=&quot;https://www.researchgate.net/publication/220772067_The_Architecture_of_Sperry_Univac_1100_Series_Systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;UNIVAC 1100&#xA;series&lt;/a&gt; (1962), HP 2100 series (1964), &lt;a href=&quot;http://pdp10.nocrew.org/docs/instruction-set/Addr-Comp.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-10&lt;/a&gt; (1966), &lt;a href=&quot;https://archive.org/details/bitsavers_sds9xx94096_17447409/page/n14/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;SDS&#xA;940&lt;/a&gt;[] (1966), Data General Nova (1969), and various others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, there were plenty of other word-oriented machines, from&#xA;the IBM 700 and 7000 series (late 1950s onward) through the PDP-8&#xA;(1965) and beyond that had a single word containing an instruction,&#xA;indirect bit and address operand yet gave only one level of indirect&#xA;addressing: if the target location from which the next address was&#xA;loaded had the indirect bit set, that was ignored.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-01-26T07:53:29.290" LastActivityDate="2020-01-26T07:53:29.290" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13427" PostTypeId="1" AcceptedAnswerId="13430" CreationDate="2020-01-21T15:17:27.887" Score="17" ViewCount="3764" Body="&lt;p&gt;I have several 286, 386 and 486 motherboards that I would like to use.  My problem is that while I have all of the components to make them functional, I don't have spare cases to put them in.  Ideally, I would put them in period correct AT cases.  However, I am finding it difficult and/or expensive to source AT cases.  You would think something like AT cases would be cheap and easy to find.  Since they made millions upon millions of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many times, the shipping alone is more than a modern ATX case shipped to my house.  And before you mention it, I've looked in many thrift stores, eBay, Craigslist, etc. in my area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I was thinking of just getting the most boring, plain white ATX cases I can find and try to put the motherboards in there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First off, I know I will have an issue with AT to ATX power.  I prefer using modern PSU's anyway so what I have done previously is just buy a modern ATX PSU and then buy an ATX to AT power button converter off eBay (these are cheap).  So I have power covered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next hurdle is going to be the AT keyboard connector.  Many times, AT cases have a hole drilled into the case for the AT keyboard connector.  So this might be an issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than that, what are the other pitfalls I may run into?  I don't have a spare ATX case at the moment to test this theory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't mind modding a case but if it's going to be lots and lots of work, I may just pay the premiums for AT cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2020-01-25T20:41:59.520" Title="What are the difficulties in putting old AT style motherboards into modern ATX cases?" Tags="&lt;old-hardware-adaptation&gt;&lt;new-hardware-adaptation&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13429" PostTypeId="2" ParentId="13427" CreationDate="2020-01-21T17:08:02.110" Score="7" Body="&lt;p&gt;For a while, many PC cases were made to be both AT and ATX compatible.  This would have been in the mid-1990s, during the changeover from Socket 7 to Slot 1 (Pentium II) and Super Socket 7 (AMD K6 series) when motherboards were made in both shapes.  You could try looking for cases from that period, or from the early 2000s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AT motherboards (in practice, usually these were &quot;baby AT&quot;) devoted much more of their &quot;back edge&quot; to expansion slots and less to I/O, the latter being largely restricted to the keyboard port.  However, that &quot;back edge&quot; is also much shorter than that of an ATX board.  I think that means you could mount an AT board so that (most of?) its expansion slots lined up with those of an ATX case, with the keyboard port showing through the I/O area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the key feature you should look for is an extra row of mounting standoff positions midway between the ones needed for a Mini-ITX board; that's where the top edge of a Baby AT board goes.  Many cases currently in production have a gigantic hole here instead, for access to the heatsink backplate that modern CPUs need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/f/fd/ATX_ITX_AT_Motherboard_Compatible_Dimensions.svg&quot; rel=&quot;noreferrer&quot;&gt;This diagram&lt;/a&gt; should be enlightening.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it's still relatively easy to obtain early-2000s era cases like the Chieftec Dragon, which have the correct mounting holes for a Baby AT board.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-01-21T17:15:05.710" LastActivityDate="2020-01-21T17:15:05.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13430" PostTypeId="2" ParentId="13427" CreationDate="2020-01-21T17:12:52.443" Score="20" Body="&lt;p&gt;Some issues you may encounter are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Motherboard size. An AT motherboard is 13 inches from front to back,&#xA;while the ATX standard mandates 9.6 inches. If a case takes an&#xA;Extended ATX motherboard it should take an AT one.&lt;/li&gt;&#xA;&lt;li&gt;Mounting pillars / holes. On an AT motherboard the position of the holes is not precisely defined by the standard, whereas ATX is more rigorous. Early ATX cases tended to have holes for all possible mounting pillar locations, while later ones may only support those defined in the ATX standard. If your case has mounting pillars that can't be removed, and they don't correspond to holes in the AT motherboard, you'll need to block them off with an insulator (for example, a plastic screw) so they don't cause shorts on the motherboard. (Aside: This can also happen mounting an AT motherboard in an AT case not designed for it).&lt;/li&gt;&#xA;&lt;li&gt;The power switch. The AT to ATX converters I've seen are designed for an AT-style power switch (toggle on/off) rather than an ATX-style switch (momentary pushbutton). What I've done when using them is to mount a toggle pushbutton switch in a spare drive bay, and use that as the power switch rather than the case's own.&lt;/li&gt;&#xA;&lt;li&gt;The keyboard connector. When an AT motherboard is mounted in an ATX case, the keyboard connector will line up with the rectangular opening where the I/O shield would normally go. I/O shields with a single circular hole for an AT keyboard did exist (one's &lt;a href=&quot;https://en.wikipedia.org/wiki/ATX#/media/File:Several_atx_io_shields_(smial).jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;pictured&lt;/a&gt; on Wikipedia) but I'm not aware of a source for them.&lt;/li&gt;&#xA;&lt;li&gt;The turbo button. It's very unlikely that your case will have one, so if your motherboard has a connection for one you'll either need to jumper it to the required position, or modify the case to add a toggle button (as for the power switch).&lt;/li&gt;&#xA;&lt;li&gt;The power LED. AT, and older ATX cases used a 3-pin Berg connector for the power LED, with the middle pin blank. Later ATX cases use a 2-pin Berg connector, so you may have to replace the connector to make it fit the motherboard.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Given all of the above caveats, there are combinations which work. The notes above come from successfully mounting AT motherboards from the 486/Pentium era in ATX cases from the late 1990s.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="1912" LastEditDate="2020-01-25T20:41:59.520" LastActivityDate="2020-01-25T20:41:59.520" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13431" PostTypeId="2" ParentId="13427" CreationDate="2020-01-21T17:20:39.750" Score="4" Body="&lt;p&gt;I would say there are 3 main difficulties:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;AT power connector, versus ATX power supplies.  As you've noted, adapters are available to convert from ATX to AT, you will just need to figure out what to use as a power switch.  The AT used the main power supply disconnect as the system power switch, while ATX moved to 'soft power' via a motherboard connector.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;AT keyboard port.  This is mostly a matter of cutting a hole if your ATX case doesn't have one (or it's not where you need it).  A sheet metal nibbler may be useful for this.  Take care to ensure that stray metal shavings don't end up where you don't want them.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Form factor.  This is the big one.  Most ATX cases are too small for a full size AT motherboard, which was considerably larger than the PC and XT motherboards that came before, and the baby AT boards that came after.  If you limit yourself to &quot;baby AT&quot; motherboards you will have better luck, especially if you use ATX cases that also support &quot;baby AT&quot;.  Baby AT and ATX are similar sizes, but not identical (ATX being 12&quot; x 9.6&quot; with the slots along the long edge, and baby AT being 8.5&quot; x 13&quot; with the slots along the short edge) so using a case that supports baby AT improves your situation dramatically.  You may have to drill and tap new holes in the case to accommodate slightly different positions for the board standoffs.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="70" LastEditorUserId="70" LastEditDate="2020-01-23T16:56:33.930" LastActivityDate="2020-01-23T16:56:33.930" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13432" PostTypeId="2" ParentId="11523" CreationDate="2020-01-21T20:36:13.590" Score="2" Body="&lt;p&gt;I remember receiving a CF card prepped by a friend. I read it with my basic multi-purpose card reader (which works very well for micro SD cards) and coïncidence (or not): the data was destroyed at first access and the card became unreadable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My friend told me that those all-purpose card readers were low quality for the compact flash format, and recommended a specific CF card reader. Not doing a lot of formats but at least reading and writing CF format properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The brand that he recommended is Hama (note: I'm not affiliated with Hama, but it's the only card reader I have successfully tested). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/E0qRy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/E0qRy.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you notice in the picture, there aren't 546 formats supported or any USB mug warmer. Just Compact flash and 2 others (that I never used). I've been using that device for a few months (with PFS3 and normal FFS) now and never had any issues, even with cheap CF cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose that some other CF-specific card readers are as reliable. Just don't try cheap reader hardware on those cards. Invest in a specific reader.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-01-21T20:36:13.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13433" PostTypeId="1" CreationDate="2020-01-22T07:11:04.093" Score="8" ViewCount="499" Body="&lt;p&gt;I'd like to bring up an old (pre-1975) LISP REPL so I can type things in and see how it behaves. MACLISP would be good but I'm open to other, similar LISPs, even as far back as LISP 1.5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the fastest an easiest way to do this? Does anybody run a web page with a REPL? Or is there a package available (preferably that can run under Linux) with all the setup work already done? Or do I need to go as far as installing and configuring SIMH and software for it? If the last, what are the simplest steps to do this?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-02-05T13:22:56.510" Title="What's the easiest way to bring up a MACLISP REPL on modern machines?" Tags="&lt;lisp&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13434" PostTypeId="2" ParentId="13433" CreationDate="2020-01-22T07:57:13.330" Score="3" Body="&lt;p&gt;I think you first has to decide whether you want Maclisp, or LISP 1.5, or something else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We do have a copy of PDP-10 Maclisp running on ITS here: &lt;a href=&quot;http://github.com/PDP-10/its&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://github.com/PDP-10/its&lt;/a&gt;&lt;br&gt;&#xA;But it's the latest version from the mid 1980s.  There are older versions archived going back to the early 1970s, but they are not public (yet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also Multics Maclisp; ask multicians about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is the direct predecessor to Maclisp: PDP-6 LISP.  It's also available from the &lt;strong&gt;its&lt;/strong&gt; repository linked above.  It runs standalone on a PDP-6 or 10; the file name is @ LISP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think LISP 1.5 is available and runs on IBM emulators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to experience Maclisp is to log in on an ITS machine and try it.&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2020-01-22T07:57:13.330" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13435" PostTypeId="2" ParentId="13433" CreationDate="2020-01-22T08:06:10.053" Score="3" Body="&lt;h3&gt;PDP-1 LISP&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Amongst the &lt;a href=&quot;http://simh.trailing-edge.com/software.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;SIMH Software Kits&lt;/a&gt; is L. Peter Deutsch's PDP-1&#xA;LISP 1.5 implementation. It's quite limited (particularly in terms of&#xA;memory) and also reads all numbers in octal, but does at least let you&#xA;enter and evaluate basic expressions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On Linux, install SIMH from your distribution's package repositories,&#xA;e.g., &lt;code&gt;sudo apt-get install simh&lt;/code&gt;. Download &lt;a href=&quot;http://simh.trailing-edge.com/kits/lispswre.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;lispswre.zip&lt;/code&gt;&lt;/a&gt;&#xA;(that's from the &quot;Lisp&quot; link on the Kits page above) and unpack it.&#xA;&lt;code&gt;lisp_doc.txt&lt;/code&gt; contains instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need not compile the assembler and assemble the source; the&#xA;included &lt;code&gt;lisp.rim&lt;/code&gt; is the same output you would have generated&#xA;anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start the emulator with the &lt;code&gt;pdp1&lt;/code&gt; command and follow the instructions&#xA;in §3 of &lt;code&gt;lisp_doc.txt&lt;/code&gt; to set up the initial machine state. After the&#xA;final &lt;code&gt;c&lt;/code&gt; (continue) command you will not be presented with a prompt,&#xA;but you can type Lisp expressions to be evaluated. Remember that&#xA;newlines are ignored; typing a space (&lt;code&gt;▒&lt;/code&gt; in sample input below) after&#xA;the final closing paren is what triggers evaulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most errors will halt the machine; when this happens you can continue&#xA;with the &lt;code&gt;c&lt;/code&gt; command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(puls 7 1)▒&#xA;&#xA;HALT instruction, PC: 000005 (STF6)&#xA;sim&amp;gt; c&#xA;(plus 7 1)▒&#xA;10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When you're done, &lt;kbd&gt;Ctrl-E&lt;/kbd&gt; will exit back to the &lt;code&gt;sim&amp;gt;&lt;/code&gt;&#xA;prompt where you can use the &lt;code&gt;q&lt;/code&gt; command to exit. To start again from&#xA;your saved machine state (created during the setup above), start the&#xA;simulator with &lt;code&gt;pdp1&lt;/code&gt; and at the &lt;code&gt;sim&amp;gt;&lt;/code&gt; prompt use the command &lt;code&gt;get&#xA;lisp.sav&lt;/code&gt; followed by &lt;code&gt;c&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://simh.trailing-edge.com/pdf/simh_doc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;SIMH Users' Guide&lt;/em&gt;&lt;/a&gt; contains further details about using&#xA;SIMH.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-01-22T08:06:10.053" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13436" PostTypeId="2" ParentId="13433" CreationDate="2020-01-22T08:41:09.180" Score="6" Body="&lt;h3&gt;PDP-10 MACLISP (mid-80s version)&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/142/lars-brinkhoff&quot;&gt;Lars Brinkhoff&lt;/a&gt; runs a public ITS system on &lt;code&gt;its.pdp10.se&lt;/code&gt;&#xA;(telnet protocol on port 10003) which has MACLISP available, though&#xA;it's a mid-1980s version. You can log in and use it as follows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below, &lt;code&gt;…&lt;/code&gt; indicates elided output text, &lt;code&gt;^Z&lt;/code&gt; is &lt;kbd&gt;Ctrl-Z&lt;/kbd&gt;,&#xA;and lines containing your input (sometimes preceeded by a prompt) are&#xA;indicated with &lt;code&gt;»&lt;/code&gt; at the left-hand margin. Expressions are evaluated&#xA;as soon as you type the closing parenthesis.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;» $ telnet its.pdp10.se 10003&#xA;  Connected to the KA-10 simulator MTY device, line 2&#xA;» ^Z&#xA;  TT ITS.1648. DDT.1547.&#xA;…&#xA;» :LOGIN JMCCAR&#xA;  TT: JMCCAR; JMCCAR MAIL - NON-EXISTENT DIRECTORY&#xA;» :LISP&#xA;&#xA;  LISP 2154&#xA;» Alloc? n&#xA;…&#xA;  *&#xA;&#xA;» (+ 7 1)&#xA;  10&#xA;&#xA;» ^Z&#xA;» 50107)   XCT 11   :LOGOUT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Remember to exit Lisp and &lt;code&gt;:LOGOUT&lt;/code&gt; when you're done; if you don't do&#xA;this the terminal might be left in its logged-in state for the next&#xA;user that connects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may find David Moon's &lt;a href=&quot;https://en.wikipedia.org/wiki/David_A._Moon&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Maclisp Reference Manual&lt;/em&gt;&lt;/a&gt; to be&#xA;a helpful reference while using this.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="447" LastEditDate="2020-01-22T23:15:14.370" LastActivityDate="2020-01-22T23:15:14.370" CommentCount="4" CommunityOwnedDate="2020-01-22T08:41:09.180" ContentLicense="CC BY-SA 4.0" />
  <row Id="13437" PostTypeId="2" ParentId="13433" CreationDate="2020-01-22T10:51:33.170" Score="5" Body="&lt;h3&gt;PDP-6 LISP (around 1966)&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;LISP 1.5 ported to the Project MAC / AI Lab PDP-6 in 1964.  This version is estimated to be from around 1966 and is a binary machine code file found on a DECtape belonging to Peter Samson.  Due to an incompatible PDP-6 instruction, it has been patched to run on a PDP-10.  It can of course also be run unpatched on PDP-6 emulators, of which there are a few.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To run this, download and build &lt;a href=&quot;http://github.com/PDP-10/its&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://github.com/PDP-10/its&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then start the PDP-10 emulator.  You will enter DSKDMP which can read, write, and run files from the disk.  Type &lt;code&gt;LISP&lt;/code&gt; and Enter to start PDP-6 LISP.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;» $./start&#xA;…&#xA;   DSKDMP&#xA;» LISP&#xA;» ALLOC? N&#xA;» (PLUS 1 2)&#xA;  3&#xA;» (CONS T NIL)&#xA;  (T)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2020-02-05T13:22:56.510" LastActivityDate="2020-02-05T13:22:56.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13438" PostTypeId="1" AcceptedAnswerId="13439" CreationDate="2020-01-23T01:21:14.357" Score="8" ViewCount="2145" Body="&lt;p&gt;I am curently studying NES architecture to create a NES emulator. While looking up the NES motherboard schematics (&lt;a href=&quot;https://console5.com/wiki/Nintendo_NES-001&quot; rel=&quot;noreferrer&quot;&gt;https://console5.com/wiki/Nintendo_NES-001&lt;/a&gt;), some of the chips usage are not clear to me:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;U2: 74LS373&lt;/li&gt;&#xA;&lt;li&gt;U3: 74LS139&lt;/li&gt;&#xA;&lt;li&gt;U7, U8: 74368 &lt;/li&gt;&#xA;&lt;li&gt;U9: 74HCU04&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16055" LastEditorUserId="3698" LastEditDate="2020-01-23T12:35:51.857" LastActivityDate="2020-01-24T02:37:51.997" Title="NES chips usage" Tags="&lt;emulation&gt;&lt;nes&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13439" PostTypeId="2" ParentId="13438" CreationDate="2020-01-23T04:31:51.480" Score="21" Body="&lt;p&gt;You may also find useful &lt;a href=&quot;https://nesdev.com/Ntd_8bit.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this other schematic&lt;/a&gt;, which I find&#xA;easier to read, though some of the design details differ. It's from&#xA;the &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/Nesdev&quot; rel=&quot;nofollow noreferrer&quot;&gt;NesDev wiki&lt;/a&gt; which is a fount of useful technical&#xA;information about older Nintendo consoles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of the chips you mention are low-level interface logic, and&#xA;probably not important for your emulation. You'll need to do the same&#xA;things that those chips help to do, but almost certainly in different&#xA;ways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;&lt;a href=&quot;http://www.ti.com/lit/ds/symlink/sn54ls373.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;74LS373&lt;/a&gt;&lt;/strong&gt; is an 8-bit latch. When the &lt;code&gt;ALE&lt;/code&gt; (&quot;address latch&#xA;enable&quot;) line of the PPU is high, the latch reads the data from&#xA;&lt;code&gt;AD0-7&lt;/code&gt; and passes it through to &lt;code&gt;A0-7&lt;/code&gt; on the RAM chip. When &lt;code&gt;ALE&lt;/code&gt;&#xA;goes low it &quot;freezes&quot; the data on its outputs and ignores any changes&#xA;to its inputs, basically &quot;capturing&quot; the low 8 bits of the address&#xA;being sent to the RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is necessary because the &lt;code&gt;AD0-7&lt;/code&gt; outputs from the PPU are&#xA;connected not only to A0-A7 of the RAM (though the latch), but also&#xA;&lt;code&gt;D0-7&lt;/code&gt; of the RAM. (This multiplexing saves pins.) This is very hard&#xA;to see due to blurred text on the schematic you linked, but much more&#xA;clear in the one I linked above. So here's what a read cycle looks&#xA;like:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The PPU  deasserts &lt;code&gt;R̅D̅&lt;/code&gt;, generates an address on &lt;code&gt;AD0-7&lt;/code&gt; and&#xA;asserts &lt;code&gt;ALE&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Because &lt;code&gt;R̅D̅&lt;/code&gt; is not asserted, the RAM disables its &lt;code&gt;D0-7&lt;/code&gt; I/O pins&#xA;so that they will have no effect on the bus. Because &lt;code&gt;ALE&lt;/code&gt; is&#xA;asserted, the '373 reads its input pins and passes the address on&#xA;&lt;code&gt;AD0-7&lt;/code&gt; through to the &lt;code&gt;A0-7&lt;/code&gt; pins on the RAM.&lt;/li&gt;&#xA;&lt;li&gt;The PPU deasserts &lt;code&gt;ALE&lt;/code&gt;. This causes the '347 to start ignoring its&#xA;inputs, and thus any data on &lt;code&gt;AD0-7&lt;/code&gt;, and maintain the old value on&#xA;its outputs, holding the address on RAM pins &lt;code&gt;A0-7&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The PPU asserts &lt;code&gt;R̅D̅&lt;/code&gt;, enabling the RAM data outputs &lt;code&gt;D0-7&lt;/code&gt;, and it&#xA;can now read those data on pins &lt;code&gt;AD0-7&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;&lt;a href=&quot;http://www.ti.com/lit/ds/symlink/sn74ls139a.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;74LS139&lt;/a&gt;&lt;/strong&gt; is a decoder used for address decoding. Basically,&#xA;it's a pair of units that take a two bit binary number as input to the&#xA;A and B pins, and drive low one of Y0, Y1, Y2 or Y3 depending on what&#xA;the input number is. (Or it may leave all of the outputs high if the&#xA;chip is not selected.) Here's the function table (&lt;code&gt;G̅&lt;/code&gt; is the select&#xA;pin, which must be low to enable output):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    G̅  A  B      Y0 Y1 Y2 Y3&#xA;    0  0  0   →   0  1  1  1&#xA;    0  1  0   →   1  0  1  1&#xA;    0  0  1   →   1  1  0  1&#xA;    0  1  1   →   1  1  1  0&#xA;    1  x  x   →   1  1  1  1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this particular case it's generating the enable signal for U1, the&#xA;2K static RAM. The inputs to the first half are the clock (φ2) and&#xA;A15; if these are 1 and 0 respectively, Y1 goes low. (The clock is&#xA;used here because the address and data for the memory are valid only&#xA;when it's high.) Y1 in turn enables the second two-bit decoder, which&#xA;takes A14 and A13 as inputs; if both are low then its Y0 output goes&#xA;low, and that enables the RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The effect of this is that accessing any address between $8000 and&#xA;$AFFF will enable the RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;&lt;a href=&quot;http://www.ti.com/lit/ds/symlink/sn54ls366a.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;74368&lt;/a&gt;&lt;/strong&gt; is an inverting tri-state buffer, which has three&#xA;functions that can be used alone or in combination: 1) inverting the&#xA;signal going through it (changing low to high and high to low), 2)&#xA;buffering signals so that something on the other side is driven with&#xA;enough power, and 3) connecting or disconnecting whatever's on the&#xA;other side of the buffer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case these are used to connect shift registers in the gamepads&#xA;to the data bus based on signals from the INP0 and INP1 pins, which&#xA;are asserted when you &lt;a href=&quot;http://wiki.nesdev.com/w/index.php?title=Controller_reading&quot; rel=&quot;nofollow noreferrer&quot;&gt;read the ports $4016 and $4017&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;&lt;a href=&quot;https://www.onsemi.com/pub/Collateral/74HCU04.REV0.PDF&quot; rel=&quot;nofollow noreferrer&quot;&gt;74HCU04&lt;/a&gt;&lt;/strong&gt; is just a package of six unbuffered inverters,&#xA;changing low to high and vice versa. This is not represented as a&#xA;single chip on the schematic; the individual inverters are the&#xA;triangles with small circles at the point that you see in various&#xA;places on the schematic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of these are used at various places where they simply want to&#xA;invert a signal, but this particular form of 7404 can also be used as&#xA;an amplifier, and it's used as such in the audio output circuit.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-01-24T02:37:51.997" LastActivityDate="2020-01-24T02:37:51.997" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="13440" PostTypeId="2" ParentId="13385" CreationDate="2020-01-23T06:29:38.907" Score="2" Body="&lt;p&gt;I would assume the serial interface is something proprietary. If it was anything close to a standard RS-232C, they very likely would not have bothered with the whole parallel interface contraption.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Sabrent USB-Parallel cable ends in a DB25F. So you have a DB25M - Centronics 36 cable. &lt;strong&gt;I would try swapping that first.&lt;/strong&gt; I have seen plenty of flaky parallel cables over the years, and it is quite possible that it works &quot;good enough&quot; (so you get some output) but that a handshaking line that the Panasonic needs (and maybe the Olivetti 900x doesn't care about) isn't working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next option, but which is not as cheap/easy as another cable, is a &lt;a href=&quot;https://amzn.to/2RUR6oH&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCI Parallel card&lt;/a&gt;:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kS8g1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kS8g1.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, that is dependent on having PCI slots. If you are using a laptop then that's not an option, and there are plenty of desktops that don't have expansion slots any more either. The idea is that Windows is controlling the port much more directly (like DOS did) than via a USB port where it is really sending commands to a microcontroller that is in turn running the parallel port. I have more hope for proper handshaking with a PCI card than with a USB adapter.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2020-01-23T06:29:38.907" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13441" PostTypeId="2" ParentId="9381" CreationDate="2020-01-23T06:49:29.540" Score="9" Body="&lt;p&gt;I believe this is the best place for PDP-1X documentation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/mit/rle_pdp1/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.trailing-edge.com/pdf/mit/rle_pdp1/&lt;/a&gt;&lt;br&gt;&#xA;(Linking to a mirror because the main bitsavers.org is offline for the moment.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/mit/rle_pdp1/memos/pdp35_part5A_feb75.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The 1975 memo PDP35, part 5A&lt;/a&gt; documents spheres and capabilities:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A virtual memory space, any virtual processors (processes) that might be executing inside that memory space, plus the list of associated resources (C-list) comprise a &lt;em&gt;sphere&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Interestingly, these exact concepts - spheres, processes, capabilities - were carried forward to the MIT Logo group timesharing system SITS.&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2020-01-23T12:59:00.657" LastActivityDate="2020-01-23T12:59:00.657" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13442" PostTypeId="1" AcceptedAnswerId="13445" CreationDate="2020-01-23T09:18:21.257" Score="20" ViewCount="4907" Body="&lt;p&gt;In the 1980s, each country had a particular brand of computer that was most commonly used in schools; often, there was pressure to go with a local manufacturer. In the US, the Apple II. In Britain, the BBC Micro. In France, presumably because of the aforementioned pressure, a local company licensed  a TRS-80 design and manufactured it in a bright red case under the brand name Alice, until 1985 when the government declared Thomson the official supplier of computers to French schools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which brand was most commonly used in West German schools? I know Commodore was big in Germany, which would make it a likely candidate, unless nationalistic pressure acted again?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-27T08:18:29.140" Title="Which 8-bit computers were used in German schools in the 1980s?" Tags="&lt;history&gt;&lt;commodore&gt;" AnswerCount="7" CommentCount="12" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13443" PostTypeId="2" ParentId="13442" CreationDate="2020-01-23T09:49:48.643" Score="10" Body="&lt;p&gt;I can only speak for my own school, a Roman Catholic Gymnasium (i.e. highest-of-three-tiers secondary school, the word does not mean &quot;gym&quot; in German) in a small town near the former West German capital Bonn. But as far as I heard from others, this was sort of typical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We had one Commodore PET-2001 which the school got soon after it was available in the late 1970s. The rest were about ten Apple II Europlus machines, in general use from about 1981 or so until about 1990, used for BASIC, Apple Pascal, and Logo; we had generic PC clones after that time for use with GW-Basic and Turbo Pascal, at least until I left the school in 1993.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since West Germany manufactured no home computers or PCs that were really of German Origin (the Schneider computers were licensed versions of UK manufacturer Amstrad), and also since all things related to schools were subject to State Law rather than Federal Law, I don't think there was so much pressure to chose one specific brand.&lt;/p&gt;&#xA;" OwnerUserId="16057" LastEditorUserId="16057" LastEditDate="2020-01-24T13:13:58.723" LastActivityDate="2020-01-24T13:13:58.723" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13444" PostTypeId="2" ParentId="13442" CreationDate="2020-01-23T11:23:10.390" Score="10" Body="&lt;p&gt;There wasn't any master plan. Each school did its own thing, depending on the commitment of their teachers (or the lack thereof).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our school in Rendsburg/S-H got a few (5?) Sharp MZ-80K in 1981?, one MZ-80A a bit later (which featured an actually usable keyboard!) for programming in BASIC and Pascal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MZs were followed by two Commodore PC-10 around 1985 that were mainly used in the science departments.&lt;/p&gt;&#xA;" OwnerUserId="5200" LastEditorUserId="5200" LastEditDate="2020-01-24T19:21:07.563" LastActivityDate="2020-01-24T19:21:07.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13445" PostTypeId="2" ParentId="13442" CreationDate="2020-01-23T15:10:07.667" Score="25" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Which brand was most commonly used in West German schools? I know Commodore was big in Germany, which would make it a likely candidate, unless nationalistic pressure acted again?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is no simple answer. Not so much due to any 'nationalistic pressure' (*1) but the fact that German schools are not run according to federal guidelines, but are managed on state level and in some cases on city level - plus some recognized independent bodies. All of them had different preferences, not to mention that early on not even the governing bodies gave out guidelines, so schools acquired a quite broad variety of machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the 1960s and 70s a wide variety of Minis were bought by schools - in at least one case I know a /370ish mainframe and another Gymnasium owning a Zuse Z23. This includes many German machines like Walter, &lt;a href=&quot;https://de.wikipedia.org/wiki/Dietz-Computer-Systeme&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dietz&lt;/a&gt;, TA, &lt;a href=&quot;https://de.wikipedia.org/wiki/Kienzle_Apparate&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kienzle&lt;/a&gt; or Nixdorf but as well DEC, IBM, Philips or other non-German machines. Usually the decisions were made at discretion of teachers and/or supportive parents. Of course, having a computer back then was only a thing in higher schools and only in more affluent areas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When micros came along in the late 1970s, again schools often selected their own brand early on. These decisions were as well based on teacher/parent preferences, but as much influenced by local dealerships offering appealing deals. This was pretty much standard until state school governments did churn out guidelines and most importantly, bulk deals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As one of the larger states, Bavaria is a great example. They did go for Commodore around 1980/81 making PET machines the default. But guidelines were open to support competition. The only other company besides Commodore having a larger share in Bavaria was Nuremberg based &lt;a href=&quot;https://de.wikipedia.org/wiki/Triumph-Adler&quot; rel=&quot;nofollow noreferrer&quot;&gt;Triumph-Adler&lt;/a&gt; with their P series as well later on with PCs. Nonetheless, some state schools did continue to use other brands, or, like one Gymnasium in Munich, switched to Olivetti &lt;em&gt;after&lt;/em&gt; the standard was set (*2). Or take Augsburg, were &lt;a href=&quot;https://en.wikipedia.org/wiki/MAI_Basic_Four&quot; rel=&quot;nofollow noreferrer&quot;&gt;MAI&lt;/a&gt; machines were used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the mid 1980s, when the PC got established, a slow migration began - here IBM as well as SIEMENS and Olivetti managed to gather larger shares in Bavaria -  beside, you guessed it, Commodore. Their PC 10/20 series were eventually the most used PC brand in Bavarian schools, despite SIEMENS PC being locally designed and manufactured in Augsburg. Still schools also vowed to use Atari ST as well. Heck, one trade school in Munich switched for C64 as late as 1984, at a time when PET or PC had been set for years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The situation was like that all over Germany.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: Next to any 1975-1985 home/personal computer could be found at German schools.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yes, PET, Apple II, BBC Micro, Sharp, Triumph-Adler+, Olivetti, Philips, Atari or Amstrad were as well what German pupil saw first.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Commodore did argue toward officials that they were a German brand due to manufacturing in Germany, except IBM and Olivetti did the same :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Which makes another nice case about the diverse structure of schools in Germany, as Munich is special in Bavaria by not being a state run school area, but city-run - and while state and city vowed for Commodore - and allocated funds - the school could still close their own deal.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-26T11:20:23.757" LastActivityDate="2020-01-26T11:20:23.757" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="13446" PostTypeId="1" AcceptedAnswerId="13448" CreationDate="2020-01-23T22:49:46.147" Score="5" ViewCount="1039" Body="&lt;p&gt;In the past, the only assembly programming I've done has been a tiny bit of ARM, and then a larger game project in 68k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 68k I was used to being able to do things like &lt;code&gt;add.l    d0, d1&lt;/code&gt; to add the value in &lt;code&gt;d0&lt;/code&gt; to &lt;code&gt;d1&lt;/code&gt;. I've just started playing around with some 6502 development on the Atari 2600 for the first time, and it appears as though you can't add the value of the X or Y registers to the accumulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the only way to add the value in &lt;code&gt;X&lt;/code&gt; to write it out to memory with an &lt;code&gt;stx&lt;/code&gt; and then perform a subsequent &lt;code&gt;adc&lt;/code&gt; to add to the accumulator from that memory address?&lt;/p&gt;&#xA;" OwnerUserId="107" LastActivityDate="2020-01-23T23:40:26.630" Title="Adding a register to the accumulator in 6502" Tags="&lt;assembly&gt;&lt;6502&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13447" PostTypeId="2" ParentId="13446" CreationDate="2020-01-23T22:55:10.240" Score="6" Body="&lt;p&gt;That's not strictly the only way — if you had 256 bytes to spare (/waste) on a lookup table of &lt;code&gt;f(n)=n&lt;/code&gt; then you could do something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.table db $00, $01, $02, $03 ... $ff&#xA;&#xA;ADC table,x&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But, otherwise, no, there is no built-in way to perform arithmetic between registers.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-01-23T22:55:10.240" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13448" PostTypeId="2" ParentId="13446" CreationDate="2020-01-23T23:40:26.630" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;In 68k I was used to being able to do things like add.l d0, d1 to add the value in d0 to d1. I've just started playing around with some 6502 development on the Atari 2600 for the first time, and it appears as though you can't add the value of the X or Y registers to the accumulator.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Think of it like the 68k's distinction between data and address registers. A is the generic data register, all data operations (*1) are done on A. X/Y are index registers with the only purpose to add an index to a direct or indirect address. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is the only way to add the value in X to write it out to memory with an stx and then perform a subsequent adc to add to the accumulator from that memory address?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;One obvious way is &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13447/6659&quot;&gt;using a table&lt;/a&gt; like Tommy already mentioned. Such a table can be used for many more programming tricks (*2). Except, on a VCS ROM is almost as rare as RAM. a 256 byte table occupies already 1/16th of the address space available (*3). Then again, space can be saved when the range of the value to be added is known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A special way to do operations on a 2600 is to use the stack, as it shares RAM with the zero page. Usually the content of the stack pointer is well known, thus a combination of PHA, TXA and ADC zp, using the known stack location will work as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course this depends a lot on how stack is used in your program. In general it is more appropriate to adept programming style to how the 6502 is designed/intended to be used - like with every CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502 is a special beast and 2600 programming a neat playground, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Except INC/DEC which has been added with the 65C02.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - For example by extending the table it can be used to add constants to index registers, like when walking a sprite table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - The address space for ROM is 4 KiB. While there are multiple pages possible, a table can only be used from code within the same ROM page. So the table either needs to be copied into each ROM page that uses it, or a page flip has to be done - which is for sure more expensive than a STX/ADC combination.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-01-23T23:40:26.630" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13449" PostTypeId="1" AcceptedAnswerId="13738" CreationDate="2020-01-24T05:19:30.693" Score="4" ViewCount="217" Body="&lt;p&gt;On the Apple IIe system, an &quot;auxiliary RAM&quot; card may be present which expands the built-in 64 kB RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When using an aux RAM card which has more than 64 kB, the auxiliary RAM bank in use can be switched by writing to an address in the C07X range. Some auxiliary RAM cards put the bank select register anywhere in the range C070-C07F. Other aux RAM cards, for example the Applied Engineering RAMWorks, only have the bank select register at C073.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most applications I have encountered use C073, but I have recently found an application, ProTERM 1.x, which I believe is using a different address in the C07X range. Moreover, at least one set of programs, the AE RAMWorks tools, refuse to work with aux cards which have the bank register at any C07X address, since a genuine RAMWorks only listens to C073.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the first aux card to feature more than 64 kB of RAM, and at what address was its bank select register located? How did the bank select register address standard develop from there? And out of all the Apple IIe software, what addresses were most commonly used by applications to switch aux ram banks?&lt;/p&gt;&#xA;" OwnerUserId="7486" LastEditorUserId="6659" LastEditDate="2020-01-24T10:12:08.983" LastActivityDate="2020-02-13T08:10:05.637" Title="Apple IIe auxiliary RAM bank select register address -- C073 or C07X?" Tags="&lt;apple-ii&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13450" PostTypeId="1" AcceptedAnswerId="13455" CreationDate="2020-01-24T09:11:21.103" Score="8" ViewCount="1270" Body="&lt;p&gt;I'm trying to find an early to mid 90s Macintosh game.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It was a side scrolling shooter in the style of R Type.&lt;/li&gt;&#xA;&lt;li&gt;You flew a spaceship that looked vaguely like the USS Enterprise from Star Trek, albeit with a mass of guns up front.&lt;/li&gt;&#xA;&lt;li&gt;You flew over a landscape that contained, among other things, civilian cities.&lt;/li&gt;&#xA;&lt;li&gt;You could shoot straight ahead and also drop bombs (I think?).&lt;/li&gt;&#xA;&lt;li&gt;The title screen showed a large image of the player ship.&lt;/li&gt;&#xA;&lt;li&gt;The overall tone was somewhat whimsical.&lt;/li&gt;&#xA;&lt;li&gt;It was likely a shareware title.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's been bugging me for years that I can't find any information on it.&lt;/p&gt;&#xA;" OwnerUserId="16061" LastActivityDate="2020-01-24T16:19:27.480" Title="Looking for a 90s Macintosh game" Tags="&lt;apple-macintosh&gt;&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13451" PostTypeId="2" ParentId="13449" CreationDate="2020-01-24T09:24:04.190" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Some auxiliary RAM cards put the bank select register anywhere in the range C070-C07F.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In general this interferes with analogue input reset since original II times. But on the IIe (and IIc) as well with IOU management (Double-HiRes), as they use $C07E/7F and $C077/78 (only IIc). $C074 was as well reserved by Applied Engineering for the Transwarp - after all, they did, AFAIK, come up with the idea to reuse paddle reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only RAM card diverging from $C073, I know, is the Legends E, which uses $C071. Due this it needed to patch for Apple Works.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Other aux RAM cards, for example the Applied Engineering RAMWorks, only have the bank select register at C073.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It was AE that did set this standard and other cards followed. With Apple Works using $C073 to access RAM past 128 KiB, any divergence would add inconvenience to IIe users.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Most applications I have encountered use C073, but I have recently found an application, ProTERM 1.x, which I believe is using a different address in the C07X range.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mind to share what you found? And sure it's about RAM?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Moreover, at least one set of programs, the AE RAMWorks tools, refuse to work with aux cards which have the bank register at any C07X address, since a genuine RAMWorks only listens to C073.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Seams reasonable. After all, why should they make their tool to work with other cards at all?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What was the first aux card to feature more than 64 kB of RAM,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The first was of course Saturn 128 for the Apple II. &lt;em&gt;(SCNR:))&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of AUX RAM cards for the IIe, it was AE's Memory Master IIe in 1984, with 128 KiB, allowing two pages of 64 KiB o be switched in. Later 256 KiB (4 pages) as well. This was 1985 followed by the RAMworks (I), starting a 256/512 KiB.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and at what address was its bank select register located?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;AE it did set the standard of $C073 as bank register.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How did the bank select register address standard develop from there? And out of all the Apple IIe software, what addresses were most commonly used by applications to switch aux ram banks?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;$C073 was common. There was no development beside increase in fitted RAM size (*1) and Apple implementing the use of $C073 with the IIc ROM 3 board - after the huge success AE's Z-Ram extension had.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1- 16 Mi is a quite high bar to pass before needing more than one byte to switch. IIRC the RAMworks II maxed out at 5 MiB&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-24T10:00:48.743" LastActivityDate="2020-01-24T10:00:48.743" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13452" PostTypeId="1" AcceptedAnswerId="13460" CreationDate="2020-01-24T09:54:39.703" Score="8" ViewCount="378" Body="&lt;p&gt;I always thought than in a memory-expanded Apple IIc fitted with firmware version 3 or 4 and an Apple-built memory expansion, the extra memory above and beyond the first 128K is connected in a way that's indentical to the way the so called &quot;Slinky&quot; Apple IIe memory expansion card for a II+/IIe works. I.e. there is no direct CPU access to the memory on the card; rather it uses DMA to transfer data between the 128K main/aux memory and the up to 1M expansion card memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13449/apple-iie-auxiliary-ram-bank-select-register-address-c073-or-c07x&quot;&gt;another question&lt;/a&gt; on this site stated that the Apple IIc uses the register $C073 for switching between several aux memory banks, like the Applied Engineering RamWorks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So which is right - is Expansion Memory in a memory expanded IIc, using only Apple-Supplied hardware, addressed by the CPU like a &quot;Slinky&quot; card (write stuff to registers, wait for DMA to finish, see data from the card magically appear in main memory) or like a AE Ramworks (write stuff to register, instantly see aux memory go away and stuff from the card appear in its place)?&lt;/p&gt;&#xA;" OwnerUserId="16057" LastEditorUserId="16057" LastEditDate="2020-01-24T12:40:38.257" LastActivityDate="2020-01-24T22:57:09.600" Title="In an Apple IIc, how is memory beyond 128K addressed?" Tags="&lt;apple-ii&gt;&lt;memory&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13453" PostTypeId="2" ParentId="13452" CreationDate="2020-01-24T10:11:15.140" Score="2" Body="&lt;p&gt;The official way to access either RAM is due the so called 'Protocol Converter'. A call convention, introduced with the IIc disk port. The IIc disk port was the first enabled to hanabled to handle multiple peripherals over one bus. Protocol Converter interface is much like Prodos' MLI and allows to access block or character devices in an abstract way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time RAM cards/expansions were as well fitted with Protocol Converter drivers in ROM. Examples are Apple's &lt;em&gt;The Apple II Memory Expansion&lt;/em&gt; or &lt;em&gt;AE's RAMfactor&lt;/em&gt; and of course, as first implementation, with the Apple IIc ROM3 board. Here the memory driver replaced the (never really used) Apple Talk support and operated from a virtual slot 4.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-24T10:54:28.480" LastActivityDate="2020-01-24T10:54:28.480" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13454" PostTypeId="2" ParentId="13442" CreationDate="2020-01-24T10:44:13.720" Score="5" Body="&lt;p&gt;Two data points from North Rhine-Westphalia: About 1980 our small Gymnasium had a demo setup of original IBM PCs (with CGA/EGA graphics?) for some weeks, but then settled for a bunch of Apple II clones, maybe 16 devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A neighboring Gymnasium had a Dietz minicomputer with four user terminals (plus one management terminal) at the same time, for several years.¹ &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹ I took a computer course using that mini, and I fondly remember programming a fake user prompt that would run on another terminal and answer all input with strange error messages, driving the poor soul in front of it crazy. Those were good times.&lt;/p&gt;&#xA;" OwnerUserId="4590" LastActivityDate="2020-01-24T10:44:13.720" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13455" PostTypeId="2" ParentId="13450" CreationDate="2020-01-24T12:14:06.763" Score="18" Body="&lt;p&gt;That is a vague description. But the Enterprise (saucer section?) and massive guns in front do ring a bell:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/V0ndr.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V0ndr.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/p3DOJ.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/p3DOJ.gif&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uvdLG.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uvdLG.gif&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Side-scroller; fly a spaceship on bombing raids over enemy territory, dodging and/or shooting enemy ships and collecting power-ups; land (carefully) on your own turf; repeat. Graphics and sound quite good, but silly. The most fun, when you can manage it, is cruising along with auto-strafe and invincibility.&lt;/p&gt;&#xA;&lt;p&gt;Awards: MacWorld Game Hall of Fame, 5 Mice MacUser Magazine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's just a guess, but do you think of &lt;a href=&quot;https://en.wikipedia.org/wiki/Sky_Shadow&quot; rel=&quot;noreferrer&quot;&gt;Sky Shadow?&lt;/a&gt;. Like on &lt;a href=&quot;https://www.macintoshrepository.org/4842-sky-shadow&quot; rel=&quot;noreferrer&quot;&gt;Macintosh Repository&lt;/a&gt; or &lt;a href=&quot;https://macintoshgarden.org/games/sky-shadow&quot; rel=&quot;noreferrer&quot;&gt;Macintosh Garden&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6802" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-24T16:19:27.480" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13456" PostTypeId="2" ParentId="13442" CreationDate="2020-01-24T12:44:00.707" Score="4" Body="&lt;p&gt;In the late 80's we had Apple IIs for 6502 assembler and those slightly incompatible Wang DOS machines with amber monitors for Turbo Pascal and SPS programming. That was at some sort of high school with engineering focus in northern West Germany.&lt;/p&gt;&#xA;" OwnerUserId="16066" LastEditorUserId="16066" LastEditDate="2020-01-27T08:18:29.140" LastActivityDate="2020-01-27T08:18:29.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13457" PostTypeId="2" ParentId="13442" CreationDate="2020-01-24T13:07:32.690" Score="5" Body="&lt;p&gt;In 1983 my school in Hamburg purchased one expensive &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_PET&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore PET&lt;/a&gt; programmable in BASIC and i never saw any use in that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1985 my school in Bargteheide filled an entire classroom with &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_128&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore C128s&lt;/a&gt; programmable in &lt;a href=&quot;https://en.wikipedia.org/wiki/COMAL&quot; rel=&quot;nofollow noreferrer&quot;&gt;COMAL&lt;/a&gt; and let us students code on them and let us students teach a course to other students.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Me and my hacker friends however preferred the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sharp_MZ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sharp MZ&lt;/a&gt; computers delivered with &lt;a href=&quot;https://en.wikipedia.org/wiki/Wiring_diagram&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiring&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zilog Z80&lt;/a&gt; opcode diagrams and the entire &lt;a href=&quot;https://en.wikipedia.org/wiki/EPROM&quot; rel=&quot;nofollow noreferrer&quot;&gt;EPROM&lt;/a&gt; .asm software source code in its manual, and the Clean64KComputer &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASIC&lt;/a&gt; interpreter and &lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M&quot; rel=&quot;nofollow noreferrer&quot;&gt;CP/M&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/BIOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;BIOS&lt;/a&gt;+&lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M#BDOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;BDOS&lt;/a&gt; software source codes available for purchase, where CP/M was most easily programmed in &lt;a href=&quot;https://en.wikipedia.org/wiki/Turbo_Pascal&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turbo Pascal&lt;/a&gt; predating &lt;a href=&quot;https://en.wikipedia.org/wiki/Modula-2#Turbo_Modula-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turbo Modula-2&lt;/a&gt;.  Cyberpunk Axel from Duvenstedt even bootstrapped his &lt;a href=&quot;https://bellard.org/tcc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;tiny&lt;/a&gt; own &lt;a href=&quot;https://en.wikipedia.org/wiki/C_(programming_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;C&lt;/a&gt; compiler and 16bit &lt;a href=&quot;https://en.wikipedia.org/wiki/Unix&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unix&lt;/a&gt; base, if i remember correctly!  The Z80 was also popular in East Germany's &lt;a href=&quot;https://de.wikipedia.org/wiki/PC_1715&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotron ESER PC 1715&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the university in Kiel used &lt;a href=&quot;https://en.wikipedia.org/wiki/VAXstation&quot; rel=&quot;nofollow noreferrer&quot;&gt;VAXen&lt;/a&gt; in 1988, my university in Berlin ran &lt;a href=&quot;https://en.wikipedia.org/wiki/SPARCstation_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;SPARCstations&lt;/a&gt; in 1989 already. &lt;/p&gt;&#xA;" OwnerUserId="16065" LastEditorUserId="16065" LastEditDate="2020-01-25T20:40:51.490" LastActivityDate="2020-01-25T20:40:51.490" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13458" PostTypeId="1" AcceptedAnswerId="13459" CreationDate="2020-01-24T21:05:12.160" Score="0" ViewCount="212" Body="&lt;p&gt;Commodore – The Inside Story, by David Pleasance, who was a manager in Commodore UK. Sounds like a very interesting book, supposedly available, but when I look on Amazon, hoping in particular for the Kindle edition (which hopefully would be more reasonably priced than the hardback), it claims to only have the book in Italian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's up with this? Is there a way to buy this book, ideally in electronic form?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-24T21:08:58.443" Title="Commodore – The Inside Story" Tags="&lt;history&gt;&lt;commodore&gt;&lt;books&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2020-01-25T18:05:01.090" ContentLicense="CC BY-SA 4.0" />
  <row Id="13459" PostTypeId="2" ParentId="13458" CreationDate="2020-01-24T21:08:58.443" Score="6" Body="&lt;p&gt;It’s available directly from &lt;a href=&quot;https://downtimepublishing.com/&quot; rel=&quot;noreferrer&quot;&gt;the publisher&lt;/a&gt; (the author’s own publishing company), including &lt;a href=&quot;https://downtimepublishing.com/products/e-book-pdf&quot; rel=&quot;noreferrer&quot;&gt;in electronic format&lt;/a&gt; (e-pub and Mobi).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-01-24T21:08:58.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13460" PostTypeId="2" ParentId="13452" CreationDate="2020-01-24T22:57:09.600" Score="4" Body="&lt;p&gt;Per &lt;a href=&quot;https://apple2online.com/web_documents/apple_iic_rom_versions.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIc ROM Versions&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Memory Expansion IIc (ROM version 3)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;... The new motherboard added a 34-pin socket for plugging in memory cards irectly, which allowed for the addressing of up to 1 megabyte of memory using Slinky-type memory cards. ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So you're correct that the expansion cards are Slinky-style.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following up on that, I also found &lt;a href=&quot;https://apple2online.com/web_documents/apple_iic_technical_notes.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;a collection of Apple IIc Technical Notes&lt;/a&gt; which includes &lt;em&gt;#5: Memory Expansion on the Apple IIc&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Beginning with the third Apple IIc, which was announced in September 1986, all new IIc models differ significantly from their predecessors. The most notable of these differences is the addition of a memory expansion capability. The memory expansion card for the IIc is functionally identical to the card for the IIe ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Looking further around, I discovered documentation on &lt;a href=&quot;http://apple2.guidero.us/doku.php/mg_notes/apple_iic/iic_bugs&quot; rel=&quot;nofollow noreferrer&quot;&gt;a IIc firmware bug in Slinky memory size detection&lt;/a&gt; which conveniently has a partial disassembly, showing Slinky-esque address and data registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I think your initial belief was correct and the auxiliary memory cards being references in the other answer are a distinct type of memory expansion.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-01-24T22:57:09.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13461" PostTypeId="1" AcceptedAnswerId="13462" CreationDate="2020-01-25T00:25:36.237" Score="8" ViewCount="235" Body="&lt;p&gt;How much control over the TRS-80 Model III's floppy drive controller can be effected via relatively simple commands, typed into its built-in Cassette BASIC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that general usage of the drives requires booting into Diskette BASIC. But the &quot;Test Your Drives First&quot; section (&lt;a href=&quot;http://www.trs-80.com/wordpress/diskette-request-form/&quot; rel=&quot;noreferrer&quot;&gt;mirror&lt;/a&gt;) offers this &quot;magic&quot; command to turn the drives on:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;OUT 244,1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The second number determines which drive turns on, 1-indexed. It looks like Ira Goldklang got the tip in &lt;a href=&quot;https://groups.google.com/forum/#!msg/comp.sys.tandy/xHMgwvMDWuA/sQw4bt6Wh-AJ&quot; rel=&quot;noreferrer&quot;&gt;this thread&lt;/a&gt; but no further details provided there either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm left wondering what exactly that command does? Are there similar command(s) could I use to step to a particular track, and then access data coming off the read head?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pointers to any official reference or later explanations for communicating with the floppy drive controller would also be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I am troubleshooting a a Model III that won't boot from disk. Using another controller, I have verified that the drive is working. My primary goal at this point is to determine whether the floppy drive controller itself is fully functional.)&lt;/p&gt;&#xA;" OwnerUserId="13904" LastEditorUserId="6659" LastEditDate="2020-01-25T03:23:11.030" LastActivityDate="2020-04-09T17:06:20.957" Title="How much control of TRS-80 Model III disk drives was possible from its Cassette (ROM) BASIC?" Tags="&lt;basic&gt;&lt;trs-80&gt;&lt;floppy-drive&gt;&lt;trs-80-model-iii&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13462" PostTypeId="2" ParentId="13461" CreationDate="2020-01-25T03:04:53.830" Score="7" Body="&lt;p&gt;ROM BASIC does not support any handling of floppies at all, but System ROM allows boot thru it's function table. Of course one could handle the disk controller 'manually' from BASIC - which is what the example does.&lt;/p&gt;&#xA;&lt;h3&gt;Routines&lt;/h3&gt;&#xA;&lt;p&gt;(All following values are according to &lt;a href=&quot;http://www.trs-80.org/trs-80-rom-routines-documented/&quot; rel=&quot;noreferrer&quot;&gt;TRS‑80 ROM Routines Documented&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;The System ROM (3000h-37FFh) only supports booting a disk. There are eventually two entry points for boot in its function table:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Cold Start at 3015h, invoked by RST 0, which after some initialization continues into to warm boot.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Warm Boot at 3012h, invoked from entry point at 000Dh, which does the job of positioning and loading from track 0.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So calling warm boot from BASIC with &lt;code&gt;X=USR(12306)&lt;/code&gt; should make the first drive spin, retract to track zero and try to load from there - much like pressing reset.&lt;/p&gt;&#xA;&lt;h2&gt;Hardware Access&lt;/h2&gt;&#xA;&lt;p&gt;The Model III uses a standard &lt;a href=&quot;https://en.wikipedia.org/wiki/Western_Digital_FD1771&quot; rel=&quot;noreferrer&quot;&gt;Western Digital FD1793 type&lt;/a&gt; controller. It's four registers are accessible at ports F0h..F3h (240..243), see the &lt;a href=&quot;http://bitsavers.org/components/westernDigital/FD179X-02_Data_Sheet_May1980.pdf&quot; rel=&quot;noreferrer&quot;&gt;data sheet&lt;/a&gt; for details.&lt;/p&gt;&#xA;&lt;p&gt;In addition a register at F4h (244) selects density, operation modes, drive and side. The later is done with the four lower bits, which is what your 'secret code' uses. Drives 0..3 are selected with values 1/2/4/8 (use only these, don't activate more than one drive at the same time).&lt;/p&gt;&#xA;&lt;p&gt;Since the drive may issue an NMI for servicing, the interrupt control register at E4h (228) may als be used (although, I think not really from inside a BASIC program)&lt;/p&gt;&#xA;&lt;p&gt;There is a &lt;a href=&quot;http://www.trs-80.com/wordpress/zaps-patches-pokes-tips/ports-and-i-o-devices/#WD1793&quot; rel=&quot;noreferrer&quot;&gt;short description of the ports&lt;/a&gt; on Ira Goldklang's TRS80 site.&lt;/p&gt;&#xA;&lt;h2&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;Selecting a drive is done by F4h, and the drive should spin up as soon as it's selected, as well as stoping when deselected (&lt;code&gt;OUT 244,0&lt;/code&gt;). Reseting, returning to track zero as well as stepping should be possible using BASIC OUT commands. Please refer to the data sheet for further details.&lt;/p&gt;&#xA;&lt;p&gt;Except for selecting multiple drives, there isn't much to be damaged (except for a any disk  data of course), so go ahead and learn to handle a classic WDC 177x FDC :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-26T10:20:53.413" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13463" PostTypeId="1" AcceptedAnswerId="13464" CreationDate="2020-01-25T04:47:08.837" Score="4" ViewCount="268" Body="&lt;p&gt;If the NMI line goes from high to low when the RDY is low, is the NMI  detected, so that when RDY goes high, NMI is performed ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or is the NMI discarded when it occurs when RDY is low ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(In case of NMI line goes high again before RDY become high)&lt;/p&gt;&#xA;" OwnerUserId="16008" LastActivityDate="2020-02-10T00:56:47.220" Title="6502 interrupts when RDY is low" Tags="&lt;6502&gt;&lt;interrupt&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13464" PostTypeId="2" ParentId="13463" CreationDate="2020-01-25T09:49:43.707" Score="4" Body="&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Yes, it will be detected and performed.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Lets look at the signals:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NMI&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;is edge triggered. As soon as a high/low edge comes, the NMI-FF will be set&lt;/li&gt;&#xA;&lt;li&gt;Retriggering requires NMI being high again before and during the rising edge of PHI2.&lt;/li&gt;&#xA;&lt;li&gt;NMI will not be triggered again unless a new edge comes along &lt;em&gt;after&lt;/em&gt; vector pull&lt;/li&gt;&#xA;&lt;li&gt;NMI reaction may be delayed up to two cycles&lt;/li&gt;&#xA;&lt;li&gt;In any case the actual instruction will always be finished first&lt;/li&gt;&#xA;&lt;li&gt;NMI during IRQ handling (before first instruction of IRQ routine) will interrupt after the first instructon is finished.&lt;/li&gt;&#xA;&lt;li&gt;Interrupts are always delayed by one instruction when issued during the last cycle of a branch taken within the same page.&lt;/li&gt;&#xA;&lt;li&gt;NMI is not delayed during a CLI/SEI/PLP (like INT is)&lt;/li&gt;&#xA;&lt;li&gt;NMI (or INT) during a BRK will skip execution of the BRK handling&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;RDY&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RDY will only be (secure) detected safe when pulled during pase 1&lt;/li&gt;&#xA;&lt;li&gt;RDY will not take effect during a write cycle (NMOS only)&lt;/li&gt;&#xA;&lt;li&gt;RDY does not affect any other operation beside repeating the actual (memory) cycle&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In combination this means:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;NMI detection will happen during RDY&lt;/li&gt;&#xA;&lt;li&gt;NMI will start as usual after the actual instruction is finished&lt;/li&gt;&#xA;&lt;li&gt;Having RDY applied for one or more times during the actual instruction will not change NMI operation&lt;/li&gt;&#xA;&lt;li&gt;Any length of RDY application will not change NMI operation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Bottom Line: &lt;strong&gt;It will work as expected - but there are still many issues to screw up NMI timing&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-10T00:56:47.220" LastActivityDate="2020-02-10T00:56:47.220" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13465" PostTypeId="2" ParentId="13463" CreationDate="2020-01-25T09:50:22.870" Score="1" Body="&lt;p&gt;In old 6502 block diagrams, the three hardware interrupts &lt;code&gt;/RST /IRQ /NMI&lt;/code&gt; go into an &quot;interrupt logic&quot; block which feeds directly into the instruction decoder, and are not directly influenced by &lt;code&gt;RDY&lt;/code&gt; or even &lt;code&gt;Phi2&lt;/code&gt;.  This tells me that even on original hardware, the edge-trigger circuit for &lt;code&gt;/NMI&lt;/code&gt; is asynchronous and that an edge will be detected at any time.  This is what you'd expect of an interrupt signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the current-production WDC W65C02S, you can make a stronger assertion, because &lt;code&gt;RDY&lt;/code&gt; is physically pulled low by the CPU when a &lt;code&gt;WAI&lt;/code&gt; instruction is executed, and is only allowed to go high again when an interrupt is received (any of the three).  Thus &lt;code&gt;/NMI&lt;/code&gt; must be detected even when &lt;code&gt;RDY&lt;/code&gt; is low.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-01-25T09:50:22.870" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13466" PostTypeId="1" AcceptedAnswerId="13467" CreationDate="2020-01-25T11:54:09.857" Score="7" ViewCount="992" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Donkey_Kong_(video_game)&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Donkey_Kong_(video_game)&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Donkey Kong hardware has the memory capacity for displaying 128 foreground sprites at 16x16 pixels each and 256 background tiles at 8x8 pixels each. Mario and all moving objects use single sprites, the taller Pauline uses two sprites, and the larger Donkey Kong uses six sprites.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This was a game released in 1981. By contrast, the Commodore 64, released a year later, spent most of the area of a fairly large complex video chip, providing just 8 sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Admittedly that might not be 128 sprites &lt;em&gt;per scan line&lt;/em&gt;, but judging by the size of the vertical comparator block on the VIC-II, there are significant costs associated with total number of sprites, even if not on the same scan line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Admittedly an arcade machine can afford a larger hardware budget than a home computer, but sheer memory bandwidth is an important limiting factor on number of sprites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how did this machine do it?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-25T16:14:11.413" Title="How did the Donkey Kong arcade hardware provide 128 sprites?" Tags="&lt;hardware&gt;&lt;arcade&gt;&lt;sprite&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13467" PostTypeId="2" ParentId="13466" CreationDate="2020-01-25T12:50:06.610" Score="7" Body="&lt;p&gt;To start with, the citation is a bit misleading. The logic didn't handle 128 sprites and 256 tiles at a time, but its ROM could hold as many different ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The arcade board does not feature a free programmable sprite engine. There is a fixed sets (128) of direct addressable graphics in 8 KiB of ROM used (128 x 32 x 16). A set of shift registers, feed by the object ROM provides the object (sprite) data to be superimposed on (non shifted) tiles from another set (256)  of ROMs (256 x 8 x 16 = 4 KiB). Either is indexed via a 1 KiB RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole &lt;a href=&quot;https://www.arcade-museum.com/manuals-videogames/D/donkey-kong-3.pdf&quot; rel=&quot;noreferrer&quot;&gt;design&lt;/a&gt; is quite simple. Since it's a fixed logic with all data embedded, no loading is needed. Further no priority logic for overlapping is present (Overlapping, where neccessary, is handled by software thru page flipping) and no collision detection either (as well done in software).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a complete different technology than what is used in any sprite units like from a VIC or 9918 or alike. All sprite data is 'on board' (as ROM), and likewise the display RAM, thus zero memory bandwidth (*1) is needed to display them.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - At least not in the sense a CPU RAM based system with shared access would need to be calculated. Of course do all parts of the controller have certain bandwidths and use them.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-25T16:14:11.413" LastActivityDate="2020-01-25T16:14:11.413" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13468" PostTypeId="1" CreationDate="2020-01-25T14:43:32.837" Score="2" ViewCount="462" Body="&lt;p&gt;I am trying to boot 386 laptop from a CF card. I've prepared image by installing DOS 6.22 in VirtualBox, and then burning image to a CF card.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Image boots just fine in VirtualBox.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CF card with the image boots just fine in newer Toshiba Libretto&#xA;laptop (Pentium-era).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;386 laptop is able to read MBR, but displays the following error message &quot;Missing operating system&quot;. I know it loads MBR from CF-card as I've modified message in MBR record on CF card, and it did showed altered message.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Tried different CF cards (256Mb, 4Gb - all with small primary partitions of 30-200Mb), and SD-&gt;IDE adapters. Same result everywhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions how to make it boot?&lt;/p&gt;&#xA;" OwnerUserId="16073" LastActivityDate="2020-04-15T07:26:36.303" Title="386 laptop: reads MBR, cannot boot DOS 6.22" Tags="&lt;boot&gt;&lt;80386&gt;&lt;ide&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13469" PostTypeId="1" AcceptedAnswerId="13470" CreationDate="2020-01-25T16:17:54.037" Score="2" ViewCount="170" Body="&lt;p&gt;I'm looking for a game I played in the early 90's on a Tandy computer. Here are the facts I remember by decreasing order of certainty :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The beginning of the game is the hero arriving in an hang glider&lt;/li&gt;&#xA;&lt;li&gt;The game is viewed from the side&lt;/li&gt;&#xA;&lt;li&gt;It was played on a Tandy, most likely before year 1990&lt;/li&gt;&#xA;&lt;li&gt;The character is some kind of Ninja infiltrating a base, the game is a mix between adventure and action&lt;/li&gt;&#xA;&lt;li&gt;The character can throw ninja stars&lt;/li&gt;&#xA;&lt;li&gt;The game has very few colors (Red and green come to mind, I doubt there were more than 4 colors, maybe 8)&lt;/li&gt;&#xA;&lt;li&gt;There is some interaction with the environment : some objects can be picked up, and some tv screens can be interacted ?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Despite having basically played only this game in my childhood, I was unable to find it back in all the anthologies I could stumble upon online.&lt;/p&gt;&#xA;" OwnerUserId="16074" LastActivityDate="2020-01-25T17:02:22.307" Title="Looking for a Ninja PC Game where hero arrives in hang glider" Tags="&lt;gaming&gt;&lt;identify-this-game&gt;&lt;tandy-1000&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13470" PostTypeId="2" ParentId="13469" CreationDate="2020-01-25T17:02:22.307" Score="5" Body="&lt;p&gt;This sounds a lot like &lt;a href=&quot;https://youtu.be/EzHaZGF3C5A&quot; rel=&quot;noreferrer&quot;&gt;Saboteur II&lt;/a&gt;. It starts with the character riding a glider, has probably CGA graphics (I had only Hercules adapter, but probably used emucga with this), and seems to be released 1987. I remember it being fairly difficult to play, so never got too far in this game. Maybe because of the graphics emulation too.&lt;/p&gt;&#xA;" OwnerUserId="4378" LastActivityDate="2020-01-25T17:02:22.307" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13471" PostTypeId="1" AcceptedAnswerId="13472" CreationDate="2020-01-25T13:51:09.383" Score="-1" ViewCount="303" Body="&lt;p&gt;I am trying to boot 386 laptop from a CF card. &#xA;I've prepared image by installing DOS 6.22 in VirtualBox, and then burning image to a CF card. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Image boots just fine in VirtualBox&lt;/li&gt;&#xA;&lt;li&gt;CF card with the image boots just fine in newer Toshiba Libretto laptop (Pentium-era). &lt;/li&gt;&#xA;&lt;li&gt;386 laptop is able to read MBR, but displays the following error message &quot;Missing operating system&quot;. I know it loads from CF-card, I've modified message in MBR record, and it did showed altered message. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Tried different CF cards (256Mb, 4Gb - all with small primary partitions of 30-200Mb), and SD-&gt;IDE adapters. Same result everywhere. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions how to make it boot?&lt;/p&gt;&#xA;" OwnerUserId="16073" OwnerDisplayName="BarsMonster" LastActivityDate="2020-01-25T17:35:13.367" Title="386 PC: reads MBR, cannot boot DOS 6.22" Tags="&lt;boot&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2020-01-25T18:04:26.013" ContentLicense="CC BY-SA 4.0" />
  <row Id="13472" PostTypeId="2" ParentId="13471" CreationDate="2020-01-25T15:05:29.200" Score="3" Body="&lt;p&gt;I think you did a good job of providing relevant details.  For instance, the fact that the same image works on a newer machine does indicate that the critical &quot;system files&quot; (IO.SYS and MSDOS.SYS and perhaps the command interpreter, typically COMMAND.COM) may all be in the right locations on the disk (referring to disk sectors, not just filesystem hierarchy).  However, I also think we may need even more details to fully resolve this.  So, until more are provided, this answer needs to be just a stab in the dark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be aware of some size limitations.  DOS 6.22 used a signed integer which typically limited FAT16 partitions to 2GB (unlike some Win NT variations which could support 4GB on FAT16).  There are a number of other limits that have affected hard drive space, like a limit of around 512 MB (or 528 million bytes) as noted in these resources:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.win.tue.nl/~aeb/linux/Large-Disk-4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.win.tue.nl/~aeb/linux/Large-Disk-4.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://web.inter.nl.net/hcc/J.Steunebrink/bioslim.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://web.inter.nl.net/hcc/J.Steunebrink/bioslim.htm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.tldp.org/HOWTO/html_single/Large-Disk-HOWTO/#s4&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.tldp.org/HOWTO/html_single/Large-Disk-HOWTO/#s4&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;While the code may be loading from the MBR, the code on the MBR may be interpreted differently.  The code on the MBR may be relying on the BIOS to read from the disk, and there may be different BIOS capabilities.  The &quot;Large Disk&quot; article I mentioned above may discuss some relative limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, I remember hitting an 8GB limit on a 486 desktop.  Your 386 laptop may be older than that, and the solutions would be to upgrade the BIOS (which typically involved replacing a chip, which might not be attached in an easily removable form) or figure out how to use older equipment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest that your DOS installation be on a partition using Partition Type/ID 6, not Partition Type/ID E (0xE, 15).  6 will be compatible with more older BIOS versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: These suggestions are largely based on my knowledge and experience from physically full-sized hard drives.  I don't know what complexities get added with using a CompactFlash drive built into a laptop.  Systems much newer would often be limited to booting from a hard drive or a floppy drive, and trying to boot from a drive connected to a parallel port, or a USB port, might not work so well.  The ability to boot from some other sources, including a USB port, didn't get resolved until some BIOS updates after the Pentium chips were out.  I think that booting from a second hard drive may have been hit-or-miss.  So maybe your BIOS isn't as cooperative (even though it did find some code to start on the MBR).  Unplugging any other disk (like a hard drive) might actually be helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If none of the above helps, I suggest posting more details, like how big your partitions are, what partition types you're using, and whether you get similar results when trying another operating system (FreeDOS sounds like an interesting one to compare to).&lt;/p&gt;&#xA;" OwnerUserId="419" OwnerDisplayName="TOOGAM" LastEditorUserId="419" LastEditDate="2020-01-25T17:35:13.367" LastActivityDate="2020-01-25T17:35:13.367" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13473" PostTypeId="2" ParentId="13442" CreationDate="2020-01-25T17:53:39.703" Score="2" Body="&lt;p&gt;In the late seventies / early eighties my school in Bochum (North Rhine-Westphalia) first had a Wang 2200 BASIC computer that was both used for local basic programming and as a terminal to the communal data center (I didn't get to use that, though.) Later they installed two Apple II machines with UCSD Pascal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The school was part of a school trial project to integrate computer science into the curriculum, see &lt;a href=&quot;https://www.computerwoche.de/a/informatik-als-unterrichtsfach,1201674&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.computerwoche.de/a/informatik-als-unterrichtsfach,1201674&lt;/a&gt; (german.)&lt;/p&gt;&#xA;" OwnerUserId="16075" LastActivityDate="2020-01-25T17:53:39.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13474" PostTypeId="1" CreationDate="2020-01-25T18:01:00.183" Score="38" ViewCount="9824" Body="&lt;p&gt;Surprisingly many early arcade games, such as Pac-Man, Galaxian and Galaga, mounted their displays vertically, in portrait rather than landscape orientation. (From the perspective of the electronics, that means the displays were drawn sideways.) I'm curious as to why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe it was just an aesthetic judgment on the part of the designers, feeling they would look better that way, in which case fair enough, aesthetic judgments are what they are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But was there any technical factor that encouraged such orientation? Anything in the electronics, the mechanics of the monitor placement, the optics of its display in a vertical cabinet?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now that I think about it, Space Invaders (1978) seems to have been the first vertically oriented arcade game. One could argue that it was the first one where the action was on the vertical axis. But one could also argue that it was the first one to emerge in a world where the Atari 2600 (1977) already existed, and where 'how do we stop home consoles eating our lunch' was a potential consideration. No proof, just suggestive.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="7922" LastEditDate="2020-01-27T18:18:05.640" LastActivityDate="2020-01-28T22:06:55.480" Title="Why did early arcade games use vertical displays?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;display&gt;&lt;arcade&gt;" AnswerCount="6" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13475" PostTypeId="2" ParentId="13474" CreationDate="2020-01-25T18:15:09.737" Score="6" Body="&lt;p&gt;&lt;em&gt;This answer isn't backed up by facts or testimonies. It only reflects my personal thoughts&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main reason is probably that early games such as Space Invaders (and Galaxian, Galaga...) or Breakout have a gameplay where vertical resolution / room is more important. Objects (bullets, balls) are travelling vertically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the rest of games that could have been using landscape orientation (Pac-Man, Scramble) probably followed the general design that those early games set up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that Pong has a standard 4:3 screen, landscape (because the side-oriented action of the game didn't require a rotation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To &lt;em&gt;not&lt;/em&gt; answer the question from a technical point of view, someone in this &lt;a href=&quot;https://atariage.com/forums/topic/194732-why-did-early-arcade-games-have-vertical-screens/&quot; rel=&quot;noreferrer&quot;&gt;discussion&lt;/a&gt; also points out that if you want to multiplex sprites it's easier or more efficient with a vertical display. But the screens were just rotated 90 degrees. Once rotated, the scanlines were &lt;em&gt;vertical&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway given the sprite capabilities of those machines &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13466/how-did-the-donkey-kong-arcade-hardware-provide-128-sprites?rq=1&quot;&gt;was far more superior&lt;/a&gt; to the ones of home machines like Commodore, so it's wasn't going to be the reason (plus sprite flickering couldn't be tolerated on arcade machines)&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-01-25T19:44:31.187" LastActivityDate="2020-01-25T19:44:31.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13476" PostTypeId="2" ParentId="13474" CreationDate="2020-01-25T19:37:05.510" Score="20" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;(From the perspective of the electronics, that means the displays were drawn sideways.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not necessary. There is no inherent reason for drawing sideways. A video circuit can easy be made for either, as line width and number of lines can be defined either way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is especially true for early games, where electronics were rather special to type and so was mounting of screens - which usually was done locally anyway.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Maybe it was just an aesthetic judgment on the part of the designers, feeling they would look better that way, in which case fair enough, aesthetic judgments are what they are.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Isn't it always about aesthetics? Or in this case all about the game to be played? After all, when climbing up a gantry like in Donkey Kong, you want an upright scenery. Similar for shoot em ups, where more upright space means more room for aliens and their manoeuvres.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due the same reason other games, like Battlezone or Defender do benefit from landscape orientation, so their machines had screens mounted sideways. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same reasoning as why we use paper upright for writing but sideways for schematics.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But was there any technical factor that encouraged such orientation?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Anything in the electronics, the mechanics of the monitor placement, the optics of its display in a vertical cabinet?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Neither electronics nor mechanics care for orientation. A tube can be mounted in any orientation. Similar a the beam can be moved to any location in any sequence - thus not even picture orientation and screen orientation need to be aligned. Of course it does make sense to format and place a picture in a way to use maximum screen size.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The real question is rather, why today's run almost exclusive sideways?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer here is due the way TV was set up. Game consoles and later home computers had to go along to use this resource. The Vectrex, bringing its own screen, is a great example that without the need to fit a TV an upright screen might have be more desirable for games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It started as well a feedback loop. While vertical scrollers worked great on arcade machines with upright screens, they mostly sucked on landscape. Here side scrollers like Sonic, simply showed a better utilization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zaxxon is kind of an interesting hybrid. It combines the forward dynamic of a vertical scroller with the real estate of landscape mode. I find it as well notable that there was a whole generation of isometric games, quite often from UK developers, doing alike.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;By why as well with dedicated computer screens?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simple answer: Price. For professional use it's mandatory to have at least 60, better 80 characters per line. Having more lines is great, but highest priority is having a full line displayed at once without scrolling or warp.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware wise this could easy be reached, already early on, in portrait orientation. But to display the text in similar size, an upright tube needs to be larger than one used sideways. For example a 12 inch screen (4:3) in Landscape offers about 20 cm per line, which is roughly like on an A4 sheet. To do the same in portrait, it needs a 16 inch tube. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Larger means the tube itself is a expensive part. Any resulting monitor was, despite having otherwise the very same parts, more expensive. And by now similar software adaption as with video games happened. Modern desktops are adapted to sideways screens (*1). So even with most modern screens being able to swing in either operation sideways will prevail (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while the result of having sideways screens as default is the same, evolution converged due different reasons. Personally. I still feel nostalgia for the Star systems with their huge upright screens.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I'd say even a reason why PocketPC failed early on, as upright phone screens just need a different UI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Then again, with 30&quot; 4k screen sizes reached today, it's more akin to human nature to turn the head to access more screen space than up and down - likewise mouse are more easy sweeped sidways. So I guess even if we had lived in a socialist society making money not a reasoning, we would by now as well reach a time with screens becoming ever wider.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-01-25T19:37:05.510" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13477" PostTypeId="2" ParentId="13474" CreationDate="2020-01-25T19:56:41.507" Score="60" Body="&lt;p&gt;Having the display vertical reduces the width of the cabinet. This means that a game machine can be fitted into a smaller space in a pub/bar, or in an amusement arcade where machines are in rows you can get more machines (potentially a third more) into the same space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One-third more machines means one-third more revenue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The orientation may also have been influenced by electro-mechanical slot machines. They tend to be high and narrow to get as large wheels as possible inside the casing (and probably for similar reasons). &lt;/p&gt;&#xA;" OwnerUserId="12058" LastActivityDate="2020-01-25T19:56:41.507" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13478" PostTypeId="2" ParentId="13468" CreationDate="2020-01-25T21:42:58.920" Score="5" Body="&lt;p&gt;It looks I got lucky, otherwise it would have been a long road. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently this laptop has a ROM-DOS on board in the socket. Due to bad contact it was not detected at startup. After I reinserted flash chip into the socket, it detected it and booted from ROM to DOS 3.3. It only had FDISK among useful tools there, but that was enough. It appeared, that BIOS is unable to recognize custom HDDs configuration. There were 47 types pre-configured and that's it (no information on what each of these 47 HDDs means). One can figure out meaning only when you're booted and can run something like fdisk. The largest preconfigured one was #47, 61Mb HDD. I selected it, and formatted CF card using this old FDISK on ROM-disk. After that I upgraded CF image to DOS 6.22 in VirtualBox and flashed back. It all worked. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in a nutshell - partition on CF should have had exactly the size (or smaller) as preset of HDD in BIOS. There were no way to figure out preset configuration when you're not booted. So partition had to be 61Mb or smaller for selection #47.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both 256Mb and 4Gb CF cards works this way, with single 61Mb partition. Even when DOS 6.22 is loaded, it does not allow to create extended partitions in the remaining space of the CF. Probably some BIOS mod/driver is needed to override HDD handling. Anyways, 61Mb is good enough for now. If anyone is aware of such driver to override HDD access after DOS is loaded - please let me know in the comments. &lt;/p&gt;&#xA;" OwnerUserId="16073" LastActivityDate="2020-01-25T21:42:58.920" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13479" PostTypeId="1" AcceptedAnswerId="13487" CreationDate="2020-01-26T05:58:21.483" Score="1" ViewCount="1012" Body="&lt;p&gt;Although I seriously code with computer languages in general since 2010 and as an amateur programmer with programming languages in particular since 2015 (primarily Bash and JavaScript imperative scripts) and codes I wrote are scattered through my Stack Exchange accounts, &lt;a href=&quot;https://codereview.stackexchange.com/users/125391/johndoea&quot;&gt;as in my Code Review SE account&lt;/a&gt;,&lt;br&gt;&#xA;I think I still misunderstand what a &lt;strong&gt;Callback&lt;/strong&gt; is;&lt;br&gt;&#xA;I feel that the term itself might be misleading, as I understand that callback functions doesn't &quot;call back&quot; anything, but rather &quot;called back&quot; as a reaction to a condition (event).&lt;br&gt;&#xA;I understand the alternative term &lt;strong&gt;Callafter&lt;/strong&gt; as significantly controversial between programmers, so I stay with &quot;Callback&quot;;&lt;br&gt;&#xA;Any Stack Exchange session I tried to read about &quot;what is a Callback?&quot; contained answers that I either recognized as contradicting or controversial by other programmers commenting in comments, or I just didn't recognize something clear from an answer I have read.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;My question&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Because the particular examples I read of this concept in Bash and JavaScript are not remembered to me as clear, I ask:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What was the first introduction of callback concept of programming?&lt;/strong&gt;&lt;br&gt;&#xA;An example for a first definition of the concept and a defined problem it was aimed to solve, might be helpful.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Update (02/02/20)&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;From what I did understood from generally all answers, the term &quot;callback&quot; is always context dependent, so it could have &lt;strong&gt;essentially&lt;/strong&gt; different definitions inside both computer science and programming, but I might understand wrong.&lt;/p&gt;&#xA;" OwnerDisplayName="user13751" LastEditorDisplayName="user13751" LastEditDate="2020-02-02T09:11:48.303" LastActivityDate="2020-02-05T00:28:13.520" Title="What was the first introduction of callback concept of programming?" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13480" PostTypeId="1" AcceptedAnswerId="13483" CreationDate="2020-01-26T07:54:43.030" Score="11" ViewCount="4877" Body="&lt;p&gt;Classic RISC CPUs like ARM and MIPS basically offer the trade-off: simple instruction set, but instructions execute in one cycle for good overall performance. (It gets more complicated in later times, but I'm talking about seventies and eighties technology.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But e.g. the 6502 is in many ways quite simple, yet takes a minimum of two cycles per instruction. I'm guessing that could have been one cycle for the simplest instructions, but only by making the chip bigger, and low cost was the primary objective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which leads me to conjecture that a simple instruction set doesn't automatically get you one instruction per cycle; maybe the classic RISC CPUs took the transistors saved on complex instructions, and spent them instead on things like full-width ALUs and extra pipeline stages, or whatever ways there are to make a CPU run faster, and that's why they execute many instructions in one cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which would seem to leave a niche for a RISC CPU that has a simple instruction set, fixed format and load/store, that executes most instructions in two cycles and is extremely cheap. If such existed, that would seem to be evidence for my conjecture; if not, then maybe I am misunderstanding the trade-offs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So did any such CPU ever exist?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-04-30T20:18:07.807" Title="Did any RISC CPU ever take more than one clock cycle per instruction?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;cpu&gt;&lt;performance&gt;" AnswerCount="6" CommentCount="21" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13481" PostTypeId="2" ParentId="13479" CreationDate="2020-01-26T08:45:56.823" Score="5" Body="&lt;p&gt;&amp;quot;Callbacks&amp;quot; could be considered a special, simplified case of&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Continuation-passing_style&quot; rel=&quot;noreferrer&quot;&gt;continuation-passing style&lt;/a&gt;. The first formal description of&#xA;this in an implemented language that I'm aware of is in &lt;a href=&quot;https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.128.80&quot; rel=&quot;noreferrer&quot;&gt;MIT AI Memo&#xA;349&lt;/a&gt;, &amp;quot;Scheme: An Interpreter for Extended Lambda Calculus,&amp;quot; from&#xA;1975. Generalized continuations run the risk of making your head&#xA;explode even if you do understand callbacks very well, but at least&#xA;the initial example in section 2.3 of the paper is fairly clear,&#xA;simple example:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Now consider the following alternative definition of FACT. It has an&#xA;extra argument, the continuation [16], which is a function to call&#xA;with the answer, when we have it, rather than return a value; that&#xA;is, rather than ultimately reducing to the desired value, it reduces&#xA;to a combination which is the application of the continuation to the&#xA;desired value.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;(DEFINE FACT&#xA;  (LAMBDA (N C)&#xA;    (IF (= N 0) (C 1)&#xA;        (FACT (- N 1)&#xA;              (LAMBDA (A) (C (* N A)))))))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Here &lt;code&gt;C&lt;/code&gt; could also be called a &amp;quot;callback&amp;quot;: you pass it to &lt;code&gt;FACT&lt;/code&gt; and&#xA;&lt;code&gt;FACT&lt;/code&gt; calls it with the answer it produces. However, this CPS use is&#xA;slightly different from &amp;quot;typical callback use&amp;quot; in systems like Node.js&#xA;in that it executes the callback immediately and, especially, does not&#xA;return to continue executing the code after &lt;code&gt;FACT&lt;/code&gt; has been called&#xA;(though that can be implemented in this style).&lt;/p&gt;&#xA;&lt;p&gt;(The paper goes on to give examples of where this style is useful and&#xA;can make code more clear.)&lt;/p&gt;&#xA;&lt;p&gt;Even at the time this was not a new technique. The reference &lt;code&gt;[16]&lt;/code&gt;&#xA;above is to John C. Reynolds, &amp;quot;Definitional intepreters for higher&#xA;order proramming languages&amp;quot; in &lt;em&gt;ACM Conference Proceedings&lt;/em&gt;, 1972. And&#xA;I'm sure that other less general versions of this technique had been&#xA;used for years before this paper.&lt;/p&gt;&#xA;&lt;p&gt;So the answer here is really, probably, &amp;quot;it's ancient knowledge that's&#xA;been recycled a lot in various forms.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;If it's just a terminology issue that's bugging you, think of&#xA;&amp;quot;callback&amp;quot; as being short for, &amp;quot;a function that is called (back)&#xA;later, rather than called immediately.&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-26T13:51:32.937" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13482" PostTypeId="2" ParentId="13480" CreationDate="2020-01-26T10:44:11.353" Score="5" Body="&lt;p&gt;One RISC CPU I know of is included in the &lt;a href=&quot;https://en.wikipedia.org/wiki/PIC_microcontrollers&quot; rel=&quot;noreferrer&quot;&gt;PIC microcontrollers&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I happen to have an old General Intruments data book that says the oscillator clock is divided by sixteen for some part, and by four for some other part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The well-known 8-bit PICs by Microchip divide their system clock by four into instruction cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there were clones that run at one instruction cycle per (oscillator) clock cycle, &lt;a href=&quot;https://en.wikipedia.org/wiki/Parallax_SX&quot; rel=&quot;noreferrer&quot;&gt;Parallax SX&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="14875" LastActivityDate="2020-01-26T10:44:11.353" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13483" PostTypeId="2" ParentId="13480" CreationDate="2020-01-26T11:36:49.893" Score="26" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Classic RISC CPUs like ARM ... instructions execute in one cycle ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This assumption is not correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ARM-2 CPU (VL86C010, one of the first ARM CPUs) took:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Only one cycle for most operations (as you expected it)&lt;/li&gt;&#xA;&lt;li&gt;Typically two cycles if a jump/branch was done&lt;/li&gt;&#xA;&lt;li&gt;Up to 4 cycles for shift/rotate operations&lt;/li&gt;&#xA;&lt;li&gt;Up to 16 cycles for multiply operations&lt;/li&gt;&#xA;&lt;li&gt;Up to 17 (or even 18?) cycles for an &lt;code&gt;LDM&lt;/code&gt; instruction&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;... and each &quot;cycle&quot; took two oscillator clock cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is still true on modern ARM processors. Even the real-time focused Cortex-M cores need (at least) 2 cycles for memory accesses and up to 12 cycles for divisions (e.g. for the &lt;a href=&quot;https://developer.arm.com/docs/100165/0201/programmers-model/instruction-set-summary/processor-instructions&quot; rel=&quot;noreferrer&quot;&gt;Cortex-M3&lt;/a&gt;). This is even more true on the larger application processors, where deeper pipelines, out-of-order execution, complex SIMD instructions (not very RISC-y anyways), caches and concurrent accesses by multiple cores and DMA make execution times less predictable (e.g. &lt;a href=&quot;https://developer.arm.com/docs/ddi0344/k/instruction-cycle-timing&quot; rel=&quot;noreferrer&quot;&gt;Cortex-A8&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="16079" LastEditDate="2020-01-27T11:37:52.877" LastActivityDate="2020-01-27T11:37:52.877" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13484" PostTypeId="2" ParentId="11913" CreationDate="2020-01-26T12:14:29.480" Score="9" Body="&lt;p&gt;To elaborate on drawing text on Amstrad CPC and its screen addressing:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The first row of every character position on screen is at the memory address range from &lt;code&gt;&amp;amp;c000&lt;/code&gt; to &lt;code&gt;&amp;amp;c7ff&lt;/code&gt;, and thus can be calculated as &lt;code&gt;&amp;amp;c000 + y * 80 + x&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FOR I=&amp;amp;C000 to &amp;amp;C7FF: POKE I, &amp;amp;FF: NEXT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WwlT6.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WwlT6.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;The subsequent lines of every character are &lt;code&gt;&amp;amp;800&lt;/code&gt; bytes apart from each other. For instance, each address line for the character at &lt;code&gt;&amp;amp;c000&lt;/code&gt; is calculated with &lt;code&gt;&amp;amp;c000 + y * &amp;amp;800&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;With this information, you can render text using a routine like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 MODE 2&#xA;20 DATA &amp;amp;18,&amp;amp;3c,&amp;amp;7e,&amp;amp;ff,&amp;amp;ff,&amp;amp;7e,&amp;amp;3c,&amp;amp;18  : ' Load some 8 by 8 bitmap data&#xA;30 INPUT &quot;x pos&quot;;x :INPUT &quot;y pos&quot;;y&#xA;34 '&#xA;35 ' Text render begin&#xA;36 '&#xA;40 addr = &amp;amp;C000 + y * 80 + x             : ' Calculate screen start address&#xA;60 FOR y0 = 0 TO 7                       : ' For 8 pixels high&#xA;70 READ p                                : ' Read pixel data&#xA;80 POKE addr, p                          : ' Poke it at screen address&#xA;90 addr = addr + &amp;amp;800                    : ' Calculate next line's screen address&#xA;100 NEXT&#xA;105 '&#xA;106 ' Text render end&#xA;107 '&#xA;110 END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7ghMU.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7ghMU.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information you can have a look at my personal notes about Amstrad CPC display generation (and some more) here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://neuro-sys.github.io/2019/10/01/amstrad-cpc-crtc.html&quot; rel=&quot;noreferrer&quot;&gt;https://neuro-sys.github.io/2019/10/01/amstrad-cpc-crtc.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="404" LastEditorUserId="404" LastEditDate="2020-02-24T15:52:06.903" LastActivityDate="2020-02-24T15:52:06.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13485" PostTypeId="2" ParentId="13480" CreationDate="2020-01-26T12:53:01.520" Score="9" Body="&lt;p&gt;To start with, cycles, especially cycles in term of some external clock source aren't really a good measurement at all. Already with the mentioned 6502 internal workings are tied to two clocks effectively doubling the clock rate the chip works at (PHI0-&gt;PHI1/2). Something easy to see with the &lt;a href=&quot;http://www.visual6502.org/JSSim/expert.html?logmore=DPControl&quot; rel=&quot;noreferrer&quot;&gt;Visual 6502&lt;/a&gt; simulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13483/6659&quot;&gt;Martin Rosenau has shown&lt;/a&gt;, even RISC CPUs take multiple cycles when either needing to fetch additional words (like addresses) , or needing multiple cycles to perform complex tasks (like shifting).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seams as if the question comes rather down to why the 6500 designers didn't optimize single-byte, non-memory-accessing instructions down to one cycle and an assumed reasoning that this would be to save an substantial amount of chip real estate (transistors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Answer here is a clear &lt;em&gt;&lt;strong&gt;maybe&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, the 6500 design wasn't an academic work of love to create the best possible implementation, but rather about bringing a cheap CPU to market. Here investment for design time as well as time to market is at least as important than chip optimization, if not more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They had a single and perfect working mechanic that did benefit all instructions, resulting in a minimum execution time of 2 clocks and making all instructions working with out wasting cycles - except for flag manipulation, register transfers and increment/decrement, which needed a second cycle due the way instruction handling was set up. They (except for the last) could have been made to execute in a single cycle. Saving that may have needed a few additional transistors, but more important, it would have needed additional design time - a costly up front resource - and, as well slowed time to market, a crucial point in every project, especially in the heated competition back then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside and maybe even more relevant: The additional cycle has to be recognized as something relevant at all. A step often ignored when looking at something in hindsight. To solve an issue, it has to be seen as such in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;So I'd say, if seen as an issue at all, it was taken as a negliable side effect, nothing to spend much time on.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: The 65C02, BTW, did show with the single cycle NOPs, that it isn't big deal to get execution down to a single cycle. All while keeping the same basic structure. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-01-26T12:53:01.520" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13486" PostTypeId="2" ParentId="13468" CreationDate="2020-01-26T12:53:40.127" Score="1" Body="&lt;p&gt;I think you did a good job of providing relevant details. For instance, the fact that the same image works on a newer machine does indicate that the critical &quot;system files&quot; (IO.SYS and MSDOS.SYS and perhaps the command interpreter, typically COMMAND.COM) may all be in the right locations on the disk (referring to disk sectors, not just filesystem hierarchy). However, I also think we may need even more details to fully resolve this. So, until more are provided, this answer needs to be just a stab in the dark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be aware of some size limitations. DOS 6.22 used a signed integer which typically limited FAT16 partitions to 2GB (unlike some Win NT variations which could support 4GB on FAT16). There are a number of other limits that have affected hard drive space, like a limit of around 512 MB (or 528 million bytes) as noted in these resources:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.win.tue.nl/~aeb/linux/Large-Disk-4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.win.tue.nl/~aeb/linux/Large-Disk-4.html&lt;/a&gt;&#xA;&lt;a href=&quot;http://web.inter.nl.net/hcc/J.Steunebrink/bioslim.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://web.inter.nl.net/hcc/J.Steunebrink/bioslim.htm&lt;/a&gt;&#xA;&lt;a href=&quot;https://www.tldp.org/HOWTO/html_single/Large-Disk-HOWTO/#s4&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.tldp.org/HOWTO/html_single/Large-Disk-HOWTO/#s4&lt;/a&gt;&#xA;While the code may be loading from the MBR, the code on the MBR may be interpreted differently. The code on the MBR may be relying on the BIOS to read from the disk, and there may be different BIOS capabilities. The &quot;Large Disk&quot; article I mentioned above may discuss some relative limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, I remember hitting an 8GB limit on a 486 desktop. Your 386 laptop may be older than that, and the solutions would be to upgrade the BIOS (which typically involved replacing a chip, which might not be attached in an easily removable form) or figure out how to use older equipment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest that your DOS installation be on a partition using Partition Type/ID 6, not Partition Type/ID E (0xE, 15). 6 will be compatible with more older BIOS versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: These suggestions are largely based on my knowledge and experience from physically full-sized hard drives. I don't know what complexities get added with using a CompactFlash drive built into a laptop. Systems much newer would often be limited to booting from a hard drive or a floppy drive, and trying to boot from a drive connected to a parallel port, or a USB port, might not work so well. The ability to boot from some other sources, including a USB port, didn't get resolved until some BIOS updates after the Pentium chips were out. I think that booting from a second hard drive may have been hit-or-miss. So maybe your BIOS isn't as cooperative (even though it did find some code to start on the MBR). Unplugging any other disk (like a hard drive) might actually be helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If none of the above helps, I suggest posting more details, like how big your partitions are, what partition types you're using, and whether you get similar results when trying another operating system (FreeDOS sounds like an interesting one to compare to).&lt;/p&gt;&#xA;" OwnerUserId="419" LastActivityDate="2020-01-26T12:53:40.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13487" PostTypeId="2" ParentId="13479" CreationDate="2020-01-26T13:55:20.777" Score="14" Body="&lt;p&gt;Any time you can pass a procedure (function, method) designation (address, reference) as a parameter to a procedure, that is a &quot;callback&quot;.   The reason &lt;em&gt;why&lt;/em&gt; you're passing procedure B to procedure A is &lt;em&gt;so that&lt;/em&gt; A can call B at some point, either synchronously or asynchronously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the concept is simply an obvious one which emerges as soon as subroutines (closed subroutines, in the terminology of the time) have been invented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In many numerical analysis examples (which was one focus of early 'scientific' programming language), the callback is essential.  For example, suppose you wish to have a procedure that will determine a definite integral of some (mathematical) function, say by something like Simpson's rule - then the specific function is supplied as a parameter to the generalized integration procedure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDSAC&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 'closed subroutine' was invented by David Wheeler for the EDSAC. The seminal book &lt;em&gt;The Preparation Of Programs For An Electronic Digital Computer&lt;/em&gt; (Wilkes, Wheeler, and Gill; 1951) describes the technique, which was realized by software convention (the hardware for jump-and-return came later). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Part II of their book, &lt;em&gt;Specification of subroutines&lt;/em&gt;, describes routines presumably available at Cambridge.  Subroutine G1 solves simultaneous differential equations; it requires an 'auxiliary subroutine' (i.e., provided by the user of G1) to compute values of the first derivative and which is called 4 times for each step in G1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;This seems like a callback&lt;/strong&gt;, and since it was described simultaneously with the notion of subroutine, by &lt;strong&gt;the inventors of the subroutine&lt;/strong&gt;, it is my proposal to be &lt;strong&gt;the first&lt;/strong&gt;.  EDSAC itself became operational in May 1949; the book was published in 1951.  The Wheeler Jump (aka subroutine call) was therefore invented somewhere between 1949 and 1951. The subroutine was described in a &lt;a href=&quot;http://www.historyofinformation.com/detail.php?id=66&quot; rel=&quot;nofollow noreferrer&quot;&gt;privately-circulated memo&lt;/a&gt; in 1950 so that narrows the timeframe down to 1949--1950.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Early examples - synchronous case&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These two aren't presented as contenders for the absolute first, just as examples that it's a long-standing idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.mirrorservice.org/sites/www.bitsavers.org/pdf/ibm/7090/C28-6054-5_FORTRANII_Apr64.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;FORTRAN II for the IBM 7090&lt;/a&gt; supported this sort of callback -- likely it was supported on the 709 as well, but I cannot find a manual for that.  The manual I linked to was from 1964 but FORTRAN II dates from 1958.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Algol 60 supported the 'explicit' case of passing procedure (function) parameters in procedure (function) calls, but there was also an implicit case: call-by-name parameters.  For call-by-name, the actual argument was evaluated every time it was used in the called procedure, in contrast to call-by-value where the argument is evaluated once before entering the procedure.  The general case is implementable by converting the expression as entered for the parameter in the source Algol into a procedure -- termed a 'thunk' at the time it was invented, but which is clearly a 'callback' from the context of the called procedure into the context of the calling procedure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Asynchronous case&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you think that the essence of a callback is that the callback routine is executed at some future time (after the return from the procedure to which the callback routine was passed), then there are still many early pre-GUI examples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any system that supports traps, signals, exceptions, etc., is essentially a callback system.  You call a setup function to say &quot;when event E occurs, call procedure P&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RSX family of DEC minicomputer operating systems used this mechanism for I/O.  A system call initiated the I/O operation; the initiate call passed the address of a routine to be called on I/O completion.  The system call returned after I/O had been queued to the device. Most async programming would be done in the machine's assembly language. Libraries could and did expose the callback feature to higher level languages such as FORTRAN.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This approach is obviously modelled on what the hardware actually does. You start I/O in progress and later get a completion interrupt. So there's some case for saying the invention of the interrupt was the invention of the callback function. However, as I explained above, my conclusion is that callbacks were invented as an immediate corollary to the invention of subroutines, and thus on EDSAC, prior to the invention of interrupts.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-02-05T00:28:13.520" LastActivityDate="2020-02-05T00:28:13.520" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="13488" PostTypeId="2" ParentId="5825" CreationDate="2020-01-26T16:35:14.437" Score="2" Body="&lt;p&gt;I was having the same issues I could get floppies to boot, but couldn't get the CF card. When you install DOS to a disk it doesn't format the MBR.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;boot from floppy&lt;/li&gt;&#xA;&lt;li&gt;cd c:\&lt;/li&gt;&#xA;&lt;li&gt;fdisk /mbr   (or c:\dos\fdisk mbr)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="16076" LastActivityDate="2020-01-26T16:35:14.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13489" PostTypeId="2" ParentId="13480" CreationDate="2020-01-26T19:39:12.733" Score="3" Body="&lt;p&gt;I'm sure there were plenty of early &quot;RISC&quot; engines which took on the order of 8 cycles per instruction.  One cycle to fetch the instruction, one to access the registers, one to store the result, one to increment the instruction counter.  That's 4, but the fetch may have taken several.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(In case anyone's wondering, I was in meetings with George Radin ca 1975.)&lt;/p&gt;&#xA;" OwnerUserId="3483" LastActivityDate="2020-01-26T19:39:12.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13490" PostTypeId="1" CreationDate="2020-01-26T21:15:29.660" Score="2" ViewCount="285" Body="&lt;h3&gt;Background&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I am fascinated by the thought of re-purposing systems with modern OSes. For example, I am running a hacked Android Pie ROM on an old Samsung Galaxy S4. A main reason why this isn't more popular is how difficult it is to reverse engineer black-box drivers and hardware to write open-source drivers.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Question&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Has there been any attempts to reverse engineer drivers using Artificial Intelligence to breathe new life into old systems? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My searching hasn't found any results, but maybe the community calls what I'm describing by another term? Or maybe this question is too new and I should ask again in two years? &lt;/p&gt;&#xA;" OwnerUserId="5143" LastActivityDate="2020-01-27T03:17:59.317" Title="Are there any examples of the use of AI to recreate drivers to resurrect old systems?" Tags="&lt;repair&gt;&lt;restoration&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13491" PostTypeId="2" ParentId="13490" CreationDate="2020-01-27T03:17:59.317" Score="2" Body="&lt;p&gt;I have no definitive information, but I highly doubt it. Why? &lt;strong&gt;Moore's Law&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, the very same technology that is (gradually) enabling &quot;artificial intelligence&quot; (or more specifically, machine learning) is also making those &quot;old systems&quot; totally, utterly obsolete.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think about it: The incredibly inexpensive computers like Raspberry Pi ($35, I think less for some versions), Android phones (many basic models - which are not so basic, including a display, dual cameras, WiFi, cellular, etc. - for under $50), replace computers that cost hundreds or even thousands of dollars just a few years ago (even many computers that are still too new to be on topic for this Retrocomputing site). So making use of those older computers only provides a very minimal cost savings compared to just buying a new computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other side of the equation, AI/machine learning still pushes the limits of today's technology. By the time you build up the hardware and software to analyze the old driver software, just to be able to connect to some old stuff, you could have bought new stuff (e.g., &amp;lt; $100 laser printers to replace old $2,000 printers and the new ones are 3 times as fast as the old ones and print double-sided too).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Retrocomputing is &lt;strong&gt;fun&lt;/strong&gt; and &lt;strong&gt;interesting&lt;/strong&gt; - or I wouldn't be posting here. But to use leading-edge technology to make partial use (since if was old computers to old peripherals then you wouldn't need to reverse engineer the driver software - you would use it &quot;as is&quot;) just doesn't make financial sense.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2020-01-27T03:17:59.317" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="13492" PostTypeId="1" AcceptedAnswerId="13499" CreationDate="2020-01-27T04:10:16.183" Score="4" ViewCount="199" Body="&lt;p&gt;Most of the &lt;a href=&quot;http://tass64.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;tass&lt;/a&gt; example programs start with a header like this, which places BASIC code at the beginning of the file that has an appropriate &lt;code&gt;SYS&lt;/code&gt; instruction to run the rest of the application:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*       = $0801&#xA;        .word (+), 2005  ;pointer, line number&#xA;        .null $9e, format(&quot;%d&quot;, start);will be sys 4096&#xA;+   .word 0          ;basic line end&#xA;&#xA;*       = $1000&#xA;&#xA;start   rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I would like to reproduce this in &lt;a href=&quot;https://www.cc65.org/doc/ca65-10.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ca65&lt;/a&gt; compatible syntax, and the one line that is given me trouble is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.null $9e, format(&quot;%d&quot;, start)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There is a &lt;code&gt;.sprintf&lt;/code&gt; function in ca65, but it appears to only work with constant values.  That is, if I have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.ORG    $0801&#xA;        .word :+, 10            ; pointer, line number&#xA;        .byte $9e, (.sprintf(&quot;%d&quot;, start))&#xA;                                ; this is `start` as a decimal string&#xA;        .byte 0                 ; string terminator&#xA;:&#xA;        .word 0&#xA;&#xA;start:  rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;example.s(8): Error: Constant expression expected&#xA;example.s(8): Error: Syntax error&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;While obviously one could simply hardcode the start address, is there any way to create a string value containing the decimal version of a memory address?&lt;/p&gt;&#xA;" OwnerUserId="7235" LastActivityDate="2020-01-30T15:37:02.513" Title="ca65 vs tass syntax: converting a hex address to decimal?" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;cc65&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13493" PostTypeId="1" AcceptedAnswerId="13496" CreationDate="2020-01-27T07:44:43.920" Score="37" ViewCount="8175" Body="&lt;p&gt;It's clear where many of the design decisions of IEEE 754 floating point come from. For example, the binary format maximizes efficiency on binary hardware. And 32 and 64 bits for single and double precision make sense on machines with power of two word sizes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the number of bits for sign+exponent is a free parameter, and the actual values chosen, being 9 and 12 respectively, seem terribly &lt;em&gt;random&lt;/em&gt;. To the extent I would've any prior expectation, I would've expected them to be powers of two, like 8 or 16, to make it easier to implement them in software, since the standard was written at a time when most computers did not have floating-point hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where did those values come from?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-29T04:42:39.483" Title="Where did the free parameters of IEEE 754 come from?" Tags="&lt;history&gt;&lt;floating-point&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13494" PostTypeId="2" ParentId="13493" CreationDate="2020-01-27T08:41:29.553" Score="15" Body="&lt;p&gt;Well, the first thing to remember about these &lt;a href=&quot;https://en.wikipedia.org/wiki/IEEE_754#Representation_and_encoding_in_memory&quot; rel=&quot;noreferrer&quot;&gt;binary formats&lt;/a&gt;&#xA;you're talking about (there were also decimal formats) is that they&#xA;are the &lt;em&gt;interchange&lt;/em&gt; formats; it's not required that hardware, or&#xA;even software, use these for internal calculations. It's perfectly&#xA;reasonable for an implementation to use an entire separate byte for&#xA;the sign and one or more separate bytes for the exponent, if that's&#xA;felt to be a good memory vs. speed tradeoff by the designer. (And in&#xA;fact that's exactly what many 6502 floating point routines did!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The binary interchange formats were chosen first to fit into common&#xA;modern binary machine words: 16, 32, 64, 128 and 256 bits. The next&#xA;decision to be made is the balance between exponent bits and&#xA;significant bits: too many of the former and you have a format with&#xA;perhaps more range you need and not enough precision; too many of the&#xA;latter and you have the opposite problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An exponent of eight bits as used by binary32 (single-precision)&#xA;interchange format gives you a binary exponent range of only -126 to&#xA;+127, which limits the absolute sizes of your values to somewhere&#xA;around 10^38 decimal. That's not a bad range, but it's certainly not&#xA;enough for many applications. Reducing it to 7 bits (so that the sign&#xA;and all exponent bits could be in a single byte) would make the&#xA;problem even worse, and probably wouldn't help much with calculations&#xA;in software since you still have to split out the sign, and anybody&#xA;concerned about speed is going to use an internal format with a&#xA;separate byte for that anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once we move to binary64 (double-precision), the problem goes in the&#xA;opposite direction: increasing the  11 bit exponent to 16 bits&#xA;exponent would give an enormous absolute range of something like&#xA;10^5000 decimal and, because it's &quot;stealing&quot; 5 bits that could&#xA;otherwise be used for more precision, would reduce precision from&#xA;almost 16 digits to just over 14. The current scheme was felt to be a&#xA;better tradeoff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following is a table I made a while back when I was thinking about&#xA;this topic myself. &lt;em&gt;p&lt;/em&gt; is precision (in bits) of significand,&#xA;including an implicit leading &lt;code&gt;1&lt;/code&gt;. &lt;em&gt;prec&lt;/em&gt; is number of digits of&#xA;decimal precision (&lt;code&gt;c*log₁₀(2)&lt;/code&gt;), &lt;em&gt;demax&lt;/em&gt; is the maximum exponent in&#xA;decimal (&lt;code&gt;2^(e-1)-1 * log₁₀(2)&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;byt bits p   e   prec    demax      notes&#xA;2   16  11   5   3.31     4.51      IEEE 754 half precision (not basic)&#xA;3   24  16   8   4.81    38.23&#xA;3   24  17   7   5.11    18.96&#xA;3   24  18   6   5.42     9.33&#xA;3   24  19   5   5.72     4.51&#xA;4   32  24   8   7.22    38.23      IEEE 754 single precision&#xA;5   40  32   8   9.63    38.23&#xA;5   40  31   9   9.33    76.76&#xA;5   40  30  10   9.03   153.8&#xA;6   48  40   8  12.04    38.23&#xA;6   48  39   9  11.74    76.76&#xA;6   48  38  10  11.44   153.8&#xA;7   56  48   8  14.45    38.23&#xA;8   64  56   8  16.86    38.23&#xA;8   64  53  11  15.95   308.0       IEEE 754 double precision&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;MS 6502 BASIC shipped with 32-bit 6 digit FP (8 KB) in 1976 (8 KB),&#xA;later expanded to 40-bit 9 digit (9 KB) in 1977.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-01-27T08:41:29.553" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13495" PostTypeId="2" ParentId="13492" CreationDate="2020-01-27T11:00:37.090" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;There is a .sprintf function in ca65, but it appears to only work with constant values. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Excatly. That's why there's the first error (&lt;code&gt;Error: Constant expression expected&lt;/code&gt;) occurs. Sprintf is evaluated right when the source is parsed. So it behaves much like a macro in C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second error (&lt;code&gt;Syntax error&lt;/code&gt;) is due the parentheses around sprintf.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try something like &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    .byte $9e,.sprintf(&quot;%d&quot;, 99)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to see the workings in your listing (&lt;code&gt;ca65 -l test.lst test.asm&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume you just copied from the manual page, but there the result is used in an expression for &lt;code&gt;.ident&lt;/code&gt;, which can eat them. &lt;code&gt;.byte&lt;/code&gt; will not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solving the original task will need some macro-magic. I'm not so sure if it's really worth it. So for now better stay with using a constant value.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-30T15:35:29.857" LastActivityDate="2020-01-30T15:35:29.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13496" PostTypeId="2" ParentId="13493" CreationDate="2020-01-27T11:49:45.827" Score="58" Body="&lt;p&gt;From &lt;a href=&quot;https://people.eecs.berkeley.edu/%7Ewkahan/ieee754status/754story.html&quot; rel=&quot;noreferrer&quot; title=&quot;An Interview with the Old Man of Floating-Point&quot;&gt;an interview&lt;/a&gt; with &lt;a href=&quot;http://rubylearn.com/dr-chuck/papers/columns/r3114.pdf&quot; rel=&quot;noreferrer&quot; title=&quot;IEEE 754: An Interview with William Kahan&quot;&gt;Dr. William Kahan&lt;/a&gt;, the IEEE-754 formats were &lt;strong&gt;based on the &lt;a href=&quot;http://nssdc.gsfc.nasa.gov/nssdc/formats/VAXFloatingPoint.htm&quot; rel=&quot;noreferrer&quot;&gt;VAX &lt;em&gt;F&lt;/em&gt; and &lt;em&gt;G&lt;/em&gt;&lt;/a&gt; formats&lt;/strong&gt;, which have 8 and 11-bit exponents respectively. In fact Dr. Kahan also said that previously VAX has a double precision &lt;em&gt;D&lt;/em&gt; format which has the same 8-bit exponent as the single precision &lt;em&gt;F&lt;/em&gt; format which proved too limited in practical use, therefore DEC had to introduced 3 more bits to create the new &lt;em&gt;G&lt;/em&gt; format to avoid the underflow/overflow issues&lt;/p&gt;&#xA;&lt;p&gt;But why did DEC use 8 bits for the exponent in the &lt;em&gt;F&lt;/em&gt; and &lt;em&gt;D&lt;/em&gt; formats? The reason is &lt;strong&gt;to be able to represent all important physical constants&lt;/strong&gt;, including the Plank constant (6.626070040 × 10&lt;sup&gt;-34&lt;/sup&gt;) and the Avogradro constant (6.022140857 × 10&lt;sup&gt;23&lt;/sup&gt;), as stated in &lt;a href=&quot;https://ia601604.us.archive.org/26/items/bitsavers_decpdp11meoatingPointFormat_1047674/701110_The_PDP-11_Floating_Point_Format.pdf&quot; rel=&quot;noreferrer&quot;&gt;PDP-11/40 Technical Memorandum #16&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Another rationale for the 64-bit format as described by David Stephenson (&lt;a href=&quot;https://www.computer.org/csdl/mags/co/1981/03/01667284.pdf&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;A Proposed Standard for Binary Floating-Point Arithmetic&amp;quot;&lt;/a&gt;, IEEE Computer, Vol. 14, No. 3, March 1981, pp. 51-62) is that&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For the 64-bit format, the main consideration was range; as a minimum, the desire was that the product of any two 32-bit numbers should not overflow the 64-bit format. The final choice of exponent range provides that a product of eight 32-bit terms cannot overflow the 64-bit format — a possible boon to users of optimizing compilers which reorder the sequence of arithmetic operations from that specified by the careful programmer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In fact nowadays the rule for IEEE-754 interchange format the size for the exponent is &lt;em&gt;round(4 log&lt;sub&gt;2&lt;/sub&gt;(k)) − 13&lt;/em&gt; bits so every time we double the width of the type, the exponent will be have ~4 more bits which allows for 16 multiplications of the narrower type without overflow&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The encoding scheme for these binary interchange formats is the same as that of IEEE 754-1985: a sign bit, followed by &lt;em&gt;w&lt;/em&gt; exponent bits that describe the exponent offset by a &lt;a href=&quot;https://en.wikipedia.org/wiki/Exponent_bias&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;bias&lt;/em&gt;&lt;/a&gt;, and &lt;em&gt;p − 1&lt;/em&gt; bits that describe the significand. The width of the exponent field for a &lt;em&gt;k&lt;/em&gt;-bit format is computed as &lt;em&gt;w = round(4 log&lt;sub&gt;2&lt;/sub&gt;(k)) − 13&lt;/em&gt;. The existing 64- and 128-bit formats follow this rule, but the 16- and 32-bit formats have more exponent bits (5 and 8) than this formula would provide (3 and 7 respectively).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IEEE_754#Interchange_formats&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/IEEE_754#Interchange_formats&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Those are the things I summarized from the below links which you should read to get more details&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/50594009/995714&quot;&gt;Relationships between 128, 64, and 32 bit IEEE-754 floating point numbers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/40775949/995714&quot;&gt;Why do higher-precision floating point formats have so many exponent bits?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/4397081/995714&quot;&gt;What is the rationale for exponent and mantissa sizes in IEEE floating point standards?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/55316037/995714&quot;&gt;Why did IEEE754 choose 11 exponent bits for double aka binary64?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/23064893/995714&quot;&gt;How are IEEE-754 single and double precision formats determined?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1981" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-29T04:42:39.483" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13497" PostTypeId="2" ParentId="13474" CreationDate="2020-01-27T12:38:14.243" Score="5" Body="&lt;p&gt;Note that paper is usually also vertical, as were many early desktop PCs. Where does &lt;em&gt;horizontal&lt;/em&gt; come from? Many professionals used vertical screens on PCs (and some still do) whenever possible. It's great for reading, which is why this very site only uses a fraction of the display to show actual content - the thing you're supposed to read still fits a vertical aspect ratio. Books, newspapers, savvy web sites - they all keep the thing you're reading to a relatively narrow column. If you only need to &quot;scroll&quot; in one direction, you can read much more comfortably - and European scripts don't really allow writing in a way that would work well for a scroll that goes horizontally. Other scripts have it different - if you write &quot;top down&quot;, horizontal scrolling makes much more sense, and you will probably find that if they used scrolls in the past, they were supposed to be unrolled horizontally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Horizontal aspect ratios come from TV, and workloads with similar constraints. Our own vision is much wider than it is tall, so it is quite natural to show images and sceneries horizontally. Why would you use that for a computer? Because early home computers could be much cheaper if they allowed you to plugin your TV (which you already had). Game consoles especially are the same way even today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But arcade games had different constraints. You can only fit so many machines in a given floorplan. And nobody cares how &lt;em&gt;tall&lt;/em&gt; an arcade is - you care about how many you can fit side by side. Vertical screens vastly improve how many games you can have in your arcade parlor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You adapt the gameplay to the screen, and vice versa. A vertical screen lends itself to a vertical scrolling shooter. It fits certain perspectives - showing something &quot;top down&quot; (as in Space invaders, where the titular invaders come from &quot;up&quot;, which nicely fits the top of the screen), or &quot;forward back&quot; as in a racing game, for example. Horizontal screens work great for &quot;left right&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One more thing to consider is that many arcades didn't actually render their graphics on a raster, the way you're familiar with. The display's electronics didn't have a preferred direction - indeed, many games either used stencils/masks or vector graphics, where the beam was steered to shape the thing being rendered, rather than following some left-right, line-by-line path. Arcades had plenty of control over the beam path, and used that ability to great effect.&lt;/p&gt;&#xA;" OwnerUserId="542" LastActivityDate="2020-01-27T12:38:14.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13498" PostTypeId="2" ParentId="13493" CreationDate="2020-01-27T13:03:55.217" Score="4" Body="&lt;p&gt;I can see logic in selecting 23 mantissa bits for 32-bit float: together with the implied &quot;one&quot; it fits exactly in 24 bits, which is convenient for emulating floats on a purely integer processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And another pressure is the precision -- they had to trade precision for exponent size, and the precision (which was not particularly high for float-32) won a bit or two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;64-bit float decisions might be more random since the precision it gives and the maximum/minimum exponent it allows seemed to be less of importance at the time (both were perceived to be &quot;more than enough&quot;, and the exponent still is).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Handling both exponent sizes within a 16-bit cpu (which was i8086 for intel) was obviously easy.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-01-27T13:03:55.217" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13499" PostTypeId="2" ParentId="13492" CreationDate="2020-01-27T15:52:26.143" Score="1" Body="&lt;p&gt;ca65 &lt;a href=&quot;https://cc65.github.io/doc/ca65.html#toc1.1&quot; rel=&quot;nofollow noreferrer&quot;&gt;was designed&lt;/a&gt; as a single-pass assembler.  So this works:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;addr    =       4096&#xA;        .byte   $9e,.sprintf(&quot;%d&quot;, addr)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but this does not:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        .byte   $9e,.sprintf(&quot;%d&quot;, addr)&#xA;addr    =       4096&#xA;--&amp;gt; Error: Constant expression expected&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The expression can't simply be constant; it must be constant and has to be defined before the sprintf function is encountered.  If the assembler knows the size of the output (e.g. &lt;code&gt;.word addr&lt;/code&gt; requires two bytes) it can reserve the space and fill it in later, but in this case the output is variable width.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're actually forcing the address to $1000 as in your 64tass example, you can just define a constant for the address above the sprintf.  If you want the code to flow to the next address, you can't do it easily because the assembler simply doesn't know how large the formatted value is when the sprintf function is evaluated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you noted, the simple approach is to just hard-code the header, which doesn't really change for simple programs:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         .org    $0801&#xA;         .word   $0801      ;PRG header&#xA;         .org    $0801&#xA;         .word   next       ;ptr to next line&#xA;         .word   $0014      ;arbitrary line num&#xA;         .byte   $9e        ;SYS 2061 ($080d)&#xA;         .byte   &quot;2061&quot;&#xA;         .byte   $00&#xA;next:    .word   $0000&#xA;&#xA;start:   nop                ;$80d&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There's no simple way around this because of the assembler's design.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2020-01-27T17:16:26.783" LastActivityDate="2020-01-27T17:16:26.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13500" PostTypeId="1" CreationDate="2020-01-27T16:19:54.037" Score="7" ViewCount="1163" Body="&lt;p&gt;The Commodore systems famously wrote everything to the Datasette twice as a form of error correction. Most other formats I've looked at - Atari, CUTS and CoCo - lack any form of correction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is anyone aware of a format that used ECC on &lt;em&gt;cassette&lt;/em&gt; storage? I assume this was not uncommon in non-cassette formats of the era.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-01-29T00:54:56.153" Title="Cassette formats using ECC?" Tags="&lt;cassette-tape&gt;" AnswerCount="4" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="13501" PostTypeId="2" ParentId="13500" CreationDate="2020-01-27T16:29:36.913" Score="8" Body="&lt;p&gt;Use of error-&lt;strong&gt;correcting&lt;/strong&gt; codes was not common in home computers until at least 33.6Kbps modems and/or gigabyte-sized hard disks were available.  One of the earliest consumer applications of ECC (in the form of two-dimensional Reed-Solomon codes) was the Compact Disc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Until then, error-&lt;strong&gt;detecting&lt;/strong&gt; codes such as parity and CRC were reasonably common, including in TCP/IP packets and floppy disk formats.  If an error was detected, the computer might try a second time to read the data.  Often this worked, and the extra time taken would alert the user that renewing the media might be a good idea.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-01-27T23:15:41.677" LastActivityDate="2020-01-27T23:15:41.677" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13502" PostTypeId="2" ParentId="13480" CreationDate="2020-01-27T17:28:09.303" Score="3" Body="&lt;p&gt;Less historical example: ARM (Advanced RISC Machines...) Cortex-M4 has many (though a clear minority) instructions that execute in more than one cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See this list:&#xA;&lt;a href=&quot;http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/CHDDIGAC.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/CHDDIGAC.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cycle count gets less clear when pipelining or dual-issue is introduced (like in the Cortex-M7)&lt;/p&gt;&#xA;" OwnerUserId="12083" LastActivityDate="2020-01-27T17:28:09.303" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13503" PostTypeId="2" ParentId="13500" CreationDate="2020-01-27T18:28:29.983" Score="3" Body="&lt;p&gt;The Oric Atmos (not the Oric 1) had some kind of error &lt;em&gt;detection&lt;/em&gt; (that was broken in the first version of the Atmos ROM) which printed &quot;errors found&quot; (without any further details) when loading encountered an issue. It wasn't based on a checksum, but rather on detecting a proper read of each byte of the tape (if it was using parity, it's at the hardware level).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you saw that message (on a machine with the corrected ROM), it was generally too late (or the tape volume/speed required adjustment)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Oric Atmos ROM also introducted an option to check the saved tape. Basically the user:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;saves the data to tape (&lt;code&gt;CSAVE &quot;MYPROG&quot;&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;rewinds the tape&lt;/li&gt;&#xA;&lt;li&gt;loads the data back using &quot;verify&quot; option (&lt;code&gt;CLOAD &quot;&quot;,V&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That option loads and compares against the machine memory (not storing the data twice, but saving+checking doubles the time needed to save the data). If everything could be loaded &lt;em&gt;once&lt;/em&gt;, at least it means that the save was successful (repeat process with another tape/another volume settings until it succeeds). And unless the tape rots, there's a good chance that the tape can be loaded again in the next future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those were heroic times, on amateurish computers, where it was admitted that you could lose your data from time to time (I lost a &lt;em&gt;lot&lt;/em&gt; of work, just because sometimes I was too lazy to check my saves)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least the Oric Atmos proposed a way to make sure that the save worked, without needing a second computer to load the saved data…&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Well, better save it on another tape from time to time, just to be sure)&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-01-27T18:35:18.620" LastActivityDate="2020-01-27T18:35:18.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13504" PostTypeId="1" AcceptedAnswerId="13506" CreationDate="2020-01-27T18:55:09.133" Score="10" ViewCount="1190" Body="&lt;p&gt;For the first few years after its release in 1982, the Commodore 64 used eight RAM chips of 64kbit each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the late eighties, it became cheaper to use a pair of 256kbit chips of the 4-bit-wide variety.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the machine was manufactured until Commodore went bankrupt in 1994. What did it use up to the end of that time? Were 256kbit DRAMs still being manufactured in older fabs, or was there some transition to a chip of yet higher capacity?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-27T22:49:56.613" Title="What sort of RAM chips did the Commodore 64 use in 1994?" Tags="&lt;history&gt;&lt;commodore-64&gt;&lt;memory&gt;&lt;dram&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13505" PostTypeId="2" ParentId="8627" CreationDate="2020-01-27T19:02:12.907" Score="3" Body="&lt;p&gt;Brandon Rhodes has extracted and converted the AT&amp;amp;T 3B1 (also known as the AT&amp;amp;T Unix PC) screen font (and given instructions on how to extract others) from the original install files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see it here: &lt;a href=&quot;https://github.com/brandon-rhodes/unixpc-font-bdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/brandon-rhodes/unixpc-font-bdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The font, unfortunately, is designed for non-square pixels and looks a bit off on modern square pixel displays.&lt;/p&gt;&#xA;" OwnerUserId="6854" LastActivityDate="2020-01-27T19:02:12.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13506" PostTypeId="2" ParentId="13504" CreationDate="2020-01-27T21:28:58.110" Score="12" Body="&lt;p&gt;The highest capacity DRAM to ever be used for the Commodore 64 motherboard was 256Kbit. By the early 1990s, 1Mbit DRAM was commonplace, but used in a 256Kbx4 would require the C64 to have 256KB of main memory. It was almost certainly cheaper to continue to source the 256Kbit RAMs than to either upgrade the C64 to support 256KB of RAM near its end-of-life, or to just use higher capacity chips in a reduced manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of all the popular 1980s, 8-bit machines, that were still being manufactured into the early 1990s, only the Apple IIgs (ROM 3) and the SAM Coupe utilized 1Mbit DRAM on the motherboard. There might have been some PC clones with 8088 CPUs still made in the early 1990s and utilizing 1Mbit DRAMs, but I don't know of any. The 80286 with its 16-bit data bus was pretty dominant by 1990.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Some would call the IIgs a &quot;16-bit computer&quot;, but it clearly has only an 8-bit data bus.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-01-27T22:49:56.613" LastActivityDate="2020-01-27T22:49:56.613" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13507" PostTypeId="1" AcceptedAnswerId="13508" CreationDate="2020-01-27T23:04:05.800" Score="15" ViewCount="1238" Body="&lt;p&gt;This is something of a followup to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13461/how-much-control-of-trs-80-model-iii-disk-drives-was-possible-from-its-cassette&quot;&gt;How much control of TRS-80 Model III disk drives was possible from its Cassette (ROM) BASIC?&lt;/a&gt; but on a more general topic:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that &lt;code&gt;PEEK&lt;/code&gt; and &lt;code&gt;POKE&lt;/code&gt; enable direct access the computer's memory (both ROM and RAM) from most BASIC implementations on the early home computers. &lt;code&gt;POKE N,B&lt;/code&gt; and &lt;code&gt;B = PEEK(N)&lt;/code&gt; are, respectively, like &lt;code&gt;*n = b;&lt;/code&gt; and &lt;code&gt;b = *n;&lt;/code&gt; in C and I suppose in either the BASIC case or the C case their exact behavior depends on what memory mapping is set up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many platforms expose not just memory, but all of their &quot;peripherals&quot; through special memory addresses. I think the PDP-11 was this way based on all the opcodes I've seen, I understand the Apple ][ may have been this way as well. Even more recently, chips like the MSP430 and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set#Addressing&quot; rel=&quot;noreferrer&quot;&gt;AVR series&lt;/a&gt; at the instruction set level all ultimately seem to use a single &quot;memory&quot; address space for accessing &lt;strong&gt;anything&lt;/strong&gt; of the world outside the processor, both actual memory and any other I/O devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, with at least the TRS-80 (were there other examples? was this Z80 family specific?) there is another type of &lt;a href=&quot;http://www.trs-80.com/wordpress/info-level-2-basic-language/#Hardware&quot; rel=&quot;noreferrer&quot;&gt;I/O exposed through BASIC&lt;/a&gt;: the &lt;code&gt;IN&lt;/code&gt; and &lt;code&gt;OUT&lt;/code&gt; commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What did those actually do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The user manuals say they read/write to &quot;ports&quot;. Is that just a higher level abstraction of something also accessible through the memory space, or did some I/O actually happen through a different mechanism?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did find for example on the Model III a list of &lt;a href=&quot;http://www.trs-80.com/wordpress/zaps-patches-pokes-tips/ports-and-i-o-devices/#memmapio&quot; rel=&quot;noreferrer&quot;&gt;Memory Mapped I/O Devices&lt;/a&gt; that has some apparent overlap with the &lt;a href=&quot;http://www.trs-80.com/wordpress/zaps-patches-pokes-tips/ports-and-i-o-devices/#portsm3&quot; rel=&quot;noreferrer&quot;&gt;Ports&lt;/a&gt; list. For example the memory address &lt;code&gt;37E4h&lt;/code&gt; is listed as the &quot;Cassette drive latch&quot; while &lt;code&gt;FF&lt;/code&gt; is listed as the &quot;Cassette Unit I/O&quot; port. Is &lt;code&gt;OUT 255,42&lt;/code&gt; equivalent to &lt;code&gt;POKE 14308,42&lt;/code&gt; then?&lt;/p&gt;&#xA;" OwnerUserId="13904" LastEditorUserId="13904" LastEditDate="2020-01-27T23:10:03.767" LastActivityDate="2020-04-15T09:58:18.327" Title="What are the &quot;ports&quot; used via IN/OUT, vs. the PEEK/POKE address space?" Tags="&lt;z80&gt;&lt;basic&gt;&lt;memory-layout&gt;&lt;instruction-set&gt;&lt;trs-80&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13508" PostTypeId="2" ParentId="13507" CreationDate="2020-01-27T23:16:16.993" Score="23" Body="&lt;p&gt;The TRS-80 series is Z80 based, and Z80 uses, like all 8080 offspring (*1,3) a separate &lt;a href=&quot;https://z80journal.wordpress.com/2015/10/07/z80-io-space/&quot; rel=&quot;noreferrer&quot;&gt;address space for I/O&lt;/a&gt;. It allows easy decoding for I/O. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus memory address 0000h is different from I/O address 00h.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On logical (program) level, access to either address space is selected by the instructions used.  Memory instructions always access memory address space and I/O do the same for I/O address space. On hardware level, it is marked by status signals. On a Z80 for example, an active &lt;code&gt;/MREQ&lt;/code&gt; line signals memory access and thus a memory address on A0..15, while &lt;code&gt;/IORQ&lt;/code&gt; does the same for I/O space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In BASIC, &lt;code&gt;PEEK&lt;/code&gt; and &lt;code&gt;POKE&lt;/code&gt; are made to allow memory access. BASICs for x80/x86 CPUs therefore carry in addition &lt;code&gt;IN&lt;/code&gt; and &lt;code&gt;OUT&lt;/code&gt; instructions to allow access to ports (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than having its own address space and instruction set for access, I/O does not differ from memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Historically having device specific I/O instructions, or more generically a separate I/O address space, was quite common and rather the norm. Making ports accessible via memory reference was out of the ordinary, requiring to add the adjective of 'memory mapped' to I/O. Off course, even on a CPU with a dedicated I/O space it is still possible to have memory mapped I/O. And that's what Tandy did for some of their interfaces. They were located in I/O space, but also mapped to memory as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8080/85 had an 8-bit I/O address space, while Z80 and later the 8086 extended this to 16-bit. Except, the Z80 handled 8-bit I/O addresses differently from 16-bit, and system design defines which is to be used.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - In fact it goes back to the 8008 (*2), except here only 8 input and 24 output ports could be addressed, as they shared one instruction format with a single 5 bit address without a direction signal. To distinguish, the top two bits were set to 00 for input, and each input instruction also output A first. Unusual for today's mind, but quite capable - and compared with its predecessor almost streamlined :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Which took it from the Datapoint 2200, using a solution even more outlandish when seen from today: here only a single input port could be read with the dedicated &lt;code&gt;INPUT&lt;/code&gt; instruction and no output command, but instead an 'External Command' &lt;code&gt;EX&lt;/code&gt; which presented A on the external command bus accompanied by a 5 bit command code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Yes, that means all the way to modern x86 CPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - I/O addresses are usually called ports.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2020-01-28T11:58:34.527" LastActivityDate="2020-01-28T11:58:34.527" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="13509" PostTypeId="1" CreationDate="2020-01-28T00:44:04.380" Score="2" ViewCount="247" Body="&lt;p&gt;In the early eighties, 64kbit DRAM chips replaced 16kbit ones by being cheaper per bit. Around 1987, 256kbit replaced 64kbit in turn, so computers like the Commodore 64 started using two of them for 64Kbyte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this process did not quite continue, according to the answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13504/what-sort-of-ram-chips-did-the-commodore-64-use-in-1994&quot;&gt;What sort of RAM chips did the Commodore 64 use in 1994?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems 256k chips remained in use as late as the mid-nineties. I'm curious whether that was because 1Mbit chips did not drop so quickly in price, because no one had the resources or inclination to change designs to use them, or for some other reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So just what were the relative costs of 256 vs 1Mbit chips by the mid-nineties?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-30T15:42:31.437" Title="What were the wholesale costs of 256kbit vs 1Mbit DRAM chips in 1994?" Tags="&lt;history&gt;&lt;memory&gt;&lt;dram&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13510" PostTypeId="2" ParentId="13385" CreationDate="2020-01-28T02:02:18.150" Score="6" Body="&lt;h1&gt;The Solution&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I added a StarTech PM111SP2 print server, and changed the print speed to slow. Here is a video of it working for the first time: &lt;a href=&quot;https://youtu.be/jt3bGKbGpGA&quot; rel=&quot;noreferrer&quot;&gt;Printing for the Very First Time&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://007qbranch.files.wordpress.com/2020/01/2020-01-27_17-37-34_842.jpeg&quot; alt=&quot;Print Server&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://007qbranch.files.wordpress.com/2020/01/kx-w50th-retrocomputing.png&quot; alt=&quot;The Solution&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Text from the first successful digital transfer&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Hello world!&lt;br&gt;&#xA;It works.&lt;br&gt;&#xA;I have a Panasonic KX-W50TH thermal transfer typewriter that I wanted to use in the modern world as an internet of things printer. The typewriter was manufactured in 1986 using technologies that are not common today (2020). How can a computer from today work with a typewriter that was manufactured 34&lt;br&gt;&#xA;years ago?&#xA;The Panasonic KX-W50TH uses a separate interface adaptor. In 1986, the optional adaptor called out in marketing literature is the &lt;strike&gt;RP-K105&lt;/strike&gt; (&lt;em&gt;edit: RP-K100&lt;/em&gt;). A search for this adaptor resulted in a dead-end. Parts suppliers for Panasonic list it as no longer available. A substitution part is listed as RP-K105. This adaptor is also no longer available. By sheer luck, I managed to find one on E-bay that was for sale for months. I visited the page long before I got the typewriter. I purchased this rare interface adaptor and hooked it up to my computer using a USB to Centronics cable. The cable was successfully used with an Olivetti 900x typewriter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my original configuration:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Computer&lt;/li&gt;&#xA;&lt;li&gt;USB to Centronics Cable&lt;/li&gt;&#xA;&lt;li&gt;Panasonic RP-K105 Interface Adaptor&lt;/li&gt;&#xA;&lt;li&gt;Panasonic KX-W50TH&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I set up a Generic Text Printer and selected the USB port in the ports tab. &lt;strike&gt;MY fist&lt;/strike&gt; (&lt;em&gt;Edit: My first&lt;/em&gt;) printing of &quot;Hello world!&quot; printed, but it looked like &quot;Hlowd&quot;. Based on the discussion on the website retrocomputing.stackexchange.com (See panasonic-kx-w50th-data-transfer), it was suggested that I use a different cable or a PCI card. I opted to purchase the StarTech PM111SP2 print server. The print server is a networked device that connects to a Centronics port on older printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My new configuration is the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Computer&lt;/li&gt;&#xA;&lt;li&gt;Network&lt;/li&gt;&#xA;&lt;li&gt;StarTech PM111SP2 Print Server&lt;/li&gt;&#xA;&lt;li&gt;Panasonic RP-K105 Interface Adaptor&lt;/li&gt;&#xA;&lt;li&gt;Panasonic KX-W50TH&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Once I set up the print server and configured it, I added a new port to the Generic Text Printer on my computer. In the Print Server Admin, I changed the print speed from Fast to Slow. I printed &quot;Hello world!&quot;, and I saw the same result on paper. Any print speed that is higher than slow results in missed characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are good to go!&lt;/p&gt;&#xA;" OwnerUserId="16025" LastEditorUserId="16025" LastEditDate="2020-01-28T02:13:34.203" LastActivityDate="2020-01-28T02:13:34.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13511" PostTypeId="2" ParentId="13500" CreationDate="2020-01-28T02:46:15.940" Score="8" Body="&lt;p&gt;Due to the nature of typical errors, simpler ECCs, like Hamming, would be of no use, and more complex ECCs would be prohibitively expensive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, a burst of noise will corrupt several bits in a row, and if we're unlucky, and depending on the encoding mechanism, the synchronization may be lost, thus rendering all bits up to the end of a block or the file incorrect.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-01-28T02:46:15.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13512" PostTypeId="2" ParentId="13474" CreationDate="2020-01-28T03:40:06.987" Score="5" Body="&lt;p&gt;My family owned an arcade parlor of sorts in the mid-1970's when Space Invaders, Pong, and PacMan were replacing mechanical games. I have seen the insides of many old-school arcade games when they were relatively new. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early games the CRT was often mounted horizontally. What you saw was a mirror at about 45 degrees that reflected the CRT and made it look like it was mounted vertically. On the other hand, the first Pong game we received was mounted horizontally in what looked like a cocktail table intended to have drinks set on it. Also, to the best of my recollection, Space Invaders started out as a pinball machine before becoming the thing we remember it to be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the late 1970's and early 1980's the CRTs were mostly being mounted vertically, but these CRTs looked suspiciously like actual TV units stripped from their cases and built into cabinets. I'm sure some engineer simply found the most cost effective way to manufacture arcade games with COTS parts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt anyone was actually concerned about home platforms cutting into arcade profits especially given that the manufacturer of a nascent technology is likely to be owned or bought by an older company with loads of cash when that company has the foresight to see a threat on the horizon.  &lt;/p&gt;&#xA;" OwnerUserId="16086" LastEditorUserId="11873" LastEditDate="2020-01-28T18:15:42.577" LastActivityDate="2020-01-28T18:15:42.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13513" PostTypeId="1" AcceptedAnswerId="13514" CreationDate="2020-01-28T04:09:45.477" Score="12" ViewCount="1497" Body="&lt;p&gt;Most old BIOSes on PCs and compatibles provided means to enter hard drive geometries (cylinder/head/sector as well as more esoteric things like write precomp) when configuring the machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some (AMI for sure, also Phoenix? Others?) had a table of geometries for 40 or so drives, plus the ability to enter custom values. (Over the years larger drives, LBA, etc. would render this less relevant)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, my question is: where did these tables of hardcoded geometries originate from? Was there a list that all BIOS vendors used? Were they ever useful? In all the times in the late 80s/early 90s I never had a drive that mapped to an already-defined geometry. &lt;/p&gt;&#xA;" OwnerUserId="599" LastEditorUserId="599" LastEditDate="2020-01-28T21:25:26.823" LastActivityDate="2020-01-28T21:25:26.823" Title="Hard coded hard drive BIOS geometries" Tags="&lt;ibm-pc&gt;&lt;hard-disk&gt;&lt;bios&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13514" PostTypeId="2" ParentId="13513" CreationDate="2020-01-28T05:38:51.063" Score="15" Body="&lt;p&gt;&lt;a href=&quot;https://www.win.tue.nl/~aeb/linux/hdtypes/hdtypes-3.html&quot; rel=&quot;noreferrer&quot;&gt;The tables&lt;/a&gt; were built using the parameters for various real hard drives. For example, type 1 is used for the original Shugart drives used in the PC XT (&lt;a href=&quot;https://stason.org/TULARC/pc/hard-drives-hdd/ibm/10MB-5-25-10MB-5-25-FH-MFM-ST412.html&quot; rel=&quot;noreferrer&quot;&gt;ST506&lt;/a&gt;). So the intention was for the drive types to be useful, and at least some of them were; in the linked page, scroll down to &lt;a href=&quot;https://www.win.tue.nl/~aeb/linux/hdtypes/hdtypes-3.html#ss3.5&quot; rel=&quot;noreferrer&quot;&gt;the list of Award-486 drive types&lt;/a&gt; to see more examples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each BIOS manufacturer had a list, as can be seen in the page linked above. The first 14 entries came from the PC AT’s BIOS, the rest varied although various settings show up in common across different BIOSes. The list of drives would change from one generation of BIOS to another, sometimes even from on BIOS revision to another; but all clones running the same BIOS version could be expected to have the same list of drive types.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The end of the table came when drives acquired the ability to report their own geometry; that allowed the users to set everything to “auto” (although setups still had to allow manual entry for a long time, to support older drives).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-01-28T10:39:39.893" LastActivityDate="2020-01-28T10:39:39.893" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13515" PostTypeId="1" AcceptedAnswerId="13519" CreationDate="2020-01-28T11:45:51.670" Score="10" ViewCount="1980" Body="&lt;p&gt;The 6502 pinout has a reset pin, which presumably would be used if a reset button is pressed on the machine containing the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the 6507 contains the same pin. The 6507 was designed at the request of Atari, to be an extremely stripped-down version of the chip, to save manufacturing cost by eliminating pins that were not absolutely needed; in particular, it can only address 8K of memory. Yet it still has the reset pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I conjecture from this that even if the machine does not have a reset button, the supporting circuitry must arrange for reset to be signaled when the power is turned on, in order to signal the CPU to place itself in a known suitable state to start executing code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this correct?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-29T00:43:14.363" Title="6502 reset pin: always needed on power on?" Tags="&lt;hardware&gt;&lt;6502&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13516" PostTypeId="2" ParentId="13515" CreationDate="2020-01-28T12:04:49.037" Score="9" Body="&lt;p&gt;Yes, you're correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original 6500 family does not include a Power-On-Reset (POR) circuitry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reliable startup reset has to be pulled after power up. To avoid unintended execution of random code, it's recommended to keep Reset pulled by default and only release it after power is stabilized.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, depending on your setup it may be acceptable not to do so. That's why one had to press Reset on the very first Apple II as well. On the Atari it was even more useful beyond startup, as reset is a great way to ... well ... reset any game, no matter what the internal state is. So without a Reset, some kind of interrupt would have been needed, eating up a pin anyway&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-29T00:43:14.363" LastActivityDate="2020-01-29T00:43:14.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13517" PostTypeId="2" ParentId="13479" CreationDate="2020-01-28T13:38:34.117" Score="4" Body="&lt;p&gt;Callback is eventually present since the very first days of computing - right after arbitrary jumps and subroutines were invented :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The oldest case of organized callback, that is outside some custom package, as part of a standard programming system, I ever encountered is the Exit Routine mechanism under /360 style OS (like DOS/360). Exit Routine is the name used by IBM (at the time) for callbacks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example an Exit List (Macro EXLST) could (and should) be provided with a Data Control Block (DCB) used to specify an I/O operation to overwrite default handling for certain situations, like device/block/record not found. This included no only error conditions, but as well handling and progress situations, like tape/disk assignment, operator interaction or begin/end of file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar this mechanic was used for things like timer handling (Routines called when a certain time was passed) or message handling (between processes/tasks).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition many high level runtime systems like databases did use a variation thereof. For example, a program could issue custom filter over a record range by providing a callback returning a match/no-match code. The framework would call it with every record and issue the records to the main program when a match happened. This was done to increase thruput due an extreme short code path (no copying, no overhead, just a few machine instructions for selection). Similar field selection call backs could be used and many more. Standard sort utilities worked with similar mechanics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic concept was present since 1965/66, introduced with IBM's BPS/TOS/DOS for the (back then) brand new /360 machines. Then again, I wouldn't be surprised to find standardised use before 1965.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I feel that the term [callback] itself might be misleading, as I understand that callback functions doesn't &quot;call back&quot; anything, but rather &quot;called back&quot; as a reaction to a condition (event)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, yes and no. It's all about the viewpoint. When seen fromm the routine, it for sure is &quot;called back&quot;, but at the time the routine is installed, it's like saying &quot;call (me) back&quot; whenever the condition is met.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-01-29T09:22:48.443" LastActivityDate="2020-01-29T09:22:48.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13518" PostTypeId="2" ParentId="13479" CreationDate="2020-01-28T14:54:01.480" Score="3" Body="&lt;p&gt;It really depends on what you think of as a &quot;callback&quot;. If you define it as &quot;arbitrary code provided by an outer routine, to be executed by an inner routine under certain circumstances&quot;, I would argue that the concept dates back to the arithmetic overflow handler supported by the original UNIVAC (1951).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, the programmer could put two instructions at a special point in memory, and if an arithmetic operation overflowed, those instructions would be executed before the following one. If the instructions were a transfer of control (a jump), the result would be executing an arbitrary callback in response to the overflow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is, since UNIVAC had (AFAIK) no way to push or even programmatically read the program counter, control could not automatically return from the handler. For that matter, arithmetic overflow would generally be seen as a nonrecoverable error condition, rather than something to be invoked for routine-specific reasons. So while it technically probably counts as The First Callback, I don't think it satisfies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, I'd look a little later, to the UNIVAC 1103 (1953). This computer implemented the concept of an &quot;interrupt handler&quot;, which could be triggered by the operator or by the program itself. The 1103's interrupt procedure allowed for the program counter to be saved and later returned to, which is the rest of what you'd need for a &quot;call and return&quot; style of callback.&lt;/p&gt;&#xA;" OwnerUserId="6475" LastActivityDate="2020-01-28T14:54:01.480" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13519" PostTypeId="2" ParentId="13515" CreationDate="2020-01-28T17:39:00.460" Score="9" Body="&lt;p&gt;The &lt;a href=&quot;http://archive.6502.org/datasheets/rockwell_r650x_r651x.pdf&quot; rel=&quot;noreferrer&quot;&gt;6502 data sheet&lt;/a&gt;  (archived at &lt;a href=&quot;http://archive.6502.org/&quot; rel=&quot;noreferrer&quot;&gt;http://archive.6502.org/&lt;/a&gt;) on page 2 gives the requirements for the RESET line as:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;After Vcc reaches 4.75 volts in a power up routine, reset must be held low for at least two clock cycles. At this time the R/W and SYNC signals become valid.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As I recall from using the chip, a poorly designed POR (power on reset) circuit would often lead to intermittent failure to operate properly conditions.&lt;/p&gt;&#xA;" OwnerUserId="13762" LastActivityDate="2020-01-28T17:39:00.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13520" PostTypeId="2" ParentId="13515" CreationDate="2020-01-28T19:49:50.643" Score="13" Body="&lt;p&gt;The hardware reset isn't an optional feature for a reset switch - it's an essential function for starting the CPU up correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the power supply rail rises, circuitry within the CPU, such as the register set, will take on random-ish values. The clock oscillator will unsteadily start working and CPU would start trying to operate before the supply was at a sufficient voltage for reliable operation and for interfacing with external circuitry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When in reset, the CPU will load internal latches and certain registers in its register set with initial values. When the CPU is released from reset, it is ready to start executing cleanly as described in the datasheet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the circuit around the CPU must hold the CPU in reset until (a) the supply rails are within specification and (b) the oscillator has started up and steadied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is typically done by waiting a minimum time after power is applied before releasing reset. This is often 10 ms or longer. The power supply may be monitored until its reached the correct voltage then reset released a minimum time afterwards. The latter is more commonplace these days as all-in-one ICs for it have become cheap.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastActivityDate="2020-01-28T19:49:50.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13521" PostTypeId="2" ParentId="13513" CreationDate="2020-01-28T19:51:27.443" Score="1" Body="&lt;p&gt;That custom started in a time where only a few tens of hard drive models plausibly usable with PC compatibles was on the market. This was the time of ST506 (MFM) style interfaces, and installing hard drives in that kind of system was a hard enough drive already without adding an additional source for dire mistakes and confusion (much potential for ending up with something that &lt;em&gt;seemed&lt;/em&gt; to work at first and later failed catastrophically...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It ended at the latest when ISA slots were phased out, since lack of an ISA slot made it impractical to use this style of drives with their ISA-only controller cards (BTW, with ST506 interface &quot;controller&quot;, not &quot;host adapter&quot;, is the correct term!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not precook, precomp - write precompensation.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2020-01-28T19:51:27.443" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13522" PostTypeId="2" ParentId="234" CreationDate="2020-01-28T20:44:02.407" Score="3" Body="&lt;p&gt;Others here have mentioned the inter-sector gaps, but I thought it&#xA;might be enlightening to describe just how much space these really&#xA;take; it's probably more than you might think.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today I happened to be working out code to format disks on my Fujitsu&#xA;FM-7, which uses 5.25&quot; double-sided, double-density floppies, just&#xA;like the IBM PC, with the same low-level (index marker, etc.) disk&#xA;formatting. But the FM-7 uses 16 × 256 byte sectors per track, for 320&#xA;KiB of user data storage per disk, whereas the PC uses 9 × 512 byte&#xA;sectors per track, for 360 KiB of user data storage. (These numbers&#xA;are the total number of data bytes that can be written in all the&#xA;sectors, i.e., what's available to the OS before filesystem overhead&#xA;or anything like that.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here (with a few minor approximations) are the raw bytes that actually&#xA;get written to disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The track starts (after the index mark) with &quot;post-index&quot; information,&#xA;that exists only once at the start track:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;80× $4E     post-index gap&#xA;12× $00     sync&#xA; 3× $C2     index address mark&#xA;    $FC     index address mark&#xA;50× $4E     gap&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then the following is written for each sector:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;12× $00     sync&#xA; 3× $A1     ID address mark&#xA;    $FE     ID address mark&#xA;    $__     Track number&#xA;    $__     Side number&#xA;    $__     Sector number&#xA;    $__     Sector length (1 for FM-7 256 bytes/sec, 2 for PC 512 bytes/sec)&#xA; 2× CRC     CRC bytes for the ID data&#xA;22× $4E     gap&#xA;12× $00     sync&#xA; 3× $A1     data address marker&#xA;    $FB     data address marker&#xA;SS× $__     sector data; SS = sector size (256 or 512)&#xA; 2× CRC     CRC bytes for the sector data&#xA;NN× $4E     gap; NN = 54 for 256 byte sectors, 84 for 512 byte sectors&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There will be a varying amount of extra $4E filler at the end, after&#xA;all the sectors, depending on the sector size, variance in the speed&#xA;of the disk, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the overhead here, after the user data itself, is 116 bytes for a&#xA;256 byte sector and 146 bytes for a 512 byte sector. This means that:&#xA;- The FM-7s 16 × 256-byte sectors, storing 4096 bytes of user data,&#xA;  use at least 6098 bytes of raw data on a track.&#xA;- The PC's 9 × 512-byte sectors, storing 4608 bytes of user data, need&#xA;  only 5922 bytes of raw data on a track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Storing 12% &lt;em&gt;more&lt;/em&gt; user data on the disk by increasing sector size&#xA;actually stores 3% &lt;em&gt;less&lt;/em&gt; actual raw data on the disk. There's no&#xA;advanced technology involved here; in fact if we were pushing the&#xA;limits of the disk it would be the lower-capacity format that would&#xA;fail first, as it ran out of track space to store all the extra empty&#xA;gaps it's putting on the track.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-01-28T20:44:02.407" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13523" PostTypeId="2" ParentId="13474" CreationDate="2020-01-28T22:06:55.480" Score="3" Body="&lt;p&gt;I wonder if it might also have been the influence of tradition/habit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things like pinball and pachinko have to be vertically oriented because the ball is pulled towards interaction with playing field elements (the bumpers, gates, etc.) by gravity, so the elements have to be stacked vertically.  A landscape pinball machine would make for short turns and ultimately prove unsatisfying.&lt;/p&gt;&#xA;" OwnerUserId="16091" LastActivityDate="2020-01-28T22:06:55.480" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13524" PostTypeId="2" ParentId="13500" CreationDate="2020-01-29T00:54:56.153" Score="3" Body="&lt;p&gt;Not sure if VHS counts as a cassette storage, but &lt;a href=&quot;https://en.wikipedia.org/wiki/ArVid&quot; rel=&quot;nofollow noreferrer&quot;&gt;ArVid&lt;/a&gt; did use ECC (Hamming in older models, Reed-Solomon in later models).&lt;/p&gt;&#xA;" OwnerUserId="5141" LastActivityDate="2020-01-29T00:54:56.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13525" PostTypeId="1" CreationDate="2020-01-29T04:56:38.447" Score="1" ViewCount="327" Body="&lt;p&gt;I've got a Fujitsu FM-7 with an external 5.25&quot; floppy drive unit; it&#xA;has a pair of 40-track, double-sided, double-density¹ drives. These&#xA;use a fairly common low-level track format: the standard &quot;IBM MFM&quot; (as&#xA;the HxC software calls it) encoding described &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13522/7208&quot;&gt;in this answer&lt;/a&gt;,&#xA;or in other words just like the IBM PC except with 256 byte instead of&#xA;512 byte sectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be handy if one of my modern Linux PCs could do&#xA;read sector, write sector and track format operations on these disks.²&#xA;(I am not concerned about anything beyond this; I am not looking for&#xA;software that understands filesystem formats.) Ideally I'd have a&#xA;choice of sector sizes (allowing me to use both the 256-bytes/sector&#xA;formats used by the FM-7, the NEC PC-8001, and many other 8-bit&#xA;machines, and the 512-bytes/sector formats used by the IBM PC and&#xA;similar), but I'm open to solutions that use only one sector size of&#xA;128, 256 or 512 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best approach I can think of off-hand is is to connect a floppy&#xA;drive to a disk controller chip along the lines of a Fujitsu MB8877 or&#xA;Western Digital &lt;a href=&quot;https://en.wikipedia.org/wiki/Western_Digital_FD1771&quot; rel=&quot;nofollow noreferrer&quot;&gt;WD1770&lt;/a&gt; (which is actually exactly what my external&#xA;drive unit does), and then program a microcontroller or Arduino board&#xA;to handle the interface.³ It would exchange commands and sector data&#xA;with the PC (probably just via a USB serial interface) and directly&#xA;drive the low-level interaction (which is timing-dependent) with the&#xA;disk controller chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there existing solutions out there that do this? What are my other&#xA;options? An indication of approximate cost (for devices or major&#xA;parts) would also be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of my PCs are laptops, and I would prefer something that could&#xA;work with those, but I do have both a Linux and a Windows desktop&#xA;machine with PCI-X slots available, if necessary. Sadly, my main Linux&#xA;desktop (using an &lt;a href=&quot;https://www.asus.com/Motherboards/P8H61MX/specifications/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASUS P8H61MX&lt;/a&gt; motherboard), even though it's&#xA;getting on more than ten years old, has no on-board floppy controller,&#xA;but solutions using PC floppy controllers might be useful to others.&#xA;(Or perhaps you can provide a pointer to a way to connect a floppy&#xA;controller usable for this purpose to a modern PC.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹ &lt;sub&gt;Yes, I know that the drives and diskettes themselves are not&#xA;double-density; it's the FM vs. MFM encoding that determines the&#xA;density, but this phrasing seemed the easiest way to get across the&#xA;information I'm trying to express.&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;² &lt;sub&gt;If a solution can't provide sector-level reads and writes to&#xA;the disk itself, full-track reads and writes would also be acceptable,&#xA;though not preferred. But that solution would also have to provide a&#xA;way to get sectors out of the track, let me change or replace the data&#xA;in them, and then write out the new track to the disk.&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;³ &lt;sub&gt;I'd also be happy to use a parallel port or GPIO interface on&#xA;the PC itself for this, but I worry about timing problems even with a&#xA;traditional parallel port, much less the USB versions I'd be using on&#xA;my laptop.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-01-30T02:16:52.543" LastActivityDate="2020-01-30T02:16:52.543" Title="How can I read/write/format 5.25&quot; 40-track MFM floppies on modern systems?" Tags="&lt;floppy-disk&gt;&lt;floppy-drive&gt;" AnswerCount="0" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="13526" PostTypeId="1" CreationDate="2020-01-29T07:15:14.263" Score="2" ViewCount="171" Body="&lt;p&gt;I got old Toshiba 100CS for a good price.&#xA;After some inspection, I noticed that AutoResume backup battery and RTC battery are already gone bad, and seems can't hold charge. I've checked eBay for replacements, but only got 2.4V RTC batteries. (I don't bother about main battery because I'm gonna use AC power only.)&lt;/p&gt;&#xA;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th style=&quot;text-align: left;&quot;&gt;Battery name&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: left;&quot;&gt;Material&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: right;&quot;&gt;Output voltage&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: right;&quot;&gt;Capacity&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;Main battery&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;Nickel Metal Hydride&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;12 V&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;2600 mAh&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;Backup battery&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;Nickel Metal Hydride&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;7.2 V&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;110 mAh&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;RTC battery&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;Nickel Metal Hydride&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;3.6 V&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;30 mAh&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;So, it seems that these are just plain Ni-MH cells without any circuitry. Therefore, I'm gonna buy some small Ni-MH cells and fabricate one. Is it okay to do this?&lt;/p&gt;&#xA;" OwnerUserId="16093" LastEditorUserId="15334" LastEditDate="2021-02-12T15:55:34.753" LastActivityDate="2021-02-12T15:55:34.753" Title="Can I change laptop's RTC and backup battery with generic Ni-MH?" Tags="&lt;restoration&gt;&lt;battery&gt;&lt;laptop&gt;&lt;toshiba&gt;&lt;rtc&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13527" PostTypeId="2" ParentId="13526" CreationDate="2020-01-29T08:46:15.353" Score="4" Body="&lt;p&gt;These NiMH batteries usually have very simple charging circuitry and replacing them with generic 3 or 6 x 1.2V NiMH cells in series will almost certainly be fine. I remember there were even (3.6V) battery packs being sold in the past for just this purpose. As the resulting capacity will be higher than that of the original batteries, they will need more time for their initial charge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, I’m finding plenty of 3.6V rechargeable “button” battery packs online. 7.2V packs are a bit harder to find in small capacities.&lt;/p&gt;&#xA;" OwnerUserId="15545" LastActivityDate="2020-01-29T08:46:15.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13528" PostTypeId="1" AcceptedAnswerId="14274" CreationDate="2020-01-29T08:59:07.730" Score="31" ViewCount="3404" Body="&lt;p&gt;In 3D graphics, vertex transformation is the process of converting x,y,z coordinates in 3D space, to x,y coordinates on the screen. According to &lt;a href=&quot;https://www.khronos.org/opengl/wiki/Vertex_Transformation&quot; rel=&quot;noreferrer&quot;&gt;https://www.khronos.org/opengl/wiki/Vertex_Transformation&lt;/a&gt; it is done by matrix multiplication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That sounds great on modern hardware, but Elite implemented true 3D on 6502-based machines; wireframe to be sure, but that requires vertex transformation nonetheless. The problem I have with imagining this being done by matrix multiplication is that the 6502 was a CPU on which adding a pair of 16-bit numbers took seven instructions. It seems difficult to imagine it multiplying matrices fast enough to animate three-dimensional objects reasonably smoothly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I underestimating the speed at which matrices were actually multiplied, or did Elite use some faster trick for vertex transformation?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-04-02T19:11:10.610" Title="How did Elite do vertex transformation?" Tags="&lt;graphics&gt;&lt;programming&gt;&lt;6502&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13529" PostTypeId="2" ParentId="13528" CreationDate="2020-01-29T09:09:04.397" Score="46" Body="&lt;p&gt;Like all games from that era, cheating and tables.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Two 256 byte tables and logarithms gave a 10x speed boost on multiply and divide on Commodore 64 at least.&lt;/li&gt;&#xA;&lt;li&gt;Matrix operations using addition only for fixed known rotation rates.&lt;/li&gt;&#xA;&lt;li&gt;Lazy evaluation.&lt;/li&gt;&#xA;&lt;li&gt;Only convex shapes making hidden line removal simpler and hidden line removal meaning only half the vertices needed to be considered.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is discussed by David Braben himself from about the 24:10 mark in &lt;a href=&quot;https://www.gdcvault.com/play/1014628/Classic-Game-Postmortem&quot; rel=&quot;noreferrer&quot;&gt;this GDC presentation.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3912" LastEditorUserId="3912" LastEditDate="2020-01-29T09:15:44.637" LastActivityDate="2020-01-29T09:15:44.637" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13530" PostTypeId="1" CreationDate="2020-01-29T10:50:47.297" Score="4" ViewCount="131" Body="&lt;p&gt;I'm interested in how graphics hardware has worked at different tech levels. Having looked at &lt;a href=&quot;http://www.mayhem64.co.uk/c64design2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;an annotated die photo of the VIC-II&lt;/a&gt; for example, I now feel I have a much better understanding of how it actually works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there such a photo available of a 3D graphics chip? Specifically, I'm talking about the era from the mid-nineties through the noughts, after true 3D graphics started getting hardware acceleration, and before the GPGPU, so one of the graphics chips from the fifth or sixth generation consoles, or some contemporary PC chip like the GeForce 256.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="79" LastEditDate="2020-01-29T14:22:04.323" LastActivityDate="2020-01-29T14:22:04.323" Title="Annotated die photo of 3D graphics chip" Tags="&lt;graphics&gt;&lt;chip&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13531" PostTypeId="1" AcceptedAnswerId="13532" CreationDate="2020-01-29T11:48:12.700" Score="11" ViewCount="1095" Body="&lt;p&gt;It is well known that the PlayStation 2 implemented compatibility with the previous console by essentially incorporating a PS1 on a chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact of backward compatibility is unremarkable as far as it goes. Many computational devices over the years have done that, indeed the vast majority of all programmable computational devices ever manufactured have done so, for the obvious reason that the ability to run existing software is a valuable feature that attracts customers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the chosen method is actually rather extraordinary when you stop and think about it. The IBM PC AT did not incorporate an original PC on a chip. Nor did the BBC Master thus implement compatibility with the BBC model B, nor the Macintosh 2 or the iPhone 2 or the iPad 2. They all provided backward compatibility by being supersets of the previous version. To the extent that they contained duplicates of the circuitry from the previous version, those duplicates were dispersed in the new circuitry, and used for their intended purpose even when the new machine was being used in its new mode. For example, when a 386 is running 32-bit code, the old AX register is part of the new EAX register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the PlayStation 2 implemented backward compatibility by segregating the entire previous machine into a separate chip (which, when a PS2 game was running, was used, if at all, only for some secondary purpose). Why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not about the CPU instruction set. Both machines are based on a MIPS CPU. The PS2 CPU also provides a high-performance vector unit, but that's as well as, not instead of, the MIPS core.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it to do with the graphics chip?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But generations of PC graphics cards have provided backward compatibility, and as far as I know, they have not done so by segregating the previous GPU onto a separate chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only salient difference I can think of is that PC graphics cards are accessed by device drivers. Could it be that there is something about GPU instruction sets that makes it unreasonably difficult to provide backward compatibility by the superset method normally used by CPUs, such that easy backward compatibility can only happen when games are screened from the hardware by a device driver, and when games have directly accessed the hardware like on a console, there is nothing for it but to segregate the old GPU onto a separate chip?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that is the case, then why are GPUs so different from CPUs in that regard? And if not, then what is the explanation?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-05-26T17:52:25.753" Title="Why did the PlayStation 2 implement backward compatibility that way?" Tags="&lt;graphics&gt;&lt;chip&gt;&lt;sony-playstation&gt;&lt;compatibility&gt;&lt;backward-compatibility&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13532" PostTypeId="2" ParentId="13531" CreationDate="2020-01-29T12:40:31.257" Score="14" Body="&lt;p&gt;Probably because it was the only way to get 100% compatibility with the old software library, which was required while most PS2 titles weren't developed yet. No one wants to buy a machine without games, and no one wants to upgrade and lose the ability to play old games.&lt;/p&gt;&#xA;&lt;p&gt;Note how console makers have an &amp;quot;all or nothing&amp;quot; way of handling compatibility. For instance Nintendo GameBoy Advance includes a Z80 only to be compatible with the GameBoy. Nintendo DS contains an ARM9 but also an ARM7 to be able to perfectly run GBA games.&lt;/p&gt;&#xA;&lt;p&gt;Here, the PlayStation 2 contains a 34 MHz MIPS processor only here to run PS1 games.&lt;/p&gt;&#xA;&lt;p&gt;The console isn't powerful enough to software emulate the PS1 hardware so you had to have a PS1 inside.&lt;/p&gt;&#xA;&lt;H3&gt;Some didn't follow that path:&lt;/H3&gt;&#xA;&lt;p&gt;When the PowerPC Macintosh was out, they didn't integrate a 68040 inside it, but went for emulation for old applications. This worked pretty well because the PowerPC was far more powerful than the 68040, and when an application called the operating system (quite a lot, on macintosh), it ran on native PPC code. The main wasn't to preserve 100% of the apps &amp;amp; games from yesteryear. Some where ported/recompiled, and the rest was just... slower.&lt;/p&gt;&#xA;&lt;p&gt;The Amiga 1200 was supposed to be backwards compatible with the Amiga 500 but a more powerful CPU (68020 vs 68000) meant that some games would fail because they were using 68000-specific tricks (prefetch, read SR, CPU-dependent loops).... Not talking about custom processors that got a rehaul too. And wrongly programmed old games would fail, just because they involuntarily trigger new features bit writing to locations that did nothing on the old chips, but triggered a feature on the new chips.&lt;/p&gt;&#xA;&lt;p&gt;So even if a lot of titles were running, not 100% (much less than that) of games were compatible.&lt;/p&gt;&#xA;&lt;p&gt;On Intel machines using windows, it's different:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First, Intel worked hard to ensure maximum compatibility with all x86 processors.&lt;/li&gt;&#xA;&lt;li&gt;Second, all games now use the operating system, and aren't banging the hardware&lt;/li&gt;&#xA;&lt;li&gt;Third, Windows/Intel don't guarantee that old software work. It's a &amp;quot;best effort&amp;quot; policy. But it's a very powerful computer and there are other ways: CPU/machine emulation, virtual machines (VMWare).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;On tablets, it's globally the same thing. The (mostly) ARM processor is backwards compatible, but the majority of the code is compiled, which means no low-level CPU tricks, self-modifying code, etc.. Also, applications depend on the system, not directly on the hardware. But I've seen old applications not working on higher versions of iOS.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="15334" LastEditDate="2021-05-26T17:52:25.753" LastActivityDate="2021-05-26T17:52:25.753" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="13533" PostTypeId="1" AcceptedAnswerId="13547" CreationDate="2020-01-29T12:57:38.987" Score="4" ViewCount="369" Body="&lt;p&gt;In earlier years, it was common for DRAM chips to be one bit wide, so that an 8-bit machine would use eight of them to form one memory bank. Occasionally, 4-bit-wide chips would be used, e.g. the later models of the Commodore 64 used a pair of 64kbitx4 chips for 64Kbyte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the mainboard of the PlayStation 1, which I believe was a 32-bit machine, it seems to have only something like four RAM chips. Were they 8 bits wide? Or even wider?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-01-30T06:09:35.813" Title="How wide were the RAM chips in the PlayStation 1?" Tags="&lt;memory&gt;&lt;chip&gt;&lt;ram&gt;&lt;sony-playstation&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13534" PostTypeId="1" AcceptedAnswerId="13537" CreationDate="2020-01-29T13:02:11.687" Score="12" ViewCount="1952" Body="&lt;p&gt;In &lt;em&gt;Michael Abrash's Graphics Programming Black Book&lt;/em&gt;, many chapters are dedicated to fast drawing of primitives, fills and copies using the 320x240 256-colour &lt;a href=&quot;http://twimgs.com/ddj/abrashblackbook/gpbb47.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mode X&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What MS-DOS games used Mode X?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many articles which refer indirectly to games using Mode X ('many games', 'popular games'), but I can't find any that &lt;strong&gt;name&lt;/strong&gt; a game as using Mode X.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only game that I've seen suggested is &lt;em&gt;Doom&lt;/em&gt;, and that game doesn't use the resolution of Mode X (320x240), but the resolution of 13h (320x200) with some of the Mode X features, resulting in a mode referred to as 'Mode Y'.&lt;/p&gt;&#xA;" OwnerUserId="15855" LastEditorUserId="599" LastEditDate="2020-04-13T16:37:52.650" LastActivityDate="2020-04-14T08:02:36.937" Title="What DOS games used Mode X as described by Michael Abrash?" Tags="&lt;ms-dos&gt;&lt;graphics&gt;&lt;vga&gt;&lt;books&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13535" PostTypeId="1" AcceptedAnswerId="13540" CreationDate="2020-01-29T13:16:41.533" Score="26" ViewCount="4488" Body="&lt;p&gt;If you had an Apple II, it was common in BASIC to reference memory locations above the 32K point by using a negative number. For example, if you wanted to click the speaker you would PEEK/POKE -16336 or if you wanted to enter the Apple II monitor, a CALL -768. Respectively, those would be 49200 ($C030) and 64568 ($FC38).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Commodore 64 by contrast, it was common to reference similar memory locations by their absolute value, e.g. the background color could be retrieved with a PEEK(53281) and many SYS calls were documented with non-negative numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that many of the 8-bit BASIC implementations were derived from a common Microsoft code base, it is curious why the two conventions were used. I would have thought that it was perhaps something as simple as that a few cycles would be saved by specifying the negative number (or not, depending on who was right), but then again the negative sign introduces an additional character to process and also that big about common heritage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the reason for the two conventions?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="6794" LastEditDate="2020-02-01T09:15:02.737" LastActivityDate="2020-02-02T14:43:54.997" Title="Why was it common to reference memory locations using negative numbers on some BASICs?" Tags="&lt;memory&gt;&lt;basic&gt;&lt;applesoft-basic&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13536" PostTypeId="2" ParentId="13535" CreationDate="2020-01-29T13:35:23.017" Score="7" Body="&lt;p&gt;In some BASICs integers were signed 16-bit values, so there was no integer higher than 32767. Thus, if you wanted a 16-bit value of $FFFF in an integer variable,you'd have to specify it as -1. You can see this in Commodore 64 BASIC V2:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;X%=32767&#xA;&#xA;READY&#xA;X%=32768&#xA;&#xA;?ILLEGAL QUANTITY ERROR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That said, the C64 &lt;code&gt;SYS&lt;/code&gt; didn't actually take an integer parameter; it appears to have taken a positive floating point number and done some conversion on it. (Or perhaps it didn't use the internal integer or FP formats at all.) Thus, not only can you call it with positive values higher than 32767, such as &lt;code&gt;SYS 64738&lt;/code&gt; to reset the machine, but you can't call it with negative numbers, such as &lt;code&gt;SYS -798&lt;/code&gt;, as you could with &lt;code&gt;CALL&lt;/code&gt; on the Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I very much doubt any of this was much about saving a few processing cycles; BASIC was so slow that anybody that concerned about performance would be moving at least part of his code to machine language, anyway. But especially without modern tooling a BASIC was a large program that was difficult to write, so developers would often take whatever convenient shortcuts came to hand based on what routines were available elsewhere in the code.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-01-29T13:51:01.987" LastActivityDate="2020-01-29T13:51:01.987" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13537" PostTypeId="2" ParentId="13534" CreationDate="2020-01-29T13:44:06.637" Score="16" Body="&lt;p&gt;&lt;a href=&quot;https://nerdlypleasures.blogspot.com/2014/09/classic-dos-pinball-games-mode-x-and.html&quot; rel=&quot;noreferrer&quot;&gt;Many PC pinball games&lt;/a&gt; use Mode X, notably Pinball Fantasies, Pinball Illusions and Epic Pinball.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nerdly Pleasures also has &lt;a href=&quot;https://nerdlypleasures.blogspot.com/2014/09/oddball-ega-and-vga-resolutions-when.html&quot; rel=&quot;noreferrer&quot;&gt;a comprehensive post on games using “unofficial” resolutions&lt;/a&gt;, which includes a number of other games which support 320×240: Quake, Earthworm Jim, The Lost Vikings, Norse by Norse West, and Scorched Earth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On Moby Games, such games are listed as &lt;a href=&quot;https://www.mobygames.com/attribute/sheet/attributeId,7/p,2/&quot; rel=&quot;noreferrer&quot;&gt;supporting “tweaked VGA” modes&lt;/a&gt; (although that probably includes more than Mode X games). Moby Games lists 149 games supported tweaked VGA.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-01-30T06:44:00.263" LastActivityDate="2020-01-30T06:44:00.263" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13539" PostTypeId="1" AcceptedAnswerId="13543" CreationDate="2020-01-29T14:45:12.993" Score="9" ViewCount="433" Body="&lt;p&gt;I have recently developed a half-float/16-bit float library (&lt;a href=&quot;https://github.com/artyom-beilis/zx_spectrum_deep_learning/tree/16_bit/f16&quot; rel=&quot;nofollow noreferrer&quot;&gt;link to Github&lt;/a&gt;) for Zilog Z80. It was a part of my project to run some neural network and graphics POCs for ZX Spectrum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The library uses IEEE 754 format and supports both inf/nan and subnormal values. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I implemented &lt;em&gt;addition&lt;/em&gt;, &lt;em&gt;subtraction&lt;/em&gt; and &lt;em&gt;multiplication&lt;/em&gt; in assembly and still have some functions in C (division, comparison, to/from int, to string) need to be ported to assembly and some new (sqrt/log/exp/trigonometry). So it is work in progress.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most importantly I found it to be virtually as fast as fixed precision calculations for many real applications. For example, multiplication of float16 is actually faster than fixed4:12 because it requires multiplication of 11 significant bits instead of 16.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here some runtime results:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;3d graphics with object rotation :&#xA;f16: 10.16s/4.9FPS&#xA;fix: 9.82s/5.0FPS&#xA;&#xA;Mandelbrot 256 by 192 pixels&#xA;f16: 33:53&#xA;fix: 19:43&#xA;&#xA;Neural network training mnist digits 0-1&#xA;type: train/test&#xA;f16: 1:53/0:37&#xA;fix: 1:48/0:34&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I this it can be very valuable since it provides quite a large dynamic range and performance close to fixed point computing, being much faster and having much smaller data footprint than full 32-bit floating point one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; where can I find communities that can be interested/benefit from such a project?&lt;/p&gt;&#xA;" OwnerUserId="16098" LastEditorUserId="11208" LastEditDate="2020-01-29T21:23:19.503" LastActivityDate="2020-01-29T21:23:19.503" Title="Where to share/who may be interested in IEEE 16 bit half float library for Zilog Z80?" Tags="&lt;z80&gt;&lt;zx-spectrum&gt;&lt;floating-point&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13540" PostTypeId="2" ParentId="13535" CreationDate="2020-01-29T14:51:54.383" Score="53" Body="&lt;p&gt;The difference between Applesoft BASIC and the other Microsoft 6502 BASIC derivatives can be explained by the fact that Applesoft BASIC was not the first BASIC for the Apple II; the first was Apple II Integer BASIC, in turn derived from Apple I BASIC, which had been independently created by The Woz. Integer BASIC supported only 16-Bit signed integers as a numeric data type, so no positive numbers beyond 2&lt;sup&gt;15&lt;/sup&gt;-1 = 32767 decimal = $7FFF hex were available, necessitating the use of negative numbers for higher addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Apple adapted the Microsoft 6502 BASIC core to their machines to quickly meet the demand for a floating-point capable BASIC, they did some changes to the code base to somewhat increase source code compatibility with the (very different) Integer BASIC core. One of them was that they allowed (but no longer required) the use of negative numbers to represent addresses beyond 32767. It was probably just inertia that kept people using the old notation with negative numbers, that and the fact that e.g. &lt;code&gt;CALL -151&lt;/code&gt; for entering the monitor was easier to remember than the now equally valid &lt;code&gt;CALL 65385&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore, on the other hand, used the Microsoft 6502 BASIC code pretty much as-is for their early PET models and also for the VIC-20 and the C64.&lt;/p&gt;&#xA;" OwnerUserId="16057" LastEditorUserId="16057" LastEditDate="2020-01-29T14:57:05.640" LastActivityDate="2020-01-29T14:57:05.640" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13542" PostTypeId="2" ParentId="13539" CreationDate="2020-01-29T19:56:43.170" Score="5" Body="&lt;p&gt;Github would seem to be the obvious place, and I see there are already a couple of libraries there&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A low-precision one (9 + 7 bits) &lt;a href=&quot;https://github.com/nagydani/lpfp&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/nagydani/lpfp&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;A bigger one (16 + 8 bits) &lt;a href=&quot;https://github.com/RoaldFre/z80fltptlib&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/RoaldFre/z80fltptlib&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11208" LastActivityDate="2020-01-29T19:56:43.170" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13543" PostTypeId="2" ParentId="13539" CreationDate="2020-01-29T20:08:32.070" Score="6" Body="&lt;p&gt;I am afraid that there are no general communities for &quot;processor-specific assembler routines&quot;. Pieces of information are fragmented to many websites and groups around the web. In the case of Zilog Z80 - it should be on the brand fan pages (e.g. &quot;Spectrum&quot; communities, &quot;Sharp MZ&quot;, &quot;CP/M&quot;, &quot;MSX&quot; etc.). But, fortunately, there is an &lt;a href=&quot;http://z80.info/&quot; rel=&quot;noreferrer&quot;&gt;info hub for Z80 related things&lt;/a&gt;. Try to contact its webmaster and offer the code to publish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The common way is, as mentioned, the GitHub. Use the proper tags and a good description of your code and publish it. Everyone will have a chance to find it and use it then. And please, do not forget to apply license terms (I strongly recommend the BSD-like one, e.g. the MIT license) to allow other developers to use your work.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-01-29T20:08:32.070" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13544" PostTypeId="2" ParentId="13535" CreationDate="2020-01-29T20:21:57.047" Score="3" Body="&lt;p&gt;Long story short: some BASICs have &quot;two-byte signed integers&quot; all around, so they can work only with numbers between -32768 and +32767. Other BASICs have their own format of numbers (e.g. Sinclair's ZX Spectrum BASIC - it uses 5 bytes to store a simple integer, so it can be -65535..65535).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the second case, it is up to the BASIC interpreter developer, which kind of number allows for PEEK, POKE and similar commands (e.g. SYS). There are some design decisions: convert FP to INT, or use only two-byte INT? Convert the negative number to 65536+x, or let it be? The reasons were quite subtle: shorter code, easy manipulating, lazy developer, human error, deadline upcoming, etc.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-01-29T20:21:57.047" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13545" PostTypeId="1" CreationDate="2020-01-30T00:47:41.307" Score="3" ViewCount="147" Body="&lt;p&gt;I need to find a replacement for the 40 pin connector in the Apple PowerBook 100 mainboard. It has a female flat cable in the top and 2 alternated lines of pins in the bottom. Picture attached. If you also point me some seller who sell this specific component, it would be helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XXlHc.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/FV8KC.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="16102" LastActivityDate="2020-01-30T01:51:30.430" Title="Which is the name of the 40-pin connector of a PowerBook 100 (Apple)?" Tags="&lt;apple&gt;&lt;connector&gt;&lt;powerbook&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13547" PostTypeId="2" ParentId="13533" CreationDate="2020-01-30T03:23:41.450" Score="2" Body="&lt;p&gt;Yes, the PlayStation 1 CPU had a 32-bit data bus, and RAM was always&#xA;32 bits wide, spread over one or more chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there were at least three major revisions of the Playstation&#xA;1 hardware and more than half a dozen different mainboards spread&#xA;across &lt;a href=&quot;https://en.wikipedia.org/wiki/PlayStation_models&quot; rel=&quot;nofollow noreferrer&quot;&gt;a lot of different models&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Information on the earlier models is hard to find. The GameSX wiki&#xA;&lt;a href=&quot;https://gamesx.com/wiki/doku.php?id=schematics:console_related_schematics&quot; rel=&quot;nofollow noreferrer&quot;&gt;schematics:console_related_schematics&lt;/a&gt; page has service&#xA;manuals for the 5500, 7500, 9000 and 101 (PSOne) series, but nothing&#xA;for the earlier 1000 and 3000 series consoles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 5500 series uses 4 × 8-bit-wide DRAM chips, IC106 through IC109 in&#xA;the &lt;a href=&quot;https://gamesx.com/wiki/lib/exe/fetch.php?media=schematics:sony_playstation_scph-5500-5501-5502-5503.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;service manual&lt;/a&gt; (PDF), as can be seen on pages 23 and 24 of&#xA;the scan (PU-18 board 1/5); the chips are at grid references B2&#xA;through I2. (The RAM data pins are labeled &lt;code&gt;IO0&lt;/code&gt; through &lt;code&gt;IO7&lt;/code&gt;; these&#xA;are connected via bus lines &lt;code&gt;CPH00&lt;/code&gt;-&lt;code&gt;CPH31&lt;/code&gt; to the &lt;code&gt;DD0&lt;/code&gt;-&lt;code&gt;DD31&lt;/code&gt; pins&#xA;of the CPU.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This appears to be the board for which &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13533/how-wide-were-the-ram-chips-in-the-playstation-1#comment42893_13533&quot;&gt;Tommy&lt;/a&gt; found &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/d/d7/PSX-SCPH-5001-Motherboard.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;a photo&lt;/a&gt;;&#xA;you can see &quot;PU-18&quot; written large in the centre and the four RAM chips&#xA;at the left, with adjacent matching IC numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/d/d7/PSX-SCPH-5001-Motherboard.jpg&quot; alt=&quot;PU-18 board photo&quot; title=&quot;PU-18 board photo&quot;/&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data I/O for the RAM are on pins 2-5 and 24-27 of the 28 pin&#xA;package. They're second through fifth pins from the top on either side&#xA;of the package in this photo, and you can clearly see traces from pins&#xA;24-27 of each chip leading to the data bus pins on the left side of&#xA;the CPU, and in between those groups of four, groups of four vias&#xA;adjacent to the CPU for pins 2-5, routed on the other side of the&#xA;board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am guessing that the board of the PlayStation you were examining&#xA;looks much like this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 7500 series (&lt;a href=&quot;https://gamesx.com/wiki/lib/exe/fetch.php?media=schematics:sony_playstation_scph-7500_service_manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;service manual&lt;/a&gt; PDF) changed to use a single&#xA;32-bit wide 16 Mbit DRAM (IC106).&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-01-30T06:09:35.813" LastActivityDate="2020-01-30T06:09:35.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13548" PostTypeId="2" ParentId="13528" CreationDate="2020-01-30T08:40:57.070" Score="6" Body="&lt;p&gt;all boils down to &lt;code&gt;(4x4) * (4x1)&lt;/code&gt; multiplication where some elements are known so it can be done with &lt;code&gt;4 * 4D&lt;/code&gt; dot products in full but sometimes its enough just &lt;code&gt;3 * 3D&lt;/code&gt; dots and single 3D addition ... For more info see &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/28084380/2521214&quot;&gt;Understanding 4x4 homogenous transform matrices&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;with fixed point and 4bit digit long multiplication + LUT is the multiplication not that slow ... Anyway asm was pretty fast and capable of doing this easily ... remember there where not many objects in Elite around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However at the time of Elite was common to use &lt;a href=&quot;https://en.wikipedia.org/wiki/Quaternion&quot; rel=&quot;nofollow noreferrer&quot;&gt;quaternions&lt;/a&gt; instead of transform matrices which required much less operations for rotation &lt;strong&gt;So Elite most likely used those.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;[Edit1]&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to  Mick Waites I found this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/fesh0r/newkind&quot; rel=&quot;nofollow noreferrer&quot;&gt;Elite The New Kind&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;which is reverse engineered BBC Elite source code in C. However from a quick look at the &lt;code&gt;alg_gfx.c&lt;/code&gt; its clear it uses different gfx engine at low level as some of the stuff did not exist at the time. Its something between BGI,3Dfx and SW. But it might be just resolution and gfx API handling for different platforms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;in &lt;code&gt;elite.h&lt;/code&gt; the player is defined as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct player_ship&#xA;{&#xA;    int max_speed;&#xA;    int max_roll;&#xA;    int max_climb;&#xA;    int max_fuel;&#xA;    int altitude;&#xA;    int cabtemp;&#xA;}; &#xA;&#xA;extern int flight_speed;&#xA;extern int flight_roll;&#xA;extern int flight_climb; &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which implies something like Euler Angles (but just 2 instead of 3 probably to avoid gimbal locks). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;in &lt;code&gt;vector.h&lt;/code&gt; there is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;struct vector&#xA;{&#xA;    double x;&#xA;    double y;&#xA;    double z;&#xA;};&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;typedef struct vector Matrix[3];&#xA;typedef struct vector Vector;&#xA;&#xA;void mult_matrix (struct vector *first, struct vector *second);&#xA;void mult_vector (struct vector *vec, struct vector *mat);&#xA;double vector_dot_product (struct vector *first, struct vector *second);&#xA;struct vector unit_vector (struct vector *vec);&#xA;void set_init_matrix (struct vector *mat);&#xA;void tidy_matrix (struct vector *mat); &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which implies &lt;code&gt;3x3&lt;/code&gt; rotational matrix usage (so not uniform 4x4 !!!). It looks like the transformations are done in &lt;code&gt;space.c&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void move_univ_object (struct univ_object *obj)&#xA;{&#xA;    double x,y,z;&#xA;    double k2;&#xA;    double alpha;&#xA;    double beta;&#xA;    int rotx,rotz;&#xA;    double speed;&#xA;&#xA;    alpha = flight_roll / 256.0;&#xA;    beta = flight_climb / 256.0;&#xA;&#xA;    x = obj-&amp;gt;location.x;&#xA;    y = obj-&amp;gt;location.y;&#xA;    z = obj-&amp;gt;location.z;&#xA;&#xA;    if (!(obj-&amp;gt;flags &amp;amp; FLG_DEAD))&#xA;    { &#xA;        if (obj-&amp;gt;velocity != 0)&#xA;        {&#xA;            speed = obj-&amp;gt;velocity;&#xA;            speed *= 1.5;   &#xA;            x += obj-&amp;gt;rotmat[2].x * speed; &#xA;            y += obj-&amp;gt;rotmat[2].y * speed; &#xA;            z += obj-&amp;gt;rotmat[2].z * speed; &#xA;        }&#xA;&#xA;        if (obj-&amp;gt;acceleration != 0)&#xA;        {&#xA;            obj-&amp;gt;velocity += obj-&amp;gt;acceleration;&#xA;            obj-&amp;gt;acceleration = 0;&#xA;            if (obj-&amp;gt;velocity &amp;gt; ship_list[obj-&amp;gt;type]-&amp;gt;velocity)&#xA;                obj-&amp;gt;velocity = ship_list[obj-&amp;gt;type]-&amp;gt;velocity;&#xA;&#xA;            if (obj-&amp;gt;velocity &amp;lt;= 0)&#xA;                obj-&amp;gt;velocity = 1;&#xA;        }&#xA;    }&#xA;&#xA;    k2 = y - alpha * x;&#xA;    z = z + beta * k2;&#xA;    y = k2 - z * beta;&#xA;    x = x + alpha * y;&#xA;&#xA;    z = z - flight_speed;&#xA;&#xA;    obj-&amp;gt;location.x = x;&#xA;    obj-&amp;gt;location.y = y;&#xA;    obj-&amp;gt;location.z = z;    &#xA;&#xA;    obj-&amp;gt;distance = sqrt (x*x + y*y + z*z);&#xA;&#xA;    if (obj-&amp;gt;type == SHIP_PLANET)&#xA;        beta = 0.0;&#xA;&#xA;    rotate_vec (&amp;amp;obj-&amp;gt;rotmat[2], alpha, beta);&#xA;    rotate_vec (&amp;amp;obj-&amp;gt;rotmat[1], alpha, beta);&#xA;    rotate_vec (&amp;amp;obj-&amp;gt;rotmat[0], alpha, beta);&#xA;&#xA;    if (obj-&amp;gt;flags &amp;amp; FLG_DEAD)&#xA;        return;&#xA;&#xA;&#xA;    rotx = obj-&amp;gt;rotx;&#xA;    rotz = obj-&amp;gt;rotz;&#xA;&#xA;    /* If necessary rotate the object around the X axis... */&#xA;&#xA;    if (rotx != 0)&#xA;    {&#xA;        rotate_x_first (&amp;amp;obj-&amp;gt;rotmat[2].x, &amp;amp;obj-&amp;gt;rotmat[1].x, rotx);&#xA;        rotate_x_first (&amp;amp;obj-&amp;gt;rotmat[2].y, &amp;amp;obj-&amp;gt;rotmat[1].y, rotx);    &#xA;        rotate_x_first (&amp;amp;obj-&amp;gt;rotmat[2].z, &amp;amp;obj-&amp;gt;rotmat[1].z, rotx);&#xA;&#xA;        if ((rotx != 127) &amp;amp;&amp;amp; (rotx != -127))&#xA;            obj-&amp;gt;rotx -= (rotx &amp;lt; 0) ? -1 : 1;&#xA;    }   &#xA;&#xA;&#xA;    /* If necessary rotate the object around the Z axis... */&#xA;&#xA;    if (rotz != 0)&#xA;    {   &#xA;        rotate_x_first (&amp;amp;obj-&amp;gt;rotmat[0].x, &amp;amp;obj-&amp;gt;rotmat[1].x, rotz);&#xA;        rotate_x_first (&amp;amp;obj-&amp;gt;rotmat[0].y, &amp;amp;obj-&amp;gt;rotmat[1].y, rotz);    &#xA;        rotate_x_first (&amp;amp;obj-&amp;gt;rotmat[0].z, &amp;amp;obj-&amp;gt;rotmat[1].z, rotz);    &#xA;&#xA;        if ((rotz != 127) &amp;amp;&amp;amp; (rotz != -127))&#xA;            obj-&amp;gt;rotz -= (rotz &amp;lt; 0) ? -1 : 1;&#xA;    }&#xA;&#xA;&#xA;    /* Orthonormalize the rotation matrix... */&#xA;&#xA;    tidy_matrix (obj-&amp;gt;rotmat);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So if I see it right the rendering uses &lt;strong&gt;3x3 rotation matrix + 3D translation vector&lt;/strong&gt; (I commonly use that too in the 8bit past) and to compute the translation there is a strange formula:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    k2 = y - alpha * x;&#xA;    z = z + beta * k2;&#xA;    y = k2 - z * beta;&#xA;    x = x + alpha * y;   &#xA;    z = z - flight_speed;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That looks &lt;strong&gt;something between quaternion, Euler angles and 2D rotation&lt;/strong&gt;... To sumarize the math is mostly:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3x3 rotation transform matrtix&lt;/li&gt;&#xA;&lt;li&gt;3D translation&lt;/li&gt;&#xA;&lt;li&gt;2 Euler angles&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2020-01-31T08:54:37.650" LastActivityDate="2020-01-31T08:54:37.650" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="13549" PostTypeId="1" AcceptedAnswerId="13550" CreationDate="2020-01-30T10:15:24.233" Score="11" ViewCount="1424" Body="&lt;p&gt;According to &lt;a href=&quot;https://all-things-andy-gavin.com/2011/02/06/making-crash-bandicoot-part-5/&quot; rel=&quot;noreferrer&quot;&gt;https://all-things-andy-gavin.com/2011/02/06/making-crash-bandicoot-part-5/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Andy had given Kelly a rough idea of how we were getting so much detail through the system: spooling.  Kelly asked Andy if he understood correctly that any move forward or backward in a level entailed loading in new data, a CD “hit.”  Andy proudly stated that indeed it did.  Kelly asked how many of these CD hits Andy thought a gamer that finished Crash would have.  Andy did some thinking and off the top of his head said “Roughly 120,000.”  Kelly became very silent for a moment and then quietly mumbled “the PlayStation CD drive is ‘rated’ for 70,000.”&lt;/p&gt;&#xA;&lt;p&gt;Kelly thought some more and said “let’s not mention that to anyone” and went back to get Sony on board with Crash.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So what happened? This seems like much too big a deal to not follow up! Given that Crash and its sequels sold millions of copies, even if the rating was to 5% failure probability instead of 50%, it seems hard to imagine hundreds of thousands of broken CD drives being just forgotten.&lt;/p&gt;&#xA;&lt;p&gt;Was the rating pessimistic by a particularly large margin? Did Sony switch to a more durable model of drive? Did they in fact eat the cost of replacing a bunch of drives without connecting it to Crash Bandicoot?&lt;/p&gt;&#xA;&lt;p&gt;Did Crash get away with it because no one else thought of constantly reading the drive that way? Or is it the case that other developers tried, and Sony smacked them down? Did all the Crash sequels do the same thing, or did they figure out a less drastic solution for Crash 2?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-01-31T22:39:46.480" Title="Did Crash Bandicoot wear out CD drives?" Tags="&lt;history&gt;&lt;sony-playstation&gt;&lt;cd-rom&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13550" PostTypeId="2" ParentId="13549" CreationDate="2020-01-30T11:16:18.247" Score="7" Body="&lt;p&gt;The data here is a bit unclear what the mentioned measurement of 'hits' is about and where the percentage of 5 or 50 comes from. The whole setup doesn't give much information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets try to see what it could mean in relation to real world numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CD-Drives are usually not rated in 'hits' but MTBF hours, like most machinery, often amplified by duty percentage. A typical early 90s drive, like a Mitsume 2x drive had a 5,000 hours MTBF at 100% duty, while a late 90s 12x drive, like the CRMC-FX240, was rated at 50,000 hours power on with 40% duty (equalling 20,000 hrs at 100%). After 2000 these times walked up to more than 100,000 hrs. For now it may be safe to assume that Mitsumi wasn't in the highest class of reliability :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5,000 hours of usage are quite a lot for a single game. That's like playing for 8 hours a day, 5 days a week for 2.5 straight years. Unless a particular drive ends up in the 16-percentile of standard distribution this guarantees a full year of playtime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sounds not really plausible. So what about the mentioned 70,000 'hits'?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cited text can be read as if this may mean each access of the drive, which happendes whenever the scene changes - like a new level or screen. Assuming that such a screen change will happen every 10 seconds, 120,000 hits would end up being like more than 300 hours of play - about a year by playing an hour a day, or still 8 weeks of daily 8 hours play if payed to do so :)) Did they really think it would take that long to finish that game?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, a bit strange, isn't it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, without some useful related data, I'd put these numbers into the distant memory category, with no real world meaning.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-01-30T11:16:18.247" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13551" PostTypeId="1" AcceptedAnswerId="13553" CreationDate="2020-01-30T12:29:59.723" Score="5" ViewCount="659" Body="&lt;p&gt;The PlayStation 1 had two megabytes of main memory, one megabyte of video memory and half a megabyte of audio memory. Squeezing everything to fit into these limits was one of the big challenges of developing a game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As with other consoles, games were written using specialized, expensive, proprietary development kits provided by Sony, which had similar hardware to the regular console but also the ability to download software. (There seems to have also been a development kit version called 'Net Yaroze' which was cheaper, less capable and sold to hobbyists; I'm talking here about the regular kit, sold to licensed commercial developers.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a developer viewpoint, it would be advantageous to have more memory in the development kit, so you wouldn't have to worry about squeezing your code and data until after doing your iteration on the gameplay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How much memory did the (standard, official) PlayStation development kit have?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="2080" LastEditDate="2020-01-30T13:17:31.610" LastActivityDate="2020-01-30T15:08:03.433" Title="How much memory did the PlayStation development kit have?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;memory&gt;&lt;sony-playstation&gt;&lt;software-development-kit&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13552" PostTypeId="2" ParentId="13492" CreationDate="2020-01-30T15:01:49.217" Score="0" Body="&lt;p&gt;this fixes the decimals in the sys to 5&#xA;10 SYS00000 (and as such the string now has a fixed length). wastes 1 byte but then again a space also wastes 1 byte and that's common enough in stubs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;guess you can add &quot;IF BASICSTART+STUBSIZE &gt;= 10 /100/1000/10000 decimal&quot; changes to the added values to cover for all eventualities along with some extra .ASCIIZ .sprintf() lines (or simply remove the &quot;05&quot; from the &quot;d&quot; formatting as all you need to 'adjust' are the offsets anyway) as assembler macros. example for c64 but should work on all ms-basic running cbm machines and derivatives thereof by changing BASICRAM to whatever that machine expects.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BASICRAM=$0801                  ; 0801 = C64&#xA;.WORD BASICRAM&#xA;.ORG $0801&#xA;.WORD *+$0C             ; POINTER TO NEXT BASIC LINE&#xA;.WORD $000A             ; LINE NUMBER&#xA;.BYTE $9E               ; BASIC SYS COMMAND&#xA;                        ; ZERO TERMINATED ASCII ENCODED DECIMAL&#xA;.ASCIIZ .sprintf(&quot;%05d&quot;,*+$08)&#xA;.WORD $0000             ; END OF BASIC (NEXT POINTER $0000)&#xA;&#xA;.OUT .sprintf(&quot;%d&quot;,*)   ; DEBUG OUTPUT TO SHOW THAT IP/ORG/* MATCHES SYS DECIMAL&#xA;START:&#xA; LDA #$00&#xA; STA $D020&#xA; RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16108" LastActivityDate="2020-01-30T15:01:49.217" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13553" PostTypeId="2" ParentId="13551" CreationDate="2020-01-30T15:02:51.660" Score="7" Body="&lt;p&gt;For the PlayStation 1, development was done on &lt;a href=&quot;https://www.retroreversing.com/official-playStation-devkit&quot; rel=&quot;noreferrer&quot;&gt;a development kit&lt;/a&gt; which fit inside a PC; this included two ISA cards, and had 8 MiB of RAM for the PlayStation CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pre-production testing was done on &lt;a href=&quot;https://consolevariations.com/variation/console/playstation-1-debugging-station-blue/&quot; rel=&quot;noreferrer&quot;&gt;debugging consoles&lt;/a&gt;, which were closer to the production hardware, and only had 2 MiB of RAM. SN Systems (which designed the development kit) also produced &lt;a href=&quot;https://www.retroreversing.com/official-playstation-1-software-development-kit-(psyq)/#hardware-by-sn-systems-for-psy-q-debugging&quot; rel=&quot;noreferrer&quot;&gt;a board and connector&lt;/a&gt; which allowed the debugging consoles to be used for development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;https://en.wikipedia.org/wiki/PlayStation_models&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia’s list of PlayStation models&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-01-30T15:08:03.433" LastActivityDate="2020-01-30T15:08:03.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13555" PostTypeId="2" ParentId="13509" CreationDate="2020-01-30T15:42:31.437" Score="2" Body="&lt;p&gt;I found this &lt;a href=&quot;https://jcmit.net/MemDiskPrice-xl95.xls&quot; rel=&quot;nofollow noreferrer&quot;&gt;interesting resource&lt;/a&gt; that appears to list the &lt;em&gt;introductory&lt;/em&gt; pricing when devices appeared. Some items are listed as DRAM (I suspect that this is all forms of RAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is &lt;em&gt;not&lt;/em&gt; a complete answer but it is &lt;em&gt;way&lt;/em&gt; too big for a comment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing to keep in mind (particularly with semiconductors at the time as consumer electronics was becoming popular) is that the price falls over time as more are produced and processes upgraded, so even though the introductory pricing of 256Kbit (32 KB) is shown as $15,000.00 per MB, that would slowly (perhaps not so slowly) drop over time until end of life (when the price rises dramatically).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the price above is for a device introduced in 1978; a 256kbit part that was then introduced in 1979 (4 months later) was priced at introduction at $10,528.00 per MB, a reduction of about 30% in just a few months.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that, I would expect the pricing of 256K parts to continue to drop (and in line with newer parts) until the manufacturers simply were not selling enough to make them economically viable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That would take us to the time when older processors were dropping out of fashion and newer processors needed significantly more memory and even then (perhaps more so then) PCB space is at a premium so if you could save space (fewer parts, smaller PCB) it might make sense to pay a little more for one IC rather than 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The older processors (certainly the perennially mentioned 6502 / 65C02) were still in production until at least the mid 90s and would therefore have supported a supply chain producing 256kbit parts as early prices for the denser parts was still more expensive on a per bit basis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have any data for 1Mbit parts, but the 2Mbit (256KB) from 1982 (made by California Micro Devices) was initially priced at $1,980.00 per MB and as previously mentioned, I would expect that the cost per bit over the life cycle would continue to drop in line with the newer parts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the mid 1990s, the pricing for new parts was at £32.00 per MB and I would expect mature parts to be somewhere around that and perhaps up to twice that for the older (256kbit) parts of perhaps $64.00 per MB as the prices would have been rising over the past few years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the continuance of the 256kbit parts until the mid 90s is really not surprising and I would expect pricing to start increasing for the lower density parts around the early 90s (fewer produced, freeing up fab space for newer parts as demand for those increased while the demand for the lower density parts decreased).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Manufacturers used a number of tricks to keep (or push) the prices down; one such was done with the &lt;a href=&quot;https://www.cl.cam.ac.uk/teaching//2003/Hardware/datasheets/ht6116.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;6116 SRAM&lt;/a&gt;. If a bit (or more) in one logical half of the device was faulty, it was sold as a 6108A or a 6108B (depending on which half was good). This was possible as they were both in a 24 pin package and the only difference was the implementation of A10 (for the 6116).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In at least one console (Atari IIRC) there was a jumper next to each device that would select either the upper half of the part or the lower half (by setting A10 for the device either high or low - the position was irrelevant for a 6108).&lt;/p&gt;&#xA;" OwnerUserId="4480" LastActivityDate="2020-01-30T15:42:31.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13557" PostTypeId="1" AcceptedAnswerId="13559" CreationDate="2020-01-31T11:19:28.720" Score="12" ViewCount="1943" Body="&lt;p&gt;According to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5019/why-do-3d-models-on-the-playstation-1-wobble-so-much&quot;&gt;Why do 3D models on the PlayStation 1 “wobble” so much?&lt;/a&gt; the PlayStation had a problem with wobbly graphics because&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Filling a triangle involves visiting every pixel within it and deciding which colour to put there. To paint a texture that properly obeys perspective you'd need to perform a divide stemming from that 1/z operation for every pixel.&lt;/p&gt;&#xA;&lt;p&gt;Divides are expensive so the original Playstation doesn't do them. It just squeezes the texture to fit, disregarding any consideration of perspective. That's only mathematically correct if 1/z is constant over the entire triangle, so you tend to see greater problems with geometry as it gets to a greater angle and as it gets closer to the camera.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This makes sense. Division is expensive relative to other arithmetic operators, so it's not surprising the PlayStation graphics chip couldn't afford to do it for every pixel.&lt;/p&gt;&#xA;&lt;p&gt;But then how come the Saturn and the Nintendo 64 could? Did they actually carry out a division for every pixel? Or some approximation thereof that was good enough to avoid wobble? Or some other solution?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-07T21:25:08.760" Title="How did most fifth-generation consoles avoid wobbly graphics?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;graphics&gt;&lt;game-consoles&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13558" PostTypeId="1" AcceptedAnswerId="13567" CreationDate="2020-01-31T12:14:30.070" Score="6" ViewCount="697" Body="&lt;p&gt;At the heart of the PlayStation 2 were a pair of custom chips, described in &lt;a href=&quot;https://en.wikipedia.org/wiki/PlayStation_2_technical_specifications&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/PlayStation_2_technical_specifications&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;CPU: MIPS III R5900-based &amp;quot;Emotion Engine&amp;quot;, clocked at 294.912 MHz (299 MHz on newer versions), with 128-bit SIMD capabilities[4][5] 250 nm CMOS manufacturing (ending with 65 nm CMOS), 13.5 million transistors, 225 mm² die size,[6] 15 W dissipation (combined EE+GS in SCPH-7500x: 86 mm², 53.5 million transistors)[1] (combined EE+GS+RDRAM+DRAM in SCPH-7900x ended with 65 nm CMOS design)[7]&lt;/p&gt;&#xA;&lt;p&gt;Parallel rendering processor with embedded DRAM &amp;quot;Graphics Synthesizer&amp;quot; (GS) clocked at 147.456 MHz 279 mm² die (combined EE+GS in SCPH-7500x: 86 mm², 53.5 million transistors)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Both custom chips; from a design perspective it would've been as easy – indeed, slightly easier – to merge them into one chip at the start, as was done in a later revision of the hardware. Presumably there was a reason for not doing this at the start.&lt;/p&gt;&#xA;&lt;p&gt;In the calculation of yield of chips from a wafer, there is an exponential term; basically, if a chip gets too large, it starts becoming exponentially unlikely to get a chip with zero defects.&lt;/p&gt;&#xA;&lt;p&gt;The initial versions of the CPU and GPU above were over 200 mm^2, which is quite large. Conjecture: making them initially a single chip would have resulted in substantially diminished yield.&lt;/p&gt;&#xA;&lt;p&gt;Was that the reason, or was there another factor?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-03T12:23:58.330" Title="Why were the PlayStation 2 CPU and GPU initially separate chips?" Tags="&lt;history&gt;&lt;chip&gt;&lt;sony-playstation&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13559" PostTypeId="2" ParentId="13557" CreationDate="2020-01-31T15:44:15.020" Score="15" Body="&lt;p&gt;The Nintendo 64 not only has full-perspective texturing, it can afford bilinear filtering — for each output pixel the PS1 samples the input texture exactly once. The N64 samples it four times and linearly interpolates according to how close it is to each (in &lt;em&gt;two&lt;/em&gt; dimensions, hence &lt;em&gt;bi&lt;/em&gt;linear).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Saturn has a couple of tricks up its sleeve:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the primitive is a rectangle, not a triangle; and&lt;/li&gt;&#xA;&lt;li&gt;it can do multilayer 2d backgrounds and Mode 7-type floor effects.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Saturn gets to 3d by extending its sprite blitter so that they can be distorted into any quad. Which is a slightly tortured route, so the good Saturn games tend to have relatively simple geometry constructed from quads, and very low-resolution textures are common because you can't tile them without using multiple quads. So although the middles of each quad still shift around in a perspective-incorrect fashion it's usually less obvious due to the lower internal detail, and the lack of an obvious diagonal strut across each quad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A disadvantage is that the machine has significant issues with clipping — check out any video of Duke Nukem 3d or Quake where the player walks along a corridor close to the wall. Quite a few PS1 games do a similar thing where rather than determining exactly where a polygon intersects z=1 it's cheaper just to push any vertices that should be behind z=1 forward a bit, but on the Saturn it's even more pervasive because even if you're lucky and a quad is trimmed so that it's still a quad, you can't adjust texture coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sega themselves adopted a very low-contrast texturing scheme partly to hide that; if you watch something like Sega Rally then you can see the geometry distorting as it meets the camera, but since each quad on the floor is just different shades of brown, each hills is just different shades of green, etc, it's not obvious.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Saturn also has an advantage for some kinds of game because of its support for Mode 7-style background layers, i.e. tile-based content that is distorted as the raster runs without ever being in a frame buffer, much like the Super Nintendo a generation before. As long as the camera doesn't roll, you can get perspective-correct drawing of floors and ceilings, correctly clipped. That's how Virtua Fighter 2 and all of the other fighting games that follow it do their arenas. So the backgrounds in those games are essentially free, and are never really rasterised in the framebuffer sense.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-01-31T15:44:15.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13560" PostTypeId="1" AcceptedAnswerId="13561" CreationDate="2020-01-31T19:49:51.097" Score="7" ViewCount="390" Body="&lt;p&gt;I’m reading the book “Atari Inc.: Business is Fun” by Curt Vendel and Marty Goldberg. (By the way, it’s a fun read, highly recommended.) It states that when the Atari engineers had been developing the Atari 800, they said that having slots like the Apple II is the “wet dream”. However, they felt it a necessity to maintain good relations with FCC, because of the Atari Consumer Division video games like Atari 2600, they cannot use the Apple strategy of dodging FCC approval by not selling the RF modulator themselves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, making another company doing this adapter and selling it separately from the Apple II. That made the Atari 800 only have Atari SIO serial connections and a heavily shielded computer with only slots for cartridges and RAM expansions. They also briefly cite the difficulties with the FCC approval that Texas Instruments TI-99 had, leading to the famous “sidecar” Expansion Slot. &#xA;Subsequently, in the early 80’s the FCC “relaxed” their standards to a more liberal policy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Question is: In the 70’s, had there been a way that a home computer using a TV as monitor could get FCC approval for Apple II style slots without cheating? Had this been doable with 70s technology and with 1970s FCC strict rules.&lt;/p&gt;&#xA;" OwnerUserId="8047" LastEditorUserId="3316" LastEditDate="2020-02-01T03:06:29.267" LastActivityDate="2020-02-01T19:31:15.463" Title="In the 1970s, had there been a way that a home computer using a TV as monitor could get FCC approval for Apple II style slots without cheating?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;atari-800&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13561" PostTypeId="2" ParentId="13560" CreationDate="2020-01-31T20:46:16.703" Score="7" Body="&lt;p&gt;The question seams to be based on the assumption that the Atari 800 slots are somehow not 'real' slots. Similar it implies that the mentioned &quot;70's FCC regulations&quot; were some kind of incredible strict. But the Atari slots do carry everything needed for expansion. And making a system to fit FCC Part 15 regulation wasn't some dark art, but could be rather easily accomplished.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's important to keep in mind that Part 15 was not restricted to explicit radio transmitters but anything emitting RF. So including a modulator or not did not really change the application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example for a Apple II slot type with good RF shielding is the IBM PC. A simple sheet metal bracket did it. The VIC-20 in contrast did get approval, even with the expansion slot exposed without any cover at all. So, not even open slots have been a real hurdle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea of FCC regulations as a major hurdle is maybe more of a modern myth, created by combining different stories amalgamed without looking at individual background and reasoning. The most important reason here may be the rather incoherent structure of Part 15. While it started out, in 1938, as a rather simple definition of physical terms about frequency and power, it grew form there more like (Anglo-Saxon) law does, 'improved' and 'enhanced' by an endless and not really coherent stream of case law. There was no basic update of Part 15 until 1985 and the first real 'redesign' only happened in 1989.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much of the real and imagined problems originated in this clandestine structure, where a lawyer was more accustomed to than an engineer. Atari and more importantly TI tried hard on the engineering side to solve a legal issue, while Apple thought to just sidestep it designing it to be no on purpose transmitter - despite Part 15 regulating &lt;em&gt;any&lt;/em&gt; HF device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In either case it was about avoiding going through the costly hassles of certification.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="15108" LastEditDate="2020-02-01T19:31:15.463" LastActivityDate="2020-02-01T19:31:15.463" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13562" PostTypeId="2" ParentId="13479" CreationDate="2020-01-31T21:55:38.890" Score="0" Body="&lt;p&gt;The term callback can have different meaning in different computing discourses (different in computer science and different in programming).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is further hard to give one general definition because of these reasons:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1. The mechanism of a callback is much older than the term itself&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term starting to become popular since 1985 (see the Google ngram about the &lt;a href=&quot;https://books.google.com/ngrams/graph?content=callback&amp;amp;year_start=1950&amp;amp;year_end=2015&amp;amp;corpus=15&amp;amp;smoothing=3&amp;amp;share=&amp;amp;direct_url=t1%3B%2Ccallback%3B%2Cc0#t1%3B%2Ccallback%3B%2Cc0&quot; rel=&quot;nofollow noreferrer&quot;&gt;popularity of the term over the years&lt;/a&gt;), the mechanism is generally described as &quot;&lt;em&gt;any executable code that is passed as an argument to other code that is expected to call back (execute) the argument at a given time.&lt;/em&gt;&quot; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Callback_%28computer_programming%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia: Callback (Computer Programming)&lt;/a&gt;) This definition is already fulfilled by machine code programs that set an interrupt vector for calling back an interrupt service function when some event occurs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2. To identify when an interrupt mechanism could be considered a callback&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This webpage briefly reviews the &lt;a href=&quot;https://people.cs.clemson.edu/~mark/interrupts.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;history of interrupts&lt;/a&gt; starting with the 1953 UNIVAC system which uses an interrupt for exception handling - the process execution jumps to a fixed address when an overflow occurs. However, since the address is fixed this does not fit the definition of callback used as a programming concept. On the other hand processors with a configurable interrupt vector would fulfill this, but somebody might have used a construction like &lt;code&gt;JMP xxxx&lt;/code&gt; at the fixed interrupt handler address and then just write the desired function address over the address part of the JMP command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while it had not been named this way, it is very likely that people used a callback mechanism in Assembler in the 1950s or 1960s. A &lt;a href=&quot;https://patents.google.com/patent/US3226694A/en&quot; rel=&quot;nofollow noreferrer&quot;&gt;patent from 1965&lt;/a&gt; mentions selectable addresses in interrupts, although it is unclear if this could be interpreted as an idea for interrupts to be configured in run-time. Definitely, there is hardware support for configurable interrupt handler addresses in the well-known 8-bit Microcontrollers Motorola 6800 (1974) and MOS 6502 (1975).&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorDisplayName="user13751" LastEditDate="2020-02-02T14:21:53.997" LastActivityDate="2020-02-02T14:21:53.997" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="13563" PostTypeId="2" ParentId="13549" CreationDate="2020-01-31T22:39:46.480" Score="4" Body="&lt;p&gt;Firstly, I haven't found any anecdotes of Crash Bandicoot causing premature drive failure in PlayStations.  While this mostly answers the basic question, it leads to the obvious question of why.  It certainly &lt;em&gt;is&lt;/em&gt; true that Crash Bandicoot &lt;em&gt;did&lt;/em&gt; rely on streaming data from the CD whenever the player moved through the level; the whole level simply wouldn't fit in RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key, I think, is that there are several very different forms of mechanical wear in a CD-ROM drive.  Probably the most severe form is a &lt;em&gt;start-stop cycle&lt;/em&gt; which stresses the spindle motor, its mountings and bearings, and the friction pad coupling it to the disc.  Next in line is a &lt;em&gt;seek&lt;/em&gt; where the head has to be moved across the disc surface, to find the correct place on the continuous spiral track that CDs use; the head transport mechanism is optimised for very fine movements and isn't very good at moving long distances.  Finally, the head has to switch on the laser, servo onto the track, verify that it's in the right place, and read the correct blocks into the drive's buffer - something that an audio CD player has to do continuously for an hour and a quarter at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a more basic game engine design, where the whole level is loaded up-front, a &quot;hit&quot; would probably involve at least one instance of all of these types; the disc would spin up, then several seek and read operations would occur, then the drive would go dormant again.  This is probably what the &quot;70,000 rating&quot; the Sony guy was thinking of referred to; remember, that's a number that has to correspond to the whole warranted life of the console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But a streamed level behaves much more like playing music in one of those portable CD Walkmans, where the data has to be read frequently, but the disc spins continuously and the head doesn't move very much.  Each &quot;hit&quot; in Crash Bandicoot only involved performing a read operation very close to where the previous one had left off.  Indeed there was a high probability that the blocks needed were already in the drive's read-ahead buffer, requiring no explicit mechanical activity to supply.  So even a drive of moderate quality would have been perfectly happy with that access pattern.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-01-31T22:39:46.480" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13564" PostTypeId="1" AcceptedAnswerId="13663" CreationDate="2020-02-01T00:09:42.123" Score="10" ViewCount="1753" Body="&lt;p&gt;I have here a Schneider Target PC 7640 which is an early PC AT compatible laptop.  It features a 640x400 plasma screen with 32k display RAM driven by a Yamaha V6366 B-F graphics controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TvOHx.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TvOHx.jpg&quot; alt=&quot;Schneider Target PC 7640&quot;&gt;&lt;/a&gt;&#xA;I was able to find the following documentation:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.sampson-jeff.com/temp/v6366.pdf&quot; rel=&quot;noreferrer&quot;&gt;A datasheet for the V6366&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://oldcomputers-ddns.org/public/pub/rechner/schneider_armstrad/pc%207640.zip&quot; rel=&quot;noreferrer&quot;&gt;circuit diagrams for the machine&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://fuz.su/~fuz/files/pc7640.rom&quot; rel=&quot;noreferrer&quot;&gt;PC 7640 BIOS ROM dump&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://fuz.su/~fuz/files/pc7640.zip&quot; rel=&quot;noreferrer&quot;&gt;System diskette with utilities&lt;/a&gt;.  The utilities &lt;code&gt;MONITOR&lt;/code&gt;, &lt;code&gt;PLASMA&lt;/code&gt;, and &lt;code&gt;PALETTE&lt;/code&gt; all directly reprogram the graphics controller and might give some insight into its function.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The graphics processor apparently supports a 640x400 B/W graphics mode for which the available 32k display RAM should be barely sufficient.  I would really like to use it since 640x200 just looks a bit odd.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I was unable to find any documentation on how the graphics chip works.  Does anybody know how to program it other than what CGA already supports or does anybody have extra documentation for this chip (supposedly there are application notes, but I was unable to find them)?&lt;/p&gt;&#xA;" OwnerUserId="24" LastEditorUserId="24" LastEditDate="2020-02-20T20:39:18.667" LastActivityDate="2020-07-21T08:03:34.230" Title="How do I configure a V6366 graphics controller for 640x400 B/W?" Tags="&lt;cga&gt;&lt;pc-at&gt;" AnswerCount="3" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="13565" PostTypeId="1" CreationDate="2020-02-01T00:49:37.853" Score="2" ViewCount="289" Body="&lt;p&gt;The PlayStation 2 provided backward compatibility with the PS1 by essentially incorporating an entire PS1 on a separate chip. It kept this arrangement permanently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PS3 started off providing backward compatibility the PS2 by the same method. However, the cost-reduced slim PS3 in 2009, dropped this feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This difference has been nagging at me for a long time. To be clear, either pattern – keeping the backward compatibility chip permanently, or dropping it after a few years – can be justified. What I'm still curious about is the reason for the &lt;em&gt;difference&lt;/em&gt;. Whatever the reason for one behavior, why was it &lt;em&gt;different&lt;/em&gt; in the other case?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was reminded of this when I stumbled across an old discussion on the matter: &lt;a href=&quot;https://web.archive.org/web/20090228051852/http://playstation.joystiq.com/2007/02/08/playstation-3-manufacturing-costs-to-go-down-way-down&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://web.archive.org/web/20090228051852/http://playstation.joystiq.com/2007/02/08/playstation-3-manufacturing-costs-to-go-down-way-down&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The removal of EE+GS would probably be 50 bucks&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now that's just someone guessing, and surely he must be way over the mark. EE+GS were first released in 2000. This is 2009 we are talking about. The combined chip cannot possibly cost $50. I am very surprised that it was enough to be considered worth dropping. I would expect by that point it could just be fused with something else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just how much did the combined EE+GS chip cost, just before it was discontinued?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-01T00:49:37.853" Title="What was the cost of the PS2 chip in the last PS3 to have it?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;chip&gt;&lt;cost&gt;&lt;sony-playstation&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13566" PostTypeId="2" ParentId="13558" CreationDate="2020-02-01T08:52:51.363" Score="1" Body="&lt;p&gt;To develop two parts separately is much easier than to develop one big IC. You can use two less or more independent teams. The developing cycle is cheaper and faster with smaller chips. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the designs are settled, you can start to manufacture prototypes or the first series, and the &quot;integration process&quot; can run in the background.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-02-01T08:52:51.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13567" PostTypeId="2" ParentId="13558" CreationDate="2020-02-01T10:45:09.277" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The initial versions of the CPU and GPU above were over 200 mm², which is quite large. Conjecture: making them initially a single chip would have resulted in substantially diminished yield.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;Being already at the upper end what can be done&lt;/h2&gt;&#xA;&lt;p&gt;A Pentium III (Coppermine) of that time had about 10M transistors and ~100 mm², so a die with more than 200 mm² was most definite at the upper end of what could be done with reasonable expectation of success. Doubling this might have been past what could have done at that time.&lt;/p&gt;&#xA;&lt;h2&gt;Increasing absolute yield rate&lt;/h2&gt;&#xA;&lt;p&gt;Chip fault rate goes not linearly, but exponentially with size. But already when assuming a constant defect rate per wafer, doubling the size will double the fault rate as faults are now be distributed among half the dies.&lt;/p&gt;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Let's assume two dies of 250 mm² each or one die of 500 mm²&lt;/li&gt;&#xA;&lt;li&gt;If a wafer offers 25.000 mm², it gives 100/50 dies (*1)&lt;/li&gt;&#xA;&lt;li&gt;If the process has an average of 10 defects, then 10 dies are dead (*2)&lt;/li&gt;&#xA;&lt;li&gt;For the 250 mm² die this gives 90% yield&lt;/li&gt;&#xA;&lt;li&gt;For the 500 mm² die this gives 80% yield&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Doing two wafers, one with each, will result in 90+90 good chips enabling the build of 90 machines, while doing the same two with double sized chips gives 40+40 good chips for 80 machines. It's easy to see that doing multiple chips will increase yield and decrease cost per chip.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was that the reason, or was there another factor?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;Reducing development complexity&lt;/h2&gt;&#xA;&lt;p&gt;It resources in development to do multiple chips, as that not only reduces complexity a lot but also allows independent schedules for both. This may sound contra intuitive at first, as they both have to finish before the machine can be build. But it allows each project to advance at their own pace for interim milestones while a common die would need to interlink every step and iteration. A classic problem of complex developments. When looking at development like production, it's much like before: Yield increase by reduced dependence.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Simplified by ignoring cut areas and alike&lt;/p&gt;&#xA;&lt;p&gt;*2 - Simplified by assuming even distribution&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-03T12:23:58.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13568" PostTypeId="2" ParentId="13558" CreationDate="2020-02-01T12:44:20.187" Score="2" Body="&lt;p&gt;One possible reason could be the production discard:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's assume 1 of 1000 CPUs produced is defective and the same is the case for the GPUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then 1000 of one million ICs are defective when producing the ICs separately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you place the CPU and the GPU on the same IC, there are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;One IC in one million that have both a defective CPU and a defective GPU&lt;/li&gt;&#xA;&lt;li&gt;999 ICs in million that have a working CPU but a defective GPU&lt;/li&gt;&#xA;&lt;li&gt;999 ICs in million that have a defective CPU but a working GPU&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All in all 1999 of one million ICs are defective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is nearly twice the number of defective ICs compared to producing CPU and GPU separately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand producing one large IC is cheaper than producing two smaller ICs (due to the costs of the IC housing and the soldering costs) if you don't consider the production discard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your production line produces many defective ICs, producing two ICs will be cheaper because you have less defective ICs; if your have a production line that only produces a few defective ICs, producing one large chip will be cheaper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Maybe&lt;/em&gt; the quality of the IC production could be improved during the time when the PlayStation was sold, so there were less defective ICs produced.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2020-02-01T12:44:20.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13569" PostTypeId="1" AcceptedAnswerId="13571" CreationDate="2020-02-01T17:15:01.680" Score="5" ViewCount="423" Body="&lt;p&gt;The Cell, the CPU of the PlayStation 3, contained one conventional core called the PPE, and up to eight specialized vector cores called SPEs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Cell_(microprocessor)&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Cell_(microprocessor)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The PPE, which is capable of running a conventional operating system, has control over the SPEs and can start, stop, interrupt, and schedule processes running on the SPEs. To this end the PPE has additional instructions relating to control of the SPEs. Unlike SPEs, the PPE can read and write the main memory and the local memories of SPEs through the standard load/store instructions. Despite having Turing complete architectures, the SPEs are not fully autonomous and require the PPE to prime them before they can do any useful work.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Given that the SPEs have Turing complete architectures, what exactly stops them being fully autonomous? What feature do they lack, and what resource would it have consumed too much of on the chip, to design them with that feature?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-19T07:26:09.063" Title="Why were the Cell SPEs unable to operate without instruction from the PPE?" Tags="&lt;chip&gt;&lt;cpu&gt;&lt;sony-playstation&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ClosedDate="2020-02-03T11:56:13.243" ContentLicense="CC BY-SA 4.0" />
  <row Id="13570" PostTypeId="2" ParentId="13569" CreationDate="2020-02-01T18:40:44.863" Score="8" Body="&lt;p&gt;What &quot;prevents&quot; it is the same thing that prevents graphics cards on modern PCs from running independently: there's simply no benefit to adding what would be needed to make them independent computers, and doing so what compromise the job that they're designed for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Cell_(microprocessor)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cell Broadband Engine&lt;/a&gt; consists of one or more Power PC cores (Power Processor Elements or PPEs), which are fairly standard modern (for the time) CPU cores, along with a set of coprocessors (Synergistic Processing Elements or SPEs) optimized for mathematical tasks. You'll note the parallel here with the CPU+GPU combination found in modern gaming PCs. Whereas the PPEs are designed for general-purpose computing, the SPEs are designed for large, fairly repetitive numerical jobs where bandwidth and certain specific kinds of processing power are more useful than computational flexibility. The SPEs trade off general purpose flexibility and latency for better concurrency, bandwidth and raw numerical computational power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optimizing CPU hardware by splitting it into programmer-visible specialized units is not new. The CDC 6600 (the world's fastest computer from 1964 to 1969) used a &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_6600#Description&quot; rel=&quot;nofollow noreferrer&quot;&gt;similar technique but the other way around&lt;/a&gt;: the CP or Central Processor was optimized for arithmetic operations and there were ten (much slower and cheaper) PPs or Peripheral Processors that dealt with running the operating system, doing I/O and so on.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-02-19T07:26:09.063" LastActivityDate="2020-02-19T07:26:09.063" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="13571" PostTypeId="2" ParentId="13569" CreationDate="2020-02-02T12:59:36.813" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;what exactly stops them being fully autonomous?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nothing - except for the way any tight coupled multicore CPU starts up. After reset only the primary core starts executing code, while the rest is kept in a hold state, until prepared and released by the primary core. Further any control about the configuration can (usually) only be exerted by the primary core.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of the PS3 cores, this means only the PPE has the functionality to setup/start/stop a any SPE. So any OS must run on the PPE. Of course, it could as well run on the SPE, but the scheduler to assign tasks to cores has to run on the PPE. Eventually this includes many other central components/drivers, most notably memory and IPK drivers, as only the PPE can access all memory, while SPE are limited to their own. Not to mention generic I/O. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;[In some way the setup is a distant remainder of classic Cray designs, were a general purpose I/O processor feeds specialized computing units - often itself supported by an external mainframe for schlepping the data - the I/O processor runs the OS, while the computing units do the 'superiour' work.]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, the SPE are, as noted, reduced/specialized function version, so any code to run there must be made especially to fit this instruction set. Moving any task cross core only works between SPE, not between PPE and SPE or back (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due this limited nature assigning any task to a PPE has an overhead to be considered. Similar if this task requires intermediate I/O. They perform best if assigned long running self contained jobs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A possible setup using the SPE as base for generic processing would effectively reduce the PPE to an I/O processor and making it a quite tight bottle neck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;Yes, in theory the SPE could be used for mundane tasks, but making them degrades the setup.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Yes, I'm aware, that come fine crafted code could be made to run on either, but beyond the most basic functions it will be a waste of resources one both.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4335" LastEditDate="2020-02-02T17:52:30.243" LastActivityDate="2020-02-02T17:52:30.243" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13572" PostTypeId="2" ParentId="13535" CreationDate="2020-02-02T14:43:54.997" Score="0" Body="&lt;p&gt;Because Microsoft BASIC didn't support hexadecimal constants until Revision 5 in 1981, and so early derivatives (Commodore, Applesoft, …) didn't either . It would have been more convenient and clearer to use the &lt;code&gt;&amp;amp;h&lt;/code&gt; notation (or &lt;code&gt;&amp;amp;&lt;/code&gt;, as used in BBC and Locomotive BASICs) had it been available.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-02-02T14:43:54.997" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13573" PostTypeId="1" CreationDate="2020-02-02T18:20:42.063" Score="21" ViewCount="6116" Body="&lt;p&gt;Here we are some decades on from the C64, and other 8 bit computers.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;New ideas that resulted in some new graphics effect or mode seem to happen, though we may be near the end of all that.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Took a long while though.  Longer than I suspect many expected.  Longer than I expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't recall OCS (original Chip Set) Amigas being exploited in quite this same way.  Were they?  Can you link me to examples?&lt;/p&gt;&#xA;" OwnerUserId="15357" LastActivityDate="2020-02-24T21:46:09.013" Title="Were the custom chips in the Amiga exploited for their hardware bugs like the ones in the C64 and Atari 8 bit computers were?" Tags="&lt;commodore-64&gt;&lt;amiga&gt;&lt;atari&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13574" PostTypeId="2" ParentId="13573" CreationDate="2020-02-02T18:41:35.813" Score="26" Body="&lt;p&gt;The Amiga OCS was not exploited in the same way as the C64's VIC-II simply because the OCS was designed from the beginning to support rapidly changing video output modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike the C64, and most 8-bit machines, the Amiga's display coprocessor (the &quot;Copper&quot;) existed to allow display mode updates to occur many times during the raster. For machines like the C64, such mid-raster techniques were more idiosyncratic and able to produce results that the original hardware designers (and less bold programmers) wouldn't really expect possible. But the Amiga's Copper made the exploration of these techniques commonplace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first common usage of these mid-raster mode changes was built into the Amiga's GUI (&quot;Intuition&quot;), which allowed a front screen to be smoothly dragged up or down to review the screens behind it. There could be many such screens at once, just limited by the CHIP RAM, and each screen could have any of the Amiga's display modes with its own resolution, palette, etc. Naturally, this capability was used in programs to allow portions of one app's logical screen to utilize different video modes. A common example being a 4096-color HAM mode paint program with a toolbox at the top or bottom that used a higher res non-HAM mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8uN58.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8uN58.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides the fact that most games and demos on the Amiga used these mid-raster effects, some photo showing apps also used them to great effect. The best example of this is &quot;Sliced-HAM&quot; mode, which allows 4096 colors in hi-res (640, or more pixels wide) by simply remapping the palette throughout the raster display. Such &quot;exploitation&quot; of the OCS could create images that were much more photo-realistic than the standard lo-res HAM mode.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-02-02T18:47:36.480" LastActivityDate="2020-02-02T18:47:36.480" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13575" PostTypeId="1" CreationDate="2020-02-02T19:28:32.953" Score="5" ViewCount="884" Body="&lt;p&gt;The &lt;code&gt;PRINT&lt;/code&gt;command in Commodore BASIC V2.0 (the one that runs on the Commodore 64) prints each character to the screen address (which is set by the byte in address 648) as well as putting the current color (stored in byte at address 646) in the respective color RAM address. Is it possible to modify the system with some pokes or similar so that the color RAM is not updated?&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="7208" LastEditDate="2020-02-04T07:32:15.493" LastActivityDate="2020-02-05T14:36:22.657" Title="Is it possible in Commodore BASIC V2.0 to configure the system so that the PRINT command does not update color?" Tags="&lt;commodore-64&gt;&lt;basic&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13576" PostTypeId="2" ParentId="13573" CreationDate="2020-02-02T20:34:39.260" Score="23" Body="&lt;p&gt;If one game would qualify, that would be Alien Breed: the game switches from PAL to NTSC rapidly to emulate a damaged CRT display (&lt;a href=&quot;https://youtu.be/N-aSztV1QLo?t=641&quot; rel=&quot;noreferrer&quot;&gt;extract of longplay at this point&lt;/a&gt;). A PAL to NTSC switch should occur at the top of a frame, so doing that in the middle of a frame can be considered like exploiting a bug.&lt;/p&gt;&#xA;&lt;p&gt;Now, whereas games didn't push the tricks too far, that wasn't the case with demos, who always tried to push things with the various co-processors.&lt;/p&gt;&#xA;&lt;p&gt;The co-processors are so complex that are a lot of cases where the behaviour is undocumented. WinUAE was often updated just to fix some borderline cases (sometimes not)&lt;/p&gt;&#xA;&lt;p&gt;In some cases the author of WinUAE &lt;a href=&quot;http://eab.abime.net/showpost.php?p=910834&amp;amp;postcount=50&quot; rel=&quot;noreferrer&quot;&gt;didn't want to imitate this&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.pouet.net/prod.php?which=1467&quot; rel=&quot;noreferrer&quot;&gt;COOL FRIDGE by UPFRONT&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Running on Quickstart A500 OCS/ECS glitches on &amp;quot;SMOOTH COPPER&amp;quot; part an UPFRONT logo only when is copper plasma behind (see attach pict. 1 &amp;amp; 2).&#xA;We have a winner here! This has to be the most ugliest and weirdest way to synchronize CPU to display..&lt;/p&gt;&#xA;&lt;p&gt;It WRITES to VPOSW to force CPU vs chipset sync! It writes to chipset registers in a loop, then increases vpos counter and writes it to VPOSW and then starts processing next line.&lt;/p&gt;&#xA;&lt;p&gt;WTF? Why? This is too crazy..&lt;/p&gt;&#xA;&lt;p&gt;I guess timing is close enough to real hsync and TV allows small jitter in hsyncs without causing display glitches.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;I don't think I want to bother with this. It would require huge changes everywhere..&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, yes, demo makers didn't really care about using the machine properly or not. They tried stuff, and if it worked on a real OCS Amiga, then they'd use that.&lt;/p&gt;&#xA;&lt;p&gt;Another example of a demo:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pax Americana by Complex -&amp;gt; (It writes to blitter registers while blitter is active ... impossible to fix without having blitter's original logic diagrams/schematics.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If the programmers found a way to save cycles and cause bugs that either are not noticeable or even created a cool effect they used it.&lt;/p&gt;&#xA;&lt;p&gt;Good luck to emulator programmers and new ECS/AGA machines to run those demos. Some demos can only run 100% perfectly on an OCS, unemulated Amiga.&lt;/p&gt;&#xA;&lt;p&gt;So for demos, willingly or unwillingly, one could say that the bugs/undocumented stuff were exploited.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-03T21:06:26.030" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13577" PostTypeId="2" ParentId="13575" CreationDate="2020-02-02T22:21:01.207" Score="10" Body="&lt;p&gt;One approach would be to mirror the BASIC ROM into RAM where it can easily be modified, and then simply NOP the instructions that perform the color change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I outline the technique used to mirror the ROMS into RAM in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1092/how-does-the-commodore-64-address-more-than-64-kilobytes-of-memory/1093#1093&quot;&gt;this post&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mapping the 64 seems to indicate the BASIC PRINT routing is located at $AAA0, and eventually calls the Kernal CHROUT.  I would start by disassembling the PRINT logic at $AAA0 with an eye toward where the color is output, and then override as desired.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="2080" LastEditDate="2020-02-02T22:35:11.790" LastActivityDate="2020-02-02T22:35:11.790" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13578" PostTypeId="2" ParentId="13573" CreationDate="2020-02-02T22:25:36.330" Score="16" Body="&lt;p&gt;And now here are some really non-trivial hacks played with amiga chipset:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;7-bitplane ECS hack: &lt;a href=&quot;https://groups.google.com/forum/#!topic/comp.sys.amiga.misc/HQBzx6E0K1Y&quot; rel=&quot;noreferrer&quot;&gt;https://groups.google.com/forum/#!topic/comp.sys.amiga.misc/HQBzx6E0K1Y&lt;/a&gt; (see the first message in the topic)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When you fill register $dff100 with value which has the number of bitplanes specified as 7 (lo-res) something strange is going on. &#xA;  On screen you will notice only 4 bitplanes but further checking has&#xA;  revealed to me that there are still some differences from usual 4&#xA;  bitplane mode.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;When 7 bitplanes are 'opened' color index is 6 bit wide.  (It would be better to say 5 bit wide with halfbright enabled.) First 4&#xA;  bits of color index is fetched from BPL1DAT-BPL4DAT ($110 through&#xA;  $116) registers which are filled through DMA channels.  5th and 6th&#xA;  bit of color index is taken from BPL5DAT and BPL6DAT which are NOT&#xA;  disturbed by DMA.  In other words, you can put in, i.e.  BPL5DAT value&#xA;  $aaaa and you will get at odd pixels on screen color which is indexed&#xA;  as $10 trough $1f.  (Same is with BPL6DAT, value $aaaa would give you&#xA;  halfbright odd pixels.)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The benefit of this is accesing of all colors ($00-$1f) without loosing speed of copper.  Okay, okay, this is maybe not so&#xA;  worth to use except in 4x4 pixel 4096 color rotators where you can now&#xA;  have 31 instead 30 colors for columns.  Now, you may ask why is my&#xA;  4096 color rotator in &quot;B2&quot; (Lazy Bones) using columns of color $01-$0f&#xA;  and non DMA sprites for columns of color $11-1f.  That was before I&#xA;  was sure that this 'trick' with 7 bitplanes will work on ECS Denise.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Lots of tricks described here: &lt;a href=&quot;http://eab.abime.net/showthread.php?t=19676&quot; rel=&quot;noreferrer&quot;&gt;http://eab.abime.net/showthread.php?t=19676&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;for example, copper-related:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;p&gt;Writing to &quot;dangerous register&quot; with COPCON bit 1 zeroed stops the copper (See AGA.guide COPCON for more information)&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;SKIP doesn't really skip anything, it just prevent's next MOVE to do its write. SKIP followed by WAIT or another SKIP never &quot;skips&quot;. (Game&#xA;  Apocalypse, uses SKIPs as nops in copper list)&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;skipped MOVE to &quot;dangerous register&quot; (and COPCON zeroed) also stops the copper (Rainbow Island requires this.. it has quite buggy&#xA;  copperlist.)&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Copper is waiting, disable copper DMA, access both COPJMP1 and COPJMP2, enable DMA -&gt; copper stops.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;blitter-related:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;D-channel can be disabled. No effect on anything.. (even speed of blit stays the same)&lt;/li&gt;&#xA;  &lt;li&gt;C must be enabled (nothing is drawn without C)&lt;/li&gt;&#xA;  &lt;li&gt;B (not tested)&lt;/li&gt;&#xA;  &lt;li&gt;disabling A stops BLTAPT from updating (result is incorrect lines)&lt;/li&gt;&#xA;  &lt;li&gt;BLTDMOD is not used in line mode. BLTCMOD is used for both C and D.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;And here is the most interesting undocumented feature ever:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;First pixel is written to address pointed by BLTDPT, all following pixels are written to address pointed by BLTCPT! (Demos Cardamon and&#xA;  Cardamom)&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-02-02T22:25:36.330" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13579" PostTypeId="2" ParentId="13575" CreationDate="2020-02-03T11:56:37.247" Score="2" Body="&lt;p&gt;Maybe you could peek the color at the specified address before you print it. Else, if color ram has different colors at each character location where you want to print, the next idea would be to poke the characters at screenmem (which does not affect colorram). I also think that you can define a function using DEF FN() that peeks and pokes characters (i.e. emulating PRINT) and not change the colorram. That would be an exercise for the reader to find out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://www.c64-wiki.com/wiki/DEF&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEF FN&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course the drawback is that this is very very slow.&lt;/p&gt;&#xA;" OwnerUserId="15637" LastActivityDate="2020-02-03T11:56:37.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13581" PostTypeId="1" CreationDate="2020-02-03T17:24:45.777" Score="4" ViewCount="291" Body="&lt;p&gt;What is the largest RAM expansion being manufactured today for Amiga and Commodore 8-bit?&lt;/p&gt;&#xA;" OwnerUserId="16124" LastEditorUserId="4335" LastEditDate="2020-03-18T13:58:47.283" LastActivityDate="2020-03-18T13:58:47.283" Title="What is the largest RAM expansion for Amiga or Commodore?" Tags="&lt;commodore-64&gt;&lt;amiga&gt;&lt;ram&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2020-02-03T18:22:39.590" ContentLicense="CC BY-SA 4.0" />
  <row Id="13582" PostTypeId="2" ParentId="13581" CreationDate="2020-02-03T17:47:06.433" Score="6" Body="&lt;p&gt;Big box Amigas (A3000/A4000) with Zorro-III 32-bit bus can accommodate 256MB RAM expansion cards, which are still being manufactured today. Utilizing 4 Zorro-III slots, this allows memory expansion of 1GB, which is quite substantial for a 68030/40/60 based computer. I'm not sure how you'd use it all, excepting some bespoke application that you could write yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Small Amigas such as the A1200 usually only acquire large expansion memories when that RAM is fitted to an accelerator card. Most of those cards &quot;only&quot; support up to 128 MB. Still, a very substantial amount of memory on an Amiga.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;standard&quot; large memory expansion for the 8-bit Commodore machines is expansion cards that mimic the original Commodore Ram Expansion Unit (&quot;REU&quot;). First released alongside the C128, the REU allowed a C128 to be expanded to 640KB by providing up to 512KB, or 8 banks of 64KB. It is also compatible with the C64. However, the way the REU functions means it can support up to 256 banks of 64KB, or 16MB of expansion memory. Compatible REU's of this size are still manufactured today. You can use such &quot;huge&quot; REU's as RAM disks, and I know some demo scene productions have made use of them to create full-motion video.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-02-03T17:52:41.793" LastActivityDate="2020-02-03T17:52:41.793" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13583" PostTypeId="2" ParentId="13575" CreationDate="2020-02-03T18:00:33.307" Score="2" Body="&lt;p&gt;The &quot;problem&quot; with a screen text rendering routine that also sets the color of each character cell it outputs is performance. It requires two writes for each character, but only one is required if you want to keep whatever color(s) are already assigned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are looking to improve the performance of the PRINT used in BASIC by foregoing unnecessary writes to the color RAM, then there are at least two approaches that should work.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You can copy BASIC to RAM and then modify the PRINT routine in place, as recommended by @Geo... This will not survive a cold start.&lt;/li&gt;&#xA;&lt;li&gt;You can adapt your basic program to call a bespoke print routine, written in ML, which only sets the character and leaves the color unchanged. Such a routine can be loaded via your BASIC program, access with the BASIC USR() function, and naturally unaffected by system restarts.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: You could also build the process of patching BASIC into your BASIC program so that just running it re-creates the environment after a restart. I think my preference for #2 is just based on adding new ML code is more straightforward than patching.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-02-03T18:00:33.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13584" PostTypeId="1" AcceptedAnswerId="13585" CreationDate="2020-02-03T18:02:03.573" Score="30" ViewCount="4780" Body="&lt;p&gt;A few days ago, I got Z80A CPU from eBay. So I tried to run it with classic 555 timer as a clock signal generator. I connected the 8-bit data bus of the CPU to the ground to &quot;simulate ROM&quot; (00 for NOP). I wired up all missing inputs: WAIT pin 24, pin 16, 17, 25, 26 to the 5V. And all address bus pins to LEDs to see the NOP, how it behaves. Normally it should count up to 2^16 without any problems, but it randomly freezes somewhere. I also tested my 2nd Zilog Z80C version with the same circuit and it works just fine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What could cause the freezing of the CPU? Is the CPU defective?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4dgj8.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4dgj8.jpg&quot; alt=&quot;Zilog Z80A on breadboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit (solution):&lt;/strong&gt; The problem was solved with blocking capacitor between + and - on breadboard (row 2), decoupling capacitor between +5V and GND on the Z80 and with the reset button. Thank you for all the answers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9vMpA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9vMpA.jpg&quot; alt=&quot;Solution&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16125" LastEditorUserId="16125" LastEditDate="2020-02-07T13:42:29.667" LastActivityDate="2020-02-07T13:42:29.667" Title="Zilog Z80 freezes while binary counting up to 65 536 (2^16)" Tags="&lt;history&gt;&lt;z80&gt;&lt;repair&gt;&lt;8-bit-microcomputers&gt;&lt;hardware-testing&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13585" PostTypeId="2" ParentId="13584" CreationDate="2020-02-03T18:49:48.083" Score="56" Body="&lt;p&gt;There are many issues here.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;As it is already said in comments, decoupling capacitor is a must!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;555 (non-CMOS) timer output is very much like the output of TTL ICs, however Z80 requires a firm logic one. When feeding Z80 clock pin from a TTL output, you should use pullup resistor of 200..500 Ohm.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;NMOS Z80 uses dynamic logic, that means it has some &lt;em&gt;minimal&lt;/em&gt; clocking frequency, and it won't work at all if your clock is much less than datasheet's minimal frequency (or a datasheet's maximal clock period).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You should also initialize Z80 with the /RESET signal lasting several clocks before ever hoping to get anything sane from the CPU.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The easiest way to get Z80 working in your configuration is to swap it to CMOS version, which is fully static (i.e., it has no limit to how slow the clock might be). Additional attention must be paid to get clock levels right (swap TTL 555 to CMOS one like TS555 or add a pullup resistor) and decoupling capacitors to both 555 and Z80. Finally, add a reset button and keep it pressed for several clocks in the beginning.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2020-02-03T18:56:05.403" LastActivityDate="2020-02-03T18:56:05.403" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13586" PostTypeId="1" AcceptedAnswerId="13590" CreationDate="2020-02-03T18:53:27.300" Score="3" ViewCount="200" Body="&lt;p&gt;I have an Amstrad CPC6128. I replaced and serviced the drive belt a few years ago, but now I am getting some disc errors. The drive is making noise but a few discs are reporting 'disc missing'. However, other discs continue to work as expected for read and write. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes I can 'cat' the files, but then the disc fails on subsequent access. I will take the drive apart  if I need to, but I'd like some guidance as to probable cause. &lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2020-02-05T09:25:51.497" LastActivityDate="2020-02-05T09:25:51.497" Title="Amstrad CPC6128 disc starting to fail?" Tags="&lt;floppy-drive&gt;&lt;cpc&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13587" PostTypeId="2" ParentId="13584" CreationDate="2020-02-04T01:18:10.647" Score="14" Body="&lt;p&gt;I'd just like to expand on a couple of points in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13585/7208&quot;&gt;lvd's excellent answer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;Reset Circuit&lt;/h3&gt;&#xA;&lt;p&gt;You might get by with just using a jumper wire to short the reset pin to ground for a brief moment after you've powered up the CPU. It's worked for me, but if you're having problems it's best to build a proper reset circuit.&lt;/p&gt;&#xA;&lt;p&gt;Many CPUs have a minimum length for the reset pulse. If your reset switch isn't debounced, it might generate a perfectly fine result pulse but then bounce on release, leaving you with a too-short pulse (and possibly a confused CPU) after that.&lt;/p&gt;&#xA;&lt;p&gt;A 555, of which you clearly already have at least one, works well to generate a pulse of a specific length; just wire it up as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Monostable&quot; rel=&quot;noreferrer&quot;&gt;one-shot&lt;/a&gt;. Gates with Schmitt-trigger inputs, such as a &lt;a href=&quot;http://www.ti.com/lit/ds/symlink/sn74ls14.pdf&quot; rel=&quot;noreferrer&quot;&gt;74LS14&lt;/a&gt;, are also great for generating pulses and debouncing switches, and you can use an spares as regular gates (for address decoding or whatever) as well.&lt;/p&gt;&#xA;&lt;p&gt;Some examples of the above circuits, and a good introduction to reset circuits, are given in the &lt;a href=&quot;http://wilsonminesco.com/6502primer/RSTreqs.html&quot; rel=&quot;noreferrer&quot;&gt;Reset Circuits&lt;/a&gt; section of Wilson Mines Co. &lt;a href=&quot;http://wilsonminesco.com/6502primer/index.html&quot; rel=&quot;noreferrer&quot;&gt;6502 Primer&lt;/a&gt;. I strongly encourage you to read through the relevant pages in that primer as you build sections of a computer, such as the &lt;a href=&quot;http://wilsonminesco.com/6502primer/ClkGen.html&quot; rel=&quot;noreferrer&quot;&gt;clock&lt;/a&gt;, reset circuits, address decoding, etc. etc. It will give you a general understanding of the problems and solutions in each area and also give a lot of specific advice on how to avoid pitfalls.&lt;/p&gt;&#xA;&lt;h3&gt;Decoupling Capacitor&lt;/h3&gt;&#xA;&lt;p&gt;Regarding the decoupling capacitor, 0.1 μF is a typical value; just drop one lead of the cap into the the breadboard column for the Vcc pin and the other into the breadboard column for the ground pin of that chip. (This goes right over the top of the chip for the Z80.) If the two pins are too far apart, and you don't want to take the time to extend the cap with a wire, even just using an adjacent ground rail will still help enormously.&lt;/p&gt;&#xA;&lt;p&gt;You should do this for all your chips, not just the CPU.&lt;/p&gt;&#xA;&lt;p&gt;If you have an oscilloscope, run your system with a 1 MHz clock and, with and without the decoupling capacitor, have a look at the waveforms of your clock input and an output such as A0. Freqently you will get a pretty dramatic demonstration of what a decoupling capacitor does for you.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-04T01:18:10.647" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13588" PostTypeId="2" ParentId="13173" CreationDate="2020-02-04T03:30:39.440" Score="0" Body="&lt;p&gt;In the Sprint 2 hardware design, the text is part of a character-cell based playfield, generated through a lookup into a 512x8b character ROM (actually a pair of 512x4b ROMs wired in parallel, in sockets P4 and R4).  This ROM could not be read by the CPU, but fed directly into a shift register which, after being combined with the car sprites, drove the video output.  It provided 64 characters, which were used for both the text and the background graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These playfield-generator ROMs appear to have been standard mask-ROM or PROM parts, so their contents would have been specified by the game's manufacturer.  I think for earlier examples you should look for games by the same manufacturer.  Notably, this cabinet was one of the early applications of the MOS 6502, but it's plausible that an earlier game used the same font but a different CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dedicated character-generator chips also existed at the time, most notably those made by Signetics - however, these did not use the 8x8 pixel format seen here.  The contemporary DEC VT52 terminal did use a 7x7 format (which with spacing was effectively 8x8), but used a thin-line font with a very different appearance.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-02-04T04:06:00.810" LastActivityDate="2020-02-04T04:06:00.810" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13589" PostTypeId="2" ParentId="4702" CreationDate="2020-02-04T03:40:37.307" Score="4" Body="&lt;p&gt;&lt;a href=&quot;http://pages.cs.wisc.edu/~remzi/Classes/736/Papers/atlas.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;This paper by Simon Lavington&lt;/a&gt; on Manchester University computers says that the Ferranti Mark I, the commercialization of the Manchester Mark I, incorporated a &quot;sideways add&quot; instruction at the request of Manchester mathematicians for &quot;their number-theory problems&quot;.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-02-04T03:40:37.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13590" PostTypeId="2" ParentId="13586" CreationDate="2020-02-04T07:37:24.380" Score="6" Body="&lt;p&gt;'Disc missing' may indicate that the disk is not spinning fast enough, or the index hole sensor is not working properly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most likely cause is a bad belt. If the computer is left idle for long periods the belt tends to deform where it goes around the motor pulley. So even though you replaced the belt only 'a few years ago' it is the first thing you should look at. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possibility is that the motor is failing to maintain speed. This could be caused by worn brushes or calibration drift in the speed regulator, but if the drive has had little use this is unlikely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The index hole sensor might have some foreign material (dust, cobwebs etc.) over the lens which is reducing the light level, or the LED might be getting tired. Check that the LED is glowing reasonably brightly and the sensor lens is clean.&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-02-04T07:37:24.380" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13591" PostTypeId="2" ParentId="13573" CreationDate="2020-02-04T09:50:05.980" Score="7" Body="&lt;p&gt;If both the blitter's vertical and horizontal filling mode was enabled and launched on a stray pixel it created a simple fractal image known as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sierpi%C5%84ski_triangle&quot; rel=&quot;noreferrer&quot;&gt;Sierpinski triangle&lt;/a&gt;. It can be seen in use in the 4K intro Heartcore by Delon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another famous trick was rewriting BPLCON1 (the copper scroll register) to emulate a zooming effect as seen in many Sanity demos like Elysium or Jesterday (and a few more demos and games by others, mostly used for Star Wars-style scrollers). The method is described &lt;a href=&quot;http://www.stashofcode.fr/zoom-hardware-avec-bplxmod-et-bplcon1-sur-amiga/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; in detail (it is in French, though).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if these count as bugs but they are certainly exploits :)&lt;/p&gt;&#xA;" OwnerUserId="16129" LastActivityDate="2020-02-04T09:50:05.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13592" PostTypeId="2" ParentId="4702" CreationDate="2020-02-04T12:29:38.007" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm not asking people to speculate here; I'm asking for references to existing material about the lack of POPCOUNT in most of the CPUs of the last quarter of the XX century.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's always a bit hard to find documentation about why things have not been done. But maybe a few points to think about&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Machines with a Popcount were already a minority early on.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Popcount only makes sense for a narrow class of problems.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Having a Popcount instruction makes only sense if the problem to be solved already needs the upper end of power available.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;At the absolute upper end, there were always machines having it (Cray).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Every new class (mini, micro) started out as a most simple implementation, only providing the bare minimum.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The vast majority of applications (for those) do not need Popcount.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Minis never really reached the upper end of performance, making such specialized instructions worthwhile.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It wasn't until the late 1980s that massive parallel microprocessor systems were considered for high performance computing.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;While some, like SPARC, defined it, only their upper end implementations really had it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Likewise Intel implemented it for the (~2000) Itanium, dedicated to high end computing, while letting another decade pass before adding it to x86.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It wasn't until that time (late 2000s) that generic mainstream microprocessor architecture (x86) was really considered viable for high end computing.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;By the 2000s microprocessors were quite mature (read bloated), making the addition of additional instructions quite cheap, thus allowing the inclusion of rarely needed ones as well.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Even today, the majority of CPUs used (and designed) do live quite well without.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On a more basic, but equally important level:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Popcount is a fairly simple integer instruction&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Popcount can (on most CPU) easy be synthesised by a few, fast instructions.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Performance gain is thus rather small&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It's way more efficient to first add instructions with more potential gain&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;No real need, and easy to implement using basic instructions at the same time&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that point it's also worth to remember, that many things look very different in hindsight.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To avoid lengthy arguments about how complicated a Popcount implementation is, let's look at a most primitive 6502 (*1). Here two basic instruction of 7 cycles total are needed per byte whose bits are to be counted.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        CLC&#xA;        LDY  FACC&#xA;        LDA  PCTAB,Y&#xA;        LDY  FACC+1&#xA;        ADC  PCTAB,Y&#xA;        ...&#xA;&#xA;PCTAB   DB   0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On an 8086, it can easy be done with string instruction handling even lengthy sequences of up to 65535 bit close to full bus speed:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        MOV   AH,0&#xA;        MOV   DX,0&#xA;CNTLP:&#xA;        LODSB&#xA;        XLAT  PCTAB&#xA;        ADD   DX,AX&#xA;        LOOP  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On a /360, the basic counting can be done with a single TR instruction, while 'reuse' of packed decimal instructions and another TR will speed up the adding substantial.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Ofc, only in sense of complex instructions - otherwise it always will be the second best CPU, right after /360, ever.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-04T16:28:35.507" LastActivityDate="2020-02-04T16:28:35.507" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13593" PostTypeId="2" ParentId="13573" CreationDate="2020-02-04T17:40:10.137" Score="8" Body="&lt;p&gt;I've been asked several times about discovered &quot;interesting behavior&quot; of the OCS chip set when the registers were updated at certain times in a certain order (at a certain rate, etc.), and whether that behavior was intentional or not.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simple stuff like changing modes or palettes synchronized to the NTSC &quot;beam&quot; was certainly intended.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am also certain that the design team did not anticipate all of the possibilities (note that I'm listed as inventor on all the OCS patents, along with Jay and Joe.).  We had no advanced debugging tools except the towers of emulator boards. The only computer logic simulations were done after the original chips taped-out. So likely a huge amount of register setting combinations and state possibilities were never thought out, tested, or debugged.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, yes.  (Happy hunting.)&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2020-02-24T21:46:09.013" LastActivityDate="2020-02-24T21:46:09.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13594" PostTypeId="2" ParentId="13575" CreationDate="2020-02-04T17:48:23.007" Score="1" Body="&lt;p&gt;How about intercepting CHROUT print routine and fixing the color value:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;C000 LDA #$0B&#xA;C002 STA $0326&#xA;C005 LDA #$C0&#xA;C007 STA $0327&#xA;C00A RTS&#xA;C00B PHA&#xA;C00C LDA #$01 ; SET COLOR HERE&#xA;C00E STA $0286&#xA;C011 PLA&#xA;C012 JMP $F1CA&#xA;&#xA;SYS49152&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2054" LastEditorUserId="2054" LastEditDate="2020-02-05T14:36:22.657" LastActivityDate="2020-02-05T14:36:22.657" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13595" PostTypeId="1" AcceptedAnswerId="13596" CreationDate="2020-02-04T19:55:49.933" Score="13" ViewCount="1681" Body="&lt;p&gt;After Jack Tramiel was fired from Commodore and became the owner of Atari, I believe he offered jobs to a number of key technical people who followed him from Commodore. Who were the key people (if any) from Commodore and their contributions to the Atari ST? Was any Commodore technology alleged to be pilfered in the process?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-02-05T01:48:51.780" Title="Who were the Atari ST designers pilfered from Commodore?" Tags="&lt;history&gt;&lt;commodore&gt;&lt;atari&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13596" PostTypeId="2" ParentId="13595" CreationDate="2020-02-04T20:18:44.797" Score="13" Body="&lt;p&gt;The primary personality was &lt;a href=&quot;https://en.wikipedia.org/wiki/Shiraz_Shivji&quot; rel=&quot;noreferrer&quot;&gt;Shiraz Shivji&lt;/a&gt;, a member of the C64 team who became the lead designer of the Atari ST. As per the linked Wikipedia article, he and three others — Arthur Morgan, John Hoenig and Douglas Renn — were accused by Commodore of intellectual property theft, specifically around the disk drive in Commodore's aborted Z8000-based UNIX machine, but cleared at trial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Per &lt;a href=&quot;https://www.goodreads.com/book/show/13595478-commodore&quot; rel=&quot;noreferrer&quot;&gt;Commodore: The Amiga Years&lt;/a&gt;, putting the Commodore side of the story:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[Robert Russell, senior Commodore engineer] became nervous that he would lose some of his key project engineers, so he made an agreement with Shiraz Shivji. &quot;[Shiraz] called up and we discussed it after he had left the company,&quot; says Russell. &quot;He said that he wasn't going to take those engineers.&quot; In particular, Russell wanted to retain a Z8000 engineer until they completed the project. &quot;Shiraz promised me that he would let him wrap his stuff up.&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In July 1984, Russell attended a meeting in the UK where anxious Commodore executives contemplated the thread posed by Jack Tramiel. &quot;We were at a meeting in London. All the big general managers were there, maybe 20 people,&quot; says Russell. &quot;I was there because I had the Z8000 project and I was doing reports to the board on engineering. The Amiga was part of it. I knew what was happening with Atari and Jack and their engineers.&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;While Russell was away, Shivji suddenly backed out of their agreement. &quot;I was at a board meeting in London when this engineer just left,&quot; says Russell. &quot;I got a phone call at the board meeting that he was gone, and that just pissed me off to no end. I thought I had an agreement with Shiraz.&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Russell soon tipped off Commodore lawyers about possible theft of trade secrets. Russell thought it would be a good idea to inspect what the ex-employees were moving out of Commodore. &quot;We put a lawsuit and we opened up their moving vans,&quot; recalls Russell. &quot;They were taking people's personal goods. When the lawyers cracked open the moving truck, we found all kinds of Commodore documentation.&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In a suit filed July 10 in Chester County Court, Commodore charged that Shivji and three other former employees had stolen information on new products Commodore was developing. A &lt;em&gt;Washington Post&lt;/em&gt; article soon appeared with the headline, &quot;Commodore Says Four Stole Trade Secrets&quot;. Commodore obtained a preliminary injunction against releasing a new Atari computer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So I think that court case is the only formal allegation that Commodore made, netting them a nice preliminary injunction against Atari releasing a new machine. I can't find the &lt;em&gt;Washington Post&lt;/em&gt; article, but per &lt;a href=&quot;https://www.nytimes.com/1984/07/14/business/commodore-trade-secrets.html&quot; rel=&quot;noreferrer&quot;&gt;a very brief contemporaneous report from The New York Times&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A Pennsylvania judge today temporarily extended an injunction that prevents four former employees of Commodore International Ltd. from revealing any Commodore trade secrets at their new jobs with Atari Inc.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The suit charged that the four former employees had stolen trade secrets with an intent to divulge them to Atari, a rival home-computer maker that was recently acquired by Commodore's former president, Jack Tramiel.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The suit, filed Tuesday, contends that the defendants possess copies of specifications for products that are ''unique to Commodore'' and provide an advantage over the competition.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Neither Mr. Tramiel nor his new company was named in the suit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-02-05T01:48:51.780" LastActivityDate="2020-02-05T01:48:51.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13597" PostTypeId="2" ParentId="13595" CreationDate="2020-02-04T20:26:26.980" Score="8" Body="&lt;p&gt;One of them was Leonard Tramiel, one of Jack Tramiel's sons, who was in charge of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_ST#Operating_system&quot; rel=&quot;noreferrer&quot;&gt;Atari staff who worked on the ST OS&lt;/a&gt;, and had contributed to the VIC-20 at Commodore. When I briefly worked for Perihelion in 1989, while they were designing the Atari Transputer Workstation for Atari, Leonard was the person in Atari who could give Jack bad news on technical things without getting fired. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another was &lt;a href=&quot;https://en.wikipedia.org/wiki/Shiraz_Shivji&quot; rel=&quot;noreferrer&quot;&gt;Shiraz Shivji&lt;/a&gt; who had been part of the design team for the Commodore 64 and later the director of engineering at Commodore. He became head of R&amp;amp;D at Atari, and the chief designer of the Atari ST, and was one of four ex-Commodore engineers who were charged, but acquitted, with theft of disk drive plans from Commodore. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2020-02-04T20:26:26.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13600" PostTypeId="1" CreationDate="2020-02-05T11:05:37.360" Score="3" ViewCount="265" Body="&lt;p&gt;I would like to setup a network of payphones inside my college as part of a retro phone systems / artistic interactive exhibit. I would like to be able to use the payphones to make calls inside the college premise where they will be installed. What I dont know how to do is set up a &quot;Central Office&quot; for a vintage pulse dialing phone network. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried getting a Telcom book, but its mostly about installing phone systems where the CO already exists. &lt;/p&gt;&#xA;" OwnerUserId="16142" LastActivityDate="2020-02-06T12:46:01.913" Title="How to set up a payphone phone network central office" Tags="&lt;hardware&gt;&lt;network&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13601" PostTypeId="1" CreationDate="2020-02-05T13:17:42.920" Score="13" ViewCount="2381" Body="&lt;p&gt;Many 1-bit DRAM chips provide two pins for data communication, one for writing data (typically described as Din or D on datasheets) and one for reading data (Dout or Q). Examples I've found include the 2118, 4164, 41256, 4532, 4816, and 4116 (pictured below).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ey7ro.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ey7ro.png&quot; alt=&quot;Pinout of TMS4116 DRAM&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers such as the BBC Microcomputer, the Comomdore 64 (some revisions), and the ZX81's external 16K expansion used 1-bit DRAM chips with the data inputs and outputs wired together, and to a bidirectional data bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wider (4-bit an 8-bit) DRAM chips didn't bother using separate input and output pins, possibly due to the larger number of pins that would have been required if they chose to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that these machines made no use of the separate data inputs and outputs, I'm wondering why they were ever provided in the first place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Can anyone explain how separate data inputs and outputs for RAM would be useful for a computer system designer?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples of machines that took advantage of this would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2020-02-07T18:43:08.287" Title="Why did 1-bit DRAM chips have separate data input and output?" Tags="&lt;ram&gt;&lt;design-choices&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13602" PostTypeId="2" ParentId="13601" CreationDate="2020-02-05T15:00:23.463" Score="17" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Because there were spare pins otherwise.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Because sometimes this could make the design simpler.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;As an example, I'll put again schematics of a russian ZX clone, for example this one, named &quot;Leningrad&quot;. All other clones with single DRAM set are made in a similar way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tHqtd.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tHqtd.gif&quot; alt=&quot;Leningrad ZX clone schematics&quot;&gt;&lt;/a&gt;&#xA;The inputs of DRAM chips (D21..28, labelled as 565RU5 -- russian analog of 4164) are connected directly to Z80 databus (D0..7). This means that CPU writes are processed directly to the DRAM, while at all other times (for example, ROM or IO access) DRAM chips won't disturb CPU bus and even could be read by video fetcher in parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The outputs of DRAM chips are connected to the private bus (MD0..7), where the video data is taken from directly to the pixel shift register and attribute latches. The CPU reads are, however, passed through the D32 '373 latch, that temporarily connects both buses together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there were &lt;em&gt;no separate input and output pins&lt;/em&gt; in the DRAM chips, the design would contain &lt;em&gt;another latch for write data&lt;/em&gt;. Alternatively, where the explicit separation is not needed, having two pins does not hurt either.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2020-02-05T15:17:35.170" LastActivityDate="2020-02-05T15:17:35.170" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13603" PostTypeId="2" ParentId="13601" CreationDate="2020-02-05T16:32:05.393" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Can anyone explain how separate data inputs and outputs for RAM would be useful for a computer system designer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are several advantages:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Design:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Timing is only defined by address transfer&lt;/li&gt;&#xA;&lt;li&gt;No additional requirement for access timing&lt;/li&gt;&#xA;&lt;li&gt;Outputs is static, only defined by address input&lt;/li&gt;&#xA;&lt;li&gt;No specific bus structure required&lt;/li&gt;&#xA;&lt;li&gt;Any bus adaption (latches, buffers) is external&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In addition it reduces the pincount quite a lot:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;No direction signal needed&lt;/li&gt;&#xA;&lt;li&gt;No output enable needed&lt;/li&gt;&#xA;&lt;li&gt;No chip select needed (*1)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Thus even a 256 KiBit chip could be made into a 16 pin device (*2) keeping the pinout (mostly) compatible. It wasn't until the 1 MiBit that a new pinout was needed - which, as usual, did lead to some variation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;That way a RAM chip is just that, a RAM, without any additional circuitry.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Wider (4-bit an 8-bit) DRAM chips didn't bother using separate input and output pins, possibly due to the larger number of pins that would have been required if they chose to do so&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, as that would have pushed the pincount up to 22 for a 41464, which is rather unusual for 600 mil spacing, thus a switch to 600 mil would have had to follow, eating up much more board space, increasing cost further. Quite unhandy when considering that these x4 chips were mainly intended for cost reduced designs of conventional micros. Thus a reduction to only bidirectional bus designs was acceptable.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Examples of machines that took advantage of this would be appreciated.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are not many with classic microprocessor designs, as they work with bidirectional busses anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I once (~1983) did a video capture board using separate, not connected D/Q pins, working on a fixed (TV) timing frame(*3). Data input was continuous feed from an AD stage digitizing camera input and stored in RAM (/WR active). At the same time data output was feed synchronous feed into a DA stage creating output for a monitor (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While WR was active, each frame was stored, overwriting the previous. By releasing WR (during retrace) the last picture stored was held, continued output displayed, and on demand transferred (*5) into the PC.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The original Mostek 4096 still required CS at pin 13.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Getting rid of additional voltages of the original 4116 freed pin 9 and 1 for A7 (4164) and A8 (41256)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Simply created by some counters triggered by filtered camera timing, so no internal clock source needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Well, since the system was meant to take employee photos, there were two screens, one 'regular' for the operator and a second with flipped Y axis to act like a mirror :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - Using a separate set of address counters and during retrace to not interference with the picture still displayed. It could have worked by reusing the picture counters, but that would have introduced a one frame flicker, which I did not want to happen, as it disturbs the UI process.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-06T14:48:51.810" LastActivityDate="2020-02-06T14:48:51.810" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13604" PostTypeId="2" ParentId="11776" CreationDate="2020-02-05T16:50:32.243" Score="2" Body="&lt;p&gt;Cabling costs, for one thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An 8 bit per channel digital link capable of reliably handling tens of MHz, in the late 1980s/early 1990s, would have looked similar to Wide SCSI in physical implementation - clunky, power hungry, expensive, and unreliable if less than premium quality parts and wiring were used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serial links like you find in DVI, HDMI, or even SATA/SAS require far faster silicon chip technology than what was generally and economically available at that time - if you serialize a signal of tens of millions of bytes, you end with hundreds of millions of bits and correspondingly high on-the-wire frequencies. Compare how even 100MHz CPUs were rather high tech in the early 1990s...&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2020-02-05T16:50:32.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13607" PostTypeId="2" ParentId="12501" CreationDate="2020-02-06T04:19:05.307" Score="6" Body="&lt;p&gt;The boards are essentially &amp;quot;serial to parallel converters,&amp;quot; but&#xA;probably not of any type anybody here is familiar with. A&#xA;&lt;a href=&quot;http://www.steampoweredradio.com/pdf/moseley/manuals/Moseley%20MRC-2%20Microprocessor%20Remote%20Control%20System%20Manual%20Volume%202.pdf&quot; rel=&quot;noreferrer&quot;&gt;manual&lt;/a&gt; has been found that describes two devices, the MSD-1&#xA;Multiple Status Display and the MDC-2 Multiple Direct Command Option,&#xA;used with the Moseley Associates Inc. MRC-2 system, a&#xA;microprocessor-based system for monitoring and control of equipment&#xA;such as radio and TV transmitters.&lt;/p&gt;&#xA;&lt;h3&gt;Hardware&lt;/h3&gt;&#xA;&lt;p&gt;The board is a fairly basic SBC, with a 6809 CPU, 2 KB ROM, 2 KB RAM,&#xA;a 6850 ACIA for serial input and some parallel I/O.&lt;/p&gt;&#xA;&lt;p&gt;On one of the DB-25 connectors the the system receives RS-232 serial&#xA;input at 300 or 1200 bps (based on the switch setting). I am guessing&#xA;that this serial signalling is passed through (via hardware, not an&#xA;ACIA) to the other DB-25 connector for connection to further similar&#xA;boards so that they can see the same data stream. The firmware itself&#xA;never generates any serial output.&lt;/p&gt;&#xA;&lt;p&gt;The board's output is 32 digital signals on the DB-37 connector.&#xA;Presumably these signals were used to control something, but there's&#xA;no indication of what. The output is handled by a pair of 6821 PIAs,&#xA;U25 and U26, together referred to as &amp;quot;P32&amp;quot; in the disassembly.&lt;/p&gt;&#xA;&lt;p&gt;There is a third PIA, U27 (&amp;quot;P16&amp;quot; in the disassembly) that is used for&#xA;things like reading the switches and signalling that the system is&#xA;alive and/or restarting.&lt;/p&gt;&#xA;&lt;h3&gt;Function&lt;/h3&gt;&#xA;&lt;p&gt;The board receives a stream of characters on the serial port and,&#xA;based on what it receives, sets bits on the 32-bit digital output.&#xA;This appears to be designed so that one stream of serial data can be&#xA;passed to multiple boards; each one has an address from 0-15 (probably&#xA;set by the rotary switch) that determines which characters it will&#xA;take as commands to change its digital output and which it will&#xA;ignore.&lt;/p&gt;&#xA;&lt;p&gt;The protocol is not like anything I've seen before and is probably&#xA;proprietary. It's not a simple case of specific characters toggling&#xA;specific bits on the digital output (e.g., &amp;quot;set bit 5&amp;quot;), but instead&#xA;there's some sort of obscure processing determining how the outputs&#xA;are set.&lt;/p&gt;&#xA;&lt;p&gt;Without knowing the purpose of the board the protocol itself doesn't&#xA;seem terribly interesting, but you can read through the state machine&#xA;code that processes the input and updates the output if you want to&#xA;start to dig into the details.&lt;/p&gt;&#xA;&lt;h3&gt;Alternative Designs&lt;/h3&gt;&#xA;&lt;p&gt;As Ross Ridge mentions in the comments on the question, yes, this&#xA;board is a bit overkill on the hardware side. The hardware couldn't&#xA;reasonably be as simple as just an ACIA and 74xx logic, given that it&#xA;needs to interpret (and, for the switch unit, generate) a standard&#xA;serial protocol used by various other devices, but certainly cheaper&#xA;CPU, RAM and PIA options could have been used.&lt;/p&gt;&#xA;&lt;p&gt;From the filename of the catalogue below, the system was designed no&#xA;later than 1981. I probably would have suggested a &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502#Variations_and_derivatives&quot; rel=&quot;noreferrer&quot;&gt;6508&lt;/a&gt;&#xA;microprocessor, which included 256 bytes of RAM (plenty for this&#xA;application) and an 8-bit PIA. Five bits of the PIA would be used for&#xA;input from the switches and the other three for shift registers&#xA;(74LS595 or similar) for the data outputs and switch inputs. Using&#xA;pricing from an &lt;a href=&quot;https://archive.org/details/eu_BYTE-1981-02_OCR/page/n374&quot; rel=&quot;noreferrer&quot;&gt;advert in the February 1981 issue of BYTE&#xA;Magazine&lt;/a&gt;, this would have replaced the $38 6809 with&#xA;an MPU possibly even cheaper than the $12 6502 and completely dropped&#xA;three 6821 PIAs at $6.50 each, for something like a $50 saving on the&#xA;BOM.&lt;/p&gt;&#xA;&lt;p&gt;That said, I suspect that these boards were used in other (possibly&#xA;more sophisticated) designs as well, and the code is clearly re-using&#xA;parts of a standard framework for more sophisticated systems. (See how&#xA;the interrupt-handling code works, for example.) So it's probably not&#xA;unreasonable to re-use existing, tested resources even at the cost of&#xA;a more expensive BOM.&lt;/p&gt;&#xA;&lt;h3&gt;Resources&lt;/h3&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.steampoweredradio.com/pdf/moseley/catalogs/Moseley%20MRC-1%20Remote%20Control%20Brochure%20March%201981.pdf&quot; rel=&quot;noreferrer&quot;&gt;MRC-1 Catalogue&lt;/a&gt; gives an overview of the full system in&#xA;which the accessories containing these boards were used. &lt;a href=&quot;http://www.steampoweredradio.com/pdf/moseley/manuals/Moseley%20MRC-2%20Microprocessor%20Remote%20Control%20System%20Manual%20Volume%201.pdf&quot; rel=&quot;noreferrer&quot;&gt;MRC 2&#xA;Microprocessor Remote Control System, Volume One&lt;/a&gt; is the&#xA;manual for that system, and &lt;a href=&quot;http://www.steampoweredradio.com/pdf/moseley/manuals/Moseley%20MRC-2%20Microprocessor%20Remote%20Control%20System%20Manual%20Volume%202.pdf&quot; rel=&quot;noreferrer&quot;&gt;MRC 2 Microprocessor Remote Control&#xA;Options, Volume Two&lt;/a&gt; is the manual for the products that used&#xA;these boards. You can see a picture of an installation including the&#xA;MRC 2 and these two options (at the lower right) at &lt;a href=&quot;http://www.steampoweredradio.com/New%20Tour/alice/fmx4.html&quot; rel=&quot;noreferrer&quot;&gt;Alice@97.3&#xA;Transmitter&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://gitlab.com/retroabandon/rcse-mystery-board.git&quot; rel=&quot;noreferrer&quot;&gt;rcse-mystery-board&lt;/a&gt; repository on GitLab contains&#xA;high-resolution photos of the board, a dump of the ROMs (two, since&#xA;they were somewhat different between the two examples of this board) a&#xA;disassembler and framework to run it, and an info file for the&#xA;disassember that produces a very heavily commented, but not entirely&#xA;complete, &lt;a href=&quot;https://gitlab.com/retroabandon/rcse-mystery-board/-/blob/master/PS-1.dis&quot; rel=&quot;noreferrer&quot;&gt;disassembly of one ROM&lt;/a&gt;. (There's also a bit of&#xA;disassembly of the other ROM, particularly the common parts.)&lt;/p&gt;&#xA;&lt;p&gt;The README gives details of what's there and how to use the tools, and&#xA;if you walk foward through the commit history from the start you'll&#xA;see how I built the tools and did the disassembly, step by step. (The&#xA;commit messages generally contain detailed commentary on this.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-07T07:56:45.903" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13608" PostTypeId="1" AcceptedAnswerId="13617" CreationDate="2020-02-06T09:35:16.703" Score="3" ViewCount="345" Body="&lt;p&gt;I found abandoned IBM Thinkpad 560X inside of company's cabinet. So, I got curious and get generic AC-DC SMPS adapter for 10$. It was rated 16V 3.75A, diameter for plug is just right, and polarity was center plus. Just like laptop wants.(560X required 16V 1.9A) According to that, it should work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when I connected adapter to laptop, it doesn't power up. Plus, adapter's power indicator LED doesn't stay on. It was doing kinda flickering, but very faintly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got freaked out, and disconnected it from laptop. After that adapter's indicator LED was lit steady. Plug in to laptop again, and still flickering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't understand why this happening. Usually flashing indicator LED means that PSU is struggling to push power into device, but in this case, PSU is 60W, and 560X requires about 30W. There's plenty room for wattage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it SMPS adapter laptop wants? Or laptop power adapter is different from generic SMPS adapter?&lt;/p&gt;&#xA;" OwnerUserId="16093" LastActivityDate="2020-02-06T19:26:27.517" Title="Using generic SMPS adaptor on old IBM Thinkpad makes strange symptoms" Tags="&lt;ibm&gt;&lt;power&gt;&lt;laptop&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13609" PostTypeId="2" ParentId="13608" CreationDate="2020-02-06T09:41:03.383" Score="7" Body="&lt;p&gt;I think you have a fake or mislabelled adapter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These symptoms seem to me to be those of a cheap adapter that's browning out when it's trying to supply the current the laptop wants at the voltage it wants, which is something that fake or mislabelled adapters would certainly do. &lt;/p&gt;&#xA;" OwnerUserId="16161" LastActivityDate="2020-02-06T09:41:03.383" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13610" PostTypeId="2" ParentId="13600" CreationDate="2020-02-06T12:46:01.913" Score="5" Body="&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note&lt;/strong&gt;: I'll ignore the &lt;strong&gt;payphone&lt;/strong&gt; aspect of your question for the moment: I'll just treat it as wanting to connect together a number of old, pulse-dial telephones for internal communication.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Pulse-Dial PBX&lt;/h2&gt;&#xA;&lt;p&gt;Essentially what you need is a small &lt;strong&gt;PBX&lt;/strong&gt; (&lt;a href=&quot;https://searchunifiedcommunications.techtarget.com/definition/private-branch-exchange&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Private Branch Exchange&lt;/em&gt;&lt;/a&gt;). These come in all sizes from around four-lines up to several thousand and are used in offices of all sizes to provide internal phone calls (extension to extension) and to reduce the number of external lines needed to provide incoming/outgoing external calls (by sharing access to a limited number of &amp;quot;real&amp;quot; phone-lines among all users). Originally PBXs were all &amp;quot;copper based&amp;quot; – each extension around an office would be wired back to the main PBX unit using dedicated telephone wires. These days, the internal routing (at least) is likely to be network based – extensions plug into the internal TCP/IP network alongside PCs.&lt;/p&gt;&#xA;&lt;p&gt;In your case, you would probably just be using the PBX to route calls between the phones: in my (limited) experience&lt;sup&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/sup&gt;, external lines would not be necessary.&lt;/p&gt;&#xA;&lt;p&gt;Your main problem is finding a small PBX that supports both &amp;quot;copper&amp;quot; telephone lines (doesn't appear to be too difficult) &lt;em&gt;and&lt;/em&gt; supports &lt;em&gt;pulse-dialing&lt;/em&gt; (instead of DTMF or &amp;quot;tone dialing&amp;quot; that modern phones use). The latter requirement is likely to be more demanding.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note&lt;/strong&gt;: This is where my personal experience ends... you would need to do some digging  of your own to confirm whether any of the resources mentioned below would work for you!&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Starting with a search for &amp;quot;&lt;em&gt;pulse-dial pbx&lt;/em&gt;&amp;quot; led to the following question on the &lt;a href=&quot;https://www.vintage-radio.net/forum/showthread.php?t=122011&quot; rel=&quot;noreferrer&quot;&gt;UK Vintage Radio forum&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Pulse dial exchange system?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hi, I have a few old telephones and have always wanted to set up three or so around the house. I just wondered whether there is an exchange system that can support pulse dialing? I really don't know much about phones so please do excuse my ignorance!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Skimming just a few of the responses (all from 2015, so quite recent; emphasis mine):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I have set up a similar system earlier this year. I used a &lt;strong&gt;BT Revelation&lt;/strong&gt; wired from the house NTE5 box with a plug and socket so that all the old phones could be disconnected leaving the modern system as was. This allayed my wife's concern! The BT Revelation box was easy and cheap to source from e-bay. All the documentation is available FOC on the web. If you search this site you will find the relevant threads. I was a novice to old phones but found this straightforward to set up.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;Source: &lt;a href=&quot;https://www.vintage-radio.net/forum/showpost.php?s=65f05ffb9bdce1dd584b29a78f0fa091&amp;amp;p=807627&amp;amp;postcount=3&quot; rel=&quot;noreferrer&quot;&gt;https://www.vintage-radio.net/forum/showpost.php?s=65f05ffb9bdce1dd584b29a78f0fa091&amp;amp;p=807627&amp;amp;postcount=3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Some years ago, I had the same &amp;quot;problem&amp;quot; and ended up with buying from UK a &lt;strong&gt;Panasonic KX-T616&lt;/strong&gt; and one programming telephone for this. Later I have seen many other options, but still the KX-T308 or KX-T616 seems to be the most reliable and easy to set up system &lt;strong&gt;accepting pulse and tone dialing&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;Source: &lt;a href=&quot;https://www.vintage-radio.net/forum/showpost.php?s=65f05ffb9bdce1dd584b29a78f0fa091&amp;amp;p=807632&amp;amp;postcount=4&quot; rel=&quot;noreferrer&quot;&gt;https://www.vintage-radio.net/forum/showpost.php?s=65f05ffb9bdce1dd584b29a78f0fa091&amp;amp;p=807632&amp;amp;postcount=4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;A &lt;strong&gt;BT Revelation PBX&lt;/strong&gt; would be ideal for connecting your &lt;strong&gt;pulse dialling&lt;/strong&gt; phones to however they do seem to be increasing in price these days. One advantage of the Revelation is that it will convert the pulse train to DTMF if you wish to use your phones to make calls via the PSTN.&lt;/p&gt;&#xA;&lt;p&gt;If you are only interested in using the phones &amp;quot;internally&amp;quot; a &lt;strong&gt;Minimaster 3&lt;/strong&gt; would fit the bill but these are becoming quite rare now.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;Source: &lt;a href=&quot;https://www.vintage-radio.net/forum/showpost.php?s=65f05ffb9bdce1dd584b29a78f0fa091&amp;amp;p=807655&amp;amp;postcount=5&quot; rel=&quot;noreferrer&quot;&gt;https://www.vintage-radio.net/forum/showpost.php?s=65f05ffb9bdce1dd584b29a78f0fa091&amp;amp;p=807655&amp;amp;postcount=5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This suggests there &lt;em&gt;are&lt;/em&gt; systems still in existence that can handle pulse-dialing. From further web-searches, I've seen second-hand / refurbished examples of both the BT and Panasonic models mentioned on sale for around £60 (but &lt;em&gt;caveat emptor&lt;/em&gt;). Also note that, at least in the case of the Panasonic system, you would need a &amp;quot;modern&amp;quot; phone of some description to &amp;quot;program&amp;quot; the system. Other searches turned up a &lt;a href=&quot;http://pdf.textfiles.com/manuals/TELECOM-F-R/Panasonic%20KX-T61610%20Installation%20&amp;amp;%20Programming.pdf&quot; rel=&quot;noreferrer&quot;&gt;PDF Installation Manual for the KT61610&lt;/a&gt; and a &lt;a href=&quot;https://www.best4systems.co.uk/pdf-manuals/BT/BT%20Revelation/BT%20Revelation%20Operators%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;PDF BT Revelation Quick Reference Guide&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Another post, further down the thread suggests a slightly different approach using an old PC (emphasis still mine):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It's worth knowing that the &lt;strong&gt;Digium TDM410P FXO / FXS card for Asterisk&lt;/strong&gt; supports &lt;strong&gt;pulse-dialling&lt;/strong&gt;, so you could actually build your own telephone exchange with an old PC. There are vendors on the usual site who sell work-alikes of the Digium card.&lt;/p&gt;&#xA;&lt;p&gt;One such card with three FXS modules (to ring an analogue telephone) and one FXO module (to connect to an analogue exchange line) will form the basis of a respectable system that can be expanded in future. And you can configure it to respond in any way you like, to any dialled number; this makes it very easy to simulate the old clicky-clicky exchanges (I have configured mine so I can call my parents using just their old 4-figure number) or set up your own services such as dial-a-disc or bedtime stories.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;Source: &lt;a href=&quot;https://www.vintage-radio.net/forum/showpost.php?s=65f05ffb9bdce1dd584b29a78f0fa091&amp;amp;p=807891&amp;amp;postcount=14&quot; rel=&quot;noreferrer&quot;&gt;https://www.vintage-radio.net/forum/showpost.php?s=65f05ffb9bdce1dd584b29a78f0fa091&amp;amp;p=807891&amp;amp;postcount=14&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And as before, a web-search shows examples on sale around the £60 mark. If you actually want to make use of the &lt;em&gt;payphone&lt;/em&gt; nature of your devices, something like these cards is probably the direction to go.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Payphones&lt;/h2&gt;&#xA;&lt;p&gt;All the &amp;quot;payphone magic&amp;quot; (i.e. not connecting a call unless or until money had been inserted) is handled by the exchange (the &lt;em&gt;General Post Office&lt;/em&gt;, latterly &lt;em&gt;British Telecom&lt;/em&gt; or &lt;em&gt;BT&lt;/em&gt; in the UK; &lt;em&gt;AT&amp;amp;T&lt;/em&gt; or &lt;em&gt;Bell Telephones&lt;/em&gt; etc. in the US). The exchange will know that the line is a &amp;quot;pay&amp;quot; line, and refuse to connect you (except to the operator) unless some money is inserted. The payphones let the exchanges know when this happens by sending &amp;quot;beeps&amp;quot; of specific frequencies down the wire (see &lt;a href=&quot;https://en.wikipedia.org/wiki/Red_box_(phreaking)&quot; rel=&quot;noreferrer&quot;&gt;Red box (phreaking)&lt;/a&gt;&lt;sup&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/sup&gt; on Wikipedia). When the paid-for time runs out, it is the exchange that emits the loud, rapid beeps (at least in the UK) that prevent the conversation continuing until more coins are inserted.&lt;/p&gt;&#xA;&lt;p&gt;To the best of my knowledge, your payphones should operate as normal telephones if connected to a normal PBX as there will be nothing to block the calls. This will allow &amp;quot;retro phone calls&amp;quot;, but won't require that coins be inserted first (although it &lt;em&gt;might&lt;/em&gt; be possible to hear the &amp;quot;beeps&amp;quot; if you do).&lt;/p&gt;&#xA;&lt;p&gt;I am also &amp;quot;almost certain&amp;quot; that no &amp;quot;standalone&amp;quot; PBXs will have facilities to &lt;em&gt;impose&lt;/em&gt; &amp;quot;payphone mode&amp;quot;. However, it &lt;em&gt;may&lt;/em&gt; be possible to recreate this with the Digium/Asterisk cards.  The post above implies that call-handling is configurable / programmable: providing there is a way of detecting the coin-insertion tones (either direct in hardware, or possibly in software), it seems at least plausible that you could only connect calls after coins have been inserted, and to issue beeps or a message when a timer runs out. (However, this is speculation on my part).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/sup&gt; Twenty-five plus years ago (so I think it qualifies as &amp;quot;retro&amp;quot;!) I wrote software to send faxes through a fax-modem. The company had an 4-line PBX that it had (only recently) outgrown. By connecting my computer via a fax-modem to one extension, and a real fax-machine to another, I could test the software without having to use (and the company pay for) external calls. This worked happily without any external connections.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/sup&gt; The term &amp;quot;Red Box&amp;quot; comes from the purported colour of boxes designed to mimic these &amp;quot;coin-inserted&amp;quot; tones (along with boxes of other colours to perform other abuses of the phone system). However, as &lt;a href=&quot;https://en.wikipedia.org/wiki/Phreaking_boxes&quot; rel=&quot;noreferrer&quot;&gt;Phreaking boxes&lt;/a&gt; on Wikipedia notes, use of these colours owes more to folklore than hard evidence.&lt;/p&gt;&#xA;" OwnerUserId="731" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-06T12:46:01.913" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13611" PostTypeId="1" AcceptedAnswerId="13613" CreationDate="2020-02-06T13:44:22.230" Score="71" ViewCount="20386" Body="&lt;p&gt;The DEC Alpha, released in 1992, seems like an early implementation of a fully 64-bit microprocessor architecture. Its release led to quite a bit of both marketing hype and genuine vendor support in the mid-1990s, which supported the conclusion that Alpha would be a serious challenger to Intel x86, at least in the high-end performance and enterprise markets. It even had support from Microsoft with a native Windows NT 4.0 release.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the late 1990s, Alpha fizzled in the face of the HP/Intel partnership pushing their Itanium 64-bit architecture. My limited understanding of the phase-out suggests that it was not a technical matter of Itanium being better than Alpha. Rather, it was that Compaq acquired DEC, which was later acquired by HP, that killed the Alpha (by selling it to Intel!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming my background is correct and that the DEC Alpha represented a formidable technical challenge to x86 processors of the mid-1990s, what were the specific architectural features that made it better or &quot;ahead of&quot; the Pentium CPUs of the same era? And at what point after would Intel introduce x86-compatible processors that matched these technical architecture features already in DEC Alpha from 1992? &lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="15334" LastEditDate="2021-05-03T06:10:51.153" LastActivityDate="2021-05-03T06:10:51.153" Title="How much better was DEC Alpha than contemporaneous x86?" Tags="&lt;intel&gt;&lt;dec&gt;&lt;microprocessor&gt;&lt;hp&gt;" AnswerCount="8" CommentCount="11" FavoriteCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="13612" PostTypeId="2" ParentId="13611" CreationDate="2020-02-06T14:38:00.087" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Alpha fizzled in the face of the HP/Intel partnership pushing their&#xA;  Itanium 64-bit architecture&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think it's important to note that during this period, there was a widespread belief that the VLIW approach was &quot;the next RISC&quot;. Existing RISC approaches were growing into the millions of transistors and the outright performance gap that existed in the 1990s was fading. HP looked on Itanium as the future and Alpha as the past. So did a lot of people.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So Alpha wasn't competing with x86; they were totally different markets, in the same fashion that we don't have desktops based on ARM (yet). And since Itanium was going to replace both Alpha and x86, what was the point of continuing development of Alpha?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="7946" LastEditDate="2020-02-06T19:32:12.037" LastActivityDate="2020-02-06T19:32:12.037" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13613" PostTypeId="2" ParentId="13611" CreationDate="2020-02-06T14:48:57.397" Score="79" Body="&lt;p&gt;The Alpha team set out to create a high-performance &lt;em&gt;architecture&lt;/em&gt;, planned to last for 25 years and allow for 1000-performance increase over those 25 years. So they placed some long bets, starting with the 64-bit design (which cost performance but ensured long-term viability). It wasn’t &lt;em&gt;designed&lt;/em&gt; to compete with x86 (which wasn’t perceived as a viable long-term architecture at the time of the 486, at least not from the point of view of RISC manufacturers), but rather to be the best possible CPU for Digital, from workstations to high-end servers. Digital did understand early on that Intel’s Pentium and later CPUs would end up competing, and tried to adjust their strategy to address that, but the competitive landscape at the time was much more complex than Alpha versus x86 (see &lt;a href=&quot;https://books.google.fr/books?id=jMKfH6i9OcYC&quot; rel=&quot;noreferrer&quot;&gt;this famous issue of PC Magazine&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some features present in Alpha CPUs before competing Intel x86 CPUs (Alpha wasn’t necessarily the first architecture to implement these):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;64-bit architecture (64-bit ALU, registers, pointers, etc.) — 2007 in Intel x86 CPUs (but the first 64-bit x86 CPU was the Opteron in 2003; other 64-bit-capable architectures were MIPS III in 1991, SPARCv9 in 1994, PA-RISC 2.0 in 1996, PowerPC 620 in 1997)&lt;/li&gt;&#xA;&lt;li&gt;high clock rates (enabled by the typical RISC design, with a simplified register file, split register files, fixed instruction size, and very careful layout), 192MHz in 1992 — Intel caught up with Alpha clock rates in 1999 with the Coppermine Pentium III&lt;/li&gt;&#xA;&lt;li&gt;multi-issue (superscalar) — the first Pentium was also multi-issue, but had unbalanced pipes&lt;/li&gt;&#xA;&lt;li&gt;built-in multiprocessor support (albeit with &lt;a href=&quot;https://www.cs.umd.edu/~pugh/java/memoryModel/AlphaReordering.html&quot; rel=&quot;noreferrer&quot;&gt;a famously weak memory model&lt;/a&gt;) — this is difficult to compare, since Alpha and x86 have very different multiprocessing models; Intel’s CPUs supported bus sharing as early as the 8080 and locking with the 8086, &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11975/79&quot;&gt;multiprocessor systems using Intel CPUs have existed for a long time&lt;/a&gt;, and the P54C included hardware to support two-way multiprocessing in 1994&lt;/li&gt;&#xA;&lt;li&gt;built-in secondary cache (starting with the 21164) — Coppermine Pentium III&lt;/li&gt;&#xA;&lt;li&gt;out-of-order execution at high frequencies (starting with the 21264) — Pentium Pro&lt;/li&gt;&#xA;&lt;li&gt;built-in memory controller (starting with the 21364) — Nehalem in 2008&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The instruction set was designed with many of these goals in mind, in particular high clock rates, multi-issue (the instruction set avoids instructions which typically cause dependencies), and multiprocessor support (atomic updates etc.). Intel could never replicate this with a backwards-compatible instruction set, at least not on the surface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The amount of engineering effort which went into all the details of the architecture is easy to underestimate. For example the layout engineers used to spend ages planning simulation runs which would take days if not weeks to complete, to calculate the optimal layout for &lt;em&gt;portions&lt;/em&gt; of the CPU (using what would be called machine learning nowadays).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time, Alpha systems had more of everything, even compared to competing workstations and servers, let alone PCs, in particular higher clock rates, and support for more memory (I saw the first motherboard-sized memory boards with a full gigabyte of memory in the Digital factory in Scotland), albeit for more dollars (at least compared to PCs). For some time, the fastest computers for &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8972/79&quot;&gt;running Windows NT x86 binaries&lt;/a&gt; were Alpha workstations!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the Alpha niceties made it to x86, many through AMD rather than Intel (follow the engineers after Digital’s breakup). Some that didn’t include fixed-size instructions, and PALcode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Alpha is extensively documented; see for example &lt;a href=&quot;https://archive.org/details/byte-magazine-1992-08/page/n155/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;this BYTE article&lt;/a&gt; by one of the Alpha architects, Richard L. Sites; Paul V. Bolotoff’s &lt;a href=&quot;http://alasir.com/articles/alpha_history/&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Alpha: The History in Facts and Comments&lt;/em&gt;&lt;/a&gt;; and &lt;a href=&quot;https://www.hpl.hp.com/hpjournal/dtj/past.htm&quot; rel=&quot;noreferrer&quot;&gt;Digital technical journal&lt;/a&gt;, in particular &lt;a href=&quot;https://www.hpl.hp.com/hpjournal/dtj/vol4num4/intro.htm&quot; rel=&quot;noreferrer&quot;&gt;volume 4 number 4&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(If you want to try to get a feel for what typical PC users experienced when they spent some time on an Alpha system in the mid-90s, try to spend some time on a high-end POWER system nowadays. The price difference is also similar now to what it was then...)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-02-06T21:05:48.023" LastActivityDate="2020-02-06T21:05:48.023" CommentCount="22" ContentLicense="CC BY-SA 4.0" />
  <row Id="13614" PostTypeId="2" ParentId="4846" CreationDate="2020-02-06T15:52:27.410" Score="3" Body="&lt;p&gt;In normal operation, there is no ‘snow’ visible on the screen of a ZX Spectrum. The ULA perfectly controls its own access and the Z80 CPU access so that no screen data is missed. You only have to watch the countless videos on YouTube that show ZX Spectrum games to confirm this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is however possible to set the machine up to generate snow. Sinclair Research almost got the design of the ULA correct, but there were some problems - mostly with the design of the memory and I/O contention circuitry (I/O needed because the ULA was mapped to the Z80 I/O address space). You also need to understand that the ULA controls the DRAM chip control signals when the Z80 CPU access the 16k bytes of RAM where the screen data is stored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to understand what is really happening, you need to have a good understanding of how the Z80 CPU really works. During every instruction cycle, the Z80 carries out a DRAM refresh cycle. There is no way to switch off this function. Address bits A0 to A7 come from the &lt;code&gt;R&lt;/code&gt; (refresh) register. But address bits A8 to A15 come from the &lt;code&gt;I&lt;/code&gt; (Interrupt) register. The &lt;code&gt;I&lt;/code&gt; register stores the most significant byte of a two byte value used for interrupt mode 2. During normal operation, this points to a sensible address in ROM or high RAM and therefore the ULA does not see the refresh address generated by the Z80 as a problem. But set the &lt;code&gt;I&lt;/code&gt; register to certain values and then the ULA memory control circuitry sees the Z80 refresh cycle address as memory access to this RAM, but the contention circuitry is not activated so it does not pause the Z80 CPU. As the ULA has activated the DRAM control signals for a CPU access, the ULA is unable to fetch the correct screen data and a ‘snow’ effect is visible on the video screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.zxdesign.info/dynamicRam.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;More info&lt;/a&gt; if you're interested.&lt;/p&gt;&#xA;" OwnerUserId="16165" LastEditorUserId="7946" LastEditDate="2020-02-06T20:01:49.290" LastActivityDate="2020-02-06T20:01:49.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13615" PostTypeId="2" ParentId="13601" CreationDate="2020-02-06T17:43:49.013" Score="2" Body="&lt;p&gt;Although most often not used with microprocessor based systems, larger (mini, mainframe) systems often used unidirectional buses, which were easier to terminate to prevent reflections off of impedance mismatches.  Long bidirectional buses might require termination at both ends, and heftier bidirectional line drivers to support the termination current.  Separate input and output pins made connecting to unidirectional buses simpler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(processor write-only) Video frame buffers are another example of something where unidirectional data buses might be used.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2020-02-06T17:48:55.513" LastActivityDate="2020-02-06T17:48:55.513" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13616" PostTypeId="2" ParentId="13611" CreationDate="2020-02-06T18:29:52.493" Score="54" Body="&lt;p&gt;Stephen Kitt has done what seems to me an excellent job of outlining features and when they were introduced. I'll take a slightly different tack, instead picking a single point in time, and pointing out differences between the two at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm going to choose the 21164 as the Alpha to compare. It came out in January of 1995. It had a 266 MHz clock speed, and a quad-issue pipeline (i.e., could issue 4 instructions per clock). That was balanced between integer and floating point, so you could issue 2 integer instructions per clock and 2 floating point instructions per clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intel's fastest processor at that time was the P54C Pentium. I believe at the time, it had a maximum clock speed of 75 MHz. It had dual pipelines, so it could issue (at best) two instructions per clock. The second pipeline was fairly restricted, and scheduling was static, so in a given clock cycle, the first instruction (almost) always went to the the first pipeline, and then the second instruction issued to the second pipeline if and only if it was one of the specific instructions that the second pipeline supported.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get an idea of performance (well, okay, my aim was a bit more selfish: to try to justify buying an Alpha workstation) I did some simulations of running Alpha code for a program I had at the time. It averaged around 1.6 instructions per clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had a Pentium at the time (a 66 MHz P5). The same code running on it ran at about 1.1 instructions per clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Alpha instruction set was rather simpler, so you needed to execute more instructions to carry out a particular task with it than with the Pentium. If memory serves, this was about a 2:1 difference, but varied a fair amount.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, at least at that point in time, the Alpha was effectively about 3 times the speed of the fastest Pentium.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I feel obliged to address one more point though. You said:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In the late 1990's, Alpha fizzled in the face of the HP/Intel&#xA;  partnership pushing their Itanium 64-bit architecture.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In my opinion, this is basically wrong. It wasn't Alpha that fizzled. It was DEC that fizzled. Continuing from the performance comparison outlined above: my numbers were convincing enough that I eventually got permission to buy a DEC Alpha workstation, and got funds allocated for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I went through the DEC catalog, and picked out exactly the workstation I wanted. Then I contacted DEC. The first guy I talked to was very enthused right up until he heard the size of company I worked for - we were too small a company, so he couldn't sell me anything. He gave me somebody else to talk to. So I talked to them. They were very helpful until they heard what I wanted - they weren't allowed to sell that workstation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This went on for over a month. I spent weeks calling different people at DEC, and an almost bewildering number of VARs and VADs and god only knows what else. On essentially every call, I was very clear about exactly what I wanted, and that I had funds available to buy exactly that, immediately. I also made clear that assuming this worked out, my boss and his boss were both probably going to buy similar machines soon (there was no way a mere peon like me was going to have the fastest machine in the company for very long!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, I simply had to give up. I had the money. I had permission to spend it. But no matter how hard I tried, I &lt;strong&gt;couldn't&lt;/strong&gt; get DEC to take the money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least in my opinion, that's why the Alpha died. I don't claim to know sales particularly well, but I'm pretty sure an effective sales strategy does &lt;strong&gt;not&lt;/strong&gt; include refusing to sell your product, even when you have a legitimate customer who's not only ready and willing, but in fact downright eager to buy your product.&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2020-02-06T20:28:33.290" LastActivityDate="2020-02-06T20:28:33.290" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13617" PostTypeId="2" ParentId="13608" CreationDate="2020-02-06T19:26:27.517" Score="5" Body="&lt;p&gt;I would say that it is more likely that the laptop was shelved because it's internal power circuit is at least partially shorted.  This would explain the symptoms observed from the power supply LED.  I, personally, have run into several laptops that had this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would test the power supply under some sort of resistive load, such as a 12 Volt automotive headlamp or bright brake/turn-signal light bulb.  If the power supply successfully powers the bulb, then the laptop is the likely culprit.&lt;/p&gt;&#xA;" OwnerUserId="11734" LastActivityDate="2020-02-06T19:26:27.517" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13618" PostTypeId="1" AcceptedAnswerId="13620" CreationDate="2020-02-07T02:23:33.353" Score="18" ViewCount="3572" Body="&lt;p&gt;In the early nineties, Sega released the Sega CD, a.k.a. Mega CD, an add-on that attached a CD-ROM drive to the Mega Drive a.k.a. Genesis. Its primary or at least most conspicuous use was for full-motion video games that were appearing at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Playing full-motion video from CD really needs pretty hefty compression if you want more than a few minutes of it. The Genesis CPU was a 68000, which is far from capable of doing that sort of hefty decompression in real-time. The machine was not designed for CD-ROM or FMV, so presumably did not ship with the kind of specialized hardware that could do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How exactly was the decompression done?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-07T07:33:33.610" Title="How did the Sega CD decompress video?" Tags="&lt;video&gt;&lt;sega-genesis&gt;&lt;cd-rom&gt;&lt;compression&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13619" PostTypeId="2" ParentId="13618" CreationDate="2020-02-07T03:29:48.890" Score="17" Body="&lt;p&gt;Playback of compressed digital video is handled entirely in software on the Sega CD which is why FMV games on it play with the video taking less than the full screen and at relatively low frames per second.  It doesn't contain any dedicated decoding hardware.  It does contain a faster processor (12.5MHz 16-bit Motorola 68000, 5MHz faster than the base Sega) and additional ram (including a 16KB cache for the CDROM), which does help achieve a somewhat better level of performance than you might expect from pure software decoding though.&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2020-02-07T03:29:48.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13620" PostTypeId="2" ParentId="13618" CreationDate="2020-02-07T07:33:33.610" Score="37" Body="&lt;p&gt;We used to have to write our own video playback system, so each game did it differently. I worked on Microcosm for the SegaCD and if I recall we used a 16 colour palette for the video playback and had to create our own compression and decompression tools to keep the overall data bandwidth below 150KiB/sec. Later games used tricks like changing the palette every so many rasters so could end up with more colours on screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For any more detail you should really disassemble whichever game it is you're interested in and reverse engineer their solution. There was nothing like standard MPEG on the SegaCD.&lt;/p&gt;&#xA;" OwnerUserId="16166" LastActivityDate="2020-02-07T07:33:33.610" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13621" PostTypeId="2" ParentId="2361" CreationDate="2020-02-07T08:33:23.417" Score="30" Body="&lt;p&gt;I'm Linards Ticmanis, the guy who put out the CPMFAST package in 1999 that has been mentioned several times in the other answers (although I go by the nickname TeaRex on here). While creating that, I had to take a deep look into the innards of C128  CP/M, so that I think I can say that I have a rather detailed understanding of the way it works internally (or did have it over 20 years ago... I'm not excluding some failures of human memory here). I'm afraid there is some myth and half-truths in some of the other answers to this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, in C128 CP/M, writing to the 80-column screen does NOT go through the 8502 CPU as several other answers assert; the Z80 talks directly to the 8563 VDC (the 8502 is used by CP/M for several other things, such as disk I/O and printer output, but not for screen output and not for keyboard input either).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason why screen output in C128 CP/M is so slow is rather &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The Digital Research provided BDOS of CP/M 3.0 is much slower in doing basic character I/O than the BDOS of the more common CP/M 2.2; CP/M 3.0 does support much more complex I/O device reassignments where standard output can go to any possible set of up to 16 devices at the same time; this also means that for every character being written, it has to loop in a complicated, bit-shifting way over a 16-bit mask to determine which of 16 output device drivers to actually send the character to, and of course it does all this in pure Intel 8080 code without making use of the Z80 specific instructions and registers.&lt;/li&gt;&#xA;&lt;li&gt;The code in the C128's Commodore supplied CP/M BIOS (which for this purpose includes the 4KB of Z80 ROM code) is written in such a way that outputting normal printable characters such as letters or numbers (as opposed to control characters) follows the LONGEST path through the code (each character is compared to every possible control character before it is decided that it isn't one), even though it is the most common case by far.&lt;/li&gt;&#xA;&lt;li&gt;C128 CP/M supports the bit-banging RS232 on the userport. Unlike in native or C64 mode, the RS232 is always enabled and set to 300 baud by default, which means that the interrupt (IRQ) rate is also much higher than in native mode; and the interrupt code for the Z80 does quite a bit of things, including scanning the full keyboard at the same rate. This wastes a lot of CPU time when RS232 is not used (i.e. practically always).&lt;/li&gt;&#xA;&lt;li&gt;Bank switching between the user program (TPA in CP/M parlance) in bank 1 and the BIOS/BDOS/ROM/buffers in bank 0 happens VERY often in the C128 CP/M. Several times per character.  Although the impact of this is lower than the other three points above.&lt;/li&gt;&#xA;&lt;li&gt;Access to the 80-column screen RAM is doubly indirect as indicated in other answers (you have to access the RAM indirectly through some registers of the VDC chip, which in turn are only indirectly accessible to the CPUs through a rather bottleneck-y approach - you write a register number to $D600, do a little check-for-the-readiness-flag-bit-to-be-set loop and then write a register value to $D601).&lt;/li&gt;&#xA;&lt;li&gt;The biggie is of course the fact that the VIC-IIe is not put into fast mode when the Z80 is running, so that the Z80 runs at 4MHz for two cycles (one 8502 half-cycle) and then stops for two cycles (the other 8502 half-cycle), giving it an effective speed of just 2 MHz, which is just too low for CP/M 3.0 in practice, although it would be sort of enough for CP/M 2.2. The C128 CP/M source code (which was available from Commodore back in the day when you bought the complete set of CP/M 3 manuals from them) contains multiple instances of code that switches the VIC-IIe between slow mode (for hardware access, e.g. access to the REU, and for switching between the two CPUs) and fast mode (for everything else); but it's all commented out, so it seems they aimed for that but couldn't get it working. I tried to mail the main developer, Von Ertwine, with a question about this back in the 90s, but unfortunately never got an answer.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In practice, you CAN switch the VIC-IIe into fast mode while the Z80 is running; this causes a simple timing loop with interrupts disabled to in fact run somewhat faster (though not twice as fast), but crashes the system when you do much of anything beyond this. It would be really interesting if someone could check with a logic analayzer (which I don't have access to) what exactly happens signal-wise, especially to the Z80 clock signal, when you enable fast mode while the Z80 is running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CPMFAST adresses the first three points above by establishing several short-cuts through the code for the common case (output of a printable character, to the 80 column screen only, without RS232 use) and also increases the disk buffer area so that fewer disk accesses are needed. It cannot do anything about the points numbered 4 through 6, though.&lt;/p&gt;&#xA;" OwnerUserId="16057" LastEditorUserId="16057" LastEditDate="2020-02-07T15:19:03.273" LastActivityDate="2020-02-07T15:19:03.273" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13623" PostTypeId="1" AcceptedAnswerId="13624" CreationDate="2020-02-07T10:30:11.823" Score="6" ViewCount="479" Body="&lt;p&gt;There was a number of ZX-Spectrum games that had loadable levels - e.g. R-Type, Gauntlet, Short Circuit (48k).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wonder if those loadable levels only contained graphics / music / game data for the level, or was it commonplace to include executable code as well?&lt;/p&gt;&#xA;" OwnerUserId="3303" LastActivityDate="2020-02-07T17:46:30.480" Title="Did loadable levels for ZX-Spectrum games contain only graphics / game data, or executable code as well?" Tags="&lt;zx-spectrum&gt;&lt;gaming&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13624" PostTypeId="2" ParentId="13623" CreationDate="2020-02-07T10:53:22.457" Score="8" Body="&lt;p&gt;For games with very distinct playstyles per level, such as Ghostbusters II &lt;a href=&quot;https://m.youtube.com/watch?v=4wnPZEM1IvQ&quot; rel=&quot;noreferrer&quot;&gt;https://m.youtube.com/watch?v=4wnPZEM1IvQ&lt;/a&gt; (sewer drop, side scroller) and the 128k version of Short Circuit (exploration mode, side scroller mode), the segments of the game were closer to different games entirely than a common engine into which things could be loaded. (This is especially obvious in a for A View To A Kill on the C64: driving, exploring, side scrolling platformer)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't loaded the games up and put a watch on memory to prove it (if someone could that would be great), but it would be nonsense to keep the backing code providing the engine of one play-style around when it's totally different to the current game phase. Only things like maths code (I doubt these games are as sophisticated as Elite, but...), a music player, or a font could be common, but it would simplify loading immensely if the entire active memory space (save the player's score/lives and the loader itself) were just blasted with the new phase every time.&lt;/p&gt;&#xA;" OwnerUserId="16178" LastActivityDate="2020-02-07T10:53:22.457" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13625" PostTypeId="1" AcceptedAnswerId="13627" CreationDate="2020-02-07T12:11:03.010" Score="11" ViewCount="777" Body="&lt;p&gt;The screen memory layout on the Commodore 64 in bitmap mode was nonlinear - which incurred a penalty in development time, code size and speed for games using it - because when designing the VIC-II, they ran out of chip area, couldn't quite afford the small extra area for a separate pointer increment circuit, had to reuse the one from character mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://www.cpcmania.com/Docs/Programming/Painting_pixels_introduction_to_video_memory.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.cpcmania.com/Docs/Programming/Painting_pixels_introduction_to_video_memory.htm&lt;/a&gt; the Amstrad CPC also had a nonlinear layout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the reason for it in the Amstrad case?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-07T15:10:58.220" Title="Why did the Amstrad CPC use a nonlinear screen memory layout?" Tags="&lt;memory-layout&gt;&lt;display&gt;&lt;cpc&gt;&lt;cpc464&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13626" PostTypeId="2" ParentId="13623" CreationDate="2020-02-07T12:37:30.530" Score="5" Body="&lt;p&gt;Most games, eg Gauntlet, Leaderboard loaded level data from the tape or disc, but the code engine stayed the same. &#xA;Some multi part games had separate games that were connected, eg Game Over, Freddie Hardest, Ghostbusters 2. These generally had no data exchanged between the parts.&#xA;A few games loaded code, but maintained data, for example They Stole a Million. &lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2020-02-07T17:46:30.480" LastActivityDate="2020-02-07T17:46:30.480" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13627" PostTypeId="2" ParentId="13625" CreationDate="2020-02-07T13:31:51.803" Score="16" Body="&lt;p&gt;Amstrad used an off-the-shelf component, and did the best they could.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For generating video addresses, sync timing, etc, Amstrad used the 6845 CRTC, which was originally designed for text displays. In particular it is designed for a linear text area, looking up character graphics from a font ROM, so e.g. if you’ve set up a 40-column display with 8px characters then an address counter will go through the same 40 character positions eight times, while a row counter goes up once after every 40 characters has been scanned, then after eight lines of that the address goes up by 40. In a typical implementation external hardware would use the character address to look up a character, then use the fetched character plus the row counter to look up a slice of character graphics from a ROM, and output those.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Acorn used the same chip for pixel graphics in the BBC Micro, and just wired up three bits of the row number as the three lowest address bits, and the character address as the rest. That produces a very non-linear display where every graphics byte is located 8 bytes after the one to its left, each line starts one byte after the one before within each 8-line group, and there’s a (40 or 80) * 8 leap in start addresses every eighth line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amstrad wanted to do better than that so, they wired the outputs up as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;top two bits: bits 13 and 12 of the character address;&lt;/li&gt;&#xA;&lt;li&gt;next three bits: row number;&lt;/li&gt;&#xA;&lt;li&gt;10 further bits: bits 0 to 9 of the character address;&lt;/li&gt;&#xA;&lt;li&gt;least significant bit: an internally generated left/right bit, as Amstrad fetches two bytes per CRTC address.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So it’s linear across a line, for all supported line lengths (and then some).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a 6845 it is impossible to have a fully linear display unless you can fit the entire buffer with 14 bits of address space. On a machine which guarantees a particular power-of-two line length you could incorporate the row number into the character address seamlessly, but a design goal of the CPC was industry-standard 80-column output, which is not a power of two.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-02-07T15:10:58.220" LastActivityDate="2020-02-07T15:10:58.220" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13628" PostTypeId="1" CreationDate="2020-02-07T14:11:04.697" Score="3" ViewCount="309" Body="&lt;p&gt;On the Commodore 64 3D games which use one of the bitmap screen modes were notoriously slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However watching a &lt;a href=&quot;https://www.youtube.com/watch?v=l0KMov2pRdc&quot; rel=&quot;nofollow noreferrer&quot;&gt;gameplay video&lt;/a&gt; of The Sentinel will show that in the first-person view, looking around is very fast. Conversely, when the player moves to another square the screen blanks for several seconds while calculating the new scene.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is looking around so fast? Does the hardware scroll work with the bitmap screen modes too? If so, what is the mechanism for adding the new pixels at the edges when it involves 3D calculations as opposed to a row of characters?&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2020-02-07T17:26:32.050" Title="The Sentinel (aka The Sentry) on Commodore 64 - why was scrolling so fast?" Tags="&lt;commodore-64&gt;&lt;graphics&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13629" PostTypeId="2" ParentId="13628" CreationDate="2020-02-07T17:00:17.747" Score="3" Body="&lt;p&gt;There are two essential elements to programming such smooth scrolling on the C64:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use C64 hardware scrolling, which can move the screen in single pixel increments, but only for 8 pixels.&lt;/li&gt;&#xA;&lt;li&gt;Use double buffering to scroll the back buffer by 8 pixels during the time that hardware scrolling is doing the front buffer.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Since hardware scrolling and screen swapping are fast, there are a lot of cycles available over 8 frames to do the &quot;chunky&quot; 8 pixels worth of software scrolling. This can be done in all VIC-II graphics modes. You do have to deal with some extra complication if using color RAM, since that can't really be double buffered. One common technique is to update the color RAM during the raster by &quot;chasing the beam&quot; so that those color updates don't become visible until the next frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of The Sentinel, it is apparent that the off-screen elements are too complicated to be computed in real-time while also smooth scrolling the screen plus implementing some game logic. So the long delay between scenes is probably used to compute the off-screen areas and use these pre-computed pixels for the course software scrolling. And blanking the screen during computation speeds things up a little since it eliminates VIC-II &quot;bad lines&quot; that normally steal CPU cycles. Farther performance could be gained if the game detected running on a C128 and also switched the CPU to 2MHz during screen blanking.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-02-07T17:26:32.050" LastActivityDate="2020-02-07T17:26:32.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13630" PostTypeId="1" AcceptedAnswerId="13631" CreationDate="2020-02-07T17:38:55.327" Score="5" ViewCount="936" Body="&lt;p&gt;In the early nineties, as discussed in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6487/what-specific-technical-advances-allowed-pcs-to-play-full-screen-full-motion&quot;&gt;What specific technical advance(s) allowed PCs to play &amp;quot;Full-screen full-motion&amp;quot; video?&lt;/a&gt; it became commonplace for PC games to use the storage capacity of CD-ROM to supply clips of full motion video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CD-ROM has error correction so that in the event of a slightly scratched CD, you won't lose any data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But video uses lossy compression anyway. So it seems that when you are playing video, it would be more efficient to gain access to the raw bitstream, and have more bits per second to use for the error correction built into your video compression.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this something that was done, or optionally available, on early nineties PCs?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-08T05:59:11.883" Title="Could early nineties PCs access raw CD bitstream?" Tags="&lt;ibm-pc&gt;&lt;video&gt;&lt;cd-rom&gt;&lt;compression&gt;&lt;multimedia&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13631" PostTypeId="2" ParentId="13630" CreationDate="2020-02-07T17:56:17.613" Score="13" Body="&lt;h2&gt;TL;DR; Yes and yes, but.&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CD-ROM Mode 2 offers all 2336 bytes of a CD-ROM block for user data.&lt;/li&gt;&#xA;&lt;li&gt;By default &lt;em&gt;all&lt;/em&gt; CD-ROM drives can read Mode 2 disks as well&lt;/li&gt;&#xA;&lt;li&gt;Mode 2 CD-ROM have been produced, but it never really took off.&lt;/li&gt;&#xA;&lt;li&gt;Mode 2 is not raw, but still incorporates basic error correction.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Background:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;CD-ROM has error correction so that in the event of a slightly scratched CD, you won't lose any data.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;CD-ROM use error correction on two level. First there is the basic LEC, as defined for basic &lt;a href=&quot;https://en.wikipedia.org/wiki/Compact_Disc_Digital_Audio&quot; rel=&quot;noreferrer&quot;&gt;CD-DA&lt;/a&gt; (Digital Audio) format in the Red Book. Second there is Mode 1 ECC as defined in the Yellow Book for CD-ROM.&lt;/p&gt;&#xA;&lt;p&gt;For Audio-CD the Red Book defined a continuous bitstream separated in tracks. This format already includes error correction. It was the Yellow Book that defined individual addressable sectors. Two modes were defined&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;CD-ROM Mode 1&lt;/strong&gt; - Each block of 2352 byte is structured in&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Syncronisation(12 Byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Header (4 byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Data (2048 byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Error detection (4 byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Spare (8 Byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Error correction (276 bytes)&lt;/p&gt;&#xA;&lt;p&gt;This ECC is in addition to the basic Red Book LEC&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;CD-ROM Mode 2&lt;/strong&gt; - Does leaves everything after the header to user data:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Syncronisation(12 Byte)&lt;/li&gt;&#xA;&lt;li&gt;Header (4 byte)&lt;/li&gt;&#xA;&lt;li&gt;Data (2336 byte)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While Mode 1 is the most common data format, Mode 2 was used for some video/audio data storage, but never became much popular. Both modes can be mixed within the same data track.&lt;/p&gt;&#xA;&lt;p&gt;Mode 2 did not only leave out ECC, but as well error detection. This got modified with the 1991 CD-ROM/XA format, which is essentially using a Philips &lt;a href=&quot;https://en.wikipedia.org/wiki/CD-i&quot; rel=&quot;noreferrer&quot;&gt;CD-I&lt;/a&gt; format, now called Mode 2 Form 1/2:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;CD-ROM/XA Mode 2 Form 1&lt;/strong&gt; - Each block of 2352 byte is structured in&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Syncronisation(12 Byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Header (4 byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Subheader (8 Byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Data (2048 byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Error detection (4 byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Error correction (276 bytes)&lt;/p&gt;&#xA;&lt;p&gt;This ECC is in addition to the basic Red Book LEC&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;CD-ROM/XA Mode 2 Form 2&lt;/strong&gt; - Does leaves everything after the header to user data:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Syncronisation(12 Byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Header (4 byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Data (2336 byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Subheader (8 Byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Data (2324 byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Error detection (4 byte)&lt;/p&gt;&#xA;&lt;p&gt;(CD-I did specify the last 4 bytes as reserved)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But video uses lossy compression anyway. So it seems that when you are playing video, it would be more efficient to gain access to the raw bitstream, and have more bits per second to use for the error correction built into your video compression.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Lossy compression doesn't mean no error correction, but reduction in data bandwith by dropping information &lt;em&gt;on purpose&lt;/em&gt;. A lossy compression does, per se, not include any error correction Involuntary lost information will destroy its usability the same way as with lossless formats.&lt;/p&gt;&#xA;&lt;p&gt;Also, switching from Mode 1 to Mode 2 only delivered about 14% more bandwidth. Not really a gain worth much, especially not the risk of damaged data.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is this something that was done, or optionally available, on early nineties PCs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Mode 2 was present on all Yellow Book compatible drives, so essential all.&lt;/p&gt;&#xA;&lt;p&gt;And beside some special formats, Philips CD-I did store video using (their version of) Mode 2 by default.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-08T05:59:11.883" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13632" PostTypeId="2" ParentId="13601" CreationDate="2020-02-07T18:43:08.287" Score="1" Body="&lt;h1&gt;Example of a machine that tooke advantage of this&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The Apple Macintosh IIfx used a special kind of memory modules with separated data input and output lines for all data bits. This allowed the designers to pipeline bus cycles (like continuing a write to RAM while already doing the next transaction on the bus or addressing the RAM while the previous transaction is still running) without the need to introduce dedicated tristate buffers for the RAM.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Example of another device that took advantage of this&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I reverse engineered a 16-bit memory expansion card for the 80286 ISA bus. It had two banks of 18 chips each (16 data bits and two parity bits). The designers connected D and Q for the data bits &lt;em&gt;only&lt;/em&gt;. They used separate D and Q for the parity chips. The input of the RAM is connected directly to the output of a 9-bit parity generator. The parity output of the RAM is connected via an AND gate to the 9th input pin of the 9-bit parity generator. During write cycles, the parity output is masked via that and gate, and the required parity bit is presented to the D pin of the RAM. During read cycles, the AND gate passes the actual parity bit to the parity generator (now used as verifier) and the ouput of the parity generator is used to drive the NMI line to indicate a parity error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This design was likely common in PC-type computers, as the 30-pin SIMM standard follows this pattern: combined DQ pins for the data bus, but separate D and Q pins for the parity bit.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Anecdotal side story&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I own 4 30-pin SIMMs that are of sub-standard quality and short Parity D to Parity Q internally on the module. They contain three 4Mx4 chips for a 4Mx12 array and 0-ohm solder links to pick any 3 bits from each of the chips to provide a 4Mx9 interface to the computer. I used them in a 486 computer for a short time, where there were &lt;em&gt;no&lt;/em&gt; issues with the parity bit (no surprise, as parity bits are part of the 486 front-side bus, so putting these bits on the bidirectional bus makes absolute sense).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found out about the non-conforming module only after taking a deeper look into them because they corruptes &lt;em&gt;data&lt;/em&gt; bits during normal operation. I am quite confident that the 4Mx4 chips on that module are relabeled factory rejects.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2020-02-07T18:43:08.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13633" PostTypeId="1" AcceptedAnswerId="13645" CreationDate="2020-02-07T19:43:06.513" Score="45" ViewCount="4054" Body="&lt;p&gt;I've been reading through &lt;a href=&quot;https://simson.net/ref/ugh.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Unix Hater's Handbook&lt;/a&gt;. It has many, &lt;em&gt;many&lt;/em&gt; very valid criticisms. (I'm still raging that terminal escape codes aren't in the terminal driver...)&lt;/p&gt;&#xA;&lt;p&gt;There is one anomaly though: One of the chapters is complaining that Unix doesn't support &amp;quot;file versioning&amp;quot;, when &amp;quot;real operating systems&amp;quot; have had this feature for years.&lt;/p&gt;&#xA;&lt;p&gt;Now they don't really elaborate on what that means, but it &lt;em&gt;seems&lt;/em&gt; to mean a system where each time you save a file, the old version is still kept, and the new revision just gets a new version number.&lt;/p&gt;&#xA;&lt;p&gt;I am not personally aware of &lt;em&gt;any&lt;/em&gt; operating system in the entire history of computing &lt;em&gt;ever&lt;/em&gt; having had this feature. Can someone enlighten me as to what these mythical systems were?&lt;/p&gt;&#xA;&lt;p&gt;Unix was written an extremely long time ago. As I understand it, in Those Days a &amp;quot;large&amp;quot; system might have as much as 2 kilowords of memory and presumably a similarly tiny amount of disk. The &amp;quot;real operating systems&amp;quot; the book alludes to would presumably be even older than Unix, and hence for even more constrained hardware.&lt;/p&gt;&#xA;&lt;p&gt;I find it &lt;em&gt;very&lt;/em&gt; hard to believe that a system with a 4 Kword disk would &amp;quot;waste&amp;quot; disk space by keeping every prior version of every file ever created. That just seems like you'd run out of disk space within ten minutes.&lt;/p&gt;&#xA;&lt;p&gt;Have I misunderstood what they're talking about? Or were there actually systems that worked like that?&lt;/p&gt;&#xA;" OwnerUserId="11695" LastEditorUserId="15334" LastEditDate="2021-01-22T11:01:15.123" LastActivityDate="2021-01-22T11:01:15.123" Title="Filesystems with versioning" Tags="&lt;history&gt;&lt;file-system&gt;&lt;books&gt;" AnswerCount="5" CommentCount="15" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13634" PostTypeId="2" ParentId="13611" CreationDate="2020-02-07T20:01:50.167" Score="0" Body="&lt;p&gt;The DEC Alpha, the first mass-produced 64-bit processor, featured a pipeline architecture superior for the time. Intel contracted as a second-source manufacturer of the Alpha technology for DEC, whose manufacturing was superior, but limited. When Intel afterwards brought out the Itanium, supposedly borrowing some of Alpha's technology, DEC sued. Thereafter Intel agreed to buy DEC's Alpha technology, along with its manufacturing facility, and to pay punitive damages.  DEC was being led differently anyway and no longer wanted to be in the manufacturing business. Thus most of today's 64-bit processor technology had its roots in Alpha. However, at the time, the best processor on the market was Sun Microsystem's SPARC—but only while running their SunOS/Solaris Unix.&lt;/p&gt;&#xA;" OwnerUserId="16186" LastEditorUserId="14758" LastEditDate="2020-02-09T05:36:14.860" LastActivityDate="2020-02-09T05:36:14.860" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13635" PostTypeId="2" ParentId="13633" CreationDate="2020-02-07T20:03:27.327" Score="24" Body="&lt;p&gt;There were quite a few operating systems that had file versioning in the same era as unix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many file systems that we are familiar with today just have some components of a file name, such as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Name.type&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;They might have a path:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;\folder\folder\Name.type&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;They might have a server (UNC as an example):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;\\server.domain\folder\folder\name.type&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In many current systems, if you make a copy of the file, or attempt to overwrite with the same name, it might asks if you want to overwrite. If you choose not to you get a version number appearing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Name.type(1)&#xA;Name.type(2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So you can experience file versioning on current operating systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, a fully versioned file system would not normally overwrite a file. It makes a new version  number every time. This means whenever you use an editor or save a spreadsheet, or other document you get a whole stack of numbered versions of the file. The version number is usually stored at a distinct location in the directory structure and is not part of the name. If you refer to a file by name you are given the latest. You can clean up old versions of the file with specific system commands, like &lt;code&gt;PURGE&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two example operating systems that used this were VMS (from DEC) and George III (from ICL).&#xA;(I can probably add a fair few more when my memory digs them out).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did it exhaust storage: yes and no. The file storage as usually quota'd to users (which were always multi-user) and each individual user may exceed their quota and have to tidy up. The other aspect is that most files were just text. There was much less multi-media like images and video that we have today. The other thing is that these computers were huge, and not as small as you imagine, and that exchangeable disk/tape storage was the common way of having many files - you swapped the disc pack and the tape.&lt;/p&gt;&#xA;" OwnerUserId="611" LastEditorUserId="611" LastEditDate="2020-02-08T10:00:01.813" LastActivityDate="2020-02-08T10:00:01.813" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="13636" PostTypeId="1" AcceptedAnswerId="13642" CreationDate="2020-02-07T20:09:49.423" Score="12" ViewCount="1928" Body="&lt;p&gt;Some years ago, I discovered an obscure programming language called Haskell. This language is mind-blowingly powerful; I can barely believe it even exists. But what's even more shocking is, it was apparently invented in 1990.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not only that, but it's based on an even older language called Miranda, which apparently dates to 1985. And that in turn is based on something called ML, which goes all the way back to 1973.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like most people, I spent most of the 1980s learning to use BASIC on an 8-bit home microcomputer. I spent many, &lt;em&gt;many&lt;/em&gt; sleepless nights typing in code that would just barely make the machine do something interesting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It &lt;em&gt;boggles my mind&lt;/em&gt; that decades before that, a bunch of greybeards locked away in a secret buncker somewhere were designing these insanely powerful programming languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to ask... in 1973, what sort of &lt;em&gt;hypothetical future computer&lt;/em&gt; would have actually been able to &lt;em&gt;run&lt;/em&gt; something this powerful?&lt;/p&gt;&#xA;" OwnerUserId="11695" LastActivityDate="2020-02-09T22:08:45.710" Title="What hardware did advanced programming languages run on?" Tags="&lt;history&gt;" AnswerCount="3" CommentCount="23" FavoriteCount="3" ClosedDate="2020-02-09T22:07:50.100" ContentLicense="CC BY-SA 4.0" />
  <row Id="13637" PostTypeId="1" AcceptedAnswerId="13639" CreationDate="2020-02-07T20:22:58.117" Score="8" ViewCount="663" Body="&lt;p&gt;Many, &lt;em&gt;many&lt;/em&gt; years ago, we had a game for the Commodore 64 called &quot;The Sentinel&quot;. I remember reading the instructions and being utterly baffled as to how you actually play the damned thing! Hopefully somebody remembers this game and can enlighten me...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game displays a 3D playing field, divided up into squares. By pointing at a square, you can teleport to that square. (Takes &lt;em&gt;forever&lt;/em&gt; to redraw the display!) The goal of the game, apparently, is to overlook the Sentinel and, by teleporting to his square, win the game...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...except that, by the laws of perspective, you can only ever overlook squares &lt;em&gt;lower&lt;/em&gt; than you. But the Sentinel is always standing on the &lt;em&gt;highest&lt;/em&gt; square on the map. &lt;em&gt;How can you ever overlook the highest point on the map?!&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To this day, several decades later, I'm still wondering how it's mathematically possible to win this game...&lt;/p&gt;&#xA;" OwnerUserId="11695" LastActivityDate="2020-02-08T15:40:17.427" Title="How do you play &quot;The Sentinel&quot;?" Tags="&lt;commodore-64&gt;&lt;gaming&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13638" PostTypeId="2" ParentId="13637" CreationDate="2020-02-07T20:44:31.737" Score="3" Body="&lt;p&gt;Both you and the sentinel have height. You just need to get high enough that your square  plus your height is above the sentinel's square. You can absorb anything standing on a square you can see. &lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2020-02-07T20:44:31.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13639" PostTypeId="2" ParentId="13637" CreationDate="2020-02-07T20:45:46.263" Score="10" Body="&lt;p&gt;Stand at your desk. Look downward. Can you see your desk? If you were to teleport so that you were standing on top of it, would you be higher than you were before you teleported?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, the majority of height gains comes from the other gameplay element in The Sentinel — consuming and producing trees and boulders. Anything you consume gives you energy. You can spend energy on building boulders on a square you can see, to produce a higher surface to build a robot on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the primary challenge is to find a route through building and consuming that allows you to get higher than The Sentinel without ever being in his eyeline.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-02-07T20:45:46.263" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13641" PostTypeId="2" ParentId="13557" CreationDate="2020-02-07T21:25:08.760" Score="3" Body="&lt;p&gt;Two issues... the wobble was because the post-transform 2D vertex coordinates for each triangle were integers... So the vertex could only move on discreet pixel locations. This makes smooth vertex movement virtually impossible. PS2 for instance fixed this by having fixed point fractional screen vertex locations, helping smooth movement out. Other later consoles had floating point 2D vertex positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The texture warp when drawing quads was due to the texture interpolation having no concept of screen depth, so only worked in linear 2D screen space. So when a square polygon is transformed with perspective there will either be a crease or weird curved UV waarping, depending on the implementation. To have smooth 3D UV interpolation you need to use non-linear UV interpolation based on vertex depth values (so 1/u and 1/v are interpolated in proportion to 1/z, rather than simply interpolating u and v by screen position). The triangle unit on the PS1 simply didn't have access to this data since the GTE only returned 2D screen locations with no depth.&lt;/p&gt;&#xA;" OwnerUserId="16166" LastActivityDate="2020-02-07T21:25:08.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13642" PostTypeId="2" ParentId="13636" CreationDate="2020-02-07T21:40:18.380" Score="24" Body="&lt;p&gt;8-bit home micros were not powerful computers when they first appeared. They were inexpensive enough that individuals could buy them, and almost everything else took second place to price. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1973, there were early versions of UNIX running on DEC PDP-11 machines, and a wide variety of 24-bit to 36-bit machines with proprietary operating systems. None of them had GUIs, which soak up a lot of the power of modern computers. They could definitely run an ML implementation; you might not be able to handle such big problems as on a modern machine, and it would certainly be slower, but it would &lt;em&gt;work&lt;/em&gt;. The difference was the price: something in the region of $50,000, rather than $500 or less for a home computer in the next decade. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example, the original ML implementation was written in LISP on a DEC &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-10&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-10&lt;/a&gt;, a 36-bit machine often used for multi-user systems, such as universities. This was a big machine, costing $500,000 or more for a complete installation, but widely capable by the standards of the time.&lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="79" LastEditDate="2020-02-09T22:08:45.710" LastActivityDate="2020-02-09T22:08:45.710" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13643" PostTypeId="2" ParentId="12567" CreationDate="2020-02-07T21:42:38.467" Score="1" Body="&lt;p&gt;DMA is a technique where you can move memory around without involving the main CPU. This was a huge win for old gaming hardware as an awful lot of time can be spent simply shuffling graphics data around the screen memory. Offloading this task to custom silicon meant the CPU had more time to do much more interesting and computationally expensive things. The actual copying itself can be done much more quickly too, meaning smoother scrolling etc.&lt;/p&gt;&#xA;" OwnerUserId="16166" LastActivityDate="2020-02-07T21:42:38.467" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13644" PostTypeId="2" ParentId="13636" CreationDate="2020-02-07T21:43:33.413" Score="5" Body="&lt;p&gt;Well, those languages were running on real computers. Except that they weren't &lt;em&gt;microcomputers&lt;/em&gt; but supercomputers (see the works of &lt;a href=&quot;https://en.wikipedia.org/wiki/Seymour_Cray&quot; rel=&quot;nofollow noreferrer&quot;&gt;Seymour Cray&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those computers were extremely expensive and had much more memory than the 1980s microcomputers. An individual just couldn't afford it. It was shared between students/researchers. Also had more evolved storage devices, not just standard audio cassettes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that allowed to develop and use compiled languages. Note that compiled languages are possible on microcomputers (there are Z80 &amp;amp; 6502 C compilers for instance, even if they are cross-compilers, not native) but the code takes a lot of memory. On a microcomputer, programs are generally BASIC + assembly for memory reasons (assembly being used for speed in game main loops, BASIC being used for menus, score, management, where operations were'nt time-critical).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC is not as advanced as the languages you're mentionning, but it's also extremely cheap memory-wise, with tokens only taking 1 byte of memory, and interpreted by the ROM. It also provided easy access to computer hardware (input, graphics, sound), and all usually fitted in 48+16 Kb RAM. It's really not the same scale as for specialized supercomputers, even if those were older (the cray 1 clock was 80MHz, most home computers clock were a few MHz in comparison)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was mentionning 6502 and z80 compilers, but those are relatively recent, and only runned from a more powerful machine. A native C compiler (or other language) for a 8-bit home machine (single processor, 64k RAM) is extremely unlikely and would be slow &amp;amp; impractical. Even &lt;em&gt;assemblers&lt;/em&gt; weren't so common at that time (BBC micro had one, though). People used to enter hex opcode in DATA sections instead...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first 8-bit microcomputers were just a cut-down, home version of its ancestors, affordable to everyone. Only when the 16/32 bit computers appeared that it became possible to use more evolved languages.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-02-09T14:46:03.637" LastActivityDate="2020-02-09T14:46:03.637" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13645" PostTypeId="2" ParentId="13633" CreationDate="2020-02-07T21:50:50.550" Score="20" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I am not personally aware of any operating system in the entire history of computing ever having had this feature. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Siemens BS2000 of the early 1970s may be an example here (*1) with a feature they called &lt;em&gt;file generations&lt;/em&gt;. A new file could be marked in the catalogue as having generations, setting a base generation number and how many generations are to be held (*2). It was presented by a single entry, and for most purpose handled like any other file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To address any of the generations a file name could be suffixed with it's generation number. For example a file named &lt;em&gt;&quot;TEST.FILE&quot;&lt;/em&gt; could be defined as holding up to 5 generations with generation 6..10 existing and generation 10 being the newest (actual). Valid names for file operations would be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&quot;TEST.FILE&quot; accesses the actual generation (#10)&lt;/li&gt;&#xA;&lt;li&gt;&quot;TEST.FILE(9)&quot; accesses the explicit generation #9&lt;/li&gt;&#xA;&lt;li&gt;&quot;TEST.FILE(-1)&quot; also accesses the generation before the actual (as well #9)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The actual generation (pointer) could be moved using shell commands and/or an API. For example to revert to a previous version. If in our example it would be set to 8, then &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&quot;TEST.FILE&quot; accesses the actual generation (#8)&lt;/li&gt;&#xA;&lt;li&gt;&quot;TEST.FILE(-1)&quot; also accesses the generation before the actual (#7)&lt;/li&gt;&#xA;&lt;li&gt;&quot;TEST.FILE(+1)&quot; also accesses the generation after the actual (#9)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This mechanism makes it easy to handle things like logfiles, program versions or databases. Roll-back or roll-forward can be done by a simple command and unlike any naming scheme, no program has to be modified to work with file generations - that is, unless some special features are to be used - all they see is a regular file.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Unix was written an extremely long time ago. As I understand it, in Those Days a &quot;large&quot; system might have as much as 2 Kwords of memory, [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Erm, these were the smallest systems. Keep in mind, a PDP of that time was the lowest end of computer available. The upper end, where 'real' OSes were used, was quite different. For example, the database system used for the 1972 summer Olympics used two mainframes with 2 MiB of core memory each and more than 30 disk drives of 77 MiB each (*3). Those were large systems (*4). Not PDPs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Admittedly, such a configuration is close to the upper limit what was used at the time, but it wasn't a unique installation.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I find it very hard to believe that a system with a 4 Kword disk would &quot;waste&quot; disk space by keeping every prior version of every file ever created. That just seems like you'd run out of disk space inside of ten minutes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Like with many other features, they are only useful on a capable setup, the same way that subdirectories only make sense with drives large enough to hold them and so on. Equally important, features only make sense from an application viewpoint. An application needing do hold versions will love an OS that supports it in a consistent way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: Developing an OS's capabilities orientated at the smallest possible configuration doesn't sound like a good idea, or does it?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Have I misunderstood what they're talking about? Or were there actually systems that worked like that?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Quite a lot. In the mid '70s it was seen as a great addition to extend the usability of file systems. At that time many features we would nowadays place request from a database system were provided directly by OS and file system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and it's not only a thing of the past. IBM zOS for example does as well support their mechanic of file versions, called a &lt;a href=&quot;https://www.ibm.com/support/knowledgecenter/zosbasics/com.ibm.zos.zconcepts/zconcepts_175.htm&quot; rel=&quot;noreferrer&quot;&gt;Generation Data Group&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - BS2000 was based on RCA's TSOS, but I'm not sure how much was already present in TSOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - This includes tape storage, so generations could be moved to tape for long term storage (and to save disk space). The catalogue would still be used to manage them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Yes, that's in total about 2 GiB in 1972 :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - That view, users of 'real' computers had on Unix is reflected in the Unix Hater's Handbook, isn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-11T15:45:44.713" LastActivityDate="2020-02-11T15:45:44.713" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13646" PostTypeId="1" CreationDate="2020-02-07T22:44:12.997" Score="1" ViewCount="1415" Body="&lt;p&gt;The following tables are modified and corrected from &lt;a href=&quot;http://www.cpcmania.com/Docs/Programming/Painting_pixels_introduction_to_video_memory.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Painting pixels: Introduction to video memory&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;m-bit&lt;/code&gt;: memory bit&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;p-bit&lt;/code&gt;: pixel bit&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Mode 2 - 640x200 (half width pixels), 2 colours&lt;/h3&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;m-bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0&#xA;------+---+---+---+---+---+---+---+---&#xA;pixel | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7&#xA;p-bit | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3&gt;Mode 1 - 320x200 (single width pixels), 4 colours&lt;/h3&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;m-bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0&#xA;------+---+---+---+---+---+---+---+---&#xA;pixel | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3&#xA;p-bit | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3&gt;Mode 0 - 160x200 (double width pixels), 16 colours&lt;/h3&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;m-bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0&#xA;------+---+---+---+---+---+---+---+---&#xA;pixel | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1&#xA;p-bit | 0 | 0 | 2 | 2 | 1 | 1 | 3 | 3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The arrangement of pixels makes sense for each mode. One ascending group of eight pixels, two ascending groups of four pixels, four ascending groups of two pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bit patterns per pixel make sense for modes 2 (all &lt;code&gt;0&lt;/code&gt;) &amp;amp; 1 (four &lt;code&gt;0&lt;/code&gt;s, then four &lt;code&gt;1&lt;/code&gt;s), although it might have made more sense to have the high bits first. However, for mode 0 it goes &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;2&lt;/code&gt;, &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;3&lt;/code&gt; (&lt;code&gt;2&lt;/code&gt; &amp;amp; &lt;code&gt;1&lt;/code&gt; are swapped compared to ascending order). Why not use simple ascending order? &#xA;I assume there was some advantage to aligning memory bits &lt;code&gt;3&lt;/code&gt; &amp;amp; &lt;code&gt;2&lt;/code&gt; (and also &lt;code&gt;7&lt;/code&gt; &amp;amp; &lt;code&gt;6&lt;/code&gt;) to their pixel bits between modes 1 and 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was this design chosen?&lt;/p&gt;&#xA;" OwnerUserId="2067" LastActivityDate="2020-02-08T18:31:30.250" Title="In the Amstrad CPC's Mode 0, what was the design rationale for interleaving the pixel bits?" Tags="&lt;memory-layout&gt;&lt;cpc&gt;&lt;screen&gt;&lt;design-choices&gt;" AnswerCount="2" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13647" PostTypeId="2" ParentId="13633" CreationDate="2020-02-08T00:20:09.297" Score="38" Body="&lt;p&gt;FILES-11 on DEC minicomputers was a versioned file system -- RSX-11M, IAS (on PDP-11), VMS (on VAX, Alpha).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Version numbers are very user-visible; they are part of the syntax for specifying a file. And programs are designed to behave appropriately for a versioned file system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When creating a file, the normal way was to not specify a version number, and the system would assign one higher than the highest extant version.  This is the &quot;normal&quot; approach for editors and similar file-modifying programs.  Much easier than juggling .BAK files, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When opening a file, the normal way was to not specify a version, and the system would open the highest extant version. This is the normal approach for using programs that just read file.  If the user is typing in the name of the file to be opened, they can specify a version or not, as required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could specify a version, which allows you to modify a file in-place if desired (when writing) or read any previous version.  That'd be normal for a file that, for example, was used for random access (database, ....)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With respect to &quot;not running out of space&quot; -- two things.  Firstly, typical disks of the time could hold many thousands of files with typical file sizes of the time. Think program source files (Macro-11).  A large file is, what, 1000 lines?  That's surely under 50K bytes, or 100 blocks in PDP-11 terms.  An RP04 disk pack, a storage device from around 1974, held about 88MB. For another data point, the RSX-11M-PLUS kernel (exec and drivers) source files occupy around 4.5MB on my PiDP-11 system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, people generally tidied up. While doing active program development you'd likely end up with dozens of versions. When happy you didn't need to go backwards, you'd purge down to one version.  And the computer operator might very well decide to purge everything down to a couple of versions (if he was nice, with fair warning to the users) if the disks were getting near full. In summary, users were aware they were using a finite resource and behaved accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my opinion it's a giant step backwards to not have a versioning file system.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-02-11T02:42:06.993" LastActivityDate="2020-02-11T02:42:06.993" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="13648" PostTypeId="2" ParentId="13630" CreationDate="2020-02-08T02:22:48.497" Score="6" Body="&lt;p&gt;I think your premise is a bit off. Compression (lossy or otherwise) makes media much &lt;em&gt;more&lt;/em&gt; susceptible to errors, not less. If you flip one bit in an uncompressed image, the probable result is that one pixel of the output is incorrect. If you flip one bit in a compressed image, the probable result is something like &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/1/1a/Bitrot_in_JPEG_files%2C_1_bit_flipped.jpg&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt;. If you flip one bit in a video file with inter-frame compression, the probable result is &lt;em&gt;several seconds&lt;/em&gt; of garbage persisting until the next keyframe/IDR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In an information-theoretic way, compression and error-correcting codes are nearly opposites. Error-correcting codes &lt;em&gt;add&lt;/em&gt; redundancy to data; compression &lt;em&gt;removes&lt;/em&gt; redundancy.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2020-02-08T02:22:48.497" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13650" PostTypeId="1" AcceptedAnswerId="13683" CreationDate="2020-02-08T08:23:59.390" Score="8" ViewCount="398" Body="&lt;p&gt;Atari was originally an arcade game company, starting at the beginning of the seventies with Computer Space and Pong. In 1977, they entered the console business with the VCS a.k.a. 2600; in 1979, they entered the home computer business with the 400 and 800; a good summary timeline can be found at &lt;a href=&quot;https://www.landley.net/history/mirror/atari/museum/Atari-Timeline.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.landley.net/history/mirror/atari/museum/Atari-Timeline.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm curious about whether the other divisions started overshadowing the arcade, or remained more like sidelines; it would be helpful in understanding their actions. Are breakdowns of revenue and profit by division available?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or to be specific, say in 1982, the peak year of the old Atari prior to the crash: did they make more profit from arcade games, or from the 2600 and its games?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-10T19:47:21.170" Title="Did Atari make more money from arcade games or consoles?" Tags="&lt;history&gt;&lt;atari&gt;&lt;arcade&gt;&lt;atari-2600&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13651" PostTypeId="2" ParentId="13637" CreationDate="2020-02-08T09:02:31.933" Score="2" Body="&lt;p&gt;There were three types of elements: trees, cubes and Sentinels (1, 2, or 3 units of mass). So you could absorb e. g. 7 trees and build two cubes and an empty Sentinel on top of them. Then transfer your mind, absorb back the old Sentinel, and voila! - you are standing higher than before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the trees are the magic. &lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-02-08T09:02:31.933" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13652" PostTypeId="2" ParentId="13633" CreationDate="2020-02-08T13:41:33.710" Score="12" Body="&lt;p&gt;In addition to what others wrote: ITS, TENEX, TOPS-20.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In ITS, files are named by two strings each at most six characters.  The second file name can be a number to specify a version.  If you open a file for reading, &lt;code&gt;&amp;gt;&lt;/code&gt; will access the latest version.  When writing, it creates a new version.  &lt;code&gt;&amp;lt;&lt;/code&gt; refers to the oldest version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moby edit.  Let's make a timeline.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;~1965 - Project MAC: MACDMP&lt;/li&gt;&#xA;&lt;li&gt;1967 - Project MAC: ITS&lt;/li&gt;&#xA;&lt;li&gt;1969 - BBN: TENEX (→ DEC TOPS-20)&lt;/li&gt;&#xA;&lt;li&gt;1969 - ICL: GEORGE III&lt;/li&gt;&#xA;&lt;li&gt;1971 - DEC: RSX-11 (→ IAS, VMS)&lt;/li&gt;&#xA;&lt;li&gt;~1971? - Siemens: BS2000&lt;/li&gt;&#xA;&lt;li&gt;1993 - Microsoft: Windows NT&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2020-02-27T11:44:00.427" LastActivityDate="2020-02-27T11:44:00.427" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13653" PostTypeId="2" ParentId="13637" CreationDate="2020-02-08T14:44:14.050" Score="5" Body="&lt;p&gt;One, the fact mentioned by others, that you only need to be higher than the surface of a square to be able to create a body and teleport there. The bodies have nonzero height, so you can gain one body-height for free. However, looking at some videos, I'm not sure if that's enough to go to a higher level. &lt;a href=&quot;https://youtu.be/FGadqJbqTn0?t=124&quot; rel=&quot;noreferrer&quot;&gt;Here, at 2:04&lt;/a&gt;, it appears that the body created by the player is not tall enough to see the floor of the next-higher level. (That may depend on the version of the game, at least the &lt;a href=&quot;http://johnvalentine.co.uk/zenith.php?art=index&quot; rel=&quot;noreferrer&quot;&gt;remake Zenith&lt;/a&gt; is different in this.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, blocks can be used to go arbitrarily high, limited by energy. When the player creates blocks, they only need to see the &lt;em&gt;side&lt;/em&gt; of a block to create a body or more blocks on top.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, &lt;a href=&quot;https://youtu.be/9V_pgo3vgiI?t=27&quot; rel=&quot;noreferrer&quot;&gt;in this video, at about 0:27&lt;/a&gt;, the player creates two blocks and a body, and it appears that the top of the second block is not visible. At &lt;a href=&quot;https://youtu.be/9V_pgo3vgiI?t=321&quot; rel=&quot;noreferrer&quot;&gt;5:20&lt;/a&gt;, a similar thing is done, this time without even scrolling the view so that the top of the second block (and the body created there) would be visible. This also shows that they don't need to &lt;em&gt;aim&lt;/em&gt; at the top of the block, only at the side. Similarly with three blocks &lt;a href=&quot;https://youtu.be/Ub6BsT2Gm1c?t=35&quot; rel=&quot;noreferrer&quot;&gt;in another video, at about 0:35&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Sentinel_(video_game)&quot; rel=&quot;noreferrer&quot;&gt;text on Wikipedia&lt;/a&gt; also appears to agree with this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Controlling Synthoids that are standing at a higher level is fundamental to the game, because only the objects which occupy a visible square can be interacted with (&lt;strong&gt;the player may absorb or create objects on a boulder if the sides can be seen&lt;/strong&gt;). &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Height is gained by placing a boulder on any visible square, and putting a Synthoid on the boulder.&lt;/strong&gt; The player may then transfer consciousness to the new Synthoid, and absorb the old one. Stacks of boulders of any height may be created, if the player has enough energy.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The energy required for creating blocks/boulders is of course acquired by absorbing trees (and sentries!) from the landscape, and reabsorbing blocks and bodies created by the player.&lt;/p&gt;&#xA;" OwnerUserId="7607" LastEditorUserId="7607" LastEditDate="2020-02-08T15:40:17.427" LastActivityDate="2020-02-08T15:40:17.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13654" PostTypeId="2" ParentId="13636" CreationDate="2020-02-08T15:08:07.130" Score="11" Body="&lt;p&gt;I believe those languages were generally developed at universities, which at the time (the mid 1970's to early 90's) typically started the era using home-build systems, eventually moving into minicomputers running VMS or Unix in their CS departments. These systems were typically used because they were relatively cheap. CS departments needed computers, but didn't have mainframe money (unlike these same schools' alumni outreach departments, which brought in money and thus got nice expensive usually-IBM mainframes. But I digress..)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the ultimate grandparent of Haskell was &lt;a href=&quot;https://en.wikipedia.org/wiki/David_Turner_(computer_scientist)&quot; rel=&quot;noreferrer&quot;&gt;David Turner&lt;/a&gt;'s research at the University of Kent at Canterbury. His functional language interpreters originally ran on homebrew computers at the department, but were ported to Unix from where they became research languages used by students. It was first monetized as &lt;a href=&quot;https://en.wikipedia.org/wiki/Miranda_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;Miranda&lt;/a&gt; on Unix systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first actual Haskell (1.0) compiler was written by &lt;a href=&quot;https://en.wikipedia.org/wiki/Lennart_Augustsson&quot; rel=&quot;noreferrer&quot;&gt;Lennart Augustsson&lt;/a&gt; of Chalmers University, on top of his existing LML (Lazy ML) compiler, which appears to have run on Unix. The next two were Yale Haskell, and Gopher, both university-ish projects. Yale Haskell was written in CMU Common Lisp (so Unix). Gopher was a student's fun side project, and actually ran on a 386 PC off a single floppy disk (one assumes under DOS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're interested, Paul Hudak, John Hughes, Simon Peyton Jones, and Philip Wadler have written a great paper on &lt;a href=&quot;https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/history.pdf?from=http%3A%2F%2Fresearch.microsoft.com%2F%7Esimonpj%2Fpapers%2Fhistory-of-haskell%2Fhistory.pdf&quot; rel=&quot;noreferrer&quot;&gt;the history of Haskell&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="4345" LastEditorUserId="4345" LastEditDate="2020-02-08T15:23:18.187" LastActivityDate="2020-02-08T15:23:18.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13655" PostTypeId="2" ParentId="13646" CreationDate="2020-02-08T16:11:04.440" Score="2" Body="&lt;p&gt;I am not an expert in Amstrad CPC at all, however I can see some regularities, for example:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Not grouping pixel bits in halves (like pixel 0 takes bits 7..4 and pixel 1 takes bits 3..0) allows one to use single shift register, that always shifts by 1 bit.&#xA;In mode 2, it shifts 8 times for 8 pixels, in mode 1 it shifts 4 times for 4 pixels, where one pixel is always taken from bits 7 and 3, second one from bits 6 and 2, etc. Same with mode 0, where every of two pixels takes its bits from 4 positions in the shift register.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A funny bit layout in mode 0 also has its logic, because, in comparison with mode 1, half of bits for a pixel are taken from the same positions. For &quot;0-0-1-1-2-2-3-3&quot; layout, there would be only single such position.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-02-08T16:11:04.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13656" PostTypeId="2" ParentId="13564" CreationDate="2020-02-08T16:58:59.190" Score="2" Body="&lt;p&gt;Partial answer:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I was unable to find [the low level programming] documentation.&#xA;  [...]&#xA;  Perhaps they can give a clue as to what ports to look for.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The datasheet you linked says the V6366 is compatible to the MC6845 except interlacing and skew, and also compatible to CGA, MDA and Hercules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That already gives a good idea what the registers look like (google for descriptions for these four chips, they are not that hard to find). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, bitsavers has the &lt;a href=&quot;http://bitsavers.trailing-edge.com/components/motorola/_dataSheets/6845.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MC6845 data sheet&lt;/a&gt;, and these &lt;a href=&quot;https://www.seasip.info/VintagePC/cga.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;CGA&lt;/a&gt; and &lt;a href=&quot;https://www.seasip.info/VintagePC/mda.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MDA&lt;/a&gt; descriptions give you other registers, and also seem to imply these two cards use an unmodified 6845.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular you are looking for the CRTC (CRT controller) registers, which are set via two ports (one index, one data), traditionally 3B4h/3B5h for monochrome cards and 3D4h/3D5h for color cards. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those registers also have a bit somewhere (in a VGA, index 9 bit 7, but it may be different here) that's used for doubling the vertical lines (&quot;double scan&quot;), and if you compare to the remark&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;IBM PC software for 640 by 200 PELs can be directly displayed on a 640 by 400 PEL screen. (An 8 by 16 character font can be used, and can be displayed even in Double Scan Mode.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;in the datasheet, I am pretty sure you want to reset that bit for a 640x400 mode (and you may need to adjust the other vertical timing registers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now comes the hard part: In early graphics card those registers are only writable, not readable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So either go through your the BIOS dump and find the values used for your flatpanel modes (they can differ from the standard modes for CRTs), or use trial and error: Write a little program that overwrites a single register, start with an educated guess and try writing values until you've found one where the display doesn't change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you experiment, start with &lt;code&gt;Horizontal Displayed&lt;/code&gt; (Index 1) and &lt;code&gt;Vertical Displayed&lt;/code&gt; (Index 6); those should just change the range of the displayed pixels, and shouldn't mess up any sync timings. Prepare to reboot often during experimenting when you get things wrong; this can be time-consuming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you know those values (at least for the registers you need to change), you can try reprogramming it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other hard part is that one:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A Protect Bit is provided for software protection&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Depending on what they mean by that, you may need a special sequence of writes to some ports before you can change any registers. Again, the BIOS may help, as well as a comparison with ways of doing that for known graphics cards.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-02-08T17:49:25.197" LastActivityDate="2020-02-08T17:49:25.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13657" PostTypeId="2" ParentId="13646" CreationDate="2020-02-08T18:31:30.250" Score="4" Body="&lt;p&gt;According to the &lt;a href=&quot;http://www.cpcwiki.eu/imgs/2/29/CPC664_Schematic.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;CPC schematic&lt;/a&gt;, the Armstrad uses a gate array to generate video, so we'd need to know how this gate array is programmed for an exact explanation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But expanding on the comment of supercat, we can do an educated guess:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume we have an 8 bit shift register in the gate array, with a tap for bit C0 at the end, a tap for bit C1 in the middle, a tap for bit C2 two bits from the end and a tap for bit C3 two bits from the other end. These 4 bits C0..C3 go to the color generation part. Picture:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;D0 ---&amp;gt; D1 -+-&amp;gt; D2 ---&amp;gt; D3 -+-&amp;gt; D4 ---&amp;gt; D5 -+-&amp;gt; D6 ---&amp;gt; D7 --+&#xA;            |               |               |                |&#xA;            V               V               V                V&#xA;           C3              C1              C2               C0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then for Mode 2, we can clamp all bits except bit 0 to zero, for two colors in the format given above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Mode 1, we only clamp bits C3 and C2 to zero, leaving bit C0 and bit C1 for four colors in the format given above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally for Mode 0, there is no clamping, leaving all four bits for 16 colors in the format given above. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted a more &quot;logical&quot; format for Mode 0 instead, you'd need extra logic to swap around the four bits from the way they can also be used in Mode 1 and Mode 2 to the way you want for Mode 0. The gate array doesn't contain this extra logic, because it would use up gates that can be used for other purposes, and therefore you end up with the &quot;weird&quot; ordering.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-02-08T18:31:30.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13658" PostTypeId="1" CreationDate="2020-02-08T19:22:11.870" Score="3" ViewCount="108" Body="&lt;p&gt;Over the years during which Commodore sold tape drives, there have been a few different versions of the drive with different analog electronics.  I'm interested in experimenting with &quot;turbo&quot; tape formats, but want to avoid writing anything which wouldn't work reliably on a wide range of drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any documents which would describe things like the relationship between write-pulse widths and read-pulse timing uncertainty, or other such factors that would need to be tweaked to yield optimal performance?&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-02-08T19:22:11.870" Title="Commodore tape drive performance specs" Tags="&lt;commodore-64&gt;&lt;cassette-tape&gt;&lt;vic-20&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13659" PostTypeId="1" AcceptedAnswerId="13661" CreationDate="2020-02-08T19:42:07.247" Score="4" ViewCount="650" Body="&lt;p&gt;Once you have an operating system that provides services callable from programs, you need to provide a way for programs to request those services.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days the general approach only requires a single instruction that will trap from user mode into kernel mode; it can either be an instruction intended for that exact purpose (like SYSENTER on some Intel x86) or a more generic instruction (like INT 2E on earlier Intel) that will serve the purpose.  Such mechanisms generally don't look like the rest of the instruction set, e.g., the opcode does not itself uniquely say what operation is intended by the programmer; any operands have to be separately specified, rather than being part of the syscall instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But an earlier fashion was to provide hardware support for making system calls look more like the rest of the instruction set. This typically included providing many different opcodes, so that (as with hardware) one opcode invoked one system function. Maybe any operand(s) of the instruction would have the usual processing (such as effective address computation - modification and indirection) performed before the kernel was entered, and so on.  I'll name this approach the 'extracode' approach, to use the English term of the period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several systems I've used or read about adopted the extracode approach: Atlas (which coined the term), the FP6000 and its offspring the ICL 1900 range, the SDS 9xx series (&quot;programmed operators&quot;), PDP-10 (&quot;unimplemented user operations&quot;), and probably more.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To give a TOPS-10 (PDP-10) example: to look up a file, the LOOKUP instruction is used. The instruction format is &quot;LOOKUP ac, addr&quot; - this is a single instruction, one word (not some macro sequence). The opcode for LOOKUP (assigned by the kernel design) is not used for anything else. The 'ac' field contains a channel number, the 'addr' points to a filename. The instruction may also specify index and indirection in the usual manner. The hardware computes the effective address of the filename from addr, index, indirection just as it does for all instructions, including validity checking. Then the trap is taken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is in contradistinction to other systems where the system-call sequence requires loading (in this case) the effective address of the filename into an agreed place, an indication of what function we want to perform in some other place, and then issuing the trap instruction that is common to all system calls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The assembly-level programmer is conscious of the difference.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So, why don't we do it that way any more?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My own guesses at an answer is that thinking about each system call as a separate machine instruction is tied to an assembly-language view of programming, a view that the kernel was providing user mode with a virtual machine that &quot;improved&quot; on the hardware, and also to an era when the service repertoire was quite small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this question, I'm not interested in the case of emulation of missing instructions - where lower-end machines implemented in software operations that were done in hardware (or microcode!) on higher-end systems. I also recognize that there might be a grey area around features such as Alpha's PALcode or Prism's epicode, which I'll view an adaptation layer between hardware provisions and OS kernel requirements. And there was a grey area in some systems - e.g., TOPS-10 used separate UUO opcodes for many different functions, but also multiplexed others on top of a single CALL/CALLI UUO. Nevertheless, I'm hoping that there's enough of a distinction to provoke a discussion here.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-02-09T13:22:37.370" LastActivityDate="2020-02-09T14:25:19.813" Title="Why did extracodes fall out of favour?" Tags="&lt;history&gt;&lt;hardware&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13661" PostTypeId="2" ParentId="13659" CreationDate="2020-02-08T20:55:20.627" Score="4" Body="&lt;p&gt;I would guess that the biggest argument against such opcodes is that there are generally better uses to which the opcodes could be put.  The 68000 reserved a range of opcode bytes from 0xA000-0xAFFF for the purpose, which the original Macintosh OS used extensively, but a single-word A-line-trap instruction wouldn't really offer much advantage over a two-word instruction to perform a call to one of 4096 addresses.  It would save a word of opcode space at the call site, and maybe 2-3 words at some of the destinations, of course, but for most programs the fraction of instructions that were A-line traps would be too small for that to be a meaningful savings given modern memory prices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that on some architectures, all multi-word instructions require that extension words be a form of &quot;no-op&quot;, making it possible to examine code at any address and determine what the instruction containing that address will do, without having to know whether execution would start at that word or a previous word.  On such architectures, the advantages of having certain operations be recognizable as single instructions may be greater, but the architectural limitations posed by reserving chunks of address space would also be greater.  Personally, I like the concept of an architecture where any range of code would have a single meaning regardless of where one starts parsing.  Among other things, if code can only run from read-only storage marked as &quot;executable&quot;, and certain kinds of I/O operations can only be done via dedicated opcodes, it becomes trivial to statically guarantee that a piece of code won't perform those kinds of I/O.  I don't know if anyone's tried to design an architecture that's like a cross between ARM and Thumb, where every 32-bit word could either contain one 32-bit instruction or a pair of other operations, but such a design would make certain kinds of static code analysis easier and--with a good compiler--might not necessarily lose too much code density versus a design that freely mixes 16-bit and 32-bit instructions.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2020-02-08T21:03:17.660" LastActivityDate="2020-02-08T21:03:17.660" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13662" PostTypeId="1" CreationDate="2020-02-08T22:20:27.763" Score="11" ViewCount="385" Body="&lt;p&gt;I am restoring a couple of Apple II machines. I would like to add an external 3.5&quot; floppy drive, but they are prohibitively expensive. I have tons of older PC floppy drives and I wonder if they could be made to work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't see why they can't be made to work since floppy drive mechanisms (steppers motors, etc)  are fundamentally identical with differences on the  controller boards located on the drive or on a separate card. &lt;/p&gt;&#xA;" OwnerUserId="16199" LastEditorUserId="129" LastEditDate="2020-02-09T01:54:52.613" LastActivityDate="2020-02-09T23:02:07.420" Title="Can a 1,44MB or 720K PC floppy drive be made to work with an Apple II family?" Tags="&lt;apple-ii&gt;&lt;floppy-drive&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13663" PostTypeId="2" ParentId="13564" CreationDate="2020-02-08T23:24:36.977" Score="7" Body="&lt;p&gt;You can find a description of a lot of the V6366 features that actually get used in typical laptops in the &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/zenith/turbosPort/TM-3034_TurbosPort_386_Technical_Reference_1988.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zenith TurbosPort technical reference manual&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;That manual clearly names the register bits that enable double-scanning (to expand the 200-line mode to your 400-line panel) and the CRTC replacement/adjustment registers needed to to adjust the timing. You can also derive that you need to keep banked register 26h, bit 1 (value 2) cleared to enable GPE as output pin. I can't clearly see how to program the GPE value if not in hercules mode, though.&lt;/p&gt;&#xA;&lt;p&gt;As we already found a way to enable 640x400 graphics, let's match that to the programming info: The successful code sets bit 6 in register 26h, which is documented as &amp;quot;reserved&amp;quot; to provide the high level for GPE. The register 24, bit 5, which you need for the four-bank graphics mode has no helpful documentation there, because &amp;quot;the extended graphics mode are not used with this computer&amp;quot;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;old answer for reference&lt;/h1&gt;&#xA;&lt;p&gt;Contrary to my first impression (by analyzing just the &lt;code&gt;INT 10&lt;/code&gt; handler it provides), the BIOS &lt;em&gt;does&lt;/em&gt; in fact contain code that interfaces with the extended registers of the V6366 video controller. But first let's take a look at the schematics at page 22/23:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Obviously, the only video RAM chip is the 32Kx8 SRAM U6, so the V6366 is running in 8-bit memory mode. This likely makes the highest-bandwidth modes unavailable (those are the 320 pixel modes with 256 colors and 640 pixel modes with 16 colors). The Zenith reference manual claims the chip needs to be put in a 2-byte mode for 320xXXXx16 and 640xXXXx4 (double color bits) and in a 4-byte mode for 320xXXXx256 and 640xXXXx16 (quadruple color bits). These modes likely need hardware assistance.&lt;/li&gt;&#xA;&lt;li&gt;Memory address bit 14 (to access the second 16K part) is gated by GPE. The datasheet brief of the V6366 explains it to be &amp;quot;OR output of Bits 0 and 1 of the Control Register in Hercules mode&amp;quot;.&lt;/li&gt;&#xA;&lt;li&gt;The I/O address decoder only U11/U9B only responds to 3Dx, so the integrated video solution is not able to emulate MDA/Hercules, even with an external MDA monitor. This means that the chip most likely will not run &amp;quot;in hercules mode&amp;quot;.&lt;/li&gt;&#xA;&lt;li&gt;The same is true for the memory address decoder U8. It decodes B8000..BFFFF&lt;/li&gt;&#xA;&lt;li&gt;There is a jumper to strap RA4, which should switch between CGA and MDA/hercules mode. A hercules-like card at CGA adresses makes no sense, so the jumper seems to has no use.&lt;/li&gt;&#xA;&lt;li&gt;Also, there is the 14.318MHz from the bus and an 18MHz crystal, this also makes MDA/Hercules impossible, as it runs at 16.257MHz (original MDA) or 16.000MHz (Hercules boards).&lt;/li&gt;&#xA;&lt;li&gt;The monitor output carries 6 color bits (EGA like), but the card is unable to provide EGA timings, as they also need a 16.x MHz crystal. IBM compatible color monitors do not use all 6 bits in 200-line modes to maintain CGA monitor compatibility.&lt;/li&gt;&#xA;&lt;li&gt;If VDCS is enabled, data bit 5 will be latched in U2A, which gates the external monitor TTL driver and drives a signal to the plasma monitor. It is likely (as we will see) that VDCS indicates writes to I/O port 102&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Additionally to the resources you provided, there are images of &lt;a href=&quot;http://fuz.su/%7Efuz/files/pc7640.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;the original disks shipped with the PC7640&lt;/a&gt;. The DOS disk contains tools to switch between the integrated plasma display and an external CGA/EGA monitor. They share a lot of code with the video BIOS. Also, there is a &amp;quot;palette editor&amp;quot; included that lets you edit how colors are mapped to plasma shades or dithers. From the BIOS and the tools, I gather the following knowledge:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &amp;quot;software protect&amp;quot; bit (1st level) is Bit 7 of register 3DF. You need to set it, to access any V6366 specific register. (Address F000:89F0 in the BIOS sets it, Address F000:89EC clears it).&lt;/li&gt;&#xA;&lt;li&gt;The V6366 specific registers are indexed at 3DD/3DE. (F000:89FA contains a write function for those registers)&lt;/li&gt;&#xA;&lt;li&gt;The first 32 indexed registers provide color mapping for the flat panel. They are two entries (16 bits) per color. The palette setup function is at address F000:8997 in the BIOS. It always maps black to 00/00 and (bright) white to 01/00. Colors 1 to 7 are mapped to a rotation of the combinations 03/60, 02/60, 03/00, 03/20, 03/40, 02/40 and 01/00 (by default, in this order). Colors 8 to 14 are mapped to a rotation of 00/00, 03/60, 02/60, 03/00, 03/20, 03/40, 02/40 (by default, in this order). The rotation of the dark colors is determined by bits 0..2 of 40:C4, and the rotation of the bright colors is determined by bits 4..6 of 40:C4. The Zenith refrence manual maps the bits that are used to control the patterns as I2[0..3], so likely I2 is the input into the hatching generator.&lt;/li&gt;&#xA;&lt;li&gt;The next 32 indexed registers are likely CRTC values for the plasma screen. The values written there (by the function at F000:897C) depend on bit 5 of 40:A3, which is set if the external monitor is active. At the same time, the contents of 40:A3 are output to port 102, which is likely used to switch the monitor outputs. This is the reason I suspect that port 102 writes assert VDCS. If the plasma screen is selected, the 32 bytes starting at F000:88EA are written to registers 32..63. If the plasma screen is deselected, the 32 bytes starting at F000:890A are written. These bytes are mostly zero.&lt;/li&gt;&#xA;&lt;li&gt;Registers 32 to 63 seem to be software-locked by another lock bit, namely bit 7 of register 63. This bit is set in advance of transferring the register contents.&lt;/li&gt;&#xA;&lt;li&gt;The whole V6366 support is one self-contained function at F000:892A, which calls the functions mentioned before.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Too bad I did not find anything about enabling GPE in CGA mode (needed to make use of the whole 32K of memory) or programming the extended modes, but most likely, some bits in the V6366 registers between 32 and 63 can enable the extended modes.&lt;/p&gt;&#xA;&lt;p&gt;Video output can be switched using the hotkeys Ctrl-Alt-Home (switch to plasma)/Ctrl-Alt-End (switch to external). The hotkey handler also contains dead code for palette adjustment. The code for palette adjustment uses another BIOS variable at 40:C5. Its lowest bit selects wheter the dark color rotation or the bright color rotation can be adjusted, whereas the bit 1 tells the V6366 initialization function that CRTC setup is to be skipped, just the palette needs to be reloaded.&lt;/p&gt;&#xA;&lt;p&gt;The extended configuration values for plasma on (likely overriding the 6845 timing) are:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;20: 00 4F 0F 1F  02 31 00 8B&#xA;28: 41 00 00 00  00 00 00 00&#xA;30: 59 DC FC 0A  19 00 07 60&#xA;38: 2C EE F0 0A  67 00 01 67&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Whereas for external monitor output, they are&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;20: 00 00 00 00  02 30 00 08&#xA;28: 00 00 00 00  00 00 00 00&#xA;30: 00 00 00 00  00 00 00 00&#xA;38: 00 00 00 00  00 00 00 07&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="10479" LastEditDate="2020-07-21T08:03:34.230" LastActivityDate="2020-07-21T08:03:34.230" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13664" PostTypeId="2" ParentId="13662" CreationDate="2020-02-09T02:15:54.703" Score="2" Body="&lt;p&gt;It's the same floppy drive, but you need a different controller card. The Apple 5.25&quot; floppy implemented the controller largely in software---that was the big Woz invention, while the IBM PC 5.25&quot; was implemented largely in hardware.  You could probably build your own controller if you can find the schematics. But you're better off trying to find one on eBay, because you will also need the software that's on the Apple controller card.&lt;/p&gt;&#xA;" OwnerUserId="6623" LastEditorUserId="6623" LastEditDate="2020-02-09T19:45:02.930" LastActivityDate="2020-02-09T19:45:02.930" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13665" PostTypeId="2" ParentId="13662" CreationDate="2020-02-09T02:45:19.827" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I am restoring a couple of Apple II machines. I would like to add an external 3.5&amp;quot; floppy drive, but they are prohibitively expensive.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, you're in for an even higher price tag, as you would need either need an&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Apple II 3.5 SuperDisk Controller (Apple Part number: A0076LL)&lt;/li&gt;&#xA;&lt;li&gt;Blue Disk Controller&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While the first gives you compatibility with most Apple drives as well, it may not work with a bare PC drive. The Blue Disk is known to be most PC compatible of all. Both are rather rare. In fact, I never seen a Blue Disk in the field.&lt;/p&gt;&#xA;&lt;p&gt;Also, at least the Apple 3.5 SuperDisk controller needs an enhanced IIe or a GS to work properly. Not sure about the Blue Disk.&lt;/p&gt;&#xA;&lt;p&gt;But there is help in form of &lt;a href=&quot;https://www.reactivemicro.com/product/apple-ii-3-5-drive-controller-card/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Reactive Micros clone&lt;/a&gt; of the SuperDisk Controller. Not cheap, but most worth the money if you want to use 1.44 MiB floppies. Here's a nice &lt;a href=&quot;https://www.youtube.com/watch?v=BqqxliWeAQY&quot; rel=&quot;nofollow noreferrer&quot;&gt;review&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I have tons of older PC floppy drives and I wonder if they could be made to work.&lt;/p&gt;&#xA;&lt;p&gt;I don't see why they can't be made to work since floppy drive mechanisms (steppers motors, etc) are fundamentally identical with differences on the controller boards located on the drive or on a separate card.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Unless you find one of the above (or spend the money), you may need to design your own controller. No rocket science, but more than a weekend task. All it needs it some PC style floppy controler chip and some micro contoler handling that and communicating with the Apple using a smart drive compatible API. This will make it ProDOS and GS/OS compatible. Quite a nice project :)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;And than there's the AE Transporter ...&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-09T23:02:07.420" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13666" PostTypeId="2" ParentId="13659" CreationDate="2020-02-09T04:21:51.767" Score="1" Body="&lt;p&gt;The PDP-10 calling sequence should be contrasted with the VAX calling sequence to get a good handle on two very different approaches.  The PDP-10 requires the program to issue an extra code, while the VAX does not.  This reflect changes in system designs between about 1965 and 1975.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-10 used unused opcodes (UUOs) to request services from the operating system.  It used instructions like PUSHJ or JSR to invoke library proedures that had been linked into the program's memory image.  The hardware (or the microcode for the KL-10) was set up to trap UUOS.&#xA;The VAX worked quite differently.  It used the same instruction and the same calling sequence for system services and for library procedures.  Instead of the instruction triggering a trap, it was the address.  System service requests used an address in system space, validated by the operating system.  This made life easier for high level languages to make use of both system services and qlibrary procedures.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2020-02-09T14:25:19.813" LastActivityDate="2020-02-09T14:25:19.813" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="13668" PostTypeId="2" ParentId="13611" CreationDate="2020-02-09T17:11:13.667" Score="3" Body="&lt;p&gt;One little known fact is that what become PostgreSQL was done on Alpha workstations with 64MB of RAM. I forget the model number of the workstations but they were small desktop machines. I was the system manager for the Postgres Research Group at UC Berkeley. We also had a couple of Alpha servers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Alpha hardware (and software) worked quite well. We were part of a large DEC external research project (Sequoia2000) so we got everything in essence for free. I doubt that we would have used Alphas if it weren't for that.&lt;/p&gt;&#xA;" OwnerUserId="16215" LastActivityDate="2020-02-09T17:11:13.667" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13669" PostTypeId="2" ParentId="13249" CreationDate="2020-02-09T18:32:43.703" Score="3" Body="&lt;p&gt;I am not sure, whether I fully understood your question, but I guess &lt;a href=&quot;https://en.wikipedia.org/wiki/FidoNet&quot; rel=&quot;nofollow noreferrer&quot;&gt;fido net&lt;/a&gt; is more or less what you mean.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Germany there was another network &lt;a href=&quot;https://de.wikipedia.org/wiki/MausNet&quot; rel=&quot;nofollow noreferrer&quot;&gt;Maus Net&lt;/a&gt; that worked with the same principle but was much smaller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;People had their own BBS at home, connected to their phone line. If you wanted to send mail or files and you knew the phonenumber, you could simply connect to the other system by calling its modem. Of course if someone was on the phone or another caller was connected, the line was busy and you had to retry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was a routing protocol and multi-hop transfers as well. All done in hourly transfer windows, where two nodes that had been introduced to each other, exchanged in- and outgoing messages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enthusiasts collected money and started building nodes with mutiple phone lines. The one I was connected to had a 32 line PMX (i.e. 32 phonelines and of course 32 extensions). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be fair, messages got lost and a mail could take a day - but it was the hottest shit on the planet :-) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nerd paradise &lt;/p&gt;&#xA;" OwnerUserId="16218" LastActivityDate="2020-02-09T18:32:43.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13671" PostTypeId="2" ParentId="13249" CreationDate="2020-02-09T19:00:39.113" Score="2" Body="&lt;p&gt;While all these makeshift networks of single or coupled BBSes of the 1980s may be more known, there were already many public available data networks. it may be noteworthy, that &lt;strong&gt;public data networks already existed before the internet&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Germany for example a pulblic teletype network was available from 1938 until 2007 in addition to leased lines. From ca. 1980 until the late 1990s Datex-L and Datex-P could be used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While Datex-L was based on switched circuit connection (&lt;strong&gt;L&lt;/strong&gt;eitung) did Datex-P (&lt;strong&gt;P&lt;/strong&gt;acket) used X.25 type packet based exchange. Hardware wise it was much similar to Canadas &lt;a href=&quot;https://en.wikipedia.org/wiki/DATAPAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;DATAPAC&lt;/a&gt; network. Thruout the country dial in points were available, so access was available at local call rate.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Remaining users are now served by a Swiss company.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-04-13T18:26:13.700" LastActivityDate="2020-04-13T18:26:13.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13672" PostTypeId="1" AcceptedAnswerId="13674" CreationDate="2020-02-10T00:07:26.217" Score="4" ViewCount="823" Body="&lt;p&gt;Why AND instruction updates flags in the fetch step?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Others logic instructions like ORA and EOR update flags in the same step that they update accumulator, in the decode step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it a bug of visual6502? Is it a bug of 6502? Is it the normal behaviour?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://visual6502.org/JSSim/expert.html?graphics=f&amp;amp;a=0&amp;amp;d=29f0eaea&amp;amp;steps=8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Example for AND&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cycle   ab      db  rw  Fetch   pc      a   x   y   s   p&#xA;----------------------------------------------------------------&#xA;0       0000    29  1   AND #   0000    aa  00  00  fd  nv‑BdIZc ; AND #$FE&#xA;0       0000    29  1   AND #   0000    aa  00  00  fd  nv‑BdIZc&#xA;1       0001    f0  1           0001    aa  00  00  fd  nv‑BdIZc&#xA;1       0001    f0  1           0001    aa  00  00  fd  nv‑BdIZc&#xA;2       0002    ea  1   NOP     0002    aa  00  00  fd  Nv‑BdIzc ; Fetch opcode, Update flags here&#xA;2       0002    ea  1   NOP     0002    aa  00  00  fd  Nv‑BdIzc&#xA;3       0003    ea  1           0003    a0  00  00  fd  Nv‑BdIzc ; Decode opcode, Update accumulator here&#xA;3       0003    ea  1           0003    a0  00  00  fd  Nv‑BdIzc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://visual6502.org/JSSim/expert.html?graphics=f&amp;amp;a=0&amp;amp;d=49ffeaea&amp;amp;steps=8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Example for EOR&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cycle   ab      db  rw  Fetch   pc      a   x   y   s   p&#xA;----------------------------------------------------------------&#xA;0       0000    49  1   EOR #   0000    aa  00  00  fd  nv‑BdIZc ; EOR #$FF&#xA;0       0000    49  1   EOR #   0000    aa  00  00  fd  nv‑BdIZc&#xA;1       0001    ff  1           0001    aa  00  00  fd  nv‑BdIZc&#xA;1       0001    ff  1           0001    aa  00  00  fd  nv‑BdIZc&#xA;2       0002    ea  1   NOP     0002    aa  00  00  fd  nv‑BdIZc ; Fetch opcode&#xA;2       0002    ea  1   NOP     0002    aa  00  00  fd  nv‑BdIZc&#xA;3       0003    ea  1           0003    55  00  00  fd  nv‑BdIzc ; Decode opcode, Update accumulator and flags here&#xA;3       0003    ea  1           0003    55  00  00  fd  nv‑BdIzc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://visual6502.org/JSSim/expert.html?graphics=f&amp;amp;a=0&amp;amp;d=09ffeaea&amp;amp;steps=8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Example for ORA&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cycle   ab      db  rw  Fetch   pc      a   x   y   s   p&#xA;----------------------------------------------------------------&#xA;0       0000    09  1   ORA #   0000    aa  00  00  fd  nv‑BdIZc ; ORA #$FF&#xA;0       0000    09  1   ORA #   0000    aa  00  00  fd  nv‑BdIZc&#xA;1       0001    ff  1           0001    aa  00  00  fd  nv‑BdIZc&#xA;1       0001    ff  1           0001    aa  00  00  fd  nv‑BdIZc&#xA;2       0002    ea  1   NOP     0002    aa  00  00  fd  nv‑BdIZc ; Fetch opcode&#xA;2       0002    ea  1   NOP     0002    aa  00  00  fd  nv‑BdIZc&#xA;3       0003    ea  1           0003    ff  00  00  fd  Nv‑BdIzc ; Decode opcode, Update accumulator and flags here&#xA;3       0003    ea  1           0003    ff  00  00  fd  Nv‑BdIzc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16008" LastEditorUserId="6659" LastEditDate="2020-02-10T03:30:40.827" LastActivityDate="2020-02-10T11:43:06.137" Title="6502 - AND instruction updates flags differently than other logic operations" Tags="&lt;6502&gt;&lt;instruction-set&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13673" PostTypeId="2" ParentId="13564" CreationDate="2020-02-10T00:45:00.600" Score="6" Body="&lt;p&gt;With great help by user &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/10479&quot;&gt;Michael Karcher&lt;/a&gt; we found the following details poking through the V6366 controller's innards:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# ports&#xA;&#xA;102 (outside of V6366, the decoded I/O select line is called VDCS)&#xA; Bit 5:&#xA;   00: Plasma panel active&#xA;   20: External monitor active&#xA;3d4&#xA; CRTC index port&#xA;3d5&#xA; CRTC data port (6845 compatible, except for &quot;interlace &amp;amp; skew&quot; register)&#xA;3d8&#xA; Mode control register&#xA;3d9&#xA; Color control register&#xA;3da&#xA; status register&#xA;3dd&#xA; index register&#xA;3de&#xA; data register&#xA;3df&#xA; 01: enable HGC graphics&#xA; 02: page upper 32k HGC memory at B8000 and and enable B1000 to B7FFF&#xA; 80: software protect, set to enable writing to 3dd and 3de&#xA;&#xA;# indexed registers:&#xA; 20: no effect&#xA; 21: number of 8-pixel-units clocked into the flat panel per line&#xA; 22: vertical scroll (default: 0f).  higher values scroll up&#xA; 23: &#xA;  bit 0-6: hsync pulse delta for panel, in characters&#xA; 24:&#xA;  bit 0-2: columns per character&#xA;    00 6 pixels per character (doesn't sync!)&#xA;    01 7 pixels per character (doesn't sync!)&#xA;    02 8 pixels per character&#xA;    03 9 pixels per character&#xA;    04 10 pixels per character&#xA;    05 blank screen&#xA;    06 blank screen&#xA;    07 same as 2&#xA;  bit 3:&#xA;    00 one attribute byte per character&#xA;    08 three attribute bytes per character&#xA;       replaces every second pair of character&#xA;       with attribute bytes of unknown usage&#xA;       potentially for 16 bit character sets&#xA;  bit 4: (no effect in text mode)&#xA;    00: standard CGA graphics mode&#xA;    10: 16 colors 640 pixels, forces 16-bit memory interface&#xA;  bit 5: (no effect in text mode)&#xA;    00: keep AD14 low&#xA;    20: output RA1 as AD14 (needed for 640x400x2 or hercules graphics mode)&#xA;  bit 6-7: no effect&#xA; 25:&#xA;  bit 0: clock select (external oscillator mode only)&#xA;    00 14.318 MHz clock (X0)&#xA;    01 18.000 MHz clock (X1)&#xA;  bit 1: oscillator mode&#xA;    00 external oscillator, X1 is input for the second&#xA;       externally generated frequency&#xA;    02 internal oscillator, X1 is crystal drive output&#xA;  bit 2: ?&#xA;  bit 3: ?&#xA;  bit 4: memory width&#xA;    00: 16 bit&#xA;    10:  8 bit&#xA;  bit 5: memory type&#xA;    00: DRAM&#xA;    20: SRAM&#xA;  bit 6: status register layout?&#xA;    00: CGA status register at 3da&#xA;    40: MDA status register at 3da&#xA;  bit 7: VSYNC?&#xA;    00: CGA style VSYNC&#xA;    80: MDA style VSYNC&#xA; 26:&#xA;  bits 0,3,4:&#xA;    19: set AD14 hi to select second 16k as video RAM&#xA;  bit 6:&#xA;    00: pull down A15/GPE to limit addressable range to 16kB CGA memory&#xA;    40: pull up A15/GPE to enable access to 16k RAM at BC00&#xA; 27:&#xA;  bit 0: clock?&#xA;    00: flickering&#xA;    01: normal&#xA;  bit 1: hatching&#xA;    00: no hatching&#xA;        rendered as black: black, green, red, brown&#xA;        rendered as white: blue, cyan, magenta, light grey&#xA;        intensity ignored&#xA;    01: hatching&#xA;  bit 2: ?&#xA;  bit 3: ?&#xA;  bit 4: ?&#xA;  bit 5: ?&#xA;  bit 6-7: number of panel output bits&#xA;    00: 1 bit serial&#xA;    40: 2 bit parallel&#xA;    80: 4 bit parallel (normal)&#xA;    C0: 8 bit parallel&#xA; 28:&#xA;  bit 0-1:&#xA;    00 screen off&#xA;    01 normal&#xA;    02 screen displayed twice with 40 columns each&#xA;    03 garbled screen&#xA;  bit 3: ?&#xA;  bit 4:&#xA;    00 panel shift clock polarity normal&#xA;    10 panel shift clock polarity flipped (doesn't sync)&#xA;  bit 5:&#xA;    00 vsync polarity normal&#xA;    20 vsync polarity flipped&#xA;  bit 6:&#xA;    00 hsync polarity flipped&#xA;    40 hsync polarity normal&#xA;  bit 7:&#xA;    00 hsync enabled during vsync?&#xA;    80 hsync disabled during vsync?&#xA; 29:&#xA;  bit 0-4: width of column 51 (plus the initial 8 pxiels)&#xA;           first 8 columns following are white, the rest black&#xA;  bit   6:&#xA;    00 port 3df reads as c1&#xA;    40 true readout of port 3df&#xA;  bit   7:&#xA;    00 normal operation&#xA;    80 system hangs with screen off&#xA; 30--37: CRTC override values for text mode (3D8 bit 1 clear)&#xA;  30: overrides CRTC 00 horizontal total&#xA;  31: hsync delta, added to CRTC reg 02&#xA;  32: vsync delta, added to CRTC reg 07&#xA;  33: overrides CRTC 03 sync pulse width&#xA;  34: overrides CRTC 04 vertical total&#xA;  35: overrides CRTC 05 vertical total adjust&#xA;  36: overrides CRTC 09 maximum total scanline address&#xA;  37:&#xA;    bit 0-3: cursor position adjustment&#xA;    bit   4: similar to bit 3?&#xA;    bit 5-6:&#xA;     00 no re-scan&#xA;     20 re-scan every other line&#xA;     40 re-scan overy other line (or 3/4 lines?)&#xA;     60 re-scan every line (default for 640x400 panels)&#xA;    bit 7:&#xA;     00 bits 0-3 adjust CRTC 0A and CRTC 0B ???&#xA;     80 bits 0-3 adjust only CRTC 0B ???&#xA; 38--3f: CRTC override values for graphics mode (3D8 bit 1 set)&#xA;  same as 30-37&#xA;&#xA;&#xA;# detection sequence (performed by TULIP diagnostics)&#xA;&#xA;out(0x3df, 0x80)&#xA;out(0x3dd, 0x29)&#xA;out(0x3de, 0x20)&#xA;res = in(0x3df)&#xA;out(0x3df, 0x03)&#xA;return (res == 0xc1)&#xA;&#xA;# known machines with this chip&#xA;&#xA;# known register settings&#xA;&#xA;## TULIP computer in &quot;color emulation mode&quot;&#xA;The card imitates a CGA card, but outputs a MDA/Hercules video signal.&#xA;All other modes do not alter power-on configuration of the V6366.&#xA;&#xA;00: 00 00 03 60  03 60 02 60&#xA;08: 02 60 03 40  03 40 01 00&#xA;10: 04 00 07 60  07 60 06 60&#xA;18: 06 60 07 40  07 40 05 00&#xA;20: 00 00 00 00  03 95 00 2B&#xA;28: 01 20 00 00  00 00 00 00&#xA;30: 61 F8 FD 0F  19 06 0D 1B&#xA;38: 35 FF FD 07  79 02 01 2C&#xA;&#xA;Corresponding 6845 initialisation (real MDA values):&#xA;&#xA;00: 61 50 52 0F 19 06 19 19&#xA;08: 02 0D 0B 0C 00 00 00 00&#xA;&#xA;## Schneider PC 7640 with Plasma&#xA;&#xA;20: 00 4F 0F 1F  02 31 00 8B&#xA;28: 41 00 00 00  00 00 00 00&#xA;30: 59 DC FC 0A  19 00 07 60&#xA;38: 2C EE F0 0A  67 00 01 67&#xA;&#xA;## Schneider PC 7640 with external CGA screen&#xA;&#xA;20: 00 00 00 00  02 30 00 08&#xA;28: 00 00 00 00  00 00 00 00&#xA;30: 00 00 00 00  00 00 00 00&#xA;38: 00 00 00 00  00 00 00 07&#xA;&#xA;## Schneider PC 7640 CRTC initial values (80x25 text mode)&#xA;&#xA;00: 71 50 5A 0A  1F 06 19 1C&#xA;08: 02 07 06 07  00 00 00 00&#xA;&#xA;## Schneider default palette&#xA;&#xA;The first 32 indexed registers provide color mapping for the flat panel.&#xA;They are two entries (16 bits) per color. The palette setup function is&#xA;at address F000:8997 in the BIOS.&#xA;It always maps black to 00/00 and (bright) white to 01/00. Colors 1 to 7&#xA;are mapped to a rotation of the combinations 03/60, 02/60, 03/00, 03/20,&#xA;03/40, 02/40 and 01/00 (by default, in this order). Colors 8 to 14 are&#xA;mapped to a rotation of 00/00, 03/60, 02/60, 03/00, 03/20, 03/40, 02/40&#xA;(by default, in this order). The rotation of the dark colors is&#xA;determined by bits 0..2 of 40:C4, and the rotation of the bright colors&#xA;is determined by bits 4..6 of 40:C4.&#xA;&#xA;00: 00 00 03 60  02 60 03 00&#xA;08: 03 20 03 40  02 40 01 00&#xA;10: 00 00 03 60  02 60 03 00&#xA;18: 03 20 03 40  02 40 01 00&#xA;&#xA;## dither patterns&#xA;&#xA;TODO&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It turns out the V6366 has a register compatible variant: the V6363 works the same way but does not support output to LCD panel.  It is used in a TULIP graphics card from which register values were taken for guesses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following code then enables the 640x400 graphics mode:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    mov dx, 3df&#xA;    mov al, 80&#xA;    out dx, al      ; unlock extended registers&#xA;    mov dx, 03dd&#xA;    mov ax, 073f&#xA;    out dx, ax      ; set 3f to 07 (extra flags for graphics mode, undouble lines)&#xA;    mov ax, 033e&#xA;    out dx, ax      ; set 3e to 03 (maximum scan line override for graphics mode)&#xA;        mov ax, 2224&#xA;    out dx, ax      ; set 24 to 22 (640x400 mode with two extra banks at bc00:0000)&#xA;    mov ax, 4026&#xA;    out dx, ax      ; set 26 to 40 (map high 16k display RAM to bc00:0000)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then enable mode 6.  To undo this, restore all registers to their initial values.&#xA;The memory layout in this mode is like the default CGA 640x200 memory layout, except two extra memory banks appear at &lt;code&gt;BC00:0000&lt;/code&gt; with the same layout as the normal memory banks.  It appears that lines are read in sets of four from these memory banks with lines coming in turn from segment &lt;code&gt;B800&lt;/code&gt;, &lt;code&gt;BA00&lt;/code&gt;, &lt;code&gt;bC00&lt;/code&gt;, and &lt;code&gt;BE00&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have also found how to enable an 80x50 text mode:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    mov ax, 3&#xA;    int 10          ; enter mode 3&#xA;    mov dx, 3df&#xA;    mov al, 80&#xA;    out dx, al      ; unlock extended registers&#xA;&#xA;    dec dx&#xA;    dec dx          ; set dx = 3dd (V6366 registers)&#xA;    mov ax, 0037&#xA;    out dx, ax      ; set 37 to 00 (extra flags for text mode, undouble lines)&#xA;    mov ax, 3334&#xA;    out dx, ax      ; set 34 to 33 (vertical total override)&#xA;&#xA;    mov dx, 3d4     ; select CRTC registers&#xA;    mov ax, 3206&#xA;    out dx, ax      ; set CRTC 06 to 32&#xA;    mov ax, 3407&#xA;    out dx, ax      ; set CRTC 07 to 34&#xA;    ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The font ROM on the PC7640 contains both an 8x16 and an 8x8 font, but is wired such that the VDCS line (selects the external monitor) also selects the 8x8 font.  In addition, the use of an 8x16 font is only achieved through an external flip-flop toggled with every scan line.  None of these details are apparent from the circuit diagrams as the relevant address lines have been wired up with bodge wires to some spare flip flops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/y0e2U.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y0e2U.jpg&quot; alt=&quot;display controller solder side with bodge wires&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/OoCMu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OoCMu.jpg&quot; alt=&quot;display controller component side&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus the 80x50 mode is barely usable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a demonstration, I am now going to try and add this graphics mode to Fractint to get some sample output.&lt;/p&gt;&#xA;" OwnerUserId="24" LastEditorUserId="24" LastEditDate="2020-02-20T20:36:48.953" LastActivityDate="2020-02-20T20:36:48.953" CommentCount="0" CommunityOwnedDate="2020-02-10T00:45:00.600" ContentLicense="CC BY-SA 4.0" />
  <row Id="13674" PostTypeId="2" ParentId="13672" CreationDate="2020-02-10T00:54:47.330" Score="7" Body="&lt;p&gt;AND works like any other instruction. The effect you see is due the data setup used. It obscures the change in your example. Try clearing A first, &lt;a href=&quot;http://visual6502.org/JSSim/expert.html?graphics=f&amp;amp;a=0&amp;amp;d=A90029ffeaea&amp;amp;steps=12&quot; rel=&quot;nofollow noreferrer&quot;&gt;like here&lt;/a&gt;, and you'll see the update happens exactly like with OR/EOR:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cycle  ab    db  rw  Fetch  pc    a   x   y   s   p&#xA;  0    0000  a9  1   LDA #  0000  aa  00  00  fd  nv‑BdIZc&#xA;  0    0000  a9  1   LDA #  0000  aa  00  00  fd  nv‑BdIZc&#xA;  1    0001  00  1          0001  aa  00  00  fd  nv‑BdIZc&#xA;  1    0001  00  1          0001  aa  00  00  fd  nv‑BdIZc&#xA;  2    0002  29  1   AND #  0002  00  00  00  fd  nv‑BdIZc&#xA;  2    0002  29  1   AND #  0002  00  00  00  fd  nv‑BdIZc&#xA;  3    0003  ff  1          0003  00  00  00  fd  nv‑BdIZc&#xA;  3    0003  ff  1          0003  00  00  00  fd  nv‑BdIZc&#xA;  4    0004  ea  1   NOP    0004  00  00  00  fd  Nv‑BdIzc  &amp;lt;- &quot;Intermediate&quot; update&#xA;  4    0004  ea  1   NOP    0004  00  00  00  fd  Nv‑BdIzc&#xA;  5    0005  ea  1          0005  00  00  00  fd  nv‑BdIZc  &amp;lt;- &quot;Real&quot; update with result&#xA;  5    0005  ea  1          0005  00  00  00  fd  nv‑BdIZc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;While in this case simply clearing A did already show it, a valid test setup should not only use defined values but as well vary them to show relation.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-10T11:43:06.137" LastActivityDate="2020-02-10T11:43:06.137" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13676" PostTypeId="2" ParentId="12858" CreationDate="2020-02-10T14:51:30.317" Score="3" Body="&lt;p&gt;Much discussion here about the benefits and costs of short vs&#xA;long addressing, but the posted question asks about &lt;em&gt;relative&lt;/em&gt; vs not.  A machine like the RCA 1802, for example, has both short and long&#xA;branches, for the reasons well covered here already, but they are&#xA;absolute, and not relative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What this means is that &lt;em&gt;where&lt;/em&gt; your code ends up in memory determines&#xA;where the short branches can reach, and this is not usually known when&#xA;you are initially writing the code.  In other words, memory is&#xA;organized as a series of short (256-byte) pages, and short branches&#xA;can only operate &lt;em&gt;within&lt;/em&gt; the page they are in.  So, you write your&#xA;code, as a part of a bunch of other code, but you have no idea whether&#xA;it will run properly or not until you've mapped &lt;em&gt;all&lt;/em&gt; of the code into&#xA;memory.  (Linked, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By using an adder inside the machine to implement relative branches,&#xA;your smaller/faster code can be relatively ignorant of exactly where it resides in memory.  This is an advantage, especially with unsophicated (or even no) development tools, appropriate for the time these machines were&#xA;current.&lt;/p&gt;&#xA;" OwnerUserId="16234" LastEditorUserId="16234" LastEditDate="2020-02-10T14:58:15.123" LastActivityDate="2020-02-10T14:58:15.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13677" PostTypeId="2" ParentId="5327" CreationDate="2020-02-10T15:37:15.803" Score="2" Body="&lt;p&gt;Some times there are compatibility problems.  For example, on one of my computers (a Schneider PC 7640), you cannot format hard disks with newer DOS versions but old DOS 3.30A works just fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another issue I found is that newer DOS versions have stopped making concessions for 40 column display modes, causing the output to be pretty unreadable if you want to use them.  Old DOS versions have their tools output reports in a format limited to 40 columns, making them easy to use with a 40 column display mode.&lt;/p&gt;&#xA;" OwnerUserId="24" LastActivityDate="2020-02-10T15:37:15.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13678" PostTypeId="2" ParentId="13259" CreationDate="2020-02-10T16:43:56.333" Score="1" Body="&lt;p&gt;My recollection is that BASIC was &lt;em&gt;machine translated&lt;/em&gt; from the 8080 BASIC, and so would have been bigger and slower than something written to take full advantage of the 8086.&lt;/p&gt;&#xA;" OwnerUserId="16234" LastActivityDate="2020-02-10T16:43:56.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13679" PostTypeId="2" ParentId="5416" CreationDate="2020-02-10T17:04:51.663" Score="3" Body="&lt;p&gt;IIRC, LDIR (et al.) is a 2-byte opcode.  The repeat was implemented as a &lt;em&gt;decrement&lt;/em&gt; of the PC rather than an increment to the next instruction.  Dirt simple, but inefficient on the bus, and not terribly speedy.  However, this also had some value, both in the processor implementation and in the system:  1) DRAM refresh was unaffected, as that is done at the end of the opcode fetch, which continues to happen; 2) Interrupt behavior was unaffected.&lt;/p&gt;&#xA;" OwnerUserId="16234" LastActivityDate="2020-02-10T17:04:51.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13680" PostTypeId="2" ParentId="4386" CreationDate="2020-02-10T17:14:09.510" Score="2" Body="&lt;p&gt;Are you interested in running any particular kind of older software, once you've gotten it working?  That should dictate what kind of CPU you use.  For example, if running WordStar or Zork is paramount you'd want to use a Z80.  All the processors have their special fun features.  Don't discount the 6809, either.  To answer the question, yes it is possible.  Fun, too.  (For certain definitions of fun!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, if playing with a viable native C compiler is your goal I would not favor the Z80, 6502, or 1802.  They're not very C-friendly.  The 8088/8086 is also not tremendously friendly, due to segments, but it's do-able.  For C, a 6809 would probably be the best 8-bitter.  A 68000 would be a good choice, because gcc exists, but is 16 bits.  (The 68008 was the 8-bit bus version, but might be hard to find.)  You might even have fun with the TI 9900 (9905?) processor, which is 16-bit and derived from their minicomputer architecture.  Not sure what the state of C is with it, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If using a P-machine type of interpreter, &lt;em&gt;any&lt;/em&gt; processor (modulo its memory addressing capability) could be a C target, even something as lowly as the 1802.  But, it would not be particularly fast.  Getting/making a compiler for such a thing would also be extra work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also weirdo points to be scored for making something unusual work, like the 1802 or 9900.  You'd learn the most that way.  (If it didn't kill you first.)&lt;/p&gt;&#xA;" OwnerUserId="16234" LastEditorUserId="16234" LastEditDate="2020-02-10T17:31:33.920" LastActivityDate="2020-02-10T17:31:33.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13681" PostTypeId="2" ParentId="4386" CreationDate="2020-02-10T17:25:33.170" Score="1" Body="&lt;p&gt;Making your own Z80 computer is the subject of several books written in the 80s, such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Build_Your_Own_Z80_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Byte Books' &lt;em&gt;Build Your Own Z80 Computer: Design Guidelines and Application Notes&lt;/em&gt; by Steve Ciarcia&lt;/a&gt;, which is &lt;a href=&quot;http://www.pestingers.net/pdfs/other-computers/build-your-own-z80.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;freely available online&lt;/a&gt; and &lt;em&gt;Beginners Guide to Computers &amp;amp; Microprocessors with projects&lt;/em&gt; by Adams.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You've correctly anticipated that the computers that these books gradually build up towards will use display generators that were common at the time but are no longer produced, but Ciarcia's book may be of great interest to you.&lt;/p&gt;&#xA;" OwnerUserId="15855" LastActivityDate="2020-02-10T17:25:33.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13682" PostTypeId="2" ParentId="5327" CreationDate="2020-02-10T17:28:02.070" Score="1" Body="&lt;p&gt;MS-DOS 2.11 is open source, which might be important to a free software purist. However, the open-source release did not include the RAM BIOS (IO.SYS / IBMBIO.COM), and to my knowledge nobody has written one, so the original closed-source version of that file would still have to be used.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="15334" LastEditDate="2020-11-14T06:50:59.613" LastActivityDate="2020-11-14T06:50:59.613" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13683" PostTypeId="2" ParentId="13650" CreationDate="2020-02-10T19:47:21.170" Score="9" Body="&lt;p&gt;There is a New York Times article (&lt;a href=&quot;https://www.nytimes.com/1982/12/19/business/the-game-turns-serious-at-atari.html&quot; rel=&quot;noreferrer&quot;&gt;The Game Turns Serious at Atari&lt;/a&gt; from December, 1982. One quote from it is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Atari is also facing problems in its two other businesses. Its arcade game business has dropped into the red this quarter and its home computer business, which has never yet been profitable, faces a market-share battle.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(the first business is the video game cartridge business).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With respect to operating profits, one gets &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;According to estimates by Mr. Simon of Goldman Sachs, cartridge sales accounted for $180 million of Atari's $280 million in operating profits in 1981. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, video cartridges were king, arcade was the rest, and home computers lost money. However, the arcade division was in decline: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A problem getting its own games to market also has hurt the coin operated game business. &quot;The fourth quarter of 1981 was, by a considerable margin, the best quarter in the history of the coin-op division,'' Mr. Gerard told analysts. ''The first quarter of 1982 was very good. The second quarter was a good quarter. The third quarter was a rotten quarter and the fourth quarter is a disaster.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They had high hopes for computers:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Atari's future may lie with its home computer division. The market for home - as opposed to small-business computers - has taken off this year and Atari has seen its sales quadruple, to an estimated $300 million. Yet the division is still losing money, perhaps $25 million $50 million this year.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Either way, since the home computers were losing money in December 1982, Atari clearly had more profit from arcades than computers, but game cartridges were still the money cow (for just a bit lonter). &lt;/p&gt;&#xA;" OwnerUserId="8207" LastActivityDate="2020-02-10T19:47:21.170" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13684" PostTypeId="1" AcceptedAnswerId="13892" CreationDate="2020-02-10T19:54:47.620" Score="8" ViewCount="611" Body="&lt;p&gt;My old Amiga 500 has been living in its box for the past 20 years and does not function as it should. When turned on initially it seems to work fine, loads the Workbench disk and allows me to open/close windows and look at the contents of the disk. At some point, usually between 30 and 60 seconds of turning it on, the system will freeze. This always seems to happen when I click on something. The mouse pointer still moves, but I can no longer interact with any of the windows or pull the screen down. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I now reset it (or power-cycle it) then it won't boot. The drive seems to read the boot block and then hangs. Removing the disk and resetting gives the &quot;insert disk&quot; animation (KS 2.0), inserting the disk makes it read the boot block and it then hangs. I have waited an hour before powering it back on and it still would not boot. However, when I come back next day it will boot into the Workbench again (until it hangs again).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It happily boots and runs the &quot;World of Commodore&quot; demo by Sanity. The demo reloads at the end (NOT by rebooting/resetting) and I let it go for about an hour during which it never crashed or froze. When I do reset it then it refuses to boot again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also booted into an &quot;Amiga Test Kit&quot; disk. Just like the demo, I left the memory test run for an hour (no problems found). After that I ran the CIA timing tests, again no problems found. Resetting the system via the menu made it hang on the boot again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main board looks absolutely clean, no trace of leaking caps. It is not an A500+, so no RTC and no battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things I tried to no avail:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I have removed the trapdoor memory.&lt;/li&gt;&#xA;&lt;li&gt;I have removed the Kickstart switcher.&lt;/li&gt;&#xA;&lt;li&gt;The PSU came originally with this A500, but has been used with my A1200 since I bought that new, the A1200 has seen a lot of regular use in the past 3 years and is accelerated so should pull at least as much power as an A500 does. I therefore assume the PSU to be fine.&lt;/li&gt;&#xA;&lt;li&gt;I have swapped the two CIA chips between the two sockets.&lt;/li&gt;&#xA;&lt;li&gt;I swapped between Kickstart 1.3 and Kickstart 2.0.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Added on 12/Feb/2020&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I have tried an A1200 PSU, with the exact same result as the A500 PSU.&lt;/li&gt;&#xA;&lt;li&gt;I have pushed down on all socketed ICs. No difference unfortunately.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Added on 14/Feb/2020&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;After booting I opened a shell window, in which I could type stuff for at least 20 minutes. I started and stopped some programs from disk and all continued to work. I accidentally hit both Alt and L-Amiga, which simulates a left-mouse click and the system immediately froze.&lt;/li&gt;&#xA;&lt;li&gt;When the system refuses to boot I can still go into the KS2.0 boot menu and click on things there. That continues to work fine although none of the options will allow the system to successfully boot again.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I have ordered a DiagROM, should arrive early next week.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anybody any idea what to fix, or what to try next?&lt;/p&gt;&#xA;" OwnerUserId="7784" LastEditorUserId="7784" LastEditDate="2020-02-14T19:50:44.407" LastActivityDate="2020-07-10T11:29:27.593" Title="Fixing an ailing Amiga 500" Tags="&lt;repair&gt;&lt;amiga-500&gt;" AnswerCount="2" CommentCount="16" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13685" PostTypeId="1" CreationDate="2020-02-10T20:39:13.043" Score="1" ViewCount="220" Body="&lt;p&gt;Theoretically, one could probably build a thermal printer (maybe with a laser) that simply burns the paper black where you want it black. Conceivably without embrittling the paper too deeply or setting it on fire, if the energy is applied quickly and intensely enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was that ever experimented with/implemented, and what (apart from fire hazards) makes it impractical?&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2020-02-11T01:29:13.727" Title="Were there ever any thermal printers that simply &quot;muscled&quot; plain paper?" Tags="&lt;printer&gt;" AnswerCount="3" CommentCount="7" ClosedDate="2020-02-11T09:41:31.310" ContentLicense="CC BY-SA 4.0" />
  <row Id="13686" PostTypeId="1" AcceptedAnswerId="13689" CreationDate="2020-02-10T21:51:54.800" Score="16" ViewCount="7097" Body="&lt;p&gt;I'm wondering how to write a program in Z80 assembler that discovers its own memory location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought that maybe I could somehow load the program counter &lt;code&gt;PC&lt;/code&gt; into, for example, &lt;code&gt;BC&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way of doing this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm messing with a single board Z80 system with 2 KiB ROM, 2 KiB RAM and that's about it. No operating system, just a very simple monitor program in the ROM that lets me inspect memory, load data to memory and connect a terminal to the board via a serial port. The assembler I'm using is z80asm on Linux.&lt;/p&gt;&#xA;" OwnerUserId="16238" LastEditorUserId="6659" LastEditDate="2020-02-11T13:42:01.283" LastActivityDate="2020-07-03T18:44:19.910" Title="How can a Z80 assembly program find out its own memory address?" Tags="&lt;z80&gt;&lt;assembly&gt;" AnswerCount="12" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13687" PostTypeId="2" ParentId="13686" CreationDate="2020-02-10T22:02:13.360" Score="9" Body="&lt;p&gt;General answer that works for all processors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;call a subroutine&lt;/li&gt;&#xA;&lt;li&gt;in this subroutine, get the value stored in the stack pointer (read &lt;code&gt;(SP)&lt;/code&gt; as a 16 bit word on a Z80. 32 bit processors would require that your read a 32 bit word). This tells the return address, which is the address of the instruction coming after the subroutine call.&lt;/li&gt;&#xA;&lt;li&gt;now return this value in a register: you now have the value of the current program counter in this register. By doing some additions/subtractions, you can locate any program locations close to that point (be careful of assembler optimizations that may change the size of the instructions if you do that)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm far from being a z80 specialist (actually this code could be completely wrong), but something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   call  subr&#xA;   ; here af register contains the current PC location&#xA;   ; subtract 3 to get address before the &quot;call&quot; if it's of any use&#xA;   ...&#xA;&#xA;subr:&#xA;    ld   af,(sp)&#xA;    ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On a 68000 processor (I know it's not asked but there's more chance that the code is correct...) adapting Ross suggestion to avoid returning from a routine. Just pop the value from the stack to get PC and &quot;forget&quot; the subroutine call.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   bsr.w  subr  ; not possible to use .b with exact next address&#xA;subr:&#xA;   move.l   (A7)+,D0   ; pops the stack, get 32 bit value&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For the record, on a 680x0 it's even simpler with PC relative load effective address instructions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   lea addr(pc),a0   ; label value is in address register&#xA;addr:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-02-11T13:03:48.423" LastActivityDate="2020-02-11T13:03:48.423" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="13688" PostTypeId="2" ParentId="13685" CreationDate="2020-02-10T22:21:22.803" Score="3" Body="&lt;p&gt;It's a bit unclear what you're asking:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is this about a laser thermal printer, using paper made to work that way, or&lt;/li&gt;&#xA;&lt;li&gt;is it about using 'plain' paper to be burned?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;further:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is it about the use of a laser, or&lt;/li&gt;&#xA;&lt;li&gt;what other kind of device?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To start with, there are only two ways to transfer heat in a focused way and that's direct contact of some heating/heat transfer element and a beam focusing, which in turn makes most sense by using a laser. I would assume the question tries to avoid contact based printing (which would as well be possible), so laser it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even for thermal paper, the necessary power to 'burn' it in a time short enough to work as a printer, is way above what lasers could do until very recently. Or more exact, could do within an acceptable budget and size. Before high power laser diodes, it would have taken a quite large setup as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But even with diode lasers a setup would be far larger than what existing thermo printer need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To burn coated paper (aka thermo-paper) with a speed equal to a cheap thermal printer, a power close above .1 Watt is needed. After all, it does not make any sense to spend more money or a slower printer. According laser diodes have still today a price tag of 10 Euro or more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing the same with 'plain' paper requires either a laser many times the power or to accept slow operation. For example a .5 W laser may 'engrave' under optimal setup up to 100 mm/s on conventional (laser printer) paper. Not really anywhere near acceptable speed. To even come close to a thermal printer it would need a power past 5 Watt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Power over time is also a big hurdle to overcome is the paper catching fire vs print speed. This goes hand in hand with focusing. To make it viable the paper would need to be transported in a well defined way - maybe exactly as with a thermal printer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, there is no 'plain' paper. Even what we would consider similar may be different and designed to purpose. Some may remember that in the early days of laser and inkjet printers one had to take care what paper to use, as sheets made for typewriters did not work well wit non impact technologies. So, even if someone would build a laser based printer, 'burning' results may greatly vary over paper type used. It would only work good with paper made to certain specs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom Line: &lt;strong&gt;It did never make any sense, neither technological nor financial, to build such a printer.&lt;/strong&gt; &lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-02-10T22:21:22.803" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13689" PostTypeId="2" ParentId="13686" CreationDate="2020-02-10T22:22:00.080" Score="19" Body="&lt;p&gt;If there are two consecutive bytes of RAM one can write at a known address, one could store the byte values E1h, E9h [POP HL / JP (HL)] at that address and then CALL it to place the address following the call into HL.  Alternatively, if those byte values appear at some known address in ROM one could simply call that address likewise.  There isn't any way to find out the address of executing code without being able to CALL some function at a known address.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-02-10T22:22:00.080" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="13690" PostTypeId="2" ParentId="13685" CreationDate="2020-02-10T22:26:38.587" Score="0" Body="&lt;p&gt;Not plain paper, but how about &lt;a href=&quot;https://www.mecco.com/product-co2-laser-marking-machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;cardboard&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The CO2 Laser’s marking and engraving capabilities include marking date codes, serial numbers, and other product identification on wood, glass, rubber, plastics, cardboard, and product packaging.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-02-10T22:26:38.587" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13691" PostTypeId="2" ParentId="13686" CreationDate="2020-02-10T23:16:58.370" Score="7" Body="&lt;p&gt;In general case, when the environment is unknown, the answer is simply &quot;it can't&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, for a known environment, it is almost always possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since your environment is unknown, I'll assume it is ZX Spectrum. For other environments, find a suitable suggestion.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If your program is called from BASIC, calling address is always in &lt;code&gt;BC&lt;/code&gt;, as you wanted it (ZX Spectrum ROM specific).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Call the routine &lt;code&gt;POP HL:JP [HL]&lt;/code&gt; at the known address, as already answered by @supercat. There are no such bytes in the original ZX Spectrum ROM, however.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Make your own &lt;code&gt;POP HL:JP [HL]&lt;/code&gt; subroutine at the known free RAM address: &lt;code&gt;LD HL,0xE9E1: LD [ADDR],HL:CALL ADDR&lt;/code&gt;. On ZX Spectrum, this could be video RAM or printer buffer (if run from BASIC).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you can guarantee there would be no interrupts (no NMI or you can disable INTs by &lt;code&gt;DI&lt;/code&gt;), simply call to the &lt;code&gt;RET&lt;/code&gt; 'subroutine', then recover return address like this: &lt;code&gt;DEC SP:DEC SP:POP HL&lt;/code&gt;. Again you can either call a known ROM address or organize a byte at the known free RAM area.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-02-10T23:16:58.370" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13692" PostTypeId="2" ParentId="13686" CreationDate="2020-02-10T23:20:34.473" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm wondering how to write a program in assembler that discovers it's own memory location.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This depends much on the CPU used, as well as the OS/computer. Most important here if the code executed is relocated when loaded (*1) or not. The later is relevant for ROM code that may get inserted at different addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I/O drivers (slot PROM) of Apple II expansion cards are a great example here. Each slot has an assigned address range for a driver ROM as well as I/O registers. To work accordingly the ROM code had to find it's own address first. Since a ROM isn't relocated it couldn't simply call an address within. Instead a 'well known RTS' (Return instruction) in Monitor ROM was called. After returning, the return address could be peeked from stack, much like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;STACK    .EQ   $100&#xA;KNOWNRTS .EQ   $FF58   ;KNOWN RTS INSTRUCTION (*1)&#xA;&#xA;         JSR   KNOWNRTS&#xA;         TSX&#xA;         LDY   STACK,X     ;PCH&#xA;         LDA   STACK-1,X   ;PCL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is complete independent form any code relocation, but only works if there is a known Return instruction. Under some OS this may as well be possible, like the MS-DOS PSP containing a RETF at location 52h (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way is to call some (informative) OS function and later on examine the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if the code is relocated when loaded, a Subroutine Call can be used to emulate pushing the address:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         JSR   NEXT&#xA;NEXT:    PLY   ;PCH&#xA;         PLA   ;PCL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Of course if relocation is done by anything  but the most simple relocator, it will as well adjust address constants, so it simply can be defined as memory word:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;THIS     DW    THIS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I thought that maybe I could somehow load the program counter into for example BC.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This sounds as if you imply an 8080 type CPU. The principles are the same and the examples may look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a known return:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;KNOWNRET EQU   ???      ;Known Return, depends on OS/machine&#xA;&#xA;         CALL  KNOWNRET&#xA;         DEC   SP&#xA;         DEC   SP&#xA;         POP   BC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Code relocated when loaded (really short now):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         CALL  NEXT&#xA;NEXT:    POP   BC       ;POP B in 8080 syntax&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now BC contains the address of NEXT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or even shorter by letting Assembler/linker do the work:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;THIS     LD    BC,THIS  ;LXI B,THIS in 8080 syntax&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Bottom line, it all comes down to the environment and how much can be used.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: For all of these examples disabling interrupts may be needed, again depending on CPU, OS and environment.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - That is, the loader patches all absolute references in a piece of code according to the location the code is loaded. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - $FF58 is part of the Restore subroutine of the Apple II Monitor ROM and used wherever a Return or null-function is needed. For example does BASIC initialize the '&amp;amp;' extension vector ($3F5) with a jump to $FF58.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Then again in x86 everything is segment based and the actual segments can be read out anyway.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-11T13:44:33.303" LastActivityDate="2020-02-11T13:44:33.303" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13693" PostTypeId="2" ParentId="13686" CreationDate="2020-02-10T23:38:42.890" Score="7" Body="&lt;p&gt;If you are in the ZX Spectrum, BC is loaded with the calling address given to USR in BASIC. So at the beginning of a C/M program it is guaranteed you know the address. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, we do not be want/cannot be doing CALLs to our own code if we are trying to find where it was loaded. (for instance, for doing relocation/using relocation CALL tables as the GENS3 assembler did back in the day to be able to be loaded in ANY RAM position). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also doing CALLs to ROM, does not guarantee you will have your address in the stack by the time you are trying to fetch it, as an interrupt can happen in the meanwhile, unless you got your interrupts disabled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can &quot;cheat&quot;. For instance, with interrupts enabled, and knowing we only have interrupts 1/50 of a second, so we dont have to disable interrupts after the HALT for preserving the stack:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ORG 50000&#xA;LD  HL,0&#xA;ADD HL,SP&#xA;DEC HL&#xA;DEC HL&#xA;HALT&#xA;LD  C,(HL)&#xA;INC HL&#xA;LD  B,(HL)&#xA;RET&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;After the halt, we know a interrupt has happened, and (SP-2) will still have the address of the instruction after the HALT - LD C,(HL)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in the ZX Spectrum:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PRINT USR 50000 will return 50007.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS. Following @Raffzahn tips for code optimization:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ORG 50000&#xA;LD    HL,$FFFE&#xA;ADD   HL,SP&#xA;HALT&#xA;LD    SP,HL&#xA;POP   BC&#xA;RET &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;PRINT USR 50000&lt;/p&gt;&#xA;&#xA;&lt;p&gt;returns 50005 (the address of SP,HL after HALT) -- e.g. BC is loaded with the address of the instruction after HALT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PPS in a simple board, the same can be accomplished via:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ORG   XXXX&#xA;LD    HL,$FFFE&#xA;ADD   HL,SP&#xA;DI&#xA;CALL  ADDRESS_IN_MONITOR_ROM_OF_A_RET_OPCODE&#xA;LD    SP,HL&#xA;POP   BC&#xA;EI&#xA;RET &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2020-02-11T13:33:47.690" LastActivityDate="2020-02-11T13:33:47.690" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13694" PostTypeId="2" ParentId="13685" CreationDate="2020-02-11T01:29:13.727" Score="1" Body="&lt;p&gt;Not &lt;em&gt;exactly&lt;/em&gt; plain paper, and these were analogue devices, but the Gestetner Gestefax and Gakken Fax stencil copier for duplicators used a photocell on the read drum and a small spark on the write drum to burn through the thin paper duplicator stencil. These were indirectly used for reproduction, but not as a printer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The utterly terrible Sinclair ZX printer used a spark to burn through metallic coating on the paper, but that's not the OP's plain paper.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-02-11T01:29:13.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13696" PostTypeId="2" ParentId="13633" CreationDate="2020-02-11T05:05:24.827" Score="7" Body="&lt;p&gt;My experience is with the VAX and VMS. It had versioned files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the day, it was not uncommon for some programs, like editors, to create a backup copy of the file you were working on. In the end you'd have, for example, &lt;code&gt;file.txt&lt;/code&gt; and &lt;code&gt;file.bak&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The versioned file system is simply that concept writ large. Instead of &lt;code&gt;file.txt&lt;/code&gt; and &lt;code&gt;file.bak&lt;/code&gt;, you had &lt;code&gt;file.txt;2&lt;/code&gt; and &lt;code&gt;file.txt;1&lt;/code&gt;, with the lower numbered version being the older one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll note that it's not used for files that are changed in place (notably, things like databases). Rather they're for files that are rewritten wholesale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you open a file for writing that already exists, rather than overwriting the old version, it simply creates a new version. It's a simple mechanic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On systems like UNIX, the applications have to jump through hoops to manage this. &lt;code&gt;.BAK&lt;/code&gt; files, adding time stamps to file names, &lt;code&gt;file_2.txt&lt;/code&gt;, etc. On versioned files systems, this is unnecessary, and &quot;free&quot; for all applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VMS has a &lt;code&gt;PURGE&lt;/code&gt; command that goes through and removes all of the older versions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should be noted that modern &lt;code&gt;macOS&lt;/code&gt; applications implicitly version files today. The OS has built in application support for this model (note, the filesystem does not, the application framework does). Edit, for example, a word processor document, and it internally makes new versions and manages that for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is distinct from modern version control systems, which, obviously, also do this but offer a different workflow from versioned file systems. Many developers leverage these version control systems not just for source code, but many different files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe the Symbolic Lisp Machines used a versions filesystem as well.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-02-11T05:05:24.827" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13698" PostTypeId="1" AcceptedAnswerId="13699" CreationDate="2020-02-11T09:23:05.847" Score="10" ViewCount="797" Body="&lt;p&gt;I am writing a basic Zilog Z80 assembly language interpreter and something I noticed as I went through the 8 bit load commands is that the estimated times for &lt;code&gt;LD (IX+d), n&lt;/code&gt; and &lt;code&gt;LD (IY+d), n&lt;/code&gt; are different (4.75 and 2.50 respectively. Is this a typo as I suspect or is there a valid timing difference between these otherwise fairly identical operations?&lt;/p&gt;&#xA;" OwnerUserId="16243" LastActivityDate="2020-02-11T13:30:00.990" Title="Zilog Z80 estimated time discrepancy" Tags="&lt;z80&gt;&lt;assembly&gt;" AnswerCount="2" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13699" PostTypeId="2" ParentId="13698" CreationDate="2020-02-11T10:52:22.113" Score="11" Body="&lt;p&gt;Those two mnemonics opcodes are known to have the same timing / same inner mechanisms of mapping into HL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is obviously a bug in documentation from the &lt;a href=&quot;http://www.zilog.com/force_download.php?filepath=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTk2T0RBdlZVMHdNRGd3TG5Ca1pnPT0=&quot; rel=&quot;noreferrer&quot;&gt;link&lt;/a&gt; you give us. Those two pages you mention (86 and 87) were certainly edited based in the HL instruction, and someone forgot to edit that value to reflect the IY timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, do not focus much in single details. If they have the same T times described, they shant have different execution times in the theoretical times in the datasheet.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2020-02-11T13:30:00.990" LastActivityDate="2020-02-11T13:30:00.990" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13700" PostTypeId="2" ParentId="13698" CreationDate="2020-02-11T11:18:28.390" Score="11" Body="&lt;pre&gt;&lt;code&gt;opc      T0 T1 MC1   MC2   MC3   MC4   MC5   MC6   MC7   mnemonic&#xA;DD36S1U2 23 00 M1R 4 M1R 4 MRD 3 NON 5 MRD 4 MWR 3 ... 0 LD (IX+S8),U8&#xA;FD36S1U2 23 00 M1R 4 M1R 4 MRD 3 NON 5 MRD 4 MWR 3 ... 0 LD (IY+S8),U8&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see, the timings (&lt;code&gt;T0/T1&lt;/code&gt;) are identical. Beware most Z80 instruction set docs contain errors (even those which claim to be 100% correct).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I developed my ZX emulator, I compiled a lot of isets and by painful comparison (in MySQL) and inference, I created my own Z80 iset table which can be found in &lt;em&gt;&lt;a href=&quot;//stackoverflow.com/a/18911590/2521214&quot;&gt;What's the proper implementation for hardware emulation?&lt;/a&gt;&lt;/em&gt;, containing the secret instructions and inferred machine cycle timings etc. and passing ZEXALL 100%. I think you might find it useful for your task ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="7946" LastEditDate="2020-02-11T12:09:22.103" LastActivityDate="2020-02-11T12:09:22.103" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13701" PostTypeId="2" ParentId="13686" CreationDate="2020-02-11T11:58:26.737" Score="9" Body="&lt;p&gt;In general:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Disable interrupts (and hope that NMI will not occur)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Perform &quot;CALL&quot; to any RET with known address (e.g. CALL $007C at ZX Spectrum, feel free to consult your system ROM listing, look for any $C9)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Lower stack one address (it should be the return address of the previous CALL): DEC SP, DEC SP&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Get an address to a BC pair: POP BC&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-02-11T11:58:26.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13702" PostTypeId="1" AcceptedAnswerId="13703" CreationDate="2020-02-11T13:25:36.907" Score="13" ViewCount="1456" Body="&lt;p&gt;There are three common CLI commands on microcomputers that all mean the same thing: &quot;Show me the contents of a volume, disk, or sub-directory&quot;. I will mention that the noun &quot;Catalogue&quot;, and the derived command &lt;code&gt;catalog&lt;/code&gt;, always made the most sense to me. But that's just my preference and one could argue that the more generic nouns &quot;List&quot; or &quot;Directory&quot; are also appropriate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is about the history of &lt;code&gt;catalog&lt;/code&gt; and why it fell out of favour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand the lineage of &lt;code&gt;ls&lt;/code&gt;, being short for &quot;List&quot;, and coming from Multics and Unix. And I understand the parallel history of &lt;code&gt;dir&lt;/code&gt;, short for &quot;Directory&quot;, coming from DEC and CP/M. I have not found historical references to explain where &lt;code&gt;catalog&lt;/code&gt; originated, and whether it preceded &lt;code&gt;dir&lt;/code&gt; and &lt;code&gt;ls&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a backstory to the &lt;code&gt;catalog&lt;/code&gt; command, with a traceable history of where it was used and why? Also, is there any explanation for why the early CLI developers created this confusion of three commands for the same function?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="15334" LastEditDate="2021-03-05T17:30:03.100" LastActivityDate="2021-03-05T17:30:03.100" Title="Is it a Directory, a List, or a Catalogue?" Tags="&lt;history&gt;&lt;operating-system&gt;&lt;file-system&gt;&lt;terminology&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13703" PostTypeId="2" ParentId="13702" CreationDate="2020-02-11T13:55:04.033" Score="10" Body="&lt;p&gt;A plausible but impossible-to-prove history could be that the HP 2000A Time-Shared BASIC System (1968–~1976) had the &lt;code&gt;CATALOG&lt;/code&gt; command (see &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/hp/2000TSB/22687-90009_LearningTSB.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://bitsavers.trailing-edge.com/pdf/hp/2000TSB/22687-90009_LearningTSB.pdf&lt;/a&gt;, page 39). Woz ‘grew up’ with HP systems, so it may have been natural that the Apple disk system was inspired by HP commands (as with DEC inspiring CP/M / MS-DOS). &lt;a href=&quot;https://www.dartmouth.edu/basicfifty/commands.html&quot; rel=&quot;noreferrer&quot;&gt;Dartmouth BASIC&lt;/a&gt; had &lt;code&gt;CATALOG&lt;/code&gt; before that: maybe it originally came from GE computer systems?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Acorn copied Apple's &lt;code&gt;CAT&lt;/code&gt; for the BBC Micro's DFS command &lt;code&gt;*CAT&lt;/code&gt;, and in turn, Amstrad/Locomotive used &lt;code&gt;CAT&lt;/code&gt; on the Amstrad CPC system.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-02-11T13:55:04.033" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13704" PostTypeId="2" ParentId="13702" CreationDate="2020-02-11T14:26:09.503" Score="14" Body="&lt;p&gt;Original all three have different meanings and are (in part) based on different implementations. But, as you already assume &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13703/6659&quot;&gt;in your answer&lt;/a&gt;, people may have taken the name and used it with differend (usualy simpler) implementations&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there a backstory to the &lt;code&gt;catalog&lt;/code&gt; command&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The term &lt;strong&gt;&quot;Catalog(ue)&quot;&lt;/strong&gt; goes quite in line how IBM's terminology is based on analogies to a library. A tape was called a Volume - like a book - structured with a volume labels (VOL1..9) holding information about the tape and header label (HDR1..9) for each file. A HDR1 label is essentially a description of the file (*1). Disks or &lt;a href=&quot;https://en.wikipedia.org/wiki/Direct-access_storage_device&quot; rel=&quot;noreferrer&quot;&gt;DASD&lt;/a&gt;, as they called it, were as well named volumes and followed that same scheme. Now all HDR1 records are moved into a series of blocks building the Volume Table Of Content (VTOC). Much like in a book. Continuing analoge the collection of all files (Data Sets in IBM lingo) is called a Catalog.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practical ways it's used by operating systems with a seperate database for all files known to an installation, eventually across multiple disks and tapes, online and offline as well (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This wasn't only used by IBM, but followed by many others. Some in fact based the whole data management around such a catalogue. A nice example here is RCA's TSOS, where the system volume set always contained such a system catalogue. Like most systems of the time the basic structure of files on tape or disk were organized with 100% IBM compatible style volume labels (plus some extensions).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding a volume to the system also meant importing all VTOC (Volume Table Of Content) entries from that volume to the system catalogue. The information stayed there, no matter if the volume was online (mounted in a disk or tape drive) or offline. To purge an entry it had to be explicite 'exported'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such a catalogue allowed not only to hold additional information about the file, as well as spreading files across multiple volumes (*3), but most important to hold a catalogue of all files of all volumes known to the system. As a result meta information could be accessed without mounting a specific volume. Most important here would be the volume name itself, as now a user program could simply request access to a file, without caring or even knowing on what volume it is stored. The system would simply open it if online, or inform the operator got which volume to bring online. Quite an important layer of abstraction for larger installations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On TSOS the command &lt;code&gt;FSTAT&lt;/code&gt; (FileStatus) was used to enquire information about a file or groups of files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM itself of course used a similar catalogue system on their early operating systems continuing until today's zOS with a &lt;a href=&quot;https://www.ibm.com/support/knowledgecenter/zosbasics/com.ibm.zos.zconcepts/zconcepts_171.htm&quot; rel=&quot;noreferrer&quot;&gt;VTOC&lt;/a&gt; on each volume listing all Data Sets (their lingo for files) and a &lt;a href=&quot;https://www.ibm.com/support/knowledgecenter/zosbasics/com.ibm.zos.zconcepts/zconcepts_172.htm&quot; rel=&quot;noreferrer&quot;&gt;master-catalog&lt;/a&gt;, holding all known volumes, files and user-catalogs (*4), on their system volume.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar the term &lt;strong&gt;&quot;Directory&quot;&lt;/strong&gt; is taken from real world directories. Were a catalogue collects multiple information items in an entry to be searched and manipulated, a directory offers directions to find something. Like a phone directory, a cities street directory, a store directory in a mall, or a mercantile directory of suppliers. Directories are usual a one on one relations listing some primary information under a secondary key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&quot;List&quot;&lt;/strong&gt; in contrast to &quot;Directory&quot; or &quot;Catalog&quot; is not named about the storage structure accessed, but simply named from the user side view of listing all files within a given context.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: &lt;em&gt;I really miss the power of a system wide catalogue.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Fun part: all these headers are essential 80 bytes in size ;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - To avoid confusion, this is not about some &lt;em&gt;optional&lt;/em&gt; file data base - like handy for many systems all the way down to the C64 - but catalogues as &lt;em&gt;integral part&lt;/em&gt; of the OS. Neither TSOS of the 1970s nor today's zOS will start up without a valid system catalogue residing on the startup drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Parts on each volume looked like simple files, consistent only as storage within the volume. Somewhat like archivers used to spread large files/archives over multiple floppies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - No, these are not subdirectories, but complete stand alone catalogues that are mapped into the system catalogue when attached. This is useful to import and export whole groups of volumes, for example if the storage complex of another system has to be mounted to take over its workload.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-12T14:40:43.223" LastActivityDate="2020-02-12T14:40:43.223" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13705" PostTypeId="1" AcceptedAnswerId="13706" CreationDate="2020-02-11T14:41:58.310" Score="39" ViewCount="10425" Body="&lt;p&gt;The answer recently posted to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13650/did-atari-make-more-money-from-arcade-games-or-consoles&quot;&gt;Did Atari make more money from arcade games or consoles?&lt;/a&gt; quotes a New York Times article from 1982 &lt;a href=&quot;https://www.nytimes.com/1982/12/19/business/the-game-turns-serious-at-atari.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.nytimes.com/1982/12/19/business/the-game-turns-serious-at-atari.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Atari's future may lie with its home computer division. The market for home - as opposed to small-business computers - has taken off this year and Atari has seen its sales quadruple, to an estimated $300 million. Yet the division is still losing money, perhaps $25 million $50 million this year.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Wait a minute. How the heck was Atari still losing money on computers in 1982?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They had great hardware; the Atari 800 was Jay Miner's penultimate masterwork before he went on to design the Amiga chipset; it was still considered good as late as the mid-eighties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The great hardware didn't languish in obscurity; Atari was one of the best-known brand names in the industry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nor did it lack software support; Atari was perfectly positioned to support their machines with cartridge versions of arcade games, and Star Raiders is still cited as a killer application for home computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The company did not lack skills in low-cost manufacturing or distribution, nor was it without retail presence, as demonstrated by their decisive victory in the second generation of game consoles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not like they underpriced their hardware; the 800 was released at more than $1000, and even the 400 at over $500.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 1979 release got them well ahead of most of the competition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the same token, the accounting can hardly have been still paying off R&amp;amp;D cost in 1982, particularly since they flatly refused to invest in a follow-up 16-bit home computer. (That's what led to Jay Miner and Joe Decuir going off to join a startup named Hi-Toro to work on a shiny new machine called the Amiga.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So with all those advantages going for them, at a time when home computers were one of the hottest industry segment, the sort of greenfield market entrepreneurs would kill for:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How on earth did they manage to lose money on home computers?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-12T19:12:38.113" Title="How did Atari lose money on home computers?" Tags="&lt;history&gt;&lt;atari&gt;&lt;atari-800&gt;&lt;atari-400&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13706" PostTypeId="2" ParentId="13705" CreationDate="2020-02-11T14:53:04.733" Score="35" Body="&lt;p&gt;In 1982 the original 400 and 800 were on the market. These were expensive machines to implement. Even the low-cost 400 was significantly more complex and expensive than something like a VIC-20.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say what you will about the VIC-20, it &lt;em&gt;was&lt;/em&gt; cheap. And it proved that the #1 selling point for a computer was its price. And then came the 64. So as Commodore started to crush Atari in the market, Atari responded by lowering its prices and preparing a new high-end machine to differentiate itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So basically it was due to the attempt to keep product flowing into a market that was rapidly moving down the price scale. This has killed lots of companies and will in the future too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is difficult to understand how Atari got itself into this situation. They were aware, from the start, that the FCC shielding that drove up the costs were a significant problem. There were also concerns about the price of the SIO. And by 1981, the complexity of the motherboard could be greatly reduced. And the company had purchasing power far in advance of even Commodore, they sold 8 million 2600s in 1982 alone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now any competent management should have had a back-burner project to take advantage of these changes, but it seems Atari didn't even start &lt;em&gt;considering&lt;/em&gt; such changes until early 1982. At that point, the VIC was eating their lunch. This is not a technical issue; the 600XL could have been in the market and would have been significantly more cost-effective than the 400.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume they simply got distracted by the success of the 2600. It seems like a massive waste of talent. &lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="7922" LastEditDate="2020-02-12T19:12:38.113" LastActivityDate="2020-02-12T19:12:38.113" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="13707" PostTypeId="1" CreationDate="2020-02-11T15:06:17.723" Score="4" ViewCount="212" Body="&lt;p&gt;How do I check old ZX spectrum cassettes work - the tapes are after all quite old?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am fairly computer savvy (my life is a continual strand from that Speccy to this here Thinkpad - and many stations between &lt;strong&gt;:-)&lt;/strong&gt;) and I have a mono cassette player so I figure I can sample the tapes to something like *.tzx and load them into an emulator. Is this really necessary? If it is necessary, is there a quicker way of determining whether the software is still OK? &lt;/p&gt;&#xA;" OwnerUserId="16245" LastEditorUserId="7946" LastEditDate="2020-02-11T16:54:37.337" LastActivityDate="2020-02-12T07:41:55.570" Title="Checking Old Tapes" Tags="&lt;zx-spectrum&gt;&lt;cassette-tape&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13709" PostTypeId="1" AcceptedAnswerId="13875" CreationDate="2020-02-11T17:59:04.213" Score="8" ViewCount="389" Body="&lt;p&gt;I know it's always hard to define an exact first, so I'll just ask about early network file systems.  To be more specific, I'm wondering about file systems that transparently present directories and files as if they were local.  I don't consider FTP or similar mechanisms to be candidates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some time it has been my suspicion that the ITS &quot;MLDEV&quot; facility was very early (&quot;the first&quot;), but I never had any facts to back it up.  I do have a file timestamped November 1972 that gives us an upper bound for the introduction of the facility.  On the MIT-AI PDP-10, it provided an ML device (hence the name) which worked much like the local DSK device except the data was accessed through MIT's ARPANET IMP.  MIT-ML of course had an AI device.&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2020-02-21T16:28:24.777" Title="What are some early network file systems?" Tags="&lt;history&gt;&lt;file-system&gt;&lt;network&gt;" AnswerCount="1" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="13710" PostTypeId="2" ParentId="13702" CreationDate="2020-02-11T18:12:41.053" Score="5" Body="&lt;p&gt;The first filesystems were not stored on disk, but on tape.  Usually tapes could only reliably be appended to or overwritten entirely, and could only be accessed in a more-or-less sequential order.  Reading the entire tape just to find out what was stored on it was a very slow operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's likely that the terms &lt;strong&gt;catalogue&lt;/strong&gt; and &lt;strong&gt;list&lt;/strong&gt; originated from a handwritten (or printed) card provided with a tape, simply as a quick reference to its contents and the correct names to identify each file.  The first &quot;catalogue&quot; commands would have read the tape sequentially, to produce such a card automatically for future reference - and that is what Acorn's &lt;code&gt;*CAT&lt;/code&gt; does when the tape filesystem is active.  &lt;code&gt;*CAT&lt;/code&gt; is still supported by currently-maintained versions of RiscOS Open, although you won't find a tape filesystem there; it is just the local equivalent to the UNIX &lt;code&gt;ls&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the advent of disk filesystems which supported random access, the focus shifted from merely listing the contents of the disk, to directing the read head rapidly to the correct position to find a particular file.  This was likely the origin of the term &lt;strong&gt;directory&lt;/strong&gt;.  It was soon developed to include a hierarchical or categorical organisation of files for users' benefit, in which sense the usage of &quot;directory&quot; survives in modern computers.  UNIX has &lt;code&gt;cd&lt;/code&gt; for &quot;change directory&quot; and &lt;code&gt;mkdir&lt;/code&gt; for &quot;make directory&quot;, for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mid-1980s, Apple introduced the Macintosh, and used the desktop metaphor of a &lt;strong&gt;folder&lt;/strong&gt; to convey the concept of a hierarchical disk directory to non-specialised users.  This is ultimately a fourth term for the same basic concept.  MacOS X is based on a UNIX kernel and supports UNIX shell commands, but the filesystem is still presented to the end user as folders - even in the online help for the Terminal, through which the UNIX shell is normally accessed.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-02-11T20:16:18.347" LastActivityDate="2020-02-11T20:16:18.347" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13711" PostTypeId="2" ParentId="13686" CreationDate="2020-02-11T19:26:22.120" Score="3" Body="&lt;p&gt;The Nascom II system ROM NAS-SYS 3 reserved one of the RST instructions (RST 10h) for emulating a relative call.  On that computer, obviously&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RCAL $+2&#xA;POP HL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would do the trick for getting the current address (+2) into HL.  The 1k debugger extension ROM used this and other tricks in order to be fully relocatable.  Of course, this is not a generally useful answer since it is system dependent.  But it was a nice byte-saving feature which NAS-SYS itself used quite a bit.&lt;/p&gt;&#xA;" OwnerDisplayName="user16247" LastActivityDate="2020-02-11T19:26:22.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13712" PostTypeId="2" ParentId="13705" CreationDate="2020-02-11T20:13:15.923" Score="9" Body="&lt;p&gt;I'm going to make a guess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For starters, Maury makes a good point about the manufacturing cost of the 400/800 series. I certainly think that is a key point, but not the whole story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on data found &lt;a href=&quot;https://www.jeremyreimer.com/rockets-item.lsp?p=137&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; which is a spreadsheet of sales numbers from the era, you can see that between 1979 and 1982 things are picking up for the home computer market in general. Looking at the Apple II, Atari, TRS-80 and to some degree Commodore (it only lists the C64, the VIC is presumably in the 'Other' category), sales are increasing steadily in that date range. Good, things are moving upwards and Atari is actually doing better than other specific models, though there is this pesky 'Other' category which is doing very well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we then focus on the 1983-1986 range, there are shifts we can see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The PC is obviously emerging as the business platform of choice. We know how this story goes.&lt;/li&gt;&#xA;&lt;li&gt;The Apple II did well with the introduction of the //e in 83/84, obviously giving it more steam over the now dated II/II+ platform that existed up that point. In the mid-80s, the II's capabilities were now dated and the only reason to really buy one was because of the existing software library.&lt;/li&gt;&#xA;&lt;li&gt;The C64 hit the market as a low cost competitor and is outselling everyone except the IBM PC.&lt;/li&gt;&#xA;&lt;li&gt;The Atari 400/800 starts to decline and effectively disappears by 1986.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So let's narrow the focus to Commodore and Atari.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VIC-20 and Commodore 64 were cheap. IMHO, it competed with the Atari 400/800 since the Apple II and IBM PC simply weren't in the same class of &quot;game machine&quot;, so people who wanted a game computer would go for the Commodore or Atari machines. But considering cost, the C64 was cheaper than the Atari so we could assume that this was a major factor. When Jack Tramiel went to war on cost, he would win because of his vertical integration of components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But thinking that cost alone shouldn't be the answer, we can consider three other things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Atari seemed to have a significant portion of management that didn't realize they needed to keep pushing the envelope and innovate. Sure, they cost reduced with the XL line but they appeared to not know what they were doing with what they had. This made them fall behind.&lt;/li&gt;&#xA;&lt;li&gt;They didn't make documentation publicly available until De Re Atari until ~2 years after release. This surely didn't help matters.&lt;/li&gt;&#xA;&lt;li&gt;The video game crash in 1983 had Atari's name all over it, simply because the name was synonymous with video games. That doesn't make the company look like a good bet when comparing against the Commodore.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Though I can't cite a source for it, I've read that piracy was easy on the Atari because of the smart 810/1050 design. This would obviously be a deterrent for software publishers. Sure, the Commodore 1541 was in the same boat, but look at the number of units sold - the market is obviously more lucrative there even if a percentage is lost to piracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So putting this all together, I'd surmise that it is really down to two major points: lack of documentation from the start and lack of a cost reduced model at the start of the Commodore price war. Those two points would certainly fall under the fault of management.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That all being said, the one chance that Atari had to fix this was the 1200XL, but it was less than spectacular in comparison to the wonderful 800 and was also perceived as too expensive at release. If they had released the 800XL instead at that time (early 1983), I think things would have been different, but that didn't get &lt;em&gt;announced&lt;/em&gt; until summer 1983.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My two cents :-)&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2020-02-11T21:16:04.783" LastActivityDate="2020-02-11T21:16:04.783" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13713" PostTypeId="1" CreationDate="2020-02-11T21:00:29.803" Score="-4" ViewCount="323" Body="&lt;p&gt;Does anybody know if this is available anywhere?&lt;/p&gt;&#xA;&lt;p&gt;The domain seems to be gone.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2021-04-26T17:45:50.270" LastActivityDate="2021-04-26T17:45:50.270" Title="Handheld Systems Archives CD-ROM" Tags="&lt;handheld&gt;&lt;magazine&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2021-04-22T04:31:40.180" ContentLicense="CC BY-SA 4.0" />
  <row Id="13714" PostTypeId="2" ParentId="13705" CreationDate="2020-02-11T22:28:21.970" Score="6" Body="&lt;p&gt;Historical perspective: IBM announced their PC in late 1981, Commodore announced the C-64 in late 1982, just before Atari destroyed their retail channel relationships by grossly overfilling the channel with bad product (E.T., et.al.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the low-end retail channel was taken over by Commodore, and the higher-end retail channels were in the process of switching from Apple to IBM, leaving a rapidly shrinking middling retail presence for Atari.  Lower sales and higher marketing costs than targeted probably ate their profit margins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In part, it may have been due to Atari's (and Jay Miner's) original design target being at or above the Apple II+ instead directly at the VIC-20 in terms of general capability and pricing.  e.g. the 800 ended up having been designed for a different market segment than it ended up actually competing in.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2020-02-11T22:28:21.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13716" PostTypeId="2" ParentId="13713" CreationDate="2020-02-11T22:44:46.753" Score="2" Body="&lt;p&gt;If the site and company are no longer in existence then it may have to come down to using one of the many online auction sites ( eBay / SellMyRetro ) etc amongst others to see if said CD Rom is up for sale there. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming it is not in archive.orgs CD software collection that is and you want or need original media.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Copyright status I could not comment either way on as the material in question I am not familiar with.&lt;/p&gt;&#xA;" OwnerUserId="15907" LastActivityDate="2020-02-11T22:44:46.753" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13718" PostTypeId="2" ParentId="13702" CreationDate="2020-02-12T00:00:09.457" Score="8" Body="&lt;p&gt;The question asks about microcomputer operating systems.  I think the answer for such systems is that the authors simply reused whatever words they were familiar with from earlier systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For earlier systems, I further guess that the authors of &lt;em&gt;those&lt;/em&gt; systems just used whatever seemed like a good word at the time, and which they hadn't already used for some other purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I made a survey of a handful of early timesharing systems, mostly from manuals on bitsavers.org, to determine what the command was for &quot;give me a list of my files&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dartmouth DTSS, 1964 - CATALOG&lt;br&gt;&#xA;MIT CTSS, 1965 - LISTF&lt;br&gt;&#xA;SDS940 Timesharing System, 1967 - FILES&lt;br&gt;&#xA;ICL 1900 GEORGE 3, 1969 - LISTDIR&lt;br&gt;&#xA;DEC TOPS-10, 1970 - DIRECT&lt;br&gt;&#xA;Leeds Univ Eldon2, 1971 - SUMMARY&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dates are the dates on the manuals that were available, and do not necessarily indicate the year the system or command first became available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, they're all over the place, not necessarily verbs or even words. I didn't intentionally select systems where I knew I'd get no commonality at all; I selected 3 systems with historical significance and 3 systems I'd used personally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(FWIW, the TOPS-10 command was 'DIRECT' and not 'DIRECTORY' -- command names were one 36-bit machine word.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, with respect to the actual questions asked:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there a backstory to the catalog command, with a traceable history&#xA;  of where it was used and why?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;My opinion (and it's only an opinion) is that it's an English word that more or less accurately describes the action being performed, so seemed like a good choice to someone.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also, is there any explanation for why the early CLI developers&#xA;  created this confusion of three commands for the same function?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And my opinion on this is that other programmers made other equally valid but equally arbitrary choices. Operating systems were local affairs. There was no perceived need for standardization, if people even knew what others were doing.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Side note: I come from a computing tradition where computers didn't have an ALU (Arithemtic/Logical Unit), they had a &quot;mill&quot;. They didn't have memory, they had a &quot;store&quot;. No kernel, rather a &quot;director&quot; or an &quot;exec&quot;. Words were not divided into bytes but &quot;syllables&quot;.  Evaluation occurred not on a stack but on a &quot;nest&quot;.  So I think there's ample empirical evidence that says that terminology starts off localized in the early days of development, and only becomes standardized after some critical mass is achieved.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-02-12T13:18:46.740" LastActivityDate="2020-02-12T13:18:46.740" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13719" PostTypeId="1" CreationDate="2020-02-12T00:04:07.390" Score="2" ViewCount="98" Body="&lt;p&gt;Background:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM compatible &lt;a href=&quot;https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.idam300/m3199.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;tape structure&lt;/a&gt; (*1) consists of a series of label blocks describing the volume and each file (Data Set). Essential the structure looks like this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;VOL1..9 Volume header &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;VOL1 Naming the Volume and optional owner (*2)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;HDR1..9 File header&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HDR1 Basically the directory entry for the file following &lt;/li&gt;&#xA;&lt;li&gt;HDR2 Description of the internal file structure like block length or record length&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Data Blocks&lt;/li&gt;&#xA;&lt;li&gt;EOF1..9 End of file markers&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;EOF1/2 Basically a repetition of the HDR1/2 blocks&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;[more files if present, covered by HDRx/EOFx blocks]&lt;/li&gt;&#xA;&lt;li&gt;EOV1/2 End of Volume markers in case of files spreading over multiple tapes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This structure is at least present since TOS/360 of 1964 and as well defined in a later ANSI standard (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Has this structure been used before 1964 and which system or software did so?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(I'm prety sure it was, but I can't find any reference among my old manuals)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Essential disk structure as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Much like the Volume name entry of a MS-DOS 1.28 root directoy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - With some extensions like allowing larger block length than 80 bytes for labels.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-12T00:16:48.917" LastActivityDate="2020-02-12T00:16:48.917" Title="When and with which system or software was IBM's system of tape headers (VOLx, HDRx, ...) introduced?" Tags="&lt;ibm&gt;&lt;magnetic-tape&gt;&lt;ibm360&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13722" PostTypeId="2" ParentId="13705" CreationDate="2020-02-12T01:56:36.627" Score="18" Body="&lt;p&gt;I can only add to the other answers with observations and memories, some of which come from owning an Atari 800 in the time period you're asking about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, notice the names flying around in the space of only a few answers: IBM, Apple, VIC-20, Commodore 64, TI.  Add to that list TRS-80, Timex Sinclair, and the Coleco Adam (released in 1983), and more.  In 1982, the home computer market was glutted with options and a wide range of price tags.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM was the choice for business &amp;amp; scientific applications, which bled into the home market and defined it as a serious computer.  Apple promoted their line to U.S. educators, particularly K-12, and had established a reputation as a serious home computer as well.  (By serious I mean, &quot;a computer for doing real things, not merely video games.&quot;  I'm talking perception, not reality.)  Commodore's aggressive price-cutting and success in retail chains led to the VIC-20 and C-64 being the choice for cost-conscious buyers.  (These are broad brush-strokes, obviously.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For most consumers, their purchase decision was dictated by tastes, income-level, and experience with or access to a machine outside the home.  (People would even buy a machine because their neighbor had the same model, making it easy to, ah, share software.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The early marketing for the Atari 800 was a sincere attempt to frame the line as an all-around consumer solution for home finance, education, games, and so on.  (This &lt;a href=&quot;http://www.atarimuseum.com/computers/8BITS/400800/index.htm&quot; rel=&quot;noreferrer&quot;&gt;Atari dealer video&lt;/a&gt;, while dated, shows the breadth of applications Atari was promoting early on.)  They failed to follow through, and over time the Atari line came to be regarded as merely a game machine with a higher price tag.  Their R&amp;amp;D attempts to find a toe-hold in the education market bore no fruit, and they simply had zero story to tell the business world.  (After all, this was a 40-column computer requiring a &lt;em&gt;television&lt;/em&gt; for its display.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So by 1982, Atari's 8-bit line had one avenue for immediate income, the home market, and that meant competing on price and software titles.  With Apple's and Commodore's success, Atari found themselves as the platform being ported-to rather than ported-from.  Worse, they were sometimes overlooked entirely, leading Atari to license or write their own titles to fill gaps in their catalog (such as with &lt;a href=&quot;https://en.wikipedia.org/wiki/AtariWriter&quot; rel=&quot;noreferrer&quot;&gt;AtariWriter&lt;/a&gt;, a surprisingly great word processor).  And since some home consumers simply wanted to play video games, Atari found itself competing with its own 2600 console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The company wasn't in a position to fight a consumer price war, but by 1982 lacked the cachet of Apple or IBM to stand above the fray.  In 1979, a &lt;a href=&quot;https://archive.org/stream/1986-05-anticmagazine/Antic_Vol_5-01_1986-05_Fourth_Anniversary_Issue#page/n15/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;16K Atari 800 cost $1680&lt;/a&gt; and was sold via an Atari authorized dealer; by mid-1983, a 48K Atari 800 sold for $165 on the shelf of a Sears store, a situation they absolutely did not want to find themselves in.  Atari overpriced the 1200XL (leading to a rush on the 800, which they'd dropped in price to clear inventory), meaning they didn't have a machine to cost-compete with the C-64 until a year after the latter's introduction.  Commodore simply dropped their price in response.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Between the trifecta of Apple, IBM, and Commodore, Atari found itself wedged out trying to differentiate itself.  Management kept toying with dropping the line and returning to a pure video-game strategy, while the other three companies were obviously committed to the personal computer.  When 2600 sales collapsed at the end of 1983, Atari found itself without their cash cow, and therefore out of time and options.&lt;/p&gt;&#xA;" OwnerUserId="4222" LastActivityDate="2020-02-12T01:56:36.627" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13723" PostTypeId="1" CreationDate="2020-02-12T06:03:24.073" Score="27" ViewCount="6362" Body="&lt;p&gt;I've come across &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/13633&quot;&gt;Filesystems with versioning&lt;/a&gt; and have been reading through the &lt;a href=&quot;https://simson.net/ref/ugh.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unix Haters Handbook&lt;/a&gt;, linked there. I came across page 85:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;On the other hand, techniques for &lt;strong&gt;guaranteeing synchronous, atomic operations&lt;/strong&gt;, even for processes running on &lt;strong&gt;two separate computers&lt;/strong&gt;, were known and understood in 1983...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now, to me that immediately jumped out as impossible. After all, that sounds as good as having solved the &lt;a href=&quot;https://en.wikipedia.org/wiki/Two_Generals%27_Problem&quot; rel=&quot;nofollow noreferrer&quot;&gt;Two Generals problem&lt;/a&gt;, which according to Wikipedia&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;was the first computer communication problem to be proved to be unsolvable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I.e. it can't be done.&lt;/p&gt;&#xA;&lt;p&gt;Now, I want to give the authors the benefit of the doubt. I assume when they wrote guaranteeing, they were referencing some system that existed at the time that in their opinion did just that. Were there such systems? Or are the authors simply wrong?&lt;/p&gt;&#xA;" OwnerUserId="16254" LastEditorUserId="15334" LastEditDate="2021-01-19T20:36:30.567" LastActivityDate="2021-01-19T20:36:30.567" Title="Unix Haters Handbook - guaranteeing synchronous, atomic operations" Tags="&lt;software&gt;&lt;books&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13724" PostTypeId="2" ParentId="13686" CreationDate="2020-02-12T06:38:25.697" Score="4" Body="&lt;p&gt;The Z-80 has no direct way to read the program counter contents.  However, there are a few techniques that can work with minimal assumptions.  If your code is loaded into RAM it can use self-modification to find itself:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        di&#xA;        ld      hl,0&#xA;        ld      a,(hl)&#xA;look:   ld      (hl),a&#xA;        dec     hl&#xA;        ld      a,(hl)&#xA;        ld      (hl),0&#xA;loc:    jr      look&#xA;        ld      (hl),a      ; repair, HL = loc + 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When this completes HL will point to &lt;code&gt;loc + 1&lt;/code&gt;.  The program marches down from the top of memory temporarily setting each memory location to 0.  When it gets to &lt;code&gt;loc + 1&lt;/code&gt; the &lt;code&gt;jr&lt;/code&gt; there will be changed to go to the next instruction.  At which point the jr is fixed and the program now knows where it is in memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your program is in a ROM at an unknown location you could do something more complicated in terms of checksumming memory in order to identify your code.  Or look for some random &quot;signature&quot; bytes.  Or if you know there are two bytes of RAM at a certain memory location you can do this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        ld      de,($3c00)&#xA;        ld      hl,$e9e1&#xA;        ld      ($3c00),hl  ; write $e1 $e9 which is POP HL; JP (HL)&#xA;        call    $3c00&#xA;loc:    ld      ($3c00),de  ; HL = loc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you only know one byte of RAM, this will do:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        di&#xA;find:   ld      hl,mem&#xA;        ld      a,(hl)&#xA;        ld      (hl),$c9    ; &quot;RET&quot;&#xA;        call    mem&#xA;loc:    ld      (hl),a      ; restore&#xA;        dec     sp&#xA;        dec     sp&#xA;        pop     hl          ; now HL==loc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Though it does have to be careful that the RAM modified does not happen to be one of the two bytes of the stack used.  There are ways around this but for most systems you're highly likely to be able to pick a RAM location that does not conflict.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;DI&lt;/code&gt; instruction stops most interrupts which would change the stack address if one occurs after the &lt;code&gt;ret&lt;/code&gt; is executed.  However, the non-maskable interrupt (NMI) can't be stopped.  One workaround is to validate the address loaded into HL say by ensuring it points to a &lt;code&gt;ld (hl),a&lt;/code&gt; instruction.  Add this code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        ld      a,(hl)&#xA;        cp      $77     ; LD (HL),A opcode&#xA;        jr      nz,find&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Obviously that could be fooled by an unlucky data being placed on the stack.  Further checks can be made to reduce the chances of such a coincidence to practical certainty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you could make the almost perfectly safe assumption that an NMI will merely change the top of the stack to an address within your program.  In that case you only need to search back for the &lt;code&gt;ld (hl),a&lt;/code&gt; instruction to lock down the position:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        di&#xA;        ld      hl,mem&#xA;        ld      a,(hl)&#xA;        ld      (hl),$c9    ; &quot;RET&quot;&#xA;        call    mem&#xA;loc:    ld      (hl),a      ; restore&#xA;        ld      hl,0&#xA;        add     hl,sp&#xA;        dec     hl&#xA;        ld      a,(hl)&#xA;        dec     hl&#xA;        ld      l,(hl)&#xA;        ld      h,a&#xA;look:   ld      a,(hl)&#xA;        cp      $77         ; LD (HL),A opcode&#xA;        dec     hl&#xA;        jr      nz,look&#xA;                                ; now HL==loc - 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;These solutions may not be entirely practical but they do point out how to work with minimal system knowledge.&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2020-02-12T18:19:02.857" LastActivityDate="2020-02-12T18:19:02.857" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13725" PostTypeId="2" ParentId="13707" CreationDate="2020-02-12T07:41:55.570" Score="3" Body="&lt;p&gt;I guess some emulators have a direct MIC input for a quick check, but I prefer a little bit longer way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, I connect the tape with the PC (in fact, I have a &quot;USB Walkman&quot;) and make a digital copy using Audacity, at the best quality I can (48 kHz sampling frequency, 16 or 24 bits). Save it as lossless WAV (NO MP3!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this record, I can do all necessary operations, e.g. cutting, speed corrections, filtering, volume correction ... The only thing you cannot fix are the dropouts. Dropout = dead. (But you can fix dropout in the leader tone if you need.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last step is to use any WAV to TAP / TZX converter. At this phase, you will get the digital version, suitable for archiving - or get a STOP sign, back to the Audacity, do something, try again...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Definitely a nice work for a weekend! :)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-02-12T07:41:55.570" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13726" PostTypeId="2" ParentId="13723" CreationDate="2020-02-12T08:20:52.383" Score="28" Body="&lt;p&gt;If you can ensure a &lt;em&gt;reliable&lt;/em&gt; connection, synchronous, atomic operations can indeed be implemented using various techniques that also work for remote connections, much in the same way as they can be implemented on local multi-processor systems. The quoted claim doesn't make any statement about the distance of the separate computers or the quality of their connections: they could be next to each other and have dedicated connections just to coordinate atomic access. There are several algorithms specifically designed for networked coordination, for example the &lt;a href=&quot;https://en.wikipedia.org/wiki/Suzuki%E2%80%93Kasami_algorithm&quot; rel=&quot;noreferrer&quot;&gt;Suzuki-Kasami algorithm&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;Two Generals&quot; problem is about a worst-case case scenario here: how to reliably coordinate over an &lt;em&gt;unreliable&lt;/em&gt; connection where messages may disappear. There are often ways to deal with this by introducing timeouts. This of course means possibly bad performance but depending on the operation being synchronous is more important than being fast. A lot of the distributed mutex algorithms I've seen while researching this answer do indeed break down if the communication is unreliable, they may &quot;starve&quot; or &quot;deadlock&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the quoted claim that distributed synchronous atomic operations were understood and available in 1983 is probably true when you make the assumption that you have a reliable setup with reliable connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One example of that era that is using network mutex are file locks on &lt;a href=&quot;https://en.wikipedia.org/wiki/Network_File_System&quot; rel=&quot;noreferrer&quot;&gt;NFS&lt;/a&gt;. They were available in v2, ca. 1986. I guess they weren't the first to have this.&lt;/p&gt;&#xA;" OwnerUserId="793" LastActivityDate="2020-02-12T08:20:52.383" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13727" PostTypeId="2" ParentId="13686" CreationDate="2020-02-12T11:31:42.130" Score="1" Body="&lt;p&gt;Platform independent:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;scan the memory for a RET opcode.&lt;/li&gt;&#xA;&lt;li&gt;call that memory location&lt;/li&gt;&#xA;&lt;li&gt;adjust the stack pointer&lt;/li&gt;&#xA;&lt;li&gt;pop from the stack to get the address of your call&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2020-02-12T11:31:42.130" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13728" PostTypeId="2" ParentId="13686" CreationDate="2020-02-12T13:07:05.560" Score="1" Body="&lt;p&gt;Since we now know that the OP uses a DIY Z80 system and z80asm for generating its machine code, I feel the need to add this simple answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use the special expression &lt;code&gt;$&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The special value &quot;$&quot; is the address of the first byte of the current command.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;With:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ld hl,$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;you will get the address of the opcode of &lt;code&gt;ld hl,imm16&lt;/code&gt; in HL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    dw  $&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;will place the address of the first byte of the stored address at this place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expanding this leads to this additional simple solution:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;start:&#xA;    ; any code you like&#xA;    ld hl,start&#xA;    ; ...&#xA;    dw start&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Let the assembler do the work. Developers are lazy, aren't you?&lt;/p&gt;&#xA;" OwnerUserId="14875" LastActivityDate="2020-02-12T13:07:05.560" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13729" PostTypeId="2" ParentId="13723" CreationDate="2020-02-12T13:13:45.737" Score="9" Body="&lt;p&gt;Not really an answer to whether there were such systems, but a comment on that section of the &lt;em&gt;Unix-haters Handbook&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mid 1980s I implemented a (non-Unix, non-SMTP) mail sending agent that had the same &quot;responsibility&quot; (non-)issue: the sender required the final status from the receiver, else it would resend later, thus a window existed for potential double delivery -- if the status message got lost on its way from the receiver to the sender.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regardless of whether I knew of these atomicity techniques, I could not have applied them because the protocol was not in my control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Isn't that the same situation with sendmail? SMTP is what it is. After the message is at the mail receiver, it sends back OK status. There is no follow-up status about the delivery of the status. In particular, if the server has sent back OK, it now has responsibility for delivery of the message.  If the client has not received OK, it still has responsibility for the message.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, &quot;are the authors wrong&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Partially, I think. They may or may not be wrong about the existence of other systems that solve this problem.  They are wrong about blaming Unix for this, since it is the property of the protocol.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-02-12T13:13:45.737" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13730" PostTypeId="2" ParentId="13705" CreationDate="2020-02-12T15:14:30.030" Score="5" Body="&lt;p&gt;Having lived through this time period, my first computer in 1983 was the vic-20 because the price was affordable for a young sailor in the Navy. By 1984, my mom had bought a Commodore 64 because of the price.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One part that seems to have been absent from the discussion is the rise of the clones. From roughly 1985 onward there is little chance for any home computer to survive that was not intel based and running DOS as the operating system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Evidence of this is the publication in 1984 of &quot;Computer Shopper.&quot; In 1984 it was running about 350 pages each month. by the late 1980s it was running at about 600 pages and by 1990 it peaked at 1000 pages of adds for parts and complete computers. All priced lower than the Apple products and all priced lower than the other computers like the Atari and the Radio Shack TSR-80. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of that they were all running the same operating system MS-DOS or a flavor of DOS. Dozens of software titles were coming out every month that all ran on a DOS clone. It is that wave of machines from all of those manufacturers that ultimately did in all of the computers that were not running DOS. The exception is the Macintosh because it had the GUI and people were having their first contact with computers at school. Once Windows 3.1.1 came out the wave almost overwhelmed Apple too. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1986-87 the market was being filled with dozens of hardware manufacturers and it will be another 10 years before the massive consolidation takes place among the manufacturers. Yet through all of that Microsoft just kept growing and growing. There was a reason that Bill Gates for a long time he was the richest man on earth. He rode the crest of the clone wave.&lt;/p&gt;&#xA;" OwnerUserId="16260" LastEditorUserId="129" LastEditDate="2020-02-12T16:25:50.513" LastActivityDate="2020-02-12T16:25:50.513" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13731" PostTypeId="1" AcceptedAnswerId="13732" CreationDate="2020-02-12T15:43:16.467" Score="4" ViewCount="219" Body="&lt;p&gt;I'm looking over the documents for YMODEM found &lt;a href=&quot;http://textfiles.com/programming/ymodem.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scroll down to page 8, the section on 1-k blocks. Note that the protocol can switch between 1024 and 128 bytes by sending an &lt;code&gt;STX&lt;/code&gt; or &lt;code&gt;SOH&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now scroll to page 12, the section on CRC. Note that it is also switching packet sizes, but in this case it is sending 1024 byte blocks with an &lt;code&gt;SOH&lt;/code&gt; header. The same oddity appears on page 14 in the section on the g-option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this a bug in the documentation? Does anyone have a canonical implementation of YAM to refer to? I suspect that 1024 is a typo which was then copy-n-pasted.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="6659" LastEditDate="2020-02-12T17:14:49.927" LastActivityDate="2020-02-12T17:14:49.927" Title="YMODEM specification problem?" Tags="&lt;bbs&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13732" PostTypeId="2" ParentId="13731" CreationDate="2020-02-12T15:57:22.913" Score="8" Body="&lt;p&gt;I'd say it's a documentation error, but not regarding the block length, as this makes sense, but the use of &lt;code&gt;SOH&lt;/code&gt; vs. &lt;code&gt;STX&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://techheap.packetizer.com/communication/modems/xmodem-ymodem_reference.html&quot; rel=&quot;noreferrer&quot;&gt;This version&lt;/a&gt;, dated about a year later (November? 1986), shows the correct usage. So I guess the error has been detected before.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-12T17:14:03.093" LastActivityDate="2020-02-12T17:14:03.093" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13733" PostTypeId="1" AcceptedAnswerId="13755" CreationDate="2020-02-12T19:51:04.130" Score="4" ViewCount="420" Body="&lt;p&gt;(I ask the question again, one suggested SuperUser, but I was right, it has been closed instantly.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are well-known sectors and modes for CD-ROM medias:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CD-DA: &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;for storing music in a digital form, with 2 channels at 44.1 Khz&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mode 1 Form 1, Mode 2 Form 1:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;for storing data, content that requires error correction&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mode 2 Form 2&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;for storing content were errors are permissible, e.g. video&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But there are also less-known sectors and modes for CD-ROM medias:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mode 0:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;they are filled with zeroes, AFAICT, never seen in a burning software&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mode 1 Form 2:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;indeed they are valid by the standard but why such specialization ?&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mode 2 Formless:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;another special type for which I miss purpose of&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mixed Mode (for Mode 2, applies to tracks):&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the ability to mix Mode 2 sectors in a track, for special content apparently&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Of all the retro hardware that used CD-ROM, I remember AKAI CD-ROMs for SCSI audio samplers being one of these, these weren't directly readable in a PC, only using special software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have any other example of hardware that used non-standard CD-ROM modes and sectors ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I hope the question is correct now, let me know how I could improve it otherwise)&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2020-02-12T19:56:12.297" LastActivityDate="2020-02-14T07:20:17.127" Title="What was the purpose of exotic modes and sectors for CD-ROM?" Tags="&lt;cd-rom&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13734" PostTypeId="1" AcceptedAnswerId="13736" CreationDate="2020-02-12T22:41:30.723" Score="11" ViewCount="602" Body="&lt;p&gt;One way the fast speed of the Cray-1's CPU was achieved was by keeping the wire lengths short. How did the C-shape of the Cray-1 help here? Were the speed-dependent portions on the inside edge where the wire lengths are shortest, and if so what were these speed-dependent portions?&lt;/p&gt;&#xA;" OwnerUserId="15219" LastActivityDate="2020-09-17T21:50:00.410" Title="Shape of Cray-1" Tags="&lt;cray&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13735" PostTypeId="2" ParentId="13734" CreationDate="2020-02-13T00:01:48.877" Score="5" Body="&lt;p&gt;The inside edge of the C contained the Cray's backplane, where the various segments of the machine were electrically connected.  Minimising the length of this would have reduced electrical interference and signal propagation times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Cray-1 also needed a lot of cooling due to the type of electronics used to implement it; the extra space between the segments created by splaying them out provided enough room to insert the piping and heatsinks.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-02-13T00:01:48.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13736" PostTypeId="2" ParentId="13734" CreationDate="2020-02-13T00:08:10.060" Score="8" Body="&lt;p&gt;In part the design was made for show effect. Reduction in wire length had only a minor influence, especially as it's only present in one dimension.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UcXx2.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UcXx2.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Cray 1 at the Deutsches Museum in Munich&#xA;(Image taken from &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/f/f7/Cray-1-deutsches-museum.jpg&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mainframe circuit boards are connected via a hand wired backplane. In theory, arranging them in a circular fashion may save about 20% (*1) in horizontal wire length, but none in vertical (*2). In reality, and since Cray did put the boards horizontal, while not using the inner room for wiring, there were ZERO savings compared to a traditional setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FSBkS.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FSBkS.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Taken from the CHM's &lt;a href=&quot;https://www.computerhistory.org/revolution/supercomputers/10/7/17&quot; rel=&quot;noreferrer&quot;&gt;Cray-1 Logic Column cutaway&lt;/a&gt; page)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even more importantly, in backplane design it's not about making all connections as short as possible, but making them of defined length. Even more importantly, for wire groups where equal length is mandatory (*2). Looking at the above picture, we see that the wires aren't straight. The same can already be seen in its predecessors and successors (all the way to the 960) at CDC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design decision was much influenced by public reaction to a mock-up of the &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_8600&quot; rel=&quot;noreferrer&quot;&gt;CDC 8600&lt;/a&gt; with a quite similar design. In this multiprocessor setup, each CPU was meant to be one wedge-shaped unit allowing easy removal as a whole block before being opened (*3). While the machine was never finished, the positive reaction to the unconventional design might have stuck and transferred to the Cray-1, despite no longer being a CPU cluster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;It could have been built in a straight fashion; rolling it up was a great way to make it stand out - nerds do have aesthetics :)&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Another, much more relevant, effect of this setup is cooling. This was in fact the main reason, even before compactness, why this setup was originally considered for the CDC 8600. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - For a maximum value, the inner diameter as well as the medium can be used - this will give some upper limit. The outer diameter is about 1.45 m, while the inner is ca. 0.75 m. Thus the inner circumference is 2.35 m, while the median is ~3.45. So the upper limit of shortening in horizontal direction is about ~32%. In reality this would come to less than 20% - except it had zero effect on the real Cray :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Maximum speed is only possible if all bits of a word arrive at the same time. The very same can be seen with modern PC mainboards, usually between CPU and RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Design goal for the 8600 was extreme compact miniaturization, moving away from classic mainframe design.  That's one of the reasons why it didn't work out.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-13T15:09:13.867" LastActivityDate="2020-02-13T15:09:13.867" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="13737" PostTypeId="2" ParentId="13686" CreationDate="2020-02-13T04:18:17.950" Score="1" Body="&lt;p&gt;To close the circle on some of the other answers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amongst other features, the Z80 supports &lt;code&gt;CALL&lt;/code&gt; only to absolute addresses. So, either:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(i) you can't use &lt;code&gt;CALL&lt;/code&gt; at all in your hypothetical system (or therefore any internal subroutines); or&#xA;(ii) you can assume a runtime loader modified the target of your &lt;code&gt;CALL&lt;/code&gt;s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, the knee-jerk answer is don't even bother using the stack as others have suggested. Just directly read the argument of a &lt;code&gt;CALL&lt;/code&gt;, assuming your runtime loader is smart enough to modify absolute loads. There's no PC-relative loading so that's likely. If so then:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;programStart:&#xA;    ... lots of program code here ...&#xA;&#xA;    LD HL, (dummycall+1)&#xA;    JR dontreally&#xA;&#xA;dummycall:&#xA;    CALL programStart&#xA;dontreally:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;EDIT: or, as Raffzahn points out, if you're assuming a loader that has fixed your absolute addresses then there's no need for the artificial complexity:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;programStart:&#xA;    LD HL, programStart&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you can't assume that your absolute addresses have been fixed, but can assume a working stack, you can do an artificial &lt;code&gt;CALL&lt;/code&gt; and pop as otherwise suggested.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you've been asked to write code for a Z80 in which you may have been arbitrarily relocated, but your internal addresses haven't been adjusted then:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you can't use &lt;code&gt;CALL&lt;/code&gt;; and&lt;/li&gt;&#xA;&lt;li&gt;can't use any version of &lt;code&gt;LD&lt;/code&gt; except immediate. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So you're in the realm of the vaguely ridiculous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even leaking the PC via &lt;a href=&quot;https://gist.github.com/drhelius/8497817&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;MEMPTR&lt;/code&gt;&lt;/a&gt; requires you to be able to make assumptions about both the memory map (as &lt;code&gt;MEMPTR&lt;/code&gt; leaks via &lt;code&gt;BIT n, (HL)&lt;/code&gt; only, so you'll need to be able to do this with a suitable &lt;code&gt;HL&lt;/code&gt;) and the IO map (as you'll need &lt;code&gt;CPI&lt;/code&gt; and &lt;code&gt;CPD&lt;/code&gt; to get the full contents of the leaked PC given that only bits 3 and 5 leak). So that's out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in net:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;either your linker will patch up your &lt;code&gt;CALL&lt;/code&gt; addresses and the above snippet will work — and other than for academic purposes, it's difficult to imagine a scenario in which that won't be true;&lt;/li&gt;&#xA;&lt;li&gt;or it won't in which case if you know nothing whatsoever about the rest of the memory map then I currently think the task is impossible;&lt;/li&gt;&#xA;&lt;li&gt;but if you at least know two contiguous IO addresses and a single memory address where reading has no consequence, you can use a &lt;code&gt;CPIR&lt;/code&gt;/&lt;code&gt;CPDR&lt;/code&gt; that executes at least twice to load the PC into &lt;code&gt;MEMPTR&lt;/code&gt;, then use &lt;code&gt;BIT n, (HL)&lt;/code&gt;, &lt;code&gt;CPI&lt;/code&gt; and &lt;code&gt;CPD&lt;/code&gt; very slowly to inspect it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-02-13T14:58:18.090" LastActivityDate="2020-02-13T14:58:18.090" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13738" PostTypeId="2" ParentId="13449" CreationDate="2020-02-13T08:10:05.637" Score="2" Body="&lt;p&gt;Figured it out. I consulted the now-expired patent (US4601018) on the RAMWorks, which indicates that the card has the bank select register at not only C073, but C071, C075, and C077 as well. Changing my card to respond to these four addresses solved the problem with ProTERM, and the AE stuff still works as well. So evidently some applications are using these other addresses.&lt;/p&gt;&#xA;" OwnerUserId="7486" LastActivityDate="2020-02-13T08:10:05.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13739" PostTypeId="2" ParentId="5327" CreationDate="2020-02-13T08:24:28.500" Score="1" Body="&lt;p&gt;DOS 2.x had the SWITCHAR statement in CONFIG.SYS which let you use a different character rather than / for options. Setting:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SWITCHAR=-&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would allow you to type:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DIR -P&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Rather than DIR /P - sort of Unix-very-light.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More detail is available at &lt;a href=&quot;https://vicerveza.homeunix.net/~viric/oldcomps/files/DOS-undoc.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://vicerveza.homeunix.net/~viric/oldcomps/files/DOS-undoc.txt&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3328" LastActivityDate="2020-02-13T08:24:28.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13740" PostTypeId="1" AcceptedAnswerId="13741" CreationDate="2020-02-13T12:58:35.020" Score="7" ViewCount="1449" Body="&lt;p&gt;I'm aware that 40-pins was a high-water mark for dual-inline package chips for a significant time; many CPUs of the early 1980s (8086, Z80, 6800, 6502, etc) used 40-pin packages, but no larger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise, general purpose I/O chips were frequently in 40-pin packages. Examples I can think of off-hand include Intel's &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8255&quot; rel=&quot;noreferrer&quot;&gt;8255&lt;/a&gt;, the MOS &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6522&quot; rel=&quot;noreferrer&quot;&gt;6522&lt;/a&gt;, and National Instruments' INS8154. The drive to offer as many pins of I/O as possible on your chip seems perfectly reasonable, given that your competitor would also be doing so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A number of variants of the 6502 were manufactured in smaller (28-pin) packages with reduced address bus width and/or other changes. This suited the use of 650x chips in embedded devices, where a smaller chip could be more convenient. But I'm not aware of any general-purpose I/O chips that were made available in a reduced package; to my knowledge you'd still have to use a big 40-pin I/O chip alongside your little 28-pin processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were there any general purpose I/O chips manufactured in a smaller DIP package than 40-pin?&lt;/p&gt;&#xA;" OwnerUserId="10566" LastEditorUserId="10566" LastEditDate="2020-02-13T15:01:04.707" LastActivityDate="2020-02-13T18:26:39.063" Title="Did general purpose I/O controller chips come with fewer than 40 pins?" Tags="&lt;chip&gt;&lt;io&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13741" PostTypeId="2" ParentId="13740" CreationDate="2020-02-13T13:30:21.980" Score="13" Body="&lt;p&gt;I nominate the AY-3-8912, which is a sound generator that also has eight programmable input/output pins — set them as input or output, set or get their level — in a 28-pin package. It sits between the 8910 (16 IO lines, 40-pin package) and the 8913 (no IO, just the audio, 24-pin package).&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-02-13T15:38:32.103" LastActivityDate="2020-02-13T15:38:32.103" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13742" PostTypeId="2" ParentId="13740" CreationDate="2020-02-13T14:37:51.330" Score="10" Body="&lt;p&gt;Of course. After all, the number of pins is related to the task at hand. No manufacturer would choose a package with more pins than necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples of main families are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Excluding support chips, like priority encoder, status decoder or bus drivers)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Motorola 6800 family&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MC6840 - PTM - Programmable Timer (28 pin)&lt;/li&gt;&#xA;&lt;li&gt;MC6850 - ACIA - Asynchronous Communication Interface Adapter (24 pin)&lt;/li&gt;&#xA;&lt;li&gt;MC6852 - SSDA - Synchronous Serial Data Adapter (24 pin)&lt;/li&gt;&#xA;&lt;li&gt;MC6854 - ADLC - Advanced Data Link Controller (28 pin)&lt;/li&gt;&#xA;&lt;li&gt;MC6859 - DSD  - Data Security Device (&lt;a href=&quot;https://en.wikipedia.org/wiki/Data_Encryption_Standard&quot; rel=&quot;noreferrer&quot;&gt;DES&lt;/a&gt; en-/decoder) (24 pin)&lt;/li&gt;&#xA;&lt;li&gt;MC6860 - 0-600 bit/s Digital Modem (24 pin)&lt;/li&gt;&#xA;&lt;li&gt;MC6862 - 2400 bit/s Modulator (24 pin)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Intel MCS-80 family&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8212 - 8 bit I/O port (24 pin)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8251&quot; rel=&quot;noreferrer&quot;&gt;8251&lt;/a&gt; - UART - Programmable Communication Interface (28 Pin)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8253&quot; rel=&quot;noreferrer&quot;&gt;8253/54&lt;/a&gt; - PIT - Programmable Interval Timer (24 Pin)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8259&quot; rel=&quot;noreferrer&quot;&gt;8259&lt;/a&gt; - PIC - Programmable Interrupt Controller (28 Pin)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;MOS 6500 family&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;6551 - ACIA - Asynchronous Communications Interface Adapter (28 pin)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Only chips that need to handle/produce many signals, like DMA, or FDC, had multiple functions, like (R)RIOT, or those that were all about offering as many as possible (parallel) ports, were given 40-pin chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition it's important to remember that simple ports can be (and usually have been) done using basic TTL chips. After all, being TTL compatible is a main feature of early microprocessors. They come with the least amount of pins and lowest cost at the same time. For example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A 74173 gives a 4 bit buffered input in DIP16&lt;/li&gt;&#xA;&lt;li&gt;A 74241 does two 4 bit input ports in DIP20&lt;/li&gt;&#xA;&lt;li&gt;A 74374 offers 8 bit input with buffering/edge triggered in DIP20&lt;/li&gt;&#xA;&lt;li&gt;A 74273 makes an 8 bit output port in DIP20&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of them in 300 mil package, saving quite a lot on space. For a system designer it doesn't make much sense to use an more expensive higher integrated chip to get a functionality that can be achieved with standard logic as easily. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom Line: &lt;strong&gt;It's all about function and complexity&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2020-02-13T18:26:39.063" LastActivityDate="2020-02-13T18:26:39.063" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13743" PostTypeId="1" AcceptedAnswerId="13745" CreationDate="2020-02-13T14:38:12.180" Score="2" ViewCount="213" Body="&lt;p&gt;Looking over the Apple II expansion card pinout, it seems it's largely just the pins of the 6502 plus some +12V supplies and such.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, though, is there any reason any other 6502 machine, like the PET or Atari, couldn't have supported them?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect the memory mapped I/o would present a problem if it overlapped with other items in the machine's own libraries, but that seems like something that could be corrected in the driver ROM, which one would expect would be different anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I missing anything special about the hardware that might make Apple II cards difficult to use on other platforms? For instance, did the motherboard have specific interfacing hardware like latching or such that would have to be implemented to make it work? Or it is, as it appears, just a bunch of pins and a driver?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-02-13T17:19:35.523" Title="Could Apple II cards be used on any 6502 platform?" Tags="&lt;apple-ii&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13744" PostTypeId="2" ParentId="13743" CreationDate="2020-02-13T16:28:42.937" Score="1" Body="&lt;p&gt;I believe the major factors, besides just the electrical characteristics of the bus, are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Standardization of access to each slot, such that each is guaranteed certain resources that cannot conflict with other slots/cards. This is something the Apple ][ provided, and 6502 systems without slots didn't.&lt;/li&gt;&#xA;&lt;li&gt;Built-in and aftermarket software support that is platform specific.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Obviously, any expansion system is a combination of hardware and software. And there is a lot of specific work for device drivers for each card that is highly platform dependent. Just doing the relatively simple adaption for the electrical characteristics of the card is not going to be sufficient for it to work in a new platform, like the C64.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-02-13T16:38:01.377" LastActivityDate="2020-02-13T16:38:01.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13745" PostTypeId="2" ParentId="13743" CreationDate="2020-02-13T17:19:35.523" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Looking over the Apple II expansion card pinout, it seems it's largely just the pins of the 6502 plus some +12V supplies and such.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, and no. The unique point about the Apple II bus is that basic address decoding is done externally to the card. This saves quite some circuitry. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Generally speaking, though, is there any reason any other 6502 machine, like the PET or Atari, couldn't have supported them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. it would need some glue logic for address decoding.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I suspect the memory mapped I/o would present a problem if it overlapped with other items in the machine's own libraries,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In fact, Woz' strategy to put decoding external removes the hardware side of that issue, as the needed external decoder logic would have to be made to cover this.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but that seems like something that could be corrected in the driver ROM, which one would expect would be different anyway.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure, driver/ROM code has to be replaced. Not just because of the address issues, but also for integration in the new environment. Each machine's BIOS and OS has it's own ways of integration for drivers, so usually it might best to drop ROM support and go with loadable drivers.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Am I missing anything special about the hardware that might make Apple II cards difficult to use on other platforms?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It may only go tricky when a card going for real deep integrated function like taking over the bus like with a CPU card. Or for example cards snooping the bus to capture things like screen data or certain system setup (softswitches). But then again, adapting such special cards between systems are always tricky. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For instance, did the motherboard have specific interfacing hardware like latching or such that would have to be implemented to make it work? Or it is, as it appears, just a bunch of pins and a driver?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a bunch of pins and drivers - plus address decoding. Apple II cards expect&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A 16 byte address window accessed with &lt;code&gt;/DEVICE-SELECT&lt;/code&gt; and A0..A3, used for I/O registers.&lt;/li&gt;&#xA;&lt;li&gt;A 256 byte address window accessed  with &lt;code&gt;/IO-SELECT&lt;/code&gt; and A0..A7, usually holding the promary driver and all entry points. Some cards use it as well for RAM or registers. This is usually called 'PROM' space.&lt;/li&gt;&#xA;&lt;li&gt;A 2048 byte address window accessed with &lt;code&gt;/IO-STROBE&lt;/code&gt; and A0..A10, usually this holds the main driver ROM. But it has as well be used for RAM windows.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;While the first two are reserved for each card at fixed addresses, the last one is shared between cards. The protocol is rather simple and all hardware needed is on the card and handled by drivers (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So after adding address decoding, according to whatever system you have, a good number of Apple cards should work right away - sans driver that is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next level would be to check if RDY handling for DMA is possible. On the Apple II pulling RDY from the card during PHI1 will put the CPU on hold (like with any 6502 system) but as well decouple it from the bus, allowing the Card to put out a memory address of it's own. Ofc, this will be hard to archive on machines that are unable free up the bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything after that will be rather extreme Apple II specific and more about the inner workings of the II series, not really worth to be supported.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 -  All cards have to disable their ROM as soon as an access to the top address in ROM space is detected. That's &lt;code&gt;/IO-STROBE&lt;/code&gt; plus A0..A10 all high ($CFFF when decoded like in an Apple II). Some cards only decode that partitialy, ignoring the lower value addresses. That's fine, as long as the top most address is included.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware wise ROM enable/disable is usually done (on card) by a simple flipflop. &lt;code&gt;/IO-SELECT&lt;/code&gt; is simple wired up to set it, while &lt;code&gt;/IO-STROBE&lt;/code&gt; + A3..A10 will reset it. As a result, every time code is executed within PROM space the ROM is paged in. Now a single BIT (or alike) instruction is all that's needed to disable all, as the next instruction will again enable the own ROM. I always liked the elegance. No lengthy loading of values and port handling to swap between ROMS. Instant and automatic.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-02-13T17:19:35.523" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13746" PostTypeId="2" ParentId="13611" CreationDate="2020-02-13T17:57:05.933" Score="7" Body="&lt;p&gt;I was at HP when the Alpha cancellation decision was made.  In fact I was part of a team that ran comparative HPC benchmarks on Alpha and x86.  The fact was that by 1999 the x86 Pentium-II was matching the Alpha in floating point performance.  This was reported by objective groups, e.g. Dongarra et al.  Unfortunately the Alpha ecosystem was 10x more expensive than the x86 ecosystem.  So there was really no choice.&lt;/p&gt;&#xA;" OwnerUserId="16268" LastActivityDate="2020-02-13T17:57:05.933" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13747" PostTypeId="1" AcceptedAnswerId="13748" CreationDate="2020-02-13T18:47:19.590" Score="32" ViewCount="9484" Body="&lt;p&gt;I was wondering the other day, would it be possible to listen to a midi on a C64 while writing a program or something. I mean it did have a sound chip that would technically just get some new buffers every few seconds, although I imagine the lack of multithreading would make it difficult, but games have found a way, right?&lt;br&gt;&#xA;So was there a way to load music on an old PC (70s-90s) and when was it possible for the first time? Also what would it be like?&lt;/p&gt;&#xA;" OwnerUserId="15934" LastEditorUserId="15934" LastEditDate="2020-02-13T21:05:05.967" LastActivityDate="2021-02-04T06:19:01.573" Title="Was it possible to listen to music and work on old PCs? When was it possible to for the first time?" Tags="&lt;audio&gt;&lt;multitasking&gt;" AnswerCount="19" CommentCount="13" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13748" PostTypeId="2" ParentId="13747" CreationDate="2020-02-13T19:44:54.297" Score="31" Body="&lt;p&gt;In theory that would have been possible from the very start. After all, music doesn't need much bandwidth (*1), especially when using synthesized form like with a sound chip such as the SID.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In reality the software structure of (most) machines in the 70s and 80s would not support this. They were single program, single tasking machines and the OS was not running in parallel in the background, but rather a toolbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any solution to have two tasks running in parallel would have required specific software to do so, programmed in a way not to disturb each other. Quite rare at the time, when every program was made as if it owns the machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;While the hardware was capable, common software wasn't.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, having said that, one of the very first &lt;em&gt;dedicated&lt;/em&gt; home computers, the TI 99/4, could have pulled it off. Despite the bad rep the system had, it was one of the finest available - clearly showing an effort, by engineers coming from a mini computer world,  to create an integrated environment. Its system software had a function that could play sound/music sequences in the background without interfering with foreground applications. It could also loop it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, as &lt;a href=&quot;/users/8195&quot;&gt;Peter Parker&lt;/a&gt; reminds us, the TI had the unique feature of being able to mix an external audio signal with its output (*2). So a setup using an external source, like a tape, was possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer may be rather &lt;strong&gt;'yes, but'&lt;/strong&gt;, as this would, while being transparent, still had required a bit of cooperation of the foreground application to enable and setup the music to be played.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Bandwidth needed for high quality uncompressed is ca. 50 KiB/s (*3), for synthesizer (sound chip) based music less than 1 KiB/s. Bandwidth of typical 1970s Microprocessor systems 300-1,000 KiB (C64 a bit less than 1,000 KiB/s). Early PC (8088) ca. 1,200 KiB/s. AT class (mid 80s) started already above 3,000 KiB/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - In fact, it did not only allow addition of sound, but was prepared for video as well. As said, it was a quite nice design, way ahead of its time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - It has been criticized that this is way less than the 172 KiB/s a CD uses. True. But that's &lt;em&gt;one&lt;/em&gt; definition (also one that resulted from video recording features). Audio sources of the time would be FM-Radio at 15 kHz or compact cassette at 12 kHz (even the best Nakamichi decks with 1.2µ heads couldn't make it past 20 kHz - damn physics :)). So a sampling rate of 24 up to 40 kHz would cover everything at the time, with 24 kHz already passing as HiFi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is about (home) computers from the 1970s onwards, so assuming a 16 bit D/A converter seams a bit frivolous. Similarly for stereo. Equally important, the audio signal was usually transmitted as part of video to be played by the TV set. Analogue TV limits Audio to 25 kHz in most places of the world - and was, at the time, usually mono.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, 50 KiB/s is a good assumption, rather at the upper end.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-14T19:28:31.950" LastActivityDate="2020-02-14T19:28:31.950" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="13749" PostTypeId="2" ParentId="13747" CreationDate="2020-02-13T20:25:47.293" Score="15" Body="&lt;p&gt;The topic mentions PCs but as you mention C64s specifically in the text, I can note that on the C64 it was not uncommon for utility software to have built in music (especially in the tools centered around the needs of the demo scene).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, that is not the same as a general purpose music player.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Music was generally not really made using MIDI or audio buffers in any modern sense, it was software directly manipulating the parameters of the on-board synthesizer chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's trivial on the C64 to drive the music from a raster interrupt, as long as nobody else is stepping on the memory or interrupt control. That means that you can perfectly well load some SID music to the $C000 RAM area (beyond BASIC space) and have that play merrily whilst programming in BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As there is no coordination of such resources, in practice a general purpose solution did not exist. As Raffzahn notes, every program was made as if it owns the machine.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastActivityDate="2020-02-13T20:25:47.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13750" PostTypeId="2" ParentId="13723" CreationDate="2020-02-13T20:39:23.493" Score="6" Body="&lt;p&gt;The key to making problems like the Two Generals Problem solvable is to categorize some failure modes as annoying but tolerable.  For example, a variation analogous to a mutex would have a goal of attacking the enemy with &lt;em&gt;only one&lt;/em&gt; general's army, and regard the possibility of both generals' armies attacking at once as &lt;em&gt;unacceptable&lt;/em&gt; (e.g. because they'd be clobbered by each others' artillery).  Having both generals hold off on attacking the enemy would be undesirable, but better than having both attack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Under that scenario, generals Bob and Joe would have three states between them: Bob expects that Joe might attack, and Joe knows he will; Joe expects that Bob might attack, and Bob knows he will; or Bob and Joe each expect that the other might attack, but neither is actually planning to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If any general who wants to attack and doesn't yet know that he's clear to do so will send messages until a go-ahead is received, the only reasons the generals would remain in the third state would be if either neither wants to attack (in which case being in that state is fine), or attempts at communication continuously fail (Bob and Joe could coordinate so that an attack will be possible if 1.5 round trips are completed while at least one of them wants to attack).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the original Two Generals Problem only has two outcomes: successful, and intolerable.  Here, classifying the third outcome (neither general attacks) as annoying but tolerable shifts the problem from being unsolvable to being easily tractible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applying that to a mutex, if two entities each think the other might alter a resource without further coordination, and will thus hold off on any attempt to alter it themselves unless they are cleared to do so, one may end up in situations where neither party will be able to alter a resource in the absence of a working communications link, but it would nonetheless be possible to guarantee that nobody would alter a resource when the other party wasn't aware of that possibility.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2020-02-13T22:07:21.093" LastActivityDate="2020-02-13T22:07:21.093" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13751" PostTypeId="2" ParentId="13734" CreationDate="2020-02-13T20:44:50.070" Score="2" Body="&lt;p&gt;A very large portion of the Cray 1's logic was designed for exactly 6 logic gates and 4.5 feet of wire between registers.  That was more easily done by shortening all the wire paths to be on the inside of the cylindrical arrangement.  The greater outer circumference allowed more room for the power bars and thermal management necessary to supply and remove 0.15 megawatts of power.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2020-02-13T20:44:50.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13752" PostTypeId="2" ParentId="13747" CreationDate="2020-02-13T20:55:02.803" Score="6" Body="&lt;p&gt;At an 8 kHz sample rate, an Apple II would only hold about 5 or so seconds of raw uncompressed audio (plus the code needed to play them, either via add-on DAC board or 1-bit PWM).  Compressed audio would need maybe at least a few orders of magnitude more compute performance than the very roughly 0.2 integer &quot;MIPs&quot; offered by a 6502 to decompress audio in real-time (which usually requires MACs, integer multiplies, or even a few MFLOPs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, no.  Not without external hardware (DSP chip, banked memory expansion, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Powermacs (PPC 601, et.al.) made it reasonably possible (running AIX?).  Not sure about the 68040 Mac with the DSP chip.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2020-02-13T21:00:19.900" LastActivityDate="2020-02-13T21:00:19.900" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13753" PostTypeId="1" AcceptedAnswerId="13756" CreationDate="2020-02-13T20:56:03.920" Score="2" ViewCount="127" Body="&lt;p&gt;The Color BASIC/Extended Color BASIC “Getting Started” manuals say that to find out if a joystick button is pressed, to &lt;code&gt;PEEK&lt;/code&gt; in location 65280. The value 255 means neither button is pressed; the values 126 or 254 correspond to the right joystick’s button; and 125 or 253 to the left joystick’s button.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While looking at the button values, I noticed that when both buttons are pressed, I see 252 in 65280. This made me think that perhaps each button press is changing a single bit in the binary value at 65280:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;126  01111110 (right button)&#xA;254  11111110 (right button)&#xA;125  01111101 (left button)&#xA;253  11111101 (left button)&#xA;252  11111100 (both buttons)&#xA;255  11111111 (no button)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It appears that the right button is indicated by a zero in position 1, and the left button by a zero in position 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this correct? Is it (as) reliable to check those bits as to check for the numbers, so that I might use, say, the following code to know whether the joystick buttons are pressed?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;5 CLS&#xA;10 BU = PEEK(65280)&#xA;20 PRINT@0,&quot;RIGHT BUTTON &quot;;&#xA;30 IF (1 AND NOT BU)=1 THEN PRINT &quot;ON&quot; ELSE PRINT &quot;OFF&quot;&#xA;40 PRINT@32,&quot;LEFT BUTTON &quot;;&#xA;50 IF (2 AND NOT BU)=2 THEN PRINT &quot;ON&quot; ELSE PRINT &quot;OFF&quot;&#xA;60 GOTO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Obviously, a lot more numbers than just 125, 126, 253, and 254 (and presumably 124 or 252 for both buttons at the same time) will match those conditions. Is it correct to assume that it is the bit that matters and not the full number when checking the joystick buttons?&lt;/p&gt;&#xA;" OwnerUserId="12313" LastEditorUserId="12313" LastEditDate="2020-02-13T22:03:13.580" LastActivityDate="2020-02-13T22:25:30.273" Title="For TRS-80 Color Computer joystick buttons, is it correct to check the first or second bit of the value at PEEK(65280)?" Tags="&lt;color-computer&gt;&lt;joystick&gt;&lt;color-basic&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13754" PostTypeId="2" ParentId="12270" CreationDate="2020-02-13T21:06:33.630" Score="7" Body="&lt;p&gt;bad news, the connector is simply a data port for the &quot;PC-8031-2W&quot; external disk drive unit. all of the 'smarts' are in this external box. this 36 pin connector is literally just 3 8-bit data lanes and ground. &lt;/p&gt;&#xA;" OwnerUserId="16272" LastActivityDate="2020-02-13T21:06:33.630" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13755" PostTypeId="2" ParentId="13733" CreationDate="2020-02-13T22:21:48.143" Score="5" Body="&lt;p&gt;Try to approach the classification differently:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The CD-DA standard defined an audio sector of 2352 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) The CD-ROM standard took 16 bytes from this sector for a 4 byte &lt;strong&gt;header&lt;/strong&gt; and 12 sync bytes. The header allowed random access to this sector (which didn't work precisely enough for audio sectors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1 byte of the header was for the mode. &lt;strong&gt;Mode 0&lt;/strong&gt; identified a sector with no data (for a printed medium), &lt;strong&gt;Mode 1&lt;/strong&gt; 2048 bytes of data with error correction (additional to the audio sector error correction), and &lt;strong&gt;Mode 2&lt;/strong&gt; 2336 bytes of data without additional error correction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So Mode 1 could be used for harddisk-like blocks with a size of a power of 2 and solid error correction (for audio, occasional errors were ok, for data, they were not). Mode 2 was a &quot;do whatever you like&quot; approach, but had the header for precise addressing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) The CD-ROM/XA standard refined the CD-ROM standard mode 2 by adding a &lt;strong&gt;subheader&lt;/strong&gt; of 8 bytes (defining the form and type of data in this block). &lt;strong&gt;Form 1&lt;/strong&gt; has 2048 bytes of pure data just like mode 1 above, but now with 8 bytes less for the error correction (and thus a different error correction). So it's similar to Mode 1. &lt;strong&gt;Form 2&lt;/strong&gt; has no additional error correction, so it's similar to Mode 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of this format was that different types of data could be interleaved on the same track. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to answer your questions:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Mode 0: they are filled with zeroes, AFAICT, never seen in a burning software&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Doesn't make sense when you burn CDs, only used for printed (mass-manufactured) CDs. Remember, being able to burn a CD was only possible a lot after the CD-ROM standard was published.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Mode 1 Form 2: indeed they are valid by the standard &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, it's not valid by the standard: Mode 1 needs to have a specific type of error correction with a specific layout, and the subheader doesn't fit in.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Mode 2 Formless:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It just means &quot;the 2336 bytes of mode 2 are not subdivided according to CD-ROM/XA&quot;. So you have 2336 you can use for whatever you want. Certainly makes sense, though I don't know if there was ever any widespread product that used them for something else, e.g. video.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Mixed Mode (for Mode 2, applies to tracks):&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mixed mode is not restricted to Mode 2. It just means you can have tracks of different type even without CD-ROM/XA. But having e.g. video and audio on different tracks means you can't stream them at the same time, which is what CD-ROM/XA was good for.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-02-14T07:20:17.127" LastActivityDate="2020-02-14T07:20:17.127" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13756" PostTypeId="2" ParentId="13753" CreationDate="2020-02-13T22:25:30.273" Score="4" Body="&lt;p&gt;Address 65280 (Hex &amp;amp;FF00) is the I/O port on the CoCo for the joystick and the keyboard row input. It is the case that the lower 2 bits are assigned to the left and right joystick buttons. Bit 7 is associated with the joystick direction, which is why it can be either 0 OR 1 while a button is pressed. So, your proposed approach is correct.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-02-13T22:25:30.273" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13757" PostTypeId="2" ParentId="13747" CreationDate="2020-02-14T05:04:01.847" Score="24" Body="&lt;p&gt;On the generic early-nineties x86 systems I'm familiar with at least, redbook CD audio playback on IDE CD-ROM drives is asynchronous and autonomous. The drive would connect to the sound card through a four-pin stereo audio connector to provide CD audio as another audio source to the mixer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use a CD music player program to control track selection and playback directly, but you could also just press Play on the CD-ROM drive itself and it would play music through the sound card without any intervention from the PC, allowing you to listen to music while using &lt;code&gt;EDIT&lt;/code&gt; or other software.&lt;/p&gt;&#xA;" OwnerUserId="16275" LastActivityDate="2020-02-14T05:04:01.847" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13758" PostTypeId="2" ParentId="13747" CreationDate="2020-02-14T10:11:27.670" Score="13" Body="&lt;p&gt;The Amiga was the first system where I pulled this off:&#xA;It was not streaming music, but listening to so called &quot;MOD&quot;s, small data chunks of samples and instructions how to play them. There is still an alive(?) scene for this. These Mods could be played in the background on Amigas Multitasking OS, while you were doing something else. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&#xA;If you just want to listen to &quot;real&quot; music with lyrics the Amiga could pulled off this as well, but uncompressed 8-bit samples taking up the whole disk/memory(for one song), so you could not work in parallel. However sometimes I played this disk and imagined I would be soon proud owner of a digital music library:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=_UnVy9w0xKk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=_UnVy9w0xKk&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later PCs with Win95 support could be playing music as well, however for MP3 encoding you would need some (&gt;100 MHz) pentium class CPU (if you want to work in parallel), while playing WAVs was (still )forbidingly expensive on HD-Memory (1995 a common HD was 1-2GB in size..)&lt;/p&gt;&#xA;" OwnerUserId="8195" LastEditorUserId="8195" LastEditDate="2020-02-18T09:13:22.937" LastActivityDate="2020-02-18T09:13:22.937" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13760" PostTypeId="2" ParentId="13747" CreationDate="2020-02-14T13:37:34.327" Score="2" Body="&lt;p&gt;Was definitely possible on an Apple IIGS (and I expect Amigas and other 16 bit systems of the same vintage) to play music (think midi synthesized, not sampled at CD quality for any length of time) and write documents &lt;/p&gt;&#xA;" OwnerUserId="11797" LastActivityDate="2020-02-14T13:37:34.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13761" PostTypeId="2" ParentId="13747" CreationDate="2020-02-14T14:35:05.723" Score="6" Body="&lt;p&gt;I wrote a music player on my 1983 Oric Atmos, and some other people already did that before me.&lt;/p&gt;&#xA;&lt;p&gt;The Oric uses a AY-8912 soundchip. You can send orders to play waveforms with or without varying envelopes. The order is just a write into a register. Can be done from within an interrupt and the sound is issued. It doesn't take a lot of CPU.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, a few programs tried to do speech synthesis, and in that case, that meant feeding the sound chip with data all the time (since the Oric didn't have sound DMA), hogging the CPU: not possible to do something at the same time.&lt;/p&gt;&#xA;&lt;p&gt;The Amiga has DMA &amp;amp; a dedicated chip to play samples from memory without CPU intervention. The same principle can be applied to a higher level. Playing music doesn't cost a lot (unless if you had to perform real-time mix to overcome the 4 channel limitation)&lt;/p&gt;&#xA;&lt;p&gt;On any computer with a beeper or any device, even rudimentary/monophonic (like yesteryear &lt;a href=&quot;https://en.wikipedia.org/wiki/PC_speaker&quot; rel=&quot;noreferrer&quot;&gt;IBM PC compatibles beepers&lt;/a&gt;), and a timer you could set up a routine that plays sounds by sending sound orders to play notes, &lt;em&gt;as long as the device supports taking a &amp;quot;play a note&amp;quot; order&lt;/em&gt;. This doesn't cost a lot of CPU (and the result isn't specially beautiful either but who am I to judge ?) and you can perform other tasks at the same time. But was considered a hack before modern multitasking home systems existed.&lt;/p&gt;&#xA;&lt;p&gt;However quoting wikipedia:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The PC speaker was often used in very innovative ways to create the impression of polyphonic music or sound effects within computer games of its era, such as the LucasArts series of adventure games from the mid-1990s, using swift arpeggios. Several games such as Space Hulk and Pinball Fantasies were noted for their elaborate sound effects; Space Hulk, in particular, even had full speech.&lt;/p&gt;&#xA;&lt;p&gt;However, because the method used to reproduce PCM was very sensitive to timing issues, these effects either caused noticeable sluggishness on slower PCs, or sometimes failed completely on faster PCs&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So remaining simple was the key or it was the only thing the machine would do.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-14T14:35:05.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13762" PostTypeId="2" ParentId="13723" CreationDate="2020-02-14T15:02:09.577" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;it can't be done.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Really?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two generals problem applies to any two way communication channel that does not have perfect reliability. So that means, if you phone your friend to arrange to go out for a beer, the two generals problem applies. How can you be sure that your communication exchange has worked? The reason is because when you say on the telephone &quot;meet you at 8&quot;, you will get some sort of response pretty much straight away. But, if you don't what do you do? You repeat the message until either you do get a response or you give up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple three way acknowledgement sequence is enough to establish that both parties got the message. If Alice sends the message to Bob, Bob sends an ack back to Alice and then Alice sends an ack of the ack to Bob, then both parties know that Bob got the message and both parties know that both parties know Bob got the message. Of course, Alice doesn't know that Bob knows that both parties know that Bob got the message. But if Bob is expecting an ack but doesn't get one within a certain expected time frame, he can resend his original ack. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the possibility of resending messages and acks, you can't prove that the message has been received with mathematical rigour, but you can be reasonably confident to any desired level of probability. If you send a message with a 1% probability of failure, sending it twice has a 0.01% chance that neither message will get through, three times has a 0.0001% chance and so on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two generals problem is flawed in that we routinely accept things that are not completely certain. It's a mathematical problem, not a pragmatic one.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2020-02-14T15:02:09.577" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13763" PostTypeId="1" AcceptedAnswerId="13765" CreationDate="2020-02-14T18:24:27.030" Score="19" ViewCount="2803" Body="&lt;p&gt;Long ago in a galaxy far far away, back in the early 90's, I worked for a crappy clone company as a phone technician.  At the time, 386SX/25's were common for in-house technical support / customer service computers.  Obviously our jobs did not require sound cards, or fancy hardware of any kind, but as technically savvy users, we spent a lot of time trying to sneak a good video card or more memory into our systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13747/was-it-possible-to-listen-to-music-and-work-on-old-pcs-when-was-it-possible-to&quot;&gt;Was it possible to listen to music and work on old PCs&lt;/a&gt; got me to thinking about how we frequently solved the problem of not having a sound card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I remember it, there was some sort of driver we used to install that would play audio on the PC speaker.  It was tinny and scratchy, but I remember it most definitely worked.  What I can't remember is what the driver was called, or if it was a DOS thing or a Windows 3.x thing.  It certainly worked well enough that Windows sounds were easily distinguishable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any details for the audio driver I am referring to?  I suspect there may be more than one, as it isn't a unique idea.  I would be interested to know the name, how it was installed, if it supported DOS and/or Windows, and any other history that might be available.  &lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2020-02-15T23:02:33.470" Title="Sound driver for DOS or Windows 3.x that used the PC speaker?" Tags="&lt;ms-dos&gt;&lt;windows-3.x&gt;&lt;audio&gt;&lt;driver&gt;&lt;speaker&gt;" AnswerCount="6" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13765" PostTypeId="2" ParentId="13763" CreationDate="2020-02-14T19:21:24.073" Score="23" Body="&lt;p&gt;It was a DOS-Windows 3.x and DOS-Windows 9x/ME thing.  It was a driver named &lt;code&gt;speaker.drv&lt;/code&gt;, written by Microsoft.  It turned off interrupts for significant periods of time, which caused I/O problems with other devices but which was inherent in the nature of the hardware.  It came in a self-extracting archive named &lt;code&gt;speak.exe&lt;/code&gt;, and could be found on the companion discs for books, &lt;a href=&quot;https://groups.google.com/d/msg/comp.os.ms-windows.misc/G5WcnnLDZTU/d_3K3HSlpY0J&quot; rel=&quot;noreferrer&quot;&gt;in the extra utilities discs from OEMs&lt;/a&gt;, &lt;a href=&quot;https://groups.google.com/d/msg/comp.os.ms-windows.misc/G5WcnnLDZTU/qNvL_6TVCc4J&quot; rel=&quot;noreferrer&quot;&gt;on Microsoft's FTP site&lt;/a&gt;, and on BBSes.  (Seeing &lt;a href=&quot;https://groups.google.com/d/msg/comp.os.ms-windows.misc/G5WcnnLDZTU/MH3efG54gPEJ&quot; rel=&quot;noreferrer&quot;&gt;someone give someone else the number of the BBS to dial&lt;/a&gt; brings back memories &amp;hellip; of FREQs. &amp;#9786;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course it didn't work with Windows NT, it being a driver for the DOS-Windows platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OS/2 similarly had a third-party &lt;code&gt;SPKRDD.SYS&lt;/code&gt;, for MMPM/2, that was widely circulated.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Further reading&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20070203101601/http://support.microsoft.com/kb/138857&quot; rel=&quot;noreferrer&quot;&gt;https://web.archive.org/web/20070203101601/http://support.microsoft.com/kb/138857&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Thorsten Petrowski, Axel Stolz (1992).  &lt;em&gt;Wicked Sounds for Windows&lt;/em&gt;.  Abacus. ISBN 9781557551689.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://annex.retroarchive.org/cdrom/smsw-vol4/OS2APPS/index.html&quot; rel=&quot;noreferrer&quot;&gt;http://annex.retroarchive.org/cdrom/smsw-vol4/OS2APPS/index.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/details/So_Much_for_Windows_and_OS2_Power_User_Software_1994&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/So_Much_for_Windows_and_OS2_Power_User_Software_1994&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1932" LastActivityDate="2020-02-14T19:21:24.073" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13767" PostTypeId="2" ParentId="5587" CreationDate="2020-02-14T21:35:09.543" Score="10" Body="&lt;p&gt;Definitely a 4130, I spent five years of my life maintaining these as well as coding in machine code. A 24 bit machine with a built in floating point unit and no chips only transistors running on a 10v supply. Happy days?!&lt;/p&gt;&#xA;" OwnerUserId="16285" LastActivityDate="2020-02-14T21:35:09.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13768" PostTypeId="1" CreationDate="2020-02-14T22:45:04.453" Score="3" ViewCount="294" Body="&lt;p&gt;I remember reading somewhere (maybe on Hacker News or Lobsters) that Motorola made a microprocessor some decades ago with two sets of registers. This means when handling an interrupt, it does not need to do the saving/loading. Does anybody know the name of the microprocessor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Googling wasn't helpful: it just returns pages after pages of result about Motorola 6800(0), which doesn't seem to have two sets of registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bonus points for explaining why this design didn't go popular. I mean, it sounds like a good idea.&lt;/p&gt;&#xA;" OwnerUserId="16286" LastActivityDate="2020-02-15T10:20:44.970" Title="What's the Motorola microprocessor with two sets of registers to avoid costly context switch?" Tags="&lt;hardware&gt;&lt;cpu&gt;&lt;identify-this-computer&gt;&lt;interrupt&gt;&lt;microprocessor&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13769" PostTypeId="2" ParentId="13768" CreationDate="2020-02-14T23:02:09.153" Score="6" Body="&lt;p&gt;Sure this is about Motorola? Could it be have been about a similar sounding manufacturer, like &lt;strong&gt;Mostek&lt;/strong&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the first to come to mind would be Zilogs Z80, which was first manufactured by Mostek, as Zilog had no production line of its own. The description about being dedicated to fast interrupt handling is also exactly what the Z80 implementation was about - using the second register set for anything else but a complete swap was rather clumsy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course there were several others with a similar feature (like Valvo's 2650), but none really as much remembered.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/13578/tum&quot;&gt;TUM_&lt;/a&gt; mentions, there's a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7794&quot;&gt;related question&lt;/a&gt; about register set usage for the Z80.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-15T01:28:17.100" LastActivityDate="2020-02-15T01:28:17.100" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13770" PostTypeId="2" ParentId="13763" CreationDate="2020-02-15T05:45:13.867" Score="2" Body="&lt;p&gt;The beep chip could be programmed to different frequencies. Someone with too much caffeine at MS made it into a sound card. I used it for years as my sound card at the time only did MIDI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More background on beeping and hardware &lt;a href=&quot;https://blogs.msdn.microsoft.com/larryosterman/2010/01/04/whats-up-with-the-beep-driver-in-windows-7/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://blogs.msdn.microsoft.com/larryosterman/2010/01/04/whats-up-with-the-beep-driver-in-windows-7/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows used to beep on illegal user input. You can still turn it on but many people complained so no more.&lt;/p&gt;&#xA;" OwnerUserId="16287" LastActivityDate="2020-02-15T05:45:13.867" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13771" PostTypeId="2" ParentId="13768" CreationDate="2020-02-15T05:47:05.533" Score="2" Body="&lt;p&gt;There is the 6809 which has 2 Stack Pointers, SP and USP (user stack pointer). I think the 68K can manipulate the pointers such that the Stack address can be exchanged with it's other registers.&lt;/p&gt;&#xA;" OwnerUserId="8363" LastActivityDate="2020-02-15T05:47:05.533" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13772" PostTypeId="2" ParentId="13747" CreationDate="2020-02-15T06:52:48.213" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So was there a way to load music on an old PC (70s-90s) and when was it possible for the first time? Also what would it be like?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;See &amp;amp; hear it below.&#xA;&lt;strong&gt;1970 (maybe before).&lt;/strong&gt;  The PDP/8-e was introduced in 1970.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This depends on what you accept as a &quot;PC&quot; and what bar you set for &quot;music&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A PDP8 was an expensive tool, or toy, in the 1970s, but was as close as one reasonably got for an 'off the shelf PC'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a video of a restored &lt;a href=&quot;https://youtu.be/akvSE5Z474c?t=125&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;1971 DEC LAB-8/e {PDP-8/e}&lt;/strong&gt;&lt;/a&gt;  playing music - on a radio via RF reception, or directly by speaker (I think).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've set the video to start at 2m-5s. The excessively enthused will want to then go back to the start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Music it is, then ...&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UzhWm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UzhWm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The music is being played on the handheld radio!&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pK5wx.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pK5wx.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/akvSE5Z474c?t=125&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/akvSE5Z474c?t=125&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ricomputermuseum.org/Home/equipment/dec-pdp-12/dec-pdp-12-restoration&quot; rel=&quot;nofollow noreferrer&quot;&gt;Reviving a PDP/12&lt;/a&gt;  - music mentioned along the way &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP/12 was NOT a PDP/11 successor or variant. It was a PDP/8 with analog add on. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;https://wiki2.org/en/PDP-8/E&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia: PDP-8/e&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot; ... The PDP-8/e was a model of the PDP-8 line of minicomputers, designed by the Digital Equipment Corporation to be a general purpose computer that inexpensively met the needs of the average user while also being capable of modular expansion to meet the more specific needs of advanced user. The first was built in 1970 and was among the first ever minicomputers and this one was small enough to fit in the back seat of a Volkswagen Beetle Convertible. It originally sold for $6,500 but after 18 months the price dropped to $4995 to make it the only computer under $5000 available at that time. ...&quot;&lt;/p&gt;&#xA;" OwnerUserId="11515" LastActivityDate="2020-02-15T06:52:48.213" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13773" PostTypeId="2" ParentId="13763" CreationDate="2020-02-15T10:17:11.070" Score="0" Body="&lt;p&gt;I think old soundblaster 16 drivers have a pc speaker out, other than that it's in the bios, it would be very low level since it's designed for POST tests. Or power on safe test&lt;/p&gt;&#xA;" OwnerUserId="16289" LastActivityDate="2020-02-15T10:17:11.070" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13775" PostTypeId="2" ParentId="13763" CreationDate="2020-02-15T11:39:12.240" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20070227091822/http://download.microsoft.com/download/win98/utility/1/w9x/en-us/speak.exe&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://web.archive.org/web/20070227091822/http://download.microsoft.com/download/win98/utility/1/w9x/en-us/speak.exe&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Designed for Windows 3.1, though also known to work for Windows 95 and 98.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When sound was played, sound could get tremendous priority, causing an inability to move the mouse cursor while sound was played.  Or, alternatively, moving the mouse cursor could significantly lower sound quality.  (Not to say that sound quality was ever great, but there could be more and/or longer moments of silence as any sound was cut out repeatedly.)  The level of unpleasantness seemed to vary very significantly between different computers, and may have been able to be influenced by other details (like maybe how much memory was available, which could be affected by what drivers were loaded).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, it was sometimes much better than the usual alternative of the day, which was complete silence.&lt;/p&gt;&#xA;" OwnerUserId="419" LastActivityDate="2020-02-15T11:39:12.240" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13776" PostTypeId="2" ParentId="13747" CreationDate="2020-02-15T14:28:15.663" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;to load music on an old PC&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It sounds like your expectation is that you could load up a CD of &lt;em&gt;The Go-Go's&lt;/em&gt; into disk files, and play it in the background while you work.   That won't work on 70s-80s machines, as they lack either the disk space to store &lt;em&gt;even compressed&lt;/em&gt; music, or the computing power to decompress it on the fly.   It starts to become possible in the mid-90s, but it really, really requires pre-emptive multitasking OS's such as Windows 95 or OS X. The music decoding needs CPU &lt;em&gt;when it needs CPU&lt;/em&gt;, otherwise there will be breaks and gaps in the playback, and those are unlistenable.  Which is also when disk space and CPU got to the point where compressed music was possible.  When I went to a video trade show in 1992 and saw my first video editing station (using a wall of those massive, 5.25&quot; 9GB hard drives), I knew consumers would have PC-based music soon. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I mean it did have a sound chip that would technically just get some new buffers every few seconds,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You realize for intelligible recorded-music playback, &quot;a few seconds of buffer&quot; would be bigger than the main RAM on a whole Commodore 64, right? You know how long a 1541 hard drive takes to load 64KB from disk... it couldn't possibly keep up, even if the disk held the megabytes needed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Around 1980 we became aware of the Compact Disc standard, and that made perfectly clear why recorded music wouldn't be coming to computers for a &lt;em&gt;loooooong&lt;/em&gt; time.  The sample rate was 44.1 KHz (and that was considered minimal); and 16 bits per sample per channel.  Or 64KiB every 0.74 seconds, or 0.37 seconds if stereo. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;The beepy boopy tones that passed for music in 1980-ish computer games - well, that's another deal entirely&lt;/em&gt;.   All you need for that are two ingredients: an audio chip capable of sustaining a static tone unattended, and a periodic interrupt such as a vertical-blank interrupt occurring 50 or 60 times a second. That is something that any &lt;em&gt;post&lt;/em&gt;-1977 home PC had - not the initial Apple II, PET and TRS-80; but the next round --  Atari 800, VIC-20 and yes, C-64.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;But there are still no buffers&lt;/em&gt;.  So code needs to count out each beat -- and ramp, change or silence the tones at appropriate video frames.  That code is very achievable on these ~1 MHz 16-64KB machines with room for a game also. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;although I imagine the lack of multithreading would make it difficult, but games have found a way, right?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, thanks to the vertical-blank interrupt, the music routine &lt;em&gt;does in fact&lt;/em&gt; have pre-emptive multi-tasking, i.e. multi-threading.  That's how games do it; and I've written code that let me play such 1980-tier music while coding.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;It wasn't worth it&lt;/em&gt;. It's super cute to have Bach's preludes and fugues beeped out by the onboard sound chip... for about 2 listens.  After that, you really need a game to distract you from how bad it sounds.  Back in the day, every programmer had a drawer full of cassettes or CDs containing actual music.&lt;/p&gt;&#xA;" OwnerUserId="4330" LastActivityDate="2020-02-15T14:28:15.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13777" PostTypeId="1" AcceptedAnswerId="13778" CreationDate="2020-02-15T16:24:57.017" Score="8" ViewCount="394" Body="&lt;p&gt;Most times whene I call &lt;code&gt;EDIT&lt;/code&gt; on my XT-class machine with MS-DOS 5.0 installed on the hard disk, the menus of &lt;code&gt;EDIT&lt;/code&gt; appear, but the window that should contain the file contents stays blank and the machine stops responding to any input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BIOS on the machine is made by PHOENIX, and its version string says 2.27.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2021-03-23T14:11:18.740" Title="Why does MS-DOS 5.0 EDIT hang on my XT-class machine with a German 102-key keyboard?" Tags="&lt;ms-dos&gt;&lt;ibm-pc&gt;&lt;compatibility&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13778" PostTypeId="2" ParentId="13777" CreationDate="2020-02-15T16:24:57.017" Score="15" Body="&lt;h1&gt;Analysis of the problem&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The cause is an incompatibility with many pieces in it. It is centered around what the bit 4 of &lt;code&gt;40:96&lt;/code&gt; in the BIOS data area actually means. This bit is documented to mean that a &quot;101/102 key keyboard&quot; is connected to the computer. This is the case in my XT system. The keyboard I use has a switch (8088/80286) to choose the protocol, and in XT mode, it uses the XT keyboard protocol, but it still sends &lt;code&gt;E0&lt;/code&gt; prefixes like in AT mode when extended keys (like the separate cursor keys) are pressed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BIOS on this computer does not know about 101/102-key keyboards, and also does not use &lt;code&gt;40:96&lt;/code&gt; at all, so it is zeroed out on boot. The &lt;code&gt;KEYB&lt;/code&gt; command included with MS-DOS 5.0 overrides the BIOS implementation of the keyboard IRQ handler (&lt;code&gt;INT 09&lt;/code&gt;) with a variant that &lt;em&gt;does&lt;/em&gt; handle extended keys. If the MS-DOS 5.0 keyboard driver recognizes &lt;code&gt;E0&lt;/code&gt; or &lt;code&gt;E1&lt;/code&gt; scan codes (no matter on what machine), it automatically sets the bit indicating the presence of an &quot;extended keyboard&quot;. This makes sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, the keyboard abstraction layer in &lt;code&gt;QBASIC&lt;/code&gt; (and &lt;code&gt;EDIT&lt;/code&gt; on DOS 5 is implemented by running &lt;code&gt;QBASIC&lt;/code&gt; with a special command line switch) attaches more meaning to that bit. If it sees this bit set, &lt;code&gt;QBASIC&lt;/code&gt; implies that the keyboard BIOS is AT-like, and thus &lt;code&gt;INT 16&lt;/code&gt; supports the extended BIOS services &lt;code&gt;10h&lt;/code&gt;, &lt;code&gt;11h&lt;/code&gt; and &lt;code&gt;12h&lt;/code&gt; that IBM introduced in the AT. These services are needed to make best use of the 101/102-key keyboard, as they allow (e.g.) to differentiate between the numpad cursor keys with numlock off and the separate cursor keys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You likely can see where this is heading: As the DOS keyboard driver replaces only &lt;code&gt;INT 09&lt;/code&gt;, the hardware IRQ driver is now 101/102-key aware, and the awareness is indicated in the BIOS data area &lt;em&gt;after the first extended key has been pressed&lt;/em&gt;. The BIOS API at &lt;code&gt;INT 16&lt;/code&gt; is still the PC-class service that only supports subfunctions 0 to 2. As &lt;code&gt;QBASIC&lt;/code&gt; now tries to interface to the keyboard using the unsupported subfunctionss 10h and 11h, it reads garbage inputs and seems to not draw the file to the screen while some keys (possibly scrolling keys) are pressed.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;A way to fix the problem&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Actually, the QBASIC keyboard abstraction layer has an internal flag to disable AT keyboard BIOS support. It does not seem to be set anywhere in QBASIC though. The configuration flags for the driver are in &lt;code&gt;QBASIC.EXE&lt;/code&gt; in the data segment, but as &lt;code&gt;QBASIC&lt;/code&gt; is compressed by Microsoft's linker (&lt;code&gt;/EXEPACK&lt;/code&gt;), the flag byte can not be patched. What can be patched is the instruction that checks the 101-key flag.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;26 F6 06 96 04 10       test    es:keybd_flags_3, 10h ; 101 key keyboard?&#xA;74 16                   jz      NoATSupport&#xA;8B 1D                   mov     bx, [di+KbdState.Environment]&#xA;83 7F 18 00             cmp     [bx+KbdEnvironment.InhibitATSupport], 0&#xA;75 0E                   jnz     NoATSupport&#xA;[...]&#xA;NoATSupport:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The byte sequence &lt;code&gt;26 F6 06 96 04 10&lt;/code&gt; has only one hit in &lt;code&gt;QBASIC.EXE&lt;/code&gt;. Patch the last byte to &lt;code&gt;00&lt;/code&gt; to make sure the zero flag is always set after this instruction.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2020-02-15T16:24:57.017" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13779" PostTypeId="2" ParentId="13763" CreationDate="2020-02-15T16:47:20.377" Score="3" Body="&lt;p&gt;There actually were two common PC speaker drivers for windows. One of them is the PC speaker driver by Microsoft, already mentioned in the other answers, while the other one, written by John Ridges has not yet been mentioned. The Microsoft driver is typically installed as &lt;code&gt;SPEAKER.DRV&lt;/code&gt;, while the driver by John Ridges is installed as &lt;code&gt;SPEAKR.DRV&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, &lt;a href=&quot;https://remember.the-aero.org/speaker/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://remember.the-aero.org/speaker/index.htm&lt;/a&gt; has mirrors of both drivers.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2020-02-15T16:47:20.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13780" PostTypeId="1" CreationDate="2020-02-15T17:21:51.270" Score="1" ViewCount="61" Body="&lt;p&gt;Recently, I got a 380E from ebay. Seller says that it has boot error and not working, but the error was typical 161/163. I've replaced nee BIOS battery, and error was gone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, I formatted HDD, and then realised that there was no way to install Windows because 380E doesn't have CD-ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I disassembled laptop, take out HDD, copy Windows 95 install files, and reassemble everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem starts right after that. When it booted up with clean Windows, I used floppy disk to install PCMCIA driver. In the middle of installation, my 380E just shuts off! I was little frustrated, and trying to power back on, but it didn't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was running laptop with AC charger(not a original one, but has same rating and plug). So I popped in battery, and it still doesn't want to turn on. Even worse, when I tried to power up, floppy drive makes loud seeking noise during power switch is pushed. After some plug in/out AC adapter and battery, finally it booted, and finished installing PCMCIA and LAN card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it still keeps shutting down randomly. Sometimes, it lasts about half an hour. Another times, it just refuses to powering on. After some fiddling with AC adapter and battery, it finally comes up, and still suffering random power off(min 30sec, max about 30 minutes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody experienced such symptoms with old IBM Thinkpad? What can be gone wrong?&lt;/p&gt;&#xA;" OwnerUserId="16093" LastEditorUserId="8579" LastEditDate="2020-02-16T05:20:56.657" LastActivityDate="2020-02-16T05:20:56.657" Title="Thinkpad 380E keeps shutting down randomly" Tags="&lt;ibm&gt;&lt;power&gt;&lt;thinkpad&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2020-02-16T16:30:48.203" ContentLicense="CC BY-SA 4.0" />
  <row Id="13781" PostTypeId="1" AcceptedAnswerId="13783" CreationDate="2020-02-15T17:53:49.170" Score="4" ViewCount="886" Body="&lt;p&gt;And by Web server I mean actually web server (not BBS), meaning it had to run on the actual IP internet and be browsed with a dedicated browser program.&lt;br&gt;&#xA;So what kind of tools were used in the late 80s/early 90s when some common households started browsing websites?&lt;br&gt;&#xA;How was the HTML generated? Were there any tricks to save bandwidth that have been lost to history?&lt;br&gt;&#xA;What are some fun anecdotes?&lt;/p&gt;&#xA;" OwnerUserId="15934" LastActivityDate="2020-02-16T09:16:04.497" Title="What were some of the earliest common webservers and how did they work?" Tags="&lt;internet&gt;" AnswerCount="3" CommentCount="10" FavoriteCount="3" ClosedDate="2020-02-16T16:33:03.337" ContentLicense="CC BY-SA 4.0" />
  <row Id="13782" PostTypeId="2" ParentId="1312" CreationDate="2020-02-15T18:15:45.963" Score="2" Body="&lt;p&gt;Light pens (Gibsen light pens for example) also need video sync so used slot 7.&lt;/p&gt;&#xA;" OwnerUserId="16292" LastActivityDate="2020-02-15T18:15:45.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13783" PostTypeId="2" ParentId="13781" CreationDate="2020-02-15T18:26:47.437" Score="15" Body="&lt;p&gt;I guess this is fairly straight forward. Early web servers were using &lt;a href=&quot;https://en.wikipedia.org/wiki/CERN_httpd&quot; rel=&quot;noreferrer&quot;&gt;Tim Berners-Lee's original web server code&lt;/a&gt; as it was published in 1991. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I myself downloaded the code and ran web servers on our institutions computers from that start in 1991/92. I found and fixed a few bugs in the code also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How was the HTML generated? I like others, just wrote the web page HTML in a text editor. Myself I used emacs with a suite of emacs macros I wrote.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There did not need to be tricks on saving bandwidth as the HTML pages were mainly small text files, but we knew how to optimise the images for display. There was little in the way of multimedia as we experience it today. I had dynamic and responsive pages using the CGI mechanism that invoked perl scripts to generate the dynamic content. That fed an early genealogy database with 50,000 entries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time it was not a radical innovation as there were also &lt;a href=&quot;https://en.wikipedia.org/wiki/Gopher_(protocol)&quot; rel=&quot;noreferrer&quot;&gt;gopher servers&lt;/a&gt; and ftp servers and other information sharing protocols (such as WAIS, Archie, Veronica) that we were all using at that time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What made a change was the creation on Netscape browser that was much easier to use than the text based WWW browser that came with the original CERN code.&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2020-02-15T18:26:47.437" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13784" PostTypeId="2" ParentId="13747" CreationDate="2020-02-15T21:27:56.443" Score="2" Body="&lt;p&gt;Around 1997 I had a Pentium 133MHz and 32mb RAM (somewhat middle segment at the time). I remember trying to hear an mp3 on winamp and work on Microsoft Word at the same time.&#xA;The words would appear a bit delayed after I typed them in, as long as the music was running. I guess that was the moment when it started being possible for the average user.&#xA;On a second thought, CD playback was probably possible earlier because the load on the CPU is lower.&lt;/p&gt;&#xA;" OwnerUserId="16293" LastActivityDate="2020-02-15T21:27:56.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13785" PostTypeId="1" AcceptedAnswerId="13797" CreationDate="2020-02-15T21:44:01.677" Score="3" ViewCount="110" Body="&lt;p&gt;My 6809 assembly language program for the coco3 is causing the assembler to issue a warning with no message.  How can I find out why the warning is being issued?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the assembly listing, showing the line with the &quot;W&quot; warning flag:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00121   0074            tstn2a   equ   *&#xA;00122   0074 3406                pshs  a,b&#xA;00123   0076 5F                  clrb&#xA;00124   0077            tstn2a.1 equ   *&#xA;00125   0077 1F98                tfr   b,a&#xA;00126   0079 1700CE              lbsr  n2a&#xA;00127   007C 17008E              lbsr  putc&#xA;00128   007F 5C                  incb&#xA;00129   0080 C110                cmpb  #$10&#xA;00130   0082 25F3                blo   tstn2a.1&#xA;00131 W 0084 17007E              lbsr  putcr&#xA;00132   0087 3586                puls  pc,a,b&#xA;...&#xA;00000 error(s)&#xA;00001 warning(s)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Based on the LBSR offset being &quot;007E&quot;, the warning is because I've used LBSR (long branch to subroutine) when BSR (short branch to subroutine) would do.  But is there any way to get the assembler to explicitly tell me what the warning is for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assembler command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;asm console.a o=/d1/console l #32k &amp;gt;/p&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Versions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;NitrOS9 3.3.0&lt;/li&gt;&#xA;&lt;li&gt;Microware OS-9 Assembler RS Version 01.00.00&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3324" LastEditorUserId="3324" LastEditDate="2020-02-15T22:52:00.437" LastActivityDate="2020-02-16T08:12:03.530" Title="Microware OS-9 assembler warning with no message" Tags="&lt;6809&gt;&lt;coco&gt;&lt;os-9&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13786" PostTypeId="2" ParentId="13763" CreationDate="2020-02-15T23:02:33.470" Score="3" Body="&lt;p&gt;This question made me think of RealSound:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/RealSound&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.m.wikipedia.org/wiki/RealSound&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;RealSound is a patented (US US5054086 A) technology for the PC created by Steve Witzel of Access Software during the late 1980s. RealSound enables 6-bit digitized PCM-audio playback on the PC speaker by means of PWM drive, allowing software control of the loud speaker's amplitude of displacement. The first video games to use it were World Class Leader Board and Echelon, both released in 1988. At the time of release, sound cards were very expensive and RealSound allowed players to hear life like sounds and speech with no additional sound hardware, just the standard PC speaker.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="16296" LastActivityDate="2020-02-15T23:02:33.470" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13787" PostTypeId="1" AcceptedAnswerId="13789" CreationDate="2020-02-15T23:17:53.370" Score="7" ViewCount="554" Body="&lt;p&gt;I may be going about this the wrong way, so sorry if it is wrong, I'm coming to 6502 after 32 years (when I was 8 years old !)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to pass a pointer to some data, either &lt;code&gt;data1&lt;/code&gt; or &lt;code&gt;data2&lt;/code&gt; to a sub routine, which I can then access in the subroutine via &lt;code&gt;lda data1, y&lt;/code&gt; or &lt;code&gt;lda data2, y&lt;/code&gt;. Something like this, although of course it's not right:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;            // send in data1 or data2 to subroutine... e.g. push onto the stack maybe?&#xA;            jsr function&#xA;            rts&#xA;&#xA;function:&#xA;            ...&#xA;&#xA;            lda ***, y         // how can I replace *** with data1 or data2 here, sent in from the main program?&#xA;            sta memlocation, y&#xA;&#xA;            rts&#xA;&#xA;data1:      .byte 45, 50, 75, 50, 105, 50, 135, 50, 165, 50, 195, 50, 225, 50, 255, 50&#xA;data2:      .byte 45, 100, 75, 100, 105, 100, 135, 100, 165, 100, 195, 100, 225, 100, 255, 100&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Could indirect addressing work somehow? I'm a bit confused about this, but maybe I'm trying to achieve this the wrong way.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Background:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although I do own a C64, I'm currently developing on Kubuntu Linux using Visual Studio Code with Kick Assembler, the VCS Kick Ass extensions, and VICE64 (all free !)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just got 72 sprites on screen at once :-) but I'm trying to optimise my routines.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Thanks to the answer I used a global parameter, and have reduced my code footprint significantly:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3lbOw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3lbOw.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16295" LastEditorUserId="16295" LastEditDate="2020-02-21T22:41:53.787" LastActivityDate="2020-03-30T13:30:42.893" Title="How to pass data pointer to subroutine to use with Absolute,Y addressing?" Tags="&lt;6502&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13788" PostTypeId="2" ParentId="13781" CreationDate="2020-02-15T23:28:22.697" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What were some of the earliest common webservers and how did they work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;By delivering a file? A basic webserver (at that time) did simply take the path supplied with GET, appended it to some base directory, tried to locate that file and transferred it (as is) if successful. Otherwise an error was generated. It was common to write simple servers as programming assignments (*1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early servers were open &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And by Web server I mean actually web server (not BBS), meaning it had to run on the actual IP internet and be browsed with a dedicated browser program.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Interesting way to cut it sown, but then again, this description would as well work for other systems of the same time like &lt;a href=&quot;https://en.wikipedia.org/wiki/Gopher_(protocol)&quot; rel=&quot;noreferrer&quot;&gt;GOOPHER&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Wide_area_information_server&quot; rel=&quot;noreferrer&quot;&gt;WAIS&lt;/a&gt;, wouln't it (*2)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So what kind of tools were used in the late 80s/early 90s when some common households started browsing websites?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There isn't much web, as we know it (aka HTTP based HTML delivery), in the late 1980s, HTTP/HTML wasn't introducred until 1990. Of course there was the internet, mainly build up of FTP, UUCP and TELNET. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The web also didn't become a thing even in IT circles until &lt;a href=&quot;https://en.wikipedia.org/wiki/Mosaic_(web_browser)&quot; rel=&quot;noreferrer&quot;&gt;Mosaic&lt;/a&gt; became available in 1993. And it wasn't until Netscape started to do the &lt;a href=&quot;https://en.wikipedia.org/wiki/Netscape_Navigator&quot; rel=&quot;noreferrer&quot;&gt;Navigator&lt;/a&gt; in 1994/95. Common households a that time used proprietary systems like &lt;a href=&quot;https://en.wikipedia.org/wiki/AOL&quot; rel=&quot;noreferrer&quot;&gt;AOL&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/CompuServe&quot; rel=&quot;noreferrer&quot;&gt;Compuserve&lt;/a&gt;. And it wasn't until the ver late 1990s that the web did make a notable inroad into the 'common household' market.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How was the HTML generated?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Using an editor? Like Notepad? Yes, serious. That or any other editor, after all, HTML is simple on purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Netscape introduced a first WYSIWYG type editor as part of it's Navigator 3.0 Gold in 1996. Not anything home users would afford.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Were there any tricks to save bandwidth that have been lost to history?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why? At that time pages were mostly (text) content - not 99.8% HTML - there wasn't much to save. They come quite fast even on a 14.400 modem. And basically instant on anything faster than that.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What are some fun anecdotes?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Want to hear one of today? It's still possible to do such lean pages. Use Notepad and don't try t force the browser - let it just do its job. Funny, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - And it still is, IMHO, a great little task to get familiar with TCP/IP programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - In fact, for some short time WAIS was much more successful on the internet than the WWW &lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-02-15T23:28:22.697" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13789" PostTypeId="2" ParentId="13787" CreationDate="2020-02-15T23:52:25.947" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How to pass data pointer to subroutine to use with Absolute, Y addressing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's simply not possible - unless you want to do self modifying code - which is rather uncool. If you really want, it would look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;       ...&#xA;       LDA   #&amp;lt;data1&#xA;       LDY   #&amp;gt;data1&#xA;       JSR   Function&#xA;       ...&#xA;       LDA   #&amp;lt;data2&#xA;       LDY   #&amp;gt;data2&#xA;       JSR   Function&#xA;       ...&#xA;&#xA;Function:&#xA;       STA   LocPtr&#xA;       STY   LocPtr+1&#xA;&#xA;       LDY   #0&#xA;       LDA   $1000,Y    ; Dummy value to force two byte address (*1)&#xA;LocPtr EQU   $-2&#xA;       ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Could indirect addressing work somehow?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, for more serious programming &lt;em&gt;Indirect Indexed&lt;/em&gt; is the way to go. Either use a global parameter field(s) (which I'd suggest) or (semi-) local.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a) Use of global parameter:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Param  DW    0      ; Somewhere in ZP&#xA;&#xA;       LDA   #&amp;lt;data1&#xA;       STA   Param&#xA;       LDA   #&amp;gt;data1&#xA;       STA   Param+1&#xA;       JSR   Function&#xA;       ...&#xA;       LDA   #&amp;lt;data2&#xA;       STA   Param&#xA;       LDA   #&amp;gt;data2&#xA;       STA   Param+1&#xA;       JSR   Function&#xA;       ...&#xA;&#xA;Function:&#xA;       LDY   #0&#xA;       LDA   (Param),Y&#xA;       ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;b) Use of semi local fields:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Param  DW    0      ; Somewhere in ZP (but more of a scratchpad)&#xA;&#xA;       ...&#xA;       LDA   #&amp;lt;data1&#xA;       LDY   #&amp;gt;data1&#xA;       JSR   Function&#xA;       ...&#xA;       LDA   #&amp;lt;data2&#xA;       LDY   #&amp;gt;data2&#xA;       JSR   Function&#xA;       ...&#xA;&#xA;Function:&#xA;       STA   Param&#xA;       STY   Param+1&#xA;&#xA;       LDY   #0&#xA;       LDA   (Param),Y&#xA;       ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's called 'semi' as the pointer still has to reside at an absolut (ZP) location. Only parameter passing is done in registers. Of course this could even be made 'real' local by saving the ZP location onto the stack and restoring it from there at the end. That's useful if one has no idea about memory usage. But quite slow - and in addition dangerous if the location choosen is used by some (interrupt) coroutine as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally I prefer to setup global parameter / work areas in ZP as they offer many benefits in speed and size.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I know it's not needed as there is no ZP,Y addressing, but it's good practice to always assume as if and supply a value forcing a 16 bit value. If by any editing error some other addressing is chosen, the assembler will then fulfil its servitude and issue a helpful warning.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-30T13:30:42.893" LastActivityDate="2020-03-30T13:30:42.893" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13790" PostTypeId="2" ParentId="13787" CreationDate="2020-02-16T00:05:59.113" Score="7" Body="&lt;p&gt;In addition to Raffzahn's answer: If you're in a rush and are executing from RAM, consider self modifying code. This is useful if the LDA base changes frequently enough so that it isn't constant, but does keep its value within a tight loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Place a label before the use of the absolute indexed by Y form of LDA in your code. Then you modify the constant base address part of the LDA instruction directly. The machine code format of LDA $hhll,Y is &lt;code&gt;$39 ll hh&lt;/code&gt;. You can modify the values of &lt;code&gt;ll&lt;/code&gt; at &lt;code&gt;label+1&lt;/code&gt; and &lt;code&gt;hh&lt;/code&gt; at &lt;code&gt;label+2&lt;/code&gt;. The modification can be done either:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;within the routine - you'll have to pass into your routine (through global RAM as suggested by Raffzahn, or in registers, or on the stack) the 16-bit table base address itself, or a simpler 8-bit index to a table of table base addresses which you then have to dereference, or&lt;/li&gt;&#xA;&lt;li&gt;outside of the routine - which would make that modifying that instruction part of the calling convention of that routine: the RAM storing the address part of the LDA is now 'a parameter' you set before you call it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16275" LastEditorUserId="16275" LastEditDate="2020-02-16T00:11:14.413" LastActivityDate="2020-02-16T00:11:14.413" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13791" PostTypeId="2" ParentId="13781" CreationDate="2020-02-16T00:16:10.490" Score="1" Body="&lt;p&gt;Early web servers include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/CERN_httpd&quot; rel=&quot;nofollow noreferrer&quot;&gt;CERN httpd&lt;/a&gt;, written by  Tim Berners-Lee, Ari Luotonen, et alia (Version 0.1 was released in June 1991)&lt;/li&gt;&#xA;&lt;li&gt;Plexus, written in Perl 4 by Tony Sanders of BSDI (early 1993)&lt;/li&gt;&#xA;&lt;li&gt;GN, which was both a web and gopher server, written by Dr. John Franks at Northwestern University&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/NCSA_HTTPd&quot; rel=&quot;nofollow noreferrer&quot;&gt;NCSA HTTPD&lt;/a&gt; (later also known as W3C httpd), written by Robert McCool, et alia at NCSA/UIUC (First released in 1993)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There were surely other early HTTP servers but the above people were named dropped as contributors to the initial CGI spec.&lt;/p&gt;&#xA;" OwnerUserId="3261" LastEditorUserId="3531" LastEditDate="2020-02-16T09:16:04.497" LastActivityDate="2020-02-16T09:16:04.497" CommentCount="0" CommunityOwnedDate="2020-02-16T00:16:10.490" ContentLicense="CC BY-SA 4.0" />
  <row Id="13792" PostTypeId="2" ParentId="13747" CreationDate="2020-02-16T01:47:20.347" Score="7" Body="&lt;p&gt;The first time I did this was on an Atari 400.  Was a hack.  I found out only one track was used for the program data, leaving the other one for audio.  Great!  I prepared a tape with some music recorded off the radio.  While in basic, I could press play on the 410 data recorder, and start it with POKE 54018,52 (which I just had to go look up) to start the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The audio track would play through the TV speaker.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had some idea about including audio with a program doing something else, and the listen while computing happened a few times as kind of a test, proof of concept.  What I ended up doing was just some programming on the Atari while letting the music play.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, that's not really in the spirit of this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If one had the storage, playing a WAV file could happen fairly early on.  I consider playing an MP3 file a more challenging test, and one early machine surprised me!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The earliest machine I listened to mp3 files on reliably was an SGI Indigo Elan.  It has an R4K MIPS CPU, and a system clock speed of 30 MHz!  I used a great little command line program called &quot;amp&quot; to play mp3 files.  On a side note, that program has excellent accuracy, and was the basis of many players to come in the future as it was optimized for performance.  Originally, the question was whether it could play mp3 files at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Turns out that machine could play up to 256 Kbps MP3 encoded files reliably over an NFS share, and doing that would take something like 90 percent of the CPU.  Lower bitrate files took less, and when the computer was just acting as an X-Window terminal to some other machine, one could totally listen to music and get work done with only the occasional stutter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's release year was 1992, and I did these things sometime around '98?  Hard to remember now.  What I do remember is I ended up with one of these machines and decided to see what could still be done with it.  Real time, quality playback at 30 MHz was impressive to me personally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On suitably equipped and configured PC machines, CD playback was easy and ran through an input on the sound card.  I did that fairly regularly on 486 and above machines.  &lt;/p&gt;&#xA;" OwnerUserId="15357" LastEditorUserId="1953" LastEditDate="2020-03-02T02:27:43.237" LastActivityDate="2020-03-02T02:27:43.237" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13793" PostTypeId="2" ParentId="13747" CreationDate="2020-02-16T03:27:14.620" Score="1" Body="&lt;p&gt;I was doing it from around 1988/89 with an external SCSI CD-ROM drive from a Mac. Sorry cannot remember the exact date but I know I got a CD-ROM almost as soon as they were available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SCSI was extremely efficient so you could run audio and play in the background whilst using most development tools such as C++ compilers and database development environments like FoxBase+/Mac and 4th Dimension.&lt;/p&gt;&#xA;" OwnerUserId="7730" LastActivityDate="2020-02-16T03:27:14.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13794" PostTypeId="1" CreationDate="2020-02-16T05:20:32.113" Score="2" ViewCount="345" Body="&lt;p&gt;I know my x230 has replaceable RAM. I know the x395 lists its ram as being soldered. What is the last of the X series lineup with user-serviceable RAM?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastActivityDate="2020-02-16T08:55:14.403" Title="What was the last of the Thinkpad X series with replaceable RAM?" Tags="&lt;ram&gt;&lt;thinkpad&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ClosedDate="2020-02-16T14:51:37.717" ContentLicense="CC BY-SA 4.0" />
  <row Id="13797" PostTypeId="2" ParentId="13785" CreationDate="2020-02-16T08:12:03.530" Score="5" Body="&lt;p&gt;The Microware Assembler has no way to inform you of why it is issuing a warning.  It keeps track of the total number of warnings, and also of the number of warnings on each line.  If a line has any warnings, then when it is listed the assembler puts the &quot;W&quot; flag on that line&lt;sup&gt;1&lt;/sup&gt;.  At the end of the listing, the assembler prints the total number of warnings.  There is no code for printing additional information about the warnings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there were a large number of warning reasons, or if they were tricky, then the lack of an explicit warning reason would be a problem.  Fortunately, there are only a few reasons, and they aren't difficult to figure out.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&quot;Register size mismatch&quot; - The code is a little tricky to read, but I think this warning is issued when a TFR instruction is copying a 16-bit register to an 8-bit register.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&quot;Could use short relative here&quot; - A long relative branch could be coded as a short relative branch, saving a byte.  This is the reason for the warning in the question.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&quot;Extended addressing mode&quot; - Extended Indirect Indexed or Extended addressing mode is used.  Normal OS9 programming is done using relocatable code; extended addressing, which is not relocatable, should not be used.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Source: Examination of the assembler source code (&lt;code&gt;nitros9-v3.3.0/level1/cmds/asm.asm&lt;/code&gt; from &lt;a href=&quot;https://sourceforge.net/projects/nitros9/&quot; rel=&quot;noreferrer&quot;&gt;nitros9-v3.3.0.tar.gz&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;However, if the line has any errors, then the &quot;E&quot; flag appears in place of the warning flag.&lt;/p&gt;&#xA;" OwnerUserId="3324" LastActivityDate="2020-02-16T08:12:03.530" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13798" PostTypeId="2" ParentId="13794" CreationDate="2020-02-16T08:55:14.403" Score="2" Body="&lt;p&gt;The last of the X2 range to have user-serviceable memory was the X270; the X280 has soldered memory only. The X390 and X395 only have soldered memory too (but they’re not part of the same range).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-02-16T08:55:14.403" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13799" PostTypeId="2" ParentId="13747" CreationDate="2020-02-16T11:13:57.593" Score="1" Body="&lt;p&gt;The question mentions &quot;midi&quot;.  A MIDI file is rather simple, as it is low bandwidth (small files).  I see some other answers tackling that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see another answer mentions &quot;Redbook&quot; CD audio, which is very simple as far as CPU goes (CPU just sends instructions to the drive, and on some systems there was a cord going directly from the CD drive to the sound card, so the CPU didn't need to actively process the sound once it was started).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just to provide some more information to fill in an additional part of the broader picture: I had a 486 DX 33 (i80486 processor, 33 Mhz), and it was able to play WAV files.  However, WAV files took up an amount of disk space that was quite large for the amount of disk space available at the time.  MP3 files represented a lossy way to play compressed files, so hard drive could easily fit an entire song.  However, the files could &quot;cut out&quot; to silence during playback, using a dedicated player.  The 486 DX 33 simply didn't handle the decompression enough to play that back in real time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the day, I was told that a 486 DX2 66 decode an MP3 file fast enough for it to play back in real time.  Now, if you want to multitask, you may need an even faster system: presumably a faster 486 chip or a Pentium chip.  The 486 DX4 chip was released in 1993 (per &lt;A HREF=&quot;https://en.wikipedia.org/wiki/Intel_DX4&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia for &quot;Indel DX4&quot;&lt;/A&gt;).&lt;/p&gt;&#xA;" OwnerUserId="419" LastActivityDate="2020-02-16T11:13:57.593" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13800" PostTypeId="1" CreationDate="2020-02-16T13:27:08.527" Score="1" ViewCount="227" Body="&lt;p&gt;I'd like to buy an old Sega Megadrive, aka Genesis outside the UK. However I don't have a TV or computer monitor to view the graphics on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do however have an Amstrad Ctm644, which is a 15Khz CRT without a RF tuner. The pin inis a din plug as follows:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/YOxBs.jpg&quot; alt=&quot;enter image description here&quot;&gt;. It is quite simple, rgb and sync. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What model megadrive would connect to this, and how? &lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2020-02-16T14:23:29.863" Title="Can I connect a Sega Megadrive or Genesis to an Amstrad Cpc monitor?" Tags="&lt;sega-genesis&gt;&lt;cpc&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13801" PostTypeId="2" ParentId="13800" CreationDate="2020-02-16T14:23:29.863" Score="1" Body="&lt;p&gt;If your SMD has RGB output (as suitable for SCART), then you can try. If there is no RGB output, you might try to add PAL decoder (that converts composite signal to sync/R/G/B).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there are some problems you might run into:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Sending composite output (sync + B/W signal + color subcarrier) to the plain monitor input for sync only might disrupt correct synchronization in the monitor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I have a suspicion that amstrad monitors require the amplitude of R/G/B signals to be significantly more than standard 1.0v peak-to-peak. At least, I've heard complaints from a person who've connected his ZX Spectrum 128k's RGB output to such monitor, that the picture was too much faded.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-02-16T14:23:29.863" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13803" PostTypeId="1" AcceptedAnswerId="13816" CreationDate="2020-02-16T15:34:00.787" Score="18" ViewCount="5437" Body="&lt;p&gt;Looking at the development and architecture of the Z80, it appears to be a scaled-down, cost-reduced (in terms of total system cost), clone of the Intel 8080. It only used a 4-bit ALU. I assume this would have reduced its performance considerably.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the Z80 out performed the Intel version and nearly displaced it completely in the CP/M market. How did Zilog design their ALU to both out-perform and save cost?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Clarification&lt;/strong&gt;: Put slightly different, the Z80 performs 8080-alike operations in the same number of cycles whilst having an ALU that operates on half as many bits per cyle. How? &lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-02-16T18:04:55.623" LastActivityDate="2020-11-18T23:32:51.533" Title="Why did the Z80 with 4-bit ALU out-perform the fully 8-bit Intel 8080?" Tags="&lt;z80&gt;&lt;8080&gt;&lt;cp-m&gt;&lt;alu&gt;" AnswerCount="6" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13804" PostTypeId="2" ParentId="13747" CreationDate="2020-02-16T15:53:24.123" Score="1" Body="&lt;p&gt;The Motorola 68000 (first built in 1974) inside the TI-89 graphing calculator is supposed to be able to play music by repurposing the data transfer jack cable, although I never tried it personally. See &lt;a href=&quot;https://www.ticalc.org/pub/89/asm/sound/&quot; rel=&quot;nofollow noreferrer&quot;&gt;examples of programs&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I'm not certain it is possible to do something else while this runs, some of the programs listed say &quot;able to play of the sound in background task&quot;.&lt;/p&gt;&#xA;" OwnerUserId="16303" LastActivityDate="2020-02-16T15:53:24.123" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13805" PostTypeId="2" ParentId="13803" CreationDate="2020-02-16T16:33:44.360" Score="26" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;... a scaled-down, cost-reduced, clone of the Intel 8080.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Z80 had a massively extended instruction set, featured more addressing modes and had more registers than the 8080.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also had a built-in DRAM refreshing logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... and it was more expensive than the 8080!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the opposite of &quot;cost-reduced&quot;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It only used a 4-bit ALU. I assume this would have reduced its performance considerably.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Obviously the 8080 was not designed in an &quot;optimal&quot; way; as far as I have read the tables correctly, the 8080 needs the same number of cycles as the Z80 for most instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, a program written for the 8080 will run with the same speed on the Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, a program written for the Z80 (if no 8080 compatibility is required) would use the additional instructions and addressing modes of the Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Replacing 4 or 5 8080 instructions by a single Z80 instruction will of course speed up the program.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2020-02-16T16:33:44.360" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13806" PostTypeId="2" ParentId="13803" CreationDate="2020-02-16T17:14:50.003" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why did the Z80 with 4-bit ALU out-perform the fully 8-bit Intel 8080?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Did it? I guess this depends on what 'performance' meant here.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's about &lt;strong&gt;instructions per clock&lt;/strong&gt;, then &lt;strong&gt;No&lt;/strong&gt;. They are, for all practical purposes, identical.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's about reaching &lt;strong&gt;higher clock speed&lt;/strong&gt;, then &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's about an &lt;strong&gt;increased instruction set&lt;/strong&gt;, then as well &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's about &lt;strong&gt;sales&lt;/strong&gt;, then at best a &lt;strong&gt;Maybe&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it's about &lt;strong&gt;usage in cheap home computers&lt;/strong&gt;, then most definitely &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, I guess it would help to know what should be considered 'out-performing'.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Looking at the development and architecture of the Z80, it appears to be a scaled-down, cost-reduced, clone of the Intel 8080.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;True. That and a greatly improved interrupt handling - like the majority of microprocessors at the time it was designed for embedded application; having the fastest interrupt handling at the time, combined with full code (and large hardware) compatibility and optional higher clock speed was a killer USP. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It only used a 4-bit ALU. I assume this would have reduced its performance considerably.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's the fun part, as it doesn't. Using a half-sized ALU, while staying within the 8080 timing is another optimization. This was possible as Frederico Faggin figured out a way to stay within 8080 timing (which he had to do) but saving on half the ALU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Changing ('improving') instruction timing was neither a goal, nor would it have been of any help, as it would  not have resulted in any speed improvement. At least not without requiring faster memory as well. A no-go when intending to build a cheaper chip.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;However, the Z80 out performed the Intel version and&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Again, this needs a definition of what out-performing should mean.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;nearly displaced it completely in the CP/M market.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;True. But while the CP/M market is quite visible, it was always only a tiny fraction of the CPU market. The true market in which Intel and Zilog were competing was about embedded systems, were Intel had a very strong hold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the dominance of the Z80 here was due less to higher performance, but rather to lower cost. The chip itself was lower priced than Intel's 8080/85 and it needed fewer support chips. Both were very important factors in the extremely cost-sensitive market of small/home computers. For embedded, both factors play a lesser role. Here, not only are the margins &lt;em&gt;way&lt;/em&gt; higher, but also long term-supply reliability defines products - a card Intel played quite well until 486 times.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How did Zilog design their ALU to both out-perform and save cost?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The ALU did not out-perform: instructions executed equally fast. This saved money due to lower production cost. It's also important to keep in mind that halving the ALU was just a tiny part of savings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;It was all that was needed to stay on par with the 8080&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Clarification:&lt;/strong&gt; Put slightly differently, the Z80 performs 8080-alike operations in the same number of cycles whilst having an ALU that operates on half as many bits per cycle. How?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Essentially by using a 4 bit wide (on entry) deep pipeline, aka a set of two 4-bit latches.  Ken Shirriff did a good &lt;a href=&quot;http://www.righto.com/2013/09/the-z-80-has-4-bit-alu-heres-how-it.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;writeup of the internal structure&lt;/a&gt; of the ALU and how it's integrated.  There is also a &lt;a href=&quot;//electronics.stackexchange.com/a/436325/51716&quot;&gt;great answer&lt;/a&gt; on &lt;a href=&quot;//electronics.stackexchange.com/&quot;&gt;Electronics.SE&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2020-02-17T10:42:57.487" LastActivityDate="2020-02-17T10:42:57.487" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13807" PostTypeId="1" CreationDate="2020-02-16T17:21:15.067" Score="0" ViewCount="145" Body="&lt;p&gt;I don't see it listed anywhere in the 0000-ffff address space. Is it controled by the CPU? Or something else entirely?&lt;/p&gt;&#xA;" OwnerUserId="13631" LastActivityDate="2020-02-16T17:35:46.763" Title="How is the LCDC (LCD Control) register manipulated on the Gameboy?" Tags="&lt;game-boy&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13808" PostTypeId="2" ParentId="13807" CreationDate="2020-02-16T17:35:46.763" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Video_Display&quot; rel=&quot;nofollow noreferrer&quot;&gt;LCD control block&lt;/a&gt; is located at FF40h and the &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/LCDC&quot; rel=&quot;nofollow noreferrer&quot;&gt;LCDC&lt;/a&gt; is the first thereof, see as well the &lt;a href=&quot;http://bgb.bircd.org/pandocs.htm#videodisplay&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pandocs&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-02-16T17:35:46.763" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13809" PostTypeId="1" AcceptedAnswerId="13824" CreationDate="2020-02-16T18:32:50.343" Score="38" ViewCount="9204" Body="&lt;p&gt;In the mid-1990s while a student at a US university during a computer science lecture, my professor (not a TA or grad student) told us a story of &quot;witnessing&quot; a large, then old-fashioned metal hard disk platter somehow breaking free of its mounting &lt;em&gt;while spinning&lt;/em&gt; and thus flying through the air to embed itself violently halfway through one of the walls of the room.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The unfortunate hard drive in question was a cabinet-sized device. But not a tape machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time, I don't recall any questioning of the veracity of this story, but in hindsight it sounds pretty fishy. IIRC the point of the story was something about information density and how then-modern (1990s) hard drives were so much smaller &amp;amp; more capable. So it might have just been a convenient way of making his point. Or at least an embellishment. I'll allow that it could have been passed down and not meant as an outright fabrication but was still presented as a real event.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing some web searches turn up nothing. On the other hand... can't prove a negative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any convincing or reliable accounts of an incident like this? I guess  the alleged event would have taken place between ± 1975-1990 based on what I think my prof's rough age was at the time.&lt;/p&gt;&#xA;" OwnerUserId="11795" LastEditorUserId="11795" LastEditDate="2020-02-17T16:51:21.447" LastActivityDate="2020-02-19T22:45:29.323" Title="Apocryphal (?) tale of hard drive platter propelled through a wall?" Tags="&lt;history&gt;&lt;hard-disk&gt;" AnswerCount="5" CommentCount="18" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13810" PostTypeId="2" ParentId="13809" CreationDate="2020-02-16T18:49:10.340" Score="9" Body="&lt;p&gt;Yeah, that sounds quite fishy. Usually I'd say it's impossible. I've seen classic stacks (and drives *1) break in many ways, but never having a platter go astray.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The disks are aluminium and the stored energy is rather small (after all, heavy disks mean high energy use).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A stack is fixed with about a dozen bolts roughly M4 size. An M4 bolt needs a break force of more than 7 kN (for standard 8.8), so it's pretty hard to break a dozen of them. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next the drive is a massive steel shaft, needing even higher force to let go.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;So even if they break free, there is no chance that aluminium disk could cut thru either.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Further the disk is covered by a steel frame, which any 'escaping' disk would have to penetrate.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And finally still have enough energy to fly across a room &lt;em&gt;and&lt;/em&gt; penetrate a wall?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Not really likely.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, there are many different constructions of disks, and some may be more prone to 'ejecting' a platter. But never in a way that dramatic. So my assumption it's a story based on misinterpretation of wording paired with retelling over many years and sources.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The most impressive I ever had to handle as service engineer was a disk motor coming loose. It was a drive sized like a half height refrigerator, or a top loading washing machine - well, the stack was loaded from above anyway :) The heaviest single part was the motor. About 50 kg any too large to fit into a alpha spider tunk :) It was a direct drive synchronous motor - mind you, these were the late 70s, way before today's tiny implementations - storing the most rotation energy within. So that baby got loose but even this huge moving mass wasn't able to even make a dent in the outer sheet metal of the drive.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="16312" LastEditDate="2020-02-17T08:02:51.563" LastActivityDate="2020-02-17T08:02:51.563" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13811" PostTypeId="2" ParentId="13809" CreationDate="2020-02-16T19:14:53.600" Score="15" Body="&lt;p&gt;I've heard of disk heads being propelled at great velocity, though that may be just a scary story told to young people, too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the disc store from a 1965 KDF9:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MsRTF.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MsRTF.png&quot; alt=&quot;KDF9 disc, from 1965&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a read/write head contacts the spinning disk, it could (I suppose) get ripped off the actuator arm, and thus be accelerated to the extent that it penetrates the glass on the door and causes mayhem in the machine room.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Physically-large removable disks would not have this problem - the disk was lowered into a well in the drive, in the manner of top-loading washing machines. Thus there's quite a lot of plastic and metal between the disk and the unlucky bystander.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.computerhistory.org/revolution/memory-storage/8/327/926&quot; rel=&quot;noreferrer&quot;&gt;This Bryant device&lt;/a&gt; looks much more likely to cause mayhem &lt;strong&gt;if&lt;/strong&gt; the disks ever got loose, due to the vertical mounting of the huge platters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ey04x.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ey04x.jpg&quot; alt=&quot;Bryant large disk drive&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It occurs to me that when disk drives were first being developed, it's quite likely that the mechanisms were exposed (since engineers would presumably be tinkering and adjusting the mechanical aspects of the device) and &lt;strong&gt;then&lt;/strong&gt; your chances of witnessing unconstrained projectile ejection are somewhat greater.  So maybe this is a tale from pre-commercialization of disks.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="7922" LastEditDate="2020-02-18T23:58:16.797" LastActivityDate="2020-02-18T23:58:16.797" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13812" PostTypeId="2" ParentId="13809" CreationDate="2020-02-16T19:21:20.490" Score="64" Body="&lt;p&gt;Some &quot;informed speculation&quot; based on my &quot;day job&quot; which involves worrying about containment of rotating objects if they break (specifically, rotating parts inside jet engines)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotating parts of early disk drives were substantial objects. For example the IBM 350 had 24 inch diameter platters rotating at 1500 RPM, with a rotating mass of about 10 pounds. That means the outer edge of the disk is traveling at about 100 mph. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the spindle of such a disk broke, it's possible that the complete platter would &quot;drift &quot;sideways, still spinning, until it hit the inside of the drive casing. At that point it would attempt to orbit around the inside of the drive, until something gave way - more likely the plastic lid of the drive than the disks themselves. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's &lt;em&gt;conceivable&lt;/em&gt; that a 10-pound rapidly spinning object could have launched itself across the machine room at say 50 mph. I guess that could make quite a dent in flimsy office drywall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether this ever &lt;em&gt;actually&lt;/em&gt; happened is another question, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example of how much damage this sort of thing &lt;em&gt;could&lt;/em&gt; cause, there is a nice piece of evidence preserved in one of our works test facilities. On one test failure, a similar sized piece of metal came loose, though it was spinning at nearer 10000 RPM than 1500 and the axis was horizontal not vertical. It smashed through a quarter-inch steel plate that was supposed to contain it, hit the brick wall of the building, and because of its rotation climbed up the wall, ran across the ceiling, down the other wall, and across the floor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It made three complete orbits of the room before gravity finally took control, it lost contact with the ceiling, and came to a stop. The marks on the walls and ceiling are still there after about 40 years, as a reminder of what &lt;em&gt;can&lt;/em&gt; go wrong!&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2020-02-16T19:21:20.490" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13813" PostTypeId="1" CreationDate="2020-02-16T20:20:53.763" Score="3" ViewCount="208" Body="&lt;p&gt;Commodore BASIC 7.0 that came with the Commodore 128 provided commands for playing music notes and setting different instruments. The play function even had a feature that played a note in the background, so that it was possible to play notes simultaneously. While I understand that these features are still quite limited in comparison to machine language IRQ players, I wonder if there exist some non-trivial BASIC V7.0 music demos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am aware of music pieces in BASIC using lots of POKEs for the Commodore 64 (for example &lt;a href=&quot;https://www.youtube.com/watch?v=P6UYzU-mtwI&quot; rel=&quot;nofollow noreferrer&quot;&gt;these ones&lt;/a&gt;) and I know that most of them would run on the C128 as well, but I'm explicitly looking for demos that use BASIC V7.0 commands like PLAY, FILTER and ENVELOPE.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-02-18T20:27:08.463" Title="Are there Commodore BASIC 7.0 music demos?" Tags="&lt;basic&gt;&lt;commodore-128&gt;&lt;sid&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13814" PostTypeId="1" AcceptedAnswerId="13815" CreationDate="2020-02-16T20:37:16.817" Score="11" ViewCount="977" Body="&lt;p&gt;The 8087 floating-point coprocessor presumably used different ESC codes to the 8089 input/output coprocessor, since then they would be able to listen over the bus for their own ESC instructions. The opcodes of the ESC instructions are in the range 0xD8..0xDF, so did the 8087 use all those beginning with D8, for example, and the 8089 those beginning with another byte? Or was it more complicated than this?&lt;/p&gt;&#xA;" OwnerUserId="15219" LastActivityDate="2020-02-20T17:03:25.827" Title="Difference between Intel 8087 and 8089 opcodes" Tags="&lt;8086&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13815" PostTypeId="2" ParentId="13814" CreationDate="2020-02-16T21:08:08.537" Score="11" Body="&lt;p&gt;&lt;em&gt;[Ok, I did dig out the manual, now improved with details about the hardware part of the communication protocol]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or was it more complicated than this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, it was completely different. The 8089 did not use any opcodes - at least not any within the 8086's instruction stream. The 8087 is an extension to the CPU, while the 8089 is a separate CPU with its own instruction set, its own programs and (depending on the setup) a different or even separate address space.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Workings&lt;/h2&gt;&#xA;&lt;p&gt;Jobs between the 8086 side and the 8089 are exchanged by the main CPU setting up a parameter block (CCB - Chanel Control Block) containing a command (CCW- Channel Controll Word) and the address of another Parameter Block (this time called as such: PB). If the command is about starting some 8089 program, PB will hold its address (*1) in the first (when in I/O Space) or first two (when in System Space) words. Followed by optional parameters. Usually at least containing some buffer address were data is to be found or returned.&lt;/p&gt;&#xA;&lt;p&gt;The program to be executed (on the 8089 side) may or may not be part of the 8086' address space (*2). Similar for buffers, although, some shared memory does usually exist to speed up data exchange. The 8089 contains two channels which are operated in a hardware multiplexing scheme. Prioritisation between each channel and shared memory (the 8086) is configured within the CCW.&lt;/p&gt;&#xA;&lt;p&gt;When all data structures are prepared (for the channel to be used), the 8086 selects either channel by setting the &lt;code&gt;SEL&lt;/code&gt; pin and pulling the &lt;code&gt;CA&lt;/code&gt; pin to get the 8089's attention (*3). These pins are usually hooked up to some I/O port (on the 8086 side).&lt;/p&gt;&#xA;&lt;p&gt;When &lt;code&gt;CA&lt;/code&gt;  goes low, the 8089 reads the CB for the channel addressed by &lt;code&gt;SEL&lt;/code&gt; and transfers all relevant date into internal registers. When done, it sets the Busy-Flag to 0FFh and executes whatever command is stored in the the CCW. The 8086 must wait for Busy before executing any other 8089 command.&lt;/p&gt;&#xA;&lt;p&gt;When done, the 8089 will reset the Busy-Flag 0h, signalling that the channel is finished. The same happens as well when a channel program stops at a defined point (usually by a &lt;code&gt;HALT&lt;/code&gt; instruction). The Busy-Flag can be polled by the 8086 as the CB is always in shared memory. More commonly the interrupt facility is used. When enabled by the CCW, the coresponding interrupt pin (&lt;code&gt;SINTR1&lt;/code&gt; or &lt;code&gt;SINTR2&lt;/code&gt;) is pulled, at the &lt;em&gt;after&lt;/em&gt; Busy is reset.&lt;/p&gt;&#xA;&lt;p&gt;Using the &lt;code&gt;HALT&lt;/code&gt; instruction allows very nifty communication schemes, starting from operator action (&amp;quot;Please Mount Disk xxxxxx&amp;quot;) all the way to streaming like operation.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Overall, this concept is very much like that seen on classic mainframes. Here also, one or more IOCs handle one or more channels each. Each IOC operated independently of each other and the CPU(s), multiplexing all channels offered. Unlike mainframe channels, the Intel concept was much more flexible as the 8089 was a complete programmable CPU. Beside simple block I/O and collection of character I/O, much more could be offloaded.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Programs can reside in System Space (20 bit address space) or I/O-Space (16 Bit address space), always as seen from the 8089 side - wich may have a different mapping then the 8086.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Address space organisation is extreme flexible, thus hard to describe a default situation. In the most simple configuration it might be the same memory and I/O address spaces as the 8086 sees. Even in local configuration (that is when the bus is shared with the 8086) parts of the address space can be different. Much more so in remote configuration, like the 8089 being its own Multibus system, communicating only via a few shared memory sections.&lt;/p&gt;&#xA;&lt;p&gt;*3 - This mechanic is as well used to select between multiple 8089 within the system during first time initialization after reset.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Depending on the machine design, this could instead be some memory flag to be polled. But I know of no system using an 8089 that wasted any resources here.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-20T17:03:25.827" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13816" PostTypeId="2" ParentId="13803" CreationDate="2020-02-16T21:40:40.210" Score="14" Body="&lt;p&gt;Possibly a simple logic trick.  The slow path in addition is carry propagation (not the individual half-adders).  You can thus often double the clock rate by pipelining the carry.  If you pipeline the carry, then you can reuse the bit adders at the beginning of the chain, and put them at the end.  Depending on the ratio between pipeline registers, reuse muxes, and ALU logic gates, this trick can allow a savings in total gate count (die area, cost), as well as increasing the max clock rate (for a given technology level).  Or you can just take one or the other potential advantage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(A similar trick used on entire instruction sets is one path to the philosophy of parallel pipelined RISC architectures.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Also possibly related is that common practice in minicomputer logic design in that era was often done with 4-bit 2901's or 4-bit slice 74xx181 ALU's, with separate carry lookahead logic.)&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2020-02-16T23:09:19.980" LastActivityDate="2020-02-16T23:09:19.980" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13817" PostTypeId="1" CreationDate="2020-02-17T14:08:17.597" Score="7" ViewCount="699" Body="&lt;p&gt;It seems like an odd key to omit, given how frequently used it is and given that both the Spectrum + and 128 have one, which acts like backspace does on a modern PC. They could have swapped it for two of the lesser-used characters and placed those on alphanumeric keys with a modifier.&lt;/p&gt;&#xA;&lt;p&gt;Reference picture from Wikipedia:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Q7bBW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q7bBW.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3776" LastEditorUserId="6659" LastEditDate="2020-07-10T12:55:21.573" LastActivityDate="2020-07-10T13:08:44.160" Title="Why did the Sinclair QL keyboard lack a Delete key?" Tags="&lt;keyboards&gt;&lt;sinclair&gt;&lt;sinclair-ql&gt;" AnswerCount="2" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13818" PostTypeId="1" AcceptedAnswerId="13819" CreationDate="2020-02-17T15:18:33.167" Score="4" ViewCount="416" Body="&lt;p&gt;Yesterday I was digging through a rather long directory path to watch an episode of &lt;em&gt;Fist of the North Star&lt;/em&gt; (on Windows 8.1) when I was hit with an error message:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;The path name is too long&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I looked into it and found that Windows doesn't support a file path name greater than 260 bytes. In discovering this rather shocking limitation, I kept seeing a quote bounced around as a joke, &quot;640K RAM is more than enough.&quot; This quote was attributed to Bill Gates. Where did this supposed quote originate?&lt;/p&gt;&#xA;" OwnerUserId="15297" LastActivityDate="2020-02-17T15:30:52.323" Title="Origin of &quot;640K RAM is enough&quot; quote" Tags="&lt;microsoft&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13819" PostTypeId="2" ParentId="13818" CreationDate="2020-02-17T15:30:52.323" Score="7" Body="&lt;p&gt;&lt;a href=&quot;https://quoteinvestigator.com/2011/09/08/640k-enough/&quot; rel=&quot;noreferrer&quot;&gt;Quote Investigator&lt;/a&gt; says that, according to Fred Shapiro, the earliest known instance of the quote is &lt;a href=&quot;https://books.google.com/books?id=2C4EAAAAMBAJ&amp;amp;lpg=PP1&amp;amp;hl=fr&amp;amp;pg=PA5#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;the April 29, 1985 issue of &lt;em&gt;Infoworld&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;When we set the upper limit of PC-DOS at 640K, we thought nobody would ever need that much memory.&lt;/em&gt; — William Gates, chairman of Microsoft&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/7817/79&quot;&gt;Who set the 640K limit?&lt;/a&gt; and &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/8511/79&quot;&gt;Why did Windows pick 260 characters as the maximum path length?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-02-17T15:30:52.323" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13820" PostTypeId="2" ParentId="13803" CreationDate="2020-02-17T16:25:06.327" Score="2" Body="&lt;p&gt;I'm not familiar with the 8080's internal design, but the Z80 had, in addition to a general-purpose four-bit ALU, a separate 16-bit limited-function ALU (operations limited to adding or subtracting one) which sat on a 16-bit bus with all of the registers.  In addition, a few of the 16-bit registers like PC and SP were isolated from the rest of the registers by a set of pass gates, which meant that the 16-bit ALU could be used to increment PC or decrement SP at the same time as other operations involving other registers were processed by the four-bit ALU.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-02-17T16:25:06.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13821" PostTypeId="2" ParentId="13803" CreationDate="2020-02-17T17:07:22.280" Score="1" Body="&lt;p&gt;Forgive me if this is a repeat, but I didn’t see it mentioned.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If 8080 compatibility isn’t needed, the ability to swap an entire register set instead of using a stack makes context switching faster, especially for an interrupt service routine.&lt;/p&gt;&#xA;" OwnerUserId="10645" LastActivityDate="2020-02-17T17:07:22.280" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13822" PostTypeId="2" ParentId="13813" CreationDate="2020-02-17T17:26:49.740" Score="2" Body="&lt;p&gt;While not exactly examples of outstanding music, I knew that there was a C128 demo program written in BASIC to show off the capabilities of BASIC 7.0. In addition to graphics, it also demonstrated some music capabilities. I believe the 8-bit Guy featured it in his &lt;a href=&quot;https://www.youtube.com/watch?v=wzMsgnnDIRE&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore 128 video on history of Commodore&lt;/a&gt;, but there is also another one that I found from a quick google search here: &lt;a href=&quot;https://www.youtube.com/watch?v=wyR9aEVNP5Y&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=wyR9aEVNP5Y&lt;/a&gt;. If anything, this gives two public examples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would love to hear if anyone has found anything more elaborate!&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2020-02-17T17:26:49.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13823" PostTypeId="1" AcceptedAnswerId="13834" CreationDate="2020-02-17T17:36:47.827" Score="9" ViewCount="264" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/71/nick-westgate&quot;&gt;Nick Westgate&lt;/a&gt; posted a comment a few years back on &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1312/what-makes-slot-7-of-the-apple-unique-from-1-6-and-how-was-this-used&quot;&gt;a question about how slot 7 was unique&lt;/a&gt; stating that &quot;Slot 1 on the //e is also unique - it can be used to replace the keyboard&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was it about slot 1 on the //e that it could do this? How and was it ever implemented? Was it only the //e or did the earlier ]['s or perhaps later IIgs support this?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2020-02-18T23:39:40.773" Title="How can slot 1 of the Apple ][ replace the keyboard?" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13824" PostTypeId="2" ParentId="13809" CreationDate="2020-02-17T17:50:12.210" Score="23" Body="&lt;p&gt;There is also &lt;a href=&quot;https://books.google.com/books?id=Gb6vumaGwJAC&amp;amp;lpg=PA348&amp;amp;ots=Zp1JHLKLPJ&amp;amp;dq=foonly%20crash&amp;amp;pg=PA348#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;this tale&lt;/a&gt; that I read recounted in &lt;em&gt;Philip and Alex's Guide to Web Publishing&lt;/em&gt;, although the disk pack was intentionally hurled through the wall in a fit of temper:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Lsai8.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Lsai8.png&quot; alt=&quot;Excerpt from Philip and Alex&amp;#39;s Guide to Web Publishing article&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;That night, the Foonly crashed. A Foonly was a clone of the PDP-10, a mainframe computer designed by Digital in the 1960s. MIT and Stanford people loved the PDP-10 but couldn't afford DEC's million dollar price tags. So there were these guys in a basement in California smoking dope and wirewrapping clones that were one-third the speed and one-twentieth the cost. Nobody every figured out why they called the machines Foonlies.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Moon was a superb hardware engineer and nobody doubted that he would get the Foonly up and running. Still, people were a bit surprised when a huge steel cylinder came crashing through the machine room wall. The cause of the crash had been one of those washing machine-sized Control Data T-300 disk packs. The cylindrical missile had been the spindle holding together the bad 12-inch platters. Moon had hurled it through the wall after determining its guilt in the crime of the Foonly crash. I went back to my office and taped up a poster.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This story illustrates that great programmers are not necessarily patient. One of the things that drove them crazy about the object systems of the 1970s (Smalltalk, Lisp Machine Flavors) was that if you changed a class definition, the existing instances&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="16317" LastEditorUserId="16327" LastEditDate="2020-02-19T00:01:45.283" LastActivityDate="2020-02-19T00:01:45.283" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13826" PostTypeId="1" AcceptedAnswerId="13828" CreationDate="2020-02-17T20:36:23.587" Score="14" ViewCount="823" Body="&lt;p&gt;I read &lt;a href=&quot;http://z80.info/decoding.htm&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; that if the Z80 encounters e.g. multiple 0xdd prefixes in sequence, for each 0xxdd except the last it acts almost like a NOP, but does not allow interrupts to occur immediately after &quot;executing&quot; the discarded byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: If an instruction is prefixed by 0xdd, but not affected by the prefix (i.e. it does not act on the HL register), does the 0xdd also act like a NOP &lt;strong&gt;and&lt;/strong&gt; disallow interrupts? Or is it a simple NOP in this case? Or does it not have an effect at all? The documentation I could find was not very clear on this.&lt;/p&gt;&#xA;" OwnerUserId="16318" LastActivityDate="2020-02-17T21:55:14.420" Title="Does the Z80 allow interrupts after processing and ignoring a 0xdd prefix?" Tags="&lt;z80&gt;&lt;emulation&gt;&lt;interrupt&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13827" PostTypeId="2" ParentId="13817" CreationDate="2020-02-17T20:37:52.440" Score="6" Body="&lt;p&gt;As Uncle Bod already &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13817/why-did-the-sinclair-ql-keyboard-lack-a-delete-key#comment44002_13817&quot;&gt;pointed out&lt;/a&gt;, the QL did not leave out Rubout (as Sinclair called it). It's just not printed at the keycap. &lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;&amp;lt;-&lt;/kbd&gt;, a combination that seams quite logical to me, will work as expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having it as shifted function of on another key isn't as unusual as it seams. Already the &lt;a href=&quot;https://en.wikipedia.org/wiki/ADM-3A#ADM-3A&quot; rel=&quot;nofollow noreferrer&quot;&gt;ADM-3A&lt;/a&gt; did place RUB as &lt;a href=&quot;https://en.wikipedia.org/wiki/ADM-3A#/media/File:KB_Terminal_ADM3A.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;-&lt;/kbd&gt;&lt;/a&gt;(*1), which in turn took the placement right of &lt;code&gt;RUB&lt;/code&gt; at the end of the middle (ASDF) row from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletype_Model_33&quot; rel=&quot;nofollow noreferrer&quot;&gt;Modell 33 TTY&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The ADM-3A is notorious for having introduced several key assignments - like &lt;kbd&gt;H&lt;/kbd&gt;/&lt;kbd&gt;J&lt;/kbd&gt;/&lt;kbd&gt;K&lt;/kbd&gt;/&lt;kbd&gt;L&lt;/kbd&gt; for &lt;code&gt;vi&lt;/code&gt; cursor movement :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-21T23:43:27.283" LastActivityDate="2020-02-21T23:43:27.283" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13828" PostTypeId="2" ParentId="13826" CreationDate="2020-02-17T21:35:51.097" Score="11" Body="&lt;p&gt;The &lt;code&gt;0xDD&lt;/code&gt; does not allow an interrupt to happen after it's been fetched, no matter what comes next in the instruction stream.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Wayne Conrad pointed out, otherwise the CPU would have to time travel into the future to find out what instruction is going to get fetched.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-02-17T21:35:51.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13829" PostTypeId="1" AcceptedAnswerId="13833" CreationDate="2020-02-17T21:43:38.170" Score="10" ViewCount="1287" Body="&lt;p&gt;The MC6809 is unusual for an 8-bit processor of its era in having a hardware multiply instruction.  &lt;code&gt;MUL&lt;/code&gt; multiples the 8-bit unsigned integer in the A register with the 8-bit unsigned integer in the B register, leaving the product in the 16-bit D register:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         lda   #12             A=12&#xA;         ldb   #34             B=34&#xA;         mul                   D=408&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Interestingly, the mul instruction sets the C flag to bit 7 of the D register.  Bit 7 is the the most significant bit of the least significant byte.  According to the &lt;a href=&quot;http://www.coco3.com/community/wp-content/uploads/2010/03/6x09_Instruction_Sets.pdf&quot; rel=&quot;noreferrer&quot;&gt;Motorola 6809 and Hitachi 6309 Programmer's Reference&lt;/a&gt;, p. 100, that is to support rounding:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Carry flag is set equal to bit 7 of the least-significant byte so that rounding of the most-significant byte can be accomplished by executing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ADCA #0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But what does rounding mean in the context of integer multiplication?  How is this rounding capability used in practice?&lt;/p&gt;&#xA;" OwnerUserId="3324" LastActivityDate="2020-02-18T19:19:02.577" Title="How to use rounding with 6809 multiplication" Tags="&lt;6809&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13830" PostTypeId="2" ParentId="13826" CreationDate="2020-02-17T21:55:14.420" Score="4" Body="&lt;p&gt;The Z80 increments the program counter while it is performing an opcode fetch.  As a consequence, by the time an opcode byte is fetched, the Z80 will be committed to completing the instruction before any interrupt may occur.  If a DD or FD happened to be followed by an opcode byte whose meaning would not be affected by it (including another DD or FD prefix), program behavior would not be adversely affected if the Z80 were to take an interrupt before fetching the next opcode byte, but there would be no way the Z80 could know that until after the byte was fetched, rendering the question moot.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-02-17T21:55:14.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13831" PostTypeId="2" ParentId="13829" CreationDate="2020-02-17T22:08:51.207" Score="5" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;It allows the use of MUL as part of a Multiply-Accumulate operation, by providing the rounding factor from the multiplication for a follow up addition.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read:&lt;/h2&gt;&#xA;&lt;p&gt;It's not about (mathematical) rounding of the result as 16 bit value, as a multiplication will never have any remainder. It's about supporting rounding toward an 8 bit value as it is needed for Multiply-Add (&lt;a href=&quot;https://en.wikipedia.org/wiki/Multiply%E2%80%93accumulate_operation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multiply-Accumulate&lt;/a&gt;) operations, for example when scaling (*1).&lt;/p&gt;&#xA;&lt;p&gt;By moving the relevant bit position into carry, it can be used for rounding 'for free' since ADCx dies adding and rounding in one step (Acc-old plus new-value plus Carry)&lt;/p&gt;&#xA;&lt;p&gt;A multiply-add operation multiplies two factors and adds the result in an accumulator. That's basically an &lt;code&gt;Acc = Acc + (B * C)&lt;/code&gt; operation. When using the 6809 MUL with two 8 bit number for B and C, the result in D can as well be seen as having an 8 bit result in A with the carry set if the high bit in B is set. Now a single ADC can be used to summ up this with the value of Acc:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;      LDA   Bval    ; Load B Value (usually some input list)&#xA;      LDB   Cval    ; Load C Value (usually a scaling value)&#xA;      MUL           ; 8x8 Multiply to scale&#xA;      ADCA  Acc     ; Adding the Accumularoe (so far) plus new value plus Carry for rounding&#xA;      STA   Acc     ; Update Accumulator&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It's a most nifty use of what is already present to provide a simple 8x8 bit multiplication as well as a cheap way to synthesize a MAC operation as needed for signal processing, graphics and many more.&lt;/p&gt;&#xA;&lt;p&gt;MAC instructions are part of many modern micro controller and an essential part of any DSP, GPU and modern CPU's from ARM to x86. For example do x86 SIMD instruction sets include &lt;a href=&quot;https://en.wikipedia.org/wiki/FMA_instruction_set&quot; rel=&quot;nofollow noreferrer&quot;&gt;FMA instructions&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Scaling is just the most easy to understand example. There are many other uses.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-17T22:50:20.513" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13832" PostTypeId="2" ParentId="13829" CreationDate="2020-02-17T22:10:19.767" Score="6" Body="&lt;p&gt;Like it says, it is useful for rounding the most significant byte. If you are only interested getting a 8-bit answer, and thus want to discard the low 8 bits of the multiplication. If the answer would be 234.9 for example, taking the high 8 bits directly would truncate to 234. Rounding to 235 would be closer to result. It could be accomplished by a 16-bit addition of 0.5 (128) and then using the truncated high 8 bits. But as the carry flag is already set if least significant byte is 128 or more, it will be enough to add 0 with carry to most significant byte. That is actually a neat trick for rounding the result to 8 bits and is assisted by CPU in hardware.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-02-17T22:10:19.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13833" PostTypeId="2" ParentId="13829" CreationDate="2020-02-17T22:26:57.547" Score="10" Body="&lt;p&gt;The rounding capability is useful when doing fixed point math with exactly eight fractional digits.  For example, supposing that the number in A is a fixed-point number with 2 fractional digits, and the number in B is a fixed-point number with 6 fractional digits:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         lda   #%00100010      A=%001000.10=8.5&#xA;         ldb   #%11110000      B=%11.110000=3.75&#xA;         mul                   D=%00011111.11100000=31.875&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If we only want the integer result, we could take the most significant byte of the result, which throws away the fractional part:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         sta   result         Stores truncated result, 31&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, since the C flag has been set to the most significant fractional digit:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00011111.11100000&#xA;         ^&#xA;         C flag set to 1 to match this digit&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;We can round the integer result easily:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         adca  #0              A=32 (rounded result)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That gives us a more accurate result for this weird corner case where our fixed point multiplicands have exactly eight fractional digits between them.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Approximating division more accurately&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;If doing fixed point math with exactly eight fractional digits seems like a weird thing to build in support for, consider that it let lets you improve accuracy when approximating division of one eight-bit integer by an integer constant.  The 6809 doesn't have hardware division, but if you can accept the result being sometimes off by one, then the approximation is quick and easy, multiplying by the reciprocal of the dividend, converted to a fixed-point binary fraction.  You can do this without rounding and get results that are close, but often off by one.  With rounding, you improve accuracy and get results that are more often correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's divide 2 by 3.  This is done by multiplying 2 by 1/3.  We can't represent 1/3 exactly in binary, but we can get close:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         lda   #2&#xA;         ldb   #%01010101      B=%.01010101=0.33203125&#xA;         mul                   D=%00000000.10101010=0.6640625&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The integer part of the result is 0, which is only one off from the actual integer result, but we can do better:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         adca  #0              A=%00000001=1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For this case, where we are approximating dividing by three, then trying all 256 possible divisors without rounding gives us a mean absolute error of 0.66.  Not bad.  But with rounding, the mean absolute error goes down to 0.28.  Now the majority of the integer results are exactly correct.&lt;/p&gt;&#xA;" OwnerUserId="3324" LastEditorUserId="3324" LastEditDate="2020-02-18T19:19:02.577" LastActivityDate="2020-02-18T19:19:02.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13834" PostTypeId="2" ParentId="13823" CreationDate="2020-02-18T01:16:33.983" Score="7" Body="&lt;p&gt;From Sather's &lt;a href=&quot;https://archive.org/details/Understanding_the_Apple_IIe&quot; rel=&quot;nofollow noreferrer&quot;&gt;Understanding the Apple IIe&lt;/a&gt; on page 7-19, at the top of column 2:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Slot 1 has two signals connected which are not available at the other&#xA;  slots, ENKBD' and CLKEN'. These are present primarily for diagnostic&#xA;  and testing purposes, but innovative peripheral card designs could&#xA;  make good use of them. When ENKBD' is high, the keyboard ROM is&#xA;  inhibited and the other devices can place data on MD0-6 of the data&#xA;  bus when read access is made to $C000—$C01F. When the CLKEN' is high,&#xA;  the motherboard 14M signal is disabled, and a card in the auxiliary&#xA;  slot can inject an alternate master clockpulse reference onto the 14M&#xA;  line. If, as normally is the case, ENKBD' and CLKEN' are not connected&#xA;  on the Slot 1 card, motherboard pull-down resistors pull these lines&#xA;  low so the affected circuits can function normally.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The advantage of keyboards interfaced via ENKBD in slot 1 is that they would be compatible with software that directly accessed the soft-switches instead of using the firmware routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many 3rd-party keyboards existed, but I can't confirm if any used ENKBD. Here's a long &lt;a href=&quot;https://www.tifaq.org/archive/disability_keyboards.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;list of disability keyboards&lt;/a&gt; with around 30 supporting the Apple II family, but none exclusive to the //e.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The name &quot;Concept Keyboard&quot; was familiar to me, and there are some &lt;a href=&quot;https://www.applefritter.com/content/apple-mkiii-interface-card&quot; rel=&quot;nofollow noreferrer&quot;&gt;references to it using a large interface card&lt;/a&gt;, but it's listed as being also compatible with the Apple //c and IIgs, even though according to the Hardware Reference manual the IIgs didn't retain ENKBD in slot 1. The &lt;a href=&quot;http://www.computinghistory.org.uk/det/6999/Microterminals-Concept-A3-256-tablet-keyboard/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Concept A3 model&lt;/a&gt; appeared to use a much smaller card that doesn't use pin 35 which carried ENKBD on the //e.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2020-02-18T23:39:40.773" LastActivityDate="2020-02-18T23:39:40.773" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13836" PostTypeId="1" AcceptedAnswerId="13838" CreationDate="2020-02-18T08:28:47.110" Score="8" ViewCount="910" Body="&lt;p&gt;I don't see DEFUN in a ~1966 copy of PDP-6 LISP.  I do see it in a 1972 Maclisp.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AI memo 116A from 1967 doesn't have DEFUN.  (It does have MACRO.)&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2020-02-18T10:39:03.253" LastActivityDate="2020-02-18T10:50:32.047" Title="When was DEFUN added to Lisp?" Tags="&lt;ibm&gt;&lt;pdp-10&gt;&lt;lisp&gt;&lt;pdp-6&gt;&lt;pdp-1&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13837" PostTypeId="2" ParentId="13836" CreationDate="2020-02-18T08:39:18.833" Score="3" Body="&lt;p&gt;The &lt;code&gt;defun&lt;/code&gt; macro is just syntactic sugar for &lt;code&gt;define&lt;/code&gt; plus &lt;code&gt;lambda&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;InterLisp (1970) doesn't seem to have it either, so your MacLisp example is either the first, or pretty close to being the first.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-02-18T08:39:18.833" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13838" PostTypeId="2" ParentId="13836" CreationDate="2020-02-18T10:50:32.047" Score="11" Body="&lt;p&gt;From the MIT AI Lab file .INFO.; LISP ARCHIV for Maclisp updates:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;3/1/69 JONL&#xA;&#xA; THE CURRENT VERSION OF LISP, &quot;LISP 102&quot;, HAS&#xA;THE FOLLOWING AS-YET UNDOCUMENTED FEATURES:&#xA;&#xA;        1)&quot;DEFUN&quot; IS AN FSUBR USED TO DEFINE&#xA;FUNCTIONS. EXAMPLES ARE&#xA;        (DEFUN ONECONS (X) (CONS 1 X))&#xA;WHICH IS EQUIVALENT TO&#xA;        (DEFPROP ONECONS&#xA;                (LAMBDA (X) (CONS 1 X)&#xA;         EXPR)&#xA;&#xA;AND (DEFUN SMASH FEXPR (L) (RPLACD L NIL))&#xA; IS EQUIVALENT TO&#xA;        (DEFPROP SMASH&#xA;                (LAMBDA (L) (RPLACD L NIL))&#xA;         FEXPR)&#xA;THE NOVEL FEATURE OF &quot;DEFUN&quot; IS THAT ONE NEED&#xA; NOT BE SO CONCERNED WITH BALANCING&#xA;PARENTHESES AT THE VERY END OF THE FUNCTION&#xA;DEFINITION, SINCE THE TYPE FLAG MAY BE&#xA;OMITTED IF IT IS &quot;EXPR&quot;, AND APPEARS NEAR&#xA;THE FRONT OF THE &quot;DEFUN&quot; LIST IF IT IS SOME&#xA;OTHER.  ALSO, THE &quot;LAMBDA&quot; NEED NOT BE&#xA;DIRECTLY INSERTED.&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="142" LastActivityDate="2020-02-18T10:50:32.047" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13839" PostTypeId="1" AcceptedAnswerId="13840" CreationDate="2020-02-18T11:21:42.257" Score="25" ViewCount="7997" Body="&lt;p&gt;The 8051 is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Harvard_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;Harvard-based&lt;/a&gt; microcontroller, but it allows us to connect external memory and simulate &lt;a href=&quot;https://en.wikipedia.org/wiki/Von_Neumann_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;von Neumann's architecture&lt;/a&gt;. What is the main reason it was not used widely in 1980s home computers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was 8051 too late (1980)? Or has it too slow access to the external memory? Or is there a lack of an instruction set? Or is there another reason?&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="535" LastEditDate="2020-02-22T10:40:49.480" LastActivityDate="2020-02-22T10:40:49.480" Title="What is the reason the 8051 was not used in 8-bit computers?" Tags="&lt;8051&gt;" AnswerCount="7" CommentCount="12" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13840" PostTypeId="2" ParentId="13839" CreationDate="2020-02-18T12:27:16.923" Score="2" Body="&lt;p&gt;i8051 used shared buses which mean for simple connection of a memory you would need latches and some logic to select between RAM/ROM chips etc. That means more complicated circuitry and more ICs for design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the i8051 architecture is more suited for static programs in EPROM/EEPROM instead of in RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So a native bus driven CPU was the usual choice over i8051. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, in the case of consoles and TV games, the i8051 is a valid choice (you know, EPROM cartridges or fixed games; no programming or OS or whatever dynamic behavior whatsoever)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes i8051 is an MCU; that means it's an &quot;entire&quot; computer on single chip (apart abbreviations without (E)EPROM) for some specific task and use most of its pins as I/O ports ... so it's more suited for very different tasks than a standard home computer we know ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="7946" LastEditDate="2020-02-18T19:13:31.450" LastActivityDate="2020-02-18T19:13:31.450" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13841" PostTypeId="1" CreationDate="2020-02-18T15:25:52.713" Score="2" ViewCount="370" Body="&lt;p&gt;When Z80 first became available on the market in 1976 it was made using NMOS technology. It is the version that is likely to be most familiar to people interested in retro-computers. For example, to the best of my knowledge, all classical models of ZX Spectrum used NMOS version of the chip, sourced from several manufacturers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At some point in time, CMOS version of Z80 became available. The Wikipedia article on Z80 claims that CMOS version of Z80 was used in several portable computers, starting from Sharp PC-1500 in 1981. However, upon closer inspection it becomes clear that Sharp PC-1500 is based upon a very different CPU, namely LH5801 (see more details &lt;a href=&quot;http://www.pc1500.com/technical_reference_manual.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;). Two portable computers that I verified to be definitely using CMOS variant of Z80 are Epson PX-8 Geneva released in 1984 (it uses a Toshiba clone TMPZ84C00P-3) and Cambridge Z88 released in 1988 (it uses Zilog's Z84C0004PSC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two related questions, one factual and another partly opinion-based.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;When did the CMOS version of Z80 actually become available? I am interested to know both when Zilog released its own version of CMOS Z80 (clearly, prior to 1988) and also when other manufacturers made their CMOS versions of the chip (clearly, prior to 1984).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I was unable to find any mention of any non-portable home computer using a CMOS version of Z80. Of course, CMOS versions were mainly marketed as lower power versions of Z80, i.e. mostly relevant for portable devices. However, CMOS versions also have higher operating frequencies, so one could have used them to make faster Z80-based computers. Are you aware of CMOS Z80 being used in this capacity, especially in the 1980s? If not, do you have any explanation/hypothesis why this was the case?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="5039" LastEditorUserId="7946" LastEditDate="2020-02-18T17:55:48.587" LastActivityDate="2020-02-18T17:55:48.587" Title="When first CMOS versions of Z80 became available and were they ever used in (non-portable) home computers?" Tags="&lt;hardware&gt;&lt;z80&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13842" PostTypeId="2" ParentId="13839" CreationDate="2020-02-18T15:42:20.000" Score="4" Body="&lt;p&gt;While internally the 8051 is actually a stored program CPU, to the programmer and hardware designer, it behaves as a Harvard machine which separate program and data memories.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of this, programs can only execute from program memory.  Critically, there's no built-in way to modify program memory.  Even if you stored the program in RAM, there are no instructions to write to program memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means no loading machine language programs from cassette, or disk.   It means no ability to write machine language software on the machine directly for execution.  Any programability would be limited to an interpreter running from a fixed program.  It could run something like BASIC, but that would be all it could run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it's probably possibly to jury-rig up a circuit that could rewrite program memory under program control, it makes a lot more sense to use a processor specifically designed from the beginning to manipulate its programs as data, like the 8080 or the 6502.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-02-18T15:42:20.000" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13843" PostTypeId="2" ParentId="13839" CreationDate="2020-02-18T17:04:18.907" Score="9" Body="&lt;p&gt;Even if wired into a system that allows programs to be run from external RAM, the 8051 architecture is designed to allow quick operations with up to 256 bytes of internal RAM and internal I/O.  Accesses to anything outside that range are much slower.  This is great for applications which spend most of their time dealing with internal I/O, but not so great for computation-heavy applications which spend only a tiny portion of their time on I/O tasks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An optimal-speed function to copy a range of data between regions of external RAM would be something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mov dpl,r7&#xA;mov dph,r6&#xA;movx a,@dptr&#xA;inc dptr&#xA;mov r0,a&#xA;movx a,@dptr&#xA;inc dptr&#xA;mov r1,a&#xA;movx a,@dptr&#xA;inc dptr&#xA;mov r2,a&#xA;movx a,@dptr&#xA;inc dptr&#xA;mov r3,a&#xA;mov r7,dpl&#xA;mov r6,dph&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which is 24 cycles to read four bytes from external RAM at R6:R7 into registers and update R6,R7.  Writing the data back would be another 24 cycles, and looping would be another 2, for 50 cycles total for four bytes.  Since each CPU cycle is two RAM cycles, that would be 100 RAM cycles per byte.  An optimized loop on the 6502 using RAM at the same speed would average about 41 CPU cycles per byte, but only one RAM cycle per CPU cycle.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-02-18T17:04:18.907" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="13844" PostTypeId="2" ParentId="13839" CreationDate="2020-02-18T17:05:51.183" Score="24" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The 8051 is a Harvard-based microcontroller,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. It's a modified Von-Neumann design with non overlapping address spaces for program, data and I/O. There is no simultaneous access to program and data at the same time, which is &lt;em&gt;the&lt;/em&gt; basic feature for any Harvard design (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A modified Von-Neumann architecture combines the (software) advantage of separate address spaces with the need of only a single bus for data and program combined, which simplifies hardware design, quite important to save chip area on (early) microcontrollers.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What is the main reason it was not used widely in 80's home computers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A &lt;em&gt;main&lt;/em&gt; reason? Then it will be the same for all microcontrollers: &lt;strong&gt;It's a microcontroller&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microcontrollers are about providing as many programmable ports as possible. The 8051 came in a 40-pin device offering 32 of the 40 as free accessible I/O, organized as 4 ports. With external memory, 3 of the 4 are used for control lines and address/data, leaving a single 8-bit port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With external RAM/ROM, it gets reduced to a tiny (128 Bytes) RAM, 4 KiB of ROM, an 8-bit port and two timers. While not enough to define the core of a home computer of the early 1980s, it would need exactly the same external components as a standard CPU like an 8085: external latches, address decoding, RAM/ROM for program/data, video RAM, video controller and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering that an MCU is usually more expensive than a MPU, using the 8051 that way would make it more expensive than using an 8085 - and less flexible as well.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was 8051 too late (1980)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most definitely. Especially when considering that it would have taken 2-3 more years until a complex device, like a home computer, would be ready for market - that's about the time the Famicom/NES hit the market - with specs, a 8051 couldn't compete without at all.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or has it too slow access to the external memory?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not just that, but incrediblly slow in general, even more so in 1980. Its maximum clock frequency of 12 MHz may seem a lot, but that gets less impressive when considering that a machine cycle takes 12 clock cycles. Also, the full 12 MHz can only be sustained on external RAM/ROM with an access time of less than 166 ns. With RAM like that, a 6502 could run at 3 MHz or a Z80 at 8 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RAM speed is about cost, so it would be more likely that the 8051 would have run at only 4 MHz, as its memory interface had no way of extending access time when needed. The practical result would have been an even slower computer, delivering mediocre performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;But...&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that point it's important, that while random RAM access is quite slow on the 8051, this doesn't influence real world application as much. Most access will still be for code. A real setup would keep core access function in on board ROM, making execution fast and equal important, all heavy used data would be held in on board RAM, as well accessible in full speed - much like the zero/direct page of 6500/6800 type MCUs. In addition, 8051 code is quite compact, thus as well reducing impact of slowdown for external code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line for speed: While the 8051 is quite slow in itself, when running some BASIC program, performance would still be competive.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or is there any lack of instruction set?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's almost never the instruction set. The fun about programmable devices is that everything can be done.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or is there any other reason?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As said, it's not meant to work as a general purpose computer, but a controller. Using it as such is much like using a sporty convertible (imagine here a 1980s Fiat X15 or Alpha Spider) as the family car.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now having said that, 8051 have been used in many computer like devices, especially various 'kid computers' of the 1990s. For the early, 1980 time frame, it was rather the 8048, the direct predecessor (*2) was used in several computer like devices:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://vintagecomputer.ca/imsai-8048-control-computer/&quot; rel=&quot;noreferrer&quot;&gt;IMSAI 8048 Control Computer&lt;/a&gt;&lt;/em&gt;, a very early (1977) single boarder, expandable to 64(!) KiB RAM.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Philips Videopac Computer G7000&lt;/em&gt; (also known as &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Magnavox_Odyssey%C2%B2&quot; rel=&quot;noreferrer&quot;&gt;Magnavox Odyssey 2&lt;/a&gt;&lt;/em&gt;) - eventually the most known one.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.8bit-homecomputermuseum.at/computer/kosmos_computer_praxis_cp1.html&quot; rel=&quot;noreferrer&quot;&gt;Kosmos Computer Praxis CP1&lt;/a&gt;&lt;/em&gt;, a course system. Here the 8049 runs a virtual decimal (!) processor.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;8052AH BASIC&lt;/em&gt; - almost a computer - it's basically a 8051 with double the RAM (256 Bytes) and an 8 KiB BASIC interpreter in ROM. As &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/14875/the-busybee&quot;&gt;Busybee already mentioned&lt;/a&gt;, all it needs is some external RAM and a terminal (*3) .&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The G700 is eventually the closest to a (home) computer here. It features a full keyboard and colour video capabilities. With a basic cartridge it could for sure compete with a ZX80/81 of the same time.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Harvard isn't about separate address spaces. They are just a side effect of parallel access to program and data store - which in turn is intended to allow independent read and faster operations (It as well relaxes the need to make program and data word size the same).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Logical a Harvard type CPU can still merge both into one address space (to simplify handling), without leaving its origin. Similar a Von-Neumann can separate them logically without turning into Harvard, as the access is still common. And 8051 is an example of such a modified Von-Neumann.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - In fact, the very first data sheet puts the 8051 into the MCS-48 family.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - In the late 70s to early 80s several manufacturers offered a MCU with BASIC embedded.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-20T13:24:58.317" LastActivityDate="2020-02-20T13:24:58.317" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13845" PostTypeId="2" ParentId="13841" CreationDate="2020-02-18T17:51:37.147" Score="1" Body="&lt;p&gt;(Only partial answer)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a CMOS does not just happen because of the need of low power, but availability as well. Already in the late 80s, CMOS were sold at the same or even lower price as NMOS variants or being the the only offer some manufacturers had at all. Since the CMOS was in most parts compatible with the NMOS version, decision to use one was made in procurement, not in engineering.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-02-18T17:51:37.147" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13846" PostTypeId="2" ParentId="13839" CreationDate="2020-02-18T17:56:08.703" Score="23" Body="&lt;p&gt;So I've read all the answers written before my own and they all IMHO are more or less missing the main point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;8051 can have a single monolithic external 64kb address space, that is both written, read and where the instructions are also fetched from. Having peripheral devices somewhere in that space is also nothing new, known from pdp-11, continued in 68xx and 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It still has at least 2 pointers into that space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there are only few instructions that access that external space, that is, &lt;code&gt;movx a,@ptr&lt;/code&gt; and &lt;code&gt;movx @ptr,a&lt;/code&gt;, where &lt;code&gt;ptr&lt;/code&gt; is either &lt;code&gt;dptr&lt;/code&gt; or &lt;code&gt;r0/r1&lt;/code&gt; (with high address part coming from the P2 port). Joining external data space with external code space gives us another two: &lt;code&gt;movc a,@a+dptr&lt;/code&gt; and &lt;code&gt;movc a,@a+pc&lt;/code&gt;. And that's all. There is no direct addressing of external spaces, there is no arithmetic or logic operations possible between accumulator and external spaces, there is no possibility to load anything except accumulator from/to external spaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are, however, internal RAM memory, where direct addressing in arithmetic, logical and move instructions is possible. The only problem is that its size is 128 bytes. And another 128 bytes are only accessible in indirect way (like &lt;code&gt;op a,@r0/@r1&lt;/code&gt;). The stack is also resides there, 4 sets of eight registers each are also there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a consequence, when the size requirements for &quot;stack+direct-addressable RAM&quot; exceed those 128/256 bytes, the things become really BAD: imagine accessing every single variable by &lt;code&gt;mov dptr,#addr: movx a,@dptr&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, there are 2 points in general:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;lack of convenient ways to access external memory spaces&lt;/li&gt;&#xA;&lt;li&gt;extremely limited internal RAM&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Compare that to 6502 -- where in the worst case (huge multitasking) the things could be circumvented by adding a hardware memory paging in the first 512 bytes.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-02-18T17:56:08.703" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13847" PostTypeId="2" ParentId="13813" CreationDate="2020-02-18T20:27:08.463" Score="1" Body="&lt;p&gt;For the records: I just found some C128 BASIC music program using &lt;code&gt;PLAY&lt;/code&gt; commands in the &lt;a href=&quot;https://csdb.dk/release/?id=110215&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dual Demo by Flexman&lt;/a&gt; The music code is at line 7000 and following.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-02-18T20:27:08.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13848" PostTypeId="2" ParentId="13839" CreationDate="2020-02-18T21:30:40.517" Score="2" Body="&lt;h1&gt;No DMA to do video&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;A video controller chip needs &lt;em&gt;immediate&lt;/em&gt; access to video RAM when it is outputting a row.  To this end, microprocessors provide a pin that holds the processor and releases the buses.  The process is called &quot;Direct Memory Access&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8051 has no provision for DMA.  It's not intended for systems which are that complicated.  The microcontroller is the only chip that is supposed to be controlling the buses, and there are no pins for DMA or stalling the processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose you could wire up some buffers to release the memory buses, but you still have no way to tell the processor to wait.  I also suppose you could also have the microcontroller itself generate the video signals, in the manner of &quot;racing the beam&quot;.  However, writing the software for that is a &lt;em&gt;lot&lt;/em&gt; of work, difficult to debug, and consumes most of the CPU time.  Why would designers of that era bother with such issues when there are plenty of other processors that are compatible with video controllers?&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-02-18T21:30:40.517" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13849" PostTypeId="2" ParentId="13747" CreationDate="2020-02-18T22:18:12.030" Score="1" Body="&lt;h1&gt;Huh!  No one mentioned musical line printers!&lt;/h1&gt;&#xA;&lt;p&gt;When I was a wee kid and dinosaurs still roamed the Earth, I was a Mainframe Operator and we made music by &lt;s&gt;banging rocks together&lt;/s&gt; sending specially crafted ASCII art to line printers from mainframes:&lt;/p&gt;&#xA;&lt;p&gt;Clickable YouTube Video link going to the Computer History museum below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Lu4SxJqU9I4&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/s1c3o.jpg&quot; alt=&quot;Claire de Lune on Line Printer&quot; title=&quot;Claire de Lune on Line Printer&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I distinctly remember the French Operator printing the ASCII art of &amp;quot;La Marseillaise&amp;quot; on any of our idle printers in the &lt;em&gt;Machine Room&lt;/em&gt; (as a Data Centre was called back then) on &amp;quot;Le Quatorze Juillet&amp;quot; (14 July, Bastille Day) just to annoy us (and because he had nothing better to do on a public holiday in France)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.righto.com/2019/09/risky-line-printer-music-on-vintage-ibm.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is the blurb on how it worked&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;s&gt;&lt;sub&gt;We even had ASCII Pr0n! &lt;em&gt;Nah! Not Posting any links!  Google it yourself!&lt;/em&gt;&lt;/sub&gt;&lt;/s&gt;&lt;/p&gt;&#xA;" OwnerUserId="10632" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-18T22:39:09.627" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13850" PostTypeId="1" CreationDate="2020-02-19T04:39:58.627" Score="10" ViewCount="3191" Body="&lt;p&gt;I just love the &lt;a href=&quot;https://en.wikipedia.org/wiki/Snow_White_design_language&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Snow White&lt;/em&gt; industrial design language&lt;/a&gt; of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_IIc&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIc&lt;/a&gt;, especially when paired with the Monitor IIc. It is a classic design that doesn't show its age.  I've even recently seen them setup in homes purely as decor.&lt;/p&gt;&#xA;&lt;p&gt;It's too bad Apple never made a color version of the monitor IIc. I've thought about replacing its tube with a color one. There's a few LCD mods out there, but they lack the vivid image quality of a true CRT. Even worse, LCD panels don't match the curvature of CRTs, creating unsightly gaps where the panel and the bezel border each other (see last photo).&lt;/p&gt;&#xA;&lt;p&gt;Has this been done before? Is it even possible?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VsieM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VsieM.jpg&quot; alt=&quot;Apple IIc monitor, front view&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rFNDI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rFNDI.jpg&quot; alt=&quot;Apple IIc monitor, side view&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rhtYY.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rhtYY.jpg&quot; alt=&quot;Apple IIc monitor cathode ray tube; a red sticker facing the view brands it as a NEC, type number C10M42P31(D)-ARF-SB, serial number 6502 6338. Below the serial numbers, there are safety warnings.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16199" LastEditorUserId="15334" LastEditDate="2020-11-10T20:57:43.260" LastActivityDate="2020-11-10T20:57:43.260" Title="Is it possible to swap the Apple IIc's monochrome CRT tube for a color one?" Tags="&lt;apple-ii&gt;&lt;video&gt;&lt;crt-monitor&gt;" AnswerCount="4" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13852" PostTypeId="2" ParentId="13850" CreationDate="2020-02-19T07:45:34.433" Score="5" Body="&lt;p&gt;If you mean to yust replace mono CRT with color one then of course no, it is not possible. You could try to find working color monitor that has compatible inputs and try to fit it inside your housing.&lt;/p&gt;&#xA;" OwnerUserId="7673" LastActivityDate="2020-02-19T07:45:34.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13853" PostTypeId="2" ParentId="13850" CreationDate="2020-02-19T08:16:36.107" Score="13" Body="&lt;p&gt;Yes, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just keep in mind, it's not only the tube to be replaced, but the electronics as well. Essentially only keeping the shell. The 9 inch tube is of standard size, so finding one with the same mountings should be possible. Colour tubes do (usually) need more depth, which shoulf still be possible as the IIc monitor housing is rather long.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That still leaves the task of finding and eventually a placing the electronics. Unless they are much higher integrated, they will require more space and for sure a different mounting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sidenote: If your screen is still working, I'd suggest looking for a non working/damaged one to convert.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-21T22:28:08.847" LastActivityDate="2020-02-21T22:28:08.847" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13854" PostTypeId="2" ParentId="12395" CreationDate="2020-02-19T14:05:31.440" Score="2" Body="&lt;p&gt;It is possible, if you copy the editor-code to RAM and create the hooks in the vector-table. I did a program for this some 2 years ago:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sleepingelephant.com/ipw-web/bulletin/bb/viewtopic.php?f=2&amp;amp;t=8375&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://sleepingelephant.com/ipw-web/bulletin/bb/viewtopic.php?f=2&amp;amp;t=8375&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically you need to replace the CHRIN and CHROUT-vectors to point to your own code, which in this case is just a copy of the editor-code in the kernal, where every place the old screen-dimensions are those are replaced with the new values. You also need to make sure to move the screen-line-link-table to your own RAM if it becomes larger then 24 lines (=bytes). To make it work nicely, also let the BRK- and NMI-vectors point into your setup-code, so the editor will survive STOP/RESTORE. The source code is available in the program-download mentioned above for further insight.&lt;/p&gt;&#xA;" OwnerUserId="16338" LastEditorUserId="16338" LastEditDate="2020-02-19T15:25:46.943" LastActivityDate="2020-02-19T15:25:46.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13855" PostTypeId="2" ParentId="13850" CreationDate="2020-02-19T17:25:21.643" Score="27" Body="&lt;p&gt;If you don't know, then the answer is &quot;no&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It certainly is possible to get a color CRT tube and matching electronics and fit them into a cleared out case.&#xA;However, if you have to ask people on the internet, then I'm pretty sure that the responsible answer to give you is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Keep your hands off.&lt;/strong&gt;&lt;br&gt;&#xA;CRT tubes are high voltage electronics. They are evacuated, i.e. there's a vacuum inside. Them failing catastrophically can be dangerous to your health, home and life.&#xA;They are dangerous to meddle with. Don't do anything with them, unless you're a 50+ year old TV electrician, who has learned how to safely handle CRTs. I assume that you're not, because you're looking for information on the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; My father has been a TV electrician (repairing TVs for as long as they were based on CRT technology) and made that point very clear to me.&lt;/p&gt;&#xA;" OwnerUserId="16340" LastActivityDate="2020-02-19T17:25:21.643" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13856" PostTypeId="1" AcceptedAnswerId="13862" CreationDate="2020-02-19T18:54:37.517" Score="4" ViewCount="485" Body="&lt;p&gt;Does anyone know of any operating system that used &lt;a href=&quot;https://www.geeksforgeeks.org/fixed-or-static-partitioning-in-operating-system/&quot; rel=&quot;nofollow noreferrer&quot;&gt;static memory partitioning&lt;/a&gt;: contiguous physical memory allocation with one process per partition, one partition per process, partitions generated at build time, and existing independently of being used/not used?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am particularly interested in systems that required that all partitions were of the same [fixed] size. Were there any such systems?&lt;/p&gt;&#xA;" OwnerUserId="6803" LastEditorUserId="6803" LastEditDate="2020-02-21T04:00:20.727" LastActivityDate="2020-02-23T02:33:34.590" Title="Static memory partitioning" Tags="&lt;memory&gt;&lt;operating-system&gt;&lt;memory-layout&gt;" AnswerCount="7" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="13857" PostTypeId="2" ParentId="13856" CreationDate="2020-02-19T20:53:05.690" Score="4" Body="&lt;p&gt;The Acorn MOS, as deployed in the BBC Micro, offers built-in support for paged ROMs. Paged ROMs have a fixed 16kb window in the address space, and amongst other things may contain filing systems, languages or other programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A BBC or Electron fitted with more than one paged ROM will therefore have a fixed 16kb ROM window in which the current application sits, and the user may opt to exit that program and switch to another. Or, if one of the other ROMs is a filing system or the interpreted language that  an application is written in, the MOS will do it automatically as required.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The following has been ruled an impermissible example since a program may simultaneously occupy more than one segment, but is preserved for posterity:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Classic Mac OS applications are divided into 16kb segments and a jump table. Code within a segment uses PC-relative addressing and jumps; to get to code in another segment it uses the jump table, which is dynamically reprogrammed to redirect into the segment loader as and when segments are unloaded. So it's a lot like a virtual memory subsystem except that there's no automatic address translation, and no automatic page faults. Developers just have to follow the rules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, Classic Mac OS uses fixed-size memory partitioning for application code.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-02-19T21:37:48.993" LastActivityDate="2020-02-19T21:37:48.993" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="13858" PostTypeId="2" ParentId="13809" CreationDate="2020-02-19T21:03:58.037" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Are there any convincing or reliable accounts of an incident like this? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I couldn't resist posting this image taken from &quot;The Commodore Deathbed Vigil&quot; (at the approximate 9:43 mark; 11:00ish in YouTube linked below).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those interested, I pulled this image from my copy of Cloanto's Amiga Forever DVD, but Dave Haynie also has the full video posted on his YouTube channel &lt;a href=&quot;https://youtu.be/BaTjwo1ywcI&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FEjeT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FEjeT.jpg&quot; alt=&quot;The Hedley Davis Memorial Disk Drive&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We actually had a similar incident at a company I worked for.  Although in our case, it was a telephone embedded in the drywall, thrown by a co-worker after our lead sales manager punched &lt;em&gt;his&lt;/em&gt; buttons for a week or two straight.  -  Those were the days!  &lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="6708" LastEditDate="2020-02-19T22:45:29.323" LastActivityDate="2020-02-19T22:45:29.323" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13859" PostTypeId="2" ParentId="13856" CreationDate="2020-02-19T21:27:20.390" Score="4" Body="&lt;p&gt;During the heyday of the Intel 80386, &lt;a href=&quot;https://en.wikipedia.org/wiki/Virtual_8086_mode#Usage&quot; rel=&quot;nofollow noreferrer&quot;&gt;there were many operating systems&lt;/a&gt; that relied on that CPU's &lt;a href=&quot;https://en.wikipedia.org/wiki/Virtual_8086_mode&quot; rel=&quot;nofollow noreferrer&quot;&gt;virtual 8086 mode&lt;/a&gt; to multitask programs that were written for x86 real-mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By allowing real-mode programs to transparently use the segmented, 20-bit address space that they expected, these Operating Systems provided a fixed-size memory partition to each real-mode application. This partitioning was done under the control of the monitor running in protected mode, so the memory pages were fully protected from other applications while appearing to each application as if it had access to its full 20-bit memory space. So, it was a full virtual machine partitioning, but the partitions appeared as a fixed memory size to the multitasking applications.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-02-19T21:29:41.833" LastActivityDate="2020-02-19T21:29:41.833" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13860" PostTypeId="2" ParentId="13856" CreationDate="2020-02-19T23:07:24.703" Score="10" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-8&quot; rel=&quot;noreferrer&quot;&gt;PDP-8&lt;/a&gt; is a 12-bit computer.&amp;nbsp; As such it has a word and pointer size of 12-bits &amp;#8212; meaning it can access 4k words using a single word pointer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later models added bank switching (&lt;a href=&quot;https://opencores.org/projects/pdp8/features&quot; rel=&quot;noreferrer&quot;&gt;KM8E&lt;/a&gt;) and 3 extra address lines so that up to 32k words (8x4k) words could be populated, now having 15 address lines.&amp;nbsp; (Core memory boards, 4k words each, you could &lt;a href=&quot;http://dustyoldcomputers.com/pdp-common/core/index.html&quot; rel=&quot;noreferrer&quot;&gt;see&lt;/a&gt; each bit!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/TSS-8&quot; rel=&quot;noreferrer&quot;&gt;TSS/8&lt;/a&gt; operating system gave each program/process one of the 4k banks, regardless of program size (i.e. whether smaller or larger than 4k).&amp;nbsp; The OS did not allow user programs to use bank switching, so they ran as if there was only 4k in the machine &amp;#8212; though they did have the benefit of system calls whose implementation did not take space in the user's 4k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The operating system occupied two 4k banks, and the others were available for running processes.&amp;nbsp; The operating system could suspend a process to disc, so a system with 16k, for example, could have (the operating system, plus) two memory-resident user processes and some number more suspended on disc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a program didn't need the full 4k there was no way to release that back to another program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programs that needed more storage could use disc, rather manually.&amp;nbsp; When the program was running file handle #0 referred to the program itself (much like stdin/stdout in unix), so that additional code and/or data could be fairly easily read or written using a system call.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You got 4k, full stop &amp;#8212; there was no allocating (or releasing) additional memory.&amp;nbsp; The 4k you got was a complete bank (so in terms of 15-bit addresses the lower 12-bits of the bank's address were 0's, i.e. 4k aligned) &amp;#8212; the banks were effectively partitioned in advance.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastEditorUserId="7985" LastEditDate="2020-02-20T02:04:38.223" LastActivityDate="2020-02-20T02:04:38.223" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13861" PostTypeId="2" ParentId="13856" CreationDate="2020-02-20T00:38:35.773" Score="4" Body="&lt;p&gt;The &lt;a href=&quot;https://www.geeksforgeeks.org/fixed-or-static-partitioning-in-operating-system/&quot; rel=&quot;nofollow noreferrer&quot;&gt;definition to which you linked&lt;/a&gt; is very specific, and you put a further constraint on it that the partitions must all be the same size (the definition to which you linked makes it clear they need not be; the example they give uses four &amp;quot;blocks,&amp;quot; which I assume they feel is another word for &amp;quot;partition,&amp;quot; of three different sizes).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_6600&quot; rel=&quot;nofollow noreferrer&quot;&gt;CDC 6600&lt;/a&gt; is definitely not fixed by your definition, and technically not even by the source definition, since the sizes of partitions could vary as processes came and went (e.g., one large area used by one process could be used by two smaller processes later), and fragmentation could be avoided by stopping a process, copying it to a different range of locations in physical memory, and continuing the process. It probably is thus &amp;quot;variable partitioning&amp;quot; (mentioned but not really defined in the source), since processes are &amp;quot;contiguous&amp;quot; in both the actual meaning of the word and by their definition of that as &amp;quot;loaded entirely in main memory.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;I wouldn't, however, rely on your source as any sort of indication that what they described ever even existed, much less as a good taxonomy of actual systems; the source seems to be both overly vague and lacking in any sort of references.&lt;/p&gt;&#xA;&lt;p&gt;I leave the detailed description of the CDC 6600 here in case it's useful in developing better taxonomies and/or questions.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_6600&quot; rel=&quot;nofollow noreferrer&quot;&gt;CDC 6600&lt;/a&gt; had a memory remapping and protection system where each process got a contiguious area of memory starting at virtual address 0 and of arbitrary size less than or equal to main memory. Multiple processes were thus possible, but each always started at virtual address 0 and the physical memory allocated was a singal contiguous block. &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_6600#Memory_organization&quot; rel=&quot;nofollow noreferrer&quot;&gt;From Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;User programs are restricted to use only a contiguous area of main memory. The portion of memory to which an executing program has access is controlled by the RA (Relative Address) and FL (Field Length) registers which are not accessible to the user program. When a user program tries to read or write a word in central memory at address a, the processor will first verify that a is between 0 and FL-1. If it is, the processor accesses the word in central memory at address RA+a. This process is known as base-bound relocation; each user program sees core memory as a contiguous block words with length FL, starting with address 0; in fact the program may be anywhere in the physical memory. Using this technique, each user program can be moved (&amp;quot;relocated&amp;quot;) in main memory by the operating system, as long as the RA register reflects its position in memory. A user program which attempts to access memory outside the allowed range (that is, with an address which is not less than FL) will trigger an interrupt, and will be terminated by the operating system. When this happens, the operating system may create a core dump which records the contents of the program's memory and registers in a file, allowing the developer of the program a means to know what happened. Note the distinction with virtual memory systems; in this case, the entirety of a process's addressable space must be in core memory, must be contiguous, and its size cannot be larger than the real memory capacity.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-20T08:56:29.383" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13862" PostTypeId="2" ParentId="13856" CreationDate="2020-02-20T00:56:22.357" Score="4" Body="&lt;p&gt;The RSX-11 {D/M/M-PLUS/S} family of operating systems, running on PDP-11 minicomputers, divided real memory into partitions.  Partitions were mostly set up at system generation time; you could define partitions in a running system, but that was less common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RSX-11 family were a reimplementation, on the 16-bit PDP-11, of RSX-15 on the 18-bit PDP-15, so many of the ideas were carried over from there.  This includes partitioning of memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To quote from &lt;a href=&quot;http://www.bitsavers.org/pdf/dec/pdp15/DEC-15-GRQA-D_RSX15_1971.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the RSX-15 exec manual&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Partitions and SYSTEM COMMON Blocks are fixed at system configuration&#xA;  time and cannot be altered at run time. Tasks are built to execute in&#xA;  specific partitions, and, any number of Tasks may be built to execute&#xA;  in the same. partition.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This to me is the essential feature of partitioning - they are relatively static memory allocations, certainly not created 'on demand' as programs start executing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm much more familiar with the PDP-11 systems, but the principle is the same.  One important fact is that smaller 11's may not have memory management hardware (and thus had no more than 28K words memory). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that tasks (a term used for both the program-on-disk and program-in-executions) needed to be built for the address they'd be loaded at.  That meant in turn that in practical terms you'd need to define a set of useful base addresses, which is to say, to partition memory. You'd create one partition for every task you wanted to be running and in memory simultaneously. You then had to decide at task-build time (&quot;link time&quot; in other operating systems) which partition a task would execute in, and the task builder would base the task for that address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example: you'd create partitions A, B, C, and D - this would allow 4 tasks to be in memory at the same time; the exact mix that was possible depended on which tasks were built for each partition: A, B, C or D.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system could checkpoint (swap out) a task to permit a higher-priority task to be loaded into a particular partition. However, one task at most was 'in' a partition at any point in time. (And the partition still existed when no tasks were in it).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Mapped RSX-11M (i.e., running on a PDP-11 with memory management hardware and thus capable of having more memory) also allowed fixed memory partitioning, and required it to some degree, though since tasks started at virtual 0, there was no need to build a task for a particular partition.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it was still good practice to dedicate partitions for certain uses, as (for example) you could avoid the memory fragmentation that would result if you loaded device drivers into the same partition used for user tasks -- the driver would be immovable once loaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was also somewhat common to dedicate partitions for high-priority tasks, for example the file system ACP (handled file actions except for the actual read-write calls) might get its own partition to avoid fighting for memory with user tasks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was however not a necessity to partition memory in a fine-grained manner in such a system.  Typically, &quot;most&quot; of memory was allocated to a general partition, which could, as a partition-definition option, be dynamically sliced up into subpartitions (one per task) to meet the need for whatever was currently executing -- i.e., it worked like you expect non-paged systems to work, each task got a contiguous piece of memory that matched its size requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: partitions had a fixed size, but partitions could optionally be allowed to be split into dynamically-allocated subpartitions.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Here's part of the partition layout from a running RSX-11M-Plus system (a large-PDP-11 system, but it's all I have handy).  Partitions and subpartitions appear in real-memory order.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;PAR&#xA;SECPOL 117734 00200400 00200000 SEC POOL&#xA;SYSPAR 117670 00400400 00205400 MAIN  &#xA;       117624 00400400 00115300 RO COM !DIR11M!&#xA;       117434 00515700 00005200 TASK   &amp;lt;...LDR&amp;gt;&#xA;       117230 00523100 00033300 TASK   &amp;lt;MCR...&amp;gt;&#xA;       117024 00556400 00010500 TASK   [TKTN  ]&#xA;       116620 00567100 00003200 TASK   [SHF...]&#xA;       116414 00572300 00013500 TASK   [RCT...]&#xA;DRVPAR 116334 00606000 00173000 MAIN  &#xA;       116270 00606000 00006600 RO COM !TTEXT !&#xA;       116204 00614600 00020600 RO COM !TTCOM !&#xA;       116120 00635400 00034200 DRIVER (TT:)&#xA;       115450 00671600 00001300 DRIVER (DK:)&#xA;            ...&#xA;       110560 00777300 00001500 DRIVER (RD:)&#xA;GEN    110514 01001000 15777000 MAIN  &#xA;       110450 01001000 00002000 RO COM !DYCOM !&#xA;       025544 01003000 00007500 TASK   &amp;lt;PMT...&amp;gt;&#xA;          ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;All of the partitions (SECPOL, SYSPAR, DRVPAR, GEN) are fixed-size paritions.  SECPOL is a memory pool for the OS; SYSPAR is for system-critical tasks and the directives (syscalls); DRVPAR is for drivers; and GEN is for everything else.  The partition sizes are determined - with user input - at system generation time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The numerical columns are (as far as I recall) address of the partition control block, base of partition, length of partition. All in octal, since we only have 8 fingers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each of those partitions is dynamically divided into subpartitions by the OS as objects (drivers, tasks, etc.) are loaded into the partitions.  &lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-02-22T17:06:06.193" LastActivityDate="2020-02-22T17:06:06.193" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13863" PostTypeId="1" CreationDate="2020-02-20T08:34:05.020" Score="2" ViewCount="1425" Body="&lt;p&gt;The A590 was an external hard disk for the Amiga 500, in 'sidecar' form factor, that could also hold an extra megabyte of RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How many 590s were sold, throughout its life?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-23T13:37:44.627" Title="How many Amiga 590 units were sold?" Tags="&lt;history&gt;&lt;amiga&gt;&lt;commodore&gt;&lt;hard-disk&gt;&lt;amiga-500&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13864" PostTypeId="2" ParentId="13850" CreationDate="2020-02-20T10:26:17.640" Score="8" Body="&lt;p&gt;Color CRT tubes are powered by higher voltages (say, 25kV vs 12kV for mono), driven by 3 separate video signal amplifiers (and you have to feed the 3 different color signals - also up to you).&#xA;The H/V coils in the yoke also expect different voltage and current levels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, you can keep the box only and replace everything else inside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, the curvatures of mono and color CRTs are not necessarily the same (for a reason), so you will still get the gaps at the border.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;p.s. and yes, both 12kV and 25kV voltages are DEADLY FROM A DISTANCE of up to 2 inch / 5cm from the hot points and up to few hours after you power everything off. If you don't understand why, don't even think about starting to disassemble a CRT device.&lt;/p&gt;&#xA;" OwnerUserId="15647" LastActivityDate="2020-02-20T10:26:17.640" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13866" PostTypeId="2" ParentId="13747" CreationDate="2020-02-20T15:30:50.400" Score="1" Body="&lt;p&gt;The IBM 1620 could play music by moving varying length numeric strings between locations in core memory.  It generally played only a single line, so no harmony, but the overtone stack was great!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to do some computation at the same time, no problem.  Whip out your paper, pencil, and slide rule and have it while the computer played on.  Circa 1968.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PDP-6 at the MIT AI lab also had a music peripheral which consisted of connecting 6 filters to the low-order six bits of the accumulator lights on the console.  Since the PDP-6 wasn't used for much at the time, you could fire off the PDP-6 to play a song and continue working on the PDP-10 in the same room.  Multi-tasking on a physically distributed, multi-core, ASMP computing cluster.  In 1971.&lt;/p&gt;&#xA;" OwnerUserId="10500" LastActivityDate="2020-02-20T15:30:50.400" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13867" PostTypeId="2" ParentId="7794" CreationDate="2020-02-20T16:27:42.627" Score="3" Body="&lt;p&gt;I remember well that the ZX Spectrum ROM software made good use of the alternate registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The floating-point calculator routines are invoked by a RST 28h instruction. Following that instruction are in-line function codes and literals. The calculator routine generally uses HL' as a pointer to those codes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The calculator also uses the alternate registers to perform 32-bit additions and subtractions. In places, one 32-bit value is in HL/HL' and the other in DE/DE', allowing an ADD/EXX/ADC sequence to add the two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a look through, the ROM source is available on the interweb. An add-up shows 117 uses of EXX and 13 uses of EX AF,AF'. I would imagine the ZX81 and even ZX80 may be similar, as the ZX Spectrum software was a progression of the ZX81's.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastEditorUserId="5199" LastEditDate="2020-02-20T16:53:53.740" LastActivityDate="2020-02-20T16:53:53.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13868" PostTypeId="2" ParentId="7794" CreationDate="2020-02-20T18:16:10.087" Score="2" Body="&lt;p&gt;I used it in float16 library: &lt;a href=&quot;https://github.com/artyom-beilis/float16&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/artyom-beilis/float16&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was very useful, for example af' stored the sign part of calculation and hl', de', bc' used extensively in division routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is very useful to put there some temporary values that you need in different places and access them quickly afterwards&lt;/p&gt;&#xA;" OwnerUserId="16098" LastActivityDate="2020-02-20T18:16:10.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13869" PostTypeId="2" ParentId="13747" CreationDate="2020-02-20T21:44:12.437" Score="1" Body="&lt;p&gt;Supposedly, &lt;a href=&quot;https://www.manchester.ac.uk/discover/news/first-digital-music-made-in-manchester/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Strachey was the first at computer-generated music&lt;/a&gt;, on the Ferranti Mark 1, around 1951.   The Mark I had a 'hoot' instruction to allow the programmer to alert the operator -- much like a Windows PC 'beep', I suppose -- and this was used as the sound source.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can &lt;a href=&quot;https://www.bbc.com/news/magazine-37507707&quot; rel=&quot;nofollow noreferrer&quot;&gt;find an example on this BBC page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Grumpy-programmer aside: it's unfortunate how Turing gets higher billing than &lt;a href=&quot;https://en.wikipedia.org/wiki/Christopher_Strachey&quot; rel=&quot;nofollow noreferrer&quot;&gt;Strachey&lt;/a&gt; in this popular account.)&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-02-20T21:44:12.437" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13870" PostTypeId="1" AcceptedAnswerId="13871" CreationDate="2020-02-20T21:50:47.920" Score="18" ViewCount="4180" Body="&lt;p&gt;Are &quot;tile pixels&quot; the same size as &quot;sprite pixels&quot;, and are they both square (ignoring the rule that multicolor sprites can only be colored in groups of two pixels)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By &quot;square&quot; I mean that the pixels have a 1:1 aspect ratio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the answer depends on the display, then I am asking about the ubiquitous 1702 monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I am asking so that I can configure the graphics editor on my modern laptop for creating Commodore 64 artwork. In my case, I am using an NTSC system.&lt;/p&gt;&#xA;" OwnerUserId="4761" LastEditorUserId="11916" LastEditDate="2020-02-21T21:35:56.057" LastActivityDate="2020-02-23T00:12:12.490" Title="Are pixels on the Commodore 64 square?" Tags="&lt;commodore-64&gt;&lt;graphics&gt;&lt;commodore&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13871" PostTypeId="2" ParentId="13870" CreationDate="2020-02-20T22:38:06.443" Score="23" Body="&lt;p&gt;The pixels are not exactly square, the actual aspect ratio depends on the TV system.&#xA;For PAL-B, the pixel aspect ratio is 0.937:1, the pixels are a bit higher than they are wide.&#xA;For NTSC, the ratio is 0.75:1. At this ratio it can be clearly seen that the cursor block is definitely higher than wide.&lt;a href=&quot;https://i.stack.imgur.com/b4hjV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/b4hjV.png&quot; alt=&quot;C64 NTSC model rendered by VICE emulator&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2020-02-23T00:12:12.490" LastActivityDate="2020-02-23T00:12:12.490" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13872" PostTypeId="2" ParentId="13870" CreationDate="2020-02-20T22:43:33.447" Score="17" Body="&lt;p&gt;In standard bitmap mode the C64 outputs 320 pixels in 40µs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The visible portion of a line is &lt;a href=&quot;http://martin.hinner.info/vga/pal.html&quot; rel=&quot;noreferrer&quot;&gt;~52µs&lt;/a&gt;; in 60Hz regions ~240 lines are considered 'visible', but in PAL regions it's ~288 lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if there were no borders, there'd be around 52/40*320 = 416 pixels across the visible portion of a line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that each line is 4/3rds as wide as a hypothetical vertical scan, you can compute that 416 * 3/4 = 312, implying that so you would have square pixels in a hypothetical 312 line display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A PAL screen has only 288 lines, so it's like taking that 312 line display and stretching out only 288 lines of it. Therefore the pixels will be very slightly taller than wide. Around 288/312 = ~92% as wide as tall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An NTSC screen has only 240, so its pixels would be more like 240/312 = ~77% as wide as tall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Heavy caveats apply&lt;/strong&gt;: different screens are calibrated differently, to numbers usually near to those above but subject to being only as close as the engineer turning the dials could get.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A further nuance is that total line time may be 64µs or 65µs (depending on revision) in 60Hz world, but will be 63µs in 50Hz world. Your screen will have a PLL of some sort to bring itself into synchronisation with the horizontal sync period, but often that'll result in the line contents being slightly stretched or slightly compressed, further throwing off the arithmetic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You therefore might as well say that PAL pixels are square, as 92% is within the margin of error given the effective approximations of all the other numbers. But NTSC pixels shouldn't be close.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-02-20T22:55:36.203" LastActivityDate="2020-02-20T22:55:36.203" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13873" PostTypeId="2" ParentId="13870" CreationDate="2020-02-20T22:44:18.927" Score="3" Body="&lt;p&gt;As for the first part of your question, yes, for sprites as well as characters or bitmap images the same principle holds: either you can be in single colour/hi-res mode (320x200, 1 bit of foreground colour info per logical pixel) or multi colour mode (160x200, 2 bits of colour info per logical pixel).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, for PAL, a single colour pixel that is rendered is very close (0.936:1) to being a square.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-02-22T12:40:50.097" LastActivityDate="2020-02-22T12:40:50.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13874" PostTypeId="2" ParentId="13839" CreationDate="2020-02-21T04:48:36.073" Score="0" Body="&lt;p&gt;I think the reason was not a technical one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you pointed out, 8051 was late and it was positioned as a high-end 8080. It was an expensive one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;8-bit computers at that time decided to go for 6502 because it was a cheap competitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Few still remember the company behind 6502 (MOS Technology). It was a low-profile cheap mass product.&lt;/p&gt;&#xA;" OwnerUserId="16350" LastActivityDate="2020-02-21T04:48:36.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13875" PostTypeId="2" ParentId="13709" CreationDate="2020-02-21T08:33:05.437" Score="3" Body="&lt;p&gt;Present evidence is that ITS had a very early networked file system no later than 1972.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;ITS has had a facility called the &quot;ML Device&quot;, or MLDEV, for a long time.  The name probably comes from a time when the users of the older more established computer called AI wanted access to files on the computer called ML.  The &quot;device&quot; part is because ITS files are named by four parts: device, directory, and two file names.  To access ML files from AI, the device name is ML.  Conversely, from ML the AI device is used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To date this facility, we can check timestamps from backup tapes.  The earliest file called MLDEV is from July 1975.  However, if we examine the source code for an earlier ITS version we see that it has built in ML and AI devices that when accessed starts a program called SYS; ATSIGN OTHER.  Disassembling this file we can see that it indeed is accepting file operations and sends information across ARPANET.  The earliest file with that name has a timestamp from November 1972.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We know from RFC documents 342, 344, and 366 that AI and ML were first put on the ARPANET in May-June 1972.  So MLDEV could not have been in use before 1972.&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2020-02-21T16:28:24.777" LastActivityDate="2020-02-21T16:28:24.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13876" PostTypeId="1" AcceptedAnswerId="13879" CreationDate="2020-02-21T10:10:45.857" Score="19" ViewCount="5162" Body="&lt;p&gt;Or was that something that didn't appear until later CPUs (around the time of the 286 maybe)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, how would I go about researching this on my own? It's not exactly something I can look up on DigiKey...&lt;/p&gt;&#xA;" OwnerUserId="8048" LastEditorUserId="3290" LastEditDate="2020-07-02T03:52:45.853" LastActivityDate="2020-07-02T03:52:45.853" Title="Were there any 8-bit CPUs with 24-bit addressing?" Tags="&lt;cpu&gt;&lt;8-bit-microcomputers&gt;&lt;architecture&gt;" AnswerCount="4" CommentCount="13" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13877" PostTypeId="2" ParentId="13876" CreationDate="2020-02-21T10:28:19.607" Score="9" Body="&lt;p&gt;There is &lt;a href=&quot;https://www.zilog.com/index.php?option=com_product&amp;amp;task=product&amp;amp;businessLine=1&amp;amp;id=77&amp;amp;parent_id=77&amp;amp;Itemid=57&quot; rel=&quot;noreferrer&quot;&gt;eZ80&lt;/a&gt;, a Z80 compatible successor, generally considered an 8-bit CPU, and it features 24 bit address space (though not in the Z80 compatible mode).&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2020-02-21T10:28:19.607" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13878" PostTypeId="2" ParentId="13876" CreationDate="2020-02-21T10:36:14.420" Score="7" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68008&quot; rel=&quot;noreferrer&quot;&gt;Motorola 68008&lt;/a&gt;, a cheaper 68000 variant. Not exactly as you described it, 20-bit and later 22 bit address bus I think and a 8-bit data bus.&lt;/p&gt;&#xA;" OwnerUserId="8057" LastActivityDate="2020-02-21T10:36:14.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13879" PostTypeId="2" ParentId="13876" CreationDate="2020-02-21T10:49:58.353" Score="24" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Were there any 8-bit CPUs with 24-bit addressing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not many. Most prominent and best fitting examples would be&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;WDC &lt;a href=&quot;https://en.wikipedia.org/wiki/WDC_65C816&quot; rel=&quot;nofollow noreferrer&quot;&gt;65816&lt;/a&gt; of 1983&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Hitachi &lt;a href=&quot;https://en.wikipedia.org/wiki/Hitachi_HD64180&quot; rel=&quot;nofollow noreferrer&quot;&gt;64180&lt;/a&gt; of 1985 / Zilog &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z180&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z180&lt;/a&gt; of 1985 (only 19/20 bit)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_eZ80&quot; rel=&quot;nofollow noreferrer&quot;&gt;eZ80&lt;/a&gt; of 1998&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Then there 8/16/32 bit hybrids - able to run 8 bit code and available with external 8 bit data bus, but as well with 16/32 bit code (extensions):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Zilog &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z800&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z800&lt;/a&gt; of 1985 / &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z280&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z280&lt;/a&gt; of 1987 (19/24 bit address space)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Zilog &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z380&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z380&lt;/a&gt; of 1993 (32 bit address space)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Of course there's always the age old discussion what makes a 8 bit CPU. No, I wont go there, but we have to recognise that bus width does make a valid argument about bitness:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Motorola &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68008&quot; rel=&quot;nofollow noreferrer&quot;&gt;68008&lt;/a&gt; (20 bit address space)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;National &lt;a href=&quot;https://de.wikipedia.org/wiki/NS320xx&quot; rel=&quot;nofollow noreferrer&quot;&gt;16008/32008&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Intel &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8088&quot; rel=&quot;nofollow noreferrer&quot;&gt;8088&lt;/a&gt;/&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80188&quot; rel=&quot;nofollow noreferrer&quot;&gt;80188&lt;/a&gt; (20 bit address space)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Oh, and then there are CPUs with dynamic bus sizing, like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Members of the 68020 and 68030 family (32 bit address space) (*1).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;They can adapt external bus size according to DTACK0/1 signals. By setting them always to 8 bit, the external data bus will be reduced to 8 bit, much like on a 68008 (*2).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or was that something that didn't appear until later CPUs (around the time of the 286 maybe)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If it's about timing, then others, like the mentioned 80286, had 24 bit address space way before even the first 8 Bit, like 65816 or 64180 escaped 16 bit address space.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Also, how would I go about researching this on my own?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Learn about CPU's. Address range is just one side of the multi dimensional picture.&lt;/p&gt;&#xA;&lt;p&gt;A good start may be John Bayko's list of &lt;strong&gt;&lt;a href=&quot;http://www.cpushack.com/CPU/cpu.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Great Microprocessors of the Past and Present&lt;/a&gt;&lt;/strong&gt;. A &lt;em&gt;must read&lt;/em&gt; for anyone wanting to get a rough overview about the wonderful CPU world that has once been. It hasn't got much update since 2003, but then again, this is about the cool stuff, isn't it?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Later 68040/060 lost this ability, but Motorola did provide a 'Bus Sizer' chip named MC68150 to translate here. To bad, that baby was already extreme rare back then and made of unobtanium today. Still it may be a cool hack to plug a 68060 into an Apple II, wouldn't it?&lt;/p&gt;&#xA;&lt;p&gt;*2 - In some way this invalidates the whole argument about data bus width as main criteria.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-01T20:30:48.637" LastActivityDate="2020-07-01T20:30:48.637" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13880" PostTypeId="2" ParentId="13876" CreationDate="2020-02-21T14:38:39.023" Score="11" Body="&lt;p&gt;Yes. AVR microcontrollers with more than 64KB of memory do have 24-bit addressing. They have some additional registers for that purpose&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;RAMPX, RAMPY, RAMPZ, RAMPD and EIND: 8-bit segment registers that are prepended to 16-bit addresses in order to form 24-bit addresses; only available in parts with large address spaces.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set#Special_purpose_registers&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set#Special_purpose_registers&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Only a few variants support 24-bit addressing, mainly the ATmega256x or XMEGA series&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol start=&quot;3&quot;&gt;&#xA;  &lt;li&gt;&lt;p&gt;Models with &gt;64 KiB of ROM add the ELPM instruction and corresponding RAMPZ register. LPM instructions zero-extend the ROM address in Z; ELPM instructions prepend the RAMPZ register for high bits. This is not the same thing as the more general LPM instruction; there exist &quot;classic&quot; models with only the zero-operand form of ELPM (ATmega103 and at43usb320). When auto-increment is available (most models), it updates the entire 24-bit address including RAMPZ.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;(Rare) models with &gt;128 KiB of ROM have a 3-byte program counter. Subroutine calls and returns use an additional byte of stack space, there is a new EIND register to provide additional high bits for indirect jumps and calls, and there are new extended instructions EIJMP and EICALL which use EIND:Z as the destination address. (The previous IJMP and ICALL instructions use zero-extended Z.)&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;(Rare) models with &gt;64 KiB of RAM address space extend the 16-bit RAM addressing limits with RAMPX, RAMPY, RAMPZ and RAMPD registers. These provide additional high bits for addressing modes which use the X, Y, or Z register pairs, respectively, or the direct addressing instructions LDS/STS. Unlike ROM access, there are no distinct &quot;extended&quot; instructions; instead the RAMP registers are used unconditionally.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set#Memory_addressing_instructions&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set#Memory_addressing_instructions&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For example the &lt;a href=&quot;http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf&quot; rel=&quot;noreferrer&quot;&gt;ATmega2560/2561&lt;/a&gt; is an 8-bit MCU with 16-bit data address bus and 24-bit code address bus. The address is composed of 3 registers: RAMPZ, ZH and ZL like this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OaPM9.png&quot; alt=&quot;ATmega256x address&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another example is the &lt;a href=&quot;http://ww1.microchip.com/downloads/en/DeviceDoc/doc8077.pdf&quot; rel=&quot;noreferrer&quot;&gt;8-bit Atmel XMEGA A&lt;/a&gt; which supports &lt;em&gt;&quot;Direct addressing of up to 16MB of program memory and 16MB of data memory&quot;&lt;/em&gt; i.e. 24-bit address bus for both code and data. The internal RAM is tiny, so if you want that huge amount you'll have to use external RAM via EBI (External Bus Interface)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;h1&gt;24.1 Features&lt;/h1&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Supports SRAM up to:&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;512KB using 2-port EBI&lt;/li&gt;&#xA;  &lt;li&gt;16MB using 3-port EBI&lt;/li&gt;&#xA;  &lt;/ul&gt;&lt;/li&gt;&#xA;  &lt;li&gt;Supports SDRAM up to:&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;128Mb using 3-port EBI&lt;/li&gt;&#xA;  &lt;/ul&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="1981" LastEditorUserId="1981" LastEditDate="2020-02-21T16:31:27.913" LastActivityDate="2020-02-21T16:31:27.913" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13881" PostTypeId="1" AcceptedAnswerId="13883" CreationDate="2020-02-21T15:54:19.977" Score="2" ViewCount="321" Body="&lt;p&gt;The ARM-1, an early 32-bit RISC CPU, was used in the Acorn Archimedes computers, released in 1987. Its rated speed was one 32-bit instruction per cycle at 8 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typical RAM chips at that time would have been 41256 at 150 ns, and as I understand it from the answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13178/how-long-would-a-41256-take-to-do-4-accesses-in-fast-page-mode&quot;&gt;How long would a 41256 take to do 4 accesses in fast page mode?&lt;/a&gt; the actual random-access time to such chips is 260 ns, which means if every instruction involved a random access, the maximum speed would be less than 4 MHz. On the other hand, access in fast page mode is considerably faster; I get the impression ARM-1 took advantage of that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What exactly did the ARM-1 do about accessing memory quickly enough?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-21T22:15:59.273" Title="How fast did the ARM-1 access memory?" Tags="&lt;performance&gt;&lt;ram&gt;&lt;arm&gt;&lt;dram&gt;&lt;archimedes&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13882" PostTypeId="2" ParentId="6266" CreationDate="2020-02-21T16:01:47.700" Score="0" Body="&lt;p&gt;Not sure if this answers the question, but this page has some very good tables that break down the 6502 instruction layout: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.masswerk.at/6502/6502_instruction_set.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.masswerk.at/6502/6502_instruction_set.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scroll down to &quot;Appendix C: 6502 Instruction Layout&quot; for several pivoted charts of instructions laid out by a,b,c with this description:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 6502 instruction table is laid out according to a pattern a-b-c,&#xA;  where a and b are an octal number each, followed by a group of two&#xA;  binary digits c, as in the bit-vector &quot;aaabbbcc&quot;.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Example: All ROR instructions share a = 3 and c = 2 with the address&#xA;  mode in b (3x2). At the same time, all instructions addressing the&#xA;  zero-page share b = 1 (x1x). abc = 312  =&gt;  (3 &amp;lt;&amp;lt; 5 | 1 &amp;lt;&amp;lt; 2 | 2)  = &#xA;  $66, ROR zpg.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Notably, there are no legal opcodes defined where c = 3, accounting&#xA;  for the empty columns in the usual, hexadecimal view of the&#xA;  instruction table.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The following table lists the instruction set, rows sorted by c, then&#xA;  a.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Generally, instructions of a kind are typically found in rows as a&#xA;  combination of a and c, and address modes are in columns b. However,&#xA;  there are a few exception to this rule, namely, where bits 0 of both c&#xA;  and b are low (c = 0, 2; b = 0, 2, 4, 6) and combinations of c and b&#xA;  select a group of related operations. (E.g., c=0 ∧ b=4: branch, c=0 ∧&#xA;  b=6: set flag)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10816" LastActivityDate="2020-02-21T16:01:47.700" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13883" PostTypeId="2" ParentId="13881" CreationDate="2020-02-21T17:38:25.103" Score="4" Body="&lt;p&gt;&lt;em&gt;[Partitial answer about how it supports FPM RAM - I still need to look up the manual for timing details]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Support for (Fast) Page Mode RAM (*1)&lt;/h2&gt;&#xA;&lt;p&gt;The CPU supports N and S-cycles (ARM lingo) or Non-Sequential and Sequential cycles. The first access to any memory is always an N-cycle optional followed by S-cycles.&lt;/p&gt;&#xA;&lt;p&gt;To handle this the original ARM provided a signal &lt;code&gt;SEQ&lt;/code&gt; which would be pulled whenever the &lt;em&gt;next&lt;/em&gt; instruction fetch was exactly one word ahead. Any memory controller could use this to keep the page open, enabling fast access. By being tied to only sequential fetches &lt;code&gt;SEQ&lt;/code&gt; will not be pulled for any (random) data access, jump/branch or exception.&lt;/p&gt;&#xA;&lt;p&gt;To do so, the ARM featured a somewhat odd design around the address register (*2). Not the PC gets incremented each cycle, but the incrementer is assigned to the address register, doing an automatic increment after each access and then loaded into the register file to update the PC as well. Thus the next address is available as early as possible. Each load instruction of the address register (from PC or data access) will now suppress setting &lt;code&gt;SEQ&lt;/code&gt;, resulting in a full addressing cycle.&lt;/p&gt;&#xA;&lt;p&gt;It is safe to assume (*3) that the Load/Store multiple instruction (&lt;code&gt;LDM&lt;/code&gt;/&lt;code&gt;STM&lt;/code&gt;) use the same addressing mechanic and thus as well benefits due S-cycles.&lt;/p&gt;&#xA;&lt;h2&gt;Basic Timing Structure for RAM Access&lt;/h2&gt;&#xA;&lt;p&gt;The ARM bus protocol is not designed around a fixed clock source, like 6502 or 8080/8086 style bus protocol does, but reqiures clock signals (Phi1/Phi2) to be produced according to external requirements. Usually the memory controller does handle this according to the cycle detected (N or S) and the memory or I/O accessed.&lt;/p&gt;&#xA;&lt;p&gt;This is done by extending PHI1/2, depending on the accessed memory (usually PHI1), to meet the device criteria. For third party access, like DMA or DRAM refresh, any conflicting CPU access was postponed by stopping the CPU until it was done. Of course stopping (on DRAM) was only possible during a N-cycle, as S-cycles require that no different address would be issued inbetween - as DMA or Refresh would do (*4).&lt;/p&gt;&#xA;&lt;p&gt;It was also up to the memory controller to stretch PHI1 whenever an S-cycle crossed a page boundary and a new RAS cycle was needed. Outsourcing all memory handling was a great move to simplify the CPU design - after all, it's the memory subsystem as designed for each computer that knows best how to handle each memory or I/O type.&lt;/p&gt;&#xA;&lt;p&gt;In addition the memory controller could terminate a memory cycle by pulling &lt;code&gt;ABORT&lt;/code&gt;. AFAIR this was only used for memory protection.&lt;/p&gt;&#xA;&lt;p&gt;As a result &lt;strong&gt;a classic ARM CPU does not run at constant speed.&lt;/strong&gt; 4 MHz is rather the maximum possible speed, not the effective. While the effect is more or less the same as with wait states it does, in theory allow a very fine granuality of speed adjustment. In reality ARM's memory controller worked with a basic clock of 16 MHz, making it not much different from how it would have worked on an 8086/286.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Or more generic for all devices that allow a shortened sequential access, like nibble-ROMs.&lt;/p&gt;&#xA;&lt;p&gt;*2 - It's easy to see that the idea is inspired by the way the 6502 works.&lt;/p&gt;&#xA;&lt;p&gt;*3 - I couldn't find any reference supporting this. Still, it would be stupid not to use it as it comes for free.&lt;/p&gt;&#xA;&lt;p&gt;*4 - This again could create a possible memory memory fault if a program would do only continuous instruction fetch (S-cycles) without any jump or data access inbetween, as now the memory controller would not be able to do any refresh at all. (It would as well kill any DMA based video generation) It seams as if that risk was seen rather exotic :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-21T22:15:59.273" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13884" PostTypeId="1" CreationDate="2020-02-21T19:22:01.900" Score="1" ViewCount="105" Body="&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/projects/nitros9/&quot; rel=&quot;nofollow noreferrer&quot;&gt;NitrOS9&lt;/a&gt; is a modern clone of the original &lt;a href=&quot;https://en.wikipedia.org/wiki/OS-9&quot; rel=&quot;nofollow noreferrer&quot;&gt;OS-9&lt;/a&gt; operating system used on the &lt;a href=&quot;/questions/tagged/coco3&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;coco3&amp;#39;&quot; rel=&quot;tag&quot;&gt;coco3&lt;/a&gt;.  Both OS-9 and NitrOS9 have an EDIT command, a line-based text editor.  As far as I know, EDIT works the same in both.  Documentation for the EDIT command can be found in  the &lt;a href=&quot;http://www.colorcomputerarchive.com/coco/Documents/Manuals/Programming/OS-9%20Editor%20-%20Assembler%20-%20Debugger%20Manual%20(Microware%20System%20Corp).pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;OS-9 Editor/Assembler/Debugger Manual&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One characteristic of EDIT is that exiting the editor using the &quot;Q&quot; command (or its alias ESC) automatically saves your edits:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If input and/or output files were specified on the OS-9 command line when you started the editor, the text in buffer number one would be written to the initial output file, then the remainder of the initial input file would be copied to the output file.  After the text has been copied, the editor will be terminated and control will return to the shell.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;ibid. p. 1-16&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's great, but what if I've just made a mess of the file, such as an erroneous delete, and now I want to exit EDIT without saving the file?  The only way I've found to do this is to turn off or reset the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I exit EDIT without saving the file?&lt;/p&gt;&#xA;" OwnerUserId="3324" LastActivityDate="2020-02-22T04:46:38.587" Title="Exit NitrOS9/OS9 EDIT command without saving file" Tags="&lt;coco&gt;&lt;os-9&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13885" PostTypeId="2" ParentId="13881" CreationDate="2020-02-21T21:21:01.603" Score="3" Body="&lt;p&gt;The inverse perspective is to consider that ARMs were optimised for relatively slow memory (FPM DRAM), compared to contemporary pure RISC designs such as SPARC and MIPS which were designed for high frequency (40MHz or more) in &quot;expensive&quot; computers with caches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the target frequency was slower, ARM could afford more complex instructions than these RISCs (barrel shifter, conditional execution...).&#xA;It also reduced power draw, allowed cheap plastic packaging of the CPU, etc...&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2020-02-21T21:21:01.603" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13886" PostTypeId="2" ParentId="13856" CreationDate="2020-02-21T21:33:34.463" Score="4" Body="&lt;p&gt;I used an operating system with a MODCOMP minicomputer c. 1978 that had fixed partitioning.  I believe it was the MAX III operating system and a MODCOMP II computer.  During system build, you created partitions for foreground and real-time processes.  The foreground partitions you could use for program development; the background partitions were for the real-time programs.  They were fixed size (but not necessarily the same size).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that which program ran in the background partition or partitions was set during build time.  To change program you had to rebuild.&lt;/p&gt;&#xA;" OwnerUserId="3324" LastEditorUserId="3324" LastEditDate="2020-02-22T01:39:53.240" LastActivityDate="2020-02-22T01:39:53.240" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13887" PostTypeId="1" AcceptedAnswerId="13888" CreationDate="2020-02-21T21:36:52.213" Score="8" ViewCount="1420" Body="&lt;p&gt;The number of malware that can infect Mac computers has increased significantly last decade (2010-2019), particularly scams (including tech support scams) and fake anti-malware apps. since when malware for Mac computers did exist?&lt;/p&gt;&#xA;" OwnerUserId="15875" LastActivityDate="2020-02-22T11:13:32.983" Title="What was the first computer malware that could infect Mac systems?" Tags="&lt;apple-macintosh&gt;&lt;malware&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13888" PostTypeId="2" ParentId="13887" CreationDate="2020-02-21T22:33:00.583" Score="7" Body="&lt;p&gt;The first viruses for Mac were targeting Hypercard.  The first Hypercard virus appeared in about 1991.  Hypercard has a scripting language called HyperTalk, which was powerful enough to perform file-system accesses, thus allowing Hypercard viruses to discover and spread to other stacks (HyperCard &quot;documents&quot;).&lt;/p&gt;&#xA;" OwnerUserId="4476" LastEditorUserId="832" LastEditDate="2020-02-22T11:13:32.983" LastActivityDate="2020-02-22T11:13:32.983" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13889" PostTypeId="2" ParentId="13887" CreationDate="2020-02-21T23:04:04.877" Score="26" Body="&lt;p&gt;The very first virus might have been&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/NVIR&quot; rel=&quot;noreferrer&quot;&gt;nVir&lt;/a&gt;&lt;/strong&gt; of 1987&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Although technically not one, nVir worked much like a boot sector virus. Its source code did circulate on BBSes very soon after, leading to short flooding of copies. Still the damage was rather small. Not much later&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://books.google.co.jp/books?id=XE-ddYF6uhYC&amp;amp;pg=PT124&amp;amp;lpg=PT124&amp;amp;dq=hyperavenger%20macintosh&amp;amp;source=bl&amp;amp;ots=GhMMdoXPI0&amp;amp;sig=ACfU3U0zo4vHJ95sFZ9wANL9q-ATRYLbcQ&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=2ahUKEwjM_N3l3-PnAhW7zMQBHS__ABsQ6AEwC3oECB4QAQ#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;HyperAvenger&lt;/a&gt;&lt;/strong&gt; of 1988 (also called Dukakis-Virus)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;made its debut. It was based on &lt;a href=&quot;https://en.wikipedia.org/wiki/HyperCard&quot; rel=&quot;noreferrer&quot;&gt;HyperCard&lt;/a&gt; and became much more visible than nVir - after all, HyperCard was kind of a hype at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the mid 1990s a series of Word- and Excel-Macro virii did plague the Mac community.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-02-21T23:04:04.877" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13890" PostTypeId="2" ParentId="13884" CreationDate="2020-02-22T03:22:05.453" Score="2" Body="&lt;p&gt;While I am not familiar with OS9, I did read the linked PDF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As stated in the question's documentation quote, specifying input and output files upon opening the editor is optional.  The edit will only be saved automatically if the input and output files have been previously specified.  It also appears that only the output file will be modified, with the input file remaining intact.  If you don't like the edits you made that got saved automatically, you could just &lt;code&gt;DEL&lt;/code&gt; the new file after exiting the editor, and then try again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do want more control within the edit feature while still initially specifying input and output files, this could be accomplished using the &quot;File Management&quot; and &quot;Buffer Management&quot; features that are documented starting on page 1-21.  As it appears based upon the documentation, the buffer is only written to the output file when you enter the &quot;Q&quot; command.  You could, before entering the &quot;Q&quot; command, perform any number of operations, including re-editing your file, clearing the buffer, and even reloading the initial original file to start over from scratch, all before the output file ever gets written. The &quot;File Management&quot; features can also be used to modify the input and output file parameters that may have been specified upon startup, so that you can change what the output filename would be before exiting(emphasis added by me):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;CREATE OUTPUT FILE&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;SYNTAX: .WRITE str&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This command is used to create a new output file or close the file after it is no longer needed. The file opened replaces the original output file specified on the command line used to call the editor...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...Closing a file previously opened using the .WRITE command also &lt;strong&gt;restores the original output file.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11734" LastEditorUserId="11734" LastEditDate="2020-02-22T04:46:38.587" LastActivityDate="2020-02-22T04:46:38.587" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13892" PostTypeId="2" ParentId="13684" CreationDate="2020-02-22T15:12:47.140" Score="5" Body="&lt;p&gt;After posting the question I got a lot of helpful responses. This made me purchase a DiagROM on eBay. The DiagROM initially ran all tests fine, but after about 15 minutes it would hang when starting the 2nd graphics test. All other tests still worked fine without a problem. One of the other suggestions was to use contact cleaner to clean all the DIP sockets, which I did for Denise (and I sprayed some for good luck on Agnus as well). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this treatment the system has been working fine for the last couple of hours, so I consider it fixed at this point. Of course I will clean the rest of the sockets as well now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many thanks to everybody who helped with this!&lt;/p&gt;&#xA;" OwnerUserId="7784" LastActivityDate="2020-02-22T15:12:47.140" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13894" PostTypeId="2" ParentId="13856" CreationDate="2020-02-23T02:33:34.590" Score="3" Body="&lt;p&gt;Here's another off the road candidate: &lt;strong&gt;DoubleDuty for the TRS-80 Model 4&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It split the 128 KiB main RAM of a full fitted Model 4 into two 64 KiB partitions, each able to run a stand alone application, plus a 16 KiB partition with just DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BNQrg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BNQrg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;http://www.radioshackcatalogs.com/html/catalogs_extra/1985_rsc-12/hr027.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Catalogue scan&lt;/a&gt; taken from the &lt;a href=&quot;http://www.radioshackcatalogs.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Radio Shack Catalog Archive&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-02-23T02:33:34.590" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13895" PostTypeId="1" AcceptedAnswerId="13896" CreationDate="2020-02-23T11:11:25.833" Score="2" ViewCount="708" Body="&lt;p&gt;I'm trying to install and use the Arachne broswer under DOS (6.22). I've DOS installed on VirtualBox VM (5.2.34) under Linux Ubuntu (4.15.0-88-generic #88-Ubuntu).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm in trouble in configuring network and TCP stack on the configured DOS virtual machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried to configure the network with all kinds that virtualbox allows, but I think that the problem is that I am not able to remember how to configure the network under DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to install NE2000 or NE2100 or 3C509 drivers, but I'm not able to individuate the IRQ and port where the virtual card replies. I've tried a lot of IRQ and port combinations, but nothing runs: PORT 280,300,320,340,360 IRQ 3,4,5,7,9,10,11.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NE2000 and NE2100 drivers replies always: &quot;My Ethernet Address is FF:FF:FF:FF:FF:FF&quot; (where FF:..:FF should be the MAC address).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3C509 driver replies: &quot;No 3c509 found. Use a different id_port value. Default is 0x110.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore I'm not more able to use/configure NETBEUI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do somebody has a good solution!?&lt;/p&gt;&#xA;" OwnerUserId="16299" LastActivityDate="2020-02-23T13:14:01.777" Title="How to configure NETWORK and TCP on a DOS VM" Tags="&lt;ms-dos&gt;&lt;internet&gt;&lt;network&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13896" PostTypeId="2" ParentId="13895" CreationDate="2020-02-23T12:05:21.567" Score="5" Body="&lt;p&gt;The network card driver needs to correspond to the hardware emulated by virtualbox and neither of those you have tried, do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Full instructions seem to be present on the VirtualBox wiki - &lt;a href=&quot;https://www.virtualbox.org/wiki/Sharing_files_with_DOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.virtualbox.org/wiki/Sharing_files_with_DOS&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be especially aware of the extra step to have bridged network. &lt;/p&gt;&#xA;" OwnerUserId="447" LastEditorUserId="447" LastEditDate="2020-02-23T13:14:01.777" LastActivityDate="2020-02-23T13:14:01.777" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13897" PostTypeId="1" AcceptedAnswerId="13940" CreationDate="2020-02-23T12:49:44.487" Score="70" ViewCount="35468" Body="&lt;p&gt;Anyone who used an pre-Kickstart 2.0 Amiga will be very familiar with the &quot;Insert Workbench floppy&quot; image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2K0zB.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2K0zB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realise that this is subjective, but the image has always stuck me as ... well, a bit ugly. Quite apart from the misshapen thumb and fingers, the image seems very low-res: big blocky pixels and thick angular lines. It's certainly not stretching the Amiga's legendary graphics capabilities; Kickstart 2.0 and later had a much improved boot animation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming the screen resolution was the standard OCS 320x200 (or 320x256 for PAL): was there a technical reason for the image being so chunky, or was it just something that didn't really matter too much at the time?&lt;/p&gt;&#xA;" OwnerUserId="17" LastActivityDate="2020-05-17T09:18:55.540" Title="Why was the Kickstart 1.x &quot;Insert floppy&quot; graphic so bad?" Tags="&lt;amiga&gt;" AnswerCount="7" CommentCount="11" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13898" PostTypeId="1" AcceptedAnswerId="13903" CreationDate="2020-02-23T13:33:37.243" Score="4" ViewCount="463" Body="&lt;p&gt;The DEC PDP-1 had, unusually for its time, a vector graphics display. According to &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Digital_Equipment_Corporation&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/History_of_Digital_Equipment_Corporation&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Most systems were purchased with two peripherals, the Type 30 vector graphics display, and a Soroban Engineering modified IBM Model B Electric typewriter that was used as a printer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am surprised that the vector graphics display was that popular. It was famously used for Space War, one of the contenders for the title of first video game, but of course it wouldn't have been purchased for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just what was it used for?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-05-13T08:49:08.267" Title="What was the DEC Type 30 vector graphics display used for?" Tags="&lt;history&gt;&lt;dec&gt;&lt;pdp-1&gt;&lt;vector&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13899" PostTypeId="2" ParentId="13898" CreationDate="2020-02-23T15:05:34.863" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Just what was it used for?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The answer is in the name - &lt;strong&gt;to display graphics&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't make much sense to produce a list of application, but lets look at the core issue of having a screen at all: There were no of-the-shelf graphic terminals - or (CRT-based) terminals - at all. A terminal was a card punch, a tape punch (and their counterparts) or a typing terminal like a &lt;a href=&quot;https://en.wikipedia.org/wiki/Friden_Flexowriter&quot; rel=&quot;nofollow noreferrer&quot;&gt;FlexoWriter&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Electric_typewriter&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM Model B&lt;/a&gt; or C, or any other &lt;a href=&quot;https://en.wikipedia.org/wiki/Teleprinter&quot; rel=&quot;nofollow noreferrer&quot;&gt;TTY&lt;/a&gt; (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before vector displays, every output has to be done using either any of the above (hole or text based) devices or a plotter. At that time plotter weren't a comodity perhiperal, but devices with special custom interfaces, usually analogue. They were quite expensive, easy calling 40,000 USD and above. Using them was still a (comparable) slow process taking anywhere from 10 minutes to several hours. Getting to see a result within seconds on a screen was a game changer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact that &quot;most&quot; (*2) were delivered with a &lt;a href=&quot;http://www.computinghistory.org.uk/userdata/files/digital-precision-crt-display-type-30.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Type 30&lt;/a&gt; is simply due the the display being the most singular USP for the PDP-1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time (1959), competition was the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_740&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 740/780&lt;/a&gt; setup which cost 40,000 USD/year in rent. Just for the Display. A computer had to be rented as well. And even 5 years later, in 1964 the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2250&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 2250 Graphics Display Unit&lt;/a&gt; Started at 280,000 USD (sales price) for a basic configuration (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A 120+ grand PDP-1 with display was already a bargain if only used as terminal to some existing comuter&lt;/strong&gt;. And with the computer thrown in &quot;for free&quot;, it enabled small (*4) departments getting both a once.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - See &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5899/6659&quot;&gt;this answer&lt;/a&gt; for a partial overview of terminal development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - At that point it might be important to keep in mind the the phrase &lt;em&gt;&quot;Most systems&quot;&lt;/em&gt; sounds bigger than it is, as in total less then 60 PDP-1 were ever build.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Though, being expandable to 4 displays, this may put a per workstation price at or even below 100,000 USD :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Well, relative compared to the ones that could afford an IBM 704 with 740/780. It'll be still an investment worth more than a million USD of today's money.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2020-02-25T06:42:06.233" LastActivityDate="2020-02-25T06:42:06.233" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13900" PostTypeId="2" ParentId="13897" CreationDate="2020-02-23T16:10:21.923" Score="18" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm assuming the screen resolution was the standard OCS 320x200 (or 320x256 for PAL): was there a technical reason for the image being so chunky,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Chunky? Well, it's as usual in the eye of the beholder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But lets look at some issues:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any picture chosen &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;should be usable in all screen modes, as it's unknown what mode the machine has to come up&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;With more than 200x200px (IIRC), it's already close to maximum size&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;should not occupy more ROM than available&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;4 colours and acceptable size does so&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;should only use few colours for low colour modes&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;4 is good for anything past pure B&amp;amp;W&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;can only use few colours to work well on bad aligned and (grayscale) B&amp;amp;W screens&lt;/li&gt;&#xA;&lt;li&gt;needs to use strong contrast to be visible such&lt;/li&gt;&#xA;&lt;li&gt;may only use colours that translate well into (grayscale) B&amp;amp;W&lt;/li&gt;&#xA;&lt;li&gt;should have colours that translates into pure B&amp;amp;W as well&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;here selected blue can be turned into black and grey into white without damaging the image's message.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;or was it just something that didn't really matter too much at the time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, even a high resolution Amiga picture would fit in the upper left corner of your screen, maybe 1/10th the size of the standard Full-HD of today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We often tend to see back then graphics with today's standards. While it usually is of no harm, it hinders us often to see the real advancements certain things were.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Back then it was seen as a fine and highly detailed graphics symbol.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For judging its true impact, one need to compare it to the generation before. Like a C64. Here such a high resolution picture would need many tricks to be displayed in the same quality - if possible at all. So for 1985 this was state of the art and quite appealing.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;There is BTW a nice story about it being basically wrong: &lt;a href=&quot;https://retrodata.se/the-story-of-the-amiga-kickstart-image/&quot; rel=&quot;noreferrer&quot;&gt;The story of the Amiga Kickstart image&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-24T10:37:14.120" LastActivityDate="2020-02-24T10:37:14.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13901" PostTypeId="2" ParentId="13897" CreationDate="2020-02-23T16:14:43.877" Score="61" Body="&lt;p&gt;The limitation is based on saving precious space on the 8 KiB boot ROM for the Amiga 1000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before the &quot;Insert Workbench&quot; graphic ever graced an original Amiga 1000 from 1985, a user would first have to get past the &quot;Insert Kickstart&quot; screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nzZYa.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nzZYa.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the original Amiga 1000 lacked any Kickstart in ROM, this initial image had to be stored in the very limited boot code that was in ROM. This was only 8 KiB, so there was not a lot of space for a large, multi-colored bitmap to be included. Likewise, creating a more sophisticated graphic using drawing primitives would have required a great deal of code space. Likely, the engineers determined that a simple low-res image using 4 colors was most appropriate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, once Kickstart is loaded, there is potentially more space to set aside for a better graphic, and also a graphics library API that provides drawing primitives that could be used to code a nicer looking display. However, the engineers kept the simple graphic from the Amiga 1000's small boot ROM until the release of the Kickstart 2.0 ROM. This is when the ROM size doubled from 256 KiB to 512 KiB. Most likely, this freed the engineers to dedicate a little more space to making a better graphic, even including a simple animation. &lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="6659" LastEditDate="2020-02-25T00:11:26.833" LastActivityDate="2020-02-25T00:11:26.833" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13902" PostTypeId="2" ParentId="13897" CreationDate="2020-02-23T21:45:09.877" Score="52" Body="&lt;p&gt;Low number of bit planes (few colors) and low resolution saves kickstart ROM space as stated in the other answer(s). Another reason for the simplicity of the picture could be the limitation of available drawing tools when the kickstart logo was created. Considering the following to really be a post by the original artist Sheryl Knowles, creation of such an image was basically done on paper and the pixels had to be hardcoded by the programmers (i.e. there might have been &quot;pixel counting&quot; on graph paper involved):&#xA;&lt;a href=&quot;http://eab.abime.net/showpost.php?p=1159886&amp;amp;postcount=52&quot; rel=&quot;noreferrer&quot;&gt;Post by Sheryl Knowles at eab.abime.net&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One: there was no art tool on the Amiga before Graphicraft. We did every single illustration in the manuals, every &quot;show it off&quot; illustration that appeared in magazines or trade shows, and every practical graphic (i.e. the icons and fonts), pixel by pixel, with no tools other than being able to choose a color and place the pixel. No line tools. No fills. No shape tools. Two: We had no way to save our art work. So once designed, it had to go straight to the programmers to be coded in. I used a LOT of graph paper. Or, if it was an illustration, we had to photograph our screens and send that photo to the publisher needing it. Believe me, once Graphicraft was done, our jobs were so very much easier!&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;The boot disk that is the main topic of this thread was drawn by me holding it in my left hand and laying down the pixels with my mouse using my right hand.&lt;/strong&gt; I am right handed. It was not intended to be a literal illustration of the disk or how to use it. It was simply an icon to represent the need to use a disk. The drawing was limited in size and in the number of pixels that could be used, by the programming requirements of the time. All of which should explain why it's a bad drawing. But it was deemed a sufficient icon. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11374" LastEditorUserId="528" LastEditDate="2020-02-24T17:29:21.460" LastActivityDate="2020-02-24T17:29:21.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13903" PostTypeId="2" ParentId="13898" CreationDate="2020-02-24T05:37:33.567" Score="12" Body="&lt;p&gt;In that era you couldn't afford to build the raster displays that we have now.  The RAM for the frame buffer would have been far too expensive.  Vector displays were common, even though they had disadvantages - at engineering time you had to make a fixed-for-all-time choice between how long of a vector you could write vs. the persistence time of the phosphor.  (Longer persistence time meant you could write a longer vector - but refresh rate was slower, until you could no longer refresh fast enough to allow the user to perceive continuous motion - I'm not even talking about &lt;em&gt;smooth&lt;/em&gt; motion, but just the illusion that it was continuous rather than jumping about.  Shorter persistence meant you were limited in how much you could write before the user started getting headaches from flicker.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Terminals at the time only needed 2000 bytes of RAM - at most! - which would hold characters, that indexed into a ROM that had the pixel patterns for the characters.  A 640x200 display - CGA - would have needed 16Kb RAM and would have been considered nearly useless compared to the vector terminals which had typically a positioning resolution of 1K or 2K in both X and Y.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what did customer use vector display for?  All the cool stuff you'd expect.  CAD (for various engineering domains).  Visualization of engineering or scientific simulations.  Visualization of the status and performance of operating machinery or installations.  Operator consoles for various machinery or installations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And oddball stuff too ... it just depended if you had access to one or not.  E.g., at Harvey Mudd College in 1976 I wrote an IDE for manipulating &lt;a href=&quot;https://web.archive.org/web/20170602033002/http://www.ancientscripts.com/maya.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mayan glyphs&lt;/a&gt; which was used by a professor to prepare diagrams for papers he was publishing on them.  (It had a mode where you could draw new glyphs in a vector editor, and another mode where you could arrange the glyphs on a rectanglar grid - with subrectangles - according to the rules of Mayan ... grammar, I guess.) (At HMC you printed your resulting diagrams to this miserable electrostatic &quot;line&quot; printer - it printed high resolution dots just fine but on this stupid and expensive and smelly photosensitive paper so that your print job came out as dark grey on light grey - unless you left it on a windowsill where the sun could get at it which turned the whole thing black).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Source: Me. In the 80's I worked for a company that designed and built vector-graphics dedicated CAD workstations - &lt;a href=&quot;https://books.google.com/books?id=75XGp5bJW1UC&amp;amp;lpg=RA1-PA70&amp;amp;ots=EQPWK_X5-D&amp;amp;dq=vector%20automation%20%22baltimore%22&amp;amp;pg=RA1-PA70#v=onepage&amp;amp;q=vector%20automation%20%22baltimore%22&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vector Automation, in Baltimore, MD&lt;/a&gt;.  I also used an IMLAC PDS-1 extensively while in college, which I covered in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13063/332&quot;&gt;another answer&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="332" LastEditorUserId="7347" LastEditDate="2020-05-12T11:32:37.960" LastActivityDate="2020-05-12T11:32:37.960" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13905" PostTypeId="2" ParentId="5078" CreationDate="2020-02-24T07:39:25.150" Score="2" Body="&lt;p&gt;I would argue it is down to product differentiation, as suggested in this story from the Mac team:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;...Sculley is insisting that we charge $2495 for the Mac instead of $1995&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Price_Fight.txt&amp;amp;sortOrder=Sort+by+Date&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Price_Fight.txt&amp;amp;sortOrder=Sort+by+Date&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, they could have sold the Mac (at least the original 6809 128kb vision of the Mac) at much closer to Apple II GS prices. As a pure marketing decision, Apple executives decided to position the computer in the market somewhere in-between the Apple II (home and education), and the high end Lisa (corporate business). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking back, the Mac as launched was closer to the Lisa in terms of OS (the GUI at the time made the machine seem highly advanced) and targeted  SME businesses, so made sense for it to be priced significantly higher than 8 bit home computers of the era.&lt;/p&gt;&#xA;" OwnerUserId="13617" LastActivityDate="2020-02-24T07:39:25.150" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13907" PostTypeId="1" AcceptedAnswerId="13910" CreationDate="2020-02-24T08:42:38.337" Score="-1" ViewCount="422" Body="&lt;p&gt;Is it really the case that there was a port of Microsoft Word and Excel that was one of the first really successful software to feature on a Apple device? Did Microsoft software actually have a surprisingly positive effect on early Apple products or was it's influence relatively minor? &lt;/p&gt;&#xA;" OwnerUserId="12298" LastActivityDate="2020-02-27T19:12:35.897" Title="Was it true that Microsoft actually created software for early Apple devices?" Tags="&lt;apple&gt;&lt;microsoft&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13908" PostTypeId="2" ParentId="13907" CreationDate="2020-02-24T09:07:02.783" Score="5" Body="&lt;p&gt;It wasn't a port - the first versions of Excel came out on Mac, it didn't appear on Windows until version 2. The first version of Word came out on Xenix but it did appear on Mac very early on. I think it was more important in establishing Microsoft than selling Macs, as Lotus 123 and Mutliplan were the dominant spreadsheets back then.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2020-02-24T09:07:02.783" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13909" PostTypeId="2" ParentId="13907" CreationDate="2020-02-24T09:11:26.907" Score="10" Body="&lt;p&gt;I'm not sure you can get much earlier than Microsoft supplying &lt;a href=&quot;https://en.wikipedia.org/wiki/Applesoft_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Applesoft BASIC&lt;/a&gt; for the Apple II series in 1977.&lt;/p&gt;&#xA;" OwnerUserId="16384" LastActivityDate="2020-02-24T09:11:26.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13910" PostTypeId="2" ParentId="13907" CreationDate="2020-02-24T09:25:19.360" Score="16" Body="&lt;p&gt;Microsoft Excel was originally written for the Mac, and released in September 1985 (see &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Excel#Versions&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article here&lt;/a&gt;). It was released for Windows 2 in 1987 (and was in fact bundled with a version of Windows).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Word&quot; rel=&quot;noreferrer&quot;&gt;according to Wikipedia&lt;/a&gt;, Microsoft Word was released for the Mac &quot;in 1985&quot;. It had previously existed as a DOS program, being released for the first time on Windows in 1989 (also on Windows 2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember that Microsoft Word and Excel were really very good on the Mac in their early versions, but I don't think they had much of an impact on sales of the Mac platform overall. The initial &quot;killer app&quot; for the Mac platform was &quot;desktop publishing&quot; software. &lt;a href=&quot;https://en.wikipedia.org/wiki/Adobe_PageMaker&quot; rel=&quot;noreferrer&quot;&gt;Aldus PageMaker&lt;/a&gt; was released on the Mac in 1985 (and on Windows in 1987), and &lt;a href=&quot;https://en.wikipedia.org/wiki/QuarkXPress&quot; rel=&quot;noreferrer&quot;&gt;QuarkXPress&lt;/a&gt; was released on the Mac in 1987 (and on Windows 3.1 in 1992).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My own recollection of the period was that the Mac was seen as essential in the 1980s if you needed to do desktop publishing - and that Windows didn't stand a chance at competing until v3.1 was released in 1991, because that version was the first that supported scalable &lt;a href=&quot;https://en.wikipedia.org/wiki/TrueType&quot; rel=&quot;noreferrer&quot;&gt;TrueType fonts&lt;/a&gt;. This is because prior to that, Windows relied on raster-based fonts, that didn't scale - meaning that unless you had a copy of the typeface you wanted to use at the exact size you wanted to use it at, everything looked awful. The Mac had always been able to support the printing of &lt;a href=&quot;https://en.wikipedia.org/wiki/PostScript&quot; rel=&quot;noreferrer&quot;&gt;PostScript fonts&lt;/a&gt;, and so had a head-start with making text look pretty when printed.&lt;/p&gt;&#xA;" OwnerUserId="15962" LastActivityDate="2020-02-24T09:25:19.360" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="13911" PostTypeId="2" ParentId="13907" CreationDate="2020-02-24T09:51:59.573" Score="12" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;It seams as if the Question implies that there was some kind of fiendship between Microsoft and Apple. Such never existed. Microsoft was a major supplier of applications for all ranges of Apple computers and during all time.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Details&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is it really the case that there was a port of Microsoft Word and Excel that was one of the first really successful software to feature on a Apple device?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. At least not for Apple devices in general. Then again, for the Macintosh, Microsoft was a major supplier. In fact, &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Excel#Early_history&quot; rel=&quot;noreferrer&quot;&gt;Excel&lt;/a&gt; was developed for the Mac, only to appeared for the PC later.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did Microsoft software actually have a surprisingly positive effect on early Apple products or was it's influence relatively minor?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, it started already early on.  The Apple II's floating point BASIC called &lt;a href=&quot;https://en.wikipedia.org/wiki/Applesoft_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Applesoft&lt;/a&gt;, was a Microsoft Basic 2.0. So it came with each and every Apple starting with the II+.&lt;/p&gt;&#xA;&lt;p&gt;Similar did Microsoft sell the &lt;a href=&quot;https://en.wikipedia.org/wiki/Z-80_SoftCard&quot; rel=&quot;noreferrer&quot;&gt;Softcard&lt;/a&gt; with &lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M&quot; rel=&quot;noreferrer&quot;&gt;CP/M&lt;/a&gt; as base for their Z80 products. This shows quite well that there was no imagined shunning of each other, but cooperation. After all, CP/M wasn't a Microsoft product, but made by &lt;a href=&quot;https://en.wikipedia.org/wiki/Digital_Research&quot; rel=&quot;noreferrer&quot;&gt;Digital Research&lt;/a&gt;. So Microsoft payed them royalties (as well as building hardware) to sell their products to Apple customers.&lt;/p&gt;&#xA;&lt;p&gt;MS even supplied an alternate OS (&lt;a href=&quot;https://en.wikipedia.org/wiki/Xenix&quot; rel=&quot;noreferrer&quot;&gt;Xenix&lt;/a&gt;) and applications like &lt;a href=&quot;https://en.wikipedia.org/wiki/Multiplan&quot; rel=&quot;noreferrer&quot;&gt;Multiplan&lt;/a&gt; for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Lisa&quot; rel=&quot;noreferrer&quot;&gt;Lisa&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For the later Apple Microsoft was a launching partner, with Multiplan &lt;a href=&quot;https://web.stanford.edu/dept/SUL/library/mac/primary/docs/pr1.html&quot; rel=&quot;noreferrer&quot;&gt;announced &lt;em&gt;by Apple&lt;/em&gt;&lt;/a&gt; and Microsoft BASIC as some of the first products, already before the release of the Mac. Except, MS used the chance to do a complete redesign of Multiplan, as the code base was just out of hand (more than 100 parallel versions at the time), and replaced Multiplan soon. The new product was called Excel and targeted to beat &lt;a href=&quot;https://en.wikipedia.org/wiki/Lotus_1-2-3&quot; rel=&quot;noreferrer&quot;&gt;Lotus 1-2-3&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In fact, Excel as well as Word development was for long streaks driven by the Mac version, not Windows.&lt;/p&gt;&#xA;&lt;p&gt;It is known that &lt;a href=&quot;https://www.youtube.com/watch?v=YO-wR0TyY0M&quot; rel=&quot;noreferrer&quot;&gt;Bill Gates was a great fan&lt;/a&gt; of the Lisa as well as the Mac. In fact, his original strategy was to get Apple to release a PC version of their OS, or at least licence it to Microsoft. Quite understandable, as having the same OS running cross platform (*1) simplifies application (and language) development a lot. Porting would be a matter of recompilation. MS was an &lt;em&gt;Application&lt;/em&gt; and &lt;em&gt;Language&lt;/em&gt; company, not an OS house.&lt;/p&gt;&#xA;&lt;p&gt;MS had always a great interest in keeping Apple alive as Software for the Mac was a major source of income for MS. At some point they even owned Apple stock as part of a settlement - a cash injection crucial to Apples survival during the late 1990s.&lt;/p&gt;&#xA;&lt;p&gt;Today Microsoft offers all their major products, from Office all the way to Visual studio - even the edge browser - in Mac versions. Most of them not just simple ports, but quite well integrated with the Mac UI language.&lt;/p&gt;&#xA;&lt;p&gt;Wiki offers an overview of &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Macintosh_software_published_by_Microsoft&quot; rel=&quot;noreferrer&quot;&gt;Macintosh software published by Microsoft&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Also a reason why MS tried to push Xenix as hard at the time.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-27T19:12:35.897" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13912" PostTypeId="1" CreationDate="2020-02-24T10:32:29.837" Score="1" ViewCount="298" Body="&lt;p&gt;I use the atari800 emulator v. 4.2.0  on windows 10 and linux in latest version.&#xA;(&lt;a href=&quot;https://atari800.github.io&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://atari800.github.io&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I notice an annoying keyboard latency of up to 100-200ms (keypress-to-click and appearance of the letter, rough estimation), which is not present on real hardware.&#xA;How can I get rid of the latency and make the emulator behave like a real Atari 800XL machine?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Additional Info / Update:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I testet it with the build-in roms, also with real atari 800 XL OS and atari basic rom both on windows 10 on a pretty powerful machine (Surface Book 2) and also on Linux Mint deb-package (older version - three.something. I uninstalled it and don't remember the exact version number)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also compiled a version myself as a pure fb-console programm (emulator v.4,2,0) against SDL 1.2 (2.x does not support fbdev anymore, sooo sad...). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same issue on all OSses and machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Games, demos run fine, it is just the annoying delay between each keypress and the click sound/character appearance. It is not much but noticeable, especially when I type faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2nd Update&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no keyboard delay in the Altirra Emulator. (&lt;a href=&quot;http://www.virtualdub.org/altirra.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.virtualdub.org/altirra.html&lt;/a&gt;) but this is only available on windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;core question&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I need some special settings on atari800 to remove latency or is it just an issue with the emulator?&lt;/p&gt;&#xA;" OwnerUserId="16066" LastEditorUserId="16066" LastEditDate="2020-02-24T14:50:11.280" LastActivityDate="2020-02-24T15:35:12.313" Title="How to get rid of keyboard latency in atari800 emulator?" Tags="&lt;emulation&gt;&lt;atari&gt;&lt;atari-800&gt;" AnswerCount="2" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="13913" PostTypeId="2" ParentId="13897" CreationDate="2020-02-24T12:04:42.593" Score="0" Body="&lt;p&gt;It's actually pretty good for the time. The Amiga logo is anti aliased, almost certainly by hand. The hand itself is fairly detailed. Detail makes it harder to compress into the very limited ROM space available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compared to contemporary systems it wouldn't have looked bad. In fact not booting to a CLI but instead a graphic was quite novel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare it with the Mac, a later machine, that just had a tiny 8x8 black and white disk icon.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-02-24T12:04:42.593" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13914" PostTypeId="1" CreationDate="2020-02-24T14:43:52.753" Score="0" ViewCount="171" Body="&lt;p&gt;Does anyone have a quick primer to the way the 6800's compare-and-branch instructions worked internally? I'm referring to the instructions like &lt;code&gt;BLS&lt;/code&gt; that compared a value in memory to the accumulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I &lt;em&gt;guess&lt;/em&gt; that it automated the process of doing an internal &lt;code&gt;LDA,SBC,BNE&lt;/code&gt; sort of thing, but that would seem to require an additional internal register for holding the value during comparison?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-02-28T10:11:29.050" Title="How did the 6800's comparison operations work?" Tags="&lt;6800&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13915" PostTypeId="2" ParentId="13914" CreationDate="2020-02-24T14:52:26.907" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I guess that it automated the process of doing an internal LDA,SBC,BNE sort of thing, but that would seem to require an additional internal register for holding the value during comparison?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A common way to implement this kind of operation (used on 6502, Z80, at least the early PDP-11s), is to have the ALU compute the subtraction, and then discard the result. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take the 6502 as an example. The ALU unconditionally puts its result onto an internal bus, and then the value on the bus may be latched into any of the registers. So, by not latching the result into a register, the &lt;code&gt;cmp&lt;/code&gt; instruction comes almost for free if you have a subtract operand. The Z80 works in a similar way, and I bet the 6800 does too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find out exactly how it works over at Visual6502. Their 6800 simulation appears &lt;a href=&quot;http://www.visual6502.org/JSSim/expert-6800.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.visual6502.org/JSSim/expert-6800.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-02-24T14:52:26.907" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13916" PostTypeId="2" ParentId="13914" CreationDate="2020-02-24T14:54:42.013" Score="5" Body="&lt;p&gt;Like many other machines, the 6800 has a compare instruction CMP that compares the accumulator with another operand, specified just as it is in other instructions like ADD and SUB.  The CMP instruction, like ADD and SUB, sets the four condition code bits NZVC according to the arithmetic result -- in fact, it is identical with a SUB instruction, except that the result is not written back to the accumulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A subsequent conditional branch instruction such as BLS examines the condition code and branches if the condition is satisifed.  In the case of BLS, the branch happens if either the C bit of the Z bit is set (or both).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that many other instructions set the condition code -- too many to list here. It's common for the instruction immediately preceding the BLS to establish the condition code that is used to decide whether to branch. That instruction doesn't have to be a CMP: it could be an ADD or SUB, or some other instruction entirely.  In more tricky code, an earlier instruction might generate the condition code, provided intervening instructions do not modify the relevant bits.  Understanding such code entails knowing which instructions set which condition bits, something that distinguishes hot-shot coders from mere mortals like me.  My head is not big enough to memorise the details for more than one machine architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Edit] Source: The M6800 Programming Reference Manual on my desk.&lt;/p&gt;&#xA;" OwnerUserId="6510" LastEditorUserId="6510" LastEditDate="2020-02-28T10:11:29.050" LastActivityDate="2020-02-28T10:11:29.050" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13917" PostTypeId="2" ParentId="2008" CreationDate="2020-02-24T14:57:04.260" Score="4" Body="&lt;p&gt;And to all the other fine answers above, let me add the &lt;strong&gt;RCA COSMOS&lt;/strong&gt;, later better known as the &lt;strong&gt;RCA 1802&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was a relatively advanced CPU in 8-bit terms, with 16 16-bit registers (!!) but an 8-bit ALU and instruction set. A number of people, notably Tom Pittman (Tiny BASIC) claimed it to be their favorite CPU design and noted that it had very tight code, often 15% shorter than the 8080.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was originally implemented &lt;strong&gt;specifically as a home computer&lt;/strong&gt; starting in 1970 using TTL chips from RCA's labs, along with switches and lamps from Radio Shack. It filled a box about the size of an Altair and, over time, added TV output and cassette storage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time, RCA was investing heavily in CMOS, which was not a common process at the time. Unfortunately, this was also the period when RCA was being run by Sarnoff's son, who was far more interested in hobnobbing with Hollywood glam stars in his attempt to turn RCA into a media company.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually, they decided to build the CPU in CMOS, originally as the two-chip 1800/1801 in 1974, and then the single-chip 1802 the next year. This was the chip that went into early RCA products like the ELF and Studio II. But by that time the 6502 was crushing it in the market. However, RCA also made a silicon-on-sapphire version, which saw use in military and space roles for years.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-02-24T14:57:04.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13918" PostTypeId="2" ParentId="13912" CreationDate="2020-02-24T15:30:54.077" Score="6" Body="&lt;p&gt;From what I can make out, that emulator has &lt;a href=&quot;https://github.com/atari800/atari800/blob/231a72df3709be5d88bf1639bcfb4f3259c9fa41/src/sdl/main.c#L180&quot; rel=&quot;noreferrer&quot;&gt;its endless loop&lt;/a&gt; performing a simple:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;read keyboard;&lt;/li&gt;&#xA;&lt;li&gt;emulate whole frame;&lt;/li&gt;&#xA;&lt;li&gt;display frame;&lt;/li&gt;&#xA;&lt;li&gt;repeat.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The project actually has multiple &lt;code&gt;main&lt;/code&gt; functions, but they're all &lt;a href=&quot;https://github.com/atari800/atari800/blob/231a72df3709be5d88bf1639bcfb4f3259c9fa41/src/javanvm/main.c#L93&quot; rel=&quot;noreferrer&quot;&gt;similar&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Latency for keys once they've entered the application should therefore be between one and two frames — 'emulate whole frame' &lt;a href=&quot;https://github.com/atari800/atari800/blob/master/src/atari.c#L1055&quot; rel=&quot;noreferrer&quot;&gt;blocks until the end of the frame in real time&lt;/a&gt; so it's always going to be at least true that the thing shown at the end of a frame period is based on the key state at the start of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're unlucky enough to press a key exactly after the emulator has read the keyboard, that won't be factored into the current frame, it'll be factored into the next but not cause any visible effect until the end of the next frame. So that's just less than two frames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There'll also be some latency in a key getting to the emulator, as it traverses the Bluetooth or USB stack and is eventually subject to a scheduler to reach the intended process. But there's little the emulator can do about that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately large swathes of the emulator seem hard-coded around the fixed whole-frame cadence; see e.g. &lt;a href=&quot;https://github.com/atari800/atari800/blob/7ff9a6b126e5c7d7fd6685ccdcec59eb59e5787f/src/atari.c#L1283&quot; rel=&quot;noreferrer&quot;&gt;this section of calls&lt;/a&gt; to &lt;code&gt;Devices_Frame()&lt;/code&gt;, &lt;code&gt;INPUT_Frame()&lt;/code&gt;, &lt;code&gt;GTIA_Frame()&lt;/code&gt;, etc. So I'm not sure that a solution exists if you're seeing better behaviour from other emulators on the same system. But if you fancied the engineering challenge, the solution is what you'd guess — use  much smaller time slices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the emulator ran half a frame and a sync between every keyboard poll, you'd have a maximum of one frame of internal input latency. If it ran a quarter of a frame, you'd be down to a maximal half a frame of input latency. Etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The competing issue is precision in your OS's scheduler for timers or, to match the current implementation, ad hoc sleeping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speaking of SDL at least, I found that its built-in timers were very imprecise when I tested earlier this year; a requested 2ms resolution timer frequently showed variations of several ms under macOS. On the same computer a native dispatch source timer offered pretty good adherence to nanoseconds. So you may also find yourself boxed in by the emulator's abstraction layer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you might do is use &lt;a href=&quot;https://docs.libretro.com/library/atari800/&quot; rel=&quot;noreferrer&quot;&gt;the RetroArch port of Atari800&lt;/a&gt; since that's one cross-platform library where the developers specifically &lt;a href=&quot;https://www.retroarch.com/index.php?page=latency&quot; rel=&quot;noreferrer&quot;&gt;seek to minimise latency&lt;/a&gt;. Inevitably there are a lot of negatives with such a project, but it might at least help with that issue.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-02-24T15:30:54.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13919" PostTypeId="2" ParentId="13912" CreationDate="2020-02-24T15:35:12.313" Score="1" Body="&lt;p&gt;Hard to give a definite answer without real measurements.&lt;/p&gt;&#xA;&lt;p&gt;For Windows there may be a few optimization about how a keyboard is handled:&lt;/p&gt;&#xA;&lt;h3&gt;Disable &lt;em&gt;&amp;quot;Filter Keys&amp;quot;&lt;/em&gt; option&lt;/h3&gt;&#xA;&lt;p&gt;&amp;quot;Filter Keys&amp;quot; is part of the accessibility system for handicapped users. When enabled Windows ignores quickly typed keystrokes. To disable open the Windows Control Panel's &lt;em&gt;&amp;quot;Ease of Access Center&amp;quot;&lt;/em&gt;. Select &lt;em&gt;&amp;quot;Change How Your Keyboard Works&amp;quot;&lt;/em&gt; and uncheck &lt;em&gt;&amp;quot;Turn on Filter Keys&amp;quot;&lt;/em&gt;. Select &lt;em&gt;&amp;quot;Set Up Filter Keys&amp;quot;&lt;/em&gt; and disable &lt;em&gt;&amp;quot;Turn on Filter Keys when Right Shift is Pressed for 8 Seconds&amp;quot;&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;Throw Away All Wireless Mice and Keyboards&lt;/h3&gt;&#xA;&lt;p&gt;Just do it.&lt;/p&gt;&#xA;&lt;h3&gt;Reduce USB Load&lt;/h3&gt;&#xA;&lt;p&gt;While it's not a big thing, having USB devices sharing a single USB controller may add lag. This is especially true if sound (*1) or storage devices are involved.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Remove all unnecessary devices.&lt;/li&gt;&#xA;&lt;li&gt;If the system got multiple controllers, use one only for the keyboard.&lt;/li&gt;&#xA;&lt;li&gt;Remove all hubs between keyboard and controller&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In your case, using USB sound output would essential doubles the perceived USB lag.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-24T15:35:12.313" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13920" PostTypeId="1" AcceptedAnswerId="13922" CreationDate="2020-02-24T16:54:53.577" Score="14" ViewCount="1316" Body="&lt;p&gt;The first version of the DEC Alpha had no load/store instructions for 8 or 16-bit values; if you wanted to deal with data of such sizes, you had to do it by shifting and masking values in registers as necessary. (This restriction was abandoned later because too much existing technology was designed around the assumption that addressing bytes is a commonplace thing to do; I'm asking purely about the technical reasons for doing it that way in the first version.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the face of it, it makes sense that it would simplify the hardware. According to &lt;a href=&quot;http://alasir.com/articles/alpha_history/press/alpha_intro.html&quot; rel=&quot;noreferrer&quot;&gt;http://alasir.com/articles/alpha_history/press/alpha_intro.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Alpha is unconventional in the approach to byte manipulation. Single-byte&#xA;  stores found in conventional RISC architectures force cache and memory&#xA;  implementations to include byte shift-and-mask logic, and sequencer logic&#xA;  to perform read-modify-write on memory words. This approach is awkward to&#xA;  implement quickly, and tends to slow down cache access to normal 32- or&#xA;  64-bit aligned quantities. It also makes it awkward to build a high-speed&#xA;  error-correcting write-back cache, which is often needed to keep a very&#xA;  fast RISC implementation busy. It also can make it difficult to pipeline&#xA;  multiple byte operations. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But hang on. Alpha did support storing 32-bit numbers. But it was a 64-bit architecture. So that's already supporting storing values smaller than a full word. Doesn't that already incur precisely the complexity that they were trying to avoid?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, in a 64-bit CPU, isn't it pointless to refuse to support 8-bit stores if you are already supporting 32-bit stores that already need the same kind of hardware support? Or if not, why not?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-03-03T03:40:08.207" Title="DEC Alpha: why no 8/16-bit load/stores?" Tags="&lt;hardware&gt;&lt;cpu&gt;&lt;dec&gt;&lt;architecture&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13921" PostTypeId="2" ParentId="13897" CreationDate="2020-02-24T17:13:06.680" Score="4" Body="&lt;p&gt;It does the job it’s supoosed to do - it tells the user to insert a disk, and it does so without being language specific. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I always thought this was a rather clever and effective UI element. &lt;/p&gt;&#xA;" OwnerUserId="16203" LastActivityDate="2020-02-24T17:13:06.680" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13922" PostTypeId="2" ParentId="13920" CreationDate="2020-02-24T17:31:13.667" Score="16" Body="&lt;p&gt;Support for byte writes throughout a memory system is expensive.  Among other things, if one wishes to use error-corrected memory that can correct single-bit errors, a memory that can be written in independent 8-bit chunks byte-writable memory will require four extra bits per octet, or 16 bits per 32-bit word.  A memory that is limited to writing 16-bit chunks will require five bits extra per 16-bit word, or 10 bits per word; one that's limited to writing 32-bit chunks would only require six extra bits per word.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Worse, support for byte granularity increases the complexity of caching hardware.  If one is using a 256-bit bus between the cache and main memory, limiting writes to multiples of 32 bits would require using eight read/write control circuits and keeping track of eight dirty bits per row.  Allowing individual octets to be written would increase that to 32 separate read/write control circuits and 32 dirty bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For most tasks, having to use a read-modify-write sequence to update individual bytes would not be an issue.  Unfortunately for DEC, many programming languages specify that adjacent bytes within any character array may be safely written by different threads without requiring synchronization, and offer no means by which programmers can indicate that they don't need such semantics.  While the Alpha could efficiently process programs that wouldn't require it to accommodate the possibility of simultaneous writes to different parts of a word, languages provide no means of identifying such programs.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2020-02-24T23:30:46.613" LastActivityDate="2020-02-24T23:30:46.613" CommentCount="25" ContentLicense="CC BY-SA 4.0" />
  <row Id="13923" PostTypeId="2" ParentId="13920" CreationDate="2020-02-24T18:12:54.017" Score="14" Body="&lt;p&gt;Apart from anything else, Alpha was the VAX replacement - indeed, it was internally called EVAX. It would be necessary to take VMS source code written in VAX MACRO-32 assembler and compile it into Alpha machine code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VMS had a lot of dependency on 32-bit words. MACRO-32 code was explicit about length. Higher-level code, in BLISS-32, tended to be explicit about operand length or perhaps merely assumed that a fullword was exactly 32 bits. Ergo, any credible hardware base for VMS &lt;strong&gt;requires&lt;/strong&gt; efficient 32-bit operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume there was perceived to be no particular byte requirement for VMS since most (non-C) software would be using VMS conventions for strings (counted, not with a terminator character) and VAX machine instructions (MOVC3, CMPC3, etc., or the equivalent BLISS-32 'CH$' builtins), said instructions easily being emulated on Alpha.  C was not seen as a major implementation language on VMS at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Warning: opinion of one DEC software guy only)&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-03-03T03:40:08.207" LastActivityDate="2020-03-03T03:40:08.207" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13925" PostTypeId="2" ParentId="11001" CreationDate="2020-02-24T21:01:51.093" Score="-1" Body="&lt;p&gt;Easy.  PC-104 is an industrial interface used today. ISA is part of this interface, You just need and adapter or soldering cables. It works.&lt;/p&gt;&#xA;" OwnerUserId="16392" LastActivityDate="2020-02-24T21:01:51.093" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13926" PostTypeId="2" ParentId="11682" CreationDate="2020-02-25T07:04:33.143" Score="2" Body="&lt;p&gt;The Canadian MIL MOD80 was either 8008 or 8080 depending* on which CPU card was used. A fellow in Canada has mad3 reproduction boards. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://va3ngc.weebly.com/mil-mod-80-computer.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://va3ngc.weebly.com/mil-mod-80-computer.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16400" LastActivityDate="2020-02-25T07:04:33.143" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13927" PostTypeId="1" CreationDate="2020-02-25T12:49:54.150" Score="4" ViewCount="673" Body="&lt;p&gt;I'm attempting to compile a program in C for the ZX Spectrum using Z88DK.&#xA;However, I'm facing an issue when trying to use &lt;code&gt;printf&lt;/code&gt; to print out the value of a float.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code I'm trying to compile:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &amp;lt;math.h&amp;gt;&#xA;&#xA;int main()&#xA;{&#xA;    printf(&quot;Hello World\n&quot;);&#xA;    printf(&quot;Testing float...\n&quot;);&#xA;    double pi = 3.141;&#xA;    printf(&quot;Pi is: %f\n&quot;, pi);&#xA;    return 1;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and I'm compiling with:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;zcc +zx -lm -create-app -startup=1 -clib=new  main.c -o floatTest&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The program compiles however nothing is printed on the screen where the value of the float should be. Here is a screenshot of the Fuse emulator output of the program above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/itUlK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/itUlK.png&quot; width=&quot;400&quot; alt=&quot;Fuse emulator screenshot of output of program above&quot; title=&quot;Fuse emulator screenshot&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried using &lt;code&gt;float&lt;/code&gt; and &lt;code&gt;double&lt;/code&gt;, adding different formatting options like &lt;code&gt;%06.2f&lt;/code&gt;, but nothing seems to work. I can't get anything to display on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm stuck on how to resolve this issue and any help would be appreciated!&lt;/p&gt;&#xA;" OwnerUserId="16403" OwnerDisplayName="cobbm" LastEditorUserId="3290" LastEditDate="2020-06-07T03:54:49.843" LastActivityDate="2020-06-07T03:54:49.843" Title="Z88DK ZX Spectrum &quot;%f&quot; printf not working" Tags="&lt;z80&gt;&lt;zx-spectrum&gt;&lt;c&gt;&lt;compilers&gt;&lt;floating-point&gt;" AnswerCount="5" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13928" PostTypeId="2" ParentId="13927" CreationDate="2020-02-25T15:18:54.900" Score="3" Body="&lt;p&gt;The z88dk does not differentiate between &lt;code&gt;float&lt;/code&gt; or &lt;code&gt;double&lt;/code&gt;, at least with its own compiler; the SDCC backend is another beast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some years ago I played around with the z88dk, targetting the ZX81. I was kind of disappointed that its implementation of &lt;code&gt;printf()&lt;/code&gt; does &lt;strong&gt;not&lt;/strong&gt; support floating point data types. It might have changed in the meantime, but I'm afraid that rather not. A quick look through the &lt;a href=&quot;https://github.com/z88dk/z88dk/wiki&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki&lt;/a&gt; does not reveal anything, even though you might like to check this yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually there are different implementations of &lt;code&gt;printf()&lt;/code&gt;. The compiler decides by introspection of your source which one to use.&lt;/p&gt;&#xA;" OwnerUserId="14875" LastActivityDate="2020-02-25T15:18:54.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13929" PostTypeId="1" AcceptedAnswerId="13936" CreationDate="2020-02-25T16:36:59.660" Score="56" ViewCount="9388" Body="&lt;p&gt;Access to the DOS API was done through &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS_API#DOS_INT_21h_services&quot; rel=&quot;noreferrer&quot;&gt;the &lt;code&gt;INT 21h&lt;/code&gt; x86 instruction&lt;/a&gt;. This was always counter-intuitive to me, coming from 8-bit systems that accessed system services by calling subroutines through a &lt;a href=&quot;https://en.wikipedia.org/wiki/Branch_table&quot; rel=&quot;noreferrer&quot;&gt;jump table&lt;/a&gt;. This simple system seems to give the same benefits from indirection as using software interrupts on x86. An example of such a system is the kernel (or &quot;Kernal&quot;, for Commodore purists) used on Commodore's 8-bit machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, the reliance on software interrupts might be a reason for why the &lt;a href=&quot;https://en.wikipedia.org/wiki/Protected_mode#Real_mode_application_compatibility&quot; rel=&quot;noreferrer&quot;&gt;transition to using Protected mode&lt;/a&gt;, and accessing more than 640KiB of memory, was so slow and difficult for MS-DOS users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why didn't MS-DOS just use the &lt;code&gt;CALL&lt;/code&gt; instruction with a jump table instead of software interrupts? Did this choice impact MS-DOS programs being able to run in protected mode on the 80286+?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-03-26T10:34:03.723" Title="Why did the MS-DOS API choose software interrupts for its interface?" Tags="&lt;ms-dos&gt;&lt;assembly&gt;&lt;8086&gt;" AnswerCount="7" CommentCount="8" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13930" PostTypeId="2" ParentId="13929" CreationDate="2020-02-25T16:59:18.163" Score="9" Body="&lt;p&gt;The interrupt system really is just a fancy jump table...  Already has allocated space that can't be used for anything else.  Adding a regular jump table would have been a waste of memory at that time.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back then there was no Protected mode to worry about, never mind what its requirements would be...&lt;/p&gt;&#xA;" OwnerUserId="481" LastActivityDate="2020-02-25T16:59:18.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13931" PostTypeId="2" ParentId="13929" CreationDate="2020-02-25T17:06:13.650" Score="10" Body="&lt;p&gt;Nobody thought MS-DOS would be a long-lived system when it was created. Microsoft were quite clear that &lt;a href=&quot;https://en.wikipedia.org/wiki/Xenix&quot; rel=&quot;noreferrer&quot;&gt;Xenix&lt;/a&gt; was going to be the future. It just didn't turn out that way, because the vast sales of the IBM PC and compatibles caused the development of a lot of popular software. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using software interrupts with an operation code is very much like using a jump table, it's just that the jump table is in the OS' memory area rather than visible to the application programmer. That gives more flexibility to extend the OS, by adding more operation codes. If the table is in application-visible memory, it probably has to have a fixed size, which will limit extensions to the OS. Limiting MS-DOS to the set of APIs it had at version 1.x would have doomed it, because that API could not handle hierarchical directory structures. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software interrupts also made it more practical to change software &lt;em&gt;at source level&lt;/em&gt; to use protected mode. Use of a software interrupt allows a clean transition between user and supervisor modes, as opposed to having to write code to do that at each entry point in an OS jump table. This didn't work out, because a far greater range of development tools was produced for MS-DOS than Microsoft ever anticipated, and many people became fond of, or dependent on, bits of software that were no longer maintained, or were built with tools that were no longer available. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software interrupts had no impact on the 640Kb barrier, which was created by the hardware designers of the IBM PC, who had put the video memory at fixed addresses. The real problems with making protected-mode software were:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The absence of an OS, until OS/2 appeared, and its unsatisfactory nature at first. &lt;/li&gt;&#xA;&lt;li&gt;The completely different meaning of segment registers between real and protected mode, which meant that many of the established practices for dealing with data larger than 64Kb would not work. There wasn't a really satisfactory solution to this until 386 flat mode became available. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2020-02-25T17:06:13.650" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="13932" PostTypeId="2" ParentId="13929" CreationDate="2020-02-25T17:45:03.120" Score="13" Body="&lt;p&gt;Where would this 'jump table' live?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I understand it, the use of a pure trap-based mechanism for calling system services removes the need for user programs to have knowledge of supervisor program layout.  For the latter case, either (a) the table is at a well-known address that will never change, or (b) you need linker technology to include a system symbol table when linking a user program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-DOS uses a table at a fixed address, except that it is called an 'interrupt table'.  And by using INT 21 as the 'call' instruction, the user program does not even have to know the address of the table; the only 'address' (figuratively speaking) it has to know is the value 21 in the INT instruction.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus using a trap instruction effectively insulates user programs from system layout details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll find similar arrangements in many earlier operating systems. An example is the &lt;a href=&quot;https://en.wikibooks.org/wiki/360_Assembly/360_Instructions/SVC&quot; rel=&quot;nofollow noreferrer&quot;&gt;S/360 SVC instruction&lt;/a&gt;, which is a trap to a service routine vectored through a fixed low-core address. In other words, MS-DOS used a pretty normal approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(It's a trap, not an interrupt -- sigh)&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-02-26T12:13:49.313" LastActivityDate="2020-02-26T12:13:49.313" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13933" PostTypeId="1" CreationDate="2020-02-25T18:24:48.587" Score="5" ViewCount="413" Body="&lt;p&gt;A minicomputer like the PDP-8 contained several thousand discrete transistors and other components, all of which had to be soldered by hand, and that was among the simplest computers on the market; larger minicomputers and mainframes could contain hundreds of thousands of hand-assembled components. How many hours of labor did it take to do this assembly? (All labor input, from when components are delivered to the factory, to when finished machines roll out.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally I would like to gain a comprehensive understanding of how labor cost varied as a function of component count, but finding statistics for this will be potluck, so I will happily accept an answer that finds numbers for any computer or calculator prior to when wave soldering changed the picture. Failing that, I would be interested in figures for other electronic devices such as radios or TV sets of that era, if accompanying component counts are available to make them comparable.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-02-29T21:42:56.370" Title="How many hours of labor did it take to assemble a minicomputer?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;mainframe&gt;&lt;cost&gt;&lt;minicomputers&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13935" PostTypeId="2" ParentId="13933" CreationDate="2020-02-25T20:16:53.797" Score="6" Body="&lt;p&gt;Most PDP-series machines of this era were built using a large number of cards (with soldered components) connected by a wire-wrap backplane and a series of cables.  I think the cables were mostly used to interface major components together, such as the CPU to the RAM, storage drives, terminal multiplexers, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cards were considered standard components which could be interchanged relatively easily within type, and could be produced in volume.  I would be surprised if as much as a man-hour was required to produce each one, on average.  If PCBs and automatic soldering equipment were used, the main time consuming tasks would be to place the right components in the right holes, trim the leads, and test the finished result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some cards were actually core memory arrays, which required specialist assembly techniques and represented a substantial proportion of the final system cost.  Until the advent of semiconductor RAM ICs, this was still the most cost-effective type of system memory available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cables were also standard components which could be produced and stocked up against needs in the field.  A customer might reasonably want to keep disk and tape drives in a particular configuration, which may require longer cables to reach between racks or even through an under-floor trough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The single most complex component would have been the wire-wrap backplane.  Assembling one of these by hand would have been a monumental task, but DEC used automatic machines for this.  I'm sure it still took a while, but a machine can be set up and then left with minor supervision, instead of requiring many hours of craftsman-level skilled labour.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-02-29T21:42:56.370" LastActivityDate="2020-02-29T21:42:56.370" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13936" PostTypeId="2" ParentId="13929" CreationDate="2020-02-25T21:05:03.333" Score="70" Body="&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;p&gt;Using INT comes not only natural due the way the 8086 is designed, but was as well intended by Intel as OS entry point, much like a &lt;strong&gt;S&lt;/strong&gt;uper&lt;strong&gt;v&lt;/strong&gt;isor &lt;strong&gt;C&lt;/strong&gt;all (SVC) on /360 type mainframes:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Excerpt from the October 1979 Intel 8086 Family User's Manual page 2-28.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hyK2m.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hyK2m.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Software-initiated interrupt procedures may be used as service routines (&amp;quot;supervisor calls&amp;quot;) for other programs in the system. In this case, the interrupt procedure is activated when a program, rather than an external device, needs attention. The &amp;quot;attention&amp;quot; might be to search a file for a record, send a message to another program, request an allocation of free memory, etc. Software interrupt procedures can be advantageous in systems that dynamically relocate programs during execution. Since the interrupt pointer table is at a fixed storage location, procedures may &amp;quot;call&amp;quot; each other through the table by using software interrupt instructions . This provides a stable communication &amp;quot;exchange&amp;quot; that is independent of procedure addresses. The interrupt procedures may themselves be moved so long as the interrupt pointer table always is updated to provide the linkage from the &amp;quot;calling&amp;quot; program via the interrupt type code.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;INT is intended to move address dependencies from physical to logical, offering an abstract interface to services. Exactly what BIOS and DOS is. Using INTs for either is simply as it should be.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Access to the DOS API was done through the INT 21h x86 instruction. This was always counter-intuitive to me, coming from 8-bit systems that accessed system services by calling subroutines through a jump table.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For one, this is as well known for 8 bit, like with 8080/85/Z80 systems using the RST instruction. But more important, the interrupts are exactly this, an indirect subroutine jump using a jump table. It got several advantages:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Short two byte opcode vs. six byte for indirect far call&lt;/li&gt;&#xA;&lt;li&gt;Fast execution due to fixed address&lt;/li&gt;&#xA;&lt;li&gt;Portability as the address is not coded within the user program&lt;/li&gt;&#xA;&lt;li&gt;Use of a logical number that could be redirected in future versions&lt;/li&gt;&#xA;&lt;li&gt;Executing an INT is independent from the address mode the application or the OS runs in&lt;/li&gt;&#xA;&lt;li&gt;Taking the table out of user memory improves compatibility&lt;/li&gt;&#xA;&lt;li&gt;It's the most upward compatible design possible, as new CPU generations can use this as hook for task switch and alike without breaking compatibility&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The only 'cost' may seem that the flag register gets saved in addition. In reality this simplifies the OS interface even more, as the flag word is now located at a fixed address (SP+4), so its content can easy be manipulated for return information - like carry set for any error. The function handler has not to take care of producing the right flags from some artificial source just before return (like on many 8 bit OS's), but simply sets a bit in a defined memory location, the rest is done by hardware.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This simple system seems to give the same benefits from indirection as using software interrupts on x86.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really, as for a call the user software needs to know the address of said table, which makes it quite hard to move or virtualize it in future CPU/OS versions.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;An example of such a system is the kernel (or &amp;quot;Kernal&amp;quot;, for Commodore purists) used on Commodore's 8-bit machines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Commodore is a great example how fixed entry points complicates development of software. Most 6500 based commodore Kernals provide the same functionalities but located at different entry points. Software needs to be ported for each machine. Given, it often can be done with a few switches and recompilation, but writing software that can run on more than one or two machines needs to bring a compatibility layer.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Additionally, the reliance on software interrupts might be a reason for why the transition to using Protected mode, and accessing more than 640KiB of memory, was so slow and difficult for MS-DOS users.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Why? Do you have any proof thereof? The INTs were of no problem, as they work quite well in protected mode. The CPU handles everything necessary - which is exactly the reason why INT had to be used in the first place, it allows a simple hook for upward compatibility. Use of INT instructions for any userland -&amp;gt; OS call in applications is the base for transparent move to a protected mode system.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The real issue with DOS applications wasn't the INT system, or anything about the CPU, but applications breaking two basic rules of well behaving: Hardware assumptions about memory management and direct hardware access in general, both without using any protocol. Especially the first one is what made most of the DOS problems, the assumption that &lt;code&gt;Segment+1&lt;/code&gt; is the same as &lt;code&gt;Offset+16&lt;/code&gt;. Within a protected mode system this is no longer true. As a result, any program trying to 'outsmart' the OS will fail.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why didn't MS-DOS just use the CALL instruction with a jump table instead of software interrupts?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;See above, using a call table would give up all the advantages - and in most cases welcome the associated disadvantages.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did this choice impact MS-DOS programs being able to run in protected mode on the 80286+?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. It was, as said, direct hardware access, including memory management. Disrespecting the logic structure of the CPU made the move to protected mode basically impossible.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;Adding the INT instruction is one of the best decisions when making the 8086, full in line with the goal to create a CPU made for complex high level software. Using it was the right way to do.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Maybe Intel should have called it 'SVC' like 20+ years before Amdahl did for the IBM /360, where opcode X'0A' &lt;code&gt;SVC&lt;/code&gt; worked similar (*1) - and enabled compatibility across OS versions over many decades from real mode single CPU machines all the way to virtual multi-processor systems and 64 bit code.&lt;/p&gt;&#xA;&lt;p&gt;Then again, the 8086 is a simple microprocessor, so it makes sense to combine hardware interrupts and CPU exceptions with OS/function calls into a single mechanic.&lt;/p&gt;&#xA;&lt;p&gt;The only dark shadow, cast over the INT use, was due IBM's decision to use the interrupts below 20h for BIOS functions, as they were reserved by Intel for CPU exceptions.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Well, not completely, at least on early machines it used the default interrupt and the OS had to decode and jump.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-28T10:46:58.517" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="13937" PostTypeId="2" ParentId="13929" CreationDate="2020-02-25T21:07:17.467" Score="14" Body="&lt;p&gt;As I mentioned in my comment, IBM's BIOS also used interrupts for service dispatch when it could have easily chosen a well-known address as a ROM entry point (such as how a soft reset was programmatically available by jumping to &lt;code&gt;FFFF:0000&lt;/code&gt;).  I'm speculating, but Microsoft might have been following IBM's lead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, triggering an interrupt only takes two bytes in the calling code, and in a time when counting bytes was a must, that may have been part of the IBM/Microsoft design calculus. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But DOS &lt;em&gt;did&lt;/em&gt; offer a jump table as you're asking about: When a program started, DOS would provide a PSP for program information (such as the command-line arguments).  PSP offset 5h could be near-called to invoke the Int 21h dispatcher.  Most programs written for DOS didn't bother using it—they could call Int 21h directly—but the intention was to aid machine-translating code from CP/M to DOS, as it operated similarly as CP/M's Zero Page offset 5h (which was in turn a call to its BDOS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This mechanism, a legacy supported by Microsoft since DOS 1.0, caused problems with the A20 line and address wrap-around.  A &lt;a href=&quot;http://www.os2museum.com/wp/who-needs-the-address-wraparound-anyway/&quot; rel=&quot;noreferrer&quot;&gt;hair-raising summary and history&lt;/a&gt; of PSP offset 5h and the issues it led to can be found at the OS/2 Museum site.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that &lt;a href=&quot;https://www.eeeguide.com/8086-interrupt/&quot; rel=&quot;noreferrer&quot;&gt;Intel reserved interrupts 00h - 1Fh&lt;/a&gt; in the 8086 and later chips.  Since the ROM BIOS used many interrupts in that range, that did cause grief later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as how using interrupts for service dispatch caused problems with protected mode, I can only recommend reading up about &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS_Protected_Mode_Interface&quot; rel=&quot;noreferrer&quot;&gt;DPMI&lt;/a&gt; and the internal history of Windows 3.x.  (&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/&quot; rel=&quot;noreferrer&quot;&gt;Raymond Chen's blog&lt;/a&gt; is a good source for the latter.)  Microsoft wound up paying off technical debt for its early decisions, some of which were admittedly unavoidable.&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="4222" LastEditDate="2020-02-25T21:58:16.467" LastActivityDate="2020-02-25T21:58:16.467" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13938" PostTypeId="1" CreationDate="2020-02-26T00:40:14.033" Score="1" ViewCount="128" Body="&lt;p&gt;On bluemsx,  for the machine just labelled MSX,  adding a '.' full-stop after SCREEN 2 and typing various different types of rubbish does not generate a syntax error message .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SCREEN 2.11111&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Noticed this when trying to see if there were any hidden screen-modes for faster graphics ( I have read about why msx is so slow and about the chip, but thought maybe a completely unknown mode may exist inherited from an earlier version of the chip, a single color monochrome mode.&lt;/p&gt;&#xA;" OwnerUserId="16414" LastEditorUserId="7208" LastEditDate="2020-02-26T02:45:31.917" LastActivityDate="2020-02-26T02:48:07.917" Title="No syntax-error message from MSX BASIC `SCREEN` command" Tags="&lt;msx&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13939" PostTypeId="2" ParentId="13938" CreationDate="2020-02-26T00:53:43.410" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;On bluemsx, for the machine just labelled MSX, adding a '.' full-stop after SCREEN 2 and typing various different types of rubbish does not generate a syntax error message .&lt;/p&gt;&#xA;&lt;p&gt;SCREEN 2.11111&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This doesn't look like 'rubbish' but a valid floating point number. A number is a valid parameter to &lt;code&gt;SCREEN&lt;/code&gt;, so no reason to raise any &lt;em&gt;'Syntax Error'&lt;/em&gt; - try real rubbish, for example &lt;code&gt;SCREEN 2.abc&lt;/code&gt; and you'll get the desired error.&lt;/p&gt;&#xA;&lt;p&gt;When interpreting BASIC collects all digits and uses the integer part - '2' in this case - which is a legal screen mode, thus no reason to raise an &lt;em&gt;'Illegal Function Call'&lt;/em&gt; error.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: Nothing to see here, &lt;strong&gt;everything as expected.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-02-26T02:48:07.917" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13940" PostTypeId="2" ParentId="13897" CreationDate="2020-02-26T01:55:55.327" Score="41" Body="&lt;p&gt;Looking at the actual code, the iconic KS1.x Workbench disk-hand image is technically drawn as &lt;em&gt;vector art&lt;/em&gt; — except for the texts, which are bitmaps. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machine-language code uses a simple “program” — stored in an array — to draw the different parts of the diskette, hand, and the fingers, run-time. This “DSL” implements three commands: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Draw a polyline.&lt;/strong&gt; Parameters: color index for the drawing pen and an arbitrarily long list of &lt;code&gt;x,y&lt;/code&gt; coordinates.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Flood-fill an area.&lt;/strong&gt; Parameters: color index of the desired fill color and a single &lt;code&gt;x,y&lt;/code&gt; coordinate for indicating where to begin filling.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;End the program,&lt;/strong&gt; return.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There’s another kind of “program in an array” for drawing the bitmaps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code uses the &lt;code&gt;SetAPen&lt;/code&gt;, &lt;code&gt;Move&lt;/code&gt;, &lt;code&gt;Draw&lt;/code&gt;, &lt;code&gt;Flood&lt;/code&gt;, and &lt;code&gt;BltTemplate&lt;/code&gt; calls (and some others) from &lt;code&gt;graphics.library&lt;/code&gt; to do all this. The screen resolution is set to 320x200 (2 bitplanes; 4 colors) and the code centers the vector image by drawing it at an offset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume this code and the data it uses takes less space than, say, RLE-compressing the resulting bitmap image but it is a bit hard to assess exactly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not, maybe the vector art approach was taken simply because it was the least tedious way to create such art it in the absence of a proper bitmap graphics editor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I’m not sure how the A1000 drew its Kickstart disk prompt, though, if it did not have the &lt;code&gt;graphics.library&lt;/code&gt; available during the early stages of boot. Or maybe they included a stripped-down version of the library which only had the specific calls needed for recreating this image...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vector art data — without any code or bitmap images — takes 412 bytes: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FF 01 23 0B 3A 0B 3A 21 71 21 71 0B 7D 0B 88 16 88 5E 7F 5E 7F 38 40 38&#xA;3E 36 35 36 34 38 2D 38 2D 41 23 48 23 0B FE 02 25 45 FF 01 21 48 21 0A&#xA;7E 0A 8A 16 8A 5F 56 5F 56 64 52 6C 4E 71 4A 74 44 7D 3C 81 3C 8C 0A 8C&#xA;0A 6D 09 6D 09 51 0D 4B 14 45 15 41 19 3A 1E 37 21 36 21 36 1E 38 1A 3A&#xA;16 41 15 45 0E 4B 0A 51 0A 6C 0B 6D 0B 8B 28 8B 28 76 30 76 34 72 34 5F&#xA;32 5C 32 52 41 45 41 39 3E 37 3B 37 3E 3A 3E 41 3D 42 36 42 33 3F 2A 46&#xA;1E 4C 12 55 12 54 1E 4B 1A 4A 17 47 1A 49 1E 4A 21 48 FF 01 32 3D 34 36&#xA;3C 37 3D 3A 3D 41 36 41 32 3D FF 01 33 5C 33 52 42 45 42 39 7D 39 7D 5E&#xA;34 5E 33 5A FF 01 3C 0B 6F 0B 6F 20 3C 20 3C 0B FF 01 60 0E 6B 0E 6B 1C&#xA;60 1C 60 0E FE 03 3E 1F FF 01 62 0F 69 0F 69 1B 62 1B 62 0F FE 02 63 1A&#xA;FF 01 2F 39 32 39 32 3B 2F 3F 2F 39 FF 01 29 8B 29 77 30 77 35 72 35 69&#xA;39 6B 41 6B 41 6D 45 72 49 72 49 74 43 7D 3B 80 3B 8B 29 8B FF 01 35 5F&#xA;35 64 3A 61 35 5F FF 01 39 62 35 64 35 5F 4A 5F 40 69 3F 69 41 67 3C 62&#xA;39 62 FF 01 4E 5F 55 5F 55 64 51 6C 4E 70 49 71 46 71 43 6D 43 6A 4E 5F&#xA;FF 01 44 6A 44 6D 46 70 48 70 4C 6F 4D 6C 49 69 44 6A FF 01 36 68 3E 6A&#xA;40 67 3C 63 39 63 36 65 36 68 FF 01 7E 0B 89 16 89 5E FE 01 22 0B FE 01&#xA;3B 0B FE 01 61 0F FE 01 6A 1B FE 01 70 0F FE 01 7E 5E FE 01 4B 60 FE 01&#xA;2E 39 FF FF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Rendering algorithm:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Read two bytes at a time.&lt;/li&gt;&#xA;&lt;li&gt;If both bytes are &lt;code&gt;FF&lt;/code&gt;, end the program.&lt;/li&gt;&#xA;&lt;li&gt;If the first byte is &lt;code&gt;FF&lt;/code&gt; and the second byte is not, start drawing a polyline with the color index given in the second byte. Treat any subsequent two bytes as &lt;code&gt;x,y&lt;/code&gt; coordinates belonging to that polyline except if the first byte is &lt;code&gt;FF&lt;/code&gt; (see rules 2 and 3) or &lt;code&gt;FE&lt;/code&gt; (see rule 4), which is where you stop drawing the line.&lt;/li&gt;&#xA;&lt;li&gt;If the first byte is &lt;code&gt;FE&lt;/code&gt;, flood fill an area using the color index given in the second byte, starting from the point whose coordinates are given in the next two bytes.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The palette is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    0: #fff &#xA;    1: #000&#xA;    2: #77c&#xA;    3: #bbb&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The offsets used for drawing the image centered are &lt;code&gt;X=70&lt;/code&gt;, &lt;code&gt;Y=40&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;@v-joe adds some interesting points:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The research in his comments to this answer indicates the vector art approach saves about 3 kilobytes compared to run-length encoding the resulting bitmap. This is  significant win if you’re tight on space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13897/why-was-the-kickstart-1-x-insert-floppy-graphic-so-bad/13902#13902&quot;&gt;his answer&lt;/a&gt; quotes the original artist, Sheryl Knowles, as saying she only had the most primitive means of producing graphics at her disposal at the time of designing this image. Sheryl also mentions storage space-related limitations: “&lt;em&gt;[t]he drawing was limited in size and in the number of pixels that could be used&lt;/em&gt;”. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given this image is mostly composed of vector polylines, instead of an array of pixels, maybe Knowles did not mean pixels, per se, but the &lt;code&gt;x,y&lt;/code&gt; coordinate points in those polylines? That she had been specifically told not to use too many of those could explain the “angular” aspects of the image. It also tells us storage space really &lt;em&gt;was&lt;/em&gt; a concern during the design process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That all said — and getting back to the original question — it is likely the resulting image still &lt;em&gt;could&lt;/em&gt; be edited to look a bit more polished by fine-tuning and tweaking the placement of the polyline vertices while keeping the total number of them the same. But this is easy for us to say &lt;strong&gt;now&lt;/strong&gt; that we have modern vector art tools like &lt;em&gt;Inkscape&lt;/em&gt; and &lt;em&gt;Adobe Illustrator&lt;/em&gt; at our disposal. Knowles’s recollection of the design process seems to indicate she did not have a tool at hand that would have allowed her to do any advanced editing once the coordinate points had already been laid down.&lt;/p&gt;&#xA;" OwnerUserId="4893" LastEditorUserId="4893" LastEditDate="2020-02-29T19:03:45.353" LastActivityDate="2020-02-29T19:03:45.353" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13941" PostTypeId="1" AcceptedAnswerId="13942" CreationDate="2020-02-26T12:32:35.803" Score="4" ViewCount="1247" Body="&lt;p&gt;I'm perusing the &lt;a href=&quot;https://github.com/jefftranter/6502/blob/master/asm/a1basic/a1basic.s&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple I version of BASIC&lt;/a&gt;, later known as Integer BASIC on the II. In several places I see...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ADC     #$00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SBC     #$00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Unless I'm mistaken, these mean add/subtract zero. What might the purpose of this be? I thought it might be something to do with carry testing, but none of the instances have obviously related branches or compares.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="6659" LastEditDate="2020-02-26T15:22:46.380" LastActivityDate="2020-02-27T10:34:32.637" Title="Why use an ADC or SBC with immediate zero on a 6502?" Tags="&lt;apple-ii&gt;&lt;6502&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13942" PostTypeId="2" ParentId="13941" CreationDate="2020-02-26T12:43:20.707" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Unless I'm mistaken, these mean add/subtract zero.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Almost. It means add/subtract zero &lt;em&gt;plus carry&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if the Carry flag is set, then &lt;code&gt;adc #$00&lt;/code&gt; will increment the accumulator by one. Otherwise, the same instruction will leave the accumulator alone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Separately, the &lt;code&gt;adc&lt;/code&gt; instruction may also &lt;em&gt;set or clear&lt;/em&gt; the carry flags, if incrementing the accumulator meant that it rolled back round to 0.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What might the purpose of this be? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Adding an 8 bit value and a 16 bit value for example. My answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6640/how-did-8-bit-processors-perform-16-bit-arithmetic/6664#6664&quot;&gt;this question&lt;/a&gt; explains that you can add two-byte values on the 6502 by adding the two values one byte at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do that, you'd first clear the carry flag, &lt;code&gt;adc value&lt;/code&gt;, and &lt;code&gt;sta some_location_low&lt;/code&gt;. Then, the carry flag tells you if a carry needs to be added to or subtracted from the next byte. That's what's happening in the &lt;code&gt;Se1bc&lt;/code&gt; routine, which subtracts 2 from some value and then stores the pointer somewhere. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's 2 in hexadecimal? It's 0x0002. Here you can see that one of the bytes is equal to 0. That just needs to be added to the upper 8 bits of the 16 bit value because this will implicitly add the carry from the lower 8 bits.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2020-02-26T13:52:32.330" LastActivityDate="2020-02-26T13:52:32.330" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="13943" PostTypeId="2" ParentId="7252" CreationDate="2020-02-26T13:07:34.253" Score="1" Body="&lt;p&gt;For a long while there circulated rumors there used to be a 36-bit computer called the PDP-3.  According to legend, DEC made a paper design but never built it themselves.  Supposedly one customer took the design and built it.  &lt;a href=&quot;https://en.wikipedia.org/wiki/Programmed_Data_Processor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Information from Wikipedia&lt;/a&gt; is that the customer was &quot;Scientific Engineering Institute&quot; which was actually a front for CIA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper design &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp3/PDP-3_PrelimSpec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;has actually surfaced&lt;/a&gt;.&#xA;The document refers to the PDP-1 as a 18-bit version of the PDP-3, which is a fair assessment.  The instruction set is similar to that of the PDP-1, with the addition of index registers.  In this sense, the PDP-3 is more closely related to the PDP-1 than the other DEC 36-bit machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an &lt;a href=&quot;http://www.inwap.com/pdp10/usenet/pdp3&quot; rel=&quot;nofollow noreferrer&quot;&gt;analysis by Guy Steele&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2020-02-26T19:59:29.100" LastActivityDate="2020-02-26T19:59:29.100" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13944" PostTypeId="2" ParentId="13929" CreationDate="2020-02-26T14:56:26.993" Score="4" Body="&lt;p&gt;One advantage of using interrupts is that in a system that uses segmented memory you don't need to change the current page to the one with the jump table, or to allocate part of the 64k available to standard DOS programs to said table.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-02-26T14:56:26.993" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13945" PostTypeId="2" ParentId="13941" CreationDate="2020-02-26T15:03:51.317" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I see... &lt;code&gt;ADC #$00&lt;/code&gt; or &lt;code&gt;SBC #$00&lt;/code&gt;. Unless I'm mistaken, these mean add/subtract zero.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes - and taking care of a previous carry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ADC -&gt; Add with &lt;strong&gt;C&lt;/strong&gt;arry&#xA;SBC -&gt; Subtract with &lt;strong&gt;C&lt;/strong&gt;arry (*1)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What might the purpose of this be?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;ADC adds the content of the carry flag as well. So an &lt;code&gt;ADC #$00&lt;/code&gt; simply adds just the carry flag to A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The carry flag can be set by several instruction:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Arithmetic (&lt;code&gt;ADC&lt;/code&gt;, &lt;code&gt;SBC&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Compares (&lt;code&gt;CMP&lt;/code&gt;/&lt;code&gt;CPX&lt;/code&gt;/&lt;code&gt;CPY&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;The shifts (&lt;code&gt;ASL&lt;/code&gt;/&lt;code&gt;LSR&lt;/code&gt;/&lt;code&gt;ROL&lt;/code&gt;/&lt;code&gt;ROR&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and the obvious&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;direct manipulation (&lt;code&gt;CLC&lt;/code&gt;/&lt;code&gt;SEC&lt;/code&gt;) (*2)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I thought it might be something to do with carry testing,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's kind of. It's like adding testing if carry is set and when true adding 1 to A.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Within &lt;a href=&quot;https://github.com/jefftranter/6502/blob/master/asm/a1basic/a1basic.s&quot; rel=&quot;nofollow noreferrer&quot;&gt;the source&lt;/a&gt; there are several examples where addition/subtraction of immediate zero is used to incooperate carry:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In line 938-941 Carry comes clearly from previous &lt;code&gt;ADC&lt;/code&gt; &lt;/li&gt;&#xA;&lt;li&gt;Line 360-365 shows the same for use with &lt;code&gt;SBC&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;In line 520-22 Carry is delivered from a subroutine&lt;/li&gt;&#xA;&lt;li&gt;in line 1922-23 Carry comes from a &lt;code&gt;CMP&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Technically it should have been called Subtract with Borrow or &lt;code&gt;SBB&lt;/code&gt;, as carry acts as borrow when subtracting. See as well this Wiki entry about &lt;a href=&quot;https://en.wikipedia.org/wiki/Carry_flag#Carry_flag_vs._borrow_flag&quot; rel=&quot;nofollow noreferrer&quot;&gt;Carry flag vs. borrow flag&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - This is, BTW, a hidden gem. One always sees &lt;code&gt;CLC&lt;/code&gt;/&lt;code&gt;SEC&lt;/code&gt; before the start of an addition/subtraction, which lead easy to a hard coded impression it's the only usage. But it works as well the other way. Setting Carry before an addition will works as an implied offset of one. Quite handy in address calculation. Or certain formulas.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-27T10:34:32.637" LastActivityDate="2020-02-27T10:34:32.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13946" PostTypeId="2" ParentId="13941" CreationDate="2020-02-26T15:13:51.717" Score="4" Body="&lt;p&gt;&lt;code&gt;ADC&lt;/code&gt; and &lt;code&gt;SBC&lt;/code&gt; add/subtract their parameter, &lt;em&gt;plus/minus the value in the carry bit&lt;/em&gt;, to the accumulator. This means that you need to know the value in the carry before you start. If you want to add three to the accumulator, a typical sequence might be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        CLC&#xA;        ADC #3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As mentioned in another answer, you use the carry to &quot;carry through&quot; the, well, carry when adding multibyte numbers:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        CLC&#xA;        LDA xlo&#xA;        ADC ylo&#xA;        STA resultlo    ; sets carry if xlo+ylo &amp;gt;$FF, clears otherwise&#xA;        LDA xhi&#xA;        ADC yhi         ; previously set/cleared carry added in here&#xA;        STA resulthi&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But it gets a bit more sophisticated than that. Since there is no &quot;add/subtract without carry/borrow&quot; instruction, you always need to take into account the state of the carry when you do an addition or subtraction. But rather than blindly putting in &lt;code&gt;CLC&lt;/code&gt; and &lt;code&gt;SEC&lt;/code&gt; instructions everywhere, you often can take advantage of what you know about the code before the addition to use the existing state of the carry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplest case is when you are adding and know the carry must be clear:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        BCS somewhere   ; if carry set, go somewhere else&#xA;        LDA someloc     ; does not affect carry flag&#xA;        ;               ; no need to CLC here; carry must be set if we got here!&#xA;        ADC #3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Even trickier, you might subtract 1 from the constant you add if you know the carry will be set, letting the carry provide that extra 1:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        BCC elsewhere   ; if carry clear, go somewhere else&#xA;        LDA someloc&#xA;        ;               ; carry must be set if we reached this point&#xA;        ADC #MYCONST-1  ; subtract 1 from MYCONST because set carry adds 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are also cases where the carry explicitly contains the data you're trying to add. Say we're repeatedly reading an input value from a device and want to count the number of times the lowest bit was set (rather than clear):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        LDA input       ; we want to add contents of bit 0 of this input&#xA;        ROR             ; rotate bit 0 into carry&#xA;        LDA count&#xA;        ADC #0          ; add carry bit to count&#xA;        STA count&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;All of this applies similarly to &lt;code&gt;SBC&lt;/code&gt;, except that on the 6502 the carry bit becomes a &quot;borrow bit&quot;; you set it before subtracting and it will still be set if there was no underflow. (Other CPUs, such as the 6800, work the other way around when subtracting.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-02-26T15:13:51.717" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13947" PostTypeId="1" AcceptedAnswerId="13958" CreationDate="2020-02-26T17:25:45.737" Score="3" ViewCount="203" Body="&lt;p&gt;My rough understanding of the lights-and-switches console that many PDP-11 models had is that they were not hardwired into the CPU itself or anything, but implemented as just another Unibus device. What sort of control protocol did the console device expose?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was it possible for software to read the switches and drive the lights directly or was the console &lt;strong&gt;too&lt;/strong&gt; autonomous for that? E.g. I found this tutorial on using a &lt;a href=&quot;http://retrocmp.com/tools/pdp-1134-programmers-console&quot; rel=&quot;nofollow noreferrer&quot;&gt;console as UNIBUS diagnostic tool&lt;/a&gt; without even a running CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, I'm wondering if it were possible to switch the console into a mode where it wasn't actually debugging the CPU but instead providing a &lt;strong&gt;custom user interface&lt;/strong&gt;? Like a &quot;whack-a-mole game&quot; where an arbitrary data/address bit would flash and the player had half a second to flip the corresponding switch. Or — perhaps a better use of company/university computing resources — if the PDP-11 had been programmed as an industrial controller, the console lights could be relabelled as individual status indicators and the switches used independently to turn on/off a bunch of actual aspects of the equipment being operated.&lt;/p&gt;&#xA;" OwnerUserId="13904" LastActivityDate="2020-02-27T14:37:09.000" Title="Could the PDP-11 console be accessed &quot;raw&quot; by software?" Tags="&lt;pdp-11&gt;&lt;gui&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13948" PostTypeId="1" AcceptedAnswerId="13949" CreationDate="2020-02-26T17:55:31.923" Score="33" ViewCount="9255" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2659/588&quot;&gt;This question&lt;/a&gt; triggered a brain cell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember a computer architecture, possibly one that was known for its beautifully symmetric instruction set, with an assortment of distinct mnemonics for different conditional branch instructions. All were of the form &lt;code&gt;JUMPxx&lt;/code&gt; where the xx named the condition. I don't remember the exact spelling of any but two of them&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;JUMPA&lt;/code&gt; meant &quot;jump always,&quot; and&lt;/li&gt;&#xA;&lt;li&gt;Just plain &lt;code&gt;JUMP&lt;/code&gt; meant &quot;jump never&quot; (i.e., the assembler allowed you to write &quot;&lt;code&gt;JUMP&lt;/code&gt; &lt;em&gt;effective address&lt;/em&gt;,&quot; but it silently ignored the address expression, and it emitted a no-op.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What architecture am I remembering?&lt;/p&gt;&#xA;" OwnerUserId="588" LastEditorUserId="6769" LastEditDate="2020-02-27T20:20:22.327" LastActivityDate="2020-02-27T20:20:22.327" Title="On what computer did &quot;JUMP&quot; mean &quot;don't jump?&quot;" Tags="&lt;history&gt;&lt;architecture&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13949" PostTypeId="2" ParentId="13948" CreationDate="2020-02-26T18:14:56.990" Score="45" Body="&lt;p&gt;&lt;strong&gt;PDP-10.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It had a very orthogonal instruction set based around mnemonics with suffixes, and depending on the operation, sometimes no suffix meant a NOP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://pdp10.nocrew.org/docs/instruction-set/Arith-Tests.html&quot; rel=&quot;noreferrer&quot;&gt;http://pdp10.nocrew.org/docs/instruction-set/Arith-Tests.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="6659" LastEditDate="2020-02-26T18:18:50.257" LastActivityDate="2020-02-26T18:18:50.257" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13950" PostTypeId="1" CreationDate="2020-02-26T19:29:35.903" Score="10" ViewCount="1636" Body="&lt;p&gt;The way I understand Linux history, in the early 2000s, Linux introduced the DRI/DRM mechanism and framebuffers, so userland can write to the graphics card directly. Before that, &quot;console&quot; linux was pure text-mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did xfree86 draw itself on screen?&lt;/p&gt;&#xA;" OwnerUserId="16420" LastActivityDate="2020-02-27T18:29:10.353" Title="How did X talk to the video card before DRI/DRM?" Tags="&lt;linux&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13951" PostTypeId="2" ParentId="13950" CreationDate="2020-02-26T21:01:14.927" Score="5" Body="&lt;p&gt;DRM is about commands given to the processor of the graphics hardware. It's a common interface for a variety of different graphic processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before, there was either special X11 drivers which featured some acceleration for common operations, e.g. copying some rectangle from invisible parts of the video memory into the visible parts. Or the main CPU had to do this. Copying from main memory to video memory is always possible as somehow the video memory has to be populated in first place.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2020-02-26T21:01:14.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13952" PostTypeId="2" ParentId="13950" CreationDate="2020-02-26T21:05:42.240" Score="20" Body="&lt;p&gt;Before we had graphics support in the Linux kernel, any program that wanted to enter graphics mode had to access the graphics card directly. Those programs were generally &lt;em&gt;started with root privileges&lt;/em&gt; and asked the kernel to provide &lt;em&gt;direct hardware access from user mode&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides the X Server, some tools used &lt;code&gt;SVGAlib&lt;/code&gt;, a lightweight library to acces (Super)VGA cards in graphics mode, and there was &lt;code&gt;SVGATextMode&lt;/code&gt;, a program to set up high resolution text modes. Also, the mis-named tool &lt;code&gt;dosemu&lt;/code&gt; (which is in fact a VM monitor that boots a real DOS) had a mode called &quot;console mode&quot;, in which it claimed access to the graphics card and passed those access rights to the 8086 VM, so the native video BIOS of the graphics card could be used by DOS applications to set any mode supported by the card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the user application reprogrammed the graphics card without the kernel knowing about it, the user application also was responsible for re-setting the card to a sane text mode and telling the kernel that the graphics card is usable again. If an application crashed in graphics mode, the console was unusable. If the keyboard was not in raw mode (later Linux versions allowed Alt-SysRq-R to leave raw mode), one could try the script &lt;code&gt;textmode&lt;/code&gt; bundled with SVGAlib that reprograms the graphics card to a clean text mode, provided the text mode settings were saved with &lt;code&gt;savetextmode&lt;/code&gt; before messing up the graphics card state. Another option was to use &lt;code&gt;mode3&lt;/code&gt;, which used the video BIOS to reinitialize the graphics card to the standard text 80x25 mode (thanks ninjalj for the pointer).&lt;/p&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="836" LastEditDate="2020-02-27T18:29:10.353" LastActivityDate="2020-02-27T18:29:10.353" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13953" PostTypeId="2" ParentId="11545" CreationDate="2020-02-26T21:42:34.080" Score="1" Body="&lt;p&gt;in 1989 when I purchased my Tandon pcx-20 it had and still does (yes i have it still) a park command and had a tandon tm503 full height 3600rpm 20mb mfm hd service manual for drive states any shock past 20g will damage the drive! In a tandon 501-503 series this COMPLETELY moves the heads past the media to a designated parking spot for the assembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reason for park is the damage to head and media hitting each other during shipping would be much more catastrophic then vs now. servos like we have are not as delicate either today as they were in 1988.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays servo's autopark the head in newer drives,they don't even always have air inside now sometimes even helium is used!!!&lt;/p&gt;&#xA;" OwnerUserId="16422" LastEditorUserId="16422" LastEditDate="2020-02-26T21:47:37.963" LastActivityDate="2020-02-26T21:47:37.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13954" PostTypeId="1" AcceptedAnswerId="13956" CreationDate="2020-02-26T22:13:32.927" Score="5" ViewCount="253" Body="&lt;p&gt;When troubleshooting older electronics, the usual culprits tend to be connections and capacitors. The &quot;solid state&quot; components, if they have failed, usually in the role of victim e.g. bad voltage input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I was surprised when I found an IC chip in the middle of an otherwise functional circuit that was not behaving according to its datasheet. (In this case a WD1691V support chip in a TRS-80 Model III floppy interface.) Apparently this is not so unheard of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 1970s/1980s era TTL integrated circuits, is there an inherent failure rate due simply to &quot;age&quot; itself? Were some chips — whether through their design or a bad manufacturing run — more prone to &lt;a href=&quot;https://en.wikipedia.org/wiki/Bathtub_curve&quot; rel=&quot;noreferrer&quot;&gt;random and/or wear-out failures&lt;/a&gt; even after an uneventful burn-in?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How likely is it that a typical LSI IC would fail:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;simply due to shelf-life, i.e. time since manufacture?&lt;/li&gt;&#xA;&lt;li&gt;as a gradual side effect of routine usage, i.e. proportional to operating hours?&lt;/li&gt;&#xA;&lt;li&gt;only because of out-of-spec treatment, i.e. eventually something bad (voltage spike, cosmic ray, diet coke fumes…) comes along and hurts it&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="13904" LastEditorUserId="3290" LastEditDate="2020-05-01T07:23:33.383" LastActivityDate="2020-05-01T07:23:33.383" Title="What are typical causes of IC failure in early microcomputers?" Tags="&lt;chip&gt;&lt;component-failure&gt;&lt;integrated-circuits&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13955" PostTypeId="2" ParentId="13954" CreationDate="2020-02-26T23:11:28.137" Score="2" Body="&lt;p&gt;I'd hypothesize that the most frequent reason for old plastic-cased chips to fail is the plastic package itself. Inevitably there is a strain or pressure from the filling plastic to the crystal itself or to the bonding wires. After a long time, plastic might absorb water and the tension would change, or it might eventually get a small crack inside, or simply due to periodic (caused by thermal cycling, as mentioned by @Raffzahn) or constant stress aging -- crystal or bonding wires get destroyed and fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I might be wrong here, but my conclusion is that the ceramic package is more long-lasting. Probably those who have real expertise could (dis)agree now.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-02-26T23:11:28.137" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13956" PostTypeId="2" ParentId="13954" CreationDate="2020-02-27T01:12:48.237" Score="4" Body="&lt;p&gt;All chips will eventually fail due to age if something else doesn't get them first. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Bathtub_curve&quot; rel=&quot;nofollow noreferrer&quot;&gt;bathtub curve&lt;/a&gt; reflects this and shows how burn-in improves reliability by weeding out early failures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eliminating #3 (&quot;only because of out-of-spec treatment&quot;), the question becomes, what percent of chips die because of age and what percent die because of usage? I think it should be restated as something like, how many hours of shelf life is decreased by an hour of usage? And how many hours of shelf life is decreased by each power on/off cycle (Mean Cycles Between Failure or MCBF)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/High-temperature_operating_life&quot; rel=&quot;nofollow noreferrer&quot;&gt;Higher chip temperatures&lt;/a&gt; (above about 60C) and voltages also shorten a chip's life. And there are probably other metrics that I'm not thinking of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sorry for the long non-answer. It's possible that the data and even the metrics are secrets which are closely guarded by the chip makers.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2020-02-27T17:55:53.480" LastActivityDate="2020-02-27T17:55:53.480" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13957" PostTypeId="2" ParentId="13941" CreationDate="2020-02-27T02:18:40.900" Score="0" Body="&lt;p&gt;As an aside, the PowerPC has dedicated instructions for these operations: &lt;code&gt;addze&lt;/code&gt; (add to zero extended) and &lt;code&gt;addme&lt;/code&gt; (add to minus-one extended).  They are specifically for propagating the carry out from an extended-width arithmetic operation to the next higher machine word.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-02-27T02:18:40.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13958" PostTypeId="2" ParentId="13947" CreationDate="2020-02-27T03:11:36.290" Score="4" Body="&lt;p&gt;There's an address in the I/O page that when read, reads the switches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same address may correspond to a write-only display register on some processors; i.e., reading gets the switches, writing sets the display register. I think that only the 11/45 and 11/70, and variants thereof, permit writes. Even then, whether the display register is actually shown in the lights depends on the position of a physical selector knob.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The address is&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;777570  Console switch and display register&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Source: PDP11 04/05/10/35/40/45  Processor Handbook  1975-1976&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RSX-11M operating system (and similar, but this is the one I used) could include a GSSW$ (get sense switches) directive (system call) to allow any task to read the switches.  There was no equivalent lights directive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, 11M also permitted &quot;privileged tasks&quot; to access the I/O page directly, so such a task could read and write 777570 directly. See above as to whether the write resulted in changing lights, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, as you posted in a comment, if a WAIT instruction was executed, the content of R0 would be displayed in lights (subject to the aforementioned control knob being set to &quot;data paths&quot; on 11/45 or 11/70).  This was possible even if the processor did not have actual display-register support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wouldn't really call any of this &quot;accessing the console&quot; raw or otherwise, though. You don't have control of the console in any significant sense -- just the ability to read the switch register and update the data lights.  Sufficient for whack-a-mole, though.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As a footnote, the phrase you used, &quot;not wired into the CPU&quot;, doesn't seem likely to describe the situation. The console could access data paths within the CPU. On some models you could display microcode state. On a WAIT the lights showed the content of R0, Etc. The console had a Unibus address for reading switches and writing a display register, as I describe in this answer. But all those other console functions make it look to me (programmer, not H/W engineer) like it was heavily integrated with the CPU.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-02-27T14:37:09.000" LastActivityDate="2020-02-27T14:37:09.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13959" PostTypeId="2" ParentId="7095" CreationDate="2020-02-27T05:19:57.467" Score="4" Body="&lt;p&gt;One's complement requires different operations for signed integers than for unsigned integers. With two's complement, ADD and SUB are the same for both number types, except for overflow flags, so typically, a CPU sets both an unsigned overflow and a signed overflow flag for each ADD or SUB and this is easier than making 2 kinds of ADD and 2 kinds of SUB. This is closely related to modulo arithmetic : two's complement is a modulo 2^N just like unsigned integers, just with different labels (e.g. in mod 256, the number after 127 is called -128 instead of 128), whereas one's complement doesn't follow the rules of modulo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MUL often also is practically the same for two's complement and unsigned, if it doesn't give the answer in a field bigger than that of the operands ; otherwise you need to have a signed version. DIV always needs a separate signed version.&lt;/p&gt;&#xA;" OwnerUserId="16425" LastActivityDate="2020-02-27T05:19:57.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13960" PostTypeId="1" CreationDate="2020-02-27T12:49:55.313" Score="12" ViewCount="1039" Body="&lt;p&gt;On the Apple II, there are three 40 column text modes: normal (white on black), inverse (black on white) and flash. A text screen can contain a mix of text in all three of these modes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flash mode is roughly a 0.5s delay between cycling text between a normal and inverse mode. However, unlike the console cursor, the rate of the flash does not appear to be influenced by the speed of the CPU - my personal experience is with a RocketChip 5MHz and while the cursor flash is proportionate to the CPU speed, flashing 40-column text remains the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speaking of the cursor, on the II and II+ machines it is a flashing white block - if you backspace over a character, it appears to go between inverse and normal in this 0.5s cadence. On later machines, it was replaced by a matrix of dots. So the question is not only how is flashing text implemented on the II, but perhaps an extension would be is why is the cursor affected but not the flashing characters of the text display? Is flashing text CPU-timed or something else?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2020-02-27T23:38:31.553" LastActivityDate="2020-02-27T23:38:31.553" Title="How is the Apple II text flash mode timed?" Tags="&lt;apple-ii&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13961" PostTypeId="2" ParentId="13948" CreationDate="2020-02-27T14:21:27.840" Score="8" Body="&lt;p&gt;Although this isn't the processor you're thinking of, another example is that of early ARM chips, which allowed &lt;strong&gt;all&lt;/strong&gt; instructions to have a condition field, the default being AL (always), and also included NV (never).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NV condition was however deprecated/removed in later chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See for example: &lt;a href=&quot;http://infocenter.arm.com/help/topic/com.arm.doc.ddi0027d/DDI0027D_7di_ds.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://infocenter.arm.com/help/topic/com.arm.doc.ddi0027d/DDI0027D_7di_ds.pdf&lt;/a&gt; page 26&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If the always (AL) condition is specified, the instruction will be&#xA;  executed irrespective of the flags. The never (NV) class of condition&#xA;  codes shall not be used as they will be redefined in future variants&#xA;  of the ARM architecture. If a NOP is required it is suggested that MOV&#xA;  R0,R0 be used. The assembler treats the absence of a condition code as&#xA;  though always had been specified.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The use of conditions on any instruction was very useful to avoid short branches that would flush the pipeline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for example (remembering back at least two decades):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x = x - 100;&#xA;&#xA;if (x &amp;lt; 0)&#xA;  x = 0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...could become:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SUBS  R0, R0, #100 // Subtract literal 100 from R0, store in R0, and set flags.&#xA;MOVLT R0, #0       // Assign zero to R0 ONLY IF the arithmetic flags indicated less-than zero.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...instead of using (say) a &lt;code&gt;BGE&lt;/code&gt; to skip over the assignment.&lt;/p&gt;&#xA;" OwnerUserId="16429" LastActivityDate="2020-02-27T14:21:27.840" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13962" PostTypeId="2" ParentId="13929" CreationDate="2020-02-27T14:43:28.080" Score="2" Body="&lt;p&gt;8-bit POV: A bad design is GEOS which uses a fixed jump table. Therefore C64 and Apple II cannot share the same executable. A software interrupt is more flexible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a better solution see &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12296&quot;&gt;https://retrocomputing.stackexchange.com/a/12296&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7534" LastEditorUserId="7534" LastEditDate="2020-03-26T10:34:03.723" LastActivityDate="2020-03-26T10:34:03.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13963" PostTypeId="2" ParentId="13960" CreationDate="2020-02-27T14:46:52.247" Score="16" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How is the Apple II text flash mode timed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's a fixed timing signal generated by an NE555 timer (at position B3 on the original II+).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/C5KyE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C5KyE.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;em&gt;(From the Apple II Reference Manual / Red Book p.151)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Entering the values of C/R1/R2 into an &lt;a href=&quot;http://www.ohmslawcalculator.com/555-astable-calculator&quot; rel=&quot;noreferrer&quot;&gt;online calculator for NE555&lt;/a&gt;s will give about 2.1 seconds cycle time (*1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The II's video logic used bit 2^6 and 2^7 to control the level in text mode.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;7  6&#xA;0  0  - Inverted&#xA;0  1  - Inverted depending on the timer&#xA;1  0  - Not inverted&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is as well visible in the (screen) character set:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/b95XE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/b95XE.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This as well shows that the Apple II character generator only holds 64 different glyphs - using above logic to produce them in Normal/Inverted/Flash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no hardware cursor. It's essentially done by setting the two top bits of the character were the cursor should be shown to 01 (*2).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For the second part:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;an extension would be why is the cursor is affected but not the text display?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm not entirely clear what you describe/ask.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - These are analogue parts with up to 10% or more variation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - this is also, why pressing Reset may result having the 'old' cursor still blinking while a new one is displayed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-27T15:51:51.233" LastActivityDate="2020-02-27T15:51:51.233" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13964" PostTypeId="1" AcceptedAnswerId="13967" CreationDate="2020-02-27T16:03:36.110" Score="6" ViewCount="401" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.quadibloc.com/comp/cp0201.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.quadibloc.com/comp/cp0201.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CDC 1604 used 48-bit floating point with 11 bits exponent and 36 bits mantissa. There was also a double precision format (which I believe was added later as an option) that simply adds an extra 48 bits of mantissa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CDC 6600 went up to 60 bits, 11 exponent, 48 mantissa. There does not seem to have been a double precision option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it is worth noting that both computers came not only from the same company but the same designer, Seymour Cray. So the designer changed his mind, between those two machines, about the optimal floating-point size. (We are used to word size being mostly about the required size of addresses, but these computers were built primarily for fast floating-point arithmetic; the address sizes were separate and smaller.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can think of two reasons why he might've changed his mind:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Experience with the 1604 showed 48 bits was not always enough, so a double precision option had to be added. Cray took that experience into account when designing the 6600.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Maybe 48 bits was enough for the 1604, but was not enough for the 6600, which because of its greater performance would be used to perform longer chains of calculations, creating more opportunities for rounding error.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In other words, was the 48-bit 1604 a &lt;em&gt;mistake&lt;/em&gt;, discovered to be such once it had been used in production for a while? Or was 48 bits &lt;em&gt;the right choice for the 1604&lt;/em&gt; but not for the more powerful successor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or was there another factor I'm not taking into account?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-04T20:25:07.050" Title="Why did the CDC 6600 expand the word size to 60 bits?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;mainframe&gt;&lt;floating-point&gt;&lt;cdc&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13965" PostTypeId="2" ParentId="13960" CreationDate="2020-02-27T16:37:46.693" Score="4" Body="&lt;p&gt;Regarding the cursor, the character under the cursor is replaced with flashing text by &lt;a href=&quot;https://6502disassembly.com/a2-f8rom/OrigF8ROM.html#SymRDKEY&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;RDKEY&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;fd0c: a4 24        RDKEY       ldy     CH&#xA;fd0e: b1 28                    lda     (BASL),y        ;set screen to flash&#xA;fd10: 48                       pha&#xA;fd11: 29 3f                    and     #$3f&#xA;fd13: 09 40                    ora     #$40&#xA;fd15: 91 28                    sta     (BASL),y&#xA;fd17: 68                       pla&#xA;fd18: 6c 38 00                 jmp     (KSWL)          ;go to user key-in&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note the character from the screen is still in the accumulator.  The default KSWL function is &lt;code&gt;KEYIN&lt;/code&gt; at $fd1b.  After you hit a key, &lt;code&gt;KEYIN&lt;/code&gt; writes the new character, or in the case of ESC key movement the previous character, onto the screen before continuing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;fd1b: e6 4e        KEYIN       inc     RNDL&#xA;fd1d: d0 02                    bne     KEYIN2          ;incr rnd number&#xA;fd1f: e6 4f                    inc     RNDH&#xA;fd21: 2c 00 c0     KEYIN2      bit     IOADR           ;key down?&#xA;fd24: 10 f5                    bpl     KEYIN           ;  loop&#xA;fd26: 91 28                    sta     (BASL),y        ;replace flashing screen&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Replacing the flashing (or, for 80-column mode, inverse) text with an alternating checkerboard, as is done on the Apple //e, requires a bit more work in the ROM; &lt;code&gt;KEYIN&lt;/code&gt; jumps to code in the 80-column firwmware.  The logic is the same though -- replace the on-screen char with something else -- it's just done repeatedly.  (The hardware handles flashing text, but does not handle replacement with a checkerboard.  If you hit the reset key at the right time, you'll see a checkerboard character left behind.)&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2020-02-27T16:37:46.693" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13966" PostTypeId="2" ParentId="2998" CreationDate="2020-02-27T19:17:00.057" Score="3" Body="&lt;p&gt;It's not clear to me what constitutes a correct answer here, but here's my take.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;GW-BASIC&lt;/strong&gt; 3.23 uses a queue-based algorithm which is pretty robust. It has no trouble with either of your test cases or the u's mentioned by scruss; however it's still possible to design a pattern specifically to make it use lots of memory and overflow, even though it has nearly 60K available:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 DEFINT A-Z&#xA;20 SCREEN 1:WIDTH 40:KEY OFF:CLS&#xA;30 LINE (1,0)-(1,95)&#xA;40 LINE (1,97)-(1,191)&#xA;50 PSET (0,191)&#xA;60 LINE (3,49)-(3,143)&#xA;70 LINE (5,25)-(5,71)&#xA;80 LINE (5,121)-(5,167)&#xA;90 FOR I=0 TO 3:LINE (7,13+I*48)-(7,35+I*48):NEXT&#xA;100 FOR I=0 TO 7:LINE (9,7+I*24)-(9,17+I*24):NEXT&#xA;110 FOR I=0 TO 15:LINE (11,4+I*12)-(11,8+I*12):NEXT&#xA;120 FOR I=0 TO 31:LINE (13,2+I*6)-(13,4+I*6):NEXT&#xA;130 LINE (15,1)-(255,191),15,BF&#xA;140 FOR I=2 TO 190 STEP 2:LINE (15,I)-(255,I),0:NEXT&#xA;150 FOR I=16 TO 254 STEP 2:LINE (I,0)-(I,191),0:NEXT&#xA;1000 PAINT (0,0)&#xA;1010 PRINT INPUT$(1);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RpXyh.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RpXyh.gif&quot; alt=&quot;GW-BASIC fill algorithm in action&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trick to make it fail is that the left part makes it double the number of &quot;threads&quot; several times, and each &quot;thread&quot; then has to cope with the many rows of dots, which means lots of holes both up and down, each of which has to be enqueued, until it crashes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note there's a GW-BASIC emulator called &lt;a href=&quot;https://github.com/robhagemans/pcbasic&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC-BASIC&lt;/a&gt;; however, as of this writing, the flood fill algorithm it uses is not the same queue-based algorithm implemented in GW-BASIC 3.23, besides the fact that it &quot;cheats&quot; by having much more memory available).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the most robust algorithm I've seen, is one for the &lt;strong&gt;ZX Spectrum&lt;/strong&gt;. The system's BASIC doesn't have a FILL function, but there's a BASIC extension called &lt;a href=&quot;https://www.worldofspectrum.org/infoseekid.cgi?id=0007956&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Beta Basic&lt;/strong&gt;&lt;/a&gt; that does. Versions up to 3.1 have the most robust fill algorithm I saw at the time in a retro computer. I couldn't make it fail no matter what I tried.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  10 FOR x=1 TO 255 STEP 2&#xA;  20 PLOT x,0&#xA;  30 DRAW 0,175&#xA;  40 NEXT x&#xA;  50 FOR x=1 TO 175 STEP 2&#xA;  60 PLOT INVERSE 1;0,x&#xA;  70 DRAW INVERSE 1;255,0&#xA;  80 NEXT x&#xA;  90 FILL 1,1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Use graphics mode and &lt;code&gt;F&lt;/code&gt; to enter the &lt;code&gt;FILL&lt;/code&gt; keyword).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The price for that, however, is speed: the algorithm is somewhat slow. That's probably why it was replaced in version 4.0, even though the new one is very easy to crash with either of your test cases.&lt;/p&gt;&#xA;" OwnerUserId="16432" LastEditorUserId="16432" LastEditDate="2020-02-29T00:15:39.310" LastActivityDate="2020-02-29T00:15:39.310" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13967" PostTypeId="2" ParentId="13964" CreationDate="2020-02-27T21:43:06.940" Score="10" Body="&lt;p&gt;At &lt;a href=&quot;http://ed-thelen.org/comp-hist/vs-cdc-6600.html&quot; rel=&quot;noreferrer&quot;&gt;Ed Thelen's website&lt;/a&gt; one can find a pdf copy of &quot;Design of a Computer - The Control Data 6600&quot; by J.E. Thornton (Scott, Foresman and Company, 1970) with a foreword by Seymour Cray. Thornton was &quot;personally responsible for most of the detailed design of the Control Data model 6600 system&quot; according to the foreword by Cray. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On page 13, one finds&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The selection of the sixty-bit length was made for&#xA;  efficient instruction packing and for extended floating point precision.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(note that instructions were 15 or 30 bits, so could be packed into 60-bit words). &lt;/p&gt;&#xA;" OwnerUserId="8207" LastActivityDate="2020-02-27T21:43:06.940" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="13968" PostTypeId="1" AcceptedAnswerId="13973" CreationDate="2020-02-28T03:15:14.050" Score="8" ViewCount="300" Body="&lt;p&gt;A recent question on the PDP-10 &quot;JUMP versus JUMPA&quot; prompted this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference, see &lt;a href=&quot;http://pdp10.nocrew.org/docs/instruction-set/Arith-Tests.html&quot; rel=&quot;noreferrer&quot;&gt;this page of instructions&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SKIP instructions all skip based on the content of a specified memory location. The AC field is not used in deciding whether to skip. However, if the AC field is non-zero, then the content of the memory location is stored into the AC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The AOS, SOS instructions (Add One to memory and Skip, Subtract One from memory and Skip) likewise can load a non-zero AC as a side-effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't recall if I knew this at the time I was writing MACRO-10; I assume I knew about it since I'd read the manuals :-) but now it seems strange and arbitrary to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was the rationale for this behavior?  Are there significant use cases?  Is this simply the -10 equivalent of what I'd write on a condition-code machine as &quot;LOAD REGISTER FROM MEMORY; JUMP IF RESULT WAS NEGATIVE&quot; or similar?&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-02-14T10:29:24.160" Title="Why do PDP-10 skip instructions also load an AC?" Tags="&lt;pdp-10&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13969" PostTypeId="1" CreationDate="2020-02-28T03:55:34.957" Score="1" ViewCount="317" Body="&lt;p&gt;Why can’t the RTC (0x70, 0x71) read and write 16 bits at a time? For example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        mov     ax, 0xa8f&#xA;        out     0x70, ax&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I have found in a 286 BIOS that did this (BIOS ID string: S286-6181-101590-K0):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00005357  B87253            mov ax,0x5372&#xA;0000535A  26A36704          mov [es:0x467],ax&#xA;0000535E  B800F0            mov ax,0xf000&#xA;00005361  26A36904          mov [es:0x469],ax&#xA;00005365  B88F0A            mov ax,0xa8f&#xA;00005368  E770              out 0x70,ax&#xA;0000536A  E814C1            call word 0x1481&#xA;0000536D  B0FE              mov al,0xfe&#xA;0000536F  E664              out 0x64,al&#xA;00005371  F4                hlt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16437" LastEditorUserId="15334" LastEditDate="2020-10-10T20:04:22.093" LastActivityDate="2020-10-10T20:04:22.093" Title="Performing 16-bit port I/O on the RTC" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;assembly&gt;&lt;rtc&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13970" PostTypeId="2" ParentId="13969" CreationDate="2020-02-28T05:16:02.940" Score="5" Body="&lt;p&gt;Edit: Made a mistake, JustMe has the correct answer.  I was thinking the XT had an RTC, but it was an AT specific thing so the rationale for the 8 bit writes is chipset related and not directly on the 8086 bus.&lt;/p&gt;&#xA;&lt;p&gt;Old post below.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Because the CMOS chip might only have an 8 bit data interface.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Full Detail:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;An 8 bit I/O operation and a 16 bit I/O operation are fundamentally&#xA;different things on an x86 CPU.  At a logical level (because modern&#xA;iterations of the processor are pretty far removed from the signalling&#xA;of the 8088/8086), they behave as follows:&lt;/p&gt;&#xA;&lt;p&gt;8 Bit OUT:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Indicate 8 bit operation&lt;/li&gt;&#xA;&lt;li&gt;Latch Address lines to address specified&lt;/li&gt;&#xA;&lt;li&gt;Latch Data in the lower 8 bits of the Data lines&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;16 Bit OUT to even location on an 8086:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Indicate 16 bit operation&lt;/li&gt;&#xA;&lt;li&gt;Latch Address lines to address specified&lt;/li&gt;&#xA;&lt;li&gt;Latch Data in the 16 bits of the Data lines&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;16 Bit OUT to odd location, or any 16 Bit OUT on an 8088:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Indicate 8 bit operation&lt;/li&gt;&#xA;&lt;li&gt;Latch Address lines to address specified&lt;/li&gt;&#xA;&lt;li&gt;Latch low 8 bits of Data in the 8 bits of the Data lines&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;then&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Indicate 8 bit operation&lt;/li&gt;&#xA;&lt;li&gt;Latch Address lines to address specified + 1&lt;/li&gt;&#xA;&lt;li&gt;Latch high 8 bits of Data in the 8 bits of the Data lines&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;(Source: 8088/8086 Hardware Reference Manual - best to read it for&#xA;exact details on how A0 and /BHE work together on the 8086)&lt;/p&gt;&#xA;&lt;p&gt;Now, in the case of CMOS, the MC146818 and other similar chips that&#xA;implemented the port 0x70/0x71 interface had an 8 bit interface.  This&#xA;meant that for an 8086 to talk to in properly it needed to use the 8&#xA;bit version of the operation or the CMOS itself would never see the&#xA;top 8 bits of the write, given they were directly connected to the ISA&#xA;bus with various logic gates to control the activation of the chip on&#xA;only the 0x70/0x71 addresses.&lt;/p&gt;&#xA;&lt;p&gt;These days with the entire CMOS, and most other old-school backward&#xA;compatible stuff being implemented entirely in the chipset it likely&#xA;doesn't matter - depending on exactly how diligent they were in their&#xA;compatibility efforts (a PCI device is entirely at liberty to respond&#xA;differently to a 16 bit transaction at an address than it does two 8&#xA;bit transactions at consecutive addresses, for example).  If you're&#xA;writing a BIOS for a specific chipset then you know exactly how it&#xA;behaves so you can use whatever is appropriate, but if you're writing&#xA;a general purpose app/OS then you have to implement what is guaranteed&#xA;to work - the separate byte level OUT statements.&lt;/p&gt;&#xA;" OwnerUserId="11554" LastEditorUserId="15334" LastEditDate="2020-10-04T11:38:41.933" LastActivityDate="2020-10-04T11:38:41.933" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13972" PostTypeId="2" ParentId="13968" CreationDate="2020-02-28T07:16:00.440" Score="4" Body="&lt;p&gt;There are two reasons to have this group of instructions actually load the value that you're comparing.&lt;/p&gt;&#xA;&lt;p&gt;The first is that the instruction word has a field that specifies an accumulator anyway, and the instruction set is very orthogonal so it only makes sense that a compare instruction also references an accumulator. The &lt;code&gt;skip&lt;/code&gt; instructions compare a value to zero, but, it makes sense to have some additional implicit operation that works with the selected accumulator. Therefore, the skip instruction is better thought of as a load instruction that imposes a condition on the following instruction. If you don't want that behaviour, just choose AC0. Many instructions treat AC0 a little differently. The SKIP instructions do not load into AC0.&lt;/p&gt;&#xA;&lt;p&gt;The second reason is If you are going to compare something with a value, then it's likely going to be useful to be able to load that value as well. For example, It's handy for getting the minimum or maximum of several values, isn't it.&lt;/p&gt;&#xA;&lt;p&gt;Or, say you're traversing a linked list: you need the pointer to the next node in some register, but you also need to know if that pointer is a valid one. You can now easily make arrange for an instruction to be executed &lt;em&gt;only&lt;/em&gt; if the routine has or has not reached the end of the list. Exactly the same thing applies to, say, a null-terminated array such as a C-string.&lt;/p&gt;&#xA;&lt;p&gt;Or, say you have something like a sum of money (made up of pounds, shillings, pence) saved in separate registers, then you would need to check if pence &amp;gt; 11, because then you need to subtract 12 from this number and increment shillings. Then you need to check if shillings &amp;gt; 19, and if so, subtract 20 from shillings and increment pounds. In a scenario like that, after the comparison, it's very useful to have the actual number of pence or shillings or whatever in the register so you can proceed to do the subtraction and increment.&lt;/p&gt;&#xA;&lt;p&gt;An example from the ITS source code at src/chprog/ocm.470, line number 1070:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;RMPPT2: SKIPLE T1,BOARD+BW(A)&#xA;        SKIPLE T1,BOARD-BW(A)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What that's doing is loading &lt;code&gt;BOARD+BW(A)&lt;/code&gt; into &lt;code&gt;T1&lt;/code&gt;, unless that's a negative number or zero, then it loads &lt;code&gt;BOARD-BW(A)&lt;/code&gt; into &lt;code&gt;T1&lt;/code&gt;, and if that's also a negative number or zero, then the next instruction is skipped... You can see how this arrangement is useful for selecting one of many values.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-02-14T10:29:24.160" LastActivityDate="2021-02-14T10:29:24.160" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13973" PostTypeId="2" ParentId="13968" CreationDate="2020-02-28T08:42:40.480" Score="5" Body="&lt;p&gt;Some examples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare memory contents against two bounds:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        SKIPG A,FOO      ;FOO GREATER THAN ZERO?&#xA;         JRST LOSE&#xA;        CAIL A,BAR       ;FOO LESS THAN BAR?&#xA;         JRST LOSE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A subroutine can have two entry points loading different values into an accumulator:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ONE:    SKIPA A,[1]&#xA;TWO:    MOVE A,[2]&#xA;        ;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Convenient way to load memory contents plus one:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        AOS A,FOO&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="142" LastActivityDate="2020-02-28T08:42:40.480" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13974" PostTypeId="2" ParentId="13969" CreationDate="2020-02-28T12:36:35.307" Score="7" Body="&lt;p&gt;TL; DR: Because it is not a 16-bit device, as it has a multiplexed 8-bit address/data bus, and giving 64 IO addresses from the 256 reserved to PC motherboard devices would have been too much, so access to it was split into two IO ports, one to send address and another to read/write data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the chip does not have a separate address and data buses, they are multiplexed into one 8-bit address/data bus, to save IO pins. So basically the bus has two phases for each read or write; first the address write phase, and then the data read/write phase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it was a Motorola real-time clock chip, it could be directly connected to a compatible Motorola CPU with multiplexed address/data bus as memory-mapped IO, so it can be simply used like memory chip, reading and writing 8-bit data to one of the 64 registers at some base address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when it was used on IBM AT motherboard that has a 16-bit 80286 CPU, and all the motherboard IO devices already needed to be on a non-multiplexed IO bus for backwards compatibility with PC and TX, first some complex logic interfacing was needed to connect it like the other IO peripherals with non-multiplexed bus. It would have also been too much to give it 64 directly mapped IO addresses, as all the motherboard devices were reserved to be on the first 256 addresses. Therefore two IO ports were allocated, 0x70 to send the address cycle, and 0x71 to send the register data cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was also considered a slow device, so many BIOSes had delays between address and data cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And on the IBM AT, there was no mechanism to convert 16-bit IO cycles to two 8-bit IO cycles for the even motherboard addresses, only a mechanism to forward 8-bit access cycles on the high 8-bit bus to low 8-bit bus so 8-bit bus is enough for odd and even addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later clone computers with different chipsets and BIOSes were of course free to change all what IBM first did, allowing the CPU to use 16-bit IO to write RTC address and data in one cycle. Integrating or cloning the RTC functionality into the chipset as well also removes the limitation of accessing a real RTC chip via multiplexed 8-bit bus.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-02-28T12:36:35.307" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13975" PostTypeId="1" AcceptedAnswerId="13979" CreationDate="2020-02-28T14:01:58.327" Score="8" ViewCount="547" Body="&lt;p&gt;The 6809 has 59 instructions, as compared with 78 on the 6800. So far as I can see, the 6809 lacks instructions that the 6800 has, such as &lt;code&gt;aba&lt;/code&gt;, &lt;code&gt;eorb&lt;/code&gt; and the transfer instructions (&lt;code&gt;tba&lt;/code&gt;, &lt;code&gt;tap&lt;/code&gt; and the like).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, Wikipedia claims:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 6809 is assembler source-compatible with the 6800, though the 6800 has 78 instructions to the 6809's 59. Some instructions were replaced by more general ones which the assembler translated into equivalent operations and some were even replaced by addressing modes. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I can imagine that an assembler might have replaced the instructions I mentioned by a code-sequence that involved a temporary memory location. But this would have sacrificed some compatibility with programs that happen to use the same location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How was source-compatibility with the 6800 achieved?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(An aside, that's not really part of the question, but if you feel like elaborating on this in your answer, if you know how useful this feature was For example, how compatible was it really? Were any software titles known to have been built for both processors? etc. etc.) &lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2020-02-28T15:21:47.223" LastActivityDate="2020-10-19T10:02:42.407" Title="How did the 6809 achieve source-code compatibility with the 6800?" Tags="&lt;6809&gt;&lt;6800&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13976" PostTypeId="1" CreationDate="2020-02-28T14:11:43.963" Score="5" ViewCount="318" Body="&lt;p&gt;We know from the Datapoint 3300 &lt;a href=&quot;http://www.bitsavers.org/pdf/datapoint/3300/70116_3300termMaint_Dec76.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Maintenance&lt;/a&gt; manual the characters were formed on a 5x7 grid, and on page 2-55 we have an &quot;A&quot;.  But is it known what the rest of the characters looked like?  According to the &lt;a href=&quot;http://www.bitsavers.org/pdf/datapoint/3300/Datapoint_3300_Instructions.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Instructions&lt;/a&gt; manual, the 3300 had old ASCII style ↑ and ← instead of ^ and _, which doesn't match the TI datasheets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I'm adding a picture of the character generator ROM from the schematics.&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/4xAdR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4xAdR.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: This is from the 1971 TI datasheet.&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/HCMt7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HCMt7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2020-03-02T06:10:16.640" LastActivityDate="2020-03-02T06:10:16.640" Title="What did the Datapoint 3300 character font look like?" Tags="&lt;terminal&gt;&lt;font&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="13977" PostTypeId="1" AcceptedAnswerId="13989" CreationDate="2020-02-28T14:13:16.430" Score="26" ViewCount="2638" Body="&lt;p&gt;Above the keyboard of my Apple IIc there are two buttons that say &quot;80/40&quot; and &quot;Keyboard&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RVCkx.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RVCkx.jpg&quot; alt=&quot;Apple //c Keyboard Close-Up&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On my machine, they both kinda feel broken. When I press them, they recede into the case and remain there for a while. Eventually they reset to their original position; but pressing them feels sort of like shoving something between two couch cushions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What should these buttons do? How are they used? (I assume the 80/40 button has something to do with enabling 80-character mode.)&lt;/p&gt;&#xA;" OwnerUserId="4761" LastEditorUserId="7607" LastEditDate="2020-02-29T01:51:21.690" LastActivityDate="2020-03-03T08:57:05.353" Title="What do the '80/40' and 'keyboard' buttons on my Apple IIc do?" Tags="&lt;apple-ii&gt;&lt;keyboards&gt;&lt;apple&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13978" PostTypeId="2" ParentId="13977" CreationDate="2020-02-28T14:23:52.333" Score="17" Body="&lt;p&gt;According to the &lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=Apple_IIc&amp;amp;oldid=938692016#Built-in_accessories_and_keyboard&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia article&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The keyboard layout mirrored that of the Apple IIe; however, the “Reset” key had been moved above the “Esc” key. Two toggle switches were also located in the same area: an “80/40”-column switch for (specially written) software to detect which text video mode to start up in, and a “Keyboard” switch to select between QWERTY and Dvorak layout—or between US and national layout on non-American machines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As stated in the reference above, the &quot;80/40&quot; key is a signal to software that is aware of it, but the software has to know to care about it, and the &quot;Keyboard&quot; switch seems to be intended to switch keyboard layouts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also &lt;a href=&quot;https://web.archive.org/web/20171220174437/https://www.atarimagazines.com/creative/v10n10/30_Apple_IIc_revealed.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;references&lt;/a&gt; to this funcionality where it is mentioned that the number of columns on screen can also be changed in software with ESC-4 and ESC-8 (presumably to set 40-column and 80-column modes respectively).&lt;/p&gt;&#xA;" OwnerUserId="8911" LastEditorUserId="11734" LastEditDate="2020-03-01T11:31:05.960" LastActivityDate="2020-03-01T11:31:05.960" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13979" PostTypeId="2" ParentId="13975" CreationDate="2020-02-28T15:11:31.767" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So far as I can see, the 6809 lacks instructions that the 6800 has, such as aba, eorb &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;ABA&lt;/code&gt; becomes &lt;code&gt;PSHS B; ADDA ,S+&lt;/code&gt; - a nifty use of the autoincrement feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It shows as well were the temporary byte location comes from. After all, stack relative addressing, as well as indexing was one of the main features of the 6809. In fact, looking at his changes it got much in common with the 8086 as beeing developed with HLL constructs in mind (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;EORB&lt;/code&gt; is still the same on a '09.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;the transfer instructions (tba, tap and the like).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 6809 uses a unified instruction, 'TFR' so &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;`TBA` becomes `TFR B,A` (1F 98)&#xA;`TAP` becomes `TFR A,CC` (1F 8A)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and so on. Here's a full table taken from a Motorola manual:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;6800     6809 Replacement&#xA;ABA      PSHS B; ADDA ,S +&#xA;CBA      PSHS B; CMPA ,S +&#xA;CLC      ANDCC #$FE&#xA;CLI      ANDCC #$EF&#xA;CLV      ANDCC #$FD&#xA;CPX      CMPX P&#xA;DES      LEAS -1,5&#xA;DEX      LEAX -1 ,X&#xA;INS      LEAS 1.-S&#xA;INX      LEAX 1.X&#xA;LDAA     LDA&#xA;LDAB     LDB&#xA;ORAA     ORA&#xA;ORAB     ORB&#xA;PSHA     PSHS A&#xA;PSHB     PSHS B&#xA;PULA     PULS A&#xA;PULB     PULS B&#xA;SBA      PSHS B; SUBA ,S+&#xA;SEC      ORCC #$01&#xA;SEI      ORCC #$10&#xA;SEV      ORCC #$02&#xA;STAA     STA&#xA;STAB     STB&#xA;TAB      TFR  A,B; TST  A&#xA;TAP      TFR  A,CC&#xA;TBA      TFR  B,A; TST  A&#xA;TPA      TFR  CC,A&#xA;TSX      TFR  S,X&#xA;TXS      TFR  X,S&#xA;WAI      CWAI #$FF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(hope I didn't add any typo or screw replacements)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, how compatible was it really?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Even with this source code replacements, some incompatibilities exist:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6809 as designed is reasonably compatible with the 6800,&#xA;but with the added features some inconsistencies must exist.&#xA;Mostly around stack and flags:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Stack order for Interrupt/SWI differ (IIRC A and B is swapped)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;6809 SP point to the last entry, while 6800 points to the next&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;6809 addes E/F flag to the lag register where 6800 has fixed values of 11&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;TST does not affect C&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Shifts do not affect V&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Like with any automatic translation, the result should be put thru the same test bed as the original was.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Were any software titles known to have been built for both processors?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Like with many questions, it is important that the view of some users/gamers/hackers greatly differ from what chip makers have in mind when doing them. (Home-) Computers are just a tiny little fraction of their market. Not really important to design CPUs for it. Embedded has always been king and might hold this at least for all foreseeable future. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take for example the beloved 6502. The number of desktop machines is puny compared to embedded application. There may have been some 30-40 million units used in computers (*2) but they represent less than a percent of the 5-10 billion units claimed on the WDC website. The situation can be considered the same for basically all other microprocessors as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chip manufacturers care for their important market, and &quot;software titles&quot; are not what embedded systems run. Here also CPU generations don't get swapped by chance and at random points, but only when a new or updated device is made. This almost always include a redesign of the software, as it's about new features. Usually such a redesign needs a more powerful CPU or other new feature and engineers will go shopping for the best chip to perform, only held back by their penny counting department. And that's where (semi) automatic source conversion comes into play - they are sales tools to convince buyers that they get the power of a new chip but &lt;em&gt;may&lt;/em&gt; save great on software development as much of the old program can be reused. A wet dream for management always wanting to get a grip on those strange guys in engineering and development :))&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - If they only had added a way to address more memory - like due segmentation - today's PCs might be 6809 based ... well, somewhere way deep down beneath many layers of later extensions :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2  - ca. 12.5 M C64, 6.5 M Apple II and let all other come double this&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-28T16:22:39.073" LastActivityDate="2020-02-28T16:22:39.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13980" PostTypeId="1" AcceptedAnswerId="13983" CreationDate="2020-02-28T17:02:30.703" Score="20" ViewCount="4004" Body="&lt;p&gt;How were the 70's and 80's coin-op programmed?&#xA;What tools did a programmer use?&#xA;Nowadays a programmer can use a PC, an IDE to program, test, use breakpoint... but in the 80s?&#xA;How could a programmer test the graphics, the algorithms and so on?&lt;/p&gt;&#xA;" OwnerUserId="16447" LastActivityDate="2021-01-09T17:12:33.470" Title="How were the 70's and 80's coin-op programmed?" Tags="&lt;programming&gt;" AnswerCount="3" CommentCount="11" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13981" PostTypeId="2" ParentId="13980" CreationDate="2020-02-28T17:53:11.397" Score="17" Body="&lt;p&gt;The assembly (or, more rarely, compilation) was generally done on a &lt;a href=&quot;https://en.wikipedia.org/wiki/Minicomputer&quot; rel=&quot;noreferrer&quot;&gt;minicomputer&lt;/a&gt;, such as a &lt;a href=&quot;https://en.wikipedia.org/wiki/VAX-11&quot; rel=&quot;noreferrer&quot;&gt;VAX 11&lt;/a&gt;. The tools were often written in-house. They might have some sort of simulation software to help test some of the code, but in the end you'd use a PROM burner to burn your code on to EPROMs (EEPROMs were not widely available in the '80s) and plug them into a development board to see how well they worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jed Margolin, a hardware engineer for Atari in the '80s, did a lot of work on several of the classic arcade games from that period. A while back he published his &lt;a href=&quot;https://atariemailarchive.org/&quot; rel=&quot;noreferrer&quot;&gt;email archive from that period&lt;/a&gt;. Reading it will probably give you, as it did me, a lot of insight into the coin-op development process.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-02-28T17:53:11.397" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13982" PostTypeId="2" ParentId="7377" CreationDate="2020-02-28T17:59:48.600" Score="1" Body="&lt;p&gt;I noticed this is an older question, but there is a device called the &lt;a href=&quot;http://store.go4retro.com/zoomfloppy/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZoomFloppy&lt;/a&gt; that I am pretty sure will do what you need it to do. &lt;/p&gt;&#xA;" OwnerUserId="16445" LastActivityDate="2020-02-28T17:59:48.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13983" PostTypeId="2" ParentId="13980" CreationDate="2020-02-28T17:59:59.567" Score="13" Body="&lt;p&gt;Of course, there were hundreds of different standup arcade games, utilizing different hardware, and different developers creating software for them using different tools. So, there's no &amp;quot;one-size-fits-all&amp;quot; answer to your question. Rather, there were some general-purpose low-level ways of doing development back then that were fairly universal.&lt;/p&gt;&#xA;&lt;p&gt;First, early arcade games were programmed using machine language. The only &amp;quot;offline&amp;quot; tool that might have been used to free the developer from encoding opcodes by hand would be a simple &lt;a href=&quot;https://en.wikipedia.org/wiki/Assembly_language&quot; rel=&quot;nofollow noreferrer&quot;&gt;assembler&lt;/a&gt;. It was not unusual for early processor vendors to provide a cross-assembler for their processor, and that could run on common mini or micro computers of the time. Therefore, editing of the initial assembler source, and automatic conversion to machine code, could be done on a more advanced computer than the processor used in the arcade game.&lt;/p&gt;&#xA;&lt;p&gt;Second, the developer needed to be able to test their code. In some cases, they may have done that in a simulator while they were still working to finalize the custom hardware that would go into the arcade game. More likely, they tested their code on a prototype of the arcade game hardware. This meant that hardware and software were being developed and debugged simultaneously, which is hard. Thus, it was common practice for arcade game vendors to settle on a specific hardware platform, and then use that same hardware for as many arcade games as possible. This was common practice at least as far back as &lt;a href=&quot;https://en.wikipedia.org/wiki/Namco_Pac-Man&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pac-Man&lt;/a&gt; in 1980.&lt;/p&gt;&#xA;&lt;p&gt;Getting the machine code onto the hardware for testing could be a minor challenge. In some cases, EPROMs might need to be burned and plugged into the arcade board. More likely, the prototype development hardware would include a mechanism to download the target code using something simple like an &lt;a href=&quot;https://en.wikipedia.org/wiki/RS-232&quot; rel=&quot;nofollow noreferrer&quot;&gt;RS-232&lt;/a&gt; or [JTAG] (&lt;a href=&quot;https://en.wikipedia.org/wiki/JTAG#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/JTAG#History&lt;/a&gt;) port connected to a development computer. It's not that different, at least in concept, to how embedded software development is still done today.&lt;/p&gt;&#xA;&lt;p&gt;In most cases, besides having extra development aids like RS-232 ports, prototype hardware could also include special software on ROM to provide a monitor program. This would allow the developer to do things like insert breakpoints in the code and examine memory in order to track down bugs. If the prototype was more advanced, then an &lt;a href=&quot;https://en.wikipedia.org/wiki/In-circuit_emulation&quot; rel=&quot;nofollow noreferrer&quot;&gt;In-circuit emulator (ICE)&lt;/a&gt; may be available to simplify the debugging process by relying on additional hardware besides just the target CPU abilities. But even simple 8-bit CPUs of the time, like the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502&quot; rel=&quot;nofollow noreferrer&quot;&gt;MOS 6502&lt;/a&gt;, supported &lt;a href=&quot;http://6502.org/tutorials/6502opcodes.html#BRK&quot; rel=&quot;nofollow noreferrer&quot;&gt;break point (BRK) instructions&lt;/a&gt; that could invoke a resident monitor program.&lt;/p&gt;&#xA;&lt;p&gt;All in all, the process was not very different than the bootstrapping of any software onto any new hardware that was done for other computers of the time. And, to a pretty large extent, the same techniques are still employed today. It's just that off-the-shelf components are much more available and advanced now than in the early days. This frees modern developers from having to reinvent the wheel on such low-level tooling for compiling, assembling, downloading code, testing, and debugging.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="5199" LastEditDate="2020-08-19T06:52:09.040" LastActivityDate="2020-08-19T06:52:09.040" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13984" PostTypeId="2" ParentId="5027" CreationDate="2020-02-28T18:15:50.507" Score="2" Body="&lt;p&gt;Beach Head also had that scream. I believe it was the same one used in Impossible Mission 1 and 2. &lt;/p&gt;&#xA;" OwnerUserId="16445" LastActivityDate="2020-02-28T18:15:50.507" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13985" PostTypeId="2" ParentId="13980" CreationDate="2020-02-28T18:16:50.097" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How were the 70's and 80's coin-op programmed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not much different from today. But most definitely in a more hands on manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, all of this depended quite a lot on the company (size), target platform and most of all the time you're asking. Development changed extrem over just a few years from the mid 1970s to the mid 1980s. Where the very first developers had to use had coding and/or mini/mainframe computer for crossdevelopment and guesswork for debugging, developed the tool landscape fast into quite sophisticated hard and software tools during the 80s.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What tools did a programmer use? Nowadays a programmer can use a PC, an IDE to program, test, use breakpoint...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Much the same back then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Around 1975 to the mid 1980 a dedicated development system would be used like a PC today. These development systems were specialized modular systems like Intel's &lt;a href=&quot;http://www.bitsavers.org/pdf/intel/MDS/9800558B_introToMDS_Apr78.pdf&quot; rel=&quot;noreferrer&quot;&gt;Intellec MDS&lt;/a&gt; (running the &lt;a href=&quot;https://en.wikipedia.org/wiki/ISIS_(operating_system)&quot; rel=&quot;noreferrer&quot;&gt;ISIS&lt;/a&gt; development environment) or Motorola's &lt;a href=&quot;http://www.bitsavers.org/components/motorola/6800/exorciser/EXORcisor_Brochure_Mar75.pdf&quot; rel=&quot;noreferrer&quot;&gt;Exorciser&lt;/a&gt;. These systems provided integrated development. Maybe not as point and click as today, but incredible cool for back then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Test didn't happen on virtual hardware, as hardware simply wasn't fast enough to do so, but using the the 'real thing' and hardware debugging tools. An arcade board would be hooked up as a slave system using an &lt;a href=&quot;https://en.wikipedia.org/wiki/In-circuit_emulation&quot; rel=&quot;noreferrer&quot;&gt;In Circuit Emulator&lt;/a&gt; (ICE). The development could stop at any condition within the (hardware) emulated CPU as well as external conditions. This was complimented by ROM-simulation hardware. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but in the 80s?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now, that's a big jump. In general the 80s continued this, but now standard PC type machines replaced CPU vendor specific machines, with the added help of specialized developer versions of arcade boards. The same happened BTW for console development, except here the development hardware was made available to external developers as well.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How could a programmer test the graphics, the algorithms and so on?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Usually by loading ROM emulation units, plugged into the arcade board, from the development system and running the board as before. Tests happened in real time on the real hardware - with the ability to insert hardware breakpoints from the development system, or changing ROM content on the fly.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Hardware based development was used way into the 2000s until either standard hardware became fast enough for real time emulation or, more important, console systems (like X-Box or PS4) became more like PCs ths enabling the same development cycle as for PC-Software.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-02-28T18:45:34.017" LastActivityDate="2020-02-28T18:45:34.017" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="13986" PostTypeId="2" ParentId="13977" CreationDate="2020-02-28T19:59:29.757" Score="11" Body="&lt;p&gt;Though Thomas Jager is correct in his answer, I'll add a bit about the practicality of those switches for a USA model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 40/80 column switch never appeared to do anything in any of the software I used. Though it has been years since I used a //c, I think it might have set the display mode at startup (i.e. pushed in, the computer would boot in 80 columns). Pressing the button during runtime did nothing since it didn't trigger any interrupts or code in the Apple, it only would set a flag in memory that something could read. I'm sure there is something out there that used it, but I'm not aware of anything in particular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The keyboard switch was interesting, but only for those who believed that the Dvorak layout was more efficient that Qwerty. As for me and my friends, we'd experiment with it but since the key caps on the //c did not have the alternate layout printed on them nobody that I knew ever really pursued it. I feel like it takes a good week or two to get used to a new layout and several to become proficient. To be honest, I think it was a neat feature but hardly (if at all) used. Perhaps if Apple made it easier to show the Dvorak map (either by dual-printed or easily swapped key caps).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My 2&amp;cent;.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2020-02-28T19:59:29.757" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="13987" PostTypeId="1" AcceptedAnswerId="13988" CreationDate="2020-02-28T21:13:19.147" Score="4" ViewCount="112" Body="&lt;p&gt;So, does anybody have a list of TOPS-10 versions? I haven't been able to find any information aside from versions 7.03, and 7.04. are these lost to time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify, I'm not asking for the software, just a list of versions, maybe an old catalog or something. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anybody got info? I apologize if this is the wrong type of question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: thank you for the responses, I haven't found a single list with all of them, but I've found a lot of bits an pieces. Now that I've got the proper terminology for previous versions, I can search a lot easier. Mostly it's just stuff on bitsavers mirrors&lt;/p&gt;&#xA;" OwnerDisplayName="user11220" LastEditorDisplayName="user11220" LastEditDate="2020-02-29T07:01:10.303" LastActivityDate="2020-02-29T16:07:35.687" Title="Version list for TOPS-10?" Tags="&lt;operating-system&gt;&lt;mainframe&gt;&lt;pdp-10&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13988" PostTypeId="2" ParentId="13987" CreationDate="2020-02-28T22:08:17.840" Score="3" Body="&lt;p&gt;&lt;a href=&quot;http://www.ultimate.com/phil/pdp10/tops-10&quot; rel=&quot;nofollow noreferrer&quot;&gt;Phil Budne’s list of TOPS-10 versions&lt;/a&gt; is the most comprehensive list I’m aware of, from TOPS-10 5.01 in 1970 (the first release with the “TOPS-10” name) to 7.0 releases with uncertain version numbers in 1990. Before 5.01 it was called the “Monitor” (PDP-6 Monitor on the PDP-6, then PDP-10 Monitor on the PDP-10), and some of those releases are included in Phil’s list too.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-02-29T16:07:35.687" LastActivityDate="2020-02-29T16:07:35.687" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13989" PostTypeId="2" ParentId="13977" CreationDate="2020-02-29T04:17:20.820" Score="21" Body="&lt;h3&gt;Keyboard Switch&lt;/h3&gt;&#xA;&lt;p&gt;On the International version Apple IIc the &lt;kbd&gt;keyboard&lt;/kbd&gt; switch&#xA;swiched between a country-specific layout and and a standard U.S.&#xA;layout. On the USA version it switches between the standard QWERTY and&#xA;a Dvorak layout. (This was not so much a desired feature as a side&#xA;effect of having to build the European version with a keyboard switch;&#xA;putting a Dvorak switch on the USA version thus came &amp;quot;for free,&amp;quot; and&#xA;was in fact &lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-12/1984_12_BYTE_09-13_Communications#page/n473/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;cheaper than doing a second case mold&lt;/a&gt;.) The&#xA;layouts are given in &lt;a href=&quot;https://archive.org/details/Apple_IIc_Technical_Reference_Manual/page/n393/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;Appendix G&lt;/a&gt; (p. 366) of the &lt;em&gt;Apple IIc&#xA;Technical Reference Manual&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Like caps lock, this switch toggles a setting in the&#xA;keyboard controller and is not seen by software running on the&#xA;Apple IIc.&lt;/p&gt;&#xA;&lt;p&gt;On machines with older keyboard ROMs the Dvorak layout is slightly&#xA;different; the older layout and further information are given in Apple&#xA;IIc Technical Note #4, found &lt;a href=&quot;https://apple2online.com/web_documents/apple_iic_technical_notes.pdf&quot; rel=&quot;noreferrer&quot;&gt;in this document&lt;/a&gt;. (Keep in mind the&#xA;keyboard ROM is separate from the system ROM and the system ROM&#xA;version does not necessarily indicate what keyboard ROM version you&#xA;have.)&lt;/p&gt;&#xA;&lt;p&gt;There have been claims that adding the Dvorak layout to the USA&#xA;version was &lt;a href=&quot;https://apple2history.org/history/ah08/&quot; rel=&quot;noreferrer&quot;&gt;to save having two different cases&lt;/a&gt;, but the&#xA;reference given on that page doesn't check out.&lt;/p&gt;&#xA;&lt;h3&gt;80/40 Switch&lt;/h3&gt;&#xA;&lt;p&gt;Unlike the &lt;kbd&gt;keyboard&lt;/kbd&gt; switch, the &lt;kbd&gt;80/40&lt;/kbd&gt; switch is&#xA;read only by software, and it's up to the software to decide when to&#xA;check it and do something (or not) based on its current setting. This&#xA;is explained on &lt;a href=&quot;https://archive.org/details/Apple_IIc_Technical_Reference_Manual/page/n32/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;page 5&lt;/a&gt; of the &lt;em&gt;Apple IIc Technical Reference&#xA;Manual&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Not all programs check this switch. Even programs that do check the&#xA;switch may do so only when the program first starts up. If that is&#xA;the case, changing the switch position while the program is running&#xA;will have no effect on the program's display.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Further, some programs (e.g. the ProDOS system utilities) will use&#xA;80-column mode regardless of the switch settings.&lt;/p&gt;&#xA;&lt;p&gt;I just did a couple of checks and found that everything I booted&#xA;ignored the switch. These tests were done on a IIc with the original&#xA;(&amp;quot;version 255&amp;quot;) ROM.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;At power-up or after a Ctrl-OpenApple-Reset it starts in 40-column&#xA;mode.&lt;/li&gt;&#xA;&lt;li&gt;With no diskette in the drive, pressing Ctrl-Reset drops to an&#xA;Applesoft BASIC prompt, still in 40-column mode.&lt;/li&gt;&#xA;&lt;li&gt;My DOS 3.3 system master diskette always boots in 40-column mode.&lt;/li&gt;&#xA;&lt;li&gt;My ProDOS 8 v2.4.1 boot diskette always starts the ProDOS system&#xA;utilities in 80-column mode, regardless of the switch setting.&lt;/li&gt;&#xA;&lt;li&gt;Choosing &amp;quot;Exit to BASIC&amp;quot; after booting the ProDOS diskette above&#xA;always changes to 40-column mode, regardless of the switch setting.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you wish to check the status of &lt;kbd&gt;80/40&lt;/kbd&gt; from your own&#xA;software, this can be done by checking bit 7 of location $C060; 1&#xA;indicates the switch is down. (&lt;a href=&quot;https://archive.org/details/Apple_IIc_Technical_Reference_Manual/page/n106/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;Table 4-1&lt;/a&gt; in the &lt;em&gt;TRM&lt;/em&gt; has&#xA;full details.)&lt;/p&gt;&#xA;&lt;h3&gt;Physical Information&lt;/h3&gt;&#xA;&lt;p&gt;Despite looking different externally, the &lt;kbd&gt;reset&lt;/kbd&gt;,&#xA;&lt;kbd&gt;80/40&lt;/kbd&gt; and &lt;kbd&gt;keyboard&lt;/kbd&gt; switches are standard&#xA;keyswitches as used on the rest of the keyboard: &lt;kbd&gt;reset&lt;/kbd&gt; is a&#xA;momentary-press switch and &lt;kbd&gt;80/40&lt;/kbd&gt; and &lt;kbd&gt;keyboard&lt;/kbd&gt;&#xA;are locking switches like &lt;kbd&gt;caps lock&lt;/kbd&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The older (pre-Alps) keyswitches seem often to have problems as the&#xA;age, feeling slightly &amp;quot;crunchy.&amp;quot; The locking switches in particular&#xA;seem to have problems; if your &lt;kbd&gt;caps lock&lt;/kbd&gt; doesn't easily&#xA;switch from on to off, having the older keyswitches is probably your&#xA;main issue.&lt;/p&gt;&#xA;&lt;p&gt;That said, the particular design of the &lt;kbd&gt;80/40&lt;/kbd&gt; and&#xA;&lt;kbd&gt;keyboard&lt;/kbd&gt; keys probably exacerbates the problem, since&#xA;unlike the other keyboard keys they have much greater contact with and&#xA;interaction with the case itself.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-03T08:57:05.353" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13990" PostTypeId="1" CreationDate="2020-02-29T10:39:52.387" Score="10" ViewCount="712" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RWJAR.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RWJAR.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;em&gt;Computerworld&lt;/em&gt;, &lt;a href=&quot;https://archive.org/details/computerworld1741unse/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;Vol. 17, No. 41&lt;/a&gt;, 1983, p. 49)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additions:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Robert Knight, formerly of Princeton's computer laboratories, is [...]&#xA;  the creator of S1, which he had running on an IBM Instruments CS9000&#xA;  (the processor is a 68000); that's a machine I'm not familiar with.&#xA;  There was also a Stride 440 (formerly Sage IV. also a 68000 machine),&#xA;  and I'm told they have a CompuPro 68000 back in New Jersey.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(&lt;em&gt;Byte&lt;/em&gt;, &lt;a href=&quot;https://archive.org/details/byte-magazine-1985-04/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;April 1985&lt;/a&gt;, pp. 361-363)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Lack of money is not a problem for the S1 operating system, to judge&#xA;  from press releases from its developers, Multi Solutions in New&#xA;  Jersey. They have signed contracts with a Japanese corporation worth&#xA;  some US$40 million; with that kind of advertising war chest, we will&#xA;  be hearing a lot about S1 soon. [...] The building blocks provided&#xA;  look comprehensive: [...] several programming languages (including its&#xA;  own, called SL) [...] Multi Solutions have announced agreements to&#xA;  develop unspecified applications with American and Swedish software&#xA;  houses.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(&lt;em&gt;New Zealand Bits and Bytes&lt;/em&gt;, &lt;a href=&quot;https://archive.org/details/nzbitsandbytes-4-06/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;April 1986&lt;/a&gt;, p. 53)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plus &lt;a href=&quot;http://mathisliberalarts.blogspot.com/2012/03/?m=0&quot; rel=&quot;noreferrer&quot;&gt;this blog post&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Then I was hired to write compilers which I had been doing for about&#xA;  six years at Burroughs. The company was a small startup in&#xA;  Lawrenceville, NJ. The CTO was a charismatic engineer named Robert&#xA;  Knight. The CEO was a wealthy businessman, Charles Lombardo, who&#xA;  provided most of the company’s funding. Somehow, maybe because&#xA;  Lombardo’s wife worked on Wall Street, our tiny company,&#xA;  MultiSolutions Inc., actually went public. Even though they actually&#xA;  did not have a product or a revenue stream. The product, under&#xA;  development, was an Operating System called S1. The marketing&#xA;  department used the slogan “&lt;strong&gt;Unix is a dinosaur&lt;/strong&gt;, &lt;strong&gt;MS-DOS is a toy&lt;/strong&gt;.” This&#xA;  was in 1984 and it was true that there was an opportunity for a new OS&#xA;  in the marketplace. To kill any suspense, the OS never caught on.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2020-03-01T10:51:19.827" LastActivityDate="2020-08-23T03:00:32.187" Title="What happened to the S1 operating system?" Tags="&lt;history&gt;&lt;operating-system&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13991" PostTypeId="1" CreationDate="2020-02-29T16:51:20.347" Score="2" ViewCount="308" Body="&lt;p&gt;I wrote a batch file which sends some files over a serial port in Windows 3.1, using kermit.exe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is: when the user switches between apps, the kermit batch will freeze till the next time they switch back into it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What can I do to have it running independently?&lt;/p&gt;&#xA;" OwnerUserId="16458" LastEditorUserId="16504" LastEditDate="2020-04-08T08:59:11.217" LastActivityDate="2020-04-08T08:59:11.217" Title="Kermit pauses when switching between apps in windows 3.1" Tags="&lt;ms-dos&gt;&lt;windows-3.x&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13992" PostTypeId="2" ParentId="13990" CreationDate="2020-02-29T17:33:04.480" Score="6" Body="&lt;p&gt;Some bread crumbs I found:&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;DTACK Grounded #34, August 1984, hints that they may have been better in advertisement than delivery:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Then there is John Little of Multi Solutions, Inc. John's polemics against UNIX make our own seem mild, [...] The problem is, John is NOT disinterested. The company which employs him offers for sale an operating system which competes with UNIX and which (naturally) is (ahem!) VASTLY SUPERIOR TO UNIX!&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[...] Still, a lot of his criticisms of UNIX are valid; [...] Judging by a 'review' of that system (&quot;S1&quot;) in David Fiedler's UNIX newsletter Unique, it does not even properly exist!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Then again, under the title &quot;S1 exists&quot;, Jerry Pournelle talks in his Computing at Chaos Manor column, in Byte 4/85, about a demonstration he got at Comdex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't locate any follow up.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Usually Computerworld and Infoworld are great sources to follow companies. Except, they as well just mention it during 1984/85 stopping thereafter. The last I could find is a note about a licence agreement with a Japaneese firm.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;One interesting find is that, according to a business note in the NYT of April 1985, they had a 'subsidiary' called Multi Soft Inc, residing at the same address (a suite in a (very) small office building). Multi Soft (at that address) can be found during the late 1980 to mid 1990 with ads and articles in Computerworld about their line in client server products in IBM mainframe environments.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-02-29T17:33:04.480" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="13993" PostTypeId="2" ParentId="13990" CreationDate="2020-03-01T05:42:08.167" Score="12" Body="&lt;p&gt;From what I can see, it probably never got beyond a very basic system&#xA;running only on the 68000. Jerry Pournelle's last comment on it in&#xA;April 1985 &lt;em&gt;BYTE&lt;/em&gt; (&lt;a href=&quot;https://archive.org/details/byte-magazine-1985-04-rescan/page/n364/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;p.361&lt;/a&gt;) covers his experience with it before the&#xA;November 1984 COMDEX show:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Frankly, [S1] sounded like a scam, and my views weren't changed when&#xA;  I found an MSI booth at a show last year and was told they didn't&#xA;  have a demonstration because their computer was lost on a truck or&#xA;  something. They've since told me they don't really like to ship&#xA;  computers around to shows because the machines often don't do well&#xA;  after transportation; but that wasn't what I heard at the time.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Also, MSI's literature seemed outrageous.... They offer a &lt;em&gt;huge&lt;/em&gt;&#xA;  range of products, languages and compilers that I'm certain do not&#xA;  exist. Then I met one of the company's representatives. he's one of&#xA;  those chaps who gets too close to you and talks 50 miles a second.&#xA;  He promises anything and you don't even get Arpege. After five&#xA;  minutes with him, I was sure it was all a scam. Just to be safe, I&#xA;  sent a message through the net asking if anyone had ever seen S1 in&#xA;  operation. None had, but some had met the sales chap who so&#xA;  negatively impressed me; and everyone who had met him, including&#xA;  senior CompuPro officials, came to the same conclusion. S1 was&#xA;  vaporware and likely to remain so.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;He then goes on to say he finally saw a demo at the November 1984&#xA;COMDEX. It was:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...running on an IBM Instruments CS9000 (the processor is a&#xA;  68000).... There was also a Stride 440 (formerly Sage IV, also a&#xA;  68000 machine), and I'm told they have a CompuPro 68000 back in New&#xA;  Jersey.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's telling here that, a year after the advertisement you showed&#xA;claiming it's &quot;presently running on 68000, Z80, 8080 and 8085&quot; and&#xA;will be running within months on 8086, they demonstrate only on 68000,&#xA;by far the simplest platform of any they list (excepting the 16032,&#xA;it's the only one with a non-segmented address space larger than 64&#xA;KiB). In fact, the other platforms that a year earlier were claimed to&#xA;be running now seem to have vanished:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It's said to be highly portable, and thus soon to able to run on the&#xA;  80286 and 32016 chips as well as the 68000.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The eight languages also supposed to be available between Sept. '83&#xA;and July '84 are also vapourware as of Nov. '84:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The MSI ad sheet gives prices for FORTRAN, C, Pascal, BASIC, etc.,&#xA;  etc., but they didn't have them at COMDEX; MSI claims Pascal&#xA;  FORTRAN, and C by the spring of 1985, but the only language they&#xA;  have so far is MSI's own SL, a kind of stripped-down Pascal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's little information on the &quot;demonstration&quot; at the show:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I got a demonstration. Of course, you can't see much at a show;&#xA;  there are constant interruptions. Thus, I still don't know a lot&#xA;  about S1.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A brief demo of a system with one (very limited) language compiler and&#xA;apparently no other software worthy of note, to someone with extensive&#xA;experience of only primitive single-tasking &quot;operating systems&quot; such&#xA;as CP/M-68K, provides little evidence that there's actually even an&#xA;operating system there. The demo could be essentially a command-line&#xA;shell and a few simple programs, rather than a real multi-tasking,&#xA;multi-user OS, and nobody who didn't know what to look for would be&#xA;the wiser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following issue of &lt;em&gt;BYTE&lt;/em&gt;, May 1985, was a special issue on&#xA;multiprocessing, with with a cover and article on the AT&amp;amp;T UNIX PC.&#xA;There's no mention of S1 anywhere in it that I can find.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I scanned Pournelle's column (and, where present, letters in response&#xA;to the column) in every subsequent issue of &lt;em&gt;BYTE&lt;/em&gt; for the next 18&#xA;months, though October 1986. Though Pournelle seemed to be keeping an&#xA;eye on 68000 systems and operating systems (in Oct. 1986 he saw and&#xA;mentioned the xePIX Gator S/20, a 68000-based Unix system, and OS-9&#xA;for the Atari ST), there was never again a mention of S1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So all the evidence seems to point to a extremely over-enthusiastic&#xA;marketing of vapourware here, with nothing more than limited demo code&#xA;actually produced.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-03-01T05:42:08.167" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13994" PostTypeId="1" AcceptedAnswerId="13997" CreationDate="2020-03-01T14:23:25.013" Score="8" ViewCount="1576" Body="&lt;p&gt;These manuals are now called “Intel® 64 and IA-32 Architectures Software Developer Manuals”, and the current version is 71. What was the original name of this manual and when was it released?&lt;/p&gt;&#xA;" OwnerUserId="15219" LastEditorUserId="15219" LastEditDate="2020-03-01T14:32:00.473" LastActivityDate="2020-03-01T16:15:54.420" Title="First x86 Software Development Manual" Tags="&lt;intel&gt;&lt;x86&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13995" PostTypeId="1" AcceptedAnswerId="14003" CreationDate="2020-03-01T14:33:10.827" Score="35" ViewCount="7928" Body="&lt;p&gt;Famously, in the late 1980's Apple sued Microsoft over the &quot;look and feel&quot; of Windows 2.x. The claim was that Windows breached Apple's copyright by being too similar to the Mac UI. Apple ultimately lost, but as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Computer,_Inc._v._Microsoft_Corp.&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia page on the subject&lt;/a&gt; explains some of the contested elements were:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The existence of windows on the screen&lt;/li&gt;&#xA;&lt;li&gt;Rectangular windows which could be resized, overlap and have title bars&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Amiga's Workbench and &lt;code&gt;intuition.library&lt;/code&gt; provided all of these features, along with many other elements and concepts shared with the Mac UI. These were demonstrated in 1984 and released publicly in 1985, yet Windows 2.0 didn't appear until late 1987.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why didn't Apple sue Commodore/Amiga for the same breach of &quot;look and feel&quot;? Was it because Commodore was simply beneath Apple's radar at the time, or was the Apple vs Microsoft more about politics than technology?&lt;/p&gt;&#xA;" OwnerUserId="17" LastActivityDate="2020-08-14T13:53:16.297" Title="Why didn't Apple sue Commodore over the Amiga's GUI?" Tags="&lt;amiga&gt;&lt;apple&gt;" AnswerCount="4" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="13996" PostTypeId="2" ParentId="13994" CreationDate="2020-03-01T15:04:00.280" Score="13" Body="&lt;p&gt;It started out as a single manual covering hard and software, the&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/components/intel/8086/9800722-03_The_8086_Family_Users_Manual_Oct79.pdf&quot; rel=&quot;noreferrer&quot;&gt;The 8086 Family User's Manual&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before that there were only data sheets and manuals about single components, software &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/components/intel/8086/9800749-1_MCS-86_Assembly_Language_Reference_Guide_Oct78.pdf&quot; rel=&quot;noreferrer&quot;&gt;tools&lt;/a&gt; and development boards as well as premade components (iSBC computer boards) (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1sLDhm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1sLDhm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that it became the &lt;strong&gt;&lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/components/intel/_dataBooks/1981_iAPX_86_88_Users_Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;iAPX 86,88 User's Manual&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 80286 manuals (*2) were the first to add specific software writing (*3) manuals with the 1983 manuals:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/components/intel/80286/210498-001_iAPX_286_Programmers_Reference_1983.pdf&quot; rel=&quot;noreferrer&quot;&gt;iAPX 286 Programmer's Reference Manual&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/components/intel/_dataBooks/1983_iAPX_286_Operating_System_Writers_Guide.pdf&quot; rel=&quot;noreferrer&quot;&gt;iAPX 286 Operating Systems Writer's guide&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - At that point it's important to keep in mind, that despite the 8086 being introduced in August 1978, documentation beside data sheets didn't show up until the 1979 data books.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Well, that and the 186 manuals of the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - There have been others before on the topic of software related items, like the 80130/150 Operating System Processors, but they are strictly about application of their embedded software blocks.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-01T15:52:47.283" LastActivityDate="2020-03-01T15:52:47.283" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="13997" PostTypeId="2" ParentId="13994" CreationDate="2020-03-01T16:15:54.420" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/6659/raffzahn&quot;&gt;Raffzahn&lt;/a&gt;’s &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13996/79&quot;&gt;answer&lt;/a&gt; lists the early manuals in the history of x86 documentation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer more specifically concerning version 71 of the &lt;em&gt;Intel ® 64 and IA-32 Architectures Software Developer’s Manual&lt;/em&gt;, see order number 252046, &lt;a href=&quot;https://software.intel.com/en-us/download/intel-64-and-ia-32-architectures-software-developers-manual-documentation-changes&quot; rel=&quot;nofollow noreferrer&quot;&gt;Documentation Changes&lt;/a&gt;: version 1 of the manual was released in 2002, to document the first 64-bit x86 Intel CPUs. It replaced the &lt;em&gt;IA-32 Intel Architecture Software Developer’s Manual&lt;/em&gt; which was first published in 1997.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-03-01T16:15:54.420" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="13998" PostTypeId="2" ParentId="13995" CreationDate="2020-03-01T16:28:54.927" Score="36" Body="&lt;p&gt;While some lawyers do occasionally file lawsuits based mainly on their targets having &quot;deep pockets&quot;, like Microsoft had, this is not generally successful. In order for a typical corporate lawsuit to gain any traction in the court, the plaintiff must provide sufficient &lt;a href=&quot;https://en.wikipedia.org/wiki/Standing_%28law%29&quot; rel=&quot;noreferrer&quot;&gt;&quot;standing&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to establish standing, Apple sought to convince the court that Microsoft's actions violated an earlier licensing agreement for Macintosh technology that was inked between Apple and Microsoft in 1985. Furthermore, HP was included in the lawsuit because it was alleged Microsoft had sub-licensed Windows technology to HP for &lt;a href=&quot;https://en.wikipedia.org/wiki/NewWave&quot; rel=&quot;noreferrer&quot;&gt;NewWave&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The litigation arose out of a dispute whether an earlier version of Microsoft's software, Windows 1.0, infringed Apple copyrights. Microsoft and Apple sought to put that dispute to rest by an agreement on November 22, 1985 (&quot;1985 Agreement&quot;). By that agreement, Apple granted to Microsoft a non-exclusive license of the audiovisual displays in Windows 1.0. As the court found on March 20, 1989, however, the 1985 Agreement is not a complete defense to this action, because it was limited to the visual displays in Windows 1.0 and did not cover displays in Windows 2.03 that were not in the prior work. Apple Computer, Inc. v. Microsoft Corp., 709 F. Supp. 925, 930 (N.D.Cal.1989).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Given that no such prior licensing agreements existed between Apple and Commodore-Amiga, it is apparent that the same complaint could not be brought against them by Apple. If Apple wanted to file subsequent lawsuits against Commodore, and others who used similar GUI elements to the Macintosh, they really needed a victory against Microsoft and HP first, which would set a precedent about copyright protections applying to the Mac GUI. After all, copyright was the underlying basis for these Apple claims, not stronger protections, such as registered U.S. patents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since Apple ultimately lost the copyright argument, there was never any point to reviving this case by going after other alleged &quot;infringers&quot;, such as Commodore. The court had already ruled no infringement had taken place by Microsoft, so Commodore was inoculated against such a claim.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-03-01T16:38:56.980" LastActivityDate="2020-03-01T16:38:56.980" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="13999" PostTypeId="1" AcceptedAnswerId="14000" CreationDate="2020-03-01T16:58:22.850" Score="19" ViewCount="2588" Body="&lt;p&gt;If a formatted floppy diskette is reformatted with a low-level¹&#xA;format, how does the formatting routine make sure that any previous&#xA;sector markers are fully overwritten? In particular, how does it make&#xA;sure that the first sector marker from any previous format is&#xA;overwritten?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(If a previous sector marker was not properly overwritten that could&#xA;obviously confuse any routines later reading the floppy diskette.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹&lt;sub&gt;&quot;Low-level&quot; appears to be modern (late-80s/early-90s)&#xA;terminology used to distinguish rewriting the sector markers on&#xA;soft-sectored diskettes from merely rewriting the filesystem&#xA;information.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7506" LastEditDate="2020-03-02T13:08:28.720" LastActivityDate="2020-03-02T13:08:28.720" Title="When low-level formatting a floppy, how does one ensure any existing sector markers are overwritten?" Tags="&lt;floppy-disk&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14000" PostTypeId="2" ParentId="13999" CreationDate="2020-03-01T16:58:22.850" Score="26" Body="&lt;p&gt;Low-level formats of floppies do not do individual sector writes, as&#xA;normally done when writing new data to a sector of an&#xA;already-formatted floppy, but instead rewrite each entire track in one&#xA;operation. This is done in such a way that the entire track, including&#xA;unused areas, is overwritten, ensuring that there will be no data left&#xA;from previous formats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data sheet for the &lt;a href=&quot;https://www.tim-mann.org/max80/Appendix_D_Updated.pdf&quot; rel=&quot;noreferrer&quot;&gt;Fujitsu MB8877A Floppy Disk&#xA;Formatter/Controller (FDC)&lt;/a&gt; explains this fairly clearly.&#xA;Page 8 contains the details of track formatting, including the gaps&#xA;between sectors:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ngemM.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ngemM.png&quot; alt=&quot;Track format diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further down on the page are the exact details of byte values and&#xA;counts; for our purposes all that's really important is that all of&#xA;the gaps in an MFM (&quot;double-density&quot;) format are a continuous stream&#xA;of $4E values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Page 10 gives the details of what data to feed to the FDC during a &quot;write&#xA;track&quot; command in order to format a track:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XaofB.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XaofB.png&quot; alt=&quot;Double-density MFM format with write-track command&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What happens during this sequence is that you seek the head to the&#xA;track you want to format, send a &quot;write track&quot; command, and write $4E&#xA;to the data register (DR), indicating that you want the controller to&#xA;write a post-index gap byte when it starts writing. This will clear&#xA;the data request bit (DRQ) in the status register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller will wait until it's detected the index mark (via the&#xA;small hole near the centre of the diskette passing an optical sensor)&#xA;and then start writing that byte. In the meantime you must be checking&#xA;the DRQ bit; when it becomes set you must write another $4E to the DR,&#xA;doing this 80 more times. This creates the post-index gap. You then&#xA;carry on writing the other bytes described in the table above until&#xA;you've written address markers, data fields and gaps for all of the&#xA;sectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point there's still a gap of variable size to be written. (The&#xA;size varies due to small variations in the speed of the motor.)&#xA;To fill this out completely you continue to&#xA;write $4E filler bytes as above until the controller sets its INTRQ&#xA;line, which indicates that it's again seen the index hole and you are&#xA;now writing again over the post-index gap you wrote at the start of&#xA;the track format operation. This ensures that all data previously on&#xA;the track have been overwritten. A little bit of &quot;overflow&quot; here does&#xA;no harm because it's merely writing into the unused space of the&#xA;post-index gap.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-03-02T03:51:17.173" LastActivityDate="2020-03-02T03:51:17.173" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14001" PostTypeId="2" ParentId="13747" CreationDate="2020-03-01T19:59:17.297" Score="2" Body="&lt;p&gt;Any computer with...&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;a dedicated &lt;a href=&quot;https://en.wikipedia.org/wiki/Programmable_sound_generator&quot; rel=&quot;nofollow noreferrer&quot;&gt;sound generator chip&lt;/a&gt;&lt;/strong&gt; (one that can oscillate on its own, without needing constant hand-holding from the CPU to drive the waveform) and &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.c64-wiki.com/wiki/Raster_interrupt&quot; rel=&quot;nofollow noreferrer&quot;&gt;video raster&lt;/a&gt; or &lt;a href=&quot;https://www.visualmicro.com/page/Timer-Interrupts-Explained.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;timer interrupts&lt;/a&gt;&lt;/strong&gt; (which allow you to write an &lt;a href=&quot;https://www.c64-wiki.com/wiki/Interrupt&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;interrupt service routine&lt;/em&gt;&lt;/a&gt; that will, at specific intervals, periodically update the pitch and volume registers of the sound generator chip, typically guided by sequenced note data not much different from a &lt;a href=&quot;https://www.youtube.com/watch?v=t1yTrTnOYog&quot; rel=&quot;nofollow noreferrer&quot;&gt;player piano roll&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;...can technically do this. This includes most 8-bit home computers of the 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=o7zRCwdBjts&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.ytimg.com/vi/o7zRCwdBjts/hqdefault.jpg&quot; alt=&quot;“Megasound Music Editor” (a Commodore 64 music sequencer by Jori Olkkonen) displaying the raster time usage of the playback routine in the borders&quot; title=&quot;“Megasound Music Editor” (a Commodore 64 music sequencer by Jori Olkkonen) displaying the raster time usage of the playback routine in the borders&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;&lt;em&gt;Megasound Music Editor&lt;/em&gt; (a Commodore 64 music sequencer by Jori Olkkonen) displaying the raster time usage of the playback routine in the borders.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When your playback routine is driven by hardware interrupts, your main program does not need to know or care about the sound playback. This is a rudimentary form of multitasking. For instance, the Commodore 64 (which you mention) and most of its contemporary competition could easily do interrupt-driven music playback, hardware-wise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, on the early 8-bit home computers, there were no &lt;em&gt;standards&lt;/em&gt; for such thing. You could only do this if your main program did not set up the same interrupts to do something else, and did not use the memory locations occupied by your music playback routine and sequenced note data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, there was no common, ”standard” format for storing or sharing the music files. Each computer/game musician generally created their own formats and wrote their own playback routines, and also sequenced their own compositions in a self-written, custom-made music editor/sequencer tool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/MIDI&quot; rel=&quot;nofollow noreferrer&quot;&gt;The MIDI standard&lt;/a&gt; was established in 1983 but would have been an overkill for such purpose; it is a bit too verbose and too generic for the limited resources of the home computers of the era — at least when considering the typical uses of music playback on those systems, such as games using the internal sound generator chip. A custom, sequenced music data format — designed to closely match the capabilities of a particular sound chip — would generally serve the needs better, and allow taking in account the practical limitations related to storage space and to the CPU time that can be allotted to the playback routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;• • •&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still, the specific case you mention — playing back music while programming in BASIC on the Commodore 64 — was and is fairly achievable. ”Normal”, simple hobbyist BASIC program does not usually use interrupts for anything (that is, for anything else than what the Kernal does for the program while handling the keyboard and other I/O, and blinking the cursor), and there are memory areas in the C64 memory map which are normally not used or accessible (accidentally overwritten) by BASIC programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Playing back music on the C64, in the background, would involve loading a machine-language music playback routine — along with sequenced note data — into an unused, “safe” memory area (say, the one starting from the address &lt;code&gt;$C000&lt;/code&gt;) and calling its interrupt setup routine, typically by issuing a &lt;code&gt;SYS&lt;/code&gt; command from a BASIC program, or from the BASIC interpreter’s immediate mode. Once done, you could have music playing in the background, driven by interrupts, while still being able to program in BASIC and run BASIC programs the normal way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can actually see something like this in action if you try out the C64 game &lt;em&gt;Smurfen&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=G-MGDePoDpc&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.ytimg.com/vi/9jLLhYlv8vE/maxresdefault.jpg&quot; alt=&quot;The Commodore 64 game “Smurfen”&quot; title=&quot;The Commodore 64 game “Smurfen”&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;The Commodore 64 game &lt;em&gt;Smurfen&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game logic is written mostly in BASIC but there’s an interrupt-driven, machine-language music playback routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you press the &lt;code&gt;RUN/STOP&lt;/code&gt; key while the game is running, the computer will break out of the BASIC program — but the music (a SID rendition of Michael Jackson’s &lt;em&gt;Billie Jean&lt;/em&gt;, of all things!) will continue playing in the background. You can work in the immediate mode of the BASIC interpreter, or even start writing a new BASIC program on your own, all while listening to &lt;em&gt;Billie Jean&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;• • •&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As other answers note, a &lt;em&gt;general&lt;/em&gt; way to do the same only materialized when home computers started getting multitasking operating systems, such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/AmigaOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;AmigaOS&lt;/a&gt;, or &lt;a href=&quot;https://en.wikipedia.org/wiki/OS/2&quot; rel=&quot;nofollow noreferrer&quot;&gt;OS/2&lt;/a&gt;, designed from the ground up to run several processes at the same time, without them stomping on each other’s feet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being able to easily share music also required establishing “standard” computer music formats, such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOD_(file_format)&quot; rel=&quot;nofollow noreferrer&quot;&gt;4-channel MOD format&lt;/a&gt;, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/MIDI#Standard_files&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIDI format&lt;/a&gt;, and the respective music player applications for them, instead of having to share a runnable program (custom playback routine) with embedded music data stored in a custom format. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=1YVf8bcjyHA&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.ytimg.com/vi/1YVf8bcjyHA/hqdefault.jpg&quot; alt=&quot;Amiga 500+ playing back a ProTracker module file (mostly sample-based rendition of Haddaway’s “What Is Love”) on Workbench 2.1&quot; title=&quot;Amiga 500+ playing back a ProTracker module file (mostly sample-based rendition of Haddaway’s “What Is Love”&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Amiga 500+ playing back a ProTracker module file (mostly sample-based rendition of Haddaway’s &lt;em&gt;What Is Love&lt;/em&gt;) on Workbench 2.1.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These developments happened primarily on the 16/32-bit systems, finally allowing people to share bare music files (sequenced note data) e.g. in the file areas of the dial-up BBS systems of the era, independent of playback code, and enabling listening to music in the background while working on something else, paving way for later digital music formats with similar usage patterns, such as MP3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;• • •&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To summarize, I would say being able to play back sequenced multi-channel computer music &lt;em&gt;in the background&lt;/em&gt; while working in productivity applications — without any special considerations, or needing to jump through hoops; just by firing up the music player and forgetting about it — was a concept likely introduced “to the masses” with &lt;strong&gt;AmigaOS&lt;/strong&gt; and &lt;strong&gt;OS/2&lt;/strong&gt;, both of which multitask natively in a preemptive fashion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not to say the earlier systems would not have been able to do similar things in some special cases. But the non-multitasking systems — or systems that would multitask ”co-operatively” — were much more limited with regard to this usage scenario. Systems like AmigaOS and OS/2 made the feature work like we expect music playback to work on a computer today, and gave the first “taste” of such concept to many people.&lt;/p&gt;&#xA;" OwnerUserId="4893" LastEditorUserId="4893" LastEditDate="2020-03-01T21:32:25.920" LastActivityDate="2020-03-01T21:32:25.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14002" PostTypeId="2" ParentId="13976" CreationDate="2020-03-01T22:52:54.750" Score="4" Body="&lt;p&gt;This answer may not contain a good enough image( although the last link may also be useful since it seems to use identical font ), here is part of an image on the following catalog -&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3Xhs8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3Xhs8.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That catalog can be downloaded at -&lt;br&gt;&#xA;&lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102646159&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.computerhistory.org/collections/catalog/102646159&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.computerhistory.org/resources/text/Computer_Terminal_Corporation/ComputerTerminalCorporation.Datapoint3300.1969.102646159.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.computerhistory.org/resources/text/Computer_Terminal_Corporation/ComputerTerminalCorporation.Datapoint3300.1969.102646159.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following videos uploaded by one person may help -&lt;br&gt;&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=juuM6jvu2a0&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=juuM6jvu2a0&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=i5r9jkoIPVQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=i5r9jkoIPVQ&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=aqg8L6G077w&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=aqg8L6G077w&lt;/a&gt;   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, paste the name of the catalog detailed above, into google-search -&#xA;&quot;computerterminalcorporation.datapoint3300.1969.102646159&quot;&lt;br&gt;&#xA; and some sites for interesting reading result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a restored one, but they did not upload a photo of the screen on.&#xA;&lt;a href=&quot;https://www.vintagecomputer.net/browse_thread.cfm?id=455&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.vintagecomputer.net/browse_thread.cfm?id=455&lt;/a&gt;   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.vintagecomputer.net/ctc/3300/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.vintagecomputer.net/ctc/3300/&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;____________________________________&lt;/strong&gt;&lt;br&gt;&#xA;The following is part of a screen image for the Datapoint 1100 which seems to have identical font-&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/fpCLK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fpCLK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;The link for the image is -&lt;br&gt;&#xA;&lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/datapoint/1100/Dataform_1100_Brochure_1974.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.trailing-edge.com/pdf/datapoint/1100/Dataform_1100_Brochure_1974.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16462" LastEditorUserId="16462" LastEditDate="2020-03-02T02:08:31.553" LastActivityDate="2020-03-02T02:08:31.553" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14003" PostTypeId="2" ParentId="13995" CreationDate="2020-03-01T23:08:01.193" Score="13" Body="&lt;p&gt;It may have been a combination of hubris and legal prudence on Commodore's part; per &lt;a href=&quot;https://www.goodreads.com/book/show/13595478-commodore&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore: The Amiga Years&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Amiga designers wanted something more original than [Berkeley Softworks'] proposal. &quot;This may have been unfair, but part of it was we thought GEOS looked too much like a Mac; a color Mac before there was a color Mac,&quot; says [Dale] Luck. &quot;It was felt that we could do something a lot better.&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;... The Amiga employees were careful not to put themselves at risk of a lawsuit over the GUI. &quot;We started out passing around design docs. The actual implementation was done completely behind the walls so that there was no knowledge of what anyone else had done,&quot; says [RJ] Mical.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Because of this policy, Amiga did not not receive any infringement lawsuits based on their GUI. &quot;Not a one; not from anyone, ever,&quot; says Mical. &quot;I attribute that mostly to the fact that once I decided that I needed to do a user interface, I slammed the door and drew the blinds and invented it completely and entirely on my own. I didn't look at any other computer system through the whole period. We wanted it to be as clean-room as possible.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;i.e.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;there was a conscious decision not to look too much like a Mac, and instead to aim higher; and&lt;/li&gt;&#xA;&lt;li&gt;once that decision was made, development occurred with as little in the way of external influences as they could manage.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As to the theory suggested elsewhere in a comment, I do not think it was that Commodore was not on Apple's radar — the Apple II was Apple's cash cow for longer than the C64 was Commodore's and they will have been aware of the competition. There's also some staff crossover; e.g. Ron Nicholson, a hardware designer, has his signature inside the cases of both the Macintosh 128k and the Amiga 1000†.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore also once tried to hire Jean-Louis Gassée, who famously helped to oust Steve Jobs while at Apple and then later failed to sell his BeOS back to them; per Amazing Computing, November 1996 via &lt;a href=&quot;https://www.goodreads.com/book/show/39305513-commodore&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore: The Final Years&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Gassée both admired and feared Commodore Amiga during his tenure at Apple. &quot;We were really scared of the Amiga,&quot; he says. &quot;Fortunately, Irving Gould helped Apple by running Commodore into the ground.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;† He's also a member here so perhaps he can provide more colour. &lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-03-03T20:33:49.583" LastActivityDate="2020-03-03T20:33:49.583" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="14005" PostTypeId="1" CreationDate="2020-03-02T05:22:01.000" Score="8" ViewCount="440" Body="&lt;p&gt;The first production runs of the MOS 6502, in mid-1975, had a bug in&#xA;the ROR instruction that caused MOS to &amp;quot;remove&amp;quot; it from the&#xA;instruction set by omitting it in the intial documentation. An updated&#xA;version with a working ROR was released &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502#Introducing_the_6501_and_6502&quot; rel=&quot;noreferrer&quot;&gt;no later than May&#xA;1976&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;While the Apple 1 was first demonstrated in late 1975, Apple Computer&#xA;Company wasn't formed until March 1976, according to &lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-12/1984_12_BYTE_09-13_Communications#page/n464/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;this interview&#xA;with Woz&lt;/a&gt;. (Actually, April 1st, &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Apple_Inc.#Apple_I_and_company_formation&quot; rel=&quot;noreferrer&quot;&gt;according to&#xA;Wikipedia&lt;/a&gt;) &lt;a href=&quot;https://www.nationalgeographic.org/thisday/apr11/apple-releases-its-first-computer/&quot; rel=&quot;noreferrer&quot;&gt;National Geographic claims&lt;/a&gt; the release date of&#xA;the Apple 1 to be April 11th, 1976, but I don't know where they got&#xA;this date from. Wikipedia &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_I#History&quot; rel=&quot;noreferrer&quot;&gt;has another source&lt;/a&gt; saying it&#xA;went on sale in July 1976, which, since the parts were ordered no more&#xA;than a month before delivery of the assembled computers (according to&#xA;both the first two references above), seems easily to leave enough&#xA;time for their initial set of assembled computers to have used the&#xA;fixed 6502.&lt;/p&gt;&#xA;&lt;p&gt;So did any Apple 1s ship with a 6502 without ROR? Possibly some were&#xA;assembled by others (who bought just the PCB) with a no-ROR CPU; do we&#xA;have or know of any examples of this?&lt;/p&gt;&#xA;&lt;p&gt;As far as software goes, unsurprisingly neither the original &lt;a href=&quot;https://gist.github.com/nobuh/1161983&quot; rel=&quot;noreferrer&quot;&gt;Woz&#xA;monitor&lt;/a&gt; nor &lt;a href=&quot;http://www.brouhaha.com/%7Eeric/retrocomputing/apple/apple1/basic/&quot; rel=&quot;noreferrer&quot;&gt;Apple 1 BASIC&lt;/a&gt; have any ROR instructions&#xA;in them; these were developed well before the Apple 1 was ever sold as&#xA;a product. But was there any other Apple 1 software sold or widely&#xA;shared that deliberately worked around the ROR bug?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-10T16:17:42.293" Title="Were any Apple 1s sold with non-ROR 6502s?" Tags="&lt;mos-650x&gt;&lt;apple-1&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14007" PostTypeId="2" ParentId="1" CreationDate="2020-03-02T08:50:10.180" Score="3" Body="&lt;p&gt;A significant chunk of PDP-6 software has surfaced: JOSS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.rand.org/pubs/research_memoranda/RM5437.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.rand.org/pubs/research_memoranda/RM5437.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's being typed in: &lt;a href=&quot;https://github.com/PDP-10/joss-36&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/PDP-10/joss-36&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2020-03-02T08:50:10.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14008" PostTypeId="2" ParentId="14005" CreationDate="2020-03-02T09:10:08.733" Score="3" Body="&lt;p&gt;For the second part:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But was there any other software sold or widely shared that deliberately worked around the ROR bug?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The most prominent may be &lt;a href=&quot;https://en.wikipedia.org/wiki/Microchess&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microchess&lt;/a&gt;, originally developed for the KIM but ported to next to any 6502 system and many non-6502, like TRS-80 and CP/M. It might be on of only a few (the only one I know) &lt;a href=&quot;https://www.applefritter.com/node/6971&quot; rel=&quot;nofollow noreferrer&quot;&gt;commercially sold applications for the Apple 1&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it wasn't released until late 1976, &lt;a href=&quot;https://en.wikipedia.org/wiki/Peter_R._Jennings&quot; rel=&quot;nofollow noreferrer&quot;&gt;Peter Jennings&lt;/a&gt; had to develop it around that bug, as there was quite a number of KIMs delivered with pre-correction 6502. Still today he tends to bring up the topic when talking about Microchess (or 6502 in general as a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14005/were-any-apple-1s-sold-with-non-ror-6502s/14008?noredirect=1#comment44824_14008&quot;&gt;comment by scruss&lt;/a&gt; may imply).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-03T00:26:27.093" LastActivityDate="2020-03-03T00:26:27.093" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14009" PostTypeId="2" ParentId="13927" CreationDate="2020-03-02T13:11:15.877" Score="11" Body="&lt;p&gt;Assuming you use the SDCC backend: SDCCs printf does not include float support by default. You need to recompile the &lt;code&gt;z80.lib&lt;/code&gt; library with &lt;code&gt;USE_FLOATS=1&lt;/code&gt; set in &lt;code&gt;printf_large.c&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="4805" LastActivityDate="2020-03-02T13:11:15.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14010" PostTypeId="2" ParentId="14005" CreationDate="2020-03-03T03:29:38.057" Score="4" Body="&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=wTgyll6IqJY&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt; from an auction service, the 6502 fitted is clearly shown (eg. at 2:05) as a white-ceramic packaged example with a 1576 datecode, corresponding to early April.  This is before the ROR bug is &lt;em&gt;certain&lt;/em&gt; to have been fixed, so Apple may have received a batch from near the end of the pre-fix production run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is consistent with reliable estimates of when the Apple 1 production run occurred, so may well be the original CPU supplied with the machine.  Other ICs are clearly visible with consistent datecodes, eg. 7618, 7602, and from '75.  Four 74161s are visible in one shot with identical 7611 datecodes, while the newest codes I could see are on a pair of the Signetics shift registers, 7620.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Week 20 corresponds to mid-May, which is about right for a suggested on-sale date for the completed Apple 1 of sometime in June, given that it took Woz and Jobs almost a month to order and then assemble all the required components, after obtaining funding and credit.  They succeeded in obtaining payment in time to pay their component suppliers on 30-day terms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the CPU is roughly a calendar month older than the Signetics chips.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-03-03T05:19:49.093" LastActivityDate="2020-03-03T05:19:49.093" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14011" PostTypeId="2" ParentId="6301" CreationDate="2020-03-03T05:36:10.050" Score="2" Body="&lt;p&gt;Another piece of tantalizing evidence has surfaced.  It's an old ITS file called &lt;code&gt;RG; FD 4/1/68&lt;/code&gt;.  The name obviously suggests a dating, and it's before a pager was installed.  The file contents are listings from DECtapes.  The files listed include LISP, DDT, TECO, MIDAS, and ITS versions in the three hundreds.&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2020-03-03T05:44:49.003" LastActivityDate="2020-03-03T05:44:49.003" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14012" PostTypeId="1" CreationDate="2020-03-03T13:10:46.293" Score="23" ViewCount="4952" Body="&lt;p&gt;I've roughly known the concept for years, but never really understood it. Back in the day, two types of RAM typically used in home computers: static and dynamic RAM. Static RAM (SRAM) was apparently easier to use because it didn't require refreshing (and circuitry to go along with that), and Dynamic RAM (DRAM) was cheaper but required the RAM to be &quot;refreshed&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So as I understand the story, Woz designed the Apple II to use DRAM because it was cheaper but was able to avoid designing refresh circuitry because he used the odd-phase of the 6502 to do it for him by reading the next chunk of video memory which would effectively do the refresh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this leaves two questions in my mind:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;What exactly is DRAM refresh? Is it simply making sure a memory cell is accessed which gives it an electrical charge to keep it alive, or is it more like a 'read and re-write'?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If this refresh mechanism is the reason for the non-linear memory layout of the Apple II video, then why? Is it because the gap of 64 lines was the amount of time that the even-phase would get for compute while the video circuitry was still displaying progressively?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For what its worth, how many chips did Woz actually save by doing this anyway?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2020-03-26T01:33:19.107" Title="What is DRAM refresh and why is the weird Apple II video memory layout affected by it?" Tags="&lt;apple-ii&gt;&lt;dram&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14013" PostTypeId="2" ParentId="14012" CreationDate="2020-03-03T13:36:54.627" Score="3" Body="&lt;p&gt;Static RAM stores the information by using a flip-flop for each bit. This require several (from 4 to 8 depending on the circuit) transistors but has the big advantage of being static i.e. the information stays stored as long as the circuit has current. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dynamic RAM uses a capacitor as a storage device, this has the big advantage of being much smaller than a flip-flop. You can store easily more than 4 bits in the area you would need to store 1 bit in a static RAM. That's why dynamic RAM is more or less ~4 times cheaper than static RAM (or conversely ~4 times the capacity for the same size).&#xA;The big drawback of the capacitor in the dynamic RAM is that it is &quot;dynamic&quot;, i.e. it loses its value after some time.&#xA;This require that the circuit board, in a fixed interval, read all the RAM and rewrite it out so that the stored value are refreshed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To avoid issue, the refresh is generally hard wired so that nothing can interfere with it and thus guarantee the content of the memory. &#xA;The problem that can happen is that if dynamic RAM is used as backing store of the video circuitry, the memory refresh and the video read can interfere and give visible artefacts on the display. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Removed wrong examples about Apple II and CGA.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="7095" LastEditDate="2020-03-03T15:48:54.250" LastActivityDate="2020-03-03T15:48:54.250" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14014" PostTypeId="2" ParentId="14012" CreationDate="2020-03-03T14:19:03.213" Score="24" Body="&lt;p&gt;DRAM requires that each &lt;em&gt;row&lt;/em&gt; of the memory is read and re-written regularly, every few tens of milliseconds at least.  This is made much easier by the DRAM chip having a &lt;em&gt;row buffer&lt;/em&gt; which is filled with the contents of the row every time the /RAS strobe is triggered, and written back when it is released.  So it is only necessary for the computer to arrange for &lt;em&gt;some&lt;/em&gt; address in each row to be accessed (either read &lt;em&gt;or&lt;/em&gt; write), which involves both a /RAS and /CAS strobe to provide a row and column address, or for a special /RAS-only &lt;em&gt;refresh cycle&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some CPUs like the Z80 include specialised DRAM handling circuitry which produces refresh cycles automatically, and multiplexes the row and column addresses in a way that's convenient for accessing DRAM.  This however means that some CPU cycles are &quot;lost&quot; to the refresh process, and that the CPU has to be informed when DMA accesses occur so that it can get out of the way by pausing.  It also makes interfacing the CPU to SRAM more difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502, used by the Apple II, has a much more straightforward bus interface, in which addresses are provided throughout the cycle but data transfer occurs only during the second half.  Many 6502 computers take advantage of this to interleave video scanout accesses with CPU accesses, so that no CPU time is lost to them.  It was also reasonably common practice to rely on the video scanout to perform the DRAM refresh function, both so that no dedicated refresh hardware had to be added, and so that no cycles were consumed by it.  Typically the 6845 CRTC (or a clone thereof) was used to generate the scanout addresses and video timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To achieve this, the video memory has to be laid out so that every frame refresh touches all of the DRAM rows.  Assuming the screen refresh rate is at least as fast as the required refresh interval of the DRAM, this is sufficient.  Some computers, including the BBC Micro, took special measures in their address translation (from linear on the bus to row/column multiplexed format to the DRAM) to ensure that every possible screen configuration would meet this requirement.  In the case of the BBC Micro, the Teletext mode which used only 1000 bytes of RAM was the critical design factor, but the circuitry was designed to present a logically linear address space to the CPU regardless of any contortions behind the scenes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears that in the Apple II, more of these contortions are left visible to the CPU in terms of the layout of video memory.  This probably saved a little bit of hardware in the DRAM address multiplexer.  You could get some idea of the magnitude of the saving by comparing the schematics of the original BBC Micro and original Apple II in this area.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-03-03T14:59:04.243" LastActivityDate="2020-03-03T14:59:04.243" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14015" PostTypeId="1" AcceptedAnswerId="14034" CreationDate="2020-03-03T14:21:13.140" Score="13" ViewCount="513" Body="&lt;p&gt;As I understand it the analytical engine could only refer to memory by variable cards that had the explicit address printed on them, see &lt;a href=&quot;https://www.fourmilab.ch/babbage/cards.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.fourmilab.ch/babbage/cards.html&lt;/a&gt;. For instance the only way to load the value at memory location 5 into the &quot;ALU&quot; was by the machine reading a card that said &quot;L005&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when reading about the algorithm for computing Bernoulli numbers with the analytical engine, Note G at &lt;a href=&quot;https://www.fourmilab.ch/babbage/sketch.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.fourmilab.ch/babbage/sketch.html&lt;/a&gt; it is sort of implied that there is some way to refer to succesively higher memory locations within a loop. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The only exception to a perfect identity in all the processes and&#xA;  columns used, for every repetition of Operations (13…23), is, that&#xA;  Operation 21 always requires one of its factors from a new column, and&#xA;  Operation 24 always puts its result on a new column. But as these&#xA;  variations follow the same law at each repetition (Operation 21 always&#xA;  requiring its factor from a column one in advance of that which it&#xA;  used the previous time, and Operation 24 always putting its result on&#xA;  the column one in advance of that which received the previous result),&#xA;  they are easily provided for in arranging the recurring group (or&#xA;  cycle) of Variable-cards.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So something along the lines of,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for (int i = 0; i &amp;lt; n; i++) { &#xA;  ...&#xA;  B[i] = ...&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But how would this be possible without some form of indirect addressing? &lt;/p&gt;&#xA;" OwnerUserId="11219" LastEditorUserId="10854" LastEditDate="2020-03-09T20:25:52.913" LastActivityDate="2020-03-09T20:25:52.913" Title="Did Babbage's Analytical Engine lack indirect addressing?" Tags="&lt;history&gt;&lt;programming&gt;&lt;analytical-engine&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14016" PostTypeId="2" ParentId="14012" CreationDate="2020-03-03T15:01:50.860" Score="20" Body="&lt;h3&gt;Summary&lt;/h3&gt;&#xA;&lt;p&gt;Each DRAM chip has multiple &amp;quot;rows&amp;quot; of memory, and each row needs to be&#xA;accessed in a certain way (not necessarily via a read or write) on a&#xA;regular basis in order to avoid the memory &amp;quot;fading away.&amp;quot; (Basically,&#xA;this access recharges the capacitors from which the DRAM row is made.)&lt;/p&gt;&#xA;&lt;p&gt;The Apple II uses two tricks to do this refresh.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Any read or write of a single row will refresh that row; on such a&#xA;read/write the Apple II generates some additional signals that&#xA;refresh the rows in all the other RAM chips that are not being&#xA;read/written.&lt;/li&gt;&#xA;&lt;li&gt;While the CPU is not using the bus, the video system reads through&#xA;an area of RAM to get the data for the screen. This generates reads&#xA;from a sufficient number of locations with sufficient frequency&#xA;that, in combination with #1 above, all RAM is guaranteed to be&#xA;accessed often enough that it will stay refreshed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The refresh mechanism is entirely unrelated to the non-linear layout&#xA;of the video system data; it would work just as well if the layout&#xA;were linear. The non-linear scanning of video memory does save some&#xA;circuitry in the address generation of the video system itself,&#xA;however, so Woz took advantage of the fact that the the refresh system&#xA;doesn't care in what order the addresses are accessed, so long as they&#xA;are all accessed within a given amount of time.&lt;/p&gt;&#xA;&lt;p&gt;The following goes into more detail, but it's still more of an&#xA;overview than a full and complete description. Once you understand the&#xA;basic concepts you should be able more easily to understand the&#xA;detailed documentation such as the data sheets linked below and the&#xA;schematics, as well as be able to ask more precise questions here for&#xA;particular details.&lt;/p&gt;&#xA;&lt;h3&gt;Chip Select&lt;/h3&gt;&#xA;&lt;p&gt;To start with, you need to understand that static RAM chips (and other&#xA;peripheral chips) have a &amp;quot;chip select&amp;quot; (CS) pin that, when asserted,&#xA;tells the chip to read the address bus and read data from or write&#xA;data to the data bus. (There may be more than one CS pin, but they all&#xA;need to be asserted together.) So the normal sequence for a read from&#xA;such a device is to put the desired address on the address bus and&#xA;then assert CS for just that chip (making sure all other chips have CS&#xA;deasserted to avoid conflicts), causing it to output the requested&#xA;data on the data bus.&lt;/p&gt;&#xA;&lt;h3&gt;DRAM Chip Select&lt;/h3&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://console5.com/techwiki/images/8/85/MK4116.pdf&quot; rel=&quot;noreferrer&quot;&gt;Mostek MK 4116&lt;/a&gt; and similar DRAM used in the Apple II and&#xA;many other '70s and '80s computers works slightly differently: there&#xA;are &lt;em&gt;two&lt;/em&gt; select lines: row address select (RAS) and column address&#xA;select (CAS). Among other things, this allowed the chip to have fewer&#xA;pins since the low-order bits of the address would be sent separately&#xA;from the high-order bits, using the same pins for both. Thus a read&#xA;cycle for DRAM is a bit more complex. As shown at the top of page 5 of&#xA;the data sheet linked above, it is:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Put the desired address on address bus.&lt;/li&gt;&#xA;&lt;li&gt;Configure your DRAM address logic to send the lower order bits of&#xA;the address bus to the DRAM chips' address lines.&lt;/li&gt;&#xA;&lt;li&gt;Assert RAS for all of the DRAM the chips, and then wait a bit for&#xA;them to read those lower-order bits.&lt;/li&gt;&#xA;&lt;li&gt;Reconfigure your DRAM address logic now to send the higher order&#xA;bits of the address bus to the DRAM chips' address lines.&lt;/li&gt;&#xA;&lt;li&gt;Assert CAS &lt;em&gt;only for the appropriate bank of DRAM&lt;/em&gt; (eight chips,&#xA;each on one line of the data bus) and then wait a bit for the DRAMs&#xA;to read those higher-order address bits, read the data from RAM,&#xA;and start driving the data bus with the data they read.&lt;/li&gt;&#xA;&lt;li&gt;Read the data from the data bus and then deassert RAS and CAS,&#xA;which will deselect the chips in the bank so that they stop driving&#xA;the data bus.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There are a couple of important things to note here. First is we&#xA;assert RAS to &lt;em&gt;all&lt;/em&gt; of the DRAM chips. This doesn't cause conflicts&#xA;because RAS doesn't cause DRAMs to drive the data bus, it just causes&#xA;them to read the row address from the address bus. Second is that we&#xA;assert CAS &lt;em&gt;only&lt;/em&gt; to one bank: because CAS is what causes the DRAMS to&#xA;send their data out on the data bus, we must not enable CAS for more&#xA;than one bank or there would be a conflict.&lt;/p&gt;&#xA;&lt;h3&gt;DRAM Refresh&lt;/h3&gt;&#xA;&lt;p&gt;A DRAM read of any address from a row automatically does a refresh of&#xA;that entire row. But it's actually a bit easier than that: on the 4116&#xA;you don't actually need to do a full read, you need only assert RAS&#xA;and that's enough to refresh the row. So even a chip that never has&#xA;CAS asserted after RAS, and thus doesn't actually select a column from&#xA;that row and drive the data bus with its value, will still have that&#xA;entire row refreshed. So as long as you're regularly accessing all of&#xA;the rows with RAS, even if you don't eventually read the data, the&#xA;DRAM will be refreshed. (The timing diagram that shows this is on the&#xA;bottom of page 6 of the data sheet linked above.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/applerefjan78/page/n150/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;Page 148&lt;/a&gt; of the January 1978 &lt;em&gt;Apple II Reference Manual&lt;/em&gt;&#xA;gives an overview of how the DRAMs are connected, though it can also&#xA;help to consult &lt;a href=&quot;http://www.applelogic.org/files/AIISCHEMATIC.pdf&quot; rel=&quot;noreferrer&quot;&gt;this Apple II schematic&lt;/a&gt; to confirm&#xA;particular details. While the CAS line is enabled separately for each&#xA;DRAM bank (which it must be to avoid bus conflicts on DRAM data&#xA;output), the address pins and RAS are wired in common for all the DRAM&#xA;banks. This means that an access to any single RAM location will&#xA;generate an RAS select for that row on &lt;em&gt;all&lt;/em&gt; the DRAM chips,&#xA;refereshing that row in all of them.&lt;/p&gt;&#xA;&lt;p&gt;Since the DRAM row addresses are 7 bits wide, this means that so long&#xA;as within the period needed for DRAM refresh you access (for read or&#xA;write) 128 different RAM locations that differ in their seven&#xA;lowest-order address bits, you will referesh all of the DRAM on the&#xA;system. These locations could be,&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$00-$7F,&lt;/li&gt;&#xA;&lt;li&gt;$B800-$B8FF,&lt;/li&gt;&#xA;&lt;li&gt;$0000, $0081, $0102, $0183, $0204, ..., $3F7F,&lt;/li&gt;&#xA;&lt;li&gt;or any other combination.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;Video System RAM Access&lt;/h3&gt;&#xA;&lt;p&gt;Now the CPU may or may not access all of the rows regularly; it&#xA;depends on the program being run. But in the Apple II the CPU is using&#xA;the address and data buses only half the time: when the Φ2 (&amp;quot;phi two&amp;quot;)&#xA;clock signal is high. The other half of the time, when Φ2 is low, it's&#xA;doing internal operations and not using the address or data buses.&lt;/p&gt;&#xA;&lt;p&gt;This other time, when the inverse clock Φ1 is high, is when the video&#xA;system accesses RAM to read the screen areas for the data to generate&#xA;the video display. The processor and video system continually&#xA;alternate cycles this way, CPU on Φ2 and video system on Φ1. This is&#xA;shown in the diagram from Woz's Apple II system description in &lt;a href=&quot;https://archive.org/details/byte-magazine-1977-05/page/n36/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;the&#xA;May 1977 issue of &lt;em&gt;BYTE&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1S0ks.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1S0ks.jpg&quot; alt=&quot;Apple II display generator block diagram&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The video system, during its cycles, simply walks through each address&#xA;in the screen memory, reading it and then using that data to generate&#xA;part of the scan line on the video monitor or TV. And now you see why&#xA;the Apple II uses the rows, and not the columns, for the low-order&#xA;address bits: this means that the video system will be looping through&#xA;every row in each DRAM in every bank, asserting RAS, as the&#xA;preparation for asserting CAS in the bank from which it's reading the&#xA;screen information. This loop happens fast enough that, as a side&#xA;effect, it refreshes all the RAM in the system.&lt;/p&gt;&#xA;&lt;p&gt;Since this all happens during Φ1, when the CPU is off the bus, the CPU&#xA;neither knows nor cares that this is happening. Thus it's often called&#xA;&amp;quot;transparent refresh.&amp;quot;&lt;/p&gt;&#xA;&lt;h3&gt;Apple II Video RAM Layout&lt;/h3&gt;&#xA;&lt;p&gt;There are two unusual things about the Apple II video RAM. First, in&#xA;high-res graphics the lines as displayed on the screen are not&#xA;sequential in memory: the second &amp;quot;row&amp;quot; of memory is actually displayed&#xA;a third of the way down the screen, the third &amp;quot;row&amp;quot; two-thirds down,&#xA;and then the fourth &amp;quot;row&amp;quot; of memory is the second line on the screen.&#xA;Second, for both high-res graphics and text/low-res graphics, there&#xA;are some &amp;quot;holes&amp;quot; between the memory &amp;quot;rows&amp;quot; that are bytes that do not&#xA;generate anything on the display.&lt;/p&gt;&#xA;&lt;p&gt;Neither of these has anything to do with refresh or even the logic to&#xA;handle RAS, CAS and DRAM address multiplexing. The former just saves a&#xA;couple of chips in the video system's memory access logic, and the&#xA;latter is related to making it easier to get the right timing for the&#xA;scan lines that are being generated from the data in screen memory.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-26T01:33:19.107" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14017" PostTypeId="2" ParentId="14012" CreationDate="2020-03-03T17:19:21.747" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What exactly is DRAM refresh? Is it simply making sure a memory cell is accessed which gives it an electrical charge to keep it alive, or is it more like a 'read and re-write'?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DRAM stores it's information in the charge of a capacitor(*1). Capacitors leak. Chip capacitors leak faster than discrete ones,and small ones even faster (*2)- DRAM chips have to cope with both.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Reading may be destructive, like with core, and every read needs to be followed by an (internal) write, depending on the design.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Without reading, unlike core, it still needs a dummy read &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Reading, and thus refresh, doesn't work on a cell (bit) base, but always accesses a whole row at once. Thus a single access will refresh all of them in a single cycle.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If this refresh mechanism is the reason for the non-linear memory layout of the Apple II video, then why? Is it because the gap of 64 lines was the amount of time that the even-phase would get for compute while the video circuitry was still displaying progressively?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. The video memory layout is simply to allow savings within the video address generators used to walk thru memory to generate a frame. For a continuous refresh it's sufficient to address every row once per frame. This is guaranteed due screen refresh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole addressing is the result of the counters used to perform multiple function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First is simply addressing the bytes during a frame. During a frame the the video counters need to address 40 bytes per line and 262 lines per frame. Doing so the 'standard' way would require a 5 bit counter (0..39) and a 9 bit counter (0..261). Both not really common sizes. Common are 4 and 8 bit counters. So doing this would require at least &lt;em&gt;five&lt;/em&gt; 4-bit wide - like a &lt;a href=&quot;http://www.ti.com/lit/ds/symlink/sn54ls161a-sp.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;74161&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Woz now interleaved them to get it down to only four (Position D11..D14) by using two of them as byte counters (D13/D14), but 'stealing the high bit of the second (D13) to form a 9 bit line counter with the other two (D11/D12).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, same 4 chips could have been used to create a linear 13 bit address right way. But then a set of (expensive) comparators and more important another set of counters for timing line/frame timing would have been needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Woz' idea was to use them for both, addressing and timing. So the byte counter did not simply run until 40 for all bytes within a line, but 65 which is the line time, using the only first 40 to access. It is as well the value that lets the top bit of D11 flip, increasing the line counter by one. So this saves separate handling of end of line and increment to the next, as it simply carries over (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So essentially it is about building a 16 bit counter and selecting the right bits to generate timing as well as an address. The 'odd' addressing could have been avoided by having timing and addressing handled by different counters, which meant that, for the line length, two additional 74161 would have been needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there is more to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of adding a separate refresh logic, needing it's own set of counters - and of course time to access, slowing video or CPU, Woz simply let the video do the refresh as well. This is in part done due the way the cells (rows) are assigned to addresses. A 4116 RAM chip uses a 14 Bit Address organized as 7 bit row and 7 bit column. By default one would assume to simply put CPU address A13..A7 as row (and A6..A0 as column). But Woz did use A12, A8, A7 and A3..A0 as row address (and the remaining as column). This seemingly wired scheme is in part due the fact that video doesn't cover 16 Ki (which would be needed when using A13..A7), but only 8 Ki (size of a highres screen). More so, a video scan over all 8 Ki would take more than the 2 ms 4116 timing allows as maximum timing between refresh (for each row). The way the addresses are assigned ensures that all 128 values are generated within 2048 cycles. At a clock frequency of ~1,024 MHz, this comes down to 2.038 ms, which is close enough to make it work reliable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course while video (content) is only needed during the visible part of the picture, refresh should run all the time. As solution Woz let the address counters continue to address screen RAM during blanking and retrace. This time just discarding the values read.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For what its worth, how many chips did Woz actually save by doing this anyway?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Two 4-bit counters for line length (see above) (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;https://www.i-programmer.info/history/people/105-steve-wozniak.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;article at I-Programmer&lt;/a&gt; notes:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;He also cheated on the addressing for the memory mapped graphics to save two chips at the cost of a strangely mangled memory layout. For years to come users of the Apple II would wonder why memory adjacent memory locations didn't always control adjacent screen locations.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A quick browsing of &lt;em&gt;I Woz&lt;/em&gt; didn't show up any relevant information.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - With some some early models this is really a storage of an analogue value, thus DRAM could be used to hold more than one value per bit, like modern Flash. It has been exposed by a few nifty designs, but I guess RAM sizes grew too fast to let room for any serious exploit to generate serious level based applications like with Flash did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Not really leak faster, but due their small capacity, the absolute load difference between a secure detection of a load and ambiguity is smaller, thus the time until it's reached is reached faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - There is more to it regarding clock generation and timing, but that'll need a lot more space to describe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Well, as usual the answer is not as easy when taking about savings, as they are never straight savings (which would mean they were surplus in the first place). In this case adding the two counters would have meant that the adder used for address generation (74283 at position E14) could be saved - but an additional mux would have been needed - so far this comes to a net saving of two IC, but then again this &lt;em&gt;may&lt;/em&gt; have needed different glue logic, so the exact number saved is unknown unless we don't know the exact 'other' logic Woz would have used.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-04T23:27:22.600" LastActivityDate="2020-03-04T23:27:22.600" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="14019" PostTypeId="2" ParentId="1874" CreationDate="2020-03-04T04:28:12.580" Score="0" Body="&lt;p&gt;Im not sure what models were, but in high school, we had a lab of PETs.  They were 4016 or 4032, anyways we had a poke that would make them scream and eventually smoke.  Others, not me, would leave a loop so that this would happen in the next class. Great fun for teens.&lt;/p&gt;&#xA;" OwnerUserId="16481" LastActivityDate="2020-03-04T04:28:12.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14020" PostTypeId="2" ParentId="4672" CreationDate="2020-03-04T06:56:20.727" Score="2" Body="&lt;p&gt;The first example of an ASCII executable you saw is in the Google Usenet archive &lt;a href=&quot;https://groups.google.com/forum/#!search/executable$20ascii$20uudecode/comp.compression/b4XykbeztVM/y9yqt1nuPF4J&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16482" LastActivityDate="2020-03-04T06:56:20.727" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14021" PostTypeId="2" ParentId="4672" CreationDate="2020-03-04T16:25:02.510" Score="3" Body="&lt;p&gt;This certainly seems to be &lt;em&gt;possible&lt;/em&gt; on the 6502.  While several seemingly crucial instructions (like STA, STX and STY) exist only with the 8th bit set, it's still possible to construct arbitrary bytes in RAM using SEC with the read-modify-write forms of ROL, ROR and/or LSR, provided the RAM addresses are printable ASCII.  The full set of ADC/EOR/AND opcodes are also available to speed up construction of arbitrary bytes, then both JMP and JSR are available, as are BPL, BVC, BVS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's straightforward to see how this could be used to construct a small program in zero-page, which could in turn accept hex digits or even Base64, and translate that into a full program.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-03-04T16:25:02.510" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14022" PostTypeId="1" CreationDate="2020-03-05T01:00:36.847" Score="6" ViewCount="821" Body="&lt;p&gt;(This question applies also to the low-resolution graphics video&#xA;buffer, since that uses the same frame buffer as text mode, just&#xA;displaying it differently.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As described on &lt;a href=&quot;https://archive.org/details/crt_controller_handbook/page/n16/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;page 1-12 et seq.&lt;/a&gt; of &lt;em&gt;The CRT Controller&#xA;Handbook&lt;/em&gt; by Gerry Kane, a video system generating characters on a&#xA;display from a list of (byte-sized) character codes generally re-read&#xA;each character code multiple times during the course of displaying it,&#xA;once for each line in the character matrix. (Thus, a 5x7 character&#xA;matrix would require each character code to be read 7 times in the&#xA;course of displaying a row of characters on the screen.) He goes on to&#xA;describe how this is handled in some video controllers via a separate&#xA;line buffer that's filled by the computer and then scanned in this way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Apple II the video circuit seems to read character codes&#xA;directly from the frame buffer in system RAM. However, if it scanned&#xA;each character code row several times while generating the multiple&#xA;scan lines to display those characters on the screen, the CPU might&#xA;change some of the characters during the display of a row, causing the&#xA;top part of those character cells to display the previous character&#xA;but the bottom part to display the new character. I've never seen this&#xA;happen on an Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did the Apple II video system design prevent this from happening?&#xA;Or does it happen and I've just never noticed it? Please provide&#xA;references to support your answer.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-03-13T16:49:58.547" Title="How does the Apple II read lines for video display from the text-mode frame buffer?" Tags="&lt;apple-ii&gt;&lt;video&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14024" PostTypeId="2" ParentId="14022" CreationDate="2020-03-05T05:02:28.787" Score="7" Body="&lt;p&gt;The screen refreshes 60 times per second (or 50 times in PAL countries) so a cell with one character in the top half and a different one in the bottom half would only be visible for 1/60th or 1/50th of a second. Under ordinary conditions, you won't notice it.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-03-05T05:02:28.787" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14025" PostTypeId="1" AcceptedAnswerId="14026" CreationDate="2020-03-05T10:35:38.760" Score="3" ViewCount="364" Body="&lt;p&gt;In his book &lt;em&gt;The Silicon Jungle&lt;/em&gt; David Rothman mentions several times the term &quot;modifying&quot; or &quot;customizing&quot; a software program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e.g. Chapter 8:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;And then the consultant didn’t even supply instructions to operate and modify the software.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;You could customize the MDBS program in FORTRAN or BASIC.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Elsewhere:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;You could have WordStar customized for your machine; but why not instead buy a computer that works well with it from the start?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does he mean by this? Surely commercial programs like WordStar weren't sold as source code?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this modification and recompilation at the source code level? Or is he talking about &quot;configuring&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Asking this in RetroComputing because the book deals with computing technology from the early-1980s.)&lt;/p&gt;&#xA;" OwnerUserId="16486" LastActivityDate="2020-03-09T17:36:59.553" Title="Understanding the meaning of the term &quot;Modifying a software program&quot; in a book" Tags="&lt;software&gt;&lt;books&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14026" PostTypeId="2" ParentId="14025" CreationDate="2020-03-05T10:56:20.423" Score="14" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;In his book &lt;em&gt;The Silicon Jungle&lt;/em&gt; David Rothman mentions several times the term &quot;modifying&quot; or &quot;customizing&quot; a software program.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Just like today, usage of generic products have always needed customisation to be used: forms in word processors, queries in DB products and so on.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;And then the consultant didn’t even supply instructions to operate and modify the software. You could customize the MDBS program in FORTRAN or BASIC&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;MDBS is a database system - to make it useful, one has to add some DB application/queries/etc.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;You could have WordStar customized for your machine; but why not instead buy a computer that works well with it from the start?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Wordstar is made to run on a wide variety of machines, which have different ways of accessing keyboard (*1) and screen (*2), so when buying a Wordstar, one had to select at least the configuration for your system - or create a new one if the target machine is not already listed. The whole process is similar to editing a Unix Termcap, which acts as a dynamic abstraction layer - except that with early programs it was done in a static way, with the configuration patched into the binary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other applications required the user to patch the binaries directly to adjust functionality. So there has been a wide variation of customization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This has gone out of sight for most of the time today, as for one, keyboard hardware (encoding) is much the same everywhere (essentially PC style), but also OSes covering this by replacing hardware related encoding by symbolic layers.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What does he mean by this? Surely commercial programs like WordStar weren't sold as source code?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, but they were made to be patched for customization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, it wasn't uncommon that software was also provided fully or partly as source. Depending on the product source code was seen as part of documentation, meant to allow the user to utilise every detail and/or to research details of operation not found in the 'written' documentation.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is this modification and recompilation at the source code level? Or is he talking about &quot;configuring&quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;All of that may apply. Software has to be configured, modified, and or supplemented to be used. Back then as well as today.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Keyboards (directly attached to computers as well as via terminals) had many different layouts and number of keys available, from straight TTY with no cursor and editing keys at all, all the way to luxurious monsters with special keys for everything imaginable. Also, different keyboards used different key codes for similar keys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Screen control was (mostly) done by control sequences, but as with keyboards, different computers (and terminals as well) used different encodings for the same function. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-09T17:36:59.553" LastActivityDate="2020-03-09T17:36:59.553" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14027" PostTypeId="1" CreationDate="2020-03-05T15:20:25.993" Score="4" ViewCount="477" Body="&lt;p&gt;Is there a way to detect HBL and or VBL on an Apple II, and if yes, how it's done?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-03-05T21:09:06.043" Title="Is it possible to detect Horizontal Blanking (HBL) on an Apple II" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14028" PostTypeId="2" ParentId="14027" CreationDate="2020-03-05T15:20:25.993" Score="5" Body="&lt;p&gt;Hardware management on the Apple II is done by accessing a set of 'Softswitches', addresses when accessed set certain modes. For the screen there are several locations:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$C050 Select Graphics &#xA;$C051 Select Text&#xA;$C052 Full Screen (Graphics)&#xA;$C053 Mixed Screen&#xA;$C054 Page 1&#xA;$C055 Page 2&#xA;$C056 Select Low Res&#xA;$C057 Select Highres&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Usually they are accessed with a read (&lt;code&gt;LD*&lt;/code&gt;)to 'switch' the desired function on, with the value read considered as random. Except, it isn't. When reading any of these locations, the returned value is what has been read from screen RAM during video access, right before the read cycle (*1). The value is not delivered by purpose, but due being still 'present' on data lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mechanic now needs a known value (but better sequence values) to be detected to synchronise. This can be on screen, as well as during the off screen (HBL) portion. The later allows the detection to run 'invisible'. Once found, cycle counting like on an Atari VCS can start to keep track of the beam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a real good explanation By Bob Bishop in &lt;a href=&quot;http://www.softalkapple.com/issue_profiles/v_3_n_2_october-1982&quot; rel=&quot;nofollow noreferrer&quot;&gt;Softtalk of October 1982&lt;/a&gt;. Here's a simple &lt;a href=&quot;http://rich12345.tripod.com/aiivideo/softalk.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;HTML version&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don Lancaster's (*2,*3) 1985 Book &lt;em&gt;&lt;a href=&quot;https://www.tinaja.com/ebooks/enhance_vII.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Enhancing Your Apple II and IIe Volume 2&lt;/a&gt;&lt;/em&gt; calls the mechanic 'Vapor Lock', describing usage in great detail (p.193ff).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tommy points in a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14022/how-does-the-apple-ii-read-lines-for-video-display-from-the-text-mode-frame-buff#comment44923_14024&quot;&gt;comment&lt;/a&gt; to a nice demo game using these effects: &lt;strong&gt;&lt;a href=&quot;http://www.deater.net/weave/vmwprod/space_bars/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rasterbars in Space&lt;/a&gt;&lt;/strong&gt;. The same author also did a real nifty demo spliting between low and highres not only horizontal but vertical as well: &lt;strong&gt;&lt;a href=&quot;http://www.deater.net/weave/vmwprod/megademo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Megademo&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - That means if accessed via a 4 cycle operation like &lt;code&gt;LDA $C051&lt;/code&gt;, it will be the value the video logic accessed between the third and fourth cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - As fadden reminded &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14027/is-it-possible-to-detect-horizontal-blanking-hbl-on-an-apple-ii#comment44925_14028&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Yes, that &lt;a href=&quot;https://en.wikipedia.org/wiki/Don_Lancaster&quot; rel=&quot;nofollow noreferrer&quot;&gt;Don Lancaster&lt;/a&gt; whose 1976 &lt;em&gt;'&lt;a href=&quot;https://www.tinaja.com/ebooks/tvtcb.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;TV Typewriter Cookbook&lt;/a&gt;'&lt;/em&gt; and 1978 &lt;em&gt;'&lt;a href=&quot;https://www.tinaja.com/ebooks/cvcb1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cheap Video Cookbook&lt;/a&gt;'&lt;/em&gt; eventually influenced many early developers, all the way from Wozniak to Sinclair. His website &lt;em&gt;'&lt;a href=&quot;https://www.tinaja.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Guru's Lair&lt;/a&gt;'&lt;/em&gt; contains not only &lt;a href=&quot;https://www.tinaja.com/ebksamp1.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDFs of many of his books&lt;/a&gt;, but as well still new updates worth reading.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-05T21:09:06.043" LastActivityDate="2020-03-05T21:09:06.043" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14029" PostTypeId="1" CreationDate="2020-03-05T17:15:25.377" Score="7" ViewCount="333" Body="&lt;p&gt;According to &lt;a href=&quot;https://encyclopedia2.thefreedictionary.com/stunt+box&quot; rel=&quot;noreferrer&quot;&gt;the Free Dictionary&lt;/a&gt;, citing the McGraw-Hill Dictionary of Scientific &amp;amp; Technical Terms, a &quot;stunt box&quot; is &quot;A device to control the nonprinting functions of a teletypewriter terminal.&quot; &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7266/7208&quot;&gt;This answer&lt;/a&gt; here also mentions it using that meaning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CDC 6600 supercomputer also used a &quot;stunt box&quot; to handle transferring data between the many interleaved banks of RAM (&quot;central storage&quot;) and the CPU. (Thornton, &lt;a href=&quot;https://archive.computerhistory.org/resources/text/CDC/cdc.6600.thornton.design_of_a_computer_the_control_data_6600.1970.102630394.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Design of a Computer: The Control Data 6600&lt;/em&gt;&lt;/a&gt;, p. 16.) It would handle things like holding a request that arrived while a memory bank was busy and delivering the request to the bank's memory controller once it became free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did the designers of each of these devices arrive at the name &quot;stunt box&quot;? Are there other devices also named &quot;stunt box&quot;? Is there some sort of similarity between these different devices that makes using this name make sense?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-03-05T18:24:13.320" Title="What is a &quot;stunt box&quot;?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14030" PostTypeId="2" ParentId="14029" CreationDate="2020-03-05T17:57:40.130" Score="7" Body="&lt;p&gt;This might be at least a partial answer, from a Teletype model 28 manual/brochure:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In the early days of printing telegraphy, &quot;stunts&quot; was the term applied to nonprinting functions. These functions were actuated by function or &quot;stunt&quot; bars in the function assembly of printing telegraph equipment.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.smecc.org/teleprinters/28stuntbox001.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://www.smecc.org/teleprinters/28stuntbox001.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="588" LastEditorUserId="588" LastEditDate="2020-03-05T18:24:13.320" LastActivityDate="2020-03-05T18:24:13.320" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14031" PostTypeId="2" ParentId="14022" CreationDate="2020-03-05T20:27:14.340" Score="0" Body="&lt;p&gt;I worked with Apple II from the assembly code side many years ago for a gaming company.  I just remember that you could split the screen so that you could show graphics and text at the same time.  I remember it being pretty well behaved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could not easily do the same thing on the Commoredore 64.  We had to do special coding to switch between graphics and text when it was 'drawing' the screen.&lt;/p&gt;&#xA;" OwnerUserId="16491" LastActivityDate="2020-03-05T20:27:14.340" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14032" PostTypeId="1" AcceptedAnswerId="14033" CreationDate="2020-03-05T22:31:51.190" Score="22" ViewCount="3736" Body="&lt;p&gt;The dominant standards for PC graphics in the 1980s were the ones introduced by IBM. This included MDA and CGA with the original IBM PC, followed by EGA shortly after the PC/AT, and then VGA with the PS/2 line. While there were other popular cards like Hercules, the PC clone industry mainly followed IBM's lead, and clone graphics cards were work-a-likes of the IBM cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;strong&gt;seemed to change abruptly&lt;/strong&gt; after 1988 when VESA was formed, and started defining enhanced versions of VGA hardware. This was an initiative started by NEC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did NEC start VESA to begin with, and why was NEC/VESA so successful at taking over this role of defining PC graphics standards?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-03-08T22:34:25.893" Title="Why was NEC able to wrestle PC graphics standards away from IBM?" Tags="&lt;graphics&gt;&lt;ibm-pc&gt;&lt;gaming&gt;&lt;vga&gt;&lt;nec-pc&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14033" PostTypeId="2" ParentId="14032" CreationDate="2020-03-05T23:16:13.013" Score="29" Body="&lt;p&gt;VGA was introduced in 1987 with IBM's PS/2 line. NEC and VESA developed SuperVGA in 1988, but at the time it used the old and slow 8/16-bit ISA bus.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Improving video performance was a top priority at NEC to help sell its&#xA;  high-end displays as well as its own PC systems. By 1991, video&#xA;  performance had become a real bottleneck in most PC systems. (316)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To fix this bottleneck, NEC invented the high speed VESA Local Bus (VLB), a precursor to PCI, and turned it over to VESA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM PS/2 had the high speed &lt;a href=&quot;https://en.wikipedia.org/wiki/Micro_Channel_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micro Channel Architecture&lt;/a&gt; (MCA) bus, but IBM demanded royalties on every machine sold and so only a few companies ever adopted it. Most of those that did only had it on part of their PC range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why would this be a concern for NEC? It would have limited the market for their high-end displays, which was a sizable and important business segment for the company. NEC's displays were generally regarded as some of the best in the industry at the time.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Mueller, Scott. &lt;em&gt;Upgrading and Repairing PCs, 14th Edition&lt;/em&gt;. Que, 2003.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="4335" LastEditDate="2020-03-07T17:53:33.593" LastActivityDate="2020-03-07T17:53:33.593" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14034" PostTypeId="2" ParentId="14015" CreationDate="2020-03-06T04:21:05.917" Score="7" Body="&lt;p&gt;The key, I think, is that what we think of today as &quot;arithmetic instructions&quot; were in the Analytical Engine broken down into parts.  To add two numbers, the sequence is&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  +      // operation card: set mill for addition&#xA;  L 001  // variable card: load column 001 to first mill input&#xA;  L 002  // variable card: load column 002 to second mill input,&#xA;         //    and operate mill&#xA;  S 003  // variable card: store mill output in column 3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For the Bernouilli number calculations, it is stated that for increasing 'n', the number of operation cards is fixed (for n&gt;2) at 25, but each unit increase in 'n' requires 33 more variable cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that although we're looping over &lt;strong&gt;operations&lt;/strong&gt; and are repeating the same &lt;strong&gt;operation cards&lt;/strong&gt;, we are not repeating the same &lt;strong&gt;variable cards&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recall there are 3 separate card readers.  We therefore (I surmise) execute a 'goto' on the operation-card reader, to loop back to the beginning of the operation-cards for this section of the computation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Variable cards are handled differently.  If you believe the variable-card reader cannot be stepped backwards (no 'goto' for this reader) then the whole batch of variable cards are repeated, with the variable cards for operation 21 specifying different columns each time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the variable-card reader does have 'goto', then we can avoid total repetition in a more complicated manner. We want to loop the variable-card reader back to the right card for operation 13 on the coding sheet.  On the other hand, before we execute operation 21, we need to jump to to the right variable card for this iteration; that'a a variable-size goto. That can be done by executing a 'step the variable-card reader once' operation a number of times corresponding to the total number of steps needed'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the uncertainty here, see &lt;a href=&quot;https://www.fourmilab.ch/babbage/authentic.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; on the accuracy of the emulator; look for the 'loop the loop' section.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To answer the actual question :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, the Analytical Engine lacked indirect addressing, and also lacked address modification (indexing), either of which would be useful in computations involving sequences of numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nevertheless, creative programming techniques could work around this lack by taking advantage of the unique features of the instruction set.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-03-06T17:35:00.077" LastActivityDate="2020-03-06T17:35:00.077" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14035" PostTypeId="2" ParentId="14032" CreationDate="2020-03-06T10:22:21.960" Score="16" Body="&lt;p&gt;I think that this was part of the larger trend of IBM losing the leadership of the “PC”, especially after the PS/2 and the MCA debacle (although the PS/2 line did introduce many new features which became de facto PC standards).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at graphics specifically, after the VGA, IBM developed &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_8514&quot; rel=&quot;noreferrer&quot;&gt;the 8514/A&lt;/a&gt; and then &lt;a href=&quot;https://en.wikipedia.org/wiki/Graphics_display_resolution#Extended_Graphics_Array&quot; rel=&quot;noreferrer&quot;&gt;the XGA&lt;/a&gt;. For most consumers these had several disadvantages: they were expensive, they targeted high-end 1024×768 monitors (fixed-frequency in some cases), and they are accelerators. They were great for CAD and similar tools which could use specific drivers and benefited from the accelerated functions, but they didn’t have any significant advantage for most PC users. The lack of support for 800×600 might have mattered too: while higher-end 13-14” monitors of the era supported 1024×768, in practice that was too fine for most users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I’m not sure that it’s accurate to say that NEC wrested PC graphics standards away from IBM. For a start IBM wasn’t holding on to them ;-). But NEC didn’t really end up writing the next chapter either... In the late 80s and early 90s, PC graphics was a mess of competing implementations, and any software which wanted to work on a variety of graphics adapters, using their capabilities beyond VGA, ended up having to support them all separately. See Fractint for one example of this. In the late 80s, there wasn’t much use for anything beyond VGA anyway, for most users:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CPUs weren’t fast enough to run games at higher resolutions (even 640×480 in 256 colours wasn’t used much before higher-end 486s);&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2386/79&quot;&gt;Windows hadn’t taken the world by storm&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;even spreadsheet graphics and presentation programs didn’t really need anything beyond 640×480 (&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/6947/79&quot;&gt;computers screens weren’t the primary output medium&lt;/a&gt; for communication anyway);&lt;/li&gt;&#xA;&lt;li&gt;multi-sync monitors were expensive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;After VGA, I’d say the next significant PC graphics standard was Windows 3 drivers; that’s what brought unification back. NEC’s SuperVGA “standard” did help by providing a fall-back, but that was only really significant with Windows 3 anyway (and its SuperVGA driver). Most graphics adapters provided their own, specific Windows 3 drivers... In terms of graphics standards, VBE only made an impact with version 1.2 in 1991, and even then, it ultimately ended up being a common API for games running on top of &lt;a href=&quot;https://en.wikipedia.org/wiki/UniVBE&quot; rel=&quot;noreferrer&quot;&gt;SciTech’s drivers&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That’s not to say that NEC’s endeavours weren’t significant; the VESA Local Bus was a huge improvement, but that’s not a graphics standard, and it was developed later (1992). It does however explain why VESA itself ended up being successful. As for why NEC started VESA to drive and publish these standards, it’s probably because it was too small a player to change the industry on its own, and consortia were popular at the time (see also EISA, in 1988).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-03-06T15:08:38.840" LastActivityDate="2020-03-06T15:08:38.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14036" PostTypeId="1" CreationDate="2020-03-06T21:37:41.973" Score="11" ViewCount="723" Body="&lt;p&gt;Examples of Amiga Kickstart files (ROMs) can be 256k (1.2/1.3) or 512k (3.0/3.1) binary files, located at &lt;code&gt;$FC0000-$1000000&lt;/code&gt; or &lt;code&gt;$F80000-$1000000&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several programs are able to &quot;soft-kick&quot; Amigas, i.e. install another ROM than the original one, without changing the chips physically, either to upgrade to a newer ROM to run more recent programs, or on the contrary to boot older programs that aren't compatible with new ROMs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the ROM is by definition not writable, those soft-kick programs have to load the replacement Kickstart somewhere else in memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem is: the ROM files isn't position-independent code. It contains a lot of hardcoded addresses between &lt;code&gt;$F80000/$FC0000&lt;/code&gt; and &lt;code&gt;$1000000&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's where the relocation table files (aka .RTB) come into play. A table exists for almost every official ROM file (see &lt;a href=&quot;http://aminet.net/package/util/boot/skick346&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: how exactly are created those relocation table files ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to re-create those myself and failed. Actually I was able to find most of the reloc offsets, but still miss some.&#xA;For instance, this one is obvious, &lt;code&gt;LAB_0186&lt;/code&gt; must be relocated (it also could have been made originally PC-relative but that's another story:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LAB_0181:&#xA;    LEA LAB_0186,A0     ;0fc208c: 41f900fc20c0&#xA;    CLR.W   D1          ;0fc2092: 4241&#xA;    ...&#xA;    RTS             ;0fc20be: 4e75&#xA;LAB_0186:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;now that one is more subtle:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MOVE.L  #$00fc1d28,312(A6)  ;0fc034a: 2d7c00fc1d280138&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;One recognizes an address inside the ROM, but it could be a value too. Introducing heuristics to try to find the hidden ones can find some, but also find fake ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And there are tables, that are difficult to figure out for the same reason (plus disassembling data confuses the disassembler&#xA;which thinks that some data are instructions):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    DC.W    $00fc           ;0fc32c8&#xA;    DC.W    $25ae           ;0fc32ca   ; $FC25AE is probably an address&#xA;    DC.W    $00fc           ;0fc32cc&#xA;LAB_029C:&#xA;    MOVE.W  (A6),(A1)+      ;0fc32ce: 32d6  ; $FC32D6 too&#xA;    MOVE.W  D0,D7           ;0fc32d0: 3e00   ; now there's this stray word&#xA;    DC.W    $00fc           ;0fc32d2   &#xA;    MOVE.L  (A6)+,252(A2)       ;0fc32d4: 255e  ; and another probable address again... argh!!! 00fc&#xA;    MOVE.W  -(A0),(A1)+     ;0fc32d8: 32e0&#xA;    MOVE.W  D0,D6           ;0fc32da: 3c00&#xA;    DC.W    $00fc           ;0fc32dc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I doubt that those tables have been created by the actual Amiga developers who took time to assemble ROMs at different addresses to compute the relocation offsets (the simplest way to do that &lt;em&gt;when you have the full source code&lt;/em&gt;) so someone did the hard job &lt;em&gt;for all those Kickstarts&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The author of skick probably created them himself and he confirms that it's non-trivial and is bragging about&#xA;the fact that he's not going to disclose how it's done:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;.RTB  file  consists  of  two parts.  The first part contains all the relocation&#xA;  offsets ...  It is created with a special&#xA;  program  called  RTG  (relocation  table generator) from specially pre-processed&#xA;  Kickstart  image.  &lt;em&gt;How  to  get  this image, it is my magic and I'll never tell&#xA;  anybody  about  it&lt;/em&gt;.  One note only:  generation of 39.046 .RTB took 1 1/2 hours.&#xA;  (Manual work, + about 10 mins my 7MHz '010 CPU time).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm impressed that the first part can be &lt;em&gt;generated&lt;/em&gt;, on a 68010...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Second part contains BCPL relocation  table and it is required for 1.3 ROM only.  It was created manually, analysing  dos.library,  which is written in BCPL in 1.3.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's more classical way to do it: fully reverse-engineer the program. I suppose it's easier because dos library is smaller, and doesn't change much between 1.x kickstarts. Not much mystery here.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;.RTB file is not easy to create.  I don't recommend anybody to try it &lt;em&gt;without&lt;/em&gt; very good knowledge of assembly  language and machine code (not the same).  N.B.  Auxiliary tools to do such work took 1 month to develop.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yeah, I don't recommend it either...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Anyone has information on the RTG program or how it could work ?&lt;/em&gt; (the author didn't even have access to memory protection to execute and find ill-relocated locations...)&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-03-07T13:47:46.923" LastActivityDate="2021-03-04T12:33:49.327" Title="How are Amiga Kickstart Relocation Files (.RTB) created?" Tags="&lt;amiga&gt;&lt;motorola-68000&gt;&lt;amiga-kickstart&gt;&lt;reverse-engineering&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14037" PostTypeId="2" ParentId="14025" CreationDate="2020-03-06T22:46:08.110" Score="1" Body="&lt;p&gt;Sun's SunOS kernel was customizable by the user because it could be built (linked) from a number of modules including kernel modules (both binary and in compilable source form) from an ISV &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The user could also choose if some type of modules should be included at all in the kernel image or how many serial line devices should be supported etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some types of changes required &lt;em&gt;as&lt;/em&gt; (the assembler) because the distributed system included some amount of assembler files (Motorola 68k/SPARC assembler)&lt;/p&gt;&#xA;" OwnerUserId="15497" LastEditorUserId="15497" LastEditDate="2020-03-06T23:45:02.430" LastActivityDate="2020-03-06T23:45:02.430" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14038" PostTypeId="1" CreationDate="2020-03-06T21:41:27.360" Score="6" ViewCount="1370" Body="&lt;p&gt;I'm currently studying the TCP layer, one of the main references is the &lt;a href=&quot;https://tools.ietf.org/html/rfc793&quot; rel=&quot;noreferrer&quot;&gt;1981 Internet Engineering Task Force's RFC&lt;/a&gt;. One of the paper it cites is a paper published by the &lt;a href=&quot;https://www.cs.princeton.edu/courses/archive/fall06/cos561/papers/cerf74.pdf&quot; rel=&quot;noreferrer&quot;&gt;Internet Electric and Electronic Engineers in 1974&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the 1974 paper, one of the considerations for the design of the protocol seems to be the attribution of charges, accounting of packet costs, billing:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To allow networks under different ownership to interconnect, some accounting will undoubtedly be needed for traffic that passes across the interface. In its simplest terms, this involves an accounting of packets handled by each net for which charges are passed from net to net until the buck finally stops at the user or his representative.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Later, this rationale is expanded and curious details about the expected billing &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;We assume, for simplicity, that each network initially charges a fixed rate per packet transmitted, regardless of distance, and if one network can handle a larger packet size than another, it charges a proportionally larger price per packet. We also assume that a subsequent increase in any network’s packet size does not result in additional cost per packet to its users...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The assumption of simplicity is that charges don't depend on distance travelled, which is surprisingly true nowadays. But the charge per packet is taken as a natural assumption, and the implications of it are further discussed in the paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 2 oddities here.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Charges are measured in packets instead of bits: Nowadays, almost all ISP contracts are stipulated in terms of bits, not packages. Was there ever a time were charges were calculated by the amount of packets sent or received?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Charges are measured in data usage not bandwidth : This is the most important difference since, nowadays, most consumer's traffic is billed by the bandwidth, although some large scale hosting providers might internally account per data usage, and mobile providers may charge by data usage. I mention this difference because the original article speaks of stopping the buck at the user representative, which implies that the user is charged per data usage, not bandwidth.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16495" OwnerDisplayName="Tomas Zubiri" LastActivityDate="2020-03-09T14:02:51.500" Title="Were internet costs ever billed per packet?" Tags="&lt;history&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="14039" PostTypeId="2" ParentId="14038" CreationDate="2020-03-06T23:23:26.943" Score="8" Body="&lt;p&gt;It's important to keep in mind that there are vastly different business models when it comes to networking. We can categorise them as peering (between providers) and endpoint (non network user).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Between providers, it's all about the amount of data transferred, as this is in direct relation to resources used. Toward endpoint users, it's about finding an accounting (business) model that fits the user expectation as well as the need to cover cost and generate profit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One important point in the above citation is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] if one network can handle a larger packet size than another, it charges a proportionally larger price per packet [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This simply means charging by data amount exchanged. &lt;strong&gt;With a fixed packet size, packet counting is the same as data counting.&lt;/strong&gt; Incorporating packet size as a price element does extend this for different packet configuration - and turns packet counting into data counting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that has (almost) always been the case between peers (providers). Which makes sense for continuous connections. Providers always tried to level connections usage to reduce payments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;End user accounting is a complete different topic. Here, various models have been used:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;charging by time connected (dial up)&lt;/li&gt;&#xA;&lt;li&gt;flat rate per month&lt;/li&gt;&#xA;&lt;li&gt;charge by data transmitted&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All three have additionally been available with different pricing for different speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: Many accounting models have been used, and packet counting was among them.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2020-03-09T14:02:51.500" LastActivityDate="2020-03-09T14:02:51.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14040" PostTypeId="1" CreationDate="2020-03-07T05:00:26.870" Score="6" ViewCount="319" Body="&lt;p&gt;The &lt;a href=&quot;http://www.decadecounter.com/vta/articleview.php?item=107&quot; rel=&quot;nofollow noreferrer&quot;&gt;NEC PC-8201&lt;/a&gt; had three serial interface ports on the back,&#xA;&quot;RS-232,&quot; &quot;SIO1&quot; and &quot;SIO2.&quot; These were all driven by a single IM6402&#xA;USART, switched between each physical port via bits 7 and 6 of IO port&#xA;$90. Details are given in §3.1.8 (p. 3-10) of the &lt;a href=&quot;http://www.decadecounter.com/vta/pdf/NEC%208201a%20Svc%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;NEC PC-8201&#xA;Service Manual&lt;/a&gt; (PDF).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This allowed a user to plug in multiple devices simultaneously and very&#xA;quickly switch between them, quickly enough that a user might feel all&#xA;devices were working at the same time, though of course actually only&#xA;one device would be accessed at any particular instant. It saved on&#xA;cost, took up fewer of the 256 I/O ports, and also saved considerable&#xA;board space on a small machine (the IM6402 was a 40-pin chip).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What other 8-bit microcomputer systems used this technique, where a&#xA;single controller (such as a UART) that cannot control more than one&#xA;device at a time would be switched between different devices? (The&#xA;devices may be on-board or external devices, and, if external, the&#xA;switching logic may be onboard or in a separate &quot;port expander&quot; unit.)&#xA;Ideal answers will include the user's view of how the ports were used,&#xA;an explanation of why the designers implemented the system this way,&#xA;it, a techincal description of the multiplexing scheme, and&#xA;references.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that I'm not asking about external multi-device bus systems such&#xA;as &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_SIO&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari SIO&lt;/a&gt;, but only systems that appeared to the user to&#xA;have separate external ports where the devices did not share the&#xA;external port with other devices connected at the same time. (Or, for&#xA;internal muliplexing, where the device itself was not &quot;aware&quot; that was&#xA;sharing a controller with other devices.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-03-09T07:43:17.657" LastActivityDate="2020-03-11T03:37:55.197" Title="What 8-bit microcomputer systems multiplexed multiple physical ports on a single controller?" Tags="&lt;hardware&gt;&lt;trs-80-model-100&gt;&lt;ports&gt;" AnswerCount="8" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14041" PostTypeId="1" CreationDate="2020-03-07T06:08:27.413" Score="5" ViewCount="769" Body="&lt;p&gt;If you zoom in this image, to the leftmost, white &quot;cell&quot; in the middle &quot;row&quot; of the machine, it says, in the bottom, &quot;&lt;strong&gt;INT NET&lt;/strong&gt;&quot;: &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/c/c6/PACE-TR-10_analog_computer_-_National_Cryptologic_Museum_-_DSC07908.JPG&quot; rel=&quot;noreferrer&quot;&gt;https://upload.wikimedia.org/wikipedia/commons/c/c6/PACE-TR-10_analog_computer_-_National_Cryptologic_Museum_-_DSC07908.JPG&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this in any way have something to do with Internet or any other kind of network? In the Wikipedia article, it says is was the first desktop computer, used by NSA.&lt;/p&gt;&#xA;" OwnerUserId="16496" LastEditorUserId="611" LastEditDate="2020-03-07T09:41:10.990" LastActivityDate="2020-03-07T09:41:10.990" Title="Did this analogue computer from 1960 really have Internet?" Tags="&lt;history&gt;&lt;network&gt;&lt;early-computer&gt;&lt;analogue-computer&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14042" PostTypeId="2" ParentId="14041" CreationDate="2020-03-07T06:22:16.223" Score="15" Body="&lt;p&gt;No, this has nothing to do with any networks; the &quot;INT&quot; stands for &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Integrator&quot; rel=&quot;noreferrer&quot;&gt;integrator&lt;/a&gt;.&quot; That panel and the adjacent one to the right are the interface to an integrator/memory module:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MNTYM.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MNTYM.png&quot; alt=&quot;Integrator/memory module&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Integrators in analogue computers are used to measure quantity over time, basically a sort of sum function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find more pictures of the modules on The Analog Computer Museum's &lt;a href=&quot;http://www.analogmuseum.org/english/collection/eai/tr10/&quot; rel=&quot;noreferrer&quot;&gt;EAI TR-10 page&lt;/a&gt;; they also have &lt;a href=&quot;http://www.analogmuseum.org/library/eai_tr-10.pdf&quot; rel=&quot;noreferrer&quot;&gt;a brochure&lt;/a&gt; (PDF) that gives a much more detailed description of the system.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-03-07T06:22:16.223" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14043" PostTypeId="2" ParentId="14038" CreationDate="2020-03-07T06:50:16.813" Score="16" Body="&lt;p&gt;While I suspect that per-packet billing for &lt;a href=&quot;https://en.wikipedia.org/wiki/Internet&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;the&lt;/em&gt; Internet&lt;/a&gt; was&#xA;rare, per-packet billing for &lt;a href=&quot;https://en.wikipedia.org/wiki/Internetworking&quot; rel=&quot;noreferrer&quot;&gt;internetworks&lt;/a&gt; (particularly private&#xA;ones) was quite common in the 1980s and early 1990s.&lt;/p&gt;&#xA;&lt;p&gt;Most of these were long-haul &lt;a href=&quot;https://en.wikipedia.org/wiki/X.25&quot; rel=&quot;noreferrer&quot;&gt;X.25&lt;/a&gt; services offered by companies such&#xA;as &lt;a href=&quot;https://en.wikipedia.org/wiki/Telenet&quot; rel=&quot;noreferrer&quot;&gt;Telenet&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Tymnet&quot; rel=&quot;noreferrer&quot;&gt;Tymnet&lt;/a&gt; in the United States and &lt;a href=&quot;https://en.wikipedia.org/wiki/DATAPAC&quot; rel=&quot;noreferrer&quot;&gt;DATAPAC&lt;/a&gt; in&#xA;Canada. Note that your connection to the local Point of Presence (POP)&#xA;of the long-haul provider was often a dedicated line, but that was&#xA;typically just a short intra-city link and nowhere near as expensive&#xA;as a cross-country (or worse yet, international) dedicated line.&lt;/p&gt;&#xA;&lt;p&gt;Once you had a link to a packet network's POP, there was generally no&#xA;issue running multiple connections to different remote endpoints on&#xA;it. So it might well be reasonable for someone already using such a&#xA;connection for another purpose (such as the one I describe below) to&#xA;request the provider set up a link to an Internet connectivity&#xA;provider and use that for Internet access. Depending on how much&#xA;traffic you have, this might be a cheaper way to connect to the ISP&#xA;than adding another dedicated line if you needed an always-on&#xA;connection (e.g., to receive mail via SMTP). But it's a matter of&#xA;opinion whether or not you would see this as &amp;quot;per-packet charges for&#xA;Internet access,&amp;quot; since those charges are not from the ISP itself but&#xA;due to the way you chose to connect to the ISP.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Back in the early '90s I was a network administrator at a company in&#xA;Vancouver that had a remote site in Chile, and we had a local X.25&#xA;connection to DATAPAC that, through various other networks, eventually&#xA;terminated in Santiago. This wasn't any more speedy than a pair of&#xA;high-speed modems, but we needed an always-up connection and, since we&#xA;didn't anticipate having a lot of traffic on the link, this was&#xA;calculated to be considerably cheaper than a a dedicated leased line&#xA;or a &amp;quot;permanent&amp;quot; long distance phone call.&lt;/p&gt;&#xA;&lt;p&gt;Sadly for us, we didn't realize that our Novell servers, using the&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Internetwork_Packet_Exchange&quot; rel=&quot;noreferrer&quot;&gt;IPX&lt;/a&gt; protocol, would exchange route information and service&#xA;advertising messages with the remote servers several times per minute.&#xA;This is of course fine on local area networks and dedicated links,&#xA;since the total volume of data for these is not particularly high, but&#xA;on X.25 this incurred a charge for each packet. When the first monthly&#xA;invoice arrived we were rather shocked to see that we had sent and&#xA;received a few dozen times as many packets as we had calculated for&#xA;our traffic, and of course the bill was much larger than expected. (We&#xA;quickly figured out how to reconfigure our systems to stop exchanging&#xA;these packets, or at least send them much less frequently.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-07T07:04:38.870" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14044" PostTypeId="1" CreationDate="2020-03-07T08:09:28.620" Score="4" ViewCount="360" Body="&lt;p&gt;When I first got into using Linux around the turn of the millennium, XFree86 was still in use, with the associated use of the &lt;a href=&quot;https://www.oreilly.com/openbook/debian/book/ch05_03.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;xf86config&lt;/a&gt; command to manually set everything up, and the warning that entering incorrect sync values could permanently damage the monitor stuck with me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/6614/1920&quot;&gt;This answer&lt;/a&gt; explains the mechanism by which that happens, and points out that monitor designs derived from TV designs should be protected from that problem by the circuitry needed to safely deal with noisy TV signals, but that left me wondering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How common was it to use a vulnerable design at various points along the timeline?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And, as a subset of that question, given how ludicrous an idea it is for a modern LCD to fry itself in response to invalid input, at what point did it &lt;em&gt;become&lt;/em&gt; safe to assume that all newly manufactured displays had such protection? It makes no sense for LCDs to be vulnerable to an artifact of how CRTs work, but did CRT monitor manufacturers manage to reach that point before LCDs took over?)&lt;/p&gt;&#xA;" OwnerUserId="1920" LastEditorUserId="1920" LastEditDate="2020-03-07T13:26:52.187" LastActivityDate="2020-04-11T19:56:40.247" Title="What was the timeline for monitors becoming immune to physical damage from invalid sync values?" Tags="&lt;crt-monitor&gt;" AnswerCount="2" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14045" PostTypeId="2" ParentId="14040" CreationDate="2020-03-07T08:33:02.560" Score="3" Body="&lt;p&gt;The Commodore 64 used a &lt;a href=&quot;https://www.c64-wiki.com/wiki/CIA&quot; rel=&quot;nofollow noreferrer&quot;&gt;single CIA&lt;/a&gt; for both the keyboard and joystick (or paddles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This made reading both the keyboard and the joystick at the same time a bit of challenge, see &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6421/reading-both-keyboard-and-joystick-with-non-kernal-code-on-c64/11191#11191&quot;&gt;this answer&lt;/a&gt; for details (complete with schematics).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for an explanation of &quot;why&quot;, I guess the answer is always &quot;to save parts and make it cheaper&quot;.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-03-07T08:33:02.560" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14046" PostTypeId="5" CreationDate="2020-03-07T09:41:53.413" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-03-07T09:41:53.413" LastActivityDate="2020-03-07T09:41:53.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14047" PostTypeId="4" CreationDate="2020-03-07T09:41:53.413" Score="0" Body="Use this tag for questions about historical analogue computers." OwnerUserId="611" LastEditorUserId="611" LastEditDate="2020-03-07T11:55:49.753" LastActivityDate="2020-03-07T11:55:49.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14048" PostTypeId="5" CreationDate="2020-03-07T09:44:31.150" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-03-07T09:44:31.150" LastActivityDate="2020-03-07T09:44:31.150" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14049" PostTypeId="4" CreationDate="2020-03-07T09:44:31.150" Score="0" Body="Use this tag for questions about historical mechanical (non-electronic) computers" OwnerUserId="611" LastEditorUserId="611" LastEditDate="2020-03-07T11:55:43.443" LastActivityDate="2020-03-07T11:55:43.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14050" PostTypeId="2" ParentId="14036" CreationDate="2020-03-07T11:53:26.303" Score="8" Body="&lt;p&gt;The job is non-trivial, but I don't think it would be hard for someone 'experienced in the art'. 256k or even 512k is not a lot of code, and the ROMs are highly structured with a well-defined interface. I suspect it would be easier than cracking some of the more sophisticated copy-protection schemes used in Amiga games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some respects ROM code is easier to analyze than code compiled for RAM. No relocation quirks to worry about. No self-modifying code. Any PC-relative reference &lt;em&gt;must&lt;/em&gt; be to code or static data (no variables mixed in with instructions!) etc. Most of the code was generated by C compilers which didn't optimize to the extent that modern compilers do, so it is clean and easy to follow. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One recognizes an address inside the ROM, but it could be a value too.&#xA;  Introducing heuristics to try to find the hidden ones can find some,&#xA;  but also find fake ones.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Any 32 bit number starting with $00fC is far more likely to be an address inside the ROM than a 'value'. Examining the code that uses the 'value' should tell you if it is an address or not.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And there are tables, that are difficult to figure out for the same&#xA;  reason (plus disassembling data confuses the disassembler which thinks&#xA;  that some data are instructions):&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Tables are generally accessed with 'boiler plate' code that is easily recognizable. Tables of 16 bit words (commonly used for switch/case statements) don't need to be relocated.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good disassembler should be able to correctly disassemble the code 99% of the time. Reviewing it and fixing misidentified sections might take a few hours. If the job is done properly it should reassemble to identical code, but this test probably isn't necessary. All you have to do is find those absolute references to memory locations in the ROM, and the rest is trivial.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Anyone has information on the RTG program or how it could work ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't have any information on it, but I imagine it is just as the author described - a 'simple algorithm' that compresses the relocation offsets. You could probably figure it out by analyzing the program that extracts them.  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(the author didn't even have access to memory protection to execute and&#xA;  find ill-relocated locations...)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No memory protection - the horror!&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I doubt that those tables have been created by the actual Amiga&#xA;  developers who took time to assemble ROMs at different addresses to&#xA;  compute the relocation offsets (the simplest way to do that when you&#xA;  have the full source code)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;They&lt;/em&gt; didn't do it, their compiler/linker did. Having the 'full' source code would actually be a very hard way to do it - perhaps even impossible. You would have to duplicate the exact development system that they used back then, including the same compiler versions, same make files etc. Disassembling the ROM to produce asm source which reassembles to identical code would be much easier.&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-03-07T11:53:26.303" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14051" PostTypeId="1" AcceptedAnswerId="14053" CreationDate="2020-03-07T14:32:53.430" Score="14" ViewCount="2569" Body="&lt;p&gt;I am reading up on old C64 stuff and I am using the Vice emulator to play with it. Currently I am studying about how the C64 stored BASIC programs in RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is quite clear (it starts on address &lt;code&gt;$0800&lt;/code&gt; and goes from there, etc) and the Vice monitor shows me everything. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When reading about this on &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;, and also on &lt;a href=&quot;https://www.c64-wiki.com/wiki/Memory_(BASIC)&quot; rel=&quot;noreferrer&quot;&gt;c64-wiki&lt;/a&gt;, it says it stored the line number first, followed by a pointer to the next line. However, when I check the memory in the Vice monitor, I can see it is the other way round: first a pointer, then the line number:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT &quot;HELLO WORLD&quot;&#xA;20 PRINT &quot;BYE BYE&quot;&#xA;&#xA;C:0800  00 15 08 0a  00 99 20 22  48 45 4c 4c   ...... &quot;HELL&#xA;C:080c  4f 20 57 4f  52 4c 44 22  00 25 08 14   O WORLD&quot;.%..&#xA;C:0818  00 99 20 22  42 59 45 20  42 59 45 22   .. &quot;BYE BYE&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;15 08&lt;/code&gt; before &lt;code&gt;0a 00&lt;/code&gt; is clearly a pointer and &lt;code&gt;0a 00&lt;/code&gt; is clearly a line number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is simple, are the docs wrong, or is the Vice emulator different from the 'real thing' ?&lt;/p&gt;&#xA;" OwnerUserId="575" LastEditorUserId="5199" LastEditDate="2020-03-07T18:01:55.760" LastActivityDate="2020-03-08T02:09:57.527" Title="How was a line of Commodore 64 BASIC code stored in its memory?" Tags="&lt;commodore-64&gt;&lt;basic&gt;&lt;memory-layout&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14052" PostTypeId="2" ParentId="14032" CreationDate="2020-03-07T15:32:07.310" Score="1" Body="&lt;p&gt;I would suggest that choosing an industry group’s standard rather than that of a single company is obviously preferable to anyone not in that single company.&lt;/p&gt;&#xA;" OwnerUserId="10645" LastActivityDate="2020-03-07T15:32:07.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14053" PostTypeId="2" ParentId="14051" CreationDate="2020-03-07T15:33:33.770" Score="17" Body="&lt;p&gt;Trust Vice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The information you obtained elsewhere is incorrect. Each line of the BASIC program is &lt;strong&gt;preceded&lt;/strong&gt; by a pointer to the next line. &lt;strong&gt;Then&lt;/strong&gt;, comes the line number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following this is the tokens that make up the actual BASIC code of the line, and terminated by a null ($00). Then starts the next line (#2) with a pointer to line #3. The end of the BASIC program is indicated when the pointer to the next line equals &lt;code&gt;$0000&lt;/code&gt;. That is, three nulls in a row.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technically, your BASIC program actually starts at &lt;code&gt;$0801&lt;/code&gt;, as that is the location of the low-byte of the first pointer to the next line (line #2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the start of BASIC for the C64. The VIC-20 and PET start at &lt;code&gt;$0401&lt;/code&gt; and the C128 starts at &lt;code&gt;$1C01&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;On the VIC-20, the start of BASIC actually moves around, depending on expansion memory being installed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Interestingly, the Commodore disk drives, which return a directory listing in the format of a BASIC program (i.e. &lt;code&gt;LOAD &quot;$&quot;,8&lt;/code&gt;), always use &lt;code&gt;$0401&lt;/code&gt; as the base, and this behavior dates back to the PET. However, later Commodore kernals &quot;fix-up&quot; the directory listing to move it to the start of BASIC for that machine.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-03-07T16:00:37.043" LastActivityDate="2020-03-07T16:00:37.043" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14054" PostTypeId="2" ParentId="14040" CreationDate="2020-03-07T18:31:42.217" Score="1" Body="&lt;p&gt;I think the canonical example from the 16-bit era is the two ports on the Macintosh provided by a single Zilog 8530 and able to be used for serial, printer, modem, and AppleTalk networking based on user configuration. Of course this was influenced by the modem and printer port on the 8-bit Apple //c, but those ports relied on 2 independent 6551 UARTs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to actually answer the question, which stipulated a single controller chip on an 8-bit microcomputer system, I'd point out the Apple IIgs as a possible answer. It shared the single Zilog &quot;Serial Communications Controller&quot; (&quot;SCC&quot;) architecture with the Classic Macintosh, while also being compatible with the two independent serial ports approach of the earlier Apple //c. The two ports on the Apple IIgs support AppleTalk, printers, modems, and other serial connections, in much the same manner as the Mac when used under GS/OS. When used in ProDOS 8, the two ports mimic the behavior of the Apple //c ports. It's quite flexible and a real testament to the power of Zilog's SCC compared to vanilla UART controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the Zilog Users' Manual:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Two independent full-duplex channels&lt;/li&gt;&#xA;&lt;li&gt;Synchronous/Isosynchronous data rates up to 5 Mbits/sec&lt;/li&gt;&#xA;&lt;li&gt;Asynchronous&lt;/li&gt;&#xA;&lt;li&gt;Byte-oriented synchronous&lt;/li&gt;&#xA;&lt;li&gt;SDLC/HDLC&lt;/li&gt;&#xA;&lt;li&gt;Receiver FIFO&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o5otO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o5otO.png&quot; alt=&quot;8530 block diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the SCC manages all the multiplexing internally, it is exceptionally easy to implement from a hardware standpoint. Naturally, the software has to fill in the gap of managing the added complexity of two channels and multiple operating modes. This software control was done quite well on the IIgs.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-03-09T14:34:09.860" LastActivityDate="2020-03-09T14:34:09.860" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14055" PostTypeId="1" CreationDate="2020-03-07T18:35:02.683" Score="27" ViewCount="8443" Body="&lt;p&gt;Some Apple keyboards, such as the Apple //e, some early Macintosh models, and the venerable Apple &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Extended_Keyboard&quot; rel=&quot;noreferrer&quot;&gt;Extended Keyboard&lt;/a&gt; have the homing bumps on the &lt;KBD&gt;D&lt;/KBD&gt; and &lt;KBD&gt;K&lt;/KBD&gt; keys instead of the standard &lt;KBD&gt;F&lt;/KBD&gt; and &lt;KBD&gt;J&lt;/KBD&gt; keys that almost everyone else uses. (e.g. IBM's venerable &lt;a href=&quot;https://en.wikipedia.org/wiki/Model_M_keyboard&quot; rel=&quot;noreferrer&quot;&gt;Model M&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why? It frustrates touch typists so it seems like there must be some good reason.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4335" LastEditDate="2020-03-09T02:49:11.713" LastActivityDate="2020-03-10T12:38:35.443" Title="Why are the homing bumps on D and K on Apple keyboards?" Tags="&lt;keyboards&gt;&lt;apple&gt;" AnswerCount="4" CommentCount="14" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14056" PostTypeId="2" ParentId="14055" CreationDate="2020-03-07T19:14:02.357" Score="23" Body="&lt;p&gt;Personally I know this from a typewriter course in school (ca. 1973). The machines we used hat slightly different cavity on &lt;KBD&gt;D&lt;/KBD&gt;/&lt;KBD&gt;K&lt;/KBD&gt; to support touch-typing. we were supposed always rest our middle fingers there while having the rest afloat. A similar lesson was given for the use of adding machines with a similar keycap for the &lt;KBD&gt;5&lt;/KBD&gt; key. But so far I couldn't find any reference online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was Germany. &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14055/why-are-the-homing-bumps-on-d-and-k-on-apple-keyboards#comment45033_14056&quot;&gt;Comments&lt;/a&gt; and other &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14060/6659&quot;&gt;answer&lt;/a&gt; suggest that it was similar in other European countries (Denmark, Norway, Sweeden). So &lt;KBD&gt;D&lt;/KBD&gt;/&lt;KBD&gt;K&lt;/KBD&gt; might have been a defacto standard for pre-computer typing to support a touch type method used at least in Europe, which Apple may have used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some Apple specific timeline:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Original Apple II, II+, III, Lisa and Macintosh didn't have any markings.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The IIe keyboard (1983) was the first to introduce them on &lt;KBD&gt;D&lt;/KBD&gt;/&lt;KBD&gt;K&lt;/KBD&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;All later Apple II (IIe, IIc, IIc+) also got them while the 'professional (III, Lisa, Macintosh) stayed without.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Macintosh Plus (1986) keyboard was the first in the Mac line with bumps (&lt;KBD&gt;D&lt;/KBD&gt;/&lt;KBD&gt;K&lt;/KBD&gt;).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;They stayed there on all following (ADB) keyboards (Mac as well as Apple IIgs).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With introduction of USB keyboards(*1) with the eMac, they got moved to &lt;KBD&gt;F&lt;/KBD&gt;/&lt;KBD&gt;J&lt;/KBD&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;All Apple Keyboards since ~2000 have them at &lt;KBD&gt;F&lt;/KBD&gt;/&lt;KBD&gt;J&lt;/KBD&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Essentially using the PC keyboard hardware.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-08T14:01:30.473" LastActivityDate="2020-03-08T14:01:30.473" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14057" PostTypeId="2" ParentId="14055" CreationDate="2020-03-07T19:38:41.173" Score="28" Body="&lt;p&gt;The official answer (at &lt;a href=&quot;https://support.apple.com/kb/TA34988?locale=en_US&quot; rel=&quot;noreferrer&quot;&gt;https://support.apple.com/kb/TA34988?locale=en_US&lt;/a&gt;) is that they pretty much made it up as they went along: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;At some time in Apple's history it was decided to put the &quot;bumps&quot; on the D and K keys while some other computer companies use the F and J keys. [...] Apple engineering has indicated there is no standard, such as ISO or ANSI that specifies which keys should have these &quot;bumps,&quot; or that they should have the &quot;bumps&quot; at all.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-03-07T19:38:41.173" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14058" PostTypeId="2" ParentId="14040" CreationDate="2020-03-07T20:07:00.640" Score="8" Body="&lt;p&gt;The Sinclair QL also had two RS232C ports which used an unusual combination of a ASIC (ZX8302) and Intel 8049 to provide two physical ports (with non standard connectors) but could not be used independently. The two ports were nominally for printer and modem use, but during development the built in modem of the QL was dropped, but the case retained the physical connectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;“The one really bad bit of cost-cutting I did was trying to squeeze two serial ports out of one,” David Karlin concedes. “That was not a sensible thing to do, and we should have just said it had one serial port. It was only one serial port, so the two we claimed had to be multiplexed and that was seriously not a good idea&quot;&#xA;&lt;a href=&quot;http://www.theregister.co.uk/AMP/2014/01/12/archaeologic_sinclair_ql/&quot; rel=&quot;noreferrer&quot;&gt;http://www.theregister.co.uk/AMP/2014/01/12/archaeologic_sinclair_ql/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20060504000555/http://www.staff.uni-mainz.de/roklein/ql/Hardware&quot; rel=&quot;noreferrer&quot;&gt;https://web.archive.org/web/20060504000555/http://www.staff.uni-mainz.de/roklein/ql/Hardware&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.dilwyn.me.uk/gen/serial/serial.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.dilwyn.me.uk/gen/serial/serial.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13617" LastActivityDate="2020-03-07T20:07:00.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14059" PostTypeId="2" ParentId="14051" CreationDate="2020-03-08T02:09:57.527" Score="16" Body="&lt;p&gt;As discussed and linked &lt;a href=&quot;https://retrocomputingforum.com/t/commodore-basic-renumbering-program-representation/1023?u=cjs&quot; rel=&quot;noreferrer&quot;&gt;in this thread&lt;/a&gt;, Norbert Landsteiner has&#xA;written a series of blog posts on &lt;code&gt;masswerk.at&lt;/code&gt; that cover  Commodore&#xA;BASIC V2 internal program and data representation in detail and giving&#xA;some code to do renumbering of BASIC programs and other interesting&#xA;things. (He does this on a PET with v2 ROM; C64 is substantially&#xA;similar but see my further notes below.)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.masswerk.at/nowgobang/2020/commodore-basic-renumber&quot; rel=&quot;noreferrer&quot;&gt;BASIC (Re)Numbering — with Commodore&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.masswerk.at/nowgobang/2020/commodore-basic-variables&quot; rel=&quot;noreferrer&quot;&gt;BASIC Variables &amp;amp; Strings - with Commodore&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.masswerk.at/nowgobang/2020/pet2001-10line-canonrun&quot; rel=&quot;noreferrer&quot;&gt;Writing a PET 2001 Ten-Line Cañon Run Video Game&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;His first article gives some excellent diagrams and breakdowns of the&#xA;binary format. The program lines are stored as a linked list with the&#xA;link to the next address in the first two bytes, the line number in&#xA;the following two bytes, and then the line text and tokens followed by&#xA;a zero byte:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2cB3N.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2cB3N.png&quot; alt=&quot;linked list&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The full breakdown of the first line of his sample program is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/L6kgs.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/L6kgs.png&quot; alt=&quot;10 PRINT &amp;quot;NUMBER&amp;quot;;:INPUT A&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole series is well worth reading; you'll learn a &lt;em&gt;lot&lt;/em&gt; about the&#xA;internal formats and the tricks you can play with them.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Pointers to BASIC Data Structures&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Landsteiner's examples are done on a PET with V2 ROMs, but the VIC-20&#xA;and the C64 also use V2 BASIC are substantially similar, except for&#xA;the zero page locations, given below. You'll have noticed that the&#xA;start address of BASIC (program) text in his examples above is $401&#xA;whereas in your C64 it's $801; this is actually variable not only&#xA;across models but within a particular model (for example, on the&#xA;VIC-20 it depends on whether and how the memory has been expanded).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So rather than using a fixed location, you and your programs should&#xA;always use the value in the &lt;code&gt;TXTTAB&lt;/code&gt; pointer from the zero page. You&#xA;should do the same for the start locations of other areas used by&#xA;BASIC as well. Landsteiner provides the details of these:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;label    loc.hex   loc.dec  description&#xA;&#xA;• C64 and VIC-20&#xA;TXTTAB  002B-002C   43-44   Pointer: Start of BASIC Text&#xA;VARTAB  002D-002E   45-46   Pointer: Start of BASIC Variables&#xA;ARYTAB  002F-0030   47-48   Pointer: Start of BASIC Arrays&#xA;STREND  0031-0032   49-50   Pointer: End of BASIC Arrays (+1)&#xA;FRETOP  0033-0034   51-52   Pointer: Bottom of String Storage&#xA;FRESPC  0035-0036   53-54   Utility String Pointer&#xA;MEMSIZ  0037-0038   55-56   Pointer: Highest Address Used by BASIC&#xA;&#xA;• PET 2001 ROM 2.0 (&quot;new ROM&quot;)&#xA;TXTTAB  0028-0029   40-41   Pointer: Start of BASIC Text&#xA;VARTAB  002A-002B   42-42   Pointer: Start of BASIC Variables&#xA;ARYTAB  002C-002D   44-45   Pointer: Start of BASIC Arrays&#xA;STREND  002E-002F   46-47   Pointer: End of BASIC Arrays (+1)&#xA;FRETOP  0030-0031   48-49   Pointer: Bottom of String Storage&#xA;FRESPC  0032-0033   50-51   Utility String Pointer&#xA;MEMSIZ  0034-0035   52-52   Pointer: Highest Address Used by BASIC&#xA;&#xA;• PET 2001 ROM 1.0 (&quot;old ROM&quot;)&#xA;TXTTAB  007C-007D  124-125  Pointer: Start of BASIC Text&#xA;VARTAB  007E-007F  126-127  Pointer: Start of BASIC Variables&#xA;ARYTAB  0080-0081  128-129  Pointer: Start of BASIC Arrays&#xA;STREND  0082-0083  130-131  Pointer: End of BASIC Arrays (+1)&#xA;FRETOP  0084-0085  132-133  Pointer: Bottom of String Storage&#xA;FRESPC  0086-0087  134-135  Utility String Pointer&#xA;MEMSIZ  0088-008A  136-137  Pointer: Highest Address Used by BASIC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;TXTTAB is none other than our old friend, the start of BASIC.&lt;/li&gt;&#xA;  &lt;li&gt;VARTAB is the start of the variable space. It follows immediately&#xA;  after the end of the program in memory (the final empty line-link.)&#xA;  Simple variables are stored here. Each variable occupies 7 bytes of&#xA;  memory, regardless of the type. ARYTAB points to the next available&#xA;  space.&lt;/li&gt;&#xA;  &lt;li&gt;ARYTAB is (also) the beginning of the space allocated for array&#xA;  storage. It points to the location following immediately after the&#xA;  last byte allocated for simple variables. Note: Since arrays are&#xA;  stored directly above simple variables, adding a new simple variable&#xA;  requires all arrays to be moved in memory in order to provide the&#xA;  required space!&lt;/li&gt;&#xA;  &lt;li&gt;STREND is the lower end of the space used for storing string&#xA;  literals. (Strings grow from top to bottom.) This is also the&#xA;  beginning of any free memory, which hasn’t been allocated yet,&#xA;  between the array space and any stored string literals. FRETOP marks&#xA;  the top end of the unallocated memory, below the last allocated&#xA;  string.&lt;/li&gt;&#xA;  &lt;li&gt;FRESPC Is a utility pointer used internally by BASIC. It is not&#xA;  directly involved in variable management, but used for string&#xA;  handling (scratch space, etc).&lt;/li&gt;&#xA;  &lt;li&gt;MEMSIZ is the top address of accessible memory. Strings start&#xA;  growing down from here.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can find the full set of C64 zero page locations and the purposes&#xA;in the &quot;Commodore 64 Memory Map&quot; section starting on &lt;a href=&quot;https://archive.org/details/Commodore_64_Programmers_Reference_Guide_1983_Commodore/page/n324/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;page 310 of the&#xA;Comodore 64 Programmer's Reference Guide&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-03-08T02:09:57.527" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14060" PostTypeId="2" ParentId="14055" CreationDate="2020-03-08T13:44:43.483" Score="4" Body="&lt;p&gt;I learned to touch type while doing my service in the Swedish Air Force. We were trained to use D and K as home keys for left and right middle finger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was in 1989, and it was a standard in Sweden in touch typing courses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I checked on two keyboards (all swedish variant):&#xA;my LK201 keyboard: no marking on dfjk while the ibm type M at f and j.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Runes datormuseum has a picture of a &lt;a href=&quot;http://www.pc-museum.com/luxor/abc99-big.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;ABC99 keyboard&lt;/a&gt; which is a mid 80s swedish made computer keyboard for the ABC1600 unix machine, this kbd has a small marking on F &amp;amp; J, so i wonder if it really was swedish made or if it was sourced from Japan for example.&lt;/p&gt;&#xA;" OwnerUserId="15497" LastEditorUserId="15497" LastEditDate="2020-03-08T14:02:36.357" LastActivityDate="2020-03-08T14:02:36.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14061" PostTypeId="1" CreationDate="2020-03-08T18:19:17.943" Score="10" ViewCount="1621" Body="&lt;p&gt;I am developing some software for the Commodore 64, and my intention is to use the 1541 as a coprocessor. I'll have the 1541 compute some data for me, and then retrieve this data over the serial line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that the KERNAL routines have earned themselves a reputation for being very slow. I couldn't find any information about exactly how slow though! So what I want as some concept of the relationship between the transfer of X bytes, and knowing how much raster time approximately needs to elapse to transfer this amount of data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless I rethink my design, I will need to transfer a payload of around 40 bytes per frame. If I use the KERNAL routines, what kinds of speeds can I anticipate?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="11916" LastEditDate="2020-03-09T07:23:56.640" LastActivityDate="2020-03-11T20:38:47.273" Title="How fast are transfers between the C64 and the 1541 floppy drive?" Tags="&lt;commodore-64&gt;&lt;disk-drive&gt;&lt;data-transfer&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14062" PostTypeId="2" ParentId="14061" CreationDate="2020-03-08T18:29:03.337" Score="12" Body="&lt;p&gt;Without any modification &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore 64 Serial Bus&lt;/a&gt; operates at 3200 bit/s (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Effective maximum speed for C64+1541 is about &lt;a href=&quot;http://singularcrew.hu/idedos/perf.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;400 bytes/s&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sustained speed with turn around and alike is about 300 bytes/s.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I am developing some software for the Commodore 64, and my intention is to use the 1541 as a coprocessor. I'll have the 1541 compute some data for me, and then retrieve this data over the serial line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Cool. Has been done a few times. First I know of is from ~1984 when a friend used two of his 1541 to calculate a &lt;a href=&quot;https://en.wikipedia.org/wiki/Mandelbrot_set&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mandelbrot set&lt;/a&gt;, each doing alternating lines, while the C64 just transferred and displayed data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maximum application I've ever seen was two C64, with four drives each, hooked up to a PC. So eight 6502 calculating, two shoveling and one 8088 displaying :))&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Unless I rethink my design, I will need to transfer a payload of around 40 bytes per frame. If I use the KERNAL routines, what kinds of speeds can I anticipate?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That might not work. 40 bytes per frame means 40x60=2400 bytes/s or about eight times the 300 bytes/s such an application may get using the standard routines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A C128 with 1571 and burst mode my bring you there - well, or using a 1571 with a burst mode driver on the C64. Or as alternative using Jiffy-DOS. Both this might still be rather tight when it has to happen within screen frame timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, since you're already downloading an application to the 1541, you may want to look if there'S still enough space left to add a custom transfer routine - maybe using some of the user commands? Such a routine could work close around timing issues due video access/frame structure. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - This is the effective netto data rate. Counting speed on the Commodore Serial Bus isn't as easy as with regular serial, as timing changes a lot on what part of the protocol we look at. &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;This document&lt;/a&gt; is a good compilation of various information pices.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-11T20:38:47.273" LastActivityDate="2020-03-11T20:38:47.273" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14063" PostTypeId="2" ParentId="13927" CreationDate="2020-03-08T22:25:33.760" Score="5" Body="&lt;p&gt;With newlib it seems you have to explicitly state that you want to include the floating point formatter with a pragma, just add:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma printf %f&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to the source code. That way it will work with both sccz80 and zsdcc as the compiler. By default the integer converters are included.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;sccz80 does format detection, but this is only picked up the classic library. So if you want to use zsdcc and classic you'll have to specify them again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise for scanf the set of converters can be configured using &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma scanf converters&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There's some documentation on z88dk wiki here: &lt;a href=&quot;https://github.com/z88dk/z88dk/wiki/Classic--Pragmas#configuring-printf-and-scanf-converters&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/z88dk/z88dk/wiki/Classic--Pragmas#configuring-printf-and-scanf-converters&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16503" LastActivityDate="2020-03-08T22:25:33.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14064" PostTypeId="2" ParentId="14032" CreationDate="2020-03-08T22:34:25.893" Score="0" Body="&lt;p&gt;The other answers mention PS/2 and MCA but don't quite bring out the political dimension. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The history behind it is that when IBM came fairly late to the 16-bit PC market, populated with a wide variety of hardware architectures (all loosely based around the 8086, and unified by all being compatible with Digital Research CPM/86) they did so with an unusually open architecture - publishing the lot - (though asserting copyright on the BIOS, and selling MS/DOS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This successfully wiped out all the other x86 architectures, that couldn't become compatible with IBM PC BIOS and the expansion slot architecture. Pretty soon everything that wasn't an IBM PC was an IBM clone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a few years, (well into the 286 era to about the start of the 386) when the clones started out-selling the PCs, the IBM response was to close their system with the PS/2 and its MCA architecture. This time, perhaps because it was relatively closed, the strategy of bringing out a new architecture didn't work...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VESA was the clone maker's response ... to bypass the PS/2 and MCA closed architecture altogether, and to deliver equivalent performance by other means ... and presumably it was NEC's internal development that was proposed - and adopted - for the VESA standard. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At about the same time, PCI development was under way, but it was clear that it would take a while, and VESA had a couple of years market opportunity before PCI would be fully ready.&lt;/p&gt;&#xA;" OwnerUserId="6700" LastActivityDate="2020-03-08T22:34:25.893" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14065" PostTypeId="2" ParentId="14040" CreationDate="2020-03-09T02:29:03.047" Score="4" Body="&lt;p&gt;The NES with its multitap accessory is a potential answer, if you'll accept some logic in the accessory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NES controllers use a 1-bit serial protocol. The host strobes to begin a transfer, causing the joypad to load its current state into a shift register, and the host then clocks in 8 bits, each representing one of the 8 inputs. It's actually the CPU that does this, reading a single bit at a time, at whatever cadence that particular game's routine produces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The official multitap, the Four Score, permits four controllers to be connected. The programmer now strobes, just as they always did, but the multitap has a little extra logic. Having supplied the strobe to all connected joypads, when reading it'll:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;direct the first eight clocks to the first joypad;&lt;/li&gt;&#xA;&lt;li&gt;the second eight to the third joypad;&lt;/li&gt;&#xA;&lt;li&gt;use the third eight to provide the 8-bit value 0x10;&lt;/li&gt;&#xA;&lt;li&gt;supply the fourth eight to the second joypad;&lt;/li&gt;&#xA;&lt;li&gt;the fifth eight to the fourth joypad; and&lt;/li&gt;&#xA;&lt;li&gt;finally, clock out the 8-bit value 0x20.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So it's providing four serial inputs to one serial controller, with physical port selection occurring in a fixed round robin.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-03-09T02:29:03.047" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14066" PostTypeId="2" ParentId="14040" CreationDate="2020-03-09T05:02:03.357" Score="3" Body="&lt;p&gt;The Sinclair ZX81 had a single Uncommitted Logic Array (ULA) chip that controlled both the screen and the cassette port. Consequently, accessing the cassette (loading or saving) would cause stripes to appear on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also controlled the keyboard, causing the screen to flicker at each keypress, but the keyboard was built-in and so it doesn't count as an external port for the purpose of this question.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-03-09T05:02:03.357" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14067" PostTypeId="2" ParentId="14040" CreationDate="2020-03-09T08:55:39.610" Score="3" Body="&lt;p&gt;In the Commodore 16/116/Plus-4, the Cassette connector and the serial (floppy and printer) port are both implemented via the CPU's single built-in I/O port which can be accessed by code at addresses $0000/$0001 (the same port that is used for the bank switching logic in the C64). Most lines of the two interfaces use separate bits of that one 8-bit port, but one line is physically shared - Cassette Write Data Out and Serial Clock In.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, in the Plus/4 only, User Port data bit 2 is shared with the Cassette Sense line (which is used to determine if any key - though software cannot tell which one - on the tape recorder is currently pressed down).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, there is the usual sharing of lines between the keyboard and joystick that, as far as I know, all Commodore 8-bit systems use.&lt;/p&gt;&#xA;" OwnerUserId="16504" LastActivityDate="2020-03-09T08:55:39.610" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14068" PostTypeId="2" ParentId="14055" CreationDate="2020-03-09T11:30:40.770" Score="7" Body="&lt;p&gt;The bumps were on the &lt;kbd&gt;d&lt;/kbd&gt; and &lt;kbd&gt;k&lt;/kbd&gt; keys because these letters are touched by the longest fingers, which come into contact with the keyboard first if the hands are relaxed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Landing on the wrong key is recognised instantly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having to bend your three fingers on each hand, lifting up the thumbs to make room for letting the index fingers detect being in the right position takes more effort. Also leaning on the keyboard idling is keeping into contact with the middle fingers on the &lt;kbd&gt;d&lt;/kbd&gt; and &lt;kbd&gt;k&lt;/kbd&gt; keys, confirming correct placements while hand muscles are relaxed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This may not be a big effort, but if it is one you  have to sustain all day, it matters. Back in the day it was rumoured that Apple had its word processors tested by typists that were used to mechanical type writers. I can imagine they also had a voice in the decision of bumping the &lt;kbd&gt;d&lt;/kbd&gt; and &lt;kbd&gt;k&lt;/kbd&gt;.&lt;/p&gt;&#xA;" OwnerUserId="16505" LastEditorUserId="7946" LastEditDate="2020-03-09T23:08:34.587" LastActivityDate="2020-03-09T23:08:34.587" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14069" PostTypeId="2" ParentId="14025" CreationDate="2020-03-09T16:06:57.140" Score="2" Body="&lt;p&gt;WordStar for CP/M was extensively configurable by directly changing specific known locations in the executable (e.g. with the DDT tool and the SAVE command built into CP/M 2.2). As far as I know, at first this was supposed to be an in-house thing only; but end users, being ingenious, figured it out anyway. It was made official in later versions, and a configuration tool was included for doing it in a more intuitive way then by using a general-purpose debugger or hex editor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, back then, an application such as WordStar&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;was tiny by modern standards&lt;/li&gt;&#xA;&lt;li&gt;had to run on many systems which shared the same CPU and OS but differed markedly in peripherals, such as screens/terminals, printers, and disk drives&lt;/li&gt;&#xA;&lt;li&gt;only existed in a relatively small number of well-understood published versions, since you couldn't just use some quick online updating process to distribute new ones at-will.&lt;/li&gt;&#xA;&lt;li&gt;was written in assembly, so that a couple hours of skilled use of a disassembler and some brains could give you something reasonably similar to the original human-readable source code.&lt;/li&gt;&#xA;&lt;li&gt;was sold in pre-configured variants for several of the more common machines of the day&lt;/li&gt;&#xA;&lt;li&gt;had to work hard to conserve RAM space and CPU cycles, so that including a built-in &quot;preferences&quot; menu and/or a real configuration file parser was deemed wasteful&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;All of this added together lead to the method of configuration given above - hex-editing of the executable.&lt;/p&gt;&#xA;" OwnerUserId="16504" LastActivityDate="2020-03-09T16:06:57.140" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14070" PostTypeId="2" ParentId="14040" CreationDate="2020-03-09T18:23:59.853" Score="4" Body="&lt;p&gt;A second bite of the cherry: amongst others, the WD177x family are popular floppy controllers that were used in or with a variety of 8-bit machines including the MSX, the Acorn Electron and later models of the BBC Micro, the Oric and the TRS-80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are serial controllers because floppy drives provide a single data line, which the controller monitors for both timing and data in order to reassemble full bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controllers themselves have a single data input and no further selection logic, implying a single drive. However all of the machines I listed above support multiple drives. They do so through external electronics that selects which drive† is currently visible to the floppy controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They're therefore an example of a single serial port multipliexed to multiple physical connections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;† in practice, some of them technically allow multiple drives to be selected at once, but they'll just literally be wired together producing whatever electrical conditions result and inhibiting the controller's ability to read anything. So doing so is not desired behaviour.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-03-09T18:23:59.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14071" PostTypeId="1" CreationDate="2020-03-09T19:56:21.673" Score="8" ViewCount="694" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14061/how-fast-are-transfers-between-the-c64-and-the-1541-floppy-drive&quot;&gt;Since asking a similar question&lt;/a&gt;, which is really exclusively about using KERNAL to transfer between disk drive and computer, comments, answers and others hint at the fact that using the KERNAL really is not a good way to achieve what I'm after. &lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/questions/856/expand-scope-in-answer-or-stick-to-scope-limitation-of-original-question&quot;&gt;This gave rise to a meta discussion&lt;/a&gt;, the upshot of which is that we're better off with a separate Q&amp;amp;A to detail the other options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My requirements is that I need to have a usable amount of RAM available to me on the floppy drive so I can run a program on it. I should like to leave some time spare on the C64 also, because if the host computer spends the whole time transferring data, that would defeat the point ☺. In my case, I should need to transfer around 40 bytes per frame in the hostward direction, and a handful of bytes in the other direction per frame.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-03-10T04:05:51.843" Title="What are my options for fast bidirectional transfer between a C64 and a 1541?" Tags="&lt;commodore-64&gt;&lt;disk-drive&gt;&lt;data-transfer&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14072" PostTypeId="1" AcceptedAnswerId="14073" CreationDate="2020-03-06T21:18:02.307" Score="9" ViewCount="3590" Body="&lt;p&gt;I've noticed that most N64 cartridges don't have batteries, but about 12 of them do. According to a google search, the cartridges without batteries use EEPROM and the cartridges with batteries use SRAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If EEPROM doesn't require batteries why didn't all carts use them? The two theories I have right now are that either SRAM was cheaper or that SRAM supported larger saving sizes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're curious, here's a list of the 12 games that contain batteries:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1080 Snowboarding&lt;/li&gt;&#xA;&lt;li&gt;F-Zero X&lt;/li&gt;&#xA;&lt;li&gt;Harvest Moon 64&lt;/li&gt;&#xA;&lt;li&gt;The Legend of Zelda: Ocarina of Time&lt;/li&gt;&#xA;&lt;li&gt;Major League Baseball featuring Ken Griffey Jr.&lt;/li&gt;&#xA;&lt;li&gt;Mario Golf&lt;/li&gt;&#xA;&lt;li&gt;The New Tetris&lt;/li&gt;&#xA;&lt;li&gt;Ogre Battle 64: Person of Lordly Caliber&lt;/li&gt;&#xA;&lt;li&gt;Resident Evil 2&lt;/li&gt;&#xA;&lt;li&gt;Super Smash Bros&lt;/li&gt;&#xA;&lt;li&gt;WCW/NWO Revenge&lt;/li&gt;&#xA;&lt;li&gt;WWF: Wrestlemania 2000&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16508" OwnerDisplayName="Unknown" LastEditorUserId="11916" LastEditDate="2020-03-11T03:25:44.170" LastActivityDate="2020-12-23T04:51:20.100" Title="Why do N64 cartridges use 2 different technologies for saving to the cart?" Tags="&lt;game-cartridge&gt;&lt;nintendo-64&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14073" PostTypeId="2" ParentId="14072" CreationDate="2020-03-09T21:18:12.143" Score="8" Body="&lt;p&gt;Various claims have been made about this, mostly along the lines of &quot;SRAM is cheaper&quot; (and compared to flash RAM, it is).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the most credible reference I've seen explains that of the options available at the time, SRAM was the least expensive one that could still fit save data for those games. EEPROM was less expensive, but had a much smaller space available for saving data for each game. Some games (those twelve, presumably) needed to save more data than could fit in an EEPROM, and so they had to use the &lt;em&gt;more expensive&lt;/em&gt; SRAM option. Flash RAM was available as well and had even more storage than SRAM, but was also a lot more expensive than even that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;https://www.resetera.com/threads/psa-some-of-your-nintendo-64-save-game-files-may-be-at-risk.55211/page-3#post-21331175&quot; rel=&quot;noreferrer&quot;&gt;https://www.resetera.com/threads/psa-some-of-your-nintendo-64-save-game-files-may-be-at-risk.55211/page-3#post-21331175&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;N64 developers basically had 5 options for save storage:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;4kb EEPROM (512 bytes)&lt;br/&gt;&#xA;  16kb EEPROM (2048 bytes)&lt;br/&gt;&#xA;  256kb SRAM (32,768 bytes)&lt;br/&gt;&#xA;  256kb SRAM Controller Pak (32,768 bytes) (some 3rd party Paks had even more memory)&lt;br/&gt;&#xA;  1Mb FRAM (131,072 bytes)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;EEPROM was the cheapest to produce but a lot of developers moved to SRAM because they needed more storage for their save files. Most developers went with SRAM over the battery-less and much greater capacity Flash memory because they were already forking over $30 or more on production costs alone for the N64 cartridge (deja vu with the Switch right now) and Flash memory was extremely more expensive back in the day. Only a small list of games actually used FRAM like Paper Mario and Pokemon Stadium 2 for example.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="16497" LastEditorUserId="16497" LastEditDate="2020-03-09T21:23:57.567" LastActivityDate="2020-03-09T21:23:57.567" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14074" PostTypeId="2" ParentId="14072" CreationDate="2020-03-09T21:25:55.160" Score="2" Body="&lt;p&gt;Cost would be the main factor.  Only 512 byte and 2048 byte EEPROM chips were used in Nintendo 64 cartridges, while the SRAM chips were much bigger at 32kB (32,768 bytes).  EEPROM at this size would've been too expensive.  Some Nintendo 64 cartridges used 128kB (131,072 byte) flash memory, but this would've been the most expensive option.&lt;/p&gt;&#xA;&lt;p&gt;Another factor might have been speed.  The EEPROM and flash memory are much slower when writing because of the need to erase the memory being written to before programming it. The EEPROM chip, and I assume flash chip, were connected serially which may have also slowed down accesses.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorUserId="7347" LastEditDate="2020-12-23T04:51:20.100" LastActivityDate="2020-12-23T04:51:20.100" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14075" PostTypeId="2" ParentId="14071" CreationDate="2020-03-09T21:27:59.767" Score="2" Body="&lt;p&gt;Here are some benchmarks:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RapiDOS Pro uses a special cable to achieve 13 KB/s&lt;/li&gt;&#xA;&lt;li&gt;Dolphin DOS achieves 8 KB/s&lt;/li&gt;&#xA;&lt;li&gt;JiffyDOS achieves 5.1 KB/s&lt;/li&gt;&#xA;&lt;li&gt;RapiDOS (non-Pro) achieves 3.4 KB/s&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you expand your question to a C128 with a 1571:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A C128 w/1571 with JiffyDOS achieves 5.7 KB/s&lt;/li&gt;&#xA;&lt;li&gt;A C128 w/1571 in Burst Mode achieves 5.2 KB/s&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="637" LastActivityDate="2020-03-09T21:27:59.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14076" PostTypeId="2" ParentId="14071" CreationDate="2020-03-09T21:32:43.217" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://www.c64-wiki.com/wiki/SJLOAD/SJLOAD.ASM&quot; rel=&quot;nofollow noreferrer&quot;&gt;SJLoad&lt;/a&gt; is a JiffyDos-compatible fast loader that goes faster by disabling the display; its per-byte loop is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ltransferbyte:&#xA;    nop     ; timing critical section&#xA;    nop&#xA;    nop&#xA;    nop&#xA;    lda #$03&#xA;    ldx #$23&#xA;    stx $dd00   ; data=active,clock=inactive,ATN=inactive&#xA;    bit $dd00&#xA;    bvc lloadinnerloop  ; branch if 1541 sets clock active (needs to load next block)&#xA;    nop&#xA;    sta $dd00   ; set data inactive&#xA;    lda $dd00   ; read bits 1/0&#xA;    nop&#xA;    lsr&#xA;    lsr&#xA;    eor $dd00   ; read bits 3/2&#xA;    bit $00     ; burn cycles&#xA;    lsr&#xA;    lsr&#xA;    eor $dd00   ; read bits 5/4&#xA;    bit $00     ; burn cycles&#xA;    lsr&#xA;    lsr&#xA;    eor $dd00   ; read bits 7/6&#xA;    eor #$03&#xA;    sta ($ae),y ; store byte&#xA;    inc $ae     ; load address lo&#xA;    bne ltransferbyte&#xA;    inc $af     ; load address hi&#xA;    jmp ltransferbyte&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I count that as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;nop, nop, nop, nop: 2+2+2+2 = 8&lt;/li&gt;&#xA;&lt;li&gt;lda #, ldx#: 2+2 = 4&lt;/li&gt;&#xA;&lt;li&gt;stx abs, bit abs: 4+4 = 8&lt;/li&gt;&#xA;&lt;li&gt;bvc, untaken: 2&lt;/li&gt;&#xA;&lt;li&gt;nop, sta abs, lda abs: 2+4+4 = 10&lt;/li&gt;&#xA;&lt;li&gt;nop, lsr, lsr: 2+2+2 = 6&lt;/li&gt;&#xA;&lt;li&gt;eor abs, bit zp, lsr, lsr: 4+3+2+2 = 11&lt;/li&gt;&#xA;&lt;li&gt;eor abs, bit zp, lsr, lsr: 4+3+2+2 = 11&lt;/li&gt;&#xA;&lt;li&gt;eor abs, eor imm: 4+2 = 6&lt;/li&gt;&#xA;&lt;li&gt;sta (ind), y: 6&lt;/li&gt;&#xA;&lt;li&gt;inc zp: 5&lt;/li&gt;&#xA;&lt;li&gt;bne, taken 255/256 of the time: 3 * (255/256) + 1 * (1/256) = 770/256&lt;/li&gt;&#xA;&lt;li&gt;inc zp, occurs 1/256 of the time: 5 * (1/256) = 5/256&lt;/li&gt;&#xA;&lt;li&gt;jmp abs, occurs 1/256 of the time: 3 * (1/256) = 3/256&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;= an average of 80 and 10/256 cycles per byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to transfer 40 bytes we're talking 3202 cycles, which is about 50.8 lines on the worst case of machines with a 63-cycle line length. That fits into the vertical border, even with setup costs, and appears to write fully-decoded bytes so there's no additional buffer processing. Supposing you lose 55 lines transferring bytes with a naive 'add ~10%' back-of-an-envelope guess and you're still looking at almost 80% of a frame being free for other tasks even on an NTSC machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my advice is: crib what you can from JiffyDOS as far as a transfer protocol goes, as it seems to match at least your performance requirements. &lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-03-09T21:32:43.217" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14077" PostTypeId="2" ParentId="14072" CreationDate="2020-03-09T21:35:46.463" Score="6" Body="&lt;p&gt;&lt;a href=&quot;http://micro-64.com/database/gamesave.shtml&quot; rel=&quot;noreferrer&quot;&gt;http://micro-64.com/database/gamesave.shtml&lt;/a&gt; lists three different methods of saving games on the Nintendo 64:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;EEPROM, 512 or 2048 Bytes&lt;/li&gt;&#xA;&lt;li&gt;battery-backed SRAM, 32 KBytes&lt;/li&gt;&#xA;&lt;li&gt;Flash, 128 KBytes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You'd have to analyse each games saving requirements to know why the designers chose which options, but the trade-offs between EEPROM and battery-backed SRAM in the late 90s basically were&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EEPROM&lt;/strong&gt;: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;requires no external battery, so cheaper for small capacities, i.e. when the game state fits in a couple of KB at most&lt;/li&gt;&#xA;&lt;li&gt;slow to write to (in the order of milliseconds, perhaps even 10s of milliseconds per byte) &lt;/li&gt;&#xA;&lt;li&gt;requires separate save routine&lt;/li&gt;&#xA;&lt;li&gt;prone to data corruption when powered off during write&lt;/li&gt;&#xA;&lt;li&gt;limited number of writes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;battery-backed SRAM&lt;/strong&gt;: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;cheaper &lt;em&gt;per Byte&lt;/em&gt;, but requires external battery, so cheaper if you need to save a large game state&lt;/li&gt;&#xA;&lt;li&gt;battery &quot;free&quot; (or rather, a sunk cost) when the game also includes a real-time clock&lt;/li&gt;&#xA;&lt;li&gt;can be included in the main memory map and used for in-game purposes (though I'm not sure the N64 did that; the 8- and 16-bit consoles did); no specific &quot;save&quot; needed in this case&lt;/li&gt;&#xA;&lt;li&gt;save fast, regular memory write&lt;/li&gt;&#xA;&lt;li&gt;unlimited number of writes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Flash probably replaced SRAM late it the system's life. &lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-03-09T21:35:46.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14078" PostTypeId="2" ParentId="14071" CreationDate="2020-03-10T04:05:51.843" Score="2" Body="&lt;p&gt;Without changing the hardware (via rewiring the IEC connector in the&#xA;C64 or using a different connector instead of or in addition to the&#xA;IEC connector) you have three basic options.&lt;/p&gt;&#xA;&lt;h3&gt;Kernal Routines&lt;/h3&gt;&#xA;&lt;p&gt;The KERNAL routines for communicating across the IEC bus (&lt;a href=&quot;https://archive.org/details/c64-programmer-ref/page/n295/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;TALK&lt;/code&gt;,&#xA;&lt;code&gt;TKSA&lt;/code&gt;, &lt;code&gt;ACPTR&lt;/code&gt;, etc.&lt;/a&gt;) are relatively slow for several&#xA;reasons. First, the routines themselves are not the most efficient.&#xA;This is not just code in the routines themselves that's not as&#xA;optimized as it could be, but also that you usually have to call&#xA;several different routines to do a full bus transaction for an&#xA;outgoing request and incoming data and they also do their bus&#xA;transactions in a way that's not always the most optimal way it could&#xA;be done. And on top of all this there are also the limitations of the&#xA;IEC protocol itself.&lt;/p&gt;&#xA;&lt;h3&gt;Custom IEC Protocol Routines&lt;/h3&gt;&#xA;&lt;p&gt;If you write your own routines to talk the IEC protocol, you can&#xA;optimize a few things. This will require a deep understanding of the&#xA;IEC protocol and probably the IEC communications portion of Commodore&#xA;DOS as well. &lt;a href=&quot;https://github.com/0cjs/sedoc/blob/master/8bit/cbm/serial-bus.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;My IEC bus notes&lt;/a&gt; provide a brief overview and&#xA;lots of references; the best one to start with is probably &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEC&#xA;disected&lt;/a&gt; [sic], particularly the reprint it contains of Jim&#xA;Butterfield's article from the July 1983 &lt;em&gt;Compute!&lt;/em&gt;, &amp;quot;How the VIC/64&#xA;Serial Bus Works.&amp;quot; &lt;a href=&quot;https://archive.org/details/Inside_Commodore_Dos_1984_Datamost/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Inside Commodore DOS&lt;/em&gt;&lt;/a&gt; is a good&#xA;reference for the DOS in the 1541 and similar drives, including their&#xA;internals.&lt;/p&gt;&#xA;&lt;p&gt;You need to allocate some sort of &amp;quot;endpoint address&amp;quot; for your code in&#xA;the drive so that you can talk to it. I can see three places this&#xA;could be done:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Try and piggyback on the DOS command channel (15) protocol, the one&#xA;to which you send commands like &lt;code&gt;SCRATCH:MYFILE&lt;/code&gt;. This seems overly&#xA;difficult and adds the most overhead.&lt;/li&gt;&#xA;&lt;li&gt;Use the drive's device number (typically 8 for the first drive),&#xA;but repurpose one of the &lt;a href=&quot;https://archive.org/details/Inside_Commodore_Dos_1984_Datamost/page/n15/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOS channel numbers&lt;/a&gt; for your own&#xA;use. Re-using 0, 1 or 15 would break DOS, but you could grab one of&#xA;the data communications channels between 2 and 14. That would make&#xA;it incompatible with programs trying to use that channel for I/O,&#xA;and also might add some overhead for the channel management.&lt;/li&gt;&#xA;&lt;li&gt;Allocate a new device number for your code. Adding, say, 12 to the&#xA;disk drive's device number would put your device number in the&#xA;generally-unused 16-30 range and you can then use any protocol you&#xA;like (within IEC limits) to talk to that device without worrying&#xA;about interference with other devices.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If you follow this last plan, you can optimize your IEC protocol speed&#xA;by making your system a pure command-response system: assert &lt;code&gt;A̅T̅N̅&lt;/code&gt;,&#xA;send a talk command to your device followed by the request data,&#xA;reverse the transfer direction on the bus, and immediately read the&#xA;response from your device. That's about as fast as bidirectional IEC&#xA;communications can be done. There are still a couple of issues that&#xA;will slow your communications here, though.&lt;/p&gt;&#xA;&lt;p&gt;The first is that &lt;em&gt;all&lt;/em&gt; devices on the bus must read and acknowledge&#xA;each byte of the command you send. The timing also dictates that you&#xA;must hold each data bit (individual bits are not ack'd, just bytes)&#xA;for 20 μs, and you can't reduce this this without potentially losing&#xA;other devices on the bus that need to keep up, so you end up being&#xA;limited to a transfer rate of a few kilobytes per second for your&#xA;outgoing command and data. Even worse, message setup and&#xA;acknowledgements have very lose timeouts, up to a second, so a very&#xA;slow device on the bus can delay messages drastically, even if you've&#xA;programmed the C64 and your device to be able to handle this quickly.&lt;/p&gt;&#xA;&lt;p&gt;The second is that, without blanking the screen, you are unable to&#xA;communicate during the &lt;a href=&quot;https://www.c64-wiki.com/wiki/raster_time&quot; rel=&quot;nofollow noreferrer&quot;&gt;badline interval&lt;/a&gt;, a 40 cycle period&#xA;occurring every eight raster lines (or even more often if you're using&#xA;tricks to get more colors) when the CPU is paused to allow the VIC-II&#xA;to read color memory. Data being read from the IEC bus by the C64 is&#xA;clocked by the device sending the data and acknowledged only every&#xA;eight bits, so if you're not available to read bits between the&#xA;acknowledgements they get lost. The standard C64 DOS works around this&#xA;by increasing the intra-bit delay to 60 μs, but that slows you down&#xA;even further.&lt;/p&gt;&#xA;&lt;p&gt;The only way around this that I can think of is to make your messages&#xA;short enough to be able to complete the transfer between badlines and&#xA;time them so that they start with enough time left before the badline&#xA;to complete. But even here, you still have the potential issue of&#xA;other devices on the bus slowing you down, as described above.&lt;/p&gt;&#xA;&lt;h3&gt;Custom Non-IEC Protocol&lt;/h3&gt;&#xA;&lt;p&gt;If you can guarantee that &lt;em&gt;all&lt;/em&gt; the devices on the IEC bus are running&#xA;your code (say, by making the user unplug any devices you're not&#xA;programming) you've got the flexibility to change to a protocol more&#xA;efficient than IEC and without its timing limitations.&lt;/p&gt;&#xA;&lt;p&gt;Your main set of constraints is the connections of the pins on the IEC&#xA;serial port itself. These are described (with a schematic) on &lt;a href=&quot;https://archive.org/details/C64-C64C_Service_Manual_1992-03_Commodore/page/n16/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 13&#xA;of the &lt;em&gt;C64/C64C Service Manual&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;S̅R̅Q̅I̅N̅&lt;/code&gt;: Input only. Connected to the &lt;code&gt;F̅L̅A̅G̅&lt;/code&gt; pin on CIA1 and thus&#xA;requires a separate read from all other lines (which are on CIA2),&#xA;though it can be programmed to generate an interrupt on the C64.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;GND&lt;/code&gt;: Ground. Obviously not usable for I/O.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;A̅T̅N̅&lt;/code&gt;: Output only, via CIA2 PA3.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;C̅L̅K̅&lt;/code&gt;: I/O via CIA2 PA6 and PA4.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;D̅A̅T̅A̅&lt;/code&gt;: I/O via CIA2 PA7 and PA5.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;R̅E̅S̅E̅T̅&lt;/code&gt;: Connected to the C64 reset line, and in practice not&#xA;usable for communications since asserting it resets the C64.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Supercat came up with the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14061/how-fast-are-transfers-between-the-c64-and-the-1541-floppy-drive#comment45046_14062&quot;&gt;brilliant suggestion&lt;/a&gt; of having&#xA;the C64 clock the data transfers &lt;em&gt;in&lt;/em&gt; to the C64 as well as out from&#xA;it; this solves a lot of timing problems, particularly the badline&#xA;one. Basically, so long as the device can keep up (which a 1571 ought&#xA;to be able to, since it has little it must do but communicate if you&#xA;program it appropriately) the C64 can clock data in and out at its&#xA;maximum rate, ignoring pauses for badline, interrupts or anything&#xA;else; the remote device will simply pause at the same time until the&#xA;C64 is ready again.&lt;/p&gt;&#xA;&lt;p&gt;Doing this, since you have three lines available and need only one&#xA;input for the data, you can also do bidirectional data transfers in a&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Serial_Peripheral_Interface&quot; rel=&quot;nofollow noreferrer&quot;&gt;SPI-like way&lt;/a&gt;: the other two lines become your clock and data&#xA;outputs. (&lt;code&gt;A̅T̅N̅&lt;/code&gt;, being output-only, must be used for either your clock&#xA;or your data output; the other line and data input can be assigned to&#xA;&lt;code&gt;C̅L̅K̅&lt;/code&gt; and &lt;code&gt;D̅A̅T̅A̅&lt;/code&gt; as you see fit.) The 1 kΩ pull-ups on all those lines&#xA;are fast enough that your speed here will be limited only by how fast&#xA;you can program the CPU to toggle those lines.&lt;/p&gt;&#xA;&lt;p&gt;I'd suggest using &lt;code&gt;D̅A̅T̅A̅&lt;/code&gt; for input from the device to the C64; because&#xA;it's read via bit 7 of the CIA2 PA register, there are some &lt;a href=&quot;http://www.wilsonminesco.com/6502primer/potpourri.html#Jeff&quot; rel=&quot;nofollow noreferrer&quot;&gt;tricks&#xA;you can use&lt;/a&gt; to maximize the speed at which you can do&#xA;CPU-driven I/O. Not all these tricks apply exactly; for example you&#xA;can't use an absolute-addressed &lt;code&gt;INC&lt;/code&gt; of memory to toggle the clock&#xA;because you don't have a serial port pin connected to bit 0 of a CIA&#xA;parallel register¹, so you'd need to substitute something like an &lt;code&gt;ADC&lt;/code&gt;&#xA;followed by an &lt;code&gt;STO&lt;/code&gt;. But there's still a lot you can do within the&#xA;limitations of your hardware arrangement. The details of this would&#xA;probably best be discussed in the &lt;a href=&quot;http://forum.6502.org/viewforum.php?f=2&quot; rel=&quot;nofollow noreferrer&quot;&gt;6502.org programming forum&lt;/a&gt;,&#xA;followed by a question and answer posted here once more of the details&#xA;have been hashed out.&lt;/p&gt;&#xA;&lt;p&gt;I'm not sure how fast you could actually get this going, but with the&#xA;badline and similar issues gone, bidirectional data transfers and some&#xA;clever programming I'd think you could burst your forty-byte transfers&#xA;at around 20 cycles per bit, allowing you to do a transfer in less&#xA;than a millisecond, giving you plenty of time during the 16.66 ms&#xA;frame to do other work.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;¹You could work around this by connecting the drive to the user&#xA;port on the C64, but that brings in its own host of issues. Still, it&#xA;would probably be possible, with a lot of care, to build a cable that&#xA;connects the drive to both and write your software in a way that&#xA;maintains compatibility with normal drive usage.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-10T04:05:51.843" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14079" PostTypeId="1" CreationDate="2020-03-10T04:15:23.677" Score="13" ViewCount="552" Body="&lt;p&gt;Someone was recently &lt;a href=&quot;https://www.ebay.com/itm/MOS-6502-Ceramic-CPU-Date-Code-0277-Used-in-Apple-1-Computer-/153828364766?nma=true&amp;amp;si=j7OhAVNU9wvRaGOKKt%252BSBlCvZd8%253D&amp;amp;orig_cvip=true&amp;amp;nordt=true&amp;amp;rt=nc&amp;amp;_trksid=p2047675.l2557&quot; rel=&quot;noreferrer&quot;&gt;selling an early MOS 6502 CPU on Ebay&lt;/a&gt; (date code 0277) in a ceramic package that had a couple of holes in it. You can see them clearly (under the tape, which presumably was not applied by MOS) in this image:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/e8Zjo.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/e8Zjo.jpg&quot; alt=&quot;MOS 6502 package with holes&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Another chip I've seen with the same holes is the early '70s 40-pin communications chip used on the I/O board and in the communications interface of the &lt;a href=&quot;https://en.wikipedia.org/wiki/MCM/70&quot; rel=&quot;noreferrer&quot;&gt;MCM/70&lt;/a&gt; (an 8008-based computer) &lt;a href=&quot;http://vintagecomputer.ca/the-micro-computer-machines-mcm-70-the-canadian-holy-grail-of-computing-history/&quot; rel=&quot;noreferrer&quot;&gt;seen here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0Xvtk.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0Xvtk.jpg&quot; alt=&quot;SMC COM 2601&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Why were these holes there, and how were they used?&lt;/p&gt;&#xA;&lt;p&gt;(Side note: it's &lt;a href=&quot;https://www.applefritter.com/comment/88500#comment-88500&quot; rel=&quot;noreferrer&quot;&gt;been pointed out&lt;/a&gt; that the auction description is probably not correct about this being used in any original Apple 1s.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-28T09:29:37.857" Title="Why did some MOS 6502 packages have holes in them?" Tags="&lt;6502&gt;&lt;chip&gt;" AnswerCount="0" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14082" PostTypeId="1" CreationDate="2020-03-10T13:37:16.383" Score="1" ViewCount="1520" Body="&lt;p&gt;I thought that punched cards already represent the code in binary since a hole means &lt;code&gt;0&lt;/code&gt; and rest positions mean &lt;code&gt;1&lt;/code&gt; on a punched card. But then I read that you could use punched cards to present the Cobol or Fortran codes. I also noticed that there are always 2 holes per column on a punched card. Such things have confused me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/08Rui.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/08Rui.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were the punched cards really binaries, or some sort of assemblers were needed to convert the input provided by punched cards to machine code?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I am particularly interested in knowing the oldest way of providing input to computers using punched-cards.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="16521" LastEditorUserId="16521" LastEditDate="2020-03-10T15:08:05.537" LastActivityDate="2020-03-11T13:30:07.590" Title="How binaries are generated using Punched cards?" Tags="&lt;assembly&gt;&lt;punched-cards&gt;" AnswerCount="5" CommentCount="8" ClosedDate="2020-03-11T15:32:48.040" ContentLicense="CC BY-SA 4.0" />
  <row Id="14083" PostTypeId="2" ParentId="14082" CreationDate="2020-03-10T13:53:05.210" Score="5" Body="&lt;p&gt;Punched cards generally contained human-readable source code or data. In combination with computers, they were pretty much exclusively used as a data entry (as opposed to data storage) medium. You can find an example of the encoding used in the section &quot;IBM 80-column punched card format and character codes&quot; of the Wikipedia article, &lt;a href=&quot;https://en.wikipedia.org/wiki/Punched_card&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Punched_card&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Binaries were typically stored on magnetic tape or paper tape, towards the end of the punch card era also on hard disks and (at the very end) floppy disks.  &lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-03-10T13:53:05.210" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14084" PostTypeId="2" ParentId="14082" CreationDate="2020-03-10T15:45:45.333" Score="4" Body="&lt;p&gt;&lt;strong&gt;Preamble&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We tend to use the word 'binary' in an odd way when talking about the content of computer storage.  Fundamentally, storage is always binary: zeroes and ones. But we talk about 'text files' when we mean files in which the zeroes and ones are supposed to be interpreted as making up characters which have meaning to humans (can be printed, etc.), and then files that are not text files get called 'binary' files, even though they're all binary really.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise, the holes in cards can mean 'binary' or 'text', though again it's all fundamentally hole or not-hole.  But the way the information is arranged is somewhat different between the two modes of operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Binary data on punch cards&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How binaries are generated using Punched cards?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From the 30,000 foot level, the principle is pretty much the same regardless of input device.  There are some 'marks' on a storage medium.  A special device (and its controller) knows how to convert those marks -- whether they're patterns of magnetization on a rotating disc, or charges in very small capacitors, or holes in paper -- into signal levels which represent ones and zeroes to a computer, and then to use those signal levels to write the ones and zeroes into memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a card, you typically end up with 80 columns x 12 rows of ones and zeroes stored in memory. What those ones and zeroes &quot;mean&quot; is system-dependent.  There are probably two &quot;modes&quot; in which cards may be interpreted: &quot;text&quot; mode in which each column is considered to be a character in some arbitrary encoding (usually one, two, or three holes per column), and &quot;binary&quot; mode, in which there's some defined more-or-less direct mapping between the holes in the card and words in memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the case of a 36-bit computer.  One possible arrangement for binary card files is to say that one card row, from columns 1 to 72, will hold two words of memory. Thus one card (12 columns) can hold 24 machine words, and there will be a convention that the controller and/or computer implements for transferring those words to memory.  Maybe top row, cols 1 to 36 to word N, top row cols 37 to 72 to word N+1, next row, cols 1 to 36 to word N+2, ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM 709/7090/7094 systems used this sort of arrangement.  Binary decks would be punched by compilers and loaders, and read in for exexcution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_711&quot; rel=&quot;nofollow noreferrer&quot;&gt;This Wikipedia article on the IBM 711 card reader&lt;/a&gt; describes the read-by-rows arrangement, two words per row.  'Row 9' is the bottom row of the card (from the top to the bottom, the rows are numbered 11, 12, 0, 1, … 9).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Can I feed the binaries to the computer directly?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes in general, though the details depend on what you're exactly arguing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may be able to boot the computer from cards, as part of the general mechanism of selecting an input device and executing the computer-specific boot procedure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IBM 701 (~1950s era) allowed this.  See for example &lt;a href=&quot;http://bitsavers.org/pdf/ibm/701/Buchholz_IBM_701_System_Design_Oct53.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article about the 701&lt;/a&gt;, on the page numbered 1273 -- it's a journal extract, not that big!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A boot deck would have to be punched precisely according to the hardware requirements. One card might well be enough for the bootstrap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you run a binary program from cards under an operating system?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depends on the OS, of course.  In general, yes. It's just bits, and it likely doesn't matter where the bits came from.  The only requirement is that the loader can handle sequential file input, since there's no going backwards and forwards on a card reader.  Offhand, I can't think I've ever tried this -- but I have known (now forgotten) of systems that supported punching out a program image, which is pretty pointless if you can't then run them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Text data on punch cards&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I also noticed that there are always 2 holes per column on a punched card. Such things have confused me.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Cards with 'fewer' holes are likely cards that are to be considered as text. There is one character punched per column, with each character encoded as 0 to 3 holes.  No holes is a space.  Roughly speaking, the code space is laid out like this: the digits are encoded as one hole, in rows 0 to 9 with the obvious meaning.  Letters are encoded as two holes, one of which is in row 11, 12, or 0, and the other in 1 through 9.  Other 'special' characters need 3 holes. You can see the encoding &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/029.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;on this page&lt;/a&gt; a little way down.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-03-11T13:30:07.590" LastActivityDate="2020-03-11T13:30:07.590" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14085" PostTypeId="2" ParentId="14082" CreationDate="2020-03-10T15:47:26.043" Score="0" Body="&lt;p&gt;The earliest use of punched cards for computing was not in what you'd nowadays call a computer, but in Hollerith tabulators and similar machines, which were the 1930s state of the art for business and scientific calculation.  They would be set to perform a particular operation, such as summing all the cards that were fed into them, or multiplying the values on one deck of card by those on another; then you had to set them up again for a different operation.  Some other early machines used punched paper tape, then primarily used in the telegraph industry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first computers did not have an assembly language.  Instead you got an operator's manual which informed you about how to punch the card or tape to produce a given operation from the machine.  So you entered machine code directly, after perhaps working it out using mnemonic code on paper, by hand.  Assembly language was eventually developed so that you could just enter the mnemonics, and let the machine itself take care of the translation to machine code.  Of course the machine code would vary between machines, often by a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The particular cards shown in the question have rows numbered from 0 to 9.  This indicates they contain decimal numeric data.  One of the two punches in each column is a numeric, and the other is probably a parity bit.  This suggests to me that they are cards for a Hollerith machine, not a computer.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-03-10T15:47:26.043" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14086" PostTypeId="2" ParentId="14082" CreationDate="2020-03-10T16:00:46.713" Score="1" Body="&lt;p&gt;Punched cards are not a &quot;binary&quot; or &quot;text&quot; format; like files in a Unix system they are simply streams of codes (albeit much smaller streams—80 codes per card if you read each column as a code). These can be interpreted as character codes as in a &quot;text file,&quot; as binary codes to be loaded and executed as in an &quot;executable file,&quot; as a sequence of decimal numbers, as some other kind of binary data, or anything else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If they are intended to be interpreted as text (e.g., lines of a program) typically the characters represented by the punched codes will be printed along the top. For cards not containing data intended to be interpreted as text, anything (or nothing) might be printed along the top; what is printed need not bear any relation to the codes. (Some, perhaps many, keypunch machines, however, would print only the characters for codes they punched.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even within a deck, interpretations of particular cards might be different, and done by different programs. Decks typically started with &quot;job control&quot; cards that used a job control language (&lt;a href=&quot;https://en.wikipedia.org/wiki/Job_Control_Language&quot; rel=&quot;nofollow noreferrer&quot;&gt;JCL&lt;/a&gt; being a famous one) to give instructions to the machine about what to do with subsequent cards, such as run an assembler or FORTRAN compiler on the data they contain, and where to send the output of that subsequent program.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-03-11T03:31:22.200" LastActivityDate="2020-03-11T03:31:22.200" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14087" PostTypeId="2" ParentId="14082" CreationDate="2020-03-10T17:54:05.870" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I thought that punched cards already represent the code in binary since a hole means 0 and rest positions mean 1 on a punched card.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Virtually &lt;em&gt;all&lt;/em&gt; computer data is stored or transmitted in &quot;binary&quot; at &lt;em&gt;some&lt;/em&gt; level. In order to interpret most data, you have to delve through multiple layers of meaning... multiple layers of &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Coding_theory&quot; rel=&quot;nofollow noreferrer&quot;&gt;codes&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you get to the lowest layers, you practically always find &lt;em&gt;binary&lt;/em&gt; data---patterns of high and low voltages, punched holes or not-holes on a card, magnetic domains on a disk platter---that can be understood as &quot;1s&quot; and &quot;0s.&quot;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But then I read that you could use punched cards to present the Cobol or Fortran codes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The patterns of holes and not-holes on a card can be interpreted as character &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Code_point&quot; rel=&quot;nofollow noreferrer&quot;&gt;code points&lt;/a&gt;&lt;/em&gt;--one code point in each column of the card. Sub-strings can be interpreted as &quot;tokens&quot; (words, numbers, special symbols). Strings of tokens can be interpreted as statements in Fortran or Cobol. It's all layers upon layers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One program--a &lt;em&gt;compiler&lt;/em&gt;--could read a stack of cards, and expect to interpret the data as a Fortran program. Another program--maybe an accounts payable system--could read a stack of cards, and expect them to represent rows in a database. Another program--the computer's boot loader--could read a stack of cards and expect to interpret the data as machine instructions to be loaded directly into RAM and then executed.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Were the punched cards really binaries, or...?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Were floppy disks really binaries? CD-ROMs? Thumb drives? Punched cards, like all of the above, are just a means of delivering data to a computer.  What the computer does with the data depends on what program reads the data, and on the layers of meaning that the program ascribes to the data.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I am particularly interested in knowing the oldest way of providing input to computers using punched-cards&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't know how to find that for you, but I'm pretty sure that all you have to do is find the oldest computer that could read punched cards, and ask how it read them.&lt;/p&gt;&#xA;" OwnerUserId="588" LastActivityDate="2020-03-10T17:54:05.870" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14088" PostTypeId="1" CreationDate="2020-03-10T18:28:39.553" Score="4" ViewCount="390" Body="&lt;p&gt;I'm trying to compile a C program with z88dk for the ZX Spectrum. Using &lt;code&gt;printf()&lt;/code&gt;, when the text hits the bottom line of the screen on line 24 the program stops executing until a key is pressed on the keyboard - but I need &lt;code&gt;printf()&lt;/code&gt; to not lock up waiting for a key to be pressed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The github page for z88dk states: &#xA;&quot;The screen scrolls when line 24 is &quot;hit&quot;, the routine used is in the 48k ROM.&quot;&#xA;Is this what I need to disable? Is this scroll routine being fired, and is this what waits for user input before continuing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In BASIC, the &quot;scroll?&quot; message can be disabled with &lt;code&gt;POKE 23692,n&lt;/code&gt; and printing behaves normally. I have tried to call &lt;code&gt;zx_bpoke(23692, 255);&lt;/code&gt; to try to disable the wait in C but this has no effect. How can I scroll without waiting for a keypress?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is &lt;code&gt;23692&lt;/code&gt; the right address to poke for the 48K ROM to disable the scroll key press routine?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &amp;lt;stdlib.h&amp;gt;&#xA;#include &amp;lt;z80.h&amp;gt;&#xA;int main() {&#xA;    for (int i = 0; i &amp;lt; 500; i++){&#xA;        printf(&quot;%d\n&quot;, i); //&amp;lt;-- will pause here until key is pressed when bottom of the screen is hit&#xA;        //attempt to disable this in the scroll routine&#xA;        z80_bpoke(23692, 255); //&amp;lt;-- doesn't work?&#xA;&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I compile with the command:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;zcc +zx -vn -startup=1 -clib=new -create-app main.c -o out&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;After line 23, the Spectrum waits for a key to be pressed, even when POKING at address 23692. Any help would be appreciated!&lt;/p&gt;&#xA;" OwnerUserId="16403" LastEditorUserId="7946" LastEditDate="2020-03-11T09:01:49.193" LastActivityDate="2020-03-11T09:01:49.193" Title="ZX Spectrum scroll waiting for user input problem" Tags="&lt;z80&gt;&lt;zx-spectrum&gt;&lt;c&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14089" PostTypeId="2" ParentId="14088" CreationDate="2020-03-10T19:13:52.753" Score="1" Body="&lt;p&gt;In ZX Spectrum basic, &lt;code&gt;POKE 23692,255&lt;/code&gt; works fine, when done every line to be printed -- the scroll becomes effectively infinite and never requests &quot;scroll?&quot;. Check that &lt;code&gt;printf()&lt;/code&gt; code does not fiddle with the 23692 value and that &lt;code&gt;z80_bpoke(23692, 255);&lt;/code&gt; really does what it is intended to do. Maybe &lt;code&gt;*((char *)23692)=0;&lt;/code&gt; would work instead?&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2020-03-10T20:12:35.390" LastActivityDate="2020-03-10T20:12:35.390" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14090" PostTypeId="2" ParentId="14072" CreationDate="2020-03-10T20:57:54.243" Score="1" Body="&lt;p&gt;The NES has 2KB of built-in RAM.  EEPROM on a cartridge could store &quot;game-save&quot; data with power off, but was slow to access.  Battery-backed RAM (8KB in all cartridges I know of--not 32KB) could be used not only to store game-state data, but could also be used as an extension to the 2KB of RAM in the system.  Some cartridges that didn't need to hold game state with power off used 8K of non-battery-backed RAM to extend the amount of fast-access storage available during a game.  If a cartridge would need expansion RAM anyway, and if there was enough space in the expansion RAM to hold &quot;game-save&quot; data, adding a battery would be cheaper than adding an EEPROM separate from the RAM.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-03-10T20:57:54.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14091" PostTypeId="2" ParentId="14040" CreationDate="2020-03-10T21:00:45.440" Score="0" Body="&lt;p&gt;The Commodore SID chip has two paddle inputs; the C64 can support four paddles by multiplexing between the paddle ports on the first joyport and those on the second.  See &lt;a href=&quot;https://archive.org/details/C64-C64C_Service_Manual_1992-03_Commodore/page/n15/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/details/C64-C64C_Service_Manual_1992-03_Commodore/page/n15/mode/1up&lt;/a&gt; for more information [link courtesy cjs].&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2020-03-11T03:37:55.197" LastActivityDate="2020-03-11T03:37:55.197" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14092" PostTypeId="2" ParentId="14088" CreationDate="2020-03-10T21:52:15.347" Score="4" Body="&lt;p&gt;One of the complications with z88dk is that there are two libraries: classic and newlib. These days, a lot of the code is shared but there are two separate implementations of stdio and console drivers. The comment about &quot;ROM driver&quot; is referring to how classic scrolls the screen: it just calls address 3582 in ROM3 by default.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the compile line mention, uses newlib, and the console driver for startup=1 isn't the ROM printer so won't respond to a poke 23692,255, but a custom terminal driver. The behaviour of the terminal is controlled by an ioctl call disabling the IOCTL_OTERM_PAUSE flag:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdlib.h&amp;gt;&#xA;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &amp;lt;z80.h&amp;gt;&#xA;#include &amp;lt;sys/ioctl.h&amp;gt;&#xA;&#xA;int main() {&#xA;    // Disable waiting for input when the screen is scrolled&#xA;    ioctl(1, IOCTL_OTERM_PAUSE, 0);&#xA;&#xA;    for (int i = 0; i &amp;lt; 500; i++){&#xA;        printf(&quot;%d\n&quot;, i);&#xA;&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This information was taken from the following project issue: &lt;a href=&quot;https://github.com/z88dk/z88dk/issues/682#issuecomment-379526038&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/z88dk/z88dk/issues/682#issuecomment-379526038&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16503" LastEditorUserId="16503" LastEditDate="2020-03-10T22:03:17.420" LastActivityDate="2020-03-10T22:03:17.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14093" PostTypeId="2" ParentId="6529" CreationDate="2020-03-11T08:29:26.213" Score="1" Body="&lt;p&gt;In early nineties, after retirement of mainframe computers in Czechoslovakia, there were many powerful drum printers left in our computing center.&lt;/p&gt;&#xA;&lt;p&gt;If someone is interested how we managed to print files from IBM PC-XT on mainframe printers, we used &lt;a href=&quot;http://www.vitsoft.info/ecprint.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;ECPrint&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="16524" LastEditorUserId="7946" LastEditDate="2020-11-19T10:35:27.227" LastActivityDate="2020-11-19T10:35:27.227" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14094" PostTypeId="2" ParentId="1818" CreationDate="2020-03-11T09:30:59.657" Score="2" Body="&lt;p&gt;One option not mentioned yet, was that we did nothing and lived with the bug as it was.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="7095" LastEditDate="2020-03-11T12:37:01.557" LastActivityDate="2020-03-11T12:37:01.557" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14095" PostTypeId="2" ParentId="6529" CreationDate="2020-03-11T09:36:37.153" Score="2" Body="&lt;p&gt;I transfered my Apple II floppies to my Atari TT using the super-serial card in the Apple. I wrote a little program that would load sectors with the RWTS routine and use the monitor to hexdump over PR#1. On the TT a small GFA Basic program would get the data from the serial port, convert the hexcodes to binary and write it in a file. A transfer at 9600 took less than 10 minutes, voilà Apple II floppy image files. It took me few days to transfer all floppies that were worth transfering.&#xA;Later when I switched to PC and tried Applewin emulator I was quite happy that my image files worked perfectly.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastActivityDate="2020-03-11T09:36:37.153" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14096" PostTypeId="1" AcceptedAnswerId="14108" CreationDate="2020-03-11T20:00:26.040" Score="30" ViewCount="8010" Body="&lt;p&gt;My understanding is the CPU clock speed on the Intel 8088 in the IBM PC was selected as &lt;em&gt;4.77 MHz&lt;/em&gt; to simplify the design of the system. This despite the 8088 coming in two versions - &lt;strong&gt;5 MHz and 8 MHz&lt;/strong&gt;. Since later PC's routinely operated at higher clock speeds and typically up to the CPU's spec, I assume some cost savings was realized on the original PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What specific parts were able to be eliminated from the PC design by limiting the CPU clock rate? Can anyone approximate the cost savings by removing those parts?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4329" LastEditDate="2020-03-13T10:23:17.670" LastActivityDate="2020-03-15T18:17:29.683" Title="How much did IBM save by limiting the PC to 4.77 MHz?" Tags="&lt;ibm-pc&gt;&lt;cpu&gt;&lt;8088&gt;&lt;overclocking&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14097" PostTypeId="2" ParentId="14096" CreationDate="2020-03-11T20:45:28.663" Score="18" Body="&lt;p&gt;Quartz used in colour TVs such as 3.579545MHz or 14.31818MHz used to be much cheaper than other frequencies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was important for home computers and game consoles (8/16 bits), which used the same quartz for video and the CPU, keeping everything synchronous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was far less siginificant for rather expensive computers such as IBM PC which didn't need to produce NTSC compatible video (although CGA was NTSC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit :&#xA;this post : &lt;a href=&quot;http://dosmandrivel.blogspot.com/2009/03/ibm-pc-design-antics.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://dosmandrivel.blogspot.com/2009/03/ibm-pc-design-antics.html&lt;/a&gt;&#xA;tells that the reason was to save a quartz for CGA.&lt;/p&gt;&#xA;" OwnerUserId="1958" LastEditorUserId="1958" LastEditDate="2020-03-15T18:17:29.683" LastActivityDate="2020-03-15T18:17:29.683" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14098" PostTypeId="2" ParentId="14096" CreationDate="2020-03-11T21:17:47.830" Score="26" Body="&lt;p&gt;For many kinds of parts, there's a substantial gap between specified maximum/minimum timings and typical timings.  The 8088 specification requires that the clock be high for a minimum of 69 ns every cycle and low for a minimum of 118 ns.  Dividing a 14.3818 Mhz clock by three yields a high time of 69.5 ns and a low time of 139.1 ns, satisfying both requirements for up to 20 ns of timing uncertainty on the divide circuit, provided that one ensures that it is biased toward lengthening its output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If one were to divide a 15 Mhz clock by three while meeting specifications, the natural high time would be 66.7 ns, which would fall slightly short of the timing spec and the low time would be 133.3 ns, which would only tolerate about 15 ns of timing uncertainty.  There are ways one can slightly stretch a signal, but using a 14.3818 Mhz signal that can tolerate anywhere from 0 to 20 ns of stretching is cleaner than using a design that would require stretching the signal by at least 2.5 ns but not more than 15 ns.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="-1" LastEditDate="2020-03-14T19:36:18.970" LastActivityDate="2020-03-14T19:36:18.970" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14099" PostTypeId="1" AcceptedAnswerId="14100" CreationDate="2020-03-11T21:43:22.117" Score="35" ViewCount="3365" Body="&lt;p&gt;The &lt;a href=&quot;http://unicode.org/versions/Unicode13.0.0/&quot; rel=&quot;noreferrer&quot;&gt;Unicode 13.0.0 release notes&lt;/a&gt; mention among the symbol additions:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;214 graphic characters that provide compatibility with various home computers from the mid-1970s to the mid-1980s and with early teletext broadcasting standards&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which computers were these, that did not already have their character sets included in previous versions of the standard? What symbols were added?&lt;/p&gt;&#xA;" OwnerUserId="13904" LastActivityDate="2020-03-30T11:10:58.697" Title="What mid-1970s to mid-1980s home computers had their graphics characters added to Unicode 13?" Tags="&lt;video&gt;&lt;terminal&gt;&lt;font&gt;&lt;unicode&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14100" PostTypeId="2" ParentId="14099" CreationDate="2020-03-11T21:43:22.117" Score="39" Body="&lt;p&gt;The new additions mentioned are mostly to be found in the new &lt;a href=&quot;https://www.unicode.org/charts/PDF/Unicode-13.0/U130-1FB00.pdf&quot; rel=&quot;noreferrer&quot;&gt;Symbols for Legacy Computing block&lt;/a&gt; (PDF link) covering the 1FB00–1FBFF codepoint range. This block includes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a large number of &lt;code&gt;BLOCK SEXTANT&lt;/code&gt; characters like  &lt;code&gt;BLOCK SEXTANT-1236&lt;/code&gt; (&quot;The term 'sextant' refers to block mosaics divided into six parts.&quot; Also note because these definitions are new, these and the following sample characters therefore probably won't render on most machines yet.) &lt;/li&gt;&#xA;&lt;li&gt;a large number of partially, diagonally covered block characters e.g.  &lt;code&gt;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;various shading/fill symbols like  &lt;code&gt;UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK&lt;/code&gt; and  &lt;code&gt;INVERSE CHECKER BOARD FILL&lt;/code&gt; and  &lt;code&gt;LOWER LEFT TRIANGULAR MEDIUM SHADE&lt;/code&gt; and others&lt;/li&gt;&#xA;&lt;li&gt;&quot;character cell diagonals&quot; from  &lt;code&gt;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT&lt;/code&gt; to  &lt;code&gt;BOX DRAWINGS LIGHT DIAGONAL DIAMOND&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;miscellaneous other &quot;terminal graphic characters&quot; like  &lt;code&gt;LEFT HALF RUNNING MAN&lt;/code&gt; or  &lt;code&gt;WHITE UP-POINTING CHEVRON&lt;/code&gt; or  &lt;code&gt;LEFT AND RIGHT TRIANGULAR HALF BLOCK&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;ten &quot;segmented digits&quot; characters from  (&lt;code&gt;SEGMENTED DIGIT ZERO&lt;/code&gt;) to  (&lt;code&gt;SEGMENTED DIGIT NINE&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Two other retro-related symbols were added to a different, pre-existing &quot;Supplemental Arrows-C&quot; block:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt; &lt;code&gt;U+1F8B0 ARROW POINTING UPWARDS THEN NORTH WEST&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt; &lt;code&gt;U+1F8B1 ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.unicode.org/L2/L2019/19025-terminals-prop.pdf&quot; rel=&quot;noreferrer&quot;&gt;proposal for these characters&lt;/a&gt; (PDF) recounts that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A list discussion in April 2017 concerning the “PETSCII” character set, used in various forms by&#xA;  Commodore home computers ranging from the PET (1977) to the C128 (1985), led to the formation&#xA;  of an ad-hoc Terminals Working Group, which is responsible for this document.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The following machines were considered, as well as the Teletext and Minitel services:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Amstrad CPC (464, 664, 6128, etc.)&lt;/li&gt;&#xA;&lt;li&gt;Apple 8-bit computers (II, II Plus, IIe, IIc, III, and the 16-bit IIGS), including MouseText&lt;/li&gt;&#xA;&lt;li&gt;Atari 8-bit computers (400, 800, XL, XE) (“ATASCII”)&lt;/li&gt;&#xA;&lt;li&gt;Atari 16-bit computers (ST, STE, TT, Falcon), including the GEM windowing system&lt;/li&gt;&#xA;&lt;li&gt;Commodore 8-bit computers (PET, VIC-20, 64, 128) (“PETSCII”)&lt;/li&gt;&#xA;&lt;li&gt;Commodore Amiga (500, 1000, etc.)&lt;/li&gt;&#xA;&lt;li&gt;Mattel Aquarius&lt;/li&gt;&#xA;&lt;li&gt;MSX computers (Spectravideo SV-328, Yamaha YIS503II, Canon V-20, etc.)&lt;/li&gt;&#xA;&lt;li&gt;Oric computer series (Tangerine Computer Systems)&lt;/li&gt;&#xA;&lt;li&gt;RISC OS computers (Acorn, other ARM machines)&lt;/li&gt;&#xA;&lt;li&gt;Sinclair 8-bit computers (ZX80, ZX81, ZX Spectrum, and Timex Sinclair equivalents)&lt;/li&gt;&#xA;&lt;li&gt;Tandy TRS-80 computers (TRS-80 Model I, Model III, Model 4, Color Computer)&lt;/li&gt;&#xA;&lt;li&gt;Texas Instruments TI-99/4A&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(List taken directly from the proposal notes.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is some other interesting background in that L2/19-025 proposal document explaining various symbols that were considered but ultimately omitted from the specification.&lt;/p&gt;&#xA;" OwnerUserId="13904" LastActivityDate="2020-03-11T21:43:22.117" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14101" PostTypeId="2" ParentId="8768" CreationDate="2020-03-12T08:59:28.573" Score="2" Body="&lt;p&gt;Just as a FYI, prior to buying a handful of Apple ][s, our school programming lessons used marked cards. In essence these were similar to punched cards except that you used something like a 2B or 4B pencil rather than making a hole. This had the advantage that, when the inevitable syntax/programming errors were returned to you a &lt;strong&gt;&lt;em&gt;week later&lt;/em&gt;&lt;/strong&gt;, you could erase and reuse the cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ones we used were marked out for BASIC with, IIRC, sections for line numbers, key words and then the rest of the line: probably very similar to this one&lt;a href=&quot;https://i.stack.imgur.com/Rr8oH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Rr8oH.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6712" LastActivityDate="2020-03-12T08:59:28.573" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14102" PostTypeId="1" CreationDate="2020-03-12T10:05:13.080" Score="3" ViewCount="271" Body="&lt;p&gt;I have an Apple IIc with 128 KB of RAM, about half of which goes unused. Since the IIc has only one drive, it would be convenient to use some of that unused RAM as a RAM disk. I know that this is available for ProDOS, but I use DOS 3.3. (And no, for various reasons I do not wish to switch to ProDOS.) Is there any RAM disk software or support currently available for DOS 3.3 systems?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="382" LastEditDate="2020-03-12T17:15:22.403" LastActivityDate="2020-03-13T00:12:08.600" Title="Is there any RAM disk software available for Apple II DOS 3.3?" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14103" PostTypeId="2" ParentId="14044" CreationDate="2020-03-12T16:52:43.590" Score="0" Body="&lt;p&gt;Bad sync signal stopped being an issue when NEC introduced MultiSync, around 1989. Other monitor makers followed soon afterwards. &lt;/p&gt;&#xA;" OwnerUserId="6825" LastActivityDate="2020-03-12T16:52:43.590" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14104" PostTypeId="1" AcceptedAnswerId="14112" CreationDate="2020-03-12T20:46:48.297" Score="5" ViewCount="629" Body="&lt;p&gt;I'm considering installing two graphics cards in my retro gaming setup (one AGP and one PCI) and was wondering if there are any drawbacks to doing so?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main things I'm thinking about are power requirements (I guess a card will draw little to no power when not in use?) and driver considerations - having nVIDIA and 3dfx drivers installed at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two cards are a Voodoo3 2000 and a GeForce2 MX and the other specs are a 900MHz Athlon, 256MB PC133, Soundblaster AWE64 Gold, 1x IDE HDD and a CD-ROM drive, with a 250 watt FSP power supply (20A on 3.3V, 25A on 5V, 14A on +12V and 0.4A on -12V).&lt;/p&gt;&#xA;" OwnerUserId="15985" LastActivityDate="2020-03-13T19:29:20.283" Title="Two graphics cards for retro gaming" Tags="&lt;graphics&gt;&lt;gaming&gt;&lt;power&gt;&lt;driver&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14105" PostTypeId="2" ParentId="14104" CreationDate="2020-03-12T21:57:04.420" Score="1" Body="&lt;p&gt;That's tricky. PC video cards had to be compatible with old CGA/MGA/EGA/VGA standards over ISA which didn't offer plug and play and remapping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your two video cards may be incompatible, conflicting over accesses to registers, for example the palette or Video RAM in A0000.&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2020-03-12T21:57:04.420" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14106" PostTypeId="1" CreationDate="2020-03-12T22:31:46.170" Score="3" ViewCount="271" Body="&lt;p&gt;I have an original NES from England that I bought in the early 90s. I just found it again in the attic, and I want to hook it up and start playing it again. However, I now live in the USA and it's region locked. Is there any way around this?&lt;/p&gt;&#xA;" OwnerUserId="16532" LastEditorUserId="6510" LastEditDate="2020-03-13T01:39:12.027" LastActivityDate="2020-03-15T09:38:05.620" Title="Original NES from UK, that I want to work in the US" Tags="&lt;nintendo&gt;&lt;nes&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14107" PostTypeId="2" ParentId="14106" CreationDate="2020-03-12T23:01:49.370" Score="5" Body="&lt;p&gt;There are two critical differences between an NES made for the UK versus one for the US: the CIC chip and the video output. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CIC chip is designed to forcibly reset the system any time there isn't a cartridge with a proper matching CIC chip in the slot, but the system can easily be modified to eliminate for a matching CIC chip (or any CIC chip for that matter) in the cartridge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The video output of a UK NES will be PAL format rather than NTSC.  Monitors which are just designed for use in the USA won't work with PAL signals, but some monitors will auto-detect PAL or NTSC and display either kind of signal just fine.  Unfortunately, I've not seen such dual-format capabilities advertised as a feature, so I don't know how to determine which ones would work.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="2123" LastEditDate="2020-03-15T09:38:05.620" LastActivityDate="2020-03-15T09:38:05.620" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14108" PostTypeId="2" ParentId="14096" CreationDate="2020-03-12T23:23:20.480" Score="33" Body="&lt;h2&gt;Worshipping at the altar of color clock&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Back in that day, &lt;em&gt;everything&lt;/em&gt; was built around the NTSC color clock frequency of 3.579545 MHz.  Everything from the Atari VCS to the C64 made ample use of it, because &lt;em&gt;some&lt;/em&gt; iteration of your product would inevitably need to talk to a commodity color NTSC display operating at that frequency.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will come up; so FYI the way you divide by 3.5 is by starting with a crystal at 4x the color clock (14.31818) and dividing by 14. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Atari VCS/2600 used 1.19 MHz -- color clock / 3 -- crystal / 12&lt;/li&gt;&#xA;&lt;li&gt;The Atari 400/800 used 1.79 MHz -- color clock / 2 -- crystal / 8&lt;/li&gt;&#xA;&lt;li&gt;Most of the rest used 1.022 MHz -- color clock / 3.5 -- crystal / 14&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;By &quot;rest&quot; I mean Apple II family, Commodore Pet, Vic, C64. &#xA;Note that most of these systems &lt;em&gt;actually overclocked the CPU&lt;/em&gt;. I can vouch that Apple did not use a 2 MHz version of the 6502 chip; they used the 1 MHz version. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The 8088 master clock operates at 4x RAM cycle speed&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Mind you, all these systems &lt;em&gt;above&lt;/em&gt; have one system clock per memory cycle.  The Intel philosophy was quite different, with a fast master clock, but memory fetches only occurring at 1/4 of this speed.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the IBM PC clock was chosen, still worshipping the color clock, at 4.77 MHz -- &lt;strong&gt;crystal / 3&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wow, that sounds fantastic, right? IBM, big gorilla of the computer biz, comes out with a processor &lt;em&gt;seemingly an order of magnitude faster&lt;/em&gt; than those clunky 1.02-1.79 MHz 6502 systems.  &lt;em&gt;Yeah, hold on.&lt;/em&gt; It has an 8-bit bus, and memory operations happened at 1/4 this frequency, at 1.19 MHz -- &lt;strong&gt;crystal / 12&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The IBM PC had the memory throughput &lt;em&gt;of an Atari 2600&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's not so awesome. Nor was it intended to be. IBM's market strategy was &lt;em&gt;not&lt;/em&gt; to be &quot;Amiga&quot;, outshining the competition in raw performance.  Much the opposite, they wanted to avoid at all costs cannibalizing sales of their larger and &lt;em&gt;much, much&lt;/em&gt; more expensive minicomputer line e.g. Series/1. The purpose of the IBM PC was to put &lt;code&gt;I B M&lt;/code&gt; on a conservatively designed system -- and let IBM's unbelievable reputation and market power sell it.  That can't be overstated - they had market dominance of (larger-than-Apple-II) computers like Google has dominance in search.  My dad was an IBM salesman, and there was an adage universally known:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;Nobody ever got fired for buying IBM&lt;/em&gt;. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Seriously. It was just like that.  If your mainframe or minicomputer project went sideways &lt;em&gt;for any of a variety of reasons&lt;/em&gt;, scuttlebutt is &quot;this wouldn't have happened if you had bought IBM&quot;. (even if that had nothing to do with it).  So the business desktop market was a vacuum, avoiding perfectly useful offerings by Tandy, Commodore and Apple, holding its breath for 3 magic letters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that to say, performance &lt;em&gt;was not&lt;/em&gt; Job One. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Why would IBM give any care at all about color clock?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;After all, it grew up as a &lt;em&gt;business machine&lt;/em&gt;; many systems actually used the Monochrome Display Adapter (which had much higher resolution than NTSC); many monitors were RGBI for which color clocks did not matter, and IBM's dabble in the home market with the PCjr was a fiasco.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;True, but &lt;em&gt;nobody knew that, at the time&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;IBM did not know what it would take for the PC to adopt.  But they certainly knew the &lt;em&gt;home&lt;/em&gt; computer market was proven. So they wanted to &quot;keep their options open&quot; for a side-step into the home market, where they MUST by necessity play nice with NTSC.  &lt;strong&gt;Costs must be kept low&lt;/strong&gt; in such a system - which means doing what everyone else does: sharing main RAM with the video card, which in turn requires memory &lt;em&gt;and therefore CPU clock&lt;/em&gt; to be in syncopation with NTSC color clock. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As such, choosing 1.19 MHz memory clock was a conservative, safe choice; as made by the Atari VCS/2600. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The choice of 4.77 MHz instead of 5 MHz only cost 4.5% performance&lt;/strong&gt;.  You can argue that they could have architected the system for 4.77 MHz and then just used a faster crystal in the 5150 PC (planning to downsize the crystal to 4.77 in the future imaginary consumer PC).  However, in that era, the prevailing view was &lt;strong&gt;if you change hardware, it &lt;em&gt;breaks existing software&lt;/em&gt;&lt;/strong&gt;, which as a rule were written to run on bare metal and software routines as-shipped. (think Apple's Sweet16 and FP routines, which were removed to fit AppleSoft BASIC).  So they wouldn't want to risk it for 4.5% performance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;They did end up doing that &quot;future imaginary consumer PC&quot; and making use of those concepts, but far past the time of its relevance (technical &lt;em&gt;or&lt;/em&gt; market).  Maybe they were thinking &quot;nobody ever got kicked out of bed for buying IBM&quot;. &lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2020-03-14T23:02:51.250" LastActivityDate="2020-03-14T23:02:51.250" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14109" PostTypeId="2" ParentId="14102" CreationDate="2020-03-13T00:12:08.600" Score="6" Body="&lt;p&gt;For many questions in the early days, the answer was Beagle Brothers. In this case &lt;a href=&quot;https://archive.org/details/Beagle_Bros-DiskQuik/&quot; rel=&quot;noreferrer&quot;&gt;DiskQuik&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;DiskQuik &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;DISK DRIVE EMULATOR by HARRY BRUCE and GENE HITE &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;(REQUIRES APPLE IIe WITH EXTENDED 80-COLUMN CARD) &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;AN IN-MEMORY &quot;DISK DRIVE&quot; &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;DiskQuik acts like a disk drive connected to Slot 3, but it is much&#xA;  faster,  quieter and more reliable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="71" LastActivityDate="2020-03-13T00:12:08.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14110" PostTypeId="1" AcceptedAnswerId="14111" CreationDate="2020-03-13T01:08:12.380" Score="4" ViewCount="231" Body="&lt;p&gt;In &lt;a href=&quot;http://www.bitsavers.org/www.computer.museum.uq.edu.au/pdf/EK-CR11-TM-004%20CR11-CM11%20Card%20Reader%20System%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this manual for the DEC CR11 card reader controller&lt;/a&gt;, the controller can deliver the card content to the PDP11 in either of two forms:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Column binary: the 12 rows of hole/no-hole are delivered in one 16-bit word&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compressed Hollerith: 5 rows are delivered as-is, and the other 7 (rows 1 to 7) are delivered as a 3-bit number, possible because there's supposed to be only one row punched of those 7. This results in one byte in memory for each column.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(See pages 4-5, 4-6)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The manual refers to the second mode as 'the proposed expansion of the Hollerith code'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What was this proposed code?  Who proposed it?  Was the proposal adopted?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked at the RSX-11M CR11 driver code and documentation. The manual documents 'binary' mode (exactly as the hardware) and 'ascii' mode, where the card is assumed to be in DEC026 or DEC029 code (very similar to IBM 026/029!) and translated to ASCII for the user program.  No Hollerith mode is documented.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The driver, however, seems prepared to support it. There's apparently a read modifier to request compressed-Hollerith mode directly. The compressed-Hollerith data also seems to be used for ASCII conversions, I would guess because it makes the translation tables more compact.  But I assume that the 11M driver takes advantage of compressed-Hollerith mode 'because it's there', rather than that being why it was put into the controller in the first place.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-03-13T01:54:35.407" LastActivityDate="2020-03-13T09:11:28.337" Title="What was the DEC CR11 card reader 'compressed Hollerith code' for?" Tags="&lt;history&gt;&lt;pdp-11&gt;&lt;punched-cards&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14111" PostTypeId="2" ParentId="14110" CreationDate="2020-03-13T02:24:51.617" Score="7" Body="&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What was the DEC CR11 card reader 'compressed Hollerith code' for?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It essentially allows to read arbitrary card data as distinct 8 bit values, as long they follow the 'Hollerith scheme' of decimal encoding marked up with zones.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long Read:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Compressed Hollerith: 5 rows are delivered as-is, and the other 7 (rows 1 to 7) are delivered as a 3-bit number, possible because there's supposed to be only one row punched of those 7. This results in one byte in memory for each column.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Exactly. This is true for all 256 EBCDIC encodings.&lt;/p&gt;&#xA;&lt;p&gt;Hollerith code means essentially that all punching is based on direct encoding of the basic decimal numbers 1..10(0), extended by the addition of 'zone' markings.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;No hole is space&lt;/li&gt;&#xA;&lt;li&gt;A single hole in 1..10 mark numbers&lt;/li&gt;&#xA;&lt;li&gt;A single hole in 11/12 is &lt;code&gt;-&lt;/code&gt;/&lt;code&gt;&amp;amp;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;A Single hole in column 10(0)/11/12 (as zone) plus one hole in 1..9 mark the basic uppercase letter.&lt;/li&gt;&#xA;&lt;li&gt;Multiple holes in 10/11/12 (as zone) plus one hole in 1..9 are added lower case and OCR/subscript numbers&lt;/li&gt;&#xA;&lt;li&gt;A Single hole in 10/11/12 plus a hole in 8 (all as zone *1) plus one hole in 1..7 added punctuations&lt;/li&gt;&#xA;&lt;li&gt;Multiple holes in 10/11/12 plus holes in 8, 9 or 8+9 (all as zone) plus one hole in 1..7 added the rest (*2)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So the 'compressed' encoding is able to gather all 256 possible encodings used in EBCDIC based punch cards, as well as such in ASCII - a fact unbeknown to many, there was an ASCII assignment for punch card with different encodings for some glyphs than IBM did for EBCDIC. They did differ in several later added characters, essentially everything after above step 5. Most control codes are defined different, but as well printable character. For example the curly brackets are on 10/12/8/3 and 11/12/8/3 on IBM EBCDIC while ASCII puts them on 10/12 and 10/11.&lt;/p&gt;&#xA;&lt;p&gt;This encoding was defined at at time even before ASCII got lower case. And beside being house encodings for a few machines, they never gained widespread use, as IBM compatible encoding was essential for data exchange.&lt;/p&gt;&#xA;&lt;p&gt;All of this is relevant when coming to the core question:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What was this proposed code? Who proposed it? Was the proposal adopted?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Hollerith code or &lt;em&gt;&amp;quot;Binary Coded Decimal Interchange Code&amp;quot;&lt;/em&gt; as it was called in the 60s by ASA's X4 committee(*3), is a synonym for all kinds of punch card encoding. Something that varied a lot between machines and manufacturers. Modern base is essential IBM's EBCDIC as it was defined for the /360. But it generally only guaranteed only 66 (above step 1..4) basic glyphs. Everything else was up to much machine and even application specific encoding. This includes as well all 64 control codes which - after all, on punch cards structure was not done by injecting control codes, but field length.&lt;/p&gt;&#xA;&lt;p&gt;While ASCII soon settled for a basic character set, EBCDIC did wobble for decades due the need to cover various previous encodings. Essentially it wasn't until the late 1980s when ASCII, going 8 bit with 8859, forced IBM to finalise assignment for all 256 codepoints.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Long story short: &lt;em&gt;'proposed expansion of the Hollerith code'&lt;/em&gt; simply means the ability to handle anything outside the basic 66 glyph by following the basic 'Hollerith' encoding scheme shown above.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Originally only 11/12 was named as zone, but already with the original 1932 Mills patent 10/11/12 was used. With the later extensions for punctuation and other characters 8/9 as well became zone.&lt;/p&gt;&#xA;&lt;p&gt;*2 - It gets quite confusing here as this area was originally filled with alternative characters depending on the 1401 printer train.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Here a whole set of history books could be added about IBM being a main proponent of ASCII, but at the same time being slowed down by other card manufacturers taking part in various &lt;a href=&quot;https://en.wikipedia.org/wiki/American_National_Standards_Institute&quot; rel=&quot;noreferrer&quot;&gt;ASA&lt;/a&gt; committees. While X3 (Committee for Computer and Information Processing) was focusing on a complete new code (which became ASCII), the X4 (Committee on Office Equipment) was punching for a Hollerith compatible encoding - whose proposed 8 bit encoding was &lt;em&gt;not&lt;/em&gt; like the later EBCDIC. And IBM danced on both parties - with a preference for ASCII but held back by Hollerith and most important developing the /360 right at that time of change.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-13T09:11:28.337" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14112" PostTypeId="2" ParentId="14104" CreationDate="2020-03-13T12:43:10.267" Score="7" Body="&lt;p&gt;With only a 250W power supply you may be pushing the limit with two video cards, but it's hard to be sure.  Neither of the video cards you're planning on using are particularly power hungry. I suspect nether comes with a fan, and the GeForce2 MX may not even have a heat sink. The PCI connector can only supply 25W and I believe the AGP 1.0 interface had the same limit, so this sets an upper limit on what these cards can use, but it's likely both cards used significantly less power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I assume you're using an ATX power supply, if necessary you can just replace it with a newer bigger one.  You'll have to look closely at the specs though, since modern supplies use the +12V rails to supply most of their power, and may actually supply less power through the +3.3V and +5V rails then what you're using now.  A modern supply with also lack -5V, but only really ancient hardware used it, nothing in your PC will need it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Drivers shouldn't be a problem, since the video cards are made by two different manufacturers.  Using two video cards from the same manufacturer often didn't work on Windows 98, but you should be fine with a 3dfx and a Nvidia card installed at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The VGA port conflict TEMLIB mentioned should't be a problem, as only the video card you designate as the primary video card in the BIOS setup will provide VGA backwards compatibility.  The secondary video card will have its VGA compatibility disabled.  The primary card will be the one that's used while booting, and it should be the one Windows 98 uses as the primary monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you're only using one monitor and since most games didn't give a choice of what display adapter to use, you'll probably have to select which video card you want to use by rebooting your PC and changing which video card is primary in the BIOS.  I'm not sure how Windows 98 multi-monitor support will deal with this.  Ideally it'll treat your secondary display as disabled, since it doesn't have a monitor connected to it.  If not you'll want to manually disable the second display, otherwise your mouse pointer will end up getting lost on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also run into Windows 98 needing to reconfigure things a startup after switching which video card is primary and asking you to reboot multiple times.  In that case I'd would just keep saying &quot;no&quot; until all the pop ups are done and then rebooting just once. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I just did a quick check of using Windows 98 two video cards, an AGP Radeon 9550 and PCI Rage II+ and it worked fine as far as I tested.  I was able to use both simultaneously, though I had to manually enable the Rage II+ as a second monitor.  Despite being from the same manufacturer there were no driver conflicts, as they're from two very different generations.  I didn't test it with any games, as I only have DOS games installed on that PC.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2020-03-13T19:29:20.283" LastActivityDate="2020-03-13T19:29:20.283" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14113" PostTypeId="1" AcceptedAnswerId="14115" CreationDate="2020-03-13T14:21:29.980" Score="9" ViewCount="545" Body="&lt;p&gt;I know Mame works with &lt;em&gt;drivers&lt;/em&gt; for each game or hardware, and it checks for specific ROMs, and I guess it might check also for some checksum to verify the ROMs integrity.&lt;br&gt;&#xA;Is there some way you could program a game for the exact same hardware of a supported arcade game and make it work in MAME or any other arcade emulator?&lt;/p&gt;&#xA;" OwnerUserId="11431" LastActivityDate="2020-04-10T22:12:47.377" Title="Can you program an arcade game and have MAME or another emu run it?" Tags="&lt;programming&gt;&lt;rom&gt;&lt;arcade&gt;&lt;homemade&gt;&lt;mame&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14114" PostTypeId="2" ParentId="14022" CreationDate="2020-03-13T16:49:58.547" Score="2" Body="&lt;p&gt;I've written a small program that confirms that lines of text do tear if modified while being scanned. It's not easy to see (it would have been a large amount of extra work to do the exact sync that would make it really clear), but as it runs, amongst all the flickering you can see diagonal lines across the line of text where the line tears due to reading different characters over the course of the eight scans of the text line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the camera on my phone won't let me set the shutter speed to be able to capture this, but perhaps I'll be able to dig up one of my proper digital cameras later to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the meantime, here's the program listing as assembled by the Apple DOS 3.3 assembler, &lt;code&gt;EDASM&lt;/code&gt;. It's just a quick hack, so the code quality is far from the best. And I have no idea what it will do on an emulator.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;SOURCE FILE: SCANLINE&#xA;0000:            1 * SET HIMEM=36864 TO LEAVE $9000-$9600 FREE&#xA;----- NEXT OBJECT FILE NAME IS SCANLINE.OBJ0                 &#xA;9000:            2         ORG  $9000&#xA;9000:            3 *&#xA;00EB:            4 FILLBASE EQU $EB         ;POINTER TO LOCATIONS TO FILL&#xA;9000:            5 *&#xA;9000:            6 * SCREEN CODES FOR FILL&#xA;00A0:            7 CHR1    EQU  $A0         ;NORMAL ' '&#xA;0020:            8 CHR2    EQU  $20         ;INVERSE ' '&#xA;9000:            9 *&#xA;008D:           10 CR      EQU  $8D         ;ASCII CARRIAGE RETURN&#xA;9000:           11 *&#xA;FDED:           12 COUT    EQU  $FDED&#xA;FC58:           13 HOME    EQU  $FC58       ;CLEARS SCREEN&#xA;FCA8:           14 WAIT    EQU  $FCA8       ; EXPONENTIAL DELAY IN A&#xA;9000:           15 *&#xA;9000:20 58 FC   16 MAIN    JSR  HOME&#xA;9003:20 0A 90   17         JSR  INITLINES&#xA;9006:20 39 90   18         JSR  LOOPLINE    ;NEVER RETURNS&#xA;9009:60         19         RTS&#xA;900A:A9 8D      20 INITLINES LDA #CR&#xA;900C:20 ED FD   21         JSR  COUT&#xA;900F:20 ED FD   22         JSR  COUT&#xA;9012:20 ED FD   23         JSR  COUT&#xA;9015:A9 04      24         LDA  #$04&#xA;9017:85 EC      25         STA  FILLBASE+1&#xA;9019:A9 00      26         LDA  #$00&#xA;901B:85 EB      27         STA  FILLBASE&#xA;901D:A9 A0      28         LDA  #CHR1       &#xA;901F:20 5A 90   29         JSR  FILL        ;ROW 1 &#xA;9022:A9 80      30         LDA  #$80&#xA;9024:85 EB      31         STA  FILLBASE&#xA;9026:A9 20      32         LDA  #CHR2&#xA;9028:20 5A 90   33         JSR  FILL        ;ROW 2 &#xA;902B:A9 05      34         LDA  #$5&#xA;902D:85 EC      35         STA  FILLBASE+1&#xA;902F:A9 00      36         LDA  #$00&#xA;9031:85 EB      37         STA  FILLBASE&#xA;9033:A9 A0      38         LDA  #CHR1&#xA;9035:20 5A 90   39         JSR  FILL        ;ROW 3 &#xA;9038:60         40         RTS&#xA;9039:A9 04      41 LOOPLINE LDA #$04&#xA;903B:85 EC      42         STA  FILLBASE+1&#xA;903D:A9 80      43         LDA  #$80&#xA;903F:85 EB      44         STA  FILLBASE    ;ROW 2&#xA;9041:A9 A0      45 LOOP    LDA  #CHR1&#xA;9043:20 5A 90   46         JSR  FILL&#xA;9046:20 54 90   47         JSR  LWAIT&#xA;9049:A9 20      48         LDA  #CHR2&#xA;904B:20 5A 90   49         JSR  FILL&#xA;904E:20 54 90   50         JSR  LWAIT&#xA;9051:18         51         CLC&#xA;9052:90 ED      52         BCC  LOOP&#xA;9054:           53 *&#xA;9054:           54 * WAIT ABOUT, BUT NOT EXACTLY, 1 FRAME.&#xA;9054:A9 7B      55 LWAIT   LDA  #$7B        ;&amp;lt;1 FRAME&#xA;9056:20 A8 FC   56         JSR  WAIT&#xA;9059:60         57         RTS&#xA;905A:           58 * &#xA;905A:A0 28      59 FILL:   LDY  #40&#xA;905C:88         60 FILL1:  DEY&#xA;905D:91 EB      61         STA  (FILLBASE),Y&#xA;905F:D0 FB      62         BNE  FILL1&#xA;9061:60         63         RTS&#xA;&#xA;*** SUCCESSFUL ASSEMBLY: NO ERRORS&#xA;&#xA;   A0 CHR1             20 CHR2           FDED COUT             8D CR            &#xA; 905C FILL1            EB FILLBASE       905A FILL           FC58 HOME          &#xA; 900A INITLINES      9039 LOOPLINE       9041 LOOP           9054 LWAIT         &#xA;?9000 MAIN           FCA8 WAIT          &#xA;                                           20 CHR2             8D CR               A0 CHR1             EB FILLBASE      &#xA;?9000 MAIN           900A INITLINES      9039 LOOPLINE       9041 LOOP          &#xA; 9054 LWAIT          905A FILL           905C FILL1          FC58 HOME          &#xA; FCA8 WAIT           FDED COUT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-03-13T16:49:58.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14115" PostTypeId="2" ParentId="14113" CreationDate="2020-03-13T17:53:22.413" Score="9" Body="&lt;p&gt;Games have &quot;sets&quot; (AKA versions). The software changes but not the hardware. For instance Pengo set 2 is harder than set 1 and has a different music (to avoid lawsuits?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can &quot;mod&quot; an existing game, then ignore the checksums, you could run your own game. You would have messages like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;g8x_p6.bin   WRONG CHECKSUMS:&#xA;    EXPECTED: CRC(7e3471d3) SHA1(5997196c9ba3c4ee7d1b40105731e88fed501044)&#xA;       FOUND: CRC(403d01c1) SHA1(86109087b10c4fbcc940df6a84f7546de56303d2)&#xA;WARNING: the game might not run correctly.&#xA;Press any key to continue&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And then the game would run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of so-called &quot;bootlegs&quot; that were done in the days, including games running on another game hardware (games using Galaxian hardware aren't uncommon, like Frog, which was Frogger with a different, garish color palette and a title screen that lazily replaced three of the letters in the original title with frog sprites), or Crazy Otto, an unauthorized Pac-Man modification kit designed to freshen up the existing game and ended up as Mrs PacMan (source: &lt;a href=&quot;http://gamingafter40.blogspot.com/2009/07/coin-op-bootlegs.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://gamingafter40.blogspot.com/2009/07/coin-op-bootlegs.html&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some more recent work include graphic hacks (using a &lt;a href=&quot;http://umlautllama.com/projects/turacocl/&quot; rel=&quot;nofollow noreferrer&quot;&gt;freely available graphic ripping tool&lt;/a&gt;) to play Pac-Man with Pengo graphics (&lt;a href=&quot;https://www.csh.rit.edu/~jerry/arcade/age/#pengman&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.csh.rit.edu/~jerry/arcade/age/#pengman&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you coded your own game, you would choose a bootleg driver (unencrypted) for easier ROM generation and modify/create ROM files (code, graphics, sounds) named like the &quot;original&quot; ROM in the ROM .zip file. You would encounter the same limitations as the original driver (colors, number of sprites, CPU speed, RAM &amp;amp; ROM size...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early Z80/6502 games would be easy to mod/code a complete new game from their drivers, but the 16/32 bit ones would be a lot tougher because of the format of the graphical assets (sprites, images...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MAME also has a very good visual debugger, so it's a very comfortable environment to debug your game as well.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-04-10T22:12:47.377" LastActivityDate="2020-04-10T22:12:47.377" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14116" PostTypeId="1" AcceptedAnswerId="14117" CreationDate="2020-03-14T12:03:05.920" Score="19" ViewCount="3487" Body="&lt;p&gt;I've recently been teaching my 11 year old binary multiplication, which is on the UK maths syllabus at secondary school. We have used long multiplication, eg shift and add.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This has made me wonder about the Z80, which didn't have an integer multiply operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How was integer multiply performed my Z80 BASIC, eg Locomotive or Sinclair? Was it done by shifting the multiplicand by each bit of the multiplier and adding, or by repeated addition of the larger number? Was it optimised for efficiency or size? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ask about Z80 for simplicity, but if you know more about 8080 or 6502, I imagine there were similar strategies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feel free to post code samples from BASIC languages of the time. &lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2020-03-14T17:17:17.037" LastActivityDate="2020-05-05T19:23:22.283" Title="How did integer multiplication work in 8-bit BASIC without CPU support" Tags="&lt;z80&gt;&lt;basic&gt;&lt;6502&gt;&lt;8080&gt;" AnswerCount="4" CommentCount="15" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14117" PostTypeId="2" ParentId="14116" CreationDate="2020-03-14T13:10:29.313" Score="18" Body="&lt;p&gt;For Spectrum BASIC, the routine for Small Integers (16 bit) can be seen on page 179 of the Complete ZX Spectrum ROM Disassembly, where it loops over the sixteen bits of one operand, shifting them into the carry bit, adding successively doubling values to the result value each time the test passes, and testing for overflow if the result doesn't fit in a small integer.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Input&#xA;DE  First number (M)&#xA;HL  Second number (N)&#xA;Output&#xA;HL  M*N&#xA;HL_HLxDE    30A9    PUSH BC         BC is saved.&#xA;            30AA    LD B,$10        It is to be a 16-bit multiplication.&#xA;            30AC    LD A,H          A holds the high byte.&#xA;            30AD    LD C,L          C holds the low byte.&#xA;            30AE    LD HL,$0000     Initialise the result to zero.&#xA;HL_LOOP     30B1    ADD HL,HL       Double the result.&#xA;            30B2    JR C,HL_END     Jump if overflow.&#xA;            30B4    RL C            Rotate bit 7 of C into the carry.&#xA;            30B6    RLA             Rotate the carry bit into bit 0 and bit 7 into the carry flag.&#xA;            30B7    JR NC,HL_AGAIN  Jump if the carry flag is reset.&#xA;            30B9    ADD HL,DE       Otherwise add DE in once.&#xA;            30BA    JR C,HL_END     Jump if overflow.&#xA;HL_AGAIN    30BC    DJNZ HL_LOOP    Repeat until 16 passes have been made.&#xA;HL_END      30BE    POP BC          Restore BC.&#xA;            30BF    RET             Finished.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For larger floating point numbers (which the result is promoted to if the multiplication result overflows a small integer, or if either operand is already floating point), the full five byte floating point multiplication routine follows on page 180.&lt;/p&gt;&#xA;" OwnerUserId="16540" LastEditorUserId="8230" LastEditDate="2020-03-15T10:38:43.250" LastActivityDate="2020-03-15T10:38:43.250" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14118" PostTypeId="2" ParentId="14116" CreationDate="2020-03-14T13:55:13.577" Score="16" Body="&lt;p&gt;Multiplying (and dividing) by powers of 2 has always been trivial and fast even for 8-bit processors like Z80 or 6502, with shifting instructions (commonly arithmetic shift left aka &lt;code&gt;ASL&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But those processors didn't have a &lt;code&gt;MUL&lt;/code&gt; instruction so when it came to non-power of 2 multiplication, it always involved shifting, testing bit and adding shifted result if bit is set, exactly like we do manually in base 10, if I may say.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in the ROM, when one piece of coded needed to multiply by 2 or 4 or whatever, it used explicit &lt;code&gt;ASL&lt;/code&gt;, &lt;code&gt;ROL&lt;/code&gt; or whatever shifting instruction available, even when a generic shift-and-add multiply routine was available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes when the number to multiply with was known, a special routine was used, like in the oric atmos ROM, when the ROM needed to multiply by 40 which is the number of bytes per row.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;F731    A0 00       LDY #$00         This routine multiplies the &#xA;F733    8C 63 02    STY $0263        content of the accumulator by &#xA;F736    8D 64 02    STA $0264        #28 (40). Y holds the high &#xA;F739    0A          ASL A            byte of the result. The page &#xA;F73A    2E 63 02    ROL $0263        2 locations store temporary&#xA;F73D    0A          ASL A            results. &#xA;F73E    2E 63 02    ROL $0263 &#xA;F741    18          CLC &#xA;F742    6D 64 02    ADC $0264        The result is calculated by&#xA;F745    90 03       BCC $F74A        adding 4 x A to A and then &#xA;F747    EE 63 02    INC $0263        double the result. &#xA;F74A    0A          ASL A &#xA;F74B    2E 63 02    ROL $0263 &#xA;F74E    0A          ASL A &#xA;F74F    2E 63 02    ROL $0263 &#xA;F752    0A          ASL A &#xA;F753    2E 63 02    ROL $0263 &#xA;F756    AC 63 02    LDY $0263 &#xA;F759    60          RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For other cases, it used the generic multiply routine. As you see, multiplying by a known number such as 40 is already a long, time consuming routine. The generic integer routine takes even more cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Games didn't call ROM multiply directly but often defined their own when they needed it, with the same principle. L'Aigle d'Or (1984) has one for instance. When I converted the game to C, I &quot;optimized&quot; it by using multiplication. You can see the C &amp;amp; asm equivalent below&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C version: performs (0x70)*(0x71), returns result in r.a,r.y&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  label_multiply_3E00:&#xA;  {&#xA;    int a=m[0x70];&#xA;    int b=m[0x71];&#xA;    int c=a*b;&#xA;    r.a = c &amp;gt;&amp;gt; 8;&#xA;    r.y = c &amp;amp; 0xFF;&#xA;    rts;&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;original asm 6502 code, same interface, returns result in A, Y&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   lda #0&#xA;   sta 0x72&#xA;   ldx #8&#xA;label_0x3E06:&#xA;   lsr 0x71&#xA;   bcc  0x3E0D&#xA;   clc   ; clear carry&#xA;   adc  0x70&#xA;label_0x3E0D:&#xA;   ror A&#xA;   ror 0x72&#xA;   dex&#xA;   bne label_0x3E06&#xA;   sta 0x73&#xA;   ldy 0x72&#xA;   rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A 8/16 bit developper (I think it was Simon Phipps) once said how much he was relieved when working on 16 bit processors because of the multiply and divide native instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be perfectly honest and transparent, I didn't find the generic integer multiply routine in the Oric ROM and I'm not going to find it since it probably only exists as floating point (that one can be found). This follow-up question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14136/is-integer-arithmetic-really-slower-than-float-with-early-ms-basic&quot;&gt;Is integer arithmetic really slower than float with (early) MS-BASIC?&lt;/a&gt; is the reason for that final edit.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-03-16T22:40:28.317" LastActivityDate="2020-03-16T22:40:28.317" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14119" PostTypeId="2" ParentId="14116" CreationDate="2020-03-14T13:58:52.823" Score="10" Body="&lt;p&gt;The most common way to do a general multiplication is the &amp;quot;shift and add&amp;quot; method, where for each bit set in the multiplier you add the multiplicand to the &lt;em&gt;high&lt;/em&gt; portion of the result and then shift the result right. Thus, the lowest order bit of the multiplier, if set, contributes 1× the multiplicand to the result after the result has been fully shifted right, the next bit of the multiplier contributes 2× the multiplicand (if set), and so on.&lt;/p&gt;&#xA;&lt;p&gt;Lance Leventhal's &lt;em&gt;6502 Assembly Language Subroutines&lt;/em&gt; includes, on &lt;a href=&quot;https://archive.org/details/6502_Assembly_Language_Subroutines/page/n246/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;page 236&lt;/a&gt;, a 16-bit multiply routine that does this. Probably the most important thing to understand while reading this is that on the 6502 the &lt;code&gt;ROR&lt;/code&gt; (rotate right) instruction shifts the lowest-order bit into the carry flag, and the carry flag into the highest order bit. Thus, the &lt;code&gt;BCC&lt;/code&gt; (branch on carry clear) instruction determines whether the multiplier bit currently being processed requires the multiplicand to be added to the result.&lt;/p&gt;&#xA;&lt;p&gt;The routine is also perhaps a bit overly clever in that as it shifts the 16-bit multiplier out, it shifts the low order bits of the result into the same memory locations.&lt;/p&gt;&#xA;&lt;p&gt;There are specific optimizations to this algorithm that are frequently used. One is to examine both the multiplier and the multiplicand, reverse the two if the multiplicand's higest set bit is lower than the multiplier's, and then not loop through all the bits but only up to the highest set one.&lt;/p&gt;&#xA;&lt;p&gt;Another, specifically for multiplication by ten, is to shift once to multiply by two, store a copy, shift twice more to continue to a multiplication by eight, and then add the two results together. An example in 6502 assembly for 8-bit values &lt;a href=&quot;http://6502.org/source/integers/fastx10.htm&quot; rel=&quot;noreferrer&quot;&gt;is given here&lt;/a&gt; and should be very clear to read; a more complex example for arbitrary-precision values (up to 255 bytes) &lt;a href=&quot;https://github.com/0cjs/8bitdev/blob/f0ae29832b60e409692d40127ae1b0e692f648e2/src/bigint.a65#L252-L285&quot; rel=&quot;noreferrer&quot;&gt;is here&lt;/a&gt;. (Check the comments above the routine to understand the parameters.) This idea can be appropriately modified for other multiplications by a known constant.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-14T14:07:40.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14121" PostTypeId="1" AcceptedAnswerId="14123" CreationDate="2020-03-14T16:50:10.567" Score="13" ViewCount="2745" Body="&lt;p&gt;I recently got a SID chip (8580r5) for $35 and got it playing music. I was really happy about it. I hooked up a small amp chip to the 9V supply momentarily (it didn't work, I was building that part of the circuit) and after a second of disconnecting it the SID stopped playing music and I quickly saw it was drawing a lot of amps on the 9V rail, I think around 600mA when it usually draws around 10mA. I quickly shut everything down (I think within 1 to 2 seconds of it going bad) and the chip had gotten a little bit warm. Now if I bring up the 9V supply slowly the current increases relative to the voltage which is not what should happen, it should stay at around 10mA. It draws the same amount of current on the 5V supply as it did before but if I quickly supply 9V too it doesn't produce any output.&lt;/p&gt;&#xA;&lt;p&gt;How did I break it as the only connection the amp circuit had with the SID was through a 2.2uF cap on its output and a common ground?&lt;/p&gt;&#xA;&lt;p&gt;I took extreme care to not have a SID chip die on my hands&lt;/p&gt;&#xA;&lt;p&gt;I'm hoping that if I let it sit for a moment it will be magically fixed but I don't like my chances.&lt;/p&gt;&#xA;&lt;p&gt;Here is a small schematic of what I had. I couldn't find a TDA1524 and my circuit is the same as the one on the datasheet except the components for the right channel where missing and some values where a little bit different so I didn't bother drawing it, tell me if you want me to.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KZJuv.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KZJuv.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;EDIT: if i don't connect 9V i can pick up a 20mV signal of the normal output of the SID so only an output pre amp died most likely explained by @Justme's answer&#xA;&lt;a href=&quot;https://www.bitchute.com/video/xo4R3Na8VDCH&quot; rel=&quot;noreferrer&quot;&gt;https://www.bitchute.com/video/xo4R3Na8VDCH&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16542" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-18T03:42:43.423" Title="How did I fry my SID chip?" Tags="&lt;hardware&gt;&lt;commodore-64&gt;&lt;sound&gt;&lt;sid&gt;&lt;mos-6581&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14122" PostTypeId="2" ParentId="14121" CreationDate="2020-03-14T17:12:00.040" Score="2" Body="&lt;p&gt;This sounds like an ESD/over voltage event might have occurred while you were working with the circuit. The SIDs are extremely sensitive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is not uncommon for a defective SID to draw excessive current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This is not going to bring back your SID, but just a tip for future work: while prototyping your project, consider using a &lt;a href=&quot;http://www.swinkels.tvtom.pl/swinsid/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SwinSID (Nano)&lt;/a&gt; instead - it's emulation but pin compatible, &lt;a href=&quot;https://www.ebay.com/sch/i.html?_nkw=swinsid&quot; rel=&quot;nofollow noreferrer&quot;&gt;cheap&lt;/a&gt;, harder to damage and inducing less sorrow when damaged.)&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-03-15T00:16:53.740" LastActivityDate="2020-03-15T00:16:53.740" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14123" PostTypeId="2" ParentId="14121" CreationDate="2020-03-14T19:10:13.417" Score="16" Body="&lt;p&gt;The amplifier input is biased to about half supply voltage. The SID output is also biased to about half supply voltage. You have little or no bulk/bypass capacitance on the 9V supply pins, so abruptly disconnecting the 9V supply from amp also abruptly shuts down the amp input bias. But as you have the quite excessively large 22uF coupling capacitor between SID output and amp input, the quickly falling amp bias also pulled down SID output quickly down, and depending on actual bias voltages, perhaps it took SID output negative which damaged it. Sensitive chips should be protected by buffering with local power supply - I mean if you made a SID device, you would not connect the SID output directly to outside world either, so same in this case - do not rewire things while powered.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-03-14T19:10:13.417" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="14124" PostTypeId="1" AcceptedAnswerId="14125" CreationDate="2020-03-15T10:01:53.520" Score="8" ViewCount="1530" Body="&lt;p&gt;I have recently fixed an old IBM Clone, which has an MFM hard drive. The PC booted up fine, but then I saw, that a few years back, I have deleted a few important files (probably by mistake). The computer runs DOS 3.2, so there is no 'UNDELETE' command. I think I should just image the drive, and then mount the image on my main computer, and recover the files this way. The only problem is, that I cannot write any files onto the drive of this machine, as it would likely damage the deleted files, so I need to be working off of a 360K floppy. I think I need to write a program that would just read the disk in segments and send them over to my new computer with RS-232. I have written multiple x86 ASM applications for DOS, but I cannot find an interrupt function that would allow me to read the drive, and not just the file. I know of the 13h interrupt, which would allow me to read raw data off of the drive, but I don't know how to get the parameters in order to call this function(sector, cylinder, head, drive).&lt;/p&gt;&#xA;" OwnerUserId="13572" LastEditorUserId="3290" LastEditDate="2020-04-26T14:30:28.267" LastActivityDate="2020-05-19T05:55:09.577" Title="Imaging a HDD from DOS over Serial" Tags="&lt;ms-dos&gt;&lt;assembly&gt;&lt;hard-disk&gt;&lt;c&gt;" AnswerCount="4" CommentCount="25" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14125" PostTypeId="2" ParentId="14124" CreationDate="2020-03-15T14:11:02.727" Score="13" Body="&lt;p&gt;You seem to be proposing a custom HDD &quot;driver&quot; that would image the HDD block-by-block by sending those blocks across a serial port to some sort of process running on your modern computer that assembles the blocks into an image file. This could be error prone and time consuming to implement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative suggestion is to use a legacy DOS Utility, such as &lt;a href=&quot;https://en.wikipedia.org/wiki/PC_Tools_(software)&quot; rel=&quot;noreferrer&quot;&gt;PC Tools 1.x&lt;/a&gt;, that includes an Undelete utility. If you can just image a floppy with PC Tools, or similar utility, then you can boot from the floppy and try to recover your files in the same way you would have &quot;back in the day&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also state that you have 25MiB of potentially recoverable files. Once you have successfully restored them on your HDD, you then have lots of options to copy them, file-by-file, over the serial port to a modern computer. Again, legacy DOS utilities can do the trick, just as was done &quot;back in the day&quot; to move files between PCs with a null-modem cable.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-03-15T14:11:02.727" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14126" PostTypeId="2" ParentId="14124" CreationDate="2020-03-15T14:58:18.320" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I know of the 13h interrupt, which would allow me to read raw data off of the drive, but I don't know how to get the parameters in order to call this function(sector, cylinder, head, drive).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/INT_13H&quot; rel=&quot;nofollow noreferrer&quot;&gt;INT 13h&lt;/a&gt; is actually a set of routines; which one is called is determined by AH. (That list on Wikipedia covers various extensions as well, you won't have all of those on older machines. &lt;a href=&quot;https://dos4gw.org/INT_13H_BIOS_Disk_I_O&quot; rel=&quot;nofollow noreferrer&quot;&gt;This list&lt;/a&gt; covers what's available from the ROM BIOS on early PCs.)&lt;/p&gt;&#xA;&lt;p&gt;You can get the C/H/S parameters for the drive using &lt;a href=&quot;https://en.wikipedia.org/wiki/INT_13H#INT_13h_AH=08h:_Read_Drive_Parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;AH=08h: Read Drive Parameters&lt;/a&gt;. (More details &lt;a href=&quot;https://web.archive.org/web/20160619063203/http://www.ctyme.com/intr/rb-0621.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.) That will give you the parameters you need to use [AH=02h: Read Sectors from Drive] to read what you need.&lt;/p&gt;&#xA;&lt;p&gt;You can also determine the parameters by calling AH=02h with increasing sector, head and cylinder numbers until you get an error, and then checking error code (with &lt;a href=&quot;https://en.wikipedia.org/wiki/INT_13H#INT_13h_AH=01h:_Get_Status_of_Last_Drive_Operation&quot; rel=&quot;nofollow noreferrer&quot;&gt;AH=01h: Get Status of Last Drive Operation&lt;/a&gt;) to confirm it was something indicating a bad parameter for cylinder/track or sector. You may need to do this anyway if AH=08h returned the wrong parameters; IIRC the parameters were set &amp;quot;manually&amp;quot; and not read from the drive.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-15T14:58:18.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14127" PostTypeId="2" ParentId="11137" CreationDate="2020-03-15T22:45:17.403" Score="3" Body="&lt;p&gt;A history of failing is maybe a strong statement, but for what it's worth, I've seen a couple of failure modes of the power switch during C64 repairs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most typical is that solder joints become loose due to the mechanical stress on the button, which can lead to no or poor connection, similar to what you describe. This can normally be fixed by resoldering the joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also seen a failure mode where environmental conditions (presumably) had caused contact surfaces to degrade and not conduct properly. This could be fixed by repeatedly bathing the switch in contact cleaner and exercising it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I've seen one that had a mechanical failure in it so that it could not turn on. Replacement was necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't really have any numbers on how often these failures occur (and assume they are also a function of external factors), but I'd say that in my experience it's not uncommon.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastActivityDate="2020-03-15T22:45:17.403" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14128" PostTypeId="2" ParentId="7913" CreationDate="2020-03-15T23:11:50.663" Score="4" Body="&lt;p&gt;I have several spare CIAs marked 6526A-1 that I've used interchangeably with 6526A CIAs with no problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot point to any official reference but suspect that for some production batches, the labelling was just set up to include the -1 suffix designating revision 1 of the A variant.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastActivityDate="2020-03-15T23:11:50.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14129" PostTypeId="1" CreationDate="2020-03-16T02:54:53.867" Score="6" ViewCount="432" Body="&lt;p&gt;The Apollo Guidance Computer had its code stored in six modules that held 6 kwords of storage each, and the design of each module was such that changing even a single bit after construction would have been very difficult.  On the other hand, the computer was constructed in such a way that swapping one module out for a different one would have been fairly easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was any effort made to design the code in such a way that if a defect was discovered, it would be possible to fix the code by rebuilding one or two modules, using the other four or five without modification?  If so, what techniques were used for that purpose?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If code was simply assembled from scratch after each time it was changed, many address references scattered throughout would be likely to change if any instructions were added or removed, thus requiring that all memory modules be rebuilt.  On the other hand, there are a number of approaches that would seem possible to minimize such issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One approach would be to subdivide the software into six separately-built pieces of firmware, each of which started with a jump table to all of the externally-callable routines.  If all inter-module calls are dispatched through the jump table, changes to the code within a module would have no effect on external calls that were dispatched through the jump table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative approach would be to have the jump table for all modules, as well as most of the unused space, consolidated within one module.  If any routines need to be modified, it would be necessary to change the module containing the master jump table, but if the routines aren't too big, no matter which module originally held them, a fixed copy could be placed within the master jump module without having to modify any other modules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did the AGC or any other early programs make use of such techniques to ensure that changes to ROM could be consolidated in as few modules/chips as possible?&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-08-15T20:22:45.417" Title="Did the Apollo Guidance Computer or other multi-ROM machines subdivide code between ROM chips/modules to facilitate partial updates?" Tags="&lt;history&gt;&lt;assembly&gt;&lt;apollo-guidance-computer&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14130" PostTypeId="2" ParentId="14129" CreationDate="2020-03-16T09:50:38.580" Score="-4" Body="&lt;p&gt;Isn't that the basic usage of any modularization? As soon as there are multiple storages, they can be exchanged vor updates - For the Apple II, for example, it happened twice: Changing the Monitor-ROM with Autostart-ROM and/or Integer-BASIC-ROM(s) with APPLESOFT-ROMs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beside that, most (large/early) Computers didn't have massive ROMs but only microcode. The AGC is an outlier here as it is more of an embedded system. Microcode was more often than not patched on a level smaller than a module. Like exchanging single cards or rewiring some bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, a closed system/single application, as the AGC is, doesn't need to waste much space for abstraction layers, as any replacement is better made to simply fit the external references (entry points) exactly like its predecessor.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-16T10:38:20.347" LastActivityDate="2020-03-16T10:38:20.347" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14131" PostTypeId="2" ParentId="14129" CreationDate="2020-03-16T10:26:46.200" Score="-4" Body="&lt;p&gt;Any time you have a machine with multiple microcontrollers, you will have multiple, independent ROMs. Factory automation systems for example contain dozens of microcontrollers linked together on a &lt;a href=&quot;https://en.wikipedia.org/wiki/CANopen&quot; rel=&quot;nofollow noreferrer&quot;&gt;CANopen&lt;/a&gt; network, with predetermined Node IDs on the bus and Object IDs (addresses) on each node. If a node needs to communicate directly with another node, it needs to know the second node's Node ID and and the destination Object ID for the message, similar to a jump table in a single-CPU solution.&lt;/p&gt;&#xA;&lt;p&gt;In this way, each ROM is independent of each other and can be updated independently with new firmware without requiring addresses (node and object IDs) to change. It's basically a decentralized solution to the problem of address references changing when a ROM is changed.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="129" LastEditDate="2020-08-15T20:22:45.417" LastActivityDate="2020-08-15T20:22:45.417" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="14132" PostTypeId="1" CreationDate="2020-03-16T17:15:42.357" Score="4" ViewCount="246" Body="&lt;p&gt;I've recently become interested in the original Teddy Ruxpin that operated by playing 8-track cassette tapes. The 8 channels on the tape were used in a creative way to ensure that Teddy's animation would line up correctly with the audio. &lt;a href=&quot;http://www.mindspring.com/~mathue/workings.html&quot; rel=&quot;noreferrer&quot;&gt;This link gives more information on how it's done.&lt;/a&gt; It seems like channel 1 is perhaps the channel used for the audio, and the other channels are used for eyes, upper and lower jaw, and whether the audio is supposed to come from Teddy or Grubby (a different toy). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can find lots of tutorials on hacking Teddy using open-source python libraries, a wi-fi connection, replacing the cassette deck with a microchip, blah blah BLAH. I want to create my own Teddy Ruxpin cassette tape that can be inserted into the toy like one of their own tapes and will animate according to my coding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't find any information on how the animation channels were specifically used to determine the mouth and eye movements, however. What do you guys think? Is there an easy way to find this out? And if not, what's the best way to get to work understanding it myself? What kind of equipment is good for editing individual tracks on an 8-track cassette tape, and where could I get it? &lt;/p&gt;&#xA;" OwnerUserId="14745" LastActivityDate="2020-03-16T17:15:42.357" Title="Teddy Ruxpin Animation Coding &quot;Language&quot;?" Tags="&lt;cassette-tape&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14134" PostTypeId="1" AcceptedAnswerId="14135" CreationDate="2020-03-16T20:45:49.967" Score="3" ViewCount="239" Body="&lt;p&gt;The Cray-1 has 12 segments arranged in a 270 degree arc. It also has 12 functional units, so is there one functional unit per segment?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were 1,662 modules in 113 varieties, but what is a module? Was a functional unit composed of an order of around 100 modules?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, how does the functional completeness of NAND correspond to modules?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, where is the memory contained? Did each segment have one twelfth of total memory?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the functional units:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;address add unit&lt;br&gt;&#xA;address multiply unit&lt;br&gt;&#xA;scalar add unit&lt;br&gt;&#xA;scalar shift unit&lt;br&gt;&#xA;scalar logical unit&lt;br&gt;&#xA;population/leading zero count&lt;br&gt;&#xA;vector add unit&lt;br&gt;&#xA;vector shift unit&lt;br&gt;&#xA;vector logical unit&lt;br&gt;&#xA;floating-point add unit&lt;br&gt;&#xA;floating-point multiply unit&lt;br&gt;&#xA;reciprocal approximation unit&lt;/p&gt;&#xA;" OwnerUserId="15219" LastActivityDate="2020-03-17T04:59:14.873" Title="Cray-1 functional units" Tags="&lt;cray&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14135" PostTypeId="2" ParentId="14134" CreationDate="2020-03-16T21:05:08.500" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;is there one functional unit per segment?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can find the chassis (&quot;segment&quot;) layout on page 2-3 of the &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/cray/CRAY-1/2240004C_CRAY-1_Hardware_Reference_Nov77.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cray 1 Hardware Reference&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, the middle sections contain the functional units, and the left and right sections contain storage.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;but what is a module?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Module types are listed in Appendix B of the above reference manual. With names like &quot;address adder&quot;, &quot;program branch control&quot;, &quot;floating add coefficient add (front half)&quot; you can get some idea of the complexity of the functions that are implemented by a module.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;how does the functional completeness of NAND correspond to modules?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have no idea what you mean by this question. &lt;strong&gt;Edit&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are talking about the design choice to use mostly one type of logic circuit to implement everything: The reference manual says on page 2-5&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;With minor exceptions, one type of logic gate is used for the central processing unit. This is an ECL circuit with either four or five inputs and with both normal and inverted outputs available to drive loads. One four-input gate and one five-input gate are packaged in a 16-pin flat pack. All latches, adders, subtracters, etc., are made of this basic gate.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Cray-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; indicates that these are NOR (or rather, NOR+OR) gates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &quot;the completeness of NAND&quot; doesn't &quot;correspond&quot; to modules at all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact that you can implement all logic either with NAND or NOR allows the design choice to use a single component in the majority of places, leveraging benefits of scale (easier to produce, easier to swap out). But this still has no connection to &quot;modules&quot;; you can build up everything out of such components, no matter if it's subdivided in &quot;modules&quot; or not.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;where is the memory contained?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;See above.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-03-17T04:59:14.873" LastActivityDate="2020-03-17T04:59:14.873" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="14136" PostTypeId="1" CreationDate="2020-03-16T22:25:26.320" Score="11" ViewCount="547" Body="&lt;p&gt;This question is based on &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14116/how-did-integer-multiplication-work-in-8-bit-basic-without-cpu-support?noredirect=1#comment45377_14116&quot;&gt;a comment&lt;/a&gt; by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/5381/neil&quot;&gt;Neil&lt;/a&gt; on another &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14116&quot;&gt;question regarding integer-multiplication&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Do you have any citations for your claim that most MS-BASIC integer multiplication was done by turning into floats? Seeing as how the majority of processors before 80486DX (8,16 or 32 bit) didn't have any floating point processors, this would have been extremely slow.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-12-26T00:51:17.013" Title="Is integer arithmetic really slower than float with (early) MS-BASIC?" Tags="&lt;microsoft-basic&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14137" PostTypeId="2" ParentId="14136" CreationDate="2020-03-16T22:25:26.320" Score="17" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Do you have any citations for your claim that most MS-BASIC integer multiplication was done by turning into floats?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Beside having lived thru it, or noting that the &lt;a href=&quot;https://www.pagetable.com/?p=774&quot; rel=&quot;nofollow noreferrer&quot;&gt;source of MS-BASIC&lt;/a&gt; doesn't contain any integer routines (except for conversion)? (*1)&lt;/p&gt;&#xA;&lt;p&gt;I assume the most simple and obvious proof would be to just try it. Commodore 8 bit machines are a great tool here as their BASIC provides access to a simple real time clock. The variable &lt;a href=&quot;https://www.c64-wiki.com/wiki/TIME&quot; rel=&quot;nofollow noreferrer&quot;&gt;TI(ME)&lt;/a&gt; is incremented every 1/60th second. Since the effect is rather large, already a few seconds of measurement should deliver a valid result.&lt;/p&gt;&#xA;&lt;p&gt;So lets setup a test program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    100 REM &amp;gt;&amp;gt;&amp;gt; VARIABLE SETUP &amp;lt;&amp;lt;&amp;lt;&#xA;    110 A=3:B=7:C=0&#xA;    120 A%=3:B%=7:C%=0&#xA;    130 I=0&#xA;    140 T1=0:T2=0:T3=0:T4=0:T5=0&#xA;    150 TI$=&amp;quot;000000&amp;quot;&#xA;&#xA;    200 REM &amp;gt;&amp;gt;&amp;gt; MEASUREMENT    &amp;lt;&amp;lt;&amp;lt;&#xA;    210 T1=TI&#xA;    220 FOR I=1 TO 1000:NEXT I&#xA;    230 T2=TI&#xA;    240 FOR I=1 TO 1000:C=A*B:NEXT I&#xA;    250 T3=TI&#xA;    260 FOR I=1 TO 1000:C%=A%*B%:NEXT I&#xA;    270 T4=TI&#xA;    280 FOR I=1 TO 1000:C%=3*7:NEXT I&#xA;    290 T5=TI&#xA;&#xA;    300 REM &amp;gt;&amp;gt;&amp;gt; PRINT RESULTS  &amp;lt;&amp;lt;&amp;lt;&#xA;    310 TL=T2-T1&#xA;    320 PRINT &amp;quot;LOOP :&amp;quot;;TL&#xA;    330 PRINT &amp;quot;FLOAT:&amp;quot;;T3-T2-TL&#xA;    340 PRINT &amp;quot;INT  :&amp;quot;;T4-T3-TL&#xA;    350 PRINT &amp;quot;CONST:&amp;quot;;T5-T4-TL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Workings:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The program defines 3 variables A, B and C as float and integer. A and B are preloaded with values (3; 7), while C is set to zero. This is done to have all variables ahead of used, so no allocation has to be done during use.&lt;/li&gt;&#xA;&lt;li&gt;TI is as well zeroed to avoid any overflow error (*2).&lt;/li&gt;&#xA;&lt;li&gt;A first time stamp is saved in T1.&lt;/li&gt;&#xA;&lt;li&gt;An empty loop is performed to measure the FOR/NEXT overhead.&lt;/li&gt;&#xA;&lt;li&gt;A time stamp is taken in T2&lt;/li&gt;&#xA;&lt;li&gt;The measurement for float calculation is done in form of multiplying 3 and 7 from variables a 1,000 (*3) times in a FOR...NEXT loop.&lt;/li&gt;&#xA;&lt;li&gt;A time stamp is saved in T3,&lt;/li&gt;&#xA;&lt;li&gt;followed by doing the same with integer variables and&lt;/li&gt;&#xA;&lt;li&gt;saving the time stamp in T4,&lt;/li&gt;&#xA;&lt;li&gt;followed doing the same with constant values and&lt;/li&gt;&#xA;&lt;li&gt;a final time stamp in T5.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Results are printed as difference between the time stamps (T1, T2, T3, T4, T5) for each test, reduced by the time taken for the empty loop.&lt;/p&gt;&#xA;&lt;p&gt;While I suggest to try it on your own PET, CBM, C64 or C128, it will as well work on emulators. A great tool here could be the &lt;a href=&quot;https://www.masswerk.at/pet/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PET emulator at Masswerk&lt;/a&gt;. It's not only a fine implementation, but also offering a lot of ways for im-/export - including starting a program from a data URL, like with our test program:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.masswerk.at/pet/?data=base64:MTAwIFJFTSA+Pj4gVkFSSUFCTEUgU0VUVVAgPDw8CjExMCBBPTM6Qj03OkM9MAoxMjAgQSU9MzpCJT03OkMlPTAKMTMwIEk9MAoxNDAgVDE9MDpUMj0wOlQzPTA6VDQ9MDpUNT0wCjE1MCBUSSQ9IjAwMDAwMCIKMjAwIFJFTSA+Pj4gTUVBU1VSRU1FTlQgICAgPDw8CjIxMCBUMT1USQoyMjAgRk9SIEk9MSBUTyAxMDAwOk5FWFQgSQoyMzAgVDI9VEkKMjQwIEZPUiBJPTEgVE8gMTAwMDpDPUEqQjpORVhUIEkKMjUwIFQzPVRJCjI2MCBGT1IgST0xIFRPIDEwMDA6QyU9QSUqQiU6TkVYVCBJCjI3MCBUND1USQoyODAgRk9SIEk9MSBUTyAxMDAwOkMlPTMqNzpORVhUIEkKMjkwIFQ1PVRJCjMwMCBSRU0gPj4+IFBSSU5UIFJFU1VMVFMgIDw8PAozMTAgVEw9VDItVDEKMzIwIFBSSU5UICJMT09QIDoiO1RMCjMzMCBQUklOVCAiRkxPQVQ6IjtUMy1UMi1UTAozNDAgUFJJTlQgIklOVCAgOiI7VDQtVDMtVEwKMzUwIFBSSU5UICJDT05TVDoiO1Q1LVQ0LVRM&amp;amp;autorun=true&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open this fine link to run above test program&lt;/a&gt; (maybe in another window)&lt;/p&gt;&#xA;&lt;p&gt;Doing so should present a result similar to this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    LOOP : 91&#xA;    FLOAT: 199&#xA;    INT  : 278&#xA;    CONST: 275&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The numbers show that using integer variables takes about 40% longer than doing so in float. &lt;strong&gt;This is simply due the fact that each and every integer value stored in any of the variables is converted to float before multiplication and the result converted back to integer.&lt;/strong&gt; Interesting here is that the use of constants does not result any relevant speed up. Here again each constant has to be converted before used. In fact, converting from ASCII to float is even slower than converting from integer - but offset by skipping the need to search for each variable.&lt;/p&gt;&#xA;&lt;p&gt;Speaking of variable lookup, it's well known, that that the sequence variables are defined in MS-BASIC, does have a huge influence on access time (*4). Swapping the definitions of float (line 110) and integer (line 120) variables does &lt;a href=&quot;https://www.masswerk.at/pet/?data=base64:MTAwIFJFTSA+Pj4gVkFSSUFCTEUgU0VUVVAgPDw8CjExMCBBJT0zOkIlPTc6QyU9MAoxMjAgQT0zOkI9NzpDPTAKMTMwIEk9MAoxNDAgVDE9MDpUMj0wOlQzPTA6VDQ9MDpUNT0wCjE1MCBUSSQ9IjAwMDAwMCIKMjAwIFJFTSA+Pj4gTUVBU1VSRU1FTlQgICAgPDw8CjIxMCBUMT1USQoyMjAgRk9SIEk9MSBUTyAxMDAwOk5FWFQgSQoyMzAgVDI9VEkKMjQwIEZPUiBJPTEgVE8gMTAwMDpDPUEqQjpORVhUIEkKMjUwIFQzPVRJCjI2MCBGT1IgST0xIFRPIDEwMDA6QyU9QSUqQiU6TkVYVCBJCjI3MCBUND1USQoyODAgRk9SIEk9MSBUTyAxMDAwOkMlPTMqNzpORVhUIEkKMjkwIFQ1PVRJCjMwMCBSRU0gPj4+IFBSSU5UIFJFU1VMVFMgIDw8PAozMTAgVEw9VDItVDEKMzIwIFBSSU5UICJMT09QIDoiO1RMCjMzMCBQUklOVCAiRkxPQVQ6IjtUMy1UMi1UTAozNDAgUFJJTlQgIklOVCAgOiI7VDQtVDMtVEwKMzUwIFBSSU5UICJDT05TVDoiO1Q1LVQ0LVRM&amp;amp;autorun=true&quot; rel=&quot;nofollow noreferrer&quot;&gt;show this effect&lt;/a&gt; quite nice:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    LOOP : 91&#xA;    FLOAT: 218&#xA;    INT  : 259&#xA;    CONST: 269&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now the integer malus has shrunk by the effect of variable access and allows us to calculate a close net cost &lt;strong&gt;of 30% overhead&lt;/strong&gt; (259 vs 199 ticks) &lt;strong&gt;for type conversion&lt;/strong&gt; when using integer instead of float.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Seeing as how the majority of processors before 80486DX (8,16 or 32 bit) didn't have any floating point processors, this would have been extremely slow.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Jau, it is. But there are good reasons to do so:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Code size&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Additional routines for integer multiply and divide would cost at least a few hundred bytes in code. This may not sound much, but keep in mind, that ROM storage was quite small and developers had to fight for every instruction. But beside the code for multiplication/division, it's even more about&lt;/p&gt;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;The way BASIC works&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;MS-BASIC is an interpretative language without any processing ahead of time. Inputted source code gets not prepared in any way beside turned into a more compact storage representation by using single byte symbols for keywords and operators. The method was called 'crunching' by Allen/Gates (*5), other called it tokenization. This process does not analyze any semantics. It's a literal representation of the source.&lt;/p&gt;&#xA;&lt;p&gt;When the interpreter parses an expression it has no knowledge what type the elements are. Only if all are integer the calculation could be done using integer arithmetic. Thus it is &lt;em&gt;mandatory&lt;/em&gt; to do all calculations in float, to avoid any intermediate rounding error.&lt;/p&gt;&#xA;&lt;p&gt;Of course, the cruncher could have been improved to leave hints to the interpreter, or even transform the expression into a format allowing to use integer operations wherever possible - but this would not only have meant to add a lot of code to already packed ROMs but as well increase RAM usage for BASIC code (*6). Something not really a good idea. After all, these interpreters were designed for machines with a basic RAM size as low as 4 KiB (PET, Apple II, TRS-80 M1, etc.).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;So this again comes down to limited memory size of these computers.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;And now for something complete different:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/8386/chromatix&quot;&gt;Chromatix&lt;/a&gt; did go the extra mile to port, modify and try above little test program for the BBC (or better &lt;a href=&quot;https://bbc.godbolt.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jsbeeb&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JXAMZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JXAMZ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;While not really asked for by the Question, I do think it's a worthwhile addition, showing how much a BASIC with proper integer support may gain from using them percent signs.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - To be honest, it's simply much more fun to write some benchmark than simply looking up any old writing.&lt;/p&gt;&#xA;&lt;p&gt;*2 - TI runs modulo 5,184,000 (24 * 60 * 60 * 60 ) i.e. is reset every 24 hours. Resetting it at the begin of the program will ensure no unintended reset will happen during measurement, thus simplifying calculation to subtraction. Except, TI can not be written, clearing is only possible via TI$. And yes, this destroys any time of day set before, but serious, noone cares for it's value on a PET outside of an application.&lt;/p&gt;&#xA;&lt;p&gt;*3 - The number 1000 has been chosen to set run time close to 4-5 seconds per measurement. This will give a result large enough to gain valid data but still keep total run time below 30 seconds.&lt;/p&gt;&#xA;&lt;p&gt;*4 - MS-BASIC stores variables (their structures) in sequence of definition. Lookup is dome by sequential search. Thus access time is linear with position/sequence of definition.&lt;/p&gt;&#xA;&lt;p&gt;*5 - The crunching code was written by Paul Allen.&lt;/p&gt;&#xA;&lt;p&gt;*6 - It's again important to keep in mind that the crunched BASIC code not only was a direct image of the source, but it &lt;em&gt;must&lt;/em&gt; be possible to transform it back into it's source (or at least quite close) form. Reordering an expression is thus not an option - unless stored twice.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-26T00:51:17.013" LastActivityDate="2020-12-26T00:51:17.013" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="14138" PostTypeId="1" AcceptedAnswerId="14140" CreationDate="2020-03-16T23:21:20.213" Score="10" ViewCount="1125" Body="&lt;p&gt;The ZX Spectrum BASIC doesn't (ordinarily) let you print on lines 23 and 24 to allow for user input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way around this? I found a fairly &lt;a href=&quot;https://sinclairzxworld.com/viewtopic.php?f=14&amp;amp;t=3230&amp;amp;start=10&quot; rel=&quot;noreferrer&quot;&gt;recent post&lt;/a&gt; that suggested I could &lt;code&gt;POKE 16418,0&lt;/code&gt; but testing this on both hardware and emulators it doesn't change anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my test code:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR a= 0 to 23&#xA;20 PRINT AT a,0;a&#xA;30 NEXT a&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which will end in &lt;code&gt;5 Out of screen&lt;/code&gt; (since it can't write to line index 22).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or were these last two lines a pipedream for the 80s BASIC programmer?&lt;/p&gt;&#xA;" OwnerUserId="5366" LastEditorUserId="7208" LastEditDate="2020-03-16T23:35:14.213" LastActivityDate="2020-03-17T00:43:24.680" Title="Is it possible to PRINT AT 23,0 in ZX Spectrum BASIC?" Tags="&lt;basic&gt;&lt;zx-spectrum&gt;&lt;zx81&gt;&lt;sinclair&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14139" PostTypeId="2" ParentId="14138" CreationDate="2020-03-16T23:43:00.263" Score="5" Body="&lt;p&gt;I don't know about the normal printing routines in ZX Spectrum BASIC, but you can directly access the screen memory using POKE from BASIC.  You'll need to work out where to get the 8 bytes of bitmap data comprising the character, then POKE them into the 8 bytes (on a 256-byte stride) corresponding to the desired character cell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://www.breakintoprogram.co.uk/computers/zx-spectrum/screen-memory-layout&quot; rel=&quot;noreferrer&quot;&gt;this,&lt;/a&gt; the first row of line 23 (line index 22), column 1 would be at $50C0, or 20672 in decimal.  So the following should fill that character cell with ink colour:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR a= 0 TO 7&#xA;20 POKE 20672 + 256 * a, 255&#xA;30 NEXT a&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The corresponding attribute byte is at $5AC0, or 23232.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-03-16T23:43:00.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14140" PostTypeId="2" ParentId="14138" CreationDate="2020-03-17T00:43:24.680" Score="13" Body="&lt;p&gt;&lt;code&gt;POKE 16418,0&lt;/code&gt; is for the ZX81, not the Spectrum - the equivalent system variable on the Spectrum is at 23659.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to take care when poking this address, as it's liable to cause a crash if the program exits (or displays a &lt;code&gt;scroll?&lt;/code&gt; prompt) while the lower screen is disabled, but the following program demonstrates the principle:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 POKE 23659,0&#xA;20 PRINT AT 22,0;&quot;X&quot;'&quot;Y&quot;&#xA;30 PAUSE 0&#xA;40 POKE 23659,2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For completeness, it's worth mentioning that the 'official' (and safe) way of accessing the lower screen is &lt;code&gt;PRINT #0&lt;/code&gt; (or equivalently &lt;code&gt;PRINT #1&lt;/code&gt;), although that way you won't get direct control over PRINT AT coordinates.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT #0;&quot;hello world&quot;&#xA;20 PAUSE 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13618" LastActivityDate="2020-03-17T00:43:24.680" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14141" PostTypeId="1" CreationDate="2020-03-17T00:45:37.947" Score="25" ViewCount="6678" Body="&lt;p&gt;I have a PC with an &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Intel_Pentium_microprocessors#%22P54CS%22_(0.35_%CE%BCm)&quot; rel=&quot;noreferrer&quot;&gt;Intel P133&lt;/a&gt; (133 MHz). The motherboard (&lt;a href=&quot;http://support.pcpartner.com/support/man/intel/832003.pdf&quot; rel=&quot;noreferrer&quot;&gt;PcPartner MB520NH&lt;/a&gt;) only allows for it to be slowed down to 75&amp;nbsp;MHz at the least via jumper settings, but no lower. Yet the PC's case has an LED module that is configured to show the CPU's current speed setting:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/V37LY.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V37LY.jpg&quot; alt=&quot;PC front&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice that the LED module comprises of three digits, meaning that the LED module was meant to be used on systems with over 100&amp;nbsp;MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought the whole point of the turbo switch was to enable compatibility with games that expected 4.77&amp;nbsp;MHz. What was the purpose of the slow/fast turbo setting on PCs whose CPUs could not slow down to 4.77&amp;nbsp;MHz?&lt;/p&gt;&#xA;" OwnerUserId="16550" LastEditorUserId="16550" LastEditDate="2020-03-17T22:44:06.403" LastActivityDate="2020-03-19T19:38:05.333" Title="Purpose of turbo switch on systems unable to slow to 4.77 MHz?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;" AnswerCount="7" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14142" PostTypeId="2" ParentId="14141" CreationDate="2020-03-17T01:59:54.853" Score="13" Body="&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;p&gt;Looking at the linked board manual reveals that it doesn't support any 'turbo' switch. So this is simply a case having it, while there is no purpose - maybe except for the fun of having a button that switches the illuminated segments :)&lt;/p&gt;&#xA;&lt;p&gt;It might be safe to assume that the board has been updated or the case been used regardless. After all, why throw away a perfect good case just because it has some unused feature?&lt;/p&gt;&#xA;&lt;p&gt;Looks like a typical home built machine anyway.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Yet the PC's case has an LED module that is configured to show the CPU's current speed setting&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Is it really? Or is it just displaying some number that has been jumpered? Have you looked inside how it's wired to the board - also, what board it is?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Notice that the LED module comprises of three digits, meaning that the LED module was meant to be used on systems with over 100MHz.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It seems like a 2½ digit display, so 199 should be the maximum value that can be displayed, shouldn't it?&lt;/p&gt;&#xA;&lt;p&gt;The number of digits in use doesn't say anything about the board. Not even about the time it was manufactured. Using a 2½ digit display doesn't cost much more than a two digit one, but allows setting nice fancy numbers. The machine does look like it's self (or small shop) assembled, so they used what was available. Think of it like any other form of 'modding' just meant to support the ego of its owner.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line, the display used doesn't say anything about the time or the board.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I thought the whole point of the turbo switch was to enable compatibility with games that expected 4.77MHz. What was the purpose of the slow/fast turbo setting on PCs whose CPUs could not slow down to 4.77MHz?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's important to keep in mind that a turbo switch is a feature of the case, not of the board. So what function it may have, if any, is defined by the board; you may want to look up the board documentation and check the wiring used.&lt;/p&gt;&#xA;&lt;p&gt;Besides that, it was in general a way to slow down - though not necessarily to 4.77 MHz.&lt;/p&gt;&#xA;&lt;p&gt;Throttling down to 4.77 MHz was only a thing for 8088 based (aka PC/XT) machines. Already with 80286 based computers (starting in 1984) this no longer made any sense. Here, if at all, a reduction to 6 or 8 MHz, like the base AT or later models, was used. With introduction of the first 80386 in 1987 the relation changed again. A 386 running at the same speed as a 286 will perform considerably faster, so reducing the clock speed would not bring it down to the same level as an AT.&lt;/p&gt;&#xA;&lt;p&gt;At the time most motherboards supporting turbo modes (or rather reduced speed modes) simply disabled the on board cache to reduce performance.&lt;/p&gt;&#xA;&lt;p&gt;The discrepancy increased with 486 and Pentium even more. A Pentium running at 4.77 MHz is several times faster than an genuine 8088 PC at 4.77 MHz. At the time this machine was contemporary (late '90s), a turbo switch had for most part lost any meaning. For one, there weren't many games still able to run on machines that new at all - and even fewer people who wanted to run the old stuff.&lt;/p&gt;&#xA;&lt;p&gt;In the late '90s, games had to comply with a range of 25 MHz 386 to 200 MHz Pentium, so none were still written to rely solely on clock speed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-19T04:01:05.363" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="14143" PostTypeId="1" AcceptedAnswerId="14144" CreationDate="2020-03-17T03:32:50.070" Score="15" ViewCount="1944" Body="&lt;p&gt;The Apple IIe was designed to be timing-compatible with the Apple II+ so that timing-depndent software (such games and copy-protection systems) and hardware designed for the Apple II and II+ would, for the most part, work in the IIe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the Apple IIe used a (presumably more expensive) 6502A, rated for 2 MHz operation. Why did they do this? Can I substitute a 1 MHz 6502 for the 6502A?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-03-17T03:32:50.070" Title="Why did the Apple IIe use a 2 MHz-rated 6502, even though it ran at only 1 MHz?" Tags="&lt;apple-ii&gt;&lt;6502&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14144" PostTypeId="2" ParentId="14143" CreationDate="2020-03-17T03:32:50.070" Score="20" Body="&lt;p&gt;No, you can't substitute; the 6502A was used precisely because it is faster for some things, even when not run at a higher clock rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.apple-iigs.info/doc/fichiers/Apple%20IIe%20Technical%20Notes.pdf&quot; rel=&quot;noreferrer&quot;&gt;Apple IIe Technical Note #2: Hardware Protocol for Doing DMA&lt;/a&gt; (starting on page 2 of that PDF) explains this. On page 4 of 9 of the note it says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In the Apple IIe a 6502A, a 2 MHz part is used instead of the 1 MHz 6502 used in the Apple ][+. Since the custom chips in the Apple IIe are MOS and slower than the TTL in the Apple ][+, the faster 6502A was used to guarantee better margins. For example, the 6502A sets up the address bus faster on the Apple IIe than the 6502 does in the Apple ][+.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-03-17T03:32:50.070" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14145" PostTypeId="2" ParentId="14129" CreationDate="2020-03-17T03:54:55.343" Score="6" Body="&lt;p&gt;The AGC, at least, didn't employ any such indirection. Calls to subroutines in other banks were performed via the &lt;a href=&quot;https://github.com/chrislgarry/Apollo-11/blob/master/Comanche055/INTER-BANK_COMMUNICATION.agc#L41&quot; rel=&quot;noreferrer&quot;&gt;BANKCALL&lt;/a&gt; routine (&lt;code&gt;TC BANKCALL&lt;/code&gt; followed by a &lt;code&gt;CADR&lt;/code&gt; pseudo-instruction containing the target label). CADR encoded the destination bank and address directly. If a routine moves because previous content in the same bank got longer or shorter, all callers would need to be updated. Calls to subroutines in the same bank, or subroutines in the first two &quot;fixed-fixed&quot; banks (which were always addressable regardless of the bank-switch register) were done by direct &lt;code&gt;TC&lt;/code&gt; jump, again encoding the address directly (in fact, since TC is opcode 0, the instruction word &lt;em&gt;is&lt;/em&gt; the address).&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2020-03-17T03:54:55.343" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14146" PostTypeId="2" ParentId="14141" CreationDate="2020-03-17T06:24:57.393" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I thought the whole point of the turbo switch was to enable compatibility with games that expected 4.77MHz.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11056/what-did-the-turbo-button-actually-do&quot;&gt;A very similar question&lt;/a&gt; was already asked here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One answer was that the &quot;Turbo&quot; button was often used for other purposes (such as switching an additional fan on or off) by users whose motherboards did not support the &quot;Turbo&quot; button.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When there were no more motherboards supporting the &quot;Turbo&quot; button any more, manufacturers still produced cases with &quot;Turbo&quot; button to support users who misused the &quot;Turbo&quot; button for such purposes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, ...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What was the purpose of the slow/fast turbo setting on PCs whose CPUs could not slow down to 4.77MHz?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;... as far as I remember there were also 486 class PCs where the &quot;Turbo&quot; button was used to switch between two different &quot;high&quot; frequencies (e.g. between 133 MHz and 60 MHz).&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2020-03-17T06:24:57.393" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14147" PostTypeId="2" ParentId="14141" CreationDate="2020-03-17T07:32:38.577" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I thought the whole point of the turbo switch was to enable compatibility with games that expected 4.77MHz. What was the purpose of the slow/fast turbo setting on PCs whose CPUs could not slow down to 4.77MHz?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The turbo switch lost that purpose much earlier. It did that job on 8088 PC compatible machines runing at slightly higher clock speeds (in the 8-10 MHz range). It didn't on 386+ machines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no way to slow down a Pentium (or 486, or 386; not sure about 286) machine to be as slow as a 4.77 MHz 8088. Even if DRAM refresh permitted running that slow, the CPU architecture would still be faster because of pipelining, wider buses, and other improvements -- we're talking almost 20 years of R&amp;amp;D here. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There also would be next to no demand for such a feature. Not many people wanted to run mid-80s games on fancy Pentiums. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been using PC compatible machines since the 386 in the late 80s, and for all that time, the switch was either used to (pointlessly) switch between &quot;a little slower&quot; and &quot;a little faster&quot;, or had no function at all. Practically everyone left it in &quot;turbo mode&quot; all the time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As others have pointed out, the display is a function of the case, switching between two jumpered values, and does not show the actual clock frequency. What the motherboard does with the low / high signal is entirely up to it. &lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-03-17T07:32:38.577" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14148" PostTypeId="2" ParentId="14141" CreationDate="2020-03-17T11:00:04.947" Score="29" Body="&lt;p&gt;Your premise that the point of the Turbo button was originally to slow down the computer to be timing compatible to an IBM PC/XT is correct. There was demand for that function, because a some of software, mostly games, were not synchronized to any timing source, but just scaled with the CPU frequency. some examples I encountered at that time are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/details/msdos_Bugs_1982&quot; rel=&quot;noreferrer&quot;&gt;Bugs, 1982&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/details/msdos_Digger_1983_1983&quot; rel=&quot;noreferrer&quot;&gt;Digger, 1983&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.elmerproductions.com/sp/faq.html#q_speedfixslow&quot; rel=&quot;noreferrer&quot;&gt;Sopwith, 1985&lt;/a&gt; (thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/10846/roger-lipscombe&quot;&gt;Roger Lipscombe&lt;/a&gt; for this late example)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As you correctly identified, more modern computers are unable to enter a mode that has the same speed as the IBM PC/XT. This actually started as early as&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1984: the Compaq Deskpro, containing an 8086 processor that executed notably faster than the IBM PC/XT on software that was bound by main memory performance. The 8088 of the PC is known to be limited by the bandwidth of its 8-bit bus, whereas the Compaq Deskpro had 16-bit memory access.&lt;/li&gt;&#xA;&lt;li&gt;Also 1984: the IBM AT, not only featuring a 16-bit memory bus, but also the 80286 processor that executes some instructions a lot faster than both the 8088 and the 8086.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Yet the Turbo button was still a useful feature. Even if the games did not run at the intended speed, they often were still playable at the slightly increased speed these machines had in de-turbo mode, while they were nearly unplayable in turbo mode. I remember quite well that I considered &quot;Bugs&quot; to be an unplayable game (on a 12MHz 80286 machine) until I had access to an old 8088 machine that had a 4,77MHz mode. On the other hand, digger was quite playable at the de-turbo mode of said 80286 machine (which happened to be 8 MHz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the relevance of IBM PC games that only were playable at 4.77MHz dropped significantly at the end of the eighties, the general concept of software (not only games) that failed to perform correctly on machines that were faster than the developers of the software tested on was a recurring theme. Some examples are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Turbo Pascal's delay loop (up to version Turbo Pascal 6.0): The machine speed counter overflowed and delays were to small. An example game that used this code is 20th Century Frog, 1988 &lt;a href=&quot;https://www.youtube.com/watch?v=R39nXL7i_c8&quot; rel=&quot;noreferrer&quot;&gt;Gameplay Video here&lt;/a&gt;. On a 486 machine with 33MHz CPU clock, the intro music (played via Timer interrupts) matched the intro animation (timed using Pascal's &lt;code&gt;delay&lt;/code&gt; function) only in de-turbo mode.&lt;/li&gt;&#xA;&lt;li&gt;Again Turbo Pascal's delay loop, this time in version 7.0 resulting in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12111/why-did-ms-dos-applications-built-using-turbo-pascal-fail-to-start-with-a-divisi&quot;&gt;Runtime Error 200&lt;/a&gt; on startup.&lt;/li&gt;&#xA;&lt;li&gt;A couple of games that synchronized their speed to video refresh, but actually expected to be at half the video refresh rate, because their game code took more than one frame to execute. On faster computers, these games suddenly ran at double speed, because they locked to every frame instead of every other frame. A notable example is the game &lt;a href=&quot;https://archive.org/details/msdos_Supaplex_1991&quot; rel=&quot;noreferrer&quot;&gt;Supaplex&lt;/a&gt;. There exists a &lt;a href=&quot;https://www.elmerproductions.com/sp/faq.html#q_speedfixslow&quot; rel=&quot;noreferrer&quot;&gt;wide-spread &quot;speed fix&quot; version&lt;/a&gt; that prevents running at 70fps instead of 35fps. Please note that the version at archive.org I linked does not seem to run at the intended speed in the javascript dosbox.&lt;/li&gt;&#xA;&lt;li&gt;Windows 95 on AMD K6 processors with 350 MHz or more, resulting in the patch called &lt;code&gt;AMDK6UPD&lt;/code&gt; (mentioned by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/3784/eric-towers&quot;&gt;Eric Towers&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So while the original purpose of the Turbo button, to be compatible to the IBM PC, was lost soon, the general concept of being able to slow down a machine to make a wider range of software run well on it was useful for a much longer time. As I observed it, the Turbo button started to disappear in the mid-90s, when multitasking got commonplace, and even games started to move to being Windows-95-based instead of DOS-based.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="10479" LastEditDate="2020-03-17T20:25:58.833" LastActivityDate="2020-03-17T20:25:58.833" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14149" PostTypeId="2" ParentId="14141" CreationDate="2020-03-17T12:51:49.510" Score="19" Body="&lt;p&gt;The purpose of the switch is to support CPUs that can work at different clock frequencies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the presence of a turbo switch and a frequency display on a case, do not necessarily imply that the CPU can actually work at different clock frequencies, because the case is a generic case which has not been designed for one specific CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I worked in PC assembly in the mid-90's when such systems were state of the art. The cases were generic ones supplied by cheap Chinese manufacturers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The LED displays can be configured by an array of jumpers to show any symbol you want. The turbo button will alternate the display between two different settings, as configured by these jumpers. You could e.g. have them alternate between 75 and 133. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the shop I worked for, we were instructed to set the LED displays to read &quot;HI&quot; and &quot;LO&quot;, no matter what processor was installed. This made assembly easier, since all displays could be configured identically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even when PCs were to be equipped with CPUs or motherboards that did not support a change of clock frequency, we were still configuring the displays. Because the shop had learned that customers would call for support when their turbo switch didn't work. But as long as the display flipped, the customers would be satisfied, even if their processor ran at exactly the same speed in either mode.&lt;/p&gt;&#xA;" OwnerUserId="16551" LastActivityDate="2020-03-17T12:51:49.510" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14150" PostTypeId="1" AcceptedAnswerId="14151" CreationDate="2020-03-17T15:15:33.773" Score="38" ViewCount="9183" Body="&lt;p&gt;Dave Cutler is well known for his contributions to operating systems, having led the effort on VAX &lt;a href=&quot;https://en.wikipedia.org/wiki/OpenVMS#Origin_and_name_changes&quot; rel=&quot;noreferrer&quot;&gt;VMS&lt;/a&gt; at DEC and Windows&amp;nbsp;NT at Microsoft. According to his Wikipedia page, he is also known for his &lt;a href=&quot;https://en.wikipedia.org/wiki/Dave_Cutler#Attitude_towards_Unix&quot; rel=&quot;noreferrer&quot;&gt;attitudes toward Unix&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[Cutler] expressed his low opinion of the Unix process input/output model by reciting &quot;Get a byte, get a byte, get a byte byte byte&quot; to the tune of the finale of Rossini's William Tell Overture.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While I am sure that the merits of Cutler's stated &quot;low opinion&quot; could be debated, I'm interested to better understand exactly what he was referring to here. There isn't any citation, and I haven't found a good explanation critiquing his criticism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What specific or fundamental difference between Unix and VMS or Windows&amp;nbsp;NT (which &lt;a href=&quot;https://www.itprotoday.com/windows-client/windows-nt-and-vms-rest-story&quot; rel=&quot;noreferrer&quot;&gt;borrowed heavily&lt;/a&gt; from VMS) was Cutler pillorying?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="535" LastEditDate="2020-03-19T13:30:29.670" LastActivityDate="2020-03-23T13:28:30.783" Title="How should we interpret Dave Cutler's criticism of Unix?" Tags="&lt;unix&gt;&lt;operating-system&gt;&lt;dec&gt;&lt;windows&gt;&lt;microsoft&gt;" AnswerCount="6" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14151" PostTypeId="2" ParentId="14150" CreationDate="2020-03-17T16:00:34.190" Score="56" Body="&lt;p&gt;The I/O model on &quot;Cutler systems&quot; -- RSX-11M, VAX/VMS, Windows NT -- is an asynchronous packet-driven I/O model, rather than the fundamentally synchronous I/O model of Unix.  At its core, you fire off an I/O request, and get a notification of when it's complete.  Meanwhile, execution continues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, it's trivial for the system to provide synchronous I/O routines on top of that: have the I/O request completion set a condition ('event flag') and then wait on that condition.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast, adding asynchrony on top of a synchronous I/O system is rather more involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This, I think, is the nub of Cutler's argument against Unix I/O.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can provide no citation, however, and I am also biased towards packet-driven I/O, so maybe it's just one (more) man's opinion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(No implication intended that packet I/O was a Cutler invention - it was certainly present in prior systems, and it was required to implement I/O that way in RSX-11M for compatibility.)&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-03-17T16:00:34.190" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="14152" PostTypeId="2" ParentId="14141" CreationDate="2020-03-17T16:31:50.573" Score="1" Body="&lt;p&gt;IIRC at the time cheaper cases were sold as XT/AT cases and in addition to taking AT motherboards had the mounting holes and turbo switches for old XT motherboards years after people stopped buying them new, while newer AT only cases were slightly more premium. Also some newer motherboards would still have a jumper to accept a turbo switch and would slow down from say 200mhz to 75mhz, possibly adjustable by jumpers on the motherboard, which may still serve a compatibility function with poorly designed software. This would also enable overclocking as the turbo speed could be overclocked while the slower speed would be stock or slower.&lt;/p&gt;&#xA;" OwnerUserId="16552" LastActivityDate="2020-03-17T16:31:50.573" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14153" PostTypeId="2" ParentId="14150" CreationDate="2020-03-17T17:04:38.370" Score="22" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;While I am sure that the merits of Cutler's stated &quot;low opinion&quot; could&#xA;  be debated, I'm interested to better understand exactly what he was&#xA;  referring to here. There's no citation, and I haven't found a good&#xA;  explanation critiquing his criticism.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Honestly, at face value, it's a naive criticism. Cutler was not naive, so, it's likely just a sound bite poke at UNIXs development model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But that said, when you look at the larger picture, notably the &quot;tools&quot; notion of UNIX (as expressed in books such as Software Tools by Kernighan and Plauger) they demonstrate writing code and using things such as &lt;code&gt;getc&lt;/code&gt; or &lt;code&gt;getchar&lt;/code&gt; along with &lt;code&gt;putc&lt;/code&gt; and &lt;code&gt;putchar&lt;/code&gt;. The simplistic interface of reading from standard input, processing it, and writing to standard output. It's the essence of the composability of software that &quot;does one thing and does it well&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are, indeed, &quot;get a byte, put a byte&quot;, and are well known to have a higher over head than block reads and writes. If you want I/O to perform well, it's best done in device size blocks (e.g. 1K, or 4K, depends on the device).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, in reality, underneath those &lt;code&gt;getc&lt;/code&gt; calls are block I/O calls. Underlying code loads up a buffer, and then works through that buffer, refilling as necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is higher function overhead, but not necessarily I/O overhead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps these were naively implemented back in the day (I doubt it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is/was nothing stopping UNIX processes from doing more efficient block I/O, but idiomatically, it was not presented that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VMS is in many ways the antithesis of UNIX, with its special file formats and dedicated utilities in contrast to the UNIX universal stream of bytes and composable tools model.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-03-17T17:04:38.370" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="14155" PostTypeId="2" ParentId="11056" CreationDate="2020-03-17T17:49:27.323" Score="1" Body="&lt;p&gt;386 and some early 486 board had still a Turbo button that slowed down the CPU speed. &#xA;I had a Vobis 386 computer that had an 8 MHz/25 MHz 386. &#xA;From what I recall in the manual was explained that was for reading copy protected floppies or software that didn't work at the higher speed.&lt;/p&gt;&#xA;" OwnerUserId="16554" LastActivityDate="2020-03-17T17:49:27.323" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14156" PostTypeId="2" ParentId="14136" CreationDate="2020-03-18T00:29:56.320" Score="7" Body="&lt;p&gt;As noted, MS-BASIC implementations such as those found in the Commodore used floating-point math for everything, and the performance implications of this were severe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the following program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 TI$=&quot;000000&quot;&#xA;20 A=32768:B=1:C=2&#xA;30 FOR I=1 TO 1000:A=A+B-C:NEXT&#xA;40 PRINT TI,A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Testing on VICE emulating an NTSC C64, the above code takes 320 ticks (5.33 seconds).  Changing the constants in the first line to &lt;code&gt;A=32768:B=16385:C=16384&lt;/code&gt; reduces this time to 280 ticks (4.67 seconds).  That's a 12% speed difference for the overall loop, merely as a consequence of the values of the numbers involved.  Considering the difference in magnitude between the &lt;code&gt;FOR&lt;/code&gt; loop's index and step size, the 12% speed difference represents a pretty huge difference in performance, purely as a result of the amount of time spent shifting floating-point numbers.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-03-18T00:29:56.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14158" PostTypeId="2" ParentId="14150" CreationDate="2020-03-18T12:46:54.620" Score="7" Body="&lt;p&gt;At that time, computing model was very rich API, complex CPUs, complex tools, etc. Filesystem were almost structured files oriented, etc. UNIX came with its &quot;uniform&quot; vision of I/O, everything is a file, a file is just a stream of bytes. That wasn't so easy for people trained on former OSes to understand why UNIX is a good model. While I loosely remember the debate over OSes (I used many of them so I saw how people debated on this), I can remember the same debate over CISC/RISC architectures. The same for compiler, there was a time were people thought that compiler as to be simple translator of very rich programming languages, but now it is more the converse and nobody would try to beat a compiler writing assembler by hand. For I/O I remember all those system engineers and developers which were semi-gods at choosing the right setting to obtain a very tricky effect... I think there is nothing very profound in Cutler's remark, two worlds were in &quot;fight&quot;, that's all, and the one that wins in the end is not Cutler's one and he probably knew it).&lt;/p&gt;&#xA;" OwnerUserId="11039" LastEditorUserId="3316" LastEditDate="2020-03-18T21:13:05.607" LastActivityDate="2020-03-18T21:13:05.607" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14159" PostTypeId="2" ParentId="14150" CreationDate="2020-03-18T14:05:25.260" Score="19" Body="&lt;p&gt;At the operating system level – as seen by applications – files in VMS are &lt;em&gt;very&lt;/em&gt; record oriented. &lt;a href=&quot;http://h30266.www3.hpe.com/odl/i64os/opsys/vmsos84/documentation/pdf/OVMS_731_file_app.PDF&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Guide to OpenVMS File Applications&lt;/strong&gt;&lt;/a&gt; (336 page, 2MB PDF) probably goes into far more detail than anyone should be expected to know, but you can get a feel from the Introduction (emphasis mine):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;1.1 File Concepts&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;A computer file is an organized collection of data stored on a mass storage volume&#xA;  and processed by a central processing unit (CPU). Data files are organized to&#xA;  accommodate the processing of data within the file by an application program.&#xA;  The &lt;strong&gt;basic unit of electronic data processing is the record&lt;/strong&gt;. A record is a collection&#xA;  of related data that the application program processes as a functional entity.&#xA;  For example, all the information about an employee, such as name, street&#xA;  address, city, and state, constitutes a personnel record. &lt;strong&gt;Records are made up&#xA;  of fields&lt;/strong&gt;, which are sets of contiguous bytes. For example, a person’s name or&#xA;  address might be a field. A byte is a group of binary digits (bits) that are used to&#xA;  represent a single character. You can also think of a field or an item as a group of&#xA;  bytes in a record that are related in some way.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;VMS normally imposes a very database-like view on files &lt;em&gt;at the operating-system level&lt;/em&gt;. In contrast, to Unix a file is just &quot;&lt;em&gt;a bag of bytes&lt;/em&gt;&quot; and any higher-level organisation is imposed on it by the application program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It &lt;em&gt;is&lt;/em&gt; possible to create VMS files that are little more than &quot;bags of bytes&quot; (using the &quot;&lt;em&gt;stream&lt;/em&gt;&quot; record-format), and – from my experience several years ago – doing so is pretty much mandatory if you want to port a &quot;typical Unix program&quot; to VMS... trying to do byte-by-byte file operations on a file organised (by the operating system) as fixed-length records was a recipe for problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VMS's record-level view of files goes quite a lot further than &quot;just&quot; reading/writing in fixed-sized chunks and includes built-in handling of record-locking, indexing, control over how files grow and a whole lot more (over 300+ pages more!) that I never had to get into.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although I cannot be certain, I strongly suspect it is the lack of this OS-level support for &quot;organised data&quot; files that Dave Cutler was complaining about.&lt;/p&gt;&#xA;" OwnerUserId="731" LastActivityDate="2020-03-18T14:05:25.260" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14160" PostTypeId="2" ParentId="12964" CreationDate="2020-03-18T16:44:43.700" Score="1" Body="&lt;p&gt;Because of the universality of printing terminals when ed was current.  An editor prompt on each &lt;em&gt;data&lt;/em&gt; line would have consumed space on the paper, which would have cut that much off of what you could type into each line, and see.  Printing terminals didn't autowrap, and typing blindly off the end of the line was Unpleasant.  Even if they had autowrap, that would have consumed more paper, and reduced the correspondence (on paper) between what you had typed the first time, versus what you'd see if you then printed it again (sans prompts).  (Conservation of paper was a significant issue, even if it was just to prevent you from becoming mired in an overlarge pile of paper from your session.)&lt;/p&gt;&#xA;" OwnerUserId="16236" LastActivityDate="2020-03-18T16:44:43.700" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14161" PostTypeId="1" CreationDate="2020-03-18T17:00:06.457" Score="54" ViewCount="8835" Body="&lt;p&gt;Anyone who has studied Unicode and is honest will admit that UTF-16 was kind of a mistake.  It was born from the early assumption that 16 bits would be enough for all of Unicode.  Then a hack was invented to extend it to 21 bits using &quot;surrogate pairs&quot;.  This led to lots of software not working correctly for these higher valued characters, which continues to this day, especially for display and editing-oriented applications (the dreaded &quot;double backspace bug&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also an issue of &quot;big-endian&quot; vs &quot;little-endian&quot; requiring a &quot;byte order mark&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much later, UTF-8 was invented and it has now become a consensus that UTF-8 is the best solution for pretty much all applications, since there is no special treatment of higher-valued characters and no byte-order-mark needed.  As a bonus, it's backwards-compatible with 7-bit ASCII.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of the problems with UTF-16 could have been avoided by being more forward-thinking at the beginning (I know hindsight is 20/20).  But would it have been conceivable for the inventors of Unicode to foresee that 16 bits would not be sufficient, to think of UTF-8 at the beginning, and only specify UTF-8 and UTF-32 as valid encodings for Unicode?  Is there any history to suggest that perhaps some people were more forward-thinking but their views were disregarded?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; I think the most concise criticism of UTF-16 is that it is a much more complex design than UTF-8, making it much more likely to be poorly understood by developers and thus poorly implemented and tested.  It's not so much that the design itself is &quot;broken&quot;.&lt;/p&gt;&#xA;" OwnerUserId="4468" LastEditorUserId="16270" LastEditDate="2020-03-19T10:25:56.430" LastActivityDate="2020-03-21T15:50:28.677" Title="Could we have avoided the whole UTF-16 fiasco?" Tags="&lt;unicode&gt;" AnswerCount="8" CommentCount="3" FavoriteCount="12" ClosedDate="2020-03-21T21:23:56.207" ContentLicense="CC BY-SA 4.0" />
  <row Id="14162" PostTypeId="2" ParentId="14161" CreationDate="2020-03-18T17:13:16.060" Score="45" Body="&lt;p&gt;The designers of Unicode did consider whether 16 bits would be sufficient, and &lt;a href=&quot;https://unicode.org/history/unicode88.pdf&quot; rel=&quot;noreferrer&quot;&gt;decided that they would be&lt;/a&gt;, based on their assumptions:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Unicode gives higher priority to ensuring utility for the future than to preserving past antiquities. Unicode aims in the first instance at the characters published in modern text (e.g. in the union of all newspapers and magazines printed in the world in 1988), whose number is undoubtedly far below 2&lt;sup&gt;14&lt;/sup&gt; = 16,384. Beyond those modern-use characters, all others may be defined to be obsolete or rare; these are better candidates for private-use registration than for congesting the public list of generally useful Unicodes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The 16-bit choice was based in part on the idea that Unicode would only encode modern characters. UCS-2 (the original encoding, initially called “Unicode”) was designed with this in mind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unicode was however extended to include “legacy” characters a few years after its introduction, which broke the initial assumption and required more code points than could be represented with 16 bits. If the Unicode designers had wanted to include legacy characters, they would presumably have used a different encoding. I’m not aware of any particular difficulty which would have made UTF-8 harder to design in 1988 than in 1992.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UTF-16 was designed as an extension to UCS-2 to address the latter’s limitations, and was published quite late in the game (1996, with Unicode 2.0). UTF-8 was designed in 1992, which answers your question, but raises the question of why UTF-16 was used; the answer to that is that it was deemed an acceptable compromise to fix problems with UCS-2, and that it was important to continue with something similar to UCS-2, given that a fair amount of software already used it (including Windows NT).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-03-18T17:47:04.300" LastActivityDate="2020-03-18T17:47:04.300" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14163" PostTypeId="2" ParentId="14150" CreationDate="2020-03-18T19:59:24.153" Score="3" Body="&lt;p&gt;Solely based on the source link to Dave's comment, I can't really tell what he meant. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, Benno Rice recently gave an excellent talk at linux.conf.au called &lt;a href=&quot;https://www.youtube.com/watch?v=9-IWMbJXoLM&quot; rel=&quot;nofollow noreferrer&quot;&gt;What UNIX Cost Us&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TL,DR of that talk is that many of UNIX's core assumptions, though extensible, no longer apply in current and next gen environments, which makes supporting new paradigms with them extremely difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example of this, consider services management. Windows has Services.msc, which was designed to be easy enough for your average high school grad to understand and use. Systemd is a step in that direction for Linux, but is reviled by many for UNIX &quot;nonconformance.&quot; Then you have OSes like FreeBSD that supposedly do things the UNIX way, but &lt;code&gt;init&lt;/code&gt; is so clunky even FreeBSD's own documentation suggests &lt;a href=&quot;https://www.freebsd.org/doc/handbook/configtuning-starting-services.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;simply using &lt;code&gt;cron&lt;/code&gt; jobs with &lt;code&gt;@reboot&lt;/code&gt; instead&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In some cases, it may make more sense to use cron(8) to start system services. This approach has a number of advantages as cron(8) runs these processes as the owner of the crontab(5). This allows regular users to start and maintain their own applications.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The @reboot feature of cron(8), may be used in place of the time specification. This causes the job to run when cron(8) is started, normally during system initialization.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="16563" LastEditorUserId="16563" LastEditDate="2020-03-21T22:00:22.763" LastActivityDate="2020-03-21T22:00:22.763" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="14164" PostTypeId="1" AcceptedAnswerId="14165" CreationDate="2020-03-18T21:32:03.900" Score="47" ViewCount="10152" Body="&lt;p&gt;&lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102645171&quot; rel=&quot;noreferrer&quot;&gt;I just saw this button in the Computer History Museum&lt;/a&gt;, and I'm wondering what is the context?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n4oVg.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n4oVg.jpg&quot; alt=&quot;Is MS DOS a feminist?&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Context removed, &lt;em&gt;&quot;Is MS DOS a feminist?&quot;&lt;/em&gt; is about the most non-sequitur thing I've seen.&lt;/p&gt;&#xA;" OwnerUserId="8579" LastActivityDate="2020-03-21T14:32:17.397" Title="What is the context of the button &quot;Is MS DOS a feminist?&quot;" Tags="&lt;ms-dos&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14165" PostTypeId="2" ParentId="14164" CreationDate="2020-03-18T21:38:26.543" Score="94" Body="&lt;p&gt;The honorific &quot;Ms.&quot; didn't always exist. It was popularized by the feminist movement as an alternative to Miss (woman is not yet married) and Mrs. (woman is married),&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But it  took feminist activist Sheila Michaels to bring [the &quot;Ms.&quot; honorific] into consciousness of the feminists of the 1960s and '70s. &lt;a href=&quot;https://www.abc.net.au/news/2017-09-09/james-valentine-ms-meaning-unintended/8886412&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Ms: The honorific with unintended meaning&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The idea was that a woman's standing shouldn't be related to her marital status. There was even a feminist periodical created by the same name &lt;a href=&quot;https://en.wikipedia.org/wiki/Ms._(magazine)&quot; rel=&quot;noreferrer&quot;&gt;Ms.&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is nothing more to it. &quot;Microsoft&quot; is abbreviated &quot;MS&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This honorific was controversial in the historical period when Microsoft DOS was the main operating system for PCs at that time and when misogynism was a bit more rampant in the world of computing.  Many considered it an amusing pun. Others thought it just said something about the wearer. As an artifact of its time it is an appropriate item for a museum that only computer historians might reflect upon.&lt;/p&gt;&#xA;" OwnerUserId="611" LastEditorUserId="8579" LastEditDate="2020-03-21T14:32:17.397" LastActivityDate="2020-03-21T14:32:17.397" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14166" PostTypeId="2" ParentId="14161" CreationDate="2020-03-18T22:21:21.620" Score="14" Body="&lt;p&gt;Unicode represented a compromise among a number of competing objectives.  Probably its biggest failing is its presumption that a single storage format could be suitable for string storage, string concatenation, text rendering, and text editing.  It sacrificed considerable storage density so that text editing could be performed without having to be aware of all the details of the character set, but then evolved in such a way as to negate that advantage.  If Unicode had specified a representation where all composite glyphs wre marked with start and end markers, then code which needs to format a piece of text could recognize composite glyphs and avoid splitting them without needing to have any idea of what they are.  As it is, however, Unicode has gone so far afield that accurately determining whether a line may be split between two code points may require scanning an arbitrary quantity of text before it &lt;em&gt;and&lt;/em&gt; having an up-to-date list of all supported country flags.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-03-18T22:21:21.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14167" PostTypeId="1" CreationDate="2020-03-18T23:37:40.193" Score="2" ViewCount="322" Body="&lt;p&gt;Way back in the late 80s there was a game that centered around maintaining and running a power station for the local town. It wasnt particually complex or graphic.. just fun. On the lhs of the screen was some text about what was happening and the required power output the town needed, whilst on the RHS was an internal view of the power station (might have been nuclear). From there you could control the output, rods, pumps etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Game I think was on Apple II (but may have actually been on an Apple clone... like Cat Computer from Dick Smith).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone know what this game might be?&lt;/p&gt;&#xA;" OwnerUserId="16564" LastEditorUserId="10854" LastEditDate="2020-03-19T00:36:04.973" LastActivityDate="2020-03-20T00:06:36.313" Title="80s game about running and maintaining a power station" Tags="&lt;apple-ii&gt;&lt;identify-this-game&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14168" PostTypeId="2" ParentId="14161" CreationDate="2020-03-19T00:57:06.790" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But would it have been conceivable for the inventors of Unicode to&#xA;  forsee that 16 bits would not be sufficient, to think of UTF-8 at&#xA;  the beginning, and only specify UTF-8 and UTF-32 as valid encodings&#xA;  for Unicode? Is there any history to suggest that perhaps some&#xA;  people were more forward thinking but their views where disregarded?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The problem was indeed foreseen, and the views of those who wanted to&#xA;start with a much larger number of code points were indeed put forward&#xA;and disregarded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 1990 draft of ISO 10646 offered a 2,147,483,648 code point&#xA;space¹ and the following encodings:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;UCS-4, encoding all characters in single 32-bit values.&lt;/li&gt;&#xA;&lt;li&gt;UCS-2, encoding only the Basic Multilingual Plane.&lt;/li&gt;&#xA;&lt;li&gt;UTF-1, a variable-length encoding.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note that while they did offer a 16-bit encoding UCS-2, this is &lt;em&gt;not&lt;/em&gt;&#xA;the same as UTF-16 because it's not variable length (it's simply&#xA;impossible to encode all the code points in it). Arguably, even though&#xA;UCS-2 likely would have been extensively used, this would still have&#xA;been simpler than the situation in which we find ourselves today with&#xA;UTF-16.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, &lt;a href=&quot;https://en.wikipedia.org/wiki/Universal_Coded_Character_Set#History&quot; rel=&quot;noreferrer&quot;&gt;according to Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In 1990, therefore, two initiatives for a universal character set&#xA;  existed: Unicode, with 16 bits for every character (65,536 possible&#xA;  characters), and ISO 10646. The software companies refused to accept&#xA;  the complexity and size requirement of the ISO standard and were&#xA;  able to convince a number of ISO National Bodies to vote against it.&#xA;  The ISO standardizers realized they could not continue to support&#xA;  the standard in its current state and negotiated the unification of&#xA;  their standard with Unicode....&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Meanwhile, in the passage of time, the situation changed in the&#xA;  Unicode standard itself: 65,536 characters came to appear&#xA;  insufficient, and the standard from version 2.0 and onwards supports&#xA;  encoding of 1,112,064 code points from 17 planes by means of the&#xA;  UTF-16 surrogate mechanism. For that reason, ISO 10646 was limited&#xA;  to contain as many characters as could be encoded by UTF-16 and no&#xA;  more, that is, a little over a million characters instead of over&#xA;  679 million. The UCS-4 encoding of ISO 10646 was incorporated into&#xA;  the Unicode standard with the limitation to the UTF-16 range and&#xA;  under the name UTF-32, although it has almost no use outside&#xA;  programs' internal data.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹&lt;sub&gt;Certain code points that involved numbers in &quot;control character&quot;&#xA;ranges  were not allowed to be used, so the total number of code points&#xA;in this space that were available to be encoded was 679,477,248.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-03-20T01:08:44.777" LastActivityDate="2020-03-20T01:08:44.777" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14169" PostTypeId="1" AcceptedAnswerId="14171" CreationDate="2020-03-19T04:51:05.267" Score="56" ViewCount="4902" Body="&lt;p&gt;In the &lt;em&gt;operating system&lt;/em&gt; (DOS) of IBM PCs, newlines were represented by a carriage return (CR) character, followed by a line feed (LF) character.  The motion of a printer or teletype receiving such a combination would be first to move to the left, then down, and can be drawn this way:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;---&#xA;|&#xA;V&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or &lt;KBD&gt;⬐&lt;/KBD&gt; (if your browser font supports this)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the &lt;em&gt;keyboards&lt;/em&gt; of those same IBM PCs used a different symbol on the return key: an arrow first drawn down, and then to the left.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   |&#xA;&amp;lt;---&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or &lt;KBD&gt;⏎&lt;/KBD&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why didn't the return key symbol match the motion of a CR-LF?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(If the intent was to have a symbol for just the CR, &lt;code&gt;|&amp;lt;---&lt;/code&gt; ( or &lt;KBD&gt;⇤&lt;/KBD&gt;) would have been better.)&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="8883" LastEditDate="2020-03-20T18:15:03.147" LastActivityDate="2020-07-14T19:43:26.417" Title="Why was the return key symbol ⏎ drawn differently from the motion of a CR-LF?" Tags="&lt;ibm-pc&gt;&lt;keyboards&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14170" PostTypeId="2" ParentId="14169" CreationDate="2020-03-19T05:32:53.940" Score="51" Body="&lt;p&gt;Even though the CR usually goes before the LF in ASCII text, most printer mechanisms actually perform the LF before, or during, the CR.  So the shape of the arrow is actually accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is even true of mechanical typewriters, in which the carriage is returned through a physical lever which, before enough force is transmitted through it to move the carriage, moves sufficiently to advance the page by one line.  CR is sent first because it generally takes longer to perform the carriage movement than the line feed.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-03-19T05:32:53.940" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="14171" PostTypeId="2" ParentId="14169" CreationDate="2020-03-19T10:05:14.487" Score="38" Body="&lt;p&gt;&lt;a href=&quot;/a/14170/6659&quot;&gt;Chromatix answer&lt;/a&gt; already perfectly nails the technical background. Especially the reference to classic typewriter mechanics, predating any TTY or terminal, were the symbol used quite closely follows the hand movement when isueing a new line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Historically it may be interesting to look at the development. The combined function as a single key was only introduced with electric typewriters - like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Friden_Flexowriter&quot; rel=&quot;noreferrer&quot;&gt;Friden Flexowriter&lt;/a&gt; with 'CAR RET'. Even as late as 1961, when the new &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Selectric_typewriter&quot; rel=&quot;noreferrer&quot;&gt;IBM Selectric&lt;/a&gt; was introduced, keyboards didn't feature the symbol but had 'Return' written in text.  The same was true for IBM's first dedicated terminal system, the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1050&quot; rel=&quot;noreferrer&quot;&gt;1050&lt;/a&gt; (and that was the basis for the /360 console).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn't until the 2741 in 1965 that the symbol found its way onto the key cap - and stayed there until today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Noteworthy here is maybe that neither CR nor LF was used in its mainframe environment, but NEL - Next Line - which in turn wasn't considered part of an input line but part of the protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While using CR/NL instead of NL/CR may support a speed-up due the way that TTY/typewriter mechanics operate (*1), this sequence also adds freedom in further transmission optimisation. Many TTYs had the ability to combine CR and LF into a single function (often switchable), to reduce the number of characters to be transmitted/stored (*2). Doing so makes more sense on LF than CR, as CR alone does have a useful application for overwriting a line - like adding underline or other overstrike, while LF always advanced to the next line which doesn't make much sense without repositioning the carriage as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, TTYs configured for automatic CR on LF, would act the same, no matter if only a LF or CR/LF was sent, being agnostic to either variant, but still allow overwrite with CR alone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the reason why UNIX and other TTY-based systems of that time use LF to mark a line end. They expect TTYs (as well as glass TTY) to be set to include an implied CR when LF was received. Here it was less of a speed concern, but simplification of text handling as now (like with NEL) a single character did symbolize line end, while still keeping compatibility with (TTY) output equipment, e.g. when dumping a file.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Side note about symbol usage: Already during the 1930s European TTY manufacturers replaced country specific label, like German WR/ZL for CR/LF, with symbols. Using &lt;KBD&gt;&amp;lt;&lt;/KBD&gt; for CR and &lt;KBD&gt;≡&lt;/KBD&gt; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Triple_bar&quot; rel=&quot;noreferrer&quot;&gt;Tripple Bar&lt;/a&gt;) for LF.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Being processed by independent Hardware, thus able to act in parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Depending on the device at the cost of inserting additional space.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-19T19:15:50.950" LastActivityDate="2020-03-19T19:15:50.950" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="14172" PostTypeId="2" ParentId="14161" CreationDate="2020-03-19T11:31:02.910" Score="22" Body="&lt;p&gt;Cultural factors played a role.  Western creators of Unicode expected that unifying East Asian ideographs would be similar to unifying Western fonts (roman, italics...) and that they get to decide where the line between modern and unusual characters lies.  This proved to be too optimistic.  For the unification, the devil was in the details, but also in the need of processing of multi-lingual documents and databases: variation selectors were already breaking the 16 bits per character principle, like UTF-16 later did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 2000, PRC published their GB 18030 standard as mandatory for all software applications marketed for China.  At this point, at the latest, it &lt;a href=&quot;http://icu-project.org/docs/papers/gb18030.html&quot; rel=&quot;noreferrer&quot;&gt;became obvious&lt;/a&gt; that Unicode Consortium wasn't going to have a free hand in inclusion of characters if they want their standard to remain relevant world wide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this is a part of string representation evolution.  Starting with external and internal encoding to be a simple character array, through a phase where fixed character width was preferred for internal encoding and variable character width for storage and transmission, to a final phase where the complexity of the problem requires variable character width everywhere.  We are now somewhere between the middle phase and the last one.  Was such evolution foreseeable?  Maybe.  But the arrays of characters have done a lot of useful work in their own time due to their simplicity of processing.&lt;/p&gt;&#xA;" OwnerUserId="9130" LastActivityDate="2020-03-19T11:31:02.910" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14173" PostTypeId="2" ParentId="6301" CreationDate="2020-03-19T13:54:40.693" Score="2" Body="&lt;p&gt;A DECtape labelled TS9 has been round in Richard Greenblatt's house.  Given other labels found in the &lt;code&gt;RG; FD 4/1/68&lt;/code&gt; file, it's likely it would have a copy of PDP-6 ITS.&lt;/p&gt;&#xA;&lt;p&gt;EDIT.&lt;/p&gt;&#xA;&lt;p&gt;The tape has been imaged and analyzed.  There are files from ITS, but not ITS itself.&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2020-08-28T09:15:48.947" LastActivityDate="2020-08-28T09:15:48.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14174" PostTypeId="2" ParentId="14167" CreationDate="2020-03-19T15:05:15.263" Score="2" Body="&lt;p&gt;&lt;strong&gt;Creative Computing Magazine&lt;/strong&gt; printed Stephen R. Berggren's &lt;a href=&quot;https://archive.org/details/creativecomputing-1980-12/page/n131/mode/2up/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple Nuclear Power Plant&lt;/a&gt; simulator in December 1980. There were many variants/developments on this for different platforms, and some added graphics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a playable version of the original at &lt;a href=&quot;https://github.com/kevinr/apple-nuclear-power-plant-sim&quot; rel=&quot;nofollow noreferrer&quot;&gt;kevinr/apple-nuclear-power-plant-sim: Stephen R. Berggren's 1980 Apple Nuclear Power Plant sim&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-03-19T15:05:15.263" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14176" PostTypeId="2" ParentId="14161" CreationDate="2020-03-19T15:39:26.447" Score="7" Body="&lt;p&gt;It would've been an incredibly hard sell.  What a lot of people don't realize, even back in the day, was how fundamental 16-bit values were to the original Unicode standards. Until version 3.0 was published in September 1999, Unicode required that all processing be done using 16-bit values.  This meant that neither UTF-8 nor UTF-32 could actually be called Unicode, and any program that worked on these encodings as-is without converting them a 16-bit representation for processing weren't Unicode conformant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even the distinction between UCS-2 and UTF-16 was considered unnecessary.  There was quite a bit of doublespeak in the standard in order to maintain the fiction that the original goal of having one character per 16-bit value hadn't been broken by the addition of surrogate pairs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given this insistence on 16-bit values by the Unicode Consortium for almost entire decade, despite the much more practical and honest approach of the ISO 10646 committee, despite how UTF-8 was proving itself to be what could actually replace ASCII, it's hard to see how anyone could've convinced them to take a different direction.  I'm sure there's still people involved with the Unicode Consortium that still think 16-bit values are all you really need.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2020-03-19T15:39:26.447" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14177" PostTypeId="2" ParentId="14161" CreationDate="2020-03-19T15:52:46.443" Score="6" Body="&lt;p&gt;TL;DR: UTF-8 and any other variable-length encodings are good &quot;external&quot;, &quot;exchange&quot; format, but bad &quot;internal processing&quot; format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You start from a very wrong premise that &quot;UTF-16 was kind of a mistake&quot; and &quot;UTF-8 is the best solution for pretty much all applications&quot;. It isn't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UTF-8 is very convenient in that you don't need to think about new code points—it can and will encode whatever new appears in Unicode standard and that its compatibility with lower part of ASCII often simplifies things even more. Thus UTF-8 is very good for data storage and transfer:  you implement/use relevant lib in your program or write &quot;UTF-8 encoded string&quot; in your protocol/API spec once and it just keeps working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However when you need to actually process text and do it &lt;em&gt;fast&lt;/em&gt;, you will get hit by the greatest drawback of UTF-8: it is a variable length encoding. With any fixed length encoding you can trivially jump to an arbitrary character or &lt;em&gt;n&lt;/em&gt; characters back/forward, and find string length from buffer length. More complex operations like slicing strings or fast substring search algorithms directly depend on this.  In UTF-8, it is way more complex:  you need to scan buffer for character positions all the time or index them soo many high-performance tricks just simply don't work. BTW, endianness is not a problem in internal representation, since library/VM simply &quot;knows&quot; its internals and doesn't need to &quot;figure out&quot; anything about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So there you are:  a range of applications where UTF-8 is far from best and fixed length encodings shine. So, how do VMs and string/regexp libraries—two of the most common types of programs that implement some kind of internal string representation—get around this problem?  Most often they either completely limit itself to some kind of fixed width or implement several different string representations with specific width and try to fit any incoming string in whatever smaller form it fits best and then introduces separate internal implementations for all necessary functions for each width where authors can use all the usual 8-bit era tricks trivially adjusted, but constant number of bits. Sometimes UTF-8 is also added to the list just to be sure in hope that most strings will fit into internal fixed width representations and whatever won't and will need to fall back to slower algorithms will be minority. Since most UTF-16 text doesn't use anything out of 65536 range, you only need to scan it once—which is very fast and can be greatly optimized thanks to its fixed width nature—to make sure it fits, mark type in internal representation and then go ahead and use fast functions. Sometimes implementations go even further and simply treat all the UTF dangling bits—like surrogates—as entirely separate character. Why?  The entire JavaScript string spec is written that way!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Perl VM tries to use 8-bit and falls back to convoluted mess of locale functions and UTF-8 strings (no UTF-16 here, but it is still same scheme of trying to fit a string into fixed width representation and only falling back when necessary).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Guide/Internal_strings&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mozilla internals use 8-bit and 16-bit strings&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.python.org/dev/peps/pep-0393/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Python 3 has 8, 16, and 32-bit fixed width and UTF-8 logic&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://userguide.icu-project.org/strings/utf-8&quot; rel=&quot;nofollow noreferrer&quot;&gt;ICU library uses 16-bit&lt;/a&gt; (it allows surrogates, but they're treated as separate characters instead of forming single code point).&lt;/li&gt;&#xA;&lt;li&gt;As already said, ECMAScript/JavaScript describes string behavior pretty much the same as ICU above.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://pcre.org/pcre.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCRE compiles separate functions for 8, 16 and 32-bit&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="8726" LastEditorUserId="14716" LastEditDate="2020-03-21T09:44:12.247" LastActivityDate="2020-03-21T09:44:12.247" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14178" PostTypeId="2" ParentId="14167" CreationDate="2020-03-19T17:10:30.317" Score="4" Body="&lt;p&gt;Muse's 1979 classic &lt;a href=&quot;https://en.wikipedia.org/wiki/Three_Mile_Island_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Three Mile Island&lt;/a&gt; might be it.  It was text and lo-res graphics; there are a bunch of screen shots on &lt;a href=&quot;https://www.mobygames.com/game/three-mile-island&quot; rel=&quot;nofollow noreferrer&quot;&gt;MobyGames&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2020-03-19T17:10:30.317" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14179" PostTypeId="2" ParentId="13361" CreationDate="2020-03-19T19:20:05.080" Score="1" Body="&lt;p&gt;As someone who developed on PDP-8 and PDP-11 computers and managed an effort on a 6800, I will say that the 6800 is neither.  Furthermore, the PDP-8 and PDP-11 are very different architectures, and their assembler is quite different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of a machine which is similar to the PDP-8 is the HP-2100, even though it is 16 bits, the instructions are much more similar and the architecture is more similar to the PDP-8.  Certainly more so than the PDP-11 might be similar to the PDP-8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am familiar with several minicomputers which were built by various companies for various reasons.  For example Stromberg , and built a 16 bit computer to control telephone switches.  I knew the engineers who built it and saw it operating.  After building the machine they elected to go with a commercially OTS computer.  Their computer was 16 bits, and while they did some PDP-8ish things, it may have been closer to a PDP-11, but not by much.  Enough so, that a comparison would be akin to comparing Belarus tractors to John Deer Tractors. Similar that they are tractors, but created by different designers, with sometimes different requirements.&lt;/p&gt;&#xA;" OwnerUserId="16588" LastActivityDate="2020-03-19T19:20:05.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14180" PostTypeId="2" ParentId="14141" CreationDate="2020-03-19T19:38:05.333" Score="2" Body="&lt;p&gt;One nuance to the Pentium 133 is that it used &lt;a href=&quot;https://en.wikipedia.org/wiki/Dynamic_logic_(digital_electronics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;precharge, domino logic&lt;/a&gt; (please correct me if I am wrong; I recall this from an Intel presentation).  This logic requires a minimum speed to operate.  This minimum speed is one reason that you could not have a legacy &quot;turbo&quot; switch change the speed, because it would violate the logic timing, which you could consider to be something like DRAM.  &lt;/p&gt;&#xA;" OwnerUserId="15461" LastActivityDate="2020-03-19T19:38:05.333" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14181" PostTypeId="1" AcceptedAnswerId="14182" CreationDate="2020-03-19T22:09:40.807" Score="5" ViewCount="629" Body="&lt;p&gt;Related to question&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4413/what-is-the-best-way-to-obtain-old-versions-of-ms-dos-and-windows&quot;&gt;What is the best way to obtain old versions of MS-DOS and Windows?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;When will the copyrights on various versions of Windows and DOS expire?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once they expire I presume one could then legally download a copy from an online archive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that DOS 2.0 was already made open-source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/microsoft/MS-DOS&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/microsoft/MS-DOS&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13468" LastActivityDate="2020-03-19T22:14:44.130" Title="When will the copyrights on various versions of Windows and DOS expire?" Tags="&lt;ms-dos&gt;&lt;windows-98&gt;&lt;windows-3.x&gt;&lt;windows-95&gt;&lt;windows-me&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14182" PostTypeId="2" ParentId="14181" CreationDate="2020-03-19T22:14:44.130" Score="11" Body="&lt;p&gt;For works &quot;made for hire&quot; in the USA after 1978, copyright extends for 95 years after the date of first publication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for practical purposes, it depends entirely on when (or if) Microsoft decides to put them in the public domain.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2020-03-19T22:14:44.130" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14184" PostTypeId="2" ParentId="14161" CreationDate="2020-03-20T00:13:51.713" Score="7" Body="&lt;p&gt;Yes, absolutely, if not for some big players in the Unicode consortium &lt;strong&gt;heavily pushing an agenda for a 16-bit fixed-size character set&lt;/strong&gt; early-on. On the ISO 10646 side, it was always assumed that a 16-bit character set would be insufficient. They had other things wrong that kept them from gaining traction though, and in 1990 a unification with Unicode was negotiated. Since the unification, Unicode has always been larger than 16-bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your comment that&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Much later, UTF-8 was invented...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;is ahistorical. &lt;a href=&quot;https://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;UTF-8 was invented soon after, in 1992&lt;/a&gt;, before Unicode was in widespread use. But at the time Microsoft was still pressing ahead with their UCS-2 agenda, treating the non-BMP characters as unimportant, because their most important goal was to displace the standard text-based protocols and file formats of the emerging internet with their own creations they could control. Obsoleting 8-bit code-unit text was a big part of that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then of course Sun and Java came along and carried UCS-2/UTF-16 forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If either of these things hadn't happened, it's very plausible that we could have gone straight to UTF-8 without all the UTF-16 headaches.&lt;/p&gt;&#xA;" OwnerUserId="2070" LastEditorUserId="2070" LastEditDate="2020-03-20T21:47:26.583" LastActivityDate="2020-03-20T21:47:26.583" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14185" PostTypeId="1" CreationDate="2020-03-20T01:50:42.187" Score="3" ViewCount="291" Body="&lt;p&gt;Nanodata was a Buffalo, New York company that was formed in 1971 and seems to have sold its first products in 1973. They filed for bankruptcy in 1982, though they may have carried on business for a couple of years after that.[&lt;a href=&quot;https://www.courtlistener.com/opinion/1944549/in-re-nanodata-computer-corp/&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They seem to have manufactured two computers, the QM-1 (possibly also known as the &quot;MultiMicroMachine&quot;) and the QMX. According to &lt;a href=&quot;http://www.bitsavers.org/pdf/nanodata/QM-1_Ad_CmputerDesign_Apr78.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;a 1978 brochure&lt;/a&gt; The QM-1 could emulate many other computers and peripherals: &quot;A 'typical' customer configuration sells for $280K and includes emulators of the PDP-11, Data General Nova, IBM 360, etc.&quot; The only documentation I've seen related to any of this is &lt;a href=&quot;http://www.bitsavers.org/pdf/nanodata/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Bitsavers archive&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the history of this company? How well did their computers sell, and who used them? Has anybody (outside of the company itself) provided reviews of their systems describing their good and bad points, and how they compared to other systems of the day?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-06-01T15:33:22.467" Title="What was the history of Nanodata Corporation?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14186" PostTypeId="1" AcceptedAnswerId="14187" CreationDate="2020-03-20T02:20:54.490" Score="6" ViewCount="449" Body="&lt;p&gt;Commodore produced a number of different floppy diskette drive units, both 8&quot; and 5.25&quot;, over the course of its history. Can someone provide a chronological list of the drives, their release dates, brief specifications, and ideally links to further information for each drive? I'm particularly interested in drive units predating the 1541.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="3290" LastEditDate="2020-04-26T12:50:41.983" LastActivityDate="2020-04-29T16:26:44.613" Title="What's the timeline of Commodore diskette drives?" Tags="&lt;history&gt;&lt;floppy-disk&gt;&lt;commodore&gt;&lt;disk-drive&gt;&lt;commodore-pet&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14187" PostTypeId="2" ParentId="14186" CreationDate="2020-03-20T08:51:17.770" Score="12" Body="&lt;p&gt;You can get a relative ordering by looking at DOS versions for the drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;IEEE-488 drives&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2040 - first drive, 5.25&quot;x2@170K, 1979, DOS 1.0&lt;/li&gt;&#xA;&lt;li&gt;3040 - 5.25&quot;x2@170k in Europe, 1979, DOS 1.2&lt;/li&gt;&#xA;&lt;li&gt;4040 - 5.25&quot;x2@170k, 1980, DOS 2.0&lt;/li&gt;&#xA;&lt;li&gt;2031 - 5.25&quot;x1@170k, 1980, DOS 2.0&lt;/li&gt;&#xA;&lt;li&gt;4031 - 5.25&quot;x2@170k, 1980, DOS 2.0&lt;/li&gt;&#xA;&lt;li&gt;8050 - 5.25&quot;x2@521k, 1980, DOS 2.5&lt;/li&gt;&#xA;&lt;li&gt;8250 - 5.25&quot;x2@1042k (double-sided), 1981, DOS 2.7&lt;/li&gt;&#xA;&lt;li&gt;8060 - 8&quot;x1@750k, 1984, DOS 2.7&lt;/li&gt;&#xA;&lt;li&gt;8061 - 8&quot;x2@800k, 1984, DOS 2.7&lt;/li&gt;&#xA;&lt;li&gt;8062 - 8&quot;x2@1.6M, 1984, DOS 2.7&lt;/li&gt;&#xA;&lt;li&gt;SFD-1001 - 5.25&quot;x1@1M, 1984, DOS 2.7&lt;/li&gt;&#xA;&lt;li&gt;8280 - 8&quot;x2@1M, 1984, DOS 3.0&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Serial drives&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1540 - 5.25&quot;x1@170k, 1980, DOS 2.6&lt;/li&gt;&#xA;&lt;li&gt;1541 - 5.25&quot;x1@170k, 1982 as VIC-1541 with VIC colors, DOS 2.6&lt;/li&gt;&#xA;&lt;li&gt;1551 - 5.25&quot;x1@170k, 1984, DOS 2.6&lt;/li&gt;&#xA;&lt;li&gt;1570 - 5.25&quot;x1@170k, 1985, DOS 3.0&lt;/li&gt;&#xA;&lt;li&gt;1571 - 5.25&quot;x1@340k (double-sided), 1985, DOS 3.0&lt;/li&gt;&#xA;&lt;li&gt;1572 - 5.25&quot;x1@340k, 1985, DOS 3.0&lt;/li&gt;&#xA;&lt;li&gt;1541C - 5.25&quot;x1@170k, 1986, DOS 2.6&lt;/li&gt;&#xA;&lt;li&gt;1581 - 3.5&quot;x1@800k, 1987, DOS 10.0&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There were also other compatible drives like the MSD-2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some useful pages: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/mist64/cbmsrc&quot; rel=&quot;nofollow noreferrer&quot;&gt;cbmsrc github&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.6502.org/users/andre/petindex/drives/roms/index.html#dos1x&quot; rel=&quot;nofollow noreferrer&quot;&gt;PET index - DOS ROMs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Template:Commodore_disk_drives&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia template for Commodore disk&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.floodgap.com/retrobits/ckb/secret/periph.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Secret World of Commodore drives&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://cbmmuseum.kuto.de/floppy.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;cbmmuseum&lt;/a&gt; floppy pages (in German)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;(edit) &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.cbm/9-Gntfcc9Rs/0Ps_DqRyrIwJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Canonical List of Commodore Computer Equipment&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3328" LastEditorUserId="3328" LastEditDate="2020-04-25T00:50:19.520" LastActivityDate="2020-04-25T00:50:19.520" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14189" PostTypeId="1" AcceptedAnswerId="14195" CreationDate="2020-03-20T15:27:06.543" Score="6" ViewCount="431" Body="&lt;p&gt;I was delighted to learn there is an &lt;a href=&quot;https://github.com/rust-console/cargo-n64&quot; rel=&quot;nofollow noreferrer&quot;&gt;integrated toolchain for Rust development&lt;/a&gt; that supports the Nintendo 64. According to the documentation:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For copyright purposes, the IPL3 binary is not included in this package. Collecting a working IPL3 binary is left as an exercise for the reader.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;My question is about IPL3 (aka Initial Program Loader 3). It sounds like something you'd find in a Nintendo SDK to me.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Where is IPL3 documented?&lt;/li&gt;&#xA;&lt;li&gt;What is the copyright issue surrounding the documentation or a sample binary?&lt;/li&gt;&#xA;&lt;li&gt;How did a developer go about creating or obtaining an IPL3 for their game?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Either the historical information about how developers did this in the late 1990s, or some modern explanation from the N64 Homebrew community, should be useful.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-03-21T12:19:09.770" LastActivityDate="2020-03-21T15:33:42.000" Title="What is the Nintendo 64 IPL3 and how could it be created by Rust developers?" Tags="&lt;nintendo-64&gt;&lt;copy-protection&gt;&lt;homemade&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14190" PostTypeId="1" CreationDate="2020-03-20T17:14:56.593" Score="4" ViewCount="308" Body="&lt;p&gt;We are talking about a &lt;strong&gt;hardware&lt;/strong&gt; (and not software over hardware, as for example in some games on the SNES console) tile engine with multi-overlapping rectangular  (rather than square, when the image of a tall object on the bottom line of the tile overlaps 1-3 lines of tiles higher in the plane) tiles and without a full frame buffer - a maximum of a double linear buffer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose that it was possible in some of the arcade machines of the heyday of 2D - but my erudition is not enough. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FUOmX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FUOmX.png&quot; alt=&quot;For example, a typical tilemap with tiles, conditionally, 16 by 32 pixels&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps, due to the complexity of the implementation, such systems simply did not make sense or rested on some kind of hardware bottleneck? And then the (V)RAM fell in price ...&lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2020-03-20T23:20:57.633" Title="Hardware implementation of the isometric tile engine. Is it possible, did it exist?" Tags="&lt;hardware&gt;&lt;graphics&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14191" PostTypeId="2" ParentId="14190" CreationDate="2020-03-20T23:20:57.633" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;is it possible&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, but what would it add to a 2D sprite/blitter with masking (aka transparency) ? Basically those are tiles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some sophisticated hardware could have some notion of priority between those tiles to choose which one to display &quot;on top&quot; of the others. And maybe handle collisions (only useful between field objects). That would be an improvement. But that would require to invent a new 3D coordinate system&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But now, think of a console/hardware where most of the games would &lt;em&gt;have&lt;/em&gt; to be isometric to benefit that feature?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2D tiles/sprites/blitter objects are much more generalist and can do isometric without problems.&#xA;With software, &quot;just&quot; code efficient algorithms for priority display and you're done (I know that the priority/collision routines for Cadaver (68k) are pretty well optimized, but they only apply to objects, not walls).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even 8 bit machines had isometric games (Speccy had &lt;em&gt;a lot&lt;/em&gt; of good ones) and 16 bit machines (Atari/Amiga) also had their share. Some examples exist in arcade games (Marble Madness, Paperboy, Escape from planet of Robot monsters, all using &quot;classic&quot; tiling system) but they are quite rare in arcade form. Isometric games are mostly action/adventure, more popular on generalist computers than on consoles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the benefit of a dedicated hardware to do isometric games is dubious.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-03-20T23:20:57.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14192" PostTypeId="1" CreationDate="2020-03-21T00:55:11.843" Score="9" ViewCount="445" Body="&lt;p&gt;I found my old atari 130XE, full of dust. I have the power supply but I don't have connection cables and controls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've searched in eBay, Amazon and such for controls and there are plenty of them. My problem is about connection cables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone tell me what kind of cables do I need. For console-Monitor and console-Tv ?&lt;/p&gt;&#xA;" OwnerUserId="16611" LastEditorUserId="3316" LastEditDate="2020-03-21T08:34:14.090" LastActivityDate="2020-10-30T20:33:13.490" Title="What cables do I need to connect an Atari 130XE to a monitor and a television set?" Tags="&lt;atari&gt;&lt;composite-video&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14193" PostTypeId="2" ParentId="14192" CreationDate="2020-03-21T01:49:53.020" Score="7" Body="&lt;p&gt;The 130XE has two display outputs, as you've probably already seen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest one to use is a VHF/UHF TV output, which should go to a TV that supports analogue TV standards.  It should be relatively easy to find a TV antenna cable; you can combine it with the output of a set-top box, if needed, with a UHF Y adapter.  You'll need to tune the TV to whichever frequency the Atari puts its signal on - probably channels 4 or 36, depending on which PAL region it was sold for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also an output compatible with composite-video, but it appears on a non-standard port based around a 5-pin DIN plug.  Many TVs will accept composite video on a yellow RCA jack, even if they don't support analogue RF input.  The trouble is obtaining a cable between Atari 5-pin and RCA.  The plugs themselves are easy to obtain, so you could make one yourself, by cutting one end off an RCA-RCA composite video cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ne7PG.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ne7PG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might have more luck searching for Atari XL-series cables; they're essentially the same as on the Atari XE series, but the XL series is better known.  The 800XL might be the most popular model to use as a search term.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-03-21T06:33:58.057" LastActivityDate="2020-03-21T06:33:58.057" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14194" PostTypeId="1" CreationDate="2020-03-21T15:13:54.620" Score="1" ViewCount="158" Body="&lt;p&gt;Pretty much the title - what was the first GPU that reduced clock speeds when it started to overheat instead of simply locking up? Bonus points for first Intel and AMD CPUs too.&lt;/p&gt;&#xA;" OwnerUserId="15985" LastActivityDate="2020-03-21T15:13:54.620" Title="First GPU with thermal throttling" Tags="&lt;graphics&gt;" AnswerCount="0" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14195" PostTypeId="2" ParentId="14189" CreationDate="2020-03-21T15:33:42.000" Score="7" Body="&lt;p&gt;The IPL binary they're referring to is what's more commonly called the ROM &quot;boot code&quot;, and it exists in every Nintendo 64 cartridge.  Despite containing ordinary mask ROMs, in practice N64 cartridges work more like disk drives.  The CPU doesn't execute code in the cartridge ROMs directly, instead the N64 firmware loads the first 4096 bytes of the ROM into memory and executes it.  This is similar to how PC have traditionally booted off disks, by reading the first 512 bytes of the disk into memory and executing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The boot code's job is to &lt;a href=&quot;http://n64devkit.square7.ch/pro-man/pro06/06-10.htm&quot; rel=&quot;noreferrer&quot;&gt;initialize various chips and then load and execute the actual game code&lt;/a&gt;.  Nintendo was the author of the boot code and provided it, or at least a version it of suitable for testing, to developers.  Since the particular version of boot code used needs to be matched with the lock out (CIC) chip installed in the cartridge, it's possible that the actual boot code was only added to ROM images by Nintendo late in the manufacturing process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since apparently there's no version of the boot code other than Nintendo's, the author of the cargo-n64 tool you linked isn't able to provide it because Nintendo holds the copyright on the code. A working ROM image needs to include the boot code, so if you want to use this tool you'll need to find a copy of it, or somehow write your own. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find out what exactly the boot code does in this &lt;a href=&quot;https://www.retroreversing.com/n64bootcode&quot; rel=&quot;noreferrer&quot;&gt;analysis of the most commonly used bootcode in N64 catridges&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2020-03-21T15:33:42.000" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14196" PostTypeId="2" ParentId="14192" CreationDate="2020-03-21T15:35:00.503" Score="2" Body="&lt;p&gt;The Atari XL/XE machines (“&lt;a href=&quot;http://www.atarimania.com/faq-atari-400-800-xl-xe-what-are-the-pinouts-for-the-various-connectors-on-the-atari_16.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;all but 400, NTSC 600XL, SECAM 800XL/130XE/XEgs&lt;/a&gt;”, according to the FAQ) have a video port broadly compatible with the &lt;a href=&quot;https://www.c64-wiki.com/wiki/A/V_Jack#Pin_Assignment&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore 64&lt;/a&gt;. The connector (180° 5-pin DIN) and important pins are the same: 2 — Ground; 3 — Audio Output; 4 — Composite Video. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So unless you have a SECAM 130XE, a cable described on ebay something like “Commodore 64 / Vic 20 / Atari XE / XL 6ft. 5 Pin DIN AV Composite Mono RCA Cable” should work. The &lt;strong&gt;5 pin&lt;/strong&gt; is the important bit here: you don't want to accidentally buy a C64 LCA cable which has the wrong type of connector.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-03-21T15:35:00.503" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14197" PostTypeId="2" ParentId="14161" CreationDate="2020-03-21T15:50:28.677" Score="1" Body="&lt;p&gt;It could have been avoided if Unicode had taken a more reasonable path, but being &lt;em&gt;Design by Committee&lt;/em&gt;, that was practically guaranteed not to happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If desired, the BMP (= 16 bits of Unicode) plus some metadata, would have been way enough for everybody, forever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I said &quot;reasonable path&quot; above, but &lt;em&gt;what is&lt;/em&gt; reasonable? That's of course debatable, and if you ask 5 people, you will get 6 opinions!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Unicode guys deemed the goal &quot;one encoding for anything and everything a human has ever written&quot; reasonable, and desirable, and achievable. Which is pretty much the opposite of what ASA/ANSI had in mind a few decades earlier, which was more or less &quot;English is the only language in the world&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am personally baffled at how humans seem to live and think in extremes, are always over-reacting to extremes, and they never learn, or behave reasonably and with moderation. You see this prominently not only in computing, but also in many other fields (financials, politics, healthcare). I guess that's just how humans are.&lt;br&gt;&#xA;&lt;sub&gt;Note the parallel with IPv4 and IPv6 where you have &lt;em&gt;&quot;4 billion is way more than we will ever need&quot;&lt;/em&gt; versus &lt;em&gt;&quot;100,000 IP addresses per square meter (i.e. 64 bit) is not enough, we definitively need 128 bits&quot;&lt;/em&gt;. Both are ridiculous extremes.&lt;br&gt;&#xA;Also note the parallel with present pandemia handling in EU (including Germany, where I live). Letting three months pass without any precautions, border controls, or preparations. Stock up masks or disinfectant? Build hospitals or extend ICUs, order a few extra respirators? Nah, what for, problem is in China. Let's instead have Carneval! And then, one day you wake up, completely surprised that people are dying and there's neither enough masks nor disinfectant, nor intensive care capacity. Now it's total panic, unreasonable measures totally over board, invading and limiting the freedom of millions in a way that hasn't been seen since the Third Reich, and driving entire industries and even countries to the brink of ruin. Sure enough, there was no way of doing it any better.&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, human non-reason aside, the facts are that a mere 8 bits worth of characters are annoying for everybody except English speakers who do not need to do anything but &quot;normal no-special text&quot; whereas 16 bits are way enough for everybody except someone wishing to process ancient Chinese texts which contain symbols that most Chinese do not even recognize.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heck, 16 bits are sufficient to accomodate languages that are spoken by a few hundred people worldwide, or have not been spoken by anyone for a thousand years at all. You can use Cherokee or Okham just fine with &quot;only 16 bit&quot; Unicode. You can write in Bamum, if you even know what that is (I had to look it up). Can you read Vedic Sanscrit? Well congrats if you can, and guess what, despite being dead for ~3000 years, it fits just fine into the BMP.&lt;br&gt;&#xA;And, to top it off, you can encode the exact same glyph in several redundant ways, some of which do not really make much sense as separate characters (such as number 2 with or without a circle, or a filled circle around it, or as superscript and subscript). Much of what's in Unicode could as well, and would likely be &lt;em&gt;much better&lt;/em&gt; encoded, by metadata/markup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The assumption is that it's a good thing you can just type some mathematical symbols and Arab characters or Sumerian in English text, and it &quot;just works&quot; and it's all the same, you do not even need to waste a thought. The assumption is that you actually need this every day, and that not having to think about it is a good feature.&lt;br&gt;&#xA;The assumption is that you want to embed symbols of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Phaistos_Disc#Unicode&quot; rel=&quot;nofollow noreferrer&quot;&gt;bronze-age artefact&lt;/a&gt; in your Whatsapp messages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The assumption is that people like Donald Knuth and Leslie Lamport are idiots because they require you to add dollar signs when embedding a mathematical formula. You can just insert the symbols right away, can't you!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While there is &lt;em&gt;some&lt;/em&gt; truth in the idea that it's &lt;em&gt;generally&lt;/em&gt; cool to just type away and not care, reality has it that most of the time you do not really need this feature, and in fact it would be better if you were switching the equivalent of &quot;context&quot; or &quot;code page&quot; with some kind of control sequence. Think TEX dollar signs, think escape codes, think xml tags, whichever you prefer, all the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did you ever wonder why in the beginnings of the web, the makers of &lt;code&gt;HTML&lt;/code&gt; would create a feature like &lt;code&gt;&amp;lt;p lang=&quot;fr&quot;&amp;gt; ... &amp;lt;/p&amp;gt;&lt;/code&gt;? Why would one want to do this? Who cares? Well, search engines &lt;em&gt;do care&lt;/em&gt;, and accessibility services (e.g. text to speech) do. It is &lt;em&gt;much less&lt;/em&gt; of a challenge for an accessibility service that intends to read for a blind person to correctly pronounce words if it is told what language a word or paragraph is written in, rather than having to guess from the character codes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wouldn't even be necessary (or desirable) to go all the way down to a single target language on the character level. French people write Italian or German or English too, at times. Koreans write Japanese at times. They both use a few hanja at times. So, while desirable as metadata in markup, it is probably not desirable to have the actual character encoding too tensely bound to one particular language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if nothing else, one could for example have distinguished &lt;em&gt;very roughly&lt;/em&gt; between these cases:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;normal text for everybody in &quot;living&quot; languages LTR&lt;/li&gt;&#xA;&lt;li&gt;normal text for everybody in &quot;living&quot; languages RTL&lt;/li&gt;&#xA;&lt;li&gt;math, music, technical and electric symbols etc.&lt;/li&gt;&#xA;&lt;li&gt;other dingbats, smileys, whatever&lt;/li&gt;&#xA;&lt;li&gt;ancient texts, non-chinese&lt;/li&gt;&#xA;&lt;li&gt;ancient texts, chinese&lt;/li&gt;&#xA;&lt;li&gt;klingon, sindarin, morgul and what you like&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The impact in terms of having to include escape characters (implicitly done by the word processor, or explicitly by writing markup, whatever) would be non-existent for 95% of all people, and very acceptable for the 5% writing scientific papers. On the contrary, explicitly pointing out that a formula &lt;em&gt;is indeed a formula&lt;/em&gt; or that a foreign word is indeed just that is very helpful for processing (laying out, indexing, searching, translating, TTS) the document. Being able to tell immediately that a &lt;sup&gt;3&lt;/sup&gt; is indeed a &lt;code&gt;3&lt;/code&gt;, only just in superscript is much preferrable to hoping that a program that processes some funny weird characters will figure it out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would have taken a mere dozen or so (or two dozen, depending on how elaborate one wants it) escape codes to do such a thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unicode (necessarily, being forced) partially did go that route with e.g. the &lt;code&gt;LRM&lt;/code&gt;/&lt;code&gt;RLM&lt;/code&gt; markers. How could they otherwise have embedded the information that Arab text needs to be written the &quot;wrong way around&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But they did, in my opinion, not do it properly. Turning on &lt;code&gt;RTL&lt;/code&gt; without context is a mis-feature if you ask me. Writing e.g. German right-to-left is just meaningless. On the other hand side, writing Arab LTR is equally meaningless, so why is this possible? Also, the ability of setting up homograph spoofing websites that read &lt;em&gt;exactly the same&lt;/em&gt; as the original is not truly a feature, either. Nor is the ability to write the exact same thing with &lt;em&gt;either&lt;/em&gt; combining or non-combining characters not a feature, but a nuisance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unicode also partially went the markup route with e.g. s̶t̶r̶i̶k̶e̶t̶h̶r̶o̶u̶g̶h̶, only just not properly. There is no way of knowing that s-t-r-i-k-e-t-h-r-o-u-g-h is actually &lt;strike&gt;strikethrough&lt;/strike&gt;, and it's both a text processing nightmare, and a user annoyance (try and copy/paste that!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt; &lt;br&gt;&#xA;.&#xA;.&#xA;L̶͔͍̪͕̯̼̪͙͒͋̽͂̆̅̚͠͝ì̡͕̖̳̞͊̉̈̀͊͘k̢̪̯̹̟̓͊̽͂͆͐̐́͢ȩ̶̳̙͔̭̙̪͗͒̔̄͟͡͡ẃ̸̳͇̬̟̯̾̽̈́͒̈́̋̔į̛̤͇̞̘͚̹̰̝̾̄̐̀͜ş̴̯͖̺̹̖͔̯͈̾̆͛̂̑̎́̅̂e̸̢̨̙͎̣̻͋̾́̔̾͜,̵̭̞̯̥͕̗̪͔̼͇̓̇́͛̽̽̓̉̚ Z̛͔͖͎̠͆̅̓̀͆̂̀͘͢͝ḁ̵̥̻̣̦̘̣̻̠͆̊̀̽̍̄́̓̃͋ͅḻ̶̡̣̜̬̗͙͔̫͊̌͆̐̔̚̚͜͡ĝ̘̜͚̟̟͍̬̜͉̈͛̌̿͡͠ö͕̳͉͈̝͉͕̟́̉̇̑̔͋̆̾̓͜͞ ṱ̠͓͍̜͈̾͋͘̕͡e̸̹̞͍͓̥̮͔͔͆̓̊͐͘͡x̶̰̱̖͎̰͕̤̺̙̞̑̂̄͑͡͝͡ț̶̗͕͍̗̖̎̔̑̌̄̓͡ i̡̺̠͕̟͚̝̲͂̆͐͋́̀͠͝s̸̛̛͕̻͖̺͕̘͔̱͛̈̓̒͑̚͢͢͡͡ ņ̖̞̔̌̑͊̌͒̓͢͜͝͠͡ò̶̗͙͖̫̟͚̞̱͌̄͛̓̇͝t̘͖̤̉͆̂̂̉͘͢͟͢͠ v͕̮̣̱̥̗̱͐̽̌̓̀̃̕̚͟͝è̷̡̢̦̞̜̺̿͂͛͛͂́͘r̸̨͓̫̳̆͆͆̀͗̈́͆ͅẏ̹̠̠̪̯̳̗̯̀͒͊̂͋̂̈̉̍͜ ų̡̺̖̥̲̓͗͛̑͟͡͠͝s̢̡̫̜̙̞͓̄̈́̾̌̀̅͂̏͟͟͞͞ͅe̶̯̫̹̠͔͗̍͌̄̓͊̐͐͋̚͢f̸̳̫̝̭̀̄̾͐̔̓͒͘͘͜u̻̤̠͙͕̯̲̟͍̐̄̔̿̈́̇̈́l̶̦͕̮̝̬͂̏͋̈̾̀͘ͅ.̷̢̛̙̻̙̜͋̒̃̇̆͜ͅ&#xA;.&#xA;.  ⟵ Likewise, Zalgo text is not very useful&lt;/p&gt;&#xA;&#xA;&lt;p&gt; &lt;br&gt;&#xA;So, long story short, yes, it could have been avoided, but alas, that didn't happen. More than just 65535 code points &lt;em&gt;are&lt;/em&gt; needed in one consistent representation, so you either need 4-byte characters, or UTF-8 (which despite its disadvantages works reasonably well for most things) or something like UTF-16 (which has all the disadvantages of UTF-8, plus some more, but no advantages).&lt;/p&gt;&#xA;" OwnerUserId="8927" LastActivityDate="2020-03-21T15:50:28.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14198" PostTypeId="1" AcceptedAnswerId="14200" CreationDate="2020-03-21T17:58:25.310" Score="11" ViewCount="1222" Body="&lt;p&gt;How do you access more memory (above the 1MB) in DOS if the &lt;a href=&quot;https://en.wikipedia.org/wiki/Conventional_memory&quot; rel=&quot;noreferrer&quot;&gt;640KB&lt;/a&gt; of conventional memory are not enough?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read a lot about this, but I couldn't figure out how to do this in actual code. Is there an API for this (like &lt;a href=&quot;https://en.wikipedia.org/wiki/HIMEM.SYS&quot; rel=&quot;noreferrer&quot;&gt;HIMEM.SYS&lt;/a&gt;), or can I code it myself? Any answer is fine, whether it uses the XMS or the EMS standard or manually written code. From what I read, though, EMS requires specialized hardware, which is not very convenient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can, please also explain if there are any differences between doing it on an &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80286&quot; rel=&quot;noreferrer&quot;&gt;Intel 80286&lt;/a&gt; or an &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80386&quot; rel=&quot;noreferrer&quot;&gt;Intel 80386&lt;/a&gt;. Does it necessarily require switching to &lt;a href=&quot;https://en.wikipedia.org/wiki/Protected_mode&quot; rel=&quot;noreferrer&quot;&gt;protected mode&lt;/a&gt;?&lt;/p&gt;&#xA;" OwnerUserId="16617" LastEditorUserId="7208" LastEditDate="2020-03-23T07:11:28.643" LastActivityDate="2021-01-26T17:23:22.320" Title="How can I access/use memory outside of the standard 1 MB address range of MS-DOS?" Tags="&lt;ms-dos&gt;&lt;memory&gt;&lt;assembly&gt;&lt;memory-layout&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14199" PostTypeId="2" ParentId="14198" CreationDate="2020-03-21T19:40:54.173" Score="5" Body="&lt;p&gt;The HIMEM.SYS is the driver which provides an API that complies with the XMS specification for you to allocate extended memory and move data between conventional memory and extended memory. The XMS specification can be found very easily. Accessing extended memory via XMS driver does not require any protected mode programming from the user and extended memory is used via the API identically regardless of CPU type, it is the XMS driver itself that must work differently on 286 and 386 CPUs.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-03-21T19:40:54.173" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14200" PostTypeId="2" ParentId="14198" CreationDate="2020-03-21T20:15:55.907" Score="13" Body="&lt;p&gt;The eXtended Memory Specification (XMS) 2.0 may be found &lt;a href=&quot;http://www.phatcode.net/res/219/files/xms20.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and the 3.0 version &lt;a href=&quot;http://www.phatcode.net/res/219/files/xms30.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  The various function calls are invoked by obtaining the driver's entry point via the muxing interrupt (&lt;code&gt;Int 2Fh&lt;/code&gt;).  XMS allows for accessing both extended (above the 1MB boundary) and high memory areas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;XMS works much like the original Windows 16-bit memory management: When your program allocates extended memory, XMS returns a handle rather than a pointer to the block.  To use the memory, your program calls XMS to lock the handle, which returns a pointer to use.  When your program is finished accessing the memory, it should unlock the block, which allows the memory manager to move it in memory without disturbing its contents.  You can also move memory blocks between conventional and extended memory without locking the handle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your other questions: No, there are no differences using XMS on 80286 and 80386 (although as with all things DOS, it's never so simple, such as if your program needs access to the physical pages), and no, your program does not need to switch to Protected Mode to use XMS.&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="4222" LastEditDate="2020-03-24T17:08:16.867" LastActivityDate="2020-03-24T17:08:16.867" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14201" PostTypeId="2" ParentId="14185" CreationDate="2020-03-22T00:53:45.783" Score="3" Body="&lt;p&gt;I know they sold one system to the Mitre Corporation, a big defense contractor; I believe it was for research into new computer architectures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The March 1978 edition (vol.3, iss.3, No.23, p.17) of Dr. Dobb's Journal says a group at UCSD had the UCSD PASCAL system running on a QM-1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A San Diego CA office is listed on the cover of several manuals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Williamsville NY (suburb of Buffalo) address is listed as &quot;One Computer Drive&quot; on some manuals, instead of 2457 Wehrle Dr.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dr. Gideon Frieder of the Computer Science Dept. at the State University of New York at Buffalo was a principal in the company (possibly the founder). A number of other people are listed on patents assigned to Nanodata, but their names are not familiar. (I worked in the same building as some CompSci folks so I probably met Dr. Frieder at some point.)&lt;/p&gt;&#xA;" OwnerUserId="16620" LastEditorUserId="16620" LastEditDate="2020-06-01T15:33:22.467" LastActivityDate="2020-06-01T15:33:22.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14202" PostTypeId="1" AcceptedAnswerId="14203" CreationDate="2020-03-22T10:07:37.917" Score="7" ViewCount="345" Body="&lt;p&gt;I'm building a simple Z80 breadboard computer for my hobby. In this question I use Z80 as an example, but I think this may apply to many CPUs that allow for bus sharing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is as follows. Z80 has a pin called BUSREQ, which after being pulled low, makes the CPU stop it's execution, and float the address, the data and a few control pins to allow for another device to control them. This is an awesome feature I plan to use to program the ROM without having to disconnect/rewire things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we take a look at the data sheet, after we pull the BUSREQ pin high again, to give the control back to Z80, we see that after changing BUSACK, confirming that the bus can no longer be controlled, there is a bit of a delay, that I highlighted. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means, that if my ROM-programmer let's go of the bus like a good citizen, pins will float until the CPU controls them. This is not a big problem for the address and the data, but a pretty serious problem for the WR pin, which controls writing to memory. If I understood correctly, at the end of bus sharing, floating pins have the reign over my memory, potentially overwriting it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is especially a problem for me, since for hobby purposes I use a 3hz clock for the setup, making the floating time extremely long.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A solution that I came up with to solve this, is to have a multiplexer controlled by the programmer. The high WR signal would be held a little after BUSACK goes high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it keeps bugging me, there must be a better solution than external circuitry? Or maybe it doesn't matter that much? What was the thought in making the lines float that short time after?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/xEUID.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2020-03-24T15:16:57.560" Title="Floating control during bus sharing" Tags="&lt;z80&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14203" PostTypeId="2" ParentId="14202" CreationDate="2020-03-22T10:22:49.950" Score="6" Body="&lt;p&gt;Maybe I'm overlooking something, but why not use pull-ups (or pull-downs, whatever is required for a safe state) on all control lines? &lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-03-22T10:22:49.950" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="14204" PostTypeId="1" AcceptedAnswerId="14207" CreationDate="2020-03-22T14:35:11.157" Score="3" ViewCount="260" Body="&lt;p&gt;I have an INLRetro cart dumper.  The software for the device is incomplete and in beta form.  I've been able to dump Tetris and it works (because it's ROM fits into bank 0).    When I attempt to dump a larger cart it appears that the second bank is just repeated every 16kb for any bank past bank 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The particular cart that I'm testing with is F1-Race.  The header for the game states the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;0x147 06 = &quot;ROM+MBC2+BATTERY&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;0x148 02 = 1Mbit = 128KByte = 8 banks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;0x149 00 = No ram&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;docs&lt;/a&gt; say: &#xA;&lt;em&gt;Writing a value (XXXXBBBB - X = Don't cares, B =&#xA; bank select bits) into 2000-3FFF area will select&#xA; an appropriate ROM bank at 4000-7FFF.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have attempted to switch to bank 3, I've written 0x03 to location 0x2000.&#xA;But when I read 16k starting at 0x40000 the data that comes back is the same as the data I read from bank 0 at 0x00&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could my failure to see any other banks be due to me not initializing the cart properly with some sequence of writes?&lt;/p&gt;&#xA;" OwnerUserId="16624" LastEditorUserId="3290" LastEditDate="2020-08-14T12:44:07.893" LastActivityDate="2020-08-14T12:44:07.893" Title="How do you switch ROM banks on Gameboy MBC2 Cart with INLRetro dumper" Tags="&lt;rom&gt;&lt;game-cartridge&gt;&lt;game-boy&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14205" PostTypeId="2" ParentId="14198" CreationDate="2020-03-22T15:05:06.707" Score="10" Body="&lt;p&gt;Before the 286, x86 CPUs can only access 1MiB, so the only way to use memory beyond 1MiB is to use some form of bank switching. The de facto standard for that is &lt;a href=&quot;https://en.wikipedia.org/wiki/Expanded_memory#EMS&quot; rel=&quot;noreferrer&quot;&gt;Lotus/Intel/Microsoft EMS&lt;/a&gt;, which provides access to expanded memory by switching into a “page frame” (typically located in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Upper_memory_area&quot; rel=&quot;noreferrer&quot;&gt;UMA&lt;/a&gt;, between 640KiB and 1MiB). EMS requires hardware on CPUs before the 386, but many 286 chipsets provide support (along with the appropriate driver). On 386 and later, drivers such as &lt;code&gt;EMM386.EXE&lt;/code&gt; provide expanded memory. The EMS API is available &lt;em&gt;via&lt;/em&gt; &lt;a href=&quot;https://fd.lod.bz/rbil/zint/index_67.html&quot; rel=&quot;noreferrer&quot;&gt;interrupt 67h&lt;/a&gt;, services &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/memory/6740.html&quot; rel=&quot;noreferrer&quot;&gt;40h&lt;/a&gt; to &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/memory/675d.html&quot; rel=&quot;noreferrer&quot;&gt;5Dh&lt;/a&gt;. See &lt;a href=&quot;http://www.phatcode.net/res/218/files/limems40.txt&quot; rel=&quot;noreferrer&quot;&gt;the full specification&lt;/a&gt; for details.&lt;/p&gt;&#xA;&lt;p&gt;On the 286 and above, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_memory#eXtended_Memory_Specification_(XMS)&quot; rel=&quot;noreferrer&quot;&gt;XMS&lt;/a&gt; API (implemented for example by &lt;code&gt;HIMEM.SYS&lt;/code&gt;) provides access to extended memory, along with &lt;a href=&quot;https://en.wikipedia.org/wiki/Upper_memory_area#Usage&quot; rel=&quot;noreferrer&quot;&gt;UMBs&lt;/a&gt; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/High_memory_area&quot; rel=&quot;noreferrer&quot;&gt;HMA&lt;/a&gt;. For real mode programs, this is used by copying blocks of memory from conventional to extended and back. The XMS API is accessed through a control function; first use &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/memory/2f4300.html&quot; rel=&quot;noreferrer&quot;&gt;interrupt 2Fh service 4300h&lt;/a&gt; to check whether XMS is available, then &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/memory/2f4310.html&quot; rel=&quot;noreferrer&quot;&gt;service 4310h&lt;/a&gt; to obtain the control function’s address. See &lt;a href=&quot;http://www.phatcode.net/res/219/files/xms30.txt&quot; rel=&quot;noreferrer&quot;&gt;the full specification&lt;/a&gt; for details.&lt;/p&gt;&#xA;&lt;p&gt;286 PCs introduced another API, provided by the BIOS, which is less often encountered in practice: &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/bios/1587.html&quot; rel=&quot;noreferrer&quot;&gt;interrupt 15h, service 87h&lt;/a&gt; copies memory specified by 24-bit linear addresses (so it can be used to copy conventional to extended and back, but also extended to extended, or conventional to conventional). Memory can be “allocated” by reducing the amount returned by &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/bios/1588.html&quot; rel=&quot;noreferrer&quot;&gt;service 88h&lt;/a&gt; which indicates the size of extended memory; this is how the &lt;code&gt;VDISK.SYS&lt;/code&gt; RAM drive allocates memory for its drives (when extended memory is available).&lt;/p&gt;&#xA;&lt;p&gt;On the 286 and later, it is also possible to switch to protected mode (using an API such as &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS_Protected_Mode_Interface&quot; rel=&quot;noreferrer&quot;&gt;DPMI&lt;/a&gt;, or not) and access extended memory directly, but it’s important to still use APIs to allocate memory. Another approach is to use &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/1006/79&quot;&gt;&lt;code&gt;LOADALL&lt;/code&gt;&lt;/a&gt;. Many large DOS programs use a &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS_extender&quot; rel=&quot;noreferrer&quot;&gt;DOS extender&lt;/a&gt;, which takes care of handling all that for them.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-01-26T17:23:22.320" LastActivityDate="2021-01-26T17:23:22.320" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14206" PostTypeId="1" AcceptedAnswerId="14228" CreationDate="2020-03-23T00:00:25.650" Score="5" ViewCount="447" Body="&lt;p&gt;There's a fairly common BASIC program for DOS 3.3 on the Apple II that clears the screen, prints a catalog of the disk, and allows you to select files by letter to run or do other operations on them. This program is often found as the auto-run &lt;code&gt;HELLO&lt;/code&gt; program on diskettes; I've also seen it called &lt;code&gt;LEVI&lt;/code&gt; (in non-auto-run form).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the proper name of this program, and what is its history? Where did it come from, who wrote it and when was it written? Was it ever published in any books or magazines?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that here I am interested only in the provenance of &lt;em&gt;this particular BASIC code&lt;/em&gt; and the techniques it uses, not in different programs that may have a similar UI.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Screenshot&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Here's a screenshot; when actually running the bottom line scrolls from right to left giving several more numbered actions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/L0e87.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/L0e87.png&quot; alt=&quot;LEVI&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Listing&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The program was written in Applesoft BASIC. I've seen it both with and without line 0, a comment with a date, at the start.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0  REM     06/06/83&#xA;100  TEXT : HOME :D$ =  CHR$ (4): PRINT D$&quot;CATALOG&quot;:B =  PEEK (37) - 2: IF B &amp;gt; 22 THEN B = 22&#xA;110 T = 0:CH = 4: FOR CV = 5 TO 23: GOSUB 1000: IF C &amp;lt;  &amp;gt; 160 THEN  POKE P - 1,219: POKE P,T + 193: POKE P + 1,221:T =T + 1:S = CV&#xA;120  NEXT CV: VTAB 24:A$ = &quot;TYPE LETTER TO RUN, OR LOAD=1 LOCK=2 UNLOCK=3 DELETE=4 EXIT=5....&quot;&#xA;130 B$ = &quot;RUN&quot;: HTAB 1: PRINT  LEFT$ (A$,39);:A$ =  MID$ (A$,2) + LEFT$ (A$,1):K =  PEEK ( -16384): IF K &amp;lt; 128 THEN  FOR K = 1 TO 75: NEXT K:K =  FRE (0): GOTO 130&#xA;140  POKE  - 16368,0:K = K - 176: IF K &amp;lt; 1 OR K &amp;gt; 5 THEN 300&#xA;200  HTAB 1: CALL  - 868: IF K = 5 THEN  END&#xA;210  PRINT &quot;PRESS 'LETTER' YOU WISH TO &quot;;: IF K = 1 THEN B$ =&quot;LOAD&quot;&#xA;220  IF K = 2 THEN B$ = &quot;LOCK&quot;&#xA;230  IF K = 3 THEN B$ = &quot;UNLOCK&quot;&#xA;240  IF K = 4 THEN B$ = &quot;DELETE&quot;: FLASH&#xA;250  PRINT B$;: CALL  - 198: NORMAL: GET K$:K =  ASC (K$) - 48&#xA;300  IF K &amp;lt; 17 OR K &amp;gt; T + 16 THEN 130&#xA;310 CH = 1:CV = S - T + K - 16: GOSUB 1000: IF C = 194 AND (B$ = &quot;RUN&quot; OR B$ = &quot;LOAD&quot;) THEN B$ = &quot;B&quot; + B$&#xA;320  FOR CH = 6 TO 39: GOSUB 1000: B$ = B$ +  CHR$ (C): NEXT CH: HTAB 1: CALL  - 868: PRINT B$: PRINT D$;B$: GOTO 100&#xA;1000 C1 =  INT (CV / 8):C2 = CV - C1 * 8:P = 1024 + 128 * C2 + 40 * C1 + CH:C =  PEEK (P): RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-04-05T04:58:29.497" LastActivityDate="2020-04-12T05:06:16.070" Title="Where did the &quot;LEVI&quot; file selector/runner for the Apple II DOS 3.3 come from?" Tags="&lt;apple-ii&gt;&lt;apple-dos&gt;&lt;identify-this-software&gt;" AnswerCount="2" CommentCount="19" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14207" PostTypeId="2" ParentId="14204" CreationDate="2020-03-23T08:45:31.210" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Memory_Bank_Controllers#MBC2_.28max_256KByte_ROM_and_512x4_bits_RAM.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://gbdev.gg8.se/wiki/articles/Memory_Bank_Controllers#MBC2_.28max_256KByte_ROM_and_512x4_bits_RAM.29&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to that there is a bit in the address you're using that is also relevant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;The least significant bit of the upper address byte must be one to select a ROM bank.&quot; - The address needs OR'ing with 0x0100. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try writing to 0x2100-&gt;0x21ff as suggested in the link. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My memory is very foggy on the details of MBC2.&lt;/p&gt;&#xA;" OwnerUserId="8786" LastActivityDate="2020-03-23T08:45:31.210" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14208" PostTypeId="2" ParentId="14150" CreationDate="2020-03-23T13:28:30.783" Score="3" Body="&lt;p&gt;Having never written Unix I/O code beyond munging text files, read what follows with a grain of salt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In uni we were a VMS shop. I still recall when the VAX 11/780 in the walled-off computer room was replaced by a single DECStation 3100 on a desk. That machine ran both OSes and we (the OS course's 12-or-so members) began to compare and contrast the approaches while writing our own OS as our 4th year project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The prof noted that Unix's I/O model relied on the underlying OS to efficiently context switch (which it did), so this was the basis for entire software stack. Even at the application level, the assumption was just &quot;ask for the precise bit of data you want&quot; and it would magically appear. That you might have blocked while it arrived was both invisible and unavoidable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That model worked well in memory-limited systems, like the PDP-11/20 with a maximum of 32kwords. In this case you had limited space to play with buffers, and I/O was simple and blocking anyway due to the nature of the bus. So to actually transfer that data you needed to context switch anyway, so &lt;em&gt;just do that&lt;/em&gt;, bake it into the entier system. In this respect, Unix may be considered well-tuned for minicomputer systems of the era.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the same is not true for mainframes, which invariably featured some level of autonomous DMA and dedicated buffers. The data is likely arriving rapidly in larger chunks, say 2k HD blocks which magically appear all at once. In this case, the proper model is to process as much of that data as you can before forcing another context switch, because reading one line of text from a 2k buffer and then waiting for the next switch is helping no one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I vaguely recall a text file floating around usenet comparing the two approaches for a simple text munger running under VMS and Unix on the same machine (a 11/780 IIRC). Even for very simple tasks like those of the unix &quot;tools&quot; pattern, both the application itself and the overall OS performance (total throughput of all running apps) was significantly higher under VMS. Almost all of this was because of avoided switches. I'll see if I can dig it up.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-03-23T13:28:30.783" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14209" PostTypeId="1" AcceptedAnswerId="14211" CreationDate="2020-03-23T18:18:57.777" Score="11" ViewCount="952" Body="&lt;p&gt;I have an emulator up and running and access to the asimov ftp site, and I want to learn how to program assembly language on the Apple IIe. What assembler should I use (Merlin? LISA?) and what book or books are the best? Ultimately my goal is to write some games. &lt;/p&gt;&#xA;" OwnerUserId="16626" LastActivityDate="2020-03-23T22:50:39.760" Title="Best learning path for Apple IIe assembly language" Tags="&lt;apple-ii&gt;&lt;assembly&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="2" ClosedDate="2020-03-24T08:20:00.367" ContentLicense="CC BY-SA 4.0" />
  <row Id="14210" PostTypeId="1" AcceptedAnswerId="14213" CreationDate="2020-03-23T21:50:43.857" Score="10" ViewCount="587" Body="&lt;p&gt;Modern x86 processors have an infinity control bit on the x87 FPU control register. This is bit 12 and it enables processing of infinity values in a manner that is compatible with the 80287 coprocessor. How does the 80827 process infinity values and do modern processors behave identically if the control bit is enabled?&lt;/p&gt;&#xA;" OwnerUserId="15219" LastActivityDate="2020-03-24T07:06:07.147" Title="How does the 80287 process infinity values?" Tags="&lt;80286&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14211" PostTypeId="2" ParentId="14209" CreationDate="2020-03-23T22:37:01.143" Score="9" Body="&lt;p&gt;I realize the OP asked specifically about Assembly Language, but I felt strongly enough about the quality of &quot;Machine Language for Beginners&quot; that I wanted to post it as an answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that the Apple IIe has a pretty decent built-in monitor, this book is a natural fit for getting the basics down.  I completely understand the utility of a good assembler, but sometimes (especially in the 8 bit world) you can get along just fine writing ML.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find the &lt;a href=&quot;https://archive.org/details/ataribooks-machine-language-for-beginners/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;PDF version here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2020-03-23T22:37:01.143" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14212" PostTypeId="2" ParentId="14209" CreationDate="2020-03-23T22:45:02.887" Score="7" Body="&lt;p&gt;For getting your first taste of 6502 assembly, I recommend doing the&#xA;web-based tutorial &lt;a href=&quot;https://skilldrick.github.io/easy6502/&quot; rel=&quot;noreferrer&quot;&gt;Easy 6502&lt;/a&gt;. You should be able to get through it&#xA;in a few hours.&lt;/p&gt;&#xA;&lt;p&gt;Once you've got the basic ideas down, if you're going to learn 6502&#xA;assembler at the level of writing non-trivial routines and programs&#xA;you're going to have to write a fair amount of it.&lt;/p&gt;&#xA;&lt;p&gt;I recently wrote &lt;a href=&quot;https://retrocomputingforum.com/t/going-back-to-edasm-the-1980-apple-ii-editor-assembler/1041?u=cjs&quot; rel=&quot;noreferrer&quot;&gt;a post&lt;/a&gt; describing my experience getting set up with&#xA;a traditional self-hosted development system, EDASM on the Apple II.&#xA;It's certainly worthwhile to learn and interesting to play with, but I&#xA;don't recommend self-hosting for serious software development as it's&#xA;compartively slow and painful for no real benefit.&lt;/p&gt;&#xA;&lt;p&gt;For doing this you should consider cross-development: assembling and&#xA;doing at least some of your testing on a larger machine (such as a&#xA;modern Linux or Windows box) and then moving your code over to a full&#xA;target machine simulator or a target machine itself for the final&#xA;testing. This general technique is not ahistorical: the first versions&#xA;of Microsoft BASIC, for example, were written, assembled and tested&#xA;(in an 8080 simulator) on a PDP-10 before being run on its first&#xA;target platform, the Altair 8800.&lt;/p&gt;&#xA;&lt;p&gt;If you're familiar with (and, even better, comfortable with) automated&#xA;unit testing, I've found this to be an immense aid to learning and&#xA;programming assembly. It does take some ingenuity, though.&lt;/p&gt;&#xA;&lt;p&gt;My &lt;a href=&quot;https://github.com/0cjs/8bitdev&quot; rel=&quot;noreferrer&quot;&gt;8bit development system&lt;/a&gt;, which I use for generic 6502&#xA;code and Apple I and Apple II development (but which supports other&#xA;CPUs and platforms) has the following components:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Git for revision control.&lt;/li&gt;&#xA;&lt;li&gt;Linux as the host platform, though Windows could work just as well&#xA;if you're comfortable with that.&lt;/li&gt;&#xA;&lt;li&gt;Vim for editing and command-line scripts for building and testing.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://john.ccac.rwth-aachen.de:8000/as/&quot; rel=&quot;noreferrer&quot;&gt;The Macro Assembler AS&lt;/a&gt; for assembly, though I've also used&#xA;&lt;a href=&quot;http://shop-pdp.net/ashtml/asxxxx.htm&quot; rel=&quot;noreferrer&quot;&gt;ASxxxx&lt;/a&gt; in the past. My scripts are able to download and build both&#xA;of these, and install them into a directory in the project.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/mnaberez/py65&quot; rel=&quot;noreferrer&quot;&gt;py65&lt;/a&gt; as the 6502 CPU simulator in which I run my unit tests.&lt;/li&gt;&#xA;&lt;li&gt;A unit test framework (&lt;a href=&quot;https://github.com/0cjs/8bitdev/tree/master/lib/testmc&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;testmc&amp;quot;&lt;/a&gt;, which I wrote myself) which loads&#xA;the object files output by the assembler into simulator memory,&#xA;loads the symbol table used by my tests, and runs &lt;a href=&quot;https://docs.pytest.org/en/latest/&quot; rel=&quot;noreferrer&quot;&gt;pytest&lt;/a&gt; unit&#xA;tests against the code.&lt;/li&gt;&#xA;&lt;li&gt;Various (again, custom-written) scripts for transfer of code to&#xA;target systems, such as &lt;a href=&quot;https://github.com/0cjs/8bitdev/blob/master/bin/wozmon-deposit&quot; rel=&quot;noreferrer&quot;&gt;wozmon-deposit&lt;/a&gt; to generate &amp;quot;hex records&amp;quot;&#xA;for input for the Apple 1 monitor and &lt;a href=&quot;https://github.com/0cjs/8bitdev/blob/master/bin/a1send&quot; rel=&quot;noreferrer&quot;&gt;a1send&lt;/a&gt; to send the output of&#xA;that across a serial line to my Apple 1 clone. Similar scripts can&#xA;be used to generate disk images, start a complete system simulator&#xA;running your code, and so on.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Here's &lt;a href=&quot;https://github.com/0cjs/8bitdev/blob/b246ba674109e5ed0aeaf85fbf79d6f7d88dab3d/src/bigint_test.py#L17-L25&quot; rel=&quot;noreferrer&quot;&gt;an example of one of the test sets&lt;/a&gt; for a&#xA;small (8-instruction) &lt;a href=&quot;https://github.com/0cjs/8bitdev/blob/b246ba674109e5ed0aeaf85fbf79d6f7d88dab3d/src/bigint.a65#L40-L93&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;convascdigit&lt;/code&gt;&lt;/a&gt;, a routine to&#xA;convert an ASCII digit to a binary number:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;@pytest.mark.parametrize('char, num', [&#xA;    ('0', 0),  ('1', 1),    ('8', 8),  ('9', 9),&#xA;    ('A',10),  ('a',10),    ('F',15),  ('f',15),&#xA;    ('G',16),  ('g',16),    ('Z',35),  ('z',35),&#xA;    ('_', 40), ('\x7F', 40)&#xA;])&#xA;def test_convascdigit_good(M, char, num):&#xA;    M.call(M.symtab.convascdigit, R(a=ord(char), N=1))&#xA;    assert R(a=num, N=0) == M.regs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is actually 14 unit tests, each of which has an input character&#xA;and expected output value. It loads the A register with that&#xA;character, sets the N flag, calls &lt;code&gt;convascdigit&lt;/code&gt;, and then asserts&#xA;that after the routine has returned the A register contains the&#xA;expected output and the N flag is clear (indicating no error). You'll&#xA;note that it's heavily oriented toward testing edge cases.&lt;/p&gt;&#xA;&lt;p&gt;Especially when you're starting out, having tests at this level of&#xA;detail can be &lt;em&gt;very&lt;/em&gt; helpful. Issues like off-by-one errors are&#xA;rampant in assembly as compared to higher-level languages, and often&#xA;manifest themselves by mysterious crashes, frequently in some&#xA;different part of the code becuase you made a mistake setting up a&#xA;value somewhere. (Think about the first time you learned about&#xA;pointers in C, and then multiply that by ten.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-23T22:50:39.760" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14213" PostTypeId="2" ParentId="14210" CreationDate="2020-03-24T07:06:07.147" Score="9" Body="&lt;p&gt;The 80287 (and 80187) were functionally identical to the original 8087 coprocessor, just with different external interfaces to match their companion CPUs.  The 80387 (also produced as an 80287XL) was the first Intel x87-family FPU to introduce full IEEE-754 compatibility, and this involved some changes to the handling of infinities, Not-a-Numbers (NaNs) and denormals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IA32 architecture manual describes some of these changes thus:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;8.2.2 Unsupported Double Extended-Precision Floating-Point Encodings and Pseudo-Denormals&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The double extended-precision floating-point format permits many&#xA;  encodings that do not fall into any of the cate- gories shown in Table&#xA;  4-3. Table 8-3 shows these unsupported encodings. Some of these&#xA;  encodings were supported by the Intel 287 math coprocessor; however,&#xA;  most of them are not supported by the Intel 387 math coprocessor and&#xA;  later IA-32 processors. These encodings are no longer supported due to&#xA;  changes made in the final version of IEEE Standard 754 that eliminated&#xA;  these encodings.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Specifically, the categories of encodings formerly known as&#xA;  pseudo-NaNs, pseudo-infinities, and un-normal numbers are not&#xA;  supported and should not be used as operand values. The Intel 387 math&#xA;  coprocessor and later IA-32 processors generate an invalid-operation&#xA;  exception when these encodings are encountered as operands. Beginning&#xA;  with the Intel 387 math coprocessor, the encodings formerly known as&#xA;  pseudo-denormal numbers are not generated by IA-32 processors. When&#xA;  encountered as operands, however, they are handled correctly; that is,&#xA;  they are treated as denormals and a denormal exception is generated.&#xA;  Pseudo-denormal numbers should not be used as operand values. They are&#xA;  supported by current IA-32 processors (as described here) to support&#xA;  legacy code.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It also states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;8.1.6 Infinity Control Flag&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The infinity control flag (bit 12 of the x87 FPU control word) is&#xA;  provided for compatibility with the Intel 287 Math Coprocessor; it is&#xA;  not meaningful for later version x87 FPU coprocessors or IA-32&#xA;  processors. See Section 4.8.3.3, “Signed Infinities,” for information&#xA;  on how the x87 FPUs handle infinity values.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This states quite clearly that the Infinity Control bit is &lt;strong&gt;not valid&lt;/strong&gt; on modern x87 FPUs, only on the 80287 and earlier.  Modern x87 always performs infinity processing in accordance with IEEE-754.  So, going back to the &lt;strong&gt;80286 &amp;amp; 80287 Programmer's Reference Manual&lt;/strong&gt;…&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The infinity control bit (bit 12) determines the manner in which the&#xA;  80287 treats the special values of infinity. Either affine closure&#xA;  (where positive infinity is distinct from negative infinity) or&#xA;  projective closure (infinity is treated as a single unsigned quantity)&#xA;  may be specified. These two alternative views of infinity are&#xA;  discussed in the section on Computation Fundamentals.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;IEEE-754 specifies &lt;strong&gt;affine closure&lt;/strong&gt;, with a distinct positive and negative infinity.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-03-24T07:06:07.147" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14215" PostTypeId="1" CreationDate="2020-03-24T13:24:52.977" Score="5" ViewCount="438" Body="&lt;p&gt;How exactly did Microsoft reverse engineer Brendan Eich's JavaScript, call it something else and not get a massive lawsuit in the aftermath? I understand this was a long time ago but I still wonder how such a blatant rip-off did not result in massive litigation?&lt;/p&gt;&#xA;" OwnerUserId="12298" LastActivityDate="2020-03-24T22:46:42.393" Title="How did Microsoft get away with JScript?" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="2" CommentCount="3" ClosedDate="2020-03-25T09:25:18.177" ContentLicense="CC BY-SA 4.0" />
  <row Id="14216" PostTypeId="1" AcceptedAnswerId="14217" CreationDate="2020-03-24T13:31:21.057" Score="33" ViewCount="8899" Body="&lt;p&gt;Is it really the case that Mozilla Firefox is a modern day version of Netscape Navigator?&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="79" LastEditDate="2020-03-24T14:44:17.240" LastActivityDate="2020-03-24T14:44:17.240" Title="Is it true that Netscape Navigator eventually became Mozilla Firefox?" Tags="&lt;history&gt;&lt;netscape&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14217" PostTypeId="2" ParentId="14216" CreationDate="2020-03-24T13:36:14.600" Score="59" Body="&lt;p&gt;Yes, it’s true, as explained in Wikipedia’s entries for &lt;a href=&quot;https://en.wikipedia.org/wiki/Mozilla_Application_Suite#History_and_development&quot; rel=&quot;noreferrer&quot;&gt;the Mozilla application suite&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Firefox#History&quot; rel=&quot;noreferrer&quot;&gt;Firefox&lt;/a&gt;. More accurately, Firefox is a descendant of Netscape Navigator; most of Firefox has been rewritten in one way or another since the days of Navigator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of Netscape Navigator (or rather, Communicator) was released as open source in 1998; this was then extensively rewritten and eventually emerged as the Mozilla application suite. Some of Netscape’s engineers started developing a subset of the suite to produce a nimble browser, and that eventually became Firefox (after conflicts over its previous names, Phoenix and Firebird).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The initial Mozilla rewrite took four years, and ended up being used as &lt;a href=&quot;https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/&quot; rel=&quot;noreferrer&quot;&gt;as an example of why not to rewrite software&lt;/a&gt; (see also &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Mozilla_Application_Suite&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia’s entry on the history of the suite&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-03-24T13:36:14.600" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14218" PostTypeId="2" ParentId="14202" CreationDate="2020-03-24T15:16:57.560" Score="0" Body="&lt;p&gt;If I'm reading that diagram correctly, the Z80 expects bus control to transfer (either way) synchronously with the rising edge of the clock.  The diagram shown is scaled to match a typical clock speed of several MHz, but the time between the clock edge and the control lines being driven will be independent of the actual clock speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could handle this cleanly by employing a D flipflop to gate the /BUSACK signal from the CPU, clocked by the rising edge of the CPU clock, and use the output of that to govern the tristating of your external control/address signals.  They will go high-impedance just as the CPU starts driving the same lines, so there will be no significant period of floating overall.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-03-24T15:16:57.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14219" PostTypeId="2" ParentId="14215" CreationDate="2020-03-24T17:02:40.713" Score="-2" Body="&lt;p&gt;Javascript became a standard known as EMCA Script, and Microsoft's implementation of it was JScript.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-03-24T17:02:40.713" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14220" PostTypeId="2" ParentId="14215" CreationDate="2020-03-24T22:46:42.393" Score="4" Body="&lt;p&gt;How come there are C compilers not written by Bell Labs?  ;-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I am aware, there is no prohibition on producing your own implementation of a programming language based on the description of that programming language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can't copy someone else's implementation without their permission.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't need to reverse-engineer an implementation if there is a description of what the language constructs are intended to do; and with a programming language there almost always is such a description (otherwise there's not much point to it).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-03-24T22:46:42.393" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14221" PostTypeId="1" CreationDate="2020-03-25T03:04:48.337" Score="1" ViewCount="299" Body="&lt;p&gt;I am trying to identify a World War 2 European theater PC game, which I used to play on a Windows 95 PC, but probably predates Windows 95.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The one thing that really stands out in my memory is that if the British won the game would play a small portion of &quot;It's a Long Way to Tipperary.&quot; The music was very crude, not much more than a bunch of beeps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game shows a map of England, France, Germany, and Italy. It does not include Russia and you can only play as Britain / US or Germany. I seem to recall the game starting after the fall of France, but maybe there were different scenarios.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The movement was point to point. You could see borders between cities but the units moved basically from city center to city center.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The units were shown as a simple national flag and were infantry, armor, or artillery. It was turn based. Each turn consisted of 1 side recruiting, moving, attacking, and researching new technology (for example you had to research amphibious landings before you could attack across sea areas), followed by the next player turn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could play 2 player or against the computer and if you played against the computer there was an option to switch sides at any point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've gone through every &quot;abandoned&quot; old game site I could find and while I've found similar looking games none are the one I'm looking for. Vague I know, but worth a shot.&lt;/p&gt;&#xA;" OwnerUserId="16632" LastEditorUserId="16632" LastEditDate="2020-03-25T23:18:54.733" LastActivityDate="2021-04-02T09:33:48.703" Title="Identify World War 2 European theater PC wargame circa 1995" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14222" PostTypeId="1" AcceptedAnswerId="14223" CreationDate="2020-03-25T12:44:01.047" Score="9" ViewCount="631" Body="&lt;p&gt;A BASIC program that was deleted with NEW or after a reset can be restored on Commodore computers as long as no new programs are entered or loaded (or the computer is powered off). For the C64, the following procedure has to be applied:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;POKE2050,1:SYS42291:POKE46,PEEK(35)-(PEEK(781)&amp;gt;253):POKE45,PEEK(781)+2AND255:CLR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What are the respective commands for a C128 in C128 mode?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that the pointer to the BASIC text is at $2D/2E instead of $2C/2D and that BASIC start is at $1C00 if graphics are not used. But I think the Rechain Lines Routine (address $A533/42291 which is called by SYS) might be different.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2020-03-25T17:40:35.650" LastActivityDate="2020-03-25T17:40:35.650" Title="Restore a BASIC program after reset or &quot;NEW&quot; command on a Commodore 128" Tags="&lt;basic&gt;&lt;commodore-128&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14223" PostTypeId="2" ParentId="14222" CreationDate="2020-03-25T14:09:46.370" Score="10" Body="&lt;p&gt;Florian Müller's &lt;em&gt;Vom C64 zum C128: Tips &amp;amp; Tricks&lt;/em&gt; (available at &lt;a href=&quot;https://www.retrozone.ch/c128/download.php&quot; rel=&quot;noreferrer&quot;&gt;https://www.retrozone.ch/c128/download.php&lt;/a&gt;) gives this command in section 3.7.2: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;POKE PEEK(45)+256*PEEK(46),1:DELETE 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-03-25T14:09:46.370" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14224" PostTypeId="1" AcceptedAnswerId="14225" CreationDate="2020-03-25T21:45:03.780" Score="2" ViewCount="124" Body="&lt;p&gt;The CHAR command in Commodore BASIC 7.0 on the Commodore 128 allows printing a text at a given position on the screen. Other than the PRINT command, CHAR also works in Hires graphics mode. Since the Commodore 128 has multiple character maps, how can I tell CHAR to print using the uppercase/lowercase charset? Changing the charset with CHAR$(14) in textmode does not seem to affect the behavior of CHAR.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-03-26T06:46:59.487" Title="Printing on the graphics screen with lowercase/uppercase letters using CHAR command in Commodore BASIC 7.0" Tags="&lt;graphics&gt;&lt;basic&gt;&lt;commodore-128&gt;&lt;text&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14225" PostTypeId="2" ParentId="14224" CreationDate="2020-03-26T00:01:52.930" Score="4" Body="&lt;p&gt;The normal method of changing between the uppercase/graphics character set and the lowercase character set on the Commdore 128 is by printing the control characters, like so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;PRINT CHR$(142):REM SELECT UPPERCASE&lt;/code&gt;, or,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;PRINT CHR$(14):REM SELECT LOWERCASE&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same control characters will also work in your BASIC programs that use a bitmap screen mode and the &lt;code&gt;CHAR&lt;/code&gt; command to print text on the screen. Just combine the appropriate &lt;code&gt;CHR$(x)&lt;/code&gt; control code &lt;em&gt;with the string&lt;/em&gt; that you are printing, like so:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 GRAPHIC 1,1&#xA;20 CHAR 0,10,20,CHR$(14)+&quot;HELLO, LOWERCASE WORLD!&quot;,0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This will print the text near the bottom of the 40-column screen in lowercase characters.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="3316" LastEditDate="2020-03-26T06:46:59.487" LastActivityDate="2020-03-26T06:46:59.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14226" PostTypeId="2" ParentId="5587" CreationDate="2020-03-26T23:25:07.090" Score="5" Body="&lt;p&gt;Definitely looks like a 4100 series. I worked for NCR as a mainframe computer operator (NCR 315), then as a technical writer writing manuals for the NCR Elliott 4100 series, then in the Marylebone head office in Programming Information Services (with the unfortunate acronym of P.I.S.) where I was responsible for writing the operating system drivers that allowed the 4100 series to use NCR Card Random Access Memory devices (&quot;CRAM&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope that helps. (And yeah, I'm still actively cutting code.) :)&lt;/p&gt;&#xA;" OwnerUserId="16649" LastActivityDate="2020-03-26T23:25:07.090" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14227" PostTypeId="2" ParentId="4625" CreationDate="2020-03-26T23:26:30.143" Score="4" Body="&lt;p&gt;Slightly bananas answer:  MC68000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Okay, I know, it's not a graphics chip.  But, you can take some inspiration from the Xerox Alto, which would presumably have been a somewhat familiar source of inspiration to somebody working in graphical workstations in 1980.  Since the Alto didn't have access to a modern off the shelf RAMDAC for displaying the contents of the framebuffer memory, it used the CPU to read the framebuffer in software.  During intensive operations like compiling code, the screen would goo black for a moment while it wasn't doing framebuffer readout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, given the fabulous cost of enough RAM to have a high res color framebuffer and enough additional RAM for running programs efficiently enough to justify that framebuffer, a second 68000 CPU would probably not have been a huge cost.  Too much for a cheap home computer.  But not insane for a workstation.  Since you already have experience writing 68000 assembly for writing the OS of this thing, and you've sourced the chips, etc.  It would probably be the fastest way to get to market using what you already know and have access to.  Even if a 68000 is crazy overkill for something basically just used as a RAM DAC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should have something like 7 MB/sec of memory bandwidth to work with.  So, make a dedicated RAM pool that the application CPU is only allowed to write to while the graphics CPU is idle.  (And probably a separate non-graphics memory area that the graphics CPU can't write too, but the application CPU can use at full speed.)  You should be able to support something like the 512x384 resolution (Still pretty &quot;high res&quot; by the standards of color graphics in 1980.) with 8 bit color.  You need actual DAC hardware attached to the graphics CPU to actually drive the analog RGB monitor it would presumably be connected to.  Dunno if you can effectively do the color palette lookups in the CPU with the leftover CPU time while using basically all of the memory bandwidth at 100%.  Maybe a 68k wizard would be able to work out some way to do it efficiently.  If not, you'd need another circuit to go from the raw framebuffer data to the values feeding the three DACs.&lt;/p&gt;&#xA;" OwnerUserId="5309" LastActivityDate="2020-03-26T23:26:30.143" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14228" PostTypeId="2" ParentId="14206" CreationDate="2020-03-27T03:00:57.303" Score="4" Body="&lt;p&gt;The program appears as &quot;&lt;strong&gt;HELLO AUTO SELECT&lt;/strong&gt;&quot; in various public domain software collections that seem to derive from 1981 or earlier. This name appears in The Public Domain Exchange disk 166: &quot;Hello and Menu&quot; in &lt;a href=&quot;https://vintageapple.org/apple_ii/pdf/The_Best_Apple_Public_Domain_Software1985.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Best Apple Public Domain Software&lt;/a&gt; book from 1985, which states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The software in this book was compiled from user groups and&#xA;  individuals.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It also appears in the sequel: &lt;a href=&quot;https://vintageapple.org/apple_ii/pdf/The_Best_Apple_II_Public_Domain_Software_Edition_II_1987.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Best Apple II Public Domain Software, Edition II&lt;/a&gt; from 1987.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disks containing the program include A.P.P.L.E. PDS Disk 166, which is available from a members-only download area at &lt;a href=&quot;https://www.callapple.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Call-A.P.P.L.E&lt;/a&gt; (Apple Puget Sound Program Library Exchange) and &lt;a href=&quot;https://mirrors.apple2.org.za/ftp.apple.asimov.net/images/educational/clc/CLC%20Hello%20and%20Menu%20058.DSK&quot; rel=&quot;nofollow noreferrer&quot;&gt;CLC HELLO AND MENU 058&lt;/a&gt;. (CLC is defined below ...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These disks appear to be derived from AAA HELLO &amp;amp; MENU 166, and according to &lt;a href=&quot;https://eamon.wiki/Apple_Avocation_Alliance&quot; rel=&quot;nofollow noreferrer&quot;&gt;this source&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Apple Avocation Alliance, commonly known as AAA or 3A, and later&#xA;  renamed the Computer Learning Center, was a Cheyenne, Wyoming-based&#xA;  distributor of public domain Apple software and a supplier in the&#xA;  early- and mid-1980s of Eamon adventure diskettes. The organization,&#xA;  headed by Ron Maleika, was founded in late 1980 and incorporated on 20&#xA;  May 1981; it formally dissolved on 1 May 1997.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To be clear, the books only refer to &quot;HELLO AUTO SELECT&quot;, but the disks contain a &quot;HELLO AUTO SELECT I&quot; which is identical to &quot;LEVI&quot;, and a newer version of &quot;HELLO AUTO SELECT&quot; which loads a binary routine to get the number of free sectors. Each disk also includes a couple of other different minor but presumably newer programs (though none have any dates).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the above, it seems likely that &quot;HELLO AUTO SELECT&quot; is at least as old as the most recent date given by any other program on the disks, which is &quot;MARCH 1981&quot; in the file &quot;HELLO WAGNER&quot;. (The earliest is 07/24/78 in &quot;HELLO TITLE DEMO&quot;.) Since it's likely that it came from a user group, but lacks any attribution or comments at all, I can only list the groups mentioned on the disks, and perhaps the origin and author can be found by someone who has the groups' disks.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;+--------------+---------------------------------------+---------------------+&#xA;| Abbreviation |                 Name                  |        File         |&#xA;+--------------+---------------------------------------+---------------------+&#xA;| AAA          | APPLE AVOCATION ALLIANCE              | HELLO APPLE LOGO    |&#xA;| ABACUS       | Apple Bay Area Computer Users Society | HELLO FREEMAN DAVIS |&#xA;|              | APPLE DAYTON                          | HELLO APPLE DAYTON  |&#xA;|              | APPLE PI                              | HELLO APPLE PI DOM  |&#xA;| APPLENET     |                                       | HELLO APPLENET      |&#xA;| CAC          | CAROLINA APPLE CORE                   | HELLO FROM CAC      |&#xA;| HAUS         |                                       | MENU IDEA MUNARRIZ  |&#xA;| IAC          | INTERNATIONAL APPLE CORE              | HELLO IAC           |&#xA;| NSAUG        | NORTHWEST SUBURBAN APPLE USERS GROUP  | CATALOG MANAGEMENT  |&#xA;+--------------+---------------------------------------+---------------------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In researching this I saw many HELLO and MENU programs using many different formats and techniques. None of them is a clear ancestor to &quot;HELLO AUTO SELECT&quot;. A few use similar wording or options, but only one other uses almost identical wording, with the same but more options. So a spiritual descendant might be Catsup from the Nibble magazine &lt;a href=&quot;https://www.nibblemagazine.com/new_page_2.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;program index&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Catsup Catalog Supervisor   Weber, Chuck    Express II, V2N7 1981&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can &lt;a href=&quot;https://archive.org/details/nibbledisks_nib06&quot; rel=&quot;nofollow noreferrer&quot;&gt;run it online&lt;/a&gt; or &lt;a href=&quot;https://www.nibblemagazine.com/nibble_disks.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;download the disks in a zip archive&lt;/a&gt;. (It's on NIB06.DSK.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PoSDB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PoSDB.png&quot; alt=&quot;Screenshot of CATSUP running&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a somewhat amusing footnote, a slightly modified version of &quot;HELLO AUTO SELECT&quot; appeared in (formerly Hardcore) &lt;a href=&quot;http://computist.applearchives.com/computist/Issue77/page-04.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computist magazine, issue 77 on page 4&lt;/a&gt; from 1990!&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2020-04-10T16:08:32.490" LastActivityDate="2020-04-10T16:08:32.490" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14229" PostTypeId="1" AcceptedAnswerId="14233" CreationDate="2020-03-27T11:45:04.367" Score="81" ViewCount="30482" Body="&lt;p&gt;Inspired by comments on the previous question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14216/is-it-true-that-netscape-navigator-eventually-became-mozilla-firefox&quot;&gt;Is it true that Netscape Navigator eventually became Mozilla Firefox?&lt;/a&gt; (Answer: Yes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1998, Netscape released a large amount of their existing source code as open source, and this became the basis of the Mozilla and eventually Firefox code bases. Over the years, large sections of this have been rewritten, although some of those rewrites were themselves started within Netscape (e.g. the &quot;NGLayout&quot; engine which became &quot;Gecko&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any sections of code in Firefox version 74.0 (released March 2020) which are basically unchanged from code which was actually part of pre-Mozilla Netscape releases (Communicator 4.0 or earlier)?&lt;/p&gt;&#xA;" OwnerUserId="11790" LastEditorUserId="11790" LastEditDate="2020-03-27T12:01:10.840" LastActivityDate="2020-03-28T13:48:43.680" Title="Is there any code in Firefox (as of 2020) that comes from Netscape Navigator?" Tags="&lt;history&gt;&lt;netscape&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="14230" PostTypeId="2" ParentId="1711" CreationDate="2020-03-27T12:00:45.580" Score="8" Body="&lt;ul&gt;&#xA;&lt;li&gt;0x1e is a very clever (and rapid) approximation to sqrt (a^2 + b^2).&lt;/li&gt;&#xA;&lt;li&gt;0x1d is distance between two points.&lt;/li&gt;&#xA;&lt;li&gt;0x1c is, I'm fairly sure, to clip a point to screen coords.  It doesn't seem to be used in any released game I have the roms for.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here's my writeup after tearing apart the Battlezone microcode and the Mame code extant at the time, as 6502 source.  Yes, I have a half-written game targetted at Tempest hardware.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; Tempest mathbox commands, reverse-engineered from the mame source, snippets of&#xA;; original 'malibu' source by Owen Rubin and Ed Logg, disassemblies of red baron,&#xA;; tempest and battlezone and comments made on the internet by Owen Rubin, Jed Margolin&#xA;; Ed Rotberg and Mike Albaugh&#xA;&#xA;; The Mathbox appears to the programmer as a memory mapped device (mapped at 0x6080 - &#xA;; 0x6100 in tempest)  Writing to one of these locations triggers a mathbox command.  Not &#xA;; all locations are valid, according to the mame source, but I think mame is wrong, as the&#xA;; final op is probably a test op and the clip operation appears broken too (but is unused in&#xA;; all mathbox games so would not actually break anything)&#xA;&#xA;; The same mathbox was used for (at least) battlezone, red baron, vortex and tempest.  &#xA;; A similar (possibly the same) but earlier model was developed by Jed Margolin for&#xA;; malibu.  Battlezone and Red Baron are the best places to look for examples of this&#xA;; hardware 'in action'; Tempest only ever uses the perspective divide Y' / X'&#xA;&#xA;; All mathbox memory is write-only, with the exception of 2 'result' locations outside &#xA;; of the main 32 byte block and a single mathbox status bit used for testing if the mathbox &#xA;; has finished calculating.&#xA;&#xA;; The coordinate system is funky. Very funky.&#xA;; X is into the screen, Y is horizontal, and Z vertical.&#xA;&#xA;; Be extremely careful with division.  if n is not set to 0x10, the results will be&#xA;; rather 'wacky'.  You might be able to get 2Y'/X' by using 0x11 and Y'/2X' by using &#xA;; 0x0f, but you will need to mask of bottom and top bits respectively and will lose precision&#xA;&#xA;&#xA;mb_base           = 0x6080&#xA;mb_result_lo      = 0x6060&#xA;mb_result_hi      = 0x6070&#xA;mb_status         = 0x6040         ; Test using 'foo: bit mb_status; bmi foo'&#xA;&#xA;mb_ld_a           = mb_base + 0x00&#xA;mb_ld_b           = mb_base + 0x02&#xA;mb_ld_e           = mb_base + 0x04&#xA;mb_ld_f           = mb_base + 0x06&#xA;mb_ld_x           = mb_base + 0x08&#xA;mb_ld_y           = mb_base + 0x0a&#xA;mb_calc_xdash     = mb_base + 0x0b ; set y hi &#xA;                                   ; calculate X' = A(X-E) - B(Y-F)&#xA;mb_ld_n           = mb_base + 0x0c ; count for clipping and divide, should be 0x10 for divide&#xA;mb_ld_z_hi        = mb_base + 0x0d ; 4 byte value, gets blown away regularly&#xA;mb_ld_z           = mb_base + 0x0f ; 4 byte value, gets blown away regularly&#xA;mb_calc_all       = mb_base + 0x11 ; set y hi &#xA;                                   ; calculate X' = AX - BY + E, &#xA;                                   ; calculate Y' = BX + AY + F, &#xA;                                   ; return Y'/X'&#xA;mb_calc_ydash     = mb_base + 0x12 ; Y' = BX + AY + F, &#xA;                                   ; return Y'/X'&#xA;mb_calc_yx        = mb_base + 0x13 ; Y'/X'&#xA;mb_calc_zx        = mb_base + 0x14 ; Z/X'&#xA;mb_ld_xdash       = mb_base + 0x15&#xA;mb_rd_xdash       = mb_base + 0x17&#xA;mb_rd_ydash_hi    = mb_base + 0x18&#xA;mb_rd_ydash       = mb_base + 0x19&#xA;mb_ld_ydash       = mb_base + 0x1a&#xA;mb_clip           = mb_base + 0x1c ; mame implementation appears useless, is probably wrong &#xA;                                   ; opcode not used in bzone, red baron, or tempest at least.  &#xA;                                   ; need to disassemble the mathbox roms and reverse engineer &#xA;                                   ; this and 0x1f.  Or contact Mike Albaugh :-)&#xA;mb_calc_distance  = mb_base + 0x1d ; set f hi, approximate sqrt ((f-b)^2 + (e-a)^2)&#xA;mb_calc_hypot     = mb_base + 0x1e ; approximate sqrt(f^2+e^2)&#xA;mb_illegal        = mb_base + 0x1f ; Not implemented in MAME - self test, maybe?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16651" LastActivityDate="2020-03-27T12:00:45.580" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14231" PostTypeId="2" ParentId="14229" CreationDate="2020-03-27T13:47:44.567" Score="17" Body="&lt;p&gt;Firefox has seen a great deal of development over the last 22 years, both in maintaining the original code and in re-writing large portions. Currently, much of Firefox is being converted from C++ to modern Rust code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, there are certain core pieces to the browser that maintain code from the time it was open-sourced. A reasonable place to look is the HTML Parser within the Gecko engine. This makes sense because even early versions of Netscape Navigator need to be built out around the basic functionality of parsing the HTML standard, which itself has evolved over the years in a backwards compatible manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the current Git repository for Gecko, located on Github at &lt;code&gt;mozilla/gecko-projects&lt;/code&gt;, you can view the &lt;a href=&quot;https://github.com/mozilla/gecko-projects/blame/pine/parser/htmlparser/CParserContext.cpp&quot; rel=&quot;noreferrer&quot;&gt;revision history&lt;/a&gt; of the HTML parser. The linked file, &lt;code&gt;CParserContext.cpp&lt;/code&gt; is part of that original HTML parsing core, and you can see the history goes back 22 years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xglew.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xglew.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My impression of the transition is that many of the same developers just kept working on what they had been working on within Netscape. This was more of an organizational transition and not a real change in the people/minds behind the actual code. &lt;em&gt;I think this is an important point to make, if one is interested in history as a story about the people who made it, rather than just a collection of the artifacts the people made.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is just an example, and I am sure you can find lots of code in the Github repository (which incidentally mirrors the &quot;official&quot; repository that &lt;em&gt;uses Mercurial for source control&lt;/em&gt;). that originated with the release of the Navigator source code in 1998. Just focus on &quot;foundational&quot; functions like parsing and processing of the document model, and much of the already mature code from Netscape's days are likely to still survive.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-03-28T13:48:43.680" LastActivityDate="2020-03-28T13:48:43.680" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="14232" PostTypeId="1" CreationDate="2020-03-27T14:03:18.147" Score="3" ViewCount="185" Body="&lt;p&gt;Chapter 3 of the &lt;em&gt;Apple II Reference Manual&lt;/em&gt; describes the&#xA;machine-language Monitor. On &lt;a href=&quot;https://archive.org/details/Apple_II_Reference_Manual_1979_Apple/page/n51/mode/1up/search/MODE&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 41&lt;/a&gt; it describes certain&#xA;remembered locations:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Monitor remembers the addresses of up to five locations. Two of&#xA;these are special: they are the addresses of the last location whose&#xA;value you inquired about, and the location which is next to have its&#xA;value changed. These are called the &lt;em&gt;last opened location&lt;/em&gt; and the&#xA;&lt;em&gt;next changable location.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;However, the further description of how these are used is not exactly&#xA;correct:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Each time the Monitor displays a value contained in a location, it&#xA;remembers that location as the &lt;em&gt;last opened location&lt;/em&gt;.&lt;br /&gt;&#xA;...&lt;br /&gt;&#xA;If you type a period (.) on an input line to the Monitor, followed&#xA;by an address, the Monitor will dispaly a &lt;em&gt;memory dump&lt;/em&gt;: the values&#xA;contained in all locations from the last opened location to the&#xA;location whose address you typed following the period.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Typing &lt;code&gt;0&lt;/code&gt; and hitting Return (which produces &lt;code&gt;0000- 4C&lt;/code&gt;) followed by&#xA;&lt;code&gt;.2&lt;/code&gt; and Return produces &lt;code&gt;0001- 3C D4&lt;/code&gt;. Either the &amp;quot;last opened&amp;quot;&#xA;location was actually set to the location &lt;em&gt;after&lt;/em&gt; the last displayed&#xA;location or the &lt;code&gt;.&lt;/code&gt; command displays from last opened location &lt;em&gt;plus&#xA;one&lt;/em&gt; to the following address.&lt;/p&gt;&#xA;&lt;p&gt;And of course there are the mysterious other three &amp;quot;remembered&amp;quot;&#xA;locations.&lt;/p&gt;&#xA;&lt;p&gt;I would like an exact (and ideally, clear) description of how all this&#xA;actually works, including what these five remembered locations are and&#xA;how the various commands set and use them.&lt;/p&gt;&#xA;&lt;p&gt;Additional technical information that would be helpful is where these&#xA;remembered locations are stored in memory (presumably &lt;code&gt;A1L&lt;/code&gt;, &lt;code&gt;A1H&lt;/code&gt;,&#xA;&lt;code&gt;A2L&lt;/code&gt;, ..., &lt;code&gt;A5H&lt;/code&gt; at locations $3C through $45?) and what other&#xA;commonly available software (the Mini-assembler, &lt;a href=&quot;https://archive.org/details/programmers-aid-1/page/n0/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Programmer's&#xA;Aid #1&lt;/a&gt;, DOS 3.3, etc.) uses and/or changes them.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-31T00:57:49.713" Title="How exactly does the Apple II monitor set and use the &quot;last opened&quot; and &quot;next changable&quot; locations?" Tags="&lt;apple-ii&gt;&lt;firmware&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14233" PostTypeId="2" ParentId="14229" CreationDate="2020-03-27T14:58:57.790" Score="79" Body="&lt;p&gt;A number of components still present in Firefox date back to the first code drop in 1998 and were probably present before that. One of these is &lt;code&gt;nsprpub&lt;/code&gt;, the NetScape Portable Runtime library, and it has some code snippets which are still identical to those in the first public CVS commit (as verifiable from &lt;a href=&quot;https://archive.mozilla.org/pub/vcs-archive/&quot; rel=&quot;noreferrer&quot;&gt;the VCS archives&lt;/a&gt;). For example, &lt;a href=&quot;https://github.com/mozilla/gecko/blob/eb7c8aeefdb7c31235d6c309c6188c40d15e486f/nsprpub/pr/src/pthreads/ptthread.c#L103&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;ptthread.c&lt;/code&gt;’s &lt;code&gt;_PR_InitializeStack&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/*&#xA;** Initialize a stack for a native pthread thread&#xA;*/&#xA;static void _PR_InitializeStack(PRThreadStack *ts)&#xA;{&#xA;    if( ts &amp;amp;&amp;amp; (ts-&amp;gt;stackTop == 0) ) {&#xA;        ts-&amp;gt;allocBase = (char *) &amp;amp;ts;&#xA;        ts-&amp;gt;allocSize = ts-&amp;gt;stackSize;&#xA;&#xA;        /*&#xA;        ** Setup stackTop and stackBottom values.&#xA;        */&#xA;#ifdef HAVE_STACK_GROWING_UP&#xA;        ts-&amp;gt;stackBottom = ts-&amp;gt;allocBase + ts-&amp;gt;stackSize;&#xA;        ts-&amp;gt;stackTop = ts-&amp;gt;allocBase;&#xA;#else&#xA;        ts-&amp;gt;stackTop    = ts-&amp;gt;allocBase;&#xA;        ts-&amp;gt;stackBottom = ts-&amp;gt;allocBase - ts-&amp;gt;stackSize;&#xA;#endif&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;hasn’t changed &lt;em&gt;at all&lt;/em&gt; in 22 years. &lt;code&gt;_PR_InitThreads&lt;/code&gt;, further down, has large portions which haven’t changed either. Over half of the original &lt;code&gt;ptthread.c&lt;/code&gt; is still present in the current version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, if my calculations are correct, out of 65,745 lines in the original &lt;code&gt;nsprpub&lt;/code&gt;, 36,046 are present unchanged in the current version of &lt;code&gt;nsprpub&lt;/code&gt;, &lt;em&gt;i.e.&lt;/em&gt; 54.8%.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-03-27T15:13:56.633" LastActivityDate="2020-03-27T15:13:56.633" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14234" PostTypeId="1" AcceptedAnswerId="14236" CreationDate="2020-03-27T15:21:10.803" Score="1" ViewCount="97" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8350/how-did-overstriking-on-printer-terminals-work&quot;&gt;This question&lt;/a&gt; addressed the question of APL overstrikes on printing terminals. However, IBM also had 3270 video display terminals that supported APL, as well, and those, too, handled overstriking. How?&lt;/p&gt;&#xA;" OwnerUserId="4088" LastEditorUserId="4088" LastEditDate="2020-03-27T15:28:44.347" LastActivityDate="2020-03-27T16:14:01.760" Title="Overstriking for APL on 3270s?" Tags="&lt;terminal&gt;&lt;mainframe&gt;&lt;apl&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14235" PostTypeId="1" CreationDate="2020-03-27T15:27:44.877" Score="4" ViewCount="444" Body="&lt;p&gt;The APL language used a unique set of characters, and additionally allowed overstriking of some characters on the terminal to form characters that were used in the language. When an APL workspace was saved, or a function with an overstrike was executed, were overstruck characters (e.g., 'domino' [matrix division]) saved as a single token, or as the three-character sequence quad,backspace,divide (or the reverse)?&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2020-10-27T09:15:59.903" Title="IBM Mainframe APL internals?" Tags="&lt;mainframe&gt;&lt;apl&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14236" PostTypeId="2" ParentId="14234" CreationDate="2020-03-27T15:43:36.900" Score="3" Body="&lt;p&gt;It's important to keep in mind, that there weren't that much symbols using overstrike in basic (IBM) APL. By using an 8 bit codeset they all could be integrated. The most common charset was &lt;a href=&quot;https://en.wikipedia.org/wiki/Code_page_293&quot; rel=&quot;nofollow noreferrer&quot;&gt;Page 293&lt;/a&gt; which extends EBCDIC with all legal APL codes. Symbols that get generated per overstrike, like log (&lt;code&gt;⍟&lt;/code&gt; which is 'Power-Overstrike' or &lt;KBD&gt;P&lt;/KBD&gt;&lt;KBD&gt;O&lt;/KBD&gt;), got their own code position (X'CD') and was handled as a single characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later on terminals as well supported code page switching to handle the increased symbol set of APL2. Now a combination of &lt;a href=&quot;https://en.wikipedia.org/wiki/EBCDIC_037&quot; rel=&quot;nofollow noreferrer&quot;&gt;Page 037&lt;/a&gt; (the EBCDIC equivalent of ISO8859-1) and Page 310 &lt;em&gt;could&lt;/em&gt; be used. &lt;a href=&quot;https://en.wikipedia.org/wiki/Code_page_310&quot; rel=&quot;nofollow noreferrer&quot;&gt;Page 310&lt;/a&gt; holds all APL(1) symbols at the same encoding as Page 293, but replaces the letter blocks with 'new' APL symbols as well as making the decimals superscript. Page 310 is, despite its alike organization, not an EBCDIC page, but a strict graphical supplement, not usable on it's own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's ASCII equivalent (for ASCII perhiperals) of Page 293 was Page 371.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Combining was handled by the terminal, not the mainframe. To work with APL, a terminal had to have this codepage installed, usually part of the APL package including the appropriate keyboard and the capability to handle overstrike.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-27T16:14:01.760" LastActivityDate="2020-03-27T16:14:01.760" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14237" PostTypeId="2" ParentId="14235" CreationDate="2020-03-27T15:49:50.503" Score="7" Body="&lt;p&gt;It's important to keep in mind, that there weren't that much symbols using overstrike in basic (IBM) APL. By using an 8 bit codeset they all could be integrated. The most common charset on the mainframe side was &lt;a href=&quot;https://en.wikipedia.org/wiki/Code_page_293&quot; rel=&quot;noreferrer&quot;&gt;Page 293&lt;/a&gt; which extends EBCDIC with all (at that time) legal APL codes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With APL2 code handling became more complicated and Page 293 was replaced by a combination of an arbitrary base Page (nowadays Page 037, the EBCDIC equivalent of ISO8859-1) used for text and a separate page for APL symbols, &lt;a href=&quot;https://en.wikipedia.org/wiki/Code_page_310&quot; rel=&quot;noreferrer&quot;&gt;Page 310&lt;/a&gt;. Page 310 holds all original APL symbols at the same encoding as Page 293, but replaces the letter blocks with 'new' APL symbols as well as making the decimals superscript. Page 310 is, despite its alike organization, not an EBCDIC page, but a strict graphical supplement, not usable on it's own. Keeping the (APL1) codes at the same place simplified loading and conversion of older programs.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-03-27T16:21:11.763" LastActivityDate="2020-03-27T16:21:11.763" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14238" PostTypeId="2" ParentId="14232" CreationDate="2020-03-27T15:57:03.677" Score="2" Body="&lt;p&gt;Okay stealing text from the Apple Monitor unpeeled:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$31 MODE&lt;/code&gt; - This byte is used by the Monitor command processing routines to control parsing and to control operations when a blank is encountered after the hex digits. For example, a hex address followed by a colon causes setting of &lt;code&gt;MODE&lt;/code&gt; so that during further processing of the input line each blank encountered signifies end of a hex value to be placed in memory. During parsing, the contents of &lt;code&gt;MODE&lt;/code&gt; indicate where the hex values should be stored for use when the command itself is encountered. &lt;code&gt;MODE&lt;/code&gt; is set to appropriate values by plus, minus, colon, and period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$3C A1L&lt;/code&gt; - Multipurpose Monitor work area:&lt;br&gt;&#xA;&lt;code&gt;$3D A1H&lt;/code&gt; - May be clobbered by Instruction Trace in Old Monitor; see &lt;code&gt;XQT&lt;/code&gt; above.&lt;br&gt;&#xA;When the Monitor begins processing a command, MODE is initiailized to zero. As the input line scanned, hex digits are first place into &lt;code&gt;A2L,H&lt;/code&gt;. From there they are moved also to &lt;code&gt;A1L,H&lt;/code&gt; and &lt;code&gt;A3L,H&lt;/code&gt; as long &lt;code&gt;MODE&lt;/code&gt; remains zero. When a plus, minus, colon or period is encountered, &lt;code&gt;MODE&lt;/code&gt; is modified to indicate which, and &lt;code&gt;A1L,H&lt;/code&gt; will continue to contain the value, terminated by the operator encountered.&lt;br&gt;&#xA;&lt;code&gt;A1L,H&lt;/code&gt; is the primary index for the BLANK monitor command, memory examine or display.&lt;br&gt;&#xA;&lt;code&gt;A1L,H&lt;/code&gt; contains the addend for the Monitor ADD command.&lt;br&gt;&#xA;&lt;code&gt;A1L,H&lt;/code&gt; contains the minuend for the Monitor &#xA;SUBTRACT command.&lt;br&gt;&#xA;&lt;code&gt;A1L,H&lt;/code&gt; is the source field pointer during the &#xA;Monitor MOVE command.&lt;br&gt;&#xA;&lt;code&gt;A1L,H&lt;/code&gt; is one of the two indices used in the &#xA;Monitor VERIFY command.&lt;br&gt;&#xA;&lt;code&gt;A1L.H&lt;/code&gt; is the source field from which &lt;code&gt;PCL.H&lt;/code&gt; is set on L and G Monitor commands, and the Old Monitor commands S and T, if an address is specified. If no address is used in the input line, then &lt;code&gt;PCL.H&lt;/code&gt; is the residue of the last command which maintained or used it.&lt;br&gt;&#xA;&lt;code&gt;A1L,H&lt;/code&gt; is the memory pointer used for cassette tape &#xA;READ and WRITE Monitor operations.&lt;br&gt;&#xA;Monitor routine &lt;code&gt;NXTA1&lt;/code&gt; increments &lt;code&gt;A1L,H&lt;/code&gt; by one and &#xA;then compares the result to &lt;code&gt;A2L,H&lt;/code&gt;. &lt;code&gt;If A2L.H&lt;/code&gt; is &#xA;less than &lt;code&gt;A1H,L&lt;/code&gt;, then Carry is set when control is &#xA;returned to the calling program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$3E A2L&lt;/code&gt; - Multipurpose Monitor work area:&lt;br&gt;&#xA;&lt;code&gt;$3F A2H&lt;/code&gt; - May be clobbered by Instruction Trace in Old Monitor; see &lt;code&gt;XQT&lt;/code&gt; above.&lt;br&gt;&#xA;This field is the receiving field into which hex data is stored during Monitor Command parsing. When the command itself is encountered, &lt;code&gt;A2L,H&lt;/code&gt; contains the last parameter entered. While &lt;code&gt;MODE&lt;/code&gt; contains zero (until a plus,minus, colon or period is encountered) &lt;code&gt;A2L,H&lt;/code&gt; is continually copied into &lt;code&gt;A1L,H&lt;/code&gt; and &lt;code&gt;A3L,H&lt;/code&gt;. If a &quot;less than&quot; sign is encountered, &lt;code&gt;A2L,H&lt;/code&gt; is immediately copied to &lt;code&gt;A4L,H&lt;/code&gt; and &lt;code&gt;A5L,H&lt;/code&gt;&#xA;&lt;code&gt;A2L,H&lt;/code&gt; is used to terminate examine (memory display), tape write, tape read, memory move, and memory verify operations.&lt;br&gt;&#xA;&lt;code&gt;A2L,H&lt;/code&gt; contains the subtrahend in a Monitor &#xA;SUBTRACT command operation.&lt;br&gt;&#xA;&lt;code&gt;A2L,H&lt;/code&gt; contains the augend in a Monitor ADD command &#xA;operation.&lt;br&gt;&#xA;&lt;code&gt;A2L,H&lt;/code&gt; is the source field and &lt;code&gt;A3L,H&lt;/code&gt; is maintained &#xA;as the pointer for the Monitor STORE command.&lt;br&gt;&#xA;&lt;code&gt;A2L,H&lt;/code&gt; contains the port number in an input port select or output port select (control K or P) command.&lt;br&gt;&#xA;Monitor routine &lt;code&gt;NXTA1&lt;/code&gt; increments &lt;code&gt;A1L,H&lt;/code&gt; by one and &#xA;then compares the result to &lt;code&gt;A2L,1I&lt;/code&gt;. If &lt;code&gt;A2L,H&lt;/code&gt; is &#xA;less than &lt;code&gt;AIL,H&lt;/code&gt; then Carry is set when control is &#xA;returned to the calling program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$40 A3L&lt;/code&gt; - Multipurpose Monitor work area:&lt;br&gt;&#xA;&lt;code&gt;$41 A3H&lt;/code&gt; - May be clobbered by Instruction Trace in Old Monitor; see &lt;code&gt;XQT&lt;/code&gt; above.&lt;br&gt;&#xA;&lt;code&gt;A1L,H&lt;/code&gt; and &lt;code&gt;A3L,H&lt;/code&gt; are both filled from &lt;code&gt;A2L,H&lt;/code&gt; during Monitor Command processing scan of the input line as described above regarding &lt;code&gt;A1L,H&lt;/code&gt;.&lt;br&gt;&#xA;&lt;code&gt;A3L,H&lt;/code&gt; is used as the destination pointer during &#xA;Monitor STORE command processing.&lt;br&gt;&#xA;&lt;code&gt;A3L,H&lt;/code&gt; is used as a work area by the Register Display routine, which is called by the control-E Monitor command, or as part of the single cycle or trace operations of the Old Monitor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$42 A4L&lt;/code&gt; - Multipurpose Monitor work area:&lt;br&gt;&#xA;&lt;code&gt;$43 A4H&lt;/code&gt; - May be clobbered by Instruction Trace in Old Monitor; see &lt;code&gt;XQT&lt;/code&gt; above.&lt;br&gt;&#xA;This field (and &lt;code&gt;A5L,H&lt;/code&gt;) are loaded from &lt;code&gt;A2L,H&lt;/code&gt; during Monitor Command Processor scan of the input area when a &quot;&amp;lt;&quot; character is encountered.&lt;br&gt;&#xA;&lt;code&gt;A4L,H&lt;/code&gt; is the receiving field pointer during a Monitor MOVE command execution.&lt;br&gt;&#xA;&lt;code&gt;A4L,H&lt;/code&gt; is the second field pointer during a Monitor VERIFY operation.&lt;br&gt;&#xA;Monitor routine &lt;code&gt;NXTA4&lt;/code&gt; increments &lt;code&gt;A4L,H&lt;/code&gt; by one, and then drops into &lt;code&gt;NXTA1&lt;/code&gt; , which increments &lt;code&gt;A1L,H&lt;/code&gt; by one and then compares the result to &lt;code&gt;A2L,H&lt;/code&gt;. If &lt;code&gt;A2L,H&lt;/code&gt; is less than &lt;code&gt;A1L,H&lt;/code&gt; then Carry is set when control is returned to the calling program.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;$42 A5L&lt;/code&gt; - Multipurpose Monitor work area:&#xA;&lt;code&gt;$43 A5H&lt;/code&gt; - This field is not within the bounds of the area of &lt;code&gt;XQT&lt;/code&gt;, which, in the Old Monitor overlays A1L through A4H.&lt;br&gt;&#xA;&lt;em&gt;Note&lt;/em&gt; &lt;code&gt;A5H = $45 = ACC&lt;/code&gt; This field is filled from &lt;code&gt;A2L,H&lt;/code&gt; as described above for &lt;code&gt;A4L,H&lt;/code&gt;. However the field is not otherwise referenced within the monitor, except that &lt;code&gt;ACC&lt;/code&gt; (below) is also &lt;code&gt;A5H&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2020-03-27T16:03:04.683" LastActivityDate="2020-03-27T16:03:04.683" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14239" PostTypeId="2" ParentId="14235" CreationDate="2020-03-27T17:24:53.470" Score="4" Body="&lt;p&gt;I was once writing an APL compiler (never finished, having figured I could single-handedly write a compiler in a 10 week undergraduate programming project), and the choice I made was to have an internal 8-bit character set where each composite symbol was a single character. This seemed an obvious choice to me, since that way you're separated from how that symbol is represented on any particular external device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing was supposed to be portable, but my development system was on ICL 1906A, with an impoverished 6-bit character set, and accessed through teletypes with a standard typehead. So my &lt;em&gt;pro tem&lt;/em&gt; external representation used two-letter abbreviations preceded by dot. I might have picked .MD for the matrix-divide operator, for example.  But only the lexical scanner needed to know about that.  If I had ever had a better terminal, I would just write an alternative lexer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see your title explicitly asks about IBM implementations, but I think a description of alternative system might shed a little light. Fundamentally this feels like the same solution as the IBM one -- define the character set you need, and then translate to/from the devices you've actually got (which, if you have a fancy terminal that I did not, might be done by installing extra character sets in your fancy terminal).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-03-27T17:24:53.470" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14240" PostTypeId="2" ParentId="14206" CreationDate="2020-03-27T20:47:39.940" Score="4" Body="&lt;p&gt;I did some looking around on the internet archive, browsing through a few collections, and I ran across this variant:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/riag_005_Volume_014_-_Integer_Basic_Games&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rhode Island Apple Group Volume 14 - Integer Basic Games&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disk contains a what could be a variation, or an ancestor (or even a descendant) of the code listed above.  There are enough similarities to look suspicious, but most of these boot menu programs were similar in nature so it's not a slam dunk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a screenshot of the program running:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2KI6O.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2KI6O.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the source code, which has an attribution in the last three lines:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 10  NOTRACE : NORMAL : TEXT &#xA; 20  CLEAR &#xA; 30 D$ =  CHR$ (4): REM CHR$(4) IS CTRL-D&#xA; 40  PRINT D$;&quot;NOMON C,I,O&quot;&#xA; 50  HOME &#xA; 60  PRINT D$;&quot;CATALOG&quot;&#xA; 70  DIM L(24)&#xA; 80  FOR I = 1 TO 24&#xA; 90  READ L(I)&#xA; 100  NEXT I&#xA; 110 SL = SL + 1&#xA; 120 X =  PEEK (L(SL)) - 128&#xA; 130  IF X &amp;lt;  ASC (&quot;0&quot;) OR X &amp;gt;  ASC (&quot;2&quot;) GOTO 110&#xA; 140  FOR I = SL TO 24&#xA; 150 X =  PEEK (L(I)) - 128&#xA; 160  IF X &amp;lt;  ASC (&quot;0&quot;) OR X &amp;gt;  ASC (&quot;2&quot;) GOTO 210&#xA; 170  POKE L(I),160: POKE L(I) + 2,173&#xA; 180 LL = I - SL + 193&#xA; 190  POKE L(I) + 1,LL&#xA; 200  NEXT I&#xA; 210  PRINT &quot;RUN ?  LOCK=1 UNLOCK=2 DELETE=3 EXIT=4&quot;;&#xA; 220 B$ = &quot;RUN&quot;&#xA; 230  HTAB 6&#xA; 240  GET K$&#xA; 250  IF K$ = &quot;4&quot; THEN  END &#xA; 260  IF K$ &amp;gt; &quot;0&quot; AND K$ &amp;lt; &quot;4&quot; GOTO 290&#xA; 270  IF K$ &amp;gt; &quot;@&quot; AND K$ &amp;lt;  CHR$ (LL - 127) GOTO 370&#xA; 280  GOTO 240&#xA; 290  IF K$ = &quot;1&quot; THEN B$ = &quot;LOCK&quot;&#xA; 300  IF K$ = &quot;2&quot; THEN B$ = &quot;UNLOCK&quot;&#xA; 310  IF K$ = &quot;3&quot; THEN B$ = &quot;DELETE&quot;&#xA; 320  VTAB I: HTAB 1: CALL  - 868&#xA; 330  PRINT &quot; PRESS 'LETTER' YOU WISH TO &quot;;&#xA; 340  IF K$ = &quot;3&quot; THEN  FLASH &#xA; 350  PRINT B$;: NORMAL : CALL  - 198: REM BELL&#xA; 360  GOTO 240&#xA; 370 I = SL +  ASC (K$) - 65&#xA; 380 X =  PEEK (L(I) - 2)&#xA; 390  IF X = 194 AND B$ = &quot;RUN&quot; THEN B$ = &quot;BRUN&quot;&#xA; 400  IF X = 212 GOTO 470&#xA; 410 N$ = &quot;&quot;&#xA; 420  FOR J = 4 TO 33&#xA; 430 N$ = N$ +  CHR$ ( PEEK (L(I) + J))&#xA; 440  NEXT J&#xA; 450  PRINT : PRINT D$;B$;N$&#xA; 460  GOTO 20&#xA; 470  HOME : VTAB 10: PRINT &quot;THAT IS A TEXT FILE ! ! !&quot;&#xA; 480  FOR PAUSE = 1 TO 1000: NEXT PAUSE&#xA; 490  GOTO 20&#xA; 500  DATA  1027,1155,1283,1411&#xA; 510  DATA  1539,1667,1795,1923&#xA; 520  DATA  1067,1195,1323,1451&#xA; 530  DATA  1579,1707,1835,1963&#xA; 540  DATA  1107,1235,1363,1491&#xA; 550  DATA  1619,1747,1875,2003&#xA; 560  REM ***APPLESOFT MENU***&#xA; 570  REM BY  LARRY L. FREEMAN&#xA; 580  REM AND JAMES P. DAVIS&#xA; 590  REM  OF ABACUS...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It is conceivable a random developer took this as a starting template, compacted and streamlined the code, and made it a little sexier with the scrolling menu.  But that's pure speculation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did some googling, and found this citation in the &lt;a href=&quot;http://archive.6502.org/publications/micro/micro_31_dec_1980.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;December 1980 issue of Micro (The 6502 Journal) Number 31&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol start=&quot;780&quot;&gt;&#xA;  &lt;li&gt;Abacus II 2, Issue 5 (May, 1980)   Freeman, Larry L. and Davis, James P., &quot;Applesoft Menu,” pg. 8. Automatic menu for running Catalog&#xA;  programs on the Apple Disk.&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As near as I can tell, &quot;Abacus II&quot; was the newsletter for the &quot;Apple Bay Area Computer Users Society&quot; which seems to have been issued from 1980 to 1982. - But I have been unable to locate the Abacus II 2, Issue 5 referenced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This leads me to believe Larry Freeman and James Davis were members of the club and wrote this particular menu loader. - But I can't draw a direct connection to the LEVI version.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="7208" LastEditDate="2020-04-12T05:06:16.070" LastActivityDate="2020-04-12T05:06:16.070" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14244" PostTypeId="1" AcceptedAnswerId="14245" CreationDate="2020-03-28T14:52:13.153" Score="17" ViewCount="2015" Body="&lt;p&gt;The 8087 has instructions FPTAN and FPATAN, which are Partial Tangent and Partial Arctangent. The &quot;partial&quot; is presumably is to do with the range of the operands. For FPTAN the operand must be less than pi / 4 in absolute value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was there this restriction, so why is it not pi / 2?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the 80387, the FPTAN has to have an absolute value less than 2^63, but what is the reason for this number?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, was there a reason that the 8087 did not include FCOS and FSIN?&lt;/p&gt;&#xA;" OwnerUserId="15219" LastActivityDate="2020-03-29T21:53:45.940" Title="x87 trigonometric instructions" Tags="&lt;8087&gt;&lt;80387&gt;" AnswerCount="3" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14245" PostTypeId="2" ParentId="14244" CreationDate="2020-03-28T18:22:14.543" Score="17" Body="&lt;p&gt;The tan(x) function has a period of π radians, with asymptotes at ±π/2; it effectively calculates sin(x)/cos(x), and the latter goes to zero at those points.  So a function which evaluates properly over that interval can be used for any angle, by first &lt;em&gt;reducing&lt;/em&gt; the angle to the range supported.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, accurately calculating the tangent function near the asymptotes is more difficult than near the origin.  It can still be done by further reducing the input angle to the ±π/4 range and taking the reciprocal of the result.  This works because sin(x) == cos(x - π/2) and both functions are periodic, which you can substitute into the identity above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8087 FPTAN instruction was evidently designed to cover only the half-period immediately surrounding the origin, making the assumption that the programmer would reduce angles to that range before executing it.  This is common with polynomial approximations, which are much easier to implement in an FPU than a fully accurate calculation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 80387 runs into a different limitation, as it clearly implements a reduction step to permit an extended range of inputs.  But the double-extended format has a 63-bit significand, so reducing a value larger than 2^63 would leave no significant precision behind.  Even as you approach that limit, the available precision reduces substantially in absolute terms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the 8087 did not include sine and cosine calculations, it is possible to derive them using the following identities:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;1+Tan^2(a) = 1/Cos^2(a)&lt;br&gt;&#xA;  1+Cot^2(a) = 1/Sin^2(a)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Hence something like the following sequence would apply:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FPTAN&#xA;FMUL ST(0)  ; square the tangent&#xA;FLD1&#xA;FADDP       ; add 1&#xA;FSQRT       ; square root&#xA;FLD1&#xA;FDIVP       ; reciprocal&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The above would produce the cosine, but not necessarily with the correct sign.  This would have to be inferred from the quadrant of the original input (before reduction).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, obtaining the correct result from a single instruction is much faster and more convenient, which is why it was added to the 80387.  In the earlier 8087, the space for microcode was decidedly limited, so functions that weren't strictly necessary were simply left out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Full implementations of trigonometric functions usually start with a reduction step anyway, to improve the precision of the result by avoiding large values internal to the computation.  These can still be implemented on the 8087 using the five elementary operations - addition, subtraction, multiplication, division, and square root.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-03-28T21:22:42.803" LastActivityDate="2020-03-28T21:22:42.803" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="14246" PostTypeId="2" ParentId="14244" CreationDate="2020-03-29T01:55:27.487" Score="14" Body="&lt;p&gt;The restrictions on the range of arguments the transcendental instructions are able to handle is a direct result of hardware resource limitations in these early floating-point units. The primary source for the implementation details of the transcendental instructions in the 8087 is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rafi Nave, &quot;Implementation of transcendental functions on a numerics processor&quot;. &lt;em&gt;Microprocessing and Microprogramming&lt;/em&gt;, Vol. 11, No. 3-4, March-April 1983, pp. 221-225&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It states that the microcode size was limited to about 500 lines for all of the transcendentals combined. Because of limited hardware, the algorithms used are based on CORDIC for the initial steps, followed by rational approximation once the partial remainder has become sufficiently small. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To fit the ~30kbit microcode ROM into the chip at all with the transistor densities and die sizes available at the time (the 8087 contained &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6144/823&quot;&gt;&lt;em&gt;more&lt;/em&gt;&lt;/a&gt; transistors than the 8086), Intel had to resort to  a special four-state ROM, as described in&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rafi Nave and John Palmer, &quot;A Numeric Data Processor&quot;. In &lt;em&gt;1980 IEEE International Solid-State Circuits Conference&lt;/em&gt;, Philadelphia, PA, USA, February 13-15, 1980, pp. 108-109&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A second source, that pertains to the 80387 which relaxed several range restrictions on the transcendental instructions describes the same combination of CORDIC and rational approximation as was used in the 8087:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alan K. Yuen, &quot;Intel's Floating-Point Processors&quot;. &lt;em&gt;Electro/88 Conference Record&lt;/em&gt;, Boston, MA, USA, May 10-12, 1988, pp. 48/5/1-7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Palmer and Morse, who were architects of the 8086/8087, published a book on the math coprocessor:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;John F. Palmer and Stephen P. Morse, &quot;The 8087 Primer&quot;, John Wiley &amp;amp; Sons, 1984&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the chapter on the transcendental functions, they likewise cite the severe restrictions on microcode size as the reason for the range limitations of the built-in transcendental instructions of the 8087. The fundamental design idea was to support only the most time-consuming part of these computations in hardware and let programmers handle the argument reduction in software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All trigonometric functions can be computed via &lt;code&gt;FPTAN&lt;/code&gt;and all inverse trigonometric functions can be computed via &lt;code&gt;FPATAN&lt;/code&gt;, as shown in &quot;The 8087 Primer&quot;, alleviating the need for direct hardware support given the severe hardware resource limitations in the 8087. For the 80387, more hardware resources were available, which allowed support for the &lt;code&gt;FSINCOS&lt;/code&gt; instruction.&lt;/p&gt;&#xA;" OwnerUserId="823" LastEditorUserId="823" LastEditDate="2020-03-29T21:53:45.940" LastActivityDate="2020-03-29T21:53:45.940" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14247" PostTypeId="2" ParentId="9520" CreationDate="2020-03-29T18:15:48.640" Score="2" Body="&lt;p&gt;If you have activated a logical file as the current output channel (using &lt;code&gt;CHKOUT&lt;/code&gt; or &lt;code&gt;$FFC9&lt;/code&gt;), you reset both active input and output channels to default using &lt;code&gt;CLRCHN&lt;/code&gt; a.k.a. &lt;code&gt;CLRCH&lt;/code&gt;, &lt;code&gt;$FFCC&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, &lt;code&gt;BSOUT&lt;/code&gt; &lt;code&gt;$FFD2&lt;/code&gt; will print to the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will not have closed the file, it is still open. You can re-activate it again with &lt;code&gt;CHKOUT&lt;/code&gt; and eventually close it with &lt;code&gt;CLOSE&lt;/code&gt;, &lt;code&gt;$FFC3&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no need to use any of the bus-related functions such as &lt;code&gt;TALK&lt;/code&gt; or &lt;code&gt;LISTEN&lt;/code&gt;: they are the wrong abstraction level here. They come in handy if you want to talk to a disk drive or printer but not use the file administration for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another answer confuses the device number for the screen (which is 3) with logical file numbers. If you open a file, you basically create a mapping from a LFN (logical file number) to a device number (and possibly a secondary address, but those are too far out of the scope of printing to the screen). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are various books available about machine language programming on the 64, such as &quot;(&lt;a href=&quot;https://archive.org/details/Compute_s_Programming_the_Commodore_64_The_Definitive_Guide&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compute's) Programming the Commodore 64, The definitive guide&lt;/a&gt;&quot; by Raeto Collin West. I have &quot;Programming the PET/CBM&quot; by the same author and it is very thorough. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/commodore_c64_books&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here on archive.org&lt;/a&gt; are some more.&lt;/p&gt;&#xA;" OwnerUserId="7059" LastEditorUserId="7059" LastEditDate="2020-03-29T18:52:00.257" LastActivityDate="2020-03-29T18:52:00.257" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14249" PostTypeId="2" ParentId="14244" CreationDate="2020-03-29T20:15:58.443" Score="1" Body="&lt;p&gt;I remember that FPTAN didn't give the actual tg(x), but two results and you had to divide one by another in order to get tg(x) (and they were not sin(x) and cos(x) as one would hope). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably that's why it was &quot;Partial&quot;.&lt;/p&gt;&#xA;" OwnerUserId="15647" LastActivityDate="2020-03-29T20:15:58.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14250" PostTypeId="1" CreationDate="2020-03-29T23:39:22.873" Score="8" ViewCount="821" Body="&lt;p&gt;Someone &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/3045/what-was-the-purpose-and-history-of-the-c64s-special-keys/12465?noredirect=1#comment47014_12465&quot;&gt;recently commented&lt;/a&gt; that, &quot;a shift-Return is really different from a normal one. It moves the cursor to the next line, but does not complete an input operation.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would be interesting and perhaps convenient to have, but I tried it out in VICE on an emulated C64 running Commodore 64 BASIC V2 but the behaviour doesn't seem quite that, or at least doesn't make the subsequent line a continuation of the screen editor's logical input line, as far as I can tell. Below, &lt;code&gt;»&lt;/code&gt; in the left margin indicates lines I typed, and &lt;code&gt;↵&lt;/code&gt; at the end of a line indicates &lt;kbd&gt;Shift&lt;/kbd&gt;&lt;kbd&gt;RETURN&lt;/kbd&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  READY.&#xA;» PRINT &quot;HELLO↵&#xA;» WORLD&quot;&#xA;&#xA;  ?SYNTAX ERROR&#xA;  READY.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using the arrow keys to move up to the &quot;HELLO&quot; line and pressing &lt;kbd&gt;RETURN&lt;/kbd&gt; on it overwrites the following lines with &lt;code&gt;HELLO&lt;/code&gt;, a blank line and &lt;code&gt;READY.&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A couple of other examples:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;» 10 PRINT &quot;HELLO↵&#xA;» WORLD&quot;&#xA;&#xA;  ?SYNTAX ERROR&#xA;  READY.&#xA;» LIST&#xA;&#xA;  READY.&#xA;&#xA;» A=1:B=2&#xA;» PRINT A↵&#xA;» PRINT B&#xA;  2&#xA;&#xA;  READY.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In that last one, arrowing up to the &lt;code&gt;PRINT A&lt;/code&gt; line and pressing &lt;kbd&gt;RETURN&lt;/kbd&gt; on it overwrites the first two characters of the &lt;code&gt;PRINT B&lt;/code&gt; line with &lt;code&gt;1&lt;/code&gt;, leaves the next line alone, and overwrites the line after that with &lt;code&gt;READY.&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what is this feature, how does it work, and how is it intended to be used? Is it different on different versions of the Commodore screen editor and BASIC?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7059" LastEditDate="2020-04-01T21:57:57.020" LastActivityDate="2020-04-01T21:57:57.020" Title="What does Shift-RETURN do on Commodore's 8-bit computers?" Tags="&lt;commodore-64&gt;&lt;commodore&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14251" PostTypeId="2" ParentId="14250" CreationDate="2020-03-30T00:25:41.877" Score="11" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;It's a feature of how the Commodore screen editor and its connection to BASIC works. &lt;KBD&gt;SHIFT&lt;/KBD&gt;-&lt;KBD&gt;RETURN&lt;/KBD&gt; only advances the cursor on-screen. It does not change or manage logical lines. There is no implied line continuation.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Story:&lt;/h2&gt;&#xA;&lt;p&gt;As assumed, it isn't a line continuation. In the examples given it essentially works like hitting &lt;KBD&gt;CTRL&lt;/KBD&gt;-&lt;KBD&gt;X&lt;/KBD&gt; on an Apple II: The actual line does not get executed and the cursor moves to the beginning of the next screen line.&lt;/p&gt;&#xA;&lt;p&gt;While the Apple II (and many other BASIC machines) is based around a line input buffer, the Commodore uses a screen editor managing a series of logical lines. All editing is not done on screen lines, but these logical lines. They are created within the screen buffer whenever something is terminated with a return - either by entering text until return is hit, or when a program line gets output by LISTing it. This behaviour is the same since the very first PET. Something a Commodore user will learn to use early on when editing.&lt;/p&gt;&#xA;&lt;p&gt;Within this context &lt;KBD&gt;SHIFT&lt;/KBD&gt;-&lt;KBD&gt;RETURN&lt;/KBD&gt; simply advances the cursor down one line and up to the leftmost column. &lt;strong&gt;It's strictly a cursor movement&lt;/strong&gt;, exactly as if done with the arrow keys. &lt;strong&gt;Cursor movement does not change the management/structure of logical lines&lt;/strong&gt;, but simply moves the cursor around the screen. Editing is done on the screen without BASIC. Return is the only key that hands over a logical line to BASIC.&lt;/p&gt;&#xA;&lt;p&gt;The examples given do not use logical lines that spread over multiple screen lines, thus each of the lines entered is seen by the editor as a separate logical line.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;In the first example, the screen line with &lt;code&gt;PRINT &amp;quot;HELLO&lt;/code&gt; is one logical line, but since it's left via cursor movement, it doesn't get extended to the next screen line. Thus &lt;code&gt;WORLD&amp;quot;&lt;/code&gt; is put on a new logical line. When handed over to the BASIC cruncher it will of course generate a syntax error.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Since no line number was ever handed to BASIC, no line is stored in the second example, resulting in LIST showing an empty program.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Similarly in the third example. Here the first logical line (&lt;code&gt;A=1:B=2&lt;/code&gt;) was sent to BASIC, the second (&lt;code&gt;PRINT A&lt;/code&gt;) wasn't (no return), while the third (&lt;code&gt;PRINT B&lt;/code&gt;) was again, with an obvious result.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Example to see the difference while still using single screen line logical lines, try to enter your previous sequence as lines:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;» 10 A=1:B=2&#xA;» 20 PRINT A↵&#xA;» 30 PRINT B&#xA;» LIST&#xA;&#xA;  10 A=1:B=2&#xA;  30 PRINT B&#xA;  READY.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now move the cursor up to the original (first) line 10 and hit four times return (no shift), now all lines are in the program and will be listed:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;↵ 10 A=1:B=2&#xA;↵ 20 PRINT A&#xA;↵ 30 PRINT B&#xA;↵ LIST&#xA;&#xA;  10 A=1:B=2&#xA;  20 PRINT A&#xA;  30 PRINT B&#xA;  READY.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;A good way to see if a logical line extends over multiple screen lines is to simply delete or insert a character, as the editor will only move what belongs to the logical line.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-03-31T13:29:13.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14252" PostTypeId="1" CreationDate="2020-03-30T01:25:22.327" Score="3" ViewCount="494" Body="&lt;p&gt;I've been fooling around with the Merlin 8 (v2.58) assembler on my Apple IIe and ran into a small snag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, I would like to load the address of a block of data into a two-byte pair in zero page.  The data block might represent ASCII text, or a lookup table or just about anything.  In my case, I want to do this as a way of passing the pointer to a subroutine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've written a short &quot;Hello World&quot; program that shows an example of what I am trying to do.  Please note, this question isn't about the best way to print text or taking advantage of possible convenience features or Macros within Merlin.  I just wrote this code as an &lt;em&gt;example&lt;/em&gt; of what I am trying to do.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         ORG   $0900&#xA;&#xA;STRLO    EQU   $08&#xA;STRHI    EQU   $09&#xA;&#xA;CHROUT   EQU   $FDED&#xA;&#xA;START    LDA   PTR        ;DATA PTR LSB TO STRLO&#xA;         STA   STRLO&#xA;         LDA   PTR+1      ;DATA PTR MSB TO STRHI&#xA;         STA   STRHI&#xA;         JSR   PRINT      ;PRINT&#xA;         RTS              ;ALL DONE&#xA;&#xA;PRINT    LDY   #$00&#xA;:CONT    LDA   (STRLO),Y&#xA;         BEQ   :DONE&#xA;         JSR   CHROUT&#xA;         INY&#xA;         JMP   :CONT&#xA;:DONE    RTS&#xA;&#xA;DATA     ASC   &quot;HELLO RCSE!&quot;,00&#xA;PTR      DA    DATA&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you look at the listing, there is a subroutine labeled &lt;strong&gt;PRINT&lt;/strong&gt; that expects an address to be already loaded into two zero page registers &lt;strong&gt;STRLO&lt;/strong&gt; and &lt;strong&gt;STRHI&lt;/strong&gt;.  As it's name implies, &lt;strong&gt;PRINT&lt;/strong&gt; will simply start spitting out characters starting at the address in &lt;strong&gt;STRLO/STRHI&lt;/strong&gt; until a null terminator is encountered.  This means the calling thread is responsible for loading the address of the data to be printed into &lt;strong&gt;STRLO/STRHI&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is where things seem overly complicated, which is a sure sign I am missing something simple.  Merlin allows a convenient mechanism to define and label my data block (in this example my data is simply a short string) like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DATA    ASC    &quot;HELLO RCSE!&quot;,00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What I would like to know is the correct way to load the address of this data into&#xA;&lt;strong&gt;STRLO/STRHI&lt;/strong&gt; before calling &lt;strong&gt;PRINT&lt;/strong&gt;.  My first try was to use the &lt;strong&gt;DATA&lt;/strong&gt; label directly&#xA;like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;START    LDA   DATA&#xA;         STA   STRLO&#xA;         LDA   DATA+1&#xA;         STA   STRHI&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but this results in the loading the first two bytes of the data, not the address of&#xA;the data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My second attempt to was to try adding the immediate mode prefix # to my LDA instructions, like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;START    LDA   #DATA&#xA;         STA   STRLO&#xA;         LDA   #DATA+1&#xA;         STA   STRHI&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but that resulted in simply loading 0 (zero) and 1 (one) into &lt;strong&gt;STRLO/STRHI&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately, the only thing I have figured out is that I can get the address by defining a second label to serve as a pointer to the data (as shown in my code).  This works, but it seems clunky and makes me feel like I am simply missing the correct syntax to work with the address of &lt;strong&gt;DATA&lt;/strong&gt; directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In modern terms, having to define a second label to serve as a pointer to the actual label has a bad &lt;em&gt;smell&lt;/em&gt;, not to mention it doubles the number of labels for things like string tables, etc.  Can anyone shed some light on this for me?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2020-03-30T06:51:33.197" Title="How to transfer the address of a data block into zero page using the Merlin 8 assembler on my Apple //e?" Tags="&lt;apple-ii&gt;&lt;assembly&gt;&lt;6502&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14253" PostTypeId="2" ParentId="14252" CreationDate="2020-03-30T02:06:27.370" Score="2" Body="&lt;p&gt;Apparently, the correct syntax is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;START    LDA   #&amp;lt;DATA&#xA;         STA   STRLO&#xA;         LDA   #&amp;gt;DATA&#xA;         STA   STRHI&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The #&amp;lt; and #&gt; seem to indicate the the assembler that we are going for the LSB and MSB of the address for the DATA, not the DATA itself.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll leave the question open in case someone wants to elucidate on the why/what/wherefore.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2020-03-30T02:06:27.370" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14254" PostTypeId="2" ParentId="14252" CreationDate="2020-03-30T02:10:11.383" Score="6" Body="&lt;p&gt;In assembler, a label is just a number representing an address.  On the 6502, addresses are 16 bits, but the accumulator can only contain 8 bits at a time.  What you need is to extract the high and low halves of the address as distinct immediate operands, so that you can store them in the zero-page pointer location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not familiar with this particular assembler's capabilities, but often there is a prefix character that you can use to extract the high and low halves of an address or other value.  In relatively modern assemblers, these would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LDA #&amp;lt;DATA  ; load low half of address&#xA;STA STRLO   ; store it to ZP&#xA;LDA #&amp;gt;DATA  ; load high half of address&#xA;STA STRHI   ; store it to ZP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From the WDC W65C816S datasheet:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/w9jp3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w9jp3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In an assembler that supports performing arithmetic at assembly time, you could also write &lt;code&gt;(DATA DIV 256)&lt;/code&gt; and &lt;code&gt;(DATA MOD 256)&lt;/code&gt;, or whatever the local syntax is for those operators.  Modern assemblers often support &lt;code&gt;/&lt;/code&gt; and &lt;code&gt;%&lt;/code&gt; respectively.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-03-30T02:18:36.113" LastActivityDate="2020-03-30T02:18:36.113" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14255" PostTypeId="2" ParentId="14252" CreationDate="2020-03-30T06:51:33.197" Score="4" Body="&lt;p&gt;Immediate mode constant allow the use of modifiers to select high/low byte of an address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;http://www.apple2.org.za/gswv/a2zine/Docs/MerlinManual.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;Merlin manual&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;6.4  Immediate Data&#xA;&#xA;For  those opcodes such as LDA, CMP, etc., which  accept  immediate&#xA;data  (numbers  as  opposed  to  the  contents  of  addresses)  the&#xA;immediate mode is signaled by preceding the expression with a  &quot;#&quot;.&#xA;An example is LDX #3 which would load the X register with the value&#xA;3 rather than the contents of address 3.  In addition:&#xA;&#xA;     #&amp;lt;expression   Produces the low byte of the expression.&#xA;&#xA;     #&amp;gt;expression   Produces the high byte of the expression.&#xA;&#xA;     #expression    Also produces the low byte  of  the  expression&#xA;                    (the 6502 does not accept 2-byte data).&#xA;&#xA;     #/expression   Produces the high byte of the expression and is&#xA;                    an optional syntax.&#xA;&#xA;The recommended syntax is  &quot;&amp;lt;&quot;  and  &quot;&amp;gt;&quot;  for  low  and  high  byte&#xA;respectively.   Whatever  syntax  you use, be consistent, use it in&#xA;every case so your reader won't think there  is  something  special&#xA;about the &quot;one case&quot; where you specify &quot;&amp;lt;&quot; for low byte.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So &lt;em&gt;a&lt;/em&gt; proper (and common) solution might be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;START    LDA   #&amp;lt;DATA     ;DATA PTR LSB TO STRLO&#xA;         STA   STRLO&#xA;         LDA   #&amp;gt;DATA     ;DATA PTR MSB TO STRHI&#xA;         STA   STRHI&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-03-30T06:51:33.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14256" PostTypeId="2" ParentId="14099" CreationDate="2020-03-30T11:10:58.697" Score="1" Body="&lt;p&gt;Since the BBC Micro had a Teletext chip (SAA5050) and used it for its MODE 7 and the Teletext character set was added (I believe in that revision), it had its character set added, although, maybe just be coincidence ;)&lt;/p&gt;&#xA;" OwnerUserId="11490" LastActivityDate="2020-03-30T11:10:58.697" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14257" PostTypeId="1" AcceptedAnswerId="14264" CreationDate="2020-03-30T15:10:39.780" Score="14" ViewCount="499" Body="&lt;p&gt;The Commodore 128 hardware allowed two things that weren't possible on the C64: Moving the 6502 zero page and 6502 stack to another place in RAM besides pages 0 and 1, and switching the CPU and/or the VIC-IIe to access a second block of VIC-II color RAM. As far as I know, moving the zero page would not affect the fact that addresses $0000 and $0001 were mapped to the CPU's built-in I/O port rather than RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you know of any software that actually made use of those features? Second question, were they (or either of them) used by the built-in firmware or the included CP/M system in any way?&lt;/p&gt;&#xA;" OwnerUserId="16504" LastEditorUserId="4335" LastEditDate="2020-03-31T16:36:22.207" LastActivityDate="2021-03-15T13:11:20.653" Title="Was the Commodore 128 movable zero page / stack and second block of color RAM actually used?" Tags="&lt;commodore-64&gt;&lt;memory&gt;&lt;commodore-128&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14258" PostTypeId="2" ParentId="14232" CreationDate="2020-03-30T15:51:39.107" Score="5" Body="&lt;p&gt;The model of how the Monitor command line works in the &lt;em&gt;Apple II&#xA;Reference Manual&lt;/em&gt;, and most other documentation, isn't really in line&#xA;with how it does work. It doesn't help that the Monitor itself, at&#xA;least as far as command line parsing goes, is more a set of hacks than&#xA;anything truly coherent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following is an excerpted and edited copy of &lt;a href=&quot;https://github.com/0cjs/sedoc/blob/master/8bit/apple2/monitor.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;my personal notes on&#xA;the Monitor&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Monitor Commands&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Input to the monitor is a sequence of hexadecimal addresses and&#xA;commands, with multiple addresses and commands allowed on a line.&#xA;(Note that there are no &quot;separators&quot;; space is a valid command and&#xA;other whitespace will be read as invalid commands.)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Addresses are any sequence of &lt;code&gt;0-9&lt;/code&gt; and &lt;code&gt;A-F&lt;/code&gt;. Only the lowest&#xA;sixteen bits of an address will be used; the higher bits are&#xA;ignored.&lt;/li&gt;&#xA;&lt;li&gt;Commands are any other character. Unrecognized commands terminate&#xA;processing of the input line. Note that this means commands that&#xA;take an argument must be followed immediately by the argument.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Remembered Locations and Number Entry&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;There are three addresses that the monitor remembers and uses as&#xA;default addresses for its commands:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;next&lt;/em&gt;: the default address for dumping data, and some other&#xA;commands. (Stored at &lt;code&gt;A1L $3C&lt;/code&gt;,&lt;code&gt;A1H $3D&lt;/code&gt;.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;load&lt;/em&gt;: the default address at which data entry will start with the&#xA;&lt;code&gt;:&lt;/code&gt; command. (Stored at &lt;code&gt;A3L $40&lt;/code&gt;,&lt;code&gt;A3H $41&lt;/code&gt;.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;PC&lt;/em&gt;: the saved program counter providing the default address for&#xA;the &lt;code&gt;G&lt;/code&gt; and &lt;code&gt;L&lt;/code&gt; commands. (Stored at &lt;code&gt;PCL $3A&lt;/code&gt;, &lt;code&gt;PCH $3B&lt;/code&gt;.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Entering an address will set both &lt;em&gt;next&lt;/em&gt; and &lt;em&gt;load&lt;/em&gt; to that address.&#xA;Commands will update these as described below.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Commands&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Hexadecimal data dumps:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Following an address &lt;em&gt;addr&lt;/em&gt; with a space or CR will print &lt;em&gt;addr&lt;/em&gt;&#xA;followed by its contents and set &lt;em&gt;next&lt;/em&gt; to &lt;em&gt;addr+1&lt;/em&gt;. A space not&#xA;preceded by an address does nothing.&lt;/li&gt;&#xA;&lt;li&gt;A CR at the start of a line prints address &lt;em&gt;next&lt;/em&gt; only if it is a&#xA;multiple of 8, dumps memory contents from &lt;em&gt;next&lt;/em&gt; up to (but not&#xA;including) the next multiple of 8, and sets &lt;em&gt;next&lt;/em&gt; to the last&#xA;dumped address + 1.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;.&lt;/code&gt;, when followed by an address &lt;em&gt;addr&lt;/em&gt; will print the address&#xA;&lt;em&gt;next&lt;/em&gt;, dump memory from &lt;em&gt;next&lt;/em&gt; through &lt;em&gt;addr&lt;/em&gt;, and set &lt;em&gt;next&lt;/em&gt; to&#xA;&lt;em&gt;addr+1&lt;/em&gt;. &lt;code&gt;.&lt;/code&gt; not followed by an address does nothing.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Ctrl-E&lt;/code&gt; displays the register values A,X,Y,P,S from locations $45‥49&#xA;and sets &lt;em&gt;load&lt;/em&gt; to $45. (&lt;em&gt;next&lt;/em&gt; is unaffected.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Disassembly and running code:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;L&lt;/code&gt; disassembles 20 lines of code and sets &lt;em&gt;PC&lt;/em&gt; to the next address&#xA;after the disassembly. When immediately preceded by an address it&#xA;first sets &lt;em&gt;PC&lt;/em&gt; to that address. (A preceding address also still&#xA;sets &lt;em&gt;next&lt;/em&gt; and &lt;em&gt;load&lt;/em&gt;.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;G&lt;/code&gt; loads the registers from the saved values (&lt;code&gt;ACC&lt;/code&gt;, &lt;code&gt;XREG&lt;/code&gt;,&#xA;&lt;code&gt;YREG&lt;/code&gt;, &lt;code&gt;STATUS&lt;/code&gt; and &lt;code&gt;SPNT&lt;/code&gt; at $45-$49) and does a &lt;code&gt;JSR&lt;/code&gt; to &lt;em&gt;PC&lt;/em&gt;.&#xA;When immediately preceded by an address, it first sets &lt;em&gt;PC&lt;/em&gt; to that&#xA;address. (A preceding address also still sets &lt;em&gt;next&lt;/em&gt; and &lt;em&gt;load&lt;/em&gt;.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Depositing data into memory:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;:&lt;/code&gt; takes a sequence of data bytes and deposits them into memory&#xA;starting at &lt;em&gt;load&lt;/em&gt;. The data bytes are space-separated hexadecimal&#xA;numbers; only the lowest 8 bits of each number are used. Any command&#xA;will terminate the list of bytes. (&lt;code&gt;N&lt;/code&gt; is a convenient command to&#xA;terminate the list if you want to continue the line with an&#xA;address.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dest&amp;lt;addr&lt;/code&gt;: Sets &lt;code&gt;A4L,A4H $42,$43&lt;/code&gt; and &lt;code&gt;A5L,A5H $44,$45&lt;/code&gt; to &lt;em&gt;dest&lt;/em&gt;&#xA;(note that &lt;code&gt;A5H&lt;/code&gt; is also &lt;code&gt;ACC&lt;/code&gt;, overwriting the saved A register)&#xA;and &lt;code&gt;A2L,A2H $3E,$3F&lt;/code&gt; to &lt;em&gt;addr&lt;/em&gt;. (&lt;em&gt;addr&lt;/em&gt; also has the normal effect&#xA;of setting &lt;em&gt;next&lt;/em&gt; and &lt;em&gt;load&lt;/em&gt;.) Does nothing if not followed by an&#xA;address. (This is not normally used alone, but to set up &lt;code&gt;M&lt;/code&gt; and &lt;code&gt;V&lt;/code&gt;&#xA;commands, and could also be used to set up a &lt;code&gt;Ctrl-Y&lt;/code&gt; command.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dest&amp;lt;start.endM&lt;/code&gt; moves memory from &lt;em&gt;start&lt;/em&gt; through &lt;em&gt;end&lt;/em&gt; to&#xA;locations starting at &lt;em&gt;dest&lt;/em&gt; (the &lt;em&gt;dest&lt;/em&gt; range may overlap the&#xA;source range), sets &lt;em&gt;load&lt;/em&gt; to &lt;em&gt;dest&lt;/em&gt; and &lt;em&gt;next&lt;/em&gt; to &lt;em&gt;end+1&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dest&amp;lt;start.endV&lt;/code&gt; compares (&quot;verifies&quot;) memory. Non-matching&#xA;source/dest bytes will be displayed like &lt;code&gt;02FB-0B (0A)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Misc. commands:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;+&lt;/code&gt; and &lt;code&gt;-&lt;/code&gt; do 8-bit two's-complement arithmetic on the low 8 bits&#xA;of &lt;em&gt;next&lt;/em&gt; and the address following the command. They do nothing if&#xA;not immediately followed by an address.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;N&lt;/code&gt;, &lt;code&gt;I&lt;/code&gt;: Change character output to normal and inverse,&#xA;respectively.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Ctrl-P&lt;/code&gt; and &lt;code&gt;Ctrl-K&lt;/code&gt; set output resp. input to the lowest three&#xA;bits of &lt;em&gt;next&lt;/em&gt;. These are the equivalent of &lt;code&gt;PR#n&lt;/code&gt; and &lt;code&gt;IN#n&lt;/code&gt; in&#xA;BASIC.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Ctrl-Y&lt;/code&gt; calls $3F8; &lt;code&gt;RTS&lt;/code&gt; returns to monitor.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;How This Was Done&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Though I did look a bit through the Monitor source, it wasn't very&#xA;helpful. The design is confusing, at best, though it can give a few&#xA;hints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mainly I worked this all out through experimentation, assisted by a&#xA;custom &lt;code&gt;Ctrl-Y&lt;/code&gt; Monitor command that prints PCL/PCH and A1L/A1H&#xA;through A5L/A5H. (These are the main locations in the zero page that&#xA;store addresses or, more generally, numbers used as parameters by the&#xA;monitor routines.) The code is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;          ;   dumpmonvar: print monitor UI variables&#xA;          ;&#xA;          ;   This prints the saved PC and the addresses/16-bit values stored in  A1&#xA;          ;   through A5 These are variables used by the monitor user interface for&#xA;          ;   command handling and &quot;remembered&quot; addresses.&#xA;          ;&#xA;          ;   This depends on COUT preserving X and Y. This is true for the screen&#xA;          ;   (PR#0), but may not be for other char switch (CSW) routines.&#xA;          ;&#xA;          ;   This is position-independent code and may be loaded anywhere. $300 is a&#xA;          ;   usual place for it. Use `3F8: 4C LL HH`, where $HHLL is the start of&#xA;          ;   this routine, to set the Monitor Ctrl-Y command to run this.&#xA;          ;&#xA;          dumpmonvar&#xA;                      ;   Print PC, A1, ..., A5&#xA;A0 06                 ldy #6              ; 6 words to display&#xA;A2 3A                 ldx #PCL            ; first word to display&#xA;A9 A0     .nextA      lda #AA(' ')&#xA;20 ED FD              jsr COUT&#xA;B5 01                 lda 1,x             ; high byte&#xA;20 DA FD              jsr PRBYTE&#xA;B5 00                 lda 0,x             ; low byte&#xA;20 DA FD              jsr PRBYTE&#xA;E8                    inx                 ; next word&#xA;E8                    inx&#xA;88                    dey                 ; decrement count&#xA;D0 EC                 bne .nextA&#xA;20 8B FD              jsr CROUT1&#xA;60                    rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you want to try it out, you can just type in the hex code at the&#xA;left with &lt;code&gt;300: A0 06 A2 3A ...&lt;/code&gt; and then set the Ctrl-Y command to&#xA;call it with &lt;code&gt;3F8: 4C 00 03&lt;/code&gt;. Remember that CR following an address&#xA;will change &lt;em&gt;next&lt;/em&gt;, so if you want to see what the address set, as&#xA;opposed to the CR following it, type the Ctrl-Y immediately after the&#xA;address, before entering CR.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-03-31T00:57:49.713" LastActivityDate="2020-03-31T00:57:49.713" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14259" PostTypeId="2" ParentId="7529" CreationDate="2020-03-30T18:07:56.757" Score="2" Body="&lt;pre&gt;&lt;code&gt;20 a = peek(1024 + x + y * 40)&#xA;30 if a &amp;gt; 127 then c$ = chr$(18):rem revers on&#xA;40 c$ = c$ + chr$ (a + 64 - (32 and a) + (64 and a) - (160 and a))&#xA;50 print c$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So line 40 changes screen code to character code. See +64, then -32 &amp;amp; -160 [that = 128 + 32] = 0, or -128 but then it's to be printed with revers on.&lt;/p&gt;&#xA;" OwnerUserId="17707" LastEditorUserId="6659" LastEditDate="2020-03-30T18:38:00.167" LastActivityDate="2020-03-30T18:38:00.167" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14261" PostTypeId="2" ParentId="7529" CreationDate="2020-03-31T07:47:48.433" Score="7" Body="&lt;p&gt;Most microcomputers treat character codes and screen codes&#xA;differently. This is because they serve different functions and&#xA;arranging them both the same would compromise the functionality or&#xA;implementation of one or the other.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Screen Codes&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The function of a screen code is to encode, at a position in the frame&#xA;buffer, what particular glyph should be shown by the video system at&#xA;that position on the screen. Additionally the code may include&#xA;information modifying the display of the glyph, such as a bit&#xA;indicating whether the glyph should be displayed in positive (white on&#xA;black background) or inverted (black on white background) form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The patterns to generate the glyphs are usually stored in ROM (though&#xA;sometimes RAM) and looked up by address. If the screen code directly&#xA;encodes the (usually low portion of) the address in some of its bits&#xA;this makes simpler the hardware doing the lookup of the glyph from the&#xA;screen code. This is desirable to reduce both the hardware cost and&#xA;the complexity of the system. (The reason cost reduction is desirable&#xA;is obvious. Reducing complexity reduces the time spent on design and&#xA;debugging and also reduces the chance that a bug will go out in the&#xA;final product.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This tends to make screen codes map fairly closely to the hardware&#xA;used to generate the glyphs. For example, if there are 64 glyphs&#xA;available in the system (typically numbers, punctuation and upper-case&#xA;letters), they're likely to be stored at addresses whose lowest six&#xA;bits are hexadecimal $00 through $40 (binary xx000000 through&#xA;xx111111).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll note a difference if you compare the above to &lt;a href=&quot;https://github.com/0cjs/sedoc/blob/master/ascii.txt&quot; rel=&quot;noreferrer&quot;&gt;the ASCII&#xA;character set encoding&lt;/a&gt;, where this range, with all the bits&#xA;above the lowest six set the same, covers either:&#xA;- the (non-printing) control characters, punctuation and numbers&#xA;  ($00-$40), with no letters at all, or&#xA;- the upper case and lower case letters (and a bit of different&#xA;  punctuation), with no numbers at all.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Character Codes&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Character codes have two characteristics that are generally different&#xA;from convenient screen code numberings as described above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, they almost invariably have non-printing &lt;em&gt;control characters&lt;/em&gt;&#xA;which, instead of requesting that a glyph be printed, request some&#xA;other action on the part of the printing device. For example, in ASCII&#xA;the &lt;code&gt;LF&lt;/code&gt; ($0A) character generally indicates to a printer or screen&#xA;that it should print subsequent characters on the next line.¹ Control&#xA;characters are also often used as instructions to code that is&#xA;processing characters; ASCII &lt;code&gt;NUL&lt;/code&gt; ($00) is often used to signal the&#xA;end of a string, for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Control characters are unnecessary in screen codes, however, and a&#xA;non-printing code simply wastes space in the list of screen codes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, it's common to want to use a standard character set and&#xA;encoding (e.g., ASCII or Unicode UTF-8) for compatibility and easy&#xA;data interchange with other systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a standard fixes the codes you can use, and often in a way&#xA;inconvenient for use as screen codes, as we saw with ASCII in the&#xA;previous section.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Summary&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;So, for the reasons described above, generally screen codes are easier&#xA;to do in one way, and character codes in another. Fortunately this is&#xA;not difficult to handle: most microcomputers provide a small routine&#xA;that will convert character codes to screen codes. A routine to &quot;print&#xA;a character&quot; is generally wanted anyway, since it lets commonly used&#xA;logic such as &quot;print a character just after the last one printed on&#xA;the screen&quot; be handled in one place (which also avoids co-ordination&#xA;problems between different routines that both print), so adding this&#xA;conversion is usually a trivial cost.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹&lt;sub&gt;This is a simplified example; what the control characters do is&#xA;often far more complex and system-dependent than described here. But&#xA;the general idea is the same.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-03-31T07:47:48.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14264" PostTypeId="2" ParentId="14257" CreationDate="2020-03-31T16:32:26.100" Score="9" Body="&lt;p&gt;According to COMPUTE!'s, &lt;a href=&quot;https://www.cubic.org/~doj/c64/mapping128.pdf&quot; rel=&quot;noreferrer&quot;&gt;Mapping the Commodore 128&lt;/a&gt;, the C128 BASIC firmware makes use of the two color RAM banks to support the &quot;split-screen&quot; graphics modes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Normally,the  128  uses  one  block &lt;em&gt;(insert: of color RAM)&lt;/em&gt; for  character  color  and  the  other  for multicolor bitmapped  mode.  This  is  why  GRAPHIC  4  mode (split  multicolor  bitmapped  and  text)  doesn't  cause  the  conflicts  you  might  otherwise  expect.  That  is,  printing  on  the  textscreen  doesn't  disturb  colors  on  the  multicolor  bitmapped screen,  and  drawing  on  the  multicolor bitmapped  screen doesn't  disturb  the  colors  on  the  text  screen,  even  though  both appear  to  use  the  same  color  RAM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The same chapter of the book also includes sample code in BASIC 7.0 to demonstrate the use of both blocks of color RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The actual firmware source that implements this is available in the repository &lt;a href=&quot;https://github.com/mist64/cbmsrc&quot; rel=&quot;noreferrer&quot;&gt;mist64/cbmsrc&lt;/a&gt; on Github. From the file BASIC_C128/graphic8.src:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sei&#xA;lda _6510_data_reg&#xA;pha&#xA;and #%11111110      ;point cpu at correct nybble bank&#xA;sta _6510_data_reg&#xA;lda multicolor_2&#xA;sta (grapnt),y&#xA;pla&#xA;sta _6510_data_reg&#xA;cli&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-03-31T16:45:30.733" LastActivityDate="2020-03-31T16:45:30.733" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14265" PostTypeId="2" ParentId="14250" CreationDate="2020-03-31T20:57:19.150" Score="4" Body="&lt;p&gt;@raffzahn already answered with most of what I had in mind when I made that comment. Here are some additional things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a BASIC program like this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 10 INPUT &quot;TYPE SOMETHING&quot;;A$&#xA; 20 PRINT &quot;YOU TYPED &quot;;A$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you run this, and type something to the prompt, but then type a shift-return instead of a normal return, you will notice that the program does not continue.&#xA;Only once you type a normal return it goes on. The text on the line where you typed return will be considered your response.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would also see an interesting detail in how the INPUT command works in combination with the screen editor. When the INPUT starts, the kernel remembers the cursor's horizontal position. This is so that when you hit return, it can start returning the first character from that screen position, one by one, to the last non-space on the line. The characters are indeed plucked from the screen memory and converted to PETSCII for this!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you move the cursor off the line, this start position is cleared, because it now makes no sense any more. Sometimes people accidentally type a cursor up or down at an INPUT prompt, and then correct it and go back to the line of the prompt. To their surprise, the prompt is now part of their resulting response. You get the same effect if you use shift-return to go to another line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like other control characters, shift-return would have a string representation. For example, Control-Q (cursor down) is (in a string) represented as a reverse-field Q. Let's write that as [Q]. Likewise, you can try to enter shift-return into a program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 10 PRINT &quot;STUFF [shift-M]MORE STUFF&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Except that you can't type it like other cursor control characters: shift-return is sufficiently special that when printing it, even in quote mode or insert mode, it is executed rather than printed as a control character. And using the screen editor involves a small loop that gets characters from the keyboard buffer and prints them according to the normal rules of printing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how do you type this line? It just takes two steps. First you type the line and leave a placeholder character instead of the [shift-M]. After you type the 2nd quote you're out of quote mode (or you can type return to get out of quote mode), and you can move the cursor back to the placeholder. Type RVS-ON, and then shift-M. This sort of fabricates the character in another way. Then you type return (again).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if you LIST this, you get to see how the [shift-M] gets executed, even between quotes, and not printed as [shift-M].&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 10 PRINT &quot;STUFF &#xA;MORE STUFF&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is actually fairly close to what you were trying to achieve in your question. There is just not an easy way to edit this line; you'll have to re-create it to change it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can try the same with a normal return: [M] instead of [shift-M].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The [M] works so well like when typing it, you only get the first part of the line. Basic's line input loop thinks it is done when it receives character number 13, the [M].&lt;/p&gt;&#xA;" OwnerUserId="7059" LastActivityDate="2020-03-31T20:57:19.150" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14267" PostTypeId="2" ParentId="14257" CreationDate="2020-04-01T15:30:14.653" Score="2" Body="&lt;p&gt;LUnix uses hardware stack swapping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://lng.sourceforge.net&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://lng.sourceforge.net&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7534" LastActivityDate="2020-04-01T15:30:14.653" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14268" PostTypeId="1" AcceptedAnswerId="14270" CreationDate="2020-04-01T20:28:43.217" Score="11" ViewCount="1109" Body="&lt;p&gt;In MS-DOS 5.0 and newer, PC-DOS 5.0 and newer, Windows 9x, Windows NT 3.1-2000, and OS/2 4.x, the FORMAT command (present in some form or another in literally every single version of Q/86-/MS-/PC-DOS, Windows, and OS/2 ever) offers the /F switch for choosing what capacity to format a floppy disk to.&lt;sup&gt;1&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;In DOS 5+ and Windows 9x, the description of the /F switch (brought up, along with much other information, by entering &lt;code&gt;format /?&lt;/code&gt; at the command prompt) is as follows:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;/F:size          Specifies the size of the floppy disk to format (such as 160, 180, 320, 360, 720, 1.2, 1.44, 2.88).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The description of the Windows NT 3.1-4.0 /F switch is (apart from a slight change in wording and the addition of support for 20385-KiB floptical disks) almost identical:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;/F:size          Specifies the size of the floppy disk to format (160, 180, 320, 360, 720, 1.2, 1.44, 2.88, or 20.8).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Windows 2000’s /F switch has considerably greater functionality:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;/F:size          Specifies the size of the floppy disk to format (160, 180, 320, 360, 640, 720, 1.2, 1.23, 1.44, 2.88, or 20.8).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The OS/2 /F switch is the simplest of all:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;/F:xxxx          Specifies the size to which the diskette is to be formatted.  For example: 360, 720, 1.2, 1.44, 2.88.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For most of these options, even though the only thing specified is the (approximate) formatted capacity,&lt;sup&gt;3&lt;/sup&gt; there is no ambiguity as to what size, density, and sideness of floppies they are for:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;160: 160-KiB (40 tracks per side, 8 sectors per track) single-sided double-density (SSDD) 5.25” floppy&lt;/li&gt;&#xA;&lt;li&gt;180: 180-KiB (40 tps, 9 spt) SSDD 5.25” floppy&lt;/li&gt;&#xA;&lt;li&gt;720: 720-KiB (80 tps, 9 spt) double-sided double-density (DSDD) 3.5” floppy&lt;/li&gt;&#xA;&lt;li&gt;1.2: 1200-KiB (80 tps, 15 spt) double-sided high-density (DSHD) 5.25” floppy&lt;/li&gt;&#xA;&lt;li&gt;1.23: 1232-KiB (77 tps, 8 spt) DSDD 8” floppy&lt;sup&gt;4&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;1.44: 1440-KiB (80 tps, 18 spt) DSHD 3.5” floppy&lt;/li&gt;&#xA;&lt;li&gt;2.88: 2880-KiB (80 tps, 36 spt) double-sided extended-density (DSED) 3.5” floppy&lt;/li&gt;&#xA;&lt;li&gt;20.8: 20385-KiB (755 tps, 27 spt) double-sided floptical disk&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;However, for the remaining three, there are multiple floppy formats with a capacity that fits:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;320:&lt;/li&gt;&#xA;&lt;li&gt;320-KiB (40 tps, 8 spt) DSDD 5.25” floppy, &lt;em&gt;or...&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;320-KiB (80 tps, 8 spt) single-sided quad-density (SSQD) 5.25” floppy, &lt;em&gt;or...&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;320-KiB (80 tps, 8 spt) SSDD 3.5” floppy&lt;/li&gt;&#xA;&lt;li&gt;360:&lt;/li&gt;&#xA;&lt;li&gt;360-KiB (40 tps, 9 spt) DSDD 5.25” floppy, &lt;em&gt;or...&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;360-KiB (80 tps, 9 spt) SSDD 3.5” floppy&lt;/li&gt;&#xA;&lt;li&gt;640:&lt;/li&gt;&#xA;&lt;li&gt;640-KiB (80 tps, 8 spt) double-sided quad-density (DSQD) 5.25” floppy, &lt;em&gt;or...&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;640-KiB (80 tps, 8 spt) DSDD 3.5” floppy&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For each of these three /F options, which of the two (or &lt;em&gt;three&lt;/em&gt;, in 320’s case) possible formats is the option intended to produce?  Does it change at all, depending on whether the drive holding the floppy disk to be formatted is a 5.25” or a 3.5” drive (distinguishing between DSDD, SSQD, and DSQD 5.25-inchers, on the one hand, and SSDD and DSDD 3.5-inchers, on the other), or maybe on whether the /1 switch (used to tell FORMAT to format only one side of the disk) is used (distinguishing, for 320 and 360,&lt;sup&gt;5&lt;/sup&gt; between DSDD 5.25-inchers, on the one hand, and SSQD 5.25-inchers and SSDD 3.5-inchers, on the other)?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;: The /F switch is &lt;em&gt;technically&lt;/em&gt; still present in every Windows NT version from Windows XP right up through Windows 10, but has been neutered, with only the “1.44” (1440-KiB DSHD 3.5” floppy) option available.&lt;sup&gt;2&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt;: Floppies &lt;em&gt;can&lt;/em&gt; still be formatted to other capacities on these systems, assuming that the floppy drive’s firmware supports non-1440-KiB-DSHD-3.5” formats (most internal floppy drives do; most USB floppy drives don’t), but this requires the user to manually enter the number of tracks per side and the number of sectors per track (using the /T and /N switches, respectively), and the support present in earlier NT versions for formatting single-sided disks is, so far as I can tell, completely gone.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;3&lt;/sup&gt;: In contrast, the /F switch for &lt;em&gt;DR&lt;/em&gt;-DOS’s FORMAT command explicity states what sizes of disks its various options correspond to; unfortunately, as DR-DOS is a completely independent development (though an essentially-completely-binary-compatible one) from Microsoft and IBM’s offerings, one can in no way assume that the list of floppy formats supported by DR-DOS is exactly the same as that supported by [MS-/PC]-DOS/Windows/OS/2.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;4&lt;/sup&gt;: The capacity of a DSDD 8” floppy is 1232 KiB, rather than the 616 KiB one would expect from the per-disk sector count, because DD 8-inchers use 1024-byte sectors rather than the 512-byters standard on the smaller sizes of floppies.  (&lt;em&gt;Single&lt;/em&gt;-density [SD] 8-inchers, which are not supported by any FORMAT version of which I am aware, use 128-byte sectors.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;5&lt;/sup&gt;: It wouldn’t help for 640, as &lt;em&gt;both&lt;/em&gt; of the two disk formats with 640-KiB capacity are double-sided.&lt;/p&gt;&#xA;" OwnerUserId="6915" LastEditorUserId="6915" LastEditDate="2020-12-26T01:24:00.753" LastActivityDate="2020-12-26T01:24:00.753" Title="What physical size and density floppies are the intermediate-capacity options for the /F switch of the DOS/Windows/OS/2 FORMAT command meant for?" Tags="&lt;ms-dos&gt;&lt;floppy-disk&gt;&lt;windows&gt;&lt;os2&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14269" PostTypeId="2" ParentId="14268" CreationDate="2020-04-01T20:55:36.853" Score="11" Body="&lt;p&gt;&lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/075/Q75131/&quot; rel=&quot;noreferrer&quot;&gt;KB entry Q75131&lt;/a&gt; provides the following answer for MS-DOS &lt;code&gt;FORMAT&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;320: 320-KiB (40 tps, 8 spt) DSDD 5.25” floppy&lt;/li&gt;&#xA;&lt;li&gt;360: 360-KiB (40 tps, 9 spt) DSDD 5.25” floppy&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I don’t know about the Windows-only 640 format.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-04-01T20:55:36.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14270" PostTypeId="2" ParentId="14268" CreationDate="2020-04-01T21:11:49.667" Score="6" Body="&lt;p&gt;In fact, you can use &lt;em&gt;any&lt;/em&gt; of these formats (up to 1.44MB) on a 3.5&quot; or 5.25&quot; DSHD floppy disk.  For the 40-track formats, an 80-track drive would need to double-step; for the single-sided formats, only one head of a double-sided drive would be activated.  There are even extended formats which fit, say, 1.6MB in by using a still-higher number of sectors per track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Filling in the details, 320K and 360K are just double-sided versions of the 40-track, single-sided 160K and 180K formats.  Then 640K would be an 8-sector variant of the 9-sector 720K format, probably intended for 5.25&quot; DSDD drives on which 8-sector formats were more commonly used.  This also makes it a logical 80-track upgrade from the 320K format.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-04-01T22:37:36.293" LastActivityDate="2020-04-01T22:37:36.293" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14272" PostTypeId="1" AcceptedAnswerId="14527" CreationDate="2020-04-02T14:15:10.820" Score="4" ViewCount="409" Body="&lt;p&gt;Apple introduced the &quot;new and improved&quot; Apple ][ Plus in 1979, but continued to sell the original ][ until early 1981. I speculate that some customers must have chosen the original Apple ][ over the Plus for cost reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What were the retail prices (listed or suggested) for the original Apple ][ before it was discontinued? Was it, in fact, less expensive than a Plus?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Photo below of original Apple ][ motherboard&lt;/em&gt; manufactured about March, 1980 (&quot;8009&quot; means week #9 of 1980). This &lt;em&gt;about 9 months after&lt;/em&gt; the ][ Plus release.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kCiVn.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kCiVn.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-04-02T23:26:12.850" LastActivityDate="2020-04-29T06:20:03.363" Title="Price of original Apple ][ in 1980?" Tags="&lt;history&gt;&lt;apple-ii&gt;&lt;cost&gt;" AnswerCount="1" CommentCount="17" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14273" PostTypeId="2" ParentId="13171" CreationDate="2020-04-02T19:06:58.317" Score="4" Body="&lt;h2&gt;THE C64 Maxi Specs&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CPU: Allwinner H3 Quad-core Cortex-A7 @1.29GHz&lt;/li&gt;&#xA;&lt;li&gt;GPU: Mali400MP2 GPU @600mhz&lt;/li&gt;&#xA;&lt;li&gt;256MB Memory &lt;/li&gt;&#xA;&lt;li&gt;2GB FMND2G08U3J NAND Chip&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;https://thec64community.online/thread/426/inside-thec64-maxi&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="17721" LastEditorUserId="129" LastEditDate="2020-04-03T03:37:01.227" LastActivityDate="2020-04-03T03:37:01.227" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14274" PostTypeId="2" ParentId="13528" CreationDate="2020-04-02T19:11:10.610" Score="8" Body="&lt;p&gt;I recently posted a disassembly of the Apple II version, which is substantially similar to the C64 and BBC Micro implementations.  One of the things I focused on was the way meshes were stored and rendered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For each &quot;hull definition&quot; there are three tables:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Vertices: 9-bit X/Y/Z coordinates, 5-bit level-of-detail value, 1-4 faces&lt;/li&gt;&#xA;&lt;li&gt;Edges: two vertex indices, 5-bit level-of-detail value, 1-2 faces&lt;/li&gt;&#xA;&lt;li&gt;Faces: 9-bit X/Y/Z surface normal vector, 5-bit visibility cutoff&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The key to Elite's rendering is the surface normals.  Each face of the object has a vector whose direction is orthogonal to the face, and whose magnitude is proportional to the distance of the face from the center of the object.  By transforming this vector, and comparing it to a vector from the eye position (i.e. player), it's possible to determine whether the surface is facing toward or away from the viewer.  If it's facing away, everything associated with the face can be ignored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each vertex and edge has a few associated faces.  If any of the faces are visible, the vertex or edge must be rendered.  If not, the vertex calculations can be skipped entirely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vertices and faces also have level-of-detail thresholds.  Fine details turn distant objects into a smear, especially when drawing lines with exclusive-or, so some vertices and edges can be excluded when objects are far away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This same mechanism is also what allows the turrets on ships like the Cobra Mk III and Krait -- something that isn't strictly allowed because backface culling on wireframes looks funny unless your shapes are convex.  The edges are associated with nearby faces; when those rotate away from the viewer, the turrets aren't drawn.  This works well on older low-resolution systems, but you can see things popping out when images are drawn at higher resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This system isn't perfect.  For example, parts of missile fins will disappear at certain angles, because edges can only be associated with two faces.  There were also some errors in the data as well, ranging from incorrect surface normals to faces with non-coplanar vertices.  Some of these problems can be corrected by re-computing the normals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is explained in more detail, with pictures and math, on the &lt;a href=&quot;https://6502disassembly.com/a2-elite/meshes.html&quot; rel=&quot;noreferrer&quot;&gt;Classic Elite Hull Meshes&lt;/a&gt; page.  You can see renderings of all of the hulls, with corrected normals, on &lt;a href=&quot;https://6502disassembly.com/a2-elite/objects.html&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt;. At 64x64 it's hard to see the flaws, even on the Krait.  (If you download the SourceGen project you can make it full screen and single-step through the angles.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As far as the math goes, you can see Elite's basic multiplication routine &lt;a href=&quot;https://6502disassembly.com/a2-elite/Elite.html#SymFMLTU&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.  It uses &lt;a href=&quot;https://6502disassembly.com/a2-elite/Elite.html#Symmath_table1&quot; rel=&quot;noreferrer&quot;&gt;three 256-byte tables&lt;/a&gt;.  I didn't dig into the math for this disassembly, but it appears to be based on tables of logarithms (some notes &lt;a href=&quot;https://www.lemon64.com/forum/viewtopic.php?t=71333&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For comparison, Stellar 7 for the Apple II uses tables for trig functions but has massive unrolled multiply/divide functions, e.g. &lt;a href=&quot;https://6502disassembly.com/a2-stellar7/ROCK1.html#SymDivide16&quot; rel=&quot;noreferrer&quot;&gt;Divide16&lt;/a&gt; and &lt;a href=&quot;https://6502disassembly.com/a2-stellar7/ROCK1.html#SymMultiply16_8&quot; rel=&quot;noreferrer&quot;&gt;Multiply16_8&lt;/a&gt;.  Stellar 7 was mathematically much simpler because shapes can only rotate about the Y axis, but computationally more expensive because the concave meshes didn't allow for simple backface culling.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2020-04-02T19:11:10.610" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14275" PostTypeId="2" ParentId="11001" CreationDate="2020-04-03T10:06:51.950" Score="0" Body="&lt;p&gt;I found 2 boards for socket 1150/1151:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;cost about 270$ us:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://aicsys.com/Industrial-Motherboards-MBC-6605.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://aicsys.com/Industrial-Motherboards-MBC-6605.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;cost about 140$ us:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ipc.msi.com/product_detail/Industrial-Motherboard/ATX/MS-98L9-V2.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ipc.msi.com/product_detail/Industrial-Motherboard/ATX/MS-98L9-V2.0&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motherboards-MBC-6605 - this is the best option because this motherboard uses Intel chipset 8-series that supports drivers under Windows XP 32, which supports almost all ISA cards.&lt;/p&gt;&#xA;" OwnerUserId="17723" LastEditorUserId="17723" LastEditDate="2020-04-03T20:14:46.857" LastActivityDate="2020-04-03T20:14:46.857" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14276" PostTypeId="1" CreationDate="2020-04-04T13:16:12.767" Score="2" ViewCount="202" Body="&lt;p&gt;This question is about &lt;a href=&quot;https://cc65.github.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;cc65&lt;/a&gt;, which is a toolkit including a C compiler, assembler, linker, etc. All targeting various 6502 computers, like the various 8 bit commodores, the Apple II and whatever else. In particular, I am using the &lt;code&gt;cl65&lt;/code&gt; command-line tool, which is a frontend to the compiler, to target the Commodore 64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is that this compiler depends very heavily on a library of little functions, that do simple things like push a 16-bit value onto a software stack (not the CPU stack!) or multiply two 16 bit values together. I am trying to get my program into a single, independent assembly, which does not rely on external subroutines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the contents of &lt;code&gt;hello.c&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;int main(void) {&#xA;    printf(&quot;Hello, World!\n&quot;);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is how I compile it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cl65 -l hello.asm hello.c &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is the contents of &lt;code&gt;hello.asm&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ca65 V2.13.9 - (C) Copyright 1998-2011 Ullrich von Bassewitz&#xA;Main file   : hello.s&#xA;Current file: hello.s&#xA;&#xA;000000r 1               ;&#xA;000000r 1               ; File generated by cc65 v 2.13.9&#xA;000000r 1               ;&#xA;000000r 1                   .fopt       compiler,&quot;cc65 v 2.13.9&quot;&#xA;000000r 1                   .setcpu     &quot;6502&quot;&#xA;000000r 1                   .smart      on&#xA;000000r 1                   .autoimport on&#xA;000000r 1                   .case       on&#xA;000000r 1                   .debuginfo  off&#xA;000000r 1                   .importzp   sp, sreg, regsave, regbank&#xA;000000r 1                   .importzp   tmp1, tmp2, tmp3, tmp4, ptr1, ptr2, ptr3, ptr4&#xA;000000r 1                   .macpack    longbranch&#xA;000000r 1                   .forceimport    __STARTUP__&#xA;000000r 1                   .import     _printf&#xA;000000r 1                   .export     _main&#xA;000000r 1               &#xA;000000r 1               .segment    &quot;RODATA&quot;&#xA;000000r 1               &#xA;000000r 1               L0003:&#xA;000000r 1  C8 45 4C 4C      .byte   $C8,$45,$4C,$4C,$4F,$2C,$20,$D7,$4F,$52,$4C,$44,$21,$0D,$00&#xA;000004r 1  4F 2C 20 D7  &#xA;000008r 1  4F 52 4C 44  &#xA;00000Fr 1               &#xA;00000Fr 1               ; ---------------------------------------------------------------&#xA;00000Fr 1               ; int __near__ main (void)&#xA;00000Fr 1               ; ---------------------------------------------------------------&#xA;00000Fr 1               &#xA;00000Fr 1               .segment    &quot;CODE&quot;&#xA;000000r 1               &#xA;000000r 1               .proc   _main: near&#xA;000000r 1               &#xA;000000r 1               .segment    &quot;CODE&quot;&#xA;000000r 1               &#xA;000000r 1  A9 rr            lda     #&amp;lt;(L0003)&#xA;000002r 1  A2 rr            ldx     #&amp;gt;(L0003)&#xA;000004r 1  20 rr rr         jsr     pushax&#xA;000007r 1  A0 02            ldy     #$02&#xA;000009r 1  20 rr rr         jsr     _printf&#xA;00000Cr 1  60               rts&#xA;00000Dr 1               &#xA;00000Dr 1               .endproc&#xA;00000Dr 1               &#xA;00000Dr 1               &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can see that this file includes references to things like &lt;code&gt;pushax&lt;/code&gt; and &lt;code&gt;_printf&lt;/code&gt;. This is only a simple example. &lt;code&gt;tosmulax&lt;/code&gt; and many others don't  appear in this one. I was hoping to have these subroutines either inlined, or appended to the source, so that I end up with a file that can be independently assembled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to achieve this?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="439" LastEditDate="2020-04-06T22:15:40.130" LastActivityDate="2020-04-07T14:18:01.933" Title="How can I get cl65 to include its subroutines, like pushax and tosmulax?" Tags="&lt;6502&gt;&lt;compilers&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14277" PostTypeId="2" ParentId="14276" CreationDate="2020-04-04T13:37:23.513" Score="1" Body="&lt;p&gt;There is no simple way, as they are separate compiled (assembly) sources. There is no common code generation stage that could easy produce a joined source. CL65 only acts as a unified command line interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CC65's build process doesn't take any shortcut during code generation, compilation and linking but really handles everything as it should. Code generation is done just for the sources provided and object binaries are handled as well separate. Only the linker will join them later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need to include them einter manually from their source files from the runtime library, like&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;pushax&lt;/code&gt; from &lt;a href=&quot;https://github.com/cc65/cc65/blob/master/libsrc/runtime/pushax.s&quot; rel=&quot;nofollow noreferrer&quot;&gt;pushax.s&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;tosmulax&lt;/code&gt; from &lt;a href=&quot;https://github.com/cc65/cc65/blob/master/libsrc/runtime/mul.s&quot; rel=&quot;nofollow noreferrer&quot;&gt;mul.s&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;or from the commons library, which is essentially the CLIB of CC65:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;_printf&lt;/code&gt; from &lt;a href=&quot;https://github.com/cc65/cc65/blob/master/libsrc/common/_printf.s&quot; rel=&quot;nofollow noreferrer&quot;&gt;_printf.s&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or write some script picking either function from their source file(s) and merge them. This may be for most parts straight foreward, but (like always in a C environemnt) quite tricky when it comes to import/export - as for one, some do as well use other routines and second all import/export clauses need to be normalized for the new representation.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: The same issues will arise with any other (standard) C environment, as the C-LIB which for example contains all entry and exit code, or functions like print is as well a separate compiled unit. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-04-05T19:40:56.380" LastActivityDate="2020-04-05T19:40:56.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14278" PostTypeId="2" ParentId="2513" CreationDate="2020-04-04T17:28:29.693" Score="1" Body="&lt;p&gt;The kernel of truth to the myth lies in the Lisa.  You could get a Pascal dev environment for the Lisa, or you could run the famous pre-Mac multitasking windowed GUI environment.  But at launch you couldn't run the Pascal dev environment in the GUI -- it was essentially a completely separate OS.  Disk formats weren't even compatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, while you could theoretically have tried to make a living writing Lisa software, it was essentially impossible to publish third party GUI apps for the Lisa Office System like the word processor and the spreadsheet app.  Eventually the LisaOS became a dev environment for the Macintosh, but not a dev environment for the Lisa itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Steve Jobs absolutely wanted to make a computer that would do everything you needed, as a closed system.  HE took some inspiration for Xerox which was working on the Star which was an early almost mac-like GUI system that was sold as an &quot;office system&quot; rather than as a general purpose computer so it never had third party software and wound up being almost completely uninfluential in the general industry.&lt;/p&gt;&#xA;" OwnerUserId="5309" LastActivityDate="2020-04-04T17:28:29.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14280" PostTypeId="1" CreationDate="2020-04-05T01:30:08.167" Score="37" ViewCount="10849" Body="&lt;p&gt;It just dawned on me that, when I was young, game consoles like the NES and SNES, and possibly other devices like VCR's, required the TV to be tuned to channel 4.  I asked around, and some remembered it being channel 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did it matter what channel the TV was tuned to?&lt;/p&gt;&#xA;" OwnerUserId="17726" LastActivityDate="2021-03-12T11:18:54.933" Title="Why did early game consoles need the TV to be tuned to channel 3 or 4?" Tags="&lt;gaming&gt;&lt;television&gt;" AnswerCount="5" CommentCount="16" FavoriteCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14281" PostTypeId="2" ParentId="14280" CreationDate="2020-04-05T01:36:49.087" Score="11" Body="&lt;p&gt;Because those are the two frequencies that the RF modulator in the game console can produce.&#xA;&quot;Tuning to a channel&quot; means &quot;choosing the frequency band to receive&quot;, so clearly you need to receive on the same frequency band that the transmitter is sending.&#xA;(Warning, non-electronic-engineer loose wording above).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was there a choice of two rather than one fixed? That I do not know.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-04-05T01:36:49.087" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14282" PostTypeId="2" ParentId="14280" CreationDate="2020-04-05T02:56:20.920" Score="46" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Band_I#North_America&quot; rel=&quot;nofollow noreferrer&quot;&gt;In the US&lt;/a&gt; Channel 3 was preferred as it was in the midst of the continious 2/3/4 assignment. By lifting or lowering the carrier by 6 Mhz either channel 2 or 4 could be offered as alternative.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Another-Dave &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14281/6659&quot;&gt;already answered&lt;/a&gt; the basic issue of avoiding collisions. The reason &lt;em&gt;why&lt;/em&gt; it was channel 2/3/4 is due historic channel assignment (in the US, *1).&lt;/p&gt;&#xA;&lt;p&gt;The following is all about the classic VHF low-bands (1/2).&lt;/p&gt;&#xA;&lt;p&gt;Channel assignment during the 70s to 90s for VHF band 1 in the US:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Range      VHF Chn.   TV Chn.  &#xA;44..50 MHz   1          (1)    [Not used since the 1950s][4]&#xA;50..54 MHz   gap         -     4 MHz gap for [6m band][2]&#xA;54..60 MHz   A2          2&#xA;60..66 MHz   A3          3&#xA;66..72 MHz   A4          4&#xA;72..76 MHz   gap         -&#xA;76..82 MHz   A5          5&#xA;82..88 MHz   A6          6&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To start with, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pan-American_television_frequencies#Historical_band_plans&quot; rel=&quot;nofollow noreferrer&quot;&gt;channel assignments have shifted&lt;/a&gt; over time (*2). For example the original 6 meter gap was 10 MHz from 56 to 66 MHz, while 84 to 90 MHz was Channel 6. The gap got narrowed and with everything after moved to squeeze in another channel (*3) while widening the band for FM radio at the same time.&lt;/p&gt;&#xA;&lt;p&gt;Important for consoles/home computers/VCR and alike in the 70s to 90s is that the FCC usually &lt;em&gt;tried&lt;/em&gt; to space regional stations out to reduce interference between them. This didn't always work out in heavy populated areas, but usually either 3 or 2/4 was not assigned to a local (strong) station. Thus a modulator offering a choice to switch between 2/3 or 3/4 could usually solve any channel conflict.&lt;/p&gt;&#xA;&lt;p&gt;A few devices offered even a three way switch (2/3/4) to allow the use of either channel within the group, but most manufacturers tried to save a penny, thus offering only two choices.&lt;/p&gt;&#xA;&lt;p&gt;The whole issue about channel numbers on devices gets further complicates when looking at Europe(*4). US channels were 6 MHz wide, starting at 50 MHz, while European started at 40 MHz, occupying 7 MHz each (*5). So US 3 is located similar to European channel 2, while US 4 is European 3 (*6). So a European device marked as Channel 2 would in the US mean one has to turn to channel 3 :)) In addition in Europe UHF channels were often used instead - but that's different story (*7).&lt;/p&gt;&#xA;&lt;p&gt;Now, in Japan TV did broadcast in the 90 to 108 MHz range (Channel 1..3), that's were FM radio is located in most other places. So Japanese market consoles / computers use frequencies usually not available to European and US TV sets.&lt;/p&gt;&#xA;&lt;p&gt;And then there is (US) Channel 7 as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14280/why-did-early-game-consoles-need-the-tv-to-be-tuned-to-channel-3-or-4/14282#comment47204_14282&quot;&gt;Alex Hajnal reminded&lt;/a&gt;. It lies way above in &lt;a href=&quot;https://en.wikipedia.org/wiki/Band_III&quot; rel=&quot;nofollow noreferrer&quot;&gt;VHF band III&lt;/a&gt; at 174 MHz. While channels 1..6 of band I are of different assignment around the world, 174 MHz is almost everywhere used for TV. In addition it's as well (in most countries) the first channel in this band, independent of spacing/alignment, thus ideal for world wide distribution.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Confusing? Yes, for sure, but in the end, one simply connected the console and turned the knob until some picture came up - if the result was poor, the switch got flipped to see if the other channel came better.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In Europe and other parts of the world it was similar, but different as the channels were assigned to different frequencies and of different size and arrangement.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Channel numbers and their logic are weird anyway, as they depend on convention, not physics. One have gone with frequencies, much like with Radio (and, if at all, use logical channels as in parts of Europe).&lt;/p&gt;&#xA;&lt;p&gt;*3 - That's why they are names An in above table.&lt;/p&gt;&#xA;&lt;p&gt;*4 - I'll spare the UK 405 line system using 5 MHz channels, as well as the special 1a and 2a channels.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Well, err , being Europe, there is much unity in doing things different. Beside the English 5 MHz system, there was the old French 14 MHz (awesome picture with 800 lines) as well as the new French 8 MHz system. The later also used in Eastern Europe and China but of course all with different frequencies and various gaps. For example the 6 meter gap is (mostly) observed in most parts of the world, except China and Ireland.&lt;/p&gt;&#xA;&lt;p&gt;*6 - US 2 is located half way between European 1 and 2.&lt;/p&gt;&#xA;&lt;p&gt;*7 - Most notably here European channel 36, which happens to be channel 34 in the US, thus despite the different channel spacing, the same modulator hardware could be used for devices designated for the US and Europe and thus essentially the whole world except Australia and China.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-12T11:18:54.933" LastActivityDate="2021-03-12T11:18:54.933" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="14283" PostTypeId="2" ParentId="14280" CreationDate="2020-04-05T08:41:58.497" Score="6" Body="&lt;p&gt;The bandwidth of a typical composite video signal is about 6 MHz.&lt;/p&gt;&#xA;&lt;p&gt;The video hardware in in early game consoles (and early home&#xA;computers) generates its composite video signal in what's called&#xA;&lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Baseband&quot; rel=&quot;noreferrer&quot;&gt;baseband&lt;/a&gt;&lt;/em&gt; format: the frequency range is 0 Hz to 6 MHz. Only one&#xA;baseband signal can be sent down a cable or broadcast through the air&#xA;at any one time.¹&lt;/p&gt;&#xA;&lt;p&gt;So that we can have multiple TV channels (among other reasons), the&#xA;broadcast system takes the baseband signals for different programmes&#xA;and &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/NTSC#Transmission_modulation_method&quot; rel=&quot;noreferrer&quot;&gt;modulates&lt;/a&gt;&lt;/em&gt; them on to different higher-frequency carrier&#xA;signals. This basically &amp;quot;moves them up&amp;quot; in the electromagnetic&#xA;spectrum range: for channel 2 the 0-6 MHz signal is moved up to the&#xA;54-60 MHz range, and for channel 3 the 0-6 MHz signal is moved up to&#xA;the 60-66 MHz range.²&lt;/p&gt;&#xA;&lt;p&gt;TVs have a tuner that picks a particular range and then demodulates&#xA;that signal, producing the original 0-6 MHz baseband signal used for&#xA;that particular channel. Modern TVs and of course computer monitors&#xA;will often have a direct input for a baseband composite signal so this&#xA;modulation-demodulation process isn't necessary, but older TVs from&#xA;the '70s and '80s usually didn't offer this.&lt;/p&gt;&#xA;&lt;p&gt;So consoles and computers connected to these older TVs by using&#xA;sending their baseband signal though an &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/RF_modulator&quot; rel=&quot;noreferrer&quot;&gt;RF modulator&lt;/a&gt;&lt;/em&gt;, which which&#xA;is basically a tiny little TV broadcast station doing that same&#xA;conversion described above. You'd then plug the output of the RF&#xA;modulation to the antenna input of the TV, it would demodulate the&#xA;signal back down, and then you can have a picture.&lt;/p&gt;&#xA;&lt;p&gt;When modulating the signal you of course have to choose which one of&#xA;the many channels you're going to use. Typically North American RF&#xA;modulators offered you a choice of using channel 3 or 4.&lt;/p&gt;&#xA;&lt;p&gt;Why those particular channel numbers, and not others? It had to do&#xA;with what broadcast frequencies were commonly used in the area, among&#xA;other considerations. &lt;a href=&quot;https://en.wikipedia.org/wiki/RF_modulator#Channels&quot; rel=&quot;noreferrer&quot;&gt;From Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A channel 3/4 output was a common output selection for consumer&#xA;audiovisual devices sold in North America that were intended to be&#xA;connected to a TV using a radio frequency (RF) signal. This channel&#xA;option was provided because it was rare to have broadcast channels 3&#xA;and 4 used in the same market, or even just channel 3 itself. The&#xA;choice allowed the user to select the unused channel in their area&#xA;so that the connected device would be able to provide video and&#xA;audio on an RF feed to the television without excessive interference&#xA;from a broadcast signal.&lt;/p&gt;&#xA;&lt;p&gt;Other countries had the RF output for video equipment on different&#xA;groups of frequencies. For example, equipment sold in Europe, South&#xA;Africa and Hong Kong used UHF channels 30–39 for this purpose.&#xA;Equipment sold in Japan used channel 1 or 2 (Channel 13–16 is for&#xA;cable converters). With other channels being used for RF modulation&#xA;function in other regions, channel 3/4 output is a misnomer for&#xA;those regions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;¹Actually, this isn't strictly the case, especially for radio,&#xA;but that gets into some very complex physics and electrical&#xA;engineering stuff that we don't need to answer this question.&lt;/p&gt;&#xA;&lt;p&gt;²I'm giving here the channel frequency assignments for North&#xA;American television of the time; the frequencies will be somewhat&#xA;different in other parts of the world. You can see &lt;a href=&quot;https://en.wikipedia.org/wiki/Pan-American_television_frequencies#Channel_frequencies&quot; rel=&quot;noreferrer&quot;&gt;more North&#xA;American channel assignments here&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Television_channel_frequencies&quot; rel=&quot;noreferrer&quot;&gt;the chart&#xA;here&lt;/a&gt; compares channel assignemnts for various parts of&#xA;the world.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-05T08:41:58.497" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14284" PostTypeId="2" ParentId="13991" CreationDate="2020-04-05T09:54:01.193" Score="3" Body="&lt;p&gt;Windows 3.1 uses what is called co-operative multitasking (vs. pre-emptive multitasking used today).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What this means that that each app is supposed to co-operate by using the CPU time it needs and then releasing the CPU for other apps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Time slices revolve around the main message loop. A typical Win 3.1 program will have a loop that peeks for messages, and if it receives one, process it and then release the CPU for other apps to poll that message loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your app is not part of this mechanism, or doesn't implement it properly, it will not execute when other apps are using the polling the loop.&#xA;Alternatively, it is possible that the other apps you mention hog the cpu.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is why in those days, a poorly written app would block the other apps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even timers were signalling through that message loop. There were a few processes inside the OS that were interrupt driven, but I don't recall the serial link being one of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to why this happens with that specific app, we'd have to look at its processing loop. It was usually very primitive and even with the disassembly only you can quickly see how the logic was implemented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the comment points out that the OP is using MS-DOS Kermit, under Window 3.1, here are more details:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the MS-DOS programs were not using the Windows API, they were run pre-emptively in a separate context and were generally unaware they were run under windows.&#xA;In that context interrupts are virtualized and queued, to be passed on when the MS-DOS program gets a time slice. That alone can be an issue with serial communication if buffers are not large enough.&#xA;There were a few ways to force a program to release its time slice, etc but nothing helping the OP here.&#xA;Also, time slices were a bit irregular and some OS calls were significantly delaying them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution to this issue is through PIF files. They are documented here: &lt;a href=&quot;https://www.smsoft.ru/en/pifdoc.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.smsoft.ru/en/pifdoc.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A MS-DOS application can be launched with matching PIF file. These files are used by Windows 3.1 to describe how the MS-DOS application is to be run in its virtualized context.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This discussion (&lt;a href=&quot;http://ftp.math.utah.edu/pub/ibmpc/kermit/msvibm.pif&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ftp.math.utah.edu/pub/ibmpc/kermit/msvibm.pif&lt;/a&gt;) is about having a PIF file for Kermit; the second message in that thread seems to indicate a similar problem as the OPs with some troubleshooting steps.&lt;/p&gt;&#xA;" OwnerUserId="3884" LastEditorUserId="3884" LastEditDate="2020-04-06T10:39:51.760" LastActivityDate="2020-04-06T10:39:51.760" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14285" PostTypeId="1" AcceptedAnswerId="14286" CreationDate="2020-04-05T14:11:37.653" Score="1" ViewCount="258" Body="&lt;p&gt;Emulated terminals can accept control characters, being able to move the position of cursor, to delete a char or a word or even to clear all screen, change foreground and background colors, etc. oriented by them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; Originally (that means for real terminal teletypes), these characters controls were handle by the output device or managed directly by CPU (for example, via related routines monitoring output data sending to such device and working over it)?&lt;/p&gt;&#xA;" OwnerUserId="17729" OwnerDisplayName="Daniel Bandeira" LastEditorUserId="17729" LastEditDate="2020-04-06T02:19:06.287" LastActivityDate="2020-04-06T02:19:06.287" Title="How did control characters work in real teletypes?" Tags="&lt;terminal&gt;&lt;mechanical&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14286" PostTypeId="2" ParentId="14285" CreationDate="2020-04-05T14:58:13.420" Score="1" Body="&lt;p&gt;For actual Teletypes, which are electromechanical devices whose output is ink on paper, there were these ways to move the print position (there was no actual cursor):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Carriage return: mechanically move typehead to column 1.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Line feed: mechanically roll the paper&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Any printing character: move one place to the right after printing&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;From memory, I don't think an ASR 33 could implement tab or backspace. Tab expansion would be done on the host machine.  Backspace probably would not be done at all, though I suppose you could simulate it with return and a lot of spaces (but for what point?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, with the exception of tab, neither device nor computer would implement any extra movement operations: it was simply not possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other control characters:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;BEL rang a bell.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;XON/XOFF were used to enable or disable an attached papertape reader. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;WRU might trigger an answerback message, stored mechanically on a rotating drum. (&lt;a href=&quot;https://en.wikipedia.org/wiki/Teletype_Model_33&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; says programmed by 'breaking off tabs' so it's write-once memory)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I think that's about it for the control-character repertoire.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were no general cursor-movement sequences because the hardware could not do those things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case you also include other serial CRT devices, sometimes referred to as &quot;glass teletypes&quot;, then the answer is often the same as for emulators: there's something in there, at least from the mid-1970s likely to be a simple microprocessor, interpreting the character stream and doing what the control sequences tell it to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But note that not all glass teletypes implemented 'direct cursor addressing' capabilities. Early/cheap terminals were functionally the same as actual teletypes.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-04-05T15:31:26.503" LastActivityDate="2020-04-05T15:31:26.503" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14287" PostTypeId="2" ParentId="14285" CreationDate="2020-04-05T15:11:09.563" Score="0" Body="&lt;p&gt;Real teletypes were pure electromechanical devices with no CPU, or any electronic components at all. On receiving a line feed code the paper was advanced a line or with a carriage return the printing carriage was brought to the leftmost position. All of this was done purely by electrical and mechanical operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early teletype machines were in use as early as the mid 19th century, long before the development of the electronic computer. My first experience with them was in the 1970's. These were mostly the traditional mechanical printing devices but thermal printing was being introduced. These early devices did not have a CPU.&lt;/p&gt;&#xA;" OwnerUserId="17730" LastActivityDate="2020-04-05T15:11:09.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14288" PostTypeId="2" ParentId="14285" CreationDate="2020-04-05T15:14:24.913" Score="4" Body="&lt;p&gt;Teletypes were self contained units simply executing the code received. For most codes that simply meant printing a certain character and advance by one position. Others&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;advanced paper by one line (LF),&lt;/li&gt;&#xA;&lt;li&gt;returned the carriage by one position (BS)&lt;/li&gt;&#xA;&lt;li&gt;returned the carriage to the begin of a line (CR)&lt;/li&gt;&#xA;&lt;li&gt;or rung a bell (BEL)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All of this was done by mechanics using levers, spoke wheels, combs and rods (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no controlling CPU. TTYs were meant to work with other TTY, not computers/CPUs. They only later on repurposed TTY as terminals.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - IoT before the internet - process control by things moving:)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-04-05T19:51:06.760" LastActivityDate="2020-04-05T19:51:06.760" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14289" PostTypeId="1" AcceptedAnswerId="14290" CreationDate="2020-04-05T15:56:40.887" Score="0" ViewCount="249" Body="&lt;p&gt;Im trying to get some nice colored lines on some old Z80 system synced to the PAL screen, but having some sort of a problem. First I just need to know if my facts are right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that on Commodore 64 it takes 19656 cycles to complete a PAL videoframe:&#xA;(63 cycles a scanline of a total 312 scanlines, gives: 63*312 = 19656 cycles).&#xA;The 6502 processor is 0.985 MHz for PAL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But What IF, my computer have a 4 Mhz Zilog Z80A CPU inside.&#xA;Would an instruction that take 4 cycles run 4 times faster than an instruction running on an 1 Mhz processor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I then say that I can use 256 processor cycles to complete one scanline? Instead of 64? If one scanline use 64 cycles to complete, on a Z80 system it would use 256 cycles? Or are processor cycles fixed at microseconds such that its the same amount on a PAL screen?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;LDA $0000 on 6502 take 4 cycles.&#xA;NOP on Zilog Z80 take 4 cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but four NOPs on Z80 use the same time as one LDA $0000 on 6502?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;And this is wrong or?&lt;/strong&gt;&#xA;So basically when the beam is at the leftmost position I can use 256/4 = 64 NOPS before the beam has retraced to the leftmost position again (using Zilog Z80 4MHz)? (On the C64 that would take approx 32 NOPS) Or am I missing something?&lt;/p&gt;&#xA;" OwnerUserId="15637" LastEditorUserId="6659" LastEditDate="2020-04-05T20:33:28.117" LastActivityDate="2020-04-05T20:37:15.627" Title="4MHz Z80 timing and PAL video generation" Tags="&lt;z80&gt;&lt;crt-monitor&gt;&lt;microprocessor&gt;&lt;pal&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14290" PostTypeId="2" ParentId="14289" CreationDate="2020-04-05T18:00:31.957" Score="5" Body="&lt;p&gt;Z80 and 6502 are complete different CPUs in terms of clock and cycle structure. There is no sense in comparing them at this level. To solve your problem you need to focus only on your Z80 system, its instructions and their timing in relation to the video frame you want to create/manipulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With 4 MHz each clock cycle is 250 ns. Using this on 50 Hz 625 lines PAL, a&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(half) &lt;strong&gt;Frame&lt;/strong&gt; duration is &lt;strong&gt;20 ms or 80,000 clock cycles&lt;/strong&gt;, the&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Active&lt;/strong&gt; duration is &lt;strong&gt;18.4 ms or 73,600 clock cycles&lt;/strong&gt;, a&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Line&lt;/strong&gt; duration is &lt;strong&gt;64 µs or 256 clock cycles&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Active Line&lt;/strong&gt; duration is &lt;strong&gt;52 µs or 208 clock cycles&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So waiting a whole line would be 64 NOP, or any combination of instructions adding up to 256 clock cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course all of this depends in addition on the timing structure of your system (not all are monoton) and interference from other sources (like DMA).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-04-05T20:37:15.627" LastActivityDate="2020-04-05T20:37:15.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14291" PostTypeId="2" ParentId="14280" CreationDate="2020-04-05T21:13:10.480" Score="38" Body="&lt;h2&gt;Why tune the TV to a channel at all?&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Early consumer television sets were built for one purpose: to watch broadcast television.  The only input was for an antenna.  The idea of using your television set for any other purpose simply wasn't yet conceived, so there were no connectors for any other kind of signal.&lt;/li&gt;&#xA;&lt;li&gt;The first additional uses for household television sets were the first generation video games (e.g. pong) of the late 1970s.  The Apple I/II of this era also used a television set.  Because the television's only input was for an antenna, these devices needed a &lt;em&gt;modulator&lt;/em&gt; which took the video signal and raised it in frequency, emulating the signal of a real TV station.  It worked, although the process of modulating the signal and then demodulating it again inside the TV decreased the quality of the display.  (It didn't matter much, as these early systems were low resolution.)&lt;/li&gt;&#xA;&lt;li&gt;Consumer-grade VCRs did not become popular until the early 1980s.  They followed the conventions already established by home computers and video games.  Sure, there were professional video recorders before this time, but they cost tens of thousands of dollars and directly interfaced to other video equipment; they didn't modulate their signal to a TV set.&lt;/li&gt;&#xA;&lt;li&gt;Cable TV converter boxes didn't appear until the 1980s, and also followed the conventions started by home computers and video games.&lt;/li&gt;&#xA;&lt;li&gt;As consumers starting adopting TVs for more uses, the TV manufacturers started adding input connections better suited for these uses.  Composite video and later S-video inputs were added to television sets.  The picture quality improved, at a time when the resolution of these devices were increasing.  Of course, these new TV sets provided either a switch setting or a dedicated switch to choose these new inputs.  You no longer had to &quot;tune to a channel&quot;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Why have two choices of channels?&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Back in the 1940s when the first television channels were being assigned, TV sets did a poor job of demodulating the signals.  In particular, the signals on adjacent channel numbers often interfered with each other.  The FCC's solution was to skip channel numbers when assigning stations in the same local area.&lt;/li&gt;&#xA;&lt;li&gt;Adjacent numbers &lt;em&gt;did&lt;/em&gt; often exist between adjacent broadcast areas.  If you were near a city, you got strong signals from your city's stations, and you didn't care if they interfered with the signals from another city.  People living in rural areas between two cities might get both cities' channels if they were lucky, or interference if they were unlucky.&lt;/li&gt;&#xA;&lt;li&gt;Modulators output their signal to only one channel at a time.  Had they fixed it to a single channel, then there would be a certain portion of the country which had a broadcast station on that same frequency.&lt;/li&gt;&#xA;&lt;li&gt;The nominal explanation was that the broadcast station's signal would degrade or completely block a modulator's signal on the same frequency.  However, my own experience in the 1970s was that it worked in the other direction: the signal from a modulator on channel 4 would interfere with watching broadcast channel 4 in a nearby room.  Legally, this wasn't supposed to happen, yet it did.&lt;/li&gt;&#xA;&lt;li&gt;A switch on a modulator that could choose between two channels allowed the modulator to be set to the channel that was &lt;em&gt;not&lt;/em&gt; in use in your area.  Using a device &lt;em&gt;and&lt;/em&gt; watching TV would then not interfere with each other.&lt;/li&gt;&#xA;&lt;li&gt;Because interference was only an issue between &lt;em&gt;adjacent&lt;/em&gt; channels, there was no need for the modulator to support more than 2 channels.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Why channels 3+4 or 2+3?&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There never was a channel 1 on U.S. analog broadcast television.&lt;/li&gt;&#xA;&lt;li&gt;Early consumer-grade modulators of the 1970s were made with cheap components that could not support higher frequencies.  Because channels 2, 3, and 4 had the lowest frequencies, those were the channels used by these modulators.&lt;/li&gt;&#xA;&lt;li&gt;Some early TV sets were bad at receiving channel 2, and it earned the reputation of a channel to avoid.  In particular, early broadcasters didn't want that channel.&lt;/li&gt;&#xA;&lt;li&gt;A &lt;em&gt;rare&lt;/em&gt; few TV sets also had trouble with channel 3, but it never earned the stigma of channel 2.  Some sources claim that channel 4 was more common than channel 3, but in reality both channels were widely assigned.  Channel 4 would often be found in the biggest (i.e. wealthiest) markets and channel 3 in mid-range markets, &lt;em&gt;with exceptions&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;There were many exceptions&lt;/em&gt; to the preceding two points, because desirable numbers already assigned in nearby markets forced the adoption of another number.  Also, as time progressed, TV sets got better at receiving these lower channel numbers, and the number of stations grew, so more broadcasters were assigned channels 3 or 2.&lt;/li&gt;&#xA;&lt;li&gt;By the time modulators appeared in the 1970s, channel 2 still had its (then-obsolete) stigma of a channel to avoid.  Thus, the combination of 3+4 was more common than 2+3.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Combining all of the above issues, a modulator with a switch that could choose between channels 3 and 4 was the best solution.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-04-05T21:13:10.480" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14293" PostTypeId="1" CreationDate="2020-04-05T22:22:21.793" Score="0" ViewCount="105" Body="&lt;p&gt;On my Inverted T ultra keyboard, the SF9 key and the number pad asterisk (*) keys perform the same function; the num pad equal (=) key and the F7 keys are similarly tied together. I don't know if this is accomplished by hard wire, or by program. Is there any way that I can break these connections?&lt;/p&gt;&#xA;" OwnerUserId="17735" LastEditorUserId="576" LastEditDate="2020-04-06T09:54:00.560" LastActivityDate="2020-04-06T09:54:00.560" Title="Keys on Omnikey Inverted T Ultra" Tags="&lt;keyboards&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14294" PostTypeId="1" CreationDate="2020-04-05T22:46:58.220" Score="42" ViewCount="6957" Body="&lt;p&gt;Some time ago I found that the audio of a game called Ninja Gaiden 1 (NES) is around 1 hour. This is excluding the sound effects like jump and hit e.t.c. Then I found that the entire game size is actually quite small and the sound data is not stored as actual sound samples. Rather, it is stored as &quot;instructions to a sound chip&quot;. Which is quite strange.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;How precisely was game music stored during the 8-bit console era that made it possible to store so much music without exceeding even 1MB of space in hardware!? I have heard that the sound data was stored as the note and duration for which it should be run. I am not aware of any hadware IC that I can use to learn more or any game code example to learn how it was programmed in the game code.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If compression was used, what type of compression would that be?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What are some examples of the most basic and most advanced &quot;sound chips&quot; that were used in those times?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="17736" LastActivityDate="2020-04-09T16:51:58.277" Title="How did old games from 8-bit era game consoles store music?" Tags="&lt;sound&gt;&lt;game-consoles&gt;" AnswerCount="6" CommentCount="8" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14295" PostTypeId="2" ParentId="14294" CreationDate="2020-04-05T23:37:21.940" Score="27" Body="&lt;p&gt;You can think of the sound chip in devices such as this as a simple synthesizer, capable of emitting some basic waveforms at some designated frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Capabilities of these devices varied in the 8-bit era, fx on number of simultaneous voices, available waveforms, hardware envelopes, filters and special modulation techniques (such as ring modulation and later, entering into the 16-bit era, amplitude and frequency modulation). One end of the spectrum having only simple square wave and/or noise capabilities (fx the venerable AY-3-8910) to something like the 6581 SID of C64 fame, which has a much wider range of waveforms, ADSR envelopes, ring modulation, custom duty cycle and programmable filters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A sound track on these machines is basically a program running that continuously modulates the parameters of the sound chip, setting the frequencies of the notes and changing the available parameters to influence the sound generation with a richer sound as a result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, music was stored as tables for that program (you can kind of regard the player as an interpreter), representing notes and instruments and modulation commands. Some sound chips could play a limited form of digital samples as well; these are also tables of amplitudes over time but take up a lot more resources and was typically used sparsely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While not typically compressed in the usual sense, table data/commands were often optimized to squeeze as much information into a byte as possible, with parameters only taking up a limited number of bits. Sound parameters were bundled up into instruments so that they could be reused without repeating the sound parameters over and over again, and the music itself was generally organized into tracks of patterns, where commands often existed to repeat and/or transpose a pattern, such that it could be reused and repeated without taking up much additional space. Using this technique, long pieces of music can be made that takes up relatively little space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Composers of the time worked directly with these low level abstractions, sometimes programming the music directly in assembler, sometimes using specialised software to do so. Over time, patterns for getting richer sound evolved, such as using arpeggios, vibrato and dynamically changing waveforms and duty cycle to get richer harmonic content.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My description here is rooted in having written such music routines and music myself, mainly for the C64, but the same general principle applies to other sound devices of the era - right up to the OPL FM chips that were still found on SoundBlaster-family cards much, much later.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-04-06T00:22:08.707" LastActivityDate="2020-04-06T00:22:08.707" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14296" PostTypeId="2" ParentId="14294" CreationDate="2020-04-05T23:49:37.367" Score="54" Body="&lt;p&gt;As you already say, it was stored as &lt;em&gt;&quot;instructions to a sound chip&quot;&lt;/em&gt;. So it's not a simple blob of data for DA-converters, but a procedural storage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think of it like music notes. Imagine someone playing a piano he doesn't need to hit some 44,000 keys per second but anywhere between two and eight, each with a certain duration and velocity and later release them again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For playing (electronic) music instruments a protocol called &lt;a href=&quot;https://en.wikipedia.org/wiki/MIDI&quot; rel=&quot;noreferrer&quot;&gt;MIDI&lt;/a&gt; was devised, using &lt;a href=&quot;http://www.music.mcgill.ca/~ich/classes/mumt306/StandardMIDIfileformat.html&quot; rel=&quot;noreferrer&quot;&gt;three byte packets&lt;/a&gt; to start and stop each note: channel address, note and pitch/release. A piece like &lt;a href=&quot;https://en.wikipedia.org/wiki/Ode_to_Joy&quot; rel=&quot;noreferrer&quot;&gt;Ode to Joy&lt;/a&gt; can, leaving out bells and whistles, be played with data as low as two bytes per second. So an hour of non repetitive music can be stored in as low as 8 KiB. Not really much. Of course, for a nice result one would use multiple channels and use instrument specific envelopes. Still, the result will be way less than 100 KiB for a hour of music.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, MIDI is a good benchmark for bandwidth needed as a single 31.25 kbit/s (~3 KiB/s) interface is good for up to 500 notes per second - that's sufficient to play any actual band all the way to a reasonable sized orchestra.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Storing music as notes is in itself already a kind of compression. In addition, music is usually repetitive, so it's easy to structure the data needed like a program with loops and subroutines. Which again acts as further compression - application specific encoding often beats generic compression by far as it can use higher level of abstraction than simple data streams.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, using a high level encoding like musical notes does require a processing level to turn them into commands for sound chips/processors. How much effort to be put here depends a lot on the chips used as well as the kind of sound desired. Essentially it's like implementing a synthesizer for Midi. At that level sound samples may as well be used to create output. Such a sample can again be quite small, as it just has to describe a certain wave form and envelope, that can be used to generate any tone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even rather complex musical instrument handling can be done in a few KiB of code and data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Asking for spec ranges of sound hardware is rather fruitless, as it literally ranged from speakers that simply could be clicked on and off (like in the Apple II) and still being able to play multiple channels, all the way to MIDI controlled synthesizers like the Roland &lt;a href=&quot;https://en.wikipedia.org/wiki/MPU-401&quot; rel=&quot;noreferrer&quot;&gt;MPU-401&lt;/a&gt;. Also, as shown, with a sufficient sophisticated music generation software, the chip used becomes irrelevant for the amount of data needed to play. It only defines the playback quality.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-04-06T10:52:16.797" LastActivityDate="2020-04-06T10:52:16.797" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14297" PostTypeId="2" ParentId="14293" CreationDate="2020-04-06T00:05:29.473" Score="5" Body="&lt;p&gt;It sounds like perhaps you have the dip switches configured incorrectly for the type of computer you are using.  Check the DIP switches which can be found under the Northgate logo plate on the front of the keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This photo shows the DIP switches on the Northgate OmniKey/101, but there is a similar door with switches underneath on the Inverted-T Ultra model you have.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/2K1qJ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2K1qJ.jpg&quot; alt=&quot;Northgate OmniKey/101 DIP switches&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The attached image below from the User's Guide (page 5) shows the correct DIP switch settings for various models of compatible computers.  A PDF version of the &lt;a href=&quot;https://deskthority.net/wiki/images/3/38/Northgate_OmniKey_Users_Guide_Apr92.pdf&quot; rel=&quot;noreferrer&quot;&gt;User's Guide&lt;/a&gt; can be found for download on the Deskthority WIKI.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/wj5pI.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wj5pI.jpg&quot; alt=&quot;OmniKey DIP Switch Settings&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="320" LastEditorUserId="320" LastEditDate="2020-04-06T00:13:55.713" LastActivityDate="2020-04-06T00:13:55.713" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14298" PostTypeId="1" CreationDate="2020-04-06T00:05:34.663" Score="1" ViewCount="142" Body="&lt;p&gt;I am in need to refill my typewriter with more ink (this model uses ink ribbons), but in the place where I live they don't sell those ink ribbons anymore. I am considering to buy some cheap nylon ribbons, and soak them in normal ink, then attach those new inked nylon ribbons back to the ink ribbon. Would it work? I hear if you re-ink an old typewriter ink ribbon it wears out, that's why I'm buying the nylon ribbons. Would these, the inked nylon ribbons work?&lt;/p&gt;&#xA;" OwnerUserId="17737" LastEditorUserId="3748" LastEditDate="2020-11-15T14:40:30.150" LastActivityDate="2020-11-15T14:40:30.150" Title="Casio CW16 Typewriter" Tags="&lt;printer&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2020-04-06T14:12:58.157" ContentLicense="CC BY-SA 4.0" />
  <row Id="14300" PostTypeId="2" ParentId="14298" CreationDate="2020-04-06T00:27:20.933" Score="4" Body="&lt;p&gt;AFAIR the CasioWriter 16 does &lt;strong&gt;not&lt;/strong&gt; use ink ribbons, as it's not impact based. The CW-16, like the whole CW-1x series, uses a thermo head, thus only thermo paper (fax paper), or a transfer ribbon, can be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are you sure it's a CW-16? The CW-650 series for example would be impact based using a daisy wheel print head.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Classic (impact) typewriter ribbons are made of cloth and reinking has always been the method of choice. Reinking itself does not damage the ribbon at all, it gets worn out from the types hitting it.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-04-06T00:27:20.933" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14301" PostTypeId="1" CreationDate="2020-04-06T04:55:20.390" Score="0" ViewCount="343" Body="&lt;p&gt;I am trying to find the source code for the earliest implementation of the stack data structure in C, but I can't find anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am particularly interested in knowing if the member variables of the stack data structure were made private, or if they were kept public (and so it was the job of the programmer not to modify these variables by accident).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If the source code for the stack data structure is not available, I am also interested in the source codes of other data structures like queue and linked list and so on.&lt;/p&gt;&#xA;" OwnerUserId="17739" LastActivityDate="2020-04-06T12:40:58.633" Title="What is the earliest implementation of the stack data structure in C?" Tags="&lt;history&gt;&lt;c&gt;" AnswerCount="4" CommentCount="16" FavoriteCount="1" ClosedDate="2020-04-06T21:43:16.553" ContentLicense="CC BY-SA 4.0" />
  <row Id="14302" PostTypeId="2" ParentId="14294" CreationDate="2020-04-06T06:13:33.663" Score="5" Body="&lt;p&gt;Music in the 8-bit era was mainly stored like in the MIDI file: tone pitch, tone length, effects, drums. A lot of &quot;music routines&quot; allow writing music like a program: with &quot;subroutines&quot;, &quot;parameters&quot;, &quot;loops&quot; etc. The principle is mainly the same for the ZX Spectrum's beeper or the ZXS128's AY-3-8910 music, or the C64 SID music, or ATARI's POKEY... Just a routine and a &quot;tune data&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later came the &quot;pattern-based&quot; routines, i.e. music organized in the form as MODs (from different XxTrackers on Amiga and PC) - I remember a program called &quot;SoundTracker&quot; for ZXS128. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So long story short: No sampling in those days. Just simple tones and noises and basic effects did all that &quot;chiptune&quot; era feeling. No compression was needed, or better say: it was &quot;procedural compression&quot;, based on the fact that music is full of repeating...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most used sound chips were AY-3-8910/8912 (ZXS128, MSX, etc. - Yamaha made nearly the same chip, labeled YM2149), Commodore SID (6581/6582/8580), Atari POKEY (not only sound), Texas Instruments SN76489 or Philips SAA1099.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-04-06T06:13:33.663" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14303" PostTypeId="2" ParentId="14301" CreationDate="2020-04-06T07:46:59.087" Score="2" Body="&lt;p&gt;My understanding is that the stack is provided at the architectural level, eg it is built in to the processor in the form of a stack pointer and relevant operators. It is not a language level concept, in the way that other data structures may be. &lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2020-04-06T07:46:59.087" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14304" PostTypeId="2" ParentId="14301" CreationDate="2020-04-06T08:01:17.237" Score="3" Body="&lt;p&gt;As mentioned in the comments, data can’t be entirely hidden in C, there is no concept of “public” v. “private” members of data structures. Members &lt;em&gt;can&lt;/em&gt; be hidden in practice using pointers to opaque data structures (see for example &lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_05&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;FILE&lt;/code&gt;&lt;/a&gt;), but that’s only a “gentleman’s agreement”.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When looking for early implementations in C, your best bet is to dig in &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the early Unix code&lt;/a&gt;. For example, &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V4/sys/dmr/tty.c#L18&quot; rel=&quot;nofollow noreferrer&quot;&gt;here’s an early linked list&lt;/a&gt; (Research V4, August 1973):&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct cblock {&#xA;    struct cblock *c_next;&#xA;    char info[6];&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The same release already had &lt;code&gt;dc&lt;/code&gt;, which manipulates a stack, but it was written in assembly; its C implementation in V7 (1979) &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V7/usr/src/cmd/dc/dc.h#L67&quot; rel=&quot;nofollow noreferrer&quot;&gt;has a stack&lt;/a&gt;, although it’s probably not the earliest implementation of a stack in C:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct  blk *stack[STKSZ];&#xA;struct  blk **stkptr,**stkbeg;&#xA;struct  blk **stkend;&#xA;int stkerr;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In fact an earlier implementation can be seen &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V6/usr/source/c/c11.c#L632&quot; rel=&quot;nofollow noreferrer&quot;&gt;in the C compiler&lt;/a&gt; in V6 (1975):&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    struct tnode *expstack[20];&#xA;    register struct tnode **sp;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As is commonly the case in C, the stack isn’t implemented as an explicit data structure (&lt;code&gt;struct&lt;/code&gt;), but as an array and a pointer, with &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V6/usr/source/c/c11.c#L641&quot; rel=&quot;nofollow noreferrer&quot;&gt;bounds-checking&lt;/a&gt; (albeit after-the-fact in this case).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-04-06T09:57:07.643" LastActivityDate="2020-04-06T09:57:07.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14305" PostTypeId="2" ParentId="14301" CreationDate="2020-04-06T08:46:44.210" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I am trying to find the source code for the earliest implementation of the stack data structure in C&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is no stack data structure in C. Look through the language specification and you won't find it there. If you were a programmer and you wanted a stack, you had to implement your own. If you go back to the beginnings of C and look at all the code that needed a stack, you'll probably find that there were as many implementations as there were stacks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many ways to implement a stack in C. Perhaps the easiest is as an array and an index&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int intStack[STACK_SIZE];&#xA;int stackPointer = 0;&#xA;&#xA;void push(int newElement) &#xA;{&#xA;    intStack[stackPointer++] = newElement;&#xA;}&#xA;&#xA;int pop() &#xA;{&#xA;    return intStack[--stackPointer];&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Two points about the above:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I'm using modern syntax. I can barely remember how to write K&amp;amp;R C, so I'm not even going to try.&lt;/li&gt;&#xA;&lt;li&gt;There are no checks for stack overflow or underflow. It would complicate the code and there were probably plenty of stacks written without bounds checks anyway.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The above implementation is very similar to a stack defined in K&amp;amp;R &lt;em&gt;The C Programming Language&lt;/em&gt; in chapter 4 which probably counts as a fairly early example of a stack.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I am particularly interested in knowing if the member variables of the stack data structure were made private, or if they were kept public&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That would depend on the quality of the programmer. Contrary to popular belief, C does have data hiding. In fact, I would argue that it is better than C++&lt;sup&gt;1&lt;/sup&gt;. However, there's no qualification of structure members by access keywords. Data  hiding has to be done at the compilation unit (file) level and is all or nothing. Here's how:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, you need to put the elements of your stack and the pointer into a &lt;code&gt;struct&lt;/code&gt; in a separate source file.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* intstack.c */&#xA;&#xA;#include &quot;intstack.h&quot; /* See below for what is in here */&#xA;&#xA;struct IntStack&#xA;{&#xA;    int data[STACK_SIZE];&#xA;    int pointer;&#xA;}&#xA;&#xA;void IntStack_push(struct IntStack *stack, int newElement) &#xA;{&#xA;    stack-&amp;gt;data[stack-&amp;gt;pointer++] = newElement;&#xA;}&#xA;&#xA;int IntStack_pop(struct IntStack *stack) &#xA;{&#xA;    return stack-&amp;gt;data[--stack-&amp;gt;pointer];&#xA;}&#xA;&#xA;struct IntStack *IntStack_new()&#xA;{&#xA;    return calloc(1, sizeof(struct IntStack));&#xA;} &#xA;&#xA;void IntStack_delete(struct IntStack *stack)&#xA;{&#xA;    free(stack);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then you need a header file that has prototypes of all the  functions and an incomplete declaration of the &lt;code&gt;struct&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* intstack.h */&#xA;&#xA;struct IntStack; /* Incompleter declaration */&#xA;&#xA;void IntStack_push(struct IntStack *stack, int newElement); &#xA;&#xA;int IntStack_pop(struct IntStack *stack); &#xA;&#xA;struct IntStack *IntStack_new();&#xA;&#xA;void IntStack_delete(struct IntStack *stack);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Other people can use your stack by simply including the header file. They have no access to the internal members of the struct (well, not without doing something bad casting pointers to the struct to some other type).&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &quot;intstack.h&quot;&#xA;&#xA;int main()&#xA;{&#xA;    struct IntStack *stack = IntStack_new();&#xA;&#xA;    IntStack_push(stack, 3);&#xA;    printf(&quot;%d\n&quot;, IntStack_pop()); /* prints 3 */&#xA;    IntStack_delete(stack);&#xA;&#xA;    return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I am also interested in the source codes of other data structures like queue and linked list and so on.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Similar comments to the above are applicable&lt;sup&gt;2&lt;/sup&gt;. Incidentally, a singly linked list is pretty much the same as a dynamically growing stack i.e. one that doesn't overflow until the memory runs out. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; In C++ you haver to put the private members in a class declaration in  a header which means the protections can be defeated simply by &lt;code&gt;#define private public&lt;/code&gt; before the header is included. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; Some operating systems have implementations of queues e.g. macOS has a number of library functions and macros to implement queues of various types. &lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2020-04-06T08:46:44.210" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14306" PostTypeId="2" ParentId="14301" CreationDate="2020-04-06T12:40:58.633" Score="1" Body="&lt;p&gt;I'm probably repeating other posts, but let me try and summarize.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;There is no 'stack' in the definition of the C language&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An implementation of C very likely uses a stack for activation records (holding local variables and return addresses, for example) -- also known as a 'call stack'.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The C standard library has no 'stack' data structure&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The concept of 'stack' is much older than C (and older than settling on the word 'stack' as the name to use)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There were surely countless private implementations of a stack structure in C; it's so simple.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-04-06T12:40:58.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14307" PostTypeId="1" AcceptedAnswerId="14311" CreationDate="2020-04-06T16:05:36.880" Score="22" ViewCount="1668" Body="&lt;p&gt;On page 139 of Brian Bagnall's book &quot;Commodore: The Final Years&quot;, there is the statement that at CeBIT Hannover in March 1989, Commodore announced (amongst other things) &quot;Novell Netware for Amiga&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had not previously heard of any way to connect an Amiga to NetWare, so this was a bit of a surprise. With a bit of web searching, I found some references to a Commodore product called &quot;Amiga Client for Novell NetWare&quot; with product numer AS220.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I've not been able to find any concrete information that this product was ever actually available. Does it really exist? And for bonus points, is it obtainable?&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2021-03-11T08:37:18.017" Title="Does the &quot;Amiga Client for Novell NetWare&quot; exist?" Tags="&lt;amiga&gt;&lt;software&gt;&lt;network&gt;" AnswerCount="6" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14308" PostTypeId="1" AcceptedAnswerId="14309" CreationDate="2020-04-06T16:10:29.527" Score="17" ViewCount="1951" Body="&lt;p&gt;Windows 9x can employ two kinds of disk drivers: native protected-mode drivers and compatibility-mode DOS drivers, and the former are used in preference to the latter whenever possible. When Windows is started and native disk drivers are loaded, existing DOS drivers for each drive letter are disabled and the protected-mode drivers take over. If there are any drives left that Windows doesn’t have native drivers for, Windows falls back to using DOS drivers for those, resulting in a Control Panel message: &amp;quot;Drive X is using MS-DOS compatibility mode file system&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;DOS disk drivers usually delegate hard disk accesses to interrupt 0x13 services, which identify each available disk by an 8-bit number. Protected-mode drivers, on the other hand, access the disk by directly communicating with the disk controller, which does not use BIOS disk numbers. In order to identify which protected-mode drivers correspond to which drive letters, some kind of mapping between DOS/BIOS disk numbers and the bus positions where the disks are attached has to be established.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://mbldr.sourceforge.net/specsedd30.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;EDD 3.0 specification&lt;/a&gt; defines a structure through which a BIOS may communicate this mapping to the operating system (AH=0x48; §5.8), but that probably wasn’t universally available back when Windows 95 was developed.&lt;/p&gt;&#xA;&lt;p&gt;How then does Windows 9x identify which letter corresponds to which disk?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-08T12:10:09.093" LastActivityDate="2021-02-08T12:10:09.093" Title="How does Windows 9x determine which disk drivers correspond to which BIOS disks/DOS drive letters?" Tags="&lt;ms-dos&gt;&lt;hard-disk&gt;&lt;bios&gt;&lt;driver&gt;&lt;windows&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14309" PostTypeId="2" ParentId="14308" CreationDate="2020-04-06T16:10:29.527" Score="25" Body="&lt;p&gt;By their contents.&lt;/p&gt;&#xA;&lt;p&gt;When Windows boots, the I/O Supervisor VxD (IOS) uses BIOS interrupt 0x13 services to read sector 0 (the Master Boot Record) of each drive. It then looks at two bytes at offset 0x0DA. If they are zeroes, IOS checks the following four bytes: if they are &lt;em&gt;also&lt;/em&gt; zeroes (like in the standard MBR code written by Microsoft’s FDISK), IOS overwrites them with an identification signature&lt;sup&gt;1&lt;/sup&gt;, again using interrupt 0x13 services. Otherwise the existing contents are assumed to be a signature that is remembered for later. If any of the above fails, then as a fallback a sum-of-doublewords checksum of the boot sector is computed and remembered instead.&lt;/p&gt;&#xA;&lt;p&gt;This mechanism is alluded to in the &lt;a href=&quot;https://web.archive.org/web/20200427173941/http://docshare01.docshare.tips/files/5609/56093391.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;I/O Supervisor Guide for Windows 9x/Me Operating Systems&lt;/em&gt;&lt;/a&gt;, a document provided by Microsoft to device driver writers (&lt;a href=&quot;https://web.archive.org/web/20060428220240/http://www.microsoft.com/downloads/details.aspx?FamilyID=7528EDD4-ED43-4498-B0A9-B484F8FAB50A&amp;amp;displaylang=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;it used to be available from Microsoft&lt;/a&gt;; &lt;a href=&quot;https://web.archive.org/web/20060506200533id_/http://download.microsoft.com/download/winddk/doc/1.0/W982KMe/EN-US/IOS_Guide.exe&quot; rel=&quot;nofollow noreferrer&quot;&gt;original download preserved by Internet Archive&lt;/a&gt;). On page 38, it mentions a list of data structures ‘used to audit and reconcile boot record vs. drive letter when assigning drive letters during IOS conversion from real mode to protected mode drivers’, each containing the BIOS disk number, some checksum and some disk signature. If you extract &lt;code&gt;IOS.VXD&lt;/code&gt; from within &lt;code&gt;VMM32.VXD&lt;/code&gt; and disassemble it, you will find code that performs the very process described above, and stores the result in a data structure matching the description in the &lt;em&gt;I/O Supervisor Guide&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;After the above probing process is done, sector 0 of each drive is read again, this time using native disk drivers, and compared against data remembered in the previous step. If the checksum and/or signature bytes match, IOS assumes the disk to be the same. The partitions themselves are then matched to DOS drive letters by their partition offsets, and the drive letters are handed over to the protected-mode driver. Partitions that have not been assigned drive letters by DOS are assigned new ones.&lt;/p&gt;&#xA;&lt;p&gt;This mechanism is the reason why Windows 9x may be confused by disk cloning software: if at boot time IOS sees two disks with identical MBRs with the signature field filled, it will not write a new signature and will later confuse the two disks for each other. The solution is to rewrite the MBR for either drive so that the signature bytes differ; ideally, they should be cleared back to zero, so that IOS may fill them again.&lt;/p&gt;&#xA;&lt;p&gt;(The above only applies to hard disks; this method obviously cannot work with floppy and CD-ROM drives, even though Windows native drivers manage to take over from DOS drivers for those as well.)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; The signature, also referred to as &lt;a href=&quot;https://thestarman.pcministry.com/asm/mbr/mystery.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;‘the mystery bytes’&lt;/a&gt;, is of the form &lt;code&gt;nn ss mm hh&lt;/code&gt; (where &lt;code&gt;nn&lt;/code&gt; is the BIOS disk number and &lt;code&gt;ss mm hh&lt;/code&gt; is the current time as a binary-coded decimal). The actual contents don’t matter too much, though; the goal is simply to have &lt;em&gt;some&lt;/em&gt; identifying value that is hopefully unique among all disks attached to the system.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-01-22T13:15:40.653" LastActivityDate="2021-01-22T13:15:40.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14310" PostTypeId="2" ParentId="14307" CreationDate="2020-04-06T17:15:02.467" Score="8" Body="&lt;p&gt;A bit of web searching &lt;a href=&quot;http://www.amiga-games.com/goodies/mega_applications_AMIGA.html&quot; rel=&quot;noreferrer&quot;&gt;finds a site&lt;/a&gt; offering it. I have no idea if the site is legitimate or safe. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2020-04-06T17:15:02.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14311" PostTypeId="2" ParentId="14307" CreationDate="2020-04-06T18:00:13.103" Score="31" Body="&lt;p&gt;The &lt;em&gt;&quot;Amiga Client Software for Novell Netware v1.4&quot;&lt;/em&gt; (official name) was created in 1992 by Oxxi. It is available as a set of six(6) floppy disk images &lt;em&gt;most places where Amiga abandon-ware is found&lt;/em&gt;. For instance, it can be found in the &lt;a href=&quot;https://archive.org/details/tosec&quot; rel=&quot;noreferrer&quot;&gt;TOSEC&lt;/a&gt; Amiga archive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;Commodore Amiga [TOSEC v2012-04-10]/Applications/[ADF]/Commodore Amiga - Applications - [ADF] (TOSEC-v2011-11-04_CM)/Amiga Client Software for Novell NetWare v1.4 (1992)(Oxxi)(Disk 1 of 6).zip&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And 5 more...&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-04-06T22:50:18.237" LastActivityDate="2020-04-06T22:50:18.237" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14312" PostTypeId="2" ParentId="14294" CreationDate="2020-04-06T21:37:56.693" Score="6" Body="&lt;p&gt;Here's an example program from the C64 Programmer's Reference Guide that plays a tune. It works by writing values to specific memory locations, which are mapped to the SID chip. You might want to get a C64 emulator and type it in yourself:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;5 S=54272                              sound registers start at S&#xA;10 FOR L=S to S+24:POKE L,0:NEXT       clear sound registers&#xA;20 POKE S+5,9:POKE S+6,0               set ADSR&#xA;30 POKE S+24,15                        set volume to max&#xA;40 READ HF,LF,DR                       read values HF,LF and DR from the DATA part&#xA;50 IF HF&amp;lt;0 THEN END                    quit on negative number&#xA;60 POKE S+1,HF:POKE S,LF               write to frequency registers&#xA;70 POKE S+4,33                         play note&#xA;80 FOR T=1 TO DR:NEXT                  wait&#xA;90 POKE S+4,32:FOR T=1 TO 50:NEXT      release note and wait&#xA;100 GOTO 40                            keep going&#xA;110 DATA 25,177,250,28,214,250&#xA;120 DATA 25,177,250,25,177,250&#xA;130 DATA 25,177,250,28,214,250&#xA;140 DATA 32,94,750,25,177,250&#xA;150 DATA 28,214,250,19,63,250&#xA;160 DATA 19,63,250,19,63,250&#xA;170 DATA 21,154,63,24,63,63&#xA;180 DATA 25,177,250,24,63,125&#xA;190 DATA 19,63,250,-1,-1,-1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That's three values per note, and all but one value is small enough to fit in a single byte. That's two bytes (a 16 bit value) for the frequency and one to specify the duration of the note.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an actual product, it would also be necessary to specify the time between notes. So with this very simple encoding scheme, we need 4 bytes per note, which is quite economical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, we need a format that can alter the other registers on the SID chip, so we have some variety in the sounds we are producing. We can do this in a reasonably economical fashion by dividing the notes into sections of a bar or two. Each section would then have a list of notes and a list of register writes to perform before playing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C code (though we would write this in assembler) might look something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct note{&#xA;    char delay;&#xA;    char frequency_high;&#xA;    char frequency_low;&#xA;    char duration;&#xA;};&#xA;&#xA;struct sid_write{&#xA;    char offset;&#xA;    char value;&#xA;};&#xA;&#xA;struct section{&#xA;    note* notes;&#xA;    sid_write* setup;&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A nifty side effect of this format is that our arrays of notes and sid_writes can be reused. If the same few bars are repeated all over the piece, it only uses up a section for each case, which is just 4 bytes. And if many different sections use the same sound, they can use the same array of sid_writes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This format is just an example, but you can see how easy it is to describe an 8 bit tune with a tiny amount of memory, especially if there is a lot of repetition. And 8 bit music generally has a lot of repetition.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If compression was used, what type of compression would that be?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Apart from the above, not much. Something like a Huffman decoder would itself require precious memory and music files were only a few kilobytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because loading on a C64 was painfully slow, there might be some compression used on the whole program to speed up loading, but nothing specific to the sound files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a console like the NES, there would only be a tiny amount of memory to decompress the music into, and there would be far more important uses for that memory. It would therefore have to reside on the cartridge in a format that could be easily read while the game was running.&lt;/p&gt;&#xA;" OwnerUserId="8665" LastEditorUserId="8665" LastEditDate="2020-04-09T16:51:58.277" LastActivityDate="2020-04-09T16:51:58.277" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14313" PostTypeId="1" CreationDate="2020-04-06T23:18:05.127" Score="3" ViewCount="646" Body="&lt;p&gt;I know the spectrum had the IM2 mode, but can I start multiple threads running simultaneously?&lt;/p&gt;&#xA;&lt;p&gt;Like to play sounds, watch the keyboard, and other tasks who can be runned simultaneous.&lt;/p&gt;&#xA;" OwnerUserId="17731" LastEditorUserId="17731" LastEditDate="2021-02-22T21:11:31.263" LastActivityDate="2021-02-22T21:11:31.263" Title="Is the ZX Spectrum multithread capable?" Tags="&lt;zx-spectrum&gt;&lt;interrupt&gt;&lt;multitasking&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="3" ClosedDate="2020-04-09T21:30:11.803" ContentLicense="CC BY-SA 4.0" />
  <row Id="14314" PostTypeId="1" AcceptedAnswerId="14315" CreationDate="2020-04-07T00:14:53.307" Score="53" ViewCount="13817" Body="&lt;p&gt;Back in the day (especially during the 70's and 80's), it seems that most computers and electronics were colored 'beige'. It seems it would be easy to use different colors, so why didn't they?&lt;/p&gt;&#xA;&lt;p&gt;Some theories are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Beige was cheaper/easier to produce and use.&lt;/li&gt;&#xA;&lt;li&gt;It was the style at the time. (most likely one according to my research)&lt;/li&gt;&#xA;&lt;li&gt;There was little or no competition, so why try using something different.&lt;/li&gt;&#xA;&lt;li&gt;There was some kind of law or rule against it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Was there a technical reason that made colors other than beige impractical, or was it a matter of style and preference?&lt;/p&gt;&#xA;" OwnerUserId="16508" LastEditorUserId="5199" LastEditDate="2020-08-19T23:04:09.867" LastActivityDate="2020-08-19T23:04:09.867" Title="Why were most PCs and electronics beige back in the day?" Tags="&lt;history&gt;&lt;case&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14315" PostTypeId="2" ParentId="14314" CreationDate="2020-04-07T00:29:41.900" Score="48" Body="&lt;p&gt;Same as today - beige and light gray goes with every style, no matter if a business desk or your living room. They are a simple non-statement, the least offensive colours to most people, thus not keeping anyone from buying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been endless attempts to sell stylish machinery thru all times, but looking back will reveal that the most stylish are usually also the least successful. Style requires a stance on the buyers side - one that may at least as often be negative as positive, thus repelling a number of potential customers due an issue compete unrelated with the desired function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neither DELL nor IBM became the giants they are/were by being fancy, but delivering average devices in toned down style.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="17771" LastEditDate="2020-04-08T10:57:37.220" LastActivityDate="2020-04-08T10:57:37.220" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="14316" PostTypeId="2" ParentId="14313" CreationDate="2020-04-07T01:28:45.327" Score="9" Body="&lt;p&gt;Interrupt Mode 2 is not a ZX Spectrum feature, it's a feature of the Zilog Z80 CPU itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Per Raffzahn@'s comment, the answer to your question kinda depends on what kind of threading you're talking about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are generally two levels of abstraction when it comes to multithreading, and two meanings of the term. First is the hardware level Simultaneous Multi-Threading (SMT) - a feature of the superscalar CPUs that allows multiple instructions to be executed in parallel. Intel calls its implementation of this feature in their CPUs like Pentium 4 HT and Core i7 'Hyper-Threading'. Second is the software level multi-threading - a model of concurrent execution without true parallelism, but that makes it appear to a user that things are executed at the same time by quickly switching back and forth between multiple threads of execution. This is what all multitasking operating systems implement, even on CPUs that do support SMT and have multiple cores, because generally there are way more processes and threads that need to be executed than there are execution units, CPU cores, and CPU sockets in a computer system. On the systems with only scalar CPUs the second variant of multi-threading is the only available option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to go back to Z80 and Spectrum - since Z80 is a scalar CPU, the first kind of multi-threading, the true simultaneous one, with parallel execution of the instructions, is not possible. But the second kind, where threads execute concurrently, but not at the same time in parallel, is definitely possible. You don't necessarily need memory protection for this, all you need for pre-emptive multitasking is interrupt mechanism (the implication being even without interrupt mechanism it should still be possible to implement cooperative multitasking like in Windows 1.x/2.x/3.x and classic macOS). In fact, there is an operating system called &lt;a href=&quot;http://www.symbos.de/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SymbOS&lt;/a&gt; that supports preemptive multitasking on machines like Amstrad CPC and MSX2 family. Those machines use Z80 CPU and lack memory protection just like ZX Spectrum. The main problem with running SymbOS on original ZX Spectrum is that the OS needs at least 128KiB RAM and currently doesn't support all of Spectrum's hardware. NOTE: the difference between threads and processes is in memory sharing, not scheduling and execution, so for this question I use them somewhat interchangeably.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specifics of interrupt mechanism, registers, etc., mostly determine not whether it is possible to implement multitasking/multithreading, but how easy or difficult it is. E.g., the register set and memory model of Z80 are limited enough to make C compiler implementation more difficult, and the resulting compiled code to be much less efficient than hand-written assembly, but it has been done, so it's definitely not impossible to do so. In general, you can find plenty examples of programmers achieving many great things on a very limited hardware, it's more a question of persistence and ingenuity than possibility. And a cost/benefit tradeoff.&lt;/p&gt;&#xA;" OwnerUserId="17748" LastEditorUserId="17748" LastEditDate="2020-04-09T14:37:27.660" LastActivityDate="2020-04-09T14:37:27.660" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14317" PostTypeId="1" CreationDate="2020-04-07T04:17:16.243" Score="10" ViewCount="273" Body="&lt;p&gt;One of my favorite features of the Game Boy Advance growing up was the ability for some games to be played multiplayer with just one cartridge - the first player would have the cartridge and all the other Game Boys would download their side of the client from them. Wanting to replicate this myself, I later learned that this was accomplished with an external 256 KB RAM bank, starting at &lt;code&gt;0x00200000&lt;/code&gt;, that would hold a program that was sent to it via the cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, bafflingly enough, I can't seem to find any resources about how to actually &lt;em&gt;send&lt;/em&gt; such a program over the cable. The official programmer's guide from Nintendo is full of information about the different communications modes available to it (multiplayer link, UART, JOY BUS, etc.) and how to operate each of them, but it gives no indication of what communication mode you'd have to use and what bits you would have to send in order to get another Game Boy at the boot screen to start receiving a program. Most of the online resources I've consulted have been similar - lots of information about communication modes, but nothing filled in about the protocol. The most I've been able to find are sources calling it &quot;multiboot&quot;, and &lt;a href=&quot;https://os.mbed.com/users/kek/notebook/gameboy-advance-multiboot/&quot; rel=&quot;noreferrer&quot;&gt;one piece of ARM MBED source code&lt;/a&gt; that runs through the protocol via an ARM microcontroller board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that it's been done, since hobbyists have been doing it for decades, so is there any definitive, general information on how to do it posted anywhere?&lt;/p&gt;&#xA;" OwnerUserId="8491" LastActivityDate="2020-04-07T04:17:16.243" Title="What is the protocol for bootstrapping a Game Boy Advance over a link cable?" Tags="&lt;game-boy-advance&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14318" PostTypeId="2" ParentId="14276" CreationDate="2020-04-07T08:23:33.103" Score="0" Body="&lt;p&gt;Use &lt;code&gt;--mapfile&lt;/code&gt; to create a map file and collect all sources. Not very useful IMHO.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;you spread the source code and/or&lt;/li&gt;&#xA;&lt;li&gt;you spread the binary code but&lt;/li&gt;&#xA;&lt;li&gt;I have never seen included runtime sources, why? Just install the compiler!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7534" LastActivityDate="2020-04-07T08:23:33.103" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14319" PostTypeId="1" AcceptedAnswerId="14321" CreationDate="2020-04-06T23:52:20.210" Score="5" ViewCount="383" Body="&lt;p&gt;Mismatched disk/drive refers to, for example, reading/writing a 720K disk with a 1.44M drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't forget LS-120 and LS-240 SuperDisk drives, they can use standard floppies too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What can and can't be read/written with a given drive type?&lt;/p&gt;&#xA;" OwnerUserId="17752" OwnerDisplayName="Alexander M" LastEditorUserId="16504" LastEditDate="2020-04-07T11:04:20.767" LastActivityDate="2020-04-07T14:36:37.993" Title="Mismatched floppy disk/drive reading and writing, what should one keep in mind?" Tags="&lt;floppy-disk&gt;&lt;floppy-drive&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14320" PostTypeId="2" ParentId="14314" CreationDate="2020-04-07T09:46:44.593" Score="25" Body="&lt;p&gt;According to the &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Beige_box&quot; rel=&quot;noreferrer&quot;&gt;Beige box&lt;/a&gt;&quot; entry of Wikipedia,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;many early personal computers and dedicated word processors [...] were usually beige or similar colors like off white or ecru. These colors were presumably chosen to allow the machines to blend inconspicuously into a variety of settings, especially among similarly colored cubicles and office equipment. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11421" LastActivityDate="2020-04-07T09:46:44.593" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14321" PostTypeId="2" ParentId="14319" CreationDate="2020-04-07T11:35:10.767" Score="8" Body="&lt;p&gt;I’ll limit my answer to common 3.5” formats on PCs, DSDD, DSHD, and SuperDisk, as listed in your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SuperDisk drives can be ignored as far as backwards-compatibility is concerned: they have two head assemblies, one for “standard” formats, the other for LS formats, and the “standard” head is equivalent to a high-density 3.5” drive’s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main concern with non-LS 3.5” floppies is the metal used in the medium. DSDD and DSHD floppies use different metals, with different coercivities. HD drives can adjust their field strength to write appropriately, so an HD drive can write to a DD floppy without creating issues. Problems arise when using a DSHD floppy in a DD drive: it is possible to format a DSHD floppy using a DD format, but if the floppy was ever formatted with an HD format (or was pre-formatted, as was common in the late 90s), a DD drive won’t be able to correctly reformat it (because its write signal isn’t strong enough). Problems can also arise when overwriting data on a DD-formatted floppy using an HD drive; it’s always better to “write from blank”.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic rules of thumb for 3.5” drives are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ideally, use appropriate media — in particular, use DSDD floppies in DD-only systems;&lt;/li&gt;&#xA;&lt;li&gt;always format floppies in the system they’re intended for — thus, if you want to transfer data to a DD-only system, format the floppy in that system, and write to it using whatever system you’re transferring from;&lt;/li&gt;&#xA;&lt;li&gt;always clear data in the lowest-density system; the simplest approach here is to reformat disks before &lt;em&gt;any&lt;/em&gt; re-use (deleting or overwriting files);&lt;/li&gt;&#xA;&lt;li&gt;stick to “standard” formats if you want to exchange data — 720K for DSDD, 1.44M for DSHD.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Exchanging data with non-PC systems can be more complex (especially with Macs and Amigas), and in such scenarios it’s often better to stick to PC formats for data transfer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using non-standard formats in PCs (as produced &lt;em&gt;e.g.&lt;/em&gt; by &lt;code&gt;FDFORMAT&lt;/code&gt; or 2M) can introduce compatibility problems too, and they should generally be avoided for transfer between systems (unless you also transfer the drive that formatted the disks).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-04-07T13:22:59.417" LastActivityDate="2020-04-07T13:22:59.417" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14322" PostTypeId="2" ParentId="14280" CreationDate="2020-04-07T12:01:44.663" Score="2" Body="&lt;p&gt;If I may offer a concise answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because while today's TVs have a multitude of direct input options - RGB on phono jacks, SCART, HDMI and others - there used to be only an aerial socket.  So devices like VCRs and video games had to pretend to be a TV program, broadcast on a specific channel.  Obviously it was a good idea to choose a channel that was 'spare', not being used in your area for a TV transmission.  This would be different in different territories. For you it seems to have been Channel 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could 'tune' the device's output channel, usually by adjusting a small control with a screwdriver. Maybe by chosing between a limited number of preset channels.   Tune the tv to the empty channel, attach the device to the aerial socket, twiddle the control until the picture came up.   It worked.&lt;/p&gt;&#xA;" OwnerUserId="17753" LastActivityDate="2020-04-07T12:01:44.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14323" PostTypeId="2" ParentId="14314" CreationDate="2020-04-07T13:16:35.220" Score="34" Body="&lt;p&gt;The choice of beige for the plastic cases used on popular 1980s retrocomputers was not arbitrary. As a color for a popular, mass-market, personal computer, it originated with the Apple ][, where it was specifically chosen by the designer, &lt;strong&gt;Jerry Manock&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1977, Steve Jobs hired Manock, a professional designer, to create the Apple II around Wozniak's electronic design. All choices, aside from the electronics, were made by Manock. This included the choice of a neutral beige color scheme - specifically &lt;strong&gt;Pantone #453&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple ][ was the first and only personal computer of its time to be given this level of design attention by a professional designer, who would go on to design the Macintosh. It was the case then, as now, that Apple's great commercial successes became trend setters for the computer industry. The color of the original Apple II is the earliest example of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The major brands that followed Apple, such as Commodore and Atari, desperately needed to capture whatever &quot;halo-effect&quot; they could from Apple's early success. It's not any different than Samsung's following of Apple's smartphone design trend in the 2010's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some will imagine that this history ascribes too much credit to Apple for their contributions to personal computer design. After all, a color choice can seem pretty arbitrary, to a non-designer. To Jerry Manock, it is anything but arbitrary, and he deserves recognition for his contributions. You can read more about his contribution to early computers &lt;a href=&quot;https://www.sevendaysvt.com/vermont/iwitness/Content?oid=2183491&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="10260" LastEditDate="2020-04-08T02:40:50.010" LastActivityDate="2020-04-08T02:40:50.010" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14324" PostTypeId="2" ParentId="14313" CreationDate="2020-04-07T13:43:23.313" Score="8" Body="&lt;p&gt;All of the popular, early 8-bit CPU's support hardware and software interrupts. Therefore, they can all theoretically support preemptive multitasking, which &lt;em&gt;I think&lt;/em&gt; is what this question is really asking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relevant &lt;a href=&quot;https://en.wikipedia.org/wiki/Preemption_(computing)#PREEMPTIVE&quot; rel=&quot;noreferrer&quot;&gt;article&lt;/a&gt; from Wikipedia states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In simple terms: Preemptive multitasking involves the use of an interrupt mechanism which suspends the currently executing process and invokes a scheduler to determine which process should execute next. Therefore, all processes will get some amount of CPU time at any given time. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Of course, more advanced CPU's, such as the i8086/88 and the Motorola 68000, had additional architectural features to help OS developers to implement a practical multitasking environment. The solutions for 8-bit uP (there have been many valiant attempts) tend to be proof-of-concept novelties. The task switching performance and memory constraints usually make it too slow to be practical for real-world application usage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A notable exception to the above is &lt;a href=&quot;https://en.wikipedia.org/wiki/OS-9&quot; rel=&quot;noreferrer&quot;&gt;OS-9&lt;/a&gt;, which provides a quite functional Unix-like multitasking OS for the 6809 microprocessor. It can work with only 64KiB, but excels on a system with more memory. OS-9 is the main reason that Tandy Color Computer 3 users frequently expanded these 8-bit systems to 512KiB in the late 1980's.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-04-07T15:57:41.123" LastActivityDate="2020-04-07T15:57:41.123" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14325" PostTypeId="2" ParentId="14319" CreationDate="2020-04-07T13:45:51.080" Score="3" Body="&lt;p&gt;Below I don't discuss the issue of single-sided versus double-sided&#xA;drives since it seems sufficiently obvious. Also, when I say &quot;PC&quot; I'm&#xA;refering to common western IBM PC-compatible computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amongst commonly used floppy drives, there are only three basic types&#xA;you need to worry about. 3.5&quot; drives are essentially smaller versions&#xA;of 5.25&quot; drives, so the issues are the same for both types.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Double-density (DD) 40-track drives¹². These are the drives used on&#xA;the original IBM PC. The diskettes are generally formatted to hold&#xA;320 or 360 KB double-sided (160 or 180 KB single-sided).&lt;/li&gt;&#xA;&lt;li&gt;Double-density (DD) 80-track drives. These were almost unknown in&#xA;5.25&quot; form in western PCs, but not uncommon in some other countries&#xA;(such as Japan) and on non-PC computers. The diskettes are generally&#xA;formatted to hold 640 or 720 KB, double-sided.&lt;/li&gt;&#xA;&lt;li&gt;High-density (HD) 80-track drives. The diskettes are generally&#xA;formatted to hold 1.2 MB (5.25&quot;) or 1.44 MB (3.5&quot;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As Stephen points out, there are only two types of media:&#xA;&quot;double-density&quot; (which is actually the same as single-density media)&#xA;and high-density. These have different magnetic properties and, while&#xA;DD drives may be able to write on HD floppies and vice versa, this&#xA;will be extremely unreliable at best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HD drives almost invariably support writing to DD formats as well.&#xA;This is automatic in the case of 3.5&quot; HD drives (via the second hole&#xA;in the corner across from the write-protect hole); for 5.25&quot; HD drives&#xA;you must manually specify DD format (though the OS may check and do&#xA;this for you, except when formatting diskettes). However, HD drives&#xA;are also invariably 80-track drives, and will have the same issues&#xA;with 40-track interchange as 80-track DD drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue between 40- and 80-track drives is that the 80-track drives&#xA;use a narrower head and read/write a narrower track. Thus an 80-track&#xA;drive will read a 40-track diskette produced by either type of drive&#xA;with no problem. However, a 40-track drive will generally have great&#xA;difficulty reading any sectors (or full tracks) written in 40-track&#xA;format by an 80-track drive. (Many retries may eventually produce a&#xA;successful read.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Stephen also points out, the LS drives are are a completely&#xA;separate thing with their own heads, and so not really relevant for&#xA;interchange.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹&lt;sub&gt;The oldest models of these drives used only 35 tracks, but are&#xA;otherwise compatible so long as you don't try to access the additional&#xA;five tracks used later. Even into the '80s some drive systems, such as&#xA;the Apple II and Commodore 1541, used only the first 35 tracks though&#xA;the drives themselves were capable of accessing all 40 tracks.&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;²&lt;sub&gt;Yes, there are 3.5&quot; DD 40-track drives. They were quite rare in&#xA;the (western) PC world, but not uncommon elsewhere, such as in&#xA;Japan. I own several, and have data sheets.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-04-07T14:36:37.993" LastActivityDate="2020-04-07T14:36:37.993" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14326" PostTypeId="2" ParentId="14276" CreationDate="2020-04-07T14:18:01.933" Score="0" Body="&lt;p&gt;As others have said, there is no easy way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The proper solution is to not use cl65, since it's workflow is pre-defined and I do not believe very extensible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic workflow for cc65 is cc65 runs to compile C source code in to as65 compatible assembly code. as65 is run to convert the assembly code in to object code. Finally, ld65, the linker, is called to linked the disparate object files together (those generated by your C code and the library code provided by the system).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your workflow you would introduce a post processor between the cc65 step and the as64 step. This post-processor would do the things that you suggest, such as inline pushax, or append the assorted library files to the source code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could do this with a simple script, or even with a Makefile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on your needs, writing such a processor would not necessarily be difficult. You could probably just iterate over the lines of code, directly replace lines like &lt;code&gt;jsr pushax&lt;/code&gt;, and just count references to external routines that would need to be included.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, one caveat to concern yourself with is that you may have to made several passes over the code. For example, some of the library code may well make calls to other library functions not directly referenced in your code, but would still need to be included. Or, those functions might reference things you want to inline, like the pushax.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, you can see you may need to post process the library files as well. But this is simple. You can simply run over the main file, include and inline anything you find, write a new file, and then do it all over again until nothing changes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may have an issue with duplicate symbols, since each file has their own namespace, if two files use the same internal label, they may conflict when combined. This type of thing bumps the potential difficulty up a notch as you would then need to rewrite the symbols. But, at the same time, as65 has some pretty robust scoping capabilities, so those may work for you as well (I'm no as65 expert, I've just skimmed the docs in the past).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use any modern scripting language for this. I bet you could roll this out (barring some fundamental blocker) in a short afternoon of hackery.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-04-07T14:18:01.933" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14327" PostTypeId="2" ParentId="14308" CreationDate="2020-04-07T14:34:37.437" Score="10" Body="&lt;p&gt;It wasn't anything to do with drive letters, or the &lt;em&gt;Windows NT&lt;/em&gt; disc signature in the MBR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS-Windows 9x, in particular the infamous &lt;code&gt;wdctrl&lt;/code&gt; virtual device driver (often known colloquially and misleadingly as &quot;32-bit disk access&quot;), after determining that it was reasonable for it to supplant the real-mode firmware in the first place, issued three INT 13h calls to the firmware, and watched to see which ATA I/O ports were accessed and what the controller register contents specifying the command and C/H/S address were.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be seen from &lt;a href=&quot;https://web.archive.org/web/20010217184359/http://support.microsoft.com/support/kb/articles/Q119/6/74.asp&quot; rel=&quot;noreferrer&quot;&gt;the old Microsoft KnowledgeBase article Q119674&lt;/a&gt; which describes the three rounds of I/O requests and their negative test results, and &lt;a href=&quot;http://dosbox-x.com/doxygen/html/ide_8cpp_source.html#l02571&quot; rel=&quot;noreferrer&quot;&gt;the source code of DOSBox-x&lt;/a&gt; (&lt;a href=&quot;http://dosbox-x.com/doxygen/html/ide_8cpp_source.html#l02526&quot; rel=&quot;noreferrer&quot;&gt;and above&lt;/a&gt;) which has to fake the behaviour of actual hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From this &lt;code&gt;wdctrl&lt;/code&gt;  knew a mapping from the 00,01, &amp;hellip; 80, 81, &amp;hellip; disc numbers used at the firmware level to the actual ATA I/O registers.  This is effectively the same information as returned (for a root-bus ATA bus) in the device and interface paths from the EDD API call.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Schulman notes the INT 2Fh broadcasts for letting firmware extensions and replacements know that device detection is in progress, giving slightly more detail than Brown.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Further reading&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.vogons.org/viewtopic.php?p=316302#p316302&quot; rel=&quot;noreferrer&quot;&gt;https://www.vogons.org/viewtopic.php?p=316302#p316302&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Andrew Schulman (1994).  &lt;a href=&quot;https://archive.org/details/unauthorizedwind00schu_1/&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Unauthorized Windows 95: a developer's guide to exploring the foundations of Windows &quot;Chicago&quot;&lt;/em&gt;&lt;/a&gt;. IDG. ISBN 9781568841694.&lt;/li&gt;&#xA;&lt;li&gt;Ralf Brown. &quot;&lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/21/45.html&quot; rel=&quot;noreferrer&quot;&gt;Int 2F/AX=1607h/BX=0010h&#xA;&lt;/a&gt;&quot;.  &lt;em&gt;Interrupt List&lt;/em&gt;.  delorie.com.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1932" LastEditorUserId="79" LastEditDate="2020-04-07T15:52:39.847" LastActivityDate="2020-04-07T15:52:39.847" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14328" PostTypeId="1" AcceptedAnswerId="14337" CreationDate="2020-04-07T16:50:00.557" Score="23" ViewCount="4236" Body="&lt;p&gt;I have the vague recollection of &lt;em&gt;&quot;Panic Ejecting&quot;&lt;/em&gt; floppy disks by lifting the latch on the drive after immediately regretting a command I had typed. At the time, I was young, impulsive, and blessed with only enough computing knowledge to be dangerous. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This likely happened first on the school's &lt;strong&gt;TRS-80 Model III&lt;/strong&gt;, though it is possible I also did the same with my Commodore 64 or a friend's Apple ][.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most likely scenario, if my memory is accurate, was typing &quot;SAVE&quot; at the BASIC command line when I meant to type &quot;LOAD&quot;. Programming BASIC one tended to SAVE the program often, creating a type of &quot;muscle memory&quot;. This could lead to quickly typing SAVE, and committing an experimental change to disk, when what you really wanted to do was revert.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this specific example, how effective would it be &lt;em&gt;punching out early / hitting the Eject&lt;/em&gt; as soon as you realized your mistake?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For similar experiences of regretting a disk command on early 8-bit systems, how successful might this be for other scenarios?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-04-08T16:40:31.343" Title="Could you manually eject a floppy quick enough to prevent data loss?" Tags="&lt;commodore-64&gt;&lt;basic&gt;&lt;floppy-drive&gt;&lt;apple-dos&gt;&lt;trs-80-model-iii&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14329" PostTypeId="2" ParentId="14313" CreationDate="2020-04-07T17:04:13.827" Score="9" Body="&lt;p&gt;Not simultaneously, as it only has one CPU, but it has a 50 Hz timer interrupt, so it can do time sharing processing, provided that programs are well behaved, as there is no memory protection and no supervisor mode in the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a proof of concept, I've written a small task scheduler and tasks that are executed in a time sharing fashion (with a 20ms quantum)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; (c)2020 Miguel Angel Rodriguez Jodar, for Retrocomputing (Stack Exchange)&#xA;; Demonstration of a very simple scheduler and two tasks running on the ZX Spectrum&#xA;; Licensed under GPL 3.0&#xA;&#xA;        org 0c0e0h&#xA;&#xA;Main:&#xA;        halt   ;let a whole interrupt happen so we have plenty of time until the next one&#xA;        di&#xA;        ld a,0c0h&#xA;        ld i,a&#xA;        im 2   ;set scheduler interrupt&#xA;        ei&#xA;        ld sp,StackTask1Top    ;load task1&#xA;        jp Task1               ;and execute it&#xA;&#xA;        org 0c0ffh&#xA;        dw Scheduler&#xA;&#xA;Scheduler:&#xA;        push af  ;save current process state it its stack&#xA;        push bc&#xA;        push de&#xA;        push hl&#xA;        exx&#xA;        push af&#xA;        push bc&#xA;        push de&#xA;        push hl&#xA;        exx&#xA;        push ix&#xA;        push iy&#xA;&#xA;        ld hl,0&#xA;        add hl,sp&#xA;        push hl  ;get current stack pointer (just interrupted task)&#xA;&#xA;        ld hl,(CurrentProc)&#xA;        inc hl&#xA;        pop de&#xA;        ld (hl),e&#xA;        inc hl&#xA;        ld (hl),d  ;and store it into process table&#xA;        inc hl&#xA;&#xA;        ld a,(hl)  ;check if end of processes in table&#xA;        or a&#xA;        jr nz,NotEndOfTasks&#xA;        ld hl,TaskTable   ;if so, start from the beginning of the table&#xA;&#xA;NotEndOfTasks:&#xA;        ld (CurrentProc),hl  ;select next process&#xA;        inc hl&#xA;        ld e,(hl)&#xA;        inc hl&#xA;        ld d,(hl)&#xA;        ex de,hl&#xA;        ld sp,hl             ;load its stack pointer&#xA;&#xA;        pop iy               ;and jump to it, restoring its state&#xA;        pop ix&#xA;        exx&#xA;        pop hl&#xA;        pop de&#xA;        pop bc&#xA;        pop af&#xA;        exx&#xA;        pop hl&#xA;        pop de&#xA;        pop bc&#xA;        pop af&#xA;        ei&#xA;        ret&#xA;&#xA;;----------------------------------------------------------&#xA;;TASK1: CALCULATE AND PRINT 16-BIT PRIME NUMBERS&#xA;;----------------------------------------------------------&#xA;&#xA;Task1:&#xA;        ld ix,DataTask1   ;environment for this task (pointers for PRINT routine)&#xA;TryNextNumber:&#xA;        ld bc,2           ;BC holds the current divisor to try with&#xA;TryDivisor:&#xA;        ld hl,(NextCandidate)&#xA;        ld d,b&#xA;        ld e,c&#xA;KeepSub:&#xA;        or a&#xA;        sbc hl,de&#xA;        jp m,NotDivisible&#xA;        jp z,NotPrime&#xA;        jp KeepSub&#xA;NotDivisible:&#xA;        inc bc&#xA;        or a&#xA;        ld hl,(NextCandidate)&#xA;        sbc hl,bc&#xA;        sbc hl,bc&#xA;        jp m,ItsPrime&#xA;        jp TryDivisor&#xA;NotPrime:&#xA;        ld hl,(NextCandidate)&#xA;        inc hl          ;HL is not prime, try the next odd number&#xA;        inc hl&#xA;        ld (NextCandidate),hl&#xA;        jp TryNextNumber&#xA;ItsPrime:&#xA;        ld hl,(NextCandidate)&#xA;        ld (ix+SCRROW),6    ;print number at position 6,14&#xA;        ld (ix+SCRCOL),14&#xA;        call CalculateScrPos&#xA;        call PrintNumberHL&#xA;        jp NotPrime&#xA;&#xA;NextCandidate:&#xA;        dw 3   ;we begin with 3 to test if prime&#xA;&#xA;&#xA;;----------------------------------------------------------&#xA;;TASK2: print character set&#xA;;----------------------------------------------------------&#xA;&#xA;Task2:  ld ix,DataTask2&#xA;        ld a,' '&#xA;AnotherChar:&#xA;        call PrintCharA   ;just print the character set, from ASCII 32&#xA;        inc a&#xA;        jp p,AnotherChar  ;to ASCII 127 and start over again&#xA;        ld a,' '&#xA;NotResetChar:&#xA;        jp AnotherChar&#xA;&#xA;&#xA;;----------------------------------------------------------&#xA;PrintNumberHL:&#xA;        ld bc,10000&#xA;        call Div&#xA;        ld a,d&#xA;        add a,'0'&#xA;        call PrintCharA&#xA;        ld bc,1000&#xA;        call Div&#xA;        ld a,d&#xA;        add a,'0'&#xA;        call PrintCharA&#xA;        ld bc,100&#xA;        call Div&#xA;        ld a,d&#xA;        add a,'0'&#xA;        call PrintCharA&#xA;        ld bc,10&#xA;        call Div&#xA;        ld a,d&#xA;        add a,'0'&#xA;        call PrintCharA&#xA;        ld a,l&#xA;        add a,'0'&#xA;        call PrintCharA&#xA;        ret&#xA;Div:&#xA;        ld d,0&#xA;KeepDiv:&#xA;        or a&#xA;        sbc hl,bc&#xA;        jp m,Negative&#xA;        push af&#xA;        inc d&#xA;        pop af&#xA;        ret z&#xA;        jp KeepDiv&#xA;Negative:&#xA;        add hl,bc&#xA;        ret&#xA;&#xA;PrintCharA:&#xA;        push af&#xA;        push bc&#xA;        push de&#xA;        push hl&#xA;&#xA;        ld l,a&#xA;        ld h,0&#xA;        ld a,(ix+SCRPOS)&#xA;        or (ix+SCRPOS+1)&#xA;        call z,CalculateScrPos&#xA;        ld e,(ix+SCRPOS)&#xA;        ld d,(ix+SCRPOS+1)&#xA;        push de&#xA;&#xA;        add hl,hl&#xA;        add hl,hl&#xA;        add hl,hl&#xA;        ex de,hl&#xA;        push hl&#xA;        ld hl,(23606)&#xA;        add hl,de&#xA;        pop de&#xA;        ld b,8&#xA;LoopPrintScan:&#xA;        ld a,(hl)&#xA;        ld (de),a&#xA;        inc hl&#xA;        inc d&#xA;        djnz LoopPrintScan&#xA;&#xA;        pop hl&#xA;        ld a,(ix+SCRCOL)&#xA;        inc a&#xA;        cp (ix+ENDCOL)&#xA;        jp z,NotEndColumn&#xA;        jp nc,EndColumn&#xA;NotEndColumn:&#xA;        ld (ix+SCRCOL),a&#xA;        inc hl&#xA;        ld (ix+SCRPOS),l&#xA;        ld (ix+SCRPOS+1),h&#xA;        jp EndPrintA&#xA;EndColumn:&#xA;        ld a,(ix+BGCOL)&#xA;        ld (ix+SCRCOL),a&#xA;&#xA;        ld a,(ix+SCRROW)&#xA;        inc a&#xA;        cp (ix+ENDROW)&#xA;        jp z,NotEndRow&#xA;        jp nc,EndRow&#xA;NotEndRow:&#xA;        ld (ix+SCRROW),a&#xA;        jp CalcAndEnd&#xA;EndRow: ld a,(ix+BGROW)&#xA;        ld (ix+SCRROW),a&#xA;&#xA;CalcAndEnd:&#xA;        call CalculateScrPos&#xA;EndPrintA:&#xA;        pop hl&#xA;        pop de&#xA;        pop bc&#xA;        pop af&#xA;        ret&#xA;&#xA;CalculateScrPos:  ; HL = (row/8)&amp;lt;&amp;lt;11 + (row%8)&amp;lt;&amp;lt;5 + col&#xA;        push af&#xA;        push hl&#xA;        ld a,(ix+SCRROW)&#xA;        and 0f8h&#xA;        or 40h&#xA;        ld h,a&#xA;        ld a,(ix+SCRROW)&#xA;        and 7&#xA;        sla a&#xA;        sla a&#xA;        sla a&#xA;        sla a&#xA;        sla a&#xA;        or (ix+SCRCOL)&#xA;        ld l,a&#xA;        ld (ix+SCRPOS),l&#xA;        ld (ix+SCRPOS+1),h&#xA;        pop hl&#xA;        pop af&#xA;        ret&#xA;&#xA;;Table used by the scheduler to get the stack pointer for&#xA;;the next task to execute.&#xA;;The end of the table is marked by a processor with ID 0&#xA;TaskTable:&#xA;        db 1  ;ID&#xA;        dw StackTask2Top-20   ;stack pointer&#xA;        db 2  ;ID&#xA;        dw StackTask2Top-20   ;stack pointer&#xA;        db 0  ;ID (end of table)&#xA;        dw 0  ;null stack&#xA;&#xA;CurrentProc:&#xA;        dw TaskTable  ;current position within TaskTable&#xA;&#xA;        ds 64&#xA;StackTask1Top:&#xA;        dw 0&#xA;&#xA;        ds 64&#xA;StackTask2Top:&#xA;        dw Task2&#xA;&#xA;BGROW   equ 0&#xA;ENDROW  equ 1&#xA;BGCOL   equ 2&#xA;ENDCOL  equ 3&#xA;SCRROW  equ 4&#xA;SCRCOL  equ 5&#xA;SCRPOS  equ 6&#xA;&#xA;DataTask1:&#xA;        db 0,11,0,31   ;min row, max row, min column, max column. Window of (0,0,31,11)&#xA;        db 0,0         ;current row,col position&#xA;        dw 0           ;screen memory address of such position&#xA;&#xA;DataTask2:&#xA;        db 12,22,2,28  ;Text window (12,2,22,28)&#xA;        db 12,2&#xA;        dw 0&#xA;&#xA;        end Main&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2020-04-09T01:16:44.437" LastActivityDate="2020-04-09T01:16:44.437" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14330" PostTypeId="2" ParentId="14313" CreationDate="2020-04-07T17:17:30.620" Score="5" Body="&lt;p&gt;Yes it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any processor is capable of multithreading if software is written to implement multithreading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course the Spectrum OS doesn't support it.  You would have to replace the OS with a multithreading executive of your own.  This is not as complex as you might think if you are only attempting to produce a small controller of some sort.  You could treat this as a challenge to learn how multithreading works. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that multithreading is NOT the same as multitasking.  So references to implementing multitasking on the Spectrum will not help you.  Similarly, you only need a single processor.  I suspect the Spectrum is a good machine to try this on. Although I've never tried it on the Spectrum myself, I've done it on other machines of that era.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2020-04-07T17:17:30.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14332" PostTypeId="1" CreationDate="2020-04-07T18:14:36.837" Score="6" ViewCount="261" Body="&lt;p&gt;From the beginning in 1978 the Apple II floppy disk system used &lt;a href=&quot;https://en.wikipedia.org/wiki/Group_coded_recording#Apple&quot; rel=&quot;noreferrer&quot;&gt;GCR&#xA;encoding&lt;/a&gt; to convert data bytes to sequences of binary values to&#xA;be written to the diskette: first 4-and-4 encoding (never released),&#xA;then 5-and-3 encoding (DOS 3.1 through 3.2.1 13-sector), and later&#xA;6-and-2 encoding (DOS 3.3 16-sector).&lt;/p&gt;&#xA;&lt;p&gt;Starting on &lt;a href=&quot;https://archive.org/details/Beneath_Apple_DOS_OCR/page/n13/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;page 3-3&lt;/a&gt;¹ of Worth and Lechner's &lt;em&gt;Beneath Apple&#xA;DOS&lt;/em&gt; they describe the format of bits on the track. They mention that&#xA;they're discussing the actual analogue signals, only the digital 1s&#xA;and 0s, and say that, &amp;quot;For the purposes of this discussion the&#xA;demarcation of these intervals will be depicted by a clock bit,&amp;quot;&#xA;indicating that what they describe might be slightly different from&#xA;what's really being written to or read from the diskette.&lt;/p&gt;&#xA;&lt;p&gt;However, what they describe there and show in figure 3.2 is clearly FM&#xA;encoding, with a clock bit before each data bit, rather than GCR:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4kzwx.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4kzwx.jpg&quot; alt=&quot;figure 3.2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Is this just flat-out wrong, or oversimplified, or am I missing&#xA;something here? If it's not simply wrong, how does this affect the&#xA;later discussion of normal bytes vs. self-sync bytes and&#xA;synchronization in the gaps between the fields, particularly with&#xA;regard to figure 3.10 on page 3-9, showing how one can start reading&#xA;at any bit in a series of (10-bit) sync bytes and recover the byte&#xA;alignment within 5 bytes?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kS57J.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kS57J.jpg&quot; alt=&quot;figure 3.10&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;¹&lt;sub&gt;I've linked to the 1982 Fourth Printing edition here, but the&#xA;content of this section is the same in substance in the &lt;a href=&quot;https://archive.org/details/Beneath_Apple_DOS_alt/page/n7/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;1983 Fifth&#xA;Printing&lt;/a&gt;, &amp;quot;Updated for Apple IIe.&amp;quot;&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-14T15:14:43.160" Title="Why does _Beneath Apple DOS_ show FM encoding rather than GCR?" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14333" PostTypeId="2" ParentId="14328" CreationDate="2020-04-07T18:42:33.160" Score="16" Body="&lt;p&gt;Theoretically, yes.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disk needs time to spin up to speed before reading or writing can occur.  While it varies between platforms and drives, it's at least a couple hundred milliseconds.  That's arguably just enough time to realize you shouldn't have hit enter, and to pop the drive latch.  Especially if you subconsciously realize it before you even hit enter and then hit enter anyway, like I usually do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you're not fast enough, you can absolutely end up writing garbage to the disk if you interrupt it mid-write.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-04-07T18:42:33.160" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14334" PostTypeId="1" AcceptedAnswerId="14341" CreationDate="2020-04-07T19:42:40.177" Score="1" ViewCount="155" Body="&lt;p&gt;I have a Game Boy, and whenever it tries to play sound, the sound is very quiet but there's a loud clacking sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a sample. In this case, it is Tetris Attack playing:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://soundcloud.com/james-larrowe/soundrecord-2020-04-06-16-24-02&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://soundcloud.com/james-larrowe/soundrecord-2020-04-06-16-24-02&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I am not the author of this music. All credit goes to the composers (Masaru Tajima, Masaya Kuzume, Yuka Tsujiyoko).)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these sounds are created by the Game Boy. Even the large clacks at the beginning and end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What might cause this? How can I fix this, preferably without replacing the speaker?&lt;/p&gt;&#xA;" OwnerUserId="13845" LastActivityDate="2020-04-08T12:11:39.583" Title="How can I fix this clacking sound made by the Game Boy speaker?" Tags="&lt;hardware&gt;&lt;maintenance&gt;&lt;game-boy&gt;&lt;restoration&gt;&lt;speaker&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14335" PostTypeId="2" ParentId="14294" CreationDate="2020-04-07T19:44:41.247" Score="0" Body="&lt;p&gt;Wow, so many blast-from-the-past terms here!  In terms of the &quot;what chip was top-dog&quot; in &quot;computer sound module&quot; terms it was likely the Amiga chipset (can't remember which lady's name was the sound module).&lt;br&gt;&#xA;To simplify the entire discussion, any old-school (non-sampler) synthesizer, is nothing but a dedicated computer sound module.  Most old (early 80s) synths that were digital, in fact had tiny memories (if they were programmable).  In most cases, you had to overwrite existing patches with new ones in fact (after backing up the factory sound patches if they weren't backed up in ROM). &#xA;Yet from synthesizers that had much less computing capacity and storage than most watches today, came all the soundtracks for movies, music, etc.  &quot;Blinded me with Science&quot; or AxelF (Beverly Hills Cop theme), the synths likely had a total of 16-64kb in total for all parts of the entire compositions.  It was (as mentioned in some fashion by others) the mixing and &quot;playing&quot; of the sounds that made them interesting.&lt;br&gt;&#xA;Obviously music synths have more hardware (analog or digital) to process, filter, combine, etc the base sounds, but even an original IBM-PC (or TRS, etc) had only an internal speaker with a &quot;beep&quot; sound by default.  But if you cycle that &quot;beep&quot; at a certain pulse rate, frequency, etc, you can make it &quot;sound&quot; like something.  In fact, early &quot;Speech synthesizers&quot; for C-64, and I believe IBM and a few others, could actually overdrive the A/D converters in the sound generation path, to &quot;synthesize&quot; voices, even though there was zero sample storage for a voice. (This trick in some cases depended on how old your system was, as chip designers often would &quot;clean up&quot; their designs over the years removing the ability to exceed bounds, etc). &#xA;Tap on a sheet of metal.  It sounds like a metallic tap.  Now &quot;wave&quot; that sheet of metal... it can sound like a thunderstorm, bang on the edge of it, sounds like a car crash, it's all about how you modulate the basics that gives character, even with a mono-channel, single waveform (&quot;beep&quot; is often nothing more than a square wave, as it's dirt-simple to make with an R/C circuit).  Take a square wave with adjustable frequency, now you can make music.  Take the square wave generator, cycle it on/off at programmed pulses, now it's got variety (FM synthesis (the original soundblaster soundcards, based on the Yamaha DX-11/21/TX81Z/etc series music synthesizer modules, were built around 4 &quot;waveform&quot; oscillators (square, sawtooth, sine, triangle, I believe from memory) and, with some filters (LFO) and envelope generators to modify them, was the basis for &quot;PC soundcards&quot; (Apple/Mac, Atari, and Amiga were far beyond them capability wise) for many years (used to own a DX-21 keyboard myself, loved that synth even though it was &quot;basic&quot; and was supplanted by more powerful ones, still enjoyed the sounds I could get out of basic FM synthesis.)&#xA;Here is how a basic PC speaker (single waveform, modulated by a timing chip basically) made sounds for many years (thanks Wikipedia)...&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/PC_speaker&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/PC_speaker&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17763" LastActivityDate="2020-04-07T19:44:41.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14336" PostTypeId="2" ParentId="14314" CreationDate="2020-04-07T19:50:14.537" Score="17" Body="&lt;p&gt;Nostalgia Nerd produced a &lt;a href=&quot;https://www.youtube.com/watch?v=R_GeGkdfns0&quot; rel=&quot;noreferrer&quot;&gt;video&lt;/a&gt; on this very subject very recently. Most of the reasons he cites are already answered here. But one interesting find was that Germany and some other European countries went as far as to write it into their health and safety workplace laws that 'light-value' colors must be used in office computing equipment (7:00 into the video). As to whether this is a distinct cause is difficult to determine as it was so long ago. However, he's got a picture (at 14:17) of an IBM ThinkPad manual with &quot;This product not for office use&quot;, apparently used as a way to skirt the workplace laws.&lt;/p&gt;&#xA;" OwnerUserId="5426" LastActivityDate="2020-04-07T19:50:14.537" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14337" PostTypeId="2" ParentId="14328" CreationDate="2020-04-07T19:58:18.353" Score="26" Body="&lt;p&gt;I did that all the time on the Apple II. The reason it worked was that some time was needed for the motor to spin up to the correct speed, and that the Disk II didn't really have an &quot;eject&quot; mechanism, but that you could very directly mechanically lift the read-write head from the surface of the disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That meant that if you were quick enough to lift the latch just when the drive light turned on, you could prevent a write with 100% percent success rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Important for some games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The possible failure mode is that some sector would be half-written, and therefore it wouldn't be possible to read it again, but that never happened to me.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-04-07T19:58:18.353" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14338" PostTypeId="1" AcceptedAnswerId="14339" CreationDate="2020-04-07T21:07:14.827" Score="15" ViewCount="9077" Body="&lt;p&gt;I saw this in the background of a video and I'm wondering what kind of device this is. It looks like a small pink CRT monitor with some keyboard-like buttons and was playing an animation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cJybJ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cJybJ.png&quot; alt=&quot;pink CRT monitor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17765" LastEditorUserId="17765" LastEditDate="2020-04-07T23:11:17.870" LastActivityDate="2020-04-08T20:52:31.483" Title="Is this a mini computer, a novelty monitor or something else?" Tags="&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ClosedDate="2020-04-09T12:22:58.757" ContentLicense="CC BY-SA 4.0" />
  <row Id="14339" PostTypeId="2" ParentId="14338" CreationDate="2020-04-07T22:28:07.763" Score="32" Body="&lt;p&gt;I've found it by looking up &amp;quot;miniature vintage computer.&amp;quot; It's a modern portable speaker called &lt;a href=&quot;http://www.divoom.com/product/ditoo.html&quot; rel=&quot;noreferrer&quot;&gt;Ditoo&lt;/a&gt; &lt;sup&gt;(&lt;a href=&quot;https://web.archive.org/web/20200407222652/http://www.divoom.com/product/ditoo.html&quot; rel=&quot;noreferrer&quot;&gt;Wayback&lt;/a&gt;)&lt;/sup&gt;.&lt;/p&gt;&#xA;" OwnerUserId="17765" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-08T20:52:31.483" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14340" PostTypeId="2" ParentId="14332" CreationDate="2020-04-08T00:18:14.087" Score="6" Body="&lt;p&gt;While it is &quot;flat out wrong&quot;, they do preface this with:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As this manual is primarily concerned with software, &lt;strong&gt;no attempt will&#xA;  be made to deal with the specifics of the hardware&lt;/strong&gt;. For example, while&#xA;  in fact data is stored as a continuous stream of analog signals, we&#xA;  will deal with discrete digital data, i.e. a or a 1 . We recognize&#xA;  that the hardware converts analog data to digital data but how this is&#xA;  accomplished is beyond the scope of this manual.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The diagram and surrounding text were updated in the &lt;a href=&quot;https://archive.org/details/Beneath_Apple_DOS_alt/page/n7/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;Fifth Printing, March 1983&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Data bits are recorded on the diskette in precise intervals. The&#xA;  hardware recognizes each of these intervals as either a or a 1 . We&#xA;  will define these intervals to be &quot;bit cells&quot;. A bit cell can be&#xA;  thought of as the distance the diskette moves in four machine cycles,&#xA;  which is about four microseconds. Using this representation, data&#xA;  written to and read back from the diskette takes the form shown in&#xA;  Figure 3.2. The data pattern shown represents a binary value of 101.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The figure they refer to is actually now Figure 3.3:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fMpjo.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fMpjo.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for why the authors originally showed FM encoding, we can only presume that they were aware that current disk drives used that and unaware that the Disk II didn't. It's probably not a coincidence that the above correction to the text was made around the same time that their publisher was about to release Sather's &lt;a href=&quot;https://archive.org/details/Understanding_the_Apple_II_1983_Quality_Software/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;Understanding the Apple II&lt;/a&gt;, which contained the first complete and detailed analysis of the disk system hardware.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2020-04-08T00:30:32.647" LastActivityDate="2020-04-08T00:30:32.647" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14341" PostTypeId="2" ParentId="14334" CreationDate="2020-04-08T10:20:37.973" Score="6" Body="&lt;p&gt;A loud click at beginning/end of the sound, but faint sound inbetween might be caused by a failed DC blocking capacitor. According to the gameboy schematics found at &lt;a href=&quot;http://www.devrs.com/gb/files/gameboy1.gif&quot; rel=&quot;noreferrer&quot;&gt;http://www.devrs.com/gb/files/gameboy1.gif&lt;/a&gt;, there is a 100µF capacitor in series with the speaker. If this is indeed the case, sound should be working fine at the headphone jack, because it uses separate blocking caps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possible cause is a broken speaker. There is a report on instructables on &lt;a href=&quot;https://www.instructables.com/id/How-to-repair-a-broken-speaker-of-an-Gameboy-DMG/&quot; rel=&quot;noreferrer&quot;&gt;how to re-glue the diaphragm of a gameboy speaker&lt;/a&gt;. Essentially they disassemble the speaker until both the diaphragm and the voice coil are removed from the housing and then use superglue to first fix the coil to the diaphragm and then to re-mount the diaphragm in the housing.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="10479" LastEditDate="2020-04-08T12:11:39.583" LastActivityDate="2020-04-08T12:11:39.583" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14342" PostTypeId="1" CreationDate="2020-04-08T10:56:58.303" Score="10" ViewCount="939" Body="&lt;p&gt;The Commodore 64 had &lt;a href=&quot;https://archive.org/stream/C64-C64C_Service_Manual_1992-03_Commodore#page/n7/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;two separate +5 V power supplies&lt;/a&gt;: one&#xA;supplied by the external PSU brick and a second one generated on-board&#xA;from the 9 VAC via a 7805 regulator. This second +5 V power supply was&#xA;called &quot;CAN +5 V&quot; and according to &lt;a href=&quot;https://archive.org/stream/C64-C64C_Service_Manual_1992-03_Commodore#page/n39/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;the schematic&lt;/a&gt; it supplied&#xA;the VIC-II, a system clock chip (U31) and perhaps other circuits I've&#xA;not noticed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why was this separate CAN +5 V supply used, and what does &quot;CAN&quot; mean?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For bonus points, if you can explain the effect of this on the system&#xA;ground, that would be interesting.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-04-08T11:28:39.217" LastActivityDate="2020-04-09T11:11:45.717" Title="Why did the C64 use a separate &quot;CAN&quot; +5 V power supply for some chips?" Tags="&lt;commodore-64&gt;&lt;power&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14343" PostTypeId="2" ParentId="14342" CreationDate="2020-04-08T11:21:25.523" Score="17" Body="&lt;p&gt;This is done to stop HF noise from spreading through the VCC rail. The VIC and the 8701 clock generator (U31) run at much higher speeds than the rest of the C-64, and thereby generate more HF noise than the other components. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that it's called &quot;CAN +5V&quot; because it supplies the components in the shielded metal &quot;can&quot; on board. [1] Note that the RF modulator -- the other HF component on the board -- also sits in a metal can, and also includes its own regulator (bottom left portion of the modulator schematic on p. 39 of the service manual you linked to). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bridge rectifier used in the generation of the +5V CAN supply ties the lower end of the AC input to one diode drop above GND. This is not a problem with the original Commodore power bricks, where both supplies (+5V DC and 9V AC) are floating, with no reference to an external ground (like PE). Even when you attach an external device (floppy drive, monitor, printer, whatever) that has its ground tied to PE, the ground of the 5V DC supply will be tied to that ground as well, but the 9V AC will still float. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're thinking about building your own supply, ensure that its AC output also floats with respect to the 5V DC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] I remember this explanation from back then, but I can't give a source. I checked a couple of books from the time, and they all use the term without an explanation. &lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-04-09T11:11:45.717" LastActivityDate="2020-04-09T11:11:45.717" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14344" PostTypeId="2" ParentId="14328" CreationDate="2020-04-08T16:40:31.343" Score="2" Body="&lt;p&gt;As a former floppy disc repair technician, you can indeed do this, but you risk damaging the read-write heads and/or the alignment of the heads, rendering the drive unusable until it is repaired or replaced.&lt;/p&gt;&#xA;" OwnerUserId="17781" LastActivityDate="2020-04-08T16:40:31.343" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14345" PostTypeId="2" ParentId="14294" CreationDate="2020-04-08T20:32:27.303" Score="0" Body="&lt;p&gt;Several answers have already noted how little information it takes to instruct a sound chip. There's another factor here: how little music the chip is really making. What I mean by that is there were very few hardware &quot;voices&quot;. This was of course due to hardware limitations, but it also reduced how much data was used per second to create music.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did they sound like they had far more voices than they did? The short answer is rapidly switching what each voice did, so that in a few seconds a human ear hears far more variety than the voices can simultaneously support. &lt;a href=&quot;https://www.youtube.com/watch?v=q_3d1x2VPxk&quot; rel=&quot;nofollow noreferrer&quot;&gt;This&lt;/a&gt; video explains it in detail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same channel has similar videos on how graphics were kept small. In understanding any of these videos, bear in mind this was as much about requiring little RAM as requiring little storage.&lt;/p&gt;&#xA;" OwnerUserId="13496" LastActivityDate="2020-04-08T20:32:27.303" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14346" PostTypeId="2" ParentId="11247" CreationDate="2020-04-09T09:46:47.933" Score="2" Body="&lt;p&gt;(Regarding 80286 and in addition to Stephen's Answers)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the 286 didn't have an on chip cache, some high end machines did add one. Similar for &lt;a href=&quot;https://books.google.co.jp/books?id=4D4EAAAAMBAJ&amp;amp;pg=PA73&amp;amp;lpg=PA73&amp;amp;dq=80286+cache&amp;amp;source=bl&amp;amp;ots=uCCpxRn2Ob&amp;amp;sig=ACfU3U0Vyf4kzUxFNIVMamIta2ObSCpKfg&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=2ahUKEwjB95a8gNvoAhXm0aYKHbxJBacQ6AEwBXoECB4QLw#v=onepage&amp;amp;q=80286%20cache&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;accelerator boards for 8088 PCs&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue here is that an 80286's memory cycle was, at the time, still slow enough to be served with widely available standard RAM. The 286 uses two full clock cycles (PCLK) to access memory. Thus an 8 MHz CPU needs RAM with a 200ns access time or better. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, wait states didn't break down an 80286 as much as one would assume. A 1 ws memory only slowed down the system by 10-30%, depending on the task. With one wait state A 12-14 MHz CPU could run with the same memory as an 8 MHz system, still delivering a noticeable performance increase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, faster systems (12..16 MHz) employed various tactics to relief memory stress, for example interleaved banks and variable wait states. This resulted in close to maximum performance without the need of a cache.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-04-09T09:46:47.933" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14347" PostTypeId="2" ParentId="3090" CreationDate="2020-04-09T10:20:11.677" Score="1" Body="&lt;p&gt;The BBC Micro (1982) supported up to 640x256 on a 50Hz interlaced screen.  A memory bank switching trick allowed 640x512, but on a standard television or monitor a single pixel horizontal line would display too much flicker to be useful.&lt;/p&gt;&#xA;" OwnerUserId="12335" LastActivityDate="2020-04-09T10:20:11.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14348" PostTypeId="2" ParentId="773" CreationDate="2020-04-09T11:46:33.043" Score="-3" Body="&lt;p&gt;You don't have to do all this to load games into ZX Spectrum! The main thing is that your audio player has &lt;strong&gt;low output signal&lt;/strong&gt;, so it just can't do the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You must play audio files on PC, but only rear speaker output, because you can burn front headphone output! Also, any amplifier is OK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Audio files must be in WAV format.&lt;/strong&gt; Absolutely no tuning and recompressing needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't use mp3 format to save space, because it can never be perfect as WAV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything is explained in my &lt;strong&gt;Youtube video&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/iD1_HRhXIyc&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/iD1_HRhXIyc&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7bu5V.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7bu5V.jpg&quot; alt=&quot;ZX Spectrum loading games&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17789" LastEditorUserId="17789" LastEditDate="2020-04-11T14:25:14.240" LastActivityDate="2020-04-11T14:25:14.240" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14349" PostTypeId="2" ParentId="12783" CreationDate="2020-04-09T12:49:12.553" Score="3" Body="&lt;p&gt;Waveform like on image #3 (&lt;a href=&quot;https://i.stack.imgur.com/AmFn5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://i.stack.imgur.com/AmFn5.png&lt;/a&gt;) should work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The perfect audio signal&lt;/strong&gt; looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lWqDF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lWqDF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The procedure to achieve perfect copy:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;load original signal to PC (use Audacity free);&lt;/li&gt;&#xA;&lt;li&gt;correct signal if needed (Audacity);&lt;/li&gt;&#xA;&lt;li&gt;convert audio to digital TAP format (open in emulator, save as TAP);&lt;/li&gt;&#xA;&lt;li&gt;convert TAP to WAV for use on real Spectrum (Tap2Wav free).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If input audio signal is bad, try to tune audio head on cassette player by listening tone on headphones. Also, try to lower volume to 75%, as high amplification can make it sound worse. Don't bother saving games that you can download from some of the &lt;strong&gt;ZX Spectrum archives&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="17789" LastEditorUserId="17789" LastEditDate="2020-04-09T19:31:15.150" LastActivityDate="2020-04-09T19:31:15.150" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14350" PostTypeId="2" ParentId="13461" CreationDate="2020-04-09T17:06:20.957" Score="1" Body="&lt;p&gt;I found one reference which exercises the floppy drives from the ROM-only BASIC, in just the ways I was looking for, the &lt;a href=&quot;https://www.samswebsite.com/en/photofact/details/index/id/129333&quot; rel=&quot;nofollow noreferrer&quot;&gt;SAMS Photofact guide for the Model III&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplest &quot;script&quot; it provides is the basic one which only makes a drive active as already found.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The following Basic program will make Disk Drive 0 run continuously in the read mode.&#xA;  Change the number 1 in the program to number 2 to make Disk Drive 1 run continuously.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 10 OUT 244,1: GOTO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This script extends that (and changes to Drive 1) to seek track 0 and then constantly issues a read command while logging the result to the screen:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 OUT 244,2: OUT 240,3&#xA;20 FOR T=1 TO 600: NEXT T&#xA;30 OUT 244,2: OUT 240,228: PRINT INP(243): GOTO 30&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(It's unclear to me whether or not BASIC would actually keep up with the data, or if it's ± just getting random samples of the stream.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this will step the specified drive to track 0 and out to track 40 endlessly:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 OUT 244,1: OUT 240,3&#xA;20 FOR T=1 TO 700: NEXT T&#xA;30 OUT 244,1: OUT 243,40: OUT 240,19&#xA;40 FOR T=1 TO 700: NEXT T: GOTO 10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The scripts have a bit of additional documentation in the context of drive/controller troubleshooting procedures, which are very helpful.&lt;/p&gt;&#xA;" OwnerUserId="13904" LastActivityDate="2020-04-09T17:06:20.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14351" PostTypeId="1" CreationDate="2020-04-09T20:25:57.757" Score="12" ViewCount="405" Body="&lt;p&gt;In the setup.txt file on the Windows 95 and 98 CDs (located in the \WIN95 [Windows 95] / \win98 [Windows 98] folder), which contains important information on setting up Windows and solving or working around problems that can occur thereduring, there is, as the first item under the “GENERAL SETUP NOTES” (Windows 95) / “HARDWARE NOTES” (Windows 98) heading, an alarming message about the consequences of installing Windows 95/98 on two specific models of laptops:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sager NP8200 or Wedge Technologies 466/DX2&lt;/p&gt;&#xA;&lt;p&gt;[...]&lt;/p&gt;&#xA;&lt;p&gt;[WARNING (95) / IMPORTANT (98)]: If you install Windows [95/98] on a Sager NP8200 or Wedge Technologies 466/DX2 laptop computer, you will not be able to use your computer, even if you reinstall a previous version of Windows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sub&gt;— &lt;em&gt;\WIN95\SETUP.TXT, Windows 95 installation CD; \win98\setup.txt, Windows 98 installation CD.&lt;/em&gt;&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Generally, the worst that can happen during an (attempted) operating-system installation/upgrade is that the installation fails and you have to reinstall your previous OS, which is a far cry from rendering the computer completely and permanently unusable – a bricked computer is what one would expect from a major hardware failure or an interrupted/corrupted BIOS update, &lt;em&gt;not&lt;/em&gt; an attempt (even if failed) at installing a new OS.  What was so different about the Sager NP8200 and Wedge 466/DX2?&lt;/p&gt;&#xA;" OwnerUserId="6915" LastEditorUserId="15334" LastEditDate="2021-01-22T13:47:00.533" LastActivityDate="2021-01-22T13:47:00.533" Title="Why would installing Windows 9x on a Sager NP8200 or Wedge 466/DX2 laptop brick the system?" Tags="&lt;hardware&gt;&lt;windows-98&gt;&lt;windows-95&gt;&lt;laptop&gt;" AnswerCount="0" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14352" PostTypeId="2" ParentId="14005" CreationDate="2020-04-10T01:10:30.923" Score="1" Body="&lt;p&gt;On the AppleFritter forum I happened to ask &quot;Did the original Apple 1s built by Apple have the ROR bug?&quot; and &lt;a href=&quot;https://www.applefritter.com/comment/88886#comment-88886&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cory Cohen (&quot;Cory986&quot;) replied&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Yes they did.   Only the last boards out of Apple had a fixed CPU.  This is one reason Mike Willegal has to make a special version of his memory test software which would run on original Apple-1 boards.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have no way to judge the validity of this myself, but I am told by Mike Willegal that, though this was not the reason for the memory test software change, Cory Cohen would know. Willegal also says he has vague memories about people with original Apple 1s encountering problems due to the the ROR bug, and so leans towards at least some (presumably non-hobbyist-built) Apple 1s having it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;https://www.willegal.net/blog/?p=6445&quot; rel=&quot;nofollow noreferrer&quot;&gt;This blog entry&lt;/a&gt; gives the reason for the ROR fix in Willegal's memory test program: someone who had built a &lt;a href=&quot;https://www.willegal.net/appleii/apple1-kit.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mimeo&lt;/a&gt; found a CPU old enough to have the bug, and used it in his replica.)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-04-10T16:17:42.293" LastActivityDate="2020-04-10T16:17:42.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14353" PostTypeId="1" AcceptedAnswerId="14354" CreationDate="2020-04-10T03:53:46.160" Score="5" ViewCount="433" Body="&lt;p&gt;I'm currently reading about the &lt;a href=&quot;https://www.researchgate.net/publication/220498837_Architecture_of_the_IBM_System360&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM system/360 architecture&lt;/a&gt; and there's a part that has me very confused: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The decision on basic format (which affected character size, word size, instruction field, number of index registers, input-output implementation, instruction set layout, storage capacity, character code, etc.) was whether data length modules should go as 2&lt;sup&gt;n&lt;/sup&gt; or 3.2&lt;sup&gt;n&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why would a data length module would be 3.2&lt;sup&gt;n&lt;/sup&gt;?&lt;/p&gt;&#xA;" OwnerUserId="15627" LastEditorUserId="12128" LastEditDate="2020-06-07T10:52:45.787" LastActivityDate="2020-06-07T10:52:45.787" Title="Data length module of 3.2^n confusion in IBM system/360 architecture" Tags="&lt;mainframe&gt;&lt;architecture&gt;&lt;early-computer&gt;&lt;s360&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14354" PostTypeId="2" ParentId="14353" CreationDate="2020-04-10T04:33:42.833" Score="8" Body="&lt;p&gt;Note that 3.2 is the square root of 10 rounded up to the closest value with one digit after the decimal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, every other data length module will be slightly greater than a power of 10. Apparently there was an expectation that data block lengths will be typically close to powers of 10, achieving good capacity utilization, while providing acceptable intermediate sizes for other block lengths.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The values of 3.2&lt;sup&gt;n&lt;/sup&gt;, rounded to the nearest integer, are 3, 10, 33, 105, 336, 1074, ...&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="611" LastEditDate="2020-04-10T08:18:05.273" LastActivityDate="2020-04-10T08:18:05.273" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14355" PostTypeId="1" CreationDate="2020-04-10T07:08:40.793" Score="9" ViewCount="965" Body="&lt;p&gt;How can I find out the OS version and CPU type in Windows CE, without disassembling the device or compiling any extra software?&lt;/p&gt;&#xA;" OwnerUserId="15407" LastEditorUserId="15334" LastEditDate="2021-01-14T10:42:01.107" LastActivityDate="2021-01-14T10:42:01.107" Title="How can I find out the OS version and CPU type in Windows CE?" Tags="&lt;windows&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14356" PostTypeId="2" ParentId="14355" CreationDate="2020-04-10T07:08:40.793" Score="14" Body="&lt;ol&gt;&#xA;&lt;li&gt;From the &lt;strong&gt;Start&lt;/strong&gt; menu go to &lt;strong&gt;Settings&lt;/strong&gt; then &lt;strong&gt;Control Panel&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/O93rC8N.png&quot; alt=&quot;1&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Start &lt;strong&gt;System&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/IMO7U6c.png&quot; alt=&quot;2&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;There are two sections &lt;strong&gt;Computer&lt;/strong&gt;: and &lt;strong&gt;System&lt;/strong&gt;:. Under &lt;strong&gt;Computer&lt;/strong&gt; section is the Windows CE version number and under &lt;strong&gt;System&lt;/strong&gt; section is the Processor Type.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/QmLuVIB.png&quot; alt=&quot;3&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: The graphics and menu arrangements may be different among various Win CE versions, but the general guide remains the same. On the more recent versions of Windows CE, the Processor Type information may not be completely on the screen, so you may need to copy the text and paste it to some other Windows that has a text field (such as the &lt;strong&gt;Run&lt;/strong&gt; menu)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20120306173949/https://netcfwince200.codeplex.com/wikipage?title=How%20to%20find%20out%20%20the%20Windows%20CE%20version%20and%20Processor%20Type%20on%20your%20device.&amp;amp;referringTitle=Home&quot; rel=&quot;noreferrer&quot;&gt;Source (long lost)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15407" LastActivityDate="2020-04-10T07:08:40.793" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14357" PostTypeId="2" ParentId="14353" CreationDate="2020-04-10T13:09:01.470" Score="12" Body="&lt;p&gt;The notation 3.2&lt;sup&gt;n&lt;/sup&gt;  looks to me like it means 3 x 2&lt;sup&gt;n&lt;/sup&gt; rather than (3 point 2)&lt;sup&gt;n&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the question is whether data lengths should be based on a 6-bit unit or some 'binary' size, in practice 8 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dominant character size at the time was 6 bits (with 7-bit ASCII just emerging).  A 36-bit word length was also common, and was in fact the word size for the successful 709/7090/7094 family.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were definitely arguments made for keeping a 6-bit size to 'save storage'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not have an authoritative reference to hand, but &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360#Influential_features&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; notes that one influential S/360 feature was:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 8-bit byte (against financial pressure during development to&#xA;  reduce the byte to 4 or 6 bits), rather than adopting the 7030 concept&#xA;  of accessing bytes of variable size at arbitrary bit addresses.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Aha, per Fred Brooks:  &lt;a href=&quot;https://archive.computerhistory.org/resources/access/text/2012/11/102658255-05-01-acc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;see page 25&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There was one very big difference, and that is Gene’s machine was&#xA;  based on the six-bit byte and multiples of that so 24-bit&#xA;  instructions, 48-bit floating part  and Jerry’s machine was&#xA;  based on a 8-bit byte and 32-bit instructions, 64-bit, and 32-bit&#xA;  floating point, which is not a real happy choice, but… there are&#xA;  strong arguments each way. And you want your architects to be&#xA;  consistent. You’re not going to have an 8-bit byte and 48-bit&#xA;  instruction floating point word. And, so, then came the biggest&#xA;  internal fight, and that was between the six and eight bit byte, and&#xA;  that story has been told. Gene and I each quit once that week, quit&#xA;  the company, and Manny&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Gene is Amdahl, Jerry is Blaauw)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;24 is 3 x 2&lt;sup&gt;3&lt;/sup&gt;, 48 is 3 x 2&lt;sup&gt;4&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Futhermore:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The extract in the question comes from a 1964 IBM Journal paper  &lt;a href=&quot;https://www.researchgate.net/publication/220498837_Architecture_of_the_IBM_System360&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Architecture of the IBM System/360&lt;/em&gt;&lt;/a&gt;, by Amdahl, Blaauw, and Brooks.  The quoted text is on page 91 of the journal, or 4 or 5 pages into the paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The extract is immediately followed by a discussion of character sizes (6 versus 8 bits) and floating-point operand sizes (48 versus 32/64 bits).  This makes it clear that  3.2&lt;sup&gt;n&lt;/sup&gt; is to be understood as 3 x 2&lt;sup&gt;n&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe we can blame the compositor for setting 3.2&lt;sup&gt;n&lt;/sup&gt; rather than 3·2&lt;sup&gt;n&lt;/sup&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-04-10T23:31:55.743" LastActivityDate="2020-04-10T23:31:55.743" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14358" PostTypeId="1" AcceptedAnswerId="14359" CreationDate="2020-04-10T18:05:24.077" Score="25" ViewCount="3908" Body="&lt;p&gt;It's been many years now, but when I used to connect to the Internet via Dial-Up back in the day I noticed at the time that as well as entering the phone number for my Dial-Up provider, a username/password were also required. Why did Dial-Up providers use this method of authentication - could the identity of the connecting party not simply be identified by their phone number?&lt;/p&gt;&#xA;" OwnerUserId="15043" LastActivityDate="2020-04-12T03:01:05.447" Title="When connecting to the Internet via Dial-Up, why did ISPs require a username/password to authenticate the session?" Tags="&lt;internet&gt;" AnswerCount="3" CommentCount="14" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14359" PostTypeId="2" ParentId="14358" CreationDate="2020-04-10T18:29:19.560" Score="58" Body="&lt;p&gt;No, the identity of the customer couldn't be confirmed by the phone number alone, for a number of reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Customers expected to be able to call in from different locations, using different stationary phone lines and therefore different phone numbers each time.&lt;/li&gt;&#xA;&lt;li&gt;Caller ID wasn't that widespread in the 1990s, and wasn't available for all phone companies in all countries.&lt;/li&gt;&#xA;&lt;li&gt;Caller ID could be faked.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="17802" LastActivityDate="2020-04-10T18:29:19.560" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14360" PostTypeId="1" CreationDate="2020-04-10T22:26:26.983" Score="11" ViewCount="401" Body="&lt;p&gt;IBM introduced the 3270 family of block mode terminals in 1971, for use with IBM mainframes (System/370 and successors). Then, in 1977, IBM introduced the 5250 family of block mode terminals for use with System/34 minicomputers, which was also used by the System/38 (1978), System/36 (1983), and AS/400 (1988).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/5250_5251/GA21-9247-2_5250_Information_Display_System_Functions_Reference_Manual_May80.pdf&quot; rel=&quot;noreferrer&quot;&gt;5250 terminal protocol&lt;/a&gt; is incompatible with 3270, although obviously inspired by it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, why did IBM introduce a new incompatible range of terminals for System/34 rather than just using the existing 3270 terminals? (I can imagine that political infighting and NIH syndrome between different IBM divisions could have had a role to play in it, but that's just speculation, and I was hoping someone might have a more concrete knowledge of the history of this.)&lt;/p&gt;&#xA;" OwnerUserId="17803" LastActivityDate="2020-10-27T20:03:26.443" Title="Why did IBM develop 5250 block mode terminals when 3270 already existed?" Tags="&lt;ibm&gt;&lt;terminal&gt;&lt;mainframe&gt;&lt;minicomputers&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14361" PostTypeId="2" ParentId="14358" CreationDate="2020-04-10T23:53:34.110" Score="19" Body="&lt;p&gt;In addition to sfrey's answer, using caller ID would prevent multiple accounts logging in from the same phone number, as in a family situation or a small office.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the real reason is probably due to technical ease.  Most ISPs offering dial-up service were essentially leasing UNIX accounts and disk space (or accounts on similar multi-user systems).  The username/password requirement was dictated by those systems' existing authentication mechanisms.&lt;/p&gt;&#xA;" OwnerUserId="4222" LastActivityDate="2020-04-10T23:53:34.110" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14362" PostTypeId="1" CreationDate="2020-04-11T00:29:36.997" Score="5" ViewCount="506" Body="&lt;p&gt;I have a vintage IBM Model F which I just bought from eBay, that I am trying to connect to my new Windows Pc. I ordered a DIN to Ps/2 converter from Newegg, because I my pc has a combined ps/2 port, so I assumed it was just going to be an easy plug and go. However. My computer can’t seem to read that there is a keyboard there! It won’t work in The BIOS and it won’t even come up in device manager. Is there are driver I need to download or something? Please help!&lt;/p&gt;&#xA;" OwnerUserId="17804" LastActivityDate="2020-04-11T20:54:51.653" Title="Trying to use IBM model F (5 pin DIN) with modern Windows PC" Tags="&lt;keyboards&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14363" PostTypeId="1" AcceptedAnswerId="14364" CreationDate="2020-04-11T01:55:05.467" Score="7" ViewCount="615" Body="&lt;p&gt;My only retrocomputing desire is to program in Applesoft Basic and relive the Apple II days from the 1980's.  Playing games is of no particular interest to me.  I just want to use a keyboard, not a game controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really like the &quot;Applesoft BASIC in Javascript&quot; app at &lt;a href=&quot;https://inexorabletash.github.io/jsbasic/&quot; rel=&quot;noreferrer&quot;&gt;https://inexorabletash.github.io/jsbasic/&lt;/a&gt; but I would like to find a stand alone program that I can download and run on a Raspberry Pi or run on a Windows machine.  I want to have a personal copy of the program.  I don't want to be dependent on someone else's web site which could possible disappear one day.  &lt;strong&gt;Is such a standalone emulator available?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for any help you can provide.&lt;/p&gt;&#xA;" OwnerUserId="17805" LastEditorUserId="10260" LastEditDate="2020-04-11T02:33:47.380" LastActivityDate="2020-04-15T01:24:06.400" Title="Are there standalone emulators of Applesoft Basic?" Tags="&lt;apple-ii&gt;&lt;emulation&gt;&lt;applesoft-basic&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14364" PostTypeId="2" ParentId="14363" CreationDate="2020-04-11T02:43:19.797" Score="12" Body="&lt;p&gt;Yes, there are at least a couple:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/linappleii/linapple&quot; rel=&quot;noreferrer&quot;&gt;LinApple&lt;/a&gt; - for Linux/Raspberry Pi. This fork of LinApple is current and maintained, and fixes annoying configuration bugs that others hadn't addressed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/AppleWin/AppleWin&quot; rel=&quot;noreferrer&quot;&gt;AppleWin&lt;/a&gt; — for Windows.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Further to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14363/are-there-standalone-emulators-of-applesoft-basic/14364#comment47466_14363&quot;&gt;Thorbjørn Ravn Andersen's comment&lt;/a&gt;, I can confirm that &lt;em&gt;Applesoft BASIC in JavaScript&lt;/em&gt; runs quite happily from a standalone local installation if you do something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;git clone https://github.com/inexorabletash/jsbasic.git&#xA;cd jsbasic&#xA;busybox httpd -f -p 8000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;then open &lt;a href=&quot;http://localhost:8000/&quot; rel=&quot;noreferrer&quot;&gt;http://localhost:8000/&lt;/a&gt; in your browser. Substitute your &lt;a href=&quot;https://gist.github.com/willurd/5720255&quot; rel=&quot;noreferrer&quot;&gt;favourite static server one-liner&lt;/a&gt; — &lt;code&gt;python3 -m http.server 8000&lt;/code&gt; is a solid alternative — for the &lt;code&gt;busybox&lt;/code&gt; call.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2020-04-12T13:12:24.363" LastActivityDate="2020-04-12T13:12:24.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14365" PostTypeId="2" ParentId="14362" CreationDate="2020-04-11T16:10:25.777" Score="8" Body="&lt;p&gt;The only Model F keyboard which can be used on a modern PC with only a passive DIN to PS/2 converter is the 84-key AT keyboard. This keyboard type can be recognised by the 'Caps Lock', 'Num Lock' and 'Scroll Lock' lights in the top right-hand corner, and the keys being separated into three blocks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other keyboards such as the 83-key PC/XT keyboard or the 122-key 3270 PC / terminal keyboards require to be connected through an active protocol converter (such as &quot;&lt;a href=&quot;https://deskthority.net/viewtopic.php?f=7&amp;amp;t=2510&amp;amp;start=&quot; rel=&quot;noreferrer&quot;&gt;Soarer's Converter&lt;/a&gt;&quot;) to be usable on a PC with a PS/2 port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also possible to use at least some 122-key keyboards if you &lt;a href=&quot;http://www.seasip.info/VintagePC/ibm_6110344_cswap.html&quot; rel=&quot;noreferrer&quot;&gt;burn a new microcontroller with AT-compatible firmware&lt;/a&gt; but that's rather more invasive than using a separate converter. (I've seen this process described as 'flashing' the microcontroller, which it isn't -- the 874x is based on EPROM, not flash!)&lt;/p&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="1912" LastEditDate="2020-04-11T20:54:51.653" LastActivityDate="2020-04-11T20:54:51.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14366" PostTypeId="2" ParentId="14044" CreationDate="2020-04-11T19:56:40.247" Score="1" Body="&lt;p&gt;For a monitor to maintain picture size and centering over a range of sync rates, it would need to sense what sync rate it was being fed.  A simple fixed-frequency monitor might feed the deflection signals with a fixed-amplitude signal without regard for frequency or any attempt to monitor the changing current in the deflection coils, but a multi-frequency monitor would need to adjust the drive waveform either in response to either the frequency or the peak coil current.  Once one has sensing for either of those things, very little additional circuitry is needed to make things fail-safe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, a common difficulty in designing a good multi-frequency monitor is maintaining linearity over the full range of sweep frequencies.  Using a microcontroller to determine how drive waveforms need to be adjusted at different frequencies is simpler than trying to do as good a job with analog electronics.  Even if the microcontroller has no on-screen display and simply operates a few digital-to-analog converters to produce control voltages, it can easily incorporate fail-safe shutdown logic at essentially no extra cost.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-04-11T19:56:40.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14367" PostTypeId="2" ParentId="13043" CreationDate="2020-04-11T22:41:09.330" Score="5" Body="&lt;p&gt;Use the following manual for disassembly: &lt;a href=&quot;http://www.minuszerodegrees.net/manuals/Toshiba/Other/Toshiba%20T1950%20T1950CS%20T1950CT%20-%20Maintenance%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.minuszerodegrees.net/manuals/Toshiba/Other/Toshiba%20T1950%20T1950CS%20T1950CT%20-%20Maintenance%20Manual.pdf&lt;/a&gt;&#xA;You have to unscrew about 30 screws. While it is actually difficult to damage something, be careful with the floppy drive ribbon cable. Once you get to the floppy drive (it requires a full disassembly of the laptop, including the LCD panel housing) you have to remove the top cover (it is a citizen standard laptop floppy drive) and pull out the eject button by pushing the small plastic tab. After you pull out the eject button, slide the carriage back and upwards, lift the upper read/write head and take out the carriage. Below this mechanism is the belt you need to replace. I used belts purchased in bulk on ebay. The entire disassembly and assembly takes approximately an hour. The picture below is from the exact same Toshiba laptop that you have.&lt;a href=&quot;https://i.stack.imgur.com/vuxme.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vuxme.jpg&quot; alt=&quot;Disassembled FDD from T1910cs&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17809" LastActivityDate="2020-04-11T22:41:09.330" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14368" PostTypeId="2" ParentId="12783" CreationDate="2020-04-12T01:59:46.913" Score="3" Body="&lt;p&gt;A1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The shape is not as important as it looks. The Spectrum uses a primitive FSK decoding, so the amplitude of the audio signal is not used, nor if it is sinusoidal or squared. The key thing is &quot;zero crossing points&quot;: the signal must be so that its level goes up and down the zero volts level and stay in either area the same time. During the decoding phase, the Spectrum detects edges (from low to high, or high to low) and measure how much time the signal stays in one half or the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, any audio signal that meets this criteria, and has enough amplitude (about 3Vpp) so that the input can drive the small trigger schmitt input at the ULA should work. Ideally, edges should be as sharp as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any decent audio editor. Audacity can help you. I use Sound Forge more, and I've found the touch pencil tool to be extremely useful to perform fine editings to restore audio levels where the volume dropped out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use, when possible, a mono cassette, not a stereo one (the coil and aperture at the magnetic head is a little bigger and will help you to capture a better signal). Of course, demagnetize the reading head and adjust it. The Spectrum +2/+3 has a service mode in which a small utility to calibrate tape heads is available.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2020-04-12T02:06:46.120" LastActivityDate="2020-04-12T02:06:46.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14369" PostTypeId="2" ParentId="14358" CreationDate="2020-04-12T03:01:05.447" Score="12" Body="&lt;p&gt;Both of the existing answers here get at the issues involved (accounts are expected to be able to roam, multiple account holders may call from the same phone number, etc.) but there was another issue at play that complicated the whole situation: Very often, the service you were connecting to &lt;em&gt;didn't know&lt;/em&gt; your phone number — nor did they care.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;A brief digression to more recent developments&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;When ISDN came along, and then DSL after it, you'll notice that authentication largely disappeared from the equation — at least, for a while. Eventually some providers added it back in. (I remember there being a Windows system tray app from Verizon that you had to authenticate with, after connecting to their DSL service.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But for users with original ISDN-level service, typically it was sold by the company that physically provisioned the line (or a company partnered with them), and billed as a hardware/service package bundled with the line it was delivered over. And in those situations, one of the attractive features was that there was indeed no authentication necessary — your modem just auto-dialed the number your provider supplied, and you were online. It worked much the same way that cable modems, today, typically don't require sign-in — the modem's physical connection to the broadband drop is more than adequate to identify you as the recipient of the service, especially since most providers authenticate the &lt;em&gt;hardware&lt;/em&gt; itself.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Prior to that, controlled chaos&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;But like I said, that was one of the big &lt;em&gt;changes&lt;/em&gt; that telco-managed dialup brought. Until that point, dialup service was nearly always provided by a company with no relationship whatsoever to the one that you bought your telephone service from, which is what led to all of the things Jim and sfrey pointed out. For a company with no ties to your telco, making your access to their service dependent on the number you called from just wouldn't have made any sense. Not only is caller ID easy to spoof and unreliable, but your dialup provider wouldn't have wanted to deal with the hassle of updating your account if, say, you moved and changed your phone number. You could still use the exact same service you had before, assuming they provided a toll-free dialup in your new location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ISPs didn't &lt;em&gt;always&lt;/em&gt; authenticate dialup users, by the way. There were situations where they didn't bother — not because they used your phone number or any other means to identify you, but simply because they didn't need to know who you were.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Take AOL, for instance&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;When an AOL user dialed one of their local access numbers and connected to the service, for example, the dialup connections were typically handled by a service officially named &quot;AOLNet&quot;, but which we referred to as &quot;BigDial&quot; (its original codename, when it was under development). BigDial was built and managed by ANS, a backbone network provider that eventually became an AOL subsidiary, but still an independent company which operated the service under contract to AOL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a call came in on one of AOL's access numbers, aside from some minor negotiation with the software itself BigDial didn't do any authentication. Not only was it unnecessary given that the software itself identified the call as an AOL connection, but there was no way for ANS to authenticate AOL users if they'd &lt;em&gt;wanted&lt;/em&gt; to. As the network service provider, they had no access to AOL's subscription database. So, any incoming calls from AOL's software simply had their data routed to the central AOL systems in Reston, and everything from authentication onward was handled &lt;em&gt;there&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;AOL is only one example&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The AOL situation sounds like a special case. And in the sense of it being a software-managed connection rather than a general system-wide internet connectivity service, it was. But a lot of what we think of as more traditional &quot;dialup internet&quot; service was provided the same way: physical connectivity provided by one company, service provided by a completely different one. Authentication was often deferred until the last link in that chain, performed by a company that had no real interest in what phone number you happened to be calling from, and plenty of incentives &lt;em&gt;not&lt;/em&gt; to care.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;How I know&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;For two years from 1997-1998, I was a member of the 9-person BigDial Development team at ANS.&lt;/p&gt;&#xA;" OwnerUserId="11971" LastActivityDate="2020-04-12T03:01:05.447" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14370" PostTypeId="1" AcceptedAnswerId="14371" CreationDate="2020-04-12T10:45:02.570" Score="16" ViewCount="1262" Body="&lt;p&gt;As with most NMOS processors, the NMOS versions of the 6502 (and even&#xA;earlier CMOS versions) do not have a static core. Thus, if you run the&#xA;clock too slowly or stop the clock for too long while doing clock&#xA;stretching, internal latches will lose their data and the 6502 won't&#xA;work properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For how long could you stop the clock on a 6502 without running into&#xA;problems?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-04-16T15:02:05.480" Title="For how long can you safely stop the clock on an NMOS 6502?" Tags="&lt;6502&gt;&lt;dma&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14371" PostTypeId="2" ParentId="14370" CreationDate="2020-04-12T10:45:02.570" Score="24" Body="&lt;p&gt;Official figures vary, and are sometimes wrong. Evidence indicates&#xA;that not exceeding to 5-6 microseconds is fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Jim Sather's book &lt;a href=&quot;https://archive.org/stream/Understanding_the_Apple_II_1983_Quality_Software#page/n0/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Understanding the Apple II&lt;/em&gt;&lt;/a&gt; he has a&#xA;rough transcript of an interview with Steve Wozniak. On&#xA;&lt;a href=&quot;https://archive.org/stream/Understanding_the_Apple_II_1983_Quality_Software#page/n323/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;page I-3&lt;/a&gt; they discuss this exact issue.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;W.&lt;/strong&gt; I'll tell you about a timing problem that will interest you.&#xA;  My first design for the Apple II used a display method in which the&#xA;  6502 was stopped for 40 microseconds. The Synertek data sheet said&#xA;  you could stop it for 40 microseconds, but I was having problems.&#xA;  The 6502s would work for a while, but the Apple would eventually&#xA;  stop working. I always had to have a new 6502 in my pocket in case&#xA;  it happened.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;S.&lt;/strong&gt; You mean the 6502 operated for 25 cycles, then the video&#xA;  display operated for 40 cycles?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;W.&lt;/strong&gt; That's right. When I designed the Apple II, dynamic RAM was&#xA;  just becoming available that could be accessed at two Megahertz.&#xA;  When it did become available, I changed the design of the Apple II&#xA;  to take advantage of it. I've told Synertek about the problem but&#xA;  they haven't changed their specification. New 6502s can be stopped&#xA;  for 40 microseconds, but they deteriorate. They are dynamic devices&#xA;  that store data in internal capacitive elements. As the 6502 wears&#xA;  in, its capacitive elements become less efficient.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;S.&lt;/strong&gt; I'm very glad you bought this up. Descriptions in my book are&#xA;  very vague about how long you could stop the 6502 during DMA. The&#xA;  data sheets are inconsistent. Synertek says 40 microseconds,&#xA;  Rockwell says 10 microseconds, and MOS Technology doesn't say at&#xA;  all.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;W.&lt;/strong&gt; Rockwell changed theirs to 10 microseconds? That's great.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;S.&lt;/strong&gt; Do you think 10 microseconds is a good number?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;W.&lt;/strong&gt; I'd stick with five or six. That's what Microsoft uses on&#xA;  their Z80 Softcard. It refreshes the 6502 every few cycles to keep&#xA;  it active. The 6502 is still used for things like disk I/O, even&#xA;  when the Z80 card is activated.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-04-12T10:45:02.570" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14373" PostTypeId="2" ParentId="14370" CreationDate="2020-04-12T14:07:07.187" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;As with most NMOS processors, the NMOS versions of the 6502 (and even earlier CMOS versions) do not have a static core.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Neither is true. Being static or not is not a feature of NMOS vs. CMOS design, but the way individual chips are designed. In case of the NMOS 6502 it's non static nature is due the way line precharge is used to generate constant values used for certain operations. See &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13357/6659&quot;&gt;this answer&lt;/a&gt; for more details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This never applied to CMOS version, as there a precharge can not be used the same way. After all, switching both ways instant, without running much current, is the primary idea here. All CMOS versions feature full fledged constant value generators active during the whole cycle.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Thus, if you run the clock too slowly or stop the clock for too long while doing clock stretching, internal latches will lose their data and the 6502 won't work properly.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's not about latches, but precharged lines, as the NMOS 6502 design simply spares dedicated latches wherever possible.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For how long could you stop the clock on a 6502 without running into problems?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This depends on internal bus design as well as manufacturing process, its improvement over time - plus a rather wide variety per unit - as the main influence is the quality of the charging resistors (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically each data sheets value for clock duration can be used as guideline (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sKuNl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sKuNl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Taken from the MOS May 1976 data sheet)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the NMOS 6500 the cycle duration is specified as 1 µs minimum and 10 µs maximum. At first sight this could mean that &lt;strong&gt;it can be held for 10 µs&lt;/strong&gt; (*3). But since the critical stretch is the PHI2 high section (Rising edge to falling of PHI2), and no further qualifier is given for that, it may depend on the signal assumed. While the manual refers multiple times to a symmetric clock, the datasheet doesn't give a direct description it- But all NMOS data sheets define PHI1 high and PHI2 high is of the same Length as PHI0 high, with only a small variation allowed. Together this would allow either interpretation, whereas staying on the safe side means the clock is only within spec if &lt;strong&gt;held in either state for a maximum 5 µs&lt;/strong&gt; (half the cycle time). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this is were &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14371/6659&quot;&gt;Woz went wrong&lt;/a&gt; about timing and Synertek's 40 µs. Here the April 1979 data sheet states:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Zzfqp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Zzfqp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sheet doesn't say it can be stopped for 40 µs, but the maximum cycle time to be 40 µs. Like with the MOS manuals Synertek ones assume a symmetric 50/50 duty cycle for the clock. But unlike the MOS data sheet, the Synertek one links PHI1 and PHI2 pulse width directly to PHI0 puls length, thus requiring a symmetric clock. Woz' clock circuit, as used in the Apple II does not hold up to this. Based on these values, the maximum guaranteed duration to stop the clock in either state is 20 µs, not 40 as Woz assumed. There was no reason for Synertek to change the date sheet values, as his application was out of spec.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, Rockwell didn't change the data sheet as implied, but the 10 µs are stated already in the very first Rockwell data sheets (although I say this part is more of a misunderstanding how the interview went).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, the Z80 Softcard does not let the 6502 go for a cycle every few (5-6) cycles, but every M1 cycle, which can be anywhere between four Z80 (two 6502 (*4)) cycles in case of a &lt;code&gt;NOP&lt;/code&gt; or 19 cycles for &lt;code&gt;EX (SP),HL&lt;/code&gt; (*5). The 6502 thus will therefore be stopped at a varying rate between 2 and and 10 cycles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this is technically already outside the spec, it makes &lt;strong&gt;the Z80 card a great empirical evidence that any NMOS 6502 can be held for 9 µs&lt;/strong&gt; (*6), as it did work quite well in millions of Apple II or clones.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Lessons to learn here:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Simple numbers often so not convey the whole information&lt;/li&gt;&#xA;&lt;li&gt;Datasheets are called religious documents for a reason&lt;/li&gt;&#xA;&lt;li&gt;And like any religious script, interpretation can create schism&lt;/li&gt;&#xA;&lt;li&gt;Secondary literature may add to confusion&lt;/li&gt;&#xA;&lt;li&gt;Otherwise good books (as well as conclusions from great engineers) do need to be fact checked.&lt;/li&gt;&#xA;&lt;li&gt;Empiric research has a hard time when trying to overwrite the scripture&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Nicely shown due the fact that the minimum clock period is the same for 1, 2 or 3 MHz parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Interestingly the very first data sheet and manuals don't give a maximum clock duration, only a minimum, which could lead to the false assumption of a static CPU. Likewise Rockwell's papers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Which for all practical use can be done without problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - The Softcard runs at double the 6502 clock speed, so two Z80 cycles will make a 6502 cycle, with them being synchronized at every memory cycle (including refresh), so effective speed varies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - For Z80 specialists: Yes, the &lt;code&gt;EX (SP),IX&lt;/code&gt; takes 23 cycles, but there also 'only' 19 cycles between M1, as its prefix is its own M1 cycle, letting the 6502 go for a cycle. In fakt, the rather weird double prefix instructions with offset like &lt;code&gt;RRC (IX+d)&lt;/code&gt; feature three M1 cycles, thus turning off the 6502 only for a maximum of 6 cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*6 - Followed by a full 1 µs cycle. It effectively creating a a 1:19 (0,5µs:19,5µs) signal form at 100 kHz, which does work reliable.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-04-12T14:07:07.187" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="14374" PostTypeId="1" AcceptedAnswerId="14376" CreationDate="2020-04-12T15:54:08.603" Score="23" ViewCount="6520" Body="&lt;p&gt;While all three clans of languages predated 8-bit computers, they shares features like 1) imperative programming, 2) English-alike keywords, 3) Prompt-Command-Parameters pattern interface. Why was BASIC chosen rather than the other two families, or a Console Command Processor extended from CP/M?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Thompson shell was released in 1971; LOGO (an educational dialect of Lisp) first appeared in 1967, and Lisp in 1958.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;LOGO is quite a parentheses-free Lisp. As a comparison we have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR I = 1 TO 10&#xA;11 GOSUB 20&#xA;12 NEXT I&#xA;13 END&#xA;20 REM SUB WELCOME&#xA;21 PRINT &quot;HELLO RETRO COMPUTING&quot;&#xA;22 RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;LOGO &lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;REPEAT 10 [ WELCOME ]&#xA;&#xA;TO WELCOME &#xA;  PRINT [HELLO RETRO COMPUTING]&#xA;END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Bourne shell(1979)&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;welcome() { &#xA;  echo &quot;HELLO RETRO COMPUTING&quot;&#xA;}&#xA;&#xA;for i in 1 2 3 4 5 6 7 8 9 10&#xA;do welcome&#xA;done&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="17812" LastEditorUserId="17812" LastEditDate="2020-04-13T10:52:48.247" LastActivityDate="2020-04-19T17:02:09.977" Title="Why did 8-bit computers choose BASIC dialects as &quot;de facto&quot; command-line interface, instead of contemporary Shell/Lisp dialects?" Tags="&lt;basic&gt;&lt;8-bit-microcomputers&gt;&lt;shell&gt;&lt;logo-language&gt;" AnswerCount="9" CommentCount="18" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14375" PostTypeId="1" CreationDate="2020-04-12T15:57:55.383" Score="6" ViewCount="514" Body="&lt;p&gt;I'm looking for a UI library that offers a similar &amp;quot;experience&amp;quot; to that provided by Microsoft's infamous, Visual Basic for DOS RAD environment.&lt;/p&gt;&#xA;&lt;p&gt;I mean, it's such a compelling environment, and there's really nothing &amp;quot;like&amp;quot; it. Anything even remotely similar would be in the Borland or Watcom C++ family of languages. I mean, does such a library even exist to recreate the &amp;quot;look and feel&amp;quot; of VBDOS?&lt;/p&gt;&#xA;&lt;p&gt;Sure there's QB64, but that's about replicating the look and feel of QUICK basic, not VISUAL basic.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tzjrh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tzjrh.png&quot; alt=&quot;[&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Anyway, thanks for your time and consideration!&lt;/p&gt;&#xA;" OwnerUserId="17813" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2021-05-02T23:03:10.120" Title="C/C++ UI library similar to Visual Basic for DOS" Tags="&lt;ms-dos&gt;&lt;c&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14376" PostTypeId="2" ParentId="14374" CreationDate="2020-04-12T16:11:00.397" Score="16" Body="&lt;p&gt;If we're not talking about BASIC as a programming language, but the operational commands that surround it, then the answer is that they surely reimplemented the command structure of existing timesharing systems that offered BASIC, in particular the 1964 &lt;a href=&quot;https://en.wikipedia.org/wiki/Dartmouth_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Dartmouth Time Sharing System&lt;/a&gt; (the progenitor of BASIC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are nits to pick, however. The &quot;command language&quot; (OLD, NEW, RUN, LIST, etc) is not actually BASIC; it's a separate thing in DTSS.  But many other systems that implemented a BASIC subsystem chose to implement the same command language, for familiarity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One feature, presumably attractive to beginner users (the 'B' in 'BASIC') is the seamlessness between BASIC and the mechanisms of editing a program.  For example, there is no overt &quot;edit&quot; program. Instead, command lines starting with a line number edit the current program source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another point that seems relevant is that some number of users of &quot;home computers&quot; would have seen timesharing BASICs, and familiarity is a good thing.  Indeed, people tend to expect certain commands (OLD, NEW, etc.) to be part of BASIC, even if commands and languages are actually different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And lastly, BASICs were often expected to reside in ROM.  Adding complex command languages would have expanded the size needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or to summarize it all: if you're reimplementing something that looks like an existing system (i,e,, timesharing BASIC), why stop halfway?&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-04-12T16:16:07.007" LastActivityDate="2020-04-12T16:16:07.007" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14377" PostTypeId="2" ParentId="14374" CreationDate="2020-04-12T16:34:05.250" Score="16" Body="&lt;p&gt;This was more of a marketing question than a technical one. The historical fact is that most vendors of 8-bit personal computers chose to include BASIC. The simple answer as to why they made this choice is pretty obvious - It was the &lt;em&gt;standard&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, slightly restating the question posed, one could ask &quot;Why was BASIC the standard?&quot; It was a standard in the sense that all the successful early entries to the marketplace included it. So, if a vendor wanted to compete in this market, they needed to offer feature parity with the competition first, then try to build from there. And the inclusion of BASIC was widely regarded by consumers as part of the feature set from the earliest personal computer products (Note 1).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Altair 8800 (1974): Microsoft BASIC available as an add-on.&lt;/li&gt;&#xA;&lt;li&gt;Apple ][ (1977): Built-in BASIC, followed quickly by an enhanced version also from Microsoft.&lt;/li&gt;&#xA;&lt;li&gt;Commodore Pet (1977): Built-in Microsoft BASIC&lt;/li&gt;&#xA;&lt;li&gt;Tandy TRS-80 (1977): Built-in Microsoft BASIC&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's pretty easy to see a trend. Not only was inclusion of &lt;em&gt;a BASIC dialect&lt;/em&gt; rapidly becoming standardized, but a familiar vendor was already dominating the market for licensed 3rd party BASICs. Indeed, Microsoft &quot;cut its teeth&quot; by dominating the market for BASIC more than a decade before the emergence of the &lt;em&gt;&quot;Wintel&quot; standard&lt;/em&gt;. And MS-DOS was no slouch in terms of being a de facto standard OS in the interim, as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question also hints at a skepticism about the merits of BASIC as a primary interface, vis-a-vis the other contemporary options. But not all technical merits matter in the end (BASIC had its pluses and its minuses), and &lt;em&gt;markets are generally the deciding mechanism for what scales&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note 1:&lt;/em&gt; The question appears to be about 8-bit personal computers, not earlier mini-computers or other devices that may have contained a microprocessor and which support a BASIC dialect.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-04-13T13:46:48.560" LastActivityDate="2020-04-13T13:46:48.560" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14378" PostTypeId="2" ParentId="14374" CreationDate="2020-04-12T16:38:10.583" Score="46" Body="&lt;p&gt;People nowadays think of BASIC as something lesser and generally tied to puny microcomputers, but BASIC was the language of choice for many scientific, engineering and business computers in the 1970s. It had a strong foothold with mini computers, years before the microprocessors made its debut on the desktop. Think&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rocky_Mountain_BASIC&quot; rel=&quot;noreferrer&quot;&gt;HP (Instrument) BASIC&lt;/a&gt; for all their calculators, all the way to&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/HP_Time-Shared_BASIC&quot; rel=&quot;noreferrer&quot;&gt;HP- Timeshare BASIC&lt;/a&gt; for their multi-user systems&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC-PLUS&quot; rel=&quot;noreferrer&quot;&gt;BASIC Plus&lt;/a&gt; for timeshared DEC PDP-11 systems (&lt;a href=&quot;https://en.wikipedia.org/wiki/RSTS/E&quot; rel=&quot;noreferrer&quot;&gt;RSTS/E&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Wang_Laboratories#Early_computer_models&quot; rel=&quot;noreferrer&quot;&gt;WANG BASIC&lt;/a&gt; for their whole range of business machines&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_5100#Programming_languages&quot; rel=&quot;noreferrer&quot;&gt;IBM 5100 BASIC&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Olivetti_P6060&quot; rel=&quot;noreferrer&quot;&gt;Olivetti 6060&lt;/a&gt; BASIC&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Nixdorf_Computer&quot; rel=&quot;noreferrer&quot;&gt;Nixdorf&lt;/a&gt; BASIC&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This list can be extended to basically all systems of the 1970s - all the way to IBM mainframes - and all of them predate 8-bit systems with their use of BASIC as main/single front end. In fact, BASIC &lt;em&gt;was&lt;/em&gt; originally  developed as front end for a multi-user system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was the environment 8-bit computers were placed in (or were they tried to fit/grow up into. Here everything small, with an intention to be user programmable, came either by default with BASIC, or could be ordered with it. &lt;strong&gt;BASIC was the language of choice for low-end and mid-range systems in the 1970s&lt;/strong&gt;. To compete, BASIC was a must. Notable as well, next to all developers of 8-bit systems microcomputers were at some point exposed to them, seeing them as great tools to be used.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Equally important, 8-bit micros did start out extremely small. BASIC could get implemented with as little as 4 KiB of ROM and 4 KiB of RAM. All other solutions would need way more RAM/ROM to run and often random-access mass storage ((floppy) disk) as well. And while professional 8-bit systems soon grew to have 64 KiB and mass storage, this repeated with home computers again. The market was quite cost sensitive and RAM size was the easiest way to cut the price.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Last but not least, BASIC was interactive build about an embedded command line mode, so adding a few commands for system management (if at all) was a lesser task than writing a whole set of interacting operation system layers, shells and applications.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This command line execution is also what makes BASIC in all practical sense functional indistinguishable from any (other) shell language. Each and ever Command could be executed from the BASIC command line without being first turned into a program. Heck, This is exactly the way Apple DOS batch files worked. Each line read from the file was executed direct by the interpreter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The differences between some Unix shell or BASIC as command interface is just syntax and names - nothing more than icing on the cake.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;We're living today on an extremely high stack of layered development that simply hasn't existed back then - not even dreamt about.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;P.S.:&lt;/strong&gt; As command line the example would go like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FOR I = 1 TO 10 : PRINT &quot;HELLO RETRO COMPUTING&quot; : NEXT I&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-04-13T23:53:21.197" LastActivityDate="2020-04-13T23:53:21.197" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14380" PostTypeId="2" ParentId="14375" CreationDate="2020-04-12T17:04:41.417" Score="1" Body="&lt;p&gt;The combination of functions to move the cursor, select text color, and read a key made most parts of a UI sufficiently easy to design and implement that there was far less need for automated tools than when designing a windowed application.  About the only thing missing would have been a good function to accept an input line with cursor editing, but there were plenty of those around &lt;em&gt;and they were generally agnostic to the design of the application using them&lt;/em&gt;, so a programmer who had a line-input library he liked could simply use it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One might use a screen-layout-design program to do mockups of a screen, though a text editor could also suffice if one didn't need color.  Once one identified the positions of prompts input fields, it wasn't that hard to write code to handle it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An essential feature of text-mode user interfaces compared with windowed ones is that operational flows were much more linear.  If one didn't mind using &quot;goto&quot;, a typical user interface would essentially be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;GetField1:&#xA;  ...&#xA;GetField2:&#xA;  ExitKey := ReadInputLine( { parameters for a particular input operation } );&#xA;  If { exit key indicates premature exit } Then Goto Exit;&#xA;  If { exit key indicates go back to previous field } then Goto GetField1;&#xA;GetField3:&#xA;  ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;etc.  While windowed applications needed to handle many more kinds of things that could happen while editing a text field, text-mode apps without mouse support generally didn't.  Further, if one had a working app without mouse support, it may have been practical to tweak ReadInputLine to add mouse support with relatively minimal change to the surrounding application(*), whereas using an application framework with mouse support built in would have required major rewrites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(*) If an application was designed so that pushing tab would cycle through fields in wrapping fashion, a &lt;code&gt;ReadInputLine&lt;/code&gt; function could respond to a mouse click by latching the coordinates of an unacknowledged mouse click and the identity of the field that was active when it occurred.  It could then, while an unacknowledged mouse click remained pending, check to see whether it was within the current input field and, if not, hit tab and notice if the field that became active was the one that had been active when the mouse was clicked.  If so, call a user &quot;Unacknowledged mouse click here&quot; function with the coordinates of the click, and clear the pending click, leaving the field selection back where it started, without the underlying application having to know or care about what was happening.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-04-12T17:04:41.417" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14381" PostTypeId="2" ParentId="14375" CreationDate="2020-04-12T19:39:31.680" Score="0" Body="&lt;p&gt;I have not used it, but one option appears to be TCL/TK for DOS.  It is available at &lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=3&amp;amp;ved=2ahUKEwjI3MKCzuPoAhVqmeAKHTnED_YQFjACegQIAxAB&amp;amp;url=ftp%3A%2F%2Fftp.tcl.tk%2Fpub%2Ftcl%2Fmirror%2Fftp.procplace.com%2Falcatel%2Fdistrib%2Fmstcl73.README&amp;amp;usg=AOvVaw2nLrFFlM6vWftbBdojybJI&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=3&amp;amp;ved=2ahUKEwjI3MKCzuPoAhVqmeAKHTnED_YQFjACegQIAxAB&amp;amp;url=ftp%3A%2F%2Fftp.tcl.tk%2Fpub%2Ftcl%2Fmirror%2Fftp.procplace.com%2Falcatel%2Fdistrib%2Fmstcl73.README&amp;amp;usg=AOvVaw2nLrFFlM6vWftbBdojybJI&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Gotta love machine-generated URLs!  Sorry about the Google pre-linkage, but I can't get StackExchange to recognize an FTP link.)  This could be great or it could be unusable.  I know Tcl/Tk is a pretty powerful cross-platform development system.  How good the overall development environment is ranges from writing text files to full GUI front end.  I would suspect this is closer to the former.  Sorry for not checking it out myself, but I do think Tcl/Tk does provide a decent UI library.  It's not that popular nowadays, but then neither is DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tk is the actual GUI-generation &quot;toolkit&quot;.  Tcl is the &quot;Tool Command Language&quot;.  There are also other backends to drive Tk; it is not solely dependent on Tcl.  Also see:&#xA;&lt;a href=&quot;https://www.tcl.tk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.tcl.tk/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2020-04-12T19:46:51.120" LastActivityDate="2020-04-12T19:46:51.120" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14382" PostTypeId="2" ParentId="14374" CreationDate="2020-04-12T19:49:09.973" Score="5" Body="&lt;p&gt;I see 3 main reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The 8-bit computers were targetting amateur computer enthusiasts, and a lot of beginner children. BASIC were specific to each machine to allow easy access to keyboard, sound and graphics, with simple syntax, global variables, not too many concepts like functions, scopes, etc. to avoid losing the users. Imagine having to count the parentheses with a Lisp system. That probably wouldn't have been so popular&lt;/li&gt;&#xA;&lt;li&gt;The way most BASIC language store their tokens allow to minimize memory footprint. Each keyword can take just 1 byte. Even &lt;code&gt;PRINT&lt;/code&gt; or &lt;code&gt;WHILE&lt;/code&gt; take 1 byte in most BASICs. It means that you can write big programs without hitting the 16 or 48k memory barrier. &lt;/li&gt;&#xA;&lt;li&gt;The BASIC line numbers make it easy to report an error in a program. 8-bit machines didn't have any editor to go to line 1245... It also allowed dirty &lt;code&gt;GOTO&lt;/code&gt; spaghetti code instead of clean procedures, perfect for hours of debugging fun :)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Not saying both points above couldn't be resolved with Lisp (which has interpreted versions beside compiled ones), but this language is meant for bigger and more powerful machines, and probably has a bigger ROM/RAM/stack footprint. So it would have needed a major rewrite anyway. While BASIC syntax is closer to other languages like C,  Fortran and Pascal. The language had to be rewritten in assembly for each ROM and each machine anyway, so why imposing the peculiar Lisp syntax to beginners ?&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-04-12T19:49:09.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14384" PostTypeId="2" ParentId="14374" CreationDate="2020-04-12T22:23:07.660" Score="4" Body="&lt;p&gt;Unlike many languages which require the use of a text editor separate from the language implementation, a BASIC interpreter includes a text editor built in.  Further, someone with e.g. a VIC-20, a television set, and the manual would have everything needed to make the computer do something (e.g. play the Tank-versus-UFO game printed in the manual).  Obviously having a tape drive and a blank tape would make the system much more useful, but those merely augmented the existing functionality of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't think of much else that could have been included in ROM that could have allowed one to do anywhere near as much with a &quot;bare&quot; system as one could do with a computer that had a built-in BASIC interpreter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based upon my limited understanding of FORTH or LISP, an important advantage that BASIC has over it is that unless one deliberately seeks to do so, one would be unlikely to produce a BASIC program which could not be recreated by recording the output of the LIST command and then typing in the program in question.  Languages which treat programs as data that can be manipulated can do some very powerful things, sometimes in rather limited memory, but an interpreter may have no clue how a program was created in memory or what would need to be done to recreate it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To illusrate the point using a REPL-based language I actually do know, in a Javascript console, if one does something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;var a=[[1],[1]];&#xA;a[2] = a[0];&#xA;a[3] = a[0];&#xA;a[4] = a[1];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;An attempt to serialize &lt;code&gt;a&lt;/code&gt; would list its contents as &lt;code&gt;[[1],[1],[1],[1],[1]]&lt;/code&gt;, but if one were to say, e.g. &lt;code&gt;a[0][0] = 2;&lt;/code&gt; on the original array, the apparent contents of the array would be &lt;code&gt;[[2],[1],[2],[2],[1]]&lt;/code&gt;, while doing it on a reconstituted version of the serialized array would yield &lt;code&gt;[[2],[1],[1],[1],[1]]&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order for a REPL-based language to be suitable for use in a late 1970s personal computer, there would need to be a standard means of converting a program in memory to a serialized from.  BASIC has such a means, but other REPL-based languages don't.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2020-04-19T17:02:09.977" LastActivityDate="2020-04-19T17:02:09.977" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14385" PostTypeId="1" CreationDate="2020-04-12T22:48:25.450" Score="2" ViewCount="723" Body="&lt;p&gt;I have recently been getting into older apps from when I was a kid; one of these was this strange DOS shipping(?) database GUI that ran on at least a 286, but looked like Windows 3.1; however when you clicked on the window controls, they just changed color. But the window operations menu from what I recall worked okay.&lt;/p&gt;&#xA;&lt;p&gt;This is probably a long shot. I would provide screenshots, but alas—I have no further details available, other than this.&lt;/p&gt;&#xA;&lt;p&gt;I vaguely remember this GUI, and would appreciate any assistance seeing if I can locate it again!&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="17813" LastEditorUserId="15334" LastEditDate="2020-11-07T19:05:01.763" LastActivityDate="2020-11-07T19:05:01.763" Title="Looking for a strange DOS database GUI that ran on 286+" Tags="&lt;ms-dos&gt;&lt;identify-this-software&gt;" AnswerCount="1" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14386" PostTypeId="2" ParentId="14385" CreationDate="2020-04-13T01:20:59.430" Score="3" Body="&lt;p&gt;Could be Borland Reflex? Definitely had a GUI interface.&lt;/p&gt;&#xA;" OwnerUserId="632" LastActivityDate="2020-04-13T01:20:59.430" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14387" PostTypeId="2" ParentId="4861" CreationDate="2020-04-13T02:11:09.113" Score="0" Body="&lt;p&gt;I once had a 486SX/25 laptop from Toshiba that used a clip-on trackball mouse that clipped onto the lower right-hand side of the machine right near the arrow keys. It fit really nicely into your right hand over there and was great for playing Tyrian with, though the sluggish black-and-white LCD screen did make things a bit harder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm pretty sure it used a PS/2 interface, given that clipping on the mouse meant sliding a port cover over the PS/2 ports and the five pins of the mouse's connector matches up nicely with the 6 pins of the PS/2 port, where one goes unused for either keyboard or mouse, depending on what the plug is for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure exactly when the laptop was made (and I can't check as I no longer have it), but I do remember that the original floppy disks for it only included DOS, without any version of Windows, so probably before Windows 3.x took off in popularity. It came with Win95 when I bought it second-hand, but it was so slow it was soon wiped for something more responsive (DOS 6.22 and Win3.11).&lt;/p&gt;&#xA;" OwnerUserId="17800" LastActivityDate="2020-04-13T02:11:09.113" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14388" PostTypeId="1" CreationDate="2020-04-13T06:40:19.667" Score="8" ViewCount="611" Body="&lt;p&gt;In 1976 Commodore as a company had been running for more than twenty&#xA;years and had extensive experience with designining and selling&#xA;consumer electronics products: they were one of the top-selling&#xA;electronic calculator manufacturers of the early 1970s. The team put&#xA;together to design the PET also had at least one member, Chuck Peddle,&#xA;with extensive experience in computer design and engineering. (Peddle&#xA;had worked on the 6502 CPU itself, and also designed the KIM-1.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore seems to have started design of the PET in the summer of&#xA;1976,¹ and they had a prototype working well enough to demonstrate to&#xA;the public at the Winter CES in January 1977.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet Commodore didn't ship the PET 2001 to consumers until December&#xA;1977,² eleven months after the prototype and about eighteen months&#xA;after design had started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By contrast, Tandy had engineers with less experience and budget and&#xA;didn't start design until December 1976, yet Tandy was shipping the&#xA;TRS-80 by Septemember 1977.³&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what happened to delay Commodore so much in getting the PET 2001&#xA;into volume manufacturing, when Tandy managed to do the same with a&#xA;similar system in only about half the time?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹&lt;sub&gt;&quot;Jack Tramiel gave Chuck Peddle six months to have the computer&#xA;  ready for the January 1977 [CES].&quot; —&lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_PET#Release&quot; rel=&quot;noreferrer&quot;&gt;[Wikipedia]&lt;/a&gt;&lt;/sub&gt;&lt;br/&gt;&#xA;²&lt;sub&gt;They did ship a hundred review units in October 1977.&lt;/sub&gt;&lt;br/&gt;&#xA;³&lt;sub&gt;The initial quanities were low, but that seems to have been due&#xA;  not to inability to manufacture more computers, but due to incorrect&#xA;  sales forecasting resulting in an initial manufacturing run of only&#xA;  3000 units.&lt;/sub&gt;&lt;br/&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-04-13T14:11:01.803" Title="Why did the Commodore PET 2001 take so long to ship?" Tags="&lt;commodore&gt;&lt;commodore-pet&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14389" PostTypeId="1" AcceptedAnswerId="14390" CreationDate="2020-04-13T08:34:05.320" Score="2" ViewCount="76" Body="&lt;p&gt;The original Apple DOS 3.3 was &lt;a href=&quot;https://archive.org/stream/Beneath_Apple_DOS_OCR#page/n9/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;released on 1980-07-25&lt;/a&gt;, and there seem to have been at least &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_DOS#Decline&quot; rel=&quot;nofollow noreferrer&quot;&gt;two more updates&lt;/a&gt; after that that did not bump the version number:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Two more versions of Apple DOS, both still called DOS 3.3 but with some bug fixes and better support for the new Apple IIe model, were released in early and mid-1983.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://archive.org/search.php?query=dos+3.3+system+master&quot; rel=&quot;nofollow noreferrer&quot;&gt;search for &quot;DOS 3.3 system master&quot; on &lt;code&gt;archive.org&lt;/code&gt;&lt;/a&gt; turns up a lot of different images, many with obvious modifications from the original, such as additional programs. Perhaps they also have less obvious modifications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for images of the original Apple DOS 3.3 System Master diskettes as distributed by Apple, with details about exactly which version each one is, and ideally with some effort made to confirm the provenance of the image. Where might I find such images? &lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-04-13T10:05:33.417" Title="Where can I find original Apple DOS 3.3 System Master diskette images?" Tags="&lt;apple-dos&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14390" PostTypeId="2" ParentId="14389" CreationDate="2020-04-13T09:59:44.780" Score="2" Body="&lt;p&gt;A good start is always the collection of Apple related mirrors at &lt;a href=&quot;https://mirrors.apple2.org.za/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://mirrors.apple2.org.za/&lt;/a&gt;. Quite reliable and fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They include a copy of &lt;a href=&quot;https://ftp.apple.asimov.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ftp.apple.asimov.net&lt;/a&gt; (slow), were the &lt;a href=&quot;https://mirrors.apple2.org.za/ftp.apple.asimov.net/images/masters/Apple%20DOS%203.3%20August%201980.dsk&quot; rel=&quot;nofollow noreferrer&quot;&gt;1980 Master&lt;/a&gt; can be found at &lt;a href=&quot;https://mirrors.apple2.org.za/ftp.apple.asimov.net/images/masters/&quot; rel=&quot;nofollow noreferrer&quot;&gt;/images/masters/&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple.Asimov.Net is the semi official collection of all things Apple historical. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-04-13T10:05:33.417" LastActivityDate="2020-04-13T10:05:33.417" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14391" PostTypeId="2" ParentId="14388" CreationDate="2020-04-13T11:19:15.543" Score="10" Body="&lt;p&gt;This was the standard fare for Commodore's computer division under Jack Tramiel. Tramiel was famous for setting very aggressive timelines for engineering to deliver &lt;strong&gt;prototype&lt;/strong&gt; machines, usually to be exhibited by Commodore at CES. Based on the level of interest and/or orders the product received at the show, Tramiel would then generate a new go-to-market timeline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bringing a consumer hardware product from prototype to volume production is no trivial matter. It is not that unusual for such a process to take as long or longer than the hardware prototyping effort. In the case of Commodore, where Tramiel also demanded a vertically integrated approach, there were even more potential pitfalls - starting with tooling the chip factory and refining chip production to ensure economical yields. Tandy, not owning their own foundry, would default to simply designing around off-the-shelf parts they knew they could easily procure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there is the rest of the factory tooling for all the non-chip components. And many important parallel activities related to procurement, documentation, regulatory approvals, packaging, export, distribution, sales &amp;amp; marketing, etc. Anyone who has actually been involved with volume manufacturing will be familiar with the lengthy set of tasks involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The good news is that Commodore improved greatly on their subsequent iterations. The VIC-20 was about a year from prototype to production, and the C-64 only took 8 months. Interesting, the VIC-20 (initially called &lt;em&gt;MicroPET&lt;/em&gt;) prototype had been cobbled together at home by engineer Robert Yannes in his spare time. At least the C-64 was an official project and somewhat properly resourced. This likely resulted in a more complete prototype and easier/quicker transition to production. Also, Commodore was becoming a more successful company by that time, which naturally makes the resource acquisition easier.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-04-13T14:11:01.803" LastActivityDate="2020-04-13T14:11:01.803" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14392" PostTypeId="1" AcceptedAnswerId="14393" CreationDate="2020-04-13T11:50:59.830" Score="1" ViewCount="173" Body="&lt;p&gt;This is a follow-up from my previous question - &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14358/when-connecting-to-the-internet-via-dial-up-why-did-isps-require-a-username-pas&quot;&gt;When connecting to the Internet via Dial-Up, why did ISPs require a username/password to authenticate the session?&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the above question, we established that ISPs offering dial-up services to customers typically authenticated sessions via a username/password to allow customers to dial-in from separate locations. Taking the above into account, I'm now interested in how an ISP would primarily charge customers. Was this on a rolling month-by-month basis, or was a contract typically used as is the case today so that a customer would be tied in for a certain period of time? How much would ISPs typically charge for a dial-up service?&lt;/p&gt;&#xA;" OwnerUserId="15043" LastActivityDate="2020-04-14T08:28:16.637" Title="How were customers typically charged when purchasing Dial-Up Internet services from an ISP?" Tags="&lt;internet&gt;" AnswerCount="3" CommentCount="1" ClosedDate="2020-04-14T09:21:50.503" ContentLicense="CC BY-SA 4.0" />
  <row Id="14393" PostTypeId="2" ParentId="14392" CreationDate="2020-04-13T12:34:31.427" Score="2" Body="&lt;p&gt;In the UK with dial-up ISPs in the mid-to-late 90s such as WHSmithnet and Freeserve, you typically had a choice of a flat rate per month with unlimited access, pay-as-you-go/pay-as-you-surf where you were charged only for the call, and something in the middle where you paid a subsidised rate per month to have a reduced per-minute cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see a description of the WHSmithnet plans as of 2002 in the Internet Archive here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://web.archive.org/web/20020202001840/http://www.whsmith.co.uk/whs/Go.ASP?MENU=WHSmithnet&amp;amp;pagedef=/todaynet/home/show_ispreg.htm&amp;amp;data=isp_reg&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://web.archive.org/web/20020202001840/http://www.whsmith.co.uk/whs/Go.ASP?MENU=WHSmithnet&amp;amp;pagedef=/todaynet/home/show_ispreg.htm&amp;amp;data=isp_reg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Flat Rate: £12.99 per month (inc. VAT). No call charges 24 hours a day, 7 days a week. This option requires a BT phone line.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Off Peak: £9.99 per month (inc. VAT). Access to the Internet between 4pm and 8am weekdays and anytime at the weekend is included. Calls charged at 2p per minute at all other times. This option requires a BT phone line.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;1p per minute: £2.99 per month (inc. VAT). You can access the Internet at anytime for just 1p per minute. This option requires a BT phone line.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Pay as you Surf: No monthly fee. No minimum term. Calls charged at local rate at all times.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm currently looking up the typical price of a local call in the UK in 2002, but I suspect it was something like 5p-35p depending on provider and location. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following shows the expected (or at least advertised) use cases for these plans:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Which Internet connection option best suits you? Use the suggestions below to help you choose.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;-&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In my household:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We use the Internet for more than 12 hours per month&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We may increase the amount we use the Internet&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We may use the Internet during the day or at peak periods&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We want to be able to budget for our Internet use&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;= Flat Rate: £12.99 per month, no call charges 24 hours a day, 7 days a week.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;-&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In my household:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We use the Internet more than 11 hours per month&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We use the Internet mostly after school, in the evenings and at weekends&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We want to be able to budget for our Internet use&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;= Off Peak: £9.99 per month, Access to the Internet between 4pm and 8am weekdays and anytime at the weekend is included. Calls charged at 2p per minute at all other times.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;-&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In my household:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We use the Internet for more than 6 hours per month&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We want low cost Internet access anytime of the day&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;= 1p per minute: £2.99 per month (inc. VAT). You can access the Internet at anytime for just 1p per minute.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;-&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In my household:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We use the Internet occasionally&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We prefer not to be committed&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;We want access to the Internet from anywhere&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;= Pay as you Surf: No monthly fee. No minimum term. Calls charged at local rate at all times.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;More information can be found in the WHSmithnet FAQ:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://web.archive.org/web/20020215234533/http://www.whsmith.co.uk/WHS/Go.ASP?MENU=WHSmithnet&amp;amp;pagedef=/todaynet/home/show_ispreg.htm&amp;amp;data=isp_faqs&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://web.archive.org/web/20020215234533/http://www.whsmith.co.uk/WHS/Go.ASP?MENU=WHSmithnet&amp;amp;pagedef=/todaynet/home/show_ispreg.htm&amp;amp;data=isp_faqs&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17826" LastActivityDate="2020-04-13T12:34:31.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14394" PostTypeId="1" CreationDate="2020-04-13T13:16:08.000" Score="4" ViewCount="461" Body="&lt;p&gt;I have what seems to be at least several year's worth of PC Magazine from the 1990s. Before I toss these in recycling I was wondering if someone, somewhere, would find any use for these. I doubt a local library would be interested, but perhaps for some kind of vintage collection or scholarship purposes?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example the Feb 20, 1996, cover headline was:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Pentium or Pro? PC Labs Tests 46 of the Newest And Fastest Desktop Systems ... 150 MHz ... 166 MHz ... 200 MHz...&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if these issues would be hard to come by but I doubt they are especially rare. However this was almost certainly before they could have been distributed digitally and I don't know if they were ever digitized later. They are physically in decent condition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note - this is not a sales pitch. I'm genuinely looking to promote &quot;reuse&quot; before &quot;recycle&quot;.&lt;/p&gt;&#xA;" OwnerUserId="11795" LastActivityDate="2020-04-14T09:08:38.117" Title="Is there any use for PC Magazine issues from the 1990s?" Tags="&lt;magazine&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14395" PostTypeId="2" ParentId="14394" CreationDate="2020-04-13T13:36:13.920" Score="5" Body="&lt;p&gt;The issues you have are most likely neither rare nor valuable. But they &lt;strong&gt;could be&lt;/strong&gt;, given the right collector. A simple approach is to offer the lot in an eBay auction starting at $1. Most of these auctions find some takers. I wouldn't expect much, and would consider it as a convenient way of making a donation to a collector or archivist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/about/&quot; rel=&quot;noreferrer&quot;&gt;The Internet Archive&lt;/a&gt; is an online Library that specializes in archiving these types of magazines. If you do a search there, then you might find the exact issues already exist, having most likely been scanned in by an amateur, volunteer, archivist. So, if your attitude is that you'd like to see the information preserved for future generations, then that's why this Library exists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, best outcome, is someone takes it off your hands at no cost to you, and then does the work to scan and preserve them online for posterity.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-04-13T13:36:13.920" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14396" PostTypeId="1" AcceptedAnswerId="14398" CreationDate="2020-04-13T14:32:34.043" Score="12" ViewCount="3019" Body="&lt;p&gt;I came across this set of connectors. All are labelled 3COM and go from some type of plug that I can't identify to an ethernet end. Two of them have female RJ15 sockets, one has a male RJ15 plug.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Presumably / obviously these were to interface from something to ethernet, but I don't have any other 3COM hardware so I'm not sure what.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think these are approx. 20 years old, perhaps &gt; 2002.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GFRIO.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GFRIO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HHI3F.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HHI3F.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11795" LastEditorUserId="3290" LastEditDate="2020-08-05T09:01:51.343" LastActivityDate="2020-08-05T09:01:51.343" Title="What are these 3COM connectors for?" Tags="&lt;identify-this-computer&gt;&lt;connector&gt;&lt;pcmcia&gt;&lt;ethernet&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14397" PostTypeId="1" AcceptedAnswerId="14407" CreationDate="2020-04-13T14:37:29.670" Score="7" ViewCount="707" Body="&lt;p&gt;I've been looking at the .z80 file format for Sinclair ZX Spectrum games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most docs discussing the format include pretty much this wording:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    Offset  Length  Description&#xA;    ---------------------------&#xA;    11      1       Refresh register (Bit 7 is not significant!)&#xA;    12      1       Bit 0  : Bit 7 of the R-register&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm assuming &quot;Refresh register&quot; and &quot;R-register&quot; refer to the same thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5917&quot;&gt;only the low 7 bits of the R register increment&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But is the 8th bit actually used? Is its behaviour undocumented or can it only be altered by loading it with a value from the accumulator that has it set, which is used for some kind of software tricks?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume a sequence of events like this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Originally people thought R bit 7 was never used and always 0 and the format documented that offset 11 bit 7 should be ignored.&lt;/li&gt;&#xA;&lt;li&gt;Some emulators put junk at offset 11 bit 7.&lt;/li&gt;&#xA;&lt;li&gt;It was discovered that some software did use R bit 7 after all.&lt;/li&gt;&#xA;&lt;li&gt;A decision was made that just changing the documentation to make offset 12 bit 7 be meaningful would cause problems.&lt;/li&gt;&#xA;&lt;li&gt;The format was extended to include a new field that specifically held the contents of R bit 7 at offset 12 bit 0.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;But I can't find anything saying there was ever a .z80 spec without this meaning for offset 12 bit 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an even more convoluted reason? Some kind of compatibility with older snapshot file formats?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do some emulators actually use offset 11 bit 7? I have at least one Manic Miner .z80 that has offset 11 bit 7 set but offset 12 bit 0 unset.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-01T03:51:50.260" LastActivityDate="2020-05-01T03:51:50.260" Title="Why does the .z80 emulator-snapshot format have separate fields for the 8-bit refresh register and bit 7 of R?" Tags="&lt;z80&gt;&lt;zx-spectrum&gt;&lt;emulation&gt;&lt;file-format&gt;&lt;tape-image&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14398" PostTypeId="2" ParentId="14396" CreationDate="2020-04-13T14:37:37.147" Score="36" Body="&lt;p&gt;Those are PCMCIA adapters.  With laptops, a single PCMCIA card was narrower than Ethernet (or phone lines).  You could get a 2 card thing (but I don't recall any from 3COM)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aGBZv.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aGBZv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;https://en.wikipedia.org/wiki/PC_Card#/media/File:Pcmcia-type-ii-and-iii.jpg&quot; rel=&quot;noreferrer&quot;&gt;Source&lt;/a&gt;) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;shows an example of 2 card Xircom (which had RJ-45 direct input but meant you couldn't use any other PCMCIA cards) and the narrower 3COM with the port your connector would plug into.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that you could use 2 of them to make your laptop into a really really terrible router, but you also could use one of them plus some other PCMCIA card.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And from my experience, 3COM used the same physical interface between card and adapters, but not all cards worked with all adapters which was super fun if someone mixed them up ... though that could have also been a driver or bent pin issue)&lt;/p&gt;&#xA;" OwnerUserId="11797" LastEditorUserId="11795" LastEditDate="2020-04-14T11:27:44.577" LastActivityDate="2020-04-14T11:27:44.577" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14399" PostTypeId="2" ParentId="14392" CreationDate="2020-04-13T14:48:55.913" Score="1" Body="&lt;p&gt;I co-founded an ISP in Vancouver, Canada in 1995. At that time the vast majority of services charged month-by-month. As I recall, up to the mid-90s most services gave you a fixed number of hours per day or month that you could be connected, but some time around then &quot;unlimited access&quot; started to become a thing and soon enough most (but not all) ISPs were doing that. This was also around the time it started to become fashionable to lose money as an Internet startup. :-)&lt;/p&gt;&#xA;" OwnerUserId="7208" LastActivityDate="2020-04-13T14:48:55.913" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14400" PostTypeId="2" ParentId="14396" CreationDate="2020-04-13T14:51:25.427" Score="16" Body="&lt;p&gt;These were designed for 3COM Megahertz networking PCMCIA cards (aka PC cards). These were add-on cards for laptops that didn't have internal network adapters. See bottom device on &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Pcmcia-type-ii-and-iii.jpg&quot; rel=&quot;noreferrer&quot;&gt;this picture on Wikimedia&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some versions of these cards were equipped with a small pop-up female Ethernet connector (the original &lt;a href=&quot;https://en.wikipedia.org/wiki/XJACK&quot; rel=&quot;noreferrer&quot;&gt;XJACK&lt;/a&gt;), which obviated the need for these dongles.&lt;/p&gt;&#xA;" OwnerUserId="13889" LastActivityDate="2020-04-13T14:51:25.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14401" PostTypeId="2" ParentId="14397" CreationDate="2020-04-13T14:58:22.230" Score="11" Body="&lt;h2&gt;About the R register on a real Z80:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But is the 8th bit actually used?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, it's freely available and won't be touched by any instruction except loading R&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is its behaviour undocumented or can it only be altered by loading it with a value from the accumulator&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's well documented and can be used like assumed. When loaded all 8 bits from A are stored in R - and likewise returned when A is loaded from R. Thus it can be used for example as 'secret' flag to store a single bit value.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;which is used for some kind of software tricks?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Software (like above) as well as hardware. After all, it gets put on the bus in each M1 cycle during refresh, thus it may as well used as a singe bit output port.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;About emulated use:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there an even more convoluted reason? Some kind of compatibility with older snapshot file formats?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I do not have any hard evidence, only an educated guess based on why an emulator might want to handle them different.&lt;/p&gt;&#xA;&lt;p&gt;In &lt;em&gt;Ye Olde Days (tm)&lt;/em&gt; computers weren't many thousand times faster than the emulated target, so it was a good idea to keep the instruction path needed to perform short - especially at the core points like instruction decoding.&lt;/p&gt;&#xA;&lt;p&gt;When trying to emulate a Z80, the R register needs to be incremented with every M1 cycle. That's essentially every instruction as well as any prefix within. To handle R like on a real Z80, the op code fetch would have to&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;select bit 7,&lt;/li&gt;&#xA;&lt;li&gt;save it,&lt;/li&gt;&#xA;&lt;li&gt;increment R,&lt;/li&gt;&#xA;&lt;li&gt;mask out bit 7 and&lt;/li&gt;&#xA;&lt;li&gt;reinsert the saved value.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Depending on the CPU the emulator was made for this can be as much operations.&lt;/p&gt;&#xA;&lt;p&gt;Now, if Bit 7 is handled separate, R can be defined as a simple 8 bit unsigned integer and operation during M1 is reduced to&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Increment R (value at offset 11)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That's about as short as it can get. All other handling is postponed to the times R get transferred from or to A. When setting Bit 7 will be selected and stored at offset 12 (*1), while reading means combining these two values into one and storing in A.&lt;/p&gt;&#xA;&lt;p&gt;Even in tight programs these instructions occur rather seldom, so this optimization will speed up emulation notably.&lt;/p&gt;&#xA;&lt;p&gt;File formats are often direct image of memory structures, thus the 'convoluted storage' may simply be an artefact of how the emulator was optimized.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Do some emulators actually use offset 11 bit 7?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. It simply happenes. As the documentation says: don't care. It's an artefact. Nice but meaningless.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I have at least one Manic Miner .z80 that has offset 11 bit 7 set but offset 12 bit 0 unset.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, this seams to be simply a side effect of the mentioned optimization. When that snapshot was taken, R had already (at least once) overflown into bit 7.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Using bit 0 to store bit 7 seams somewhat odd at first, but it allows extraction and insertion with shift instruction.&lt;/p&gt;&#xA;&lt;p&gt;To extract, the (source) value of A is first stored at location 11, then shifted right into carry (or another register) and stored at location 12.&lt;/p&gt;&#xA;&lt;p&gt;For example on a 8086 this can be done in 3 machine instructions&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;                  * AL containing the value of Z80 register A&#xA;    SHL AX        * Extract the value of bit 7 to AH&#xA;    SHR AL        * Reconstruct value for storing&#xA;    MOV AX,loc11  * storing both in Loc 11/12&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(Shifting back and using a 16 bit store is faster than two 8 bit store instructions - even with missalignment)&lt;/p&gt;&#xA;&lt;p&gt;To restore it, the value from location 11 is shifted right again, then carry (or an upper byte, depending on the CPU used) is loaded and inserted per shift left.&lt;/p&gt;&#xA;&lt;p&gt;For example on a 8086 this can be done in 3 machine instructions&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    MOV AX,loc11  * Load location 11 in AL and 12 in AH&#xA;    SHL AL        * move one bit up to prepare for insertion&#xA;    SHR AX        * Insert bit 7 into AL, now containing the new value of A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-14T12:23:24.180" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14402" PostTypeId="2" ParentId="14374" CreationDate="2020-04-13T15:40:27.193" Score="5" Body="&lt;p&gt;BASIC was cheap on resources. Cheap on ROM, cheap on RAM, functional and productive. Nothing else came close -- not even Forth (which really required a disk drive to be truly usable, though there were exceptions).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the microcomputer BASICs, program code and the source code were the same. The original text is consumed and parsed in to the internal token format, then reified back in to readable text when LISTed. Most every other system had to deal with the source code separately from the runtime code. BASIC only had to maintain its internal representation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The line number scheme is the simplest of editors. No search, no cut and paste, no buffer management, compressed program source. If you can do a memory block move, you could edit a BASIC program. Type in the line number to create a new line, or replace an old one, tweak some pointers, and that's it. BASIC programs weren't so much as &quot;compiled&quot; as they were just continuously patched as the lines were entered in arbitrary order and the runtime image updated in place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even the &quot;screen editors&quot; on the PET and Ataris essentially came almost for free, as they did not change the actual BASIC editors per se, they simply changed the keyboard device and how it read lines to feed in to the interpreter leveraging the text stored in the screen buffer that was being displayed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later BASICs offered ways to change lines without rewriting them wholesale, renumber lines, but they weren't necessary. Nice to have, but not necessary. Just an added feature if you have the ROM space for it. (I'd rather have a RENUM command than a line editor myself.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the 8K ROM BASIC were simply wonders of capability (the 4K BASICs even more so). And, once committed to, it was trivial to leverage all of the inherent BASIC processing capability to add new commands for things like the disk drive, graphics, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For all the horrors BASIC is renowned for, all told it was fabulously productive and efficient in practice for the time.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-04-13T15:40:27.193" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14403" PostTypeId="2" ParentId="13534" CreationDate="2020-04-13T16:31:42.633" Score="2" Body="&lt;p&gt;Found a &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.ibm.pc.games.action/f7GNMJoenoE/dXp0UneCbf4J&quot; rel=&quot;nofollow noreferrer&quot;&gt;direct quote and description from Arjan Brussee&lt;/a&gt; saying Jazz Jackrabbit was written for Mode X:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Anyone know what res. Jazzy Jackrabbit is done in??  It pops&#xA;  my monitor into out-of-center display.  Is it some ModeX mode?? [...]&lt;/p&gt;&#xA;  &#xA;  &lt;hr&gt;&#xA;  &#xA;  &lt;p&gt;modex. wait for a fix which should be there soon, which has some settings for different videocards.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;arjan brussee - programmer of JJ&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://groups.google.com/d/msg/rec.games.programmer/bRFsjccof2Q/aioAAtGKFsoJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;The following post&lt;/a&gt; contains a short description of how per-pixel scrolling worked in JJ in Mode X.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;full directional, unlimited scrolling like this should be possible in&#xA;  320x200, I did it back in 1994 with Jazz Jackrabbit 1. You need to set the&#xA;  offset per 4 pixels, then set the pixel scroller register to address the&#xA;  exact pixel that you want to start on. I can't find the source so fast, but&#xA;  I will release the full source code of Jazz-1 in about a month on my&#xA;  website.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But it can also use VGA &lt;a href=&quot;https://groups.google.com/d/msg/rec.games.programmer/-BaPryzI5AA/xZyB2b7MV6oJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;with the /VGA flag&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You could try to run Jazz with the /VGA switch, which&#xA;  uses another game mode.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="17826" LastEditorUserId="79" LastEditDate="2020-04-14T08:02:36.937" LastActivityDate="2020-04-14T08:02:36.937" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14404" PostTypeId="1" AcceptedAnswerId="14455" CreationDate="2020-04-13T17:11:23.607" Score="12" ViewCount="863" Body="&lt;p&gt;From carrying out some brief research, it appears that as is the case today, when using Dial-Up to access the Internet customers were often allocated a dynamic IP address by their ISP. Typically, when connecting via a Broadband connection today via a router, some protection is offered from externally-facing attacks; the router only allows traffic to reach internally-connected clients if a rule has explicitly been defined to allow packets to be forwarded to a specific internal IP via a port number. Was this the case when using Dial-Up, or in theory was a machine accessible to anyone - either unless a user had installed and configured a software-based firewall on their computer, or the ISP implemented some kind of NAT?&lt;/p&gt;&#xA;" OwnerUserId="15043" LastEditorUserId="15334" LastEditDate="2020-10-21T03:34:30.030" LastActivityDate="2020-10-21T03:34:30.030" Title="When connecting to the Internet via Dial-Up, were computers directly accessible via their allocated IP address?" Tags="&lt;history&gt;&lt;internet&gt;" AnswerCount="6" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14405" PostTypeId="2" ParentId="14404" CreationDate="2020-04-13T17:31:48.847" Score="10" Body="&lt;p&gt;In the USA, most ISPs did NOT use NAT with dialup. Inbound port numbers were generally unblocked, but 25 (SMTP) was often blocked as a way to prevent spam.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-04-13T17:31:48.847" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14406" PostTypeId="2" ParentId="14394" CreationDate="2020-04-13T20:07:36.003" Score="2" Body="&lt;p&gt;I don't know for PC, but Amiga magazines were scanned and published under various sites. The most known is &lt;a href=&quot;http://amr.abime.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://amr.abime.net/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you see, people are interested in such magazines. They often contain exclusive game tests, beta previews (with features that didn't made to the final release), corny adverts, game designer interviews, that the internet doesn't have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please don't throw them away until you're sure that someone has preserved them in a digital form.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-04-13T20:07:36.003" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14407" PostTypeId="2" ParentId="14397" CreationDate="2020-04-13T21:08:02.780" Score="12" Body="&lt;p&gt;The .z80 format comes from the Z80 emulator by Gerton Lunter. He released some documentation about the file formats used in it, and regarding offsets 11 and 12, this is what the manual says:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.Z80 FILES:&#xA;-----------&#xA;&#xA;The old .Z80 snapshot format (for version 1.45 and below) looks like&#xA;this:&#xA;&#xA;    Offset  Length  Description&#xA;&#xA;    0       1       A register&#xA;    1       1       F register&#xA;    2       2       BC register pair (LSB, i.e.  C, first)&#xA;    4       2       HL register pair&#xA;    6       2       Program counter&#xA;    8       2       Stack pointer&#xA;    10      1       Interrupt register&#xA;    11      1       Refresh register (Bit 7 is not significant!)&#xA;    12      1       Bit 0  : Bit 7 of the R-register&#xA;                    Bit 1-3: Border colour&#xA;                    Bit 4  : 1=Basic SamRom switched in&#xA;                    Bit 5  : 1=Block of data is compressed&#xA;                    Bit 6-7: No meaning&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From this, it can be assumed that the distinction from bit 7 and the other bits was there since the first public version of the format. OTOH, the Z80 emulator offers the option to not emulate register R, so it could be that the first internal versions of the .z80 format didn't even include a place to store register R. This may be deduced by the following paragraph, in which he mentions that offset 12 could have a FF value in it.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Because of compatibility, if byte 12 is 255, it has to be regarded as&#xA;being 1.  After this header block of 30 bytes the 48K bytes of Spectrum&#xA;memory follows in a compressed format (if bit 5 of byte 12 is one)....&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;About which software uses bit 7 of R: it is mainly used as a software peding interrupt flag. Instead of using the interrupt handler to do tasks, the handler is a minimal one which only sets bit 7 of R:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;push af  ;or ex af,af' if alternate AF is not being used&#xA;ld a,128 ;or any other value &amp;gt;= 128&#xA;ld r,a&#xA;pop af   ;or ex af,af'&#xA;ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Note that this handler doesn't enable interrupts upon exit as it would normally be required. More on this, later). This handler is fast enough to not disturb most time sensitive routines, such as loaders or beep engines, which can run with interrupts enabled. Later on, when there is time ahead, the program just loads A with current contents from R (ld a,r). This operation also sets some bits in the flag register. More precisely, bit 7 of R is copied to the sign flag, so checking if an interrupt has been triggered in the past can be performed by executing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ld a,r&#xA;jp m,InterruptIsPending&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The InterruptIsPending routine should clear bit 7 of R and perform whatever tasks are relevant to do every 20ms (perhaps a play tick routine to produce AY-3-8912 music) and enable interrupts again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that, for instance, the ZX Spectrum port of King's Valley uses this technique to know when an interrupt has been triggered so it calls a dirty rectangle routine for sprite fast updating. I myself have used this technique to implement a custom loading routine that allows loading interlaced pictures (those using both normal and shadow screens and are swapped at every vertical retrace to make them look as a hicolour resolution picture) and show them in interlaced form as they load (so, the loader has to swap screens at every vertical retrace interrupt). This is the relevant portion:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                ;IM 2 just toggles a flag at bit 7 of R to notify a vretrace has just happened&#xA;NewIM2          ex af,af'  ;4&#xA;                ld a,255   ;7&#xA;                ld r,a     ;9&#xA;                ex af,af'  ;4&#xA;                ret        ;10&#xA;                           ;Total: 34 cycles&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, at several &quot;safe&quot; places in the load routine, I perform the R test. For example, just after a byte has been loaded:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;;; LD-NEXT&#xA;L05C2:  ld a,r                  ;after storing a byte, check if a vretrace has happened.&#xA;        call m,SwitchScreens&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The called routine performs the required operation AND enables interrupts again (this way, interrupts are not enabled until the delayed service routine has been executed)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                ;Alternate registers have already been set up for this.&#xA;                ;See beginning of ld_lacescreen&#xA;SwitchScreens   exx&#xA;                ld a,e&#xA;                xor d&#xA;                ld d,a&#xA;                out (c),a&#xA;                exx&#xA;                ld r,a&#xA;                ei&#xA;                ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2020-04-14T02:01:53.780" LastActivityDate="2020-04-14T02:01:53.780" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14408" PostTypeId="2" ParentId="14374" CreationDate="2020-04-13T22:54:59.547" Score="1" Body="&lt;p&gt;Isn't this discussed in the book, &lt;em&gt;Decoding Liberation: The Promise of Free and Open Source Software&lt;/em&gt; By Samir Chopra, Scott D. Dexter? (See page 13). Basically, copyright issues and monetization strategy for LISP ended up spawning the open source movement. BASIC was more readily available with license, or easily pirated. &lt;/p&gt;&#xA;" OwnerUserId="17836" LastActivityDate="2020-04-13T22:54:59.547" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14409" PostTypeId="2" ParentId="14375" CreationDate="2020-04-13T23:12:33.353" Score="6" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Turbo_Vision&quot; rel=&quot;noreferrer&quot;&gt;Turbo Vision&lt;/a&gt; is probably your best bet. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Borland released the C++ port of it into the public domain and there's a GPLed descendant of that public domain release &lt;a href=&quot;http://tvision.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;on SourceForge&lt;/a&gt; or a less advanced BSD-licensed one on &lt;a href=&quot;http://www.sigala.it/sergio/tvision/&quot; rel=&quot;noreferrer&quot;&gt;Sergio Sigala's website&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The GPLed version is listed as compatible with &quot;DOS, FreeBSD, Linux, QNX, Solaris and Win32&quot; via the Borland C++, GCC, &lt;a href=&quot;http://www.delorie.com/djgpp/&quot; rel=&quot;noreferrer&quot;&gt;DJGPP&lt;/a&gt; (see also &lt;a href=&quot;https://github.com/andrewwutw/build-djgpp&quot; rel=&quot;noreferrer&quot;&gt;Win/Mac/Lin cross-compiling DJGPP&lt;/a&gt;), and &lt;a href=&quot;http://mingw.org/&quot; rel=&quot;noreferrer&quot;&gt;MinGW&lt;/a&gt; (cross-compiler in Debian/Ubuntu repos as &lt;code&gt;mingw-w64&lt;/code&gt;) compilers.&lt;/li&gt;&#xA;&lt;li&gt;It's the framework Borland used for their own &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Turbo_CPP_Compiler.PNG&quot; rel=&quot;noreferrer&quot;&gt;Turbo C++&lt;/a&gt; and &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Turbopascal_6.png&quot; rel=&quot;noreferrer&quot;&gt;Turbo Pascal&lt;/a&gt; IDEs and, as far as I know, it &lt;em&gt;is&lt;/em&gt; flexible enough to replicate VBDOS 1.0's IDE. (The screenshots of the &quot;Turbo ...&quot; IDEs don't show it, but it does have dialogs and widget classes such as buttons, text-entry fields, etc.)&lt;/li&gt;&#xA;&lt;li&gt;It's open-source so, if it turns out to have some subtle shortcoming (eg. not &lt;em&gt;quite&lt;/em&gt; able to match the exact visual style), you can patch it.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It's also got various helper classes including a standardized system for streaming persistent state between GUI widgets and the disk. The best comparison I can make is &quot;Qt for the MS-DOS era&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.sigala.it/sergio/tvision/&quot; rel=&quot;noreferrer&quot;&gt;Sergio Sigala's version&lt;/a&gt; includes some API documentation, though the best documentation, language syntax aside, is probably still the Turbo Vision 2.0 print manual that came with Turbo Pascal 7. I believe Bitsavers has uploaded scans of that to the Internet Archive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have a DOS compiler set up at the moment, but here's a screenshot of one of the example programs, built for Linux, to show off some of the widgets it comes with in their default look.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5BSz1.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5BSz1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2020-04-13T23:12:33.353" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14410" PostTypeId="1" AcceptedAnswerId="15625" CreationDate="2020-04-14T02:31:01.850" Score="11" ViewCount="763" Body="&lt;p&gt;The Commodore 128 was a version of the Commodore 64 that also had a Z80 CPU along with its &quot;native&quot; 6502 CPU so the system could run CP/M as well as C64 software. (As well as more RAM and other differences.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But were there ever any games that ran on the C128's Z80 as the main CPU?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not games, demos or other software that ran on the metal rather than within the CP/M system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obvious examples would be ports from Z80-based systems such as the ZX Spectrum.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-07-15T08:40:21.147" Title="Are there games for the C128 that run (mainly) on the Z80 rather than the 6502?" Tags="&lt;z80&gt;&lt;cp-m&gt;&lt;commodore-128&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14411" PostTypeId="1" AcceptedAnswerId="14412" CreationDate="2020-04-14T06:44:08.030" Score="12" ViewCount="830" Body="&lt;p&gt;The C128 was a C64 with an extra CPU as well as extra memory. But the second CPU was a Zilog Z80 while the primary was the usual Commodore CPU, a MOS 6502.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z80 was there so that CP/M software could be run and as such the machine has a C64 mode using the 6502 and a CP/M mode using the Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But was it possible to write software for it that ran on the Z80 outside of the CP/M environment, and if so did the Z80 have full access to all the machine's custom hardware such as sprites, SID sound chip, etc?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe the Z80 had to run slower than usual on this system, so for performance the 6502 would normally be used. But if you still wanted to code for the Z80 rather than the 6502 could you still use all the system's hardware features?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-06-10T21:16:39.337" Title="Did the Commodore 128's Z80 CPU also have full access to the machine's custom hardware?" Tags="&lt;z80&gt;&lt;programming&gt;&lt;commodore-128&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14412" PostTypeId="2" ParentId="14411" CreationDate="2020-04-14T07:01:27.903" Score="12" Body="&lt;p&gt;The Z80 can access all hardware I/O addresses in the C128, with the natural exception of the built-in I/O port (a 6520-style &lt;a href=&quot;https://en.wikipedia.org/wiki/Peripheral_Interface_Adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;PIA&lt;/a&gt;) of the 8502 CPU. That means that, if I remember correctly, the only hardware that is not easily usable from the Z80 is &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the cassette&lt;/li&gt;&#xA;&lt;li&gt;the &lt;kbd&gt;CAPS LOCK&lt;/kbd&gt; key of the US version (&lt;kbd&gt;ASCII/DIN&lt;/kbd&gt; in German models, I don't know what it is called in the other internationalized variants).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="16504" LastEditorUserId="6794" LastEditDate="2020-06-04T23:03:28.203" LastActivityDate="2020-06-04T23:03:28.203" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14413" PostTypeId="2" ParentId="14410" CreationDate="2020-04-14T07:11:23.810" Score="8" Body="&lt;p&gt;Other than some CP/M based text games (mostly PD stuff) that aren't C128 specific, not that I know of. Remember there weren't that all that many C128 specific games to begin with, I'd guess more than 99% of the games people ran on it were unmodified C64 games, and of course the C64 has no Z80 CPU.&lt;/p&gt;&#xA;" OwnerUserId="16504" LastEditorUserId="16504" LastEditDate="2020-04-14T11:07:16.637" LastActivityDate="2020-04-14T11:07:16.637" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14414" PostTypeId="2" ParentId="7850" CreationDate="2020-04-14T08:23:59.713" Score="4" Body="&lt;p&gt;The best copy protection is called “marching bits”.&#xA;The transition is place at the window margin by using a write clock speed 10x faster than the actual  playback clock on the floppy controller.  This way each bit is actually written as 10 bits and allows for a production product accurate within a 25% window. Note floppy discs drives vary between units and within with flutter.  However, using this technology allowed the creation of a hardware copy protection.&#xA;The “protected” byte contains a bit that reads as a 1 in one of two bits because the bit is written on the window border.   You cannot write this bit with a normal floppy disc controller because you cannot control where bits are written within the window. The software reads the byte 3 or more times and an allowable results is 1 bit shift between the 2 possible results. Also the sector CRC is not generated by the bytes written but part of the user SN.&#xA;One very large company asked how a customer makes a backup copy. The answer: The disc is copy protected and NO copies can be made using a commercial floppy disc controller.&#xA;Now game software companies loved this feature - no bootleg copies. Send in your old copy to receive a replacement. One of my favorites was a bootleg copy would appear to work expect you could never win because it ran a separate sub program to make you work very hard without ever advancing.  When you called about the program not working you were identified as using stolen software.&lt;/p&gt;&#xA;" OwnerUserId="17839" LastActivityDate="2020-04-14T08:23:59.713" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14415" PostTypeId="2" ParentId="14392" CreationDate="2020-04-14T08:28:16.637" Score="1" Body="&lt;p&gt;The question is way too broad, not least because it is not geographically-bounded, and there are as many ISP business plans as their are ISPs. However, you can look at the technology and business conditions of the day and get a feel for the various options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experience is mainly from the UK in the 1995-2001 era. The state-owned telco had been privatised a decade beforehand so there were relatively few restrictions, but it was still effectively a monopoly provider and priced appropriately. Other European countries had it much worse; some would have had it better. Given the vagueness, prices I give are &lt;a href=&quot;https://en.wikipedia.org/wiki/Order_of_approximation#Zeroth-order&quot; rel=&quot;nofollow noreferrer&quot;&gt;zeroth-order approximations&lt;/a&gt;. There are still order-of-magnitude differences between countries today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The minimum equipment required to set up a dialup ISP is some sort of Internet connection, some sort of PSTN connection and modems to answer calls, and a router to plumb the two together. Although not strictly required, users would expect the ISP to also provide a mail server, possibly Usenet access, and maybe even a bit of webspace for their home pages. (This would be the same now in 2020 with a for-fun setup lashed-together over VoIP or a softmodem running in Asterisk as it did in 1990 with real phone lines and real modems.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 64kb/s leased line would have been around £1-10k setup depending on location, and £1k/month with a 1-5 year minimum. Each POTS line was £100 setup plus £10/month with a 12 month minimum. A modem was around £100. A computer (to be a router and/or mail/Usenet/web server) was around £1k. An enthusiastic but naïve techie to make it work could be hired for £1k/month.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the business expanded, that 64kb/s line would be added to or upgraded, the wall of POTS lines, modems and port concentrators would be replaced with more compact ISDN30 lines (in Europe; T1 in the US) and specialised ISDN30 digital modems (which as a useful side-effect also increased the maximum dialup speed from 33.6kb/s to 56kb/s) and so on, but that stuff was professional kit rather than a lash-up of consumer gear and so even more expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the ISP's costs are running into the thousands per month before they've even gotten their first customer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, although the opex and capex costs are outrageous, the setup cost of a new customer is virtually zero: an entry in the RADIUS database and perhaps a bit of phone support if they couldn't be bothered to read the instructions. The marginal costs were the POTS circuit dedicated to the user while they were connected, and whatever bandwidth they were using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no &lt;em&gt;need&lt;/em&gt; to bind them into anything but a month-by-month contract to cover the costs. The user would pay around £10/month, mostly because &lt;a href=&quot;https://en.wikipedia.org/wiki/Demon_Internet&quot; rel=&quot;nofollow noreferrer&quot;&gt;Demon Internet&lt;/a&gt; pioneered dialup Internet in the UK and ran with &quot;tenner a month&quot; in 1992 when they started and stuck with it until the bitter end. Although there was a cost to the ISP in tied up equipment whenever a user was connected, because local phone calls cost up to £2.40/hour, that tended to limit call time and ISPs could offer flat-rate access. In countries such as the USA with free local calls, they'd have to find some other way to discourage usage such as per-minute charges or an hours cap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although BT was a de facto monopoly for consumer connections, Mercury were offering business services in the 1980s and so there were legal structures in place setting out settlement rates for cross-telco calls to cover the various trunk and last-mile costs. Trunk costs cratered as technology improved into the 1990s — upgrade the fibre-optic equipment on the ends of an already paid-for line and it can carry many more calls — and so the last mile revenue became significant enough that by around 1997 large ISPs could demand a cut of that £2.40/minute by shopping around telcos, or even just &lt;em&gt;becoming&lt;/em&gt; a telco. Initially it merely subsidised operations and helped avoid increases to the monthly fee, but eventually Freeserve came along and pretty much copied Demon but operated purely from call revenue, making the question of contract duration moot: if you stop calling, you're no longer paying for the service.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually &lt;a href=&quot;https://en.wikipedia.org/wiki/FRIACO&quot; rel=&quot;nofollow noreferrer&quot;&gt;FRIACO&lt;/a&gt; came along which the consumer could opt to pay a bit extra per month for free calls to ISPs participating in the scheme, bringing the USA's problems to British ISPs, but this was at the same time as ADSL was kicking off so heavy users were abandoning dialup and the usage caps were set high enough that it was effectively unlimited for all but the small handful of abusive users treating it as a cheap leased line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sleazier ISPs would bind people into longer contracts and/or be difficult about cancellation, but there was no &lt;em&gt;need&lt;/em&gt; to do so.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2020-04-14T08:28:16.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14416" PostTypeId="2" ParentId="14394" CreationDate="2020-04-14T09:08:38.117" Score="2" Body="&lt;p&gt;All PC Magazine issues are available for free on Google books. See the link (&lt;a href=&quot;https://books.google.com/books/about/PC_Mag.html?id=w_OhaFDePS4C&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://books.google.com/books/about/PC_Mag.html?id=w_OhaFDePS4C&lt;/a&gt;). I used to collect them, but no longer after they became available online.&lt;/p&gt;&#xA;" OwnerUserId="17809" LastActivityDate="2020-04-14T09:08:38.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14417" PostTypeId="2" ParentId="14332" CreationDate="2020-04-14T10:01:11.923" Score="1" Body="&lt;p&gt;The first figure is flat-out wrong. Only the &amp;quot;D&amp;quot; bits they've marked&#xA;are stored on the diskette as the presence (D=1) or absence (D=0) of a&#xA;magnetic flux change. Those clock bits exist neither on the diskette&#xA;nor in the internals of the controller. (The controller does have its&#xA;own separate clock signals, but these are independent and never&#xA;intermixed with the data bits.)&lt;/p&gt;&#xA;&lt;p&gt;The second digram gives an accurate picture of what's stored on the&#xA;diskette: a stream of &lt;code&gt;1&lt;/code&gt; and &lt;code&gt;0&lt;/code&gt; bits encoded as a flux change or&#xA;lack of a flux change.&lt;/p&gt;&#xA;&lt;p&gt;That said, as well as GCR encoding for the sector data fields, the&#xA;Disk II system &lt;em&gt;did&lt;/em&gt; use FM encoding for the sector address fields as&#xA;is shown later in &lt;em&gt;Beneath Apple DOS&lt;/em&gt; and below. To understand how&#xA;this worked we need to understand how the controller (with some&#xA;assistance from software) reads data from the diskette and divides it&#xA;up into bytes.&lt;/p&gt;&#xA;&lt;h3&gt;Byte Framing&lt;/h3&gt;&#xA;&lt;p&gt;To start reading, the shift register that holds the read data is&#xA;cleared (set to $00) and the controller starts in a state that Jim&#xA;Sather calls &amp;quot;QA WAIT,&amp;quot;¹ where it is waiting for a &lt;code&gt;1&lt;/code&gt; bit (i.e., a&#xA;flux transition) to appear. Once a &lt;code&gt;1&lt;/code&gt; appears, it clocks that and&#xA;next seven bits (&lt;code&gt;1&lt;/code&gt;s or &lt;code&gt;0&lt;/code&gt;s) into the shift register. The software&#xA;is expected to continuously test bit 7 of the shift register for the&#xA;appearance of that initial &lt;code&gt;1&lt;/code&gt; bit and take that as the signal that a&#xA;full byte has been read. In the mean time, after it finishes reading a&#xA;byte the controller has re-entered QA WAIT and will leave the shift&#xA;register alone until another &lt;code&gt;1&lt;/code&gt; bit appears. Shortly after that it&#xA;will clear the shift register and start clocking in another byte.&lt;/p&gt;&#xA;&lt;p&gt;This explains why bytes stored on the disk must always start with a&#xA;&lt;code&gt;1&lt;/code&gt; bit: that's what triggers the start of the shift register load&#xA;sequence. When starting to read a series of bytes the controller will&#xA;start at a random bit (most likely in the middle of a byte); the&#xA;&amp;quot;autosync&amp;quot; sequence of bits in the second figure in the question shows&#xA;how, via ignoring &lt;code&gt;0&lt;/code&gt; bits when starting a byte read, the controller&#xA;can sync to the byte boundaries of data being read from the diskette.&#xA;(The &lt;code&gt;0&lt;/code&gt; values in that figure not covered by the braces underneath&#xA;are the ones ignored while in the QA WAIT state.)&lt;/p&gt;&#xA;&lt;p&gt;That bytes must start with a &lt;code&gt;1&lt;/code&gt; bit is particular to how the Disk II&#xA;controller assembles bytes. The other major limitation, that there may&#xA;not be more than two &lt;code&gt;0&lt;/code&gt; bits in a row within a byte, is a general&#xA;limitation of reading self-clocked data from a variable speed medium.²&lt;/p&gt;&#xA;&lt;h3&gt;FM vs. GCR Encoding&lt;/h3&gt;&#xA;&lt;p&gt;The two major limitations above determine that only a subset of all&#xA;bytes valued $00 to $FF can be reliably read from a diskette; the byte&#xA;values that can be used always start with a &lt;code&gt;1&lt;/code&gt; in the most&#xA;significant bit and never have more than two (or in DOS 3.2 or&#xA;earlier, one) &lt;code&gt;0&lt;/code&gt; bits in a row.&lt;/p&gt;&#xA;&lt;p&gt;This allows for use of both FM and GCR encoding, and in fact Apple DOS&#xA;uses both. On &lt;a href=&quot;https://archive.org/stream/Beneath_Apple_DOS_OCR#page/n22/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 3-12&lt;/a&gt; of &lt;em&gt;Beneath Apple DOS&lt;/em&gt; they show the format&#xA;of the address field for each sector:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Qmy2q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qmy2q.png&quot; alt=&quot;Figure 3.13: Address Field&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As you can see, the bytes encoding the volume, track, sector and&#xA;checksum are in a version of FM encoding: each byte is a series of &lt;code&gt;1&lt;/code&gt;&#xA;bits alternating with data bits. (The data bits are ordered the way&#xA;they are to make decoding easier: left-shift the XX byte, loading &lt;code&gt;1&lt;/code&gt;&#xA;into the LSB, and AND the result with it with the YY byte.)&lt;/p&gt;&#xA;&lt;p&gt;For the data field for each sector, however, a GCR encoding is used.&lt;/p&gt;&#xA;&lt;p&gt;Note that the sync, prologue, and epilogue bytes are not &amp;quot;encoded&amp;quot; at&#xA;all; they are simply raw bit patterns that follow the rules above but&#xA;are invalid  in either encoding,³ allowing the system to recognize&#xA;them as &amp;quot;control bytes&amp;quot; rather than any kind of data.&lt;/p&gt;&#xA;&lt;h3&gt;Other Encodings&lt;/h3&gt;&#xA;&lt;p&gt;From the above you can see that the Disk II system seems also, with&#xA;appropriate software, probably capable of reading diskettes using&#xA;Shugart's &lt;a href=&quot;https://archive.org/stream/bitsavers_shugartSA4eManualApr1979_2873568#page/n9/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;standard single-density soft-sectored formats&lt;/a&gt;&#xA;that use FM encoding, such as 18 × 128 byte sectors per track (78.75&#xA;KB).⁴&lt;/p&gt;&#xA;&lt;p&gt;However, the limitations above also indicate why an Apple II cannot&#xA;read any of the double-density &lt;a href=&quot;https://en.wikipedia.org/wiki/Modified_frequency_modulation&quot; rel=&quot;nofollow noreferrer&quot;&gt;MFM&lt;/a&gt; standard formats: they encoded&#xA;data in such a way that some bytes could start with a &lt;code&gt;0&lt;/code&gt;, and the&#xA;Disk II controller cannot sync to those (though a different controller&#xA;could be designed to do so using the same drive).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;¹&lt;sub&gt;Jim Sather, &lt;em&gt;Understanding the Apple II&lt;/em&gt;, &lt;a href=&quot;https://archive.org/stream/Understanding_the_Apple_II_1983_Quality_Software#page/n260/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Figure 9.16&lt;/a&gt;.&#xA;Chapter 9 is a good but &lt;em&gt;very&lt;/em&gt; detailed (42 dense pages) description&#xA;of the Disk II hardware and software; here I attempt to give an&#xA;accurate but limited description of just the parts relevant to the&#xA;question.&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;²&lt;sub&gt;The limitation for DOS 3.2 and earlier is one &lt;code&gt;0&lt;/code&gt; bit; this is&#xA;due to using a different state machine in the first generation of&#xA;controllers. Generically, the particular number of &lt;code&gt;0&lt;/code&gt; bits in a row&#xA;that are allowed will depend on the design of a particular system and&#xA;how much accuracy it loses as it goes longer without flux transitions, but&#xA;system designers will always set a particular limit. &lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;³&lt;sub&gt;Actually the middle $AA is valid FM of half a byte, but would&#xA;never be read as such because the preceding byte is not valid FM. The&#xA;trailing $EB is actually never fully written; see &lt;em&gt;Understanding the&#xA;Apple II&lt;/em&gt; for details.&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;⁴&lt;sub&gt;The data rate must also be the same, of course. This is limited&#xA;by the media itself, which is probably why common controllers such as&#xA;the Western Digital &lt;a href=&quot;https://archive.org/stream/WesternDigitalFD1791Datasheet#page/n16/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;FD1791&lt;/a&gt; and Fujitsu &lt;a href=&quot;https://archive.org/stream/MB8866Datasheet#page/n9/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;MB8866&lt;/a&gt; use the FM data rate&#xA;established by the IBM 3740 format: 125 kHz, or 4 μs for the clock bit&#xA;and 4 μs for the data bit. The Disk II system uses 4 clock cycles per&#xA;bit, which at 1.023 MHz is very close to 4 μs.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-14T15:14:43.160" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14418" PostTypeId="1" AcceptedAnswerId="14420" CreationDate="2020-04-14T10:37:30.007" Score="13" ViewCount="1536" Body="&lt;p&gt;I tried to understand how to read a floppy image format (.sdk).&#xA;The format is based on CP/M 2.2 filesystem.&#xA;I've lost track, and I think it's my third attempt.&#xA;Now I am looking more into what these different things are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;sector&lt;/li&gt;&#xA;&lt;li&gt;tracks&lt;/li&gt;&#xA;&lt;li&gt;blocks?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I know what a &lt;strong&gt;sector&lt;/strong&gt; is, its one of those pies, and a &lt;strong&gt;track&lt;/strong&gt; is one of the concentric circles on a disk.&#xA;Not sure if &lt;strong&gt;blocks&lt;/strong&gt; are an actual physical thing on the surface of a disk or if they are only part of software. Thats what I am attempting to understand more about.&#xA;Wether or not its physical, my question is how we can read those sectors (or how they are stacked) when the floppy or hd is reading data from it.&#xA;I've drawn a krappie paint figure (or i think those circles wasnt that bad afterall):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ofgtg.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ofgtg.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, which one of these four figures are most accurate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've read that there can be more than one sector per track. My question is wether or not one block is the upper right or upper left figure because the disk or surface is rotating so that the head-reader is reading more than one sector at a time and one block can be thought of as that.&lt;/p&gt;&#xA;" OwnerUserId="15637" LastEditorUserId="6659" LastEditDate="2020-04-14T12:04:46.867" LastActivityDate="2020-05-10T09:00:31.337" Title="How are blocks stacked on a floppy or older HD" Tags="&lt;floppy-disk&gt;&lt;floppy-drive&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14419" PostTypeId="2" ParentId="14396" CreationDate="2020-04-14T10:38:12.620" Score="6" Body="&lt;p&gt;A few things to add to existing answers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As well as ethernet cards there were modem cards, and some with both modems and ethernet adaptors in one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were several similar but mutually-incompatible connectors, so mixing and matching from different cards could be problematic.  For combination cards you may need to check the icons on the card and connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some later models were Intel branded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same connectors with different pins populated where used as charge (and perhaps pre-USB data or modem) cables for some mobile phones.  &lt;/p&gt;&#xA;" OwnerUserId="4171" LastEditorUserId="4171" LastEditDate="2020-04-15T07:57:49.427" LastActivityDate="2020-04-15T07:57:49.427" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14420" PostTypeId="2" ParentId="14418" CreationDate="2020-04-14T10:53:21.380" Score="13" Body="&lt;p&gt;A &lt;strong&gt;sector&lt;/strong&gt; is the minimum amount of data you can read from a floppy disk or harddisk. As you've drawn correctly, a sector is part of a &lt;strong&gt;track&lt;/strong&gt; (on a harddisk also called &lt;strong&gt;cylinder&lt;/strong&gt;, because there are many platters with one track, so overall you get a cylinder).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing you are missing is that some floppy drives and nearly all harddrives have multiple heads, so for a double sided floppy, there are drives that can read from both sides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Blocks&lt;/strong&gt; are a logical abstraction on sectors. In general, one block can contain a constant number of sectors. Sometimes this constant is &quot;one&quot;. (And I've never come across the case where there are several blocks in one sector, but who knows...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make things more interesting, the term &quot;block&quot; is used in many subsystems, and can have different sizes in each of those. So you can have a logical harddisk block that consists of exactly one sector, or a filesystem block (&quot;allocation unit&quot;) that consists of, say, four sectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also stack these, so you can have a filesystem block that consists of two logical blocks which consists of two sectors each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to get through this mess, you have to be very specific which kind of disk you are dealing with, which kind of transport mechanism, and which kind of filesystem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For CP/M, see e.g. &lt;a href=&quot;https://www.cpm8680.com/cpmtools/cpm.htm&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;CP/M supports block sizes of 1024, 2048, 4096, 8192 and 16384 bytes. Unfortunately, this format specification is not stored on the disk and there are lots of formats. Accessing a block is performed by accessing its sectors, which are stored with the given software skew. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;One way to figure this out is to look at a disk image where you know the contents of the file, and reconstruct the &quot;magic&quot; numbers for the format from that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for files that capture disk images, some also have an internal structure, which can add another complication. I am not familiar with the &lt;code&gt;.SDK&lt;/code&gt; format, so I don't know if that is relevant for it.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-04-15T03:48:48.623" LastActivityDate="2020-04-15T03:48:48.623" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14421" PostTypeId="2" ParentId="14374" CreationDate="2020-04-14T11:31:14.297" Score="3" Body="&lt;p&gt;I started programming in 1981 at university &amp;amp; my first job (in 1982) was on an 8-bit &lt;em&gt;Business Computer&lt;/em&gt; (The &lt;a href=&quot;https://en.wikipedia.org/wiki/Durango_F-85&quot; rel=&quot;nofollow noreferrer&quot;&gt;Durango&lt;/a&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC was one of the big three languages - FORTRAN and COBOL were compiled and on bigger computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The expectation was that &lt;em&gt;business programming&lt;/em&gt; was somewhat English-like. Forth had a significant presence in technical and laboratory instrument control but its stack handling requires a level of abstract thinking well above BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Non-programmers can follow the logic of a BASIC program. They can't really do that with an idiomatic Lisp program. Whilst Lisp has had a major role as a control language inside AutoCAD, again that's a selective market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&#xA;Regarding Will Hartung's comment about Forth requiring a disk drive, that's utter nonsense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had a modem with inbuilt Forth which could be accessed by a special AT command, so it then became a true command-line Forth computer accessed via serial terminal. Definitely no storage involved!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC interpreters were also preferred on the Nixdorf minicomputer at my second job, which I started in 1983. Entire share registries, accounting, purchasing departments ran on this via terminals. This was a major mining company, I also knew of department stores running similar setups.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programming was in chained 16KB programs with 1 character variable names (with optional digit) &amp;amp; comments took valuable coding space as they were in the same text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data access was to text file, random-access fixed-length binary and indexed ISAM files. All screen I/O and data access were via calls that used a lot of numeric parameters. Whilst the main logic was semi-readable, using the operating system's libraries was fairly impenetrable &amp;amp; you worked with an open binder of call numbers at your elbow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of people experienced BASIC on early 8 bit micros for domestic use but there was an entire world of relatively sophisticated business programming. Even in 1981, a Durango had a hard disk and ran up to three remote diskless workstations running the same software in that 8 bit OS.&lt;/p&gt;&#xA;" OwnerUserId="7730" LastEditorUserId="7730" LastEditDate="2020-04-18T07:18:15.550" LastActivityDate="2020-04-18T07:18:15.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14422" PostTypeId="2" ParentId="14418" CreationDate="2020-04-14T11:47:41.847" Score="2" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So, which one of these four figures are most accurate?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Non - or all of them, depending on what controller/system/OS is used, but as well as the abstraction level one looks at. And, as usual with an evolving terminology, meaning got changed, overlaying terms were introduced and some turned them upside down.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;A long story - made short:&lt;/h2&gt;&#xA;&lt;p&gt;In the beginning there was only a block, no sector (*1), and it existed on tape. Blocks had arbitrary length, much like the application liked (*2). When disk came, they were first just assigned on track level. A whole track got written at once. This was soon replaced by writing separate blocks instead. In the mainframe world, were it happened first, blocks were 2048 bytes or a half page (*3).&lt;/p&gt;&#xA;&lt;p&gt;The term sector was used when viewing this from a media angle, while block was more about the logical view. Then again, at that time they were exchangeable. It changed when for one minis and more important micros 'redeveloped' disk storage bottom up, using sector as basic term on OS as well as application level.&lt;/p&gt;&#xA;&lt;p&gt;This is were it gets really confusing. For various reasons, later operating systems did use disk drives with a certain physical sector size but superimposed their logical sector sie. In more lucky cases these logical sectors got again called block.&lt;/p&gt;&#xA;&lt;p&gt;A nice example is the UCSD Pascal system for the Apple II. Since UCSD system was developed on machines with a 512 byte sector/block size, the Pascal file system for the apple II always combined two consecutive physical 256 byte sectors into one logical 512 byte block.&lt;/p&gt;&#xA;&lt;p&gt;But this also happened the other way. The be device independent, CP/M operated with a logical sector(!) size of 128 bytes. It was the BIOS' job to turn them into disk sectors, which now got called blocks - essentially turning the terminology upside down - depending on whatever physical sector size was used. To make it even more confusing, later versions (3.0?) introduced larger sector sizes as well to cover larger storage media.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: &lt;em&gt;Sectors and blocks may or may not be the same and either may be used to describe a chunk on disk or a logical structure.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;my question is how we can read those sectors (or how they are stacked) when the floppy or hd is reading data from it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By positioning on the track, and reading the headers. Each sector is prefixed by a header with track and sector number (*4). After positioning the headers are read. If it's the wrong track, the head gets repositioned (*5), if it's the right one, headers get read until the desired sector is found.&lt;/p&gt;&#xA;&lt;p&gt;Within a track, logical sectors can come in arbitrary order. While sectors are of course always sequential, their logical number can be ordered different. Basically any drive and OS can operate with any sequence. Though, depending on hard and software, a sector my need some time for post processing before being able to read the next. So after processing the first sector, the next header it 'sees' ma be the third, as the header of the second has  already passed, forcing the OS to look for almost a full rotation.&lt;/p&gt;&#xA;&lt;p&gt;This can be leveled by simply interleaving &lt;em&gt;logical&lt;/em&gt; sectors on a track. So instead of putting the logical sectors 1, 2, 3, 4 into the physical (sequential) sectors 1, 2, 3, 4, They are put on the track as 1, 3, 2, 4. Now reading two (logically) consecutive sectors only need the time for 3 sectors, not a whole track time plus two. This technique is called sector skewing.&lt;/p&gt;&#xA;&lt;p&gt;As a result, logical block made up of sectors like mentioned above may not be stored in consecutive physical sectors on a disk. Apple PASCAL for example stored the logical sectors as 0, 8, 1, 9 ... but a block was formed from sector 0 and 1, making them interleave (*6)&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: &lt;em&gt;Sectors and blocks may come in any order in multiple layers of abstraction.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;As said, all of your drawings may apply.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Well, in the real beginning there was the punch card :)&lt;/p&gt;&#xA;&lt;p&gt;*2 - As assumed, some very early system did really use 80 byte blocks to make it look like punch cards!&lt;/p&gt;&#xA;&lt;p&gt;*3 - A page is a memory page of 4096 bytes, used for virtual memory as well.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Track/sector number, or some other kind of unique ID for the block is always present.  But there is/may be other meta data as well. It may include things like block keys, file numbers or alike. Presence depends much on the OS/machine used.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Yes, that is a thing. For one head position is usually tracked by counting steps, but they may get out of sync, so checking and repositoning is helpful. Also, with more and denser tracks, drive mechanics did run into mechanical issues of exact positioning, so (some) drives started to use a multi precicion aproach. The motor positioned the head roughly in the right direction, followed by a secondary mechanic for fine positioning, correcting any over or undershoot.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Let's not touch 13 sector format here :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-14T13:46:48.890" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14423" PostTypeId="2" ParentId="14418" CreationDate="2020-04-14T11:49:53.143" Score="4" Body="&lt;p&gt;&quot;Block&quot; has nothing to do with the &lt;em&gt;physical&lt;/em&gt; layout of a CP/M disk. There are just tracks and sectors. Block refers to an allocation unit, which is a logical grouping of sectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, a single-density, single-sided 8&quot; disk contains 77 tracks, each divided into 26 sectors, for a total of 2002 sectors. A sector is the smallest amount of data that can be read or written at a time. Each sector holds 128 bytes of data, so the whole disk holds a grand total of 256,256 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, two entire tracks are reserved on every disk to hold system code (boot sector, bios, and CP/M itself). This leaves 75 tracks (1950 sectors, or 249,600 bytes) for the disk directory and file data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the total amount of data is just under 256k bytes. If space is allocated to files 1k (8 sectors) at a time, then each &quot;allocation unit&quot; or &quot;block&quot; can be described by a single byte. This was chosen as a reasonable compromise between the size of a directory entry and the total number of files that could be stored on a single disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A directory entry is 32 bytes, and contains 16 bytes of allocation information. (Files larger than 16k bytes require multiple directory entries, referred to as &quot;extents&quot;.) The directory typically occupies the first two blocks (2k bytes), which is enough space for 64 entries. This leaves 241 blocks (241k bytes) for actual file data &amp;mdash; 96.3% of the raw disk space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So a single disk can hold up to 64 files of between 1k and 16k bytes each, or fewer larger files. Note that 1950 is not a multiple of 8, which means that the last 6 sectors of the disk cannot be accessed via CP/M &amp;mdash; they are simply wasted as far as the filesystem is concerned. The only way to access them is via direct calls to the bios.&lt;/p&gt;&#xA;" OwnerUserId="4183" LastEditorUserId="4183" LastEditDate="2020-04-14T11:59:11.400" LastActivityDate="2020-04-14T11:59:11.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14424" PostTypeId="1" AcceptedAnswerId="14427" CreationDate="2020-04-14T13:37:18.297" Score="8" ViewCount="422" Body="&lt;p&gt;In the late 1980's, Intel offered the 82768 graphics chip, with specific support for windowed environments. I remember it being covered in Byte magazine, but don't remember seeing any applications of the chip. The chip &lt;a href=&quot;https://archive.org/details/bitsavers_inteldataBcsCoprocessorUsersManual_13669379/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;datasheet&lt;/a&gt; covered a range of applications, ranging from low end 80186/82768 shared-memory machines through high end workstations that used multiple 82768 chips each with dedicated VRAM to get to higher resolutions and color depths. (The datasheet also discussed how the chip could be used as a rasterizer for a printer.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What sorts of machines used this chip in reality, and what type of commercial performance did Intel achieve with this chip?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Datasheet here: &lt;a href=&quot;https://archive.org/details/bitsavers_inteldataBcsCoprocessorUsersManual_13669379/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/bitsavers_inteldataBcsCoprocessorUsersManual_13669379/mode/2up&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="4522" LastEditorUserId="808" LastEditDate="2020-04-17T18:47:58.870" LastActivityDate="2020-04-17T18:47:58.870" Title="Which computers used the Intel 82786 graphics chips, and what sort of commercial success did that chip attain?" Tags="&lt;hardware&gt;&lt;graphics&gt;&lt;intel&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14425" PostTypeId="2" ParentId="3188" CreationDate="2020-04-14T14:17:23.087" Score="2" Body="&lt;h2&gt;Do it parallel&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Change a jumper on an IBM PC Parallel Card so it can do bidirectional parallel.  Then use the PET User Port for 8-bit parallel communication, with handshake.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did exactly so we could use an Atari 8-bit system as a cross-development station for C64 and VIC.  It was simplicity itself: connect the eight 6522 data lines and 2 handshake lines from the User Port to three of the Atari's game controller ports (also reversible).   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here, you would just do the same thing to the jumpered IBM PC Parallel Interface Adapter. &lt;/p&gt;&#xA;" OwnerUserId="4330" LastActivityDate="2020-04-14T14:17:23.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14426" PostTypeId="2" ParentId="14418" CreationDate="2020-04-14T16:24:17.767" Score="6" Body="&lt;p&gt;There's a number of terms which partially overlap here, and of course some people use the wrong word for a particular concept due to incomplete understanding.  I'll summarise all the terms I can think of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Block&lt;/strong&gt;: the data residing on a single &lt;em&gt;sector&lt;/em&gt; of a single &lt;em&gt;track&lt;/em&gt;.  This is typically between 128 and 512 bytes for floppy drives, depending on the vintage of the format, but recent hard disks have increased it to 4096 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Track&lt;/strong&gt;: the circle on a disk surface described by a single &lt;em&gt;head&lt;/em&gt; in a single &lt;em&gt;cylinder&lt;/em&gt; position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Sector&lt;/strong&gt;: a pie-shaped section of the disk, usually an integer subdivision of the total rotation, aligned to one or more reference marks (a physical hole in the disk on 8&quot; and 5.25&quot; floppies, some other means on other types).  Some older disks are &lt;em&gt;hard sectored&lt;/em&gt; with a reference mark per sector.  It is possible (and usual nowadays) to have different sector counts at different cylinders, eg. on the Commodore 1541 and Apple ProDOS formats, provided the disk is &lt;em&gt;soft sectored&lt;/em&gt; with only one reference mark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Colloquially, &lt;em&gt;sector&lt;/em&gt; may sometimes be used to refer to a &lt;em&gt;block&lt;/em&gt; (see above) but this is technically incorrect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Head&lt;/strong&gt; or &lt;strong&gt;Side&lt;/strong&gt;: generally there is one head per disk surface.  Some old floppy drives have only one head, and it is necessary to flip the disk to use the other surface.  Floppy drives can usually step the head to about 40 or 80 &lt;em&gt;cylinders&lt;/em&gt;, hard drives to a larger number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Cylinder&lt;/strong&gt;: a logically-cylindrical grouping of all tracks at a given head position.  The drive may not need to seek the heads in order to access any block/track/sector in the same cylinder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, a &lt;strong&gt;block&lt;/strong&gt; can be described by its &lt;strong&gt;cylinder&lt;/strong&gt;, &lt;strong&gt;head&lt;/strong&gt;, and &lt;strong&gt;sector&lt;/strong&gt; coordinates, often abbreviated CHS.  Colloquially for floppy drives, the term &lt;em&gt;track&lt;/em&gt; may be used interchangeably with &lt;em&gt;cylinder&lt;/em&gt;, but strictly speaking &lt;strong&gt;track&lt;/strong&gt; is the intersection of cylinder and head coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the filesystem level, several consecutive disk blocks may be handled as a single entity.  This is most often associated with FAT, in which it is called a &lt;strong&gt;cluster&lt;/strong&gt;.  This has been perpetuated in the Microsoft family, but in Linux the distinction is instead drawn between a &lt;strong&gt;filesystem block&lt;/strong&gt; (ie. a cluster) and a &lt;strong&gt;disk block&lt;/strong&gt; (as defined above).&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-05-09T19:27:56.750" LastActivityDate="2020-05-09T19:27:56.750" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14427" PostTypeId="2" ParentId="14424" CreationDate="2020-04-14T16:43:44.050" Score="7" Body="&lt;p&gt;&lt;a href=&quot;https://books.google.fr/books?id=yDsEAAAAMBAJ&amp;amp;lpg=PA1&amp;amp;hl=fr&amp;amp;pg=PA23#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;The August 10, 1987 issue of InfoWorld&lt;/a&gt; lists a number of boards which were announced at that year’s SIGGRAPH:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Univision Technologies’ UDC-803&lt;/li&gt;&#xA;&lt;li&gt;Bell Technologies’ Blit Express&lt;/li&gt;&#xA;&lt;li&gt;Vermont Microsystems’ Page Manager 100&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The first two were workstation-style cards, supporting respectively 1600×1280 and 1664×1200, designed to work on the ISA bus; the latter was more publishing-oriented, supporting monochrome 1024×1024. At least the Blit Express and Page Manager 100 required specific monitors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Blit Express made an appearance in &lt;a href=&quot;http://bitsavers.org/pdf/bellTechnologies/Bell_Technologies_MPE_386_System_Guide_1987.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bell Technologies’ MPE&lt;/a&gt; workstations, supporting 1664×1200 monochrome graphics or 640×480 with 8-bit colour, on specific Bell monitors. It was supported by &lt;a href=&quot;https://archive.org/stream/InteractiveUNIXDocumentation/INTERACTIVE_UNIX_System_V386_r32v30_X11_Runtime_System_Guide&quot; rel=&quot;nofollow noreferrer&quot;&gt;Interactive Unix 2.2 and later&lt;/a&gt; and various other Unix implementations, using the &lt;code&gt;Xwge&lt;/code&gt; X server, at least in monochrome. Drivers were available for Microsoft Windows and NeWS as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This system makes an appearance in &lt;a href=&quot;https://archive.org/details/bitsavers_microCornua50Nov89_15917522/page/n47&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micro Cornucopia issue 50&lt;/a&gt;, running Intel Unix (after Intel bought Bell Technologies), but I haven’t found any benchmarks of its graphical capabilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get the impression these graphics adapters didn’t fare too well against the TI 34010-based competition. (Intriguingly, Number Nine produced one adapter in their Pepper range &lt;a href=&quot;http://www.cpu-world.com/forum/viewtopic.php?p=281303&amp;amp;sid=bDPMY_ZU3JRVy8f9gT_mi8U1QEzlZ2kOAZGrSLHzFQmj.e52uHXmJTiyYqQuQ_il#281303&quot; rel=&quot;nofollow noreferrer&quot;&gt;which used &lt;em&gt;both&lt;/em&gt; 34010 and 82768 chips&lt;/a&gt;, but all their other TIGA adapters used TI chips only.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Bell Technologies shouldn’t be confused with Bell Labs of course.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-04-16T11:33:29.547" LastActivityDate="2020-04-16T11:33:29.547" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14428" PostTypeId="2" ParentId="14374" CreationDate="2020-04-14T17:16:13.693" Score="1" Body="&lt;p&gt;Unix-style shells are optimized for environments with a lot of files in a relatively stable and fast to access, but complex structure - essentially, shells are programming languages that use files and directories as their main data type.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You found simple shell style environments on early office computers running CP/M and similar systems (still much more expensive systems than small home computers), more sophisticated ones on large Unix-driven machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Storage devices that kept enough files on line at a time for shell style languages to be optimal were out of economic reach for the typical early 8 bit hobbyist system user.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2020-04-14T17:16:13.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14429" PostTypeId="1" AcceptedAnswerId="14437" CreationDate="2020-04-14T18:06:35.857" Score="7" ViewCount="436" Body="&lt;p&gt;How can I get a IIgs to print to a modern printer? The IIgs is running &lt;a href=&quot;http://www.whatisthe2gs.apple2.org.za/appleworks-gs&quot; rel=&quot;noreferrer&quot;&gt;Appleworks GS&lt;/a&gt; under System 6.0.3 with 2 MB of RAM and a &lt;a href=&quot;http://www.whatisthe2gs.apple2.org.za/microdrive-ide&quot; rel=&quot;noreferrer&quot;&gt;hard disk&lt;/a&gt;. Ethernet is an option as I have a &lt;a href=&quot;https://en.wikipedia.org/wiki/LocalTalk-to-Ethernet_bridge&quot; rel=&quot;noreferrer&quot;&gt;LocalTalk to Ethernet&lt;/a&gt; adaptor, specifically a &lt;a href=&quot;https://web.archive.org/web/20010207190844/http://www.farallon.com/products/ether/adapters/ewmprad_dis.html&quot; rel=&quot;noreferrer&quot;&gt;Farallon EtherWave Printer Adapter&lt;/a&gt;. The printer is a HP Deskjet 2655, which is on the wireless network with my Macbook Pro. The background is that due to the current emergency I've designated the IIgs for my third grader's word processing. The ideal printing solution can be complicated to setup, as I'm a programmer, but should be seamless to use.&lt;/p&gt;&#xA;" OwnerUserId="175" LastEditorUserId="175" LastEditDate="2020-04-14T19:45:56.620" LastActivityDate="2020-05-14T10:53:56.157" Title="How to print from a IIgs to a modern printer?" Tags="&lt;apple-iigs&gt;&lt;printer&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14430" PostTypeId="2" ParentId="503" CreationDate="2020-04-14T19:10:31.993" Score="3" Body="&lt;h3&gt;Summary&lt;/h3&gt;&#xA;&lt;p&gt;I come up with 6298 raw bytes (or &amp;quot;nybbles&amp;quot;, &lt;a href=&quot;https://www.folklore.org/StoryView.py?project=Macintosh&amp;amp;story=Nybbles.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;as Woz called them&lt;/a&gt;)&#xA;per track at 300 RPM with tolerance for speed variation of 1.5%.&lt;/p&gt;&#xA;&lt;p&gt;Below I discuss:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;drive speed,&lt;/li&gt;&#xA;&lt;li&gt;how many bits can fit on a track,&lt;/li&gt;&#xA;&lt;li&gt;what &amp;quot;nybbles&amp;quot; really are,&lt;/li&gt;&#xA;&lt;li&gt;compare my theoretical capacity calculations for various rotational&#xA;speeds with Nick Westgate's experimental results (spoiler: they're&#xA;within 0.2%), and&lt;/li&gt;&#xA;&lt;li&gt;calculate the actual maximum data storage of an Apple II diskette.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;Drive Speed&lt;/h3&gt;&#xA;&lt;p&gt;The Disk II system uses a &lt;a href=&quot;https://archive.org/stream/bitsavers_shugartSA4eManualApr1979_2873568#page/n8/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Shugart SA400 drive&lt;/a&gt; which rotates&#xA;at a fixed rate of 300 RPM, so it is constant angular velocity.&#xA;(Actually, it's the SA400 drive mechanism with a custom analog&#xA;electronics board; the drive without Shugart's electronics is&#xA;sometimes called the SA390. But that makes no difference for this&#xA;question.)&lt;/p&gt;&#xA;&lt;h3&gt;Bits per Track&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Beneath Apple DOS on page 3-7 briefly mentions 50,000 bits but&#xA;doesn't provide any details oh this number was calculated.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That number comes from either a simple calculation based on the&#xA;IBM-standard FM and MFM data rates for floppy drives or just directly&#xA;from the Shugart specification for the SA400 drive.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The IBM 3740 single-density format &lt;em&gt;data bit&lt;/em&gt; rate is 125 kHz. Since&#xA;this uses FM encoding that's 125,000 pairs per second of clock bit&#xA;followed by data bit, which works out to 8 μs per pair or 4 μs per&#xA;bit of clock or data.&lt;/li&gt;&#xA;&lt;li&gt;The IBM System 34 double-density format uses MFM which irregularly&#xA;intersperses clock bits with data bits. So in this case they specify&#xA;the &amp;quot;data + clock&amp;quot; rate as 250 kHz, which works out to the same&#xA;result: 4 μs per bit of clock or data. (Simply using fewer clock&#xA;bits is why &amp;quot;double-density&amp;quot; stores more data.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/stream/bitsavers_shugartSA4eManualApr1979_2873568#page/n8/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Page 4 of the SA400 Service Manual&lt;/a&gt; gives the number of&#xA;bits per track as 25,000. This would clearly have been just the data&#xA;bits that could be stored with FM encoding, since they mention later&#xA;on that page a soft-sector format of 18 sectors × 128 bytes, which&#xA;would be 36,864 bits on the diskette after FM encoding. (Plus&#xA;overhead of well over 2000 bits, from the diagram on the following&#xA;page.) That manual appears to be too early to have mentioned MFM&#xA;encoding.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;&amp;quot;Nybbles&amp;quot;&lt;/h3&gt;&#xA;&lt;p&gt;Before going further we need to discuss these so-called &amp;quot;nybbles.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;The Disk II controller always reads an 8-bit chunk of data every 32&#xA;cycles; I call this a &amp;quot;raw byte.&amp;quot; For various reasons, there are only&#xA;66 different 8-bit sequences that the disk controller can read while&#xA;maintaining synchronization (or fewer for the older controller PROMs&#xA;and DOS ≤3.2), which is why we need to encode our data.&lt;/p&gt;&#xA;&lt;p&gt;(If you want more detail, &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14417/7208&quot;&gt;this answer&lt;/a&gt; goes a bit deeper into&#xA;the reasons for this. The truly gory details are in Chapter 9 of Jim&#xA;Sather's &lt;em&gt;Understanding the Apple II&lt;/em&gt;; see &lt;a href=&quot;https://archive.org/stream/Understanding_the_Apple_II_1983_Quality_Software#page/n256/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 9-27&lt;/a&gt; for a&#xA;list of the raw byte values that can be used while maintaining sync.)&lt;/p&gt;&#xA;&lt;p&gt;Because Woz originally used an FM encoding to store 4 bits of data in&#xA;every raw byte written to the diskette, he originally called these&#xA;post-encoding raw bytes, &amp;quot;nybbles.&amp;quot; Before the first Apple II DOS&#xA;release the encoding system for data bytes was changed to store 5 bits&#xA;of data in every raw byte (and eventually 6 bits, with DOS 3.3 and a&#xA;controller PROM change), but the name appears to have stuck. However,&#xA;to avoid confusion with the other standard terminology of a&#xA;&amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Nibble&quot; rel=&quot;nofollow noreferrer&quot;&gt;nibble&lt;/a&gt;&amp;quot;-with-an-&amp;quot;i&amp;quot; as a 4-bit chunk of data, I will&#xA;henceforth refer to the 8-bit chunks stored on the diskette and read&#xA;by the controller as &amp;quot;raw bytes.&amp;quot;&lt;/p&gt;&#xA;&lt;h3&gt;Bits and Raw Bytes per Track&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Beneath Apple DOS (fourth printing) Figure 3.3 states it takes 4 μs&#xA;(microseconds) to read 2 consecutive bits off the disk.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, it's 4 μs for a &lt;em&gt;single&lt;/em&gt; bit. The figure in the fourth printing&#xA;is incorrect; this was &lt;a href=&quot;https://archive.org/stream/Beneath_Apple_DOS_alt#page/n7/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;fixed in the fifth printing&lt;/a&gt;. More&#xA;details are given &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14417/7208&quot;&gt;in this answer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is no doubt where the 6,250 raw byte (or so-called nybble)&#xA;figure came from: 200 ms for a track rotation at 300 RPM divided&#xA;by 4 μs gives 50,000 bits per track, and that divided by eight&#xA;bits gives 6,250.&lt;/p&gt;&#xA;&lt;p&gt;But even that's not quite correct: it's really 4 &lt;em&gt;clock cycles&lt;/em&gt; per&#xA;bit. Since the Apple II clock is 1.023 MHz, that's 3.91 μs per bit,&#xA;which gives us a track capacity at 300 RPM of 51,150 bits, or 6393 raw&#xA;bytes. We can do the calculations for other rotational speeds as well,&#xA;which I have done in the following table. I've chosen the same speed&#xA;values as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/664/7208&quot;&gt;Nick Westgate did in his answer&lt;/a&gt;; you'll note how&#xA;close my calculated values are to his experimentally determined values&#xA;in the &lt;code&gt;raw exp&lt;/code&gt; column.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;1 rotation  RPM   bits   raw bytes  raw exp  difference&#xA;-------------------------------------------------------&#xA;   188 ms   319   48081    6010      6015      +0.08%&#xA;   200 ms   300   51150    6393      6400      +0.11%&#xA;   210 ms   286   53708    6713      6715      +0.03%&#xA;   220 ms   273   56265    7033      7045      +0.17%&#xA;   230 ms   261   58823    7352      7360      +0.11%&#xA;   240 ms   250   61381    7672      7680      +0.10%&#xA;   250 ms   240   63938    7992      8004      +0.15%&#xA;   260 ms   231   66496    8312      8309      -0.04%&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3&gt;Maximum &amp;quot;Safe&amp;quot; Raw Bytes per Track&lt;/h3&gt;&#xA;&lt;p&gt;I've not seen any documents that discuss the acceptable speed ranges&#xA;for Disk II drives, but I can try a rough calculation. The read output&#xA;signal for a &lt;code&gt;1&lt;/code&gt; bit from the drive is a 1 μs pulse that must be&#xA;detected within 4 μs of the previous bit (see &lt;a href=&quot;https://archive.org/stream/Understanding_the_Apple_II_1983_Quality_Software#page/n258/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 9-29&lt;/a&gt; of&#xA;&lt;em&gt;Understanding the Apple II&lt;/em&gt; for details, and correct me if I'm&#xA;wrong).&lt;/p&gt;&#xA;&lt;p&gt;The drive will fully resync at the starting &lt;code&gt;1&lt;/code&gt; bit of a raw byte (see&#xA;the discussion of byte framing in, again, &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14417/7208&quot;&gt;this answer&lt;/a&gt;), so&#xA;that that means that the drive can't slow more than about half a&#xA;microsecond over the course of 8 bits, or about 1.5%.&lt;/p&gt;&#xA;&lt;p&gt;Using this figure, we get a minimum drive speed of 197 ms per&#xA;rotation: 50383 bits or 6298 raw bytes per track.&lt;/p&gt;&#xA;&lt;h3&gt;Maximum data storage per track.&lt;/h3&gt;&#xA;&lt;p&gt;Since we've done all this, it's interesting and easy enough to&#xA;calculate the maximum number of (encoded) data bytes we can store on a&#xA;track. If we decide to go with a full-track format (one huge sector&#xA;per track) we need just 50 bits for synchronization (details again in&#xA;this &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/14332/7208&quot;&gt;question&lt;/a&gt; and &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14417/7208&quot;&gt;answer&lt;/a&gt;) and the rest can be data.&#xA;At 50383 bits per track we have 50333 remaining after the sync bits,&#xA;all of which we can use to store GCR 6+2 encoded data:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;      50,333 bits&#xA;÷ 8 =  6,291 raw bytes&#xA;× 6 = 37,749 encoded bits&#xA;÷ 8 =  4,718 encoded bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Multiply by 35 tracks and this would give us a total capacity of&#xA;161.25 KB/disk. Round down just a bit for safety and it seems that&#xA;160 KB is the maximum you could ever pack on to an Apple II floppy.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2021-03-19T06:27:12.807" LastActivityDate="2021-03-19T06:27:12.807" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14431" PostTypeId="2" ParentId="14363" CreationDate="2020-04-15T01:24:06.400" Score="2" Body="&lt;p&gt;If you are asking for Apple II emulators, most are cross-platform. I won't list them all, but there are more than a couple:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://wsxyz.net/applewin.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;AppleWin NTSC&lt;/a&gt; — runs on Linux (using Wine) and Windows.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://deadc0de.org/apple2ix/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple2ix&lt;/a&gt; — runs on Linux/Raspberry Pi.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://paleotronic.com/software/microm8/&quot; rel=&quot;nofollow noreferrer&quot;&gt;microM8&lt;/a&gt; — runs on Linux/Raspberry Pi and Windows.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://sourceforge.net/projects/java-ace/&quot; rel=&quot;nofollow noreferrer&quot;&gt;JACE&lt;/a&gt; — runs on anything that runs Java.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://cmosher01.github.io/Epple-II/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Epple-II&lt;/a&gt; — runs on Linux/Raspberry Pi and Windows.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://modapple.buric.co/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MoDapple&lt;/a&gt; — runs on Windows.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://dapple.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;EMU][ - p.k.a. Dapple ][&lt;/a&gt; — runs on Linux/Raspberry Pi.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://linapple.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;LinApple&lt;/a&gt; — runs on Linux/Raspberry Pi.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://kegs.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;KEGS&lt;/a&gt; — runs on Linux/Raspberry Pi and Windows.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://devernay.free.fr/apple2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;KEGS-SDL&lt;/a&gt; — runs on Linux/Raspberry Pi and Windows.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://sourceforge.net/projects/gsport/&quot; rel=&quot;nofollow noreferrer&quot;&gt;GSport&lt;/a&gt; — cross-platform&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://apple2.gs/plus/&quot; rel=&quot;nofollow noreferrer&quot;&gt;GSplus&lt;/a&gt; — runs on Linux/Raspberry Pi and Windows.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.zophar.net/apple2/xgs-32-xgs-dos.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;XGS 32&lt;/a&gt; — runs on Windows.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.codeplex.com/?p=virtu&quot; rel=&quot;nofollow noreferrer&quot;&gt;Virtu&lt;/a&gt; — runs on Silverlight which runs on Windows.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.netfront.net:6502/&quot; rel=&quot;nofollow noreferrer&quot;&gt;YAE&lt;/a&gt; — runs on Linux/Raspberry Pi.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There is also a way of &lt;a href=&quot;https://glasstty.com/wiki/index.php/Using_MAME_to_Emulate_the_Apple_II%2B&quot; rel=&quot;nofollow noreferrer&quot;&gt;Using MAME to Emulate the Apple II+&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6741" LastActivityDate="2020-04-15T01:24:06.400" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14433" PostTypeId="2" ParentId="13468" CreationDate="2020-04-15T07:26:36.303" Score="0" Body="&lt;p&gt;If you have a modern PC with a floppy drive, i would suggest downloading Ontrack Disk Manager here: &lt;a href=&quot;https://www.philscomputerlab.com/ontrack-disk-manager.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.philscomputerlab.com/ontrack-disk-manager.html&lt;/a&gt; (download 9.57 .exe file). Then:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Go into 386 bios and set HDD to &quot;Not Installed&quot;&lt;/li&gt;&#xA;&lt;li&gt;Run Ontrack Disk Manager from floppy&lt;/li&gt;&#xA;&lt;li&gt;Let it detect your harddrives&lt;/li&gt;&#xA;&lt;li&gt;install it (I don't remember it very well, but ther should be an option to partition or install or something like that)&lt;/li&gt;&#xA;&lt;li&gt;After it's done, reboot your computer&lt;/li&gt;&#xA;&lt;li&gt;It should now boot from the HDD with the full capacity&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="17847" LastActivityDate="2020-04-15T07:26:36.303" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14434" PostTypeId="2" ParentId="14429" CreationDate="2020-04-15T08:41:00.417" Score="6" Body="&lt;p&gt;I don't know if I can say this for 100% certainty for every HP printer ever, but in general Hewlett Packard printers that support HP's own Page Control Language (PCL), which as far as I know is every one of them, has built-in fallback support for monospaced lineprinter mode when the device is first turned on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally all you need to do is spew raw text at the printer engine, and it will spit out a monospaced page when the internal page buffer is full. The final page will not come out until you issue a form feed to print what remains in the page buffer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HP inkjet or laser/LED printer models ending at about the year 2000 included a special dedicated button to manually issue a form feed, and also usually an indicator that the buffer was filling with data but won't be printed until the page buffer is full.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HP LaserJet 4 control panel from 1992, with a Form Feed button and indicator light:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Gl8bf.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gl8bf.jpg&quot; alt=&quot;Cite: Image is in the public domain from Wikimedia Commons.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the modern printers with only one button, either this is not possible, or some combination of pressing or holding that one button sends the form feed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All modern PCL drivers are sending escape sequences and commands that switch the printer out of its default lineprinter mode and into the modern PCL world of scalable outline fonts, bitmapped graphics, color, job control like duplex and stapling, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem is getting the data to the printer, which now usually only have USB or ethernet in the basic cheap models. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have Ethernet but there some more fiddling to do, because typically there is a micro-controller computer that sits on the Ethernet connection and communicates back to the originating device, which was previously known as HP JetDirect and was a plug-in upgrade module, but now is just included by default as part of the printer logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/039KM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/039KM.jpg&quot; alt=&quot;Creative Commons Attribution-Share Alike 3.0 Germany, by https://commons.wikimedia.org/wiki/User:Starwhooper -- Image URL: https://commons.wikimedia.org/wiki/File:HP_jetdirect_610n.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to open communications with JetDirect and then pass the data through it to the printer's data buffer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fortunately, the most common form of this is port 9100 TCP raw printing, which is what Windows uses if no specific manufacturer's driver is available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quoting a randomly Googled Xerox help page: &lt;a href=&quot;http://www.office.xerox.com/userdoc/WC4265/phlink/raw_tcpip_printing.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.office.xerox.com/userdoc/WC4265/phlink/raw_tcpip_printing.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Raw TCP/IP is used to open a TCP socket-level connection over Port&#xA;  9100, and stream a print-ready file to the printer input buffer. It&#xA;  then closes the connection either after sensing an End Of Job&#xA;  character in the PDL or after expiration of a preset timeout value.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Port 9100 does not require an LPR request from the computer or the use&#xA;  of an LPD running on the printer. Raw TCP/IP printing is selected in&#xA;  Windows as the Standard TCP/IP port.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also: &lt;a href=&quot;http://danieru.com/2013/06/06/what-is-port-9100-how-to-print-to-it/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://danieru.com/2013/06/06/what-is-port-9100-how-to-print-to-it/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The genius of port 9100 is in the pure reality that no other network printing protocol can be simpler. Even printing over UDP would complicate the process by requiring a END_OF_PRINT_JOB instruction. Instead port 9100 treats the TCP’s closure as the submit command.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;You can try printing over port 9100 yourself by running from the&#xA;  command line:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ netcat PRINTER_IP 9100&#xA;$ Hello World&#xA;$ &amp;lt;Ctrl+c&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For an inkjet or laser printer, I don't know if this example will eject the monospaced line printer page automatically. You may need to manually issue a form feed via the printer control panel to get it to print the page, or issue the form feed as a control character included at the end of your print job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also typically there are settings in the printer that define the width of the page, the number of lines per page, the built-in printer font to be used for printing, and so forth. Once again, for the older printers, there is a menu typically labeled PCL that lets you set these defaults.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These settings ONLY apply for the line printer mode. Once a modern computer switches into the advanced PCL language capabilities it ignores these settings. I do not know how you can directly access it for a modern printer with a minimalist 1 or 2 button user interface on the printer itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may possibly be able to open the network address of the printer as a web page and then review / adjust these settings in there. You may also be able to telnet or SSH to the printer network address to configure it through a command line.&lt;/p&gt;&#xA;" OwnerUserId="3687" LastEditorUserId="3687" LastEditDate="2020-05-14T10:53:56.157" LastActivityDate="2020-05-14T10:53:56.157" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14436" PostTypeId="1" CreationDate="2020-04-15T11:05:13.590" Score="4" ViewCount="168" Body="&lt;p&gt;I have an early Apple IIc, model A2S4000 with the 342-0272 motherboard&#xA;and ROM 255. (I am considering upgrading the ROM, perhaps with a&#xA;switch that would let me switch between different ROM versions.)&lt;/p&gt;&#xA;&lt;p&gt;I'm thinking I'd like to connect something like a Motorola MC6821 PIA&#xA;(4 I/O addresses) or MOS 6522 VIA (16 I/O addresses) to my Apple IIc.&#xA;I pick these chips as typical examples; the general idea applies to&#xA;anything similar, such as another ACIA or whatever.&lt;/p&gt;&#xA;&lt;p&gt;(Note that this question is not looking for XY challenges proposing&#xA;ways to connect I/O through means that don't resemble direct access to&#xA;an IC on the system bus; that's not what I'm investigating right now.)&lt;/p&gt;&#xA;&lt;p&gt;On a &amp;quot;non-c&amp;quot; Apple II this is no big deal; just plop the chip on a&#xA;board with whatever additional logic you need, plug it in and Bob's&#xA;your uncle. The Apple II even provides dedicated address space and&#xA;decoding for the chip's I/O addresses and ROM, if ROM is necessary.&#xA;(It's not in my case, though it would be nice to have if possible.)&lt;/p&gt;&#xA;&lt;p&gt;However the IIc doesn't have actual slots, and much of the address&#xA;space is allocated to internal hardware. This leads to the following&#xA;questions (and perhaps others I've not thought of).&lt;/p&gt;&#xA;&lt;p&gt;Is there any non-decoded  address space in the Apple IIc? (I.e.,&#xA;addresses that when accessed don't enable any hardware, including RAM&#xA;or ROM.) In the &lt;em&gt;Apple IIc Technical Reference Manual&lt;/em&gt; &lt;a href=&quot;https://archive.org/stream/Apple_IIc_Technical_Reference_Manual#page/n343/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tables B-5&#xA;through B-9&lt;/a&gt; list plenty of &amp;quot;Reserved&amp;quot; blocks, such as&#xA;$C020-$C02F (onboard I/O area) and $C0B0-$C0FF (slots 3 through 7 I/O&#xA;areas). Reading those two blocks returns semi-random values, which one&#xA;would expect if those blocks are not decoded. If there are addresses I&#xA;can safely use for my hardware, what are they? Or need I pull some&#xA;tricks with my peripheral design to disable on-board hardware (perhaps&#xA;temporarily, the way the &lt;a href=&quot;https://wiki.reactivemicro.com/No-Slot_Clock&quot; rel=&quot;nofollow noreferrer&quot;&gt;No-Slot Clock&lt;/a&gt; does) in order to find&#xA;address space I can use for my hardware's control and data registers?&lt;/p&gt;&#xA;&lt;p&gt;What are my options for connecting to the address and data buses and&#xA;necessary control lines? A typical choice seems to be to build a&#xA;&amp;quot;shim&amp;quot; that goes between a chip and the board, the way the &lt;a href=&quot;https://wiki.reactivemicro.com/No-Slot_Clock&quot; rel=&quot;nofollow noreferrer&quot;&gt;No-Slot&#xA;Clock&lt;/a&gt; does with the ROM or the &lt;a href=&quot;https://www.a2heaven.com/webshop/index.php?rt=product/product&amp;amp;path=73&amp;amp;product_id=146&quot; rel=&quot;nofollow noreferrer&quot;&gt;RAM Express II A2S4000&lt;/a&gt;&#xA;does with the CPU. What are the best chips with which to do this, both&#xA;in terms of the signals available on their sockets (or board pads) and&#xA;physical clearance? Are there other options for physical connectivity?&#xA;(I am open to the idea of modifying the board to some degree, such as&#xA;via soldering connectors to it.) For example, there seems to be a full&#xA;set of unused pads around the GLU chip. How about options that bring&#xA;the lines outside of the case, to plug in to an external board?&lt;/p&gt;&#xA;&lt;p&gt;I'll also need some sort of address decoding for my chip select. Is&#xA;there any on-board decoding I can &amp;quot;steal&amp;quot; to do part of the work, or&#xA;need I fully decode the entire address on my hardware?&lt;/p&gt;&#xA;&lt;p&gt;Are there any other concerns here that I've missed?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-17T04:29:43.133" Title="How can I connect a PIA or VIA chip to the Apple IIc?" Tags="&lt;apple-ii&gt;&lt;hardware-mods&gt;" AnswerCount="0" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14437" PostTypeId="2" ParentId="14429" CreationDate="2020-04-16T05:22:52.843" Score="4" Body="&lt;p&gt;Les Barrows posted this comment in &lt;a href=&quot;https://www.facebook.com/groups/AppleIIGSEnthusiasts/?post_id=3035541213337206&quot; rel=&quot;nofollow noreferrer&quot;&gt;a thread&lt;/a&gt; on the &lt;a href=&quot;https://www.facebook.com/groups/AppleIIGSEnthusiasts&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIGS Enthusiasts&lt;/a&gt; Facebook group:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I've been able to make my HP OfficeJet Pro 8730 printer work in GS/OS&#xA;  using Harmonie PCL drivers and Treehugger via an Uthernet II card.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And &quot;bhtooefr&quot; posted this comment in &lt;a href=&quot;https://www.applefritter.com/content/what-needed-utilize-current-day-printer-apple-iigs-rom-3s-cpu&quot; rel=&quot;nofollow noreferrer&quot;&gt;a thread&lt;/a&gt; on the &lt;a href=&quot;https://www.applefritter.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;applefritter&lt;/a&gt; forum:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Usually, if I'm on the IIGS, and I need to print, I'm probably in a&#xA;  GS/OS program. And, if that's the case, I've got the Uther, I've got&#xA;  Treehugger, and I've got Independence, a third-party printer driver&#xA;  package, with the LaserJet III driver installed.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;And, that LaserJet III driver will work with any modern PCL5 or PCL5e&#xA;  printer, and will print in monochrome on any PCL5c or PCL 6 Standard&#xA;  printer (mainly because PCL5 has no concept of color, and that's what&#xA;  the LJ3 supports.)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;My printer is a Brother HL-2070N, which natively speaks PCL5e, and&#xA;  also does Epson FX-850 and IBM ProPrinter XL protocols, as a bonus -&#xA;  basically, if you can get the data into it, anything can print to it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So it seems that &lt;a href=&quot;http://www.whatisthe2gs.apple2.org.za/harmonie-2-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Harmonie&lt;/a&gt; and &lt;a href=&quot;http://www.whatisthe2gs.apple2.org.za/independence&quot; rel=&quot;nofollow noreferrer&quot;&gt;Independence&lt;/a&gt; are third-party printer driver packages supporting PCL, and &lt;a href=&quot;http://krue.net/treehugger/&quot; rel=&quot;nofollow noreferrer&quot;&gt;treehugger&lt;/a&gt; is &quot;a GS/OS Printer Port driver which supports the AppSocket/JetDirect protocol.&quot; (Cool!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That applefritter thead also mentions that &quot;&lt;a href=&quot;http://www.whatisthe2gs.apple2.org.za/pointless-v2-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pointless&lt;/a&gt; is a useful program that removes jaggies in early postscript implementations&quot;, so that might (or might not) come in handy. Read the whole thread.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Ok, so I chatted with Les Barrows and he had some further advice.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;TreeHugger requires TCP/IP support in GS/OS. That means a working&#xA;  &lt;a href=&quot;http://www.apple2.org/marinetti/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Marinetti&lt;/a&gt; stack with a means of connecting to the printer.&#xA;  &lt;a href=&quot;http://www.a2retrosystems.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Uthernet II&lt;/a&gt; is probably the easiest/most available approach at the&#xA;  moment.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[Michael Shopsin's] bridge is for Appletalk, and for that you need to&#xA;  set up an Appletalk zone for it to connect to. Then you need a PAP&#xA;  print server. Netatalk can do both of these things. &lt;a href=&quot;http://ivanx.com/a2server/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a2server&lt;/a&gt; has them&#xA;  already set up.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;However, configuring PAP is interesting. The papd needs to be able to&#xA;  communicate with the printer, and I always found it flaky.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;AppleTalk/LocalTalk is its own networking system based on an RS422&#xA;  serial link. At least it was originally, and EtherTalk was the&#xA;  original implementation that bridged to Ethernet. Since he has the&#xA;  bridge, he could use that. If he has an old Mac he could probably host&#xA;  a print server on that too, assuming the Mac could print to his new&#xA;  printer.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;At that point it's questionable whether he'd want his daughter using&#xA;  the IIgs over the Mac.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As you can see, Les is the expert, not me, but I've tried to quote verbatim or summarize everything from him and the other sources. Of course, I always encourage people to submit their own answers or at least comment on StackExchange. It's an uphill battle. ; - )&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2020-04-16T07:39:03.823" LastActivityDate="2020-04-16T07:39:03.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14438" PostTypeId="1" AcceptedAnswerId="14446" CreationDate="2020-04-16T09:41:23.077" Score="60" ViewCount="4030" Body="&lt;p&gt;One of my favorite videos ever is a &lt;a href=&quot;https://www.youtube.com/watch?v=pmfHHLfbjNQ&quot; rel=&quot;noreferrer&quot;&gt;tribute&lt;/a&gt; to Radiohead &quot;Nude&quot; by James Houston. I have never seen the program in the video available to download, so I've just made an attempt to extract it myself. Here are the steps I tried:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Grabbed the audio using &lt;code&gt;youtube-dl&lt;/code&gt; by specifying the &quot;best audio&quot; mode, not downloading the video.&lt;/li&gt;&#xA;&lt;li&gt;Trimmed the audio file to the ZX-Spectrum blocks using Audacity.&lt;/li&gt;&#xA;&lt;li&gt;Mixed the stereo channel into a mono (Audacity).&lt;/li&gt;&#xA;&lt;li&gt;Resampled the audio file to 44100 using &lt;code&gt;sox&lt;/code&gt; (I probably did something wrong but I couldn't save the resampled audio with Audacity).&lt;/li&gt;&#xA;&lt;li&gt;Normalized the audio to 0dB (Audacity; there's a click in the audio so the normalization effect gained not really much -- is it a blocker?).&lt;/li&gt;&#xA;&lt;li&gt;Converted the result audio to a TZX file using &lt;code&gt;tzxwave&lt;/code&gt; from the &lt;code&gt;tzxtools&lt;/code&gt; toolkit.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The program in the extracted TZX file does not produce the exact tune that can be heard in the video, so I definitely did some mistakes in the middle (no &quot;R Tape loading error&quot; though). Here is what I was able to extract (in Base64): &lt;a href=&quot;https://pastebin.com/3hBLbCzx&quot; rel=&quot;noreferrer&quot;&gt;https://pastebin.com/3hBLbCzx&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What were my mistakes trying to extract the program in 100% accuracy?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I forgot to mention that I only converted the &quot;best audio&quot; &lt;code&gt;youtube-dl&lt;/code&gt; was able to download from OPUS to WAV in order to process that WAV file, not the OPUS one. I'm still not sure about the entire audio &quot;pipeline&quot; configuration before decoding the audio into a TZX file. So, I'm thinking of two ways:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;either my audio processing &quot;pipeline&quot; is wrong so that &lt;code&gt;tzxwave&lt;/code&gt; extracts what it actually can (+ there are some more options in &lt;code&gt;tzxwave&lt;/code&gt; that I didn't experiment with);&lt;/li&gt;&#xA;&lt;li&gt;or the video features a perfect (despite lossy back to the early YouTube days) audio that &lt;em&gt;may&lt;/em&gt; provide a real 100% working program, but the featured program generates a tune that slightly differs from what can be heard in the video &lt;em&gt;by design&lt;/em&gt; (no intention to share a program track source by the author, copyright grounds, whatever). Why? No idea. &lt;code&gt;tzxwave&lt;/code&gt; might do some corrections fixing &quot;R Tape loading error&quot; itself in certain cases, but I'm not sure about this too because I had tape loading errors multiple times before getting an audible result I shared with PasteBin.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="17861" LastEditorUserId="3290" LastEditDate="2020-04-26T12:50:38.850" LastActivityDate="2020-04-26T12:50:38.850" Title="How do I extract the program from the Radiohead &quot;Nude&quot; tribute by James Houston?" Tags="&lt;zx-spectrum&gt;&lt;cassette-tape&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14439" PostTypeId="1" AcceptedAnswerId="14441" CreationDate="2020-04-16T09:46:15.567" Score="11" ViewCount="290" Body="&lt;p&gt;Are there any tricks that can be used to invert the carry flag on the 6800, in as few bytes as possible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the shortest subroutine I've come up with, which is straight forward:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;INVC:  BCS CLEAR&#xA;       SEC&#xA;       RTS&#xA;CLEAR: CLC&#xA;       RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15661" LastEditorUserId="15661" LastEditDate="2020-04-16T10:39:43.710" LastActivityDate="2020-04-16T22:25:24.430" Title="Inverting the carry flag on an M6800" Tags="&lt;assembly&gt;&lt;6800&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14441" PostTypeId="2" ParentId="14439" CreationDate="2020-04-16T10:01:00.670" Score="10" Body="&lt;p&gt;Shortest coding  (I came up so far):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   Instruction Bytes Cycles&#xA;   TPA         1     2       Transfer P(rocessor status) to (accumulator) A&#xA;   EOR A,#$01  2     2       Invert bit 0 (carry bit) using exclusive OR&#xA;   TAP         1     2       Transfer (accumulator) A back to P(rocessor status)&#xA;              ---   ---&#xA;               4     6&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Of course this will only work if A is available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without your solution is a good start. Speed should be the same.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;And then Supercat came along with &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14439/inverting-the-carry-flag-on-an-m6800/14441?noredirect=1#comment47754_14441&quot;&gt;two really nifty ideas&lt;/a&gt; using ROL/ROR to get access to carry and flip it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solution A:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   Instruction Bytes Cycles&#xA;   ROL A       1     2       Shift C(arry) into acc A bit 0, save bit 7 in carry&#xA;   EOR A,#$01  2     2       Invert bit 0 (carry bit) using exclusive OR&#xA;   ROR A       1     2       Shift bit 0 back into C(arry) and restore bit 7&#xA;              ---   ---&#xA;               4     6&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It is as compact and fast as my solution, but preserves the content of acc A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solution B:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   Instruction Bytes Cycles&#xA;   ROL B       1     2       Shift C(arry) into acc B bit 0&#xA;   INC B       1     2       Increment by 1 always flips the lowest bit (*)&#xA;   ROR B       1     2       Shift bit 0 back into C(arry)&#xA;              ---   ---&#xA;               3     6&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(* &lt;code&gt;0 + 1 = 1&lt;/code&gt;; &lt;code&gt;1 + 1 = (1)0&lt;/code&gt;. The cool ways of binary)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This as well preserves A (but destroyes B) but saves another byte, while still performing in 6 cycles.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-04-16T22:25:24.430" LastActivityDate="2020-04-16T22:25:24.430" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14442" PostTypeId="1" AcceptedAnswerId="14449" CreationDate="2020-04-16T10:39:05.157" Score="7" ViewCount="834" Body="&lt;p&gt;Does anyone know of a good, modern Motorola 6800 assembler?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I've used dasm, which I quite like (and it's even actively developed), but it doesn't actually support 6800. It supports 6803, which is very similar, but I've already been burned once (it assembles extended JSR to the zero-page into the 6803-only direct JSR, which incidentally shares its opcode with the 6800's undocumented HCF instruction...). Not the biggest problem as long as you're aware of it, I suppose.&lt;/li&gt;&#xA;&lt;li&gt;Crasm is also an option, but it only assembles S-Code files, not binary files, which is a bit of a hassle. Also not the biggest problem.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Are there any other good ones?&lt;/p&gt;&#xA;" OwnerUserId="15661" LastEditorUserId="3290" LastEditDate="2020-04-26T12:50:34.983" LastActivityDate="2020-04-26T12:50:34.983" Title="What 6800 assembler to use?" Tags="&lt;assembly&gt;&lt;6800&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14443" PostTypeId="2" ParentId="14442" CreationDate="2020-04-16T11:27:06.790" Score="5" Body="&lt;p&gt;The one I'm using on Windows is vasm: &lt;a href=&quot;http://sun.hasenbraten.de/vasm/&quot; rel=&quot;noreferrer&quot;&gt;http://sun.hasenbraten.de/vasm/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;vasm is a portable and retargetable assembler to create linkable objects in various formats or absolute code. Multiple CPU-, syntax and output-modules can be selected.&lt;/p&gt;&#xA;&lt;p&gt;Many common directives/pseudo-opcodes are supported (depending on the syntax module) as well as CPU-specific extensions.&lt;/p&gt;&#xA;&lt;p&gt;The assembler supports optimizations (e.g. choosing the shortest possible branch instruction or addressing mode) and relaxations (e.g. converting a branch to an absolute jump when necessary).&lt;/p&gt;&#xA;&lt;p&gt;Most syntax modules support macros, include directives, repetitions, conditional assembly and local symbols.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It supports many CPUs, among them several flavours of the 6800 family:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;6800 family (6800, 6801, 6803, 68HC11)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It can create binary files without any header or format, or platform-specific object files.&lt;/p&gt;&#xA;&lt;p&gt;It is also actively maintained. I'm using it for 68k family with great success.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-16T11:27:06.790" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14444" PostTypeId="1" CreationDate="2020-04-16T12:31:52.410" Score="3" ViewCount="442" Body="&lt;p&gt;In high school, I programmed on a terminal that was retro THEN, and I need help remembering make and model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;White screen, black text (seemed very unusual to me), no lowercase, 24x80, and I have this vague memory of &quot;orange&quot;, the casing, the keyboard, something.  This was 1982, but I'm guessing the terminal was mid-1970's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used it as a dumb terminal only with a Data General machine, but the terminal was not DG.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone help me?  I'm hoping the black-on-white screen is unusual enough to ring some bells.&lt;/p&gt;&#xA;" OwnerUserId="17863" LastEditorUserId="17863" LastEditDate="2020-04-18T12:55:18.960" LastActivityDate="2020-04-18T12:55:18.960" Title="What 1970's terminal was black on white and had an orange keyboard?" Tags="&lt;history&gt;&lt;crt-monitor&gt;&lt;terminal&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14446" PostTypeId="2" ParentId="14438" CreationDate="2020-04-16T13:03:24.517" Score="50" Body="&lt;p&gt;First, many thanks for the great question. This may well be my favourite retrocomputing video of them all, so I contemplated having a look at the executable for a while myself. So, this is what I did:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;To download the audio, I went to the same YouTube video and used &lt;a href=&quot;https://www.4kdownload.com/products/product-videodownloader&quot; rel=&quot;noreferrer&quot;&gt;4K Video Downloader&lt;/a&gt; (mainly because it clearly shows which audio is the original one, so that I can avoid an extra re-recompression stage).&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I trimmed the relevant audio using Audacity, just like you did. The contents of the right channel has a large DC offset, so I assumed that the left channel must be closer to the original signal:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/e6LEr.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/e6LEr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The quality of the signal is pretty low, but to a significant extent this is due to its very low amplitude. In the areas of pilot tone the signal is quite clean:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/H4uZA.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/H4uZA.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;At the same time, where the actual data is recorded, the quality of signal is pretty poor, with rectangular shapes strongly distorted, I'd guess mostly due to the .mp3 compression:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/43RxH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/43RxH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Having said that, I think it is also clear that signals are distinguishable, with the bits in my screenshot being 0,1,0,0,1,1,... etc. This gives us hope that something can be recovered here.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There are many programs created for recovery of tape data from audio files. One of the more recent ones is called &lt;a href=&quot;https://zx-pk.ru/threads/25002-taperecover.html&quot; rel=&quot;noreferrer&quot;&gt;TapeRecover&lt;/a&gt;, written by Andrei Titov (use Chrome to translate the page from Russian). I used this specific program because several people mentioned to me that it works well. It requires a very particular kind of input file: 48K mono .wav file. Transcoding from one discretization frequency to another is not a particularly great step to make, but I had no choice here.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As we might have expected, the program struggled to recover the data from our original file. So, I prepared another one, with +40db amplification and hard clipping, to get closer to the shape these signals were supposed to have originally. This is what the resulting data looked like:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Yktqf.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Yktqf.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;This turned out to be sufficient to recover the original data, which you can download here: &lt;a href=&quot;http://introspec.retropc.ru/other/james%20houston%20-%20big%20ideas.tap&quot; rel=&quot;noreferrer&quot;&gt;http://introspec.retropc.ru/other/james%20houston%20-%20big%20ideas.tap&lt;/a&gt;. I verified it and can see that the binary is 100% the same as the one you recovered, so this is reassuring.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Of course, I couldn't just stop here and had a look at what it does. It turns out that the file plays music on AY8912 chip that was installed into every variation of ZX Spectrum with 128K of memory. The actual driver that plays music is extremely primitive; technically, it is a simple .psg-like player. .psg file format describes the values that have to be written into the sound chip during each interrupt cycle (which happen at frequency close to 50Hz). Since the information is stored as register values, the original editable file cannot be easily recovered. This is the disassembly of the player in case you are interested:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; this player is, effectively, the v-blank interrupt handler.&#xA;; it is automatically called approximately 50 times per second&#xA;&#xA;    ld hl,(CurPos)      ; current position in the track&#xA;&#xA;FrameLoop:&#xA;    ld a,(hl) : or a : jr nz,SkipFrame&#xA;&#xA;        inc hl : ld a,(hl)&#xA;        cp #FF : jr z,CommandFF     ; end-of-track marker&#xA;        cp #FE : jr z,CommandFE&#xA;&#xA;        ; the actual data is a pair of two numbers:&#xA;        ; a register number...&#xA;        ld bc,#FFFD : out (c),a&#xA;        ; ...followed by the register value&#xA;        inc hl : ld a,(hl)&#xA;        ld b,#BF : out (c),a : inc hl&#xA;        jr FrameLoop&#xA;&#xA;SkipFrame:  ; non-zero bytes are decremented until we get to zero,&#xA;    ; i.e. they define a wait time in frames.&#xA;    ; this means in particular, that the data gets destroyed&#xA;    ; during playback (repeated playback is not possible!)&#xA;    ld (CurPos),hl&#xA;    dec a : ld (hl),a&#xA;    ei : ret&#xA;&#xA;CommandFE:  ; the purpose of this command is not clear&#xA;    ; (it simply silently skips some bytes)&#xA;    ; luckily, it is never actually used&#xA;    inc hl : inc hl : ld (CurPos),hl&#xA;    ei : ret&#xA;&#xA;CommandFF:  ; at the end of the track colour&#xA;    ; the border black and freeze&#xA;    xor a : out (254),a&#xA;    jr $&#xA;&#xA;CurPos:     dw MusicPSG     ; current position in the track&#xA;&#xA;MusicPSG:   ; music data follows here&#xA;    ; (32841-42169,9329)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, listening to the tune it is clear that not only the main &quot;voice&quot; of the melody is coming out. I know that your assumption has been that it must mean that your capture has been somehow incorrect. However, I do not think that the chances for this are all that high. We used two different methods and recovered identical result. In addition, somewhat tuneless sounds you can hear - they may well be tuneless because they may be driving devices that introduce further distortions (i.e. detuning may be necessary to get them in tune).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my opinion, all voices you can hear in the video - rhythm section on the printer, base line on the scanner (with the only exception of vocals) - are originally driven by ZX Spectrum's sound chip. My guess is that sound channels which would normally be joined together and outputted onto the speaker have been separated and used to drive other devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last but not least, do not forget that the video itself has been edited and processed. Just as a somewhat relevant anecdote, I was the main coder for the MMCM's chiptune album: &lt;a href=&quot;https://mmcm.bandcamp.com/album/the-blossoming-years&quot; rel=&quot;noreferrer&quot;&gt;The Blossoming Years&lt;/a&gt;. Track 24 of this album is an electronic version of the album, effectively, tape recording of the demo program for 48K ZX Spectrum with an external AY interface. The album was released on the same day as the accompanying demo. However, the demo was not fully ready at the time when the album was being mastered, so as the result, the version of the demo &#xA;that you will find by recovering Track 24 is not the same as &lt;a href=&quot;https://www.pouet.net/prod.php?which=65367&quot; rel=&quot;noreferrer&quot;&gt;the demo that was actually released&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE (18/04/2020)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, I really liked the theory that ZX Spectrum's AY chip was driving all these devices in the video, but sadly it is not the case. My checks of the music data seemed to indicate that instruments &quot;jump&quot; from channel to channel. This tends to happen when the track is not hand-made, but auto-generated from another format, most likely MIDI. Hence, I did a search for MIDI converters for playing tunes back on ZX Spectrum and found this thread on World of Spectrum: &lt;a href=&quot;https://worldofspectrum.org/forums/discussion/10256/ann-midi2ay-0-1#latest&quot; rel=&quot;noreferrer&quot;&gt;midi2ay 0.1&lt;/a&gt;. (The program is no longer available from Geocities, but Archive.org &lt;a href=&quot;https://web.archive.org/web/2009*/http://es.geocities.com/qllaria/midi2ay/midi2ay-0.1.zip&quot; rel=&quot;noreferrer&quot;&gt;still has it&lt;/a&gt;.) The converter takes a .mid file and generates a corresponding .tap image automatically. In fact, the source of the assembly re-player there is also included with the program, from which you can immediately see that it is 100% identical to the re-player we downloaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall, then, my conclusion is as follows: the music was made elsewhere. The converted midi file loaded into ZX Spectrum and apparently playing in the video is highly unlikely to actually participate in the final mix.&lt;/p&gt;&#xA;" OwnerUserId="5039" LastEditorUserId="5039" LastEditDate="2020-04-18T20:52:46.613" LastActivityDate="2020-04-18T20:52:46.613" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="14448" PostTypeId="2" ParentId="14370" CreationDate="2020-04-16T15:02:05.480" Score="0" Body="&lt;p&gt;The answer to this is unknown.  Test your particular part under a variety of conditions (over all possible temperature, voltage, duty cycle, IO loading ranges, etc.) to get a better guess.  But who knows how representative your sample is?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back then, the tools and NMOS processes were not characterized well enough for the total leakage of a circuit the size of a 6502 to be more than an educated wild guess at some point on a statistical distribution based on some crude (by todays standards) models.  Chip tester time back then was likely too valuable to specifically test this parameter.  So any timing derived from the data sheet for this parameter was probably just a good guess that turned out to be successful enough to not to require the data sheet(s) to be revised.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2020-04-16T15:02:05.480" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14449" PostTypeId="2" ParentId="14442" CreationDate="2020-04-16T17:19:34.677" Score="7" Body="&lt;h3&gt;The MacroAssembler AS&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I use &lt;a href=&quot;http://john.ccac.rwth-aachen.de:8000/as/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Macroassembler AS&lt;/a&gt;. It's modern, multiplatform (Unix, Windows, DOS) with macros and all that other good stuff, still supported and under development, and supports an amazing variety of CPUs (around 60), including modern MCUs such as Amtel AVR. It's very nice to be able to use the same assembler for all one's 8- and 16-bit development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Output is to its own record-based format, &lt;code&gt;.p&lt;/code&gt; files. Tools are provided to generate binary and hex record files from those, but I found the format simple enough that I just wrote a bit of Python code to handle conversion for my various needs, which included loading code into an emulator/unit test framework and generating Apple II binary files with a check for overlapping records. (You can find the code in my &lt;a href=&quot;https://github.com/0cjs/8bitdev&quot; rel=&quot;nofollow noreferrer&quot;&gt;8bitdev&lt;/a&gt; repo.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though it doesn't have a public development repo, I help maintain &lt;a href=&quot;https://github.com/KubaO/asl&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;KubaO/asl&lt;/code&gt; on GitHub&lt;/a&gt; where we import every release on to the &lt;code&gt;upstream&lt;/code&gt; branch. You can easily fetch this if you want to build it yourself and perhaps hack on it. There's also some fetch and build support under the &lt;code&gt;tool/&lt;/code&gt; directory in my 8bitdev repo above, since the build/test script there automatically downloads and builds the tools it needs.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;ASxxxx Cross Assemblers&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I've also tried out the &lt;a href=&quot;http://shop-pdp.net/ashtml/asxxxx.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASxxxx assembler suite&lt;/a&gt;, which generates relocatable binary files and has a linker, but I found in the end that for multiplatform work it's easier just to re-assemble than deal with linking (often different assembly parameters are needed for different platforms), and on modern hardware assemblers are so blazingly fast that there's no difference in build time. I also found the slightly odd syntax mildly annoying.&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="7208" LastEditDate="2020-04-17T05:05:17.457" LastActivityDate="2020-04-17T05:05:17.457" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14450" PostTypeId="2" ParentId="12254" CreationDate="2020-04-16T18:10:33.423" Score="3" Body="&lt;p&gt;This will be tricky and pose significant differences, so I want to ask: &lt;em&gt;why?&lt;/em&gt; What is it that you hope to achieve?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I presume it is not about price, as media cost is not very significant today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it for a set of installed apps or games? If so, can you do it once and then clone it to another card?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The principle driver that matters is the disk controller. So long as they have the same make/model, it should work. But each time, it will go through a cycle of reboots as it detects and re-detects graphics card, sound card, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BIOS settings only specify which disk, so the first active partition will be the one that boots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use a boot manager, such as PartitionMagic's BootMagic, to offer a menu allowing you to pick between 2 different installs in different partitions. But if you go to such lengths, then why not just use 2 CF cards? It would be much easier.&lt;/p&gt;&#xA;" OwnerUserId="209" LastActivityDate="2020-04-16T18:10:33.423" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14451" PostTypeId="2" ParentId="14444" CreationDate="2020-04-16T18:41:07.037" Score="3" Body="&lt;p&gt;SOLVED:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am thinking of the &lt;a href=&quot;https://www.electroprops.co.uk/73/Computing/Stylish-period-computer-terminal-ADDS-with-orange-keys-P2354.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ADDS Consul 980&lt;/a&gt;, from 1974:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The display was black on white.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It did support lowercase. Solomon Slow is correct. The Data General C/150 certainly supported &quot;console characteristics&quot; which could disable lowercase transmission (i.e. it would convert lowercase bytes to uppercase before transmitting them to the terminal), and I did know this at the time. But, for whatever reason, I never noticed this machine had lowercase.  Why our system operator disabled lowercase, I don't know, but it was disabled as well on our long-serving VT52 which also supported lowercase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, bright orange keys.  I don't recall the cursor control and numeric keypads, but everything else rings a bell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Walter Mitty suggests it might be a VT-100.  The classroom was filled with mostly Data General Dasher D200 terminals, with three oddballs.  One of the oddballs was a VT-52; that one I remember.  That's why I know the one I'm seeking was not a VT-100; it would have been too similar.  The VT-52, incidentally, was a nice little terminal.  I didn't like it at the time because it was too incompatible with DG software, but I could write custom software for it that was pretty cool.  (The third oddball was an Apple ][ rigged up as a dumb terminal.  That was horrible, and I only used that if everything else was taken.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I'm pretty sure now that it's an ADDS Consul 980, and I thank all of you for contributing.&lt;/p&gt;&#xA;" OwnerUserId="17863" LastEditorUserId="17863" LastEditDate="2020-04-17T00:14:03.407" LastActivityDate="2020-04-17T00:14:03.407" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14452" PostTypeId="1" CreationDate="2020-04-17T15:25:17.917" Score="4" ViewCount="400" Body="&lt;p&gt;BACKGROUND:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1985, I took an evening class in APL at the local IBM as part of a high school Explorer Post (which was really cool, these guys giving up their time to teach us programming).  Other than this, I am woefully inexperienced in computing on IBM machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, this was 1985, so the monitors and keyboards were already set up for us to just work without overstriking.  HOWEVER, I proved to have some small talent at APL programming, so the guy took me aside and said he wanted to get me going on APL2, and gave me a complete set of manuals.  (&quot;We only have two copies of these.  One we're keeping, and one is now yours.&quot;  Like I said, really cool guys.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The keyboards were NOT set up for the new APL2 functions and operators and so a form of &quot;overstriking&quot; was needed by typing two symbols with an underscore in between.  On the older monitors, that's how it was rendered, as three characters and you just had to remember that this represented a single symbol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But they had a handful of newer monitors that when any of these APL2 specific characters were entered with &quot;overstriking&quot;, the symbols would sort of gloomph together and be rendered as a single-character APL2 function or operator despite there not being a key for it on the keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know what that monitor might have been?  I assume this was handled as a form of hi-res graphics, since I doubt these symbols were in the monitor's character set.  A pittance of Google research has said that the 3179G was available around that time, and it had hi-res graphics.  But I honestly have no memory of the model I used to program APL2 in those days.&lt;/p&gt;&#xA;" OwnerUserId="17863" LastEditorUserId="17863" LastEditDate="2020-04-18T12:10:35.157" LastActivityDate="2020-08-01T13:53:19.163" Title="What monitor could render APL2 characters in 1985?" Tags="&lt;crt-monitor&gt;&lt;terminal&gt;&lt;identify-this-computer&gt;&lt;apl&gt;" AnswerCount="3" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="14453" PostTypeId="2" ParentId="5772" CreationDate="2020-04-17T18:42:23.187" Score="2" Body="&lt;p&gt;Inkey$ is read each time it is used, as such could be different each time in the if equation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The line 10 and 20 combination is latch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This combination was used rather than the Input command which stop the program and waited foe a user responce.  This latched inkey$ method allows some program to keep running while a user can input and control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem I used to find with Inkey$ is that the longer the basic program was the slower it scanned Inkey$, and the latch would get sloppy and misread, even with the A$ storage method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So programmers put the Inkey$ latch &amp;lt;&gt; = into a Def Fn command and called it via Function, which helped the scan sloppyness, but at a cost of the Def Fn taking up some of the memory so less lengthy basic programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way was to make the Inkey$ latch &amp;lt;&gt; = into machine code and called the check via say Command  USR 60000 and then used the result = A$ and used that.   Ie making a new command ie Stick or keyboard, which was better than using command Input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are alot of hacks to the Input command, you can use it like the Echo command in DOS and use it not for user entry but like the Print command or goto or call machine code and If to itself again to stop break command being used and the User hack crashing a machine code program to basic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some program used Inkey$ USR to call machine code so if inkey$ every got to call a check then the machine would crash rather than letting the user default back to Basic and hacking or Saving the program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Def FN and USR commands are quite powerful in Sinclair Basic and can do more than designed to do by doing weird equations.   So one actually did chess in Basic in one line using Def FN command.&lt;/p&gt;&#xA;" OwnerUserId="17878" LastActivityDate="2020-04-17T18:42:23.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14454" PostTypeId="2" ParentId="5772" CreationDate="2020-04-17T22:19:36.647" Score="0" Body="&lt;p&gt;Basically, INKEY$ is not a variable (though it looks like one) but a &lt;strong&gt;function call&lt;/strong&gt;.  The logic of the program is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1: While any key is pressed, wait.&#xA;2: While no key is pressed, wait.&#xA;3: Print the key that is currently pressed.&#xA;4: Go back to step 1.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you eliminate step 1, then whenever you have a key pressed, step 2 will immediately terminate, and proceed to step 3, and this tight loop will repeat continuously - until you release the key, when step 2 becomes effective again.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-04-17T22:19:36.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14455" PostTypeId="2" ParentId="14404" CreationDate="2020-04-17T22:55:48.627" Score="10" Body="&lt;p&gt;In the UK my dial-up connection (from 1996) was accessible to anyone whilst connected. I didn't use a firewall on my MS-DOS computer. However, due to paying per-minute phone charges to dial in (in addition to a fixed monthly charge from my ISP), I only used the connection in batch mode for email and Usenet news (no Web) so I wasn't online for very long. (I would dial in and my Internet software would automatically transfer any email or news then logoff. I would read it offline and any replies would be sent on the next login.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I changed to a broadband connection (in 2006) with a cable modem and a MS-Windows PC I used a firewall (ZoneAlarm) which did detect external attacks. I added a router, to get wifi. The combination of NAT and an internal firewall in the router meant that ZoneAlarm no longer saw any attacks.&lt;/p&gt;&#xA;" OwnerUserId="9177" LastEditorUserId="9177" LastEditDate="2020-04-18T11:27:56.383" LastActivityDate="2020-04-18T11:27:56.383" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14456" PostTypeId="2" ParentId="14404" CreationDate="2020-04-17T23:08:55.830" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;When connecting to the Internet via Dial-Up, were computers directly accessible via their allocated IP address?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sometimes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, my first internet connection was via a small ISP that used static address allocation from public address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This was mid-1990s; at that time &quot;you can't attack a service that isn't running&quot; seemed to be sufficient)&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-04-17T23:08:55.830" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14457" PostTypeId="1" AcceptedAnswerId="14458" CreationDate="2020-04-18T02:16:58.383" Score="34" ViewCount="7969" Body="&lt;p&gt;This question may have the apparent form of a question soliciting a &quot;list&quot; answer, but I'm expecting the list to be very short, so please bear with me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What &quot;unusual&quot; syntax assembly languages are/were there?  My reason for asking this was that the first assembly language programming I did was on the English Electric KDF9, whose weird and wonderful assembly syntax is described below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That needs some explanation for sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most assembly languages for current handware follow a fairly similar lexical stucture.  The opcode maps to a alpahbetic symbol (occasionally augmented by digits or a couple of other characters, for example period or underscore)., generally suggesting a verb. An instruction has an optional label, followed by the opcode symbol, followed by the operands. The operands may include a handful of symbols which indicate indexing, indirection, address mode, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, despite the variation in specifics, the general pattern is like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LABEL:  LOAD REG,FOO&#xA;        ADD REG,BAR&#xA;        STORE REG,FOO &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So that's the sort of pattern I'm not interested in, for this question. A few weird delimiters added to the above don't count either.            &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In prestandard days, though, there were sometimes interesting variations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Example 1&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.findlayw.plus.com/KDF9/The%20Software%20of%20the%20KDF9.pdf&quot; rel=&quot;noreferrer&quot;&gt;KDF9 Usercode&lt;/a&gt;, admittedly a fairly impoverished assembly language (no arbitrary user-defined symbols!) had what has been described as 'distributed syntax'.  For example, an indexed load from memory to stack (&quot;nest&quot; in KDF9 terminoolog) is written like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;V42M7Q;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;'V42' is the name of some data item (no arbitrary user-defined symbols!), M7 means 'modified by register 7', and Q means that the modifier is to be incremented afterwards.  (Where other machines had 'index registers', KDF9 had 'Q-registers', divided into modifier, counter, and increment parts, uxeful for indexing, base addresses, counting, and array access).  The operation was implicitly a fetch; store would be indicated by '='.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding two numbers would thus look like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;V42;  V43; +;  =V42;  (FOO = FOO + BAR);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is &quot;fetch V42 to stack; fetch V43 to stack; add top 2 stack words and leave sum on stack; pop stack and store in V42&quot;.  The addition operation is indicated by '+' and not by, say, 'ADD'.  It's a zero-address machine so the operands are implciit. The parenthetical clause is a comment.  And newlines have no significance - this was fairly common in papertape cultures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were some data-manipulation instructions that did use 'words' for them, when there was no reasonably mnemonic symbol in the Flexowriter repertoire.  For example, &lt;code&gt;DUP;&lt;/code&gt; duplicated the top-of-stack value (i.e., pushed another copy on the stack).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Example 2&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ethw.org/The_University_of_Manchester_MU5_Computer_System&quot; rel=&quot;noreferrer&quot;&gt;Manchester University's MU5&lt;/a&gt; also had an interesting syntax. The addition example would be written as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      ACC = FOO&#xA;      ACC + BAR&#xA;      ACC =&amp;gt; FOO&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;ACC is the name of a machine register, obviously the accumulator. The rest of the symbols should be self-explanatory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Bio note: I have programmed on the KDF9. I never met the MU5, though it was discussed in undergrad courses as an exciting example of a machine designed for higher-level languages, that the guys over in Manchester were inventing.  I know there's at least one MU5 programmer in this forum).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Not an example&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm excluding things like Turing's programming system at Manchester, since that just consisted in typing whatever teleprinter symbol made up the next 5 bits of the instruction stream.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So: was that the extent of the scenic detour off the highway to dull standardization, or are there other interesting examples?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clarification: for this question, the assembly language should have been intended in principle for human programmers to use to write programs. Languages only intended for communication between programs, say as communication between different stages of a programming system, are excluded.&#xA;Also, I'm only interested in actual code. No pseudo-ops, no directives, no macro definitions or calls, and not data declarations either.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-04-21T00:07:15.157" LastActivityDate="2020-11-19T15:03:54.007" Title="What &quot;unusual&quot; syntax assembly languages are/were there?" Tags="&lt;history&gt;&lt;assembly&gt;" AnswerCount="14" CommentCount="12" FavoriteCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="14458" PostTypeId="2" ParentId="14457" CreationDate="2020-04-18T03:09:32.030" Score="27" Body="&lt;h2&gt;Example 1&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The PDP-8 had only 8 kinds of instructions, but one of them was &quot;microcoded&quot; operate command: Different bits in this command would turn on different operations, which could be combined. Here's a list of the first group of such commands:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;7000 NOP   no operation&#xA;7001 IAC   increment acc&#xA;7002 BSW   byte swap (-&amp;gt; rotate twice)&#xA;7004 RAL   rotate acc and link left one&#xA;7006 RTL   rotate acc and link left two&#xA;7010 RAR   rotate acc and link right one&#xA;7012 RTR   rotate acc and link right two&#xA;7020 CML   complement link&#xA;7040 CMA   complement acc&#xA;7100 CLL   clear link&#xA;7200 CLA   clear acc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So if you wanted to clear the accumulator and then increment it, effectively loading the constant 1 into the accumolator, you could combine the opcodes:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CLA IAC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the assembler would OR the corresponding bit patterns to give you &lt;code&gt;7201&lt;/code&gt; as the octal opcode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same worked for all other combinations (but not all of them would do something useful).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Example 2&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There are CPUs that use a subset of Forth as their assembly language, and Forth is of course quite different from the &quot;standard&quot; assmbler syntax you describe in the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One relatively modern example is an FPGA implementation called &lt;a href=&quot;https://www.excamera.com/sphinx/fpga-j1.html&quot; rel=&quot;noreferrer&quot;&gt;J1 Forth CPU&lt;/a&gt;. &lt;a href=&quot;https://www.excamera.com/files/j1demo/docforth/basewords.fs.html&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; you can see how the Forth operations are defined in terms of this &quot;machine language&quot;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Example 3&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The CDC 6000 series had a variation of the &quot;standard&quot; assembly syntax where you could mix in an arithmetic symbol on the right hand side, making it more look like a mathematical formula. Also, the result register was part of the operand mnemonic. So&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BX1   X2 * X3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would calculate the logical product (&quot;AND&quot;) of registers X2 and X3 and store it in register X1, while&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BX1  -X2 + X3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would complement register X2, and then form the logical sum (&quot;OR&quot;) with register X3 and store it in register X1. Both of these had a single opcode each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FX1   X2 + X3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would calculate the floating point sum of X2 and X3, and store it in X1.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Example 4&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The IAS family (ENIAC etc.) also had an assembler notation that looked more mathematical. Note that no actual assembler as a program existed, these were translated by hand into opcodes. An example from &lt;a href=&quot;http://www.cs.colby.edu/djskrien/IASSim/&quot; rel=&quot;noreferrer&quot;&gt;this site&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; adds up the values n+...+3+2+1(+0) in a loop and stores&#xA;; the sum in memory at the location labeled &quot;sum&quot;&#xA;&#xA;loop:   S(x)-&amp;gt;Ac+  n    ;load n into AC&#xA;        Cc-&amp;gt;S(x)   pos  ;if AC &amp;gt;= 0, jump to pos&#xA;        halt            ;otherwise done&#xA;        .empty          ;a 20-bit 0&#xA;pos:    S(x)-&amp;gt;Ah+  sum  ;add n to the sum&#xA;        At-&amp;gt;S(x)   sum  ;put total back at sum&#xA;        S(x)-&amp;gt;Ac+  n    ;load n into AC&#xA;        S(x)-&amp;gt;Ah-  one  ;decrement n&#xA;        At-&amp;gt;S(x)   n    ;store decremented n&#xA;        Cu-&amp;gt;S(x)   loop ;go back and do it again   &#xA;&#xA;n:     .data 5  ;will loop 6 times total&#xA;one:   .data 1  ;constant for decrementing n&#xA;sum:   .data 0  ;where the running/final total is kept&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2&gt;Possible other examples&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I guess there's more, in particular for very early computers, assembler notation was all over the place. The reason for that is that the &quot;standard&quot; assembler notation makes it easy for an actual assembler program to do the translation. With translations done by hand, as in the above example, there is no pressure to make the notation easy to parse by a program.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-04-18T20:30:17.843" LastActivityDate="2020-04-18T20:30:17.843" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="14459" PostTypeId="1" AcceptedAnswerId="14469" CreationDate="2020-04-18T07:49:29.987" Score="9" ViewCount="523" Body="&lt;p&gt;Commodore A590 was a peripheral hard drive and memory expansion unit for Amiga 500/500+ computers. It provides SCSI and XT-harddrive controller and 2MB Fast Ram. &lt;a href=&quot;https://bboah.com/index.php?action=artikel&amp;amp;cat=59&amp;amp;id=2517&amp;amp;artlang=en&quot; rel=&quot;noreferrer&quot;&gt;Here is the Big Book of Amiga Hardware page for A590.&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the A590 manual, Kickstart 1.3 users can directly boot from the A590. This function was provided by the autoboot ROM installed on the device. On the other hand Kickstart 1.2 users had to use a bootable floppy disk because kickstart 1.2 doesn't have necessary drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also grabbed from some forum conversations, an updated version of FFS should also be installed on the hard drive. This was not mentioned in the manual because the setup disk makes it automatically. Apparently,  this is not required on Kickstart 2.01 and or later. Because updated FFS was already available in the system ROM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, how autoboot ROM and mentioned bootable floppy disk works? What should be installed in boot floppy and harddisk itself? Also, how is it possible to something required to use the hard disk can be installed to the very same disk? Why commodore didn't put it in the autoboot ROM?&lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="3290" LastEditDate="2020-04-26T12:50:49.650" LastActivityDate="2020-04-26T12:50:49.650" Title="How Amiga A590 autoboot ROM and bootable floppy disk works?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;hard-disk&gt;&lt;boot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14460" PostTypeId="1" AcceptedAnswerId="14462" CreationDate="2020-04-18T08:16:54.373" Score="1" ViewCount="224" Body="&lt;p&gt;I'm trying to write a tool for the 1994 SNES game Super Metroid that creates &quot;out of bound&quot; maps for each the game's rooms. To do so, first I need to extract the tile-by-tile data of each room. For example, the screen below shows 16 x 16 tiles, though of course the room itself is much bigger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7dIkd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7dIkd.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's this incredible &lt;a href=&quot;http://www.metroidconstruction.com/SMMM/#part-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;guide&lt;/a&gt; that details the ROM. Using it, I've found some example room data:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NwxxL.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NwxxL.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;* Actually, it goes beyond the highlighted area. I just don't know yet how many bytes are room data.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This room data is compressed though. The guide doesn't go into the details of decompression, and the only resource I can find about how to decompress that data is a .txt file uploaded in 2011 to romhacking.net. Here are its contents:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  +--------------------------------------------------------------------------------------------------------------+&#xA;  |=Decompression=Routine=[$80:B0FF-$80:B270]====================================================================|&#xA;  +--------------+-----+-----------+-------------------------+------------+--------------------------------------+&#xA;  |=Command=Name=|=Hex=|=Binary====|=Syntax==================|=Range======|=Notes================================|&#xA;  +--------------+-----+-----------+-------------------------+------------+--------------------------------------+&#xA;  |              | $00 | %00000000 |                         |            | Copies the next (# + 1) bytes from   |&#xA;  | Direct Copy  |  .. |  CMD..... | [%000xxxxx : xxxxx = #] | 1-32 bytes | Compressed Data (CD) to RAM.         |&#xA;  |              | $1F | %00011111 |                         |            |                                      |&#xA;  +--------------+-----+-----------+-------------------------+------------+--------------------------------------+&#xA;  |              | $20 | %00100000 |                         |            | Writes the next byte (# + 1) bytes   |&#xA;  | Byte Fill    |  .. |  CMD..... | [%001xxxxx : xxxxx = #] | 1-32 bytes | deep to RAM.                         |&#xA;  |              | $3F | %00111111 |                         |            |                                      |&#xA;  +--------------+-----+-----------+-------------------------+------------+--------------------------------------+&#xA;  |              | $40 | %01000000 |                         |            | Writes the next word (# + 1) bytes   |&#xA;  | Word Fill    |  .. |  CMD..... | [%010xxxxx : xxxxx = #] | 1-32 bytes | deep to RAM.                         |&#xA;  |              | $5F | %01011111 |                         |            |                                      |&#xA;  +--------------+-----+-----------+-------------------------+------------+--------------------------------------+&#xA;  |              | $60 | %01100000 |                         |            | Writes the next byte to RAM. Then    |&#xA;  | Sigma Fill   |  .. |  CMD..... | [%011xxxxx : xxxxx = #] | 1-32 bytes | adds 1 to that byte and writes it    |&#xA;  |              | $7F | %01100000 |                         |            | again...etc.  Writes (# + 1) times.  |&#xA;  +--------------+-----+-----------+-------------------------+------------+--------------------------------------+&#xA;  |              | $80 | %10000000 |                         |            | Copies (# + 1) bytes from the RAM    |&#xA;  | Library Copy |  .. |  CMD..... | [%100xxxxx : xxxxx = #] | 1-32 bytes | address provided in the next two     |&#xA;  |              | $9F | %10011111 |                         |            | bytes.                               |&#xA;  +--------------+-----+-----------+-------------------------+------------+--------------------------------------+&#xA;  |              | $A0 | %10100000 |                         | 1-32 bytes | Much like the Library Copy. The only |&#xA;  | EORed Copy   |  .. |  CMD..... | [%101xxxxx : xxxxx = #] | $7F:0000 - | difference is that all data copied   |&#xA;  |              | $BF | %10111111 |                         | $7F:FFFF   | is EORed with %11111111.             |&#xA;  +--------------+-----+-----------+-------------------------+------------+--------------------------------------+&#xA;  |              | $C0 | %11000000 |                         | 1-32 bytes | Subtracts next byte from Y, the RAM  |&#xA;  | Minus Copy   |  .. |  CMD..... | [%110xxxxx : xxxxx = #] | 0-255 from | offset, and copies (# + 1) bytes to  |&#xA;  |              | $DF | %11011111 |                         | current Y  | current Y. Can copy last tile.       |&#xA;  +--------------+-----+-----------+-------------------------+------------+--------------------------------------+&#xA;  |              | $E0 | %111 000 00--&amp;gt;Bits 8 9 of X (aka #) | 1-1024     | Extends the range of previous CMDs   |&#xA;  |              |     |      |||      --------------------- |      bytes | from 1-32, to 1-1024 bytes deep.     |&#xA;  |              |     |      CMD-----&amp;gt;Command Code. Any one |            |                                      |&#xA;  | Extended CMD |  .. |               of the previous 7 CMD | $7F:0000 - | Specifically, Bits 7-5 flag the ECMD,|&#xA;  |              |     |               patterns can go here. | $7F:FFFF   | &amp;amp; Bits 4-2 are interpreted as a CMD. |&#xA;  |              |     |               --------------------- |     RAM    | Bits 1-0 &amp;amp; the next byte are treated |&#xA;  |              | $FE | %111 111 11                         |            | as a 10-bit value for X, aka #.      |&#xA;  +--------------+-----+-----------+-------------------------+------------+--------------------------------------+&#xA;  |              |     |           |                         |            |                                      |&#xA;  | Terminate SR | $FF | %11111111 |       [%11111111]       |    ----    | Terminates Sub Routine               |&#xA;  |              |     |           |                         |            |                                      |&#xA;  +--------------+-----+-----------+-------------------------+------------+--------------------------------------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;** Full credit to um... UnicornPoop.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand each of these rows to be sequential instructions. What am I missing though to translate this into pseudocode that a non-&quot;old school&quot; programmer like myself can understand? For example, take this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Copies the next (# + 1) bytes from Compressed Data (CD) to RAM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What is &lt;code&gt;#&lt;/code&gt;? What exactly am I supposed to do to the room data, &lt;code&gt;01 00 0a e9 ...&lt;/code&gt;? Or what knowledge am I missing to understand what's going on here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="563" LastEditorUserId="56" LastEditDate="2020-04-18T14:44:52.833" LastActivityDate="2020-04-18T14:44:52.833" Title="How do I interpret these instructions for decompressing game data?" Tags="&lt;snes&gt;&lt;compression&gt;&lt;disassembly&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ClosedDate="2020-04-19T14:31:01.593" ContentLicense="CC BY-SA 4.0" />
  <row Id="14461" PostTypeId="2" ParentId="14460" CreationDate="2020-04-18T09:07:48.997" Score="5" Body="&lt;p&gt;Those codes have nothing to do with the CPU instructions. You write the program that interprets the compressed data according to the given rules to decompress it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The # is the bits marked with x in the commands. # represents a parameter how much data to operate on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first command byte is 01h, it is a direct copy command with # value 1, so copy next 2 bytes of data to destination (00h 0Ah).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, the next command byte is E9h. It is an extended  command. Command 010 is 2, word fill. The command byte gives two extra bits for the byte count in next byte (3Fh), so parameter is 13Fh. The fill count is 140h, and the data to fill with is the next word (44h 80h).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next command is 48h.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2020-04-18T10:06:26.530" LastActivityDate="2020-04-18T10:06:26.530" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14462" PostTypeId="2" ParentId="14460" CreationDate="2020-04-18T09:31:47.647" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I understand each of these rows to be sequential instructions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Exactly, they are description (opcodes and data structure) for the virtual machine which is the decoder.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What am I missing though to translate this into pseudocode that a non-&amp;quot;old school&amp;quot; programmer like myself can understand?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is nothing 'old school' in there. Virtual machines are still made all around today.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For example, take this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Copies the next (# + 1) bytes from Compressed Data (CD) to RAM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What is #?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The parameter (# == &lt;a href=&quot;https://en.wikipedia.org/wiki/Number_sign&quot; rel=&quot;nofollow noreferrer&quot;&gt;Number Symbol&lt;/a&gt;). In this case the number of bytes that get (should be) copied from input stream (compressed data or program, as you like it) to output (image in RAM).&lt;/p&gt;&#xA;&lt;p&gt;It's described quite in detail when reading the each entry.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Command Name&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Direct Copy&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Encoding Range in Hex&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$00..$1F&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Encoding Range in Binary&#xA;&lt;ul&gt;&#xA;&lt;li&gt;%0000 0000 - %0001 1111&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Syntax&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;[%000x xxxx : x xxxx = #]&lt;/code&gt; meaning a byte (&lt;code&gt;%&lt;/code&gt; -&amp;gt; in Binary) containing &lt;code&gt;000&lt;/code&gt; as (its) opcode portion, while &lt;code&gt;x xxxx&lt;/code&gt;is to be taken as a (parameter) value further called &lt;code&gt;#&lt;/code&gt; (here the length)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Range of the Command (Parameters)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1..32&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Notes/Description&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Copies the next (# + 1) bytes from Compressed Data (CD) to RAM.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I wouldn't know what to describe better here&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What exactly am I supposed to do to the room data, 01 00 0a e9 ...?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Let the virtual machine, described in the table, run it, to transform input (it's program) into output (image in RAM).&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;01&lt;/code&gt; -&amp;gt;  Opcode 0 (Copy Data) with data length 2 (%00.0001 + 1)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;00 0A&lt;/code&gt; -&amp;gt; Two bytes of data to be copied to output&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;E9 3F&lt;/code&gt; -&amp;gt;  Extended (length) Opcode 7 Sub-Opcode 2 (Write Word) with length 320 (%01.0011.1111 + 1)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;44 80&lt;/code&gt; -&amp;gt; Two bytes of word data for to be written as 64 bytes to output (32 times)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;48&lt;/code&gt; -&amp;gt; Opcode 2 (Write Word) with length 9 (%00.1000 + 1)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;11 89&lt;/code&gt; -&amp;gt; Two bytes of word data for to be written as 9(!) bytes to output (4 1/2 times)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;... and so on ...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or what knowledge am I missing to understand what's going on here.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not sure, as all is in the table, so it would be good if you point out what parts are unclear.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Postscript: I haven't really peeked into that encoding before, but looking close it's a really nifty way of RLE, adapted for the special need of repetitive tile data. Especially the &lt;em&gt;library copy&lt;/em&gt; (arbitrary template), &lt;em&gt;minus copy&lt;/em&gt; (tile repetition) and &lt;em&gt;EOR copy&lt;/em&gt; (background inversion). I like that.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-18T10:49:26.320" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14463" PostTypeId="2" ParentId="14460" CreationDate="2020-04-18T10:13:14.277" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What am I missing though to translate this into pseudocode that a non-&quot;old school&quot; programmer like myself can understand?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's hard to say what you're missing. It certainly doesn't seem to require any prior knowledge of 6502 machine code.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I understand each of these rows to be sequential instructions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. The compressed map is a mini-&quot;program&quot;. Each row in the table describes one instruction for the decoder. The decoder is a routine that acts like an interpreter for the compressed map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first 3 bits of the byte act as an &quot;opcode&quot; of sorts, which tells the decoder what operation to perform. The operation is explained in the rightmost column.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What is #?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's the final 5 bits of the byte. They act like an operand or argument to the opcode. What it does with this argument depends on the instruction and is again listed in the rightmost column.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What exactly am I supposed to do to the room data, 01 00 0a e9 ...?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You need to make an interpreter that runs the compressed data as a program. Something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep a &quot;program counter&quot; that points at the first byte. Make a loop that runs until the program counter has completed the program. Read the byte at the program counter's current location, check that byte's first 3 bits (logical AND with &lt;code&gt;$E0&lt;/code&gt;) and look up the correct instruction based on the table above, and call a function that represents that instruction with the final 5 bits as an argument. Do what the table tells you to do, and increment the program counter accordingly so it's ready to read the next command byte.&lt;/p&gt;&#xA;" OwnerUserId="15661" LastEditorUserId="15661" LastEditDate="2020-04-18T10:22:17.843" LastActivityDate="2020-04-18T10:22:17.843" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14464" PostTypeId="2" ParentId="14457" CreationDate="2020-04-18T13:46:27.513" Score="27" Body="&lt;p&gt;This is a &lt;em&gt;&lt;a href=&quot;https://rpg.meta.stackexchange.com/a/6843/2947&quot;&gt;frame challenge&lt;/a&gt;&lt;/em&gt; answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://wikipedia.org/wiki/Burroughs_large_systems#B5000&quot; rel=&quot;noreferrer&quot;&gt;Burroughs Large Systems B5000&lt;/a&gt; was specifically designed for being able to run programs in high-level languages (meaning COBOL, ALGOL, FORTRAN), multiprocessing, virtual memory. It had tagged memory, and builtin concurrency and multiprocessing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The feature relevant to this particular question, is rather &lt;em&gt;lack of&lt;/em&gt; a feature: the B5000 doesn't &lt;em&gt;have&lt;/em&gt; an assembly language. Its &quot;lowest&quot; system programming language is &lt;a href=&quot;https://wikipedia.org/wiki/Executive_Systems_Problem_Oriented_Language&quot; rel=&quot;noreferrer&quot;&gt;Executive Systems Problem Oriented Language (ESPOL)&lt;/a&gt;, an extension of ALGOL 60.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ESPOL, however, &lt;em&gt;does&lt;/em&gt; have direct equivalents for all low-level instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The B5000 was a big influence on Alan Kay both in the design of OO in general and the design of the Smalltalk VM. It was also reportedly an influence on the Pascal P-Code system (which was also an influence on the Smalltalk VM). The Smalltalk VM and P-Code, in turn, were an influence on the JVM. So, in the biological sense of &quot;success&quot; (spreading your genes), it is one of the most successful hardware architectures in the history of computing.&lt;/p&gt;&#xA;" OwnerUserId="578" LastEditorUserId="837" LastEditDate="2020-04-19T16:42:16.980" LastActivityDate="2020-04-19T16:42:16.980" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="14465" PostTypeId="2" ParentId="12254" CreationDate="2020-04-18T14:31:56.030" Score="1" Body="&lt;p&gt;I used to have an exchangeable disk that I used between my PC and my kids' PC.  Theirs was more powerful so when they were at school and I was working from home, I'd use their PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trick is to have two boot configurations that the user can select on startup.  Basically you put the menu into config.sys (see &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6801/how-do-i-create-a-boot-menu-to-select-between-windows-and-dos&quot;&gt;How do I create a boot menu to select between Windows and DOS?&lt;/a&gt;) and depending on which configuration is chosen, you load up different drivers.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2020-04-18T14:31:56.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14466" PostTypeId="2" ParentId="14457" CreationDate="2020-04-18T14:54:10.493" Score="17" Body="&lt;p&gt;&lt;em&gt;[&lt;strong&gt;Preface&lt;/strong&gt;: This question is not only quite broad, but as well rather opinion bases. After all, what is 'unusual' depends a lot on personal experience and preference. To me for example GNU assembler's inversion of target and source is quite unusual.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Having said that, I feel the question gives a great chance to create some overview]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;As I understand it, the question is about how an Instruction Set Architecture (ISA) is represented in its (native) assembler, and what variations exist. It's important to keep in mind that this is strongly influenced by the way an ISA is viewed (*1)&lt;/p&gt;&#xA;&lt;h2&gt;Basic Schools&lt;/h2&gt;&#xA;&lt;p&gt;There are several &lt;em&gt;basic&lt;/em&gt; schools of ISA representation in Assembler:&lt;/p&gt;&#xA;&lt;p&gt;(I tried to use as modern examples as possible to ease reading)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;One Opcode one Mnemonic&lt;/p&gt;&#xA;&lt;p&gt;Each and every binary opcode gets its own mnemonic. A typical example would be the Datapoint 2200 or Intel's 8008. Here each opcode gets its own name:&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;LAB&lt;/code&gt; - &lt;strong&gt;L&lt;/strong&gt;oad register &lt;strong&gt;A&lt;/strong&gt; with the content of register &lt;strong&gt;B&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;LAM&lt;/code&gt; - &lt;strong&gt;L&lt;/strong&gt;oad register &lt;strong&gt;A&lt;/strong&gt; with the memory content addressed by the &lt;strong&gt;M&lt;/strong&gt;emory pointer (HL)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;LA #&lt;/code&gt; - &lt;strong&gt;L&lt;/strong&gt;oad register &lt;strong&gt;A&lt;/strong&gt; with the constant &lt;code&gt;#&lt;/code&gt; given as parameter&lt;/p&gt;&#xA;&lt;p&gt;Assemblers of this kind can be written very fast as all they have to follow is a one-on-one replacement of the mnemonic to an opcode and optionally turning a simple, usually numeric, value into a byte/word sized parameter. They are extremely close to the binary ISA representation. These tend to be quite small and are often the first stage to get a system running. The 6502 and the first cross-assembler running on a timeshare system are good examples.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;One Mnemonic many opcodes&lt;/p&gt;&#xA;&lt;p&gt;Here each mnemonic describes a function; the opcode used is to be derived from the parameter given. The most radical or clean, as one prefers, of the classic 8-bit age might be the Z80. Here all 161 possible encodings for data transfer between registers and register and memory are summarized in one mnemonic &lt;code&gt;LD&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This clearly eases learning as a new programmer can focus more on generic function used than specific encoding. Of course it comes with a more complex assembler structure, as now parameters must be scanned before deciding on the opcode to be generated - and its parameter - accordingly. It may end up with source constructions in need of additional specifiers to pick the right opcode - Motorola's 68000 &lt;code&gt;.b&lt;/code&gt;/&lt;code&gt;.w&lt;/code&gt;/&lt;code&gt;.l&lt;/code&gt; postfix notation, for example. Or the unique (*2) address syntax on a 6502.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Encoding like Structure&lt;/p&gt;&#xA;&lt;p&gt;While this may sound like a sub section to #1, it's not much about giving a distinct encoding to each instruction, but about the mnemonic &lt;em&gt;being&lt;/em&gt; the instruction - effectively reducing the assembler even more. An example would be the IBM TPM (Tape Processing Machine) and its 701 follow-up, where the opcodes were directly related to 5-bit TTY encoding. Like &lt;code&gt;A&lt;/code&gt; for Add, &lt;code&gt;W&lt;/code&gt; for Write - of course, it did work out way less easy to remember for many other instructions :)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Synthetic Mnemonics&lt;/p&gt;&#xA;&lt;p&gt;Here no fixed opcodes are given, but an operation is synthesized from a set of symbols. It works somewhat like qualifiers, except that none of the elements are a base opcode. Operation is usually VLIW-like. The most prominent example here is maybe the &lt;a href=&quot;/q/9673&quot;&gt;Zuse Z22&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Single Parameter&lt;/p&gt;&#xA;&lt;p&gt;These syntaxes try to limit parameters to a single one, even if the abstract logic of the instruction is about two independent ones. This is much like the #1 attempt for opcodes. The 6502/6800 make good examples by encoding one parameter into the instruction:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;LDA&lt;/code&gt; - &lt;strong&gt;L&lt;/strong&gt;oa&lt;strong&gt;d&lt;/strong&gt; register &lt;strong&gt;A&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LDY&lt;/code&gt; - &lt;strong&gt;L&lt;/strong&gt;oa&lt;strong&gt;d&lt;/strong&gt; register &lt;strong&gt;Y&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LDAB&lt;/code&gt;- &lt;strong&gt;L&lt;/strong&gt;oa&lt;strong&gt;d&lt;/strong&gt; &lt;strong&gt;A&lt;/strong&gt;ccumulator &lt;strong&gt;B&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Multiple Parameters&lt;/p&gt;&#xA;&lt;p&gt;Others allow for two or more distinct parameters. While limited two-address ISAs can get around with byzantine mnemonic constructions (such as 6800's &lt;code&gt;LDAA&lt;/code&gt;), full two-address must go that way.&lt;/p&gt;&#xA;&lt;p&gt;This is much related to the move from a type #1 mnemonic structure to a type #2. And like it, an assembler handling such source statements will need to be more complex in its decision tree - for example decoding different addressing modes and selecting the opcode accordingly.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Embedded Parameter&lt;/p&gt;&#xA;&lt;p&gt;These syntaxes do not spread out parameters over separate elements (words) but concatenate them into the instruction. While this is to some degree true for #5 syntax, it goes beyond, as no spaces or delimiters are used at all. 'Freiburger' Code for the Z22 for example goes that way:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;T5000T&lt;/code&gt; is a pseudo op working much like &lt;code&gt;ORG&lt;/code&gt; in other assemblers, setting Drum location 5000 as next target.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CB3000&lt;/code&gt; instruction to load a word from address 3000&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Parameter Order or Left to Right vs. Right to Left?&lt;/p&gt;&#xA;&lt;p&gt;Should parameters be given as &lt;em&gt;source&lt;/em&gt; first or &lt;em&gt;destination&lt;/em&gt; first? This is as much a source of holy wars (*3) as it is about history. Early (Load/Store) architectures often encoded one parameter as part of the instruction, inherently using both ways:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The 6502's LDA/X/Y: the register mentioned in the mnemonic would be the first parameter, so making it &lt;em&gt;destination, source&lt;/em&gt;, while&lt;/li&gt;&#xA;&lt;li&gt;its STA/X/Y turns it into &lt;em&gt;source, destination.&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;Transfers (Txx) also use &lt;em&gt;source, destination.&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Since most instructions, except stores, use the destination-first notation, it does seem more natural when assemblers evolved/had to evolve from single to multiple parameter. Then again, some two-address machines' ISAs were structured as source,destination from the very first iteration on.&lt;/p&gt;&#xA;&lt;p&gt;Of course, with more than two parameters, it gets even more arbitrary.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2&gt;Real Assemblers:&lt;/h2&gt;&#xA;&lt;p&gt;While some assemblers are direct implementations of one of these schools (and mentioned above), many are combinations. Examples may be:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;8080 and 6800/6502 are mixtures of #1 and #2.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;While Intel did unify some instructions on the move from 8008 to 8080, like turning all loads between registers into a single &lt;code&gt;MOV&lt;/code&gt; mnemonic, it kept a separate mnemonic all other data transfers.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;6800/6502 did unify most instructions of the same function into a single mnemonic and have the parameter addressing decide which encoding, but at the same time all register to register transfers got their own mnemonic (&lt;code&gt;TAX&lt;/code&gt;, &lt;code&gt;TXA&lt;/code&gt;, ...)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;'Freiburger Code' might be something in between assembler, loader and script processor. Its basic syntax is meant to create the various bit of the instruction, but it can also execute an instruction &lt;em&gt;while&lt;/em&gt; assembling/loading if an &lt;code&gt;E&lt;/code&gt; is appended. Using an &lt;code&gt;E&lt;/code&gt; as prefix in turn can load any instruction from memory and execute it (&lt;code&gt;E4010&lt;/code&gt; -&amp;gt; execute instruction at memory location 4010). There are several other such pseudo-instructions and instruction modifiers as well - effectively blurring borders between assembler source, compiler script, command script and application.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1  For example a /360 is usually seen as a single opcode to mnemonic relation (#1), as that's the way it is used in all documentation. But no-one stops us from seeing the opcodes as structured in a 2+6 fashion with the top two bits holding the addressing modes (for most instructions).&lt;/p&gt;&#xA;&lt;p&gt;*2 - But not always simple/intuitive.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Quite much like the war between using 'Move' vs. 'Load/Store'. While I, as a /360 guy, would like to see both, I've experienced quite fierce discussions favouring either.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2020-11-19T15:03:54.007" LastActivityDate="2020-11-19T15:03:54.007" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14467" PostTypeId="2" ParentId="14457" CreationDate="2020-04-18T16:54:59.643" Score="14" Body="&lt;p&gt;&lt;a href=&quot;https://www.analog.com/media/en/technical-documentation/user-guides/GettingStartedwithSharcProcessors.pdf&quot; rel=&quot;noreferrer&quot;&gt;SHARC&lt;/a&gt; and &lt;a href=&quot;https://www.analog.com/media/en/dsp-documentation/processor-manuals/Blackfin_pgr_rev2.2.pdf&quot; rel=&quot;noreferrer&quot;&gt;Blackfin&lt;/a&gt; architectures processors are said to have &lt;em&gt;&quot;rich algebraic assembly language syntax&quot;&lt;/em&gt; and are unsual in their own way. The &lt;a href=&quot;https://www.analog.com/media/en/dsp-documentation/software-manuals/50_asm_mn_rev_3.4.pdf&quot; rel=&quot;noreferrer&quot;&gt;syntax&lt;/a&gt; is somewhat C-like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#ifdef INCLUDE_BUFFER3&#xA;.VAR buffer3[ 0x100];&#xA;#endif&#xA;&#xA;outer:&#xA;[I1] = R0;&#xA;R1 = 0X1234;&#xA;&#xA;LSETUP (begin_loop, end_loop) LC0 = P1;&#xA;begin_loop:&#xA;        R1 *= R2;&#xA;        R2 = [I0++];&#xA;end_loop:&#xA;         R0= R0 + R1 (NS) || R1 = [P0++] || NOP&#xA;R0 = R0 + R1&#xA;JUMP outer;&#xA;&#xA;R0 = DLAB | EPS (z);&#xA;cc = BITSET (R0, BITPOS(DLAB));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The TigerSHARC variant is a VLIW architecture and has similar highly readable instructions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;start:&#xA;XR0 = CB [J3 += 1];;&#xA;if NLC0E, jump start;;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1981" LastActivityDate="2020-04-18T16:54:59.643" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14468" PostTypeId="2" ParentId="14404" CreationDate="2020-04-19T04:16:26.263" Score="2" Body="&lt;p&gt;At least some dial-up connections were directly connected to the Internet.  Back in the late '90s I would often SSH in to my modem-connected home computer.  Given that the addresses were dynamically assigned I'm not sure how I knew the IP to connect to.  I suspect I either noted the address before leaving home or had a cron job attempt a connection to my work computer hourly or somesuch; checking its logs would show my home IP.  I don't recall any port blocking going on but NETBIOS (ports 137-9) probably were blocked, especially in later years.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastActivityDate="2020-04-19T04:16:26.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14469" PostTypeId="2" ParentId="14459" CreationDate="2020-04-19T12:10:38.743" Score="10" Body="&lt;p&gt;In order to autoboot any Amiga hard disk, 3 things are needed.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A version of Kickstart that supports boot from HD. This means &gt;= Kickstart 1.3.&lt;/li&gt;&#xA;&lt;li&gt;A device driver that knows how to speak to the HD controller, such as &lt;code&gt;scsi.device&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;A filesystem handler that understands the format of the HD.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I think #1 is simple to understand. This is a function of the &lt;code&gt;Strap&lt;/code&gt; (as in &quot;bootstrap&quot;) code in the Kickstart ROM. Earlier versions did not check for the existence of an HD device driver, so it could only boot the machine using the built-in &lt;code&gt;trackdisk.device&lt;/code&gt; - meaning boot from floppy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For #2, since any device driver on the Amiga is a dynamic library, it can be stored in a ROM or loaded from a boot disk. &lt;em&gt;A non-autoboot HD controller would get the HD device driver off the boot floppy&lt;/em&gt;, load it into RAM, and use it to access the HD. Similarly, a HD controller that includes an onboard autoboot ROM does not need a boot floppy. The system recognizes the device driver in the ROM and uses it to boot directly off the HD for Kickstart 1.3 or higher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case that is not clear enough pertaining to the A590, it means &lt;em&gt;the A590 can use any option&lt;/em&gt;; either load a device driver from a boot floppy for Kickstart 1.2, or load it from onboard autoboot ROM for Kickstart 1.3, or use the device driver already part of the Kickstart 2.0 ROM. The boot code is smart enough to compare version numbers and choose the latest one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For #3, the setup is similar for the filesystem handler as for the device driver. On the Amiga, filesystems are also dynamic libraries that can reside in ROM or RAM, and can be loaded from any boot drive. So, &lt;em&gt;if your HD needs a filesystem that is disk loaded, it can provide that on the bootable partition&lt;/em&gt;. The Amiga recognizes the presence of the filesystem handler on the HD, loads this code first using the device driver, then uses the loaded filesystem to access the files and directories on the HD. This is also how advanced Amiga filesystems, such as PFS3, are loaded during system boot. In cases where the filesystem handler is already in ROM, this step is bypassed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, applying the functionality above to the A590, means that the filesystem can be in ROM or loaded from disk. For Kickstart 1.3, the newer FFS is the one that will be found on the boot partition, so it will be used. For Kickstart 2.0, the ROM FFS is newer, so will supercede the one on the boot partition. If you want to use PFS3 on your A590 so you can stick a bigger HD inside it, then you just install PFS3 onto your new drive's boot partition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, filesystem handlers tend to be large code that are frequently enhanced. Conversely, a device driver for an HD controller is usually small and prone to minor revisions. Since HD autoboot ROM's also tend to be small, usually around 32KiB, they don't try to include filesystem handlers within them. Better to leave that for the main ROM or disk-loaded so they can afford more space for the code and more flexibility for how the filesystem is loaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amiga's disk subsystem was quite &quot;pluggable&quot; and robust. That's part of the reason it ends up being possible to put modern flash storage devices into old Amigas, and even exchange them among different Amigas without trouble.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-04-19T20:04:59.363" LastActivityDate="2020-04-19T20:04:59.363" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14470" PostTypeId="1" AcceptedAnswerId="15603" CreationDate="2020-04-19T14:38:39.440" Score="7" ViewCount="438" Body="&lt;p&gt;I have files, which I recorded back in 90s with ESS ES688 AudioDrive card, 4-bit voice optimized codec. Nowadays I do not possess the card any more and proprietary codec is no longer supported or I can't find any hints how to decode it. Here ffmpeg output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[wav @ 0x55cc15d2c900] Estimating duration from bitrate, this may be inaccurate&#xA;[wav @ 0x55cc15d2c900] Could not find codec parameters for stream 0 &#xA;(Audio: none ([136][230][0][0] / 0xE688), 8000 Hz, 1 channels, 33 kb/s): unknown codec&#xA;Consider increasing the value for the 'analyzeduration' and 'probesize' options&#xA;Guessed Channel Layout for Input Stream #0.0 : mono&#xA;Input #0, wav, from 'MY.WAV':&#xA;  Duration: 00:04:48.64, bitrate: 33 kb/s&#xA;    Stream #0:0: Audio: none ([136][230][0][0] / 0xE688), 8000 Hz, mono, 33 kb/s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Is there any way to do it without actual physical card and compatible PC hardware? Can sound card emulator solve this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have not found any hints of how 4-bit per sample ended in the WAV file, but eg &lt;a href=&quot;http://ohlandl.ipv7.net/sound/ESS688_Datasheet.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this ES688 AudioDrive chip's datasheet&lt;/a&gt; mentions programmable sample rate from 4000 to 44100 Hz so my assumption is: When I requested low bit-rate I ended up with having a non-standard WAV-file with two samples per byte...&lt;/p&gt;&#xA;" OwnerUserId="17887" LastEditorUserId="17887" LastEditDate="2020-04-19T20:06:58.010" LastActivityDate="2020-07-12T16:00:45.677" Title="ES688 AudioDrive 4-bit proprietary codec: Any way to decode?" Tags="&lt;digital-audio&gt;" AnswerCount="4" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14471" PostTypeId="2" ParentId="14470" CreationDate="2020-04-19T17:54:46.570" Score="4" Body="&lt;p&gt;While preparing a sample, I did the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Silenced error in Python wave module (sampwidth is arbitrary - should be 0.5, but it's hardly supported):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if wFormatTag == WAVE_FORMAT_PCM:&#xA;    try:&#xA;        sampwidth = struct.unpack_from('&amp;lt;H', chunk.read(2))[0]&#xA;    except struct.error:&#xA;        raise EOFError from None&#xA;    self._sampwidth = (sampwidth + 7) // 8&#xA;    if not self._sampwidth:&#xA;        raise Error('bad sample width')&#xA;else:&#xA;    self._sampwidth = 1  # this should be 0.5...&#xA;    #raise Error('unknown format: %r' % (wFormatTag,))&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Wrote wav-file samples into raw file, using lower and upper parts of each byte (number of frames obtained from method of obj):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import wave&#xA;obj = wave.open('/tmp/MY.WAV','rb')&#xA;fh = open(&quot;audio.raw&quot;, 'bw')&#xA;for i in obj.readframes(obj.getnframes() * 2):&#xA;    _noneed = fh.write(bytes([i &amp;amp; 0x0F, (i &amp;amp; 0xF0) &amp;gt;&amp;gt; 4]))&#xA;fh.close()&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Opened raw data in audacity using 4000 Hz unsigned PCM, 16 bit&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Speech became intelligible. Probably, the original record was not of great quality anyway. Probably, that e688 just packed two half-bytes into one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: The conversion script is approximate. Fractional framesize is not supported by Python wave module, so nframes calculation is not correct. Treat it as quick proof of concept.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how one small part of the WAV looked when loaded in audacity after I normalized it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YIxw1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YIxw1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: I could not repeat my yesterday success with 8bit and noticed if I use Signed 16-bit PCM (which is default in my audacity - probably I made a mistake yesterday and forgot to select 8-bit), 4000 Hz the sound is good! I can't really explain that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the settings I used:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/J8YWd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/J8YWd.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17887" LastEditorUserId="17887" LastEditDate="2020-04-20T18:55:24.237" LastActivityDate="2020-04-20T18:55:24.237" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14472" PostTypeId="1" AcceptedAnswerId="14478" CreationDate="2020-04-19T18:11:50.697" Score="13" ViewCount="1208" Body="&lt;p&gt;Why did the design need to reserve one channel for cascade, how did it work and what exactly was going on there? &lt;/p&gt;&#xA;" OwnerUserId="4378" LastActivityDate="2020-04-22T02:19:15.970" Title="PC/AT two DMA controllers - what is the purpose of cascade channel and how did it work?" Tags="&lt;ibm-pc&gt;&lt;dma&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14473" PostTypeId="2" ParentId="14124" CreationDate="2020-04-19T19:12:49.427" Score="4" Body="&lt;p&gt;I'm actually attempting to do this right now, so I figured I'd add what I found so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looks like one attempt to do this was &lt;a href=&quot;https://github.com/tschak909/disk-xfer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/tschak909/disk-xfer&lt;/a&gt;.  It supports a Xmodem-style CRC16 on each sector, but it doesn't appear to support working around bad sectors like &lt;code&gt;ddrescue&lt;/code&gt; does.  It also doesn't have much of a user interface on the DOS side, and it uses INT 14H for serial I/O, which is probably not that fast (although a FOSSIL driver &lt;a href=&quot;http://ftsc.org/docs/fsc-0015.001&quot; rel=&quot;nofollow noreferrer&quot;&gt;seems to fix this&lt;/a&gt;).  Since I'm pretty sure my ancient hard drive has at least one bad sector, I won't be able to use this as-is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another person &lt;a href=&quot;http://www.seasip.info/VintagePC/xda.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;posted an account&lt;/a&gt; of using the XD driver (that was &lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-3.9.y&amp;amp;id=f042fea0da78d9dc077a9c736b33b60eb8f35195&quot; rel=&quot;nofollow noreferrer&quot;&gt;removed in Linux 3.9-rc1&lt;/a&gt;) to image the drive directly on a Linux machine that has an ISA slot.  Doing some more digging, I found &lt;a href=&quot;http://lkml.iu.edu/hypermail/linux/kernel/1302.1/02176.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;one more person working on some bug fixes for that driver&lt;/a&gt; right before it got purged, so these fixes might need to be applied.  He was able to &lt;a href=&quot;https://dflund.se/~triad/krad/linux-on-pentium-mmx.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;create an image that could boot off of floppies&lt;/a&gt;, but slightly more modern machines should be able to boot directly off a CD or DVD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm going to attempt to do the serial port approach first (since I don't want to move that drive any more than I need to), then I might give the Linux approach a try.&lt;/p&gt;&#xA;" OwnerUserId="15378" LastEditorUserId="15378" LastEditDate="2020-05-18T17:06:27.670" LastActivityDate="2020-05-18T17:06:27.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14474" PostTypeId="1" CreationDate="2020-04-19T19:13:42.190" Score="9" ViewCount="752" Body="&lt;p&gt;&lt;em&gt;Entombed&lt;/em&gt; is an Atari 2600 game where you move through an infinite vertically-scrolling maze and try not to die. This maze is procedurally generated, with two bits from a PRNG (underlined) added each row, by looking up five bits from the maze in a lookup table:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8H7eU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8H7eU.png&quot; alt=&quot;The maze is symmetrical; the left-hand side is displayed here. It's generated left-to-right, using the two squares to the left and three bits above the current square. The left-hand wall is treated as containing the bits 1 0 (solid, empty), except for the top-left corner which contains a bit from the PRNG. The single bit used at the right-hand side is also a bit from the PRNG, as are some of the output bits.&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sup&gt;Figure 7 from &lt;em&gt;&lt;a href=&quot;https://arxiv.org/ftp/arxiv/papers/1811/1811.02035.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Entombed - An archaeological examination of an Atari 2600 game&lt;/a&gt;&lt;/em&gt; by John Aycock and Tara Copplestone, used under &lt;a href=&quot;https://creativecommons.org/licenses/by/4.0/deed.en&quot; rel=&quot;nofollow noreferrer&quot;&gt;CC BY 4.0&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;a b c d e │ X&#xA;──────────┼──&#xA;0 0 0 0 0 │ 1&#xA;0 0 0 0 1 │ 1&#xA;0 0 0 1 0 │ 1&#xA;0 0 0 1 1 │ —&#xA;0 0 1 0 0 │ 0&#xA;0 0 1 0 1 │ 0&#xA;0 0 1 1 0 │ —&#xA;0 0 1 1 1 │ —&#xA;0 1 0 0 0 │ 1&#xA;0 1 0 0 1 │ 1&#xA;0 1 0 1 0 │ 1&#xA;0 1 0 1 1 │ 1&#xA;0 1 1 0 0 │ —&#xA;0 1 1 0 1 │ 0&#xA;0 1 1 1 0 │ 0&#xA;0 1 1 1 1 │ 0&#xA;1 0 0 0 0 │ 1&#xA;1 0 0 0 1 │ 1&#xA;1 0 0 1 0 │ 1&#xA;1 0 0 1 1 │ —&#xA;1 0 1 0 0 │ 0&#xA;1 0 1 0 1 │ 0&#xA;1 0 1 1 0 │ 0&#xA;1 0 1 1 1 │ 0&#xA;1 1 0 0 0 │ —&#xA;1 1 0 0 1 │ 0&#xA;1 1 0 1 0 │ 1&#xA;1 1 0 1 1 │ —&#xA;1 1 1 0 0 │ —&#xA;1 1 1 0 1 │ 0&#xA;1 1 1 1 0 │ 0&#xA;1 1 1 1 1 │ 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This lookup table determines whether the bits of the maze should be 1, 0 or generated by the PRNG. It was probably &lt;a href=&quot;https://www.digitpress.com/library/interviews/interview_paul_allen_newell.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;modified from an algorithm developed by Duncan Muirhead and Paul Allen Newell&lt;/a&gt;, but what were once variables were apparently replaced by hard-coded values.&lt;/p&gt;&#xA;&lt;p&gt;Are there any details of this original algorithm available? How does this version work? What's the reasoning behind the choice of values, and how do they create a difficult-but-usually-solvable maze so reliably?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The maze algorithm for Entombed was created by Duncan and me.  The opportunity to do the game based on the algorithm happened afterwards and I elected to not take that chance, so I never actually did the game.  The story of the algorithm is that one night after work, Duncan and I went out for a beer and ended up coming up with this &amp;quot;problem&amp;quot; of wondering whether one could generate an endless maze that always had a solution.  […]  We worked out the algorithm and, since I knew how to program a VCS system (Duncan was Vectrex only), I spent a weekend coding something up.  We were surprised at the elegance of the algorithm as it gave us the ability to dial in a &amp;quot;difficulty factor&amp;quot; (via a bit setting) and we could prove that there was not only a point where it became unsolvable, but also a point on the other end of the spectrum where it became just an obstacle course as the sense of paths vanished because there were too many possibilities.  It always auto-generated the next line, top or bottom, so when you scrolled down and then scrolled back up, you would often get a new solution.  It was not symmetrically mirrored down the middle as the final game ended up.  We knew we could extend it to work in a sideways direction, but the VCS didn't allow for lateral scrolling. — &lt;a href=&quot;https://www.digitpress.com/library/interviews/interview_paul_allen_newell.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Paul Allen Newell, Digital Press interview&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The algorithm was once understood so well that it could be modified to work in two dimensions, instead of one. So: what's the core idea of this algorithm? How does it work? Where does this infamous lookup table come from?&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="15334" LastEditDate="2020-10-10T17:42:13.000" LastActivityDate="2020-10-13T10:08:05.077" Title="Where did the lookup table in Entombed come from?" Tags="&lt;history&gt;&lt;software&gt;&lt;atari-2600&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14475" PostTypeId="2" ParentId="14470" CreationDate="2020-04-19T19:44:31.413" Score="2" Body="&lt;p&gt;Long shot: ESPCM WAV shares the same &lt;a href=&quot;https://wiki.multimedia.cx/index.php/TwoCC&quot; rel=&quot;nofollow noreferrer&quot;&gt;TwoCC&lt;/a&gt; as the &lt;a href=&quot;https://wiki.multimedia.cx/index.php/Duck_DK4_IMA_ADPCM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Duck DK4 IMA ADPCM&lt;/a&gt; algorithm. So if you have access to ffmpeg, try:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ffmpeg -c:a adpcm_ima_dk4 -i infile.wav …&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(I'm unsure how to coerce ffmpeg into producing a generic WAV file, and there may be sample rate/width commands in there, so this is only half an answer)&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-04-19T19:44:31.413" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14476" PostTypeId="2" ParentId="14457" CreationDate="2020-04-19T19:46:55.093" Score="6" Body="&lt;p&gt;This thread would not be complete without a reference to &lt;a href=&quot;http://www.catb.org/~esr/jargon/html/story-of-mel.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Story of Mel&lt;/a&gt;. According to the story, this was a Royal McBee RPC-4000, and its assembler was unique because&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;The new computer had a one-plus-one&#xA;addressing scheme,&#xA;in which each machine instruction,&#xA;in addition to the operation code&#xA;and the address of the needed operand,&#xA;had a second address that indicated where, on the revolving drum,&#xA;the next instruction was located.&#xA;&#xA;In modern parlance,&#xA;every single instruction was followed by a GO TO!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6749" LastEditorUserId="6749" LastEditDate="2020-04-21T10:01:20.907" LastActivityDate="2020-04-21T10:01:20.907" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14477" PostTypeId="2" ParentId="14457" CreationDate="2020-04-19T21:52:16.677" Score="1" Body="&lt;p&gt;SDS/Xerox Meta-Symbol was essentially a list processing language designed to generate machine code through side effects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.livingcomputers.org/UI/UserDocs/CP-V/4_MetaSymbol_Assembler_Language_Reference.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.livingcomputers.org/UI/UserDocs/CP-V/4_MetaSymbol_Assembler_Language_Reference.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2020-04-19T21:52:16.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14478" PostTypeId="2" ParentId="14472" CreationDate="2020-04-19T23:06:14.947" Score="6" Body="&lt;p&gt;One of the DMA controllers is the master and the other slave. They use the cascade channel to pass on requests in order to synchronize their operation and priorities. Basically the chip with 8-bit DMA channels 0..3 has to request permission to do a DMA cycle from the DMA chip with channels 4..7, which in turn asks the chipset and CPU for permission to perform a DMA cycle.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-04-19T23:06:14.947" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14479" PostTypeId="2" ParentId="14472" CreationDate="2020-04-19T23:49:45.950" Score="13" Body="&lt;p&gt;The 8237 DMA controller supported 4 channels. That's not sufficient for a reasonably well-appointed PC.  So, you have two DMA controllers.  But there's only provision to connect one controller to the CPU, so the second controller has to connect to the first one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typical DMA requirements:  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Floppy controller  &lt;/li&gt;&#xA;&lt;li&gt;Parallel port (in some modes)  &lt;/li&gt;&#xA;&lt;li&gt;Sound card  &lt;/li&gt;&#xA;&lt;li&gt;Some disk controllers (without onboard DMA)  &lt;/li&gt;&#xA;&lt;li&gt;Network card  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-04-22T02:19:15.970" LastActivityDate="2020-04-22T02:19:15.970" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14480" PostTypeId="2" ParentId="14457" CreationDate="2020-04-20T04:04:46.943" Score="10" Body="&lt;p&gt;It would be remiss if we're talking about assembler syntax to leave out the clever assemblers for Forth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clever in that writing assemblers for Forth is quite straightforward and historically requires very little code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Forth assemblers are noted for their prefix syntax and they're idiomatic use of higher level branching and looping constructs in contrast to typical assembly leveraging comparisons, branch instructions, jumping and looping. Forth assemblers tend to not rely on things like labels. (They exist, they're simply not common in use.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Forth assembly is also typically done in small chunks.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CODE (FIND)   (S here alf -- cfa flag | here false )&#xA;  DX POP   DX DX OR  0= IF   AX AX SUB   1PUSH   THEN            &#xA;  BEGIN   DX BX MOV   BX INC   BX INC                            &#xA;    DI POP  ( here )  DI PUSH   0 [BX] AL MOV                    &#xA;    0 [DI] AL XOR   63 # AL AND   0=                             &#xA;    IF  BEGIN  BX INC   DI INC   0 [BX] AL MOV                   &#xA;          0 [DI] AL XOR   0&amp;lt;&amp;gt; UNTIL   127 # AL AND   0=          &#xA;        IF   DI POP   BX INC   BX PUSH   DX BX MOV               &#xA;             BX INC   BX INC  0 [BX] AL MOV   64 # AL AND   0&amp;lt;&amp;gt;  &#xA;          IF   1 # AX MOV   ELSE   -1 # AX MOV   THEN   1PUSH    &#xA;    THEN  THEN   DX BX MOV  0 [BX] DX MOV                        &#xA;  DX DX OR   0=  UNTIL   AX AX SUB   1PUSH   END-CODE &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Commonly found is Forth meta-compilers that build Forth from Forth, the &lt;code&gt;FIND&lt;/code&gt; routine is often one of the largest assembly routines in the system. But it shows off the assembler handily. Above is the &lt;code&gt;(FIND)&lt;/code&gt; primitive in 8086 from F83.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This shows off the prefix format &lt;code&gt;DX POP&lt;/code&gt; vs conventionally &lt;code&gt;POP DX&lt;/code&gt;. The &lt;code&gt;0 [BX] AL MOV&lt;/code&gt; is normally &lt;code&gt;MOV AL, [BX+0]&lt;/code&gt;. Finally, &lt;code&gt;63 # AL AND&lt;/code&gt; is &lt;code&gt;AND AL, #63&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also shows the use of the &lt;code&gt;0= IF ... THEN&lt;/code&gt; block. The 0= is testing the Zero flag, if true, it executes the block delimited by the &lt;code&gt;IF&lt;/code&gt; and &lt;code&gt;THEN&lt;/code&gt;. No labels here. Similarly, the &lt;code&gt;BEGIN ... UNTIL&lt;/code&gt; syntax. It also shows simple macros like &lt;code&gt;1PUSH&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally it represents the nature of a bunch of assembly code arranged to fit on a single 1K byte, 64x16 screen of Forth source code.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-04-20T04:04:46.943" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14481" PostTypeId="2" ParentId="14472" CreationDate="2020-04-20T06:42:24.577" Score="13" Body="&lt;p&gt;The original IBM PC and PC/XT used just one 8237 DMA controller; with PC/AT, that was found to be insufficient. PC/AT also introduced a 16-bit extension to the originally 8-bit ISA bus, so the extension could also accomodate new IRQ and DMA signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PC/AT was designed with two DMA controllers, but as another-dave said, the CPU had provision for connecting just one, &lt;em&gt;and&lt;/em&gt; the designers wanted PC/AT to be able to use PC/XT software and ISA expansion cards, and so the cascade arrangement was developed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second controller was responsible for the new DMA channels (#4 .. #7) and the first one (channels #0 .. #3) was made subordinate to it. Instead of signaling the CPU directly when a DMA bus cycle was needed, the first DMA controller now signaled the second one on channel #4, and the second controller signaled the CPU in turn. For channels #5 .. #7, the second controller just signaled the CPU directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This arrangement slightly favored the new DMA channels which were available for the 16-bit ISA cards only. In addition, the DMA channel #0, which was reserved for RAM refresh in original PC design was no longer needed for that role, and was made available in PC/AT's 16-bit extension of the ISA bus also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In PC/XT the DMA channels #2 and #3 were reserved for floppy and HDD controllers respectively, and so the change was mostly handled by the new PC/AT BIOS. Only 8-bit add-on cards designed for PC/XT and older and using the DMA channel #1 would need updated drivers for PC/AT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 8237 / 8257 DMA controllers could only access a maximum of 16 MiB of memory, and when the typical amount of memory in PCs grew significantly beyond that, these traditional DMA controllers were no longer very useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With e.g. 32 MiB of RAM, a DMA transfer to an arbitrary memory location would have only a 50% possibility of being in the &quot;DMA zone&quot;. If it was outside the zone, the DMA transfer would need to happen first to a buffer in the DMA zone, and then the CPU would need to be used to transfer the data to its final location outside the DMA zone, which would negate the benefit of DMA. Also, as Brian H mentioned in the question comments, these DMA controllers were slow, especially when PCI and newer, faster bus types became available.&lt;/p&gt;&#xA;" OwnerUserId="7447" LastEditorUserId="7447" LastEditDate="2020-04-20T07:56:54.430" LastActivityDate="2020-04-20T07:56:54.430" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14482" PostTypeId="2" ParentId="14457" CreationDate="2020-04-20T07:32:56.820" Score="7" Body="&lt;p&gt;An honourable mention goes to &lt;a href=&quot;https://it.wikipedia.org/wiki/Olivetti_Programma_101&quot; rel=&quot;noreferrer&quot;&gt;Programma 101&lt;/a&gt;, arguably the first desktop computer. The &quot;programming&quot; was done essentially in an &quot;assembler&quot; corresponding to keystrokes, looking like this (taken from &lt;a href=&quot;http://www.curtamania.com/curta/database/brand/olivetti/Olivetti%20Programma%20101/index.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A V&#xA;S&#xA;B M↑&#xA;B ← M&#xA;A / A↑&#xA;D / A↓&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This style has been generally carried on by other programming calculators, though later they started to include a general purpose CPU (with its own, hidden from the user, machine code).&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2020-04-20T07:32:56.820" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14483" PostTypeId="2" ParentId="14474" CreationDate="2020-04-20T08:26:55.710" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;So: what's the core idea of this algorithm?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It looks like some variation of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear-feedback_shift_register&quot; rel=&quot;nofollow noreferrer&quot;&gt;linear-feedback shift register&lt;/a&gt;. These look at some of the bits in the value, and then produce another bit which is shifted in to form the next value. They can be made to loop through (almost) all possible values of a word, and so have even been used as program counters.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Where does this infamous lookup table come from?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Duncan and Paul went out for a beer and for amusement they were talking about the problem of generating endless, solvable mazes. It's possible (even probable) they talked about the LFSR as a solution, but either way, the the idea was in their heads by then. Anyhow, LFSRs are well known, easy to implement in a few bytes of 6502 machine code, and so were often used in procedural generation in VCS games.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The algorithm was once understood so well that it could be modified to work in two dimensions, instead of one.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Do you see, how the function's inputs are the bits to the top and to the left of the space where the output is? It reminds me of the Floyd-Steinberg dithering algorithm. It's a computationally cheap way to apply a function to a 2D grid.&lt;/p&gt;&#xA;&lt;p&gt;It looks as though the output values (i.e. the left-most column in your table) are mostly &lt;code&gt;0&lt;/code&gt; if the input contains a lot of &lt;code&gt;1&lt;/code&gt;s, and mostly &lt;code&gt;1&lt;/code&gt; where the input contains a lot of &lt;code&gt;0&lt;/code&gt;s. This will have the effect of &amp;quot;balancing&amp;quot; the LFSR, and not make it get stuck at some value or in a loop.&lt;/p&gt;&#xA;&lt;p&gt;Because there are only 5 bits of input, the LFSR cannot be made to generate a sequence longer than 32. This is the reason to occasionally inject a value from a PRNG. It is also the case that an LFSR is usually much faster than the PRNG given in the paper you cited, which is probably the reason they didn't use the PRNG alone.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2020-10-13T10:08:05.077" LastActivityDate="2020-10-13T10:08:05.077" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14485" PostTypeId="2" ParentId="14457" CreationDate="2020-04-20T22:52:20.037" Score="3" Body="&lt;p&gt;I used an assembler that did this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  ;...&#xA;  call #function&#xA;  ;...&#xA;&#xA;function:&#xA;  add  v_spc, #1&#xA;  ;...&#xA;function_ret:&#xA;  ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Seems pretty pedestrian until you take note of what happens. Trying to compile this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  ;...&#xA;  call #function&#xA;  ;...&#xA;&#xA;function:&#xA;  add  v_spc, #1&#xA;  ;...&#xA;  ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(missing &lt;code&gt;function_ret&lt;/code&gt;) yielded an error message at the site of the &lt;code&gt;call&lt;/code&gt; operation. &lt;code&gt;function&lt;/code&gt; could still be compiled and jumped to, but calling it was an error. The disassembly revealed the truth.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  ;...&#xA;  jmpret  L15, #L13&#xA;  ;...&#xA;&#xA;L13:&#xA;  add L16, #1&#xA;  ;...&#xA;L15:&#xA;  jmpret nw 0, #0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The processor is stackless, and the assembler is generating the necessary stuff for function calls to work on the processor.&lt;/p&gt;&#xA;" OwnerUserId="418" LastActivityDate="2020-04-20T22:52:20.037" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14486" PostTypeId="1" AcceptedAnswerId="14488" CreationDate="2020-04-21T04:27:44.377" Score="3" ViewCount="628" Body="&lt;p&gt;The last official version of the Sinclair ZX Spectrum was the &lt;strong&gt;+3&lt;/strong&gt;, released after the company was owned by Amstrad. It included a 3-inch floppy disk drive as used on other Amstrad computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But even before this, several aftermarket companies released floppy drive interfaces/controllers. Though there was variation I have read that one format, &lt;strong&gt;TR-DOS&lt;/strong&gt; became a de-facto standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For emulation purposes I can find documentation on the file formats used for disk images of both +3 and TR-DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But so far I can't find anything on the format of the files stored on those disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming the format has to differ from that of files saved on cassette tapes since those require things such as synchronization tones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where can I find documentation of the file format of machine code files stored on these offical and de-facto standard Spectrum disk drives? Or if they're simple as I expect they are, we can probably just include it in an answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, I'm expecting there might be a header including an address in RAM where the code will be loaded, a length field, an address in RAM where code execution is to begin, perhaps there's a magic word identifier?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't even know if such files execute automatically as soon as they're loaded or if you must load them with one command and start them with another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only ever owned an original 48K Spectrum. I'd already moved onto the Amiga 1000 by the time these later Spectrums were available so I never used them.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-04-30T06:58:33.877" LastActivityDate="2020-05-26T06:57:34.643" Title="What file formats were used for binary executable files on later Sinclair ZX Spectrums?" Tags="&lt;floppy-disk&gt;&lt;zx-spectrum&gt;&lt;file-format&gt;&lt;zx-spectrum-clones&gt;&lt;executables&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14488" PostTypeId="2" ParentId="14486" CreationDate="2020-04-21T08:09:14.643" Score="6" Body="&lt;p&gt;The original Spectrum +3 manual has a comprehensive description of the disk format:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.worldofspectrum.org/ZXSpectrum128+3Manual/chapter8pt27.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.worldofspectrum.org/ZXSpectrum128+3Manual/chapter8pt27.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For TR-DOS, it's worth knowing that the .TRD file format is a simple sector-by-sector dump of the disk contents with no additional headers, so any description of the .TRD format (&lt;a href=&quot;https://web.archive.org/web/20190812144628/http://www.zx-modules.de/fileformats/trdformat.html&quot; rel=&quot;noreferrer&quot;&gt;such as this one on zx-modules.de&lt;/a&gt;) is, by extension, a description of the on-disk file format.&lt;/p&gt;&#xA;" OwnerUserId="13618" LastEditorUserId="13618" LastEditDate="2020-04-21T08:16:38.953" LastActivityDate="2020-04-21T08:16:38.953" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14489" PostTypeId="1" CreationDate="2020-04-21T20:33:39.250" Score="3" ViewCount="87" Body="&lt;p&gt;I'd like to be use the Tasword 2 text editor for the ZX Spectrum to load and save text files on an SD card. Gary Lancaster provides a &lt;a href=&quot;http://www.worldofspectrum.org/zxplus3e/software.html#tasword&quot; rel=&quot;nofollow noreferrer&quot;&gt;version of Tasword&lt;/a&gt; that uses Residos system calls, but as far as I know it's hard to get residos to work with FAT32 formatted partitions. Also, I only have a DivMMC device that&#xA;has Esxdos on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.worldofspectrum.org/pub/sinclair/games-info/t/TaswordTwo.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tasword user manual&lt;/a&gt; has a section on how to customise the program to use it with microdrives and mentions it can also be customised for other disk interfaces, but I don't know how to start with this process to make it work with Esxdos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe someone has done this customisation already and could share their code?&lt;/p&gt;&#xA;" OwnerUserId="7044" LastEditorUserId="7044" LastEditDate="2020-05-05T23:23:53.990" LastActivityDate="2020-05-05T23:23:53.990" Title="How to use Tasword 2 with Esxdos" Tags="&lt;zx-spectrum&gt;&lt;divmmc&gt;&lt;sd-card&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14491" PostTypeId="2" ParentId="2875" CreationDate="2020-04-22T00:28:43.140" Score="1" Body="&lt;p&gt;Some other Windows versions that have not been suggested.  SwIt Printfil &lt;a href=&quot;https://www.printfil.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Printfil site&lt;/a&gt;&#xA;I couldn't get Printfil to work for my Epson esc files, the graphics didn't render correctly no matter what I did.  Too bad because it will capture printer ports and create an archive of PDFs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also worked with DosPrinter &lt;a href=&quot;https://dosprinter.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DosPrinter&lt;/a&gt; it came as part of vDOSBox and was effective at converting my files to a Windows printer output.  Unfortunately, the built in PDF converter didn't render the graphics as well as using a Windows printer or XPS writter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The QPCPrint demo worked quite well, wish it had a built in PDF converter.&lt;/p&gt;&#xA;" OwnerUserId="17917" LastActivityDate="2020-04-22T00:28:43.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14492" PostTypeId="1" CreationDate="2020-04-22T10:31:37.120" Score="2" ViewCount="148" Body="&lt;p&gt;When searching for the apps for these outdated systems, one can often find the apps available for both Pocket PC and Windows Mobile, with minimal or no changes between platforms. Sometimes there is a version for WinCE, but often there isn't. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All three of the platforms share the same standard distribution format, which is .CABs packaged in a strange way. And indeed when attempting to install a PPC / WinMobile app onto a WinCE machine, the app often installs and works successfully. But sometimes, it refuses to get installed whatsoever. And what's worse, the installer may corrupt the .CAB file&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can one force-install a Pocket PC (PPC) and Windows Mobile (WM, WinMobile) .CAB apps onto Windows CE (WinCE)?&lt;/p&gt;&#xA;" OwnerUserId="15407" LastActivityDate="2020-05-07T20:10:08.727" Title="How to force-install Pocket PC (PPC) or Windows Mobile (WM, WinMobile) .CAB apps onto Windows CE" Tags="&lt;windows&gt;&lt;windows-mobile&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14493" PostTypeId="2" ParentId="14492" CreationDate="2020-04-22T10:31:37.120" Score="4" Body="&lt;p&gt;Indeed, often apps made for PPC and WinMobile work frawlessly on WinCE. But sometimes they simply don't work, or don't install. There is a way to force install PPC/WM apps onto WinCE, yet there is &lt;strong&gt;no guarrantee&lt;/strong&gt; the apps would work afterwards. In fact, the weird thing about WinCE is that sometimes apps &lt;em&gt;designed&lt;/em&gt; for  WinCE do not work on the platform&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally got many apps to install and work using this trick. Nonetheless, one can never know before you try. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows XP (VM) highly recommended. There is a chance the trick may work on Windows 7, or possibly even anything newer, yet no concrete evidence so far&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Download and install the app called &lt;strong&gt;Windows CE Cab Manager&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Open the CAB file within. Right-click on &quot;CAB Information&quot; -&gt; Properties&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cabinet -&gt; Untick &quot;Compress the CAB file&quot;&lt;/li&gt;&#xA;&lt;li&gt;Cabinet -&gt; Processor -&gt; Select &quot;All&quot;&lt;/li&gt;&#xA;&lt;li&gt;(Almost never required) For &quot;Platform&quot; and &quot;Operating system&quot;, ensure your OS and CPU type are supported&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;File -&gt; Save as -&gt; (save as a new .cab file). The file size should increase dramatically (x5-10 times)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now the app should be install-able on your device. But to emphasise, even though it is now install-able, there is no guarantee it will run. &lt;/p&gt;&#xA;" OwnerUserId="15407" LastEditorUserId="15407" LastEditDate="2020-05-07T20:10:08.727" LastActivityDate="2020-05-07T20:10:08.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14494" PostTypeId="1" AcceptedAnswerId="14499" CreationDate="2020-04-22T14:56:43.103" Score="7" ViewCount="532" Body="&lt;p&gt;Pin 32 of the Apple II bus is a signal called /INH (short for &quot;INHIBIT&quot;). Some of what I found online about using this pin for an Apple II expansion card suggests it was inconsistently implemented across the various versions of the Apple II.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Pin 32: this is the INHIBIT pin on all machines.  This behaves differently on all three machines: the II and II+ only allow the $D000-$FFFF ROM area to be inhibited.  The IIe allows RAM to be inhibited as well, but has strange interaction with main and auxiliary memory.  The IIgs only allows this signal to be used if the machine is running in slow mode.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Other references simply say that /INH disables all the motherboard memory. Which description is correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, what sort of expansion cards use /INH and how? Is it for a particular type of memory expansion card?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-04-23T13:06:59.113" Title="How do you use the INHIBIT pin on the Apple II bus?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14495" PostTypeId="1" AcceptedAnswerId="14497" CreationDate="2020-04-22T18:24:59.193" Score="3" ViewCount="238" Body="&lt;p&gt;35 years ago I had an original 48K Sinclair ZX Spectrum. I never had any of the Plus or 128K models and practically never even touched one as I moved onto the Amiga quite early.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm now playing with some Spectrum emulators of those later Spectrums. Some of them including the 128 have a boot menu where the user can choose a couple of modes or actions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Q8dCo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q8dCo.png&quot; alt=&quot;128K Spectrum boot menu&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I feel very stupid, because I've tried all the key combinations I can think of and I've spent about 20 minutes Googling, yet nowhere can I find out how to move the cyan bar up and down to select which action to take! It must be so incredibly obvious to the initiated that it is never discussed on the internet using the search terms I've been trying...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried the PC arrow keys, the number keys, and all over the keyboard using either the left or right shift keys (caps shift vs symbol shift).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it makes a difference I'm using the Spectaculator emulator. Even its on-screen keyboard and keyboard map features don't provide me this vital clue. What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-04-26T13:09:34.870" LastActivityDate="2020-04-26T13:09:34.870" Title="How do I navigate the boot menu in later model Spectrum emulators?" Tags="&lt;zx-spectrum&gt;&lt;emulation&gt;&lt;keyboards&gt;&lt;boot&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14496" PostTypeId="2" ParentId="14495" CreationDate="2020-04-22T18:46:08.793" Score="3" Body="&lt;p&gt;What emulator are you using?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Spectrum +, +2 and +3 have additional cursor keys along the bottom row of the keyboard beside the space bar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/ZX_Spectrum%2B.jpg/1024px-ZX_Spectrum%2B.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/ZX_Spectrum%2B.jpg/1024px-ZX_Spectrum%2B.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ⬆️⬇️ keys are used to navigate the boot menu.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that your emulator isn't set up to emulate the Spectrum+'s keyboard with these extra keys: make sure you have the correct machine selected, and restart the emulator.&lt;/p&gt;&#xA;" OwnerUserId="17826" LastActivityDate="2020-04-22T18:46:08.793" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14497" PostTypeId="2" ParentId="14495" CreationDate="2020-04-22T19:01:57.823" Score="7" Body="&lt;p&gt;The 128K mode retains the &quot;old&quot; cursor key combinations - in particular, &lt;code&gt;CAPS Shift 6&lt;/code&gt; stands for cursor down, &lt;code&gt;CAPS Shift 7&lt;/code&gt; for cursor up.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2020-04-22T19:01:57.823" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14498" PostTypeId="2" ParentId="14494" CreationDate="2020-04-22T21:05:39.420" Score="4" Body="&lt;p&gt;As far as the Apple II and II plus are concerned, both Jim Sather (&lt;em&gt;Understanding the Apple II&lt;/em&gt;, 1983) and Titus, Larsen &amp;amp; Titus (&lt;em&gt;Apple Interfacing&lt;/em&gt;, 1981) agree that /INH affects only the the onboard ROMs: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PRM43.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PRM43.png&quot; alt=&quot;Relevant paragraph from Sather&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Sather) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3Sow4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3Sow4.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Titus, Larsen &amp;amp; Titus)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I know this is just a third of an answer, really, but I only have no reference material for the IIe or IIgs on hand.) &lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-04-22T21:05:39.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14499" PostTypeId="2" ParentId="14494" CreationDate="2020-04-22T21:32:52.177" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Other references simply say that /INH disables all the motherboard memory. Which description is correct?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;All three are.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;/INHIBIT&lt;/code&gt; is originally used in the II/II+ to disable the ROMs. It was intended to allow I/O cards to hold alternate System-ROMs. In the Apple II it was mostly used by the Language Card.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The IIe already came with 64 KiB of on board RAM, organized like an Apple II with Language Card, thus original use of &lt;code&gt;/INHIBIT&lt;/code&gt; was no longer needed. It got reused to disable the whole RAM decoding - except this worked only in a straight way when no aux-64 KiB card was installed(*1).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;During IIgs development, use of the MEGA II chip, essentially a whole IIe on a chip, was made mandatory. The 16 bit side is build around this with all (classic) I/O on the 8 bit side. As a result all usage of &lt;code&gt;/INHIBIT&lt;/code&gt; was not only restricted to the 8 bit side, but rather useless as well.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also, what sort of expansion cards use /INH and how? Is it for a particular type of memory expansion card?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, it was first used with the &lt;a href=&quot;https://apple2history.org/history/ah13/#06&quot; rel=&quot;nofollow noreferrer&quot;&gt;Firmware Card&lt;/a&gt; holding either Applesoft II ROMS or Integer ROMs (*2). Not much later with the Language Card (16 KiB Card) for Pascal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early 80s memory cards like the Saturn, which were based on an extended Language Card scheme did use it as well.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I've been once told, this was due the sequence the Apple IIe was developed. The new handling for &lt;code&gt;/INHIBIT&lt;/code&gt; was fixed in the MMU design, before the 64 KiB expansion was fully defined. But I can't find any reference here, so take it with a grain of salt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - IIRC there were as well third party ROMS with FORTH(!), PILOT and some enhanced BASIC.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-04-23T13:06:59.113" LastActivityDate="2020-04-23T13:06:59.113" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14500" PostTypeId="1" CreationDate="2020-04-23T06:59:36.490" Score="4" ViewCount="241" Body="&lt;p&gt;I've been playing with Spectrum emulators, their file formats and some reverse engineering tools recently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14486/what-file-formats-were-used-for-binary-executable-files-on-later-sinclair-zx-spe&quot;&gt;Thanks to this forum&lt;/a&gt;, I was able to parse the TR-DOS disk image format and find the bytes of the code files with the address fields of where they should be loaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when I try to load the code into the given address ranges into Ghidra (a reverse-engineering tool), addresses don't seem to match up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Spectrum and its clones used the Z80, which is 8-bit with 16-bit addresses and can access 64 KB of memory. But later Spectrums and clones added paged memory circuitry and could access 128 KB or 256 KB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps I'm missing something about which bank(s) the code files are loaded into. TR-DOS only gives one address field, so I'm assuming it's both the load address and the execution address. But perhaps one of those assumptions is wrong and instead one of those addresses is a standard that's not in the file metadata.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've Googled but only found high-level TR-DOS manuals. I've found the TR-DOS ROM disassembly but not the relevant code in it. I'm looking for a technical description of how this works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe such documentation is around but in Russian or Czech. Perhaps we have people who hacked on those systems back in the day, or worked on emulators for them more recently.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-01T02:11:44.210" LastActivityDate="2020-05-20T04:28:56.483" Title="How did the Spectrum clones with TR-DOS and paged memory load and run code files from disk?" Tags="&lt;floppy-disk&gt;&lt;zx-spectrum&gt;&lt;file-system&gt;&lt;zx-spectrum-clones&gt;&lt;tr-dos&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14501" PostTypeId="2" ParentId="14500" CreationDate="2020-04-23T12:51:39.030" Score="1" Body="&lt;p&gt;The usual way of such HW peripherials was switching the original ZX ROM (0-16384) chip for its own memory space where was usually another ROM or even RAM on the runtime. It was done by the &lt;code&gt;/ROMCS&lt;/code&gt; pin on the extention bus/connector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not famillair with &lt;strong&gt;TR-DOS&lt;/strong&gt; as I was heavily using &lt;strong&gt;MDOS&lt;/strong&gt; instead. The &lt;strong&gt;MDOS&lt;/strong&gt; was an ZX OS extention for &lt;a href=&quot;https://cs.wikipedia.org/wiki/Didaktik_40&quot; rel=&quot;nofollow noreferrer&quot;&gt;Didaktik D40/D80 Floppy disc drives&lt;/a&gt;. It has a nice interaction with original ZX BASIC making able to use BASIC programs to use the flopies. For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LOAD * &quot;some_file.P&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;loads a file from floppy. It worked in a way that when you run this program original BASIC throw an exception like &lt;code&gt;Syntax error&lt;/code&gt; or &lt;code&gt;Non sense ion BASIC&lt;/code&gt; and &lt;strong&gt;D40/D80&lt;/strong&gt; hardware detects that by scanning Z80 pins. Then it switch to its own ROM and instead of throwing exception it executes the extended BASIC commands. After that original ROM switches back and BASIC program execution is restored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want more details just study the D40/D80 or any other similar HW circuitry and its commented disassembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The usual detection was done by simple logic circuit detecting hardcoded address bus state along with M1,MREQ,RD signals... IIRC D40/D80 was sensitive to &lt;code&gt;RST 0&lt;/code&gt; and &lt;code&gt;RST 8&lt;/code&gt; instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the bank switching for stuff above original 48K was done by the programs itself. Each bank switching able computer (like ZX128) had a special I/O mapped register that controls the actual configuration of memory map. That is why in file systems is usually only 16 bit target address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I expect that TR-DOS was working in similar manner&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2020-04-23T13:02:26.037" LastActivityDate="2020-04-23T13:02:26.037" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14502" PostTypeId="1" CreationDate="2020-04-23T18:18:36.043" Score="13" ViewCount="3421" Body="&lt;p&gt;Having trouble trying to search for this in the data sheet, just have seen how big it is and how it handles stack pointers. Would anyone mind helping me out where the &quot;Stack&quot; start on an Intel 8080? &lt;/p&gt;&#xA;" OwnerUserId="17924" LastActivityDate="2020-09-11T07:40:16.650" Title="In the Intel 8080, where does the &quot;Stack&quot; start?" Tags="&lt;8080&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14503" PostTypeId="2" ParentId="14502" CreationDate="2020-04-23T19:26:27.850" Score="26" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Would anyone mind helping me out where the &quot;Stack&quot; start on an Intel 8080?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;After Reset content of the stackpointer is undefined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, these are early 8 bit machines. There is no huge hardware and microcode that puts every part into a well defined state. For the 8080 the only thing guaranteed is that the PC will be reset to zero and execution starts from there (*1). Everything else has to be initialized by software (Boot code).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Reset is effectively just a clear input for the PC.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-04-23T19:26:27.850" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14504" PostTypeId="2" ParentId="14502" CreationDate="2020-04-23T19:53:35.423" Score="36" Body="&lt;p&gt;The stack starts wherever you as the programmer choose to initialize it to. Note that the stack grows downwards (i.e. towards lower memory addresses) so you would normally initialize the stack pointer to point to the top of a free area of RAM.&lt;/p&gt;&#xA;" OwnerUserId="9177" LastActivityDate="2020-04-23T19:53:35.423" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14505" PostTypeId="1" CreationDate="2020-04-24T00:28:40.887" Score="4" ViewCount="257" Body="&lt;p&gt;The KDF9 (English Electric, 1963) had a hardware option for timesharing. This provided four instances of most per-program context:  the nest (16-deep expression evaluation stack), the subroutine jump nest (16-deep return address stack), and the 16 Q-stores (modifier/counter registers).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The timesharing director (=operating system kernel) therefore supported up to 4, no more, concurrently executing programs. Context switching avoided the need to save and restore 48 registers. So, context switching was relatively cheap for such a sophisticated machine (unless you were paying to buy the hardware). Each of the 4 possible programs had an associated priority, and completion of I/O by the hardware was cognizant of whether the completed I/O belonged to a higher priority level than the currently-executing program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think I've ever heard of any other system that provided this level of timesharing support in hardware.  The ICL 1900 system sort-of comes close, in that the resident exec had a small and fixed limit on multiprogramming, but I think that's due to exec storage limits (tables take space).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days, of course, 4 processes is indistinguishable from zero, but 4 wasn't necessarily a huge barrier in the 1960s (KDF9 had 32Kwords memory, max, so you're not fitting too much in there).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway: what other systems had hardware per-program resource replication?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Apologies for another list-oriented question, but quite frankly, the discussions that ensue from such forms is more interesting than the &quot;here's a question, here's the answer&quot; format. It's in the nature of historical information that people know different corners of the subject.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ferranti_Orion#Description&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia's page on the Ferranti Orion&lt;/a&gt; lists a handful of computers, including the Orion, that had 'hardware support for timesharing', but it's not clear to me whether that included replicated hardware.  Maybe there was nothing to replicate -- the Orion accumulators were just the first 64 words of (relocated per program) address space. The minimal requirement for hardware-assistend timesharing support may be limited to provision of datum/limit registers.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-04-24T02:26:47.210" LastActivityDate="2020-10-30T03:06:06.913" Title="What 20th-century computers besides KDF9 replicated hardware for each concurrently-running program?" Tags="&lt;history&gt;&lt;british-computers&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14506" PostTypeId="2" ParentId="14505" CreationDate="2020-04-24T05:22:25.247" Score="4" Body="&lt;p&gt;The design you have described is very similar to &lt;a href=&quot;https://en.wikipedia.org/wiki/Barrel_processor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Barrel processor&lt;/a&gt; where CPU contexts are duplicated and switched at each clock cycle. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A barrel processor is a CPU that switches between threads of execution&#xA;  on every cycle. This CPU design technique is also known as&#xA;  &quot;interleaved&quot; or &quot;fine-grained&quot; temporal multithreading. Unlike&#xA;  simultaneous multithreading in modern superscalar architectures, it&#xA;  generally does not allow execution of multiple instructions in one&#xA;  cycle.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Like preemptive multitasking, each thread of execution is assigned its&#xA;  own program counter and other hardware registers (each thread's&#xA;  architectural state). A barrel processor can guarantee that each&#xA;  thread will execute one instruction every n cycles, unlike a&#xA;  preemptive multitasking machine, that typically runs one thread of&#xA;  execution for tens of millions of cycles, while all other threads wait&#xA;  their turn.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Notable examples include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_6000_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;CDC_6000_series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/UltraSPARC_T1&quot; rel=&quot;nofollow noreferrer&quot;&gt;UltraSPARC T1&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/XCore_Architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;XMOS XCore&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Most(All?) modern GPUs&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="5205" LastEditorUserId="5205" LastEditDate="2020-04-24T16:33:00.983" LastActivityDate="2020-04-24T16:33:00.983" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14507" PostTypeId="2" ParentId="14457" CreationDate="2020-04-24T07:23:45.700" Score="7" Body="&lt;p&gt;I'm not 100% sure whether this answer qualifies, as the assembler it relates to is still available and updated for at least relatively modern architectures, but it does originally go baack to the 80s and supported 16-bit 8086 compatible CPUs, so perhaps it's appropriate:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.terse.com/&quot; rel=&quot;noreferrer&quot;&gt;Terse&lt;/a&gt; is an x86 assembler with a rather unique syntax, designed to resemble high level languages.  An example from the web site is this code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;eax = ebx; bx + dog; cat - 14; cx &amp;amp; 0Fh; dx - 123?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which is equivalent to the following traditional 8086 instruction sequence:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Mov eax,ebx&#xA;Add bx,dog&#xA;Sub cat,14&#xA;And cx,0Fh&#xA;Cmp dx,123&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The language supports chaining multiple operations that use the same destination register in a single statement, and also higher level concepts like loops, if statements with blocks, and so on.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-04-24T07:23:45.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14508" PostTypeId="1" CreationDate="2020-04-24T08:46:46.347" Score="1" ViewCount="224" Body="&lt;p&gt;I have a number of non-functional older PalmOS devices (of the 68000 processor variety, not the later ARM processor models). I'd like to be able to reuse the memory cards from these in new applications, but I'm struggling to find much information about the cards.  What I can see is this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The cards use a form factor similar to a modern SO-DIMM; the clip mechanism is essentially identical to a modern laptop's memory cards.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The interface has a 72-pin double sided connector.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some of the devices I have have a seperate ribbon connector to the main board, although this may be a proprietory extension as these cards came from enhanced PalmV devices with barcode scanners manufactured by Symbol.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would ideally like to know:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;What precise connector model is used to hold these cards?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What RAM technology is used? (I'd usually assume traditional DRAM, but there's a possibility that SRAM was used to increase battery life)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the pinout of the connector?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the purpose of the extra ribbon cable connector on the Symbol devices?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-05-01T17:48:11.880" Title="Reusing original Palm memory cards" Tags="&lt;hardware&gt;&lt;palm&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14509" PostTypeId="2" ParentId="13480" CreationDate="2020-04-24T13:14:01.840" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Classic RISC CPUs like ARM and MIPS basically offer the trade-off: simple instruction set, but instructions execute in one cycle for good overall performance&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is a misconception based on an oversimplification of the actual reasons for the RISC architecture. The real difference between RISC and CISC instructions is about using fixed, special purpose hardware to implement instructions, rather than more general hardware that is controlled by microcode. The reason this is beneficial is that by doing this, you can ensure that the parts of the processor used by each instruction follow a clear, logical progression, which allows you to overlap instructions.  The downside is that doimg this for complex instructions would require a lot of hardware, so tokeep the processor size manageable you need to keep the instructions simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The one-cycle-per-instruction thing then comes from the fact that, in ideal circumstances, you can start one instruction per cycle and finish one per cycle. But in reality, for typical 70s/80s designs, instructions actually took about 5-6 cycles to execute, growing to ever larger numbers ofcycles as clock rates increased later on. I don't think any real RISC cpu ever took only 2 cycles per instruction... although, now I think about it, &lt;a href=&quot;https://hackaday.io/project/159003-c61&quot; rel=&quot;noreferrer&quot;&gt;this toy design I worked on a couple of years ago did&lt;/a&gt;.  In this example, every instruction takes two cycles to execute, but because thereare two pipeline stages there are usually two instructions executing at a time, resulting in 1 instruction per cycle ... except in a handful of cases (conditional execution may cancel the following instruction, but the first stage of it still executes, resulting in a pipeline bubble, and jumps cause another single cycle bubble).  Real processors are more complex but the same basic principles apply: execution ideally manages one instruction per cycle, but some instructions or conditions&#xA;may cause either bubbles (where a single cycle doesn't have an instruction completing) or stalls (where all the instructions in the pipeline fail to move to the next stage).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not dispatching new instructions every cycle doesn't gain much. You may avoid some &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Hazard_(computer_architecture)&quot; rel=&quot;noreferrer&quot;&gt;pipeline hazards&lt;/a&gt; by doing so, thus reducing the number of bubbles or stalls, but it's not likely to do much to improve the cycle rate, and would certainly decrease throughput, so it would generally not be a good strategy. Some multithreaded CPUs do something similar by switching between multiple threads on a per clock basis -- this avoids the hazards in the same way, but does not decrease utilization (at least as long as there are enough running threads to keep all the slots full). This idea was historically similar to the &quot;barrel processor&quot; of some early very-high-capacity computers. I believe the IO processors of the CDC 6000 (designed by Seymour Cray) may have been the original example of this idea.  Other significant examples include the UltraSPARC T1, which has2 threads per execution core.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastEditorUserId="15930" LastEditDate="2020-04-30T20:18:07.807" LastActivityDate="2020-04-30T20:18:07.807" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14510" PostTypeId="1" CreationDate="2020-04-24T14:11:58.280" Score="7" ViewCount="268" Body="&lt;p&gt;In the Byte magazine &lt;a href=&quot;https://archive.org/stream/byte-magazine-1977-05/1977_05_BYTE_02-05_Interfacing#page/n43/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;article&lt;/a&gt; that Woz wrote about the Apple II (Vol 2, No 5), on page 43's last paragraph he mentioned how &lt;a href=&quot;https://en.wikipedia.org/wiki/SWEET16&quot; rel=&quot;noreferrer&quot;&gt;SWEET16&lt;/a&gt; was useful and he estimated that about 20% of the Integer BASIC code could have been weeded out by selectively applying SWEET16.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the wording suggests that Integer BASIC did not use SWEET16, it does leave me wondering if it did and if not, &lt;em&gt;why not&lt;/em&gt; especially considering:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The savings it would create in the ROM.&lt;/li&gt;&#xA;&lt;li&gt;He states there would be no observable performance degradation.&lt;/li&gt;&#xA;&lt;li&gt;All Apple II machines being shipped at the time included the Integer ROM and thus SWEET16.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So while I'm expecting the answer to be that it wasn't used, I am a bit curious why not especially since it would have given the II another 724 bytes or so of ROM space to do other useful things.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2020-04-24T20:25:29.713" Title="Did the Apple II Integer BASIC use SWEET16?" Tags="&lt;apple-ii&gt;&lt;integer-basic&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14511" PostTypeId="2" ParentId="14500" CreationDate="2020-04-24T14:58:55.040" Score="1" Body="&lt;p&gt;This is only a partial answer so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TR-DOS was first part of the Beta 128 disk interface, which was cloned along with the Spectrum itself in Russia and Eastern Europe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://www.worldofspectrum.org/pub/sinclair/hardware-info/Beta128DiskInterface_Manual.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Beta 128 manual I found online&lt;/a&gt;, by default code does both load and start at the same address. Loading such code files manually is known as &quot;auto-run&quot;. But you can also load code as part of a BASIC program and you can use this method to either load code at its default address, or a specified address, followed by another instruction to begin execution at another specific address:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For the machine code programs, they  can be loaded to the same address&#xA;  from which they were saved, eg:  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; LOAD &quot;A:SALECALC&quot;CODE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;or  loaded to  a different  address by  specifying in  the loading&#xA;  instructions, eg:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; LOAD &quot;margin&quot;CODE 51000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;When running a machine code program the auto-run address should be the&#xA;  same as the starting address of the program, eg:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; RUN &quot;Discound&quot;CODE 47800&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;provided the  code is meant to auto-run  from &lt;code&gt;47800&lt;/code&gt; on loading all&#xA;  will be well.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The alternative is to  use  a  two   line  loader,  eg,  &lt;code&gt;SAVE&lt;/code&gt;  the&#xA;  following program on disk as say &lt;code&gt;&quot;DCTLOAD&quot;LINE 10&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 10 RANDOMIZE USR 15619:REM:LOAD &quot;Dsicount&quot;CODE 47800&#xA; 20 RANDOMIZE USR 47838&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;To run the program you now enter &lt;code&gt;RUN &quot;DCTLOAD&quot;&lt;/code&gt; which will load the&#xA;  machine code and the &quot;run it&quot; fom &lt;code&gt;47838&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A small number of the disk image files I downloaded seem to have code files with offsets and lengths that would not fit in a single RAM page, or would overlap the end of a RAM page. I have no idea what happens in such cases. Some of the files do seem to include various tricks, copy protection, and/or obfuscation though, which makes it harder to learn by exploring.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-20T04:28:56.483" LastActivityDate="2020-05-20T04:28:56.483" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14512" PostTypeId="2" ParentId="14508" CreationDate="2020-04-24T19:59:00.187" Score="0" Body="&lt;p&gt;I don't recall the Palm-branded PalmOS devices ever supporting any standards other than &lt;a href=&quot;https://en.wikipedia.org/wiki/SD_card&quot; rel=&quot;nofollow noreferrer&quot;&gt;SDCard&lt;/a&gt; for memory expansion, but that was only after several models had been released. The original Pilots had a proprietary memory expansion, the III and VII devices weren't expandable, however the V and later devices did support the SDCard. I think Sony produced some compatible devices as well, but if I remember correctly, they used the proprietary Sony &lt;a href=&quot;https://en.wikipedia.org/wiki/Memory_Stick&quot; rel=&quot;nofollow noreferrer&quot;&gt;Memory Stick&lt;/a&gt;, no SDCard. That being said, the SDcards used in the PalmOS devices are compatible with any device today that uses SDCard (though they're probably way too small to be useful nowadays).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first clones were the Handspring devices which did have the &lt;a href=&quot;https://en.wikipedia.org/wiki/Springboard_Expansion_Slot&quot; rel=&quot;nofollow noreferrer&quot;&gt;Springboard&lt;/a&gt; expansion slot on the back. These sound a bit more like the form factor you mention, but they were used for more than just memory - there were devices for cellular connections, cameras, I/O, etc. so the connector went beyond standard SODIMM connectivity. As you can see on the pinout I found &lt;a href=&quot;http://www.interfacebus.com/SpringBoard_Pinout.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, pins 60 and 61 were for microphone connectivity, something that makes it sound definitely proprietary and not a typical RAM connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FWIW, I had a III and Tungsten-T3 during the years what I was a PalmOS user, so I never really had much experience with Handspring or any expansion devices like you describe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE 2020-05-01:&lt;/strong&gt; I stand corrected, the original PalmPilot 1000/5000 devices did have the removable back door to a memory expansion slot. Though upon further investigation &lt;a href=&quot;https://web.archive.org/web/20000616150454/http://www.twinbrothers.com/steve/pilot/hardware/rambrd4.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;on&lt;/a&gt; &lt;a href=&quot;https://web.archive.org/web/20080512083956/http://www.interwb.com/memory.html#PILOT#PILOT#PILOT&quot; rel=&quot;nofollow noreferrer&quot;&gt;these&lt;/a&gt; &lt;a href=&quot;https://web.archive.org/web/20080308215641/http://www.massena.com/darrin/pilot/luiz/item5.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;sites&lt;/a&gt;, it looks proprietary as the form factor is slightly different from SODIMM but also I can't find any reference to it being anything standardized. At the minimum, it appears that the boards also held ROM.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2020-05-01T12:28:04.287" LastActivityDate="2020-05-01T12:28:04.287" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14513" PostTypeId="2" ParentId="14510" CreationDate="2020-04-24T20:25:29.713" Score="5" Body="&lt;p&gt;Essentially various sides of the same reason:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SWEET16 came too late. Inccoperating it into integer BASIC would have postponed the ROM production further.&lt;/li&gt;&#xA;&lt;li&gt;Integer BASIC was working as is, doing a redesign could have added bugs.&lt;/li&gt;&#xA;&lt;li&gt;What to do with the saved space? Of course one could have added more functions, but again, this would have cost time to write and integrate, further postponing the introduction.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Bottom line: Apple had to get the II to market. Success was tied to an early start, so adding time to make it better would be a bad business choice - especially if the gain wasn't anything that could boost sales in the short run,&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-04-24T20:25:29.713" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14514" PostTypeId="1" AcceptedAnswerId="14518" CreationDate="2020-04-24T23:13:39.053" Score="1" ViewCount="491" Body="&lt;p&gt;In the magazine &lt;a href=&quot;https://archive.org/details/64er_1990_06/page/n53/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;64er from June 1990&lt;/a&gt; a BASIC extension for running Commodore Basic V3.5 on the C64 was presented. The extension is available at &lt;a href=&quot;https://csdb.dk/release/?id=189017&quot; rel=&quot;nofollow noreferrer&quot;&gt;csdb&lt;/a&gt;. However, to run a BASIC 3.5 program, it is necessary to load the extension, start it, and then load the BASIC program and start it. How can I link a BASIC program with the BASIC 3.5 extension for C64 so that I get a standalone program?&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-04-25T12:31:08.913" Title="How can I link a BASIC program with BASIC 3.5 for C64?" Tags="&lt;commodore-64&gt;&lt;basic&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14515" PostTypeId="1" AcceptedAnswerId="14517" CreationDate="2020-04-25T06:36:35.780" Score="6" ViewCount="912" Body="&lt;p&gt;Windows and DOS binary executable files with the &lt;code&gt;.EXE&lt;/code&gt; extension have an &lt;code&gt;MZ&lt;/code&gt; header in them and nowadays also a &lt;code&gt;PE&lt;/code&gt; header.&lt;/p&gt;&#xA;&lt;p&gt;But before these there used to also be &lt;code&gt;.COM&lt;/code&gt; binary executable files and they had no internal header, they were just raw x86 machine code.&lt;/p&gt;&#xA;&lt;p&gt;But Intel's x86 processor family has been around for ages from the 8-bit era through to the 64-bit era with the instruction set and the memory model changing several times. Memory models had to do with how to access more memory beyond the processor's address bus could directly address. There used to be multiple pages of memory and segment registers&lt;/p&gt;&#xA;&lt;p&gt;So back to &lt;code&gt;.COM&lt;/code&gt; files, did they use &amp;quot;real mode&amp;quot; or &amp;quot;protected mode&amp;quot;? Or were both used? If both were used, was there any way to tell which was needed?&lt;/p&gt;&#xA;&lt;p&gt;I want to disassemble some old &lt;code&gt;.COM&lt;/code&gt; executables and the tool asks me whether the files are real mode or protected mode.&lt;/p&gt;&#xA;&lt;p&gt;(I did assembly and machine code programming on Z80 and Motorola 680x0 and switched to PCs in the 486 (32-bit) era but found the assembly syntax and segmented memory models ugly and didn't continue with assembly language or even understand the stuff about memory segments and such.)&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="15334" LastEditDate="2020-10-08T11:25:05.980" LastActivityDate="2021-02-17T15:33:33.577" Title="Are .COM executable binaries real mode or protected mode?" Tags="&lt;ms-dos&gt;&lt;x86&gt;&lt;protected-mode&gt;&lt;real-mode&gt;&lt;executables&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14516" PostTypeId="2" ParentId="14515" CreationDate="2020-04-25T07:32:06.500" Score="6" Body="&lt;p&gt;com files are not segmented (its just single segment). They have limitation that it can not cross 64K of code (filesize).&lt;/p&gt;&#xA;&lt;p&gt;They always starts in &lt;strong&gt;real mode&lt;/strong&gt; but I do not think there is any restriction to switch to protected from the code.&lt;/p&gt;&#xA;&lt;p&gt;So while disassembling set real mode any switching from the code should be recognized by the tool. However that is improbable as in 64K of code there is not much room to make protected mode stuff as you need to make own OS like environment. There where used DOS extentions like DOS/4GW for this but newer saw it used along with *.com file.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="15334" LastEditDate="2020-10-06T05:49:16.513" LastActivityDate="2020-10-06T05:49:16.513" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14517" PostTypeId="2" ParentId="14515" CreationDate="2020-04-25T08:41:15.540" Score="18" Body="&lt;p&gt;DOS programs always start in real mode (or an emulation thereof), so it’s best to start disassembling them assuming that. When disassembling, you should assume real mode, with 16-bit data and 16-bit addresses, until the code you’re disassembling changes that. The DOS-based disassemblers I’ve used generally know about the executable formats involved, and don’t ask. (They need to know about the formats to be able to set the segments up appropriately.)&lt;/p&gt;&#xA;&lt;p&gt;In DOS, there are three executable layouts, and the extension doesn’t matter.&lt;/p&gt;&#xA;&lt;p&gt;The first is the “.COM” layout, which is loaded into memory as-is after the &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Program_Segment_Prefix&quot; rel=&quot;nofollow noreferrer&quot;&gt;Program Segment Prefix&lt;/a&gt;, with all free memory allocated to the process, and all segments set to point at the PSP. Execution starts at offset 0100h, which maps to offset 0 in the file.&lt;/p&gt;&#xA;&lt;p&gt;The second is the device driver layout, which I won’t detail here.&lt;/p&gt;&#xA;&lt;p&gt;The third is the MZ layout, with a header used to tell the loader how to load the executable. This header specifies how much of the executable to load initially, how much memory to allocate, the segment layout, relocations to perform, and where execution starts.&lt;/p&gt;&#xA;&lt;p&gt;All three layouts leave plenty of room for a switch to protected mode, so ideally your disassembler should be able to recognise that.&lt;/p&gt;&#xA;&lt;p&gt;Non-DOS executables have a real-mode DOS stub; if you disassemble assuming real-mode MZ, that‘s what you’ll see. Again, most disassemblers can interpret the format correctly and will open LE, NE, PE etc. appropriately.&lt;/p&gt;&#xA;&lt;p&gt;The age of your executable can be a useful piece of information: protected mode DOS programs were unusual until at least 1993.&lt;/p&gt;&#xA;&lt;p&gt;With the freeware version of IDA 7, you can analyse COM files by loading them as binary files, changing the loading offset to 0x100, and selecting 16-bit mode.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-17T15:33:33.577" LastActivityDate="2021-02-17T15:33:33.577" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14518" PostTypeId="2" ParentId="14514" CreationDate="2020-04-25T12:31:08.913" Score="7" Body="&lt;p&gt;Simple way:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Load the BASIC 3.5 extension and RUN it.&lt;/li&gt;&#xA;&lt;li&gt;Load your BASIC program.&lt;/li&gt;&#xA;&lt;li&gt;Use a cartridge freezer to create a snapshot of the memory that can be re-loaded on cold boot.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There are many cartridge freezers, such as Super Snapshot, that can create a single loadable file for any program that resides fully in memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Harder way:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A quick disassembly of the BASIC 3.5 extension you linked shows that it has a small bootstrap that copies the extension to RAM under BASIC ($A000) and to $C000. It then starts in interactive mode by jumping to $C000. So, to &quot;link it to your BASIC program&quot;, you just need to insert some additional code after this initialization and before BASIC enters interactive mode. In this additional code, you need to copy your tokenized BASIC code (obtained by SAVE'ing it from BASIC 3.5) to $1001, which is where a BASIC 3.5 program is stored. You'd have to insert this as the final step before control returns to the user. This way, once you reach the BASIC prompt, your program is ready to RUN (or LIST, or modify).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing this will require some proficiency with 6502 assembly language, plus the ability to use a disassembler, editor, and assembler to create your &quot;linked&quot; executable.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-04-25T12:31:08.913" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14520" PostTypeId="1" AcceptedAnswerId="14523" CreationDate="2020-04-25T17:19:41.137" Score="17" ViewCount="2848" Body="&lt;p&gt;An MS-DOS &lt;a href=&quot;https://en.wikipedia.org/wiki/COM_file&quot; rel=&quot;noreferrer&quot;&gt;.com file&lt;/a&gt; is just raw code/data without header, thus no linking information, and was limited to be loaded into just one segment (64kB). That's the reason corrupted binaries would print &quot;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20060130-00/?p=32483&quot; rel=&quot;noreferrer&quot;&gt;Program too big to fit in memory&lt;/a&gt;&quot;. But I remember there &lt;em&gt;are&lt;/em&gt; .com-files larger than 64kB (some demos?). How did these work? How come they do not produce an error message on loading?&lt;/p&gt;&#xA;" OwnerUserId="793" LastEditorUserId="3290" LastEditDate="2020-04-26T07:37:02.450" LastActivityDate="2020-04-27T15:15:38.833" Title="How did large .COM files work?" Tags="&lt;ms-dos&gt;&lt;file-format&gt;&lt;executables&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14521" PostTypeId="5" CreationDate="2020-04-25T17:51:27.203" Score="0" Body="&lt;p&gt;This can include questions about the appropriate environmental conditions for storing hardware, other ways to improve storage longevity, and precautions for protecting the hardware during intermittent usage.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-04-25T17:51:27.203" LastActivityDate="2020-04-25T17:51:27.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14522" PostTypeId="4" CreationDate="2020-04-25T17:51:27.203" Score="0" Body="For questions related to preserving retrocomputer hardware in a working state." OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-04-25T17:51:27.203" LastActivityDate="2020-04-25T17:51:27.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14523" PostTypeId="2" ParentId="14520" CreationDate="2020-04-25T18:11:18.837" Score="30" Body="&lt;p&gt;Most large files (over 64KiB) with a &lt;code&gt;.COM&lt;/code&gt; extension are really MZ executables; the DOS loader doesn’t care whether the extension is &lt;code&gt;.EXE&lt;/code&gt; or &lt;code&gt;.COM&lt;/code&gt;, &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/EXEC.ASM#L331&quot; rel=&quot;nofollow noreferrer&quot;&gt;it uses the MZ signature to identify the format&lt;/a&gt;. This is the only documented way for a &lt;code&gt;.COM&lt;/code&gt; file larger than 64KiB to work, so it’s the only approach which can be relied upon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However it is possible to build a &lt;code&gt;.COM&lt;/code&gt; file larger than 64KiB, even though the documented maximum size is 65278 bytes: 65536 bytes addressable without changing segments, minus 256 bytes for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Program_Segment_Prefix&quot; rel=&quot;nofollow noreferrer&quot;&gt;PSP&lt;/a&gt;, minus two bytes for the 0-word pushed to the stack (the return address used when exiting a program in DOS 1 style, with a near &lt;code&gt;RET&lt;/code&gt;). When loading with a &lt;code&gt;.COM&lt;/code&gt; file larger than 64KiB, the behaviour depends on the specific variant and version of DOS in use:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;early versions of MS-DOS only read the first 64KiB;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;by MS-DOS 5 if not earlier (and presumably corresponding versions of PC DOS), the implementation sticks to the specification, and complains that the program is “too big to fit in memory” (version 6) or simply that it “cannot execute ...” (version 5);&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;DR DOS and OpenDOS load the program in its entirety, if it fits into available memory, and start execution as normal.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Care must be taken because DOS will initialise the stack to start at the end of the 64KiB block the program is assumed to occupy, which means part of the binary’s image in memory will be overwritten. Typically one of the first things such a program would do, would be to move its stack... All the segment operations required to access anything outside the first 64KiB also have to be calculated manually.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-04-27T15:15:38.833" LastActivityDate="2020-04-27T15:15:38.833" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="14525" PostTypeId="1" CreationDate="2020-04-25T20:48:38.813" Score="2" ViewCount="175" Body="&lt;p&gt;This is a low level tech question, as I develop the driver for the FDC at its command set level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having reviewed a number of sources I can not find the algorithm of how to format the 360k diskette using newer 1.2M drive. Lots talking about the differences in track size, magnetic material, how to degauss the media. But none lays out the algorithm in where heads must be positioned and in what order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The goal is having diskette formatted using 1.2M drive to be portable to 360k drive as much as possible. I do not have 360k drive, thus can not perform try-and-fail to empirically find out the best way dealing with formatting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had formatted two 360k diskettes using Windows XP machine recently, and noticed the distinct behavior: heads start at track 0, to somewhere at the 1/2 of the surface towards the center in double track step, then heads go back about 20 tracks, and perform formatting in single track step up to the position where they retracted, and then continue as usual in double track step. This happened on two diskettes, thus it is not caused by the media defect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There must be some explanation of this behavior, and formatting the 360k disk on 1.2M drive may not be that straightforward as go from outer to inner in double track step and write (format) tracks. What can, and must I do using floppy disk controller to format 360k diskette?&lt;/p&gt;&#xA;" OwnerUserId="8258" LastActivityDate="2020-04-25T20:48:38.813" Title="Algorithm to properly format 360k 5.25&quot; diskette on 1.2M drive?" Tags="&lt;floppy-disk&gt;&lt;floppy-drive&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14526" PostTypeId="2" ParentId="14457" CreationDate="2020-04-25T22:44:10.493" Score="-1" Body="&lt;p&gt;Some people call the (original K&amp;amp;R) C programming language an assembly language for PDP-11's.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2020-04-25T22:44:10.493" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14527" PostTypeId="2" ParentId="14272" CreationDate="2020-04-26T03:30:36.837" Score="4" Body="&lt;p&gt;Using the many helpful comments given, and reviewing dealer pricing of the Apple II and II Plus in old issues of Byte magazine from 1979/80, I've come up with what I think is a reasonable explanation and timeline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;most important factor affecting the price&lt;/em&gt; of both Apple II models during the transition period of late 1979 and 1980 was the rapid decline in the price of the 16Kbit DRAM's used in both machines. The time period coincides with the entry of the highly competitive Japanese DRAM manufacturers that would go on to dominate the DRAM market in the 1980's. The falling price of DRAM prompted Apple to both lower the price of their machines and gradually increase the amount of RAM included.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original retail price of the Apple II was US$1,298 (with 4 KiB RAM) and US$2,638 (with the maximum 48 KiB RAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the time the Apple II Plus was released, Apple would offer both the Plus and the original for $1,195 with 16KiB of RAM. But the price of DRAM's fell so rapidly that by 1980, an Apple II or II Plus with 48KiB of RAM was selling for this same price of $1,195.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this leads to my conclusion that, indeed, Apple continued to sell the original and the Plus for well over a year at the same price with the same RAM configuration. Dealers throughout 1980 seemed to frequently offer both machines, usually at the same price, and usually with $100 premium for each additional 16KiB of RAM. So, $995 for 16KiB, about $1,095 for 32KiB, and the canonical $1,195 for a fully-populated 48KiB AII or II Plus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect there are 2 reasons that the systems sold as equivalents for this time period.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;For Apple's part, this is long before the industry had developed to a mature, just-in-time, model for supply chain and manufacturing management. Apple likely had plenty of work-in-progress Apple II's at the time the II Plus was ready, and their dealers likely also had significant inventory. Just clearing the channel would take some time, even if Apple immediately stopped ordering any material specific to the original AII. And they apparently did not halt Apple II sales immediately because of #2.&lt;/li&gt;&#xA;&lt;li&gt;It's also likely that Apple's dealers and customers were onboard with a slow transition to the II Plus. The dealers had their inventory, and the issue for users was that AppleSoft Basic had a slow start. It was plagued by bugs, and its incompatibility with Integer Basic created some difficulty to overcome with the entrenched user base. Customers that wanted to avoid the early growing pains of AppleSoft could save BOTH the expense of a Language Card AND the hassle of loading Integer Basic by just purchasing an original AII.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;By the time the stock of original Apples ran out in 1981, AppleSoft was more proven, and ready to become the new &quot;standard&quot; Basic. The bugs that had briefly hurt its reputation in the early releases were ironed out in the ROM version that shipped in the II Plus. And Applesoft's replacement of the legacy Basic was cemented when they went on to more than double computer sales that same year.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those who opted for an original AII during the transition probably ended up just adding a Language Card later. Or, they simply held out for the more substantial improvements that would come with the Apple //e.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="3280" LastEditDate="2020-04-29T06:20:03.363" LastActivityDate="2020-04-29T06:20:03.363" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14528" PostTypeId="1" CreationDate="2020-04-26T05:04:03.117" Score="1" ViewCount="419" Body="&lt;p&gt;For those who used it back in the day, what was it like to use Windows NT 3.1 (or 3.5/3.51)? What did you view its pros and cons to be vs., say, the consumer version of Windows 3.1, or heck, against OS/2 for multitasking/stability?&lt;/p&gt;&#xA;" OwnerUserId="17937" LastActivityDate="2020-04-26T13:57:22.697" Title="What was it like to use Windows NT 3.1?" Tags="&lt;windows&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ClosedDate="2020-04-26T14:32:13.563" ContentLicense="CC BY-SA 4.0" />
  <row Id="14530" PostTypeId="1" AcceptedAnswerId="14535" CreationDate="2020-04-26T06:49:13.927" Score="0" ViewCount="262" Body="&lt;p&gt;The number of Spectrum emulators has been growing for decades now so there's quite a lot for different platforms and written in different languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interesting in learning about two of the disk operating systems:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/TR-DOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;TR-DOS&lt;/a&gt;, originally for the Beta Disk interface on original 48K and 128K Speccies, and later widely cloned on the Russian Pentagons and Scorpions&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://faqwiki.zxnet.co.uk/wiki/+3DOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;+3DOS&lt;/a&gt;, used on the only Spectrum model that came with a disk drive: the Spectrum +3&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm looking for an open source Spectrum emulator that supports both. I'm currently using Spectaculator on Windows, but it does not come with source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would prefer C or C++ running on Windows, Javascript running on the web or Electron. I could also make use of one for Linux or Mac if need be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't care too much about any other features or even about performance. I'm mainly interested in the programming and the file formats.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-01T05:13:28.153" LastActivityDate="2020-05-01T05:13:28.153" Title="Do any of the open source Sinclair ZX Spectrum emulators support both TR-DOS and 3DOS?" Tags="&lt;zx-spectrum&gt;&lt;emulation&gt;&lt;c&gt;&lt;windows&gt;&lt;tr-dos&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14531" PostTypeId="1" CreationDate="2020-04-26T07:13:10.193" Score="2" ViewCount="88" Body="&lt;p&gt;The original ZX Spectrum was made by Sinclair and then by Amstrad in the UK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were official versions also in the US, Europe and even India.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were very many clones and compatibles made in Russia and Eastern Europe, but also in South America and even in Korea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was even the Sam Coupe made in the UK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anybody attempted to estimate how many were manufactured of all these official, clone, and compatible computers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interested in the pre-retro era, which I suppose lasted up until the late '90s. But in the retro-era the machines have only been in quite small quantities so they probably wouldn't affect the estimate very much anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular I'm wondering how the impact of the Spectrum rates overall compared to the Commodore 64, which wasn't cloned very much, and the Apple ][, which was also widely cloned, but I know less about that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In world terms before the PC era in world terms it seems the humble Speccy played a much bigger part than Sinclair's own production numbers would suggest. Has anybody tried to roughly quantify the overall worldwide numbers?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-04-30T06:58:05.883" LastActivityDate="2020-04-30T06:58:05.883" Title="Do we know any estimate of how many Sinclair ZX Spectrums, clones, and compatibles were made in the world?" Tags="&lt;history&gt;&lt;zx-spectrum&gt;&lt;zx-spectrum-clones&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14532" PostTypeId="2" ParentId="4883" CreationDate="2020-04-26T10:29:18.590" Score="0" Body="&lt;p&gt;Create your own custom input routine. The following one allows the input of letters A-Z and numbers 0-9, although it could be farther modified to limit the number of characters entered or to allow the punctuation characters. The input string is is stored in W$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using VICE to write this program, so the  underline character in lines 20, 110, and 310 are achieved by pressing '[Shift] R'.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;5 print&#xA;10 w$=&quot;&quot;&#xA;20 print &quot;_&quot;;&#xA;30 get a$:if a$=&quot;&quot; then 30&#xA;40 a=asc(a$)&#xA;50 if a=13 then 200:rem return&#xA;60 if a=32 then 110:rem space&#xA;70 if a=20 then 300:rem backspace&#xA;100 if &amp;lt;48 or a&amp;gt;57 and a&amp;lt;65 or a&amp;gt;90 then 30&#xA;110 print chr$(20);a$;&quot;_&quot;;&#xA;115 w$=w$+a$&#xA;120 goto 30&#xA;200 rem handle return&#xA;210 print chr$(20)&#xA;215 if w$=&quot;&quot; then print:print&quot;you typed nothing!&quot;:end&#xA;220 print:print&quot;you typed: &quot;;:print w$&#xA;230 end&#xA;300 rem handle backspace&#xA;305 if len(w$)=0 then 30&#xA;310 print chr$(20);chr$(20);&quot;_&quot;;&#xA;320 w$=left$(w$,len(w$)-1)&#xA;330 goto 30&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="17939" LastEditorUserId="17939" LastEditDate="2020-04-26T19:12:14.320" LastActivityDate="2020-04-26T19:12:14.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14533" PostTypeId="2" ParentId="14528" CreationDate="2020-04-26T10:32:52.980" Score="4" Body="&lt;p&gt;The user experience on NT 3.1 was very much the same as Windows 3.1.  In fact you might not even notice during a casual use of it.  Here is a web site that shows a number of screen images of NT 3.1 to give you a taste of it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://toastytech.com/guis/nt31.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;NT 3.1 Screen Images&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OS/2, especially the earliest versions clearly showed the similar roots with NT.  That same site has OS/2 v1.1 images here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://toastytech.com/guis/os211.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;OS/2 1.1 Images&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both NT 3.1 and OS/2 were significantly more stable than the standard consumer versions of Windows until the introduction of Windows 2000 which eliminated the MS-DOS foundation and merged the NT and non-NT Windows product lines.&lt;/p&gt;&#xA;" OwnerUserId="13762" LastActivityDate="2020-04-26T10:32:52.980" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14534" PostTypeId="1" AcceptedAnswerId="14543" CreationDate="2020-04-26T11:10:43.837" Score="6" ViewCount="353" Body="&lt;p&gt;Sinclair released an add-on for the Spectrum called the &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Interface_2&quot; rel=&quot;noreferrer&quot;&gt;ZX Interface 2&lt;/a&gt; that provided joystick ports and a cartridge slot. It wasn't successful and only a few cartridges were ever produced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bBGtN.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bBGtN.jpg&quot; alt=&quot;ZX Interface 2 cartridges&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the US, Sinclair partnered with Timex to make the not very successful &lt;a href=&quot;https://en.wikipedia.org/wiki/Timex_Sinclair_2068&quot; rel=&quot;noreferrer&quot;&gt;Timex Sinclair 2068&lt;/a&gt;, which was a partly compatible Spectrum spinoff that came with a built-in cartridge slot. I believe only a few cartridges were ever produced for this system too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DxHIP.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DxHIP.jpg&quot; alt=&quot;a TS2068 cartridge&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm pretty sure the cartridges of the two systems cannot be plugged into each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I'd like to know if their hardware and software implementations were the same or similar, or were they totally different?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-05-02T14:01:11.530" Title="Did the Timex Sinclair 2068 and the Sinclair ZX Interface 2 use totally different hardware and software techniques?" Tags="&lt;hardware&gt;&lt;zx-spectrum&gt;&lt;game-cartridge&gt;&lt;timex-sinclair&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14535" PostTypeId="2" ParentId="14530" CreationDate="2020-04-26T12:47:04.023" Score="0" Body="&lt;p&gt;Yes!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/p/fuse-emulator/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fuse&lt;/a&gt;, which is mainly for Unix also builds and runs on Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It supports more machines than Spectaculator, including the +3, the Scorpion, and the Pentagon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it supports both +3DOS and TR-DOS and the usual image formats for both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is open source and is written in C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It includes the Spectrum +3 ROM but does not include the Scorpion or Pentagon ROMs, which would be needed for TR-DOS.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-04-26T12:47:04.023" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14536" PostTypeId="2" ParentId="14528" CreationDate="2020-04-26T13:24:55.473" Score="2" Body="&lt;p&gt;NT 3.1 was the first version of Windows I ever used. As far as I recall, I was using it on some 60 MHz Pentium and on a DECpc AXP 150 (&quot;Jensen&quot;).  I worked for DEC at the time, and was working on an NT-based project.  My experience is from the viewpoint of a programmer who was new to both Windows and to PCs (in fact, it was only the emergence of NT that persuaded me to move off VMS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I subsequently and briefly used Windows for Workgroups 3.11 at home (approximately speaking, Windows 3.1 with networking and 32-bit disk drivers/file system).  I upgraded the home system to NT as soon as I could scrounge some spare SCSI disks from work :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The UI was similar on both -- this of course is why the first version of NT was called &quot;version 3.1&quot;. However, NT was streets ahead for not-locking-up, for having a usable not-DOS command line, for having a flat memory model, and so on; all virtues a programmer could appreciate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NT 3.1 was a little slow and needed a lot of memory (16MB was the sensible minimum). NT 3.5 made things a little better, and natural technical evolution soon made 16MB seem not large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One trouble with NT 3.1 was the usual problem with new systems: application availability.  Many programs were still 16-bit Windows apps, running under WoW (Windows on Windows, the 16-bit Windows subsystem). I think MS Office might have been in that category at first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NT provided useful tools for getting out of trouble - the control set indirection, coupled with last-known-good.  The registry was a good thing, providing a simple hierarchical configuration tree (though I'd agree it has not scaled well by the 21st century). The service controller was essential for the programming I wanted to do -- one thing that always annoyed me about Windows was its apparent belief that there was always someone sitting in front of its screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NT on the Jensen was no faster than the Pentium, despite the faster Alpha processor (150MHz). Some of that was the design of the Jensen itself, some was down to having to run x86 apps under emulation.  I preferred to use the Pentium.  32-bit NT on the Alpha sadly proved to be a dead end.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-04-26T13:57:22.697" LastActivityDate="2020-04-26T13:57:22.697" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14537" PostTypeId="1" CreationDate="2020-04-26T16:02:21.093" Score="17" ViewCount="341" Body="&lt;h2&gt;Background&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Although BSD and its source code was freely available under the &lt;a href=&quot;https://en.wikipedia.org/wiki/BSD_licenses#Previous_license&quot; rel=&quot;noreferrer&quot;&gt;original BSD licenses&lt;/a&gt;, but it only covered the portion of the code which copyright was owned by Regents of the University of California. BSD as a whole, was &quot;encumbered&quot; - all BSD releases up to 4.3BSD-Tahoe and 4.3BSD-Reno contained proprietary AT&amp;amp;T code owned by Unix System Laboratories (USL) - a subsidiary of AT&amp;amp;T. As a result, the BSD operating system was not freely available, since it was not legal to run BSD without obtaining an Unix license from AT&amp;amp;T. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first &quot;unencumbered&quot; BSD release free from such restrictions was BSD Net/1, which was a BSD release based on 4.3BSD-Tahoe. By removing all proprietary AT&amp;amp;T code, the entire system became freely available, an AT&amp;amp;T's Unix license was not required and users were not subjected to any additional restrictions aside from the BSD license itself. Similarly, BSD Net/2 was an &quot;unencumbered&quot; release of 4.3BSD-Reno (although USL argued on the court that it still contained proprietary AT&amp;amp;T code, the lawsuit finally settled largely in Berkeley's favor). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, BSD 4.4-Lite and BSD 4.4-Lite2 were released after the lawsuit has been settled.  As a result, they are considered unencumbered and free from legal threats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following graph shows the relation of different &quot;unencumbered&quot; BSD releases - encumbered BSDs are colored yellow, and unencumbered BSDs are colored green (&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Unix_history-simple.svg&quot; rel=&quot;noreferrer&quot;&gt;Source link&lt;/a&gt;, author: Eraserhead1, Infinity0, Sav_vas on Wikimedia Commons, CC BY-SA 3.0 Unported).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ih5vB.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ih5vB.png&quot; alt=&quot;Relation of BSD releases&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These &quot;unencumbered&quot; releases proved to be crucial to the continued development, innovation and mass adoption of the BSD operation systems, and were directly responsible to the later projects, such as 386BSD, NetBSD, FreeBSD and OpenBSD, as their starting points. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Question&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;What AT&amp;amp;T code was removed in BSD Net/1, BSD Net/2, BSD 4.4-Lite, and BSD 4.4-Lite2 from the original 4.3BSD? By removing the AT&amp;amp;T code, what was its impact on the features and functionalities of BSD? Was it a complete removal, or was it a partial replacement with reimplementation of affected features?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, BSD Net/1 and BSD Net/2 is the version-of-interest here, since they were released prior to the legal settlement and the removal of AT&amp;amp;T code can be considered an independent development, unlike BSD 4.4 Lite (/2), which was influenced by the legal settlements that granted Berkeley rights to distribute some files that USL claimed copyright on. &lt;/p&gt;&#xA;" OwnerUserId="12128" LastEditorUserId="12128" LastEditDate="2020-04-26T19:03:52.223" LastActivityDate="2020-12-01T20:07:05.160" Title="What proprietary AT&amp;T code/features were removed in BSD Net1 (/2), and BSD 4.4 Lite (/2) from the original 4.3BSD codebase?" Tags="&lt;history&gt;&lt;unix&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14538" PostTypeId="1" CreationDate="2020-04-26T18:34:55.913" Score="3" ViewCount="219" Body="&lt;p&gt;I want to create a cartridge similar to Sonic &amp;amp; Knuckles or a Game Genie so that the text files loaded from the ROM or DEPROM of an original Famicom cartridge can be replaced with alternate English ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was researching the lock-on technology of the Sega Megadrive/Genesis, which replaces assets of a game by loading alternative ones into the ram. This seems like it could work. Or maybe the ROM can be physically overridden by a flashable battery, as is done in cartridge mods, through the lock-on cartridge, which would be the easier option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm an engineering student with sufficient programming and soldering experience for this project, but I have hardly any knowledge of this specific subject.&#xA;So essentially, I'd like to know how replacing game assets through lock-on technology would work, and the easiest way to achieve this with Famicom cartridges.&lt;/p&gt;&#xA;" OwnerUserId="17941" LastActivityDate="2020-04-29T07:50:05.717" Title="&quot;Genesis Lock-On Technology&quot; to change the language of a Famicom game" Tags="&lt;nes&gt;&lt;rom&gt;&lt;game-cartridge&gt;&lt;sega-genesis&gt;&lt;famicom&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14539" PostTypeId="2" ParentId="14538" CreationDate="2020-04-26T19:42:55.187" Score="5" Body="&lt;p&gt;I'll assume you only want to modify small parts of the game, rather than the entire game. (If you wanted to modify the entire game, you'd just make a new cartridge holding the entire image.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your objective: replace some but not all of the words* of the game with a new set, leaving the majority of the game unchanged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(* as in addressable data units, not textual words)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the simplest case, like a Sega Mega Drive cartridge, your original game is stored on a mask ROM that receives an address A and a read signal and outputs a predetermined 16-bit value ROM(A). On a read signal, OUT = ROM(A). Something like a M27C800 8Mbit (512K words x 16bit) chip would have this interface and is compatible with the Mega Drive's cartridge port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your passthrough cartridge will have the same exposed interface, but a different function: you want it to receive the address and read signal and output either your modified value NEW(A) or the original ROM value ROM(A) based on a stored flag whether the word in question is 'modified' - store this flag in MOD(A). Your cartridge has to store NEW(A) and MOD(A) somewhere on board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a read signal directed at the cartridge (!CARTREAD = !CE + !OE) you'll have to perform the logic DATA OUT = IF MOD(A) THEN NEW(A) ELSE ROM(A). (This isn't proper system description language, but you see the concept.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the simplest case, you can use a 1-bit ROM to store NEW and use this as a Chip Select to select between the two possible data sources:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your cart has a 16-bit ROM for NEW. You wire this to the data and address buses, as well as linking both these buses to your passthrough slot. The 1-bit ROM for MOD is also linked to the address bus but not the data bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a Mega Drive (!CE OR !OE) is the read signal I'll call !CARTREAD. Link !CARTREAD to the !OE of both NEW and the passthrough slot. Now the two data sources will only ever be enabled on a valid read. Now we need to determine which of the two data sources' !CEs is enabled. This is the job of MOD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link !CARTREAD to both MOD!CE and MOD!OE so on a valid read it outputs the value of MOD(A) inside the cart. We use this to generate Chip Selects for the two data sources: Send this MOD(A) value to the !CE signal of the passthrough slot unmodified so when a valid read occurs and MOD=0 then ROM!CE and ROM!OE are Low and the output data is ROM(A). Send NOT MOD(A) to the !CE signal of NEW so when a valid read occurs and MOD=1 then NEW!CE and NEW!OE are Low and the output data is NEW(A).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Logic:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If !CE is High then !CARTREAD is high and neither NEW nor ROM respond, the data bus is high impedance. MOD is idle too.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If !OE is High then !CARTREAD is high and neither NEW nor ROM respond, the data bus is high impedance. MOD is idle too.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If !CE is Low and !OE is Low then MOD is enabled, MOD(A) is output inside the cart:&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;If !CE is Low and !OE is Low and MOD(A) == 0, then ROM is enabled and data bus = ROM(A).&lt;/li&gt;&#xA;&lt;li&gt;If !CE is Low and !OE is Low and MOD(A) == 1, then NEW is enabled and data bus = NEW(A).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;--&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This isn't the best or fastest way to do this, but I think it's the conceptually simplest. On a read, we want to output something. Look up which something in a table, and enable the appropriate ROM of the two. It's somewhat like bankswitching but on an address-granularity determined by your MOD rom data. If you can spare increased current draw and board space, you can use a (huge) 16-bit 2-to-1 multiplexer selecting on MOD(Y) instead of the enable logic, eliminating any worry about MOD(Y) and NOT MOD(Y) being staggered by a propagation delay. For more complicated systems than the Mega Drive which use mappers rather than flat ROM, this system falls apart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This isn't how a Lock-On cartridge works, by the way. A Lock-On cartridge holds all of its special game logic (S3+K, Knuckles S2, Blue Sphere) inside itself, and uses the passthroughed game as a data source mapped into the Mega Drive's address space after the S&amp;amp;K cart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to follow the Lock-On concept, I think you'd have to make a whole new game* which refers to data stored in your locked-on cartridge as a data source. You couldn't just boot into the locked-on game, because either it would be in the wrong address space and all its stored pointers would be wrong, or it'd be in the right address space and you'd just boot into the unmodified game. :) (* your 'whole new game' could be just the functional code of the original game with all the stored assets zeroed-out and pointers modified to refer to their locked-on original counterpart except the text blocks you want to modify, which is what I believe the KnucklesS2 ROM is within the S&amp;amp;K cartridge if you were to isolate it, but by that point you're going to great lengths to make a highly questionable, very involved derivative of the entire game image.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modifying game data on an address-by-address basis is what Game Genie does; you should look up how their hardware works!&lt;/p&gt;&#xA;" OwnerUserId="17826" LastEditorUserId="17826" LastEditDate="2020-04-28T01:09:45.753" LastActivityDate="2020-04-28T01:09:45.753" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14540" PostTypeId="2" ParentId="7794" CreationDate="2020-04-27T00:42:20.160" Score="2" Body="&lt;p&gt;On the system I'm most familiar with (the Amstrad CPC range of home computers) the alternate register set was reserved for use by the operating system and the built-in BASIC. User code could mess about with one set to its hearts content, but when you called a routine stored in the system ROM it would exchange register sets, do its thing, then exchange sets again. And of course interrupts were handled by OS functions so would do the same.&lt;/p&gt;&#xA;" OwnerUserId="17944" LastActivityDate="2020-04-27T00:42:20.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14541" PostTypeId="2" ParentId="14307" CreationDate="2020-04-27T03:13:05.727" Score="3" Body="&lt;p&gt;Yes there’s a client, which I bought years ago and used with Netware up to v5 when I was running my own server at home.&lt;/p&gt;&#xA;" OwnerUserId="17947" LastActivityDate="2020-04-27T03:13:05.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14542" PostTypeId="2" ParentId="7794" CreationDate="2020-04-27T05:32:52.460" Score="1" Body="&lt;p&gt;I used them all the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I starting programming Z80 machine code when I was 14 or 15 on a Sinclair ZX Spectrum after being briefly introduced to it on a friend's TRS-80 model 1 and 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Speccy if you were just writing a machine code routine you knew which registers the OS (BASIC interpreter) would need preserved, which may or may not have included any of the alt. registers, I can't remember any more. But you just saved them on the stack or in RAM and restored them before returning to BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were writing a game, you just took over the whole system and could use all registers as you pleased and never return to BASIC. In this case you didn't even have to worry about interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was no multitasking, no real OS, no memory protection, no security model. In more advanced OSes like CP/M or possibly any system with disk drives as standard, I'm sure you would also know which registers you had to avoid or save and restore and things you had to have in a certain way to allow for system interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But to me they were just extra registers with some quirky properties, and in those days all registers had some quirky properties. If you needed more registers you'd swap them in and out taking into account that most of the registers swap at once. The accumulator only took the flags register with it, while all other registers swapped in one big group. It was just stuff you had to keep straight in your head when writing machine code. I assume compilers could do a good or bad job trying to juggle them as well. I never used a compiler in the 8-bit days.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-04-27T05:32:52.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14543" PostTypeId="2" ParentId="14534" CreationDate="2020-04-27T10:10:37.777" Score="10" Body="&lt;p&gt;Whilst Timex assembled Sinclair ZX Spectrum computers, the Timex architecture of the TS/TC 2068 is a reengineering of the ZX Sinclair behaviour with improved and more reliable technology. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the particular case of the Timex 2068, it has 128K of RAM, 2 ROMs, an extended BASIC, a new paging scheme, new video modes, and a sound chipset. The downside is some introduced incompatibilities. (some also shared by the ZX Spectrum 128K models). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware implementation of the cartridge scheme is not the same as the ZX interface 2, and even cartridges between the American TS 2068 and the European TC 2068 have different pins, size, and slightly different behaviour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, beware the ROMCS pin is not present in the external bus of the Timex 2068 computers, and for that alone, we know Interface 2 wont work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The part that we can surely say it is common to the 3 hardware implementations, is they all have to deactivate the ROM(s) to page the ROM cartridge in the lower 16KB of the Z80 address space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the 48K models you have a ROMCS pin that has to be fed +5V, in the Timex 2068 you control RAM/ROM paging via I/O ports (or cartridge pins). In the 48K you also have one ROM, in the 2068 you have two ROMs. So we can say definitively that the hardware implementation is not the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The joystick implementation in the Timex 2068 was different (Protek/full Atari can't remember), from the 48K one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, since the Interface 2 cartridge games appeared in a relatively early ZX Spectrum period where many hardware tricks abused in later games where not employed, if you manage to flash ZX Spectrum cartridges in Timex cartridges, and only play with the keyboard, they &lt;em&gt;might&lt;/em&gt; work as they are, or at most, with some small patches. We can know that for sure, as the &quot;48 emulator cartridge&quot; is only a 1982 ZX Spectrum 48K ROM (with a small patch for the RAM paging system of the Timex 2068, not sure).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the Timex 2068 was a much more advanced computer, the reverse is probably not true. The 2068 cartridge games won't probably work if you manage to extract them from a 2068 cartridge and try to run them in a ZX Spectrum 48k.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS. Interface 2 ROM cartridge file game images are easily found in the Internet, and can be run in emulators.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2020-05-02T14:01:11.530" LastActivityDate="2020-05-02T14:01:11.530" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14544" PostTypeId="1" CreationDate="2020-04-27T10:41:15.573" Score="6" ViewCount="143" Body="&lt;p&gt;There's &lt;a href=&quot;http://www.worldofspectrum.org/rusfaq/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page about the ZS Scorpion&lt;/a&gt;, and I'm reading about the way bankswitching works. Port 0x7ffd is the same as on western ZX Spectrums, but to double the amount of RAM to 256k and also the amount of ROM, this is augmented by another port, 0x1ffd. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the copypasta:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*port 7ffd. full compatibility with Zx spectrum 128. digits are:&#xA;&#xA;D0-D2 - number of RAM page to put in C000-FFFF&#xA;D3    - switch of address for RAM of screen. 0 - 4000, 1 - c000&#xA;D4    - switch of ROM : 0-zx128, 1-zx48&#xA;D5    - 1 in this bit will block further output in port 7FFD, until reset.&#xA;&#xA;*port 1ffd - additional port for resources of computer.&#xA;&#xA;D0    - block of ROM in 0-3fff. when set to 1 - allows read/write page 0 of RAM&#xA;D1    - selects ROM expansion. this rom contains main part of service monitor.&#xA;D2    - not used&#xA;D3    - used for output in RS-232C&#xA;D4    - extended RAM. set to 1 - connects RAM page with number 8-15 in&#xA;        C000-FFFF. number of page is given in gidits D0-D2 of port 7FFD&#xA;D5    - signal of strobe for interface centronics. to form the strobe has to be&#xA;        set to 1.&#xA;D6-D7 - not used. ( yet ? )&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's quite clear how 0x7ffd works. It is clearly documented in English and works in an obvious way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I'm struggling to really understand some details of what that second port does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is &lt;code&gt;0x1ffd:d1&lt;/code&gt; active high or active low?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If &lt;code&gt;0x1ffd:d1&lt;/code&gt; is true, such that ROM expansion is selected, then are &lt;code&gt;0x1ffd:d0&lt;/code&gt; and &lt;code&gt;0x7ffd:d4&lt;/code&gt; both don't-cares? How then can the TR-DOS ROM be selected? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, several of those bits are left unused. Are they the mechanism by which the Scorpion may be expanded to 2 megabytes of RAM, and ½ megabyte of ROM? Is it known how that works? I would appreciate some more unambiguous information. &lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="3290" LastEditDate="2020-04-30T09:22:10.033" LastActivityDate="2020-04-30T09:22:10.033" Title="Details of ZS Scorpion port 0x1ffd" Tags="&lt;zx-spectrum&gt;&lt;memory-layout&gt;&lt;zx-spectrum-clones&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14545" PostTypeId="1" AcceptedAnswerId="14556" CreationDate="2020-04-27T11:32:34.870" Score="11" ViewCount="1943" Body="&lt;p&gt;I am creating a minimal &lt;strong&gt;Z80 computer&lt;/strong&gt; with serial output on a breadboard. I have kind of moved up from the &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/13584/16125&quot;&gt;last question&lt;/a&gt;, where I was executing instructions on Z80 using specific connection of resistors on data bus. Now I am finally hooking up the Z80 with ROM and RAM chips. Many websites list that the maximum space that the Z80 itself can address is 64K (2^16). I have &lt;strong&gt;32K SRAM&lt;/strong&gt; chip and &lt;strong&gt;32K EEPROM&lt;/strong&gt;, so I want to add both chips to the &lt;strong&gt;64K address space&lt;/strong&gt;, it just fits to the limit, right? Would it be possible to fully operate with whole 32K RAM and 32K ROM without using manual bank selection to determine, which address space part should be used? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking about using &lt;strong&gt;74HCT139&lt;/strong&gt; 1 from 4 decoder. I want to divide &lt;strong&gt;64K address space&lt;/strong&gt; into &lt;strong&gt;four parts&lt;/strong&gt; of &lt;strong&gt;16K&lt;/strong&gt;. So I will be able to use 14 address pins to address 16K and 2 address pins will be free to use in 74HCT139. Thanks to the decoder I will get 4 signals, which will help me to get into 1 of the 4 address spaces. For this case I would like to use OR gate like &lt;strong&gt;74HCT32&lt;/strong&gt;. Please see the image below, I tried to express myself through the picture. Each chip (ROM and RAM) has 2 address space parts, which means, that I will be fine using 0 or 1 to determine, which address space part is indeed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So my question is:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my decoding logic valid?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WFvvi.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WFvvi.jpg&quot; alt=&quot;Logic scheme + address space&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16125" LastEditorUserId="16125" LastEditDate="2020-06-02T14:34:08.360" LastActivityDate="2020-06-02T15:48:43.987" Title="Decoding Logic and Memory Systems for 8-bit computer - 64K address space" Tags="&lt;z80&gt;&lt;rom&gt;&lt;ram&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14546" PostTypeId="2" ParentId="14545" CreationDate="2020-04-27T12:16:47.403" Score="10" Body="&lt;p&gt;Sure, it works, but then again, why decoding four 16 KiB blocks when it's about two 32 KiB chips? All you need to decode is A15.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A15=LOW should select the ROM (*1), while&lt;/li&gt;&#xA;&lt;li&gt;A15=HIGH does the same for RAM&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Inccoperating a A14 is rather pointless and using a'139 looks like overkill unless there is some future use. It also adds signal time, limiting maximum speed. Instead this might be done with a single NOT gate, like one element of a '19 (*2) put inbetween A15 and CE of the RAM, so way less effort.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(This might be already covered in missing parts of the schematic)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But more important then decoding is the way access is handled. For one, the Z80 does not supply any R/W signal like the for example Motorola, but separate signals for read (/RD) and write (/WR). Equally important, it provides a /MREQ signal marking memory access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All three need to be incooperated to generate the needed /CS, /OE and /WR (*3) for either chip.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - x80 type CPU need ROM on address zero for the reset vector&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Or one element of an all ubiquitous 7400 NAND with both inputs connected. On a 74xx design there's are always at least one left :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - In fact, since you're using an EEPROM, /WR can be generated for both to allow in system updates ... maybe with a security switch to disable this during non update times :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-02T15:48:43.987" LastActivityDate="2020-06-02T15:48:43.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14547" PostTypeId="2" ParentId="14545" CreationDate="2020-04-27T12:17:31.563" Score="13" Body="&lt;p&gt;Your observation about the 64K address space is correct, your 32K RAM and 32K EEPROM will be able to fill that address space to 100%.  In Z80 designs, the ROM/PROM/EPROM/EEPROM is usually placed starting at 0x0000 since when you do a RESET, the Z80 starts executing at 0x0000 and you usually want to have your program start there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course there are many variations on this depending on your application but this is probably a good place to start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were merely using the two 32K devices as they are, you could use the A15 address line as your select between the two.  A15 would be low for the first 32K of addresses and could serve as the chip select or /CS (normally an active low signal) and the inverse of A15, or /A15 could serve as the /CS for your RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So all you'd need is an inverter such as a 74LS04 or similar.  If you want to split into 4 spaces, a decoder such as the 74LS139 is a good choice and your logic looks ok to me.&lt;/p&gt;&#xA;" OwnerUserId="13762" LastActivityDate="2020-04-27T12:17:31.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14548" PostTypeId="2" ParentId="14544" CreationDate="2020-04-27T15:56:14.400" Score="2" Body="&lt;p&gt;Working backwards from &lt;a href=&quot;https://github.com/descarte1/fuse-emulator-fuse/blob/541195f95f3b1a96dafb0fc7a9970fca76b0d966/machines/scorpion.c#L119&quot; rel=&quot;nofollow noreferrer&quot;&gt;FUSE&lt;/a&gt; — &lt;code&gt;machine_current-&amp;gt;ram.last_byte&lt;/code&gt; appears to be the current state of &lt;code&gt;7ffd&lt;/code&gt; and &lt;code&gt;machine_current-&amp;gt;ram.last_byte2&lt;/code&gt; is &lt;code&gt;1ffd&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;1ffd:d1&lt;/code&gt; is active high;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;1ffd:d0&lt;/code&gt; appears to override &lt;code&gt;d1&lt;/code&gt; — &lt;code&gt;d1&lt;/code&gt; selects which ROM would be visible in the usual ROM area if ROM were selected; &lt;code&gt;d0&lt;/code&gt; determines whether ROM or RAM is selected;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;d1&lt;/code&gt; does sit in front of the &lt;code&gt;7ffd&lt;/code&gt; selection though — the classic 128kb or 48kb ROM selection is relevant only if the user hasn't selected the Scorpion ROM instead.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Extension: per &lt;a href=&quot;https://cs.wikipedia.org/wiki/Port_253&quot; rel=&quot;nofollow noreferrer&quot;&gt;Czech wikipedia&lt;/a&gt; &lt;a href=&quot;https://translate.google.com/translate?sl=auto&amp;amp;tl=en&amp;amp;u=https%3A%2F%2Fcs.wikipedia.org%2Fwiki%2FPort_253&quot; rel=&quot;nofollow noreferrer&quot;&gt;as machine translated&lt;/a&gt;, port $dffd is the Scorpion's &quot;extended memory paging&quot;, so I suspect that's used for memory beyond the first 256kb. Unfortunately the reference is a print magazine which I haven't yet found an online copy of.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-04-28T04:20:23.143" LastActivityDate="2020-04-28T04:20:23.143" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14552" PostTypeId="1" CreationDate="2020-04-28T06:10:40.363" Score="0" ViewCount="72" Body="&lt;p&gt;I've purchased a Commodore 64 &lt;em&gt;&quot;as-is&quot;&lt;/em&gt; from eBay. I tediously cleaned out the interior and removed all chips and dusted them out and put them back together.&#xA;Still, no signal. Except for sound. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I purchased an RCA video cable with an RF TV connector. Sadly, I should've known that Smart TV is so modern. That it also won't pick up any signal.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Question&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Are there any issues with the Commodore that could be addressed so that I don't have to buy an old television to actually get to use my old machine?&lt;/p&gt;&#xA;" OwnerUserId="11944" LastEditorUserId="6659" LastEditDate="2020-04-29T16:24:37.967" LastActivityDate="2020-04-29T16:24:37.967" Title="Composite video from C64 not being picked up by a modern Smart TV" Tags="&lt;commodore-64&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2020-04-28T09:50:43.450" ContentLicense="CC BY-SA 4.0" />
  <row Id="14554" PostTypeId="1" AcceptedAnswerId="14555" CreationDate="2020-04-28T09:58:33.050" Score="4" ViewCount="513" Body="&lt;p&gt;I know that when an .COM file is loaded, DOS loads its contents into memory, sets the segment registers (&lt;code&gt;CS&lt;/code&gt;, &lt;code&gt;DS&lt;/code&gt; and &lt;code&gt;SS&lt;/code&gt;) to point to the 64KB segment and then performs a &lt;code&gt;jmp&lt;/code&gt; to the starting address. The program can then use that segment however it pleases, but how exactly would it actually use it in practice (where is the stack, heap, data, and code)?&lt;/p&gt;&#xA;" OwnerUserId="16617" LastEditorUserId="6659" LastEditDate="2020-04-28T10:14:21.167" LastActivityDate="2020-04-28T11:44:35.443" Title="What is the memory layout in MS-DOS" Tags="&lt;ms-dos&gt;&lt;memory-layout&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14555" PostTypeId="2" ParentId="14554" CreationDate="2020-04-28T10:12:44.393" Score="3" Body="&lt;h2&gt;TL;DR: MS-DOS does not assume any memory layout.&lt;/h2&gt;&#xA;&lt;p&gt;It depends on programming language, language runtime and application code.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The program can then use that segment however it pleases,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Exactly that is how they do it. Each in its own way. The only common (since forced) is where the (start) code is loaded. MS-DOS does not make any assumptions beside jumping to CS:100h when execution begins.&lt;/p&gt;&#xA;&lt;p&gt;The COM format and it's TINY &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_Memory_Model#Memory_models&quot; rel=&quot;nofollow noreferrer&quot;&gt;memory model&lt;/a&gt; (*1) was introduced to easy conversion of 8-bit (8080/Z80) software by offering a close setup. In fact, Digital Research called it the 8080 memory model in &lt;a href=&quot;https://en.wikipedia.org/wiki/CP/M-86&quot; rel=&quot;nofollow noreferrer&quot;&gt;CP/M-86&lt;/a&gt; documentation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but how exactly would it actually use it in practice (where is the stack, heap, data, and code)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This depends on the language used as well as what is needed. Like not every program has a heap. As said, MS-DOS does not give any rules or guidelines here.&lt;/p&gt;&#xA;&lt;p&gt;This is as well true for more complex .EXE files which just allows to start execution on a different address as well as setting up SS:SP to a value relative to the PSP.&lt;/p&gt;&#xA;&lt;h2&gt;In Detail:&lt;/h2&gt;&#xA;&lt;p&gt;When execution starts, MS-DOS guarantees the following values:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;AL - 00 if first FCB has a drive letter&lt;/li&gt;&#xA;&lt;li&gt;AH - 00 if second FCB has a drive letter&lt;/li&gt;&#xA;&lt;li&gt;DS -&amp;gt; PSP-segment&lt;/li&gt;&#xA;&lt;li&gt;ES -&amp;gt; PSP-segment&lt;/li&gt;&#xA;&lt;li&gt;SS:SP&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For EXE -&amp;gt; Segment/stack pointer as defined in MZ-header&lt;/li&gt;&#xA;&lt;li&gt;For COM -&amp;gt; SS -&amp;gt; PSP-segment, SP -&amp;gt; 0FFFEh (*2)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;CS:IP&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For EXE -&amp;gt; Entry point as defined in MZ-header&lt;/li&gt;&#xA;&lt;li&gt;For COM -&amp;gt; CS -&amp;gt; PSP-segment, IP -&amp;gt; 0100h&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/New_Executable&quot; rel=&quot;nofollow noreferrer&quot;&gt;New Executable&lt;/a&gt; for Windows (and later) differ by loading registers different:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;AX -&amp;gt; Environment segment&lt;/li&gt;&#xA;&lt;li&gt;BX -&amp;gt; Command line (offset within emvironment segment, important for long command lines)&lt;/li&gt;&#xA;&lt;li&gt;CX - Size of data segment&lt;/li&gt;&#xA;&lt;li&gt;ES - 0 (!)&lt;/li&gt;&#xA;&lt;li&gt;DS - Data segment&lt;/li&gt;&#xA;&lt;li&gt;SS -&amp;gt; Stack segment&lt;/li&gt;&#xA;&lt;li&gt;SP -&amp;gt; Initial SP as defined in NE header&lt;/li&gt;&#xA;&lt;li&gt;CS:IP -&amp;gt; Entry point as defined in NE header&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;What to do with all of this is up to the program loaded.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Except, the stack segment was always allocated outside - then again, the CMD loader format was already more capable than COM or EXE as well.&lt;/p&gt;&#xA;&lt;p&gt;*2 - AFAIR (!) this differs when loading a program with less than 64 KiB of available memory. Then SP is set to the upper end of available memory minus 2.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-04-28T11:44:35.443" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="14556" PostTypeId="2" ParentId="14545" CreationDate="2020-04-28T13:11:56.043" Score="8" Body="&lt;p&gt;I have solved a similar problem when reworking my &lt;a href=&quot;https://github.com/omenmicro/alpha&quot; rel=&quot;noreferrer&quot;&gt;8085-based OMEN Alpha computer&lt;/a&gt; for the Z80 CPU. The memory part is really simple:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tSDx5.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tSDx5.png&quot; alt=&quot;OMEN Alpha Z80 Memory circuit&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have two memories, 32k each, and you should map the EEPROM from 0000h, RAM from 8000h. I use common data and address bus, as well as the control bus (/RD and /WR). The only memory-specific signals are /RAMCS and /ROMCS. They are generated by 74HCT00 chip this way:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jxAOc.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jxAOc.png&quot; alt=&quot;OMEN Alpha Z80 Memory decoder&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, all you need is the A15 (the highest) address signal, gated by /MREQ signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;/ROMCS is active(=0) when /MREQ is active and A15=0, /RAMCS is active when /MREQ is active and A15=1&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="11446" LastEditDate="2020-04-29T05:26:59.420" LastActivityDate="2020-04-29T05:26:59.420" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14557" PostTypeId="1" AcceptedAnswerId="14559" CreationDate="2020-04-28T13:33:00.690" Score="20" ViewCount="6601" Body="&lt;p&gt;Intel's Socket 3, used for 486 processors, was a 19×19 pin grid array socket. However, all compatible processors, to my knowledge, used 17×17 PGA packages. What was the point of the extra pins around the perimeter of the socket? Were they even connected to the motherboard at all?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the pins are actually used by something, what were their functions? All pinout charts I can find online only show the pins of a 17×17 PGA processor.&lt;/p&gt;&#xA;" OwnerUserId="15593" LastEditorUserId="2037" LastEditDate="2020-04-28T23:53:46.840" LastActivityDate="2020-04-29T21:03:18.613" Title="Why did Socket 3 have more pins than needed for the 486?" Tags="&lt;cpu&gt;&lt;intel&gt;&lt;motherboard&gt;&lt;80486&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14558" PostTypeId="2" ParentId="14557" CreationDate="2020-04-28T14:00:28.630" Score="8" Body="&lt;p&gt;Socket 3 did not have more pins than needed. It was designed to support the Pentium OverDrive CPUs that Intel released in the mid-1990s. These CPUs could have up to 237 pins, while the Socket 3 allowed 238 pins.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-04-28T14:00:28.630" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14559" PostTypeId="2" ParentId="14557" CreationDate="2020-04-28T14:00:56.430" Score="32" Body="&lt;p&gt;The extra pins were forward-planning, on both Socket 2 and Socket 3. Most of the extra pins are used for power (Vcc) and ground (Vss), which is useful to provide more power to a CPU. The other pins are keys, a new INIT pin (F19), and signals used for enabling and controlling the write-back L1 cache. (See the socket 3 specifications in &lt;a href=&quot;http://bitsavers.org/components/intel/80486/241731-002_Intel486_Microprocessors_and_Related_Products_Jan95.pdf&quot; rel=&quot;noreferrer&quot;&gt;the 486 family datasheets&lt;/a&gt; and &lt;a href=&quot;http://db.zmitac.aei.polsl.pl/Electronics_Firm_Docs/PENTIUMIII/pentium/datashts/29054401.pdf&quot; rel=&quot;noreferrer&quot;&gt;the Pentium OverDrive datasheets&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only CPUs to use the extra rows of pins are the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pentium_OverDrive&quot; rel=&quot;noreferrer&quot;&gt;Pentium OverDrives&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-04-29T21:03:18.613" LastActivityDate="2020-04-29T21:03:18.613" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="14560" PostTypeId="1" AcceptedAnswerId="14563" CreationDate="2020-04-28T15:56:20.653" Score="5" ViewCount="373" Body="&lt;p&gt;The Leningrad uses the КР565РУ5 chip, which is the same as a 4164. It contains 64kbits of DRAM, and the datasheet says that each of the 256 row addressed need to be strobed every 4ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can see how the address lines &lt;code&gt;A0&lt;/code&gt; through &lt;code&gt;A7&lt;/code&gt; are multiplexed with &lt;code&gt;A8&lt;/code&gt; through &lt;code&gt;A15&lt;/code&gt; using two КП1533КЛ1, which is controlled by RAS. This causes the column and row to be sent to the DRAM chip, makes sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the /RFSH signal from the Z80 brings /WE high through some random-looking glue logic; I bet the Z80's DRAM refresh logic is being put to good use. There's just one thing though: the Z80 doesn't flip the highest bit of the &lt;code&gt;R&lt;/code&gt; register, and so &lt;code&gt;R&lt;/code&gt; only iterates across 32k. So how does the Leningrad refresh the entire DRAM?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(If you don't have the schematics for this computer, they may be found &lt;a href=&quot;http://zxbyte.ru/leningrad.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here.&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="3290" LastEditDate="2020-04-29T20:21:50.497" LastActivityDate="2020-04-30T03:10:14.093" Title="How does DRAM refresh work in the Leningrad?" Tags="&lt;zx-spectrum&gt;&lt;dram&gt;&lt;clone&gt;&lt;zx-spectrum-clones&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14561" PostTypeId="2" ParentId="14186" CreationDate="2020-04-28T16:24:21.653" Score="2" Body="&lt;p&gt;In addition, here are the Amiga external floppy drives:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1010 - 3.5&quot;x1 @ 880k, 1985&lt;/li&gt;&#xA;&lt;li&gt;1020 - 5.25&quot;x1 @ 360k, 1986&lt;/li&gt;&#xA;&lt;li&gt;1011 - 3.5&quot;x1 @ 880k, 1989&lt;/li&gt;&#xA;&lt;li&gt;1411 - 3.5&quot;x1 @ 880k, 1991&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4822" LastEditorUserId="4822" LastEditDate="2020-04-29T16:26:44.613" LastActivityDate="2020-04-29T16:26:44.613" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14562" PostTypeId="2" ParentId="14560" CreationDate="2020-04-28T17:01:09.417" Score="7" Body="&lt;p&gt;From the schematics, I can see this uses a single RAM bank, opposed to the original Sinclair machine, which uses two separate RAM banks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means that the entire RAM address space must be shared between the video circuit and the CPU, while the original Sinclair machine only shared 16KB of RAM. Now, it happens that DRAMs are not only refreshed using RAS only refresh cycles (the usual way), but with regular read cycles. As the video circuit must access RAM in a semi-sequential pattern in order to build the screen, that process also refreshes memory. Let's see how:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We will assume that the video circuit reads one the bitmap area every 1.143us (i.e. 7 MHz pixel clock, and a byte holds 8 pixels, so a new bitmap byte is needed every 8 periods of the pixel clock). Let's forget about the attribute byte for the moment. To read the video memory for the first scan, it must read 32 consecutive memory addresses in 36.57us. That is, bits A0 to A4 change while bits A5 to A14 doesn't during this time. Multiplexers are wired so the low address part is used as row address and the high address is used as column address. That means that consecutive accesses hit consecutive row files. During a scanline read, 32 DRAM rows are refreshed in this time. The remaining time, up to 64us (the duration of a scanline in PAL), the video circuit is generating border or blanking signals, and no memory is read.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scans 0 to 7 use the same row address, as these scans are spaced by 256 bytes. To read the second scanline, the high address byte is incremented, while the low address byte is the same as in scan 0. The same goes for scan 1, scan 2, etc, until scan 7. Low address byte goes from 0 to 31 (dec)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scans 8 to 15 belong to the next character position. These scans share the same value for bits A15-A8, while A7 to A0 go now from 32 to 63.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scans 16 to 23 use values for A7-A0 ranging from 64 to 95.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will see that the complete row space is scanned as the video circuit finishes reading scan 56.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;56 scanlines, along with border and blanking, last 56*64=3.584 ms, that's just under the limit of 4ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This pattern is repeated three more times: for scans 64 to 127, and again from 128 to 191. After that, there is an interval of time in which RAM is not actively read by the video circuit. For a PAL Spectrum, this interval goes from scanline 192 to 311. That's about 7.7 ms. Too much time without refreshing. During this &quot;void&quot; time, RAM refreshing solely depends upon the Z80 to continue accessing memory. That means that a halted Z80 might cause some RAM corruption. In practice, I've found that much more than a few miliseconds of a halted Z80 are needed to produce noticeable RAM corruption (about 2-3 minutes in a standard Sinclair Spectrum 48K!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, it's the same technique the Sinclair Spectrum uses to refresh the low memory bank. In the issue 2 model, signal RFSH was still used, but starting with issue 3, the RFSH signal was removed as it was not actually needed.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2020-04-28T17:13:19.447" LastActivityDate="2020-04-28T17:13:19.447" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14563" PostTypeId="2" ParentId="14560" CreationDate="2020-04-28T21:33:31.983" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;There's just one thing though: the Z80 doesn't flip the highest bit of the R register,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;True&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and so R only iterates across 32k.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really, it doesn't access 32 Ki but 128 rows.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So how does the Leningrad refresh the entire DRAM?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, like any other machine using 4164 RAMs - by refreshing all 128 rows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is important to separate address multiplexing (as 8+8) and RAM organization  (as 7+9), which is 128 rows of 512 bit cells for the 4164 (*1). Internal bits 6..0 of the row address is used to select a 512 bit row, while bit 7 is used together with bit 7..0 of the column address to address the physical column. As a result it needs only 128 refresh cycles to reload the whole content.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See this excerpt of the original Mostek MK4164 data sheet:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ppxkK.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ppxkK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is true for most chips bearing the 4164 designation (except Fujitsu, National Semi and TI), as well as many other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://radio-hobby.org/modules/analog/%D0%BA%D1%80565%D1%80%D1%835&quot; rel=&quot;noreferrer&quot;&gt;this list&lt;/a&gt; КР565РУ5 are direct analog to Motorola's MCM6664 and Mostek'd MK4164 - both using 128 rows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 7 bit refresh was done for 4116 compatibility and came especially handy for Z80 systems, enabling upgrade (and cost saving) without any redesign beyond a new PCB.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Companies with 256x256 organization were Fairchild (F4164), INMOS (IMS2600), Micron (MT4264), National Semi (NMC4164; MMC3764 were 128 row), Siemens (HYB4164) and Texas Instruments (SMJ/TMS4164). All other 64 Ki chips were organized with 128 rows - at least as my memory goes.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-04-29T06:59:53.387" LastActivityDate="2020-04-29T06:59:53.387" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14564" PostTypeId="2" ParentId="9599" CreationDate="2020-04-29T10:40:07.377" Score="0" Body="&lt;p&gt;Greenleaf used to have a fantastic C, then later C++ based suite of libraries. Many of them were cross platform. Greenleaf Database worked with many different XBase file formats. DataWindows came out long before Microsoft Windows, but the evil empire managed to get a Windows trademark and sent weekly threatening letters to the small company in Texas. (I think they were in Texas.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.edm2.com/index.php/Greenleaf_Data_Windows&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.edm2.com/index.php/Greenleaf_Data_Windows&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From here: &lt;a href=&quot;https://www.drdobbs.com/new-products/184402584&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.drdobbs.com/new-products/184402584&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Greenleaf Software, Inc. began shipping Greenleaf DataWindows v3.0, bundled with the screen designer, Greenleaf Make-Form. Single-user licenses for Greenleaf DataWindows for DOS, UNIX, or 386, are available for $549, and include source code and MakeForm. DataWindows v3.0 adds translucent shadows, device independence for many video modes (including VESA support) and mouse use in data entry and menus. The 386 version adds support for Rational Systems' 386 DOS/4G and the DOS version adds support for Phar Lap's 286 DOS extender. Dialog boxes now have controls including push buttons, check boxes, and radio buttons. New data types, mouse support and more flexible entry and exit points support data entry design. MakeForm allows programmers to &quot;paint&quot; a form and define its attributes in a WYSIWYG fashion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used to own this. Threw it out a few years ago during an office cleaning binge. Kind of wish I had it now.&lt;/p&gt;&#xA;" OwnerUserId="17962" LastEditorUserId="276" LastEditDate="2020-04-29T17:04:52.237" LastActivityDate="2020-04-29T17:04:52.237" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14566" PostTypeId="2" ParentId="9684" CreationDate="2020-04-29T19:34:42.243" Score="3" Body="&lt;p&gt;Rockwell Collins had a LAN based on time division multiplexing, not packets.  This system goes back to the late 60s.  I worked on it in the Air Canada reservation system, in Toronto, starting in early 1978.  There were two loops, an 8 Mb TDX loop and 2 Mb TDM loop.  The TDX loop was run on triaxial cable and the TDM on RG-58, IIRC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://patents.google.com/patent/US3659271&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is some patent info on the TDX loop.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17965" LastActivityDate="2020-04-29T19:34:42.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14567" PostTypeId="1" AcceptedAnswerId="14569" CreationDate="2020-04-29T21:10:13.840" Score="3" ViewCount="162" Body="&lt;p&gt;Is there any way i could use either of those networking cards and use them on a modern ethernet system? We have aDSL where i live. If i couldnt connect it to my home network, is there any way i could directly connect the computer to another computer using the same protocol?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a Packard Bell Legend 20CD that, when i obtained it, had 2 different networking cards. One is the diamond multimedia 23540025-002, which dates 1999. It uses ISA, and has 2 RJ11 connector ports and a speaker out and mic in. It's 5 years older than the manufacture date of the computer, so i doubt it would be compatible with the Win3.11 OS. The other network card i have not fully identified, but it has a rockwell RC96V24DPL, and seems to be the original card included in the machine. It has the part number D-9924NP1/R1.&lt;/p&gt;&#xA;" OwnerUserId="17967" LastEditorUserId="17967" LastEditDate="2020-04-29T21:30:21.023" LastActivityDate="2020-04-30T19:25:00.207" Title="Networking WfW 3.11 between modern ethernet and 56k internal modem card" Tags="&lt;internet&gt;&lt;network&gt;&lt;modem&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14568" PostTypeId="1" AcceptedAnswerId="14571" CreationDate="2020-04-29T22:00:09.563" Score="3" ViewCount="541" Body="&lt;p&gt;In Paul Malvino's &quot;Digital Computer Electronics&quot;, he labeled 3 theoretical microcomputers which he called the SAPs or &quot;Simple As Possible&quot;s. The point of these 8-bit microcomputers was to teach computer nerds like myself how a computer really works. Just in case you haven't heard of these, I will put a description of each one below(The maximum clock speed for all of these is around 1MHz, because these are all made of 74ls components, so i wont put that down).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SAP-1&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Can access 16 bytes of memory&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;5 instructions(LDA, ADD, SUB, OUT, HLT)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No jump or branch instructions&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No stack&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No subroutines&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No flags&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;2 general purpose registers&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No I/O ports&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;SAP-2&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Can access 64 kilobytes of memory&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;42 instructions(includes jump and branch instructions)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Subroutines&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;2 flags(Sign and Zero)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;4 general purpose registers&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;2 input ports and 2 output ports&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No stack&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;SAP-3&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Can access 64 kilobytes of memory&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Around 50 or 60 instructions(includes jump and branch instructions)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Subroutines&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;4 flags(Sign, Zero, Carry, and Parity)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;8 general purpose registers&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Includes a stack&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;(I dont know how many i/o ports this has because I havent read the whole book yet)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Okay, back to my question. How do these microcomputers &quot;stack&quot; up against retro-age microprocessors and microcomputers like the 6502, Z80, 8080 or 8085? Are the SAP microcomputers hopelessly outclassed by the real microprocessors or do they compete or even surpass them in efficiency and viability?&lt;/p&gt;&#xA;" OwnerUserId="17968" LastEditorUserId="10260" LastEditDate="2020-04-30T02:55:21.393" LastActivityDate="2020-05-02T19:33:31.823" Title="&quot;SAP&quot; microcomputers vs real microcomputers" Tags="&lt;8-bit-microcomputers&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14569" PostTypeId="2" ParentId="14567" CreationDate="2020-04-29T22:01:51.107" Score="3" Body="&lt;p&gt;As I understand it, you have two internal modems, but nothing one would normally call a &quot;networking card&quot;, or more precisely a NIC (network interface controller). Depending on what you want to achieve, you basically have three options: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If you want to bring you computer onto your network, your best course of action would be to get an ISA NIC (&quot;ethernet card&quot;) with a 10BASE-T socket for which Windows 3.11 drivers exist. If you want more than basic TCP/IP connectivity, you'll probably have to set up those services in your network, too. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you want to use those modems to re-live the dial-up experience, you could set up a telephone line simulator to connect them to another modem, attached to another, suitably configured computer on your network. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If all you want is to exchange the occasional file, you could look into &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;using a null-modem or LapLink (parallel) cable&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;exchanging media, such as an IDE harddisk, a compact flash card in a CF-to-IDE adapter, or burnt CDs (one way). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you really just want to put some software onto the machine, the last option would be &lt;em&gt;a lot&lt;/em&gt; less work than the other two. &lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-04-30T19:25:00.207" LastActivityDate="2020-04-30T19:25:00.207" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14570" PostTypeId="2" ParentId="7655" CreationDate="2020-04-29T23:16:30.030" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Did any retrocomputing system buffer the write so as to let the CPU run at full speed whenever it's not reading from the framebuffer (which is practically always)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, the Inves Spectrum +. A clone made by Investronica, which departs from the classical arrangement of two memory banks, one contended, one not. In the Inves, there is a single memory bank (64KBytes, although the hardware didn't allow accessing the portion of RAM that shares space with ROM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Inves uses a gate array from Texas Instruments, a TAHC10, but not all the functions that were in the oriignal Ferranti ULA were taken to the TAHC. Keyboard and EAR reading, for example, were perfomed off chip by discrete TTLs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having only one bank of RAM, Inves designers had to come to a solution to maximize software compatibility, by having non contended memory. The solution was very similar to what you have described.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had the chance to deep analyze one of these clones, and this is the block diagram I made of it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1Hr4P.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1Hr4P.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RAM is directly connected to the gate array. Between RAM and CPU there is a latch and a buffer. The buffer allows transparently passing data from the Z80 to the RAM during writes. The latch stores a byte read on behalf of the CPU so it can access it a bit later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sharing mechanism is kinda interleaving access. The TAHC is always making read cycles with a tRC of 281ns (one CPU cycle). In other words, RAM is being read at 3.546 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the TAHC wants to read from video RAM, the read cycle uses the multiplexed address supplied directly by the TAHC (VA). If the CPU is not demanding memory access, the TAHC performs two identical read cycles with the same address so the same data is present in the data bus (VD).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if the CPU needs to read or write to memory, one of these access (may the first or the second) is lent to it: the TAHC disconnects itself from the VA bus and enables the MUX so the CPU address from A is multiplexed and outputted to VA. If the operation is a read one, the byte read is latched into LATCH. If the operation is a write one, the TAHC doesn't wait for the WR signal from the CPU to go active, but it generates its own /WE signal to the RAM while the BUFFER is opened so the data to write comes from D to VD. Write and read operations last one CPU cycle (from the point of view of the RAM). As read operations actually take longer for the CPU, the latch ensures the CPU to get its required data at the end of its memory read cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The actual schematic of the bus management described above is this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kruDt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kruDt.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the WR signal from the CPU is not used at all. The TAHC infers a memory write operation if it detects /MREQ active, but /RD not active, and the last cycle is not a /M1 memory cycle. This way, it doesn't have to wait until /WR goes active, which is way much later, almost at the end of the write cycle. This behaviour, unfortunately, was not adecuately implemented for an INTA cycle, in which there is a M1 cycle, but not with /MREQ but with /IORQ. This causes the RFSH cycle following it to be misinterpreted as a memory write operation, causing corruption in RAM memory space if I register is set to a value greater than 63 (see &lt;a href=&quot;https://www.youtube.com/watch?v=HiNAs0sQbI4&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=HiNAs0sQbI4&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A much more deeper description is available at &lt;a href=&quot;http://www.zxprojects.com/inves/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.zxprojects.com/inves/&lt;/a&gt; &#xA;That is the complete article I wrote about the internals of the Inves Spectrum some time ago. It's in spanish, but I think Google Translate can do a decent job.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2020-04-29T23:16:30.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14571" PostTypeId="2" ParentId="14568" CreationDate="2020-04-29T23:44:01.757" Score="7" Body="&lt;p&gt;There is no way to establish a classification of 'efficiency' (whatever 'viability' is supposed to be) with the information given. The characterisations given, like &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Number of Registers,&lt;/li&gt;&#xA;&lt;li&gt;Number of flags&lt;/li&gt;&#xA;&lt;li&gt;Memory addressing range&lt;/li&gt;&#xA;&lt;li&gt;Number of instructions&lt;/li&gt;&#xA;&lt;li&gt;etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;bear no hint about performance at all. More or less registers, flags or instructions are not per se better or worse. Not even address range is. Even for a rough classification way more information would be needed. Adding some clock rate (*1) would as well not add any clarity, as clock rate itself bears no hint about performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The classic 6500 vs 8080/Z80 comparisons shows all of the futility of this approach:&lt;/strong&gt; Both use a comparable technology, but differ in almost all areas mentioned above (number of registers/flags/IO ports/instructions/instruction set structure/stack/clock rate). Still, they end up in the pretty much same performance area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;, these designs are about complexity of implementation within the context of the book. Any comparison with other implementation needs a close look of way more details as well as real world tasks to compare them.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Beein made of standard TTL does not limit them at 1 MHz, as sustainable clock rate is way more defined due the design (longest path) than the technology used.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-04-30T00:45:52.797" LastActivityDate="2020-04-30T00:45:52.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14572" PostTypeId="2" ParentId="14568" CreationDate="2020-04-30T01:17:54.083" Score="3" Body="&lt;p&gt;Partial answer for SAP-1: No.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds like SAP-1 has no way to load the program counter, other than incrementing for the next instruction.  There are no jumps, no branches, and no way to use the PC as the destination register for an operation.  Not even self-modifying code will change the program counter.  But the real 8-bit microprocessors can do jumps and branches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SAP-1 is clearly intended to be a &quot;beginner&quot; design.  If you can't build it, you probably cannot build something better.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-04-30T01:17:54.083" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14573" PostTypeId="2" ParentId="14560" CreationDate="2020-04-30T03:10:14.093" Score="-1" Body="&lt;p&gt;As mentioned, like many computers of the time, and unlike the original Sinclair ZX Spectrum, it used a single RAM bank.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When computers used a single RAM bank, they would always run the refresh cycle during either HSync or VSync cycles to prevent loss of access to the RAM from the Video Processor.   However, the exact version varied by model.  Often several models of sold under the same brand were made with different refresh cycle patterns.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way to know for sure is to take a hardware analyzer to actual hardware or find someone who has.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would go over the procedure, but if you aren't able to look it up your own, you shouldn't be doing this one yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is really only necessary for the highest accuracy of emulation because few, if any, programs took this behavior into account in a manner that would break if it wasn't present.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, several SNES projects are looking into this behavior on the SNES due to games pushing the SNES so far they actually did hit this.  (The SNES uses two banks with different refresh rate and data output periods).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have not heard of any ZX Spectrum emulators replicating this behavior on the original or clones.&lt;/p&gt;&#xA;" OwnerUserId="14246" LastActivityDate="2020-04-30T03:10:14.093" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14574" PostTypeId="1" AcceptedAnswerId="14602" CreationDate="2020-04-30T06:36:58.810" Score="5" ViewCount="1162" Body="&lt;p&gt;I've been looking through documentation on The Sinclair/Amstrad Spectrum +3 which was the only Spectrum that came with a built-in floppy disk drive. The disk format was based on The Amstrad CPC and PCW disk format, which was based on CP/M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm struggling with some details of the boot process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know there's an optional boot block on side 0, track 0, sector 1, at offset $0010, right after the 16-byte 'disk specification'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But since this block is optional, there must be a way for the system to detect whether it's present or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that in some disks the file directory will be here instead, and starting at offset $0000 without a disk specification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some disk images seem to be of protected disks with purposely confusing sector layouts that must've made it harder to pirate them back in the 80s, which makes it challenging to figure out by looking at the raw data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is there somewhere on the disk layout that I'm missing that indicates to the OS that a boot sector is there or not? Or could it possibly all hinge on that one-byte checksum which seems like it could easily give false positives? If so, is the checksum just a sum of the bytes of the boot sector modulo 256?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it makes a difference I'm using &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Format:DSK_disk_image_file_format&quot; rel=&quot;nofollow noreferrer&quot;&gt;DSK and EDSK format&lt;/a&gt; disk images.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="1912" LastEditDate="2020-05-01T13:38:59.563" LastActivityDate="2020-05-01T13:38:59.563" Title="How does the Spectrum +3 know whether a disk is bootable or not?" Tags="&lt;floppy-disk&gt;&lt;zx-spectrum&gt;&lt;boot&gt;&lt;disk-image&gt;&lt;spectrum-plus-3&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14575" PostTypeId="1" AcceptedAnswerId="14601" CreationDate="2020-04-30T06:46:11.060" Score="0" ViewCount="180" Body="&lt;p&gt;I'm trying to parse Spectrum +3 disk images. I only ever had a tape-based Speccy back in the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The +3 had a built-in floppy drive but was late to the party and not that successful. It had the same drive as the Amstrad CPC/PCW and the same layout as the latter, based on CP/M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the images I have that have directories they seem to be located on either the first or second sector. But I can't find anything in the on-disk structures, or in the docs I've found on the internet to indicate where the directory will be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some disks even don't have a directory but I know some of the disk images are of protected games so they could have purposely confusing disk layouts that load correctly but confused crackers and pirates back in the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps it's simply that the directory is in the first sector if there's no bootblock and in the second if there is a bootblock? I haven't been able to find confirmation of this theory though. Also, I'm having trouble detecting presence of bootblocks and just posted &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14574/how-does-the-spectrum-3-know-whether-a-disk-is-bootable-or-not&quot;&gt;a separate question on that topic&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it makes a difference, I'm using &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Format:DSK_disk_image_file_format&quot; rel=&quot;nofollow noreferrer&quot;&gt;DSK and EDSK format&lt;/a&gt; disk images files.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-01T01:55:15.737" LastActivityDate="2020-05-01T01:55:15.737" Title="How do I know where the file directory is stored on a Spectrum +3 disk layout?" Tags="&lt;floppy-disk&gt;&lt;zx-spectrum&gt;&lt;file-system&gt;&lt;disk-image&gt;&lt;spectrum-plus-3&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14576" PostTypeId="2" ParentId="9599" CreationDate="2020-04-30T08:06:32.960" Score="4" Body="&lt;p&gt;Depending on the intent of the question, the requested TUI library that works on different platforms and compilers, and is similar to Turbo Vision might be &lt;em&gt;Turbo Vision itself&lt;/em&gt;, or more specific, a port of Turbo Vision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems Borland put the C++ sources of Turbo Vision into the public domain in one of the developments caused by this is &lt;a href=&quot;https://github.com/jserv/tvision&quot; rel=&quot;nofollow noreferrer&quot;&gt;a port that runs on may platforms and should work with GCC, MSVC, Watcom and Borland (porting efforts licensed under GPL)&lt;/a&gt;, or &lt;a href=&quot;http://www.sigala.it/sergio/tvision/&quot; rel=&quot;nofollow noreferrer&quot;&gt;an older port used as base for the GPL port, aimed at FreeBSD (porting efforts licensed under 2-clause BSD (&quot;the FreeBSD license&quot;))&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="10479" LastEditDate="2020-05-02T21:52:07.670" LastActivityDate="2020-05-02T21:52:07.670" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14577" PostTypeId="2" ParentId="9599" CreationDate="2020-04-30T08:24:33.560" Score="0" Body="&lt;p&gt;There are three such libraries reviewed in &lt;a href=&quot;https://archive.org/details/eu_BYTE-1987-10_OCR/page/n233/mode/2up/search/c-worthy?q=c-worthy&quot; rel=&quot;nofollow noreferrer&quot;&gt;this 1987 edition of BYTE magazine.&lt;/a&gt;, namely C-Worthy, Windows For Data and Vitamin C.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2020-04-30T08:24:33.560" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14578" PostTypeId="2" ParentId="14575" CreationDate="2020-04-30T09:07:34.617" Score="2" Body="&lt;p&gt;+3 disks are actually CP/M disks. Disk organization details are stored in the XDPB table, which is generated by the firmware from the data found at the beginning of the disk. This can be read on part 27 of the +3 manual:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The PCW range disk format (used by the +3) is, in fact, a family of&#xA;  formats the precise member of which is defined in the 'disk&#xA;  specification' which is recorded on bytes 0...15 of sector 1, track 0&#xA;  side 0. The format used on the +3 is the same as disk type 0 below.&#xA;  The sector holding this specification is also that used for a&#xA;  bootstrap program.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This paragraph also mentions the bootstrap program. On part 26, this can be read:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;bootstart: ; ;The bootstrap sector contains the 16 bytes disk&#xA;specification at the start. ;The following values are for a AMSTRAD&#xA;PCW range CF2/Spectrum +3 format disk. ;&#xA;&#xA;               db   0                   ;+3 format&#xA;               db   0                   ;single sided&#xA;               db   40                  ;40 tracks per side&#xA;               db   9                   ;9 sectors per track&#xA;&#xA;               db   2                   ;log2(512)-7 = sector size&#xA;               db   1                   ;1 reserved track&#xA;               db   3                   ;blocks&#xA;               db   2                   ;2 directory blocks&#xA;&#xA;               db   02Ah                ;gap length (r/w)&#xA;               db   052h                ;page length (format)&#xA;               ds   5,0                 ;5 reserved bytes&#xA;&#xA;cksum:         db   0         ;checksum must = 3 mod 256 for the sector&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A non bootable disk will have 0 reserved tracks and hence, the directory area is what will come first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By default, a standard data disk (non system, non bootable) have 64 directory entries, and these begin at track 0, sector 1 (sector numbers begin at 1), so the directory area lies in the first 2KB of the disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A directory entry is 32 bytes within the directory area, but unlike FAT, there can be multiple directory entries per file. Each entry is called a &quot;extent&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A extent is made from several records. A record is 128 bytes long. A extent may use all its records or only a fraction of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a extent uses all its records, this may mean that you need to search if there is another extent for this file. A record is used completely and there is no length field in the directory entry, so you must assume that all filled records belong to the file, or in other words, that a file length is always a multiple of 128.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A file is read by scanning the directory area for extents that belong to the same filename. Each extent has an extent counter so you can read them in asceding order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Details can be read from the +3 manual (part 27): &lt;a href=&quot;http://www.worldofspectrum.org/ZXSpectrum128+3Manual/chapter8pt27.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.worldofspectrum.org/ZXSpectrum128+3Manual/chapter8pt27.html&lt;/a&gt; and here: &lt;a href=&quot;https://www.seasip.info/Cpm/format22.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.seasip.info/Cpm/format22.html&lt;/a&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About 10 years ago I wrote a piece of software that can handle CP/M disks (IDEDOS partitions, which are actually (very) big CP/M disks). It's called &quot;3e&quot;, and you can check the source: &lt;a href=&quot;http://www.zxprojects.com/images/stories/3e_card_manager/3e.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.zxprojects.com/images/stories/3e_card_manager/3e.zip&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2020-04-30T09:07:34.617" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14579" PostTypeId="2" ParentId="14574" CreationDate="2020-04-30T09:21:20.917" Score="4" Body="&lt;p&gt;From my answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/14575/105&quot;&gt;How do I know where the file directory is stored on a Spectrum +3 disk layout?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Part 26 of the +3 manual is what you need to read. There is even a complete example of how to write boot code and how to store it into the disk. This part is the relevant one regarding which values the disk specification block must have:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;bootstart: ; ;The bootstrap sector contains the 16 bytes disk&#xA;specification at the start. ;The following values are for a AMSTRAD&#xA;PCW range CF2/Spectrum +3 format disk. ;&#xA;&#xA;               db   0                   ;+3 format&#xA;               db   0                   ;single sided&#xA;               db   40                  ;40 tracks per side&#xA;               db   9                   ;9 sectors per track&#xA;&#xA;               db   2                   ;log2(512)-7 = sector size&#xA;               db   1                   ;1 reserved track&#xA;               db   3                   ;blocks&#xA;               db   2                   ;2 directory blocks&#xA;&#xA;               db   02Ah                ;gap length (r/w)&#xA;               db   052h                ;page length (format)&#xA;               ds   5,0                 ;5 reserved bytes&#xA;&#xA;cksum:         db   0         ;checksum must = 3 mod 256 for the sector&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A non bootable disk will have 0 reserved tracks.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2020-04-30T09:21:20.917" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14580" PostTypeId="2" ParentId="12553" CreationDate="2020-04-30T10:29:19.033" Score="2" Body="&lt;p&gt;After having spoken to one of the engineers on the team that built Censor 932, the index registers are R1 to R7, and a &quot;0&quot; index means &quot;do not index&quot;.&lt;/p&gt;&#xA;" OwnerUserId="3842" LastActivityDate="2020-04-30T10:29:19.033" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14581" PostTypeId="5" CreationDate="2020-04-30T11:16:46.067" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-04-30T11:16:46.067" LastActivityDate="2020-04-30T11:16:46.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14582" PostTypeId="4" CreationDate="2020-04-30T11:16:46.067" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-04-30T11:16:46.067" LastActivityDate="2020-04-30T11:16:46.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14583" PostTypeId="5" CreationDate="2020-04-30T11:23:13.720" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-04-30T11:23:13.720" LastActivityDate="2020-04-30T11:23:13.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14584" PostTypeId="4" CreationDate="2020-04-30T11:23:13.720" Score="0" Body="For questions about the American versions of Sinclair computers made by Timex." OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-04-30T16:18:34.540" LastActivityDate="2020-04-30T16:18:34.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14585" PostTypeId="5" CreationDate="2020-04-30T11:24:44.560" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-04-30T11:24:44.560" LastActivityDate="2020-04-30T11:24:44.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14586" PostTypeId="4" CreationDate="2020-04-30T11:24:44.560" Score="0" Body="For questions about executable binary files." OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-04-30T16:18:17.023" LastActivityDate="2020-04-30T16:18:17.023" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14587" PostTypeId="5" CreationDate="2020-04-30T11:26:56.097" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-04-30T11:26:56.097" LastActivityDate="2020-04-30T11:26:56.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14588" PostTypeId="4" CreationDate="2020-04-30T11:26:56.097" Score="0" Body="For questions involving the early programming language APL, which used a large number of special graphical symbols." OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-04-30T12:42:48.363" LastActivityDate="2020-04-30T12:42:48.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14589" PostTypeId="5" CreationDate="2020-04-30T11:37:08.130" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-04-30T11:37:08.130" LastActivityDate="2020-04-30T11:37:08.130" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14590" PostTypeId="4" CreationDate="2020-04-30T11:37:08.130" Score="0" Body="For questions concerning the compatibility of newer systems with the earlier systems that came before them." OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-04-30T17:14:29.073" LastActivityDate="2020-04-30T17:14:29.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14591" PostTypeId="2" ParentId="14574" CreationDate="2020-04-30T11:45:24.127" Score="2" Body="&lt;p&gt;On a CPC system, you can determine if the disc is in System format (i.e. bootable) by the number of the first physical sector. If the sector is 41h, the disc is in System format, with 2 reserved boot sectors, whereas C1h means Data format, no reserved sectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PCW and Spectrum +3 can also determine the bootability of a disc from a 16-byte record on track 0, head 0, physical sector 1. The &lt;strong&gt;checksum&lt;/strong&gt; of this record indicates if the disc is bootable:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 - sector contains a PCW9512 bootstrap&lt;/li&gt;&#xA;&lt;li&gt;3 - sector contains a Spectrum +3 bootstrap&lt;/li&gt;&#xA;&lt;li&gt;255 - sector contains a PCW8256 bootstrap&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The rest of the sector contains the bootstrap code.&#xA;Information gleaned from &lt;a href=&quot;https://www.seasip.info/Cpm/amsform.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.seasip.info/Cpm/amsform.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2020-04-30T11:45:24.127" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14592" PostTypeId="2" ParentId="14574" CreationDate="2020-04-30T12:33:17.503" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;But since this&lt;/em&gt; [boot] &lt;em&gt;block is optional, there must be a way for the system to detect whether it's present or not.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There isn't. The +3 (like the Amstrad CPC) doesn't autoboot. Using the Loader on a +3 (or &lt;code&gt;|CPM&lt;/code&gt; on an Amstrad CPC) on a disk that's in &lt;strong&gt;Data&lt;/strong&gt; or &lt;strong&gt;Vendor&lt;/strong&gt; format (that is, does not have CP/M or custom boot code in the reserved tracks already mentioned) results in:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n6qtk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n6qtk.png&quot; alt=&quot;+3 dropping back to loader after trying to boot from a Data disk&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;after the system has failed to load a valid boot block and reserved tracks containing boot code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;strong&gt;Data&lt;/strong&gt; disks have no reserved tracks. &lt;strong&gt;System&lt;/strong&gt; disks have reserved tracks containing boot data and a valid boot block. &lt;strong&gt;Vendor&lt;/strong&gt; disks have reserved tracks, but they're blank. They were meant for software vendors to distribute programs without including proprietary CP/M code. You didn't encounter them very often.)&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-04-30T12:33:17.503" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14593" PostTypeId="1" AcceptedAnswerId="14594" CreationDate="2020-04-30T12:36:02.687" Score="0" ViewCount="68" Body="&lt;p&gt;I own a Electronica-bk-0100-01.  I have only got around to connecting it up.  Before that I opened up the system, checked for bad tracks, obvious issue etc.  I also checked the end to end of the ribbon type cable connecting the KB to the mother board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(this is a non membrane keyboard), so it has been switch cleaned etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I power up the system I get 2 beeps and the standard basic prompt/screen but also a &quot;Z&quot; character on screen.  I cant get any keys to go into the basic interpreter - also there is no @beep@ on a key depression.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I dont have an english language manual nor have I yet found a circuit diagram.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody have experience of this issue - or can you comment.  I though the &quot;Z&quot; key might be stuck down, Mechanically it is not, but I may have to go meter the switch connector?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any thoughts/experience?&lt;/p&gt;&#xA;" OwnerUserId="17970" LastActivityDate="2020-04-30T13:12:28.527" Title="keyboard not operating electronica-bk-0100-01" Tags="&lt;keyboards&gt;&lt;electronika-bk&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14594" PostTypeId="2" ParentId="14593" CreationDate="2020-04-30T13:12:28.527" Score="0" Body="&lt;p&gt;It's possible your Z key is stuck (or perhaps there's a short, or the switch is buggered, or something like that). That would explain the two beeps and the fact a Z appears on the screen when you turn it on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Better measure the keyboard switch to rule out a problem with it, and also the corresponding trace on the board if you can find it.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-04-30T13:12:28.527" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14595" PostTypeId="1" CreationDate="2020-04-30T15:55:32.473" Score="3" ViewCount="228" Body="&lt;p&gt;From what I understand, early versions of the Disk Controller II required that there never be two or more consecutive bit times without a phase transition (which would read as &quot;0&quot;) but an upgrade to the &quot;Woz machine&quot; controller PROM made it possible to accommodate bit patterns that had two consecutive zeroes.  This made it possible for the controller to read FM, MFM, GCR-encoded data, but software designed for the earlier PROM would work as-is with the newer one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The boot PROM of the Disk II was changed, however, so that instead of trying to read a boot sector written using the old format, it would instead load a boot sector written in the newer format.  This makes it awkward to use with the new controller boot disks designed for the old controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would there have been any technical obstacle to having DOS 3.3 disks include an MFM-formatted boot sector, thus avoiding any need to make newer versions of the Disk II incompatible with the old ones?  I would think that from a usability perspective, even if making a disk bootable would require use of the &quot;MASTER&quot; program [which is necessary if one wants a disk to be bootable on machines with varying amounts of RAM], use of such a program would have allowed users to select whether they wanted to install a minimal-RAM version of DOS which was slow and could only handle GCR disks and lacked text file read/write support, a larger version which added text-file support and included some extra lookup tables to allow better performance, or a full-featured version that could process both MFM and GCR disks interchangeably.  Having an attempt to boot an incompatible disk stop with a suitable message would be much nicer than having the drive spin forever until it wears the boot track off the disk.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-05-01T13:17:07.770" Title="Why did the Apple Disk II version 3.3 change the boot protocol?" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14596" PostTypeId="1" AcceptedAnswerId="14597" CreationDate="2020-04-30T16:07:52.177" Score="5" ViewCount="2629" Body="&lt;p&gt;The &quot;shift&quot; key on a keyboard is different from other keys as it can edit the outputs of the other keys on the keyboard. But how does it do it? I have one hypothesis on how the shift key does what it does(This also applies to ctrl, alt, and command keys, albeit with different rules, but bear with me).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that the sixth bit of all of the other keys are connected to the SHIFT key via an XOR gate. This means that when the Shift key is on, the output of said 6th bit is inverted(For numbers it's the 5th bit). I used an ascii to binary converter to prove my hypothesis and it seems in check. Am I correct on how the shift key works, or is there something I missed?&lt;/p&gt;&#xA;" OwnerUserId="17966" LastActivityDate="2020-05-02T19:19:42.893" Title="How does the shift key in a keyboard work?" Tags="&lt;ascii&gt;" AnswerCount="5" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14597" PostTypeId="2" ParentId="14596" CreationDate="2020-04-30T16:10:34.697" Score="25" Body="&lt;p&gt;That's how the shift key sometimes worked on old terminals and ASCII is designed around it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But on a modern keyboard, the SHIFT key just does exactly the same as every other key on the keyboard: it sends a 'key down' signal and a 'key up' signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This doesn't affect any other signalling and the computer it is connected to determines the net effect.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="5199" LastEditDate="2020-04-30T17:14:10.870" LastActivityDate="2020-04-30T17:14:10.870" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="14598" PostTypeId="2" ParentId="14595" CreationDate="2020-04-30T17:07:03.043" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Would there have been any technical obstacle to having DOS 3.3 disks include an MFM-formatted boot sector ... ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;[Nitpick: 13 sector format (*1) was a GDR encoding, much like 16 sector format]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No, not really. In fact, such mechanics were quite common on Unix systems, were the first track of the first side would be FM formated, holding all information about how the disk format, enabling consistent boot and switch to MFM on all other tracks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Within the 256 byte PROM there was only enough space to read a single sector in a single format. So either 13 or 16 sector would work. Of course, one could have formatted track 0 in 13 sector and went on from there. On the disk would have just cost 768 byte of storage, but it would also have meant to double the low level driver to understand both formats, plus some code to select.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bare diskdriver uses 1,5 Kib of memory ($B800-$BCFF), with RWTS it is 2 KiB. Doubbling that would have been a lot for a computer that left less than 36 KiB of memory after DOS is booted ($800-$9600).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was much more sensible to go straight for 16 sector encoding and have, whenever needed, a loadable driver for 13 sector disks - like used with the Muffin utility, or various other disk tools.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - What is called in the question DOS 3.2 format - DOS describes the information stored within the sectors, not how they are stored themself.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-04-30T17:07:03.043" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14599" PostTypeId="2" ParentId="14596" CreationDate="2020-04-30T17:43:38.037" Score="3" Body="&lt;p&gt;Modifier keys were sometimes wired differently than other keys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to make a keyboard with 100 keys.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;You can use a microcontroller with 100 inputs and eack switch connected on one side to the power supply and the other side to the microcontroller. Simple, but that's a lot of signals, fairly expensive.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can arrange keys in a 10x10 matrix. The microcontroller will need 10 inputs and 10 outputs. The controller will alternatively scan each of the 10 columns and read the state of the 10 lines. Quickly enough to be transparent for the typist.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The problem with that second option is that when many keys are pressed simultaneously (more than 2) , it is sometimes impossible to determine all pressed keys because they make some short-circuits between lines and columns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cheap solution was to use additional inputs for the modifier keys that needed &#xA;to be pressed at the same time as other keys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best solution now is to place a diode on each key, which allow any combination and of pressed keys.&lt;/p&gt;&#xA;" OwnerUserId="1958" LastEditorUserId="3316" LastEditDate="2020-04-30T19:10:01.357" LastActivityDate="2020-04-30T19:10:01.357" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14600" PostTypeId="2" ParentId="14596" CreationDate="2020-04-30T19:16:20.097" Score="7" Body="&lt;p&gt;From a pure hardware point of view, a significant amount of computers keyboards see each keypress as a bit set in a matrix of rows &amp;amp; columns, so with another operating system you could theorically map &quot;shift&quot; to another key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So one could say that only the operating system makes the shift/control/alt keys different from others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there are some limitations when several keys are pressed, depending on the hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &quot;famous&quot; example is the Z-Out cheatmode on amiga: &quot;press J+K for invincibility&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It worked perfectly on Amiga 500 model but with the A1200, J+K cannot be detected at the same time due to a different keyboard circuitry/cheaper design on the A1200 (a part of the reason is because they're next to each other on the same matrix line). So in that case you could &lt;em&gt;not&lt;/em&gt; use &quot;J&quot; or &quot;K&quot; as shift since some combinations would not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a day to day basis, all key combinations aren't useful. This J+K thing is just bad luck (and the only example I know).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, as noted in a comment:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;this are not true for all keyboards. PC/XT, PC/AT, PS/2, and suchlike keyboards have two microcontrollers and a serial link between the mainboard and the keyboard. The mainboard processors do not see a matrix of rows and columns, and the remote microcontrollers know that certain keys are modifiers, transmitting their codes as fake modifiers to make newer keyboards work with older machine firmwares&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That comments tends to restrict my answer to other types of keyboards. It seems that the design of &quot;serious&quot; machines like IBM PCs of the time doesn't take into account multiple keypresses like other more hobbyist machines would, one of the reasons could be that hobbyist machines keyboards &lt;em&gt;need&lt;/em&gt; to be more performant for games played with the keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(for instance the Oric 1/Atmos used a matrix and had no multiple keypress restrictions, you could query each key by row/column independently)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hobbyist machines generally require a better multiple keypress handling or it would not be possible to move up &amp;amp; right at the same time &amp;amp; press fire for instance (note that the J+K impossibility on the A1200 machine isn't really a problem since in no sane mapping J could be up and K left, and for fire, game designers usually prefer ... shift, that is, when games &lt;em&gt;can&lt;/em&gt; be played using the keyboard)&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-05-01T09:46:04.870" LastActivityDate="2020-05-01T09:46:04.870" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14601" PostTypeId="2" ParentId="14575" CreationDate="2020-04-30T19:38:06.433" Score="2" Body="&lt;p&gt;It's probably best to take a look at the +3DOS &lt;code&gt;DD_LOGIN&lt;/code&gt; function, since that's the ultimate source for how a +3 identifies a disc. What this does is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Call &lt;code&gt;DD_SEL_FORMAT&lt;/code&gt; with A=0 to select the standard +3 format (180k, single sided, with one system track).&lt;/li&gt;&#xA;&lt;li&gt;Call &lt;code&gt;DD_READ_ID&lt;/code&gt; with D=0 to read the identity of a sector (any sector) on track 0 of the disc.&lt;/li&gt;&#xA;&lt;li&gt;Look at the top two bits of the value returned. If they are 0,1 (ie, the sector ID is 40h-7Fh) then the disc is in CPC system format. Call &lt;code&gt;DD_SEL_FORMAT&lt;/code&gt; with A=1 to select this format, and return.&lt;/li&gt;&#xA;&lt;li&gt;If the top two bits of the sector ID are 1,1 (ie, the sector ID is 0C0h-0FFh) then the disc is in CPC data format. Call &lt;code&gt;DD_SEL_FORMAT&lt;/code&gt; with A=2 to select this format, and return.&lt;/li&gt;&#xA;&lt;li&gt;If neither of the above two cases were true, load the boot sector (cylinder 0, head 0, sector 1). [In fact, this uses a specialised read function that only reads the first ten bytes of the sector]. &lt;/li&gt;&#xA;&lt;li&gt;If the first ten bytes of the sector are all the same, assume that they are &lt;code&gt;00h,00h,28h,09h,02h,01h,03h,02h,2Ah,52h&lt;/code&gt; (this defines a standard +3-format floppy).&lt;/li&gt;&#xA;&lt;li&gt;Call &lt;code&gt;DD_L_XDPB&lt;/code&gt; to calculate the drive and filesystem parameters from the 10-byte specification. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The meanings of the 10-byte specification can be found in the documentation of the &lt;code&gt;DD_L_DPB&lt;/code&gt; function in, for example, the &lt;a href=&quot;http://www.worldofspectrum.org/Plus3CPMManual/appendix6.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spectrum +3 CP/M manual&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2020-04-30T19:38:06.433" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14602" PostTypeId="2" ParentId="14574" CreationDate="2020-04-30T19:54:38.567" Score="3" Body="&lt;p&gt;I think some of the answers here are combining determining the disk format with detecting if it's bootable. I've answered how the format is detected &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14601/1912&quot;&gt;on its own question&lt;/a&gt;, so here I'll concentrate on the boot process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The +3 tries to boot from a disc by using the &lt;code&gt;DOS_BOOT&lt;/code&gt; function. This selects drive A:, closes any open files on it, and then tries to read logical sector 0 into the +3DOS internal cache. Assuming that worked, it sums all 512 bytes of that sector modulo 256. If the result is 3, it copies the sector to 0FE00h in bank 3, sets the memory paging to the all-RAM 4-5-6-3 configuration, and jumps to 0FE10h.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the checksum is not 3, &lt;code&gt;DOS_BOOT&lt;/code&gt; returns error 35, 'Disk is not bootable'. The loader then falls back to executing the BASIC command &lt;code&gt;LOAD &quot;DISK&quot;&lt;/code&gt;. If that in turn fails, it selects cassette tape and executes &lt;code&gt;LOAD &quot;&quot;&lt;/code&gt; to run the first program on the tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no requirement that the boot disk should be in the &quot;standard&quot; +3 format, begin with the 10-byte disk specification, or even have reserved tracks - as long as the checksum of the first sector is 3, &lt;code&gt;DOS_BOOT&lt;/code&gt; will happily boot from a disk in CPC System or CPC Data format. In this respect, the +3 boot process is more flexible than the otherwise-similar PCW, on which the boot sector has to be physically numbered 1.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2020-04-30T19:54:38.567" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14603" PostTypeId="1" CreationDate="2020-04-30T21:06:31.670" Score="3" ViewCount="1129" Body="&lt;p&gt;The OS is at least 17-18 years ago. Yet there is a lot of scattered information and dead ends, and no clarity on how to emulate Pocket PC 2003, the early precedent to Windows Mobile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to emulate Pocket PC (PPC) 2003?&lt;/p&gt;&#xA;" OwnerUserId="15407" LastActivityDate="2020-04-30T21:06:31.670" Title="How to emulate Pocket PC (PPC) 2003?" Tags="&lt;emulation&gt;&lt;windows&gt;&lt;windows-mobile&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14604" PostTypeId="2" ParentId="14603" CreationDate="2020-04-30T21:06:31.670" Score="5" Body="&lt;p&gt;Note: The following method was found through trial-and-error and backtracking the steps the installers require. The emulation is done via &lt;strong&gt;PBEmulator&lt;/strong&gt;, not vs_emulator / DeviceEmulator&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;(Recommended) Get a Windows XP VM. Windows 7 is possibly supported, but no solid evidence so far&lt;/li&gt;&#xA;&lt;li&gt;Download and install eMbedded Visual C++ 4.0 - &lt;a href=&quot;https://archive.org/details/EMbeddedVisualC4.0&quot; rel=&quot;noreferrer&quot;&gt;download @ archive.org&lt;/a&gt; &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Seemingly an abandonware. Notice you need the full package, not just the update&lt;/li&gt;&#xA;&lt;li&gt;Requires a product key --&gt; You'd need to acquire one somewhere (not too hard)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;(Recommended) Update eMbedded Visual C++ 4.0 to SP4. &lt;a href=&quot;https://www.microsoft.com/en-au/download/details.aspx?id=16683&quot; rel=&quot;noreferrer&quot;&gt;Download @ Microsoft&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Download the Microsoft Pocket PC 2003 SDK - &lt;a href=&quot;https://archive.org/details/PocketPC2003SDK&quot; rel=&quot;noreferrer&quot;&gt;download @ archive.org&lt;/a&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Seemingly an abandonware. There are reports online that the package used to be on the Microsoft's website, yet was deleted&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Install the main package, which is Microsoft Pocket PC 2003 SDK&lt;/li&gt;&#xA;&lt;li&gt;Install &quot;Windows Mobile 2003 Second Edition Emulator Images for Pocket PC - WWE&quot;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Usually found within &quot;Microsoft Pocket PC 2003 SDK&quot;, but can sometimes be found separately online&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Go to Start - All Programs - Microsoft Pocket PC 2003 SDK - Pocket PC 2003 Emulator. It should start up the emulator. Enjoy!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Side notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The PPC emulator uses PBEmulator, not vs_emulator / DeviceEmulator (Microsoft Device Emulator v3.0) - used for Windows Mobile 5/6 and Windows CE 5/6. &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For unknown reasons, the OS images made for PBEmulator aren't compatible with Microsoft Device Emulator v3.0, and vice versa.&lt;/li&gt;&#xA;&lt;li&gt;Seemingly, one key difference between them is that PBEmulator emulated x86 architecture, while Microsoft Device Emulator v3.0 emulates ARMv4/ARMv5&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15407" LastActivityDate="2020-04-30T21:06:31.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14605" PostTypeId="1" AcceptedAnswerId="14606" CreationDate="2020-05-01T01:54:28.373" Score="3" ViewCount="83" Body="&lt;p&gt;In my experiments with Spectrum disk formats I've found myself looking into the ROM code a few times. Several Spectrum emulators have built-in debuggers that let me dissassemble and step through the code, set breakpoints etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also some fully analysed and commented Spectrum ROM disassemblies available. For the +3 ROM there are fewer though. I've been using &lt;a href=&quot;https://github.com/Toysoft/spectnetide/blob/master/VsIntegration/Spect.Net.VsPackage/Docs/Spectrum%2B3_V4-0_ROM2.asm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But without the instruction addresses, it's very hard to find the same code in the emulator's debugger that you can see in the commented disassembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having a line number next to every line of disassembly is not the same as having the instruction address. ASM code has comment lines and machine code instructions take variable numbers of bytes of course!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there another +3 ROM disassembly available which does include the ROM offsets next to the instructions?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-05-01T02:16:55.690" Title="Is there a Spectrum +3 ROM disassembly available with the addresses of the instructions included?" Tags="&lt;zx-spectrum&gt;&lt;disassembly&gt;&lt;spectrum-plus-3&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14606" PostTypeId="2" ParentId="14605" CreationDate="2020-05-01T02:16:55.690" Score="4" Body="&lt;p&gt;The Paul Farrow disassembly listings collection is the best I know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.fruitcake.plus.com/Sinclair/Spectrum128/ROMDisassembly/Spectrum128ROMDisassembly4.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.fruitcake.plus.com/Sinclair/Spectrum128/ROMDisassembly/Spectrum128ROMDisassembly4.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't include the address of each instruction, BUT it includes the address of many entry points and loops as labels with the format L + hexadecimal address so it's rather easy to match any of these listing with the disassembled output from an emulator.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2020-05-01T02:16:55.690" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14607" PostTypeId="1" CreationDate="2020-05-01T03:29:14.363" Score="0" ViewCount="121" Body="&lt;p&gt;I've acquired a late-80s portable 386 with builtin LCD in unknown working state. It only ever beeps continuously on boot, with no picture on either the built-in LCD or an external VGA-connected monitor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Relevant details: 386SX-16, AMI BIOS, SIMMx4 and DIPx36 (8MB, I believe; I'm having trouble locating the chips online). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've desoldered and cleaned up a leaking rechargeable 3.6V CMOS battery and tried replacing it with a coin cell to the appropriate headers w/ jumper setting for external battery. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried pulling all the RAM in various combinations (obeying the manual's instructions about which banks to leave empty when doing so and how to set jumpers). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the base level, I'm trying these things with the external CMOS battery and the video card hooked up, but I've removed all the other ISA cards: serial/parallel, disk controller, and a NIC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've confirmed that the AT power supply has proper ground, +/-5V, and 12V, and the fan is coming on when it is hooked to the system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As best I can figure, the single, continuous beep indicates a RAM and/or video problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What should I try next? Any ideas on what else could be wrong? &lt;/p&gt;&#xA;" OwnerUserId="17972" LastEditorUserId="3290" LastEditDate="2020-05-01T07:24:03.160" LastActivityDate="2020-05-01T07:24:03.160" Title="Portable 386 that only ever beeps continuously; no video" Tags="&lt;ibm-pc&gt;&lt;repair&gt;&lt;80386&gt;&lt;motherboard&gt;&lt;troubleshooting&gt;" AnswerCount="0" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14608" PostTypeId="5" CreationDate="2020-05-01T03:54:35.383" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T03:54:35.383" LastActivityDate="2020-05-01T03:54:35.383" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14609" PostTypeId="4" CreationDate="2020-05-01T03:54:35.383" Score="0" Body="For questions about the creation and use of tape images, also known as snapshots, raw data from the compact cassette storage medium used by many diskless systems, extracted into a file.&#xD;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-01T08:06:05.600" LastActivityDate="2020-05-01T08:06:05.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14610" PostTypeId="5" CreationDate="2020-05-01T03:57:15.390" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T03:57:15.390" LastActivityDate="2020-05-01T03:57:15.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14611" PostTypeId="4" CreationDate="2020-05-01T03:57:15.390" Score="0" Body="For questions about TR-DOS, the disk operating system of the Beta Disc and Beta 128 disk interfaces for the Sinclair ZX Spectrum and much more widely used in Russian Spectrum clones." OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-01T08:06:15.513" LastActivityDate="2020-05-01T08:06:15.513" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14612" PostTypeId="5" CreationDate="2020-05-01T03:59:59.947" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T03:59:59.947" LastActivityDate="2020-05-01T03:59:59.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14613" PostTypeId="4" CreationDate="2020-05-01T03:59:59.947" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T03:59:59.947" LastActivityDate="2020-05-01T03:59:59.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14614" PostTypeId="2" ParentId="4883" CreationDate="2020-05-01T05:42:27.797" Score="0" Body="&lt;pre&gt;&lt;code&gt;10 POKE 19,1   &#xA;20 INPUT &quot;ENTER NAME : &quot;;A$   &#xA;30 POKE 19,0   &#xA;40 PRINT:PRINT &quot;YOUR NAME IS &quot;;A$   &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="17973" LastEditorUserId="79" LastEditDate="2020-05-01T08:05:45.040" LastActivityDate="2020-05-01T08:05:45.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14615" PostTypeId="1" CreationDate="2020-05-01T06:52:11.180" Score="10" ViewCount="455" Body="&lt;p&gt;There was a clone of the Sinclair Spectrum+ in South Korea called the Samsung SPC-650 that looks identical to original British version with just an extra model number/logo. It even retains the Sinclair and Spectrum names. I believe Samsung was doing some manufacturing for Sinclair in this era, so it's probably an officially re-badged model, unlike the Russian and Eastern European Speccy clones.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VoKhA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VoKhA.jpg&quot; alt=&quot;Samsung SPC-650&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But there's very little information about it online. This was in an era before Korea's tech boom and well before the Korean Wave, so there wasn't much cultural contact between Korea and the west in those days. I've even been to Korea a bunch of times in the past twenty years but did't know about these machines to try to find one.&lt;/p&gt;&#xA;&lt;p&gt;For comparison, there was also an official Spanish version of the Spectrum sold by Investronica in this era and we know it had ROM differences including some text strings and accented characters. There was also a French localized ROM which seems to be official.&lt;/p&gt;&#xA;&lt;p&gt;So did the Korean version also have localized ROMs, support for Hangul (the Korean writing system), or any other differences besides the extra writing on top?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/K6jPT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K6jPT.jpg&quot; alt=&quot;Samsung SPC-650 in its original old box&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I was content that the SPC-650 was probably just a Spectrum+ with a different logo, but then &lt;a href=&quot;https://youtu.be/ks3l5QW6hmk&quot; rel=&quot;nofollow noreferrer&quot;&gt;I watched this YouTube video which revealed more differences between the Spanish Inves and Sinclair Spectrum+&lt;/a&gt; than just the accent letters and Spanish copyright message. It had a slightly different CPU speed, PAL encoding, and RAM contention between CPU and ULA than a Sinclair Speccy. This makes it seem quite possible that the SPC-650 also could easily have had such differences too even with no changes for the Korean language.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE part 2:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I just checked and apparently South Korea uses NTSC rather than PAL, so the SPC-650 would have to at least have a different RF modulator too.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2021-02-01T15:51:35.467" LastActivityDate="2021-02-01T15:51:35.467" Title="Did the Samsung SPC-650 have any hardware or firmware differences to the genuine Sinclair Spectrum+?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;zx-spectrum&gt;&lt;zx-spectrum-clones&gt;&lt;spectrum-plus&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14616" PostTypeId="2" ParentId="14568" CreationDate="2020-05-01T09:45:39.190" Score="3" Body="&lt;p&gt;This answer is based on a quick read of the book in question, but is likely not exhaustive. There may well be other flaws that I have not noticed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SAP-1&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a very primitive system, which in many respects cannot even be considered a real computer. It lacks any form of conditional execution, which means it is unable to implement even the most primitive algorithms. It could be used as a primitive calculator, but for no applications more demanding than this. Incidentally, this processor is likely to run much faster than the 1MHz cited -- I'd be suprised if it couldn't run at up to 5MHz if carefully assembled. The most complex path in the system is likely to be the ALU (which consists of a pair of 74LS83s wired for ripple carry, and a set of XOR gates on one input to allow negation), which has a worst case propagation delay of around 70ns. This allows 30ns for instruction decoding (which is done in fixed logic, so should be fast) and latch setup time, assuming the clock has a 50/50 duty cycle and the result is needed in half a cycle (which seems to be true).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SAP-2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This system is far more advanced than SAP-1, but still has a number of shortcomings. Notably:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There are no instructions that perform indexed addressing, which would make writing many classes of application impossible (at least without resorting to tricks like self-modifying code)&lt;/li&gt;&#xA;&lt;li&gt;The lack of a call stack makes any but trivial uses of subroutines impossible - no recursive routines are possible, and each routine must have a dedicated memory location to store its return address, which would be somewhat wasteful.&lt;/li&gt;&#xA;&lt;li&gt;There is no carry flag, which means arithmetic with greater than 8 bit values will be difficult and very slow.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Performance wise, its speed is likely limited by the microcode ROM (which, presumably, is an EPROM with typical access times of 450ns -- I'm just guessing here because I can't find a schematic of this design), but on a per-cycle level the design is reasonably efficient -- it has a full 8-bit ALU, not the 4-bit system of (eg) the Z80. I'd expect performance of roughly half the speed of a 6502 at the same clock rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SAP-3&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a much more complete system. Its design is a clear imitation of the design of the Intel 8080, and has a similar feature set. Its per-clock-cycle efficiency is a little higher than the 8080's, but due to the 1MHz limit (again likely imposed by the use of an EPROM for microcode storage) is somewhat slower overall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its primary shortcomings in contrast to the 8080 are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;No addressable I/O port system. I/O is either via the restricted number of built-in ports or would need to be memory mapped (although most non-Intel processors got by with the latter anyway, so this probably isn't a serious issue)&lt;/li&gt;&#xA;&lt;li&gt;No support for interrupts. This is a seriois shortcoming that would limit its usefulness in real world applications, preventing many kinds of IO device from being used and making preemptive multitasking or other operations that require a timer impossible.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Still, this is a nearly complete processor, and its not hard to see how it could be evolved into a complete system with a step of a similar size to that between SAP-2 and SAP-3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For both SAP-2 and SAP-3 switching microcode into a higher performance medium (eg using a mask ROM or some kind of PLA) would allow them to run much faster, likely exceeding the performance of low cost microprocessors like the 8080/Z80/6502. The use of 74LSxxx chips is not an issue here - many minicomputers of the 70s and 80s used them for systems with much better performance than these microprocessors, and often had similar architectures to the ones described.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastEditorUserId="15930" LastEditDate="2020-05-01T10:34:39.630" LastActivityDate="2020-05-01T10:34:39.630" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14617" PostTypeId="5" CreationDate="2020-05-01T13:05:20.187" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T13:05:20.187" LastActivityDate="2020-05-01T13:05:20.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14618" PostTypeId="4" CreationDate="2020-05-01T13:05:20.187" Score="0" Body="For questions about trying to identify hardware problems." OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-01T17:03:48.370" LastActivityDate="2020-05-01T17:03:48.370" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14619" PostTypeId="5" CreationDate="2020-05-01T13:08:53.740" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T13:08:53.740" LastActivityDate="2020-05-01T13:08:53.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14620" PostTypeId="4" CreationDate="2020-05-01T13:08:53.740" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T13:08:53.740" LastActivityDate="2020-05-01T13:08:53.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14621" PostTypeId="2" ParentId="14595" CreationDate="2020-05-01T13:17:07.770" Score="4" Body="&lt;p&gt;As already noted by others, the formats were what was later termed Group Coded Recording (GCR). DOS 3.3 and its &quot;new&quot; 16-sector PROMs used 6-and-2 encoding, whereas earlier DOS versions and the &quot;old&quot; 13-sector PROMs used 5-and-3 encoding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main technical obstacle was that the old sequencer PROM couldn't read the new 16-sector format. That resulted in some software limitations that (as is often the case) while seemingly technical, were in fact due to cost-benefit concerns. (I agree the booting behaviour was a casualty there. The //c+ and IIgs are better.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new sequencer PROM could handle both formats, but separate code would have been needed for each, both in the boot PROM and in DOS, so an old boot sector on a new disk wouldn't help without doubling up the code everywhere - unthinkable in 1980 when every byte was precious.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Booting both formats could have been handled by a larger (more expensive) boot PROM, and in fact there were later &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.apple2/KR8H6nqdG8M/xnRLG9lNCgAJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;third-party cards that did this&lt;/a&gt; (or had a switch). The track &amp;amp; sector address prologue was changed from &quot;D5AAB5&quot; to &quot;D5AA96&quot; to differentiate the two formats, so some cards used that to select the appropriate (13 or 16-sector) boot PROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But larger PROMs couldn't be retrofitted to the Disk II interface card without extra logic. A daughterboard would probably cost too much, so it would need to be a new card. Why didn't Apple make one?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The easy upgrade with new PROMs.&lt;/li&gt;&#xA;&lt;li&gt;The clear advantage in space (and therefore speed) of the new format obsoleted the old.&lt;/li&gt;&#xA;&lt;li&gt;Possibly Apple's focus on the Apple /// and SOS: the Apple II itself was to be obsoleted!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Workarounds in software were deemed sufficient by most:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BOOT13 on the &lt;a href=&quot;https://mirrors.apple2.org.za/ftp.apple.asimov.net/images/masters/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOS 3.3 System Master&lt;/a&gt; runs the 13-sector boot PROM. See &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/4679/71&quot;&gt;this question&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Users created their own patches for DOS 3.3 to add 13-sector support.&lt;/li&gt;&#xA;&lt;li&gt;Some software did the reverse of what you suggest: remaining 13-sector formatted but having &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.apple2/mrCcvZkR8TE/WwiFqt_puwQJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;BOTH old and new boot sectors on track zero&lt;/a&gt;. Titles include Ultima (AKA Ultima I) and Castle Wolfenstein:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;the way it was usually done was to have everything in&#xA;  13-sector format, except for one single boot sector that can be read&#xA;  by the 16-sector controller card. That sector then just contains an&#xA;  equivalent of the 13-sector boot ROM and the first thing it does is to&#xA;  simply load the 13-sector boot sector and jump to it. From there,&#xA;  everything is almost the same for the two code paths&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because the new PROMs could still read old disks the natural course of action was to provide that upgrade path and a migration path via programs like MUFFIN (again on the the DOS 3.3 System Master).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, your questions seem to be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Why didn't Apple make new PROMs or cards that booted old disks too?&lt;/li&gt;&#xA;&lt;li&gt;And why didn't Apple make the new DOS 3.3 compatible with old disks?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As I think I've shown, other people did these things, but Apple didn't because they didn't care enough, whether for reasons of profit or in haste to ditch the Apple II and move onto the next big thing. Although some great people have worked for Apple, and many of them have shown a lot of love for the Apple II platform, this attitude has been evident repeatedly, and some of us have never forgiven Apple for it. For however much you can anthropomorphise a company. ; - )&lt;/p&gt;&#xA;" OwnerUserId="71" LastActivityDate="2020-05-01T13:17:07.770" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14622" PostTypeId="5" CreationDate="2020-05-01T13:23:51.260" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T13:23:51.260" LastActivityDate="2020-05-01T13:23:51.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14623" PostTypeId="4" CreationDate="2020-05-01T13:23:51.260" Score="0" Body="For questions about the various SD card interfaces made for Sinclair ZX Spectrums by ByteDelight." OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-01T17:04:12.640" LastActivityDate="2020-05-01T17:04:12.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14624" PostTypeId="5" CreationDate="2020-05-01T13:31:54.357" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T13:31:54.357" LastActivityDate="2020-05-01T13:31:54.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14625" PostTypeId="4" CreationDate="2020-05-01T13:31:54.357" Score="0" Body="For questions about ICs, the less complicated chips that provide many useful functions that would otherwise require discrete logic consisting of a larger number of transistors, etc." OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-01T16:43:02.880" LastActivityDate="2020-05-01T16:43:02.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14626" PostTypeId="5" CreationDate="2020-05-01T13:35:47.900" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T13:35:47.900" LastActivityDate="2020-05-01T13:35:47.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14627" PostTypeId="4" CreationDate="2020-05-01T13:35:47.900" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T13:35:47.900" LastActivityDate="2020-05-01T13:35:47.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14628" PostTypeId="5" CreationDate="2020-05-01T13:37:36.747" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T13:37:36.747" LastActivityDate="2020-05-01T13:37:36.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14629" PostTypeId="4" CreationDate="2020-05-01T13:37:36.747" Score="0" Body="For questions about the second generation 48K Sinclair ZX Spectrum with the new case design and hard plastic keys replacing the first generation's grey rubber keys." OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-01T16:42:02.910" LastActivityDate="2020-05-01T16:42:02.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14630" PostTypeId="5" CreationDate="2020-05-01T13:39:04.470" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-05-01T13:39:04.470" LastActivityDate="2020-05-01T13:39:04.470" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14631" PostTypeId="4" CreationDate="2020-05-01T13:39:04.470" Score="0" Body="For questions about the Sinclair ZX Spectrum model released after Amstrad took over the company, which included a built-in compact cassette player in the case." OwnerUserId="3290" LastEditorUserId="278" LastEditDate="2020-05-01T15:38:51.880" LastActivityDate="2020-05-01T15:38:51.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14632" PostTypeId="1" CreationDate="2020-05-01T14:10:34.287" Score="14" ViewCount="5164" Body="&lt;p&gt;I've read some English and Swedish computer magazines from the 1990s, even late 1990s, and they frequently (maybe even &lt;em&gt;consistently&lt;/em&gt;) use &quot;Mb&quot; to mean &quot;Megabyte&quot;, even though &quot;Mb&quot; at least now means &quot;Megabit&quot;, whereas &quot;MB&quot; is Megabyte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Yes, I also know about the &quot;MiB&quot; stuff, but it never seemed to be used by anyone. And it's irrelevant for this case anyway.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was extra confusing for me, because I also read video game magazines and they (particularly Nintendo) often talked about &quot;64 Mb cartridge&quot; (literally meaning 64 Megabit, AKA 16 MB) and whatnot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was not the &quot;B = byte, b = bit&quot; standard established even back in the day, in the 1970s/early 1980s?&lt;/p&gt;&#xA;" OwnerUserId="17974" LastActivityDate="2020-05-08T01:48:00.033" Title="How is it possible that they used to type &quot;Mb&quot; when they meant &quot;MB&quot; in printed computer magazines in the 1990s?" Tags="&lt;books&gt;&lt;magazine&gt;" AnswerCount="6" CommentCount="12" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14633" PostTypeId="2" ParentId="14632" CreationDate="2020-05-01T14:21:15.813" Score="4" Body="&lt;p&gt;At least for console games, it was actually common to measure size in bits, not bytes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A reference can be found at &lt;a href=&quot;https://atariage.com/forums/topic/167980-what-does-two-mega-cartridge-mean/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://atariage.com/forums/topic/167980-what-does-two-mega-cartridge-mean/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3842" LastActivityDate="2020-05-01T14:21:15.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14634" PostTypeId="2" ParentId="14632" CreationDate="2020-05-01T15:39:33.053" Score="37" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was not the &quot;B = byte, b = bit&quot; standard established even back in the day, in the 1970s/early 1980s?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not really. It existed (I think at least as far back as 1979's JEP100, but I don't have good sources), but even through the 90s I would say that it wasn't that strictly adhered to. There was a lot of variability all over the place, especially in consumer-facing materials. Even to this day, I write &quot;B&quot; for byte and &quot;bit&quot; for bit to try to minimize the potential for confusion, and never use &quot;b&quot;.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2020-05-01T15:39:33.053" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14635" PostTypeId="2" ParentId="14632" CreationDate="2020-05-01T15:44:49.467" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was not the &quot;B = byte, b = bit&quot; standard established even back in the day, in the 1970s/early 1980s?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure, it was, but magazines and the like were not only consumer publications, but as well made by only partially educated people. Everyone wrote like he thought it would fit. More so, I don't think any country ever invoked a spelling police for computer magazines, or did they?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While some magazines let each author decide, others tried to evoke their own conventions to keep present consistency to their readers. These conventions were based on different reasoning from spelling (always writing Kb and Mb for bytes), over heritage (like electronics/communication magazines using strictly only decimal prefixes, as was common for transmission rates) and avoiding (always writing in full or as word like Kbyte/Mbyte) to attempts of avoiding collision (like avoiding collision by use 'unused/' SI combinations KB and mB for binary Kbyte and Mbyte).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end it differed from publication to publication and country to country. The Wiki entry for &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary_prefix&quot; rel=&quot;nofollow noreferrer&quot;&gt;Binary Prefixes&lt;/a&gt; tries to shed light on some of the origins and attempts to straighten it.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Yes, I also know about the &quot;MiB&quot; stuff, but it never seemed to be used by anyone.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, I do, and many others as well. Try it yourself. You'll get used soon and laugh about all the inconsistency others still produce.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="18003" LastEditDate="2020-05-04T07:13:22.180" LastActivityDate="2020-05-04T07:13:22.180" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14636" PostTypeId="2" ParentId="14508" CreationDate="2020-05-01T17:48:11.880" Score="1" Body="&lt;p&gt;Assorted sources on the internet indicate that the Palm / Pilot models before the Palm III used &quot;PSRAM&quot;, or &quot;pseudo-static RAM&quot; for the replaceable onboard memory. This means a device that contains a DRAM, but has the electrical interface of an SRAM, which makes things simpler for the host machine. Those modules also contain the device's ROM, and ROM and (P)SRAM share basically the same interface, other than ROM lacking a write-enable pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The book &quot;Hardware Hacking: Have Fun While Voiding Your Warranty&quot; gives the Toshiba TC518512AFT as an example of a RAM chip suitable for upgrading the storage on the Pilot 1000, 5000, and Professional. It also gives schematics for the memory cards -- unfortunately it doesn't include the &lt;em&gt;pinout&lt;/em&gt; of the edge connectors, but it does indicate that they're bringing out the PSRAM/ROM signals out directly — 20 address lines, 16 data lines (8-bit PSRAMs are used in pairs), power, and chip select / write enable lines. The only difference between the Pilot 1000/5000 cards and the PalmPilot cards seems to be an increase in the number of chip select lines — and the number of chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think the connector is called anything except an &quot;edge connector&quot;, with the spacing between trace centers (&quot;pitch&quot;) specified.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2020-05-01T17:48:11.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14637" PostTypeId="1" AcceptedAnswerId="14639" CreationDate="2020-05-01T20:14:19.453" Score="2" ViewCount="405" Body="&lt;p&gt;I was reading about the SAP computers(as I do), and examined the SAP-2 chapter of Paul Malvino's Digital Computer Electronics, hoping to learn about how a microprocessor without a multiply instruction would go about multiplying numbers. It required 3 registers, which i will denote A, B, and C, and the instructions to sucessfully multiply 2 binary numbers went like this according to the book:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line 1:Load A with 0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line 2:Load B with the first number you are multiplying&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line 3:Load C with the second number you are multiplying&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line 4:Add A and B and store sum in A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line 5: Decrement C&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line 6: If the byte stored in C is not zero, jump to line 4&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line 7: Stop the program. The product will be in A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first problem here is the decrement instruction. Earlier in the book, it said that to execute a decrement instruction, you must load the value you want to decrement in A, subtract 1, and then load it back into the designated register. But that means that the product value in A will be overwritten by the decrement instruction, so that won't work. The second problem is the flags, which only apply to A, which means to untrigger the jump instruction, you have to overwrite A. And if that doesn't work, how do microprocessors multiply without a &quot;Multiply&quot; instruction? Or is there something I misunderstood in the program or how the &quot;decrement&quot; instruction works?&lt;/p&gt;&#xA;" OwnerUserId="17968" LastActivityDate="2020-05-02T07:37:45.457" Title="How do microprocessors multiply without a &quot;Multiply&quot; instruction?" Tags="&lt;microprocessor&gt;&lt;alu&gt;" AnswerCount="2" CommentCount="4" ClosedDate="2020-05-02T05:14:38.260" ContentLicense="CC BY-SA 4.0" />
  <row Id="14638" PostTypeId="2" ParentId="14637" CreationDate="2020-05-01T20:35:03.320" Score="6" Body="&lt;p&gt;The repeated-addition algorithm you describe is not the usual way.  Instead, think of long multiplication, but in base 2 instead of base 10.  The shift instructions available in most CPUs are useful here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's how you might do it on a 6502:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Mul8x8to16:&#xA;  LDX #8&#xA;  LDA #0&#xA;  STA resultHi&#xA;@loop:&#xA;  ; shift result up by one place&#xA;  ASL A&#xA;  ROL resultHi&#xA;  ; examine next most-significant bit of A operand&#xA;  ASL operandA&#xA;  BCC @skipAdd&#xA;  ; if it was set, add a copy of B to the result…&#xA;  CLC&#xA;  ADC operandB&#xA;  ; …carrying to the high byte if needed&#xA;  BCC @skipAdd&#xA;  INC resultHi&#xA;@skipAdd:&#xA;  ; do the above the correct number of times&#xA;  DEX&#xA;  BNE @loop&#xA;  ; complete the result&#xA;  STA resultLo&#xA;  RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the above, only the low half of the result is kept in the accumulator, and is saved to memory right at the end.  The 6502 has enough operations that work directly on memory or on the index registers for that approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original ARM1 of 1985 also lacked a multiply instruction; this was one of the things added to the ARM2, which was the first version commercially sold in home computers.  On the ARM1, you would need a routine like the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Mul32x32to64:&#xA;  MOV    r2, #$7FFFFFFF  ; low half of result and loop counter in one&#xA;  MOV    r3, #0          ; high half of result&#xA;@loop:&#xA;  MOVS   r0, r0, LSR #1  ; pull next lowest bit of A into Carry&#xA;  ADDSCS r3, r3, r1      ; if it was set, add B into high result&#xA;  MOVS   r3, r3, RRX     ; shift result (and its carry) down into…&#xA;  MOVS   r2, r2, RRX     ; …the low half, shifting out a counter bit&#xA;  BCS    @loop           ; repeat 32 times&#xA;  MOV    pc, lr          ; return&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are fewer instructions (and fewer cycles per loop) involved here, and the ARM does considerably more per instruction than the 6502.  But the basic principle of long multiplication remains.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-05-02T07:37:45.457" LastActivityDate="2020-05-02T07:37:45.457" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14639" PostTypeId="2" ParentId="14637" CreationDate="2020-05-01T20:35:11.027" Score="4" Body="&lt;p&gt;It seems that some of the information you have doesn't apply to the SAP-2.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Earlier in the book, it said that to execute a decrement instruction, you must load the value you want to decrement in A, subtract 1, and then load it back into the designated register. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Simple As Possible SAP-2 computer has dedicated decrement instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Section 11-4 &quot;&lt;em&gt;Register Instructions&lt;/em&gt;&quot;, subsection &quot;&lt;em&gt;INR and DCR&lt;/em&gt;&quot; (p. 178) tells us about &lt;code&gt;DCR A&lt;/code&gt;, &lt;code&gt;DCR B&lt;/code&gt;, and DCR C`.&amp;nbsp; So, decrementing C is directly doable, without using A.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The second problem is the flags, which only apply to A, which means to untrigger the jump instruction, you have to overwrite A.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Oddly placed within Section 11-5 &quot;&lt;em&gt;Jump and Call Instructions&lt;/em&gt;&quot;, subsection &quot;&lt;em&gt;CALL and RET&lt;/em&gt;&quot;, minor section &quot;&lt;em&gt;More on Flags&lt;/em&gt;&quot; (p. 180), tells us that the &lt;code&gt;DCR&lt;/code&gt; instruction affects the &lt;code&gt;S&lt;/code&gt; and &lt;code&gt;Z&lt;/code&gt; flags.&amp;nbsp; So you can pair &lt;code&gt;DCR&lt;/code&gt; with &lt;code&gt;JNZ&lt;/code&gt; to accomplish a decrement and branch if not zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The text says: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;If the accumulator goes negative while the &lt;code&gt;DCR C&lt;/code&gt; is executed, the sign flag is set; if the accumulator goes to zero the zero flag is set.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It describes that the &lt;code&gt;DCR C&lt;/code&gt; instruction is executed by sending &lt;code&gt;C&lt;/code&gt; to the accumulator and decrementing by 1 within the ALU &amp;#8212; and that since this is done in the ALU, the flags are set.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Still, there does appear to be some conflicting information.&amp;nbsp; It is clear that the ALU is used to in decrementing &lt;code&gt;C&lt;/code&gt; and setting the &lt;code&gt;Z&lt;/code&gt; flag.&amp;nbsp; And it is also clear from the examples and solutions that the &lt;code&gt;A&lt;/code&gt; accumulator is not affected by decrementing &lt;code&gt;C&lt;/code&gt;.&amp;nbsp; Yet the text does describe that the accumulator is used to decrement.&amp;nbsp; So, something else is happening, perhaps &lt;code&gt;C&lt;/code&gt; is sent to the &lt;code&gt;TMP&lt;/code&gt; register as that is also connect to the ALU.&amp;nbsp; Also, I would take it that the flags are set by the ALU output, not by a target register or specifically the &lt;code&gt;A&lt;/code&gt;/&lt;code&gt;accumulator&lt;/code&gt; &amp;#8212; as the block diagram (Fig 11-2) indicates, the flags come out of the ALU, regardless of what register is the target.&amp;nbsp; Yet the text also describes the circuit for the flags, and says this is connected to the accumulator &amp;#8212; but I would think it that circuit attaches to the ALU output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given their juggling of three different SAP-# models, some missing clarity or minor contradictions like this are to be expected.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastEditorUserId="7985" LastEditDate="2020-05-01T20:59:46.943" LastActivityDate="2020-05-01T20:59:46.943" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14640" PostTypeId="2" ParentId="14596" CreationDate="2020-05-02T12:22:17.110" Score="1" Body="&lt;p&gt;The data output by keyboards varies with different computer systems and&#xA;protocols. While your theory is certainly plausible, a typical keyboard outputs&#xA;&quot;scan codes&quot;, rather than ASCII codes - typically over a serial interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While modern PCs use USB as the physical interface, with the USB HID protocol&#xA;running on top of that, the protocol dates back to the original IBM PC XT/AT&#xA;keyboard interface which is still emulated in some parts of a modern OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this protocol, shift keys are no different to the &quot;regular&quot; typematic keys&#xA;and rely on software in the operating system to translate them to characters&#xA;or to perform actions which have no ASCII-equivalent - like media keys on&#xA;modern keyboards, or older (1980's) keyboards that could have a mouse or&#xA;joystick connected to them, which also sent data over the keyboard interface.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The original IBM PC (XT)&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Ref: [1] &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/pc/xt/1502237_PC_XT_Technical_Reference_Apr83.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.bitsavers.org/pdf/ibm/pc/xt/1502237_PC_XT_Technical_Reference_Apr83.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The keyboard contained an Intel 8048 microcontroller which periodically scans&#xA;the matrix of keyboard switches, monitors for changes in the switches, encodes&#xA;the switch changes as &quot;scan codes&quot; and then sends the scan codes over the&#xA;keyboard's serial interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The XT keyboard has 83 keys, so sends scan codes numbered 1 to 83.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scan codes roughly correspond to the order of the switches in the switch matrix&#xA;and are unrelated to ASCII.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most scan codes are sent as a single byte, with bit 7 clear when the key is&#xA;down (pressed), and set when the key is up (released).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if you pressed key 30 which corresponds to &lt;kbd&gt;A&lt;/kbd&gt; on a US layout:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;| action  | hex  | binary   |&#xA;| ------- | ---- | -------- |&#xA;| press   | 0x1e | 00011110 |&#xA;| release | 0x9e | 10011110 |&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The PC contained an Intel 8255 Programmable Peripheral Interface (PPI) chip&#xA;which was directly connected to the keyboard port to receive the incoming data,&#xA;and also to the PC's address and data bus, to output the (buffered) data when&#xA;the keyboard IO port (0x60) was read by software running on the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keyboards with different key layouts, like &quot;QWERTY&quot;, &quot;AZERTY&quot;, &quot;QWERTZ&quot; all&#xA;output the same scan codes for the same physical key positions rather than what&#xA;is printed on the key - when you press &lt;kbd&gt;Q&lt;/kbd&gt; on a QWERTY keyboard, the keyboard&#xA;sends scan code 0x10, and when you press &lt;kbd&gt;A&lt;/kbd&gt; on an AZERTY keyboard, the keyboard&#xA;also sends scan code 0x10.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that software in the PC needs to translate the scan codes to the&#xA;characters you want, using a keyboard translation table.  At the time, the&#xA;MS DOS operating system was popular and the &lt;code&gt;keyb&lt;/code&gt; program was used to load&#xA;a keyboard layout corresponding to a country code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So back to your question, how does a shift key work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the PC AT keyboard protocol (derived from the earlier XT standard), if&#xA;you hold down the left shift key and press a letter key, the following scan&#xA;codes are sent in order:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;0x2A | left shift down&lt;br&gt;&#xA;0x1E | &lt;kbd&gt;A&lt;/kbd&gt; down - the &lt;kbd&gt;A&lt;/kbd&gt; key on a US layout, that is to say :)&lt;br&gt;&#xA;0x9E | &lt;kbd&gt;A&lt;/kbd&gt; up&lt;br&gt;&#xA;0xAA | left shift up  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the left and right shift keys are different keys and can have&#xA;potentialy have different actions.  Software also needs to be aware of this, so&#xA;that it stays in &quot;shifted&quot; mode if both the shift keys are pressed, and one was&#xA;released.  Consider this sequence:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;0x2A | left shift down&lt;br&gt;&#xA;0x36 | right shift down&lt;br&gt;&#xA;0xAA | left shift up&lt;br&gt;&#xA;0x1E | &lt;kbd&gt;A&lt;/kbd&gt; down&lt;br&gt;&#xA;0x9E | &lt;kbd&gt;A&lt;/kbd&gt; up&lt;br&gt;&#xA;0xB6 | right shift down  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a single &quot;shift&quot; toggle bit is used by software, then the 0xAA scan code&#xA;would clear it, returning to unshifted input, and return a lower-case &quot;a&quot;,&#xA;rather than the correct upper-case &quot;A&quot;.&lt;/p&gt;&#xA;" OwnerUserId="13829" LastActivityDate="2020-05-02T12:22:17.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14641" PostTypeId="2" ParentId="14632" CreationDate="2020-05-02T16:01:28.570" Score="2" Body="&lt;p&gt;Since 1968 I was taught B = byte and b = bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The confusion with kb = 1024 bits comes from the digital world using binary arithmetic: 10000000000 binary = 2^10 decimal = 1024 decimal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1000 decimal = 1111101000 binary. I don't know about you but I prefer the standard cludge. &lt;/p&gt;&#xA;" OwnerUserId="17983" LastEditorUserId="17983" LastEditDate="2020-05-02T16:06:45.463" LastActivityDate="2020-05-02T16:06:45.463" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14642" PostTypeId="1" AcceptedAnswerId="14643" CreationDate="2020-05-02T17:53:41.103" Score="-2" ViewCount="210" Body="&lt;p&gt;On the 8080 and 8085 microprocessors, a LDA instruction took 13 timing(or T) states to execute. This could be solved by using a ring counter that could generate said 13 T states,as well as having variable instruction length in the control unit that is generally guaranteed in microprocessors. So if this method is so efficient and not very taxing on hardware, why did they switch to having multiple machine cycles per instruction? That sounds like it would require massive amounts of hardware to back it up, much more than having a larger ring counter. So why did they make the switch, and is the hardware to back up multiple machine cycles simpler than I thought?&lt;/p&gt;&#xA;" OwnerUserId="17968" LastActivityDate="2020-05-02T23:39:59.500" Title="Why did computers settle for instructions with multiple machine cycles instead of investing into larger ring counters?" Tags="&lt;hardware&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="0" ClosedDate="2020-05-03T19:52:18.343" ContentLicense="CC BY-SA 4.0" />
  <row Id="14643" PostTypeId="2" ParentId="14642" CreationDate="2020-05-02T18:52:28.117" Score="4" Body="&lt;p&gt;In the 6502, there are principally three reasons for taking more than one clock cycle per instruction.  The 6502 (in common with 65xx and 68xx family CPUs) can transfer one byte on the memory bus per cycle, which is generally better than &quot;80 family&quot; CPUs in which the bus protocol is more complex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first reason is that more than one byte may need to be transferred on the bus.  For LDA absolute, four bytes are needed - three instruction bytes (opcode, address low, address high) and the actual data byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second reason is that there is limited execution hardware and register space inside the 6502, which was designed to a price point of $25 in 1975, several times lower than its nearest competitors.  So for a few instructions and addressing modes, an extra cycle or two is taken to wait for some data to get out of the way before putting another value in its place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The third reason is that in a couple of cases, complex microcode was reused with some parts suppressed, which resulted in seemingly unnecessary cycles taken by comparatively rare instructions.  This includes the &quot;instruction&quot; executed in response to a Reset signal, which reuses the microcode for taking interrupts and executing the BRK opcode, as does JSR.  RTS and RTI also share microcode, the latter performing an extra operation in a &quot;dead cycle&quot; of RTS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will find similar reasons in the design of other early CPUs.  Some of these will have an additional reason - that executing an instruction inherently takes several sequential steps with the hardware provided.  This is normally true of multiply and divide operations, which use a shift-add type implementation to avoid the need to implement a very large and expensive piece of logic.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-05-02T18:52:28.117" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="14644" PostTypeId="1" CreationDate="2020-05-02T19:13:40.030" Score="1" ViewCount="79" Body="&lt;p&gt;I am trying to power on an old &lt;strong&gt;Siemens PG675&lt;/strong&gt;. It need a 5.25 disk but unfortunately it is missing. I found a TeleDisk image (.TD0) of this disk, and I would like to transfer it to a 3.5 floppy disk (I replaced the original 5.25 reader with a dual 5.25 and 3.5 unit from a PG750-486).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have used dsktools, but it gives me this error when I try the &quot;Copy&quot; option:&#xA;&quot;Error on file A::  Bad format&quot;.&lt;/p&gt;&#xA;" OwnerUserId="17987" LastActivityDate="2020-05-02T19:13:40.030" Title="Transfer a TeleDisk image of a 5.25 disk to a 3.5 disk" Tags="&lt;floppy-disk&gt;&lt;disk-image&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14645" PostTypeId="2" ParentId="14596" CreationDate="2020-05-02T19:19:42.893" Score="2" Body="&lt;p&gt;I got a little carried away researching for what was just intended to be a mild elaboration on what was already said. I hope you find this interesting nonetheless:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Old Terminal Hardware&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;First, the &lt;a href=&quot;http://www.catb.org/esr/faqs/things-every-hacker-once-knew/#_ascii&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASCII section&lt;/a&gt; in Eric S. Raymond's &quot;Things Every Hacker Once Knew&quot; goes into more detail on how old terminals mapped keys, including that Shift toggles the 16 or 32 bit depending on the key, and that Ctrl would mask out the top three bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's why you type Ctrl+D (Historically visualized as &lt;code&gt;^D&lt;/code&gt;) to exit an interactive Python session on Linux or if you're using &lt;code&gt;cat &amp;gt; name_of_file&lt;/code&gt; as an equivalent to the old DOS &lt;code&gt;COPY CON&lt;/code&gt; trick. The binary representation of &lt;code&gt;D&lt;/code&gt; is &lt;code&gt;1000100&lt;/code&gt; while &lt;code&gt;0000100&lt;/code&gt; is the ASCII control character &lt;code&gt;EOT&lt;/code&gt; (End of Transmission).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As ESR points out, DOS and Windows use Ctrl+Z (&lt;code&gt;^Z&lt;/code&gt;) as their end-of-file character, which is not the ASCII-specified meaning but still derives from how old terminals would mask out the top three bits of the letter when you held Ctrl.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the ASCII-to-binary chart he includes, generated using his &lt;a href=&quot;http://www.catb.org/esr/ascii/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ascii&lt;/a&gt; utility:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   0000000 NUL    0100000      1000000 @    1100000 `&#xA;   0000001 SOH    0100001 !    1000001 A    1100001 a&#xA;   0000010 STX    0100010 &quot;    1000010 B    1100010 b&#xA;   0000011 ETX    0100011 #    1000011 C    1100011 c&#xA;   0000100 EOT    0100100 $    1000100 D    1100100 d&#xA;   0000101 ENQ    0100101 %    1000101 E    1100101 e&#xA;   0000110 ACK    0100110 &amp;amp;    1000110 F    1100110 f&#xA;   0000111 BEL    0100111 '    1000111 G    1100111 g&#xA;   0001000 BS     0101000 (    1001000 H    1101000 h&#xA;   0001001 HT     0101001 )    1001001 I    1101001 i&#xA;   0001010 LF     0101010 *    1001010 J    1101010 j&#xA;   0001011 VT     0101011 +    1001011 K    1101011 k&#xA;   0001100 FF     0101100 ,    1001100 L    1101100 l&#xA;   0001101 CR     0101101 -    1001101 M    1101101 m&#xA;   0001110 SO     0101110 .    1001110 N    1101110 n&#xA;   0001111 SI     0101111 /    1001111 O    1101111 o&#xA;   0010000 DLE    0110000 0    1010000 P    1110000 p&#xA;   0010001 DC1    0110001 1    1010001 Q    1110001 q&#xA;   0010010 DC2    0110010 2    1010010 R    1110010 r&#xA;   0010011 DC3    0110011 3    1010011 S    1110011 s&#xA;   0010100 DC4    0110100 4    1010100 T    1110100 t&#xA;   0010101 NAK    0110101 5    1010101 U    1110101 u&#xA;   0010110 SYN    0110110 6    1010110 V    1110110 v&#xA;   0010111 ETB    0110111 7    1010111 W    1110111 w&#xA;   0011000 CAN    0111000 8    1011000 X    1111000 x&#xA;   0011001 EM     0111001 9    1011001 Y    1111001 y&#xA;   0011010 SUB    0111010 :    1011010 Z    1111010 z&#xA;   0011011 ESC    0111011 ;    1011011 [    1111011 {&#xA;   0011100 FS     0111100 &amp;lt;    1011100 \    1111100 |&#xA;   0011101 GS     0111101 =    1011101 ]    1111101 }&#xA;   0011110 RS     0111110 &amp;gt;    1011110 ^    1111110 ~&#xA;   0011111 US     0111111 ?    1011111 _    1111111 DEL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you'd like more information on the specific standards that established the various meanings of the ASCII control characters, I recommend Aivosto Oy's &lt;a href=&quot;https://www.aivosto.com/articles/control-characters.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Control characters in ASCII and Unicode&lt;/a&gt; which I can't really meaningfully excerpt because it's mostly tabular information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, if you'd like to know more about how key-presses on UNIX and Linux terminals (and terminal emulators) get translated into what's seen by software, Linus Åkesson's &lt;a href=&quot;http://www.linusakesson.net/programming/tty/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The TTY demystified&lt;/a&gt; is the most accessible reference I've ever found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;Configuring the TTY device&quot; section at the end even provides various example commands you can play with in any environment which presents a VT100-compatible terminal emulator plus POSIX-compliant commands. (UNIX, Linux, macOS, Microsoft's WSL, etc.)&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;IBM PC Hardware&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;To step forward one ecosystem, the IBM PC keyboard puts a microcontroller in the keyboard which bundles all the matrix decoding up in a binary protocol based on key presses and releases with no concern for what role each key plays. Modifiers become modifiers on the PC side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to play around with this is probably to boot up an X11-based desktop (eg. on Linux) and play around with the preset key reassignments offered by the &lt;code&gt;setxkbmap&lt;/code&gt; tool.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;setxkbmap -option compose:rctrl -option ctrl:swapcaps -option shift:both_capslock_cancel&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This command will...&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Remap the right control key to Compose so you can type ™ by pressing (and not holding) &lt;kbd&gt;Compose&lt;/kbd&gt;&lt;kbd&gt;t&lt;/kbd&gt;&lt;kbd&gt;m&lt;/kbd&gt;&lt;/li&gt;&#xA;&lt;li&gt;Swap the Ctrl and Caps Lock keys so you can type your emacs keyboard shortcuts with less awkwardness and risk of repetitive strain injuries.&lt;/li&gt;&#xA;&lt;li&gt;Set up &quot;pressing both Shift keys together enables Caps Lock, pressing one Shift key disables it&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(A selection of behaviours I chose to demonstrate both using modifier keys as ordinary keys and vice-versa.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For further details on playing with setxkbmap, I recommend a blog post I wrote after not finding anything better, &lt;a href=&quot;http://blog.ssokolow.com/archives/2011/12/24/getting-your-way-with-setxkbmap/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Getting your way with setxkbmap&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to explore the wire protocol that IBM established and PC clone makers followed with the XT, AT, and PS/2 keyboards, &lt;a href=&quot;http://www.seasip.info/VintagePC/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Vintage PC Pages&lt;/a&gt; at seasip.info have some excellent SVG diagrams and tables explaining the key mappings used by the microcontrollers in the UK versions of various standard-setting IBM PC keyboards (XT 83-key, XT 84-key, PS/2 102-key) to report key-presses over the wire.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It links to &lt;a href=&quot;https://www.win.tue.nl/~aeb/linux/kbd/scancodes-10.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;10. Keyboard-internal scan codes&lt;/a&gt; from &quot;Keyboard scancodes&quot;&#xA;by Andries Brouwer for a detailed explanation of how the scan codes are encoded as byte sequences. Because IBM defined three different modes to the protocol for backwards compatibility, each encoding a &quot;break code&quot; (key release event) differently, I won't go into detail here but the gist is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In Set 1 (PC XT), each key is assigned an identifier consisting of one or more bytes (usually just one) using a scheme which guarantees unique prefixes and key releases are indicated by XORing the last byte with 0x80.&lt;/li&gt;&#xA;&lt;li&gt;In Set 2 (PC AT), each key is again assigned a (different) byte sequence but key releases are indicated by sending a 0xf0 byte before the last byte of the key sequence.&lt;/li&gt;&#xA;&lt;li&gt;In Set 3 (Terminal), key releases are indicated the same way as Set 2 but it's possible to enable or disable reporting of key releases on a per-key basis and, by default, it's only enabled for modifiers and keys which didn't exist when IBM specified the protocol, such as multimedia keys.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In both Set 1 and Set 2, the Pause/Break key is unique in generating a uniquely long 6-byte (Set 1) or 8-byte sequence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless the requested otherwise, the keyboard controller on the PC side will translate Set 2 or Set 3 keycodes into Set 1 for legacy compatibility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to Brouwer, support for Sets 1 and 3 is either buggy or missing in most non-IBM clone keyboards and it is also the only mode supported when BIOS legacy support is exposing a USB keyboard as if it were a PS/2 device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.seasip.info/VintagePC/ibm_6110344.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 6110344 Keyboard&lt;/a&gt; page on seasip.info points out that, as it was used for the 122-key keyboard of the &lt;a href=&quot;http://www.seasip.info/VintagePC/5271.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 5271&lt;/a&gt;, which predates the PC AT, it is likely that Set 3 originates in the world of IBM 3270 terminals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to go deeper, Adam Chapweske wrote &lt;a href=&quot;http://www.burtonsys.com/ps2_chapweske.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;PS/2 Mouse/Keyboard Protocol&lt;/a&gt;, which goes into the electrical details you need to build your own keyboard or hardware keyboard emulator using a microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;USB Hardware&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;You'd think that, because dual-mode keyboards which can speak USB and PS/2 protocol are a thing, there isn't much relevant to your question that wasn't already answered, but USB HID actually re-introduces treating modifier keys differently as a form of data compression.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Details can be found in the &lt;a href=&quot;https://www.usb.org/sites/default/files/documents/hid1_11.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;USB HID specification&lt;/a&gt; but the gist is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;USB HID defines two different protocols keyboards can speak. The fact that most keyboards only implement the boot protocol is what leads people to believe that USB HID is inherently limited to 6-key rollover.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The boot protocol is specified to fit in a single USB 1.1 Low-Speed &quot;transaction&quot; (I think of them as akin to TCP/IP packets), which is limited to 8 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As such, when a USB keyboard is speaking the barebones boot protocol that everything must implement for compatibility with things like BIOS menus, the PC polls for status (USB HID says interrupts are supported but optional) and receives a report that looks like this&lt;a href=&quot;https://wiki.osdev.org/USB_Human_Interface_Devices#Report_format&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1]&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;           Bit 0   Bit 1    Bit 2   Bit 3   Bit 4   Bit 5    Bit 6   Bit 7&#xA;         ╔═══════╦════════╦═══════╦═══════╦═══════╦════════╦═══════╦═══════╗&#xA;  Byte 0 ║ LCtrl ║ LShift ║ LAlt  ║ LWin  ║ RCtrl ║ RShift ║ RAlt  ║ RWin  ║&#xA;         ╠═══════╩════════╩═══════╩═══════╩═══════╩════════╩═══════╩═══════╣&#xA;  Byte 1 ║ Reserved                                                        ║&#xA;         ╠═════════════════════════════════════════════════════════════════╣&#xA;  Byte 2 ║ Keycode #1                                                      ║&#xA;         ╠═════════════════════════════════════════════════════════════════╣&#xA;  Byte 3 ║ Keycode #2                                                      ║&#xA;         ╠═════════════════════════════════════════════════════════════════╣&#xA;  Byte 4 ║ Keycode #3                                                      ║&#xA;         ╠═════════════════════════════════════════════════════════════════╣&#xA;  Byte 5 ║ Keycode #4                                                      ║&#xA;         ╠═════════════════════════════════════════════════════════════════╣&#xA;  Byte 6 ║ Keycode #5                                                      ║&#xA;         ╠═════════════════════════════════════════════════════════════════╣&#xA;  Byte 7 ║ Keycode #6                                                      ║&#xA;         ╚═════════════════════════════════════════════════════════════════╝&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Thank you, &lt;a href=&quot;https://www.tablesgenerator.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;tablesgenerator.com&lt;/a&gt; and &lt;a href=&quot;https://www.vim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vim&lt;/a&gt; editing commands.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this does not constrain USB HID to only 256 keycodes. (Though the X11 input event protocol did bake in such a limitation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;USB HID Usage Tables&lt;/a&gt; define key codes 0xA5-0xAF and 0xE8-0xFFFF in the Keyboard table as Reserved and some devices, such as the ATi Remote Wonder II, have buttons from other tables such as Channel Down/Up which get &lt;a href=&quot;https://www.mythtv.org/wiki/ATI_Remote_Wonder_II#Appendix_C_-_ati_remote2_scancodes&quot; rel=&quot;nofollow noreferrer&quot;&gt;mapped&lt;/a&gt; to key codes above 255 by the Linux driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm unsure whether these keys require switching away from the boot protocol to access or if there's an option I missed to switch the boot protocol into a mode which supports three 16-bit key codes rather than six 8-bit key codes.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2020-05-02T19:19:42.893" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14646" PostTypeId="2" ParentId="14568" CreationDate="2020-05-02T19:28:26.537" Score="0" Body="&lt;p&gt;I'll give you a brief description of the 6502 in similar terms:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can access 64KB of memory (16-bit addresses) on an 8-bit data bus.&lt;/li&gt;&#xA;&lt;li&gt;13 distinct ALU operations, plus load, store and branch, each with several addressing modes.  This maps to a couple of hundred opcodes, depending on which version of the 6502 you consider.&lt;/li&gt;&#xA;&lt;li&gt;Subroutines and Interrupts (both maskable and not).&lt;/li&gt;&#xA;&lt;li&gt;Six status flags: Negative, oVerflow, Decimal, Interrupt mask, Zero, Carry.  Four of these are outputs from the ALU, the other two are for controlling the CPU's operation.&lt;/li&gt;&#xA;&lt;li&gt;One accumulator (A) and 2 index registers (X,Y), 8-bits each.  The index registers have limited ALU operations available, and are intended for counting and addressing.&lt;/li&gt;&#xA;&lt;li&gt;I/O is memory mapped.  The CPU can be paused to wait for a slow device.&lt;/li&gt;&#xA;&lt;li&gt;Stack is a 256 byte fixed area of memory.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The 13 ALU operations I'm thinking of are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Add with Carry (ADC)&lt;/li&gt;&#xA;&lt;li&gt;Subtract with Carry (SBC)&lt;/li&gt;&#xA;&lt;li&gt;Arithmetic Compare (CMP)&lt;/li&gt;&#xA;&lt;li&gt;Logical Compare (BIT)&lt;/li&gt;&#xA;&lt;li&gt;Logical AND&lt;/li&gt;&#xA;&lt;li&gt;Logical OR&lt;/li&gt;&#xA;&lt;li&gt;Logical XOR&lt;/li&gt;&#xA;&lt;li&gt;Increment&lt;/li&gt;&#xA;&lt;li&gt;Decrement&lt;/li&gt;&#xA;&lt;li&gt;Shift Left (ASL)&lt;/li&gt;&#xA;&lt;li&gt;Rotate Left (ROL)&lt;/li&gt;&#xA;&lt;li&gt;Shift Right (LSR)&lt;/li&gt;&#xA;&lt;li&gt;Rotate Right (ROR)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The available addressing modes are also important, but I'll simply note that the six principal ALU operations (and LDA/STA) each have access to a common set of at least 8 addressing modes, including indirect and indexed modes.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-05-02T19:33:31.823" LastActivityDate="2020-05-02T19:33:31.823" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14647" PostTypeId="1" CreationDate="2020-05-02T20:45:23.170" Score="10" ViewCount="483" Body="&lt;p&gt;I would guess the compiler was primarily a modification of Borland's Turbo Pascal, while the Integrated Development Environment and Visual Component Library required a lot more development from scratch.  I haven't been able to find any descriptions of how much time and how many people were required to finish Delphi version 1.  Does anyone know?&lt;/p&gt;&#xA;" OwnerUserId="17990" LastEditorUserId="15334" LastEditDate="2020-12-19T20:45:10.487" LastActivityDate="2020-12-19T20:45:10.487" Title="How much time and how many people were required to develop Delphi version 1?" Tags="&lt;history&gt;&lt;software&gt;&lt;compilers&gt;&lt;pascal&gt;&lt;borland&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14648" PostTypeId="1" CreationDate="2020-05-02T22:23:24.710" Score="3" ViewCount="336" Body="&lt;p&gt;In Super Mario Bros, the screen automatically starts scrolling once you are past X position 112. However, a strategy employed by many speedrunners of the game during level 4-2 is the &quot;backwards bump method&quot;, which can push you forward several pixels. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PskXx.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PskXx.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This image is of 4-2, and uses a ROM hack that displays Mario's X position where the time usually is. Notice that it moves up and then locks at 112, even though Mario is still clearly moving forward. That's because the game was programmed to start scrolling once Mario's X position reaches 112. But watch what happens in the next image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hp21E.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hp21E.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This image uses the same ROM hack as before, and is also of 4-2, but this time, Mario's X position spikes to 120. What the player is doing is he's running into a wall, briefly tapping left to turn around, and brushing on the side of the wall while jumping to get over it. Normally you will move between 7 and 10 pixels forward, and the reason speedrunners use this is to access the wrong warp later in the level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why does this work? Why does brushing on a wall while facing the opposite direction push Mario forward several pixels? And why does it push Mario forward between 7 and 10?&lt;/p&gt;&#xA;" OwnerUserId="17968" LastActivityDate="2020-05-02T23:53:09.853" Title="How does the &quot;backwards bump method&quot; of SMB work?" Tags="&lt;gaming&gt;&lt;nes&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14649" PostTypeId="1" CreationDate="2020-05-02T23:24:55.490" Score="0" ViewCount="361" Body="&lt;p&gt;I am using Windows XP with an old accounting app, that will only back&#xA;up to a ‘3.5 inch’ floppy disk. The backup requires a second disk to&#xA;complete the job – a pain. Would an Extended Density 2880 KiB floppy (if I can find it) work in that drive?&lt;/p&gt;&#xA;" OwnerUserId="17991" LastEditorUserId="15334" LastEditDate="2020-12-07T18:39:51.393" LastActivityDate="2020-12-07T18:39:51.393" Title="Can I use a 2880 KiB ED floppy disk in a drive that uses the standard 1440 KiB HD disk?" Tags="&lt;floppy-disk&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14650" PostTypeId="2" ParentId="14649" CreationDate="2020-05-02T23:30:45.640" Score="2" Body="&lt;p&gt;If the drive is described as a 1.44MB drive, it's not going to be able to write a 2.88MB disk at 2.88MB. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you can reformat a 2.88MB disk down to 1.44MB, but I think that's not what you're asking.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-05-02T23:30:45.640" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14651" PostTypeId="2" ParentId="14642" CreationDate="2020-05-02T23:39:59.500" Score="2" Body="&lt;p&gt;Many early microprocessors take multiple cycles per memory operation not because they are microcoded, but because they have limited ALU resources, and because they can't start computing something until they've received the values to be computed.  The Z80 has a 16-bit increment/decrement unit and a 4-bit general-purpose ALU.  The 6502 has a program-counter increment and an 8-bit ALU.  The CDP 1802 has an increment-decrement unit that operates on 16-bit registers (it might operate two bits at a time; I'm not sure) and a 1-bit general-purpose ALU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6502, for example, has one 8-bit ALU, and requires that on every memory operation, each half of the address bus has either be determined based upon information that was available before the start of the previous cycle, or else be directly copied from the value received on the data bus during the last cycle.  When the CPU is fetching an opcode, it has no way of knowing whether it might need anything other than the byte immediately following it, so it may as well start fetching the next byte.  When the 6502 executes a branch, it won't have the information needed to compute the branch target until the end of the second cycle.  Since the branch target won't be available at the start of the third cycle, the CPU won't be able to fetch code from there.  If the 6502 had a 16-bit ALU, it could consistently fetch the instruction following a taken branch with only one wasted cycle, but the 8-bit ALU makes it necessary to compute the LSB during the third cycle, and then compute either PC MSB+1 or PC MSB-1 during the cycle after that while it fetches a byte using the old MSB and computed LSB.  If it turned out that the branch didn't cross a page, the fetched byte can become the new opcode.  Otherwise the fetched byte will be discarded and another byte fetched using the re-computed MSB.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-05-02T23:39:59.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14652" PostTypeId="2" ParentId="14648" CreationDate="2020-05-02T23:53:09.853" Score="1" Body="&lt;p&gt;I think what's going on is that Mario's sprite consists of two pieces, 8 pixels apart.  Mario's &quot;position&quot; is that of the sprite representing the front half of his body.  When Mario is facing to the right, the front sprite is shown, non-reflected, at his position and the other sprite is shown, also non-reflected, 8 pixels to the left.  When facing left, each sprite is individually mirror-imaged by the display hardware, and I would guess the programmers thought it simpler to always have one sprite at Mario's position and the other at +/- 8 than to have Mario's position be that of the leftmost sprite (which might be first or second) and have the other sprite be 8 pixels to the right of that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Mario switches direction, that requires adding or subtracting 8 from his position.  That is done separately, however, from logic which will move Mario to the right a pixel by either incrementing his position if it's less than 112, or incrementing the scroll position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, what's happening is that when Mario is facing left, the position of the front of his body is 8 pixels to the left of the position of the right side of his body, while when he's facing right, the same sprite is used for the &quot;front half&quot; as his body as the &quot;right half&quot; [since they're the same side].  Switching directions requires that the front half of Mario's body move left or right 8 pixels, but that's done without checking the scroll position.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-05-02T23:53:09.853" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14653" PostTypeId="2" ParentId="14649" CreationDate="2020-05-02T23:59:01.777" Score="9" Body="&lt;p&gt;The 2.88MB &quot;extended density&quot; disks have a different type of coating on them, which normal &quot;high density&quot; drives are not optimised to read or write.  So you might not reliably be able to format it even for 1.44MB.  I believe these disks were never common and are now decidedly rare, as are the drives to work with them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 1.44MB drive is also not designed to operate at the higher data speeds of a 2.88MB format, and a standard disk controller cannot work with the 2.88MB format either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not certain, but your accounting software might accept an LS-120 drive as a backup medium; it is also capable of handling normal floppy disks at their normal capacity.  I think LS-120 might also be easier to find than 2.88MB disks and drives, as well as being vastly more capable.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-05-02T23:59:01.777" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14655" PostTypeId="1" AcceptedAnswerId="14661" CreationDate="2020-05-03T02:20:18.483" Score="23" ViewCount="4139" Body="&lt;p&gt;On early versions of many 8-bit computers like the Apple II, Spectrum, and even the IBM PC, there was no sound hardware other than the simple &quot;beeper&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programmers made sound by hitting a hardware register that pulsed the beeper on and off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You changed the note of the beep (the tone or pitch) by changing the frequency of the pulses, which simply meant how fast or slow you hit that hardware register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But was it also possible to control the volume on these primitive systems?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was watching a YouTube channel of a guy programming many retro machines all in assembly with different CPUs and hardware, and at one point he mentions he doesn't know how to achieve volume control. I can't remember if I ever did it back in the day. But as the beeper wasn't amplified we always wanted it loud, so maybe we just never focused on volume?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently, in the time after I'd moved from the Speccy to the Amiga, a guy named Tim Follin coded up various &lt;a href=&quot;https://www.youtube.com/watch?v=T42WuUpBuHE&quot; rel=&quot;noreferrer&quot;&gt;polyphonic Speccy beeper music&lt;/a&gt; routines. This is beyond my understanding to know if those controlled the music volume though.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-03T12:29:46.827" LastActivityDate="2020-05-05T09:10:37.190" Title="Was it possible programmatically to manipulate the volume as well as the pitch on computers with no sound chip?" Tags="&lt;hardware&gt;&lt;programming&gt;&lt;sound&gt;" AnswerCount="7" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14656" PostTypeId="2" ParentId="14655" CreationDate="2020-05-03T03:20:23.740" Score="19" Body="&lt;p&gt;I think the best you could do in some cases was alter the pulse width of the basic square wave the hardware could produce.  That wouldn't really change the volume, but you could make the tone &quot;thinner&quot; or &quot;fatter&quot; at the same frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One advanced technique used by some composers and sound drivers was &quot;dithering&quot;, in which high-frequency random noise was added to a higher-resolution sample to make it audible at 1-bit resolution.  It's a similar technique to image dithering.  Another was to XOR several tones together to allow for a degree of polyphony.  But there was still no actual volume control; the quieter the original sample, the noisier and less distinct a dithered version would be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were a number of three-tone-plus-noise sound chips commonly used in 8-bit micros which were also limited to square-wave tones, but could alter the volume and implement an &lt;a href=&quot;https://en.wikipedia.org/wiki/ADSR&quot; rel=&quot;noreferrer&quot;&gt;ADSR&lt;/a&gt; curve.  If you could get any sound out of them at all, you probably knew some way to set the volume.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-05-03T04:26:09.363" LastActivityDate="2020-05-03T04:26:09.363" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14657" PostTypeId="1" AcceptedAnswerId="14658" CreationDate="2020-05-03T04:30:05.777" Score="0" ViewCount="159" Body="&lt;p&gt;I mostly used 3½″ floppies back in the day but I also used 5¼″ floppies to some extent on Apple II's and TRS-80's. I was never exposed to 3″ floppy disks as used mainly on Amstrad microcomputers and their Spectrum +3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm familiar with the concepts of single-sided vs double-sided floppies, and single-density vs double-density floppies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in my recent explorations of the Spectrum +3 and its floppy disk formats and their image file formats, I've come across various mentions of &quot;single-track&quot; vs &quot;double-track&quot; and their abbreviations &quot;ST&quot; and &quot;DT&quot;. But googling for more information on these terms, I haven't been able to find anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this double-track thing something specific to the Amstrad 3″ floppy drives? And what is it and how does it work? Was it a dead-end technology? Did it require different disks? Did it double the disk capacity?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-05-03T04:55:44.263" Title="What did &quot;double track&quot; meaning in relation to floppy disks?" Tags="&lt;floppy-disk&gt;&lt;floppy-drive&gt;&lt;terminology&gt;&lt;spectrum-plus-3&gt;&lt;amstrad&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14658" PostTypeId="2" ParentId="14657" CreationDate="2020-05-03T04:55:44.263" Score="2" Body="&lt;p&gt;It’s just nomenclature for 40-track (‘single’) versus 80-track (‘double’) drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It’s not 3”-specific, e.g. &lt;a href=&quot;http://mms89.durgadas.com/mms89z37.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here is a reference using the same terminology for 5.25” drives&lt;/a&gt;; 3” drives don’t do anything differently from 3.5” or 5.25” drives, and use regular Shugart signalling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original PCWs, the CPC and the Spectrum all used 40-track drives; later PCWs used 80-track drives.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-05-03T04:55:44.263" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14659" PostTypeId="2" ParentId="14655" CreationDate="2020-05-03T10:49:13.180" Score="12" Body="&lt;p&gt;Essentially, you implement a 1-bit DAC in software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are (at least) two ways to do a 1-bit DAC. For tweaking the brightness of an LED on e.g. an Arduino, one can use &lt;a href=&quot;https://en.wikipedia.org/wiki/Pulse-width_modulation&quot; rel=&quot;noreferrer&quot;&gt;pulse-width modulation&lt;/a&gt; (PWM) using the hardware support. This does not produce the best-quality output, for which &lt;a href=&quot;https://en.wikipedia.org/wiki/Delta-sigma_modulation&quot; rel=&quot;noreferrer&quot;&gt;delta-sigma modulation&lt;/a&gt; is preferable. It's about the same amount of code either way if you don't have hardware PWM, so one may as well choose the better one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's harder to reason about why delta-sigma works compared to PWM, which is not helped by Wikipedia describing it in mathematical and electrical-engineering terms which can feel a bit intimidating to programmers, but a sawtooth wave which gets steeper and resets more frequently based on a higher input voltage is equivalent to a register to which one continually adds the input value and overflows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may wish to visualise this by looking at a multiplication table (&lt;a href=&quot;https://en.wikipedia.org/wiki/Multiplication_table&quot; rel=&quot;noreferrer&quot;&gt;e.g. this one on Wikipedia&lt;/a&gt;). Look down the columns and you will see that there is a carry from the ones to the tens column more often as the number being multiplied (which I'll call &quot;N&quot;) gets larger, and further that multiplication by ten causes it to overflow N times. Thus there is a direct correlation between the input value and the number of overflows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the trick is to get a sample from somewhere — whether a table in memory or generated in real-time — then add the sample to a register and copy the carry bit to the speaker in a tight loop. You will also need an outer loop to feed it new samples periodically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On something like the ZX Spectrum or a simple Arduino circuit where the sound hardware is a bit-banged GPIO pin, we're sorted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On machines with a proper sound chip, the problem becomes how to control the output like a GPIO pin. For something like the PC speaker, one can set a very high-frequency beep which is toggled on and off. The beep is mixed with the delta-sigma output which may cause &lt;a href=&quot;https://en.wikipedia.org/wiki/Beat_(acoustics)&quot; rel=&quot;noreferrer&quot;&gt;beating&lt;/a&gt; that sounds bad, so some tweaking to the beep frequency and/or the tightness of the loop will be required to make the beat inaudible or at least tolerable. On more complex sound chips like the C64's SID, further deviousness is required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Application of this technique to the &lt;em&gt;video&lt;/em&gt; output may even produce plausible sampled sound on a ZX81 which is otherwise mute (or rather, generates a nasty 50Hz buzz corresponding to the video output so pretty much everybody turns the TV volume to zero). It may well have already been done, otherwise consider this a programming challenge :)&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2020-05-03T10:49:13.180" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14660" PostTypeId="2" ParentId="14655" CreationDate="2020-05-03T13:07:22.593" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;“Even though the amplitude is a constant 1-bit waveform, the narrower pulses provide a way of varying volume. These narrower pulses have incrementally less power &lt;em&gt;overall&lt;/em&gt; to the listener; as the duty cycle approaches 0% (or, by inversion, 100%) the perceptual volume decreases with it, even though the amplitude remains the same. This effect is not a consequence of the reduction of the pulsing signal's actual, electronic, or kinetic power. Instead, the reduction in volume is a product of &lt;em&gt;bandlimiting&lt;/em&gt;”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt; — Troise, Blake. &quot;&lt;a href=&quot;https://online.ucpress.edu/jsmg/article/1/1/44/2337/The-1-Bit-InstrumentThe-Fundamentals-of-1-Bit&quot; rel=&quot;noreferrer&quot;&gt;The 1-Bit Instrument: The Fundamentals of 1-Bit Synthesis, Their Implementational Implications, and Instrumental Possibilities.&lt;/a&gt;&quot; &lt;em&gt;Journal of Sound and Music in Games&lt;/em&gt; 1.1 (2020): 44-74.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Blake Troise is better known in the chiptune scene as &lt;strong&gt;PROTODOME&lt;/strong&gt;, and has produced some impressive multi-channel 1-bit/PWM work, including the album &lt;a href=&quot;https://protodome.bandcamp.com/album/4000ad&quot; rel=&quot;noreferrer&quot;&gt;4000AD&lt;/a&gt;, which plays directly from a single 8-bit &lt;a href=&quot;https://github.com/protodomemusic/mmml&quot; rel=&quot;noreferrer&quot;&gt;microcontroller&lt;/a&gt; with all source included.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-05-03T13:07:22.593" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14661" PostTypeId="2" ParentId="14655" CreationDate="2020-05-03T13:26:05.550" Score="32" Body="&lt;p&gt;Yes, it's possible to effectively change the volume if you're using Pulse Width Modulation (PWM), although the timbre of the note is also affected depending on playback hardware and psycho-acoustics. &lt;a href=&quot;https://protodome.com/&quot; rel=&quot;noreferrer&quot;&gt;Dr. Blake Troise&lt;/a&gt;, who makes chiptunes under the moniker &lt;a href=&quot;https://protodome.bandcamp.com/&quot; rel=&quot;noreferrer&quot;&gt;Protodome&lt;/a&gt;, describes how in a recent paper:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://online.ucpress.edu/jsmg/article/1/1/44/2337/The-1-Bit-InstrumentThe-Fundamentals-of-1-Bit&quot; rel=&quot;noreferrer&quot;&gt;The 1-Bit Instrument: The Fundamentals of 1-Bit Synthesis, Their Implementational Implications, and Instrumental Possibilities&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Even though the amplitude is a constant 1-bit waveform, the narrower&#xA;  pulses provide a way of varying volume. These narrower pulses have&#xA;  incrementally less power overall to the listener; as the duty cycle&#xA;  approaches 0% (or, by inversion, 100%) the perceptual volume decreases&#xA;  with it, even though the amplitude remains the same. This effect is&#xA;  not a consequence of the reduction of the pulsing signal's actual,&#xA;  electronic, or kinetic power. Instead, the reduction in volume is a&#xA;  product of bandlimiting—the effect whereby frequencies beyond a&#xA;  particular value are not heard. [...] Thinner pulses are constructed&#xA;  from more powerful high-frequency harmonics than lower ones.&#xA;  Accordingly, as the pulses get thinner, with extremely small or&#xA;  extremely large duty cycles, these higher frequencies increasingly&#xA;  fall outside the limits of what can be replicated by the speaker.&#xA;  Since these elements are not present, the result is a reduction of the&#xA;  waveform's overall power.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Some of the earlier uses of PWM on the platforms you mention were programs from around 1980 by &lt;a href=&quot;https://arachnoid.com/electric_duet/index.html&quot; rel=&quot;noreferrer&quot;&gt;Paul Lutus&lt;/a&gt; including Electric Duet. He states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Decreasing the duty cycle of the generating waveform increases the&#xA;  amplitude of high-frequency components while reducing the overall&#xA;  volume.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There were routines published in a few Apple II magazines that made use of this volume technique. Here's one in &lt;a href=&quot;https://www.nibblemagazine.com/new_page_2.htm&quot; rel=&quot;noreferrer&quot;&gt;Nibble magazine&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Software Volume Control   Goetz, Philip   November 1984&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's called VOLUMETONES.DEMO on &lt;a href=&quot;https://www.nibblemagazine.com/nibble_disks.htm&quot; rel=&quot;noreferrer&quot;&gt;disk NIB22B.dsk&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably the ultimate evolution of Apple II 1-bit audio are projects written using &lt;a href=&quot;http://michaeljmahon.com/&quot; rel=&quot;noreferrer&quot;&gt;Michael Mahon's&lt;/a&gt; DAC522, including &lt;a href=&quot;http://michaeljmahon.com/RTSynth.html&quot; rel=&quot;noreferrer&quot;&gt;RT.SYNTH&lt;/a&gt; and &lt;a href=&quot;https://8bitweapon.com/store/&quot; rel=&quot;noreferrer&quot;&gt;Digital Music Synthesizer &amp;amp; Drummer&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;DAC522 is a software digital-to-analog converter for the Apple II that&#xA;  plays a stream of 11.025kHz sound samples through the 1-bit Apple&#xA;  speaker port using a pulse-width modulated (PWM) stream at a pulse&#xA;  rate of 22.05kHz, or two pulses per sample. The 22kHz pulse rate&#xA;  renders the pulses themselves virtually inaudible to human ears, but&#xA;  the average output, changed by varying the pulse width in proportion&#xA;  to sample values, reproduces the sampled sound to a precision of 5&#xA;  bits.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Regarding PWM and pitch, although RT.SYNTH is single voice, its instruments are resampled dynamically to any frequency and shaped with an envelope. Here's an overview:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The fundamental problem a music synthesizer must address is the&#xA;  production of notes of many frequencies and arbitrary durations having&#xA;  specified waveshapes (voices). Storing all the needed combinations in&#xA;  limited memory is not practical.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;A workable solution is to store each waveshape needed as a&#xA;  single-frequency sample, then resample this waveshape on the fly to&#xA;  create any desired frequency.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Most instrument sounds change as a note sounds. For example, many&#xA;  sounds have an &quot;attack&quot; that sounds different from the rest of the&#xA;  note. And many instrument sounds change in amplitude as a note is&#xA;  held, usually decaying in amplitude or changing in &quot;timbre&quot; or&#xA;  spectral composition. Synthesis of notes with changes appropriate to&#xA;  particular instruments, therefore, requires that the synthesized&#xA;  waveform change as a function of the length of time the note is&#xA;  played.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;RT.SYNTH performs all the calculations required to carry out these&#xA;  tasks while it is generating the pulses corresponding to the&#xA;  previously calculated sample.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2020-05-04T13:47:21.943" LastActivityDate="2020-05-04T13:47:21.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14662" PostTypeId="1" CreationDate="2020-05-03T13:38:00.147" Score="4" ViewCount="128" Body="&lt;p&gt;In the period of about 1987-1988 I downloaded a small compiled program from a BBS in the 512 area. I don't know anything about the author but the file was named 'cyclops.' I can't be sure if it had a .com or .exe extension. Possibly it could have been named 'cycleops.' I know it's file size was exactly 255 bytes. It was a TSR program that animated the DOS cursor making it appear as a single horizontal line slowly rising and falling in place of the blinking cursor. People who saw it often said it made them feel dizzy to watch it. Can anyone direct me on where I might find this again? I have made several search attempts that yielded no clues.&lt;/p&gt;&#xA;" OwnerUserId="17994" LastActivityDate="2020-05-03T13:38:00.147" Title="Where to find ancient wavy cursor program 'cyclops'?" Tags="&lt;bbs&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14663" PostTypeId="1" CreationDate="2020-05-03T15:42:18.820" Score="12" ViewCount="661" Body="&lt;p&gt;The PC DOS kernel is stored in files named &lt;code&gt;IBMBIO.COM&lt;/code&gt; and &lt;code&gt;IBMDOS.COM&lt;/code&gt;. Although they have the &lt;code&gt;COM&lt;/code&gt; extension like executable files, neither of these files could actually be run from the command line, and attempting to do so would crash the system. To prevent such crashes, the kernel files were given ‘hidden’ and ‘system’ attributes (apparently specifically invented for the purpose), so that the command interpreter would not try to execute them. (In some versions of DR-DOS, this was instead solved by simply making the files print version information and exit when launched from the command line.)&lt;/p&gt;&#xA;&lt;p&gt;Given that those files are not regular executables, why were they given the &lt;code&gt;COM&lt;/code&gt; extension in the first place? Why go to the trouble of inventing ‘hidden’ and ‘system’ attributes? Why not instead give them the &lt;code&gt;SYS&lt;/code&gt; extension, like MS-DOS, (ealier versions of) DR DOS and even 86-DOS did?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-09-05T06:52:47.253" LastActivityDate="2020-09-05T06:52:47.253" Title="Why do PC DOS kernel files have the COM extension, even though they are not executable as COM files?" Tags="&lt;history&gt;&lt;design-choices&gt;&lt;executables&gt;&lt;pc-dos&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14664" PostTypeId="2" ParentId="2361" CreationDate="2020-05-03T16:00:28.260" Score="1" Body="&lt;p&gt;I am far from C128 expert of any level (HW or SW), but I think one (expensive) change could solve all those speed issues. Certainly it is not possible afterwards, but could be a design route to speed up the machine, and would keep C64 compatibility at the same time, whil Z80 could run in full 4 Mhz mode (though it does not solve the several layers and BIOS routing / slow screen update). As it was not mentioned beforehand, I write down the idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reading through the descriptions and time diagrams, VIC-II need to be in 1MHz mode to update the DRAMs. And because of the 1MHz of VIC-II, the Z80 and the 8502 need to be is slow mode too. &#xA; But what if there would be no DRAM in the machine, just SRAM, requires no frequent refreshes, and does not degrade content (the same as the color RAM on C64)? In that case the VIC-II 1MHz mode could be cancelled in C128 and Z80 mode, or it could run continuously in 2MHz mode. Certainly SRAMs were (and still) more expensive than DRAMs, but the speed is there.&#xA; As my current C=16 64K memory expansion is based on SRAMs, I though I let you know this idea.&lt;/p&gt;&#xA;" OwnerUserId="17997" LastActivityDate="2020-05-03T16:00:28.260" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14665" PostTypeId="2" ParentId="2399" CreationDate="2020-05-03T20:05:22.810" Score="2" Body="&lt;p&gt;There is some information what the BBC did at that time with BBC Micros in the archive of the Computer Literacy Project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Subtitling, there they show a glimpse of a BBC Micro with a board to sync it with the equipment in the studio:&#xA;&lt;a href=&quot;https://clp.bbcrewind.co.uk/20508b5e272e398cf9579181e594e8e2&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://clp.bbcrewind.co.uk/20508b5e272e398cf9579181e594e8e2&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can have a look at their programs running and even their source code:&#xA;&lt;a href=&quot;https://clp.bbcrewind.co.uk/jsbeeb/index.html?disc1=CLP0038.ssd&amp;amp;loadBasic=%2Fbeeb%2Floader%2F20508b5e-272e-398c-f957-9181e594e8e2&amp;amp;autorun=1&amp;amp;model=Master&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://clp.bbcrewind.co.uk/jsbeeb/index.html?disc1=CLP0038.ssd&amp;amp;loadBasic=%2Fbeeb%2Floader%2F20508b5e-272e-398c-f957-9181e594e8e2&amp;amp;autorun=1&amp;amp;model=Master&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or the end titles of Making Most of the Micros:&#xA;&lt;a href=&quot;https://clp.bbcrewind.co.uk/jsbeeb/index.html?disc1=CLP0038.ssd&amp;amp;loadBasic=%2Fbeeb%2Floader%2F3e5b356d-cf22-09bd-ba89-0ec4287f32dd&amp;amp;autorun=1&amp;amp;model=Master&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://clp.bbcrewind.co.uk/jsbeeb/index.html?disc1=CLP0038.ssd&amp;amp;loadBasic=%2Fbeeb%2Floader%2F3e5b356d-cf22-09bd-ba89-0ec4287f32dd&amp;amp;autorun=1&amp;amp;model=Master&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17999" LastActivityDate="2020-05-03T20:05:22.810" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14666" PostTypeId="1" CreationDate="2020-05-03T23:18:10.890" Score="8" ViewCount="585" Body="&lt;p&gt;I used to use a CGA emulator (don't remember which one it was), that could show some gfx even in EGA/VGA-only games (when I selected EGA mode). I remember my frustration seeing some garbled graphics and wanting to fix the emulator, but I had no source code then. Obviously some level of emulation is/was possible.&lt;/p&gt;&#xA;" OwnerUserId="18001" LastEditorUserId="18001" LastEditDate="2020-05-04T00:25:02.033" LastActivityDate="2020-05-05T01:58:10.553" Title="Was there ever a functional EGA emulator for the Hercules graphics card?" Tags="&lt;graphics&gt;&lt;ibm-pc&gt;&lt;emulation&gt;&lt;cga&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14667" PostTypeId="2" ParentId="14655" CreationDate="2020-05-04T03:22:13.427" Score="1" Body="&lt;p&gt;You totally had control of the pitch of the beeper from pre-programmed registers but no volume control of beepers without using tricks. Note that 99.9% of the early digital CD chips had no digital control of the volume and playback speed, it was a potentiometer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For c64, the volume register design flaw in the original 6581 chip was used to play back samples. Every time the volume register value was altered, an audible click could be heard. By changing the first 4 bits of the register at $D418 fast enough, samples can be played back with rates up to some kHz (depends on the code and what else uses rastertime) with 4 bit resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trouble was the 4/16/32 kb of ram, 64 kilobytes of ram for the C64. A 2 bit audio file of one second is about 8kb. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Computer Music Melodian was the first professional digital sampler which came out in 1976 for 60,000 dollars and it was 12 bit, it's from the same time as the apple II... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Fairlight CMI from 1979 also cost 60,000 dollars and it was 16 bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can imagine what kind of audio a 500 dollar computer had in 1975-1980. 1 bit. The c64 samples actually hacked the volume control to play samples. &lt;/p&gt;&#xA;" OwnerUserId="18004" LastEditorUserId="18004" LastEditDate="2020-05-04T10:57:46.250" LastActivityDate="2020-05-04T10:57:46.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14668" PostTypeId="2" ParentId="14666" CreationDate="2020-05-04T05:45:39.890" Score="15" Body="&lt;p&gt;There can not be an EGA emulator for many reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Emulating CGA works, because in graphics mode, Hercules has a 64k frame buffer at address B0000h - BFFFFh, and for a single page, only 32k from address B0000h is displayed. The CGA has a 16k frame buffer at B8000h - BBFFFh, which fits inside the frame buffer provided by the Hercules card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore what the CGA emulator TSR has to do is to read the CGA area, and do it's best to convert large 4-bit color pixels into small 1-bit pixels by dithering, and write to the active Hercules area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The EGA has it's graphics mode frame buffer in the A0000h-AFFFFh area, for which the Hercules card does not provide the memory, so that alone makes it impossible to emulate EGA with Hercules. And because Hercules card by default is in monochrome text mode and has no way of mapping to EGA/VGA addresses, it can actually co-exist in a system with a EGA or VGA card.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-05-04T05:45:39.890" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14669" PostTypeId="2" ParentId="14404" CreationDate="2020-05-04T11:29:19.313" Score="3" Body="&lt;p&gt;This is one of those &quot;it depends&quot; answers. Source, I used to work as a network engineer, focusing primarily on &quot;the internal backbone&quot; and &quot;dialup termination&quot; at an ISP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We would, by default, provide a publicly routable IP based on the POP you dialled into (assigned by the chassis your call terminated in).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We also had &quot;single statically allocated IP&quot; or &quot;small statically allocated netblock&quot; as an up-sell service (assigned by RADIUS as you authenticated).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other ISPs would allocate a non-public IP, relying on proxies and NAT to provide internet connectivity.&lt;/p&gt;&#xA;" OwnerUserId="3842" LastActivityDate="2020-05-04T11:29:19.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14670" PostTypeId="1" CreationDate="2020-05-04T14:15:07.940" Score="23" ViewCount="5134" Body="&lt;p&gt;In the early 1990s Microsoft introduced COM (&lt;a href=&quot;https://en.wikipedia.org/wiki/Component_Object_Model&quot; rel=&quot;nofollow noreferrer&quot;&gt;Component Object Model)&lt;/a&gt; which was widely used in various programming environments including Visual Basic 5 &amp;amp; 6. Also known as ActiveX (or at least if COM &amp;amp; ActiveX are not the same thing they are often conflated).&lt;/p&gt;&#xA;&lt;p&gt;COM generally &lt;strong&gt;required&lt;/strong&gt; adding information in the Windows Registry so that a program would be able to find &amp;amp; use code packaged into a DLL. e.g., you write a class and compile it into a DLL. But your program wouldn't link directly with that DLL (as was typical beforehand), instead the DLL would be &lt;em&gt;registered&lt;/em&gt; on the computer which meant: references to the DLL would be stored in the Windows Registry with a unique ID. Later when a program wanted to use something from that DLL it would look in the Registry for the ID and hopefully find the required DLL from there.&lt;/p&gt;&#xA;&lt;p&gt;I can certainly imagine that there are scenarios where such referential distancing was useful. However for everyday plain vanilla programs this additional complexity (IMO) turned out to be problematic because the registration information was so easily broken in various circumstances. It also introduced an additional arcane layer which impeded debugging. This motivates my question, because I feel that this would have been an obvious drawback at the time. And yet the designers opted for imposing extra complexity, presumably for a good reason.&lt;/p&gt;&#xA;&lt;p&gt;Note -- later on, in Windows XP IIRC Microsoft provided an additional file-based mechanism to tie together a program and its COM DLL references that did not require the Registry at all.  So it apparently was not strictly necessary to use the Registry-based approach.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Is there any record of the design decisions to make COM work only through the Registry?&lt;/strong&gt; Of why the more standard simpler approaches of direct linking (static or dynamic) were not used?&lt;/p&gt;&#xA;" OwnerUserId="11795" LastEditorUserId="15334" LastEditDate="2021-01-22T13:16:53.697" LastActivityDate="2021-01-22T14:06:49.783" Title="Why did the original design of COM on Windows rely on the Registry?" Tags="&lt;history&gt;&lt;windows&gt;&lt;design-choices&gt;" AnswerCount="10" CommentCount="13" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14671" PostTypeId="2" ParentId="14670" CreationDate="2020-05-04T14:39:22.487" Score="34" Body="&lt;p&gt;At that time, developers at Microsoft were still dreaming the dream of version independent management of libraries, so newer, more powerful libraries could replace older, less powerful or buggy libraries - and best of all, deduplication of code. Think how bad it is today, there were dozens of different Visual C++ runtime libraries are installed on each machine - and now imagine each and every application would bring their own copy of the same library and store it somewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To allow systemwide management of libraries, one needs a unique directory to find linkage information&amp;mdash;which can be searched to find relationships to be updated and, in turn, can be changed to integrate replacements on a live system. Application-specific management can't provide this. It would not only limit reuse of DLLs (the primary reason to have them at all), but create masses of duplicates. The prior use of proprietary .INI files (which are how applications stored settings before the Registry) to store such information did create much duplication and undefined behaviour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's always important to keep in mind, that &lt;em&gt;your&lt;/em&gt; application is neither the only one on the system nor the most important one. It's just that developers &lt;em&gt;acted&lt;/em&gt; like it was. Much like back in the early, home computer days, when 'the' application was the single ruler of everything, including the file system. Whoever had the 'chance' of managing office PCs in a corporate setting with quite diverging jobs will still curl up and whimper for the rest of the day when remembering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the introduction of the Registry was already a great step forward for Windows in general, it was crucial for COM. COM was intended as the great game changer, allowing reuse of components as often as possible. In this respect, the Registry can be seen as the database of an object broker, needed for runtime linking (late-binding) of services. COM was designed to be quite dynamic; this is something that static linking can't provide. Private management is the absolute opposite of reusability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, the Registry allowed far more flexible management than throwing these libraries into some DLL path, as was previously done during times of private, application-specific management. From an application point of view, a unique path where the library was 'located' could be used, while the physical location within the file system could just as easily be aliases (which could be handled independently and seamlessly).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: It's about reusability and management.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-07T19:28:00.130" LastActivityDate="2020-05-07T19:28:00.130" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="14672" PostTypeId="2" ParentId="14670" CreationDate="2020-05-04T16:04:24.043" Score="10" Body="&lt;p&gt;Microsoft's COM library storage was a poor use-case, and an even poorer implementation, of what was all the rage in academic computing research around that time - &lt;a href=&quot;https://en.wikipedia.org/wiki/Object_storage&quot; rel=&quot;noreferrer&quot;&gt;Object Storage&lt;/a&gt;. As you have noted, it sounds good in principle, but creates a host of new problems in real-world usage. This resulted in it being somewhat grotesque, in that it provided a &quot;cure&quot; that was worse than the disease.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should be noted that all the major players experimented with adding object-oriented database features to their filesystems, and it continues until this day. As the volume of data increases, the need for a workable system of metadata to help manage it all also rises. The most successful use-cases are the ones that have developed recently in the Cloud Computing domain, such as AWS S3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;COM was simply an academic experiment turned too early into a shipping product. Naturally, that helped shape the future since it provided a &quot;learning opportunity&quot;. Unfortunately much at the expense of hapless users who didn't know they were investing in an experiment.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-05-04T17:56:47.733" LastActivityDate="2020-05-04T17:56:47.733" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14674" PostTypeId="2" ParentId="14663" CreationDate="2020-05-04T23:13:32.960" Score="9" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Given that those files are not regular executables, why were they given the COM extension in the first place?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They are executable files. They are loadable binary images. In so far they are exactly like COM files, except, when loaded, they are not loaded at offset 0100h, after a prepared PSP, and started with CS:IP as segment:0100h, but segment:0000h. Programming/assembling sources works exactly like with a COM program, except were a 'regular' COM file source starts with an &lt;code&gt;ORG 0100h&lt;/code&gt; directrive, BIOS and DOS code is assembled with &lt;code&gt;ORG 0000h&lt;/code&gt; instead (*1).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;[Insert:] Thanks to a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14663/why-do-pc-dos-kernel-files-have-the-com-extension-even-though-they-are-not-exec/14674#comment48439_14674&quot;&gt;hint by Stephen Kitt&lt;/a&gt; pointing out the avaibility of the original sources, it looks as if 86-DOS really used this, as the &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v1.25/source/IO.ASM&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt; starts like this (line 109):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ORG  0&#xA;PUT  100H&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So while the address base 0000h, the assembler output is moved to 0100h. This means the resulting file may have included some 256 bytes infront. But then again, there must have been some kind of merger utility, as with PC-DOS 1.0 IBMBIO and IBMDOS were not loaded as files, but as one continuous blob of 10 Kib from sector 8 onward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;86-DOS did not care about files at all. The directory was only checkt to see if the entries were there, not to use any of the meta information. It wasn't until PC-DOS 2.0 that the file system really got observed.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So for all development and testing purpose they could be as well assembled as COM files as well. While it doesn't matter for the very first version, as soon as a basic system is bootable, further development and debugging can be done in situ, using the (preloaded) OS environment and debugger. All that is necessary to do so is changing the ORG statement to 0100h before compiling.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why not give them the SYS extension, like MS-DOS and (earlier versions of) DR DOS did?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure, it would have been possible - and would as well have made a lot of sense. Then again, it's always easy to see something as &lt;a href=&quot;https://en.wikipedia.org/wiki/Hindsight_bias&quot; rel=&quot;noreferrer&quot;&gt;obvious in hindsight&lt;/a&gt;. Also, we all know how impossible unsensible users are - who would have thought about them unhiding these files and trying to execute? There is no sane reason to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, I guess the MS-DOS team had to learn this lesson and it took about a year:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;August 1980: &lt;a href=&quot;https://en.wikipedia.org/wiki/Seattle_Computer_Products&quot; rel=&quot;noreferrer&quot;&gt;SCP&lt;/a&gt; ships 86-DOS 0.1&lt;/li&gt;&#xA;&lt;li&gt;September 1980: Microsoft licences 86-DOS for 'some' customer&lt;/li&gt;&#xA;&lt;li&gt;April 1981: SCP finishes and ships 86-DOS 1.0 using the &lt;code&gt;.COM&lt;/code&gt; type&lt;/li&gt;&#xA;&lt;li&gt;August 1981: MS delivers 86-DOS 1.14 as PC-DOS 1.0 to IBM, both using &lt;code&gt;.COM&lt;/code&gt; file types for IBMBIO and IBMDOS (*2)&lt;/li&gt;&#xA;&lt;li&gt;May 1982: (MS/86)-DOS 1.24 is released by IBM as PC-DOS 1.1, both still with &lt;code&gt;.COM&lt;/code&gt; types&lt;/li&gt;&#xA;&lt;li&gt;June 1982: Microsoft released MS-DOS 1.25. The first version to be used with (mostly) PC compatible machines (*3), as well the first version where the &lt;code&gt;.SYS&lt;/code&gt; file type was used.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;IBM never followed that switch, and some manufacturers of compatible systems &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14663/why-do-pc-dos-kernel-files-have-the-com-extension-even-though-they-are-not-exec#comment48419_14663&quot;&gt;seem to have continued&lt;/a&gt; with a &lt;code&gt;.COM&lt;/code&gt; type (&lt;code&gt;IOSYS.COM&lt;/code&gt; and &lt;code&gt;MSDOS.COM&lt;/code&gt; in case of Compaq)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In the end, it's as with many 'why' questions, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14663/why-do-pc-dos-kernel-files-have-the-com-extension-even-though-they-are-not-exec#comment48377_14663&quot;&gt;Another_Dave already mentions&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;Unless the person who named the files shows up here, I don't see how we can get a definitive answer.&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Today many would not care and make it the same, but back then, saving 256 bytes of RAM was a big thing. After all, the first 86-DOS could boot in as little as 12 KiB, leaving space for user code in systems with as little as 16 KiB of RAM. Something the PC no longer supported, as here the BIOS loads the Boot sector to 07C00h (that's 1 Ki below 32 Ki). Thus 32 KiB was the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5289/how-did-an-ibm-5150-with-16kb-ram-work/5290#5290&quot;&gt;minimum system for DOS&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - BTW, the whole wigwag is a bit more complex, as IBMBIO contains two parts:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the machine depended BIOS interface and&lt;/li&gt;&#xA;&lt;li&gt;the machine independent SYSINT code, controlling the boot process.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In case of an IBM PC, the machine dependent BIOS interface is rather small and mostly a collection of device drivers, as it uses the ROM-BIOS. For non IBM machines it contained the whole BIOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - I still got somewhere an original shrinkwrapped DOS 1.25 for &lt;a href=&quot;https://en.wikipedia.org/wiki/Columbia_Data_Products#Publicly_listed_PC-clone_maker&quot; rel=&quot;noreferrer&quot;&gt;Columbia Data Products' MPC&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="5199" LastEditDate="2020-05-07T16:59:52.670" LastActivityDate="2020-05-07T16:59:52.670" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14675" PostTypeId="1" AcceptedAnswerId="14676" CreationDate="2020-05-04T23:45:19.283" Score="11" ViewCount="595" Body="&lt;p&gt;I remember being aware of the Altair 8800 when it made it's mark, but only vaguely.  Lately I found myself wondering what hardware was required for the Altair to get BASIC up and running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to Wikipedia the original 4K BASIC was distributed on cassette and paper tape, so it seems reasonable to expect the user to have one of these mechanisms for loading the interpreter.  But what interface options were available to the early computer enthusiast in 1975?  Did MITS manufacture these cards directly or were there already 3rd party options available?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, wouldn't some kind of RS-232 serial or teletype interface be required? Wikipedia (somewhat cryptically) says &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The finished interpreter, including its own I/O system and line&#xA;  editor,...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;but I'm unclear what this really means.  Was BASIC hard-coded to use a specific memory mapped IO card?  If so, was there really any choice of card?  If not, how did BASIC handle input/output?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2020-05-05T12:29:00.147" Title="What additional hardware was required for BASIC on an Altair 8800?" Tags="&lt;basic&gt;&lt;altair-8800&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14676" PostTypeId="2" ParentId="14675" CreationDate="2020-05-05T00:50:39.963" Score="11" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Lately I found myself wondering what hardware was required for the Altair to get BASIC up and running.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Basically&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cage &lt;/li&gt;&#xA;&lt;li&gt;CPU-Card with 1 KiB RAM&lt;/li&gt;&#xA;&lt;li&gt;4 KiB RAM Card&lt;/li&gt;&#xA;&lt;li&gt;Serial Interface&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To have some space for any user program second 4 Ki card would come handy. And in fact, this is as well the configuration for which BASIC was offered at a lower price:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;75 USD instead of 500 USD when purchased with an Altair computer, an interface board, and 8K of memory&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did MITS manufacture these cards directly or were there already 3rd party options available?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Since the (later) S100 bus was defined with the Altair, it would have needed a psychic to get compatible cards out right away :) So, no, it took some time until others were supplied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://altair.ftldesign.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Old Price lists&lt;/a&gt; offer some insight here - as long as one keeps in mind, that some of the early entries were pure vapour ware - or came only into existence quite in late 1975 or way into 1976. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;MITS' initial offering contianed&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;88-SIO-x, a &lt;a href=&quot;http://www.classiccmp.org/dunfield/r/com2502.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;COM2502&lt;/a&gt; based serial interface card, available as RS232(-A), TTL(-B) or TTY(-C)&lt;/li&gt;&#xA;&lt;li&gt;88-4PIO, a M6820 based parallel port card, delivered with one PIO, prepared to hold 4.&lt;/li&gt;&#xA;&lt;li&gt;88-ACR, a (casette) tape interface (to be used with a 88-SIO-B board)&lt;/li&gt;&#xA;&lt;li&gt;88-4MCS, a 4 KiB static RAM board using 32 2102 (1 Kix1) RAMs&lt;/li&gt;&#xA;&lt;li&gt;88-4MCD, a 4 KiB dynamic RAM board using 8 TMS4030 or 2107A (1 Kix1) DRAMs (Oct 1975)&lt;/li&gt;&#xA;&lt;li&gt;88-VI, a Vector interrupt card&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There was, AFAIK, as well offerings for 1 and 2 KiB RAM kits, but AFAIR they were simply the same as the 4 KiB static (88-4MCS), just with less RAM chips supplied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Until mid 1976 this was expanded with &#xA;- 16 KiB static RAM &#xA;- Multiport serial card&#xA;- Real time clock&#xA;- PROM-Board&#xA;- ADC card&#xA;- Disk controller&#xA;- Printer interface&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But at that time many more and better cards were available from other manufacturers.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also, wouldn't some kind of RS-232 serial or teletype interface be required?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, some. For example with the 88-SIO-C a TTY could be used for loading from paper tape, as well as acting as terminal. To use the cassette version, another serial interface was needed (88-SIO-B) to drive the 88-ACR interface. Alst but not least, BASIC could of course be put into a set of PROMs to have it at power on.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Wikipedia (somewhat cryptically) says&lt;/p&gt;&#xA;  &#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;The finished interpreter, including its own I/O system and line editor,...&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;  &#xA;  &lt;p&gt;but I'm unclear what this really means. Was BASIC hard-coded to use a specific memory mapped IO card? If so, was there really any choice of card? If not, how did BASIC handle input/output?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Back then, software was at the same time less hardware dependant and less complex. To run BASIC, one had to supply a set of in/output functions and patch certain locations with calls to these functions. Keep in mind, the Altair had &lt;em&gt;no&lt;/em&gt; OS or BIOS or whatsoever at all. it was bare hardware, to be started by toggling in a loader.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;How is it done:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Basic 4K BASIC had two routines for character based terminal I/O, &lt;code&gt;OutChar&lt;/code&gt; (more exact &lt;code&gt;WaitTermReady&lt;/code&gt;) to output a character and &lt;code&gt;InputChar&lt;/code&gt; to read one. They were written for an interface with two I/O ports, one status and one data port. Status port bit 7 was checked to see if a character could be outputted, while status port bit 1 if there's an input ready. By default it was assembled with I/O Port 0 for status and 1 for data.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;This would indeed fit a 88-SIO card jumpered at I/O-Adress 00h, thus such a configuration would run 4K BASIC right from the tape. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the 88-SIO card was jumpered for a different address, the corresponding IN/OUT locations had to be patched (*1).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If one used a UART with a different port structure and or status signalling, but still I/O space based and simple access, new I/O routines had to be added, and according jumps patched into the start for either I/O function.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Sounds complicated? Yes, but keep in mind, this is your first computer and your first real application software, spending 10-15 minutes &lt;em&gt;active&lt;/em&gt; bringing it up is not only exiting, it also seams total normal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Already early on Micro-Soft improved this by adding 'automatic' configuration. During initialisation the content of the switches was examined and some auto-patching happened.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All switches down - 88-SIO at address 00/01h was assumed&lt;/li&gt;&#xA;&lt;li&gt;A14 up - Older Version of 88-SIO at address 00/01h&lt;/li&gt;&#xA;&lt;li&gt;A13 up - 88-PIO at address 00/01h&lt;/li&gt;&#xA;&lt;li&gt;A12 up - 88-4PIO at address 20..23h&lt;/li&gt;&#xA;&lt;li&gt;A11 up - 88-2SIO at address 20/21h&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Additionally flipping A8 up would make BASIC to take the base address for the card selected from a memory address (0FFFh for 4K, 1FFFh for 8K, 2FFFh for Extended). Of course, one had to toggle it in before executing BASIC :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This configuration option relieved everyone using MITS hardware from patching (Above #1), only adding the minor step of setting a memory location if one used other than the default ports (above #2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically the same settings were to be used for the checksum loader ... after manually correcting them when entering the first tage loader. Come on, it's easy.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Patching can happen in many ways and depended on the medium. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;With paper tape, one could try to modify the original at these locations by overtyping (or rather punching the holes manually). This works fine with a 88-SIO card, as all higher bits are cleared, and bit 0 is always the same.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Or (more advisable) one duplicated the tape (and leave the original untouched), but changed either IN/OUT address. This became necessary if complete different addresses and/or different status bits were to be used.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Or do it in RAM: One loaded BASIC, patched the changes in memory and dumped it again to (paper/cassette) tape. After all, the 'file' was just a memory dump anyway. For cassette based BASIC this was the only way. Similar if the patch had to include more code like for a different terminal connection.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Of course, one could always just load the code and patch it prior to every use. That's just a few more switch flips, not really worth all the hassle of patching a paper tape or saving that stuff again :))&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-05T12:29:00.147" LastActivityDate="2020-05-05T12:29:00.147" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14678" PostTypeId="2" ParentId="14670" CreationDate="2020-05-05T03:43:00.203" Score="16" Body="&lt;p&gt;It's great to look back at a technology developed nearly 30 years ago and say &quot;whoa, those are poor design decisions&quot;.  OLE, and then COM answered questions that were apparent in early Windows.  In particular the first thing it attacked was the problem of &quot;DLL Hell&quot; and how to package components from multiple vendors that could be consumed by multiple consumers.  VB was a driving force behind these use cases&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then came the OLE (Object Linking and Embedding) scenarios - how to embed an Excel spreadsheet within a Word document.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;COM grew from those use cases.  In the *Nix world, everyone was jumping on the CORBA bandwagon (the &lt;a href=&quot;https://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;Common Object Request Broker Architecture&lt;/a&gt;).  Microsoft developed DCOM (distributed COM) as a way to get a much lighter Object-based instantiation and communication mechanism (based on &lt;a href=&quot;https://en.wikipedia.org/wiki/DCE/RPC&quot; rel=&quot;nofollow noreferrer&quot;&gt;DCE/RPC&lt;/a&gt;).  If you think COM and the registry are complicated, dig into CORBA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not that COM leveraged the registry.  My guess is that if you look back, the registry was invented as a way to provide a central store for OLE (COM's precursor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also remember that all this (well, maybe not DCOM) was developed for 16-bit Windows running on Intel 386 PCs.  Basing everything on a simple centralized registry and on v-table layouts made for a very lightweight architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, Microsoft being Microsoft, the registry became overused and bloated.  COM's threading and apartment models became unfathomly complicated.  But, it was still very useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was an active Windows programmer in those days.  COM answered many vexing questions and really was a great thing back in the late 90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Get yourself an old copy of Brockschmidt's book &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1556158432&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inside OLE&lt;/a&gt;.  He explains the innards of COM and a lot of the rationale.  Some of Don Box's COM books also provide clear explanations of how it works, but also why things were designed that way.&lt;/p&gt;&#xA;" OwnerUserId="9166" LastEditorUserId="11034" LastEditDate="2020-05-09T09:51:32.343" LastActivityDate="2020-05-09T09:51:32.343" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14679" PostTypeId="2" ParentId="14655" CreationDate="2020-05-05T05:50:18.937" Score="2" Body="&lt;p&gt;Michael Mahon wrote a 5-bit Digital to Analog converter for stock 1 MHz, Apple II computers back in the early 1990's. Greg Templeman improved on this design to produce a 6-bit DAC. These programs would play 11KHz, 8-bit, digitized sound waveforms through the Apple II speaker by dropping the least-significant, 3 or 2 bits and using careful timing to play the waveform on top of a carrier wave (see &lt;a href=&quot;http://mirrors.apple2.org.za/apple.cabi.net/Music.and.Sound/SIX.BIT.DAC.SHK.TXT&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://mirrors.apple2.org.za/apple.cabi.net/Music.and.Sound/SIX.BIT.DAC.SHK.TXT&lt;/a&gt; for details).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, Greg's discussion of his program mentions &quot;Whether or not you notice the sound improvement with the sounds you play, however, you will still get the other advantage of increased bit-resolution: a greater dynamic range than other sound players, even with smaller digital steps. That is, my 6-bit DAC plays sounds louder than 5-bit (or fewer) players.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the ability to play digitized sound samples through the Apple II speakers also implies you can play both louder and quieter samples, so it seems the volume control was achievable at least through this means.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the by, Michael Mahon later based a new, 5-bit sound DAC on Greg's 6-bit DAC design, but with a 22KHz carrier wave rather than 11KHz, effectively eliminating the (audible) annoying &quot;whine&quot; of the carrier wave from the sound output. His discussion of that project can be found &lt;a href=&quot;http://www.goldwave.ca/forums/viewtopic.php?f=1&amp;amp;t=3586&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="18008" LastActivityDate="2020-05-05T05:50:18.937" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14680" PostTypeId="2" ParentId="14670" CreationDate="2020-05-05T06:19:41.160" Score="-1" Body="&lt;p&gt;It is as simple as the problem of drive letters, which Windows has and the other UNIX-like Operating Systems do not: There is no '/' root directory (without specifying a drive-letter prefix, like &quot;C:&quot;), so storing important object information in the same relative location on all machines is not possible. The part of the UNIX '/' directory is played by the Registry in Windows. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;COM is dependent on the registry because a specific version of an object needs to be registered in a reliable location that is not as flexible as one prefixed by an old DOS drive letter (remember, Windows was originally a DOS application and it still suffers with what it inherited from DOS to this day).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;COM was developed to solve the problem of &quot;DLL Hell,&quot; which is quite the ubiquitous topic in forums like this. Short story is: Microsoft solved their own problem with an even bigger problem.&lt;/p&gt;&#xA;" OwnerUserId="18009" LastActivityDate="2020-05-05T06:19:41.160" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14681" PostTypeId="1" CreationDate="2020-05-05T06:59:57.603" Score="3" ViewCount="291" Body="&lt;p&gt;An early example of this can be seen on the Atari VCS (2600) console.  With the &amp;quot;Space Invaders&amp;quot; game, one could hold down reset when powering on the machine and get a two shot mode.  As word of that got around, people would rapidly cycle the power, and or partially insert the power cord into the receptacle on the rear of the machine to get odd game effects and states.&lt;/p&gt;&#xA;" OwnerUserId="15357" LastEditorUserId="15357" LastEditDate="2021-02-06T05:18:28.257" LastActivityDate="2021-02-06T05:18:28.257" Title="What is the first documented instance of video game console &quot;Frying?&quot;" Tags="&lt;atari-2600&gt;&lt;game-consoles&gt;&lt;glitches&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ClosedDate="2020-05-05T16:35:10.617" ContentLicense="CC BY-SA 4.0" />
  <row Id="14682" PostTypeId="2" ParentId="14655" CreationDate="2020-05-05T08:40:18.567" Score="2" Body="&lt;p&gt;Its possible and PWM controlled DAC is the answer. All you need is single digital pin output and fast enough I/O hooked up to non linear load (like Speaker, or capacitance or RC filter) ...&lt;/p&gt;&#xA;&lt;p&gt;This can be used to play PCM samples (among other things)...&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;set PWM base frequency high enough&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;the frequency should be higher than human can hear otherwise you would hear a high pitch sound in the background. However if CPU I/O is not fast enough you just use lower one. For example telephony uses sounds up to ~4KHz so PWM with 8KHz is enough to produce telephony quality sound (its enough for &amp;quot;recognizable&amp;quot; human language even if voice is up to 12KHz).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://stackoverflow.com/a/26947637/2521214&quot;&gt;PWM -&amp;gt; DAC&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;each period of PWM transfers some energy to the speaker. For AC coupled loads The amount is highest with ratio 1:1 (50% is L and 50% is H).  The further you are from this the lower energy is transfered.  This is sort of DAC.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pulse-code_modulation&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCM&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;PCM is analog variable sampled (by ADC) as digital numbers (for DAC) that reproduces the original analog variable (up to a point). So we can sample sound in form of PCM (like *.wav files) and play it with PWM on Speaker.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;When you put all this into SW 1bit digital Speaker you will need:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;2 * f_sound * n_volumes = f_IO&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where &lt;code&gt;f_sound&lt;/code&gt; is the max frequency of sound produced (samplerate/2), n_volumes is the number of different sound volumes produceable and f_IO is required frequency of I/O to produce this sound.&lt;/p&gt;&#xA;&lt;p&gt;If we think about ZX then we need in inner most loop something like this (highly unoptimized):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;l2: ...&#xA;&#xA;    ld a,0        ; 7T&#xA;    out (254),a   ;11T&#xA;    ld bc,(adr_L) ;20T&#xA;l0: djnz l0       ;17/12T&#xA;    ld a,255      ; 7T&#xA;    out (254),a   ;11T&#xA;    ld bc,(adr_H) ;20T&#xA;l1: djnz l1       ;17/12T&#xA;    jp l2         ;14T&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;summing up to ~104T per PWM period. If we consider 4 volumes, another ~50T for sound fetching or generating  and 4MHz CPU then:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;f_sound = 4000000/(2*4*(104 + 50))&#xA;f_sound = ~3.2 KHz&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which is more or less like the telephony quality sound. So yes it was possible to have such sound on old 8bit computers. The code is just my pure attempt I wrote just now and can be optimized a lot more so I imagine you could go even to 8KHz after optimizations made...&lt;/p&gt;&#xA;&lt;p&gt;I created similar PCM sample player on my ZX ages ago where the sound was sampled by ADC hooked to 8255 of my ZX clone (&lt;a href=&quot;https://cs.wikipedia.org/wiki/Didaktik_Gama&quot; rel=&quot;nofollow noreferrer&quot;&gt;Didaktik Gama 89&lt;/a&gt;) and then could be played latter on internal Speaker. It was capable of storing just a few seconds (IIRC ~15sec) into memory but it worked. Sorry I do not remember the samplerate I was able to achieve but it was higher than 4KHz.&lt;/p&gt;&#xA;&lt;p&gt;However this technique requires a lot of CPU time that prohibits other stuff like gfx, game logic etc to be done at the same time unless other HW capabilities are exploited. For example on PC there is the PIT i8253 that can make part of the stuff for you ...&lt;/p&gt;&#xA;&lt;p&gt;On top of all this you can achieve also polyphony. With volume control its easy you just sum up the 2 or more channels together with saturation.&lt;/p&gt;&#xA;&lt;p&gt;However its possible to do it also without the volume control (the 1bit sound video from youtube you linked use this technique). Its done by combining the 1bit digital signals together.&lt;/p&gt;&#xA;&lt;p&gt;For more info see:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/53194502/2521214&quot;&gt;SO/SE: Ardunino - Buzzers with PWM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-05-05T09:10:37.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14683" PostTypeId="1" AcceptedAnswerId="14684" CreationDate="2020-05-05T08:44:18.107" Score="31" ViewCount="10076" Body="&lt;p&gt;As far as I understand it, the whole personal computing revolution that Microsoft Windows did was not entirely by its own design. Is it true that the Windows OS at its core was originally designed to simply be the OS of the terminals of the Windows server architecture? Similar to how Fedora is at its core intended to be the OS of the Red Hat Enterprise Linux servers?&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="12298" LastEditDate="2020-05-06T13:46:38.647" LastActivityDate="2020-05-07T04:59:28.937" Title="How exactly did Windows become the OS of the home PC?" Tags="&lt;history&gt;&lt;operating-system&gt;&lt;windows&gt;" AnswerCount="7" CommentCount="6" FavoriteCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="14684" PostTypeId="2" ParentId="14683" CreationDate="2020-05-05T09:17:00.210" Score="73" Body="&lt;p&gt;The short version is that Windows became the de facto operating system thanks to Microsoft’s business acumen (or shenanigans, depending on your point of view), marketing, skilled developers, a strong focus on backwards-compatibility, and the success of MS-DOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The success of Windows in general can be traced back to the success of Windows 3.0, which &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2386/79&quot;&gt;has already been addressed here&lt;/a&gt;. I’ll try to explain how we ended up with a “server-oriented” operating system, Windows NT, as the de facto operating system on home PCs nowadays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early versions of Windows (in the first half of the eighties) were developed in the context of a perceived “rise of the GUIs” (see also the Apple Lisa and Macintosh). They weren’t all that successful, until some skilled developers implemented new features in Windows which took full advantage of newer CPUs (286 and up), leading to &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2386/79&quot;&gt;the surprise success of Windows 3.0&lt;/a&gt;. The latter gave rise to a large ecosystem of software, which helped cement the Windows advantage: users started using Windows not only as a graphical shell, or a GUI for a small number of applications, but for most if not all of their computing needs. This led PC manufacturers to include Windows by default with their PCs (where previously many would only ship DOS), helped later on by Microsoft’s contracts which strongly encouraged bundling. PCs changed from “DOS PCs” to “Windows PCs” by default.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In parallel, Microsoft had been working on a replacement operating system for DOS for a long time; not Xenix, but OS/2, and after the fall-out with IBM, NT. This ended up targeting high-end PCs of the time, taking full advantage of 32-bit CPUs, with a high-level architecture resulting in a more portable and maintainable operating system, but also a more resource-intensive operating system. As a result, it was marketed for servers and workstations initially, effectively as a competitor to Unix (and mini-computer operating systems).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The success of Windows 3.0 started the ball rolling on the unification process (which would take a long time): Windows NT switched from an OS/2-based API to a new 32-bit API, Win32, based on the existing 16-bit Windows API (this happened before the first release of NT, 3.1). But NT was still too big for home (and office) computers, and was really bad at doing one important thing for home users, playing games. The UI was very similar across all three operating system lines at the time — compare &lt;a href=&quot;https://guidebookgallery.org/screenshots/msos21301&quot; rel=&quot;noreferrer&quot;&gt;OS/2 1.3&lt;/a&gt;, &lt;a href=&quot;https://guidebookgallery.org/screenshots/win30&quot; rel=&quot;noreferrer&quot;&gt;Windows 3.0&lt;/a&gt;, &lt;a href=&quot;https://guidebookgallery.org/screenshots/win31&quot; rel=&quot;noreferrer&quot;&gt;Windows 3.1&lt;/a&gt;, and &lt;a href=&quot;https://guidebookgallery.org/screenshots/winnt31&quot; rel=&quot;noreferrer&quot;&gt;Windows NT 3.1&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The parallel development streams continued: Windows 3.0 was extended with multimedia features (MPC and then Windows 3.1) and, importantly for office use, networking features (Windows for Workgroups). Windows also started being bundled with computers, ultimately in combined MS-DOS 6.22 / Windows for Workgroups 3.11 packages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point non-NT Windows still hosted 16-bit applications, which was increasingly limiting (and bad for publicity, for the relatively small number people who understood such matters, since pundits had definitely moved to a 32-bit future). It’s hard to imagine nowadays, but at the time, many in the computer press wondered what the future would bring: Windows 3 was stuck with its “16-bit GUI on top of DOS” roots, NT wasn’t really there yet, OS/2 was mis-marketed, and Unix could never be the next new thing because it was already old at the time (and more importantly, heavily fragmented). Even the hardware side was up in the air, up until Intel released the Pentium: many thought the next big thing would come from the RISC world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Windows, there were a couple of stop-gap measures (Win32s and WinG), but the full switch to 32-bit applications really started with the release of Windows 95. The latter was an enormous event, not only in the computing world, but in the (Western) world at large: Microsoft had been promoting “Chicago” (the code name for what was supposed to be Windows 4.0 initially, then 95) for years, and the release event was coordinated around the world with massive media presence (including, in the UK, a specific edition of &lt;em&gt;The Times&lt;/em&gt;), and a whipped-up frenzy which resulted in long queues in front of computer stores...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By this point the home market was a done deal. Windows 95 and 98 were &lt;em&gt;the&lt;/em&gt; operating system for home and office PCs, but they were still a support nightmare (and Windows Me even more so). NT was getting better all the time, and Microsoft pushed to unify the two streams in Windows 2000 and then XP — not by changing NT all that much, but by adding good support for games (thanks to DirectX and a re-vamped graphics driver architecture) and for older software (with Sound Blaster emulation for old DOS games in particular). Windows 2000 was a great gaming platform at the time, at least with Windows games (Counter Strike, Unreal Tournament, Age of Empires II...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were of course a number of questionable practices in all this, the two major ones being pre-announcements (pre-announcing MS-DOS 5 and 6 helped counter DR DOS, and pre-announcing Windows 4 helped counter OS/2), and bundling agreements with PC manufacturers (who could include DOS and Windows at reduced cost, but only if they paid for the bundle on all the PCs they sold).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it true that the Windows OS, at it's core was originally designed to simply be the OS of the terminals of the windows server architecture. Similar as to how Fedora is at it's core intended to be the OS of the REL servers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Both of these statements are incorrect, but it would take another answer to address them...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-06T12:43:45.627" LastActivityDate="2020-05-06T12:43:45.627" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="14685" PostTypeId="2" ParentId="14670" CreationDate="2020-05-05T09:24:03.230" Score="5" Body="&lt;p&gt;I worked on some of that stuff at the time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsoft Transaction Server was a big deal and we used it in some major apps. By registering a DLLs interface in the registry, you did not need the physical file on your machine and could call into a library running on another machine. COM/DCOM was basically Microsoft's version of CORBA.&lt;/p&gt;&#xA;" OwnerUserId="18010" LastActivityDate="2020-05-05T09:24:03.230" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14686" PostTypeId="2" ParentId="14670" CreationDate="2020-05-05T09:35:34.533" Score="2" Body="&lt;p&gt;COM provides an abstraction layer where you access &quot;components&quot; through &quot;interfaces&quot;, and the calling program doesn't need to know whether it is talking to a DLL loaded into its own process, a program, a system service or a remote server.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This allows you to implement components that run at a different permission level than the calling program, a common example is the network configuration widget in the notification area, which runs with the user's privileges but also talks to the network configuration system service, which has the ability to change network stack parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the interface only exposes a subset of the privileges the service has, this serves as a simple way to create fine-granular permissions, the same way Unix uses setuid-root programs that can be called by unprivileged users to perform specific actions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The registry is a list of components that can be &quot;activated&quot; on behalf of programs, so not all components need to be loaded all the time. Some components are rather heavyweight (for example, &lt;code&gt;excel.exe&lt;/code&gt; provides an embeddable spreadsheet component).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conceptually, the registry is not much different from a mailer program providing a &lt;code&gt;/usr/bin/sendmail&lt;/code&gt; symlink to be used by programs that want to send mail through a &lt;code&gt;sendmail&lt;/code&gt; compatible interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design difference towards other systems is that the Windows world prefers to use components whenever possible, which allows for fairly tight integration of otherwise unrelated programs, but the number of component interfaces made it necessary to organize them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On Linux, the &lt;code&gt;dbus&lt;/code&gt; system provides a similar communications system for components (e.g. &lt;code&gt;network-manager&lt;/code&gt; provides an interface to configure network cards, &lt;code&gt;nm-applet&lt;/code&gt; uses that interface), and there is a process called &quot;dbus activation&quot; that starts components on-demand by looking up the providing program in a list and invoking it. That components cannot be loaded from DLLs there is an implementation detail, but the registry is no longer a Windows specific phenomenon.&lt;/p&gt;&#xA;" OwnerUserId="7455" LastActivityDate="2020-05-05T09:35:34.533" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14688" PostTypeId="2" ParentId="14681" CreationDate="2020-05-05T12:12:13.407" Score="7" Body="&lt;p&gt;I think it would be unlikely to work on computers, as opposed to consoles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trick relies on corrupting values in RAM (by disrupting the DRAM refresh cycle) without also corrupting the game code; this worked in the arcade and on consoles, where the game code was held in ROM and could not be corrupted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But on a home computer, games were normally loaded from disk or tape and held in RAM, and the values the game logic relied on would be initialised either simultaneously with or after the game had loaded.  So any attempt to corrupt RAM would also corrupt the game code, preventing it from working at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible that this trick inspired later game-cheating tools like the Action Replay, which could modify RAM deliberately and precisely.  These were indeed released for some home computers as well as consoles.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-05-05T12:12:13.407" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14690" PostTypeId="2" ParentId="14683" CreationDate="2020-05-05T13:22:34.387" Score="32" Body="&lt;p&gt;The other answers include a lot of sound historical information about how Windows evolved into its dominant role on PC's in both the home and business environment. But I think the most fundamental, simplest, &quot;Occam's razor&quot; answer is that consumers never had to make a choice. It was PC manufacturers that chose Windows as the default OS, not users and consumers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aside from the one-time media event that accompanied the release of Windows 95, home PC buyers have been accustomed to simply buying PC's with the assumption their purchase would include software. After all, a PC without software (the OS, in this discussion) is not serviceable for any task. In the mind of a consumer, the PC and its OS are inseparable parts of the product. It would be like buying the chassis of your car separately from an engine - not likely - and few buyers even bother to &quot;look under the hood&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on this analogy, it is easy to understand that the behind-the-scenes dealings between Microsoft and PC manufacturers dictated this outcome much more than any technical merits or detractors associated with Windows - and its long history provides many examples of both. I'm not claiming that Windows either succeeded because of its merits or despite them. Simply that such concerns pale in comparison to the fact that almost all &lt;strong&gt;PC purchases included Windows&lt;/strong&gt;, as a default. Don't bother consumers with deciding what software is included. As long as it is sufficiently serviceable and compatible with the applications, the buyers simply don't care.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much has been written on Microsoft's business approach to bundling their software with consumer hardware. It really began with Microsoft Basic, continued with MS-DOS, and reached its peak with Windows.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-05-05T13:50:03.967" LastActivityDate="2020-05-05T13:50:03.967" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="14691" PostTypeId="2" ParentId="14683" CreationDate="2020-05-05T13:29:21.697" Score="15" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How exactly did Windows become the OS of the home PC?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Is it true that the Windows OS, at it's core was originally designed to simply be the OS of the terminals of the windows server architecture.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. Windows started out as a GUI component of DOS - eventually hiding DOS beneath. Anything like a windows server architecture was only devloped &lt;em&gt;way&lt;/em&gt; later. In fact, much later than the time Windows became a stand alone OS (wich is, depending on your PoV OS/2 or Windows NT) &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So if this is true how exactly did a OS intended to support a companies server offerings become the defacto standard of home computing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because it is not true. Windows became a thing for home users way before any server architecture and mostly thru several factors:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It offered a GUI to existing PC users. At that point it was in fact rivalled by &lt;a href=&quot;https://en.wikipedia.org/wiki/GEM_(desktop_environment)&quot; rel=&quot;nofollow noreferrer&quot;&gt;GEM&lt;/a&gt;, which was, for some time quite ahead in sales of Windows, at least in Europe that is, or more integrated solutions like &lt;a href=&quot;https://en.wikipedia.org/wiki/DeskMate&quot; rel=&quot;nofollow noreferrer&quot;&gt;DeskMate&lt;/a&gt; or late comer &lt;a href=&quot;https://en.wikipedia.org/wiki/GEOS_(16-bit_operating_system)&quot; rel=&quot;nofollow noreferrer&quot;&gt;GEOS&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;PC-Hardware became rather cheap during the late 1980s, early 1990s, eventually undercutting equal powerful high end home computers like Atari ST, Amiga or Acorn. Windows was the default counterpart to their offerings for a GUI&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;During the mid to late 1990 the PC became a serious game platform, even more rivalling existing home computer platforms. With evolving graphics and sound capabilities, as well as (at the time) almost endless memory, 486 machines draw in game development - not to mention the ability of DOS for CD support, easing the distributing of ever growing games. This again cemented the PC as base hardware and while many of these games were DOS based using various extenders (DOS/4GW made this race due being included with Watcom C), Windows was a simple choice for all other tasks - even more so when game companies offered kind of integration to the desktop.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The most important, single turning point by Microsoft was the introduction of DirectX in 1995/96, with Windows 95. While it wasn't complete new (there was WinG before), it was the dedication to a unified set of APIs to cover all (well, most) hardware out there - this came at the same time when the 32 Bit API was stabilized, making DOS-Extenders obsolete, creating the perfect wave for game developers to switch - which in turn made even hard core DOS users install Windows - and the remaining home computer users switch.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Last, but for sure not least, the DOS/Windows-Tax, that forced system manufacturers to either supply some alternate OS (and still pay to some degree) or simply deliver their machines with DOS/Windows. This was heavily enforced by MS during the late 1990s, thus making next to every brand machine being delivered with Windows installed by default. Users had to active change this - something most never even think of.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So in conclusion, Windows 3.1 became usable in ~1993 as (application) Desktop, Windows 95 made 1996 the turning year, were DirectX was able to pull developers over from DOS. And it proved to be a cornerstone up till today. All with a more or less gentle nudging by lawyers waving their version of a 2x4.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-07T02:38:09.037" LastActivityDate="2020-05-07T02:38:09.037" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="14692" PostTypeId="2" ParentId="14116" CreationDate="2020-05-05T19:23:22.283" Score="2" Body="&lt;p&gt;Just for completeness, these two C functions demonstrate that you actually only need your CPU to implement logic operations (AND, OR, XOR, SHIFT) and one kind of test: test if a given number is equal or different to zero, in order to implement integer addition and multiplication. All these operations are very easy to implement in hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: I assume that &lt;code&gt;sizeof(unsigned int)&lt;/code&gt; is 4&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;unsigned int add32 (unsigned int a, unsigned int b)&#xA;{&#xA;    unsigned int res, carry = 0;&#xA;&#xA;    res = a;&#xA;    do&#xA;    {&#xA;        carry = (res &amp;amp; b)&amp;lt;&amp;lt;1;&#xA;        res ^= b;        &#xA;        b = carry;&#xA;    } while (carry != 0);&#xA;    return res;&#xA;}&#xA;&#xA;unsigned int mult32 (unsigned int a, unsigned int b)&#xA;{&#xA;    unsigned int res = 0;&#xA;    while (b != 0)&#xA;    {&#xA;        if (b &amp;amp; 1)&#xA;            res = add32 (res, a);&#xA;        a &amp;lt;&amp;lt;= 1;&#xA;        b &amp;gt;&amp;gt;= 1;&#xA;    }&#xA;    return res;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="105" LastActivityDate="2020-05-05T19:23:22.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14694" PostTypeId="2" ParentId="14683" CreationDate="2020-05-05T21:54:39.053" Score="2" Body="&lt;p&gt;When IBM went into the Personal computer business their design became a standard for the industry and IBM compatible computers quickly became a majority of personal computers produced. MS-DOS from Microsoft was the operating system that IBM picked and the other manufacturers used it as well. When Microsoft came out with Windows they already had a big advantage. As Software programmers were writing software they concentrated on the operating system that had the largest share of the market which was Windows. When people were trained to use computers the same thing happened many were trained on what was most common. So Windows market share advantage became self reinforcing.&lt;/p&gt;&#xA;" OwnerUserId="18020" LastActivityDate="2020-05-05T21:54:39.053" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14695" PostTypeId="2" ParentId="9222" CreationDate="2020-05-05T22:57:13.987" Score="1" Body="&lt;p&gt;I have both the Wicher 500i and the IDE68k (in fact I have 2 of each). The IDE CD drive is recognized by both using 2nd IDE channel. However, it crashes so often (Workbench 3.1.4). The headache is selecting the right software and drivers to make this work! Still, I didn't figure it out.&lt;/p&gt;&#xA;" OwnerUserId="18022" LastActivityDate="2020-05-05T22:57:13.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14696" PostTypeId="2" ParentId="14683" CreationDate="2020-05-06T05:10:27.880" Score="6" Body="&lt;p&gt;The history of windows goes back a long way. Windows 1.0 was released in 1985 and was simply a graphical interface for MS-DOS. This was neither revolutionary nor uniquely Microsoft, but a trend at that time. For example, &lt;a href=&quot;https://en.wikipedia.org/wiki/GEOS_(8-bit_operating_system)&quot; rel=&quot;noreferrer&quot;&gt;GEOS&lt;/a&gt; appeared in 1986 and was the same thing for the C64. There was also GEM and a couple others. Since the development times on these projects make it highly likely that they were parallel developments instead of copies of each other. Instead, they are both answers to &lt;a href=&quot;https://en.wikipedia.org/wiki/Classic_Mac_OS&quot; rel=&quot;noreferrer&quot;&gt;Apple's Mac OS&lt;/a&gt; from 1984. (and of course all of them are based on the Xerox PARC research).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 1.0 was a dud. Nobody cared. It was technologically inferior to pretty much every competitor and didn't offer any actual advantages for the user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 2.0 (1987) became famous mostly because Apple took Microsoft for court for a number of license agreement and copyright violations. In the market place it was another failure, its technology started to catch up to competitors but the added value for the user was minimal, about on the level of the &quot;multitasking&quot; of the iPad today. Like 1.0 it was a program for MS-DOS so you had to start your computer into the MS-DOS commandline and then load Windows up seperately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 3.0 (1990) was the first that was successful and while still technologically behind the competition, had caught up enough to become popular with users, especially in the commercial sector. For the private sector, a few early games tried but largely failed (&lt;a href=&quot;https://archive.org/details/softwarelibrary_win3_games?and%5B%5D=year%3A%221991%22&amp;amp;and%5B%5D=year%3A%221990%22&amp;amp;and%5B%5D=year%3A%221989%22&amp;amp;and%5B%5D=year%3A%221988%22&amp;amp;sort=-downloads&amp;amp;page=2&quot; rel=&quot;noreferrer&quot;&gt;here's a few games from those days&lt;/a&gt;, and most of them are for 3.1)&#xA;Again, Windows 3.0 was an MS-DOS program, not an operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 3.1 (1992) and 3.11 (1994) were the popular ones that really started Windows as a thing. Wikipedia reminded me that they finally added Drag &amp;amp; Drop in that version. So I'll refrain from mentioning again that it was still playing catch-up with other GUI systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, guess what, it still ran on top of MS-DOS. Windows 95 was the first Windows that was not an MS-DOS executable, but a bootable operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry for the long introduction, but it is necessary to clearly show that the success of Windows &lt;strong&gt;cannot be viewed independently&lt;/strong&gt; from the success of MS-DOS. With MS-DOS being the dominant operating system at the time (for reasons discussed in various lawsuits and a near unlimited amount of articles and comments) the Windows GUI was riding on the dominance of the MS-DOS OS for a very long time, and only became an actual operating system when it had already achieved dominance of the market. For the vast majority of people, both privately and commercially, the decision at that time was not between Windows 95 and another OS, but whether to move to 95 or stick with 3.11&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This history also answers your other question. No, Windows wasn't a server-terminal system. In fact, Windows NT 3.1 - the first server OS from Microsoft - appeared in 1993 and was basically Microsoft's fork of OS/2. It had such-such reception in the market, unlike its successor NT 4.0 (1996) which as I remember (I started my IT career around that time) was the first server-side Windows OS that professional IT people took seriously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By that time, Windows was already dominating the client-side market, and I would guess that it was rather the other way around: With NT, Microsoft leveraged its near-monopoly on the desktop market to gain entry to the server market.&lt;/p&gt;&#xA;" OwnerUserId="6773" LastActivityDate="2020-05-06T05:10:27.880" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14697" PostTypeId="2" ParentId="14683" CreationDate="2020-05-06T06:34:48.697" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;As far as I understand it, the whole personal computing revolution that Microsoft Windows did was not entirely by its own design.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As several earlier posters have noted, it was almost entirely by Microsoft's design. We are talking about the age where MS Executives were comfortable talking about &quot;cutting off [their competitors'] air supply&quot;. The marketing and competitive warfare was brutal, but largely invisible to the end user population.&#xA;It was not much different from the IBM at the time, so MS-DOS on the IBM PC was probably a match made in heaven (added to the fact that it saved the IBM executives from having to deal with a woman, which they would if they had gone with CP/M, the dominant DOS at the time).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it true that the Windows OS at its core was originally designed to simply be the OS of the terminals of the Windows server architecture?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The first version of Windows I saw was 2.0, running (if you can call it that) on an IBM AT. The experience was horrible - even by the standards of the time. In the mid 80s, I remember working for a company whose corporate policy was a desktop computer was an MS-DOS machine (well, they were making them...). We actually had a Macintosh in the PC room (this was long before the days when every desk had a PC on it), but it had been officially described on the purchase order as a &quot;Graphical Design Aid&quot;. I was officially writing code on ISPF on an IBM 370 Mainframe, but it took over a year for me to obtain a 3270 terminal on my desk. A couple of us engineers were playing around with early Amigas, marvelling at the elegance of the core software.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Similar to how Fedora is at its core intended to be the OS of the Red Hat Enterprise Linux servers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;RedHat don't make servers. They distribute Linux-based OSs and other software. Fedora is a community distribution of Linux (GNU/Linux, if you must) by RedHat. RedHat use it, in part, for road testing their new technology. RHEL is designed as an enterprise operating system, with long term stability and paid-for support. Whilst most of the tech and architecture in RHEL has passed through Fedora, it's not fair to say &quot;Fedora is the core of RHEL&quot;. They are kind of forks of the same codebase, rather, with the Fedora fork always supposed to be a bit more bleeding edge. Incidentally, you can get the full source to both RHEL and Fedora (the Centos project, among others, is a community rebuild of RHEL).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So if this is true how exactly did an OS intended to support a company's server offerings become the de facto standard of home computing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, your premise is not true, but the &quot;server&quot; core did replace the old desktop core.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't remember any Windows Server Architecture with Windows 3.1 or before. The concept of Windows as a server only comes along with NT, IIRC. By then I was managing a set of HP-UX servers. At the time, if you weren't in the IBM camp (mainframe or midrange), you had a choice of DEC VMS or various proprietary Unix implementations. DEC had emasculated their next generation GUI OS (Project Mica) before it saw the light of day, and MS happily cherry picked many of the best (and disgruntled) Mica engineers to work on what became NT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Intel-based desktop machines were hamstrung by their 16-bit software model, and the early versions of Windows had to exist within those limitations. When NT came along, MS' pitch was Windows NT Server and Workstation in the enterprise space, and Windows 3.1 at home/small business.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dichotomy between the two versions became a thorn in MS' side over the course of many years. The low-end version evolved from 3.1 (successful) to Windows 95 (very successful) to Windows 98 (disastrous), but the pressures on the core, like poor 32-bit support, and the lack of any inherent concept of user identity/permissions, meant, especially in the age of the ubiquitous Internet, massive problems. The ultimate fix was to rehome the graphical shell on top of the NT core, creating a more or less single Windows architecture, in the several variants which we see today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No-one foresaw the elimination of the original desktop Windows codebase - it just happened because it was the most pragmatic solution to the engineering morass MS were falling into at the time (it had happened to IBM, too, in the 1960's: in that case it led to the 360 mainframe system).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I remember a grey-beard after one IT moaned at the auto update feature of Windows 10 just mention in passing that this quirk for the home user is probably a design feature that has something to do with servers as a terminal of a server would probably never want to skip an update.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Actually, it's got more to do with life on an ever-hostile Internet. Before Windows Update came along, just keeping Windows current with security patches was a massive exercise, and a lot (maybe even the vast majority) of owners did not keep their machines patched. The result was massive problems, both in the enterprise and in the home. And when the easiest target of malware is also the predominant platform, you have the makings of a perfect storm. The way Windows is built means a distribution mechanism for updates like you get with RedHat or Ubuntu is a lot harder (the package management systems in most Linux distros provide pretty good decoupling and dependency management) to implement, which is why I think it took MS so long to get it to work properly. Even then, it was originally something you had to take responsibility for by running it yourself. It took quite a while for the realization to dawn that the only proper solution was to make the process automatic, at least for the critical stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this greybeard (who worked servers, networks and security in the nineties and the noughties) has no compunction in telling your aforementioned greybeard to pull his head in - the alternative is so much worse.&lt;/p&gt;&#xA;" OwnerUserId="18031" LastActivityDate="2020-05-06T06:34:48.697" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14699" PostTypeId="2" ParentId="14632" CreationDate="2020-05-06T09:22:49.963" Score="1" Body="&lt;p&gt;I've worked with computers since the beginning of the 80's, professionally since 1987. I was unaware that there was any kind of &quot;official&quot; convention on what &quot;b&quot; and &quot;B&quot; means and it has always been chaotic and confusing. I have always assumed a &quot;b&quot; in upper or lower case could either mean bits or bytes and I usually worked it out from context. In fact, when asked how much memory a particular application needs, I will usually write 24Gb (or whatever) meaning 24x2&lt;sup&gt;30&lt;/sup&gt; &lt;strong&gt;bytes&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, in the early 80's home computing scene in the UK the big debate was on whether to use &quot;K&quot; or &quot;k&quot; to mean &quot;kilo&quot; and some purists said we shouldn't use &quot;kilo&quot; at all because we were invariably talking about 1024, not 1000. &quot;B&quot; or &quot;b&quot; always meant &quot;bytes&quot;. Transfer speeds were pretty much irrelevant to 80's home computing except when dealing with modems and then the unit was &quot;baud&quot; as in &quot;300 baud modem&quot;. Once I got to university and started doing &quot;proper&quot; computing, memory was usually measured in words, which of course vary in size according to the particular machine (as can bytes, theoretically).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the answer to  the question is that they either didn't know or didn't care that there is is a difference. You can  usually tell from context what is meant anyway.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2020-05-06T09:22:49.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14700" PostTypeId="2" ParentId="12270" CreationDate="2020-05-06T09:30:45.897" Score="2" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rNH7N.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rNH7N.png&quot; alt=&quot;from the service manual&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@hoshikawa is correct of course, the floppy controller chip is located within the external drive unit, the connector is just a data bus.&lt;/p&gt;&#xA;" OwnerUserId="18035" LastActivityDate="2020-05-06T09:30:45.897" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14702" PostTypeId="1" CreationDate="2020-05-06T13:44:40.373" Score="-1" ViewCount="226" Body="&lt;p&gt;This question is related to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14683/how-exactly-did-windows-become-the-os-of-the-home-pc&quot;&gt;this&lt;/a&gt; one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I always was understanding that windows the OS was a companion app of sort in regards to the server offerings and that, yes you could use it for home use, but it's main success was a support of server offerings that for the most part where robust and very usable in a corporate setting. People sort of accepted windows in there lives because MS-servers made it worth it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this idea, now seems debunked. I always thought running a MS-server without windows is like trying to run Java programs with MS-SQL or a C# app with a Oracle database, you can, but you probably don't want to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore Linux server systems seemed to have a minority position (in corporate sphere) where I live which also somewhat enforced the idea that MS-Servers where decent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is how did windows evolve with the various MS server OS? Was certain version of windows aimed to interact more with servers than others, while others were dedicated to home use. It did strike me that windows has always seemed to have certain design quirks that made me question if it was really designed for home use.&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="-1" LastEditDate="2020-05-06T15:02:15.033" LastActivityDate="2020-05-07T02:37:45.547" Title="What exactly has the windows OS relationship been towards MS server offerings?" Tags="&lt;operating-system&gt;&lt;windows&gt;" AnswerCount="3" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="14703" PostTypeId="2" ParentId="14702" CreationDate="2020-05-06T14:30:00.860" Score="5" Body="&lt;p&gt;Ignoring MS-Net, Microsoft has marketed server systems since 1987: first LAN Manager, based on OS/2, then in 1993 Windows NT 3.1 Advanced Server, and then the various Server editions of successive Windows NT and Windows 2000 releases, which gave way to Windows Server.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MS-DOS 3.1 and later, and all versions of Windows, have been able to integrate with these server systems (and others, such as Novell Netware). At the most basic level, LAN Manager client software provides access to the file and print sharing features, and these are usable from DOS and Windows (initially through DOS, later on through built-in support in Windows). As server features and client features expanded over time, the integration became tighter, with servers becoming domain controllers and “client” operating systems supporting ever stricter lockdowns (so that their use is centrally-controlled).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many versions of Windows also support peer-to-peer networking, which was introduced in Windows for Workgroups. Microsoft also sold a Workgroups add-on for DOS, providing similar features on MS-DOS. (Other companies provided similar peer-to-peer networking tools.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But all “client” operating systems, whether marketed for home, office, or workstation use, can be used without servers. Many of them can be &lt;em&gt;configured&lt;/em&gt; to rely on a server, or even to only act as thin clients, but that’s not inherent in any specific version of a Windows operating system product. That is to say, there aren’t any “client-only” versions of Windows, at least out of the box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Viewed in the other direction, there aren’t any &lt;em&gt;technically&lt;/em&gt; home-only versions of Windows either; even MS-DOS and Windows 3.1 could be integrated into a Windows NT domain (using the LAN Manager client and the Client for Microsoft Networks). There are “Home” editions of Windows, which can’t join Windows domains as members, but they can still access many domain resources (including remote desktops and applications), and the core operating system is still the same as other editions of the same Windows version (Windows 10 Home v. Windows 10 Pro etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of technology bases, there is a distinction: MS-DOS and non-NT versions of Windows (Windows 1.0 to 3.11, 95, 98, and Me) were never used to build a Microsoft server operating system. OS/2 and Windows NT were and are used to build both client and server systems.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-06T14:52:40.613" LastActivityDate="2020-05-06T14:52:40.613" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14704" PostTypeId="2" ParentId="14702" CreationDate="2020-05-06T14:40:30.607" Score="5" Body="&lt;p&gt;Background: Windows NT was the basis for all Microsoft Windows &quot;Server&quot; Operating Systems that had that name. Previous iterations of MS networking products were mostly add-on device drivers for simple file sharing. There was also the complete line of Windows Desktop OS's from Windows 1 through Windows Me that were marketed for both home and business use. The two lines merged over many years as seen in Windows NT 4.0 (Server and Workstation), Windows 2000 (Professional and various Server versions), and Windows XP, with XP being the point at which all the major NT core features were in the version marketed to consumers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To understand this OS market Microsoft was seeking to dominate during this push to NT in the late-90s and early-2000s, you have to recognize what came before - which was primarily &lt;a href=&quot;https://en.wikipedia.org/wiki/NetWare&quot; rel=&quot;nofollow noreferrer&quot;&gt;Novell NetWare&lt;/a&gt;. NetWare was introduced pretty early for PC's, around 1983, and was the dominate network-based server solution for office automation built around &quot;cheap, commodity, PCs&quot;. By the early 1990s, it was pretty entrenched in businesses that had been early adopters of networking technology. This is the capability that MS would now build into their own OS offerings, such that everything needed to replace NetWare could be offered as part of a Windows-based networking solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first big success came with the introduction of Windows NT 4.0. This was offered in officially named &quot;Server&quot; and &quot;Workstation&quot; versions, included all the niceties from the consumer Windows 95 GUI, and reinforced the mass migration of offices away from NetWare. Then, MS continued to improve upon its offerings with Windows 2000 and the various &quot;Server&quot; versions that would follow. So, I would call out NT 4.0 as the real turning point that would cement Windows server technology migrating into and replacing the old Desktop OS that fundamentally dated back to the mid-1980s and MS-DOS driver underpinnings. It's also the OS that cemented the role of Windows as &quot;network operating system&quot; for office automation environments at the scale for which IT professionals would have previously looked to purchase NetWare.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-05-06T19:39:31.817" LastActivityDate="2020-05-06T19:39:31.817" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14705" PostTypeId="2" ParentId="5388" CreationDate="2020-05-06T16:47:30.713" Score="0" Body="&lt;p&gt;I had to add the sizelimit option with the partition size to make it work, so as in your example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;sudo mount -t affs -o offset=,sizelimit= /dev/sdc /media/Amiga&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if you also want user access and not just root add the setuid=,setgid= options as well&lt;/p&gt;&#xA;" OwnerUserId="18006" LastActivityDate="2020-05-06T16:47:30.713" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14706" PostTypeId="2" ParentId="5388" CreationDate="2020-05-06T17:01:19.347" Score="3" Body="&lt;p&gt;The other answers discuss mounting the drive directly.  However, given the age of the disk and the stated personal value of the contents, I would like to recommend that the drive be imaged first.  &lt;a href=&quot;https://www.gnu.org/software/ddrescue/&quot; rel=&quot;nofollow noreferrer&quot;&gt;GNU ddrescue&lt;/a&gt; is your friend.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ddrescue will create an image of the drive which you can then mount and work with. This way you only have to connect the drive once but can go back to the image as often as you need or want, especially if you need to experiment with mounting options or filesystem support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a good tutorial at &lt;a href=&quot;https://www.linux.com/learn/intro-to-linux/2017/3/gnu-ddrescue-best-damaged-drive-rescue&quot; rel=&quot;nofollow noreferrer&quot;&gt;linux.com&lt;/a&gt; but here is a sample command:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sudo ddrescue -r3 /dev/sdb amigadisk.img logfile&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will read the entire disk mounted as &lt;em&gt;sdb&lt;/em&gt; and write it to &lt;em&gt;amigadisk.img&lt;/em&gt;, logging progress to &lt;em&gt;logfile&lt;/em&gt; and making 3 attempts to recover bad blocks.  This images the original MBR and all partitions in one file.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My preference to access the partitions is to use &lt;a href=&quot;https://www.systutorials.com/docs/linux/man/8-kpartx/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;kpartx&lt;/code&gt;&lt;/a&gt; (Ubuntu package &lt;code&gt;kpartx&lt;/code&gt;).  This can be done with &lt;code&gt;kpartx -av amigadisk.img -r&lt;/code&gt; which will map the image into virtual partitions.  In most cases these can then be mounted with &lt;code&gt;mount -o loop,ro /dev/mapper/loop0p1 /mnt&lt;/code&gt;.  As has been mentioned, you may need to adjust slightly for the Amiga filesystems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this mounts the image read-only for safety.&lt;/p&gt;&#xA;" OwnerUserId="4822" LastActivityDate="2020-05-06T17:01:19.347" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14707" PostTypeId="1" CreationDate="2020-05-06T19:47:12.817" Score="0" ViewCount="114" Body="&lt;p&gt;I have been working on an old Siemens PG675 and suddenly the monitor began to show a a distorted image (it shows this &lt;a href=&quot;https://i.stack.imgur.com/wJnw7.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt; when the should shows this &lt;a href=&quot;https://i.stack.imgur.com/D82ZP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;). I could make a test of the screen, and it shows this picture &lt;a href=&quot;https://i.stack.imgur.com/4iFJI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;3&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have dissemble the device and visually there is not any disconnected or any burned element (resistor, cable, ...). On the monitor there are some references but I could not find any useful info &lt;a href=&quot;https://i.stack.imgur.com/ySrN6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;4&lt;/a&gt;, I have also move the potentiometers of the screen but they only move or vary the screen view dimensions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: this is the picture of the PCB with the video chip &lt;a href=&quot;https://i.stack.imgur.com/LbcsU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;5&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 2: this is the picture of the PCB with the DRAMs &lt;a href=&quot;https://i.stack.imgur.com/9rSxy.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;6&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[&lt;img src=&quot;https://i.stack.imgur.com/wJnw7.jpg&quot; alt=&quot;wrong start image&quot;&gt;]&#xA;[&lt;img src=&quot;https://i.stack.imgur.com/D82ZP.png&quot; alt=&quot;right start image&quot;&gt;]&#xA;[&lt;img src=&quot;https://i.stack.imgur.com/4iFJI.jpg&quot; alt=&quot;test mage&quot;&gt;]&#xA;[&lt;img src=&quot;https://i.stack.imgur.com/ySrN6.jpg&quot; alt=&quot;PCB view&quot;&gt;]&#xA;[&lt;img src=&quot;https://i.stack.imgur.com/LbcsU.jpg&quot; alt=&quot;PCB with video chip&quot;&gt;]&#xA;[&lt;img src=&quot;https://i.stack.imgur.com/9rSxy.jpg&quot; alt=&quot;PCBs with DRAMs&quot;&gt;]&lt;/p&gt;&#xA;" OwnerUserId="17987" LastEditorUserId="17987" LastEditDate="2020-05-06T22:13:15.733" LastActivityDate="2020-05-06T22:13:15.733" Title="Siemens PG675 monitor problem" Tags="&lt;crt-monitor&gt;&lt;screen&gt;" AnswerCount="0" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="14708" PostTypeId="2" ParentId="14670" CreationDate="2020-05-06T20:58:15.047" Score="5" Body="&lt;p&gt;There is no other way to find it. The registry exists for COM. Other things use since Win 95.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A COM server may be already running or on a different computer. There needs to be a way to tell programs where the files are and on what computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ActiveX uses COM and is a type of COM server. It was also the marketing name for COM more generally but no longer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This lists the problems COM solves&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;Challenges Facing The Software Industry&lt;/em&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Constant innovation in computing hardware and software have brought a&#xA;  multitude of powerful and sophisticated applications to users'&#xA;  desktops and across their networks. Yet with such sophistication have&#xA;  come commensurate problems for application developers, software&#xA;  vendors, and users: &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;• Today's applications are large and complex—they are time-consuming&#xA;  to develop, difficult and costly to maintain, and risky to extend with&#xA;  additional functionality.      &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;• Applications are monolithic—they come&#xA;  prepackaged with a wide range of features but most features cannot be&#xA;  removed, upgraded independently, or replaced with alternatives.  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;• Applications are not easily integrated—data and functionality of one&#xA;  application are not readily available to other applications, even if&#xA;  the applications are written in the same programming language and&#xA;  running on the same computer.  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;• Operating systems have a related set of problems. They are not sufficiently modular, and it is  difficult to override, upgrade, or replace OS-provided services in a&#xA;  clean and flexible fashion.    &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;• Programming models are inconsistent&#xA;  for no good reason. Even when applications have a facility for&#xA;  cooperating, their services are provided to other applications in a&#xA;  different fashion from the services provided by the operating system&#xA;  or the network. Moreover, programming models vary widely depending on&#xA;  whether the service is coming from a provider in the same address&#xA;  space as the client program (via dynamic linking), from a separate&#xA;  process on the same computer, from the operating system, or from a&#xA;  provider running on a separate computer (or set of cooperating&#xA;  computers) across the network.     &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In addition, a result of the trends&#xA;  of hardware down-sizing and increasing software complexity is the need&#xA;  for a new style of distributed, client/server, modular and&#xA;  &quot;componentized&quot; computing. This style calls for: &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;• A generic set of facilities for finding and using service providers&#xA;  (whether provided by the operating system or by applications, or a&#xA;  combination of both), for negotiating capabilities with service&#xA;  providers, and for extending and evolving service providers in a&#xA;  fashion that does not inadvertently break the consumers' earlier&#xA;  versions of those services.    &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;• Use of object-oriented concepts in&#xA;  system and application service architectures to better match the new&#xA;  generation of object-oriented development tools, to manage increasing&#xA;  software complexity through increased modularity, to re-use existing&#xA;  solutions, and to facilitate new designs of more self-sufficient&#xA;  software components.       &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;• Client/server computing to take advantage&#xA;  of, and communicate between, increasingly powerful desktop devices,&#xA;  network servers, and legacy systems.       &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;• Distributed computing to&#xA;  provide a single system image to users and applications and to permit&#xA;  use of services in a networked environment regardless of location,&#xA;  computer architecture, or implementation environment.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note this is no longer available online and has been replaced by &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/win32/com/the-component-object-model&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.microsoft.com/en-us/windows/win32/com/the-component-object-model&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the introduction of the draft standards for COM (ver 0.9 October 24, 1995). Copied from MSDN Library October 2001. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also from Windows 95 Resource Kit introducing the Win95 Registry (Win 3.11 already had a small OLE registry).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Windows 95 Registry&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The central information database for Windows 95 is called the&#xA;  Registry. This hierarchical database both simplifies the operating&#xA;  system and makes it more adaptable. The Registry simplifies the&#xA;  operating system by eliminating the need for AUTOEXEC.BAT, CONFIG.SYS,&#xA;  and INI files (except when legacy applications require them). It makes&#xA;  the operating system more adaptable by storing user-specific and&#xA;  configuration-specific information so you can share one computer among&#xA;  multiple users and you can have more than one configuration (such as&#xA;  in-the-office and on-the-road configurations) for each computer.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;A primary role of the Registry in Windows 95 is to serve as a central&#xA;  repository for hardware-specific information for use by the hardware&#xA;  detection and Plug and Play system components. Windows 95 maintains&#xA;  information about hardware components and devices that have been&#xA;  identified through an enumeration process in the hierarchical&#xA;  structure of the Registry. (This process is &quot;Configuration Manager&quot;&#xA;  later in this chapter.) When new devices are installed, the system&#xA;  checks the existing configuration in the Registry to determine the&#xA;  hardware resources (for example, IRQs, I/O addresses, DMA channels,&#xA;  and so on) that are not being used, so the new device can be properly&#xA;  configured without conflicting with a device already installed in the&#xA;  system.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Windows 3.1 used initialization (INI) files to store system-specific&#xA;  or application-specific information on the state or configuration of&#xA;  the system. For example, the WIN.INI file stored information about the&#xA;  appearance of the Windows environment, the SYSTEM.INI file stored&#xA;  system-specific information on the hardware and device driver&#xA;  configuration of the system, and various INI files (such as MSMAIL.INI&#xA;  and WINWORD6.INI) stored application-specific information.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The Registry remedies this situation by providing a single location&#xA;  for a computer's configuration information. The following table shows&#xA;  other difficulties or limitations caused by using INI files that are&#xA;  overcome by using the Registry.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Problems using INI files  Solutions using the Registry&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;INI files are text-based, and are limited to 64K in total size.   The&#xA;  Registry has no size restriction and can include binary and text&#xA;  values. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Information stored in INI files is non-hierarchical and supports only&#xA;  two levels of information (specifically, section headings with a list&#xA;  of key names under each). The Registry is hierarchically arranged.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Many INI files contain a myriad of switches and entries that are&#xA;  complicated to configure or are used only by operating system&#xA;  components.   The Registry contains more standardized values. For more&#xA;  information, see Chapter 6, &quot;Setup Technical Discussion.&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;INI files provide no mechanism for storing user-specific information,&#xA;  thus making it difficult for multiple users to share a single computer&#xA;  or for users who move around on the network to have access to their&#xA;  user-specific settings.   The Hkey_Users key stores user-specific&#xA;  information. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Configuration information in INI files is local to each system, and no&#xA;  API mechanisms are available for remotely managing configuration, thus&#xA;  making it difficult to manage multiple computers. The Registry can be&#xA;  remotely administered and system policies (which are stored as&#xA;  Registry values) can be downloaded from a central server each time a&#xA;  new user logs on. For more information, see Chapter 15, &quot;User Profiles&#xA;  and System Policies,&quot; and Chapter 16, &quot;Remote Administration.&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;When you upgrade from Windows 3.1 to Windows 95, system-specific&#xA;  information such as the static reference to loading virtual device&#xA;  drivers is moved, as appropriate, from the SYSTEM.INI file to the&#xA;  Registry. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;For backward compatibility, Windows 95 does not ignore AUTOEXEC.BAT,&#xA;  CONFIG.SYS, and INI files, because many Win16-based applications still&#xA;  use them. For example, Windows 95 allows Win16-based applications to&#xA;  use INI files for the parameters, device drivers, and so on, that the&#xA;  applications need to run. In addition, Windows 95 continues to examine&#xA;  the [386Enh] section of SYSTEM.INI at startup to check for virtual&#xA;  device drivers. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;One advantage of the Registry for Win32-based applications is that&#xA;  many of the Win32-based Registry APIs can be used remotely through the&#xA;  remote procedure call (RPC) mechanism in Windows 95 to provide access&#xA;  to Registry information across a network. This means that network&#xA;  administrators can use system management tools to access the contents&#xA;  of the Registry for any computer on the network. (Of course, the&#xA;  remote computer must be configured to allow remote administration, and&#xA;  must have user-level security.)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;With Windows 95 remote administration, industry management mechanisms&#xA;  such as Simple Network Management Protocol (SNMP) can easily be&#xA;  integrated into Windows 95, simplifying the management and support&#xA;  burden of the network administrator. For more information, see Chapter&#xA;  16, &quot;Remote Administration.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="16287" LastEditorUserId="16287" LastEditDate="2020-05-06T22:02:08.997" LastActivityDate="2020-05-06T22:02:08.997" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14709" PostTypeId="2" ParentId="14702" CreationDate="2020-05-07T02:37:45.547" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So my question is how did windows evolve with the various MS server&#xA;  OS?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, it depends what you mean by &quot;an OS&quot; :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been a Windows NT user since the first version (so-called 3.1); NT is of course the base for current versions of Windows. Somewhere in the early days, NT was released as &quot;Windows NT Workstation&quot; and &quot;Windows NT Server&quot;.  They were fundamentally the same operating system. The difference was that NT Server had more &quot;enterprise application software&quot; on it, different licensing terms, and different default tuning parameter settings.  But as far as the kernel and the view of the system as seen by the programmer - no significant differences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early on, NT Workstation and NT Server were released simultaneously. Later in life, the two became separate - mainly (or so I believe) to ensure the Workstation release schedule was not delayed by the more complex interoperation testing required for the Server system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, from the point of view of an NT user: Windows is both a workstation operating system and a server operating system, and always has been. They evolved together by virtue of being the same thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays we don't say &quot;NT&quot; because NT is all the Windows there is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Terminology note: something like MS SQL Server is an application which runs on Windows (NT) Server.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-05-07T02:37:45.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14710" PostTypeId="2" ParentId="14683" CreationDate="2020-05-07T04:44:18.997" Score="1" Body="&lt;p&gt;By the nature of network effects, there was always going to be a single dominant OS. Nobody at that time was able to pull off 100% compatibility with a complex GUI and its ABI. (DOS was still simple enough that there were at least three.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wasn’t going to run on proprietary hardware based on the Motorola 68K (like the Mac or Amiga), because that was more expensive and incompatible with existing software and third-party hardware. That was even more true of UNIX workstations. It wasn’t DesqView because that had no GUI and the company was too small to make a big splash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many people at the time expected it to be IBM’s OS/2, but IBM turned out to be so bad at selling it that its own personal computers shipped with Windows. It also did a poor job of prioritizing the features customers actually wanted. Most egregiously, early versions could not print anything and had no GUI. By the time IBM got OS/2 into a usable state, they had to bundle a copy of Windows with it to make it compatible. By then, Microsoft had won.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2020-05-07T04:59:28.937" LastActivityDate="2020-05-07T04:59:28.937" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14711" PostTypeId="1" CreationDate="2020-05-07T16:27:31.227" Score="17" ViewCount="3301" Body="&lt;p&gt;Prior to 1972, was there any automated unit-testing? Did any assemblers include a testing a framework?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can find some &lt;a href=&quot;https://ieeexplore.ieee.org/abstract/document/1646913&quot; rel=&quot;noreferrer&quot;&gt;academic journals on this topic&lt;/a&gt; from the late 70s -- most of which I don't have access too, but I don't see any implementations or examples of it. What providers pushed automated unit testing? Did automated software unit testing start with tooling for C or are there prior examples?&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="8579" LastEditDate="2020-05-08T02:22:32.697" LastActivityDate="2020-06-11T15:59:44.633" Title="Was there any automated unit testing prior to 1972?" Tags="&lt;assembly&gt;&lt;testing&gt;" AnswerCount="3" CommentCount="12" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14712" PostTypeId="2" ParentId="11878" CreationDate="2020-05-07T16:53:03.563" Score="3" Body="&lt;p&gt;The example in the original question isn't completely true. If a 32-bit Win32 application crashes in both Windows 95 or Windows NT4 / Win 7 that program will crash and nothing else will be affected. Now there surely are some bugs in the Win95 Win32 API that could be used by a program to crash the whole system, but that's not the focus here. It's not that a win32 program could crash all of Win95, it's that other types of programs and privileges were allowed on Windows 95 that aren't allowed on Windows NT through 7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 95 is just an extension of Windows 3.1 in 386 enhanced mode with Win32s installed. Windows 3.1 runs on top of DOS. DOS gives programs complete control over the computer until that program exits. If a program locked up you had to reboot. If a program crashed you should reboot because you don't know if the memory used by DOS got corrupted or not. 16-bit Windows applications use a more complicated method of sharing memory and there is no memory protection, so one program can access memory belonging to another process or Windows itself. So one program crashing meant the whole computer should be restarted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows NT introduced fully virtualized DOS and 16-bit program environments. A 16-bit program can crash all of the 16-bit programs running on NT but that's it. It continues to work that way on 32-bit Windows 7. There is no more direct access to hardware or memory that is used by the oprating system. The only way to crash NT is with a driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, it's not so much 32-bit programs on Windows 95 that crashes Win 95, it's the abundance of DOS and 16-bit programs that are running which have direct access to operating system memory for legacy compatibility. The operating system itself is largely 16-bit.&lt;/p&gt;&#xA;" OwnerUserId="18056" LastActivityDate="2020-05-07T16:53:03.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14713" PostTypeId="1" CreationDate="2020-05-07T17:34:41.227" Score="3" ViewCount="1041" Body="&lt;p&gt;Windows 9x is no longer common, and isn't commonly supported. While there exist many solutions to burning ISO to USB or other storage device, most fail at some point, with commonly useless if any information online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the known ways to install Windows 9x entirely from USB stick, or any other unconventional device?&lt;/p&gt;&#xA;" OwnerUserId="15407" LastEditorUserId="15407" LastEditDate="2020-05-07T19:52:00.900" LastActivityDate="2021-01-23T18:36:49.530" Title="How do I install Windows 9x on an older machine from a flash drive (or any other unconventional device)" Tags="&lt;windows-98&gt;&lt;windows-95&gt;&lt;windows&gt;&lt;windows-me&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14714" PostTypeId="2" ParentId="14713" CreationDate="2020-05-07T17:34:41.227" Score="5" Body="&lt;p&gt;Here is the solution I found. This probably isn't the only possible solution, but the only one that worked so far. Feel free to contribute, as it's likely imperfect&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The guide generally &lt;strong&gt;assumes the computer can boot off your device&lt;/strong&gt;. The workaround to boot off USB will be posted, but it might be easier to just stop at this point if the computer cannot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: You'd want to use a 2-4 GB USB stick. The newer 32+ GB sticks aren't always recognised by older BIOS&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Download FreeDOS &lt;strong&gt;legacy&lt;/strong&gt;, Windows 9x image, UltraISO. Install UltraISO (trial version will do). &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;UltraISO will be used as it doesn't hide the USB contents (as rufus does. If a solution with rufus found, feel free to switch the guide over to rufus)&lt;/li&gt;&#xA;&lt;li&gt;FreeDOS is chosen over MS-DOS because of pragmatic reasons, such as,&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;FreeDOS supports large capacity FAT32 out of the box, MS-DOS will struggle with large-capacity volumes&lt;/li&gt;&#xA;&lt;li&gt;FreeDOS appears to natively prefer the modern filename conventions, compared to 8:3 filenames. Something that could become a problem later on in the guide if MS-DOS was used&lt;/li&gt;&#xA;&lt;li&gt;MS-DOS was distributed initially on floppies, which makes it &lt;a href=&quot;https://superuser.com/a/1239745&quot;&gt;quite difficult&lt;/a&gt; to burn onto USB. Especially for it's to be used with legacy hardware&lt;/li&gt;&#xA;&lt;li&gt;FreeDOS supports USB r/w, something that might come in handy if you get in trouble&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;FreeDOS legacy is probably what you want. It seems like FreeDOS mainstream requires on the machine to support some extended CPU command set, not always found on legacy hardware.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Start UltraISO, open Freedos legacy ISO. Go to Bootable -&gt; Write disk image. Select,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Disk Drive: (your USB)&lt;/li&gt;&#xA;&lt;li&gt;Write Method: &quot;USB-HDD+ v2&quot;&lt;/li&gt;&#xA;&lt;li&gt;Hide Boot Partition: &quot;None&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then press &quot;Write&quot;, &quot;Yes&quot;. The image burning should take ~5 minutes&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Close UltraISO, open it back again. Open your Windows 9x image and extract the image contents to some folder &lt;code&gt;ISO&lt;/code&gt; (you could use your archiving app for this matter, too, not just UltraISO). Then copy the folder onto your flash device.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Also copy the drivers and software you need to the folder &lt;code&gt;SW&lt;/code&gt; on your USB flash drive&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Unplug the device and plug it to your to-be Windows 9x machine. Go to BIOS and  see if you can boot off your USB stick&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If you can, proceed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you cannot, you are probably into the world of pain. At one time what worked for me if getting a second small USB stick that it could &lt;em&gt;somehow&lt;/em&gt; see,  writing an &lt;code&gt;Easybcd BIOS extender&lt;/code&gt; onto it&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;After having booted up, do install FreeDOS onto the to-be Windows 9x machine. Install the base (minimalistic) package without sources&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;While still USB plugged in, copy over the &lt;code&gt;ISO&lt;/code&gt; and &lt;code&gt;SW&lt;/code&gt; folders onto the hard drive,&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;xcopy /s C:/ISO/ D:/ISO/&#xA;xcopy /s C:/SW/ D:/SW/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;/s&lt;/code&gt; - to tell xcopy to copy all of its subfolders, &lt;a href=&quot;https://stackoverflow.com/a/42175259&quot;&gt;source&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;C:&lt;/code&gt; - your USB (!) drive letter, always&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;D:&lt;/code&gt; - your HDD drive letter, seemingly always&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ol start=&quot;8&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Unplug the USB drive, and now boot from the internal storage. Notice that this time, &lt;code&gt;C:&lt;/code&gt; will be assigned to the internal storage (which eliminates bugs)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When prompted with the DOS configurations, select &quot;no drivers (emergency)&quot; configuration. This will prevent any bugs&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;CD&lt;/code&gt; to &lt;code&gt;ISO&lt;/code&gt; folder (&lt;code&gt;cd ISO&lt;/code&gt;), run &lt;code&gt;setup.exe&lt;/code&gt; with the switches you want. For example,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;setup.exe /nm /is /ie /c /p j;a&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;/NM&lt;/code&gt; (No Machine checking, allows installation from FreeDOS) and &lt;code&gt;/IS&lt;/code&gt; (Ignore Scandisk) are &lt;a href=&quot;http://wiki.freedos.org/wiki/index.php/Windows&quot; rel=&quot;noreferrer&quot;&gt;prescribed by FreeDOS&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;11&quot;&gt;&#xA;&lt;li&gt;Install Windows 9x!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S. Other options tried&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Conventionally burn an image onto USB with UltraISO / Rufus -&gt; boots ok, BSODs when installing drivers with `Fail to read from C:/&quot; (the USB)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Conventionally burn an image onto USB with UltraISO / Rufus, begin the installation of Win9x from another media, unplug USB when beginning the installation -&gt; Hangs before getting to GUI. If unplugged later, the GUI setup alleges it'd need to write 5.1 MB onto drive C:/ (the drive-letter assigned to the USB, possibly the installer app bug)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Conventionally burn an image onto USB with UltraISO / Rufus, change autoexec.bat to use other drive-letter - no luck&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15407" LastEditorUserId="15407" LastEditDate="2020-05-07T17:41:07.947" LastActivityDate="2020-05-07T17:41:07.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14715" PostTypeId="2" ParentId="14670" CreationDate="2020-05-07T17:57:53.050" Score="13" Body="&lt;p&gt;Short answer: to ensure smooth transition from COM-less OLE 1 to COM-based OLE 2.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Slightly longer answer: the foundational use case for COM was OLE2. OLE2, as well as OLE1 before that, was based upon the idea that server applications register themselves in a common repository so that OLE client applications can find them &lt;em&gt;without foreknowledge about the exact nature of the server apps&lt;/em&gt;. In other words, OLE was all about &lt;strong&gt;dynamic discovery of servers by clients&lt;/strong&gt;, as opposed to working with a known server. Ergo, the need for a common repository of servers.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Now, the long answer.&lt;/p&gt;&#xA;&lt;p&gt;COM was introduced together with OLE 2. OLE stands for Object Linking and Embedding, and like others said, it was an interprocess communication protocol for embedding pieces of content from one app (the server) in another app's document (the client). It was supported as early as 16-bit Windows 3.1.&lt;/p&gt;&#xA;&lt;p&gt;Before OLE 2, there was OLE 1. Same business case, different UI paradigm, different underlying mechanism. In OLE 2, the server app would present its UI (e. g. the menu commands) inside the client app's window when the embedded content (&amp;quot;the embedded object&amp;quot;) was activated, whereas in OLE 1, upon object activation, the server would have to create and display its own window, and implement a &amp;quot;save and return to the client&amp;quot; functionality to pass the altered piece of content back to the client app.&lt;/p&gt;&#xA;&lt;p&gt;Anyways. To let users embed an object, the OLE client would usually have an &amp;quot;Insert Object&amp;quot; dialog with a list of available object types (Word document, Excel table, equation, graph, etc.). In order to present said list, OLE had to store them somewhere. Incidentally, those object types would roughly correspond to &lt;em&gt;document&lt;/em&gt; types. If there's MS Word on the system, the &amp;quot;Insert Object&amp;quot; dialog presents &amp;quot;Word Document&amp;quot; as one of the choices, etc. Now, here's the crucial bit: &lt;strong&gt;even before OLE was around, Windows used the the proto-registry (then called &amp;quot;the registration database&amp;quot;) to store a list of supported document types&lt;/strong&gt;. When you double-click, say, on a Word document in File Manager, the logic would take a look at the registry to find out that the .doc extension corresponds to a Word document (the key &lt;code&gt;Word.Document&lt;/code&gt;), then figure out that the Word document supports an &lt;code&gt;Open&lt;/code&gt; verb and the executable for that is winword.exe, and invoke the latter, passing the file name.&lt;/p&gt;&#xA;&lt;p&gt;When OLE 1 was introduced, rather than create another tally, they would extend the registration tree for a document type (AKA &lt;code&gt;ProgID&lt;/code&gt;) to support indicating the fact that it's embeddable. Some ProgIDs didn't have corresponding file extensions but were embeddable all the same.&lt;/p&gt;&#xA;&lt;p&gt;OLE 1 was not a general purpose object framework (if there was one, it was well hidden and not documented). In OLE 1, there were only three predefined interfaces, rather than a couple dozen and an infrastructure for defining your own, like in COM/OLE 2. When OLE 2 came, along with a general purpose object framework (i. e. COM), they would extend the registration format even further. That's when the &lt;code&gt;CLSID&lt;/code&gt; key first appeared under ProgID. This enabled, among other things, server applications supporting both OLE 1 and OLE 2 side by side.&lt;/p&gt;&#xA;&lt;p&gt;So applications like Word went from advertising their support for DOC files via the registry, to advertising their support for embedding (via OLE) its documents, to advertising their COM objects. All within the same datastore. In the same key tree, even.&lt;/p&gt;&#xA;&lt;p&gt;OBTW, the original purpose of the registry - a means to track a document file extension to the EXE path of the host application - still stands to this day.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;EDIT, to refresh our collective memories. I've downloaded a fresh copy of Windows for Workgroups 3.11 from MSDN, and installed it under DOSBox.&lt;/p&gt;&#xA;&lt;p&gt;It comes with OLE1 &lt;strong&gt;and the registry&lt;/strong&gt; out of the box. &lt;code&gt;Olecli.dll&lt;/code&gt; and &lt;code&gt;olesvr.dll&lt;/code&gt; are both present under \Windows\System. Both &lt;code&gt;reg.dat&lt;/code&gt; and &lt;code&gt;regedit.exe&lt;/code&gt; are present under \Windows. Running &lt;code&gt;regedit /v&lt;/code&gt; brings up the tree:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NRRzZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NRRzZ.png&quot; alt=&quot;Windows 3.11 registry editor&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Notably, the Write text editor (a predecessor to WordPad) has an &lt;code&gt;Insert Object&lt;/code&gt; command/dialog in it, with three options - Sound, Paintbrush picture, and Package:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gdzu4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gdzu4.png&quot; alt=&quot;OLE 1 Insert Object dialog in Write on Windows 3.11&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;There isn't a trace of COM in the system.&lt;/strong&gt; See how there's no &lt;code&gt;CLSID&lt;/code&gt; under &lt;code&gt;SoundRec&lt;/code&gt;, even though it's an embeddable object. Instead, there's &lt;code&gt;protocol\StdFileEditing\server&lt;/code&gt;, which was the OLE1 way of registering a server. None of the COM libraries (&lt;code&gt;combase.dll&lt;/code&gt;, etc.) are under windows\system. &lt;code&gt;CLSID&lt;/code&gt; isn't under the registry root.&lt;/p&gt;&#xA;&lt;p&gt;Same story in Windows 3.1. Unfortunately, MSDN doesn't offer an English version for download. I've got a Russian one to check, it's all the same - OLE1 is present, COM isn't. Windows 3.0 isn't available on MSDN.&lt;/p&gt;&#xA;" OwnerUserId="18057" LastEditorUserId="18057" LastEditDate="2021-01-22T14:06:49.783" LastActivityDate="2021-01-22T14:06:49.783" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14716" PostTypeId="2" ParentId="14711" CreationDate="2020-05-07T18:04:14.417" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Prior to the creation of C, was there any unit-testing? Did any assemblers include a testing a framework?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Erm. There is no specific relation between C and testing. C as a language doesn't feature any mechanics for (unit) testing. Testing was and is a distinct item in its own right. Like for many other components of development, more generic tools and procedures have been developed and provided. Nowadays often seen as natural parts of a language, as the are presented in an integrated way - hence the common name Integrated Development Environment - but they are only made to look that way, they are still just sold as a package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, there are languages that naturally ease some aspect of automated testing - usually as side effect due the formal way of specification they employ to reduce undesired effects. The same information can be used seamless for certain parts of verification and test automation. I'm for one a great fan of Ada (*1). It's way of clear defined data and operations thereon allows not only detection of unsafe or faulty constructs during compilation, but as well on demand addition of test.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another great example is VHDL, as here the definition of a test bench is (almost) mandatory and part of the language. So while a test framework is part of VHDL, it also shows that any framework (beyond simple, formal checking), goes beyond what a language can do and is always application based.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I can find some academic journals on this topic -- most of which I don't have access too, but I don't see any implementations or examples of it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because testing always has been and forever will be a domain of application specific tests. While some languages are (or have developed to be) supportive of test scenarios, it's the application environment that defines the how and wherewith. This is the same way true for unit tests as complete runs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus tests are not only language independent, but also technology independent. Testing goes goes back into the age of mechanical punch card operation. I remember porting an application from stand alone (batch) /370 Assembly, operating on punch cards to a disk based environment (as well /370 Assembly - but we finally got red of all the highly opaque manual/scripted batch). These were the early 1980s. One fun part was that this batch application itself has been converted some 10+ years before from mechanical punch card to /360 Assembly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Among the documentation I found a set of card stacks, various plug sheets a one special page: the test bench for the run. It was a rather complex setup with several plug sheets involved and multiple tabulator runs. Whenever it was set up for production these stacks were feed to the tabulators to produce an output stack. This output stack, and one of the test stacks was then to be fed to a &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/collators.html&quot; rel=&quot;noreferrer&quot;&gt;collator&lt;/a&gt; plugged (the collator plug schematic was part of the documentation) to compare both stacks. The documentation stated that this had to be done before each and every run were the machines have been used otherwise inbetween.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short: Test benches have always been a thing and there has been automated support even in the dark ages of mechanical computing. The difference is like with all our too in vastly grown resources that allow more support than ever before.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Yes, Ada and Assembler do get well together in my mind, as both allow almost unlimited freedom in design. One just needs to specify what is intended. In the end they only differ that in Assembly one can talk dirty without coming clean, while in Ada everything has to be spelled out in a calm and polite manner :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-05-07T18:04:14.417" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14717" PostTypeId="2" ParentId="13016" CreationDate="2020-05-07T22:41:55.430" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://www.westerndesigncenter.com/wdc/w65c265s-chip.cfm&quot; rel=&quot;nofollow noreferrer&quot;&gt;W65C265S&lt;/a&gt;, a 65816 based micro controller, has the entirety of the 24b address bus exposed, with a separate 8b data bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, to be clear, the '265S is &quot;not&quot; a 65816. It's very, very close. But not withstanding the on board peripherals and decoding logic, it has some different interrupt vectors that could make '265S code incompatible with a box stock 65816. For all practical purposes they're identical from a software purposes, but there are some minor differences.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-05-07T22:41:55.430" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14718" PostTypeId="2" ParentId="14711" CreationDate="2020-05-07T23:42:36.630" Score="33" Body="&lt;h1&gt;Yes: The Apollo Guidance Computer&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Uodate:&lt;/strong&gt; &lt;a href=&quot;https://ntrs.nasa.gov/search.jsp?R=19880069935&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Computers in Spaceflight: The NASA Experience&lt;/em&gt;&lt;/a&gt; confirms that unit testing was performed on the Apollo software:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The simulations followed &lt;strong&gt;individual unit tests&lt;/strong&gt; and integrated tests of portions of the software. At first, MIT left these tests to the programmers to be done on an informal basis. It was very difficult at first to get the Instrumentation Laboratory to supply test plans to NASA. [...]  NASA exerted some pressure on MIT to be more consistent in testing, and it eventually adopted a four-level test structure based largely on the verification of the Gemini Mission Control Center developed by IBM in 1964. This is important because formal release of the program for rope manufacture was dependent on the&#xA;  digital simulations only.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;p. 47&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;At one point Bill Tindall, NASA's overseer of the MIT effort, complained about the lack of unit testing:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;On June 13, Tindall reported that the AS-204 program undergoing integrated tests had bugs in every module. &lt;strong&gt;Some had not been unit tested&lt;/strong&gt; prior to being integrated. This was a serious breach of software engineering practice.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;p. 50&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Tindall's memo is archived &lt;a href=&quot;http://tindallgrams.net/66-FM1-75&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  You can see that he calls it a &quot;unit test&quot; on June 13, 1966:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In fact, some of the programs –- the 30 and 40 series -– have not even been &lt;strong&gt;unit tested&lt;/strong&gt;, although they have been included in the program assembly currently being used for system tests. This is certainly a very unsatisfactory situation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The command modules and lunar modules of the Apollo space program were each controlled by the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apollo_Guidance_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;same model of guidance computer&lt;/a&gt;.  It was the first computer built from integrated circuits (NOR gates).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The software for the AGC was written by a team led by &lt;a href=&quot;https://en.wikipedia.org/wiki/Margaret_Hamilton_(software_engineer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Margaret Hamilton&lt;/a&gt; at the Draper Laboratory of MIT.  It was &lt;a href=&quot;https://github.com/chrislgarry/Apollo-11&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;&lt;em&gt;written in assembly language&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;, with an assembler written by the Draper team.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hamilton was particularly concerned about how software handled errors.  At the time, errors were often dismissed as &quot;bugs&quot;.  Hamilton knew that this was not acceptable for the Apollo software, not only because the executable code was hand-woven into core memory -- making changes difficult -- but also because the lives of the astronauts were at stake.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Individual sections of the software were tested as they were written.  Special tests were made on the running code:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Executable tests may have first been introduced by Margaret Hamilton on the Apollo project in the mid-1960s, where she originated a type of executable checking that we now call “static code analysis.” She called it “higher-order software,” by which she meant software that operates against other software rather than directly against the problem domain. Her higher-order software examined source code to look for patterns that were known to lead to integration issues.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://www.leadingagile.com/2018/10/unit-testing-shell-scriptspart-one/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.leadingagile.com/2018/10/unit-testing-shell-scriptspart-one/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Hamilton named their method &quot;software engineering&quot;.  She later formalized it, wrote over 130 papers, and started several companies specializing in software engineering.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In 1986 she began her current company Hamilton Technologies.  At Hamilton Technologies projects focus on work Hamilton began while at MIT including a Universal Language System. This system develops software off the theory “Development Before the Fact.” It focuses on the function and timing of data within a system to prevent errors before they occur. The automation of this system created the 001 Tool Suite (pronounced double-oh-one), an updated version of the work Hamilton began in her first company. The 001 Tool Suite  is used to develop automatic software code and simulations.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://sheromargarethamilton.wordpress.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sheromargarethamilton.wordpress.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In 2016, Hamilton received the highest civilian honor in the U.S. -- the Presidential Medal of Freedom -- for her groundbreaking work in software engineering.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2020-06-11T15:59:44.633" LastActivityDate="2020-06-11T15:59:44.633" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14719" PostTypeId="2" ParentId="14711" CreationDate="2020-05-08T00:10:36.627" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Was there any Unit-Testing prior to 1972?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes there was.  Only a fool would put a system together out of untested and undebugged parts and then try to make the system work.  No framework is needed: you write some code, you test it in isolation: that's unit testing by original definition. Now you can combine your units into the next level of thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mid-1970s (ok, not before 1972, but the art doesn't change that quickly) I wrote a PDP-11 driver for a synchronous communication device, which I debugged by wrapping it in some code that simulated at some level the operation of the hardware. That's a unit test. The driver basically worked by the time it saw real hardware.  The test structure got thrown away (well, packed into my bag of useful pieces) once the driver worked; from that point it was tested in use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may be confusing &quot;automated unit testing&quot; with &quot;unit testing&quot;.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-05-08T00:10:36.627" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14720" PostTypeId="2" ParentId="14632" CreationDate="2020-05-08T01:48:00.033" Score="0" Body="&lt;p&gt;One thing to remember is that you are reading a printed magazine.  Writing 512 MB is a lot &lt;em&gt;louder&lt;/em&gt; than 512 Mb.  Magazine style guides may have dictated using a lower-case &quot;b&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also worth noting that storage sizes (memory, disk, whatever) have always been measured in bytes, so kb and Mb (there really wasn't any Gb in those days) were always unambiguously measured in bytes.  Even when you working with error-corrected memory (when a byte takes up more than 8 bits), you count in bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only time you see &quot;b&quot; referencing bit (rather than byte) is in network speeds.  And, network speeds measured in bits can be deceptive; if you are passing one kB of information down a wire, you will pass more than 8 kb of bits. &lt;/p&gt;&#xA;" OwnerUserId="9166" LastActivityDate="2020-05-08T01:48:00.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14721" PostTypeId="1" AcceptedAnswerId="14723" CreationDate="2020-05-08T06:21:54.957" Score="6" ViewCount="363" Body="&lt;p&gt;The Leningrad contains a shift register&lt;sup&gt;1&lt;/sup&gt;, which I believe is loaded with data from the bitmap. This part loads 8 bits in parallel, and shifts each bit out in turn on the rising edge of a clock signal. This clock signal is called /ТИ (meaning Тактовый Импульс, or clock pulse, spelled TI in our alphabet) and is 7MHz (divided from 14 via a D flip flop).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, its output, a bitstream which makes up the picture, is fed to another shift register&lt;sup&gt;2&lt;/sup&gt;. This one is a four-bit shift register, but only one bit is used. Its output is called INFV, which is fed to the demultiplexer that selects the attribute color. It's clocked to ТИ (the inverse of the signal which clocks the first shift register).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why are two shift registers needed here? The four-bit one in particular makes no sense to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the following schematic, this arrangement may be found on the far right, about half-way down. It's parts DD33 and DD35.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/UB48L.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UB48L.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I have also seen variants using two ИР16s I place of the ИР9, three in total, possibly a BOM cost optimisation. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;1: КР1533ИР9, or 74LS165, a parallel load 8-bit shift register&lt;br&gt;&#xA;2: КР1533ИР16 or 74LS295, a 4-bit right-shift left-shift register with 3-state outputs&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2020-05-08T11:42:47.880" LastActivityDate="2020-05-08T11:42:47.880" Title="What role does the 4-bit shift register play in the Leningrad video generation?" Tags="&lt;zx-spectrum&gt;&lt;video&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14722" PostTypeId="2" ParentId="6006" CreationDate="2020-05-08T07:14:57.543" Score="2" Body="&lt;p&gt;My Z88 serial number is #034368.&lt;/p&gt;&#xA;" OwnerUserId="18060" LastEditorUserId="129" LastEditDate="2020-05-08T07:46:01.070" LastActivityDate="2020-05-08T07:46:01.070" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14723" PostTypeId="2" ParentId="14721" CreationDate="2020-05-08T09:12:41.120" Score="10" Body="&lt;p&gt;The second shift register is wired to provide a 4-cycle delay after the pixel data is loaded before it is displayed. This is presumably designed to allow the system enough time to load the corresponding attribute data into the pair of storage multiplexers labelled D30 and D31 after the pixels are fetched but before they start displaying; if it were missing, I suspect the first 4 pixels in each block would show using the attributes from the previous block.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-05-08T09:12:41.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14724" PostTypeId="1" AcceptedAnswerId="14725" CreationDate="2020-05-08T09:56:31.890" Score="3" ViewCount="178" Body="&lt;p&gt;The Welsh computer has a coax output and a resolution of 256x192, can I expect this to display at all on my Philips 50&quot; 4K TV using the same input?&lt;/p&gt;&#xA;" OwnerUserId="15255" LastActivityDate="2020-05-08T10:21:37.380" Title="How to connect a Dragon32 to a HD TV?" Tags="&lt;connector&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14725" PostTypeId="2" ParentId="14724" CreationDate="2020-05-08T10:21:37.380" Score="8" Body="&lt;p&gt;The Dragon 32 has two display outputs.  One is a UHF analogue TV signal, which will work if your TV has an analogue-capable tuner.  The other is a composite video output on a DIN socket, which you can wire up a cable for with a little effort; most good TVs have a composite video input somewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both will use PAL-I video timings.  These are normally supported by TVs, except possibly if they were sold in the US.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-05-08T10:21:37.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14726" PostTypeId="2" ParentId="14615" CreationDate="2020-05-08T12:05:25.320" Score="6" Body="&lt;p&gt;Very little seems to be known about the SPC-650. Apparently it didn't sell well, and ZX Spectrum compatibles were on the whole pretty much overlooked in the far east, excepting Russia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's &lt;a href=&quot;https://translate.google.com/translate?sl=ko&amp;amp;tl=en&amp;amp;u=https%3A%2F%2Fblog.naver.com%2FPostView.nhn%3FblogId%3Dbackmr%26logNo%3D40568950&quot; rel=&quot;noreferrer&quot;&gt;a blog&lt;/a&gt; which appears to claim that it, and the other clones in the series, has some design and performance changes. It doesn't say what exactly, which makes me think this is an error in the machine translation. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So did the Korean version also have localized ROMs, support for Hangul (the Korean writing system), or any other differences besides the extra writing on top?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't think so. There's no Hangul on the keyboard, plus it would be hard to squeeze Hangul support into the ROM. So I think it's no more than a generic straight-forward clone without bells and whistles.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-05-08T12:05:25.320" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14727" PostTypeId="2" ParentId="14647" CreationDate="2020-05-08T18:46:02.987" Score="14" Body="&lt;p&gt;Delphi 1.0 was released Feb 14, 1995. By my (now somewhat foggy) recollection, research / experimentation that directly contributed to defining the Delphi visual development experience started around 1992. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The research group included some folks who had previously worked at Xerox Parc Place on human-machine interface design and theory, as well as the Turbo Pascal core team. I think this research grouped numbered 3 or 4 full time engineers, plus part-time contributions and consultations from the Pascal engineering leads. Weekly demos became a standing-room-only event for the entire development tools team.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several prototypes of various approaches to defining program logic using only visual graphs were built, but were considered unsatisfactory due to rapidly escalating complexity for the developer. The canonical use case / app development benchmark for comparing IDE prototypes became &quot;Implement a calculator app&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This research led to Delphi's visual+code development model, where source code defined program logic and graphic designers defined UI composition, and the two were implicitly tied together and kept in sync.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of this research took place in Borland's offices at Green Hills Road, before the Pascal and C++ teams moved to the new Borland campus in 1993.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This UI research was concurrent with development of Turbo Pascal for Windows 1.5 and Borland Pascal 7.0, both released in 1992. The core Pascal product team numbered roughly 10-15 full time employees, including engineering, quality assurance (me!), doc, and product marketing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The OWL application framework of Turbo Pascal for Windows (developed for Borland by a contractor experienced in Windows development) provided many examples of pain points we did not want to repeat in Delphi. So in that regard, development of Turbo Pascal for Windows starting ca 1991 also contributed to the architectural and thematic goals and philosophies of Delphi and VCL. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the hard lessons learned from the Turbo Pascal 6 Turbo Vision framework and again from OWL was that object frameworks tend to create a high barrier to entry. Object inheritance and virtual method overrides require the developer to understand a lot about what they are inheriting from, what it does for them, and what it requires of them. This realization led to the event-driven programming model of Delphi, which all but eliminated prior knowledge requirements on developers. Events are largely &quot;contract-free&quot;, requiring no knowledge of inheritance or virtual overrides. This makes it much easier to get started and be productive with Delphi compared to previous products.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Development of an entirely new 32 bit Pascal compiler also took place during the same period, with a team of about 3 engineers brought in through acquisition of their company. This became the 32 bit Delphi compiler at the heart of Delphi 2.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At some point along the way (ca 1993, possibly earlier), the Pascal leadership team (Gary Whizin, Zack Urlocker, Anders Hejlsberg, and others) made a conscious decision to create and ship a 16 bit Delphi product first, as an on-ramp to a subsequent 32 bit Delphi product. There was concern (ca 1993) that there wouldn't be enough 32 bit machines or OS's on end-users' desks to drive sufficient sales of a 32 bit dev tool. Windows NT already existed and was fully 32 bit, but its adoption rate was frightfully small and it was not considered, marketed, or priced as a mass-market end-user OS. Borland was founded on the sales strategy of low price at high volume, which requires a mass-market platform - for developers, and for the users of the products the developers created with Borland tools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Planning to release a 16 bit Delphi product first also dovetailed with Microsoft's plans for a mass-market 16 bit Windows OS release (Win95). The release of Delphi 1.0 was completely dependent on the release of Win95 (&quot;Cairo&quot;), so slips in the Win95 release date were simultaneously welcomed by the Delphi dev team and cursed by the Borland sales teams. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll notice that Delphi 1.0 shipped in February 1995, but Win95 shipped in August 1995. The Delphi leadership team decided to take a gamble on releasing Delphi targeting a beta Win95 OS. I'm sure ending the 3 year gap in Borland product releases (No product from the Pascal dev team from 1992 to 1995) was a key factor. True, Delphi 1.0 and the apps it produced did run on Windows 3.1, but all attention and anticipation was on Win95.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This may have been the first product Borland released supporting a beta OS. After Delphi, releasing tools for Microsoft beta OSs became common practice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Delphi 2.0 development began in earnest almost simultaneously with Delphi 1.0's genesis. At least within the last year of Delphi 1.0 development (possibly much earlier), it became a release requirement that apps written in Delphi 1.0 VCL must recompile and run as 32 bit native apps in Delphi 2.0 with no code changes. Win32 was always the goal, Win16 was a means to get there.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's how Delphi 2.0, with an entirely new optimizing 32 bit compiler and 32 bit VCL and 32 bit IDE and debugger shipped only 1 year after Delphi 1.0. Critical parts of the 32 bit compiler and VCL were already running before Delphi 1.0 shipped.&lt;/p&gt;&#xA;" OwnerUserId="18065" LastEditorUserId="18065" LastEditDate="2020-05-08T18:52:17.970" LastActivityDate="2020-05-08T18:52:17.970" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14729" PostTypeId="2" ParentId="7995" CreationDate="2020-05-08T20:26:02.057" Score="0" Body="&lt;p&gt;Windows 98SE doesn't natively support USB flash drives, even though it does support USB hard drives. Early BIOSes that allowed booting from USB had the same issue.&lt;/p&gt;&#xA;&lt;p&gt;There is a program called Native USB disk driver for Windows 98 ... ver 3.3 that I have that installs drivers for USB flash drives as well as a USB2.0 drivers.&lt;/p&gt;&#xA;&lt;p&gt;A better way is to just go on &lt;a href=&quot;http://www.majorgeeks.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.majorgeeks.com/&lt;/a&gt; and search for unofficial Windows 98 service pack. It comes with a lot of enhancements including USB flash drive support &amp;amp; USB 2.0.&lt;/p&gt;&#xA;&lt;p&gt;Using a computer with a BIOS that supports booting from USB may be another way to access USB storage from DOS, including anything that runs on DOS such as Windows 9x.&lt;/p&gt;&#xA;" OwnerUserId="18056" LastEditorUserId="15407" LastEditDate="2020-07-08T11:21:48.077" LastActivityDate="2020-07-08T11:21:48.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14730" PostTypeId="2" ParentId="14713" CreationDate="2020-05-08T20:49:03.617" Score="2" Body="&lt;p&gt;You have to get the system booted up under DOS to start with. That's the hard part. If you have a working Windows 9x/ME system you can just format the flash drive as FAT16/32 and select to make the drive bootable. Copy the win98 folder from the Windows 98 setup CD on to the flash drive. Finding the DOS &lt;code&gt;fdisk&lt;/code&gt; and &lt;code&gt;format&lt;/code&gt; programs from a working Windows 9x install or Windows 98 boot floppy may be needed as the target drive will need to be partitioned and formatted prior to installing Windows. The flash drive should boot up like any other hard drive. Make sure the computer has 1GB of RAM or less else unpatched Windows may hang. Windows 97 (95 OSR2) and later versions support FAT32.&lt;/p&gt;&#xA;&lt;p&gt;You can use an emulator like QEMU to boot from a floppy image of a Windows 9x boot disk and set the flash drive device to the 1st hard drive. Then just run &lt;code&gt;sys a: c:&lt;/code&gt; in DOS after partitioning and formatting the flash drive to make it bootable. Copy utilities like &lt;code&gt;fdisk&lt;/code&gt; and &lt;code&gt;format&lt;/code&gt; from the boot disk to the flash drive so you can format the target hard drive.&lt;/p&gt;&#xA;&lt;p&gt;Now boot off the flash drive and run &lt;code&gt;fdisk&lt;/code&gt;. Now that C drive is created, reboot. Now format C:. Then run &lt;code&gt;setup.exe&lt;/code&gt; from the win98 folder. Windows 98 doesn't need any drivers so it should work on any computer, but you'll be stuck with VGA 16 color graphics. USB legacy support will be needed in the BIOS if you have a USB keyboard or mouse. You can install Windows to the same flash drive that you just booted from. You can also use the hard drive in the computer in place of the flash drive. Just follow the same directions but make the hard drive bootable to DOS rather than the flash drive.&lt;/p&gt;&#xA;&lt;p&gt;In any case once you have DOS installed it's a simple matter of running setup.exe from the win98 folder that was copied over. Even 32-bit Windows XP and earlier can be installed the same way from within DOS by running &lt;code&gt;winnt.exe /b&lt;/code&gt; from the i386 folder.&lt;/p&gt;&#xA;" OwnerUserId="18056" LastEditorUserId="15334" LastEditDate="2021-01-23T18:36:49.530" LastActivityDate="2021-01-23T18:36:49.530" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14731" PostTypeId="2" ParentId="7530" CreationDate="2020-05-09T07:41:09.343" Score="2" Body="&lt;p&gt;For dos there was F14 Tomcat from Activision, &#xA;Air Warrior from Kesmai, &#xA;F15 Strike Eagle but I don't know if that had 2 player functionality, &#xA;Air Warrior had black out effects, I forget if redout was there also, but then it didn't have modern jets&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Falcon3.0 sounds most likely but not on a 286&#xA;There was also F16 Combat Pilot from Spectrum Holobyte&#xA;And Mig-29 from Domark which I think had red and blackout effects&lt;/p&gt;&#xA;" OwnerUserId="18069" LastActivityDate="2020-05-09T07:41:09.343" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14733" PostTypeId="2" ParentId="6006" CreationDate="2020-05-09T12:52:44.493" Score="1" Body="&lt;p&gt;Just for evidence - my one has serial #24672: &lt;a href=&quot;https://i.stack.imgur.com/h5PV2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/h5PV2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-05-09T12:52:44.493" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14734" PostTypeId="1" AcceptedAnswerId="14741" CreationDate="2020-05-09T14:36:06.070" Score="5" ViewCount="620" Body="&lt;p&gt;I have a subroutine with a for/next loop in Extended Color BASIC on the TRS-80 Color Computer that I would like, sometimes, to return early from. That is, to return from the subroutine from within the for/next loop and before the for/next loop is completed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, what effect does exiting a FOR/NEXT loop early have on the TRS-80 Color Computer in Extended Color BASIC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought that exiting from a for/next loop early is bad because it leaves a FOR on a stack, and eventually that stack will fill up if the loops aren’t allowed to complete.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first experiment was:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 REM TEST FOR/NEXT WITH RETURN&#xA;10 PRINT &quot;HELLO&quot;&#xA;20 GOSUB 100&#xA;30 PRINT &quot;FINISHED&quot;, MEM&#xA;40 NEXT I&#xA;99 END&#xA;100 FOR I=1 TO 20&#xA;110 IF I&amp;gt;10 THEN RETURN&#xA;120 PRINT I,&#xA;130 NEXT I&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;NEXT I&lt;/code&gt; on line 40 generates an NF error. That is, Next without For. Thinking that perhaps the For/Next stack was cleared on a &lt;code&gt;RETURN&lt;/code&gt; to the point it was at the time of the &lt;code&gt;GOSUB&lt;/code&gt;, I tried another experiment using nothing but &lt;code&gt;GOTO&lt;/code&gt; to exit the loop:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 CLS&#xA;20 FOR I=1 TO 3&#xA;30 FOR J=1 TO 3&#xA;40 FOR K=1 TO 3&#xA;50 PRINT@128,L,MEM&#xA;60 GOTO 80&#xA;70 END&#xA;80 L=L+1&#xA;90 GOTO 20&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I let this run all night in XRoar; &lt;code&gt;L&lt;/code&gt; reached 766750 and the program was still running in the morning. (&lt;code&gt;MEM&lt;/code&gt; didn’t change from the second iteration on to the end.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KgKoV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KgKoV.png&quot; alt=&quot;For/Next break experiment&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the effects of exiting a For/Next loop early in Extended Color BASIC? How can I see these effects in a program? And, what, if any, are the side effects of returning from a subroutine from inside an unfinished For/Next loop?&lt;/p&gt;&#xA;" OwnerUserId="12313" LastEditorUserId="12313" LastEditDate="2020-05-09T19:50:08.643" LastActivityDate="2020-05-09T21:55:29.897" Title="What effect does exiting a FOR/NEXT loop early have on the TRS-80 Color Computer?" Tags="&lt;color-basic&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14735" PostTypeId="2" ParentId="14734" CreationDate="2020-05-09T16:44:28.997" Score="2" Body="&lt;p&gt;I can't speak on the inner workings of this BASIC.  But perhaps you can force the for/next to end &quot;naturally&quot; by manipulating &lt;strong&gt;i&lt;/strong&gt; directly.  I don't have a CoCo to test this on, but something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;100 FOR I=1 TO 20&#xA;110 REM IF I&amp;gt;10 THEN RETURN&#xA;120 PRINT I,&#xA;125 IF I&amp;gt;9 THEN I=20&#xA;130 NEXT I&#xA;140 RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;BASICally you set up the comparison at line 100 to flag completion. I don't see that this would have any side effects. The FOR loop completes, and the subroutine has only one exit point.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2020-05-09T16:44:28.997" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14736" PostTypeId="1" CreationDate="2020-05-09T17:03:46.207" Score="9" ViewCount="1875" Body="&lt;p&gt;I am into playing with TTL to build 1970s style minicomputers. Aside from talking to them via some serial (or parallel) I/O port to a terminal, I am wondering about display output. This here is about vector displays, I have not found much discussion on the internet about them, some arcade game people building vector displays, but I found little about schematics and principles. I remember back in the 1980s I checked out books about &quot;Computer Graphics&quot; from the library, but what I remember having read was very little detail. So now I am thinking this through, and I am beginning with raster dot graphics as a reference. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Pixel Graphics&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that a pixel graphics frame buffer module would essentially have a suitable high speed clock, a bunch of counters to generate the number of the present scan line and horizontal pixel position and do the proper sync to the CRT monitor (assuming you use a normal analog VGA / RGB monitor) and then these position numbers are turned into an address to pull the current pixel value from memory. Some contention resolution so that the CPU can write into the display RAM, or tricks with character ROMs, etc. All of that is standard affair. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What goes through the a VGA / RGB monitors cable must conform to a certain protocol. There are only certain resolutions which the monitor supports and they are detected by the right syncing frequency and blanking, etc. Of course this is legacy stuff and falling more and more obsolete in the age of TFT or LED pixel screens and digital display interfaces (DVI, HDMI). So it seems increasingly pointless to try to create that high-speed serialized ray tracing signal adapted to the monitor's expectations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is why I wonder whether this all could be done even simpler by driving the CRT tube directly and not interface to a monitor with its own PCB etc. For example, with the VAX 11/780 I once hauled from Madison, WI and kept in my garage for years, there was an entire drawer above the UNIBUS box, which contained a high resolution frame buffer. And with it came a &lt;em&gt;huge&lt;/em&gt; and extremely heavy CRT display. I can't remember if it had 4 or 5 BNC cables, but I figure this was not a monitor that I could easily drive with a VGA cable the way I managed to adapt that to the CRT projector I got from university surplus warehouse once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gives me the idea of driving a CRT tube raw and naked right from the computer board (set). Perhaps all the high voltage stuff stays inside the monitor housing, but everything else would come from the display module in the computer, i.e., horizontal and vertical deflection and the intensities of the electron rays, monochrome or RGB. This would be delivered at a reasonable voltage level to the CRT where nothing other than amplification to the proper (high) voltages would happen that drive the CRT beam acceleration and deflection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for the simplest thing to do with a raw CRT from an old TV. In today's digital world, there is little joy in producing an analog VGA signal only to have it displayed on a TFT flat screen. In that case I prefer to drive the TFT display directly without all that extra effort of serialization and syncing, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, now let's say I have those 6 or 7 wires coming out of my CRT:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;GND&lt;/li&gt;&#xA;&lt;li&gt;Horizontal (X) Deflection&lt;/li&gt;&#xA;&lt;li&gt;Vertical (Y) Deflection&lt;/li&gt;&#xA;&lt;li&gt;Red Intensity (optional)&lt;/li&gt;&#xA;&lt;li&gt;Green or Monochrome Intensity&lt;/li&gt;&#xA;&lt;li&gt;Blue Intensity  (optional)&lt;/li&gt;&#xA;&lt;li&gt;Reference Voltage (optional) - which would allow me to drive the display at 3.5V, 5V, 9V, 12V, or whatever levels, so that inside the CRT we would use that to bring it to the level that the internal amplifiers want. If this makes it any harder, just drop this thought.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now if I have that, my frame buffer card can generate the necessary sawtooth wave forms for the H and V deflection along with the pixels, and if I want to, I could run the display at 25 Hz refresh rate, even if it flickers as hell. I can of course also just plug these wires 1,2,3 into X and Y input of an oscilloscope (hmm, strange that a normal scope does not have an external input for the intensity).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;From Direct Driven CRT To Vector&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now with this, my frame buffer discussed above, is just one way to drive the display. What I am really interested in and I always found fascinating, would be a vector display. I have seen some modern vector CRT projects, but I haven't seen schematics and very few discussions I can find on the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I am wondering how I would create one myself? But also looking for best practices and perhaps TTL compatible chips that have some of the complexity already taken care of. Since I am starting from scratch, I am thinking all this up from my own intuition and I can see a path from there to how it might be built. But I really would like input of people who know this stuff to tell me which of my ideas have long been scrapped and surpassed by better approaches and which ones have not been taken because they weren't feasible or because the raster image had sucked all the air out of the market such that vector displays just withered away. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a vector display, for every dot, you have to define Deflection and Intensity signals. Move dot, turn intensity on, then produce a stroke by moving the dot with the intensity on, then turn intensity off. The abstraction is a polygon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make it more general even, one can say that every stroke has its own intensity (or intensities of RGB), whatever the current deflection position is will be held in the current deflection register, then a trajectory would be drawn to the next point, with a set intensity ... or even a gradient of intensities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trajectory and the intensities gradient is the result of some function generator, in the simplest case X and Y increase linearly from the present position to the next position at a given speed. Both the intensity values as well as the speed should influence the intensity of that stroke. There has to be a minimal speed in order to make the stroke appear as a solid line, and if you draw a polygon, there has to be a maximum amount of time to complete the entire drawing in order to see it all in one frame without the start of the drawing already having vanished. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the full drawing needs to be constantly repeated. As such it is similar to the raster line drawing: at least 60 Hz refresh rate. The entire drawing needs to be repeated 60 times per second. So now I make a little comparison between vector and pixel, when I have an 80x25 screen full of text. How many strokes per letter in upper case font?&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A - 3&lt;/li&gt;&#xA;&lt;li&gt;B - 10 (in rough polygon approximation)&lt;/li&gt;&#xA;&lt;li&gt;C - 5 (in rough polygon approximation)&lt;/li&gt;&#xA;&lt;li&gt;E - 5 &lt;/li&gt;&#xA;&lt;li&gt;F - 4&lt;/li&gt;&#xA;&lt;li&gt;G - 6 (in rough polygon approximation)&lt;/li&gt;&#xA;&lt;li&gt;...&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If I average that I get 5.5 strokes per letter, and of course from one letter to the next I also need to move the ray, so, I will just take an estimate of 6 strokes per letter. That is for 80x25 = 2000 letters we have 12,000 strokes. Each stroke requires new X,Y coordinates and the intensity depends on color space, same issue as with raster line graphics. In order to have a 1024 x 768 resolution, I would need 20 bit per each point. So we have 12,000 x 20 bit = 30 kByte per such screen full of text. Of course I can generate the characters from a character ROM also, so for text display I need way less, but I am taking the text display as a comparison to get a feel of the memory and frequency trade-offs. For the same display in raster, I need 768 kByte. So that is about 20 times more. As for frequency at which things need to happen, with raster I need to produce intensities change at 50 MHz while the sawtooth wave forms deflect X and Y for a 60 Hz refresh rate. For vector I would need 12,000 I would need 0.72 MHz to draw all the strokes. So, this means a vector display should be almost 100 times easier on the frequency and 20 times easier on the memory. Rough estimates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't like the polygon approximations, and I think one might do even better if we had analog function generators which could produce more than linear sawtoothy waves. Ideally circular arcs, perhaps ellyptic arcs. This should be doable by using sine waves with just the right phase shift and mixing them in with linear changes. This would add to the data we need to store for each stroke, but it would also drastically reduce strokes as we want to draw more rounded shapes. E.g., the B would suddenly have 3 instead of 10 strokes! The C could be done in a single stroke instead of 5. The G in 2 instead of 6. With the right analog wave form generators this could look better as well as reducing the frequency at which strokes would have to occur.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, one might wish to have a comet-like effect where this fading of the tail as a dot slowly moves over the screen might be intended. But more likely that could be accomplished by having the intensity gradient also generated with an analog waveform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then if you think of making a game, you think &quot;sprite&quot;. But a sprite is really just a trick to mix in pixel data from the sprite buffer along with the background buffer. So we could do something like that for our vector display, except now we would be dealing with line intersection and clipping. Wow, rapidly this could become very complex. But not if the line clipping could be somehow hardware-accelerated. Could it be hardware accelerated in other ways than just by running algorithms on a fast CPU with multiplication? I guess best would be vector and matrix and all that good stuff. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seems like overkill to do on the display adapter. Here it becomes clear to me that it's much simpler overlaying sprites over a background (or over each other), even text and graphics overlay, very easy, because you just do it pixel by pixel, and in hardware the same address can just read multiple bytes from memory which would just be OR-ed together (or in other ways simply combined by logic gates.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you could somehow do the line clipping in hardware, then you could create really nice 3D effects with your vector sprites as you could scale them and even fade their intensity out as they move into the depth of the 3D image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OK, here I stop. What say the experts in old vector display technology?&lt;/p&gt;&#xA;" OwnerUserId="15591" LastEditorUserId="15591" LastEditDate="2020-05-09T17:15:23.150" LastActivityDate="2020-05-12T09:41:22.070" Title="What are principles of vector CRT display? Simplest way to drive CRTs?" Tags="&lt;graphics&gt;&lt;crt-monitor&gt;&lt;display&gt;&lt;vector&gt;" AnswerCount="7" CommentCount="4" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14737" PostTypeId="2" ParentId="14736" CreationDate="2020-05-09T17:39:44.037" Score="7" Body="&lt;p&gt;This is really lots of questions, so a very general answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to know how retro vector displays worked, have a look e.g. at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Tektronix_4010&quot; rel=&quot;noreferrer&quot;&gt;Tektronix 4010&lt;/a&gt;, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Vector_General&quot; rel=&quot;noreferrer&quot;&gt;Vector General&lt;/a&gt;, or the various vector displays for the PDP models. Bitsavers has manuals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interface for all of these is a variation of the following principle:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Store a &quot;current position&quot; as a pair of counters, get a &quot;next position&quot; into the hardware, let the hardware count towards the next position, outputting the counters as an analog value to the CRT. 10 to 12 bits were used for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then add intensity bits, absolute vs. relative addressing, drawing vs. moving, and if you want it really comfortable, some sort of DMA to read a display list. But the simpler ones did it without DMA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for a hardware implementation without DMA, TTL ICs for counters, comparators, and D/A converters, together with some glue logic should get you started.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-05-09T17:39:44.037" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14738" PostTypeId="2" ParentId="14736" CreationDate="2020-05-09T18:00:10.623" Score="10" Body="&lt;p&gt;Vector and raster graphics pose different challenges.  Raster displays require the ability to very quickly generate a stream of pixels at a continuous rate.  Unless one is willing to place severe limits on the number of objects per horizontal line and use separate circuitry for each such object (something many early video game systems in fact did) this will require having an image stored in a way that allows it to be read out quickly.  Nowadays this is done with RAM, but in the 1960s other approaches such as shift registers or fixed-head magnetic storage would have been cheaper.  Unfortunately, using anything other than RAM will limit one's ability to perform display updates cleanly.  If one doesn't have enough RAM to hold a full display, it may be necessary to render part of the display to RAM, wait for the drum or shifter to reach the right spot, output the RAM to the drum or shifter at the required speed, and then render the next part of the display, etc.  Rather expensive.  Note that even a 256x256 black and white display with one bit per pixel would have required 8192 octets (modern bytes) of RAM, which would have been rather a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vector displays eliminate that problem, and make it practical to have displays with much higher resolution than would have been practical with a raster display.  For example, the PDP-1 display had a resolution of 1024x1024, which would have required 131,072 octets of RAM to buffer.  The problem with raster displays is that they are much more sensitive to the calibration of the beam-deflection control circuitry.  A raster display repeatedly traces the same path over and over the exact same way.  Any imprecision in the display circuitry may cause parts of the display to be slightly stretched or distorted, but if the point that is supposed to be 66% of the way down the display is actually 67% of the way down, nobody's apt to notice or care.  Such imprecision with a vector display, however, could render it almost useless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What makes drawing with a vector display difficult is that the deflection coil signal doesn't directly control the beam position, but mostly controls its velocity (it's possible to discharge the stored energy in the coil to reset the beam to center to acquire an absolute position reference, but this takes longer than using relative moves).  If on a screen that's 10&quot; wide, one tries to e.g. draw 20 spokes on a wheel, and each attempted move ends moving up 0.01&quot; to the right of where it should be relative to the start, then the end of last spoke will end up about 0.4&quot; to the right of where it should be.  That level of precision would be considered pretty good for a raster display, but horrible for a vector one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible to design and calibrate vector display circuitry to yield good positioning accuracy, but it's an expensive process compared with making raster display electronics that can be much cruder.  Using 1960s technology, the cost of calibrating a display would be far less than the cost of generating the pixel stream for a reasonable resolution raster display, but nowadays the reverse is true (though if CRTs were still being produced, modern drive electronics could probably be designed at reasonable cost to be largely self-calibrating).&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-05-09T18:00:10.623" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14739" PostTypeId="2" ParentId="14736" CreationDate="2020-05-09T19:50:20.417" Score="3" Body="&lt;p&gt;You can drive a vector display with a few DACs driven by a FPGA for timing and sequencing the patterns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a cheap implementation, you can look at the old Vectrex game console which is well documented. It uses only one 8 bits DAC, one analog multiplexer and a few op-amps. Lines are drawn by setting charge current to a R-C circuit, the CPU doesn't calculates pixels along lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Many analog oscilloscopes had a Z-input which could drive spot intensity. That input didn't always have the same bandwidth as the rest of the scope, not suitable to turn it into a TV screen.)&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2020-05-09T19:50:20.417" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14740" PostTypeId="2" ParentId="14736" CreationDate="2020-05-09T21:21:15.447" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;This gives me the idea of driving a CRT tube raw and naked right from&#xA;  the computer board (set). Perhaps all the high voltage stuff stays&#xA;  inside the monitor housing, but everything else would come from the&#xA;  display module in the computer, i.e., horizontal and vertical&#xA;  deflection and the intensities of the electron rays, monochrome or&#xA;  RGB. This would be delivered at a reasonable voltage level to the CRT&#xA;  where nothing other than amplification to the proper (high) voltages&#xA;  would happen that drive the CRT beam acceleration and deflection.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You could try modifying an existing CRT monitor. Intensity is already controlled by the analog RGB signals (a sync signal may still be required to set the black level) but horizontal and vertical deflection waveforms are produced internally and only synchronized to the sync pulses. To have full control from the CPU you would need to drive the coils through current amplifiers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vertical deflection already has an amplifier, so you just need to feed your DAC output directly into it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Horizontal deflection is harder because the coil is driven from the EHT transformer, and both are optimized to work together at the horizontal line frequency. You would need to make a custom amplifier matched to the horizontal deflection coil, or rewind the horizontal coil to match the vertical coil and use a standard vertical amplifier (this could be the better option because it should be more symmetrical). You might also need to put a 'dummy' coil in place of the original horizontal coil to keep the EHT circuit happy.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Now if I have that, my frame buffer card can generate the necessary&#xA;  sawtooth wave forms for the H and V deflection along with the pixels,&#xA;  and if I want to, I could run the display at 25 Hz refresh rate, even&#xA;  if it flickers as hell.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You won't like the flicker, and getting the horizontal retrace time time low enough will be difficult because a very high flyback voltage is required (that's why the horizontal coil is normally driven from the EHT transformer). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However it could be fine for a vector display, which typically has much less total distance for the beam to travel so it can move slower.   &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Then if you think of making a game, you think &quot;sprite&quot;. But a sprite&#xA;  is really just a trick to mix in pixel data from the sprite buffer&#xA;  along with the background buffer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's more than that. A sprite is a solid object that 'paints' the entire area. Vector graphics is really only suitable for wire-frame display. If you need solid color then a raster scan is more efficient.&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-05-09T21:21:15.447" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14741" PostTypeId="2" ParentId="14734" CreationDate="2020-05-09T21:42:13.430" Score="8" Body="&lt;p&gt;The BASIC in question (and many Microsoft BASIC versions) use a single stack to track both FOR/NEXT loops and GOSUBs.  Here's a first approximation of the rules:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;FOR x puts a loop record on the stack&lt;/li&gt;&#xA;&lt;li&gt;GOSUB puts a return location on the stack&lt;/li&gt;&#xA;&lt;li&gt;RETURN pops down the stack and goes back to the return location&lt;/li&gt;&#xA;&lt;li&gt;NEXT x pops down the stack to find the loop record for x and continues or exits the loop based on the counters&lt;/li&gt;&#xA;&lt;li&gt;NEXT continues or exits the loop at the top of the stack&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These rules have some implications which you've noticed.  A RETURN will end any FOR loops in progress as it searches for a location record.  NEXT x will end other FOR loops in progress searching for the x loop.  However, it won't look past a location record.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, FOR x will look down the stack for an existing x loop and replace it thus ending and nested FOR loops below it.  But it won't look past location records.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whenever a RETURN can't find a location record you get the &lt;code&gt;?RG&lt;/code&gt; return without gosub error.  And similarly if NEXT can't find a loop record you get the &lt;code&gt;?NF&lt;/code&gt; next without for error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main thing to remember is that FOR x, NEXT x and GOSUB can end FOR loops in operation but limit their scope to the current subroutine.&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2020-05-09T21:55:29.897" LastActivityDate="2020-05-09T21:55:29.897" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14742" PostTypeId="1" AcceptedAnswerId="14743" CreationDate="2020-05-09T23:37:31.333" Score="2" ViewCount="209" Body="&lt;p&gt;The first electricity-based adder presumably used relays. (&lt;a href=&quot;https://history-computer.com/ModernComputer/Basis/relay.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The electromechanical relay was invented for the electrochemical telegraph for repeaters in 1831 by Joseph Henry (1797-1878)&lt;/a&gt;. I can't figure out who created the first adder, however. It's also not clear to me if the first adder was binary or decimal. I think that it was probably a ring-adder in Base 10, similar to those used on the Univac, but I have no evidence, and I've been unable to find the answer for some time now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Hollerith's patents (395,781, 395,782 and 487,737) do not describe an adder. Indeed, the only mention of addition is in 395,782 patent, which states: &quot;A method for compiling such statistics must be capable of counting or adding units according to single statistical items or combination of such items.&quot; So it's not clear from this if Hollerith had an existant adder, or if he had one and decided to keep it a trade secret.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The appliation also states:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/URcDK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/URcDK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So clearly Hollerith had relays and he understood about adding... but he didn't have an adder. The 395,781 patent states:  &quot;When deemed advisable, mechanical counters may be included in the circuits containing electromagnets, for indicating the number of cards deposited in the boxes.&quot;  So Hollerith used mechanical counters, which date back to the invention of the Step Rockoner and Leibniz. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So who build the first electric/electronic adder? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT2: Now I'm beginning to remember that they were created for the Geiger Counters, and that Mauchly saw them and realized that if you could do addition, you could do everything.&lt;/p&gt;&#xA;" OwnerUserId="6623" LastEditorUserId="6623" LastEditDate="2020-05-10T17:04:21.807" LastActivityDate="2020-05-10T17:04:21.807" Title="Who built the first electric/electronic adder?" Tags="&lt;hardware&gt;&lt;early-computer&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14743" PostTypeId="2" ParentId="14742" CreationDate="2020-05-10T00:27:47.403" Score="4" Body="&lt;p&gt;Well, there is no definite answer, as an electric or even electronic adder would be useless before other machinery/circuitry would be available to feed it and take results fast enough to make it worthwhile. This wasn't the case way into the 40s as up to them (electro) mechanical adders were not only sufficient well developed, but also quite capable to peep up with data feed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some cornerstones here might be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Holleriths electromechanical counter of the mid 1880s, used in early tabulators - after all, counters can be used to add.&lt;/li&gt;&#xA;&lt;li&gt;Electric driven &lt;a href=&quot;https://en.wikipedia.org/wiki/Mechanical_calculator#1900s_to_1970s&quot; rel=&quot;noreferrer&quot;&gt;mechanical calculators&lt;/a&gt; ca. 1900 (real adders)&lt;/li&gt;&#xA;&lt;li&gt;Stibitz' &lt;a href=&quot;https://en.wikipedia.org/wiki/Model_K&quot; rel=&quot;noreferrer&quot;&gt;Model K&lt;/a&gt; Adder in 1937 (relay based, just the adder, no real use)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Z2_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Zuse Z1&lt;/a&gt; in 1938 (mechanical computer driven by an electric motor)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Helmut_Schreyer&quot; rel=&quot;noreferrer&quot;&gt;Helmut Schreyer&lt;/a&gt;'s 'Versuchsschaltung' of 1938 were he demonstrated the ability to turn Zuse's mechanical ALU can be done with tubes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Z2_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Zuse Z2&lt;/a&gt; in 1940 (relay based CPU, mechanical memory)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Z3_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Zuse Z3&lt;/a&gt; in 1941 (fully relay based computer)&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Atanasoff%E2%80%93Berry_computer&quot; rel=&quot;noreferrer&quot;&gt;ABC&lt;/a&gt; of 1942 (tube based adder)&lt;/li&gt;&#xA;&lt;li&gt;Helmut Schreyer's experimental computer of 1942 (tube based)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;After 1945 development of computers able to use the advantage of electric/electronic adders/ALUs did take off, so pick your favourite for 'first' and make sure to select enough attributes to make it the fitting one :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-10T00:42:34.383" LastActivityDate="2020-05-10T00:42:34.383" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14744" PostTypeId="2" ParentId="14736" CreationDate="2020-05-10T05:50:38.083" Score="4" Body="&lt;p&gt;Expanding the existing answer by temlib is that most osciliscopes have some form of X/Y input and better ones support Z (intensity) This allows you to sidestep the complex signal drive problem to the CRT coils and just wrangle the primitives to DAC output part of the problem. And you'll need a decent scope for poking the back of a CRT anyway. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have a system that you know and trust then you'd start trying to produce a custom driver stage for the CRT. It is worth noting that most cathode ray oscilliscopes used electrostatic beam deflection (voltage dependent) while raster displays generally used electromagnetic (current dependent) and use very different driver stages so check the fine print of any designs you copy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you are at the point you want to dive into the world of exciting voltages found in the back of a tube (not all chasiss are ground so even the frame can kill) it is probably worth being aware that tampering with the beam drive voltages 'to make it brighter' can lead to electrons hitting the front face of the tube with enough energy to produce xrays. There are also a number of ways to damage the tube with incorrect drive (such as high beam intensity with no x/y deflection), so when you start looking for a chassis would suggest making sure you have at least three identical candidates available, one to reverse engineer, one to work on and as a working TV to test against.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Displays with a smaller viewing area and with longer distances from the gun to the front face will require lower deflection currents which will be easier to engineer. They are also less likely to contain clever fault detection circuitry (see above Xray warning) that will complicate having a custom driver attached.&lt;/p&gt;&#xA;" OwnerUserId="11756" LastActivityDate="2020-05-10T05:50:38.083" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14746" PostTypeId="2" ParentId="14418" CreationDate="2020-05-10T08:45:58.707" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Track/cylinder&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;its single circle on the surface or set of circles on each surface/head forming cylinder (one spin). Each containing several sectors. How many is chosen by &lt;strong&gt;physical format&lt;/strong&gt; of the media and limited by data density.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sector&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;its predefined fixed size chunk of usable data. The size is chosen by &lt;strong&gt;physical format&lt;/strong&gt; but is limited by used HW so you can not use any size and usually just one that is supported by the connected HW. For floppies the size stabilized at 512 Bytes. But beware the whole sector (sync and header info included) is bigger like ~598 Bytes ... but that stuff is usually not present in disc images.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Block/cluster&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;this is related to used &lt;strong&gt;File System&lt;/strong&gt; smallest usable data chunk usable (usually several sectors). Sometimes is called cluster size and usually is chosable during logical Format. It has nothing to do with physical representation of data on the surface its just logical addressing of storage data by File System (so no FAT just the data).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;To know more about sector/track you should know how it is stored on the medium:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VJbgU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VJbgU.png&quot; alt=&quot;surface&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The tracks and sectors are lines (arcs) not areas&lt;/strong&gt; like you do (the heads have very thing magnetic gap so the track can be as thin as possible).&lt;/p&gt;&#xA;&lt;p&gt;Index Hole is to detect rotation speed and angular position (once the rotation speed is stable).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The track start is not defined by index hole and all the tracks might start at different angular positions&lt;/strong&gt; (so no pie !!!).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The gaps are not empty space !!!&lt;/strong&gt; they detect start of sector, sync data and sector header. They usually start with some repeating hexa number so the FDC can synchronize where the 8bit data starts and ends in the bit stream. After that is followed by different hex number to signalize sector will start soon and FDC have to store the incoming data into buffer. Then sector info is stored (number of sector, checksum, etc..) and only then 512 Bytes of data follows. The gaps are created during physical format and different controlles had different formats of the gap making not possible to read some floppies on different systems (like ZX MDOS on PC) without specifically preformated gaps that are readable on both systems ...&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sectors might also not be stored in order.&lt;/strong&gt; They where usually interleaved so they could be loaded sequentially faster. I know its sound wrong but you must realize that on old systems you have to read sector, transfer it to memory and then process it and that took more time than the heads go to start of next sector so you would need to wait for next revolution. To speed this up the sectors where stored instead of&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0,1,2,3,4...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;in orders like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0,2,4,...,1,3,5,...&#xA;0,3,6,...,1,4,7,...,2,5,8,...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;the number of interleaving was chosable during physical format. And you interleave the more the slower your system is.&lt;/p&gt;&#xA;&lt;p&gt;So your image should look more like set of concentric circles with highlighted arces not too closely aligned between neighboring tracks.&lt;/p&gt;&#xA;&lt;p&gt;And do not forget that the &lt;strong&gt;binary bits are not stored on the flux directly but are encoded by specific patterns of flux change.&lt;/strong&gt; There are several media formats out there also ...&lt;/p&gt;&#xA;&lt;p&gt;For more info see:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7846/6868&quot;&gt;Finding byte boundaries in floppy disk MFM bitstreams&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-05-10T09:00:31.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14749" PostTypeId="1" AcceptedAnswerId="14760" CreationDate="2020-05-10T15:26:31.507" Score="5" ViewCount="632" Body="&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; &lt;strong&gt;I'm not looking for a way to transfer files from Linux to DOS over Serial cable&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Is there any MS-DOS driver to enable a new hard-disk drive (let's say &lt;code&gt;D:&lt;/code&gt;), using a disk image on another computer served by serial null-modem?&lt;/p&gt;&#xA;&lt;p&gt;Something like &lt;a href=&quot;https://en.wikipedia.org/wiki/Network_block_device&quot; rel=&quot;nofollow noreferrer&quot;&gt;NBD&lt;/a&gt; on Linux systems, but simpler.&lt;/p&gt;&#xA;&lt;p&gt;I found this but it's a complete BIOS replacement.&#xA;&lt;a href=&quot;http://www.xtideuniversalbios.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.xtideuniversalbios.org/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Support for virtual drives via serial port, [SerialDrives more information]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm looking for a driver to emulate a real disk drive on MS-DOS running on an 8088 from an image hosted on other computer, served by serial port, because I have an USB to Serial converter and a null-modem cable.&lt;/p&gt;&#xA;&lt;p&gt;Similar software in GNU/Linux distributions are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;nbd: Server can share an image (&lt;code&gt;/home/user/image&lt;/code&gt;) or a whole drive (&lt;code&gt;/dev/sdb&lt;/code&gt;) if you have enough permissions. Client maps the share to a virtual device file (&lt;code&gt;/dev/nbdXX&lt;/code&gt;) and acts as a real disk. You can use &lt;code&gt;gparted&lt;/code&gt; or whatever in the new device. All changes are performed on the image or disk in the remote machine.&lt;/li&gt;&#xA;&lt;li&gt;MEMDISK from SYSLINUX bootloader: &lt;code&gt;memdisk&lt;/code&gt; is loaded as kernel and hard disk image is loaded as initrd. Image can contain whatever OS that fits on RAM and behaves like a real disk. You can have DOS and run &lt;code&gt;cfdisk&lt;/code&gt; or defrag.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This computer has only a floppy disk drive. Hard disk doesn't work.&#xA;I can't spend money on hardware so I'm looking for a software solution.&lt;/p&gt;&#xA;" OwnerUserId="18076" LastEditorUserId="15334" LastEditDate="2020-11-15T12:42:05.877" LastActivityDate="2020-11-15T12:42:05.877" Title="Is there any virtual hard disk driver over serial port?" Tags="&lt;ms-dos&gt;&lt;hard-disk&gt;&lt;serial&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14751" PostTypeId="2" ParentId="11183" CreationDate="2020-05-10T16:55:24.793" Score="3" Body="&lt;p&gt;I have the original 1978 copy volume 1 no 1.&#xA;As pointed out by Chromatix there is a typo in BM5 and BM6 which should be the same as BM4 and BM7.&#xA;I wrote a program in Liberty Basic to illustrate these benchmarks but changed the loops to K = 100000 so the speeds can be measured on modern pc's. They still run faster than the best machines used in 1978. Running them as originally written takes a few milliseconds in total.&#xA; k=100000                   k = 1000&#xA;BM1    O.358                0.005&lt;br&gt;&#xA;BM2    0.632                0.008&#xA;BM3    0.850                0.011&#xA;BM4    0.906                0.010&#xA;BM5    1.212                0.015&#xA;BM6    2.929                0.031&#xA;BM7    4.049                0.045&#xA;BM8    1.200                0.005&#xA;Total 12.117                0.121&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get slightly different numbers if I rerun the program&#xA;These results are in the &quot;compiled&quot; program. The original code runs slightly faster.&#xA;I had almost all the copies of PCWorld, but had to get rid of most of them when I moved some years ago. However I still have the first three volumes and a few other early ones 1978/1979 plus 10th, 20th, 25th, 30th anniversary copies and the last copy August 2009. The 25th anniversary copy includes the original Bonus double CD &lt;/p&gt;&#xA;" OwnerUserId="18077" LastActivityDate="2020-05-10T16:55:24.793" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14752" PostTypeId="1" AcceptedAnswerId="14753" CreationDate="2020-05-10T19:13:55.477" Score="1" ViewCount="387" Body="&lt;p&gt;While searching on the Internet and Quora, I found disassemblers for Pac-Man, Galaxian, and Super Mario Bros. The thing that puzzled me, was while Super Mario Bros was arguably quite a complex game for the NES, while Pac-Man and Galaxian weren't, they all had roughly the same length in assembly language. All three were more than 8 kibibytes but under 16(The actual number was 9 for Galaxian, 15 for Pacman and 16 for Mario). Super Mario Bros seemed too large to fit inside such a small space, especially when compared to Pacman and Galaxian, and on the Wikipedia article for the NES, it claimed that some NES games reached 1 megabyte in size. And if that's true, how come Mario isn't bigger than 16 kibibytes(especially for the even more complex Mario games like SMB3 that came after)?&lt;/p&gt;&#xA;" OwnerUserId="17968" LastActivityDate="2020-05-10T19:26:05.330" Title="Were all NES games 16 kibibytes or less?" Tags="&lt;assembly&gt;&lt;nes&gt;&lt;disassembly&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14753" PostTypeId="2" ParentId="14752" CreationDate="2020-05-10T19:26:05.330" Score="6" Body="&lt;p&gt;Those numbers are not correct. &lt;a href=&quot;http://bootgod.dyndns.org:7777/profile.php?id=270&quot; rel=&quot;noreferrer&quot;&gt;Super Mario Bros&lt;/a&gt; had 40 KiB of total ROM (32K PRG-ROM (program ROM) and 8K CHR-ROM (character ROM, for storing graphics data)). &lt;a href=&quot;http://bootgod.dyndns.org:7777/profile.php?id=320&quot; rel=&quot;noreferrer&quot;&gt;Pac-Man&lt;/a&gt; had 24K (16K PRG, 8K CHR). &lt;a href=&quot;http://bootgod.dyndns.org:7777/profile.php?id=5&quot; rel=&quot;noreferrer&quot;&gt;Super Mario Bros. 3&lt;/a&gt; had 384K total (256K PRG, 128K CHR). Some games were even bigger (and a even few exceeded 1MiB, as you mentioned in your question).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were several factors influencing cartridge size. The most obvious one was cost: bigger ROMs were more expensive (and games released later tend to be larger because the price of ROM was falling). Another factor was address space limitations: the NES could only address 32K of PRG-ROM and 8K of CHR-ROM, but this limit could be circumvented by using a &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/Mapper&quot; rel=&quot;noreferrer&quot;&gt;memory mapper&lt;/a&gt; to swap regions of ROM in and out of the addressable range.&lt;/p&gt;&#xA;" OwnerUserId="409" LastActivityDate="2020-05-10T19:26:05.330" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14755" PostTypeId="1" AcceptedAnswerId="14758" CreationDate="2020-05-10T23:12:54.807" Score="10" ViewCount="369" Body="&lt;p&gt;What techniques were used for implementing breakpoints on the ZX81? Traditionally for the 8086 &lt;code&gt;int 3h&lt;/code&gt; is used, for the 8080 on CP/M with DDT &lt;code&gt;RST 7&lt;/code&gt; as single byte replacements, 6502 has the &lt;code&gt;BRK&lt;/code&gt; instruction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't figure out what would be used for the ZX81 (or Spectrum) as it's barely possible to hook any of the interrupt vectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously this could be done by physical hardware or by single stepping each instruction and intercepting &lt;code&gt;call / jr / jp&lt;/code&gt; etc but this would run much slower (but would also allow debugging ROM routines)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sadly none of the online documentation I can find for the various debuggers / monitors explains how exactly they work. (I suspect from the ZXDB documentation it's using the single step instruction approach)&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="1912" LastEditDate="2020-05-12T15:10:37.520" LastActivityDate="2020-05-12T15:10:37.520" Title="How did ZX81 assembly debuggers implement breakpoints?" Tags="&lt;z80&gt;&lt;zx81&gt;&lt;debugging&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14756" PostTypeId="1" AcceptedAnswerId="14757" CreationDate="2020-05-10T23:53:19.553" Score="27" ViewCount="9547" Body="&lt;p&gt;A 1980 paper called &lt;a href=&quot;https://www.sciencedirect.com/science/article/abs/pii/0096055181900485?via%3Dihub&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Register Allocation via Coloring&quot;&lt;/a&gt; contains something that looks like source code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;P: PROC(MODE);&#xA;&#xA; DCL&#xA;&#xA;    MODE     BIT(1),&#xA;&#xA;    (A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,&#xA;     B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,&#xA;     SUM)         FIXED BIN(15) AUTO,&#xA;&#xA;    (U(10),V(10)) FIXED BIN(15) STATIC EXT;&#xA;&#xA;  IF MODE&#xA;     THEN DO;&#xA;        A1=U(1); A2=U(2); A3=U(3); A4=U(4); A5=U(5);&#xA;        A6=U(6); A7=U(7); A8=U(8); A9=U(9); A10=U(10);&#xA;     END;&#xA;     ELSE DO;&#xA;        B1=V(1); B2=V(2); B3=V(3); B4=V(4); B5=V(5);&#xA;        B6=V(6); B7=V(7); B8=V(8); B9=V(9); B10=V(10);&#xA;     END;&#xA;&#xA;  LABEL:;&#xA;&#xA;  IF MODE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&lt;a href=&quot;https://i.stack.imgur.com/mQvj6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Original image&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find what programming language this is. Is it a real historical programming language, or is it some type of pseudo-code?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The beginning of the paper mentions that the research is based on a PL/I Compiler. So maybe it's the programming language that the compiler was built on. I couldn't locate the paper where it talks about the compiler on the Internet.&lt;/p&gt;&#xA;" OwnerUserId="15627" LastEditorUserId="2037" LastEditDate="2020-05-13T21:07:19.167" LastActivityDate="2020-05-26T10:12:30.667" Title="What is this programming language having PROC, DCL, LABEL keywords?" Tags="&lt;programming&gt;&lt;identify-this-software&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14757" PostTypeId="2" ParentId="14756" CreationDate="2020-05-11T00:27:12.197" Score="58" Body="&lt;p&gt;It's PL/I, promoted by IBM as the successor to FORTRAN, Algol 60, and COBOL.&#xA;That's actual code as far as I recall, not pseudocode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PL/I had abbreviations for keywords; &quot;DCL&quot; is &quot;DECLARE&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It starts off by defining a procedure (routine) named P with one parameter, named MODE, which is a Boolean variable - BIT(1), then defines a bunch of 16-bit signed integers allocated on the stack, and some statically-allocated arrays.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-05-11T00:31:55.617" LastActivityDate="2020-05-11T00:31:55.617" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14758" PostTypeId="2" ParentId="14755" CreationDate="2020-05-11T00:56:08.350" Score="10" Body="&lt;p&gt;MONS 3 in the ZX Spectrum, for example, changes the instruction at the break address by a CALL to an entry point in MONS. As MONS is executed, it replaces back the changed instruction with the original one (and of course store in memory the current state of all Z80 registers), so when the disassembler is invoked to give you a assembly listing, you see the original instruction. This can be read from the instruction mannual of MONS 4, availabel at World Of Spectrum&#xA;&lt;a href=&quot;https://worldofspectrum.org/pub/sinclair/games-info/h/HiSoftDevpacV4.0.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://worldofspectrum.org/pub/sinclair/games-info/h/HiSoftDevpacV4.0.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JyeWH.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JyeWH.jpg&quot; alt=&quot;set a breakpoint in MONS 4&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you opt to execute that instruction and return to MONS (i.e. &quot;trace&quot; that instruction), the CALL is placed at the beginning of the next instruction past the one you broke. Registers are restored and a jump (or a return from subroutine) is made to the former broken instruction, which executes normally, and the next one is again a CALL to MONS, repeating all the process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, there is a catch with this method: you cannot trace a program in ROM. AFAIK, MONS3 cannot trace programs in ROM. For that, the debugger should implement a complete Z80 emulator. I don't know of any Z80 debugger that does that.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2020-05-11T01:06:42.853" LastActivityDate="2020-05-11T01:06:42.853" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14759" PostTypeId="2" ParentId="14736" CreationDate="2020-05-11T04:38:23.667" Score="1" Body="&lt;p&gt;Another issue here:  The main value of vector displays is they allow for a higher resolution than raster technology--but these days raster has gotten good enough that this is basically a non-issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two downsides to vector systems that haven't been mentioned so far:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1)  Vectors draw lines.  The only way to fill an area is to scribble back and forth, drawing a lot of lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2)  A raster system image is independent of complexity, but a vector system is complexity-limited.  The more lines you try to draw the longer it will be before you get back to retracing your image.  As your image gets too complex it flickers and eventually blinks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have actually programmed a vector system in the 2000s.  It required a lot of optimization of the images being drawn to reduce the time the beam was repositioning but not drawing.  Drawing a line twice (a shared edge) was also bad--the line came out brighter than the others.  The system I was using wasn't a CRT at all, but rather lasers &amp;amp; mirrors--I could project an image on a surface.  Even the simplest images I needed to draw (4 rectangles) had some flicker and it was basically blinking by the time I was drawing 20 or more.  The objective was to draw a picture on the work table--build this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And if you're tempted to look into this--it was a $20k piece of hardware at the time.  Then the whole project proved non-viable in a space without adequate climate control--we never did come up with an adequate solution to thermal expansion causing the aim point to drift.)&lt;/p&gt;&#xA;" OwnerUserId="1897" LastActivityDate="2020-05-11T04:38:23.667" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14760" PostTypeId="2" ParentId="14749" CreationDate="2020-05-11T12:08:48.930" Score="6" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interlink&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;It’s part of MS-DOS and was easy to use simply by adding a line into &lt;a href=&quot;https://stackoverflow.com/a/46521076/2521214&quot;&gt;config.sys&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; devicehigh=e:\rescue\dos98\interlnk.exe&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and then running &lt;code&gt;interlnk.exe&lt;/code&gt; or &lt;code&gt;intersvr.exe&lt;/code&gt;. However, RS-232 is slow: just ~115200/11 ≈ 10.2 KiB/s, which is slower than floppy.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://winworldpc.com/product/laplink/5x&quot; rel=&quot;nofollow noreferrer&quot;&gt;LapLink&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This was Interlink's LPT counterpart (can use either COM or LPT).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;FX&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This one is an app for copying (over COM or LPT), not HDD emulation. However, together with RAMDISC, it is this also an option. For more info (also on interlink and download link to FX included), see related:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4800/6868&quot;&gt;How can I copy files from a Compaq Deskpro?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;RAMDISC&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the old days when I built my first PC (a 80x386 DX40) and after successful build it I had no budget left for HDD too I used RAMDISC (had only 4 MBytes of RAM at that time) and loaded the stuff (like turbo pascal and C++, games etc) I wanted to use from floppies. The configuration to do this can be found in the first link above.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Obtaining (PATA) IDE HDD&lt;/strong&gt; (obsolete as on XT the HDD would be most likely MFM which are pretty rare these days)&lt;/p&gt;&#xA;&lt;p&gt;Why not acquire used IDE HDD? Today many of us have pile of them unused just covering with dust. I am sure in your neighbourhood there are some even for free (like in old storage of schools, repair &amp;amp; shops, factories etc.). Usually all that is needed is just asking for it.&lt;/p&gt;&#xA;&lt;p&gt;There are even alternatives like SSD disc made from old CF (compact flash) memory cards (which you might even have at home without realizing it).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/AnPpy.png&quot; alt=&quot;IDE SSD&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;They are sometimes used in devices like old game consoles, TV/satellite receivers or whatever. It’s just 1:1 connector interface with old memory cards (no electronics needed whatsoever).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="15334" LastEditDate="2020-10-08T06:06:53.097" LastActivityDate="2020-10-08T06:06:53.097" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14762" PostTypeId="1" CreationDate="2020-05-11T23:13:49.393" Score="1" ViewCount="269" Body="&lt;p&gt;Inspired by Ben Eater's &quot;Let's build a video card&quot; aka &quot;&lt;a href=&quot;https://www.youtube.com/watch?v=l7rce6IQDWs&quot; rel=&quot;nofollow noreferrer&quot;&gt;World's worst video card&lt;/a&gt;&quot; two part projects on YouTube, I was inspired to consider designing a display adapter for my passive backplane &lt;a href=&quot;https://en.wikipedia.org/wiki/Transistor%E2%80%93transistor_logic&quot; rel=&quot;nofollow noreferrer&quot;&gt;TTL&lt;/a&gt; mini-computer project. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Basic TTL Setup for H- and V-sync&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I might have taken the C64 VIC-II chip, but those aren't available any more. The only available old video chips I can find still are the MC6845 chip or MC6847. However, I don't think that's much fun, because the MC6845 doesn't really do much that I can't do with individual TTL chips, and both are too restrictive in what type of resolution they can support, and complicated by the way the are designed for character modes and have high res graphics only as an afterthought. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's pretty clear that the whole thing is essentially two sets of 74LS161 binary counters (and 74LS93 for a 2 x 2 bit counter for the highest bits) for horizontal and vertical, pixel/line, blank and sync generators. The counters count starting with a proper crystal, e.g., 25.175 MHz for a 640 x 480 display. Then the counters are monitored by two comparator assemblies which I build from 74LS86 XOR gates and a bunch of OR 74LS32 OR gates to get a low signal only when the counter matches the preset goal. The goal is stored in a register, and because there are 4 such goals for end of display, end of &quot;front porch&quot;, end of sync, end of &quot;back porch&quot;, I choose the sets of 74LS171 4 x 4 bit register files. The selection of the goal is driven by another 2 bit counter, for which I use the separate two bits of the 74LS93 (a 4 bit counter which looks like I can split it into 2 x 2-bit counters driven by CKA and CKB). Anyway, that counter is triggered by the goal reached and then switches to the next goal. I can leave the low 3 bits from the horizontal counter out of the comparison and the 1 bit from the vertical counter. This gives me a programmable sync pulse generator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data load lines for these register files can be mapped on the data bus and register address on the address bus so the goals can be programmed (I remember the X11 server configuration used to have a display configuration sections where you had to put these numbers in.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Memory Access, Address Generator&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now comes the problem of an address generator. Let's say I just want to display a monochrome graphics, so each pixel is one bit. I want to map them into memory by columns first and then rows, of course. Just like a binary PBM file, that is packed, with no memory lost at the end of each line to complete the next power of two set. So that is where the &quot;address mapping&quot; comes in. I figure I might just as well run a continuous counter the low 3 bits of the horizontal counter are anyway for the bits and not mapped to the memory, then the memory address counter will be reset when the vertical front porch starts. It would have to be a 21 or so bit counter. I don't suppose there is any value of trying to get smart with implementing multiplication to generate a contiguous pixel address from the pixel and line counters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Pixel Clock and CPU Clock Synchronization and Contention&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the memory access. Each 8 pixels I would need to fetch a new byte. And my initial idea is to just read from the general memory that the CPU uses. Similar to what the C64 did. You specify a base address of the bitmap and the VIC-II reads it out. I won't do the weird tiling but read each line as one straight row of pixel-bits. Once I fetch the byte for the next 8 pixels on each of the 8 pixels of that byte I use a shift register to produce the monochrome on/off signal for that pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am designing that computer such that the pixel clock and the main bus clock are independent. In fact, I want to make it such that I can single-step the computer. But of course I couldn't single-step the video card.   The way to do that would be to separate the memory bus (data and address) completely. With the video card having constant access, and the rest of the computer placing memory request in an address latch and then at the next free moment (during the time that the video card shifts out the 8 bits) that request will be fulfilled. Since the video card will be running at a much higher speed (25 MHz) while the rest of the TTL computer will run at maybe 1 hardly 4 and 10 MHz as a long shot, the waiting for the next open moment from the video card should not be a major problem. At normal operating speed it could even be timed like that, at 640 x 480 the pixel clock is 25.125 and divided by 8 the CPU clock would run at 3.14 MHz, exactly during the time that the video does not access the RAM. More likely, a 320 x 240 image which would run the CPU at 1.57 MHz. More in the realm of the feasible for a passive back-plane multi-card CPU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there might be a problem if I need to access the video memory though the back plane, I have all these long wire runs at high frequency anyway. How do I resolve that? Would I have to have a separate VRAM on the &quot;video card&quot;? And then would I map this VRAM into the address space so the bus can write to it at CPU/backplane speed? Let's say I solder it all on a single board, similarly to a home computer. So forget about the backplane issue, and let me wonder how the memory contention between video card and CPU is resolved? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's start with the hardest problem. If I want to &lt;strong&gt;single-step&lt;/strong&gt; the CPU, I would emulate that by not generating the clock from a key press, but rather, when the operator presses the step key, exactly one pulse from the CPU clock, derived from the pixel clock, will be allowed through at exactly the right time. Also, if I wanted to turn down the speed, instead of changing a potentiometer of an RC driven 555 timer, I would use a counter to run the computer at full speed, half speed, quarter speed, ..., and so on, with a 21 bit counter I could bring the frequency down to 0.37 Hz, which would be fine for a slow enough action to see things, and in fact, instead of the waste of all these counter bits, I would run it at overclocked turbo speed 3.14 MHz, normal speed, at 1.57 Mhz, then one per frame 60 Hz, and divide that down 30, 15, 7.5, ..., 0.23 Hz using an 8 bit counter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But now forget about this slow and single stepped approach, and let it run at the normal speed of 1.57 MHz, one CPU clock cycle for every 8 pixels, if I wanted to do a &lt;strong&gt;raster line interrupt&lt;/strong&gt; (triggered by another, independent, comparator assembly on the line counter to trigger the IRQ. I guess I would get about the same behavior that I know how to get on a Commodore 64, i.e., I get the raster line interrupt but by the time I actually get to handle it, it is just a little late. So, as I now have re-created what I remember is the behavior of a C64 like computer, I wonder if this is actually how it was done? I.e. run the VIC-II chip on the memory bus all the time and open a window to the CPU every like 8 pixels? If not, what is another way to handle this memory contention?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Memory Speed, size, SRAM, DRAM?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing I wonder is memory speed and if I should even bother with DRAM and then all that refresh headache?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can get DIP packages for SRAM at reasonable prices even at 128 k x 8 bit per one chip, 256 k x 8 isn't too hard either and 512 k x 8 bit exists. And those are 50 or 70 ns, that is much faster than the C64's DRAM, right? Anyway, 512 k x 8 is where it ends with DIP packages, right? There is no 1 MB x 8 SRAM DIP package, right? But one MB should not be too difficult to put together, and that was all the VAX 11/780 had. Even if I do multi-color graphics with 6 bit RGB (and who know 2 bit of an alpha channel?) Or a 256 color palette, then I can fit 800 x 600 comfortably into a half megabyte. So I could run the rest of the code on the other half, which isn't too bad. These SRAM chips seem to be much easier to handle and the price difference today in this legacy hardware doesn't even warrant worrying about DRAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I use DRAM? In that case I would need a refresh counter run the whole entire time. But everything seems to be so much harder with DRAM. You then suddenly have to worry about RAS and CAS addressing phases, and I suppose the reason why DRAM refresh was on the VIC-II was probably because it was constantly busy with the memory bus anyway. Right? Even at 320 x 200 and plus the borders, you had, what, 400 pixels line width? NTSC with 525 scan lines at roughly 30 Hz you'd have a 8 MHz pixel clock? Then the 6502 was clocked at only 1 MHz, meaning 8:1 ratio, and hence the VIC-II would be all over the DRAM during 7 out of 8 moments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I have that understanding about right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to the backplane then: if I have to keep the VRAM on the same board in order to not get into problems with high MHz frequencies on the backplane, then I might divide everything differently. In that case I might even use 3 chips of 4 bit RAM, then I would have 4 bits for each color channel without wasting 2 bits. That would be 4096 colors, very good. But what chips are available at 4 bits? I don't find any. So if I wanted to do such a 4 bit per color channel, I need between 1 and 6 MB VRAM. And I suppose it could be DRAM because the video card will go over most of it all the time anyway, so might just as well refresh. That VRAM would be mapped into the address space of the CPU rather than the general memory being accessed by the video signal generator. This memory mapping can be handled by a virtual memory management component of that computer. So now am I recreating the VAX 11/780? (I used to have one in my garage and didn't understand how stuff works on the digital electronics level until now.)&lt;/p&gt;&#xA;" OwnerUserId="15591" LastEditorUserId="3290" LastEditDate="2020-05-12T01:17:24.350" LastActivityDate="2020-05-12T01:17:24.350" Title="Thinking through the design of a TTL video card: what memory chips and how to manage memory?" Tags="&lt;commodore-64&gt;&lt;graphics&gt;&lt;video&gt;&lt;vga&gt;" AnswerCount="0" CommentCount="13" FavoriteCount="1" ClosedDate="2020-05-12T09:48:41.193" ContentLicense="CC BY-SA 4.0" />
  <row Id="14763" PostTypeId="1" AcceptedAnswerId="14764" CreationDate="2020-05-12T03:27:33.633" Score="39" ViewCount="6778" Body="&lt;p&gt;I recall a confirmation/warning message that read something like &#xA;&quot;this will post to thousands of sites... are you sure?&quot;&#xA;What was a typical such message in the days of pay-per-minute dialup access?&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2020-05-13T22:08:43.477" Title="What warning was given on attempting to post to USENET, circa 1990?" Tags="&lt;unix&gt;&lt;internet&gt;&lt;identify-this-software&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14764" PostTypeId="2" ParentId="14763" CreationDate="2020-05-12T06:09:26.287" Score="61" Body="&lt;p&gt;The message was&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This program posts news to thousands of machines throughout the entire&#xA;  civilized world.  Your message will cost the net hundreds if not thousands of&#xA;  dollars to send everywhere.  Please be sure you know what you are doing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This message isn’t inherent to Usenet, it’s output by certain clients. It originated in &lt;code&gt;rn&lt;/code&gt;, Larry Wall’s news reader; it can still be seen in &lt;a href=&quot;https://sourceforge.net/projects/trn/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;trn&lt;/code&gt;&lt;/a&gt;’s &lt;code&gt;Pnews.SH&lt;/code&gt;, where it is shown for posts with explicit world-wide distribution (“Distribution” set to &lt;code&gt;world&lt;/code&gt;), or with default (also world-wide) distribution to groups in the Big 7 (&lt;code&gt;comp&lt;/code&gt;, &lt;code&gt;news&lt;/code&gt;, &lt;code&gt;sci&lt;/code&gt;, &lt;code&gt;rec&lt;/code&gt;, &lt;code&gt;misc&lt;/code&gt;, &lt;code&gt;soc&lt;/code&gt;, &lt;code&gt;talk&lt;/code&gt;) or &lt;code&gt;alt&lt;/code&gt; hierarchies (basically, any non-local, non-country-specific group which would be carried by all news hosts).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Digging through &lt;code&gt;net.sources&lt;/code&gt; archives shows that warning messages were present very early on. Dave Taylor’s &lt;code&gt;Pnews&lt;/code&gt; (December 1, 1982) says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This program posts news to more than just this machine.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Are you absolutely sure that you want to do this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Larry Wall’s &lt;code&gt;rn&lt;/code&gt; 4.1 (September 24, 1984) figures out what the distribution scope is and, for world-wide distribution, says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This program posts news to many hundreds of machines throughout the world.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Are you absolutely sure that you want to do this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(It also features many other educational messages pointing new users to netiquette, explaining the purpose of cross-posting, limiting distribution, what subjects should contain etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Version 4.3 patch 30 of &lt;code&gt;rn&lt;/code&gt;’s &lt;code&gt;Pnews.SH&lt;/code&gt; (September 5, 1986, published to support the new top-level groups) introduced the “thousands of machines” message:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This program posts news to thousands of machines throughout the entire&#xA;  civilized world.  You message will cost the net hundreds if not thousands of&#xA;  dollars to send everywhere.  Please be sure you know what you are doing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This type of message started a trend in newsreader programs, in university student onboarding instructions, and prompted a few humorous reactions (see &lt;a href=&quot;https://groups.google.com/forum/#!msg/alt.culture.internet/_MEKVqeDMHo/4eKbTi5vWFgJ&quot; rel=&quot;noreferrer&quot;&gt;this &lt;code&gt;alt.culture.internet&lt;/code&gt; post&lt;/a&gt; or &lt;a href=&quot;https://www.netfunny.com/rhf/jokes/92q4/rnwarning.html&quot; rel=&quot;noreferrer&quot;&gt;this &lt;code&gt;rec.humor.funny&lt;/code&gt; port&lt;/a&gt;; thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/1932/jdebp&quot;&gt;JdeBP&lt;/a&gt; for pointing them out).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-12T17:44:03.050" LastActivityDate="2020-05-12T17:44:03.050" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="14765" PostTypeId="1" AcceptedAnswerId="14766" CreationDate="2020-05-12T07:26:34.210" Score="1" ViewCount="154" Body="&lt;p&gt;The Spectrum+3 uses a version of the Amstrad and CP/M disk layout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Speccy version has a directory at the start of the disk after any reserved tracks and it can hold up to 64 files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each directory entries has a 32-byte structure. On most disk images I have there is a blank entry after the last entry in the directory, with all 32 bytes either zero or 'e'.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;St F0 F1 F2 F3 F4 F5 F6 F7 E0 E1 E2 Xl Bc Xh Rc&#xA;Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But some other disks have an entry that looks like random garbage:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FF FF FF FF FF BF BD A5 FF FF FF FF FF 7F 55 5D&#xA;FF FF FF FF FF FF FF AB FF FF FF FF FF FF FF F7&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Yet in the Spectrum emulators, none show any corrupt entry or report any errors. The &lt;code&gt;St&lt;/code&gt; field is status, which tells if the file belongs to a certain user, is deleted, etc. But nothing mentions a special meaning if it's equal to &lt;code&gt;FFh&lt;/code&gt; or if it flags an entry entry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking at the +3DOS ROM disassembly and all the docs I can find but none seem to mention anything that would cover this case. Most code refers to an in-RAM structure the OS reads to see how many entries there should be. But I can't locate the code that sets this number. I also can't find it in source code for tools I can find that read or write +3DOS disks or images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does the Speccy tell from the disk's layout how many entries are in the directory or which is the last one?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-05-12T08:25:37.877" Title="How does the Spectrum +3 know how many files are in the disk's directory?" Tags="&lt;floppy-disk&gt;&lt;cp-m&gt;&lt;spectrum-plus-3&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14766" PostTypeId="2" ParentId="14765" CreationDate="2020-05-12T08:25:37.877" Score="3" Body="&lt;p&gt;There is no 'end marker' for a CP/M directory in the same way that there is for MS-DOS. When searching the directory, you need to look at all entries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get the size of the directory for a PCW / +3 disc, start with the number of directory blocks in the disc specification. Multiply that by block size and divide by 32 to get the number of directory entries. For the CPC System and Data formats, there are always 64 directory entries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CP/M only defines meanings for the first byte of the directory entry being:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00h-0Fh: File&#xA;10h-1Fh: Password&#xA;20h:     Disk label&#xA;21h:     Timestamp&#xA;0E5h:    Blank or deleted entry&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The meaning of other values is not specified and it's probably best to ignore entries starting with them.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2020-05-12T08:25:37.877" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14767" PostTypeId="2" ParentId="14736" CreationDate="2020-05-12T09:41:22.070" Score="1" Body="&lt;p&gt;There was two main ways of doing this, exemplified by a storage display as used in the Tektronix 401x and the VS-11 type displays used by Digital. The 401x was an ASCII driven terminal and contained its own processors. Normal text was written in a dot matrix font at several prefixed scales, not as vectored glyphs by a pseudo rasterizing mechanism. Graphics were drawn using the D to A decoders. Fancier text could be plotted. The image though depended on storage tube technology (memory was expensive then) and Tektronix were already using them in their scopes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Digital was doing it in another way. They had a minicomputer which shared memory with the a graphic processor which cycled through following display instructions. If we take one, such combination, &lt;a href=&quot;http://www.brouhaha.com/~eric/retrocomputing/dec/gt40/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the GT44&lt;/a&gt;, this was a VT-11 graphics processor on a PDP-11/40 minicomputer driving a long persistence X-Y monitor. It would fetch and decode instructions using DMA from shared memory and display the results on the screen, repeating the cycle, hopefully before the display disappeared (otherwise you would get annoying flickering). As the processor could modify the display instructions stream directly, it was quick and so facilitated [simple games][1]. The graphics processor was not simple but remember that this was 74 series chips in those days. Luckily, the [service manual is on bitsavers][2] which gives you info about the whole path. Note that DMA devices communicated with the main processor through &lt;a href=&quot;https://en.wikipedia.org/wiki/Unibus&quot; rel=&quot;nofollow noreferrer&quot;&gt;Digital's Unibus&lt;/a&gt; which handled signalling and in particular memory contention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could it be done without a long persistence screen now? Yes, I think I would still stay with a second processor to drive the display and processor speeds are much faster. It is also easier to handle DMA these days which took about half a board back then. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I worked on graphics software for the Tek series and later the VT-11 many, many years  ago.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some references:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] &lt;a href=&quot;https://en.wikipedia.org/wiki/Lunar_Lander_(video_game_genre)#Lunar_Lander_(1973)&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Lunar_Lander_(video_game_genre)#Lunar_Lander_(1973)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] &lt;a href=&quot;https://archive.org/details/bitsavers_decgraphic1GraphicDisplayProcessorSep74_5480001/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/details/bitsavers_decgraphic1GraphicDisplayProcessorSep74_5480001/mode/2up&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5164" LastActivityDate="2020-05-12T09:41:22.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14768" PostTypeId="2" ParentId="13898" CreationDate="2020-05-12T10:34:49.643" Score="3" Body="&lt;p&gt;The PDP-1 was priced to be sold to a lab and was relatively easy to interface to. This means that it could be used for processing and displaying data from a variety of equipment such as mass spectrometers and so on. It was also used by &lt;a href=&quot;https://www.cadhistory.net/06%20First%20Commercial%20CAD%20System.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;ITEK for one of the very early CAD systems in 1964, the Electronic Drafting Machine&lt;/a&gt; (PDF warning).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could also be used as an adjunct to a larger mainframe computer, a bit like a very expensive graphics terminal which manipulated data that would be produced and/or processed elsewhere. You didn't want to spend time interacting with a computer that you were charged by the minute for. Its price allowed someone to use it directly and it was owned outright rather than leased as many mainframes were in those days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://gordonbell.azurewebsites.net/digital/timeline/pdp-1story.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;An early preview of the system in Datamation&lt;/a&gt; noted that one proposed application was weapon simulation, perhaps predicting Spacewar?&lt;/p&gt;&#xA;" OwnerUserId="5164" LastActivityDate="2020-05-12T10:34:49.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14769" PostTypeId="2" ParentId="12532" CreationDate="2020-05-12T14:56:09.637" Score="-1" Body="&lt;p&gt;I've been musing about stuff like this here: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14762/thinking-through-the-design-of-a-ttl-video-card-what-memory-chips-and-how-to-ma&quot;&gt;Thinking through the design of a TTL video card: what memory chips and how to manage memory?&lt;/a&gt; and the people didn't like it. I never get the value of shutting down explorative discussions. Ah well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you need to consider the clock speed your system will run on. If you go for 640x480 you clock at 25.175 MHz as you said, and that isn't a speed that the 6502 is normally run on, the W65C02S can do 14 MHz. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to run the CPU in 1 MHz, your video circuit should make the clock signal for the CPU and give it whatever is left over. But I figure if you want raster line interrupts and light pen strobe interrupts, you want to do better than run the CPU in the video blank phases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the constraints and math goes like this: your video card sets the beat, since it cannot wait and keep in sync. So the video card in any way generates the clock for the CPU. That's settled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The video card needs a lot of bandwidth from RAM. In monochrome mode that would be access for one byte every 8 pixels. 3.14 MHz, 318 ns. Double that for CPU to get in on the interleaved cycles and you will need 150 ns RAM. That is what I have read these DRAMS could do squeezing the refresh in as well. I could be wrong on the exact numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a 4 color palette mode with palette changeable for each 8x8 pixel block (e.g. C64 VIC-II style) you need 2 bits per pixel, so your run on the RAM doubles down. This is why the C64 could not do more than 320x200. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to run everything at full blast in 25.175 MHz with one byte per pixel, and the CPU in interleaving cycles, you would need the RAM to squeeze into 19 ns cycles. Is there any SRAM chip that can do that? I doubt it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have my eyes on the HM628512P-5 with 512k x 8bit at 55 ns access time. No way to come even close!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is where my thinking has moved to use dedicated video memory and do it in parallel. My favorite would be a 1Mx4 bit chip, and I would use 3 in parallel for a 12 bit color space. But even then, at 640x480 I would need it to respond in 39.8 ns. Which is still too fast! So perhaps a 1M x 1 bit organization and I would use 9 in parallel to have 3 bits for each color channel, MCM6227 or CY7C107D perhaps? That CY can do 10 ns. With that we could even do wider. But I would really like to stick to DIP packages, not surface mount.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I would like is an exhaustive list of all SRAMs that are still available that are DIP packages and I would find my size and speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for all those other &quot;modes&quot; they are just variations on the theme how you end up with your RGB values to send to the monitor. If you get one byte for an 80 character wide text mode display, your memory bandwidth goes down to 39.25 kHz. The bits you get from the CHAR-ROM, and then the bits to pixels using whatever color palettes from RAM or internal registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now have you thought about the design of your sprite overlays already? With mask (alpha channel?) and pixels? I have, would need an adder to add the offset and then for each sprite read the memory or internal registers for XOR mask OR pixels on the fly to determine the final RGB value. This lead me to really appreciate what the VIC-II was all doing at the same time, and makes me think even more about having separate video RAM instead of using the regular CPU's memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, did you think about how to interface the video RAM with the CPU? I would hate to write through a little port setting pixel address and pixel value one by one. I am thinking of mapping the VRAM into the CPU's address space, write to it, and then un-map it to continue working with the normal RAM underneath. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And to complete the brainstorming here, in my hunt for RAM chips, I also saw dual-port RAM. They went up to 8k x 8bit, and have two sets of separate A and D pins. I don't remember the speed.&lt;/p&gt;&#xA;" OwnerUserId="15591" LastActivityDate="2020-05-12T14:56:09.637" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14771" PostTypeId="2" ParentId="13898" CreationDate="2020-05-13T08:49:08.267" Score="1" Body="&lt;p&gt;The PDP-1 was designed as an unofficial successor to the &lt;a href=&quot;https://en.wikipedia.org/wiki/TX-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIT Lincoln Labs TX-0&lt;/a&gt;, which also had a similar display.  On the TX-0 this had been used for interactive debugging as well as graphical display of the results of experiments (eg an early machine learning experiment that simulated the way a mouse learns to navigate a maze); it is likely that these applications inspired DEC to include a similar display in their machine, and indeed a PDP-1 debugger inspired by the TX-0's system &lt;a href=&quot;https://www.computerhistory.org/pdp-1/189cc577e7b13aafbb0efab4c547d262/&quot; rel=&quot;nofollow noreferrer&quot;&gt;was developed&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-05-13T08:49:08.267" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14772" PostTypeId="1" AcceptedAnswerId="14773" CreationDate="2020-05-13T13:05:22.030" Score="13" ViewCount="591" Body="&lt;p&gt;While researching the underpinnings of &lt;a href=&quot;https://en.wikipedia.org/wiki/Integer_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Integer BASIC&lt;/a&gt; (IB), I came across an oddity I'm hoping someone can explain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike MS-derived systems, IB converted numeric constants to their 16-bit representations at edit-time rather than run-time. To indicate that the following data was a constant, it placed a single-byte token in front of the two-byte value. Nothing interesting so far, Atari BASIC did the same thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here's the mystery: IB did not use a single token to indicate that a constant followed, but ten different ones. The token to use was selected by examining the first digit of the ASCII representation, so for instance, the number &quot;10&quot; starts with &quot;1&quot; and is prefixed with $B1, whereas &quot;55&quot; starts with &quot;5&quot; and is prefixed with $B5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone offer an explanation for this oddity? I cannot find one on the 'net, and Woz never mentions it anywhere. It does not appear it saves times or memory in either the encode or decode, but maybe I'm missing something?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="6659" LastEditDate="2020-05-13T19:47:08.910" LastActivityDate="2020-05-14T00:00:51.240" Title="Odd tokenizing in Integer BASIC" Tags="&lt;apple-ii&gt;&lt;integer-basic&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14773" PostTypeId="2" ParentId="14772" CreationDate="2020-05-13T13:32:14.817" Score="12" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It does not appear it saves times or memory in either the encode or decode, but maybe I'm missing something?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, it kind of simplify decoding. The values $B0..$B9 are exactly what's uses to mark up numbers in literals and variable names. And here they as well simplify the interpreter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Integer BASIC all tokens are encoded with high bit off, while everything else, i.e. variables and literals have the high bit set - which is exactly like characters got stored in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8655/6659&quot;&gt;Apple II video RAM&lt;/a&gt;. In this content $B0..$B9 is simply the representation of ASCII $30..$39, the numeric characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So strictly, $B0..$B9 aren't tokens but ASCII as Integer BASIC sees it (with high bit set).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the interpreter walks thru a program line, he will see the high bit set and collect the remaining characters to handle them as variable name, string literal or numeric literal. Except in case of a numeric one ($Bx) it saves the decoding and simply accepts the next two bytes as its preencoded value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due the use of high-bit-set ASCII, there is no saving in unifying to a single indicator, or using all 10 values equally, as they can't be used otherwise (variable names have to start with a letter). So why bother. Simply taking the first numeral literal saves at least an LDA :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It as well keeps testing for a numeric literal the same as without optimized storage: &lt;code&gt;&amp;gt;= '0' AND &amp;lt;='9'&lt;/code&gt; or &lt;code&gt;&amp;gt;= $B0 AND &amp;lt;=$B9&lt;/code&gt;. Eventually more important, due the encoding in 'groups', the three basic items of a program line, tokens, variables and constants, can now be distinguished quite easy - maybe by using a single test instruction (*1).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I would speculate that he originally had numerical literals as well stored as their high-bit-set ASCII value and only added the optimisation later on. But that's just my own guess.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I wouldn't be surprised if distinction between tokens, variable names and constants would comes down to a simple three machine instruction sequence&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;BIT&lt;/code&gt; the next byte in instruction stream&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;BPL&lt;/code&gt; (high bit cleared) -&gt; Token&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;BVC&lt;/code&gt; (greater than $BF) -&gt; Variable name&lt;/li&gt;&#xA;&lt;li&gt;otherwise numerical constant&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Just a wild but obvious guess, I haven't looked into disassembly, that would quite fit Woz' knack for bit fiddling - just compare this with the way the Apple II charset is formed by arranging a 64 character ROM into a sophisticated 256 code pattern to provide a main charset and two subsets)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-14T00:00:51.240" LastActivityDate="2020-05-14T00:00:51.240" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14774" PostTypeId="1" CreationDate="2020-05-13T19:27:51.073" Score="0" ViewCount="104" Body="&lt;p&gt;From what I understand of &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7144/576&quot;&gt;this answer,&lt;/a&gt; the Leningrad delays the Z80 during the M1 cycle so that the video generation circuitry can do its thing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can see how M1 is &quot;latched&quot;  (don't know if that's the right term) into a D flip flop (it's D9 on the schematic below) when the CPU wants to read from DRAM. I think this means that /WAIT is only low for exactly one M-cycle after an opcode fetch from DRAM, and is high at all other times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can see how /WRBUF also influences /WAIT somehow. (I think this signal is false for two pixels, true for two pixels, and then false for another four pixels, per character cell, but I don't know why yet) It's fed to the same flip flop but I don't see what it does, so it's possible I'm wrong in my assumption in the previous paragraph about when /WAIT is low.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difficulty I have with understanding this setup is that the pixel shift register is unconditionally loaded with each rising edge of H1. It's known that an instruction may take any number of T-states (between 4 and 23 apparently, but this does not take into account repeated prefixes), which means that H1 may happen any number of times during an instruction that's executing from RAM. Where has my reasoning gone wrong? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UB48L.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UB48L.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-05-13T21:07:01.127" Title="How exactly does Leningrad contend the memory?" Tags="&lt;video&gt;&lt;zx-spectrum-clones&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14775" PostTypeId="2" ParentId="14774" CreationDate="2020-05-13T21:07:01.127" Score="2" Body="&lt;p&gt;The ideas behind:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;DRAM access takes place at every CPU cycle.&lt;/li&gt;&#xA;&lt;li&gt;Every other DRAM access (or slot) is for video (further differing between attribute and pixel reads), the rest slots are for CPU. In fact, CPU and video slots simply follow each other in a rigid sequence.&lt;/li&gt;&#xA;&lt;li&gt;As the M1 read signals are active for only 1.5 clocks, the Leningrad phases or '&lt;em&gt;aligns&lt;/em&gt;' each M1 access into the DRAM CPU slot, if it happens to be out of phase. It is made by shortly applying the /WAIT signal for a single clock cycle.&lt;/li&gt;&#xA;&lt;li&gt;In contrary, plain memory reads or writes always last for 2 clocks, thus no need for their '&lt;em&gt;aligning&lt;/em&gt;'.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;As a result, one says that on Leningrad, all instruction clock numbers are '&lt;em&gt;even&lt;/em&gt;', in the sense that if previous instruction ends at '&lt;em&gt;odd&lt;/em&gt;' cycle, the next one will be added a single wait clock, thus effectively making the previous instruction's number of clocks '&lt;em&gt;even&lt;/em&gt;'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This interpretation is rather descriptive, however not completely correct.&#xA;There are  instructions that have non-consecutive M1 cycles that separated by a memory read. An example is a &lt;code&gt;SET 0,[ix+n]&lt;/code&gt;, where the first two opcodes are &lt;code&gt;0xCB&lt;/code&gt; and &lt;code&gt;0xDD&lt;/code&gt; (the first one, &lt;code&gt;0xCB&lt;/code&gt; will be '&lt;em&gt;aligned&lt;/em&gt;' if needed, and the second is always '&lt;em&gt;aligned&lt;/em&gt;'), then there follows a plain memory read for a displacement, then another opcode, that now is always '&lt;em&gt;unaligned&lt;/em&gt;', thus causing another '&lt;em&gt;alignment&lt;/em&gt;'.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-05-13T21:07:01.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14776" PostTypeId="1" CreationDate="2020-05-13T21:32:00.580" Score="39" ViewCount="3325" Body="&lt;p&gt;Originally, the FTP protocol connected back from the server to a client to actually transfer files through that new connections. 14 years later after the introduction of the FTP, the 'passive mode' was added to it, so that only client connects to server ever, however a need for multiple connections remained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare that to HTTP or SSH protocols, where many things could be done through a single connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NFS protocol (until the late NFSv4) has a rather chatty connection process, where the client first connects to the 'portmapper' (at a fixed port 111) to only get a port of the 'mountd' daemon, then connects to that daemon only to inform the server of a mount a client is about to do. After that, client returns to a 'portmapper' to get regular NFS port (2049), and proceed there with regular operations.&#xA;The same kind of chatter happens when client wishes to use additional services like 'rquotad', 'lockd' or 'statd' -- each at its own port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The funnier thing is that all but 'portmapper' (111) and regular NFS (2049) ports are also dynamic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, in NFSv4 everything at last collapsed back into a single port (2049).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my questions follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What were the design rationale behind not putting the whole protocol into a single connection, at a time those protocols were designed? What benefits emerged specifically from doing server-to-client back-connections in FTP?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall, what benefits got the designers planning the protocols in such peculiar ways?&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="3290" LastEditDate="2020-05-14T03:33:58.043" LastActivityDate="2020-10-10T13:59:27.430" Title="What was the design rationale behind multi-port and multiple connections (and back-connections) designs of the early protocols like NFS or FTP?" Tags="&lt;history&gt;&lt;internet&gt;" AnswerCount="4" CommentCount="12" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14777" PostTypeId="2" ParentId="14776" CreationDate="2020-05-13T21:54:36.000" Score="54" Body="&lt;p&gt;At least for FTP, the actual file transfer happened over a different connection to support a particular file transfer mode that isn't used much today. Suppose you have three machines, A, B, C, and you want to transfer a file from machine A to machine B. You are logged in to an FTP client on machine C. With FTP you can do the following:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;        ┌──────────┐               ┌──────────┐&#xA;        │          │    Bulk data  │          │&#xA;        │ Server A ├──────────────▶│ Server B │&#xA;        │          │               │          │&#xA;        └──────────┘               └──────────┘&#xA;             ▲                           ▲&#xA;             │                           │&#xA;    Control  │                           │  Control&#xA;             │                           │&#xA;             │       ┌────────────┐      │&#xA;             │       │            │      │&#xA;             └───────┤  Client C  ├──────┘&#xA;                     │            │&#xA;                     └────────────┘&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;That means you can, from C, log in to FTP on both machine A and machine B, and with the right combination of PORT commands, you can set up a transfer from A to B where the actual file data does not go through machine C. This helped if the bandwidth between A and B was much greater than the bandwidth available to C.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastEditorUserId="15334" LastEditDate="2020-10-10T13:59:27.430" LastActivityDate="2020-10-10T13:59:27.430" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="14779" PostTypeId="2" ParentId="14776" CreationDate="2020-05-14T00:06:11.933" Score="21" Body="&lt;p&gt;For FTP, I think there are two factors here:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The absence of multiplexing multiple data streams over a single transport connection, and&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The server-to-client connection for data transfer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The benefit of a dedicated transport connection for data transfer is that you can implement stream mode: the sender pours data bytes (and only data bytes) down the pipe, and the receiver empties the pipe into the file.  End of stream is end of file. Simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The downside of having a connection per data stream is... not much.  You're still using the same wire bandwidth. There's a few more bytes of kernel memory in use at each end to track the extra TCP connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The server-to-client connection only proved to be problematic later on in TCP life, when we had acquired NAT and firewalls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, the original FTP design looks to me like they went for protocol simplicity, and I'd guess that's good for efficiency and for interoperability, when the OS world was much more heterogeneous.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;With respect to portmapper, that's really covering up for a lack of a session layer in the usual TCP/IP stack.  To connect to a remote program, you need to know its transport address, i.e., the combination of IP address and TCP (or UDP) port number.  That in turn means either fixed assignments, or complex manual configuration, or someone to ask which arbitrary number is in use on that node at this time.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The portmapper takes the last-mentioned approach. Server gets arbitrary port assigned, registers it with the port mapper.  Note that this was not specific to NFS, but rather it was a general RPC mechanism, RPCs being all the rage at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an aside, DECnet avoided this by having a thin session layer: a listening server got an arbitrary NSP (transport layer) port.  The client never dealt with that port numer; it connected using a session layer identifier (either a small number, or a text string - the latter of course needs no central authority to adjudicate) which the system used to find the running server, or else start a new program.  So you got both portmapper and inetd function built in, pretty much invisibly to both client and server (though some server-side config might be needed for the 'inetd-like' use case).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-05-15T22:48:40.387" LastActivityDate="2020-05-15T22:48:40.387" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="14780" PostTypeId="1" CreationDate="2020-05-14T06:51:47.733" Score="14" ViewCount="263" Body="&lt;p&gt;From Wikipedia's &lt;a href=&quot;https://en.wikipedia.org/wiki/Code_page&quot; rel=&quot;noreferrer&quot;&gt;code page&lt;/a&gt; article:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Originally, the code page numbers referred to the &lt;em&gt;page&lt;/em&gt; numbers in the IBM standard character set manual&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Is any version of this publication available? I'd be content even with a photo of the cover.&lt;/p&gt;&#xA;" OwnerUserId="18114" LastActivityDate="2020-05-14T22:54:02.767" Title="Is the &quot;IBM standard character set manual&quot; around?" Tags="&lt;ibm&gt;&lt;text&gt;&lt;books&gt;&lt;ebcdic&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14781" PostTypeId="2" ParentId="14776" CreationDate="2020-05-14T09:07:27.780" Score="15" Body="&lt;p&gt;For NFS (and portmapper), it's down to it being implemented as a SunRPC service. The whole idea is that you have your services randomly scattered on non-reserved ports, with the portmapper knowing where they are (by them registering on startup).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This allows you to have only one fixed port, gets around the problem of needing to coordinate with a global body to get your static port assigned, and things like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has the drawback that you need to go via the portmapper for every &quot;first connection&quot; from a client, incurring at least a few round-trips delay before something useful can be done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it was also designed to work in a &quot;LAN-type&quot; environment, where the extra few roundtrips weren't that long. And with slower network speeds, to boot (10 Mbps would've been normal, 100 Mbps a luxury), so the extra time taken by the portmapper roundtrip is essentially lost in the noise.&lt;/p&gt;&#xA;" OwnerUserId="3842" LastActivityDate="2020-05-14T09:07:27.780" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14783" PostTypeId="1" AcceptedAnswerId="14784" CreationDate="2020-05-14T13:58:11.560" Score="0" ViewCount="452" Body="&lt;p&gt;What's the name of this output retro gaming monitor device? &#xA;The following is a still from the Netflix production of 'Bandersnatch', a 2018 interactive movie, set in Britain, mostly in the year 1984. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XfzuX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XfzuX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CRT Monitor has buttons which read 1 to 8, RGB and Video. A microcomputer is connected (not shown) to which a joystick is connected. &lt;/p&gt;&#xA;" OwnerUserId="18116" LastEditorUserId="5222" LastEditDate="2020-05-15T08:41:02.983" LastActivityDate="2020-05-15T08:41:02.983" Title="What's the name of this CRT monitor?" Tags="&lt;crt-monitor&gt;" AnswerCount="1" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="14784" PostTypeId="2" ParentId="14783" CreationDate="2020-05-14T13:59:47.297" Score="18" Body="&lt;p&gt;It’s a regular 80s-era TV set, specifically a &lt;a href=&quot;https://2.bp.blogspot.com/_AzT5pruwnbg/SyAUXUB2C4I/AAAAAAAAISY/VqNb47oVRJw/s1600-h/1986.jpg&quot; rel=&quot;noreferrer&quot;&gt;Ferguson MC01&lt;/a&gt; (from a 1986 Argos catalogue, see &lt;a href=&quot;https://80sactual.blogspot.com/2008/09/some-1980s-television-sets.html&quot; rel=&quot;noreferrer&quot;&gt;this article&lt;/a&gt;): the buttons are volume, brightness, contrast, colour, and channel selection buttons. This particular model was designed to be computer-friendly, with RGB support and automatic switching. Ferguson also produced an add-on for 48K ZX Spectrum computers, &lt;a href=&quot;https://www.worldofspectrum.org/infoseekid.cgi?id=1000168&quot; rel=&quot;noreferrer&quot;&gt;the MA20&lt;/a&gt;, which provided RGB output for use with such TVs (also mentioned in &lt;a href=&quot;http://www.crashonline.org.uk/25/technews.htm&quot; rel=&quot;noreferrer&quot;&gt;CRASH&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/S1Vff.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S1Vff.jpg&quot; alt=&quot;Argos catalogue showing the Ferguson MC-01&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The joystick wouldn’t be connected to the TV itself, but to a computer connected to the TV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your photo is a screengrab from &lt;a href=&quot;https://en.wikipedia.org/wiki/Black_Mirror%3A_Bandersnatch&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Black Mirror: Bandersnatch&lt;/em&gt;&lt;/a&gt;, and the game shown is the titular &lt;em&gt;Bandersnatch&lt;/em&gt;, one of the fictional &lt;a href=&quot;https://www.tuckersoft.net/ealing20541/history/&quot; rel=&quot;noreferrer&quot;&gt;Tuckersoft games&lt;/a&gt;. This also explains the UK spelling on the TV, which can be seen in more detail &lt;a href=&quot;https://youtu.be/VNw9DAwp2Kk?t=116&quot; rel=&quot;noreferrer&quot;&gt;in this featurette&lt;/a&gt;. The computer would be a &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum&quot; rel=&quot;noreferrer&quot;&gt;ZX Spectrum&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4147/tommy&quot;&gt;Tommy&lt;/a&gt; and &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/10666/michael-graf&quot;&gt;Michael Graf&lt;/a&gt; for contributing to this spelunking adventure.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-14T18:04:59.207" LastActivityDate="2020-05-14T18:04:59.207" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14785" PostTypeId="2" ParentId="14780" CreationDate="2020-05-14T22:54:02.767" Score="4" Body="&lt;p&gt;The document everything seems to refer back to is IBM's &quot;Character Data Representation Architecture Reference and Registry&quot; (SC09-2190-00).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a copy here, in IBM's BookManager format: &lt;a href=&quot;https://www-01.ibm.com/servers/resourcelink/svc00100.nsf/pages/zosv1r13-pdf-download?OpenDocument&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www-01.ibm.com/servers/resourcelink/svc00100.nsf/pages/zosv1r13-pdf-download?OpenDocument&lt;/a&gt; (search for SC09-2190, about three-quarters of the way down a long web page).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This site claims to be a BookManager reader that runs in on Windows 95 and similar Windows versions: &lt;a href=&quot;https://www.ibm.com/support/pages/ibm-library-reader-windows&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ibm.com/support/pages/ibm-library-reader-windows&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The FTP download link works, but I don't have any way to install it on such an old OS - so apologies if this answer leads nowhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be a warning flag that most documents on that long IBM list are available as PDFs, but not this one. I guess it may be unreadable unless all the code pages are actually installed somewhere the document reader can find them.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2020-05-14T22:54:02.767" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14786" PostTypeId="2" ParentId="14776" CreationDate="2020-05-14T22:56:07.060" Score="18" Body="&lt;p&gt;&lt;em&gt;(I originally posted this as an answer to the similar question &quot;&lt;a href=&quot;https://stackoverflow.com/questions/18700840/why-we-need-two-connections-between-the-ftp-server-and-the-ftp-client&quot;&gt;why we need two connections between the ftp server and the ftp client&lt;/a&gt;&quot; at StackOverflow)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The decision to have separate control and data connections in FTP was taken at the Data and File Transfer Workshop at MIT on April 14-15, 1972.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RFC310 &quot;Another Look At Data And File Transfer Protocols&quot; was published on April 3 to prepare for the workshop. Some relevant information from that RFC:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The CPYNET protocol used on TENEX systems closed the control connection and opened a new one with possibly different byte-size. The selection of byte-size could be important for some computers, e.g: the 36-bit PDP-10.&lt;/li&gt;&#xA;&lt;li&gt;Ad-hoc protocols on top of TELNET where the receiving process had to inspect every byte were considered slow. Using separate connections was suggested to avoid that overhead.&lt;/li&gt;&#xA;&lt;li&gt;In the Data Transfer Protocol (equivalent to modern-day data connections in FTP), block mode was considered too costly just to provide control/data separation and EOF indication. Again, opening/closing a separate data connection was suggested as an alternative (which would also allow selection of an appropriate byte-size).&lt;/li&gt;&#xA;&lt;li&gt;For FTP usefulness, efficiency was considered important, and again separate connections with perhaps different byte-size were suggested, noting the ambiguity that closing a connection could be either due to an EOF indication or an error.&lt;/li&gt;&#xA;&lt;li&gt;For use in TIPs/IMPs (Terminal Interface Message Processors), some of which had no file system, and had devices listening on specific sockets, it was considered convenient to allow sending data to a specified socket.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;RFC327: &quot;Data and File Transfer Workshop Notes&quot;, published on April 27, briefly summarizes the discussions and decisions taken in the workshop. Speed and efficiency of file transfer were considered important, with byte-size and data format conversions being considered some of the most important factors affecting speed and efficiency. Finally, it was decided to use separate control and data connections. Other decisions were taken: the control connection would be a TELNET connection, the control connection would use ASCII human-readable commands and responses, and DTP (the Data Tranfer Protocol) would stop existing as a separate entity, and become the protocol used on the data connection of FTP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, RFC354: &quot;The File Transfer Protocol&quot;, published on July 8, 1972, became the first incarnation of the FTP RFC to feature separate control and data connections. It used a &lt;code&gt;SOCK&lt;/code&gt; command, instead of our familiar &lt;code&gt;PORT&lt;/code&gt; and &lt;code&gt;PASV&lt;/code&gt; commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Addendum&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Inter-server file transfer (AKA FTP bounce/FXP) appeared on RFC542 &quot;File Transfer Protocol for the ARPA Network&quot;, published on August 12, 1973, with the introduction of the &lt;code&gt;PASV&lt;/code&gt; command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, RFC765 &quot;file Tranfer Protocol&quot;, published on June 1980, was modified to use TCP instead of NCP, changing the &lt;code&gt;SOCK&lt;/code&gt; command for the &lt;code&gt;PORT&lt;/code&gt; command.&lt;/p&gt;&#xA;" OwnerUserId="740" LastActivityDate="2020-05-14T22:56:07.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14787" PostTypeId="1" AcceptedAnswerId="14789" CreationDate="2020-05-15T03:05:43.277" Score="17" ViewCount="2393" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sTfLF.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sTfLF.jpg&quot; alt=&quot;motherboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this image, you can see, from the right, a 16-bit ISA slot (occupied by a controller card), an 8-bit ISA slot, four more 16-bit ISA slots, and two of these strange slots that look like a 16-bit ISA slot, except with an 86-contact extension rather than the normal 36-contact extension. These are definitely not VLB extensions. I found &lt;a href=&quot;https://stason.org/TULARC/pc/motherboards/D/DTK-COMPUTER-INC-386-PEM-2000-FAST-ET20.html&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; on the motherboard, which says they are some sort of &quot;32-bit external memory card.&quot; What are these slots? Are they compatible with 8-bit or even 16-bit ISA?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is only one of this computer's oddities. The controller card, while sporting a typical floppy connector (the solder ends of which are visible at the top right), also has a strange 34-pin connector (keyed differently from the floppy connector and visible immediately below it) labeled &quot;winchester&quot;, as well as two 20-pin connectors (visible below the &quot;winchester&quot; connector) labeled &quot;drive 0&quot; and &quot;drive 1&quot;. The winchester and drive 0 connectors both connect to a very (physically) large Seagate? ST-251 hard drive.&lt;/p&gt;&#xA;" OwnerUserId="18126" LastEditorUserId="18126" LastEditDate="2020-05-15T03:12:49.740" LastActivityDate="2021-01-25T00:40:38.600" Title="What are these weird long ISA slots on this 386 board? (not VLB)" Tags="&lt;intel&gt;&lt;80386&gt;&lt;isa&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14789" PostTypeId="2" ParentId="14787" CreationDate="2020-05-15T03:51:27.357" Score="22" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I found this page on the motherboard, which says they are some sort of &quot;32-bit external memory card.&quot;  What are these slots? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They are exactly that, memory expansion. This is a rather early 386 board from before memory modules became a thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mainboard can be fitted with 1 MiB using 256 KiBit chips (41256), so any expansion has to go on cards. With (AT) ISA being only 16 bit, using an unmodified Bus would slow down the 386 considerable. Not cool for someone who just payed an upper end price tag. So they had to come up with some way to allow 32 bit wide memory expansions. Instead of making a whole proprietary slot or pinhead, they decided simply to expand the &lt;a href=&quot;https://en.wikipedia.org/wiki/Industry_Standard_Architecture#ISA_bus_architecture&quot; rel=&quot;noreferrer&quot;&gt;16 bit ISA layout&lt;/a&gt; to 32 bit - so in some way it is like VLB. Going that way allowed to use these slots as well for regular I/O cards.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Are they compatible with 8-bit or even 16-bit ISA?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Im pretty sure they are fully compatible at least with 8 bit cards - it might not be for 16 bit cards. All educated guesswork from the visible traces.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This is only one of this computer's oddities. The controller card, [...] also has a strange 34-pin connector [...] labeled &quot;winchester&quot;, as well as two 20-pin connectors [...] labeled &quot;drive 0&quot; and &quot;drive 1&quot;. The winchester and drive 0 connectors both connect to a very (physically) large Seagate? ST-251 hard drive.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(No, the ST-251 is not a large disk drive, it's only a 5.25 and in addition half height. Those were considered quite small at the time, top notch miniaturisation)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, it's exactly whats written on, it connects to a &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_IBM_magnetic_disk_drives#IBM_3340&quot; rel=&quot;noreferrer&quot;&gt;Winchester Drive&lt;/a&gt; - slang name for a hard disk - and a &lt;a href=&quot;https://stason.org/TULARC/pc/hard-drives-hdd/seagate/ST251-1-43MB-5-25-HH-MFM-ST412.html&quot; rel=&quot;noreferrer&quot;&gt;ST-251&lt;/a&gt; is much like the prototypical 40 MiB drive of that time. The i&lt;a href=&quot;https://en.wikipedia.org/wiki/ST506/ST412#Interface_to_controller&quot; rel=&quot;noreferrer&quot;&gt;nterface is called ST-506&lt;/a&gt; after the first Seagate drive using it. The &lt;a href=&quot;https://en.wikipedia.org/wiki/ST506/ST412#Connector_pinouts&quot; rel=&quot;noreferrer&quot;&gt;34 Pin connector&lt;/a&gt; holds all drive control signals, while the 20 pin delivers data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, nothing special here, just the regular disk controller in pre-&lt;a href=&quot;https://en.wikipedia.org/wiki/Parallel_ATA#IDE_and_ATA-1&quot; rel=&quot;noreferrer&quot;&gt;IDE&lt;/a&gt; times. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-05-15T03:51:27.357" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14790" PostTypeId="2" ParentId="14787" CreationDate="2020-05-15T07:54:25.137" Score="8" Body="&lt;p&gt;To add to Raffzahn's answer: I strengthen the &quot;might not be compatible to 16-bit cards&quot; to &quot;are &lt;em&gt;most likely&lt;/em&gt; not compatible to 16-bit cards&quot;. As I see the traces on the photo, there is nothing that supports the impression these slots are ISA 16-bit compatible - but also no proof they are not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A reliable tool to learn more about that board is a continuity tester. I already probed a lot of computer hardware using continuity beepers of multimeters, and despite randomly applying open-circuit voltages of up to 3V to undefined pins, I never damaged any electronic component by it. If you happen to have a quickly responding continuity tester, you can easily probe connections to a pin by having one probe at the connector you are interested in, and sliding the other probe alongside possible pins that might be connected to your connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your board, I see two likely possibilities on how the memory expansion slot is connected:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It might be some kind of local bus slot, i.e. directly connected to the 80386 address and data pins. Address decoding (like row/column multiplexing, determining whether the board should respond to that address) would be on the memory card in this case. You should be able to beep out address and data to the 80386 pins directly or connected through 74F245 or 74F244 buffer chips.&lt;/li&gt;&#xA;&lt;li&gt;It might be some kind of 32-bit memory module connector (like the 72-pin PS/2 SIMMs) with already decoded address and RAS/CAS lines. In this case, you should be able to beep out the data pins again to the 80386 local bus (and again possibly through the buffer TTL chips), whereas the address pins and RAS/CAS pins are connected to a memory decoder, which is often part of a VLSI (the technology &quot;very large scale integration&quot;, not necessarily the manufacturer with the same name) chip, on which you might find a datasheet in the internet.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The only thing to add to the hard drive controller information is that there were different kinds of &quot;winchester&quot; controllers, most prominently MFM and RLL controllers. The hard drive model number indicates it should be connected to an MFM controller, and have a capacity of 40MB. If your computer shows a 60MB hard drive, someone swapped the original MFM controller by an RLL controller, which manages to write data more densly to the drive, with only moderately higher requirements on the drive itself. This is an &lt;em&gt;unsupported&lt;/em&gt; configuration, and while it works for some controller/drive combinations, there are numerous reports of reliability problems around the internet caused by using RLL controllers with MFM drives.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2020-05-15T07:54:25.137" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14793" PostTypeId="2" ParentId="1711" CreationDate="2020-05-15T19:54:28.740" Score="3" Body="&lt;p&gt;The earlier answers here explored the calculations that the math box&#xA;performs.  It's also helpful to understand what the games that use it are&#xA;trying to accomplish.  Battlezone, the first game that included it, used&#xA;the math box for five things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;3D &quot;view&quot; transform&lt;/li&gt;&#xA;&lt;li&gt;3D &quot;model&quot; transform and perspective projection&lt;/li&gt;&#xA;&lt;li&gt;radar blip position&lt;/li&gt;&#xA;&lt;li&gt;2D distance calculation&lt;/li&gt;&#xA;&lt;li&gt;integer division for arctangent&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;An important formula to know for the first three is rotation about the Y&#xA;(vertical) axis:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;newX = X * cos(theta) - Z * sin(theta)&#xA;newZ = X * sin(theta) + Z * cos(theta)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3&gt;3D &quot;view&quot; transform&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;For each object in the world, the game must compute the coordinates of the&#xA;center of the object relative to the viewer's current position and facing.&#xA;This requires translating the object's X and Z coordinates to put the&#xA;viewer at the origin, and then rotating about Y.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equations for this are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rel_X = obj_world_X - viewer_X&#xA;rel_Z = obj_world_Z - viewer_Z&#xA;view_X = rel_X * cos(theta) - rel_Z * sin(theta)&#xA;view_Z = rel_X * sin(theta) + rel_Z * cos(theta)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To do this with the math box, we start with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;R0 = cos(theta)&#xA;R1 = -sin(theta)&#xA;R2 = viewer_Z&#xA;R3 = viewer_X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, for each object:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;R4 = obj_world_Z&#xA;R5 = obj_world_X&#xA;obj_view_Z = (function $0b)&#xA;obj_view_X = (function $12)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3&gt;3D &quot;model&quot; transform and perspective projection&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This one is a bit more complicated.  We start with the view coordinates&#xA;calculated earlier, and must determine the screen X,Y position of every&#xA;vertex in every visible object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the object at the origin, we rotate each vertex's coordinates,&#xA;translate them to the object's position, and then divide the X and Y&#xA;coordinates by Z to get the perspective projection.  (Battlezone does some&#xA;peculiar things with the math, but I don't want to get too deep here.)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rotated_Z = vertex_X * sin(theta) + vertex_Z * cos(theta)&#xA;model_Z = rotated_Z + obj_view_Z&#xA;&#xA;rotated_X = vertex_X * cos(theta) - vertex_Z * sin(theta)&#xA;model_X = rotated_X + obj_view_X&#xA;&#xA;screen_X = model_X / model_Z&#xA;&#xA;model_Y = vertex_Y + obj_world_Y&#xA;screen_Y = model_Y / model_Z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To do this with the math box, we set registers to the object's position and facing in view space:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;R0 = -cos(theta)&#xA;R1 = sin(theta)&#xA;R2 = obj_view_Z&#xA;R3 = obj_view_X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, for each vertex:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;R4 = vertex_Z&#xA;R5 = vertex_X&#xA;screen_X = (function $11)&#xA;RB = vertex_Y + obj_world_Y&#xA;screen_Y = (function $14)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And that's it.  The line clipping is performed by the vector graphics&#xA;hardware, so the drawing code can just feed (&lt;code&gt;screen_X&lt;/code&gt;,&lt;code&gt;screen_Y&lt;/code&gt;) into&#xA;the vector command list.  (Actually that's not &lt;em&gt;entirely&lt;/em&gt; it, as some&#xA;results are negated and the mesh is defined a certain way to make the math&#xA;come out right, but that's &lt;em&gt;essentially&lt;/em&gt; it.)&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Radar blip position&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This needs to do a rotation and then translate the coordinates to where&#xA;the radar display sits on the screen.  It turns out the model transform does&#xA;the necessary calculations if we pass in some zeroes, and does some extra&#xA;stuff we can ignore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The game plugs numbers into the calculation for &lt;code&gt;screen_X&lt;/code&gt; with function&#xA;$11, which returns R8/R7.  The game then ignores the result, and uses the&#xA;intermediate values left in R7 and R8 as the screen coordinates.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;2D distance calculation&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The game calculates the approximate distance between two objects to see&#xA;if they have collided.  The formula used is an approximation of an&#xA;approximation, but it works well enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code that uses this typically ignores the &quot;busy&quot; flag in favor of&#xA;just stalling for 6 cycles.  Function $1d or $1e is used depending on&#xA;whether the code already has the coordinate deltas handy.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Integer division for arctangent&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;To determine the direction a tank should turn to shoot the player, the&#xA;game needs to compute an arctangent, which it does with integer division&#xA;and a lookup table.  The math box provides a routine (function $14) that&#xA;divides a 32-bit value by a 16-bit value with a certain number of iterations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: the iteration count in R6 is set to 10, not 16, for the benefit of&#xA;the screen-coordinate equations.  Values are effectively divided by 64.&#xA;Battlezone just wants the 8-bit unsigned fractional value here, so it&#xA;right-shifts the 16-bit result twice more.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Other Notes&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In general the math box API doesn't appear to be intended to perform&#xA;general-purpose vector math; it's intended to solve the equations that&#xA;Battlezone needed.  If you dig into the details, though, it's not a&#xA;perfect fit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the rotations performed for the view/model transforms.  The&#xA;sine/cosine values are provided from a table as signed 16-bit fractions,&#xA;with values from 0 to 0x7fff.  (Technically it's using 0.9999695 as an approximation for 1.0... close enough.)  When calculating rotated coordinates,&#xA;the math box code multiplies the numbers and then right-shifts the result&#xA;16x, e.g.:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mb_temp = ((int32_t) REG0) * ((int32_t) REG4);&#xA;REGc = mb_temp &amp;gt;&amp;gt; 16;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If the code were expecting to multiply two integers or two 8.8 fixed-point&#xA;values, it wouldn't be right-shifting 16x.  It's clearly intended to&#xA;multiply something by a fractional value, such as the sine/cosine values&#xA;required for the rotation.  However, after multiplying a&#xA;1.15 fraction it should right-shift &lt;strong&gt;15x&lt;/strong&gt;, which means our results are&#xA;all divided by two.  Battlezone deals with this in two different ways.&#xA;For the view transform, the result is doubled by the 6502 code.  For the&#xA;model transform, the inputs were fixed by doubling the X/Z coordinates&#xA;in the shape mesh data.  (The Y coordinate isn't part of a rotation and&#xA;doesn't get shifted, so doesn't need to be doubled.  Which is why, when&#xA;you render the meshes, they all look squashed.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible for the 6502 to continue to do work while the math box is&#xA;busy.  The view transform code takes advantage of this, doing some work&#xA;on the result from function $0b while function $12 is running.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;A full disassembly of Battlezone's 6502 code and vector graphics data is&#xA;available from &lt;a href=&quot;https://6502disassembly.com/va-battlezone&quot; rel=&quot;nofollow noreferrer&quot;&gt;6502disassembly.com&lt;/a&gt;.&#xA;An article with the information from this posting, but in greater detail, is&#xA;&lt;a href=&quot;https://6502disassembly.com/va-battlezone/mathbox.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;available here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to thank everyone who provided earlier answers to this question.&#xA;The information helped me make sense of what I was seeing while disassembling&#xA;the game.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2020-05-15T19:54:28.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14794" PostTypeId="1" AcceptedAnswerId="14795" CreationDate="2020-05-15T21:08:19.707" Score="3" ViewCount="395" Body="&lt;p&gt;What are the dimensions of the C64 motherboard? I am specifically asking this because I am considering using a 64C case (these still seem to be in production) for an 8-bit homebrew machine. I wonder if it is possible to design a board in such a way that it would fit the Commodore case as well as a standard something-ATX PC case.&lt;/p&gt;&#xA;" OwnerUserId="4805" LastEditorUserId="4805" LastEditDate="2020-05-15T21:19:38.807" LastActivityDate="2020-05-15T21:54:38.193" Title="Commodore 64 board dimensions" Tags="&lt;commodore-64&gt;&lt;case&gt;&lt;homemade&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14795" PostTypeId="2" ParentId="14794" CreationDate="2020-05-15T21:32:40.923" Score="6" Body="&lt;p&gt;There are several revisions of the C-64 board (see, e.g., &lt;a href=&quot;http://www.cbmhardware.de/show.php?r=1&amp;amp;id=25/Die%20Platinen%20des%20C64&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; , or &lt;a href=&quot;https://www.c64-wiki.de/wiki/Hauptplatine&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;), with two major form factors: the old &quot;long board&quot; and the new &quot;short board&quot;. The long board (which I happen to have on my bench right now) is approximately 39cm wide and 18cm long, the short board is just as wide, but a little, well, shorter.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need exact dimensions and drill points, you could look at some of the replica PCBs that are floating around on the net, like &lt;a href=&quot;https://github.com/bwack/KU-14194HB-RevB-KiCad&quot; rel=&quot;nofollow noreferrer&quot;&gt;these&lt;/a&gt;, maybe even use the board files as a basis for laying out your PCB. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing to keep in mind when designing your own PCB is that, while the long board does fit into a C-64C case, there's not much vertical clearance on the lower end - just barely enough for a socketed DIP IC, so don't place anything tall there. &lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-05-15T21:54:38.193" LastActivityDate="2020-05-15T21:54:38.193" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14796" PostTypeId="1" AcceptedAnswerId="14797" CreationDate="2020-05-16T06:54:11.157" Score="11" ViewCount="6279" Body="&lt;p&gt;What prevented optical drives from being used as the dominant secondary storage like the magnetic disk drives, in PCs? Was it entirely technical limitation or other issues like late development and marketing? By optical drive I do not mean CD or DVD which has to follow the standards, but some kind of enclosed &quot;hard-disc&quot; with optical read and write technology and re-writable disc platters. I assume these also would have been cheaper to produce and less susceptible to damage from dust and vibrations because of the absence of microscopically closely placed read-write heads.&lt;/p&gt;&#xA;" OwnerUserId="18139" LastEditorUserId="18139" LastEditDate="2020-05-16T15:45:33.503" LastActivityDate="2020-05-18T22:21:51.863" Title="Why were optical drives not used as secondary storage instead of magnetic drives?" Tags="&lt;hardware&gt;&lt;hard-disk&gt;&lt;storage&gt;" AnswerCount="8" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14797" PostTypeId="2" ParentId="14796" CreationDate="2020-05-16T07:26:44.463" Score="49" Body="&lt;p&gt;For the simple reason that until relatively recently, it was very difficult to make a &lt;strong&gt;rewritable&lt;/strong&gt; optical medium, but it was easy to make a rewritable magnetic medium.  Magnetic tape as a recording medium has been a practical technology since the late 1930s, predating the digital computer.  For comparison, CD-RW was introduced only in 1997, more than a decade after the pressed (non-writable) CD format.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-05-16T07:26:44.463" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14798" PostTypeId="2" ParentId="14796" CreationDate="2020-05-16T07:30:23.907" Score="26" Body="&lt;p&gt;Write speed and endurance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optical drive technology has been much slower to write to than magnetic Hard Disk Drives (HDDs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The erasable optical technologies that made it to mass market were much slower in write time than HDDs and in erase time. Their life before failure was in the 100's of erases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optical drive use declined with the advent of USB flash sticks and internet connectivity, which made transporting files between machine smaller and far more convenient. HDD costs dropped to the point where schemes like RAID became a practical proposition. HDDs, singly or in RAID, offer relatively reliable backup and fast write and retrieval access. Optical drives never experienced such progress in their evolution.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastEditorUserId="5199" LastEditDate="2020-05-16T18:52:00.390" LastActivityDate="2020-05-16T18:52:00.390" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="14799" PostTypeId="2" ParentId="14796" CreationDate="2020-05-16T08:11:39.113" Score="10" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What prevented optical drives from being used as the dominant secondary storage like the magnetic disk drives in PCs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Speed&lt;/li&gt;&#xA;&lt;li&gt;Density&lt;/li&gt;&#xA;&lt;li&gt;Complexity&lt;/li&gt;&#xA;&lt;li&gt;Technological advantage of Disks&lt;/li&gt;&#xA;&lt;li&gt;Reliability&lt;/li&gt;&#xA;&lt;li&gt;Did I mention speed and density?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Even a Blue Ray does only pack 25 GiB of data on a (5.25) side. Actual HD do up to 700 GiB per (3.5) side. At times various ways of optical storage or optical guided storage, from MOD to Floptical have been tried. They could deliver remarkable results - and in theory great ones, but they never could catch up with HD development.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Was it entirely technical limitation or other issues like late development and marketing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;All of them. They had to catch up and market had to accept - not at least by price. The LS120 drives (in the US mostly known as &lt;a href=&quot;https://en.wikipedia.org/wiki/SuperDisk&quot; rel=&quot;noreferrer&quot;&gt;SuperDisk&lt;/a&gt;) for example did make a good entry and provided reliable storage in reasonable size, still, it was outrun by CD as CD could distribute at extreme low price, becoming a must, while CD-R(W) was available as upgrade for those wit writing need. Not to mention the system battle with ZIP drives ... one both lost in the end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optical recording technologies have (do) come up every now and then, offering promising results, but there is never really a niche allowing to catch up with magnetic recording. Likewise holographic storage.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I assume these also would have been cheaper to produce and less susceptible to damage from dust and vibrations because of the absence of read-write heads.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Even an optical drive has a read-write head, how else should they read and write? To get acceptable density (and speed) they will run into exactly the same issues as HD do.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The only technology that has emerged are SSDs - simply because their speed advantage was so overwhelming that even the small size of early SSD (a few dozend MiB) wasn't a hurdle, giving them time to evolve. It still took them about 20 years (starting ~1990) to become an acceptable device for mainstream PC usage.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On a side note, there are applications of optics in magnetic recording - lie using a laser to heat up a disk surface to make it writable. A quite clever combination. So optical means are not gnored but integrated - just not simply as a separate class.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-05-16T08:11:39.113" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14800" PostTypeId="2" ParentId="14796" CreationDate="2020-05-16T16:42:33.877" Score="-3" Body="&lt;p&gt;The most important reason would be that optical drives, or the whole optical data storage in general, are rubbish. They're admittedly slightly less rubbish nowadays, but back then... bleh. I am not even sure &lt;strong&gt;why&lt;/strong&gt; it was such rubbish, it needed not be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Writing to tape or harddisk is a no-brainer. You plug it in (or have it installed internally), if it is a removable medium (floppy, ZIP, hd, whatever) you may have to insert a medium, too. But either way, all in all it's &quot;write and forget&quot;.&lt;br&gt;&#xA;Tape &lt;em&gt;does&lt;/em&gt; come with the annoyance of being somewhat, err, &lt;em&gt;linear&lt;/em&gt; in terms of access, so usability isn't paramount, but on the other hand side it's cheap as dirt. On the other hand, anything that spins, somehow, is mighty fine because it is random-access, reasonably fast, relatively trouble-free, and still affordable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enter optical. You need a high-spec computer, and preparing the disk is a holy ritual for which you need special software, and which is best not interrupted lest the spiritual energy be lost. The computer cannot possibly do anything else while writing, either, you had better not even press a key or touch the mouse. Because any ever-so-slight disturbance will cause the magic laser beam to have a hiccup and the medium will be corrupted beyond repair. No, I'm not joking. It was more than a decade before drives with &quot;buffer underrun protection&quot; were available. Really, now? Why do I even have to care about any such thing as &lt;em&gt;buffering&lt;/em&gt; when all I want is to write data to storage? It should be trivial enough? Well no, it's high science, and involves a lot of meta-magic. And no, of course drives that depend on such things cannot have a buffer built-in. It's why you need a high-spec computer, and it's why you are not to touch it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there's those special filesystems and their extensions, and neither one is really compatible with each other or compatible with the &quot;normal&quot; filesystem that you're used to, and neither one can map files and filenames the same as you're used to it. Well sometimes it can, only just... not always. On a PC that wasn't an issue because English is the only language in the world anyway, but on Mac it sure was an issue.&lt;br&gt;&#xA;Ah right, and of course, you cannot boot from optical like you can from magnetic store, either. Except when doing yet another most obscure magic dance that emulates a floppy, and whatnot. Sure enough, loading a floppy emulation image (i.e. &lt;em&gt;many&lt;/em&gt; sectors) is supported, but loading a single boot sector is not. That would be just too easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it says 4x or 8x speed on your drive, which sounds awesome (must be pretty fast!?), but of course it is not. Plus, it's ever so painful to figure out how long it actually takes to burn a disk. And of course, what's written on the medium must match what's written on the drive, although your local expert tells you that it works either way. And sure enough, you're trying, and it certainly works either way. Until it doesn't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seeing how the process of burning is not a 10-second thing, you &lt;em&gt;do want to know&lt;/em&gt; how long it takes because you'll walk away and come back later. So you did your math (or are lucky enough to have the program show you an estimate) and it was, let's say 10 minutes. You come back 11 minutes later, only to find out that the drive took 3 minutes to warm up and another minute doing nothing, and now the process is 31% done, and at the end it will take another 3 minutes to &quot;finalize&quot; the disk (totalling around 25 mins). Oh, and then there's a good chance it will tell you &quot;finalizing failed&quot; the last second...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wait, what, finalize? What's that, why do I need this? Nobody can tell for sure. A non-finalized disk works just fine. In the same drive, or in a similar drive from the same manufacturer. Or in some others. But it won't work in all. Why? Nobody knows.&lt;br&gt;&#xA;Finalizing means you can no longer append data to the disk. Well, that sucks, but at least you know that the disk will work with all drives.&lt;br&gt;&#xA;Surprise. There happens to be this one drive that you have which will still not read the disk. Oh and of course, the CD player in your car's radio won't play some industrially-manufactured CDs that you legitimately bought (for &lt;em&gt;very&lt;/em&gt; substantial money at that time) because Sony shipped deliberately broken CDs in the 90s (you dirty pirate, eh?) and Pioneer players wouldn't play those. Fun fact, you actually had to pirate-copy the disk that you legitimately bought, in order to listen to the music...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and of course there's &quot;plus&quot; and &quot;minus&quot; disks, and half a dozen of other subtypes, which all look more or less the same and have more or less the same names. Some are more expensive than others, without being obvious why. Being an expert power-user, you never buy the wrong type. Except rarely. Every now and then, you find out that your particular drive doesn't work with one type. Sometimes it's a case of &quot;Duh, read the label, it says so on the box!&quot;, and sometimes it just doesn't work anyway. Correct medium, for all you can tell, does not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you managed to burn a disk, and successfully. Let's use it! Put in your optical medium, and hold your breath. Here come the 30 seconds during which the drive makes some funny noises and does &lt;em&gt;something&lt;/em&gt; (what exactly, actually?) and then you either get to read the contents, or you're not getting to read it. Really, why does sequentially reading in the first dozen kilobytes that hold the filesystem structure take so long and cause so many seeks? Oh right, because that's not what is being done! Sure enough, with a read-only medium that has abysmal seek times, buffering the directory structure is a no-go, as well as reading it in sequentially.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CDs have a durability of around 20 years, probably much longer. And they have Reed Solomon error correction, so your data is really, really safe. Even if you drill a hole through the disk, the error correction can restore the data!&lt;br&gt;&#xA;Alright. Save your data on CD, keep it in the closet, and put the CD into the drive 6 months later, only to find out that it's unreadable. Awesome. Well, luckily you burned 5 of them, just in case...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, meanwhile, optical drives have improved a lot. But they still suck, in direct comparison. BluRay, even double-layer, simply has too little storage to be useful for backup, and it still takes ages to write one disk. Plus, the mediums that actually have a fair chance of lasting a decade (manufacturer claims 1000 years, this remains to be proven) are so expensive that you can almost pay someone in a low-cost country to chisel the data into stone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In comparison, store data on NAS with redundancy, and pull your backups onto a harddisk which you pull out at the end and put into a foam cover.&lt;br&gt;&#xA;More comfort, more speed, less cost, no trouble. And both backup and restore work in 1/10th of the time.&lt;/p&gt;&#xA;" OwnerUserId="8927" LastActivityDate="2020-05-16T16:42:33.877" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14801" PostTypeId="1" CreationDate="2020-05-16T20:50:22.427" Score="9" ViewCount="301" Body="&lt;p&gt;The 6502 series of CPUs has an&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/145/56&quot;&gt;interesting quirk&lt;/a&gt;:&#xA;indexed loads and stores may perform a &quot;false read&quot;, reading from the&#xA;target address or a different address on a previous page.  There are&#xA;situations, such as code for the Disk ][, where this can be advantageous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two closely-related questions about this...&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What are some examples of how this was used deliberately?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A well-known example is discussed on page 9-22 of Jim Sather's&#xA;&lt;a href=&quot;https://archive.org/details/understanding_the_apple_ii/page/n251/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;Understanding the Apple II&lt;/a&gt;.&#xA;A write to &lt;code&gt;$C08F,X&lt;/code&gt; is used to keep the address on the bus for&#xA;two consecutive CPU cycles.  Was the feature used for other devices?  Why?&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;How did CPU behavior change with later CPUs?  Put another way, what &#xA;are the best practices for taking advantage of the feature across all&#xA;members of the Apple II product line?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Apple used the 6502, 65C02, and 65C816 in its product line, and the&#xA;false-read behavior changed a bit in the later CPUs.  I read that initial&#xA;versions of the 65816 removed the behavior, but it was restored to prevent&#xA;older Apple II software from breaking.  Apparently the final behavior of the 65816 is actually closer to that of the original 6502 than the 65C02.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also be curious to know if the behavior was removed from production chips used in non-Apple products, e.g. if you managed to fit a Rockwell 65C02 (with BBR/BBS etc.) into an Apple //e would disk writes fail.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2020-05-17T01:17:46.853" Title="6502 False Reads and Apple II I/O" Tags="&lt;apple-ii&gt;&lt;6502&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14802" PostTypeId="2" ParentId="14801" CreationDate="2020-05-17T01:17:46.853" Score="4" Body="&lt;p&gt;The 65802 and 65816 were specifically designed to retain certain bus-timing quirks of the NMOS 6502, because some Apple ][ hardware had been designed to exploit it, and Apple was the primary customer for the 65816 (ie. the ][gs).  The 65802 was intended to be a 65816 software-compatible drop-in upgrade for NMOS 6502s, and internally was mostly a 65816.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 65C02, by contrast, was designed to eliminate some of these quirks, by converting dummy writes to dummy reads, and directing dummy reads during index addressing modes to benign addresses.  Hence, some cycles that on the NMOS 6502 could cause a spurious write to an I/O device register would instead perform a harmless dummy read to zero page or the current PC address.  Most system designers prefer that to the NMOS behaviour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 65816 does, however, have explicit signals (VDA &amp;amp; VPA) to indicate whether any given bus cycle is a &quot;dummy read&quot;, which makes it much easier to design an I/O device to ignore them.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-05-17T01:17:46.853" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14803" PostTypeId="1" AcceptedAnswerId="14804" CreationDate="2020-05-17T01:24:00.333" Score="3" ViewCount="500" Body="&lt;p&gt;Back in the day, I had a Windows 98 machine (don't recall the hardware right now) and sometimes it would crash with the &quot;Windows protection error. You need to restart your computer&quot; error. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what actually did this error message mean? What &quot;protection&quot; was being violated? As I understand it, it would be triggered it an error (e.g. a divide-by-zero) happened within a device driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I installed an old version of MSDN (October '99) and searched it, but it only returns KB articles (&quot;Windows protection error&quot; after doing something) without much technical explanation. &lt;/p&gt;&#xA;" OwnerUserId="1953" LastEditorUserId="3290" LastEditDate="2020-05-17T06:48:50.367" LastActivityDate="2020-05-17T06:48:50.367" Title="What was a &quot;Windows protection error&quot;?" Tags="&lt;windows-98&gt;&lt;driver&gt;&lt;terminology&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14804" PostTypeId="2" ParentId="14803" CreationDate="2020-05-17T02:28:40.070" Score="6" Body="&lt;p&gt;&quot;Protection error&quot; is primarily a memory management violation. A process executes with its own address space.  Particular pages (range of virtual addresses) may or may not be assigned to the address space.  The hardware triggers a fault on an attempt to reference an address not assigned to the address space. The OS then aborts the process, if this was a user-mode fault.  If the bad access was in kernel mode code, then typically that is &quot;not supposed to happen&quot;, and the only thing that can be aborted is the kernel -- i.e., the system crashes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simplistic example: if your process has a virtual address range of 0 to 1000000, and it tries to read address 1005000, then that will result in an exception, and the OS will kill the process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This is overly simplified, since it ignores the mechanics of paged virtual memory, and how in some cases invalid addresses can be supplied, for example stack expansion).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other exceptions, such as the divide-by-zero case, that are also detected in hardware.  Similarly, they might cause process termination or kernel crash, depending on where they happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 9x, by virtue of its DOS-based heritage, did not have total separation between user and kernel, and it's possible that some user-mode errors could render the system unstable enough to warrant a reboot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said that, this is not exactly retro material: it's how processor memory management still works.  The OS sets up descriptions of the virtual address space for a process; the hardware detects accesses outside that assigned space; and the OS then responds to detected violations.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-05-17T02:28:40.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14805" PostTypeId="2" ParentId="14803" CreationDate="2020-05-17T05:18:09.873" Score="5" Body="&lt;p&gt;The message &quot;Windows protection error.  You need to restart your computer.&quot; is the default message Windows 9x/ME displays when a fatal error occurs.  As such it can be result of a lot of different errors Windows might encounter, even ones not involving any sort hardware protection being violated. It can happen, for example, when Windows can't allocate a critical data structure. It's not usually displayed when a program tries to access memory it shouldn't, as this normally isn't a fatal error and only results in the process being killed.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastActivityDate="2020-05-17T05:18:09.873" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14806" PostTypeId="1" AcceptedAnswerId="14808" CreationDate="2020-05-17T08:49:31.460" Score="34" ViewCount="10706" Body="&lt;p&gt;Using my 21&quot; Trinitron OSD, I can see that the resolution at boot is 720x400.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From memory, this weird resolution is extremely uncommon if ever to be seen as a choice on software that supports different resolutions, e.g. 640x400, 640x480 or 800x600 to name a few.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why does this screen resolution exist yet is rarely used but at boot? &lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="11916" LastEditDate="2021-05-20T00:15:45.623" LastActivityDate="2021-05-20T00:15:45.623" Title="Why do PCs boot in 720x400 resolution?" Tags="&lt;ibm-pc&gt;&lt;video&gt;&lt;display&gt;&lt;boot&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14807" PostTypeId="2" ParentId="13897" CreationDate="2020-05-17T09:18:55.540" Score="5" Body="&lt;p&gt;Thanks for the info in this thread.&#xA;I've wrote a program to draw it on an Amiga in AMOS.  Here is a video of it being drawn slowly:&#xA;&lt;a href=&quot;https://youtu.be/gXhxE4j6dm0&quot; rel=&quot;noreferrer&quot;&gt;Amiga Kickstart Hand&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18150" LastActivityDate="2020-05-17T09:18:55.540" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14808" PostTypeId="2" ParentId="14806" CreationDate="2020-05-17T09:23:57.687" Score="94" Body="&lt;p&gt;This is historically not uncommon at all. Before starting an Operating System and initializing a graphics mode, your PC operates in the simplest display mode available, 80×25 &lt;a href=&quot;https://en.wikipedia.org/wiki/Text_mode&quot; rel=&quot;noreferrer&quot;&gt;text mode&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The original VGA 80 × 25 text mode (that is still supported by most modern graphics cards) has characters with a resolution of 9×16 pixels per character.&lt;/p&gt;&#xA;&lt;p&gt;This adds up to 80×9 = 720 horizontal pixels and 25 × 16 = 400 vertical pixels.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: The character set commonly uses only 8×16 pixels per character. The 9th pixel column is a repeated 8th pixel column. This separates most characters for a nicer visual impression.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="15545" LastEditorUserId="15334" LastEditDate="2021-05-19T07:05:19.540" LastActivityDate="2021-05-19T07:05:19.540" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14809" PostTypeId="2" ParentId="14806" CreationDate="2020-05-17T10:02:37.283" Score="12" Body="&lt;p&gt;The PC boots in text mode, and on a VGA card the text mode indeed has a resolution of 720x400. As the text mode  was the most used standard mode before GUI programs and operating systems were loaded, so it made sense to name the mode as 720x400.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the monitor actually cannot know what the exact resolution is, because for example 320x200 graphics mode has virtually identical sync polarity and timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the monitor has to guess what it shows given the sync signal rates and sync signal polarity. Most likely it will show 720x400 with any 70Hz 400-line mode, such as 320x200 mode as well.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2020-05-17T21:04:04.027" LastActivityDate="2020-05-17T21:04:04.027" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14810" PostTypeId="2" ParentId="14796" CreationDate="2020-05-17T12:39:18.757" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;and less susceptible to damage from dust and vibrations because of the absence of microscopically closely placed read-write heads&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That, exactly that (in reverse) made magnetic storage to integrate the media with the r/w heads and later their controller, enclose them in a dust-proof box and call the whole thing &quot;hard disk&quot;. Optical media, being read and written from a distance was OK rotating up to &quot;52x&quot; speed in whatever device you insert it. When it got scratched, it wasn't in the RW device and wasn't that bad in the first place (the scratches are way out of focus).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, about the &quot;secondary storage&quot; (in your meaning).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the begining, there was a music CD. All the data written in a single spiral-shaped track (just like the vinyl disc it was meant and later succeeded to replace). It was created at once from start to finish and then photocopied (almost like the vinyl).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, they glued a filesystem over the track. It was pretty much adapted to the single-create-and-then-photocopy process. Read-only at the design level. Seeking was rather slow, 1/2 second seek was normal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, the CD-R appeared. It had to be compatible with the CD. Writting a CD-R is a royal hassle - prepare a single file with the very read-only filesystem inside, then write it at once to the CD-R (and welcome to the buffer underrun hell). The device needed few tens of seconds just to start writting and the main reasons were the spiral and the unknown optical media response that was calibrated (using part of the media itself) at each write. Later developments improved the experience, but not the method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CD-RW didn't change anything except the possibility to erase the media (at once!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DVD-R, RW, RAM, whatever, blue discs added data density and speed, but the spiral structure and the unknown media properties were still the main features. Seeking is still slow, writing is still a project and not a task. Way better than a tape, but still bad as a random-access media.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And in the meantime, HDD technology outpaced the optical media in regard to storage space, reliability and price. (The networks also improved and it became easier to send a dvd worth of data instead of writing a dvd and sending it to someone.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Magneto-optical_drive&quot; rel=&quot;nofollow noreferrer&quot;&gt;Magneto-optical&lt;/a&gt; things never gained traction. They were more &quot;magneto&quot; than &quot;optical&quot; in regard to the read/write process in close proximity and contact between the media and RW head. The few competing &quot;standards&quot; and rather low reliability didn't helped either.&lt;/p&gt;&#xA;" OwnerUserId="15647" LastEditorUserId="851" LastEditDate="2020-05-18T22:21:51.863" LastActivityDate="2020-05-18T22:21:51.863" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14811" PostTypeId="1" CreationDate="2020-05-17T17:25:31.643" Score="1" ViewCount="384" Body="&lt;p&gt;A friend is trying find the original brand and model of this old 1990’s generic case.   An ad from computershopper would help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MBczn.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MBczn.jpg&quot; alt=&quot;1990’s AT Computer Case&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4337" LastEditorUserId="3290" LastEditDate="2020-05-17T21:59:49.643" LastActivityDate="2021-03-29T17:52:15.123" Title="What is the brand and model of this AT chassis case from the early 90s?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;identify-this-computer&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14813" PostTypeId="2" ParentId="14811" CreationDate="2020-05-17T19:03:27.927" Score="7" Body="&lt;p&gt;I doubt there is any brand or model to be found, as this is a middle of the road no name case, produced by some Asian, most likely Taiwanese, company, sold in bulk as commodity. These companies did never intend to build a brand at all as this would have worked against their sales.&lt;/p&gt;&#xA;&lt;p&gt;Even more so, these case manufacturers were often themselves relying on random suppliers, so the look was defined by what front plates they could buy from a front plate manufacturer. Various manufacturers were supplied by the same front plate company. It was a pure capitalist world of copying. And competition meant as well that front plate companies copied moulds from each other.&lt;/p&gt;&#xA;&lt;p&gt;If it's about finding the 'right' sticker that was on there, it's even more random. It could have been from the box manufacturer (unlikely, the shop configuring the PC (larger ones did do their own), the mainboard manufacturer - during the 90s and early noughties mainboard manufacturers delivered stickers with their products - or CPU manufacturers who did alike. Many ways one could show off.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;Without having any explicit trace, it's impossible to give a hint for either - even finding similar cases won't do it.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7843" LastEditDate="2021-03-29T17:52:15.123" LastActivityDate="2021-03-29T17:52:15.123" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14814" PostTypeId="1" AcceptedAnswerId="14823" CreationDate="2020-05-18T01:34:17.077" Score="5" ViewCount="619" Body="&lt;p&gt;I was just writing some junk Speccy Basic programs, more to see how they take up space on the +3's disk layout than to do any actual programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I noticed that after editing a program line to make a very long &lt;code&gt;REM&lt;/code&gt; statement, that most of what I added disappeared after I hit enter and in the listing instead of what I was typing I see some corrupted text instead &lt;code&gt;REM QTQ NEXT PRINT&lt;/code&gt; at the end. Most of the program is &lt;code&gt;REM&lt;/code&gt; statements so that one could be from memory stomping with part of the next line. Or not, since the rest is garbage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nRDjc.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nRDjc.png&quot; alt=&quot;REMQTQ&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I know that in the binary format of Spectrum BASIC there is a two byte field to hold the length in bytes for each line after tokenization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But maybe some other part of the system has a much shorter limit, or maybe it's just a bug?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a known limit, either by design or by accident?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-18T02:02:38.680" LastActivityDate="2020-05-18T12:18:56.407" Title="Does Sinclair Spectrum BASIC have a maximum length for one line?" Tags="&lt;zx-spectrum&gt;&lt;basic&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14815" PostTypeId="2" ParentId="11286" CreationDate="2020-05-18T01:59:45.803" Score="1" Body="&lt;p&gt;On the Sinclair ZX Spectrum, if you know where the BASIC program resides in memory, and you know the format of the tokenized program, you can modify the code by &lt;code&gt;POKE&lt;/code&gt;ing into this memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you can always find the location of the program by looking at the system variable called &lt;code&gt;PROG&lt;/code&gt; at address &lt;code&gt;5C53h&lt;/code&gt; with the command &lt;code&gt;PRINT PEEK 23635&lt;/code&gt;. This address was typically &lt;code&gt;5CCBh&lt;/code&gt; on original 48K speccies but could and did move around depending on what peripherals were attached.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more common use of this technique that I wouldn't consider true self-modification, is to have a very small Program, typically one line with a &lt;code&gt;RANDOMIZE USR &amp;lt;nnnn&amp;gt;&lt;/code&gt; statement followed after a colon by a &lt;code&gt;REM&lt;/code&gt; statement followed by a chunk of text. Then you &lt;code&gt;POKE&lt;/code&gt; some machine code bytes over the exact place where the chunk of text after the &lt;code&gt;REM&lt;/code&gt; is and use that address where I put the  placeholder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing you can do in Speccy Basic is hide the true value of numeric literals. In the tokenized version of Basic each integer literal is stored twice, first as an ASCII string of digits, then as a six-byte field, where two bytes hold the number as a 16-bit integer. You can use &lt;code&gt;POKE&lt;/code&gt; to change that 16-bit field to the value you really want where naive users trying to &lt;code&gt;LIST&lt;/code&gt; your program will still see the ASCII red-herring values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first is more of a memory saving hack and the second is more of a naive software protection method, than actual self-modifying code. But using the exact same technicque you could have a program that &lt;code&gt;POKE&lt;/code&gt;d arbitrary new code right over existing code, and the interpreter will just interpret the new token stream when it gets to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure if anyone actually did this. When you got to this level in Speccy Basic you were probably moving on to program in machine code anyway. But I remember discovering it as a kid in the early '80s so I'm sure people found ways to abuse it.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-05-18T01:59:45.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14816" PostTypeId="2" ParentId="14806" CreationDate="2020-05-18T02:45:51.560" Score="8" Body="&lt;p&gt;Most of the typical &lt;strong&gt;full color&lt;/strong&gt; resolutions were based on 4:3 ratio - e.g., 640x480, 800x600, etc. - which matched the aspect ratio of broadcast television at the time. Using a 4:3 pixel ratio on a 4:3 display screen meant you had have nominally square pixels. Graphics routines, especially with limited RAM &amp;amp; CPU cycles, are a whole lot easier with square pixels than non-square pixels. Those color graphics cards were typically memory limited in the old days. Memory was expensive, extra memory &lt;em&gt;just for graphics&lt;/em&gt; on a card was even more of an extra expense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the original IBM PC had a beautiful 720x350 monochrome 80x25 &lt;strong&gt;text mode&lt;/strong&gt; using a 9x14 font. So it didn't need much memory and it pushed the limits of &quot;ordinary&quot; monitors, but on a real IBM monochrome monitor (or equivalent) it was fantastic. The pixels weren't square, but that really doesn't matter for a text-only display. (OK, the Hercules cards provided full bit-mapped graphics, but that was &quot;business graphics&quot;, not playing games (mostly). When color graphics made its way from CGA to EGA to VGA, the 9x14 got bumped up to 9x16 and the total text mode resolution (for 80 cols x 25 rows) went to 720x400. This resolution fully utilized the capabilities of the VGA monitor at 70Hz, and finally brought the horizontal resolution of MDA text to color monitors, for the best of both worlds.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2020-05-18T23:20:22.440" LastActivityDate="2020-05-18T23:20:22.440" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14817" PostTypeId="2" ParentId="14796" CreationDate="2020-05-18T05:05:47.430" Score="-1" Body="&lt;p&gt;I haven't had a HD head crash since 1995. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1998, a CD-ROM drive was $55. Two years prior it was still over $100, only coming down when manufacturers were &quot;forced to compete on price instead of performance&quot; where &quot;the advances have been virtually undetectable to consumers&quot;. – Cnet: &lt;a href=&quot;https://www.cnet.com/news/cd-rom-prices-plummeting/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CD-ROM prices plummeting&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1997 the &quot;Price per GB of Hard Drive Storage:&quot; was $100. – notebooks.com, &lt;a href=&quot;https://notebooks.com/2011/03/09/hard-drive-prices-over-time-price-per-gb-from-1981-to-2010/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hard Drive Prices Over Time: Price per GB from 1981 to 2010&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optical media has been obsolete since its inception, having no use beyond throwaway pieces of plastic on which you may purchase The White Album again, to be inserted into devices which made easy the digital rights management of the content at a regional level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides all the other reasons optical media sucks, no one who grew up with a computer in the 80s and thrived on bootleg VHS tapes wants &lt;em&gt;that&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4220" LastActivityDate="2020-05-18T05:05:47.430" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14818" PostTypeId="2" ParentId="14814" CreationDate="2020-05-18T05:50:08.417" Score="6" Body="&lt;p&gt;ZX Basic stores the length of each line as two-byte quantity, so the length of any line is limited only by the amount of available RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, it is a common thing to put binary executable code inside REM statement, where the whole basic looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10 RANDOMIZE USR addr:REM &amp;lt;binary code follows&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;with &lt;code&gt;addr&lt;/code&gt; pointing to the byte after &lt;code&gt;REM&lt;/code&gt; token.&#xA;Such trick allows one, for example, to put there a packed(!) title screen for a long-loading game, without ugly and lengthier process of loading unpacked data directly into the screen memory. Another option is to have there a custom loader.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my practice, basic lines up to many tens of kilobytes are perfectly possible (but my experience is only with the binary code in &lt;code&gt;REM&lt;/code&gt;s).&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="11446" LastEditDate="2020-05-18T08:56:08.027" LastActivityDate="2020-05-18T08:56:08.027" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14819" PostTypeId="1" AcceptedAnswerId="14820" CreationDate="2020-05-18T08:50:32.533" Score="13" ViewCount="2545" Body="&lt;p&gt;If you've used legacy Windows, you probably know about program information files aka PIF files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At some point, when Internet usage became widespread, these files became a vector of infection for computers and some of you probably remember mail spam with PIF file attachments. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How exactly could a PIF file act maliciously as it's solely a configuration file? &lt;/p&gt;&#xA;" OwnerUserId="3282" LastActivityDate="2020-05-18T18:11:15.803" Title="How did malware spreading through PIF files work?" Tags="&lt;windows&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14820" PostTypeId="2" ParentId="14819" CreationDate="2020-05-18T09:34:18.720" Score="24" Body="&lt;p&gt;Real PIFs are indeed “only” configuration files, but they are executable: running a PIF will run the corresponding program, with the configuration specified by the PIF. This can be used as-is: a “real” PIF can be sent to a user, and if that user runs it, the commands specified in the PIF will be run; starting with VMM 4.0 (Windows 95), PIFs can even include &lt;code&gt;CONFIG.SYS&lt;/code&gt; and &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; instructions, so multiple commands can be chained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However malware disseminated using PIFs generally relies on the fact that DOS and Windows don’t use an executable file’s extension to determine &lt;em&gt;how&lt;/em&gt; it is run, only to determine that it is an executable. &lt;code&gt;COM&lt;/code&gt;, &lt;code&gt;EXE&lt;/code&gt;, and &lt;code&gt;PIF&lt;/code&gt; mark files as executable, equally. So you can take a regular Windows &lt;code&gt;EXE&lt;/code&gt; file (with nefarious content, in this scenario), rename it with a &lt;code&gt;PIF&lt;/code&gt; extension (thus evading naïvely-configured mail filters, and seeming less dangerous to users unlikely to be aware of this file extension), and Windows will execute it — its &lt;code&gt;PIF&lt;/code&gt; extension marks it as executable content, and when Windows is asked to execute it, it won’t complain that it doesn’t contain a PIF database, it will see that it’s a program and run it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Executable &lt;em&gt;content&lt;/em&gt; is identified by its MZ and PE signatures.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-18T11:27:20.477" LastActivityDate="2020-05-18T11:27:20.477" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14821" PostTypeId="2" ParentId="14796" CreationDate="2020-05-18T11:10:58.620" Score="2" Body="&lt;p&gt;They were, at one time. Admittedly, optical &lt;em&gt;tape&lt;/em&gt; drives rather than disc, which had several advantages : removable media for one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's one : &lt;a href=&quot;https://www.codesandciphers.org.uk/lorenz/rebuild.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;part of Colossus&lt;/a&gt; but I have used them in the 1970s and early 1980s where they were sometimes used to interchange data between computers and EPROM programmers.&lt;/p&gt;&#xA;" OwnerUserId="6700" LastActivityDate="2020-05-18T11:10:58.620" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14822" PostTypeId="2" ParentId="14796" CreationDate="2020-05-18T11:18:18.720" Score="3" Body="&lt;p&gt;Light isn't small enough. Let's compare a couple of numbers for the present day:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Hard_disk_drive_platter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The magnetic surface of each platter is divided into small sub-micrometer-sized magnetic regions, each of which is used to represent a single binary unit of information. A typical magnetic region on a hard-disk platter (as of 2006) is about 200–250 nanometers wide (in the radial direction of the platter) and extends about 25–30 nanometers in the down-track direction (the circumferential direction on the platter)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Blu-ray&quot; rel=&quot;nofollow noreferrer&quot;&gt;Blu-Ray&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For a Blu-ray Disc, the spot size is 580 nm. ...  The lasers are GaN (gallium nitride) laser diodes that produce 405 nm light directly. CDs use 780 nm near-infrared lasers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The size of a &quot;bit&quot; on a hard disk is much smaller than the size of a bit on a blu-ray disc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is extremely difficult to make an illuminated spot that is smaller than the wavelength of the light used to illuminate it, or to focus on it when you have illuminated it. This is the &quot;diffraction limit&quot;. Additionally, as your spots get smaller and move faster, in order to see them properly you need to provide more illumination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is why optical drives haven't kept up with the capacities of magnetic drives. Blu-Ray in particular required the development of cheap blue laser diodes, just as blue LEDs were invented a long time after red LEDs.&lt;/p&gt;&#xA;" OwnerUserId="778" LastActivityDate="2020-05-18T11:18:18.720" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14823" PostTypeId="2" ParentId="14814" CreationDate="2020-05-18T12:18:56.407" Score="7" Body="&lt;p&gt;The correct answer to your question is YES, and NO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;YES, if you are editing a long line in the editor of 128K BASIC, you are limited to the size of line buffer, which can hold only 20 screen rows. You can confirm this by reading the ZX ROM Disassembly which can be found &lt;a href=&quot;http://www.fruitcake.plus.com/Sinclair/Spectrum128/ROMDisassembly/Spectrum128ROMDisassembly.htm&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; (note that you will need to be reading disassembly for ROM 0). Let me quote a comment from there, given under the heading &quot;128 BASIC Mode Limitations&quot;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There is a practical limitation on the size of lines that can be entered. It is limited to 20 indented rows, which is the size of the editing buffers. Typed lines greater than 20 rows get inserted into the BASIC program, but only the first 20 rows are shown on screen. Editing such a line causes it to be truncated to 20 rows. There is no warning when the 20 row limit is exceeded.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Just to illustrate this point, I quickly did the following steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I created a line that contains 21 rows:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/4nBLM.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4nBLM.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/wuAFU.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wuAFU.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;I tried to press the return key, to see what gets saved (and frankly it looks fine at this stage!):&#xA;&lt;a href=&quot;https://i.stack.imgur.com/qKmpW.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qKmpW.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;I tried to edit the line again, and then it becomes clear that things are not all rosy:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ay9f9.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ay9f9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;To make things properly interesting, I tried adding a space after the fullstop, just before the first word TEST at the end and pressed the return key to obtain&#xA;&lt;a href=&quot;https://i.stack.imgur.com/5IyZ0.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5IyZ0.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, 128K BASIC editor is basically inadequate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NO is also a correct answer, because the actual storage format of ZX BASIC allows lines with lengths up to almost 64K, which in any case cannot be inputted directly from BASIC. I believe that 48K BASIC is free from the described limitation and the line editor of 48K BASIC can only run into trouble saving your line if you run out of available RAM, which in 48K configuration can happen as your line length exceeds something like 20K of characters.&lt;/p&gt;&#xA;" OwnerUserId="5039" LastActivityDate="2020-05-18T12:18:56.407" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14824" PostTypeId="1" AcceptedAnswerId="14825" CreationDate="2020-05-18T14:46:19.937" Score="3" ViewCount="120" Body="&lt;p&gt;I'm trying to add a compact #define macro in a cc65 program for performing various low-level tasks efficiently. For some of the macros, I need to pass a non-constant value to the assembler part. I studied the &lt;a href=&quot;https://www.cc65.org/doc/cc65-9.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;cc65 guide about inline assembler&lt;/a&gt; but could not get it to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a minimal example&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &amp;lt;stdlib.h&amp;gt;&#xA;&#xA;#define set_bgcolor(C) (asm(&quot;lda #%b&quot;,C),asm(&quot;sta $D021&quot;))&#xA;&#xA;int main (void)&#xA;{&#xA;  int x=3;&#xA;  set_bgcolor(1);   //this works&#xA;  set_bgcolor(1+1); //this works as well&#xA;  set_bgcolor(x);   //this fails to compile &quot;Error: Constant integer expression expected&quot;&#xA;  return EXIT_SUCCESS;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What is the proper definition of the macro in line 4 to make this work?&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-05-18T15:19:19.580" Title="How to pass a value to an inline assembler script in a #define macro in cc65" Tags="&lt;commodore-64&gt;&lt;cc65&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14825" PostTypeId="2" ParentId="14824" CreationDate="2020-05-18T15:02:37.047" Score="5" Body="&lt;p&gt;There is a pseudo variable &lt;code&gt;__AX__&lt;/code&gt; of type &lt;code&gt;unsigned int&lt;/code&gt; that can be assigned a value that then ends up in register A (lo byte) and X (hi byte). So, the following macro definition works as intended:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define set_bgcolor(C) (__AX__ = (C),asm(&quot;sta $D021&quot;))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I found this under &lt;a href=&quot;https://www.cc65.org/doc/cc65-5.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Extensions&quot; in the cc65 user guide&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="793" LastEditDate="2020-05-18T15:19:19.580" LastActivityDate="2020-05-18T15:19:19.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14826" PostTypeId="2" ParentId="14811" CreationDate="2020-05-18T16:49:09.283" Score="7" Body="&lt;p&gt;Here's a discussion on &lt;a href=&quot;https://www.vogons.org/viewtopic.php?f=25&amp;amp;t=72556&quot; rel=&quot;noreferrer&quot;&gt;Vogons&lt;/a&gt; from a person called Firage with the same case. You might be able to get in touch with them via that site and ask.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Te3h9.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Te3h9.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2020-05-18T16:49:09.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14827" PostTypeId="2" ParentId="6768" CreationDate="2020-05-18T17:39:59.153" Score="1" Body="&lt;p&gt;Let's assume, for the sake of argument, that all timing issues are the same -- large (diameter) disks have the same latency and data transfer rate as small disks.  So why aren't larger disks used?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have two smaller disks, each with &lt;em&gt;half&lt;/em&gt; the capacity of one larger one, you can have &lt;em&gt;two&lt;/em&gt; I/O operations going on at the same time with the smaller disks, as long as the data being accessed is on different disks.  With one larger disk, the I/O operations have to queue up, one behind the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If two smaller disks cost the same as one larger one, the smaller disks will be faster for that reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plus all of the other reasons that have already been mentioned.&lt;/p&gt;&#xA;" OwnerUserId="11378" LastActivityDate="2020-05-18T17:39:59.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14828" PostTypeId="2" ParentId="14819" CreationDate="2020-05-18T18:11:15.803" Score="3" Body="&lt;p&gt;PIF files still used as a bodyless-malware. For example, in Windows 10x86, where you have a DOS VM, that help running a 16-bit code, executing pif file will run the DOS Virtual Machine, where the malware command of a pif-file can be executed in DOS regime. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, for example, for the *.lnk file the thing is to put a string of a malware script into a file properties, like Target: &quot;C:\Windows\System32\mshta.exe &quot;javascript...&quot;&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same goes for WMI and MSTASK files.&lt;/p&gt;&#xA;" OwnerUserId="18168" LastActivityDate="2020-05-18T18:11:15.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14829" PostTypeId="1" AcceptedAnswerId="14830" CreationDate="2020-05-18T19:25:23.333" Score="18" ViewCount="1406" Body="&lt;p&gt;The Z80 is &quot;binary compatible&quot; with the 8080. It adds a bunch of new instructions, but places them all in unused (well, undocumented) opcodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this mean that if I disassemble an 8080 program (which doesn't use any undocumented opcodes, naturally) using a Z80 disassembler, will the result be correct 8080 assembly code? Or are there any hidden gotchas?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I'm asking is because Supersoft Associates' CPU Diagnostics II program from 1981 contains both 8080 and Z80 code; it checks which CPU it's running on in the beginning, jumping to CPU-specific testing code. Therefore I obviously need to disassemble it using a Z80 disassembler. Will the 8080 tests be valid 8080 assembly code?&lt;/p&gt;&#xA;" OwnerUserId="15661" LastActivityDate="2020-05-18T22:59:33.847" Title="Will disassembling an 8080 program as Z80 code work?" Tags="&lt;z80&gt;&lt;8080&gt;&lt;disassembly&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14830" PostTypeId="2" ParentId="14829" CreationDate="2020-05-18T19:30:32.583" Score="18" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The Z80 is &quot;binary compatible&quot; with the 8080. It adds a bunch of new instructions, but places them all in unused (well, undocumented) opcodes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;yes .. err, no, they placed them on redundant opcodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example the whole 00-xxx-000 group were &lt;code&gt;NOP&lt;/code&gt; instructions for the 8080, while Zilog only left &lt;code&gt;00h&lt;/code&gt; as &lt;code&gt;NOP&lt;/code&gt;, while the others became jumps (and &lt;code&gt;EX&lt;/code&gt;). Likewise the 'alternate' opcodes &lt;code&gt;CBh&lt;/code&gt;/&lt;code&gt;DDh&lt;/code&gt;/&lt;code&gt;EDh&lt;/code&gt;/&lt;code&gt;FDh&lt;/code&gt; that all produced &lt;code&gt;JMP&lt;/code&gt; and &lt;code&gt;CALL&lt;/code&gt; on the 8080 became prefix bytes (*1).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does this mean that if I disassemble an 8080 program (which doesn't use any undocumented opcodes, naturally) using a Z80 disassembler, will the result be correct 8080 assembly code? Or are there any hidden gotchas?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No hidden gotchas, but then again, it will come out as Z80 assembly, not 8080, as the Zilog changed the words of the assembly language. For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Opcodes      8080        Z80            (8008       )&#xA;79           MOV  A,C    LD A,C         (C2 LAC     )&#xA;02           STAX B      LD (BC),A      (--         )&#xA;16           MVI  D,12h  LD D,12h       (1E LDI  12h)&#xA;3A 34 12     LDA  1234h  LD A,(1234h)   (--         ) &#xA;ED 4B 34 12  --          LD BC,(1234h)  (--         )  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So essentially it will produce an all Z80 Assembly source code (Z80 column), but certain operations are not used in 8080 sections.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The reason I'm asking is because Supersoft Associates' CPU Diagnostics II program from 1981 contains both 8080 and Z80 code; it checks which CPU it's running on in the beginning, jumping to CPU-specific testing code. Therefore I obviously need to disassemble it using a Z80 disassembler. Will the 8080 tests be valid 8080 assembly code?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It must. After all, on binary level all 8080 is as well valid Z80. Only on Assembler the above mentioned different 'spelling' is visible - think of it like Mancunian English vs. Texan English.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - I understand that the A zeroing opcodes (&lt;code&gt;SUB A&lt;/code&gt;/&lt;code&gt;XRA A&lt;/code&gt;) haven't been touched, because some used them. Likewise, to a lesser extend, the 'flaging' NOPs &lt;code&gt;ANA A&lt;/code&gt;, &lt;code&gt;ORA A&lt;/code&gt; and &lt;code&gt;CMP A&lt;/code&gt; (*2). But I always found it strange why they didn't touch the MOV-NOPs (*2) which would have brought 7 additional opcodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They would relief plenty room from the 8080 code set. Especially since the prefixes take away much of the advantage of many of the 16 bit opcodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only reason I can think of is that Mr.Faggin somehow knew (*4) that the 8085 would as well not touch any of these opcodes, so the level of incompatibility between Z80 and 8080 would be about the same as Intel introduced with the 8085&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - All of them do trigger flags, so while the result is forseable, it may be used on purpose to prepare some flag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - 49h/49h/52h/etc. are &lt;code&gt;MOV A,B&lt;/code&gt;, &lt;code&gt;MOV B,B&lt;/code&gt;, &lt;code&gt;MOV C,C&lt;/code&gt; ...  they move data between the same register, thus making it effectively as well NOPs since MOVs don't trigger any flags.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Since both (Z80, 8085) were launched in March 1976, it's not very likely that this was without early knowledge of the changes Intel did.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-18T22:59:33.847" LastActivityDate="2020-05-18T22:59:33.847" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14831" PostTypeId="1" AcceptedAnswerId="14833" CreationDate="2020-05-19T01:06:59.440" Score="7" ViewCount="364" Body="&lt;p&gt;I was watching a &lt;a href=&quot;https://youtu.be/9LiZGdXBw3I?t=156&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; on a Soviet submarine armed with the P6 cruise missile:    The video mentions &amp;quot;It could  use the lead missile in the group to find targets and share targeting data&amp;quot; and that the Tu95 Bomber could send target data to the submarine that was launching the missile.&lt;/p&gt;&#xA;&lt;p&gt;In general, Soviet electronics and computer technology were not ahead of the west, so that seems like an interesting capability for development work in the late 50's and early 60's.  So, what data link protocol was used between the bomber, the submarine, and the missiles?  Were they all using the same data format?  OR was there one technology for communicating from the bomber and some steps to convert the data for the missile?  Is &amp;quot;data&amp;quot; too  abstract a word for the electronics in a 1960's cruise missile and was it some sort of analog signal that couldn't transfer arbitrary data?&lt;/p&gt;&#xA;" OwnerUserId="5309" LastEditorUserId="6659" LastEditDate="2020-11-29T21:56:08.913" LastActivityDate="2020-11-29T21:56:08.913" Title="What sort of protocol did Soviet P6 cruise missile data links use?" Tags="&lt;military-software&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14832" PostTypeId="1" CreationDate="2020-05-19T01:56:41.643" Score="0" ViewCount="177" Body="&lt;p&gt;How picky are CRTs about the 'cleanliness' of the mains power? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cleanliness referring to electrical noise from thing like ac motors in fridges, powerline ethernet, etc. Cleanliness is also referring to the squareness or 'sine-ess' of the ac waveform, when powering from UPSs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pickiness refers to the CRT (my case being a 1985 JVC TV set) acting abnormally in anyway, from minor picture/sound distortions to hardware damage (lowered power efficiency by itself isn't abnormal behavior for the purpose of this question), as a result of say, a square mains wave (from a UPS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So are CRTs fine with the dirty power most  home UPSs provide?&lt;/p&gt;&#xA;" OwnerUserId="17752" LastEditorUserId="17752" LastEditDate="2020-05-19T02:18:11.970" LastActivityDate="2020-05-19T02:18:11.970" Title="How picky are CRTs about power cleanliness?" Tags="&lt;crt-monitor&gt;&lt;power&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14833" PostTypeId="2" ParentId="14831" CreationDate="2020-05-19T01:57:14.697" Score="10" Body="&lt;p&gt;Not much of an answer, only what I know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That missile was fitted with various means of control and guidance over its long use (&gt;40y) - in fact, as it's still in use today by some navies as P-35.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before going into details it's important to understand that it was designed to attack a carrier group and here if possible the carrier itself. So a fairly large target with a massive radar signature in an almost 'flat' surrounding with nothing but the target (group).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The very first (early 1960s) version didn't have any real kind of 'data' link, at least not in a sense like we would call it today. It's main control was an inertia system. The guidance system was feed a vector and a distance. This was done locally from SIGINT data received from a TU-16 or TU95. The starting sub was roughly pointed in that direction as well. The missile was started and climbed to high altitude, heading toward the target. After droping the start rockets and reaching cruise speed an analog TV link was established with the sub. The transmitted radar information was used to guide and at some point lock the final target and let go. Now the cruise missile dropped to low altitude and followed the locked direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In later versions this TV link could be hand over between the submarine and a TU-95 long range targeter. The TU-96 was a special version equipped with a long range target radar. The advantage of using that TU-95 was it's higher energy and ranging. When feed from the airplane, the analogue radar data was send toward the cruise missile and insed as input much if it was taken from the onboard radar. This allowed to drop to low (safe) altitude quite early - if necessary. At some point again (or whenever jammed) it reverted to on board radar for the final aproach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next to all of this was done analogue. So 'data' has to be understood in a broader sense than we would today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the P6 and it's offsprings has had many updates in electronics in more than 40 years of service, so today's versions can be assumed as fully digital.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-19T18:49:43.980" LastActivityDate="2020-05-19T18:49:43.980" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14834" PostTypeId="2" ParentId="14832" CreationDate="2020-05-19T02:07:38.067" Score="1" Body="&lt;p&gt;That question is a bit broad. what parts of 'pickyness' are meant?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One needs to distinguish between the CRT as main powered device and the signal path. Also, if CRT sould refer to 'just' CRT or TV sets. Also, it depends quite alot on the technology used, as CRTs came in countless technological variations. From 12V DC feed all the way to 400 Hz AC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a device powert by mains voltage and frequency, they are rather robust. Well, or as robust as their power supply is. With old, transformer and rectifier based devices efficiency depends quite on a good sine, but they can as well cope with many distortions - back in the days, power was often only sine by name :)) On the other hand, more modern CRT with switching PS don't care much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the signal path is a different part, as it's here mainly about shielding and crosstalk. So again quite installation and model defined. Any signal powerful enough - and vacuumer motors can be quite strong sources - will interfere with the signal displayed. More so when using a TV and a modulated transmission.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whatever the reason for your question is, a better answer will need more detailed information about device and setting.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-05-19T02:07:38.067" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14835" PostTypeId="1" AcceptedAnswerId="14837" CreationDate="2020-05-19T05:24:46.983" Score="3" ViewCount="162" Body="&lt;p&gt;Does anybody know the meaning of this message from the Apple IIe diagnostic? &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IOU FLAG E5: 1 2 3 4 8&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What are addressing the 1 2 3 4 8?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I’m pretty sure that IOU is the I/O chip, E5 is the location on the board.&lt;/p&gt;&#xA;" OwnerUserId="12258" LastEditorUserId="6659" LastEditDate="2020-05-19T18:48:14.003" LastActivityDate="2020-05-19T18:48:14.003" Title="Please Identify this Apple II Diagnostic Message: &quot;IOU FLAG E5: 1 2 3 4 8&quot;" Tags="&lt;apple-ii&gt;&lt;diagnostics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14836" PostTypeId="2" ParentId="14124" CreationDate="2020-05-19T05:55:09.577" Score="3" Body="&lt;p&gt;I actually wrote a program a while back to image a hard drive in DOS and send the result over serial. However, It uses &quot;new&quot; extended BIOS methods based on LBA adresses rather than traditional C/H/S sectors, so I doubt it will work with an MFM-era machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/trevorg16/serial-hd-img&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/trevorg16/serial-hd-img&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data is sent using run length encoding on 0s to speed up the process a bit, so you need to run the received data through the &lt;code&gt;expand.c&lt;/code&gt; program.&lt;/p&gt;&#xA;" OwnerUserId="18176" LastActivityDate="2020-05-19T05:55:09.577" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14837" PostTypeId="2" ParentId="14835" CreationDate="2020-05-19T05:57:43.993" Score="6" Body="&lt;p&gt;From the Apple Technical Information Library at &lt;a href=&quot;https://mirrors.apple2.org.za/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://mirrors.apple2.org.za/&lt;/a&gt;: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; IOU  FLAG E5:0  The 80VID switch didn't initialize&#xA;                 properly during reset.&#xA;              1  The ALTCHAR switch didn't initialize&#xA;                 properly during reset.&#xA;              2  The TEXT switch didn't initialize&#xA;                 properly during reset.&#xA;              3  The PAGE2 switch didn't initialize&#xA;                 properly during reset.&#xA;              4  The MIXMODE switch didn't initialize&#xA;                 properly during reset.&#xA;              5  The HIRES switch didn't initialize&#xA;                 properly during reset.&#xA;              6  The 80VID switch won't change.&#xA;              7  The ALTCHAR switch won't change.&#xA;              8  The TEXT switch won't change.&#xA;              9  The PAGE2 switch won't change.&#xA;              A  The MIXMODE switch won't change.&#xA;              B  The HIRES switch won't change.&#xA;&#xA; If you receive an IOU FLAG E5 error, suspect the IOU at location E5.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Companies/Apple/Documentation/Apple%20Technical%20Information%20Library/a2til139.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Companies/Apple/Documentation/Apple%20Technical%20Information%20Library/a2til139.txt&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-05-19T07:06:20.557" LastActivityDate="2020-05-19T07:06:20.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14838" PostTypeId="2" ParentId="9569" CreationDate="2020-05-19T06:37:46.040" Score="5" Body="&lt;p&gt;Since the question specifically references Commodore 8-bit drives, I thought I'd add a few details here. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PET/CBM series dual drives used both configurations internally: While the 5.25&quot; drives (like the 4040 in the question) were stacked horizontally&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Gfi2g.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gfi2g.png&quot; alt=&quot;CBM 4040 / Source: https://de.wikipedia.org/wiki/Commodore_4040&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the 8280 stacked two 8&quot; drives vertically: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/b3xfr.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/b3xfr.gif&quot; alt=&quot;CBM 8280 / Source: http://www.6502.org/users/andre/petindex/drives/gallery/8280.gif&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These units were, in turn, designed to be stacked vertically (and built like tanks to they could withstand each others weight): &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xXIE3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xXIE3.png&quot; alt=&quot;Stack of CBM drives / Source: https://de.wikipedia.org/wiki/CBM-Diskettenlaufwerke&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;only&lt;/em&gt; Commodore 8bit drives &lt;em&gt;not&lt;/em&gt; designed to be stacked vertically were those in the 1541-style case (1540, 1541, 1551, 1570, SFD 1001). Here, Commodore put a transformer + linear regulator power supply (heavy, hot) into a comparatively small and not very sturdy case (see &lt;a href=&quot;https://www.bayerischer-stenografenverband.de/fotos/2017_BM_Computermuseum.jpg&quot; rel=&quot;noreferrer&quot;&gt;https://www.bayerischer-stenografenverband.de/fotos/2017_BM_Computermuseum.jpg&lt;/a&gt; for a side-by-side). Heat was a problem even without stacking (see e.g. &lt;a href=&quot;http://cbmmuseum.kuto.de/floppy_vc1540.html&quot; rel=&quot;noreferrer&quot;&gt;http://cbmmuseum.kuto.de/floppy_vc1540.html&lt;/a&gt;). So the slight slant in the case top was probably intentional to discourage stacking. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Commodore solved the heat issue first in the 1571 (switch mode power supply), then in the 1541-II and the 1581 (external power supply). All those again have flat tops and are designed to be stacked. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This picture shows the slant of the 1541 (bottom) and the stackability of the others (1571, 1541-II, 1581, from bottom to top) quite nicely: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VvdCE.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VvdCE.jpg&quot; alt=&quot;1581, 1541-II, 1571, 1541 / Source: https://www.retro-programming.de/retro-welt-2/hardware/meine-altertumlichen-geratschaften/c64/laufwerke/&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-05-19T06:48:01.193" LastActivityDate="2020-05-19T06:48:01.193" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14839" PostTypeId="1" AcceptedAnswerId="14841" CreationDate="2020-05-19T08:38:58.400" Score="13" ViewCount="3120" Body="&lt;p&gt;A real-time text editor is a program which facilitates editing text.  In the process, the text is displayed on a screen, and the displayed text is updated after each key press.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A commonly cited example is the addition of &quot;^R mode&quot; to TECO which was done circa 1972.  Previous to this, TECO would only update the displayed text when the user typed Altmode (ESC) to execute entered commands.&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2020-06-05T02:30:34.837" Title="Which are the earliest real-time text editors?" Tags="&lt;history&gt;&lt;text&gt;&lt;editor&gt;" AnswerCount="4" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14840" PostTypeId="2" ParentId="14670" CreationDate="2020-05-19T09:32:07.863" Score="3" Body="&lt;p&gt;To contradict the premise of your question, it was is not always necessary to use the registry in order to use COM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In-process COM objects are created by loading the DLL which implements them, calling &lt;code&gt;DllGetClassObject&lt;/code&gt; (passing the GUID for the object) to obtain a factory object, and calling that factory object's &lt;code&gt;CreateInstance&lt;/code&gt; method. If you know the location of the DLL, you can do this yourself &lt;em&gt;without&lt;/em&gt; involving the COM registry. But it's easier with the registry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;COM consists of multiple parts:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An in-process ABI specified in MIDL (derived from DCE RPC). The first released use of this ABI was in the Exchange client, and pre-dated the COM registry services.&lt;/li&gt;&#xA;&lt;li&gt;A cross-thread and out-of-process object-oriented remote procedure call system (also derived from DCE RPC). This was first used only for cross-process communication on the same PC, even though MSRPC - based on DCE again - was and is used throughout Windows NT.&lt;/li&gt;&#xA;&lt;li&gt;A set of system services to make discovering and loading components easier to use. Some (but not all) of these services involve the registry.&lt;/li&gt;&#xA;&lt;li&gt;And of course OLE linking and embedding - this necessarily uses the registry, as it is necessarily to locate servers using symbolic names.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The additional services include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Functions for managing &quot;Automation&quot; (BASIC-compatible) types such as &lt;code&gt;BSTR&lt;/code&gt; for strings, &lt;code&gt;VARIANT&lt;/code&gt;, or &lt;code&gt;SAFEARRAY&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Convenience functions for instantiating objects without necessarily knowing where or how they are implemented. This uses the registry.&lt;/li&gt;&#xA;&lt;li&gt;Conveniences for implementing complex and difficult services for remoting such as proxies and stubs, and the &lt;code&gt;IMarshal&lt;/code&gt; interface. These can be hand rolled but more typically these days they are generated dynamically based on type libraries.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10823" LastEditorUserId="10823" LastEditDate="2020-05-19T10:31:51.707" LastActivityDate="2020-05-19T10:31:51.707" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14841" PostTypeId="2" ParentId="14839" CreationDate="2020-05-19T10:16:34.740" Score="17" Body="&lt;p&gt;I think the following early text editors meet your criteria:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Brian Tolliver’s TVEdit (Stanford, 1965), based on Doug Engelbart’s earlier word processor; see &lt;a href=&quot;https://dl.acm.org/doi/abs/10.1145/356589.356591&quot; rel=&quot;noreferrer&quot;&gt;On-line Text Editing: a Survey&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;TVEDIT is one of the earliest (1965) time-sharing, CRT-based text editors [12, 22]; it displays many lines of text at electronic speed. The user thus continually views the most recent version of his text and does not have to constantly refer to a mocked-up copy. Users ordinarily create and maintain text without any hard copy, not even an initial hand-written draft.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Because of careful user engineering, the simple TVEDIT command language is almost invisible to the experienced user. A control shift button alters the interpretation of alphanumeric keys to perform required functions. A request for these functions can be preceded by a number to repeat the command that number of times. Commands are executed as they are typed, so the user never has to press an execute command key and is seldom forced to wait for a system response.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Fred Wright’s &lt;a href=&quot;https://en.wikipedia.org/wiki/E_(1970s_text_editor)&quot; rel=&quot;noreferrer&quot;&gt;E&lt;/a&gt; (Stanford, 1970), which helped inspire EMACS;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;TECO’s &lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;R&lt;/kbd&gt; mode, implemented by Carl Mikkelsen and then re-implemented by Richard M. Stallman, &lt;a href=&quot;http://www.codeartnow.com/hacker-art-1/macsimizing-teco&quot; rel=&quot;noreferrer&quot;&gt;resulting in EMACS&lt;/a&gt; (1976);&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Larry Tesler’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Gypsy_%28software%29&quot; rel=&quot;noreferrer&quot;&gt;Gypsy&lt;/a&gt; (Xerox PARC, 1975), an early GUI-based, modeless editor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;https://dl.acm.org/doi/abs/10.1145/2212877.2212896&quot; rel=&quot;noreferrer&quot;&gt;A personal history of modeless text editing and cut/copy-paste&lt;/a&gt;, &lt;a href=&quot;https://dl.acm.org/doi/abs/10.1145/800049.801770&quot; rel=&quot;noreferrer&quot;&gt;Evaluation of text editors&lt;/a&gt;, and &lt;a href=&quot;https://dl.acm.org/doi/10.1145/2065327.2065342&quot; rel=&quot;noreferrer&quot;&gt;Design case study: the bravo text editor&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-19T12:08:36.757" LastActivityDate="2020-05-19T12:08:36.757" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14842" PostTypeId="2" ParentId="14839" CreationDate="2020-05-19T10:28:10.820" Score="5" Body="&lt;p&gt;You might be interested to read about the oNLine-System developed throughout the 1960s and demonstrated by Douglas Engelbart in The Mother Of All Demos (demonstrated Dec 1968), which I believe contains real-time text editing.&lt;/p&gt;&#xA;" OwnerUserId="18178" LastActivityDate="2020-05-19T10:28:10.820" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14844" PostTypeId="1" CreationDate="2020-05-19T12:47:55.240" Score="7" ViewCount="1539" Body="&lt;p&gt;While considering the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14772/odd-tokenizing-in-integer-basic&quot;&gt;recent question on Integer BASIC&lt;/a&gt;, a thought arises:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most systems using/supporting integer math used a 16-bit signed format. In the case of Integer BASIC, this leads to odd-looking code like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CALL -936&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to clear the screen, and:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Q = PEEK(-16336)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To click the speaker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming for the moment a system that has more than one number format, it seems a possible solution would be to use three formats rather than two: one for floating point, one for 16-bit signed integers, and another for positive integers. This would allow you to represent any value from -32768 to +32767 and another for 0 though 65535, or alternately, one for -65536 to -1 and another for 0 through +65535.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage to this is that you can use 16-bit addresses in their &quot;natural&quot; format, and you extend the possible range of values, although it would seem this has somewhat less value (as mostly these would be address/value-related items anyway). This, of course, assumes there's any value at all to negative 16-bit values, but we'll move that for now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming you don't dump the integers into the FP math pack (I'm looking at you MS) it would seem this would &lt;em&gt;slightly&lt;/em&gt; complicate the int-path code, but only at either end of the calculation chain - parsing the number and storing the result. You would need to examine the negative flag on loads and stores, but you do that anyway, and you have to store it separately during calculations, but you likely have a free byte for this in the math pack already if you handle 40-bit FP. It also appears using separate tokens in the source would save a bit of jiggery loading the values into the eval stack when you need to set the flag/bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a performance issue this raises that I'm not immediately seeing? Does anyone know of an 8-bit era system that did this?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="7607" LastEditDate="2020-05-20T14:14:18.300" LastActivityDate="2020-05-20T21:01:18.533" Title="Positive/negative 16-bit integer formats in 8-bit systems?" Tags="&lt;basic&gt;&lt;integer-basic&gt;" AnswerCount="5" CommentCount="16" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14845" PostTypeId="2" ParentId="14844" CreationDate="2020-05-19T14:01:29.187" Score="10" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;→ &lt;em&gt;Does anyone know of an 8-bit era system that did this?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Integer BASIC exists to be very small, just fast enough to develop games on, and out in time for the Apple launch. Syntax niceties would make it bigger, slower and late.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The negative integer input is a quirk of its smallness. On other 8-bit systems such as the Amstrad CPC you could do things like &lt;code&gt;CALL 48148&lt;/code&gt; (better known as &lt;strong&gt;&lt;a href=&quot;http://www.cantrell.org.uk/david/tech/cpc/cpc-firmware/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCR CLEAR&lt;/a&gt;&lt;/strong&gt; at &amp;amp;BC14) and the interpreter understood it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Clarification&lt;/strong&gt;: Locomotive BASIC stored 48148 as six bytes (&lt;code&gt;1F 00 00 14 3C 90&lt;/code&gt;; most likely FP), -17388 as four bytes (&lt;code&gt;F5 1A EC 43&lt;/code&gt;) and &amp;amp;BC14 as three bytes (&lt;code&gt;1C 14 BC&lt;/code&gt;). The only time a negative constant would give you a smaller program than hex would be if it fitted into 8 bits: -1 was stored as &lt;code&gt;F5 0F&lt;/code&gt;, but &amp;amp;FFFF saved as &lt;code&gt;1C FF FF&lt;/code&gt;. Since most (all?) of the Amstrad CPC's ROM routines were in upper memory and BASIC code lived above &amp;amp;100 &lt;em&gt;and&lt;/em&gt; we had the &lt;code&gt;&amp;amp;&lt;/code&gt; notation borrowed from BBC BASIC, it didn't really gain us much. Integer BASIC, though, had to fight for every byte.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2020-05-20T14:39:12.937" LastActivityDate="2020-05-20T14:39:12.937" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14846" PostTypeId="2" ParentId="14844" CreationDate="2020-05-19T14:35:15.547" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Does anyone know of an 8-bit era system that did this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, at least not the way the question proposes, which is essentially turning 16 bit values into 17 bit. Something no (BASIC) system supports. The only ones that come close are BASICs offering long integer or arbitrary size BCD formats. To be used as 16 bit value, they (and the proposed 17 bit format as well) would need to be converted into 16 bit - while maybe faster, it does not have make any difference from using FP and converting as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also it must be noted that many BASICs allowed to use either format for numbers, so using&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CALL -151&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CALL 65385&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;will both make the Apple II enter the Monitor. Still, the first not only saves a byte in the source text (yeah, I know, MS; *1), but also seems way better to remember.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there a performance issue this raises that I'm not immediately seeing? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, there's a missing use case - well, that and the fact that BASIC is intended as a ... well ... basic programming language. So why add more variable types for such a nice issue?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition it might be useful to keep in mind that BASICs with compressed storage are never about preserving the source lines as entered, i.e literal, but only in spirit. Keywords get extended, blanks inserted or removed, parenthesis added, lower case becomes upper case and so on. Using compressed form with integers means that they will be output in the default form used by the system (like signed) (*2). Still, this may not stop someone writing a cruncher able to parse signed as well as unsigned (positive) integers when entered. Wouldn't it?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;No, lets forget about all of that stupid sensibility and simply implement it:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dropping the rather pointless idea of negative integers below -32768 opens a possible way to incooperate what I see as you core intention, the display of a 16 bit integer value (like $EA60) when listing, dependant on how it has been entered (like (+)60,000 or -5,536).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end it's simply a hint for the LIST command how to treat a constant. THe least intrusive way would be modifying &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14773/6659&quot;&gt;the way Integer BASIC stores numeric constants&lt;/a&gt;, where the first byte of a constant is preserved to simplify the interpreter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we assume that the cruncher accepts numerical constant in the range 32,768..65,535 without throwing an error, it could set the first byte to a value outside that $B0..$B9 range, signalling that it is to be taken as unsigned (positive) integer and prepared as such. This may or may not work depending on the rest of the interpreters checks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A less intrusive way would be 'hooking' one of the legal values for special treatment. The number zero might be a good candidate, as, by definition, negative zero does not exist. Also, it should not come as the first digit of a constant (*3). Do the cruncher will act as usual (with suppression of leading zeroes) but now don't issue an error when a number greater 32768 comes along, but goes ahead after turning the identifier into $B0. Whenever now the LIST routine encounters a constant with $B0 as identifier, it treats the following value as unsigned 16 bit for display. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This should result in the minimal possible intervention to the interpreter and no change for run time routines or decreased performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, it'll still introduce the same number of problems as any alternation without adding areal 17 bit type would bring. For example an expression like &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A = 40000 - 1000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;is as well legal for the cruncher as for the interpreter. Still the result would not be 39,000 as most would expect, but&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$9C40 - $03E8 = $9858 -&amp;gt; 26,526&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So while it seams nice at first sight, it will introduce a lot of hard to find bugs that no part of BASIC can detect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short, to handle this integer arithmetic has to be turned to 17 bit (*4) or introduce severe inconsistency for users on places not expected. I wouldn't enjoy either.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - In addition, and that's something MS can be proud of, their full BASIC allowed to write &lt;code&gt;CALL &amp;amp;HFF69&lt;/code&gt; as well. Not better in any way, still, the &lt;code&gt;&amp;amp;H&lt;/code&gt; could be turned into (yet another) token to be handled like an integer, but always listed again as hex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - In fact, output could be made on a case-by-case basis, not just using hex notation when added explicit (&lt;code&gt;&amp;amp;H&lt;/code&gt;), but whenever it seems appropriate as default - like CALLs ... all the way to make CALL even more luxurious by including any constant value right after the token without any number identifier ... did I hear anyone mention Pandora's Box?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - If one constant is entered with leading zeroes, they get suppressed during crunching and not displayed when listing ... It's not a bug, it's a feature: This BASIC eliminated leading zeroes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Effectively just postponing the problem until bit 17 is hit.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-20T21:01:18.533" LastActivityDate="2020-05-20T21:01:18.533" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14847" PostTypeId="2" ParentId="14844" CreationDate="2020-05-19T19:49:59.650" Score="15" Body="&lt;p&gt;In real machines with two's complement representation, there's only one integer format.  The decision of whether 0xffff means -1 or 65535 is dependent on the use it's put to. Output code needs to decide which string of characters to convert 0xffff to.  Input code needs to decide whether to complain about values exceeding 15 bits of magnitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In (mainstream) languages where there is a need for 0xffff to sometimes mean -1 and sometimes mean 65535, this is usually accomplished via types, not via representation.  Integer quantities are 'signed integers' or 'unsigned integers'.  The bits are just the bits; the interpretation is in the eye of the beholder (and the beholder's language translator).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC is not a language with a particularly rich type system, and indeed providing unsigned types seems to me like it's going to fight against the 'B' of 'BASIC'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the examples posted, it seems that the deficit is with respect to features roughly glued on to BASIC without clean integration (the PEEKs and POKEs to strange addresses, if you will).  To me as a nonuser of PC BASICs, it's not clear why CALL 64600 would be less &quot;odd&quot; than CALL -936; I'd prefer CALL CLEAR or similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;tl;dr - insufficient reward for the required work.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-05-19T19:49:59.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14848" PostTypeId="1" CreationDate="2020-05-19T23:10:37.870" Score="3" ViewCount="797" Body="&lt;p&gt;I am using a USB connected &quot;Sabrent FD-05PUB&quot; 3.5&quot; floppy drive to read data using Windows 10 computer. It shows in Device Manager as &quot;TEAC USB UF000x USB Device&quot;&#xA;The 1.44MB disks read just fine. &#xA;All 7.20KB floppies error with&#xA;&quot;A:\ is not accessible&#xA;The disk media is not recognized. It may not be formatted.&quot;&#xA;Any ideas?&quot;&lt;/p&gt;&#xA;" OwnerUserId="18186" LastActivityDate="2020-05-20T04:53:32.027" Title="Problem reading 720KB floppy disks containing dat" Tags="&lt;floppy-disk&gt;&lt;data-transfer&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2020-05-20T16:53:44.007" ContentLicense="CC BY-SA 4.0" />
  <row Id="14849" PostTypeId="1" AcceptedAnswerId="14996" CreationDate="2020-05-20T04:25:18.207" Score="2" ViewCount="124" Body="&lt;p&gt;I've been working on some modules for the Ghidra reverse engineering tool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Ghidra&lt;/strong&gt; is written in Java, which I'd always avoided when I was more actively programming so this is an opportunity to learn it while in semi-lockdown.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amstrads and Spectrum +3's both used different partly-compatible extended variants of the &lt;strong&gt;CP/M&lt;/strong&gt; disk layout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;DSK&lt;/strong&gt; is a disk image format for representing standard disks in this family, regardless of the variants as mentioned above. &lt;strong&gt;EDSK&lt;/strong&gt; is an extension the DSK that can also represent non-standard disks such as those with copy protection. Basically DSK is compatible with the OSes that used these disks whereas EDSK is compatible with what the floppy drive hardware could do at a low level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are tons of Amstrad emulators around and even more Spectrum emulators. But only a fraction are in Java, and not all support floppy drive emulation. And I suppose some are not open source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hunted for any public Java libraries that can handle the disk layout, the disk image formats, or both. So far I haven't found one but I'm new to Java so might not be good at finding them. A stronger possibility is that one of the Java emulators includes some modular code for those functions that I could turn into a library or adapt in some way.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-06-28T06:04:40.457" Title="Are there open source Java libraries for reading DSK and EDSK disk image files as used by Amstrad and Spectrum +3 emulators?" Tags="&lt;programming&gt;&lt;emulation&gt;&lt;disk-image&gt;&lt;spectrum-plus-3&gt;&lt;amstrad&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14850" PostTypeId="2" ParentId="14848" CreationDate="2020-05-20T04:53:32.027" Score="8" Body="&lt;p&gt;Some USB floppy drives don't support double-density floppy disks (as opposed to the newer high-density disks that are usually formatted to 1440KB).  I think it's usually a limitation of the controller chip interfacing between USB and the drive itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should try using a different drive, and look specifically for reviews of its performance on double-density disks.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-05-20T04:53:32.027" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14851" PostTypeId="2" ParentId="14844" CreationDate="2020-05-20T05:08:42.720" Score="3" Body="&lt;p&gt;BBC BASIC, one of the later and more powerful microcomputer BASICs, supported both 40-bit floating point and 32-bit signed integers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Variables in the latter format had a &lt;code&gt;%&lt;/code&gt; suffix, analogous to the &lt;code&gt;$&lt;/code&gt; identifying a string variable.  This same &quot;Hungarian notation&quot; applies to functions which returned an integer or string variable.  When ported to the ARM-based Archimedes computers, a fourth type with a &lt;code&gt;#&lt;/code&gt; suffix supported 64-bit floating point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The normal way of specifying addresses on the BBC Micro was in hexadecimal, with an &lt;code&gt;&amp;amp;&lt;/code&gt; prefix, and indirection operators replaced the usual &lt;code&gt;PEEK&lt;/code&gt; and &lt;code&gt;POKE&lt;/code&gt; keywords.  And of course you could use variables with each of these.  Some of the single-letter &lt;code&gt;%&lt;/code&gt; variables had built-in meanings to BASIC, particularly for use with the integrated assembler.  You could print a variable in hexadecimal by providing a &lt;code&gt;~&lt;/code&gt; prefix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, you could paste the following into &lt;a href=&quot;https://bbc.godbolt.org/?&amp;amp;model=Master&quot; rel=&quot;nofollow noreferrer&quot;&gt;jsBeeb&lt;/a&gt; - see the text box for doing so at the top:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MODE 0&#xA;AUTO&#xA;DIM TEST% 256&#xA;P%=TEST%&#xA;[ : OPT 3&#xA;LDA #0&#xA;STA &amp;amp;84&#xA;STA &amp;amp;85&#xA;LDA #&amp;amp;1D&#xA;STA &amp;amp;83&#xA;LDA #&amp;amp;6B&#xA;STA &amp;amp;1D&#xA;LDA #&amp;amp;4E&#xA;EQUW &amp;amp;8347  \ Magic opcode, RMB4 &amp;amp;83&#xA;EOR &amp;amp;83&#xA;CMP #&amp;amp;53    \ Additional check for naive NMOS emulators&#xA;BNE P%+6&#xA;EQUW &amp;amp;0280  \ BRA *+4&#xA;LDA #&amp;amp;6E&#xA;JSR &amp;amp;FFEE   \ Output for BBC Micro&#xA;JSR &amp;amp;FFE7&#xA;RTS&#xA;]&#xA;CALL TEST%&#xA;END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then press Escape and type RUN.  You'll find that it prints a different letter on the BBC Model B emulator than the BBC Master emulator, due to the different versions of the 6502 used in each.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-05-20T05:14:27.333" LastActivityDate="2020-05-20T05:14:27.333" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14852" PostTypeId="2" ParentId="14844" CreationDate="2020-05-20T06:06:28.430" Score="5" Body="&lt;p&gt;As far as I understand your question, I guess the ZX Spectrum BASIC could be an answer: it stores all numbers in 5-byte format, FPs as well as integers (&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/8837/11446&quot;&gt;see more here&lt;/a&gt;). This BASIC could store unsigned integers (0-65535) with a &quot;sign&quot; byte, so technically it's a little bit similar to the way you asked for.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-05-20T06:06:28.430" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14853" PostTypeId="2" ParentId="14486" CreationDate="2020-05-20T10:21:47.857" Score="1" Body="&lt;h2&gt;TR-DOS&lt;/h2&gt;&#xA;&lt;p&gt;Files themselves have no header at all. Metadata is stored in the directory section of the disk, along with the filename.&lt;/p&gt;&#xA;&lt;p&gt;The metadata has a type field, which is also the file extension. Depending on this field you interpret some of the other fields in different ways. &amp;quot;B&amp;quot; for Basic programs. &amp;quot;C&amp;quot; for machine code, or any binary file really such as screenshots. &amp;quot;D&amp;quot; for &amp;quot;data array files&amp;quot;. &amp;quot;#&amp;quot; for &amp;quot;serial/random access files&amp;quot; AKA &amp;quot;print files&amp;quot;. Code files include an address where the code will be loaded and begin execution. Basic program files can include a line number to begin running at. Other file extensions are treated like code files.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;BUT&lt;/strong&gt;&lt;/em&gt; some files do have a footer! Basic files and &amp;quot;data array files&amp;quot; have four extra bytes following the regular data. These bytes are &lt;em&gt;not&lt;/em&gt; counted in the fields which indicate the length of the file. For Basic programs, one of the fields is the auto-start line number.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;file body of Basic program files:&#xA;=======================================================================&#xA;Offset        |Type       +Length:        Description:&#xA;--------------+-----------+--------------+-----------------------------&#xA;+0            |byte array |[file length] |data of the Basic program&#xA;+[file len]   |char, char |2             |param 2 indicator: #128, #170&#xA;+[file len]+2 |word       |2             |autostart line num: 0..9999&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;+3DOS&lt;/h2&gt;&#xA;&lt;p&gt;Files &lt;em&gt;&lt;strong&gt;may&lt;/strong&gt;&lt;/em&gt; have a 128-byte header:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Bytes 0...7 - +3DOS signature - 'PLUS3DOS'&#xA;Byte 8      - 1Ah (26) Soft-EOF (end of file)&#xA;Byte 9      - Issue number&#xA;Byte 10     - Version number&#xA;Bytes 11...14   - Length of the file in bytes, 32 bit number,&#xA;            least significant byte in lowest address&#xA;Bytes 15...22   - +3 BASIC header data&#xA;Bytes 23...126  - Reserved (set to 0)&#xA;Byte 127    - Checksum (sum of bytes 0...126 modulo 256)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The BASIC header data field has this format:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;|----------------|-----|-----|-----|-----|-----|-----|-----|&#xA;|   Byte         |  0  |  1  |  2  |  3  |  4  |  5  |  6  |&#xA;|----------------|-----|-----|-----|-----|-----|-----|-----|&#xA;|Program         |  0  |File length|8000h/LINE |prog offset|&#xA;|Numeric array   |  1  |File length| xxx |name | xxx | xxx |&#xA;|Character Array |  2  |File length| xxx |name | xxx | xxx |&#xA;|Code            |  3  |File length| load addy | xxx | xxx |&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Some sources indicate more types such as 4, &amp;quot;Snapshot&amp;quot; and 5, &amp;quot;long file&amp;quot;. But I think those are extensions on some emulator or modern peripherals for using SD cards.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-05-26T06:57:34.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14854" PostTypeId="1" CreationDate="2020-05-20T13:06:40.577" Score="11" ViewCount="459" Body="&lt;p&gt;I find I keep on doing things like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;raster_interrupt:&#xA;    bgnd_color = * + 1&#xA;    lda #$00&#xA;    sta $d021&#xA;    ; rest of interrupt handler&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;so that I can do this kind of thing elsewhere in my program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    lda #$01&#xA;    sta bgnd_color&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This interrupt handler loads an immediate value into the accumulator, and then stores it in the hardware register that determines the background colour. Elsewhere in the program I modify that immediate value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This saves a machine cycle in the interrupt handler, and does not use any zero page or other memory. Only the store instruction is a bit slower but that's okay; the background color doesn't change all that often.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tricky part is maintaining the label that addresses the instruction's operand. As far as I can see, my options are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;what I did above, the &lt;code&gt;* + 1&lt;/code&gt; which is hacky, unintuitive and more awkward for 16 bit quantities. Also it's less maintainable because the label is not in the same line as the address, which means version control won't treat them as one unit, and also seems like a breeding ground for &lt;a href=&quot;https://blog.codecentric.de/en/2014/02/curly-braces/&quot; rel=&quot;noreferrer&quot;&gt;gotofail bugs&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;label the instruction, and then refer to its operand with &lt;code&gt;label + 1&lt;/code&gt;. This option I like slightly less because now the label names the instruction, not the value. That makes naming harder. Also I need to remember the &lt;code&gt;+ 1&lt;/code&gt; on every reference to the value.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;bgnd_color = raster_interrupt + 1&lt;/code&gt;, riskier version of the first option.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would much rather do this on the same line as the opcode (more maintainable, more version-control friendly), something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;raster_interrupt:&#xA;    lda :bgnd_color&#xA;    sta $d021&#xA;    ; rest of interrupt handler&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(I just invented a syntax for the purposes of this question. The idea here is that &lt;code&gt;bgnd_color&lt;/code&gt; is still a label, but it's inline and denotes the address of the operand, 8 or 16 bits.). Self-modifying code is quite common on old micros, so I am surprised to not see any assemblers with features for conveniencing it. Have I overlooked any assembler that can do this?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2020-05-20T16:06:17.327" LastActivityDate="2020-05-21T16:25:22.070" Title="Do any 6502 assemblers have better support for self-modifying code?" Tags="&lt;assembly&gt;&lt;6502&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14855" PostTypeId="1" AcceptedAnswerId="14856" CreationDate="2020-05-20T13:12:19.973" Score="3" ViewCount="140" Body="&lt;p&gt;After working on some tools that parse the TR-DOS disk image format .TRD files for a while I just noticed that one of the game disk images I had downloaded &lt;a href=&quot;https://www.planetemu.net/rom/sinclair-zx-spectrum-games-trd/abadia-del-crimen-la-1988-opera-soft-sp-h-perestroika-4&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;La Abadia Del Crimen&quot;&lt;/a&gt;, only has three files on it when I look at it in a hex editor, or with the tools I've been working on:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qM7mP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qM7mP.png&quot; alt=&quot;hex editor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see &lt;code&gt;ABADIA..B&lt;/code&gt;, &lt;code&gt;abadia..C&lt;/code&gt;, and &lt;code&gt;ABADSAVEP&lt;/code&gt;. (The dots represent spaces, which are ignored, and the last letter is the type or file extension.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when I load the disk image into a virtual Beta drive on a Spectrum Emulator, Fuse on Windows in Pentagon 128K mode in my case, I see this when I enter the &lt;code&gt;CAT&lt;/code&gt; command:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KBY8m.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KBY8m.png&quot; alt=&quot;cat command output&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And now there are four files! &lt;code&gt;ABADIA  &amp;lt;B&amp;gt;&lt;/code&gt;, &lt;code&gt;abadia  &amp;lt;C&amp;gt;&lt;/code&gt;, &lt;code&gt;ABADSAVE&amp;lt;P&amp;gt;&lt;/code&gt;, &lt;em&gt;and&lt;/em&gt; &lt;code&gt;boot    &amp;lt;B&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the disk image the rest of the directory area seems to be blank.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the TR-DOS manuals it states that a Basic program file called &quot;boot&quot; is loaded and run, and indeed other disk images have the file no matter how I view it and I can see that they are regular Spectrum Basic files. I can find no mention of any kind of &quot;virtual file&quot; or &quot;hidden file&quot; or anything of that nature. I suppose it could be some kind of undocumented feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TR-DOS disk images are just flat dumps of the disk sectors and the disk layout is very simple. But it is a game so it could be protected with some trick known in the Russian/clone Speccy scene. Not only that, it's surely a crack since I don't think any western Speccy games were sold in Russian clone formats. And crackers liked to use tricks on their warez.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My attempts to load the file have been failing, but Fuse's support for the Russian clones doesn't seem as good as on Spectaculator, and my 30-day trial for it has ended. My other Speccy emulators don't support the machines it should work on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So does anybody know what's going on here?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-20T14:02:44.093" LastActivityDate="2020-05-20T15:22:56.037" Title="Where can this &quot;boot.B&quot; file be coming from on this Spectrum TR-DOS disk image?" Tags="&lt;floppy-disk&gt;&lt;zx-spectrum&gt;&lt;copy-protection&gt;&lt;zx-spectrum-clones&gt;&lt;tr-dos&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14856" PostTypeId="2" ParentId="14855" CreationDate="2020-05-20T15:22:56.037" Score="5" Body="&lt;p&gt;I think possibly your emulator is fooling you. Per &lt;a href=&quot;https://sourceforge.net/p/fuse-emulator/feature-requests/90/&quot; rel=&quot;noreferrer&quot;&gt;this FUSE feature request&lt;/a&gt;, leading to &lt;a href=&quot;https://sourceforge.net/p/fuse-emulator/feature-requests/90/#23d4&quot; rel=&quot;noreferrer&quot;&gt;this patch in particular&lt;/a&gt; and &lt;a href=&quot;https://sourceforge.net/p/fuse-emulator/code/5746/&quot; rel=&quot;noreferrer&quot;&gt;this commit&lt;/a&gt;, FUSE synthesises a boot.b and adds it to the disk directory if you open a disk that does not otherwise have one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the reason that you can't locate the file within the disk image is that it isn't there. The emulator is inventing it to improve your user experience.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-05-20T15:22:56.037" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14857" PostTypeId="2" ParentId="14839" CreationDate="2020-05-20T15:58:08.697" Score="-1" Body="&lt;p&gt;If by program you go with the more generic definition that would be a procedure by which something is done, I would have to say that it was probably a stick and clay tablet.  It was definitely more forgiving to corrections than the hammer and chisel on stone 'program' and tended to be more portable than the stick and sand 'program' that came before it. :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One could consider punch cards to be a real time text editor. &lt;/p&gt;&#xA;" OwnerUserId="18193" LastActivityDate="2020-05-20T15:58:08.697" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14858" PostTypeId="2" ParentId="14854" CreationDate="2020-05-20T16:16:57.480" Score="5" Body="&lt;p&gt;Not that I know of. After all, &amp;quot;an instruction&amp;quot; is one of the basic units a assembler handles. It has no subpart.&lt;/p&gt;&#xA;&lt;p&gt;Now, I really appreciate that you try to solve it using symbolic tools, which is the best way to avoid programming errors. Let the assembler do the job. For one, it will always be a secondary construct, based on a label - which could move - and second, you won't get it as build in, so you need to go for some label arithmetic. Personally I'd use a fourth way for such cases: Making all labels dependent and encapsulate the whole thing in a macro (or a set of macros).&lt;/p&gt;&#xA;&lt;p&gt;This differs of course quite a lot on the Assembler you use and what option for manipulation it offers So hard to give an example without knowing.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;CA65&lt;/h2&gt;&#xA;&lt;p&gt;Unlike promised I couldn't find the project it belonged to, so this is a quick recreation:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ca65 V2.18 - Git 1074d35&#xA;Main file   : test.asm&#xA;Current file: test.asm&#xA;&#xA;000000r 1                       .P02&#xA;000000r 1               &#xA;000000r 1               .MACRO  PATCH   Instruction,Offset,Label&#xA;000000r 1               ; Instruction - The instruction to be modified as string&#xA;000000r 1               ;               enclosed in curly brackets {}&#xA;000000r 1               ; Offset      - The offset within the instruction to be patched.&#xA;000000r 1               ; Label       - Label to be set&#xA;000000r 1               &#xA;000000r 1               Label   :=      *+Offset&#xA;000000r 1                       Instruction&#xA;000000r 1               .ENDMACRO&#xA;000000r 1               &#xA;000000r 1                       .ORG    $0800&#xA;000800  1               &#xA;000800  1               raster_interrupt:&#xA;000800  1  A9 00                PATCH  {LDA #$00},1,bgnd_color&#xA;000802  1  8D 21 D0             STA     $D021&#xA;000805  1               ; rest of interrupt handler&#xA;000805  1  60                   RTS&#xA;000806  1               &#xA;000806  1               &#xA;000806  1               Somewhere_else:&#xA;000806  1  A9 01                LDA     #$01&#xA;000808  1  8D 01 08             STA     bgnd_color&#xA;00080B  1               &#xA;00080B  1                       .END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So essentially it's exact like your first version, which is usually the way to go, but as you say rather ugly and error prone. Encapsulated in a macro it not only looks nice but does highlight that it's a rather special instruction. Chances of disturbing edits or alike are limited.&lt;/p&gt;&#xA;&lt;p&gt;This version is rather simple and it should be possible to implement that with other assemblers as well. Of course it can be improved a lot - like checking the Offset value and adding some luxury for modification of 16 bit values (for example separate labels (*H and *L) for both bytes), but that will require a bit more work depending on the assembler used.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Use with 64TASS&lt;/h2&gt;&#xA;&lt;p&gt;64TASS is a rather strange beast. Some great parts, like scoping, but in general rather chaotic development of features. I had to dive into the C source to see that, what looked possible by reading the manual, was simply not implemented. So this version is less elegant, but should do the job.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; 64tass Turbo Assembler Macro V1.55.2200 listing file&#xA;; 64tass -Wall -l tass.L1 -L tass.L2 test-tass.asm&#xA;; Thu May 21 03:13:03 2020&#xA;&#xA;;Offset ;Hex        ;Monitor    ;Source&#xA;&#xA;;******  Processing input file: test-tass.asm&#xA;&#xA;.0800                           raster_interrupt:&#xA;.0800                           bgcolor&#xA;=$0801                          VAL     =      *+1&#xA;=$0801                          VALL    =      *+1&#xA;=$0802                          VALH    =      *+2&#xA;.0800   a9 00       lda #$00            LDA #$00&#xA;.0802   8d 21 d0    sta $d021           STA     $D021&#xA;.0805                           stuff&#xA;=$0806                          VAL     =      *+1&#xA;=$0806                          VALL    =      *+1&#xA;=$0807                          VALH    =      *+2&#xA;.0805   8d 34 12    sta $1234           STA $1234&#xA;.0808   60          rts                 RTS&#xA;.0809                           Somewhere_else:&#xA;.0809   a9 01       lda #$01            LDA     #$01&#xA;.080b   8d 01 08    sta $0801           STA     bgcolor.VAL&#xA;.080e   8d 06 08    sta $0806           STA     stuff.VALL&#xA;.0811   8e 07 08    stx $0807           STX     stuff.VALH&#xA;&#xA;;******  End of listing        .end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Since the source lines are not included in a listing, thus making the macro call invisible, here's the source as well.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PATCH   .macro Instr&#xA;VAL     =      *+1&#xA;VALL    =      *+1&#xA;VALH    =      *+2&#xA;        \@&#xA;    .endm&#xA;&#xA;        * =    $0800&#xA;&#xA;raster_interrupt:&#xA;bgcolor #PATCH  LDA #$00&#xA;        STA     $D021&#xA;; rest of interrupt handler&#xA;stuff   #PATCH  STA $1234ds&#xA;        RTS&#xA;&#xA;Somewhere_else:&#xA;        LDA     #$01&#xA;        STA     bgcolor.VAL&#xA;&#xA;        STA     stuff.VALL&#xA;        STX     stuff.VALH  &#xA;        .end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-05-21T01:39:11.020" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="14859" PostTypeId="2" ParentId="14670" CreationDate="2020-05-20T18:27:19.250" Score="2" Body="&lt;p&gt;One of the things that I discovered fairly quickly when coming to the Windows environment from a formal UNIX environment was that using the registry was not a good idea for most things.  They might have had good intentions with COM, but it created more problems that it solved as far as I was concerned.  For any sort of critical software, I would always compile it into a static executable so that I would know that it would run the same each time that I ran it.  I did not want to use the runtime DLLs since that might result in the program running differently if there had been an update to them.  Sometimes, updates fix bugs, sometimes they add bugs, sometimes they just change the bugs that you have found ways to work around.  Having the code compiled statically meant that it would run the same whenever executed.  Unfortunately, that was not always possible since sometimes I needed to develop libraries for developers in other languages (e.g. Visual BASIC).  For these times, I would create DLLs and they would put the DLL in either their execution path or in the directory that they ran the program from.  Sometimes you need to run multiple versions of a program at the same time (e.g. a production version and a new test version).&lt;/p&gt;&#xA;" OwnerUserId="18193" LastActivityDate="2020-05-20T18:27:19.250" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14860" PostTypeId="1" CreationDate="2020-05-20T19:21:58.750" Score="10" ViewCount="498" Body="&lt;p&gt;I have recently been learning to use &lt;code&gt;vasm&lt;/code&gt;.  For those that don't know, vasm is a cross-platform assembler for multiple types of processors such as the M68000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sun.hasenbraten.de/vasm/&quot; rel=&quot;noreferrer&quot;&gt;http://sun.hasenbraten.de/vasm/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using it to write some Amiga specific (A1200) code in assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For about 15 minutes, I could not figure out why I couldn't assemble a simple program until I discovered it was the white space between operands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the following does not work:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;moveq #0, D0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But this does work:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;moveq #0,D0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have a habit of putting spaces after commas when I code and vasm does not like that.  I have searched online and cannot find a reference to that issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following is how I assemble the program if it helps:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;vasm -m68020 -kick1hunks -Fhunkexe -o test.exe main.asm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Any idea how to tell vasm to not be so picky?&lt;/p&gt;&#xA;" OwnerUserId="2081" LastEditorUserId="6659" LastEditDate="2020-05-20T20:13:24.907" LastActivityDate="2020-05-26T22:36:32.823" Title="How do I tell vasm to allow white spaces?" Tags="&lt;amiga&gt;&lt;assembly&gt;&lt;motorola-68000&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14861" PostTypeId="2" ParentId="14860" CreationDate="2020-05-20T19:34:24.740" Score="8" Body="&lt;p&gt;Yes, you can use &lt;code&gt;-phxass&lt;/code&gt; option (name of the old Amiga native assembler by Phx/Frank Wille who is also the author of the Motorola syntax module)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;vasm -phxass -m68020 -kick1hunks -Fhunkexe -o test.exe main.asm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;From the &lt;a href=&quot;http://sun.hasenbraten.de/vasm/release/vasm.html&quot; rel=&quot;noreferrer&quot;&gt;documentation&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;‘-phxass’&lt;/p&gt;&#xA;&lt;p&gt;PhxAss-compatibility mode. Only directives known to PhxAss are recognized. Enables the following features:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Enable escape codes handling in strings (see ‘-esc’).&lt;/li&gt;&#xA;&lt;li&gt;Macro names are treated as case-insensitive.&lt;/li&gt;&#xA;&lt;li&gt;Up to 35 macro arguments.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Allow blanks in operands&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Defines the symbol &lt;em&gt;PHXASS&lt;/em&gt; with value 2 (to differentiate from the real PhxAss with value 1).&lt;/li&gt;&#xA;&lt;li&gt;When no output file name is given, construct it from the input name.&lt;/li&gt;&#xA;&lt;li&gt;Directives unknown to PhxAss are no longer supported.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It comes with some other syntax changes (ex: &lt;code&gt;blk.b&lt;/code&gt; is allowed too) but it's pretty similar to devpac syntax, only more comprehensive. I'm using it for one of my projects when I migrated from phxass assembler, and using devpac option for other sources where I used Barfly before and I want others to be able to still use Barfly on those sources.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-05-20T20:33:13.917" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14863" PostTypeId="2" ParentId="14860" CreationDate="2020-05-20T20:24:12.680" Score="7" Body="&lt;p&gt;Adding command line option &lt;code&gt;-spaces&lt;/code&gt; will do the trick by allowing spaces within operands. This means of course that comments now must be separated by &lt;code&gt;;&lt;/code&gt; from any instruction or directrive. Unlike with &lt;code&gt;-phxass&lt;/code&gt; (which includes &lt;code&gt;-spaces&lt;/code&gt;), there are no other side effects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The option is only available with Motorola syntax (&lt;code&gt;vasmm68k_mot&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On a sidenote, it may be useful to drop that habit when doing assembler, as not many will be so kind to allow it.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-26T22:36:32.823" LastActivityDate="2020-05-26T22:36:32.823" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14864" PostTypeId="1" AcceptedAnswerId="14866" CreationDate="2020-05-20T23:07:31.653" Score="21" ViewCount="3363" Body="&lt;p&gt;In his June 1985 foreword to &lt;em&gt;Programming the 65816&lt;/em&gt; by David Eyes and Ron Lichty, Bill Mensch expresses his hopes for a 6502-derived 32-bit microprocessor: the 65832. WDC is still thriving, but the ‘832 was apparently never released. What happened to these plans?&lt;/p&gt;&#xA;" OwnerUserId="11579" LastEditorUserId="10666" LastEditDate="2020-05-22T13:34:42.420" LastActivityDate="2020-05-22T13:34:42.420" Title="What happened to the 65832?" Tags="&lt;history&gt;&lt;microprocessor&gt;&lt;65816&gt;&lt;65c02&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14865" PostTypeId="2" ParentId="14864" CreationDate="2020-05-20T23:51:44.013" Score="8" Body="&lt;p&gt;I suppose you have heard of the draft datasheet of the 65832?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://downloads.reactivemicro.com/Electronics/CPU/W65C832%20CPU%20Datasheet%20v2.0.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://downloads.reactivemicro.com/Electronics/CPU/W65C832%20CPU%20Datasheet%20v2.0.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apple was the main customer of the 65816 (for Apple //gs) which needed to be compatible with 6502. They had no need of a 32bits version as Macintosh had already chosen the MC68000 family which is a sounder base as a 32bits CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Nintendo later also used a 65816 derivative in the SNES)&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2020-05-20T23:51:44.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14866" PostTypeId="2" ParentId="14864" CreationDate="2020-05-20T23:51:58.687" Score="18" Body="&lt;p&gt;In the 1988 &lt;a href=&quot;https://mirrors.apple2.org.za/apple2.caltech.edu/miscinfo/65xxx.chronology&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Report on the 65c832&lt;/em&gt;&lt;/a&gt;, Mensch described the 65c832 as a back-burner project with an uncertain timeline: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Since WDC is not a gigantic conglomerate, it has limited &#xA;  resources.  If all your manpower, time, and money are going towards the &#xA;  development of the 65c265, you don't have any left for the '832.  That's &#xA;  exactly what was happening with the 65c832 as of June, 1988.  It's a &#xA;  concept that WDC employees kick around all the time, but on which active &#xA;  work has yet to begin.  On the positive side,  there's still time to &#xA;  influence WDC's design.  On the down side, it will be a couple of years, &#xA;  at least,  before the 65c832 is real.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A 51 page &lt;a href=&quot;https://downloads.reactivemicro.com/Electronics/CPU/W65C832%20CPU%20Datasheet%20v2.0.pdf&quot; rel=&quot;noreferrer&quot;&gt;preliminary datasheet&lt;/a&gt; was then produced in 1990 and &lt;a href=&quot;http://archive.6502.org/datasheets/wdc_w65c832_preliminary_mar_1991.pdf&quot; rel=&quot;noreferrer&quot;&gt;updated in 1991&lt;/a&gt;, but as far as anyone knows, no silicon ever came of it. As to why, one can only speculate (and a quick google will get you plenty such speculation -- either how great a chip it would have been, or what a failure).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally, I think it was the relative failure of the 65816-based Apple IIgs that convinced Mensch to shelve the project. Its key selling point had been that it was both a shiny, new  16 bit machine, and fully compatible with the Apple II line at the same time. But this didn't translate into sales in the way Mensch and Apple had hoped (Apple doing its share here by hobbling the IIgs and promoting the Macintosh). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The report quoted earlier frames the 65c832 as an upgrade to the IIgs. With the IIgs failing, and the 32bit market already largely divided up between Intel and Motorola, it must have been becoming clear in 1991 that a 6502-compatible 32 bit processor, with its performance hampered by compatibility requirements, would not be able to gain a significant market share. &lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-05-21T00:33:48.210" LastActivityDate="2020-05-21T00:33:48.210" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14867" PostTypeId="2" ParentId="14864" CreationDate="2020-05-20T23:57:41.733" Score="4" Body="&lt;p&gt;At some point before 1990 the idea seems to have first surfaced as a &lt;a href=&quot;https://mirrors.apple2.org.za/apple2.caltech.edu/miscinfo/65xxx.chronology&quot; rel=&quot;nofollow noreferrer&quot;&gt;'report' about 6502 chronology and future processors&lt;/a&gt; might suggest. It includes not only information about the ghostly 6516, but also information about a 65832 which should have more features than the datasheet showed. There was also no substantial follow up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The project might have gotten serious in 1989/90 as 65C832. There is a 'preliminary' &lt;a href=&quot;https://downloads.reactivemicro.com/Electronics/CPU/W65C832%20CPU%20Datasheet%20v2.0.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;data sheet of March 1990&lt;/a&gt; and a &lt;a href=&quot;http://archive.6502.org/datasheets/wdc_w65c832_preliminary_mar_1991.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;follow up data sheet dated March 1991&lt;/a&gt;. AFAICT the only difference is an added disclaimer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU described is a 65816 with A/X/Y extensible to 32 bit and a new emulation bit for 16 bit (65816) workings called E16. Like XCE which exchanges E8 and Carry a new XFE instruction should now exchange E8/Carry and E16 with Overflow (*1). Except there is no free code space for a new instruction, so it seems as if this might have been intended as a renaming of XCE - or simply not thought thru. In 32 bit 'mode' A can be 8/16 or 32 bit, X/Y only 8 or 32 bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything else was kept the same, this includes the hardware interface, so 8 bit data and 24 bit address. Any imagined speed gain could only be realized for a few instructions, often accompanied by quite some overhead for mode and register size switching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;Without substantial advantage there was no real resonance with professional (embedded) users, WDC's main customer base&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The project got resurrected by WDC as &lt;a href=&quot;http://web.archive.org/web/20060313071159/http://www.westerndesigncenter.com/wdc/news2.cfm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Terbium&lt;/a&gt; in 2006, but this time with even less information and no resonance at all. The Terbium name got reused for a &lt;a href=&quot;https://wdc65xx.com/review-single-board-65c02-and-65c816-computers/&quot; rel=&quot;nofollow noreferrer&quot;&gt;65xx IDE&lt;/a&gt; (halfway down the page).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The missing SEV instruction in 6502 mode would be no hurdle, as switching to 32 bit mode only needs CLV. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="10678" LastEditDate="2020-05-21T12:17:09.743" LastActivityDate="2020-05-21T12:17:09.743" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14868" PostTypeId="2" ParentId="8579" CreationDate="2020-05-21T11:55:56.867" Score="0" Body="&lt;p&gt;Your TV may not recognize the C64's video signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The C64 video signal is, technically, 240p. Some chips have issues with this. This can also be observed with quite a few Video-&gt;HDMI converters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DIN&amp;lt;-&gt;RCA adapters come in different configurations. The DIN standard always has ground on pin 2 (the low middle pin - I will describe the pin assignment looking at the male plug so it forms a &quot;smiley face&quot;). The left two pins are the &quot;record&quot; pins, where audio goes into a device, the two in the right are the &quot;play&quot; pins where audio comes out of device. Except for a receiver (radio/amplifier combination), where &quot;play&quot; and &quot;record&quot; are switched. So...just taking any random DIN&amp;lt;-&gt;2RCA adapter may give you &quot;play&quot; cable, a &quot;record&quot; cable or a mono &quot;play/record&quot; cable. Yes, most DIN adapter cables you will find are meant to be used for audio, not for the C64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best way is, of course, to solder your own cable (or, in a pinch, cut apart RCA cables and shove the wires into the DIN socket).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For simple composite video (no S-Video) and audio, you can purchase a DIN&amp;lt;-&gt;RCA adapter with &lt;em&gt;four&lt;/em&gt; RCA jacks. One will be color video, one B/W video, one audio...and the one which remains will be audio-in. On the audio-in connector, you can connect the center pin to the rim (shortening the signal pin to ground) in order to somewhat reduce noise on the audio channel (usually not worth the effort).&lt;/p&gt;&#xA;" OwnerUserId="5100" LastActivityDate="2020-05-21T11:55:56.867" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14869" PostTypeId="2" ParentId="14854" CreationDate="2020-05-21T13:12:43.880" Score="3" Body="&lt;p&gt;ca65 (the assembler of the cc65 suite) has two macro packages for writing self modifying code in a comprehensible way. As described in the &lt;a href=&quot;https://cc65.github.io/doc/smc.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation&lt;/a&gt;, the main package is &lt;code&gt;smc.inc&lt;/code&gt;, while the second package &lt;code&gt;opcodes.inc&lt;/code&gt; is only necessary if you want also to modify opcodes. For your described application, the smc.inc package should be sufficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You basically write &lt;code&gt;SMC_StoreValue label&lt;/code&gt; at the place you want to save a register and add &lt;code&gt;SMC label, { LDA #SMC_Value }&lt;/code&gt; at the line you want to restore the value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example 1: Storing and restoring A,X,Y&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.include &quot;smc.inc&quot; ;this line goes to the beginning of you assembler file&#xA;&#xA;SMC_StoreValue storeA&#xA;SMC_StoreValue storeX,X&#xA;SMC_StoreValue storeY,Y&#xA;   ...some code...&#xA;SMC storeA, { LDA #SMC_Value }&#xA;SMC storeX, { LDX #SMC_Value }&#xA;SMC storeY, { LDY #SMC_Value }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Example 2: Switching X and Y&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SMC_StoreValue storeX,X&#xA;SMC_StoreValue storeY,Y&#xA;SMC storeX, { LDY #SMC_Value }&#xA;SMC storeY, { LDX #SMC_Value }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-05-21T13:12:43.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14871" PostTypeId="2" ParentId="14854" CreationDate="2020-05-21T15:24:45.543" Score="11" Body="&lt;p&gt;In Kick Assembler you can put labels in front of opcode arguments. For example you can write your raster interrupt like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;raster_interrupt:&#xA;    lda bgnd_color:#$00&#xA;    sta $d021&#xA;    ; rest of interrupt handler&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and change the color elsewhere in your program with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    lda #$01&#xA;    sta bgnd_color&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Such labels in front of the argument provide a more compact and tidy syntax. But &lt;code&gt;* = + 1&lt;/code&gt; trick is kind of preferable because it is the oldschool conventional way. So when you share your codes with others, they will find it more familiar and readable.    &lt;/p&gt;&#xA;" OwnerUserId="3422" LastEditorUserId="11100" LastEditDate="2020-05-21T16:25:22.070" LastActivityDate="2020-05-21T16:25:22.070" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14872" PostTypeId="1" AcceptedAnswerId="15827" CreationDate="2020-05-21T19:02:24.293" Score="11" ViewCount="698" Body="&lt;p&gt;When Nintendo used the 6502 core in the NES (as part of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ricoh_2A03&quot; rel=&quot;noreferrer&quot;&gt;Ricoh 2A03/2A07&lt;/a&gt; microprocessor and sound generator), they &lt;a href=&quot;https://www.linkedin.com/pulse/reverse-engineering-patent-protection-cautionary-tale-harry-strange&quot; rel=&quot;noreferrer&quot;&gt;circumvented the 6502's patent protection by disabling the BCD arithmetic&lt;/a&gt;. As a result, Commodore -- holders of the 6502 patent after they bought MOS Technology -- did not receive any payments for the use of the core. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later, Nintendo used the 65816 core in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ricoh_5A22&quot; rel=&quot;noreferrer&quot;&gt;Ricoh 5A22&lt;/a&gt; that powered the SNES. Did they pay WDC, who developed the 65816, for this, or did they find a similar loophole? &lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-05-22T11:27:52.647" LastActivityDate="2020-08-06T15:54:28.453" Title="Did Nintendo pay WDC for their use of the 65816 core?" Tags="&lt;history&gt;&lt;nintendo&gt;&lt;65816&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14873" PostTypeId="1" AcceptedAnswerId="14874" CreationDate="2020-05-21T20:54:46.993" Score="20" ViewCount="2357" Body="&lt;p&gt;If I upgraded, say, a Macintosh II with larger SIMMs, naturally the machine detected that additional RAM.  But how did it perform that check?  Does it simply sweep all addresses until it fails?  Or does it do something more complex?&lt;/p&gt;&#xA;" OwnerUserId="18197" LastActivityDate="2020-05-22T16:19:16.647" Title="How did 68k-based Macs (or other contemporary systems) detect how much RAM was installed?" Tags="&lt;apple-macintosh&gt;&lt;motorola-680x0&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14874" PostTypeId="2" ParentId="14873" CreationDate="2020-05-21T21:04:03.500" Score="20" Body="&lt;p&gt;Yes, part of the POST sequence (which occurs before the display lights up) is a simple memory test which also serves to detect how much RAM is present.  The Mac then sets up the hardware and its internal variables to reflect the actual RAM configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Attempted accesses of addresses which do not map to memory will either see a dead bus or alias to another RAM address.  Both of these cases can be detected by a RAM test routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern DIMMs include a small EEPROM connected to an I2C bus on dedicated pins of the DIMM.  This is read by the PC BIOS to determine both the size and timings of the RAM on board.  Such technology was not practical at the time of the Mac II series.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-05-21T21:04:03.500" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14875" PostTypeId="2" ParentId="13927" CreationDate="2020-05-21T22:05:57.797" Score="0" Body="&lt;p&gt;Although the printf implementation z88dk's classic C library doesn't support outputting floats, it does have in its stdlib.h a mostly undocumented function named ftoa that will convert a float to a string:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/z88dk/z88dk/blob/master/libsrc/math/genmath/ftoa.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/z88dk/z88dk/blob/master/libsrc/math/genmath/ftoa.c&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7044" LastActivityDate="2020-05-21T22:05:57.797" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14876" PostTypeId="1" AcceptedAnswerId="14877" CreationDate="2020-05-21T22:37:36.430" Score="45" ViewCount="10626" Body="&lt;p&gt;The 80486 processor can execute many instructions in a single cycle, such as a register-to-register add instruction (&lt;code&gt;ADD EAX, EBX&lt;/code&gt;, for example), which one would generally assume is fairly complex, requiring two registers to be read, a full 32 bit ALU operation, and both a register and flag writes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, other instructions that one would naturally assume to be relatively simple take multiple cycles, including the various flag manipulation instructions like &lt;code&gt;STC&lt;/code&gt; and &lt;code&gt;CLC&lt;/code&gt;, which are a strict  subset of the operations required for an &lt;code&gt;ADD&lt;/code&gt; instruction (only loading a precalculated value into the flags, rather than having to actually determine what the value to load should be based on inputs, and not needing a register update at all), yet take 2 cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the reason for this apparent discrepancy?&lt;/p&gt;&#xA;" OwnerUserId="15930" LastEditorUserId="3290" LastEditDate="2020-05-22T10:10:17.677" LastActivityDate="2020-05-24T23:43:07.690" Title="Why does the 80486 take longer to execute simple instructions than complex ones?" Tags="&lt;hardware&gt;&lt;microprocessor&gt;&lt;architecture&gt;&lt;80486&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14877" PostTypeId="2" ParentId="14876" CreationDate="2020-05-21T22:50:44.423" Score="18" Body="&lt;p&gt;First, it is not true that the 486 executes instructions in a single cycle. The 80486 is a pipelined architecture, so it's more accurate to say that most instructions can start one cycle after the preceding instruction has started. The pipeline length of an 80486 is 5 stages (IF &amp;rarr; ID1 &amp;rarr; ID2 &amp;rarr; EX &amp;rarr; WB). This means that an instruction entering this pipeline has a latency of 5 cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These &quot;1-cycle&quot; instructions are the ones that belong to the so-called RISC subset: a subset of instructions that are commonly present in production software because compilers that produced that software use them the most.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other instructions, despite being as simple as the first ones, don't belong to the RISC subset and must be executed by means of microcode, as how it were executed in previous architectures.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="2037" LastEditDate="2020-05-24T23:43:07.690" LastActivityDate="2020-05-24T23:43:07.690" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14878" PostTypeId="2" ParentId="14876" CreationDate="2020-05-22T00:57:16.560" Score="72" Body="&lt;h2&gt;TL;DR: It's the pipeline.&lt;/h2&gt;&#xA;&lt;p&gt;The 80486 contains parallel operating stages for decoding, operand fetch, execution and write back. So while an &lt;code&gt;ADD reg,reg&lt;/code&gt; does take 3 clocks to perform, as it did in the original 8086, its execution overlaps with the previous/next operation, so the CPU can crank out one &lt;code&gt;ADD reg,reg&lt;/code&gt; per clock.&lt;/p&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;p&gt;(Caveat, there's a whole lot more going on in these stages, so I might not remember all details)&lt;/p&gt;&#xA;&lt;p&gt;Two clocks was the minimum execution time for any instruction since the 8088. &lt;code&gt;ADD&lt;/code&gt; (or similar) as register/register did take 3 cycles. With the 286 they were sped up to two cycle operation due to optimized microcode and routing (*1).  While the 386 did speed up execution even more due to better address generation, the basic execution scheme stayed the same with a 3 stage instruction prefetch.&lt;/p&gt;&#xA;&lt;p&gt;The 486 did straighten address generation even further, but more importantly, it redid the instruction fetch architecture, introducing a 5-stage pipeline.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fetch      - Get 16 bytes from Cache (or memory)&lt;/li&gt;&#xA;&lt;li&gt;Decode 1   - Primary instruction decode - here only the first 1..3 bytes were examined&lt;/li&gt;&#xA;&lt;li&gt;Decode 2   - Address decode/Operand prefetch&lt;/li&gt;&#xA;&lt;li&gt;Execution  - Do the Operation&lt;/li&gt;&#xA;&lt;li&gt;Write back - Store data in register file (or memory buffer)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Operation of these stages is conditional, but they will always be taken (passed thru) to keep a constant clock rate.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Fetch&lt;/strong&gt; always gets a cache (memory) line of 16 byte at a time into one of its two buffers. Thus on average it only needs to do so every 4-5 instructions. This time is available to prefill the second buffer. Thus the 486 can keep up fast execution even without cache as long as the code is linear.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Decode 1&lt;/strong&gt; looks at opcode and addressing field to determine the action to be taken, feed back the real instruction length to the fetch stage (so it can advance), and set up the operation that D2 performs. Of note here, each prefix byte is handled as an instruction of its own, taking another clock cycle (*2,3). Similarly for the first byte (e.g. &lt;code&gt;0Fh&lt;/code&gt;) of a two byte opcode.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Decode 2&lt;/strong&gt; decodes operand access, fetches offsets or immediate values from the fetch stage's buffer. It also performs address calculations. Simple ones within a single cycle, complex ones need two.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Execution&lt;/strong&gt;. If all data is present as either immediate, or in cache, or from the register file, the execution performs in a single cycle.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Write Back&lt;/strong&gt; stores either the read value (memory, cache or Fetch buffer) or the latched results from Execution into the registers and or memory write buffers.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So a single &lt;code&gt;ADD reg,reg&lt;/code&gt; still needs 3 cycles but due to pipelining the CPU can finish one every clock.&lt;/p&gt;&#xA;&lt;p&gt;But wait, what happens if there are two &lt;code&gt;ADD reg,reg&lt;/code&gt;, the second needing the result of the previous? Like &lt;code&gt;ADD AX,BX; ADD CX,AX&lt;/code&gt;. Wouldn't that mean the second has to wait in execution until write back of the first is finished?&lt;/p&gt;&#xA;&lt;p&gt;Well, yes, except the engineers added a shortcut/feedback between Write Back and Execution. The WB input, the result of the previous Execute, is not only written to the register set, but as well offered to back to Execution as alternative input (tagged with what the target was). So if one instruction needs to read a register that was the result of the prior instruction it's available even before it gets written into the 'real' register.&lt;/p&gt;&#xA;&lt;p&gt;Cool, isn't it? But it gets even more tricky. The flags of any operation done in Execute are also provided back from Write Back to be used in the next instruction. This is done to enable a one cycle not-taken jump after flag modifying operations like compare or subtract.&lt;/p&gt;&#xA;&lt;p&gt;Despite that optimization, status register manipulating instructions do not benefit from this shortcut to avoid implications. Direct status register manipulations don't go through WB but are two step microinstructions handling the Status Register directly. This is important as status register settings not only change over all operation behaviour but also can generate various exceptions.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;It's beneficial to remember that &lt;strong&gt;the 80486 is not a RISC CPU&lt;/strong&gt; and does &lt;em&gt;not&lt;/em&gt; translate internally to RISC(-like) instructions, but continues to operate like their predecessors. Just with a very cleverly designed pipeline with feedback between various stages (*4) and parallel operation of address calculation units. While The Pentium (P5) introduced superscalar operation (through parallel pipelines), it wasn't until the P6 (Pentium Pro) that a code translation to a (somewhat) RISC like core happened - but even then lots of un-RISCy side channels were used.&lt;/p&gt;&#xA;&lt;p&gt;Following designs really expanded on that, with the pipeline growing to 10 stages in Pentium III, 20 for the first Pentium 4 and IIRC 40 (!) stages for the last Netburst CPU, before going back to a simpler but massively parallel design like the one P6 already had... But that's another story altogether.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The main gain of the 80286 in speed was a dedicated address calculation unit, but that's a different story.&lt;/p&gt;&#xA;&lt;p&gt;*2 - That's why a &lt;code&gt;LOCK&lt;/code&gt; takes zero cycles on a 286/386 but one cycle on a 486.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Somewhere I read a nice study made by Intel (IIRC) about prefixes and the pipeline. One really remarkable part was that Unix programs on average use only half as many prefixes as DOS programs. Proves my point how stupid it is to do address calculation with segment values.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Which substantially violates the simplicity criterion of RISC designs.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-05-24T07:50:19.377" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="14879" PostTypeId="1" CreationDate="2020-05-22T07:41:35.767" Score="5" ViewCount="625" Body="&lt;p&gt;Back in the 1980s-90s, using a UNIX system required running expensive servers or paying for timesharing service, so they were beyond the reach of most individuals, and only available to members in institutions and corporations. Also, browsing the Internet or USENET was difficult if not impossible without access to UNIX.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time, some resourceful academic institutions and hobbyist groups offered Public Access UNIX Systems. Typically, a shell account of a UNIX machine would be available to group members, so members could dial-in at home, usually using a home computer as a terminal, log into a Unix server and use development utilities. Later, some systems also offered personal homepage hosting, access to USENET, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most influential system was the &lt;a href=&quot;https://sdf.org/&quot; rel=&quot;noreferrer&quot;&gt;SDF Public Access UNIX&lt;/a&gt;, which is still active today. But there's little information online about the other Public Access UNIX Systems at that time. What were the major public access Unix systems in the 1980s-90s, in addition to SDF?&lt;/p&gt;&#xA;" OwnerUserId="12128" LastActivityDate="2020-05-22T20:42:20.297" Title="What were the Major Public Access Unix Systems Available in the 1980s-90s?" Tags="&lt;history&gt;&lt;unix&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14880" PostTypeId="2" ParentId="14873" CreationDate="2020-05-22T08:29:59.047" Score="5" Body="&lt;p&gt;RAM test was common (even ZX48K had it)... How it works:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;it simply loop through &quot;whole&quot; address space and detects address mirroring and memory bugs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// set system limit&#xA;max_adr=0xFFFF&#xA;// clear memory to zero&#xA;for (adr = 0 ; adr &amp;lt;= max_adr ; adr++) mem[adr] = 0; &#xA;// test memory is zero and set it to 0xAA&#xA;for (adr = 0 ; adr &amp;lt;= max_adr ; adr++) &#xA; {&#xA; if (mem[adr] != 0){ max_adr=adr-1; break; }&#xA; mem[adr] = 0xAA;&#xA; }&#xA;// test memory is 0xAA and set it to 0x55&#xA;for (adr = 0 ; adr &amp;lt;= max_adr ; adr++) &#xA; {&#xA; if (mem[adr] != 0xAA){ max_adr=adr-1; break; }&#xA; mem[adr] = 0x55;&#xA; }&#xA;// test memory is 0x55 and set it to zero&#xA;for (adr = 0 ; adr &amp;lt;= max_adr ; adr++) &#xA; {&#xA; if (mem[adr] != 0x55){ max_adr=adr-1; break; }&#xA; mem[adr] = 0;&#xA; }&#xA;memory_size=max_adr+1;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;this one is using &lt;code&gt;0x00,0xAA,0x55,0x00&lt;/code&gt; pattern. It detects dead buss, wrong data bit (dead cell, shortcut on data bus or address bus). To explain how:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0x00 = 00000000b&#xA;0x55 = 01010101b&#xA;0xAA = 10101010b&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;so if any DB is short cuted you would read different bit pattern... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If mirroring occurs you would read already set memory from previous iterations so the value would be already the same as set by the iteration... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;you can also distinct between individual cases, and even detect which individual cells are bad, which bits are bad etc ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To speed this up usually the whole ram is not tested but instead some block covering whole address space with gaps ...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastActivityDate="2020-05-22T08:29:59.047" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14881" PostTypeId="2" ParentId="14879" CreationDate="2020-05-22T13:28:46.187" Score="3" Body="&lt;p&gt;It wasn't all minicomputers and mainframes.  I worked for a small consulting company in the late 1980s where, typically, four developers at any given time were logged on to the same &lt;em&gt;desktop&lt;/em&gt; Unix box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CPU (Motorola 68020) and main memory were all on a single, full-length ISA card that was plugged in to an IBM PC-AT. The Unix system used the PC as an I/O processor and console, and the terminals on our desks all were connected to an 8-port UART card in another ISA slot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry, but I don't remember any other details (e.g., who made the thing.)&lt;/p&gt;&#xA;" OwnerUserId="588" LastActivityDate="2020-05-22T13:28:46.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14882" PostTypeId="2" ParentId="14873" CreationDate="2020-05-22T15:35:53.837" Score="2" Body="&lt;p&gt;Some machines required dip switches or jumpers.  Some used memory probes.  The Commodore VIC-20 and C64 used a non-destructive memory probe which would read each address, then try storing two distinct values, observe whether they read back, and then rewrite the address with its previously-read value.  Other machines would write all of memory with various patterns and then try to read it back.  I would guess that some machines probably tested every 256th byte or so, rather than scanning everything, since memory won't generally be added or removed in smaller increments than that, but I don't know of any specifics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending upon how a memory system is designed, an approach based on writing and reading back individual locations (as opposed to writing many and then reading back many) may not be reliable.  For example, if someone wanted to design a 2K expander for the VIC-20 to add memory from $2000 to $27FF and didn't have a bunch of surplus 1Kx4 chips lying around, the cheapest way to do that would have been to use a 2Kx8 RAM chip wired to the $2000-$3FFF chip-select; if one did that, then the device would behave as though any write to any of the addresses e.g. $2000, $2800, $3000, or $3800, would simultaneously write all of them, and likewise $2001, $2801, $3001, or $3801, etc. but the startup memory test would think that all of the memory up to $3FFF was usable.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-05-22T15:35:53.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14883" PostTypeId="2" ParentId="14879" CreationDate="2020-05-22T16:12:56.787" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Back in the 1980s-90s, using a UNIX system required running expensive servers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I went to computing exhibitions from the mid 80s to early 90s. There were multiple vendors offering multiuser Unix systems with VDUs sharing a Motorola 680xx-based server, usually offered with some office automation package. These were cheaper than a DEC PDP-11 office automation system I was asked to cost up. (I established the cost, we all had a good laugh and I was tasked with buying my first two IBM PCs.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also in the 80s I set up an IBM PC-based Unix system. (An actual 8088 IBM PC, not an AT or later.) Unix was supplied on a large number of 360 KiB floppies for the base and optional packages. So cheapish, but not very convenient. Rather different from downloading a Linux ISO image today.&lt;/p&gt;&#xA;" OwnerUserId="9177" LastEditorUserId="9177" LastEditDate="2020-05-22T20:42:20.297" LastActivityDate="2020-05-22T20:42:20.297" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14884" PostTypeId="2" ParentId="14873" CreationDate="2020-05-22T16:19:16.647" Score="15" Body="&lt;p&gt;(I was waiting Raffzahn to write an authoritative answer, but he hasn't yet, so I will write it myself.)&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;In General&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Unless noted, sources are the &lt;a href=&quot;https://vintageapple.org/inside_o/pdf/Guide_to_Macintosh_Family_Hardware_2nd_Edition_1990.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Guide to Macintosh Family Hardware&lt;/em&gt;, 2nd edition, 1990&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;680x0 processors expect the reset and exception vectors to reside in low memory (addresses 0x000000 to 0x0003ff).  During normal operation, all Macs mapped RAM to these locations, to allow software to install their own exception handlers.  However, during early startup the ROM needs to be mapped to this address range, to allow the correct reset routine to be executed.  Each model of Mac had logic to handle this in one of its custom logic chips; on the early Macs, it was usually the audio chip.  This chip also generated the &lt;code&gt;/RESET&lt;/code&gt; signal which reset the processor and peripherals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Executed from ROM, the reset routine configures hardware registers for that particular Mac model.  Some models also perform (unspecified) diagnostics on hardware.  It then performs a memory test.  Apple did not document exactly what happens during this test, but it probably is similar to what is described in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14880/10260&quot;&gt;Spectre's answer&lt;/a&gt;.  This ensures that the RAM will retain values (which will not happen if no RAM is installed!) and that address and data bus lines are not shorted together.  By writing different values to various regions of memory, it is possible to determine if those regions of memory are unique versus the same memory aliased to different addresses; it seems that this technique was used in later Mac models to determine memory size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should the RAM test fail, the Mac made a beep or car-crash sound.  It could not display the Sad Mac in this case, as video depended on having RAM!  Nor were any subroutines called through this point, because that also depends on having RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the RAM test succeeded, then global tables and variables are initialized in the bottom of the RAM.  The exception vectors are copied from ROM, and RAM is mapped back to low memory.  The startup parameters are copied from PRAM, and the operating system &quot;managers&quot; are initialized.  A &quot;happy&quot; chime is played.  Initialization then proceeds to step 2 described &lt;a href=&quot;https://developer.apple.com/library/archive/documentation/mac/OSUtilities/OSUtilities-189.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;; expansion hardware is initialized, video devices are started, and the operating system is loaded from a boot volume.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Macintosh 128K, 512K, 512K enhanced&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The earliest Macs had a fixed amount of memory, which was not upgradable.  Apple's documentation for these models &lt;em&gt;notably does not&lt;/em&gt; mention measuring the amount of RAM.  Therefore, I believe that the amount of RAM was simply hardcoded into the ROM.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Next, &lt;strong&gt;a memory test&lt;/strong&gt; and several other system tests take place. After the system is fully tested and initialized, the software clears the VIA's overlay bit, mapping the system RAM back where it belongs, starting at address 0. Then the disk startup process begins.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;http://www.weihenstephan.org/~michaste/pagetable/mac/Inside_Macintosh.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Inside Macintosh: Volume III&lt;/em&gt;&lt;/a&gt;, p. III-42&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;Macintosh Plus and SE&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The second generation of Macs had four SIMM slots for RAM.  Because the data bus is 16 bits, SIMMs were required to be installed in pairs.  The size of each pair of SIMMs were indicated by the presence or absence of a 150 ohm resistor.  (Later SE models replaced the resistors with jumpers.)  It's unclear whether the startup code used the memory test versus reading the resistors to determine the memory size.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Each time you turn on the Macintosh Plus or SE, system software &lt;strong&gt;does a memory test and determines how much RAM is installed&lt;/strong&gt; in the machine.  Software stores this information in the global variable &lt;code&gt;MemTop&lt;/code&gt;, which contains the address (plus 1) of the last byte in RAM.  Because the range of addresses in each SIMM row depends on the size of the DRAMs in the SIMM, the general logic circuits use the SIMM resistors or jumper to determine which row to access for each address range.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;em&gt;Guide to Macintosh Family Hardware&lt;/em&gt;, p. 201&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;Macintosh Portable&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Mac_Portable&quot; rel=&quot;noreferrer&quot;&gt;Mac Portable&lt;/a&gt; had SRAM instead of DRAM, as the refresh cycles needed by the latter would have quickly drained the battery.  There was 1 Mb built into the main board plus a RAM expansion connector for up to 8 Mb, allowing some unusual amounts of total RAM: 1, 2, 5, or 9 Mb.  As there are neither jumpers nor signals on the expansion connector to designate the amount of memory, it must be determined dynamically by the reset routine.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Each time you turn on the Macintosh Portable (that is, when the battery is recharged after being completely discharged, or a new battery is installed), system software &lt;strong&gt;does a memory test, then determines how much RAM is installed&lt;/strong&gt; in the machine.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;p. 205&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;Macintosh II and SE/30&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;These models had 8 SIMM slots.  Because the data bus was 32 bits wide, SIMMs had to be used in banks of four identically-sized SIMMs.  Bank B must not be larger than bank A.  There are no jumpers or signals on the connectors to indicate size, so it is determined by the reset routine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The startup sequence of these models isn't as well documented as previous models.  This is probably because they came with lots of expansion options, including cache slots, SIMMs, and NuBus slots, so the boot sequence is highly variable.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-05-22T16:19:16.647" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14885" PostTypeId="2" ParentId="14879" CreationDate="2020-05-22T18:41:12.620" Score="7" Body="&lt;p&gt;There's actually pretty good information on the state of public access Unix systems in 80's and 90's in the form the &quot;nixpub&quot; list that was distributed on Usenet and other places. The &lt;a href=&quot;https://raw.githubusercontent.com/cwmccabe/pubnixhist/master/nixpub/1987-11-22-long&quot; rel=&quot;noreferrer&quot;&gt;earliest version I could find is from November 1987&lt;/a&gt; and listed 35 sites:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;11/22     206-863-0453   *        Sumner      WA  12             24&#xA;  Tandy 6000 - XENIX  * Micro Magic BBS Fee $30/yr $5 setup shell access&#xA;  multiple lines 863-0454/5/6&#xA;&#xA;11/22     618-277-6417  herky     ?           IL  3/12/24        24&#xA;  386 - SCO Xenix - no fee 60 min. XBBS&#xA;&#xA;11/21     714-894-2246  stanton   Irvine      CA  12/24          24&#xA;  286 - SCO Xenix - donation requested, XBBS, limit 240 min, XBBS&#xA;&#xA;11/04     314-947-0895  slacbbs   St. Louis   MO  3/12           24 &#xA;  286 - SCO XENIX - no fee 60 min. - XBBS - LOGIN: bbs, shell access to&#xA;  qualified REGULAR users&#xA;&#xA;11/02     215-275-2429  prapc-1   Norristown  PA  12             24&#xA;  286 - Coherent sys7, no fee, 60 min, UNaXcess BBS, shell access, bbs&#xA;  login : fhbbs (Far Horizons BBS)&#xA;&#xA;11/01     212-420-0527  magpie    NYC         NY  3/12/24        24&#xA;  ? - UNIX SYSV - 2, Magpie BBS, no fee, Authors: Magpie/UNIX,/MSDOS&#xA;&#xA;10/09     812-334-8453  cguild    Bloomington IN  12             24&#xA;  286 - SCO-XENIX V2.2.1, xbbs, also 812-334-8465&#xA;&#xA;10/09     713-334-1204  nuchat    Houston     TX  3/12/24        24&#xA;  286 - Mport USENET, mail, shell access available 120 meg &#xA;&#xA;10/06     714-662-7450  turnkey   Southern    CA  12/24          24&#xA;  286 - Xenix SYSV, XBBS&#xA;&#xA;10/04     312-833-8126  vpnet     Villa Park  IL   3/12          24&#xA;  3B1 UNIX Sys ?, no fee, shell access, AKCS/ERACS BBS&#xA;&#xA;10/30     212-675-7059  marob     NYC         NY   12/24         24&#xA;  286 SCO-XENIX 2.2, XBBS&#xA;&#xA;10/31     814-333-6728  sir-alan  Meadville   PA   3/12/24       24&#xA;  Tandy XENIX/68000 03.01.02, Allegheny College, UNaXcess BBS, anon ftp&#xA;&#xA;09/24     313-623-6309  nucleus   Clarkston   MI   12/24         24&#xA;  286 - UNIX SYS V, donation requested, AKCS/ERACS BBS&#xA;&#xA;09/03     216-781-6201  ncoast    Cleveland   OH   3/12/24       24&#xA;  PLEXSUS, no fee, donation requested -&amp;gt; $2.00/hr prime, $1.00/hr non-prime&#xA;&#xA;08/31     206-367-3837  eskimo    Seattle     WA   3/12          24 &#xA;  Tandy-6000 XENIX, 8 lines, fee $1/mo, 1st 2 weeks free&#xA;&#xA;10/18     217-529-3223  pallas    Springfield IL   3/12/24       24&#xA;  Convrgnt Minifrme, multiple lines, 200 meg Minnie bbs $25 donation&#xA;&#xA;08/30     312-283-0559  chinet    Chicago     IL   3/12/24       24&#xA;  3b2/300 - SYS V 3.1, multiple lines, Picospan BBS, fee $50/yr for usenet&#xA;  access and other than public lines&#xA;&#xA;BBS DOWN  403-295-2541  xenlink   Calgary     AB   3/12/24       24&#xA;  286 - SCO -XENIX, no fee, Term BBS, shell access, login bbs&#xA;&#xA;10/28     408-725-0561  portal    Cupertino   CA   3/12          24&#xA;  Networked Suns (SunOS), multiple lines (some at 2400 bps), Telenet access,&#xA;  fees: $10/month + Telenet charges (if used) @ various rates/times&#xA;  conferencing, multi user chats, usenet, no shell access &#xA;&#xA;08/29     415-332-6106  well      Sausalito   CA   3/12          24&#xA;  VAX 750 - BSD 4.2, multiple lines, Telenet access, Picospan bbs&#xA;  fees: $8/month, $3/hour direct, Telenet $20/$4 hour (peak/off peak)&#xA;&#xA;08/28     214-824-7881  killer    Dallas      TX   3/12/24       24&#xA;  3b2/400 - UNIX, no fee, various time limits, 4 lines 860 meg online&#xA;&#xA;08/28     312-566-8909  ddsw1     Mundelein   IL   3/12          24&#xA;  286 - Mport guest usr 1 hr daily, fee extends use, ERACS/UX bbs&#xA;    2400 bps for contributors($) on 312-566-8911/12 Authors of ERACS/UX bbs&#xA;&#xA;10/23     312-272-5912  igloo     ??          IL   12         unknown&#xA;  PC7300 - UNIX limits unstated PicoSpan conference system&#xA;&#xA;08/23    201-752-2820   unirot    ??          NJ    12        unknown&#xA;  Heurikon - Unisoft SYS V, fee status unknown AKA Soup Kitchen&#xA;&#xA;08/23    714-635-2863   dhw68k    Anaheim     CA    3/12/24      24 &#xA;  Unistride 2.1, fee status unknown, avoid 0200-0700 hrs local time&#xA;&#xA;08/23    212-879-9031   dasys1    NYC         NY    12        unknown&#xA;  Unistride - SYS V, multiple lines, fee $5/mo  AKA Big Electric Cat&#xA;&#xA;08/22    714-842-5851   conexch   Santa Anna  CA  3/12/24        24&#xA;  XENIX  714-842-6348 (bbs) - 3/12 various limits fee $25/quarter XBBS&#xA;&#xA;10/30    714-828-0288   alphacm   Southern    CA   12/24         24&#xA;  286 - SCO-XENIX no fee, 60 minute per login, 4 lines, XBBS&#xA;&#xA;08/02    301-540-3656-9 netsys    Germantown  MD   12        unknown&#xA;  ALTOS 986(2) - Xenix, networked 240 meg, fee $5/mo  &#xA;&#xA;10/06     619-444-7006  pnet01    El Cajon    CA   3/12/24       24&#xA;   BSD Unix, 3 lines, contributions requested, login: pnet id: new&#xA;   some USENET, net email, multi-thread conferencing.  Home of&#xA;   P-Net software, mail to crash!bblue or pnet01!bblue for info.&#xA;&#xA;07/22     213-376-5714  pnet02    Redondo Bch CA   3/12/24       24&#xA;   XENIX (also 213-374-7404) no fee, 90 min limit, login: pnet id: new&#xA;   some USENET, net-work e-mail, multi-threaded conferencing&#xA;&#xA;DOWN      213-459-7231  stb   Sta Monica  CA   3/12/24       24&#xA;   Tandy 16 no limits, no fee, Serial Tree bbs (home made), shell access&#xA;&#xA;10/31     305-584-4440  pinn      Ft. Laud.   FL   3/12/24       24&#xA;  IBM AT - Microport  SYS V, multiple lines, fee $12/yr MAGIC BBS&#xA;&#xA;07/12     303-632-4111  chariot   Colo Sprgs  CO   3/12          24&#xA;  Convrgnt Minifrme - SYS V, multiple lines, fee $12/mo Picospan&#xA;&#xA;07/11     313-994-6333  m-net     Ann Arbor   MI   3/12          24&#xA;  Altos 68020 - SYS III, limits unstated, fee for extended service&#xA;  Picospan conference system, multiple lines, 160 meg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see most of these sites ran some flavour of Xenix.  Very few seem to have been using &quot;expensive servers&quot;.  Most are running on PCs, a few are running on workstations like the &lt;a href=&quot;https://en.wikipedia.org/wiki/3B_series_computers#3B2&quot; rel=&quot;noreferrer&quot;&gt;AT&amp;amp;T 3B2&lt;/a&gt; that were obsolete at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to see more, a user by the name of &quot;C.McCabe&quot; has uploaded a number of &lt;a href=&quot;https://github.com/cwmccabe/pubnixhist/tree/master/nixpub&quot; rel=&quot;noreferrer&quot;&gt;old nixpub posts to Github&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Despite your claim that SDF Public Access UNIX was the most influential system, it was a late comer to the world of public access Unix.  By the time SDF switched to Unix in 1990 the nixpub list had grown to over 100 entries.  A much better candidate for most influential would be the &lt;a href=&quot;https://www.vice.com/en_us/article/qvwayd/cleveland-free-net-the-cheap-way-dial-up-users-got-online&quot; rel=&quot;noreferrer&quot;&gt;Cleveland Free-Net&lt;/a&gt; which spawned a large number of other &lt;a href=&quot;https://en.wikipedia.org/wiki/Free-net&quot; rel=&quot;noreferrer&quot;&gt;Free-nets&lt;/a&gt; in the 90's, some of which are still operating, like the &lt;a href=&quot;https://en.wikipedia.org/wiki/National_Capital_Freenet&quot; rel=&quot;noreferrer&quot;&gt;National Capital Freenet&lt;/a&gt;.  (Although I'm not sure if Cleveland Free-Net ever offered Unix shell access like the other Free-nets, it did however run on a AT&amp;amp;T 3B2/400 in it's early days.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other possible contenders for &quot;big&quot; early public Unix systems are &lt;a href=&quot;http://www.trygve.com/nyx.html&quot; rel=&quot;noreferrer&quot;&gt;Nyx&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Panix_(ISP)&quot; rel=&quot;noreferrer&quot;&gt;PANIX&lt;/a&gt; both predating SDF's switch to Unix.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2020-05-22T18:50:43.057" LastActivityDate="2020-05-22T18:50:43.057" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14886" PostTypeId="1" CreationDate="2020-05-22T18:09:21.630" Score="7" ViewCount="608" Body="&lt;p&gt;I purchased a vintage Apple IIc computer and I want to make sure there are no failing components. I booted up the computer while pressing both Apple keys (open and close) at the same time. The computer went into the self-test mode:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WrvpS.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WrvpS.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this test has been running for more than 2 hours now. It has been decades since I have used one of these machines, so I am not sure if this is to be expected, or if the long run time is an indication of some issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know how long this test should run?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, do I need to have a blank floppy disk in the internal drive in order for it to test the drive as well?&lt;/p&gt;&#xA;" OwnerUserId="262" OwnerDisplayName="Swisher Sweet" LastEditorUserId="3290" LastEditDate="2020-05-23T02:33:40.433" LastActivityDate="2021-04-27T06:14:00.967" Title="How long should I expect the Apple IIc self test to run?" Tags="&lt;apple-ii&gt;&lt;floppy-drive&gt;&lt;testing&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14887" PostTypeId="1" AcceptedAnswerId="14892" CreationDate="2020-05-22T19:34:44.517" Score="4" ViewCount="742" Body="&lt;p&gt;I just picked up a used Apple IIc. For some reason all I get when I boot is &lt;code&gt;Check Disk Drive&lt;/code&gt; on the screen, even with a bootable disk in the internal drive:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3s17K.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3s17K.jpg&quot; alt=&quot;display showing &amp;quot;check disk drive&amp;quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot even get the system to read the external drive when powering on, so I assume I will have to tell the system to boot from the external drive once booting into BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know how I might boot into BASIC and what command I need to run to load software from the external floppy drive?&lt;/p&gt;&#xA;" OwnerUserId="262" LastEditorUserId="3290" LastEditDate="2020-05-23T02:36:45.917" LastActivityDate="2020-05-23T15:02:44.950" Title="How to get into Apple BASIC prompt on an Apple IIc?" Tags="&lt;apple-ii&gt;&lt;boot&gt;&lt;floppy-drive&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14888" PostTypeId="2" ParentId="14887" CreationDate="2020-05-23T00:06:04.477" Score="4" Body="&lt;p&gt;Simply press &lt;KBD&gt;RESET&lt;/KBD&gt; (depending on model and setting you might have to hold down &lt;KBD&gt;CTRL&lt;/KBD&gt; or &lt;KBD&gt;Open-Apple&lt;/KBD&gt;+&lt;KBD&gt;CTRL&lt;/KBD&gt; before pressing &lt;KBD&gt;RESET&lt;/KBD&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will bring you into default APPLESOFT BASIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just, BASIC does not contain any disk commands - unless DOS is loaded from floppy - which pressing Reset will abort :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only function available is to boot from a controller by typung &lt;KBD&gt;P&lt;/KBD&gt;&lt;KBD&gt;R&lt;/KBD&gt;&lt;KBD&gt;#&lt;/KBD&gt;&lt;KBD&gt;6&lt;/KBD&gt;&lt;KBD&gt;RETURN&lt;/KBD&gt; - which I'd assume won't work either.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-23T15:02:44.950" LastActivityDate="2020-05-23T15:02:44.950" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14889" PostTypeId="2" ParentId="14886" CreationDate="2020-05-23T00:18:46.770" Score="4" Body="&lt;p&gt;Not all IIc models do have the self test ROM. But if they do, it for sure doesn't run for hours. The most reliable way to invoke it is from reset.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Power on&lt;/li&gt;&#xA;&lt;li&gt;Hold down &lt;KBD&gt;Open-Apple&lt;/KBD&gt;+&lt;KBD&gt;CTRL&lt;/KBD&gt; and then press &lt;KBD&gt;RESET&lt;/KBD&gt;&lt;/li&gt;&#xA;&lt;li&gt;Release&lt;/li&gt;&#xA;&lt;li&gt;Wait for a &lt;code&gt;]&lt;/code&gt; to show up as BASIC prompt&lt;/li&gt;&#xA;&lt;li&gt;Hold down &lt;KBD&gt;Open-Apple&lt;/KBD&gt;+&lt;KBD&gt;Closed-Apple&lt;/KBD&gt;+&lt;KBD&gt;CTRL&lt;/KBD&gt; and then press &lt;KBD&gt;RESET&lt;/KBD&gt;&lt;/li&gt;&#xA;&lt;li&gt;Release the &lt;KBD&gt;RESET&lt;/KBD&gt; key&lt;/li&gt;&#xA;&lt;li&gt;Release the rest&lt;/li&gt;&#xA;&lt;li&gt;Now self-test should kick in&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-23T15:01:23.743" LastActivityDate="2020-05-23T15:01:23.743" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14890" PostTypeId="1" AcceptedAnswerId="14893" CreationDate="2020-05-23T03:42:48.623" Score="40" ViewCount="9685" Body="&lt;p&gt;My friend told me that earlier iterations of the Pentium 4 were not as fast as the Pentium III, but he didn't have sources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it true that the Pentium III was faster than its successor Pentium 4?&lt;/p&gt;&#xA;" OwnerUserId="18223" LastEditorUserId="637" LastEditDate="2020-05-24T01:06:28.437" LastActivityDate="2020-05-24T16:34:31.753" Title="Is it true that Pentium III was faster than its successor Pentium 4?" Tags="&lt;intel&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14891" PostTypeId="2" ParentId="14890" CreationDate="2020-05-23T06:07:39.733" Score="24" Body="&lt;p&gt;The very earliest, slowest-clocked, Pentium 4 chips were slower than the fastest Pentium IIIs of the time. The PIII was available at 1GHz when the Pentium 4 was introduced, and a 1.5GHz P4 was about the same practical speed: it varied a bit, according to what you were running. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the P4 was also available in 1.3GHz and 1.4GHz clock-speeds, and those were definitely slower than a 1GHz PIII. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get the best out of a P4, you had to compile specifically for it, using the SSE2 floating-point instructions, and a compiler that generated P4-optimized code sequences. This would not make a 1.5GHz P4 as fast as a hypothetical 1.5GHz PIII, but it did improve performance. In the case of the software I was working on, it added about 25% to throughput. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: Benchmarking new P4 chips at the time, and having to port the product I was working on to Intel's C/C++ compiler to use SSE2. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2020-05-23T10:42:16.250" LastActivityDate="2020-05-23T10:42:16.250" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14892" PostTypeId="2" ParentId="14887" CreationDate="2020-05-23T06:41:58.360" Score="7" Body="&lt;p&gt;Press: &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Reset&lt;/kbd&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This should get you to the Applesoft BASIC prompt, with a checkerboard cursor:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;]▩&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you don't see that then something is wrong. Otherwise you can check your ROM version:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;]?PEEK(64447)&#xA;255&#xA;&#xA;]▩&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;ROM version 255 can supposedly boot the external drive (though I've never tried this personally) but some disks might not boot correctly. You can try with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;]PR#7&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;ROM versions 0, 3, and 4 need to boot the internal drive first (as PR#7 does something else) then the external drive can be accessed as drive 2.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;]CATALOG,D2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="71" LastActivityDate="2020-05-23T06:41:58.360" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14893" PostTypeId="2" ParentId="14890" CreationDate="2020-05-23T06:51:32.587" Score="45" Body="&lt;p&gt;Clock to clock Tualatin Pentium 3 was a lot faster (i.e. a P3 got more done in each clock cycle than a P4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;High-end Pentium 3 is available at 1.4 GHz while low-end Pentium 4 is 1.5 GHz so if you compare these extremes P3 is the clear winner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as time went on, Northwood Pentium 4 1.8 GHz plus DDR 266 memory became common quickly while Intel constrained Tualatin P3 in the Celeron form with SDR SDRAM so in the field most P4 computers were faster than most P3 computers. High-frequency Pentium 3 was never widely available and its 133MHz FSB speed starts to show its limitations when facing DDR and RAMBUS. But early adopters of Socket 423 1.5GHz Pentium 4 and SDR SDRAM clearly made a mistake: high cost, bad performance, excessive power consumption and heat, and no viable upgrade path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ironically P3 continued to haunt P4 through its entire lifetime: around the middle, Intel revived P3 in the form of Pentium M for mobile with good results, and so much so that, in the end, Intel brought it to the desktop in the form of Core Solo / Core Duo to end the P4 era entirely. In fact, even before that, motherboard OEMs had made boards with mobile CPUs that beat both the desktop offerings from AMD and Intel when properly overclocked.&lt;/p&gt;&#xA;" OwnerUserId="5205" LastEditorUserId="16497" LastEditDate="2020-05-24T05:12:53.440" LastActivityDate="2020-05-24T05:12:53.440" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="14894" PostTypeId="2" ParentId="14886" CreationDate="2020-05-23T07:12:11.630" Score="6" Body="&lt;p&gt;34 seconds or forever, depending on the ROM version. (&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14892/71&quot;&gt;Find your version here&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;You can start the self-test at any time with: &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Open Apple&lt;/kbd&gt;+&lt;kbd&gt;Closed Apple&lt;/kbd&gt;+&lt;kbd&gt;Reset&lt;/kbd&gt;&lt;/p&gt;&#xA;&lt;p&gt;The ROM 255 self-test is a &amp;quot;&lt;a href=&quot;https://archive.org/details/Apple_IIc_Reference_Manual_The_Volume_2_1994_Apple/page/n171/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;memory and soft switch exercise program&lt;/a&gt;&amp;quot; that will appear to hang (forever) on a screen of garbage. Here is one of the various results I got using the &lt;a href=&quot;https://www.mamedev.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MAME&lt;/a&gt; emulator. It looks similar to your screen:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Kqp1d.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Kqp1d.png&quot; alt=&quot;Apple IIc screen of &amp;quot;garbage&amp;quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For the other ROM versions the self-tests complete in around 34 seconds and show &amp;quot;System OK&amp;quot; if there's no problem, or diagnostic information otherwise. I tested them all with MAME:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;| Machine           | ?PEEK(64447) | Self Test | Time | OK Result |&#xA;|-------------------|--------------|-----------|------|-----------|&#xA;| Apple //c ROM 255 | 255          | No        | N/A  | N/A       |&#xA;| Apple //c ROM 0   | 0            | Yes       | 34s  | System OK |&#xA;| Apple //c ROM 3   | 3            | Yes       | 34s  | System OK |&#xA;| Apple //c ROM 4   | 4            | Yes       | 34s  | System OK |&#xA;| Apple //c Plus    | 5            | Yes       | 34s  | System OK |&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The self-test doesn't test any disk drive functionality.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2021-04-27T06:14:00.967" LastActivityDate="2021-04-27T06:14:00.967" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14895" PostTypeId="2" ParentId="14890" CreationDate="2020-05-23T14:42:16.403" Score="15" Body="&lt;p&gt;The answer is &lt;em&gt;sort of&lt;/em&gt;. Intel also went with a different memory subsystem, RDRAM, which had a big influence on system performance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll be basing my answer on the &lt;a href=&quot;https://www.anandtech.com/show/661&quot; rel=&quot;noreferrer&quot;&gt;AnandTech review&lt;/a&gt; of the Pentium III vs Pentium 4 vs AMD Thunderbird.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's start out by looking at performance in a popular game of the time, Quake III Arena. You can see the Pentium 4 is the clear performance leader, but notice that the chips run at 1.4 and 1.5GHz, compared to just 1GHz of the Pentium III. The Pentium 4 is around 25% faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gFVS3.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gFVS3.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next we'll look at another game, Expendable, and you'll notice the Pentium 4 is now the slowest in the test! This is due to the way this application uses memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nd1D5.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nd1D5.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SSE2 instructions were also introduced which gave the Pentium 4 a performance boost, in certain tasks. If you had an application that made heavy use of these, such as media encoding, certain photoshop filters, you could see a big jump in performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All in all, the new Pentium 4 systems had the ability to be much faster than the Pentium III in certain tasks, but in some cases it performed similar, or even worse. And clock for clock, the CPU itself was generally a worse performer. &lt;/p&gt;&#xA;" OwnerUserId="18227" LastActivityDate="2020-05-23T14:42:16.403" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14896" PostTypeId="2" ParentId="14890" CreationDate="2020-05-23T14:42:33.590" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it true that the Pentium III was faster than its successor Pentium IV?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes and no. As usual it all depends on the time to look at, but also what is defined as 'fast'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MHz vs. Throughput vs. Bang per Buck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the MHz game (*1) the Netburst (Pentium 4) design clearly outran the P6 (Pentium II/III; *2). In throughput it was much like with every new design. The fastest models of the previous design were faster than the lower end models of the actual one - especially when the 'old' design continued development (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the first Pentium 4 model (Wilamette), was introduced in late 2000 as 1.3 and 1.4 MHz, the fastest Pentium III was a Coppermine with 1.100/1.133 GHz (100/133 MHz FSB). While it featured a higher MHz number (good for advertisement) its performance was significantly lower - at best some two-thirds of the Pentium III. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But less than 10 months later, in summer 2001 Willamette-based Pentium 4s reached 2 GHz, outrunning all Pentium IIIs at the time. In January 2002 the new Northwood core debuted at 1.6 - 2.26 GHz, cranking up to 3+ GHz until summer of 2002. Those were regions even the improved Pentium III (Tualatin) with 1.1 ... 1.4 GHz could not compete with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition there's the difference in floating point. The Pentium 4 not only introduced SSE2, but more importantly redid the whole floating point architecture resulting in a much higher performance ... except, 2000s games weren't as floating point hungry as today. This is best seen on 3D games of the time - the ones that could still operate without 3D acceleration on the graphics card. So again, YMMV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, what the Pentium III really could compete on was performance per money. The continued Pentium III line was set at a considerably lower price. So if one really wanted an Intel CPU (*4) the Pentium III series would offer a better price/performance ratio. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, depending on the viewpoint, but always comparing the top models at each time:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Pentium 4 was slower MHz-for-MHz comparison&lt;/li&gt;&#xA;&lt;li&gt;The Pentium 4 delivered less punch per Euro&lt;/li&gt;&#xA;&lt;li&gt;The Pentium 4 was absolutely faster than the Pentium III&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Bottom Line: &lt;strong&gt;It's rather unfair to claim the PIII being faster without adding the moment in time and criteria to be used.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - The Netburst architecture was in part selected as follow up because it promised high MHz numbers, which would look good in sales. At the end of the 90s Intel was &lt;em&gt;in the desktop market&lt;/em&gt; and more importantly &lt;em&gt;in public view&lt;/em&gt; outclassed by AMD CPUs (K6/K7). This image was mostly communicated by Megahertz numbers. After all, Intel did run behind not only at throughput per MHz but as well on absolute MHz numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other reason was to go the way AMD has shown - turning the classic P6 architecture into a outer shell for a RISC core. After all, AMD did show since K5/K6 times how much better this worked out. So the Pentium 4 was an all-in game. And it worked ... well, in part, as they could only close the gap but not overtake. AMD upped the bar in addition with x86-64 and multiple cores.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Pentium II and III are essentially the same design. The renaming was more of a marketing measure to present it as something new, freeing the image of previous less-than-perfect performance :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Already the original Pentium was a slow sell. A 60 MHz P5 wasn't really faster than a 486 DX4-100. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - No gamer in his right mind in the early 2000s would buy an Intel CPU. They were a simple no-go. An Athlon XP delivered better performance than a Pentium 4 at a lower price, even more so the later Athlon 64. It wasn't until the Core 2 in the late naughties that Intel became competitive again.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="10678" LastEditDate="2020-05-24T16:34:31.753" LastActivityDate="2020-05-24T16:34:31.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14898" PostTypeId="2" ParentId="11011" CreationDate="2020-05-24T04:53:35.683" Score="4" Body="&lt;p&gt;The simplest way to get going with BASIC09 would be to get the &lt;a href=&quot;http://www.lcurtisboyle.com/nitros9/nitros9.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;NitrOS-9 &quot;ease of use&quot; edition&lt;/a&gt;. Then if you have a CoCo 3 with 512K RAM and a CoCo SDC (which lets you keep disk images on an SD card), or have MAME or the VCC emulator set up to emulate a CoCo 3. (On the off chance that you have a Matchbox CoCo, an FPGA-based system that Roger Taylor has created, there's a version for it, too, thanks to the work of Bill Nobel, but for now, the CoCo 3 with CoCo SDCand those two emulators are the supported setups.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About BASIC09 vs. tokenized BASICs of that era (almost all Microsoft-based, ultimately going back to Altair BASIC): the extreme memory constraints of Altair BASIC (by default the Altair came with 1K of RAM; the first Altair BASIC version needed 4K) forced some design decisions that MS stayed with for a long time, at a catastrophic cost in runtime. There's a series of books, starting with &lt;em&gt;Color BASIC Unravelled&lt;/em&gt;, that have a disassembly of the various versions of BASIC that run on the CoCo. (Also, MS has just now opened the source of GW-BASIC, which I think still has the same basic, you should pardon the expression, structure.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tokenized MS BASICs of the time make almost no changes to the source code as you type it or load it; lines are put in a singly-linked list with the line numbers stored as two-byte integers. Language keywords are converted to one-byte codes and built-in function names to two-byte codes, but that's it. As lines are interpreted, variable names are looked up by linear search through a symbol table that only keeps the first two characters of variable names (and new entries made when the lookup fails). &lt;em&gt;Every single time&lt;/em&gt; a line is interpreted, constants are reconverted from text form to internal format, expressions are reparsed for evaluation. Every GOTO or GOSUB forces a linear search of the statements (though if the number is greater than that of the current line, at least it doesn't have to start from the beginning).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this means that tokenized BASIC programs of any size fall victim to coding practices that try to reduce the enormous overhead of interpretation at an dire cost in legibility and maintainability. Look at any Color BASIC listing in any Color Computer magazine and you'll see the results:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;statements crammed together to fit as many as possible on each line&lt;/li&gt;&#xA;&lt;li&gt;gratuitous references to frequently-used variables at the beginning of the program to force them to appear earlier in the symbol table&lt;/li&gt;&#xA;&lt;li&gt;assigning constants to variables so that they need only be looked up, not reconverted&lt;/li&gt;&#xA;&lt;li&gt;taking advantage of Color BASIC's highly ad hoc parser to omit as many spaces as possible from the source code&lt;/li&gt;&#xA;&lt;li&gt;typing constants in hexadecimal where possible for faster conversion (just imagine F = $20 + $9*C/$5--hey, &lt;em&gt;that's&lt;/em&gt; legible, right?)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;basic09 (BASIC09's text-oriented IDE, in today's jargon), on the other hand, parses code as you enter it, converting it to I-code. I-code is often likened to Pascal P-code or Java byte-code, but in one way it's quite different, because basic09 has to serve two masters: one is the programmer editing, listing, and debugging code, and the other is the programmer running code. If you have a separate compiler, your byte code can, for example, have simple conditional and unconditional branches like typical computer instruction sets. BASIC09 I-code, OTOH, has constructs that correspond to BASIC09 statements and control structures, so it can, by keeping around symbol table information that is not used at runtime, recreate a very close &lt;em&gt;approximation&lt;/em&gt; of the code you enter or load. It's not exact, because&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;constants are converted to internal form, so they may not be exactly what you typed&lt;/li&gt;&#xA;&lt;li&gt;expressions are converted to RPN, and the conversion back to infix form will not include any unnecessary parentheses you may have typed&lt;/li&gt;&#xA;&lt;li&gt;variable, parameter, and procedure names are only stored once in a symbol table, and symbol table lookups are case-independent. If you first type camelCase, and later type CaMeLcAsE or camelcase (in the same procedure), they will all appear as &quot;camelCase&quot; in the listing; all will refer to the same variable or parameter. (That gets rid of the main objection to camelCase, namely having to hit the shift key over and over.)&lt;/li&gt;&#xA;&lt;li&gt;The listing is prettyprinted, with standard formatting and indentation--we're talking almost &lt;em&gt;three decades&lt;/em&gt; before Go's designers created gofmt to get rid of all the bikeshedding and arguments about layout. &lt;strong&gt;Color BASIC rewards illegibility; BASIC09 makes your code legible.&lt;/strong&gt;&#xA;Conversion of source to I-code, along with BASIC09's broader selection of types, means that a BASIC09 program for a given task will almost certainly run much faster than a Color BASIC program for the same task. (I've only seen one exception, which was a very special case for a small benchmark; see &lt;a href=&quot;https://www.facebook.com/notes/james-jones/filling-the-screen-with-text/10156466474367014/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Filling the Screen with Text&quot;&lt;/a&gt;.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You'll notice I said &quot;procedures&quot;. Tokenized BASIC programs of that era are monoliths, &lt;a href=&quot;http://www.laputan.org/mud/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;big balls of mud&quot;&lt;/a&gt; as Foote and Yoder put it. All variables are global (and with only the first two characters significant in variable names, it's very hard not to reuse the same name by mistake). A BASIC09 program, OTOH, is a set of procedures (which can be machine language or compiled code, as long as it follows BASIC09's calling conventions). BASIC09 procedures have local variables and support recursion; breaking a problem down properly can thus not only make code easier to read, but make it use less memory--important when a process can't get to more than 64K of RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this answers your question and also encourages you to check out BASIC09.&lt;/p&gt;&#xA;" OwnerUserId="10246" LastEditorUserId="10246" LastEditDate="2020-05-24T05:27:53.407" LastActivityDate="2020-05-24T05:27:53.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14899" PostTypeId="1" CreationDate="2020-05-24T08:08:31.217" Score="1" ViewCount="179" Body="&lt;p&gt;In &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5634/611&quot;&gt;an answer about screen formats&lt;/a&gt; Raffzahn  wrote:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;In 1920 the Tabulating Machine Company (originally The Hollerith Electric Tabulating System, now part of CTR Holding) introduced a new printer-lister system with 132 columns. While not the first to do so (*8), it became the de facto standard, thus setting the 132 characters for tabulating output - what later evolved into mainframe printers (and everything else meant to produce a ledger output).&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am trying to find evidence that this &quot;new printer-lister system with 132 columns&quot; to which  Raffzahn is referring is the Ticketograph machine acquired by C-T-R in 1921.&lt;/p&gt;&#xA;" OwnerUserId="18236" LastEditorUserId="6659" LastEditDate="2020-05-24T10:43:57.000" LastActivityDate="2020-05-27T07:29:49.563" Title="Is the 1920 CTR Printer-Lister a Ticketograph?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14900" PostTypeId="2" ParentId="8027" CreationDate="2020-05-24T08:24:39.447" Score="0" Body="&lt;p&gt;I actually designed the disk controller and a colour display card for the nascom when in Warwick working for Lucas logic.&lt;/p&gt;&#xA;" OwnerUserId="18237" LastActivityDate="2020-05-24T08:24:39.447" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14901" PostTypeId="2" ParentId="11011" CreationDate="2020-05-24T10:18:39.730" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The manual talks about it being a compiler, but I'm not sure I see significant differences between its I-code and tokenized BASICs in general.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, so called 'tokenized' BASIC isn't really tokenized, but rather put in a shorthand. Tokenization does require to put everything into token format, which isn't true for average BASICs. The term 'crunched' used by Microsoft is far more appropriated here (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BASIC09 did not only turn recognized keywords into single byte identifiers, keeping the rest (constants/variable names) as is, but puts everything into tokens, which &lt;em&gt;is&lt;/em&gt; a virtual machine instruction (*2) as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A variable reference is a token of its type (byte/integer/float/string/complex), followed by the address of its value. Similar constants, but with the value following. So unlike 'standard' basics, the interpreter doesn't has to figure out every time what it's about - no matter how lightweight - but simply executes the token.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far this might look like some sophisticate cruncher, but all operators are as well available in typed version. For example there are&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;two different &lt;code&gt;-&lt;/code&gt; instructions for byte/integer and float&lt;/li&gt;&#xA;&lt;li&gt;three different &lt;code&gt;+&lt;/code&gt; instructions for byte/integer, float and strings&lt;/li&gt;&#xA;&lt;li&gt;four different &lt;code&gt;=&lt;/code&gt; instructions for byte/integer, float, strings and bool&lt;/li&gt;&#xA;&lt;li&gt;four different &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt; instructions for byte/integer, float, strings and bool&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and so on. Depending on operand types used in an expression BASIC09 will compile the appropriate instruction. This extends to whole BASIC instructions aswell, as there are for example two &lt;code&gt;NEXT&lt;/code&gt; instructions for the VM, one that accepts an integer coutner variable and one for float. The later ofc slower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, all expressions are turned into RPN. For example an IF statement will look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Made arbitrary complex on purpose)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IF MID$(Input$,Pos,1)=&quot;\&quot; AND Found=0 THEN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;is compiled to&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;lt;IF&gt;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;String-Var&gt; address of &lt;em&gt;Input$&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;Integer-Var&gt; address of &lt;em&gt;Pos&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;Byte-Const&gt; value &lt;em&gt;1&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;MID$&gt; &lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;String-Const&gt; value &lt;em&gt;&quot;\&quot;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;String Comparison Operator '='&gt; &lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;Integer-Var&gt; address of &lt;em&gt;Found&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;Byte-Const&gt; value &lt;em&gt;0&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;Integer/Byte Comparison Operator '='&gt;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;OR&gt;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;Invisible Goto&gt; address of ELSE/ENDIF&lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;THEN&gt;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;End of Line&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's quite clear to see that a stack machine is operating along the instruction stream of an expression.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;lt;End of Line&gt; is rather syntactic sugar to insert automatic line breaks (and indentation) when listed, as BASIC09 prefers. Similar all expressions will be 'normalized' and alternate spellings like &lt;code&gt;&amp;gt;&amp;lt;&lt;/code&gt;put into their normal form &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I-Code structure is (naturally) close to BASIC, it does as well show differences. For example the &lt;code&gt;TO&lt;/code&gt; and &lt;code&gt;STEP&lt;/code&gt; parts of a &lt;code&gt;FOR&lt;/code&gt;-&lt;code&gt;NEXT&lt;/code&gt; are (together with the repeated variable reference) compiled to the &lt;code&gt;NEXT&lt;/code&gt; instruction, saving the need to lookup what to examine for end condition and step width. In addition the SEP value will be always compiled as part of the NEXT instruction. As result the FOR statement will only be executed for initialisation. all following iterations will direct jump to the next instruction after &lt;code&gt;FOR&lt;/code&gt; (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I-CODE is not simply crunched (tokenized) BASIC, but consists of instructions toward a virtual machine, which just happens to be very BASIC compatible.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I know you can PACK it, but that seems more like a symbol stripper.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, it that's what &lt;code&gt;PACK&lt;/code&gt; is for. It removes all remaining source reference, like variable names, to save space. In addition it more aggressive optimizes expressions than the interactive interpreter does. After packing a program can only be executed - usually by &lt;code&gt;RUNB&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, OS/9 is a RAM based system and so is BASIC09. &lt;code&gt;BASIC09&lt;/code&gt; (the program) is loaded into memory, thus reducing the RAM available to the user program. &lt;code&gt;RUNB&lt;/code&gt; is essentially just the virtual machine (and BASIC runtime). By replacing &lt;code&gt;BASICC09&lt;/code&gt; with the much smaller &lt;code&gt;RUNB&lt;/code&gt; more RAM was available by essentially dropping the editor, compiler and debugger parts (*3). IIRC &lt;code&gt;BASIC09&lt;/code&gt; was more than 20 KiB, while &lt;code&gt;RUNB&lt;/code&gt; was about half of that. so 10+ KiB more space for a user program is quite a lot.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Yes, BASIC's come in many colours, including some that normalize way more than MS did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - This is not done for &lt;code&gt;WHILE&lt;/code&gt; loops, as they are rejecting structures, unlike &lt;code&gt;FOR&lt;/code&gt; which iterates at least once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - Well, and even more after packing.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-26T22:35:58.013" LastActivityDate="2020-05-26T22:35:58.013" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14902" PostTypeId="2" ParentId="14899" CreationDate="2020-05-24T10:41:07.170" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I am trying to find evidence that this &quot;new printer-lister system with 132 columns&quot; to which Raffzahn is referring is the Ticketograph machine acquired by C-T-R in 1921.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, you won't, as it simply isn't. the Ticketograph is a very special recording/printing device. Essentially a process or program in hardware. A Printer-Lister is a device that can either take records from a tabulator and print them, or read punch cards and print their content. It operates, quite like many printers later, on endless paper, not on production cards (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the first IBM (well, CTR) Printer-Lister (at that time there was no model number, it was just called that) was introduced in 1920, while CTR acquired &lt;em&gt;Pierce Accounting Machine Company&lt;/em&gt; and thus the Ticketograph only a year later in 1921.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Printer-Lister wasn't the first printer used for tabulating and/or listing, but it divided a ledger sized paper into 132 columns. Which the &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5634/611&quot;&gt;original question&lt;/a&gt; was about. It was as well only numeric, as (AFAIK) the alphanumeric printer is a separate and later development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's development as tabulating printer was a gradual, and CTR a late comer. While they had a firm hold in the tabulating market, their equipment still did not print, but 'only' count (add) up on a set of displays (Five for the tabulator CTR sold in 1914), one for each sum. Results were manually recorded. The only preparation was the insertion of Stop-Cards, cards with a specific encoding punched that, when detected, simply halted the card feed. BTW, another patent of Hollerith. While stopped the operator would read all gauges record them, by hand, as subtotal, reseted all counters and restarted the machine. Totals were done by hand. Stop-Cards were interpersed into the stack in intervals the operator did feel fine about. It wasn't an exact science but educated guesswork. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The situation for CTR was much like with any company with a reasonable large market share, its policies stopped being about cutting edge technology and focused on keeping their business as it is. This let other companies come up with improvements from keypuches to printers. One of this companies them was the &lt;a href=&quot;https://en.wikipedia.org/wiki/James_Legrand_Powers&quot; rel=&quot;nofollow noreferrer&quot;&gt;Powers Accounting Machine Company&lt;/a&gt; of New York. Their &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Powers_Automatic_Tabulating_Machine_Model_%22B%22.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;Automatic Tabulating Machine Model B&lt;/a&gt; incooperates eventually the first printer. Except, it didn't print on regular sheets but only a small stripe of endless paper like a cash register (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the 1910s Powers improved thereon on thus became a major competition for CTR. But not as dangerous as one would (today) assume, switching for a printing tabulator wasn't as obvious as it may seam today. Many customers stayed with operators noting the result. After all,that's a classic 90% solution, why invest more. Still, IBM had to react, and during the 1910s the new CEO Watson reacted and did set a team (*3) to create a printing tabulating machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result was the 1920 Tabulator-Printer or Printer-Lister, depending on the configuration, using 132 columns (*4). 132 column is exactly what's needed to print a ledger page - this was another innovative idea of the team, as it enabled the tabulator to directly print the page for be filed (well, after adding the text part by hand or with a tabulator carriage typewriter.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, you asked for references, were it gets hard, as I'm not much inclined to dig thru my books to find them. Except, a first stop - and a must for everyone into early (IBM) Computers - is, well, &lt;em&gt;&quot;IBM's Early Computers&quot;&lt;/em&gt;, MIT-Press, 1986, ISBN 0-262-02225-7. The first half of chapter 1 covers this development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/s0QSrt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/s0QSrt.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another book worth peeking in might be &lt;em&gt;&quot;Punched-Card Systems and the Early Information Explosion 1880–1945&quot;&lt;/em&gt; by Lars Heide, ISBN 978-0801891434. Its third chapter &lt;em&gt;'Challengers to Hollerith'&lt;/em&gt; covers as well some of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then again, with the right keywords I think it should be doable to find pictures of early printing tabulators. Many institutions are proud of their heritage. For example this page shows exactly the &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/tabulator.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;printing-tabulator in question&lt;/a&gt; (Now called Model III) of the &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Columbia University Computing History&lt;/a&gt; shows pictures and descriptions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VU4mL.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VU4mL.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Development of this first printing tabulator cumulated in 1933 with the &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/285.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Type 285&lt;/a&gt; (*5)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AzWTR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AzWTR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(One got to love this contemporary picture :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course some background knowledge is helpful in selecting found sources. To me it's simply stuff I learned. I started my career right when punch cards where about to vanish from every way usage, so I still had to learn it. From the 'old guys' and books like this 1970s beauty:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/U7kSNt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/U7kSNt.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: I still know how to do COBOL, although it has been rarely used lately. So I'm not only curious how you incorporate this information, but it might be as well interesting to see what image of COBOL is presented today. So please put it online and give us a hint when available. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - And a device that would print text on top of a punch card is called an &lt;em&gt;Interpreter&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Also, unlike implied in the Wiki entry, a unit could only print a single counter on its own paper stripe. Additional units could be added. up to a total of 7 printers, the tabulator unit and up to 6 counter/printer extensions (Again the Wiki description is somewhat misleading - and no, I'm not correcting it, I have given up on fighting fan boy hordes on Wiki).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - During development the team did crank out several substantial improvements to CTR's tabulating machines. Two important innovations were added by the team already ahead of the printer:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Group Control&lt;/strong&gt; which replaced the Stop-Card.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Automated Counter Reset&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With Group Control a card was read twice. First time to be tabulated, and a second time in parallel with the next card. This time a selectable set of columns, called 'group indicator' was compared between the cards and the machine halted if they differed. Subtotals (still recorded by hand) did no longer need Stop-Cards, but as well were now no longer taken at random, often meaningless points, but whenever an accounting criteria changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Automatic Counter Reset on the other hand made sure that all counters were zeroed when the machine was restarted - before the operator had to reset each if the counters manually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both inventions were quite essential to IBM's success during the 1920s. And both may seam incredible basic from today's view, but then again, who of us has never forgotten to page at the right moment or clear some variable before reuse?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Not all 132 columns could always be used at a time, but any of the 132 could be configured to be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*5 - At that time IBM had reorganized their naming scheme into 'meaningful' numbers. &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="611" LastEditDate="2020-05-27T07:29:49.563" LastActivityDate="2020-05-27T07:29:49.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14903" PostTypeId="1" AcceptedAnswerId="14908" CreationDate="2020-05-24T13:13:23.477" Score="83" ViewCount="20108" Body="&lt;p&gt;When installing Windows 98, the part of the setup process where you enter things like product details looks... different. The scrollbars, buttons, title bar and such look more like they belong in Windows 3.1 or Windows 3.11, apparently using &quot;ctl3d&quot; style.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SMpPi.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SMpPi.png&quot; alt=&quot;screenshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the &quot;Restarting your computer&quot; step, it looks like the process continues where it left off, except that it now looks like a Windows 98 program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's going on here, exactly? Are these actually two entirely diferent programs made to resemble one another? Why couldn't the first half call the same button-drawing code that the second half uses?&lt;/p&gt;&#xA;" OwnerUserId="18239" LastEditorUserId="15334" LastEditDate="2020-11-06T17:02:06.957" LastActivityDate="2020-11-06T17:02:06.957" Title="Why does part of the Windows 98 Setup program look older than the rest?" Tags="&lt;windows-98&gt;&lt;windows-3.x&gt;&lt;gui&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="14904" PostTypeId="2" ParentId="6492" CreationDate="2020-05-24T13:18:53.823" Score="6" Body="&lt;p&gt;It is&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The first 3 digits are the day of year from 001 - 366&lt;/li&gt;&#xA;&lt;li&gt;The next 2 digits are the year from 95 - 03&lt;/li&gt;&#xA;&lt;li&gt;The next 7 digits must be divisable by 7 but the number must start with a 0&lt;/li&gt;&#xA;&lt;li&gt;The next 5 digits do not matter.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Here's a key using this concept&lt;/p&gt;&#xA;&#xA;&lt;p&gt;20097-OEM-0888888-00000&lt;/p&gt;&#xA;" OwnerUserId="18240" LastEditorUserId="6659" LastEditDate="2020-05-24T13:22:23.017" LastActivityDate="2020-05-24T13:22:23.017" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14905" PostTypeId="2" ParentId="14903" CreationDate="2020-05-24T13:20:52.303" Score="-3" Body="&lt;p&gt;Because the setup doesn't contain either. These dialogues are just make to look it alike regular ones. Keep in mind, it's a setup program, not a full figured system. At that time, no (floppy) disk would hold a whole OS plus setup plus whatever data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets be serious, it was already a great step toward a more user friendly and consistent experience than previous setup versions. Better praise it for trying rather good.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-05-24T13:20:52.303" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14906" PostTypeId="2" ParentId="14903" CreationDate="2020-05-24T14:46:43.903" Score="6" Body="&lt;p&gt;I haven't double-checked, but here's my understanding of how it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first half of the installer is a DOS application, with all the limitations therein and then, once it's installed a base Windows system, it boots into Windows to complete the process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DOS portion doesn't have access to Windows video drivers, so, judging by the color scheme and resolution, it's faking a Windows UI via the same standardized 640x480 16-color VGA mode that Windows 3.1's default video driver uses in order to look friendly and familiar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically the same approach Windows 3.1 and 3.11 used, except that they used text mode for the DOS portion of their installers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; I stand corrected. Apparently it's a three-stage process with a minimal Windows 3.x system in between the text-mode and Windows 9x stages.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastEditorUserId="1920" LastEditDate="2020-05-27T18:06:56.273" LastActivityDate="2020-05-27T18:06:56.273" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14907" PostTypeId="2" ParentId="34" CreationDate="2020-05-24T15:53:14.723" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;http://fileformats.archiveteam.org/wiki/Disk_Masher_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;Disk Masher System&lt;/a&gt; entry on the Archive Team wiki suggests the following tools:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://aminet.net/package/util/arc/xDMS&quot; rel=&quot;nofollow noreferrer&quot;&gt;xDMS&lt;/a&gt; (Public Domain, portable C source)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://aminet.net/package/util/arc/dms111&quot; rel=&quot;nofollow noreferrer&quot;&gt;dms111&lt;/a&gt; (Original Amiga software)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/temisu/ancient_format_decompressor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ancient Format Decompressor&lt;/a&gt; (decompresses to ADF)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The linked xDMS page claims...&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Supports  decompression  of  files  compressed  using  all known DMS&#xA;compression modes, including old and obsolete ones, and also encrypted&#xA;files, for 100% compatibility.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;...and it's present in the package repositories of Debian-family Linux distros like Ubuntu, so I installed it and, according to the output &lt;code&gt;xdms&lt;/code&gt; prints when run without arguments, you'd want the &lt;code&gt;u&lt;/code&gt; or &lt;code&gt;z&lt;/code&gt; commands:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;     u : Unpack DMS archives to disk images&#xA;     z : Unpack to disk images and compress it with gzip&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(The description on the page linked for xDMS indicates the formats in question are ADF and ADZ)&lt;/p&gt;&#xA;&lt;p&gt;As for Ancient Format Decompressor, it says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Disk Masher System a.k.a. DMS&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Supports all different compression methods (NONE,SIMPLE,QUICK,MEDIUM,DEEP,HEAVY1,HEAVY2)&lt;/li&gt;&#xA;&lt;li&gt;Supports password bypassing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If you just need files out of it, &lt;code&gt;unar&lt;/code&gt; (the Linux port the open-source &lt;a href=&quot;https://theunarchiver.com/command-line&quot; rel=&quot;nofollow noreferrer&quot;&gt;CLI version&lt;/a&gt; of The Unarchiver) is included in Debian-family package repositories and lists DMS as supported.&lt;/p&gt;&#xA;&lt;p&gt;There's also &lt;a href=&quot;http://ale.emuunlim.com/guides/undms-dms.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;this guide&lt;/a&gt; which walks you through how to convert DMS to ADF by running the original DMS utility under emulation.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, a quick search didn't turn up any pre-built binaries outside of the ones in the package repositories so, if you're not on Linux and the emulation solution doesn't work for you, the simplest solution might be to grab a LiveCD image for something like Lubuntu and fire it up in VirtualBox.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastEditorUserId="1920" LastEditDate="2021-01-25T02:43:15.833" LastActivityDate="2021-01-25T02:43:15.833" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14908" PostTypeId="2" ParentId="14903" CreationDate="2020-05-24T16:54:31.543" Score="131" Body="&lt;p&gt;Basically, because it is running under Windows 3 at that point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows 98’s setup process goes through three main phases, in three different operating environments; each one installs the operating environment for the next, until the installation is complete.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The first, which can run from the setup floppies and/or CD-ROM, uses a DOS program (&lt;code&gt;DOSSETUP.BIN&lt;/code&gt;) to set up disk partitions, run various checks etc.:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jEOF5.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jEOF5.png&quot; alt=&quot;Screenshot of the DOS phase of Windows 98 setup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This phases finishes by copying a minimal version of Windows 3 to the target installation drive, in a temporary directory (normally &lt;code&gt;WININST0.400&lt;/code&gt;), containing &lt;code&gt;DOSX.EXE&lt;/code&gt;, &lt;code&gt;USER.EXE&lt;/code&gt;, &lt;code&gt;GDI.EXE&lt;/code&gt;, &lt;code&gt;KRNL386.EXE&lt;/code&gt;, &lt;code&gt;LZEXPAND.DLL&lt;/code&gt; etc. (see &lt;code&gt;MINI.CAB&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The second uses this minimal Windows 3 to run a Windows 3 program, &lt;code&gt;W98SETUP.BIN&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/O9Lcv.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O9Lcv.png&quot; alt=&quot;Screenshot of the Windows 3 phase of Windows 98 setup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This starts by copying more files to support all the information-gathering during setup, and various other niceties including the 3D look shown in your screenshot (the contents of the &lt;code&gt;PRECOPY&lt;/code&gt; CABs); it ends by copying most of Windows 98, setting the system up so that it will boot Windows 98 from the target drive, and rebooting.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The third runs after the first boot into Windows 98, from Windows 98:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MWn8z.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MWn8z.png&quot; alt=&quot;Screenshot of the Windows 98 phase&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Many PCs with Windows 98 pre-installed were shipped in a variant of the state left at the end of the second phase above; the third phase starts with a “Starting Windows 98 for the first time” message, and follows that up by asking the user for their name and company name. Thus PC buyers got a system pre-installed, but ready to be personalised.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can interrupt setup at any point, or inspect the image during installation in an emulator, to see what’s present on the disk and thus determine the runtime environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is also possible to initiate the setup process from any of the above environments, which is how Windows 98 handles upgrades (from MS-DOS, or Windows 3, or Windows 95).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-24T20:48:35.633" LastActivityDate="2020-05-24T20:48:35.633" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14909" PostTypeId="1" AcceptedAnswerId="14910" CreationDate="2020-05-24T19:10:09.967" Score="5" ViewCount="728" Body="&lt;p&gt;There's a glitch in the original Super Mario Bros on the NES. That causes Mario to become an unused sprite(Little Fire-Mario). I'm unsure how the glitch works, but I'll show the instructions on how to pull it off to add some information that might be crucial in explaining the &lt;em&gt;glitch&lt;/em&gt;(Little Fire-Mario).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Instructions&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;You have to enter any castle level except for 8-4(as it will end the game) as Big or Fire Mario. To pull off the glitch, you have to hit the axe and Bowser at the same time. This will cause Mario to enter the next level as Big Mario. However, upon touching a Mushroom, Big Mario will become small, and touching a fire flower will cause Small Fire Mario to appear.&lt;/p&gt;&#xA;&lt;p&gt;How does all of this work? And why would taking damage and hitting the axe at the same time open up unused sprites like Little Fire Mario?&lt;/p&gt;&#xA;" OwnerUserId="17968" LastEditorUserId="-1" LastEditDate="2020-09-14T06:05:46.543" LastActivityDate="2020-09-14T06:05:46.543" Title="How does the &quot;Small fire-Mario&quot; glitch in SMB1 work?" Tags="&lt;nes&gt;&lt;glitches&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14910" PostTypeId="2" ParentId="14909" CreationDate="2020-05-24T19:34:35.110" Score="13" Body="&lt;p&gt;&lt;H3&gt;Without analyzing the code&lt;/H3&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd risk to say that the state of Mario consists of 2 different variables:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;big or small mario state&lt;/li&gt;&#xA;&lt;li&gt;big or small mario image&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When you're hit and you end a level, the game only updates one of the variables: mario state, and doesn't have time to update the other one, resulting in an inconsistency. This should not happen but it did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now when you pick the mushroom, since the state is known as &quot;small mario&quot;, the game probably toggles the sprite (by EORing it), so it swaps it, which can explain why mario doesn't remain big, but swaps to small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And note that there is no firing frame as small. In this video &lt;a href=&quot;https://www.youtube.com/watch?v=v2lVgHaRDf8&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=v2lVgHaRDf8&lt;/a&gt; we can witness that firing mario is small unless when he fires. The frame where he fires is the one from a big mario.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now why are there 2 variables/states for the same thing? Because there's a &lt;em&gt;transition&lt;/em&gt; from big to small and reverse. When the level is completed, the transition isn't done / is aborted before it can happen, and Mario remains big.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;H3&gt;With analysis of the code&lt;/H3&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can find a &lt;a href=&quot;https://gist.github.com/1wErt3r/4048722&quot; rel=&quot;noreferrer&quot;&gt;comprehensive SMB 6502 disassembly on github&lt;/a&gt;. It seems to confirm what I suspected:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PlayerSize            = $0754&#xA;PlayerStatus          = $0756&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;as you see, there is one variable for size and another one for status.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The status variable is changed here:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Shroom_Flower_PUp:&#xA;      lda PlayerStatus    ;if player status = small, branch&#xA;      beq UpToSuper&#xA;      cmp #$01            ;if player status not super, leave&#xA;      bne NoPUp&#xA;      ldx ObjectOffset    ;get enemy offset, not necessary&#xA;      lda #$02            ;set player status to fiery&#xA;      sta PlayerStatus&#xA;      jsr GetPlayerColors ;run sub to change colors of player&#xA;      ldx ObjectOffset    ;get enemy offset again, and again not necessary&#xA;      lda #$0c            ;set value to be used by subroutine tree (fiery)&#xA;      jmp UpToFiery       ;jump to set values accordingly&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The size isn't changed there. It's done somewhere else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The transition code uses a third variable &lt;code&gt;PlayerChangeSizeFlag&lt;/code&gt;, and as predicted, when the flag reaches a given value, an &lt;em&gt;inversion&lt;/em&gt; of the size variable is done (using &lt;code&gt;eor #$01&lt;/code&gt; on it), which explains that if the size is big, it becomes small:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;InitChangeSize:&#xA;          ldy PlayerChangeSizeFlag  ;if growing/shrinking flag already set&#xA;          bne ExitBoth              ;then branch to leave&#xA;          sty PlayerAnimCtrl        ;otherwise initialize player's animation frame control&#xA;          inc PlayerChangeSizeFlag  ;set growing/shrinking flag&#xA;          lda PlayerSize&#xA;          eor #$01                  ;invert player's size&#xA;          sta PlayerSize&#xA;ExitBoth: rts                       ;leave&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that &lt;code&gt;InitChangeSize&lt;/code&gt; is the same routine used to make Mario bigger when he gets a mushroom, or smaller when he's hit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Mario is hit just when the level ends, &lt;code&gt;PlayerState&lt;/code&gt; is updated immediately to &quot;small&quot;, but &lt;code&gt;InitChangeSize&lt;/code&gt; is probably not called or not called enough times to reach the state where it changes &lt;code&gt;PlayerSize&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fix is rather easy if one wants to patch the game: at the start of the level, propagate &lt;code&gt;PlayerState&lt;/code&gt; to &lt;code&gt;PlayerSize&lt;/code&gt; to correct the desynchronization.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-05-24T22:44:29.157" LastActivityDate="2020-05-24T22:44:29.157" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14911" PostTypeId="1" AcceptedAnswerId="14913" CreationDate="2020-05-24T20:28:42.430" Score="9" ViewCount="1465" Body="&lt;p&gt;A preprocessor is a tool that takes source code as input and outputs a modified version of it for input to a downstream tool, such as a compiler or interpreter.  Preprocessors can be used to implement software variability (i.e., by conditionally including code specific to certain target architectures) or to realize control structures and other features not present in the programming language of the source code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps the most famous preprocessor is the C preprocessor, CPP, which &lt;a href=&quot;http://www.jslint.com/chistory.html&quot; rel=&quot;noreferrer&quot;&gt;according to Dennis Ritchie&lt;/a&gt; was developed around 1972 or 1973 and became a standard part of the language.  However, CPP wasn't the only preprocessor in use in 1972; &lt;a href=&quot;https://en.wikipedia.org/wiki/Iftran&quot; rel=&quot;noreferrer&quot;&gt;IFTRAN&lt;/a&gt;, for example, was a FORTRAN preprocessor intended to provide support for various structured programming concepts that didn't yet exist in the language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interested in learning more about the history of preprocessors, in in particular the earliest known source code preprocessor and what programming language it was intended for.  Did preprocessors get their start with high-level programming languages or were they in widespread use back when all we had was assembly?&lt;/p&gt;&#xA;" OwnerUserId="6527" LastActivityDate="2020-05-26T02:47:26.650" Title="What was the first preprocessor for a programming language?" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14912" PostTypeId="2" ParentId="14911" CreationDate="2020-05-24T20:45:06.450" Score="9" Body="&lt;p&gt;Preprocessing is older than high-level languages. Macro systems came into &lt;a href=&quot;https://en.wikipedia.org/wiki/Macro_(computer_science)#History&quot; rel=&quot;noreferrer&quot;&gt;use in the mid-1950s&lt;/a&gt; as ways to reduce the amount of assembler code that needed to be written and to make it easier to comply with programming standards. At first, pre-processors were separate programs, but they were followed by &quot;macro-assemblers,&quot; which had built-in pre-processors, by the late 1950s. Discovering the very first pre-processor may well become a matter of definitions. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2020-05-24T22:00:59.817" LastActivityDate="2020-05-24T22:00:59.817" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14913" PostTypeId="2" ParentId="14911" CreationDate="2020-05-24T21:50:15.370" Score="13" Body="&lt;p&gt;The very name we have for one of the constructs -- &quot;macro&quot;, short for &quot;macroinstruction&quot;  -- comes from the assembly-language era, the prefix &quot;macro&quot; having its usual meaning (as a modifier) of something large, in this case larger than one instruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A macroinstruction looks like an instruction in the assembly language, generally follows the same syntax rules as the assembly language, but generates one or more actual machine instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are at least 4 cases to consider when looking for the first macroprocessor/preprocessor.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A standalone preprocessor (which is what the question asks).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Macroinstructions built in to an assembler for special cases, with no facility for defining more in the source code&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Macro assemblers permitting definition and use in source code.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Preprocessing facilities built into higher-level language compilers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Having established my taxonomy, I am unable to answer the question of &quot;first&quot;.  I should note that before C came into being, the parties involved had worked on Multics, whose system programming language was PL/I.  PL/I came with extensive compile-time, i.e. preprocessing, facilities (my case #4). Ritchie, McIlroy, &amp;amp;co., would certainly have been aware of these facilities - and we may well suppose the simplicity of the C preprocessor is a reaction to the rococo complexity of PL/I in that respect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One possible contender is the &lt;a href=&quot;http://bitsavers.org/pdf/ibm/705/32-7479_705_Autocoder_Macro_Instrs_1957.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;705 Autocoder System&lt;/a&gt; from IBM, manual dated 1957.  I &lt;em&gt;think&lt;/em&gt; the manual is describing a macro-assembler rather than a preprocessor to a later assembler. &quot;The Autocoder compiles instructions written in a simple notation and translates them into a program in the language of the machine&quot;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I found this paper on &lt;a href=&quot;https://academic.oup.com/comjnl/article/28/1/29/468011&quot; rel=&quot;nofollow noreferrer&quot;&gt;The History of Macro Processing in Programming Language Extensibility&lt;/a&gt;, which looks like it might be relevant and interesting. &lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-05-25T15:41:19.380" LastActivityDate="2020-05-25T15:41:19.380" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14914" PostTypeId="1" CreationDate="2020-05-25T00:18:31.207" Score="13" ViewCount="2893" Body="&lt;p&gt;I'm wondering if it is possible to buy an sort of device currently in production that uses a z80 compatible CPU - not an FPGA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't want to build a kit or use a soldering iron.  I'm also looking for something that is commercially produced rather than a hobby device designed and sold by hobbyists to other hobbyists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I say reasonable cost well I guess in the domain of $50 to $80 since the chips cost around $18. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've searched fairly extensively and there's not much it would seem.  The more peripherals the better and bonus points if it had some sort if display output and GPIO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally something that uses a &quot;modern&quot; Z80 variant such as the eZ80 which runs at 50Mhz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone seen anything along these lines?  I've seen the Ti 84 calculators but it appears the operating frequency of these are severely constrained which means I wouldn't be able to run it near the eZ80 50Mhz maximum clock speed.&lt;/p&gt;&#xA;" OwnerUserId="11442" LastEditorUserId="611" LastEditDate="2020-05-27T07:24:35.110" LastActivityDate="2020-05-27T09:04:23.047" Title="In 2020 are there fully assembled z80 devices available at reasonable cost?" Tags="&lt;z80&gt;" AnswerCount="2" CommentCount="13" FavoriteCount="3" ClosedDate="2020-05-26T16:48:42.040" ContentLicense="CC BY-SA 4.0" />
  <row Id="14915" PostTypeId="2" ParentId="14914" CreationDate="2020-05-25T02:25:21.510" Score="18" Body="&lt;p&gt;Bill's &lt;a href=&quot;https://www.retrobrewcomputers.org/forum/index.php?t=msg&amp;amp;th=318&amp;amp;start=0&amp;amp;&quot; rel=&quot;noreferrer&quot;&gt;MinZ180&lt;/a&gt; is tiny, fast, fully assembled, and falls within your price range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3JmQW.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3JmQW.jpg&quot; alt=&quot;MinZ180&quot;&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He may have one or two left, I'm not sure.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-05-25T02:25:21.510" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14916" PostTypeId="2" ParentId="8834" CreationDate="2020-05-25T07:23:28.237" Score="3" Body="&lt;p&gt;I bought and read &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0861611160&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;'Complete (ZX) Spectrum ROM Disassembly' (Ian Logan, 1983, very out of print)&lt;/a&gt; many years ago, here are the answers, from my memory. (Btw, the ZX80 ROM is insanely tight Z80 assembler considering everything Sinclair jammed into ~13K of ROM (and still had to leave about 4K of the 16K for video buffer, IIRC). Tighter than the Commodore 64 or BBC Micro - with full in-memory support for a BASIC interpreter, and compare the number of BASIC keywords the Spectrum supported). Memory used to be very expensive too, so spending CPU cycles to save memory was a worthwhile tradeoff back then.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;You always want to use integers wherever possible, for speed.&lt;/strong&gt; (3.5MHz is not very fast at all, most opcodes take 2-5 cycles to execute, so you only have ~1.5M ops/sec and (e.g. in a game, with scrolling) you want to be refreshing the screen several frames/sec.) Moreover, unlike the Commodore 64, the Spectrum for cost reasons did not have a dedicated sprite chip (or a sound chip), so that loaded the CPU too.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Floating-point operations (+,-,*,/) used to take many more CPU cycles (hundreds) than integer operations.&lt;/strong&gt; This was true on 8-bit, 16-bit and 32-bit CPUs throughout the 70s/80s/90s, up until the Intel 80386 when the FPUs got integrated. (This is because you have to compute the difference in exponents, check for underflow, denormalize, sign-extend (which used to be a loop with SLA/SRA shift operations), perform the actual operation (+/- OR *,/ which take longer, bit-serially), possibly normalize the result (another loop), and finally restore the sign bit and push back on the stack).&lt;/li&gt;&#xA;&lt;li&gt;The Z80 couldn't afford to have super-expensive FP circuitry, so &lt;strong&gt;FP calculations had be done by software emulation, by the ROM. Slower.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Certain operations like integer division, SQRT, EXP, LN, LOG, LOG10, SIN, COS, TAN, their inverses (ACOS, ASIN, ATAN), and hyperbolic (SINH, COSH, TANH, ASINH, ACOSH, ATANH) will in general produce a float output, even if the input was integer. (Unless you used table lookup, fixed-point and approximations.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Integer format:&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Spectrum uses &lt;strong&gt;twos' complement format for signed integers&lt;/strong&gt;, which was and still is &lt;strong&gt;the&lt;/strong&gt; standard format; also used by every other 8-bit CPU that I know of (6502, 6809). (There are only two possible formats really [1]: ones' complement and twos' complement, and twos' complement beats ones' complement for general-purpose use because you can directly add/subtract/multiply/divide integers, without having to waste an extra cycle or two first modifying them or sign-extending them. (That's why &lt;a href=&quot;https://en.wikipedia.org/wiki/Reduced_instruction_set_computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;in subsequent years, RISC chips&lt;/a&gt; automatically do sign-extension to 32b when you load a signed 16b or 8b int))&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;&quot;fluffed up to fit the same amount of space as a float&quot;&lt;/em&gt;. That's called &lt;em&gt;&quot;padded&quot;&lt;/em&gt; to 5 bytes. The padding was in bytes 2 and 5, the 16b integer was in bytes 3,4. (The Spectrum actually didn't sign-extend them. But if they had wanted to do signed 32b arithmetic they would have.)&lt;/li&gt;&#xA;&lt;li&gt;([1] there are other possible formats for integers, like radix notation for computing residues in number-theory, or obsolete stuff like Binary-Coded Decimal for when we want to easily extract decimal digits from integers e.g. in a bank mainframe, but these aren't used for general-purpose integers).&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Float format&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It's trivial to distinguish a float from an integer just from their first byte (see Raffzahn's answer), since we know even a 32-bit integer will still have 8 bits of sign-extension.&lt;/li&gt;&#xA;&lt;li&gt;The leading bit in FP is called the mantissa and it's always understood to be one (at least, it's always one in a normalized FP number). Hence we can reuse it to store the sign bit.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;So the format is &lt;a href=&quot;https://mrob.com/pub/math/floatformats.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;1b sign, 31b mantissa, 8b exponent&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;This was still a few years before &lt;a href=&quot;https://en.wikipedia.org/wiki/Single-precision_floating-point_format#IEEE_754_single-precision_binary_floating-point_format:_binary32&quot; rel=&quot;nofollow noreferrer&quot;&gt;industry settled on IEEE 754 standard (1985)&lt;/a&gt;, but it's similar, just with 31b mantissa instead of 23b. (I never heard a compelling reason why Sinclair chose 5 bytes instead of 4, but if I was to guess it would be to ensure good-enough accuracy throughout the domain of exponential and trigonometric functions, e.g. EXP, TAN, ATANH.)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;What is the motive for including this second format? Initially, I thought that the few things which are certainly integers, like a BASIC line number or valid arguments to POKE or AT and so on, those can be assumed to be integers so that arithmetic can be done more quickly.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Hah! Welcome to the 1970s/80s/early 90s, where almost everything needed to be an integer, for the reasons mentioned above, programmers would try to keep many things integers: not just loop counters, spreadsheet values, but 2D and even much 3D game programming would use integers (possibly scaled, i.e. fixed-point) for speed in many cases where you might expect to see floating-point. If you want to see blazingly fast performant integer code used for graphics, see the series of books 'Graphics Gems' from the 1980s. See also id Games, programmers like &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Carmack&quot; rel=&quot;nofollow noreferrer&quot;&gt;John Carmack&lt;/a&gt;, Wolfenstein, Doom etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's funny to see your assumption that every number should be a float, except for the &quot;very few things that need to be an integer&quot;. If you looked under the hood at any list of great Spectrum games, even real-time 2D shooters, you'd see almost all integers; only 3D perspective games like 'Elite' might have a lot of floats.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;But then, the computer will have to check that the first two bytes equal 0xFF00 before proceeding to use the number. And that would incur a cost on any floating point calculation.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As explained above, F-P calculations were already going to take tens or hundreds of cycles, so a couple of format-checking cycles had no impact. But saving lots of memory did.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;What if a mantissa happens to start with at least seven eight ones, and the sign happens to be negative, and the exponent happens to be zero? I see (the potential for) a bug there. That scenario would mean that the first two bytes of the float would be 0x00 and 0xff, so that could confuse the calculator routines.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes that's the (very rare) special-case of a non-normalized floating-point. This only (slightly) limits us to the range of exponents we can handle; non-normalized numbers with exponents &amp;lt; -127 are very rare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[I know almost nothing about the ZX80 or ZX81, except that they used the same Z80 family CPU, and the Spectrum ROM was adapted/extended from the ZX81's smaller ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Footnote: Sinclair would have lived on in the transition to 16-bit personal computers if he had kept binary-compatibility, instead of his head-scratching 1984 decision to launch an overpriced, binary-incompatible &lt;a href=&quot;https://en.wikipedia.org/wiki/Sinclair_QL&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sinclair QL ('Quantum Leap')&lt;/a&gt;, based on an eccentric choice of Motorola 68008 as CPU, which meant his users' entire £££ investment in their library of 8-bit games, oops 'software', and hardware/peripherals/joysticks/keyboards/printers/modems was obsolete, in which case they had zero reason not to switch to the far more popular 16-bit Atari ST or Commodore Amiga, or the then-emerging PC or Macintosh, which was exactly the sad fate of the ZX series. But, it was a breakthrough for 1982, and introduced personal computing to a generation.]&lt;/p&gt;&#xA;" OwnerUserId="4073" LastEditorUserId="4073" LastEditDate="2020-05-25T21:42:13.283" LastActivityDate="2020-05-25T21:42:13.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14917" PostTypeId="2" ParentId="14914" CreationDate="2020-05-25T12:02:01.033" Score="11" Body="&lt;p&gt;It sounds as if your ideal device would be something like a Raspberry Pi, but based on a Z80 rather than an ARM core. The Pi provides a video generator, USB ports for peripherals, GPIO points, and so on. However, the reason Raspberry Pis are so cheap is that they're based on System-on-Chip products that are made in large volumes for other applications. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These days, I really doubt anyone makes Z80-based SoCs with video generators. Commercial applications of 8-bit microprocessors are for smaller and simpler tasks than running a display to modern standards. But there are other ways to get the experience you seem to be after. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest is to buy a Pi and run a Z80 emulator on it. There are several available, including at least one that &lt;a href=&quot;https://hackaday.com/2016/10/12/raspberry-pi-boots-cpm/&quot; rel=&quot;noreferrer&quot;&gt;boots directly on the Pi&lt;/a&gt;, without needing the Pi's usual OS as a host. This will run much faster than historical Z80 hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way is to make contact with your local maker group or hackspace, find someone who enjoys building computers from kits, and get them to build a kit machine for you. &lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2020-05-25T12:32:28.713" LastActivityDate="2020-05-25T12:32:28.713" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14918" PostTypeId="1" AcceptedAnswerId="14920" CreationDate="2020-05-25T13:05:43.983" Score="8" ViewCount="539" Body="&lt;p&gt;The 6502 uses the &lt;a href=&quot;https://en.wikipedia.org/wiki/Carry_flag#Vs._borrow_flag&quot; rel=&quot;noreferrer&quot;&gt;carry bit&lt;/a&gt; system (over a borrow bit). On such machines, the bitwise NOT is applied to the subtrahend before it is &quot;subtracted&quot; (really, added, taking advantage of two's complement) from the minuend. Since obviously when you're generating machine from assembly code, you have control over the bytes which are actually emitted, for 6502 variants like the NES's 2A03, was the presence of both ADC and SBC by immediate necessary? Couldn't the immediate just be NOTed at the assembly phase? Or are the flags reckoned differently for ADC and SBC?&lt;/p&gt;&#xA;" OwnerUserId="10966" LastEditorUserId="6659" LastEditDate="2020-05-26T12:11:38.657" LastActivityDate="2020-05-28T14:50:12.620" Title="Did the 6502 need both ADC immediate and SBC immediate?" Tags="&lt;6502&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14919" PostTypeId="2" ParentId="14918" CreationDate="2020-05-25T15:27:02.773" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;was the presence of both ADC and SBC by immediate necessary?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Necessary is for instruction sets always a misleading question. After all, next to all instructions could be omitted from the hardware and put into code, essentially ending with a &lt;a href=&quot;https://en.wikipedia.org/wiki/One-instruction_set_computer&quot; rel=&quot;noreferrer&quot;&gt;one instruction machine&lt;/a&gt;. The question is not about a minimizing the instruction set (including addressing variants) to an absolute minimum but rather to find a (*1)  the sweet spot between bloated and unusable.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Couldn't the immediate just be NOTed at the assembly phase?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sure, it could. But were to put it? But that would require either a(nother) temporary register to store the value after the 'NOTing' instruction to hold it for the 'ADDing' as the accumulator already holds the first operand. In addition the 'NOTing' instruction would have to have all addressing modes of the &lt;code&gt;SBC&lt;/code&gt; instruction it replaces to be as useful. This means as many opcodes and decode-ROM entries with SBC - plus an additional one for 'Add Temp to A' (*2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Now if this question is strictly &lt;em&gt;only&lt;/em&gt; about dropping the SBC with an immediate value&lt;/strong&gt;, then yes, it would have saved a single opcode, but no hardware at all, as the implied negation would still need to be there for all SBC with a memory operand. &lt;em&gt;Maybe&lt;/em&gt; one line in the decode-ROM could be saved - but at horrible cost with potential buyers ... &lt;em&gt;'Wut? A CPU that can't subtract an immediate value? No way I'd buy that'&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;While removing SBC is a nice Gedankenexperiment, is will increase hardware requirement and bloat the instruction set when done general, or have no meaningful savings at all.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, the notion of 'at assembly phase' carries a lot of hindsight. Back when the 6500 was done, it's designated assembler was barely than a tool to replace a combination of mnemonic and operand markers into a single opcode. That beast was really dumb. Not to mention, that assembling from hand was considered a normal way to do it. Woz did write not only his monitor, but as well the first Integer BASIC exactly that way - no assembler involved.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.: Instead the 6500 design saved on a not instruction, as it can simply be synthesized by an &lt;code&gt;EOR #$FF&lt;/code&gt; instruction.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - There isn't a single sweet spot, but many, depending on targets and resources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Turning this into a Load-Temp instruction and a Neg-And-Add-Temp will lead to the same result.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-25T15:42:57.693" LastActivityDate="2020-05-25T15:42:57.693" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14920" PostTypeId="2" ParentId="14918" CreationDate="2020-05-25T15:52:19.220" Score="8" Body="&lt;p&gt;No, ADC and SBC does exactly the same except SBC does a NOT operation on the argument before adding, and when it comes to immediate values, they are definitely redundant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when it comes to other addressing modes, ADC and SBC instructions were both needed. And as the 6502 is pretty orthogonal when it comes to instructions and addressing modes, this is why both SBC #imm exists even though it could always be replaced with ADC #~imm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: The overflow flag, &lt;a href=&quot;http://www.righto.com/2012/12/the-6502-overflow-flag-explained.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;which is &quot;simply&quot; the XOR of the 6th and 7th bit carry&lt;/a&gt;, is the same whenever ADC and SBC is used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd also say that pseudo-instructions, while common in the ARM world for example, were unknown/uncommon during the 6502 days. Back then people expected instructions to be in memory exactly what they typed in the assembly code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt; The decimal mode is the only way and &lt;code&gt;ADC #~imm&lt;/code&gt; and &lt;code&gt;SBC #imm&lt;/code&gt; will make a difference. However, while the decimal mode rarely used and marginal today in hindsight, especially considering it was removed for the NES/Famicom, you should not forget that it was a major marketing tool back in the late '70s, which was a selling point for this CPU.&lt;/p&gt;&#xA;" OwnerUserId="2123" LastEditorUserId="10966" LastEditDate="2020-05-27T17:12:25.607" LastActivityDate="2020-05-27T17:12:25.607" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14921" PostTypeId="2" ParentId="8027" CreationDate="2020-05-25T16:12:11.333" Score="4" Body="&lt;p&gt;I worked for Lucas logic in Warwick on the Nascom from about 1981 to 82. I worked on adding a disk drive, as well as a colour display board. In 82 I was moved onto another Lucas Logic project, and the Nascom project was moved up the road to Kenilworth with he rest of the team. When I started, the Nascom was mainly cards in a frame version, but we were working on the boxed version with included keyboard.&lt;/p&gt;&#xA;" OwnerUserId="18237" LastEditorUserId="611" LastEditDate="2020-05-25T17:14:30.537" LastActivityDate="2020-05-25T17:14:30.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14922" PostTypeId="1" AcceptedAnswerId="14926" CreationDate="2020-05-25T16:45:04.037" Score="4" ViewCount="427" Body="&lt;p&gt;If I had a hypothetical computer just like nowaday's computers, but it had an NMOS 6502, would it provide me with a better emulation experience than if I were to emulate the 6502 inside software? Also, would it make a difference to have the PPU's chips as well?&lt;/p&gt;&#xA;" OwnerUserId="18252" LastActivityDate="2020-05-25T17:19:05.720" Title="Would having the console's CPU help in emulation hypothetically?" Tags="&lt;emulation&gt;&lt;6502&gt;&lt;nes&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14923" PostTypeId="2" ParentId="14922" CreationDate="2020-05-25T16:56:46.143" Score="6" Body="&lt;p&gt;Well, if your computer had a 6502 and the PPU &amp;amp; PSG (for the sound) chips, then it would be basically a NES, so there would be little left to emulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if your computer only had the 6502, and the rest to emulate, no it wouldn't change, since nowadays emulation cores for 6502 are cycle exact, so it wouldn't be that interesting to have a real 6502 in your machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plus, without the other chips, you would have to interface the 6502 with some other sound &amp;amp; video hardware, which isn't exactly a piece of cake. The video isn't really an issue, because video memory is usually scanned periodically and drawn to screen, but sound emulation usually requires to intercept read and writes to given memory locations...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more interesting chip to have would probably be the PSG for a super-faithful sound, and also maybe the PPU if an analogue output could be connected for a real analogue feeling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closest real-life example I can think of is the capability (now lost) that old versions of MAME had to use Soundblaster (inc. AWE64) Yamaha chip directly for games that had that chip in their hardware (Dragonninja for instance). This produced super neat FM sound and that was really cool.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-05-25T16:56:46.143" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14924" PostTypeId="2" ParentId="14922" CreationDate="2020-05-25T16:57:13.133" Score="3" Body="&lt;p&gt;No, and very probably no. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Emulating a 6502 cycle-exact and in real time is well within reach of even a 30 year old 486, so there is nothing to be gained by using a real 6502, or modern successor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for &quot;the PPU&quot;, that's a bit vague (what are its capabilities?), but all of the standard 80's video chips have been emulated quite well for over a decade. You may want to check retrolib or MAME for what's available. Is there anything in particular you are missing? &lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-05-25T16:57:13.133" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14925" PostTypeId="2" ParentId="14922" CreationDate="2020-05-25T17:16:15.447" Score="4" Body="&lt;p&gt;There is currently lots of development around FPGA implementation of old game consoles and computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A FPGA is a reconfigurable chip which can be programmed to implement any logic circuit, including CPUs, video controllers, .... It is now possible to implement NES, SNES, Genesis... on affordable hardware (&amp;lt;200$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compared to emulators, an FPGA implementation can sometimes be more accurate (because it's easier to implement cyle exact concurrent behaviour of hardware than with emulators) and with lower latency (same latency as actual hardware, not needing the drivers, OS, USB bus... of an hosted emulator)&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2020-05-25T17:16:15.447" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14926" PostTypeId="2" ParentId="14922" CreationDate="2020-05-25T17:19:05.720" Score="3" Body="&lt;p&gt;For purposes of emulating program execution using only new hardware, I don't think inclusion of vintage components would be particularly helpful except in cases where behavior would be affected by aspects of the original that aren't fully understood, or could vary in &quot;interesting&quot; ways (e.g. because waving one's hand over the machine would affect the value seen by the CPU during an &quot;open-bus&quot; state).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, if one has a cartridge that's designed for use in vintage equipment, and relies upon precise signal timings, using a vintage CPU might be helpful.  Many modern machines have an average instruction execution speed that is more than three orders of magnitude faster than vintage consoles, but that average speed comes at the expense of variability.  A 6502 that receives a value on the data bus at the end of one cycle can forward it to the address bus at the start of the next cycle (but not before the end of the one where it was fetched!), and a game cartridges may rely upon such timing.  A modern CPU may be able to execute billions of instructions per second, but that doesn't imply an ability to perform any particular operation within a 50ns window.  Someone who was in control of the operating system could almost certainly arrange things so the worst-case timings would meet requirements, but guaranteeing that may be hard while running any kind of time-shared OS even on a multi-core system (if one core is talking to the cartridge while three other cores are running programs that access memory in such a way that data the first code is going to need gets evicted from cache, and they then have cache misses just before the first core gets a cache miss on that data, the first core may have to wait awhile to get its data).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the best design approach for an emulator is to use FPGAs.  Those can mimic the timing of native hardware very precisely, and should be compatible with a wide range of cartridges that use the bus in interesting ways, without the emulator having to know or care what the cartridge is doing.  For example, some cartridges may include a RAM which has one of the address wires open-circuited (I think Qix did that with A1).  This effectively creates pairs of addresses, two apart, such that reading either address of a pair will yield the last byte of data that was written to either address of the pair.  An emulator that knows about that could simulate that behavior, but an FPGA-based emulator could yield proper behavior &lt;em&gt;without have to know or care about what the cart was doing&lt;/em&gt;.  If a cartridge fetches a byte from RAM when given one tile-row address, and then fetches a byte from the same piece of RAM when given a different address, the PPU wouldn't need to know or care where those bytes came from--it would simply display the second row like the first because it received the same pattern of bits.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-05-25T17:19:05.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14927" PostTypeId="1" CreationDate="2020-05-25T18:08:00.097" Score="37" ViewCount="7852" Body="&lt;p&gt;From what I've read, the first FORTRAN compiler built a machine-code program entirely in memory; it was, in fact, designed to read the entire source code of the program, and then sequentially load pieces of the compiler that would process different parts of the source code into either machine code or other information that would be processed by later parts of the compiler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the just-in-time compilers for most (all?) implementations Java and .NET directly produce machine code in memory, and although Borland's language products would produce machine code directly, it seems much more common to have compilers output assembly language instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it is certainly useful to have a means of getting a human-readable dump of the compiler's output, having to feed the output of a compiler through a separate assembler program would seem like it would substantially increase build times.  While targeting assembly language would make it possible for a compiler to produce output containing forward jumps, a compiler could produce output targeting a much simpler &quot;fixup&quot; program which would expect input of the form &quot;output the following 56 bytes, output a two-byte fixup, output the next 127 more bytes, output another 2-byte fixup, patch the fixup 2 records back to the value 1137, then output the next 57 more bytes, etc.&quot;  Processing such a fixup file would be much faster than processing an assembly-language source file, and for test builds that process could even be deferred until load time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When did the now-ubiquitous approach of inserting an &quot;assemble&quot; step into code generation become commonplace, and why was it seen as worth the extra build time?&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="129" LastEditDate="2020-05-27T21:42:12.593" LastActivityDate="2021-04-26T21:42:47.710" Title="When and why did high-level language compilers start targeting assembly language rather than machine code?" Tags="&lt;assembly&gt;&lt;compilers&gt;" AnswerCount="9" CommentCount="18" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14928" PostTypeId="2" ParentId="14927" CreationDate="2020-05-25T18:51:10.503" Score="39" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;why did high-level language compilers start targeting assembly language rather than machine code&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, the answer is probably: to avoid developing a high level language to binary converter for each language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Issuing assembler text is much easier than issuing binary directly for at least 3 reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;writing text is easier than writing binary. The compiler doesn't have to worry about the binary representation of the mnemonics or branch computation. That makes the interface of the compiler very clear: high-level language as input, low-level language text file as output.&lt;/li&gt;&#xA;&lt;li&gt;the non-relocatable code is managed by the assembler, not the compiler. A binary file isn't always position independent, so there are relocation tables. Handling those relocation tables aren't trivial. Better let it be done by a single tool.&lt;/li&gt;&#xA;&lt;li&gt;as you mentioned, if you suspect a compiler bug then it's better to have intermediary output with symbols than a disassembly (and disassembling a &lt;code&gt;.o&lt;/code&gt; file usually fails on the relocated symbols, you need to disassemble the whole executable file for it to be correct)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The overhead exists, of course (must write the asm, then parse it back, in a different process), but converting assembly to binary is done in a very systematic way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The costly bits are located in the compiler itself:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Optimizations (which cost a lot of CPU time when compiling) are done at source level, not at assembly level (well, optimizations are always possible at assembly level but those are micro/local optimizations, and not all assemblers do them).&lt;/li&gt;&#xA;&lt;li&gt;Locating all include/header files and parsing them (when the produced assembly file is self-contained)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In terms of I/O, the assembly file is usually written on a temporary diskspace, so it can even remain in ram and never be written to disk (unless requested).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's a trade-off between efficiency and convenience. Once the assembler has been written, it can be used to assemble any file any compiler produces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Some Ada compilers like GNAT used to issue C code instead of assembly or binary file, also because it was easier)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays GNU compilers even add another stage: the compiler front-end produces an intermediary language output (known as GIMPLE) regardless of the language (Ada, C, C++, Fortran...), and the back-end produces the assembly from this GIMPLE file.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-05-28T06:41:52.863" LastActivityDate="2020-05-28T06:41:52.863" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="14930" PostTypeId="2" ParentId="14927" CreationDate="2020-05-25T22:18:54.127" Score="19" Body="&lt;p&gt;According to this &lt;a href=&quot;https://stackoverflow.com/a/53818152/471129&quot;&gt;answer&lt;/a&gt; gcc does this because of the proliferation of different object file formats: x86-64 processor alone uses ELF, PE/COFF, MachO64.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But other compilers (e.g. clang) go straight to object files without using an intermediate assemble step, so I would disagree that an assemble step is &quot;now ubiquitous&quot;.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastActivityDate="2020-05-25T22:18:54.127" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="14931" PostTypeId="1" CreationDate="2020-05-26T00:56:09.187" Score="28" ViewCount="6296" Body="&lt;p&gt;I am curious to learn about any &lt;strong&gt;developments in computer theory, hardware, and software that took place outside of the United States, in the middle of last century (~1940s-1980s).&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read 'Where Wizards Stay up Late' (K Hafner and M Lyon; a real gem of a book) on the development of the Internet, as well as 'The Cathedral &amp;amp; the Bazaar' (E Raymond), and I'm currently reading 'Hackers' (S Levy). Other books on my reading list include 'The Difference Engine' on Charles Babbage, 'Just For Fun' on Linus Torvalds, 'The Mythical Man-Month' (F Brooks), and a few others. I am also working my way through 'The Annotated Turing' (C Petzold). So far, the only non-American whose name comes immediately to mind is Alan Turing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone recommend any books, articles, or other sources, that discuss non-American contributions to the development of computers, from the 1940s to the ~1980s? Were there any European or Asian equivalents to the hacker groups that nucleated at MIT, Berkeley, Stanford, and other schools? Any non-American equivalents to BBN Technologies or MITS (Altair 8080 mnfr.)?&lt;/p&gt;&#xA;" OwnerUserId="18257" LastEditorUserId="4073" LastEditDate="2020-05-26T20:41:35.790" LastActivityDate="2020-05-28T14:46:00.760" Title="History of non-American software/hardware/CS theory development, 1940s-1980s?" Tags="&lt;history&gt;&lt;british-computers&gt;" AnswerCount="14" CommentCount="16" FavoriteCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="14932" PostTypeId="1" CreationDate="2020-05-26T01:04:43.127" Score="1" ViewCount="232" Body="&lt;p&gt;I'm curious to understand why the Spectrum Next uses Z80 on an FPGA instead of something like at eZ80?  I would have imagined they would choose the eZ80 since it is still a production part.  Anyone know the underlying thinking?&lt;/p&gt;&#xA;" OwnerUserId="11442" LastEditorUserId="15334" LastEditDate="2021-01-24T21:57:58.490" LastActivityDate="2021-01-24T21:57:58.490" Title="Why did the Spectrum Next choose Z80 on FPGA?" Tags="&lt;z80&gt;&lt;zx-spectrum&gt;&lt;design-choices&gt;&lt;diy-computing&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2020-05-26T06:38:15.047" ContentLicense="CC BY-SA 4.0" />
  <row Id="14933" PostTypeId="2" ParentId="14931" CreationDate="2020-05-26T01:17:19.497" Score="17" Body="&lt;p&gt;I may be a little biased, but much early work was done in the UK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For academic projects, the &lt;a href=&quot;https://en.wikipedia.org/wiki/EDSAC&quot; rel=&quot;noreferrer&quot;&gt;EDSAC&lt;/a&gt; at Cambridge, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Mark_1&quot; rel=&quot;noreferrer&quot;&gt;Mark 1&lt;/a&gt; at Manchester were seminal.  The first operating system we'd recognize today was on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atlas_%28computer%29&quot; rel=&quot;noreferrer&quot;&gt;Atlas&lt;/a&gt;, a joint industry/commercial project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the commercial products are summarized at the British website &lt;a href=&quot;http://www.ourcomputerheritage.org/&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Our Computer Heritage&lt;/em&gt;&lt;/a&gt;.  The Computer Conservation Society in the UK has a journal, &lt;a href=&quot;https://www.computerconservationsociety.org/resurrection.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Resurrection&lt;/em&gt;&lt;/a&gt;, which often has articles from those who were there, or from historians of the subject.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several books around: look for names like Martin Campbell-Kelly and Simon Lavington. The trouble is, such books tend to have short print runs. I'll look around and see if I can come up with some references. &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0932376088&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Early British Computers&lt;/em&gt;&lt;/a&gt;, by Lavington, is particularly good, but is no longer available new.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0262231220&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Maurice Wilkes' memoir&lt;/a&gt; is worth a read, as is his &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1558603174&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Computing Perspectives&lt;/em&gt;&lt;/a&gt;.  The latter might be more suited to your aims. Wilkes is the man behind the EDSAC, which was one of the first two computers in regular service in the world - the other was the Mark 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are at least a couple of early (well, not that early - but certainly involved with significant projects) British programmers on this site, so maybe one of them will have more to say.  I just missed the glory days.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-05-26T01:33:51.797" LastActivityDate="2020-05-26T01:33:51.797" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14934" PostTypeId="5" CreationDate="2020-05-26T01:37:08.317" Score="0" Body="" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-05-26T01:37:08.317" LastActivityDate="2020-05-26T01:37:08.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14935" PostTypeId="4" CreationDate="2020-05-26T01:37:08.317" Score="0" Body="Hardware, software, and people associated with computer development in the UK." OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-05-26T01:37:08.317" LastActivityDate="2020-05-26T01:37:08.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14936" PostTypeId="2" ParentId="14931" CreationDate="2020-05-26T02:16:18.717" Score="56" Body="&lt;p&gt;Just a short list from memory, concentrating on people and 'firsts' with some impact (*1):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Poland: &lt;a href=&quot;https://en.wikipedia.org/wiki/Jan_%C5%81ukasiewicz&quot; rel=&quot;noreferrer&quot;&gt;Jan Łukasiewicz&lt;/a&gt; published in 1924 an article in a German science paper about a &lt;a href=&quot;https://en.wikipedia.org/wiki/Polish_notation&quot; rel=&quot;noreferrer&quot;&gt;parenthesis-free notation&lt;/a&gt;, which today, modified as Reverse Polish Notation (&lt;a href=&quot;https://en.wikipedia.org/wiki/Reverse_Polish_notation&quot; rel=&quot;noreferrer&quot;&gt;RPN&lt;/a&gt;), is at the foundation for most expression evaluation&lt;/li&gt;&#xA;&lt;li&gt;Germany: The &lt;a href=&quot;https://collections.ushmm.org/search/catalog/irn521586&quot; rel=&quot;noreferrer&quot;&gt;Dehomag D11&lt;/a&gt; is introduced. Eventually the only machine that comes as close to a mechanical computer as possible - except the Z1 ofc.&lt;/li&gt;&#xA;&lt;li&gt;Germany: &lt;a href=&quot;https://en.wikipedia.org/wiki/Konrad_Zuse&quot; rel=&quot;noreferrer&quot;&gt;Konrad Zuse&lt;/a&gt; developed in 1936 the &lt;a href=&quot;https://en.wikipedia.org/wiki/Z1_(computer)&quot; rel=&quot;noreferrer&quot;&gt;first binary floating point computer&lt;/a&gt; the Z1.&lt;/li&gt;&#xA;&lt;li&gt;Germany: &lt;a href=&quot;https://en.wikipedia.org/wiki/Helmut_Schreyer&quot; rel=&quot;noreferrer&quot;&gt;Helmut Schreyer&lt;/a&gt; demonstrates with his 'Versuchsschaltung' of 1938 that a full figured ALU could be build with tubes.&lt;/li&gt;&#xA;&lt;li&gt;England: In Summer 1948 the &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Baby&quot; rel=&quot;noreferrer&quot;&gt;Manchester Baby&lt;/a&gt; (SSEM) became first operational. More of a demonstrator for the later &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Mark_1&quot; rel=&quot;noreferrer&quot;&gt;Mark 1&lt;/a&gt;, but nonetheless a complete stored program computer.&lt;/li&gt;&#xA;&lt;li&gt;Germany/Switzerland: &lt;a href=&quot;https://en.wikipedia.org/wiki/Z4_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Zuse's Z4&lt;/a&gt; became in 1949 the first commercial sold computer.&lt;/li&gt;&#xA;&lt;li&gt;Sweden: The electromechanical &lt;a href=&quot;https://en.wikipedia.org/wiki/BARK_(computer)&quot; rel=&quot;noreferrer&quot;&gt;BARK&lt;/a&gt;, a plug board programmed calculator, becomes operational in 1950.&lt;/li&gt;&#xA;&lt;li&gt;Switzerland: In 1951 &lt;a href=&quot;https://en.wikipedia.org/wiki/Heinz_Rutishauser&quot; rel=&quot;noreferrer&quot;&gt;Heinz Rutishauser&lt;/a&gt; presents his paper &quot;Automatische Rechenplanfertigung&quot; essentially the first paper describing a practical compiler and a language - &lt;a href=&quot;https://en.wikipedia.org/wiki/Superplan&quot; rel=&quot;noreferrer&quot;&gt;Superplan&lt;/a&gt; - which already showed many signs of the later ALGOL.&lt;/li&gt;&#xA;&lt;li&gt;England: &lt;a href=&quot;https://en.wikipedia.org/wiki/Alick_Glennie&quot; rel=&quot;noreferrer&quot;&gt;Alick Glennie&lt;/a&gt; develops in 1952 the &lt;a href=&quot;https://en.wikipedia.org/wiki/Autocode&quot; rel=&quot;noreferrer&quot;&gt;Autocode&lt;/a&gt; compiler for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Mark_1&quot; rel=&quot;noreferrer&quot;&gt;Manchester Mark 1&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Germany: &lt;a href=&quot;https://en.wikipedia.org/wiki/Friedrich_L._Bauer&quot; rel=&quot;noreferrer&quot;&gt;Friedrich Bauer&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Klaus_Samelson&quot; rel=&quot;noreferrer&quot;&gt;Klaus Samelson&lt;/a&gt; propose the stack as stata structure for subroutines, parameter passing and dynamic storage in 1955 - and received a patent in 1957.&lt;/li&gt;&#xA;&lt;li&gt;Austria: The &lt;a href=&quot;https://en.wikipedia.org/wiki/Mail%C3%BCfterl&quot; rel=&quot;noreferrer&quot;&gt;Mailüfterl&lt;/a&gt; a fully transistorized Computer becomes first partial operational in Vienna.&lt;/li&gt;&#xA;&lt;li&gt;Germany: Siemens finishes in 1956 the first prototype unit of the &lt;a href=&quot;https://de.wikipedia.org/wiki/Siemens_2002&quot; rel=&quot;noreferrer&quot;&gt;2002&lt;/a&gt;, the first fully transistorized computer. Delivery to customers started in 1959.&lt;/li&gt;&#xA;&lt;li&gt;Europe: &lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL_58&quot; rel=&quot;noreferrer&quot;&gt;Algol 58&lt;/a&gt;, is essentially the grand-dad of most modern language from C to Rust, was developed by a group lead by Friedrich L. Bauer (Lead, Germany), &lt;a href=&quot;https://en.wikipedia.org/wiki/Hermann_Bottenbruch&quot; rel=&quot;noreferrer&quot;&gt;Hermann Bottenbruch&lt;/a&gt; (Germany), Heinz Rutishauser(Switzerland), Klaus Samelson (Germany), &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Backus&quot; rel=&quot;noreferrer&quot;&gt;John Backus&lt;/a&gt; (USA) - check their Wiki entries for more work.&lt;/li&gt;&#xA;&lt;li&gt;Germany: An Algol compiler was first implemented in 1958 on the &lt;a href=&quot;https://en.wikipedia.org/wiki/PERM_(computer)&quot; rel=&quot;noreferrer&quot;&gt;PERM&lt;/a&gt; and a &lt;a href=&quot;https://en.wikipedia.org/wiki/Z22_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Z22&lt;/a&gt; - so not just the grand-daddy of most modern compilers, but as well multi platform.&lt;/li&gt;&#xA;&lt;li&gt;USSR: Sergei Sobolev and Nikolay Brusentsov build the &lt;a href=&quot;https://en.wikipedia.org/wiki/Setun&quot; rel=&quot;noreferrer&quot;&gt;Setun&lt;/a&gt;, an electronic &lt;a href=&quot;https://en.wikipedia.org/wiki/Ternary_computer&quot; rel=&quot;noreferrer&quot;&gt;ternary computer&lt;/a&gt;, at the Moscow University. A notable series of 50 machines follow.&lt;/li&gt;&#xA;&lt;li&gt;Italy: Olivetti introduces in 1965 the &lt;a href=&quot;https://en.wikipedia.org/wiki/Programma_101&quot; rel=&quot;noreferrer&quot;&gt;Programma 101&lt;/a&gt;, eventually the first desktop computer.&lt;/li&gt;&#xA;&lt;li&gt;Netherlands: &lt;a href=&quot;https://en.wikipedia.org/wiki/Edsger_W._Dijkstra&quot; rel=&quot;noreferrer&quot;&gt;Edsger Dijkstra&lt;/a&gt; worked on a lot of software problems, but is most known from his 1968 letter &quot;A Case against the GO TO Statement&quot;, published by Niklaus Wirth under the famous title &quot;Go To Statement Considered Harmful&quot;. He first coined the term &lt;em&gt;'Structured Programming'&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Germany: The term &lt;em&gt;'Software Engineering'&lt;/em&gt; was as well coined in 1968 by Friedrich Bauer.&lt;/li&gt;&#xA;&lt;li&gt;Switzerland: &lt;a href=&quot;https://en.wikipedia.org/wiki/Niklaus_Wirth&quot; rel=&quot;noreferrer&quot;&gt;Niklaus Wirth&lt;/a&gt;, best known for developing &lt;a href=&quot;https://en.wikipedia.org/wiki/Pascal_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;PASCAL&lt;/a&gt; in 1970, a simplified ALGOL that became base of many other languages, some dome by him as well. But he was even more influential on compiler teaching which includes his works on metasyntax to describe/teach languages, including &lt;a href=&quot;https://en.wikipedia.org/wiki/Wirth_syntax_notation&quot; rel=&quot;noreferrer&quot;&gt;WSN&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form&quot; rel=&quot;noreferrer&quot;&gt;EBNF&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Chile: During 1971-73 &lt;a href=&quot;https://en.wikipedia.org/wiki/Project_Cybersyn&quot; rel=&quot;noreferrer&quot;&gt;Project Cybersyn&lt;/a&gt; tried for the first time integrated production planing and control using computers and networking.&lt;/li&gt;&#xA;&lt;li&gt;Germany (and USA): Rudolf Bayer (Germany) and Edward McCreight (USA) publish in 1972 the theoretical description of &lt;a href=&quot;https://en.wikipedia.org/wiki/B-tree&quot; rel=&quot;noreferrer&quot;&gt;B-Trees&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;France: The 1973 &lt;a href=&quot;https://en.wikipedia.org/wiki/Micral&quot; rel=&quot;noreferrer&quot;&gt;Micral-N&lt;/a&gt; is the first microprocessor (8008) based ready to use computer.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There is many more. So long story short, there was development all over. Like with any upcomming industry - and later steamrolled and absorbed by the big players ... again like always :))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information the quite informative book &lt;em&gt;&quot;The First Computers: History and Architectures&quot;&lt;/em&gt; by Raul Rojas and Ulf Hashagen, ISBN 978-0262681377. It focuses on &lt;em&gt;very&lt;/em&gt; early developments in the US, Germany, Britain and Japan.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - And trying to cover as many countries as well - so some entries may be lesser marks in history.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-28T11:13:59.447" LastActivityDate="2020-05-28T11:13:59.447" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14940" PostTypeId="2" ParentId="14927" CreationDate="2020-05-26T03:55:15.113" Score="16" Body="&lt;p&gt;Early Unix C compilers were actually a pipeline, preprocessor | compiler | optimizer | assembler &gt; abc.o.  The optimizer was an assembly optimizer, doing things like fixing up things that the compiler took the easy way on, like subroutine entry and exit, and deciding between a short or a long jump (PDP-11s had short conditional branch instructions).  Having used other OSs that required paper tape for intermediate stages, this was quite the revelation.&lt;/p&gt;&#xA;" OwnerUserId="18262" LastActivityDate="2020-05-26T03:55:15.113" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14941" PostTypeId="1" AcceptedAnswerId="14942" CreationDate="2020-05-26T04:01:47.017" Score="2" ViewCount="101" Body="&lt;p&gt;I recently added support for &lt;code&gt;.scl&lt;/code&gt; images files to my Ghidra module which already supported &lt;code&gt;.trd&lt;/code&gt; images. They are both representations of TR-DOS floppy disks as used mainly on Spectrum clones from Russia and East Europe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a few sketchy docs for the &lt;code&gt;.scl&lt;/code&gt; format but &lt;a href=&quot;https://web.archive.org/web/20190901113754fw_/http://www.zx-modules.de/fileformats/sclformat.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one on a lost site in the Web Archive&lt;/a&gt; is the best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In all docs I could find the format is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;signature&lt;/li&gt;&#xA;&lt;li&gt;1-byte field (n below) for the number of files on the image&lt;/li&gt;&#xA;&lt;li&gt;n * 14-byte records for the files, of which the byte at offset 13 is the number of sectors&lt;/li&gt;&#xA;&lt;li&gt;x * 256-byte records for disk sectors used by each file in the directory, in order&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Very very simple. There's no padding or alignment. It's not even a full image representing all tracks and sectors, just those used by the files. It's a read-only image format. Emulators typically transform an &lt;code&gt;.scl&lt;/code&gt; image into a &lt;code&gt;.trd&lt;/code&gt; image to use it, which is a full image format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when I implemented it I found that the number of bytes I was consuming was not the entire length of the image file. Since some sectors contained repeated garbage between the end of the file data and the end of the sector data I thought I had it all wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally I realized I actually did have it right and I could read all the files correctly with my code, but that there really were more bytes in the files after all, than what seemed to be needed according to the docs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turned out that all the &lt;code&gt;.scl&lt;/code&gt; files I had downloaded had precisely 4 extra bytes at the end. I could not recognize any pattern in the values of the bytes. Trimming the bytes off did not cause any apparent errors loading any of the files from the images into the Fuse Spectrum emulator. New &lt;code&gt;.scl&lt;/code&gt; files created by Fuse also have it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I did try looking at the Fuse code for &lt;code&gt;.scl&lt;/code&gt; files, but I'm no longer that great at perfectly understanding source code in the wild.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody know if these four bytes are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;totally spurious?&lt;/li&gt;&#xA;&lt;li&gt;an optional extension introduced by one emulator but not needed?&lt;/li&gt;&#xA;&lt;li&gt;actually needed but I missed something in the docs and I'm either missing the error or there is no error and resulting glitches are very subtle and don't happen to cause crashes?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If &lt;code&gt;.scl&lt;/code&gt; files are mostly made by the same software, or copy-pasted code from the same source, and cause no ill-effects, then it would make sense.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-05-26T12:21:11.950" Title="Are the last 4 bytes in .SCL disk image files for Spectrum clones meaningful or spurious?" Tags="&lt;file-format&gt;&lt;disk-image&gt;&lt;zx-spectrum-clones&gt;&lt;tr-dos&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14942" PostTypeId="2" ParentId="14941" CreationDate="2020-05-26T05:57:04.437" Score="4" Body="&lt;p&gt;Look carefully at the docs again (Web Archive one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;The file bodies are stored after the directory entries.&#xA;Basic program and data array files have an addition at the end of the file.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is basic program, there are 4 bytes: 2 fixed values 127,170 and autostart line number 0.. 9999.&#xA;If it is data array, there are also 4 bytes: 2 fixed values 127,170, 1 byte unused and 1 byte specifying variable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is very possible that for other files there are also 4 bytes appended for code simplicity/symmetry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have looked at Fuse emulator source codes (&lt;a href=&quot;https://sourceforge.net/p/fuse-emulator/fuse/ci/master/tree/peripherals/disk/disk.c#l2636&quot; rel=&quot;nofollow noreferrer&quot;&gt;sourceforge.net/p/fuse-emulator&lt;/a&gt;), function write_scl( FILE *file, disk_t *d ) ).&#xA;It's seems that 4 bytes at end are actualy checksum of all file data. Algorithm is quite simple:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SUM = 597;  /* sum of &quot;SINCLAIR&quot; */&#xA;for(b in data) {&#xA;  sum += b;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and then write sum in big endian order:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; head[0] = sum &amp;amp; 0xff;&#xA; head[1] = ( sum &amp;gt;&amp;gt; 8 ) &amp;amp; 0xff;&#xA; head[2] = ( sum &amp;gt;&amp;gt; 16 ) &amp;amp; 0xff;&#xA; head[3] = ( sum &amp;gt;&amp;gt; 24 ) &amp;amp; 0xff;&#xA; fwrite( head, 4, 1, file ) &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11331" LastEditorUserId="11331" LastEditDate="2020-05-26T12:21:11.950" LastActivityDate="2020-05-26T12:21:11.950" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14943" PostTypeId="2" ParentId="14931" CreationDate="2020-05-26T07:52:11.333" Score="14" Body="&lt;p&gt;Acorn Computers in the UK, who later became ARM and are responsible for the vast majority of the CPUs out there today that aren't in desktops or servers, are very well documented.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2020-05-26T07:52:11.333" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14944" PostTypeId="2" ParentId="14931" CreationDate="2020-05-26T08:09:05.650" Score="8" Body="&lt;p&gt;Sweden had BARK (relay-based, more a dataflow hardware than a &quot;runs code&quot; computer, from what I understand), BESK[1] (IAS-type architecture, inspired SMIL and DASK (Denmark)) and the D-series of machines from SAAB. May indirectly also have inspired the Censor machines (from Standard Radio &amp;amp; Telefon, eventually merged into DataSAAB), but that is not entirely clear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the hobby side, the LYS-16 was designed at Lysator (released late 1975, went into  commercial production until 1978).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] Coolest thing I can think of from the BESK project was having an active feedback loop for controlling the brightness on the Williams tubes. Increased the reliability of the storage tubes by an order of magnitude.&lt;/p&gt;&#xA;" OwnerUserId="3842" LastActivityDate="2020-05-26T08:09:05.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14946" PostTypeId="2" ParentId="14756" CreationDate="2020-05-26T10:12:30.667" Score="0" Body="&lt;p&gt;I know that SAS statistical software utilises those three things. I guess you would call it a pseudocode?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PROC is a command for 'ready to use' procedures, like proc tables, proc univariate, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a LABEL statement in a DATA step permanently associates labels with variables by affecting the descriptor information of the SAS data set that contains the variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DCL (DECLARE) statement declares a variable of any SCL (SAS Component Language) data type.  &lt;/p&gt;&#xA;" OwnerUserId="18268" LastActivityDate="2020-05-26T10:12:30.667" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14947" PostTypeId="1" CreationDate="2020-05-26T11:29:44.763" Score="5" ViewCount="272" Body="&lt;p&gt;I'm trying to install a 68060 accelerator on an Amiga 3000T, but I cannot figure out the correct jumper settings.  The information I've found online is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;J100 CLK90 Delay jumper. This Jumper has three positions. In position 1-2 it sets up CLK90 for 25Mhz operation. In Position 2-3 CLK90 is set up for 16Mhz operation. In position 3-4 the EXT90 line drives CLK90, rather than the on-board clock logic.&#xA;J102 Board Clock. This jumper has two positions. In position 1-2 the sorce for CPUCLKa and CPUCLKb must be EXTCPU. In position 2-3 it shorts the 68030 and local bus clock sources, such that CPUCLKa and CPUCLKb and CLK30 all all derive from the same source, which is either EXTCPU or the clock based on the local logic, depending on the state of J104.&#xA;J103 FPU Chip select jumper. This jumper has three positions. In position 1-2 it disables the onboard FPU. In position 2-3 it causes the 68030 to get F-line traps instead of the FPU transaction and in position 3-4 it enables the onboard FPU.&#xA;J104 CPU CLOCK. This jumper has two positions. In position 1-2 the source for CLK30 is derived from the on-board clock generator. In position 2-3 the source for CLK30 must come from EXTCLK by by way of J102.&#xA;J105 System clock disable. In the 2-3 position this jumper allows DIS_CLKS line from the local bus slot to operate normally. In the 1-2 position it forces DIS_CLKS high (asserted) disabling on-board system clock generation.&#xA;J106 CLK90 short jumper. In the 2-3 position there are two versions of CLK90. The system normally runs this way. In the 1-2 position the two CLK90 lines are shorted toghether to allow a single line to source both clocks.&#xA;J107 68030 Clock disable. In the 2-3 position this jumper allows the DIS_CLK30 line from the local bus slot to operate normally. In the 1-2 position it forces DIS_CLK30 high (asserted) disabling on-board 68030 clock generation.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(From &lt;a href=&quot;http://eab.abime.net/showthread.php?t=33474&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://eab.abime.net/showthread.php?t=33474&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I don't know what that means. I'd rather not risk a 30 year old machine and an $800 board.&lt;/p&gt;&#xA;" OwnerUserId="13803" LastEditorUserId="11916" LastEditDate="2020-06-02T03:57:13.370" LastActivityDate="2020-06-04T14:49:36.850" Title="What are the needed jumper settings for a 68060 accelerator for an Amiga 3000T?" Tags="&lt;amiga&gt;&lt;amiga-3000&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14948" PostTypeId="2" ParentId="14931" CreationDate="2020-05-26T12:46:41.080" Score="14" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14936/578&quot;&gt;Raffzahn's answer&lt;/a&gt; contains a list of &quot;firsts&quot;, so I will try to come up with a list of &quot;mosts&quot;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;Norway&lt;/em&gt;: The most popular Programming Paradigm today is Object-Oriented Programming. The &lt;em&gt;name&lt;/em&gt; &quot;Object-Oriented Programming&quot; was coined by Alan Kay at Xerox PARC in Palo Alto, California, but the &lt;em&gt;paradigm&lt;/em&gt; was invented by Ole-Johan Dahl and Kristen Nygaard in their language Simula in 1962 at the Norwegian Computing Center of the University of Oslo, Norway.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Norway&lt;/em&gt;: One of the most popular Patterns for structuring the architecture and design of interactive applications is &lt;em&gt;Model-View-Controller&lt;/em&gt; or one of its many variations. MVC was created by Trygve Reenskaug. Technically, he wrote it down in 1979 in America, while visiting the Smalltalk team at Xerox PARC, but he had created and used it before that.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;UK&lt;/em&gt;: As already mentioned in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14943/578&quot;&gt;Alan B's answer&lt;/a&gt;, most general-purpose CPUs nowadays are ARM CPUs of some form or another. (By &quot;general purpose&quot;, I don't mean &quot;desktop&quot; or &quot;server&quot;, although ARM is also making inroads on the desktop, and thanks to the popularity of consumer home media servers and the Raspberry Pi also for home servers. I mean &quot;not DSP, not GPU, not microcontroller, not ASIC&quot;.) ARM was developed by British company Acorn in 1983. ARM-based chips power practically every smartphone, most tablets, many ultra lite notebooks, a significant portion of home networking equipment from routers to WiFi APs to media servers to NAS devices, and even a very small number of Android-based desktops, plus Raspberry Pis and many of its competitors, and many of the more high-powered IoT devices. Also, many &quot;smart&quot; media devices such as TVs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Sweden&lt;/em&gt;: The Erlang Programming Language, one of the most-hyped programming languages in the late 2000s–early 2010s was designed at Ericsson, starting in 1986. It powers many of Ericssons products in the telephony, GSM, GPRS (2G), UMTS, HSDPA (3G), LTE (4G) space. It is also used by Nortel and T-Mobile. Erlang powers WhatsApp, GitHub, and many other services.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Netherlands&lt;/em&gt;: Guido van Rossum designed Python, one of the most popular programming languages, during the 1980s, with a first public implementation in 1991.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These two happened slightly after the time period you specified:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;Finland&lt;/em&gt;: Linux, the Operating System used by most servers, most smartphones, and many network and IoT devices, was started in 1991 in Helsinki, Finland by Linus Torvalds.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Japan&lt;/em&gt;: Ruby, one of the most-hyped programming languages of the late 2000s–early 2010s, was designed by Yukihiro Matsumoto in early 1993.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And a list of &quot;honorable mentions&quot; that doesn't really fit into the category of &quot;most&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;Tony Hoare&lt;/em&gt; (UK): Important contributions to Program Verification (e.g. Hoare Logic), Concurrency (Communicating Sequential Processes), Programming Languages (served on the ALGOL 60 and 68 committees), Algorithms (Quicksort and Quickselect). He is also famous for blaming himself for inventing the NULL Reference, which he calls his &quot;billion dollar mistake&quot;, alluding to an estimate of the cost caused by uncaught null pointer dereferences.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Christopher Strachey&lt;/em&gt; (UK): Important contributions to Functional Programming, Programming Language Theory, and Type Theory. Described the difference between and coined the terms for Parametric Polymorphism and Ad-Hoc Polymorphism. One of the founders of Denotational Semantics.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Phil Wadler&lt;/em&gt;: (UK): many contributions to Haskell, Functional Programming, and Type Theory. Introduced Monads into the world of programming. Co-designed Java Generics.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Peter Landin&lt;/em&gt; (UK): many contributions to Functional Programming, Programming Language Theory, and Type Theory. Created ISWIM, for which he invented the &quot;off-side rule&quot; (block structure is defined by indentation instead of keywords or delimiters), which is used in languages such as Miranda, Haskell, Occam-&amp;pi;, Python, Boo, Scala 3, and F# (in &quot;light mode&quot;).&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Luca Cardelli&lt;/em&gt; (Italy): countless and major contributions to Type Theory and Operational Semantics. Coined the term &lt;em&gt;Typeful Programming&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Simon Peyton-Jones&lt;/em&gt; (UK): One of the principal designers of Haskell, and one of the principal designers and implementers of GHC, the Glorious Glasgow Haskell Compiler.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Erik Meijer&lt;/em&gt; (Netherlands): Important contributions to the design of Haskell. Most well-known for his work at Microsoft in Redmond, though (worked on the design of VBScript, C#, VisualBasic.NET, and the .NET BCL, principal designer of LINQ and Rx.NET).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note that, while some of the major contributions I listed were after the OP's timeframe or in the US, all of the people mentioned made at least one major contribution during the timeframe of the OP outside of the US.&lt;/p&gt;&#xA;" OwnerUserId="578" LastEditorUserId="578" LastEditDate="2020-05-26T15:34:12.973" LastActivityDate="2020-05-26T15:34:12.973" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14949" PostTypeId="2" ParentId="5642" CreationDate="2020-05-26T14:41:26.420" Score="0" Body="&lt;p&gt;The 30 second rule was supposed to help protect against viruses. Some viruses would hook into the boot sequence to survive a reset. By turning the machine off for 30 seconds you could be sure that they were erased from RAM. The contents of RAM can survive for a short time without power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember reading this advice in some Amiga magazines. At the time so-called bootblock viruses were common. The Amiga uses a boot block on floppy disks which contains executable code to help the machine start up, so were a prime target for viruses. Once the virus was loaded it would often overwrite the bootblock on any disk inserted with a copy of itself, so the advice was to keep important disks write protected and to turn your machine off for 30 seconds when switching between games or self-booting apps just in case.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-05-26T14:41:26.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14950" PostTypeId="2" ParentId="14931" CreationDate="2020-05-26T14:42:13.233" Score="4" Body="&lt;p&gt;You might want to look up books by Edsger Dijkstra, from the Netherlands.  He was instrumental in the development of structured programming.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also,  books by Niklaus Wirth, developer of Pascal.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Computers and Thought&lt;/em&gt; by Feigenbaum and Feldman has several articles about the work of Alan Turing,  although a lot of it is about work done in the US.   &lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2020-05-26T14:42:13.233" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14951" PostTypeId="2" ParentId="14931" CreationDate="2020-05-26T14:55:13.857" Score="6" Body="&lt;p&gt;It only just squeezes in to your timeline, but I can't let this question go without mentioning &lt;a href=&quot;https://en.wikipedia.org/wiki/Psion_(company)&quot; rel=&quot;noreferrer&quot;&gt;Psion&lt;/a&gt; in the UK, who invented the PDA with their &lt;a href=&quot;https://en.wikipedia.org/wiki/Psion_Organiser&quot; rel=&quot;noreferrer&quot;&gt;Organiser&lt;/a&gt;, and later the &lt;a href=&quot;https://en.wikipedia.org/wiki/Psion_Series_3&quot; rel=&quot;noreferrer&quot;&gt;Series 3&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Psion_Series_5&quot; rel=&quot;noreferrer&quot;&gt;Series 5&lt;/a&gt; palmtops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Their legacy includes the &lt;a href=&quot;https://en.wikipedia.org/wiki/Symbian&quot; rel=&quot;noreferrer&quot;&gt;Symbian&lt;/a&gt; smartphone platform, which was a direct descendant of the Psion software stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The (very long) article at The Register: &lt;a href=&quot;https://www.theregister.co.uk/2007/06/26/psion_special/&quot; rel=&quot;noreferrer&quot;&gt;Psion: the last computer&lt;/a&gt; goes into a lot of the background, both technical and political, behind the creation of the Series 5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I still use my 22-year-old 5mx most days — and still regret their sudden exit from the consumer market.  It was remarkable for its time, and in a couple of respects modern phones still haven't quite caught up.)&lt;/p&gt;&#xA;" OwnerUserId="10387" LastActivityDate="2020-05-26T14:55:13.857" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14952" PostTypeId="2" ParentId="14927" CreationDate="2020-05-26T14:58:13.900" Score="10" Body="&lt;p&gt;I think that some of the existing answers are using the modern state of development ecosystems to address the state of things in the &quot;retro&quot; time.  I don't recall using anything other than a.out format until the mid-90s, and the switch was driven by shared libraries (which I wouldn't call retro).  You need to think in terms of not being able to download prebuilt binaries; if you were lucky you could download source but often times you may have had to request a QIC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experience (which I will admit is skewed more toward specialized systems and less towards general computing), compilers used external assemblers and linkers because they already existed, plain and simple. Debugging was slow enough with dbx/gdb, so why risk needing to maintain your own when someone else had already done the work.  It also means that working towards a fully bootstrapped compiler (ie, a compiler written in the target language), was easier since there was less to bootstrap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a practical standpoint, it also meant being able to work with buggy compilers (and optimizers), by being able to look at the intermediate asm and patching it.  And in some cases, prototype code was worked out at a high language, asm generated, and then the asm was hand optimized for cases where you could work around language semantics or if the compiler didn't &quot;get&quot; what you were trying to accomplish.  For example, some later gen processors with 32-bit ALUs would support 64-bit math for certain operations (maybe MC68040?) that the compiler would never output.&lt;/p&gt;&#xA;" OwnerUserId="11594" LastActivityDate="2020-05-26T14:58:13.900" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14953" PostTypeId="2" ParentId="14931" CreationDate="2020-05-26T16:46:28.853" Score="4" Body="&lt;p&gt;Also well worth reading:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Turing's Cathedral, by George Dyson&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which describes the peculiarly unknown actual origins of the digital computer at Princeton. An excellent read. I'm guessing the connections between Turing's mechanical computers and the American digital computer re-implementation of Turing's bomb, and the subsequent translation of the American digital bomb into actual digital computers has been obscured by classification for much of our lifetimes. It is an extraordinary story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;John Von Neumann (Hungarian-American) plays a foundational role in Princeton's MANIAC computing group. &lt;/p&gt;&#xA;" OwnerUserId="18280" LastActivityDate="2020-05-26T16:46:28.853" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14954" PostTypeId="2" ParentId="6006" CreationDate="2020-05-26T17:26:08.740" Score="1" Body="&lt;p&gt;My Z88 is a SCI UK Ltd, Made in Scotland model with the serial number #0059854.&lt;/p&gt;&#xA;" OwnerUserId="18283" LastActivityDate="2020-05-26T17:26:08.740" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14955" PostTypeId="2" ParentId="14927" CreationDate="2020-05-26T17:59:20.480" Score="3" Body="&lt;p&gt;I don't know exactly when it started, but &lt;a href=&quot;https://en.wikipedia.org/wiki/Portable_C_Compiler&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; says:-&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;The first C compiler&lt;/strong&gt;, written by Dennis Ritchie, used a recursive&#xA;  descent parser, incorporated specific knowledge about the PDP-11, and&#xA;  relied on an optional machine-specific optimizer to improve the&#xA;  assembly language code it generated. In contrast, Johnson's pccm was &#xA;  based on a yacc-generated parser and used a more general target machine model.&#xA;  Both compilers &lt;strong&gt;produced&lt;/strong&gt; target-specific &lt;strong&gt;assembly language&lt;/strong&gt; code which they then &#xA;  assembled to produce linkable object modules. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most compilers are not capable of creating &lt;em&gt;all&lt;/em&gt; the code required to produce a complete program from high level source only, so some assembly is required anyway. If you need an assembler for producing startup files and inline assembly code etc. anyway, why not use it? Or just use an existing assembler and save work on the compiler package. This becomes even more useful when the compiler needs to target different CPUs that may have similar assembly language but quite different machine codes.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another reason for having a separate assembly phase is that it guards against the compiler producing invalid machine code. If the compiler produces the machine code directly then it is responsible for every detail of the encoding, which is easy to get wrong when nothing is checking it &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen some real clangers in directly compiled code for the Amiga - things like incorrect encoding that crashes later CPUs, jumps into the middle of instructions, instructions with blank register lists that are effectively no-ops, and 'junk' code that was apparently meant to be for alignment - all stuff that a good assembler would would have flagged (and much harder to fix when the machine code is produced by direct manipulation of bits by the compiler).&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-05-26T17:59:20.480" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14956" PostTypeId="2" ParentId="14927" CreationDate="2020-05-26T18:09:28.247" Score="6" Body="&lt;p&gt;Turbo Pascal was made famous specifically because it skipped the assembly step (as well as most of the linking step). In a single pass it created raw, absolute located binary code and saved a lot of time. This is one aspect that made Turbo particularly fast. Action! on the Atari was very similar.&lt;/p&gt;&#xA;&lt;p&gt;The time was saved mostly by skipping the I/O, especially to the then glacially slow and low capacity floppy drives of the day.&lt;/p&gt;&#xA;&lt;p&gt;Compiling to assembly removed a litany of issues from the compiler. The compiler could pretty much blindly emit opcodes and pseudo-opcodes. The assembler and linker were joined at the hip, having to work with the shared experience of managing an object file, which contained both binary code, symbols, and relocation information.&lt;/p&gt;&#xA;&lt;p&gt;Since the assembler and linker are so closely entwined, the assembler acts as a level of abstraction between the compiler and linker. This also allows the assembler and linker to diverge and improve apart from the compiler. As object file formats evolved, the compilers had to at best make only minimal changes (to perhaps update the meta data as manifest by assembler pseudo ops). Whereas were the compilers writing object files directly, then now all of them have to be updated as the linkers et al improve.&lt;/p&gt;&#xA;&lt;p&gt;Turbo Pascal was able to target the very simple system that is CP/M, with its absolute memory layout and not need many of problems that a linkage step solved. Turbos solution to code reuse was simply the include file (and they sold several Toolboxes of utility source code to incorporate directly in to you applications rather than precompiled binary code that could be linked).&lt;/p&gt;&#xA;&lt;p&gt;It wasn't until Turbo Pascal 4 that Turbo actually started to involve a formal conventional link step in to the process (via the addition of Units).&lt;/p&gt;&#xA;&lt;p&gt;Addenda for comment:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;most practical programs would be small enough to be handled by a&#xA;single-shot build.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Simply put &amp;quot;small enough&amp;quot; is solely dependent on the speed of the machine doing the build. Linking pre-compiled objects is faster than compiling source code. At some point, the time it takes to incrementally rebuild and link a final executable will be faster than recompiling everything, all the time. As machines got faster, the size of that program grew. But machines were not always fast.&lt;/p&gt;&#xA;&lt;p&gt;Back in the day, Moria (a dungeon crawl &amp;quot;roguelike&amp;quot; game) was distributed on DECUS tapes in source and binary. The source was 22,000 lines of VAX Pascal. Our tiny VAX 11/730, on which we did a remarkable amount of daily work (with up to 10 users), simply could not compile that program before the universe achieved heat death (at least it felt that way). Were it built as a bunch of modules that were linked together, we might have had a chance to dabble with it. But on our machine, it wasn't practical.&lt;/p&gt;&#xA;&lt;p&gt;However, on the authors machine, a VAX 8600 (far far bigger), it was, demonstrably, not an issue. Since it wasn't an issue, he never bothered to break the program up. If he had, then maybe (maybe) we'd have had a remote chance of being able to build and iterate and play with the source code.&lt;/p&gt;&#xA;&lt;p&gt;You also have to consider other aspects. When doing development on a large program on a PDP-11/70, my friend and I would have 3 terminal sessions open. One to run the program, one to edit the program, and one to compile the program.&lt;/p&gt;&#xA;&lt;p&gt;We did that simply because getting in and out of the editor was glacial due to the size of our file. When it started up, the editor (on our 1200 baud terminal...) even noted &amp;quot;Loading xxx.yyy slowly...&amp;quot;, and it wasn't kidding. Even then we still had to manually page blocks in and out of active memory. It would have been awful if we had to weather reloading that editor every compile cycle. Compile time alone was bad enough if a simple typo slipped in.&lt;/p&gt;&#xA;&lt;p&gt;I can't say whether we could have done multiple source files with incremental build and link for our program or not -- we were just college students bumbling our way through it. I don't even know if it was possible with that particular dev environment (probably, but we may not have got that far in to the back of the manual). But it just stands as an example that highlights how small the definition of &amp;quot;small enough&amp;quot; can truly be, and how fast one can outgrow the tools.&lt;/p&gt;&#xA;&lt;p&gt;Oh, just how big WAS our program? 35K of source code.&lt;/p&gt;&#xA;&lt;p&gt;All of these tools were built to facilitate productivity, and the domain of those tools was REALLY BAD hardware. It's amazing anything was accomplished at all in hindsight, but that's just looking backward with jaded eyes.&lt;/p&gt;&#xA;&lt;p&gt;I ran the compile/assemble/link cycle on a C environment for the Atari 800 — once. It was completely unusable it took so long.&lt;/p&gt;&#xA;&lt;p&gt;I have a current Turbo Pascal project, it's around 1200 lines of code. It's in several include files. On a simulator, running a simulated 4Mhz CPU, this takes 1-2 minutes to build. But, while the CPU is simulated at 4MHz, the I/O is my &amp;quot;XXX Gbps&amp;quot; hardware, vs 2000 Bps (if we're lucky) floppy drive. It would be even slower on a &amp;quot;real machine&amp;quot;, since it has to read all of the files and write the final .COM file each build, vs normal Turbo compiling a memory based program in to a memory based executable. 1–2 minutes isn't bad. Human scale, it's ok. But 10 lines per second? Nothing to brag about. But in the end I have no choice because of how TP is structured and its feature set. This will not get any faster outside of porting to something else, and who knows at what point that would be.&lt;/p&gt;&#xA;&lt;p&gt;It's not 20 minutes, thank heavens for that.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="585" LastEditDate="2021-04-26T19:48:17.453" LastActivityDate="2021-04-26T19:48:17.453" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="14959" PostTypeId="2" ParentId="14927" CreationDate="2020-05-27T13:11:38.360" Score="0" Body="&lt;p&gt;Assembler output can help with debugging. The compiler can annotate the assembler with comments that help the programmer and the debugger relate instructions back to the higher level language statements. Some of it is simple quality-of-life stuff like giving numbers in both decimal and hexadecimal bases, right up to writing the actual high level statements in comments next to the assembly code that implements them.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-05-27T13:11:38.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14960" PostTypeId="2" ParentId="14927" CreationDate="2020-05-27T15:40:04.367" Score="3" Body="&lt;p&gt;Could this be when the &quot;middle-end&quot; was created? (&quot;Front-end&quot; = lexing, parsing, analysis and &quot;back-end&quot; = compiling to machine code.) With the &quot;middle-end&quot; the idea was to have an &lt;strong&gt;Intermediate Representation&lt;/strong&gt; of the code. That way you can break the process into escapulated steps, with the IR as a bridge between the two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can focus on turning your IR into platform specific code as a separate tasks, rather than something you need to think about from the beginning when examining the source code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tf4Z7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tf4Z7.png&quot; alt=&quot;From &amp;quot;Crafting Interpreters&amp;quot; by Bob Nystrom&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Image from &quot;&lt;a href=&quot;https://craftinginterpreters.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Crafting Interpreters&lt;/a&gt;&quot; by Bob Nystrom)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see where the IR sits in the process of going &quot;up&quot; and &quot;down&quot; the &#xA; compiler mountain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm no expert, this is just a guess that ASM is being used as the IR?&lt;/p&gt;&#xA;" OwnerUserId="4269" LastActivityDate="2020-05-27T15:40:04.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14961" PostTypeId="2" ParentId="14931" CreationDate="2020-05-27T16:25:06.577" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Prolog&quot; rel=&quot;nofollow noreferrer&quot;&gt;Prolog&lt;/a&gt; was first developed and implemented in Europe (initial development in Marseille, France and greatly improved in Edinburgh, Scotland). The contemporary king of the hill is &lt;a href=&quot;https://www.swi-prolog.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SWI-Prolog&lt;/a&gt;, developed in Amsterdam, Netherlands; headed by &lt;a href=&quot;https://www.cs.vu.nl/~janw/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jan Wielemaker&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="475" LastActivityDate="2020-05-27T16:25:06.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14962" PostTypeId="2" ParentId="14931" CreationDate="2020-05-27T16:40:59.593" Score="3" Body="&lt;p&gt;Modelling and design of complex systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Ivar Jacobson&lt;/em&gt; which while a student, later in his work at LME (Ericsson) and in his PhD described what today is a big part of Object orientation and modelling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scandinavia is also well known for the concept of &lt;em&gt;Participatory design&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design of the AXE exchange with its language is also particular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would autopilots for an ASM (Rb04) count ?&lt;/p&gt;&#xA;" OwnerUserId="15497" LastActivityDate="2020-05-27T16:40:59.593" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14963" PostTypeId="2" ParentId="14931" CreationDate="2020-05-27T17:52:41.173" Score="4" Body="&lt;p&gt;The history of the Soviet computer industry is very interesting - especially before the decision to copy S / 360 in the early 1970s. But there are far fewer English texts about it than the scale and significance of the phenomenon deserves.&#xA;You can try reading the translated materials on this site - &lt;a href=&quot;https://computer-museum.ru/english/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://computer-museum.ru/english/&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2020-05-27T17:52:41.173" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14964" PostTypeId="2" ParentId="14918" CreationDate="2020-05-27T17:53:47.990" Score="2" Body="&lt;p&gt;Many 6502 programs exploit the ability to patch program instructions at runtime.  If a program will have to perform a subtraction within a loop, being able to say, e.g.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ; Compute value in X somehow, then...&#xA;    stx subPatch+1&#xA;    ; Now compute a different value in A and set carry&#xA;subPatch:&#xA;    sbc #0&#xA;    bcs subPatch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;is more convenient than it would be if code had to XOR the value with $FF before storing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note also that the processing &quot;SBC #imm&quot; involves two sets of logic: the immediate-operand-fetch logic which is shared with the six other valid opcodes sharing bit pattern (xxx0 1001) and the &quot;subtract with carry instruction&quot; logic which is shared with the seven other opcodes having the bit pattern (111x xx01).  There are some instructions in the memory map which have their own &quot;oddball&quot; logic (for example, seven immediate-mode instructions have the bit pattern xxx01001 which is shared by no other instructions, three likewise have 1xx0 0000, two have 1x10 0100, and has xxxx 0010), making opcode E9 behave as &quot;SBC #imm&quot; requires less circuitry than would having it behave in any other consistent fashion.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2020-05-28T14:50:12.620" LastActivityDate="2020-05-28T14:50:12.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14965" PostTypeId="1" CreationDate="2020-05-27T19:30:12.333" Score="12" ViewCount="1712" Body="&lt;p&gt;I have a working (I think) Amiga 500 system with an internal DF0 drive and an external DF1 drive. The Amiga 500 powers up with Workbench v1.3.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone tell me how to access a game disc (Marble Madness)?&lt;br&gt;&#xA;Does it go in DF1 or do I swap out DF0?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is new to me and I would appreciate any basic comments on how to do this.&lt;/p&gt;&#xA;" OwnerUserId="18301" LastEditorUserId="11916" LastEditDate="2020-06-02T03:57:35.710" LastActivityDate="2020-08-11T08:19:20.663" Title="Should I use the internal or external drive for loading Amiga 500 games?" Tags="&lt;amiga&gt;&lt;disk-drive&gt;&lt;amiga-500&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14966" PostTypeId="2" ParentId="14965" CreationDate="2020-05-27T19:48:36.757" Score="25" Body="&lt;p&gt;Amiga 500 1.3 machine only boots on drive 0 (DF0:) by default.&lt;/p&gt;&#xA;&lt;p&gt;There are programs that make it able to boot on DF1: but they're not really interesting because a lot of games either:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;have physical copy protection (even cracked copies can have some bits remaining and demand a disk in drive 0)&lt;/li&gt;&#xA;&lt;li&gt;have non-OS compliant track loader which only searches the disk in drive 0. No software can redirect them to drive 1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;2 drives is an asset anyway, because a lot of 2 or 3 disked games take advantage of the second drive, and you don't have to swap disks, or you swap less often. Be aware that in some rare cases, you have to disconnect the external drive if you're short in memory (second drive needs memory of its own for disk buffers)&lt;/p&gt;&#xA;&lt;p&gt;Marble Madness (original) uses a disk protection and requires to run on DF0:. If you have a properly cracked copy, it could boot from DF1: because the game is almost fully OS-compliant (and thus uses AmigaDOS to load the data in memory). The game also only requires 512k of memory, so it will run on your machine even if it's unexpanded (many &amp;quot;more recent&amp;quot; games require 1MB memory)&lt;/p&gt;&#xA;&lt;p&gt;What often happens is that unit 0 (DF0:) wears off with the time and eventually can cease to work because it's used a lot (hence the bootswap program to use drive 1 when possible). Changing an external drive is easy (well, if you can find a second hand drive, there's no case opening involved), but changing an internal drive requires more maintenance, and also to find an internal drive (I've replaced mine years ago by a A1200 internal one, which is shorter so I used a piece of lego to create an eject button).&lt;/p&gt;&#xA;&lt;p&gt;Nowadays, most people who have their drives broken now use a &lt;a href=&quot;https://amigastore.eu/323-usb-floppy-emulator-gotek.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gotek floppy emulator&lt;/a&gt; which uses disk images on a SD card.&lt;/p&gt;&#xA;&lt;p&gt;There are also cheap accelerator/hard drive boards available to expand your A500 and speed up loading (like &lt;a href=&quot;https://icomp.de/shop-icomp/en/shop/product/ACA500plus.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ACA500&lt;/a&gt;) by being able to install your games on a SD card (and use &lt;a href=&quot;http://www.whdload.de/&quot; rel=&quot;nofollow noreferrer&quot;&gt;WHDLoad&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Note: &lt;em&gt;Apart from participating to the whdload project, I'm not affiliated to the linked products or stores in any way&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-08-11T08:19:20.663" LastActivityDate="2020-08-11T08:19:20.663" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14967" PostTypeId="2" ParentId="14965" CreationDate="2020-05-27T20:10:52.170" Score="11" Body="&lt;p&gt;The Amiga 500 has a very console-like experience for the most part when it comes to games. Treat DF0:, the internal drive, like you would the cartridge slot of a Super NES or a Sega Genesis. &lt;strong&gt;Just put your game into the internal drive and let the Amiga boot from it.&lt;/strong&gt; :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can either leave the game in the drive and power the machine on, or alternatively you can power the machine on first, wait, and insert your game when the 'Workbench hand' appears. This screen doesn't literally mean you have to insert Workbench, by the way, it means &lt;strong&gt;you can insert any bootable disk&lt;/strong&gt;. Almost all games and software will boot from this screen, when inserted into the internal drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For games that support multiple disk drives, such as &lt;em&gt;The Secret of Monkey Island&lt;/em&gt; or &lt;em&gt;Superfrog&lt;/em&gt;, first power off your computer, attach any drives you have available, then power on the machine. Insert Disk 1 into the internal drive and the game will start. Since &lt;em&gt;Monkey Island&lt;/em&gt; comes on multiple disks, it will occasionally ask you to insert a specific numbered disk into any drive. You can eject and swap disks during gameplay &lt;strong&gt;only when the game asks you to&lt;/strong&gt;. Many games won't recognise a second drive. It's not a hardware fault: they're simply not programmed to use it. If nothing happens when you put Disk 2 into the external drive when prompted in a game (wait several seconds first for the disk change to be acknowledged, or try pressing Fire), try the internal drive instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are relatively few games that run under Workbench in the same way you'd play something like Minesweeper under Windows. Most games expect full control of the computer, and skip Workbench entirely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The few games that do allow installation, like simulations (&lt;em&gt;Sim City&lt;/em&gt; comes to mind), strategies, wargames, do allow you to install the game to the hard drive, where you can launch it from Workbench from an icon like the 'Say' application. Check the manuals for these games for how to install them; every game is different, though most games that are installable show up as a disk icon in Workbench, containing an installer icon somewhere inside.&lt;/p&gt;&#xA;" OwnerUserId="17826" LastEditorUserId="17826" LastEditDate="2020-05-27T21:07:04.763" LastActivityDate="2020-05-27T21:07:04.763" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="14969" PostTypeId="1" CreationDate="2020-05-28T03:33:55.343" Score="-4" ViewCount="154" Body="&lt;p&gt;It's look like very old thing to me: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KnoGb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KnoGb.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's in Black and White display. As you can see, it has a socket on the top of it .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the name and model of this computer monitor? &lt;/p&gt;&#xA;" OwnerUserId="18309" LastEditorUserId="8712" LastEditDate="2020-05-28T13:55:49.763" LastActivityDate="2020-05-28T14:26:56.673" Title="What's the name and model of this computer monitor?" Tags="&lt;crt-monitor&gt;&lt;display&gt;&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14970" PostTypeId="1" CreationDate="2020-05-28T04:32:08.663" Score="5" ViewCount="207" Body="&lt;p&gt;I bought an LC 475 for parts and repair on ebay. When it arrived it seemed to work okay but the video was all stripey. After some diagnosing I spotted a rotten trace near the the VRAM simms. I repaired the rotten trace with a jumper and I got my video working. But now I've got chimes of death.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Removing the the ram upgrade fixes the chimes of death and allows the machine to boot. However when I reinstall the ram (or known working ram from other machines) I'm back to death chimes and no video (I don't even get a sad mac with a hex code)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've hunted for other rotten traces on the board, but I'm not having any luck. What should I try next? (It's so frustrating that this was working. I've traded one problem for another.)&lt;/p&gt;&#xA;" OwnerUserId="2187" LastEditorUserId="2187" LastEditDate="2020-05-29T16:17:18.227" LastActivityDate="2020-05-29T16:17:18.227" Title="Why is my Macintosh LC 475 playing chimes of death when I install more ram?" Tags="&lt;apple-macintosh&gt;&lt;troubleshooting&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14971" PostTypeId="1" AcceptedAnswerId="14988" CreationDate="2020-05-28T04:55:06.580" Score="0" ViewCount="359" Body="&lt;p&gt;Let's say you have a hypothetical 8-bit processing machine with 256 bytes of memory. You want to load the value stored in memory location $f2 into a register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, with a data bus of just 8 bits, you can't use all of the memory unless you want to have no room left for an opcode. And having more than one operand would be impossible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two solutions to this dilemma. The first solution is to increase the width of each memory location to 12 or 16 bits to have room for an opcode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second is what most computers use: multi-byte instructions. For example, an LDA instruction might have the opcode in one byte and the operand on a different byte following the first. However, this seems much more confusing to me. You have to fetch another byte while storing the first, which seems frankly impossible to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how do computers execute multi-byte instructions and what are the microinstructions for such a Herculean task?&lt;/p&gt;&#xA;" OwnerUserId="17968" LastEditorUserId="3290" LastEditDate="2020-05-28T06:45:14.503" LastActivityDate="2020-05-28T20:45:24.850" Title="How do multi-byte instructions work?" Tags="&lt;instruction-set&gt;&lt;cpu&gt;&lt;microcode&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14972" PostTypeId="2" ParentId="14970" CreationDate="2020-05-28T05:09:38.957" Score="9" Body="&lt;p&gt;I fixed it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used a known working logic board from a different mac and a multimeter set to continuity to find the bad trace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;first I tested the first 16 pins of the simm slot to the ground on the scsi port on the working board for reference resistances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I compared them on the bad board, I found that pin number 9 was open when it should have matched the resistances of pins 8 and 10. From there I followed the trace leading from that pin until I found a scratch that I aparently gave it when I was fixing the first problem. (I should be more careful next time) I jumped the bad trace and now all is well.&lt;/p&gt;&#xA;" OwnerUserId="2187" LastActivityDate="2020-05-28T05:09:38.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14974" PostTypeId="2" ParentId="14971" CreationDate="2020-05-28T07:01:40.500" Score="2" Body="&lt;p&gt;&quot;You have to fetch another byte while storing the first, which seems frankly impossible to me.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In simple words CPU is storing first byte (opcode) in internal register(s). Most (or maybe all) CPUs are realized as finite-state machine (&lt;a href=&quot;https://en.wikipedia.org/wiki/Finite-state_machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Finite-state_machine&lt;/a&gt;). Most known CPU states are FEtch, Instruction Decode, EXecute, MEMory access. Every instruction is processed in few internal steps (finite-state transitions).&lt;/p&gt;&#xA;" OwnerUserId="11331" LastActivityDate="2020-05-28T07:01:40.500" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14975" PostTypeId="1" CreationDate="2020-05-28T07:12:10.973" Score="3" ViewCount="117" Body="&lt;p&gt;The native floppy disk format/layout or &quot;filesystem&quot; used by Amstrad microcomputers such as the CPC and PCW range and by the Sinclair Spectrum +3 are versions of one that came from CP/M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Amstrad parlance it might be referred to as &quot;AMSDOS&quot; and in Spectrum parlance &quot;+3DOS&quot; or &quot;PLUS3DOS&quot;. But those names probably more accurately refer the &quot;disk operating systems&quot;, ie the extra Basic commands and system APIs used to access the disks, than the format of the disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could perhaps just be &quot;The CP/M format/layout/filesystem&quot;. But from reading around, the Amstrad and Speccy each had extra features not from CP/M and there were quite a few versions of CP/M adding features, some of what either came after the Amstrad and Spectrum variants, or just added features those platforms eschewed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the Amstrad and Spectrum variants were branches of a specific stage of CP/M with a version number of name, that could well be what I'm looking for. There do seem to be a few suffixed versions of CP/M out there when I Google, such as CP/M-86 and CP/M 2.2. I've also noticed &quot;FDOS&quot; and &quot;BDOS&quot; in use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When referring to the versions used by the Amstrad and Speccy, which term would not be a misnomer, not be anachronistic, etc?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-05-31T18:18:55.390" Title="Is there a &quot;most correct&quot; name for the disk format / filesystem used by Amstrads and Spectrum +3's?" Tags="&lt;floppy-disk&gt;&lt;cp-m&gt;&lt;spectrum-plus-3&gt;&lt;amstrad&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14976" PostTypeId="1" AcceptedAnswerId="14978" CreationDate="2020-05-28T07:33:33.550" Score="1" ViewCount="206" Body="&lt;p&gt;How can I find where in memory to locate the current Basic program in an Amstrad CPC/PCW family Zilog Z80-based microcomputer?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is it always the same address?&lt;/li&gt;&#xA;&lt;li&gt;A different well-known address depending on the model, ROM version, or Basic version?&lt;/li&gt;&#xA;&lt;li&gt;A changeable address that can be determined by looking at a certain system variable?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(On the Spectrum there's a system variable and cracks and demos also hardcoded some well-known addresses for the most common machine variants. I can't seem to find the equivalent for Amstrads by Googling.)&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-05-28T18:36:43.993" Title="How to determine where in RAM the current Basic program resides on Amstrad microcomputers?" Tags="&lt;basic&gt;&lt;cpc&gt;&lt;amstrad&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="14977" PostTypeId="1" AcceptedAnswerId="14980" CreationDate="2020-05-28T08:07:24.763" Score="2" ViewCount="199" Body="&lt;p&gt;I'm trying to figure out how the Auxiliary Carry flag on the 8080 is affected by logical instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reading the &lt;a href=&quot;https://altairclone.com/downloads/manuals/8080%20Programmers%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel 8080 manual&lt;/a&gt;, it seems that logical instructions do not affect AC:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Auxiliary Carry bit will be affected by all addition, subtraction, increment, decrement, and compare instructions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is repeated in the detailed descriptions of the logical instructions themselves, like this for &lt;code&gt;ORA&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Condition bits affected: Carry, zero, sign, parity&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, this &lt;a href=&quot;https://github.com/begoon/i8080-core/blob/master/TEST.ASM#L650&quot; rel=&quot;nofollow noreferrer&quot;&gt;test program&lt;/a&gt; does the following:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;code&gt;ORA  A   ;RE-SET AUXILIARY CARRY&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In addition, &lt;a href=&quot;https://pastraiser.com/cpu/i8080/i8080_opcodes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this opcode table&lt;/a&gt; and &lt;a href=&quot;http://www.classiccmp.org/dunfield/r/8080.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;this encoding table&lt;/a&gt; both list the &lt;code&gt;A&lt;/code&gt; flag as affected by logical instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I assume they're affected, but that this is undocumented behavior. Can anyone shed any light on the proper behavior here?&lt;/p&gt;&#xA;" OwnerUserId="15661" LastEditorUserId="6659" LastEditDate="2020-05-28T14:22:13.987" LastActivityDate="2020-05-28T14:22:13.987" Title="Auxiliary Carry and the Intel 8080's logical instructions" Tags="&lt;8080&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14978" PostTypeId="2" ParentId="14976" CreationDate="2020-05-28T08:07:24.857" Score="3" Body="&lt;p&gt;With a bit of googling: &lt;a href=&quot;http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/memory-map/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/memory-map/&lt;/a&gt;  (information is not very widespread, I could not find any confirmation somewhere else)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Basic starts at &amp;amp;170 and grows up to HIMEM. HIMEM is set around &amp;amp;b0ff for 464, but lower for other systems with extra roms attached because roms can reserve some ram if they need it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So according to this link, the answer is (in hexadecimal): $170. The higher limit depends on the memory reserved by extra roms and can also be set by the &lt;code&gt;HIMEM&lt;/code&gt; command.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-05-28T08:07:24.857" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14979" PostTypeId="2" ParentId="14971" CreationDate="2020-05-28T08:16:23.563" Score="6" Body="&lt;p&gt;One example is the 6502. It fetches an opcode, and then while storing the opcode in internal memory, fetches some argument which may be 1 or 2 bytes. This is not hard to achieve, it is not a Herculean task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the instruction executes, the operand might be stored in another register, routed through the ALU or other circuitry, or whatever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another example is the Z80, which has multiple byte instructions. This works by having prefix bytes which I believe set some internal state which affects the decoding of the opcode proper. &lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-05-28T08:16:23.563" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="14980" PostTypeId="2" ParentId="14977" CreationDate="2020-05-28T08:50:08.430" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;http://bitsavers.org/components/intel/MCS80/9800301D_8080_8085_Assembly_Language_Programming_Manual_May81.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;8080/8085 Assembly Language Programming Manual&lt;/a&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The auxiliary carry flag is affected by all add, subtract, increment, decrement, compare, and all logical AND, OR, and exclusive OR instructions. (See the descriptions of these instructions in Chapter 3.) There is some difference in the handling of the auxiliary carry flag by the logical AND instructions in the 8080 processor and the 8085 processor. The 8085 logical AND instructions always set the auxiliary flag ON. The 8080 logical AND instructions set the flag to reflect the logical OR of bit 3  of the values involved in the AND operation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;OR and XOR operations clear the auxiliary flag on the 8080, which is why it appears in the corresponding opcode descriptions. AND operations set it as described above.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-05-28T08:50:08.430" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14981" PostTypeId="1" AcceptedAnswerId="14982" CreationDate="2020-05-28T09:43:39.487" Score="3" ViewCount="264" Body="&lt;p&gt;What is exact meaning Windows NT 3.51 title bar buttons?&#xA;Arrow up is maximize and arrow down minimize?&#xA;And left button is close?&#xA;Its my assumption right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bxg5Q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bxg5Q.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18313" LastActivityDate="2020-05-28T12:10:05.267" Title="Windows NT 3.51 title bar buttons" Tags="&lt;windows&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14982" PostTypeId="2" ParentId="14981" CreationDate="2020-05-28T09:54:24.130" Score="5" Body="&lt;p&gt;The upward-pointing arrow does indeed maximise the window, and the downward-pointing arrow minimises it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The “minus” provides access to the window menu; double-clicking it will close the window. The menu for an application window is this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ENW1j.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ENW1j.png&quot; alt=&quot;Windows NT 3 window menu&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The menu for an MDI document window (such as a program group in Program Manager) is this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mpZBv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mpZBv.png&quot; alt=&quot;Windows NT 3 MDI document menu&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applications can add their own entries to these menus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These exact buttons were used in &lt;a href=&quot;https://guidebookgallery.org/screenshots/win30&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows 3.0&lt;/a&gt;, &lt;a href=&quot;https://guidebookgallery.org/screenshots/win31&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows 3.1&lt;/a&gt; (and variants), &lt;a href=&quot;https://guidebookgallery.org/screenshots/winnt31&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows NT 3.1&lt;/a&gt;, &lt;a href=&quot;https://guidebookgallery.org/screenshots/winnt351&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows NT 3.51&lt;/a&gt;, and &lt;a href=&quot;https://guidebookgallery.org/screenshots/msos21301&quot; rel=&quot;nofollow noreferrer&quot;&gt;OS/2 1.3&lt;/a&gt;. I think the two menu buttons are supposed to be reminiscent of their keyboard short-cuts, &lt;kbd&gt;Alt&lt;/kbd&gt;&lt;kbd&gt;Spacebar&lt;/kbd&gt; and &lt;kbd&gt;Alt&lt;/kbd&gt;&lt;kbd&gt;-&lt;/kbd&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-28T12:10:05.267" LastActivityDate="2020-05-28T12:10:05.267" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14983" PostTypeId="2" ParentId="14931" CreationDate="2020-05-28T09:55:06.720" Score="7" Body="&lt;p&gt;I can recommend &lt;a href=&quot;https://www.amazon.co.uk/Computer-Called-LEO-worlds-computer-ebook/dp/B009FUF6MS/&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;A Computer Called LEO: Lyons Tea Shops and the world’s first office computer&lt;/strong&gt;&lt;/a&gt; (Amazon link). From the preface:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To some, it was a supreme irrelevance, a quixotic venture into the unknown by a respectable family business that ought to have known better. To others, it was an enterprise of boldness and vision, whose ultimate failure resulted from the conservatism and short-sightedness of others, and whose story contains lessons that succeeding generations would do well to learn.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;LEO was a computer. It burst into the British public consciousness through a snowstorm of popular articles in February 1954, although its genesis lay some years earlier. It was not the first computer in the world, by any of a number of possible definitions. As a piece of electronic engineering it was not fundamentally original. LEO and its creators deserve their place in history not because of what it was but because of what it did. For LEO was the first computer in the world to be harnessed to the task of managing a business. That business was J. Lyons &amp;amp; Co., renowned the length and breadth of the land for its fine tea and cakes, available in grocers’ shops everywhere but savoured especially in the Lyons teashops, a chain of more than two hundred high street cafés.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;LEO was designed and built by Lyons’s own engineers, and its first programs were written by Lyons managers before the computer programmer existed as a job description. At the time, the few who knew anything about computers thought of them as tools for scientists and mathematicians. LEO was a novelty in that its circuits hummed not with non-linear equations but with the hours worked and rates of pay for the bakers who produced, among other things, 36 miles of Swiss roll per day. Rather than calculating missile trajectories (though it could do that, too), LEO grappled with the task of restocking each teashop every day with no more and no less than it needed to keep its customers supplied with bread rolls, boiled beef and ice cream. It even turned its attention to ensuring that Lyons continued to produce the perfect blends of tea on which so much of the company’s reputation rested.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And from &lt;a href=&quot;https://en.wikipedia.org/wiki/LEO_(computer)&quot; rel=&quot;noreferrer&quot;&gt;LEO (computer)&lt;/a&gt; on Wikipedia:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The prototype LEO I was modelled closely on the Cambridge EDSAC. Its construction was overseen by Oliver Standingford, Raymond Thompson and David Caminer of J. Lyons and Co. LEO I ran its first business application in 1951. In 1954 Lyons formed LEO Computers Ltd to market LEO I and its successors LEO II and LEO III to other companies. LEO Computers eventually became part of English Electric Company (EELM) where the same team developed the faster LEO 360 and even faster LEO 326 models. It then passed to International Computers Limited (ICL) and ultimately Fujitsu.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="731" LastActivityDate="2020-05-28T09:55:06.720" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14984" PostTypeId="2" ParentId="14931" CreationDate="2020-05-28T11:51:29.140" Score="2" Body="&lt;p&gt;FWIW, &lt;a href=&quot;https://en.wikipedia.org/wiki/CSIRAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Australia's first computer, CSIRAC,&lt;/a&gt; was the 5th stored-program computer in the world, and is now the oldest electronic computer that still exists.&#xA;Apparently it was the first computer to &quot;play digital music&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's more information on the &lt;a href=&quot;https://csiropedia.csiro.au/csirac-australias-first-computer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CSIRO website&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6712" LastEditorUserId="6712" LastEditDate="2020-05-28T12:00:34.493" LastActivityDate="2020-05-28T12:00:34.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14985" PostTypeId="2" ParentId="14969" CreationDate="2020-05-28T14:26:56.673" Score="1" Body="&lt;p&gt;Not a specific computer monitor at all, rather a generic B&amp;amp;W CRT screen. Setting looks also more like a CCTV, doesn't it, but I suspect it's from some game, so it's fantasy anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That hole on the top isn't a socket, but a transport grip. Monitors meant to be integrated in some shelving (like usual for CCTV) got them embedded to save on space, allowing a denser package and reduce the need for cover/binds in shelving.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-05-28T14:26:56.673" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14986" PostTypeId="2" ParentId="14931" CreationDate="2020-05-28T14:46:00.760" Score="4" Body="&lt;p&gt;I'll try to supplement &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14936/18318&quot;&gt;Raffzahn's great answer&lt;/a&gt; with some events from countries that were less relevant on the world stage, but IMHO have fascinating hacker stories to tell. (I am not an expert on this topic, this is just what came up of a quick literature search). Unfortunately english-language sources are scarce on the topic and most of my links are to dense academic papers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;India designed it's first digital computer &lt;a href=&quot;https://en.wikipedia.org/wiki/TIFRAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;TIFRAC&lt;/a&gt; in 1960 - by whom else than the ubiquitous TATA company (&lt;a href=&quot;https://www.thebetterindia.com/119136/the-fascinating-story-of-how-indias-first-indigenous-computers-were-built/&quot; rel=&quot;nofollow noreferrer&quot;&gt;some backstory&lt;/a&gt; - includes searching junkyards for parts )&lt;/li&gt;&#xA;&lt;li&gt;Japan - in their early computers (late 50s) used &lt;a href=&quot;https://en.wikipedia.org/wiki/Parametron&quot; rel=&quot;nofollow noreferrer&quot;&gt;Parametron&lt;/a&gt; which competed with transistors for a while. A brief history at: &lt;a href=&quot;https://sci-hub.tw/10.1109/MAHC.1996.476569&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sci-hub.tw/10.1109/MAHC.1996.476569&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Armenia had the Nairi (1964) system which - in the best tradition of former East bloc - did some creative stuff to avoid the necessity for unavailable western tech. (e.g. parallel execution of microprograms) &lt;a href=&quot;https://sci-hub.tw/10.1109/SoRuCom.2017.00012&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sci-hub.tw/10.1109/SoRuCom.2017.00012&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Apparently, Asian nations (and presumably others) had a lot of &quot;fun&quot; making computers work with local alphabets (e.g. &lt;a href=&quot;https://sci-hub.tw/10.1109/MAHC.2009.10&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sri Lanka&lt;/a&gt;, &lt;a href=&quot;https://sci-hub.tw/10.1109/MAHC.2009.1&quot; rel=&quot;nofollow noreferrer&quot;&gt;India&lt;/a&gt; )&lt;/li&gt;&#xA;&lt;li&gt;South African anti-apartheid activists built their own encrypted communication system in late 80s &lt;a href=&quot;https://sci-hub.tw/10.1177/0894439306289556&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sci-hub.tw/10.1177/0894439306289556&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;There is a list of first documented computer by country: &lt;a href=&quot;https://medium.com/@mapmeld/first-computer-by-country-81fa47963234&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://medium.com/@mapmeld/first-computer-by-country-81fa47963234&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="18318" LastActivityDate="2020-05-28T14:46:00.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14987" PostTypeId="2" ParentId="14976" CreationDate="2020-05-28T15:35:56.707" Score="3" Body="&lt;p&gt;The Locomotive BASIC is a bit of an oddity as the start of the BASIC area is hardcoded to 0170h (for the CPCs) and no indirection via a pointer is given. Then again, location AE26h (*1) is checked when a program is LOADed, and usually contained $0170.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general using RAM addresses is model-dependent as they got reshuffled every time. A good primary source for information about ram variables and structure is given by the &lt;a href=&quot;http://www.cpcwiki.eu/imgs/0/02/CPC_firmware.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Amstrad CPC Firmware Guide&lt;/a&gt;. Some Magazines like the German CPC-Magazin did give enhanced version like in &lt;a href=&quot;http://www.cpcwiki.eu/imgs/0/02/CPC_Magazin_1986-08_09.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Issue 86/8-9 p.70ff&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A major site for more information about the CPC series would be &lt;a href=&quot;http://www.cpctech.org.uk/docs.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;cpctech&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - For the 6128. The 464 uses AE3Fh&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="3316" LastEditDate="2020-05-28T16:43:25.227" LastActivityDate="2020-05-28T16:43:25.227" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14988" PostTypeId="2" ParentId="14971" CreationDate="2020-05-28T15:58:07.180" Score="3" Body="&lt;p&gt;&lt;em&gt;[Preface: This question is independent of word size or CPU, and in no way RC.SE specific, but a basic lesson about processor design, so it might be more appropriate to ask in SO, CS or EE]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's as simple as 1, 2, 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A two word immediate operation could run like this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Fetch one word from [PC] into OPCODE register and increment PC&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OPCODE-Register can now be decoded and act upon by&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Fetching one word from [PC] into DATA register and increment PC&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Apply operation using DATA register&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The last step is whatever the operation read in step 2 commands:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If it's a LOAD ACCUMULATOR WITH IMMEDIATE VALUE than DATA gets moved into ACCUMULATOR.&lt;/li&gt;&#xA;&lt;li&gt;If it's an ADD IMMEDIATE VALUE TO ACCUMULATOR, then DATA gets added to the ACCUMULATOR.&lt;/li&gt;&#xA;&lt;li&gt;And so on ...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The operation to be sequenced will always be held in OPCODE during all steps, that is until finished and the next one is loaded. Thus OPCODE can always deliver the needed information to decode and operate.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Or as an animated GIF:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7tw6E.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7tw6E.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(And yes, there are possible optimisations and alike (And I'm not an artist at all), but that's not the point)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-28T20:45:24.850" LastActivityDate="2020-05-28T20:45:24.850" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14989" PostTypeId="2" ParentId="14976" CreationDate="2020-05-28T18:36:43.993" Score="3" Body="&lt;p&gt;Under CP/M, the program start address in Mallard BASIC differs by version. I'm not aware of any fixed location that can be interrogated to find it; however, it may be possible to determine it by searching for a known piece of code that references the stored program. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In at least versions 1.29-1.48, SAVE writes out a magic number &lt;code&gt;FC 04&lt;/code&gt; at the start of the file, and the code that does this is followed by code that calculates the length of data to save:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LD A,0FCh       ;Magic number&#xA;CALL write_char&#xA;LD A,04h        ;File format version&#xA;CALL write_char&#xA;POP AF          ;Protected flag&#xA;CALL write_char&#xA;LD HL,(program_start) ; Start address of tokenised program (minus 1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, if you search memory for the byte pattern &lt;code&gt;3E FC CD xx xx 3E 04 CD xx xx F1 CD xx xx 2A&lt;/code&gt; the next two bytes will be the address of a word. That word is the address of the byte before the start of the program.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2020-05-28T18:36:43.993" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14990" PostTypeId="1" AcceptedAnswerId="14995" CreationDate="2020-05-28T19:30:09.797" Score="4" ViewCount="199" Body="&lt;p&gt;I'm just curious why the 8086 seems to be lacking in an adjust opcode for fixing up packed BCD multiplication. It seems like it would be a useful thing, and packed BCD seems to be more common to begin with.&lt;/p&gt;&#xA;" OwnerUserId="18326" LastEditorUserId="3290" LastEditDate="2020-05-28T21:17:06.170" LastActivityDate="2020-05-28T23:04:10.990" Title="The 8086 has AAM (ASCII Adjust after Multiply), why not the same for packed BCD?" Tags="&lt;8086&gt;&lt;binary-coded-decimal&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14991" PostTypeId="2" ParentId="14990" CreationDate="2020-05-28T19:41:53.047" Score="-3" Body="&lt;p&gt;It does not have an opcode to perform packed BCD multiplication, so there is no point having an adjust opcode for that either.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-05-28T19:41:53.047" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14992" PostTypeId="2" ParentId="14990" CreationDate="2020-05-28T19:47:04.523" Score="2" Body="&lt;p&gt;AAM is needed because the result of multiplying two unpacked BCD is a 'strange' value that needs to be 'normalized' again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole mechanic of using the binary multiply with BCD only woks with 'unpacked' values. Using two packed BCD values will return a result that can't be decoded as easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To allow multiplication with packed BCD would have required the addition of decimal multiplication functions as separate operation, a quite complex one, as the 8086 does not contain any decimal units, but repurposes the binary ALU - much like the 8080 did. And that's why it needs the 'correcting' instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If one needs high performance BCD, the usage of a 8087 would be recommended&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-05-28T19:49:51.867" LastActivityDate="2020-05-28T19:49:51.867" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="14993" PostTypeId="1" AcceptedAnswerId="14994" CreationDate="2020-05-28T19:47:50.300" Score="5" ViewCount="278" Body="&lt;p&gt;I have installed Microsoft C 5.10 on DOS 6.22. It created a 'LIB' directory with static libraries to link against. Now I need to extract the symbols and the code for the functions from them, but can't find the format documented anywhere:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ninja@desktop:/mnt/d/backup/dos/msc510-install/LIB$ ls *.LIB&#xA;CLIBC7.LIB  CLIBCE.LIB  GRAPHICS.LIB  LLIBC7.LIB  LLIBCE.LIB  MLIBC7.LIB  MLIBCE.LIB  SLIBC7.LIB  SLIBCE.LIB&#xA;ninja@desktop:/mnt/d/backup/dos/msc510-install/LIB$ file CLIBC7.LIB&#xA;CLIBC7.LIB: Microsoft Visual C library&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Supposedly, static libraries from more recent versions of (Visual) C are COFF archives which can be expanded with ar, but it does not seem to work for these legacy libraries.&lt;/p&gt;&#xA;" OwnerUserId="18327" LastEditorUserId="3290" LastEditDate="2020-05-29T08:11:50.670" LastActivityDate="2020-05-29T08:11:50.670" Title="What is the format of the static libraries shipping with legacy Microsoft C for DOS?" Tags="&lt;ms-dos&gt;&lt;c&gt;&lt;file-format&gt;&lt;microsoft&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14994" PostTypeId="2" ParentId="14993" CreationDate="2020-05-28T21:12:10.267" Score="12" Body="&lt;p&gt;These are OMF libraries; you can analyse them with Agner Fog’s &lt;a href=&quot;https://www.agner.org/optimize/#objconv&quot; rel=&quot;noreferrer&quot;&gt;object file converter&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It probably only makes sense to work with those libraries if you intend to build software with Microsoft C 5.1, in which case you’d use the tools provided with the compiler (&lt;code&gt;LIB.EXE&lt;/code&gt; in particular).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The OMF format is described in detail in &lt;a href=&quot;http://www.azillionmonkeys.com/qed/Omfg.pdf&quot; rel=&quot;noreferrer&quot;&gt;OMF: Relocatable Object Module Format&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-29T06:15:34.187" LastActivityDate="2020-05-29T06:15:34.187" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14995" PostTypeId="2" ParentId="14990" CreationDate="2020-05-28T23:04:10.990" Score="4" Body="&lt;p&gt;To adjust a value, one needs to know how many carries there were out of each decimal digit.  When adding two 8-bit numbers, there can be at most one carry out of each 4-bit chunk, which will fit in two flags which are devoted to that purpose.  Multiplication of two decimal digits, however, may yield up to eight carries--far too many to fit into two one-bit flags.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider, for example, the multiplication of 0x12 by 0x04, 0x18 by 0x03, or 0x09 by 0x08.  All three will yield 0x48 prior to adjustment, but they have different numbers of carries out of the bottom digit, and should thus yield different values after adjustment.  The first has no carry out of the bottom digit and should stay 0x48.  The second has two carries out of the bottom digit and should have 12 (6 per carry) added to yield 0x54.  The third has seven carries out of the bottom digit and should have 42 added to yield 0x72.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are ways of designing circuitry to multiply packed BCD reasonably efficiently, but doing so would require continuously updating the result for BCD during the multiplication process, rather than at the end.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-05-28T23:04:10.990" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14996" PostTypeId="2" ParentId="14849" CreationDate="2020-05-29T04:15:39.380" Score="1" Body="&lt;p&gt;&lt;strong&gt;It seems there is.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an open source C library by &lt;a href=&quot;https://www.seasip.info/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;John Elliot&lt;/a&gt; for working with a selection of disks and disk image formats called &lt;a href=&quot;https://www.seasip.info/Unix/LibDsk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;LibDsk&lt;/a&gt;, active as of August 2019. Among the supported formats it includes&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;.DSK files, as used in CPCEMU, JOYCE and other Sinclair/Amstrad emulators.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.seasip.info/Unix/Joyce/&quot; rel=&quot;nofollow noreferrer&quot;&gt;JOYCE&lt;/a&gt; emulator mentioned is by the same author.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The author added Java support via JNI in 2002 with the &lt;a href=&quot;https://github.com/fdivitto/joyce-custom/blob/master/LibDsk/ChangeLog&quot; rel=&quot;nofollow noreferrer&quot;&gt;v0.8.0&lt;/a&gt; release:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;* Support added for Java Native Interface bindings (requires JDK &#xA; v1.1 or later). Use ./configure --with-jni to build them.&#xA;* Java versions of dskid, dskform and dsktrans added.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-29T05:48:07.400" LastActivityDate="2020-05-29T05:48:07.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14997" PostTypeId="1" CreationDate="2020-05-29T08:01:37.420" Score="3" ViewCount="107" Body="&lt;p&gt;I've decided to add support for some more classic Z80 computers I used to use to my Ghidra modules, and the first Z80 systems I used were the TRS-80 model I and model III.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've found documentation for the three main disk image formats, JV1, JV3, and DMK (though all tend to receive the same .DSK file extension). Anyway JV1 is a straight dump of the disk's tracks and sectors where sectors are always 256 bytes and there's always 10 sectors per track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've read that the directory is on track 17 and on some of my JV1 disk images I can locate it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I can't for the life of me find documentation on how this directory track is structured so that I can parse it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know there was a proliferation of first party and third party DOSes for these TRS-80s but I'm assuming at least the disk layout is the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a hex editor I can see 16-byte directory entries starting 2 sectors into the track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can see five useful-looking bytes, then 8 chars filename plus 3 chars extension, then 8 more useful-looking bytes, then 8 bytes that look unused filled with &lt;code&gt;FF&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's all I can make out. Does somebody know where this is documented or know from experience? Or does it actually vary per DOS flavour after all?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-06-03T00:44:19.183" LastActivityDate="2020-06-06T01:35:37.927" Title="What is the layout of the directory track on a TRS-80 Model I/Model III disk?" Tags="&lt;floppy-disk&gt;&lt;programming&gt;&lt;file-format&gt;&lt;trs-80&gt;&lt;trs-80-model-iii&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14998" PostTypeId="1" CreationDate="2020-05-29T09:04:28.480" Score="4" ViewCount="131" Body="&lt;p&gt;The original Apple IIc had a 27128 16 KB ROM mapped into the&#xA;$C100-$FFFF range (the $C000 page was decoded for I/O). According to&#xA;the &lt;a href=&quot;https://archive.org/details/Apple_IIc_Technical_Reference_Manual&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Apple IIc Technical Reference Manual&lt;/em&gt;&lt;/a&gt; the &lt;code&gt;ROMEN1*&lt;/code&gt;&#xA;and &lt;code&gt;ROMEN2*&lt;/code&gt; signals from the MMU chip enabled the ROM.¹ (Those two&#xA;signals are tied together through diodes; &lt;code&gt;ROMEN1*&lt;/code&gt; is documented as&#xA;enabling $C100-$DFFF, and &lt;code&gt;ROMEN2*&lt;/code&gt; is undocumented.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When using a 27256 32 KB ROM, the additional ROM address pin &lt;code&gt;A14&lt;/code&gt; is&#xA;conected to &lt;code&gt;CASSO&lt;/code&gt; (pin 7) on the IOU (&quot;I/O Unit&quot;) chip. The manual&#xA;says merely that this pin is &quot;Reserved,&quot; and seems to have no other&#xA;information on how the upper half of the 32 KB ROM is accessed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how does one switch between the two banks of ROM, and to where is&#xA;the second bank mapped? Did Apple document any of the ROM code related&#xA;to switching between the two banks for use by developers?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;¹&lt;sub&gt;The schematic in that version of the manual is for newer&#xA;versions of the Apple IIc that had the 32 KB ROM; &lt;a href=&quot;https://archive.org/details/Schematic_Diagram_of_the_Apple_IIc&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&#xA;schematic&lt;/a&gt; shows the original A2S4000 model with a trace&#xA;to be cut and pad to be bridged to use a 32K instead of a 16K&#xA;ROM.&lt;/sub&gt;&lt;br/&gt;&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="3290" LastEditDate="2020-05-29T09:41:17.247" LastActivityDate="2020-05-29T12:51:27.010" Title="How was the second bank of Apple IIc ROM accessed?" Tags="&lt;apple-ii&gt;&lt;memory&gt;&lt;rom&gt;&lt;apple-iic&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="14999" PostTypeId="2" ParentId="14998" CreationDate="2020-05-29T10:48:51.610" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So how does one switch between the two banks of ROM, and to where is the second bank mapped?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They used $C028, one of the 'reserved' $C02x region (*1). With the IIc ROM &quot;1&quot; it became &quot;Toggle between main and auxiliary ROM&quot;.  Access per STA flips between both ROM 'halves'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 32 KiB Apple IIc ROM contains two images, each covering the Area $C100..$FFFF. The 'main' ROM is located in the first 16 KiB of the TOM chip, while the 'auxiliary' occupies the second half. There is no way to read the setting, it's all done by the code 'knowing' where it is. This includes several stubs on the 'auxiliary' side to flip back to 'normal' configuration, like when a reset occurs and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The switch is only used within the ROM and as a kind of virtual jump. So whenever there was no space left in the original ROM to squeeze in new functionality, an STA $C028 was performed flipping over to the 'auxiliary' side and continuing there. Here most of the time a JSR was used to jump to the extended code. At the end (usually) a common stub in the $C7xx region was called returning to original ROM and returning to the original location.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Did Apple document any of the ROM code related to switching between the two banks for use by developers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not that I know of. It's considered strictly internal, as they wanted to keep the ability to be free for future changes. Only the Soft Switch was mentioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple IIgs later filled the whole area (and essentially every other address left unused) and redefined the $C028 switch as well. Now it only switched $D000...$FFFF, as again, slot management worked differently in the IIgs. Still, it was only flipping each time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IIe card finally made it a one way street with $C028 switching to main (!) ROM and $C029 to 'auxiliary' (*2).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Marked so in the first version of the IIc Technical Reference. The second edition (Covering ROM &quot;1&quot;) marks all of $C02x as &quot;Toggle between main and auxiliary ROM&quot;. Still, code only used (AFAIK) $C028.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - Which was unused on the IIc, but controlled video on the IIgs.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="10678" LastEditDate="2020-05-29T12:51:27.010" LastActivityDate="2020-05-29T12:51:27.010" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15000" PostTypeId="1" AcceptedAnswerId="15001" CreationDate="2020-05-29T12:41:28.517" Score="3" ViewCount="173" Body="&lt;p&gt;I can find enough mentions of bootable disks for TRS-80 Model I and Model III to be confident that they could boot from disk, but so far I'm failing to find much info on how that worked.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In particular, where on the disk is the boot track/sector/block? Is it in the same place on Model I and III?&lt;/li&gt;&#xA;&lt;li&gt;Does the boot sector have any format or is it just read directly into memory and executed?&lt;/li&gt;&#xA;&lt;li&gt;Into which memory address range is it loaded, and from which address does execution begin?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;One thing that I am finding is that the boot block must, on at least some types of setup, be on single-density tracks, and that this is the case even when the rest of the disk is formatted double-density. It seems this is unusual and causes problems when trying to use TRS-80 floppies in other computers' drives.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-05-29T15:14:04.343" Title="What is the process for TRS-80 Model I &amp; III to boot from disk?" Tags="&lt;floppy-disk&gt;&lt;boot&gt;&lt;trs-80&gt;&lt;trs-80-model-iii&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15001" PostTypeId="2" ParentId="15000" CreationDate="2020-05-29T12:57:20.570" Score="1" Body="&lt;p&gt;After Googling this for an hour or two and not finding much, I have found something solid just minutes after posting my question!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://amaus.net/static/S100/MAGAZINE/trs8bit/09x02%20201506%20trs8bit.pdf#page=40&quot; rel=&quot;nofollow noreferrer&quot;&gt;From page 40 of TRS8BIT volume 09 issue 02 from June 2015&lt;/a&gt; there is an article on a &quot;FreHD Expansion Interface&quot; which includes this paragraph:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If a WDC1771 Disc Controller is found then the LII ROM programs the&#xA;  chip to retrieve &lt;strong&gt;the first 256 Bytes from Physical Drive 0, Track 0,&#xA;  Sector 0, i.e. the Boot Block&lt;/strong&gt;, this is executed and LDOS, TRSDOS,&#xA;  NEWDOS etc. continue to boot&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The information missing is where the code is loaded and executed. I suppose it could be position-independent code. I think that was possible on the Z80 if you restricted which instructions/addressing modes you used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also possible this is not the full story and might only apply to the Model I.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Update: Using the above info, I looked at some JV1 format disk images and several contain identical bytes for this area except some at the end, presumably junk after the code. But the first three bytes do not seem to be code. Code seems to start at offset &lt;code&gt;0003h&lt;/code&gt; with a &lt;code&gt;DI&lt;/code&gt; instruction to disable interrupts. Before this, all the ones I've looked at have &lt;code&gt;00 FE 11&lt;/code&gt; which could be some sort of header or magic signature?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Update 2: Apparently the various DOSes in use on TRS-80s were only somewhat mutually compatible. Some used the byte at offset &lt;code&gt;0002h&lt;/code&gt; to declare the track used for the directory, usually track 17 or 11h, but not always. Either the initial &lt;code&gt;NOP&lt;/code&gt; or it together with the following &lt;code&gt;FE&lt;/code&gt; compare instruction &lt;a href=&quot;http://www.vintagecomputer.net/fjkraan/comp/trs80/doc/TRS-80_Hacker&amp;#39;s_Handbook_for_Newdos80.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;are referred to as a &quot;recognition code&quot;&lt;/a&gt;, which seems to mean the same as &quot;signature&quot; or &quot;magic word&quot;, but the ROMs did not seem to verify this. It must be used by some of the DOSes for some purposes, but not at power-on boot time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... and here it is stated more clearly in &lt;a href=&quot;http://www.vintagecomputer.net/fjkraan/comp/trs80/NEWDOS80/ND80v20BOOT_SYS.ASM&quot; rel=&quot;nofollow noreferrer&quot;&gt;this disassembly I just found&lt;/a&gt;, originally from the HACKER'S HANDBOOK FOR NEWDOS/80, page 42:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;; Addr.  Code         Instruction           Function&#xA;  4200H  00           NOP                ; No operation&#xA;  4201H  FE 11        CP   11H           ; Recognition Code + 17 = Dir Sector&#xA;  4203H  F3           DI                 ; Disable Interrupts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-05-29T15:14:04.343" LastActivityDate="2020-05-29T15:14:04.343" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15002" PostTypeId="1" AcceptedAnswerId="15003" CreationDate="2020-05-29T13:24:48.627" Score="2" ViewCount="301" Body="&lt;p&gt;VICE needs a file called dos1541 if you want hardware emulation of the 1541 disk drive. What does that file contain, exactly? The 1541 seems to have two ROMs: a DOS and a KERNAL. But if I take the image of the DOS and call in dos1541, and put it in the correct folder, then the emulator complains: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Error - ROM /home/username/.vice/C64/dos1541: short file.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And it will be impossible to enable 1541 emulation in the emulator's menu. The same is true if that file contains the kernal.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2021-02-23T21:20:41.363" Title="What is the file that VICE refers to as dos1541?" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;disk-drive&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15003" PostTypeId="2" ParentId="15002" CreationDate="2020-05-29T13:24:48.627" Score="8" Body="&lt;p&gt;The DOS won't work because it's only 8kb long. The KERNAL won't work because it too is only 8kb long.&lt;/p&gt;&#xA;&lt;p&gt;Turns out, &lt;code&gt;dos1541&lt;/code&gt; is really a misnomer because VICE needs both ROMs in the same file, and expects that file to be exactly 16kb long (16384 bytes). If you have both the DOS and the KERNAL, you can concatenate the two to produce the necessary file with a command like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cat dosfile kernalfile &amp;gt; dos1541&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-02-23T21:20:41.363" LastActivityDate="2021-02-23T21:20:41.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15004" PostTypeId="1" CreationDate="2020-05-29T14:17:15.913" Score="46" ViewCount="7063" Body="&lt;p&gt;I found &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/6095/447&quot;&gt;Why do C to Z80 compilers produce poor code?&lt;/a&gt; very interesting as it pointed out that C (which was designed to be an abstraction of a CPU for porting Unix) was not a very easy language to create efficient machine code from for the Z80. Apparently the same for 6502 where many dive directly in machine code.  I read that the Sargon chess engine was very well suited for the 6502 due to the X and Y registers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that the Z80 and the 6502 are very different, but I was wondering if there are any &lt;a href=&quot;https://en.wikipedia.org/wiki/High-level_programming_language&quot; rel=&quot;noreferrer&quot;&gt;languages on a higher level&lt;/a&gt; than assembly which can generate compact and efficient 8-bit machine code by design for either of them (or any other 8-bit CPU from that era), and how this was achieved?  &lt;/p&gt;&#xA;" OwnerUserId="447" LastEditorUserId="447" LastEditDate="2020-06-03T18:49:58.623" LastActivityDate="2021-04-08T14:15:19.650" Title="What languages are better fit for generating efficient code for 8-bit CPU's than C?" Tags="&lt;z80&gt;&lt;6502&gt;&lt;compilers&gt;" AnswerCount="13" CommentCount="13" FavoriteCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="15006" PostTypeId="2" ParentId="15004" CreationDate="2020-05-29T14:44:41.860" Score="51" Body="&lt;p&gt;One language that was popular on early 8-bit micros, including those that used the 6502 CPU, was Forth. Forth is exceptionally good for this use case, and superior to a C compiler, because Forth can make more efficient use of the 6502's hardware stack. Forth lacks any sophisticated methods of dealing with parameters. Everything is passed through the Forth stack and procedures just deal with the stack for both their input and output. This means the language doesn't require much from the CPU in terms of addressing modes or spend any time doing sophisticated effective address calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, Forth provides a somewhat different paradigm than C in that it requires a program to be built up from very primitive and efficient units known as &quot;Words&quot; in Forth. By combining the primitive words into ever more complex combinations, the program is built up in a way similar to Functional Programming languages. This ensures Forth is very simple (and fast) to compile, even on 8-bit machines, and that the results execute very efficiently, given that the lowest level Words were coded to be efficient on the CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to some 6502 Forth users, the typical overhead incurred by Forth programs vs. similar functionality in Assembly is about 25%. And various Forth compilers for 6502 have been implemented in as little as 1.5 KiB. This fact makes Forth likely the only language compiler you will find running from an 8-bit computer &lt;a href=&quot;https://www.c64-wiki.com/wiki/64_Forth&quot; rel=&quot;noreferrer&quot;&gt;ROM cartridge&lt;/a&gt;. So, it is both the low overhead of the compiler AND the efficiency of the resulting code that made it a favorite of early microcomputer programmers seeking something more &quot;productive&quot; than Assembly language. &lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-05-29T18:54:26.977" LastActivityDate="2020-05-29T18:54:26.977" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="15007" PostTypeId="1" AcceptedAnswerId="15013" CreationDate="2020-05-29T16:17:42.670" Score="11" ViewCount="128" Body="&lt;p&gt;In my reading to try to learn about the disk layout, directory, and boot process of TRS-80 Model I and Model III, I see some unusual words come up again and again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Along with the common terms &quot;track&quot; and &quot;sector&quot; there are also the unusual words &quot;granule&quot; and &quot;lump&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is that one of these must be Tandy's dialect for &quot;block&quot;. But which? And then what could the other possibly mean?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-05-29T19:33:21.537" Title="In TRS-80 parlance when talking about disks, what are &quot;granules&quot; and &quot;lumps&quot;?" Tags="&lt;floppy-disk&gt;&lt;trs-80&gt;&lt;terminology&gt;&lt;trs-80-model-iii&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15008" PostTypeId="1" AcceptedAnswerId="15010" CreationDate="2020-05-29T16:28:21.953" Score="12" ViewCount="1937" Body="&lt;p&gt;I have used Windows 98, and observed that its shutdown is very fast. How is that?&lt;/p&gt;&#xA;" OwnerUserId="18336" LastEditorUserId="11892" LastEditDate="2020-05-30T20:38:52.250" LastActivityDate="2020-05-30T20:38:52.250" Title="How can Windows 98 shut down in less than 5 seconds?" Tags="&lt;windows-98&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15009" PostTypeId="1" AcceptedAnswerId="15020" CreationDate="2020-05-29T16:41:47.627" Score="6" ViewCount="229" Body="&lt;p&gt;I just picked-up a Macintosh Color Classic with an Apple IIe card. I've never used one of these before but was able to get it to enter into Apple IIe mode. However, I cannot seem to figure out how to get out of this mode. I tried &lt;code&gt;exit&lt;/code&gt; and common keyboard shortcuts, but wasn't able to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, one shortcut (I believe it was Command-Power) resulted in a popup window on top of the Apple IIe screen like so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mRojQ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mRojQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry for the image distortion; appears to be a screen refresh issue. It appears this is some kind of command prompt, but everything I try (exit, quit, q, etc.) doesn't do anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know how I can exit this popup screen as well as exit the Apple IIe mode? I don't want to pull the plug, but not sure what else I can do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="262" LastEditorUserId="262" LastEditDate="2020-05-29T17:02:49.377" LastActivityDate="2020-05-31T04:08:01.217" Title="How to get out of Apple IIe mode on Macintosh Color Classic?" Tags="&lt;apple-ii&gt;&lt;apple-macintosh&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15010" PostTypeId="2" ParentId="15008" CreationDate="2020-05-29T17:05:19.693" Score="20" Body="&lt;p&gt;Shutting down a computer involves two major tasks: stopping all running processes, and ensuring all pending writes are flushed to disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once any running applications have stopped, there isn’t much in the way of system services to stop before the system can be shut down, so Windows 98 does shut down quite quickly compared to current systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same is true of other non-server operating systems of the period; a default installation of OS/2 Warp in particular boots and shuts down very quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PCs of the time had much less resources than now (a typical hard drive of the period would fit several times over in current systems’ RAM, and typical Windows 98 computers had two orders of magnitude less memory than many current systems), so there was far less data to potentially write out before shutting down too. Windows 98 is designed with such constraints in mind, so even on a modern system (well, one where Windows 98 will run) it won’t keep much in its disk caches; it never did keep many pending writes anyway.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-05-30T05:02:12.797" LastActivityDate="2020-05-30T05:02:12.797" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15011" PostTypeId="2" ParentId="15004" CreationDate="2020-05-29T18:14:57.100" Score="21" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I know that the Z80 and the 6502 are very different, but I was wondering if there are any languages on a higher level than assembly which can generate compact and efficient 8-bit machine code by design, and how this was achieved?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, a prime candidate would be &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ada_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;Ada&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was a specific design goal for Ada to produce good code for tiny and 'odd' microprocessors (*1). Two basic approaches enabled this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the language itself was as non-assuming as possible, while at the same time&lt;/li&gt;&#xA;&lt;li&gt;offering tools to specify certain workings as detailed as possible - where needed -&lt;/li&gt;&#xA;&lt;li&gt;separating this to a great degree from generic code.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The high abstraction separates it from 'lower' languages like C or FORTH which are both built around certain assumptions about how a processor works and what functions it offers. In fact, C and Forth are great examples of two major pitfalls:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Expecting a certain low-level behaviour of a CPU and&lt;/li&gt;&#xA;&lt;li&gt;ignoring high-level functions offered by a CPU&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;C&lt;/strong&gt; for example is built on pointers and the assumption that everything has an address and is a series of bytes which can be iterated over (and &lt;em&gt;may&lt;/em&gt; be structured further, but that can be ignored at will). CPUs with multiple address spaces or object storage or different understanding of data handling will inherently end up with less than desirable code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The /370 is a great example here. While (register-based) pointers are an essential feature, the memory pointed to is handled as a block (or structure) with sub-blocks (fields) that can be manipulated with single instructions, not loops (*2). C-code forcing iteration onto a /370 can easy degrade (local) performance by a factor of 100 and more (*3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Forth&lt;/strong&gt; on the other hand is at its core built around the idea of a stack (or multiple stacks) and the ability for threaded code. Effective (stack) pointer handling and fast (and simple) moves to and from the stack are essential for performance. Both issues that 8-bit CPUs aren't inherently good at. The 6502 may have 128 pointers, but handling them is ugly. Indirect jumps, such as those needed for threaded code, are non-existent. Thus, fast implementations rely on self-modifying code. Then again, it is only marginally better on an 8080/Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like C, Forth ignores higher-level function offerings, or has a hard time using them. Unlike C, it's a bit more open to changes in low-level behaviour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Both languages&lt;/strong&gt; are maybe higher than assemblers can operate on a more abstract level - if used carefully - but are not inherently abstract. They assume certain workings. If these are not basic machine instructions, performance will suffer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 'real' high-level language should not make such assumptions. Here, Pascal is a better candidate, as it assumes next to nothing. As a result, there are compilers for either line, 6502 and 8080/Z80, producing quite good code. I guess &lt;a href=&quot;https://en.wikipedia.org/wiki/Turbo_Pascal#Version_1&quot; rel=&quot;noreferrer&quot;&gt;Turbo-Pascal&lt;/a&gt; for CP/M doesn't need any further introduction. On the 6502 side (Apple, Atari, Commodore) &lt;a href=&quot;http://www.appleoldies.ca/kix/&quot; rel=&quot;noreferrer&quot;&gt;Kyan Pascal&lt;/a&gt; was considered a great way to work in high-level languages (*4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which brings us back to the original question, how to achieve good code performance on a wide range of machines:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Don't expose any low-level working to the programmer.&lt;/li&gt;&#xA;&lt;li&gt;Have the compiler cover it.&lt;/li&gt;&#xA;&lt;li&gt;Have the programmer define the intended result, not the way it is achieved.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Essentially the goals set for Ada :)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S.:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... on a higher level than assembly ... &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Serious? That statement feels quite offending :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assembly &lt;em&gt;can&lt;/em&gt; and often &lt;em&gt;is&lt;/em&gt; already on a higher level than some other languages. Assembly is the essential prototype of an extensible language. Everything can be done and nothing is impossible.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - Note the 'produce' clause, having the compiler run on such machines is a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - It's always helpful to keep in mind that the /370 may have spearheaded many modern concepts, but it was designed with a punch card in mind. A punch card is a record, maybe pointed to by a register, holding information (fields) at fixed offset with fixed length. The whole instruction set for character (byte) manipulation is built to fit. No need to loop over two fields to move, compare, translate, pack or even search within, the most basic instructions (MVC, CLC, TR, PACK, TRT) already take care to handle fields at once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - This was a huge problem when C first became requested by users and implemented. By now compilers have evolved, and more importantly, CPU designers have added quite some 'changes' to cover up for the inefficiency of C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - Its only fault was its late 'birth' - too late to make a major impact.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="10678" LastEditDate="2020-05-30T22:16:00.863" LastActivityDate="2020-05-30T22:16:00.863" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="15012" PostTypeId="2" ParentId="15004" CreationDate="2020-05-29T18:38:57.410" Score="14" Body="&lt;p&gt;&quot;Forth&quot; was the first name that jumped to my mind.  Another is &lt;a href=&quot;https://en.wikipedia.org/wiki/Action!_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;Action!&lt;/a&gt;, an Atari 8-bit-specific language.  (Its manual can be found on the &lt;a href=&quot;https://archive.org/details/ACTIONMANUAL&quot; rel=&quot;noreferrer&quot;&gt;Internet Archive&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Action! is a structured Algol-inspired language that borrowed constructs from other languages (in particular, it offered C-like pointers and arrays) and native types that mapped cleanly to the 6502's memory model.  Techniques that usually required assembly were possible, such as positioning code/data and trapping interrupts.  Action! kind of stood between a full-featured macro assembler and a high-level language like Pascal.  (That it didn't have native floating-point support or recursion is a hint of how pared-down it really was.  &lt;a href=&quot;http://wiki.c2.com/?ActionLanguage&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; has a nice summary of its limitations.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find hard numbers showing it was more efficient or faster than the Atari C compilers of the time, but &lt;a href=&quot;https://www.atarimagazines.com/hi-res/v1n4/action.php&quot; rel=&quot;noreferrer&quot;&gt;this article from Hi-Res magazine&lt;/a&gt; shows Action! finishing a Sieve benchmark in the approximate time of a Z-80 C program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Action! also offered a surprisingly full-featured IDE before the acronym was coined: Integrated full-screen text editor, in-memory compilation (which made it quite fast), and a monitor for debugging.  Action! showed me how good tools make a big difference in the edit-compile-debug loop.&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="4222" LastEditDate="2020-05-30T17:17:37.223" LastActivityDate="2020-05-30T17:17:37.223" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15013" PostTypeId="2" ParentId="15007" CreationDate="2020-05-29T19:33:21.537" Score="11" Body="&lt;p&gt;OK, this is &lt;em&gt;very&lt;/em&gt; dusty material in my memory, so I'm relying a bit on Google/Wikipedia here. I &lt;em&gt;may&lt;/em&gt; be able to find some of my printed documentation, but it will take a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;granule&lt;/strong&gt; was the allocation unit for the filesystem. I don't remember the granule size on single-density drives, but &lt;a href=&quot;https://en.wikipedia.org/wiki/TRSDOS#Disk_management&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia says&lt;/a&gt; for double-density drives it was 6 sectors per granule, 3 granules per track. (Single-density drives had 10 sectors per track, I think, so probably 5 sectors per granule.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like &lt;strong&gt;lump&lt;/strong&gt; was a term specific to &lt;a href=&quot;http://www.trs-80.com/wordpress/dos-newdos80/#pdrive&quot; rel=&quot;noreferrer&quot;&gt;NEWDOS/80&lt;/a&gt;, which I never used. It appears to be one level higher than the granule; a lump contained multiple granules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both were logical divisions, as opposed to the mostly-physical sector and purely-physical track.&lt;/p&gt;&#xA;" OwnerUserId="495" LastActivityDate="2020-05-29T19:33:21.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15014" PostTypeId="2" ParentId="15004" CreationDate="2020-05-29T19:57:14.787" Score="26" Body="&lt;p&gt;C can be greatly improved as a language for the 6502 and Z80, as well as micros like the PIC and 8051, if one abandons the notion that implementations must provide for recursive subroutine calls, and adds qualifiers for things in zero page or pointers that are limited to accessing such things, and (for the Z80) adds qualifiers to identify objects that are known not to cross 256-byte boundaries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ironically, platforms like the PIC and 8051 which can't really support recursion at all and would thus seem unsuitable for C end up having better C compilers than those like the Z80 and 6502 which can barely support recursion, and thus generate code which is reentrant but inefficient instead of efficient non-reentrant code.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-05-29T19:57:14.787" CommentCount="23" ContentLicense="CC BY-SA 4.0" />
  <row Id="15015" PostTypeId="2" ParentId="15004" CreationDate="2020-05-30T02:13:14.890" Score="6" Body="&lt;p&gt;I suggest PLASMA (&lt;a href=&quot;https://github.com/dschmenk/PLASMA&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/dschmenk/PLASMA&lt;/a&gt;), a C-like language that compiles to interpreted code.  It has a much higher code-density than assembly language, and it's much faster than FORTH.&lt;/p&gt;&#xA;" OwnerUserId="4476" LastActivityDate="2020-05-30T02:13:14.890" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15016" PostTypeId="1" CreationDate="2020-05-30T09:04:36.177" Score="1" ViewCount="217" Body="&lt;p&gt;I got a control pedal from an old sewing machine that connects to a 3.5mm jack. It fits in the audio/microphone jack of my laptop. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way that I could detect from the laptop this pedal being actioned? &#xA;Is there any way extra hardware that would make this possible? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not the real thing, but almost:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OYLLM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OYLLM.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18339" LastActivityDate="2020-05-30T13:09:47.093" Title="Connecting analog pedal from sewing machine to computer audio jack" Tags="&lt;audio&gt;&lt;input-devices&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2020-05-30T13:11:22.313" ContentLicense="CC BY-SA 4.0" />
  <row Id="15017" PostTypeId="2" ParentId="15016" CreationDate="2020-05-30T13:09:47.093" Score="0" Body="&lt;p&gt;&lt;em&gt;[As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15016/connecting-analog-pedal-from-sewing-machine-to-computer-audio-jack#comment49777_15016&quot;&gt;mentioned&lt;/a&gt;. this question isn't in any way RC.SE related, as it's about generic devices and modern computers. I'll vote for moving to EE.SE and answer as if's already moved]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there any way that I could detect from the laptop this pedal being actioned? Is there any way extra hardware that would make this possible?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Extra hardware will do the trick - always.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adapting it to audio input will require active electronics (an amplifier), thus you'd need a second board and a power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if your Laptop still holds a real Joystick port, then it might be possible by simply building a connector, as the signal might be most likely a resistive (*1), much like from an analogue (PC) Joystick. Then again, having such a port seams unlikely :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next best way may be to hack a USB-Joystick as interface. Remove all 'joy' ... aeh mechanical parts and hook a connector for the paddle to the input - maybe with sole analogue adaption if it uses a different ranged resistor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ultimate best way is to build your own controller. Like using an Arduino. Hardware would be simply adding a resistor and a connector to the analogue input. Power supply already comes with USB. The controller software will be rather simply presenting the digitized value to whatever data format / logical interface you'd prefer. Most simple would be as serial port, as handling them is already part of basic Arduino workings, Or present it again as joystick interface, more appropriate anyway for analogue data. There are plenty examples on Arduino Sites.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - As DirkT already &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15016/connecting-analog-pedal-from-sewing-machine-to-computer-audio-jack#comment49777_15016&quot;&gt;mentioned&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-05-30T13:09:47.093" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15018" PostTypeId="2" ParentId="15004" CreationDate="2020-05-30T13:39:12.917" Score="12" Body="&lt;p&gt;Ada for cross compilation; though there WERE native Ada compilers (e.g. &lt;a href=&quot;http://www.rrsoftware.com/html/prodinf/janus95/j-ada95.htm&quot; rel=&quot;noreferrer&quot;&gt;Janus Ada&lt;/a&gt;, with a &lt;a href=&quot;http://www.z80.eu/ADA.html&quot; rel=&quot;noreferrer&quot;&gt;Z80 (Ada-83) release here&lt;/a&gt; and &lt;a href=&quot;https://books.google.co.uk/books?id=NjAEAAAAMBAJ&amp;amp;pg=PA41&amp;amp;lpg=PA41&amp;amp;dq=Z80%20Janus%20Ada&amp;amp;source=bl&amp;amp;ots=m5Hbet76D0&amp;amp;sig=ACfU3U2eZCNpSpH5JpIc9OgzgxVYq6lKQA&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwiw_4Or7NvpAhUTXMAKHUPXC2wQ6AEwAXoECAoQAQ#v=onepage&amp;amp;q=Z80%20Janus%20Ada&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;reviewed in 1982 here&lt;/a&gt;) it was stretching the capabilities of a 64kbyte machine. &#xA;Side note : the response to review was by Randy Brukardt; in 2020 he is still selling Janus Ada and actively contributing to the comp.lang.ada newsgroup!&lt;br&gt;&#xA;So, Gnat (utilising gcc and soon LLVM) can run on any decent host, and optimise pretty well for small targets - nowadays, AVR or MSP430. Ada is in some ways easier to optimise than C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But one other candidate worth mentioning for native compilation would be &lt;strong&gt;Modula-2&lt;/strong&gt;. A much smaller simpler (and yes, more restricted) language, rather in the Pascal mode, but much more amenable to compile on a decent Z80 system. I had the &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Hisoft_FTL_Modula-2&quot; rel=&quot;noreferrer&quot;&gt;FTL Modula-2 compiler&lt;/a&gt; running on a Z80 CP/M system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't remember specific benchmarks on Z80, but on slightly larger 8086/8088 systems (where &quot;small model&quot; executables were 64K) the JPI &lt;a href=&quot;http://www.edm2.com/index.php/TopSpeed_Modula-2&quot; rel=&quot;noreferrer&quot;&gt;Topspeed Modula-2&lt;/a&gt; compiler of the 1980s was probably the most efficient compiler for 8086 of any language in the DOS era.&lt;/p&gt;&#xA;" OwnerUserId="6700" LastEditorUserId="6700" LastEditDate="2020-05-30T15:20:40.893" LastActivityDate="2020-05-30T15:20:40.893" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15019" PostTypeId="2" ParentId="15009" CreationDate="2020-05-30T17:00:20.533" Score="4" Body="&lt;p&gt;The window shown on the screen shot is &lt;strong&gt;not&lt;/strong&gt; MacsBug, but some badly documented, most likely ROM resident debugging facility popping up when MacsBug is not installed. @BrianH mentions correctly to get out of that window with G and Return, though.&lt;/p&gt;&#xA;" OwnerUserId="10295" LastActivityDate="2020-05-30T17:00:20.533" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15020" PostTypeId="2" ParentId="15009" CreationDate="2020-05-31T04:08:01.217" Score="4" Body="&lt;p&gt;According to the &lt;a href=&quot;https://archive.org/details/Apple_IIe_Card_Owners_Guide/page/n55/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIe Card Owner's Guide&lt;/a&gt;, &lt;kbd&gt;Command&lt;/kbd&gt;-&lt;kbd&gt;Control&lt;/kbd&gt;-&lt;kbd&gt;Escape&lt;/kbd&gt; will open the Option Panel, which includes buttons to &quot;Quit IIe&quot; and &quot;Restart IIe&quot;, among other things.&lt;/p&gt;&#xA;" OwnerUserId="3261" LastActivityDate="2020-05-31T04:08:01.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15021" PostTypeId="1" AcceptedAnswerId="15022" CreationDate="2020-05-31T10:02:39.783" Score="3" ViewCount="144" Body="&lt;p&gt;&lt;code&gt;/CMD&lt;/code&gt; files on the various TRS-80 Model I and III OSes are machine code command files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They seem to have some internal format but not really a file header.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They often start with &lt;code&gt;01 02&lt;/code&gt; and then a 16-bit address that looks like where the file should be loaded, and then Z80 code. But one starts with &lt;code&gt;05 06&lt;/code&gt; followed by a 6-character string, but another starts with &lt;code&gt;01 02&lt;/code&gt; followed by a sensible address but then followed by a 7-character string. So I can't make out the pattern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't find either the format of these files or the method they are loaded and executed by the machine documented on the internet. I also can't find source code of any of the emulators that support running them directly from the host computer's file system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does somebody know how these /CMD commands work?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-06-01T13:51:19.627" Title="Do TRS-80 Model I and Model III load and execute /CMD files using specific memory addresses?" Tags="&lt;file-format&gt;&lt;trs-80&gt;&lt;trs-80-model-iii&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15022" PostTypeId="2" ParentId="15021" CreationDate="2020-05-31T11:11:56.557" Score="3" Body="&lt;p&gt;/CMD files are a series of tagged records. Some record types have meaning only for certain features of some of the TRS-80 DOSes. Only two seem important for loading and executing them.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;byte:        type&#xA;byte:        size* in bytes&#xA;bytes[size]: data&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;*&lt;code&gt;size&lt;/code&gt; 0 → 256 bytes&lt;br&gt;&#xA;*&lt;code&gt;size&lt;/code&gt; for &lt;code&gt;type 1&lt;/code&gt; only, &lt;code&gt;size&lt;/code&gt; 1 → 257 bytes, &lt;code&gt;size&lt;/code&gt; 2 → 258 bytes&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;type 1:     object code (load block)&#xA;data[0..1]: load address, 16-bit little-endian&#xA;data[2...]: the actual program code &amp;amp; data&#xA;&#xA;type 2:     transfer address (entry address)&#xA;data[0..1]: address execution begins, 16-bit little-endian&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There should be one &lt;code&gt;type 2&lt;/code&gt; field, it should be the last field, and it indicates the end of the file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All &lt;code&gt;type&lt;/code&gt;s up to &lt;code&gt;0x1F&lt;/code&gt; can be otherwise skipped by using the &lt;code&gt;size&lt;/code&gt; field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All &lt;code&gt;type&lt;/code&gt;s above &lt;code&gt;0x1F&lt;/code&gt; are invalid. Perhaps the file is not really a /CMD file or is corrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is often garbage following the &lt;code&gt;type 2&lt;/code&gt; field. (Perhaps they were written to disk in sizes rounded to the next exact sector size?)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I think I might have found it. There's a &quot;hex2cmd&quot; command on Ubuntu:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;hex2cmd&lt;/strong&gt; - convert Intel hex format to TRS-80 CMD format&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And it goes on to say&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The LDOS Quarterly, April 1, 1982 (Vol 1,  No  4) &#xA;  ⟨&lt;a href=&quot;http://www.tim-mann.org/misosys.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.tim-mann.org/misosys.html&lt;/a&gt;⟩, has documentation of the&#xA;  TRS-80 DOS CMD file format.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While I didn't find it in the link they gave, I did find the LDOS Quarterly they mention. It's in a column called &lt;a href=&quot;https://www.tim-mann.org/trs80/doc/ldosq1-4.pdf#page=42&quot; rel=&quot;nofollow noreferrer&quot;&gt;Roy’s Technical Corner&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15021/do-trs-80-model-i-and-model-iii-load-and-execute-cmd-files-using-specific-memor#comment49828_15021&quot;&gt;ninjalj&lt;/a&gt; found &lt;a href=&quot;http://electrickery.xs4all.nl/comp/trs80/doc/Trscmdff.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;another copy&lt;/a&gt; much faster than than me while I was writing up my answer.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And now I've found a much more recent post on this topic by the blog of Jim Lawless: &lt;a href=&quot;https://lawlessguy.wordpress.com/2016/12/04/understanding-trs-80-cmd-files/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Understanding TRS-80 CMD Files&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The post even includes the C source for Jim's own tool for scanning the CMD files. He also mentions some confusing aspects that the documentation didn't make clear.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-06-01T13:51:19.627" LastActivityDate="2020-06-01T13:51:19.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15023" PostTypeId="2" ParentId="14975" CreationDate="2020-05-31T13:24:21.440" Score="1" Body="&lt;p&gt;The Amstrad CPC manual (chapter 7 part 12) listed three &quot;disk formats&quot; supported by AMSDOS, which it named &lt;strong&gt;&quot;System&quot;&lt;/strong&gt;, &lt;strong&gt;&quot;Data only&quot;&lt;/strong&gt; and &lt;strong&gt;&quot;IBM&quot;&lt;/strong&gt; (CP/M 2.2 only).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All three of these formats had:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;40 tracks&lt;/li&gt;&#xA;&lt;li&gt;64 directory entries&lt;/li&gt;&#xA;&lt;li&gt;512 bytes per sector, no matter the track.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And the format-specific characteristics:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;System had 9 sectors per track, two reserved tracks for CP/M boot (the manual notes the format is called &quot;Vendor&quot; instead when the System tracks are empty)&lt;/li&gt;&#xA;&lt;li&gt;Data Only had 9 sectors per track too, but no reserved tracks.&lt;/li&gt;&#xA;&lt;li&gt;IBM had 8 sectors per track, and one reserved track. The manual says it's compatible with the &quot;single side&quot; format used by CP/M in IBM PC.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9145" LastActivityDate="2020-05-31T13:24:21.440" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15024" PostTypeId="2" ParentId="12129" CreationDate="2020-05-31T17:11:50.537" Score="8" Body="&lt;p&gt;Malvino's approach is pretty much a child of its time. I'm not aware of any modern textbook that will spend much time on 74xx / MSI logic, because anything more complicated than a gate or two will be synthesized into a CPLD / FPGA / ASIC these days. CPU design, too, has become a topic too specialised and complex to be treated in detail in an introductory textbook. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That gives you four options. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are looking for a &lt;strong&gt;modern book on digital design&lt;/strong&gt; (but neglecting 74xx logic and CPUs), I've heard good things about Brock J LaMeres' &lt;em&gt;&lt;a href=&quot;https://www.springer.com/de/book/9783319816999&quot; rel=&quot;nofollow noreferrer&quot;&gt;Introduction to Logic Circuits &amp;amp; Logic Design with VHDL&lt;/a&gt;&lt;/em&gt; and &lt;em&gt;&lt;a href=&quot;https://www.springer.com/de/book/9783030136048&quot; rel=&quot;nofollow noreferrer&quot;&gt;Introduction to Logic Circuits &amp;amp; Logic Design with Verilog&lt;/a&gt;&lt;/em&gt; (essentially the same book, using the HDL of your choice). Both are currently available for free (&lt;a href=&quot;https://link.springer.com/book/10.1007%2F978-3-030-12489-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://link.springer.com/book/10.1007%2F978-3-030-13605-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, respectively, as of May 31st, 2020) as part of Springer's initiative &lt;a href=&quot;https://www.springernature.com/de/librarians/news-events/all-news-articles/industry-news-initiatives/free-access-to-textbooks-for-institutions-affected-by-coronaviru/17855960&quot; rel=&quot;nofollow noreferrer&quot;&gt;to provide free textbooks during the Coronavirus outbreak&lt;/a&gt;, &lt;a href=&quot;https://link.springer.com/book/10.1007/978-3-319-92804-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;as is&lt;/a&gt; &lt;a href=&quot;https://www.springerprofessional.de/introduction-to-digital-systems-design/16068340&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Introduction&#xA;to Digital Systems Design&lt;/em&gt;&lt;/a&gt; by Donzellini et al.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a modern (or, rather, timeless) &lt;strong&gt;introduction to electronics&lt;/strong&gt; is what you're looking for (with 74xx logic and logic interfacing, but CPUs only treated down to a block diagram level of detail), nothing beats &lt;a href=&quot;https://artofelectronics.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;The Art of Electronics&lt;/em&gt;&lt;/a&gt;, by Horowitz and Hill. The 3rd edition dates from 2015. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a &lt;strong&gt;one-to-one alternative to Malvino&lt;/strong&gt;, you'll have to look for something from rougly the same time period. The first book that comes to mind is the excellent &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp8/pdp8i/Prosser_The_Art_of_Digital_Design_2ed_1987.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;The Art of Digital Design&lt;/em&gt;&lt;/a&gt; by Prosser and Winkel from 1987, which uses an actual PDP-8 rather than Malvinos SAPs as an example. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, if it's &lt;strong&gt;CPU / Computer Architecture&lt;/strong&gt; you're after, you can take a look at Hennessy and Patterson, &lt;em&gt;Computer Architecture: A Quantitative Approach&lt;/em&gt;, now in its fifth edition. Graduate level, lots of information, but definitely from a higher altitude than Malvino (as necessitated by modern CPUs being way more complex). &lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-06-03T20:24:53.800" LastActivityDate="2020-06-03T20:24:53.800" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15025" PostTypeId="2" ParentId="14975" CreationDate="2020-05-31T18:18:55.390" Score="3" Body="&lt;p&gt;I don't remember them having a “name”. Disk interchangeability was less of a thing than it became between 16-bit computers. Amstrads were very much &lt;em&gt;not&lt;/em&gt; interchangeable, since they had the Hitachi 3&quot; drives, used by &lt;a href=&quot;https://en.wikipedia.org/wiki/Tatung_Einstein&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tatung (UK)&lt;/a&gt; and very few others. Even the PCW9512+ with its 720 K 3½&quot; drive used a format derived from the earlier CPC disks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The format is CP/M*-ish*, circa CP/M-80 2.2. It supported user numbers, but didn't expressly display file dates. While CP/M+ (aka CP/M-80 3.1) on the CPC6128 and PCW machines could create file dates, the machines didn't have RTCs so the feature was seldom used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even amongst CP/M machines there was little disk interoperability. As long as the BDOS commands matched the FDC, you could have CP/M filesystems on any size of disk, hard or soft sectored, single or double sided, 40/80 tracks, 8/9/… sectors per track. Exchanging data between machines generally meant a null modem and xmodem/kermit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if anything, I'd call these Amstrad format disks.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-05-31T18:18:55.390" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15026" PostTypeId="1" AcceptedAnswerId="15033" CreationDate="2020-05-31T18:24:10.147" Score="8" ViewCount="2463" Body="&lt;p&gt;Is it possible to connect an old 386 machine to network (ethernet)? It has only parallel and serial ports. I'm not expecting much, just planning to use it as a remote terminal. The machine in question is a Commodore C386SX-LT&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2020-06-01T19:56:16.520" LastActivityDate="2020-06-03T02:36:00.270" Title="Connect Ethernet via Parallel or Serial in old laptop" Tags="&lt;network&gt;&lt;80386&gt;&lt;ethernet&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15027" PostTypeId="2" ParentId="15026" CreationDate="2020-05-31T18:39:59.587" Score="11" Body="&lt;p&gt;Since it's a pretty early laptop without a PCMCIA port, there won't be a way to add an Ethernet port. Your best approach is to use the serial port to connect via null-modem cable to a modern machine that either has an RS-232 serial port, or has hardware and drivers for bridging its USB port to RS-232 serial. Once the two are connected, use of the laptop as a terminal should be a trivial matter of running a terminal server on the modern machine and a terminal emulator, probably under MS-DOS, on the laptop (i.e. ProComm).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to transfer files, there are Z-modem implementations on modern Linux machines, and probably for Windows too. So you can use a Z-modem capable DOS terminal emulator to easily transfer files at perhaps blazing speeds of 115 kbps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going beyond simple file transfer, FreeDOS could be installed on the laptop along with TCP/IP, PPP, and applications like &lt;code&gt;telnet&lt;/code&gt;, &lt;code&gt;ftp&lt;/code&gt;, and &lt;code&gt;wget&lt;/code&gt; if you wanted to connect the laptop to the Internet. Again, a Linux peer can be the bridge for this, effectively simulating an old &quot;dial-up&quot; type of Internet connection for the laptop. Setup is much more complicated than just using the terminal emulator approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to use the Parallel port, you could try to get LapLink going. This would be the period-correct way of connecting a laptop to a desktop. But your desktop will need to be able to run either very old LapLink software, or a modern work-alike (I know of none). Alternatively, MS-DOS 6.22 has INTERLNK.EXE, if you can run its server using MS-DOS emulation on your desktop. This was Microsoft's answer to LapLink back in the day...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things get more interesting if the laptop has a PCMCIA port or built-in Ethernet. Obviously such machines are still pretty compatible with modern networking, especially if you can run TCP/IP. You could even just install Linux on such a laptop, and then it would be &quot;plug-and-play&quot; with modern computers, sort of... such setups require patience to get going and fail on first contact with modern SSL implementations.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-05-31T18:47:56.950" LastActivityDate="2020-05-31T18:47:56.950" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15028" PostTypeId="2" ParentId="15026" CreationDate="2020-05-31T18:55:28.757" Score="20" Body="&lt;p&gt;Yes. For example, the Xircom PE3-10BT is a parallel port adapter that allows an RJ45 connector be plugged into it. You don't get full 10 Mbps with it, but it works. Mine is powered via a PS/2 port passthrough plug and jack. I use mine with my 386 laptop.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2020-05-31T18:55:28.757" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15029" PostTypeId="2" ParentId="15026" CreationDate="2020-05-31T18:59:21.880" Score="13" Body="&lt;p&gt;If you have another computer to hook it up to and act as a bridge (or router), you could in principle run SLIP or PPP over the serial port to another machine. You're unlikely to get speeds exceeding 100 kb/s.&lt;/p&gt;&#xA;" OwnerUserId="3842" LastActivityDate="2020-05-31T18:59:21.880" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15031" PostTypeId="2" ParentId="12086" CreationDate="2020-06-01T08:35:22.963" Score="8" Body="&lt;p&gt;Here is the English manual: &lt;a href=&quot;http://basic.hopto.org/basic/manual/Sharp%20EL-9000%20EN.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sharp EL-9000&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="18363" LastEditorUserId="79" LastEditDate="2020-06-01T15:11:10.630" LastActivityDate="2020-06-01T15:11:10.630" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15032" PostTypeId="1" AcceptedAnswerId="15035" CreationDate="2020-06-01T15:22:25.513" Score="15" ViewCount="2934" Body="&lt;p&gt;I recently picked up a &lt;a href=&quot;https://ultimate64.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;1541 Ultimate II+&lt;/a&gt; for my Commodore 64 and have been amazed at how this device seemingly can do every flash memory and other enhancement feature for the machine, short of CPU acceleration. One thing that I've been particularly impressed with is how you can press the 'Menu' button and the U2+ firmware takes over to allow disk image selection and other configuration, but then will seamlessly go back to where you were before without losing state. In comparison to (say) an Apple II with a &lt;a href=&quot;http://dreher.net/?s=projects/CFforAppleII&amp;amp;c=projects/CFforAppleII/main.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;CFFA3k&lt;/a&gt;, this is way more convenient since the CFFA doesn't support a similar feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe that the C64 supports overlays of probably every section of RAM, but I'm curious how a cartridge can do this without interrupting the machine's state? Is it DMA'ing out all of the RAM and processor states and then running its own code (and then putting it back later) or something else like just saving processor context and then masking all RAM into the cartridge?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2020-06-03T17:28:54.993" LastActivityDate="2020-06-03T17:28:54.993" Title="How do C64 cartridges swap running programs without losing state and context?" Tags="&lt;commodore-64&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15033" PostTypeId="2" ParentId="15026" CreationDate="2020-06-01T16:04:41.043" Score="7" Body="&lt;p&gt;One option is to use a modern Linux board to act as a fake modem connected to serial port. Then you can use any old software that would connect to internet by a modem connection, without actually having to pay the massive phone bills of the 1990s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The software setup is not very complex, mainly requiring installing &lt;code&gt;ppp&lt;/code&gt; server on Linux. There is also a &lt;a href=&quot;http://podsix.org/articles/pimodem/&quot; rel=&quot;noreferrer&quot;&gt;tutorial for building a PiModem out of Raspberry Pi&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware-wise, you need to get the correct signals connected, match the voltage levels and ensure that handshaking works. Handshaking is especially important as a 386 might not be up to continuously handling the full 115kbps of data, considering fastest modems were only half that speed. Depending on the UART used on the 386, you might even be able to get 230 kbps or higher baudrates working.&lt;/p&gt;&#xA;" OwnerUserId="8014" LastActivityDate="2020-06-01T16:04:41.043" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15034" PostTypeId="2" ParentId="15032" CreationDate="2020-06-01T17:27:55.610" Score="8" Body="&lt;p&gt;A partial answer, at best, but the various freezer cartridges use the C64's otherwise mostly-useless support for Commodore MAX Machine cartridges, specifically to substitute ROM over the 6502's hardware vector area. Combine that with a cartridge's ability to trigger an NMI and you have a way of starting to execute from cartridge without permanently affecting the C64's memory, other than adding a few extra bytes on the stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, it's up to the cartridge what it does to present options to the user but, as you'd expect, it means copying existing contents of RAM elsewhere and copying them back later. I don't know the specifics of the 1541 Ultimate II+.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-06-01T17:27:55.610" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15035" PostTypeId="2" ParentId="15032" CreationDate="2020-06-01T17:54:30.873" Score="25" Body="&lt;p&gt;There isn't any actual &quot;swapping&quot; of code running in the C64's main memory. Rather, it is an instantaneous switch in whether the code is running from the main memory of from the cartridge memory. Furthermore, with a more sophisticated cartridge like the C64 Ultimate II, we also switch between running native code on the 6502 and running embedded code on the cartridge's own embedded CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Ultimate II cartridge works under the same principle as the older &quot;Freezer&quot; cartridges that have been popular on the C64 since 1985 (I believe &lt;a href=&quot;https://rr.pokefinder.org/wiki/ISEPIC&quot; rel=&quot;noreferrer&quot;&gt;ISEPIC&lt;/a&gt; was the first). Specifically, it takes advantage of the &quot;Ultimax&quot; mode that a C64 cartridge can enter. This mode was present in the C64 so that it could be compatible with cartridges designed for &lt;a href=&quot;https://www.c64-wiki.com/wiki/Commodore_MAX_Machine&quot; rel=&quot;noreferrer&quot;&gt;Commodore's MAX Machine&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When in &lt;strong&gt;Ultimax mode&lt;/strong&gt;, the cartridge can take over the area of the C64 memory map usually occupied by the Kernal ROM ($E000-$FFFF). This means the cartridge takes over all the interrupt handlers too ($FFFA-$FFFF). Additionally, the cartridge is able to halt the 6502 in the C64, and master the bus (using the cartidge port DMA line), &lt;strong&gt;including the I/O device region&lt;/strong&gt; of the C64 memory ($D000-$DFFF). In other words, full cartridge control of execution, memory, and I/O!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;code for the Ultimate II is open source&lt;/strong&gt;. For more information take a look at &lt;a href=&quot;https://github.com/markusC64/1541ultimate2/blob/master/software/io/c64/c64.cc&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;c64.cc&lt;/code&gt;&lt;/a&gt;. This is the main part of the Ultimate II's application. It is written in C++, and compiled to run on an embedded processor that is synthesized in the cartridge's FPGA. Specifically, the methods &lt;code&gt;C64::freeze&lt;/code&gt; and &lt;code&gt;C64::unfreeze&lt;/code&gt; are good starting points to understand what is going on. Once you understand that this &lt;strong&gt;C++ code running on the cartridge co-processor&lt;/strong&gt; can reach into the C64 memory and IO space, then it is easier to imagine how it can do things like display the menus, DMA load software directly to the C64's RAM, emulate many older C64 cartridges, and do it all without disturbing the internal state of a &quot;frozen&quot; C64 program.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-06-02T11:23:03.780" LastActivityDate="2020-06-02T11:23:03.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15036" PostTypeId="1" CreationDate="2020-06-01T18:14:21.553" Score="2" ViewCount="167" Body="&lt;p&gt;I found my assumed long lost “win98” toshiba protege laptop in our wet and moldy storage container. Was there for years, through cold-humid variances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The files on his computer are extremely important/private, and I need some advice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I’ve dried out the laptop and removed the hard drive. Although the machine itself appeared soaked and sporadically covered in mold, the drive itself appears to be in great physical shape with almost no corrosion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have not plugged it in, I have not opened it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is my best route to ensure I safely recover the data?&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Send to popular and trusted data recovery service? My data crucial, yes I understand the audit certifications that protect privacy, but I’m still weary, so this is a last resort.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Buy IDE to usb connector and see if it boots? Scared to do this bc I may damage the disc. Do I need to remember my password for win98 if I go this route.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Find an independent that has a air curtain/clean room that will do the work in my presence and use my offline machine? Is this an outlandish request?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="18366" LastActivityDate="2020-06-01T18:32:29.597" Title="HDD data recovery advice" Tags="&lt;windows-98&gt;&lt;disk-drive&gt;&lt;ide&gt;&lt;toshiba&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15037" PostTypeId="2" ParentId="15036" CreationDate="2020-06-01T18:30:13.653" Score="1" Body="&lt;p&gt;If you are mainly concerned about successfully recovering the data, then the safest route is to hand it over to a trustworthy data recovery &lt;em&gt;professional&lt;/em&gt;. They will have more knowledge and tools at their disposal to be successful than you will. Alas, you say this is your &quot;last resort&quot;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Option #2 is not unreasonable. USB-to-IDE adapters are inexpensive and work well on many modern computers when connecting old FAT32 format hard drives, which is what you seem to have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the data on your FAT32 drive is probably unencrypted. You won't need any passwords to read the entirety of the file system from a modern computer via USB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you try this, the first few seconds of powering the HD and listening to it (try to) spin up will tell a lot. If it doesn't spin up normally and quietly, then there is physical damage, and you may have just made it worse. But, you already knew that before you went down this path. On the other hand, maybe the HD is perfectly functional and you can now backup your files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a risk vs. reward quandary, but you already knew this too.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-06-01T18:30:13.653" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15038" PostTypeId="2" ParentId="15036" CreationDate="2020-06-01T18:32:29.597" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Buy IDE to usb connector and see if it boots?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Close, but not quite. Do &lt;strong&gt;not&lt;/strong&gt; try to boot the drive. That will almost certainly not work. What you want to do is simply &lt;strong&gt;read&lt;/strong&gt; the drive on a new computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The act of simply turning on the drive &lt;em&gt;could&lt;/em&gt; cause problems. No guarantee. But my hunch is that it will either work OK (in which case, you copy the files as quickly as you can and then turn off the drive because even if it does work, there are problems that can happen the longer it is on, so this gives you the best chance of another try later) or it won't work much at all (e.g., not spin up, or spin up but be unreadable).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it won't spin up then the only practical choice is a data recovery company.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it spins up and your new computer recognizes the drive but has trouble reading files, then there is often some hope of recovering the files without sending the drive elsewhere, but that will depend on the specifics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless you had full-drive encryption (very unlikely on a consumer Windows 98 machine), no passwords will be needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are able to do so, you may want to try first reading the drive on a Linux system (which could be &quot;boot your new Windows computer using a USB with Linux on it&quot;) as that will minimize the stuff that operating systems, especially Windows, like to do when connecting to a drive.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2020-06-01T18:32:29.597" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15039" PostTypeId="2" ParentId="15026" CreationDate="2020-06-01T19:00:44.883" Score="3" Body="&lt;p&gt;Assuming you're looking to put your laptop on the internet as opposed to just do file transfers or some such, there are a couple of DOS TCP/IP stacks.  If you're lucky, you can find one of the Xircom PIO ethernet controllers.  More likely, you'll do it over the serial port.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You're looking for an IP stack that supports SLIP or PPP, which are IP-over-serial standards.  Once such open source package is &lt;a href=&quot;https://www.brutman.com/mTCP/mTCP.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;mTCP&lt;/a&gt; which also includes a selection of client programs (e.g. FTP).&lt;/li&gt;&#xA;&lt;li&gt;You'll need a router of some sort between serial and ethernet.  Linux can do this just fine, and probably the easiest and best documented way to do this.&lt;/li&gt;&#xA;&lt;li&gt;You'll need a serial &quot;null modem cable&quot; to attach the laptop to the router. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Depending on what DOS stack you end up, you'll then do something like the following on the router to bring the link up:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;pppd -detach crtscts lock proxyarp local IP:remote IP /dev/ttyS3 38400 &amp;amp;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fortunately, there's a lot of documentation once you're on track.&lt;/p&gt;&#xA;" OwnerUserId="6904" LastActivityDate="2020-06-01T19:00:44.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15040" PostTypeId="2" ParentId="15004" CreationDate="2020-06-01T19:10:02.667" Score="9" Body="&lt;p&gt;The main problem for high-level-languages on these platforms, and especially the 6502, is the small hardware stack. 256 bytes does not give one much room to work with for languages that intend to push large activation records on the stack.&lt;/p&gt;&#xA;&lt;p&gt;As others have noted above, the solution is to remove recursion from your language definition, and in a more general sense, any &amp;quot;local&amp;quot; information.&lt;/p&gt;&#xA;&lt;p&gt;Also worth mentioning, in the 1970s and early 80s when these machines were the bomb, the language all the cool people were working with were the many variations of ALGOL. Most mainframe systems had a &amp;quot;systems programming language&amp;quot; based to some degree on ALGOL layout, and Pascal once that became, effectively, the &amp;quot;new ALGOL&amp;quot;. C did not become the universal solvent until the 16/32 bit machines had been in the market for some time.&lt;/p&gt;&#xA;&lt;p&gt;So for instance, on the Atari you had &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Action!_(programming_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Action!&lt;/a&gt;&lt;/em&gt;, an ALGOL-derived language with no recursion. This not only reduced the size of the stack use, but also greatly reduced the complexity of a proc call, you basically just did the branch. This later bit remains a topic of discussion to this day, as in Swift where Apple tries to convince you to use &lt;code&gt;struct&lt;/code&gt; instead of &lt;code&gt;class&lt;/code&gt; to reduce call overhead.&lt;/p&gt;&#xA;&lt;p&gt;Raff mentioned Forth, which was designed as a multi-platform language that used its own stack structure to provide C-like capabilities on machines that lacked the requisite hardware support. While I guess it was a success in that respect, I recall trying to program in it and having feelings much the same as drinking way too much cheap gin.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2021-04-08T14:15:19.650" LastActivityDate="2021-04-08T14:15:19.650" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15041" PostTypeId="1" AcceptedAnswerId="15049" CreationDate="2020-06-01T19:50:10.200" Score="3" ViewCount="375" Body="&lt;p&gt;Is the model shown on pictures an authentic Commodore C386SX-LT? Why does it look different to other photos on the Internet (some additional grey keys? above keyboard):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.spacereh.de/hc/com/sx386lt.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.spacereh.de/hc/com/sx386lt.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LSUE4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LSUE4.jpg&quot; alt=&quot;front&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uvpgj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uvpgj.jpg&quot; alt=&quot;top&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9LUjW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9LUjW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="3290" LastEditDate="2020-06-07T04:00:43.697" LastActivityDate="2020-06-07T04:00:43.697" Title="Is this real Commodore C386SX-LT" Tags="&lt;commodore&gt;&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15042" PostTypeId="2" ParentId="14839" CreationDate="2020-06-01T22:42:11.293" Score="0" Body="&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;br&gt;&#xA;&lt;strong&gt;I think the most correct answer to this question may actually be here in this link&lt;/strong&gt;,   &lt;a href=&quot;https://www.cadhistory.net/03%20MIT%20CAD%20Roots%201945-1965.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;, searching for words like &quot;edit&quot; &quot;text&quot; or &quot;writer&quot; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, people replying to the question linked to this one claim the following 2 computers would of been capable &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Baby&quot; rel=&quot;nofollow noreferrer&quot;&gt;1st link&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Mark_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;2nd link&lt;/a&gt;, although there's no evidence it was done in terms of a full alphabet and keyboard etc .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possibility or answer to this question ( too difficult to find information on ) is that the 'earliest real-time text editor' ( displaying on a crt ) may in no way have been connected to a computer, it may have simply been some sort of simple electromechanical system containing a video-memory somehow using something like Charactrons ( Charactron, Typotron, Monoscope, and the very earliest the Monotron ) with the video memory just storing coordinates linked to a specific character ), all done without a computer, but using a keyboard, or some other similar method but not using things like Charactrons but using some other type of video memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also not forgetting the Motograph patented in 1923 &lt;a href=&quot;https://en.wikipedia.org/wiki/News_ticker&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;, the rolling text adverts up on buildings made of light-bulbs, individual letters were placed in frames on a conveyor belt which touched electrical contacts .&lt;br&gt;&#xA;&lt;strong&gt;_________________________&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the PDP-1, the first machine was actually delivered in 1959, there seems to have been a crt ( publicised with the tv type crt screen in 1959 ), which displayed text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used to have a much higher quality photo of the text on the crt, where you could magnify it and see the font, but now I can only find the image below, and also the image without the text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The images shown below, are from the following sites -&lt;br&gt;&#xA;  - &lt;a href=&quot;https://history-computer.com/ModernComputer/Electronic/PDP-1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;information and photos&lt;/a&gt;&lt;br&gt;&#xA;  - &lt;a href=&quot;https://www.ee.ryerson.ca/~elf/ancient-comp/pdp1_2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;photo&lt;/a&gt;        &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no further information about the text on the PDP-1 crt, although maybe it's related to the above mentioned TVEDIT .&lt;br&gt;&#xA;&lt;strong&gt;_________________________&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may already know about the following question, not sure if it's a duplicate, which includes a question and information ( in the comments ) about some radar screens which displayed text, and a machine in the late 1940's  - &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11550/first-computer-to-have-interactive-text-on-a-crt&quot;&gt;First computer to have interactive text on a CRT?&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;_________________________&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Whirlwind computer in 1949&lt;br&gt;&#xA;    Quote from this website &lt;a href=&quot;http://christoph-knoth.com/shared/computed_type_-_christoph_knoth.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;webpage&lt;/a&gt;  &quot;Whirlwind went operational in 1949. It&#xA;was the first digital computer capable of displaying real time text and graphics on a&#xA;video terminal, which was an oscilloscope screen.&quot;          &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Searching for keywords like &quot;whirlwind&quot; &quot;crt&quot;   &quot;text&quot; &quot;editor&quot;gets results like this &lt;a href=&quot;https://books.google.es/books?id=K4YlDwAAQBAJ&amp;amp;pg=PA131&amp;amp;lpg=PA131&amp;amp;dq=%22whirlwind%22%20%22crt%22%20%20%20%22text%22%20%22editor%22&amp;amp;source=bl&amp;amp;ots=FvXzzIzD_O&amp;amp;sig=ACfU3U2IbFt7x-plGiaZWkR2l9i2mYB_jQ&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwjd94e2oOTpAhXHDWMBHR6wA4EQ6AEwAHoECAoQAQ#v=onepage&amp;amp;q=%22whirlwind%22%20%22crt%22%20%20%20%22text%22%20%22editor%22&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;        &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;_________________________&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also -&lt;br&gt;&#xA; - the small desktop sized, crt screen calculator, Friden EC-130 of 1963, which was then copied by other companies .&lt;br&gt;&#xA; - the  IBM 2260 of 1964 ( &lt;a href=&quot;http://www.righto.com/2019/11/ibm-sonic-delay-lines-and-history-of.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;information and photo&lt;/a&gt; , &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2260&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia page&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9gEFC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9gEFC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0g9oP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0g9oP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16462" LastEditorUserId="16462" LastEditDate="2020-06-05T02:30:34.837" LastActivityDate="2020-06-05T02:30:34.837" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="15043" PostTypeId="1" CreationDate="2020-06-01T23:48:28.200" Score="2" ViewCount="155" Body="&lt;p&gt;Does anyone know if the Mega Drive or Arcade version of Afterburner use FM synthesis or sound samples for orchestra hit in its song &quot;Afterburner&quot;. I find oscilloscope views of each version but I'm not certain if I understand the wave forms in each video:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is &lt;a href=&quot;http://www.youtube.com/watch?v=A--I2jiobh8&amp;amp;t=9m50s&quot; rel=&quot;nofollow noreferrer&quot;&gt;an oscilloscope view of the Mega Drive version&lt;/a&gt; (looks like it uses FM synthesis, see second square from left, bottom row).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is &lt;a href=&quot;https://www.youtube.com/watch?v=zD4tzDi-F9M&amp;amp;t=0m10s&quot; rel=&quot;nofollow noreferrer&quot;&gt;an oscilloscope of the Arcade version&lt;/a&gt; (looks like it uses sampled sounds, see two middle row, left side).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any person program music for this game or disassemble its ROM probably know.&lt;/p&gt;&#xA;" OwnerUserId="18369" LastEditorUserId="6659" LastEditDate="2020-06-02T17:08:36.967" LastActivityDate="2020-06-02T17:08:36.967" Title="Did the Mega Drive and/or Arcade version of the song &quot;Afterburner&quot; use FM synthesis or samples?" Tags="&lt;z80&gt;&lt;sega-genesis&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15044" PostTypeId="1" CreationDate="2020-06-02T00:55:52.623" Score="1" ViewCount="513" Body="&lt;p&gt;The photo below shows what may be a CRT for the TX-0 (transistorized experimental computer) in 1956, referring to what may be a CRT on the left side, not to the CRT on the right side .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that is a CRT on the left side, what is it displaying  ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The image is sourced from the following webpage, just click 2 times on the tiny image of the TX-0 on the timeline on that webpage to expand it to it's maximum size -&#xA;&lt;a href=&quot;https://www.timetoast.com/timelines/idt-history-of-computers-timeline&quot; rel=&quot;nofollow noreferrer&quot;&gt;history-of-computers-timeline&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The image below the TX-0 image, shows that a crt screen with square looking corners ? ( not sure though ) did exist in a similar time-frame, it shows the DAC-1 possibly in 1959 .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/chxoF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/chxoF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rAZEO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rAZEO.png&quot; alt=&quot;DAC-1 possibly 1959&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16462" LastEditorUserId="16462" LastEditDate="2020-06-02T21:02:48.503" LastActivityDate="2020-06-03T05:18:59.057" Title="Is this a computer screen in 1956, and if so, what is it displaying?" Tags="&lt;hardware&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15045" PostTypeId="2" ParentId="15044" CreationDate="2020-06-02T01:02:23.930" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;If that is a crt on the left side, what is it displaying ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Clearly a video image. Maybe some modern screen showing a documentation/educational video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/TX-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;TX-0&lt;/a&gt; used an oscilloscope with 512x512 addressable positions, strictly B&amp;amp;W (no grayscales). The TX-0 had only one such screen (to the right), not capable of generating such a picture. See also this (somewhat) contemporary &lt;a href=&quot;https://dspace.mit.edu/bitstream/handle/1721.1/4132/RLE-TR-627-42827671.pdf;jsessionid=57154857E15D65FD9A24E5E2CF9DFEDD?sequence=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation&lt;/a&gt; (p.13) or this &lt;a href=&quot;https://web.archive.org/web/20020426085021/http://ed-thelen.org/comp-hist/TheCompMusRep/TCMR-V08.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;collection of stories&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, TX-0/&lt;a href=&quot;https://en.wikipedia.org/wiki/TX-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;TX-2&lt;/a&gt; (there was no TX-1 - and TX-2 is an extended TX-0) was rebuilt many times in various configurations, so there is no definite picture either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See here for an early picture, still without the CRT, only a &lt;a href=&quot;https://en.wikipedia.org/wiki/Friden_Flexowriter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Flexowriter&lt;/a&gt; as a terminal:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VUsDO.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VUsDO.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this is a later one, with a different setup, including the CRT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/91IaC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/91IaC.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="10678" LastEditDate="2020-06-02T13:52:15.130" LastActivityDate="2020-06-02T13:52:15.130" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15048" PostTypeId="2" ParentId="15044" CreationDate="2020-06-02T07:55:36.480" Score="3" Body="&lt;p&gt;No it's not. It's clearly a modern LCD display. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's too flat and too square to be a 1956 era CRT display. It also appears to be mounted on the console rather than in it. For comparison, the CRT on the right might be 50's era. Note how it is much smaller and the &quot;bevels&quot; are much bigger. This is because CRTs can't be square with sharp corners as they are a bit like giant glass lightbulbs (note also that the surface is slightly convex).&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2020-06-02T07:55:36.480" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15049" PostTypeId="2" ParentId="15041" CreationDate="2020-06-02T19:38:03.010" Score="7" Body="&lt;p&gt;(Summarising the comments above by UncleBod and myself as an answer.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the early 90s, Commodore was no longer developing / designing their own PCs, as they had done &lt;a href=&quot;https://de.wikipedia.org/wiki/Commodore_PC-10_bis_PC-70&quot; rel=&quot;noreferrer&quot;&gt;from the PC-10 through to the PC-50&lt;/a&gt;. Instead, they moved to selling Commodore-badged units from contract manufacturers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As part of this process, the case design moved from the typical duotone beige of earlier Commodore offerings (which can also be seen in e.g. the C-64C, the C-128, and the Amiga 2000) to a generic whatever-was-cheapest, as can be seen quite nicely &lt;a href=&quot;http://www.zimmers.net/cbmpics/cpcs2.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.zimmers.net/cbmpics/cpcs3.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the time the C386SX LT came around, it seems Commodore had stopped caring about a consistent &quot;brand appearance&quot; altogether: The C386SX LT was sourced from at least two manufacturers, with very different cases. A side-by-side comparison of both models can be seen &lt;a href=&quot;http://scuzzscink.com/amiga/amiga_scuzz373.htm&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-06-02T19:38:03.010" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15050" PostTypeId="1" AcceptedAnswerId="15053" CreationDate="2020-06-02T20:34:16.380" Score="1" ViewCount="425" Body="&lt;p&gt;Although useless, &lt;a href=&quot;https://stackoverflow.com/a/18972014&quot;&gt;it’s widely known&lt;/a&gt; the first Intel and derivative CPUs like the Z80 didn’t set a limit on the instruction size. This means that it was possible to fill the whole RAM/ROM with a single instruction through repeating a prefix, and it would still execute!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, you could happen an infinity of &lt;code&gt;0x2E&lt;/code&gt; bytes before a &lt;code&gt;mov sp,bp&lt;/code&gt; and still get the instruction executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If generally the limit today is 15 bytes, I remember the 286 had a 10 bytes limit... But generally what’s the last x86 CPU from that instruction set that didn’t cap instruction size ?&lt;/p&gt;&#xA;" OwnerUserId="15946" LastEditorUserId="6659" LastEditDate="2020-06-02T23:45:39.803" LastActivityDate="2020-06-03T00:05:19.307" Title="What’s the last x86 CPU that didn’t place a limit on the size of a single instruction?" Tags="&lt;history&gt;&lt;instruction-set&gt;&lt;cpu&gt;&lt;intel&gt;&lt;x86&gt;" AnswerCount="2" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="15051" PostTypeId="2" ParentId="15050" CreationDate="2020-06-02T20:51:12.007" Score="-4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Although useless, it’s widely known the first Intel and derivate CPUs like the Z80 didn’t set a limit on the instruction size. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mind to explain what a limit that is you're asking about? There is no instruction on an 8080 with more than three bytes - and no Z80 with more than 5 (*1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, adding multiple/repeated prefixes don't create a longer instruction - the same way as adding NOPs in front won't do.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If generally the limit today is 15 bytes, I remember the 286 had a 10 bytes limit… &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Should this maybe refer to some (prefetch) buffer limits?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such buffers only organize the way memory access is interleaved with instruction execution. Instructions can (and often do) cover multiple buffers - that's why the 486 had two 16 byte buffers. Access to various parts of the instruction was done by different part sof the pipeline at different times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Others, like the 68000 or most RISC didn't have any buffers but did read synchronous with execution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Caches have blurred that even more.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But what generally the last CPU from that instruction set which didn’t cap instruction size ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It seams as if you assume a reversion of cause and effect. CPU hardware is made to comply to a certain instruction set (for this CPU), thus serving all sizes that are needed, not limiting them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, asking for a 'last' seams to imply a singular line of development, does it? CPUs are defined all the time. There is no singular before and after. Not even within a single company and linage like Intel and their x86 implementations. Strategies for instruction fetch, buffering, decoding and execution have not only changed many times - this includes 'reverting' to something done previous.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - In fact, from a CPU's perspective there is no Z80 instruction with more than 3 bytes, as each prefix is handled as separate instruction, which is clearly shown by pulling the &lt;code&gt;M1&lt;/code&gt; signal with prefix and opcode byte.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-02T22:22:38.997" LastActivityDate="2020-06-02T22:22:38.997" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="15052" PostTypeId="2" ParentId="15044" CreationDate="2020-06-02T21:17:30.910" Score="0" Body="&lt;p&gt;Searching for keywords like &quot;tx-2&quot; &quot;35 mm&quot; &quot;computer&quot; gets results like the following -&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://books.google.es/books?id=ZqEmAQAAMAAJ&amp;amp;pg=PA167&amp;amp;lpg=PA167&amp;amp;dq=%22tx-2%22%20%2235%20mm%22%20%20%22computer%22&amp;amp;source=bl&amp;amp;ots=u6LhW4T6OK&amp;amp;sig=ACfU3U3Egf0lRXzXlV5wRcZ8rW_MQklSGQ&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwiJ79WnjeLpAhXcAWMBHdSjClQQ6AEwAXoECAoQAQ#v=snippet&amp;amp;q=%2235%20mm%22&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;LINK&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like other computers in those days this machine was also connected to peripherals that used film like 35 mm, so maybe it was part of that .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though the most logical explanation is a modern flat screen inserted for a museum display .&lt;/p&gt;&#xA;" OwnerUserId="16462" LastEditorUserId="16462" LastEditDate="2020-06-03T01:01:40.107" LastActivityDate="2020-06-03T01:01:40.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15053" PostTypeId="2" ParentId="15050" CreationDate="2020-06-02T23:31:06.177" Score="5" Body="&lt;p&gt;In Appendix C (on software compatibility to the 8086), the Intel 286 users manual states the following about instruction length (Page C-2):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Do not Duplicate Prefixes.&lt;/p&gt;&#xA;&lt;p&gt;The 80286 sets an instruction length limit of 10 bytes. The only way to violate this limit is by duplicating a prefix two or more times before an instruction. Exception 6 occurs if the instruction length limit is violated. The 8086/8088 has no instruction length limit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This seems to be wrong, though. The correct exception is exception 13 (0Dh). It is correctly documented in the manual on Page B-9:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;#GP 13 General Protection (Selector or Zero Error Code)&lt;/p&gt;&#xA;&lt;p&gt;This exception is generated for all protection violations not covered by the other exceptions in this section. Examples of this include:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;An attempt to address a memory location by using an offset that exceeds the limit for the segment involved.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An attempt to jump to a data segment.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An attempt to load SS with a selector for a  read-only segment.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An attempt to write to a  read-only segment.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Exceeding the maximum instruction length of 10 bytes.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The limit has been raised by the 80386 to 15 bytes, because operands and addresses may be 32 bit instead of 16 bit, and you also have extra prefixes. You can find it in the 80386 programmers manual, page 168:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;9.8.13  Interrupt 13 ── General Protection Exception&lt;/p&gt;&#xA;&lt;p&gt;All protection violations that do not cause another exception cause ageneral protection exception. This includes (but is not limited to):&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Exceeding segment limit when using CS, DS, ES, FS, or GS&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;[...]&lt;/p&gt;&#xA;&lt;ol start=&quot;15&quot;&gt;&#xA;&lt;li&gt;Exceeding the instruction length limit of 15 bytes (this can occur only if redundant prefixes are placed before an instruction)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The limit of 15 bytes is valid until today.&lt;/p&gt;&#xA;&lt;p&gt;So if we just consider x86 processors, the last processor that did not implement a logic to detect oversized instructions is the 8086 or the 80186. I can not find any reference to a 10-byte limit in the iAPX 86/88/186/188 reference manual, so I am confident to claim that &lt;strong&gt;the last Intel x86 CPU that allowed instructions of unlimited size is the 80186/80188&lt;/strong&gt;. The instruction size limit became part of the architecture with the 286 and was changed with the transition from 16 bits to 32 bits.&lt;/p&gt;&#xA;&lt;p&gt;As all AMD processors up to the (original, non-enhanced) Am486 are licensed copies of the Intel Design, the same applies to AMD processors. For the 16-bit processors, there are other third-party manufacturers like Siemens and Harris, they are also licensed copies of the respective Intel models, so no behavioural difference is to be expected.&lt;/p&gt;&#xA;&lt;p&gt;There are 80186-compatible processor cores in microcontrollers produced until 2000s at least. They most likely do not include the instruction size limit. The same applies to the V30 and microcontrollers based on it. Basically everything that doesn't have the protected mode (and doesn't have the general protection fault) also doesn't have the instruction size limit.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-06-03T00:05:19.307" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15054" PostTypeId="1" AcceptedAnswerId="15062" CreationDate="2020-06-03T00:38:35.083" Score="7" ViewCount="887" Body="&lt;p&gt;I'm interested in working with the most common Apple II disk image file format, .dsk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I only programmed these machines briefly in Basic around 1979-81 and have not been in the emulator scene, so I'm pretty ignorant of much technical stuff.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So .dsk files are raw dumps of disk contents with no headers to describe them. But they come in two flavours, one for DOS and one for ProDOS, the two common disk operating systems on the 8-bit Apple II.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;.do is the unambiguous file extension for DOS format, in which the image file is a raw dump of the physical 256-byte disk sectors in order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;.po is the unambiguous file extension for ProDOS format, in which the image file is a raw dump of the logical 512-byte disk blocks in order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'd like to know if there is a technique for examining the bytes of a .dsk image to know whether I should proceed to process it as a DOS .do or as a ProDOS .po.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-06-03T01:19:09.587" LastActivityDate="2020-06-03T05:23:07.567" Title="How can I programmatically determine whether an Apple II .dsk disk image is a DOS .do image or a ProDOS .po image?" Tags="&lt;apple-ii&gt;&lt;programming&gt;&lt;file-format&gt;&lt;disk-image&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15056" PostTypeId="1" AcceptedAnswerId="15063" CreationDate="2020-06-03T02:55:00.607" Score="3" ViewCount="139" Body="&lt;p&gt;The 8-bit Apple II had two disk operating systems with different disk access semantics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOS used tracks and sectors. A sector is 256 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ProDOS used blocks. A block is 512 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But mapping from ProDOS blocks to tracks and sectors seems to use some kind of interleaving. And, confusingly, I find two different mappings when trying to Google how this worked:&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;&lt;a href=&quot;http://fileformats.archiveteam.org/wiki/ProDOS_file_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;Just Solve the File Format Problem&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Figure B-15 shows how to determine a block number from a given track&#xA;  and sector. First multiply the track number by 8, then add the Sector&#xA;  Offset that corresponds to the sector number. The half of the block in&#xA;  which the sector resides is determined by the Half-of-Block line (1 is&#xA;  the first half; 2 is the second).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Figure B-15. Tracks and Sectors to Blocks&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      Block = (8 * Track) + Sector Offset&#xA;       Sector : 0 1 2 3 4 5 6 7 8 9 A B C D E F&#xA;Sector Offset : 0 7 6 6 5 5 4 4 3 3 2 2 1 1 0 7&#xA; Half of Block: 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Block 0 -&gt; Track 0 Sector 0 + Track 0 Sector 14&lt;/li&gt;&#xA;&lt;li&gt;Block 1 -&gt; Track 0 Sector 12 + Track 0 Sector 13&lt;/li&gt;&#xA;&lt;li&gt;Track 0 Sector 0 -&gt; Block 0 (first half)&lt;/li&gt;&#xA;&lt;li&gt;Track 0 Sector 1 -&gt; Block 7 (first half)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h1&gt;&lt;a href=&quot;https://www.apple.asimov.net/documentation/misc/Apple%202%20ProDOS%20Info%20BSC.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple ][ ProDOS Operating System Technical Information&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1390 *      READ/WRITE A BLOCK&#xA;1400 *&#xA;1410 *      1. ASSURE VALID BLOCK NUMBER (0...279)&#xA;1420 *      2. CONVERT BLOCK NUMBER TO TRACK/SECTOR&#xA;1430 *         TRACK = INT(BLOCK/8)&#xA;1440 *         BLOCK   SECTORS&#xA;1450 *         ----- ---------&#xA;1460 *           0     0 AND 2&#xA;1470 *           1     4 AND 6&#xA;1480 *           2     8 AND 10&#xA;1490 *           3    12 AND 14&#xA;1500 *           4     1 AND 3&#xA;1510 *           5     5 AND 7&#xA;1520 *           6     9 AND 11&#xA;1530 *           7    13 AND 15&#xA;1540 *      3. CALL RWTS TWICE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Block 0 -&gt; Track 0 Sector 0 + Track 0 Sector 2&lt;/li&gt;&#xA;&lt;li&gt;Block 1 -&gt; Track 0 Sector 4 + Track 0 Sector 6&lt;/li&gt;&#xA;&lt;li&gt;Track 0 Sector 0 -&gt; Block 0 (first half)&lt;/li&gt;&#xA;&lt;li&gt;Track 0 Sector 1 -&gt; Block 4 (first half)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;What am I missing?? Is there some other level of indirection? Does one or both actually use logical blocks and sectors as well as physical blocks and sectors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm actually trying to work with .dsk disk image files if that makes a difference. They are raw disk images with no headers but come in two flavours, a raw dump of DOS tracks and sectors in order or a raw dump of ProDOS blocks in order. Perhaps there is something about how these image formats relate to the actual disks or to each DOS that I am missing??&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-06-03T05:37:05.230" Title="Converting Apple II ProDOS blocks to DOS tracks and sectors" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;&lt;operating-system&gt;&lt;disk-image&gt;&lt;apple-dos&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15057" PostTypeId="1" CreationDate="2020-04-24T20:19:40.423" Score="0" ViewCount="328" Body="&lt;p&gt;I formatted several 5.25&quot; diskettes with 360k and 1.2M on the Windows XP PC using 1.2M (HD) drive. I am using the same drive to read data from 360k diskette back using custom driver. The controller returns &quot;address mark not found&quot;. Here's what I send to controller:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;46 00 00 00 01 02 01 2A FF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and here's what I get in response&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;40 01 00 00 00 01 02&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The FDC speed set is 250 kb/s (CR1=1, CR0=0). The same custom driver works properly with 3.5&quot; drives' 1.44M and 720k formats, and with 5.25&quot; drive's 1.2M format, only 360k is having problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have problems finding information on how to support older 360k formats on newer drives. My assumption was that I just *2 track number, at least it must yield correct reading of data. But here driver is unable to read even sector 1 at head 0 track 0 (boot sector) to identify the geometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect there must be something else, but I can not figure out what it might be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Not sure if EE is correct place to put this question to; however stackoverflow [programming] seems to be less proper, serverfault is also non-fit. Question is too low level and must be related to how electronics/architecture works).&lt;/p&gt;&#xA;" OwnerUserId="8258" OwnerDisplayName="Anonymous" LastActivityDate="2020-06-03T03:16:35.600" Title="Reading 360k floppy disk in 1.2M drive" Tags="&lt;floppy-disk&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15058" PostTypeId="2" ParentId="15057" CreationDate="2020-04-24T21:26:17.220" Score="3" Body="&lt;p&gt;Writing a 360k floppy with a 1.2M drive is never going to be reliable.  And that includes formatting it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because a 1.2M drive is intended to write disks with a narrower track width, the head is smaller.  If you're reading an old 360K disk, that's not a problem.  Place the head anywhere within the wider track, and it will read the data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when you write a track - including formatting the disk - you are only writing over part of the track.  The remainder could have anything on it - including the old data on the disk.  So when you read it back again, you get some mix of the old and new data.&lt;/p&gt;&#xA;" OwnerDisplayName="Simon B" LastActivityDate="2020-04-24T21:26:17.220" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15059" PostTypeId="2" ParentId="15057" CreationDate="2020-04-24T21:44:11.817" Score="1" Body="&lt;p&gt;Problem solved by reading &lt;a href=&quot;http://www.retrotechnology.com/herbs_stuff/drive.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; information. 1.2M drive rotates 360 RPM, and requires 300 kb/s transfer speed, not 250 kb/s, to be up to speed with the data (300/250 equals to 360/300). For older 360k driver 250 kb/s speed must be selected. That's why there were always 5.25&quot; 1.2M and 5.25&quot; 360k drives in the computer setup, not just 5.25&quot; drive type.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now drive can read track 0, but not other tracks.&lt;/p&gt;&#xA;" OwnerUserId="8258" OwnerDisplayName="Anonymous" LastActivityDate="2020-04-24T21:44:11.817" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15060" PostTypeId="2" ParentId="15044" CreationDate="2020-06-03T03:21:49.350" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://archive.org/details/MainFram1984&quot; rel=&quot;nofollow noreferrer&quot;&gt;This video&lt;/a&gt; from 1984 shows the TX-0; the leftmost panel is blank and the one on the rightmost is a vector display.  The video shows the machine in operation (including the display).  The left display in the question's photo appears to be a modern addition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EpsUe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EpsUe.png&quot; alt=&quot;TX-0 in 1984&quot;&gt;&lt;/a&gt;&#xA;&lt;sup&gt;Source: &lt;em&gt;Computer Chronicles&lt;/em&gt; 1984-02-12 via the Internet Archive&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2020-06-03T05:18:59.057" LastActivityDate="2020-06-03T05:18:59.057" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15061" PostTypeId="2" ParentId="15054" CreationDate="2020-06-03T03:45:55.747" Score="3" Body="&lt;p&gt;You can look at the file systems: Here are descriptions of the &lt;a href=&quot;http://fileformats.archiveteam.org/wiki/Apple_DOS_file_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOS file system&lt;/a&gt; and the &lt;a href=&quot;http://fileformats.archiveteam.org/wiki/ProDOS_file_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;ProDOS file system&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are quite different, so you attempt to list the files on the disk, usually one approach will produce garbage, and one won't. That's pretty obvious to a human, but less obvious to a program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also keep in mind that there are .dsk images (in particular for games) that use 16-sector format, but are not DOS: They are just a boot loader followed by game data. So a third outcome is &quot;both attempts produce garbage&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a program, an additional way would be to do consistency checks (e.g. VTOC matches CATALOG for a DOS disk). But there also broken disks where the VTOC was damaged, but you can still read them. So this method will fail for those.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A final method is to look at the boot loader: If it matches well-known boot loaders, and/or of the OS matches, then you also know which kind of disk it is. But there are disks without OS, and there are also dozens of variants of DOS; so this method also has limits.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-06-03T03:45:55.747" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="15062" PostTypeId="2" ParentId="15054" CreationDate="2020-06-03T05:23:07.567" Score="10" Body="&lt;p&gt;You can't tell if a &lt;code&gt;.do&lt;/code&gt;/&lt;code&gt;.po&lt;/code&gt; disk image file is in DOS order or ProDOS order unless you recognize something on the disk.  If it has a DOS 3.3 or ProDOS filesystem, it's pretty easy.  Otherwise... not so easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to see how &lt;a href=&quot;https://a2ciderpress.com/&quot; rel=&quot;noreferrer&quot;&gt;CiderPress&lt;/a&gt; does it, take a look at the &lt;code&gt;AnalyzeImageFile&lt;/code&gt; function &lt;a href=&quot;https://github.com/fadden/ciderpress/blob/master/diskimg/DiskImg.cpp#L721&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After peeling off &lt;code&gt;.gz&lt;/code&gt;/&lt;code&gt;.zip&lt;/code&gt;, it checks the file extension.  For some things (e.g. &lt;code&gt;.shk&lt;/code&gt;) the extension exactly specifies the format, but for &lt;code&gt;.do&lt;/code&gt;/&lt;code&gt;.po&lt;/code&gt; it acts as a sector-order hint.  (To be clear, those extensions don't say whether the disk has a DOS or ProDOS filesystem, just how the data is ordered.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For these &quot;unreliable&quot; extensions, it attempts to process the disk as various things.  Whichever one works first, wins.  &lt;code&gt;.do&lt;/code&gt;/&lt;code&gt;.po&lt;/code&gt; are referred to as &quot;unadorned&quot; formats because they don't have a header like &lt;code&gt;.2mg&lt;/code&gt; does, so the only way to figure them out is to try the various operating systems and various sector orderings one at a time.  The &lt;a href=&quot;https://github.com/fadden/ciderpress/blob/master/diskimg/DiskImg.cpp#L1154&quot; rel=&quot;noreferrer&quot;&gt;next functions&lt;/a&gt; in the file, &lt;code&gt;AnalyzeImage&lt;/code&gt; and &lt;code&gt;AnalyzeImageFS&lt;/code&gt;, do that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes files are mis-named, so e.g. you can't assume &lt;code&gt;.do&lt;/code&gt; is in DOS order.  The full set of tests are done, checking the most-likely ordering first to ensure that if the results are ambiguous, the ordering specified by the filename wins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each filesystem handler (DOS 3.2/3.3, ProDOS, Pascal, CP/M, RDOS, HFS, Gutenberg) has its own &quot;is this image one of mine&quot; function, as do the various multi-volume formats (Mac partition, MicroDrive, etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some detailed notes can be found in the CiderPress help file; see the Appendix section &quot;About Disk Images&quot;&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2020-06-03T05:23:07.567" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15063" PostTypeId="2" ParentId="15056" CreationDate="2020-06-03T05:37:05.230" Score="5" Body="&lt;p&gt;DOS-ordered images were created by DOS programs that started reading from track 0 sector 0, continued to sector 15, moved to track 1 sector 0, and so on until the end of the disk.  They are in DOS logical order: the first 256 bytes are T0S0, the next are T0S1, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ProDOS-ordered images are created by ProDOS programs that started reading from block 0, then read block 1, and so on until the end of the disk.  They are in ProDOS block order: the first 512 bytes are block 0, the next are block 1, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find the CiderPress conversion tables in the &lt;code&gt;CalcSectorAndOffset&lt;/code&gt; function &lt;a href=&quot;https://github.com/fadden/ciderpress/blob/master/diskimg/DiskImg.cpp#L1796&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.  For sanity it converts logical to physical then physical to logical when translating between formats.  For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;static const int raw2dos[16] = {&#xA;    0, 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8, 15&#xA;};&#xA;static const int dos2raw[16] = {&#xA;    0, 13, 11, 9, 7, 5, 3, 1, 14, 12, 10, 8, 6, 4, 2, 15&#xA;};&#xA;static const int raw2prodos[16] = {&#xA;    0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15&#xA;};&#xA;static const int prodos2raw[16] = {&#xA;    0, 2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 15&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can see that &lt;code&gt;prodos2raw&lt;/code&gt; lists sector 0, 2, 4, 6, and so on, which matches the order in your ProDOS table for blocks 0 and 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you have a ProDOS filesystem on a ProDOS-ordered image, and you want to read block 1, you grab &lt;code&gt;prodos2raw[2]&lt;/code&gt; and &lt;code&gt;[3]&lt;/code&gt;, which are 4 and 6.  You look up &lt;code&gt;raw2prodos[4]&lt;/code&gt; and &lt;code&gt;[6]&lt;/code&gt;, which are 2 and 3.  So you read from offset 2*256 and 3*256 to form your 512-byte block.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a ProDOS filesystem on a DOS-ordered image, and you want to read block 1, you do the same thing but with &lt;code&gt;raw2dos&lt;/code&gt;, which returns 13 and 12.  So you read from offset 13*256 and 12*256 to form your 512-byte block.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is all within a single 4096-byte track on a 140KB disk image.  Add 4096 per track (or block num / 8) to the file offset.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2020-06-03T05:37:05.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15064" PostTypeId="2" ParentId="13927" CreationDate="2020-06-03T07:58:39.527" Score="-1" Body="&lt;p&gt;The zx81 fp support is complete since..  very long time!&#xA;Printf  %f works a well.   On a Spectrum there is plenty of fp libraries you can choose,  varying in precision and size,  including a shortcut to the ROM ones. &#xA;The same shortcut is available on the zx81.&lt;/p&gt;&#xA;" OwnerUserId="18380" LastActivityDate="2020-06-03T07:58:39.527" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15066" PostTypeId="1" CreationDate="2020-06-03T15:53:55.777" Score="2" ViewCount="472" Body="&lt;p&gt;How to connect 18-12 years non supported OSes/devices to Internet?&#xA;Specifically PDAs and phones, that are more limited to use additional components/accesories?&lt;/p&gt;&#xA;&lt;p&gt;(*) Answer related to computers can be also interesting but they will have less limitations and issues, as there are some operating systems that were receiving updates on protocols, apps and webbrowsers.&lt;/p&gt;&#xA;&lt;p&gt;As the purpose is recreational and curiosity, the lack security using obsolete platforms is not a problem.&lt;/p&gt;&#xA;&lt;p&gt;What &lt;strong&gt;technologies and services&lt;/strong&gt; will fail (have changed and have not backwards compatibility) and which ones are still working fine?&lt;/p&gt;&#xA;&lt;p&gt;What So you think about old devices and the &lt;strong&gt;usage of the following technologies/protocols&lt;/strong&gt;?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Connection technology and possible limitations:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SIM card&#xA;&lt;ul&gt;&#xA;&lt;li&gt;incompatible format (size)&lt;/li&gt;&#xA;&lt;li&gt;incompatible security/encryption ¿have you tried a new SIM in an old phone?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Wifi&#xA;&lt;ul&gt;&#xA;&lt;li&gt;incompatibilities with Mode/Speed  ¿can modern AP and router work in mode B?&lt;/li&gt;&#xA;&lt;li&gt;security protocols. ¿can modern HW be set to be insecure?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Bluetooth DUN&lt;/li&gt;&#xA;&lt;li&gt;Bluetooth tethering&lt;/li&gt;&#xA;&lt;li&gt;Ethernet compatibility&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Internet services for testing (failing, working):&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Web&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Issues with protocols&lt;/li&gt;&#xA;&lt;li&gt;Issues with technologies&lt;/li&gt;&#xA;&lt;li&gt;Compatible webpages (for testing)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Other technologies&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RSS&lt;/li&gt;&#xA;&lt;li&gt;IM (jabber,....&lt;/li&gt;&#xA;&lt;li&gt;gopher&lt;/li&gt;&#xA;&lt;li&gt;others&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;email&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Issues with protocols&lt;/li&gt;&#xA;&lt;li&gt;Compatible services (POP3/SMTP)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Others&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11438" LastEditorUserId="11438" LastEditDate="2020-11-23T16:12:42.170" LastActivityDate="2020-11-23T20:02:43.317" Title="Problem accessing Internet from old phones/PDAs (HTTPS, SSL, certificates, compatible services,....)" Tags="&lt;internet&gt;&lt;network&gt;&lt;palm&gt;&lt;windows-mobile&gt;&lt;pda&gt;" AnswerCount="2" CommentCount="13" ClosedDate="2020-06-06T11:24:12.947" ContentLicense="CC BY-SA 4.0" />
  <row Id="15067" PostTypeId="1" AcceptedAnswerId="15069" CreationDate="2020-06-03T18:31:00.563" Score="4" ViewCount="1855" Body="&lt;p&gt;The &lt;a href=&quot;https://github.com/markusC64/1541ultimate2/blob/master/doc/Quick%20guide%20Ultimate%20II%2B.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;docs&lt;/a&gt; for the &lt;a href=&quot;https://ultimate64.com/U2P_Cartridge_Black&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ultimate-II+&lt;/a&gt; expansion cartridge for the Commodore 64 state:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It is able to read D64 files, as well as D71 and D81 files (no partitions), T64 files.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So what are D64, T64, D71 and D81 files?  Where did they come from?&lt;/p&gt;&#xA;" OwnerUserId="6794" LastEditorUserId="6794" LastEditDate="2020-06-04T20:29:31.117" LastActivityDate="2020-06-04T21:02:53.963" Title="What are D64, T64, D71 and D81 files?" Tags="&lt;commodore-64&gt;&lt;floppy-disk&gt;&lt;disk-image&gt;&lt;terminology&gt;&lt;tape-image&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15068" PostTypeId="2" ParentId="15067" CreationDate="2020-06-03T18:39:53.283" Score="1" Body="&lt;p&gt;They are image files that contain the data from cassette tapes (T) and floppy disks (D).&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-06-03T18:39:53.283" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15069" PostTypeId="2" ParentId="15067" CreationDate="2020-06-03T19:20:35.940" Score="12" Body="&lt;p&gt;These are disk- and tape images files for the Commodore 64 and computers using the same floppy drives and disk formats, like the VIC-20, or the Commodore 128. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;D64 are single-sided 5.25&quot; disk images (&quot;1541 images&quot; for the Commodore &lt;strong&gt;64&lt;/strong&gt;), sometimes also called D41.  &lt;/li&gt;&#xA;&lt;li&gt;D71 are double-sided 5.25&quot; disk images (&quot;15&lt;strong&gt;71&lt;/strong&gt; images&quot;) &lt;/li&gt;&#xA;&lt;li&gt;D81 are double-sided 3.5&quot; disk images (&quot;15&lt;strong&gt;81&lt;/strong&gt; images&quot;) &lt;/li&gt;&#xA;&lt;li&gt;T64 are tape images for the Commodore &lt;strong&gt;64&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Dxx formats are straightforward sequential dumps of all sectors on a Commodore disk in ascending order, i.e. starting with track 1, sector 0, followed by track 1, sector 1, until the disk &quot;ends&quot; (in the 1541 case) at track 35, sector 16. &lt;a href=&quot;http://ist.uwaterloo.ca/~schepers/formats.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;More detailed documentation on the internal structure, including the structure created by Commodore DOS, can be found here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the German C-64 Wiki, &lt;a href=&quot;https://www.c64-wiki.de/wiki/C64s&quot; rel=&quot;nofollow noreferrer&quot;&gt;the D64 name was introduced with the C64s emulator&lt;/a&gt; by Miha Peternel in 1994, even though disk images with the same structure had been around since the 1980s. Miha Peternel also created the T64 format (see also &lt;a href=&quot;https://archive.org/stream/amigaformatmagazine-091#page/n23/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these are common in CBM emulation, and CBM drive emulators. &lt;a href=&quot;https://www.c64-wiki.de/wiki/Disk-Image&quot; rel=&quot;nofollow noreferrer&quot;&gt;There are more formats&lt;/a&gt;, and &lt;a href=&quot;https://www.c64-wiki.de/wiki/Liste_von_Disk-Image-Tools&quot; rel=&quot;nofollow noreferrer&quot;&gt;they are supported by a number of tools&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-06-04T21:02:53.963" LastActivityDate="2020-06-04T21:02:53.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15070" PostTypeId="1" AcceptedAnswerId="15071" CreationDate="2020-06-03T23:15:09.343" Score="3" ViewCount="464" Body="&lt;p&gt;What is this socket for on 386 motherboard? I have no manual, no documentation and no resources readily available for this machine (Commodore C386SX-LT).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8NTO6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8NTO6.jpg&quot; alt=&quot;C386SX-LT Motherboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Source: Probably &lt;a href=&quot;https://oldcrap.org/2018/09/18/commodore-c386sx-lt/&quot; rel=&quot;nofollow noreferrer&quot;&gt;oldcrap.org&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Close-up:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HdRzR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HdRzR.jpg&quot; alt=&quot;Cropped close-up of socket and (probably) related circuitry&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Source: &lt;a href=&quot;https://oldcrap.org/2018/09/18/commodore-c386sx-lt/&quot; rel=&quot;nofollow noreferrer&quot;&gt;oldcrap.org&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many additional pictures &lt;a href=&quot;https://oldcrap.org/2018/09/18/commodore-c386sx-lt/&quot; rel=&quot;nofollow noreferrer&quot;&gt;can be found here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="7347" LastEditDate="2020-06-09T08:02:48.060" LastActivityDate="2020-06-09T08:02:48.060" Title="What is this socket for in 386 notebook motherboard" Tags="&lt;80386&gt;&lt;motherboard&gt;&lt;80387&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15071" PostTypeId="2" ParentId="15070" CreationDate="2020-06-03T23:55:55.590" Score="10" Body="&lt;p&gt;Well, it could easy be a socket for a 387 type FPU. Size and number of pins would fit a 387 (or some pin compatible Cyrix FastMath) as PLCC carrier. On the other hand it's rather unusual to place it far from the main CPU, seen in the lower left.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But without more information it's hard to say. Maybe some sharp close up can reveal markings supporting this?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-04T21:08:55.193" LastActivityDate="2020-06-04T21:08:55.193" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15072" PostTypeId="2" ParentId="15067" CreationDate="2020-06-04T02:50:06.073" Score="6" Body="&lt;p&gt;Since I've been writing code to interact with various systems' &lt;a href=&quot;https://en.wikipedia.org/wiki/Disk_image&quot; rel=&quot;noreferrer&quot;&gt;disk image formats&lt;/a&gt; over the past few weeks I'd like to add a little more information that's not in the current answers.&lt;/p&gt;&#xA;&lt;p&gt;Disk images and tape images are usually of a few different types and subtypes. I'm using my own terminology here so forgive me if there is standard terminology I'm not yet aware of.&lt;/p&gt;&#xA;&lt;h1&gt;Disk images&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;&amp;quot;High level&amp;quot;&lt;/strong&gt;: These typically represent the physical tracks and sectors of a disk. Sometimes they might represent logical tracks, sectors, and/or blocks though. The two main subtypes I might call &amp;quot;raw&amp;quot; and &lt;strong&gt;&amp;quot;headered&amp;quot;&lt;/strong&gt;. &lt;strong&gt;&amp;quot;Raw&amp;quot;&lt;/strong&gt; images expect the tools using them to know things such as the disk geometry, or be able to make correct assumptions based on external metadata such as the file extension or file length. &lt;strong&gt;&amp;quot;Headered&amp;quot;&lt;/strong&gt; images provide extra information such as a magic word identifiable signature, version number, information about the geometry, etc.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&amp;quot;Low level&amp;quot;&lt;/strong&gt;: These typically represent the disk as the drive controller sees it. These typically allow disks with various kinds of copy protection to be represented. There will often be several low-level image formats or versions as emulator writers find games or tricks that can't be represented in earlier image formats. These also come in &amp;quot;raw&amp;quot; and &amp;quot;headered&amp;quot; subtypes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&amp;quot;Very high level&amp;quot;&lt;/strong&gt;: These represent the filesystem rather than the disk geometry. Sometimes just a collection of files with their metadata.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1&gt;Tape images&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;&amp;quot;Audio&amp;quot;&lt;/strong&gt;. These represent the sound of the tape to a high enough fidelity that it can be played as a sound for a real computer to interpret as though it's connected to a tape player, or to be converted to an accurate byte representation. They may just be a plain existing audio file format such as WAV, or have a wrapper or extra header. Just like a real tape it could include multiple programs or even analogue audio.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&amp;quot;High level&amp;quot;&lt;/strong&gt;. These represent the data rather than the sound. They can be loaded into an emulator without having to go to the trouble of emulating the audio of the tape player, but there are usually features of the emulator or other tools to convert them to audio. They are usually &amp;quot;headered&amp;quot;, but that extra information can vary from very minimal to more extensive to cover custom speedloaders, multiple files on a tape, etc.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In the case of &lt;a href=&quot;http://ist.uwaterloo.ca/%7Eschepers/formats/D64.TXT&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;.d64&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;http://ist.uwaterloo.ca/%7Eschepers/formats/D71.TXT&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;.d71&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&quot;http://ist.uwaterloo.ca/%7Eschepers/formats/D81.TXT&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;.d81&lt;/code&gt;&lt;/a&gt;, they are all &amp;quot;high level&amp;quot; &amp;quot;raw&amp;quot; disk image formats, and are all closely related in the same family. A program implmeneting one can fairly trivially be extended to work with the others.&lt;/p&gt;&#xA;&lt;p&gt;As for &lt;a href=&quot;http://unusedino.de/ec64/technical/formats/t64.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;.t64&lt;/code&gt;&lt;/a&gt;, it's a &amp;quot;high level&amp;quot; &amp;quot;headered&amp;quot; tape image format which includes quite a bit of structured metadata about the data on the tape.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-06-04T02:50:06.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15073" PostTypeId="2" ParentId="6920" CreationDate="2020-06-04T10:52:40.993" Score="2" Body="&lt;p&gt;This videos show general idea how build VGA graphics card for bread board computer &quot;World's worst video card&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=l7rce6IQDWs&quot; rel=&quot;nofollow noreferrer&quot;&gt;World's worst video card?&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uqY3FMuMuRo&quot; rel=&quot;nofollow noreferrer&quot;&gt;World's worst video card? The exciting conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Should work for any micropocessor.&lt;/p&gt;&#xA;" OwnerUserId="18369" LastEditorUserId="6659" LastEditDate="2020-06-04T11:21:03.750" LastActivityDate="2020-06-04T11:21:03.750" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15074" PostTypeId="1" CreationDate="2020-06-04T12:21:20.630" Score="5" ViewCount="247" Body="&lt;p&gt;There were 4 64k x 4-bit Integrated Circuit chips in the Amstrad-era Sinclair ZX Spectrum +2 and +3 models. These are known as the +2A, +2B (both +2 &quot;black&quot;), +3 and +3B (also both black cases).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I say &quot;Amstrad-era&quot; as these were produced by Alan Michael Sugar's Amstrad company, when Sugar bought the rights to the Sinclair name for computers only (he didn't buy the Sinclair name). This is as opposed to the Clive Sinclair-era computers ZX80, ZX81, ZX82 (Spectrum), Spectrum 128k &quot;Toastrack&quot; and QL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not include the Amstrad 128k grey in this question, as that is based on the Toastrack, whereas the +2A, +2B and +3 are new designs &quot;under the hood&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 128KiB RAM in the +2A/+2B/+3 machines come from 4 x 65,536 x 4 = 1,048,576 bits = 131,072 bytes = 128KiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples of such 64k x 4-bit ICs are: the Texas Instruments TMS4464 (a.k.a. SMJ4464) or Samsung KM41464A, Micron MT 4067 883C and the IC marked AMS x 4 (as marked - I do not have any more info other than a suggestion that this is an Amstrad chip).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question has four parts:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Are these chips 100% usable and fully functioning in all models - the +2A, the +2B, the +3 and the +3B?&lt;/li&gt;&#xA;&lt;li&gt;Are there are any issues with any of these chips with any of the different PCBs under these models (e.g. Z70833 Issue 1, Z70833 Issue 4, Z70830 Issue 1)? &lt;/li&gt;&#xA;&lt;li&gt;Do the standard factory modifications to the PCBs affect the behaviour of ICs?&lt;/li&gt;&#xA;&lt;li&gt;Can these chips be mixed on the one machine (e.g. 1 x Samsung, 1 x Texas, 1 x AMS, 1 x MT)?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7470" LastEditorUserId="3290" LastEditDate="2020-06-04T12:33:31.420" LastActivityDate="2020-06-04T13:21:04.663" Title="Are all 64k x 4-bit ICs interchangeable for Amstrad-era ZX Spectrum 128k +2/+3?" Tags="&lt;z80&gt;&lt;zx-spectrum&gt;&lt;chip&gt;&lt;sinclair&gt;&lt;amstrad&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15075" PostTypeId="2" ParentId="15074" CreationDate="2020-06-04T13:21:04.663" Score="7" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Yes. Speed must be 150ns or faster, technology should be NMOS (CMOS produces too sharp edges that may cause ringing, due to non equalized traces in the PCB, so they may or may not work) and must support 7 bit (128 rows) refresh mode.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Not that I know.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Which are the &quot;standard factory modifications&quot;? The only one I know of is that weird capacitor connected to the Z80A. AFAIK, its behaviour is not affected.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Yes, as long as they all meet criteria as described in (1)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="105" LastActivityDate="2020-06-04T13:21:04.663" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15078" PostTypeId="1" AcceptedAnswerId="15087" CreationDate="2020-06-04T15:38:08.550" Score="29" ViewCount="9545" Body="&lt;p&gt;Ken Shirriff writes in his &lt;a href=&quot;http://www.righto.com/2016/12/die-photos-and-analysis-of_24.html&quot; rel=&quot;noreferrer&quot;&gt;blog entry about the 8008&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 8008's seven registers are in the upper right. In the lower right is the address stack, which consists of eight 14-bit address words. Unlike most processors, the 8008's call stack is stored on the chip instead of in memory. The program counter is just one of these addresses, making subroutine calls and returns very simple. The 8008 uses dynamic memory for this storage&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That is an interesting idea, that would presumably make calls and returns faster, at the cost of only being able to nest them eight levels deep. (Less, if you want to save registers other than the program counter.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But some 8-bit programs could get by well enough with that restriction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea was abandoned after the 8008; no subsequent mainstream CPU (by which I mean basically excluding Forth chips, and tiny embedded chips that only use on-die memory anyway) went with the on-chip stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was this purely about deciding that support for more complex programs was more important than fast subroutine calls? Or did the on-chip stack take more die area than the logic to save/load the program counter to RAM? Or both, or some other reason?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="15334" LastEditDate="2021-03-05T17:24:17.227" LastActivityDate="2021-04-11T19:22:34.607" Title="Why did post-8008 CPUs not keep the on-chip stack idea?" Tags="&lt;history&gt;&lt;cpu&gt;&lt;design-choices&gt;" AnswerCount="8" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15079" PostTypeId="2" ParentId="15078" CreationDate="2020-06-04T15:53:01.330" Score="21" Body="&lt;p&gt;The 8008 inherited its on-CPU stack from the 4004; as you mention, its successor, the 8080, replaced that with a stack pointer and an in-memory stack.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(Less, if you want to save registers other than the program counter.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I suspect this is the main problem in the immediate aftermath of the 8008. If you want to push anything other than the return address to the stack, you end up needing more stack space, and the room required grows quickly. At the time, transistor budgets were very tight, and I suspect “adding more features” trumped “provide fast subroutine calls in some cases”. (Admittedly, most 8-bit systems get by with small stacks, but they’re still large compared to transistor budgets; once you get to the 8088/8086, with its explicit focus on support for high-level languages in a still-small transistor budget, an in-memory stack is pretty much required.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It’s worth bearing in mind too that memory access costs were very different at the time, and 8-bit CPUs like the 6502 were slow enough that memory accesses weren’t much of a problem. Moving the stack to memory instantly increases your transistor budget substantially, along with any limits on call depth and stack sizes. Other implementation tricks could be used to make typical use cases faster: the 8080’s &lt;code&gt;RST&lt;/code&gt; instruction (a precursor to the general-purpose software interrupts in the 8088), the 6502’s page zero...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A variation on the idea did come back later on, in the SPARC designs: SPARC CPUs have register windows, which are designed to provide something akin to an on-CPU stack (see &lt;a href=&quot;http://icps.u-strasbg.fr/people/loechner/public_html/enseignement/SPARC/sparcstack.html&quot; rel=&quot;noreferrer&quot;&gt;this overview of SPARC register windows&lt;/a&gt; for details). This is an excellent idea on paper, when looking at individual program behaviour, but in practice it’s not, because on SPARC-sized systems, programs don’t run individually, and multitasking killed the benefits of register windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays stacks are typically on the CPU again, in general-purpose caches...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-06-04T16:18:44.330" LastActivityDate="2020-06-04T16:18:44.330" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="15080" PostTypeId="2" ParentId="15078" CreationDate="2020-06-04T15:56:01.090" Score="10" Body="&lt;p&gt;First, obviously on-chip stack takes LOTS of die area. Roughly, memory stack takes as much as single extra 16bit register and somewhat larger PLA to perform pops and pushes (on a basis of already existing micro-operations, such as reading/writing 16-bit values in memory and incrementing/decrementing 16bit registers). On the other hand, even 8-level deep hardware return stack takes the size of, well, eight 16bit registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, obviously, being able to run complex programs was (in retrospection) a huge win for 8080 and its successor, Z80. CP/M and all its applications would simply be not possible with a 8-level hardware return stack. A truly wise and future-proof decision.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-06-04T15:56:01.090" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15081" PostTypeId="2" ParentId="15078" CreationDate="2020-06-04T17:41:03.797" Score="5" Body="&lt;p&gt;What the processor provided was a stack for return addresses, not a stack for procedure activation records (stack frames).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While that's a workable arrangement, most programming languages do use a stack for activation records, especially for languages which support recursive activation.  You can allocate from the heap, but that is slower.  And once you've got such a stack in memory, the attraction of an in-processor return-address stack is much less.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The venerable &lt;a href=&quot;http://www.findlayw.plus.com/KDF9/The%20Hardware%20of%20the%20KDF9.pdf&quot; rel=&quot;noreferrer&quot;&gt;KDF9&lt;/a&gt; had a 16-deep return-address stack in the hardware, aka the Subroutine Jump Nesting Store (SJNS), but languages of the day (Algol in particular) still needed to manage a software stack for activation records.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-06-04T17:41:03.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15082" PostTypeId="2" ParentId="15078" CreationDate="2020-06-04T17:56:23.503" Score="4" Body="&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;p&gt;There were others, mostly micro controllers, but 8 bit CPUs, like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Signetics_2650&quot; rel=&quot;nofollow noreferrer&quot;&gt;Valvo/Signetics 2650&lt;/a&gt; as well.&lt;/p&gt;&#xA;&lt;p&gt;There are good reasons for a RAM based stack:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A RAM based stack allows deeper nesting.&lt;/li&gt;&#xA;&lt;li&gt;A RAM based stack enables additional use (like register save).&lt;/li&gt;&#xA;&lt;li&gt;A RAM based stack needs less logic (*3).&lt;/li&gt;&#xA;&lt;li&gt;Logic for memory access exists already on chip.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But most important:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The savings are rather marginal as soon as called routines are more than a few instructions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Modern cache structure delivers a one size fits all approach, leveling out all remaining disadvantage of a memory based (return) stack.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;That is an interesting idea, that would presumably make calls and returns faster,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Essentially it may turn call and return into register-renaming, making either zero clock (*1).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;at the cost of only being able to nest them eight levels deep.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's rather implementation specific. There's no reason to extend this to more than 8&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(Less, if you want to save registers other than the program counter.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's a strict return stack, alone due the fact that it needs to be word aligned. Restricting it to return addresses gives the most gain with least effort. After all, a return address is always needed, thus putting it on chip makes sense. Everything else is optional, so any ROI will be lower.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But some 8-bit programs could get by well enough with that restriction.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Since it's about address size, it works with any word length.&lt;/p&gt;&#xA;&lt;p&gt;Also more modern CPUs, like SPARC did rediscover this, now with dynamic offloading.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The idea was abandoned after the 8008; no subsequent mainstream CPU (by which I mean basically excluding Forth chips, and tiny embedded chips that only use on-die memory anyway) went with the on-chip stack.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's not really true. For example the &lt;a href=&quot;https://en.wikipedia.org/wiki/Signetics_2650&quot; rel=&quot;nofollow noreferrer&quot;&gt;Valvo/Signetics 2650&lt;/a&gt; featured as well an 8 level (14 bit wide) return stack. While not seen in many home computers, the 2650 was quite successful in embedded all the way to &lt;a href=&quot;https://en.wikipedia.org/wiki/Interton_Video_Computer_4000&quot; rel=&quot;nofollow noreferrer&quot;&gt;game consoles&lt;/a&gt; and arcade machines like &lt;a href=&quot;https://t-lcarchive.org/taito-space-invaders/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Space Invader&lt;/a&gt; - even Atari used it for their &lt;a href=&quot;https://en.wikipedia.org/wiki/Quiz_Show_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quiz Show&lt;/a&gt;. So most definite main stream (*2). There have been others as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was this purely about deciding that support for more complex programs was more important than fast subroutine calls? Or did the on-chip stack take more die area than the logic to save/load the program counter to RAM? Or both, or some other reason?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Some of all. See above.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Heck, one could even use pre- or still loaded registers to make jumping to a much used routines single byte single cycle instructions. A bit like the SC/MP or a /370 which doesn'T feature a stack at all.&lt;/p&gt;&#xA;&lt;p&gt;*2 - There was even a 2650 based S100 system in Australia ... still top of my wishlist.&lt;/p&gt;&#xA;&lt;p&gt;*3 - An 8 levels of 16 bit is already 128 bits. Done static this will require more than 750 transistors - plus several hundred for decoding and buffers. A considerable share in mid 1970s CPUs featuring a total transistor count of 2-6000. While on the other hand, all logic for RAM access is needed anyway, so all needed in addition is a way to serialize/deserialize the PC content - which may as well be used to de-/serialize any 16 bit register aka allowing 16 bit load and store.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-06-06T20:47:20.390" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15083" PostTypeId="1" AcceptedAnswerId="15088" CreationDate="2020-06-04T21:18:39.077" Score="4" ViewCount="327" Body="&lt;p&gt;I have original Microsoft floppies, unfortunately they appear unreadable. Were stored in protector, in a box, in a dark and dry place for the last 20 years. No dust, moisture or exposure to magnetic fields as much as I remember. They just seem to lost magnetic charge. Provided that's the only thing that happened to them, can I write disk images to them in attempt to restore it (at least for some time) or I'm better of just transferring labels to a brand new, good quality disks?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/s4pIN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/s4pIN.jpg&quot; alt=&quot;Microsoft Install Disks&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2020-06-05T21:35:32.053" LastActivityDate="2020-06-06T09:16:52.773" Title="Can I still save data on a floppy that lost its magnetic charge over time" Tags="&lt;floppy-disk&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15085" PostTypeId="1" AcceptedAnswerId="15090" CreationDate="2020-06-05T02:46:59.237" Score="7" ViewCount="1422" Body="&lt;p&gt;I'm trying to find out if any of the Tandy CoCos could boot from disk. I'm thinking the answer is no but I'm having trouble confirming it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe that non-disk machines booted from the standard ROM and that machines with disks had another ROM on the disk controller, which had an enhanced version of Basic which included extra commands for accessing the disk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But was this the only way to boot them? Was there no boot track / boot sector / boot &quot;granule&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know there were alternative OSes for the CoCo, so how did they start up?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="11795" LastEditDate="2020-06-05T18:44:48.837" LastActivityDate="2020-06-14T04:38:20.280" Title="Could Tandy TRS-80 Color Computers boot from disk at all?" Tags="&lt;floppy-disk&gt;&lt;boot&gt;&lt;trs-80&gt;&lt;coco&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15086" PostTypeId="2" ParentId="15085" CreationDate="2020-06-05T03:33:53.163" Score="5" Body="&lt;p&gt;IIRC there was no need to boot the operating system.  It was in the ROM as part of the machine's BASIC.  There were actually two choices, with Extended Color Basic being in the more advanced machines.  A disk would simply provide access to files, sort of like a fast, random access tape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was at least one alternative operating system which would load from disk, OS-9.  This was a unix-like OS developed for 6809 processors.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2020-06-05T03:33:53.163" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15087" PostTypeId="2" ParentId="15078" CreationDate="2020-06-05T04:40:04.243" Score="39" Body="&lt;p&gt;In short, &lt;strong&gt;to better support interrupts&lt;/strong&gt;, because interrupts were&#xA;arguably broken (or at least very limited in usability) on the 8008.&lt;/p&gt;&#xA;&lt;p&gt;The direct answer to the question of why you'd move the stack off-die is&#xA;&amp;quot;space&amp;quot;: they needed a bigger stack and dedicating a lot of die space for a&#xA;larger stack on the 8080 was basically a non-starter. But the question&#xA;underneath that is, &amp;quot;why did they see a need for a bigger stack?&amp;quot;&lt;/p&gt;&#xA;&lt;h3&gt;The Re-entrancy Problem&lt;/h3&gt;&#xA;&lt;p&gt;Subroutines in general on the 8008 had a &lt;a href=&quot;https://en.wikipedia.org/wiki/Reentrancy_%28computing%29&quot; rel=&quot;noreferrer&quot;&gt;re-entrancy&lt;/a&gt; problem: in order to&#xA;use any registers in the routine you needed to save the current values so&#xA;that they could be restored on return. But worse yet, interrupt routines in&#xA;particular could make the system unreliable if they used any instructions&#xA;that changed any flags, since those might change flags set and about to be&#xA;(but not yet) tested in the interrupted code.&lt;/p&gt;&#xA;&lt;p&gt;Practically, these values could be saved only in fixed locations, meaning&#xA;that you could have only one level of interrupts, and non-trivial&#xA;subroutines could not be called from interrupts. (Nor from themselves,&#xA;directly or indirectly, unless care was taken to be careful of registers&#xA;and flags destroyed by the call, but this at least was a more soluble&#xA;problem for the programmer.)&lt;/p&gt;&#xA;&lt;p&gt;This problem was solved in the 8080 by extending the stack operations to be&#xA;able to store not only program counter values (for returning from&#xA;interrupts and subroutines) but also register pair values (including the&#xA;flags). This provides a convenient and efficient way to save register&#xA;values and restore them later, and makes writing re-entrant routines much&#xA;easier.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.classiccmp.org/dunfield/r/8080asm.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Intel 8080 Assembly Language Programming Manual&lt;/em&gt;&lt;/a&gt; gives some&#xA;clear evidence that this is what was on the minds of the designers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;quot;Fully programmable stacks, allowing unlimited subroutine nesting and&#xA;full interrupt handling capability.&amp;quot; (p. &lt;em&gt;v&lt;/em&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&amp;quot;The stack pointer, a register which enables various portions of memory&#xA;to be used as &lt;em&gt;stacks&lt;/em&gt;. These in turn facilitate execution of subroutines&#xA;and handling of interrupts as described later.&amp;quot; (p. 1)&lt;/li&gt;&#xA;&lt;li&gt;&amp;quot;...any interrupt subroutine should save at least the condition bits and&#xA;restore them before performing a RETURN operation. (The obvious and most&#xA;convenient way to do this is to save the data in the stack, using PUSH&#xA;and POP operations.)&amp;quot; (p. 60)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;The Need for More Stack Space&lt;/h3&gt;&#xA;&lt;p&gt;There's no particular indication that eight levels of nested&#xA;subroutines/interrupts was a major problem. Modern developers, used to&#xA;using a &lt;em&gt;lot&lt;/em&gt; of stack space, often perceive small stacks as a likely&#xA;problem, but experienced developers of code for 8-bit systems of this&#xA;nature well know that you use a lot less stack than modern developers&#xA;think.&lt;/p&gt;&#xA;&lt;p&gt;That said, whether 8 levels of subroutine nesting was an issue or not, it's&#xA;clear that as soon as you start using stack space for temporary storage of&#xA;registers you're going to need a lot more than eight words of it. Just&#xA;storing the A register and flags pair alone significantly reduces your&#xA;nesting capacity, and it's not unreasonable that an interrupt routine might&#xA;also want to use at least one other register pair.&lt;/p&gt;&#xA;&lt;p&gt;Aiming for something like 32 to 64 words (64 to 128 bytes) of stack is&#xA;probably reasonable if you're looking at the 8080 as a relatively similar,&#xA;but somewhat larger and cleaner, version of the 8008 architecture. But once&#xA;you've made the decision to move it off-chip, increasing the size beyond&#xA;that is cheap, and in some ways it's easier to have a full 8-bit or 16-bit&#xA;stack pointer than to use an odd size.&lt;/p&gt;&#xA;&lt;p&gt;I've found no particular evidence that the stack pointer was made a full 16&#xA;because they felt any need for a stack to be that large. It's clear that at&#xA;least some experienced microprocessor developers (the MOS 6502 team) felt&#xA;that an 8 bit stack pointer (256 byte stack) was plenty. It's possible that&#xA;the 8080 designers disagreed, or it's possible that they felt they couldn't&#xA;force a particular area to be RAM, as the 6502 designers could. (Even more&#xA;than the MC6800, the 6502 design strongly encouraged page $00 to be RAM, so&#xA;forcing page $01 to be RAM was no hardship.) Or perhaps it just didn't&#xA;occur to them that registers pointing into memory could be any less than 16&#xA;bits.&lt;/p&gt;&#xA;&lt;h3&gt;Stack Frames Were Not Anticipated&lt;/h3&gt;&#xA;&lt;p&gt;Some minicomputer systems of the day, notably the PDP-11 using BCPL and C,&#xA;had the concept of a &amp;quot;stack frame,&amp;quot; where space for parameters to and local&#xA;storage for a function were allocated on the stack.&lt;/p&gt;&#xA;&lt;p&gt;This was pretty clearly not the intent of the 8080 designers. While they&#xA;make it easy to load the stack pointer (via &lt;code&gt;SPHL&lt;/code&gt;), there is no simple way&#xA;to retrieve it, much less SP-relative indexing instructions as provided by&#xA;the PDP-11. (This was true of other early 8-bit processors as well; the&#xA;first major processor to provide stack-relative addressing modes was&#xA;perhaps the MC6809.) Further, the manual makes it clear that they intended&#xA;parameters to be passed in registers, using HL as a pointer to further data&#xA;when there was more than could fit into the registers:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sometimes it is more convenient and economical to let the subroutine load&#xA;its own registers. One way to do this is to place a list of the required&#xA;data (called a parameter list) in some data area of memory, and pass the&#xA;address of this list to the subroutine in the H and L registers.&#xA;(&amp;quot;Transferring Data To Subroutines,&amp;quot; p. 51)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-06-05T04:40:04.243" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="15088" PostTypeId="2" ParentId="15083" CreationDate="2020-06-05T04:59:42.690" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Provided that's the only thing that happened to them, can I write disk images to them in attempt to restore it&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. However, it's rare for floppies to just &quot;loose magnetic charge&quot;, unless they have been stored somewhere where they were exposed to magnetic fields, or other unfavourable conditions that caused this to happen. Though the magnetization does get weaker over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What happens more often is that the surface of the floppy degrades (the metaloxide particles that store the magnetic charge get loose to some degree), and then you are&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;better of just transferring labels to a brand new, good quality disks&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The only way to find out is to format the old disks, write all of their sectors, read them back, and see if that works without read errors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it does, in most cases the floppy should be fine for longer usage.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-06-05T04:59:42.690" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15090" PostTypeId="2" ParentId="15085" CreationDate="2020-06-05T05:25:10.747" Score="10" Body="&lt;p&gt;Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15086&quot;&gt;RichF's answer&lt;/a&gt; I looked for information specifically on booting OS-9 and found that you definitely did have to manually launch even an alternative operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://colorcomputerarchive.com/repo/Documents/Manuals/Operating%20Systems/OS-9%20Level%202%20(Tandy).pdf#page=19&quot; rel=&quot;nofollow noreferrer&quot;&gt;From &lt;em&gt;OS-9 Level Two Operating System&lt;/em&gt; page 2-2, &quot;Booting OS-9&quot;&lt;/a&gt;:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/V2drH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V2drH.png&quot; alt=&quot;scan of page&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this &lt;code&gt;DOS&lt;/code&gt; is not a filename and this is not how you load or run any other program. &lt;a href=&quot;https://groups.google.com/forum/#!original/comp.sys.tandy/j38zKirg3V0/5P2V-Km8dgMJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;These are the normal ways&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To run a BASIC program &quot;XXXX.BAS&quot; in drive 0&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RUN &quot;0:XXXX.BAS&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To run a machine language program &quot;ZZZZ.BIN&quot; on drive 0&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LOADM &quot;0:ZZZZ.BIN&quot; : EXEC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;DOS&lt;/code&gt; is actually a command to manually boot an operating system from the boot sector of a floppy. So there is code in the ROM to boot from a disk, but unlike on some computers this process must be initiated by the user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.frontiernet.net/~mmarlette/Cloud-9/Support/CoCo%20OS-9%20ROM.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is the process documented&lt;/a&gt; by Boisy G. Pitre who worked it out in 1989 in order to make an alnternative ROM that booted directly into OS-9 without user intervention:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Examining the OS-9 Boot Process&lt;/strong&gt;&lt;br&gt;&#xA;  A second prerequisite in completing&#xA;  the project is to understand how the process of booting into OS-9 from&#xA;  BASIC works. The most common way to boot into OS-9 from BASIC is&#xA;  through the DOS command. How does the DOS command work? It seeks to&#xA;  track 34 of the floppy disk and copies the 18 256 byte sectors into&#xA;  RAM location $2600 and JMPs to $2602. The code there sets up the&#xA;  CoCo’s screen and memory then jumps into a module called &lt;code&gt;OS9&lt;/code&gt;, which&#xA;  brings up the rest of the operating system. In order to get OS-9 to&#xA;  work from ROM, there must be some method devised to emulate what the&#xA;  DOS command does.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't know if such customized OS-9 boot ROMs went on to become popular in the CoCo scene.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Dragon 32 and Dragon 64 computers, which are very similar to the CoCo but not clones, use a &lt;code&gt;BOOT&lt;/code&gt; command rather than a &lt;code&gt;DOS&lt;/code&gt; command for &quot;autorun&quot; disks. &lt;a href=&quot;http://www.6809.org.uk/xroar/doc/xroar.shtml#Running-programs&quot; rel=&quot;nofollow noreferrer&quot;&gt;From the XRoar emulator manual&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If a disk image is autorun, XRoar types “BOOT” (Dragon) or “DOS” (CoCo). &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-06-14T04:38:20.280" LastActivityDate="2020-06-14T04:38:20.280" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15091" PostTypeId="2" ParentId="15066" CreationDate="2020-06-05T06:39:36.603" Score="4" Body="&lt;p&gt;For web pages, you can use the &lt;a href=&quot;https://github.com/tenox7/wrp&quot; rel=&quot;nofollow noreferrer&quot;&gt;Web rendereing proxy&lt;/a&gt;, displaying modern web pages inside a GIF and imagemap. It works well, though Google Captcha often thinks (rightfully) that it is not a human controlling the web browser and won't let you through.&lt;/p&gt;&#xA;&lt;p&gt;For pretty much anything else, you can try to locate a VNC client for your platform, There are clients &lt;a href=&quot;https://github.com/rkd77/zxvnc&quot; rel=&quot;nofollow noreferrer&quot;&gt;even for ZX Spectrum&lt;/a&gt; and &lt;a href=&quot;http://vncviewer8086.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MS DOS&lt;/a&gt;, albeit the latter is not quite finished and the former does not use the VNC protocol (therefore should not be called as such). This of course assumes your platform can display graphics at all (no IBM PC with MDA). Although you probably have to de-configure modern security settings (like encryption) at the server side. Expect problems with entering non-ASCII characters, fancy keyboard layout and scrollwheel.&lt;/p&gt;&#xA;" OwnerUserId="476" LastEditorUserId="476" LastEditDate="2020-11-23T20:02:43.317" LastActivityDate="2020-11-23T20:02:43.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15092" PostTypeId="2" ParentId="15066" CreationDate="2020-06-05T20:49:05.510" Score="5" Body="&lt;p&gt;The problem is the HTTPS today. There is a huge push to migrate off of HTTP and on to HTTPS. But older machines simply can't do the necessary encryption in time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But much of this can be mitigate off-device by routing through a proxy that takes HTTP traffic on one side (device side), and talks HTTPS out the other (internet side). It's not drag and drop, but it's doable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that it's a content problem. As a consumer, there's not much we can do about the content issue. You can potentially lower the complexity of pages by &quot;looking like&quot; a mobile device (mobile site can trend toward a simpler presentation), but even still you'd potentially face crippled sites when Javascript does not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good way to check this out is to use a terminal based browser, like &lt;code&gt;lynx&lt;/code&gt;. While it certainly supports HTTPS, it doesn't support (I don't believe) CSS or Javascript. So, using this can give folks a better idea what a tech limited view of a website might be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for other protocols, we find today that chips the bridge protocols for smaller microcontrollers have more computing capacity than the devices we try to connect just to keep up with the protocol. The &quot;universal&quot; adapter today is USB. There's pretty much a bridge from USB to most anything: Ethernet, Bluetooth, IDE, SCSI, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Get USB connectivity to the device, then everything is but a proper driver away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mind, it's not &quot;easy&quot;, but it's possible. There are several SPI interfaces to USB adapters. Most devices aren't &quot;real time&quot;, and designed to be buffered, so with proper handshaking, your glacial ancient device will be able to readily read and write to others via USB. &lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-06-05T20:49:05.510" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15093" PostTypeId="1" AcceptedAnswerId="15094" CreationDate="2020-06-05T21:06:34.527" Score="2" ViewCount="471" Body="&lt;p&gt;Many games on the Apple II supported input from the keyboard, joystick, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Sirius_Joyport&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sirius Joyport&lt;/a&gt;.  While reading the keyboard and Joyport are straightforward, getting the joystick's position is not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does one read the position of the joystick?&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2020-06-05T21:06:34.527" Title="How do I read the position of an Apple II joystick?" Tags="&lt;apple-ii&gt;&lt;joystick&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15094" PostTypeId="2" ParentId="15093" CreationDate="2020-06-05T21:06:34.527" Score="14" Body="&lt;p&gt;The typical Apple II joystick appears to the computer as a pair of analog game&#xA;paddles and two buttons.  The easiest way to read the joystick position&#xA;is from Applesoft BASIC, using &lt;code&gt;PDL(n)&lt;/code&gt;.  The process is detailed in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/649/56&quot;&gt;this&#xA;post&lt;/a&gt;.  The joystick&#xA;X axis is &lt;code&gt;PDL(0)&lt;/code&gt;, the Y axis is &lt;code&gt;PDL(1)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do much better with a custom routine.  The reason for this requires&#xA;a bit of background.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As explained in &lt;a href=&quot;http://www.gno.org/pub/apple2/doc/apple/technotes/aiie/tn.aiie.006&quot; rel=&quot;noreferrer&quot;&gt;Apple IIe tech note #6&lt;/a&gt;,&#xA;game paddles are analog devices.  Reading them requires accessing a&#xA;memory-mapped I/O location to trigger a capacitor discharge, and then timing&#xA;how long it takes for the capacitor to recharge.  The rate at which the&#xA;capacitor charges is determined by the position of the paddle or joystick,&#xA;which has a variable resistor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where things start to get tricky is that each paddle has its own capacitor,&#xA;and they all get triggered at once.  If you read the first joystick axis&#xA;and then immediately start reading the second, you might catch it in&#xA;a state where the capacitor is partially charged, because hitting the&#xA;discharge trigger before all capacitors have recharged has no effect.&#xA;After reading the first paddle, you have to wait for all paddles to finish&#xA;charging before reading another.  This is easy to do, but wastes time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The monitor &lt;code&gt;PREAD&lt;/code&gt;&#xA;routine, which is used by the Applesoft &lt;code&gt;PDL(n)&lt;/code&gt; function,&#xA;increments a counter every 11 cycles while waiting for the&#xA;capacitor to report charged.  The charge time will vary between 2 and 3302&#xA;microseconds with ideal hardware, but could vary depending on how close&#xA;the electronic components are to their specifications.  256 iterations at&#xA;11 cycles per iteration requires (256*11/1.0205) = 2760 microseconds, which&#xA;will yield reasonable results for components with +/- 10% tolerance.&#xA;(Source: &lt;em&gt;Understanding the Apple //e&lt;/em&gt;, by Jim Sather, page 7-29.)  The&#xA;software handles small variations in the range by reporting 255 for any&#xA;large value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can save nearly 3 milliseconds by reading both joystick axes&#xA;simultaneously.  Unfortunately it's not possible to do that in an 11-cycle&#xA;loop on a 6502, which means we're going to lose some resolution.&#xA;For many applications this isn't a problem, e.g. many games only care&#xA;about up-down-left-right-center.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Implementation&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The monitor &lt;a href=&quot;https://6502disassembly.com/a2-rom/OrigF8ROM.html#SymPREAD&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;PREAD&lt;/code&gt;&lt;/a&gt;&#xA;function, which reads a single paddle, is straightforward:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PTRIG   EQU  $C070&#xA;PADDL0  EQU  $C064&#xA;&#xA;PREAD   LDA  PTRIG        TRIGGER PADDLES&#xA;        LDY  #$00         INIT COUNT&#xA;        NOP               COMPENSATE FOR 1ST COUNT&#xA;        NOP&#xA;PREAD2  LDA  PADDL0,X     COUNT Y-REG EVERY&#xA;        BPL  RTS2D          12 USEC [actually 11]&#xA;        INY&#xA;        BNE  PREAD2       EXIT AT 255 MAX&#xA;        DEY&#xA;RTS2D   RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Jim Sather presented a 22-cycle dual-axis version in &lt;em&gt;Understanding the Apple //e&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PDL0    EQU  $C064&#xA;PDL1    EQU  $C065&#xA;&#xA;DOIT    LDA  PTRIG&#xA;        LDX  #0&#xA;        LDY  #0&#xA;        PHA               GIVE SOME SPACE FOR COUNT = 0&#xA;        PLA&#xA;GOTPDL1 BIT  $0&#xA;CHKPDL0 LDA  PDL0&#xA;        BPL  GOTPDL0&#xA;        NOP&#xA;        INY&#xA;        LDA  PDL1&#xA;        BMI  NOGOTS&#xA;        BPL  GOTPDL1&#xA;NOGOTS  INX&#xA;        JMP  CHKPDL0&#xA;&#xA;GOTPDL0 BIT  $0&#xA;        LDA  PDL1&#xA;        BMI  NOGOTS&#xA;        RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;He noted that the routine returned a value between 0 and approximately&#xA;160.  (In the AppleWin emulator this produces a smooth value from $00 to&#xA;$7F, then jumps to $8C at the upper limit.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;John Brooks created an implementation that is a bit longer, but returns values from&#xA;$00 to $FF.  See the&#xA;listing &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.apple2.programmer/BXExb3dp-yE/D7i_24U5BAAJ&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another variation can be found in &lt;a href=&quot;https://6502disassembly.com/a2-stellar7/ROCK2.html#SymReadJoystick&quot; rel=&quot;noreferrer&quot;&gt;Stellar 7&lt;/a&gt;.  Note the game is only interested in&#xA;the 8 principal directions.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Notes&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Some games that expected input from a game paddle rather than a joystick&#xA;would deliberately exit the read loop early.  For example, the paddle&#xA;read routine in &lt;a href=&quot;https://6502disassembly.com/a2-space-eggs/SpaceEggs.html&quot; rel=&quot;noreferrer&quot;&gt;Space Eggs&lt;/a&gt;&#xA;stops after 105 iterations, because the player's ship can only be in that&#xA;many positions.  This allowed the function to execute more quickly with no&#xA;loss of precision.  Unfortunately this makes the game a little harder to&#xA;play with a joystick, because the joystick's center position (128) is&#xA;interpreted as the paddle turned all the way right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The monitor PREAD function exits when the paddle position has been identified.&#xA;This means that an application will execute slightly slower or faster&#xA;depending on the current joystick position.  In some cases, a routine that&#xA;executes for a fixed amount of time is more useful.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Apple IIgs&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The Apple IIgs presents an interesting case, because the CPU is faster and&#xA;has additional capabilities.&#xA;As discussed &lt;a href=&quot;https://groups.google.com/d/topic/comp.sys.apple2.programmer/UhPuQRRh4x4/discussion&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;,&#xA;there are tricks with the 16-bit accumulator that can be used to examine both&#xA;paddle states with one load, allowing one to achieve 11-cycle polling on&#xA;both axes.  While it might seem like reading the joystick with the CPU in&#xA;&quot;fast mode&quot; would also help, in practice the relationship between cycles&#xA;and microseconds is less certain, so switching to 1 MHz mode before reading&#xA;paddles is necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The monitor &lt;code&gt;PREAD&lt;/code&gt; function was updated to work correctly regardless of the&#xA;speed setting, so code that calls that -- including Applesoft BASIC -- will&#xA;behave consistently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some CPU accelerators automatically de-accelerate when the joystick is&#xA;read.  For example, the ZipGS could be configured to slow for 5ms when PTRIG&#xA;is accessed.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2020-06-05T21:06:34.527" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15095" PostTypeId="2" ParentId="14997" CreationDate="2020-06-06T01:35:37.927" Score="5" Body="&lt;p&gt;The best resource is a book called TRS80 Disk and other mysteries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a copy online at:&#xA;&lt;a href=&quot;https://ia801709.us.archive.org/28/items/TRS-80_Disk_and_Other_Mysteries_1980_Harvard_C._Pennington/TRS-80_Disk_and_Other_Mysteries_1980_Harvard_C._Pennington_text.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://ia801709.us.archive.org/28/items/TRS-80_Disk_and_Other_Mysteries_1980_Harvard_C._Pennington/TRS-80_Disk_and_Other_Mysteries_1980_Harvard_C._Pennington_text.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My real copy is old and under a bunch of dust, but it does have the complete disk mapping including directory structure in it.  Be prepared - it was very strange by today's standards.  It started around pg 36 in my hard copy version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Happy hunting!&lt;/p&gt;&#xA;" OwnerUserId="18420" LastActivityDate="2020-06-06T01:35:37.927" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15096" PostTypeId="1" CreationDate="2020-06-06T04:49:24.567" Score="5" ViewCount="74" Body="&lt;p&gt;I've been looking into the format of .cas files for Tandy Color Computer and Dragon32 emulators. These files are almost exactly byte for byte representations of the data/audio/bit pattern of the actual tapes. We have &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/153&quot;&gt;a nice breakdown of that in another question&lt;/a&gt; on our site where it is stated that the length of the &quot;leaders&quot; is 128 bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But some other sites &lt;a href=&quot;http://archive.worldofdragon.org/index.php?title=Tape%5CDisk_Preservation#CAS_File_Format&quot; rel=&quot;nofollow noreferrer&quot;&gt;on the .cas format&lt;/a&gt;, and some books with &lt;a href=&quot;http://www.dragondata.co.uk/Publications/Info_for_mc_users/Info_For_Machine_Code_Users_original.pdf#page=4&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation on&lt;/a&gt; the Dragon32's &lt;a href=&quot;http://archive.worldofdragon.org/browse/downloads/Books/The%20Dragon%2032%20-%20Dragon%20Companion%20-%20Jarvis%20%281982%29.pdf#page=49&quot; rel=&quot;nofollow noreferrer&quot;&gt;tape format&lt;/a&gt;, state that the length of the &quot;leader block&quot; is actually specified by a system variable (or is it a ROM address?) at location &lt;code&gt;$90/$91&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Dragon 32 Information for Machine Code Users!&lt;/em&gt;  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gHc7w.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gHc7w.png&quot; alt=&quot;Dragon 32 Information for Machine Code Users!&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;The Dragon 32 Dragon Companion&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SRAZn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SRAZn.png&quot; alt=&quot;second source&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I &lt;code&gt;PEEK&lt;/code&gt;ed these addresses on a CoCo emulator and they didn't match at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is this a difference between the Dragon and the CoCo? On the CoCo is it hard-coded to be 128 bytes, or is there a memory address to read to get the value that just differs to the address the Dragon uses?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The few .cas files I have are CoCo ones and have use 128 as the length so it's probably safe to use in my code, but I'd still like to satisfy my curiosity.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-08-11T05:42:52.010" LastActivityDate="2020-08-11T05:42:52.010" Title="Length of leader block in Coco and Dragon cassette tape header and .cas tape image file format" Tags="&lt;cassette-tape&gt;&lt;coco&gt;&lt;tape-image&gt;&lt;dragon-32&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15097" PostTypeId="2" ParentId="15078" CreationDate="2020-06-06T08:00:24.687" Score="3" Body="&lt;p&gt;A similar idea is used on ARM processors. They have one high priority interrupt, FIQ, which has 7 banked registers (R8-R14), which is enough in many cases to avoid having to save anything on a stack.&lt;/p&gt;&#xA;" OwnerUserId="4660" LastActivityDate="2020-06-06T08:00:24.687" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15098" PostTypeId="2" ParentId="15083" CreationDate="2020-06-06T09:11:17.300" Score="1" Body="&lt;p&gt;To make them functional again you need to do a low level format. The floppies looks like they for PC (MS-DOS). In there you could type&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Format A: ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but that is not a valid low level format and will not remedy your floppies. What you need is to use &lt;a href=&quot;https://ulozto.net/file/0ciHd2nJKcOK/fhformat-zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;FHFORMAT utility&lt;/a&gt; (in MS-DOS). That will remagnetize and restore the surface index data ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just take in mind that for most 1.44 MByte floppies the safe data retention is only up to a 1 year.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2020-06-06T09:16:52.773" LastActivityDate="2020-06-06T09:16:52.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15099" PostTypeId="1" AcceptedAnswerId="15103" CreationDate="2020-06-06T10:35:15.563" Score="19" ViewCount="538" Body="&lt;p&gt;In the early history of computing before the mid-1960s, there wasn't an universal, de-facto standard for the written representation of a hexadecimal number, different computer systems used their own written presentations. &lt;a href=&quot;https://en.wikipedia.org/wiki/Hexadecimal#History_of_written_representations&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia has some examples&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The ILLIAC I (1952) computer used the uppercase letters K, S, N, J, F and L for the values 10 to 15.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Honeywell Datamatic D-1000 (1957) used the lowercase letters b, c, d, e, f, and g whereas the Elbit 100 (1967) used the uppercase letters B, C, D, E, F and G for the values 10 to 15.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Monrobot XI (1960) used the letters S, T, U, V, W and X for the values 10 to 15.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Pacific Data Systems 1020 (1964) used the letters L, C, A, S, M and D for the values 10 to 15.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I was reading &lt;code&gt;alt.folklore.computers&lt;/code&gt; today and found a claim: The IBM S/360 was one of the major computer systems that used 'A' to 'F' to represent a hexadecimal number, and S/360 was largely responsible the popularization of this de-facto standard due to its success.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How true is this claim?&lt;/p&gt;&#xA;" OwnerUserId="12128" LastEditorUserId="12128" LastEditDate="2020-06-06T10:50:22.900" LastActivityDate="2020-06-07T01:29:31.497" Title="Was the IBM S/360 Responsible for Popularizating the 'A'-to-'F' Notation in Hexadecimal Numbers?" Tags="&lt;history&gt;&lt;programming&gt;&lt;ibm&gt;&lt;mainframe&gt;&lt;s360&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15100" PostTypeId="1" CreationDate="2020-06-06T17:31:58.400" Score="19" ViewCount="5075" Body="&lt;p&gt;I want to purchase a 6502 40 pin CPU in order to verify if my 6502 is faulty, I've seen I can buy from Hong Kong but would prefer closer (to the UK), RS and CPC don’t seen to have any.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most answers suggest trying a 65c02 processor but these all seem to run at a far greater processing speed than my 6502 clocked at 0.75mHz, Would a 65c02 even work? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My system is the ‘Microtan 65’ system consisting of MT0016, TANEX, TANRAM, ETI Epromer fitted in a 19” Rack brought early 80’s.&#xA;I’m intending to go though the suggestions and choose which option is best.&lt;/p&gt;&#xA;" OwnerUserId="18424" LastEditorUserId="4533" LastEditDate="2020-06-08T17:04:41.687" LastActivityDate="2020-06-08T17:04:41.687" Title="Where to buy a 6502 chip" Tags="&lt;6502&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15101" PostTypeId="2" ParentId="15100" CreationDate="2020-06-06T17:48:33.623" Score="25" Body="&lt;p&gt;You are in luck. The latest version of the 6502 is still manufactured and sold. You need to search for it by the official manufacturer's product code &quot;&lt;strong&gt;&lt;a href=&quot;https://www.google.com/search?q=&amp;quot;W65C02S6TPG-14&amp;quot;&quot; rel=&quot;noreferrer&quot;&gt;W65C02S6TPG-14&lt;/a&gt;&lt;/strong&gt;&quot;. Western Design Center (that first &quot;W&quot;) licenses the manufacture of the chip to various silicon foundries, which wholesale them to dealers you can buy from online. If you don't use this recent product code, you'll find lots of offers for old or NOS 6502 chips whose origins will be more &quot;dicey&quot; than buying a new chip from a local chip reseller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, this latest 65C02 is a fully-static CMOS design rated at 14 MHz maximum, but can be clocked down to &amp;lt;1 MHz. I think it is available in 3 package types, including the &quot;traditional&quot; 40-pin DIP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;:&#xA;At the top of page 18 of &lt;a href=&quot;http://www.microtan.ukpc.net/Tandoc2.PDF&quot; rel=&quot;noreferrer&quot;&gt;TANDOC Issue #2&lt;/a&gt;, it states:&#xA;&lt;code&gt;The 65C02 is a direct replacement for the 6502 and it will run all existing programs&lt;/code&gt;. This at least suggests use of the old 65C02 in your machine was a known configuration option back in the day. Though, your particular Microtan 65 may need tweaks if certain pins on the modern W65C02S were originally connected (See other answers and comments).&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-06-07T17:16:57.750" LastActivityDate="2020-06-07T17:16:57.750" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15102" PostTypeId="2" ParentId="15100" CreationDate="2020-06-06T19:37:03.913" Score="3" Body="&lt;p&gt;Mouser UK has them: &lt;a href=&quot;https://www.mouser.co.uk/Western-Design-Center-WDC/Semiconductors/Embedded-Processors-Controllers/Microprocessors-MPU/_/N-6hpeh?P=1yzrr9wZ1z0z63x&quot; rel=&quot;nofollow noreferrer&quot;&gt;Western Design Center (WDC) Through Hole Microprocessors&lt;/a&gt;. Neither RS nor Farnell (CPC) stock the Western Design Centre microprocessors. The only 8-bit chip you can get from those UK suppliers is the Z80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jameco (USA) have the &lt;a href=&quot;https://www.jameco.com/z/W65C02S6TPG-14-Western-Design-Center-MPU-8-Bit-14MHz-65KB-Memory-40-Pin-PDIP_2143638.html?CID=MERCH&quot; rel=&quot;nofollow noreferrer&quot;&gt;W65C02S6TPG-14&lt;/a&gt;, plus a variety of used 6502s for less. Definitely seconding seeing if your application requires NMOS or CMOS. (And if it's for a Commodore, CBM used a bewildering array of 6502 variants, all slightly incompatible.)&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2020-06-06T23:13:32.853" LastActivityDate="2020-06-06T23:13:32.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15103" PostTypeId="2" ParentId="15099" CreationDate="2020-06-06T20:12:02.567" Score="7" Body="&lt;p&gt;TL;DR:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How true is this claim?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's true. While others used it before, it was the success of the /360 making it the default way around the industry.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The long read:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;[Preface: I love the shown research]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I was reading alt.folklore.computers today and found a claim: The IBM S/360 was one of the major computer systems that used 'A' to 'F' to represent a hexadecimal number,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;True. While A-F has been used before, it didn't get much used as architectures were largely based around word sizes with a multiple of 3, making octal the best representation.&lt;/p&gt;&#xA;&lt;p&gt;One major goal for the /360 architecture was fast (and easy) handling of decimal data without much conversion. For that &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12106/6659&quot;&gt;byte (and word) size&lt;/a&gt; as multiples of four is the most obvious and storage efficient size. With an 8 bit byte two (numeric) punch card columns can be stored in one byte, 15 to the word (plus sign). As a result they needed symbols for the remaining six combination and went for A-F.&lt;/p&gt;&#xA;&lt;p&gt;(Also, on a side note, the /360 was not simply one of the 'major computer systems' but has essentially blown everything else away)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and S/360 was largely responsible the popularization of this de-facto standard due to its success.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Exactly. IBM did bet it's company on the /360 and won. Right after introduction it became an incredible success, making IBM the IT gigant it has been thruout the 70s and 80s. It became the de facto architecture for mainframes, sucking in everyone able to spell at least two letters of C/O/B/O/L in arbitrary order as programmer. All manuals and training documentation presented only hex notation (*1), making it the de facto way to talk about binary.&lt;/p&gt;&#xA;&lt;p&gt;While mini computers did take a slow change from octal to hex, basically all micros started out in Hex. Even CPUs like the 8080, with an instruction set clearly designed in octal, got published with all hex documentation. And as they say, &lt;strong&gt;the rest is history.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - L'esprit de l'escalier: IBM did add decima/octal conversion tables to some early manuals.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-06-07T01:29:31.497" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15104" PostTypeId="1" AcceptedAnswerId="15106" CreationDate="2020-06-06T21:33:03.187" Score="26" ViewCount="3130" Body="&lt;p&gt;Back in the early 2000s, I remember that, what were at the time older, PC cases had actual loudspeaker instead of the buzzer, which was popular as the PC speaker on the PC cases of the time period. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interested in finding out the actual technical specifications for the speaker, like for example, impedance, power rating, sound pressure level (assuming it was specified) and so on. &lt;/p&gt;&#xA;" OwnerUserId="1915" LastEditorUserId="6659" LastEditDate="2020-06-07T14:28:58.213" LastActivityDate="2020-06-08T11:54:15.980" Title="What were the HW specifications for the actual PC speakers, before they were replaced by buzzers?" Tags="&lt;ibm-pc&gt;&lt;speaker&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15105" PostTypeId="2" ParentId="15104" CreationDate="2020-06-06T22:30:55.977" Score="7" Body="&lt;p&gt;&lt;a href=&quot;https://www.allelectronics.com/item/sk-85/2.25-8-ohm-0.5-watt-speaker/1.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.allelectronics.com/item/sk-85/2.25-8-ohm-0.5-watt-speaker/1.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They were very similar to the speaker I linked.  These paper cone, 8 ohm quarter to half watt speakers were found in small portable radios, computers, such as the Apple 2 and IBM PC, and some game consoles that did not deliver sound through the display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.applerescueofdenver.com/products-page/case-internal-parts-apple-ii/apple-iie-speaker/&quot; rel=&quot;noreferrer&quot;&gt;http://www.applerescueofdenver.com/products-page/case-internal-parts-apple-ii/apple-iie-speaker/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's a period correct one seen in many devices, including personal computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may just want to get one and more fully characterize it.&lt;/p&gt;&#xA;" OwnerUserId="15357" LastActivityDate="2020-06-06T22:30:55.977" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15106" PostTypeId="2" ParentId="15104" CreationDate="2020-06-06T22:41:47.767" Score="28" Body="&lt;p&gt;The genuine IBM-PC Speaker (Part#8529143) is rated as 8 Ohm 0.5 Watt. Back then a very common small speaker for cheap radios, cassette recorders and alike. I guess still easy to come by today.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was driven by a SN75475 (or MC1472 see &lt;a href=&quot;http://www.bitsavers.org/components/motorola/_dataBooks/1979_Motorola_Interface_Integrated_Circuits.pdf&quot; rel=&quot;noreferrer&quot;&gt;here at p.5-42&lt;/a&gt;) line driver (*1) capable of providing up to 300 mA which equals to a static load of up to 1.5W. The 33 Ohm series resistor limits current to 150 mA in case of shortcut or ~120 mA with speaker, allowing an effective output of 0.55 Watt, so still (basically) within spec.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Lxzk5.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Lxzk5.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - While the basic PC design is quite crappy, individual parts are well made, not at all cutting cost. The IBM solution is quite reliable and safe. The Apple II speaker in contrast is driven by a Darlington transistor prone to burn out or unsolder itself - heck, I even managed once to kill its equivalent within the IOU of an Apple IIe.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-08T11:54:15.980" LastActivityDate="2020-06-08T11:54:15.980" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15107" PostTypeId="2" ParentId="15100" CreationDate="2020-06-06T23:41:25.437" Score="9" Body="&lt;p&gt;It depends on what you need, really -- and, of course, on where you are. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As others have pointed out, the CMOS version of the 6502, the 65&lt;strong&gt;C&lt;/strong&gt;02, is still readily available. &lt;a href=&quot;http://www.westerndesigncenter.com/wdc/distributors.cfm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Western Design Center sell them through their distributors&lt;/a&gt;, notably Mouser, who ship worldwide. There are, however, &lt;a href=&quot;https://en.wikipedia.org/wiki/WDC_65C02#Comparison_with_the_NMOS_6502&quot; rel=&quot;nofollow noreferrer&quot;&gt;minor functional differences between the 6502 and the 65C02&lt;/a&gt;. If your application relies on undocumented opcodes, or makes creative use of certain bugs in the 6502, the 65C02 may not work for you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the hardware side, three pins have been re-assigned in the WDC 65C02, compared to the 6502 and earlier (Rockwell) 65C02s. You need to ensure that VPB (pin 1) and MLB (pin 5) are not connected (pin 1 is usually tied to GND in older systems) and that BE (pin 36) is tied high.&lt;a href=&quot;http://www.westerndesigncenter.com/wdc/distributors.cfm&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the &lt;a href=&quot;http://www.westerndesigncenter.com/wdc/documentation/w65c02s.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;current WDC datasheet for the 65C02&lt;/a&gt; gives V_IH,min (i.e., the minimum input voltage guaranteed to be recognized as &quot;high&quot;) as VCC x 0.7, i.e., 3.5V in a 5V system, whereas &lt;a href=&quot;https://web.archive.org/web/20130924080448/http://www.fairchildsemi.com/an/AN/AN-368.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;NMOS or TTL ICs only guarantee a minimum of somewhere between 2.4V and 2.7V on high outputs&lt;/a&gt;. This means that the current WDC 65C02 may not work, or may show intermittent faults, in old NMOS / TTL circuits, even though past 65C02s have performed quite well in these circumstances. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These last two issues may be resolved with an adapter board. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, unless you already know it &lt;em&gt;will&lt;/em&gt; not work, I would try a 65C02 first. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If indeed you do need a 6502 (without the C) for testing, I see four options for you: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Your best bet to acquire a known good chip is probably to buy a working machine that contains a socketed 6502, so that you can then test this 6502 &lt;em&gt;in situ&lt;/em&gt; pefore proceeding. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can also look through internet forums (with users from your corner of the world) that deal with 6502s and 6502 machines. Some have market places where people sell tested 6502s; these tend to be more reliable than eBay. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you feel lucky, there are many sellers on eBay and Aliexpress who peddle (ha!) 6502s, but these are often untested, relabeled and/or of &lt;a href=&quot;https://youtu.be/5vN_7NJ4qYA&quot; rel=&quot;nofollow noreferrer&quot;&gt;dubious origin&lt;/a&gt;. They are also cheap -- if you have a known good machine to test them in, or can get your hands on one, you can buy a handful and see if they work. Some probably will. On the other hand, if you had a known good machine, you probably wouldn't be asking here. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Finally, there are so-called chip brokers who specialize in sourcing new old stock ICs. A quick check with one here in Germany show that &lt;a href=&quot;https://www.4source.de/de/bauteilsuche.html?bauteilnummer=MOS%206502&quot; rel=&quot;nofollow noreferrer&quot;&gt;they claim to be able to source several thousand NOS MOS and CSG 6502s&lt;/a&gt;. Chip brokers usually don't deal in single quantities, but sometimes, someone organizes a group buy on one of the abovementioned forums. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.westerndesigncenter.com/wdc/distributors.cfm&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt; Incorporating a commment from cjs. &lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-06-07T10:32:54.297" LastActivityDate="2020-06-07T10:32:54.297" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15108" PostTypeId="2" ParentId="15096" CreationDate="2020-06-07T02:40:43.877" Score="2" Body="&lt;p&gt;I've made a couple of discoveries after a night's sleep.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The CoCo still &lt;a href=&quot;https://techheap.packetizer.com/computers/coco/unravelled_series/disk-basic-unravelled.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;reads the leader length from a RAM address&lt;/a&gt;, but its address is two bytes higher in memory than in the Dragon 32:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0199 ** THESE BYTES ARE MOVED DOWN FROM ROM&#xA;0200 *** INIT DESCRIPTION&#xA;0201 * VALUE&#xA;0202 008F CMPMID RMB 1 18 *PV 1200/2400 HERTZ PARTITION&#xA;0203 0090 CMP0 RMB 1 24 *PV UPPER LIMIT OF 1200 HERTZ PERIOD&#xA;0204 0091 CMP1 RMB 1 10 *PV UPPER LIMIT OF 2400 HERTZ PERIOD&#xA;0205 0092 SYNCLN RMB 2 128 *PV NUMBER OF $55'S TO CASSETTE LEADER&#xA;0206 0094 BLKCNT RMB 1 11 *PV CURSOR BLINK DELAY&#xA;0207 0095 LPTBTD RMB 2 88 *PV BAUD RATE CONSTANT (600)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The other discovery is that the Dragon 32 and Dragon 64 used different leader lengths. &lt;a href=&quot;http://dragon32.info/info/memmap.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;128 bytes on the Dragon 32 and 256 bytes on the Dragon 64&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$0090:0091  Cassette leader byte count - number of 0x55 bytes written&#xA;      as sync leader (D32 - 0x0080, D64 - 0x0100)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As for the .cas tape image format, I've found quite some variance. Some might be due to ROM quirks, others due to quirks, speed-ups, or bugs in Emulator code or retrocomputing format conversion tool code. And some seem to be due to copy protection tricks. Leaders of length 128 and 256 are common and are often a byte short or a byte long. Lengths of 14 bytes and 1 byte are also common, perhaps for speeding up loading on emulators. There's more leader length variation in Dragon .cas files than CoCo ones and I guess it's because the CoCo retro scene is more focused on disks whereas the Dragon retro scene is more focused on playing nostalgic games from 30 years ago, which came on cassette.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-06-07T05:35:22.933" LastActivityDate="2020-06-07T05:35:22.933" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15109" PostTypeId="2" ParentId="3015" CreationDate="2020-06-07T06:03:15.237" Score="9" Body="&lt;p&gt;I started programming microcomputers in 1979 as an 11-year-old in Melbourne, Australia. This is how it is in my memory, which I am sure is only a rough approximation of reality.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I never saw anything like an &lt;strong&gt;Altair&lt;/strong&gt; or &lt;strong&gt;Apple I&lt;/strong&gt; in the very early days. I did see a couple of kit computers with hex keypads. I never saw a &lt;strong&gt;ZX 80&lt;/strong&gt; but there were a small number of &lt;strong&gt;ZX 81&lt;/strong&gt;s around. I also never any saw &lt;strong&gt;CP/M&lt;/strong&gt; machines.&lt;/li&gt;&#xA;&lt;li&gt;I knew &lt;strong&gt;Apple II&lt;/strong&gt;s from at least 1979. They had a good reputation and were popular for serious users only because they cost over $2000.&lt;/li&gt;&#xA;&lt;li&gt;I knew &lt;strong&gt;TRS-80 Model I&lt;/strong&gt; and &lt;strong&gt;III&lt;/strong&gt; from 1980. These were more popular for serious users because they were cheaper. I think a bit over $1000. I couldn't afford one but I often went with a friend to a couple of TRS-80 clubs. TRS-80 Model II, Model 4, etc were very uncommon though. Even cheaper than the TRS-80 was the cheaper lower-quality Taiwanese knock off &lt;strong&gt;System 80&lt;/strong&gt; sold by &lt;strong&gt;Dick Smith&lt;/strong&gt;, also sold around the world under various names. TRS-80s were actually also games machines. The clubs were mostly swapping software and by 1982 all arcade games had impressive ports despite the very low res graphics.&lt;/li&gt;&#xA;&lt;li&gt;In contrast to Apple IIs and TRS-80s I saw very few &lt;strong&gt;Commodore PET&lt;/strong&gt;s.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;strong&gt;Vic 20&lt;/strong&gt; seemed to be very popular. It was heavily advertised.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;strong&gt;Sinclair ZX Spectrum&lt;/strong&gt; became popular. It was good for learning to program and to play games and was very affordable for a teenager at around $300. My Spectrum friends took over some of the TRS-80 clubs. But you had to know where to buy one.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;strong&gt;Commodore 64&lt;/strong&gt; either came out a bit later or was more expensive. I also found it much less programming friendly. None of my programming friends at that time had one. But it had much better graphics and sound and games much closer to arcade quality and better than the TV game consoles of the time. It took the Vic 20's momentum and became wildly popular over here.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;strong&gt;MSX&lt;/strong&gt; received a fair bit of hype. I remember people that weren't into computers telling us they would make us regret buying our Spectrums and Vic 20's and C64s. That didn't happen. I never saw one outside a shop.&lt;/li&gt;&#xA;&lt;li&gt;I only ever saw a couple of &lt;strong&gt;Atari 400&lt;/strong&gt;s and &lt;strong&gt;800&lt;/strong&gt;s. I think they were too expensive for kids and for serious users the Apple II owned the market.&lt;/li&gt;&#xA;&lt;li&gt;I only saw a small number of &lt;strong&gt;Tandy CoCo&lt;/strong&gt;s. Mostly at Radio Shack shops. At the time the original came out it didn't seem to be good enough for games or serious use. 40 years later I can see they were actually pretty impressive.&lt;/li&gt;&#xA;&lt;li&gt;I only saw one or two &lt;strong&gt;TI-99/4A&lt;/strong&gt;s. I remember being impressed, at least by the design but they didn't succeed.&lt;/li&gt;&#xA;&lt;li&gt;More popular than the last couple, though I didn't know it at the time, were the &lt;strong&gt;Amstrad CPC&lt;/strong&gt;s.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;strong&gt;MicroBee&lt;/strong&gt; was in all the magazines here and I remember it being very slick. I also remember it being very expensive, at least in comparison to what it could do. Apparently they were popular with schools but I guess only the richer schools. My schools had a TRS-80 Model III and a number Apple IIe's and Europluses I think.&lt;/li&gt;&#xA;&lt;li&gt;I saw very few &lt;strong&gt;Acorn&lt;/strong&gt;s or &lt;strong&gt;BBC micro&lt;/strong&gt;s. I think these were also expensive. My impression at the time was that they tended to be owned by British expats and immigrants who moved here with some money.&lt;/li&gt;&#xA;&lt;li&gt;Everyone I knew who had Spectrums migrated to &lt;strong&gt;Amiga&lt;/strong&gt;s. I seriously considered the &lt;strong&gt;Atari ST&lt;/strong&gt; but bought one of the first used Amiga 1000s I saw advertised. I found out that it was also very popular to migrate from the Commodore 64 and the Amstrad CPC to the Amiga. The 1000 was not popular here but the 500 and 2000 were very popular for both games and programming, but not serious/business users. I didn't know anyone with an ST but I think they were also popular, just less so. Musicians preferred them.&lt;/li&gt;&#xA;&lt;li&gt;My recollection is that the &lt;strong&gt;Macintosh&lt;/strong&gt; was successful from the get-go, which is not what I read these days online. Serious users from the Apple II moved to them. They were huge for desktop publishing. I worked for a print shop at the time and you couldn't not have one in that business.&lt;/li&gt;&#xA;&lt;li&gt;The early &lt;strong&gt;IBM PC&lt;/strong&gt;s mostly did boring serious stuff. People that didn't have much interest in or knowledge of computers bought them due to IBM's name.&lt;/li&gt;&#xA;&lt;li&gt;Everyone with an Amiga acquired a 486 PC within a few months of Doom coming out in 1994. Some kept using both for a couple of years.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The only computer I would seriously apply the word &amp;quot;dominate&amp;quot; to would be the &lt;strong&gt;Commodore 64&lt;/strong&gt;, even though I never had one or was interested in them. It truly dominated the home market for years. The 16-bit and 32-bit eras were more fragmented and the business and serious market was also divided. Initially between the Apple II and TRS-80, then between the IBM PC and the Apple II and Macintosh.&lt;/p&gt;&#xA;&lt;p&gt;The only seriously special thing here was the &lt;strong&gt;MicroBee&lt;/strong&gt;. They look very nice and their specs look very nice. And they're unique to Australia. You don't see them for sale though. Looking on our equivalent to Craigslist I only see a wanted ad (-:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fYZ9u.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fYZ9u.png&quot; alt=&quot;MicroBee&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Oh, one computer I remember being advertised in the magazines, and that I saw in at least one shop was the &lt;strong&gt;Hitachi Peach&lt;/strong&gt;. It had pixel-addressable hi-res colour graphics that were better than what a TRS-8-, Apple II, Vic 20, or Spectrum could do. That must've been around 1981-82 because I doubt its graphics were any more impressive than a CPC or C64. These days they're hardly mentioned anywhere on the internet.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I had a nagging feeling there was an early &amp;quot;luggable&amp;quot; I was missing. Indeed the &lt;strong&gt;Osborne 1&lt;/strong&gt; was prominent here among serious computers and it ran CP/M which I was unaware of, or uninterested in back in the day, since CP/M was not associated with graphics or games.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;FINAL UPDATE!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/Zv9g8-pTfeY&quot; rel=&quot;nofollow noreferrer&quot;&gt;EEVblog did an episode (#1194) pretty much on this topic&lt;/a&gt; just over a year ago. He goes through an Australian computer magazine from 1985, commenting on many ads, systems, software, etc. along the way.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-07-25T06:46:07.670" LastActivityDate="2020-07-25T06:46:07.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15110" PostTypeId="2" ParentId="15104" CreationDate="2020-06-07T09:05:54.230" Score="6" Body="&lt;p&gt;I still got a few of them in here. They all are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;8 Ohm &#xA;0.5 Watt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Usual Identification: &lt;code&gt;YD58-1B&lt;/code&gt; or &lt;code&gt;YD58-2B&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here first image I found with google (&lt;a href=&quot;https://f.aukro.cz/images/sk6935666649/730x548/4ae7cc79-c95d-4a6f-a4f3-3bb47d329fab&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/UNEqf.png&quot; alt=&quot;speaker&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its a &lt;strong&gt;wide-band&lt;/strong&gt; (general purpose) &lt;strong&gt;speaker&lt;/strong&gt;. They where popular back in the days however pocket radios and stuff usually used 0.25 Watt version. In all the PCs I saw there was the 0.5 Watt versions used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact that the speakers where wide-band allowed the PC to reproduce PCM sound playback (using nasty PWM technique) even without the sound card present. For more info see&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5837/6868&quot;&gt;Why did the IBM PC need a sound card?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The buzzers have much worse audio properties and are not very good for sound reproduction they good for beeping in specific ranges of frequencies instead. They especially bad for human voice reproduction (when PCM to PWM playback is used so my bet the higher frequencies are problem). I tried to use those for &lt;a href=&quot;https://stackoverflow.com/a/52935496/2521214&quot;&gt;TTS text to speech on MCU&lt;/a&gt; lately instead of LCD output for fun. Speakers where fine but buzzers was unrecognisable giberish/noise. However playing melodies is fine with them. &lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2020-06-07T09:27:40.510" LastActivityDate="2020-06-07T09:27:40.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15111" PostTypeId="5" CreationDate="2020-06-07T10:55:23.777" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-06-07T10:55:23.777" LastActivityDate="2020-06-07T10:55:23.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15112" PostTypeId="4" CreationDate="2020-06-07T10:55:23.777" Score="0" Body="For questions about the IBM System/360 mainframe computer, and related software and hardware. For questions about IBM hardware in general, use the tag &quot;ibm&quot;." OwnerUserId="12128" LastEditorUserId="12128" LastEditDate="2020-06-07T13:38:22.270" LastActivityDate="2020-06-07T13:38:22.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15113" PostTypeId="1" AcceptedAnswerId="15114" CreationDate="2020-06-07T20:21:08.507" Score="5" ViewCount="1324" Body="&lt;p&gt;I have this system with 2MB onboard RAM, but I noticed there are additional soldering pads to the right from memory chips (NEC 424400-80L, but there are also TOSHIBAs TC511664JL-10 on daughter board above?). I read in computer magazines from 1991/1992 similar model of Commodore C386SX-LT (there were at least two different builds / manufacturers):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.scuzzscink.com/amiga/amiga_scuzz373.htm&quot; rel=&quot;noreferrer&quot;&gt;https://www.scuzzscink.com/amiga/amiga_scuzz373.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;was upgradable up to 5MB, this may be because the other C386SX-LT had RAM SIMMs (modular)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either way, with some old computers, not sure which one you could solder in RAM to add more of it. How to check if this is an option without potentially ruining this fine, working piece of technology from early 90s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WabGB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WabGB.jpg&quot; alt=&quot;C386SX-LT Motherboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-06-08T09:58:20.463" Title="Is solder-on memory upgrade an option here and how to check it" Tags="&lt;commodore&gt;&lt;ram&gt;&lt;80386&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15114" PostTypeId="2" ParentId="15113" CreationDate="2020-06-07T20:30:33.370" Score="14" Body="&lt;p&gt;The daughterboard is the graphics card. The GD610/GD620 is a quite common chipset for LCD/VGA graphics in laptops. It uses two 64k x 16Bit RAM chips to obtain 64k x 32Bit, which is the usual VGA memory (256 kBytes, but the VGA needs 32-Bit access to get the data fast enough to the screen). Those RAM chips have an access time of 100ns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chips on your mainboard are &lt;em&gt;extremely&lt;/em&gt; common chips: They are 1M x 4Bit chips (with a total capacity of 4 MBit), and four of them make a bank of 1M x 16 Bit (as this is a 386SX system, the memory needs to be 16 Bits wide). It is very likely that soldering a second set of these chips (which can be stolen from any 2-chip or 3-chip 1MB SIMM) will expand the RAM to 4MB without any further need of customization. You &lt;em&gt;should&lt;/em&gt; also add the decoupling caps (the big one is an electrolytic 1µF cap, labelled 105 on the other chips, the small one is most likely a multilayer ceramic cap of 100nF, which is the typical value used for them) next to the four RAM chips. The RAM chips already on the board have an access time of 80ns, so the chips you add should not be slower. They don't have to be by a specific manufacturer, though. All FPM (fast page mode) 1M x 4Bit chips with the correct package are compatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to Alex Hajnal for noticing that there is an electrolytic cap per RAM chip. It feels a bit over-the-top though. One electrolytic per bank and a ceramic cap per chip ought be really good enough.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="10479" LastEditDate="2020-06-08T09:58:20.463" LastActivityDate="2020-06-08T09:58:20.463" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15115" PostTypeId="2" ParentId="15113" CreationDate="2020-06-07T20:39:56.747" Score="4" Body="&lt;p&gt;Since there is no documentation available, all ways I can think of to check ahead of soldering would involve a certain level of measurement devices - like logic analyzers or at least a digital oscilloscope - which I assume are not present.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'd simply go ahead and pick four 424400-80 (or compatible), solder them on (not forgetting to add appropriate support capacitors) and see if the system recognize them. These chips are quite common and available from a wide variety of manufacturers. It should be easy to source them from old motherboards or PS-2 style RAM modules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 42 4400 are, as the name implies 4 megabit FPM RAMS organised as 1 Mi by 4. Adding four of them should turn the actual 2 MiB into whooping 4 MiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mentioned 51 16 64 are a complete different type (1 Mi bit organized as 64 Ki by 16 bit) and will be of no good &lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-08T00:39:38.293" LastActivityDate="2020-06-08T00:39:38.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15116" PostTypeId="1" AcceptedAnswerId="15117" CreationDate="2020-06-07T20:51:30.857" Score="4" ViewCount="1249" Body="&lt;p&gt;The &lt;a href=&quot;http://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;GameBoy CPU Manual&lt;/a&gt; talks about restart operations on page 116. Each of these operations push the current address onto the stack, and then jumps to a specific address (&lt;code&gt;0x00&lt;/code&gt;, &lt;code&gt;0x08&lt;/code&gt;, &lt;code&gt;0x10&lt;/code&gt;, etc, depending on the opcode). E.g., for the &lt;code&gt;0xFF&lt;/code&gt; opcode, I'd jump to the address &lt;code&gt;0x38&lt;/code&gt; (after pushing the current PC onto the stack).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this makes me run in an infinite loop with a Tetris ROM... Which has a &lt;code&gt;0xFF&lt;/code&gt; opcode in the address &lt;code&gt;0x38&lt;/code&gt;. So the loop here and the overflow is pretty obvious. This is how that part of the dump looks like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00000000  c3 0c 02 00 00 00 00 00  c3 0c 02 ff ff ff ff ff  |................|&#xA;00000010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|&#xA;00000020  ff ff ff ff ff ff ff ff  87 e1 5f 16 00 19 5e 23  |.........._...^#|&#xA;00000030  56 d5 e1 e9 ff ff ff ff  ff ff ff ff ff ff ff ff  |V...............|&#xA;00000040  c3 7e 01 ff ff ff ff ff  c3 be 26 ff ff ff ff ff  |.~........&amp;amp;.....|&#xA;00000050  c3 be 26 ff ff ff ff ff  c3 5b 00 f5 e5 d5 c5 cd  |..&amp;amp;......[......|&#xA;00000060  6b 00 3e 01 e0 cc c1 d1  e1 f1 d9 f0 cd ef 78 00  |k.&amp;gt;...........x.|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Am I misunderstanding something? Is the documentation wrong or inaccurate?&lt;/p&gt;&#xA;" OwnerUserId="13696" LastActivityDate="2020-06-07T21:41:37.510" Title="How does the RST operation of GameBoy (SHARP LR35902) work?" Tags="&lt;emulation&gt;&lt;nintendo&gt;&lt;game-boy&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15117" PostTypeId="2" ParentId="15116" CreationDate="2020-06-07T20:57:02.277" Score="13" Body="&lt;p&gt;The documentation is correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tetris does not use the &lt;code&gt;RST 38&lt;/code&gt; instruction (restart vector &lt;code&gt;$38&lt;/code&gt; is a custom vector, not tied to any Game Boy hardware interrupt), so the emulator I assume you're developing is calling it by mistake. It's a common error, since uninitialized/unmapped memory on the Game Boy contains &lt;code&gt;$FF&lt;/code&gt;, which is the &lt;code&gt;RST 38&lt;/code&gt; opcode. Since Tetris doesn't use that reset vector, it is itself uninitialized and filled with &lt;code&gt;$FF&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the infinite loop is expected, but your initial &lt;code&gt;RST 38&lt;/code&gt; call is not. You should debug your program flow to see how you end up executing an &lt;code&gt;$FF&lt;/code&gt; opcode in the first place, because you shouldn't be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure what you mean by &quot;overflow&quot;, though. There's no overflow involved here. Unless you mean the eventual stack overflow (underflow) that you will encounter, of course, where the stack will eventually spill into ROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way! Trivia: Sharp LR35902 is the name of the Game Boy's SoC (system-on a chip). The CPU itself has (somewhat) recently been identified as a Sharp SM83. It was commonly used in Japanese home appliances like air conditioners and washing machines.&lt;/p&gt;&#xA;" OwnerUserId="15661" LastEditorUserId="15661" LastEditDate="2020-06-07T21:41:37.510" LastActivityDate="2020-06-07T21:41:37.510" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15118" PostTypeId="1" CreationDate="2020-06-07T21:17:48.403" Score="1" ViewCount="60" Body="&lt;p&gt;I'd like to use Compact Flash with 2,5&quot; IDE adapter in i386 laptop. The bios is CHIPS LeAPset 117 (R1.09) and it requires specific configuration for HDD in order to work. I have 4GB CF card, where I want to make a 500MB partition for i386 machine. Which is the most reasonable option to pick, and is there any harm in trying one after another? Can I damage CF?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HIzm3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HIzm3.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/z2tiI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/z2tiI.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/AWqLN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AWqLN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ob9ny.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ob9ny.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/bDOqR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bDOqR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/6vzBu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6vzBu.jpg&quot; alt=&quot;bios&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-06-07T21:39:31.240" Title="How to configure HDD controller for CF in CHIPS LeAPset 117 (R1.09) bios" Tags="&lt;80386&gt;&lt;bios&gt;&lt;old-hardware-adaptation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15119" PostTypeId="2" ParentId="15116" CreationDate="2020-06-07T21:22:02.200" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Am I misunderstanding something?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is the documentation wrong or inaccurate?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As well not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RST 38h (Opcode FFh) is simply not used within this application (*1) and thus not filled with code. Unused cells in (EP)ROM images are by default set to FFh. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same seams to be true for restarts 2/3/4 (10h/18h/20h) as well. Unused thus FFh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If any of these 4 is called, they will get stuck in an infinite loop. All available RAM will be over and over filled with return addresses (eventually all being 39h 00h), as well as any other address. But the CPU won't care, as they are never read&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only ROM address 38h will be fetched, followed by storing 39h and 00h at the actual SP address, SP decremented by two and setting teh PC again to 0038h. There will also be no overflow detected, although SP will underflow every 32768 iterations, but again, noone cares :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-06-07T21:22:02.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15120" PostTypeId="2" ParentId="15118" CreationDate="2020-06-07T21:39:31.240" Score="3" Body="&lt;p&gt;Normally you would enter the parameters in for a custom drive. Normally you would also have to figure out what native CHS parameters for the CF card are so you can type them in or select one of existing ones that match best. As no existing type is nowhere near 500MB, you can't utilize the card for 500MB unless you type in custom parameters. As it is a 4GB card, it most likely says it has 16 heads, 63 sectors, and near 8000 cylinders. The 386 is most likely too old to understand larger drives via geometry translation or LBA, so you are limited to 1024C/16H/63S. If you put in smaller numbers then the card will work, but it has unused sectors per track and unused sectors per cylinder so the DOS partition will not be readable in a newer machine or USB card reader.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-06-07T21:39:31.240" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15121" PostTypeId="1" AcceptedAnswerId="15122" CreationDate="2020-06-07T22:57:50.813" Score="8" ViewCount="835" Body="&lt;p&gt;I'm working on implementing the instructions of the z80 chip inside a gameboy for an emulator. I'm starting with the instructions in &lt;a href=&quot;https://gbdev.gg8.se/wiki/articles/Gameboy_Bootstrap_ROM&quot; rel=&quot;noreferrer&quot;&gt;the boot rom&lt;/a&gt; that sets everything up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've implemented the first 3 instructions but the 4th one is throwing me for a loop with it's assembly notation and what I'm seeing in &lt;a href=&quot;http://z80.info/decoding.htm&quot; rel=&quot;noreferrer&quot;&gt;the opcode decoding chart I'm referencing&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The instruction, according to that wiki's disassembled code, is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LD (HL-), A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If it were &lt;code&gt;LD HL, A&lt;/code&gt; then I'd know that means &quot;load register A's value in HL&quot; (I know it's not valid because A is a byte while HL is 2 bytes, but I'm mostly talking about the notation). If it were &lt;code&gt;LD (HL), A&lt;/code&gt; then, if I'm correct, that would mean &quot;load register A's value into the memory address at the location stored in HL.&quot; I'm have no idea what the &lt;code&gt;-&lt;/code&gt; of &lt;code&gt;(HL-)&lt;/code&gt; means.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that confusion, I decided to try working backwards. Location $0007 in the boot rom contains the single byte of &lt;code&gt;0x32&lt;/code&gt; that is the instruction. &lt;code&gt;0x32 = 0b00110010&lt;/code&gt; breaks down to x = 00, y = 110 (p = 11, q = 0), and z = 010 with no prefix, which the opcode chart indicates means &lt;code&gt;LD (nn), A&lt;/code&gt; which doesn't contain &lt;code&gt;HL&lt;/code&gt; at all and from the looks of it, there's not 2 immediate bytes after the instruction in the boot rom. This seems odd because I feel I can decode using this site pretty accurately. Is the site wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm wrong about something somewhere but I'm not sure what. How do I reconcile these two observations and what's the right way to move forward?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: &lt;a href=&quot;https://realboyemulator.wordpress.com/2013/01/03/a-look-at-the-game-boy-bootstrap-let-the-fun-begin/&quot; rel=&quot;noreferrer&quot;&gt;According to this site&lt;/a&gt;, &lt;code&gt;LD (HL-), A&lt;/code&gt; means &quot;load A into the memory address that HL points to, then decrement HL&quot; which makes sense with what the wiki describes this program does. &lt;code&gt;A&lt;/code&gt; was just cleared in the previous &lt;code&gt;XOR A&lt;/code&gt; instruction and then it'll iterate through VRAM setting all of it to the value of zero. Now my concern is that I'm reading the instruction decoding site incorrectly as I don't see anything about decrementing a register after use.&lt;/p&gt;&#xA;" OwnerUserId="18442" LastEditorUserId="6659" LastEditDate="2020-06-08T00:31:48.977" LastActivityDate="2020-06-08T18:17:44.177" Title="On the LR35902, what does the assembly 'LD (HL-),A' do?" Tags="&lt;assembly&gt;&lt;game-boy&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15122" PostTypeId="2" ParentId="15121" CreationDate="2020-06-07T23:36:17.463" Score="19" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm working on implementing the instructions of the z80 chip inside a gameboy for an emulator.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, I guess that's the most important point here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The Gameboy doesn't feature a Z80, but an independent 8080 descendant.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a Z80 opcode table will not get you anywhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's LR35902 CPU (*1) is, like the Z80, based on the 8080 with some extensions. The development of the LR35902 is independent of the Z80. The reason it gets often confused with the Z80 is that it's Assembler syntax and mnemonics have been changed from 8080 much the same way it was done by Zilog. Most notable the use of &lt;code&gt;LD*&lt;/code&gt; for all transfers, which makes many 8080 instructions look exactly like on the Z80.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The instruction, according to that wiki's disassembled code, is &lt;code&gt;LD (HL-), A&lt;/code&gt;&#xA;  [...] Location $0007 in the boot rom contains the single byte of 0x32 &#xA;  [...] means &lt;code&gt;LD (nn), A&lt;/code&gt; &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(*2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;True, if this would be an 8080 or Z80. Here it's a 3 byte instruction with opcode 32h and two bytes holding an absolute (16 bit) address. In 8080 Assembler this would be a &lt;code&gt;STA addr&lt;/code&gt; meaning store A at the absolute address (*3). In Z80 lingo it's &lt;code&gt;LD (xx),A&lt;/code&gt;. Same opcode, same encoding, same operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The LR35902 replaced this instruction by a single byte instruction storing the content of A at a location pointed to by HL and decrement HL afterwards. So the opcode 32h has a different meaning and different length (implied instead of explicite address) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In LR35902 Assembly this can be written as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;LD (HLD),A&lt;/li&gt;&#xA;&lt;li&gt;LD (HL-),A&lt;/li&gt;&#xA;&lt;li&gt;LDD (HL),A&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The listing you're referring to uses the second way.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm wrong about something somewhere but I'm not sure what. How do I reconcile these two observations and what's the right way to move forward?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You're perfectly right, but using the wrong opcode table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be helpful to cross reference to (unofficial) &lt;a href=&quot;http://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf&quot; rel=&quot;noreferrer&quot;&gt;Game Boy CPU manual&lt;/a&gt;. It describes quite well most workings (*4) the only thing it misses is a good opcode table, but as so often Pastiser offers a &lt;a href=&quot;https://pastraiser.com/cpu/gameboy/gameboy_opcodes.html&quot; rel=&quot;noreferrer&quot;&gt;great one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;*1 - As tobiasvl points out, it's worth to keep in mind that LR35902 names the whole System-on-a-Chip. It is most likely based on Sharp's SM83xx family, thus the 'real' CPU 'part' would be a SM83 core. See as well the &lt;a href=&quot;http://www.bitsavers.org/components/sharp/_dataBooks/1996_Sharp_Microcomputer_Data_Book.pdf&quot; rel=&quot;noreferrer&quot;&gt;1996 data book&lt;/a&gt; with the instruction set starting at p.182. I still keep using LR35902 thruout this as it's the common found reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*2 - BTW, try to not use spaces after a comma. This is Assembler, not C. (White) Spaces do have a meaning in Assembly. While this may be fine with the assembler you're using, it's not portable at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*3 - As mentioned, the 8080 used different mnemonics for various transfers while the Z80 unified this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*4 - That is,  once you get used to its rather unorthodox structure - it's less of a reference than a book one needs to be read like a novel.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-08T18:17:44.177" LastActivityDate="2020-06-08T18:17:44.177" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="15123" PostTypeId="2" ParentId="5793" CreationDate="2020-06-08T04:51:18.143" Score="5" Body="&lt;p&gt;I can tell you as a former Radio Shack employee, we used to call them that as well. &#xA;That said, I am happy with my still functioning, very modified Mod I.&lt;/p&gt;&#xA;" OwnerUserId="18420" LastEditorUserId="4335" LastEditDate="2020-06-08T13:10:10.640" LastActivityDate="2020-06-08T13:10:10.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15124" PostTypeId="1" CreationDate="2020-06-08T11:34:10.997" Score="12" ViewCount="2657" Body="&lt;p&gt;UNIX did not have support for virtual file systems (vnodes) until 1986. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;S.R. Kleiman, “Vnodes: An Architecture for Multiple File System Types in Sun UNIX,” Summer USENIX 1986&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I remember this quite clearly: Sun needed vnodes to support NFS. After that, the two ways of creating a virtual file system was as a loop-back NFS server (allowing you to write your file system at the user level), and as a kernel-loaded vnode file system (which required rebuilding the kernel because we didn't have loadable kernel modules).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question: How did Unix before 1986 implement the /dev file system? I don't have a copy of Lions, but perhaps it is time to buy one...&lt;/p&gt;&#xA;" OwnerUserId="6623" LastActivityDate="2020-06-08T13:20:31.047" Title="How did the /dev file system work in early Unix?" Tags="&lt;unix&gt;&lt;file-system&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15125" PostTypeId="1" CreationDate="2020-06-08T11:46:29.493" Score="3" ViewCount="199" Body="&lt;p&gt;For the Dragon 32 and the TRS-80 Color Computer I've found two documents describing how loading from cassette tape works:&lt;a href=&quot;http://archive.worldofdragon.org/index.php?title=Tape%5CDisk_Preservation#CAS_File_Format&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dragon 32 doc&lt;/a&gt;, &lt;a href=&quot;http://www.cs.unc.edu/~yakowenk/coco/text/tapeformat.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;CoCo doc&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They both say that a standard program consists of a leader, a &quot;name block&quot;, a second leader, many data blocks, and an end block.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The three kinds of blocks all have a length. So you keep loading the next block until you get to the end block.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;name block&quot; contains both the load address and the execution address for machine code files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But some .cas tape image files, which are just byte-for-byte the data that the audio modulations represent, actually put blocks in other places, presumably for copy protection. For false end blocks near the beginning or missing end blocks it's easy to guess what to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;But&lt;/strong&gt; when there are multiple &quot;name blocks&quot; it is not clear. Of course I can reset the load address that's in each name block and load all subsequent data there until the next name block changes it. But each name block also has a &quot;default EXEC address&quot; or &quot;machine code starting address&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When that happens, do the latter entry addresses just overwrite the previous ways, which presumably have some decoy code to throw a red herring to crackers back in the day? Or does each code block get executed? Or maybe even the first one is the real one and the latter ones are decoys?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't find this behaviour documented but perhaps some of the emulators load .cas files directly without fully emulating the audio system, or some file conversion tools dealt with it? The two emulators that I have both do seem to use the audio system though, even when you select a .cas file from the menu rather than from the native BASIC OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did find &lt;a href=&quot;https://www.computerarcheology.com/CoCo/color-basic-unravelled.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this commented ROM disassembly&lt;/a&gt; and I'm trying to figure out what it does, but I haven't been able to understand it well enough. The machine code tape loading code is at &lt;code&gt;A4FE&lt;/code&gt; and labelled &lt;code&gt;CLOADM&lt;/code&gt;, the name of the BASIC command for loading a machine code program.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-08-11T05:43:29.760" LastActivityDate="2020-08-11T05:43:29.760" Title="Loading a Tandy CoCo or a Dragon 32 machine code program from cassette with multiple &quot;name blocks&quot;" Tags="&lt;cassette-tape&gt;&lt;reverse-engineering&gt;&lt;coco&gt;&lt;executables&gt;&lt;dragon-32&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15126" PostTypeId="2" ParentId="15124" CreationDate="2020-06-08T11:53:31.770" Score="30" Body="&lt;p&gt;In 1986 (and for a few years after that still), &lt;code&gt;/dev&lt;/code&gt; wasn’t handled by a special file system. It was generally a directory on the root file system, and its contents were largely static: a series of device nodes, created by &lt;code&gt;mknod&lt;/code&gt;. Many systems had some way of creating the “standard” nodes, for example &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V7/dev/makefile&quot; rel=&quot;noreferrer&quot;&gt;a Makefile in V7&lt;/a&gt; or &lt;code&gt;MAKEDEV&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each device node has a type, major number and minor number, and those are mapped to device drivers by the kernel. As long as those assignments were static, and especially as long as device drivers themselves were built into the kernel, there wasn’t much need for a dynamic &lt;code&gt;/dev&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In early versions of the Unix kernel, device access was table-driven; see &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V7/usr/sys/conf/c.c&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;usr/sys/conf/c.c&lt;/code&gt;&lt;/a&gt; for both block and character devices. The tables were generated by &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V7/usr/sys/conf/mkconf.c&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;usr/sys/conf/mkconf.c&lt;/code&gt;&lt;/a&gt;. You can see them in use, for example, in &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V7/usr/sys/sys/fio.c#L102&quot; rel=&quot;noreferrer&quot;&gt;the &lt;code&gt;openi&lt;/code&gt; function&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even on current systems with dedicated &lt;code&gt;/dev&lt;/code&gt; file systems, those are mostly for convenience: device nodes can be created elsewhere, and will work just as well (as long as they’re not on a file system mounted with options which cause device nodes to be ineffective).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-06-08T13:20:31.047" LastActivityDate="2020-06-08T13:20:31.047" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15127" PostTypeId="2" ParentId="15124" CreationDate="2020-06-08T12:42:10.943" Score="18" Body="&lt;p&gt;Just a supplement to what Stephen Kitt already said:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The entries in any directory in a classic Unix file system are &lt;em&gt;hard links&lt;/em&gt; that map names to &lt;em&gt;inodes&lt;/em&gt; —small fixed-size records in the file system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were several different kinds of inode;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A &quot;regular file&quot; inode contained information that the OS could use to find the pages of a file.&lt;/li&gt;&#xA;&lt;li&gt;A &quot;directory&quot; inode basically is the same as a regular file, except that the OS treats the file contents as a table of hard links, and it doesn't allow user-mode programs to write the &quot;file.&quot;&lt;/li&gt;&#xA;&lt;li&gt;A &quot;device special,&quot; inode does not refer to a disk file at all: It contains only a &lt;em&gt;major device number&lt;/em&gt; that identifies a device driver compiled in to the kernel, and a &lt;em&gt;minor device number&lt;/em&gt; interpreted by the driver. When a program opens a &quot;device special&quot; file, the open file descriptor actually represents a channel connecting the program to the device driver.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There was nothing at all special about the &lt;code&gt;/dev&lt;/code&gt; directory. Any user could use the &lt;code&gt;mknod&lt;/code&gt; command line utility to create a device special file in any directory where they had write access, and it would work exactly the same as a &lt;code&gt;/dev/foobar&lt;/code&gt; device special file with the same major and minor device numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;/dev&lt;/code&gt; merely was the conventional place for programs to look to find certain device special files.  And, of course, like many other &quot;conventional&quot; directories, it conventionally was protected so that only &lt;code&gt;root&lt;/code&gt; could make changes there.&lt;/p&gt;&#xA;" OwnerUserId="588" LastEditorUserId="588" LastEditDate="2020-06-08T12:44:52.890" LastActivityDate="2020-06-08T12:44:52.890" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15128" PostTypeId="1" AcceptedAnswerId="15288" CreationDate="2020-06-08T15:18:40.737" Score="7" ViewCount="326" Body="&lt;p&gt;How did the parity check DRAM chips work? In particular, is there a reason for the gap in the motherboard (IBM calls this system board) between the parity check DRAM and the &amp;quot;normal&amp;quot; DRAM above it?&lt;/p&gt;&#xA;&lt;p&gt;There is a also a gap in the 8kB ROM sockets to the left of the DRAM sockets, between the U28 socket and the U29 socket above it. This makes the board tidier and aligns the U28 socket with the RAM parity chips to the right. Is there a reason for this gap?&lt;/p&gt;&#xA;&lt;p&gt;A lesser question is whether there are any products that utilised the ROM expansion socket (labeled U28)?&lt;/p&gt;&#xA;" OwnerUserId="15219" LastEditorUserId="6659" LastEditDate="2020-06-22T15:49:31.427" LastActivityDate="2020-06-22T20:40:09.213" Title="IBM PC 5150 board layout" Tags="&lt;ibm-pc&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15129" PostTypeId="1" AcceptedAnswerId="15134" CreationDate="2020-06-08T18:19:03.333" Score="5" ViewCount="370" Body="&lt;p&gt;I got an EEPROM AT28C64 and loaded it with instructions with my handmade STM32 EEPROM programmer, the instructions are very simple:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Load A register with decimal number 85 which is, in binary, 01010101, then&lt;/li&gt;&#xA;&lt;li&gt;output that A register on port zero, then&lt;/li&gt;&#xA;&lt;li&gt;jumping back to step 1.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have hard coded this my elf in the beginning then used an assembler but here is my first line of code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         /* 0      1     2     3     4     5     6 */&#xA;/* 0000 */  0x3e, 0x55, 0xd3, 0x00, 0xc3, 0x00, 0x00,&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;in assembly that is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LD  A, 85&#xA;OUT (0), a&#xA;JP  0000h&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now I actually don't have any I/O IC or anything hooked, my only goal is just to see the 8 LEDs hooked to the data bus to show the pattern &lt;code&gt;01010101&lt;/code&gt; twice; once when loading register A and again when the CPU is writing to the port, but unfortunately the first time the CPU writes to the port it writes a wrong value &lt;code&gt;01011001&lt;/code&gt;. When the CPU jumps back and repeats the process it does output the correct number while writing. When I changed my power supply it outputs random fluctuating values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is that normal? I tried with registers A, B, and C three of them while outputting they output wrong values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Concerning my EEPROM Programmer, I checked it and it does write data correctly. I verified each byte of data the first time I tested it. The data bus outputs the same data I burned the EEPROM with so my programmer isn't to blame. The CPU I got is actually quite old it was manufactured in 1989 but it does execute opcodes like NOP or HALT so I don't think the CPU is not working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a diagram of the values shown on LEDs&lt;/p&gt;&#xA;&#xA;&lt;p&gt;WR, RD are active low&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data-bus readings are taken each RD or WR tick (being low)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://photos.app.goo.gl/gi54N7jx27ZerMXy9&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is a link to a Google Photos video.&lt;/a&gt;&#xA;(See the comment on the video for identifying the LEDs)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Results:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; _______________________________________&#xA;| D7 D6 D5 D4 D3 D2 D1 D0 HEX | WR | RD |&#xA;|_______________________________________|&#xA;| 0  0  1  1  1  1  1  0  3E  | 1  | 0  |          &#xA;|_______________________________________|&#xA;| 0  1  0  1  0  1  0  1  55  | 1  | 0  |&#xA;|_______________________________________|          &#xA;| 1  1  0  1  0  0  1  1  D3  | 1  | 0  |&#xA;|_______________________________________|          &#xA;| 0  0  0  0  0  0  0  0  00  | 1  | 0  |&#xA;|_______________________________________|          &#xA;| 0  1  0  1  1  0  0  1  59  | 0  | 1  |&#xA;|_______________________________________|          &#xA;| 1  1  0  0  0  0  1  1  C3  | 1  | 0  |&#xA;|_______________________________________|        &#xA;| 0  0  0  0  0  0  0  0  00  | 1  | 0  |&#xA;|_______________________________________|          &#xA;| 0  0  0  0  0  0  0  0  00  | 1  | 0  |&#xA;|_______________________________________|   &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So does anyone knows why this is happening? When outputting the registers why is the wrong value outputted?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have noticed that after a couple of tries with different power supplies, that the pattern written is changed so it is not only &lt;code&gt;01011001&lt;/code&gt; but sometimes some random value. I thought maybe the instruction didn't reach the CPU or due to lose wires yet to be sure from that the LEDs I take readings from are connected at the same connections for each digital pin in the CPU so LED won't turn on or off except if that digital pin on the CPU is turned on or off correspondingly. At the beginning I didn't have any capacitors or anything in my circuit for decoupling so maybe this is the problem? I remember that when working with an ATMega328p MCU I should put I think a 100 nano-farad capacitor between GND and VCC as close as possible to the MCU so I tried that solution with the Z80 but all what happened is the pattern is changed and sometimes the WR and IOREQ becomes active without writing anything to the data-bus, so does anyone have suggestions? I already:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;pulled-up all CPU control signals (RESET, WAIT, INT, NMI, BUSRQ) to &#xA;prevent them from floating&lt;/li&gt;&#xA;&lt;li&gt;Tried both Green LEDs and Red LEDs both connected to 10Kohm resistors (Red LED drained only 0.341 mA - so the LEDs won't effect this?)&lt;/li&gt;&#xA;&lt;li&gt;Tried using a cheap 5V power supply and an original 5V phone charger&lt;/li&gt;&#xA;&lt;li&gt;Connect the Z80 to a 7.164 Hz clock generated from a 555 timer (tried slower speeds, it also fails)&lt;/li&gt;&#xA;&lt;li&gt;lastly tried hooking decoupling capacitors as near to the CPU as possible and as far as possible and all values I found affecting and different kinds (100nF cermaic, 0.1uF or 1uF electrolytic)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is there anything missing that could affect these types of instructions specifically?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NWRvq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NWRvq.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the CPU details, hooked to the EEPROM and the 555 Timer for generating 7Hz clock signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pzKoq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pzKoq.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my full setup.&lt;/p&gt;&#xA;" OwnerUserId="18356" LastEditorUserId="13845" LastEditDate="2020-06-09T19:02:53.090" LastActivityDate="2020-06-09T23:12:57.680" Title="Why when outputting registers' value the result is a wrong fluctuating value in a Z80 CPU?" Tags="&lt;z80&gt;&lt;registers&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15130" PostTypeId="1" CreationDate="2020-06-08T19:01:33.043" Score="21" ViewCount="3421" Body="&lt;p&gt;I have several printouts from what is presumably a dot-matrix printer, dated 1987. When zoomed in on these, you see the usual stair-step patterns on diagonal lines. However, it's difficult to determine exactly where the individual pixels of the monochrome image lie... part of this is the tendency for the ink to bleed into cheap paper, littering the edges with splotches and so forth. This alone can't account for some of the problems I've had trying to restore an original raster of the image... the width and height of features don't appear to be multiples of some common factor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, my understanding of the mechanism that a dot-matrix printer uses for printing is that there will be a single vertical row of pins, and then a stepper motor moves that array horizontally across the paper. Unless great care was taken in the engineering of the mechanism, there's no reason to expect that the distance between the pins vertically would equal the shortest distance the array can be moved horizontally. There's also no reason to expect that the horizontal movement would be a minimum of the width of a pin... overlaps might be possible (speculation on my part, I don't know if this was ever offered, or what the point would be).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what shapes would these pins be? Were they square or round? Would they ever be wider than tall (or taller than wide)? Did the mechanism make overlapping of the individual pixels a possible, and in what circumstances did that occur? What number of pins were available commercially? (I seem to vaguely remember seeing ads for 9pin and something higher in the 20s&gt;)&lt;/p&gt;&#xA;" OwnerUserId="4208" LastActivityDate="2021-03-07T13:31:15.563" Title="Typical dpi of dot matrix printers available in the 1980s" Tags="&lt;graphics&gt;&lt;printer&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15131" PostTypeId="2" ParentId="15130" CreationDate="2020-06-08T19:11:44.747" Score="40" Body="&lt;p&gt;The Epson MX-80, upon which many other printers were based, had nine round pins which were vertically spaced at 1/72&quot; intervals.  On such printers, the print head could generally move at two speeds, one twice the other.  At high speed, a printer could place dots at 120dpi resolution, but could not strike two adjacent dots.  At low speed, the resolution was doubled.  The MX-80 graphics commands were limited to using the top 8 pins, and only allowed software to specify every other dot (yielding 1/60&quot; resolution or 1/120&quot; resolution) but text mode would exploit the full resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vertical paper motion was controlled in increments of 1/216&quot;, so software that wanted to print three passes could achieve 216dpi resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some other printer mechanisms were more limited.  The Seikoshia mechanism upon which Commodore's printer was based had only one horizontal speed and was limited to 60dpi horizontally for both text and graphics.  The Commodore printer offered no means of achieving better than 72dpi vertically, and I don't think any other printers offered such means either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Apple ImageWriter had a vertical stack of 72dpi pins, but its common graphics modes were either 72 or 144dpi horizontally, and it could advance the paper in multiples of 1/144&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most 24 pin printers used a basic resolution both horizontally and vertically of 1/180&quot;, which could with multiple pass printing be used to produce 360dpi.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="10666" LastEditDate="2020-06-08T20:08:18.707" LastActivityDate="2020-06-08T20:08:18.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15132" PostTypeId="2" ParentId="15130" CreationDate="2020-06-08T20:49:39.793" Score="24" Body="&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Typical dpi of dot matrix printers available in the 1980s&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Horizontal:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;60, 72, 80, 90, 120, 240 and 360 dpi&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Vertical:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;72 dpi for 8/9 pin and&lt;/li&gt;&#xA;&lt;li&gt;120 dpi for 12/24 pin printers.&lt;/li&gt;&#xA;&lt;li&gt;Multiples thereof by printing a line twice.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, it's difficult to determine exactly where the individual pixels of the monochrome image lie...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which of course is intended, after all, they should give letters, not dot-clouds.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This alone can't account for some of the problems I've had trying to restore an original raster of the image... the width and height of features don't appear to be multiples of some common factor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They rarely are as the horizontal resolution is not defined by pin distance but timing. Of course, 'square' resolutions were offered to simplify bitmap graphics. Usually 72 dpi.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Now, my understanding of the mechanism that a dot-matrix printer uses for printing is that there will be a single vertical row of pins,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;True for some, but others, like the excellent 24 pin NEC P6/7 used multiple columns (two in case of the NEC). Each moved a bit, so they could print in high resolution and part overlapping without running twice over the same line.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and then a stepper motor moves that array horizontally across the paper. Unless great care was taken in the engineering of the mechanism, there's no reason to expect that the distance between the pins vertically would equal the shortest distance the array can be moved horizontally.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. The printer does not move a minimal distance, stops and then prints, but moves continuous, only stopping when there is no more (buffered) data. To generate different DPI the head is simply moved at different speeds. Thus horizontal resolution is mostly a software thing (*1).&lt;/p&gt;&#xA;&lt;p&gt;For example the quite successful (since cheap and good) STAR LC-10 of the mid 1980s used a 9 pin head with a vertical pitch of 72 DPI, but offered horizontal resolutions of 60, 72, 80, 90, 120 and 240 DPI. The increased resolution was achieved by moving the head at different speed (*2), so for 120 dpi the head simply moved half as fast than at 60, and again half of that for 240.&lt;/p&gt;&#xA;&lt;p&gt;The NEC P6 offered similar resolutions up to 360 dpi - so technically on par or even better than laser printers at the time.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There's also no reason to expect that the horizontal movement would be a minimum of the width of a pin... overlaps might be possible (speculation on my part, I don't know if this was ever offered, or what the point would be).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While the very early ones (70s) simply outputted a 7x5 matrix, higher resolution did become standard during the early 80s. The mentioned LC-10, using a 9-pin head, offered various character sets between 9x9 with next to no overlap - great for fast listings - all the way to 18x23, usually called NLQ or Near Letter Quality. Here the head only printed in one direction and used overlapping not only horizontally due slow movement, but as well vertically by advancing for only half a pin height (1/144 inch).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So, what shapes would these pins be? Were they square or round?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Most often round or close to round, as this gives the best edges. Especially early on. Having a round pin gives better movement and less need for fine details manufacturing the head. A round hole is the most simple one to drill.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Would they ever be wider than tall (or taller than wide)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, there were rectangularish (horizontal wider) ones as well, as this ends up giving a better picture to thin vertical lines, while at the same time blending in well on overlapping dots.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did the mechanism make overlapping of the individual pixels a possible, and in what circumstances did that occur?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As said, horizontal overlapping was easily done by reducing print head speed. So this could be done even early on and with quite cheap mechanics.&lt;/p&gt;&#xA;&lt;p&gt;Vertical overlapping needed a good paper transport, or a print head with overlapping columns of pins. Either way they came rather late and were more expensive due the need for more exact mechanics.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What number of pins were available commercially?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Anything from 7 pin with the original &lt;a href=&quot;https://en.wikipedia.org/wiki/Centronics#Centronics_101&quot; rel=&quot;noreferrer&quot;&gt;Centronics 101&lt;/a&gt; of 1970 to 36 pin ones in the late 1980s. Sizes I remember are 7, 8, 9, 12, 18, 24, 36.&lt;/p&gt;&#xA;&lt;p&gt;Most common during the early 1980s were 8/9 pin, some with double printing for effective 16/18 line charsets, like the quite successful Epson MX-80/100 (*3) and the later Star LC-10 - some in use up today. During the mid to late 80s 24 pin printers like the NEC P6/P7 became quite popular around the world as replacement (or cheaper alternative) to type head printers.&lt;/p&gt;&#xA;&lt;p&gt;While high count pin printers were successful in Europe and the US, their true home was Japan, as high resolution is mandatory to print their finely detailed glyphs. Thus printers with up to 36 pins were created and sold in good numbers, but rarely seen outside Asia.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long Story Short:&lt;/h2&gt;&#xA;&lt;p&gt;The question sounds as if you're working on a look-alike emulation for some old printer. To close in you may need at least a manual of the printer used with hardware specifications and modes offered. Using this and round dots (with some blurring) will get you close.&lt;/p&gt;&#xA;&lt;p&gt;For more detail you may need to acquire a printer (or at least the print head) to check the pin shape, orientation and exact measures. This will get you close to a perfect cleanroom emulation.&lt;/p&gt;&#xA;&lt;p&gt;Next would be to make it lousy again. After all, these pins did not really fire in sync. Due basic component variance (there are coils and analogue amplifiers) but as well rust and component aging, fire time will vary, giving the very common sight (back then) of having a single line moved a bit to the left or right.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Embedded that is, as only very few printers allowed to fine regulate the head movement via host commands.&lt;/p&gt;&#xA;&lt;p&gt;*2 - To be correct, this is not entirely true, as the 72 and 80 dpi resolution was done at the same speed as 90 dpi, but with slower firing.&lt;/p&gt;&#xA;&lt;p&gt;*3 - I wouldn't be surprised if the MX-80 is the most OEM'ed device ever. Even IBM rebadged it as 5152 for the IBM-PC (5150).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-06-09T08:18:39.257" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="15133" PostTypeId="2" ParentId="15130" CreationDate="2020-06-08T22:56:55.450" Score="9" Body="&lt;p&gt;As a condensed answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a 9-pin printer (the cheaper kind), the physical pins might make a dot approximately one point (1/72&quot;) in diameter.  The dots could be placed at 120dpi density and 1/240&quot; precision horizontally, and (by three-pass printing) at 1/216&quot; density and precision vertically.  Graphics printing normally used only 8 of the pins; the ninth was provided primarily for printing text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fastest printing mode made only one pass per line and used horizontal dot density of just 60dpi.  It was known as &quot;draft mode&quot; due to the low resulting quality of the print, and the correspondingly low consumption of time and ink.  In this mode the individual dots should be discernible on the page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more expensive 24-pin printers used smaller pins, more closely spaced, for a higher-quality print.  I think the individual dots might be about 1/120&quot; diameter, while high-quality multi-pass printing could achieve 360dpi density.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above figures reflect relatively late models of printer, but still within the 1980s.  Early models might not have been able to achieve the highest quality modes.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-06-08T22:56:55.450" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15134" PostTypeId="2" ParentId="15129" CreationDate="2020-06-08T23:47:50.477" Score="11" Body="&lt;p&gt;I/O port data should be latched by the I/O device on the rising edge of /WR signal. On the falling edge, the only thing that is stable is the I/O port address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: just noticed you said you are clocking your Z80 at 7 Hz. By the picture you have posted, you are using a NMOS Z80 (Z0840004PSC. CMOS Z80s start with Z084C.....). These cannot work below the minimum clock frequency stated in its datasheet:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XDfYJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XDfYJ.png&quot; alt=&quot;Z80 clock specification&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The maximum allowable period is determined by equation (12), which yields 202.6 us, or about 5 kHz. At 7 Hz, the device will behave in unexpected manners, or won't work at all.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2020-06-09T23:12:57.680" LastActivityDate="2020-06-09T23:12:57.680" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15135" PostTypeId="1" CreationDate="2020-06-09T05:25:11.303" Score="1" ViewCount="388" Body="&lt;p&gt;I'm trying to create some graphics function for a ZX Spectrum (Z80) machine in assembler. I already have the basics except for the arc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that there must be some way to draw an arc using the Bresenham's circle algorithm but I'm unable to find concrete info about it, there are sentences like &quot;set the pixels only if they fall into the wanted interval&quot; but I have no clue on how to determine if the pixels fall within it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As data I have the circle's center and radius and the start and end points of the arc in the circle, I only miss how to determine if a pixel lies in the arc, if the algorithm were completely linear (start at 0º and sweep to 360º) it would be easy to do not draw until the start point is reached and then continue drawing until the last point is reached, but the Bresenham's algorithm is drawn in octants simultaneously so I have no idea on how to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not tied to anything so any other algorithm would be welcome, no need to be specifically for the spectrum, just any assembler algorithm to draw an arc will be enough, even if I need different info (like the three point arc algorithm).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers.&lt;/p&gt;&#xA;" OwnerUserId="17843" LastActivityDate="2020-06-09T05:53:51.540" Title="Using Bresenham's circle algorithm (or another alternative algorithm) to draw an arc" Tags="&lt;graphics&gt;&lt;z80&gt;&lt;assembly&gt;&lt;zx-spectrum&gt;" AnswerCount="1" CommentCount="20" FavoriteCount="1" ClosedDate="2020-06-09T08:33:03.927" ContentLicense="CC BY-SA 4.0" />
  <row Id="15136" PostTypeId="2" ParentId="15135" CreationDate="2020-06-09T05:53:51.540" Score="1" Body="&lt;p&gt;There might be many options, but you need to calculate if you should draw a pixel or not. When you define an arc say from 10 to 100 degrees, you have two endpoints that lie on a circle. Based on radius and angle, you can calculate the X and Y coordinates of these two endpoints. You can imagine drawing a line between these two points, and if the circle pixel is above the line, the pixels get drawn, otherwise they are not. So whe you draw the circle with Breseham's you get X,Y coordinates and for the X you calculate the Y coordinate of the line and if Y of arc is &gt;= Y of line then plot.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-06-09T05:53:51.540" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15137" PostTypeId="1" AcceptedAnswerId="15148" CreationDate="2020-06-09T14:57:28.060" Score="32" ViewCount="4797" Body="&lt;p&gt;In my experience, just about every single MS-DOS (and thus Windows &lt;code&gt;cmd&lt;/code&gt;) batch file starts with the line &lt;code&gt;@echo off&lt;/code&gt;, to silently switch off echoing of the commands in the batch file to the console. This seems unnecessarily noisy, and raises the title question: why not have &lt;code&gt;echo&lt;/code&gt; default to &lt;code&gt;off&lt;/code&gt; within batch scripts?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've searched around a bit, but haven't come across anything that's directly shed light on this. It seems likely that &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12648/3919&quot;&gt;this answer&lt;/a&gt; touches on some of the factors leading to this decision, but by my read doesn't answer this question directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The one thing I can think of emerges as a consequence of the following snip from the &lt;a href=&quot;https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/echo#remarks&quot; rel=&quot;noreferrer&quot;&gt;Microsoft docs&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;After &lt;strong&gt;echo&lt;/strong&gt; is turned off, the command prompt doesn't appear in the Command Prompt window. To display the command prompt, type &lt;strong&gt;echo on&lt;/strong&gt;.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I could see it being the case that the early MS-DOS interpreters didn't have any particular way of determining the scope of the commands they were executing; in other words, they couldn't tell whether they were running directly-typed console commands or commands from a batch file, and thus the &lt;code&gt;echo&lt;/code&gt; setting was effectively (or actually) global. Thus, since most of the time(?) users &lt;em&gt;would&lt;/em&gt; want the prompt to be displayed at the console, &lt;code&gt;echo on&lt;/code&gt; became the sensible default....and, from there, perhaps Microsoft just grandfathered the &lt;code&gt;echo on&lt;/code&gt; default to retain backward compatibility? I have no idea if this actually had anything to do with it, though.&lt;/p&gt;&#xA;" OwnerUserId="3919" LastActivityDate="2020-06-10T14:44:20.020" Title="Why was 'echo on' chosen as the default setting within batch scripts in MS-DOS?" Tags="&lt;history&gt;&lt;ms-dos&gt;&lt;shell&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15138" PostTypeId="2" ParentId="15137" CreationDate="2020-06-09T15:11:04.117" Score="14" Body="&lt;p&gt;The choice for the default is between seeing what's going on and not seeing what's going on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, should each command line of a batch file be shown as it's executed or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems reasonable to show them to assist in debugging, rather than hide them until you know the command in the manual that turns it on. This was in the days of reading the manual, if you had one, or asking someone who knew, if you had them to ask. No internet for further information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In modern systems, the default is usually a 'verbose' tell-me-more mode for prompts as suchlike, with an option sometimes to select reduced/no prompts for experienced users.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastActivityDate="2020-06-09T15:11:04.117" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15139" PostTypeId="2" ParentId="15137" CreationDate="2020-06-09T15:17:25.773" Score="6" Body="&lt;p&gt;In most cases, having commands echo to the console was harmless, and helped provide a form of progress indicator for whatever task the batch file was performing.  The only times that such echo would be problematic would be when the batch file was trying to format a screen layout for itself.  Having a screen look like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A&amp;gt;echo Please type one of the following commands:&#xA;Please type one of the following commands:&#xA;&#xA;A&amp;gt;echo WOOZLE -- Run the Woozle program&#xA;WOOZLE -- Run the Woozle program&#xA;&#xA;A&amp;gt;echo FNORBLE -- Do an inventory of the Fnorbles on your system&#xA;FNORBLE -- Do an inventory of the Fnorbles on your system&#xA;&#xA;etc.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Although a batch file could include messages within a batch file preceded by REM and output them with echo on, some people might have their prompt set to something that's rather long, or even has multiple lines, and trying to predict how to format things meaningfully could be difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, having echo on by default wasn't objectionable.  In fact, until the introduction of DOS 3.0 it wasn't possible to suppress the display of the first command in a batch file, so the execution of batch files that were supposed to display messages would often start with something like &lt;code&gt;A&amp;gt;ECHO OFF&lt;/code&gt;, but that wasn't a particular problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that while there are some kinds of batch files that routinely start with &lt;code&gt;@echo off&lt;/code&gt;, there were many users who ran their own batch files much more often than those from externally-produced software, and would seldom have reason to disable echo.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-06-09T15:17:25.773" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15140" PostTypeId="2" ParentId="15129" CreationDate="2020-06-09T15:34:44.587" Score="5" Body="&lt;p&gt;It's possible that on the CPU you have the program counter (PC) and internal status register (for &lt;code&gt;HALT&lt;/code&gt;) are implemented using static latches (SRAM) whereas, e.g. the bus drivers are using dynamic RAM (with no refresh).  That would explain why instructions that only depend on the PC (&lt;code&gt;NOP&lt;/code&gt;, &lt;code&gt;JP&lt;/code&gt;) or status register (&lt;code&gt;HALT&lt;/code&gt;) work properly but &lt;code&gt;OUT&lt;/code&gt; instructions fail (and in an inconsistent manner).  For a fully-static CPU all registers and internal buffers would use SRAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd suggest substantially increasing the clock rate (&gt;250 kHz, as mentioned by @lvd).  I don't know what you're using for a clock signal but &#xA;you mentioned using an ATMega328p in the past; that chip could probably be programmed to generate an appropriate high-frequency clock signal for the Z80.  In addition I'd place an 8-bit latch on the data lines.  Something like a 74573 with some glue circuitry between the /WR and /LE pins would probably suffice (I'm sure there are reference designs readily available on the 'net).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively you could use a loop (or nested set of loops) to keep the LEDs on the data bus lit for more than a single bus cycle (albeit with a lot of flicker).&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2020-06-09T21:37:30.540" LastActivityDate="2020-06-09T21:37:30.540" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15141" PostTypeId="2" ParentId="15137" CreationDate="2020-06-09T15:35:46.390" Score="41" Body="&lt;p&gt;&lt;code&gt;ECHO ON&lt;/code&gt; was chosen as the default setting when interpreting batch files to preserve backwards compatibility. In PC-DOS 1.0, &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v1.25/source/COMMAND.ASM#L739&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;COMMAND.COM&lt;/code&gt; displayed each command as it interpreted it&lt;/a&gt;, and this couldn’t be disabled. &lt;code&gt;ECHO&lt;/code&gt; was added in PC/MS-DOS 2.0, with a dual purpose (displaying messages, and controlling the display of batch file commands); &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/80ab2fddfdf30f09f0a0a637654cbb3cd5c7baa6/v2.0/source/RDATA.ASM#L144&quot; rel=&quot;noreferrer&quot;&gt;its default is &lt;code&gt;ON&lt;/code&gt;&lt;/a&gt; so that the behaviour of batch files written for DOS 1.0 doesn’t change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for why DOS 1.0 displayed each command as it interpreted it, a number of reasons spring to mind:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;as &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/1912/john-e&quot;&gt;john_e&lt;/a&gt; pointed out, &lt;a href=&quot;https://github.com/brouhaha/cpm22/blob/master/ccp.asm#L308&quot; rel=&quot;noreferrer&quot;&gt;CP/M 2.2 behaved in the same way&lt;/a&gt;, so this could be “backwards compatibility” taken a step further (or familiarity with CP/M, or any other shell with similar behaviour, driving design decisions);&lt;/li&gt;&#xA;&lt;li&gt;the behaviour remains similar to that seen when entering commands one at a time — users see the prompt, the command, and whatever it outputs;&lt;/li&gt;&#xA;&lt;li&gt;when using parameters, the user would see exactly how the parameters were applied, which would help understand this potentially unfamiliar new feature.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://archive.org/details/bitsavers_ibmpcdos61_7006095/page/n63/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;page 3-18 of the PC-DOS 1.0 manual&lt;/a&gt; for an example of the latter: the manual describes a batch file, &lt;code&gt;ASMFILE.BAT&lt;/code&gt; containing&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Copy %1.MAC %2.MAC&#xA;Type %2.PRN&#xA;Type %0.BAT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the user would then see the substitutions, as illustrated:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ASMFILE A:PROG1 B:PROG2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would show&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A&amp;gt;Copy A:PROG1.MAC B:PROG2.MAC&#xA;A&amp;gt;Type B:PROG2.PRN&#xA;A&amp;gt;Type ASMFILE.BAT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and their results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;@&lt;/code&gt; was added in &lt;a href=&quot;https://www.pcjs.org/documents/books/mspl13/msdos/encyclopedia/appendix-a/&quot; rel=&quot;noreferrer&quot;&gt;version 3.3&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-06-10T07:08:58.837" LastActivityDate="2020-06-10T07:08:58.837" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15142" PostTypeId="1" AcceptedAnswerId="15143" CreationDate="2020-06-09T15:43:18.293" Score="1" ViewCount="130" Body="&lt;p&gt;I have a .zbd file from my military service with sensitive information on it from 2004.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have downloaded the ZoomBrowser from Canon, it does not recognize it as a file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I downloaded the Zebedee Secure Tunnel, but that just creates a tunnel, and is not a file viewer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have downloaded a number of free file viewers, but none seem to open this file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any assistance you could give is immensely appreciated.&lt;/p&gt;&#xA;" OwnerUserId="18456" LastActivityDate="2020-06-09T19:31:45.953" Title="Opening a .zbd file" Tags="&lt;file-format&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15143" PostTypeId="2" ParentId="15142" CreationDate="2020-06-09T19:31:45.953" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://fileinfo.com/extension/zdb&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://fileinfo.com/extension/zdb&lt;/a&gt; says &#xA;File Type 2 EPSQ Database&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with description: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Encrypted file format used by the U.S. military and Department of Defense for Electronic Personal Security Questionnaire (EPSQ) documents; most often used for the Standard Form (SF) 86 Questionnaire, which is used by military personnel, government employees, and government contractors to apply for a Security Clearance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That seems like what you're looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to this site and several like it there's a Windows program &quot;DoD EPSQ&quot; that can read this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://dmna.ny.gov/arng/ocs/epsq_directions.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://dmna.ny.gov/arng/ocs/epsq_directions.pdf&lt;/a&gt; that software can be downloaded from &lt;a href=&quot;https://sclient.dss.mil/download/w95nt.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sclient.dss.mil/download/w95nt.htm&lt;/a&gt;, but that website no longer exists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another person had a similar question here: &lt;a href=&quot;https://www.airwarriors.com/community/threads/looking-for-the-epsq-software.34223/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.airwarriors.com/community/threads/looking-for-the-epsq-software.34223/&lt;/a&gt;&#xA;but not sure if the linked dropbox file is correct (or safe).&#xA;Good luck.&lt;/p&gt;&#xA;" OwnerUserId="18457" LastActivityDate="2020-06-09T19:31:45.953" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15144" PostTypeId="1" AcceptedAnswerId="15147" CreationDate="2020-06-10T08:57:47.297" Score="30" ViewCount="4311" Body="&lt;p&gt;In &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15131/6527&quot;&gt;the answer to another question about printers&lt;/a&gt;, the following claim is made about 9-pin printers:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Epson MX-80, upon which many other printers were based, had nine round pins which were vertically spaced at 1/72&quot; intervals… The MX-80 graphics commands were limited to using the top 8 pins, and only allowed software to specify every other dot (yielding 1/60&quot; resolution or 1/120&quot; resolution) but text mode would exploit the full resolution.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Reading this was a huge a-ha moment for me, as I finally understood why the cheap Epson-compatible printer I used in the 1980s (a &lt;a href=&quot;https://spectrumcomputing.co.uk/index.php?cat=94&amp;amp;id=1000707&quot; rel=&quot;noreferrer&quot;&gt;Smith-Corona Fastext 80&lt;/a&gt;) always left horizontal gaps at regular intervals when printing graphics.  It annoyed me to no end that all the solid areas and lines in the images I printed got broken up like this!  Below is an example of what I'm talking about—this is a scan of a real graphic that I produced using &lt;a href=&quot;https://www.c64-wiki.com/wiki/Doodle&quot; rel=&quot;noreferrer&quot;&gt;Doodle&lt;/a&gt; on my Commodore 64 in 1987.  (I copped the Garfield cartoon from somewhere but added the journal he's holding to promote our class newspaper.)   Unfortunately the scan isn't of great quality (and is of a photocopied image rather than the original printout) but you can make out the gaps in some places, and particularly in the area I've highlighted and magnified.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B68pr.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B68pr.png&quot; alt=&quot;A scan of a printout from a Smith-Corona Fastext 80 showing a cartoon image of Garfield the cat holding a newspaper. The solid black lines making up the image are broken at regular intervals by white horizontal gaps.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I assume now that these horizontal gaps are a result of the printer using only the top 8 of its 9 pins, but advancing the paper roll the height of the full 9 pins after every printed line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is this: &lt;em&gt;Why&lt;/em&gt; did the Epson MX-80 and its descendants not use the full 9 pins to print graphics?  Was there some technical reason why this was not possible or desirable?  (And were any of those printers smart enough to advance the paper roll by the height of 8 pins rather than 9 when printing graphics, thus avoiding those ugly gaps?)&lt;/p&gt;&#xA;" OwnerUserId="6527" LastActivityDate="2021-03-05T16:25:15.370" Title="Why did many 9-pin printers use only 8 pins for graphics?" Tags="&lt;graphics&gt;&lt;printer&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15145" PostTypeId="1" CreationDate="2020-06-10T09:43:23.293" Score="3" ViewCount="250" Body="&lt;p&gt;If I try to start the first version of the game Karateka for Apple IIe on an Apple IIc, the Apple IIc will restart after reading the game from disk after a few seconds. Later versions of Karateka for Apple IIc will work. What is the bug in the first version that caused it not to work with Apple IIc?&lt;/p&gt;&#xA;" OwnerUserId="18369" LastEditorUserId="15334" LastEditDate="2021-01-19T10:15:42.577" LastActivityDate="2021-01-19T10:15:42.577" Title="What bug in first version of game Karateka for Apple 2e cause this game reset in Apple 2c?" Tags="&lt;apple-ii&gt;&lt;8-bit-microcomputers&gt;&lt;bugs&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15146" PostTypeId="2" ParentId="15144" CreationDate="2020-06-10T10:05:40.837" Score="14" Body="&lt;p&gt;There would be no technical reason to not use all nine pins, but it doesn't really help either. Remember that the computer speaks to it using 8-bit bytes. Sending 9-bit wide data requires buffering and/or other relatively expensive processing to do the 9-to-8 conversion and back. The upside would be that printing 9 pixels wide would be 12.5% faster than 8 pixels wide, but presumably the processing costs outweigh this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it would not solve the banding problem. On a new printer, banding is caused by minor imperfections in the platen-moving mechanism and so the paper isn't always moved up to align the top of the current line with the bottom of the previous line, leaving an occasional gap. (You are much less likely to notice when it errs the other way and the lines slightly overlap.) On an older printer, banding also comes from the ribbon being worn unevenly, or even because one of the pins has broken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modern inkjet printers suffer the same sort of problems: printing in character-tall lines using cheap plastic gears and ink nozzles prone to clogging. Want a retro angle? The BJ10 is thirty years old.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2020-06-10T10:05:40.837" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15147" PostTypeId="2" ParentId="15144" CreationDate="2020-06-10T10:35:33.760" Score="32" Body="&lt;p&gt;First, it may be good to know that the MX-80 did not feature a bitmap mode for graphics, but only 64 symbols. The MX-80 also used 7 bit encoding, so no room for 8 bit graphic data. It was the MX-80 Type II that included it. So while the name is used simply as MX-80, it's always the MX-80 Type II we're talking.&lt;/p&gt;&#xA;&lt;p&gt;Second, Just because some printer looked alike, doesn't mean it understood the commands equally well - or it's mechanic had the same quality.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So I assume now that these horizontal gaps are a result of the printer using only the top 8 of its 9 pins, but advancing the paper roll the height of the full 9 pins after every printed line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Right... err ... at least basically.&lt;/p&gt;&#xA;&lt;p&gt;If that was the reason, and if it was constant, it's most likely not the fault of the printer, but a wrong command to advance the paper (&lt;KBD&gt;ESC&lt;/KBD&gt;+&lt;KBD&gt;A&lt;/KBD&gt;).&lt;/p&gt;&#xA;&lt;p&gt;But looking at the picture included, the gaps seam to be less than a pixel height. So it may not have been a wrong command, but simply less than desirable mechanics, always leaving a little gap. This is known from many printers, including genuine Epson MX-80. It doesn't make a big difference for text (especially if always about the same), but comes up in graphics.&lt;/p&gt;&#xA;&lt;p&gt;These 'modulations' were simply part of bitmap graphics around 1980. Although, printers did advance (*1)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why did the Epson MX-80 and its descendants not use the full 9 pins to print graphics?&#xA;Was there some technical reason why this was not possible or desirable?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Simply because it used 8 bit words (bytes) to for data transmission, transferring 9 bit data would have meant doubling the data transmission time amount for 12.5%  faster printing. While this sounds strange from today - or even from the mid 80s, then the MX-80 was made, serial connections with less than 9600 bit/s were standard for printers.&lt;/p&gt;&#xA;&lt;p&gt;Not to mention that it was way more convenient to handle graphic data in 8 bit chunks on computers operating with 8 bit bytes - this includes 'high level part' (*2) of the printer as well, especially for buffering&lt;/p&gt;&#xA;&lt;p&gt;It wasn't until later when connections were by default faster (like in fast parallel interfaces) buffer sizes larger and print speed became a thing (*3). So printers like the 1986 Star LC-10 included a 9 pin mode.&lt;/p&gt;&#xA;&lt;p&gt;With more memory comes more power :))&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And were any of those printers smart enough to advance the paper roll by the height of 8 pins rather than 9 when printing graphics, thus avoiding those ugly gaps?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Already the original MX-80 (Type 1) could set the paper advancement in steps of 1/72 inch, essentially to each needle height. Its mechanics operated in 1/216 inch steps. The Type II inherited this. But here as well, advancement was less than perfect, leaving artifacts. &lt;strong&gt;They are even visible in the &lt;a href=&quot;https://www.manualslib.com/manual/48462/Epson-M-X-8.html?page=83#manual&quot; rel=&quot;nofollow noreferrer&quot;&gt;original Epson manual printing&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bA4P8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bA4P8.png&quot; alt=&quot;Fill examples from Epson MX-80 Type II Manual&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Taken from Epson MX-80 Type II Manual p.83)&lt;/p&gt;&#xA;&lt;p&gt;Long story short: &lt;em&gt;Don't expect a 1965 VW-Beatle show features and performance of a luxury car (or in looking back the one of a 1990 VW Golf)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;You could have bought a &lt;em&gt;way&lt;/em&gt; more expensive printer, or waited 5-8 years for consumer products growing in quality ... or do like you (and we all) did, proudly show the results and live with these tiny, negligible artefacts.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - It's like always, first generation is to fulfill the demand to print / compute / display / type / etc. at all, later generations will (and need to, to compete) improve and add 'luxury' features. The MX-80 is a great example, as it was the second versions that includes more than block graphics. And it took later printers to improve the mechanics to make bitmap look good - the first original one was only meant to make text.&lt;/p&gt;&#xA;&lt;p&gt;*2 - It included two micro-controllers. An 8049 doing over all control as well as data transfer from/to interface, buffering, conversion from ASCII to bitmap and control of the needles and a (slave) 8041 handling the printing mechanic like head and paper advancement.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Like with *1, faster printing is a later improvement - with bitmap only way down the (time) line: printing -&amp;gt; printing bitmap -&amp;gt; printing bitmap without artifacts -&amp;gt; printing bitmap without and fast.&lt;/p&gt;&#xA;&lt;p&gt;BTW, in other areas this sequence was different. For example the Siemens 9003, one of the fastest single head DMP in 1979. Here print quality was given up for speed. It's printouts didn't look great due simple fonts and inaccuracies of bidirectional printing, but it was dammed fast and all in a desktop case... well, desktop only in the sense it needs to be placed on a desk, so not being a stand alone device :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-05T16:25:15.370" LastActivityDate="2021-03-05T16:25:15.370" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15148" PostTypeId="2" ParentId="15137" CreationDate="2020-06-10T14:44:20.020" Score="15" Body="&lt;p&gt;Great stuff on the the MS/PC-DOS and CP/M history in the other answers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd add that batch files come from the heritage (in early DOS, CP/M, and on mainframes and other systems) of script files, intended to save the &quot;console operator&quot; typing and allow them to leave the &quot;console&quot; while the potentially time-consuming steps were being sequentially executed. The on-screen (CRT) or printed log of commands and input entered, and output generated would document what was done, and there would be no reason to hide the command input, whether typed manually or read from the script/batch file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is over time that elements like variables, branching, and finer control over I/O were added to scripting, turning scripts into actual programs. And so it's natural that the default continued to be what made sense for pure scripting, and deviations from that like &lt;code&gt;ECHO OFF&lt;/code&gt; and even the &lt;code&gt;@&lt;/code&gt; in front of it to suppress the actual &lt;code&gt;ECHO OFF&lt;/code&gt; have to be explicit.  &lt;/p&gt;&#xA;" OwnerUserId="18470" LastActivityDate="2020-06-10T14:44:20.020" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15149" PostTypeId="2" ParentId="6006" CreationDate="2020-06-10T15:25:09.923" Score="1" Body="&lt;p&gt;Here are the Serial Numbers for My Z88 (Serial #000169) and that for my Wife's Z88 (Serial #026554).  We bought them at different times, hence the large difference.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/RWT6r.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RWT6r.png&quot; alt=&quot;Serial #000169 of my Z88&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1r0eD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1r0eD.png&quot; alt=&quot;Serial #026554 of my Wife&amp;#39;s Z88&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18471" LastActivityDate="2020-06-10T15:25:09.923" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15150" PostTypeId="2" ParentId="15144" CreationDate="2020-06-10T15:32:20.447" Score="12" Body="&lt;p&gt;EscP2 language did specify a 9-pin mode: &lt;code&gt;ESC ^&lt;/code&gt; but it was not very efficient, a whole byte was needed just to send the 9th pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://files.support.epson.com/pdf/general/escp2ref.pdf&quot; rel=&quot;noreferrer&quot;&gt;Epson reference manual&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2054" LastActivityDate="2020-06-10T15:32:20.447" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15152" PostTypeId="1" AcceptedAnswerId="15157" CreationDate="2020-06-10T20:45:07.810" Score="17" ViewCount="3055" Body="&lt;p&gt;In the 1980's, few people could afford laser printers and other page printers (e.g. inkjets) were not yet affordable. Most had inexpensive dot matrix printers with tractor feeds, such as my own Star Gemini SG-10. These printed text in Portrait mode a line at a time from a small onboard buffer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that time, how did text programs, spreadsheets, and other tabular reporting applications output in Landscape to contemporary dot matrix printers?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="15334" LastEditDate="2020-11-15T11:32:54.543" LastActivityDate="2020-11-15T11:32:54.543" Title="How did dot matrix printers do Landscape?" Tags="&lt;printer&gt;" AnswerCount="4" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15153" PostTypeId="2" ParentId="15152" CreationDate="2020-06-10T20:52:21.683" Score="28" Body="&lt;p&gt;Basically, there were two options: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Do it in hardware:&lt;/strong&gt; Dot matrix printers were available in wide-carriage versions, so they could print A4 landscape / A3 portrait. &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Do it in software:&lt;/strong&gt; Using the printer's bitmap mode, the computer would render the rotated letters in vertical stripes, corresponding to the printer's lines. This doesn't require all that much memory, particularly when using a monospaced font: In theory, you could render just one character, send that to the printer, render the next one, etc. I recall software on the C-64 for doing this, even pre-GEOS (which printed everything in bitmap mode, anyway); but this was more of a novelty until 16 bit machines with GUIs came in and made software rendering the norm. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That being said, the most common solution was probably to stick with a standard (non-wide, portrait mode) printer, and just pick a &lt;strong&gt;narrower font&lt;/strong&gt; on the printer's control panel. On my Star LC-10, &quot;Elite Condensed&quot; would print 20 characters per inch, giving 160 characters per line in portrait mode. &lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-06-11T14:02:08.373" LastActivityDate="2020-06-11T14:02:08.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15154" PostTypeId="2" ParentId="14411" CreationDate="2020-06-10T21:16:39.337" Score="2" Body="&lt;p&gt;I do not have enough points reputation to add a comment to @TeaRex post.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You forgot to mention that in C128 CP/M, the Z80 switches the processor back to the 6502/8502 mode to do the disk fetch from the 1571.  This made CP/M reads and writes very slow, but still usable with apps such as Wordstar.&lt;/p&gt;&#xA;" OwnerUserId="4676" LastActivityDate="2020-06-10T21:16:39.337" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15155" PostTypeId="2" ParentId="15152" CreationDate="2020-06-10T21:21:52.060" Score="13" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;At that time, how did text programs, spreadsheets, and other tabular reporting applications output in Landscape to contemporary dot matrix printers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For businesses that needed wide printouts, it was common to buy a wide carriage (tabulator type) printer. For example, Epson not only sold the MX-80, but also the MX-100 with a wider carriage able to handle up to 15 inch paper, allowing up to 256 characters per line (using a condensed font).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using condensed font was as well up to 132 characters on standard paper, which should be fine for most applications... After all, 132 was also the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7838/why-did-line-printers-have-132-columns&quot;&gt;default format for wide prints&lt;/a&gt; :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this was fine for most users, after all, a table with more than 132 characters is already hard to handle on screen, there was no way around with early software using ASCII output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a printer to turn this on its own into landscape, it would need to store the whole output for a page first and then turn it into a bitmap. This would require a buffer at least large enough to store like 4+ KiB of text plus whatever control characters are needed (all just for ASCII, no graphic borders). So more likely 8 KiB. In addition at least some bitmap line buffer must be present. Consider that the MX-100 had just &lt;em&gt;256 bytes&lt;/em&gt; total buffer. And that was a printer with a price tag close to 800 USD in 1981.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was also no simple way to do it on the host system, as drivers that could do the job were not part of the OS (at the time) but part of each application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nonetheless, some applications did support a few (mainstream) printers during the mid 1980s. But it was a case-by-case issue finding the right combination of program (and fitting computer) and printer. So the average user didn't - and professional users with a certain need simply spent money on wide carriage printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For major packages like Visicalc or Lotus, application-specific extensions were offered. Examples for &lt;em&gt;somewhat&lt;/em&gt; generic solutions are the &quot;sideway option&quot; for &lt;a href=&quot;https://en.wikipedia.org/wiki/Borland_Sidekick&quot; rel=&quot;nofollow noreferrer&quot;&gt;Borland Sidekick&lt;/a&gt;, or the &lt;a href=&quot;https://books.google.co.jp/books?id=d-tPdHcBE9wC&amp;amp;pg=PA98&amp;amp;lpg=PA98&amp;amp;dq=printer-boss%20connecticut%20software&amp;amp;source=bl&amp;amp;ots=-3mU1SKnaO&amp;amp;sig=ACfU3U0H05LDmGJoC3Hd07QzF3G_ea9dMw&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=2ahUKEwjW2-PmlPrpAhUOZMAKHWX0CxQQ6AEwAHoECBkQAQ#v=onepage&amp;amp;q=printer-boss%20connecticut%20software&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Printer-Boss&lt;/a&gt; package from Connecticut Software. They hooked the BIOS printer calls, emulating a certain printer (usually Epson MX-80). Data was collected until einter a 'page' was filled or the buffer overflowed, and then printed. The buffer overflow condition happened usually quite fast, so anything wider than 2-3 pages was at risk of failing.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;It was again an advantage for Apple that the driver structure for MacOS was better placed. Already with the Lisa it was possible to print in either orientation, as printers were only operated as bitmap anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows and GEM offered, a bit later, the same service for PCs.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;It's also useful to keep in mind that early (and somewhat affordable) laser printers also didn't have the memory to hold a full page of bitmap. There several third-party companies built add-ons to allow full page graphics.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4587" LastEditDate="2020-06-12T19:11:28.680" LastActivityDate="2020-06-12T19:11:28.680" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15156" PostTypeId="2" ParentId="15145" CreationDate="2020-06-11T03:03:28.003" Score="3" Body="&lt;p&gt;For the cracked version the problem was identified &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.apple2/pf6Op1J2o3Q/C60xILYq1bIJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;long ago&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have heard that it is only the cracked version of Karateka which has&#xA;  a problem.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The problem is that on every disk access, Karateka takes a copy of the&#xA;  ROM from the Disk II controller card and patches it.  It then uses the&#xA;  patched copy to do the disk I/O.  The resulting code crashes on the&#xA;  IIc and IIgs because the routines in the firmware are in a slightly&#xA;  different location.&#xA;  -- David Empson&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The IIgs problem is with the slot 6 &quot;Disk Port&quot; firmware. The problem will not occur if the slot configuration is set to &quot;Your Card&quot; and a Disk II Interface Card is present.&lt;/p&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2020-06-11T07:22:41.717" LastActivityDate="2020-06-11T07:22:41.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15157" PostTypeId="2" ParentId="15152" CreationDate="2020-06-11T03:44:18.963" Score="20" Body="&lt;p&gt;For the PC there was a specific program called, I believe, &lt;em&gt;Sideways&lt;/em&gt; that did exactly this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was targeted mostly towards spreadsheets (at least that's how I saw it most used). As I recall it essentially rendered the text output in to a graphic that was rotated 90 degrees, and then printed.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/7vaLb.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7vaLb.jpg&quot; alt=&quot;Sideways ad&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="4335" LastEditDate="2020-06-11T13:58:13.567" LastActivityDate="2020-06-11T13:58:13.567" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15158" PostTypeId="1" CreationDate="2020-06-11T04:00:17.620" Score="4" ViewCount="504" Body="&lt;p&gt;Core has some interesting properties (nonvolatility, high reliability, resilient to radiation) that might make it useful in some situations.  I know early versions of the computers on the Space Shuttle used it for some of those reasons, but even the Space Shuttle is nearly half-century-old technology now so it's hardly &quot;contemporary.&quot;&lt;/p&gt;&#xA;" OwnerUserId="18473" LastActivityDate="2020-06-11T21:05:22.623" Title="Aside from legacy systems, are there any contemporary uses for magnetic core memory?" Tags="&lt;hardware&gt;&lt;memory&gt;" AnswerCount="2" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15159" PostTypeId="1" AcceptedAnswerId="15160" CreationDate="2020-06-11T04:14:40.503" Score="1" ViewCount="131" Body="&lt;p&gt;Back in the 1990's many vendors sold those cheap nine piece kits that held, among other things, two Philips screwdrivers: #1 and #2, a couple of flat head screwdrivers, and a pair of hex nut drivers.  For me, the most common use of these last two was screwing the standoffs into the bottom of the case to mount the motherboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What sizes were these two, because among the entire collection of bits I have for my electric screwdriver, I have a complete lack of hex nut drivers.  I've started rebuilding systems out of parts I have, to be given away to charity, and it would be nice to have these two bits added to my collection.&lt;/p&gt;&#xA;" OwnerUserId="5272" LastActivityDate="2020-06-11T05:24:07.640" Title="What are the sizes of the hex nut drivers in the classic &quot;nine piece&quot; computer toolkit" Tags="&lt;case&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2020-06-12T09:40:05.360" ContentLicense="CC BY-SA 4.0" />
  <row Id="15160" PostTypeId="2" ParentId="15159" CreationDate="2020-06-11T05:24:07.640" Score="6" Body="&lt;p&gt;I believe you are referring to &lt;a href=&quot;https://amzn.to/3f6Ywim&quot; rel=&quot;noreferrer&quot;&gt;one of these&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lTLCD.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lTLCD.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This one is actually an 11-piece. But same basic stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've used &amp;amp; lost quite a few of these over the years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the specs:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Includes Nut driver 1/4 inch / Nut driver 3/16 inch&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which sounds about right. I was sure one was 1/4&quot;. And I was sure they were US sizes rather than metric sizes. The only question in my mind was what the second size was. And the answer is apparently 3/16&quot;.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2020-06-11T05:24:07.640" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15161" PostTypeId="2" ParentId="12779" CreationDate="2020-06-11T06:50:23.220" Score="3" Body="&lt;p&gt;on ZX Spectrum 48K BASIC there are the &lt;code&gt;PEEK&lt;/code&gt; and &lt;code&gt;POKE&lt;/code&gt; commands which allow access to whole RAM/ROM. So any BASIC game can use the additional RAM. The memory map was this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0000h ROM&#xA;4000h VRAM screen &#xA;5800h VRAM attr &#xA;5B00h buffer LP&#xA;5C00h  system variables&#xA;5CB6h  microdrive maps&#xA;CHANS  channels info&#xA;       00h&#xA;PROG   BASIC source code&#xA;VARS   BASIC variables&#xA;       00h&#xA;ELINE  editation line&#xA;       NL&#xA;       00h&#xA;WORKSP input data&#xA;       NL&#xA;       temp workspace&#xA;STKBOT calculator stack&#xA;STKEND free space&#xA;SP     stack&#xA;       GOSUB stack&#xA;       ???&#xA;RAMTOP 3Eh&#xA;UDG    user defined graphics&#xA;P-RAMT end of physical memory&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where all the addresses defined with name instead of hex number are in system variables. As you can see the space after BASIC code is not empty. However you can use some parts if you carefull not to corrupt the BASIC system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most usual stuff that was used from BASIC outside its standard memory range was the UDG. It was few characters in the BASIC font that could be redefined to any graphics. So instead of printing text you could also print sprites or national characters instead however there where just few such characters IIRC 8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was also common to combine asm and BASIC so BASIC puts some user assembly code into free memory above BASIC (be POKE or by loading from tape,floppy,microdrive) and tehn call it time to time using &lt;code&gt;RANDOMIZE USR addr&lt;/code&gt;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want concrete example of BASIC game using RAM above BASIC the first that comes in mind was (CZ): &lt;code&gt;Zedník má žízen&lt;/code&gt; in translation &lt;code&gt;builder has thirst&lt;/code&gt; where you are Builder building a wall and your goal was to collect as many bears along the way as you could before your thirst got you (it gives you energy) but they where not for free so you need to build a wall to earn money too. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zCqIN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zCqIN.png&quot; alt=&quot;Zednik ma zizen&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;here screenshot from game the beers and builder are UDG characters printed by &lt;code&gt;PRINT&lt;/code&gt;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MvNfU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MvNfU.png&quot; alt=&quot;Zednik ma zizen&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2020-06-13T09:01:30.673" LastActivityDate="2020-06-13T09:01:30.673" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15162" PostTypeId="1" AcceptedAnswerId="15166" CreationDate="2020-06-11T06:59:17.960" Score="2" ViewCount="236" Body="&lt;p&gt;If I'm not mistaken, the first webserver simply served all files and directories in a certain local directory (WWWROOT) in the identical hierarchy at a certain domain. This is in line how e.g. an FTP server acts. By contrast, nowadays many websites typically use generated pages served at arbitrary, well-designed points at the directory hierarchy below the domain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When was the first time that the hierarchy presented by the webserver was virtualized like that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I'm not talking so much about dynamically created content. CGI is indeed very old, but it used to be an actual files sitting in an actual location below WWWROOT and you would &quot;call&quot; it by adding that relative location to the domain the webserver was serving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm more talking about the kind of URL schemes that e.g. Django talks about here: &lt;a href=&quot;https://docs.djangoproject.com/en/3.0/topics/http/urls/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.djangoproject.com/en/3.0/topics/http/urls/&lt;/a&gt; : As a part of setting up a website, you think of a URL scheme such that it is easily readable and then the webserver will server the files accordingly. They typically have nothing at all to do with files in a webroot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example, take the URL that is currently displayed in my browser: &lt;a href=&quot;https://retrocomputing.stackexchange.com/posts/15162/edit&quot;&gt;https://retrocomputing.stackexchange.com/posts/15162/edit&lt;/a&gt; Is there somewhere a &quot;15162&quot; directory, containing a &quot;edit&quot; directory, containing an &quot;index.html&quot;? Most probably not. There probably isn't even a &quot;posts&quot; directory and all contents comes from a database, the pages being dynamically created.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is great and gives you a high degree of flexibility, but that could only come about after someone realized: &quot;Hey, I know www.domain.net/dir/file.html currently always serves $WWWROOT/dir/file.html, but in the end it is just a request to which a program (the webserver) needs to give a response which might, but need to be a verbatim copy of a file on disk.&quot; I'm referring to that idea of solving the problem right at the core, the webserver, and not by placeing a CGI script or Java applet somewhere in the directory structure below the webroot and then serving that in a special way.&lt;/p&gt;&#xA;" OwnerUserId="18474" LastEditorUserId="18474" LastEditDate="2020-06-11T14:07:04.383" LastActivityDate="2020-06-11T20:26:20.963" Title="Webservers: When did www.domain.net/dir/file.html first not point to $WWWROOT/dir/file.html but to something virtualized?" Tags="&lt;history&gt;&lt;internet&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15163" PostTypeId="2" ParentId="15162" CreationDate="2020-06-11T08:24:09.997" Score="1" Body="&lt;p&gt;In the early days a webserver did not know or care which hostname it served, it just served files (and optionally allowed for running external CGI scripts as the webserver itself couldn't).  So, a single web root on disk for all hostnames recognized by the underlying host.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the &lt;code&gt;http://xxx/~user&lt;/code&gt; syntax allowed for users to host their own pages in their home directory.  This was naturally dynamically mapped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The need for separate web roots came with the ability to support multiple non-identical hosts by a single web server which was added with HTTP/1.1 (which came out in 1999) - see &lt;a href=&quot;https://en.wikipedia.org/wiki/Virtual_hosting&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Virtual_hosting&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="447" LastEditorUserId="447" LastEditDate="2020-06-11T20:26:20.963" LastActivityDate="2020-06-11T20:26:20.963" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15164" PostTypeId="2" ParentId="12779" CreationDate="2020-06-11T12:11:46.247" Score="3" Body="&lt;p&gt;On the Amstrad CPC machines, the bottom and top of the address space was taken up by the firmware and the Basic ROMs respectively, each taking 16Kb from the 64kb, leaving 32kb for the programs and OS data. However they each shadowed 16KB of RAM. Each ROM could be paged in or out to allow full use of the memory. The setup allowed all writes to RAM, but reads were from ROM or RAM according to the selection. Thus you could read from Basic but write to screen memory at the same time, even though the addresses overlapped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should clarify that this was all specified in the firmware reference from Amstrad (Soft 968) and was standard for programmer not using BASIC: see &lt;a href=&quot;http://www.cpcwiki.eu/imgs/f/f6/S968se02.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;section 2&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;The upper and lower ROMs may be enabled and disabled separately. When the&#xA;upper ROM is enabled data read from addresses between #C000 and #FFFF is&#xA;fetched from the ROM. Similarly, when the lower ROM is enabled data read from&#xA;addresses between #0000 and #3FFF is fetched from the ROM. When the ROMs&#xA;are disabled data is fetched from RAM.&#xA;Note that the ROM state does not affect writing which always changes the contents&#xA;of RAM.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2020-06-14T09:31:50.203" LastActivityDate="2020-06-14T09:31:50.203" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15165" PostTypeId="2" ParentId="12779" CreationDate="2020-06-11T12:25:43.077" Score="2" Body="&lt;p&gt;On the BBC Micro, the operating system has the explicit concept of &quot;language ROMs&quot;, of which BASIC was the most obvious example.  Other &quot;language ROMs&quot; available included word processors and other business software, as well as other programming languages.  Some parts of the memory map were explicitly reserved &quot;for the active language&quot;, while others could be allocated dynamically, and still others were reserved to support operating system functions.  It was a very sophisticated system for an 8-bit micro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, the area from &amp;amp;1900 (PAGE) to &amp;amp;7C00 (HIMEM) exclusive was available to BASIC programs, assuming a machine with floppy drives fitted and in the most frugal display mode.  Switching to the tape filing system allowed reducing PAGE to &amp;E00; selecting a graphics display mode would however reduce HIMEM automatically, perhaps as low as &amp;amp;3000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the 6502, zero-page memory is also important; normally &amp;amp;70-&amp;amp;8F was available to user assembly code without affecting BASIC or other system functions.  This was technically part of the &quot;reserved for language&quot; area, but BASIC guaranteed that it would not use that area, limiting itself to &amp;amp;00-&amp;amp;6F inclusive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A game requiring a lot of RAM could easily supplant BASIC, and thereby use all of the &quot;reserved for language&quot; space as well as all the RAM that BASIC normally allocated (dynamically) to itself.  After the load was complete, the game could also overwrite RAM allocated for the filing system.  Such games would need to reinitialise both the filing system and BASIC on exit; most simply didn't provide this function, and expected the user to reset the machine by pressing BREAK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously these options were not available to a game &lt;em&gt;written in&lt;/em&gt; BASIC.  But most games that needed a lot of RAM were already written in assembler for speed reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few later games took advantage of the expanded capabilities of the BBC Master or even the Master Turbo - but these machines didn't appear until 1986.  On the Master Turbo, the game itself would run in the Second Processor with 62KB RAM available, and also load part of itself into the &quot;host&quot; which was the Master itself.  The best known of the games which could do this was Elite.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-06-11T12:25:43.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15166" PostTypeId="2" ParentId="15162" CreationDate="2020-06-11T15:07:12.900" Score="3" Body="&lt;p&gt;From Writing Apache Modules with Perl and C (Doug MacEachern; Lincoln Stein, 1998, O'Reilly Media, Inc., 1999):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you wanted to extend the functionality of the [CERN httpd] web server -- for example, to hook it up to a bibliographic database of scientific papers -- you had to modify the server's source code and recompile.&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;p&gt;The earliest web API that we know of was built into the Plexus web server, written by Tony Sanders of BSDI. Plexus was a 100 percent pure Perl server that did almost everything that web servers of the time were expected to do. Written entirely in Perl Version 4, Plexus allowed the webmaster to extend the server by adding new source files to be compiled and run on an as-needed basis.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;CERN httpd was first released in 1991.  Plexus was released in early 1993. So it's reasonable to say that 1991 or 1992 someone did modify the CERN httpd to use virtualized URLs.&lt;/p&gt;&#xA;" OwnerUserId="3261" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-06-11T15:07:12.900" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15167" PostTypeId="2" ParentId="15158" CreationDate="2020-06-11T15:48:46.990" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Core has some interesting properties (nonvolatility, high reliability, resilient to radiation) that might make it useful in some situations.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Nonvolatility and high reliability? Not really.&lt;/p&gt;&#xA;&lt;p&gt;Core memory is notorious unreliable. In the early to mid 1970 one &lt;em&gt;non&lt;/em&gt;-correctable error per 32 KiB and month was a good &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4647/core-memory-stability/4650#4650&quot;&gt;rule of thumb&lt;/a&gt;. Mind you, single bits (of a word read) flipped all the time and were corrected in line by ECC.&lt;/p&gt;&#xA;&lt;p&gt;Projected onto today this give a blue screen every 80 seconds per Gigabyte. Of course we could assume increased quality being developed, making it like two or three magnitudes better. That would reduce the BSOD to &lt;em&gt;&amp;quot;only&amp;quot;&lt;/em&gt; one every two hours and Gigabyte. Not really cool either.&lt;/p&gt;&#xA;&lt;p&gt;One has to keep in mind that terms like reliability are always in relation to application. For a computer with several dozend and up to a few hundred KiB, an error per week or few days isn't a big deal. Especially in an environment where the alternative is not being able to do the work (*1) at all.&lt;/p&gt;&#xA;&lt;p&gt;So demise of core memory was for sure not about size or weight - mainframe installations didn't care for either - and as well less of speed (*2), as early semiconductor memory was slower and smaller, but due reliability. Of course, once the decision was taken, semiconductor memory development slowly got an advantage.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I know early versions of the computers on the Space Shuttle used it for some of those reasons,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;AFAIK the Space Shuttle's computer memories were all semiconductor based. Though, there could be some in more specialized equipment.&lt;/p&gt;&#xA;&lt;p&gt;Most important here beside reliability and space is weight. No matter how small the cores may be, any reasonable designed semiconductor memory with sufficient shielding will need less space and weight only a fraction.&lt;/p&gt;&#xA;&lt;p&gt;Equally important, what good is it if the memory is radiation hard without shielding, when all other components of the control system (computer) does need the shielding as well?&lt;/p&gt;&#xA;&lt;p&gt;So either pack everything into nice metal boxes with decouplers and alike on all ports, or use for RAM the same radiation hardened process as or CPU and other components. Or, well, in reality both at the same time.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Aside from legacy systems, are there any contemporary uses for magnetic core memory?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, not for core as it has been used back then - that is little rings and three wires. But don't give up hope, there are some modern (*3) attempts to use magnetic effects for storage.&lt;/p&gt;&#xA;&lt;h2&gt;Bubble&lt;/h2&gt;&#xA;&lt;p&gt;First in line was late 1970s &lt;strong&gt;Bubble memory&lt;/strong&gt;. A great idea, but it never scaled to anything useful beside nice applications - were military and space was one - so essentially a dead end.&lt;/p&gt;&#xA;&lt;h2&gt;MRAM&lt;/h2&gt;&#xA;&lt;p&gt;During the late 1990s &lt;a href=&quot;https://en.wikipedia.org/wiki/Magnetoresistive_random-access_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;Magnetoresistive RAM&lt;/a&gt; (MRAM) was developed. It works quite close like core by storing bits in form of magnetic fields. In fact, basic MRAM even interacts with each bit without transistors, just by a grid of wires and a write line (*4), much like with classic core. But unlike classic core, reading is not destructive, but done by detecting the different electrical resistance for each states, so it doesn't need a refresh after read.&lt;/p&gt;&#xA;&lt;p&gt;MRAM is quite promising and has reached main stream status with several big manufacturers offering MRAM chips. Actual sizes of 256 MiBit are available and 1 GiBit has been announced. This brings MRAM quite in the range of modern memory needs (*5) - at a price about 10-15 times higher. It's also unlikely that it well get much faster, as executing the magnetic effect is proportional to current and time. So any application will be a balancing between speed, size (density) and retention time.&lt;/p&gt;&#xA;&lt;h2&gt;FeRAM&lt;/h2&gt;&#xA;&lt;p&gt;The other, related branch are &lt;a href=&quot;https://en.wikipedia.org/wiki/Ferroelectric_RAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ferroelectric RAM&lt;/a&gt; (FeRAM/FRAM/FeFET;*6). Their structure is again much like core (and MRAM), but the information gets not stored in a magnetic field but as an electric. The storage cell can be seen much like a capacitor in a DRAM, except that it doesn't loose it's charge (*7). And like said capacitor (and rings in core) it looses it's content when read. It's as well related to FLASH, which also uses an electric charge, but needs more elements wich translates to larger size. This in fact makes FeRAM a good candidate to challenge FLASH, by allowing higher densities as well as higher speeds (*8).&lt;/p&gt;&#xA;&lt;p&gt;For use as RAM, FeRAM is rather slow, only able to operate up to maybe 20 MHz. But there is a good chance of improvement past that, especially with a CPU interface taking account of the specialities of FeRAM, like write after read (*9). FeRAM has today many embedded applications for fast writable persistent storage, avoiding the hassles (and low endurance) of FLASH.&lt;/p&gt;&#xA;&lt;p&gt;FeRAM's most known, as well as widespread usage in popular computing may be Sony's &lt;a href=&quot;https://en.wikipedia.org/wiki/PlayStation_2&quot; rel=&quot;nofollow noreferrer&quot;&gt;PS2&lt;/a&gt;'s SoC. It contained, beside MIPS-CPU and 'a few' other parts, a 4 KiB FeRAM section. Not much, but sold in more than 150 Million units :)&lt;/p&gt;&#xA;&lt;h2&gt;More to Come&lt;/h2&gt;&#xA;&lt;p&gt;The idea to store fast and direct access data durable, using physical properties, isn't dead at all. It will just need to find a way to gather the investment to bring it ahead or at least on par with DRAM and FLASH.&lt;/p&gt;&#xA;&lt;p&gt;(Here's a &lt;a href=&quot;https://medium.com/@alexmoltzau/ferroelectric-ram-vs-mram-b6f80f993048&quot; rel=&quot;nofollow noreferrer&quot;&gt;short comparison&lt;/a&gt; between MRAM and FeRAM)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - When talking about early applications (which means different machines at different times for different areas) the most important point is that it wasn't about details we think today, but the simple fact of being able to automate the process. A Zuse Z4 or DEC PDP-8 wasn't so much about the number crunching as being able to automate and produce (and reliably reproduce) a process without human interaction. Speed was just a bonus.&lt;/p&gt;&#xA;&lt;p&gt;*2 - A 1970 IBM /370-155 had a memory access time of 2 microseconds delivering 16 ECC corrected bytes per request.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Modern in sense of new implementation and wide spread application, as all of the following usages and have already been proposed at times when classic core was still a thing.&lt;/p&gt;&#xA;&lt;p&gt;*4 - There are as well variants with a transistor added per bit to reduce currents, which reduces size, but as well speeds up writing - the speed/current/size part is the main focus on development here with methods like 'Spin Transfer' and local heating.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Fastest MRAM I know is Everspin with a DDR3-1066 interface operating at 8-8-8. So quite usable for a office machine. Still anywhere between 2 and 10 times slower than DRAM is (can be).&lt;/p&gt;&#xA;&lt;p&gt;*6 - And related &lt;a href=&quot;https://en.wikipedia.org/wiki/Fe_FET&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ferroelectric Field-Effect Transistor RAM&lt;/a&gt; (FeFET) will come up, but that's essentially a variation of FeRAM with a transistor per bit, quite like done with MRAM. So I would not consider it a different technology.&lt;/p&gt;&#xA;&lt;p&gt;*7 - Well, it does, but in term of decades instead of miliseconds.&lt;/p&gt;&#xA;&lt;p&gt;*8 - In the long run that is, as FLASH has still the advantage of higer integration and especially recent developments of storing multiple bits per cell, which outwights it's larger size by far.&lt;/p&gt;&#xA;&lt;p&gt;*9 - Which BTW is much what mainframes did with core. For example the /360's atomic TS (Test and Set) instruction, essential for multiprogramming and multiprocessor applications, worked as part of the read and refresh cycle of core. It was effectivly the memory unit doing this, eliminating any need for synchronizing hardware or locks :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-06-11T20:12:57.933" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15168" PostTypeId="2" ParentId="2706" CreationDate="2020-06-11T18:14:35.597" Score="1" Body="&lt;p&gt;The Amiga 1000 era VRAM chips had 4-bit data pins and 4-bit serial pins. I think this is shown in the A2024 patent. On the patent, they keep them D0-D3 but I think it's easy to imagine eight chips arranged as 4x2 where the 4 wide make a 16-bit bus and the two tall make two serial busses that are muxed with BLANK and the pixel clock (28MHz on Ranger?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://patents.google.com/patent/US4851826A/en&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://patents.google.com/patent/US4851826A/en&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether you mux these into 1 bpp or 2 bpp doesn't matter -- the latter only adds one chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, ECS/AGA Agnus could emit either 78 or 7A on the RGA bus to trigger VRAM for the &quot;bitplane&quot; and &quot;sprite&quot;. This is on %0001111x, so 'x' is 'BITPLANE' or 'SPRITE'. It would also have to emit the address for the VRAM on the DRAM busses just like a normal DMA action (and I believe these happen fairly early like around cycle 2 or 3?). The VRAM latches the 1024 bits into a buffer and then streams them out when it get's a pixel clock. This would probably just be an AND of the 14MHz clock and the H/VSYNC? Seems simple enough for someone to knock together a prototype...&lt;/p&gt;&#xA;" OwnerUserId="18143" LastActivityDate="2020-06-11T18:14:35.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15169" PostTypeId="2" ParentId="15158" CreationDate="2020-06-11T18:41:07.290" Score="5" Body="&lt;p&gt;&quot;Core memory&quot; comprises three technologies.  All disappeared with the introduction of semiconductor memory.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Magnetic-core_memory&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Magnetic-core memory&lt;/strong&gt;&lt;/a&gt; was a nonvolatile, rewritable memory made of wires threaded through ferrite toroid cores.  The cores are arranged in a grid, with wires along the rows, columns, and diagonals of the grid.  By passing sufficient current through the correct combination of wires, selected cores can be magnetized.  The magnetic field remains even after power is removed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early versions of this memory had destructive reads (much like DRAM); non-destructive read technology appeared later.  Each core requires 3 to 5 wires to be threaded through the hole.  Manufacturing had to be performed manually under a microscope, usually by women specially trained in that task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Per bit, magnetic core memory was cheaper, smaller, and lighter than the vacuum-tube or transistor memory of that era.  Aerospace companies also liked its nonvolatile nature and resistance to radiation.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Over 2,000 core memories flew in aircraft or spacecraft by 1978.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://ntrs.nasa.gov/search.jsp?R=19880069935&quot; rel=&quot;noreferrer&quot;&gt;*Computers in Spaceflight: The NASA Experience&lt;/a&gt;, p. 90&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The first use of magnetic core memory was the Whirlwind computer in 1951.  It was used by various computer manufacturers throughout the 1950s and 1960s.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Gemini guidance computer used 39 planes (one word) x 64 x 64 of ferrite core memory.  Additional programs were loaded from the Auxilliary Tape Memory.  (&lt;a href=&quot;https://ntrs.nasa.gov/search.jsp?R=19880069935&quot; rel=&quot;noreferrer&quot;&gt;pp. 14-17&lt;/a&gt;)  This was the first computer with core memory with a non-destructive read (p.25).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Mission control in Houston used IBM 7094-II computers with 65,000 words of main core storage and 524,000 words of additional core as a fast auxiliary memory.  (p. 251)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Mariner Mars missions had a computer with 128 x 22 bits of magnetic core memory with destructive serial readout.  (p. 145)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Rewritable memory of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apollo_Guidance_Computer#Memory&quot; rel=&quot;noreferrer&quot;&gt;Apollo Guidance Computer&lt;/a&gt; was magnetic core memory.  Block I (uncrewed test flights) versions had 1 kword, and Block II (crewed missions) had 2 kwords.  Words were 15 bits plus one parity bit.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Apollo lunar module also had an Abort Guidance System.  The bit-serial MARCO 4418 computer built by TRW had 2k x 18 bits of read-only cores and 2k of writable cores.  Only 20 words of memory were unused.  (&lt;a href=&quot;https://ntrs.nasa.gov/search.jsp?R=19880069935&quot; rel=&quot;noreferrer&quot;&gt;p. 60&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Skylab had an IBM System/360-derived TC-1 computer.  It had 16k x 16 bit of destructible core memory.  (p. 68)  The final memory usage was 99.7% (p. 74)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The original Space Shuttle general-purpose computers were IBM AP-101.  The first Shuttle flight had 104k x 32 bits of core memory.  They were arranged in modules that are powered up or down as needed.  (&lt;a href=&quot;https://ntrs.nasa.gov/search.jsp?R=19880069935&quot; rel=&quot;noreferrer&quot;&gt;pp. 95-97&lt;/a&gt;)  35k of the memory was just user interface.  One of the computers survived the &lt;em&gt;Challenger&lt;/em&gt; disaster, and its core memory was still readable.  NASA later replaced these computers with AP-101F, which has 256k of semiconductor memory (pp. 132-133).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Core_rope_memory&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Core rope memory&lt;/strong&gt;&lt;/a&gt; was a read-only memory also made of wires threaded through ferrite toroids.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In the erasable memory, cores are magnetized either clockwise or counterclockwise, thus indicating the storage of either a one or a zero. In fixed memory, each core functions as a miniature transformer, and up to 64 wires (four sets of 16-bit words) could be connected to each core. If a wire passed through a particular core, a one would be read. If a particular wire bypassed the core, a zero would be read. For example, to store the data word 1001000100001111 in a core, the first, fourth, eighth, and thirteenth through sixteenth wires would pass through that core, the rest would bypass it.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://ntrs.nasa.gov/search.jsp?R=19880069935&quot; rel=&quot;noreferrer&quot;&gt;*Computers in Spaceflight: The NASA Experience&lt;/a&gt;, p. 38&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Like magnetic core memory, core rope memory had to be assembled by hand.  However, the latter required even more skill and care, because the pattern of weaving determined the stored code.  The code needed to be specified months in advance to give time to weave the memory (pp. 43-44).  Errors were permanent and could not be patched.  As such, I can find only two instances of core rope memory:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The Mariner Mars probes used core rope memory (p. 149).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The code of the Apollo Guidance Computer was stored in core rope memory.  Block I had 24 kwords, and Block II had 36 kwords.  Both were arranged in 6 modules.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20110719093739/http://www.technikum29.de/en/devices/plated-wire-storage.shtm&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Plated wire memory&lt;/strong&gt;&lt;/a&gt; was a rewritable memory that could be machine-assembled.  Berylium-copper wires are plated in a ferrite material, which forms the columns of a grid.  The rows are selected by currents in metallic straps.  The region of the ferrite coating around each intersection performs the same role as ferrite cores.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/38NVy.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/38NVy.png&quot; alt=&quot;plated-wire memory&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plated-wire memory is a lot easier to build than core memories.  However, it is much more susceptible to misalignment of the components, limiting the density and size of the memories.  It has been used on many spacecraft:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The UNIVAC 9000 series used plated-wire memory.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The computer of the Viking orbiters had 4k x 18 bits of plated wire memory.  (&lt;a href=&quot;https://ntrs.nasa.gov/search.jsp?R=19880069935&quot; rel=&quot;noreferrer&quot;&gt;p. 159&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The computer of the Viking landers had two Honeywell HDC-602 processors, each with 18k of 2-mil plated wire memory.  (&lt;a href=&quot;https://ntrs.nasa.gov/search.jsp?R=19880069935&quot; rel=&quot;noreferrer&quot;&gt;p. 169&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The attitude control computer (HYPACE) of the Voyager spacecraft used the same 4k x 18 bits of plated wire memory as the Viking orbiters (&lt;a href=&quot;https://ntrs.nasa.gov/search.jsp?R=19880069935&quot; rel=&quot;noreferrer&quot;&gt;p. 177&lt;/a&gt;).  Only two words of this memory were left unused (p. 178).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The controllers mounted on the Space Shuttle engines were originally Honeywell HDC-601 computers.  They had 16k x 17 bits of 2-mil plated wire memory.  In the late 1980s, they were replaced with a 68000-based controller with CMOS RAM.  (&lt;a href=&quot;https://ntrs.nasa.gov/search.jsp?R=19880069935&quot; rel=&quot;noreferrer&quot;&gt;p. 130&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The KH-9 HEXAGON spy satellite was reported to have used plated wire memory.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The first computer aboard the Hubble Space Telescope was a &lt;a href=&quot;http://www.cpushack.com/space-craft-cpu.html&quot; rel=&quot;noreferrer&quot;&gt;DF-224&lt;/a&gt; with plated wire memory.  The computer was replaced by an 80486 with semiconductor memory.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Only two core memory using are operational today: the two aboard the Voyager spacecraft.  And they are both beyond the heliopause of the solar system.  As I write this, the &lt;a href=&quot;https://eyes.nasa.gov/dsn/dsn.html&quot; rel=&quot;noreferrer&quot;&gt;Deep Space Network&lt;/a&gt; in Madrid is receiving a signal from Voyager 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Semiconductor memories are cheaper, smaller volume, lighter, larger capacity, faster, and less power than core memories.  The commercial computer market -- very sensitive to costs -- quickly moved away from core memories.  Methods to overcome the weaknesses of semiconductor memories were implemented, such as parity bits, error correction, and redundancy.  This allowed their adoption by the aerospace industry.  Core memories are no longer manufactured, and there is no longer a workforce with the requisite skills to produce them.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2020-06-11T21:05:22.623" LastActivityDate="2020-06-11T21:05:22.623" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15170" PostTypeId="2" ParentId="15162" CreationDate="2020-06-11T19:04:12.893" Score="3" Body="&lt;p&gt;I'll have to look up the exact date but it was definitely pre-CGI. Very early on in the development of the web I wrote my own web server in perl that had not root directory.  It would take the requested path and do a table lookup to find which subroutine should serve that &quot;tree&quot;.  I took it very much to heart that the path requested by a browser could be viewed as an abstract token.  It may look like a file system path the web server did not have to ever map it to any directory or file in the system at all to serve the request.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This web server was the first at the Computer Science department at the University of British Columbia and quite possibly one of the first in the entire province.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem with this approach was that modules for serving content (whether dynamic or static) could not be shared with other web servers.  When the idea of a &quot;Common Gateway Interface&quot; was proposed I became heavily involved in the standardization effort as my web server was effectively a &quot;CGI-only&quot; web server.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2020-06-11T19:04:12.893" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15171" PostTypeId="2" ParentId="4647" CreationDate="2020-06-11T21:35:22.963" Score="1" Body="&lt;p&gt;As long as you didn't turn the power back on, the content of memory was quite stable.  It was the power-on glitches that got you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Certainly I've used small systems (Elliot 903 for example) where you could power it down, and power it up the next day with a compiler still loaded and ready to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used to work on network software on PDP-11, where when you got a powerfail interrupt, you have a few milliseconds to store volatile processor and device context, so you could carry on running when the power came back.  The way I remember it, this was a hit-or-miss affair.  Maybe our development lab was electrically noisy or something.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-06-11T21:35:22.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15177" PostTypeId="2" ParentId="15152" CreationDate="2020-06-12T13:55:49.567" Score="1" Body="&lt;p&gt;I remember at the time, I had a wide-carriage (14&quot;) dot matrix printer.  I would keep two boxes of continuous feed perforated paper, and change paper as I needed for doing letter size portrait, or &quot;computer paper&quot;.  &quot;Computer paper&quot;, also known as green-bar paper, was called that as it was made for mainframe printers, and each sheet was 11&quot; by 14&quot; wide (after tractor-feed perforations were torn off.  So, the answer for me was to change paper to get &quot;landscape&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do remember SideKick, but if I remember correctly, it only worked with certain apps like Lotus 123.  Many of my apps did not work with that.&lt;/p&gt;&#xA;" OwnerUserId="9079" LastActivityDate="2020-06-12T13:55:49.567" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15179" PostTypeId="2" ParentId="6177" CreationDate="2020-06-12T17:46:37.370" Score="-2" Body="&lt;p&gt;please check this website for an interface that is just under development...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://deskthority.net/viewtopic.php?f=7&amp;amp;t=23885&amp;amp;sid=2355e7e42a296f71abd0dea3ef8f3e21&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://deskthority.net/viewtopic.php?f=7&amp;amp;t=23885&amp;amp;sid=2355e7e42a296f71abd0dea3ef8f3e21&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18488" LastActivityDate="2020-06-12T17:46:37.370" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15180" PostTypeId="2" ParentId="14307" CreationDate="2020-06-12T18:55:18.380" Score="3" Body="&lt;p&gt;I saw the &quot;Novell Netware for Amiga&quot; live at the Cebit und it was impressive.&#xA;There were some A2000 connected to an Netware 3.x Server.&#xA;The main disadvantage is that a separate driver is required for each network card. So only network cards will work that were there at that time and were supported.&#xA;IMO: SANA-II Network Device Driver Specification does not exists in these days&lt;/p&gt;&#xA;" OwnerUserId="7362" LastActivityDate="2020-06-12T18:55:18.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15181" PostTypeId="1" CreationDate="2020-06-12T20:16:03.463" Score="1" ViewCount="230" Body="&lt;p&gt;Why are micro-ethernet adapters not a thing?  A physical adapter that takes our thirty year old standard sized RJ45 jack on one side and and plugs into a TabletPC on the other.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every other form of high speed communications has already shrunk to much smaller than the RJ45 form factor.   All of the following can achieve speeds much faster than 1Gbps but have much smaller sized physical connections:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;miniUSB&lt;/li&gt;&#xA;&lt;li&gt;microUSB&lt;/li&gt;&#xA;&lt;li&gt;USB-C &lt;/li&gt;&#xA;&lt;li&gt;displayPort &lt;/li&gt;&#xA;&lt;li&gt;microDisplayPort &lt;/li&gt;&#xA;&lt;li&gt;miniHDMI&lt;/li&gt;&#xA;&lt;li&gt;microHDMI &lt;/li&gt;&#xA;&lt;li&gt;miniSAS - SCSI Attached Storage&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So how were these other technologies able to shrink  to small connector size but at faster speeds?   Yes, ethernet works over distances of 100meters whereas none of the above except miniSAS work directly over 5meters, but of course MiniSAS is much much faster. Certainly engineering and modern manufacturing could make a physical adapter to reduce the physical size down to easily fit in a modern laptop, not cause NEXT and still not slow the speed down that much? The conductors have to be closer together, so microRJ45 would need to mitigate Near End CrossTalk or NEXT. Could that be achieved at manufacturing by increasing the twists-per-inch inside the adapter? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please do not answer with Ethernet-to-USB dongles as they are insecure, severely limited for PXE, have driver issues, and unstable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thirty years from now, will the RJ45 ethernet jack on PCs be antiquated?   Will we chatting about the old days of RJ45 wired ethernet like we talk about token-ring and dot matrix printers today?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have asked this same question in electronics, physics and Network Engineering, but it was rejected in every single one.  They suggested to ask in retro computing.&lt;/p&gt;&#xA;" OwnerUserId="4337" LastEditorUserId="4337" LastEditDate="2020-06-12T20:43:06.990" LastActivityDate="2020-06-12T20:43:06.990" Title="Is the thirty something year old RJ45 jack as small as it will ever get?" Tags="&lt;hardware&gt;&lt;network&gt;&lt;laptop&gt;&lt;ethernet&gt;" AnswerCount="0" CommentCount="20" ClosedDate="2020-06-12T21:25:35.850" ContentLicense="CC BY-SA 4.0" />
  <row Id="15183" PostTypeId="1" AcceptedAnswerId="15399" CreationDate="2020-06-12T21:08:16.370" Score="5" ViewCount="249" Body="&lt;p&gt;I'm trying to connect Gotek drive to my CDTV using external caddy (amitek).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The drive has 3 digit LED display, after boot i can see F-F. When I insert Flash drive it detects images on it, I can navigate to a specific one, but the software doesn't start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CD activity led flashes, but Gotek's activity led doesn't flash on start, nor indicating it's trying to read image when one is selected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have jumper on S0, tried with FF.CFG and without (firmware: FlashFloppy 2.13, working on A1200). Can't get it to boot from it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I need any specific kickstart and mod to swap it as I find fit?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UOumc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UOumc.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="3290" LastEditDate="2020-07-01T03:41:18.803" LastActivityDate="2020-07-01T03:41:18.803" Title="How to get GOTEK to work with CDTV?" Tags="&lt;emulation&gt;&lt;commodore&gt;&lt;floppy-drive&gt;&lt;amiga-cdtv&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15184" PostTypeId="2" ParentId="12779" CreationDate="2020-06-13T07:47:07.897" Score="1" Body="&lt;p&gt;The TI-99/4 and /4A computers had a rather unique arrangement where their BASIC interpreters used the 16KiB of memory attached to the system throuh the video adapter as their store both for program code and data, ignoring the memory attached to the main bus. Admittedly on an unexpanded system there was only 256 bytes of that, and most of it would have been used as temporary storage (the processor registers were mapped into it, and the machine code call stack used it too), but some of it would likely not be used by BASIC. Machine code programs (ie game cartridges - there was no way to execute machine code via BASIC) could have used that in addition to the video memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another potentially usable memory location would be the section of video memory used for storing character bitmaps. BASIC provided a way to modify this memory but not read it, but other programs running on the system could have read it when necessary. If the character wasn't used on screen the bitmap could obviously be changed without consequence. Memory was reserved for 128 character bitmaps (112 if the Extended BASIC cartrige was used), so most non-graphical programs didn't use all of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, most end-user non-BASIC programs didn't need to resort to this, as the only available options to load and execute such a program required a memory expansion (eiher the 32KiB memory expansion card or the 4KiB &quot;mini-memory&quot; cartridge-based RAM expansion), and the built-in BASIC wouldn't use either (Extended BASIC used the 32KiB card if present but couldn't be used withthe mini-memory cartridge).&lt;/p&gt;&#xA;" OwnerUserId="15930" LastEditorUserId="15930" LastEditDate="2020-06-13T08:44:32.943" LastActivityDate="2020-06-13T08:44:32.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15185" PostTypeId="1" CreationDate="2020-06-13T09:54:07.877" Score="4" ViewCount="258" Body="&lt;p&gt;The first PC I ever owned was the &lt;a href=&quot;https://www.cbronline.com/news/icl_launches_drs_300_80286_professional_workstation_with_multi_tasking_ms_dos_41/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ICL DRS PWS 300 as described in this press release&lt;/a&gt;. It was originally supplied with a copy of multitasking MS-DOS 4.1 (and Windows 1.0, which isn't mentioned in the press release). I bought it second hand and the original owner had replaced the OS with DOS 3.1 and Windows 3.0 (downgrading the DOS version because of compatibility issues), but the original disks were included. I never used them, and no longer have them.&lt;/p&gt;&#xA;&lt;p&gt;Over time, I've wondered what using the system in its original state would have been like. I've been able to find images of Windows 1.0 to use in emulators, but have never found MS-DOS 4.1. Are there any known copies of it, or has this been lost?&lt;/p&gt;&#xA;" OwnerUserId="15930" LastEditorUserId="15334" LastEditDate="2020-11-15T12:38:23.167" LastActivityDate="2020-11-15T12:38:23.167" Title="Are there any copies of ICL MS-DOS 4.1 available for emulation?" Tags="&lt;ms-dos&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15186" PostTypeId="2" ParentId="12779" CreationDate="2020-06-13T11:36:07.770" Score="0" Body="&lt;p&gt;The Oric Atmos 48k advertises 37361 bytes free at startup, and &lt;code&gt;PRINT FRE(0)&lt;/code&gt; prints 37628 which is pretty much the same value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there was a &lt;code&gt;GRAB&lt;/code&gt; command that allowed to use &quot;hires&quot; video memory and then &lt;code&gt;FRE(0)&lt;/code&gt; went up to 44796 bytes so 7 kb more. This corresponds to the area &lt;code&gt;$9800..$B400&lt;/code&gt; that is no longer used by hires mode plus relocated text bitmap data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So programs using only text mode could use 44kb of BASIC memory (assembly could use that memory too of course, but that was already the case even without &lt;code&gt;GRAB&lt;/code&gt; as long as hires mode wasn't activated, &lt;code&gt;GRAB&lt;/code&gt; offers extra safety, preventing the mode to be switched to hires to avoid destruction of this memory).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This command also works for 16Kb Oric 1 &amp;amp; Atmos. The amount of total memory is of course much lower.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-06-13T11:36:07.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15187" PostTypeId="2" ParentId="6487" CreationDate="2020-06-13T13:36:39.387" Score="1" Body="&lt;p&gt;If you look to unconventional sources, you find some surprising answers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Demoscene has demonstrated that full-motion video is actually possible on an XT with a hard drive and a Sound Blaster. Though admittedly, this didn't happen until long after that hardware was all obsolete.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out &quot;&lt;a href=&quot;http://www.pouet.net/prod.php?which=13722&quot; rel=&quot;nofollow noreferrer&quot;&gt;8088 Corruption&lt;/a&gt;&quot; by Trixter/Hornet from 2004 and its follow-up by the same author &quot;&lt;a href=&quot;http://www.pouet.net/prod.php?which=63591&quot; rel=&quot;nofollow noreferrer&quot;&gt;8088 Domination&lt;/a&gt;&quot; from 2014. The files for both are encoded in formats designed for the job, not your regular h264 codec, though the tools for making them have since been released. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't want to try running them on old hardware or in DOSBox, there are YouTube video links on those pages as well as downloads of the demos themselves. Just note that if you want to try running them on real hardware they are whole-drive-filling huge, at 10 and 30MB.&lt;/p&gt;&#xA;" OwnerUserId="17800" LastActivityDate="2020-06-13T13:36:39.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15188" PostTypeId="1" AcceptedAnswerId="15190" CreationDate="2020-06-13T22:24:18.887" Score="4" ViewCount="282" Body="&lt;p&gt;I've seen a lot of information on CDTV ROM switchers, but it is still unclear to me what is the actual purpose of it. As I understand it allows some compatibility with A500 games, but this disables CD and other system specific features. There are also mods which offer 3 KS chips option, but why?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="3290" LastEditDate="2020-06-14T04:39:59.633" LastActivityDate="2020-06-17T10:08:09.033" Title="What is the purpose of ROM switcher mods in CDTV" Tags="&lt;rom&gt;&lt;hardware-mods&gt;&lt;amiga-kickstart&gt;&lt;amiga-cdtv&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15189" PostTypeId="1" AcceptedAnswerId="15191" CreationDate="2020-06-14T08:46:40.837" Score="18" ViewCount="1638" Body="&lt;p&gt;I'm trying to identify the operating system on a Thermo-CRS C500 robot arm controller. From the specifications I know it runs on a 100 MHz 486 processor, and has 4 MB RAM and 2MB of flash/NVRAM combination for filesystem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the identifying strings in the system only refer &lt;code&gt;CROS -- CRS Robot Operating System -- v 3.1.1249&lt;/code&gt;. It may be that this is a completely custom kernel, but it might also be based on some kind of BSD or other UNIX-like system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system shell has a quite unix-like environment. Most of the system binaries, such as &lt;code&gt;/bin/cp&lt;/code&gt; and others are implemented in some kind of bytecode. The bytecode interpreter resides in &lt;code&gt;/sbin/r3interp&lt;/code&gt;, which &lt;code&gt;file&lt;/code&gt; indentifies as &lt;code&gt;FreeBSD/i386 compact demand paged executable&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The kernel binary contains some strings that could help identification:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Caught wild IRQ 0&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;double fault exception (very bad) [e=%08x]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;invalid TSS exception [e=%08x]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Cur_Proc-&amp;gt;pr_vfsd.vf_vp == 0&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;sp-&amp;gt;owner == Cur_Proc-&amp;gt;proc_id&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In particular the x86 exception names exist in most kernels, but not in that form. I have already checked late 1990s versions of FreeBSD, 386BSD, Linux 1.x, Minix 1 and 2, Xenix 386 and NetBSD, but haven't found a match. For more detailed analysis, &lt;a href=&quot;https://github.com/PetteriAimonen/crs-c500c-utils/tree/master/cros_system_bin&quot; rel=&quot;noreferrer&quot;&gt;binaries are here&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/PetteriAimonen/crs-c500c-utils/master/doc/bootmsg.rst&quot; rel=&quot;noreferrer&quot;&gt;boot messages here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone figure out some obscure Unix version that might be the base of this customized system?&lt;/p&gt;&#xA;" OwnerUserId="8014" LastActivityDate="2020-06-14T14:51:04.467" Title="Identifying late 1990s embedded 486 UNIX-like system" Tags="&lt;unix&gt;&lt;x86&gt;&lt;identify-this-software&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15190" PostTypeId="2" ParentId="15188" CreationDate="2020-06-14T12:45:22.267" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I've seen a lot of information on CDTV ROM switchers, but it is still unclear to me what is the actual purpose of it. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The CDTV is essentially an Amiga 500 sans keyboard and floppy but with CD and other additions. It uses an of the shelf Kickstart 1.3 ROM plus an extension ROM providing CD access, audio player and alike. But development didn't end with Kickstart 1.3 in 1988(?) but continued, so there is 2.0 in 1990 which as well works with the CDTV hardware. Newer, post 1990, Amiga applications may need functions provided with 2.0. An while simply exchanging the ROMs is a possible way, it disables the CDTV specific add-ons mentioned above. So the ability of switching freely forth and back seems like a good idea, doesn't it?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As I understand it allows some compatibility with A500 games, but this disables CD and other system specific features.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;These are only disabled as long as there are other ROMs than the 1.3 version switched in. That's why it's switchable, so the 2.0 Amiga (which it essentially is) can be turned back into a 1.3 CDTV by the flip of a switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason lies within the extension CDTV ROMs. They hook their services into the 1.3 ROM system. Cool way to keep a 100% original system ... except, it wasn't done in an upward compatible way, so they simply don't work with a later (2.0) ROM.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There are also mods which offer 3 KS chips option, but why?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I assume you're referring to an option to have three Kickstart ROMs on the board? Well, 1.3 and 2.0, although being the most common, aren't the only ones. So a third ROM simply offers to hold another version. Although that's usually more relevant to later Amiga models, not so much the CDTV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another use, especially if the third is made to hold two more standard 8 bit EPROMs, is to add a custom patched version - like from today's developers.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-16T18:43:32.297" LastActivityDate="2020-06-16T18:43:32.297" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15191" PostTypeId="2" ParentId="15189" CreationDate="2020-06-14T14:12:35.993" Score="16" Body="&lt;p&gt;Here's a &lt;a href=&quot;https://www.eecs.yorku.ca/course_archive/2010-11/W/4421/doc/a255/CROSandSystemShell.pdf&quot; rel=&quot;noreferrer&quot;&gt;manual for CROS&lt;/a&gt; and one for the &lt;a href=&quot;http://jpa.kapsi.fi/stuff/other/crs_robot/C500C%20User%20Guide.pdf&quot; rel=&quot;noreferrer&quot;&gt;C500C&lt;/a&gt; robot controller. It seems clear that the bytecode files are compiled from the RAPL-3 programming language (no filename extension for binaries, .r3 for source files, .v3 for &quot;variables files&quot;. There's a manual for the language &lt;a href=&quot;http://jpa.kapsi.fi/stuff/other/crs_robot/RAPL-3%20Language%20Reference%20Guide.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; and for the development tools, which run on Windows, &lt;a href=&quot;http://web.csulb.edu/~wmartinz/robot/crs/manuals/Robocomm3.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. The manual for updating CROS on the controller is &lt;a href=&quot;http://web.csulb.edu/~wmartinz/robot/crs/manuals/Firmware%20Download%20Utility%20for%20the%20C500C%20Controller.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; which makes it clear that CROS is updated by re-writing the OS image on the controller, then rebuilding the filesystem on the controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't find anything in any of these manuals that indicates that CROS is based on any other OS. Given the scale of the software provided for it, it seems plausible that it was purpose-written for the job. Re-using a BSD file format would save some wheel-reinvention, but it could also be a coincidence of magic numbers. The boot-up messages don't say anything about the Regents of the University of California, which is a requirement with BSD-licensed code.&lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2020-06-14T14:51:04.467" LastActivityDate="2020-06-14T14:51:04.467" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15193" PostTypeId="2" ParentId="6487" CreationDate="2020-06-14T17:22:11.960" Score="1" Body="&lt;p&gt;Another fundamental bit of context beyond the world of PC's is that video cameras were dropping in price, so people were much more likely to be doing video stuff even away from computers so there was suddenly a much larger market for the computer industry to tap into.  America's funniest home videos launched in 1989, and wouldn't have been possible without practical portable camcorders being widespread.  Likewise, the TV show COPS launched in 1989 because shooting TV on-location without needing a whole video truck was new and impressive, and in 1991 a citizen was able to document the Rodney King beating and it shocked the nation because it was so new for somebody to just have a handy camcorder when something was happening.  Such attacks presumably also happened prior to 1991 -- there just weren't as many people with video cameras to document the phenomenon.  (Things like portable 8mm film cameras did exist, but the practical differences between film and video are probably out of scope for a computing discussion.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 1985, the Amiga launched with fairly decent graphics by the standards of the time, and the ability to use NTSC compatible display timings and genlock so an off the shelf personal computer could be used as a part of TV production for the first time.  Avid Media Composer launched in 1989, compatible with a 68020 Macintosh II from 1987, paired with dedicated video hardware.  By 1990, the Amiga 2000 with a Video Toaster could do all sorts of live switching, keying, and cheesy digital video effects that used to require exotic dedicated hardware.  Apple launched QuickTime in 1991.  (I'll get back to that.)  In the consumer space, video games were pushing ever more 'lifelike' and 'realistic' graphics as a selling point, kind of culminating in 1992 with Mortal Kombat directly using captured video frames as sprites to make the first video game characters that literally looked 'lifelike.'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, at the start of the 1990's, you have a general emergence of video related technologies, and a general trend of general purpose personal computers being involved in some aspects of video production.  There wasn't any single &quot;lightbulb moment&quot; in that path.  Just a whole range of technologies becoming cheaper, more practical, and more desirable in a virtuous feedback loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The better the compression ratio of your video codec technology, the less hard drive space and performance you need.  The simpler the decoder of your video codec, the less CPU power (or dedicated decoder chips) you need.  If you have a video decoder in your display card, you don't need a ton of memory bandwidth between the CPU and the display hardware.  If you have a lot of bandwidth, you can use simpler display hardware, etc.  There's no one specific thing like, as soon as RAM hit X nanosecond timings, them boom it became possible to do video with that RAM.  It was a balance of factors, where if any one technology in home computers had been worse, some other aspect of the system might have gotten more work to compensate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Decoding a 640x480 24 bit RGB frame of video does require an exact minimum amount of RAM.  But that doesn't mean video was impossible with less RAM -- it just meant people used crappier looking lower resolution videos, and videos got a bigger and better looking over time as memory and storage got cheaper.  There was too much consumer interest, so nobody was going to throw their hands up and declare it impossible -- they just did they best they could with the constraints of the systems they were targeting at the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I had to pick a single definitive technology that pushed video from exotic to ordinary, I'd say the launch of QuickTime in 1991.  At that point you could write video production software while standing on the metaphorical shoulders of giants.  You didn't need to implement your own file formats or codecs, and you didn't need to tie your application to specific hardware accelerators.  Your customers could buy QuickTime compatible software today, with the reasonable expectation that the crappy video quality would get better over time when they ran your software in the future on better hardware and using better codecs.  That meant that people making video could feel safe buying video software tools and not worry about the tool getting abandoned.  That confidence in the marketplace resulted in fostering a market for video production related software, which led to a bunch of people being able to make video on their computers, which led to a bunch of people being able to make video for other people to play on their computers in FMV games and whatnot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, QuickTime isn't really a technology, per se.  It's just a standardized interface to some hardware and software technology that existed independently of QuickTime.  Remember, AVID launched on Mac before QuickTime existed, so people were already working in that space - it absolutely wasn't a hard requirement.  But the fact that a major platform vendor was treating video as a major selling point had a huge impact on the market and massively lowered the barriers to entry, so it's what I'd pick as the turning point.  It was when everybody noticed that the technology was polished and shiny enough to start the gold rush.&lt;/p&gt;&#xA;" OwnerUserId="5309" LastActivityDate="2020-06-14T17:22:11.960" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15194" PostTypeId="2" ParentId="5341" CreationDate="2020-06-14T19:58:42.350" Score="3" Body="&lt;p&gt;There is a book &lt;a href=&quot;https://mwl.io/nonfiction/tools#ed&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ed Mastery by Michael W Lucas&lt;/a&gt;, that might be a good source if you are interested.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess, in the beginning it was supposed to be a bit of a joke, but it became useful for connecting the dots and I basically read it in an afternoon and actually used some of the knowledge/ approaches later on professionally.&lt;/p&gt;&#xA;" OwnerUserId="18495" LastActivityDate="2020-06-14T19:58:42.350" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15195" PostTypeId="1" CreationDate="2020-06-14T20:29:55.603" Score="17" ViewCount="1958" Body="&lt;p&gt;I am developing some software for the Commodore 64, and I am concerned about its runspeed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an emulator that can report, after running my code, where exactly it spent most of its time? I'm happy to write some callback or something if that's what's needed.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-06-15T10:10:19.500" Title="Is there a Commodore 64 emulator that can profile running code?" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;software-development&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15196" PostTypeId="2" ParentId="15195" CreationDate="2020-06-14T20:50:14.087" Score="16" Body="&lt;p&gt;Something approaching what you want could be &lt;a href=&quot;https://csdb.dk/release/?id=174132&quot; rel=&quot;noreferrer&quot;&gt;VICE PDB monitor&lt;/a&gt; for the &lt;a href=&quot;https://vice-emu.sourceforge.io/&quot; rel=&quot;noreferrer&quot;&gt;VICE commodore 64 emulator&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;https://csdb.dk/forums/?roomid=11&amp;amp;topicid=134927&quot; rel=&quot;noreferrer&quot;&gt;https://csdb.dk/forums/?roomid=11&amp;amp;topicid=134927&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Currently VICE PDB Monitor uses Vice's mmzap and mmshow between executions or breakpoints to gather execution information and generate a heat map. It's not entirely exact since Vice doesn't trap multiple executions from the same address.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So if you know where your program is installed, the &quot;heat map&quot; (understand: where the program counter executes the most instructions) will help you find where the program is very often running instructions from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This isn't going to provide the timings or the function names (since it's not a symbolic tool), but if you see a routine/part of code being called very frequently, you know that you have to work on that one rather than on another one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not using symbols, so you have to make address translation yourself, but it can be used on programs you don't have source code for too.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-06-14T20:50:14.087" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15198" PostTypeId="2" ParentId="15195" CreationDate="2020-06-15T10:10:19.500" Score="10" Body="&lt;p&gt;I wrote an emulator recently that was designed for tinkering and visualizing what the target software's doing. It doesn't quite have the monitoring you're looking for, but its realtime RAM usage scope comes a little close, and adding a heatmap to it would be trivial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're curious... &lt;a href=&quot;https://github.com/luxocrates/viciious&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/luxocrates/viciious&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Writing more scopes for it's kinda fun, so if you have any requests for what you'd like it to show, I'm all ears...&lt;/p&gt;&#xA;" OwnerUserId="18499" LastActivityDate="2020-06-15T10:10:19.500" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15199" PostTypeId="1" CreationDate="2020-06-10T22:06:06.997" Score="7" ViewCount="140" Body="&lt;p&gt;&lt;strong&gt;Main Question:&lt;/strong&gt; How can I check a ADC0808 chip to determine if it needs to be replaced or if my issue is something else? Any advice you can offer is SO appreciated!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;ADDITIONAL INFO&lt;/strong&gt;&#xA;When the arcade is in &quot;Test Mode&quot; (see test mode picture below for context) the output values for the X and Y axis data are not smooth and it only registers a couple of HEX values. Accordingly, it appears that the cursor\crosshair follows the behavior and moves to a different point on the screen when the HEX value changes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;X axis (VRP1X: right to left) - 0080 00C0 00E0 00F0 00F8&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Y Axis (VRP1Y: top down) - 0080 00C0 00E0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gWkKk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gWkKk.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://arcarc.xmission.com/PDF_Arcade_Manuals_and_Schematics/Operation_Thunderbolt_Schematics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is a link to the full schematics&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;(Overview)&lt;/strong&gt;&#xA;I am working on a Operation Thunderbolt arcade game. It has two guns (player 1 and 2) that use two 5v potentiometers (2 each gun) to send X and Y signals to a ADC0808 chip which appears to convert the analog signal to digital. The digital value is then used by the game to control the crosshairs of the guns on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;(Issue)&lt;/strong&gt;&#xA;The crosshairs are way off in the upper right corner and they are not very responsive and jittery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;(Troubleshooting)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Found the schematics and found where the potentiometer signal is coming into the arcade PCB. I traced the signal to the ADC0808 chip (FYI: the chip on the board is actually a ADC0809N chip). I tested the VCC pin and it was 5v as expected. The input pins 26, 27, 28 and 1 and could see the voltage from the potentiometer within the 5v range.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/FyQ9U.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FyQ9U.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Mbwyr.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Mbwyr.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/C3O0t.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C3O0t.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I put the arcade into test mode and went to the calibration screen. I could see that the X and Y values were responding. Also, while checking voltages (see #1) i noticed that the crosshair was still not behaving correctly, but jumped to an area closer to the middle of the screen&#xA;&lt;a href=&quot;https://i.stack.imgur.com/KmaAi.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KmaAi.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="18518" OwnerDisplayName="Chuck Mathis" LastEditorUserId="18518" LastEditDate="2020-06-17T14:10:13.763" LastActivityDate="2020-06-17T14:10:13.763" Title="Need help checking an ADC0808 / ADC0809 chip in a arcade shooting game" Tags="&lt;hardware&gt;&lt;arcade&gt;" AnswerCount="0" CommentCount="24" ContentLicense="CC BY-SA 4.0" />
  <row Id="15200" PostTypeId="1" CreationDate="2020-06-16T05:44:05.253" Score="2" ViewCount="199" Body="&lt;p&gt;I want to put together a Pentium III tower using a beautiful Coppermine SL3XL CPU I found with a Slot 1 form factor. However, I noticed that many slot 1 motherboards do not officially support Coppermine, or even Pentium III altogether. Would it still be possible to use a Coppermine board in a motherboard that lacks official support, or will it fail catastrophically?&lt;/p&gt;&#xA;" OwnerUserId="18126" LastEditorUserId="18126" LastEditDate="2020-06-16T06:06:09.670" LastActivityDate="2020-06-16T06:41:24.390" Title="Are all Slot 1 motherboards compatible with Coppermine?" Tags="&lt;intel&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15201" PostTypeId="2" ParentId="15200" CreationDate="2020-06-16T06:41:24.390" Score="5" Body="&lt;p&gt;Older slot 1 boards only support 66MHz front-side buses and won’t boot with a Coppermine core.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coppermines use a 100MHz or 133MHz FSB. Any motherboard officially supporting the latter should also support Coppermine. Motherboards only supporting 100MHz FSB may work with 100MHz FSB Coppermines, or even 133MHz if overclocked, but it’s not guaranteed — for example some 440BX boards won’t boot with a Coppermine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as “catastrophic” failure goes, you won’t damage the hardware...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://www.vogonswiki.com/index.php/Socket_8_/_Slot_1_/_Socket_370_Motherboards&quot; rel=&quot;noreferrer&quot;&gt;the Vogons wiki slot 1 page&lt;/a&gt; for details of the various Intel chipsets on slot 1 boards, and their level of compatibility. VIA Apollo boards were common too, and most of those should work with Coppermine.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-06-16T06:41:24.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15202" PostTypeId="1" AcceptedAnswerId="15208" CreationDate="2020-06-16T12:19:00.803" Score="56" ViewCount="17334" Body="&lt;p&gt;The term &lt;em&gt;User&lt;/em&gt; for computer hardware and software customers has been universal for as long as I can remember. It has always applied to both hardware and software customers - There were &quot;Lotus Users&quot; and &quot;WordPerfect Users&quot;, just as Commodore and Sinclair Users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I struggle to think of other industries that refer to their &lt;em&gt;customers as &quot;Users&quot;&lt;/em&gt;, besides the computer technology industry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It shouldn't be about technology. I don't recall CD and VCR producers calling their customers Users when those high-tech products were introduced, and I think the same applies to Nintendo and Atari (game consoles) too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it shouldn't be about things that are objectively tools. I have never heard of someone buying a hammer or drill referred to as a Craftsman or Dewalt User.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other industries selling high-cost durable goods, such as automobiles, don't have Users either, though they often have &quot;Owners&quot;. It seems to me that paying as much for a micro in the 1980's as a decent car cost should have qualified you as both a valued Customer and an Owner, so why a User?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notably, the term does make perfect sense in 2020, where we have countless Facebook and Twitter Users who do not warrant being called Customers, since they pay no fees, and certainly are not the Owner of anything. So that actually fits - they simply Use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There ought to be some objective history and reasoning behind the ubiquitous term User, instead of simply being called a customer, like in all other industries. From where did this demand to be called a &lt;em&gt;User&lt;/em&gt; originate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: If, as many suggest, the term User originated because it was an early and specific role, what did that role originally convey in terms of the person's competence, privileges, or restrictions regarding the machine? And does the same role definition thus roughly translate into similar expectations for a customer purchasing an early micro-computer for the home or office?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-06-16T14:01:19.273" LastActivityDate="2020-07-09T09:09:22.910" Title="Why were computer customers called &quot;Users&quot;?" Tags="&lt;history&gt;&lt;terminology&gt;" AnswerCount="19" CommentCount="4" FavoriteCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15203" PostTypeId="2" ParentId="15202" CreationDate="2020-06-16T13:02:38.593" Score="6" Body="&lt;p&gt;It is one of the terms used originally to distinguish between the various roles involved in the creation and use of hardware and software. As a term it probably made much more sense in the days of room-sized mainframes where everyone had a lab coat on. &lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2020-06-16T13:02:38.593" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15204" PostTypeId="2" ParentId="15202" CreationDate="2020-06-16T13:06:26.317" Score="26" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;User simply coins what is it about, the generic usage of something - differentiating it from any other role. And let's be honest, a computer is such a generic device, that it's use can be manyfold - from typist to gamer and accountant to engineer. So any more specific name would miss out other practices.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Notably, the term does make perfect sense in 2020, where we have countless Facebook and Twitter Users who do not warrant being called Customers, since they pay no fees, and certainly are not the Owner of anything. So that actually fits - they simply Use.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And it does as well make perfect sense with computing up and into the '80s, were, if at all, only a very tiny minority of people using computers also owned them.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There ought to be some objective history and reasoning behind the ubiquitous term User, instead of simply being called a customer, like in all other industries.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Beside the historical part of not owning at all, naming implies a viewpoint which changes according to who observes what.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Owner only means you bought something, but says nothing about its application. An owner may never use the computer he bought for his accounting department.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Customer is simply the viewpoint of a merchant during a sales transaction.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;After that it's about, well, using the thing a customer bought and now owns. So, how do you call owners handling their (non-computer) assets?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Driving a car:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Driver&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Riding a bike&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Biker&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Watching TV&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Viewer&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Listening to a Radio&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Listener/Audience&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Using a stove&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cook&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Using a plane/bus/...&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Passenger&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;...and so on.&lt;/p&gt;&#xA;&lt;p&gt;For computers one could have called them 'Computer' which would have made sense - except the term were taken for the machine itself (and people before), so that wouldn't work. Also, computer application is so manyfold and new at the same time, that it might have been hard to coin a single term to cover it all. So they were simply 'people using computers', shortened to users.&lt;/p&gt;&#xA;&lt;p&gt;It might be helpful to look back to another times changing introduction the Automobile. Before one settled on the archaic 'driver' (again) other names from Automobilist and Conductor to Motorist were tried for some time, because, let's be serious, no-one 'drives', in it's genuine sense, a car. It's steered or operated.&lt;/p&gt;&#xA;&lt;p&gt;Pilot for a plane is another nice twist over time.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Addendum:&lt;/h2&gt;&#xA;&lt;p&gt;Add on from &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15202/why-were-computer-customers-called-users/15204#comment50595_15208&quot;&gt;a comment&lt;/a&gt; by Brian:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sure. I agree with this distinction. [between customer and user] But it doesn't explain why millions of customers who bought their own gear seemingly wanted or preferred to be called Users, or why the producers saw that as the more appropriate way to address them&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's important to keep in mind that the role of Customer is exhausted after the bill is payed. Also, not the user selects the naming, but the ones writing manuals and advertisements. So tell me how a manual for a memory board should address its user? There is no way they know what the board will be used for.  Similarly, the manufacturer of a computer or the publisher of a spread sheet software.&lt;/p&gt;&#xA;&lt;p&gt;While it may work with one time reads, like on a fridge, to call the reader a 'customer', it gets more inappropriate when time passes, and even more when it's documentation (books, magazines, etc) that are in no relation with the seller.&lt;/p&gt;&#xA;&lt;p&gt;User is simply a colloquial term unspecific enough to cover everyone in front of a device made for anything.&lt;/p&gt;&#xA;&lt;p&gt;And last, but not least, at the time &lt;em&gt;&amp;quot;millions of customers who bought their own gear&amp;quot;&lt;/em&gt; became a thing, the term was already coined and in wide use. Try to get people to not say 'driver' when referring to a vehicle operator, just because they now own one as well.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;And while writing this I realize more and more that this is not a question for RC.SE at all, but maybe some language site, like &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15205/6659&quot;&gt;RichF suggests&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6794" LastEditDate="2020-07-08T19:53:48.097" LastActivityDate="2020-07-08T19:53:48.097" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15205" PostTypeId="2" ParentId="15202" CreationDate="2020-06-16T13:15:11.387" Score="11" Body="&lt;p&gt;The term &quot;computer user&quot; is analogous to &quot;automobile driver&quot;. (It is an even better fit, because &quot;driver&quot; specifically excludes passengers.) Many people, in many cases most, who use computer hardware or software are not the purchasers, customers, operators, programmers, administrators, or gamers.  I can think of no better term for &quot;user&quot; which encompasses almost every aspect of interacting with a computer.  Would you prefer &quot;interactor&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you would like an in-depth etymological answer, consider re-asking this question in the &lt;a href=&quot;https://english.stackexchange.com/&quot;&gt;English Language and Usage&lt;/a&gt; SE.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2020-06-16T13:15:11.387" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15206" PostTypeId="1" AcceptedAnswerId="15207" CreationDate="2020-06-16T13:46:46.560" Score="4" ViewCount="435" Body="&lt;p&gt;The memory address in the Interrupt Vector Table of an 8086 associated with INT13H should be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;13H * 4H = 4CH&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &lt;a href=&quot;https://books.google.co.in/books?id=viEaDAAAQBAJ&amp;amp;lpg=PA337&amp;amp;ots=A6h1tHYIiC&amp;amp;dq=int%2013h&amp;amp;pg=PA337#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;a book I was referring to&lt;/a&gt; says that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;The physical address of the memory location where address of the ISR is stored can be calculated by multiplying four to the type of interrupt and then converting it in hexadecimal.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;According to them, physical Address of &lt;strong&gt;INT13H&lt;/strong&gt; is &lt;code&gt;34H ( 13*4 = 52 )&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still think that 4CH is the address, and not 34H.&lt;/p&gt;&#xA;" OwnerUserId="18504" LastEditorUserId="15334" LastEditDate="2021-02-02T14:56:43.957" LastActivityDate="2021-02-02T14:56:43.957" Title="Address of ISR for Interrupt INT 13H" Tags="&lt;8086&gt;&lt;books&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15207" PostTypeId="2" ParentId="15206" CreationDate="2020-06-16T13:58:00.567" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The physical address in the IVT associated with INT31H should be: 13H * 4H = 4CH&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;True&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But a book I was referring to says that [...]&lt;/p&gt;&#xA;&lt;p&gt;According to them, Physical Address of INT13H is 34H ( 13*4 = 52 )&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not true, but read close:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eX4c3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eX4c3.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But the point is the number system used in the given solution. They use int 13,  i.e. 13 decimal, not int 13h. So &lt;code&gt;13 * 4 -&amp;gt; 52 -&amp;gt; 34h&lt;/code&gt; is a valid solution. It just misses the question.&lt;/p&gt;&#xA;&lt;p&gt;So given, it's a bit confusing, as the book contains a slight mishap by providing a mismatched solution by solving for 13 instead of 13h.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: Always read as written, not as assumed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-06-18T08:29:59.500" LastActivityDate="2020-06-16T14:38:06.000" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15208" PostTypeId="2" ParentId="15202" CreationDate="2020-06-16T14:10:38.307" Score="101" Body="&lt;p&gt;&lt;strong&gt;&lt;em&gt;'User'&lt;/em&gt; and &lt;em&gt;'customer'&lt;/em&gt; aren't the same.&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;user&lt;/strong&gt; is the person (always a person) who uses a computer system to do something. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;customer&lt;/strong&gt; is the person or organization who pays for the hardware and software used by the user. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The customer can be identical to the user (private or freelance personal computer user). The customer can be the user's boss (small firm) or organization (large company); it can also be a different unit of an organization from the one the user is in (IT buys software, business uses software). There are scenarios without customers (free-as-in-beer software), and scenarios without users (custom software that never gets used because by the time it's finished, the business case has changed).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the term 'user' goes back to at least 1961, when DECUS, the &lt;a href=&quot;https://en.wikipedia.org/wiki/DECUS&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Digital Equipment Computer Users' Society&lt;/em&gt;&lt;/a&gt;, was founded.[1] At that time, the only computer DEC was selling on the open market was the PDP-1, at a price of US$120,000 [2]. This price was so high that the &lt;em&gt;customer&lt;/em&gt; always was an organization of some sort; however, it was also so low (compared to other computers at the time) that a diverse group of people &lt;em&gt;-- not just operators, but also programmers, researchers, students, etc. -- could use the computer directly&lt;/em&gt;. It appears a collective noun was needed, though I don't know if the term originated at DEC. From then on, the terms 'user' and 'user group' seem to have stuck [3], eventually entering common use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] Notably, the &lt;a href=&quot;https://en.wikipedia.org/wiki/SHARE_(computing)&quot; rel=&quot;noreferrer&quot;&gt;SHARE&lt;/a&gt; IBM user group pre-dated DECUS by 6 years, but did not call itself a user group at that time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] equivalent to $1,030,000 in 2019&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3] Note all the user groups popping up in the 1960s and 1970s. &lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="4335" LastEditDate="2020-06-17T18:19:24.050" LastActivityDate="2020-06-17T18:19:24.050" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="15209" PostTypeId="2" ParentId="15202" CreationDate="2020-06-16T18:49:15.323" Score="12" Body="&lt;p&gt;Customers buy things. Users just use them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term 'user' arose in the days of the mainframe computer where many users connect to a single computer, often using the same shared terminals during the day. The individuals need tracking so 'users' and 'user accounts' were eventually born.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The notion of others in the workplace being called 'customers' was a later thing. I first saw it at work in the early 90's, with training on 'customer-driven quality' from the premise that 'all of us are each other's customers'. Prior to that, I didn't see customer used anywhere outside of the sales environment. It would have been a weird choice to use in the days when 'user' was adopted.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastActivityDate="2020-06-16T18:49:15.323" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15210" PostTypeId="1" CreationDate="2020-06-16T19:01:01.773" Score="5" ViewCount="213" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Galaksija_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Galaksija&lt;/a&gt; has a 6 bit latch used for various bits and bobs, notably the part of the scanline counter which contributes to character generation, but also, it has a bit for clamping A7 high, and this bit is active low. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The portion of the schematic relevant to the question is highlighted in red:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2iUNY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2iUNY.png&quot; alt=&quot;Annotated schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine the whole address space is chopped into blocks 128 bytes long. This will have the effect of mirroring every odd-numbered block to the preceding even-numbered block. I can imagine that this would be useful for refreshing some rare kind of DRAM, but this is not used in the Galaksija. So what does the Galaksija use the A7 clamp for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Datasheets:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://ee-classes.usc.edu/ee459/library/datasheets/DM74LS138.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;74138 1-of-8 / 74139 dual 1-of-4 Demultiplexer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://ee-classes.usc.edu/ee459/library/datasheets/DM74LS174.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;74174 Latch&lt;/a&gt;&lt;br&gt;&#xA;(note that this datasheet also covers the 74175)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://ee-classes.usc.edu/ee459/library/datasheets/DM74LS251.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;74251 Multiplexer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.cs.uml.edu/~fredm/courses/91.305/files/cy6264.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;6264 SRAM&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="576" LastEditorUserId="7347" LastEditDate="2020-06-17T09:32:00.300" LastActivityDate="2020-06-20T05:58:31.197" Title="Why does the Galaksija's latch include some kind of address remapping?" Tags="&lt;hardware&gt;&lt;galaksija&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15211" PostTypeId="2" ParentId="15202" CreationDate="2020-06-16T21:08:49.240" Score="3" Body="&lt;p&gt;One might infer this from what the other answers said, but I don't see it explicitly stated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A person who &lt;strong&gt;uses&lt;/strong&gt; a computer is a &lt;strong&gt;user&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &quot;-r&quot; suffix to refer to the person performing an action is just a feature of the English language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There isn't really a better verb to summarise everything you do on a computer than &quot;use&quot;, thus &quot;user&quot;. With a (modern) computer, you type on the keyboard, you move the mouse, you look at the screen, you possibly touch the screen, you may also interact in other ways with other peripherals. You can also look at what you're doing at a higher level, but this still doesn't really give a better verb than &quot;use&quot; (with the exception of some specific types of applications, e.g. a gamer games or a player plays games, but this doesn't generalise to the computer as a whole).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see this language feature in other places too:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A person who &lt;strong&gt;drives&lt;/strong&gt; a car is a &lt;strong&gt;driver&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;A person who &lt;strong&gt;rides&lt;/strong&gt; a bike is a &lt;strong&gt;rider&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;A person who &lt;strong&gt;views&lt;/strong&gt; a television show is a &lt;strong&gt;viewer&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;A person who &lt;strong&gt;manages&lt;/strong&gt; others is a &lt;strong&gt;manager&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="18508" LastEditorUserId="18508" LastEditDate="2020-06-16T21:16:03.133" LastActivityDate="2020-06-16T21:16:03.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15212" PostTypeId="2" ParentId="15202" CreationDate="2020-06-16T21:21:32.030" Score="5" Body="&lt;p&gt;There are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;People who sell computers: vendors&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;People who buy computers: customers of the vendors  (and for pre-personal computers, this was generally an ongoing relationship)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;People who program the computers that were bought: programmers&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;People who operate the machinery that is the computer while it runs the programs that the programmers have written: operators&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;People who, with the possible assistance of the operators (to load cards and tapes, burst lineprinter paper, etc), use the programs the programmers have written: the &lt;strong&gt;users&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-06-16T21:21:32.030" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15213" PostTypeId="2" ParentId="15202" CreationDate="2020-06-17T01:16:59.273" Score="2" Body="&lt;p&gt;By my recollection, computers became multi-user, meaning that multiple people could operate the same tool simultaneously. Each user had &quot;user space&quot;, meaning values assigned to do their work, and shared or system space, meaning it held values assigned to operate the system or exchange information between users. This was different from batch-oriented systems that relied on card stacks or tapes to fetch the next operation the computer was supposed to act upon.&lt;/p&gt;&#xA;" OwnerUserId="18513" LastActivityDate="2020-06-17T01:16:59.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15214" PostTypeId="2" ParentId="15210" CreationDate="2020-06-17T09:34:32.500" Score="4" Body="&lt;p&gt;&lt;strong&gt;This is not intended to be a full answer; it's just my take on what the hardware is doing.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: There are undoubtedly errors below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The description below follows all of the signals that feed in to &lt;code&gt;A7&lt;/code&gt;.  It should make sense when read from top to bottom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;U10 : 74139 dual 1-of-4 demux&lt;/strong&gt; (&quot;Address decoder&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Outputs default &lt;code&gt;H&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Left side on schematic:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A15 = /Enable&#xA;&#xA;A13=L, A14=L, A15=L ⇒ /CS_ROM = L&#xA;A13=H, A14=L, A15=L ⇒ /Enable on the chip's other demux = L.&#xA;                      Also connects to /CE2 on the RAM via several NOT &#xA;                      and NAND gates.  &#xA;                      The additional gates also hook into the output&#xA;                      of the other half of this gate and the Z80's &#xA;                      refresh line (used for the video circuitry).&#xA;Other two outputs unused.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Right side on schematic:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A13=H, A14=L, A15=L ⇒ /Enable = L (as described above)&#xA;&#xA;A11=L, A12=L, /Enable=L ⇒ Latch/Kbd(?) CS = L&#xA;                          This output also hooks into the afore-&#xA;                          mentioned circuitry hooked up to the RAM's&#xA;                          CE2 line.&#xA;Other three outputs unused.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;U6 : 74251 1-of-8 multiplexer&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This appears to be used for scanning the keyboard matrix.  It takes one of its inputs from one of the lines of interest but does not output to the circuit we're interested in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This chip is one of the two chips connected to the &lt;code&gt;Latch/Kbd CS&lt;/code&gt; line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When &lt;code&gt;Latch/Kbd CS&lt;/code&gt; is &lt;code&gt;L&lt;/code&gt; then this chip's outputs are active.  When it's &lt;code&gt;H&lt;/code&gt; the outputs are high-Z.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;U7 : 74138 1-of-8 Demux&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This chip is one of the two chips connected to the &lt;code&gt;Latch/Kbd CS&lt;/code&gt; line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Outputs default &lt;code&gt;H&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only one output is of interest on this chip (&lt;code&gt;Q7&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/E0 = Latch/Kbd(?) CS&#xA;/E1 = MREQ&#xA;E2  = H&#xA;&#xA;A0 (chip) = A3 (on the Z-80 bus)&#xA;A1 (chip) = A4 (on the Z-80 bus)&#xA;A2 (chip) = A5 (on the Z-80 bus)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;/E0&lt;/code&gt;=&lt;code&gt;H&lt;/code&gt;, &lt;code&gt;/E1&lt;/code&gt;=&lt;code&gt;H&lt;/code&gt;, &lt;code&gt;A0&lt;/code&gt;=H, &lt;code&gt;A1&lt;/code&gt;=H, &lt;code&gt;A5&lt;/code&gt;=H ⇒ &lt;code&gt;Q7&lt;/code&gt; = L&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or in other words:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;Latch/Kbd CS&lt;/code&gt;=&lt;code&gt;H&lt;/code&gt;, &lt;code&gt;/MREQ&lt;/code&gt;&lt;sub&gt;Z80&lt;/sub&gt;=&lt;code&gt;H&lt;/code&gt;, &lt;code&gt;A3&lt;/code&gt;&lt;sub&gt;Z80&lt;/sub&gt;=H, &lt;code&gt;A4&lt;/code&gt;&lt;sub&gt;Z80&lt;/sub&gt;=H, &lt;code&gt;A5&lt;/code&gt;&lt;sub&gt;Z80&lt;/sub&gt;=H ⇒ &lt;code&gt;Q7&lt;/code&gt; = L&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;U17 : 3-input NOR gate&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NOR gate's three inputs are &lt;code&gt;Q7&lt;/code&gt; from the &lt;code&gt;U7&lt;/code&gt; demux, &lt;code&gt;MREQ&lt;/code&gt;&lt;sub&gt;Z80&lt;/sub&gt;, and &lt;code&gt;Write&lt;/code&gt;&lt;sub&gt;Z80&lt;/sub&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Output is connected to the 74174 latch's &lt;code&gt;/CP&lt;/code&gt; line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;U8 : 74174 latch&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This latches the input (&lt;code&gt;D2&lt;/code&gt;&lt;sub&gt;Z80&lt;/sub&gt;..&lt;code&gt;D7&lt;/code&gt;&lt;sub&gt;Z80&lt;/sub&gt;) on the rising edge of &lt;code&gt;/CP&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Inputs:&lt;br&gt;&#xA;&lt;code&gt;/CP&lt;/code&gt; : See &lt;code&gt;U17&lt;/code&gt;, immediately above.&lt;br&gt;&#xA;&lt;code&gt;D0&lt;/code&gt;..&lt;code&gt;D5&lt;/code&gt; = &lt;code&gt;D2&lt;/code&gt;&lt;sub&gt;Z80&lt;/sub&gt;..&lt;code&gt;D7&lt;/code&gt;&lt;sub&gt;Z80&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Outputs:&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Q0         → Character generator C0, Line out&#xA;Q1, Q2, Q3 → Character generator C1, C2, C3&#xA;Q4         → Line out&#xA;Q5         → U18 NAND (left)&#xA;             This is the one we're interested in.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;U16 : 7400 quad 2-input NAND&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One gate is simply used to invert &lt;code&gt;A7&lt;/code&gt;&lt;sub&gt;Z80&lt;/sub&gt;.  The output of this, along with &lt;code&gt;Q5&lt;/code&gt; from the latch are fed into a second NAND gate.  The output of this goes to &lt;code&gt;A7&lt;/code&gt; on the 6264 SRAM.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Synopsis&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;TBD.  First guess is that it might allow the currently-pressed keyboard keys to be read directly either to the Z80 or to RAM.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2020-06-17T11:11:07.883" LastActivityDate="2020-06-17T11:11:07.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15215" PostTypeId="2" ParentId="15188" CreationDate="2020-06-17T10:08:09.033" Score="1" Body="&lt;p&gt;The CDTV CD drive is non-standard. The interface is not IDE or SCSI, it requires a special driver that was built in to the CDTV ROM. The ROM consists of a standard Kickstart 1.3 image plus the additional CD-ROM support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately the CD-ROM support only works with Kickstart 1.3 and without reverse-engineering it there was no way to fix it for later versions, so it had to be disabled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally the CD-ROM support uses some memory for the driver and filesystem. Disabling the CD-ROM frees up some memory. The CDTV shipped with 1MB of RAM so for compatibility with software designed for an A500 expanded to 1MB it was sometimes helpful.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-06-17T10:08:09.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15216" PostTypeId="2" ParentId="15210" CreationDate="2020-06-17T11:07:20.433" Score="4" Body="&lt;p&gt;Like the ZX80 and ZX81, the Galaksija uses the Z80's DRAM refresh as an address generator for display generation. During refresh, the Z80 places the contents of its R register on lines A0-A6, and the I register on A8-A16, but the A7 line is always zero. Therefore, in order to generate screen memory addresses with A7 set to 1, circuitry is required to force the A7 line high. This is what this bit of the latch is used for.&lt;/p&gt;&#xA;&lt;p&gt;Only RAM addresses are affected by this, meaning that code in ROM used to generate the correct sequence of addresses can run unimpeded.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastEditorUserId="15930" LastEditDate="2020-06-20T05:58:31.197" LastActivityDate="2020-06-20T05:58:31.197" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15217" PostTypeId="1" AcceptedAnswerId="15222" CreationDate="2020-06-17T11:16:22.280" Score="8" ViewCount="1873" Body="&lt;p&gt;This &lt;a href=&quot;https://books.google.com/books?id=keBW5Sy3v2sC&amp;amp;lpg=PA84&amp;amp;ots=bp79-OqrT1&amp;amp;dq=graphics%20displays%20early%201970s&amp;amp;hl=ru&amp;amp;pg=PA84#v=onepage&amp;amp;q=graphics%20displays%20early%201970s&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt; states that introduction of raster graphics display began in mid-1970s only after affordable semiconductor memory had become available on the market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would it be at all possible to make a raster graphics display by using the types of memory widely available in early 1970s (ferrite, I guess)?&lt;/p&gt;&#xA;" OwnerUserId="3303" LastEditorUserId="6659" LastEditDate="2020-06-17T14:14:02.547" LastActivityDate="2020-06-18T10:24:32.667" Title="Why did raster displays require semiconductor memory" Tags="&lt;memory&gt;&lt;display&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15218" PostTypeId="2" ParentId="7794" CreationDate="2020-06-17T11:36:17.733" Score="2" Body="&lt;p&gt;Yes, certainly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As pointed out, the other set is very useful for floating point arithmetic, so that is one area I'm using them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also found out a very handy use for them when writing a pipelined read ahead and write behind processes for the file system: I start one disk operation, switch bank, start the other one, switch bank and wait for the first one to complete. And so on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet another use case for me is the RTL (Run Time Library) for interpreted and compiled Basic: while the RTL-functionality can most of the time be implemented using just one bank, part of the other bank is often handy for keeping the return address.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the AF' register, I have reserved it for the first level interrupt handling: just doing EX AF,AF'  allows the interrupt routine to do for e.g. some math without messing up user processes flags.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in my Z180 based system, both banks (except the AF') are included in the process context (I'm running a home brew multiprocessing system). &lt;/p&gt;&#xA;" OwnerUserId="13557" LastActivityDate="2020-06-17T11:36:17.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15219" PostTypeId="2" ParentId="15217" CreationDate="2020-06-17T12:24:35.533" Score="3" Body="&lt;p&gt;Possible, yes. Affordable, no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://dl.acm.org/doi/10.1145/362566.362567&quot; rel=&quot;nofollow noreferrer&quot;&gt;The article abstracted here&lt;/a&gt; describes a core-based system.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-06-17T12:24:35.533" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15220" PostTypeId="2" ParentId="15217" CreationDate="2020-06-17T13:38:00.257" Score="6" Body="&lt;p&gt;Some of NASA's early displays in the control rooms were generated by computers with core memory.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A pair of &lt;a href=&quot;https://en.wikipedia.org/wiki/GE_635&quot; rel=&quot;noreferrer&quot;&gt;GE 635&lt;/a&gt; computers generated up to 40 channels of telemetry displays at Cape Canaveral.  These computers had 2 microsecond ferrite core memory.  They were used for launches at Canaveral from 1965 to 1983.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;During the Apollo program, the displays in the firing rooms at Kennedy were driven by a DDP-224 computer.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/DDP-24&quot; rel=&quot;noreferrer&quot;&gt;DDP-24/224/124 architecture&lt;/a&gt; used magnetic core memory.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For Saturn Vs at Complex 39, one RCA 110A was located in each of the four firing rooms in the Saturn Launch Control Center, which was attached to the Vehicle Assembly Building in which the Saturns would be stacked. Each of four mobile launchers also contained a computer. In addition to the 110As, the firing rooms also had a &lt;strong&gt;DDP-224 minicomputer as a display driver for the CRTs&lt;/strong&gt; showing output data to the engineers, as well as a controller for slides and other visuals. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://ntrs.nasa.gov/search.jsp?R=19880069935&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Computers in Spaceflight: The NASA Experience&lt;/em&gt;&lt;/a&gt;, p. 214&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As far as the cost goes, NASA could afford it.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-06-17T13:38:00.257" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15221" PostTypeId="2" ParentId="15217" CreationDate="2020-06-17T14:46:24.790" Score="3" Body="&lt;p&gt;It is comparatively difficult to build core memories that are fast enough to drive a useful raster display.  Remember that core memory has to be re-written after being read, as reads effectively erase the memory cell.  This memory cycle typically takes several microseconds (and defined the execution speed of most contemporary computers), so it has to satisfy the data required by the display during that cycle time, and additionally is unavailable for use by the computer it's attached to until a blanking period in the raster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To provide a flicker-free display with a moderately long-persistence phosphor, a CRT has to be refreshed several tens of times a second; broadcast TV settled on 50Hz in Europe and 60Hz in the US.  A computer display has relatively free choice of the number of lines and the number of pixels per line; reducing these figures reduces the frequency at which data is needed from the memory, as well as the total amount of memory required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming a modest 240x128 display at 50Hz, 12-bit memory words, and typical blanking periods, I estimate a 250 kHz memory read speed would be needed to provide one bit per pixel, with the pixels themselves being shifted out of a semiconductor-based register at 3MHz.  The framebuffer would require 2.5 kilowords of storage, separate from the main memory of the computer to avoid impeding the latter's performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 4-microsecond memory cycle is indeed achievable with core memory, but it's towards the upper end of the performance curve.  This would significantly increase its cost relative to a slower memory, such as that found in the PDP-8/S with an 18-microsecond cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is the further practical obstacle that a raster display is inherently a single-user device, whereas most computers of the core-memory era were multi-user due to their purchase/rental and running costs.  Hence it would have been used only for specialised applications where dedicating such an expensive device to a single user was actually appropriate.  Vector-based terminals were more cost-effective in this regard.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-06-17T14:46:24.790" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="15222" PostTypeId="2" ParentId="15217" CreationDate="2020-06-17T15:09:29.333" Score="12" Body="&lt;p&gt;&lt;em&gt;[Note, this is about raster &lt;strong&gt;graphics&lt;/strong&gt; displays. The situation with raster based text display is similar but different, see below the divider]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This source states that introduction of raster graphics display began in mid-1970s only after affordable semiconductor memory had become available on the market.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;True. Alas, one could add some restrictions as raster was tried and done before.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Would it be at all possible to make a raster graphics display by using the types of memory widely available in early 1970s (ferrite, I guess)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Possible? For sure. Core was fast enough and could be done large enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Economic? For sure not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A raster display needs a storage cell for each and every possible dot to be displayed, whereas a vector display only need to hold two pairs of coordinates for every line that will be displayed. So for example with a diplay of only 256x256 dots, the bitmap will needs 8KiB of core. Doesn't sound much, but then again, in the 60s even mainframes started with RAM of similar size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A vector display with the same 256x256 addressable locations needs just 4 bytes per line (two if connected) to be displayed- so a grapic with 100 lines (quite a lot on a rough 256x256 screen) will need less than 400 bytes, 1/20th of a similar capable raster display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But already the very first (widespread, commercial) graphics display, the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2250&quot; rel=&quot;noreferrer&quot;&gt;IBM 2250&lt;/a&gt; of 1964 could address 1024x1024 positions. For a raster display this would mean the needs of one megabit or 128 KiB - keep in mind, the basic &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360_Model_30#Models&quot; rel=&quot;noreferrer&quot;&gt;model 360/30&lt;/a&gt; was sold with 8 KiB memory and expandable to 64, while the top end 360/50 offered 64-512 KiB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A vector display in contrast needs for a 1024x1024 position display only 21 bit per data word (display list entry). So a list with 1,000 entries needs only 21 kbit or ~3 KiB storage. These 10,000 entries are good for anywhere between 500 and 1,000 lines on screen. already quite complex and about the same memory as needed for a 80x24 display (~4 KiB including format information).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With using vector instead of raster, memory cost was still a limiting factor, that's why Tektronix could position their &lt;a href=&quot;https://en.wikipedia.org/wiki/Tektronix_4010&quot; rel=&quot;noreferrer&quot;&gt;storage tube based terminal&lt;/a&gt;s (4002/4010 series) in 1969/70 as a cheap alternative. By using a storage tube virtually unlimited vectors could be displayed without any RAM to hold them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So bottom line, it wasn't about technology but cost&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, and on a side note, a vector display line is a line, no matter what angle, on a raster display it's mostly a flight of steps. So raster is inherent ugly. Another reason why vector displays kept being &lt;em&gt;the&lt;/em&gt; device used for CAD way until the late 80s. A line was a line and any transformation (rotation, sliding etc) could be done qute fast, as the CPU didn't have to recalculate every pixel, but only start and end of each line, which is a simple 3D to 2D transformation.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, for text displays the situation was the same but different. Text is primary defined by the characters to be displayed. For 80x24 this means the need of 1920 character words plus necessary format information, so usually ca 3-4,000 words - words, because at that time using only 7 bit per character was a substantial saving. After having the text in (some) memory, it doesn't really matter if it's displayed as raster or vector. In fact, vector has slight advantages when processing as a character is read once, then displayed and done, essentially lowering speed requirement for RAM by a factor of 8-12. Also, characters drawn in vector again look better on screen than the pixelation a raster display offers. That's why mainframe systems still offered vector based text terminals up to ca. 1980, only to be replaced when raster based systems offered higher resolutions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-06-17T15:09:29.333" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15223" PostTypeId="2" ParentId="15202" CreationDate="2020-06-17T16:11:22.777" Score="3" Body="&lt;p&gt;The person paying for the software is very often not the same person using the software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I currently make support bots, the companies buying our product are our customers, the people using it are our users. A university with an Office 365 subscription is a customer, all the staff and students are users. For Gmail, the advertisers are the customers, the people using it are users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the old days, main-frames were widespread, so the same situation applied. The entity owning the main-frame was the customer, the people running software on it were users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need clear and concise definitions. E.g. SLAs for customer support ticket response times vs user support tickets are usually widely different.&lt;/p&gt;&#xA;" OwnerUserId="18520" LastActivityDate="2020-06-17T16:11:22.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15224" PostTypeId="2" ParentId="15217" CreationDate="2020-06-17T16:12:54.223" Score="5" Body="&lt;p&gt;&lt;strong&gt;Not only &lt;em&gt;would&lt;/em&gt; it be possible, it was, in fact, done.&lt;/strong&gt; In three different ways.&lt;/p&gt;&#xA;&lt;h2&gt;Magnetic Drum Memory: BRAD and the IBM 1500 Instructional System, 1966&lt;/h2&gt;&#xA;&lt;p&gt;BRAD, the &lt;a href=&quot;https://dl.acm.org/doi/10.1145/363347.363385&quot; rel=&quot;nofollow noreferrer&quot;&gt;Brookhaven RAster Display&lt;/a&gt;, used magnetic drum memory in 1966:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Each [...] console can plot tens of thousands of points, or up to 4000 characters at 30 frames per second.  [...] &lt;br&gt;&#xA;The technique employed is that of programmatically generating a binary image of the desired display in a computer. The image is written on a rotating drum memory. Independent read heads continuously display the picture, which is generated by swept horizontal lines. A standard TV monitor serves as the display device.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In other words, BRAD implemented dual-ported video memory by using two heads for each track on the drum. The drum could hold more than one track, hence serve more than one terminal. This is reflected in the cost structure - BRAD wasn't cheap:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;After an initial display system investment of $50,000, each display, with teletype, cost less than $3,000.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While the article on BRAD appeared in the &lt;em&gt;Communications of the ACM&lt;/em&gt; in June 1968, The &lt;a href=&quot;https://books.google.de/books?id=1utbtFr022YC&amp;amp;pg=PA181&amp;amp;lpg=PA181&amp;amp;dq=Brookhaven%20RAster%20Display%20(BRAD)&amp;amp;source=bl&amp;amp;ots=L0TWeKcp6B&amp;amp;sig=ACfU3U2AQPU1lmZtv6ezzW-bBHhYKzERvQ&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=2ahUKEwiZn4H22YnqAhUtx4UKHSsjAWQQ6AEwA3oECDIQAQ#v=onepage&amp;amp;q=Brookhaven%20RAster%20Display%20(BRAD)&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Froehlich/Kent Encyclopedia of Telecommunications notes that BRAD was introduced in 1966&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In the same year, the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1500&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 1500 instructional system&lt;/a&gt; was first prototyped at an elementary school (!) in as an experiment in computer-assisted teaching. Its terminals also received their video signal from drum memory.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Core Memory: Honeywell DDP-224 based framebuffers, 1970 or earlier&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://dl.acm.org/doi/10.1145/362566.362567&quot; rel=&quot;nofollow noreferrer&quot;&gt;A. Michael Noll at Bell Labs&lt;/a&gt; described a raster display based on a magnetic core framebuffer and a Honeywell DDP-224 in 1970:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The scanned image is stored in the core memory of the computer, and software scan conversion is used to convert the rectangular coordinates of a point to the appropriate word and bit in an output display array in core storage. Results thus far indicate that flicker-free displays of large amounts of data are possible with reasonably fast graphical interaction. A scanned image of size 240 X 254 points is displayed at a 30 frame-per-second rate.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;DrSheldon pointed out that a similar setup was used at NASA during the Apollo program, i.e., probably predating the Bell Labs setup.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Delay Line Memory: The IBM 2260 video display terminal, 1965&lt;/h2&gt;&#xA;&lt;p&gt;While I could not find a pixel-addressable delay line based display, &lt;a href=&quot;http://www.righto.com/2019/11/ibm-sonic-delay-lines-and-history-of.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ken Shirriff writes&lt;/a&gt; that the IBM 2260 video display terminal (or, more precisely, the IBM 2848 Display Control used to drive it) did store the individual pixels of each character, along with its EBCDIC values, on a 50ft sonic delay line, showing that a delay line based frame buffer would have been feasible.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-06-18T10:24:32.667" LastActivityDate="2020-06-18T10:24:32.667" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15225" PostTypeId="2" ParentId="15202" CreationDate="2020-06-17T16:46:13.423" Score="3" Body="&lt;p&gt;Following from Big Mike's recollection, which matches mine own, I had a look into &lt;a href=&quot;https://en.wikipedia.org/wiki/Compatible_Time-Sharing_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;CTSS&lt;/a&gt; which was about the first system with more than one user to see if I could find a source of the terminology earlier than 1961.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First movers often set terminology for a technical domain. &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Backus&quot; rel=&quot;nofollow noreferrer&quot;&gt;John Backus&lt;/a&gt; uses the term when discussing the 'Effect of Automatic Coding on Machine Design' in 1954, and if John Backus gives something a name it tends to stick.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Mr. P.F. Williams said that his firm is trying to decide on a computer&#xA;  to use. They want something intermediate between an IBM 650 and 704. The&#xA;  704 seems too large: they 'would not be able to keep it busy'. John Backus&#xA;  said that by time sharing, a big computer could be used as several small&#xA;  ones; there would need to be a reading station for each user. &lt;a href=&quot;https://dl.acm.org/profile/81502649377&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mr H. Freeman&lt;/a&gt;&#xA;  remarked that down time would be worse for one large machine than for several&#xA;  small ones. &lt;a href=&quot;https://en.wikipedia.org/wiki/Stanley_Gill&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stanley Gill&lt;/a&gt; said that the idea of a centralised computing&#xA;  bureau seemed a good one, except that if each subscriber were to have his own &#xA;  input-output equipment he would not be able to afford such flexible equipment&#xA;  &lt;a href=&quot;https://comphist.digitalhumanitiesmit.org/archives/person/c-w-adams&quot; rel=&quot;nofollow noreferrer&quot;&gt;Prof. Adams&lt;/a&gt; pointed out that the idea was similar to a centralised stenographic bureau,which was not always successful.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Donald_Shell&quot; rel=&quot;nofollow noreferrer&quot;&gt;D.L. Shell&lt;/a&gt; said that Bell Laboratories had in fact used a central computer with remote&#xA;  input-output very successfully. He said the cost per operation of a machine is &#xA;  roughly proportional to the square root of the time per operation; also the work&#xA;  load increases exponentially with the time. He felt that where elapsed time is &#xA;  vital in case of a breakdown, a large computer is still preferable.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;http://bitsavers.org/pdf/mit/whirlwind/summer_session_1954/Digital_Computers_Advanced_Coding_Techniques_Summer_1954.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.org/pdf/mit/whirlwind/summer_session_1954/Digital_Computers_Advanced_Coding_Techniques_Summer_1954.pdf&lt;/a&gt; p16-2&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Automatic coding - compilers generating machine code rather than doing it by hand)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know which system Backus was thinking of, if any, as this from the decade before any IBM system in &lt;a href=&quot;https://en.wikipedia.org/wiki/Time-sharing_system_evolution&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia's timeline&lt;/a&gt;, so I don't think there was a specific 'role' for the term, rather the 'customer' in the conversation would have been &lt;em&gt;P.F. Williams' firm&lt;/em&gt; rather than the people operating the &lt;em&gt;reading station&lt;/em&gt;s. Note that the other people in the discussions used different terms, &lt;em&gt;subscriber&lt;/em&gt; above and, earlier in the discussion, &lt;em&gt;customer&lt;/em&gt; is mentioned, though it's not clear if that refers to a user rather than a university:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Grace_Hopper&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dr Grace Hopper&lt;/a&gt; raised the possibility of using several small computers in parallel. The greatest demand was for small machines, and she hoped that each university would eventually have one. [...] She foresaw a mass produced small machine, delivered with a compiler and library appropriate to the customer's needs.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Mr J.W. Backus disagreed[...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Programmers&lt;/em&gt; and  &lt;em&gt;engineers&lt;/em&gt; are also mentioned in the discussion; however in the context of their use, the programming takes place before the engineers finalise the hardware design, so it seems that they are not considered users.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/J._C._P._Miller&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dr J.C.P. Miller&lt;/a&gt; then proposes something sounding a lot like RISC computing. So &lt;em&gt;users&lt;/em&gt;, not-quite personal computers and no-quite RISC all in just three pages of discussion from 1954.&lt;/p&gt;&#xA;" OwnerUserId="5445" LastActivityDate="2020-06-17T16:46:13.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15226" PostTypeId="2" ParentId="15202" CreationDate="2020-06-17T18:07:01.107" Score="4" Body="&lt;p&gt;To further Pete Kirkham's answer; IBM's TSO (Time Sharing Option) was one of the more popular software options that allowed customers of IBM to rent out time on their computers (a.k.a. mainframes of the time) to users that didn't need/want/afford a computer of their own. This solidified the concepts of&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&quot;Users&quot; (people that asked the computer to do work for them),&lt;/li&gt;&#xA;&lt;li&gt;&quot;Operators&quot; (People in charge of making sure the computer stayed running and used the special console to interact with the operating system with &quot;godlike powers&quot;),&lt;/li&gt;&#xA;&lt;li&gt;&quot;Engineers&quot; (people that created the programs that ran on the computers)&lt;/li&gt;&#xA;&lt;li&gt;&quot;Owners/Customer&quot; (people/companies that actually paid for the hardware and software)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&quot;User groups&quot; became an extension of the concepts where groups of people that used the software to accomplish their work would meet and learn from each other. Many arcane tips and tricks were passed around in these groups, and in many cases the groups would be anchored by &quot;neck beards/guru's that were in many cases the engineers that wrote the software and were looking for ideas on how to make the software better and more usable. &lt;/p&gt;&#xA;" OwnerUserId="18521" LastActivityDate="2020-06-17T18:07:01.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15227" PostTypeId="1" AcceptedAnswerId="15234" CreationDate="2020-06-18T02:25:43.317" Score="8" ViewCount="771" Body="&lt;p&gt;If you look at a die photo of a 6502, about forty percent of the chip is taken up by what's obviously microcode, both by its regular structure and by the obvious need for such from the instruction set, which has some relatively long instructions that need to do half a dozen things in exact sequence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it's not a ROM; as explained in the answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6656/how-was-microcode-implemented-in-retro-processors&quot;&gt;How was microcode implemented in retro processors?&lt;/a&gt; it's actually a PLA, which differs from ROM in that it &quot;allows partial decoding, one entry can fire on different instructions. For example, all instructions loading the second byte as immediate share one single PLA entry (microcode line). In comparison with textbook microcode engines, this is equivalent to a kind of compressed microcode.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such compression is obviously useful. Die space is expensive; reducing the space taken up by microcode means you can make the chip cheaper, or spend the space adding more features, more performance or some combination thereof.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I understand it, later chips like the 8086 and 68000 use microcode of the conventional ROM variety.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did later chips not also use PLA's and thereby gain the advantages of compressed microcode?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="15334" LastEditDate="2021-03-05T12:37:52.627" LastActivityDate="2021-03-05T12:37:52.627" Title="Why did later CPUs use microcode instead of PLA's?" Tags="&lt;cpu&gt;&lt;chip&gt;&lt;microprocessor&gt;&lt;microcode&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15228" PostTypeId="1" CreationDate="2020-06-18T02:27:52.577" Score="4" ViewCount="184" Body="&lt;p&gt;'What' used spare memory on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TMS9918#Video_RAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;TMS9918&lt;/a&gt; Video Display Controller?&lt;/p&gt;&#xA;&lt;p&gt;By 'what', was it&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Something pre-installed on the computer like Bios or Basic or something, I assume the main cpu s themselves were not advanced enough to decide when and how to use that spare memory themselves.&lt;/li&gt;&#xA;&lt;li&gt;Or, was it done by software loaded onto the machine from external memory like disk or cassette .&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Quote from the Wikipedia page -&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Depending on the screen mode being used, not all of the video memory may be needed to generate the display. In these cases, the CPU may use the extra video memory for other purposes. For example, one use is as a scratch-pad for uncompressing graphics or sound data stored in cartridge ROM into. Another popular use is to create a second copy of some or all of the display data to eliminate flickering and tearing, a technique known as double buffering.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="16462" LastEditorUserId="6659" LastEditDate="2020-06-18T08:41:00.260" LastActivityDate="2020-06-19T06:22:29.110" Title="'What' used spare memory on the TMS9918?" Tags="&lt;hardware&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15229" PostTypeId="2" ParentId="15228" CreationDate="2020-06-18T02:52:24.750" Score="6" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I assume the main cpu s themselves were not advanced enough to decide&#xA;  when and how to use that spare memory themselves.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A CPU by itself doesn't &quot;decide&quot; to use memory for something.  That's the job of a program, whether it's running from ROM (&quot;firmware&quot;) or RAM (&quot;software&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The examples you give are clearly examples of programs being aware that they could take advantage of spare memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know this particular system, but the uses are well-known in other machines - for example using off-screen video memory for caching bitmaps.  This is like paging out to disk, but you're using a much faster storage.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-06-18T02:52:24.750" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15230" PostTypeId="1" CreationDate="2020-06-18T03:08:45.847" Score="1" ViewCount="164" Body="&lt;p&gt;Why didn't the Whirlwind I use a high persistence crt or something ?&lt;/p&gt;&#xA;&lt;p&gt;On this video &lt;a href=&quot;https://youtu.be/KH0tcv3nEQI?t=108&quot; rel=&quot;nofollow noreferrer&quot;&gt;Whirlwind I&lt;/a&gt; at 1:48, you can see the text being diplayed, it is only very briefly visible, apparently they would take a film picture and some hours ( or a day ) later see the results on the crt screen by looking at the developed film photo.&lt;/p&gt;&#xA;" OwnerUserId="16462" LastEditorUserId="6659" LastEditDate="2020-06-18T21:22:01.967" LastActivityDate="2020-06-18T21:22:01.967" Title="Why didn't the Whirlwind I use a high persistence crt or something?" Tags="&lt;display&gt;&lt;early-computer&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15232" PostTypeId="2" ParentId="15230" CreationDate="2020-06-18T08:18:22.203" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why didn't the Whirlwind I use a high persistence crt or something ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because then no dynamic display, like the ball shown at minute 11:0, could have be done?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;On this video Whirlwind I at 1:48, you can see the text being diplayed, it is only very briefly visible, apparently they would take a film picture and some hours ( or a day ) later see the results on the crt screen by looking at the developed film photo&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The oscilloscope wasn't meant as primary device to display text or textual results at all, that's what the mentioned &lt;a href=&quot;https://en.wikipedia.org/wiki/Friden_Flexowriter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Friden Flexowriter&lt;/a&gt;, shown at &lt;a href=&quot;https://youtu.be/KH0tcv3nEQI?t=634&quot; rel=&quot;nofollow noreferrer&quot;&gt;minute 10.36&lt;/a&gt; is about. It can produce printout or store results on paper tape for later processing/printing.&lt;/p&gt;&#xA;&lt;p&gt;Developing films wasn't a matter of days, but an hour at most - keep in mind, that was right after the war, when capacities had been build to do so in minutes.&lt;/p&gt;&#xA;&lt;p&gt;As said, the oscilloscope was meant to show (simple) graphics. Adding a camera to one was a standard method at the time to get a 'hardcopy'. To simplify/speedup handling the Whirlwind got two, one or direct view, the other for recording a picture when needed.&lt;/p&gt;&#xA;&lt;p&gt;It's important to keep in mind that the Whirlwind wasn't any production machine like later, but an early experimental device, created to figure out the very basics of computing. And trying to show a 'full screen' of text is one of the experiments. Simply seeing if it could be done. The full result is visible at &lt;a href=&quot;https://youtu.be/KH0tcv3nEQI?t=696&quot; rel=&quot;nofollow noreferrer&quot;&gt;minute 11.36&lt;/a&gt;. For any useful text output printing it on the Flexowiter would be way more convenient, wouldn't it? Users staring 24/7 on a screen is a way later development.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-18T08:24:29.980" LastActivityDate="2020-06-18T08:24:29.980" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15233" PostTypeId="2" ParentId="15228" CreationDate="2020-06-18T08:39:36.407" Score="6" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;For example the TI-99/4 system did store all BASIC code and variables within the 9918's RAM.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read:&lt;/h2&gt;&#xA;&lt;p&gt;The TMS 9918 acted on its own video memory, seperate from main memory. The memory could be accessed by an external system (aka main CPU) via a port, by setting an address and reading or writing a byte or stream of bytes. There was no predefined structure. It could be used to store &lt;em&gt;anything&lt;/em&gt; within. After all, they are simply byte sized cells :))&lt;/p&gt;&#xA;&lt;p&gt;It could be used for elements like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Screen&lt;/li&gt;&#xA;&lt;li&gt;Text&lt;/li&gt;&#xA;&lt;li&gt;Fonts&lt;/li&gt;&#xA;&lt;li&gt;Graphics&lt;/li&gt;&#xA;&lt;li&gt;Sprites&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Well, or, as said, &lt;strong&gt;any kind of data&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If used for screen data, they could be arranged (almost) anywhere, as registers and data structures were used to point the 9918 display logic to it's storage. This enabled it to hold several sets of screens, fonts or alike at the same time, making exchanges (flipping) quite easy and ast.&lt;/p&gt;&#xA;&lt;p&gt;In case of &lt;em&gt;&amp;quot;any data&amp;quot;&lt;/em&gt; it's RAM. Is was as with any other memory up to the program what to store where. For example the TI 99/4 used it &lt;strong&gt;to store all user data, like the BASIC code and its variables&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The ability to use the 9918's RAM for arbitrary data could enable comparably cheap systems with only a minimum of main RAM, storing all data within the video RAM, thus being able to use cheap dynamic RAM without the need to build add a RAM controller.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-19T02:47:35.583" LastActivityDate="2020-06-19T02:47:35.583" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15234" PostTypeId="2" ParentId="15227" CreationDate="2020-06-18T09:45:13.860" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;But it's not a ROM; [...] it's actually a PLA&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Then again, a ROM and a PLA is essentially the same technology. What differs here is not only the decoding, but that in case of the 6502 only the decoding part is present and it's not monotone.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Such compression is obviously useful. Die space is expensive&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;True. But it's worth to note that the cited answer says &lt;em&gt;&amp;quot;a &lt;strong&gt;kind&lt;/strong&gt; of compressed microcode&amp;quot;&lt;/em&gt; as it's not simply compressed microcode. Its savings from leaving out the data part and as well from structuring the instruction set around this feature. 'Simple' microcode leave full freedom to the instruction set designer about how to encode, aka what bit pattern results in what instruction to be taken. The 6502's way relies on arranging them in a certain structure to take advantage of the 'compression'. Not doing so will result in zero savings.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As I understand it, later chips like the 8086 and 68000 use microcode of the conventional ROM variety.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Most important here: a cleaner design (process). With classic microcode hardware design and instruction set design becomes independent or at least less tight coupled. Late changes can be included without much problems, especially if the ROM is designed a bit larger than the bare minimum.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next, the way of 'compression' used in the 6502 delegated the work to the random logic activated by each line. Where standard microcode output has dedicated functions for all blocks handled by all instructions, the 6502's way mangles this up. In some way it can be seen like spaghetti code in BASIC. Great approach for a simple task, but it soon gets out of hand when the job gets more complicated. What works for the rather simple instruction set of a 6502 with just 56 (essentially only 25) instructions and 13 (8) addressing modes doesn't work the same way for either of the 16 bit CPUs with their huge number of instructions and addressing modes.&lt;/p&gt;&#xA;&lt;p&gt;Any change here always means also a change in random logic, not just microcode data.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Which brings the issue of complexity. Where an instruction set like the 6502 features and it's execution units can be optimized and 'compressed' by hand in a reasonable time, it will be a gigantic task to do the same for a 8086 or 68k. Not saying it can't be done, but the gain will be much smaller and the risk of screwing it up much higher.&lt;/p&gt;&#xA;&lt;p&gt;Of course it may be possible to handle the additional complexity of an 8086 or 68k by a comparable small PLA, but it will most definitely increase the random logic several times, not only eating up much of the savings (or even adding) but increasing the needed effort exactly in the area point where it's hardest&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Last but not least, it's an economic decision between effort in design, cost of chip space and risk of problems/failure:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A tightly fitted system like for the 6502 simply costs more engineering time than using an rather standard microcode approach.&lt;/li&gt;&#xA;&lt;li&gt;Saved chip space is always in relation to technology. While saving a small group of transistors, like 13 for a PLA row, was a big deal for a 6502, doing the same for a 8086 or 68k would have a neglectable effect.&lt;/li&gt;&#xA;&lt;li&gt;Using an 'unconventional' approach like the 6502 did increases the risk of failure. Heck, even MOS did mangle it up with the first rund, screwing the ROR.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Especially the last points are nothing one wants to have on a small budget project meant as a short time stop-gap measure, like the 8086 was (*1). Design situation on the 6502 was a different one. They had even less funding, but way more time on their hands - and more pressure to save on size.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Long story short: Cost, time and risk outwights any possible gain.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.S.: With today's tools it might be possible to have a random logic version of either chip generated, eventually creating faster versions. But for top end results, the microcode as abstraction layer persists - sometimes even on multiple levels.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The 68k in contrast is a typical Motorola product - by the book - so microcode it is anyway.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-06-18T09:45:13.860" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15235" PostTypeId="2" ParentId="12779" CreationDate="2020-06-18T10:50:18.857" Score="0" Body="&lt;p&gt;ZX Spectrum clone &lt;a href=&quot;https://sk.wikipedia.org/wiki/Didaktik#Didaktik_Gama&quot; rel=&quot;nofollow noreferrer&quot;&gt;Didaktik Gama&lt;/a&gt; has 80KB RAM, there are two top 32KB banks. The BASIC is an almost exact copy of ZX Spectrum 48K BASIC, without any direct possibility to use the other bank.&lt;/p&gt;&#xA;&lt;p&gt;The banks could be switched by &lt;code&gt;OUT 123,0&lt;/code&gt; or &lt;code&gt;OUT 127,1&lt;/code&gt;. There are however some subtle differences between the first model and the following ones:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Didaktik Gama '87 BASIC did not care. If the &lt;code&gt;RAMTOP&lt;/code&gt; is above &lt;code&gt;#7FFF&lt;/code&gt; and you switch the bank, it will crash, because you yanked the stack away.&lt;/li&gt;&#xA;&lt;li&gt;Later models patched the &lt;code&gt;OUT&lt;/code&gt; BASIC command and if the port is 127, the &lt;code&gt;ROM&lt;/code&gt; routine will copy the original bank to the one being switched into, up to &lt;code&gt;RAMTOP&lt;/code&gt; (took a fraction of a second). Thus the banks were &amp;quot;mirrored&amp;quot; and the &lt;code&gt;RAM&lt;/code&gt; was not usable.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Though, technically speaking, if you set the &lt;code&gt;RAMTOP&lt;/code&gt; to be less than &lt;code&gt;#8000&lt;/code&gt; (the first model) or less than the default (later models), you can use &lt;code&gt;POKE&lt;/code&gt;, &lt;code&gt;PEEK&lt;/code&gt; and &lt;code&gt;OUT&lt;/code&gt; to access the memory. While true, this is not in the spirit of the original question.&lt;/p&gt;&#xA;&lt;p&gt;Very little widespread software was using the second bank (unless written individually, e.g. since the second bank survived RESET, I put a fast tape loading routine there and then it was a matter of &lt;code&gt;CLEAR&lt;/code&gt; &amp;amp; &lt;code&gt;OUT&lt;/code&gt; &amp;amp; &lt;code&gt;PRINT USR&lt;/code&gt; to initialize it). In fact, I am aware only of &lt;a href=&quot;https://busy.speccy.cz/tvorba/zxcopys.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;GAMA COPY 80&lt;/a&gt;, a tape copying program.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2020-06-18T10:50:18.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15236" PostTypeId="2" ParentId="15227" CreationDate="2020-06-18T15:23:19.143" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;As I understand it, later chips like the 8086 and 68000 use microcode&#xA;of the conventional ROM variety.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is simply not true. 68000 CPU used a combination of PLA-driven decoding and ROM-driven microcode engine. Look &lt;a href=&quot;https://dl.acm.org/doi/10.1145/1014198.804299&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://dl.acm.org/doi/10.1145/1014198.804299&lt;/a&gt; for reference (remember that there is Sci-Hub at your service if you know DOI: &lt;a href=&quot;https://sci-hub.st/https://doi.org/10.1145/1014198.804299&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sci-hub.st/https://doi.org/10.1145/1014198.804299&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Another example is LSI-11 chipset WD16xx, where there are also microcode PLA to decode PDP-11 instructions (particularly to get starting point in microcode ROM) &lt;em&gt;and&lt;/em&gt; microcode ROM (all in different chips) to execute micro-sequences.&lt;/p&gt;&#xA;&lt;p&gt;Modern amd64 CPUs first do hardwired decoding, then go into microcode ROM (or RAM, partly) to generate micro-op sequences for some architectural instructions.&lt;/p&gt;&#xA;&lt;p&gt;The general idea behind PLA vs ROM microcode is the following: with PLA (or just logic) you can easily &lt;em&gt;decode&lt;/em&gt; instruction and group similar but differently-coded instructions in a single bunch, and this is very costly to do with just ROM microcode alone (look at 68000 with 16-bit opcodes). Alternatively, executing &lt;em&gt;sequences&lt;/em&gt; of internal operations is better done with ROM microcode, hence both technologies are usually combined (starting from the venerable 68000 chip and LSI-11 chipset).&lt;/p&gt;&#xA;&lt;p&gt;8-bit CPUs are a special case, where both ROM or PLA would be approximately the same size alone, and the natural choice is to have only PLA, which also does most tasks of ROM with the help of a standalone sequencer, as it is in 6502.&lt;/p&gt;&#xA;&lt;p&gt;The answer to the question would be then &amp;quot;&lt;strong&gt;No, PLA- (or generally, logic-) directed decoding is still used, along with ROM- (or RAM-) based microcode sequencers.&lt;/strong&gt;&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2020-06-18T15:38:22.990" LastActivityDate="2020-06-18T15:38:22.990" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15237" PostTypeId="2" ParentId="12646" CreationDate="2020-06-18T18:12:53.987" Score="-1" Body="&lt;p&gt;Greek mythology.&#xA;Echo, by trying to protect Zeus, she endured Hera's wrath. Hera made her only able to speak the last words spoken to her. Thus an echo. So, echo text to screen, echo string to file. When you shout into a cave, you get an echo, it's a metaphor for saying that the object was repeated, or rebroadcasted.&lt;/p&gt;&#xA;" OwnerUserId="18532" LastActivityDate="2020-06-18T18:12:53.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15239" PostTypeId="2" ParentId="15202" CreationDate="2020-06-18T19:43:10.170" Score="1" Body="&lt;p&gt;&lt;strong&gt;Because 'user' wasn't in any way synonymous with 'customer', if it's in an organization then the organization itself might be the 'customer', but all the people who use it (in that org and everyone else who ever accesses/makes that copy) are 'users'; also, because licenses expire and PC software copying was rife back in the 1980s/1990s, so it was quite common that many of the 'users' aren't 'customers', or never had been.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Yes there is some objective history and reasoning behind this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;The analogies to hardware aren't valid&lt;/strong&gt; (CD, VCR, game consoles,  etc., or cars). You can't duplicate hardware (well not easily), and typically there is one customer and that person is also the user. This is self-evidently not the case with software.&lt;/li&gt;&#xA;&lt;li&gt;As to Facebook and Twitter 'users', they aren't 'customers', they don't pay any licensing fee, so they can't have damages, and IIUC since there isn't any 'consideration' (money or other thing of value) they don't even have a contract with FB (IANAL); (they have a 'user agreement', but that's different, its terms mutate constantly, and it's very one-sided). Facebook's actual 'customers' are the people/companies who sell advertising on it, and/or pay or have licensing agreements for access to its datastream. Hence the adage: &lt;em&gt;If you're not the customer, you're the product&amp;quot;&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;It was quite common that many of the 'users' weren't 'customers'&lt;/strong&gt;.&#xA;PC software copying was rife back in the 1980s/1990s (before US and other countries passed laws on DRM, and mandated building copy-protection/detection for content into the OS (Windows) itself and hardware (blocking or fuzzing the display of non-DRM content); there used to only be more basic software copy-protection, serial-port hardware dongles, and challenges to see if you owned the user manual (&lt;em&gt;&amp;quot;What is the second word of the fifth sentence on page 208?&amp;quot;&lt;/em&gt;). Another anecdote: AutoCAD, the most widely-used(/pirated) CAD suite, was said to only have 7 valid (= purchased) license keys in all of Russia in the early 90s.&lt;/li&gt;&#xA;&lt;li&gt;Even in a organization (or group) which had legit bought(/&amp;quot;licensed&amp;quot;) the software, the 'customer' is the organization itself (or in a group, the individual who purchased it and allows other people access to it). &lt;strong&gt;There would be many 'users' but typically at most only one 'customer'.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Update: If, as many suggest, the term User originated because it was an early and specific role, what did that role originally convey in terms of the person's competence, privileges, or restrictions regarding the machine? And does the same role definition thus roughly translate into similar expectations for a customer purchasing an early micro-computer for the home or office?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is tantamount to asking for an overview essay on the legal history of ownership(/licensing) in software, hardware and content (EULAs, shrinkwrap, DRM...), across multiple decades and jurisdictions, 1980s-current(!) That's a multi-semester course.&lt;/p&gt;&#xA;" OwnerUserId="4073" LastEditorUserId="4073" LastEditDate="2020-06-20T01:22:58.400" LastActivityDate="2020-06-20T01:22:58.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15241" PostTypeId="1" AcceptedAnswerId="15245" CreationDate="2020-06-18T22:21:35.100" Score="3" ViewCount="187" Body="&lt;p&gt;I want to print German texts with umlauts with a compiled C program on the C64. I'm aware that these characters are not in the charset and that I will have to change the character set.&lt;/p&gt;&#xA;&lt;p&gt;However, it seems that the umlauts &amp;quot;Ä&amp;quot; and &amp;quot;Ö&amp;quot; are mapped to ASCII characters $76 and $7c, which are printed as the characters &amp;quot;D&amp;quot; and &amp;quot;V&amp;quot;, which I want to keep as themselves. Is there a way to change the mapping of umlauts to ASCII in the cc65 compiler?&lt;/p&gt;&#xA;&lt;p&gt;I've used this program for testing&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;&#xA;void main (void)&#xA;{&#xA;  printf(&amp;quot;äöüÄÖÜß\n&amp;quot;); //mapped to ASCII e4 f6 fc 64 76 7c 7f 0d&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and compiled with &lt;code&gt;cl65 test.c -o test.prg&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="6659" LastEditDate="2020-06-18T23:49:26.597" LastActivityDate="2020-06-22T09:07:48.823" Title="Printing German umlauts with cc65" Tags="&lt;commodore-64&gt;&lt;cc65&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15242" PostTypeId="1" AcceptedAnswerId="15246" CreationDate="2020-06-18T22:46:18.057" Score="22" ViewCount="1778" Body="&lt;p&gt;I'm at the early stages of implementing a home-made IBM PC class computer (maybe AT class, I don't know yet). The CPU will be an actual 8088 chip, but everything else (except memory) will be programmable logic.&lt;/p&gt;&#xA;&lt;p&gt;In order to provide it with a functional BIOS (not copied or ripped from anywhere else) I'd like to know which INT BIOS functions are mandatory and which ones are optional. My goal is to be able to boot, at least, MS DOS 2.0.&lt;/p&gt;&#xA;&lt;p&gt;I can see that I will need, at least, the following interrupts:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;08h : timer&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;09h: keyboard ISR&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;1Ch : timer daisy chain&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;10h : to manage the video chip (do I need to implement all functions?)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;11h : equipment (this one is easy)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;12h : memory size (this one is easy too)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;13h : to manage the disk at the sector level (do I need to implement all functions?)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;16h : to manage the keyboard&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;19h : bootstrap loader&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Do I really need INT 15h? or 14h? or 17h? Can I just point them to an IRET instruction? I won't be implementing serial ports or parallel ports. I guess for INT 18h I can just print a &amp;quot;NO BASIC&amp;quot; message and then halt the computer, as many other BIOSes do.&lt;/p&gt;&#xA;&lt;p&gt;My implementation strategy involves writting the BIOS in parallel with the design of the system, so for testing it, I will use some IBM PC emulator until the actual computer is ready.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2020-06-19T12:00:31.277" Title="Which is the minimum set of interrupts/functions I should implement in a replacement BIOS for a home made IBM PC class computer?" Tags="&lt;ibm-pc&gt;&lt;bios&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15243" PostTypeId="2" ParentId="15202" CreationDate="2020-06-18T23:16:49.063" Score="11" Body="&lt;p&gt;The word &amp;quot;user&amp;quot; was applied to operators of word processing and office equipment well before computers were commonplace.&lt;/p&gt;&#xA;&lt;p&gt;Google Books reveals &lt;a href=&quot;https://www.google.com/search?q=%22typewriter%20user%22&amp;amp;tbas=0&amp;amp;tbm=bks&amp;amp;source=lnt&amp;amp;tbs=cdr:1,cd_min:1800,cd_max:1899&amp;amp;sa=X&amp;amp;ved=0ahUKEwjotZXutIzqAhXhPn0KHSfUClQQpwUIIA&amp;amp;biw=1792&amp;amp;bih=1023&amp;amp;dpr=2&quot; rel=&quot;noreferrer&quot;&gt;citations back to the 1890s&lt;/a&gt; for &amp;quot;typewriter user.&amp;quot; Manufacturers appeared to use this terminology as well, such as in &lt;a href=&quot;https://www.google.com/books/edition/Business_Equipment_Topics/HH5QAAAAYAAJ?hl=en&amp;amp;gbpv=1&amp;amp;dq=%22typewriter%20user%22&amp;amp;pg=RA2-PA14&amp;amp;printsec=frontcover&quot; rel=&quot;noreferrer&quot;&gt;this Remington ad&lt;/a&gt; from 1920: &amp;quot;Today, as always, the typewriter user who wishes to reach the lowest cost level of typing must go to the Remington.&amp;quot; Similarly, here the operator of an automatic inkstand &lt;a href=&quot;https://www.google.com/books/edition/Book_keeper_Detroit_Mich_1888/uWQgAQAAMAAJ?hl=en&amp;amp;gbpv=1&amp;amp;dq=copying%20machine%20%22user%22&amp;amp;pg=PA22&amp;amp;printsec=frontcover&quot; rel=&quot;noreferrer&quot;&gt;is described as a &amp;quot;user&amp;quot; in 1895&lt;/a&gt;, and much the same phrasing is used for &lt;a href=&quot;https://www.google.com/books/edition/Book_keeper_Detroit_Mich_1888/uWQgAQAAMAAJ?hl=en&amp;amp;gbpv=1&amp;amp;bsq=user&quot; rel=&quot;noreferrer&quot;&gt;the operator of a new type of eraser&lt;/a&gt; and a pencil sharpener. That one edition of &amp;quot;The Book-Keeper&amp;quot; uses the word &amp;quot;user&amp;quot; 16 times, most all referring to the person who uses office equipment. This &lt;a href=&quot;https://www.google.com/books/edition/The_Office/2RFQAAAAYAAJ?hl=en&amp;amp;gbpv=1&amp;amp;bsq=user&quot; rel=&quot;noreferrer&quot;&gt;January 1891 publication of &amp;quot;The Office: A Practical Journal of Business&amp;quot;&lt;/a&gt; uses the word &amp;quot;user&amp;quot; repeatedly to describe those making use of all kinds of office equipment and supplies.&lt;/p&gt;&#xA;&lt;p&gt;It seems logical then that as new types of automated data processing equipment began to appear, that the term &amp;quot;user,&amp;quot; which was already applied to the existing equipment, would apply to computers as well.&lt;/p&gt;&#xA;" OwnerUserId="6584" LastActivityDate="2020-06-18T23:16:49.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15244" PostTypeId="2" ParentId="15241" CreationDate="2020-06-18T23:29:02.307" Score="2" Body="&lt;p&gt;I would expect that the CC65 compiler, like most compilers, would output string literals using whatever sequence of bytes appears in the source file.  If you want to ensure that particular byte values get included in a string, you can use a backslash followed by a three-digit octal number to include any byte value within a string.  While one could use fewer than three octal digits, or else use a hexadecimal syntax, doing things those ways may yield unpleasant results if the next character in a string is interpreted as a digit.  For example, `\015FUNNY&amp;quot; or &amp;quot;\15FUNNY&amp;quot; would yield a carriage return followed by FUNNY, but &amp;quot;\015012345&amp;quot; and &amp;quot;\15012345&amp;quot; would yield a carriage return followed by the digits 012345, and a string with character code 104 (150 octal or 0x68 hex) followed by the digits 12345.&lt;/p&gt;&#xA;&lt;p&gt;Note that on the Commodore 64, I would recommend drawing direct to screen memory rather than trying to use &amp;quot;printf&amp;quot;.  It's going to be faster, and the screen codes are more predictable and easier to work with.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-06-18T23:29:02.307" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15245" PostTypeId="2" ParentId="15241" CreationDate="2020-06-18T23:38:33.733" Score="8" Body="&lt;p&gt;Your source is most likely in ISO 8859-1 (or -15) encoded (*1), so the compiler has to do code conversion between character literals in your source and the designated target. Without a specifying a target CL65 uses, unlike all other tools, the C64 target by default (*2). As specified in &lt;a href=&quot;https://github.com/cc65/cc65/blob/18afc7c7038280e2443c64e31cf2f0092a484004/src/common/target.c#L193&quot; rel=&quot;nofollow noreferrer&quot;&gt;target.c line 193&lt;/a&gt;, the C64 Target uses the PETSCII table at &lt;a href=&quot;https://github.com/cc65/cc65/blob/18afc7c7038280e2443c64e31cf2f0092a484004/src/common/target.c#L113&quot; rel=&quot;nofollow noreferrer&quot;&gt;line 113&lt;/a&gt;, which shows exatly the conversations you noted.&lt;/p&gt;&#xA;&lt;p&gt;Luckily there's a pragma called &lt;a href=&quot;https://cc65.github.io/doc/cc65.html#ss7.3&quot; rel=&quot;nofollow noreferrer&quot;&gt;charmap&lt;/a&gt; to change this. So for example if you want to position the Umlauts at the classic 7 bit &lt;a href=&quot;https://de.wikipedia.org/wiki/DIN_66003&quot; rel=&quot;nofollow noreferrer&quot;&gt;DIN 66003&lt;/a&gt; positions simply add the following lines (*3):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/* Redefinition of 8859-1 codepoints for Umlauts (&amp;quot;ÄÖÜäöüß&amp;quot;) */&#xA;/* to ISO-IR-21 aka ISO 646-DE aka DIN 66003                 */&#xA;#pragma charmap (0xE4, 0x7B)&#xA;#pragma charmap (0xF6, 0x7C)&#xA;#pragma charmap (0xFC, 0x7D)&#xA;#pragma charmap (0xC4, 0x5B)&#xA;#pragma charmap (0xD6, 0x5C)&#xA;#pragma charmap (0xDC, 0x5D)&#xA;#pragma charmap (0xDF, 0x7E)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is best put in some generic include for all sources (*4).&lt;/p&gt;&#xA;&lt;p&gt;Also keep in mind that these changes are not global but only effective afterwards and can be overwritten again by a follow up pragma charmap reassigning any of these codes.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The default mapping maps the whole 0xC0..0xDF section onto 0x60..0x6F, whichare (mostly) the upper case letters.&lt;/p&gt;&#xA;&lt;p&gt;At first glace this seems quite strange, really strange, until one realizes that this (0xC1..0xDA) is where the shifted letter keys are returned when reading the keyboard (*5). So in cases of keyboard read this might make some sense.&lt;/p&gt;&#xA;&lt;p&gt;Still, I have no idea why it's done for character literals. My assumption would be some kind of compatibility situation, or a simple left over from such. So i'd say it was a situation of compatibility vs. support or chars that are not available on a standard PETSCII machine (*6) anyway, where they had to choose which foot to shoot ... and it did hit the Umlauts (*7).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The CC65 suite assumes &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO/IEC_8859-1#Code_page_layout&quot; rel=&quot;nofollow noreferrer&quot;&gt;ISO 8859-1&lt;/a&gt;. &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO/IEC_8859-15&quot; rel=&quot;nofollow noreferrer&quot;&gt;8859-15&lt;/a&gt; differs by the Euro symbol at 0xA4 and a few other characters.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Never trust defaults. Using defaults can result in many wasted ours to learn that different programs use different defaults or act on them different. So adding a &lt;code&gt;-t c64&lt;/code&gt;is always a good idea.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Just as example, you may of course use any other assignment.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Don't change any default files, as that would make your sources even less portable.&lt;/p&gt;&#xA;&lt;p&gt;*5 - the lower case do show up at the standard positions of 0x41..0x5A.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Ignoring that real PET/CBM machines were sold in national variants, offering additional symbols by replacing certain graphic symbols, thus keeping full ASCII compatibility &lt;em&gt;and&lt;/em&gt; national characters.&lt;/p&gt;&#xA;&lt;p&gt;*7 - Which is really sad, as CC65 using ISO-8859-1 source would have allow to support all of them in a standardized fashion.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-22T09:07:48.823" LastActivityDate="2020-06-22T09:07:48.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15246" PostTypeId="2" ParentId="15242" CreationDate="2020-06-19T02:00:39.173" Score="21" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;It all boils down to the question if you want to build a &lt;strong&gt;fully IBM like system with ROM BIOS independent of DOS&lt;/strong&gt;, with all the bells and whistles attached, or if your goal can be reached with a running &lt;strong&gt;DOS with a minimum in BIOS compatibility&lt;/strong&gt;, just enough to serve whatever application need to run on top of DOS.&lt;/p&gt;&#xA;&lt;p&gt;Unlike often assumed, MS-DOS does neither use nor need ROM-BIOS. DOS only uses the services offered by it's I/O system, as Microsoft called it, or DOS-BIOS as it was often named. It's corresponding file (*1) is usually called IO.COM/IO.SYS (*2), but may have any name, like IBMBIO.COM for PC-DOS. This file contains manufacturer specific code for hardware access. In case of IBM's version of DOS, PC-DOS, IO.SYS does translate any functions called by DOS into ROM-BIOS calls - adding another layer.&lt;/p&gt;&#xA;&lt;p&gt;Going the second way would mean to implement only what DOS needs as part of DOS (or drivers), speeding up development a lot - and to a smaller extend DOS as well by reducing overhead. Only functionality for DOS is to be added, everything else only to be followed when needed.&lt;/p&gt;&#xA;&lt;p&gt;So above question can as well be put as: Do you want to 'steal' PC-DOS' IO.SYS, or adapt IO.SYS like any manufacturer licencing DOS (*3) did?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Details:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm at the early stages of implementing a home-made IBM PC class computer&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Cool, I like the Idea - I hope we'll get some information as the project goes on.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The CPU will be an actual 8088 chip,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Ever thought about using a 186/188? They are already SoCs with lots of perhiperals, although not PC compatible - but at the same time not in the way of PC-compatible I/O.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'd like to know which INT BIOS functions are mandatory and which ones are optional.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Hard to say, as this depends more on the software you're running than just DOS.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My goal is to be able to boot, at least, MS DOS 2.0.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;DOS itself won't use any BIOS interrupt. This is all delegated to OEM files, so it may differ depending on that DOS version you want to use.&lt;/p&gt;&#xA;&lt;p&gt;Skimming thru the DOS sources for &lt;a href=&quot;https://github.com/microsoft/MS-DOS/tree/master/v1.25/source&quot; rel=&quot;noreferrer&quot;&gt;1.25&lt;/a&gt; and &lt;a href=&quot;https://github.com/microsoft/MS-DOS/tree/master/v2.0/source&quot; rel=&quot;noreferrer&quot;&gt;2.0&lt;/a&gt; on Github shows that the &lt;code&gt;IO.ASM&lt;/code&gt; of DOS 1.25 stored there used direct hardware access via IN/OUT, ignoring the BIOS at all, while DOS 2.0 only includes a &lt;code&gt;SKELIO.ASM&lt;/code&gt;that seams to be made for some ALTOS machine with direct ROM calls (that is not using any INT at all).&lt;/p&gt;&#xA;&lt;p&gt;DOS was always designed to be machine independent, not relaying on any prerequisite except the bundled IO system. This independence includes the IBM-PC and its BIOS. All DOS needs is a loader bringing the first sector(s) to load the machine specific IO system (and DOS) which initializes basic components and starts DOS - which it supplies with entry points for all services. While this interface is rather CP/M like in DOS 1, it becomes fairly standard device drivers in DOS 2.0.&lt;/p&gt;&#xA;&lt;h2&gt;Interface between DOS and IO in DOS 1.0&lt;/h2&gt;&#xA;&lt;p&gt;In 1.0 DOS calls IO.SYS functions via a call table located at it's start containing short jumps to each function:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0000: JMP  INIT    ;entry point du Boot&#xA;0003: JMP  STATUS  ;check for key&#xA;0006: JMP  INP     ;read key from keyboard&#xA;0009: JMP  OUTP    ;send character to screen&#xA;000C: JMP  PRINT   ;send character to printer&#xA;000F: JMP  AUXIN   ;read character from serial&#xA;0012: JMP  AUXOUT  ;send character to serial&#xA;0015: JMP  READ    ;read sector(s) from disk (moved to INT 25h)&#xA;0018: JMP  WRITE   ;write sector(s) to disk  (moved to INT 26h)&#xA;001B: JMP  DSKCHG  ;check for disk change&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is the interface DOS uses for all its functions. It's up to IO.SYS how to implement it. Microsoft did not deliver any binary IO.SYS, but only a skeletal source for IO.SYS to be adapted and assembled by the customer. Much like CP/M before.&lt;/p&gt;&#xA;&lt;p&gt;(Disk) Read and Write are kind of special as their entry points are never called by DOS, but moved into IVT for INT 25h/26h and called that way.&lt;/p&gt;&#xA;&lt;h2&gt;Interface between DOS and IO in DOS 2.0&lt;/h2&gt;&#xA;&lt;p&gt;With DOS 2.0 the I/O system got reworked into using device drivers. To simplify writing and building IO.SYS, it got split in two parts, the (binary) module of &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/SYSINIT.ASM&quot; rel=&quot;noreferrer&quot;&gt;SYSINIT&lt;/a&gt;, supplied by Microsoft, to be linked with the customer specific code. For the later Microsoft supplied a template called &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/master/v2.0/source/SKELIO.ASM&quot; rel=&quot;noreferrer&quot;&gt;SKELIO&lt;/a&gt;. After adapting, assembling and linking it produced IO.SYS with the customer specific part at start. This time there was just a single entry point for initialisation, like before called after IO.SYS got loaded. By default only very BASIC initialisation, was required as most values were handed to SYSINIT by the linker via external references. Of course, depending on the hardware, this would be the point for any generic initialisation not done by the boot ROM - or whatever had to be done to fix problems left by the boot ROM.&lt;/p&gt;&#xA;&lt;p&gt;After the basic initialisation control was handed to SYSINIT which did setup everything DOS needs - including optional calling a user function (RE_INIT) after DOS was ready to be used, but before any further processing like processing CONFIG.SYS.&lt;/p&gt;&#xA;&lt;p&gt;The customer specific section of IO.SYS was essentially reduced to a set of &lt;a href=&quot;https://www.drdobbs.com/writing-ms-dos-device-drivers/184402277&quot; rel=&quot;noreferrer&quot;&gt;standard DOS 2.0 device driver&lt;/a&gt;s. The driver table should include the character devices CON, AUX, PRN and CLOCK and, to make DOS worthwhile, at least one disk drive. Of course, any customer/machine specific driver cold be added here, avoiding the need to load it later, thus speeding up boot.&lt;/p&gt;&#xA;&lt;p&gt;All DOS I/O is done using these devices and their functions. How they deliver them is up to customer code within the driver. It may be calling ROM routines or already optimized code.&lt;/p&gt;&#xA;&lt;h2&gt;Do as all PC manufacturers did&lt;/h2&gt;&#xA;&lt;p&gt;So unless one 'steals' IBMs proprietary IBMBIO.COM to have DOS run on a machine offering a compatible ROM BIOS, you need to write your own IO.SYS (*3).&lt;/p&gt;&#xA;&lt;p&gt;When doing so, why not make your IO.SYS an exact fit to your system? A DOS compatible system doesn't have to have a ROM BIOS. Oonly a ROM loader. The low level parts could be fully part of DOS-BIOS. This has been done many times, especially early on (*4). One example would be the Siemens PC-D. Originally a Unix work station, it got converted to a DOS PC by removing the MMU and putting the BIOS on disk.&lt;/p&gt;&#xA;&lt;p&gt;On that machine it had the nice side effect of 960 KiB continous DOS memory, as no ROMs did block address space and graphics was mapped all the way up at F8000h - in fact, there was as well an inofficial version offering 1016 KiB to DOS.&lt;/p&gt;&#xA;&lt;p&gt;Going that way might simplify bringing up the system a lot. Instead of first writing a BIOS with lots of functions not needed, just supply the functions DOS needs as a package of drivers in IO.SYS and you'll get a running system.&lt;/p&gt;&#xA;&lt;p&gt;After all, there's no reason why IO.SYS can not include BIOS code and provide all needed function for any other interrupt. That way all BIOS (and whatsoever) services can be added later on by extending IO.SYS. Or any other means like some TSR from DOS prompt :))&lt;/p&gt;&#xA;&lt;p&gt;If I ever would want to do something alike, that's the way I'd take - at least since DOS sources are available.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I can see that I will need, at least, the following interrupts: [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;None of these are used by DOS. All functions are accessed via IO.SYS and depend on implementation. 08/09 are hardware functions and need to be handeled by some hardware system, but this can be IO.SYS as well.&lt;/p&gt;&#xA;&lt;p&gt;All functions are only necessary if you want to run programs using these BIOS calls, as DOS does not (need to).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Do I really need INT 15h? or 14h? or 17h? Can I just point them to an IRET instruction? I won't be implementing serial ports or parallel ports. I guess for INT 18h I can just print a &amp;quot;NO BASIC&amp;quot; message and then halt the computer, as many other BIOSes do.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Again, all of this is only needed to support DOS application that use BIOS functions.&lt;/p&gt;&#xA;&lt;h3&gt;Caveat:&lt;/h3&gt;&#xA;&lt;p&gt;The only part where the strategy to include all BIOS into IO.SYS will fail when trying to boot some other OS. Then again, there are not many for a real mode 8088 beside DOS.&lt;/p&gt;&#xA;&lt;h2&gt;But what if one really wants all the hassles of developing a BIOS first?&lt;/h2&gt;&#xA;&lt;p&gt;(just to circumvent it later)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My implementation strategy involves writting the BIOS in parallel with the design of the system, so for testing it, I will use some IBM PC emulator until the actual computer is ready.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Works as well, but might be more work and less fun.&lt;/p&gt;&#xA;&lt;p&gt;In that case you may have to analyze whatever IO.SYS you want to use. As said before, they are vendor specific. So if the goal is to clone an IBM, it'll be IBMBIO.COM you need to disassemble - seperate for each DOS version you want to port - and check for INT calls used.&lt;/p&gt;&#xA;&lt;p&gt;Gladly Michael Steil did this already a few years ago &lt;a href=&quot;https://www.pagetable.com/?p=184&quot; rel=&quot;noreferrer&quot;&gt;for DOS 1.0&lt;/a&gt;. Skimming thru his listing it seams as if IBMBIO.COM for DOS 1 did use&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;INT 10h function 14&lt;/li&gt;&#xA;&lt;li&gt;INT 11h&lt;/li&gt;&#xA;&lt;li&gt;INT 13h function 0, 2, 3&lt;/li&gt;&#xA;&lt;li&gt;INT 14h function 0, 1, 2&lt;/li&gt;&#xA;&lt;li&gt;INT 16h function 0, 1&lt;/li&gt;&#xA;&lt;li&gt;INT 17h function 0, 1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But there are also calls to&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;INT 23h&lt;/li&gt;&#xA;&lt;li&gt;INT 21h function 15, 26, 39&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For DOS 2.0 (and each version thereafter) you need to disassemble and analyze its IBMBIO.COM again.&lt;/p&gt;&#xA;&lt;h2&gt;Is there a (basically) free BIOS&lt;/h2&gt;&#xA;&lt;p&gt;Yes, for example the &lt;a href=&quot;https://sourceforge.net/projects/opensoc86/files/bios/pcxtbios25/&quot; rel=&quot;noreferrer&quot;&gt;PCXT25BIOS on Sourceforge&lt;/a&gt; which seams rather complete. Then again, quite a lot code cluttering up the limited single megabyte of an 8088&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Well, it looks, or may look, like a file when viewed from DOS, but it's a sequence of sectors to be loaded from a fixed sector. It wasn't until DOS 2.0 that the boot code was meant to take the file location from the directory entry.&lt;/p&gt;&#xA;&lt;p&gt;*2 - I'll further stick with the name IO.SYS, for all versions&lt;/p&gt;&#xA;&lt;p&gt;*3 -This included Compaq or any other 'legal' PC-Clone, as not only ROM-BIOS but as well IBMBIO.COM was proprietary code. Microsoft only delivered example code for a IO.SYS to its customers. It wasn't until DOS 5.0 in 1991, that Microsoft did sell a DOS direct to customer, containing an IO.SYS binary ready made for using PC-compatible systems&lt;/p&gt;&#xA;&lt;p&gt;*4 - And since this is RC.SE, doing so as well, would be quite retro :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-19T12:00:31.277" LastActivityDate="2020-06-19T12:00:31.277" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15247" PostTypeId="2" ParentId="15202" CreationDate="2020-06-19T02:47:59.137" Score="3" Body="&lt;p&gt;As someone who was involved in designing minicomputers in the 70's I'd like to add that from the point of view of an engineer developing the computer they might be seen as &amp;quot;mere&amp;quot; users. Also seen in user mode vs system/kernel mode. To system code developers application programmers can be seen as &amp;quot;mere&amp;quot; users.&lt;/p&gt;&#xA;&lt;p&gt;I also agree that until the personal computer era customers who bought computers and users who programmed them were not the same people.&lt;/p&gt;&#xA;" OwnerUserId="18537" LastActivityDate="2020-06-19T02:47:59.137" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15248" PostTypeId="2" ParentId="15227" CreationDate="2020-06-19T06:06:40.480" Score="4" Body="&lt;p&gt;For those interested in the hands-on use of microcode, including how to implement a CPU (1802 - which was NOT microcoded, but a FSM control unit) and a display controller, I developed a compiler that generates the [horizontal] microcode and instruction mapper memory. &lt;a href=&quot;https://hackaday.io/project/172073-microcoding-for-fpgas&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hackaday.io/project/172073-microcoding-for-fpgas&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18538" LastActivityDate="2020-06-19T06:06:40.480" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15249" PostTypeId="2" ParentId="15228" CreationDate="2020-06-19T06:22:29.110" Score="0" Body="&lt;p&gt;The processor could access the TMS9918 memory through reading and writing registers on the VDP:&lt;/p&gt;&#xA;&lt;p&gt;Read:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;write  address to specific registers (14-bit address, so 2 regs)&lt;/li&gt;&#xA;&lt;li&gt;read byte from another register (which will trigger read from VDP RAM)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Write:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;write address to specific registers&lt;/li&gt;&#xA;&lt;li&gt;write byte to register (which will trigger write to VDP RAM)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The &amp;quot;bad&amp;quot; about this was much slower memory access, but the &amp;quot;good&amp;quot; was offloading all memory access synchronization to VDP (which also during this time refreshes the dynamic RAM plus obviously reading it for video signal generation). Some time ago I played with all of this and wrote a simple &amp;quot;demo&amp;quot; program for it:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/parallaxinc/propeller/tree/master/libraries/community/p1/All/Spin%20object%20to%20drive%20TMS9918A%20(or%20compatible)%20Video%20Display%20Processor&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/parallaxinc/propeller/tree/master/libraries/community/p1/All/Spin%20object%20to%20drive%20TMS9918A%20(or%20compatible)%20Video%20Display%20Processor&lt;/a&gt;&#xA;&lt;a href=&quot;https://github.com/parallaxinc/propeller/tree/master/libraries/community/p1/All/Spin%20object%20to%20drive%20TMS9918A%20(or%20compatible)%20Video%20Display%20Processor&quot; rel=&quot;nofollow noreferrer&quot;&gt;enter link description here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18538" LastActivityDate="2020-06-19T06:22:29.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15250" PostTypeId="2" ParentId="15242" CreationDate="2020-06-19T06:58:43.877" Score="10" Body="&lt;p&gt;Although it &lt;em&gt;was&lt;/em&gt; possible to customize MS-DOS to use machine-specific services, the actually shipping generic versions did need an IBM-compatible BIOS so you will need to provide it if you want to run unmodified DOS distributions.&lt;/p&gt;&#xA;&lt;p&gt;In addition, various programs running on top of DOS did use additional BIOS services (when they didn’t access hardware directly).  Off the top of my head, the following services may be necessary:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;10h (at least getting/setting modes and teletype print)&lt;/li&gt;&#xA;&lt;li&gt;8h/9h/1Ch (games and TSRs)&lt;/li&gt;&#xA;&lt;li&gt;13h (at least read/write sectors functions)&lt;/li&gt;&#xA;&lt;li&gt;16h (keyboard reading)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You will also need to implement the BIOS data area (BDA) at 40:0.  For example, some programs accessed the keyboard buffer or status bytes directly instead of using 16h.&lt;/p&gt;&#xA;&lt;p&gt;In the end, there’s no explicit list of minimum or maximum required interface for the BIOS, so you’ll likely need to just run the actual software you care about and implement services as you run into them.&lt;/p&gt;&#xA;" OwnerUserId="3783" LastActivityDate="2020-06-19T06:58:43.877" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15251" PostTypeId="2" ParentId="15227" CreationDate="2020-06-19T07:43:12.260" Score="6" Body="&lt;p&gt;Two interconnected moments in history with the popularity of microcode in microprocessors need to be distinguished:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Firstly, the ratio of price, volume and speed of various types of memory;&lt;/li&gt;&#xA;&lt;li&gt;Secondly, the ratio of manual labor and the development of automation, including the theory of compilers.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The heyday of the microcode came at a time when the means for automatic development of integrated circuits were just beginning to flourish, and manual development on the ruby ​​film of processor circuits with tens of thousands of transistors was already too slow.&lt;/p&gt;&#xA;&lt;p&gt;At the same time, the cost of RAM, and at all levels - from SRAM processor registers to DRAM RAM itself was still very high, which required a high code density. High code density was often achieved by manual optimization at the level of assembler and even machine codes, which required some convenience and human readability from the instruction set / processor architecture.&lt;/p&gt;&#xA;&lt;p&gt;An additional layer of some abstraction between the actual executive blocks of the processor and the code was a generally accepted compromise.&lt;/p&gt;&#xA;&lt;p&gt;And then the RISC revolution happened.&lt;/p&gt;&#xA;&lt;p&gt;PS&lt;/p&gt;&#xA;&lt;p&gt;It is also worth mentioning the problem of debugging processors.&lt;/p&gt;&#xA;&lt;p&gt;Satisfactorily prototyping the microprocessor on assemblies of ICs of small and medium integration when using PLA in the late 70s was difficult due to the physical limitations of the method. Emulating software on mainframes was difficult to impossible because of the dampness of software and the size of RAM, slowly and also took a lot of time. Debugging directly on silicon required many production cycles on the fab, which resulted in many weeks of debugging.&lt;/p&gt;&#xA;&lt;p&gt;Using microcode brought some of the debugging problems to a different, simpler level - in prototypes it was possible to replace the firmware ROM with a (even external) SRAM module and quickly identify / correct errors.&lt;/p&gt;&#xA;" OwnerUserId="11231" LastEditorUserId="11231" LastEditDate="2020-06-19T08:05:33.570" LastActivityDate="2020-06-19T08:05:33.570" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15252" PostTypeId="1" AcceptedAnswerId="15256" CreationDate="2020-06-19T14:30:53.987" Score="3" ViewCount="123" Body="&lt;p&gt;I've noticed on the &lt;a href=&quot;https://bigbookofamigahardware.com/bboah/product.aspx?id=661&quot; rel=&quot;nofollow noreferrer&quot;&gt;Big Book of Amiga Hardware site&lt;/a&gt;, that CDTV keyboard came in 2 versions, one with black caps, one with grey ones. Which one came first and with which model of CDTV?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="6659" LastEditDate="2020-06-19T16:31:29.867" LastActivityDate="2020-08-15T19:40:20.603" Title="Which Commodore CDTV models came with keyboard with grey caps" Tags="&lt;keyboards&gt;&lt;amiga-cdtv&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15253" PostTypeId="2" ParentId="2450" CreationDate="2020-06-19T17:51:37.977" Score="4" Body="&lt;p&gt;In 2014 I installed a 65CE02 (removed from an Amiga A2232 serial card) into an Apple IIe, for the purpose of confirming the bug in the 65CE02 decimal subtract, said bug having been discovered by Pavel Zima by reverse-engineering of the chip layout. In general the 65CE02 worked fine in the Apple IIe, but any speedup due to some instructions taking fewer clock cycles wasn't particularly obvious when e.g. running Applesoft BASIC programs, though I didn't measure timing of any benchmark programs.&lt;/p&gt;&#xA;&lt;p&gt;It's possible that the instruction timing differences may make access to floppy drives unreliable since the Disk II routines (e.g., RWTS in Apple DOS, and the equivalent in ProDOS and other operating systems) are critically dependent on instruction timing. I was able to boot ProDOS, but did not use it extensively, and did not do any disk writes at all.&lt;/p&gt;&#xA;&lt;p&gt;I took a few &lt;a href=&quot;https://www.flickr.com/photos/_brouhaha_/albums/72157646994467264&quot; rel=&quot;nofollow noreferrer&quot;&gt;photos&lt;/a&gt;, including comparing the output of the small decimal subtraction test between the Rockwell R65C02 and the Commodore 65CE02.&lt;/p&gt;&#xA;&lt;p&gt;To run the processor at faster than the standard clock speed is, as others have pointed out here, very difficult, requiring much additional support circuitry, because the Apple II CPU and bus timing is directly tie to the video timing.&lt;/p&gt;&#xA;&lt;p&gt;If you have an accelerator card using the 65C02, and can run it within the rated operating frequency range of the 65CE02 (up to 4 MHz for the part I used, though the datasheet claims availability of parts rated up to 10 MHz), there's a reasonable chance that the 65CE02 would work, though with the same caveat about Disk II reliability. Apple II accelerator cards have circuitry to slow to normal speed for disk access, but that doesn't help with the difference in instruction cycle counts.&lt;/p&gt;&#xA;" OwnerUserId="11178" LastActivityDate="2020-06-19T17:51:37.977" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15254" PostTypeId="2" ParentId="15202" CreationDate="2020-06-19T20:09:45.580" Score="1" Body="&lt;p&gt;Before IBM popularized personal computers which led to the dominance of Microsoft, computers were huge. They were owned by departments, institutions, universities. Nobody owned a computer. In order to program or do other work on a computer, you had to be given permission to use it. So it was a machine that you shared with many other people.&#xA;You became a &lt;strong&gt;user&lt;/strong&gt; of a computer when you belong to an organization. You don't (usually) pay a fee to use a computer so you were a user, not a paying customer.&lt;/p&gt;&#xA;" OwnerUserId="18544" LastEditorUserId="18544" LastEditDate="2020-06-19T20:23:51.947" LastActivityDate="2020-06-19T20:23:51.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15255" PostTypeId="1" AcceptedAnswerId="15257" CreationDate="2020-06-19T20:28:15.023" Score="8" ViewCount="496" Body="&lt;p&gt;How to make a disc with multiple titles on it, available to select from a menu?&lt;/p&gt;&#xA;&lt;p&gt;Did anyone have any luck creating a bootable CDTV disc using software mentioned on &lt;a href=&quot;http://eab.abime.net/showthread.php?t=66254&quot; rel=&quot;noreferrer&quot;&gt;English Amiga Board&lt;/a&gt;&#xA;and is is possible to use this method to have many games?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="3290" LastEditDate="2020-06-21T09:01:39.013" LastActivityDate="2020-12-26T06:06:33.793" Title="How to make bootable CD with multiple games for CDTV" Tags="&lt;boot&gt;&lt;cd-rom&gt;&lt;amiga-cdtv&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15256" PostTypeId="2" ParentId="15252" CreationDate="2020-06-19T20:45:49.440" Score="3" Body="&lt;p&gt;The Commodore CDTV did not come with any keyboard, mouse, or external floppy drive. These accessories were available by purchasing the optional &amp;quot;Expansion Pack&amp;quot; for ~$200.&lt;/p&gt;&#xA;&lt;p&gt;To my knowledge, all the accessories in the Expansion Pack were fully and completely black. The keyboard was identical to the contemporary keyboard that shipped with the A3000, other than being all black.&lt;/p&gt;&#xA;&lt;p&gt;While I'm open to the possibility that there were some early version keyboards that did not have black key caps, it seems a simpler explanation that over the years various other model Amiga keyboard parts have been repurposed. Also, I am only aware of a single Commodore product code for the CDTV keyboard (CD 1221).&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-06-19T20:45:49.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15257" PostTypeId="2" ParentId="15255" CreationDate="2020-06-19T20:49:33.980" Score="13" Body="&lt;p&gt;Well, a few users are creating compilation of games for the CD32 and the CDTV.&lt;/p&gt;&#xA;&lt;p&gt;The most prolific is AmigaJay. For instance here he released several compilations for CDTV including a lot of titles:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/details/amigajaycdtvcollectionvol.1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Volume 1&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/details/amigajaycdtvcollectionvol.2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Volume 2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/details/amigajaycdtvcollectionvol.3&quot; rel=&quot;nofollow noreferrer&quot;&gt;Volume 3&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/details/amigajaycdtvcollectionvol.4&quot; rel=&quot;nofollow noreferrer&quot;&gt;Volume 4&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/details/amigajaycdtvcollectionvol.5&quot; rel=&quot;nofollow noreferrer&quot;&gt;Volume 5&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/details/amigajaycdtvcollectionvol.6&quot; rel=&quot;nofollow noreferrer&quot;&gt;Volume 6&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Basically, the compilations boot with a menu (AGS or other) then run scripts to assign volumes and boot games that use the system (whdload is out of the question with only one megabyte of memory).&lt;/p&gt;&#xA;&lt;p&gt;The limitation is that games must use AmigaDOS to load data (or boot as single file). The perfect candidates are cracked versions (with passwords or diskchecks removed) not using all of a 1MB memory A500/A600 amiga (the CD drive buffers eats some memory)&lt;/p&gt;&#xA;&lt;p&gt;So games using floppy trackloading or custom loading (even cracked) can't be run. As opposed to the CD32, noone has written a routine to hardware bang the CDTV drive, so programs like &lt;a href=&quot;https://github.com/jotd666/cd32load&quot; rel=&quot;nofollow noreferrer&quot;&gt;CD32load&lt;/a&gt; (note: I'm the author of CD32load) can't be used, even if a few games only use 512k chipmem and could be adapted (Silkworm comes to mind since it runs on 1 meg A600 with CD32load in IDE mode).&lt;/p&gt;&#xA;&lt;p&gt;Since that answer was posted, a version of &lt;a href=&quot;https://github.com/jotd666/jst&quot; rel=&quot;nofollow noreferrer&quot;&gt;JST&lt;/a&gt; (note: I'm &lt;em&gt;also&lt;/em&gt; the author of JST) has been made which is useable on a CDTV using kickstart 1.3 and 1MB ram, and which can run a lot of NDOS/trackloader games by reusing the whdload slaves. The only requirement is that game memory + game data must not exceed 1 megabyte. This allowed to create &lt;a href=&quot;https://eab.abime.net/showthread.php?t=104322&quot; rel=&quot;nofollow noreferrer&quot;&gt;another compilation disc&lt;/a&gt; with titles like Silkworm, Arkanoid, and a lot of other games.&lt;/p&gt;&#xA;&lt;p&gt;Now to be able to create a bootable CDTV drive yourself, you need to use an ISO creator that is compliant with it. For instance ISOCD on amiga (there are alternatives on Windows/Linux but they're not widely spread). And the trademark file &amp;quot;CDTV.TM&amp;quot; must be provided to the ISO creating program, or the CD won't boot, even if there's a &lt;code&gt;s/startup-sequence&lt;/code&gt; file. Once the ISO image is created you can test it on WinUAE with CDTV settings, and if it works, you can burn it on a CD-R (not a CD-RW as CDTV doesn't support it)&lt;/p&gt;&#xA;&lt;p&gt;To create the compilation easily, you can use a tool that I've written in Python (with wxwidgets) called &lt;a href=&quot;https://github.com/jotd666/amiga68ktools&quot; rel=&quot;nofollow noreferrer&quot;&gt;CompilationMaker&lt;/a&gt;. It wraps AGS and creates a directory with all required files, except kickstart files and CDTV/CD32 trademark files. It can be used to create bootable harddisks or CD-ROMS.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-12-14T20:26:18.560" LastActivityDate="2020-12-14T20:26:18.560" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15258" PostTypeId="1" CreationDate="2020-06-19T23:21:22.083" Score="4" ViewCount="244" Body="&lt;p&gt;Let's say the year is 1999 or something like that. I have a PC with 400 MHz, no graphics accelerator and 64 MB RAM, and try to run some Need for Speed game or something. I notice that it goes laggy.&lt;/p&gt;&#xA;&lt;p&gt;Would upgrading to 128 MB (another identical 64 MB RAM slot) have any difference?&lt;/p&gt;&#xA;&lt;p&gt;Since the game actually ran in 64 MB mode, it must have passed the initial &amp;quot;startup check&amp;quot; where I presume it would simply refuse to run with an error message if you have too little RAM for it to actually be able to function.&lt;/p&gt;&#xA;&lt;p&gt;However, it's very doubtful to me that they actually had programmed the game so that it would &amp;quot;take advantage&amp;quot; of extra RAM. Isn't what matters how &amp;quot;fast&amp;quot; the RAM is, as long as you have enough to run the game?&lt;/p&gt;&#xA;&lt;p&gt;Or was it common for them to actually code the games so that it somehow used extra available RAM for some kind of speed-up measure which was then noticeable to the player if they bought more RAM?&lt;/p&gt;&#xA;&lt;p&gt;Note that I have no problems understanding why a faster CPU or a 3D card would make the game run smoother. I'm asking specifically about the &lt;strong&gt;amount of RAM&lt;/strong&gt; (not the speed differences between different kinds of RAM).&lt;/p&gt;&#xA;" OwnerUserId="18545" LastActivityDate="2020-06-20T05:28:17.460" Title="Back in the day, were games coded to run better with more (not faster) RAM?" Tags="&lt;ibm-pc&gt;&lt;programming&gt;&lt;ram&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2020-06-20T09:04:07.547" ContentLicense="CC BY-SA 4.0" />
  <row Id="15259" PostTypeId="1" AcceptedAnswerId="15260" CreationDate="2020-06-20T02:56:35.807" Score="50" ViewCount="10927" Body="&lt;p&gt;The claim that programs stored dates as two ASCII or similar characters because computers were limited in resources seems wrong to me because it takes more memory than one 8-bit integer would. Also in certain cases it's also slower.&lt;/p&gt;&#xA;&lt;p&gt;Storing the year as one 8-bit signed integer would give (assuming 1900 + year) a range of 1772 (1900 - 128) to 2027 (1900 + 127). An unsigned 8-bit integer gives 1900 to 2155 (1900 + 255). In either case the end result is a much wider range and half the storage and RAM requirements.&lt;/p&gt;&#xA;&lt;p&gt;In addition to perform arithmetic on the years the software would need to convert the two characters back to an integer whereas if it were stored as an integer it could be loaded without conversion. This is where the slower in certain cases comes in. In addition it could make sorting by year slower.&lt;/p&gt;&#xA;&lt;p&gt;In my view the only reason I can think of for why someone would store a year as two characters is bad programming or using a text based storage format (such as something like XML or JSON which I know those are more contemporary in comparison to programs that had the Y2K bug). Arguably you can say that choosing a text-based storage format is an example of bad programming because it's not a good choice for a very resource limited computer.&lt;/p&gt;&#xA;&lt;p&gt;How many programs stored years as two characters and why?&lt;/p&gt;&#xA;" OwnerUserId="18546" LastActivityDate="2020-06-23T17:11:43.367" Title="Did many programs really store years as two characters (Y2K bug)?" Tags="&lt;history&gt;&lt;software&gt;" AnswerCount="14" CommentCount="1" FavoriteCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="15260" PostTypeId="2" ParentId="15259" CreationDate="2020-06-20T03:30:32.650" Score="89" Body="&lt;p&gt;&lt;strong&gt;Short Answer: &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary-coded_decimal&quot; rel=&quot;noreferrer&quot;&gt;BCD&lt;/a&gt; rules over a single byte integer.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The claim that programs stored dates as two ASCII or similar characters because computers were limited in resources seems wrong to me&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The point wasn't about using ASCII or 'similar', using only two decimal digits. That can be two characters (not necessary ASCII) or two BCD digits in a single byte.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;because it takes more memory than one 8-bit integer would.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Two BCD digits fit quite nicely in 8 bits - in fact, that's the very reason a byte is made of 8 bit.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Also in certain cases it's also slower.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. In fact, on quite some machines using a single byte integer will be considerable slower than using a word - or as well BCD.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In addition to perform arithmetic on the years the software would need to convert the two characters back to an integer whereas if it were stored as an integer it could be loaded without conversion.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That is only true and needed if the CPU in question can not handle BCD native.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This is where the slower in certain cases comes in. In addition it could make sorting by year slower.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Why? Sorting is done usually not by year, but as a full date - which in BCD is 3 Byte.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In my view the only reason I can think of for why someone would store a year as two characters is bad programming&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Are you intend to say everyone during the first 40 years of IT, up to the year 2000 were idiots?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;or using a text based storage format&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now you're coming close. Ever wondered why your terminal emulation defaults to 80 characters? Exactly, it's the size of a punch card. And punch cards don't store bytes or binary information but characters. One column one digit. Storage evolved from there.&lt;/p&gt;&#xA;&lt;p&gt;And storage on mainframes was always a rare resource - or how much room do you think one can give to data when the job is to&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;handle 20k transactions per hour&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;on a machine with a&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0.9 MIPS CPU,&lt;/li&gt;&#xA;&lt;li&gt;1.5 megabyte of RAM, some&lt;/li&gt;&#xA;&lt;li&gt;2 GiB of disk storage?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That was all present to&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;serve 300-500 concurrent users&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Yes, that is what a mainframe in 1980 was.&lt;/p&gt;&#xA;&lt;p&gt;Load always outgrew increased capabilities. And believe me, shaving off a byte from every date to use only YYMMDD instead of YYYYMMDD was a considerable (25%) gain.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(such as something like XML or JSON which I know those are more contemporary in comparison to programs that had the Y2K bug).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Noone would have ever thought of such bloaty formats back then.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Arguably you can say that choosing a text-based storage format is an example of bad programming because it's not a good choice for a very resource limited computer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Been there, done that, and it is. Storing a date in BCD results in overall higher performance.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;optimal storage (3 byte per date)&lt;/li&gt;&#xA;&lt;li&gt;No constant conversion from and to binary needed&lt;/li&gt;&#xA;&lt;li&gt;Conversion to readable (mostly EBCDIC, not ASCII) is a single machine instruction.&lt;/li&gt;&#xA;&lt;li&gt;Calculations can be done without converting and filling by using BCD instructions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How many programs stored years as two characters and why?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A vast majority of mainframe programs did. Programs that are part of incredibly huge applications in worldwide networks. Chances are close to 100% that any financial transaction you do today still is done at some point by a /370ish mainframe. And these are as well the ones that not only come from punch card age and tight memory situations, but also handle BCD as native data types.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;And another story from Grandpa's vault:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;For one rather large mainframe application we solved the Y2K problem without extending records, but by extending the BCD range. So the next year after 99 (for 1999 became A0 (or 2000). This worked as the decade is the topmost digit. Of course, all I/O functions had to be adjusted, but that was a lesser job. Changing data storage formats would have been a gigantic task with endless chances of bugs. Also, any date conversion would have meant to stop the live system maybe for days (there were billions of records to convert) -- something not possible for a mission critical system that needs to run 24/7.&lt;/p&gt;&#xA;&lt;p&gt;We also added a virtual conversation layer, but that did only kick in for a small number of data records for a short time during roll over.&lt;/p&gt;&#xA;&lt;p&gt;In the end we still had to stop short before midnight MEZ and restart a minute later, as management decided that this would be a good measure to avoid roll over problems. Well, their decision. And as usual a completely useless one, as the system did run multiple time zones (almost around the world, Wladiwostock  to French Guiana), so it passed multiple roll over points that night.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-21T21:42:23.603" LastActivityDate="2020-06-21T21:42:23.603" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="15261" PostTypeId="2" ParentId="15258" CreationDate="2020-06-20T05:28:17.460" Score="13" Body="&lt;p&gt;The year you've picked has a strong influence on the answer. By 1999, most new games were being released to run under 32-bit Windows using DirectX, and were therefore running in a demand-paged multitasking virtual memory system. This has two consequences:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Checking available memory was no longer necessary - if you didn't have enough, the OS would emulate it using the pagefile&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It was no longer even possible to be sure how much memory was needed, as background processes could consume varying amounts on different systems and at different times.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In cases where there wasn't enough RAM, paging would occur, slowing the system down substamtially. Adding more RAM could fix this.&lt;/p&gt;&#xA;&lt;p&gt;If the date you'd picked was just a few years earlier - say 1996 - the situation would be different. At that time, new games that ran under protected mode DOS extenders (e.g. &amp;quot;DOS/4GW&amp;quot;) were still common, and those systems did not generally use demand paging - for those games, adding more RAM would only usually help if the game would not run at all.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-06-20T05:28:17.460" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15262" PostTypeId="2" ParentId="7529" CreationDate="2020-06-20T09:24:10.127" Score="0" Body="&lt;p&gt;It's probably just a case of two separate engineering teams solving a problem at different times or just not talking to each other.&lt;/p&gt;&#xA;&lt;p&gt;Graphics guys worked out the easiest route for them, software kernal/basic team used their encoding - later on - someone merged the two with a lookup.&lt;/p&gt;&#xA;&lt;p&gt;My guess is its just historical C64 wasn't going to change 'anything' for the sake of it - even tidiness - they probably only changed the software components they had to - for cost reasons (including dev and debugging)&lt;/p&gt;&#xA;&lt;p&gt;Involve humans in a design over time and you get compromises - layers of compromises - the C64 was not the first computer these departments and groups inside CBM built so it gets some baggage.&lt;/p&gt;&#xA;" OwnerUserId="18547" LastActivityDate="2020-06-20T09:24:10.127" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15263" PostTypeId="2" ParentId="15259" CreationDate="2020-06-20T14:45:29.953" Score="12" Body="&lt;p&gt;There are actually still RTC chips on the market which store the year only as a pair of BCD digits, and do not have a century field.  These are usually packed into one byte when read, in common with the fields for day-of-month, month-of-year, hour, minute, and second.  The same format is used for the alarm settings.&lt;/p&gt;&#xA;&lt;p&gt;Old software using these chips would simply prefix the year digits with 19 for display.  Current systems using them would prefix 20.  The problem rears its ugly head whenever the system is used in a century that it wasn't designed for - so potentially also in the year 2100.&lt;/p&gt;&#xA;&lt;p&gt;If an RTC chip existed that counted in binary instead of BCD, then it could handle years in two and a half centuries without trouble.  An old machine adding 1900 to the stored year would not see any rollover trouble until after the year 2155.  This would however require the host system to convert binary to decimal for display - not a problem for a PC, a minicomputer, or even an 8-bit microcomputer, but potentially a burden for extremely lightweight embedded systems.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-06-20T14:45:29.953" CommentCount="35" ContentLicense="CC BY-SA 4.0" />
  <row Id="15264" PostTypeId="2" ParentId="15004" CreationDate="2020-06-20T17:08:58.360" Score="9" Body="&lt;p&gt;Despite the other answers posted here, Forth generally performs &lt;em&gt;significantly worse&lt;/em&gt; on the 6502 than an optimizing C cross-compiler like CC65. In tests I did comparing it to Tali Forth 2 for the 65C02 [1], which generates the fastest type of Forth code called STC, Forth code is sometimes on par with the C equivalent but more often 5-10 times slower. As far as I can tell, these are the main reasons:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;All values pushed on the stack in Forth become 16 bit, which takes the 6502 a lot longer to manipulate than 8-bit values. C, on the other hand, has 8-bit types which are much faster to work with.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Forth words constantly adjust the data stack as they push and pop things, while C functions tend to do most of the stack allocation at the beginning and end of a function, which is much more efficient.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;6502 Forths don't generally do any optimization, even when enough information exists at compile time to do so. Something like &amp;quot;drop 5&amp;quot; in Forth will increase the stack pointer to do the drop then immediately decrease it to push the 5, so you get the useless series INX / INX / DEX / DEX. CC65 optimizes this type of inefficiency out in some but not all cases.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;6502 Forths also don't optimize for constants. CC65 outputs more efficient assembly for something like &amp;quot;foo&amp;lt;&amp;lt;3;&amp;quot; than &amp;quot;foo&amp;lt;&amp;lt;bar;&amp;quot; since the number of shifts is known at compile time. Forth generates the same code in both cases, always using the most compatible but slowest version.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Constraining the programmer to only modifying the top levels of the stack produces less efficient code. For example, you can't step over the first item on the stack and add something to the second. The equivalent &amp;quot;swap 5 + swap&amp;quot; wastes time on the two swap operations to get the value to the top of the stack and back into second place, while C can just directly modify any item on the stack.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;CC65 is not perfect, but you're unlikely to get anything near as fast as that without writing the assembly yourself.&lt;/p&gt;&#xA;&lt;p&gt;[1] &lt;a href=&quot;http://calc6502.com/RobotGame/summary.html&quot; rel=&quot;noreferrer&quot;&gt;http://calc6502.com/RobotGame/summary.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18549" LastEditorUserId="18549" LastEditDate="2020-06-30T12:56:14.170" LastActivityDate="2020-06-30T12:56:14.170" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15265" PostTypeId="2" ParentId="15259" CreationDate="2020-06-20T17:46:25.970" Score="51" Body="&lt;p&gt;I programmed in Cobol for nearly 20 years at the start of my career and it was quite common to see two digit years used. Initially this was due to storage concerns - not necessarily only memory, but disk storage also.&lt;/p&gt;&#xA;&lt;p&gt;Cobol has no intrinsic date field.&lt;/p&gt;&#xA;&lt;p&gt;It was very common to store dates in Cobol like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;01 EMP-HIRE-DATE.&#xA;     03 EMP-HIRE-DATE-YY    PIC 99.&#xA;     03 EMP-HIRE-DATE-MM  PIC 99.&#xA;     03 EMP-HIRE-DATE-DD   PIC 99.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If it’s 1970, you may not think your program is going to be used for another 30 years... it was more important to save those two bytes. Multiplied out by multiple fields and millions of rows, it all adds up when storage is a premium.&lt;/p&gt;&#xA;&lt;p&gt;As 2000 started approaching, people had to start dealing with this. I worked for a company that had software that dealt with contracts and the end dates started stretching into 2000’s in the mid-80’s. As a rookie, I got to deal with fixing that.&lt;/p&gt;&#xA;&lt;p&gt;There were two ways. First, if it was feasible, I added&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;03 EMP-HIRE-DATE-CC  PIC 99.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To every date field. It ended up looking like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;01 EMP-HIRE-DATE.&#xA;     03 EMP-HIRE-DATE-YR.&#xA;          05 EMP-HIRE-DATE-CC.   PIC 99.&#xA;          05 EMP-HIRE-DATE-YY    PIC 99.&#xA;     03 EMP-HIRE-DATE-MM  PIC 99.&#xA;     03 EMP-HIRE-DATE-DD   PIC 99.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But in Cobol, you can’t just change that if it is a record description of a file... Cobol has fixed length records, so if you insert two bytes in the middle, you have to create a new file, read all the records in the old format, move them to the new record format, and write to the new file. Then “swap” the file back to its original name. If you are dealing with huge datasets you needed lots of disk space and time to do all that. And also rebuild all the programs.&lt;/p&gt;&#xA;&lt;p&gt;When it wasn’t feasible, we added code when printing or displaying dates.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;IF EMP-HIRE-DATE-YY &amp;gt; 50&#xA;   MOVE 19 TO PRINT-HIRE-DATE-CC&#xA;ELSE&#xA;   MOVE 20 TO PRINT-HIRE-DATE-CC.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This bought another 50 years...&lt;/p&gt;&#xA;" OwnerUserId="4213" LastEditorUserId="4213" LastEditDate="2020-06-21T02:33:28.173" LastActivityDate="2020-06-21T02:33:28.173" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15266" PostTypeId="2" ParentId="15259" CreationDate="2020-06-20T18:10:15.940" Score="24" Body="&lt;p&gt;To add to Raffzahn's answer, here's an example from a 1958 book on data processing:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Sn6U3.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Sn6U3.jpg&quot; alt=&quot;Standard IBM punched card with literature reference coded&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;… The names of authors are coded in columns 11-14. The first four consonants of the name form the code. &lt;strong&gt;The last two digits of the year of the reference are punched directly into columns 15-16&lt;/strong&gt;. The journal, or other source for the reference, is coded in columns 17-20. …&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(from &lt;em&gt;&lt;a href=&quot;https://archive.org/details/PunchedCardsTheirApplicationsToScienceAndIndustry/page/n259/mode/2up?q=year&quot; rel=&quot;noreferrer&quot;&gt;Punched Cards Their Applications To Science And Industry&lt;/a&gt;&lt;/em&gt;. 2nd ed. Edited by Robert S. Casey, James W. Perry, Madeline M. Berry and Allen Kent. New York, Reinhold Publishing Corp; 1958; emphasis mine. The card image shows &lt;code&gt;52&lt;/code&gt;, assumed to mean 1952, in the noted columns)&lt;/p&gt;&#xA;&lt;p&gt;This book barely touches on computer applications, since &lt;a href=&quot;https://en.wikipedia.org/wiki/Unit_record_equipment&quot; rel=&quot;noreferrer&quot;&gt;unit record&lt;/a&gt; usage was more prevalent at the time. Computers inherited these tabular data formats, and the physical inertia of the data format — cardboard boxes containing millions of records — meant that tabular years stuck around for a very long time. The book does have a couple of mentions of dealing with centuries, but the typical outlook can be summarized by the quotation from p.&lt;a href=&quot;https://archive.org/details/PunchedCardsTheirApplicationsToScienceAndIndustry/page/n341/mode/2up?q=century&quot; rel=&quot;noreferrer&quot;&gt;326&lt;/a&gt; “&lt;em&gt;The century is neglected inasmuch as most entries for this particular file are in the 20th century&lt;/em&gt;”. Would you spend/waste 2½% of your available fields in a record just to encode something you (probably) won't use?&lt;/p&gt;&#xA;&lt;p&gt;Data, especially government data, sticks around for a long time. Consider this: &lt;a href=&quot;https://www.usatoday.com/story/news/nation/2020/06/10/irene-triplett-last-civil-war-pensioner-73-monthly-dies/5333830002/&quot; rel=&quot;noreferrer&quot;&gt;the last person to receive a US Civil War pension died in May 2020&lt;/a&gt;. The US Civil War ended in 1865. Tabulating equipment didn't come in until the 1880s. Bytes didn't happen until 1956. JSON was this century. So data formats tend to be what the past gives you.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-06-20T18:10:15.940" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15267" PostTypeId="2" ParentId="15259" CreationDate="2020-06-20T21:03:08.770" Score="6" Body="&lt;p&gt;The NORAD &lt;a href=&quot;https://en.wikipedia.org/wiki/Two-line_element_set&quot; rel=&quot;noreferrer&quot;&gt;Two Line Element&lt;/a&gt; format remains in wide use for cataloging satellite orbits. Originally intended for punched cards, it uses a two character year. Years &amp;lt;57 are defined to be in the 21st century. It may be &lt;a href=&quot;https://celestrak.com/NORAD/documentation/gp-data-formats.php&quot; rel=&quot;noreferrer&quot;&gt;supplanted soon&lt;/a&gt;, though. The immediate problem is not years, but the number of trackable objects in orbit.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2020-06-20T21:03:08.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15268" PostTypeId="2" ParentId="15259" CreationDate="2020-06-20T22:25:57.160" Score="8" Body="&lt;p&gt;Another point that hasn't yet been mentioned is that many programs would store data in whatever format it was keyed in.  If data was stored as six digits YYMMDD, that's what data-entry clerks would be expected to type.  For a program to store data as YYYYMMDD, it would be necessary to either have clerks enter an extra two digits per record, or have software compute an extra two digits based upon the two digits of the year the person typed.  Keeping information as typed, but using modular arithmetic so that 01-99=02 wouldn't necessarily be any more difficult than having to add extra logic at the data entry stage.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-06-20T22:25:57.160" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15269" PostTypeId="2" ParentId="15004" CreationDate="2020-06-21T04:15:58.253" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I know that the Z80 and the 6502 are very different, but I was wondering if there are &amp;gt;any languages on a higher level than assembly which can generate compact and efficient &amp;gt;8-bit machine code by design for either of them (or any other 8-bit CPU from that era), &amp;gt;and how this was achieved?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I've been working on my own high-level language &amp;quot;Higgs&amp;quot; which targets 6502,65C02,68000,68040, RISC DSP and recently started working on Z80 backend.&lt;/p&gt;&#xA;&lt;p&gt;The output (build script called from within Notepad++) is an assembler file that is then fed into the local assembler/linker of the respective platform.&lt;/p&gt;&#xA;&lt;p&gt;The feature list of the language depends directly on the target platform's abilities. Each HW target has different set of unique features, dictated by the addressing modes / asm capabilities of the platform. Arrays on 6502 are very different than arrays on 68000 or DSP RISC.&lt;/p&gt;&#xA;&lt;p&gt;Each target however supports global/local/register variables, global/local constants, structures, arrays, functions (with optional parameters), loops, conditions, nested blocks (helps with formatting and namespace pollution), 3-parameter math expressions, signed math (if present), increment/decrement (var++, var--).&lt;/p&gt;&#xA;&lt;p&gt;My basic rule is that I never include a new feature unless I can guarantee that the code generated by my compiler is identical to the code I would write manually, directly in ASM.&lt;/p&gt;&#xA;&lt;p&gt;From experience of writing my own game in it (~25,000 lines of Higgs so far), it's exponentially faster to write/debug/test new code compared to ASM. Less than 0.01% of code is still written in ASM, the rest is Higgs.&lt;/p&gt;&#xA;&lt;p&gt;I will be adding Z80/Next backend soon.&lt;/p&gt;&#xA;&lt;p&gt;If you could only have 3 features that would increase your productivity, this is what gives you most return:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;conditions&lt;/li&gt;&#xA;&lt;li&gt;math expressions&lt;/li&gt;&#xA;&lt;li&gt;scope-based variables/constants {}&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Here's an example (68000 target: hence d0-d7/a0-a7 registers, .b, .w, .l sizing, etc.), showing how high-level it is (compared to ASM) and that it really feels almost like C, and is thus very easy to come back to, after 6 months, and quickly understand and adjust the code (unlike hand-written ASM that mostly evokes deep WTF feelings):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Render_LaserShots:&#xA;{&#xA;    local long lpMain&#xA;&#xA;    {   ; Player LS&#xA;        colorQuad = #$FFA080&#xA;        SLaserShot.InitRegister (LaserShots)&#xA;        loop (lpMain = #MaxLaserShots)&#xA;        {&#xA;            if.l (SLaserShot.IsActive == #1)&#xA;            {&#xA;                d1 = #0 - SLaserShot.X&#xA;                d2 = SLaserShot.camY&#xA;                d3 = #0 - SLaserShot.camZ&#xA;                SetCamPos32 (d1,d2,d3)&#xA;                Render_obj3DList_Object (LaserShotMeshPtr,#PolyCount_LaserShot)&#xA;            }&#xA;            SLaserShot.Next ()&#xA;        }&#xA;    }&#xA;    {   ; ShootingEnemy  LS&#xA;        SEnemy.InitRegister (MainEnemy)&#xA;        if.l (SEnemy.State == #AI_STRAFE)&#xA;        {   ; Only Render Enemy's LS if he is active&#xA;            colorQuad = #$40FF40&#xA;            SLaserShot.InitRegister (EnemyLaserShots)&#xA;            loop (lpMain = #MaxLaserShots)&#xA;            {&#xA;                if.l (SLaserShot.IsActive == #1)&#xA;                {&#xA;                    d1 = #0 - SLaserShot.X&#xA;                    d2 = SLaserShot.camY&#xA;                    d3 = #0 - SLaserShot.camZ&#xA;                ;   print3 (d1,d2,d3,#50,#20)&#xA;                    SetCamPos32 (d1,d2,d3)&#xA;                    Render_obj3DList_Object (LaserShotMeshPtr, #PolyCount_LaserShot)&#xA;                }&#xA;                SLaserShot.Next ()&#xA;            }&#xA;        }&#xA;    }&#xA;rts&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18555" LastEditorUserId="18555" LastEditDate="2020-06-29T08:16:35.013" LastActivityDate="2020-06-29T08:16:35.013" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15270" PostTypeId="2" ParentId="15004" CreationDate="2020-06-21T06:19:54.983" Score="0" Body="&lt;p&gt;This is my experience with C on z80 and 6502:&lt;/p&gt;&#xA;&lt;p&gt;Zilog Z80/z88dk&lt;/p&gt;&#xA;&lt;p&gt;the code generated is pretty decent, not as good as hand written assembly but good enough for lots of purposes. One advantage on Z80 in relation to C is existence of IX/IY registers that are used for local variable access/parameters passing. Of course they aren't as efficient as register parameters but it still works good with C paradigm. I tested switching to static variables there was a difference but small.&lt;/p&gt;&#xA;&lt;p&gt;6502/cc65&lt;/p&gt;&#xA;&lt;p&gt;I'm not familiar with 6502 assembly too much but aware of general architecture. When I compiled the code with and without static variables for 6502 the impact was very big (IIRC up to 50%) I can't compare with hand written code since I have not experience.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line there is a big difference in processor architecture. Zilog Z80 is much more C friendly, it as decent stack, index registers that allow quite straight forward implementation of many C paradigms, calling conversions etc. While 6502 is much more limited in implementing reenterable code or using stack bases variables.&lt;/p&gt;&#xA;" OwnerUserId="16098" LastActivityDate="2020-06-21T06:19:54.983" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15271" PostTypeId="2" ParentId="15259" CreationDate="2020-06-21T07:41:01.733" Score="7" Body="&lt;p&gt;The mainframes have been covered. Let's look at what led up to the PC which of course is where a lot of business software evolved.&lt;/p&gt;&#xA;&lt;p&gt;Many PC programmers had previously been programmers for 8-bit systems, and had grown up on the &amp;quot;every cycle counts&amp;quot; mentality. Many programs for MS-DOS had ports for older 8-bit systems, too, so would have often followed the same internal formats.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Most 8-bit CPUs (and also the 16-bit CPU used in IBM PCs) had specific BCD instructions, which operated on one pair of decimal digits.&lt;/li&gt;&#xA;&lt;li&gt;Most 8-bit CPUs did &lt;em&gt;not&lt;/em&gt; have &lt;strong&gt;multipy&lt;/strong&gt; or &lt;strong&gt;divide&lt;/strong&gt; (or &lt;strong&gt;mod&lt;/strong&gt;) instructions at all! To convert from binary to base 10 and back was a lot of work and involved loops or tables. OK, you could use two BCD bytes for a 4-digit number, but if you wanted to, e.g. subtract one date from another it would have required maybe five times as many assembly instructions/cycles.&lt;/li&gt;&#xA;&lt;li&gt;In terms of RAM, having each date take an extra byte or two is one thing—having 5-10 extra instructions to deal with it was not worth it when you have 64KB of RAM or less. Consider that even by just typing the number &amp;quot;86&amp;quot; the program would have to add 1900 to it.&lt;/li&gt;&#xA;&lt;li&gt;Assembly language instructions don't just take up space—assembly language programming is hard! Every instruction took up a line of screen space, had potential for a bug, and consumed a bit of the programmer's headspace. (Everyone was confident at working with BCD; it has now fallen by the wayside because of high-level languages.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While we're on the topic of screen space, many programs didn't even &lt;em&gt;display&lt;/em&gt; a leading &amp;quot;19&amp;quot; on the screen. (Hello—40 character screen width!) So there was hardly any point at all for the program to keep track of that internally.&lt;/p&gt;&#xA;" OwnerUserId="647" LastEditorUserId="647" LastEditDate="2020-06-21T13:49:38.390" LastActivityDate="2020-06-21T13:49:38.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15272" PostTypeId="2" ParentId="15259" CreationDate="2020-06-21T11:32:22.473" Score="6" Body="&lt;p&gt;Even systems that stored the year as a byte often just printed &amp;quot;19&amp;quot; in front of the value. So the year 2000 (stored as 100) would be printed as 19100 or 1910 or 1900 depending on exactly how the number was converted from a byte to printable characters.&lt;/p&gt;&#xA;&lt;p&gt;Of course a lot of systems didn't even both printing the 19, they just printed 100/01/01 or 00/01/01. Similarly date entry systems often only accepted two digits making it impossible to enter years beyond 1999.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-06-21T11:32:22.473" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15276" PostTypeId="2" ParentId="15259" CreationDate="2020-06-21T15:04:48.160" Score="7" Body="&lt;p&gt;Back in olden times (1960s and earlier), when data came on Hollerith cards (80 columns, 12 rows), using 2 extra columns (of the 80 available) to store the fixed string &amp;quot;19&amp;quot; as part of a date seemed useless.&lt;/p&gt;&#xA;&lt;p&gt;Having more than 80 columns of data meant that one had to use multiple cards, and lost several columns to the overhead needed to say &amp;quot;I'm with him&amp;quot;, plus the extra programming effort to validate the pairing.&lt;/p&gt;&#xA;&lt;p&gt;Hardly anybody thought their code would still be in use when &amp;quot;19&amp;quot; changed to &amp;quot;20&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Anybody who stores fixed field size dates as &amp;quot;yyyymmdd&amp;quot; has a Y10K problem pending.&lt;/p&gt;&#xA;" OwnerUserId="11232" LastActivityDate="2020-06-21T15:04:48.160" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15277" PostTypeId="2" ParentId="15259" CreationDate="2020-06-21T18:23:31.657" Score="7" Body="&lt;p&gt;Additional examples:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;In banking, many computations have historically used binary-coded decimal (BCD) as a compromise between space, speed, and consistent rounding rules.  Floating point was uncommon, slow, and difficult to round off consistently.  So even things like interest rates might be stored in fixed-point BCD.  Something like an interest rate might be stored as four BCD digits, in two byes, with an implicit decimal point after the first digit.  Thus, your account could pay interest rates from 0.000% to 9.999%, which seemed perfectly sufficient, because a bank would &lt;em&gt;never&lt;/em&gt; pay 10% or more.  This thinking left 1970s programmers scrambling to update data structures when high inflation and new types of accounts like Certificates of Deposit crossed that threshold.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When gas prices first cross the $1/gallon threshold, many of the pumps could not be set with the actual value.  Though that was largely a mechanical limitation rather than what we would consider a computing problem today, the thinking that led to the situation was largely the same:  reduce costs by not bothering to enable values that were unimaginably large at design time.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;[Apocryphal] When the first 9-1-1 emergency dispatch service was put into use in Manhattan, legend says its database schema hadn't anticipated five-digit apartment numbers, leading to delays of paramedics reaching sick or injured high-rise dwellers.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In the 1990s, phone numbers in North America Number Plan were all of the form (AAA) BBB-CCCC, and the second A was always a 0 or 1, and the first B could not be a 1.  (There were other restrictions, too, but they aren't relevant here.)  By exploiting the well-known restrictions, the contact management software on your PC could represent a phone number with a 32-bit value, saving disc space and RAM (at the run time cost of a little bit swizzling to encode and decode the values).  But the soaring popularity of fax machines, pagers, modems, and cell phones drove demand for phone numbers until North America ran out of area codes, causing software publishers to scramble to update their software to use less elegant space-saving tricks.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It's not always about memory savings or binary-coded decimal.  Sometimes it's about space on a form or a display.  In high-end software for stock trading, display space is at a premium.  When it first seemed the DOW Jones Industrials Average could potentially break $10,000.00, there was concern about whether these displays would show the additional digit, and whether there was room for a thousands separator.  If the values were truncated or displayed in other confusing ways, would it slow down the traders who relied on these system?  Could it trigger a DOW10K panic sell off if it confused them into thinking the value had plummeted?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4022" LastActivityDate="2020-06-21T18:23:31.657" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15278" PostTypeId="1" AcceptedAnswerId="15285" CreationDate="2020-06-21T19:49:21.787" Score="12" ViewCount="316" Body="&lt;h1&gt;What new opcodes were added to Motorola MC6801/MC6803?&lt;/h1&gt;&#xA;&lt;p&gt;Background for the question, and what I've figured out so far (correct me if I'm wrong):&lt;/p&gt;&#xA;&lt;p&gt;The Motorola MC6801 (and MC6803) had an &amp;quot;enhanced instruction set&amp;quot;; it added 10 new instructions to the MC6800's base instruction set, expanding it from 72 to 82. Reading the &lt;a href=&quot;http://www.lucidtechnologies.info/6803_instr.pdf&quot; rel=&quot;noreferrer&quot;&gt;6803 instruction set summary&lt;/a&gt;, I've found 9 new instructions: &lt;code&gt;ABX&lt;/code&gt;, &lt;code&gt;ADDD&lt;/code&gt;, &lt;code&gt;ASLD&lt;/code&gt;, &lt;code&gt;LDD&lt;/code&gt;, &lt;code&gt;MUL&lt;/code&gt;, &lt;code&gt;PULX&lt;/code&gt;, &lt;code&gt;PUSHX&lt;/code&gt;, &lt;code&gt;STD&lt;/code&gt; and &lt;code&gt;SUBD&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For the tenth new instruction, it seems that &lt;code&gt;ASLD&lt;/code&gt; can use the equivalent mnemonic &lt;code&gt;LSLD&lt;/code&gt; (both with opcode &lt;code&gt;$05&lt;/code&gt;). It operates on the new D register, after all, so it must be new, but it seems a little strange to count an alternative mnemonic as a &amp;quot;new instruction&amp;quot;, so I might be missing something here? Especially because the summary also lists new mnemonics for the other &lt;code&gt;ASL&lt;/code&gt; instructions (like &lt;code&gt;ASLA&lt;/code&gt; now has the synonymous &lt;code&gt;LSLA&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Curiously, the &lt;code&gt;ASL&lt;/code&gt; instruction with the addressing mode &amp;quot;indexed&amp;quot; is listed as opcode &lt;code&gt;$68&lt;/code&gt;, while the indexed &lt;code&gt;LSL&lt;/code&gt; has opcode &lt;code&gt;$65&lt;/code&gt;. I don't really understand why all the &lt;code&gt;ASL&lt;/code&gt;/&lt;code&gt;LSL&lt;/code&gt; mnemonics would be synonymous and have the same opcodes except the indexed one. I'll assume this is a typo, unless I'm missing something obvious here.&lt;/p&gt;&#xA;&lt;p&gt;Of course, new instructions weren't all that was changed. New addressing modes for existing instructions were also added. At least one of them replaced an undocumented opcode on the MC6800: The infamous &amp;quot;HCF&amp;quot; instruction with opcode &lt;code&gt;$9D&lt;/code&gt; was replaced by a &lt;code&gt;JSR&lt;/code&gt; with direct addressing mode (as I briefly mentioned in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14442/what-6800-assembler-to-use&quot;&gt;this question&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;I can look through the entire instruction set summary, checking off each opcode to find any new addressing modes, but perhaps someone here knows, or knows if there's a simple overview anywhere. And even if I have to resort to that, I can't really reconcile indexed &lt;code&gt;ASL&lt;/code&gt;/&lt;code&gt;LSL&lt;/code&gt; having two different opcodes, so a secondary source on that would be great either way to see if it's a typo or not.&lt;/p&gt;&#xA;&lt;p&gt;So: Is there an overview of what new opcodes were added to this CPU, both new instructions and addressing modes?&lt;/p&gt;&#xA;" OwnerUserId="15661" LastActivityDate="2020-06-22T11:24:51.857" Title="What are the added opcodes for MC6801/MC6803?" Tags="&lt;instruction-set&gt;&lt;6800&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15279" PostTypeId="1" AcceptedAnswerId="15385" CreationDate="2020-06-21T20:14:48.080" Score="8" ViewCount="130" Body="&lt;p&gt;The Fairchild F8 CPU, the F3850, has 64 scratchpad registers.&lt;/p&gt;&#xA;&lt;p&gt;The first 12 of these are directly addressable by several instructions. For example, the opcodes &lt;code&gt;$CX&lt;/code&gt; add the contents of scratchpad register &lt;code&gt;X&lt;/code&gt; to the accumulator, for values from &lt;code&gt;$0&lt;/code&gt; through &lt;code&gt;$B&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Scratchpad registers 12, 13 and 14 are not addressable this way; the corresponding opcodes instead indirectly accesses the scratchpad register currently addressed by the ISAR (Indirect Scratchpad Addressable Register). For example, opcode &lt;code&gt;$CC&lt;/code&gt; does not add scratchpad 12 to the accumulator, but instead it adds whichever scratchpad register is currently addressed by ISAR. &lt;code&gt;$CD&lt;/code&gt; does the same but post-increments ISAR, and &lt;code&gt;$CE&lt;/code&gt; post-decrements ISAR instead.&lt;/p&gt;&#xA;&lt;p&gt;So what about opcode &lt;code&gt;$CF&lt;/code&gt;? One would think that it would add scratchpad register 15 to the accumulator, since there are no more special addressing modes for ISAR. &lt;a href=&quot;http://channelf.se/veswiki/index.php?title=Opcode&quot; rel=&quot;noreferrer&quot;&gt;This opcode table I found&lt;/a&gt; seems to suggest that's the case.&lt;/p&gt;&#xA;&lt;p&gt;However, the &lt;a href=&quot;http://www.bitsavers.org/components/fairchild/f8/67095664_F8_Guide_To_Programming_1976.pdf&quot; rel=&quot;noreferrer&quot;&gt;F8 Guide to Programming&lt;/a&gt; says otherwise in Appendix D:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ILiHW.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ILiHW.png&quot; alt=&quot;Scratchpad register addressing&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This instead suggests that 15 can't be accessed directly like this, implying that &lt;code&gt;$CF&lt;/code&gt; perhaps simply is an illegal opcode.&lt;/p&gt;&#xA;&lt;p&gt;Note that scratchpad register 15 has an alternate name, &lt;code&gt;QL&lt;/code&gt;, which is used in opcodes &lt;code&gt;$03&lt;/code&gt; and &lt;code&gt;$07&lt;/code&gt; which are &lt;code&gt;LR A,QL&lt;/code&gt; and &lt;code&gt;LR QL,A&lt;/code&gt; respectively. So the effects of &lt;code&gt;$4F&lt;/code&gt; and &lt;code&gt;$5F&lt;/code&gt;, which would be &lt;code&gt;LR A,15&lt;/code&gt; and &lt;code&gt;LR 15,A&lt;/code&gt; respectively, are already covered there. So either &lt;code&gt;$4F&lt;/code&gt; and &lt;code&gt;$5F&lt;/code&gt; are illegal but covered elsewhere, or they have the exact same effect as those other opcodes.&lt;/p&gt;&#xA;&lt;p&gt;So who is right? Can scratchpad register 15 be directly addressed or not (either undocumented or not)? And if not, do the corresponding opcodes have any effect?&lt;/p&gt;&#xA;" OwnerUserId="15661" LastEditorUserId="3290" LastEditDate="2020-06-22T03:31:32.017" LastActivityDate="2020-06-29T21:02:59.907" Title="Is scratchpad register 15 directly addressable on the F3850 (except as QL)?" Tags="&lt;instruction-set&gt;&lt;undocumented-opcodes&gt;&lt;registers&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15280" PostTypeId="1" CreationDate="2020-06-22T03:30:20.227" Score="3" ViewCount="284" Body="&lt;p&gt;So I asked &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8272/what-is-this-old-pc-truck-game&quot;&gt;this question&lt;/a&gt; a while back asking for help with identifying a retro computer game, and got the answer I was looking for. Thus, I've decided to ask for help identifying another retro game from my early childhood. This one must be really obscure, because I've scoured the Internet searching for it but can't find a single thing about it. I hope somebody remembers it too. (I also figured this question was appropriate for the Retrocomputing Exchange since Windows XP is a discontinued &amp;quot;retro&amp;quot; operating system.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Information&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The game was a &lt;strong&gt;mid-2000s educational computer game&lt;/strong&gt;, probably for &lt;strong&gt;Windows XP&lt;/strong&gt; (but it could also have been Windows 7?), which taught really basic arithmetic if I remember correctly - addition, subtraction, multiplication and division, on the level of 2 x 2 and 3 + 1. It had color graphics and I seem to recall it being colorful and well-illustrated.&lt;/p&gt;&#xA;&lt;p&gt;The main game was laid out as a &lt;strong&gt;board game&lt;/strong&gt;, kind of like a virtual version of the Candyland board, where each step on the board was a math-themed minigame. If you beat the minigame by solving math problems, you could advance to the next spot on the board. If you reached the end of the board, you won the game.&lt;/p&gt;&#xA;&lt;p&gt;The minigames I specifically remember are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Toucan Game:&lt;/strong&gt; A toucan that had different colors of berries, which you had to count.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Egyptian Tomb Game:&lt;/strong&gt; An Egyptian tomb where math problems were written on the sarcophagi, and you had to answer them quickly (I remember this minigame being particularly difficult for my younger self, and while I know the game is not Funky Mummy Addition, that is basically the idea of this minigame and how it worked.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I'm almost positive that the game was &lt;em&gt;not&lt;/em&gt; JumpStart, Reading Rabbit, etc. The graphics are not what I remember and they're laid out like adventure games, not board games.&lt;/p&gt;&#xA;&lt;p&gt;I hope this is enough information for somebody to identify what it is! It's been bothering me for years.&lt;/p&gt;&#xA;" OwnerUserId="11170" LastEditorUserId="11170" LastEditDate="2020-06-22T21:36:38.133" LastActivityDate="2020-06-22T21:36:38.133" Title="What is this 2000s-era Windows XP or earlier educational computer game?" Tags="&lt;identify-this-game&gt;&lt;identify-this-software&gt;" AnswerCount="0" CommentCount="7" ClosedDate="2020-06-22T22:41:43.677" ContentLicense="CC BY-SA 4.0" />
  <row Id="15281" PostTypeId="1" CreationDate="2020-06-22T03:45:23.693" Score="3" ViewCount="29" Body="&lt;p&gt;Earlier I had found that many but not all TRS-80 Model I and Model III disks begin with the three bytes &lt;code&gt;00h FEh 11h&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is the beginning of the boot sector where the CPU interpets it as a &lt;code&gt;NOP&lt;/code&gt; followed by a &lt;code&gt;CMP&lt;/code&gt; that is then ignored. Its real purpose is to declare which track is the directory track is on, which by default is &lt;code&gt;11h&lt;/code&gt;, track 17.&lt;/p&gt;&#xA;&lt;p&gt;But just now I've discovered that just about as many disks start the boot sector without the &lt;code&gt;NOP&lt;/code&gt; and just with &lt;code&gt;FEh &lt;/code&gt;11h`.&lt;/p&gt;&#xA;&lt;p&gt;These TRS-80s had many DOSes from different companies which were mostly intercompatible. But sometimes there was a Model I version and a Model III version of the same DOS since the machines were not 100% compatible.&lt;/p&gt;&#xA;&lt;p&gt;Do we know if certain DOSes used the &lt;code&gt;NOP&lt;/code&gt; with the track number then on the third byte and other DOSes put the track number on the second byte with no &lt;code&gt;NOP&lt;/code&gt;. Or do we know if this was a difference between Model 1 and 3 versions of the same DOS? Or something else?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-06-22T03:45:23.693" Title="On the TRS-80 models I and III when is the directory track number written in the third byte of sector zero, and when in the second byte?" Tags="&lt;floppy-disk&gt;&lt;operating-system&gt;&lt;trs-80&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15282" PostTypeId="1" AcceptedAnswerId="15287" CreationDate="2020-06-22T04:12:53.610" Score="10" ViewCount="330" Body="&lt;p&gt;&lt;a href=&quot;https://electrickery.hosting.philpem.me.uk/comp/trs80-4p/dmkeilImages/trstech.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;DMK&lt;/a&gt; is a low-level disk image file format used by TRS-80 Model I &amp;amp; Model III, &lt;a href=&quot;http://www.classiccmp.org/cpmarchives/trs80/mirrors/www.discover-net.net/%7Edmkeil/coco/cocotech.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tandy Color Computer&lt;/a&gt;, &lt;a href=&quot;http://archive.worldofdragon.org/index.php?title=Tape%5CDisk_Preservation#DMK_File_Format&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dragon 32 &amp;amp; 64&lt;/a&gt;, and &lt;a href=&quot;https://github.com/lutris/openmsx/blob/master/doc/DMK-Format-Details.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSX&lt;/a&gt; emulators. It's capable of representing copy-protected disks and all &amp;quot;WD-1771 and WD-19xx controller functions and formats&amp;quot;. So far I'm only digging into the TRS-80 Model I/III side of things.&lt;/p&gt;&#xA;&lt;p&gt;The DMK format seems to be a bit vague to me probably due to assuming a relatively deep level of knowledge about how the disk format and drive controller work at a low level. But maybe I'm just missing something.&lt;/p&gt;&#xA;&lt;p&gt;The format starts with a 16-byte header that describes the disk geometry. Then there is the first 128-byte track header section containing a list of 16-bit &amp;quot;offsets&amp;quot; to each &amp;quot;IDAM&amp;quot; in the track. An IDAM is an &amp;quot;ID Address Mark&amp;quot;. The two high bits of an offset are flags.&lt;/p&gt;&#xA;&lt;p&gt;After this section the doc says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The actual track data follows the header and can be viewed with a hex&#xA;editor showing the raw data on the track. If the virtual disk doesn't&#xA;have bits 6 or 7 set of byte 4 of the disk header then each single&#xA;density data byte is written twice, this includes IDAMs and CRCs (the&#xA;CRCs are calculated as if only 1 byte was written however). The IDAM&#xA;and sector data each have CRCs, this is just like on a real disk.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I guess &amp;quot;raw data&amp;quot; is the key. Because the actual sector data starts at offset 0x0108 of the DMK file, which leaves 120 bytes between the IDAM table and the sector data, which must be internal/low-level &amp;quot;raw&amp;quot; data. But I can't find this part documented. How can I make sense of it?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm even more confused. I found a tool for viewing DMK files that helped me realize a few more of my DMKs have this little directory track declaration, but their offsets occur at locations varying by a number of bytes from the start of the disk image. But it can't be very analog because the DMK files are still all the same size.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-06-25T15:32:56.760" LastActivityDate="2021-01-09T14:10:50.513" Title="Understanding the DMK disk image file format used by TRS-80 emulators" Tags="&lt;floppy-disk&gt;&lt;emulation&gt;&lt;file-format&gt;&lt;disk-image&gt;&lt;trs-80&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15283" PostTypeId="2" ParentId="15259" CreationDate="2020-06-22T08:06:34.010" Score="6" Body="&lt;p&gt;You may not remember the enormous market share that IBM occupied in the business computing space in the 20th century. I don't mean just the mainframe market where S/360, S/370, S/390 &amp;amp; their successors play, but also the much larger (in terms of units) midrange/small business market occupied by the S/3, S/32, S/34, S/36, S/38, AS/400, and their successors. IBM's midrange systems were ubiquitous in smaller businesses and in branch offices of mega-corporations around the world, and at their peak they brought in $14 billion annually to IBM.&lt;/p&gt;&#xA;&lt;p&gt;To be successful in this target market, these systems had to be far more affordable than a mainframe. And since &amp;quot;inexpensive&amp;quot; disk storage cost around $10,000 per GB in 1990, disk capacities were small by modern standards. You might only have 13 MB -- yes, MEGABYTES -- of total disk capacity to work with online on a S/32. That's to serve a corporate operation with reveneues of $250 million and up (that's IBM's definition of &amp;quot;small business&amp;quot;) and running accounting, billing, payroll, inventory control, manufacturing production control, and similar applications, which are all about DOLLARS and DATES.&lt;/p&gt;&#xA;&lt;p&gt;And these were all EBCDIC machines.&lt;/p&gt;&#xA;&lt;p&gt;So yeah, absolutely, EVERYONE used 2-digit years on these systems prior to Y2K.&lt;/p&gt;&#xA;&lt;p&gt;Fortunately, disks got cheaper in the late 1990s, and thousands of contract programmers put out Y2K consulting shingles at about the same time. In the 3 years from 1997 to 1999, most of the mess got cleaned up. I'm sure that here and there, a dental office had billing with dates in the wrong century, or a mortgage amortization schedule showed negative dollars owed after the turn of the millenium, but the truly bad-news applications that could hurt customers on a massive scale got fixed before zero hour on December 31, 1999, 23:59:59 UTC.&lt;/p&gt;&#xA;" OwnerUserId="18573" LastEditorUserId="18573" LastEditDate="2020-06-22T08:21:29.363" LastActivityDate="2020-06-22T08:21:29.363" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15284" PostTypeId="2" ParentId="15259" CreationDate="2020-06-22T09:09:16.537" Score="8" Body="&lt;p&gt;I worked with IBM minicomputers (S/36, S/38, and AS/400) in the 1980s and 1990s.  The very ugly programming language RPG was popular.  It looked very different from Cobol but had similar abilities.  It supported only two data types: fixed length alphanumeric and fixed precision decimal numeric.  The numeric variables could be &lt;em&gt;zoned&lt;/em&gt; which meant one digit per byte or &lt;em&gt;packed&lt;/em&gt; which was two digits per byte.  Storage of dates varied quite a lot but the most common was as 6 digit numbers rather than separate year, month, and day.  Usually, but not always, these would be YYMMDD in the database so that the sorting would be sensible.&lt;/p&gt;&#xA;&lt;p&gt;Numeric fields were always signed so the last half of the last byte was reserved for the sign (hex F for + and hex D for -).  So, a 6 digit number required 4 bytes rather than 3 and the first half of the first byte was unused.  This allowed a trick when year 2000 became an issue: the unused first half of the first byte could be used for a century flag: 0 for 19xx and 1 for 20xx.  The format is usually described as CYYMMDD.  Systems which use this format will have a 2100 or 2900 problem but the culprits won't be around to see it.  Actually, many systems will have a problem sooner as 6 digit format is still popular for display and entry.  Arbitrary cut off dates, e.g. 40, are used to guess the century when 6 digits are entered.  So, 010195 is assumed to be 1995 but 010115 is assumed to be 2015.  So, a problem is due in next couple of decades for some but it won't be as bad as the year 2000 since at least the database can cope beyond the limit.&lt;/p&gt;&#xA;&lt;p&gt;On BCD and performance, BCD is not necessarily much or any slower since machines intended for business use usually have hardware support.  Also, conversion to and from human readable format is simpler.  Many business programs will display and accept entry of data far more often than perform arithmetic on it so even if there was an arithmetic performance impact it would typically be outweighed by the I/O gains.&lt;/p&gt;&#xA;&lt;p&gt;Not relevant to dates but BCD is useful for money.  Try adding 0.01 up 100 times in a float or double and then comparing it to 1.00.  BCD gets this right but float and double don't.  Accountants get very upset if the balance sheet is off even by a cent.&lt;/p&gt;&#xA;" OwnerUserId="7805" LastActivityDate="2020-06-22T09:09:16.537" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15285" PostTypeId="2" ParentId="15278" CreationDate="2020-06-22T11:17:38.290" Score="9" Body="&lt;p&gt;MC6800 supports 197 opcodes and MC6801 (and MC6803) supports 220 opcodes.&lt;/p&gt;&#xA;&lt;p&gt;So there are 23 new opcodes defined:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;ABX  ($3A)&lt;/li&gt;&#xA;&lt;li&gt;ADDD ($C3, $D3, $E3, $F3)&lt;/li&gt;&#xA;&lt;li&gt;ASLD ($05)&lt;/li&gt;&#xA;&lt;li&gt;BRN  ($21)&lt;/li&gt;&#xA;&lt;li&gt;JSR  ($9D)&lt;/li&gt;&#xA;&lt;li&gt;LDD  ($CC, $DC, $EC, $FC)&lt;/li&gt;&#xA;&lt;li&gt;LSRD ($04)&lt;/li&gt;&#xA;&lt;li&gt;MUL  ($3D)&lt;/li&gt;&#xA;&lt;li&gt;PSHX ($3C)&lt;/li&gt;&#xA;&lt;li&gt;PULX ($38)&lt;/li&gt;&#xA;&lt;li&gt;STD  ($DD, $ED, $FD)&lt;/li&gt;&#xA;&lt;li&gt;SUBD ($83, $93, $A3, $B3)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Since JSR instruction already existed, extending the instruction with new addressing mode might, or might not be included in the list of new instructions.&lt;/p&gt;&#xA;&lt;p&gt;The new BRN instruction, BRanch Never, is only useful during debugging when replacing other branch instructions for test purposes, so it would not be useful under normal circumstances. Hard to say if that counts as a new instruction.&lt;/p&gt;&#xA;&lt;p&gt;Additionally, the MC6801/MC6803 manual defines new instruction mnemonics as aliases for existing mnemonics, so these will have the same opcodes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BHS (alias for BCC)&lt;/li&gt;&#xA;&lt;li&gt;BLO (alias for BCS)&lt;/li&gt;&#xA;&lt;li&gt;LSL (alias for ASL)&lt;/li&gt;&#xA;&lt;li&gt;LSLD (alias for ASLD)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Finally, they also improved the CPX instruction to update the C flag instead of just N/Z/V flags, to allow for use of all branching instructions.&lt;/p&gt;&#xA;&lt;p&gt;In MC6801/MC6803 documentation, everything stated above are included in a list of new instructions, including the aliases, JSR, BRN, and CPX changes, but in that document they don't state a number how many new instructions there are.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2020-06-22T11:24:51.857" LastActivityDate="2020-06-22T11:24:51.857" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15286" PostTypeId="2" ParentId="15259" CreationDate="2020-06-22T12:54:50.147" Score="6" Body="&lt;p&gt;Many fixed record text formats (with or without COBOL copybook definitions) used two digit years, and some do still in this year. So it does not only affect storage format (like in databases) but also interchange formats. Those formats deliberately did not use binary representations but did try to be compact.&lt;/p&gt;&#xA;&lt;p&gt;This happened way into the 90ies, where everybody knew about the upcoming millennial change.&lt;/p&gt;&#xA;&lt;p&gt;Funny side note, many systems used the year 2020 as cutoff, which results in a increased problem rate this year, again.&lt;/p&gt;&#xA;&lt;p&gt;Even in standardized EDI Formats like X.12 or EDIFACT you see the 4 digits years optional. The &lt;a href=&quot;https://service.unece.org/trade/untdid/d03a/tred/tred2379.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Date or Time Period Format Code 2379&lt;/a&gt; for example starts with code &amp;quot;&lt;code&gt;2&lt;/code&gt;&amp;quot; being &lt;code&gt;DDMMYY&lt;/code&gt;. (And back then I was a really bad idea to allow more then one unique format for each instant type). One of the major drivers for switching EDIFACT syntax version from 3 to 4 in 1998 was the 8 digit date stamps in UNB service segment.&lt;/p&gt;&#xA;&lt;p&gt;Another example would be the VDA fixed record messages used in the (German) automotive sector, things like VDA 4912 from 1991 specify delivery date in 6 digits (or even shorter with week numbers). They have been in used way past 2000.&lt;/p&gt;&#xA;" OwnerUserId="18581" LastEditorUserId="18581" LastEditDate="2020-06-23T17:11:43.367" LastActivityDate="2020-06-23T17:11:43.367" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15287" PostTypeId="2" ParentId="15282" CreationDate="2020-06-22T14:11:54.643" Score="10" Body="&lt;p&gt;I support DMK in my MSX emulator, and bear in mind that it's a bit of a confused file format. It has a bunch of design deficiencies, and was clearly tightly coupled to the program that originally implemented it. But starting with the perfectly sensible stuff:&lt;/p&gt;&#xA;&lt;p&gt;The first 16 bytes are the header, which you seem to be familiar with — write protection, geometry, track size, etc.&lt;/p&gt;&#xA;&lt;p&gt;From there on are a bunch of track images. Each track image is the length you got from the header, and they're interleaved by side. So you can find track &lt;code&gt;t&lt;/code&gt; on side &lt;code&gt;s&lt;/code&gt; of a &lt;code&gt;q&lt;/code&gt;-sided disk (i.e. 1-sided or 2-sided) with track lengths of &lt;code&gt;n&lt;/code&gt; at file offset:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;(t*q + s)*n + 16&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;i.e. immediately after the 16-byte header, on a double-sided disk, you'll see the track image for side 0, track 0. Then you'll see side 1, track 0. Then side 0, track 1; side 1, track 1; side 0, track 2, etc, etc.&lt;/p&gt;&#xA;&lt;p&gt;The first 128 bytes of each track image are a list of IDAM pointers and single/double density flags. So the first 128 bytes of each track image aren't actually on the original floppy disk, they're just part of this file format.&lt;/p&gt;&#xA;&lt;p&gt;As you note, an IDAM is an ID Address Mark. This relates to how floppy disks work — they're always spinning and a floppy controller just receives an incoming stream of data bits. Having stepped to the track it wants, to read a given sector the controller then has to sit and wait until that particular sector goes past.&lt;/p&gt;&#xA;&lt;p&gt;How does it tell where the sectors begin? Through the presence of an IDAM. Standard IBM System 34 disk encoding as used by most computers is an ID Address Mark, then an address ending with a CRC, then a gap, then a data (or deleted data) mark, then sector data and another CRC, then another gap to the next IDAM.&lt;/p&gt;&#xA;&lt;p&gt;This is where DMK starts to go off the rails a little:&lt;/p&gt;&#xA;&lt;p&gt;Obviously repeating every byte twice for single-density disks is a complete fiction, likely invented so that the one-size-for-all-tracks model worked. When dealing with sectors marked as single-density, just discard every other byte from the original file.&lt;/p&gt;&#xA;&lt;p&gt;On a real disk, address and data marks are specially-crafted so as to be unambiguous, by dropping a clock bit. This file format doesn't attempt to preserve that. Instead it tells you where the address marks are in a separate table. It doesn't tell you anything about where the data marks are. You have to make an educated guess.&lt;/p&gt;&#xA;&lt;p&gt;The file format also records FM and MFM marks as looking the same. This is likely a misunderstanding of the author based on the control commands a WD1770 accepts. But:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;where an IDAM is recorded, you should see an &lt;code&gt;0xfe&lt;/code&gt; in the track image;&lt;/li&gt;&#xA;&lt;li&gt;there'll then be a standard address — one byte track address, one byte side number, one byte sector number, one byte length (log 2, minus seven*), then two bytes of CRC;&lt;/li&gt;&#xA;&lt;li&gt;some number of gap bytes will follow;&lt;/li&gt;&#xA;&lt;li&gt;eventually you'll see either a &lt;code&gt;0xfb&lt;/code&gt; or &lt;code&gt;0xf8&lt;/code&gt;. That's your data mark. &lt;code&gt;0xfb&lt;/code&gt; is regular data, &lt;code&gt;0xf8&lt;/code&gt; is deleted data. I don't know about the specifics of the TRS-80 but it's very common not to use the deleted data mark as it's not that useful if you have an actual filing system;&lt;/li&gt;&#xA;&lt;li&gt;the contents of the sector are then the number of bytes after that corresponding to the sector size, followed by another two bytes for the CRC.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;* i.e. if the byte value stored for sector length is &lt;code&gt;m&lt;/code&gt; then the sector is &lt;code&gt;1 &amp;lt;&amp;lt; (m + 7)&lt;/code&gt; bytes long. Or &lt;code&gt;128 &amp;lt;&amp;lt; m&lt;/code&gt; if you prefer — if &lt;code&gt;m&lt;/code&gt; is 0 then the sector is 128 bytes long, if &lt;code&gt;m&lt;/code&gt; is &lt;code&gt;1&lt;/code&gt; then the sector is 256 bytes long, etc.&lt;/p&gt;&#xA;&lt;p&gt;So now you've got an algorithm for transcribing a DMK track back into an actual floppy disk:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;skip to track location;&lt;/li&gt;&#xA;&lt;li&gt;read IDAM table;&lt;/li&gt;&#xA;&lt;li&gt;move to the end of the IDAM table;&lt;/li&gt;&#xA;&lt;li&gt;output all bytes from there until the first indicated IDAM;&lt;/li&gt;&#xA;&lt;li&gt;discard the byte at the IDAM and write an actual IDAM;&lt;/li&gt;&#xA;&lt;li&gt;output the next six bytes, forming the address mark;&lt;/li&gt;&#xA;&lt;li&gt;keep outputting whatever you find until you see a &lt;code&gt;0xfb&lt;/code&gt; or &lt;code&gt;0xf8&lt;/code&gt;. Remember to throw away every other byte if this is flagged as a single-density sector;&lt;/li&gt;&#xA;&lt;li&gt;throw away the &lt;code&gt;0xfb&lt;/code&gt; or &lt;code&gt;0xf8&lt;/code&gt; and write a data or deleted data mark;&lt;/li&gt;&#xA;&lt;li&gt;output every following byte (or every other re: single density) for the declared length of the sector plus its CRC;&lt;/li&gt;&#xA;&lt;li&gt;return to step 4, now with an eye on the next IDAM; or&lt;/li&gt;&#xA;&lt;li&gt;if there is no next IDAM, just write out all remaining bytes until the end of the track.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Supposing you're interested in a tool just to extract a particular sector, you can jump to the appropriate track, check out the IDAM table, use it to look up all the address marks, check those addresses for the sector you're looking for and then search forward for the associated data if you find it.&lt;/p&gt;&#xA;&lt;p&gt;That's why you're seeing stuff like directory contents at different locations in different DMKs. Within a track the sectors can come in any order. Even when they come in the same order, they can be rotated arbitrarily since this file format is not rigorous as to the location of the index hole. E.g. if a real floppy disk had sectors tagged as &lt;code&gt;1, 2, 3, 9, 5&lt;/code&gt; then it is technically valid to encode that as a DMK as sectors in the order &lt;code&gt;1, 2, 3, 9, 5&lt;/code&gt; or &lt;code&gt;2, 3, 9, 5, 1&lt;/code&gt; or &lt;code&gt;3, 9, 5, 1, 2&lt;/code&gt; or the other two rotations of that.&lt;/p&gt;&#xA;&lt;p&gt;(Aside: it might be that the author intended the index hole always to be at the start of a track image, but the specification doesn't say that so your mileage may vary.)&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2021-01-09T14:10:50.513" LastActivityDate="2021-01-09T14:10:50.513" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15288" PostTypeId="2" ParentId="15128" CreationDate="2020-06-22T15:44:01.553" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How did the parity check DRAM chips work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They are standard 4116 like their brothers. No special workings here.&lt;/p&gt;&#xA;&lt;p&gt;Parity check itself was done by the same chip as used for parity generation, a &lt;a href=&quot;https://www.ti.com/lit/ds/sdls152/sdls152.pdf?ts=1592844029340&quot; rel=&quot;nofollow noreferrer&quot;&gt;74LS280&lt;/a&gt; (U94), and signalled as NMI with reason on bit 7 (80h) of port 62h, which is port C of the 8255 in U36.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In particular, is there a reason for the gap in the motherboard (IBM calls this system board) between the parity check DRAM and the &amp;quot;normal&amp;quot; DRAM above it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure, a nice and orderly look.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This makes the board tidier and aligns the U28 socket with the RAM parity chips to the right.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Looks good, doesn't it?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there a reason for this gap?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A nice and pleasing look.&lt;/p&gt;&#xA;&lt;p&gt;Say, why should it be unusual for board designers to have a sense of symmetry?&lt;/p&gt;&#xA;&lt;p&gt;In my experience, being a hardware engineer often comes with a heightened desire of orderly structures, which is as well supported with design guidelines taught at school and later enforced by layout guidelines of companies - like IBM had.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;It's rewarding and pleasing to look at ones creation, more so if made proper.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;While this is still true today, it's even more relevant for back then, when a board like for an Apple II or IBM-PC wasn't layouted in five days, but took several weeks, if not month of intense work (*1).&lt;/p&gt;&#xA;&lt;p&gt;Having said that, there are also several practical reasons. Having chips nicely aligned eases layout, simplifies debugging and likewise patching. This is especially helpful in an environment like with IBM, where average batch sizes were counted in dozends or hundrets. Here other details are more important than shaving of a few penny in board size or development time.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A lesser question is whether there are any products that utilised the ROM expansion socket (labelled U28)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The only instance I know was a friend who placed a monitor program there, but that wasn't really a product. I guess there were others. The PC very much started as a disk based machine, ROMs didn't play any major role anymore - not even the ROM-BIOS itself.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - If I do layout today, I spend way more time making it look nice - including pleasant staggering of traces, then it takes to get a circuit to work.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-22T20:40:09.213" LastActivityDate="2020-06-22T20:40:09.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15289" PostTypeId="1" CreationDate="2020-06-22T21:39:30.167" Score="8" ViewCount="261" Body="&lt;p&gt;The M6800 had a few illegal opcodes, including the (in)famous &lt;code&gt;HCF&lt;/code&gt; (Halt and Catch Fire). The following illegal opcodes were revealed in &lt;a href=&quot;http://spivey.oriel.ox.ac.uk/wiki3/images/1/1a/Undoc6800.pdf&quot; rel=&quot;noreferrer&quot;&gt;BYTE Magazine, December 1977&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$14&lt;/code&gt;: &lt;code&gt;NBA&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$87&lt;/code&gt;: &lt;code&gt;STAA&lt;/code&gt; immediate&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$C7&lt;/code&gt;: &lt;code&gt;STAB&lt;/code&gt; immediate&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$8F&lt;/code&gt;: &lt;code&gt;STS&lt;/code&gt; immediate&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$CF&lt;/code&gt;: &lt;code&gt;STX&lt;/code&gt; immediate&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$9D&lt;/code&gt;/&lt;code&gt;$DD&lt;/code&gt;: &lt;code&gt;HCF&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In addition, &lt;a href=&quot;https://x86.fr/investigating-the-halt-and-catch-fire-instruction-on-motorola-6800/&quot; rel=&quot;noreferrer&quot;&gt;this article&lt;/a&gt; reveals these additional illegal opcodes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;$15&lt;/code&gt;: &lt;code&gt;NOP&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$CD&lt;/code&gt;/&lt;code&gt;$ED&lt;/code&gt;: &lt;code&gt;HCF&lt;/code&gt; with slightly different behavior&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;$FD&lt;/code&gt;: &lt;code&gt;HCF&lt;/code&gt; but slower&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Okay, that's all well and good. I only listed them all because the first article I linked to, from BYTE Magazine in December 1977, says the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Some of those codes seem to be just NOPS: they do nothing. Others change the flags in the condition code register according to some pattern that is, as yet, undeciphered.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What are these additional illegal opcodes on the M6800, which are not listed above? And has someone deciphered their flag changing patterns in the intervening 42.5 years?&lt;/p&gt;&#xA;" OwnerUserId="15661" LastActivityDate="2020-06-22T21:39:30.167" Title="Behavior of lesser known illegal M6800 opcodes" Tags="&lt;6800&gt;&lt;undocumented-opcodes&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15291" PostTypeId="2" ParentId="9041" CreationDate="2020-06-23T01:22:42.877" Score="7" Body="&lt;p&gt;The BC-7 had a SQL like query language called ESCORT. You could indeed write a simple query in this manner: SELECT * FROM FILENAME OUTPUT TO PRINTER [] and this would dump the contents of a file.&lt;/p&gt;&#xA;" OwnerUserId="18588" LastActivityDate="2020-06-23T01:22:42.877" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15292" PostTypeId="1" CreationDate="2020-06-23T03:15:50.833" Score="7" ViewCount="1500" Body="&lt;p&gt;I am trying to build the most simple CPU possible. And doing it on bread boards. There is a popular movement, one of the biggest protagonists of that being a certain Ben Eater, who is a good teacher, and has a YouTube channel.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; I realize that my original question was meandering and lengthy and not really targeted well. Also that there is a question if it should be in scope of the Retrocomputing stack exchange. The question had received some very interesting variety of answers, when it was shut down, but then, based on popular interest, it was re-opened again.&lt;/p&gt;&#xA;&lt;p&gt;First to get this out of the way: this is &lt;em&gt;clearly&lt;/em&gt; in scope of the RC stack exchange because 4 bit computing is as retro as it gets. While my angle is to create my own computer using TTL chips -- which too is as retro as it gets -- one may say hat it's not about any &lt;em&gt;one&lt;/em&gt; commercial retro computers. While it isn't about any &lt;em&gt;one&lt;/em&gt;, it is in a way about all of them. I am looking at 6502 block diagrams, at PDP-8 ISA and schematics, as the 4004 and TMS-1000.&lt;/p&gt;&#xA;&lt;p&gt;What I am finding is the understanding why the designers of old had built the systems the way they did. And I more and more reach a hypothesis that what the designers of old did was not by accident but because they pretty much mapped the space of what is possible. That's why I keep asking if there isn't some fundamental law here?&lt;/p&gt;&#xA;&lt;p&gt;I have digested many of the answers, and continued thinking through and wiring up the design of a 4 bit CPU, I can try to target my question better. But I won't just change it as I do not want to invalidate the excellent answers that have already been given.&lt;/p&gt;&#xA;&lt;p&gt;The issue with many of the answers is this: they are theoretical and way out of the box. However, they raise the question: why didn't the designers of old choose these approaches? That isn't to say that none of the suggested answers are something nobody had ever done successfully, but the more esoteric ideas just didn't make it in practice, and this is probably for a reason.&lt;/p&gt;&#xA;&lt;p&gt;So, for example, the Turing machine was known for a very long time, when tape was en vogue, yet nobody had marketed a Turing machine. Because it is just not practically useful! Likewise, this Brainfuck language is cool but it actually isn't practical.&lt;/p&gt;&#xA;&lt;p&gt;So let me be more clear as what we're trying to do here:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;von Neumann machine&lt;/li&gt;&#xA;&lt;li&gt;a &amp;quot;traditional&amp;quot; machine language&lt;/li&gt;&#xA;&lt;li&gt;imperative programming, not some other FSA or event transducer approach&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I find it really interesting to think a completely different approach but it's not in scope for my question here. One commenter had pointed to a &lt;a href=&quot;http://anycpu.org/forum/viewtopic.php?f=3&amp;amp;t=372&amp;amp;start=15&quot; rel=&quot;nofollow noreferrer&quot;&gt;fascinating forum thread at &amp;quot;anycpu&amp;quot;&lt;/a&gt;, but the specific example is simply an FSA where each state plus new event leads to another state. It's interesting but out of scope and doing the trade-off on the side of memory, since now your instruction step has to carry the address of the next instruction step in it, every instruction becomes a jump, that's cool, but not really efficient on the memory.&lt;/p&gt;&#xA;&lt;p&gt;Sure, I can see that this works nicely for a calculator program, as I can write a YACC parser to essentially implement the standard calculator in the state automaton: reactive state -&amp;gt; event (key press) -&amp;gt; action+next state model. I can put that in hardware, yet, so could the designers of old. And still they ended up with a traditional von Neumann machine to program their calculator with.&lt;/p&gt;&#xA;&lt;p&gt;It's probably not because they didn't know any better. I guess that's my point.&lt;/p&gt;&#xA;&lt;p&gt;I will add some updates below too to sharpen more what I have found while further pulling my hair out trying to get something off the ground.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Anyway, I want to build something simpler. Less wiring. So I thought I scale the word width down to 4 bit 74LS173 and the '283 adder and the legendary ALU '181, they are all 4-bit wide. I understand that the VAX 11/780 was using 8 of those 74S181 chips for the 32 bit ALU.&lt;/p&gt;&#xA;&lt;p&gt;I want everything as simple as possible but not simpler. And I am looking at the legendary TMS-1000 and Intel 4004 architectures to see how they did this, but it seems to me that then should also be simplified. By trying to simplify it all I am hitting my head against a wall and I wonder if there isn't some kind of principle law of computer architecture that blocks my way no matter what I do?&lt;/p&gt;&#xA;&lt;p&gt;Since I want everything as simple as possible:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;minimum number of registers&lt;/li&gt;&#xA;&lt;li&gt;minimum word width&lt;/li&gt;&#xA;&lt;li&gt;minimum number of wires and connections&lt;/li&gt;&#xA;&lt;li&gt;minimum number of chips&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Therefore I want the data path to be as simple as possible, the smallest number of busses. So I decided to use the PDP-8 style accumulator machine, only simpler. Only one register the accummulator AC. No &amp;quot;B&amp;quot; register. You have a loop from AC register into ALU and sourcing the other side from the one single bus. Then the result is clocked right back into the AC register. A single register. Minimize everything. The ALU out is a tiny little &amp;quot;bus&amp;quot; which does nothing other than feed back into the AC.&lt;/p&gt;&#xA;&lt;p&gt;Now the memory address is a major squeeze, it has to be wider, has to at least use 2 word addresses (not unlike most 8 bit CPUs use 16 bit addresses). Otherwise you'd just have 16 words of memory. And if your words are 4-bit wide then 16 words is really uselessly little.&lt;/p&gt;&#xA;&lt;p&gt;You might argue &amp;quot;but a 4 bit computer is already useless, why worry if you have only 16 memory locations?&amp;quot; Not so fast! A CPU is not useless if it can turn all longer word operations into sequential executions. And the TMS 1000 and Intel 4004 has one principle standard application: to build a calculator. You may say I can do a Turing machine with a single bit perhaps, but I would say the minimal CPU is one on which you can at least program a simple calculator that would allow an arbitrary-digit number addition and subtraction (and then be programmable to do multiplication). Floating point or big decimal doesn't matter. It's all in software.&lt;/p&gt;&#xA;&lt;p&gt;And to me it looks like there is an &amp;quot;as simple as possible but not simpler&amp;quot; threshold.&lt;/p&gt;&#xA;&lt;p&gt;For example, if I have to use BCD (doesn't matter, let's use full hex) I will have to process the addition of two user entered numbers with a loop. Everything needs to be looped. So now I need to have some way to make loops. How do you make a loop with a single accumulator? You have your result of the addition, now how do you decide where to store it? How do you select the next digit for your addition?&lt;/p&gt;&#xA;&lt;p&gt;Many of these simple CPU designs I have seen discussed use a Memory Address Register (MAR). This is an implicit register that is only available to microcode, you can't actually manipulate it like a register. But then I look at the Instruction Pointer (IP) and that you &lt;em&gt;do&lt;/em&gt; address with the usual instructions like JMP.&lt;/p&gt;&#xA;&lt;p&gt;So, I figured why not make that memory address register explicit and call it a &amp;quot;Data Pointer&amp;quot; (DP). Now instead of an &amp;quot;store accumulator to absolute address&amp;quot; &lt;em&gt;x&lt;/em&gt; I would have two instructions: &amp;quot;load data pointer&amp;quot; (LDP) with immediate value &lt;em&gt;x&lt;/em&gt; and then &amp;quot;store accumulator at data pointer&amp;quot;. This works for absolute addresses, but not for the loops that are required to do anything useful with a 4 bit machine!&lt;/p&gt;&#xA;&lt;p&gt;So, I thought let's use a counter, even and up/down counter for this data pointer register. I use a pre-settable up-counter (74LS161) already for the instruction pointer.&lt;/p&gt;&#xA;&lt;p&gt;So if I found a changing number of values in my accumulator, then I could make a loop like this for a routine that adds a fixed single digit in AC to a variable length number in memory and does that in place:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;     LDP lsd   ; load data pointer (DP) from immediate value lst (the least significant digit)&#xA;     BC loop   ; branch on carry to loop, a no-op, with a side effect of clear carry&#xA;loop:&#xA;     ADC       ; add with carry the current value in AC&#xA;     STADZ     ; store AC at current DP and decrement DP and zero out the AC&#xA;     BZ end    ; branch on zero&#xA;     JMP loop  ; jump to loop&#xA;end:&#xA;     HLT       ; end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; one commented pointed out that this &amp;quot;STADZ&amp;quot; is a weird composite instruction, but it's not unheard of at all, even the PDP-8 had such combined instructions, and it was easy for the PDP-8 since it had 12 bit wide instructions. With 4 bit op codes, we need to squeeze all features in 16 op codes, maybe have one extension code which pulls a second op-code.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;This could work if you imagine the numbers stored most significant digit first, no more than 16 digits, and somehow we would know the least significant digit. But there are obvious limitations with this: I cannot set an end of a loop, I can only count backwards from a starting value to zero.&lt;/p&gt;&#xA;&lt;p&gt;Even that could work, but what if I have a more realistic scenario where I add two numbers from least significant digit onward and store the result in a third location? Maybe I could invent a second data pointer, EP, then I could at least do a copy operation from DP to EP. But if I wanted to add two numbers and store them at a result I would need 3 data pointers, DP, EP, and FP.&lt;/p&gt;&#xA;&lt;p&gt;But I still can't compare these index registers for an end value, I have to count down to zero or up to overflow only.&lt;/p&gt;&#xA;&lt;p&gt;You see where I'm getting at? There seems to be a minimum complexity that cannot be simpler!&lt;/p&gt;&#xA;&lt;p&gt;The TMS-1000 used something like my DP, called it Y register, and then an X register as a high address word. And then you have a complicated data path:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rqxKU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rqxKU.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;We can still see the AC -&amp;gt; ALU -&amp;gt; AC loop here, but there is also a fork to that Y register. So at a minimum now I would need another register on the ALU output bus. This seems like a hard &amp;quot;cannot do simpler&amp;quot; rule?&lt;/p&gt;&#xA;&lt;p&gt;The Intel 4004 is more complicated, it has a register at the other ALU input because the ALU result goes back on the bus.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JbRxY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JbRxY.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And it has like a scratch pad register file, way more than the simplest possible machine.&lt;/p&gt;&#xA;&lt;p&gt;Is there any hard theoretical limit that someone has established?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; Don't get hung up on my ramblings. Look at the TMS-1000, isn't it odd that its instruction size is 8 bit wide? Why is that in a 4 bit architecture? Not because PROMS were standard 8 bit wide. I myself came up with a very easy way of using a 28C16 2 kByte EEPROM to be a 4 kWord simply by hooking the A0 address line to a 74LS257 quad 2-to-1 line selector chip, with three-state output.&lt;/p&gt;&#xA;&lt;p&gt;The reason why they ended up using the 8-bits straight is that it's a royal pain and useless to squeeze an insufficient set of 4-bit instructions and their immediate operands over the data bus if you have only 4 bits. You are working so constrained that you end up with some basic instructions like a subroutine call requiring a dozen micro-instructions just to squeeze addresses of the stack pointer to the memory and then the instruction pointer through the bus.&lt;/p&gt;&#xA;&lt;p&gt;It falls apart on every level. Everything becomes such a battle of the trade-offs. Compare that with a 32 bit wide modern RISC ISA, it's so much simpler because you have broken through these initial bottlenecks of bus width, word width, address range, to something that actually starts to work.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Notice, when I increase word size it immediately relaxes the tense situation. Suddenly your instruction words get longer with 8 bit words you can have a large number of instructions already, not just 16. That way you can have more complex addressing modes. Each word if data also has more information already. You have more addresses, at least 256 words addressable with on word.&lt;/p&gt;&#xA;&lt;p&gt;Next step up would be the PDP-8 12 bit where you can begin having single-word instructions. You could not possibly do single-word instructions in 4-bit. You could fudge in 8 bit, but really only practically start in 12 bit.&lt;/p&gt;&#xA;&lt;p&gt;Now if you do 16 bit consistent word size you can almost start with a RISC like instruction set. You can put operation, source registers and destination register all in the same word (if you have only 8 registers you can do 7 bit op code, and 3 bit address each for operand 1, 2 and destination.&lt;/p&gt;&#xA;&lt;p&gt;When you reach 32 bit you can do full RISC-V architecture. Everything is relaxed then.&lt;/p&gt;&#xA;&lt;p&gt;You see what I mean? I think there is something of a theoretical threshold, a minimum word size at which you just cannot even do a Turing complete machine. Like for Turing you need to at least have a forward, backward, and a single conditional branch instruction, so you probably have to have at least a 2 bit word, don't you?&lt;/p&gt;&#xA;&lt;p&gt;This would sound like something computer scientists would have figured out: what is the absolute simplest functional instruction set architecture?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; I may not have done a good job at updating and explaining and targeting my question. The format doesn't allow for that. But I do think that if you challenge our esoteric solutions that may seem simpler, and consider if they are practical, you may find that they are not practical. And that instead these trade-off battles over word size, bus lines, number of busses, memory width vs. data width, number of registers vs. the cost of addressing registers in small opcodes, these are real struggles, that have no perfect solution, but also some sort of optimal answer which we can glean from the old architectures and finding out where they worked well and where they didn't. Where they didn't scale. I think there is a reason that we ended up with RISC-V today.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;" OwnerUserId="15591" LastEditorUserId="15591" LastEditDate="2020-07-03T02:42:18.853" LastActivityDate="2020-07-05T09:23:19.680" Title="Pulling my hair out over a 4-bit architecture, there ought to be some law here somewhere, is there?" Tags="&lt;hardware&gt;&lt;architecture&gt;&lt;intel-4004&gt;" AnswerCount="5" CommentCount="8" FavoriteCount="1" ClosedDate="2020-07-04T03:16:36.800" ContentLicense="CC BY-SA 4.0" />
  <row Id="15293" PostTypeId="2" ParentId="15292" CreationDate="2020-06-23T04:16:48.647" Score="4" Body="&lt;p&gt;You could theoretically create a system with &lt;strong&gt;3-bit words&lt;/strong&gt; for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Brainfuck&quot; rel=&quot;nofollow noreferrer&quot;&gt;Brainfuck&lt;/a&gt; programming language.  That language is technically Turing-complete, although quite tedious to program.  It is a popular language for the &lt;a href=&quot;https://codegolf.stackexchange.com/&quot;&gt;Code Golf StackExchange&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A processor for Brainfuck needs the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Memory to store data.  Wikipedia suggests a minimum size of 30,000 bytes, but I see no reason to make it as small as you want.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A data pointer with enough bits to index into the data memory.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Memory to store code.  Make it just large enough to hold your programs.  There are only 8 opcodes, so it only needs to be 3 bits wide:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;     increment the data pointer (to point to the next cell to the right).&#xA;&amp;lt;     decrement the data pointer (to point to the next cell to the left).&#xA;+     increment (increase by one) the byte at the data pointer.&#xA;-     decrement (decrease by one) the byte at the data pointer.&#xA;.     output the byte at the data pointer.&#xA;,     accept one byte of input, storing its value in the byte at the data pointer.&#xA;[     if the byte at the data pointer is zero, then instead of moving the&#xA;      instruction pointer forward to the next command, jump it forward to&#xA;      the command after the matching ] command.&#xA;]     if the byte at the data pointer is nonzero, then instead of moving&#xA;      the instruction pointer forward to the next command, jump it back&#xA;      to the command after the matching [ command. &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An instruction pointer with enough bits to index into the code memory.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An input and an output device.  They are supposed to be ASCII devices, but if you don't care, make them as few bits as you want.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It is not a pleasant system to program (hence the foul name), but it is a minimal system.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-06-23T04:16:48.647" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15294" PostTypeId="2" ParentId="15259" CreationDate="2020-06-23T06:08:17.313" Score="7" Body="&lt;h1&gt;Microsoft Word did&lt;/h1&gt;&#xA;&lt;p&gt;I distinctly remember looking into the binary .doc format used by Microsoft Word 5.0 for DOS, because documents saved when the year was after 1999 couldn't be opened again. It turned out that the internal meta-data included the date using two ASCII digits for the year and 2000 was blindly stored as &lt;code&gt;100&lt;/code&gt;, thus overwriting one byte of an adjacent meta-data field, breaking the document.&lt;/p&gt;&#xA;" OwnerUserId="18114" LastActivityDate="2020-06-23T06:08:17.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15295" PostTypeId="1" AcceptedAnswerId="15297" CreationDate="2020-06-23T09:22:17.217" Score="47" ViewCount="9411" Body="&lt;p&gt;This image of people wearing swimsuits in a room with computer hardware popped up on Twitter recently.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/eY8U4l.jpg&quot; alt=&quot;a woman wearing a swimsuit operating a computer in front, a man and a woman wearing swimsuits reading in the background&quot; /&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Where was this advertisement published, and what computing product or service is it offering?&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4335" LastEditDate="2020-06-25T19:43:47.383" LastActivityDate="2020-06-25T23:50:02.497" Title="What is the origin of this bizarre advert of people wearing swimsuits in a room with computer hardware?" Tags="&lt;magazine&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15296" PostTypeId="2" ParentId="15292" CreationDate="2020-06-23T09:42:15.480" Score="11" Body="&lt;p&gt;I would tend to favour &amp;quot;conceptual simplicity&amp;quot; rather than trying to strictly minimise any physical parameter.  Observe that some low-cost computers managed to get away with a 1-bit ALU while supporting reasonably wide data words, eg. the PDP-8/S and the LGP-30.  They did this using a &lt;strong&gt;bit-serial architecture&lt;/strong&gt; which was largely invisible to the programmer, except in the resulting performance of the machine (much slower than a parallel architecture).  So processing a single machine word took several machine cycles.&lt;/p&gt;&#xA;&lt;p&gt;This was a natural fit for the LGP-30's drum memory, less so for the PDP's core memory.  Historically, memory was the most complex and expensive part of a computer, so a wise designer started with the memory and built the CPU around it.  Observe that the PDP-8/S cost about a third of its faster cousins, but had only a tenth of the performance, due to the poor match between its cost-minimised CPU and its standard core memory module.  Observe also that the LGP-30 could perform multiplication and division with single instructions, within a single rotation of the drum, despite its relative simplicity.&lt;/p&gt;&#xA;&lt;p&gt;When your ALU and data accumulator are as small as 4 bits, you will need to use multiple such words to be able to address a usefully large memory.  Usually an instruction word needs to be effectively 12 bits wide (including operands) to be useful too.  But this is not historically unusual; observe that the humble 6502, a resolutely 8-bit machine, has 16-bit addresses and instructions that can be 1-3 bytes long; always an 8-bit opcode, sometimes followed by an operand.  The larger and more complex instructions took more memory cycles to process than the smaller and simpler ones.&lt;/p&gt;&#xA;&lt;p&gt;Now, for conceptual simplicity, consider the following 12-bit Transport Triggered Architecture.  Instruction words have no opcode, and only specify two locations to transfer data from and to.  The locations are 16 12-bit registers, or the memory addresses pointed to by them, or a set of 16 ports which trigger operations in the ALU or provide results from such an operation.&lt;/p&gt;&#xA;&lt;p&gt;The 12-bit instruction word is nothing more than a pair of 6-bit specifiers, 4 of these bits indicating a register, and the remaining two choosing the register directly, the memory addressed by the register, the latter with post-increment of the register, or the port behind the register.&lt;/p&gt;&#xA;&lt;p&gt;One register should be the Program Counter, which gives you an easy way to load immediate operands (source: memory addressed by PC register with post-increment) and to jump to a new location (destination: PC register).  Combining the two gives you an effective JMP instruction.&lt;/p&gt;&#xA;&lt;p&gt;You get to choose what each port does on read or write.  Several of the read ports could simply be adds and subtractions of adjacent registers.  Another might select between a pair of register values based on a flag internal to the ALU - such as a zero flag, a negative flag, or a carry flag.  A write port might let you choose between these possibilities dynamically.  This gives you the possibility of a conditional branch.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;That&lt;/em&gt; is simplicity, yet still with interesting possibilities for experimentation.  Have fun!&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-06-23T09:42:15.480" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15297" PostTypeId="2" ParentId="15295" CreationDate="2020-06-23T09:53:46.600" Score="57" Body="&lt;p&gt;It's advertising computer room air conditioning.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bjX5p.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bjX5p.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;No doubt appeared in some late 1970's or early 1980's US-based computer magazine.  But exactly which one I couldn't find based on a little bit of searching for phrases and keywords in the full advertisement.&lt;/p&gt;&#xA;&lt;p&gt;JdeBP reports the ad appearing in 1982 and 1983 in &amp;quot;Computer Decisions&amp;quot; magazine.  I could not find an on-line copy to confirm that but I did dig up a Google Books search that refers to the ad.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://books.google.ca/books?redir_esc=y&amp;amp;id=141VAAAAMAAJ&amp;amp;focus=searchwithinvolume&amp;amp;q=airflow&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;Airflow&amp;quot; in Computer Decisions Volume 15&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DSakr.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DSakr.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2020-06-24T19:31:59.677" LastActivityDate="2020-06-24T19:31:59.677" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="15298" PostTypeId="2" ParentId="15292" CreationDate="2020-06-23T10:10:53.330" Score="4" Body="&lt;p&gt;Amusingly, I posted about my design for a processor that's as simple as possible while still being useful over on the &lt;a href=&quot;http://anycpu.org/forum/viewtopic.php?f=3&amp;amp;t=372&amp;amp;start=90#p5724&quot; rel=&quot;nofollow noreferrer&quot;&gt;anycpu forums&lt;/a&gt; just this morning...&lt;/p&gt;&#xA;&lt;p&gt;Summarising:&#xA;My design uses 14 standard chips (including a 16-bit wide ROM for the instruction data which may need to be replaced with 2x8-bit ones depending on availability). It's a very limited design, but was designed with a specific purpose in mind (running a front panel for an 8-bit system that uses a hex keypad to allow boot code entry) and is capable of that. It's somewhat simpler than your design:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;No jump instruction - instead, all instructions are implicitly looped infinitely, and different sections are selected using conditional execution&lt;/li&gt;&#xA;&lt;li&gt;Not using a general purpose ALU - a series of AND and XOR gates is used to add either zero or one. The value to add is selected with a mux to be either 0, 1, the carry flag, or a hardwired bit from one of the registers&lt;/li&gt;&#xA;&lt;li&gt;No memory addressing at all (other than the program counter, which is just a standard 4- or 8-bit counter) - all data are stored directly in registers (2x8-bit registers to store an address, 1x8-bit register for entered value to be stored, 4-bit scratchpad register).&lt;/li&gt;&#xA;&lt;li&gt;No instruction decoding: programs are implemented directly in a microcode-like encoding.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Now, this design is not something I claim as the minimal general purpose computer:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It isn't actually properly general purpose, as it is impossible to (eg) add two numbers with it. This could be rectified with a few simple additions:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Adding an extra set of XOR gates at the input to the ALU would allow negating numbers; a 4-input NOR gate could be used to add a zero flag. Then incrementing until a carry occurs would allow repitition of a given number of operations.&lt;/li&gt;&#xA;&lt;li&gt;More flag bits, and a way to set or clear an arbitrary flag bit, would be necessary for more complex programs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All in all, I expect making this a true general-purpose machine (ie turing-complete modulo small memory size) could be achieved by adding around 4 standard logic chips.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastEditorUserId="15930" LastEditDate="2020-06-25T13:09:02.437" LastActivityDate="2020-06-25T13:09:02.437" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15299" PostTypeId="2" ParentId="15292" CreationDate="2020-06-23T14:38:16.113" Score="3" Body="&lt;p&gt;&lt;em&gt;[preface: This question would need a heave rewrite to really qualify as RC.SE compatible, as so far it may mention some historic architectures, but its core questions are about generic system/CPU design, making it rather a fit for EE.SE]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Showing other examples won't be of much use, as the question is burdened with unnamed assumptions and restrictions - and a mixup of terminology when defining goals&lt;/p&gt;&#xA;&lt;p&gt;Well, that and a very basic misconception:&lt;/p&gt;&#xA;&lt;p&gt;Reduced word size  does not reduce complexity. It only reduces data path width, thus components acting in parallel (*1). All control logic still needs to be the same. Or better &lt;em&gt;at least&lt;/em&gt; the same, as shorter word sizes may mean added overhead for multi word operations.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;there ought to be some law here somewhere, is there?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Law&lt;/strong&gt;(*2)&lt;strong&gt;: Shorter words do not simplify designs. They only shorten the width of components used.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You see what I mean?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. 'Cause you missed to specify the requirements you're using, and there seams to be quite a lot you're implying:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(caveat: these are things I figured while reading without finding any explicite declaration - so they might be wrong)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Word size equals instruction size&lt;/li&gt;&#xA;&lt;li&gt;Word size equals bus size&lt;/li&gt;&#xA;&lt;li&gt;Instruction size equals data size&lt;/li&gt;&#xA;&lt;li&gt;Data path size is related to system complexity&lt;/li&gt;&#xA;&lt;li&gt;Implied assumption of Von-Neuman&lt;em&gt;isch&lt;/em&gt; architecture&lt;/li&gt;&#xA;&lt;li&gt;Single address space&lt;/li&gt;&#xA;&lt;li&gt;Memory external to CPU&lt;/li&gt;&#xA;&lt;li&gt;Means of complexity is never described&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These are just the most obvious, many more might hide and need a deeper read. All of them restrict/blur view at design possibilities and many are&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Law: Define all constrains first and in full.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This doesn't mean you need to write them down on paper (despite that being helpful) like in 7th grade, but to keep them in mind and reproduce them whenever talking about. But it means you got to sit down first and make clear what are implied assumption.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Law: Don't assume things 'are'.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This point is especially important when trying to create something new. We are all product of our history. There is a ton of implied assumptions about everything. It's very helpful, as it allows us to navigate the world by assuming defaults - like a bit being only 0 or 1 and a byte having 8 bits. Right? No. already this short example shows the mixing of 'natural' (*3) defaults and man made. A bit is either 0 or 1. There is no inbetween in logic (*4). But a byte doesn't have to be 8 bits. It only became to be the most common size nowadays - almost the only one.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt; there is a constant feature creep - again due unclear requirements.&lt;/p&gt;&#xA;&lt;p&gt;Examples are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Generic ability of dynamic addressing&lt;/li&gt;&#xA;&lt;li&gt;Direct addressing from 'within' the CPU&lt;/li&gt;&#xA;&lt;li&gt;Assumption of certain processes working in parallel&lt;/li&gt;&#xA;&lt;li&gt;Many more...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Law: Don't make a wishlist what would be nice to have. Take what nature (well circuits) give free and plenty and be happy about.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Hmm, maybe that should be a moral point, then again, laws have to follow moral, shouldn't they?)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;When your goal is to create something simple, don't make up a complex instruction set. This is especially visible in your musings about adding and looping, were one featurehunts the next? Doesn't that feels like a thick porridge, swelling in your mouth?&lt;/p&gt;&#xA;&lt;p&gt;Just look at this instruction:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;STADZ     ; store AC at current DP and decrement DP and zero out the AC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Oops? That's quite a complex one. Asking for&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a memory transaction,&lt;/li&gt;&#xA;&lt;li&gt;regster decrement and&lt;/li&gt;&#xA;&lt;li&gt;a register clear&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All in once, in addition two operations on the same item (AC), not really a chip shaver. Instead thinking about bloaty instructions that look nice in a source, the goal must be simple hardware, with a target of none wherever possible.&lt;/p&gt;&#xA;&lt;p&gt;Why having a pointer &lt;em&gt;register&lt;/em&gt; at all? Wouldn't it be more simple to have a pointer in memory, so any operation can be done by the same used for all othere&lt;/p&gt;&#xA;&lt;p&gt;So there's one more:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Law: Think like a hardware designer cutting chips, not a programmer wanting easy &lt;em&gt;do-what-i-mean&lt;/em&gt; type instructions.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Just look at the way Woz' designed the Apple II. Chips can always be replaced by more code.&lt;/p&gt;&#xA;&lt;h2&gt;Verdict:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Law: Don't get lost in details about chips and workings before working out basic details.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's like in any craft:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Work out what your tools are and how they work.&lt;/li&gt;&#xA;&lt;li&gt;Work out what your material is and how it behaves.&lt;/li&gt;&#xA;&lt;li&gt;Work out what you want to do and what the result has to be&lt;/li&gt;&#xA;&lt;li&gt;Only then apply the tools to your material and complete the task.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;While it may look like there are many short cuts, they are all taken at some cost. The reason why an experienced developer may take them is that he knows about the pitfalls and includes that knowledge.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;[I said I won't go into details, but I'm a mere mortal &lt;strong&gt;Nerd&lt;/strong&gt;, it's impossible to tell my inner voice, calling for schematics and ideas, to shut up, so lets try to give 'only' a sketch]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;What about an instruction set only able to very simple operations, loading, adding and negating a constant or word from memory. There would be a single accumulator register which may as well be tested for zero in a jump like instruction.&lt;/p&gt;&#xA;&lt;p&gt;Instructions can only access direct memory locations that can be accessed with one word, so 16 if it's 4 bit. So lets make groups of memory cells act as address pointer. Like three of them making a 12 bit address (if it's a 4 bit). Any operation using these pointers will be able to address the full 12 bit address range as these 3 words.&lt;/p&gt;&#xA;&lt;p&gt;The first group could form a generic memory pointer. So whenever there is a memory access to be made, the address must be build in group 1. Since it's fixed at location 0..2, it can be accessed and manipulated with absolute addresses 0..2. This saves the need for a dedicated pointer register,while at the same time enabling it to be target of any legal operation. That's much more than just increment or decrement.&lt;/p&gt;&#xA;&lt;p&gt;Since we design the CPU, we can have r/w word access to the memory cells and parallel output of them as address as well - for example by putting these first 16 location on chip. It's hard to imagine a system with less memory, so they are needed anyway.&lt;/p&gt;&#xA;&lt;p&gt;The second group could add as a jump target. At that point it doesn't matter if the CPU presents memory and program store separate or unified. The content of group 2 gets simply loaded into PC after being loaded and/or manipulated in group 2. Now we can do arbitrary jumps.&lt;/p&gt;&#xA;&lt;p&gt;On an abstract level this means simply unifying the various registers of a more complex design into a register file that is addressed like memory. Instead of instructions having implied registers, everything would be explicite and symmetric. There could be more groups as well. Like a second memory pointer...&lt;/p&gt;&#xA;&lt;p&gt;The whole functionally mentioned/desired in the question could be implemented with a sert of different 5-11 instructions - so way within the 16 available in 4 bit opcodes. Of course, the program would be a bit longer. But who cares? The goal is to make a &lt;em&gt;hardwarewise&lt;/em&gt; simple CPU.&lt;/p&gt;&#xA;&lt;p&gt;Of course, adding some hardware could simplify programming a quite a lot. In fact, some additions could as well simplify the instruction set further. Like adding a B register, thus separating memory access from ALU operations. Now the instruction set may go down again, as everything ALU related is now a single instruction, not intervened with other operation. The instruction set becomes kind of a construction set for more complex ones.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;ADD mem&lt;/code&gt; becomes &lt;code&gt;LoadB with mem&lt;/code&gt; + &lt;code&gt;ALU-OP ADD&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;and so on.&lt;/p&gt;&#xA;&lt;p&gt;A potential instruction summary could be like:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;ALU-OP x&lt;/li&gt;&#xA;&lt;li&gt;Load A with B&lt;/li&gt;&#xA;&lt;li&gt;Load B with constant&lt;/li&gt;&#xA;&lt;li&gt;Load B short (Register File)&lt;/li&gt;&#xA;&lt;li&gt;Load B via Group0 (Memory Pointer)&lt;/li&gt;&#xA;&lt;li&gt;Store A short (Register file)&lt;/li&gt;&#xA;&lt;li&gt;Store A via Group0 (Memory Pointer)&lt;/li&gt;&#xA;&lt;li&gt;SKIP if A is zero&lt;/li&gt;&#xA;&lt;li&gt;SKIP if CARRY&lt;/li&gt;&#xA;&lt;li&gt;LOAD PC with Group1 (Jump)&lt;/li&gt;&#xA;&lt;li&gt;HALT&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;#2 can even be omitted if there's an ALU-OP that simply lets B thru, so #3;#1 will replace #2, thus simplifying the circuitry for A, as it now can be loaded from a single source only, the ALU.&lt;/p&gt;&#xA;&lt;p&gt;Everything past that is pure luxury ... or can be used to improve upon.&lt;/p&gt;&#xA;&lt;p&gt;Like accessing instruction store with double width, delivering all multi word instructions (#1/3/4/5/6/7) in a single cycle. This does, BTW, not automatic imply a separate store - just that it's as well word accessible and that the lowest bit of the PC is always assumed as zero (i.e. the PC is only 11 bits, 11..1)&lt;/p&gt;&#xA;&lt;p&gt;Or using more than one memory pointer, thus making #5 and #7 (maybe even #10) having the pointer to be used in the second word - quite simple if the instruction access is 8 bit anyway. In general, going to a 4 bit (nibble) addressable 8 bit memory word would result in not only sped advantage, but the general option to use 8 bit for all instructions, like giving an offet to SKIP&lt;/p&gt;&#xA;&lt;p&gt;If you wonder about the HALT instruction, beside its usefulness for debugging, it could as well serve as a return instruction for a kind of fixed single level subroutine mechanism. As of now we have 5 unused instructions (#12..16), so why not making them 5 subroutine calls with implied address? (*5)&lt;/p&gt;&#xA;&lt;p&gt;Any instruction not defined will have the PC being suspended and a 'sub' PC set to the value of the instruction times 256. So for example a instruction of x'F' would lead to an implied subroutine call to address x'F00'. This may come in quite handy to do complex but often needed things like incrementing a memory group. HALT will now as well serve as return long operation if from the 'sup' PC and only stop the CPU when on the 'real' PC.&lt;/p&gt;&#xA;&lt;p&gt;Then again if we already have the works for two word instructions why not treat all 'unknown' such, having x'F' with operand x'8' jump to x'F80'. Of course now there is only room for 16 instructions (including HALT) per 'extended' opcode, but nothing stops us from spilling over. If x'F8' needs 20 instructions, then there will be no x'F9' (*6).&lt;/p&gt;&#xA;&lt;p&gt;Now we could add 64 subroutines or well, instructions after all, with a little shifted viewpoint this could be seen as the core for a semi-micro-program system. Semi because it's not really a separated, invisible layer beyond the instruction set, but rather a kind of mechanic to extend it.&lt;/p&gt;&#xA;&lt;p&gt;Of course, nothing stops us from turning this upside down and have the main PC invoke routines like described. Now we really have a microcoded execution with the microcode being the set of these 12 primitive instructions and the macro instructions being whatever the code says. And with the fun part of microcode being fully loadable. Heck it can even be manipulated from macro code, as it lies within the same address region (*7,*8)&lt;/p&gt;&#xA;&lt;p&gt;At that point extending (external) memory referrence to 16 or 20 bit might be a good idea.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;And now I got to stop as I'm getting close to run upstairs and fire up my soldering iron.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;To complete this, take a look at a few examples of minimalist design:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_MC14500B&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motorolas 14500&lt;/a&gt;&lt;/strong&gt; is eventually if the most minimalist processor. It can't get less complex than that: one bit data word and arbitrary instruction word size. PC as well as other glue logic not included.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Intel's &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8008&quot; rel=&quot;nofollow noreferrer&quot;&gt;8008&lt;/a&gt; and 8080&lt;/strong&gt; are direct implementations of the Datapoint logic, presented with exactly your problem: building a somewhat capable CPU out of as least TTL IC as possible. It's well worth to take a look.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atmels AVR&lt;/a&gt;&lt;/strong&gt; is not only one of the most successful new architectures, it's also made with a focus on minimalist design. There are no 'visible' registers, but memory, with a register file at the start. Certain memory cells act as pointers (a bit like IBM's 7030 or way later a DEC PDP-8). Programm store is separate and 16 bit wide (while data is 8). And so on.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Let's skip serial internal structures, as they only bring real advantage when build from single gates/transistors, not complex 74xx devices.&lt;/p&gt;&#xA;&lt;p&gt;*2 - From Raffzahn's book of ad hoc laws - ought to be extended at any moment ;)&lt;/p&gt;&#xA;&lt;p&gt;*3 - Yes, one may argue the 0/1 thing is as well man made, but within binary it's undisputable, as not only everything beside doesn't exist, it would also simply blow all logic.&lt;/p&gt;&#xA;&lt;p&gt;*4 - No, tehre is no inbetween, what you're thinking of are signals which may be weak and mess up results. Logic doesn't care about that, TTL does :)&lt;/p&gt;&#xA;&lt;p&gt;*5 - If this sounds like the 68k's Line-A, tuned for 4 bit, then you're straight on :))&lt;/p&gt;&#xA;&lt;p&gt;*6 - Uhhhh... illegal opcodes ... what may they do?&lt;/p&gt;&#xA;&lt;p&gt;*7 - Not always a good idea :)&lt;/p&gt;&#xA;&lt;p&gt;*8 - Some mainframes of the 70s had a similar construct - except the microcode storage was protected and hidden even in real mode, Only accessible under certain conditions with dedicated instructions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-24T12:22:18.060" LastActivityDate="2020-06-24T12:22:18.060" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15300" PostTypeId="2" ParentId="6377" CreationDate="2020-06-23T15:51:50.417" Score="3" Body="&lt;p&gt;The HP1000 (family) was extremely register poor by today's standards - only A and B accumulators (having B was an improvement over other machines which just had A!) - and the only addressing modes supported by the instruction set were register, memory address, and indirect-through-memory address.  It didn't even have the magical auto-increment memory locations of the PDP-8.  There are no built-in stack operators or addressing modes.&lt;/p&gt;&#xA;&lt;p&gt;This makes it hard to do any kind of &amp;quot;normal&amp;quot; programming including passing arguments to procedures or using indexed data structures.  The only choice you have is brute force.  (When I programmed this machine and similar machines (e.g., PDP-8) in assembly language it was actually very simple: load-registeroperation-store, load-registeroperation-store, load-registertest-jump, load-registeroperation-store, just keep going until done.)&lt;/p&gt;&#xA;&lt;p&gt;So the architecture designers, not able to provide more registers (even for dedicated purposes, like &amp;quot;indexing&amp;quot;) or more addressing modes did what they could: And that was the indirect bit, which just sort of signalled the memory fetch circuit to &amp;quot;do it again&amp;quot; if it was set.&lt;/p&gt;&#xA;&lt;p&gt;Yet that was enough to start breaking you out of the load-registeroperation-store cycle, if you were clever about how to represent things in memory.&lt;/p&gt;&#xA;&lt;p&gt;Note that in this timeframe &amp;quot;high level&amp;quot; languages - if you even used them - did not necessarily support recursion.  FORTRAN certainly didn't.  So most of the time you didn't actually &lt;em&gt;require&lt;/em&gt; a stack, not even for procedure returns.  But you did at least want other data structures that could be represented with pointers and traversed (somewhat) more efficiently with chained indirection.&lt;/p&gt;&#xA;&lt;p&gt;(Also, don't think that people used chained indirection past 2 levels.  Just because the hardware kept going and going as long as the indirect bit was set doesn't mean anyone programmed that way.  It was probably just easier (and cheaper) to represent it in bits and build the hardware that way.)&lt;/p&gt;&#xA;&lt;p&gt;(PDP-10 which also had this kind of indirection also had more registers, and also more addressing modes, and the indirection included indexing, IIRC. Now &lt;em&gt;that&lt;/em&gt; was powerful, if you were the right kind of tricky.)&lt;/p&gt;&#xA;" OwnerUserId="332" LastActivityDate="2020-06-23T15:51:50.417" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15301" PostTypeId="1" AcceptedAnswerId="15303" CreationDate="2020-06-23T19:57:27.183" Score="11" ViewCount="2837" Body="&lt;p&gt;For PC/AT, 80386, and 80486 machines from the late-1980s through early 1990s (&lt;em&gt;e.g. retro machines, not modern&lt;/em&gt;), can you expect to pull a BIOS ROM from one machine and have it work fine in a different machine? What things need to be the same between the two machines for such a transplant to be successful? (&lt;em&gt;Ignore the obvious, such as the ROM's need to be the same capacity, pinout, package type&lt;/em&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Another way of answering might be to explain what things were typically customized by a &lt;em&gt;'circa 1990 OEM&lt;/em&gt; when preparing a BIOS from a vendor like AMI, Award, or Phoenix to work in the OEM's specific machine.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorDisplayName="user722" LastEditDate="2020-06-25T18:03:41.280" LastActivityDate="2020-06-25T18:03:41.280" Title="Are BIOS ROMs interchangeable among different vendor's PCs?" Tags="&lt;ibm-pc&gt;&lt;bios&gt;&lt;firmware&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15302" PostTypeId="2" ParentId="15301" CreationDate="2020-06-23T20:14:23.810" Score="21" Body="&lt;p&gt;No reason to expect it works at all.&lt;/p&gt;&#xA;&lt;p&gt;So if the CPU can even start executing the code, the moment where it goes wrong is when there are instructions for a newer CPU, or some chipset-specific initializations are done.&lt;/p&gt;&#xA;&lt;p&gt;The BIOS is tailored for the specific motherboard, which will have a certain chipset for a certain CPU class, and therefore it also expects certain class of CPU to be present. Sometimes you even need to upgrade the BIOS to support newer CPUs, so it won't work even if you can physically fit the CPU in the socket.&lt;/p&gt;&#xA;&lt;p&gt;The chipset will need different configuration settings depending on how it is connected to surrounding circuitry, e.g. two 486 motherboards could have different Multi I/O controller (for floppies, serial and parallel ports), or the memory subsystem could have different memory socket types, or different amount of PCI slots, or different amount of IDE interfaces.&lt;/p&gt;&#xA;&lt;p&gt;Sometimes you even have two revisions of same motherboard, with only minor differences that are not visible to user, like different Multi I/O or clock PLL chip. If they cannot fit the support for all of the differences in the BIOS, then user has to be extra careful to check which revision motherboard it is to flash a correct BIOS image.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-06-23T20:14:23.810" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15303" PostTypeId="2" ParentId="15301" CreationDate="2020-06-23T20:26:58.640" Score="20" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How interchangeable was PC BIOS?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Usually not interchangeable at all. Keep in mind, there is no single PC-BIOS, but a machine BIOS. Different CPUs, chips sets and additional hardware need specific initialisation. And, at least for generic DOS, specific drivers.&lt;/p&gt;&#xA;&lt;p&gt;To start with, plug-in-compatible bios was only a thing for 100% hardware clones, something only true for early PC, PC-XT and PC-AT. Everything else had to have a specific BIOS anyway.&lt;/p&gt;&#xA;&lt;p&gt;Already during the late 80s AT class 286 machines diverted from IBM hardware. Examples are &lt;a href=&quot;https://en.wikipedia.org/wiki/Chips_and_Technologies&quot; rel=&quot;noreferrer&quot;&gt;Chips&amp;amp;Technologies&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/NEAT_chipset&quot; rel=&quot;noreferrer&quot;&gt;NEAT&lt;/a&gt; chisets or &lt;a href=&quot;https://de.wikipedia.org/wiki/OPTi&quot; rel=&quot;noreferrer&quot;&gt;Opti&lt;/a&gt;'s AT-Controller. While they may look as simple VLSI integration of various (Intel) peripherals into a few new chips, they also added more functionality not found before. For example ROM shadowing (for speed), embedded LIM controllers and more.&lt;/p&gt;&#xA;&lt;p&gt;In the beginning it might still have worked with some generic BIOS, due default values, guaranteed by hardware - except these usually rendered the additions useless. With more advanced memory controllers, even that will no longer work, as here each chip designer went for his own game.&lt;/p&gt;&#xA;&lt;p&gt;Heck, it already starts with accessing the BIOS itself. With the inclusion of a BIOS setup (*1) the address space needed soon exhausted the address space provided by default. So ROM switching was added. Of course there was no IBM standard to be copied, so chip manufacturers came up with their own ways.&lt;/p&gt;&#xA;&lt;p&gt;It is the BIOS job to bring all on board hardware into a working state. Set memory speeds, bank interleaving, burst access and more - just for memory that is. And improvements didn't end with memory.&lt;/p&gt;&#xA;&lt;p&gt;It has become a bit less diverse since more and more components have been moved into the CPUs, so BIOS will find the same 'I/O' hardware on all boards featuring the same CPU (*2), unifying much of the hardware initialisation (again). Then again, While CPU manufacturers provide default designs to Motherboard manufacturers, they do not simply produce them, but tweek it with additional functions, better routing to allow some overclocking or alike. All of this needs to be reflected in BIOS.&lt;/p&gt;&#xA;&lt;p&gt;In addition, modern BIOS need to provide a (somewhat) compatible UI interface - the well known BOIS screens. Here even more all hardware needs to be considered, as they have to support many modern media alike.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Long story short: BIOS were already not interchangeable back in the days of 8088/286 computers and they are even less today.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Now, for the additions:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;Obviously No! For it could be no other way.&amp;quot; That is plainly incorrect.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But it is the way it is. For any other way, some machine independent way of storing configuration details would be needed - but there is none.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;BIOS is just code, and code can be data driven. Configuration code is often data driven, and that's not a recent invention.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To be data driven, the data has to be accessible and supplied from external. Neither of this is true, as a BIOS is self contained and uses at maximum external indicators.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Data for hardware configuration was there in the very beginning (IBM PC Model 5150) as simple DIP switches and/or jumpers. This was followed shortly after with the more sophisticated concept of settings stored in battery-backed CMOS memories, with sensible defaults pre-programmed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Neither DIP-switches not the CMOS did give sufficient data for configuration. They only held parameters for the BIOS to act on, not description of the hardware features and how to handle them.&lt;/p&gt;&#xA;&lt;p&gt;For example, already with the original IBM-PC the meaning of the SW2 block varied with the BIOS used and had to be checked/changed according to what BIOS to be put into the ROM slots - in so far my above claim of interchangeability for the original PC is already false.&lt;/p&gt;&#xA;&lt;p&gt;It didn't change with the introduction of the CMOS storage. Here the content was as well depending on BIOS version &lt;em&gt;and&lt;/em&gt; on manufacturer. For example Bit 1 of byte 11h was (just a list from my BIOS scratchbook from back in the days)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IBM PC-AT: Undefined&lt;/li&gt;&#xA;&lt;li&gt;IBM PS/2: Fixed disk type (whole byte), except if ESDI or SCSI&lt;/li&gt;&#xA;&lt;li&gt;Award AT BIOS: Typematic setting (whole byte)&lt;/li&gt;&#xA;&lt;li&gt;Award BIOS: Password needed for BIOS or BOOT&lt;/li&gt;&#xA;&lt;li&gt;AMI Flex BIOS: Typematic setting (whole byte)&lt;/li&gt;&#xA;&lt;li&gt;AMI Advanced BIOS: Password needed for BIOS or BOOT&lt;/li&gt;&#xA;&lt;li&gt;AMI BIOS: NumLock state after boot&lt;/li&gt;&#xA;&lt;li&gt;(something) NEAT BIOS: Map Memory above 640Ki to above 1 Mi&lt;/li&gt;&#xA;&lt;li&gt;AMI WinBIOS: NumLock state after boot (but other bits differ from above)&lt;/li&gt;&#xA;&lt;li&gt;... the list goes on for almost a page.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The same is true for many other bytes in there.&lt;/p&gt;&#xA;&lt;p&gt;Long story short, the CMOS isn't a data enabling device and BIOS independent configuration, but simply a scratchpad used by each BIOS in its own way to keep proprietary settings across a power-off state.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So, a rather fully portable BIOS was always possible, in theory, across machines that were broadly compatible but requiring slightly different hardware configuration or interfacing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, as this information was neither part of the 'data' stored in switches or CMOS RAM. They are merely markers and depend on each BIOS.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom Line:&lt;/strong&gt; Neither DIP-switches nor CMOS contains (standardized) machine, device and BIOS independent information. Their content is only valid for a certain BIOS and a certain chipset compiled by a certain manufacturer.&lt;/p&gt;&#xA;&lt;p&gt;Doing such would require a storage that describes the machine (like what chips at which ports should perform which operation) in a standardized way and lists the needed BIOS capabilities. But there isn't. all of this information is hard coded within each BIOS image, which makes it only be usable or exactly one setup.&lt;/p&gt;&#xA;&lt;p&gt;There is a reason that modern OS bring their own basic drivers ... and just think about the huge complexity there is in Linux or Windows, and all of it doesn't help, there's still a need for configuration in multiple steps. It's an illusion that a hard coded system like a BIOS can do this for more than one configutation.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Now, there is some agnostic way (modern) BIOSes operate. For one, they contain way more device initialisation code than their grandfathers and much of this is stored in data tables and run in full or part by generic installation functions, but these tables are not only vendor specific, but also within the BIOS code, so again not independent, external configuration. It only simplifies BIOS coding.&lt;/p&gt;&#xA;&lt;p&gt;The amount of tables (and code) is configured by the board vendor to suit his needs. So a BIOS from one vendor may not fit a basically compatible board from the same or another vendor. In addition, the core module is as well tailored to a specific CPU or CPU family. So no chance to move a Ryzen BIOS to an Athlon board and even less to some Intel Core something.&lt;/p&gt;&#xA;&lt;p&gt;As said, that's today's BIOSes with their huge sizes and hidden storage - In the area rewuested the situation was more tight and equally diverse.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - IBM's original PC/XT BIOS didn't need any setup, only the AT introduced changeable defaults - which was done by booting a dedicated setup-disk (or later using some DOS utilities). Clone maker added this as on board functions.&lt;/p&gt;&#xA;&lt;p&gt;*2 - That's BTW the reason why it's so important to get a BIOS update with new CPU's - they are essentially the whole computer in one module.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-24T16:21:33.763" LastActivityDate="2020-06-24T16:21:33.763" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15304" PostTypeId="2" ParentId="15295" CreationDate="2020-06-24T00:53:31.870" Score="9" Body="&lt;p&gt;I see DATAC on the advert. On googling I found the following:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Since 1977, the DTAC commitment to the customer, a quality heavy equipment air conditioning product and specialized service has helped us grow into a reputable manufacturer of heat/cool systems for heavy equipment.&#xA;&lt;a href=&quot;http://www.dtac.com/&quot; rel=&quot;noreferrer&quot;&gt;http://www.dtac.com/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This tells you an earliest date for the advert. Furthermore they are a US firm so the computer is probably an IBM.&lt;/p&gt;&#xA;&lt;p&gt;Here's an IBM 360. You can see that the console is a teletype so this is an earlier model than the one in your picture which has monitors.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/N92pu.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/N92pu.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm sure a little googling would track down the actual model. I don't have time to do it right now.&lt;/p&gt;&#xA;" OwnerUserId="18597" LastActivityDate="2020-06-24T00:53:31.870" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15305" PostTypeId="1" AcceptedAnswerId="15307" CreationDate="2020-06-24T08:27:24.320" Score="3" ViewCount="851" Body="&lt;p&gt;In 1950s machines had a &lt;em&gt;36 bit words&lt;/em&gt;. And in this &lt;em&gt;word&lt;/em&gt; we could pack symbols using &lt;em&gt;6 bits&lt;/em&gt;. And to fetch this symbols from the &lt;em&gt;word&lt;/em&gt; programmer should do it &lt;a href=&quot;https://en.wikipedia.org/wiki/36-bit_computing&quot; rel=&quot;nofollow noreferrer&quot;&gt;using bit manipulations&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In 1961 IBM released 7030 machine that also had &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_7030_Stretch#Memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;word addressable&lt;/em&gt; memory&lt;/a&gt;. On the other hand, this machine was the first one which used term &lt;em&gt;byte&lt;/em&gt; with &lt;em&gt;8 bits&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;My first assumption about &amp;quot;why we need a &lt;em&gt;byte&lt;/em&gt; term&amp;quot; was the following:&lt;/p&gt;&#xA;&lt;p&gt;If this &lt;em&gt;8 bits&lt;/em&gt; were addressable, we could store and get any &lt;em&gt;8 bit&lt;/em&gt; symbol from memory without any bit manipulations. But if memory was &lt;em&gt;word addressable&lt;/em&gt; my assumption rises a contradiction: how we could address a single &lt;em&gt;byte&lt;/em&gt; if memory was &lt;em&gt;word addressable&lt;/em&gt;?&lt;/p&gt;&#xA;&lt;p&gt;So my question is: what was the point of using term &lt;em&gt;byte&lt;/em&gt; in IBM 7030, if memory was &lt;em&gt;word addressable&lt;/em&gt; and we can not get any benefits from &lt;em&gt;byte&lt;/em&gt;?&lt;/p&gt;&#xA;" OwnerUserId="18599" LastEditorUserId="445" LastEditDate="2020-06-25T04:50:24.310" LastActivityDate="2020-06-25T17:03:04.293" Title="Why did IBM 7030 or IBM 360 use byte and word addressing simultaneously" Tags="&lt;memory&gt;&lt;ibm&gt;&lt;ram&gt;&lt;ibm360&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15306" PostTypeId="2" ParentId="15305" CreationDate="2020-06-24T10:46:00.177" Score="6" Body="&lt;p&gt;'Byte' was used before it meant '8 bits' and It was used on machines that had word-addressable memory.  The point was for the program to be able to read and write data of less than a word size.&lt;/p&gt;&#xA;&lt;p&gt;The PDP-10, with which I am familiar, had &amp;quot;load byte&amp;quot; and &amp;quot;deposit byte&amp;quot; instructions which could read any part of a word, sized from 0 to 36 bits.  As far as memory was concerned, whole words would be transferred; the ALU would handle the shifting and masking required to extract/insert the designated field.  Since memory was word-addressable,  a special address format was required for these instructions - it had a standard address, and also offset-in-word and size-of-byte fields (6 bits each).&lt;/p&gt;&#xA;&lt;p&gt;The byte instructions were heavily used, for example, for manipulating text. The standard format was 7-bit bytes (ASCII encoding) packed 5 to a word, with one bit left over.  The byte instructions made it trivial to process such a format.&lt;/p&gt;&#xA;&lt;p&gt;Absent such instructions, the programmer would have had to write the and mask instructions himself.&lt;/p&gt;&#xA;&lt;p&gt;Stretch (the 7030) was similar.  It had a standard 18-bit address for word operations, and an extended format that specified the exact bitfield on which to operate. As with the PDP-10, the term 'byte' is used regardless of the bit count of the field.&lt;/p&gt;&#xA;&lt;p&gt;'Individual characters, or bytes, in a field may also be varied in length' -- see the section on Integer Arithmetic in &lt;a href=&quot;http://bitsavers.org/pdf/ibm/7030/22-6530-2_7030RefMan.pdf&quot; rel=&quot;noreferrer&quot;&gt;the 7030 ref manual&lt;/a&gt;.  The terminology is slightly different from the PDP-10; it seems words were divided into fields and fields were divided into bytes of 1 to 8 bits.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-06-24T11:02:34.440" LastActivityDate="2020-06-24T11:02:34.440" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15307" PostTypeId="2" ParentId="15305" CreationDate="2020-06-24T10:50:15.760" Score="10" Body="&lt;p&gt;&lt;em&gt;[Please see as well &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15327/6659&quot;&gt;this answer&lt;/a&gt;, as it's kind of an extension]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why did IBM 7030 or IBM 360 use byte and word addressing simultaneously&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not sure what's with /360 reference here, as it's uses byte addressing (*1).&lt;/p&gt;&#xA;&lt;p&gt;The 7030 in contrast used word and bit addressing.&lt;/p&gt;&#xA;&lt;p&gt;Word addressing of 18 bit when it was about words, and bit addressing in the form of a 24 bit address when it was about 'bytes'. A word address is always stored in the first 18 bits of an instruction word (32/64 bit), followed by 6 bit holding the bit address for instructions accessing chunks of a word (a majority). Most of them contained as well the bit length (up to 64). (*2,*3)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In 1950s machines had a 36 bit words.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Some had, others had different word sizes, like 18, 22 or 72.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And in this word we could pack symbols using 6 bits. And to fetch this symbols from the word programmer should do it using bit manipulations.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Some supported 6 bit sizes, other none or arbitrary.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In 1961 IBM released 7030 machine that also had word addressable memory. On the other hand, this machine was the first one which used term byte with 8 bits.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. While &lt;a href=&quot;https://en.wikipedia.org/wiki/Werner_Buchholz&quot; rel=&quot;nofollow noreferrer&quot;&gt;Werner Buchholz&lt;/a&gt; did coin the term &lt;a href=&quot;https://en.wikipedia.org/wiki/Byte#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;Byte&lt;/a&gt; when working on the 7030, it didn't describe a unit of 8 bit, but a variable size definition for a bit group of 1 to 8 bits (*4), defined in each instruction as needed. Others took it the same way, simply as an arbitrary number of bits anywhere between 4 and 9 (*5), depending on machine and/or language, 'bitten' out of a word.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If this 8 bits were addressable, we could store and get any 8 bit symbol from memory without any bit manipulations. But if memory was word addressable my assumption rises a contradiction: how we could address a single byte if memory was word addressable?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By extracting that byte? A byte access in a 7030 consists of a word address and a byte address within. Byte access was done by using a &lt;em&gt;data description&lt;/em&gt; (dds) made up of &lt;em&gt;mode&lt;/em&gt;, &lt;em&gt;field length&lt;/em&gt; and &lt;em&gt;byte size&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So my question is: what was the point of using term byte in IBM 7030, if memory was word addressable and we can not get any benefits from byte?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Byte in the 7030 sense isn't a fixed sub unit of a word like today, but a variable length unit within a variable length fiel within a word.&lt;/p&gt;&#xA;&lt;p&gt;At that point it may be helpful to peek into the &lt;a href=&quot;http://archive.computerhistory.org/resources/text/IBM/Stretch/pdfs/13-08/102634321.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;7030 Assembler manual&lt;/a&gt;, as about half of it is dedicated to data definition and how this is handled. It's worlds away from what is canon today and way more like some HLL (*6).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Another standard IBM did set. All addressing was bytewise, independent of word length or position. It simplified memory access to what we now take for granted.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All addresses had the same format and size&lt;/li&gt;&#xA;&lt;li&gt;All were byte addresses&lt;/li&gt;&#xA;&lt;li&gt;No address calculation between data types needed&lt;/li&gt;&#xA;&lt;li&gt;Halfwords and words are fixed length collection of fixed size bytes&lt;/li&gt;&#xA;&lt;li&gt;The only speciality of words and halfwords was that they had to be alligned to their size.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All this we take for granted today and many have a hard time to understand that the world before the /360 was different. More colourful but more chaotic as well.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Any length up to 64 bits could be used and bit addresses warped to word addresses. So it was not only possible to pack 3 21-bit integers into a word without any need for conversion, but as well spread such bitfields across words - like 30 12-bit integer over 3 words :)&lt;/p&gt;&#xA;&lt;p&gt;*3 - I personally thing the object orientated bit-mongering of Intel's 432 was quite influenced by the way the 7030 handeled it's data.&lt;/p&gt;&#xA;&lt;p&gt;*4 -  The Assembler used default sizes of 1, 4 or 8, depending on the mode field, if none were given explicite or by data definitions.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Or simply used byte as a term for any bit defined chunk different from a word - as in &amp;quot;A Bite from a Word&amp;quot; - like the PDP-10s bit field operations handling variable length sections of 1..36 bit were as well called byte.&lt;/p&gt;&#xA;&lt;p&gt;*6 - In some way it shows the quintessence of computer development between back then and today. In the old days computers were enhanced to offer instructions the programmer can use deliver the task, while today instructions are simplified and  programmers work hard to please the compiler.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-25T17:03:04.293" LastActivityDate="2020-06-25T17:03:04.293" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="15308" PostTypeId="1" CreationDate="2020-06-24T11:11:04.750" Score="2" ViewCount="112" Body="&lt;p&gt;There is an emulator for the Imlac PDS-1 and PDS-4 computers, but not a lot of software to run on it.  I know about this collection: &lt;a href=&quot;http://www.ubanproductions.com/imlac_sw.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ubanproductions.com/imlac_sw.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Is there anything else out there?&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2020-06-24T11:11:04.750" Title="Where can I find software for the Imlac computers?" Tags="&lt;software&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15309" PostTypeId="5" CreationDate="2020-06-24T15:25:35.473" Score="0" Body="&lt;p&gt;The System/360 computer line was introduced in in April 1964, and has been very influential. It was one of the first designs to distinguish between architecture and implementation, making it possible to design a range of software-compatible machines at widely varying price and capability points. Present-day IBM System z mainframe servers still have significant compatibility with S/360 application software.&lt;/p&gt;&#xA;&lt;p&gt;Commonplace architectural features that were introduced with the S/360 include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8-bit bytes.&lt;/li&gt;&#xA;&lt;li&gt;32-bit words.&lt;/li&gt;&#xA;&lt;li&gt;Memory addresses expressed in bytes, rather than words.&lt;/li&gt;&#xA;&lt;li&gt;Microcoding in a commercial system.&lt;/li&gt;&#xA;&lt;li&gt;9-track magnetic tape.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Features introduced in S/360 that are commonplace in the traditional mainframe world, but did not feature in UNIX or DEC operating systems, and are thus rare in mass-market computing in 2020 include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;EBCDIC character encoding, as opposed to ASCII. ASCII became the foundation of Unicode.&lt;/li&gt;&#xA;&lt;li&gt;Channel-based input/output.&lt;/li&gt;&#xA;&lt;li&gt;IBM Floating-point representation, largely replaced by IEEE floating-point.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Several manufacturers built S/360-compatible mainframe computers, which presaged the IBM-PC compatible market of the 1980s that evolved into today's Windows and Linux hardware market.&lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2020-06-24T15:25:35.473" LastActivityDate="2020-06-24T15:25:35.473" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15310" PostTypeId="4" CreationDate="2020-06-24T15:25:35.473" Score="0" Body="Questions regarding the IBM System/360 computers and their descendants. " OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2020-06-24T15:25:35.473" LastActivityDate="2020-06-24T15:25:35.473" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15312" PostTypeId="1" AcceptedAnswerId="15314" CreationDate="2020-06-24T18:18:00.090" Score="5" ViewCount="276" Body="&lt;p&gt;I am interested, did all Celeron processors support the FCOMIP instruction? I've made a compiler for my programming language and it uses FCOMIP for every floating-point comparison. I've noticed that causes the programs written in my programming language to &lt;a href=&quot;https://www.vogons.org/viewtopic.php?f=31&amp;t=74881&quot; rel=&quot;noreferrer&quot;&gt;crash&lt;/a&gt; when run on DosBox. So, I am interested how far in the past would I be able to go and still expect the programs my compiler outputs to work on an average computer.&lt;/p&gt;&#xA;" OwnerUserId="18606" LastActivityDate="2020-06-25T00:29:39.880" Title="Do all Intel Celeron processors support &quot;FCOMIP&quot;?" Tags="&lt;cpu&gt;&lt;intel&gt;&lt;x86&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ClosedDate="2020-06-25T05:17:59.557" ContentLicense="CC BY-SA 4.0" />
  <row Id="15314" PostTypeId="2" ParentId="15312" CreationDate="2020-06-24T18:31:05.587" Score="11" Body="&lt;p&gt;Short Answer: &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Celeron is a sales name, and does not specify a CPU architecture or instruction set.&lt;/p&gt;&#xA;&lt;p&gt;Having said that, &lt;a href=&quot;https://www.felixcloutier.com/x86/fcomi:fcomip:fucomi:fucomip&quot; rel=&quot;noreferrer&quot;&gt;FCOMIP&lt;/a&gt; was introduced with  the &lt;a href=&quot;https://en.wikipedia.org/wiki/P6_(microarchitecture)&quot; rel=&quot;noreferrer&quot;&gt;P6 Family&lt;/a&gt;, so essentially with the Pentium PRO (for workstation) and Pentium MMX for mainstream machines. IA-32 implementations before these CPUs do not feature this instruction. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Celeron#P6-based_Celerons&quot; rel=&quot;noreferrer&quot;&gt;first Celeron&lt;/a&gt; is essentially a Pentium II without the secondary cache, so it as well as all later CPUs carrying that name should support FCOMIP.&lt;/p&gt;&#xA;&lt;p&gt;Compatible CPUs only if they as well support &lt;a href=&quot;https://en.wikipedia.org/wiki/MMX_(instruction_set)&quot; rel=&quot;noreferrer&quot;&gt;MMX&lt;/a&gt;. There were many, but today only AMD, VIA and DMP are left - plus maybe a some virtually unknown embedded implementations:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;AMD &lt;a href=&quot;https://en.wikipedia.org/wiki/AMD_K6&quot; rel=&quot;noreferrer&quot;&gt;K6&lt;/a&gt; and later&lt;/li&gt;&#xA;&lt;li&gt;VIA &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_VIA_microprocessor_cores&quot; rel=&quot;noreferrer&quot;&gt;all models&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;DMP &lt;a href=&quot;http://www.vortex86.com/&quot; rel=&quot;noreferrer&quot;&gt;Vortex86&lt;/a&gt; - modern versions of the SIS 551&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Other, no longer manufactured models with MMX (and FCOMIP) are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cyrix &lt;a href=&quot;https://en.wikipedia.org/wiki/Cyrix_6x86#6x86MX_/_MII&quot; rel=&quot;noreferrer&quot;&gt;6x86 MX&lt;/a&gt; and MII, Cyrix III (now owned by VIA)&lt;/li&gt;&#xA;&lt;li&gt;IBM 6x86 (essentially Cyrix)&lt;/li&gt;&#xA;&lt;li&gt;IDT &lt;a href=&quot;https://en.wikipedia.org/wiki/WinChip&quot; rel=&quot;noreferrer&quot;&gt;WinChip&lt;/a&gt;, all models, (now owned by VIA)&lt;/li&gt;&#xA;&lt;li&gt;Rise &lt;a href=&quot;https://en.wikipedia.org/wiki/MP6&quot; rel=&quot;noreferrer&quot;&gt;mP6&lt;/a&gt;, sold to SIS&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Silicon_Integrated_Systems&quot; rel=&quot;noreferrer&quot;&gt;SIS&lt;/a&gt; 550/551 - essentially a Rise mP6 based PC on a single chip (now owned by DMP)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-25T00:29:39.880" LastActivityDate="2020-06-25T00:29:39.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15315" PostTypeId="5" CreationDate="2020-06-25T01:58:16.857" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-06-25T01:58:16.857" LastActivityDate="2020-06-25T01:58:16.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15316" PostTypeId="4" CreationDate="2020-06-25T01:58:16.857" Score="0" Body="For questions about Random Access Memory" OwnerUserId="18543" LastEditorUserId="18543" LastEditDate="2020-06-25T12:44:24.160" LastActivityDate="2020-06-25T12:44:24.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15317" PostTypeId="1" CreationDate="2020-06-25T04:04:51.660" Score="2" ViewCount="109" Body="&lt;p&gt;Apple II emulation must have started around 25 years ago but I can't seem to find a history of emulation of the platform.&lt;/p&gt;&#xA;&lt;p&gt;There are several disk image file formats but for now I'm interested in the two raw formats that use the &lt;code&gt;.dsk&lt;/code&gt; file extension.&lt;/p&gt;&#xA;&lt;p&gt;There's &lt;code&gt;.do&lt;/code&gt; for DOS 3.3 sector ordering and &lt;code&gt;.po&lt;/code&gt; for ProDOS block ordering. We've discussed them before.&lt;/p&gt;&#xA;&lt;p&gt;But I'm looking for which programmer or which emulator or other disk tool was the one responsible for introducing each format. Perhaps both appeared together with the first Apple II emulator, or perhaps &lt;code&gt;.do&lt;/code&gt; was first and &lt;code&gt;.po&lt;/code&gt; came out later with a different emulator.&lt;/p&gt;&#xA;&lt;p&gt;Raw formats like these that have no structure or headers tend not to have homepages so it's hard to track down their origins.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-06-25T04:24:32.793" LastActivityDate="2020-06-25T08:18:22.947" Title="Which Apple II emulators were the first ones each to use the .do and .po &quot;dsk&quot; floppy disk image file formats?" Tags="&lt;history&gt;&lt;apple-ii&gt;&lt;emulation&gt;&lt;disk-image&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15318" PostTypeId="1" AcceptedAnswerId="15327" CreationDate="2020-06-25T06:16:39.777" Score="3" ViewCount="209" Body="&lt;p&gt;As far as I know, IBM 7030 used term byte. But this byte was just an imaginary term to make easier for our brain to work with bits. So it had nothing in common with a physical realization of the CPU.&lt;/p&gt;&#xA;&lt;p&gt;Facts:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://archive.computerhistory.org/resources/text/IBM/Stretch/pdfs/13-08/102634321.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;According to assembler manual&lt;/a&gt; byte had size from 1 to 8 bits and we could specify this size in the code.&lt;/li&gt;&#xA;&lt;li&gt;CPU had max register size and word size  64 bits&lt;/li&gt;&#xA;&lt;li&gt;Memory size was 2^18 words, so it was enough 18 bits to navigate through all the words in the RAM&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Now my guesses:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;By using asm code we could navigate to any byte inside the word, and specify byte size from 1 to 8 bits&lt;/li&gt;&#xA;&lt;li&gt;Therefore, to do that we need to use 3 bits to specify byte size (form 1 to 8). Also we need 6 bits to specify byte address inside the word, since if byte size is 1 bit, then it can be in any of 64 positions inside the word&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Therefore, to navigate to the particular byte we need 18+3+6=30 bits, and therefore we have 64-30=34 unused bits.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My question is:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If all my guesses are correct, why did byte has size maximum 8 bits? IBM could make it much larger. Maybe it was just a magic number?&lt;/p&gt;&#xA;" OwnerUserId="18599" LastActivityDate="2020-06-27T11:42:14.527" Title="Why was the maximum byte size of 8 bits on IBM 7030?" Tags="&lt;memory&gt;&lt;ibm&gt;&lt;cpu&gt;&lt;ram&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15319" PostTypeId="1" AcceptedAnswerId="15328" CreationDate="2020-06-25T07:13:31.117" Score="5" ViewCount="187" Body="&lt;p&gt;I've tried to find information when term 'word' was firstly used. And it seems that even ENIAC used this term.&lt;/p&gt;&#xA;&lt;p&gt;Is it safe to say that term 'word' was invented with ENIAC?&lt;/p&gt;&#xA;" OwnerUserId="18599" LastEditorUserId="5199" LastEditDate="2020-06-25T15:39:58.573" LastActivityDate="2020-06-26T01:32:22.583" Title="When was term &quot;word&quot; first used as reference to CPU max register size" Tags="&lt;cpu&gt;&lt;terminology&gt;&lt;eniac&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15320" PostTypeId="2" ParentId="15317" CreationDate="2020-06-25T07:15:48.990" Score="1" Body="&lt;p&gt;This answer is still a work in progress...&lt;/p&gt;&#xA;&lt;p&gt;A Unix emulator named &lt;a href=&quot;https://mirrors.apple2.org.za/ftp.apple.asimov.net/emulators/apple2-emu-linux/emua2e.docs&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Apple //e Emulator&amp;quot; by Randy Frank&lt;/a&gt; (aka &amp;quot;apple2e&amp;quot; or just &amp;quot;ap2e&amp;quot; in filenames) goes right back to 1990.&lt;/p&gt;&#xA;&lt;p&gt;It used ProDOS order for both ProDOS and DOS 3.3 disk images!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;DOS 3.3:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note: the UNIX files contain all the data  on a DOS 3.3 5.25 disk.&#xA;However, the files are not in straight  t0s0,t0s1,t0s2... order.&#xA;Instead the DOS 3.3 files are in PRODOS interleave  format.  So the&#xA;first 256 bytes are t0s0 but the second are t0se.  This is  exactly&#xA;the format you get by reading a DOS 3.3 disk with the PRODOS block&#xA;scheme.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;ProDOS:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;PRODOS UNIX files  are just a block by block binary dump of the data&#xA;on the 5.25 disk.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;BUT&lt;/strong&gt;&lt;/em&gt;&#xA;It seems this emulator did now allow loading and saving arbitrary disk files yet, so it did not use the &lt;code&gt;.dsk&lt;/code&gt; or &lt;code&gt;.po&lt;/code&gt; file extensions.&lt;/p&gt;&#xA;&lt;p&gt;The emulator was distributed with a pair of &lt;a href=&quot;https://mirrors.apple2.org.za/ftp.apple.asimov.net/emulators/apple2-emu-linux/emu.disks.tar.gz&quot; rel=&quot;nofollow noreferrer&quot;&gt;disk images for each disk operating system&lt;/a&gt; named as so:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;s6d1                   yes                 DOS 3.3 slot 6 drive 1 disk arch&#xA;s6d2                   yes                 DOS 3.3 slot 6 drive 2 disk arch&#xA;PRODOS.IMAGE.D1        yes                 PRODOS slot 7 drive 1 disk arch&#xA;PRODOS.IMAGE.D2        yes                 PRODOS slot 7 drive 2 disk arch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now it could be that there was an even earlier Apple 2 emulator and I don't yet know which emulator or tool first used the file extensions &lt;code&gt;.dsk&lt;/code&gt; or &lt;code&gt;.po&lt;/code&gt; for this format, or which emulator first used the DOS 3.3 sector ordering format.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; I found the distro archive with the disk images and added the link. The DOS 3.3 images are in ProDOS format as confirmed by opening them with CiderPress. The ProDOS images both have a bunch of junk at the end. After truncating them to exactly 140K CiderPress confirms they are ProDOS in ProDOS order.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-06-25T08:18:22.947" LastActivityDate="2020-06-25T08:18:22.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15321" PostTypeId="1" CreationDate="2020-06-25T09:15:40.270" Score="5" ViewCount="383" Body="&lt;p&gt;CNN's &lt;a href=&quot;https://edition.cnn.com/2020/06/25/us/mary-w-jackson-hidden-figures-nasa-building-trnd/index.html&quot; rel=&quot;noreferrer&quot;&gt;NASA will name its headquarters after Mary W. Jackson, the agency's first African American female engineer&lt;/a&gt; and NASA news item &lt;a href=&quot;https://www.nasa.gov/press-release/nasa-names-headquarters-after-hidden-figure-mary-w-jackson&quot; rel=&quot;noreferrer&quot;&gt;NASA Names Headquarters After ‘Hidden Figure’ Mary W. Jackson&lt;/a&gt; include a photograph of &lt;a href=&quot;https://en.wikipedia.org/wiki/Mary_Jackson_(engineer)&quot; rel=&quot;noreferrer&quot;&gt;NASA engineer Mary Jackson&lt;/a&gt;, and that wikipedia page includes the original photo shown below.&lt;/p&gt;&#xA;&lt;p&gt;From &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Mary_Jackson_working.jpg&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Description: Mary Jackson working at NASA Langley&lt;/p&gt;&#xA;&lt;p&gt;Date: 2 June 1977, 08:00:55&lt;/p&gt;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://www.nasa.gov/content/mary-jackson-biography&quot; rel=&quot;noreferrer&quot;&gt;https://www.nasa.gov/content/mary-jackson-biography&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Author: NASA&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Clicking the image shows it in the original size from that NASA link.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; Is this a commercially built computer, or is this an assemblage of several pieces of equipment custom built somehow? I'm looking at the patch blocks behind Ms. Jackson, are those seen in computers of the mid 1970's?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Reeyi.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Reeyi.jpg&quot; alt=&quot;Mary W. Jackson at NASA Langley&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7118" LastEditorUserId="7118" LastEditDate="2020-06-25T09:21:29.070" LastActivityDate="2020-06-26T09:21:07.070" Title="Is this a custom NASA Langley-built computer or is this a commercial system (ca 1970's)?" Tags="&lt;identify-this-computer&gt;&lt;mainframe&gt;" AnswerCount="3" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15322" PostTypeId="2" ParentId="15318" CreationDate="2020-06-25T09:17:28.710" Score="3" Body="&lt;p&gt;As per @Raffzahn's comment on his answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15305/why-did-ibm-7030-or-ibm-360-use-byte-and-word-addressing-simultaneously&quot;&gt;Why did IBM 7030 or IBM 360 use byte and word addressing simultaneously&lt;/a&gt;, the 8 is an artefact of multi-byte instructions, where there was only 3 bits to specify the skip, making it trivial to have 1-8 bits.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;@NoNameQA I added more to the answer. No, 8 was simply what could be put in a 3 bit field offered by instructions that handled more than a byte at once. Essetially all instructions when the machine had to handle the advancement of bit addresses for multiple elements. Other instructions allow sizes between 1 and 64. Check teh instruction encoding shown in the manual.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'll leave it to @Raffzahn to make a more complete answer.&lt;/p&gt;&#xA;" OwnerUserId="3842" LastActivityDate="2020-06-25T09:17:28.710" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15324" PostTypeId="1" CreationDate="2020-06-25T14:30:41.150" Score="2" ViewCount="94" Body="&lt;p&gt;What is the maximum length of a relocator traces or wires that will reliably send signals to Mother Board of a CDTV. I bought TF536, unfortunately due to miscommunication with the seller the card turned out to not fit the case at all. Effectively I have a useless $200 laying around and no purpose for it. Can I still salvage it?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tMSAq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tMSAq.jpg&quot; alt=&quot;TF536&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-06-25T15:51:14.400" Title="Max length of traces / wires for MC680x0 relocator" Tags="&lt;cpu&gt;&lt;motorola-68000&gt;&lt;amiga-cdtv&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15325" PostTypeId="2" ParentId="15324" CreationDate="2020-06-25T14:58:56.977" Score="2" Body="&lt;p&gt;According to the project page on GitHub for the &lt;a href=&quot;https://github.com/SukkoPera/Open68000Relocator&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open68000Relocator&lt;/a&gt; board:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;The board has been tested and proved to be &#xA;working perfectly with a TF530 card running&#xA;at 50 MHz.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So, if you can use the same swapping of the 68k orientation in the CDTV, then this re-locator would probably have a good chance of working. Likewise, some minor variation that does not introduce additional noise in the PCB would probably work too.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line is you'll have to try it out and see whether it works and whether it meets your own expectations for reliability.&lt;/p&gt;&#xA;&lt;p&gt;Sometimes, in my experience, the most important factor is the mechanical stability of these socket extenders once they are installed in the Amiga. You may need to take some additional pains to ensure the board is well supported and won't simply wiggle loose. Using good quality mechanical pins/sockets can help with this, as well as installing standoffs to better support the board, if necessary.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-06-25T15:51:14.400" LastActivityDate="2020-06-25T15:51:14.400" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15326" PostTypeId="2" ParentId="15321" CreationDate="2020-06-25T17:01:06.797" Score="9" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;NASA's &lt;a href=&quot;https://en.wikipedia.org/wiki/Langley_Research_Center&quot; rel=&quot;noreferrer&quot;&gt;Langley Research Center&lt;/a&gt; primarily performs research.  It has more than 40 wind tunnels.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.nasa.gov/content/mary-jackson-biography&quot; rel=&quot;noreferrer&quot;&gt;Mary Jackson&lt;/a&gt; worked with the wind tunnels at Langley, both before and after obtaining her engineering degree.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In 1953, she began working for engineer Kazimierz Czarnecki in the Supersonic Pressure Tunnel.  [...] In 1958, the same year that NACA became NASA, she was promoted to aerospace engineer, making history as the organization’s first black female engineer. [...] As an engineer, Jackson remained at the Langley facility, but moved over to work at the Theoretical Aerodynamics Branch of the Subsonic-Transonic Aerodynamics Division. &lt;strong&gt;Her work focused on analyzing data produced from those wind tunnel experiments&lt;/strong&gt; as well as actual flight experiments.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.thoughtco.com/mary-jackson-4687602&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Analyzing the picture shows a large number of analog elements, especially ones that would be useful for recording and analyzing data.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Along the left edge of the picture are one or two rows of knobs.  Surrounding them appears to be some digital readouts (possibly showing the knob settings).&lt;/li&gt;&#xA;&lt;li&gt;There are about a dozen analog meters below the knobs.  Two more analog meters appear on the right-most rack.&lt;/li&gt;&#xA;&lt;li&gt;The three racks to the right of Jackson each have strip chart recorders.  The left and middle recorders retain their charts inside the cabinet, but the chart from the right-most rack spools outside, down to the desk in the lower-right corner of the picture.  A fourth rack immediately to her left may also be a strip chart recorder.&lt;/li&gt;&#xA;&lt;li&gt;There aren't enough switches or rows of lights to be a mainframe computer.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I believe that the picture portrays a recording room for one of the wind tunnels.  Jackson's job was to analyze the results of wind tunnel tests, so she would have spent a lot of time there.&lt;/p&gt;&#xA;&lt;p&gt;It's not a mainframe.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-06-25T17:01:06.797" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15327" PostTypeId="2" ParentId="15318" CreationDate="2020-06-25T17:01:13.150" Score="4" Body="&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15307/6659&quot;&gt;This is kind of an extension to a [previous question]&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;The 7030 addressing, works for many instructions, on bit level, not words. Next to all data structures, including bytes, could be located at any bit address. All addressing was always done using 24 bit.&lt;/p&gt;&#xA;&lt;p&gt;Byte is not a hard defined entity like today, but simply a name for a repeated bit-group (i.e. 1 or more) that is stored consecutive in memory, position and element size (and element number) is part of instructions that handle such groups.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JU9V3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JU9V3.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Description of the term &lt;em&gt;byte&lt;/em&gt; from the &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/ibm/7030/22-6530-2_7030RefMan.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;reference manual&lt;/a&gt; p.11.&lt;/p&gt;&#xA;&lt;p&gt;From today's viewpoint these groups could be seen as a variable sized array of integers of arbitrary (but all the same) size. Something usually called a vector. And instructions working thereon are vector operations(*1). After all, a decimal number is nothing else than a vector of digits, isn't it? Likewise a string being a vector of characters. Some languages even call strings that, a vector of integers/chars/ordinals.&lt;/p&gt;&#xA;&lt;p&gt;You need to get rid of bytes and words. Words have only a meaning for the memory interface. And bytes (on 7030) are only really meaningful when it's about BCD (well, and a few abuses thereof to do text ... and to mark sign handling in integers ...).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Time for a Rant&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;(Caveat, @NoNameQA, this is not personal in any way, just a generic observation which fits here)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;CPU's aren't by default the primitive cogwheel constructions as told today. Something that takes a byte, does an integer operations thereon and stores it again. Anything else are bells and whistles and FP being something like a necessary rucksack to schlepp. They can be a lot more. Anything you want them to be and the 7030 is a great example what could have been, if it weren't for the /360 normalizing all of that into a consisted and simple framework and the dreaded C to turn that in to an even more primitive pile of bytes and nothing else.&lt;/p&gt;&#xA;&lt;p&gt;All since then was primitivizing CPUs to fit that concept of the bare minimum, just to later on throw billions and ever billions of transistors onto the resulting primitive code to make some sense of it. The same stupidity that got us RISC - don't let me start on that.&lt;/p&gt;&#xA;&lt;p&gt;And it's the same run to stupidity that made cohorts of programmers stroke the poor little 8088 against the grain by calculating 'far' pointers. It's a frickin' 16 bit CPU, not 20 or whatsoever.&lt;/p&gt;&#xA;&lt;p&gt;If one wants to learn about a new CPU, it might not be necessary has to drop every previous knowledge, but it helps a lot to be flexible in redefining &lt;strong&gt;everything&lt;/strong&gt;. While it's thus useful to compare with previous learned concepts, there is no sense in trying to project it back. Especially not based on words. Different CPUs use different languages, and much like human languages, words can be false friends, meaning the same word (spelling/pronounciation) used in two both languages has different meaning in either. Eventually complete opposite ... a sentence already an example, as in German 'Eventuell' has a meaning of 'under certain conditions' so rather like 'maybe'. Both are based on the same Latin 'eventualis' covering somehow both meanings. And the 7030's use of byte is like a prime example of this in the computer world: It's byte is a pice of a word, and it can describe some kind of character or digit, but that's it.&lt;/p&gt;&#xA;&lt;p&gt;So, again, DO NOT try to press new knowledge into existing. It exists in parallel and in relation, but it's almost never a sub- or super-set. And most of all, each CPU is special on it's own.&lt;/p&gt;&#xA;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Details&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;According to assembler manual byte had size from 1 to 8 bits and we could specify this size in the code.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not &lt;em&gt;had&lt;/em&gt; but &lt;em&gt;could have&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Using bytes was only a thing when doing operations on a set of them. Like when doing BCD calculation, a byte size of 4 would be nice, but the machine could as well operate with 6 bit BCD or 5 bit.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;By using asm&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Or any other language.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Therefore, to do that we need to use 3 bits to specify byte size (form 1 to 8). Also we need 6 bits to specify byte address inside the word, since if byte size is 1 bit, then it can be in any of 64 positions inside the word&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You seam to be stuck by an implied byte position within a word. That is a feature (*2) of modern, canonical CPUs, but the 7030 isn't one of those. A byte (group) can start at any position regardless of the byte size.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;It uses bit addressing with 24 bit.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;You need to get rid of bytes and words. Words have only a meaning for the memory interface. And bytes are only really meaningful when it's about BCD (well, and a few abuses thereof to do text). The 7030 operates on a memory of bits ... 16 megabits of continuous memory. And the memory interface is made up of two 64 bit 'look ahead' registers for each access, so any data item used can spread across memory words. This hides the word structure from any data access.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lfDLn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lfDLn.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Example for memory organisation from the &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/ibm/7030/22-6530-2_7030RefMan.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;reference manual&lt;/a&gt; p.17.&lt;/p&gt;&#xA;&lt;p&gt;Only instructions are to be aligned on 32 bit boundaries. That's why the address field in branch and indexing instruction is 19 bit. This is simply done to improve performance.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Therefore, to navigate to the particular byte we need 18+3+6=30 bits,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To start with, 18+6+3 is only 27, not 30.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and therefore we have 64-30=34 unused bits.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Unused by what and why?&lt;/p&gt;&#xA;&lt;p&gt;An address comes either from one of the 16 index registers, with only the lower 24 bit used, or from within the instruction, were it may be 18, 19, 24 (see p.18 of the &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/ibm/7030/22-6530-2_7030RefMan.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;reference manual&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;An instruction has 32 or 64 bit and will of course contain more than just an address ... most likely opcode bits to identify the instruction and its length. For byte operations like integer arithmetic, as seen here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yGfiE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yGfiE.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This includes in detail:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;24 bit address,&lt;/li&gt;&#xA;&lt;li&gt;4 bits identifying this as an arithmetic integer instruction&lt;/li&gt;&#xA;&lt;li&gt;4 bits specifying an index register&lt;/li&gt;&#xA;&lt;li&gt;3 bits spcifying the address mode&lt;/li&gt;&#xA;&lt;li&gt;6 bits defining the operand and result length in total&lt;/li&gt;&#xA;&lt;li&gt;3 bits for byte size if it's a byte type operation&lt;/li&gt;&#xA;&lt;li&gt;7 bits of offset within the 128 bit accumulator the value/result is to be placed&lt;/li&gt;&#xA;&lt;li&gt;2 bits modifier for sign handling for either operand&lt;/li&gt;&#xA;&lt;li&gt;1 bit marker for using BCD or binary arithmetic&lt;/li&gt;&#xA;&lt;li&gt;6 bits specifying the operation type (Add, Mul, Load, ...)&lt;/li&gt;&#xA;&lt;li&gt;4 bits specifying an index register to be used to modify length, byte size and offset.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Together 64 bits, not a single bit wasted.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If all my guesses are correct, why did byte has size maximum 8 bits? IBM could make it much larger.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Or smaller. this is not a good question to be asked on RC.SE as it asks for motivation/reasoning which is usually not preserved in full detail. In this case the reference manual (again) offers a hint when discussing BCD arithmetic and zoning:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lDCki.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lDCki.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Again &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/ibm/7030/22-6530-2_7030RefMan.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;reference manual&lt;/a&gt; this time p.58.&lt;/p&gt;&#xA;&lt;p&gt;So one reason might have been that with values between 4 and 6 being useful for BCD, 3 bits would be needed anyway, so anything up to 8 is possible without spending more bits. And belive me, zoning was an important issue back then at the boundry between punch card processing and computers. The /360, otherwise not really into much specialized handling has in addition to all BCD instructions three instruction to handle the zone part (upper 4 bits) of a byte: MVN, MVO and MVZ.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - If someone now draws a line to vector CPUs (and ultimately GPUs), he's right. One reason why the 7030 is often called the first supercomputer.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Or better drawback of the byte/word relation the /360 planted and everyone took.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-27T11:42:14.527" LastActivityDate="2020-06-27T11:42:14.527" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="15328" PostTypeId="2" ParentId="15319" CreationDate="2020-06-25T17:20:14.613" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I've tried to find information when term 'word' was firstly used. And it seems that even ENIAC used this term.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And before it, Zuse used it to describe the words of his first machine.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is it safe to say that term 'word' was invented with ENIAC?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Does it need to be invented? Or isn't it rather obvious? A word is simply the next structure level after a single letter. Like a number is made up from digits and markings like sign and decimal point.&lt;/p&gt;&#xA;&lt;p&gt;The term 'word' was already used in mathematics/logic to describe related groups of information units, way before it got adapted to (real existing) computers. For example the Norwegian mathematician &lt;a href=&quot;https://en.wikipedia.org/wiki/Axel_Thue&quot; rel=&quot;nofollow noreferrer&quot;&gt;Axel Thue&lt;/a&gt; worked in the early 20th century (1900..1920) on word problems, an area tight coupled to theoretical computing. He used the term 'word' in 1914 published a paper called &amp;quot;Probleme über Veränderungen von Zeichenreihen nach gegebenen Regeln&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Sorry, no idea about the English title - at that time German was still the language of Mathematics - Even Turing used the German Term 'Entscheidungsproblem' (coined by &lt;a href=&quot;https://en.wikipedia.org/wiki/David_Hilbert&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hilbert&lt;/a&gt;) in the title of his 1936 paper regard being written in English. Which is not only the paper he introduced his 'Turing Machine' but as well related to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Halting_problem&quot; rel=&quot;nofollow noreferrer&quot;&gt;halting problem&lt;/a&gt; mapped out by Thue. Another well known mathematician continuing this was &lt;a href=&quot;https://en.wikipedia.org/wiki/Emil_Leon_Post&quot; rel=&quot;nofollow noreferrer&quot;&gt;Post&lt;/a&gt; working in the US during the 1930s and 40s on computational theory. I guess all of them can be seen as rather influential on the theoretical side of computing.&lt;/p&gt;&#xA;&lt;p&gt;So it's safe to say that the term 'word' for a dedicated information unit was well established even before any computer was build.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-26T01:32:22.583" LastActivityDate="2020-06-26T01:32:22.583" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15329" PostTypeId="1" AcceptedAnswerId="15331" CreationDate="2020-06-25T20:01:36.670" Score="12" ViewCount="2141" Body="&lt;p&gt;When the IBM PC was released, it did not take long for people to figure out that there would be a big market for compatible machines.&lt;/p&gt;&#xA;&lt;p&gt;The first wave relied on MS-DOS as the compatibility layer. The theory was that applications wouldn't hit the hardware directly, they would use DOS calls instead, so you could sell slightly incompatible hardware as long as you had an x86 CPU and a version of DOS tweaked for your machine.&lt;/p&gt;&#xA;&lt;p&gt;The problem was that the DOS display code was weirdly slow. Seriously: the first time I wrote a program on a 286 PC compatible, in C, with (normal 80x25 text) full-screen display, was in the late eighties. I knew in theory you were supposed to go via DOS, so I tried that. To this day I have no idea how they managed to make it that slow without deliberately putting delay loops in the code. Second attempt via BIOS: faster but still much too slow. Third attempt straight to hardware: screen updated instantly. So I shrugged and kept doing it that way. So did everyone else, which is what killed off the semi-compatible DOS machines. The second wave understood the need to be one hundred percent compatible at the hardware level.&lt;/p&gt;&#xA;&lt;p&gt;But was there anything other than video that was a source of hardware compatibility issues in the first wave? Or put another way: after video, what was the second most common source of compatibility issues for the semi-compatible DOS machines of the first wave?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-06-26T17:52:45.200" Title="What was the second most common incompatibility in MS-DOS machines?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;ms-dos&gt;&lt;ibm-pc&gt;&lt;compatibility&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="3" ClosedDate="2020-06-26T18:50:49.247" ContentLicense="CC BY-SA 4.0" />
  <row Id="15330" PostTypeId="2" ParentId="15329" CreationDate="2020-06-25T20:43:35.837" Score="11" Body="&lt;p&gt;Aspects I recall, perhaps influenced by the area I was working in at the time:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Video display (as you mention)&lt;/li&gt;&#xA;&lt;li&gt;Serial ports&lt;/li&gt;&#xA;&lt;li&gt;Timer interrupt&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I only had to work with &amp;quot;near-compatible&amp;quot; machines a few times before everything went to &amp;quot;100% compatible&amp;quot; for most hardware interfaces.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2020-06-25T20:43:35.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15331" PostTypeId="2" ParentId="15329" CreationDate="2020-06-25T22:44:12.740" Score="13" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;But was there anything other than video that was a source of hardware compatibility issues in the first wave? Or put another way: after video, what was the second most common source of compatibility issues for the semi-compatible DOS machines of the first wave?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;On the software side I'd say sound may lead a tiny bit before any other hardware device - then again, fast serial did need direct hardware access on the PC, so serial might be top sound.&lt;/p&gt;&#xA;&lt;p&gt;On the hardware side it was simply incompatible expansion slots, limiting the hardware available.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Beside that, I'd like to add some remarks:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The first wave relied on MS-DOS as the compatibility layer&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And BIOS, as next to all compatible manufacturers did as well support all BIO calls as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The theory was that applications wouldn't hit the hardware directly, they would use DOS calls instead, so you could sell slightly incompatible hardware&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Incompatible in itself wasn't a goal. Beside cases where it was about using existing x86 machines with DOS - which in facts predates the PC, as SCP sold its DOS to several x86 boards, including their own, before licencing it to Microsoft.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;as long as you had an x86 CPU and a version of DOS tweaked for your machine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Tweeked sound like patching and a somehow lesser quality. DOS is based on a clear separation between the DOS itself, and its hardware abstraction layer (IO.SYS).&lt;/p&gt;&#xA;&lt;p&gt;DOS was neither originally written for the IBM-PC nor used first with it. All adaptations to any specific machine had to be done by the manufacturer (see an in part explanation &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15242/which-is-the-minimum-set-of-interrupts-functions-i-should-implement-in-a-replace/15246#15246&quot;&gt;here&lt;/a&gt;). Microsoft offered a set of examples and guidelines how to do it, the rest was up to each vendor.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Adapting DOS to hardware was a straight job and standard procedure.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The problem was that the DOS display code was weirdly slow. [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I knew in theory you were supposed to go via DOS, so I tried that. To this day I have no idea how they managed to make it that slow without deliberately putting delay loops in the code.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The negative performance impact depends in part thru the layered structure IBM used. While DOS calls all functions in IO.SYS as far calls, IBM's IO.SYS is for much of the time a warper around BIOS, invoking it via INT calls. Not exactly the shortest path. But ...&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Second attempt via BIOS: faster but still much too slow. Third attempt straight to hardware: screen updated instantly.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This usually depends way more on your program code (and language runtime) than DOS (*2):&lt;/p&gt;&#xA;&lt;p&gt;For example if the language hands over each and every character on its own to DOS instead of doing strings. Sending &amp;quot;Hello World\n\r&amp;quot; via Function 02h (Write Character) adds 13 times the overhead of calling DOS, IO.SYS and in turn BIOS compared to using a single Function 09h (Write String) call. Each invocation of DOS (INT) and call from DOS to IO.SYS (CALLF) with its returns alone are ~182 cycles (72+36+34+44) (*3,*4) plus whatever is needed in parameter conversion and alike. It's easy to see that outputting a whole screen takes close to 0.1 seconds (only these 4 instructions) overhead between using either function. And that's still before invoking BIOS, which in case of IBM takes another INT call, adding another 116 cycles.&lt;/p&gt;&#xA;&lt;p&gt;And yes, many language runtimes acted exactly that way.&lt;/p&gt;&#xA;&lt;p&gt;Related to this but entirely program dependant was how a screen was handled. Of course, this depended a lot on the application, but staying within text base, it's again a huge difference between brute force updating, like cranking out the whole screen or large parts thereof with each update, or only update fields that have changed. The later was already a huge difference when working with serial terminals and it was as well true for the PC.&lt;/p&gt;&#xA;&lt;p&gt;One value I remember is that for one system we had the average screen size in 'uncompressed' mode was about 1.2 KiB per screen. This includes all characters attributes and field markers. By using switching this for only updating what has been changed, i.e. calculating a delta and send only changed values, after positioning. It wasn't easy, but the savings were astonishing. The average dropped from over 1200 bytes to less than 300. Our terminals were connected on 288 kBit lines, so comparable fast for 1980. Still, reducing it to less than a quarter changed it from being fast to instant.&lt;/p&gt;&#xA;&lt;p&gt;Long story short, it's exactly the same situation with the IBM-PC (*5). It depends on the way the terminal output is organized, with an over all goal of minimizing output.&lt;/p&gt;&#xA;&lt;p&gt;I did several programs on the original PC (I was young and needed the money) at first in BASIC but soon (1984?) in Turbo PASCAL. Applications were entirely text based and for an architecture firm, so lots of numbers. some screens looked more like spread-sheets. Still it was no problem to keep updates fast - by only positioning and writing what has changed. And yes, all was done using DOS output and terminal like sequences - not at least due the reason all development was done on an Apple II using CP/M. I simply didn't want to switch at the time (*6). I guess it can't get less compatible :)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So I shrugged and kept doing it that way. So did everyone else, which is what killed off the semi-compatible DOS machines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Mind to add what region you live(d) in? (*7) As this does not match my (European) experience. A large number of machines with less than perfect (or no) hardware compatibility prevailed during the 1980s. Sirius, Apricot, Amstrad, Siemens, Philips, Thomson, Olivetti, and many others did their own designs, only partial or not compatible at all. Some, like the Olivetti M24 SP, a 10 MHz 8086 version coming as late as 1986 (like the Amstrad 1512) and sold until the early 1990s.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The second wave understood the need to be one hundred percent compatible at the hardware level.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Again, this may differ in region.&lt;/p&gt;&#xA;&lt;p&gt;Also there's a large number of what I would call minimum compatible machines. In the US the Tandy model 1000 might be the best known one. They may have featured some basically compatible video modes to make software run, but for serious use they did need specific drivers. I guess we all remember the marking on game boxes - some even differentiating between Tandy 1000 models. This lasted well into the late 1990s.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[...] compatibility issues for the semi-compatible DOS machines of the first wave?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By now (aka 40 years later) we should have learned to stay away from single sided and twisted wording as it was used back then to promote a certain agenda. These machines were DOS (and usually BIOS) compatible computers. There is no semi-compatible when it was about these software interfaces. Only the hardware side had a continuum of compatibility, starting with processor speed and type, over video memory location (*8), all the way to fully incompatible.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Here BTW non compatible machines provided additional speed just by the way of calling. Like the AT&amp;amp;T PC6300 (a rebadged Olivetti M24) directly called the ROM routines, not going thru another INT but using a far call to ROM , thus speeding up every invocation (36 cycles vs. 72). Others, like the Siemens PC-D, were the BIOS was integrated within IO.SYS, shaved of even more overhead.&lt;/p&gt;&#xA;&lt;p&gt;*2 - But of course the way it is implemented. See *1.&lt;/p&gt;&#xA;&lt;p&gt;*3 - All cycle counting in 8088 reference. 80286 might be faster, but not much (47+23+22+28=120).&lt;/p&gt;&#xA;&lt;p&gt;*4 - Or it can be, depending on the implementation in IO.SYS. In every case it saves at least 12 invocations of DOS and DOS calls to IO.SYS.&lt;/p&gt;&#xA;&lt;p&gt;*5 - In fact, it's even close numerical with what's possible on a PC.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Which had the advantage of being able to program using my Apple II. Development cycle included programming and debugging on the Apple, moving it to a PC, that has only be bought to compile and write PC floppies to deliver.&lt;/p&gt;&#xA;&lt;p&gt;*7 - Filling up ones RC.SE profil, including the location, does help in communicating, doesn't it?&lt;/p&gt;&#xA;&lt;p&gt;*8 - I used a PC-D until the late 1990 as my main work machine. I simply loved the keyboard and it was fast enough for editing and compiling. It was in no way hardware compatible by using a 186 CPU and not a single interface at the same address, even more, using different chips for all I/O. In my memory much software did run right away, and a great number needed only small patches - like changing the segment address used for the video buffer. Of course all Windows and GEM software did run right away as supposed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-06-25T22:44:12.740" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15333" PostTypeId="2" ParentId="15321" CreationDate="2020-06-26T01:25:58.313" Score="2" Body="&lt;p&gt;&lt;em&gt;(This is more of an addition to DrSheldons answer)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is this a commercially built computer,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Most likely not.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;or is this an assemblage of several pieces of equipment custom built somehow?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'd say custom build. Also not really a computer, but a control or recording station&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm looking at the patch blocks behind Ms. Jackson,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;These are &lt;a href=&quot;https://en.wikipedia.org/wiki/Plugboard&quot; rel=&quot;nofollow noreferrer&quot;&gt;plug boards&lt;/a&gt; holding wires making job specific connections. There are two of the smaller (right) one laying on the table in the lower right, behind the manual or report. One with some plugs.&lt;/p&gt;&#xA;&lt;p&gt;The Manual looks quite like a NASA or US government in general paper of the 60s.&lt;/p&gt;&#xA;&lt;p&gt;Also, going by the labelling, these do not seam like programs, more like configuring a set of connections (data path) between sensors and recording equipment.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;are those seen in computers of the mid 1970's&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, most definitely not. In computing they were used with punch card machinery and calculators. IBM's 604/605 of 1948 was about the last generation of punch card fed calculators using plug boards, as well as IBM's &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_305_RAMAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;305 RAMAC&lt;/a&gt; of 1956, which eventually may be the first and last generation of computers, similar to what we today call a computer, that were plug board programmed. In addition plug boards have been used a few more years in peripherals like card punches, sorters and printers for configuration/programming. But all of that vanished during the 1960s.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-26T01:42:24.140" LastActivityDate="2020-06-26T01:42:24.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15334" PostTypeId="1" AcceptedAnswerId="15335" CreationDate="2020-06-26T03:42:33.410" Score="8" ViewCount="470" Body="&lt;p&gt;The original IBM PC used a 5.25&amp;quot; floppy disk format of two sides, 40 tracks, 9 sectors per track, 512 bytes per sector, for 360K per disk.&lt;/p&gt;&#xA;&lt;p&gt;As I understand it, a significant amount of disk space went to spacing between sectors, and I'm wondering why that half-kilobyte sector size stayed so consistent between disk formats and operating systems; a reasonable optimization would seem to be to use fewer, larger sectors, thereby reducing the overhead. But then, there was some onboard intelligence in most floppy disk controllers. (The Apple II controller was famous for not having such.)&lt;/p&gt;&#xA;&lt;p&gt;So for a specific question:&lt;/p&gt;&#xA;&lt;p&gt;On the original IBM PC floppy disk controller, was the sector size under software control? Could an operating system choose to use e.g. 5 kilobytes per sector, in the hope of squeezing 5K instead of 4.5K into one track?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-11T15:53:54.010" Title="Was sector size under software control on the original IBM PC floppy drive controller?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;floppy-drive&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15335" PostTypeId="2" ParentId="15334" CreationDate="2020-06-26T05:10:54.987" Score="11" Body="&lt;p&gt;Yes, the sector size is software-controlled, to a certain extent. Every FDC command involving sectors or tracks &lt;a href=&quot;https://www.isdaman.com/alsos/hardware/fdc/floppy.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;takes the sector size as a parameter&lt;/a&gt;. The size is specified as a bit shift applied to 128, so sector sizes are of the form 128 × 2&lt;sup&gt;&lt;em&gt;n&lt;/em&gt;&lt;/sup&gt; (usable values go from 128 to 4096 on the original PC; there isn’t enough time to fit an 8KiB sector in a track using the IBM PC’s single-density 5.25” drives). Sector sizes are assumed to be the same throughout a track.&lt;/p&gt;&#xA;&lt;p&gt;As &lt;a href=&quot;https://dosmandrivel.blogspot.com/2011/04/all-those-floppy-disk-formats.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tim Paterson&lt;/a&gt; explains, the IBM PC can write at most 6250 bytes per track in total (including gaps, which don’t store data). The headers and gaps result in an overhead of 114 bytes per sector, so a track can store 9 512-byte sectors, but not quite 10 — at least not safely, on all drives. (Since the tracks are circular, having gaps between the logical sectors isn’t sufficient, so counting 10 sectors and 9 gaps doesn’t work — a gap is also needed between the last and first sectors.) However it would technically be possible to store 5 1024-byte sectors, for a total capacity of 200KiB per side, 400KiB per disk. So while this addresses your question, it doesn’t explain why 512-byte sectors were chosen. 1024-byte sectors &lt;em&gt;were&lt;/em&gt; used on other computers, and on IBM’s own 8” disks.&lt;/p&gt;&#xA;&lt;p&gt;Later disk formats such as &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Extended_Density_Format&quot; rel=&quot;nofollow noreferrer&quot;&gt;XDF&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/2M&quot; rel=&quot;nofollow noreferrer&quot;&gt;2M&lt;/a&gt; used varying sector sizes to increase storage capacity, but they are more CPU-intensive and not appropriate for a 4.77MHz 8088. &lt;a href=&quot;https://nerdlypleasures.blogspot.com/2015/11/ibm-pc-floppy-disks-deeper-look-at-disk.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Some copy-protection techniques also relied on non-standard sector sizes&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;See also &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/4489/79&quot;&gt;What is between the sectors of floppy disks?&lt;/a&gt; for details of floppy disk layouts (in particular, their capacity needs to be considered in terms of reversals per unit of time, not bytes or anything like that).&lt;/p&gt;&#xA;&lt;p&gt;Using larger sectors increases the memory requirements when reading from or writing to disks; DOS used two buffers by default on the PC, which would have meant going from 1KiB for buffers, to 2KiB. Larger sectors also reduces the data manipulation granularity, and 1KiB was a significant amount of data back then — two 512-byte buffers would have been more useful than one 1024-byte buffer.&lt;/p&gt;&#xA;&lt;p&gt;As pointed out by &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/340/supercat&quot;&gt;supercat&lt;/a&gt;, duplicating equipment could have written disks with tighter tolerances and would have allowed higher capacities, for read-only distribution media. This &lt;em&gt;was&lt;/em&gt; taken advantage of later on, with &lt;a href=&quot;https://en.wikipedia.org/wiki/Distribution_Media_Format&quot; rel=&quot;nofollow noreferrer&quot;&gt;Distribution Media Format&lt;/a&gt; disks and the aforementioned XDF on 3.5” disks, but was apparently not considered for 5.25” disks.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-12-11T15:53:54.010" LastActivityDate="2020-12-11T15:53:54.010" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="15336" PostTypeId="1" AcceptedAnswerId="15338" CreationDate="2020-06-26T08:53:11.070" Score="4" ViewCount="143" Body="&lt;p&gt;Apart from the input voltage there are video signals (PAL, NTSC). Will I be able to use A500 that came from USA by just swapping a power supply, or any of the chips need to be replaced as well?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-06-26T10:07:29.773" Title="Will US Amiga 500 work in UK with UK power supply?" Tags="&lt;ntsc&gt;&lt;amiga-500&gt;&lt;pal&gt;&lt;composite-video&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15337" PostTypeId="2" ParentId="15321" CreationDate="2020-06-26T09:04:20.507" Score="8" Body="&lt;p&gt;The photo shows the control room for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Eight-Foot_High_Speed_Tunnel&quot; rel=&quot;noreferrer&quot;&gt;Eight-Foot Transonic Pressure Tunnel&lt;/a&gt; at NASA Langley.  The panels shown don't belong any specific system but rather are standard 19-inch racks that can be fitted with whatever is needed at a particular time.&lt;/p&gt;&#xA;&lt;p&gt;Looking at the document on the desk at the right of the image&lt;sup&gt;1&lt;/sup&gt; we can make out the name of the facility.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gTkep.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gTkep.png&quot; alt=&quot;Enhanced close-up of document&quot; /&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;sup&gt;Enhanced close-up of document.&lt;br&gt;&#xA;Source: NASA via &lt;a href=&quot;https://c1.staticflickr.com/5/4360/36104032014_d0abb4b084_o.jpg&quot; rel=&quot;noreferrer&quot;&gt;Flickr&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here's a photo of the control room taken on a different date (1995) with part of the area covered by the photo in the question at the far left.  Although the equipment fitted is different, the racks, desk surface, and ceiling are clearly the same:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/V9WsB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V9WsB.jpg&quot; alt=&quot;View of control room as it was in 1995&quot; /&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;sup&gt;Source: &lt;a href=&quot;https://loc.gov/pictures/search/?q=Photograph:%20va1899&amp;amp;fi=number&amp;amp;op=PHRASE&amp;amp;va=exact&amp;amp;co%20=hh&amp;amp;st=gallery&amp;amp;sg%20=%20true&quot; rel=&quot;noreferrer&quot;&gt;United States Library of Congress&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; A high-resolution version of the image in the question &lt;a href=&quot;https://c1.staticflickr.com/5/4360/36104032014_d0abb4b084_o.jpg&quot; rel=&quot;noreferrer&quot;&gt;can be found here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2020-06-26T09:21:07.070" LastActivityDate="2020-06-26T09:21:07.070" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15338" PostTypeId="2" ParentId="15336" CreationDate="2020-06-26T09:49:31.490" Score="4" Body="&lt;p&gt;An unmodified Amiga 500 provides two outputs:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;analogue and digital RGB through its DB23M connector&lt;/li&gt;&#xA;&lt;li&gt;monochrome composite through its RCA connector&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Colour encoding is identical in both PAL and NTSC variants on the RGB output, and not present on the RCA connector, so the vast majority of screens with the corresponding inputs will work fine with either (they adapt to the different frequency).&lt;/p&gt;&#xA;&lt;p&gt;If you use the RF modulator then you’d need a NTSC-compatible TV.&lt;/p&gt;&#xA;&lt;p&gt;Apart from that, with the appropriate power supply you should be able to use a US Amiga 500 in the UK with no hardware-related problems.&lt;/p&gt;&#xA;&lt;p&gt;If your Amiga 500 has a rev. 6 motherboard, you can add a PAL/NTSC toggle switch &lt;a href=&quot;https://shot97retro.blogspot.com/2018/09/amiga-500-ntscpal-toggle-switch-written.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;without too much hassle&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-06-26T10:07:29.773" LastActivityDate="2020-06-26T10:07:29.773" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15339" PostTypeId="1" AcceptedAnswerId="15340" CreationDate="2020-06-26T10:11:39.733" Score="23" ViewCount="1825" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80186&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Intel_80186&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The 80186 would have been a natural successor to the 8086 in personal computers. However, because its integrated hardware was incompatible with the hardware used in the original IBM PC, the 80286 was used as the successor instead in the IBM PC/AT.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That explains why most of the PC compatibles didn't use it either.&lt;/p&gt;&#xA;&lt;p&gt;What exactly did the 186 do that was incompatible with the IBM PC?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-09-07T11:18:04.357" Title="How was the 80186 incompatible with the IBM PC?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;ibm-pc&gt;&lt;cpu&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15340" PostTypeId="2" ParentId="15339" CreationDate="2020-06-26T11:53:50.957" Score="33" Body="&lt;p&gt;The main issue with the 80186 isn’t with the CPU core itself, but with its integrated peripherals: they aren’t compatible with those used in the IBM PC, and they aren’t integrated in the same way either.&lt;/p&gt;&#xA;&lt;p&gt;The IBM PC uses an 8237 DMA controller at offset 0x00 in the I/O address space, an 8259 &lt;a href=&quot;https://en.wikipedia.org/wiki/Programmable_interrupt_controller&quot; rel=&quot;noreferrer&quot;&gt;PIC&lt;/a&gt; at offset 0x20, and an 8253 &lt;a href=&quot;https://en.wikipedia.org/wiki/Programmable_interval_timer&quot; rel=&quot;noreferrer&quot;&gt;PIT&lt;/a&gt; at offset 0x40. The 80186’s integrated peripherals are mapped using a “peripheral control block”, which can be moved around in the I/O address space (it defaults to 0xFF00), but their offsets are fixed and don’t match the PC’s: while the PIC is at offset 0x20, the PIT is at offset 0x50, and the DMA descriptors are at offset 0xC0. The DMA control registers aren’t the same as the 8237’s, so code expecting an 8237 won’t work with the 80186. The 80186’s PIC and PIT are more sophisticated than the 8253 and 8259, and controlled rather differently too.&lt;/p&gt;&#xA;&lt;p&gt;The 80186 also has more reserved hardware interrupts than the 8086.&lt;/p&gt;&#xA;&lt;p&gt;A number of more-or-less compatible computers were made using the 80186, including one which has already been discussed here (&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/5099/79&quot;&gt;Why is the RM Nimbus PC-186 not IBM PC compatible?&lt;/a&gt;), and famously, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Tandy_2000&quot; rel=&quot;noreferrer&quot;&gt;Tandy 2000&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Siemens_PC-D&quot; rel=&quot;noreferrer&quot;&gt;Siemens PC-D&lt;/a&gt;, and a few of HP’s line of palmtop PCs (100LX, 200LX, 1000CX). These were at most DOS- and Windows-compatible, thanks to DOS’ and Windows’ ability to run on non-PC-compatible systems (with appropriate hardware interface layers). Many such computers took advantage of their non-PC-compatibility to provide improvements compared to the PC, &lt;em&gt;e.g.&lt;/em&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7818/79&quot;&gt;more memory for DOS programs&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="3251" LastEditDate="2020-06-28T15:01:50.537" LastActivityDate="2020-06-28T15:01:50.537" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="15341" PostTypeId="1" AcceptedAnswerId="15354" CreationDate="2020-06-26T14:21:56.937" Score="20" ViewCount="2678" Body="&lt;p&gt;The IBM PC and early successors came with an internal speaker that could play simple sounds. According to &lt;a href=&quot;https://en.wikipedia.org/wiki/PC_speaker&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/PC_speaker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, because the method used to reproduce PCM was very sensitive to timing issues, these effects either caused noticeable sluggishness on slower PCs, or sometimes failed completely on faster PCs (that is, significantly faster than the program was originally developed for). Also, it was difficult for programs to do much else, even update the display, during the playing of such sounds.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That is the state of affairs I would expect if, like some early 8-bit computers, there was no sound chip and you had to bit-bang the speaker with the CPU at whatever frequency of sound you wanted.&lt;/p&gt;&#xA;&lt;p&gt;However, according to &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8253&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Intel_8253&lt;/a&gt; the 8253 timer chip was connected to the speaker and capable of generating a square wave, which suggests the CPU should only need to intervene when the volume or pitch needs to be changed, which would normally happen no more than a few times per second.&lt;/p&gt;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-06-30T14:02:13.097" Title="Did playing sounds on the PC speaker keep the CPU busy?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;sound&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15342" PostTypeId="2" ParentId="15341" CreationDate="2020-06-26T14:27:03.717" Score="19" Body="&lt;p&gt;That paragraph should be understood in the context of the preceding paragraph:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The PC speaker was often used in very innovative ways to create the impression of polyphonic music or sound effects within computer games of its era&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Effects such as those used in &lt;em&gt;Pinball Fantasies&lt;/em&gt; in particular involve very rapid changes to the sound output by the PC speaker, far more than “a few times per second”, and that ends up being CPU-intensive. My jaw dropped the first time I saw &lt;a href=&quot;https://www.youtube.com/watch?v=yb8mLBa3dcg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Pinball Fantasies&lt;/em&gt; on PC&lt;/a&gt;; it really was impressive at the time, compare to typical bips and bleeps one would normally expect from the PC speaker, even in games.&lt;/p&gt;&#xA;&lt;p&gt;See also &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/13763/79&quot;&gt;Sound driver for DOS or Windows 3.x that used the PC speaker?&lt;/a&gt; which mentions issues caused by the need to disable interrupts (to control timing precisely).&lt;/p&gt;&#xA;&lt;p&gt;Jim Leonard’s latest Oldskool PC video &lt;a href=&quot;https://www.youtube.com/watch?v=qw2bNJ_NL50&amp;amp;t=1882s&quot; rel=&quot;nofollow noreferrer&quot;&gt;addresses the PC’s polyphonic capabilities&lt;/a&gt; (and other platforms’), and some of the trade-offs between using the square wave generator and controlling the speaker more finely.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-06-30T14:02:13.097" LastActivityDate="2020-06-30T14:02:13.097" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15343" PostTypeId="1" AcceptedAnswerId="15344" CreationDate="2020-06-26T14:30:58.760" Score="8" ViewCount="302" Body="&lt;p&gt;Do I remember correctly about an unofficial but popular test of &amp;quot;PC compatibility&amp;quot; in the early 1980s? Basically if a machine could run vanilla versions of both Lotus 1-2-3 and Microsoft Flight Simulator, reviewers at the time would declare it as &amp;quot;PC Compatible&amp;quot;.  (Note that back then, customized versions of popular software were often available on well-regarded machines.) One particular memory is that the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rainbow_100&quot; rel=&quot;noreferrer&quot;&gt;DEC Rainbow 100&lt;/a&gt; computer, while superior to clones in almost every aspect, failed this particular benchmark and was deemed by the computer press as inadequate.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="15334" LastEditDate="2020-09-22T18:28:27.197" LastActivityDate="2020-09-22T18:28:27.197" Title="Lotus 1-2-3 and Microsoft Flight Simulator as unofficial compatibility benchmark?" Tags="&lt;ibm-pc&gt;&lt;compatibility&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15344" PostTypeId="2" ParentId="15343" CreationDate="2020-06-26T14:34:47.170" Score="11" Body="&lt;p&gt;Yes, I think you did. E.g. from &lt;a href=&quot;https://www.filfre.net/tag/compaq/&quot; rel=&quot;noreferrer&quot;&gt;The Digital Antiquarian&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Having quickly concluded that simply copying IBM’s ROMs wasn’t a wise option, Compaq hired a staff of fifteen programmers who would dedicate the months to come to creating a slavish imitation. ... Instead of relying on IBM’s published BIOS specifications ... the team took the thirty biggest applications on the market and worked through them one at a time, analyzing each BIOS call each program made and figuring out through trial and error what response it needed to receive. The two trickiest programs, which would go on to become a sort of stress test for clone compatibility both inside and outside of Compaq, proved to be &lt;em&gt;Lotus 1-2-3&lt;/em&gt; and &lt;em&gt;Microsoft Flight Simulator&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-06-26T14:34:47.170" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15345" PostTypeId="1" AcceptedAnswerId="15346" CreationDate="2020-06-26T14:37:51.287" Score="8" ViewCount="787" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?62049-The-myth-of-the-vertical-retrace-interrupt-on-EGA-VGA&quot; rel=&quot;noreferrer&quot;&gt;http://www.vcfed.org/forum/showthread.php?62049-The-myth-of-the-vertical-retrace-interrupt-on-EGA-VGA&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;IBM first implemented a vertical retrace interrupt on the PCjr in 1984.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That implies CGA, released prior to 1984, does not have a vertical retrace interrupt.&lt;/p&gt;&#xA;&lt;p&gt;Does CGA have any way to synchronize with vertical blank, or does animation thereon just have to put up with tearing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-06-26T18:36:47.120" Title="Could CGA synchronize with vertical blank?" Tags="&lt;ibm-pc&gt;&lt;video&gt;&lt;cga&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15346" PostTypeId="2" ParentId="15345" CreationDate="2020-06-26T14:41:50.030" Score="16" Body="&lt;p&gt;It is possible to synchronise with vertical blank, but it involves polling (as does avoiding snow on CGA). Two bits are important in the status register, &lt;a href=&quot;https://www.seasip.info/VintagePC/cga.html&quot; rel=&quot;noreferrer&quot;&gt;read from 0x03DA&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;bit 0 is 1 when the CPU can touch the CGA buffer without causing snow;&lt;/li&gt;&#xA;&lt;li&gt;bit 3 is 1 during vertical retrace.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So a change in bit 3 from 0 to 1 would signal the start of a vertical blank.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-06-26T14:41:50.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15347" PostTypeId="2" ParentId="15329" CreationDate="2020-06-26T17:52:45.200" Score="1" Body="&lt;p&gt;If video was 1st, then printing was a close behind 2nd.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Applications needed their own printer drivers to format the application's data for printout, in a language that the printer could understand. There were several families of printers, each family's language somewhat compatible within that family (often with caveats and incompatibilities). Yet many oddball printers existed in the 70s, 80s and into the 90s that were compatible with nothing else and needed specialized support.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Applications could achieve better performance by skipping the BIOS and/or DOS and accessing the printer interface hardware directly.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;A program could generate print data and send it directly to the printer interface I/O port. It was faster by bypassing the DOS printer device, especially if the software's data generation speed was comparable to print speed. Software could then completely avoid buffering - simplifying the code, and lowering overhead.&lt;/p&gt;&#xA;&lt;p&gt;I implemented such techniques a few times long ago. The following description is based on what I can still remember from those &amp;quot;good old days&amp;quot;. Well - no, there was nothing too good about it. There's a finite amount of fun one can have in writing banding rasterizers and debugging ESCp language incompatibilites. I'm sure I killed some of my hearing by sitting in a room with a couple dozen dot-matrix and daisy wheel printers, driven from a hardware buffer box, with print data read from floppies. It was a terrible racket. Supporting printer output was hard work before Windows restored some sanity by offering an abstraction over printer drivers.&lt;/p&gt;&#xA;&lt;h2&gt;Print Data Generation&lt;/h2&gt;&#xA;&lt;p&gt;An application generates the data for printing by &amp;quot;walking&amp;quot; over some data structures that represent the document to be printed. Such &amp;quot;document&amp;quot; may be mostly text - as in a word processor - or it may be some graphical primitives, such as in a CAD program. Sometimes the document is pre-processed into an auxiliary data structure, called a display list, that is used to effectively draw it on an output device (screen, printer, etc.). Whether a display list is used or not, the overall process still involves &amp;quot;walking&amp;quot; or iterating over some data, and converting it into a format understandable by the printer. The details of this process vary a lot based on the capabilities of the printer. For example, if the data is text, it may be sent to the printer almost as-is, with only minor additional formatting data added. If there are graphical primitives, they have to be converted into bitmap (pixel) data for printing - unless they were rendered on a Postscript printer, an expensive rarity. Whatever the process, its output was a stream of bytes to be sent to the printer.&lt;/p&gt;&#xA;&lt;h2&gt;Data Output to the Printer&lt;/h2&gt;&#xA;&lt;p&gt;Getting this data to the printer depended on the speed of data production by the application, relative to its consumption by the printer. If the application is much faster than the printer, it'll likely need to buffer the data somewhere - perhaps in a disk file. Otherwise, the application may be stuck waiting for printer, unable to interact with the user.&lt;/p&gt;&#xA;&lt;p&gt;Applications with graphical output usually needed to use the entire limited RAM to produce printer output. There was no space left to keep the state needed for user interaction. Thus, it was beneficial to be &amp;quot;done&amp;quot; with printing as quickly as possible, to return the control to the user.&lt;/p&gt;&#xA;&lt;p&gt;Applications that outran the printer would save the entire to-be-printed output to disk. This was later read in the background and sent to the printer - either by the application's own hardware driver, or the DOS printer device (LPT), or by the DOS 2.0 (and later) print spooler.&lt;/p&gt;&#xA;&lt;h2&gt;The Benefits of Fast Printers&lt;/h2&gt;&#xA;&lt;p&gt;When laser printers came about, they offered a known minimal amount of internal buffer RAM. The program that did the printing could estimate whether its print output would fit in the printer's buffer. You could let the program know the amount of RAM actually installed in the printer. When the program could foresee that the raw bytes to be sent to the printer would fit in the printer's buffer, it wouldn't need to use any intermediate buffering. Any time it had a byte of data ready for the printer, it could load it directly into the printer port's hardware, with minimum or no waiting involved. In all cases this took less CPU time overall than sending print data in the background using interrupts. Not only did this save on any RAM needed for buffers, but it also saved on CPU time needed to copy data around, i.e. to a buffer, and then out of a buffer.&lt;/p&gt;&#xA;&lt;p&gt;Thus, some DOS applications had a printer &amp;quot;driver&amp;quot; that would both format the data for the printer's language &lt;em&gt;and&lt;/em&gt; send it out immediately via parallel port hardware. It was usual to employ modifiable code, so there were no separate variables storing the printer port in use. The I/O addresses needed for a given printer port were read from the application's configuration file, calculated in the print setup code, and were written directly into the driver's code. This minimized both the memory and CPU instruction overheads.&lt;/p&gt;&#xA;&lt;h3&gt;Sidebar: &amp;quot;Adding&amp;quot; the Printer&lt;/h3&gt;&#xA;&lt;p&gt;These days, we &amp;quot;add&amp;quot; a printer to the operating system, and that's that. But there was no such centralized printing infrastructure on plain DOS.&lt;/p&gt;&#xA;&lt;p&gt;There were graphical output packages that applications could leverage to access some number of display and printer/plotter hardware. Those packages provided library and/or resident code that the application could use directly, instead of implementing its own system. But that came later, and effectively ended then Windows became the defacto &amp;quot;graphical output package&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;But how was all this configured? Early PCs had little memory: configuration files would be a luxury at runtime. Their use called for more code that had to fit in the limited RAM. Instead, there would be a separate &amp;quot;installer&amp;quot; or &amp;quot;configurator&amp;quot; application that would directly patch the main application's code to adapt it to the user's hardware. E.g. printer port selection would be translated to I/O port numbers written directly into the executable. Selecting a print driver could be implemented by copying the print driver routine into the executable.&lt;/p&gt;&#xA;&lt;p&gt;The limited RAM presented another problem: all the code that an application may need would not fit into RAM at once. Two solutions were common.&lt;/p&gt;&#xA;&lt;h2&gt;Overlays&lt;/h2&gt;&#xA;&lt;p&gt;The application would, at runtime, read chunks of its code from disk into RAM. The chunks contained related code and data, e.g. printing code. This made the user experience more seamless: the user interacted with just one application, even though technically the application would replace large parts of itself as needed, acting as if it was multiple sub-applications, with any one resident in RAM at any one time.&lt;/p&gt;&#xA;&lt;p&gt;Judicious choice of chunk sizes and contents could provide a reasonable user experience, with minimum wait times. On floppy-based systems, the response latency was dominated by the time needed to spin up the drive and access the sector(s) containing the requested data, but even a 1-2s latency was 1-2 orders of magnitude better than having to switch applications manually..&lt;/p&gt;&#xA;&lt;h2&gt;Multiple Single-Task Applications&lt;/h2&gt;&#xA;&lt;p&gt;This was more common in technical applications, their users more tolerant of abysmal and arcane user experience. This approach dominated in the computer aided design (CAD) systems. The primary application was the graphical editor. A multitude of auxiliary applications were used to do everything else. E.g. to run a design rule check on the documented, you exited the graphical editor, ran the DRC application, read its summary output on screen, and if any errors were indicated you had to print out the full DRC report. The graphical editor had to be restarted, the fixes implemented, and the process would repeat. To print the document or convert it into other &amp;quot;output&amp;quot; formats, a separate application was involved.&lt;/p&gt;&#xA;&lt;p&gt;The choice of functionality boundaries between the auxiliary applications often had to do with implementation details. Suppose we're still talking about CAD systems, their native data using a &amp;quot;vector&amp;quot; representation, i.e. simple primitives like line segments, arc segments, polygons (potentially filled), etc.&lt;/p&gt;&#xA;&lt;p&gt;A &amp;quot;plot&amp;quot; program would handle output in vector formats. The &amp;quot;vector&amp;quot; data was simplified to what the &amp;quot;plotter&amp;quot; could understand, and then formatted for the chosen output device - such as a desktop plotter, a LaserJet printer using HPGL language, a PostScript printer, a numerically controlled mill/engraver, or a photoplotter.&lt;/p&gt;&#xA;&lt;p&gt;A &amp;quot;print&amp;quot; program would handle output in bitmap formats. The &amp;quot;vector&amp;quot; data would be rasterized by generic code, provided with output-specific parameters such as resolution, colorspace/gamma curve and raster pattern. High resolution printing on 9-pin dot matrix printers used a non-rectangular raster pattern, and the rasterizer had to be aware of that - otherwise an expensive post-processing step was needed. The raster data was then formatted in the language specific to the given printer, and then typically it could either be printed out directly, or saved to a file for later printing. It wasn't uncommon to plot or print to a file on a floppy, then carry it elsewhere to be output.&lt;/p&gt;&#xA;" OwnerUserId="10800" LastActivityDate="2020-06-26T17:52:45.200" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15348" PostTypeId="2" ParentId="15345" CreationDate="2020-06-26T18:36:47.120" Score="11" Body="&lt;p&gt;The synchronization is possible via polling, but it could also be done by interrupt even when no hardware interrupts were provided. It worked on any card that had a &amp;quot;real-time&amp;quot; status register with relevant information. I did that many times along the years, even as late as mid-90s. The trick? Take over the timer interrupt, and use it for two things:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Polling the graphics card status. This could be the CRT controller (CRTC) scan registers, so that the current screen refresh position was known, or a status bit that indicated vertical retrace. The status has to be polled long enough to capture event we're interested in. The number of loop repetitions before the event is captured provides the phase information.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Running a phase-locked loop using the timer interrupt period, using the phase feedback obtained above.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There was some finesse to it so that, in practice, the time wasted for phase-detection polling was minimized. What really happened was that the phase jitter was estimated, and the timer interrupt was triggered only as early as warranted by the jitter. On systems with low jitter, sometimes just a couple of loop iterations sufficed to capture the event (e.g. a status bit changing state, or a CRTC register reaching the desired value). There were also provisions for dealing with sporadic high latency, usually introduced by poorly designed device drivers for other hardware. Interrupt handler interrogated the CTC (counter timer) registers to determine how late it was actually invoked (due to interrupts being blocked), and acted accordingly.&lt;/p&gt;&#xA;&lt;p&gt;I'm not sure how widespread such practice was, but the approach was so generic that it could be adapted for completely &amp;quot;black box&amp;quot; graphics cards, where no VSYNC feedback was available. Then the trick was to use a simple adapter that fed the VSYNC signal from the graphics card output to a parallel port input pin.&lt;/p&gt;&#xA;&lt;p&gt;There were few uses for such synchronization, but when you needed it - you couldn't do without it. I remember using this on Tseng cards with multisync NEC monitors to support 80Hz refresh for 3D wireframe visualization with LCD shutter goggles.&lt;/p&gt;&#xA;" OwnerUserId="10800" LastActivityDate="2020-06-26T18:36:47.120" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15349" PostTypeId="1" CreationDate="2020-06-26T21:11:08.953" Score="1" ViewCount="56" Body="&lt;p&gt;I am new (1 week to PDP 11, writing my own emulator for fun) using CAPS11 as my starting point. I am confused by this from the very first bit of bootup code&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;000110: 012703 000130    mov   #130,r3   ; C.X.&#xA;000114: 005002           clr   r2        ; ..&#xA;000116: 012701 000200    mov   #200,r1   ; A...&#xA;000122: 112710 000005    movb  #5,(r0)   ; H...&#xA;000126: 004713           call  (r3)      ; K.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(output from pdpdasm, J post)&lt;/p&gt;&#xA;&lt;p&gt;At 126 there is 004713, which is &lt;code&gt;JSR PC,(R3)&lt;/code&gt;. I am sure it means JSR to 0130 (since R3 got loaded with 0130 a few lines above and 0130 seems to have the next code to execute) by why is it address mode 1 and not 0. Addr mode 1 means the address of the target of the instruction is where R3 points. So then it should fetch the contents of R3 and go get the address from there, ie the new PC value should be whatever is contained where R3 points. Which clearly not the intent of this code.&lt;/p&gt;&#xA;&lt;p&gt;I mean if &lt;code&gt;JSR PC,(R3)&lt;/code&gt; means jump to 0130 what would what would &lt;code&gt;JSR PC,R3&lt;/code&gt; mean?&lt;/p&gt;&#xA;&lt;p&gt;EDIT: I think I found the answer :-)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9248/pdp-11-jmp-and-jsr-how-was-the-target-specified&quot;&gt;PDP-11 JMP and JSR - how was the target specified?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;JSR PC,R3 is illegal - OK. Is it just jump and jsr instructions where mode 0 is illegal?&lt;/p&gt;&#xA;" OwnerUserId="18533" LastEditorUserId="18533" LastEditDate="2020-06-26T21:23:21.997" LastActivityDate="2020-06-26T21:23:21.997" Title="Understanding PDP 11 ' JSR PC,(RR)' instruction" Tags="&lt;pdp-11&gt;" AnswerCount="0" CommentCount="0" ClosedDate="2020-06-26T21:54:46.873" ContentLicense="CC BY-SA 4.0" />
  <row Id="15350" PostTypeId="1" AcceptedAnswerId="15353" CreationDate="2020-06-26T21:35:55.847" Score="3" ViewCount="217" Body="&lt;p&gt;I have a CDTV keyboard that someone modded to work with CD32. There are no bridges or extra components on the board, however &lt;a href=&quot;http://l8r.net/technical/t-keyboard.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;pinout&lt;/a&gt; was changed at the board - wire connector and I'm not sure how to swap it back?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/t6mge.jpg&quot; alt=&quot;current pinouts&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2020-06-27T12:04:48.077" LastActivityDate="2020-06-28T14:21:23.460" Title="How to unmod CDTV keyboard" Tags="&lt;keyboards&gt;&lt;amiga-cdtv&gt;&lt;amiga-cd32&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15351" PostTypeId="1" AcceptedAnswerId="15359" CreationDate="2020-06-27T01:16:36.207" Score="4" ViewCount="277" Body="&lt;p&gt;CAPS-11 is the Casette Programming System for the PDP-11. The &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp11/caps-11/DEC-11-OTUGA-A-D_CAPS-11_Users_Guide_Oct73.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual&lt;/a&gt; is available at Bitsavers, &lt;a href=&quot;http://simh.trailing-edge.com/software.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;binaries&lt;/a&gt; can be found at SimH.&lt;/p&gt;&#xA;&lt;p&gt;The manual contains instructions how to assemble the system from source, the source code should be available somewhere.&lt;/p&gt;&#xA;&lt;p&gt;I have disassembled the code, but annotated source would be really useful. I have googled around and not found anything.&lt;/p&gt;&#xA;&lt;p&gt;(I am 100% pdp11 novice writing pdp11 emulator from scratch for kicks)&lt;/p&gt;&#xA;" OwnerUserId="18533" LastEditorUserId="10854" LastEditDate="2020-06-27T20:43:16.573" LastActivityDate="2020-07-08T08:23:25.170" Title="Does anybody have the PDP-11 CAPS-11 source code?" Tags="&lt;pdp-11&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="15352" PostTypeId="1" AcceptedAnswerId="15356" CreationDate="2020-06-27T11:22:42.227" Score="4" ViewCount="109" Body="&lt;p&gt;The CHIP-8 instructions &lt;code&gt;SAVE Vx&lt;/code&gt; (&lt;code&gt;Fx55&lt;/code&gt;) and &lt;code&gt;RESTORE Vx&lt;/code&gt; (&lt;code&gt;Fx65&lt;/code&gt;) are &lt;a href=&quot;https://archive.org/details/byte-magazine-1978-12-rescan/page/n111/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;originally specified&lt;/a&gt; to increment the pointer register &lt;code&gt;I&lt;/code&gt; as each register is saved/loaded, so by the end of the instruction, the value of &lt;code&gt;I&lt;/code&gt; is incremented by &lt;em&gt;x&lt;/em&gt; + 1. However, lots of subsequent emulators didn't implement this behavior correctly (leaving &lt;code&gt;I&lt;/code&gt; unchanged by these operations), and I have found at least one game (&lt;a href=&quot;http://www.pong-story.com/chip8/&quot; rel=&quot;nofollow noreferrer&quot;&gt;David Winter's HIDDEN&lt;/a&gt;) that outright breaks with a spec-conformant implementation: tiles get repeated across the board.&lt;/p&gt;&#xA;&lt;p&gt;It is tempting to sweep this question under the rug for my CHIP-8 implementation, and just not change the &lt;code&gt;I&lt;/code&gt; register in &lt;code&gt;SAVE&lt;/code&gt; / &lt;code&gt;RESTORE&lt;/code&gt;. But there are dozens of CHIP-8 games around. Does any of them depend on the correct behavior of &lt;code&gt;SAVE&lt;/code&gt; / &lt;code&gt;RESTORE&lt;/code&gt; and &lt;strong&gt;break if &lt;code&gt;I&lt;/code&gt; is not updated&lt;/strong&gt;?&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2020-06-27T20:24:40.743" Title="Are there any CHIP-8 games that break if `SAVE` / `RESTORE` *doesn't* change the pointer register?" Tags="&lt;emulation&gt;&lt;software&gt;&lt;instruction-set&gt;&lt;chip-8&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15353" PostTypeId="2" ParentId="15350" CreationDate="2020-06-27T12:26:00.330" Score="3" Body="&lt;p&gt;The CD32 pinout &lt;a href=&quot;https://deskthority.net/wiki/Commodore_Amiga#Amiga_4000_.28T.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;is the similar to the Amiga 4000&lt;/a&gt; (*1), so maybe have a look at &lt;a href=&quot;http://www.rockus.at/Amiga/cdtv2a4000.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; comparing it to the CDTV. From there it should be easy to work back.&lt;/p&gt;&#xA;&lt;p&gt;Pinout for all Amiga series machines with detached keyboards is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Pin | A1000 | A2/3000 | CDTV  | A4000 | CD32&#xA;----+-------+---------+-------+-------+-------&#xA; 1  | +5V   | CLOCK   | GND   | DATA  | DATA&#xA; 2  | CLOCK | DATA    | DATA  | n/c   | TxD&#xA; 3  | DATA  | n/c     | CLOCK | GND   | GND&#xA; 4  | GND   | GND     | +5V   | +5V   | +5V&#xA; 5  |       | +5V     | SENSE | CLOCK | CLOCK&#xA; 6  |       |         |       | n/c   | RxD&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(Names Unified. Commodore uses different names for each machine)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;CAVEAT: the following are deductions made from the picture (and above table) under the assumptions that the claims made in the question as well as the assignment markings on the picture are valid.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Seen on the picture the sequence on the PCB (left to right) and their connection to Mini-Din are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Red&lt;/li&gt;&#xA;&lt;li&gt;White&lt;/li&gt;&#xA;&lt;li&gt;Yellow&lt;/li&gt;&#xA;&lt;li&gt;Orange&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Assuming the assignments in the picture are checked, and the plug being wired for A4000/CD32, then using the pin assignment from the table reveals the pinout of the white connector as:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;DATA (Red)&lt;/li&gt;&#xA;&lt;li&gt;CLOCK (White)&lt;/li&gt;&#xA;&lt;li&gt;+5V (Yellow)&lt;/li&gt;&#xA;&lt;li&gt;GND (Orange)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Thus, to make it a CDTV cabling again the wires on the white connector need to be reordered (left to right) like this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Orange&lt;/li&gt;&#xA;&lt;li&gt;Yellow&lt;/li&gt;&#xA;&lt;li&gt;White&lt;/li&gt;&#xA;&lt;li&gt;Red&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Now isn't that funny? As if the Connector is simply turned upside down. Maybe a result due layout or a classic sequence inversion error. Have you checked if the connector can be turned?&lt;/p&gt;&#xA;&lt;p&gt;Which leaves me wondering about the SENSE signal, which should be as well connected. At least to ground, which would be the red wire. Otherwise it's possible that the cable hasn't been modified, but rather replaced ... not sure.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Again, all of this is just guesswork from my table and the picture shown, taking the questions claims as true.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The CD32 also carries a serial interface here.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-28T14:21:23.460" LastActivityDate="2020-06-28T14:21:23.460" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15354" PostTypeId="2" ParentId="15341" CreationDate="2020-06-27T14:15:00.880" Score="22" Body="&lt;p&gt;Short answer: If you are content with beeps, no. If you want arbitrary sound, yes.&lt;/p&gt;&#xA;&lt;p&gt;There's three ways to get sound out of the PC Speaker:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Put the timer chip into square wave mode and send frequencies (actually countdowns) to the timer chip. This is cheap and what's used for most PC Speaker sound effects in games. 140Hz is a popular rate to do it at.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Set up the timer chip to output a constant voltage, then turn the speaker-enable gate on and off very quickly. Sounds terrible and uses a heap of CPU, but can play back arbitrary sounds. If you've encountered a game with extremely noisy speech in a couple of places with little player input, it was probably using this method.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Put the timer chip into single-shot mode and send it countdowns very quickly. This implements a form of pulse-width modulation, which also allows arbitrary sound playback and can sound pretty good, but uses heaps of CPU. Not very popular among games, but pretty common in programs originating in the Demoscene, which at least have the excuse that you're not doing much interaction during playback.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Methods 2 and 3 require very precise timing of your playback routines. If you're playing something back at 16kHz, then that's how frequently your program needs to write to the timer chip or speaker-enable gate. You don't get DMA for this like you do with a sound card and pulling it off tends to be pretty CPU-intensive (this applies to LPT DACs like the Covox Speech Thing, too).&lt;/p&gt;&#xA;&lt;p&gt;In the case of the famous 8088MPH demo, the closing credits is text-only because between mixing the MOD file for the music and the PWM PC Speaker playback, writing a few text-mode characters is all they could do with what CPU was left. If you've got good hearing, you can hear the 16kHz carrier tone during the sequence. The rest of the demo's music is a pretty good demonstration of what you can do with method 1 at 60Hz.&lt;/p&gt;&#xA;&lt;p&gt;If you want to hear the difference between methods 2 and 3, Fast Tracker II supports both, along with LPT DACs and a couple of sound cards.&lt;/p&gt;&#xA;" OwnerUserId="17800" LastEditorUserId="17800" LastEditDate="2020-06-28T08:35:27.530" LastActivityDate="2020-06-28T08:35:27.530" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15356" PostTypeId="2" ParentId="15352" CreationDate="2020-06-27T20:18:21.573" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;But there are dozens of CHIP-8 games around.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By my count so far: 456.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Does any of them depend on the correct behavior of &lt;code&gt;SAVE&lt;/code&gt; / &lt;code&gt;RESTORE&lt;/code&gt; and break if &lt;code&gt;I&lt;/code&gt; is not updated?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, there are CHIP-8 games that will break if &lt;code&gt;Fx55&lt;/code&gt;/&lt;code&gt;Fx65&lt;/code&gt; do not increment the index variable &lt;code&gt;I&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Here's an excerpt from the source code listing to the game &amp;quot;5 Row Mastermind&amp;quot; by Robert Lindley, as printed in &lt;a href=&quot;https://archive.org/download/viper_1_07/Volume1Issue07.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;VIPER magazine, volume 1, issue 7&lt;/a&gt;, page 22, from February 1979 (memory addresses &lt;code&gt;0x288&lt;/code&gt;–&lt;code&gt;0x28E&lt;/code&gt;):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W1wWX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W1wWX.png&quot; alt=&quot;5 Row Mastermind, memory locations 0x288–0x28E&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As you can see, the program first loads five bytes from memory (the player's &amp;quot;answer&amp;quot; to the Mastermind puzzle), then immediately stores those bytes in the five memory addresses following the first ones (as a &amp;quot;working copy&amp;quot;).&lt;/p&gt;&#xA;&lt;p&gt;Obviously, if &lt;code&gt;I&lt;/code&gt; wasn't incremented between those two instructions, it would instead &amp;quot;overwrite&amp;quot; the player's answer with itself (a no-op), and the working copy would not be what the game would later expect.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, lots of subsequent emulators didn't implement this behavior correctly (leaving &lt;code&gt;I&lt;/code&gt; unchanged by these operations)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A short history lesson to explain how this schism occured: CHIP-8 faded into obscurity after 1983 (when the PC became the dominant platform, and computers rarely had hexadecimal keypads anymore and anyone could write BASIC easily). In 1990 it resurfaced on the HP48 graphing calculators, as CHIP48 and later the extended SUPER-CHIP. These new implementations introduced the &lt;code&gt;Fx55&lt;/code&gt;/&lt;code&gt;Fx65&lt;/code&gt; incompatibility (among others); CHIP48 incremented &lt;code&gt;I&lt;/code&gt;, but erroneously (it incremented it one time less than the COSMAC VIP, as it wasn't incremented on the final iteration), while SUPER-CHIP didn't increment it at all. &lt;a href=&quot;https://github.com/Chromatophore/HP48-Superchip/blob/master/investigations/quirk_i.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;You can read a detailed disassembly and analysis of that code here.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since the old COSMAC VIP CHIP-8 interpreter and its games were, at that point in the Internet's nascent history, lost to time temporarily (found only in physical newsletters and on tape cassettes that hadn't been digitized in a modern manner), the SUPER-CHIP behavior became dominant. David Winter ported it to DOS, and it spread from there.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It is tempting to sweep this question under the rug for my CHIP-8 implementation, and just not change the &lt;code&gt;I&lt;/code&gt; register in &lt;code&gt;SAVE&lt;/code&gt; / &lt;code&gt;RESTORE&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That sounds like a reasonable default behavior. The answer to a slightly rephrased version of your question, &amp;quot;Do any of the games that are readily available online break if &lt;code&gt;I&lt;/code&gt; doesn't increment?&amp;quot;, the answer is &amp;quot;probably not&amp;quot;. Most games available today use the &amp;quot;modern&amp;quot; behavior, and most games that are &lt;em&gt;made&lt;/em&gt; today (for &lt;a href=&quot;https://itch.io/jam/octojam-6&quot; rel=&quot;nofollow noreferrer&quot;&gt;Octojam&lt;/a&gt; each October, for example) are made to not depend on either behavior (by not relying on the value of &lt;code&gt;I&lt;/code&gt; after such an operation) so they can run in as many interpreters as possible.&lt;/p&gt;&#xA;&lt;p&gt;However, the best course of action is probably to allow this &amp;quot;quirk&amp;quot; (as the inconsistencies between CHIP-8 specifications are often called) to be configured by the user. Use the modern behavior as default, but put a toggle somewhere, so old games are playable as well. Many modern &amp;quot;emulators&amp;quot; (interpreters) do this, such as &lt;a href=&quot;https://github.com/JohnEarnest/Octo&quot; rel=&quot;nofollow noreferrer&quot;&gt;Octo&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15661" LastEditorUserId="15661" LastEditDate="2020-06-27T20:24:40.743" LastActivityDate="2020-06-27T20:24:40.743" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15357" PostTypeId="1" AcceptedAnswerId="15375" CreationDate="2020-06-27T22:28:25.980" Score="6" ViewCount="273" Body="&lt;p&gt;On modern Intel FPUs, you can set a flag to cause all denormals to be automatically flushed to zero. On some workloads, this improves performance.&lt;/p&gt;&#xA;&lt;p&gt;I cannot find any mention of that flag in the data sheet for the original 8087. Looks like it was introduced in a later model.&lt;/p&gt;&#xA;&lt;p&gt;Which model of Intel FPU, first introduced this flag?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-06-29T07:21:20.037" Title="Which x87 first acquired the ability to flush denormal to zero?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;x86&gt;&lt;floating-point&gt;&lt;8087&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15358" PostTypeId="2" ParentId="15004" CreationDate="2020-06-27T23:30:33.697" Score="6" Body="&lt;p&gt;It only has to do with the effort put into the code generator back-end. C is an abstract language, it doesn't need to directly reflect what the machine is doing. But this is the sort of stuff that would be state-of-the-art in 2020, and would require significant investment. There's nothing inherently special about Z80 of 6502 in this respect - only that the impedance mismatch between some platforms and the code generator back-ends is very high. For Z80 and 6502 it wouldn't matter what the language is, because the specifics of the language are far away and dissolved by the time the intermediate representation gets to the optimizer and code generator. Any high-level compiled language would be just as bad on Z80 and 6502 as C is, pretty much.&lt;/p&gt;&#xA;&lt;p&gt;We're spoiled with excellent modern compiler back-ends. The trouble is that they are commonplace that everyone thinks it's &amp;quot;easy&amp;quot; work. Not at all. They represent man-decades of effort if someone were just to reproduce them.&lt;/p&gt;&#xA;&lt;p&gt;So, you can get excellent Z80 and 6502 code out of a C compiler if you hire a couple LLVM back-end experts out from Apple and Google, pay them the going rate, and let them at it for a couple of years. A couple million dollars is all it'd take, and you'd grace the world with absolutely amazing Z80 and 6502 code produced from both C and C++.&lt;/p&gt;&#xA;&lt;p&gt;So: I'm sure the results would be excellent-  but it requires lots of effort. It's the sort of effort that historically has not been expended by even major silicon vendors, with exception of Intel, Digital and IBM. Zilog's own compilers (all of them, doesn't matter what year was the release) are junk when you compare what they manage to cough up to x86 or ARM output from C code passed through Clang and LLVM, and all the man effort put up by, say, Zilog and Motorola compiler teams throughout the 70s, 80s and 90s, all together in total, was completely eclipsed by the man-hours that went into, say, Clang+LLVM in the first decade of the existence of both projects. Zilog's and Motorola's marketshare back when they still had plenty of it absolutely didn't improve matters here: they were a bit too early and the everyday techniques used by e.g. LLVM weren't available and/or they required so much memory and CPU cycles to run that it wasn't feasible to offer such products to wider audience, because you pretty much needed a heavy minicomputer or a top-notch workstation to do this sort of work.&lt;/p&gt;&#xA;" OwnerUserId="10800" LastActivityDate="2020-06-27T23:30:33.697" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="15359" PostTypeId="2" ParentId="15351" CreationDate="2020-06-28T01:01:27.783" Score="3" Body="&lt;p&gt;A guy named Lou Ernst on the Usenet group &lt;code&gt;alt.sys.pdp11&lt;/code&gt; mentioned that he had it with sources &lt;a href=&quot;https://groups.google.com/d/msg/alt.sys.pdp11/WAZa8hJOwk0/LFPMwSLyiQEJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;back in 2011&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Last night we finally got CAPS-11 running on our 11/04 with TA11/ TU60. Jack R. was given a set of original DEC CAPS-11 cassettes during&#xA;one of his recent expeditions. These included bootable cassettes,&#xA;object files, and all the sources. He mailed them to me, and I was&#xA;able to recover the contents of these original 37 year old tapes on my&#xA;TU60.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;strike&gt;&#xA;A person going by the name of &quot;paramucho&quot; comments that&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I didn't know it was missing! I've had this V3.0 magtape distribution&#xA;sitting a directory for a while now:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://pdp-11.org.ru/files/rsx-11/ias30sys.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://pdp-11.org.ru/files/rsx-11/ias30sys.zip&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Described below as a TU10 distribution:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://mailman.trailing-edge.com/pipermail/simh/2006-December/003803.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://mailman.trailing-edge.com/pipermail/simh/2006-December/003803.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I tried to install on a simulated RL02 it tonight under SIMH. It boots&#xA;up nicely and asks all the right questions, but after doing the badblk&#xA;check all I get are disk errors and then tape errors (I can't get E11&#xA;to run on 64-bit Windows and my emulator doesn't do tapes).&#xA;&lt;/strike&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;strike&gt;&#xA;The zip file linked contains a TU tape image. I poked around in it and there's plenty of readable ASCII but I couldn't identify whether or not it contains what you want. You'll probably have to mount it in an emulator or find tools for listing/extracting the files.&#xA;&lt;/strike&gt;&#xA;&lt;p&gt;Update: It turned out that the guy in that thread who thought he had the same files had something else after all, so his links were of no use.&lt;/p&gt;&#xA;&lt;p&gt;If not then some of the names and email addresses in that thread should lead you to somebody who can get you a copy.&lt;/p&gt;&#xA;&lt;p&gt;Spoiler: OP did receive a copy from Lou!&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-07-08T08:23:25.170" LastActivityDate="2020-07-08T08:23:25.170" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15360" PostTypeId="1" AcceptedAnswerId="15363" CreationDate="2020-06-28T08:12:20.737" Score="9" ViewCount="890" Body="&lt;p&gt;Some FPUs exhibit as much as an order of magnitude slowdown when given denormal inputs, due to having to trap to microcode to handle them.&lt;/p&gt;&#xA;&lt;p&gt;Did early FPUs of the microprocessor era, exhibit substantial slowdown? I'm particularly interested in the 8087, 387 and 486; what sort of slowdown did they exhibit? The 8087 datasheet doesn't seem to say; it just gives a range of clock cycles for each instruction, without further comment.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-06-28T20:53:56.053" Title="What was the performance penalty for denormal inputs on 80s-era FPUs?" Tags="&lt;floating-point&gt;&lt;8087&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15361" PostTypeId="2" ParentId="15339" CreationDate="2020-06-28T09:52:36.010" Score="5" Body="&lt;p&gt;Stephens Answer points out most details, I belive it's worth to mention that the 80186 is not incompatible with the IBM-PC's structure/hardware per se. The CPU core works for all details like a 286 in real mode, with the same additional instructions and exceptions, as there are:&lt;/p&gt;&#xA;&lt;p&gt;Instructions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Array Check (BOUND)&lt;/li&gt;&#xA;&lt;li&gt;Integer Multiplication Immediate 8/16 (IMUL)&lt;/li&gt;&#xA;&lt;li&gt;Push Immediate 8/16&lt;/li&gt;&#xA;&lt;li&gt;Push/Pop All (PUSHA/POPA)&lt;/li&gt;&#xA;&lt;li&gt;Shift Instructions with Immediate Count (ROL/RCL/SHL/etc.)&lt;/li&gt;&#xA;&lt;li&gt;Multi Byte/Word Input (INSB/W)&lt;/li&gt;&#xA;&lt;li&gt;Multi Byte/Word Output (OUTB/W)&lt;/li&gt;&#xA;&lt;li&gt;Stack Frame Handling (ENTER/LEAVE)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Exceptions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;INT 5 Array Check&lt;/li&gt;&#xA;&lt;li&gt;INT 6 Unused Instruction&lt;/li&gt;&#xA;&lt;li&gt;INT 7 ESC Instruction (FPU)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So far software will run into the same incompatibilities as with an 286.&lt;/p&gt;&#xA;&lt;p&gt;Further it's incompatible additional hardware aren't as much of an issue, depending on the design choosen.&lt;/p&gt;&#xA;&lt;p&gt;As Stephen said, the included peripherals are superior to IBM's choice of 8 bit components. This is especially true for the DMA controller, able to transfer to any location at any length (up to 64 KiB).&lt;/p&gt;&#xA;&lt;p&gt;While the address structure of the I/O block is complete different from the PC, it doesn't get in the way of any PC hardware as it it located at FF00h after reset. An area no PC-hardware (I know) occupies. Not even later one. It can be moved to any location in IO &lt;em&gt;or&lt;/em&gt; memory address space.&lt;/p&gt;&#xA;&lt;p&gt;The most obvious way to reach IBM-PC compatibility would adding everything exactly s the PC did. While this would eliminate many of the advantages of having integrated peripherals, but that sounds worse as it is, as most of a PC-I/O could be added as a single southbridge chip.&lt;/p&gt;&#xA;&lt;p&gt;The only remaining incompatibility would be the Interrupt Controller (PIC), as it's located on a different address.&lt;/p&gt;&#xA;&lt;p&gt;This is where the quite handy address decoder could be used. By connecting it's output to NMI and setting it to cover the I/O address range 0000h..03FFh, which is the range all I/O in the original PC was located, it would generate an NMI (*1) with each access (*2). Now an NMI handler can decode the offending instruction (*3) and translate it to the real hardware and back.&lt;/p&gt;&#xA;&lt;p&gt;With 80186 systems running at least at 6 MHz or above, the translation layer's performance impact was tolerable. In fact, I do only remember one usage which could not be emulated, and that's active sound generation, that's were the CPU essentially handles the speaker in software. something already critical on genuine hardware.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://it.wikipedia.org/wiki/Olivetti_Prodest_PC_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Olivetti Prodest PC1&lt;/a&gt; of 1987 (!), based on a &lt;a href=&quot;https://en.wikipedia.org/wiki/NEC_V20#Variants_and_successors&quot; rel=&quot;nofollow noreferrer&quot;&gt;NEC V40&lt;/a&gt; (a SoC much like an 80188, but with PC like timer/UART/PIO) did for use an NMI handler to emulate a PC compatible 8237 DMA controller while using the build in 20 bit DMA.&lt;/p&gt;&#xA;&lt;p&gt;Long story short: It's quite possible to use an 80186 and its advantages while being mostly compatible.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The mentioned PC-D, being conceived as Unix workstation, did offer a different way. Here all memory and I/O was required to handle the READY signal, controlled by a watchdog timer provided by the 80186 as well. While this in theory could be used for emulation as well (I did so), the performance impact was rather heavy, as it only fired after about 1 millisecond. Eons in CPU time. The nice part was that the system ROM, &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11869/6659&quot;&gt;much like MS-Windows&lt;/a&gt;, routed any NMI by default into the ROM based debugger. From there it was just a few commands until one could patch the offending software to run flawless :)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - NMI is a strange fellow on the IBM-PC AT, anyway, as it could be masked. Jep, that's something one needs to read twice, as the very feature of an NMI is to be not maskable, so it can be used to report critical conditions (like memory error).&lt;/p&gt;&#xA;&lt;p&gt;*2 - The same can be archived by simply selecting all I/O with top 6 bits zero, which needs a single TTL, leaving the PCS signals to other use.&lt;/p&gt;&#xA;&lt;p&gt;*3 - While decoding an offending memory instruction, with just the address of the &lt;em&gt;next&lt;/em&gt; instruction, as the NMI provides, is an quite complicated and rather error prone process, it's straight forward when it comes to I/O, as there are only 4 (well, 8 with INS/OUTS) opcodes to detect, and they have fixed formats.&lt;/p&gt;&#xA;&lt;p&gt;To only possible ambiguity would be direct address (8 bit port number) instructions, but luckily That address range (0Exh) is unused on the PC. Similar the INS/OUTS do not collide either - well, they aren't to be expected with 8088 software at all.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-02T16:56:00.600" LastActivityDate="2020-07-02T16:56:00.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15362" PostTypeId="1" AcceptedAnswerId="15366" CreationDate="2020-06-28T15:27:53.397" Score="3" ViewCount="74" Body="&lt;p&gt;I just managed to unmod CDTV keyboard (swapped wires for CD32) with community's help, but the original wire was gone, so I'm left without _KBSE signal connected. It seems the system doesn't mind.&lt;/p&gt;&#xA;&lt;p&gt;What is the purpose of Keyboard Sense in this (and other) system(s)?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-06-28T17:22:53.190" Title="What is _KBSE (Keyboard Sense) signal in CDTV and what is it used for" Tags="&lt;keyboards&gt;&lt;amiga-cdtv&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15363" PostTypeId="2" ParentId="15360" CreationDate="2020-06-28T15:29:25.157" Score="14" Body="&lt;p&gt;The &lt;strong&gt;MC68882&lt;/strong&gt; was relatively well-regarded among 1980s FPUs.  Digging out accurate timing information takes some effort, but it appears that handling denormalised values was only moderately burdensome for this FPU.  In the context of a register-to-register FADD already taking several dozen clock cycles:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Taking a denormalised extended-precision source operand incurs a penalty of 12 cycles,&lt;/li&gt;&#xA;&lt;li&gt;Underflow in an extended-precision result incurs a 34 cycle penalty,&lt;/li&gt;&#xA;&lt;li&gt;Underflow in a single or double-precision result incurs a 56 cycle penalty,&lt;/li&gt;&#xA;&lt;li&gt;Saving a denormalised value from register to memory incurs a 10 cycle penalty during format conversion,&lt;/li&gt;&#xA;&lt;li&gt;Underflow during format conversion incurs an approximately 30 cycle penalty.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The worst of the above penalties is &lt;strong&gt;comparable to executing an extra FADD or FMUL instruction&lt;/strong&gt;.  Importantly, the MC68882 could handle all of these conditions (as well as those involving Zeroes, Infinities and NaNs) without trapping to support software, provided the explicit exception flags were cleared.  This was not true of the later 68040 FPU, which was otherwise much faster.&lt;/p&gt;&#xA;&lt;p&gt;The slightly earlier &lt;strong&gt;MC68881&lt;/strong&gt; takes similar penalties, which appear smaller next to an overall longer instruction execution time.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Earlier in the 1980s, a computer might have used the &lt;strong&gt;Am9512&lt;/strong&gt;, one of the first and least expensive of the IEEE-754 format FPUs.  This was of course much slower than the 68882, but could still be much faster than performing floating-point operations using software routines.  Typical execution times are in the hundreds of cycles for single precision, and thousands of cycles for double precision.&lt;/p&gt;&#xA;&lt;p&gt;The Am9512 manual does not discuss denormalised numbers at all.  It is entirely likely that this early FPU, produced before IEEE-754 was ratified, simply flushes such tiny numbers to zero.  However, given the hardware architecture and the long execution times for each operation, I think denormalised numbers could have been handled without any performance penalty being noticeable.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The &lt;strong&gt;i8087&lt;/strong&gt; is also relevant here.  While of broadly comparable performance to the Am9512, it does have full support for IEEE-754 including denormalised values.  Timing penalties for handling them under most circumstances are not quoted in the manual, with execution timings of most instructions already being value-dependent.&lt;/p&gt;&#xA;&lt;p&gt;The exception, for which a timing penalty &lt;em&gt;is&lt;/em&gt; quoted, is for transferring an operand over the external bus.  Here a denormalised operand is quoted as taking 33 cycles longer than normal, provided the denormal exception is masked.&lt;/p&gt;&#xA;&lt;p&gt;There is a further caveat: transcendental functions on the i8087 cannot accept denormalised inputs, and will produce incorrect results.  User software is responsible for checking for this condition.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The &lt;strong&gt;i80387&lt;/strong&gt; which is also integrated into the &lt;strong&gt;i80486DX&lt;/strong&gt; also does not quote exact penalties for handling denormalised values.  A comment in the support software routines indicates that the 387 &amp;quot;can normalise denormalised values faster than a software exception handler can&amp;quot;.  Instruction timings for operations are variable and value-dependent, but generally faster than in the i8087.&lt;/p&gt;&#xA;&lt;p&gt;The i80387 also removes the limitation on supplying denormal values to transcendental operations.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-06-28T20:53:56.053" LastActivityDate="2020-06-28T20:53:56.053" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15364" PostTypeId="1" AcceptedAnswerId="15365" CreationDate="2020-06-28T16:51:24.363" Score="11" ViewCount="2058" Body="&lt;p&gt;In the 80s, the two great 16/32-bit desktop CPU architectures were the x86, used in the IBM PC and compatibles, and the 68000, used in the Amiga, Atari ST, Macintosh, early UNIX workstations and really most things that were not trying to run MS-DOS.&lt;/p&gt;&#xA;&lt;p&gt;With the rapid growth of MS-DOS, there inevitably developed an interest in running it on 68000 machines anyway, either by providing an x86 second processor or by software emulation. (Both of those solutions were tried on the Amiga, for example.)&lt;/p&gt;&#xA;&lt;p&gt;One fundamental problem with this is that the x86 is little endian and the 68k is big endian, which would cause chaos every time you tried to transfer binary data between the two.&lt;/p&gt;&#xA;&lt;p&gt;It occurs to me to wonder whether you could add any kind of glue logic to make the 68k run little endian, e.g. by swapping byte lanes in the data bus.&lt;/p&gt;&#xA;&lt;p&gt;But it seems to me there is going to be a fundamental problem with that. You could swap the two bytes in a 16-bit transfer. But the 68k transfers 32-bit numbers as a pair of 16-bit chunks, in sequence. The glue logic would have no way of knowing whether a pair of 16-bit transfers, one after the other, were meant to be the two halves of a 32-bit word (in which case they would need to be swapped) or separate words (in which case they would need to be kept as is). I'm guessing that's the reason I never heard of anyone making the 68k run little endian.&lt;/p&gt;&#xA;&lt;p&gt;(The 68020, with its 32-bit data bus, would be an easier proposition. But by the time that chip was widely used, I think people had mostly given up on running MS-DOS on anything other than fully IBM-compatible hardware.)&lt;/p&gt;&#xA;&lt;p&gt;Am I missing anything, or is that indeed why no one ever did run the 68k little endian?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10260" LastEditDate="2021-03-07T04:39:06.890" LastActivityDate="2021-03-07T04:39:06.890" Title="Swapping endian-ness on the 68000" Tags="&lt;hardware&gt;&lt;x86&gt;&lt;motorola-68000&gt;&lt;endianness&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15365" PostTypeId="2" ParentId="15364" CreationDate="2020-06-28T17:14:33.847" Score="12" Body="&lt;p&gt;Swapping byte lanes on the physical bus would, in any case, only have an effect on &lt;em&gt;naturally aligned&lt;/em&gt; data in memory, which happened to be the same width as the bus.  Swapping the lanes of a 16-bit bus doesn't solve the problem for 32-bit data, nor on a 32-bit bus for 64-bit or 80-bit data (the latter being associated with floating point).  So that is not a very effective solution in general.&lt;/p&gt;&#xA;&lt;p&gt;The basic problem is one that has to be solved when interchanging file formats between computers, and is independent of whether a second CPU is installed.  An x86 CPU processing Internet packets (which are big-endian) has to do this, while a 68K CPU processing some x86-original formats, also has to.  Usually the endianness of the data would be fixed using a software routine before processing began in earnest.  The following sequence will reverse a 32-bit word in D0 on the 68K:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ROL.W #8,D0&#xA;SWAP.L   D0&#xA;ROL.W #8,D0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-06-28T17:14:33.847" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15366" PostTypeId="2" ParentId="15362" CreationDate="2020-06-28T17:22:53.190" Score="3" Body="&lt;p&gt;Keyboard sense is simply so the CDTV can detect if a keyboard is attached. The keyboard is an optional feature.&lt;/p&gt;&#xA;&lt;p&gt;After all, the CDTV is a game console. and games should be plug and play. Having to go thru various setup options, eventually every time playing is not really a great idea. By enabling games to detect keyboard presence they can enable and show options for it, otherwise hidden.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-06-28T17:22:53.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15367" PostTypeId="2" ParentId="15364" CreationDate="2020-06-28T17:33:18.403" Score="5" Body="&lt;p&gt;This take a little more circuitry than the OP, in that the byte-swapper has to make use of the Function Code bus lines (FC0, FC1 and FC2) to distinguish between data transfers and instruction fetches. Bytes should only be swapped for data transfers; applying byte-swapping to instructions will wreck the execution of software.&lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2020-06-28T20:29:53.340" LastActivityDate="2020-06-28T20:29:53.340" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15368" PostTypeId="2" ParentId="15364" CreationDate="2020-06-28T19:02:42.020" Score="6" Body="&lt;p&gt;Since you mentioned the Amiga in your question, it ought to be relevant as to how this problem was solved efficiently on that system.&lt;/p&gt;&#xA;&lt;p&gt;As I understand, the &amp;quot;glue&amp;quot; logic for the Bridgeboards consisted mainly of 128KiB of dual-ported RAM accessible by both the Intel CPU on the Bridgeboard and the Amiga's 68K. This would be sufficiently large to buffer whole video frames and virtual hard drive accesses, and the dual-port hardware eliminates the need for low-level synchronization.&lt;/p&gt;&#xA;&lt;p&gt;The Janus Library (Amiga drivers for the Bridgeboard) seems to have managed transfers as a bidirectional FIFO in the dual-port RAM. So, really, just a byte stream to which both CPU's had Read/Write access. As such, the endianess is easily solved in software by just following a convention - much as network communications solves it by convention when they transfer byte streams between hosts with different native data formats.&lt;/p&gt;&#xA;&lt;p&gt;However, I do recall hearing at some point that the Bridgeboard did include some hardware endianess assistance, so that neither CPU's interface drivers would be forced to waste cycles dealing with data that wasn't native. Of course, they would have still needed some software convention for transfer of 32-bit data. But, given the 16-bit limitation of the Zorro II bus, and all versions of the Commodore Bridgeboard having max. 16-bit data bus Intel CPU's, that issue could have been avoided in the driver software.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-06-28T19:02:42.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15369" PostTypeId="1" AcceptedAnswerId="15370" CreationDate="2020-06-28T19:23:50.500" Score="5" ViewCount="418" Body="&lt;p&gt;The IBM PC in 1981 was rapidly followed by a rich ecosystem of computers with x86 CPUs running MS-DOS, not all of which were compatible at the hardware level.&lt;/p&gt;&#xA;&lt;p&gt;There is a list of some early MS-DOS computers at &lt;a href=&quot;https://en.wikipedia.org/wiki/Tandy_2000#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Tandy_2000#History&lt;/a&gt; (go down a page or so). I'm interested in sales figures, though; I get the impression some of those machines were much more popular than others. For example, the DEC Rainbow is a notable example, but is it often mentioned because it sold many units, or just because it came from DEC, a company already well-known for other reasons?&lt;/p&gt;&#xA;&lt;p&gt;Which were the most popular of the early MS-DOS computers apart from the IBM PC? To be definite, let's say 'early' means released before the end of 1985.&lt;/p&gt;&#xA;&lt;p&gt;By 'popular' I mean, specifically, number of units sold worldwide. The ideal would be to have sources for sales figures, if those can be found.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="5222" LastEditDate="2020-07-01T06:45:17.300" LastActivityDate="2020-07-02T16:47:37.267" Title="Which were the best selling early MS-DOS PCs apart from the IBM PC??" Tags="&lt;history&gt;&lt;ms-dos&gt;&lt;ibm-pc&gt;" AnswerCount="1" CommentCount="9" ClosedDate="2020-07-04T09:14:55.113" ContentLicense="CC BY-SA 4.0" />
  <row Id="15370" PostTypeId="2" ParentId="15369" CreationDate="2020-06-28T21:16:03.870" Score="8" Body="&lt;p&gt;While it's hard to come by numbers, there are several non clone candidates that sold quite well:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sirius_Systems_Technology&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sirius 1/Victor 9000&lt;/a&gt; &lt;em&gt;1981-1984&lt;/em&gt;- Outsold the IBM-PC in Europe by far not at least due better hardware and a headstart of almost a year. It got screwed by company politics in the US ignoring the European success.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/MBC-550&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sanyo MBC-550&lt;/a&gt; &lt;em&gt;1982-1986&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/Siemens_PC-D&quot; rel=&quot;nofollow noreferrer&quot;&gt;Siemens PC-D&lt;/a&gt; &lt;em&gt;1982-1986&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PC-9800_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;NEC PC98 family&lt;/a&gt; &lt;em&gt;1982-2004&lt;/em&gt; - Last complete new model in 1992, more than 18 millions sold, &lt;em&gt;the&lt;/em&gt; essential Japanese PC. It had it's own fellowship of compatible machines effectively making it the PC standard in far east. (*1)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_Professional_Computer_and_Professional_Portable_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;TI Professional Computer&lt;/a&gt; and &lt;a href=&quot;https://old-computers.com/museum/computer.asp?st=1&amp;amp;c=472&quot; rel=&quot;nofollow noreferrer&quot;&gt;Portable PPC&lt;/a&gt; &lt;em&gt;1983-?&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Tandy_2000&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tandy 2000&lt;/a&gt; &lt;em&gt;1983-1988&lt;/em&gt; - Successful  in the US, not much outside.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Olivetti_M24&quot; rel=&quot;nofollow noreferrer&quot;&gt;Olivetti M24&lt;/a&gt; &lt;em&gt;1983-1989&lt;/em&gt; (also repackaged as AT&amp;amp;T 6300 and Xerox 6060) - Quite considerable sales in Europe. For example the defacto standard for everyone working in accounting and taxes in Germany during most of the 80s way into the 1990s.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://brand-history.com/ta-triumph-adler-gmbh/ta-triumph-adler/ta-triumph-adler-der-neue-alphatronic-p-50-von-ta-wir-haben-uns-vorgenommen-nicht-nur-kompatibel-zu-xxx-zu-sein-sondern-auch-besser-hier-konnen&quot; rel=&quot;nofollow noreferrer&quot;&gt;TA Alphatronic P50/P60&lt;/a&gt; &lt;em&gt;1985-1990&lt;/em&gt; - 80186 based office system.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PC1512&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amstrad/Schneider PC1512&lt;/a&gt; &lt;em&gt;1986-1990&lt;/em&gt; - Quite successful in the UK and Germany.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/FM_Towns&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fujitsu FM-Towns&lt;/a&gt; &lt;em&gt;1989-1997&lt;/em&gt; - A Japanese household name.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;and not at least&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IBM's own PS/2 series.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Some machines with lesser, but still noteworthy sales:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rainbow_100&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEC Rainbow&lt;/a&gt; &lt;em&gt;1982-1986&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Apricot_PC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apricot PC&lt;/a&gt; &lt;em&gt;1983-1985&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PCjr&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM PCjr&lt;/a&gt; &lt;em&gt;1984-1985&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Apricot_Portable&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apricot Portable&lt;/a&gt; &lt;em&gt;1984-1986&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=495&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apricot F1&lt;/a&gt; - &lt;em&gt;1984-1986&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_JX&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM PC JX&lt;/a&gt; &lt;em&gt;1984-1987&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/Alphatronic_PC16&quot; rel=&quot;nofollow noreferrer&quot;&gt;TA Alphatronic PC16&lt;/a&gt; - &lt;em&gt;1985-1987&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://it.wikipedia.org/wiki/Olivetti_Prodest_PC_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Olivetti Prodest PC1&lt;/a&gt; - &lt;em&gt;1987-1988&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There are many more that had some impact, but hard to judge - also while being somewhat Euro/US-centric, it leaves out many developments outside the UK and Germany.&lt;/p&gt;&#xA;&lt;p&gt;If one really wants to go ahead and make up something like 'waves', this this would support three rough categories:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Early systems predating or parallel to the introduction of the PC. If not cut due internal issues, most vanished in the mid 1980s&lt;/li&gt;&#xA;&lt;li&gt;x86/MS-DOS machines introduced after the IBM-PC offering considerable enhancements, if at all only in part compatible, most of them rather short lived.&lt;/li&gt;&#xA;&lt;li&gt;Business and home machines developed after the IBM-AT, often in some way compatible, but still different enough to need custom versions of most games/applications.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; Several less than fully compatible machines/families enjoyed huge success, past the claimed 'early ones', some designed way after the PC-AT, which essentially defined the standard.&lt;/p&gt;&#xA;&lt;p&gt;The holy grail of 100% compatibility was for most parts only present in the US. And even there some, like the Tandy 2000 could hold up. I'd still say it was mostly a sales argument for a few companies, carried by willing journalists.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Here a little indicatorhow popular the PC98 is/was in Japan: A &lt;a href=&quot;https://www.kadenken.com/view/item/000000000704&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;new&lt;/em&gt; mini-PCI-E&lt;/a&gt; card, for Laptops, that plays the PC98 startup sound when booting.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-02T16:47:37.267" LastActivityDate="2020-07-02T16:47:37.267" CommentCount="24" ContentLicense="CC BY-SA 4.0" />
  <row Id="15371" PostTypeId="1" AcceptedAnswerId="15373" CreationDate="2020-06-28T21:21:44.480" Score="7" ViewCount="440" Body="&lt;p&gt;I've tried everything I can think of. &lt;code&gt;EXIT&lt;/code&gt; &lt;code&gt;QUIT&lt;/code&gt; &lt;code&gt;END&lt;/code&gt; &lt;code&gt;STOP&lt;/code&gt; &lt;code&gt;BYE&lt;/code&gt; &lt;code&gt;Q&lt;/code&gt;…&lt;/p&gt;&#xA;" OwnerUserId="11579" LastActivityDate="2020-06-28T21:30:24.123" Title="How to quit MBASIC and return to CP/M?" Tags="&lt;cp-m&gt;&lt;microsoft-basic&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15373" PostTypeId="2" ParentId="15371" CreationDate="2020-06-28T21:30:24.123" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How to quit MBASIC and return to CP/M?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;SYSTEM&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;See Section D integration to CP/M, &lt;a href=&quot;https://archive.org/details/BASIC-80_MBASIC_Reference_Manual/page/n139/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;page D-4&lt;/a&gt; of the MBASIC Manual&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-06-28T21:30:24.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15375" PostTypeId="2" ParentId="15357" CreationDate="2020-06-28T21:58:26.123" Score="18" Body="&lt;p&gt;Full disclosure: I worked on the x87 FPU of a 486-class CPU at a math-coprocessor company in the early 1990s and thereafter worked at AMD, where I was on the 3DNow! design team and the design team for the FPU of the AMD Athlon processor (also known as K7).&lt;/p&gt;&#xA;&lt;p&gt;The x87 FPU never acquired a flush-to-zero mode. In fact, denormal support was one of the major innovations of the 1985 IEEE-754 standard, which was based on the work of William Kahan. So a re-introduction of flush-to-zero was considered somewhat anathema at the time.&lt;/p&gt;&#xA;&lt;p&gt;However, denormals were rarely supported at full speed in x87 FPUs, and the resulting performance penalties were considered undesirable for 3D graphics and media processing on x86 processors when these became barely fast enough to make that feasible in the early 1990s. Some of the relevant use cases had soft-realtime characteristics.&lt;/p&gt;&#xA;&lt;p&gt;This led to ideas about new alternative floating-point architectures using SIMD processing in the mid 1990s, of which AMD's 3DNow! was the first to market (K6-2, May 1998), shortly followed by Intel's SSE (Pentium III, February 1999). In the case of 3DNow!, there was no flush-to-zero &lt;em&gt;mode&lt;/em&gt; per se, as that was simply all that was provided!&lt;/p&gt;&#xA;&lt;p&gt;Stuart Oberman, Greg Favor, and Fred Weber: &amp;quot;AMD 3DNow! Technology: Architecture and Implementations&amp;quot;, &lt;em&gt;IEEE Micro&lt;/em&gt;, Vol. 19, No. 2, March-April 1999, pp. 37-48&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The primary set of target applications for 3DNow! technology is multimedia. Because most multimedia applications operate in real time, the desire for hardware status and exception support is minimal. Thus, 3DNow!, like MMX, does not generate exceptions or set any status flags. Instead, the new instructions support saturating arithmetic such that overflow and underflow situations return reasonable default values. AMD implementations of 3DNow! technology generate properly signed, maximum representable normal numbers in the presence of numeric overflow. Similarly, all inputs and results below the minimum normal number are flushed to zero. Infinities and NaNs are not supported as operands to 3DNow! instructions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Intel's SSE as the surviving technology, and later on AVX, AVX-2, etc. provides programmers with a choice of denormal-support and flush-to-zero modes. The control is relatively fine-grained by providing separate control bits for input (DAZ = denormals are zero) and output (FTZ = flush to zero).&lt;/p&gt;&#xA;&lt;p&gt;Shreekant (Ticky) Thakkur and Tom Huff, &amp;quot;Internet Streaming SIMD Extensions,&amp;quot; &lt;em&gt;Computer&lt;/em&gt;, Vol. 32, No. 12, December 1999, pp. 26-34&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;We decided to offer two modes of floating-point arithmetic: IEEE compliance for applications that need exact single-precision computation and a flush-to-zero (FTZ) mode for real-time applications. Full IEEE support ensures greater future applicability of the extensions for applications that require full precision and portability. FTZ mode along with fast hardware support for masked exceptions enables the high-performance execution necessary for real-time applications. FTZ mode returns a zero result in an underflow situation if the exceptions are masked. Most real-time 3D applications would use FTZ mode since they are not sensitive to a slight loss in precision, especially if FTZ mode executes faster.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="823" LastEditorUserId="823" LastEditDate="2020-06-29T07:21:20.037" LastActivityDate="2020-06-29T07:21:20.037" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15376" PostTypeId="1" AcceptedAnswerId="15379" CreationDate="2020-06-29T03:15:34.677" Score="9" ViewCount="2823" Body="&lt;p&gt;In Fortran 77, numerical code that ran on IBM, CDC, Cray etc, how was overflow typically handled?&lt;/p&gt;&#xA;&lt;p&gt;Did it raise an exception? (I would expect such an exception to be inexact on vector machines, i.e. to potentially be raised some cycles after the overflow occurred?)&lt;/p&gt;&#xA;&lt;p&gt;Did it work along the lines eventually adopted in IEEE 754, producing special 'infinite' values?&lt;/p&gt;&#xA;&lt;p&gt;Or something else?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-04-25T23:21:36.127" Title="How did dusty deck Fortran handle overflow?" Tags="&lt;mainframe&gt;&lt;floating-point&gt;&lt;fortran&gt;" AnswerCount="10" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15377" PostTypeId="1" CreationDate="2020-06-29T04:34:26.477" Score="10" ViewCount="277" Body="&lt;p&gt;Atari licensed Digital Research's GEM graphic user interface for the ST. As &lt;a href=&quot;https://www.filfre.net/2015/04/the-68000-wars-part-2-jack-is-back/&quot; rel=&quot;noreferrer&quot;&gt;https://www.filfre.net/2015/04/the-68000-wars-part-2-jack-is-back/&lt;/a&gt; puts it:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And of course in the wake of the Macintosh the ST simply had to ship with a mouse and an operating system to support it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It was this latter that presented by far the biggest problem. While the fairly conservative hardware of the ST could be put together relatively quickly, writing a modern, GUI-based operating system for the new computer represented a herculean task. Apple, for instance, had spent years on the Macintosh’s operating system, and when the Mac was released it was still riddled with bugs and frustrations. This time around Tramiel wouldn’t be able to just slap an archaic-but-paid-for old PET BASIC ROM into the thing, as he had in the case of the Commodore 64. He needed a real operating system. Quickly. Where to get it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;He found his solution in a very surprising place: at Digital Research, whose CP/M was busily losing its last bits of business-computing market-share to Microsoft’s juggernaut MS-DOS. Digital had adopted an if-you-can’t-beat-em-join-em mentality in response. They were hard at work developing a complete Mac-like window manager that could run on top of MS-DOS or CP/M. It was called GEM, the “Graphical Environment Manager.” GEM was merely one of a whole range of similar shells that were appearing by 1985, struggling with varying degrees of failure to bring that Mac magic to the bland beige world of the IBM clones. Also among them was Microsoft’s original Windows 1.0 — another product that Tramiel briefly considered licensing for the ST. Digital got the nod because they were willing to license both GEM and a CP/M layer to run underneath it fairly cheap, always music to Jack Tramiel’s ears.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Just how cheap was it? How much did Atari pay DR? And what sort of terms were involved?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-06-29T04:34:26.477" Title="How much did Atari pay for GEM?" Tags="&lt;history&gt;&lt;atari&gt;&lt;atari-st&gt;" AnswerCount="0" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15378" PostTypeId="2" ParentId="15376" CreationDate="2020-06-29T06:28:12.323" Score="10" Body="&lt;p&gt;I don't recall any overflow handling on the FORTRAN 77 compiler that I worked on and supported  (Honeywell Series 60 Level 62). Any overflow would cause a program abort, so it was up to the programmer to ensure that overflows did not happen. This compiler was designed to be compatible with IBM System/360 FORTRAN, and even used the same base-16 floating point format.&lt;/p&gt;&#xA;" OwnerUserId="3278" LastActivityDate="2020-06-29T06:28:12.323" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15379" PostTypeId="2" ParentId="15376" CreationDate="2020-06-29T08:00:46.290" Score="14" Body="&lt;p&gt;While this may cover many ways of overflow (from integer and counter all the way to record, I assume the Overflow in question is about floating point, which more precisely means over/underflow of the exponent.&lt;/p&gt;&#xA;&lt;p&gt;The exact handling varies widely between compilers and machines. Fortran 77 did not make any assumptions here (AFAIK), it at all, it was expected that the program will be aborted like with any other machine error.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;In general: Fortran is, much like Assembler, not a 'nanny' language, made to pamper every possible fault, but expects the programmer to write a program tailored to its data, not producing any error under normal condition. As a result, program abort is a sensible default solution.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Of course, it's always possible to add checks. Already early Fortran (no number) for the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_704&quot; rel=&quot;noreferrer&quot;&gt;IBM 704&lt;/a&gt; added the ability to check for conditions (ACCUMULATOR OVERFLOW, QUOTIENT OVERFLOW, and DIVIDE CHECK) after a calculation.&lt;/p&gt;&#xA;&lt;p&gt;Over the years all modern compilers have added specific tools to handle such conditions, especially when IEEE float became a thing in the 1980s. For example Oracles's F77 compiler for SPARC and x86 may be told to not abort right away, but record 'flags' about operations. These can be tested when the programmer expects some error condition and is willing to handle it.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;      x = d_max_subnormal() / 2.0&#xA;      ieeer = ieee_flags( 'get', 'exception', 'overflow', out ) &#xA;      IF ( out .eq. 'overflow') PRINT *,'overflow flag raised' &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is mainly done due performance reasons. Error checking costs time and Fortran users act usually at the top end of what's available in computing power, so any additional code is to be avoided.&lt;/p&gt;&#xA;&lt;p&gt;Then again, Oracle F77 allows as well for generation of exceptions. It's a modern implementation, so it gets soft on anyone short of a &lt;em&gt;real programmer&lt;/em&gt;. This means an exception handler can be added:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;      EXTERNAL myhandler                         &#xA;      i = ieee_handler ('set', 'division', myhandler )&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;With IEEE FP rules became defined about what results of operation with not fitting values (*1) should be, enabling to continue operations after overflow even further.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Long story short: Check Machine and Compiler Manual in Operation.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Trying to avoid the word 'not numbers'&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-30T00:22:24.883" LastActivityDate="2020-06-30T00:22:24.883" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15380" PostTypeId="2" ParentId="15376" CreationDate="2020-06-29T10:18:22.120" Score="7" Body="&lt;p&gt;Before IEE 754, there was no floating point equivalents to &amp;quot;NaN&amp;quot; or &amp;quot;Inf&amp;quot;. Overflow, underflow, and division by zero generated interrupts which would be ignored, trapped, or terminated the program with a default error message (and most likely a core dump as well).&lt;/p&gt;&#xA;&lt;p&gt;These options could often be controlled from Fortran by a collection of routines such as&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;CALL ERRSET - define how many times to ignore each type of error occurred before it was either reported as a warning or terminated the code. Don't ask why it was useful to ignore the first 17 overflows but the 18th one would caused a fatal error, but you could do that sort of thing if you really wanted to!&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CALL ERRSAV - retrieve the current settings for ERRSET, in order the override them temporarily and then restore them&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CALL ERRMSG - create user defined error messages.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The same routines also controlled floating point errors on input - e.g. attempting to enter a FP number with the exponent outside the valid range.&lt;/p&gt;&#xA;&lt;p&gt;All this was rather OS and hardware dependent, but it was fairly common to use it to disable underflows (which returned zero) if the numerical algorithm didn't care about that.&lt;/p&gt;&#xA;&lt;p&gt;I can't find a useful set of documentation of these on the web - Google found some references to IBM documentation but they were too fragmented to be worth linking to.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2020-06-29T10:18:22.120" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15381" PostTypeId="2" ParentId="15376" CreationDate="2020-06-29T13:59:41.830" Score="10" Body="&lt;p&gt;I only have experience of ICL mainframes, CDC, Prime 300, Data General Nova and Eclipse.  On those, the programs just crashed.  Like Mick's answer, it would be up to the programmer to figure it out.  These were variants of Fortran II (lots of 3- way jumps), Fortran IV (or 66) and Fortran V (what the vendor called it).&lt;/p&gt;&#xA;&lt;p&gt;Fortran was mainly used for High Performance stuff so range and error checking was hardly done.  Some of the ones published ones generated out of bounds problems which weren't easy to spot.  Like stack based stuff nowadays, if it doesn't overwrite the stack frame, nothing except the result will tell you that it has gone wrong.&lt;/p&gt;&#xA;&lt;p&gt;One of the common problems was storage of characters in integers.  There was no character type.  On the CDCs, only 48 of the 60 bits were used for integers.  With 6-bit characters, you could store 10 characters in an integer but you'd get an overflow exception if you tried printing with I format.  It was OK when printed with A format.&lt;/p&gt;&#xA;&lt;p&gt;The other common problem was the incorrect order of variables or occasionally untyped variables in common blocks.  This caused everything to misalign.  Most of the Fortran variants did not have the concept of include files.&lt;/p&gt;&#xA;&lt;p&gt;There was no concept of IMPLICIT NONE but you could do IMPLICIT COMPLEX since hardly anyone used COMPLEX.  That would spot problems like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DO 10 I = 1.5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;instead of&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DO 10 I = 1,5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Without using IMPLICIT COMPLEX, the easiest way was to always include the increment since the following were illegal&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DO 10 I = 1.100,1&#xA;DO 10 I = 1, 100.1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Since Fortran II and IV allowed spaces in variable names some people went crazy over this.  Very often only the first 6 characters of the variable name were recognized so&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;COORDS X = 20D2&#xA;COORDS Y = -30.0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;would actually assign&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;COORDS = -30.0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Stuff like that often produced spectacular crashes with the coder complaining &lt;em&gt;why doesn't the compiler warn me about this&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2020-06-29T13:59:41.830" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15382" PostTypeId="2" ParentId="15004" CreationDate="2020-06-29T14:24:54.797" Score="6" Body="&lt;p&gt;For 8080, 8085 and Z80, possibly PL/M.  That generated exactly what you told it.  Also, it had special I/O instructions.  With most other compilers, you had to call&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;output(0x20, 0x90)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;but in PL/M it was built in&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;output(0x20) = 0x90&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;would generate the out instruction.  There was a similar input instruction.  The part of PL/M that always caught C programmers out was that even numbers were false and odd numbers were true.  This gave rise to PL/M86 and PL/M286.&lt;/p&gt;&#xA;&lt;p&gt;The use of Forth varies&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;as a compiled language&lt;/li&gt;&#xA;&lt;li&gt;as a concept with a generic interpreter&lt;/li&gt;&#xA;&lt;li&gt;as a concept using indirect threaded code (&lt;a href=&quot;https://en.wikipedia.org/wiki/Threaded_code#Indirect_threading&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Threaded_code#Indirect_threading&lt;/a&gt;) with a home-brew interpreter&lt;/li&gt;&#xA;&lt;li&gt;as a concept using knotted code (also known as token threads) with a home-brew interpreter.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I've seen 3 and 4 but not 1 or 2.  Option 3 and 4 is normally used to reduce the code size but the program runs more slowly than if it were written in straight code.  In the late 70s and early 80s, when information was obtained from journals, it wasn't easy to find a Forth compiler so most of the time it was a home brew version and everything was written in assembler.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2020-06-29T14:24:54.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15383" PostTypeId="1" AcceptedAnswerId="15384" CreationDate="2020-06-29T17:14:08.237" Score="4" ViewCount="254" Body="&lt;p&gt;CDTV uses &lt;a href=&quot;http://amiga.resource.cx/mod/cdtv.html&quot; rel=&quot;noreferrer&quot;&gt;proprietary CD drive&lt;/a&gt; at 1x speed. Most burners out there cannot run slower than 4x, x8. Same for CDs as the lowest I found was 2x.&lt;/p&gt;&#xA;&lt;p&gt;What speed should I burn it at to be able to use it with CDTV and can it be still done with faster drives / cds?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2020-06-29T18:15:46.717" LastActivityDate="2020-06-30T20:02:43.543" Title="What speed should CDTV CDs be burned at" Tags="&lt;cd-rom&gt;&lt;amiga-cdtv&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15384" PostTypeId="2" ParentId="15383" CreationDate="2020-06-29T18:32:13.253" Score="8" Body="&lt;p&gt;Why would you think that you need a single speed writer to write a CD for a single speed drive?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;With an ideal writer, and ideal media, the resulting CD would be the same, no matter at which speed it was written.&lt;/strong&gt; But the process of writing a CD is analog -- a laser beam locally changes the chemistry of the CD -- and faster writing means applying more energy to more sensitive media at a higher speed. So if you take both the writer and the media to their upper limit, the result may be marginal, resulting in problems if the player is equally marginal. My personal rule of thumb, therefore, is to set the recording speed a notch or two down from the maximum.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-06-29T18:32:13.253" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15385" PostTypeId="2" ParentId="15279" CreationDate="2020-06-29T21:02:59.907" Score="5" Body="&lt;p&gt;As pointed out in the comments to my question, &lt;a href=&quot;http://channelf.se/veswiki/index.php?title=Opcode&quot; rel=&quot;noreferrer&quot;&gt;the VESWiki opcode table&lt;/a&gt; I linked to only defines operations for scratchpad registers 0 through 14. So it is in fact consistent with the F8 Guide to Programming.&lt;/p&gt;&#xA;&lt;p&gt;I also found another source confirming this, the &lt;a href=&quot;http://www.bitsavers.org/components/mostek/f8/1981_3870_F8_Microcomputer_Data_Book.pdf&quot; rel=&quot;noreferrer&quot;&gt;Mostek 3870/F8 Microcomputer Data Book&lt;/a&gt; (the 3870 was the single-chip implementation of the 3850, and as far as I can tell they operated the same way):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ABVDT.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ABVDT.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And even more definitely stating that the opcode is indeed illegal:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yNIIy.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yNIIy.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As for what these illegal opcodes actually do, I found a link to &lt;a href=&quot;http://www.nyx.net/%7Elturner/public_html/F8_ins.html&quot; rel=&quot;noreferrer&quot;&gt;Lowell O. Turner's F8 table&lt;/a&gt;, which (while not being a primary source) says the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;1111&lt;/code&gt; NOP With this value, no operation is performed&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="15661" LastActivityDate="2020-06-29T21:02:59.907" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15386" PostTypeId="2" ParentId="15376" CreationDate="2020-06-29T23:27:01.520" Score="7" Body="&lt;p&gt;The answer is &amp;quot;it depends&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;If your object program is running on a machine that traps on arithmetic overflow, you'll get a trap on arithmetic overflow.&lt;/p&gt;&#xA;&lt;p&gt;If there's a latching overflow indicator, there might be a way to interrogate it; with ICL 1900 FORTRAN, you could CALL OVERFL(K) to set K depending on whether overflow had occurred (K=1 for overflow, and somewhat oddly, K=2 for no overflow).&lt;/p&gt;&#xA;&lt;p&gt;You might get compile-time debugging options to insert checks for overflow; again with the ICL 1900, compiling in TRACE mode caused overflow checks to be inserted at &amp;quot;certain points&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://icl1900.co.uk/techpub/tl1167.pdf&quot; rel=&quot;noreferrer&quot;&gt;1900 FORTRAN manual&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;There's another FORTRAN manual in the same place, this time explicitly for FORTRAN 77, but it requires the DjVu reader, so I did not link it here.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-06-29T23:27:01.520" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15387" PostTypeId="1" CreationDate="2020-06-30T02:35:56.940" Score="2" ViewCount="172" Body="&lt;p&gt;The PC Transporter provides composite out via a cable run to the internal video header of the Apple II. In order to do this, I assume it has to disable the sync and colorburst generators so the Apple doesn't interfere with its own signal. (Although it is possible they do something tricky to sync up their output with the signals generated by the Apple.)&lt;/p&gt;&#xA;&lt;p&gt;I'm interested in doing the same so I can have a Raspberry Pi running Apple2pi installed internally using the built-in composite. I know I'll have to make some tweaks on the Pi side too, so it doesn't generate a composite signal until the Apple is booted to the apple2pi software, but unless I figure out how to disable composite on the Apple there's not much point in working that out.&lt;/p&gt;&#xA;" OwnerUserId="18631" LastActivityDate="2020-06-30T06:58:12.940" Title="How can the composite out of an Apple II be disabled?" Tags="&lt;apple-ii&gt;&lt;composite-video&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15388" PostTypeId="2" ParentId="15387" CreationDate="2020-06-30T06:22:33.993" Score="2" Body="&lt;p&gt;Partial answer:&lt;/p&gt;&#xA;&lt;p&gt;Having looked at the &lt;a href=&quot;http://ae.applearchives.com/files/PC_Transporter_Manual_1.31.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual&lt;/a&gt;, the only connection is a two-wire cable to video aux.&lt;/p&gt;&#xA;&lt;p&gt;They also say that any composite monitor connected to the internal Apple video must be NTSC composite compatible.&lt;/p&gt;&#xA;&lt;p&gt;As the Apple 6502 keeps running, I would assume they have the Apple display a black screen, and then sync up and overlay their own pixel outputs on the black level. After all, the manual says they have designed their own CGA implementation, so that wouldn't be much more effort.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm interested in doing the same so I can have a Raspberry Pi running Apple2pi installed internally using the built-in composite.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The alternative that I know 80-column cards used was to have a composite-in (connected to the Apple video output) and composite-out connector (connected to the monitor), and then switch between the Apple video signal and their own signal using anlog hardware.&lt;/p&gt;&#xA;&lt;p&gt;So with some additional hardware connected to some GPIO pin on the RaspPi, you should be able to do that from a RaspPi as well.&lt;/p&gt;&#xA;&lt;p&gt;Googling finds lots of discussion how to do that, for example &lt;a href=&quot;https://www.maximintegrated.com/en/design/technical-documents/tutorials/3/3823.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;with a MAX4649 chip and an Op-Amp&lt;/a&gt;, or &lt;a href=&quot;https://electronics.stackexchange.com/questions/380836/how-to-switch-composite-video-signal-inputs-to-one-output/380842&quot;&gt;this&lt;/a&gt; electronics.stackexchange question.&lt;/p&gt;&#xA;&lt;p&gt;There are plenty of more ways, but I guess an implementation with a one or two chips and a number of resistors on a perfboard or similar shouldn't be too hard.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-06-30T06:22:33.993" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15389" PostTypeId="2" ParentId="15387" CreationDate="2020-06-30T06:52:50.707" Score="0" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The PC Transporter provides composite out via a cable run to the internal video header of the Apple II.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This could be a missconception. The Apple II does not have a Video-In. The 4 pin connector right of Slot 7 provides the NTSC signal and is in general meant to augment it, like with a PAL converter for European TV.&lt;/p&gt;&#xA;&lt;p&gt;Your intention is simply to use the Apple's RCA connector, so the user doesn't have to switch connectors. In general I would recomend to route the Apples signal from the 4 pin connector over to your card and have an analogue switcher between the Apple II's signal and whatever it produces, to finally be output on a new connector. Much the same way most 80 columns cards for the Apple II+ work. This is safe and carries no chance to damage the II.&lt;/p&gt;&#xA;&lt;p&gt;Now if you want to do it the PC-Transporter way, then the only clean way is with the Apple IIe and closing the X3 pad. This will connect the AN3 output to the video logic, disabling the signal, thus closing the output transistor. Now an external applied signal can be applied and will show up at the video jack. See &lt;a href=&quot;https://link.springer.com/content/pdf/10.3758/BF03214463.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here for a short description&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Apple II/+ isn't prepared for this, so you need to throw a wire across two chips.&lt;/p&gt;&#xA;&lt;p&gt;After doing the modification AN3 can switch video on and off.&lt;/p&gt;&#xA;&lt;p&gt;Another, less elegant way would be to drive an all black picture and overwrite the Apple II signal.&lt;/p&gt;&#xA;&lt;p&gt;This will of course need previous synchronisation (and resynchronisation) using the same pin. Not sure if the is as easy possible as you seam to expect.&lt;/p&gt;&#xA;&lt;p&gt;Either way will require careful design to not damage the II's output circuitry. Also, neither solution will work with the IIgs.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-06-30T06:58:12.940" LastActivityDate="2020-06-30T06:58:12.940" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15390" PostTypeId="2" ParentId="15376" CreationDate="2020-06-30T13:28:09.437" Score="4" Body="&lt;p&gt;In my dusty memory, F77 on a CDC Cyber 175 would crash on floating-point overflow, and I would assume that applies from 6600 to 176 as well. That might have been due to local setup.&lt;/p&gt;&#xA;" OwnerUserId="1959" LastActivityDate="2020-06-30T13:28:09.437" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15392" PostTypeId="1" CreationDate="2020-06-30T16:26:03.263" Score="26" ViewCount="4648" Body="&lt;p&gt;In 1997, my uncle visited and gave me a &amp;quot;fax modem&amp;quot; which he installed on our 486 PC and then managed to transfer over a fax document from a real fax in his home to our computer, running Windows 3.1. My eyes were as big as saucers: this was the future!&lt;/p&gt;&#xA;&lt;p&gt;Being a kid, I attempted several times to use the &amp;quot;modem&amp;quot; to call a BBS or play DOOM over the network, not understanding what a &amp;quot;fax modem&amp;quot; was. I still only barely do. Needless to say, it didn't work, and I was basically 100% offline with my so-called &amp;quot;fax modem&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;It visually looked like a &amp;quot;real&amp;quot; modem, but it was apparently limited to only work with &amp;quot;fax&amp;quot; traffic, and not &amp;quot;general data&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;This is confusing to me, because a &amp;quot;modem&amp;quot; is supposed to translate &amp;quot;telephone audio&amp;quot; signals into binary 0s and 1s, and vice versa, for remote communication. Surely a fax machine uses the same basic idea as data packets? It still sends and receives basically the same kind of data!&lt;/p&gt;&#xA;&lt;p&gt;Yet my &amp;quot;modem&amp;quot; was unable to do any of the things that you associate with a modem, except the specific task of receiving and (supposedly) sending fax documents to/from other PCs with a fax modem, or real fax machines.&lt;/p&gt;&#xA;&lt;p&gt;The &amp;quot;real&amp;quot; modems cost much more money for some reason. The fax modem was likely a cheap little thing that was even old in 1997. I don't think he ever commented on why a kid would want a fax modem, or what I was supposed to use it for other than that one-time fax document retrieval from him.&lt;/p&gt;&#xA;&lt;p&gt;So, my question is why the data modems were so much more expensive than the fax modems when they did basically the same thing -- simply &amp;quot;translate to/from audio/bits&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Why could my fax modem never call a BBS, even if it would be slower than the fanciest modem of the time?&lt;/p&gt;&#xA;" OwnerDisplayName="B. Yath" LastEditorUserId="439" LastEditDate="2020-07-01T13:36:20.670" LastActivityDate="2020-07-03T15:38:58.273" Title="Why were &quot;data modems&quot; so much more expensive compared to &quot;fax modems&quot; back in the day?" Tags="&lt;modem&gt;" AnswerCount="7" CommentCount="14" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15393" PostTypeId="2" ParentId="15392" CreationDate="2020-06-30T17:44:52.413" Score="5" Body="&lt;p&gt;A pure fax modem back then would be slower than a data modem. Fax modems were generally 9600 baud and could possibly be limited to just Fax, although some modems could do both.&lt;/p&gt;&#xA;&lt;p&gt;Still 9600 baud was slow even back then. Data modems were 28,800 baud or 56K baud and were much faster.&lt;/p&gt;&#xA;&lt;p&gt;56K baud was the limit I reached before getting Cable Internet.&lt;/p&gt;&#xA;&lt;p&gt;Of course, the faster the modem, generally the more expensive it was. That is why (in your question) data modems were more expensive.&lt;/p&gt;&#xA;" OwnerUserId="18768" OwnerDisplayName="John" LastActivityDate="2020-06-30T17:52:03.600" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15394" PostTypeId="2" ParentId="15392" CreationDate="2020-06-30T19:25:55.913" Score="22" Body="&lt;p&gt;Fax machines use distinct frequency ranges for upstream and downstream transmission, with one direction receiving the vast majority of the bandwidth.  Computer modems at 9600 and higher baud rates used he same frequency ranges for both directions, supporting high speed transmission in both directions simultaneously.  This made it necessary to use a more complicated phone-line interface circuitry that would separate the received data from transmitted data in the same band.&lt;/p&gt;&#xA;&lt;p&gt;Further, modulating data is generally easier than demodulating data, and many &amp;quot;fax modems&amp;quot; included circuitry to modulate data at 9600 but could only demodulate at 4800.  This meant that when sending a fax to someone else, the device would operate at high speed to minimize the faxmodem-owner's phone bill, but when receiving a fax, the device would operate at low speed, increasing the other party's phone bill.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-06-30T19:25:55.913" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15395" PostTypeId="2" ParentId="15376" CreationDate="2020-06-30T19:31:19.233" Score="4" Body="&lt;p&gt;The PDP-8, a tiny minicomputer compared to some of the examples here, did the following in its floating point package:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The input conversion routine halts on overflow during calculation of the mantissa. Typing RUBOUT and pressing CONTINUE on the console will restart the routine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Overflow during exponent calculation yields an unpredictable result; the package may halt in which case it may be restarted as above.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Capacity of the input routine is approximately from .999999E-615 to .999999E+615.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The overflow halt may be eliminated by depositing 7000 (NOP) into location 7564. If this is done or if the user continues from the overflow halt without typing RUBOUT, the contents of the floating accumulator will be unpredictable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The PDP-8 had a full FORTRAN-IV compiler, thought admittedly a very constrained one to work with the machine's 8 Kw core. I think it can safely be said that the PDP-8 handled overflow “not very gracefully”.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-06-30T19:31:19.233" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15396" PostTypeId="2" ParentId="15383" CreationDate="2020-06-30T20:02:43.543" Score="4" Body="&lt;p&gt;If this is for your personal use, I'd say &amp;quot;whatever works&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Make attempts at the fastest speed with proper CD-Rs, and test them on the real machine.&lt;/p&gt;&#xA;&lt;p&gt;If it doesn't work, reduce the speed. But in my experience, the quality of the CD-R themselves is more important than the burning speed.&lt;/p&gt;&#xA;&lt;p&gt;Also, CDTV may suffer from dying laser, and you can burn perfectly okay CDs and not being able to read them because the laser is too old (replacing the drive is in that case the best option, as opposed to the CD32, I didn't find any good resource on lens/laser replacement for the CDTV)&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-06-30T20:02:43.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15397" PostTypeId="2" ParentId="15376" CreationDate="2020-06-30T20:47:50.250" Score="6" Body="&lt;p&gt;As a Fortran Compiler writer for dusty deck (and other computers), let me add that many answers, although correct, are not focusing on the implementation Fortran language, but features that they might have remembered using from Fortran. Many of those features, although correctly described, are mainly about features provided by the operating system or run-time libraries which would have been equally available to other language programs running on the same platform (be it Algol, Autocode, Assembler or whatever).&lt;/p&gt;&#xA;&lt;p&gt;Most of the time the Fortran compiler just generated the  most efficient machine code it could for the program supplied. Performance (whether in Whetstones or Dhrystones or whatever) was the thing to care about.&lt;/p&gt;&#xA;&lt;p&gt;So, basically, the answer is: it depends. The hardware may generate a fault or it may not. There may be features to capture it or there may not. Sometimes the overflow/underflow happened silently and the bits just fell of the end of the accumulator! Sometimes you could effect what happened on overflow by appropriate job control commands and not from the program at all.&lt;/p&gt;&#xA;&lt;p&gt;The compiler just had to generate the best arithmetic op-codes it could and stuff the consequences.&lt;/p&gt;&#xA;&lt;p&gt;Event capture is just a modern artefact. When Ada included it I remember programmers wondering how it could be useful!&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2020-06-30T20:47:50.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15398" PostTypeId="2" ParentId="15392" CreationDate="2020-06-30T22:36:17.853" Score="5" Body="&lt;p&gt;I believe you experienced a classic example of &lt;strong&gt;market segmentation&lt;/strong&gt;.  The hardware is most likely entirely capable of handling data as well as fax, but the firmware in the modem was limited by removing the data functionality.  The resulting modem is physically indistinguishable (except for markings) from a data modem but is sold at a lower cost to match its reduced capabilities.&lt;/p&gt;&#xA;&lt;p&gt;This situation arose because the market price for a full data modem was substantially above the manufacturing cost, but a large market also existed for fax products at the time.  Market segmentation by the above means permitted the manufacturer to maintain a high profit margin on data modems, while competing on price in the fax-modem market, without significantly complicating its manufacturing pipeline.&lt;/p&gt;&#xA;&lt;p&gt;Later on, with the rise of the Internet, it was necessary to compete on price in the data modem market as well as the fax market.  Hence the dedicated fax modem product category disappeared and combined fax/data modems became common, with the fax functionality being rarely used.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="439" LastEditDate="2020-07-01T13:37:17.283" LastActivityDate="2020-07-01T13:37:17.283" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15399" PostTypeId="2" ParentId="15183" CreationDate="2020-07-01T00:04:30.500" Score="3" Body="&lt;p&gt;It requires a slight wire / connector mod:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.co.uk/amp/s/oldcrap.org/2017/11/17/gotek-in-an-external-amiga-drive-closure/amp/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.google.co.uk/amp/s/oldcrap.org/2017/11/17/gotek-in-an-external-amiga-drive-closure/amp/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-07-01T00:04:30.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15400" PostTypeId="2" ParentId="15392" CreationDate="2020-07-01T00:10:04.583" Score="5" Body="&lt;p&gt;There are actually a few slightly different pieces of hardware involved. As a starting point though, note that for many years the price of a standalone fax machine, essentially a high-speed (for the time) modem, a 200 dpi scanner and a thermal (later inkjet or laser) printer was typically way below that of those 3 items purchased separately. On the other hand, those 3 items purchased separately could be used for many other things - much as the typical multifunction machines of today. In fact, many of the current MFC machines include fax capability &lt;em&gt;that never gets used by most people&lt;/em&gt;, because it is bundled with other features that users want. It is actually cheaper for a manufacturer to include a fax-modem in one of these boxes than to have to stock twice as many different boxes.&lt;/p&gt;&#xA;&lt;p&gt;Modems vary in speed and capability. Speed seems obvious, except that it isn't. Speed started at 110 bps with acoustic couplers and worked on up to 56 kpbs over the course of many years. Fax machines basically plateaued at 9600 bps, though some made it to 14.4 kbps.&lt;/p&gt;&#xA;&lt;p&gt;However, speed also includes compression of numerous varieties, which can make a &lt;strong&gt;huge&lt;/strong&gt; difference, particularly if that modem is being used to handle a room full of terminals (each of which separately might be OK with 2400 bps) or large downloads.&lt;/p&gt;&#xA;&lt;p&gt;But &lt;em&gt;capability&lt;/em&gt; varies too. The first modems were &lt;strong&gt;only&lt;/strong&gt; modems. Starting with (or at least the first one to hit it big) the Hayes Smartmodem, modems often included a CPU that could handle auto-dial, auto-answer, compression/decompression and many other things. Those same CPUs eventually could handle fax as well. Of course, then we had the curse of the so-called &lt;strong&gt;winmodem&lt;/strong&gt; - a modem without a real CPU, letting Windows (&lt;em&gt;that wonderful real-time system optimized for handling modem traffic where there is no room for delays...&lt;/em&gt;) do all the processing for the modem to save a few $.&lt;/p&gt;&#xA;&lt;p&gt;The really good fax modems went in the other direction - including sufficient memory and processing power on the board that the entire faxing process could be handled with very little host computer intervention. &lt;strong&gt;Those&lt;/strong&gt; fax modems were not cheap, and it would in fact be a waste to use those where an &lt;em&gt;ordinary&lt;/em&gt; modem would do.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, many later high-quality modems (my personal favorite was Multitech) could be used as a &amp;quot;regular&amp;quot; PC modem, as a fax modem or as a modem with proper hardware handshaking to work well at high speed with non-PC devices.&lt;/p&gt;&#xA;&lt;p&gt;One key issue on price of any consumer electronics device is &lt;strong&gt;volume&lt;/strong&gt;. For quite a while, fax &lt;strong&gt;machines&lt;/strong&gt; were produced in high volume as plug-and-play devices. That is quite different from stand-alone modems. Basically anyone could take a fax machine out of the box, plug one wire into power and another wire into a phone jack (and maybe move the phone that was in the jack to a second jack on the back of the fax machine) and &lt;strong&gt;done&lt;/strong&gt;. Then all you do is load a piece of paper, dial the number of another fax machine, and it starts sending. Utter simplicity.&lt;/p&gt;&#xA;&lt;p&gt;That is quite a different from PC modems. You had (typically) two choices:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Open up your computer, install a card, set COM/IRQ/etc., install software (which was from floppies), figure out where/what to connect to (BBS, AOL, Compuserve), and so on&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Get the right cable (until the IBM PC came along there were a &lt;strong&gt;lot&lt;/strong&gt; of different cables, and even afterwards there was 9-pin serial, 25-pin serial (but don't confuse it with 25-pin parallel, null-modem (which is the opposite of what you needed, but you might have one around from a printer, just to confuse things)), plug in the modem, configure your serial port (since it might not have been configured correctly originally - if you didn't have a modem it usually didn't matter), install software, etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Not a trivial task for the non-geek. Which meant fewer standalone modems were sold than fax machines, at least for regular consumer use, for quite a while.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2020-07-01T00:17:22.310" LastActivityDate="2020-07-01T00:17:22.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15401" PostTypeId="1" CreationDate="2020-07-01T00:10:29.047" Score="0" ViewCount="79" Body="&lt;p&gt;People in Apple Corporation make Quest game demo for WWDC in year 2010:&lt;/p&gt;&#xA;&lt;p&gt;• Game Design and Development for iPhone OS, Part 1 · Session 401&lt;/p&gt;&#xA;&lt;p&gt;• Game Design and Development for iPhone OS, Part 2 · Session 402&lt;/p&gt;&#xA;&lt;p&gt;Youtube video of play game: &lt;a href=&quot;https://www.youtube.com/watch?v=X4Ha-vhjrds&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=X4Ha-vhjrds&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What format they use for load models and animation for models? This before SceneKit.&lt;/p&gt;&#xA;&lt;p&gt;Link for video and PDF is here (but require Apple Developer Account for watch video):&#xA;&lt;a href=&quot;https://meta.stackoverflow.com/questions/387070/apple-has-just-unlisted-all-its-2010-2011-videos-what-now-for-the-broken-links&quot;&gt;https://meta.stackoverflow.com/questions/387070/apple-has-just-unlisted-all-its-2010-2011-videos-what-now-for-the-broken-links&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18369" LastActivityDate="2020-07-01T04:16:25.307" Title="WWDC2010 Game Demo, programmers use what format for 3D model and animation?" Tags="&lt;apple&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2020-07-01T05:55:43.133" ContentLicense="CC BY-SA 4.0" />
  <row Id="15402" PostTypeId="1" AcceptedAnswerId="15418" CreationDate="2020-07-01T03:34:19.077" Score="4" ViewCount="148" Body="&lt;p&gt;The Apple II disk bootstrap process looks at the first byte of track zero sector zero to see how many sectors long the bootstrap code will be. It then loads these sectors at location 0x0800 and jumps to address 0x0801, just after the &amp;quot;number of boot sectors&amp;quot; byte.&lt;/p&gt;&#xA;&lt;p&gt;Normally the number of boot sectors is 1, but some custom boot loaders use more. I've got a few disk images which say 5.&lt;/p&gt;&#xA;&lt;p&gt;So when there are multiple boot sectors, are they the first physical sectors, disregarding any sector interleave? Or should the interleave for the logical sectors of DOS 3.3 be used? (Surely ProDOS interleave would never be a factor?)&lt;/p&gt;&#xA;&lt;p&gt;When dealing with disk image files, the common .DSK format (aka .do and .po) have no header tell which sector ordering to use. They use either DOS 3.3 order or ProDOS order. They never use physical order. For OS disks you can look for OS structures at known offsets on the disk to determine the sector ordering. But some games don't use any OS disk structures.&lt;/p&gt;&#xA;&lt;p&gt;Which sectors did the Apple 2 load, and what should emulators and disk image utilities do?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I've found &lt;a href=&quot;https://groups.google.com/d/msg/comp.sys.apple2/sZmhFvLMyDI/u9YaQJ76BAAJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;some annotated disassembly of the boot process with commentary on Usenet &lt;code&gt;comp.sys.apple2&lt;/code&gt; from four years ago&lt;/a&gt;. So far it's difficult for me to understand not being an Apple II guy. I'll keep trying to grok it while waiting for somebody who knows this stuff to come along...&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-07-01T06:07:16.443" LastActivityDate="2020-07-01T15:47:33.340" Title="Determining which sectors in an Apple II floppy disk/image are used when the boot sector declares more than 1 sectors" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;&lt;boot&gt;&lt;disk-image&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15403" PostTypeId="2" ParentId="15401" CreationDate="2020-07-01T04:16:25.307" Score="1" Body="&lt;p&gt;Voted as per DrSheldon’s concern, as the primary API being demonstrates there is OpenGL ES 2.0, which is now long gone from iOS but had been introduced a year earlier with the 3GS and survives today on Android and on the web as WebGL 1.0.&lt;/p&gt;&#xA;&lt;p&gt;OpenGL is a low-level framework on top of which the programmer uses any file format they care to implement. In this case the speaker makes a big deal about projected lighting and character animation occurring on the GPU so you can be confident that they wrote their own engine for it, including the on-GPU code (which will have been in GLSL), especially given the quoted development time: two months with three programmers.&lt;/p&gt;&#xA;&lt;p&gt;Unity was available for the iPhone even before programmable GPUs, but has its usual limitations; the Unreal Engine and other commercial-strength middleware didn’t really arrive until later that year. SceneKit didn’t arrive on iOS for another four years.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-07-01T04:16:25.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15404" PostTypeId="1" AcceptedAnswerId="15432" CreationDate="2020-07-01T08:31:41.973" Score="0" ViewCount="341" Body="&lt;p&gt;&lt;strong&gt;Objective -&lt;/strong&gt; Play Mario game and record the score and position, and later map it to level map png (&lt;a href=&quot;https://nesmaps.com/maps/SuperMarioBrothers/SuperMarioBrosWorld1-1Map.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://nesmaps.com/maps/SuperMarioBrothers/SuperMarioBrosWorld1-1Map.html&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Method -&lt;/strong&gt; I can get the score, however figuring the position is tricky. In FCEUX I am watching few RAM registers (explained below) to extract the mario and screen position, when playing NES Super Mario Bros.&lt;/p&gt;&#xA;&lt;p&gt;Memory map - &lt;a href=&quot;https://datacrystal.romhacking.net/wiki/Super_Mario_Bros.:RAM_map&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://datacrystal.romhacking.net/wiki/Super_Mario_Bros.:RAM_map&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Relevant registers -&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0x006D  Player horizontal position in level&#xA;0x0086  Player x position on screen&#xA;0x071C  ScreenEdge X-Position, loads next screen when player past it?&#xA;0x071D  Player x position, moves screen position forward when this moves&#xA;0x0755  Player_Position For Scroll. It moves up to 0x70 (sometimes even 0x72) when player moves. When this register is frozen, NOTHING changes in the level, not even internally.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Current understanding -&lt;/strong&gt; It looks like the level is divided into sections (section number is given by 0x006D), however I'm not able to figure out how to calculate the &lt;code&gt;absolute left screen edge position&lt;/code&gt; and &lt;code&gt;absolute mario position&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="18638" LastEditorUserId="18638" LastEditDate="2020-07-01T12:36:59.197" LastActivityDate="2020-07-03T04:59:59.840" Title="Understanding Mario and screen position in &quot;NES-Super Mario Bros&quot;" Tags="&lt;nes&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15405" PostTypeId="1" AcceptedAnswerId="15414" CreationDate="2020-07-01T10:27:38.133" Score="2" ViewCount="395" Body="&lt;p&gt;I know most computer architecture store data in binary in drives/storage, but i'm unsure where in a computer (x86, etc) does the conversion/interpretation of binary (base2) to hexadecimal (base16) occur.&lt;/p&gt;&#xA;&lt;p&gt;Is it by the Cpu? Motherboard? or is it made by many components (including software running)?&lt;/p&gt;&#xA;&lt;p&gt;If so, which of those is the first to do that conversion/interpretation?&lt;/p&gt;&#xA;" OwnerUserId="18596" LastActivityDate="2020-07-01T15:42:33.730" Title="Which part of a computer does the conversion between binary to hexadecimal?" Tags="&lt;cpu&gt;&lt;data-general&gt;&lt;binary-translation&gt;" AnswerCount="4" CommentCount="13" ClosedDate="2020-07-01T14:31:31.847" ContentLicense="CC BY-SA 4.0" />
  <row Id="15406" PostTypeId="2" ParentId="15405" CreationDate="2020-07-01T10:46:50.413" Score="8" Body="&lt;p&gt;&lt;strong&gt;All modern computers use binary internally.&lt;/strong&gt; (And by modern, I mean since 1960 or thereabouts.)&lt;/p&gt;&#xA;&lt;p&gt;Hexadecimal (or octal, or decimal) are used only to make data more readable to humans. This conversion is normally done in software, converting e.g. a binary number to a string of ASCII characters that print as the hexadecimal representation of that number.&lt;/p&gt;&#xA;&lt;p&gt;Software is executed in the CPU, so if you really want to assign this function to a piece of hardware, the conversion &amp;quot;is done by the CPU&amp;quot;. There is, however, no dedicated part of the CPU for this; the CPU is just doing general arithmetic -- shifting bits, masking bits, adding something -- that gives the correct character value.&lt;/p&gt;&#xA;&lt;p&gt;Some early 8-bit single-board computers did in fact have dedicated hardware, ususally as part of or in connection with seven segment displays. E.g., the COSMAC ELF used HP 5082 seven-segment-displays with integrated hexadecimal decoders.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-07-01T15:42:33.730" LastActivityDate="2020-07-01T15:42:33.730" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15407" PostTypeId="2" ParentId="15405" CreationDate="2020-07-01T10:49:11.840" Score="4" Body="&lt;p&gt;Data does not generally need to be converted from binary to hexadecimal except in some cases where hexadecimal human-readable (ASCII) output or a specific file output format is needed.&lt;/p&gt;&#xA;&lt;p&gt;In most cases this would be done by software running on the CPU, but in very simple computers it can also be done by simple (logic) ICs connected a 7-segment display.&lt;/p&gt;&#xA;&lt;p&gt;It's a trivial task compared to binary-&amp;gt;decimal conversion.&lt;/p&gt;&#xA;" OwnerUserId="15545" LastActivityDate="2020-07-01T10:49:11.840" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15408" PostTypeId="1" AcceptedAnswerId="15425" CreationDate="2020-07-01T11:14:12.660" Score="4" ViewCount="1487" Body="&lt;p&gt;I was reading &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_numeral_systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Wikipedia entry&lt;/a&gt; and thought if any other Computer/or Architecture was ever made with a different base system than base16.&lt;/p&gt;&#xA;&lt;p&gt;And if not, any ways to do it? (maybe by making one from &lt;a href=&quot;https://www.instructables.com/id/How-to-Build-an-8-Bit-Computer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;scratch&lt;/a&gt; or reprogramming a specific Cpu?)&lt;/p&gt;&#xA;&lt;p&gt;(might be related to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15405/which-part-of-a-computer-does-the-conversion-between-binary-to-hexadecimal&quot;&gt;this&lt;/a&gt; question)&lt;/p&gt;&#xA;" OwnerUserId="18596" LastActivityDate="2020-07-02T07:58:15.483" Title="Any ways to have an architecture with a different base than base16?" Tags="&lt;architecture&gt;" AnswerCount="7" CommentCount="14" ClosedDate="2020-07-02T09:47:22.790" ContentLicense="CC BY-SA 4.0" />
  <row Id="15409" PostTypeId="2" ParentId="15408" CreationDate="2020-07-01T11:23:11.150" Score="21" Body="&lt;p&gt;Computers do not in general have &amp;quot;a base 16 architecture&amp;quot;.  They are binary, i.e., base 2.&lt;/p&gt;&#xA;&lt;p&gt;The base derives from the number of states a storage element can have. Almost exclusively, we use an electronic switch that can be &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot; -- 2 states, therefore base 2.&lt;/p&gt;&#xA;&lt;p&gt;You can find at least one example of a base 3 computer in history. There were several machines with a base 10 architecture using a device called a dekatron for storage.   But these days digital computers are always binary. The engineering is much simpler.&lt;/p&gt;&#xA;&lt;p&gt;As far as I am aware there was never a base 16 computer.&lt;/p&gt;&#xA;&lt;p&gt;Much computer software tends to display numerical values in base 16 because it's convenient for certain users. This is especially true if the word size is a multiple of 4 bits (4 bits holds 16 different values).  That is a long way from saying the computer has a base-16 architecture.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-07-01T11:23:11.150" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="15410" PostTypeId="2" ParentId="15408" CreationDate="2020-07-01T11:54:20.870" Score="16" Body="&lt;p&gt;Early in the history of computing, it wasn't uncommon to have machines that were physically designed to operate in base-10. (Even if signalling was internally on/off.) Designers of the time understood some of the issues associated with representing numbers in base-2 (particularly fractional numbers), software was very primitive, and having a base-10 internal representation had a number of advantages, early on.&lt;/p&gt;&#xA;&lt;p&gt;The ENIAC did this with decade counters that used a sequence of ten switching devices arranged in a ring to hold a single digit. A sequence of inbound pulses would cause the ring to successively select a different stage to be active, and the specific stage represented the number being stored. Signaling from one counter to another was done by sending an appropriate number of pulses down the wire - a 'three' was represented as three pulses out of a possible ten in the overall cycle. (These ring counters have their origins in pre-computing data gathering devices, which is probably why they were considered well enough known for the ENIAC - which was ultimately a conservative design.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ring_counter&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Ring_counter&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;UNIVAC and IBM's early 'business' (as opposed to 'science') computers were also all decimal based machines, albeit with more efficient implementation strategies. The IBM 650, among others, used Bi-quinary coded decimal. &lt;a href=&quot;https://en.wikipedia.org/wiki/Bi-quinary_coded_decimal&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Bi-quinary_coded_decimal&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Machines quickly pivoted over to fully binary designs, with the decimal arithmetic portion moving 'up' the stack, although even then, BCD support of various forms was common in instruction sets (including x86 - &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_BCD_opcode&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Intel_BCD_opcode&lt;/a&gt; )&lt;/p&gt;&#xA;&lt;p&gt;HP calculators also had extensive hardware level support for BCD arithmetic, including a base-10 mode in the ALU and registers divided into fields based on base-10 digits.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.hpmuseum.org/techcpu.htm&quot; rel=&quot;noreferrer&quot;&gt;https://www.hpmuseum.org/techcpu.htm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;More recently, Flash memory parts are moving away from two-levels per memory cell (1-bit-per-cell) to multiple bits per cell (with the implication that each cell is no longer binary, but rather base-4, -8, etc.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Multi-level_cell&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Multi-level_cell&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4522" LastEditorUserId="4522" LastEditDate="2020-07-01T13:04:34.650" LastActivityDate="2020-07-01T13:04:34.650" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15411" PostTypeId="2" ParentId="13141" CreationDate="2020-07-01T12:07:12.697" Score="1" Body="&lt;p&gt;The panoply of software titles needing LOAD &amp;quot;&amp;quot; CODE to be loaded, is centred around the early ZX Spectrum years, 1982-1984.&lt;/p&gt;&#xA;&lt;p&gt;While LOAD &amp;quot;&amp;quot; also exists in the ZX81, the technique seems to be a remnant of a wide practice of writing games in assembly together with system variables, for that machine.&lt;/p&gt;&#xA;&lt;p&gt;That allied with the platform being relatively knew, BASIC offering no intrinsic strong anti-tampering protections, and more advanced BASIC obfuscation techniques not being yet widely known, it might explain placing BASIC loaders in CODE blocks (together with LOAD&amp;quot;&amp;quot; not being yet a de facto standard).&lt;/p&gt;&#xA;&lt;p&gt;In addition, by loading tape CODE blocks, you can obfuscate somewhat where the execution point takes off. Once the code is loaded, you can continue BASIC execution:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;in the line buffer;&lt;/li&gt;&#xA;&lt;li&gt;in a BASIC line and position of your choice.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Furthermore, using a CODE block, you can play with variables, like (PROG) and change BASIC location or like ERR_SP, and the BASIC listing (if any), won't have a hint of where the machine code is being entered. Or you can even smash the machine code/CPU stack, and not even return to the BASIC interpreter, using the variable and BASIC area for storing machine code (eg using the address from 16384 as contiguous RAM, if the programmer knows what is doing).&lt;/p&gt;&#xA;&lt;p&gt;Also, saving as SAVE &amp;quot;&amp;quot; CODE seems to be used in some titles to hide the fact they are in fact, BASIC programs.&lt;/p&gt;&#xA;&lt;p&gt;By the time the 128K models start to be widespread used, they make it mandatory using a BASIC loader; they do not load automatically a starting LOAD &amp;quot;&amp;quot; CODE block.&lt;/p&gt;&#xA;&lt;p&gt;Taking the aforementioned &lt;a href=&quot;https://www.worldofspectrum.org//pub/sinclair/games/m/MeteorStorm.tzx.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;METEOR STORM&lt;/a&gt; as an example, that has one block of CODE from 23500 with a length of 8700 bytes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/WuStlGi.png&quot; alt=&quot;tape&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Once the LOAD &amp;quot;&amp;quot; CODE block is loaded from tape, and doing a breakpoint in ROM immediately after, you have got the following BASIC program:&lt;/p&gt;&#xA;&lt;p&gt;From (PROG)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 CLEAR 24900&#xA;11 PRINT &amp;quot;LOADING MACHINE FILE&amp;quot;&#xA;12 LOAD &amp;quot;&amp;quot;CODE &#xA;13 CLS &#xA;15 PRINT &amp;quot;METEOR STORM MASTER&amp;quot;&#xA;20 PRINT &#xA;25 PRINT &amp;quot; QUICKSILVA 1982&amp;quot;&#xA;30 PRINT :PRINT :PRINT &#xA;35 PRINT &amp;quot;INSERT BLANK CASSETTE&amp;quot;&#xA;40 SAVE &amp;quot;METEOR&amp;quot;CODE 23500,8700:LET L=USR 28000&#xA;100 SAVE &amp;quot;MET.MASTER&amp;quot;LINE 1&#xA;110 SAVE &amp;quot;MET.MFILE&amp;quot;CODE 25000,7200&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and in the line buffer (E_LINE) memory area:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LOAD &amp;quot;&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Analysing the rest of the ZX Spectrum system variables, relevant for this discussion:&lt;/p&gt;&#xA;&lt;p&gt;40    - (5C45) PPC    - Line number of statement being executed&lt;br /&gt;&#xA;01    - (5C47) SUBPPC - Number within line of statement being executed&lt;br /&gt;&#xA;24900 - (5CB2) RAMTOP - Address of last byte of BASIC system area&lt;/p&gt;&#xA;&lt;p&gt;There are no integer numbers obscuration, as in later titles, so we can take the ASCII BASIC listing at face value.&lt;/p&gt;&#xA;&lt;p&gt;For building the METEOR CODE block in tape, that we have today, the programmers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ran the BASIC code from LINE 100, saving to tape both the BASIC+the MC block;&lt;/li&gt;&#xA;&lt;li&gt;restarted the machine&lt;/li&gt;&#xA;&lt;li&gt;loaded the saved BASIC block from tape&lt;/li&gt;&#xA;&lt;li&gt;that in turn loaded the M/C block at line 12&lt;/li&gt;&#xA;&lt;li&gt;and then saved system variables+BASIC+machine code at the beginning of line 40&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;We can then see, confirmed by the values of the system variables, that the machine will return upon completion of LOAD &amp;quot;&amp;quot; CODE, to the instruction calling machine code at LET L=USR 28000 in line 40.&lt;/p&gt;&#xA;" OwnerUserId="519" LastEditorUserId="519" LastEditDate="2020-07-08T19:24:31.773" LastActivityDate="2020-07-08T19:24:31.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15412" PostTypeId="2" ParentId="15408" CreationDate="2020-07-01T12:28:14.587" Score="5" Body="&lt;p&gt;You have some good answers already but here is a specific example.  The first computer that I used, back in 1974, was not in any way a base 16 system.  The smallest addressable unit of memory was a 24 bit word.  Characters were stored using a 6 bit code (obviously not ASCII) four to a word.  These characters were not individually addressable but there were some bit operations to help e.g. rotate by 6 bits.  There was no similar special handling for 4 or 8 bits, these had no special significance.  Octal (base 8) played a similar role to hexadecimal today.  There was no particular architectural significance, it was just a convenient compact way to represent the bit values.&lt;/p&gt;&#xA;&lt;p&gt;Some more details here &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5587/help-identifying-a-very-old-computer-1974-maybe-an-ncr/6497#6497&quot;&gt;ICL 4120&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The next computer that I used was a Commodore PET and I was surprised by the byte structure and the use of hexadecimal.  Byte was a new word to me.&lt;/p&gt;&#xA;" OwnerUserId="7805" LastEditorUserId="7805" LastEditDate="2020-07-01T12:38:14.053" LastActivityDate="2020-07-01T12:38:14.053" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15413" PostTypeId="2" ParentId="9461" CreationDate="2020-07-01T12:31:33.240" Score="3" Body="&lt;p&gt;As mentioned, the PDP-11/03 was the first microprocessor-based model in the PDP-11 range.&#xA;In 1977, Heinz Lycklama wrote a paper describing LSI-UNIX (LSX for short)  'UNIX on a Microprocessor':&#xA;&lt;a href=&quot;https://www.heinzlycklama.com/docs/bstj57-6-2087.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.heinzlycklama.com/docs/bstj57-6-2087.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The LSX binaries were found and after a bit of surgery was able to be run:&#xA;&lt;a href=&quot;https://unixhistory.livejournal.com/6278.html?nojs=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://unixhistory.livejournal.com/6278.html?nojs=1&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can download the disk images and run it on simh nowadays. There was a video on Youtube a few years back of a PDP-11/03 with an RX01 booting LSX off two floppies, it was pretty slow.&lt;/p&gt;&#xA;" OwnerUserId="18639" LastEditorUserId="18639" LastEditDate="2020-07-01T12:39:35.290" LastActivityDate="2020-07-01T12:39:35.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15414" PostTypeId="2" ParentId="15405" CreationDate="2020-07-01T12:53:27.497" Score="7" Body="&lt;p&gt;The smallest unit in a modern computer is the &lt;em&gt;bit&lt;/em&gt;: it can either be 0 or 1, off or on, however you want to call its two states. That is: every modern computer works in base 2 (for integers; floating point numbers complicate things bu still use bits).&lt;/p&gt;&#xA;&lt;p&gt;But &lt;em&gt;displaying&lt;/em&gt; groups of bits to humans (even programmers) is tiresome, so some more convenient representations are chosen when showing those bit groups: the most common are base 8 (octal), base 10 (decimal) and base 16 (hexadecimal). Still, the computer does not know about hexadecimal, it's working with (groups of) bits. We call a processor's preferred group size of bits a &lt;em&gt;word&lt;/em&gt;. For example, a 16-bit CPU prefers to do most or all of its operations on groups of 16 bits; no more, no less.&lt;/p&gt;&#xA;&lt;p&gt;So the computer is working with base 2 numbers only. When you want to show the bit group to humans as a readable number, you need to format it. Which base you're using for the representation doesn't matter, this transformation from the internal value to a human-readable &lt;em&gt;text representation&lt;/em&gt; is always done by the processor (CPU). Even when you want to show just the bit groups (base 2), some transformation to a text needs to be done.&lt;/p&gt;&#xA;&lt;p&gt;To be more precise, this transformation from internal representation to text is done by &lt;em&gt;software&lt;/em&gt; running on the CPU.&lt;/p&gt;&#xA;&lt;p&gt;The mainboard/motherboard's function is to connect the CPU to all the input/output peripherals. Even though nowadays some parts of it do very complex operations/calculations, in the end it's not really taking part in the formatting of numbers other than providing a connection from the CPU to the graphics processor, which is going to display it, or some storage to save the representation.&lt;/p&gt;&#xA;&lt;p&gt;So the complete answer to your question: &lt;em&gt;&amp;quot;Which part of a computer does the conversion between binary and hexadecimal?&amp;quot;&lt;/em&gt; is: &lt;strong&gt;software running on the CPU&lt;/strong&gt;, creating a representation that is passed to the graphics processor (usually via the mainboard) so you can see it on screen.&lt;/p&gt;&#xA;" OwnerUserId="793" LastEditorUserId="793" LastEditDate="2020-07-01T13:01:02.847" LastActivityDate="2020-07-01T13:01:02.847" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15415" PostTypeId="2" ParentId="15405" CreationDate="2020-07-01T12:54:23.993" Score="4" Body="&lt;p&gt;Hexadecimal notation is not very significant to how computers work.  It is primarily just a convenient, compact way to represent the bits in a byte.  For example, if I wanted to specify the exact contents of a byte storing the ASCII code for A, I could give the binary: 01000001 but that takes a while to type and is hard to remember.  I could give the decimal value 65 but the conversion to and from binary is tricky for most humans (and gets worse if you are dealing with the bigger values of Unicode).  The advantage of hexadecimal is that it easy to convert to and from binary: just break the bits into groups of 4 starting from the right and convert each separately.  01000001 becomes 41 which is easier to type and remember.&lt;/p&gt;&#xA;&lt;p&gt;It is common to give the value of a byte (or larger section of memory) in hexadecimal but it does not really contain the hexadecimal any more than it contains the decimal number 65 or the letter A, it contains a bunch of bits.  The hexadecimal notation is just a convenient shorthand.&lt;/p&gt;&#xA;&lt;p&gt;The first computer that I used, an ICL 4120, used octal in place of hexadecimal since 6 bits had more significance that 8 (nothing special on that machine) and 6 bits can be neatly represented as two octal digits.  For this reason, some programming languages have support for octal notation.&lt;/p&gt;&#xA;" OwnerUserId="7805" LastActivityDate="2020-07-01T12:54:23.993" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15416" PostTypeId="2" ParentId="15392" CreationDate="2020-07-01T12:55:19.813" Score="21" Body="&lt;p&gt;I'll add a detail to the topmost answer.&lt;/p&gt;&#xA;&lt;p&gt;Data modems up to 2400bps used different frequency bands for transmit and receive.  But why?&lt;/p&gt;&#xA;&lt;p&gt;Look at your telephone wire. There are only two wires going between the modem and the wall, yet you must transmit and receive over the same wires.  With a telephone, some of the speaker's voice gets redirected to the earpiece, as they share a wire.  This is a benefit for humans - the &amp;quot;sidetone&amp;quot; provides confirmation that the phone is working.&lt;/p&gt;&#xA;&lt;p&gt;However, a modem wanting to do simultaneous bindirectional transmission has a problem: the sidetone from its own transmission is (partially) being reflected back into the receive path.  Somehow, this noise must be filtered out or separated.&lt;/p&gt;&#xA;&lt;p&gt;For speeds up to 2400bps, this is easy: use separate frequency bands, and then use a bandpass filter to weed out the transmit data from the received data.  However, this luxury is not available at higher speeds - you need to use the full 4kHz bandwidth of the phone line.&lt;/p&gt;&#xA;&lt;p&gt;A fax is (almost) unidirectional.  A fax modem has a 9600bps path in one direction, and a low speed (300bps) path in the opposite direction. They are band-separated, so a bandpass filter works here.  This is fine for faxing - the sender needs only to receive confirmation of receipt of each page from the receiver.&lt;/p&gt;&#xA;&lt;p&gt;Early USRobotics modems used the same scheme for data: a 9600bps fast path, and a slow return path.  For bidirectional communication, the modems would &amp;quot;turn around&amp;quot; and exchange the fast/slow roles.  This turnaround took time, as the receiving fast modem would need to retrain.&lt;/p&gt;&#xA;&lt;p&gt;Other modems took this further: the Telebit Trailblazer PEP protocol achieved 19200bps in its fast direction, and sub-300 in the slow direction.  It was popular among UUCP software users, as the modems spoofed the UUCP G protocol (which required a far more balanced transmit/receive ratio) to allow unhindered operation on the highly asymmetric channel.&lt;/p&gt;&#xA;&lt;p&gt;And then came V.32, with true bidirectional 9600bps, with transmit and receive using the full bandwidth of the phone line.  This came much later, as bandpass filtering was no longer possible. Instead, the modems had to do adaptive echo cancellation to subtract a time-shifted and attenuated version of the transmit signal from the receive signal. The DSP required to do this required much faster hardware, which is why these modems came later and were much more expensive.&lt;/p&gt;&#xA;" OwnerUserId="18640" LastActivityDate="2020-07-01T12:55:19.813" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15417" PostTypeId="2" ParentId="2556" CreationDate="2020-07-01T13:07:08.363" Score="3" Body="&lt;p&gt;How about the LSI-11/2 (PDP-11/03) that was released in 1975? These machines were in small cabinets you could put beside your desk (not the 6' tall H960 rack). And they were used in process control, science and other fields. It was also available OEM for inclusion into other equipment.&lt;/p&gt;&#xA;" OwnerUserId="18639" LastActivityDate="2020-07-01T13:07:08.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15418" PostTypeId="2" ParentId="15402" CreationDate="2020-07-01T15:47:33.340" Score="4" Body="&lt;p&gt;Emulators should emulate the Disk ][ hardware at a low level, or they're going to have a bad time.  Attempting to pull in the right set of sectors will work for standard DOS or ProDOS disks, but won't work for anything custom.&lt;/p&gt;&#xA;&lt;p&gt;You can find a commented disassembly of the boot ROM &lt;a href=&quot;https://6502disassembly.com/a2-rom/C600ROM.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and a &amp;quot;typical&amp;quot; T0/S0 &lt;a href=&quot;https://6502disassembly.com/a2-rom/BOOT1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  You'll note there's a sector interleave map at $084D in the latter, which translates physical sector numbers to logical.  This isn't needed to read T0/S0 because logical sector 0 is always physical sector 0, but it does limit what the boot ROM can do.&lt;/p&gt;&#xA;&lt;p&gt;The only parts of the BOOT1 (T0/S0) sector that are fixed are the sector count and the jump to $0801.  It's pretty rare to see something other than 1 at $0800; usually the BOOT1 code wants to do its own thing.  The important part is that BOOT1 can do whatever it feels like: it can use a standard interleave, it can read them in physical order, it can define its own scrambled version.  That's true even if it's using standard DOS sectors.&lt;/p&gt;&#xA;&lt;p&gt;I think what some emulators do is convert DOS tracks into nibble images internally, and then work off that (essentially .DO/.PO -&amp;gt; .NIB).  You don't need to get too fancy unless you want to support copy-protected images in .WOZ format.&lt;/p&gt;&#xA;&lt;p&gt;FWIW, &amp;quot;[images] never use physical order&amp;quot; isn't strictly true, as some versions of Copy ][+ created physical-order .IMG files.  These were rarely if ever used though.&lt;/p&gt;&#xA;&lt;p&gt;(For anyone else reading this, the gory details of logical/physical/DOS/ProDOS were explored in a &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/15056/56&quot;&gt;previous question&lt;/a&gt; by the OP.)&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2020-07-01T15:47:33.340" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15419" PostTypeId="2" ParentId="15392" CreationDate="2020-07-01T16:40:28.783" Score="3" Body="&lt;p&gt;By 1997 there were probably not any fax-only models for sale, you'd have to go back to closer to 1990. At that time, fax-only modems were cheaper, but not by a lot. Typically only $100 less than a combination fax/modem.&lt;/p&gt;&#xA;&lt;p&gt;Some boards that only provided fax capabilities, and were not usable as a data modem, were the Hayes JT Fax and Fremont FAX96 which cost around $199-299 USD at the time. Fax protocols are different from data, so the modem must support both to be able to use data and fax capabilities.&lt;/p&gt;&#xA;&lt;p&gt;There's also the additional software included to be able to view faxes, or save them to PC formatted graphics files, and to convert PC files to a medium that can be sent to another fax machine.&lt;/p&gt;&#xA;" OwnerUserId="18227" LastActivityDate="2020-07-01T16:40:28.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15420" PostTypeId="1" AcceptedAnswerId="15421" CreationDate="2020-07-01T16:47:12.770" Score="13" ViewCount="2246" Body="&lt;p&gt;Recalling the rise of 16bit era, an era that in my memories was defined mainly by Motorola 68k cpu computers: The Mac, brought the GUI interface. The A bomb, the Amiga, with its custom chips-coprocessors, colourful graphics, stereo sound, pre-emptive multitasking OS and probably other stuff which I forget. And also Atari ST. Well, it had midi ports embedded, making it successful among musicians. I also remember its crisp 70Hz 640x400 monochrome monitor, very easy on the eyes, paired with a nice, legible 8x16 font. But did it bring any novelty, like the aforementioned two (Amiga, Mac)?&lt;/p&gt;&#xA;&lt;p&gt;PS: I also remember IBM PC with its 8/16bit 8088 cpu as a lousy machine with only one nice feature: Its expansion slots!&lt;/p&gt;&#xA;" OwnerUserId="8057" LastEditorUserId="15334" LastEditDate="2021-03-05T12:36:22.307" LastActivityDate="2021-03-05T15:56:10.530" Title="What was novel about the Atari ST? Did it introduce any innovations?" Tags="&lt;history&gt;&lt;atari-st&gt;" AnswerCount="5" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15421" PostTypeId="2" ParentId="15420" CreationDate="2020-07-01T17:02:46.137" Score="25" Body="&lt;p&gt;As well as being the first colour Mac-like, the Atari ST was absurdly competitive on price, being the first mainstream 68000-based home computer. The Amiga wasn’t relaunched for the home market until 1987*. As a result it is the original home of a wealth of innovative game software — especially in Europe it was often the lead platform for games until the late ‘80s, and even after that it was usually the better platform for 3d titles.&lt;/p&gt;&#xA;&lt;p&gt;The Atari ST was available with 512kb RAM and the monochrome monitor for $800 in 1985. When it came out later that year, the Amiga had no monitor, 256kb of ram and cost $1,285; you were at very close to $1,600 with a colour monitor.&lt;/p&gt;&#xA;&lt;p&gt;The Atari ST was the first range to offer 1mb of RAM for less than $1,000, by a safe distance. You could buy one of Atari’s laser printers plus the ST, and DTP software for quite a bit less than Apple’s LaserWriter alone.&lt;/p&gt;&#xA;&lt;p&gt;Amongst the games software, Eye of the Beholder is commonly cited, as is Another World; nowadays people also tend to mention Alpha Waves, also labelling it the first 3d platformer.&lt;/p&gt;&#xA;&lt;p&gt;In terms of hardware, I guess the main forward-looking piece is the fully DMA’d implementation of SCSI that drew from a pre-standardisation version of the spec and is therefore usually called ACSI. The Mac wouldn’t gain any SCSI support until the Plus in 1986, and in that implementation it polls a status register then polls a byte, much like how other simple machines read floppy disks; I don’t think Apple ever added DMA drive access to a plain 68000 Mac, though models after the Plus did gain a blocking read so that you don’t have to spin on the status register.&lt;/p&gt;&#xA;&lt;p&gt;The ST’s DMA controller also drives the floppy disk which was a first for a home computer but I think the IBM PC and clones were already there in terms of machines that you could find in ordinary retail channels.&lt;/p&gt;&#xA;&lt;p&gt;* this claim has caused some comment controversy; see below. My claim is that the Amiga was originally launched as a professional machine, and an example contemporaneous source is &lt;a href=&quot;https://www.latimes.com/archives/la-xpm-1985-09-27-fi-18337-story.html&quot; rel=&quot;noreferrer&quot;&gt;The LA Times&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;... Commodore--which just began shipping the Amiga--will have to do better than Apple did with its Macintosh or IBM did with the PC in their first years on the market. The Amiga, which starts at $1,300, is intended to compete with more expensive personal computers such as those two.&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;p&gt;Because the Amiga, which has won praise from technical reviewers, is a more sophisticated and expensive machine than the more familiar Commodore 64 and the newer Commodore 128, the company isn’t peddling it through K mart and other discount or toy-store chains.&lt;/p&gt;&#xA;&lt;p&gt;Selling through specialty stores also serves to upgrade the company’s current image as a maker of cheap computers to play games on, which is the part of the computer market hit hardest during the industry’s current weakness.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-07-02T15:27:46.753" LastActivityDate="2020-07-02T15:27:46.753" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="15422" PostTypeId="2" ParentId="15404" CreationDate="2020-07-01T18:16:53.373" Score="0" Body="&lt;p&gt;I can't give you a direct answer, but you should look into Mesen (&lt;a href=&quot;https://www.mesen.ca/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mesen.ca/&lt;/a&gt;) and use the PPU viewer. The NES has 4 nametables, which are filled when not used, then read from when the screen &amp;quot;moves&amp;quot;.&#xA;You might be able to get an answer from this (or you might find this to become too complex as well, just as a little warning).&lt;/p&gt;&#xA;&lt;p&gt;The relative x/y positions can easily be tracked by the sprite position (see Sprite Viewer tab).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/V9fuH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V9fuH.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17920" LastActivityDate="2020-07-01T18:16:53.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15423" PostTypeId="2" ParentId="15420" CreationDate="2020-07-01T19:24:26.747" Score="2" Body="&lt;p&gt;The perception of 'new' is maybe an individual one as...&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Recalling the rise of 16bit era, defined mainly by Motorola 68k cpu computers&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;When ignoring the TI 99/4 (and PC (*1)) that is.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Mac, brought the GUI interface.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. It was already on sale since 1981 by &lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Star&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xerox&lt;/a&gt; (and others) (*2) as well as offered in form of the Apple Lisa, which wasn't so much more expensive as the mac. Consider that, at the time when the Mac came with a single drive and 128 KiB at 2500 USD, the Lisa 2/5 was sold with four times the memory (wich was pricey at the time), larger screen and 5 MiB hard disk for 5000 USD - dropping even further with the MacXL.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The A bomb,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The what?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;the Amiga, with its custom chips-coprocessors,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which is essentially just a souped (*3) up Atari 800 chipset (*4), so nothing basically new here (*5).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;colourful graphics,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;See Atari 800.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;stereo sound,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;See Apple II sound cards, like the &lt;a href=&quot;https://www.youtube.com/watch?v=Fw74ayuLp5o&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mockingboard A of 1983&lt;/a&gt; (*6).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;pre-emptive multitasking OS&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Many computers had that already decades before, not to mention MP/M for standard S100 boxes. Oh, and for the home computer segment for sure the Sinclair QL, did beat the Amiga not only by time but in quality as well (*7).&lt;/p&gt;&#xA;&lt;p&gt;Having that out of the way, the Amiga OS did in fact set a true first by being the first &lt;strong&gt;Multimedia&lt;/strong&gt; OS outside research (*8). Amiga OS did not only allow to play multimedia, but moved it from a special (application) mode into a generic feature with seamless integration, and right into mainstream. A feature others, like Windows, BeOS or MacOS, only gained more than a decade later.&lt;/p&gt;&#xA;&lt;p&gt;That's a first that'll stand the test of time.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and probably other stuff which I forget.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'd have a hard time to come up with any other.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And also Atari ST. Well, it had midi ports embedded, making it successful among musicians. I also remember its crisp 70Hz 640x400 monochrome monitor, very easy for the eyes, paired with a nice, legible 8x16 font. But did it bring any novelty, like the aformentioned two (Amiga, Mac)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now, if you consider any of the above parts (GUI, Graphics) as new, then the Atari's screen mode was for sure revolutionary. While such screens were known with professional system, it was a first on the &amp;quot;affordable&amp;quot; price segment.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;I'd say, the 'new' in the all examples mentioned is the affordable part. Scaling existing features to enable a mass market.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;PS: I also remember IBM PC with its 8/16bit 8088 cpu as a lousy machine with only one nice feature: Its expansion slots!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A feature IBM copied from the Apple II - which can be considered in many details the blueprint for big blue's PC :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Yes, the 8088 is for all context a 16 bit system. Bus width is about the least significant factor, or would you consider a 68030 working on an 8 bit bus (which it can without additional logic by simply tying DTACK0/1) an 8 bit CPU? The 8088 is a smart choice, as it's only 25-30% slower than a 8086 at the same speed, but saving on components.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Sold in considerable numbers as 8010 since 1981, as well as several thousand by Siemens as EMS 5800 since 1982. Heck, there is even one to be see &lt;a href=&quot;https://www.youtube.com/watch?v=rf2Jv2VfIqE&amp;amp;feature=youtu.be&amp;amp;t=842&quot; rel=&quot;nofollow noreferrer&quot;&gt;within Commodore's Amiga department&lt;/a&gt;- the large screen in the corner.&lt;/p&gt;&#xA;&lt;p&gt;*3 - After all it was designed by the same team as the preceding Atari chipset - and intended to become an Atari machine.&lt;/p&gt;&#xA;&lt;p&gt;*4 - &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_8-bit_family#Design&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANTIC, C/GTIA and POKEY&lt;/a&gt; became &lt;a href=&quot;https://en.wikipedia.org/wiki/Original_Chip_Set#Overview_of_chips&quot; rel=&quot;nofollow noreferrer&quot;&gt;Angus, Denise and Paula&lt;/a&gt;, maintaining essentially the same organisation of&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DMA/Address Ggeneration (ANTIC/Agnus)&lt;/li&gt;&#xA;&lt;li&gt;Video generation (GTIA/Denise)&lt;/li&gt;&#xA;&lt;li&gt;Audio/Joysticks/Serial and other I/O (POKEY/Paula)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;*5 - In fact, there were tricks the Atari Chipset could do (at lower resloution), impossible for the Amiga - like anything charset related.&lt;/p&gt;&#xA;&lt;p&gt;*6 - The board used/shown is a 1:1 modern replica. only difference is a standard stereo connector.&lt;/p&gt;&#xA;&lt;p&gt;*7 - Using multitasking on the Amiga was comparable clumsy and error prone, while the QL could do it with a few lines in BASIC.&lt;/p&gt;&#xA;&lt;p&gt;*8 -That is outside specific applications, supported by add on hardware. All the elements from DMA for video generation all the way to Genlock have been made as early as the first &lt;a href=&quot;https://en.wikipedia.org/wiki/Cromemco_Dazzler&quot; rel=&quot;nofollow noreferrer&quot;&gt;bitmap video cards for micros&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-03T14:35:23.597" LastActivityDate="2020-07-03T14:35:23.597" CommentCount="28" ContentLicense="CC BY-SA 4.0" />
  <row Id="15424" PostTypeId="2" ParentId="15408" CreationDate="2020-07-01T20:34:23.253" Score="1" Body="&lt;p&gt;The question has already been answered by people saying that modern computers are based on groups of binary digits, bits, that assume two values 0/1, but they only appear hexadecimal if you choose to use hexadecimal notation. if you choose to group bits inpackets of three you might use octal. it is nicest if your word size is a multiple of the number of bits in your numeric base representation, but this isn’t required: Eg PDP-11’s with 16 bit words usually used three bit octal notation. Nevertheless, this is all binary related.&lt;/p&gt;&#xA;&lt;p&gt;But there’s more:&lt;/p&gt;&#xA;&lt;p&gt;For example, much arithmetic hardware uses binary power of 2 weights, but has values like -1//0/+1 that cannot be represented in a single bit. More advanced multipliers and dividers use larger powers of 2, like 4 or 8, with larger digit sets. but, again, underneath it all the things are at least some power of two based, even if the digit sets are not.&lt;/p&gt;&#xA;&lt;p&gt;Perhaps more relevant is that it used to be quite common to have decimal computers: computers whose basic operations worked on digits whose weights are powers of 10. Nowadays such decimal arithmetic is usually expressed in terms of groups of four binary bits; but in the very old days you might use gears that had 10 teeth or positions, or vacuum tubes that had five or ten operating states, and which therefore are truly not binary based, neither powers of two nor  of eight nor of 16.&lt;/p&gt;&#xA;" OwnerUserId="11516" LastActivityDate="2020-07-01T20:34:23.253" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15425" PostTypeId="2" ParentId="15408" CreationDate="2020-07-01T21:10:00.083" Score="10" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;Computers operate not in Base 16 (Hex) but Base 2 (Binary). Hex is only used as a convenient way for us humans to handle binary.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Any ways to have an architecture with a different base than base16?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I don't know any operating in base 16. Today essentially all computers operate base 2. In the olde times (tm) there were many base 10 and a few base 3 machines.&lt;/p&gt;&#xA;&lt;p&gt;The only &lt;em&gt;partitial&lt;/em&gt; system operating in base 16 is the floating point format used by IBM's /360 mainframe family. The /360 follow up systems are kind of an oddity about that (*1). But then again, this is only how the values are handeled. In storage they are again binary. The only other base still supported by many CPU is decimal (base 10), but as well only for operation, as storage is as well binary (4 bit per decimal number).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I was reading this &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_numeral_systems&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia entry&lt;/a&gt; &lt;em&gt;[about numeral systems]&lt;/em&gt; and thought if any other Computer/or Architecture was ever made with a different base system than base16.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Beside, there was never one, the Wiky entry also doesn't claim such to ever existed. It only stats that Base 16 (aka Hexa/Sedecimal) is used as &lt;em&gt;&amp;quot;compact notation for binary data&amp;quot;&lt;/em&gt;. Much the same way as it states for octal.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Thinking of it, do you maybe mixup presentation of binary data to a computer user with the number system used?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Base 8 or base 16 are, much the same way as base 10, used to make binary readable to average users. It's simply handy for us to operate with a 4 digit hex number instead of 16 binary digits - isn't it?&lt;/p&gt;&#xA;&lt;p&gt;Which number system us used or human representation depends not on the CPU, but convention. Octal comes traditionally from classic machines with word sizes being a multiple of 3, while hex is originated in IBM's /360 series, as it was the first machine to widely use multiples of 4 as word size (BCD/Nibble, Byte, Halfword, Word, Doubleword)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And if not, any ways to do it? (maybe by making one from scratch or reprogramming a specific Cpu?)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As said, (today's) computers do not operate in base 16, but base 2. Their data is only displayed to us humans as base 16. But yes, a computer can be made operating on units in any base you want. Except, it will make the machine more complicated and more expensive.&lt;/p&gt;&#xA;&lt;p&gt;Binary is not only most simple system, as there is no other with less elements, it als fits quite well the way electronics work. Systems to a power of two (base 4/8/16/32/...) would fit as well, with only a minimal overhead, but bring no advantage to base 2. Any other system will end in much more complex hardware and lower performance.&lt;/p&gt;&#xA;&lt;p&gt;But why doing it at all? The data can be converted anyway. So the most sensible step is to use the most basic format, and convert it later to anything the user wants.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(might be related to this question)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's not really a good idea to repeat questions with essentially the same content that have been rejected before.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Amdahl's (he headed that development) decision was based on the fact that the /360 ISA was already build around a datapath to handle 4 bit values for BCD - which was very important back then and still is today for accounting - so it doing hex based float did not only come at a lower price tag than binary, but also benefited from all improvement made to sped up BCD.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-07-01T21:10:00.083" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15426" PostTypeId="2" ParentId="9411" CreationDate="2020-07-01T23:02:12.557" Score="1" Body="&lt;p&gt;I have a scanner large enough, a penchant for archival related things, and a colocated server I could throw up a site on without a second thought, given I doubt the number of people that would be interested in this would be very high.&lt;/p&gt;&#xA;" OwnerUserId="18647" LastActivityDate="2020-07-01T23:02:12.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15427" PostTypeId="2" ParentId="15408" CreationDate="2020-07-02T01:44:04.070" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;And if not, any ways to do it? (maybe by making one from scratch or reprogramming a specific Cpu?)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes—the easiest approach generally being a &lt;a href=&quot;https://en.wikipedia.org/wiki/Field-programmable_gate_array&quot; rel=&quot;nofollow noreferrer&quot;&gt;FPGA.&lt;/a&gt; These are like a programmable digital circuit, one level down&lt;sup&gt;*&lt;/sup&gt; from a CPU, and can be &amp;quot;rewired&amp;quot; just by downloading a circuit layout description onto them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;*arguably&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Obviously an FPGA has lots of overheads compared to a custom-made chip (known as an &lt;a href=&quot;https://lxp32.github.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASIC&lt;/a&gt;.) You can only fit a fraction of the number of gates on them, they are slower, etc. but they can &lt;em&gt;easily&lt;/em&gt; reproduce 8 and 16-bit CPUs of the '80s and '90s. As long as you have the CPU layouts... which we often don't, but check out &lt;a href=&quot;http://www.visual6502.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visual 6502&lt;/a&gt; and the &lt;a href=&quot;http://www.aholme.co.uk/6502/Main.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Verilog code&lt;/a&gt; that was then made for FPGA.&lt;/p&gt;&#xA;&lt;p&gt;There are various open source CPU architectures today designed specifically for FPGA (or at least with FPGA as an option), like &lt;a href=&quot;https://lxp32.github.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;LXP32&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/RISC-V&quot; rel=&quot;nofollow noreferrer&quot;&gt;RISC-V&lt;/a&gt;. So in principle you could either adapt one or create your own.&lt;/p&gt;&#xA;&lt;p&gt;You could implement a ternary (base 3) CPU if you wanted. However, the transistors and gates making up the FPGA are still boolean logic (base 2). Theoretically it would be possible to design 3 or more valued logic. Unlike FPGA, that's probably not something you could do in your basement.&lt;/p&gt;&#xA;" OwnerUserId="647" LastActivityDate="2020-07-02T01:44:04.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15428" PostTypeId="1" CreationDate="2020-07-02T03:16:29.117" Score="1" ViewCount="101" Body="&lt;p&gt;When formatting a blank 5¼ disk on an 8-bit Apple II using the &lt;code&gt;INIT&lt;/code&gt; command, was there only ever one variation of the boot sector code that was written, or was it updated from time to time over the years?&lt;/p&gt;&#xA;&lt;p&gt;I'm interested in identifying all the standard boot sectors apart from any customized ones so if there were more than one standard variation I'd like to find a list of the changes from version to version.&lt;/p&gt;&#xA;&lt;p&gt;For the purposes of this question I'm not asking about ProDOS or 3½ inch disks. For now I'm only asking about the first sector of the first track, not other sectors that are written to during the &lt;code&gt;INIT&lt;/code&gt; process. Also I'm aware that some bytes such as the volume ID probably change from disk to disk.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-07-02T04:13:04.710" LastActivityDate="2020-07-02T05:35:07.213" Title="How many different standard boot sectors are there for Apple II DOS 3.3?" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;&lt;boot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15430" PostTypeId="2" ParentId="15428" CreationDate="2020-07-02T05:35:07.213" Score="3" Body="&lt;p&gt;This is a little tricky to answer, because only about 30% of a DOS 3.3 boot sector is actually boot code.  The BOOT0 ROM has everything needed to read a sector from track 0, so &lt;a href=&quot;https://6502disassembly.com/a2-rom/BOOT1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;BOOT1&lt;/a&gt; (T0/S0) just needs to call it with physical sector numbers and buffer addresses to load the full RWTS.&lt;/p&gt;&#xA;&lt;p&gt;The DOS &lt;code&gt;INIT&lt;/code&gt; command needs a T0/S0 image handy when formatting a disk, so the boot sector lives in memory at $B600.  Software expands to fill all available space, so the unused area is occupied by patches to other parts of DOS.&lt;/p&gt;&#xA;&lt;p&gt;It's reasonable to expect that you'd find different boot sector images on the various &amp;quot;enhanced&amp;quot; DOS disks.  So a list might include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Vanilla (DOS 3.3 system master)&lt;/li&gt;&#xA;&lt;li&gt;Diversi-DOS&lt;/li&gt;&#xA;&lt;li&gt;Pronto-DOS&lt;/li&gt;&#xA;&lt;li&gt;Hyper-DOS&lt;/li&gt;&#xA;&lt;li&gt;David-DOS&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_DOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia&lt;/a&gt;, there were two releases of Vanilla DOS 3.3.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2020-07-02T05:35:07.213" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15431" PostTypeId="2" ParentId="15408" CreationDate="2020-07-02T07:58:15.483" Score="1" Body="&lt;p&gt;There have been &lt;a href=&quot;https://en.wikipedia.org/wiki/Setun&quot; rel=&quot;nofollow noreferrer&quot;&gt;ternary&lt;/a&gt; computers.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.iota.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;IOTA&lt;/a&gt; uses ternary as &lt;a href=&quot;https://www.reddit.com/r/Iota/comments/987gfb/lets_talk_about_trinary_ternary_and_iota/&quot; rel=&quot;nofollow noreferrer&quot;&gt;commented on here&lt;/a&gt; and there is &lt;a href=&quot;https://medium.com/@iotasuppoter/iota-the-hardware-part-a6100b5bb4d5&quot; rel=&quot;nofollow noreferrer&quot;&gt;alleged hardware support&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16249" LastActivityDate="2020-07-02T07:58:15.483" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15432" PostTypeId="2" ParentId="15404" CreationDate="2020-07-02T08:18:56.637" Score="0" Body="&lt;p&gt;I logged the values of various registers while playing game and arrived at the following equations -&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Absolute player position = (value at 0x006D * 256) + value at 0x0086  &#xA;&#xA;Absolute left edge position = (value at 0x071A * 256) + value at 0x071C&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0x006D  Current screen (in which the player is currently in, increase or decrease depending on player's position)&#xA;0x0086  Player x position on screen&#xA;0x071A  Current screen (in level, always increasing)&#xA;0x071C  ScreenEdge X-Position&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18638" LastEditorUserId="18638" LastEditDate="2020-07-03T04:59:59.840" LastActivityDate="2020-07-03T04:59:59.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15433" PostTypeId="2" ParentId="15420" CreationDate="2020-07-02T14:10:44.913" Score="9" Body="&lt;p&gt;Tommy's answer mentioned it just &amp;quot;en passant&amp;quot;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;You could buy one of Atari’s laser printers plus the ST, and DTP software for quite a bit less than Apple’s LaserWriter alone.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;but that was indeed one innovation that was brought by the Atari: bare laser printer without own rendering controller, using the computer to replace it. A technique that came much, much later in the Windows world with the so called &amp;quot;GDI Lasere Technology&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;This allowed to sell the laser printer for significantly less than the competition.&lt;/p&gt;&#xA;&lt;p&gt;================&lt;/p&gt;&#xA;&lt;p&gt;Atari also pioneered CD-ROM with the CDAR-504, earlier than most other. It flopped, because the market was not ready yet, but it is one of the first to have.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="576" LastEditDate="2021-03-05T15:56:10.530" LastActivityDate="2021-03-05T15:56:10.530" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15434" PostTypeId="1" CreationDate="2020-07-02T16:54:39.783" Score="1" ViewCount="125" Body="&lt;p&gt;I have an old Apple IIe CRT monitor which could use a small horizontal width adjustment.  Unfortunately, as I try to rotate the hex key in the coil with a CRT adjustment tool, it doesn't want to move.  Is this a common problem that's fixable?&lt;/p&gt;&#xA;&lt;p&gt;I think I can dig up a replacement coil from another broken CRT board if I must, but, of course, I'd rather not resort to unnecessary surgery.&lt;/p&gt;&#xA;&lt;p&gt;That also begets another question:  Are these inductors pretty standard across old CRTs?  I see that you can buy replacements for arcade CRTs, so I wondered if such a replacement may work as well in an Applie IIe.  I suspect it's just a matter of matching coil width and number of windings roughly to ensure compatibility.&lt;/p&gt;&#xA;" OwnerUserId="18652" LastEditorUserId="3290" LastEditDate="2020-07-02T23:11:48.330" LastActivityDate="2020-07-02T23:11:48.330" Title="Frozen horizontal width coil in old CRT monitor" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;crt-monitor&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15435" PostTypeId="1" CreationDate="2020-07-02T20:30:43.237" Score="11" ViewCount="2874" Body="&lt;p&gt;Once every decade I get the itch to boot up a Windows 1.0 environment to poke around at it and marvel at how far we've come. However, in any of the environments I've seen (say &lt;a href=&quot;https://www.pcjs.org/&quot; rel=&quot;noreferrer&quot;&gt;PCjs&lt;/a&gt;), they never seem to have anything other than the default applications which came with Windows (e.g. WRITE.EXE, CALC.EXE, etc.)&lt;/p&gt;&#xA;&lt;p&gt;I've tried using Google to find old Windows 1.0 applications, but what you end up with is simply version 1.0's of applications written for Windows, not applications written &lt;strong&gt;for&lt;/strong&gt; Windows 1.0.&lt;/p&gt;&#xA;&lt;p&gt;So that being said, is anyone aware of a repository of software designed for this ancient version of Windows? Even Windows 2.0 (whether 286 or 386 versions) would probably suffice.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2020-07-03T16:44:48.857" Title="Where can I find software that was designed for Windows 1.0?" Tags="&lt;windows&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15436" PostTypeId="2" ParentId="15435" CreationDate="2020-07-02T20:53:45.630" Score="17" Body="&lt;p&gt;David Simunič maintains a &lt;a href=&quot;https://win1.krnl386.com/&quot; rel=&quot;noreferrer&quot;&gt;website&lt;/a&gt; dedicated to Windows 1.0, which includes lists of &lt;a href=&quot;https://win1.krnl386.com/software/thirdparty.html&quot; rel=&quot;noreferrer&quot;&gt;third-party software&lt;/a&gt; for it. I don't believe he hosts the software itself, but knowing the names of packages may make it easier to track them down.&lt;/p&gt;&#xA;&lt;p&gt;The only software from the list that I've personally installed and used is Micrografx In*a*Vision.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2020-07-02T20:53:45.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15437" PostTypeId="2" ParentId="15435" CreationDate="2020-07-02T20:58:56.990" Score="13" Body="&lt;p&gt;&lt;a href=&quot;https://archive.org&quot; rel=&quot;noreferrer&quot;&gt;Internet Archive&lt;/a&gt; holds a repository of retrocomputing software, some runnable in browser emulations.  Searching for &lt;a href=&quot;https://archive.org/search.php?query=%22windows%202.0%22&amp;amp;and%5B%5D=mediatype%3A%22software%22&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;Windows 2.0&amp;quot;&lt;/a&gt; and &lt;a href=&quot;https://archive.org/search.php?query=%22windows%201.0%22&amp;amp;and%5B%5D=mediatype%3A%22software%22&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;Windows 1.0&amp;quot;&lt;/a&gt; software yields some hits for applications, including CD-ROMs of shareware collections.&lt;/p&gt;&#xA;&lt;p&gt;(The keyword search is imprecise and also locates software for later versions of Windows, but you may find some surprises.)&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="4222" LastEditDate="2020-07-03T05:53:33.517" LastActivityDate="2020-07-03T05:53:33.517" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15439" PostTypeId="2" ParentId="15292" CreationDate="2020-07-03T05:18:06.033" Score="2" Body="&lt;p&gt;Answer to update on top:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;While my angle is to create my own computer using TTL chips&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I am looking at 6502 block diagrams, at PDP-8 ISA and schematics, as the 4004 and TMS-1000.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Then you are looking in the wrong place. You should be looking at bit-slice computers that made use of those 74xxx TTL chips, like the Alto, the PDP-11, the Data General Nova, or many more.&lt;/p&gt;&#xA;&lt;p&gt;Internal IC designs are restricted by very different rules compared to designs using 74xxx chips.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And I more and more reach a hypothesis that what the designers of old did was not by accident but because they pretty much mapped the space of what is possible.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Of course they did.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;That's why I keep asking if there isn't some fundamental law here?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There's no &amp;quot;general law&amp;quot;, but bit-slice designs using the 74181 ALU all follow a similar pattern: A bunch of ALU chips, a MUX in front of the ALU inputs, a bunch of register chips, a ROM for microcode, some counter chips as microcode PC, some control unit to execute the microcode.&lt;/p&gt;&#xA;&lt;p&gt;And they don't aim to be &amp;quot;minimal&amp;quot;, or &amp;quot;4 bit&amp;quot;. If you want 16 bits, just use 4 ALUs. Which many of those designs did. Or a single ALU, and serial processing (which may actually be more complicated).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The issue with many of the answers is this: they are theoretical and way out of the box.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because &amp;quot;what is the simplest CPU&amp;quot; is the wrong question. The only answer you'll get to that are &amp;quot;theoretical&amp;quot; CPUs that are very simple, but impractical, and don't fit the 74xxx approach.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So, for example, the Turing machine was known for a very long time, when tape was en vogue, yet nobody had marketed a Turing machine. Because it is just not practically useful!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Exactly. It's a theoretical answer to &amp;quot;what is the simplest computing model&amp;quot;. The question you were originally asking.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;I want to design a CPU with 74xxx chips&amp;quot; is a very different question. And it's not hard to do such a design. Just play around and do it. Simulators for 74xxx chips exist, you don't even have to wire it up, or try to find a source for 74xxx chips.&lt;/p&gt;&#xA;&lt;p&gt;And if you drop your artificial &amp;quot;but I want it to be minimal, and I want a general law for it&amp;quot; requirement, start out with something that &lt;strong&gt;works&lt;/strong&gt;, and then think about ways to reduce chip count, and may even end up with a fairly minimal system.&lt;/p&gt;&#xA;&lt;p&gt;The only way to gain experience about how to design such a system is to design one. Or two. Or three.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;And to add two examples for fairly minimal systems (which still use quite a few TTL chips):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;http://www.bradrodriguez.com/papers/piscedu2.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;PISC&lt;/a&gt; (&amp;quot;Pathetic Instruction Set Computer&amp;quot;) uses 22 TTL chips. 4x 74181 for a 16-bit ALU, 8x 74172 for eight 16-bit dual-port registers, and a programmable status latch and a 4-way multiplexer for the carry input, plus RAM and ROM. Very simple microcode of only 16 bits.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Homemade &lt;a href=&quot;https://apollo181.wixsite.com/apollo181/cpu-4-bit-architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apollo 181&lt;/a&gt; CPU, with one accumulator, 16 4-bit registers (or, if you want, data storage), 256 8-bit words of program storage, and a reduced microcode decoder by using several opcodes for what would be normally different microcode stages for a single opcode. Still needs a few dozen TLL chips, looking at the &lt;a href=&quot;https://apollo181.wixsite.com/apollo181/index&quot; rel=&quot;nofollow noreferrer&quot;&gt;board&lt;/a&gt;. About the level of complexity of an Intel 4004 system (you could probably implement a pocket calculator with that).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-07-05T09:23:19.680" LastActivityDate="2020-07-05T09:23:19.680" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15440" PostTypeId="2" ParentId="15376" CreationDate="2020-07-03T08:06:13.573" Score="5" Body="&lt;p&gt;On &lt;a href=&quot;https://wikipedia.org/wiki/BESM-6&quot; rel=&quot;noreferrer&quot;&gt;BESM-6&lt;/a&gt; the ALU/FPU interrupts (overflow, division by zero) were inexact, thus it was impossible to recover and continue, but it was possible to handle them with a mechanism akin to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Setjmp.h&quot; rel=&quot;noreferrer&quot;&gt;setjmp/longjmp&lt;/a&gt; capability in the C language, where the &amp;quot;setjmp&amp;quot; equivalent was &lt;code&gt;IFOVFL(DUMMY)&lt;/code&gt;, returning 0 at setup, and 1 on exception, and the &amp;quot;longjmp&amp;quot; was triggered by an arithmetic exception.&lt;/p&gt;&#xA;&lt;p&gt;Here's how it worked (emulator printout):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;F O R E X   ИПM AH CCCP           BEPCИЯ  2.02 OT  15.07.80&#xA;&#xA;             1       A = 1.0                                                                       1&#xA;             2       I = 0                                                                         2&#xA;             3       IF (IFOVFL(0).EQ.1) GOTO 10                                                   3&#xA;             4   20  A=A+A                                                                         4&#xA;             5       I=I+1                                                                         5&#xA;             6       GOTO 20                                                                       6&#xA;             7   10  PRINT 1,I                                                                     7&#xA;             8    1  FORMAT(I6)                                                                    8&#xA;             9       END                                                                           9&#xA;&#xA;       *NO LOAD LIST&#xA;       *EXECUTE&#xA;62&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The maximum value of the exponent field was 63, and the value of 1.0 was represented as 0.5*2&lt;sup&gt;1&lt;/sup&gt;, therefore the max. representable power of 2 was 2&lt;sup&gt;62&lt;/sup&gt;, as the printed value indicates.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-07-03T08:06:13.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15441" PostTypeId="2" ParentId="6009" CreationDate="2020-07-03T12:37:17.103" Score="1" Body="&lt;p&gt;The best option is an &amp;quot;Indivision ECS V2&amp;quot;, a scan doubler with flicker fixer that also adds new screen modes usable in workbench friendly applications and games.&#xA;SHOP: &lt;a href=&quot;https://icomp.de/shop-icomp/en/shop/product/Flickerfixer_Scandoubler.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://icomp.de/shop-icomp/en/shop/product/Flickerfixer_Scandoubler.html&lt;/a&gt;&#xA;INFO: &lt;a href=&quot;http://wiki.icomp.de/wiki/Indivision_ECS_V2&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.icomp.de/wiki/Indivision_ECS_V2&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18655" LastEditorUserId="11446" LastEditDate="2020-07-03T13:05:16.413" LastActivityDate="2020-07-03T13:05:16.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15442" PostTypeId="2" ParentId="15420" CreationDate="2020-07-03T12:40:28.933" Score="3" Body="&lt;p&gt;The sad thing for me is that the ST's blitter chip didn't make it in time to be included on mass production as part of the base spec.&lt;/p&gt;&#xA;&lt;p&gt;I was fortunate to visit Atari during the early ST years and saw the blitter chip running on a prototype system.&lt;/p&gt;&#xA;&lt;p&gt;If they had included it from the start it would have been a very capable system at a price point that was unbeatable.&lt;/p&gt;&#xA;" OwnerUserId="18656" LastActivityDate="2020-07-03T12:40:28.933" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15443" PostTypeId="1" CreationDate="2020-07-03T13:55:45.373" Score="19" ViewCount="4426" Body="&lt;p&gt;BBC Micro model B has 32k memory. An average book, like Mary Shelley's &lt;em&gt;Frankenstein&lt;/em&gt;, has about 350,000 characters in it. So you'd need over 10 times the memory to load it in, plus the software to edit it.&lt;/p&gt;&#xA;&lt;p&gt;If people wanted to use a BBC Micro era computer to write a novel, how did they go about doing it?&lt;/p&gt;&#xA;&lt;p&gt;Would it be a case of maxing out the expandable memory? The wikipedia article for the BBC Micro suggests it could support quite a large number of expansions, presumably if they are 32kb you would need around 10 to load the entire novel plus the software.&lt;/p&gt;&#xA;&lt;p&gt;Or did word processing software use say, a floppy disk as a way to store the novel and load portions of it into memory? It looks like disks could be around 200kb for the micro, so multiple disks might work (plus, you'd need to store the novel offline anyway).&lt;/p&gt;&#xA;&lt;p&gt;Or perhaps there was some kind of clever compression that would let you get more out of the memory?&lt;/p&gt;&#xA;" OwnerUserId="3558" LastActivityDate="2020-07-06T22:30:55.787" Title="Was it possible to write a novel on a BBC Micro 16kb/32kb memory era computer without expansions?" Tags="&lt;memory&gt;&lt;bbc-micro&gt;" AnswerCount="11" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15444" PostTypeId="2" ParentId="15443" CreationDate="2020-07-03T14:01:03.693" Score="42" Body="&lt;p&gt;You just made a file for each chapter, like sensible people do with current word processing!&lt;/p&gt;&#xA;&lt;p&gt;It is very unusual to write something lengthy in a single document.&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2020-07-03T14:01:03.693" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="15445" PostTypeId="2" ParentId="15443" CreationDate="2020-07-03T14:05:11.173" Score="9" Body="&lt;p&gt;Since you're asking not (just) about the BBC Micro, but about computers of that era in general: More sophisticated word processors like WordStar, running on CP/M, were able to &lt;a href=&quot;https://books.google.de/books?id=0Yei7rPaT4kC&amp;amp;pg=PA258&amp;amp;lpg=PA258&amp;amp;dq=maximum%20text%20size%20cp/m%20wordstar&amp;amp;source=bl&amp;amp;ots=HNfLI9wnHU&amp;amp;sig=ACfU3U2i-xWNUXZogi7iLGjVrkstW3SdQg&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=2ahUKEwjpv62Mn7HqAhWCtYsKHRD-D-IQ6AEwDHoECCoQAQ#v=onepage&amp;amp;q=maximum%20text%20size%20cp%2Fm%20wordstar&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;swap both code and text between RAM and disk&lt;/a&gt;, letting the user edit lengthy documents in the typical 64k of early-80s CP/M systems. This would, of course, be slow, and profit greatly from more RAM.&lt;/p&gt;&#xA;&lt;p&gt;Nonetheless, as Brian wrote, you'd break down longer texts into separate files. This would continue for long after; MS Word had a special function for that until at least Word 97.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-07-03T14:05:11.173" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15447" PostTypeId="1" CreationDate="2020-07-03T14:33:57.470" Score="2" ViewCount="164" Body="&lt;p&gt;I would like to take a compact Mac such like Macintosh SE, completely neglect the computing part of it, but be able to feed the CRT tube with an external video feed through Analog RCA cables. (Yellow connector) Black and white for me is fine and no sound is fine. I just want these old screens to play my video, no matter if the resolution is 640x480. Can it easily be done by feeding the 'vidout' pin on the motherboard? Thanks for any help. (I have no electronics skills, so your guidance will be appreciated!)&lt;/p&gt;&#xA;" OwnerUserId="18658" LastActivityDate="2020-07-05T12:15:14.513" Title="Can I rewire a compact Macintosh SE or other compact Mac to play RCA Video?" Tags="&lt;hardware&gt;&lt;display&gt;&lt;new-hardware-adaptation&gt;&lt;s-video&gt;&lt;composite-video&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15448" PostTypeId="2" ParentId="15443" CreationDate="2020-07-03T14:38:15.377" Score="4" Body="&lt;p&gt;This answer is not specific to the BBC Micro, but is generally illustrative of editing technology on systems where document size is likely to exceed available memory.  I'd allege that prior to virtual-memory systems, this style was the norm, since there was &amp;quot;never&amp;quot; as much memory as you needed.&lt;/p&gt;&#xA;&lt;p&gt;I've edited fairly lengthy programs on a system where the core available to the editor (the 'amender') was only a handful or words larger than one disk block, as I recall 640 words or 3840 characters; this had to hold the input version of the file and the output version at the same time.&lt;/p&gt;&#xA;&lt;p&gt;You can imagine two separate buffers for input and output, but space was tight.  So the input text would be at the top of the buffer and the output at the bottom. You edit the text sequentially, a line at a time. As you proceed through the file, lines are transferred from the one to the other.&lt;/p&gt;&#xA;&lt;p&gt;When you navigate off the end of the current input, the output is written out and the next block of input is read in.&lt;/p&gt;&#xA;&lt;p&gt;There are of course complications in the amender for inserting more text than you've got space for, and perhaps if lines span block boundaries (I forget whether the latter was allowed, maybe there were no partial lines in blocks). But the user did not need to deal with it.&lt;/p&gt;&#xA;&lt;p&gt;If you needed to 'go backwards' in the file then this can be accomplished by writing the rest of the output and starting again with that as the new input file.&lt;/p&gt;&#xA;&lt;p&gt;So, with one simple restriction -- forward motion only -- you can edit in practically no memory at all (by modern standards).&lt;/p&gt;&#xA;&lt;p&gt;A slightly more flexible editing arrangement puts the 'chunk' control into the hands of the user.  Some amount of text is read into the available buffer space. The user can edit randomly within the buffer. When he's done with that buffer-full, he can move on to the next. This is sequential through the file, but randomly within a single buffer.&lt;/p&gt;&#xA;&lt;p&gt;The venerable TECO, on many DEC systems, used this approach.&lt;/p&gt;&#xA;&lt;p&gt;As usual, you can quickly accommodate working styles to the technological limits of the available tools. All of this was better than using a card punch.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-07-03T14:38:15.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15449" PostTypeId="2" ParentId="15443" CreationDate="2020-07-03T14:39:32.187" Score="6" Body="&lt;p&gt;Computer Concepts (now part of &lt;a href=&quot;https://www.xara.com/&quot; rel=&quot;noreferrer&quot;&gt;Xara&lt;/a&gt;) produced &lt;a href=&quot;http://www.computinghistory.org.uk/det/21302/Wordwise-Plus/&quot; rel=&quot;noreferrer&quot;&gt;Wordwise Plus&lt;/a&gt; in 1984 on a 16 K EPROM. It allowed a document to use the entire space on an attached disk drive as virtual memory.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-07-03T14:39:32.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15450" PostTypeId="2" ParentId="15443" CreationDate="2020-07-03T14:51:10.770" Score="24" Body="&lt;p&gt;It was common to install word processing software as a ROM into one of the spare &amp;quot;sideways ROM&amp;quot; sockets on the BBC Micro, in the same way as the DFS ROM needed to operate a floppy drive.  WordWise and Inter-Word were two popular options.  This left more RAM available for text than if the software were loaded into RAM from tape or disk; typically enough to write a chapter in.&lt;/p&gt;&#xA;&lt;p&gt;From late 1984, WordWise Plus gained the ability to use a floppy disk as backing storage for editing a larger document.  It also allowed having multiple documents open at once.  This would effectively remove any practical limitation on the size of an individual chapter.  However, the size of the document would still be limited to the capacity of one side of a floppy disk.&lt;/p&gt;&#xA;&lt;p&gt;It was reasonably common to fit twin double-sided 80-track floppy drives to a BBC Micro, and these would collectively have enough capacity for a full novel, divided into a file per chapter.  Also, the twin drives could be used to make backups.&lt;/p&gt;&#xA;&lt;p&gt;Text compression algorithms were not in common use on 8-bit micros.  About a 3:1 compression ratio could be expected from running DEFLATE on typical English text.  However, DEFLATE was not invented until approximately 1990 (Katz' patent is dated 1991) and ran on a contemporary DOS PC.  Before then, less effective algorithms such as LZW and basic Huffmann were available.  On an 8-bit CPU, compression algorithms would have been slow and rather memory-hungry, and thus not obviously worthwhile for a word-processing application.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-07-03T14:58:40.600" LastActivityDate="2020-07-03T14:58:40.600" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15451" PostTypeId="2" ParentId="15443" CreationDate="2020-07-03T14:51:19.870" Score="13" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;BBC Micro model B has 32k memory. An average book, like Mary Shelley's Frankenstein, has about 350,000 characters in it. So you'd need over 10 times the memory to load it in, plus the software to edit it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;True, but only if you insist on having all text at all time in RAM.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If people wanted to use a BBC Micro era computer to write a novel, how did they go about doing it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Using a text editor and following whatever concept it offered:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The most simple would be splitting int into chapters. One is never really working on the whole book. It requires saving changes each time changing a section and loading another. The size would much depend on memory and book type.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Of course on a bare BBC, the only media would be cassette, so saving and loading is rather slow and cumbersome. Investing in a floppy does help a lot to speed up, which brings the next method:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Some editors did offer fast switching between sections and&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;others offered a kind of virtual memory system by loading only the part of the document shown right now (plus maybe some screens before and after). Think of it like a window into the text which is not in main memory, but at a second level storage. Text size was now only limited by media size.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some even combined both, allowing to split a text in sections residing on different drives/floppies and only loading a part of either.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Would it be a case of maxing out the expandable memory?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;More relevant than main memory might be the disk size. After all, it is of no help if one could edit a 300 KiB text, but only 200 could be stored to floppy&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or did word processing software use say, a floppy disk as a way to store the novel and load portions of it into memory? It looks like disks could be around 200kb for the micro, so multiple disks might work (plus, you'd need to store the novel offline anyway).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Exactly that is what 'better' editors offered.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or perhaps there was some kind of clever compression that would let you get more out of the memory?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A few did go that way, but savings aren't as great as one might think. Processors were slow, thus only simple algorithms could be used, ending up with maybe 25% saved, thus not offering much gain. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Z-machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zork-Engine&lt;/a&gt; is a great example about what could be done back then.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Back then many people did use their machines for serious word processing. All the way from letters to whole books. I remember one guy writing his thesis on a CPC 464 using &lt;em&gt;cassette&lt;/em&gt; storage. So yes, they were used in any imaginable way. Today's ease of Libre Ofice and alike makes us forget that there was a time when it took dedication and skills beyond the topic to write a paper.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-05T11:01:35.473" LastActivityDate="2020-07-05T11:01:35.473" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15452" PostTypeId="1" AcceptedAnswerId="15453" CreationDate="2020-07-03T15:07:20.113" Score="6" ViewCount="758" Body="&lt;p&gt;Building my own emulator. I only have the basic , no memory management, model going (11/20?). I started with caps11. What’s my best choice for a disk based os.&lt;/p&gt;&#xA;&lt;p&gt;EDIT: and of course if anybody has the source code that would be awesome. In no way could I have got this far without the caps11 source from Lou Ernst&lt;/p&gt;&#xA;" OwnerUserId="18533" LastEditorUserId="3290" LastEditDate="2020-07-04T02:18:17.090" LastActivityDate="2020-07-04T18:48:07.940" Title="What’s the most advanced os I can run on a non memory management pdp11 (ie 11/20)" Tags="&lt;operating-system&gt;&lt;pdp-11&gt;" AnswerCount="4" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="15453" PostTypeId="2" ParentId="15452" CreationDate="2020-07-03T15:19:03.610" Score="9" Body="&lt;p&gt;RSTS-11 (not RSTS/E) ran on the 11/20.  It offered multiuser timesharing in BASIC.  I think that in addition to the base 11/20 hardware, you needed a clock.  You needed to max out the memory (28 Kwords).&lt;/p&gt;&#xA;&lt;p&gt;V4 was the last RSTS-11 release before it became RSTS/E.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp11/rsts/V04/DEC-11-ORSMA-B-D_RSTSmgr_73.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;System manager's manual for RSTS-11&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I have not checked to see if there are software kits available.&lt;/p&gt;&#xA;&lt;p&gt;For a single user disk system, I'd suggest RT-11.  You might need a relatively older version for a very small system, I don't know.&lt;/p&gt;&#xA;&lt;p&gt;You can definitely run RSX-11M unmapped (i.e., no memory management), but I don't know whether it supports the 11/20. My experience was with an 11/40.  If you try, I'd suggest V3.1; as I recall 11M got a little fatter after that, at least when running mapped.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, configuring an unmapped 11M system is not something I'd recommend to the raw beginner. Better to get familiar with 11M on a larger system first. The unmapped system requires determining during sysgen the physical addresses at which tasks will be loaded.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-07-04T18:48:07.940" LastActivityDate="2020-07-04T18:48:07.940" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15454" PostTypeId="1" CreationDate="2020-07-03T15:28:07.187" Score="14" ViewCount="1104" Body="&lt;p&gt;My first computer was a VC20. Was it just renamed (for the German market?) as a VolksComputer?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XVlTb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XVlTb.jpg&quot; alt=&quot;original VC20 box&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(I am a Finn and the VC was bought in Finland). Or were there any actual differences to VIC-20?&lt;/p&gt;&#xA;" OwnerUserId="18422" LastEditorUserId="3290" LastEditDate="2020-07-07T14:00:01.840" LastActivityDate="2020-07-07T14:00:01.840" Title="VIC-20 vs. VC20 (or VC-20)" Tags="&lt;vic-20&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15455" PostTypeId="2" ParentId="15392" CreationDate="2020-07-03T15:38:58.273" Score="0" Body="&lt;p&gt;Later devices were cheaper because they had fewer parts because they were pc cards whose functions are implemented by the host.&lt;/p&gt;&#xA;&lt;p&gt;Another way to put this is: later devices were cheaper because they are only pieces of the whole device; the functions provided by those missing pieces are provided by the computer that the pc card is installed in.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://kb.iu.edu/d/aepb&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://kb.iu.edu/d/aepb&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Faxmodems are highly dependent on their drivers. My guess is that you could not get connected to your BBS because something was mis-configured and/or incompatible.&lt;/p&gt;&#xA;" OwnerUserId="18659" LastActivityDate="2020-07-03T15:38:58.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15456" PostTypeId="2" ParentId="15452" CreationDate="2020-07-03T15:43:08.490" Score="7" Body="&lt;p&gt;Manchester MUSS ran on a PDP11/10, but I can't offer a working PDP11 image for it at the moment as it is lost in passage of time....&lt;/p&gt;&#xA;&lt;p&gt;It would have been able to do its own memory management and swap, multitasking etc.&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2020-07-03T15:43:08.490" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15457" PostTypeId="2" ParentId="15435" CreationDate="2020-07-03T16:44:48.857" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://winworldpc.com/home&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://winworldpc.com/home&lt;/a&gt;&#xA;this website has a lot of old software on it, there is some for Windows 1.0.&lt;/p&gt;&#xA;" OwnerUserId="10459" LastActivityDate="2020-07-03T16:44:48.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15458" PostTypeId="2" ParentId="15454" CreationDate="2020-07-03T16:45:11.973" Score="5" Body="&lt;p&gt;It was just renamed — the hardware was identical to other PAL machines being primarily a 6502, a 6561 (the PAL version of the 6560) and a small amount of static RAM.&lt;/p&gt;&#xA;&lt;p&gt;The C-1540 was similarly rebranded as the VC-1540 in Germany, and the C-1541, which is just a ROM swap of the 1540, was originally the VC-1541.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-07-03T16:45:11.973" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15459" PostTypeId="2" ParentId="15454" CreationDate="2020-07-03T16:57:29.327" Score="4" Body="&lt;p&gt;It was renamed in Germany as VIC pronounced in German is a nasty nasty word. In English it would be written with F a U and a CK.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="7095" LastEditDate="2020-07-07T06:36:24.000" LastActivityDate="2020-07-07T06:36:24.000" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15460" PostTypeId="1" AcceptedAnswerId="15466" CreationDate="2020-07-03T17:07:34.243" Score="1" ViewCount="75" Body="&lt;p&gt;what was the part number or model of the original keyboard shipped with &lt;a href=&quot;https://www.cnet.com/products/ibm-pc-350-6586-dt-pentium-133-mhz-16-mb-1-2-gb/&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM PC 350&lt;/a&gt;?&lt;/p&gt;&#xA;&lt;p&gt;Trying to restore the full set.&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-07-03T22:09:42.390" Title="Part number / model for IBM PC 350 keyboard" Tags="&lt;ibm-pc&gt;&lt;keyboards&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15461" PostTypeId="2" ParentId="15447" CreationDate="2020-07-03T18:13:42.373" Score="6" Body="&lt;p&gt;No, for many reasons.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The yellow connector that you are talking about is called &lt;a href=&quot;https://en.wikipedia.org/wiki/Composite_video&quot; rel=&quot;nofollow noreferrer&quot;&gt;composite video&lt;/a&gt;.  It's called &amp;quot;composite&amp;quot; because it combines several signals: vertical synchronization, horizontal synchronization, blanking, luminance (the black-white part), and chrominance (the color part).  No model of Macintosh bothered to combine these signals, only to immediately uncombine them; instead, the signals directly went to the high-voltage CRT driver circuitry.  So &lt;em&gt;the Mac has no circuitry to decode composite video&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The compact Macs were monochrome, so the chrominance of a composite signal would be meaningless.&lt;/li&gt;&#xA;&lt;li&gt;All of the compact Macs had 342 lines that were progressively scanned.  It is incompatible with the North American NTSC video format, which had 483 visible scan lines in an interlaced format.  It is also incompatible with the European PAL video format, which has 576 visible scan lines, either interlaced or progressive.  Either way, &lt;em&gt;the Mac monitor does not have the correct number of lines for either video format&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I suppose someone who designs video circuitry for a living could salvage the CRT from the Mac and build some circuitry to drive the CRT using composite signals.  But this is not at all a project for an amateur, and you would be better off using a CRT designed for composite video instead.&lt;/p&gt;&#xA;&lt;p&gt;In addition, do NOT open the case of a compact Macintosh, as it has high voltages that can kill you if you do not know what you are doing.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;One option that a few people have done is to take out all of the insides of a compact Mac, and replace them with a modern computer, as is shown &lt;a href=&quot;https://www.instructables.com/id/Upgrade-your-original-1984-Macintosh-to-run-OS-X-S/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  If you are going to do that, please use a &lt;em&gt;dead&lt;/em&gt; Macintosh.  The thought of a perfectly good Mac being gutted this way makes me cry.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2020-07-05T12:15:14.513" LastActivityDate="2020-07-05T12:15:14.513" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15462" PostTypeId="2" ParentId="13686" CreationDate="2020-07-03T18:44:19.910" Score="2" Body="&lt;p&gt;One method that hasn't been mentioned is writing to a safe memory buffer with the pop hl, jp (hl) call. For example if I know there is space at $4000 (ZX Spectrum screen memory) but I don't where my program has been loaded I can:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ld hl,$e9e1    ; pop hl jp (hl) combination&#xA;ld ($4000),hl&#xA;call $4000&#xA;&#xA;; hl will now be the loaded address of this next instruction&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18660" LastActivityDate="2020-07-03T18:44:19.910" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15463" PostTypeId="2" ParentId="15443" CreationDate="2020-07-03T19:09:54.833" Score="5" Body="&lt;p&gt;The first novel written on a microcomputer was probably Jerry Pournelle's portion of &lt;em&gt;Oath of Fealty&lt;/em&gt; (cowritten with Larry Niven). At the time, Pournelle did most of his work on a Cromemco Z-2 with 64KiB RAM and CP/M (the machine is described in more detail in &lt;a href=&quot;https://archive.org/stream/byte-magazine-1980-07/1980_07_BYTE_05-07_Computers_and_Education#page/n199/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;Pournelle's column in the July 1980 issue of Byte&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;It's not much of a stretch to imagine that similar work could have been performed using a BBC B - it may only have half the RAM, but it has both OS and (optionally) a word processor in ROM, substantially reducing the amount of RAM that would be unavailable to store text, so the largest editable document would probably be about 75% or so of the size that Pournelle's system would have been able to handle.&lt;/p&gt;&#xA;&lt;p&gt;The main problem would be convenient storage - the largest disk commonly used with the BBC (80-track 5 1/4&amp;quot;) held 400KiB total, which is slightly less than the typical size of a novel (somewhere between 600KiB and 800KiB), so during editing you'd likely have to swap disks quite frequently. It's not clear what capacity drives Pournelle used, but there were larger formats available, so he may well have not had this problem.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-07-03T19:09:54.833" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15464" PostTypeId="2" ParentId="15454" CreationDate="2020-07-03T19:17:26.993" Score="18" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;VIC-20 vs VC20 (or VC-20)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In all original documents only VC20. Often stylised with the C as the commodore logo &amp;quot;C=&amp;quot;. The intended naming was always &lt;em&gt;Commodore&amp;lt;space&amp;gt;VC20&lt;/em&gt;, like written on the machine as well (*1).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My 1st computer was a VC20. Anone knows if it was just renamed (for German market?) as a VolksComputer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The most told story is that VIC &lt;em&gt;can&lt;/em&gt; be pronounced in German close to 'Fick' which would be 'a fuck'. So they decided to change it. But despite searching since back then, I couldn't find any reliable source to prove it. Also, I know noone who would mix this up, not even an adolescent trying really hard. More important here, German uses, unlike English, a lot of inflections so a remote similarity of the base word will not transform as well in real usage. So using 'Fick' in German isn't as universal and simple as in (US) English. 'Fick Computer' for example simply doesn't make any sense.&lt;/p&gt;&#xA;&lt;p&gt;A supporting argument often made is that it would be pronounced that way in some regions like Bavaria. Being from Bavaria, I can not validate this. While we do pronounce &lt;em&gt;some&lt;/em&gt; words spelled with 'V' different than lets say northerners, it's still different from the F sound in most cases all over Germany.&lt;/p&gt;&#xA;&lt;p&gt;So in my opinion it's an urban myth made up afterwards - don't we all 'know' how puritan, bigot and outright weird Americans are when it comes to bodily functions? That's a great base for a myth to work with :)&lt;/p&gt;&#xA;&lt;p&gt;A more believable story goes that they simply came up with the idea to sell it as a computer for everyone. Volkscomputer has a great ring to German ears. Just compare Volkswagen, Volksfest, Volkshochschule, Volkslied, Volksstadion and many other well known names starting with Volk*. Using that name was a once in a life time chance to place the computer right in everyone's mind as established and positive.&lt;/p&gt;&#xA;&lt;p&gt;How hard Commodore tried to position them self close to Volkswagen shows this add for a programming challenge in 1982 (*2):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Y5kGR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y5kGR.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;While not able to right out claim similarity to Volkswagen they simply did a challenge for VC20 programmers with a VW convertible as price, so they could put it in their add. This add was run for several month not only in next to every computer magazine but as well non computer papers.&lt;/p&gt;&#xA;&lt;p&gt;Pure genius. It may have been the greatest branding in that decade (at least). Whoever made it should be named #1 post war advertizer.&lt;/p&gt;&#xA;&lt;p&gt;At that point it's also noteworthy that it was neither advertized nor sold as Volkscomputer 20 which would be the case if VC20 is an abbrevation, but as &lt;a href=&quot;https://www.computermuseum-ebenthal.at/commodore-vc-20/&quot; rel=&quot;nofollow noreferrer&quot;&gt;VC20 - Volkscomputer&lt;/a&gt; on packageing, &lt;a href=&quot;https://www.mingos-commodorepage.com/sammlung/lektuere_detail.php?id=58&quot; rel=&quot;nofollow noreferrer&quot;&gt;manuals&lt;/a&gt; and &lt;a href=&quot;https://www.c64-wiki.de/wiki/Datei:VC20_Schreibmaschinenkurs_OVP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;add on packaging&lt;/a&gt; or hyphenated as &lt;a href=&quot;https://retroport.de/retro-kult-quelle-katalog/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Volks-Computer&amp;quot;&lt;/a&gt;. Booktiltes were like &lt;em&gt;Lerne Basic mit dem Volkscomputer VC20&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Volkscomputer&amp;quot; was as well used with the C64, at least early on. After all, why giving up such a great label?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or were there were any actual differences to VIC-20?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, or more correct, none beside being a PAL machine.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Similar the C64 was never called so in original documentation, but always &lt;em&gt;Commodore&amp;lt;space&amp;gt;64&lt;/em&gt; - as well like written on the machine itself.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Taken from the pages of &lt;a href=&quot;http://www.wernerkracht.com/TextContent/Sequencer%20Story.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Werner Kracht&lt;/a&gt;, who did win the VW with a music sequencer - and sold it right the next day to buy a professional tape deck for recording.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-07T11:25:24.497" LastActivityDate="2020-07-07T11:25:24.497" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="15465" PostTypeId="2" ParentId="15420" CreationDate="2020-07-03T19:47:26.223" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The A bomb, the Amiga, with its custom chips-coprocessors, colourful&#xA;graphics, stereo sound, pre-emptive multitasking OS and probably other&#xA;stuff which I forget.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I've never heard Amiga being called the &amp;quot;A bomb&amp;quot;, especially as both the Atari and Mac would display bombs as error messages with Atari even showing mushroom clouds in the very early version of TOS ;-) The Amiga with her Guru Meditation is probably the last computer that should be called &amp;quot;A bomb&amp;quot;...&lt;/p&gt;&#xA;&lt;p&gt;Colourful graphics and stereo sound are not an innovation, both are just an evolution of previous computers. The flexibility of the graphic and sound system was a strength, although the first was present in Jay Miner's previous work, the Atari 8-bit computers. The Amiga also wasn't the first computer with a preemptive multitasking os.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And also Atari ST. Well, it had midi ports embedded, making it&#xA;successful among musicians. I also remember its crisp 70Hz 640x400&#xA;monochrome monitor, very easy on the eyes, paired with a nice, legible&#xA;8x16 font. But did it bring any novelty, like the aforementioned two&#xA;(Amiga, Mac)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Both MIDI ports and the mono display were innovative and were seen as such in the 80's. There were external MIDI interfaces for other computers but including them as standard and having a flicker free display created a whole MIDI ecosystem. MIDI was also used for the 16 player deathmatch first person shooter MIDI Maze.&lt;/p&gt;&#xA;&lt;p&gt;I don't think it's helpful to always ask which computer &amp;quot;did it first&amp;quot;. Neither of the 68k machines appeared out of thin air. Bringing certain features to the masses (multitasking, midi etc.) is a novelty in itself.&lt;/p&gt;&#xA;" OwnerUserId="5224" LastActivityDate="2020-07-03T19:47:26.223" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15466" PostTypeId="2" ParentId="15460" CreationDate="2020-07-03T22:09:42.390" Score="3" Body="&lt;p&gt;Per the &lt;a href=&quot;https://psref.lenovo.com/syspool/Sys/PDF/withdrawnbook/dwbook.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Personal Systems Reference IBM PC 1994 to 2000&lt;/a&gt; (PDF) it appears the default was the Standard 101 keyboard (rubber dome) with optional upgrade to an Enhanced 101 key (Model M) or Enhanced 101 key with TrackPoint II (Model M13) up until the Pentium 60 model, with only the Standard 101 rubber dome after that until it was replaced with the Standard 104 rubber dome on the Pentium 133 models and later.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cUdCO.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cUdCO.jpg&quot; alt=&quot;Snippet from IBM spec sheet.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;IBM Standard 104 Keyboard pictured below.  The 101 Key model appears very similar, minus the windows keys.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XrKVN.jpg&quot; alt=&quot;IBM Standard 104 Keyboard (rubber dome) pictured with a IBM 300PL.3&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="320" LastActivityDate="2020-07-03T22:09:42.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15467" PostTypeId="2" ParentId="15443" CreationDate="2020-07-03T22:36:15.447" Score="8" Body="&lt;p&gt;Stephen Fry &lt;a href=&quot;https://stephenfry.com/2009/09/emerging-into-the-light/&quot; rel=&quot;noreferrer&quot;&gt;describes here&lt;/a&gt; how he wrote a book on the BBC Micro, saving on cassette:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In 1982 I bought a BBC Acorn for £399. It came complete with a firmware programme called Wordwise which I adored and which, in my fond memory, was the best word processor ever. I used it to write the book (ie story and dialogue) of a stage musical, saving on cassette tape as I went along and finally outputting to a daisywheel printer. The show was enough of a hit to allow me to indulge my passion for computer gadgetry for the rest of my life.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(the BBC Acorn for £399 being the BBC model B)&lt;/p&gt;&#xA;&lt;p&gt;It should be remembered that documents would still be exchanged (with the publisher etc) largely on paper, so the fact they had to be split up into multiple files on the computer was no problem - you simply collated all your printout pages and bound them together.  If the publisher also had an electronic system for editing they could deal with the split files in the same way you did.&lt;/p&gt;&#xA;&lt;p&gt;Eventually it got collated at press time, but in 1982 there was little computer typesetting so at some point in the process your manuscript got turned into printed form (the 'camera ready') and then photographed by the printing house for duplication.&lt;/p&gt;&#xA;&lt;p&gt;There was no sharing of the finished version in electronic format (PDF, etc) where it needed to be all together electronically.  Paper was king.&lt;/p&gt;&#xA;" OwnerUserId="7762" LastActivityDate="2020-07-03T22:36:15.447" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15469" PostTypeId="2" ParentId="15447" CreationDate="2020-07-04T02:40:24.100" Score="6" Body="&lt;p&gt;No.  The Mac SE vertical and horizontal scan frequencies (designed into both the CRT yoke and the analog sweep generator circuits) are different from NTSC (and PAL) composite timing.  And the Mac SE analog board requires separate vertical and horizontal sync inputs, not just a video signal.  The analog board sync inputs need to be at TTL voltage levels, which is also different from composite video.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2020-07-04T02:46:20.093" LastActivityDate="2020-07-04T02:46:20.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15470" PostTypeId="2" ParentId="15452" CreationDate="2020-07-04T08:59:11.887" Score="3" Body="&lt;p&gt;My primary experience on a PDP-11 class machine was using Forth.  We were using it for high-end (at the time) image processing and display algorithms.  The advantage is that it is very compact and quick.  If you need quicker, you can write &amp;quot;words&amp;quot; (that's Forth for subroutines) incorporating assembly.  From a modern perspective, Forth might not look very advanced.  OTOH, how much more advanced can you be than having 100% control of everything all of the time?  It fully supports multiple users running multiple processes simultaneously.  (My next job was using Unix machines, which sort of gave me whiplash.  Now I had partial control of some things when the OS allowed.)&lt;/p&gt;&#xA;&lt;p&gt;The downside is that if you have no experience with Forth, everything will seem backwards. The language itself uses a sort of &amp;quot;Reverse Polish&amp;quot; logic for everything -- &amp;quot;operand operand action&amp;quot;. Forth is not just a computer language in the PDP-11 environment.  It is also the operating system, device drivers, development environment, and applications.  You aren't writing Forth programs; instead you are making Forth bigger.  If this sounds intriguing, give it a shot.  If not, run.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="4138" LastEditDate="2020-07-04T14:41:40.123" LastActivityDate="2020-07-04T14:41:40.123" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15471" PostTypeId="2" ParentId="15452" CreationDate="2020-07-04T13:59:37.367" Score="3" Body="&lt;p&gt;There was LSX - a small, single-user UNIX for non-MMU PDP-11's based on UNIX V6. It also ran on the LSI 11/03. It was &amp;quot;interesting&amp;quot; to hear the RX01 floppies clunk and chatter when running piped commands!&lt;/p&gt;&#xA;&lt;p&gt;LSX Unix Restoration Page&#xA;&lt;a href=&quot;http://www.mailcom.com/lsx/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.mailcom.com/lsx/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;... LSX needed at least 40 kbytes. That's 20 kilowords: 8 kilowords&#xA;... for the system and 12 kilowords ... for the user programs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The Bell System Technical Journal paper &lt;em&gt;UNIX on a Microprocessor&lt;/em&gt; by H. Lycklama from July 1978:&#xA;&lt;a href=&quot;https://www.tuhs.org/Archive/Documentation/Papers/BSTJ/bstj57-6-2087.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.tuhs.org/Archive/Documentation/Papers/BSTJ/bstj57-6-2087.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There's Mini-Unix for the PDP-11/20, but it wants to see an RK05 disk:&#xA;&lt;a href=&quot;http://www.tavi.co.uk/unixhistory/mini-unix.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.tavi.co.uk/unixhistory/mini-unix.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And as @anotherDave mentioned, RT-11 was popular, and not bad to use.&#xA;Here's one place: &lt;a href=&quot;https://www.pcjs.org/software/dec/pdp11/disks/rk03/rt11v4/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pcjs.org/software/dec/pdp11/disks/rk03/rt11v4/&lt;/a&gt;&#xA;And the Trailing Edge site is good: &lt;a href=&quot;http://simh.trailing-edge.com/software.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://simh.trailing-edge.com/software.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18666" LastEditorUserId="18666" LastEditDate="2020-07-04T14:11:14.327" LastActivityDate="2020-07-04T14:11:14.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15472" PostTypeId="2" ParentId="15443" CreationDate="2020-07-04T16:41:31.733" Score="3" Body="&lt;p&gt;You’ve laid the assumption that one would load the whole novel into memory.  That’s a false assumption.&lt;/p&gt;&#xA;&lt;h2&gt;Performance is the #1 reason&lt;/h2&gt;&#xA;&lt;p&gt;If you got anywhere near 16,000 book characters in RAM at one time, the system started to suffer performance issues, which were very annoying and would tend to break workflow.&lt;/p&gt;&#xA;&lt;p&gt;It can’t be overstated how annoying these would be.&lt;/p&gt;&#xA;&lt;p&gt;Also, a person working fast and touch typing puts burden on the CPU that is often proportional to document size.  Now, the BBC has a keyboard buffer, which helps, but even it is finite and can be overrun - especially if &lt;em&gt;every keystroke&lt;/em&gt; is creating work that takes longer than an average keystroke!  But much more critically, this makes the system balky and inefficient.   I’m sure you’ve typed on a modern PC when system task load makes the word processor laggy - but it happens for moments.  Now, imagine all the time.&lt;/p&gt;&#xA;&lt;p&gt;So your solution was to save files chapter by chapter, and keep chapters sanely small.&lt;/p&gt;&#xA;&lt;p&gt;Based on your question I’m not sure you understand this, but every system back to the Apple II ca. 1978 had some sort of &lt;a href=&quot;https://en.wikipedia.org/wiki/Direct-access_storage_device&quot; rel=&quot;nofollow noreferrer&quot;&gt;DASD&lt;/a&gt; available for it - typically a floppy disk, sometimes a smart tape drive.   So you could store many files on it, and access any of them at will.  So it was easy to have a bunch of small files.&lt;/p&gt;&#xA;&lt;p&gt;You could do it with the basic/low-end storage too, like tape drives, but anybody who sunk real time into writing would’ve ante’d up for the DASD.&lt;/p&gt;&#xA;&lt;p&gt;Yes, you saw large documents.  Classic example would be release notes of software.  And you could open the documents and read them, but there was serious lag, to the point where typing even one word would be tedious. &lt;em&gt;And that was fine,&lt;/em&gt; because it was largely intended to be read-only.  Obviously the publisher didn’t write it as one document, but as several which were merged into one for distribution.&lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2020-07-04T20:18:39.137" LastActivityDate="2020-07-04T20:18:39.137" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="15473" PostTypeId="1" CreationDate="2020-07-04T18:27:26.803" Score="3" ViewCount="160" Body="&lt;p&gt;If you, in the Deku scrub shape, walk up to Tingle hanging from his balloon in the air, enter first-person view and blow up a bubble which you shoot away at him, the resulting bubble shape/object will have reflections of Tingle's bubble in it.&lt;/p&gt;&#xA;&lt;p&gt;I've noticed this many times in other situations, but I witnessed the above scene earlier today when I was watching a live stream of this game. Sadly, I was unable to &amp;quot;rewind&amp;quot; it to take a screenshot. It would've been nice to get an image to show exactly what I mean.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, what I wonder is whether this semi-transparent &amp;quot;bubble&amp;quot; actually calculates the entire 3D world and its objects to determine what kind of reflection to draw as a reflection on the bubble object, or if it's somehow &amp;quot;trick-filmed&amp;quot;, such as only including specific objects and/or maybe &amp;quot;pre-calculating&amp;quot; it in some way, giving the &lt;em&gt;illusion&lt;/em&gt; that it actually reflects the entire 3D environment when it really doesn't do that at all?&lt;/p&gt;&#xA;&lt;p&gt;One of the things that make the Nintendo 64 so interesting is that it both has a very capable and advanced ability to draw realtime 3D environments, and also some seriously limiting hardware if you consider the expectations at this point.&lt;/p&gt;&#xA;&lt;p&gt;Yes, I'm aware that Majora's Mask is one of the N64 games which &lt;em&gt;required&lt;/em&gt; the Expansion Pak (+4 MB RAM, for a total of 8 MB) to run at all. But simply having more RAM might not matter in terms of doing this (presumably) very CPU-expensive calculation.&lt;/p&gt;&#xA;" OwnerUserId="18669" LastActivityDate="2020-07-04T18:27:26.803" Title="Does Majora's Mask (Nintendo 64) actually have real-time calculation of the Deku bubble &quot;mirror world&quot;?" Tags="&lt;nintendo-64&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15474" PostTypeId="2" ParentId="7413" CreationDate="2020-07-04T19:25:54.863" Score="3" Body="&lt;p&gt;You most likely wrote your early experimental programs in the &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASIC language&lt;/a&gt;, using Timex’s ROM-resident BASIC &lt;a href=&quot;https://en.wikipedia.org/wiki/Interpreter_(computing)&quot; rel=&quot;nofollow noreferrer&quot;&gt;interpreter&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Line_editor&quot; rel=&quot;nofollow noreferrer&quot;&gt;line editor&lt;/a&gt;. Cassette-tape storage would have been accessed using the &lt;code&gt;SAVE&lt;/code&gt; and &lt;code&gt;LOAD&lt;/code&gt; commands in the interpreter’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Direct_mode&quot; rel=&quot;nofollow noreferrer&quot;&gt;immediate mode&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Commercial software, however, would nearly always get written in &lt;a href=&quot;https://en.wikipedia.org/wiki/Machine_code&quot; rel=&quot;nofollow noreferrer&quot;&gt;machine language&lt;/a&gt; — to gain the best performance and the tightest control over the system. On the Timex 2048, this would have been machine code native to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zilog Z80 microprocessor&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;* * *&lt;/p&gt;&#xA;&lt;p&gt;A few words on the usage of audio cassettes for storage:&lt;/p&gt;&#xA;&lt;p&gt;In many countries, the audio cassette was the &lt;strong&gt;most popular&lt;/strong&gt; storage media for the non-business-oriented 8-bit home computers. That is, more popular than the floppy disk.&lt;/p&gt;&#xA;&lt;p&gt;Don’t get me wrong: floppy disk drives were quite popular as well — among advanced hobbyists, committed gamers, and the rich kids. But for their price, they offered just too little obvious benefit to the great unwashed masses. An FDD could cost as much as the computer itself! Hence, in many markets, tape-based systems comprised of the majority of the installed base.&lt;/p&gt;&#xA;&lt;p&gt;The UK company behind the original design of the Timex computers — &lt;a href=&quot;https://en.wikipedia.org/wiki/Sinclair_Research&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sinclair Research&lt;/a&gt; — were a bit of a special case in that they did not even &lt;em&gt;want&lt;/em&gt; to offer floppy disk drives to their users: the company deliberately dragged their feet on specifying how FDDs should be interfaced to their systems and wanted to promote a proprietary storage technology called the &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Microdrive&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microdrive&lt;/a&gt; in their place, effectively preventing FDDs from getting common on their systems. For the Sinclair computers, tape was the primary, standard storage format “by design”.&lt;/p&gt;&#xA;&lt;p&gt;The original Sinclair systems were very cost-reduced. Favoring tape-based storage was maybe part of this cost-reduction strategy. But they were also very popular, and Sinclair was a major player whose products inspired and incubated lots of computer programmers who would go on to write commercial software for the platform — especially in the UK.&lt;/p&gt;&#xA;&lt;p&gt;This needed to be said as some answers suggest tape-only setups would not have been too relevant as platforms to program on, or at all. That might have been true for the US market, but the US swiftly abandoning tapes and moving to all disk-based systems was rather the exception than the global norm.&lt;/p&gt;&#xA;&lt;p&gt;* * *&lt;/p&gt;&#xA;&lt;p&gt;With that out of the way, some points:&lt;/p&gt;&#xA;&lt;p&gt;Firstly, many programmers cut their teeth on tape-based setups: owning one was nothing out of the ordinary for many markets, and would not have been viewed as any great impediment by most users, but rather just the natural state of affairs; the standard baseline.&lt;/p&gt;&#xA;&lt;p&gt;Secondly, developing a software title for an 8-bitter was often a single-man affair. There was a man and his machine, and his wacky idea for a game — say, &lt;a href=&quot;https://en.wikipedia.org/wiki/Jeff_Minter#Pre-commercial_career_(early_years)&quot; rel=&quot;nofollow noreferrer&quot;&gt;mutant camels&lt;/a&gt;. What &lt;em&gt;more&lt;/em&gt; could one want or need — besides a publisher? (A team? Hah! Get me the cheerleaders, instead.)&lt;/p&gt;&#xA;&lt;p&gt;Thirdly, 8-bit home computers were pretty much &lt;em&gt;designed&lt;/em&gt; on the premise of being general-purpose computers: fully capable of self-hosting their programming environments. “A man and his machine” was understood to be quite sufficient for writing &lt;em&gt;all the software in the world that the machine is capable of running&lt;/em&gt;. There was no underlying assumption or implication of having to purchase a separate external development kit.&lt;/p&gt;&#xA;&lt;p&gt;Many of the programmers who got commercially published were self-taught, and started out with bog-standard, entry-level hobbyist setups.&lt;/p&gt;&#xA;&lt;p&gt;* * *&lt;/p&gt;&#xA;&lt;p&gt;So how would you go about writing something more advanced on that tape-based system than what the BASIC language is capable of?&lt;/p&gt;&#xA;&lt;p&gt;Many software titles were developed directly on the target system by self-taught programmers, only using very primitive tools, such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Machine_code_monitor&quot; rel=&quot;nofollow noreferrer&quot;&gt;machine language monitors&lt;/a&gt; and pencil notes jotted in a cross-ruled notebook.&lt;/p&gt;&#xA;&lt;p&gt;In this kind of a workflow, you carve the machine-language code directly into the RAM of the running target system by editing the content of the memory live, as in these videos:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=0gBoQgeg9r0&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=0gBoQgeg9r0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MEjnMt_3wkU&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=MEjnMt_3wkU&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You would basically view everything in the computer’s RAM as ever-malleable putty that you can work “hands-on” and keep shaping towards the shape of the program you’re envisioning.&lt;/p&gt;&#xA;&lt;p&gt;You could copy arbitrary memory ranges (blocks of code or data) around, and directly modify the individual bytes representing the machine-language opcodes and operands.&lt;/p&gt;&#xA;&lt;p&gt;You could also save arbitrary ranges of memory to a disk or tape, or load bytes from a file into a desired absolute memory address — this way integrating data or code created elsewhere, or saving bits and pieces for later (re)use.&lt;/p&gt;&#xA;&lt;p&gt;If your machine-language program were to freeze, you could hit the reset button and start your machine-langauge monitor tool again and continue modifying the code — it would remain in the memory.&lt;/p&gt;&#xA;&lt;p&gt;The finished software title would not be the product of a compiler-linker toolchain, but a dump of the relevant RAM memory ranges; basically a curated snapshot of the developer’s system RAM from the time they deemed the project was ready for release.&lt;/p&gt;&#xA;&lt;p&gt;The saved memory dumps would maybe have to be further prepared for commercial, cassette tape-based distribution by using a simple compression algorithm, along with some chain-loader/unpacking/initialization code, and a publisher would likely want it to be equipped with a loading screen (perhaps with music) to entertain the user while they wait for the main code to load and start.&lt;/p&gt;&#xA;&lt;p&gt;This is certainly not the most sophisticated way to work on a software project, but you’re not really working on a fancy “software project” — you’re constructing a &lt;em&gt;computer program&lt;/em&gt;, which is something more raw and manly. Also, simple tools, such as a machine-language monitor, do not require much in the way of resources or workflow: you do not need to manage source code files, deal with editors, compilers or linkers, etc. on your limited little system. Everything is raw and direct and immediate.&lt;/p&gt;&#xA;&lt;p&gt;* * *&lt;/p&gt;&#xA;&lt;p&gt;What about working with other people?&lt;/p&gt;&#xA;&lt;p&gt;Many 8-bit commercial titles (those which were not the work of a lone coder but more grandious in their design) have maybe three persons credited: the main programmer, the guy who drew the graphics, and the guy who composed the music.&lt;/p&gt;&#xA;&lt;p&gt;There isn’t much need for constant integration if the responsibilities are this clearly divided. Meeting up occasionally or sending in your work on cassette, by mail, would be enough.&lt;/p&gt;&#xA;&lt;p&gt;To allow e.g. the music guy to contribute to the project, the main programmer could just set aside a block of memory at an absolute address and tell them to fit their music code and data in there while informing them that the music player subroutine may only take up so much “raster time” (CPU time during single video raster refresh) in order not to interfere with the game-play mechanics, and let them work from there.&lt;/p&gt;&#xA;&lt;p&gt;When the guy delivers their piece, you integrate it by loading the binary data blob into the designated address, and call the agreed-upon entry point into the music player routine in each raster interrupt.&lt;/p&gt;&#xA;&lt;p&gt;Many other things could be handled in a similar fashion.&lt;/p&gt;&#xA;&lt;p&gt;* * *&lt;/p&gt;&#xA;&lt;p&gt;As for keeping your work safe, you would save often and keep multiple copies. And keep hand-written notes. Or print out a hard copy of your code on continuous-fold paper if you were lucky enough to own a printer. Floppy disks were known to get random bad sectors, too, so purchasing an FDD would not have saved you from such chores.&lt;/p&gt;&#xA;&lt;p&gt;Tapes and their content can be kept organized by maintaining an index on the inlay card, or rather in a separate notebook, by using a pencil. The index would be based on the mechanical tape counter readings and file names. (Most implementations of cassette tape-based storage stored a header with a filename on the tape so you could theoretically search for a given file from the current position onward, by its name. But this could only be done at the normal playback speed, so in the normal case, you would first want to rewind or fast-forward the tape roughly to the correct position, using the manually operated, mechanical tape transport buttons and the tape counter readings as your guide.)&lt;/p&gt;&#xA;&lt;p&gt;* * *&lt;/p&gt;&#xA;&lt;p&gt;The above descriptions concern a scenario where you pretty much only have a standard tape-based system in your possession, with no expansions.&lt;/p&gt;&#xA;&lt;p&gt;Would a more elaborate programming kit have helped an aspiring programmer? Certainly. But was it a &lt;em&gt;necessity&lt;/em&gt; for commercial software development? Definitely not. Determined, clever people could do wonders using the rather simple tools and environments they had at hand. Things were maybe tedious and tricky — but they sort of &lt;em&gt;always&lt;/em&gt; were, on these systems. You would have to figure out the best solutions for overcoming any obstacles mostly by yourself (most people would not have had access to any online community), but as they say, where there’s a will, there’s a way.&lt;/p&gt;&#xA;&lt;p&gt;Granted, getting &lt;em&gt;some&lt;/em&gt; expansions for your lowest-specification base system — such as a RAM expansion, or a more advanced method of mass storage — would make things more convenient.&lt;/p&gt;&#xA;&lt;p&gt;Be that as it might, a cassette tape-based development workflow on a standard, unexpanded system would have been fully possible — even when having a couple of more guys working on some particular aspects of the game.&lt;/p&gt;&#xA;&lt;p&gt;Ultimately, programming the 8-bit systems in machine language can be reduced to &lt;strong&gt;arranging the bit patterns in the RAM (or in a file) into the desired order&lt;/strong&gt; — and you can practically &lt;em&gt;always&lt;/em&gt; do that, even without purchasing anything extra. Almost all systems came with a built-in BASIC interpreter which readily allows such memory and file manipulation, and therefore writing your own tools. Even if you would not want to keep using BASIC itself for anything, you can &lt;em&gt;bootstrap&lt;/em&gt; yourself to better, self-written machine-language tools using BASIC.&lt;/p&gt;&#xA;&lt;p&gt;* * *&lt;/p&gt;&#xA;&lt;p&gt;Overall, there was a vast range of possible tools, environments, and development styles. The answer written by Wayne Conrad covers the use of an assembler-based workflow — self-hosted on the system. Other answers mention cross-development tools. However, obtaining another, more powerful PC would have been out of the financial reach of many.&lt;/p&gt;&#xA;&lt;p&gt;Big, established companies with actual programming teams on their payroll would do things in a much more organized manner than a lone coder, using fancier in-house tools — especially in the later years, on the most popular systems. But were most software titles actually developed that methodical way, for these machines? I’d say hell no. A man and his machine — the lone developer and possibly his cat, maybe accompanied by a GFX or SFX guy, the bossy boss, and Laura from the front desk (who also answered the phone, drew the cover art, tested the levels, and handled packing and shipping) — played a big part. Or so I would imagine.&lt;/p&gt;&#xA;&lt;p&gt;It must be understood the overwhelming majority of the actual users of these systems were kids, teenagers, and young adults with no formal education in computer science or background in  programming. These were also the people who ended up writing much of the software for them.&lt;/p&gt;&#xA;&lt;p&gt;8-bit home computers were, for many, the first dip into the world of general-purpose computers. Previously, computers were these large multi-user systems or batch-processing behemoths owned and operated by an organization — a university or a telecommunications company, a bank, an insurance company, or your friendly tax authorities. But now you could &lt;em&gt;own&lt;/em&gt; an itty-bitty computer yourself, as an individual, and were free to experiment with it as you please.&lt;/p&gt;&#xA;&lt;p&gt;Not only that, but the home computers had &lt;em&gt;color graphics&lt;/em&gt; and &lt;em&gt;sound&lt;/em&gt; — features making them suitable for video games — or for some new kind of digital underground art, even — and features definitely &lt;em&gt;not&lt;/em&gt; offered by the “serious” systems, because they were oh-so-serious and “all business”.  (Business, as we all know, is dull and monochrome and gets by with green-screen text mode and square-wave error bleeps only.)&lt;/p&gt;&#xA;&lt;p&gt;Personal computers — especially the cheap, colorful, TV-connectable, home-oriented ones — were a great paradigm shift in how people could access and use computers. Much of their early use, and the practices related to those uses — including the practices related to developing commercial software for them — could be labeled as being &lt;em&gt;experimentative&lt;/em&gt; and &lt;em&gt;hobbyist-amateur-driven&lt;/em&gt;. But that was exactly the fun of it.&lt;/p&gt;&#xA;&lt;p&gt;* * *&lt;/p&gt;&#xA;&lt;p&gt;Finally, to expand a bit on the tools and hardware additions, floppy disk drives were not the only way to beef up your programmer’s kit, and not even the only way to get access to a better form of mass storage than audio tape. Many systems had fancy aftermarket memory expansion and ROM tool cartridges available — providing much more RAM workspace than is available in the standard out-of-the-box configuration, and possibly including ROM-based tools — such as a machine language monitor. A programmer could use the extra memory as workspace for storing code or data snippets or memory-resident tools while working on the project which targets the unexpanded hardware.&lt;/p&gt;&#xA;&lt;p&gt;Some of the more advanced expansion cartridges allowed much more memory to be installed on them than the CPU could address (the extra memory being accessible via memory banking) and were battery backed-up and able to retain their content for as long as the capacity of the battery allowed. They could also simulate a disk drive, in RAM disk style. This made them usable as semi-persistent, lightning-fast scratchpad for your project files or tools.&lt;/p&gt;&#xA;&lt;p&gt;There were also aftermarket HDD controllers for the 8-bit home computer systems. The very cost-reduced Sinclair ZX81 apparently had one designed for it as early as in 1982 — something Sir Clive Sinclair himself has been quoted as characterizing as “quite overgilding the lily”. These, equipped with an actual HDD, would likely have been prohibitively expensive and viewed as very exotic special-purpose kit by the typical users of such systems, but such solutions &lt;em&gt;did&lt;/em&gt; exist for those who had the need and could afford one.&lt;/p&gt;&#xA;&lt;p&gt;As mentioned, commercial cross-development toolkits were available for some platforms. Another, more powerful system — such as an IBM PC or AT-compatible machine — was harnessed for editing and compiling code for the 8-bit target system. There was typically a cross-assembler running on the development system, and a proprietary data link of some sort connected to an expansion port on the target system. The latter would allow quickly uploading the compiled code to the target system’s memory space for testing. If you were very professionally-minded about software development, you could have used one of these — at the cost of obtaining another, much more expensive computer and an expensive cross-development product to run on it.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7432/4893&quot;&gt;The answer provided by Wayne Conrad&lt;/a&gt; is an excellent read, as are the entries in the ”Linked” section and the free PDF book (&lt;em&gt;It’s Behind You: the making of a computer game&lt;/em&gt;) &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7423/4893&quot;&gt;mentioned by lvd&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4893" LastActivityDate="2020-07-04T19:25:54.863" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15475" PostTypeId="2" ParentId="14360" CreationDate="2020-07-05T01:22:47.980" Score="4" Body="&lt;p&gt;I've used both 5250 and 3270 terminals and the main differences were the twinax cabling and a little local smarts that allowed the 5250 to download a screen format form that could perform some data validations in the terminal&lt;/p&gt;&#xA;" OwnerUserId="18671" LastActivityDate="2020-07-05T01:22:47.980" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15476" PostTypeId="1" CreationDate="2020-07-05T02:05:16.180" Score="2" ViewCount="81" Body="&lt;p&gt;I'm looking at disk image files for the Dragon 32 / Dragon 64 computers.&lt;/p&gt;&#xA;&lt;p&gt;The Dragon computers are very similar to the Tandy TRS-80 Color Computer &amp;quot;CoCo&amp;quot; but are not clones and are not the same. In particular the two machines have very different Disk Operating Systems with totally different disk layouts. The Dragons run &amp;quot;DragonDos&amp;quot; while the CoCos run &amp;quot;RSDOS&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Both systems allow booting third-party OSes from the floppy boot sector by executing a command, &lt;code&gt;DOS&lt;/code&gt; on the CoCo and &lt;code&gt;BOOT&lt;/code&gt; on the Dragon.&lt;/p&gt;&#xA;&lt;p&gt;Bootable floppy disk sectors begin with the signature &lt;code&gt;OS&lt;/code&gt;. On DragonDos, &lt;a href=&quot;http://dragon32.info/info/drgndos.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this is LSN (logical sector number) 2, or track 0 sector 3&lt;/a&gt;. (On a CoCo RSDOS disk the boot sector and &lt;code&gt;OS&lt;/code&gt; signature is on track 34 sector 0).&lt;/p&gt;&#xA;&lt;p&gt;But I have some disk image files I downloaded (labelled &amp;quot;Dragon DOS 1.0 Boot&amp;quot; and &amp;quot;Dragon DOS 2.F Boot&amp;quot;) which instead of an &lt;code&gt;OS&lt;/code&gt; signature at LSN 2 have a &lt;code&gt;DK&lt;/code&gt; signature in the same place. I cannot find this signature documented anywhere though the &lt;code&gt;DK&lt;/code&gt; signature is used for other things in the Dragon ecosystem:&lt;/p&gt;&#xA;&lt;p&gt;DragonDOS was on a cartridge which puts the &lt;a href=&quot;http://dragon32.info/info/drgndos.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;DK&lt;/code&gt; signature at address &lt;code&gt;C000&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ROM OS:&#xA;    Appears in cartridge space $c000-dfff (Cumana system uses $c000-feff)&#xA;    Adds IRQ, FIRQ and NMI handling code, uses various Ram hooks&#xA;&#xA;...&#xA;&#xA;$c000:c001  'DK' - used by BASIC Rom init to detect Disk Rom&#xA;$c002-c003  Cartridge Init entry point (BRA $c0xx)&#xA;$c004-c029  Indirect address table&#xA;$c004:c005  Low Level Hardware Command byte routine ($cxxx)&#xA;$c006:c007  ($00ea)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;I never used these systems back in the day so they're unfamilar. I have three emulators but I find them more tricky to use than many emulators. Most emulate both CoCo and Dragon and I'm not sure how much guessing the emulator does when you try to load a file. Usually I can't get these images to work but sometimes I can't get any image to work. I'm never sure if I've got the right ROM images in the right folders, what needs Dragon 64 and not just Dragon 32. ROMs from one emulator don't always just work in another emulator that comes without ROMs. MAME is very counterintuitive in its microcomputer emulation setup...&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;So the question is, do both &lt;code&gt;OS&lt;/code&gt; and &lt;code&gt;DK&lt;/code&gt; indicate boot sectors? Is the &lt;code&gt;DK&lt;/code&gt; variant documented or not somewhere? Do I have disk versions of the cartridge? - the &lt;code&gt;00ea&lt;/code&gt; is in the same location as above but not everything matches. Do I maybe have something more recent from the retro era that's based on modified ROMs?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-08-11T05:43:03.327" LastActivityDate="2020-08-11T05:43:03.327" Title="What does a &quot;DK&quot; signature at the start of track 0 sector 3 of a Dragon 32/64 floppy disk?" Tags="&lt;floppy-disk&gt;&lt;operating-system&gt;&lt;boot&gt;&lt;dragon-32&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15477" PostTypeId="1" CreationDate="2020-07-05T02:50:39.247" Score="2" ViewCount="134" Body="&lt;p&gt;Tandy's TRS-80 Color Computer &amp;quot;CoCo&amp;quot; and the Dragon 32 &amp;amp; 64 were very similar but not clones and not the same. Floppy disk versions used totally different DOSes and disk layouts.&lt;/p&gt;&#xA;&lt;p&gt;Both did use 18 sectors per track and 256-byte sectors though.&lt;/p&gt;&#xA;&lt;p&gt;One of the CoCo's main disk image file format is &lt;a href=&quot;https://sites.google.com/site/dabarnstudio/jvc-disk-format&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;JVC&amp;quot;&lt;/a&gt; and is by the same guy who invented the JV1 and JV3 disk image file formats for the TRS-80 Model I and III.&lt;/p&gt;&#xA;&lt;p&gt;Another main CoCo disk image format is &lt;a href=&quot;http://www.classiccmp.org/cpmarchives/trs80/mirrors/www.discover-net.net/%7Edmkeil/coco/cocotech.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;DMK&amp;quot;&lt;/a&gt;, which has also been adopted in the MSX world.&lt;/p&gt;&#xA;&lt;p&gt;The main Dragon 32 and 64 disk image file format is &lt;a href=&quot;http://archive.worldofdragon.org/index.php?title=Tape%5CDisk_Preservation#VDK_File_Format&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;VDK&amp;quot;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Either or both of the JV1 and JV3 formats for the TRS-80 Model I and III seem to be also used on the CoCo, but I'm never totally sure on this.&lt;/p&gt;&#xA;&lt;p&gt;Most if not all of these formats sometimes used the generic &amp;quot;DSK&amp;quot; file extension as well as their own extension. Only &amp;quot;VDK&amp;quot; has a header with a signature.&lt;/p&gt;&#xA;&lt;p&gt;But what I'm really not sure about is whether both platforms also use each other's image file formats. This is hard to check out when the emulators tend to support both platforms and may automatically detect what you're loading and automatically switch platform to match the file. All the CoCo and Dragon emulators seem quite tricky to use too, especially the one in MAME.&lt;/p&gt;&#xA;&lt;p&gt;Besides system emulators there are also floppy emulators for SD cards which must have to deal with this.&lt;/p&gt;&#xA;&lt;p&gt;For plain disks I can look for the directory structures and I can identify some boot sectors, but for nonstandard disks I'm not always sure. If I know &amp;quot;VDK&amp;quot; files are never for CoCo or &amp;quot;JVC&amp;quot; files are never for Dragon that might help.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-08-11T05:43:16.580" LastActivityDate="2020-08-11T05:43:16.580" Title="Do the Tandy CoCo and the Dragon 32 &amp; 64 use all the same disk image file formats?" Tags="&lt;emulation&gt;&lt;file-format&gt;&lt;disk-image&gt;&lt;coco&gt;&lt;dragon-32&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15478" PostTypeId="2" ParentId="15125" CreationDate="2020-07-05T03:00:47.887" Score="1" Body="&lt;p&gt;Since the coco cassette interface used 1200 baud psk audio encoding in it, the tape format of the coco was 4X faster loading files from the tape and the tape files were 1/4th the size of similar files on atari and commodore systems, which used 300 baud afsk encoding.&lt;/p&gt;&#xA;&lt;p&gt;it became common to stack multiple files on a single tape. many magazines sold software collections on stacked tapes an some added a program that would provide a list of files of the tape and use the SKIPF command find file.&lt;/p&gt;&#xA;&lt;p&gt;You probably have an audio image of one of these tapes.&lt;/p&gt;&#xA;" OwnerUserId="18671" LastEditorUserId="148" LastEditDate="2020-07-05T04:49:49.897" LastActivityDate="2020-07-05T04:49:49.897" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15479" PostTypeId="1" CreationDate="2020-07-05T12:03:45.480" Score="10" ViewCount="1414" Body="&lt;p&gt;Under the question &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/3286/79&quot;&gt;How did Windows ME &amp;quot;cripple&amp;quot; DOS?&lt;/a&gt;, Ross Ridge's &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/3288/79&quot;&gt;answer&lt;/a&gt; showed a section of his disassembly.&lt;/p&gt;&#xA;&lt;p&gt;I would like to know, a) what disassembler was used and b) what adjustment or setting had to be used for the file to be disassembled.&lt;/p&gt;&#xA;&lt;p&gt;I have tried IDA Freeware version 5 with various input sources, such as DOS EXE, DOS SYS, Binary, etc but have nor been able to obtain the desired result of a disassembly of the whole file.&lt;/p&gt;&#xA;&lt;p&gt;If anyone can help with advice I would be most appreciative.&lt;/p&gt;&#xA;" OwnerUserId="18673" LastEditorUserId="15334" LastEditDate="2020-11-06T20:06:46.553" LastActivityDate="2020-12-07T18:15:16.803" Title="Disassembling Windows IO.SYS" Tags="&lt;ms-dos&gt;&lt;windows-98&gt;&lt;windows-95&gt;&lt;windows-me&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15480" PostTypeId="1" CreationDate="2020-07-05T12:55:15.523" Score="2" ViewCount="153" Body="&lt;p&gt;Hardware:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A1200&lt;/li&gt;&#xA;&lt;li&gt;CF 4GB (sys part 800MB)&lt;/li&gt;&#xA;&lt;li&gt;KS 3.1 40.68&lt;/li&gt;&#xA;&lt;li&gt;ClassicWB&lt;/li&gt;&#xA;&lt;li&gt;Amitek Hawk 4MB, FPU 68882, oscillator 28MHz&lt;/li&gt;&#xA;&lt;li&gt;Gotek, Flash Floppy 2.1.4&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;When Amitek is used the machine boots from Gotek USB adf file the game menu (not gotek, but actual loaded game) will load (North and South, few others), but when actually trying to start a game it crashes with Guru Meditation error &lt;a href=&quot;http://www.amigahistory.plus.com/8b.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;8000 000B&lt;/a&gt;. Without Amitek it works normally.&lt;/p&gt;&#xA;&lt;p&gt;It looks like the machine never been recapped. Is this the only thing I should consider (Hawk uses extra juice as I understand) or would it be to libs as per link (mine were copied from ClassicWB)? PSU shows corrects values on multimeter.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/d4Ous.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/d4Ous.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2020-07-05T21:19:36.010" LastActivityDate="2020-07-05T21:19:36.010" Title="A1200 Amitek Hawk, Guru Meditation 8000 000B when loading games from Gotek" Tags="&lt;ram&gt;&lt;amiga-1200&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15481" PostTypeId="2" ParentId="15443" CreationDate="2020-07-05T14:37:36.210" Score="1" Body="&lt;p&gt;The problem with the idea of expanding the memory is that the 6502 only had 64K of address space and pretty much all of it was allocated to something. 32K was used for the ram, 16K for the current &amp;quot;sideways rom&amp;quot;, 15¼K for the OS, ¼K for internal memory mapped IO and ½K for the &amp;quot;1MHz bus&amp;quot; expansion interface. So it was not possible to simply expand the main user memory area. This meant that while memory expansion options existed they were of limited utility.&lt;/p&gt;&#xA;&lt;p&gt;Sideways roms were all banked into the same 16K chunk of address space. The OS provided mechanisms that allowed calls to be directed to sideways roms and handled the bank switching. The OS supported up to 16 sideways roms, though extra hardware was needed for more than four.&lt;/p&gt;&#xA;&lt;p&gt;It was common for the word processing software to be implemented as a &amp;quot;language&amp;quot; sideways rom. Thus meaning that the word processor software did not take up space in user memory. So a machine used for word processing might have three sideways roms installed, one for Basic (you could theoretically remove this but I doubt many people did), one for the word processor and one for the Disk (or network) filling system.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Shadow ram&amp;quot; boards did exist, these split the screen memory off into a seperate bank from user memory allowing the higher screen resolution modes to be used without eating in to user memory. I'm not sure what if any word processor software supported them.&lt;/p&gt;&#xA;&lt;p&gt;There were also &amp;quot;sideways ram&amp;quot; boards which banked ram into the sideways rom space. As far as I can tell this was mostly used for soft-loading programs that were intended to run from sideways roms.&lt;/p&gt;&#xA;&lt;p&gt;As far as I can tell the way you would work with lots of text on such systems would be to work in multiple files and save and re-load from disk as needed. Initially such saving and reloading would be manual but automated options apparently existed later.&lt;/p&gt;&#xA;" OwnerUserId="499" LastEditorUserId="499" LastEditDate="2020-07-05T22:51:32.213" LastActivityDate="2020-07-05T22:51:32.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15482" PostTypeId="2" ParentId="15480" CreationDate="2020-07-05T18:26:33.913" Score="1" Body="&lt;p&gt;I think the first question to answer is whether booting from a game floppy image via the Gotek is the best way to achieve game compatibility with an expanded Amiga. In my experience, compatibility is better when using WHDLoad images instead of unmodified floppy images for expanded Amigas.&lt;/p&gt;&#xA;&lt;p&gt;You mentioned you have a 4GB IDE-CF HDD. If you already have WHDLoad installed, what has been your experience trying to run games through that route, with and without your Hawk expansion unit?&lt;/p&gt;&#xA;&lt;p&gt;If WHDLoad has not been tried with the Hawk, I recommend trying this first. If you get good results, then your problem is solved. If the Hawk still give you problems, I would try swapping out the memory on the Hawk.&lt;/p&gt;&#xA;&lt;p&gt;As far as the recommendation to run &amp;quot;SetPatch&amp;quot; in your link, that may be important too. And this is another reason you should be booting from the CF card into a properly patched environment for your expansion hardware. WHDLoad will support launching games from such a patched environment, and this is one of the reasons it provides for better compatibility with expanded Amigas.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-07-05T18:26:33.913" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15483" PostTypeId="2" ParentId="15443" CreationDate="2020-07-05T21:11:43.733" Score="0" Body="&lt;p&gt;Of course.&lt;/p&gt;&#xA;&lt;p&gt;CPU is not a bottleneck. In fact, some people used a simple computer based on NES connect a printer to process documents containing Chinese characters, and memory of NES was only a few KB.&lt;/p&gt;&#xA;&lt;p&gt;Sideways ROM/RAM with massive banks controlled by an ASIC is very common in 1990s NES games and software. Similar deck is also possible on BBC Micro.&lt;/p&gt;&#xA;&lt;p&gt;But, is it an expansion?&lt;/p&gt;&#xA;" OwnerUserId="18677" LastEditorUserId="278" LastEditDate="2020-07-06T22:30:55.787" LastActivityDate="2020-07-06T22:30:55.787" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15484" PostTypeId="1" AcceptedAnswerId="15485" CreationDate="2020-07-05T21:23:43.070" Score="3" ViewCount="452" Body="&lt;p&gt;I have a faulty Atari 520STFM additional 4MB ram installed. It shows bombs on boot. I understand bombs are sort of code indicator of what is malfunctioning in the system, similar to what Guru Meditation errors are in Amiga machines. What these bombs actually mean in general? Is there a resource like this one for guru errors?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.amigahistory.plus.com/guruguide.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.amigahistory.plus.com/guruguide.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/woWS7.jpg&quot; alt=&quot;Boot screen 1&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/eUKbM.jpg&quot; alt=&quot;Boot screen 2&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Bxl0D.jpg&quot; alt=&quot;Boot screen 3&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2020-07-05T22:57:16.470" LastActivityDate="2020-07-07T20:12:59.007" Title="Atari ST series - bombs on boot" Tags="&lt;hardware&gt;&lt;boot&gt;&lt;atari-st&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15485" PostTypeId="2" ParentId="15484" CreationDate="2020-07-05T22:01:41.273" Score="7" Body="&lt;p&gt;&lt;em&gt;Hint: It would be great if you could extend your question not only with the number of bombs, but as well the setup and conditions used to produce them.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I understand bombs are sort of code indicator of what is malfunctioning in the system,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Jup, they are, so it would be nice if you could tell how many you see, as that is essentially the error code.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;similar to what Guru Meditation errors are in Amiga machines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. Guru Meditation are explicite software error codes told by the OS (loader). Bombs are hardware traps.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What these bombs actually mean?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well known (and from memory) are&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Two&lt;/strong&gt; (*1) bombs (*2) are a bus/address error, while&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Three&lt;/strong&gt; bombs indicate an unaligned word access.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Four&lt;/strong&gt; bombs come with an illegal instruction.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Five&lt;/strong&gt; bombs are a division by zero.&lt;/li&gt;&#xA;&lt;li&gt;... and so on.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;After all, the count of bombs is basically the &lt;a href=&quot;http://toshyp.atari.org/en/the_system_vectors.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;trap number&lt;/a&gt; issued by the error.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there a resource like this one for guru errors?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Check the &lt;a href=&quot;http://toshyp.atari.org/en/the_system_vectors.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;vector list&lt;/a&gt;. Bombs aren't OS errors, but hardware exceptions. They simply tell that the CPU took some trap which is not handled otherwise.&lt;/p&gt;&#xA;&lt;p&gt;In your case it seams to be trap #20 (*3), one of the reserved vectors.&lt;/p&gt;&#xA;&lt;p&gt;But there's another hint: the bitmap/colour artefacts. While they as well may come from some program running wild, I'm pretty sure the traps put the CPU into a standstill after drawing the bombs, so no chance, which means they must be hardware related. First assumption would be memory, the second the Shifter (graphics/system chip).&lt;/p&gt;&#xA;&lt;p&gt;In either case it's a good idea to open the baby, check everything, reseat all socketed components and cables and try again. That's the usual magic for old computers anyway.&lt;/p&gt;&#xA;&lt;p&gt;It's impossible to give any further hint without more information about environment and what you're doing.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - There is no trap vector 0 or 1 as these entries are used for reset values for PC and SP.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Bombs are BTW only used since TOS-ROMs exist, as the disk version did show little atomic mushrooms.&lt;/p&gt;&#xA;&lt;p&gt;*3 - As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15484/atari-st-series-bombs-on-boot/15485?noredirect=1#comment51613_15485&quot;&gt;Alex mentiones&lt;/a&gt; it may as well be a higher number, if they are only outputed in a single line. I do think they warp into the next, but I'm not sure, so lets say 20 or above.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-07T20:12:59.007" LastActivityDate="2020-07-07T20:12:59.007" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15486" PostTypeId="1" AcceptedAnswerId="15487" CreationDate="2020-07-05T23:14:32.457" Score="2" ViewCount="320" Body="&lt;p&gt;So, I'm working on a project where I'm aiming to get the first winner of the IOCCC (obfuscated c code contest) dissected down to the last detail... The program is &lt;a href=&quot;https://www.ioccc.org/1984/mullender/mullender.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;mullender.c&lt;/a&gt; which you can find by following that link.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, I've gotten it running under pdp-11/70 using simh as well as vax780. The thing is it relies on the 'write' syscall (and maybe one other). Just for fun, I'd like to try getting this running on a pure pdp-11/vax machine (i.e, no OS providing syscall support). What should I be looking into doing here? It looks like &lt;a href=&quot;http://www.bitsavers.org/www.computer.museum.uq.edu.au/RSX/AA-V027A-TC%20PDP-11%20MACRO-11%20Language%20Reference%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MACRO-11&lt;/a&gt; (pdf warning) is the assembly language for the pdp. You can also enter octal directly into the memory in simh but that's a little arduous.&lt;/p&gt;&#xA;&lt;p&gt;I'm totally out of my depth here so basically I'm asking for a starting point - where do I need to begin looking to make this work? There are a million manuals but I've seen nothing concrete (i.e, example programs). From what I've researched I need to poll the status on the &lt;a href=&quot;http://www.bitsavers.org/www.computer.museum.uq.edu.au/pdf/EK-DZ11-MM-PRE%20DZ11%20Maintenance%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;dz11 device&lt;/a&gt; (pdf warning) and if it's ready just write to it, then repeat. Seems easy enough in theory but of course the question of how to get it working is another matter =).&lt;/p&gt;&#xA;" OwnerUserId="18678" LastEditorUserId="18678" LastEditDate="2020-07-06T00:15:44.723" LastActivityDate="2021-02-25T23:45:22.850" Title="How to implement a 'write' function in pdp-11 / MACRO-11 / ODT using simh?" Tags="&lt;assembly&gt;&lt;operating-system&gt;&lt;c&gt;&lt;pdp-11&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15487" PostTypeId="2" ParentId="15486" CreationDate="2020-07-06T01:12:44.450" Score="6" Body="&lt;p&gt;So bare metal, no OS?&lt;/p&gt;&#xA;&lt;p&gt;On both systems, console terminal I/O is considerably easier than any other terminal interface.&lt;/p&gt;&#xA;&lt;p&gt;On many VAXen, there's a couple of processor registers that are status and data registers for console I/O.  Much easier than dealing with DZ-11 or similar.&lt;/p&gt;&#xA;&lt;p&gt;Here's the important part of a VAX 'putchar' routine from a standalone libc I wrote in the late 80s.  Polling, no interrupts.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;do _MFPR(PR$_TXCS, &amp;amp;tmp);&#xA;while (!(tmp&amp;amp;0x80));&#xA;&#xA;_MTPR(ch, PR$_TXDB);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Basically: read status until the transmitter is ready, then load the character into the transmitter data buffer.&lt;/p&gt;&#xA;&lt;p&gt;_MTPR, _MFPR are builtins for the 'move to/from processor register' instructions; you can look up the register numbers in any VAX handbook.  Transliterating that to MACRO-32 should be obvious enough.&lt;/p&gt;&#xA;&lt;p&gt;The same sort of thing is true on the average PDP-11, except that the console DL-11 (or similar) has status and data registers in the I/O page.  The control/status register is at 17777564, the data buffer at 17777566.&lt;/p&gt;&#xA;&lt;p&gt;Assuming the MMU is disabled, or in the usual state where kernel page 7 maps to the I/O page.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10$:  TSTB @#177564&#xA;      BEQ 10$&#xA;      MOVB CH,@#177566&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;A DZ-11 is a little harder, especially on the VAX where I imagine you'll have to set up the UBA.&lt;/p&gt;&#xA;&lt;p&gt;In either case, turning on paging complicates life further.  And, if you've truly got no OS, you'll have to initialize the processor, cache, MMU, maybe size memory, …  I'd start with the easy case&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-07-06T01:44:37.150" LastActivityDate="2020-07-06T01:44:37.150" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15488" PostTypeId="2" ParentId="15479" CreationDate="2020-07-06T03:32:43.063" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I have tried IDA Freeware version 5 with various input sources, such&#xA;as DOS EXE, DOS SYS, Binary, etc but have nor been able to obtain the&#xA;desired result of a disassembly of the whole file.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Windows ME io.sys is compressed, so a disassembly will look like random junk.  To decompress it use &lt;a href=&quot;https://rloewelectronics.com/free.htm&quot; rel=&quot;noreferrer&quot;&gt;IO8DECOMP by Rudolph R. Loew&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-07-06T03:32:43.063" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15489" PostTypeId="1" CreationDate="2020-07-06T09:04:21.890" Score="26" ViewCount="3802" Body="&lt;p&gt;The DenOfGeek article [Brew2013] has screen captures from the movie &lt;a href=&quot;https://en.wikipedia.org/wiki/Superman_III&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Superman III&lt;/em&gt;&lt;/a&gt;, in particular the early scenes in the movie where character Gus Gorman is at computer programming school.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/oL2lL.jpg&quot; alt=&quot;A screen capture from Superman III&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;The terminal used appears to be a real terminal, attached to something that is running a BASIC interpreter.&#xA;(The program listed is BASIC; albeit that the program-within-a-program that it outputs, supposedly the character's &lt;code&gt;PLOT BILATERAL CO-ORDINATES&lt;/code&gt; program, is really not; as it lacks &lt;code&gt;LET&lt;/code&gt;s and &lt;code&gt;FOR&lt;/code&gt;s and would be a &lt;code&gt;SYNTAX ERROR IN 10&lt;/code&gt;.&#xA;But this question isn't about the programming language, which is easy and covered in the likes of [Birken2008].)&#xA;It could be a home computer of the time, alternatively.&lt;/p&gt;&#xA;&lt;p&gt;It's tricky to identify &lt;em&gt;what&lt;/em&gt; terminal/home computer, though.&lt;/p&gt;&#xA;&lt;p&gt;Some observations:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There might be a logo on the plate to the right of the CRT, but it is illegible in the screen captures.&lt;/li&gt;&#xA;&lt;li&gt;There is no numeric keypad at all.  (It looks like something that could have a numeric keypad option, though.)&lt;/li&gt;&#xA;&lt;li&gt;The &lt;kbd&gt;Return&lt;/kbd&gt; key occupies a single row, rather than being a reversed &amp;quot;L&amp;quot; shape.&lt;/li&gt;&#xA;&lt;li&gt;There are arrow keys, which are on the top two rows, above &lt;kbd&gt;Return&lt;/kbd&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The arrow keys include diagonal arrows.&lt;/li&gt;&#xA;&lt;li&gt;The keys come in (at least) blue, black, white, and green.&lt;/li&gt;&#xA;&lt;li&gt;There are three knobs between the keyboard and CRT; again with illegible labels.  (My &lt;em&gt;guess&lt;/em&gt; would be brightness and vertical/horizontal adjust.)&lt;/li&gt;&#xA;&lt;li&gt;There are also, on the left hand side, what appear to be two pushbuttons.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The keyboard rules out a &lt;a href=&quot;https://en.wikipedia.org/wiki/DECmate&quot; rel=&quot;nofollow noreferrer&quot;&gt;DECmate&lt;/a&gt; or a &lt;a href=&quot;https://en.wikipedia.org/wiki/Zenith_Z-89&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zenith Z-89&lt;/a&gt;.&#xA;There is a resemblance to things like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Wang_Laboratories#Wang_OIS_2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wang OIS&lt;/a&gt; and the Wang 5536, but the keyboard and knobs are wrong.&#xA;It is not curvy enough to be an ADDS Regent or ADDS Consul, and again the knobs are wrong.&lt;/p&gt;&#xA;&lt;p&gt;And given that in the long shots several of the students in the Archibald School of Data Processing have these, it seems more likely to be something off-the-shelf rather than something that the props department dummied up.&lt;/p&gt;&#xA;&lt;p&gt;What terminal/home computer is it?&lt;/p&gt;&#xA;&lt;h1&gt;References&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Simon Brew (2013-10-23). &lt;em&gt;&lt;a href=&quot;https://denofgeek.com/movies/what-superman-3-teaches-us-about-computer-programming/&quot; rel=&quot;nofollow noreferrer&quot;&gt;What Superman 3 teaches us about computer programming&lt;/a&gt;&lt;/em&gt;. denofgeek.&lt;/li&gt;&#xA;&lt;li&gt;Mike Birken (2008-03-30). &amp;quot;&lt;a href=&quot;https://meatfighter.com/superman3/part1/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gus Gorman's Super BASIC Program&lt;/a&gt;&amp;quot;.  &lt;em&gt;Superman III Analysis&lt;/em&gt;.  Meat Fighter.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1932" LastEditorUserId="6659" LastEditDate="2020-07-11T06:49:42.313" LastActivityDate="2020-07-11T06:49:42.313" Title="What's the terminal/home computer used as a prop in the computer school in Superman 3?" Tags="&lt;identify-this-computer&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15490" PostTypeId="2" ParentId="15489" CreationDate="2020-07-06T11:36:43.680" Score="4" Body="&lt;p&gt;It's not a complete computer, but a VDU terminal to a mainframe (or possibly a minicomputer).  The same type is seen &lt;a href=&quot;https://www.youtube.com/watch?v=N7JBXGkBoFc&quot; rel=&quot;nofollow noreferrer&quot;&gt;in a completely different scene&lt;/a&gt; when he's at work, not at programming school.  Interestingly, there he's seen using a &amp;quot;light pen&amp;quot; to select from a text-based menu.  In the background can be seen a number of tape drives with the reels one above the other, which was not IBM practice.&lt;/p&gt;&#xA;&lt;p&gt;In the programming-school scenes, the display appears to have a resolution of about 32x16 characters.  I suspect this was patched in from a home microcomputer, possibly one of Atari's given their involvement elsewhere in the film's production.  In the stealing-half-cents scene, the terminal is seen to be substantially more capable.&lt;/p&gt;&#xA;&lt;p&gt;In the &lt;a href=&quot;https://www.youtube.com/watch?v=RtiPaSKlHsI&quot; rel=&quot;nofollow noreferrer&quot;&gt;kryptonite-formula scene&lt;/a&gt;, we see a font very reminiscent of the SAA5050 series teletext chips, including the use of double-height text, and he uses the light-pen again - but there's also a brief glimpse of a graphics display.  It's almost as if the production team used a BBC Micro (which was just available by then) to generate that display, and just patched it into the terminal as with the programming-school scene.  It is again obviously the same &lt;em&gt;type&lt;/em&gt; of terminal from the housing, but installed in yet a third location.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately I don't yet have a lead on the terminal itself.  Searching for terminals with a light pen interface would probably be fruitful.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-07-06T13:14:12.043" LastActivityDate="2020-07-06T13:14:12.043" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15491" PostTypeId="2" ParentId="15489" CreationDate="2020-07-06T11:45:54.177" Score="15" Body="&lt;p&gt;&lt;em&gt;[So far not an Answer, just a pointer from some Google supported memory - nice question research BTW]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are other scenes showing the terminals, for example later on, when he get's his first pay check (and the idea to round up pennies) like seen in &lt;a href=&quot;https://www.youtube.com/watch?v=N7JBXGkBoFc&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Youtube clip&lt;/a&gt;. Here they are setup in a data center (*1). Notable point here are the &lt;a href=&quot;https://youtu.be/N7JBXGkBoFc?t=90&quot; rel=&quot;nofollow noreferrer&quot;&gt;disk drives&lt;/a&gt; in the back (another &lt;a href=&quot;https://youtu.be/RtiPaSKlHsI?t=14&quot; rel=&quot;nofollow noreferrer&quot;&gt;overview seen here&lt;/a&gt;). They are most certainly OEMed CDC 844-2 storage units of ~1972, safe to be scrapped into movie use by 1980.&lt;/p&gt;&#xA;&lt;p&gt;Bad part, CDC was &lt;em&gt;the&lt;/em&gt; essential OEM manufacturer for mainframe peripherals at the time. So unless someone recognizes the exact colouring, labeling and button caps (they differ in colour from the original CDC setup), chances are slim to get an identification.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Additional find:&lt;/em&gt; &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15506/6659&quot;&gt;An answer pointing to ICL's 1900&lt;/a&gt; made me looking again, and while I couldn't find any 1900 reference, I came across a site mentioning an &lt;a href=&quot;http://www.chilton-computing.org.uk/acd/ga/p001.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;ICL 2900&lt;/a&gt; sowing a picture with &lt;a href=&quot;http://www.chilton-computing.org.uk/gallery/ral76/orig/r28666.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;ICLed CDC 844-2 drives&lt;/a&gt;. Comparing the big ICL plaque on the left side with a similar sized but &lt;a href=&quot;https://youtu.be/N7JBXGkBoFc?t=90&quot; rel=&quot;nofollow noreferrer&quot;&gt;blurry ones&lt;/a&gt; in the clip supports the theory a lot. Except, they are blue, not orange as suggested.&lt;/p&gt;&#xA;&lt;p&gt;So yes, I'd say ICL for the drives might be a great lead ... but leaving the OEM issue.&lt;/p&gt;&#xA;&lt;p&gt;Since the terminals as well are of lower function and at least as old (early 70s), it might be safe to assume they did come with the drives. In fact, all of the equipment looks rather fitting, so the prop team may have scored a full data center.&lt;/p&gt;&#xA;&lt;p&gt;So the question might be narrowed down which mainframe manufacturer of the early 70s did use the shown design.&lt;/p&gt;&#xA;&lt;p&gt;For the terminal itself, the key colouring is quite revealing as it follows standards set by keypunches (like IBM 028, Univac 1710 or alike) (*2). So it must have been designated for a mainframe environment (see the disk drive) as well it must be early on, as this kind of structuring already started to vanish in the early 1970s.&lt;/p&gt;&#xA;&lt;p&gt;It also reassembles a bit a CDC 711/713 terminal in the way the additional switches below the screen are positioned. Then again, the case shape does not match.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In fact one has to admire how hard the prop guys tried to make it right and how much the filming screwed that. Just think the incredible noise of 20+ drives, chain printers and alike. As expected many will wear earmuffs. Except, to make the scene work out, no (real) noise was present :(&lt;/p&gt;&#xA;&lt;p&gt;*2 - In fact, looking at the keys on the left and all the markings on the top row, were today numbers would be present,, it really reassembles a keypunch, not a later terminal. So what we see might be some quite early on non-IBM attempt to a data entry terminal.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-08T18:43:51.507" LastActivityDate="2020-07-08T18:43:51.507" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="15493" PostTypeId="1" CreationDate="2020-07-06T13:22:30.137" Score="8" ViewCount="279" Body="&lt;p&gt;The first widely documented &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASIC&lt;/a&gt; on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Data_General_Nova&quot; rel=&quot;nofollow noreferrer&quot;&gt;Data General Nova&lt;/a&gt; platform appears to be &lt;a href=&quot;https://en.wikipedia.org/wiki/Data_General_Extended_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Data General Extended BASIC&lt;/a&gt;. I can date it to at least 1978 due to copyrights in the manual, but I suspect it was released years before that. Bob Leedom had to have &lt;strong&gt;something&lt;/strong&gt; when he ported &lt;a href=&quot;https://en.wikipedia.org/wiki/Star_Trek_(1971_video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Star Trek&lt;/em&gt;&lt;/a&gt; circa 1974. Does anyone have a reasonable release date for Extended 1.x?&lt;/p&gt;&#xA;&lt;p&gt;Beyond Extended, were there other dialects from earlier times? The only other BASIC I get hits on for DG is &lt;a href=&quot;https://en.wikipedia.org/wiki/Data_General_Business_Basic&quot; rel=&quot;nofollow noreferrer&quot;&gt;Data General Business BASIC&lt;/a&gt;, but that's later, and I believe only ran on their larger platforms?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="851" LastEditDate="2020-07-11T08:51:47.457" LastActivityDate="2021-01-29T19:09:44.740" Title="BASIC on the Nova?" Tags="&lt;basic&gt;&lt;data-general&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15494" PostTypeId="2" ParentId="10963" CreationDate="2020-07-06T13:46:18.867" Score="0" Body="&lt;p&gt;Follow up: following the leads above, and having burrowed into the rabbit hole much deeper than intended, I think it's safe to say the ultimate answer is &lt;a href=&quot;https://en.wikipedia.org/wiki/Integer_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Integer BASIC&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Woz's dialect is (of course) well documented and directly states it was ported from HP. It dates to early 1976, when he started visiting the Homebrew meetings to demonstrate it. I suppose one could mark its &amp;quot;official&amp;quot; release to July 1976 when the Apple I was first put on sale.&lt;/p&gt;&#xA;&lt;p&gt;The other early possibility is SCELBAL, which was first detailed in February 1976 and shipped in book form a few months later. However, this initial version did not include string support, and the Strings Supplement which added that code is copyrighted to 1977. I strongly suspect it took it string functions from Integer, not HP directly, although I will check with the author on that one.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-07-06T13:46:18.867" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15495" PostTypeId="1" AcceptedAnswerId="16036" CreationDate="2020-07-06T18:16:57.820" Score="11" ViewCount="653" Body="&lt;p&gt;I happened to find out about the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rekursiv&quot; rel=&quot;noreferrer&quot;&gt;Rekursiv&lt;/a&gt; today. Rekursiv is a processor that attempted to implement OOP concepts directly at the hardware level.&lt;/p&gt;&#xA;&lt;p&gt;Since it never got fully developed, I wonder what would the performance improvements/impact of Rekursiv have been over traditional processors if it were developed?&lt;/p&gt;&#xA;" OwnerUserId="18683" LastEditorUserId="3290" LastEditDate="2020-07-07T01:35:50.237" LastActivityDate="2020-09-02T10:19:16.357" Title="Performance of the Rekursiv" Tags="&lt;hardware&gt;&lt;cpu&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15496" PostTypeId="1" AcceptedAnswerId="15497" CreationDate="2020-07-06T21:15:20.160" Score="1" ViewCount="172" Body="&lt;p&gt;What is the total size of 1040STE with 4 of these SIMMs installed?&lt;/p&gt;&#xA;&lt;p&gt;How to check the memory using software and which one?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VOEXv.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VOEXv.jpg&quot; alt=&quot;SIMM&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-07-07T07:00:02.550" Title="How much memory in this 1040STE system" Tags="&lt;memory&gt;&lt;ram&gt;&lt;atari-st&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15497" PostTypeId="2" ParentId="15496" CreationDate="2020-07-06T21:50:25.690" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What is the total size of 1040STE with 4 of these SIMMs installed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Should be 4 MiB. The chips shown are MiBit chips (1 Mi x 1). 8 of them give a Mibyte per SIMM. It also fits, as 4 MiB is the default (i.e. without additional tricks) maximum RAM for a 1040ST.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://info-coach.fr/atari/hardware/memory.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;This great page&lt;/a&gt; tells about everything you never wanted to know about Atari ST using SIMM.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How to check the memory using software and which one?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While there is an OS function to return the amount of memory installed and used, it is not displayed with the ROM tools. You will either need a dedicated program or an accessory. Above page got as well a section &lt;a href=&quot;https://info-coach.fr/atari/hardware/memory.php#Information_about_installed_memory_and_test&quot; rel=&quot;nofollow noreferrer&quot;&gt;linking examples&lt;/a&gt; for both. I would recommend the accessory, as it will be quite helpful to detect memory huggers. Then again, 4 MiB is more than needed by most ST applications, as next to all work with 1 MiB.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-06T22:04:04.693" LastActivityDate="2020-07-06T22:04:04.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15498" PostTypeId="2" ParentId="15495" CreationDate="2020-07-06T22:19:01.483" Score="12" Body="&lt;p&gt;It was never fully developed  in the sense that a complete system was built, but it was made into a card that plugged into the back plane of a Sun 3 system. We had one, and our card is shown here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZkgF3.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZkgF3.gif&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ours is now in the (local) &lt;a href=&quot;http://www.computermuseum.org.uk/fixed_pages/rekursiv1.html&quot; rel=&quot;noreferrer&quot;&gt;Computer Museum&lt;/a&gt;&#xA;.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately most of the software details are lost in the fog of past memories.&lt;/p&gt;&#xA;&lt;p&gt;However, good information is shown in the &lt;a href=&quot;http://www.merlintec.com/old-self-interest/msg00259.html&quot; rel=&quot;noreferrer&quot;&gt;page linked in the comments&lt;/a&gt;, which indicates that the hardware ran slower than the implementation of the software on the Sun 3, which eventually led to the demise of the project.&lt;/p&gt;&#xA;" OwnerUserId="611" LastEditorUserId="611" LastEditDate="2020-07-07T08:54:55.100" LastActivityDate="2020-07-07T08:54:55.100" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15499" PostTypeId="1" AcceptedAnswerId="15500" CreationDate="2020-07-07T03:08:53.193" Score="1" ViewCount="418" Body="&lt;p&gt;Sorry, the book of adventure #1 is disappeared. --Dragon Quest III&lt;/p&gt;&#xA;" OwnerUserId="18677" LastActivityDate="2020-07-07T05:23:14.990" Title="What is the reason of losing of save data in some NES games? How to prevent?" Tags="&lt;nes&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15500" PostTypeId="2" ParentId="15499" CreationDate="2020-07-07T04:10:15.633" Score="7" Body="&lt;p&gt;&lt;em&gt;Dragon Quest III&lt;/em&gt; on the NES uses static RAM for saving. The static RAM stores the state of your game, but it requires power. The power is supplied by an on-board battery soldered to the circuit board.&lt;/p&gt;&#xA;&lt;p&gt;You can see in &lt;a href=&quot;https://datomatic.no-intro.org/sources%20media/Nintendo%20-%20Nintendo%20Entertainment%20System/20180511_061342_0615_pcb_front.jpg&quot; rel=&quot;noreferrer&quot;&gt;this image&lt;/a&gt; there are two MOSEL branded RAM chips, one of which is used for save games&lt;sup&gt;1&lt;/sup&gt;. The circular object is a CR2032 coin cell that provides power to keep the savegame RAM active while the game is not inside the console and powered on.&lt;/p&gt;&#xA;&lt;p&gt;It's most likely that &lt;strong&gt;this battery has become exhausted with age and is no longer able to power the save RAM&lt;/strong&gt;. If so, you will need to replace this battery by dismantling the cartridge and substituting another battery of the same type and mounting.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://gaming.stackexchange.com/questions/629/how-can-i-replace-the-nes-cartridge-battery?rq=1&quot;&gt;https://gaming.stackexchange.com/questions/629/how-can-i-replace-the-nes-cartridge-battery?rq=1&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A more involved alternative may to remove the static RAM entirely and replace it with non-volatile FeRAM which is similar but doesn't lose its contents when the system is off, but this relies on you being able to find a substitute that has the same physical layout as the original static RAM (or an adapter daughterboard).&lt;/p&gt;&#xA;&lt;p&gt;Alternatively, other causes of savegame loss include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A badly maintained console communicating with the cartridge improperly - if your console is old it may need recapping or its contacts cleaning.&lt;/li&gt;&#xA;&lt;li&gt;Physical shock to the system - if the contacts are dirty, then knocking the system or pulling on controller leads might cause improper communication and savegame corruption.&lt;/li&gt;&#xA;&lt;li&gt;Powering off the system during a save - it's best to wait a few seconds after the game has reported that the save has completed, just in case. Also, old Nintendo games sometimes instructed the player to 'hold RESET and turn the power off' when saving for the most reliable save. &lt;a href=&quot;https://gaming.stackexchange.com/questions/229723/why-is-it-needed-to-hold-reset-when-powering-off-the-nes&quot;&gt;https://gaming.stackexchange.com/questions/229723/why-is-it-needed-to-hold-reset-when-powering-off-the-nes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Game bugs - certain sequences of events in the game might cause the save game to be destroyed, e.g. carrying too many different item types. You'll have to look this up for your specific game and just avoid these circumstances. Examples of save game ruining glitches: &lt;a href=&quot;https://donkeykong.fandom.com/wiki/Castle_Crush_Glitch&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Donkey Kong Country&lt;/em&gt;&lt;/a&gt;, &lt;a href=&quot;https://finalfantasy.fandom.com/wiki/Sketch_bug&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Final Fantasy VI&lt;/em&gt;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; I believe the other RAM chip holds graphics data - RAM is used here instead of ROM to allow it to be rewritten during gameplay for animated tiles or just general ease of programming.&lt;/p&gt;&#xA;" OwnerUserId="18684" LastEditorUserId="18684" LastEditDate="2020-07-07T05:23:14.990" LastActivityDate="2020-07-07T05:23:14.990" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15501" PostTypeId="2" ParentId="2244" CreationDate="2020-07-07T04:38:39.010" Score="-1" Body="&lt;p&gt;Some games uses a pseudo random generator simpler than modern.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Gomoku Narabe&lt;/em&gt; has a pseudo random generator uses RAM space 0038~003F, iterates once per frame. When fix to 0000000000000000 using cheat, the opening is fixed.&lt;/p&gt;&#xA;" OwnerUserId="18677" LastActivityDate="2020-07-07T04:38:39.010" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15502" PostTypeId="2" ParentId="10963" CreationDate="2020-07-07T06:57:01.290" Score="5" Body="&lt;p&gt;Sinclair's Basic used the slicing syntax for string manipulation. It even uses it as lvalue. It is imho very clever as it allows some operations without generating lot of garbage as the Microsoft way does. For example: replacing 2 character in the middle of a string&lt;/p&gt;&#xA;&lt;p&gt;Sinclair syntax:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; LET A$=&amp;quot;123456789&amp;quot;&#xA; LET A$(4 TO 5)=&amp;quot;ab&amp;quot;&#xA; PRINT A$&#xA;&#xA; 123ab6789&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Microsoft syntax:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; A$=&amp;quot;123456789&amp;quot;&#xA; A$=LEFT$(A$,4)+&amp;quot;ab&amp;quot;+MID$(A$,6): REM Only if Basic support 2 parameters MID$&#xA; ?A$&#xA;&#xA; 1234ab789   (but internally 4 temporaries were created &amp;quot;123456789&amp;quot;,&amp;quot;1234&amp;quot;,&amp;quot;ab&amp;quot; and &amp;quot;789&amp;quot;.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(MS example might be off by 1)&lt;/p&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="15930" LastEditDate="2020-07-07T10:48:13.883" LastActivityDate="2020-07-07T10:48:13.883" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15503" PostTypeId="2" ParentId="15496" CreationDate="2020-07-07T07:00:02.550" Score="0" Body="&lt;p&gt;4MiB was the maximum that could be installed in the 1040STE. The MMU didn't allow for more.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastActivityDate="2020-07-07T07:00:02.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15504" PostTypeId="1" AcceptedAnswerId="15507" CreationDate="2020-07-07T10:23:29.207" Score="5" ViewCount="1275" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiki&lt;/a&gt; IBM System /360 had only 32 and 64-bits registers for data.&lt;/p&gt;&#xA;&lt;p&gt;I'm wondering if they used 8-bits symbol it means that they stored it in a 32-bits register.&lt;/p&gt;&#xA;&lt;p&gt;Did they have any performance improvements for such decision? If so, why do we have 8-bits registers today?&lt;/p&gt;&#xA;&lt;p&gt;Moreover, do we have any performance improvements if we store ASCII symbol in 8-bits register vs 32-bits register?&lt;/p&gt;&#xA;" OwnerUserId="18599" LastEditorUserId="6659" LastEditDate="2020-07-07T15:06:48.753" LastActivityDate="2020-07-08T12:05:13.983" Title="Why did IBM System /360 have byte addressable RAM, but didn't have 8 bits registers" Tags="&lt;ibm&gt;&lt;s360&gt;&lt;ibm360&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15505" PostTypeId="2" ParentId="15504" CreationDate="2020-07-07T11:26:43.213" Score="6" Body="&lt;p&gt;There is no downside I can see to storing an 8-bit quantity in a 32-bit register if you already have the 32-bit register.&lt;/p&gt;&#xA;&lt;p&gt;Load/store take the same amount of time.  Memory transfers are at least word-sized (maybe larger) anyway.&lt;/p&gt;&#xA;&lt;p&gt;Arithmetic in general is not faster on smaller binary numbers.&lt;/p&gt;&#xA;&lt;p&gt;You'd need more opcodes or addressing modes, potentially consuming more bits in instructions.&lt;/p&gt;&#xA;&lt;p&gt;It would be adding hardware for no compensating improvement.&lt;/p&gt;&#xA;&lt;p&gt;As mentioned elsewhere, some microprocessor architectures have &amp;quot;8 bit registers&amp;quot; for strict compatibility with their predecessors.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;System/360 had a specific design goal of character addressability:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;The general addressing system would have to be able to refer to small units of bits, preferably the unit used for characters&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(&lt;a href=&quot;https://www.researchgate.net/publication/220498837_Architecture_of_the_IBM_System360&quot; rel=&quot;nofollow noreferrer&quot;&gt;Architecture of the IBM System/360&lt;/a&gt;, by Brooks, Blaauw, and Amdahl)&lt;/p&gt;&#xA;&lt;p&gt;That explains the presence of byte addressing. For the reasons already discussed in the various answers here, that does not imply the need for byte registers.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-07-08T12:05:13.983" LastActivityDate="2020-07-08T12:05:13.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15506" PostTypeId="2" ParentId="15489" CreationDate="2020-07-07T11:51:10.920" Score="3" Body="&lt;p&gt;I would guess that all of the computer props are from an ICL 1900 family mainframe.&lt;/p&gt;&#xA;&lt;p&gt;The tape drives are almost certainly from an ICL 1900. The disk drives are probably from an ICL 1900, but to be honest disk drives all look the same to me. I cannot find a match for the terminal but the orange on the terminal in the original image is ICL orange.&lt;/p&gt;&#xA;" OwnerUserId="18685" LastActivityDate="2020-07-07T11:51:10.920" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15507" PostTypeId="2" ParentId="15504" CreationDate="2020-07-07T12:56:49.987" Score="11" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why did IBM System /360 have byte addressable RAM, but didn't have 8 bits registers&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;These issues are unrelated.&lt;/p&gt;&#xA;&lt;p&gt;Registers are about addressing, so they need to hold an address word. Byte addressable RAM in turn is needed to handle bytewide data - most notable characters and strings. There is no inherent need that a CPU must have byte sized registers as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;According to wiki IBM System / 360 had only 32 and 64-bits registers for data.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;True.&lt;/p&gt;&#xA;&lt;p&gt;(Except, the /360 had only one size, 32 bit. 64 was when combining two for a few (essentially two) instructions)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm wondering if they used 8-bits symbol it means that they stored it in a 32-bits register.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, yes, getting an 8 bit value into a register was a pain in the ass (*1)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did they have any performance improvements for such decision?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, as one rarely had to load/store an 8 bit value to/from a register. Registers of a /360 are meant mainly for address handling/calculation plus integer arithmetic which essentially is the same. All register to register instructions (Like &lt;code&gt;AR&lt;/code&gt; for adding two registers) are 32 bit only. Memory structures to interact with registers are words (32 bit) and halfwords (16 bit), the later always extended to 32 Bit when fetched (usually sign extended). Yielding for example two add instructions, &lt;code&gt;A&lt;/code&gt; to add a word and &lt;code&gt;AH&lt;/code&gt;to add a (sign extended) halfword.&lt;/p&gt;&#xA;&lt;p&gt;Registers were (usually) never used to handle character data, as the /360 wasn't a strict accumulator (set) machine, but as well a memory to memory architecture (*2). A string would be transfered with a single &lt;code&gt;MVC dest,src&lt;/code&gt; instruction (*3). There was no need running a loop to fetch and transfer single bytes. Similar a string compare was done by a &lt;code&gt;CLC&lt;/code&gt;. This of course included logic operations as well, two strings could be ANDed, ORed or XORed. Nifty, isn't it?&lt;/p&gt;&#xA;&lt;p&gt;It can to some degree compared with the x86's string instructions, just sans the cumbersome setup.&lt;/p&gt;&#xA;&lt;p&gt;In fact, this approach does impact performance in a positive way. String instructions formulate a task on higher level than byte access, allowing hardware to handle these strings in bigger chunks than single bytes. After all, already back then memory interface was not only independent of word size, but as well much wider. Were low end machines used a 16 bit memory interfece, high end had already in the 1970s up to 256 bit wide memory access (*4). That's 32 bytes per fetch much like modern GPU's isn't it? To transfer a 20 byte string only 2 to 4 fetches had to be made, which is way better than doing 40, isn't it (*5)?&lt;/p&gt;&#xA;&lt;p&gt;All this came due the natural benefit of string orientated instructions, speeding up operations way before adding caches and alike. Intel's (and many modern ISA) never had that advantage and needed to invest way more into fetch/write access bundling strategies and, above all, multi level cache.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If so, why do we have 8-bits registers today?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I assume you're talking about intel x86, right?&lt;/p&gt;&#xA;&lt;p&gt;Sorry to disappoint you, but there are none. The registers are 64 bit and so called 8 bit registers are only aliases to address part of one. These aliases are needed still needed to handle any kind of byte stream - like this web page.&lt;/p&gt;&#xA;&lt;p&gt;In some way they can be seen as left over from history. Keep in mind, Assembler is an abstract way to look at/describe a CPU's working, in some cases representing how the underlaying hardware works, but more often it is not. Of course, one could simply make up a 'new' Assembler syntax (*6) eliminating them. Maybe like Motorola's modifiers &lt;code&gt;.b&lt;/code&gt; or alike. It's always good to not confuse the logic model presented by books and Assemblers with implementation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Moreover, do we have any performance improvements if we store ASCII symbol in 8-bits register vs 32-bits register?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As said, there are none, the 8 bit values get always promoted into the 32 (64) bit registers. But there is an advantage not visible from the ISA/Assembler level: &lt;strong&gt;Designers may give certain instructions a shorter encoding&lt;/strong&gt;. So for example Adding an immediate to a register will take 2 bytes opcode plus the value, while doing so with AL/AX only takes 1 byte plus value.&lt;/p&gt;&#xA;&lt;p&gt;Up to the 80286 there were only two basic data types, 8 and 16 bit. When the 386 was to be made they had the need to introduce another basic data type for 32 Bit. But there was not way to squeeze it into the encoding, except adding a prefix byte for it. Not really cool, as it would bloat 32 bit code with next to all register instructions needing another byte for encoding. So they settled to a mode were all previous 16 bit encodings now meant 32 bit (*7), while keeping 8 bit as first class member for character handling (*8).&lt;/p&gt;&#xA;&lt;p&gt;So there is the advantage: &lt;strong&gt;In addition of lower amount of data to be moved, the instruction doing so are shorter as well, resulting in less code fetch and thus higher thruput&lt;/strong&gt;. Which of course still does not make up the penalty of not having simple to use high level string instructions.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Ok, not really, but it (usually) took two instructions for clearing and inserting the character: &lt;code&gt;XR Rx,Rx&lt;/code&gt; and &lt;code&gt;IC Rx,addr&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;*2 - The /360 is essential a unification of the three prior CPU families (1401, 1620 and 7090) with different structures (decimal character, decimal numeric and FP/integer word orientated). Yielding a machine which is less of a one size fits all, but a toolset covering all. One could see it as unifying five ISA approaches:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Integer&lt;/li&gt;&#xA;&lt;li&gt;Floating point&lt;/li&gt;&#xA;&lt;li&gt;Decimal (character-oriented)&lt;/li&gt;&#xA;&lt;li&gt;Decimal BCD&lt;/li&gt;&#xA;&lt;li&gt;String processing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;*3 - Well, up to 256 bytes that is. for more than 256, a &lt;code&gt;MVCL&lt;/code&gt; had to be set up, able to handle up to 16 Magebytes in a single instruction - including fillup mechanic :)&lt;/p&gt;&#xA;&lt;p&gt;*4 - Today one might call it the memory bus, except, it was't a bus, but the interface between memory and CPU, handled by a dedicated unit on each side.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Due the way the micro program was structured, the average number of fetches was only slightly above 2. close to optimum.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Like NEC did for their &lt;a href=&quot;https://www.ceibo.com/eng/datasheets/NEC-V20-V30-Users-Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;V-series 8086 compatible CPU&lt;/a&gt;'s. Here the registers were named AW...DW instead of AX..DX, IX/IY instead of SI/DI, DS0/DS1 instead of DS/ES.&lt;/p&gt;&#xA;&lt;p&gt;*7 - It's &lt;strong&gt;WAY&lt;/strong&gt; more complicated than that, but that's material for a question of its own (at least one).&lt;/p&gt;&#xA;&lt;p&gt;*8 - Noone back then would have thought we could settle so soon for UCS2 or UCS4&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-07T15:17:32.857" LastActivityDate="2020-07-07T15:17:32.857" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15508" PostTypeId="1" CreationDate="2020-07-05T09:32:52.627" Score="11" ViewCount="258" Body="&lt;p&gt;From the history of &lt;a href=&quot;https://multicians.org&quot; rel=&quot;noreferrer&quot;&gt;Multics&lt;/a&gt;, I found that Project MAC was established on July 1, 1963 by MIT for the development of the Multics operating system and later GE (General Electric) and AT&amp;amp;T's Bell Labs joined the project in Aug and Nov. 1964 respectively.&lt;/p&gt;&#xA;&lt;p&gt;The history of Multics is interesting because the failure of its development led to the development of Unix which is now used in the form of BSD and macOS/iOS and further we have widely used Unix-like operating systems e.g. GNU+Linux.&lt;/p&gt;&#xA;&lt;p&gt;But from the history of Multics, I couldn't find any information about &lt;strong&gt;who had coined the term Multics and when.&lt;/strong&gt; The only thing related to its naming known to me is &amp;quot;&lt;strong&gt;Multi&lt;/strong&gt;plexed Information and &lt;strong&gt;C&lt;/strong&gt;omputing &lt;strong&gt;S&lt;/strong&gt;ervice.&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="12384" OwnerDisplayName="Pandya" LastEditorUserId="3290" LastEditDate="2020-07-08T06:11:03.037" LastActivityDate="2020-12-20T19:07:03.947" Title="When was the term Multics (operating system) coined and by whom?" Tags="&lt;history&gt;&lt;terminology&gt;&lt;multics&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15509" PostTypeId="1" CreationDate="2020-07-07T20:02:35.397" Score="2" ViewCount="295" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.m.wikipedia.org/wiki/IBM_System/360&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiki&lt;/a&gt; IBM System 360 had byte addressable RAM.&lt;/p&gt;&#xA;&lt;p&gt;Previously IBM had machine with word addressable memory.&#xA;Did they make a switch for comparability between different machines?&lt;/p&gt;&#xA;&lt;p&gt;Or it was just performance or money or single symbol size reasoning behind it?&lt;/p&gt;&#xA;" OwnerUserId="18599" LastEditorUserId="18599" LastEditDate="2020-07-07T20:28:01.663" LastActivityDate="2020-07-08T14:09:39.987" Title="Why did IBM System 360 have byte addressable RAM" Tags="&lt;ibm&gt;&lt;ram&gt;&lt;ibm360&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15510" PostTypeId="2" ParentId="15489" CreationDate="2020-07-07T20:42:56.900" Score="3" Body="&lt;p&gt;I'm almost certain the terminal in the image is from an ICL 750x, likely a 7501 or 7503.&lt;/p&gt;&#xA;&lt;p&gt;As you can see in &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/5/5d/ICL_7503%2C_stacja_transmisji_danych_%28I197411%29.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this low-quality image&lt;/a&gt;, the casing layout of the terminal appears identical - not only in general layout, but also in the position and coloration of the blank panel on the right as well as the white/black/white strip along the bottom of the display that labels the controls on the right (you can see the text, not the controls themselves which are covered by the pad).&lt;/p&gt;&#xA;&lt;p&gt;On the keyboard itself, one can see the white keys on the upper right, and it appears that this model is also lacking a numeric keypad - although it's hard to say with the paper pad covering that area.&lt;/p&gt;&#xA;&lt;p&gt;Note that the 750x line went through many changes and later models look very different. &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/3/38/ICL_7561_terminal.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;This link&lt;/a&gt; shows the later models, which had a separate keyboard and different shaping of the case around the display.&lt;/p&gt;&#xA;&lt;p&gt;Much more convincing is the printer on the right-hand side of the image linked above. It is identical to the one seen in the movie clip that was posted earlier. Go to that clip and move to the 15 second mark and you'll see it's the same one. Someone mentioned that many of the bits appeared to be OEMed from CDC, and while I'm not terribly familiar with their printers, examples I found the long extension on the front in none of the CDC models I could find, while it is rather prominently visible in the image above.&lt;/p&gt;&#xA;&lt;p&gt;In the original image posted in the question, the top section of the blank panel cannot be seen. This area holds the model number, which you can &lt;em&gt;just&lt;/em&gt; make out in the first link. In the youtube clip, this section has been covered over with what appears to be a piece of paper. Finally, the color of the panel in the first image is clearly &amp;quot;ICL orange&amp;quot;, as pointed out earlier, but one can also see it in the later-model version of the terminal which uses it for the back of the case.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2020-07-09T14:24:34.390" LastActivityDate="2020-07-09T14:24:34.390" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15511" PostTypeId="2" ParentId="15509" CreationDate="2020-07-07T22:22:45.607" Score="0" Body="&lt;p&gt;The 360 was designed as an all-purpose system. That means that among other things, it should be suitable for processing text.&lt;/p&gt;&#xA;&lt;p&gt;Nowadays, a computer for processing text could perfectly well go with 32 bit addressing unit and take the attitude that you always use Unicode, but in those days Unicode didn't exist and it would've been too expensive to use 32 bits per character. You want a smallest addressing unit that is reasonably efficient for storing characters.&lt;/p&gt;&#xA;&lt;p&gt;6 bits mean uppercase only, and they were probably already thinking about word processing, which really wants lowercase.&lt;/p&gt;&#xA;&lt;p&gt;7 bits would be a perfect match for ASCII, but engineers would instinctively recoil from basing the word sizes on a prime number.&lt;/p&gt;&#xA;&lt;p&gt;8, 9, 10 all work well. Of those, 8 has the lowest overhead per character.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-07-07T22:22:45.607" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15512" PostTypeId="1" AcceptedAnswerId="15514" CreationDate="2020-07-08T00:54:16.617" Score="17" ViewCount="8207" Body="&lt;p&gt;In an answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15509/why-did-ibm-system-360-have-byte-addressable-ram&quot;&gt;Why did IBM System 360 have byte addressable RAM&lt;/a&gt; I wrote regarding the choice of byte size:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;7 bits would be a perfect match for ASCII, but engineers would instinctively recoil from basing the word sizes on a prime number.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(Okay, someone else pointed out that EBCDIC actually uses 8 bits, but that would only be a concern for IBM in particular.)&lt;/p&gt;&#xA;&lt;p&gt;Now it occurs to me to wonder, did anyone ever build a computer with a 7 bit byte? Or with a 14, 28 or 56-bit word?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-07-10T02:10:31.120" Title="Did any computer use a 7-bit byte?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;memory-layout&gt;" AnswerCount="7" CommentCount="13" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15513" PostTypeId="2" ParentId="15512" CreationDate="2020-07-08T01:07:45.993" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/28-bit_computing&quot; rel=&quot;nofollow noreferrer&quot;&gt;Norsk Data ND-505&lt;/a&gt; had a 28-bit address bus.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-07-08T01:07:45.993" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15514" PostTypeId="2" ParentId="15512" CreationDate="2020-07-08T01:12:59.657" Score="38" Body="&lt;p&gt;The PDP-10 had 'byte instructions' that could process a sequence of bytes of size 1 to 36 bits.  The byte pointer was a word containing an 18-bit word address (and the usual index/indirect indications) plus position and size of the byte within the word.&lt;/p&gt;&#xA;&lt;p&gt;It was common to use 7-bit byte sequences for ASCII text, which gave 5 characters per word and one (usually) unused bit.&lt;/p&gt;&#xA;&lt;p&gt;There were monitor calls (system calls) that accepted strings of 7-bit characters packed in this way.&lt;/p&gt;&#xA;&lt;p&gt;So: at the hardware level, bytes were variable-sized.  At the software convention level, a byte was frequently 7 bits.&lt;/p&gt;&#xA;&lt;p&gt;See section 2.3 in the &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp10/KA10/DEC-10-HGAA-D_PDP-10_System_Reference_Manual_May1968.pdf&quot; rel=&quot;noreferrer&quot;&gt;KA-10 system reference manual&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-07-08T01:28:45.270" LastActivityDate="2020-07-08T01:28:45.270" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15515" PostTypeId="2" ParentId="15509" CreationDate="2020-07-08T02:49:31.977" Score="2" Body="&lt;p&gt;Programmers do need to process characters from memory, and characters are generally smaller than the machine word.  The architectural possibilities seem to be:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Instructions that only read/write words. Programmer must use explicit shift, mask, logical-or to operate on characters.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There are special instructions that use a &amp;quot;character address&amp;quot; that augments the memory address with details of which character is needed. (The CPU transfers whole words and has internal logic to extract/insert bytes)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The character address format is used for all instructions: this is &amp;quot;byte addressable memory&amp;quot;.  (It does not necessarily follow that the memory itself can transfer on an arbitrary byte boundary; CPU-memory traffic may still be word-oriented).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Consider a machine with 32-bit words and 8-bit characters. You can specify 'which character' as a 2-bit integer.  To operate on a (address-of-word, character-in-word) pair, it's convenient to be able to pack them as a 32-bit value: 30 bit address, 2 bit character number.&lt;/p&gt;&#xA;&lt;p&gt;If you put the character number at the low end of the 32-bit value, 30-bit address at the high end, and use that form of address in all instructions, you've just invented byte-addressed memory.&lt;/p&gt;&#xA;&lt;p&gt;In this &lt;a href=&quot;https://en.wikipedia.org/wiki/Just-so_story&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;just-so story&amp;quot;&lt;/a&gt;, it looks like an obvious progression. Mind you, I say that with hindsight (though hindsight that comes from having programmed all 3 types of machines).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Footnote: the ICL 1900 had a 'character modifier' but the 2-bit character selector is at the high end of the word rather than the low end.  Ah, so close.  Though the 24-bit 1900 was impoverished for address bits, so could not have afforded general character-addressing anyway.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-07-08T02:49:31.977" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15516" PostTypeId="1" AcceptedAnswerId="15527" CreationDate="2020-07-08T04:24:05.700" Score="13" ViewCount="3065" Body="&lt;p&gt;I’m trying to figure out when IBM switched to ASCII and when ASCII became a worldwide standard.&lt;/p&gt;&#xA;&lt;p&gt;Moreover, did IBM make ASCII standard worldwide?&lt;/p&gt;&#xA;&lt;p&gt;What I have found:&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://en.m.wikipedia.org/wiki/BCD_(character_encoding)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;, IBM System /360 had EBCDIC charset. It was an eight-bit character encoding, developed separately from the seven-bit ASCII encoding scheme.&lt;/p&gt;&#xA;&lt;p&gt;On March 11, 1968, U.S. President Lyndon B. Johnson mandated that all computers purchased by the United States Federal Government support ASCII:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;All computers and related equipment configurations brought into the&#xA;Federal Government inventory on and after July 1, 1969, must have the&#xA;capability to use the Standard Code for Information Interchange&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also I have found the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;operating systems running on the IBM PC and its descendants use ASCII,&#xA;as did AIX/370 and AIX/390 running on System/370 and System/390&#xA;mainframes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Is it safe to say that IBM moved to ASCII starting from System /370?&lt;/p&gt;&#xA;&lt;p&gt;If so, is it safe to say that IBM started use ASCII from 1970s?&lt;/p&gt;&#xA;&lt;p&gt;And if so, is it safe to say that System /370 had many clones, therefore ASCII became popular worldwide?&lt;/p&gt;&#xA;" OwnerUserId="18599" LastEditorUserId="6659" LastEditDate="2020-07-10T13:01:38.963" LastActivityDate="2020-07-19T22:36:02.237" Title="When did IBM start to use ASCII?" Tags="&lt;ibm&gt;&lt;ascii&gt;&lt;ibm360&gt;&lt;ebcdic&gt;" AnswerCount="5" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15517" PostTypeId="2" ParentId="15504" CreationDate="2020-07-08T05:44:44.700" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Did they have any performance improvements for such decision? If so, why do we have 8-bits registers today?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Most 32-bit non-x86 CPU types today still only have 32-bit registers but they can access memory byte-wise. Examples are ARM, MIPS, PowerPC, Sparc, TriCore, RH850, SH CPUs and there are a lot more.&lt;/p&gt;&#xA;&lt;p&gt;So your observation is not something which is typical for the S/360, but it is something which is typical for a lot of CPU types.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm wondering if they used 8-bits symbol it means that they stored it in a 32-bits register.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I don't know about the S/360, but in modern CPUs having only 32-bit registers, you would load the byte into the low 8 bits and set the upper 24 bits to zero if the value is an unsigned byte. If it is a signed byte, you typically sign-extend the low 8 bits to 32 bits.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Moreover, do we have any performance improvements if we store ASCII symbol in 8-bits register vs 32-bits register?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes and no:&lt;/p&gt;&#xA;&lt;p&gt;On an x86 CPU, we can use two different 8-bit registers (for example &lt;code&gt;AH&lt;/code&gt; and &lt;code&gt;AL&lt;/code&gt;) instead of a single 32-bit register (&lt;code&gt;EAX&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Having more registers available allows more efficient programs because less memory accesses are needed.&lt;/p&gt;&#xA;&lt;p&gt;On a m68k CPU, you can either use a certain 8-bit register or the corresponding 32-bit register. So you don't have the advantage of having twice the number of registers.&lt;/p&gt;&#xA;&lt;p&gt;However, the early m68k CPUs (for example 68000 and 68008) required more time for performing 32-bit operations than for performing 8- and 16-bit operations; so using the 8-bit register was faster.&lt;/p&gt;&#xA;&lt;p&gt;For modern 32-bit CPUs this is no longer the case. And I think it was also not the case for the S/360.&lt;/p&gt;&#xA;&lt;p&gt;For this reason, using an 8-bit register instead of a 32-bit register would bring no performance benefit unless you could use more 8-bit registers instead of a single 32-bit one (e.g. &lt;code&gt;AL&lt;/code&gt; and &lt;code&gt;AH&lt;/code&gt; instead of &lt;code&gt;EAX&lt;/code&gt;).&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2020-07-08T05:44:44.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15518" PostTypeId="2" ParentId="15516" CreationDate="2020-07-08T07:54:13.673" Score="19" Body="&lt;p&gt;IBM started using ASCII before 1970; &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2260&quot; rel=&quot;noreferrer&quot;&gt;the 2260 terminal&lt;/a&gt;, released in 1964, used the unpublished (but ratified) 1965 version of the ASA X3.4 standard.&lt;/p&gt;&#xA;&lt;p&gt;IBM mainframes still use EBCDIC, so I don’t think their popularity had much bearing on the popularity of ASCII (but other encodings’ popularity influenced IBM mainframes: their instruction set includes conversion instructions). The popularity of ASCII is overestimated from a Western perspective too: most Asian markets used other character encodings, and even European markets used more than ASCII (but European encodings include ASCII as a subset).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-07-08T07:54:13.673" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15519" PostTypeId="1" CreationDate="2020-07-08T08:52:50.930" Score="0" ViewCount="359" Body="&lt;p&gt;4GB Compact Flash&#xA;KS 3.1 40.68&#xA;WB3.1&#xA;Latest WinUAE&lt;/p&gt;&#xA;&lt;p&gt;I just created a Compact Flash (compatible Transcend) partitions under Workbench on latest WinUAE using &lt;a href=&quot;https://johan.driessen.se/posts/Setting-up-a-Compact-Flash-card-with-Classic-Workbench-and-WHDLoad-for-Amiga-600-1200/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; guide. Despite following the steps my CF doesn't show up in WB, therefore I cannot format partition.&lt;/p&gt;&#xA;&lt;p&gt;I can format it to Windows and use it alright. But each time I clean it in diskpart and set partitions again under WinUAE it just doesn't show. I tried to mount it on IDE auto, UAEHF.DEVICE, SCSI. Still doesn't show up.&lt;/p&gt;&#xA;&lt;p&gt;When I go to HDTools, however, it shows as one partition used not 2 or 3 I created. I don't have other card handy now, anyway to fix it before it arrives?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="3316" LastEditDate="2020-08-07T18:12:59.363" LastActivityDate="2021-05-13T18:02:45.277" Title="CF partitions not showing up in Workbench" Tags="&lt;amiga&gt;&lt;hard-disk&gt;&lt;file-system&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15520" PostTypeId="2" ParentId="15512" CreationDate="2020-07-08T09:04:49.627" Score="15" Body="&lt;p&gt;The VT52 text terminal certainly doesn't qualify as a full computer, but it does have a processor running software out of a ROM.  The RAM holding the displayed text is 2048 7-bit bytes.  The character generator ROM is also 7 bits wide.&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2020-07-08T16:05:49.730" LastActivityDate="2020-07-08T16:05:49.730" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15521" PostTypeId="2" ParentId="4672" CreationDate="2020-07-08T11:16:42.993" Score="2" Body="&lt;p&gt;Is 1949 early enough?&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Mark_1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Manchester Mark 1&lt;/a&gt; had 20-bit wide instructions which were conventionally written as four 5-bit characters using a variation on &lt;a href=&quot;https://en.wikipedia.org/wiki/ITA2&quot; rel=&quot;nofollow noreferrer&quot;&gt;teleprinter code&lt;/a&gt; which Alan Turing adapted for the purpose by replacing control codes with printable characters so that &lt;em&gt;all&lt;/em&gt; instructions and data could be written as text.&lt;/p&gt;&#xA;&lt;p&gt;One might suggest this is cheating because all machine code can be written in e.g. hexadecimal to avoid ASCII control codes, or because it's not ASCII (&lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;which didn't exist until the 1960s&lt;/a&gt;). However, since the entire &lt;em&gt;point&lt;/em&gt; of the exercise was to be able to enter text which can be executed directly, it surely counts.&lt;/p&gt;&#xA;&lt;p&gt;Similar adaptations of ASCII also exist, e.g. ye olde &lt;a href=&quot;https://en.wikipedia.org/wiki/Code_page_437&quot; rel=&quot;nofollow noreferrer&quot;&gt;CP437&lt;/a&gt; which has glyphs for all 256 values. Some very large C=64 programs also shove code and data into the text-mode buffer (what with it being the only spare memory left) and you can watch the &lt;a href=&quot;https://en.wikipedia.org/wiki/PETSCII&quot; rel=&quot;nofollow noreferrer&quot;&gt;PETSCII&lt;/a&gt; characters twinkle on the screen as it executes.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2020-07-08T11:16:42.993" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15522" PostTypeId="1" CreationDate="2020-07-08T13:08:59.190" Score="57" ViewCount="13333" Body="&lt;p&gt;I was interested in a &lt;a href=&quot;https://kotaku.com/the-designer-of-the-nes-dishes-the-dirt-on-nintendos-ea-1844296906&quot; rel=&quot;noreferrer&quot;&gt;recent interview&lt;/a&gt; of Masayuki Uemura, one of the engineers who designed the Nintendo Famicom in the early 80s.  During initial design phase of the Famicom, one of the first things he says he did was reverse engineer the video game consoles of the time.  This quote from him of this interview caught my interest:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I had a semiconductor manufacturer dissolve the plastic covering on&#xA;the chips to expose the wiring underneath. I took pictures, blew them&#xA;up, and looked at the circuitry to understand it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Exactly what process is he talking about?  At a time when ICs were of low complexity (compared today), could you actually see each transistor on the silicon and reverse engineer it?&lt;/p&gt;&#xA;" OwnerUserId="18692" LastActivityDate="2020-07-30T21:27:47.260" Title="Could you reverse engineer silicon just by looking at it?" Tags="&lt;6502&gt;&lt;nintendo&gt;&lt;atari&gt;" AnswerCount="8" CommentCount="12" FavoriteCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15523" PostTypeId="2" ParentId="15522" CreationDate="2020-07-08T13:15:14.193" Score="80" Body="&lt;p&gt;With a powerful enough microscope, you can see each transistor. Reverse-engineering silicon then boils down to carefully removing each layer (ceramic or plastic to expose the chip, then each metal layer), taking detailed photographs, and figuring out what each part does. For CPUs of the era, this was already possible in the early eighties.&lt;/p&gt;&#xA;&lt;p&gt;Ken Shiriff does this nowadays on older chips; he just posted a detailed example of this process on &lt;a href=&quot;http://www.righto.com/2020/06/a-look-at-die-of-8086-processor.html&quot; rel=&quot;noreferrer&quot;&gt;the Intel 8086&lt;/a&gt;. Michael Steil famously reverse-engineered the 6502 nearly ten years ago, and &lt;a href=&quot;https://www.pagetable.com/?p=517&quot; rel=&quot;noreferrer&quot;&gt;gave a great presentation on the topic at CCC&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-07-08T13:19:47.043" LastActivityDate="2020-07-08T13:19:47.043" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15524" PostTypeId="2" ParentId="15509" CreationDate="2020-07-08T14:09:39.987" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;According to wiki IBM System 360 had byte addressable RAM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[Considering this and the title&lt;/em&gt; &amp;quot;Why did IBM System 360 have byte addressable RAM&amp;quot; &lt;em&gt;it feels as there's a mixup about what addressing and RAM means. See some thoughts about that at the end)]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Previously IBM had machine with word addressable memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. Only very few.&lt;/p&gt;&#xA;&lt;p&gt;IBM did make all sorts of machines, including the &lt;strong&gt;bit&lt;/strong&gt; addressable as explained &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15327/6659&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15307/6659&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In detail the most used machines are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1401 used byte addressing - at the time called character addressing - with 6 bit bytes&lt;/li&gt;&#xA;&lt;li&gt;1620 used decimal addessing with decimal bytes (one digit per byte)&lt;/li&gt;&#xA;&lt;li&gt;1710 - see 1620&lt;/li&gt;&#xA;&lt;li&gt;7030 used bit addressing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Speaking of 7030, a &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_700/7000_series#Architectures&quot; rel=&quot;nofollow noreferrer&quot;&gt;700/7000 family&lt;/a&gt; is often assumed, but in reality its a more of a marketing thing, were IBM tried to press all CPUs into an 70xx numbering scheme, as from hardware, as well as software they were vastly different lines:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;701 - half word addressing (19 units build)&lt;/li&gt;&#xA;&lt;li&gt;702 - character addressing (14 units build)&lt;/li&gt;&#xA;&lt;li&gt;704 - word addressing&lt;/li&gt;&#xA;&lt;li&gt;709/704x/709x - like 704&lt;/li&gt;&#xA;&lt;li&gt;705/7080 - character addressing&lt;/li&gt;&#xA;&lt;li&gt;7010 - character addressing (&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1400_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;top end 1400&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;7030 - bit addressing&lt;/li&gt;&#xA;&lt;li&gt;707x - decimal words of 10 (like 650 calculator)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So of all of these only the 704x/709x CPUs used word addressing. And while it includes some of the most powerful (well, outclassed by CDC already before the /360 came) and expensive, their numbers were quite low (*1)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom Line: Most pre-/360 machines were byte addressable (of various size), not word addressable.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did they make a switch for comparability between different machines?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Why should they? I would know of no reason. Comparability is an external request, nothing a producer needs nor wants. marketing loves to sell things that are not as easy comparable :)&lt;/p&gt;&#xA;&lt;p&gt;As explained &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15507/6659&quot;&gt;here&lt;/a&gt; the /360 was the follow up to all the different machines - with only a few of those being word addressable. See above.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or it was just performance or money or single symbol size reasoning behind it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Pick whatever you want. The /360 was intended to be a single ISA capable to be tailored to all needs from low end business to high end scientific.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;Now the promised thoughts:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Could it be, that your thoughts are stuck inbetween addressability as defined in the ISA (InstructionSet Architecture) and seen from a programmers view and the memory interface as seen from hardware?&lt;/p&gt;&#xA;&lt;p&gt;An ISA is the abstract view of Hardware a programmer will interact with. It's the way the machine looks to him. Addressing on ISA side describes the granularity an instruction can use to address data. While this may vary between instructions and access type (for example due restrictions of alignment), the smallest size that can be addressed directly with a complete address is considered the one defining capabilities. In case of IBM that's the byte. Each regular addressing within an instruction can point to any byte in memory.&lt;/p&gt;&#xA;&lt;p&gt;Words and alike are formed by multiples of bytes and may or may not cover only a limited address range - like the /360 requiring words to be alligned to multiples of 4, thus leaving the two lowest bits of any word address zero.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;This definition is only valid within its ISA and not necessary related to the hardware at all.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;On the hardware side memory is always word-accessed, with word being of arbitrary size, independent of word (or byte) size defined by the ISA. The /360 is a great example here, as its ISA presents a plain 32 bit world with 24 bit addressing and 8 bit bytes. But at the memory interface many sizes were used depending on machine type and time. Starting from 16 and 32 bit for the earliest implementations up to 64, 128, 256 and more later on.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;It's the task of the memory interface to map bytes, words or whatsoever the ISA side requests onto its own memory word and back.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This abstraction level was already used before the /360, as for example (AFAIR) a character addressing 7010, a word addressing 7090 and a bit addressing 7030 could all use the same memory subsystem made of 36/72 bit words.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 A few hundret for all of them combined, while the 1401 alone accounts for more than 10,000 units.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-07-08T14:09:39.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15525" PostTypeId="2" ParentId="15519" CreationDate="2020-07-08T14:29:51.467" Score="0" Body="&lt;p&gt;CF has to be removed from Windows after partitioning and WinUAE completely closed and reopened once again with Admin rights.&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-07-08T14:29:51.467" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15526" PostTypeId="2" ParentId="15516" CreationDate="2020-07-08T14:57:57.330" Score="4" Body="&lt;p&gt;In the 1960s, IBM used a crazy variety of character codes. IBM was the king of punched cards, commonly known as &amp;quot;IBM cards&amp;quot;, so many codes related to the sparse 12 bit codes used for those. However, even these were not fully standardized: different keypunch models used different character sets! 6-bit BCDIC was designed to easily map to the most common card code characters. Many IBM peripherals used codes closely related to BCDIC, but they generally required some translation specific to the peripheral. But printer chains could be changed. Then there were Selectric tilt/rotate codes, which only told the mechanism how to move: what character you got depended on what typeball you had on the spindle.&lt;/p&gt;&#xA;&lt;p&gt;EBCDIC, extended BCDIC, was IBM's internal data exchange code for the 1130 and System/360, but IBM machines could also use ASCII as an external code.&lt;/p&gt;&#xA;&lt;p&gt;I think it was the Teletype Model 33 that drove the popularity of ASCII. IBM's business was card-based batch processing mainframes, but time-sharing and single-user interactive systems were becoming available. In the beginning, the Model 33 was the terminal of choice because it was inexpensive and good enough for the job. If your focus is interactivity, there are no punched cards, and your keyboard, printer, and paper tape all use ASCII, it makes sense to make ASCII your common character code.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2020-07-08T14:57:57.330" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15527" PostTypeId="2" ParentId="15516" CreationDate="2020-07-08T15:00:43.643" Score="19" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ASCII was never intended for processing, just as an interface standard for data exchange (hence the name American Standard Code for &lt;strong&gt;Information Interchange&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;li&gt;IBM never switched, it still uses EBCDIC within mainframes and ASCII for communication.&lt;/li&gt;&#xA;&lt;li&gt;IBM was a major proponent for ASCII, but not the sole force, and especially not international.&lt;/li&gt;&#xA;&lt;li&gt;ASCII soared in international use in the 1970s as being recommended by ISO and ECMA - especially the later being the driving force due the huge variability within Europe.&lt;/li&gt;&#xA;&lt;li&gt;(later) Mini computers and especially micro computers simply started out by using ASCII as well for processing as there is no reason for inventing a different (*1).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I’m trying to figure out when IBM switched to ASCII and when ASCII became world wide standard.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, IBM never switched.&lt;/p&gt;&#xA;&lt;p&gt;EBCDIC is used due historic reasons &lt;em&gt;within&lt;/em&gt; a /360 mainframe, but all outside connections (except for proprietary) are ASCII. In fact, as IBM was a driving force behind ASCII the /360 were prepared to switch for ASCII when it comes to BCD handling. Except, it never became useful and was dropped in the late 80s.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Moreover do IBM made ASCII world wide standard?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;IBM was a major force for ASCII from the start, pushing for a standard. This included the use of preliminary standards or terminal system.. It was as well intended to be used for the /360 and any later machine, but standardisation took longer than expected, so they had to go forward with their own 8 bit code, EBCDIC, based on prior 6 bit and punch card codes.&lt;/p&gt;&#xA;&lt;p&gt;While being a main player, IBM alone would not have been able to force it. Similar a US buying order could not do it - after all, it requested only compatibility with ASCII for information exchange, not operation in ASCII. A loophole big enough for anything in existence and to be invented to slip thru. All needed was some interface to accept ASCII data and reply using it.&lt;/p&gt;&#xA;&lt;p&gt;ASCII only became an international standard when &lt;a href=&quot;https://en.wikipedia.org/wiki/Ecma_International&quot; rel=&quot;noreferrer&quot;&gt;ECMA&lt;/a&gt;, the European Computer Manufacturers Association, recommended an ASCII based international variant in 1965, which became an international recommendation the in 1967 as ISO 646 and finally accepted in 1972. Here ISO 646-IRV defines &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO/IEC_646#Code_page_layout&quot; rel=&quot;noreferrer&quot;&gt;a compatible base&lt;/a&gt; for all participating (latin) scripts. ASCII is at that point simply the US variant called ISO-646-US and relates to the 1968 version.&lt;/p&gt;&#xA;&lt;p&gt;From the early 1970s on ISO-646 became the major encoding standard used for anything except mainframes.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is it save to say, that IBM moved to ASCII starting from System / 370?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. Beside the fact that /370 is more of renaming game than really a new series, the /360 was able to handle ASCII from the start. In fact, ASCII as a hardware supported feature got &lt;em&gt;dropped&lt;/em&gt; from the line around the time it was renamed /390.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If so, is it safe to say, that IBM started use ASCII from 1970s?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. IBM used ASCII already before it was a standard and continues to do so today.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And if so, is it safe to say, that system 370 had many clones, therefore ascii became popular world wide?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, as /370s are still using EBCDIC as default character set. Unix on /370 and later is an exception. But ASCII can/is used on all communication (which was satisfied the mentioned law) with external systems.&lt;/p&gt;&#xA;&lt;p&gt;In the IBM mainframe world (*2) two basic codesets were used:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;EBCDIC for everything within the system, that is CPU, memory, disks, tapes and other storage, as well as remote systems.&lt;/li&gt;&#xA;&lt;li&gt;ASCII for all communication to terminals and remote systems.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And this continues until today.&lt;/p&gt;&#xA;&lt;p&gt;Modern (past 1970) EBCDIC became a full superset of ASCII. EBCDIC's structure reflects ASCII and is as well the reason why ISO 8859 contains two areas of control characters :)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Then again, some did, like Commodore (PET) or Apple (Apple II) that private codes may be helpful - except, these got confined to special areas and hidden beneath.&lt;/p&gt;&#xA;&lt;p&gt;*2 - That is IBM and all hardware compatible systems like Hitachi, Fujitsu, Bull, Univac, RCA, Siemens, ...&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-09T13:59:29.517" LastActivityDate="2020-07-09T13:59:29.517" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15528" PostTypeId="2" ParentId="15522" CreationDate="2020-07-08T16:09:53.293" Score="50" Body="&lt;p&gt;&lt;em&gt;(More of a memory dump related to &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15523/6659&quot;&gt;Stephens Answer)&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;At a time when ICs were of low complexity (compared today), could you actually see each transistor on the silicon and reverse engineer it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes.&lt;/p&gt;&#xA;&lt;p&gt;Just try it yourself. Take some 1980s TTL, like a 7400 - I'm sure you find some on old boards - and crack it open. Usually it separates well from the plastic. Put it below a children's microscope and you will see the structure for each of the four gates. With some basic knowledge about semiconductors, you'll be able to draw the schematics free hand.&lt;/p&gt;&#xA;&lt;p&gt;It's what I did to my first pocket calculator at the age of 13. Of course, I didn't have the knowledge to really turn what I saw (it was a calculator chip, not just a 7400) into a useful drawing, but I still remember my father's face, showing a mixture of being mad and amazed at the same time, when I showed him the drawings and he realized that I utterly destroyed the calculator he has spend ~50 Mark (*1) on a few days before. Essentially it forshaded my future of taking everything apart :))&lt;/p&gt;&#xA;&lt;p&gt;Slicing up a 1976-1980 8-bit CPU is not really challenging. Structure sizes were about 5-10 µm, so not even a  microscope was needed. A good camera with a fitting lens and average film will do it.&lt;/p&gt;&#xA;&lt;p&gt;Lets take for example the &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/MOS_6502_die.jpg/1024px-MOS_6502_die.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;well known 6502&lt;/a&gt;. It was manufactured in an 8 µm process with a chip area of roughly 4x4 mm. The needed film quality is defined by 'lines' - that is, pairs of consecutive lines that still can be distinguished. 8 µm wide details on a 4000 µm means we need at least 2000 lines over the width of the photograph taken. With 35 mm film, this means 2000/35 = ~60 lines/mm. An average ASA 100 colour film will deliver anywhere between 60 to 150 lines/mm.&lt;/p&gt;&#xA;&lt;p&gt;So even the cheapest hobby film could be used in reverse-engineering a 6502. This is especially true as we talk analogue film, so no pixel artefacts (*2). Of course, this is the upper limit to start, still making it hard to decide some structures. So more lines are better. B&amp;amp;W films of similar (low) quality and price deliver 300-500 lines/mm, while good go past 1000. More than enough to give a crisp clear view of every detail (*3).&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: in 1980, a consumer class camera with a good lens and cheap film was all that was needed to dissect any CPU at the time ... well, yes, and a lot of time at hand to understand what was shown :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;In fact, one can still do so with the latest chips except the problem is that nowadays, a picture, even a very good one, wouldn't do it alone. The 6502 had 5 layers and basically all of them can be identified right away. Nowadays chips are made of more than a dozen layers, many of them connective ones, covering the underlying transistors a great deal. Today it needs careful scraping of of layers to get a look inside, much like archaeologists digging out a settlement. But still doable, as now fine tools like lasers can be used to peel each layer. Heck, there is even a guy in Berlin(?) doing this for fun with today's chips, like Apples latest ARM cores.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - 50 Mark in 1974 may equal about 100 Euros nowadays. Doesn't sound much, but it was quite a lot money to us (you know, ye gode olde time when we had no shoes and had to walk to school in snow and rain, uphill in both direction). Back then, filling a large car (Mercedes) was less than 20 Mark.&lt;/p&gt;&#xA;&lt;p&gt;*2 - To be correct, Analogue film does as well show granulation, as the photo sensitive area is made up of discrete particles. But unlike a CCD they are randomly placed, resulting in kind of a ... well ... analogue resolution. Important for this task is that due the random placement none of the usual digital artefacts will be created. The picture will simply start to blur.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Superior material can deliver up to 10,000 lines. That's enough to cover any modern CPU with a single shot. Of course, at that point optics does start working a bit different, but that's another story.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-28T17:42:50.960" LastActivityDate="2020-07-28T17:42:50.960" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15529" PostTypeId="2" ParentId="15522" CreationDate="2020-07-08T16:51:07.947" Score="12" Body="&lt;p&gt;Yes, reverse engineering of chips with a conventional optical microscope in the late 1970s and early 1980s is generally possible.&lt;/p&gt;&#xA;&lt;p&gt;Although of course, there are limitations. Firstly, the number of wiring layers is important - already two layers of metallization and two layers of polysilicon make reverse circuit design much more difficult. Secondly, chip traps specially created by developers to prevent copying - this, in particular, was practiced by &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11143/in-the-original-z80-layout-where-are-the-traps-located-and-what-are-their-ef&quot;&gt;Zilog with the Z80&lt;/a&gt;. Thirdly, the size of the circuit / number of transistors, taking into account the amount of labor and available auxiliary techniques - already Motorola chips of level 68000 were a very expensive task.&lt;/p&gt;&#xA;&lt;p&gt;However, in the game consoles of those years, only the second version of the problems was relevant.&lt;/p&gt;&#xA;" OwnerUserId="11231" LastEditorUserId="3394" LastEditDate="2020-07-08T22:22:09.637" LastActivityDate="2020-07-08T22:22:09.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15530" PostTypeId="1" AcceptedAnswerId="15542" CreationDate="2020-07-08T16:53:56.030" Score="20" ViewCount="5220" Body="&lt;p&gt;Even the Intel 4004, which had a 4-bit word size, had a 12-bit address space. I'm wondering if any commercial CPUs had an 8-bit or similar address-space for programs, data, or both.&lt;/p&gt;&#xA;&lt;p&gt;I'm particularly curious about CPUs with small program address-spaces and the types of problems they were able to solve with such limitations. I'm slightly less but still interested in CPUs with small address-spaces for data.&lt;/p&gt;&#xA;" OwnerUserId="18698" LastEditorUserId="18698" LastEditDate="2020-07-10T20:18:54.930" LastActivityDate="2020-07-11T12:06:57.273" Title="Which CPUs, if any, had an 8-bit address space?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;memory&gt;&lt;ram&gt;" AnswerCount="8" CommentCount="17" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15531" PostTypeId="2" ParentId="15530" CreationDate="2020-07-08T17:07:20.860" Score="10" Body="&lt;p&gt;Not strictly an answer, but some early computers had very limited addressing.  The Harwell Dekatron computer, which operates entirely in decimal, has an address space of 100 words, of which 90 are RAM and the other 10 are devices. Programs for it are usually run directly from a paper tape device (where the tape, rather than the PC register, is advanced after reading each program word), but subroutines can also be loaded into RAM and run from there.&lt;/p&gt;&#xA;&lt;p&gt;Among architectures with multiple address spaces, the Z80 has an 8-bit I/O address space which is separate from the 16-bit one used for programs and data.  But this is probably not what the OP is asking for.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="7044" LastEditDate="2020-07-11T12:06:57.273" LastActivityDate="2020-07-11T12:06:57.273" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15532" PostTypeId="2" ParentId="5361" CreationDate="2020-07-08T17:23:33.570" Score="3" Body="&lt;p&gt;It's possible to make NASM create a woking DOS .exe file by defining and using a few macros.&lt;/p&gt;&#xA;&lt;p&gt;Example source file:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;%include &amp;quot;fullprog_dosexe.inc.nasm&amp;quot;&#xA;&#xA;fullprog_code&#xA;&#xA;mov ah, 9  ; WRITE_STDOUT.&#xA;mov dx, msg &#xA;int 0x21  ; http://spike.scu.edu.au/~barry/interrupts.html&#xA;&#xA;fullprog_data  ; This is mandatory for .exe.&#xA;&#xA;msg: db 'Hello, World!', 13, 10, '$'&#xA;&#xA;fullprog_end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;First download the &lt;a href=&quot;https://github.com/pts/pts-nasm-fullprog/blob/master/fullprog_dosexe.inc.nasm&quot; rel=&quot;nofollow noreferrer&quot;&gt;fullprog_dosexe.inc.nasm&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Compile it with:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ nasm -f bin -o hedosexe.exe hedosexe.nasm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3494" LastActivityDate="2020-07-08T17:23:33.570" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15533" PostTypeId="2" ParentId="15530" CreationDate="2020-07-08T17:42:19.457" Score="12" Body="&lt;p&gt;The first that comes to mind is Cypress' M8C core used in the &lt;a href=&quot;https://www.cypress.com/products/psoc-1&quot; rel=&quot;noreferrer&quot;&gt;PSOC-1&lt;/a&gt; series. While it has a 16 bit program address space (and thus 16 bit jump instructions), its data as well as the register space are each strictly 8 bit.&lt;/p&gt;&#xA;&lt;p&gt;Implementations do use up to two sets of 256 registers and may offer several sets of 256 Byte banks. From &lt;a href=&quot;https://www.cypress.com/file/37956/download&quot; rel=&quot;noreferrer&quot;&gt;the manual&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The M8C is an 8-bit CPU with an 8-bit memory address bus.&#xA;The memory address bus allows the M8C to access up to&#xA;256 bytes of SRAM,[...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;To take full advantage of the paged memory architecture of&#xA;the PSoC device, several registers must be used and two&#xA;CPU_F register bits must be managed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Interrupt routines are always located in page 0, Stack by default. Data may reside in any page. Access is handeled by a set of registers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CUR_PP holds the current active (default) page&lt;/li&gt;&#xA;&lt;li&gt;STK_PP holds the stack page&lt;/li&gt;&#xA;&lt;li&gt;IDX_PP holds the page used for all indirect address (yes, even indirect pointers are only 8 bit)&lt;/li&gt;&#xA;&lt;li&gt;MVR_PP and MVW_PP hold the pages the MVI instruction operates on (MVI can do indexed memory access with pointer increment)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Two bits in the CPU flag register (*1) define the page mode:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;No Paging (also during interrupt)&lt;/li&gt;&#xA;&lt;li&gt;Indexed modes use the stack page (including stack instructions)&lt;/li&gt;&#xA;&lt;li&gt;Direct mode use CUR_PP, indexed use IDX_PP&lt;/li&gt;&#xA;&lt;li&gt;Direct mode use CUR_PP, indexed use STK_PP&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I seriously love this CPU. It's as close as it can get to a strict 8 bit CPU while being able to solve real world tasks. It's my personal favourite for a CPU as simple as possible without getting lost in academic games (*2).&lt;/p&gt;&#xA;&lt;p&gt;All data is always only 8 bit. All instructions carry either&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;no parameter, or&lt;/li&gt;&#xA;&lt;li&gt;one parameter one holding an 8 bit address or 8 bit constant, or&lt;/li&gt;&#xA;&lt;li&gt;two parameters holding either two 8 bit addresses or an address and an 8 bit constant.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The only exceptions are LONG JUMP and LONG CALL holding a 16 bit program address (yes, there's a short CALL, using only an 8 bit offset :). Programm memory access for data purpose features the only complex (one byte) instruction, with an address to be prepared in registers. Everything else is quite regular and straight on.&lt;/p&gt;&#xA;&lt;p&gt;Despite being 8 bit and quite simple it features some of the elegance of a /360.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Which is not special but part of the register file like any other, thus accessible with all register instructions.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Not to mention the incredible versatile I/O units. In some sense configurable processors of their own!&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-08T20:00:22.583" LastActivityDate="2020-07-08T20:00:22.583" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15534" PostTypeId="2" ParentId="15202" CreationDate="2020-07-08T18:59:09.560" Score="2" Body="&lt;p&gt;I started programming on cards in 1969.  Work performed on the computer was a &amp;quot;job&amp;quot; that ran in &amp;quot;batches&amp;quot;.  Hand in your stack of cards, pray there wasn't a single typographical error, and you'd get a job report printout on a paper report of your program results.&lt;/p&gt;&#xA;&lt;p&gt;I saw the first use of an on-line terminal in 1976 at the university I was attending.   I counted sevens rows of students packed watching one guy using the terminal, and we were completely blown away.&lt;/p&gt;&#xA;&lt;p&gt;Now computers had two segments of work to manage.  Jobs continued as they had from the beginning, but &amp;quot;user&amp;quot; management was required to deal with on-line terminals needs such as data entry.  One had to allocate scarce CPU cycles &amp;amp; memory between &lt;em&gt;batch&lt;/em&gt; and &lt;em&gt;user&lt;/em&gt; consumption.&lt;/p&gt;&#xA;&lt;p&gt;The term user was coined to encapsulate the needs of managing security, resource consumption, etc that came from people running work a computer that now had multi-tasking capabilities.&lt;/p&gt;&#xA;" OwnerUserId="18702" LastActivityDate="2020-07-08T18:59:09.560" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15535" PostTypeId="2" ParentId="15530" CreationDate="2020-07-08T19:16:31.990" Score="23" Body="&lt;p&gt;The KENBAK-1 has 256 bytes of memory. I'm not certain whether it had an 8-bit PC.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Kenbak-1&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Kenbak-1&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2020-07-08T19:16:31.990" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15536" PostTypeId="1" CreationDate="2020-07-08T20:58:35.890" Score="4" ViewCount="680" Body="&lt;p&gt;I am working on designing a Z80 computer and I would like to use a PS/2 Keyboard for input. I would like to use a PIO to communicate with it, but I am having trouble finding any documentation online on how to do so (outside of people saying you can).&lt;/p&gt;&#xA;&lt;p&gt;I would like to avoid using any additional chips if possible (so no using shift registers) and I don't want to use any microcontrollers.&lt;/p&gt;&#xA;&lt;p&gt;I believe that to start it would have to have the clock pin of the keyboard trigger an interrupt, outside of that I am not sure. If someone can write a detailed way to accomplish this, I would greatly appreciate it. Or if someone could write a code that works in my system, I would be willing to give a $10 reward via an Amazon Gift Code or something (unless you want to do it out of the generosity of your heart).&lt;/p&gt;&#xA;&lt;p&gt;Feel free to ask questions. If you want schematics, let me know and I can email them to you. Thank you for your help in advance! I am new to all of this, so please forgive any ignorance on this project or using this forum :)&lt;/p&gt;&#xA;" OwnerUserId="18704" LastEditorUserId="6659" LastEditDate="2020-07-08T21:19:09.067" LastActivityDate="2021-01-15T20:12:18.453" Title="Z80 PIO Keyboard" Tags="&lt;z80&gt;&lt;assembly&gt;&lt;keyboards&gt;" AnswerCount="2" CommentCount="4" ClosedDate="2021-01-15T20:51:12.443" ContentLicense="CC BY-SA 4.0" />
  <row Id="15537" PostTypeId="2" ParentId="15536" CreationDate="2020-07-08T21:40:17.247" Score="12" Body="&lt;p&gt;&lt;em&gt;Preface, this is not really how RC.SE works. If you're looking for someone to design your hardware or write you a program, there are many sites out there where you can put a reward for someone taking the job. RC.SE is about answering your questions, as detailed as they are asked&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I am working on designing a Z80 computer and I would like to use a PS/2 Keyboard [...] use a PIO&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, this means you want to bitbang the serial protocol. Not a big deal. Essentially just follow the &lt;a href=&quot;https://en.wikipedia.org/wiki/PS/2_port#Communication_protocol&quot; rel=&quot;noreferrer&quot;&gt;PS/2 protocol&lt;/a&gt;. It can be done synchronous or asynchronous. With a clock rate of just 10-16 kHz either way may work.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I am having trouble finding any documentation online on how to do so&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;All you need is a &lt;a href=&quot;http://www.bitsavers.org/components/zilog/z80/UM008101-0601_Z80_CPU_Peripherals_Users_Manual_2001.pdf&quot; rel=&quot;noreferrer&quot;&gt;Z80 PIO manual&lt;/a&gt; and a protocol description, like &lt;a href=&quot;http://www.burtonsys.com/ps2_chapweske.htm&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt; which came up first when searching for &amp;quot;PS/2 protocol&amp;quot;. It describes well what the interface expects/delivers, so all neccessary will be to handle the PIO as needed. All details see the Zilog manual.&lt;/p&gt;&#xA;&lt;p&gt;Now, if you have to ask how to bitbang a rather simple protocoll like PS/2 on a Z80 PIO, then this project might bea above your level and it may be appropriate to rather use either a mouse/keyboard controller as the PC does, or, well, create your own using an AVR, PIC, 8051 or alike. Many projects exist out there, to be be easy adapted.&lt;/p&gt;&#xA;&lt;p&gt;There is no shame in dedicating this task to another controller, it's the default way. Not at least as doing it from the Z80 will complicate your software, slow down your system and add unnecessary constrains.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-07-08T21:40:17.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15538" PostTypeId="2" ParentId="14235" CreationDate="2020-07-08T21:51:38.400" Score="4" Body="&lt;p&gt;IBM had several different APL mainframe implementations, and they where updated and modified over many years to support different types of hardware and I/O equipment over their life time. The source for one of the earliest APL implementations for System/360 is available from the Computer History Museum. As far as I can remember they assign unique codes to the overstrike combinations when they are identified in the input buffer, before processing by the actual interpreter. One obvious reason for this is that you do not want the encoding to depending on the order of the overstruck characters. Another reason is that different terminal types provide the characters in different ways. Some types of 3270 (APL) terminals would let the user perform a kind of overstrike operation on the keyboard, but only store and transmit the composed character from its buffer.&lt;/p&gt;&#xA;" OwnerUserId="18707" LastActivityDate="2020-07-08T21:51:38.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15539" PostTypeId="2" ParentId="15522" CreationDate="2020-07-08T23:18:15.180" Score="28" Body="&lt;p&gt;It's worth noting what you can see, and what you can't.&lt;/p&gt;&#xA;&lt;p&gt;First, you cannot see any feature that is much smaller than the wavelength of light that you are using.  In 1995 I designed a chip for my Master's thesis in 1.2um technology; features are clearly visible under microscope.  Features in 0.5um technology might be visible, but by 1997 0.25um technology was the big thing, and individual transistors would not be visible.  Today, reverse engineers pretty much have to use electron microscopes - optical microscopes are useless.&lt;/p&gt;&#xA;&lt;p&gt;Second, you can see only those features that have some physical significance: you can see metal layers, polysilicon (the material used to make transistor gates), the contacts and vias between these layers, as well as the &amp;quot;thinox&amp;quot; demarcating a transistor, which is really a slope between a thick layer of silicon dioxide and the thinner layer used to make a transisitor gate.&lt;/p&gt;&#xA;&lt;p&gt;You cannot see doping - what makes an NMOS device different from a PMOS device, so you cannot tell which is which just by looking.  You can infer which is which using the circuit connectivity, if you know what you are looking for.  Similarly, for NMOS devices, you cannot distinguish enhancement mode devices from depletion mode devices by looks alone.&lt;/p&gt;&#xA;" OwnerUserId="18640" LastActivityDate="2020-07-08T23:18:15.180" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15540" PostTypeId="2" ParentId="15530" CreationDate="2020-07-08T23:46:19.580" Score="6" Body="&lt;p&gt;The &lt;a href=&quot;http://www.cpu-world.com/Arch/8048.html&quot; rel=&quot;noreferrer&quot;&gt;Intel 8048&lt;/a&gt; which was used in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Magnavox_Odyssey%C2%B2&quot; rel=&quot;noreferrer&quot;&gt;Magnavox Odyssey&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; had an 8-bit external address bus.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-07-08T23:46:19.580" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15541" PostTypeId="2" ParentId="15516" CreationDate="2020-07-09T00:51:36.273" Score="2" Body="&lt;p&gt;I'm going to provide a terrible answer, but include a couple references that might be great for nostalgia. One is &lt;em&gt;NostalgiaNerd&lt;/em&gt; on youtube, he provides a British viewpoint of IBM's shift to ASCII (OK they only did it through codepages, not really fully/completely ASCII).&lt;/p&gt;&#xA;&lt;p&gt;The video is strangely titled, nothing about ASCII or EBCDIC in the name: &amp;quot;These keys shouldn't exist&amp;quot; (It's about the pipe sign, one has a space halfway down it on some keyboards)&#xA;&lt;a href=&quot;https://youtu.be/BktIY7VbrUs&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/BktIY7VbrUs&lt;/a&gt; &lt;em&gt;[Do note, this video might have a lot wrong info (per the comments on stack) I wasn't sure if I should strike or completely remove the link.]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;If the video is error filled, &lt;em&gt;NostalgiaNerd&lt;/em&gt; at least gives us some references to handwritten notepads from early development days of ASCII here:&#xA;&lt;a href=&quot;https://longstreet.typepad.com/thesciencebookstore/2012/03/heres-the-link.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://longstreet.typepad.com/thesciencebookstore/2012/03/heres-the-link.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18708" LastEditorUserId="18708" LastEditDate="2020-07-19T22:36:02.237" LastActivityDate="2020-07-19T22:36:02.237" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15542" PostTypeId="2" ParentId="15530" CreationDate="2020-07-09T04:13:36.693" Score="28" Body="&lt;h1&gt;PIC: 7 bit address space&lt;/h1&gt;&#xA;&lt;p&gt;The Microchip PIC family of CPUs specifically the 10, 12 and 16 series have &lt;strong&gt;7 bits&lt;/strong&gt; of address space. While 7 bits is not exactly 8 bits this shows that there are commercial CPUs still on sale and still widely used that have less than 8 bit address space (they are used for example for power management on some Macs and are the most common CPU for smart cards).&lt;/p&gt;&#xA;&lt;p&gt;However it does not meet some of your requirements because your requirements have some assumptions that does not necessarily hold for some CPU architectures.&lt;/p&gt;&#xA;&lt;p&gt;For example, you asked about &lt;code&gt;possessing an 8-bit PC&lt;/code&gt;. This makes several assumptions that are partly true and partly false for the PIC:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The PIC is a Harvard architecture. The framing of the question has a hidden assumption of a Von-Neumann architecture where program instructions and data have the same address space. For the PIC it has a &lt;strong&gt;7 bit data&lt;/strong&gt; and &lt;strong&gt;11 bit program&lt;/strong&gt; address space. So it does not have an 8 bit PC.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;However, the PIC cannot process more than 8 bits of data. Therefore the PC is mapped to two separate registers. Reading from and writing to the PC is done 8 bits at a time even though the full address space is 11 bits. So &lt;strong&gt;processing&lt;/strong&gt; the PC, as in accessing it, is done in 8 bits.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2&gt;Even weirder CPUs&lt;/h2&gt;&#xA;&lt;p&gt;There are other architectures that fall even further from you assumptions. For example stack machines are CPUs that have &lt;strong&gt;0 bit&lt;/strong&gt; data address space. However, like the PIC, they have different program address space.&lt;/p&gt;&#xA;&lt;p&gt;The main advantage is that you don't have to encode addresses at all in your instruction set allowing you to have very small instructions. Home-made stack machines such as Lisp or Forth machines can go down to using as few as 3 bits to encode instructions.&lt;/p&gt;&#xA;&lt;p&gt;If you wonder how we can do computing without any addressing I suggest you look at the programming language Forth (like Lisp, the language is so simple that people have designed hardware implementations of them so it is not merely a programming language but also the instruction set for some CPUs)&lt;/p&gt;&#xA;" OwnerUserId="4170" LastEditorUserId="4170" LastEditDate="2020-07-09T04:23:44.957" LastActivityDate="2020-07-09T04:23:44.957" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15543" PostTypeId="1" AcceptedAnswerId="15556" CreationDate="2020-07-09T04:30:56.820" Score="2" ViewCount="341" Body="&lt;p&gt;In the early days of personal computers, there was something of a delay in the technology crossing the Atlantic, and when American computers did arrive in the UK, they tended to be expensive relative to local incomes. Thus for example the absence of Tandy left a niche for Sinclair's remarkable low-cost ZX80 and ZX81; the high price of the Apple II left a niche for the BBC micro to be adopted in British schools; the late arrival of the IBM PC meant the Commodore PET survived significantly longer in Europe than on its home shores.&lt;/p&gt;&#xA;&lt;p&gt;However, this effect became weaker over time.&lt;/p&gt;&#xA;&lt;p&gt;In September 1986, Compaq in the US launched the Deskpro 386, the first computer based on Intel's new 32-bit chip, and a very significant development for the industry as a whole, being the first time a non-IBM company established that sort of leadership within the IBM PC standard.&lt;/p&gt;&#xA;&lt;p&gt;When did the first 386 PC go on sale in the UK, and how much did it cost?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-07-10T06:42:25.967" Title="First 386 PC on sale in the UK" Tags="&lt;history&gt;&lt;ibm-pc&gt;&lt;80386&gt;&lt;british-computers&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15544" PostTypeId="1" CreationDate="2020-07-09T05:07:52.917" Score="2" ViewCount="93" Body="&lt;p&gt;I found a Fujitsu Lifebook 280Dx at a thrift store in mint condition at a thrift store.  There isnt a scratch on it.  I snatched it up.  I thought it would be a great DOS era retro gaming machine.  However, I am having an issue with using it.  While it did have the modular 3.5&amp;quot; floppy and Zip drive installed, it did not come with the battery(s) or the CD-ROM drive.  I would &lt;em&gt;&lt;strong&gt;really&lt;/strong&gt;&lt;/em&gt; like to get my hands on the CD-ROM drive.  However, I checked eBay and nothing.  Someone told me about Yahoo Auctions in Japan and nada.  I know finding parts for a 25 year old laptop is a long shot, but Id like to try.&lt;/p&gt;&#xA;&lt;p&gt;Where else can I look to find these hard to find parts?&lt;/p&gt;&#xA;" OwnerUserId="8172" LastActivityDate="2020-07-09T05:07:52.917" Title="Best place to find old parts/accessories?" Tags="&lt;cd-rom&gt;&lt;laptop&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15545" PostTypeId="2" ParentId="15530" CreationDate="2020-07-09T05:53:47.103" Score="4" Body="&lt;p&gt;Not quite there, but close, is the VT52 text terminal with a CPU that has a 10-bit code address space.  The data address space is 11 bits.&lt;/p&gt;&#xA;&lt;p&gt;As answered by others, low end microcontrollers may well have 8-bit code and/or address spaces.&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2020-07-09T05:53:47.103" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="15547" PostTypeId="2" ParentId="15543" CreationDate="2020-07-09T07:49:09.693" Score="4" Body="&lt;p&gt;You question says that the UK computers were produced only to fill 'a niche' left by the U.S. computers but that's not the case. These were large, wide-open markets at that time.&lt;/p&gt;&#xA;&lt;p&gt;The BBC micro, for instance, was a attractive product with better capabilities than the Apple II: faster, better screen modes, better BASIC, better OS.&lt;/p&gt;&#xA;&lt;p&gt;The ZX80 and particularly ZX81 succeeded because they were so low cost (£100-odd or less) that they pulled non-computing spontaneous buyers into the computer market.&lt;/p&gt;&#xA;&lt;p&gt;Neither the Tandy nor Apple II had 'left' a 'niche' in the market. The Apple II was very expensive and overpriced for what it was. If sitting side by side and if the same price, the BBC Micro is the much better computer by spec'. And the Apple II was actually about three times the price of a BBC.&lt;/p&gt;&#xA;&lt;p&gt;It's like suggesting that Ferrari has 'left a niche' in the family car market that the Ford Focus managed to fill. Ferrari can't make a £10k car, they do £150k cars which are poor value and vastly overpriced for that biggest market, the family car market. But Apple weren't making a Ferrari, just a slower Focus while asking Ferrari prices.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastEditorUserId="5199" LastEditDate="2020-07-10T06:42:25.967" LastActivityDate="2020-07-10T06:42:25.967" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15548" PostTypeId="2" ParentId="15512" CreationDate="2020-07-09T08:27:16.033" Score="3" Body="&lt;p&gt;Yes; there have been several (although, to my knowledge, none in the most simple sense where seven binary bits are treated strictly as as a base-7 system of Peano-like numbers). Instead, they are systems in which at least one (typically, two or three) carry are treated as separate state-modification bits.&lt;/p&gt;&#xA;&lt;p&gt;The most oldest/most simple example (although it may not meet the definition of a Turing-complete computer) is the ancient 5/2 abacus.&lt;/p&gt;&#xA;&lt;p&gt;More recent examples generally are cases where some form of binary-coded decimal is used, particularly those that use Chen-Ho encoding (which fit a better conception of the system being &amp;quot;7-bit&amp;quot;, as Boolean logic/operations can still be (relatively) easily applied, as opposed to more packed (or packed/padded) 7-bit numbers, which require a variable number of instructions to ascertain certain binary/two's complement values.&lt;/p&gt;&#xA;&lt;p&gt;Of these, the &amp;quot;two of seven&amp;quot; approach is most common. Examples: the IBM 650, the FACOM 128, and the &amp;quot;IBM 370 compatibility feature&amp;quot; (hardware emulation) built in to the IBM 7070/7074.&lt;/p&gt;&#xA;" OwnerUserId="14894" LastActivityDate="2020-07-09T08:27:16.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15549" PostTypeId="2" ParentId="15202" CreationDate="2020-07-09T08:27:29.167" Score="0" Body="&lt;p&gt;According to Richard Gabriel, &lt;em&gt;users&lt;/em&gt; at MIT in the seventies had another more descriptive name.&lt;/p&gt;&#xA;&lt;p&gt;From &lt;a href=&quot;http://dreamsongs.com/RiseOfWorseIsBetter.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Rise of Worse is Better&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The right thing is to back out and restore the user program PC to the instruction that invoked the system routine so that resumption of the user program after the interrupt, for example, re-enters the system routine. It is called PC loser-ing because the PC is being coerced into loser mode, where loser is the affectionate name for user at MIT.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="18718" LastActivityDate="2020-07-09T08:27:29.167" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15550" PostTypeId="2" ParentId="15512" CreationDate="2020-07-09T08:34:06.383" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://www.analog.com/en/products/adau1701.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ADAU1701&lt;/a&gt; is a &lt;a href=&quot;https://www.analog.com/media/en/technical-documentation/data-sheets/ADAU1701.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;28-/56-bit DSP&lt;/a&gt; for audio processing. &lt;code&gt;CHAR_BIT&lt;/code&gt; is probably 28 on that platform like most odd-sized DSPs but I'm not quite sure since I couldn't find its programming manual&lt;/p&gt;&#xA;" OwnerUserId="1981" LastActivityDate="2020-07-09T08:34:06.383" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15551" PostTypeId="2" ParentId="15202" CreationDate="2020-07-09T08:57:02.670" Score="0" Body="&lt;p&gt;The term customer apply when you are in a shop, be it cars or computers and many other things. So there no link between user and customer. In the car industry they design the car for the driver first and then passengers. Not customers. The same for computer they are designed to serve the user and that why customer pay for them.&lt;/p&gt;&#xA;&lt;p&gt;And actually in my domain, we deal with travel, mostly using a computer to book a trip, but the names we use are not user but mostly travellers. And they are not our clients. Our customers are travel agencies or airlines. But the person that use our application (the end user) are most often traveller that want to book a trip. And the distinction is important. To be successful we must serve wel our end user (travellers) but also our clients (travel agencies &amp;amp; airlines).&lt;/p&gt;&#xA;&lt;p&gt;Exactly the same when you sell a plane. The customer is often an airline sometime actually a company that rent planes. The users of the plane are pilots, stewards, mechanicians as well as the passengers. Each type of user has a different role.&lt;/p&gt;&#xA;&lt;p&gt;Even in the car, there also the car mechanic. He is another user and the car is designed in a way that car mechanic can easily repear it.&lt;/p&gt;&#xA;&lt;p&gt;So I agree with you that &amp;quot;user&amp;quot; is quite a generic term as apposite to traveller, passenger, driver... But this has no link with the notion of customer/owner.&lt;/p&gt;&#xA;&lt;p&gt;In computer science you have user and thanks to user rights management you actually create groups and name them as you wish depending of your use case. There the generic opposition of system administrators vs users but typically in you company you could give different right to different teams or roles. And the computers would reflect that.&lt;/p&gt;&#xA;&lt;p&gt;Because of that, because we don't know what role the users are actually given, because users don't even need to be a person but can perfectly be computer programs, it make sense to have a very generic term and let the users own choose their names/groups.&lt;/p&gt;&#xA;&lt;p&gt;After all in a car entertainment system the user is a driver or passenger... In a CD player, it is a listener and so on. Remember there computer in basically everything today.&lt;/p&gt;&#xA;" OwnerUserId="18719" LastActivityDate="2020-07-09T08:57:02.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15552" PostTypeId="2" ParentId="15202" CreationDate="2020-07-09T09:09:22.910" Score="0" Body="&lt;p&gt;I suggest looking at this question from a critical point of view. Critical in the sense of not defining the term user from the perspective we have today and reconstruct its historical context to fit our definitions.&lt;/p&gt;&#xA;&lt;p&gt;One theoretical point of view is to look at how users where &lt;em&gt;constructed&lt;/em&gt; with technology. The book &lt;a href=&quot;https://mitpress.mit.edu/books/how-users-matter&quot; rel=&quot;nofollow noreferrer&quot;&gt;How Users Matter&lt;/a&gt; edited by Nelly Oudshoorn and Trevor Pinch covers some aspects of the constructivist movement.&lt;/p&gt;&#xA;&lt;p&gt;In their introduction, they summarize the main claim which is to &amp;quot;go beyond technological determinist views of technology and essentialist views of users’ identities.&amp;quot; What it means that we should not assume that users only exist for the sake of 'using' technology but take an active rule in shaping technology as well as being shaped and 'constructed' by technology.&lt;/p&gt;&#xA;&lt;p&gt;There are theoretical stances about this matter and link the question made between user and economy (aka. consumer) is another one.&lt;/p&gt;&#xA;&lt;p&gt;My point is that most the answers tried to use the defitioin of 'user' in order to explain what a 'user' is, rather then asking how we got to the point where we have&lt;/p&gt;&#xA;" OwnerUserId="18721" LastActivityDate="2020-07-09T09:09:22.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15553" PostTypeId="2" ParentId="15516" CreationDate="2020-07-09T09:15:15.017" Score="2" Body="&lt;p&gt;Answering one of your questions &amp;quot;When did ASCII become a worldwide standard&amp;quot;, the answer is: never. The &amp;quot;A&amp;quot; stands for &amp;quot;American&amp;quot;. At the time the US adopted ASCII, other countries were adopting their own variants, substituting different characters according to national needs: for example in the UK, &amp;quot;£&amp;quot; was substituted for &amp;quot;#&amp;quot;. These variations were endorsed and harmonized by the international standard ISO 646. For many years if you bought a printer, for example, you would have to make some fiddly settings on installation to configure it to your preferred national variant of ISO 646. (Of course, many people, especially Americans, confused the terminology, and thought of all these standards as &amp;quot;ASCII with variations&amp;quot;).&lt;/p&gt;&#xA;&lt;p&gt;All of these were 7-bit standards, and in the 1980s they were largely superseded by 8-bit standards such as ISO 8859-1 also known as Latin-1. These too had regional variants, though with 8 bits a single variant was good enough for the whole of Western Europe. These standards generally had ASCII as a subset (or at least, the printable ASCII characters: control characters are another question). But the term &amp;quot;ASCII&amp;quot; persisted in popular usage, and you will see plenty of StackOverflow questions using the term &amp;quot;ASCII&amp;quot; to refer to characters with codes above 127 - indeed some people pretty well use &amp;quot;ASCII character&amp;quot; as a synonym for &amp;quot;character&amp;quot;. But if you're talking standards, then ASCII per se was never a standard anywhere except the US.&lt;/p&gt;&#xA;" OwnerUserId="4915" LastActivityDate="2020-07-09T09:15:15.017" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15554" PostTypeId="2" ParentId="15530" CreationDate="2020-07-09T10:46:47.283" Score="3" Body="&lt;p&gt;The RCA 1802 CPU had only 8 address lines, which were time multiplexed to specify a 16 bit address.&lt;/p&gt;&#xA;&lt;p&gt;It was used in &amp;quot;telly tennis&amp;quot; type game machines in the mid 1970's and early home computers like the COSMAC ELF as well as the Hubble space telescope.&lt;/p&gt;&#xA;&lt;p&gt;Just recently my retired neighbour was regaling me with stories of when he was developing a system with two of these CPUs; One to run code in 2Kb of RAM and the other to bit-bang RS-232.&lt;/p&gt;&#xA;" OwnerUserId="7044" LastActivityDate="2020-07-09T10:46:47.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15555" PostTypeId="2" ParentId="15522" CreationDate="2020-07-09T13:41:00.963" Score="-2" Body="&lt;p&gt;From the '80s, chips increasingly used standard cell components. So if you can recognise a standard cell, you don't need to recognise each transistor in it. Companies like Phillips and ES2 provided standard cell libraries.&lt;/p&gt;&#xA;&lt;p&gt;Built in self test became popular at that time. It's a technique for piping a known state into and out of the chip, running it for some cycles, then reading the result. It's used to check if a chip works after making the wafer but before packaging it. It could also be used to reverse engineer the chip.&lt;/p&gt;&#xA;&lt;p&gt;To replicate a chip, you'd also need to replicate any firmware. Compaq's reverse engineering of the IBM PC's code to evade copyright is a important setp the IBM PC story: &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PC_compatible&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/IBM_PC_compatible&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18726" LastEditorUserId="18726" LastEditDate="2020-07-10T14:49:28.250" LastActivityDate="2020-07-10T14:49:28.250" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15556" PostTypeId="2" ParentId="15543" CreationDate="2020-07-09T13:52:09.277" Score="5" Body="&lt;p&gt;It's not a completely robust answer, but I found the following text archived at &lt;a href=&quot;https://www.cbronline.com/news/zenith_data_systems_quietly_builds_a_dominant_position_in_personalike_market/&quot; rel=&quot;noreferrer&quot;&gt;Computer Business Review&lt;/a&gt; from March 1987 that's primarily about Zenith's plans:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In the UK, 27% of Compaq’s revenue comes from its 80386&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The Compaq Deskpro had originally been announced only six months before that article, in September 1986.&lt;/p&gt;&#xA;&lt;p&gt;So based on the timeline:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a 386 was first announced by Compaq in September 1986; and&lt;/li&gt;&#xA;&lt;li&gt;by March 1987 Compaq not only had a sales operation in the UK, but had one long enough for the percentage breakdown of its revenue sources to be known to its competitors.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I therefore think it's likely that Compaq's 386 was directly available in the UK from Compaq itself shortly after the US launch, and given that Compaq had the first 386 computer in the world it was very likely also the first 386 in the UK.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-07-09T13:52:09.277" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15557" PostTypeId="1" AcceptedAnswerId="15566" CreationDate="2020-07-09T16:47:33.463" Score="3" ViewCount="202" Body="&lt;p&gt;some models (45 for example) have a stack grace area for use after a stack overflow&#xA;Stack Limit Violations. Quote from handbook&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When instructions cause a stack address to exceed (go lower than) a&#xA;limit set by the programmable Stack Limit Register, a Stack Violation&#xA;occurs. There is a Yellow Zone (grace area) of 16 words below the&#xA;Stack Limit which provides a warning to the program so that corrective&#xA;steps can be taken. Operations that cause a Yellow Zone Violation are&#xA;com· pleted, then a bus error trap is effected. The error trap, which&#xA;itself uses the stack, executes without causing an additional&#xA;violation, unless the stack has entered the Red Zone.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So this says that at some point its OK for code to use those addresses (346-400), ie after an initial &amp;lt; 400 overflow. But at what point does it become illegal again? Ie&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;hit 376 -&amp;gt; trap 4&#xA;now in yellow zone&#xA;stack&#xA;stack&#xA;stackety&#xA;stack&#xA;all in YZ so no more trap 4&#xA;.... something happens &#xA;la&#xA;la&#xA;la&#xA;...&#xA;r6 &amp;lt; 400 -&amp;gt;trap 4 again&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;what is the 'something happens', RTS? priority level shift down?&lt;/p&gt;&#xA;&lt;p&gt;EDIT: Answer from simh mailing list&lt;/p&gt;&#xA;&lt;p&gt;The grace space is just to make sure that everything can be pushed onto the stack (PC,PS, FP regs,...). The code that runs the trap is on its own, no stack , or has to find somewhere else to save things.&lt;/p&gt;&#xA;" OwnerUserId="18533" LastEditorUserId="18533" LastEditDate="2020-07-14T00:16:20.197" LastActivityDate="2020-07-14T00:16:20.197" Title="pdp11 grace stack, when does grace time end" Tags="&lt;pdp-11&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15558" PostTypeId="1" CreationDate="2020-07-09T18:19:43.000" Score="13" ViewCount="1854" Body="&lt;p&gt;I have many 1.44MB floppies 20 years old or older. My FDD, which I just bought online and received recently, cannot read them. The FDD can often display the contents of a floppy, but not successfully copy many files to some other drive (I.E my C drive).&lt;/p&gt;&#xA;&lt;p&gt;If I take a bad floppy, format it, put files on it, and read it back, then the files can be read successfully.&lt;/p&gt;&#xA;&lt;p&gt;Is there a way to recover the data on these disks or is it mainly a hopeless cause? Are there super-sensitive drives that do a better job? Can partial sectors be retrieved or must it always be success-fail on a 512 byte basis?&lt;/p&gt;&#xA;&lt;p&gt;Also, how come it can almost always successfully read the FAT table, yet only ever seem to be able to recover &amp;lt;10% of the content of the drive?&lt;/p&gt;&#xA;" OwnerUserId="18731" LastEditorUserId="1912" LastEditDate="2020-07-10T20:37:35.207" LastActivityDate="2020-07-12T08:10:34.423" Title="Can special tools recover data from floppy disks when Windows Explorer fails to do so?" Tags="&lt;floppy-disk&gt;&lt;floppy-drive&gt;&lt;data-preservation&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15559" PostTypeId="2" ParentId="15558" CreationDate="2020-07-09T18:41:36.397" Score="16" Body="&lt;p&gt;It sounds like some blocks on the disk (particularly the ones containing directory information) are okay, but some (containing some file data) are not.  This is a data recovery situation.&lt;/p&gt;&#xA;&lt;p&gt;If you boot from a Linux LiveCD (or a flash drive built from one), you should be able to use the &lt;a href=&quot;https://www.gnu.org/software/ddrescue/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ddrescue&lt;/a&gt; tool which is designed for exactly this situation.  It will find all the blocks that can be read (including with a small number of retries) and use them to construct a &lt;em&gt;disk image&lt;/em&gt; that is at least mostly complete.  It will then go back and try harder to read the bad blocks, and insert them into the image.&lt;/p&gt;&#xA;&lt;p&gt;Open a terminal and try the following:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo ddrescue -b 512 -c 9 --idirect /dev/fd0 floppy.img floppy.map&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Once it has finished, you'll find the two latter files in the home directory, where you can move them to more permanent storage.  To make a fresh floppy disk from the image, try:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo dd if=floppy.img of=/dev/fd0 bs=9216&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Obviously, don't try to use the original (bad) disk for that.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-07-10T15:39:09.263" LastActivityDate="2020-07-10T15:39:09.263" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="15560" PostTypeId="2" ParentId="15558" CreationDate="2020-07-09T18:53:23.003" Score="6" Body="&lt;p&gt;You can try &lt;a href=&quot;https://www.roadkil.net/program.php?ProgramID=29&quot; rel=&quot;noreferrer&quot;&gt;Unstoppable Copier&lt;/a&gt; that runs on Windows.&#xA;I used it in the past for scratched CDs, and might work for you.&lt;/p&gt;&#xA;" OwnerUserId="18314" LastActivityDate="2020-07-09T18:53:23.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15561" PostTypeId="2" ParentId="15557" CreationDate="2020-07-09T19:13:49.643" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Operations that cause a Yellow Zone Violation are com· pleted, then a bus error trap is effected.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;When it says &amp;quot;Operations&amp;quot; it means the one instruction, and the plural there means it could be any one of many instructions that increase stack space.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;2.3.3 Stack Register (with Memory Management option)&#xA;&lt;br/&gt;All PDP·ll's have a Stack Overflow Boundary at location 400,. The Ker·&#xA;nel Stack Boundary, in the PDP-11/40 is a variable boundary set through&#xA;the Stack Limit Register found at location 777774.&#xA;Once the Kernel stack exceeds its boundary, &lt;em&gt;&lt;strong&gt;the Processor will complete&#xA;the current instruction and then trap&lt;/strong&gt;&lt;/em&gt; to location 4 (Yellow or Warning&#xA;Stack Violation). If, for some reason, the program persists beyond the&#xA;16-word limit, the processor will abort the offending instruction, set the&#xA;stack point (R6) to 4 and trap to location 4 (Red or Fatal Stack Viola·&#xA;tion).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Stack Overflow Trap-Stack.&lt;br/&gt;Overflow Trap is a processor trap through the&#xA;vector at address 4. It is caused by referencing addresses below 400, through&#xA;,&#xA;the processor stack pointer R6 (SP) in autodecrement or autodecrement deferred addressing. The instruction causing the overflow is completed before&#xA;the trap is made.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There isn't a lot said but the trap handler is expected to rectify the situation.  I believe that if it doesn't rectify the situation, and resumes the program, the program may get more traps.&lt;/p&gt;&#xA;&lt;p&gt;I have difficulty imagining what could be done to rectify the program such that it can be resumed, except simply killing the offending thread so the program (operating system) as a whole can continue.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastEditorUserId="7985" LastEditDate="2020-07-09T19:20:44.743" LastActivityDate="2020-07-09T19:20:44.743" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15562" PostTypeId="2" ParentId="15512" CreationDate="2020-07-09T19:31:16.460" Score="8" Body="&lt;p&gt;The second-generation Soviet computer Minsk-32 (the series size is 2889 machines, 1968-75, civilian use, one of the rare early mainframes noted for use in Antarctica) used a 37-bit word and 7-bit representation of alphanumeric characters (5 in a word). Yes, the concept of &amp;quot;bytes&amp;quot; is difficult to apply to a similar old computer (which continued the line of vacuum tube machines), but special commands for the convenience of operations with 7-bit blocks took place in the command architecture.&lt;/p&gt;&#xA;" OwnerUserId="11231" LastEditorUserId="11231" LastEditDate="2020-07-10T02:10:31.120" LastActivityDate="2020-07-10T02:10:31.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15563" PostTypeId="2" ParentId="2424" CreationDate="2020-07-09T19:37:00.640" Score="10" Body="&lt;p&gt;This is a late answer to an old question, but there's a better way:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;iconv -f 437 file-here.ans | pv --quiet --rate-limit 7000&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;and if viewing an online file:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;curl www.ansi-art.com/ansi/ansi1.ans | iconv -f 437 | pv --quiet --rate-limit 7000&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;long as your terminal is set to the width of the art (usually 80) should have no issues. Can easily turn it into a .sh script: &lt;a href=&quot;https://raw.githubusercontent.com/m00-git/ANSI-view/master/ansi-view.sh&quot; rel=&quot;noreferrer&quot;&gt;https://raw.githubusercontent.com/m00-git/ANSI-view/master/ansi-view.sh&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18733" LastEditorUserId="4335" LastEditDate="2020-07-09T21:01:53.460" LastActivityDate="2020-07-09T21:01:53.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15564" PostTypeId="2" ParentId="15512" CreationDate="2020-07-09T20:19:48.287" Score="3" Body="&lt;p&gt;The well-known IBM 1401 technically had a 7-bit byte (plus parity).  It was designed around the common format of IBM punched cards, which it was designed to process; these had ten &amp;quot;digit&amp;quot; rows and two &amp;quot;zone&amp;quot; rows, of which one digit and optionally one zone (for which the zero row also counted as a third zone) could be punched simultaneously in each column.&lt;/p&gt;&#xA;&lt;p&gt;This essentially meant that each column of a card contained a value that could be encoded in 6 bits - 4 representing a BCD digit, and two more indicating the zone (no zone, first zone, second zone, or zero row).  To this, the 1401 added a &amp;quot;word mark&amp;quot; bit for internal use, for a total of 7 bits.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-07-09T20:19:48.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15565" PostTypeId="1" CreationDate="2020-07-09T20:54:54.293" Score="2" ViewCount="212" Body="&lt;p&gt;I'm trying to make a Doom-like game similar to classic Doom that runs on older hardware, and as such I would like to use Boom, an older, open source port of Doom. I've also looked into PrBoom, but the pre-compiled Boom executable works fine on Windows so I'm left to wonder what the point of PrBoom was. Anywho, I've found out that Boom is compiled via DJGPP version 2.02. I've jumped through what seems like hoops to find that version - and all of the programs that will run with it - to compile the code &lt;a href=&quot;https://mirror-hk.koddos.net/djgpp/deleted/&quot; rel=&quot;nofollow noreferrer&quot;&gt;(they're avaliable here, under the v2 folders)&lt;/a&gt;. This is what I've ended up with (I apologize but I don't know what some of the exact version numbers are, but I'm sure they're the right version because of the date they were added to the ftp server in question):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;bnu2121.zip (Binutils 2.121)&lt;/li&gt;&#xA;&lt;li&gt;bsn128n.zip (Bison 1.28)&lt;/li&gt;&#xA;&lt;li&gt;em1934s3.zip (Emacs)&lt;/li&gt;&#xA;&lt;li&gt;gcc2952b.zip (GCC 2.952)&lt;/li&gt;&#xA;&lt;li&gt;gdb418b.zip (GNU Debugger 4.18 (?))&lt;/li&gt;&#xA;&lt;li&gt;gpp2952b.zip (G++ 2.952)&lt;/li&gt;&#xA;&lt;li&gt;mak379b.zip (Make 3.79)&lt;/li&gt;&#xA;&lt;li&gt;objc2952.zip (ObjectiveC)&lt;/li&gt;&#xA;&lt;li&gt;txi40b.zip (&amp;quot;Text file viewer&amp;quot; according to the &lt;a href=&quot;https://cse.iitkgp.ac.in/pds/software/gcc/DJGPP.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;website&lt;/a&gt; I used to find out how to install DJGPP in general)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Using the website I just posted to download the files proved to be unsuccessful as I got multiple errors regarding dprintf when trying to compile. The versions I found and downloaded from that first website don't have that error, but instead I get a new error that seems to suggest I got one of the programs wrong:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;m_fixed.h:82: operand constraint contains '+' or '=' at illegal position.&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;and alas, I'm very unexperienced with x86 assembly code, so I have no idea how to fix the code in question to make it compile. So, what program did I get wrong?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; For those asking, the code is as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;            asm(&amp;quot;  imull %2 ;&amp;quot;&#xA;                &amp;quot;  shrdl $16,%%edx,%0 ;&amp;quot;&#xA;                : &amp;quot;=a,=a&amp;quot; (result)           // eax is always the result&#xA;                : &amp;quot;0,0&amp;quot; (a),                 // eax is also first operand&#xA;                 &amp;quot;m,r&amp;quot; (b)                  // second operand can be mem or reg&#xA;                : &amp;quot;%edx&amp;quot;, &amp;quot;%cc&amp;quot;              // edx and condition codes clobbered&#xA;[line 119]      );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18736" LastEditorUserId="18736" LastEditDate="2020-07-10T14:27:33.690" LastActivityDate="2020-07-10T14:27:33.690" Title="What are the minimum tools needed to compile BOOM for Windows 98?" Tags="&lt;windows-98&gt;" AnswerCount="0" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="15566" PostTypeId="2" ParentId="15557" CreationDate="2020-07-09T23:51:49.787" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I have difficulty imagining what could be done to rectify the program&#xA;such that it can be resumed, except simply killing the offending&#xA;thread so the program (operating system) as a whole can continue.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The stack boundary is a kernel-mode mechanism. Its intent, I believe, is to protect the interrupt vectors from corruption.  Vector corruption is very bad; there's a wild jump to somewhere that's probably going to happen at some point in the future.&lt;/p&gt;&#xA;&lt;p&gt;As for recovery: this is the kernel. It probably hasn't any mechanism to abort a &amp;quot;thread&amp;quot; of execution and it probably has only a single kernel stack anyway. The systems I am used to had non-reentrant kernels (rescheduling took place only on exit from kernel mode) so one k-stack was all you needed.&lt;/p&gt;&#xA;&lt;p&gt;You could conceivably forcibly empty the stack (reload SP with the stack bottom) and then exit (to user mode or the null loop), but you basically aborted kernel processing at some random point, so who knows what state the world is in.  It's no more recoverable than most other trap 4s in k-mode.&lt;/p&gt;&#xA;&lt;p&gt;I therefore suppose that the only way to recover from stack overflow is to completely reinitialize the kernel. Maybe you disable interrupts, reset the stack, and reload the core image from disk.&lt;/p&gt;&#xA;&lt;p&gt;Remember that process control was a considerable part of the PDP-11 target base. If your system is so borked that it just got a stack violation, maybe the best way to avoid disaster is to restart ASAP.  It's a lot cleaner than random jumps through corrupted interrupt vectors.&lt;/p&gt;&#xA;&lt;p&gt;The specific question of when &amp;quot;it's ok to use the yellow zone&amp;quot; ends is a good one. I have no authoritative answer. I suspect it might be a consequence of reloading SP.  But that's very hand-wavy.&lt;/p&gt;&#xA;&lt;p&gt;P.S. You figured the yellow zone as 346-400.  I make it 340 to 400.  It's 16 words, or 32 bytes, or 40 in god's own radix.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;I have an hypothesis, completely untested. Here it is:&lt;/p&gt;&#xA;&lt;p&gt;The yellow zone is a spacewise construction. Note that the description says you only get a trap by a reference of the form &lt;code&gt;-(SP)&lt;/code&gt; or &lt;code&gt;@-(SP)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Therefore (I guess), you get a &amp;quot;yellow trap&amp;quot; on an instruction that actually crosses the limit; for a conventional push, like &lt;code&gt;MOV R0,-(SP)&lt;/code&gt;, it would be the transition from 400 to 376; for something like the useless &lt;code&gt;MOV -(SP),-(SP)&lt;/code&gt; it would be a transition from 400 to 374.  The cue is the before-value equaling the limit.&lt;/p&gt;&#xA;&lt;p&gt;Once the SP is less than 400, it's ok to reference through it until it goes below 340, at which point you get the &amp;quot;red trap&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;According to this hypothesis, if you get a yellow trap on &lt;code&gt;MOV R0,-(SP)&lt;/code&gt;, and the trap service routine immediately executes &lt;code&gt;RTI&lt;/code&gt;, then you're still in the yellow zone.&lt;/p&gt;&#xA;&lt;p&gt;An interesting experiment might be to transport yourself into the yellow zone without passing through the limit: &lt;code&gt;MOV #370,SP;  CLR -(SP)&lt;/code&gt;. Trap or no trap?&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-07-10T02:36:22.727" LastActivityDate="2020-07-10T02:36:22.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15567" PostTypeId="1" AcceptedAnswerId="15568" CreationDate="2020-07-10T07:47:28.860" Score="3" ViewCount="251" Body="&lt;p&gt;I recently recovered a data-set my father (a biology professor) recorded at UC Berkeley in the 90s on Stickleback mating behaviors.  He says the data was recorded using the &amp;quot;open-source BEAST event recorder software, on DOS, on a Compact computer.&amp;quot;  The files have names like &lt;code&gt;R721F211.CPR&lt;/code&gt;.  According to &lt;code&gt;file&lt;/code&gt;, they are &amp;quot;ASCII text, with CRLF line terminators&amp;quot;, and the contents look like (for example) this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;quot;right male, tank 2, 1st trial, 6-4-93, 255-325, precourtship&amp;quot;&#xA;TIME=          10 &#xA;30.00     20&#xA; 2084 -2089  2099 -2117  3905 -3908  3932 -3933  6890 -6904  7945 &#xA;-7947  11177 -11178  13193 -13197  15580 -15581  15664 -15665  0  0 &#xA;43.00     22&#xA; 1459 -1460  3561 -3562  4651 -4652  5661 -5662  5834 -5835  6779 &#xA;-6781  9162 -9163  9169 -9170  10795 -10796  11892 -11893  13052 -13054&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;What is the grammar for this file?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;My dad and I looked at this and deduced the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the first line is a note describing the contents of the file, which my dad must have typed out;&lt;/li&gt;&#xA;&lt;li&gt;we are not sure what the &lt;code&gt;TIME=          10&lt;/code&gt; means&lt;/li&gt;&#xA;&lt;li&gt;we think the &amp;quot;20&amp;quot; in &lt;code&gt;30.00     20&lt;/code&gt; means &amp;quot;event with ID 20&amp;quot; but we are not sure what the &lt;code&gt;30.00&lt;/code&gt; means; likewise we think the 22 later means event &amp;quot;22&amp;quot; but we are not sure what the 43.00 means;&lt;/li&gt;&#xA;&lt;li&gt;we think the items like &lt;code&gt;3932 -3933&lt;/code&gt; are time intervals, as in, event with id 20 occurred from second 3,932 to second 3,933.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Dad says he recalls the software was open-source, accessible via an academic precursor to the modern Internet, ran on DOS, and was developed by a professor in Hawaii.  This is all we know.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Either the grammar for these files, or software with which to interpret these files, constitutes an answer to this question.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="17909" LastEditorUserId="15334" LastEditDate="2021-01-13T20:21:10.990" LastActivityDate="2021-01-13T20:21:10.990" Title="What is the *BEAST* event-recording software grammar?" Tags="&lt;file-format&gt;&lt;identify-this-software&gt;&lt;dos&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15568" PostTypeId="2" ParentId="15567" CreationDate="2020-07-10T08:06:33.253" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;BEAST Behavioral Events Acquisition and analysis SysTem&lt;/strong&gt;  by Windward Technology&lt;/p&gt;&#xA;&lt;p&gt;BEAST grew out of a need for computerized event recording in Ethological research in Dr. George Losey's laboratory at the Dept. of Zoology and the Hawai'i Institute of Marine Biology at the University of Hawai'i. As it matured, more and more statistical analysis routines were added until it formed a complete analysis system for Windows PC's. It has now been revised to operate within Windows XP and more modern processors.&lt;/p&gt;&#xA;&lt;p&gt;BEAST begins with continuous time event recording in which your&#xA;computer keyboard becomes an event recorder. After acquiring data with&#xA;the event recorder, data preparation routines allow you to create new&#xA;logical combinations of events. Editors allow you to alter individual&#xA;instances of any event and to create alphanumeric names for your&#xA;events.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's available via &lt;a href=&quot;https://web.archive.org/web/20190324034314/http://www.windwardtechnologyhawaii.com/beast_index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;archive.org&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="-1" LastEditDate="2020-07-10T09:15:45.087" LastActivityDate="2020-07-10T09:15:45.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15570" PostTypeId="1" AcceptedAnswerId="15601" CreationDate="2020-07-10T10:36:41.713" Score="13" ViewCount="1187" Body="&lt;p&gt;I've recently looked into the Sinclair QL schematics and found that it actually has two 8bit ROMs, 16 4164 DRAM chips and yet it is purely 8bit machine, even the 68008 there has 8bit bus.&lt;/p&gt;&#xA;&lt;p&gt;With very little complication it could be rebuilt into 16bit machine: 68000 instead of 68008, maybe one or two more 74&lt;em&gt;245 or 74&lt;/em&gt;373 chips, two or three 74xx glue logic chips and it even could still keep 8bit input into the video ULA (provided another 8 bits are buffered on 74*373). There should be, of course, some more pins for /UDS and /LDS byte strobes, ROM chip selects, etc., but that's basically all. Microdrive ULA could be kept 8bit too.&lt;/p&gt;&#xA;&lt;p&gt;The PCB itself also does not look overcrowded, so it probably could be fit with 68000 and some extra more 74xx chips&lt;/p&gt;&#xA;&lt;p&gt;Provided those considerations and that it has ceramic-cased 68008, that was still advertised as 'advance information' in &lt;a href=&quot;http://bitsavers.trailing-edge.com/components/motorola/68000/68008_Data_Sheet_Apr85.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet&lt;/a&gt;s even in 1985, i.e. it was manufactured in little quantities, if any, and therefore was NOT cheap;&lt;/p&gt;&#xA;&lt;p&gt;Were there any real cost savings for the QL as a whole from its 8-bitness, or it was just Sinclair's misconception?&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2020-07-13T16:12:23.780" LastActivityDate="2020-07-13T16:12:23.780" Title="Were there really any cost savings in Sinclair QL because of it being 8-bit design with 8-bit bus 68k CPU?" Tags="&lt;sinclair&gt;&lt;sinclair-ql&gt;" AnswerCount="4" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15571" PostTypeId="2" ParentId="13684" CreationDate="2020-07-10T11:29:27.593" Score="0" Body="&lt;p&gt;Get it recapped, a lot of issues with these machines are oxidised contacts (remove chips, clean and put them back again) and Caps ESRs being off range for the specs).&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-07-10T11:29:27.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15572" PostTypeId="2" ParentId="13817" CreationDate="2020-07-10T12:29:24.163" Score="2" Body="&lt;p&gt;The Sinclair QL has not (at least not very much besides the general cost-savy technical design and the Microdrives) been influenced a lot by ZX Spectrum computers - It's rather the other way round: ZX Spectrum Plus and Toastrack did pick up the Dickinson design of the QL computer.&lt;/p&gt;&#xA;&lt;p&gt;The QL introduced a &amp;quot;Standard line editor&amp;quot; that understands a lot more Cursor key combinations than just &amp;quot;delete&amp;quot; (&amp;lt;CTRL&amp;gt;Right) and &amp;quot;backspace&amp;quot; (&amp;lt;CTRL&amp;gt;Left). There's word-wise (&amp;lt;Shift&amp;gt;+Cursor) and page-wise (&amp;lt;ALT&amp;gt;+Cursor) movement and deletion key combos defined in the line editor implemented by QDOS, so it appears somewhat logical that engineers didn't design in an extra key for just one of many operations.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2020-07-10T13:08:44.160" LastActivityDate="2020-07-10T13:08:44.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15573" PostTypeId="2" ParentId="15570" CreationDate="2020-07-10T12:36:45.137" Score="12" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;It was all about the incredible low price of 400 GBP. Outclassing any other 16 bit system (except for the TI 99/4) by at least a magnitude, on par or undercutting actual 8 bit machines as well. Every fraction of a penny saved was important.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I've recently looked into the Sinclair QL [...] yet it is purely 8bit machine&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'd say it's an 8 bit system design, but a 16 bit computer.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;With very little complication it could be rebuilt into 16bit machine: 68000 instead of 68008, maybe one or two more 74245 or 74373 chips, two or three 74xx glue logic chips and it even could still keep 8bit input into the video ULA (provided another 8 bits are buffered on 74*373). There should be, of course, some more pins for /UDS and /LDS byte strobes, ROM chip selects, etc., but that's basically all.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Doesn't that already sound like a lot? It adds up to several pound. More important, each of this chips does not only raise cost by itself, but as well by the holes to be drilled in every board, thus increasing PCB cost as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The PCB itself also does not look overcrowded, so it probably could be fit with 68000 and some extra more 74xx chips&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure. But it would also have increased design cost. It's a huge difference between routing 8 data lines and doing so for 16. Not to mention additional signals. Professional design is not about cramping in as much as there is space, but as little as possible.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Provided those considerations and that it has ceramic-cased 68008,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Doesn't matter. I bet Sinclair did not require a ceramic package, so it's entirely plausible that it was Motorolas decision to use what they had - at a price point they agreed independently.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;that was still advertised as 'advance information' in datasheets even in 1985&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Many data sheets carried this label over 20+ years. Saying 'advanced information' or 'preliminary' in case of Intel was one way to avoid costly law suits with mighty customers (*1)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;i.e. it was manufactured in little quantities, if any, and therefore was NOT cheap;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That conclusion is not supported by either. It needs concrete proof to make any speculation about price worthwhile. Price is, especially in startup production negotiated independent of production cost, keeping a focus on long term sells and time to market.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Were there any real cost savings for the QL as a whole from its 8-bitness, or it was just Sinclair's misconception?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Of course - like with all Sinclair products every penny counts.&lt;/p&gt;&#xA;&lt;p&gt;The QL was set out at a &lt;em&gt;very&lt;/em&gt; aggressive price point of &lt;strong&gt;400 GBP&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;That's the same price as a bare bone BBC Model B&lt;/li&gt;&#xA;&lt;li&gt;It was half that the cheapest PC, a SANYO MBC 555 with as well 128 KiB did cost&lt;/li&gt;&#xA;&lt;li&gt;The new Mac was priced at 1500 GBP - almost 4 times the QL. And lets be serious, the Mac can't compete feature wise.&lt;/li&gt;&#xA;&lt;li&gt;A bare bone Apple IIe was 500 GBP, a design of 8 years before.&lt;/li&gt;&#xA;&lt;li&gt;Even a no name Apple II clone was the same  400 GBP&lt;/li&gt;&#xA;&lt;li&gt;Every Portable of the time cost about 400+ GBP(Tandy M100, Olivetti M10 Epson HX-20)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Not to mention that the, at the time most sold 68k desktop system, the Tandy 16/16B, cost about 6000 USD or ~4000 GBP (*3).&lt;/p&gt;&#xA;&lt;p&gt;Sure, a Spectrum was only about 110 GBP and a C64 ~160 GBP but again, not really a competition here.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: The QL was &lt;em&gt;extreme&lt;/em&gt; competive priced and every hole, every chip, and every hour in design had to be cut. Going 8 bit external was a good choice.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Stories that failed projects got ultimate blamed on supplier errors are a household issue. After all, nothing is better than telling management it was some changed or unclear spec from outside - and management tries of course to sue the supplier.&lt;/p&gt;&#xA;&lt;p&gt;*2 - All prices are taken from a 1984 issue of practical computing.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Depending on the time of year. 1984 was a bad year for the pound, it lost more than half it's value against the dollar. Which in fact as well hit the QL.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-07-10T12:36:45.137" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15574" PostTypeId="2" ParentId="15570" CreationDate="2020-07-10T12:49:31.403" Score="14" Body="&lt;p&gt;By the time the QL was first designed (starting as a &amp;quot;ZX83&amp;quot; in early 1983), a full-blown 8MHz 68000 was not a mass-produced, cheap commodity item, but rather a pretty expensive beast to buy. Common computers that had it at the time were the Sage and Sun range of workstations, the most common, &amp;quot;mass-market&amp;quot; computer that featured it was the Apple Lisa - Far beyond the QL's targetted market price. (There were others, like the Tandy TRS-80 Model 16, but basically everything that was a full package at that time had a 5-figure USD price tag attached.)&lt;/p&gt;&#xA;&lt;p&gt;In 1983, an 8-MHz M68000 chip went at a mass-quantity price of roughly 40USD - Way too much for Sinclair's budget. The 68008 was about 1/3 of that. There's a famous quote from Steve Jobs, who went in negotiations with Motorola for the Mac, and was able to cut that going price for the CPU down to $9 apiece, but roughly half a year later when Motorola had optimized the production process, and, of course, with the Apple brand as a backing, rather than largely unknown (in the US) Sinclair.&lt;/p&gt;&#xA;&lt;p&gt;When Motorola announced the 68008 at a much lower cost, apparently Sinclair saw the chance to earn a bit of the big 68000's fame with the much cheaper CPU and designed for that.&#xA;Only during the development time of the QL, the 68000 saw a tremendous price reduction on single chip prices (A fact that opened up cost feasibility for the Atari ST, for example) - But then it was too late to re-design (I also pretty much doubt a 16-bit-design would have fitted into the QL's (physical and commercial) package: The Atari ST's PCB is about three times the size of the QL's).&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2020-07-10T15:26:10.360" LastActivityDate="2020-07-10T15:26:10.360" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15575" PostTypeId="1" AcceptedAnswerId="15592" CreationDate="2020-07-10T13:01:23.200" Score="4" ViewCount="249" Body="&lt;p&gt;I have a copy of Syndicate disks for Amiga (I have original as well) and apparently the disk is damaged / faulty. It loads up to language selection menu, then tries to read disk and resets the computer... why does it do it instead of throwing read error? The original works okay, so the question is why does the machine reset on read error.&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-07-10T20:32:20.627" Title="Why does Amiga 500 reset when reading a faulty disk" Tags="&lt;floppy-disk&gt;&lt;amiga-500&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15576" PostTypeId="2" ParentId="15575" CreationDate="2020-07-10T13:22:21.503" Score="0" Body="&lt;p&gt;There are two possibilities I think based on your description:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The Amiga doesn't have much in the way of graceful error handling at the best of times. The reboot you're seeing is the typical behaviour for Amiga games.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The copy protection on your copy of &lt;em&gt;Syndicate&lt;/em&gt; is not happy.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;For games that are programmed within the normal constraints of AmigaDOS, you may see &lt;a href=&quot;https://eab.abime.net/attachment.php?attachmentid=61802&amp;amp;stc=1&amp;amp;d=1548691332&quot; rel=&quot;nofollow noreferrer&quot;&gt;a standard 'requester'&lt;/a&gt; that says &amp;quot;Not a DOS disk in device DF0&amp;quot; or something similar if there is a device fault. Games programmed within AMOS will have graceful error handling provided by the AMOS runtime - I would expect you'd see an error if you removed the disk part-way through a loading screen in &lt;em&gt;Scorched Tanks&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;However, most games use their own reading routines accessing the floppy disk hardware directly, with very little no thought spared for error handling. Two cases where a game might possibly be careful are disk swap detection (to give you another chance to put in a good Disk 2 rather than crashing entirely) and save game handling (since the game has to read, write and manage files to some extent).&lt;/p&gt;&#xA;&lt;p&gt;The normal level-to-level flow of a game with multiple linear stages like &lt;em&gt;Toki&lt;/em&gt; would work under the assumption that any code, graphics or music that the game requires will always be available and always be readable. (There isn't much the player can do to help if a game disk is faulty, really.)&lt;/p&gt;&#xA;&lt;p&gt;So I expect what is happening is your game is blindly loading in some code or resources from your damaged disk into memory, then executing damaged code, or coming up with bad offsets from reading a table of resources (like a game level that now has 99999 width instead of 99). This would then result directly or indirectly in an illegal instruction exception, which is handled by something in the ROM (another answerer may know the exact term and location in ROM for this), which performs the reboot and shows the Guru Meditation message.&lt;/p&gt;&#xA;&lt;p&gt;The only game I can remember that has what you'd call a 'read error' screen for its normal level loading is &lt;em&gt;Desert Strike&lt;/em&gt;, which you can trigger by swapping disks mid-load or inserting the incorrect Disk 2 or 3 from a mis-matched set of &lt;em&gt;DS&lt;/em&gt; disks.&lt;/p&gt;&#xA;&lt;p&gt;It is also possible that a poorly cracked game may spontaneously reboot as part of the copy protection. Certain games would reboot if you fail the manual-based copy protection too many times, and if these checks are insufficiently patched out, the reset might trigger later on in the game if certain conditions are met.&lt;/p&gt;&#xA;" OwnerUserId="18745" LastEditorUserId="18745" LastEditDate="2020-07-10T13:47:02.130" LastActivityDate="2020-07-10T13:47:02.130" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15577" PostTypeId="1" AcceptedAnswerId="15579" CreationDate="2020-07-10T13:33:58.947" Score="25" ViewCount="4637" Body="&lt;p&gt;SCSI, I think, is a serial interface. A standard serial port on PCs used a 9-pin DSub connector where a parallel port used a 25-pin connector. Then why did SCSI require so many pins? I vaguely remember 50-pin and 68-pin variants of SCSI. Is it because when you set the ID of the device, it would essentially select which wire pair(s) to listen/send on? Was the terminator basically creating a load across pairs? Seems like over kill, but it would allow for parallel access to multiple devices if the host controller was smart enough. I know “modern” variants of SCSI have had fewer pins like with FireWire and SAS.&lt;/p&gt;&#xA;" OwnerUserId="18329" LastActivityDate="2020-07-12T16:12:09.563" Title="Why did SCSI require so many pins?" Tags="&lt;scsi&gt;&lt;ports&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15578" PostTypeId="1" CreationDate="2020-07-10T13:41:44.867" Score="3" ViewCount="98" Body="&lt;p&gt;&lt;em&gt;Crystal Fire&lt;/em&gt; is a great book about the development of the transistor, but much less so for the IC side of things. What is the equivalent for ICs, and especially microprocessor development?&lt;/p&gt;&#xA;&lt;p&gt;I'm interested in the seminal steps in fabrication improvements that led to the changes in chip design. For instance, I know the 6502 was able to hit its price point because it moved to NMOS and made use of a new stepper technology, Micralign.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone recommend a good book that gets into this level of detail during the major steps from the first ICs through to, say, the CMOS era of the early 1980s?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-07-10T19:01:57.540" Title="Good book on the history of fabrication?" Tags="&lt;chip&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15579" PostTypeId="2" ParentId="15577" CreationDate="2020-07-10T13:45:23.960" Score="56" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;SCSI, I think, is a serial interface.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, it isn't. SCSI das defined as a parallel interface for high speed data transfer. Though there are modern incarnations using serial transfer, while being compatible on a logical level, which might add confusion.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A standard serial port on PCs used a 9-pin DSub connector where a parallel port used a 25-pin connector. Then why did SCSI require so many pins?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Genuine SCSI uses 8 lines for data, 10 for handshake and signaling of various conditions and 4 NC for future use. The rest - essentially every other wire on a flat ribbon cable - was ground. This improves signal quality a lot. On a round cable those were configured as twisted pair, of 1 signal, one ground line, for the same reason.&lt;/p&gt;&#xA;&lt;p&gt;Keep in mind, SCSI was meant to do (at the time) high speed transfer over comparably long distance (several decimeter up to meters) cabling without much shielding and still be reliable at low cost.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I vaguely remember 50-pin and 68-pin variants of SCSI.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;68 pin extended the data lines to 16 to double transfer speed.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Seems like over kill, but it would allow for parallel access to multiple devices if the host controller was smart enough.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That is exactly what controllers did. SCSI was always a bus of multiple devices able to talk to each other, using parallel transmission for speed.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I know “modern” variants of SCSI have had fewer pins like with FireWire and SAS.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;FireWire is in no way SCSI, only some devices use protocol blocks that are structured like SCSI commands, but these are after market additions. Similar the use over USB.&lt;/p&gt;&#xA;&lt;p&gt;SAS is as well not SCSI, but they had an eye on SCSI for intended compatibility on logical level.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The History:&lt;/h2&gt;&#xA;&lt;p&gt;SCSI evolved over multiple steps.&lt;/p&gt;&#xA;&lt;h3&gt;SASI&lt;/h3&gt;&#xA;&lt;p&gt;SCSI started out as SASI by &lt;a href=&quot;https://en.wikipedia.org/wiki/Shugart_Associates&quot; rel=&quot;noreferrer&quot;&gt;Shugart Associates&lt;/a&gt;. The goal was to create a rather device independent interface, covering all (at the time) modern mass storage devices.&#xA;Structure was as described above, offering a data rate of up to 5 MByte/s. Up to 8 devices could be connected.&lt;/p&gt;&#xA;&lt;p&gt;Unlike later SCSI the clock rate wasn't fixed, but either an asynchronous 3.5 MHz clock or a synchronous 5 MHz clock could be used. Then again, clock on SCSI was (at the time) less of an issue if all could go up to that speed.&lt;/p&gt;&#xA;&lt;h3&gt;SCSI&lt;/h3&gt;&#xA;&lt;p&gt;In 1982 standardisation was started by ANSI, which include a new, vendor independent name, so SCSI was born. The standard wasn't finalized until 1986, but wide usage started already way before.&lt;/p&gt;&#xA;&lt;h3&gt;Differential SCSI&lt;/h3&gt;&#xA;&lt;p&gt;During the standardisation process a differential version was introduced as well. Here 8 of the ground lanes were reassigned to work as counterparts to the standard data lines. Interfaces could detect either versions and adapt.&lt;/p&gt;&#xA;&lt;p&gt;With new standards coming up it was often called SCSI-1 or Narrow-SCSI&lt;/p&gt;&#xA;&lt;h3&gt;SCSI-2/Fast&lt;/h3&gt;&#xA;&lt;p&gt;Fast-SCSI doubled the clock rate to 10 MHz, pushing transfer to 10 MByte/s. Usable cable length got halved.&lt;/p&gt;&#xA;&lt;h3&gt;SCSI-2/Fast-Wide&lt;/h3&gt;&#xA;&lt;p&gt;Wide-SCSI doubled the data path to 16 bit and the connector to 68 pin, pushing transfer to 20 MByte/s. Maximum number of devices got doubled to 16.&lt;/p&gt;&#xA;&lt;h3&gt;Ultra-SCSI&lt;/h3&gt;&#xA;&lt;p&gt;Doubled again the data rate to now 20 MHz, allowing 20 MByte/s over an 8 bit 50 pin connector. Now a full length cable could only support 4 devices - or with halving again the default 8.&lt;/p&gt;&#xA;&lt;h3&gt;Ultra-Wide-SCSI&lt;/h3&gt;&#xA;&lt;p&gt;Ultra-Wide-SCSI again combined the higher clock rate (20 MHz) with the double width bus to deliver 40 MByte/s. Here only the differential version could support all 16 devices. Without only 4 or 8 are possible, like with Ultra-SCSI.&lt;/p&gt;&#xA;&lt;h3&gt;Ultra2-SCSI&lt;/h3&gt;&#xA;&lt;p&gt;Ultra2-SCSI again doubled the clock rate to now 40 MHz delivering 40 MByte/s, but now only supporting differential transfer. Maximum cable length got greatly improved by that. In addition a low voltage version was added to reduce noise. In addition an 80 pin connector was established.&lt;/p&gt;&#xA;&lt;h3&gt;Ultra2-Wide-SCSI&lt;/h3&gt;&#xA;&lt;p&gt;Ultra2-Wide-SCSI continued the by now well known game by using 16 Bit again.&lt;/p&gt;&#xA;&lt;h3&gt;Ultra3-SCSI&lt;/h3&gt;&#xA;&lt;p&gt;Ultra3 finally dropped 8 bit transfers at all, only supporting 16 bit. This time  a Double Data Rate Protocol enacted, thus doubling maximum thruput to 160 MByte/s. Of course clock doubling was as well offered, now eventwice, resulting in 320 or 640 MByte/s. To keep them apart, they were commonly called Ultra-160, Ultra-320, and Ultra-640.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7922" LastEditDate="2020-07-12T16:12:09.563" LastActivityDate="2020-07-12T16:12:09.563" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="15580" PostTypeId="2" ParentId="15577" CreationDate="2020-07-10T13:47:53.923" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Then why did SCSI require so many pins?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Differential signaling.&lt;/p&gt;&#xA;&lt;p&gt;The original standard was &lt;a href=&quot;http://www.connectworld.net/scsi.html&quot; rel=&quot;noreferrer&quot;&gt;actually a 25-pin system&lt;/a&gt; using an 8-bit parallel signal going in one direction only. There was a separate parity pin, and lots of signal pins for things like device select and flow control. But in many respects it was similar to the DB-25 printer cable, just faster.&lt;/p&gt;&#xA;&lt;p&gt;The 50-pin version used differential signaling, so every bit was represented by both a +ve and -ve signal on different pins. This allows the signal to be &amp;quot;noticed&amp;quot; at much lower voltage levels, which means you have less capacitance, which means you can run much faster. Practically every common modern interface uses some variation on this theme. All of the pins were duplicated in this fashion, so you go from 25 to 50 pins.&lt;/p&gt;&#xA;&lt;p&gt;Finally, they expanded from 8-bit to 16-bit, requiring another 16 pins, +ve and -ve for each of the 8 new bits, as well as a new signal pin pair to indicate this.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-07-10T13:47:53.923" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15581" PostTypeId="2" ParentId="15558" CreationDate="2020-07-10T15:18:03.187" Score="2" Body="&lt;p&gt;The PC floppy drive hardware is designed to convert sequences of pulses received from the drive head into a data stream in real time.  As such, it must instantly decide whether each pulse is large enough to be detected, or should be rejected as noise, before it has a chance to observe anything beyond it.&lt;/p&gt;&#xA;&lt;p&gt;It one has a floppy drive which has been modified to feed the drive-head signal as an analog output, and allows finer-than-usual control over drive head motion, it may be possible to extract data from disks that cannot be read via normal means.  I've read of hobby projects to construct such things, but I don't know of any that would be practically usable outside the hands of data recovery services.&lt;/p&gt;&#xA;&lt;p&gt;As a compromise, there are some devices which interface with conventional floppy drives but precisely capture the timing pulses received from them.  I don't know how well the decoding software can deal with data errors (e.g. if any pair of pulses should be separated by either 2, 3, or 4 microseconds, a conventional drive might try to classify anything between 2.5 and 3.5 as 3, but if a track has two consecutive pulse intervals that are 2.4 and 2.6 microseconds long, while all other intervals are either less than 2.2 or greater than 2.8, recovery software might be able to conclude that particular edge is misplaced, and use the block checksum to determine what it should have been).&lt;/p&gt;&#xA;&lt;p&gt;Software-based recovery tools may be able to extract data that would not be possible from Windows, but hardware-based tools with various levels of sophistication may do better.  Unfortunately, while I would probably have the knowledge needed to build such tools, I don't have any information about how to find them.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-07-10T15:18:03.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15582" PostTypeId="1" AcceptedAnswerId="15584" CreationDate="2020-07-10T15:55:39.937" Score="0" ViewCount="1694" Body="&lt;p&gt;As someone who recently become interested in retro home computers of 80's and early 90's I'm wandering what are the differences between using a real hardware, FPGA based hardware emulators like &lt;a href=&quot;https://github.com/MiSTer-devel/Main_MiSTer/wiki&quot; rel=&quot;nofollow noreferrer&quot;&gt;MiSTer&lt;/a&gt; and the large amount of software emulators for different systems running on modern Windows, MacOS and Linux computers.&lt;/p&gt;&#xA;&lt;p&gt;One thing which came to my mind is that both software and hardware emulators could be not precise enough to run all legacy software for the retro system which they are emulating without problems. But this seems to me like something depending on the quality of the implementation which can vary between different emulators and improve over time because of bug fixing, but not as a fundamental issue.&lt;/p&gt;&#xA;&lt;p&gt;Also I'm hearing about the latency issue with the software emulators, but I'm a little surprised that something like this can really be felt on a computer which is probably millions time faster than the emulated machine.&lt;/p&gt;&#xA;&lt;p&gt;Is there really a technical reason to prefer real hardware or FPGA based emulation vs. software emulation or this is just a nostalgia thing, caused by desire to fill like you are really back in the 80's or 90's?&lt;/p&gt;&#xA;" OwnerUserId="15096" LastActivityDate="2020-07-11T09:25:34.273" Title="What are the advantages/disadvantages of using retro hardware vs. FPGA emulation vs. software emulation?" Tags="&lt;hardware&gt;&lt;emulation&gt;" AnswerCount="6" CommentCount="13" FavoriteCount="2" ClosedDate="2020-07-11T09:37:26.163" ContentLicense="CC BY-SA 4.0" />
  <row Id="15583" PostTypeId="2" ParentId="15582" CreationDate="2020-07-10T16:17:11.750" Score="5" Body="&lt;p&gt;&lt;em&gt;Preface: The question seams to ask for opinions, as it is opinion if someone accepts an emulation, no matter if software on a CPU or on a FPGA, as the same as the real thing or not.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Ask yourself, is driving a modern technology car pimped up to look like an SSK the same as driving the real thing? Do you want to ride a 1950s BMW with all it's sounds, smells and vibrations (and all the tinkering needed to keep it going) or a 2020 electric bike made to look like one, giving you the classic sound from a build in iPod?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm wandering what are the differences between using a real hardware, FPGA based hardware emulators like MiSTer and the large amount of software emulators for different systems running on modern Windows, MacOS and Linux computers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If you're just a user, convinced with using your modern keyboard and modern mouse handling some image, that looks like 640 x 400, on your 4k screen, then software is all you need. Already a FPGA version will be overkill, as it uses the same modern devices.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, if imaging is not enough, but you want to feel the bulky Atari mouse, the wiggly Amiga keyboard or the bulky C64 joystick, all presented with real CRT glare, then there is no other way than getting the real thing.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;One thing which came to my mind is that both software and hardware emulators could be not precise enough&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By now they are. in each and every detail. Modern hardware isfast enough to allow the use of HLL software to aquire cycle exact timing. Especially when all in and output is emulated anyway, mapped to modern devices.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But this seems to me like something depending on the quality of the implementation which can vary between different emulators and improve over time because of bug fixing, but not as a fundamental issue.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Lazy programming and maintenance doesn't invalidate the approach. For all purpose, except real hands on hardware, there is no difference.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Also I'm hearing about the latency issue with the software emulators, but I'm a little surprised that something like this can really be felt on a computer which is probably millions time faster than the emulated machine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Maybe a hundred times, if at all. Keep in mind, most major components haven't gotten as much faster - and most of that has been eaten up by larger size devices and data needs.&lt;/p&gt;&#xA;&lt;p&gt;The Latency issue is something that has been around since like always. There will be always some stating they can see/feel the difference. While this may be true in a few, very dedicatied situations it's rubbish most of the time. Claiming feeling a few microseconds, when testing a joystick already may cost more is simply fantasy.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there really a technical reason to prefer real hardware or FPGA based emulation vs. software emulation&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What constitutes a technical reason for you? In itself the term is not clear when comparing complete different implementations.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;or this is just a nostalgia thing, caused by desire to fill like you are really back in the 80's or 90's?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Have you ever sat in front of one of the old machines? It's surprising how different keyboards feel when leaving today's standardized equipment.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;And then there is of course the hardware tinkering - not real fun with emulators, as here adding an interface is merely adding a few lines of code - or just configuration in some cases. No layout, not etching, no soldering and especially no cursing and patching until it works.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-10T16:38:57.900" LastActivityDate="2020-07-10T16:38:57.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15584" PostTypeId="2" ParentId="15582" CreationDate="2020-07-10T16:35:53.103" Score="9" Body="&lt;p&gt;An advantage which FPGA emulators generally share with vintage hardware is the ability to use devices that interact with the hardware in ways that are very timing-dependent.  For example, if one has a game cartridge for the NES which triggers an interrupt every time the first line of data for a particular sprite is fetched, a console that reads out the contents of a cartridge and then emulates it would only be able to play the game correctly if it were able to recognize what the cartridge was doing with the interrupt line.&lt;/p&gt;&#xA;&lt;p&gt;FPGA-based hardware would generally work as well as, if not more reliably than, vintage hardware, but there are a few weird quirks to bear in mind.  Some prototype expansion cartridges for the Atari 2600, for example, relied upon the fact that even when the NMOS 6502 is trying to pull the data bus high, it's incapable of trying hard enough to either overpower an external device that's trying to pull the line low, nor damage itself in the attempt.  Note that the reverse is not true: an NMOS device that tries to pull a line low while an external device is pulling it high can damage itself in the attempt (RIP 2600jr).  If one were to plug into a modern recreation system an NMOS device which relied upon the ability to overdrive bus wires, and the system didn't limit the high-side drive current on those wires, it could damage the external device.  I don't know to what extent that would actually be an issue, but since any devices that rely upon such techniques are probably rare, it would be very unfortunate if they were damaged.&lt;/p&gt;&#xA;&lt;p&gt;Another potential issue is that vintage electronics were often rather slow to respond to signals, which meant that if a device were to very briefly output a signal on a wire, it would likely be ignored.  Some vintage electronics would sometimes output brief glitch pulses if some combination of inputs changed between one state where the output should be low, and a different state where the output should be low.  If an FPGA recreation isn't designed to ignore such pulses, they may cause erroneous operation on the recreated hardware even though they would have caused no problem on the original.&lt;/p&gt;&#xA;&lt;p&gt;Personally, I think FPGAs are the best way of recreating systems.  Vintage hardware is cool, but reliability is often problematic.  Software emulation may work pretty well, but will be limited to interfacing with hardware the emulator designer knows about.  A good FPGA-based recreation can interface with almost any kind of vintage hardware, &lt;em&gt;including devices the FPGA designer knows nothing about&lt;/em&gt;, while offering better reliability than vintage hardware.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-07-10T16:35:53.103" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15585" PostTypeId="2" ParentId="15530" CreationDate="2020-07-10T16:46:33.143" Score="1" Body="&lt;p&gt;The DEC PDP-8, a 12-bit machine with 4k words of memory, had 8-bit direct addressing (7-bit offset and a 1-bit Page Zero selector).  However, an Indirect bit in the order code caused the contents of the directly addressed location to be used as a 12-bit address of the real operand.  Later models of the PDP-8 family could have up to 7 more &amp;quot;Fields&amp;quot; of memory, each with 4k words, which could be addressed only indirectly, having first set the required Data Field (0-7) by means of a pseudo Input/Output Transfer (IOT) instruction.&lt;/p&gt;&#xA;" OwnerUserId="18749" LastEditorUserId="18749" LastEditDate="2020-07-10T22:25:09.287" LastActivityDate="2020-07-10T22:25:09.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15586" PostTypeId="2" ParentId="15582" CreationDate="2020-07-10T16:58:45.920" Score="3" Body="&lt;p&gt;To offer an answer on the latency question only, as an emulator author:&lt;/p&gt;&#xA;&lt;p&gt;Exceptions abound but the general rule on original hardware of the '80s and into the early '90s is that joypad and keyboard input changes can be detected by hardware almost immediately after they happen, and that as video and audio is output from the machine it reaches the user almost immediately — e.g. for a classic CRT television the level the raster is painting right now is very nearly the live output of the machine.&lt;/p&gt;&#xA;&lt;p&gt;With hardware now, input generally traverses a Bluetooth or USB stack, which may be inspected only at a certain interval by the host OS, and if anything has happened it then communicates that onward to the interested process which may or may not happen immediately depending on the specific scheduler.&lt;/p&gt;&#xA;&lt;p&gt;Many emulators also implement a main loop that looks like how you might design a game:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;collect all latest input and forward it to the emulated machine;&lt;/li&gt;&#xA;&lt;li&gt;run the machine for a frame;&lt;/li&gt;&#xA;&lt;li&gt;paint the next frame of output to an invisible buffer;&lt;/li&gt;&#xA;&lt;li&gt;queue that up for display at the next vsync and block;&lt;/li&gt;&#xA;&lt;li&gt;repeat.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;For argument's sake, imagine your modern machine is very fast and that steps 2 and 3 are instant. Then:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;there's an average half a frame of input latency plus whatever Bluetooth/USB signalling and the OS added — any input that occurs just after the top of a frame won't be forwarded until the beginning of the next, any that occurs right at the end will be communicated at almost the right time, and the range of latencies in between is linear so the average is halfway between; and&lt;/li&gt;&#xA;&lt;li&gt;there's a fixed additional frame of output latency because you post a frame for presentation at the next vsync and then wait until it is time to be shown.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So with that simple loop, on ideal hardware, in the average case the delay between you pressing something and the screen reacting is around 1.5 frames more than real hardware. And that's only if host and emulated machines are running at the same frame rate.&lt;/p&gt;&#xA;&lt;p&gt;Purists argue that some original games are so finely tuned, after the appropriate number of hours testing and tweaking back in the day, that 1.5 frames puts them at a disadvantage that they can detect.&lt;/p&gt;&#xA;&lt;p&gt;FPGAs are usually* emulation, no matter how they're sold, because they're usually a person reimplementing a specification in a high-level hardware description language. But they seek to omit as much of that latency as possible — a good quality one will omit the video buffering entirely, run the rest of the system in real time and push input in with minimal delay.&lt;/p&gt;&#xA;&lt;p&gt;* qualification added as per the correction provided by @lvd below. See his answer for more colour.&lt;/p&gt;&#xA;&lt;p&gt;Of course, it's not hard to fix most of the software problems in software:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;forward input more often;&lt;/li&gt;&#xA;&lt;li&gt;don't use vsync to trigger new output to vsync; and&lt;/li&gt;&#xA;&lt;li&gt;don't use a double buffer.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In extremis, you can even race the raster for similar output latency to an FPGA — if you already have a high-frequency loop for frequent input, and if the base hardware supports any sort of output which can produce screen tearing, then you've got the tools.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately such approaches weren't usually taken by emulators in the past, especially before latency became such a widely-discussed topic, and something of a negative image has stuck.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-07-10T19:23:13.660" LastActivityDate="2020-07-10T19:23:13.660" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15587" PostTypeId="2" ParentId="15582" CreationDate="2020-07-10T17:19:11.210" Score="3" Body="&lt;p&gt;I'd like to clarify 'FPGA emulation' term mentioned in the question.&lt;/p&gt;&#xA;&lt;p&gt;First, of course there is such thing as software emulation. Let's take as an example some (more or less) exact software emulators of the 6502 CPU. They try to emulate all external artefacts of the real CPU, such as number of cycles per each command, addresses of the memory accesses, and even 'internal state' (rather only the state of software-visible registers). Yet it has nothing alike with the real  CPU, starting from the point it is pure software matter, not hardware device.&lt;/p&gt;&#xA;&lt;p&gt;When any new feature of real 6502 is discovered (like new undocumented opcodes or flags or execution details), it is got inserted in the software emulator like 'another feature to implement'. No features of the real thing would emegre in the software emulator, if they are unknown to the implementer.&lt;/p&gt;&#xA;&lt;p&gt;Then let's look at 6502-compatible HDL cores. They are now actually represent a real digital logic device -- or a model of that (in the case the HDL is simulated, not implemented in the real hardware like FPGA or ASIC). They now have real flipflop (or latch) storage for the CPU registers, they could implement real CPU bus signals and even be inserted in the retro computer instead of the original 6502. Yet they are made (more or less) 'from scratch', with the specifications of the CPU they are intended to replace, not its internal structure. And yet they would lack features not described in that specifications, that exist in real retro CPU, but are yet unknown to the implementer.&lt;/p&gt;&#xA;&lt;p&gt;Another level of the reconstruction could be the HDL design built in the following way:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;real retro CPU is decapped and photographed&lt;/li&gt;&#xA;&lt;li&gt;then netlist and transistor-level schematics is recreated (either by hand or by some more or less automated tools)&lt;/li&gt;&#xA;&lt;li&gt;netlist is converted to the gate level schematics and then to HDL description, that is in turn implemented in FPGA or ASIC.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Unlike previous cases, now almost all features of the real CPU become implemented 'natively', because the structure of the resulting HDL is more or less equvalent to the structure of the real thing (at logic gates and flipflops level).&lt;/p&gt;&#xA;&lt;p&gt;Still there could be problems, for example 6502 has some instructions that behave erratically and I feel like such behavior wouldn't emerge in HDL naturally.&lt;/p&gt;&#xA;&lt;p&gt;Generally speaking, I consider everything above the 'reverse-engineer, then recreate HDL' is actually an &lt;em&gt;emulation&lt;/em&gt;, either in software or hardware, while the latter way is &lt;em&gt;not&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In other words, let's consider preservation of the old software. We could run it on contemporary hardware, but if it is not available, software emulators come into play, yet the old software piece they are used to execute is still exactly the same.&lt;/p&gt;&#xA;&lt;p&gt;Now we'd like to preserve old piece of hardware (CPU), but it authentic implementation is unavailable, so we recreate it using newer technology, but the logic structure of the CPU remains exactly the same.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2020-07-10T17:25:21.180" LastActivityDate="2020-07-10T17:25:21.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15588" PostTypeId="2" ParentId="15582" CreationDate="2020-07-10T17:54:37.617" Score="2" Body="&lt;p&gt;Vintage NTSC machines (and CRT Macs, etc.) can change their graphics output in the middle of CRT display refresh (part way down the vertical raster), thus tearing the image in response to real-time input.&lt;/p&gt;&#xA;&lt;p&gt;Emulators using non-CRT monitors can’t do that in real-time, and can only fake a torn raster the next frame or field.&lt;/p&gt;&#xA;&lt;p&gt;And the only way to test whether an emulation is accurate in to it compare against actual (ground truth) vintage hardware.  See if there are are any undocumented hidden logic traps (defusion, etc.) or analog layout bugs under the various ASIC chip layers.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2020-07-10T18:00:07.403" LastActivityDate="2020-07-10T18:00:07.403" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15589" PostTypeId="2" ParentId="15578" CreationDate="2020-07-10T18:04:09.517" Score="5" Body="&lt;p&gt;Not a book, but the Computer History Museum has videos in their online collection of the oral histories given by many people associated with the development of many early silicon IC (and earlier!) products.&lt;/p&gt;&#xA;&lt;p&gt;The IEEE history center also has some great online resources:&#xA;&lt;a href=&quot;https://www.ieee.org/about/history-center/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ieee.org/about/history-center/index.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2020-07-10T19:01:57.540" LastActivityDate="2020-07-10T19:01:57.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15590" PostTypeId="1" AcceptedAnswerId="15591" CreationDate="2020-07-10T19:20:57.423" Score="10" ViewCount="745" Body="&lt;p&gt;so here is the code: (which comes from &lt;a href=&quot;https://github.com/v7unix/v7unix/blob/master/v7/usr/src/libc/sys/write.s&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, I've also verified this source is in my unix v7 distribution). For reference, this is running on a PDP-11 simulated with the simh program (so please keep in mind the instructions are 16-bit words and values are in octal).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.write = 4.&#xA;&#xA;_write:&#xA;    mov r5,-(sp)&#xA;    mov sp,r5&#xA;    mov 4(r5),r0&#xA;    mov 6(r5),0f&#xA;    mov 8(r5),0f+2&#xA;    sys 0; 9f&#xA;    bec 1f&#xA;    jmp cerror&#xA;1:&#xA;    mov (sp)+,r5&#xA;    rts pc&#xA;&#xA;.data&#xA;9:&#xA;    sys .write; 0:..; ..&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I get most of what is happening but this gets confusing:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    mov 6(r5),0f&#xA;    mov 8(r5),0f+2&#xA;    sys 0; 9f&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In this old assembly, the first argument is the source and the second arg is the destination. But what destination is 0f? How can we move &lt;code&gt;06+(r5)&lt;/code&gt; into &lt;code&gt;0f&lt;/code&gt;? After this there is &lt;code&gt;mov 8(r5),0f+2&lt;/code&gt; which is even more confusing to me because I thought all numbers were in octal unless they had 0x in front of them.&lt;/p&gt;&#xA;&lt;p&gt;Finally, there is &lt;code&gt;sys 0; 9f&lt;/code&gt; - I've looked and the 0 system call is an 'indirect system call' so I'm guessing it's calling &lt;code&gt;sys .write; 0:..; ..&lt;/code&gt; after the &lt;code&gt;9:&lt;/code&gt; label? Does &lt;code&gt;..&lt;/code&gt; have some special meaning in this old kind of assembly code? It looks unusual. After this, &lt;code&gt;bec 1f&lt;/code&gt; will skip over the &lt;code&gt;jmp cerror&lt;/code&gt; if there is no error bit set, then we return to the caller with &lt;code&gt;rts pc&lt;/code&gt;. So, I think I get the bulk of this but if someone could clear up the few mysteries that'd be great.&lt;/p&gt;&#xA;" OwnerUserId="18678" LastEditorUserId="6659" LastEditDate="2020-07-10T21:27:57.510" LastActivityDate="2020-07-10T22:05:11.210" Title="Trying to understand some assembly syntax in the Unix v7 write system call" Tags="&lt;assembly&gt;&lt;operating-system&gt;&lt;unix&gt;&lt;pdp-11&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15591" PostTypeId="2" ParentId="15590" CreationDate="2020-07-10T19:42:34.357" Score="11" Body="&lt;p&gt;&lt;em&gt;Note: this is mostly guesswork&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I don't know this assembler but the &lt;code&gt;f&lt;/code&gt; suffix seems to denote a label. Example&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    bec 1f&#xA;    jmp cerror&#xA;1:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Those instructions write the parameters in the parameter zone of the system call.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;mov 6(r5),0f&#xA;mov 8(r5),0f+2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;note that there's a 0 label just after the &lt;code&gt;sys&lt;/code&gt; instruction. It holds the parameters (copies of those which were pushed on the stack, then &amp;quot;linked&amp;quot; to r5), that follow the system call.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;9:&#xA;    sys .write; 0:..; ..&#xA;                |  |   |&#xA;             label |   |&#xA;                   |   |&#xA;              param1  param2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The 2 &lt;code&gt;..&lt;/code&gt; dots look like placeholders for two 16 bit slots. &lt;code&gt;0f+2&lt;/code&gt; is just address of label 0, +2 bytes (even if 2 is in octal, it's still 2, BTW)&lt;/p&gt;&#xA;&lt;p&gt;Those parameters probably have to be right after the &lt;code&gt;sys&lt;/code&gt; call because the OS will look at the return address and will fetch the parameter from there. I've seen that a lot with 68000 &lt;code&gt;TRAP&lt;/code&gt; instructions, followed by data.&lt;/p&gt;&#xA;&lt;p&gt;All system calls seem to have been done that way. It is a gateway/bridge code from user code to system code, using traps (which allow to call the OS through vectors, in supervisor mode)&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-07-10T19:42:34.357" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15592" PostTypeId="2" ParentId="15575" CreationDate="2020-07-10T19:52:55.027" Score="5" Body="&lt;p&gt;Syndicate uses a standard DOS format, and is completely OS compliant when it comes to disk operations. It also has no physical copy protection.&lt;/p&gt;&#xA;&lt;p&gt;If the disk sectors where executable itself is stored were corrupt, you'd probably get a message at bootup: failed to load executable, something like that.&lt;/p&gt;&#xA;&lt;p&gt;Now if one data file is corrupt, and the game doesn't check return value of the &lt;code&gt;Read&lt;/code&gt; command, plus the game turns off all system requesters to avoid for instance that they pop up to ask for another disk and destroy the graphical screen set up by the game. So if there's a sector error, the system is silenced and no requester pops up either.&lt;/p&gt;&#xA;&lt;p&gt;If the file is corrupt or truncated &lt;em&gt;and&lt;/em&gt; packed (for instance with RNC packer) the unpacking severely fails and crashes the machine. It's worse when files are packed than when not packed. If a graphical file is damaged but not packed, graphical corruption can happen, and the game could still be playable, but with packed files, the crash is almost guaranteed.&lt;/p&gt;&#xA;&lt;p&gt;And files in this game are RNC packed all right. For instance &lt;code&gt;INTROPT1.PAK&lt;/code&gt; and most .PAK extensions. RNC (Rob Northern Cruncher) unpacking doesn't have safety and crashes when packed data is corrupt.&lt;/p&gt;&#xA;&lt;p&gt;The disassembly of the relevant parts kind of proves that. This is the read file wrapper which returns the size read in &lt;code&gt;D0&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;dos_read:&#xA;    MOVEM.L D2-D3/A6,-(A7)      ;fe4d8: 48e73002&#xA;    MOVEA.L DosBase,A6      ;fe4dc: 2c79000fe3d0&#xA;    MOVEM.L (16,A7),D1-D3       ;fe4e2: 4cef000e0010&#xA;    JSR (_LVORead,A6)   ;fe4e8: 4eaeffd6 dos.library (off=-42)&#xA;    MOVEM.L (A7)+,D2-D3/A6      ;fe4ec: 4cdf400c&#xA;    RTS             ;fe4f0: 4e75&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which is called by this routine:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LAB_110D:&#xA;    MOVEM.L D6-D7/A5,-(A7)      ;39898: 48e70304&#xA;    MOVE.L  (24,A7),D6      ;3989c: 2c2f0018&#xA;    MOVE.L  (16,A7),D7      ;398a0: 2e2f0010&#xA;    MOVEA.L (20,A7),A5      ;398a4: 2a6f0014&#xA;    MOVE.L  D6,-(A7)        ;398a8: 2f06&#xA;    MOVE.L  A5,-(A7)        ;398aa: 2f0d&#xA;    MOVE.L  D7,-(A7)        ;398ac: 2f07&#xA;    JSR dos_read        ;398ae: 4eb9000fe4d8&#xA;    LEA (12,A7),A7      ;398b4: 4fef000c&#xA;    MOVEM.L (A7)+,D6-D7/A5      ;398b8: 4cdf20c0&#xA;    RTS             ;398bc: 4e75&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which is called by this routine several times without any error checking:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MOVE.L  D6,-(A7)        ;23afa: 2f06&#xA;JSR LAB_110D        ;23afc: 4eb900039898&#xA;PEA 8672.W          ;23b02: 487821e0&#xA;PEA LAB_1745        ;23b06: 4879000b1fb4&#xA;MOVE.L  D6,-(A7)        ;23b0c: 2f06&#xA;JSR LAB_110D        ;23b0e: 4eb900039898&#xA;PEA 500.W           ;23b14: 487801f4&#xA;PEA LAB_147D        ;23b18: 48790003f142&#xA;MOVE.L  D6,-(A7)        ;23b1e: 2f06&#xA;JSR LAB_110D        ;23b20: 4eb900039898&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In the end, it really depends on how the game is coded. Other games could detect the error and stop with a message or a &amp;quot;rainbow screen&amp;quot; (palette cycling indicating that something went wrong). The development cycle of a game has always been very short, and programmers weren't very keen in handling all possible errors, unless they were using &amp;amp; re-using a special game engine from game to game, where errors were handled more properly.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-07-10T20:32:20.627" LastActivityDate="2020-07-10T20:32:20.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15593" PostTypeId="2" ParentId="975" CreationDate="2020-07-10T20:26:57.983" Score="0" Body="&lt;p&gt;There were lots of long answers up above, but the short, one-word answer is &amp;quot;yes.&amp;quot; There are always scanlines on an old-school CRT with PAL or NTSC timing, especially when the video they were displaying was the hybrid &amp;quot;progressive&amp;quot; non-interlaced signals typical of all early-80s computers that could connect to a TV.&lt;/p&gt;&#xA;" OwnerUserId="18753" LastActivityDate="2020-07-10T20:26:57.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15594" PostTypeId="2" ParentId="15522" CreationDate="2020-07-10T20:55:30.443" Score="5" Body="&lt;p&gt;This was part of how AMD developed their first 80386.&lt;/p&gt;&#xA;&lt;p&gt;AMD had long been a second source for Intel x86 chips. Originally the agreement was that Intel would provide details to AMD, who would build their own chips. As time went on Intel wanted to end this agreement or at least prevent AMD from making use of it. This led to numerous court battles.&lt;/p&gt;&#xA;&lt;p&gt;AMD expected to win, so one of their approaches was to reverse engineer Intel's chips by doing what you describe-- decapping them, and working out the designs by direct examination under microscopes. They took &lt;em&gt;lots&lt;/em&gt; of pictures. Eventually AMD won out and they were able to produce the Am386. I believe AMD used other approaches in parallel, but I don't know details of them.&lt;/p&gt;&#xA;&lt;p&gt;[My only source is my memories from working at AMD at the time. I wasn't on this team but the story was well known around the company.]&lt;/p&gt;&#xA;" OwnerUserId="18754" LastActivityDate="2020-07-10T20:55:30.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15595" PostTypeId="2" ParentId="15590" CreationDate="2020-07-10T21:05:29.903" Score="5" Body="&lt;p&gt;&lt;em&gt;Not an answer, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15591/6659&quot;&gt;Jean-François Fabre has already deducted all workings&lt;/a&gt;, but some hints about the syntax/workings of AS to understand the source.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This source is meant to be assembled using the &lt;a href=&quot;https://en.wikipedia.org/wiki/As_(Unix)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unix assember AS&lt;/a&gt;. AS is an extreme primitive assembler designed only to handle machine specific parts of Unix. It carries only the most essential functions and those even in a rather ... well, lets be positive and say 'unusual' and special to type way. Some of the features are encountered in above source:&lt;/p&gt;&#xA;&lt;h2&gt;Identifiers and Assignment&lt;/h2&gt;&#xA;&lt;p&gt;To start with, there are identifiers and assignment to them. According to the manual an identifier is:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;An identifier consists of a sequence of alphanumeric characters (including period &amp;quot;.&amp;quot; underscore &amp;quot;_&amp;quot;, and tilde &amp;quot;~&amp;quot; as alphanumeric) of which the first may not be numeric. Only the first eight characters are significant. When a name begins with a tilde, the tilde is discarded and that occurrence of the identifier generates a unique entry in the symbol table which can match no other occurrence of the identifier. This feature is used by the C compiler to place names of local variables in the output symbol table without having to worry about making them unique.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The important implication here is that a period can not only occur at any place but as well at the first without creating any meaning - that is as long as it doesn't equals any legal pseudo-operation (like .global) Thus the definition&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.write = 4.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;simply creates a symbol that evaluates to the decimal value of 4 - which happens to be  the sys call number for write() :)&lt;/p&gt;&#xA;&lt;h2&gt;Local Labels&lt;/h2&gt;&#xA;&lt;p&gt;AS doesn't have local labels, but uses a system of numeric labels that can be redefined. From the manual:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A numeric label consists of a digit 0 to 9 followed by a colon ( : ). Such a label serves to define temporary symbols of the form &amp;quot;nb&amp;quot; and &amp;quot;nf&amp;quot;, where n is the digit of the label. As in the case of name labels, a numeric label assigns the current value and type of &amp;quot;.&amp;quot; to the temporary symbol. However, several numeric labels with the same digit may be used within the same assembly. References of the form &amp;quot;nf&amp;quot; refer to the first numeric label &amp;quot;n:&amp;quot; :F:orward from the reference; &amp;quot;nb&amp;quot; symbols refer to the first &amp;quot;n:&amp;quot; label :B:ackward from the reference. This sort of temporary label was introduced by Knuth [The Art of Computer Programming, Vol I: Fundamental Algorithms]. Such labels tend to conserve both the symbol table space of the assembler and the inventive powers of the programmer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So the lines&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    mov  6(r5),0f&#xA;    mov  8(r5),0f+2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;simply refer to the first later instance of the numeric label of '0' - in the second line with an offset of two.&lt;/p&gt;&#xA;&lt;h2&gt;Statements&lt;/h2&gt;&#xA;&lt;p&gt;The second issue one may stumble a bit is the line&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    sys  .write; 0:..; ..&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Here it's helpful to keep in mind how AS defines statements:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A source program is composed of a sequence of statements. Statements are separated either by new-lines or by semicolons.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So to the assembler this isn't a single statement but multiple, and this already happens before:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    sys 0; 9f&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So the assembler sees:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    sys 0;&#xA; 9f&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The first statement is a sys instruction - which is the system trap instruction used by Unix for kernel calls. While being a two byte instruction, the second byte is of free use, any value can be put here, including zero, as seen. Sys call zero is handled by the kernel as indirect call, so it takes to next word and uses it as address to look for the 'real' call.&lt;/p&gt;&#xA;&lt;p&gt;So the second statement simply placed the address the label holds as word into memory, enabling the indirection. This is made to avoid self modifying code and allow reentrant programming. The second sys call will not be executed, but simply pared as if it would have been made like encoded.&lt;/p&gt;&#xA;&lt;p&gt;The sys call placed in the modifiable data segment (&lt;code&gt;.data&lt;/code&gt;) is just a data structure formed like a sys call.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    sys  .write&#xA;0:..&#xA; ..&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So again the first statement assembles as sys, this time using the symbol value (see above) of &lt;code&gt;.write&lt;/code&gt;. Write requires the file handle in R0 and a parameter list with two words holding buffer address and length after it.&lt;/p&gt;&#xA;&lt;p&gt;The next statement defines the local label, referenced in the prior instruction as &lt;code&gt;0f&lt;/code&gt;. A label can be defined here as for the assembler it's a new statement. Any number of whitespaces between the semicolon (&lt;code&gt;;&lt;/code&gt;) terminating the previous statement and the label itself can be inserted as labels have to have a terminating colon (&lt;code&gt;:&lt;/code&gt;), identifying them. The colon does as well make any following whitespaces optional, thus allowing the 'instruction' to be simply continued.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;..&lt;/code&gt; is a special symbol representing the relocation counter (see below), using it alone will reserve space for an address sized data item - much like that &lt;code&gt;9f&lt;/code&gt;before. On runtime this will be overwritten with whatever is passed at &lt;code&gt;6(r5)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The third statement now repeats the reservation of an address sized word, now to be filled with the value at &lt;code&gt;8(R5)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(We see, this isn't programmed very portable as the size of an address word is hard coded within the move instruction, as two, instead of using a second label. Not really cool, is it?)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Relocation Counter&lt;/h2&gt;&#xA;&lt;p&gt;The relocation counter, accessed as &lt;code&gt;..&lt;/code&gt; is essentially the offset of a segment within memory. by default zero. Like with the location counter (&lt;code&gt;.&lt;/code&gt;) it can be assigned, which may be used for very specific address layouts. In this case it's only important that it is handled as an address and will produced as a statement an address sized word. Perfect to reserve space for address parameters, isn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-10T22:05:11.210" LastActivityDate="2020-07-10T22:05:11.210" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15596" PostTypeId="2" ParentId="15570" CreationDate="2020-07-10T22:10:27.003" Score="4" Body="&lt;p&gt;In complement to the other answers, never forget that in the 1980s memory was &lt;strong&gt;expensive&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For a 16-bit system, the base memory and every expansion costs twice the price of an 8-bit system - perhaps £100 more at the time.&lt;/p&gt;&#xA;&lt;p&gt;This is a big reason why Intel sold so many 8088s (there were other cost savings in bus buffers and PCB).&lt;/p&gt;&#xA;&lt;p&gt;Motorola tried to follow suit with the 68008, but just from looking at the instruction set, it was an unwise move. The 68000 instruction set is based on a 16-bit word, whereas the 8086 instruction set is based on the byte.&lt;/p&gt;&#xA;&lt;p&gt;On a 68008, every instruction requires two fetch cycles, whereas the 8088 has a number of 1-byte instructions.&lt;/p&gt;&#xA;&lt;p&gt;MOVE.B #0, R1 on the 68008 requires four fetch cycles, whereas the equivalent MOV AL,0 on the 8088 requires two fetch cycles.&lt;/p&gt;&#xA;&lt;p&gt;So an 8-bit QL was cheaper on memory, and Sinclair probably got a good price from Motorola on the 68008 because it was too slow to be a candidate for a serious system.&lt;/p&gt;&#xA;&lt;p&gt;Confession: I persuaded my father to buy a QL because I would never have persuaded him to buy the applications he needed, but also so I could learn about the 68000.&lt;/p&gt;&#xA;" OwnerUserId="4160" LastActivityDate="2020-07-10T22:10:27.003" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15597" PostTypeId="2" ParentId="15582" CreationDate="2020-07-11T09:25:34.273" Score="3" Body="&lt;p&gt;many aspects of the HW vs SW has been covered by other posts here so I will not touch them. Instead I would like to explain the &lt;strong&gt;LATENCY&lt;/strong&gt; issue from mine point of view along with experience I acquired during coding my emulators for various platforms...&lt;/p&gt;&#xA;&lt;p&gt;Making SW emulator on modern machines is much harder from latency aspect than it was back in the direct I/O access times. For home computers and game consoles we need to simulate/emulate sound,visual output and user input as precisely as we can. The biggest problem is with sound. That is because our hearing is much much better than any other of our senses and wee can feel/hear the difference if the sound is off by even few &lt;code&gt;ms&lt;/code&gt; or &lt;code&gt;Hz&lt;/code&gt;. If screen is off by 1 or 2 frames we can not see the difference. Also if the input is delayed a small bit its ok (for most of humans).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;In modern machine architecture all is buffered&lt;/strong&gt; (especially sound). So in order to output sound wee need to create a &lt;strong&gt;PCM&lt;/strong&gt; data that is send over to sound chip and played through &lt;strong&gt;DMA+DAC&lt;/strong&gt;. In order to do this usually 2 circular or many small linear buffers are used. Now to produce glitch-less sounds the buffers must be big enough. For example on Windows last time I check &lt;strong&gt;WAVEOUT&lt;/strong&gt; needs at least &lt;code&gt;20-80&lt;/code&gt; ms. &lt;strong&gt;DirectSound&lt;/strong&gt; need &lt;code&gt;&amp;gt;400 ms&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now if emulated program adjusts sound output it will outputted only after the already enqued sound is played out.&lt;/p&gt;&#xA;&lt;p&gt;The same goes for I/O input on some platforms so the delays add up.&lt;/p&gt;&#xA;&lt;p&gt;When you use &lt;strong&gt;FPGA&lt;/strong&gt; then you have direct access to the sound output without any buffering. The same goes for input.&lt;/p&gt;&#xA;&lt;p&gt;However game &lt;strong&gt;input latency (keyboard, joystick) have usually nothing to do with latency of the host system&lt;/strong&gt;. The usual cause is that majority of emulators use &lt;strong&gt;clock tics&lt;/strong&gt; to maintain emulated speeds. So they simulate the CPU or whatever and once reached desired number of simulated clocks per time they Sleep until next timer is issued or whatever. The faster the host computer the smaller time it needs to emulate hence the simulation will not react most of the real time.&lt;/p&gt;&#xA;&lt;p&gt;For example let assume our simulation can run 100x faster than original speed of emulated computer. That means only 1% of time the simulation is doing something and rest is just &lt;code&gt;Sleep()&lt;/code&gt;. During the Sleep the emulation can not respond to anything. So it can miss key strokes, fire clicks etc... To remedy that some emulators might use buffering again leading to the latency instead of ignoring input. There are also different style of controlling time that completely removes this problem. For more info about this subject see:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/33317202/2521214&quot;&gt;Question about cycle counting accuracy when emulating a CPU&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastActivityDate="2020-07-11T09:25:34.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15598" PostTypeId="2" ParentId="15479" CreationDate="2020-07-11T12:02:57.913" Score="14" Body="&lt;p&gt;Windows 95 and 98 &lt;code&gt;IO.SYS&lt;/code&gt;/&lt;code&gt;WINBOOT.SYS&lt;/code&gt; consists of three parts: the initial loader, the payload and the device configuration manager executable.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The initial loader (&lt;a href=&quot;https://www.os2museum.com/wp/dos-boot-hang-update/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSLOAD&lt;/a&gt;) comprises the first three or four&lt;sup&gt;0&lt;/sup&gt; 512-byte sectors of the file; the first sector begins with the signature &lt;code&gt;MZ&lt;/code&gt;, the second starts with the signature &lt;code&gt;BJ&lt;/code&gt; and the last ends with the signature &lt;code&gt;MS&lt;/code&gt;. The FAT boot sector puts the initial loader at real mode address &lt;code&gt;0070:0000&lt;/code&gt;, checks the first two of these signatures, then starts execution at address &lt;code&gt;0070:0200&lt;/code&gt;. The job of MSLOAD is to copy boot sector variables into its data area (the first sector), relocate itself to a higher memory address, load the rest of the file starting at segment 0x70 again and then transfer control to &lt;code&gt;0070:0000&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;MSLOAD is immediately followed by the payload, which is the DOS kernel proper, loaded as described above. Although it is loaded into a single contiguous region of memory, it is too large to fit into a single 64 KiB real-mode segment, and so the DOS kernel is further split into regions addressed using different segment bases; discovering those will be up to you. The length of this part can be determined by reading the word at offset 8 of the file, multiplying it by 16 and subtracting the length of MSLOAD.&lt;/li&gt;&#xA;&lt;li&gt;The device configuration manager (MSDCM&lt;sup&gt;1&lt;/sup&gt;) is a small executable whose purpose is to read the Registry and prompt the user to pick a hardware configuration if there are multiple configurations defined. As it turns out, it is no accident that &lt;code&gt;IO.SYS&lt;/code&gt; begins with the signature &lt;code&gt;MZ&lt;/code&gt;, just like DOS executables; the file is simultaneously a regular EXEPACK-compressed DOS executable, and the values in the MZ header at the beginning of the file allow it to be executed using interrupt 0x21 service 0x4b, which will load the third part of the file. If the real-mode kernel &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/15906&quot;&gt;detects that it is booting a Windows installation&lt;/a&gt;, the kernel will do just that early in the boot process, before even &lt;code&gt;CONFIG.SYS&lt;/code&gt; is processed.&lt;sup&gt;2&lt;/sup&gt; The word at offset 8 is simply the ‘header length’ field of the MZ header, used both by MSLOAD to determine the length of the payload, and by the MZ loader to skip over the payload when loading MSDCM.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In Windows Me, the &lt;code&gt;IO.SYS&lt;/code&gt; file has a similar structure, with the following differences:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;MSDCM has been integrated into the payload as a subroutine; it is no longer independently executable. The &lt;code&gt;MZ&lt;/code&gt; signature and the ‘header length’ field remain where they were (as MSLOAD still uses them), but the other fields of the executable header are filled with zeroes.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The payload may be compressed; this is indicated by the signature &lt;code&gt;CM&lt;/code&gt;. If MSLOAD sees the payload starting with that signature, it looks for the end for the compressed stream and will then use the decompression routine located at a 16-byte-aligned offset right after the payload (also preceded by a signature &lt;code&gt;CM&lt;/code&gt;, and some headers). If the compression signature is not found, the payload is loaded directly, like in previous versions.&lt;/p&gt;&#xA;&lt;p&gt;The compression format itself is a rather unremarkable LZSS-ish bitstream split into chunks. Rudolph Loew’s IO8DCOMP can decompress the file in-place, or you may see &lt;a href=&quot;https://github.com/chenall/grub4dos/blob/3c1d05f39e49ec1d7543caa825df00068b96620b/stage2/builtins.c#L441-L621&quot; rel=&quot;nofollow noreferrer&quot;&gt;how GRUB4DOS accomplishes it&lt;/a&gt;.&lt;sup&gt;3&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;To recap:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MSLOAD can be disassembled by loading the first four sectors of IO.SYS as a raw binary at address &lt;code&gt;0070:0000&lt;/code&gt; and placing the entry point at &lt;code&gt;0070:0200&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;The payload can be disassembled by cutting it out of the file, decompressing it (if compressed), loading it starting at segment 0x70, placing the entry point at the beginning of that segment (i.e. at &lt;code&gt;0070:0000&lt;/code&gt;), and discovering other segments by trial and error;&lt;/li&gt;&#xA;&lt;li&gt;MSDCM (before Millenium) can be disassembled by using an EXEPACK decompressor and disassembling the output as an MZ executable.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As it happens, the Windows Me ‘crippling’ code is located entirely within MSLOAD; there is no need to decompress the file. In fact, taking a copy of &lt;code&gt;IO.SYS&lt;/code&gt; from the Emergency Boot Disk and overwriting the code in its first four sectors with the loader from the hard disk’s copy of &lt;code&gt;IO.SYS&lt;/code&gt; would accomplish the same thing as applying the patch. (In fact, a somewhat well-known patch by ‘Manifest Destiny’ goes exactly that route.)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;0&lt;/sup&gt; Three in versions prior to Windows 95 OSR2, four in OSR2 and later versions. Although in pre-OSR2 versions MSLOAD fits in three sectors, the boot sector still loads four.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; I call it so because the string ‘&lt;code&gt;MSDCMMSG&lt;/code&gt;’ appears repeated in the uncompressed executable image.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; In interactive boot, this step can be skipped by answering &lt;code&gt;N&lt;/code&gt; to the prompt ‘Process the system Registry [Enter=Y,Esc=N]?’; it is also controlled by the &lt;code&gt;SystemReg=&lt;/code&gt; setting in &lt;code&gt;MSDOS.SYS&lt;/code&gt;/&lt;code&gt;WINBOOT.INI&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;3&lt;/sup&gt; As it turns out, this compression format was only slightly altered from the one used to store the embedded boot-up splash screen (&lt;code&gt;LOGO.SYS&lt;/code&gt;) in earlier versions of Windows. A very similar bitstream (only framed differently) is also used to compress W4-format VMM32.VXD in Windows Millennium.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-12-07T18:15:16.803" LastActivityDate="2020-12-07T18:15:16.803" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15599" PostTypeId="2" ParentId="14470" CreationDate="2020-07-12T02:51:01.030" Score="6" Body="&lt;p&gt;I also created a lot of files using ESPCM compression in the 1990s. The ones I have were saved with an extension of AUD, but internally they are .wav files. ESPCM compression takes each sample and reduces it to 2 bits, 3 bits, or 4 bits, but I do not know the algorithm it uses. Sample rate can be anything. One channel only. They were created using software that came with an ESS AudioDrive sound card, but the software does not require the hardware to function.&lt;/p&gt;&#xA;&lt;p&gt;Look for the file AUDIOREC.EXE &amp;quot;ESS Technology,Inc. Audio Recorder&amp;quot;. The version I have is Version 1.81, file size is 114688 bytes. It is a 16-bit Windows 3.1 program, but functions fine in Windows XP in VirtualBox. It will let you open the original files, then resave them as standard uncompressed .wave files. It supports all 3 levels of ESPCM compression.&lt;/p&gt;&#xA;&lt;p&gt;No, I will not supply a copy of the program.&lt;/p&gt;&#xA;" OwnerUserId="18769" LastActivityDate="2020-07-12T02:51:01.030" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15600" PostTypeId="2" ParentId="15558" CreationDate="2020-07-12T07:49:05.337" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/4781/6868&quot;&gt;20 years for 1.44 MB 3.5&amp;quot; HD&lt;/a&gt; is too long time for average FDC/FDD to read.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;You need analog solution!&lt;/strong&gt; So one that scan the surface and store the ADC measured values of the surface. Then detect sectors and data using adaptive thresholding ... I would not bother to try any digital only  method related solutions for case like this. So look for &lt;strong&gt;FDD+FDC&lt;/strong&gt; with &lt;strong&gt;ADC&lt;/strong&gt;s instead of pure digital solution.&lt;/p&gt;&#xA;&lt;p&gt;In my case I was in luck as i was recovering 15+ years 360KB 5.25&amp;quot; floppies and they where still functional so I was going for digital solution (no need for custom FDD). As the floppies where not compatible with PC FDC I needed custom FDC&#xA;I ended up with this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7846/6868&quot;&gt;Finding byte boundaries in floppy disk MFM bitstreams&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The &lt;strong&gt;FAT&lt;/strong&gt; is usually on &lt;strong&gt;lower tracks&lt;/strong&gt;. Track zero is the outermost one so it have bigger circumference (more magnetic material per bit while width of the track is the same hence more energy to remagnetize it) so the further inward track you go the sooner errors due remagnetization occurs hence the file data is corrupted sooner than &lt;strong&gt;FAT&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;copying with Windows File Explorer&lt;/strong&gt; is a bad idea. The standard file copiers usually stop on read error , try to reread invalid sector few times and then stop or even freeze entire OS once number of errors exceed some limit. What you need is instead of stopping ignore error and continue reading... One of the other answer is suggesting one... I ended up writing my own running from MS-DOS to read scratched CDs. However this will be still very slow (expect even hour or more to copy damaged floppy). Also ignoring error might work well on multimedia data but for programs it might not. Also CDs have self-correcting codes that floppies does not so errors on floppies will be much more worse...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2020-07-12T08:10:34.423" LastActivityDate="2020-07-12T08:10:34.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15601" PostTypeId="2" ParentId="15570" CreationDate="2020-07-12T07:50:43.153" Score="22" Body="&lt;p&gt;Yes, there was a significant cost saving. For a start, Motorola charged us something like 30-40% less for the 68008 (I forget the exact amount, but it was substantial), because the price was so much lower than they were charging their other 68000 customers. Secondly, the pin count issue was key: for the custom chips, going anything over a 40 pin PDIP literally doubled the cost. The alternative would have been to add several HCT245 buffers at around £0.50 each plus more PCB space: for Clive, adding £2 to the cost would have been anathema.&lt;/p&gt;&#xA;&lt;p&gt;The design would have been much easier and the result much faster. But it would have added perhaps £50-80 to the retail price (remember, retail price is 4x components). So it was out of the question.&lt;/p&gt;&#xA;&lt;p&gt;David Karlin (I actually designed it!)&lt;/p&gt;&#xA;" OwnerUserId="18770" LastActivityDate="2020-07-12T07:50:43.153" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15602" PostTypeId="2" ParentId="6972" CreationDate="2020-07-12T08:16:36.330" Score="0" Body="&lt;p&gt;I wrote a python script which displays error information possibly included in .d64 files that I just published here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/thierer/2595e8e28a01111d785f282eac2ac8c5&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://gist.github.com/thierer/2595e8e28a01111d785f282eac2ac8c5&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18680" LastActivityDate="2020-07-12T08:16:36.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15603" PostTypeId="2" ParentId="14470" CreationDate="2020-07-12T12:05:54.313" Score="6" Body="&lt;p&gt;With hints taken from &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15599/10479&quot;&gt;this answer&lt;/a&gt;, your 4-bit ESPCM format is not that difficult to be decoded correctly. Your python decoder does a lot of things right. Out of 20 nibbles, only 19 nibbles contain sound data, the 20th nibble is a control nibble. The 19 data nibbles are, in fact, a linear 4-bit PCM encoding of the sound data, just like your python script handles them. The control nibble contains a scale factor for the following 19 data nibbles.&lt;/p&gt;&#xA;&lt;p&gt;The scale factor has to be interpreted like this. If we (for a moment) exclude the 4-bit value 0 (representing -8), so you get to a scale -7 to +7, this range represents on a scale between -127 to +127:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;factor      range&#xA;  0        -7   ..   7&#xA;  1        -9   ..   9&#xA;  2       -11   ..  11&#xA;  3       -12.5 ..  12.5&#xA;  4       -14   ..  14&#xA;  5       -18   ..  18&#xA;  6       -23   ..  23&#xA;  7       -28   ..  28&#xA;  8       -33.3 ..  33.3&#xA;  9       -40.5 ..  40.5&#xA; 10       -49   ..  49&#xA; 11       -60   ..  60&#xA; 12       -70   ..  70&#xA; 13       -84   ..  84&#xA; 14      -105   .. 105&#xA; 15      -126   .. 126&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You obtain the output value to use for the input 0 (aka -8) value by linear extrapolation, i.e. you can just put -8 as input into the linear relationship for -7 to +7 taken from the table above. Don't forget to clamp it it -128 in the case of scale factor number 15.&lt;/p&gt;&#xA;&lt;p&gt;There also is a simple 1-bit format, which just consists of the sign bits of the 4-bit format, encoded as a 4-bit level, 1 padding bit and 19 data bits per frame.&lt;/p&gt;&#xA;&lt;p&gt;The 2 bit/sample and 3 bit/sample formats are more complicated, because they use a proper ADPCM encoding of the 4-bit format described above. Interestingly, there are 8 ADPCM tables for the 2 bit/sample format and 4 ADPCM tables for the 4 bit/sample format. Those tables can be chosen on a packet-by-packet basis (where packet means a group of 19 samples).&lt;/p&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="10479" LastEditDate="2020-07-12T16:00:45.677" LastActivityDate="2020-07-12T16:00:45.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15604" PostTypeId="1" CreationDate="2020-07-12T19:13:21.760" Score="2" ViewCount="109" Body="&lt;p&gt;I am working on setting up a TMS9918ANL Video Display Processor. I was wondering if there is any way I can test to see if it is working without having the DRAM hooked up (I have a while before the DRAM arrives in the mail lol). If you could tell me how to hook it up so I can make sure it is functional (Ex. Just to give a black screen on composite out) I would appreciate it :)&lt;/p&gt;&#xA;" OwnerUserId="18704" LastActivityDate="2020-07-12T20:32:27.467" Title="TMS9918ANL question" Tags="&lt;graphics&gt;&lt;8-bit-microcomputers&gt;&lt;dram&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15605" PostTypeId="2" ParentId="15604" CreationDate="2020-07-12T20:32:27.467" Score="3" Body="&lt;p&gt;Well, if the remaining circuitry is done, you may want to simply put pulldowns at the read data input pins. With the chip programmed as usual this should produce an all black frame.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;While not displaying much on a CRT it should at least synchronize.&lt;/li&gt;&#xA;&lt;li&gt;Some Chinese analogue/HDMI converter should as well report synchronisation (and display a scaled up black picture).&lt;/li&gt;&#xA;&lt;li&gt;Last but not least, it should be rather easy to show the frames using an oscilloscope.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-07-12T20:32:27.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15606" PostTypeId="2" ParentId="1016" CreationDate="2020-07-12T21:04:41.873" Score="2" Body="&lt;p&gt;I don't think your scheme is any more extensible than Intel's. It's easy to see how to widen the address space in Intel's scheme: just increase the shift value in later generations.&lt;/p&gt;&#xA;&lt;p&gt;Of course, this will break software that tries to do arithmetic on segments assuming that the addressable space is and always will be 1 MiB, instead of treating them as opaque values to be manipulated only via OS calls and dereferencing. But your approach has the same problem. Look at the 68000: it had 32-bit address words and a 24-bit address space, and programmers used the top 8 bits of pointers for other purposes, making it difficult to extend the address space later on.&lt;/p&gt;&#xA;&lt;p&gt;In your approach, as soon as programmers notice that segment values are always in the range 0 to 15, they'll pack them into bytes instead of words, because why waste space? And they'll use the high 4 bits of those bytes for other purposes too. When it comes time to increase the address space, there will be at least one widely used piece of software that did that, and the company that made it will be defunct or just decide it's economically infeasible to fix it, and no one will want to upgrade their hardware because they're more interested in working software than in the hypothetical benefits of future software with access to a larger address space. After all, you don't need a larger address space to access more RAM, you just need a bank-switching scheme. Sure it's ugly but it's compatible.&lt;/p&gt;&#xA;&lt;p&gt;That's what always happens when platforms try to design for expandability.&lt;/p&gt;&#xA;&lt;p&gt;I don't see any other advantage of your scheme that's significant enough to prefer it over what Intel did. Intel's system has an obvious advantage in terms of allocation. If you have two 40K segments, you can just put them right after one another. With 64K paragraphs, either you put the segments in separate 64K regions and hope that you'll be able to fill in the gaps with 24+24K of other data, or else every piece of software, even if it fits in 64K, has to work with far pointers and segment arithmetic just in case it's loaded spanning a 64K boundary.&lt;/p&gt;&#xA;&lt;p&gt;Programming for a system whose registers are narrower than its address space is always going to be a pain. People blame the 8086 segment model for the problem, but it's not the problem, it's an attempt at a solution – and I think it works about as well as anything could have.&lt;/p&gt;&#xA;" OwnerUserId="14340" LastActivityDate="2020-07-12T21:04:41.873" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15607" PostTypeId="1" AcceptedAnswerId="15608" CreationDate="2020-07-12T21:39:35.083" Score="34" ViewCount="9201" Body="&lt;p&gt;The PS/2 keyboard protocol allows the keyboard to generate a clock rate between 10 kHz and 16.7 kHz.&lt;/p&gt;&#xA;&lt;p&gt;At 11 bits per scancode, 10 kHz is a massive 909 scancodes per second. World-record holder Barbara Blackburn peaked at 216 wpm ≈ 18 cps ≈ 54 scancodes/sec. on a Dvorak keyboard layout. Even with punctuation and modifier keys, there's still a ton of budget available.&lt;/p&gt;&#xA;&lt;p&gt;Did IBM provide any reasoning for the chosen frequency?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;References checked&lt;/h2&gt;&#xA;&lt;p&gt;I skimmed through the &lt;a href=&quot;https://archive.org/details/bitsavers_ibmpcat150ferenceMar84_26847525/page/n115/mode/2up?q=microseconds&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC AT Technical Reference&lt;/a&gt; (1984), but had no luck. Checked the &lt;a href=&quot;https://archive.org/details/bitsavers_ibmpcps284erfaceTechnicalReferenceCommonInterfaces_39004874/page/n229/mode/2up?q=keyboard&quot; rel=&quot;nofollow noreferrer&quot;&gt;PS2 Hardware Interface Technical Reference&lt;/a&gt; (1991), and found this nice timing diagram on p230 mentioning &amp;quot;30–50 µs&amp;quot; clock timing parameters - a period that matches exactly the frequency range of 10kHz–16.66 kHz. I see no mention of why, though.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cwwOV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cwwOV.png&quot; alt=&quot;Timing diagram for PS/2 CLK and DATA lines&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11579" LastEditorUserId="15334" LastEditDate="2020-11-25T07:29:09.873" LastActivityDate="2020-11-27T07:14:12.800" Title="Why is the clock frequency of the PS/2 keyboard protocol so high?" Tags="&lt;keyboards&gt;&lt;design-choices&gt;" AnswerCount="5" CommentCount="11" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15608" PostTypeId="2" ParentId="15607" CreationDate="2020-07-12T22:24:10.973" Score="48" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why is the clock frequency of the PS/2 keyboard protocol so high?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I wouldn't call it high. It's quite in line with similar keyboard speeds - like Amiga operating a 17 kHz.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;At 11 bits per scancode, 10 kHz is a massive 909 scancodes per second. World-record holder Barbara Blackburn peaked at 216 wpm ≈ 18 cps ≈ 54 scancodes/sec. on a Dvorak keyboard layout. Even with punctuation and modifier keys, there's still a ton of budget available.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While typing speed - and more important delay time (aka keyboard lag) - defines a lower boundary for a useful keyboard interface, it provides no argument for an upper limit. To keep latency low, the highest reliable speed is to be preferred.&lt;/p&gt;&#xA;&lt;p&gt;But there are several issues with the number used. For one, actual English language records, using computer keyboards, are past 300 word/min or 25 char/s, which would mean 75 scancodes/s using above equation. That's already past a one per frame as many early computers did scan and past what can be done on a genuine IBM PC.&lt;/p&gt;&#xA;&lt;p&gt;More important, the whole argument is at error, as average typing speed is exactly that, average. Levelled out over several minutes. Certain combination can be way closer to each other. Think of combinations like 'er' wich are more like a single move.&lt;/p&gt;&#xA;&lt;p&gt;So a keyboard able to handle fast writers should go well past these number. At least double it, meaning 150 scancodes/s would make a good lower end for transmission speed. With an 11 bit word that's a 1,650 bit/s ... of course any controller will need some time to feed it, so selecting a value 2-3 times of that is applicable. It's obvious that we already get close to the 10 kBit IBM defined as lower limit.&lt;/p&gt;&#xA;&lt;p&gt;On the PC the speed is defined by what the 8048 controller within the Keyboard can deliver, as the receiving side was a 74LS322 shift register, good for some Mbit instead :))&lt;/p&gt;&#xA;&lt;p&gt;On the AT it was what the microcontroller in the keyboard and mainboard could do without any issue - that's BTW why there is such a wide range of 10..16 kHz, as it allows them to operate at less reliable clock sources as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Having recently bit-banged the PS/2 protocol on a 1MHz 6502, I feel like it sure would have been easier on keyboard port implementers if IBM had decided on a lower frequency, so we could have had some time to decode the protocol inside my interrupt handler, instead of offloading it to a circular buffer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Why should IBM have cared about any implementation different from their own?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did IBM provide any reasoning for the chosen frequency?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's an obvious choice, and AFAICT artificial slowed down. In a setup with a HW shift register and a microcontroller (IBM-PC) or two microcontrollers (PC-AT), 16 kHz is a quite low rate, kept in a range of easy detection and leaving lots of room for slow controllers.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-13T11:21:55.460" LastActivityDate="2020-07-13T11:21:55.460" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15609" PostTypeId="2" ParentId="15607" CreationDate="2020-07-12T22:45:12.403" Score="28" Body="&lt;p&gt;The user will perceive a delay (latency) between pressing a key and seeing the computer react. The reactions are usually on its screen, such as displaying a typed character or motion in a game.&lt;/p&gt;&#xA;&lt;p&gt;This delay must be kept short for the user to have a feeling of sharpness in the computer's reactions. The delay is the sum of (a) the keyboard scanning interval and debounce period, (b) the data transmission time and (c) the computer software processing time.&lt;/p&gt;&#xA;&lt;p&gt;The keyboard scanning interval was originally 3 ms in these PS/2 keyboards. At least two scans are necessary to detect a key and debounce it so (a) is at least 6 ms. (The PS/2 keyboard may use 3 or more scans before sending a key make/break code, it's been a long time since I read the keyboard microcontroller software disassembly.)&lt;/p&gt;&#xA;&lt;p&gt;The keyboard clock frequency and 11-bit packet length puts (b) in the order of 1 ms.&lt;/p&gt;&#xA;&lt;p&gt;The computer reaction time (c) depends on the application and is the variable sum of many elements. For example, if the display is scanned at 60 Hz, there could be up to 16 ms between the CPU attempting to display something and it appearing on the screen. But with games using schemes like double and triple buffering, (c) becomes a subject in itself.&lt;/p&gt;&#xA;&lt;p&gt;So it is necessary to use a reasonably high keyboard clock to keep the overall latency down and produce a sharp response to keypresses and activity.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastEditorUserId="5199" LastEditDate="2020-07-12T23:06:27.970" LastActivityDate="2020-07-12T23:06:27.970" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15610" PostTypeId="1" CreationDate="2020-07-13T00:23:42.613" Score="2" ViewCount="140" Body="&lt;p&gt;I am working on designing a Z80 computer that utilized the TMS9918ANL for graphics. I am currently just trying to make sure the TMS9918ANL is working, so I hooked up the control pins the bus (backwards as I should), power/ground, a crystal, and CSW/CSR. In order to test it without RAM, I took the RD pins and tied them to ground using 10K pull-down resistors. I was told that this should produce a black screen if I wired it correctly. Could you check over my wiring and my code to make sure I am executing this right and correctly writing to the TMS9918A's registers? I took screenshots of my schematics from Kicad and uploaded them to a Google Drive folder here (note, it says the other pins of the TMS9918A are wired up, but in my actual circuit they are unconnected and the RD pins are pulled down to ground): &lt;a href=&quot;https://drive.google.com/drive/folders/1bNtJaH40HGuP_w_PZnNKDf3ZZJnJuWBJ?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://drive.google.com/drive/folders/1bNtJaH40HGuP_w_PZnNKDf3ZZJnJuWBJ?usp=sharing&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And my code can be found here: &lt;a href=&quot;https://pastebin.com/LDhyMr5r&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pastebin.com/LDhyMr5r&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am very new to all of this, so I appreciate your time and understanding with my lack there of. If you can help me figure out my problem, I will be happy to send a photo of the computer printing your name in text as soon as I get it running :)&lt;/p&gt;&#xA;&lt;p&gt;If there is anything else you need to assess my situation, please let me know. Thank you for your time and help in advance!&lt;/p&gt;&#xA;" OwnerUserId="18704" LastActivityDate="2020-07-13T00:23:42.613" Title="Help debugging a circuit/code for Z80 and TMS9918ANL" Tags="&lt;hardware&gt;&lt;graphics&gt;&lt;z80&gt;&lt;assembly&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15611" PostTypeId="1" AcceptedAnswerId="15614" CreationDate="2020-07-13T11:22:36.660" Score="128" ViewCount="16415" Body="&lt;p&gt;Cellphone / Telephone have the seven bottom-left and the one top-left.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/X1udf.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/X1udf.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;While the keyboard has the seven top-left and the one bottom-left&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UuUaT.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UuUaT.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;How did this come to be? Is there an interesting computing anecdote that gave rise to this?&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="12298" LastEditDate="2020-07-13T13:46:14.843" LastActivityDate="2021-02-12T01:15:05.463" Title="Why is the keyboard and cellphone / telephone numbers in a different order?" Tags="&lt;keyboards&gt;" AnswerCount="5" CommentCount="10" FavoriteCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="15612" PostTypeId="2" ParentId="15611" CreationDate="2020-07-13T12:05:17.997" Score="6" Body="&lt;p&gt;The numeric keypad key order is derived from cash registers keyboards. Example of keyboard from a Sharp cash register (but they're all following this order):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9oIdU.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9oIdU.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Numeric keypads are/were used by accountants on computers to enter digits. They probably didn't want to force those people to change their typing habits when migrating from cash registers to computers.&lt;/p&gt;&#xA;&lt;p&gt;When the cellphones came out, they copied the digit order from landline phones with keys, where the aim of the keyboard was to type phone numbers. The ones who designed the first phone keypads (not the ones who invented cellphones!), they probably disregarded the keypad order and reorganized it more logically with following digits.&lt;/p&gt;&#xA;&lt;p&gt;They kept the 0 below, though.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-07-13T12:05:17.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15613" PostTypeId="2" ParentId="15611" CreationDate="2020-07-13T13:16:03.360" Score="15" Body="&lt;p&gt;Both keypads are in numerical order.  However, in a computing context, the correct order is 0,1…9, but in a telephonic context, the correct order is 1…9,0 - because the latter is really a ten, not a zero.&lt;/p&gt;&#xA;&lt;p&gt;To explain this, we have to go back about a century, to the days when both telephones and computing devices were electromechanical rather than purely electronic.  Here are typical devices from each class of that time:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2m8KY.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2m8KY.jpg&quot; alt=&quot;A mechanical desk calculator&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/mrwxj.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mrwxj.jpg&quot; alt=&quot;A vintage rotary-dial telephone&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A mechanical calculator has a mechanism for each digit that engages zero times per handle rotation when the &amp;quot;zero&amp;quot; (blank) button has been pressed, one time when the &amp;quot;one&amp;quot; button has been pressed, and so on up to nine.  This makes complete sense in an arithmetic context, and allows the device to be used as a fast, user-friendly abacus.  The more sophisticated models (not the one pictured) can even multiply and divide by themselves.&lt;/p&gt;&#xA;&lt;p&gt;A rotary-dial telephone, on the other hand, has a mechanism which pulses the line once when the dial is released from the &amp;quot;one&amp;quot; position, twice when from the &amp;quot;two&amp;quot; position - and ten times from the &amp;quot;zero&amp;quot; position.  These pulses were interpreted by an electromechanical selector in the exchange.  This is why zero is commonly used as the &amp;quot;escape code&amp;quot; for long-distance and international dialling; it was convenient to hang the cabling to the trunk exchange off the last position of each local selector.&lt;/p&gt;&#xA;&lt;p&gt;Computer numerical keypads were designed through decades of evolution to handle arithmetical data conveniently, much as the rest of the keyboard was designed to retain familiarity with teletype and mechanical typewriter equipment.  But a phone keypad is not designed for arithmetic; it was designed for people familiar with a rotary-dial telephone, in which zero is adjacent to nine, and continues to remain in that de-facto standard layout.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-07-13T13:16:03.360" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="15614" PostTypeId="2" ParentId="15611" CreationDate="2020-07-13T15:19:13.383" Score="170" Body="&lt;p&gt;&lt;em&gt;(I got the feeling I've answered this already once, but can't find it)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Also, this is meant as an overview to see development, not about any firsts, inventions or alike)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;Computer keyboards grew out of calculator key assignments, as both are business tools.&lt;/p&gt;&#xA;&lt;p&gt;The telephone keypad arrangement was derivated in an UI analysis in 1959/60 with 'average' customers - people at the time not really in contact with calculators or even less computers.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Calculators and Computers&lt;/h2&gt;&#xA;&lt;p&gt;Numeric ordering on a keyboard isn't as logical as someone might assume and went thru several iterations. Early calculators used levers for each digit. This covers about the 1890s until 1920s (*1).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3zza8.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3zza8.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(From &lt;a href=&quot;https://www.arithmeum.uni-bonn.de/sammlungen/rechnen-einst/objekt.html?tx_arithinventory%5Bobject%5D=1603&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARITHMEUM&lt;/a&gt; at University Bonn)&lt;/p&gt;&#xA;&lt;p&gt;The next generation calculators (and soon cash registers) using an set of columns, one per valid digit and 9 buttons per columns (*2). Nine, as there was no need to enter a zero at all. All digits were already reset after each operation, and unlike when entering a number from a single keypad, no zero was needed to fill the gap. Almost like going back in time before the zero was invented :)&lt;/p&gt;&#xA;&lt;p&gt;This covers about the 1910s to 1930s.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HvUb9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HvUb9.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(From &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Brunsviga_90T_calculator_-_Ridai_Museum_of_Modern_Science,_Tokyo_-_DSC07647.JPG&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(I selected this rather late Brunsvga 90T as it nicely demonstrates the use of other systems than decimal, as it's made for English (&lt;a href=&quot;https://en.wikipedia.org/wiki/Pound_sterling#Decimalisation&quot; rel=&quot;nofollow noreferrer&quot;&gt;pre decimal&lt;/a&gt;) currency *3)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;While there were as well some (especially cash registers) increasing the numbers top down, calculators usually placed the numbers bottom up, as it assumed the user to sit, having a hand movement coming from a rest point at the lower end (*4). Eye movement (to search) usually goes ahead of hand movement, so bottom up gives the numbers in sequence.&lt;/p&gt;&#xA;&lt;p&gt;This is especially neat to see with the following one, as the final function after entering a number will almost always be hitting the adding button wich is located prominently in the lower right. The machine is as well special (as it is late) by adding a row at the bottom. No, not for entering zero, but for resetting the column. Like any previous technology it as well had a different way of thinking&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cRZGN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cRZGN.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(From &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Brunsviga_11S_calculator_-_Ridai_Museum_of_Modern_Science,_Tokyo_-_DSC07649.JPG&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;When advanced mechanics allowed to use a single keypad the use case still stayed the same, resulting as well in a bottom up numbering, just now ordered square with a large zero or sometimes a double zero below. Keypad calculators became common place in the mid to late 1930s and lasted essentially until today ... well, no longer mechanical, but the UI is still the same.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XOxBu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XOxBu.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(From &lt;a href=&quot;https://www.arithmeum.uni-bonn.de/sammlungen/rechnen-einst/objekt.html?tx_arithinventory%5Bobject%5D=5036&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARITHMEUM&lt;/a&gt; at University Bonn)&lt;/p&gt;&#xA;&lt;p&gt;This is as well were computers inherited it from. Except not right away. During the punch card age early on punch cards were simply numeric, with a top-down sequence. The sequence was mandated by the punch cards having their holes in the same order. Using any other order would need additional mechanic, which is never a good idea. This is also why the numbers were not in rows but staggered. Like IBM's Type 011 electric keypunch of 1923:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KaxJR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KaxJR.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Picture taken from the &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/oldpunch.html#ekpunch&quot; rel=&quot;nofollow noreferrer&quot;&gt;fine computer historic page&lt;/a&gt;s of Columbia University)&lt;/p&gt;&#xA;&lt;p&gt;Notable that there is a number Zero, as punch cards do need for zero a hole in row zero :)&lt;/p&gt;&#xA;&lt;p&gt;The first (IBM) alphanumeric keypunch, the Type 031 had a separate numeric keyboard, so operators could not only key in numbers fast, but as well use that pad as with prior machines to enter characters as a combination of holes. To ease transition the keys were still staggered, even though it was no longer needed as punching was now done independent of the key position.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hLMWX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hLMWX.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Picture from &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:IBM_Type_31_keypunch_keyboard.agr.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;, additional information here)&lt;/p&gt;&#xA;&lt;p&gt;The IBM 026 keypunch of 1949 did set the standard for the remaining of the punch card age as well as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15489&quot;&gt;early terminals&lt;/a&gt; by dropping the numeric keypad - after all, who needs one if the highly sophisticated keypunch can do all punching on its own?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/D3eoY.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/D3eoY.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Picture taken from the &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/026.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;fine computer historic page&lt;/a&gt;s of Columbia University)&lt;/p&gt;&#xA;&lt;p&gt;Now the keys are aligned within the alpha section, horizontal, but still semi-staggered thru the key interleave. IBM's early terminal system 2250/2260 as well as the new all changing 3270 family didn't feature numeric keypads (later 3270 variations did) so it was up to third party manufacturer to introduce such a splendid addition - like &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint&quot; rel=&quot;nofollow noreferrer&quot;&gt;CTC&lt;/a&gt; did with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint_2200&quot; rel=&quot;nofollow noreferrer&quot;&gt;Datapoint 2200&lt;/a&gt; (*5). They decided on taking the numpad like they are found on calculators. This was not only because the assumed user would be rather in accounting then at an exchange, but push-button telephones have just been introduced a few years before and at the time they were still exotic, not available at all exchanges and in no way a prototype to be used - so calculators were the only serious template to follow.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xYi6J.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xYi6J.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Taken from &lt;a href=&quot;https://bugbookmuseum.blogspot.com/2016/03/vintage-computers-datapoint-2200.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this blog entry&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Well, computer-wise that's the end of the story.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Or not, as there is a nifty little piece of inbetween: The ICL 1501, also known as Cogar 4 or Singer 1501 (*6). After ICL acquired the Singer computer division the 1501 was at the core of the system 10 and sold in good numbers. Since it was, like the Datapoint 2200, conceived as a data entry system to replace key punches and simplify batch processing, its keyboard was styled after the 026 key punch. But, unlike CTC, they didn't add a numeric keypad, but stayed with the 026 style numeric field as part of the main field:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PIagI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PIagI.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Picture taken in storage at &lt;a href=&quot;http://blog.computeum.org/2019/03/05/erstes-exponat-singer-icl1501/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computeum&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;This machine was sold in Germany in the 1970s and used at a University. It features a US keyboard, and, as said, a 026 like numeric inset.So far nothing special.&lt;/p&gt;&#xA;&lt;p&gt;But then &lt;a href=&quot;http://blog.computeum.org/2019/03/05/erstes-exponat-singer-icl1501/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computeum&lt;/a&gt; got another unit, originally used by the State of Baden-Würtemberg surveying service. Still with no separate numeric keypad, but the numeric keys flipped to match a calculator keyboard:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Vy1iN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Vy1iN.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This keyboard is as well of German layout, so it's hard to say if the change is due to the national keyboard (IBM didn't do it for their German 026), or because of new requirements (*7). Notably as well is that some of the very punch card specific keys are complete gone (to make room for Umlauts).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Telephones and Mobile Phones&lt;/h2&gt;&#xA;&lt;p&gt;The phone story starts right after WWII with the idea of changing from pulse dial to tone dial to cut cost in exchanges by replacing all &lt;a href=&quot;https://en.wikipedia.org/wiki/Strowger_switch&quot; rel=&quot;nofollow noreferrer&quot;&gt;Strowger switch&lt;/a&gt; by &lt;a href=&quot;https://en.wikipedia.org/wiki/Crossbar_switch#Electromechanical_switching_in_telephony&quot; rel=&quot;nofollow noreferrer&quot;&gt;crossbar switches&lt;/a&gt;. While crossbar switches have been already in use since the 1930s, still many exchanges operated with Stowger switches. Going to &lt;a href=&quot;https://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling&quot; rel=&quot;nofollow noreferrer&quot;&gt;DTMF&lt;/a&gt; the same time simplified it further by introducing electronics for line selection.&lt;/p&gt;&#xA;&lt;p&gt;In 1959 Bell did a &lt;a href=&quot;https://mrserge.lv/assets/human-factors-engeneering-studies-of-the-design-and-use-of-pushbutton-telephone-sets.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;rather large UI study&lt;/a&gt;, published in 1960 as &lt;em&gt;&amp;quot;Human Factors Engineering Studies of the Design and Use of Pushbutton Telephone Sets&amp;quot;&lt;/em&gt;. Goal was to determinate a layout that would not only work, but as well operate efficient and be enjoyed by users. They offered a great variety of layouts:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yNexV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yNexV.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Taken from &lt;a href=&quot;https://mrserge.lv/assets/human-factors-engeneering-studies-of-the-design-and-use-of-pushbutton-telephone-sets.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;p999 of the publication&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;The square top down layout emerged second, right after a two row top-down version. Again, much like with cash registers vs calculators, it's due the way a keyboard is scanned during interaction.&lt;/p&gt;&#xA;&lt;p&gt;Long story short, since a two row design wouldn't fit great on a more squareish phone body (*8), the square 3 by 3 plus zero or 3 by 4 ordering with a top down scheme was it.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;One might speculate that if calculators would have been more wide spread in the 1950 (they were special and expensive business tools at the time) or terminals/computers had already made their way into homes before, the telephone would also work bottom-up ... but that's fooder for alternate history novellas.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The dates are about when they were general available and top end, not invention/first. Also, most of designs were made and sold all thru the mechanical age, including &lt;a href=&quot;https://en.wikipedia.org/wiki/Odhner_Arithmometer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Odhner style&lt;/a&gt; devices. Like always, industry is producing as long customers are buying and there's a niche for every variation. Heck, even &lt;a href=&quot;https://en.wikipedia.org/wiki/Addiator&quot; rel=&quot;nofollow noreferrer&quot;&gt;Addiator&lt;/a&gt;s have been made way into the 80s when pocket calculators were already lower priced:))&lt;/p&gt;&#xA;&lt;p&gt;*2 - It's noteworthy that Felt's &lt;a href=&quot;https://www.arithmeum.uni-bonn.de/sammlungen/rechnen-einst/objekt.html?tx_arithinventory%5Bobject%5D=4597&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compometer&lt;/a&gt; already used key columns way before others, but it was an outlier at the time. It already had a bottom up ordering.&lt;/p&gt;&#xA;&lt;p&gt;*3 - It may need a close look at display and key columns as the last column goes 1 to 11, while the third from the right only features the number 1 on all keys.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pound_sterling#Decimalisation&quot; rel=&quot;nofollow noreferrer&quot;&gt;English Pre-Decimal currency&lt;/a&gt; was, like all Carolingian currency, structured as &lt;a href=&quot;https://en.wikipedia.org/wiki/%C2%A3sd&quot; rel=&quot;nofollow noreferrer&quot;&gt;LSD&lt;/a&gt; or 1 Librae (hence the £) to be split into 20 Solidi (s) each dividable into 12 Denari (d) or in English names 1 Pound equals 20 Shillings equals 240 Pence.&lt;/p&gt;&#xA;&lt;p&gt;This is why the display, as well, is structured as  3-3-2-1:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3 digits for Thousands of Pounds,&lt;/li&gt;&#xA;&lt;li&gt;3 digits for Pounds,&lt;/li&gt;&#xA;&lt;li&gt;2 digits for Shillings (00..19), and&lt;/li&gt;&#xA;&lt;li&gt;1 'digit' for Pence (0..11)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;sorry, no Farthings and no Guinees either. Bookkeeping was only done in pound and full pence.&lt;/p&gt;&#xA;&lt;p&gt;*4 - With cash registers the operator was assumed to stay.&lt;/p&gt;&#xA;&lt;p&gt;*5 - The terminal that brought us x86 :))&lt;/p&gt;&#xA;&lt;p&gt;*6 - The &lt;a href=&quot;https://en.wikipedia.org/wiki/George_Cogar&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cogar&lt;/a&gt; 4 marks, together with the Datapoint 2200, what I'd call the birth of the desktop PC. Both were complete machines that incooperate all elements of a stand alone computer in one case: CPU, Memory, I/O, Screen (the C4 even bitmap graphic), keyboard and mass storage (tape drives).&lt;/p&gt;&#xA;&lt;p&gt;*7 - So far I couldn't find any conclusive documentation/time line, so it would be nice to find more examples to see if that change was due addapting to new usage (switching to calculator style like others), specific German layout/requirement (some DIN) or customer/application specific.&lt;/p&gt;&#xA;&lt;p&gt;*8 - Keep in mind, at the time the phone wasn't part of the receiver, but the receiver attached to the phone  by cable :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-12T01:15:05.463" LastActivityDate="2021-02-12T01:15:05.463" CommentCount="22" ContentLicense="CC BY-SA 4.0" />
  <row Id="15615" PostTypeId="1" AcceptedAnswerId="15618" CreationDate="2020-07-13T16:39:40.857" Score="16" ViewCount="2293" Body="&lt;p&gt;To most people today &amp;quot;chrome&amp;quot; probably sounds like a reference to the web browser; but at least in Microsoft contexts I've read &amp;quot;chrome&amp;quot; to refer to window decorations - like the border, maximize button, etc.&lt;/p&gt;&#xA;&lt;p&gt;For example, &lt;a href=&quot;https://docs.microsoft.com/en-us/archive/blogs/wpfsdk/custom-window-chrome-in-wpf&quot; rel=&quot;noreferrer&quot;&gt;here's a 2008 article&lt;/a&gt; which uses the term that way. Quote:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This document covers the design and some implementation details of&#xA;getting WPF windows wrapped in custom &lt;em&gt;chrome&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In that article there is no explicit statement for what &amp;quot;chrome&amp;quot; refers to, it seems to be taken for granted that the meaning is clear.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&quot;https://docs.microsoft.com/en-us/archive/blogs/brianjo/msdn-chrome&quot; rel=&quot;noreferrer&quot;&gt;2004 article&lt;/a&gt; does explain its use of the term:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;We've got an updated chrome (the style of the area that frames our&#xA;content) ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In that case it was referring to page elements on a website.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Note - The Google Chrome web browser apparently &lt;a href=&quot;https://en.wikipedia.org/wiki/Google_Chrome&quot; rel=&quot;noreferrer&quot;&gt;debuted in 2008&lt;/a&gt;. You'd think that if &amp;quot;chrome&amp;quot; wasn't commonly used to in the sense of a decoration by then it would never have caught on. The 2004 article above seems to support that.&lt;/p&gt;&#xA;" OwnerUserId="11795" LastEditorUserId="3290" LastEditDate="2020-07-14T05:14:23.007" LastActivityDate="2020-07-16T13:42:10.917" Title="Where did the the term &quot;chrome,&quot; referring to onscreen decorations, originate?" Tags="&lt;history&gt;&lt;terminology&gt;" AnswerCount="3" CommentCount="16" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15616" PostTypeId="2" ParentId="15607" CreationDate="2020-07-13T17:00:48.047" Score="3" Body="&lt;p&gt;Until communications frequencies get fast enough to cause difficulties, communicating at higher speeds is no more difficult than at lower speeds.  It sometimes makes sense to use a speed somewhat slower than the speed one expects to be able to handle easily and reliably, in case things don't work quite as nicely as planned, but the AT protocol used in the PS/2 is nowhere near the upper limits of what such protocols could use.&lt;/p&gt;&#xA;&lt;p&gt;A more interesting design issue comparing the AT keyboard signaling versus the XT is that the former requires that an attached device be ready for data to arrive at any arbitrary time, whereas if memory serves the latter lets the computer decide when it wants each bit of data.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-07-13T17:00:48.047" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15617" PostTypeId="2" ParentId="15522" CreationDate="2020-07-13T18:06:59.017" Score="4" Body="&lt;p&gt;An engineer who worked at National Semiconductor back when reverse engineering was legal described a conference room wall covered with a patchwork of photos representing an entire Intel microprocessor. They visually extracted the circuit from the image.&lt;/p&gt;&#xA;" OwnerUserId="18782" LastActivityDate="2020-07-13T18:06:59.017" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15618" PostTypeId="2" ParentId="15615" CreationDate="2020-07-13T18:58:14.023" Score="25" Body="&lt;p&gt;According to the &lt;a href=&quot;http://www.catb.org/jargon/html/C/chrome.html&quot; rel=&quot;noreferrer&quot;&gt;Jargon File&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;chrome&lt;/strong&gt;: n.&#xA;[from automotive slang via wargaming] Showy features added to attract users but contributing little or nothing to the power of a system. “The 3D icons in Motif are just chrome, but they certainly are pretty chrome!” Distinguished from &lt;strong&gt;bells and whistles&lt;/strong&gt; by the fact that the latter are usually added to gratify developers' own desires for featurefulness. Often used as a term of contempt.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This entry in the Jargon file appears first in the 2.1.1 version of June 1990; there's no entry for chrome in the 1980s versions, but it wouldn't surprise me if it was in use in the software industry quite a bit earlier.&lt;/p&gt;&#xA;&lt;p&gt;The automotive origin is obvious; &lt;a href=&quot;https://en.wikipedia.org/wiki/Chrome_plating#Automotive_use&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;chrome&amp;quot; features&lt;/a&gt; on late-20th-century automobiles don't affect performance at all, only aesthetics.&lt;/p&gt;&#xA;&lt;p&gt;The &amp;quot;wargaming&amp;quot; connection is a little more obscure. A text on wargame scenario design, &lt;a href=&quot;https://books.google.com/books?id=TlrRDwAAQBAJ&amp;amp;pg=PA160&amp;amp;lpg=PA160&amp;amp;dq=chrome%20in%20wargaming&amp;amp;source=bl&amp;amp;ots=7MOFL0sZ-Q&amp;amp;sig=ACfU3U19xejVXmT69dhidWGT_SxyP4QxbA&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=2ahUKEwjB0LeQ88rqAhW-JTQIHWIUASEQ6AEwBHoECAoQAQ#v=onepage&amp;amp;q=chrome%20in%20wargaming&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;Scenario Designer's Handbook&lt;/a&gt;, refers to certain scenario-specific rules (SSRs) as &amp;quot;chrome&amp;quot;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The final type of SSR is added for flavor. These are known as &amp;quot;chrome&amp;quot; after a wargaming term that applied to rules with no large effect on play but added mainly for atmosphere:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;A superfluous mechanism added to a game to add a feeling of theme. Like the chrome on a car, chrome isn't really necessary, but it may make the game more fun. Eample: in a WW2 infantry game, adding rules to cover the exceptional heroics of Audie Murphy.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="352" LastEditorUserId="352" LastEditDate="2020-07-13T20:10:49.827" LastActivityDate="2020-07-13T20:10:49.827" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15619" PostTypeId="2" ParentId="15607" CreationDate="2020-07-13T19:14:23.643" Score="0" Body="&lt;h1&gt;Typematic Rate&lt;/h1&gt;&#xA;&lt;p&gt;Entering text is not the sole purpose of a keyboard.  Anyone who played games would recognize the desire to be able to hold down a key for continuous, fine-grained inputs during gameplay.  Even someone with a text editor would want to navigate the editor quickly with arrow keys.  Being gated by the speed of the average typist would be an unnecessary and frustrating limitation.&lt;/p&gt;&#xA;" OwnerUserId="15720" LastActivityDate="2020-07-13T19:14:23.643" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15620" PostTypeId="1" AcceptedAnswerId="15624" CreationDate="2020-07-14T00:26:18.827" Score="3" ViewCount="547" Body="&lt;p&gt;I am in the process of building a dial up simulator involving a 1990s era desktop and laptop. The desktop, which is connected to Ethernet, acts as the dial-up server and the laptop computer dials in to the “server” through its built in modem. The connection is made through a Teltone telephone line simulator.&lt;/p&gt;&#xA;&lt;p&gt;I downloaded a “vintage proxy” from GitHub in which typing in a url (ex:aol.com) will return that page from a year in the past using the Wayback Machine. This proxy will be running on a modern third computer.&lt;/p&gt;&#xA;&lt;p&gt;My question is how the dial-up connected laptop can access the proxy server on the modern computer through the dial-up. I know that if I use a wireless router, I can access the proxy using the server’s IP address, but I don’t know how to do this through the simulated dial up connection, since the modern computer is connected to wifi, not through the simulated dial up connection.&lt;/p&gt;&#xA;" OwnerUserId="18789" LastEditorUserId="18789" LastEditDate="2020-07-15T15:28:55.870" LastActivityDate="2020-07-15T15:28:55.870" Title="Using “vintage proxy” with dial up simulator" Tags="&lt;internet&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15621" PostTypeId="1" AcceptedAnswerId="15623" CreationDate="2020-07-14T05:41:27.463" Score="3" ViewCount="519" Body="&lt;p&gt;The question is about 6502 instructions that take an extra cycle when address calculation carries over into the high byte of the address. This affects addressing modes Absolute,X, Absolute,Y, Indirect,Y. I suppose it also affects the relative branches. I'm going to call such a cycle a penalty cycle (I have seen this term in various emulator source code, and there's no better words I can think of).&lt;/p&gt;&#xA;&lt;p&gt;Going from &lt;a href=&quot;http://www.6502.org/tutorials/6502opcodes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this document&lt;/a&gt;, Many instructions take a penalty cycle to manipulate the high byte of the effective address, denoted by a &lt;code&gt;+&lt;/code&gt; in the last column. Initially, I thought that &lt;em&gt;all&lt;/em&gt; opcodes that needed to do this incurred a penalty cycle. But the general pattern seems to be that if it needs to write something to memory, then it doesn't incur a penalty cycle.&lt;/p&gt;&#xA;&lt;p&gt;Why is this? Can the high byte of the effective address sometimes somehow be incremented for free? I don't see how, because the 6502 uses its ALU to generate the carry, and also to add the carry into the high byte.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="6659" LastEditDate="2020-07-14T08:31:06.667" LastActivityDate="2020-07-14T12:25:27.673" Title="Why don't all Absolute,X instructions take an extra cycle to cross page boundaries?" Tags="&lt;6502&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15622" PostTypeId="2" ParentId="15621" CreationDate="2020-07-14T08:37:47.710" Score="2" Body="&lt;h2&gt;TL;DR: It's always included.&lt;/h2&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;If you compare the timing of memory writing using Absolute,X (ASL, DEC, INC, LSR, ROL, ROR, STA) or Absolute,Y (STA) with their counterpart using Absolute (without indexing), you'll note that the additional cycle is always included. It's only 'optional' for reading instructions.&lt;/p&gt;&#xA;&lt;p&gt;Example from the (&lt;a href=&quot;http://www.6502.org/tutorials/6502opcodes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;original&lt;/a&gt;) table (abreviated):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;AND (bitwise AND with accumulator)&#xA;&#xA;MODE           SYNTAX       HEX LEN TIM&#xA;Zero Page     AND $44       $25  2   3&#xA;Zero Page,X   AND $44,X     $35  2   4&#xA;Absolute      AND $4400     $2D  3   4&#xA;Absolute,X    AND $4400,X   $3D  3   4+&#xA;Absolute,Y    AND $4400,Y   $39  3   4+&#xA;&#xA;+ add 1 cycle if page boundary crossed&#xA;&#xA;&#xA;ASL (Arithmetic Shift Left)&#xA;&#xA;MODE           SYNTAX       HEX LEN TIM&#xA;Zero Page     ASL $44       $06  2   5&#xA;Zero Page,X   ASL $44,X     $16  2   6&#xA;Absolute      ASL $4400     $0E  3   6&#xA;Absolute,X    ASL $4400,X   $1E  3   7&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Making the page crossing cycle optional is an optimization only added to reading instructions, so they are the exception here.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-14T08:46:01.930" LastActivityDate="2020-07-14T08:46:01.930" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15623" PostTypeId="2" ParentId="15621" CreationDate="2020-07-14T08:51:23.020" Score="7" Body="&lt;p&gt;The CPU needs to do an addition of the 2-byte address after the opcode and the 8-bit unsigned displacement from &lt;code&gt;X&lt;/code&gt; or &lt;code&gt;Y&lt;/code&gt; register.&lt;/p&gt;&#xA;&lt;p&gt;Since 6502 addresses are always stored as little-endian, the CPU gets the lower byte first. During the time it reads the following higher byte, it simultaneously performs addition of the lower byte just read and the contents of the index register.&lt;/p&gt;&#xA;&lt;p&gt;If that addition results in no carry, the CPU instantly knows it does not need to update the high byte of the address. Therefore the read cycle at the correct address follows (no penalty).&lt;/p&gt;&#xA;&lt;p&gt;When there is carry, the 6502 needs another cycle to increment the high byte of the address. During that process, the 6502 does a dummy read cycle at the incorrect address, followed by the correct read cycle (penalty).&lt;/p&gt;&#xA;&lt;p&gt;It is obvious that there should be no 'dummy' &lt;em&gt;write&lt;/em&gt; cycles at incorrect addresses. Therefore the 6502 always takes a 'penalty' &lt;em&gt;read&lt;/em&gt; cycle with an (probably) incorrect address before performing the final write.&lt;/p&gt;&#xA;&lt;p&gt;Interesting enough, the little-endianness of the 6502 made such a cycle-saving possible. Were there big-endianness, like in the 6805, there would &lt;em&gt;always&lt;/em&gt; be a penalty in index addressing, as it happens in the 6805 itself.&lt;/p&gt;&#xA;&lt;p&gt;So, unlike, for example, the 8080 and Z80, here the endianness actually did matter.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="5199" LastEditDate="2020-07-14T12:25:27.673" LastActivityDate="2020-07-14T12:25:27.673" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="15624" PostTypeId="2" ParentId="15620" CreationDate="2020-07-14T16:16:23.547" Score="1" Body="&lt;p&gt;Assuming that you already have IP forwarding working through your dial-up host, there are two ways to direct a dial-up user to a specific proxy that I can think of:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Configure the web browser on the system using dial-up to use the proxy.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Reroute all web requests from the system using dial-up to the proxy.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If you are using a Windows system as the dial-up server, you are probably better off using option #1.  option #2 is likely to be difficult.&lt;/p&gt;&#xA;&lt;p&gt;If you are using a Linux/Unix system as the dial-up server, both options work.  Option #2 in particular could be done using features like &amp;quot;iptables&amp;quot; or &amp;quot;pf&amp;quot;.  iptables is typically found on Linux systems, and pf is normally seen on BSD or BSD-derived systems (e.g. OpenBSD, pfSense, etc.)  The specific configuration needed in iptables, pf, or other such tools, is outside the scope of this RetroComputing StackExchange site but information about those tools is readily available on the Internet.&lt;/p&gt;&#xA;&lt;p&gt;If you do not already have your dial-up host forwarding IP traffic you'll need to set that up as well; setting up the host as a SLIP or PPP server would be a good approach.  Specific procedures on that are also probably outside the scope of RetroComputing.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2020-07-14T16:16:23.547" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15625" PostTypeId="2" ParentId="14410" CreationDate="2020-07-14T18:41:18.003" Score="13" Body="&lt;p&gt;You can write Zilog 80 programs and games (as I do) on the Commodore 128. I exploit Z88DK, which does the magic of booting the C128 in Zilog 80 mode.&#xA;The Zilog80 at 2mhz effective speed is about as fast as a MOS6502/8502@1mhz in many situations.&#xA;In some situations that depend on a bigger hardware stack, the slow Zilog80@2mhz can beat the MOS6502/8502@1mhz.&#xA;This is the case when you write your games in C with CC65/Z88DK dev-kits.&lt;/p&gt;&#xA;&lt;p&gt;My games are written in C + my abstraction layer CrossLib so that I can compile C128 versions in both MOS8502 and Zilog80 mode. I use equally good compilers for MOS8502 and Zilog80 (i.e., CC65 for MOS6502, SCCZ80 for Z80 and Intel8080 as part of Z88DK, as well as a dozen other cross-compilers). I know that this is not a scientific proof but both compilers have been developed and optimized over many years and both come from Small-C.&lt;/p&gt;&#xA;&lt;p&gt;You can take a look at my project and even test the binaries of my games (also in exotic C128 modes as such Zilog 80 non-CP/M):&lt;/p&gt;&#xA;&lt;p&gt;Source and doc: &lt;a href=&quot;https://github.com/Fabrizio-Caruso/CROSS-CHASE&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/Fabrizio-Caruso/CROSS-CHASE&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Binaries: &lt;a href=&quot;https://github.com/Fabrizio-Caruso/CROSS-CHASE/releases/&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/Fabrizio-Caruso/CROSS-CHASE/releases/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18803" LastActivityDate="2020-07-14T18:41:18.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15626" PostTypeId="2" ParentId="15615" CreationDate="2020-07-14T18:58:57.693" Score="0" Body="&lt;p&gt;It's quite possible the name originated in the 1970s when windowed computer systems (e.g. Xerox &lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Alto&quot; rel=&quot;nofollow noreferrer&quot;&gt;Alto&lt;/a&gt;) began to see development.  If not in the 1970s, then almost certainly by some point in the 1980s, with numerous window systems (e.g. &lt;a href=&quot;https://en.wikipedia.org/wiki/W_Window_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;W&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/SunView&quot; rel=&quot;nofollow noreferrer&quot;&gt;SunView&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/X_Window_System#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;X11&lt;/a&gt;, etc.) being developed.  I wish I still had my SunView manuals to see if the term was used therein.&lt;/p&gt;&#xA;&lt;p&gt;It seems fairly obvious but unproveable that the term was in part inspired by chrome on automobiles from preceding decades.&lt;/p&gt;&#xA;&lt;p&gt;Chrome was the decoration on windows which made them look nicer and/or more like a real object (skeuomorphic), but which had no functionality or callbacks attached -- at least back when I was writing SunView code.&lt;/p&gt;&#xA;" OwnerUserId="18112" LastActivityDate="2020-07-14T18:58:57.693" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15629" PostTypeId="1" AcceptedAnswerId="15630" CreationDate="2020-07-14T23:25:10.957" Score="1" ViewCount="153" Body="&lt;p&gt;I use D-Fend to run the video game Empire Deluxe in full screen mode (1366x768) on a Dell Vostro Core i3 laptop running Windows 10. It works fine.&lt;/p&gt;&#xA;&lt;p&gt;I want to run the game on a second identical laptop and have 2 players play the game over the local wireless network.&lt;/p&gt;&#xA;&lt;p&gt;In order for players to play Empire Deluxe head to head, a DOS configuration file named econfig.exe must first be run.&lt;/p&gt;&#xA;&lt;p&gt;In it, you click a button to activate NETBIOS. After that, you run the DOS file empire.exe to launch the game.&lt;/p&gt;&#xA;&lt;p&gt;What do I need to do to get this working?&lt;/p&gt;&#xA;" OwnerUserId="13592" LastActivityDate="2020-07-15T00:54:10.963" Title="Can I run a network game (Empire Deluxe) that uses NETBIOS?" Tags="&lt;emulation&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2020-07-15T11:51:07.600" ContentLicense="CC BY-SA 4.0" />
  <row Id="15630" PostTypeId="2" ParentId="15629" CreationDate="2020-07-15T00:20:40.783" Score="1" Body="&lt;p&gt;Now that's an interesting question. Although at best borderline Retro, as it asks for setup and information of a modern OS and a modern network.&lt;/p&gt;&#xA;&lt;p&gt;Haven't tried NetBIOS in modern Windows. But I would try to activate &lt;strong&gt;NetBIOS over TCP&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Open your wireless adaptor,&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;&amp;quot;IPv4&amp;quot;&lt;/em&gt; from the list,&lt;/li&gt;&#xA;&lt;li&gt;Click &lt;em&gt;&amp;quot;Properties&amp;quot;&lt;/em&gt;,&lt;/li&gt;&#xA;&lt;li&gt;Click &lt;em&gt;&amp;quot;Advanced&amp;quot;&lt;/em&gt;,&lt;/li&gt;&#xA;&lt;li&gt;Select the &lt;em&gt;&amp;quot;WINS&amp;quot;&lt;/em&gt; tab&lt;/li&gt;&#xA;&lt;li&gt;Select &lt;em&gt;&amp;quot;Enable NetBIOS over TCP/IP&amp;quot;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This may help. As might asking in groups dedicated to modern OS issues.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;P.S.: I love that game&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-15T00:54:10.963" LastActivityDate="2020-07-15T00:54:10.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15631" PostTypeId="2" ParentId="15611" CreationDate="2020-07-15T02:23:46.267" Score="8" Body="&lt;p&gt;To add to the confusion, here's a photo of the bottom of my &lt;a href=&quot;https://en.wikipedia.org/wiki/Ericofon&quot; rel=&quot;noreferrer&quot;&gt;Ericofon&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xM6OB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xM6OB.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In New Zealand the 1 to 9 digits on a rotary dial are backwards compared to other countries. Dialing '9' produces 1 pulse, '8' is 2 pulses etc. until '0' which is the usual 10 pulses.&lt;/p&gt;&#xA;&lt;p&gt;But what does this have to with computer and phone keypads? With a rotary dial the further the dial is rotated the more pulses it produces, so the higher (or in NZ lower) digits take longer to dial. Therefore it makes sense to allocate telephone numbers starting from lower digits because those numbers can be dialed faster (except in New Zealand!). With the lower digits being more common and requiring less hand movement, the finger naturally settles towards the top of the dial. Digital keypads also followed this arrangement because people were used to seeing the lower digits at the top.&lt;/p&gt;&#xA;&lt;p&gt;With computer keyboards the hands normally rest at the bottom/front of the keyboard, so the lower digits are faster to type. The reason for putting them there is similar in that the frequency of real-world numbers tends to favor smaller first digits (&lt;a href=&quot;https://en.wikipedia.org/wiki/Benford%27s_law&quot; rel=&quot;noreferrer&quot;&gt;Benford's law&lt;/a&gt;) ie.'1's are more prevalent than '9's. So it makes sense to have the lower digits at the bottom of the keyboard, closer to the operator. This is also why the '0' key is often made bigger, since it gets typed more often.&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-07-15T02:23:46.267" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15632" PostTypeId="1" CreationDate="2020-07-15T03:04:57.620" Score="-3" ViewCount="481" Body="&lt;p&gt;I've recently commenced revitalizing an &lt;a href=&quot;https://support.hp.com/ca-en/document/c03791266&quot; rel=&quot;nofollow noreferrer&quot;&gt;HP Pavilion Slim&lt;/a&gt;. She's running an Intel Pentium, x86_64. I thought I'd give Gentoo a go because I've found it very appealing and as a Bedrock user I wanted to be able to boot off of Gentoo's init system (initrc, we all know why) as well as bootloader. I've gotten almost halfway through the install ( maybe more like a third :))) ), and now I'm looking for the &lt;code&gt;stage3&lt;/code&gt; files for my PC. I've noticed that though there are builds for &lt;code&gt;i486&lt;/code&gt; and &lt;code&gt;i686&lt;/code&gt;. Being genuinely interested in which my PC was, I searched it up and after some light digging found this explanation:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;i386 works with any x86 processor (Intel, AMD,etc.),&lt;/li&gt;&#xA;&lt;li&gt;i486 has some performance tun[n]ing.&lt;/li&gt;&#xA;&lt;li&gt;i586 for Pentium and Pentium-MMX&lt;/li&gt;&#xA;&lt;li&gt;i686 for Pentium-Pro, P2,P3, P4, etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.linuxquestions.org/questions/linux-newbie-8/what-is-i486-i686-410580/#post2081265&quot; rel=&quot;nofollow noreferrer&quot;&gt;[source]&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But in that case Gentoo doesn't support my device?!? Hence, my question: what &lt;code&gt;i&lt;/code&gt; version (?) is my Intel Pentium PC? And where are the &lt;code&gt;stage3&lt;/code&gt; files for it? Is it possible to use, say, an &lt;code&gt;i486&lt;/code&gt; for a presumed &lt;code&gt;i586&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="18806" LastEditorUserId="278" LastEditDate="2020-12-02T20:40:57.633" LastActivityDate="2020-12-02T20:42:35.757" Title="Should I install Gentoo i586 packages on my PC?" Tags="&lt;cpu&gt;&lt;intel&gt;&lt;x86&gt;&lt;linux&gt;&lt;hp&gt;" AnswerCount="2" CommentCount="10" ClosedDate="2020-12-02T20:43:19.690" ContentLicense="CC BY-SA 4.0" />
  <row Id="15633" PostTypeId="2" ParentId="15632" CreationDate="2020-07-15T03:28:01.790" Score="8" Body="&lt;p&gt;The original Pentium, which succeeded the i80486, was indeed the original definition of the i586 instruction set - and &lt;em&gt;not&lt;/em&gt; x86_64.  But the Pentium was introduced in 1993, and your HP machine is &lt;em&gt;much&lt;/em&gt; newer than that.  Intel has continued to use the Pentium brand for almost every x86-compatible CPU line they've made since then, to great confusion among people not intimately familiar with the history.&lt;/p&gt;&#xA;&lt;p&gt;As a brief summary:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8088, 8086, 80286, 80386, 80486 are all pre-Pentium&lt;/li&gt;&#xA;&lt;li&gt;Pentium Classic (aka P5, defined i586)&lt;/li&gt;&#xA;&lt;li&gt;Pentium MMX&lt;/li&gt;&#xA;&lt;li&gt;Pentium Pro (aka P6, defined i686)&lt;/li&gt;&#xA;&lt;li&gt;Pentium II&lt;/li&gt;&#xA;&lt;li&gt;Pentium III (introduced SSE)&lt;/li&gt;&#xA;&lt;li&gt;Pentium 4 (aka NetBurst, introduced SSE2)&lt;/li&gt;&#xA;&lt;li&gt;Pentium M (for laptops)&lt;/li&gt;&#xA;&lt;li&gt;Core series, which itself has gone through many versions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Since the Core series was introduced, Intel now uses the Pentium and Celeron branding for low-end and often severely cut-down versions of Core series processors.&lt;/p&gt;&#xA;&lt;p&gt;The Pentium G-series is one of these cut-down Core series CPUs, does support x86_64, and is really too new to ask the Retrocomputing SE about.  I will simply recommend you to install the &lt;code&gt;amd64&lt;/code&gt; version of Gentoo rather than the &lt;code&gt;i586&lt;/code&gt; or &lt;code&gt;i686&lt;/code&gt; builds.&lt;/p&gt;&#xA;&lt;p&gt;For anyone who actually has a Pentium Classic, Pentium-MMX, or other genuine i586 device, Gentoo doesn't have an i586 stage build, but the i486 build will work.  You can then rebuild it optimised for i586 and the specific CPU that you have.  Expect it to take some time, on the order of weeks, as these CPUs are very old and slow.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-12-01T21:07:37.643" LastActivityDate="2020-12-01T21:07:37.643" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15634" PostTypeId="2" ParentId="15632" CreationDate="2020-07-15T06:27:46.060" Score="1" Body="&lt;p&gt;Gentoo is a source-based distribution, where everything is built from the source. You can tune GCC to build for i586 like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;COMMON_FLAGS=&amp;quot;-march=i586 -mtune=pentium -O2 -pipe&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;in your /etc/portage/make.conf&lt;/p&gt;&#xA;&lt;p&gt;Changing &lt;code&gt;-O2&lt;/code&gt; to &lt;code&gt;-Os&lt;/code&gt; will decrease executables size a bit.&lt;/p&gt;&#xA;&lt;p&gt;Another thing you need to worry is to build correct kernel.&lt;/p&gt;&#xA;&lt;p&gt;If the build process is failing or slow on your device, you can try building everything in a virtual machine on a modern pc, then transfer image to the device.&lt;/p&gt;&#xA;&lt;p&gt;To know what CPU you do have, find any bootable 'live' linux distribution (that is able to boot on your old pc, this for example &lt;a href=&quot;http://tinycorelinux.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://tinycorelinux.net/&lt;/a&gt;) and then type &lt;code&gt;cat /proc/cpuinfo&lt;/code&gt;. You can try to use this tiny linux as a chroot base system for your gentoo, as well.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-07-15T06:27:46.060" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15635" PostTypeId="2" ParentId="14410" CreationDate="2020-07-15T07:57:04.873" Score="-2" Body="&lt;p&gt;There were two reasons not many commercial C=128 z80 were games made.  First is that if they wrote for C=64, the C=128 people could play it too.  Writing only for z80 thus limited their potential market.  Second, the graphics are not as flexible with the z80, such as no sprites.  It is more difficult (but not impossible) to do graphically intensive games.  Achievable resolution would be better, but doing something with that resolution would be harder.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastEditorUserId="576" LastEditDate="2020-07-15T08:40:21.147" LastActivityDate="2020-07-15T08:40:21.147" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15636" PostTypeId="1" AcceptedAnswerId="15652" CreationDate="2020-07-15T15:26:56.897" Score="4" ViewCount="451" Body="&lt;p&gt;I would like to replace the ST502 MFM disk controller in my Schneider Target PC 7640 (about which I &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/13564/24&quot;&gt;asked earlier&lt;/a&gt;) with an ATA (IDE) controller as it gets harder and harder to find replacement MFM disks.&lt;/p&gt;&#xA;&lt;p&gt;Fortunately, the MFM controller is on a daughterboard, the proprietary connector to which provides access to almost the entire AT (ISA) bus and certainly to enough signals to implement an ATA controller.&lt;/p&gt;&#xA;&lt;p&gt;Can someone give me an example circuit for an ATA controller for the AT bus which I can adapt into a custom disk controller card for the computer?&lt;/p&gt;&#xA;&lt;p&gt;To clarify: an ATA controller in the sense of this question is the circuitry that adapts the AT (ISA) bus into an ATA (IDE) port.  A BIOS extension ROM circuit is not needed as the system's own BIOS has code to drive a standard WD-brand ST502 controller to which ATA disks are backwards compatible.&lt;/p&gt;&#xA;&lt;p&gt;Note: I am aware of XT-IDE and related projects.  These are not conventional IDE controllers and are irrelevant for this question.&lt;/p&gt;&#xA;" OwnerUserId="24" LastEditorUserId="24" LastEditDate="2020-07-15T22:17:40.517" LastActivityDate="2020-07-16T22:36:58.530" Title="How to build an ATA controller for the AT bus?" Tags="&lt;hardware-mods&gt;&lt;ide&gt;&lt;isa&gt;&lt;pc-at&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15637" PostTypeId="1" AcceptedAnswerId="15656" CreationDate="2020-07-15T17:58:20.977" Score="4" ViewCount="452" Body="&lt;p&gt;I have a spare universal power supply with regulated voltage up to 12 volts, max 1500mA. It has replaceable tips, where you can reverse polarity. As I understand the MegaDrive 2 (European / Australian version type MK-1631-50, in my case) requires positive in barrel core and negative on the outside.&lt;/p&gt;&#xA;&lt;p&gt;If I connect it the other way would any components blow?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="3290" LastEditDate="2020-07-17T01:39:56.030" LastActivityDate="2020-07-17T22:11:22.683" Title="Does the Sega Megadrive 2 have built-in protection against reverse polarity" Tags="&lt;hardware&gt;&lt;sega&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15638" PostTypeId="2" ParentId="15637" CreationDate="2020-07-15T18:02:23.670" Score="0" Body="&lt;p&gt;Depends on how powerful your power supply is. Most NMOS chips behave like a big diode from GND to Vcc when polarity is reversed, so weak power supply would simply go into short-circuit protection.&lt;/p&gt;&#xA;&lt;p&gt;If there is 7805 inside the SMD2, there are chances that 7805 will blow, though.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-07-15T18:02:23.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15639" PostTypeId="2" ParentId="15636" CreationDate="2020-07-15T20:30:04.760" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How to build an ATA controller for the AT bus?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You can't, as there isn't any.&lt;/p&gt;&#xA;&lt;p&gt;You want to connect IDE-Drives, right? IDE stands for &lt;a href=&quot;https://en.wikipedia.org/wiki/Parallel_ATA#IDE_and_ATA-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Integrated Device Electronics&lt;/a&gt;. Which simply means that the full host controller is already part of the drive. It contains everything that is on your MFM controller, except for bus-buffering, address selection and extension ROM. as these parts are considered machine specific.&lt;/p&gt;&#xA;&lt;p&gt;The connector can be seen as a simplified &lt;a href=&quot;https://en.wikipedia.org/wiki/Industry_Standard_Architecture#ATA&quot; rel=&quot;nofollow noreferrer&quot;&gt;16 bit ISA slot&lt;/a&gt;, reduced to what the bare drive controller needs. It's called an IDE port or ATA-connector, as in AT-Attachment, where AT stands for the 16 bit ISA bus. With the introduction of SATA (Serial ATA) the term PATA for Parallel ATA came into use.&lt;/p&gt;&#xA;&lt;p&gt;If an IDE port is not part of the chipset or mainboard, a bus adaptor card was used. This card did three rather simple things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do address decoding (primary 01F0h, secondary 0170h) so the only access to the port(s) selected is forwarded to the IDE drive&lt;/li&gt;&#xA;&lt;li&gt;Optional buffer all signals to reduce bus load and 'sharpen' signals.&lt;/li&gt;&#xA;&lt;li&gt;Optional offer socket and decoding (C800h) for an extension ROM (*1)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Everything else is, as said, already on the drive.&lt;/p&gt;&#xA;&lt;p&gt;All you need do do for your Schneider laptop is to decode the bus connector (*2) layout to make a little board doing address decoding and forwarding the needed lines to the IDE connector. There is no secret, just match the lines on either connector.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[Yes, &lt;strong&gt;it is&lt;/strong&gt; that simple and I guess by now it's clear why Ross Ridge ad a hard time to write more than he did]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Chances are good that your BIOS will be already able to handle a basic IDE drive, as it's interface is exactly the one of an IBM MFM controller - assuming the controller used at the moment is a compatible design.&lt;/p&gt;&#xA;&lt;p&gt;This straight relation is BTW the reason why &lt;a href=&quot;https://en.wikipedia.org/wiki/CompactFlash&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compact Flash&lt;/a&gt; is so common with old hardware, as it is as well a straight AT bus.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note: I am aware of XT-IDE and related projects. These are not conventional IDE controllers and are irrelevant for this question.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Don't tell this to any company building and selling them back in the days. Unlike you may assume, 8 bit IDE isn't a new or retro thing, but was as well a product back then. After all, XT were sold until the 90s as low end machines and thus especially in need of cheap drives. There were 8 bit IDE controllers in form of dedicated or multi function cards.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Usually only 8 bit adaptor cards featured the socket, as AT class machines made the HD-ROM part of the standard BIOS.&lt;/p&gt;&#xA;&lt;p&gt;*2 - That's the &lt;a href=&quot;https://i.stack.imgur.com/4KVyC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;interesting connector&lt;/a&gt; on the lower right side. I pretty sure it's a standard AT bus. Have you checked that?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-15T22:38:44.150" LastActivityDate="2020-07-15T22:38:44.150" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15640" PostTypeId="1" CreationDate="2020-07-15T20:35:05.473" Score="3" ViewCount="213" Body="&lt;p&gt;In short, are banks 20h/40h/60h accessible in mode 1?&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://gbdev.io/pandocs/#mbc1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pan Docs&lt;/a&gt; state that when in mode 1, those banks become accessible.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;...on large carts (using the secondary banking register to specify the upper ROM Bank bits), the same happens for banks 20h, 40h, and 60h, as this register would need to be 00h for those addresses. Any attempt to address these ROM Banks will select Bank 21h, 41h, and 61h instead. The only way to access banks 20h, 40h or 60h is to enter mode 1, which remaps the 0000-3FFF range.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They clearly say that mode 1 remaps the 0000-3FFF range, which I haven't seen other sources say. This is also confusing because mode 1 affects the RAM banks. The Pan Docs say that mode 1 behaves differently for a small ROM/large RAM, and large ROM/small RAM.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;In mode 1, the behavior differs depending on whether the current cart is a &amp;quot;large RAM&amp;quot; cart (&amp;gt;8kB RAM) or &amp;quot;large ROM&amp;quot; cart (1 MB or larger). For large RAM carts, switching to mode 1 enables RAM banking and (if RAM is enabled) immediately switches the A000-BFFF RAM area to the bank selected by the 2-bit secondary banking register.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;For &amp;quot;large ROM&amp;quot; carts, mode 1 has the 4000-7FFF banked ROM area behave the same as mode 0, but additionally the &amp;quot;unbankable&amp;quot; &amp;quot;bank 0&amp;quot; area 0000-3FFF is now also affected by the 2-bit secondary banking register, meaning it can now be switched between banks 00h, 20h, 40h, and 60h. These banks are inaccessible in mode 0 - they cannot be mapped to the 4000-7FFF banked ROM area.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;However, they don't address the large ROM/large RAM case; is it possible? If so, how does the secondary bank register behave in mode 1?&lt;/p&gt;&#xA;&lt;p&gt;Other sources that I found simply say that banks 20h/40h/60h are inaccessible, and don't mention the 0000-3FFF remapping. They say that in mode 0, RAM banking is disabled and the full ROM banking is enabled, and in mode 1 RAM banking is enabled and you get limited ROM banking. Basically, mode 0 is max 2MB ROM/8KB RAM, and mode 1 is max 512KB ROM/32KB RAM.&lt;/p&gt;&#xA;&lt;p&gt;So which is true?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://gbdev.io/pandocs/#mbc1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pan Docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11735&quot;&gt;A retrocomputing answer&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The GameBoy CPU Manual&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;**Edit: **&#xA;As a follow-up question, if the Pan Docs are correct, how does the mapping work exactly in mode 1 large ROM? Does the second register control only the mapping of the 0000-3FFF range, and your second range is limited to 31 banks, or does it work the same as in mode 0 but also remaps the 0000-3FFF range?&lt;/p&gt;&#xA;" OwnerUserId="18816" LastEditorUserId="6659" LastEditDate="2020-07-17T00:26:14.690" LastActivityDate="2020-07-17T09:02:47.437" Title="How does the GameBoy's Memory Controller MBC1 Work in Mode 1?" Tags="&lt;memory&gt;&lt;emulation&gt;&lt;game-boy&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15641" PostTypeId="1" CreationDate="2020-07-16T01:14:40.640" Score="17" ViewCount="3926" Body="&lt;p&gt;I was reading this QA ( &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15607/why-is-the-clock-frequency-of-the-ps-2-keyboard-protocol-so-high&quot;&gt;Why is the clock frequency of the PS/2 keyboard protocol so high?&lt;/a&gt; ) and read in the replies that a high frequency was chosen (at least in-part) to reduce the latency between a keypress and the computer receiving the event.&lt;/p&gt;&#xA;&lt;p&gt;I wondered &lt;em&gt;what if&lt;/em&gt; a keyboard interface was designed using a clock-less parallel port interface to the computer (by &amp;quot;parallel port&amp;quot;, I mean any cable or connection using parallel data lines, not just a PC parallel printer port).&lt;/p&gt;&#xA;&lt;p&gt;For example, one using 8 data conductors to represent a 7-bit scan code and a 1-bit Pressed/Not-pressed state bit. Each change in the data lines would be triggered immediately on any change in physical keyboard state. This could hypothetically be done entirely with analog circuity, so no need for clock signal or polling. This means it would also support unlimited N-key rollover.&lt;/p&gt;&#xA;&lt;p&gt;The host-device would be responsible for tracking keypress state, but it would only need 127 hardware bits. It would raise the CPU/OS keyboard interrupt when a keyboard state-change was sensed on the port's lines.&lt;/p&gt;&#xA;&lt;p&gt;(This approach wouldn't preclude port multiplexing either. Just add additional bits to represent a device-ID).&lt;/p&gt;&#xA;&lt;p&gt;I did a quick-search online for &amp;quot;parallel port keyboard&amp;quot; and &amp;quot;scsi port keyboard&amp;quot; but I didn't find anything relevant.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Somewhat related: my primary-school in the UK had BBC Micros and some of them had &lt;a href=&quot;https://en.wikipedia.org/wiki/Overlay_keyboard&quot; rel=&quot;noreferrer&quot;&gt;concept-keyboards&lt;/a&gt; attached to them (probably &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/ConceptKbd_A4-128.html&quot; rel=&quot;noreferrer&quot;&gt;this exact model&lt;/a&gt;, actually). I remember it having a blue casing and a ribbon cable attaching it to the computer. So I suppose that's one example but it's not a &amp;quot;true&amp;quot; keyboard.&lt;/p&gt;&#xA;&lt;p&gt;AFAIK, while the &amp;quot;user port&amp;quot; was a parallel port, it did require polling by software instead of being capable of raising hardware keyboard interrupts.&lt;/p&gt;&#xA;" OwnerUserId="4331" LastEditorUserId="10260" LastEditDate="2020-07-17T00:17:39.987" LastActivityDate="2020-07-18T20:23:33.653" Title="Were there any parallel port keyboards?" Tags="&lt;keyboards&gt;&lt;ports&gt;" AnswerCount="8" CommentCount="19" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15642" PostTypeId="2" ParentId="15641" CreationDate="2020-07-16T03:33:44.173" Score="24" Body="&lt;p&gt;Early Wang basic computers used a &lt;em&gt;backplane&lt;/em&gt; keyboard with an enormous bespoke parallel interface to the detached style keyboard device.&lt;/p&gt;&#xA;&lt;p&gt;Wang's 2200 and 2600 BASIC-only minicomputers were available with the 2215 BASIC keyword KBD, the 2222 alphanumeric typewriter KBD, and the 2223 upper/lower case BASIC keyword KBD. None of these keyboards contained a key scanner in the peripheral itself -- Wang Labs found the scanner too bulky to slip under the keys -- so the scanner was in the peripheral controller that plugged into the backplane. The keyboard peripheral contained only the keys connected via diodes to a scannable matrix.&lt;/p&gt;&#xA;&lt;p&gt;The matrix rows and columns, plus a few switches and lights and some signal housekeeping, were connected to the controller with a bundle of wires. That's right, a parallel connection to each row and column of keys. The wires, about 30 of them, were bundled into a kind of 3/8&amp;quot; gray plastic hose with robust strain reliefs at both ends.&lt;/p&gt;&#xA;&lt;p&gt;This had the effect you would expect. You couldn't move the keyboard around without knocking things off your desk. Sometimes the keyboard would creep about under the influence of the stiff cable. I think the thing had weights in it to hold it down.&lt;/p&gt;&#xA;" OwnerUserId="4186" LastActivityDate="2020-07-16T03:33:44.173" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15643" PostTypeId="2" ParentId="15615" CreationDate="2020-07-16T04:50:18.067" Score="2" Body="&lt;p&gt;(Extending my previous comments into an answer...)&lt;/p&gt;&#xA;&lt;p&gt;I'm not sure about &amp;quot;most people&amp;quot;. I'm Gen X and I'd expect most people from my generation and before think of &amp;quot;chrome&amp;quot; as a bright shiny &amp;quot;silver&amp;quot; or &amp;quot;mirror-like&amp;quot; metal, mostly used on car exterior trim before the '80s but also on other metals that should both look nice and be protected from corrosion, such as taps/faucets. The web browser hasn't even existed for 15 years yet.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, the era and area when cars had the most chrome plating was 1950s America in the postwar boom. Initially just for corrosion protection on bumpers but went crazy with it by the end of the decade. In the '60s and '70s it went back to just corrosion protection on bumpers, door handles, mirrors etc and had all but disappeared by the beginning of the '80s.&lt;/p&gt;&#xA;&lt;p&gt;Since I was a child I've had three main interests: language, classic cars (mainly '50s and '60s), and computers. The spot on the Venn Diagram where all three intersect is tiny, but we have found ourselves there (-:&lt;/p&gt;&#xA;&lt;p&gt;In the automotive world I have only ever known &amp;quot;chrome&amp;quot; to be used in a literal sense. Short for the metal element &amp;quot;chromium&amp;quot;. I have never heard of it being extended to mean any other kinds of nonfunctional aesthetic trim, add-ons, flourishes, etc. Not formally and not in slang either. It was extended slightly to cover other &amp;quot;silver&amp;quot; or &amp;quot;mirror-like&amp;quot; polished shiny metal or fake metal. This would include polished stainless steel mouldings and &amp;quot;plastic chrome&amp;quot; in interiors which I believe used evaporated aluminium. It was not even ever used for other colours of shiny metal such as gold or anodized pieces.&lt;/p&gt;&#xA;&lt;p&gt;To check my suspicions I searched regular dictionaries and then slang dictionaries online. Most only have the literal sense of the metal. Wiktionary and one dictionary of slang also cover the GUI sense. &lt;a href=&quot;https://books.google.com.au/books?id=5F-YNZRv-VMC&amp;amp;q=chrome#v=snippet&amp;amp;q=chrome&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;The Routledge Dictionary of Modern American Slang and Unconventional English&lt;/em&gt;&lt;/a&gt;, page 200:&lt;br /&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/3ADO7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3ADO7.png&quot; alt=&quot;chrome in slang dictionary&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;They give the date of 1991 as the first use they found and note that it was in another dictionary, Eric S Raymond's &lt;em&gt;The New Hacker's Dictionary&lt;/em&gt;. In lexicography, sourcing a word only from another dictionary is not always seen to be as good as sourcing it from primary materials &amp;quot;in the wild&amp;quot;. &lt;a href=&quot;https://en.wikipedia.org/wiki/Jargon_File&quot; rel=&quot;nofollow noreferrer&quot;&gt;According to Wikipedia&lt;/a&gt;, the &lt;em&gt;New Hacker's Dictionary&lt;/em&gt; is derived from the Jargon File, which is already mentioned in another answer here, and with a slightly earlier citation for &amp;quot;chrome&amp;quot; in the sense we're investigating. Now there is an original &lt;em&gt;The Hacker's Dictionary&lt;/em&gt; by &lt;a href=&quot;https://en.wikipedia.org/wiki/Guy_L._Steele_Jr.&quot; rel=&quot;nofollow noreferrer&quot;&gt;Guy L Steele&lt;/a&gt; that was published in 1983. So far I can't find its text online.&lt;/p&gt;&#xA;&lt;p&gt;There is a chance it may have had such a slang use in another language. European cars only used chrome very sparingly. I checked German Wiktionary and found nothing but maybe a big official dictionary has something.&lt;/p&gt;&#xA;&lt;p&gt;I suspect the information from the Jargon File and (New) Hacker's Dictionary is both right and wrong. I believe the step about &amp;quot;automotive slang&amp;quot; was a brand new folk etymology from the writer's imagination trying to fill the gap without evidence or experience of car enthusiast terminology. But the part about wargaming sounds very plausible to me. I know when I was getting into computers almost before colour and hi-res that many of the older guys were into wargames. I never took an interest.&lt;/p&gt;&#xA;&lt;p&gt;My personal feeling, which I haven't found conclusive evidence of yet, is that I first saw the modern GUI sense when Netscape went open source after losing the Browser War to Internet Explorer. Whether it was in the original source, or whether it was tied to their &lt;a href=&quot;https://en.wikipedia.org/wiki/XUL&quot; rel=&quot;nofollow noreferrer&quot;&gt;XUL&lt;/a&gt; interface markup language during the Mozilla days before the Firefox branch became the main browser, I do not know. It is definitely used &lt;a href=&quot;https://en.wikipedia.org/wiki/XUL#Example&quot; rel=&quot;nofollow noreferrer&quot;&gt;in XUL markup&lt;/a&gt; though:&lt;br /&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/cqe9h.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cqe9h.png&quot; alt=&quot;&amp;quot;chrome&amp;quot; in XUL markup&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;Oh and MDN, the Mozilla Developer Network has &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Chrome_Registration&quot; rel=&quot;nofollow noreferrer&quot;&gt;a whole article on this sense of chrome&lt;/a&gt;, which links to its &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Glossary/Chrome&quot; rel=&quot;nofollow noreferrer&quot;&gt;glossary entry&lt;/a&gt;, which in turn links to &lt;a href=&quot;https://www.nngroup.com/articles/browser-and-gui-chrome/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this definition on a &amp;quot;Nielsen Norman Group&amp;quot; site&lt;/a&gt;, whose author states they don't know the origin but speculates that it's: &amp;quot;likely a visual analogy with the use of metal chrome on big American cars during the 1950s&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I wasted a few hours trying to establish whether it was previously used in &lt;a href=&quot;https://en.wikipedia.org/wiki/X_Window_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;X11&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Mosaic_(web_browser)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mosaic&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Motif_(software)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motif&lt;/a&gt;, etc but failed to track it down. Even when you try to search specific dates, both Google's browser and results with wrong dates are far too common. Perhaps it came from one of the graphical environments of one of the proprietary Unix variants?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-07-16T13:42:10.917" LastActivityDate="2020-07-16T13:42:10.917" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15644" PostTypeId="2" ParentId="15641" CreationDate="2020-07-16T08:17:22.227" Score="23" Body="&lt;p&gt;Of the variants produced in a relatively large series - let me remind you about the keyboard connection on the Commodore 128D - it was connected using a 25-pin interface, 23 lines of which directly represented the matrix of keys.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/7ISHm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7ISHm.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2020-07-16T08:17:22.227" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15645" PostTypeId="1" AcceptedAnswerId="15651" CreationDate="2020-07-16T12:45:23.480" Score="13" ViewCount="2397" Body="&lt;p&gt;This could be a question for the Electronics StackExchange, but I figured that if I couldn't find any info about it it might be more of a Retrocomputing thing.&lt;/p&gt;&#xA;&lt;p&gt;I've been poking around on Google and some vendor sites looking for a simple processor that I could just buy and plug into a breadboard or maybe hand-solder if necessary, and just mess around with as I learn about electronics and computer hardware.&lt;/p&gt;&#xA;&lt;p&gt;I know about the 6502, as it were Ben Eater's videos that sparked my interest, but I thought &amp;quot;Hey, there must be some old 32 bit processor like this still in production&amp;quot;. I'm the kind of guy who doesn't mind doing everything from scratch, even if it's impractical, so I was looking for something where I can hook up the 32 address lines to some memory or whatever in the same way you would a 6502. Turns out that that's not a thing. From what I understand, everything goes through controllers inside the chip for NAND or DDR or whatever and you connect those particular components/controllers to those pins, no exposed address bus or data pins.&lt;/p&gt;&#xA;&lt;p&gt;I would have thought that some other people would want something like this, and that somebody would be making a really simple Microprocessor for that, whether it be in ARM or some old ISA, but all the chips I find are either 8/16 bit or have so many pins they need BGA, and none of them have anything clearly labelled as an address bus, so there must be a good reason it doesn't exist. I might just be using the wrong search terms or know way too little about electronics, but I can't seem to be able to find anything about this. If somebody could explain why to me, that would be greatly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="18822" LastActivityDate="2020-07-18T20:19:16.090" Title="What happened to exposed address pins/address bus?" Tags="&lt;hardware&gt;" AnswerCount="7" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15646" PostTypeId="2" ParentId="15645" CreationDate="2020-07-16T13:15:31.480" Score="12" Body="&lt;p&gt;You won't find a 32-bit processor that had a clock speed slow enough to work with a breadboard type of layout, and in any case the chip would have too many pins to package that way (the address and data bus would take 64 pins, without anything else).&lt;/p&gt;&#xA;&lt;p&gt;A 32-bit data bus doesn't mean that data is always transferred 32 bits at a time - some instructions only transfer 16 or 8 bits. So you need the logic circuits to handle that, not just a direct connection to the memory chips.&lt;/p&gt;&#xA;&lt;p&gt;For an early 32 bit CPU like the 80386, you need a circuit board with power and ground planes, not a breadboard.&lt;/p&gt;&#xA;&lt;p&gt;There is nothing stopping you designing and building 386-based computer &amp;quot;from scratch&amp;quot; if you really want to, but Intel's &lt;a href=&quot;http://www.s100computers.com/My%20System%20Pages/80386%20Board/1987_80386_Hardware_Reference_Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;hardware reference manual for the 386&lt;/a&gt; is a 300-page document, compared with the simplicity of a chip like the 6502.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2020-07-16T13:15:31.480" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15647" PostTypeId="2" ParentId="15645" CreationDate="2020-07-16T13:29:34.497" Score="4" Body="&lt;p&gt;The primary reason you don't see open address buses is clock speed. At the &amp;gt;100Mhz speeds modern processor's chipset buses operate at, having multiple things connected to an electrical line results in complex wave behaviors. Thus it is a lot easier to have a single point to point bus to a chipset IC, which handles fanout to the various controllers.&lt;/p&gt;&#xA;&lt;p&gt;A secondary reason you don't see an open address bus from the chipset is autoconfig. A DIMM doesn't have a hardwired mapping from the CPU address space to DIMM addresses. The processor memory controller queries the DIMM to find out its geometry, and then automatically configures the mapping. This is sufficiently complex to need an IC, and its easier to have the IC built in to something else than to need a dedicated IC.&lt;/p&gt;&#xA;&lt;p&gt;For a 32 bit processors this translation was usually done by the chipset, but as memory bandwidth and chipset bandwidth requirements have gone up, the memory was moved to a dedicated bus from the CPU, at which point it makes sense to have the controller on the CPU.&lt;/p&gt;&#xA;&lt;p&gt;Likewise for expansions cards, PCI and latter needs a controller negotiate with the card as to which address space the card should respond to, and then map that into the address space. Again as bandwidth and latency requirements for Graphics cards, SSDs and Network cards have gone up, some processors have started including PCIe controllers for the expansion cards directly on the CPU.&lt;/p&gt;&#xA;" OwnerUserId="18058" LastEditorUserId="18058" LastEditDate="2020-07-18T20:19:16.090" LastActivityDate="2020-07-18T20:19:16.090" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15648" PostTypeId="2" ParentId="15645" CreationDate="2020-07-16T18:15:32.770" Score="11" Body="&lt;p&gt;To expand on the 68000-family suggestion from @user and @Stefan Skoglund's comments, in community wiki form:&lt;/p&gt;&#xA;&lt;p&gt;The 68000 is a 1979 processor with a 32-bit instruction set that appears &lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc/M680x0-Options.html&quot; rel=&quot;noreferrer&quot;&gt;still to be supported by GCC&lt;/a&gt;*. It was initially available as a 64-pin DIP, using a 24-bit address bus and 16-bit data bus. Additional complexity over an 8-bit machine is:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;it may access either a 16-bit quantity or an 8-bit quantity — there are a couple of pins to tell you which halves of the bus are in use; and&lt;/li&gt;&#xA;&lt;li&gt;more minor, it's full-speed bus is asynchronous in the sense that the processor itself will announce the intended access then wait for DTACK (i.e. data acknowledge) before completing the access. As per the title of a famous newsletter, you can just &lt;a href=&quot;https://en.wikipedia.org/wiki/DTACK_Grounded&quot; rel=&quot;noreferrer&quot;&gt;ground DTACK&lt;/a&gt; to get a bus that just always powers on through.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Other interesting variants are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the 68008, which has the same instruction set but is packaged as a 40-pin DIN and uses only an 8-bit data bus. So interfacing is very similar indeed to a 6502 or Z80;&lt;/li&gt;&#xA;&lt;li&gt;the 68010, which is a very minor improvement over the 68000, primarily in supporting recovery from faults, including access faults, which facilitates virtual memory.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;From the 68020 onwards you're looking at quad flat pack or pin grid array sockets; both use full 32-bit data and address buses and have a correspondingly more complicated set of signalling for identifying which parts of the data bus are being used in any memory access. The QFP version has 132 pins.&lt;/p&gt;&#xA;&lt;p&gt;* at least they're still documenting 68k-specific command line flags in that, the GCC 11 documentation. I can't speak as to how well maintained that support is.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-07-16T19:55:19.010" LastActivityDate="2020-07-16T19:55:19.010" CommentCount="5" CommunityOwnedDate="2020-07-16T18:15:32.770" ContentLicense="CC BY-SA 4.0" />
  <row Id="15649" PostTypeId="2" ParentId="15641" CreationDate="2020-07-16T20:18:17.700" Score="6" Body="&lt;p&gt;For a keyboard that includes a shift key to be useful, either the CPU must poll it often enough to observe the state of the shift key whenever another key is pushed, or the keyboard must capture enough information without CPU intervention to know whether a keystroke represents a shifted or unshifted character.&lt;/p&gt;&#xA;&lt;p&gt;In systems that use the former approach, there's not much benefit to having hardware report scan codes versus having the software directly perform row/column scanning.  In systems that use the latter approach, but only try to capture one key event (e.g. the Apple II) using a key matrix which is arranged in ASCII order, and applying the effects of shift and control keys before latching a key stroke, is cheaper than separately latching the main key and the state of the modifier keys.  On the PC and AT, a microcontroller in the keyboard includes enough internal buffering to ensure that changes to the modifier key states will be reported in sequence with respect to changes in any other keys' states, but using a microcontroller means a serial interface may be used as easily as a parallel one.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-07-16T20:18:17.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15650" PostTypeId="2" ParentId="15641" CreationDate="2020-07-16T21:05:59.593" Score="8" Body="&lt;p&gt;Early micro/home computer used parallel keyboards. These were (usually) called 'ASCII' Keyboards. A good example is &lt;strong&gt;the Apple II, which implements a protocol almost exact like you imagined&lt;/strong&gt; - sans interrupt that is. A key press was presented as 7 data bits with ASCII like encoding plus a flag at bit 7 indicating a key press, cleared whenever the port was read.&lt;/p&gt;&#xA;&lt;p&gt;Like serial keyboards they need decoding 'intelligence' able to turn some input matrix into a keyboard word. The &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12510/12511#12511&quot;&gt;Apple II&lt;/a&gt; for example use used a &lt;a href=&quot;http://matthieu.benoit.free.fr/cross/data_sheets/National_Semiconductor_Data_Update6.pdf&quot; rel=&quot;noreferrer&quot;&gt;MM5740 encoder&lt;/a&gt; originally designed for a TTY-like keyboard delivering a simple 7/8 bit plus strobe output. Others, like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8279&quot; rel=&quot;noreferrer&quot;&gt;Intel 8279&lt;/a&gt; offered a direct microprocessor compatible interface with higher functions.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Direct scanned keyboards are often mistaken for being parallel. &lt;strong&gt;But they are not&lt;/strong&gt;. They are simply a matrix. Many home computers tried to save cost of a keyboard controller/decoder by using &lt;em&gt;some&lt;/em&gt; parallel port to 'manually' decode a keyboard matrix. A good example is Commodore's PET series, all the way to the C128.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;In general a &lt;strong&gt;serial interfaces&lt;/strong&gt; did prevail as they need way less wires in your cable (if detached) and less port bits on the host side - similar leaving more port bits on the keyboard controller side. A great pre micro example are DEC terminal keyboards (copied by the Apple LISA keyboard). Many micros used the inherent advantages, IBM-PC, Amiga or Atari ST - the later used for example the 'freed' controller bits for the joystick interface.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-17T00:22:43.010" LastActivityDate="2020-07-17T00:22:43.010" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15651" PostTypeId="2" ParentId="15645" CreationDate="2020-07-16T21:34:16.403" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;[...] but all the chips I find are either 8/16 bit or have so many pins they need BGA, and none of them have anything clearly labelled as an address bus, so there must be a good reason it doesn't exist. I might just be using the wrong search terms or know way too little about electronics, but I can't seem to be able to find anything about this. If somebody could explain why to me, that would be greatly appreciated!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The raesoning is rather simple: &lt;strong&gt;Total System Cost&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;As much as we would like it, processors are not made to foster needs of students and tinkering hobbyists, but usage in real world applications. Here cost cutting is a major force if not the all over rule.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;For devices needing small RAM/ROM sizes (which is by now several hundret KiB) it's best to include it already with the controller. Saving all additional cost for its users.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When it comes to larger amounts of RAM/ROM that can't be included, conversion from a classic address-/data-bus to what either memory is necessary. While this was, in the early days, a task comparable to the microprocessor itself, it's nowadays neglectable. Thus including it in a SoC is no deal, but cuts out the middle man, saving cost.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Including the (DRAM) memory interface not only simplifies interfacing, it also enables higher access speed due specific burst protocols - something the last generation with a 'classic' bus (NS32532/M68060/iPentium) did already include - diverging from a simple A/D bus like mentioned.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A variation thereof are applications of comparable low speed but high data need. Here using a serial (or small word size) interface like SPI or its extensions SD-Card and eMMC.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Historically (and for the x86) CPUs were supplemented since 80286 times by 'chipsets' (&lt;a href=&quot;https://en.wikipedia.org/wiki/NEAT_chipset&quot; rel=&quot;nofollow noreferrer&quot;&gt;NEAT&lt;/a&gt;) often consisting of (at least) two chips, a &lt;a href=&quot;https://en.wikipedia.org/wiki/Northbridge_(computing)&quot; rel=&quot;nofollow noreferrer&quot;&gt;memory controller&lt;/a&gt; providing all memory translation and fast busses and an &lt;a href=&quot;https://en.wikipedia.org/wiki/Southbridge_(computing)&quot; rel=&quot;nofollow noreferrer&quot;&gt;I/O controller&lt;/a&gt; offering standard busses for expansion like PCI(e), USB and so on.&lt;/p&gt;&#xA;&lt;p&gt;Over time the memory controllers have been integrated into the CPU, not at least because handling them needs at least as many pins as they provide - one of the most daring problems in chip design are pins - there are never enough.&lt;/p&gt;&#xA;&lt;p&gt;The latest iteration is with AMD's Ryzen CPUs which are more of a SoC, as they integrate the I/O controller as well. Chipsets for Ryzen only increase available interfaces and could be saved for minimal systems.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Bottom line, a classic A/D bus might be the most simple and versatile solution, but like all simple solutions, it doesn't scale well.&lt;/p&gt;&#xA;&lt;p&gt;C's everything is a byte in sequential storage might be the perfect counterpart in software. Quite flexible to handle everything and equally portable to a majority of architectures - but on the other hand extreme bad to improve on for performance. Just hink about all the add-ons all later versions up to today's C++ and derivativ languages did introduce to fix it one way or another.&lt;/p&gt;&#xA;&lt;p&gt;It's quite funny that hardware was way more able to simply drop it and switch to higher grade interfaces.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-17T11:29:02.133" LastActivityDate="2020-07-17T11:29:02.133" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15652" PostTypeId="2" ParentId="15636" CreationDate="2020-07-16T22:36:58.530" Score="7" Body="&lt;p&gt;A proper ISA IDE interface is quite simple, but not as easy as it might sound. There are some strange corner cases you should consider for full AT compatibility. You can find schematics for ISA IDE interface adapters in service manuals of computers slightly newer than you MFM portable computer. For example, check volume II of the Compaq Deskpro 386 technical reference manual, as found &lt;a href=&quot;https://www.pcjs.org/machines/pcx86/compaq/deskpro386/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. It has the schematics for the multi I/O-board on pages 98 to 103. I do not reproduce the schematics here as I am unsure about copyright issues. While this board does use a highly integrated custom chip, that chip is nearly unneeded for the IDE port, and more importantly, the single function it does for IDE is quite straightforward.&lt;/p&gt;&#xA;&lt;p&gt;First, I am going to give an overview on the contents of the 6 pages:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Page 1: It has the ISA connector (and documentation and unused gates)&lt;/li&gt;&#xA;&lt;li&gt;Page 2: It has the I/O address decode logic and ISA buffers needed to implement a proper IDE interface (the fine print of proper is layed out later)&lt;/li&gt;&#xA;&lt;li&gt;Page 3 is irrelevant (it contains the FDD bit rate oscillator and the parallel port data output latch)&lt;/li&gt;&#xA;&lt;li&gt;Page 4 is mostly irrelevant (it contains the custom logic chip, the floppy controller and parts of the parallel port)&lt;/li&gt;&#xA;&lt;li&gt;Page 5 is irrelevant (it contains the serial port and the 24MHz reference oscillator for the FDD)&lt;/li&gt;&#xA;&lt;li&gt;Page 6: It has the IDE connector and IDE LED connector (it also has the FDD connector and the parallel port).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So all the interesting stuff is on page 2, which I will describe in detail in the remaining part of the answer.&lt;/p&gt;&#xA;&lt;p&gt;The two bidirectional 8-bit data buffers U31 and U27 make the 16-bit ISA/IDE data buffer. There is a special case, though, which is handled by U22, a separate 8 bit line driver that only drives seven lines on the ISA bus, D0-D6, but &lt;em&gt;not&lt;/em&gt; D7. This is meant for port 0x3F7, which has 7 bits from the IDE cable on the low 7 bits, but the disk change line on the top bit. This top bit is driven from the floppy controller. In case of the Compaq Multi I/O board, the driver for bit 7 of port 0x3F7 is U7. They separated Bit 7 from the other bits, because there is a provision to disable the hard drive interface part, but the floppy interface (which you can't disable) still needs to drive bit 7. This special handling of port 3F7 is what seperates a proper IDE interface card from a cheap one. I have no idea whether port 3F7 is actually needed though, or you can get away with not responding to 3F7 at all (which the cheap IDE CD-ROM interfaces most likely do). This 3F7 thing is the most complicated thing on the board. The bidirectional buffer U34 is not used for the IDE interface, as well as U19 (pins 11/12/13) and U17 (pins 11/12/13). U18 (pin 4/5/6), U18 (11/12/13) and U35 (11/12/13) are only needed to suppress driver enable signals in case the IDE port is disabled (by opening SW1, so WINEN* gets high). They can be replaced by short between U18 (pin 4-&amp;gt;6), U18 (pin 13-&amp;gt;11) and U34 (pin 5-&amp;gt;6).&lt;/p&gt;&#xA;&lt;p&gt;U26 is used to decode the 3Fx (or 37x) area, whereas U21 is used the 1Fx (or 17x) area. Both are needed for IDE. U25 decodes the serial port address range and U33 decodes the parallel port address range - they are unrelated for the IDE function of this card. U20 is a line driver for IDE control signals.&lt;/p&gt;&#xA;&lt;p&gt;U25/U33 are used to buffer the ISA address lines, because the discrete decoding logic puts a considerable load on them. U32 (as inverting buffer) is used to provide the inverted form of some address lines for decoding 0 bits inside address ranges while decoding them, with a AND/NAND gate. U8 (8/9) and U2 (3/4) are open-collector inverters with pull-ups. I don't see any reason for that construction (compared to just using a totem-pole inverter), and I guess they used this construction, because they still had some spare open-collector inverters in their hex inverter chips.&lt;/p&gt;&#xA;&lt;p&gt;U35 (1/2/3) is simple - it enables the high-byte driver on 16-bit-accesses (IO16CS* is asserted) to the 1Fx/17x range (CS1Fx* is asserted, too). U18 (1/2/3), U18 (8/9/10) and U2 (3/4) are used to detect the pattern: CS3Fx* asserted AND A0 low AND A1 high. This is intended to catch accesses to 3F6, but as A2 is not decoded, also catches accesses to 3F2 (which seems to do no harm). The output of said gates is merged with CS1Fx* by U17(8/9/10) to provide the enable signal for the low ISA/IDE data buffer.&lt;/p&gt;&#xA;&lt;p&gt;U19 (8/9/10) performs a very important function one might miss on ones own ISA/IDE interface design: It masks A4 (which is set in all valid IDE addresses) using the inverted AEN signal from the ISA bus, to make sure that valid IDE ports are only recognized when AEN is high. This is needed to avoid false decodes during ISA DMA cycles. Of course, it is not significant &lt;em&gt;how&lt;/em&gt; false decodes while AEN low are avoided, munging A4 is just an implementation detail, but it is significant that AEN low causes the I/O address decoders to not respond, no matter what the address lines are.&lt;/p&gt;&#xA;&lt;p&gt;This closes the discussion of page 2. The gates U19 (1/2/3) and U19 (4/5/6) as well as U9 (8/9) and U9 (5/6) are used for floppy controller DMA interfacing and of no concern for the IDE implementation.&lt;/p&gt;&#xA;&lt;p&gt;The LSI chip is needed to provide the 3x7RD* signal (active low, asserted on I/O reads in the 37x/3Fx area when all of A0,A1 and A2 are high). This is actually nothing more than a 3-input OR function over CS3Fx*, BIOR* (buffered IOR* from the ISA bus) and the result of a 3-input NAND over A0, A1 and A2. It can be substituted as such in a custom design.&lt;/p&gt;&#xA;&lt;h1&gt;Hints for reading the schematic:&lt;/h1&gt;&#xA;&lt;p&gt;The schematic uses AND and OR gates with inversion circles at the inputs and output at some places. An AND gate with inversion at the input and ouptut just is an OR gate. The symbol is meant to indicate that the signals handled by the gate are acutally active low (both the input and the output), so OR gate actually generates an &amp;quot;active-low and&amp;quot; of the two active-low inputs. It gets a moment to get used to it, but for me it starts making sense.&lt;/p&gt;&#xA;&lt;p&gt;Furthermore it is helpful to know that the quadruple 2-input 74xx logic chips all have their four gates arranged like input 1/2 -&amp;gt; output 3; input 4/5 -&amp;gt; output 6, input 9/10 -&amp;gt; output 8 and input 12/13 -&amp;gt; output 11. While not every pin number in small print is readable, limiting the possiblities to these 4 sets always gets a unique valid interpretation.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2020-07-16T22:36:58.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15653" PostTypeId="2" ParentId="15640" CreationDate="2020-07-17T00:06:45.197" Score="2" Body="&lt;p&gt;If I understand the Pan Docs correctly, they are trying to tell you that when you have one of banks 1 to 1Fh mapped into 4000-7FFF, you get bank 0 at 0000-3FFF. If you have one of banks 21 to 3F mapped into 4000-7FFF, you get bank 20 at 0000-3FFF. You get bank 40 at 0000-3FFF if you have one of banks 41 to 5F mapped into 0000-3FFF and finally you get bank 60 mapped into 0000-3FFF if you choose one of banks 61 to 7F into 4000-7FFF.&lt;/p&gt;&#xA;&lt;p&gt;You can also view it from a different angle: Mode 1 is intended for 32KB RAM cards. The use for &amp;quot;big ROM cartridges&amp;quot; is a kind of abuse of the MBC1. So if a creative cartridge manufacturer connects the output bits of the MBC1 which are intended to be wired to the top bits address of the static RAM chip (and carry the contents of the secondary mapping register all the time) to the top address bits of the ROM instead, you effectively get 4 sets of 32 banks each, with the first bank visible at 0000-3FFF and the other 31 banks can be selected for 4000-7FFF.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="10479" LastEditDate="2020-07-17T09:02:47.437" LastActivityDate="2020-07-17T09:02:47.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15654" PostTypeId="2" ParentId="15641" CreationDate="2020-07-17T01:21:24.943" Score="3" Body="&lt;p&gt;Not exactly a parallel interface, but the TRS-80 (models 1, 3 and 4) had a &lt;em&gt;memory mapped&lt;/em&gt; keyboard! 8 address lines were matrixed to 8 data lines by the keys (and some diodes). The keyboard scan routine would start by looking at 0x38FF and if it got back 0x00 then no keys were pressed. If non-zero it would check 0x3801, 0x3802, 0x3804, up to 0x3880 and check each result to figure out what keys were pressed. It did 2-key rollover and debounce in software. My favorite code used PEEK(14400) to check state of the 4 arrow keys, space, and enter (perfect for flying spaceships or what have you). 42 years later that address is still something I remember.&lt;/p&gt;&#xA;&lt;p&gt;[edit] I just saw that &amp;quot;direct scanned&amp;quot; was covered above. Since I expanded slightly on how they work, I'll leave this here.&lt;/p&gt;&#xA;" OwnerUserId="4199" LastActivityDate="2020-07-17T01:21:24.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15655" PostTypeId="2" ParentId="15637" CreationDate="2020-07-17T02:00:16.673" Score="2" Body="&lt;p&gt;Based upon a quick look at the &lt;a href=&quot;https://segaretro.org/images/a/af/Sega_Service_Manual_-_Genesis_II_-_Mega_Drive_II_%28PAL%29_-_001_-_June_1993.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PAL Megadrive II schematics&lt;/a&gt;, it appears as if the the power input is first routed through a common mode choke(for which polarity does not matter) before it goes onto the power switch.  After the power switch, it is routed through a reverse polarity protection diode before it is fed to the input of a LM7805 regulator to provide the system's Vcc bus.&lt;/p&gt;&#xA;&lt;p&gt;The schematic also shows a branch of the 9 Volt source(before the reverse polarity protection diode) that only appears to be connected to a small ceramic bypass capacitor, for which polarity also doesn't matter.&lt;/p&gt;&#xA;&lt;p&gt;While it's not clear to me what the 9 Volt branch might be used for other than possible availability on an expansion connector(which I did not see) for an external peripheral, it does appear as if the Megadrive II's internal gaming circuitry is protected by a diode on the power input, so at least the internal circuitry should be safe from a power adapter of the wrong polarity.&lt;/p&gt;&#xA;" OwnerUserId="11734" LastEditorUserId="11734" LastEditDate="2020-07-17T02:40:14.653" LastActivityDate="2020-07-17T02:40:14.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15656" PostTypeId="2" ParentId="15637" CreationDate="2020-07-17T02:04:59.460" Score="7" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If I connect it other way would any components blow?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Let's have a look at the circuitry&lt;/h2&gt;&#xA;&lt;p&gt;All following schematics are taken from the &lt;a href=&quot;https://segaretro.org/images/a/af/Sega_Service_Manual_-_Genesis_II_-_Mega_Drive_II_%28PAL%29_-_001_-_June_1993.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1993 manual&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To start with, the wall wart is delivering 9..10V (depending on region *1) DC.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ebBnc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ebBnc.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Page 7 lower right corner, B6/B7)&lt;/p&gt;&#xA;&lt;p&gt;Polarity is not mentioned at all - not here nor in any other overview or part list. Only the drawing of connector CN7 in the power circuit (D1) seams to indicate plus at the center pin and ground outside:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/g7I3w.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/g7I3w.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Page 11 middle left, C/D-1/2/3)&lt;/p&gt;&#xA;&lt;p&gt;The circuit itself isn't surprising. There is a diode protecting against reverse polarity, so no &lt;strong&gt;need to be afraid of frying&lt;/strong&gt; the circuit. That is unless it receives high voltage. The Diode is a 1SR35-100A, good for, as the name suggests, 100 Volt (*2). So short cutting it at mains level &lt;em&gt;will&lt;/em&gt; fry the circuitry. So lets better stay below.&lt;/p&gt;&#xA;&lt;p&gt;Having such a diode in line with the regulator, working as half wave rectifier, would allow a feed with AC as well. But I'm not sure if it's sufficient, to me it seems to assume a &lt;a href=&quot;https://en.wikipedia.org/wiki/Rectifier#Full-wave_rectification&quot; rel=&quot;nofollow noreferrer&quot;&gt;full wave rectifier&lt;/a&gt;, as the 0.022µF capacitor is comparatively small. But it might work.&lt;/p&gt;&#xA;&lt;p&gt;The 7805 regulator delivers 5 Volt at output. It is split into three separate routed branches (not shown on the insert, check p.11 C3):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;VCC for all digital electronics&lt;/li&gt;&#xA;&lt;li&gt;AVCC for audio components&lt;/li&gt;&#xA;&lt;li&gt;VVCC for video components&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The later two only used by the Video Display Processor (&lt;a href=&quot;https://segaretro.org/Sega_Mega_Drive/VDP_general_usage&quot; rel=&quot;nofollow noreferrer&quot;&gt;VDP&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;To see what the minimum voltage for feeding is we need to look at the 7805. It seams to be a standard type, not an LDO (&lt;a href=&quot;https://en.wikipedia.org/wiki/Low-dropout_regulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;Low Dropout&lt;/a&gt;), so a 2 Volt drop is to be assumed. The diode has a drop of 1.1V. Operating in line with the 7805 we get a minimum input voltage of 8.1 Volt (5 + 2 + 1.1).&lt;/p&gt;&#xA;&lt;p&gt;Interesting is a tap &lt;em&gt;before&lt;/em&gt; the diode named +9V (*3). It is not used anywhere within the MegaDrive, but delivered to the peripheral connector CN2 (see p.9 C/D-3/4) aka expansion port. Tapping it before the diode allows expansions to draw more than the 1A the main system is limited to by diode and regulator. Of course this requires as well a larger PS.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom Line:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It got a protection diode&lt;/li&gt;&#xA;&lt;li&gt;Reverse polarity will not kill the MegaDrive&lt;/li&gt;&#xA;&lt;li&gt;Plus seams to be in the middle, ground on the outside&lt;/li&gt;&#xA;&lt;li&gt;PS should use a full wave rectifier (always better)&lt;/li&gt;&#xA;&lt;li&gt;It needs at least 8.1 Volt&lt;/li&gt;&#xA;&lt;li&gt;It shouldn't give more than 10 Volt&lt;/li&gt;&#xA;&lt;li&gt;It should deliver at least 0.85 Ampere, better might be 1A&lt;/li&gt;&#xA;&lt;li&gt;Anything above 100 Volt may fry the system&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Strangely enough the 240V UK version is supposed to give 9V while the continental 230V version is rated at 10V. See p.38&lt;/p&gt;&#xA;&lt;p&gt;*2 - Yes, I know, there is more to it, just details don't matter here.&lt;/p&gt;&#xA;&lt;p&gt;*3 - The naming is, as so oft only a hint, as this can carry 10V as well, depending on the PS.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-17T22:11:22.683" LastActivityDate="2020-07-17T22:11:22.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15657" PostTypeId="2" ParentId="277" CreationDate="2020-07-17T08:03:19.260" Score="2" Body="&lt;p&gt;(This is years after you solved it but just for completion...)&lt;/p&gt;&#xA;&lt;p&gt;An inelegant method that doesn't involve taking a pot' apart is to spray switch cleaner (e.g. Servisol) into the pot's insides then turn the pot's knob back and forward to the limits a lot, say 10 times.&lt;/p&gt;&#xA;&lt;p&gt;Do that a few times and they're much better, often good as new.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastActivityDate="2020-07-17T08:03:19.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15658" PostTypeId="1" CreationDate="2020-07-17T11:08:38.180" Score="2" ViewCount="212" Body="&lt;p&gt;I've picked up this CDTV some time ago, but didn't have DiagROM to test it properly. It is running perfectly fine, all features. My diag chip arrived this morning, and when I get to Extended Memory Test it completes with no bit/byte errors, but throws an IRQ error like this. EDIT: there are some errors?&lt;/p&gt;&#xA;&lt;p&gt;Is it due to fact that CDTV has extended ROM, and access to CD at boot or there is something wrong with the machine? How to get started to decoding these error codes, if I want to learn?&lt;/p&gt;&#xA;&lt;p&gt;I wanted to bring something up, as I just tried to fit in PiSTorm and had random address errors on buptest tool (it writes garbage to chip ram and reads it back). I replaced PiStorm with stock CPU and ran DiagROM again. What does it mean and what are these artifacts on the screen towards end of the test?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/D58ws_-XFTI&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/D58ws_-XFTI&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2021-05-25T20:09:40.917" LastActivityDate="2021-05-25T20:09:40.917" Title="CDTV Diagrom 1.2 Extended Memory Test AddressError Detected" Tags="&lt;memory&gt;&lt;amiga-cdtv&gt;&lt;hardware-testing&gt;&lt;diagnostics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15659" PostTypeId="1" CreationDate="2020-07-17T12:16:19.237" Score="6" ViewCount="552" Body="&lt;p&gt;Recently I've also looked inside microdrive drives of Sinclair QL and inside microdrive cartridges for it.&lt;/p&gt;&#xA;&lt;p&gt;The tape looked like a compact cassette tape cut longitudinally to a half width (which seems to be true -- microdrive tape has width of 1.9mm, while compact cassette tape is 3.85mm wide). The head also looks like a common head in compact cassette players or recorders.&lt;/p&gt;&#xA;&lt;p&gt;The schematics reveals that the single microdrive head has also erase coil, while the compact cassette recorders usually use separate erase head.&lt;/p&gt;&#xA;&lt;p&gt;The question, therefore: Were the compact cassette technologies really used in microdrives, modified or not? If yes, what modifications did Sinclair implement to it?&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="3316" LastEditDate="2020-07-20T11:17:23.530" LastActivityDate="2020-07-20T11:17:23.530" Title="Sinclair's microdrive -- was it based on compact cassette technologies?" Tags="&lt;sinclair&gt;&lt;sinclair-ql&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15660" PostTypeId="2" ParentId="15659" CreationDate="2020-07-17T13:07:21.077" Score="4" Body="&lt;p&gt;&lt;em&gt;(No definitive answer, just some thoughts)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Tape size isn't a major indicator as custom size manufacturing isn't a big deal. Already the &lt;a href=&quot;https://en.wikipedia.org/wiki/Exatron_Stringy_Floppy&quot; rel=&quot;nofollow noreferrer&quot;&gt;Exaton Stringy Floppy&lt;/a&gt; of 1978, which can be seen as predecessor, did use a 1.6 mm tape. Similar BSR's wafer drive, used in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotronics_Wafadrive&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rotronics Wafadrive&lt;/a&gt; or the &lt;a href=&quot;https://archive.org/details/QuickDataDriveModel8500C64&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quick Data Drive&lt;/a&gt; for Commodore computers (*1), which used, IIRC, as a 1.8 mm tape&lt;/p&gt;&#xA;&lt;p&gt;I wouldn't wonder if Sinclair simply had ordered it's own tape type, as the cassettes had to be manufactured special to type anyway, but used an existing head. So I guess the best lead would be to follow the head used to see what it was originally intended for.&lt;/p&gt;&#xA;&lt;p&gt;Such integrated heads (erase and write) were common for voice recorders were the lower quality could be tolerated. These devices often used mini/&lt;a href=&quot;https://en.wikipedia.org/wiki/Microcassette&quot; rel=&quot;nofollow noreferrer&quot;&gt;micro cassettes&lt;/a&gt; (standard tape width). An attempt to use a smaller tape was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Picocassette&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dictaphone Picocassette&lt;/a&gt; which came about the same time as Sinclair's microdrives and uses, IIRC, a 1.9 mm wide tape. Sony tried it again (way later, ca. 1990) with the NTC using a 2.5 mm and digital recording.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - A quite advanced beast as it connected to the cassette port and booted its Kernal extension like loading from cassette. Seriously thoughtful made, worth to spend some time to understand its details.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="5199" LastEditDate="2020-07-17T20:17:57.940" LastActivityDate="2020-07-17T20:17:57.940" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15661" PostTypeId="2" ParentId="15645" CreationDate="2020-07-17T13:13:52.160" Score="4" Body="&lt;p&gt;Welcome to the site (I am also very new). If the reason for your question was as you said &amp;quot;looking for a simple processor that I could just buy and plug into a breadboard or maybe hand-solder if necessary, and just mess around with &lt;strong&gt;as I learn about electronics and computer hardware&lt;/strong&gt;.&amp;quot;,what was wrong with 6502 / why do you need a 32-bit one?&lt;/p&gt;&#xA;&lt;p&gt;If you preferred Sinclairs to Commodores, I think you can get the same with e.g. a Z80A. At least mine worked OK without soldering just on a &amp;quot;push-wire-in-breadboard&amp;quot; (with all the data + address lines) Can't remember how high I set the clock, maybe around 400 kHz.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.amazon.com/s?k=z80a&amp;amp;ref=nb_sb_noss_2&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/s?k=z80a&amp;amp;ref=nb_sb_noss_2&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18422" LastActivityDate="2020-07-17T13:13:52.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15662" PostTypeId="2" ParentId="15659" CreationDate="2020-07-17T13:28:38.423" Score="9" Body="&lt;p&gt;The tape was actually the same quality as used for VCR tape - according to the QL Service manual &amp;quot;high-quality video tape&amp;quot; was used.&lt;/p&gt;&#xA;&lt;p&gt;Other than the rotating heads in VCRs, however, Sinclair Microdrives use standard, two-track heads, apparently from some dictaphones.&lt;/p&gt;&#xA;&lt;p&gt;It's unlikely they deeply looked into compact cassette technology, given all these differences, like Continuous loop tape, which first showed up in the Exatron Stringy Floppy and a tape using different coating and tape width.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2020-07-17T13:28:38.423" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15663" PostTypeId="1" CreationDate="2020-07-17T13:58:28.100" Score="2" ViewCount="245" Body="&lt;p&gt;I am working on designing a 8 bit computer and I was considering adding support for a Atari 2600 controller. I know it uses a D-Sub9 connector, but is there anything special about it? What I mean is can I go on Digikey and just buy any male D-Sub9 connector and it will be compatible with the Atari 2600 controller?&lt;/p&gt;&#xA;" OwnerUserId="18704" LastEditorUserId="588" LastEditDate="2020-07-17T19:49:46.557" LastActivityDate="2020-07-19T14:16:40.640" Title="What connector for Atari 2600 Controller?" Tags="&lt;atari&gt;&lt;integrated-circuits&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15664" PostTypeId="2" ParentId="15663" CreationDate="2020-07-17T14:10:11.843" Score="1" Body="&lt;p&gt;Atari Controllers don't have screws, so if you can, chose a male connector without screws to match.&lt;/p&gt;&#xA;" OwnerUserId="18832" LastActivityDate="2020-07-17T14:10:11.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15665" PostTypeId="2" ParentId="15663" CreationDate="2020-07-17T14:18:34.703" Score="0" Body="&lt;p&gt;It is a standard DE-9 connector, with the exception that there is a plastic shell instead of a metal shell.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-07-17T14:18:34.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15666" PostTypeId="2" ParentId="15663" CreationDate="2020-07-17T14:30:43.327" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I know it uses a D-Sub9 connector,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;DE-9 to be exact.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;D for D-Subminiature&lt;/li&gt;&#xA;&lt;li&gt;E for the shell size of ~19.5 by ~11 mm&lt;/li&gt;&#xA;&lt;li&gt;9 for 9 pins arranged in two rows as 5+4&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but is there anything special about it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. Despite being of plastic on the controller they are as standard compatible as it gets.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What I mean is can I go on Digikey and just buy any male D-Sub9 connector and it will be compatible with the Atari 2600 controller?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. At least for the plug side it doesn't matter if it comes with or without nuts for fixing it, as they end below the shell line, so the area a plug may need is free. Personally I always prefer ones with nuts, as they offer an option to fix the controller if possible.&lt;/p&gt;&#xA;&lt;p&gt;While selection of the plug side is painless, you need to select the right connection side for your project straight or 90 degree thru hole or the same for SMD. Some may have additional pins for better fixation on the PCB, so additional holes/soldering areas are needed.&lt;/p&gt;&#xA;&lt;p&gt;Don't forget to ground the shell - just in case.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6802" LastEditDate="2020-07-17T15:41:18.947" LastActivityDate="2020-07-17T15:41:18.947" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15667" PostTypeId="2" ParentId="15645" CreationDate="2020-07-17T16:22:25.323" Score="4" Body="&lt;p&gt;Some microcontrollers have I/O pins that can be configured to operate as a memory bus for part of their address space, with configurable wait states.  Most of the applications which would need more memory than could fit on a chip would either also demand more speed than could be achieved with all code having to be conveyed on an external bus, or could get by with a serial memory interface, so there isn't going to be much market for a CPU which operates purely off an external bus and doesn't have a fair amount of on-board storage as well (in the form of cache if nothing else).  Modern memory systems can process sequences of related accesses, such as those used to fill a cache, much faster than they can process random accesses, so it makes sense to have a memory interface that is based upon that concept, rather than one that regards every memory access as independent.&lt;/p&gt;&#xA;&lt;p&gt;I've not used any external bus features on any controllers lately, but the ST reference manual RM0038 for the STM32L100xx and STM32L151xx series describes a bus interface that will treat an external 8 or 16-bit bus as a region of the device address space which could be operated slowly enough to support breadboard use if one had a suitable carrier board.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-07-17T16:22:25.323" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15668" PostTypeId="2" ParentId="15645" CreationDate="2020-07-17T21:07:34.890" Score="2" Body="&lt;p&gt;High-end processors do still expose their busses- but you typically need special support chips to do anything useful with them.&lt;/p&gt;&#xA;&lt;p&gt;In the past I was involved with an (AMD) '386 design, but it also had to have an external bus exchange chip to handle all possible combinations of 32/16/8-bit accesses.&lt;/p&gt;&#xA;&lt;p&gt;These days, if you can't find the kind of chip you want, build your own. The link below is for RISCV, and implements the CPU on an FPGA with external RAM and at least partial support for non-aligned access.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yLs_NRwu1Y4&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=yLs_NRwu1Y4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Otherwise, there's been at least one project (mentioned on Hackaday, link below) which implemented a low-end ARM on an AVR chip using an external SIMM for storage... it was apparently able to boot Linux (s-l-o-w-l-y :-)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://dmitry.gr/index.php?r=05.Projects&amp;amp;proj=07.%20Linux%20on%208bit&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://dmitry.gr/index.php?r=05.Projects&amp;amp;proj=07.%20Linux%20on%208bit&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18835" LastEditorUserId="18835" LastEditDate="2020-07-18T08:56:10.697" LastActivityDate="2020-07-18T08:56:10.697" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15669" PostTypeId="2" ParentId="15641" CreationDate="2020-07-18T01:37:50.260" Score="2" Body="&lt;p&gt;My first computer was a Big board by Fregusion. It ran CP/M and had a parallel keyboard as one of three console options (The others being a rs232 keyboard or a rs232 console). Since it was a kit It did not come with a keyboard (or power supply, crt, floppy drives, etc.) but expected ascii (or eight bit, one keyboard had a binary key which was wired to a 8x dip switch whet could send any value) and shift and control were handled by the keyboard. no key rollover was possible. If memory serves it was eight data lines plus strobe, but I haven't looked at it's schematics since the 90s. The main advantage of this is that the host required no processing for the keyboard beyond a port read.&lt;/p&gt;&#xA;" OwnerUserId="6516" LastActivityDate="2020-07-18T01:37:50.260" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15670" PostTypeId="1" CreationDate="2020-07-18T03:50:05.273" Score="3" ViewCount="74" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/MicroBee&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microbee&lt;/a&gt; was an early '80s Z80 microcomputer from Australia that was successful mostly in education.&lt;/p&gt;&#xA;&lt;p&gt;Looking at some disk image files I've downloaded I can see the disk layout seems to be very similar the Amstrad CPC and Sinclair ZX Spectrum +3 derivatives of the CP/M disk layout. In fact the same DSK disk image format is used.&lt;/p&gt;&#xA;&lt;p&gt;I can see these disks have a Z80 boot sector in the first sector. But I'd like to know where in RAM this code is loaded and executed.&lt;/p&gt;&#xA;&lt;p&gt;The boot sectors I've looked at refer to a few addresses in the low 0xE000 range, but they don't align with instructions in the boot code, assuming the sector is loaded at a 16k boundary, which might be a false assumption. Otherwise those could be ROM addresses &lt;strike&gt;but so far I can't find any of them referenced on the Internet.&lt;/strike&gt; (Yes the boot ROM does reside at 0xE000 I can now confirm.)&lt;/p&gt;&#xA;&lt;p&gt;Info on the technical workings of these machines is scant on the internet and I can't get any of the emulators to work, or at least not with disk support.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Does somebody know where the Microbee loads the boot sector from disk?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-07-18T06:53:39.260" LastActivityDate="2020-07-18T06:53:39.260" Title="At which RAM address is the Microbee disk boot sector loaded and executed?" Tags="&lt;floppy-disk&gt;&lt;boot&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15671" PostTypeId="2" ParentId="15658" CreationDate="2020-07-18T07:05:18.753" Score="3" Body="&lt;p&gt;In the DiagROM &amp;quot;AddressError Detected&amp;quot; is displayed when the CPU enters exception vector #2 at address $0000000C. This occurs if a word or longword access is attempted at an odd address, which is illegal on the 68000 (but not 68020 and above).&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately the debug data doesn't include the PC or stack contents, so I can't tell what code caused this exception. However in the register dump we see that A0 contains an odd address $00F8E5A5. This points just past the end of the message &amp;quot;Checking full Chipmemarea until 2MB or Shadow-Memory is detected&amp;quot; in the ROM, presumably getting there after printing that message.&lt;/p&gt;&#xA;&lt;p&gt;No other address register contains an odd value and there are no indexed instructions in the code, so it seems the program incorrectly tried to use A0 to read or write a word or longword value at the odd address.&lt;/p&gt;&#xA;&lt;p&gt;You say that the memory test completes with no bit/byte errors, so it must be 'crashing' after getting to the end of the test. I have examined the code and can't see why it is doing this. I also compared the source code with the latest version (1.21) but could not see any relevant differences.&lt;/p&gt;&#xA;&lt;p&gt;Since the memory test is passing and your CDTV works fine I wouldn't worry about the DiagROM error. It's probably just a minor bug being triggered by some difference between CDTV and other Amigas (as CDTV isn't mentioned in the source code or documentation I'm guessing the author of DiagROM doesn't have one to test it on).&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-07-18T07:05:18.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15672" PostTypeId="2" ParentId="15641" CreationDate="2020-07-18T08:31:19.587" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1130&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 1130&lt;/a&gt; used a keyboard mechanism from a keypunch. It constructed a 12 bit code for each key press &lt;a href=&quot;http://www.righto.com/2017/12/repairing-1960s-era-ibm-keypunch.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;mechanically&lt;/a&gt;, in parallel. The code was the sparse character code used on punched cards. The keyboard driver translated this to 8-bit &lt;a href=&quot;https://en.wikipedia.org/wiki/EBCDIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;EBCDIC&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When computers were built from discrete transistors (or even vacuum tubes), serial interfaces were rare unless the keyboard was a teletype machine. Serial-&amp;gt;parallel conversion required hundreds of expensive transistors.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2020-07-18T08:31:19.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15674" PostTypeId="2" ParentId="4424" CreationDate="2020-07-18T18:45:34.197" Score="9" Body="&lt;p&gt;IIRC the official way to enable this cheat was to wiggle the joystick left and right, which moved the creatures arms. You had to do this at an extremely rapid rate and at such time the cheat would activate.&lt;/p&gt;&#xA;&lt;p&gt;We had a disassembled joystick and discovered that if you just held down the left and right microswitches at the same time the cheat would activate instantly. I suspect the wiggle detection code was written in such a way that this was interpreted as the required fast wiggle.&lt;/p&gt;&#xA;&lt;p&gt;Coming back to the original question and as alluded to in one of the other answers, it's possible that the wet finger shorted pins on the port in a similar way to having both left and right directions activated, and thus enabled the cheat.&lt;/p&gt;&#xA;" OwnerUserId="18839" LastActivityDate="2020-07-18T18:45:34.197" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15675" PostTypeId="2" ParentId="15641" CreationDate="2020-07-18T20:23:33.653" Score="4" Body="&lt;p&gt;The LINC (&lt;strong&gt;L&lt;/strong&gt;aboratory &lt;strong&gt;In&lt;/strong&gt;strument &lt;strong&gt;C&lt;/strong&gt;omputer), the first computer I programmed in 1965, had a one-key rollover. When a key was pressed on its Soroban Engineering keyboard, a solenoid locked that key down and all the other keys up, sending a signal to the computer. Whatever computer program was running could then take its time (sometimes a sizable fraction of a second) to get around to polling the keyboard using the KBD instruction. The 6-bit keycode would then be read (yes, in parallel) by the computer and the keyboard lock disabled by that instruction. This scheme, while not supporting touch typing, at least ensured that keystrokes were read without any possibility of error.&lt;/p&gt;&#xA;&lt;p&gt;It didn't take as many keystrokes to write programs for the LINC, since program locations were encoded as a letter and numeric digit combination (giving 260 possible program labels for each program), and most instructions were three or five characters long.&lt;/p&gt;&#xA;&lt;p&gt;If no program was running (the LINC could be in the HALTed state), pressing a key would simply lock the key down until you released it manually by pressing a reset button in back of the keyboard.&lt;/p&gt;&#xA;&lt;p&gt;Later designs switched to the Teletype KSR 35 and 37 floor keyboard console models which, while far more complex mechanically, at least had no keyboard locking mechanism. They may have included serial to parallel conversion, as they contained a motor that scanned the keys to generate the keycode.&lt;/p&gt;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://en.wikipedia.org/wiki/LINC#Keyboard&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/LINC#Keyboard&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18840" LastActivityDate="2020-07-18T20:23:33.653" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15676" PostTypeId="2" ParentId="15663" CreationDate="2020-07-19T14:16:40.640" Score="1" Body="&lt;p&gt;The pin-compatible connector that matches the &lt;a href=&quot;https://atariage.com/forums/topic/289468-atari-2600-controller-port-replacement-new-source/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atari 2600&lt;/a&gt; PCB is TE Connectivity's &lt;a href=&quot;https://www.te.com/usa-en/product-5745001-3.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;AMPLIMITE : 5745001-3 PCB D-Sub Connectors&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-07-19T14:16:40.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15677" PostTypeId="1" AcceptedAnswerId="15679" CreationDate="2020-07-19T15:14:25.627" Score="3" ViewCount="588" Body="&lt;p&gt;The original CHIP-8 interpreter ran on RCA 1802-based kit computers and home computers, most notably on the COSMAC VIP. Some of the CHIP-8 opcodes are complicated and involve many memory round-trips, for example the drawing instructions, or the ones that store register values in RAM. However, many of them are straightforward register-to-register operations which can be implemented fairly uniformly in a bytecode interpreter: just fetch the bytes, switch on the relevant parts of it to jump to the right operation, then do the operation.&lt;/p&gt;&#xA;&lt;p&gt;For this second kind of &amp;quot;regular&amp;quot;, &amp;quot;atomic&amp;quot; operations, I think it should be meaningful to assign a single number to the effective interpretation rate, i.e. on average restricted to these operations, how many CHIP-8 bytecode instructions could the original interpreter run per second on the COSMAC VIP?&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2020-07-20T02:03:28.190" Title="Effective speed of original COSMAC VIP CHIP-8 interpreter" Tags="&lt;emulation&gt;&lt;chip-8&gt;&lt;rca-1802&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15678" PostTypeId="2" ParentId="15677" CreationDate="2020-07-19T16:43:47.690" Score="6" Body="&lt;p&gt;For Chip-8 code that draws anything, the limiting factor will be the wait-for-vblank that is built into all of the draw operations, which will limit speed to 60 draw-sprite operations per second regardless of anything else that's going on.  I don't know how much Chip-8 code wouldn't benefit from being run &amp;quot;as fast as possible&amp;quot; outside of the operations that are bound by frame rate.  The language would could have accommodated much better games if it had separated out &amp;quot;wait for vblank&amp;quot; and &amp;quot;draw sprite&amp;quot; actions, so as to draw more than one sprite per frame, but it is what it is, and its the fact that every draw operation takes one frame should simplify emulation timing.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-07-19T16:43:47.690" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15679" PostTypeId="2" ParentId="15677" CreationDate="2020-07-19T22:08:54.000" Score="3" Body="&lt;p&gt;This is the best reference I know of concerning timing in the CHIP-8 interpreter for COSMAC VIP: &lt;a href=&quot;https://jackson-s.me/2019/07/13/Chip-8-Instruction-Scheduling-and-Frequency.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chip 8 Instruction Scheduling and Frequency&#xA;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;To understand the reasons for the timings here, you'll need to look at a disassembly of the interpreter. Sadly, the website mentioned in the link above (Laurence Scotford's blog) is down, but some of the pages (but not all) are available at the &lt;a href=&quot;https://web.archive.org/web/20180216224707/http://laurencescotford.co.uk/?p=242&quot; rel=&quot;nofollow noreferrer&quot;&gt;Internet Archive's WayBackMachine&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;One reason is of course that the CHIP-8 registers aren't really registers, but just memory locations. So each time the interpreter looks up a register, it needs to add the register number as an offset to the memory location of register V0. In addition, instructions in the &lt;code&gt;$8XYN&lt;/code&gt; range are decoded and dispatched to the 1802 CPU's ALU, which is why they have uniform timing. Perhaps those would make for an OK baseline?&lt;/p&gt;&#xA;" OwnerUserId="15661" LastActivityDate="2020-07-19T22:08:54.000" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15680" PostTypeId="2" ParentId="15677" CreationDate="2020-07-20T02:03:28.190" Score="2" Body="&lt;p&gt;From what I remember when I disassembled the ROM of my &lt;a href=&quot;https://www.classic-computers.org.nz/forums/viewtopic.php?f=4&amp;amp;t=987&quot; rel=&quot;nofollow noreferrer&quot;&gt;HUG1802&lt;/a&gt; back in 1981, the Chip-8 interpreter is actually quite efficient - which it needs to be because the CPU is very slow and the display system makes it even slower.&lt;/p&gt;&#xA;&lt;p&gt;The CDP1802 takes 8 clock cycles per CPU cycle, and most instructions take 2 cycles (a few take 3). Although the CPU can be clocked as high as 3.2 MHz on 5V, the &lt;a href=&quot;http://www.cosmacelf.com/publications/data-sheets/cdp1861.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;CDP1861&lt;/a&gt; video display controller requires it run at 1.76 MHz. At this frequency it is roughly equivalent to a 6502 running at 200 kHz. As if that wasn't bad enough, the CDP1861 imposes severe restrictions on what instructions can be executed during video line display, tying the CPU up for ~50% of the video frame time.&lt;/p&gt;&#xA;&lt;p&gt;The most accurate way to time the Chip-8 instructions would be to run them on an actual machine, but that might not be practicable. You could test the timing in an emulator, but if it is not cycle accurate (including video display) the results may not be very useful.&lt;/p&gt;&#xA;&lt;p&gt;Another way would be to disassemble the ROM and count instructions. This should be very accurate if done right, but time consuming. I found a source code listing for another implementation of Chip-8 on the 1802 &lt;a href=&quot;http://www.sunrise-ev.com/photos/1802/vip2k-chip8.asm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. I don't know how close this is to the timing of the original, but it does include the interrupt and display DMA code which you would need to calculate the average processing time with video display on.&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-07-20T02:03:28.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15681" PostTypeId="1" CreationDate="2020-07-20T03:15:09.443" Score="13" ViewCount="2807" Body="&lt;p&gt;Were there any home computers before 1985, on which you could create a loop (finite or infinite) in &lt;a href=&quot;https://en.wikipedia.org/wiki/Direct_mode&quot; rel=&quot;nofollow noreferrer&quot;&gt;direct-mode&lt;/a&gt;?&lt;/p&gt;&#xA;&lt;p&gt;And if it was possible on some machines, what may it have been useful for?&#xA;For example, some sort of program loader from tape or disk.&lt;/p&gt;&#xA;&lt;p&gt;For example, by typing&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    PRINT &amp;quot;TEXT&amp;quot; : RUN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    PRINT &amp;quot;TEXT&amp;quot; : GOTO 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;so that it would loop the printing of &amp;quot;TEXT&amp;quot;, just as an example.&lt;/p&gt;&#xA;&lt;p&gt;EDIT - Since I am completely blocked ( due to some unknown problem ) from commenting and now also from posting any answers, I just want to add that it seems that you can use a pre-user-defined function in direct-mode, by first defining the function in a program using line numbers ( e.g. 10 DEF FNADD(X,Y)=X+y ) and then using it in direct-mode, so then trying to do a recursion trick like FNADD(FNADD(X,Y),Y), to try and cause an infinite loop using recursion, would be interesting, and I wonder why pre-user-defined functions can be accessed through direct-mode .&lt;/p&gt;&#xA;" OwnerUserId="16462" LastEditorUserId="16462" LastEditDate="2020-07-26T04:25:09.893" LastActivityDate="2020-07-26T16:37:09.207" Title="Could you create a loop in direct-mode with BASIC?" Tags="&lt;basic&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15682" PostTypeId="2" ParentId="15681" CreationDate="2020-07-20T05:33:16.097" Score="21" Body="&lt;p&gt;In any BASIC variant that allows multiple statements on one line, the multiple statements that are required to implement a FOR-NEXT or REPEAT-UNTIL loop can be provided in immediate mode.  Many 8-bit micros of circa 1980 could do this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;REPEAT : PRINT &amp;quot;*&amp;quot;; : UNTIL FALSE&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Or this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;X=1 : FOR Y=0 TO 30 : PRINT &amp;quot;2^&amp;quot;;Y;&amp;quot; = &amp;quot;;X : X=X+X : NEXT Y&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Try these examples in &lt;a href=&quot;https://bbc.godbolt.org/&quot; rel=&quot;noreferrer&quot;&gt;jsBeeb&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;By contrast, any looping technique that relies on &lt;code&gt;GOTO&lt;/code&gt; would not work, because there is no line number associated with the immediate-mode command.  &lt;code&gt;RUN&lt;/code&gt; also would not work, because its function is to start a &lt;em&gt;stored&lt;/em&gt; program, which the immediate-mode command is not.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-07-20T19:26:12.870" LastActivityDate="2020-07-20T19:26:12.870" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15683" PostTypeId="2" ParentId="1474" CreationDate="2020-07-20T09:27:42.697" Score="5" Body="&lt;p&gt;SOLVED!!!&lt;/p&gt;&#xA;&lt;p&gt;After hours and hours of reading forums, installing different drivers and emulators, I managed to get it running on Windows7 64Bits and try it in PlanetSide2... Finally I can fly aircraft!!! :D&lt;/p&gt;&#xA;&lt;p&gt;The solution is to install WinWiner and vJoy. I leave you with an explanatory video. A link to the download is in the description. Greetings&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=DJ3-L5P7c-g&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=DJ3-L5P7c-g&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18843" LastEditorUserId="576" LastEditDate="2020-07-20T09:49:14.413" LastActivityDate="2020-07-20T09:49:14.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15684" PostTypeId="2" ParentId="15681" CreationDate="2020-07-20T12:08:49.547" Score="25" Body="&lt;p&gt;In the Microsoft BASIC variants (Commodore, Atari, Apple, others) you can specify a FOR/NEXT loop with a STEP size of 0, which never increments the loop.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FOR X = 0 TO 1 STEP 0: PRINT &amp;quot;TEXT&amp;quot;: NEXT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;is how you'd write it as a one-liner.&lt;/p&gt;&#xA;&lt;p&gt;Now, as to why it would be useful to do such a thing...&lt;/p&gt;&#xA;" OwnerUserId="599" LastEditorUserId="301" LastEditDate="2020-07-21T17:32:06.780" LastActivityDate="2020-07-21T17:32:06.780" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15685" PostTypeId="1" AcceptedAnswerId="15689" CreationDate="2020-07-20T13:22:32.380" Score="29" ViewCount="7148" Body="&lt;p&gt;From the naming of operating system only i.e Unix = Uniplexed Information and Computing Service vs Multics = Multiplexed Information and Computing Service, I was first having a misconception that the prime difference between Multics and Unix should be - Multics was Multi access to multi users by multi-programming whereas Unix is &lt;em&gt;multi-* replaced by single&lt;/em&gt;. But later on I found that the coining of term Unix was just a &lt;a href=&quot;https://en.wikipedia.org/wiki/Word_play&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;pun&lt;/em&gt;&lt;/a&gt; on Multics. Actually both Multics and Unix can be considered as evolution of the early Time Sharing Systems.&lt;/p&gt;&#xA;&lt;p&gt;I know that Ken Thompson and Dennis Ritchie started to write a simple system as an alternative to Multics in order to make it possible to run the system with lower hardware resources, which then become Unix.&lt;/p&gt;&#xA;&lt;p&gt;I think talking about all differences between Multics and Unix would be too broad question. So, I would like to know &lt;strong&gt;the major significant technical difference between Multics and Unix&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Clarification (considering comments):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By Unix, I mean the orginal Unix of 70s, not modern Unix or BSD&lt;/li&gt;&#xA;&lt;li&gt;Yes, the main difference is simplicity of Unix and I want to know what makes Unix simpler as compared to Multics&lt;/li&gt;&#xA;&lt;li&gt;If differentiating systems is broad, limit the difference between system kernels&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="12384" LastEditorUserId="12384" LastEditDate="2020-07-22T04:09:33.897" LastActivityDate="2020-08-13T17:58:02.030" Title="What are the major technical difference between Multics and Unix?" Tags="&lt;unix&gt;&lt;multics&gt;" AnswerCount="6" CommentCount="14" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15686" PostTypeId="5" CreationDate="2020-07-20T13:25:23.920" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-07-20T13:25:23.920" LastActivityDate="2020-07-20T13:25:23.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15687" PostTypeId="4" CreationDate="2020-07-20T13:25:23.920" Score="0" Body="Questions about operating system kernels which facilitates the interaction between computer hardware and software" OwnerUserId="12384" LastEditorUserId="276" LastEditDate="2020-07-20T17:49:43.407" LastActivityDate="2020-07-20T17:49:43.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15688" PostTypeId="2" ParentId="15681" CreationDate="2020-07-20T16:34:49.607" Score="5" Body="&lt;p&gt;Using BASIC+ on RSTS/E you can do this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Ready&#xA;&#xA;print i%; &amp;quot;Hello!&amp;quot; for i% = 1 to 9&#xA; 1 Hello!&#xA; 2 Hello!&#xA; 3 Hello!&#xA; 4 Hello!&#xA; 5 Hello!&#xA; 6 Hello!&#xA; 7 Hello!&#xA; 8 Hello!&#xA; 9 Hello!&#xA;&#xA;Ready&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This has a variety of uses. A trivial one would be to start a long running program then enter &lt;code&gt;print chr$(7) for i%=1 to 20&lt;/code&gt; into the type ahead buffer. The terminal would then beep 20 times when the long-running program completed.&lt;/p&gt;&#xA;&lt;p&gt;It's also useful for testing code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Ready&#xA;&#xA;old stuff&#xA;&#xA;Ready&#xA;&#xA;listnh&#xA;1000    def fnstuff.happens()&#xA;1010        a.number = rnd&#xA;1020        print &amp;amp;&#xA;         \  print &amp;quot;Working on stuff...&amp;quot;&#xA;1030        fnstuff.happens = a.number&#xA;1040    fnend&#xA;3276    end&#xA;&#xA;Ready&#xA;&#xA;print fnstuff.happens for i = 1 to 3&#xA;&#xA;Working on stuff...&#xA; .204935&#xA;&#xA;Working on stuff...&#xA; .229581&#xA;&#xA;Working on stuff...&#xA; .533074&#xA;&#xA;Ready&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Not strictly speaking a &amp;quot;home computer&amp;quot; unless, like me, you used to run a PDP-11 in your spare room. The above output is copied from a RSTS/E V8.0-06 system running under the SIMH PDP-11 emulator.&lt;/p&gt;&#xA;" OwnerUserId="18846" LastEditorUserId="18846" LastEditDate="2020-07-24T16:35:38.263" LastActivityDate="2020-07-24T16:35:38.263" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15689" PostTypeId="2" ParentId="15685" CreationDate="2020-07-20T19:53:12.670" Score="33" Body="&lt;p&gt;From &lt;a href=&quot;https://multicians.org/features.html&quot; rel=&quot;noreferrer&quot;&gt;this list of Multics features&lt;/a&gt;, almost all are recognizable in modern UNIX-style systems in one form or another.  Looking for distinctions between is two is made difficult due to the longevity of UNIX and the proliferation of its children.&lt;/p&gt;&#xA;&lt;p&gt;For me, the most interesting distinction between Multics and UNIX (and most operating systems to follow) was Multics' concept of &lt;em&gt;&lt;a href=&quot;https://www.multicians.org/multics-vm.html&quot; rel=&quot;noreferrer&quot;&gt;segments&lt;/a&gt;&lt;/em&gt;.  In Multics, all memory belonged to a segment, whether in core or on disk, and segments could be paged in from and out to disk on-demand.  Distinctions between files and RAM are less pronounced than in the UNIX model.  Individual segments could be named and assigned attributes.&lt;/p&gt;&#xA;&lt;p&gt;It's often said that in Multics, it's as if all files are memory-mapped via &lt;code&gt;mmap&lt;/code&gt; rather than accessed via &lt;code&gt;fopen&lt;/code&gt;/&lt;code&gt;fread&lt;/code&gt;/&lt;code&gt;fwrite&lt;/code&gt;/&lt;code&gt;fclose&lt;/code&gt;.  Once a segment was opened or allocated, the program accessed it via memory addressing.  This model worked for code and data, and was the basis for Multics' dynamic linking.&lt;/p&gt;&#xA;&lt;p&gt;From the link above:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A basic motivation behind segmentation is the desire to permit&#xA;information sharing in a more automatic and general manner than&#xA;provided by non-segmented systems. Sharing must be accomplished&#xA;without duplication of information and access to the shared&#xA;information must be controlled not only in secondary memory but also&#xA;in main memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This meant a single permissions model could be employed for sharing code and data, both in memory and on disk.  Segments unified a number of mechanisms that later operating systems would &amp;quot;re-invent&amp;quot; for in-memory vs. on-disk blocks.&lt;/p&gt;&#xA;&lt;p&gt;Whether this is &lt;em&gt;superior&lt;/em&gt; to traditional file primitives (open/read/write/close) is a separate question.  And certainly UNIX came to support memory-mapped files, demand paging, shared memory, and dynamic linking.  But because Multics blurred the differences between files and RAM from the start, and designed for segments from the ground up, segments were not an optional or advanced feature, they were a fundamental storage paradigm.&lt;/p&gt;&#xA;&lt;p&gt;(Confession: I've never written for Multics, so I'm only speaking from sources I've read.)&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="4222" LastEditDate="2020-07-20T23:01:33.223" LastActivityDate="2020-07-20T23:01:33.223" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15691" PostTypeId="1" AcceptedAnswerId="15693" CreationDate="2020-07-21T13:59:40.323" Score="6" ViewCount="168" Body="&lt;p&gt;One of the original Sinclair peripherals for the ZX Spectrum was the &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Interface_2&quot; rel=&quot;noreferrer&quot;&gt;Interface 2&lt;/a&gt; which provided joystick ports and also a slot for ROM cartridges:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xzLDD.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xzLDD.png&quot; alt=&quot;ZX Interface 2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The cartridges did not catch on though and only about 10 titles were ever released.&lt;/p&gt;&#xA;&lt;p&gt;But before it was known that it would be a flop, at least one third party company released a compatible ROM cartridge interface, the Ram Turbo:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XABGu.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XABGu.jpg&quot; alt=&quot;Ram Turbo&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When I was a kid I bought a joystick and cartridge adaptor for my original 48K Speccy by mail order from the UK. I can't remember which brand it was except that it was not the official Sinclair one. Maybe it was the Ram Turbo. But were there others on the market as well? I can't find a definitive list and only some modern retro-era addons are turning up in my Google quest.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2020-07-21T17:09:07.177" Title="Was the Ram Turbo the only 3rd party Interface 2 ROM cartridge interface for the ZX Spectrum or were there others?" Tags="&lt;hardware&gt;&lt;zx-spectrum&gt;&lt;game-cartridge&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15692" PostTypeId="2" ParentId="12618" CreationDate="2020-07-21T16:10:27.573" Score="0" Body="&lt;p&gt;I stumbled across another good source.  When I had my Radio Shack TRS-80 Model I and was in college, I used to subscribe to SoftSide Magazine which published games for Radio Shack, Atari, and Apple computers.  &lt;a href=&quot;https://archive.org/details/softside-magazine-31&quot; rel=&quot;nofollow noreferrer&quot;&gt;This link&lt;/a&gt; goes directly to an issue I was searching for because I played the game on the cover so much that I ported it to my Commodore 64, and later to the IBM PC.&lt;/p&gt;&#xA;" OwnerUserId="5094" LastActivityDate="2020-07-21T16:10:27.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15693" PostTypeId="2" ParentId="15691" CreationDate="2020-07-21T17:09:07.177" Score="6" Body="&lt;p&gt;Apparently, it was not the only one. I own a Kempston Pro Joystick Interface, which has one joystick port for Kempston/Cursor protocols, two ports for Sinclair 1/2 protocols, and a &amp;quot;games cartridge port&amp;quot;. (the epoxy is an attempt of mine to hold in place the plastic part of the edge connector).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tkWOd.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tkWOd.jpg&quot; alt=&quot;Kemspton Pro Joystick Interface, upper view&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/541iW.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/541iW.jpg&quot; alt=&quot;Kemspton Pro Joystick Interface, lower view&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2020-07-21T17:09:07.177" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15694" PostTypeId="2" ParentId="15685" CreationDate="2020-07-21T18:13:51.983" Score="14" Body="&lt;p&gt;In Multics, not only was all data mapped into memory, but all binary executables were what we now call DLLs. There was no natural &amp;quot;main program&amp;quot; concept: every binary executable was a compiled function. Processes were extremely &amp;quot;heavy&amp;quot;: you got one when you logged in, and everything you ran was a DLL linked into that process. This messed up imported code that assumed static initialization happened every time the &amp;quot;main program&amp;quot; was run.&lt;/p&gt;&#xA;&lt;p&gt;Unix, with a separate process for each command using standard I/O streams, naturally supported pipelines, an excellent way to factor complex jobs into simple chunks. Pipelines were not technically impossible on Multics, but they were unnatural and difficult to set up.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2020-07-21T18:13:51.983" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15695" PostTypeId="1" AcceptedAnswerId="15696" CreationDate="2020-07-21T18:44:07.520" Score="2" ViewCount="283" Body="&lt;p&gt;Title says it all really. &lt;a href=&quot;http://www.thealmightyguru.com/Games/Hacking/Wiki/index.php?title=TXS&quot; rel=&quot;nofollow noreferrer&quot;&gt;Some documentation&lt;/a&gt; claims that the &lt;code&gt;S&lt;/code&gt; and &lt;code&gt;Z&lt;/code&gt; flags are affected by both &lt;code&gt;TXS&lt;/code&gt; and &lt;code&gt;TSX&lt;/code&gt;, just as with all other transfer commands. &lt;a href=&quot;http://www.6502.org/tutorials/6502opcodes.html#TXS&quot; rel=&quot;nofollow noreferrer&quot;&gt;Other documentation&lt;/a&gt; suggests that neither &lt;code&gt;TXS&lt;/code&gt; nor &lt;code&gt;TSX&lt;/code&gt; affect the flags.&lt;/p&gt;&#xA;&lt;p&gt;But this emulator, &lt;a href=&quot;http://rubbermallet.org/fake6502.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;fake6502&lt;/a&gt; affects the flags with &lt;code&gt;TSX&lt;/code&gt; and not with &lt;code&gt;TXS&lt;/code&gt;. As fake6502 was made for a NES emulator, could this change be specific to the Ricoh variants? If it's just a bug, then it is worth noting that there is &lt;a href=&quot;https://github.com/gianlucag/mos6502/blob/master/mos6502.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;At least one other emulator that behaves this way&lt;/a&gt;. I found the source code of perfect6502 too obtuse to read and understand.&lt;/p&gt;&#xA;&lt;p&gt;I can see how this could be missed in the emulators because I imagine very little code will depend on this. Probably just code that initialises various registers and will overwrite the status flags anyway. Also, I can see how this mistake could be missed in the documentation, the Transfer instructions are all very similar.&lt;/p&gt;&#xA;&lt;p&gt;I'd be interested if there's any variation in this matter between the various incarnations of the 6502 also.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="3290" LastEditDate="2020-07-22T07:55:16.983" LastActivityDate="2020-07-22T08:05:53.947" Title="Does the 6502's TXS and TSX affect flags or not?" Tags="&lt;6502&gt;&lt;cpu-flag-bits&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15696" PostTypeId="2" ParentId="15695" CreationDate="2020-07-21T19:21:53.553" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Does the 6502's TXS and TSX affect flags or not?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TSX does affect N and Z&lt;/li&gt;&#xA;&lt;li&gt;TXS does not affect any flag&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In general all instructions moving data to one of the Registers (A, X, Y) do set N and Z according to the data moved.&lt;/p&gt;&#xA;&lt;p&gt;Excerpt of the instruction list from &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6500_mpu_preliminary_may_1976.pdf&quot; rel=&quot;noreferrer&quot;&gt;the 1976 data sheet&lt;/a&gt; on page 6:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TEXM5.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TEXM5.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2020-07-22T08:05:53.947" LastActivityDate="2020-07-22T08:05:53.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15697" PostTypeId="1" AcceptedAnswerId="15700" CreationDate="2020-07-21T19:54:53.023" Score="8" ViewCount="266" Body="&lt;p&gt;I'm trying to learn about C64 interrupt handling (with the goal of putting it in practice). My understanding is that interrupts can be triggered by different sources but there is only one interrupt handler vector for all of them (apart from NMI and reset having their own vectors). It is possible to chain different interrupt handlers, but there are no dedicated interrupt handlers for different interrupt events.&lt;/p&gt;&#xA;&lt;p&gt;For this reason I would assume that every interrupt handler would first have to check whether the event it is interested in had actually happened or whether the interrupt had been triggered by a different type of event. Yet every interrupt handler example I see just assumes that it was triggered by the right kind of event and proceeds to handle it. Even &lt;a href=&quot;https://www.pagetable.com/c64ref/c64disasm/#EA31&quot; rel=&quot;noreferrer&quot;&gt;the default interrupt handler in the KERNAL ROM&lt;/a&gt; just seems to assume that it was triggered because 1/60 sec has elapsed and proceeds to increment the real time clock.&lt;/p&gt;&#xA;&lt;p&gt;I found &lt;a href=&quot;https://medium.com/developer-rants/interrupts-on-the-commodore-64-a-very-simple-example-cf1be764715e&quot; rel=&quot;noreferrer&quot;&gt;this article&lt;/a&gt; that briefly touches on this topic:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Interrupts [...] will call the same memory address. In a modern setting this would be as if you had to connect all your events to a single function, and then sort out which one has actually occurred.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But then it proceeds to show an example that does not check the interrupt source.&lt;/p&gt;&#xA;&lt;p&gt;I also found the &lt;a href=&quot;https://www.c64-wiki.com/wiki/Raster_interrupt#Using_multiple_interrupt_service_routines&quot; rel=&quot;noreferrer&quot;&gt;multiple interrupt service routines&lt;/a&gt; pattern, but it just keeps switching between a fixed number of interrupt handlers for the same number of interrupt triggers that follow each other in a regular repeating pattern.&lt;/p&gt;&#xA;&lt;p&gt;Based on my findings above, it seems that there is no need to identify the IRQ source in interrupt handlers, or at least it is not a regular practice. Why?&lt;/p&gt;&#xA;" OwnerUserId="9064" LastEditorUserId="6659" LastEditDate="2020-07-21T20:50:25.303" LastActivityDate="2020-07-21T22:33:45.880" Title="(Lack of) identifying IRQ sources in C64 interrupt handlers" Tags="&lt;commodore-64&gt;&lt;interrupt&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15698" PostTypeId="2" ParentId="15685" CreationDate="2020-07-21T20:14:12.597" Score="10" Body="&lt;p&gt;A couple other significant differences between Multics and early Unix systems in the security area:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Multics had rings (8 in commercial versions), whereas Unix only had two effective rings -- supervisor and user.  This allowed privileged subsystems to be created that would run in process, but be protected from tampering by user (ring) manipulation. This was used for the message system, the mail system, data management, etc.  It was not necessary to move these privileged subsystems to the &amp;quot;kernel&amp;quot; (ring-0) because of the additional rings.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Multics had Mandatory Access Control (MAC), in addition to its Discretionary Access Control system based on ACLs.  MAC prevented writing &amp;quot;down&amp;quot; from higher privileged levels to lower privileged levels, and reading higher privileged levels from lower ones.  It was successfully deployed by the US government to allow users cleared to only Secret to run alongside users cleared to Top Secret, while ensuring that no improper access occurred. It also had a robust system auditing mechanism that ensured audit records for any security-relevant events (such as covert channels, or attempts to write down or read up).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="18854" LastActivityDate="2020-07-21T20:14:12.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15699" PostTypeId="2" ParentId="15697" CreationDate="2020-07-21T20:25:19.157" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Based on my findings above, it seems that there is no need to identify the IRQ source in interrupt handlers, or at least it is not a regular practice. Why?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because there are no unknown/unexpected interrupts?&lt;/p&gt;&#xA;&lt;p&gt;The C64 is a rather simple machine, originally developed as a game console. Later  usage is still much like one. C64 software assumes to be loaded as the only application and takes control of the whole machine. There is no concept of concurrent applications and extensions, if they exist at all are made specific for one application they extend - like BASIC.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;A program loaded owns the machine until power off.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is always only one program loaded and in charge. It does not need to care for any previous loaded program or its interrupts. Only those interrupts enabled by this program will occur and thus it only needs to care for them.&lt;/p&gt;&#xA;&lt;p&gt;When a program finishes it should disable all interrupts and restore all previous handlers, but more often than not, program termination is assumed to be done via a power cycle. Where others like Apple, Atari, BBC or MSX try to establish protocols for extensions and limited multi programming, the C64 stays true to its heritage.&lt;/p&gt;&#xA;&lt;p&gt;Due this &lt;em&gt;one program to rule them all&lt;/em&gt; 'feature' chances are slim to find any cooperative example sharing interrupts. Programms using multiple will ido it in custom fashion. In addition, when interrupts are used for screen manipulation timing is essential and cycles are in short supply. This encourages tight programming, including interrupt state machines like mentioned. Depending on the task it may be faster to have every state put the next states routine address into the interrupt vector.&lt;/p&gt;&#xA;&lt;p&gt;Long story short: Go with whatever pleases you. If your task isn't as tight, using a nice series of detection function, like you suggest, may be good style.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-21T20:32:59.457" LastActivityDate="2020-07-21T20:32:59.457" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15700" PostTypeId="2" ParentId="15697" CreationDate="2020-07-21T21:58:57.470" Score="8" Body="&lt;p&gt;To save space and execution time (and partly of necessity, cf. below), interrupt handlers are typically set up for the context they are used in with assumptions on expected system interrupt sources.&lt;/p&gt;&#xA;&lt;p&gt;If you were to set up a context in which you might be receiving interrupts from both the VIC (maybe raster or sprite collision interrupt) and a CIA (maybe a timer fired, a TOD alarm triggered or a peripheral port signals) you would indeed need to determine the source of the interrupt to handle/acknowledge it correctly.&lt;/p&gt;&#xA;&lt;p&gt;There is no concept of an interrupt source on the 6502/6510 and the C64 kernal provides no abstractions by itself. So basically, you have to beat about the known bushes and see what falls out. For instance, you can look at $D019 to determine if there's an unacknowledged VIC interrupt. Similarly, you'd look at $DC0D to see if a CIA1 had something to say (CIA2, with interrupt register $DD0D, triggers the NMI instead of the IRQ, but same principle applies to determine the NMI source).&lt;/p&gt;&#xA;&lt;p&gt;But it gets worse. Because the IRQ (and NMI) can be triggered from anything in the expansion port as well, and who knows where some random cartridge has its I/O space and interrupt registers; there's no plug and play resource manager to track that kind of thing. ;) Fx, add a MIDI interface and it may trigger IRQs (or sometimes NMIs) whenever a MIDI event occurs.&lt;/p&gt;&#xA;&lt;p&gt;So you will need to explicitly support the &lt;em&gt;specific&lt;/em&gt; interrupt sources that are expected to occur and suffer the consequences if unexpected ones occur. :)&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-07-21T22:33:45.880" LastActivityDate="2020-07-21T22:33:45.880" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15701" PostTypeId="2" ParentId="12618" CreationDate="2020-07-21T22:53:30.863" Score="0" Body="&lt;p&gt;The page has a hint that the games are listed in &lt;a href=&quot;https://archive.org/details/Whattodoafteryouhitreturn/&quot; rel=&quot;nofollow noreferrer&quot;&gt;What to Do After you Hit Return&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Trader is &lt;a href=&quot;https://en.wikipedia.org/wiki/Star_Trader&quot; rel=&quot;nofollow noreferrer&quot;&gt;Star Trader&lt;/a&gt;, as listed starting on page &lt;a href=&quot;https://archive.org/details/Whattodoafteryouhitreturn/page/n141/mode/2up?q=Star+Trader&quot; rel=&quot;nofollow noreferrer&quot;&gt;143&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Crash is a modified version of &lt;em&gt;Lunar Lander&lt;/em&gt;, listed on page &lt;a href=&quot;https://archive.org/details/Whattodoafteryouhitreturn/page/n149/mode/2up?q=Star+Trader&quot; rel=&quot;nofollow noreferrer&quot;&gt;151&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While typing in the code would be a chore, maybe searching for comment strings will turn up the full source.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-07-21T22:53:30.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15702" PostTypeId="2" ParentId="12618" CreationDate="2020-07-21T23:57:39.970" Score="1" Body="&lt;p&gt;I have a book of printed BASIC computer games I got on eBay by David H. Ahl.  I bought this for nostalgic purposes and for actually running on my homemade Z80 computer running BASIC.  I had this book as a kid and it was my introduction to programming, a lifelong pursuit and career...&lt;/p&gt;&#xA;&lt;p&gt;I think Ahl published two books, a yellow one and a red one.  Look on Amazon or eBay for used volumes.&lt;/p&gt;&#xA;" OwnerUserId="5153" LastActivityDate="2020-07-21T23:57:39.970" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15703" PostTypeId="2" ParentId="15685" CreationDate="2020-07-22T05:04:20.417" Score="8" Body="&lt;p&gt;Another significant difference between Multics and Unix was the size of the virtual memory accessible to a process.&lt;/p&gt;&#xA;&lt;p&gt;It is true that each Multics segment was limited to 255K 36-bit words in length.  But each process mapped more than 300 such segments into its address space.  About 1/2 of these segments belonged to kernel and inner-ring programming environments.  [Yes, the kernel was memory-mapped into each user's process; and its pages were shared among all users of the system.]&lt;/p&gt;&#xA;&lt;p&gt;160 or more segments were therefore available to the user.  Each could contain programs or data.  And all of this program memory space was available for use in each process: a total size of more than 40 GB of virtual memory as upper limit on process working set size.  Dynamic linking and a flexible segmented pointer register mechanism allowed programs running in many segments to work together as a large subsystem; and to share huge pools of data as well.&lt;/p&gt;&#xA;&lt;p&gt;There are many operating systems that cannot match that programmable memory space even today.  Certainly the early Unix was limited to much less than that amount of space (1- or 2-GB or less).  So were processes on IBM OS/370 systems.&lt;/p&gt;&#xA;" OwnerUserId="18856" LastActivityDate="2020-07-22T05:04:20.417" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15704" PostTypeId="1" AcceptedAnswerId="15705" CreationDate="2020-07-22T12:29:44.843" Score="6" ViewCount="267" Body="&lt;p&gt;I've been looking at MicroBee floppy disk image files. They use the &lt;a href=&quot;http://www.cpcwiki.eu/index.php?title=Format:DSK_disk_image_file_format&amp;amp;mobileaction=toggle_view_desktop&quot; rel=&quot;nofollow noreferrer&quot;&gt;DSK/EDSK image file format&lt;/a&gt; originally created for Amstrad CPC emulators, probably because both systems use derivatives of the CP/M 2.2 disk layout.&lt;/p&gt;&#xA;&lt;p&gt;This is a high-level image format which records information about each track and sector (but not down to the FM/MFM bits). The per-sector info includes track number, side number, sector ID, and sector size - the same info that FDCs have in the IDAM field before each actual sector data field.&lt;/p&gt;&#xA;&lt;p&gt;My expectation was that the sector ID in the IDAM would contain the logical sector number that results from any sector skew/interleave. So for a disk with 10 sectors per track and a skew of 3 if I read the sector ID from each sector in order from one track I would expect one of these sequences of sector IDs:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;0 3 6 9 2 5 8 1 4 7&lt;/code&gt; or  &lt;code&gt;1 4 7 10 3 6 9 2 5 8&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Instead what I find is:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;0 1 2 3 4 5 6 7 8 9&lt;/code&gt; or &lt;code&gt;1 2 3 4 5 6 7 8 9 10&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(For some MicroBee disk formats the sector IDs start at a much higher number, but the sequencing remains the same.)&lt;/p&gt;&#xA;&lt;p&gt;And then I'm finding that the sectors containing the disk's directory information is not contiguous, either by the order they come on the track, or by the sector IDs of the directory sectors.&lt;/p&gt;&#xA;&lt;p&gt;For instance, some MicroBee disk images have the directory on sectors 1, 4, and 7 of track 1 going by the physical order on the track, which is sectors 2, 5, and 8 when going by their sector IDs.&lt;/p&gt;&#xA;&lt;p&gt;So I was expecting the order of the sectors would be the physical sector numbering and the sector IDs in the IDAMs would be the logical sector numbering, and that the logical sector numbering would be the number after applying the skew/interleave factor.&lt;/p&gt;&#xA;&lt;p&gt;But what I'm finding is that the sector ID in the IDAM only tells me whether sector number starts at 0 or 1, and does not tell me anything about the skew or interleave.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Does this mean that I had it wrong and that skew/interleave is never stored in the IDAMs? Or does it mean that some OSes might store it in the IDAMs and other OSes don't?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Other possibilities are that it's a quirk of the DSK image format, or a quirk of CP/M 2.2 or a quirk of the MicroBee. It's hard to compare between systems or image formats because some are always in physical order and some are always in logical order. &lt;a href=&quot;http://webcache.googleusercontent.com/search?q=cache:jb-wdstdDE0J:shazam.zapto.org/retro/microbee/catweasel/microbee_disk_formats.txt%20&amp;amp;cd=3&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;gl=au&quot; rel=&quot;nofollow noreferrer&quot;&gt;This info on the MicroBee disk format&lt;/a&gt; doesn't answer my question and I can't find any other info.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-07-23T02:04:17.513" LastActivityDate="2020-07-23T07:07:07.610" Title="Did OSes write the floppy's logical sector number resulting from sector interleave/skew in the IDAM sector ID, or was it up to the OS?" Tags="&lt;floppy-disk&gt;&lt;cp-m&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15705" PostTypeId="2" ParentId="15704" CreationDate="2020-07-22T12:59:42.137" Score="7" Body="&lt;p&gt;I don't know the MicroBee, but grew up with CP/M 2.2 and 3.0 and its variety of floppy disk formats.&lt;/p&gt;&#xA;&lt;p&gt;There were two different ways of implementing skew in use:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;assigning the low-level sector IDs in a non-contiguous order, and simply access sectors by a 1:1 mapping from their logical number, resulting in sector ID sequences like &lt;code&gt;0 3 6 9 2 5 8 1 4 7&lt;/code&gt;,&lt;/li&gt;&#xA;&lt;li&gt;assigning contiguous sector IDs like &lt;code&gt;0 1 2 3 4 5 6 7 8 9&lt;/code&gt;, and having the software (BIOS) translate from the logical sector number to the low-level sector ID.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The first approach meant you only had to consider skew in the formatting routine, while the second needed to do some sector ID translations in each and every disk access.&lt;/p&gt;&#xA;&lt;p&gt;By the way, there were a lot more parameters to consider when trying to read a CP/M disk from a foreign system, e.g.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;recording format FM or MFM,&lt;/li&gt;&#xA;&lt;li&gt;physical sector size (popular from 128 to 512 bytes),&lt;/li&gt;&#xA;&lt;li&gt;number of tracks/heads (40 or 80, single oder double sided),&lt;/li&gt;&#xA;&lt;li&gt;track order with double-sided disks (sides interlaced or second side after first one),&lt;/li&gt;&#xA;&lt;li&gt;allocation block size (typically 1 or 2 kBytes)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6565" LastEditorUserId="6565" LastEditDate="2020-07-23T07:07:07.610" LastActivityDate="2020-07-23T07:07:07.610" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15706" PostTypeId="1" AcceptedAnswerId="15709" CreationDate="2020-07-23T01:33:59.017" Score="15" ViewCount="1834" Body="&lt;p&gt;You know those block graphic symbols that allows you to draw lines, corners, intersections, fine bar charts, etc. they are useful and one can do a lot of stuff, but their code arrangements always struck me as arbitrary / random. But then maybe I just haven't figured out the logic. Does anybody know why they ended up with the codes they got?&lt;/p&gt;&#xA;" OwnerUserId="15591" LastEditorUserId="10854" LastEditDate="2020-09-07T23:20:24.677" LastActivityDate="2020-09-07T23:20:24.677" Title="C64/PETSCII block graphic symbol: was there ever a logical reason for their &quot;ASCII&quot; codes?" Tags="&lt;commodore-64&gt;&lt;commodore-pet&gt;&lt;ascii&gt;&lt;character-sets&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15707" PostTypeId="2" ParentId="15706" CreationDate="2020-07-23T04:26:20.543" Score="9" Body="&lt;p&gt;I think the codes were laid out so that when laid out sensibly on the PET keyboard, the shifted and unshifted forms of each key would have a consistent relationship.  When the VIC-20 reduced the number of keys but added the Commodore key, this made it necessary to rearrange the placement of graphics on the keys; since Commodore kept the same arrangement of character codes, however, this meant that the arrangement no longer seemed to make as much sense.&lt;/p&gt;&#xA;&lt;p&gt;One can see a similar effect in the design of ASCII.  Many typewriters used to use a shifted 2 for a quotation mark, early teletypes did likewise, and thus the ASCII code for the quote mark is one bit different from that of the digit 2, even though modern keyboards use a shifted apostrophe as the quote mark.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-07-23T04:26:20.543" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15708" PostTypeId="1" AcceptedAnswerId="15712" CreationDate="2020-07-23T08:56:46.920" Score="10" ViewCount="2597" Body="&lt;p&gt;I was hoping, that someone could help me find the name of the operating system that was originally (I guess) used on the 80286 (the later ones with 12MHz).&lt;/p&gt;&#xA;&lt;p&gt;Before I eventually installed DOS-5.0 and later on DOS-6.2 and Windows 3.0 there was an operating system installed that was already graphical and supported a mouse:&lt;/p&gt;&#xA;&lt;p&gt;The home screen was split into 4 parts. You could choose between&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;an editor like nano on Linux&lt;/li&gt;&#xA;&lt;li&gt;a program similar to Microsofts Paint&lt;/li&gt;&#xA;&lt;li&gt;a game that was a little like minesweeper but with bees&lt;/li&gt;&#xA;&lt;li&gt;a learning center which was basically some kind of Powerpoint presentation&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All this information is just what I remember (I guess I was around 7 or 8 years old, the computer was a gift from my aunt that worked for IBM).&lt;/p&gt;&#xA;&lt;p&gt;I'd be super happy if I could find this OS.&lt;/p&gt;&#xA;" OwnerUserId="18866" LastEditorUserId="8712" LastEditDate="2020-07-23T12:38:12.913" LastActivityDate="2020-07-25T07:36:39.323" Title="What was this OS / Application on a 80286?" Tags="&lt;operating-system&gt;&lt;80286&gt;&lt;identify-this-software&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15709" PostTypeId="2" ParentId="15706" CreationDate="2020-07-23T11:13:47.060" Score="21" Body="&lt;p&gt;&lt;strong&gt;The &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/PETSCII&quot; rel=&quot;nofollow noreferrer&quot;&gt;PETSCII&lt;/a&gt;&amp;quot; encoding is based on keyboard positions of the original PET chicklet keyboard&lt;/strong&gt; (*1):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wmJvE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wmJvE.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Taken from &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:PET_Keyboard_improved.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;The keyboard is made similar to basic typewriter keyboards, but ordered in a square fashion, including a top row of symbols but not numbers and a separate numeric keyboard. By every key holding only a single ASCII equivalent symbol (*2), it leads to a &lt;strong&gt;direct encoding of ASCII as key position&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;As a side effect the whole shift level could be used for graphics, as they did. All symols are ordered in a (mostly) useful pattern, like having &lt;code&gt;UIJK&lt;/code&gt; forming the 4 sections of a circle, &lt;code&gt;OPL:&lt;/code&gt; doing the same for the corners of a large square and &lt;code&gt;0.-=&lt;/code&gt;the same for a small square.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;It not only looks neat on the keyboard but also makes a good UI as far as ordering of symbols can get.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The downside is that graphic symbols are encoded according to the (unsifted) character code. And here combinations like &lt;code&gt;UIJK&lt;/code&gt; are simply non-continuous. As listing the PETSCII assignment shows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jG6yb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jG6yb.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Taken from &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:C64_Petscii_Charts.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;From a programmers perspective this is less than perfect. A logical sequence for related items (*3) could have been more helpful. This is especially true for the 16 codes that form a 2x2 division of a character cell would allow an easy 'bitmap' mode for 80x48 pixel (*4). Much like contemporary TRS-80 and Sinclair's ZX80/81 some years later.&lt;/p&gt;&#xA;&lt;p&gt;An additionally sad part is that PETSCII itself isn't direct used for display, but translated into screencodes beforehand. If not right ahead, this would have been a good point to reorder.&lt;/p&gt;&#xA;&lt;p&gt;... and so it became history :)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The Wikipedia entry for '&lt;a href=&quot;https://en.wikipedia.org/wiki/Chiclet_keyboard&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chicklet Keyboard&lt;/a&gt;' is a nice example for a retrograde explanation.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Almost as if the first version was not meant to use shift.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Much like ASCII offers a monotone sequence for numbers ($30..$39) and letters ($41..$5A). The later according to the usual lexical sequence, as made popular by &lt;a href=&quot;https://en.wikipedia.org/wiki/Bartholomeus_Anglicus&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bartholomeus Anglicus&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*4 - As usual they have been used anyway, but with a translation layer. Some of them, written in BASIC, look more like on purpose obfuscation.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-09-04T17:50:32.670" LastActivityDate="2020-09-04T17:50:32.670" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15710" PostTypeId="2" ParentId="1976" CreationDate="2020-07-23T11:30:49.543" Score="4" Body="&lt;p&gt;Sirius 1 (aka Victor 5000 in the US) had a programmable character generator on a nice 10x16 matrix giving a good 800x400 resolution.&#xA;This was a very nice PC and much better than the crap IBM came up with.&#xA;(8088@5Mhz, up to 896K RAM, MS-DOS or CP/M 86, 800K floppies, soft control for monitor,).&lt;/p&gt;&#xA;" OwnerUserId="7095" LastActivityDate="2020-07-23T11:30:49.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15711" PostTypeId="2" ParentId="15706" CreationDate="2020-07-23T11:48:52.600" Score="4" Body="&lt;p&gt;For what it's worth, I did a quick photo of my C-64 and VIC-20 keyboards, so it's very easy to see the &lt;em&gt;physical grouping&lt;/em&gt; of the various graphics/symbols.&lt;/p&gt;&#xA;&lt;p&gt;Commodore C-64 Keyboard:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pDm6e.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pDm6e.png&quot; alt=&quot;Commodore C-64 Keyboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Commodore VIC-20 Keyboard:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PDf9x.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PDf9x.png&quot; alt=&quot;Commodore VIC-20 Keyboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2020-07-23T11:48:52.600" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15712" PostTypeId="2" ParentId="15708" CreationDate="2020-07-23T12:52:18.677" Score="30" Body="&lt;p&gt;Since the computer was a gift from your aunt, working for IBM, the screen split in four reminds me immediately of the IBM PS/1’s “4-quadrant” interface:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mgpDb.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mgpDb.png&quot; alt=&quot;IBM PS/1 4-quadrant interface&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(The screenshot above is from &lt;a href=&quot;https://barotto.github.io/IBMulator/&quot; rel=&quot;noreferrer&quot;&gt;IBMulator&lt;/a&gt;, an IBM PS/1 emulator.)&lt;/p&gt;&#xA;&lt;p&gt;The programs launched don’t match your description, but perhaps the defaults can be changed — at the very least, the lower-left quadrant provides access to other software installed on the computer.&lt;/p&gt;&#xA;&lt;p&gt;This wasn’t a separate operating system, it was a shell running on top of DOS. Both DOS and the PS/1 shell were stored in ROM (on early models at least) so both would start quickly.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-07-24T06:25:18.837" LastActivityDate="2020-07-24T06:25:18.837" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15713" PostTypeId="2" ParentId="1976" CreationDate="2020-07-23T13:24:42.537" Score="3" Body="&lt;p&gt;Half of the character ROM of Digital Equipment Corporation's DECmate-II was user-definable. No one ever used this feature and it was dropped from subsequent models.&lt;/p&gt;&#xA;" OwnerUserId="4186" LastActivityDate="2020-07-23T13:24:42.537" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15715" PostTypeId="2" ParentId="1976" CreationDate="2020-07-24T00:08:50.530" Score="4" Body="&lt;p&gt;Any computer with a serial terminal interface supports redefineable character sets. Just plug in a &lt;a href=&quot;https://vt100.net/docs/vt220-rm/chapter4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;VT220 terminal&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is a curmudgeonly way of saying it's not &amp;quot;the computer&amp;quot;, it's a specific display device that supports loadable characters.&lt;/p&gt;&#xA;&lt;p&gt;I recall that, in the days when VMS MAIL would happily display whatever it got in a mail message, sending around the &amp;quot;Australian font&amp;quot; was popular around April Fool's day in DEC. Subsequent text displayed upside-down.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-07-24T00:08:50.530" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15716" PostTypeId="1" AcceptedAnswerId="15731" CreationDate="2020-07-24T04:10:15.080" Score="6" ViewCount="336" Body="&lt;p&gt;When an interrupt occurs on a &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68000_series&quot; rel=&quot;noreferrer&quot;&gt;Motorola 68000-family&lt;/a&gt; processor, it enters an interrupt acknowledge state, which continues until one of three signals are asserted:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;An external device places the intended exception vector number on the data bus, and then asserts the &lt;code&gt;DTACK#&lt;/code&gt; (68010 or earlier) or &lt;code&gt;DSACK0-1#&lt;/code&gt; (68020 or later) signal.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;code&gt;VPA#&lt;/code&gt; (68010 or earlier) or &lt;code&gt;AVEC#&lt;/code&gt; (68020 or later) signal is asserted, which tells the processor to automatically calculate the exception vector number from the interrupt priority level.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;code&gt;BERR#&lt;/code&gt; signal is asserted, which indicates a &amp;quot;spurious interrupt&amp;quot;.  Presumably, this is supposed to indicate that an interrupt was generated (possibly by electrical noise on an interrupt line), but no peripheral is claiming responsibility for the interrupt.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Did any commercially-available M68k system have &lt;em&gt;hardware&lt;/em&gt; that was capable of generating a spurious interrupt?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;(I am asking about the presence of &lt;em&gt;hardware&lt;/em&gt; capable of generating the signal, not &lt;em&gt;software&lt;/em&gt; that could handle such an exception.)&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2020-07-24T04:28:01.700" LastActivityDate="2020-07-25T14:46:06.463" Title="Were any M68000 systems capable of generating a &quot;spurious interrupt&quot;?" Tags="&lt;hardware&gt;&lt;interrupt&gt;&lt;m68k&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15717" PostTypeId="1" CreationDate="2020-07-24T04:17:57.677" Score="2" ViewCount="323" Body="&lt;p&gt;Let's say I want to write &lt;code&gt;K&lt;/code&gt; to the top of the status bar in SMB. I can use the following set of statements to write to PPU memory.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    memory.writebyte(0x2001, 0x00) -- Turn off rendering&#xA;    memory.readbyte(0x2002) -- PPUSTATUS (reset address latch)&#xA;    memory.writebyte(0x2006, 0x20) -- PPUADDR high byte&#xA;    memory.writebyte(0x2006, 0x2A) -- PPUADDR low byte&#xA;    memory.writebyte(0x2007, 0x14) -- PPUDATA ('K')&#xA;    memory.writebyte(0x2001, 0x1e) -- Turn on rendering&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DCjfz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DCjfz.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I tried changing the color of the text by changing the color palette before writing text as -&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;memory.writebyte(0x2001, 0x00) -- Turn off rendering&#xA;memory.readbyte(0x2002) -- PPUSTATUS (reset address latch)&#xA;&#xA;memory.writebyte(0x2006, 0x3F) -- Selecting high byte color palette&#xA;memory.writebyte(0x2006, 0x11) -- Selecting low byte color palette&#xA;memory.writebyte(0x2007, 0x16) -- Red color&#xA;&#xA;memory.writebyte(0x2006, 0x20) -- PPUADDR high byte&#xA;memory.writebyte(0x2006, 0x2A) -- PPUADDR low byte&#xA;memory.writebyte(0x2007, 0x14) -- PPUDATA ('K')&#xA;memory.writebyte(0x2001, 0x1e) -- Turn on rendering&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;However that changes the color of the background objects.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My question is how I can set the color of the displayed text?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="18638" LastActivityDate="2021-04-29T04:13:46.400" Title="Change color of the text written in PPU memory (NES-Super Mario Bros)" Tags="&lt;nes&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15718" PostTypeId="2" ParentId="15716" CreationDate="2020-07-24T05:43:41.867" Score="0" Body="&lt;p&gt;The original Mac used BERR for the &amp;quot;Programmers Switch&amp;quot;, which was a small switch that could be installed (well, the switch was always there, but access to the switch could be installed). The Programmers Switch had two buttons: the interrupt button, and the reset button. Reset is pretty obvious, the Interrupt button was designed to be patched in to with a debugger, so that the developer could stop the current program and inspect it.&lt;/p&gt;&#xA;&lt;p&gt;Out of the box, I honestly don't recall what it did anymore. It wasn't a monitor, may have been a simple dialog box to restart the machine. But with an actual debugger installed, it kicked you right to the command prompt.&lt;/p&gt;&#xA;&lt;p&gt;Addenda:&lt;/p&gt;&#xA;&lt;p&gt;Good heavens.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aJ5gD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aJ5gD.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a screen grab from &lt;a href=&quot;https://museo.freaknet.org/gallery/apple/stuff/mac/andreas.kann/MacPlus1.GIF&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://museo.freaknet.org/gallery/apple/stuff/mac/andreas.kann/MacPlus1.GIF&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Which, admittedly, is apparenlty a Mac Plus schematic, not the 128K schematic. So I can't speak with any authority about the 128K (though honestly, whatever changes are between the 128K and Mac Plus, I'm guessing they're not in the programmers switch).&lt;/p&gt;&#xA;&lt;p&gt;As should be clear from this schematic, pins 22 and 23 are wired to SW1 (cleverly labeled &amp;quot;INTERRUPT&amp;quot;). While the schematic is fuzzy on the pin labels, it's not fuzzy on the pin numbers. Pin 23 is /IPL2, Pin 22 is BERR (according to other documentation).&lt;/p&gt;&#xA;&lt;p&gt;So I guess this can be interpreted however one wants, but sure looks like early Mac uses BERR in the process of the behavior of the &amp;quot;Programmers Switch&amp;quot;. Why it would use both, I can't speculate.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="7493" LastEditDate="2020-07-25T14:46:06.463" LastActivityDate="2020-07-25T14:46:06.463" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15720" PostTypeId="2" ParentId="10850" CreationDate="2020-07-24T06:54:11.437" Score="3" Body="&lt;p&gt;More a side-note than an answer: There is the impressive &lt;a href=&quot;https://github.com/KimJorgensen/KungFuFlash&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kung Fu Flash&lt;/a&gt; project which is doing exactly this and much more using a STM32F4 controller running at 168 MHz. It is all open source, so it should yield all the necessary information if someone is going to try something similar using a different controller.&lt;/p&gt;&#xA;" OwnerUserId="18878" LastActivityDate="2020-07-24T06:54:11.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15721" PostTypeId="1" CreationDate="2020-07-24T07:57:00.557" Score="5" ViewCount="314" Body="&lt;p&gt;I have a specific question about the DMACON/R registers found in Commodore Amiga range of computers.&#xA;As you may know they are the DMA control registers that controls all the DMA channels used by the Amiga chipset - one for read and one for write. Now, does anyone have an insight in detail how those two registers works? I know that you use the bit #15 to set or clear the different bits in the write register (DMACON), but how does the DMA controller &lt;strong&gt;interpreter&lt;/strong&gt; the different register bits?&#xA;Also, you have two bits that are unused on those registers: #11, and #12; is it possible to take advantage of them and use those two bits if you can extend the existing chip register set?&#xA;As far as I know the official hardware reference manual doesn't tell anything about it.&lt;/p&gt;&#xA;&lt;p&gt;It would be very interesting to know because it &amp;quot;might&amp;quot; be possible to enhance the chipset with external blitter and copper processors.&lt;/p&gt;&#xA;&lt;p&gt;ADDENDUM:&lt;/p&gt;&#xA;&lt;p&gt;First off: thanks to both hippietrail/lvd? and Brian H for your good answers.&lt;/p&gt;&#xA;&lt;p&gt;To give you more 'flesh' (information) and background to my question:&#xA;I've been toying with John &amp;quot;Chucky&amp;quot; Hertell's ReAmiga 1200 pcb files and were wondering if there is a possibility to enhance the chipset in anyway.&#xA;The PB8 and PB9 connectors that were designed to give the A1200 additional 1mb of chipram before the Amiga developers decided to go for the full two megabyte, could be a possible gateway to enhance the chipset. Those two connectors contains full data- and memory address bus (plus other signals) to chipram and such. I know that you also need the Register Address Bus (RGA) which you can find present at TestPoint3 (TP3) right below the Alice chip. If one could build a piggyback board containing chips in form of CPLD or FPGA of some sort and those chips could contain enhanced 16-bit copper running at higher synchronus speed (i.e. faster than the original ~3.58MHz) and a faster blitter - maybe 32-bit as long as it doesn't need access to 16-bit chip registers.&#xA;Imagine that this is possible; you would need to deactivate the original blitter and copper and then activate the 'new' blitter and copper by using the DMACON/R registers (bit #11, and #12).&#xA;Maybe it is possible to just turn off the original blitter and copper and then call the new ones in software by reading and writing directly to the new registers that controls the new co-processors.&#xA;If you study the Amiga Hardware Reference Manual and look at all the chip registers, you can see that there are several registers that is unused (17 of them in AGA chipset, if I remember correctly).&#xA;Taking advantage of those unused registers you could enhance the functionallity of the Amiga chipset.&lt;/p&gt;&#xA;&lt;p&gt;Well, those are my two cents about it.&lt;/p&gt;&#xA;" OwnerUserId="6865" LastEditorUserId="4335" LastEditDate="2020-08-04T17:29:00.250" LastActivityDate="2020-08-04T17:29:00.250" Title="How does DMACON/R registers on Commodore Amiga platform work?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;dma&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15722" PostTypeId="1" AcceptedAnswerId="15725" CreationDate="2020-07-24T08:55:57.350" Score="3" ViewCount="153" Body="&lt;p&gt;I asked a question here about CHIP-8 instruction timing, and &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15678/115&quot;&gt;this answer&lt;/a&gt; mentions that &lt;code&gt;DRAW&lt;/code&gt; waits for vblank:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For Chip-8 code that draws anything, the limiting factor will be the wait-for-vblank that is built into all of the draw operations&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Trying to dig deeper into this, I got&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15677/effective-speed-of-original-cosmac-vip-chip-8-interpreter#comment52437_15678&quot;&gt;this helpful comment&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;@Cactus Yes. Look at memory address $00AC in this disassembly of COSMAC VIP's CHIP-8 interpreter: &lt;a href=&quot;http://web.archive.org/web/20190819144645/http://laurencescotford.co.uk/wp-content/uploads/2013/08/CHIP-8-Interpreter-Disassembly.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://web.archive.org/web/20190819144645/http://laurencescotford.co.uk/wp-content/uploads/2013/08/CHIP-8-Interpreter-Disassembly.pdf&lt;/a&gt; (interestingly, CLS does not wait for an interrupt)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What is still unclear to me is whether this means that each individual &lt;code&gt;DRAW&lt;/code&gt; instruction will wait for a full frame, or just that they will stall execution until the vertical blanking area is reached?&lt;/p&gt;&#xA;&lt;p&gt;In other words, suppose I have a sequence of &lt;code&gt;DRAW&lt;/code&gt; instructions. Will the first one stall the bytecode interpreter until we reach vblank and then they all will execute quickly, or will the first one take a full 1/60th of a second, then the second one will take another 1/60th of a second, and so on? Does that mean it is impossible to change more than one 8x16 rectangle of the screen per frame?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: hopeful clarification of my question: suppose I have the following sequence of instructions:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DRAW v0 v1 1&#xA;DRAW v0 v1 1&#xA;...&#xA;DRAW v0 v1 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;60 times total. Is this going to take a whole second on the original CHIP-8, or is this going to take until the end of the current frame and then however long it takes to change these 60 bytes?&lt;/p&gt;&#xA;&lt;p&gt;(If it matters, my angle for this question is that I am working on a book where one of the chapters implements a CHIP-8 machine on an FPGA. So there are at least two goals here:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I'd like to describe the &lt;em&gt;intended&lt;/em&gt; behaviour of the &lt;code&gt;DRAW&lt;/code&gt; instruction properly&lt;/li&gt;&#xA;&lt;li&gt;I'd like to implement &lt;code&gt;DRAW&lt;/code&gt; such that it is compatible with the existing corpus of CHIP-8 software.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="115" LastEditorUserId="115" LastEditDate="2020-07-24T12:35:51.270" LastActivityDate="2020-07-24T15:39:58.923" Title="`DRAW` instruction timing" Tags="&lt;emulation&gt;&lt;video&gt;&lt;chip-8&gt;&lt;rca-1802&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15723" PostTypeId="2" ParentId="15721" CreationDate="2020-07-24T14:49:28.437" Score="3" Body="&lt;p&gt;From the question, I think you already understand the basic function of the &lt;code&gt;DMACON&lt;/code&gt; registers. In a nutshell, any form of DMA has to be enabled under software control by the programmer. This because the DMA transfers are meaningless until the programmer has first setup the buffers of data, and associated pointer registers, that will be used by the DMA controller to transfer memory. So, &lt;code&gt;DMACON&lt;/code&gt; is a critical register touched by most Amiga software as the &amp;quot;trigger&amp;quot; for starting to draw a sprite, or playback an audio sample, or make use of the Blitter/Copper, all of which rely on DMA channels to do their actual work.&lt;/p&gt;&#xA;&lt;p&gt;As far as this register being some form of &amp;quot;key&amp;quot; to unlock the potential extension of the Amiga architecture, I don't see that as being the case. Fundamentally, the Amiga's DMA controller is &lt;em&gt;one sub-system of the larger memory control/access system&lt;/em&gt; comprised of the DMA controller, the custom chip peripherals, and the CHIP RAM memory, specifically. The 3 are designed to work together as a system, and this leaves us two fundamental ways to extend the Amiga's capabilities. Either:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Add an enhanced processor that is superior to the Amiga's own DMA at transferring data buffers into, out of, or around CHIP RAM memory. This augments what the custom chip peripherals can then do with the data buffers.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Add an external whole system that brings its own memory and peripherals, plus processing capabilities, that are superior to those provided by the Amiga's whole system of DMA+peripherals+CHIP RAM.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;A simple example of number #1 is any good 68K accelerator. Something like a 50 MHz 68030 can out-perform the Amiga's Blitter, plus it can do blit operations between FAST and CHIP RAM buffers, which the Amiga's own Blitter could never do. It is common practice on accelerated Amiga's to supplant Intuition's use of the Amiga Blitter, and just use the CPU to move bitmaps around in memory for better performance.&lt;/p&gt;&#xA;&lt;p&gt;An example of number #2 is an RTG (Re-targetable Graphics) card, like the CyberVision 3D. The card is comprised of a full system with its own S3 Virge graphics processor, its own video output peripheral, and its own VRAM. Being a newer/faster/more specialized piece of hardware, it can out-perform the Amiga graphics system in a number of key metrics. Most notably, it has the memory bandwidth for high-resolution, high-color displays exceeding the Amiga chipset.&lt;/p&gt;&#xA;&lt;p&gt;Since &lt;code&gt;DMACON&lt;/code&gt; is really just a small aspect of controlling the overall chipset &amp;quot;system&amp;quot;, it has no key role to play when extending the Amiga in the ways described above.&lt;/p&gt;&#xA;&lt;p&gt;Is there a third way which involves updating the chipset to make the whole system better? Sure, as that is what &lt;strong&gt;Ranger/ECS/AGA/Hombre&lt;/strong&gt; all endeavored to do. The point is these are system-wide approaches and the big key is more/faster CHIP RAM and enhanced peripherals. Without those, there is really nothing new for the DMA controller to do on its own.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-07-24T20:49:07.760" LastActivityDate="2020-07-24T20:49:07.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15724" PostTypeId="1" CreationDate="2020-07-24T15:29:43.150" Score="5" ViewCount="588" Body="&lt;p&gt;I have often heard or read the expression, &amp;quot;&lt;strong&gt;code is written once but read many times&lt;/strong&gt;&amp;quot;. I think this is a fairly well-known principle of software development. But I have no idea with whom to credit with the notion.&lt;/p&gt;&#xA;&lt;p&gt;Its not hard to find references which use it, but I don't think I've ever seen a citation or credit given. It could be someone well known (e.g., Donald Knuth? Douglas Hofstadter? &amp;quot;Gang of Four&amp;quot;?) or less well known but &lt;em&gt;deserving recognition&lt;/em&gt; for the insight.&lt;/p&gt;&#xA;&lt;p&gt;Examples of usage:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Code is read much more often than it is written&lt;/em&gt;, so plan accordingly...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20070406-00/?p=27343&quot; rel=&quot;nofollow noreferrer&quot;&gt;Raymond Chen article&lt;/a&gt; )&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;...the ratio of &lt;em&gt;time spent reading versus writing&lt;/em&gt; is well over 10 to 1.&#xA;We are constantly reading old code as part of the effort to write new code.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(&lt;a href=&quot;https://www.goodreads.com/quotes/835238-indeed-the-ratio-of-time-spent-reading-versus-writing-is&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Wording varies, but its the same idea.&lt;/p&gt;&#xA;&lt;p&gt;I guess its possible that the original statement of this idea predates computer programming. Artifacts such as cooking recipes, circuit diagrams, architectural plans, etc. probably share the same principle. But still, someone had to eventually recognize the application to source code and write about it or otherwise popularize the idea.&lt;/p&gt;&#xA;" OwnerUserId="11795" LastEditorUserId="56" LastEditDate="2020-07-24T23:48:04.763" LastActivityDate="2020-07-24T23:48:04.763" Title="Who are we quoting when we note that &quot;Code is written once but read many times&quot;?" Tags="&lt;history&gt;" AnswerCount="1" CommentCount="14" FavoriteCount="1" ClosedDate="2020-07-25T02:57:50.617" ContentLicense="CC BY-SA 4.0" />
  <row Id="15725" PostTypeId="2" ParentId="15722" CreationDate="2020-07-24T15:39:58.923" Score="4" Body="&lt;p&gt;The WAIT instruction will wait until the next interrupt received by the processor, and the CHIP8 implementation that was shown is designed for use with a CDP1861 video timing control chip that generates an interrupt shortly before the beam reaches the area where the visible portion of the display should start.  The interrupt handler needs to save some registers and set up register 0 so that by the time the control chip asserts the DMA-read wire, it is pointing at the first line of video.  This will clock out eight bytes, stalling the CPU for eight cycles out of a fourteen-cycle scan line (most instructions take two cycles).  The six remaining cycles of the line will (enough to run three cycles) typically be used to reload register 0 with the address it had before clocking out those eight bytes, so the line will be displayed a second time.  The next three instructions will reload the register a second time, and the next three will reload it a third time.  The three instructions after that will check whether the display is done and loop if not, allowing register 0 to point to data for the next line.&lt;/p&gt;&#xA;&lt;p&gt;I'm not a fan of the design of the CDP1861, since the design is hard coded to activate DMA for eight cycles on each of 128 scan lines, and it provides no useful information about where the display is being scanned other than an interrupt which occurs a hard-coded distance before the start of DMA, and a pulse which occurs a hard-coded distance before the first and last line of DMA.  If the DMA start and stop were under CPU control, and the device allowed the CPU to select when interrupts occurred, that would allow programs to trade off screen height for memory usage and CPU time.  Additionally, something like an eight-digit display could avoid having to spend memory on a bitmap to hold the the complete shapes for all eight digits, instead being able to blank the display for a couple scan lines while it prepares an eight-byte buffer with the first byte of each shape, show the buffer twice, blank for two scan lines while loading the buffer with the second byte of each shape, show the buffer twice, etc.  If one were using a five-line font, this would make it possible to produce a six-line by eight-character display using 48 bytes to hold the text characters, rather than having to use 256 bytes (half of some computers' memory!) to hold a 64x32 bitmap.  Such tricks can be managed to some extent even with the 1861 as it exists, but being able to execute only three instructions per scan line instead of seven is a severe limitation.&lt;/p&gt;&#xA;&lt;p&gt;As it is, however, the design does make it rather simple to determine how long the system will wait, since there can only be one interrupt source (interrupt timing needs to be very precise for the system to work).  Any WAIT instruction will stall the CPU until the beam reaches a spot a few lines above the displayed portion of the frame, at which point the CPU will run the interrupt handler until the beam has reached the bottom of the displayed portion, whereupon execution will resume with the instruction following the WAIT.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-07-24T15:39:58.923" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15726" PostTypeId="2" ParentId="15724" CreationDate="2020-07-24T17:05:32.470" Score="10" Body="&lt;p&gt;I don't have a definitive answer (I doubt anybody can--any citation is subject to others finding older citations), but the first time I heard it pointed out frequently was when Ada 83 was being designed.&lt;/p&gt;&#xA;&lt;p&gt;Although it doesn't say it quite the same way, the &lt;a href=&quot;http://archive.adaic.com/standards/83lrm/html/lrm-01-03.html&quot; rel=&quot;noreferrer&quot;&gt;Ada 83 Language Reference Manual&lt;/a&gt; (LRM) does say:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The need for languages that promote reliability and simplify maintenance is well established. Hence emphasis was placed on program &lt;strong&gt;readability over ease of writing&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;[emphasis added]&lt;/p&gt;&#xA;&lt;p&gt;Although it's stating it slightly differently, this clearly reflects the same basic idea.&lt;/p&gt;&#xA;&lt;p&gt;At the same time, it makes clear that this is not a new observation--that it is already &amp;quot;well established&amp;quot;. As such, I'd guess there's at least a decent chance of somebody finding a still older reference to at least the same general idea, if not identical wording.&lt;/p&gt;&#xA;&lt;p&gt;I suppose there's also room for question about exactly how close to the same something has to be to qualify as an older reference. Just for example, in the preface to &lt;em&gt;Algorithms + Data Structures = Programs&lt;/em&gt;, Niklaus Wirth mentions:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This is particularly true of the relatively involved and long examples of programs. Their inclusion in this book is not accidental. Longer programs are the &amp;quot;normal&amp;quot; case in practice, and they are much more suitable for exhibiting that elusive but essential ingredient called style and orderly structure. They are also meant to serve as exercises in the art of program &lt;em&gt;reading&lt;/em&gt;, which too often is neglected in favor of program writing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This doesn't specifically mention how much/often code is read vs. written, but clearly points toward the fact that he viewed reading code as having greater importance than it often treated as having.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;Algorithms + Data Structures = Programs&lt;/em&gt;, Niklaus Wirth, 1976&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2020-07-24T17:31:23.877" LastActivityDate="2020-07-24T17:31:23.877" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15727" PostTypeId="1" AcceptedAnswerId="15729" CreationDate="2020-07-24T20:17:33.037" Score="2" ViewCount="209" Body="&lt;p&gt;On the Intel 8080, all conditional instructions have varying execution time depending on whether the condition is true or not, except conditional jumps. Why is this?&lt;/p&gt;&#xA;&lt;p&gt;The Intel 8085 changes this; there, all conditional instructions are faster in cycles (but not necessarily in states), and conditional jumps now have varying execution time too, with the 8080 cycles/states being the worst case (ie. if the condition is true).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/components/intel/8085/9800301C_8080_8085_Assembly_Language_Programming_Manual_Nov78.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel 8085 Programming Manual&lt;/a&gt; partly answers this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Execution of conditional instructions on the 8085 differs from the 8080. The 8080 fetches all three instruction bytes whether or not the condition is satisfied. The 8085 evaluates the condition while it fetches the second instruction byte. If the specified condition is not satisfied, the 8085 skips over the third instruction byte and immediately fetches the next instruction. Skipping the unnecessary byte allows for faster execution.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So on the 8080, all conditionals fetch the third byte regardless of whether the condition is satisfied, but this doesn't really answer why all conditionals on the 8080 vary in execution time except jumps. Obviously jumps are much quicker to execute than calls and returns; if a conditional call or return is true, stack manipulation is needed. But how can setting the PC for a jump be done in &amp;quot;zero time&amp;quot;? What is the technical reason for that?&lt;/p&gt;&#xA;&lt;p&gt;I noted that later on the manual says the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Notice that two sets of cycle/state specifications are given for 8085 conditional call and jump instructions. This is because the 8085 fetches the third instruction byte only if it is actually needed; i.e., the specified condition is satisfied.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'm not sure why it mentions conditional call here, since that also had varying execution time on the 8080; conditional returns also have two sets of cycle/state specifications on the 8085 for obvious reasons.&lt;/p&gt;&#xA;" OwnerUserId="15661" LastActivityDate="2020-07-25T03:40:30.697" Title="Execution time for conditional jumps on the Intel 8080" Tags="&lt;8080&gt;&lt;8085&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15729" PostTypeId="2" ParentId="15727" CreationDate="2020-07-25T03:32:30.483" Score="2" Body="&lt;p&gt;&lt;em&gt;I'm not really clear what the underlaying problem/question is, as you already cite all relevant information to answer waht seams to be the question. Thus it's hard to give a straight answer, meaning I have to 'swing along' - so maybe lets start with an&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Instruction Overview&lt;/h2&gt;&#xA;&lt;p&gt;To start with, let's look at the cycle data:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;                      8080               8085&#xA;Branching             Cycles/States      Cycles/States&#xA;Instruction   Bytes   Taken  Not-Taken   Taken  Not-Taken&#xA;JMP             3     3/10   ---         3/10   ---&#xA;Jcond           3     3/10   3/10        3/10   2/7 &#xA;CALL            3     5/17   ---         5/18   ---&#xA;Ccond           3     5/17   3/11        5/18   2/9&#xA;RET             1     3/10   ---         3/10   ---&#xA;Rcond           1     3/11   1/5         3/12   1/6&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Notable here that Intel summarises all PC changing instruction (these plus &lt;code&gt;RST&lt;/code&gt; and &lt;code&gt;PCHL&lt;/code&gt;) under &lt;em&gt;Branching Instructions&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;Principle Operation (8080)&lt;/h2&gt;&#xA;&lt;p&gt;To understand a 80-style (*1) CPU working it's important to keep in mind that it's organized as&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(1) Instruction cycle, execution of a single instruction, consisting of&lt;/li&gt;&#xA;&lt;li&gt;(1..5) Machine cycle(s) (Mx), each doing one memory access, read or write (*2), consisting of&lt;/li&gt;&#xA;&lt;li&gt;(3..5) Clock cycles (Tx), called T(ransition)-states, made up from&lt;/li&gt;&#xA;&lt;li&gt;Two non overlapping clocks Phi1/Phi2 (*3)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For this we can ignore the Phi1/2 clocks - they are only relevant if one wants to dissect how registers are loaded (*4).&lt;/p&gt;&#xA;&lt;p&gt;Within an instruction the machine cycles are simply numbered in order as M1..M5. There are 10 types (*5). For branching only 5 are relevant:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Instruction Fetch&lt;/li&gt;&#xA;&lt;li&gt;Memory Read&lt;/li&gt;&#xA;&lt;li&gt;Memory Write&lt;/li&gt;&#xA;&lt;li&gt;Stack Read&lt;/li&gt;&#xA;&lt;li&gt;Stack Write&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Further it's helpful to have a look at the internal structure:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NnDC5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NnDC5.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Taken from p.4-2 of the 1979 MCS-80/85 Family User's Manual)&lt;/p&gt;&#xA;&lt;p&gt;Please not the yellow marked registers, especially &lt;code&gt;W&lt;/code&gt; and &lt;code&gt;Z&lt;/code&gt; but as well &lt;code&gt;TMP&lt;/code&gt; and the buffers.&lt;/p&gt;&#xA;&lt;h3&gt;M1 Cycle&lt;/h3&gt;&#xA;&lt;p&gt;The first M-cycle is always instruction fetch and execution and takes 4/5 clock cycles. 3 to fetch the opcode, one or two to perform the operation.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;T1 - Output Address Word (&lt;code&gt;PC&lt;/code&gt;) and Status Word&lt;/li&gt;&#xA;&lt;li&gt;T2 - Increment &lt;code&gt;PC&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;T3 - Read Opcode&lt;/li&gt;&#xA;&lt;li&gt;T4 - Execute (always)&lt;/li&gt;&#xA;&lt;li&gt;T5 - Execute (some instructions)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Interesting for timing considerations is T4/T5. They cover are 3 different workings.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Only T4, No operation. Usually with instructions loading data later on.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Only T4 for internal operation. For example all ALU operation load &lt;code&gt;A&lt;/code&gt; into the &lt;code&gt;ALU latch&lt;/code&gt;, the ones using register as second operand load it into &lt;code&gt;TMP&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;T4 and T5 for internal operation. For example move instructions between registers move the source register content in T4 into &lt;code&gt;TMP&lt;/code&gt; and in T5 into destination register.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;M1-and-a-halve Cycle&lt;/h2&gt;&#xA;&lt;p&gt;A detail often overlooked is that the 8080 does do pipelining. All single byte ALU (*6) operations (i.e. with no operand or a register operand) will be finished in T2 of the following M1 (fetch) cycle, as the ALU result will only then be copied into &lt;code&gt;A&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;M2 Cycle&lt;/h3&gt;&#xA;&lt;p&gt;Depending on the instruction this will read/write memory and optional increment the &lt;code&gt;PC&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;T1 - Output Address to Buffer:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;PC&lt;/code&gt;, when reading a second instruction byte&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;HL&lt;/code&gt; for all instructions using memory addressing (&lt;code&gt;ADD M&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SP&lt;/code&gt; in case of stack instructions (PUSH/POP/CALL/RET)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;BC&lt;/code&gt; or DE in case of STAX/LDAX&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;T2 - Address Increment/Decrement&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Increment &lt;code&gt;PC&lt;/code&gt; when &lt;code&gt;PC&lt;/code&gt; addressing was used&lt;/li&gt;&#xA;&lt;li&gt;Increment/Decrement &lt;code&gt;SP&lt;/code&gt; when &lt;code&gt;SP&lt;/code&gt; addressing was used&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;em&gt;(To simplify from here on only what's relevant for branches)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;T3 - Read/write data&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For 16 bit addresses (&lt;code&gt;JMP&lt;/code&gt;/&lt;code&gt;Jxx&lt;/code&gt;/&lt;code&gt;CALL&lt;/code&gt;/&lt;code&gt;Cxx&lt;/code&gt;) move data into &lt;code&gt;Z&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;For stack load (&lt;code&gt;RET&lt;/code&gt;/&lt;code&gt;Rxx&lt;/code&gt;) the value loaded into the low part of the destination register - &lt;code&gt;PCL&lt;/code&gt; in case of RET.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;M3 Cycle&lt;/h3&gt;&#xA;&lt;p&gt;Much like M2, now for the second byte&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;T1 - Output Address to Buffer:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;PC&lt;/code&gt;, when reading a third instruction byte&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;SP&lt;/code&gt; in case of stack instructions (RET)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;T2 - Address Increment/Decrement&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Increment &lt;code&gt;PC&lt;/code&gt; when &lt;code&gt;PC&lt;/code&gt; addressing was used&lt;/li&gt;&#xA;&lt;li&gt;Increment/Decrement &lt;code&gt;SP&lt;/code&gt; when &lt;code&gt;SP&lt;/code&gt; addressing was used&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;T3 - Read/write data&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For 16 bit addresses (in instructions, addressed by PC) move data into &lt;code&gt;W&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;For stack load (&lt;code&gt;RET&lt;/code&gt;) the value loaded into the low part of the destination register - &lt;code&gt;PCH&lt;/code&gt; in case of &lt;code&gt;RET&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For &lt;code&gt;RET&lt;/code&gt;/&lt;code&gt;Rxx&lt;/code&gt; the instruction ends here, as PC is now prepared to fetch the next instruction (usually the one after &lt;code&gt;CALL&lt;/code&gt;/&lt;code&gt;Cxx&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;h3&gt;M3-and-a-halve Cycle&lt;/h3&gt;&#xA;&lt;p&gt;Finishing of a &lt;code&gt;JMP&lt;/code&gt;/&lt;code&gt;Jxx&lt;/code&gt; instruction is again pipelined into the following instructions. The address collected in &lt;code&gt;WZ&lt;/code&gt; is outputted in the T1 of M1 of the following cycle (instead of &lt;code&gt;PC&lt;/code&gt;) and is send via the incrementer into &lt;code&gt;PC&lt;/code&gt; in T2 (&lt;code&gt;WZ+1-&amp;gt;PC&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;h3&gt;M4/M5 Cycle (only &lt;code&gt;CALL&lt;/code&gt;/&lt;code&gt;Cxx&lt;/code&gt;)&lt;/h3&gt;&#xA;&lt;p&gt;As the &lt;code&gt;PC&lt;/code&gt; now holds the next instruction after &lt;code&gt;CALL&lt;/code&gt;/&lt;code&gt;Cxx&lt;/code&gt;, it only needs to be pushed:&lt;/p&gt;&#xA;&lt;p&gt;M4:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;T1 - Output Address to Buffer:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;SP&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;T2 - Increment&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Decrement &lt;code&gt;SP&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;T3 - Write data&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Write &lt;code&gt;PCH&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Repeated for M5 with &lt;code&gt;PCL&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;M5-and-a-halve Cycle&lt;/h3&gt;&#xA;&lt;p&gt;Like jumps before (M3 1/2) calls pipeline into the following instructions. Address outputted in the T1 of M1 of the following cycle is provided by &lt;code&gt;WZ&lt;/code&gt; instead of &lt;code&gt;PC&lt;/code&gt;, and in T2  &lt;code&gt;WZ&lt;/code&gt; is send via the incrementer into &lt;code&gt;PC&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;Conclusions&lt;/h2&gt;&#xA;&lt;p&gt;It's easy to see that conditional calls and returns to not (and should not) perform any stack access. Thus T4/T5 for &lt;code&gt;Cxx&lt;/code&gt; and T2/T3 for &lt;code&gt;Rxx&lt;/code&gt; will not be executed - saving 3 T-sates each (6 total).&lt;/p&gt;&#xA;&lt;h2&gt;Changes with the 8085&lt;/h2&gt;&#xA;&lt;p&gt;While the 8085 in general does everything like the 8080, branch as well as stack instructions have changed in timing. Relevant here are two three:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Conditional jumps (&lt;code&gt;Jxx&lt;/code&gt;) now skip fetching the second address byte&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Cxx&lt;/code&gt; skips as well fetching the second address byte&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CALL&lt;/code&gt;/&lt;code&gt;Cxx&lt;/code&gt;/&lt;code&gt;Rxx&lt;/code&gt;/&lt;code&gt;RST&lt;/code&gt; now have an M1 cycle of 6 T-sates&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The skipping the second byte of a conditional jump/call is possible due a modification enabeling the incrementer to increment by two as well.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Now for the question&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;On the Intel 8080, all conditional instructions have varying execution time depending on whether the condition is true or not, except conditional jumps. Why is this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The savings are only for stack related branching instructions (&lt;code&gt;Cxx&lt;/code&gt;/&lt;code&gt;Rxx&lt;/code&gt;) as it wouln't be a good idea to manipulate the stack if they are not taken (see &amp;quot;Conclusion&amp;quot; above) .&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Intel 8085 changes this; there, all conditional instructions are faster in cycles (but not necessarily in states)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, they are not. They are in fact one cycle slower - which is offset by saving 3 cycles (M3) &lt;strong&gt;only when not taken&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So on the 8080, all conditionals fetch the third byte regardless of whether the condition is satisfied, but this doesn't really answer why all conditionals on the 8080 vary in execution time except jumps.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because of no stack operations (see above)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But how can setting the PC for a jump be done in &amp;quot;zero time&amp;quot;? What is the technical reason for that?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By using &lt;code&gt;WZ&lt;/code&gt; to address the target instruction and loading &lt;code&gt;PC&lt;/code&gt; only afterwards (for free after incrementing &lt;code&gt;WZ&lt;/code&gt;). See the pipelining part above.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm not sure why it mentions conditional call here, since that also had varying execution time on the 8080&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because there's a second set only valid for the 8085?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - 8080/8085/Z80 and most derivative&lt;/p&gt;&#xA;&lt;p&gt;*2 - There are exceptions&lt;/p&gt;&#xA;&lt;p&gt;*3 - If this sounds similar to a 6502, than it's because two non overlapping clocks deliver 4 edges, the basic building block of many CPUs. The main difference is that the 8080 needs an external clock generator (8224), while 6502 and 8085 got it build in.&lt;/p&gt;&#xA;&lt;p&gt;*4 - As so often, Ken Shirriff provides a great in &lt;a href=&quot;http://www.righto.com/2013/03/register-file-8085.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;depth analysis&lt;/a&gt; of the 8085 register set and its detailed workings (basically applicable for the 8080 as well). Including an easy example down to the separate clocks. Go there for all fancy details - I'll rather stay at the surface for this.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Cycles are marked by the status word, outputted on the data line during T1 of M1 (marked by Sync).&lt;/p&gt;&#xA;&lt;p&gt;*6 - There are as well other like XCHG, EI/DI or HALT.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-07-25T03:40:30.697" LastActivityDate="2020-07-25T03:40:30.697" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15730" PostTypeId="2" ParentId="15708" CreationDate="2020-07-25T07:36:39.323" Score="2" Body="&lt;h2&gt;DESQview&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9qav5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9qav5.png&quot; alt=&quot;https://upload.wikimedia.org/wikipedia/en/d/d7/DESQview_2.8_screenshot.png&quot; /&gt;&lt;/a&gt;&lt;br&gt;&lt;sup&gt;&#xA;By Source (WP:NFCC#4), Fair use, &lt;a href=&quot;https://en.wikipedia.org/w/index.php?curid=47603601&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/w/index.php?curid=47603601&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;DESQview was not a GUI - it was text-based window shell running on top of DOS and worked with &amp;quot;well behaved&amp;quot; text mode programmes.  BBSs were a good example.  Later versions could also switch between graphical apps but only in fullscreen mode.&lt;/p&gt;&#xA;&lt;p&gt;It could run on a 8086 CPU as well as 80286, given sufficient memory.&lt;/p&gt;&#xA;&lt;p&gt;Further details at &lt;a href=&quot;https://en.wikipedia.org/wiki/DESQview&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/DESQview&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Downside - with text-only mode, a paint-type programme would have been unlikely.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;A similar candidate, but with IBM heritage would be &lt;strong&gt;IBM TopView&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tq7fV.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tq7fV.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;br&gt;&lt;sup&gt;By Source, Fair use, &lt;a href=&quot;https://en.wikipedia.org/w/index.php?curid=21834109&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/w/index.php?curid=21834109&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;More information at &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_TopView&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/IBM_TopView&lt;/a&gt; but it feels very similar to Deskview hence combining both into the same answer.&lt;/p&gt;&#xA;" OwnerUserId="3754" LastActivityDate="2020-07-25T07:36:39.323" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15731" PostTypeId="2" ParentId="15716" CreationDate="2020-07-25T09:25:30.093" Score="5" Body="&lt;p&gt;You can actually generate a &amp;quot;spurious interrupt&amp;quot; condition on the Atari ST with its MFP (68901) - Not on purpose, but rather because of a glitch in the Motorola 68901 - If you disable interrupts on the MFP exactly at the point when the CPU starts an  IACK cycle (i.e with the last instructions before the /INT), it will not provide a vector, the CPU will run into the &amp;quot;Spurious interrupt&amp;quot; condition.&lt;/p&gt;&#xA;&lt;p&gt;This has apparently been mis-used (exploited?) in various ST demos.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2020-07-25T09:25:30.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15733" PostTypeId="1" CreationDate="2020-07-25T13:35:39.983" Score="27" ViewCount="8308" Body="&lt;p&gt;The Wikipedia article &lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_(job_description)&quot; rel=&quot;noreferrer&quot;&gt;Computer (job description)&lt;/a&gt; says that before the invention of electronic computers, the term &amp;quot;computer&amp;quot; used to refer to people who worked as &amp;quot;computers&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;My question is: what did the &amp;quot;programs&amp;quot; that &amp;quot;human computers&amp;quot; executed look like, and were the &amp;quot;programs&amp;quot; written using a &amp;quot;programming language&amp;quot;, and were the &amp;quot;programs&amp;quot; written on a piece of paper?&lt;/p&gt;&#xA;" OwnerUserId="18890" LastEditorUserId="7118" LastEditDate="2020-07-26T04:49:46.027" LastActivityDate="2020-07-26T20:50:16.080" Title="What did the &quot;programs&quot; that &quot;human computers&quot; executed look like?" Tags="&lt;history&gt;" AnswerCount="6" CommentCount="14" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15735" PostTypeId="2" ParentId="15733" CreationDate="2020-07-25T14:13:08.930" Score="38" Body="&lt;p&gt;Partial answer:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://crgis.ndc.nasa.gov/historic/Human_Computers&quot; rel=&quot;noreferrer&quot;&gt;This&lt;/a&gt; article describes one flavour in more detail:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;While the specific tasks a computer did varied according to need and her department, the majority of computing work involved three components: reading film, running calculations, and plotting data. During wind tunnel tests, manometer boards measured pressure changes using liquid-filled tubes. Computers “read” photographic films of the manometer readings, and recorded the data on worksheets. Working one on one for an engineer, or collectively in a computing section, computers then ran different types of calculations to analyze the data, and plotted the results on graph paper. All this work was done by hand, using slide rules, curves, magnifying glasses and basic calculating machines, like the Marchant or the more popular Friedan, which could multiply AND calculate square roots. Once completed, the calculations, graphs and other information were checked for accuracy and sent back to the engineers to design the next tests.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So I'd assume someone explained them what to do, and they had worksheets for the calculations with instructions what to calculate.&lt;/p&gt;&#xA;&lt;p&gt;And if you look at the first picture in &lt;a href=&quot;https://www.history.com/news/human-computers-women-at-nasa&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; article, you can see a lot of paper on the desk, some tacked together, so I'd assume these would be the worksheets.&lt;/p&gt;&#xA;&lt;p&gt;You don't need some &amp;quot;programming language&amp;quot; to tell a human what to do. A human needs reminders about details, but they don't have to be in a specific form.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-07-25T14:13:08.930" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15736" PostTypeId="2" ParentId="15733" CreationDate="2020-07-25T14:50:05.640" Score="10" Body="&lt;p&gt;The human computers did not follow &amp;quot;programs&amp;quot;  when carrying out their computations.  However, they probably followed established algorithms for deriving results.  If they weren't all following consistent algorithms,  it would have been next to impossible to aggregate the work of multiple computers together.  The human computers would have thought of these algorithms as things that they learned,  and not as things that they parsed, compiled, and then executed blindly.&lt;br /&gt;&#xA;The reason programs were developed when early computers came on the scene is that their machines did not learn the way humans did. They proceeded from one computation to the next in strict obedience to what the program was telling them to do,  and not based on an understanding of what they were doing.&#xA;The idea of learning as an activity that might itself be programmed goes way back to the nineteenth century, and thinkers like Ada Lovelace.  But these ideas were not the basis for most of the programs written in the 1950s or 1960s.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2020-07-25T14:50:05.640" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15738" PostTypeId="2" ParentId="15733" CreationDate="2020-07-25T23:05:42.643" Score="15" Body="&lt;p&gt;Here is a brief description of the task carried out by one human computer, Sylvia Asquith:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;After joining in 1947, I received instruction on running a tidal&#xA;machine, stopping at the correct moment and reading off the time&#xA;showing at the zero point, and noting down high and low waters in&#xA;succession. Times done first and the high and low to correspond. Also,&#xA;you need to check the data when taking over from someone else in case&#xA;they had got it a day out. All the wheels and pulleys are connected by&#xA;a fine gold wire and represent forces of the moon and sun on the tide&#xA;&lt;a href=&quot;http://www.bidstonobservatory.org.uk/asquith-speech/&quot; rel=&quot;noreferrer&quot;&gt;http://www.bidstonobservatory.org.uk/asquith-speech/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I had the privilege to meet Sylvia and, on a different occasion, hear her lovely singing voice. She was a computer who worked on an &lt;strong&gt;analog&lt;/strong&gt; tide-predicting machine.&lt;/p&gt;&#xA;&lt;p&gt;I've also seen one of the actual machines which is still preserved I believe. Here is a picture.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Doodson-Légé machine&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2vxPG.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2vxPG.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://historicsealevel.wordpress.com/tag/doodson/&quot; rel=&quot;noreferrer&quot;&gt;https://historicsealevel.wordpress.com/tag/doodson/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18612" LastEditorUserId="15772" LastEditDate="2020-07-26T10:03:10.813" LastActivityDate="2020-07-26T10:03:10.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15740" PostTypeId="1" CreationDate="2020-07-26T00:34:00.487" Score="2" ViewCount="212" Body="&lt;p&gt;Could the &lt;a href=&quot;http://www.binarydinosaurs.co.uk/Museum/STC/&quot; rel=&quot;nofollow noreferrer&quot;&gt;STC Executel&lt;/a&gt; possibly have had any games available ?&lt;/p&gt;&#xA;&lt;p&gt;It had a very small inbuilt CRT screen on the right side.&lt;/p&gt;&#xA;&lt;p&gt;It looked somehow impressive with how it displayed things on the screen, a very small inbuilt CRT which did somehow display everything like a full size CRT.       Maybe the small size of the CRT screen merely gave the illusion of high capability (by displaying everything like a full size CRT).&lt;/p&gt;&#xA;&lt;p&gt;So, I was wondering if there was any possibility that there may have been any games somehow available for this machine, since it would be interesting to see it's graphics capabilities.&lt;/p&gt;&#xA;&lt;p&gt;I doubt there would have been any games, and since not even the specs of the machine(s) are available, I doubt any games would be found.&lt;/p&gt;&#xA;" OwnerUserId="16462" LastEditorUserId="6659" LastEditDate="2020-07-27T01:00:45.357" LastActivityDate="2020-07-27T01:00:45.357" Title="Could the STC Executel possibly have had any games available?" Tags="&lt;hardware&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15741" PostTypeId="1" CreationDate="2020-07-26T04:01:03.070" Score="18" ViewCount="5175" Body="&lt;p&gt;We all know that various ports of Pac-Man exist but my question is just for one specific computer. Could the Spectrum, with time and proper knowledge, run the Arcade version of Pac-Man despite it's Z80 processor running a 3.5 MHZ?&lt;/p&gt;&#xA;&lt;p&gt;Let's assume that everything has been optimized perfectly and there are zero mistakes in the code.&lt;/p&gt;&#xA;&lt;p&gt;How well, in a side by side comparison, will the Z80 compare to the arcade release? I won't even attempt to program it until some time (I.E I will be OLD when i do) has passed.&lt;/p&gt;&#xA;" OwnerUserId="18896" LastEditorUserId="18896" LastEditDate="2020-07-28T23:24:29.223" LastActivityDate="2020-07-29T07:04:02.667" Title="Could Pac-Man be replicated perfectly on the ZX Spectrum?" Tags="&lt;zx-spectrum&gt;&lt;arcade&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15742" PostTypeId="2" ParentId="15741" CreationDate="2020-07-26T04:41:52.997" Score="65" Body="&lt;p&gt;Both the Sinclair ZX Spectrum and the Pac-Man arcade machine used the Zilog Z 80 CPU.&lt;/p&gt;&#xA;&lt;p&gt;Pac-Man's display was slightly larger and vertical at 224×288 while the Speccy's was horizontal at 256×192.&lt;/p&gt;&#xA;&lt;p&gt;The Speccy did not have hardware sprites or pixel-addressable colours.&lt;/p&gt;&#xA;&lt;p&gt;The original 48K Speccy only had &amp;quot;1 bit&amp;quot; beeper sound though later models had an AY sound chip. The arcade machine had a Namco PSG sound chip.&lt;/p&gt;&#xA;&lt;p&gt;But if you're willing to scale down the graphics just a tiny bit and put up with a bit of colour clash when different coloured things are too close to each other, you should actually be able to port the Pac-Man arcade ROM code to work on the Spectrum hardware.&lt;/p&gt;&#xA;&lt;p&gt;No need though since &lt;a href=&quot;https://simonowen.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Simon Owen&lt;/a&gt; already did exactly that nearly a decade ago:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=PbpdMDWueqE&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TXSx6.png&quot; alt=&quot;Simon Owen's ZX Spectrum Pac-Man&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's not a port. You need to provide the Pac-Man arcade board's ROMs. It runs the ROM code and just emulates the hardware differences. As a nice coincidence he just released &lt;a href=&quot;https://simonowen.com/spectrum/pacemuzx/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the first update in four years&lt;/a&gt; this March.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;By the way:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I just discovered that somebody has actually done the opposite of this too. &lt;a href=&quot;http://wosland.podgamer.com/new-old-times/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The early Spectrum classic game Manic Miner was converted to run on original Pac-Man arcade hardware!&lt;/a&gt; Also almost a decade ago.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-07-29T07:04:02.667" LastActivityDate="2020-07-29T07:04:02.667" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="15743" PostTypeId="2" ParentId="15740" CreationDate="2020-07-26T05:13:11.757" Score="3" Body="&lt;p&gt;Looking at the specs from your &lt;a href=&quot;http://www.binarydinosaurs.co.uk/Museum/STC/&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CPU: AMD 8085&#xA;RAM: 32K&#xA;ROM: 32K&#xA;GPU: Plessey MR9735-02 (Viewdata processor)&#xA;  with 1K page memory RAM&#xA;Modem: Philips SAA5070 &amp;quot;LUCY&amp;quot;&#xA;Monitor: 5&amp;quot; integrated&#xA;Keyboard: integrated&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;that's plenty to run games.&lt;/p&gt;&#xA;&lt;p&gt;Still, I doubt that games did exist, because&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;they built 10,000 but only sold 5000&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;so the volume was too low, and if they didn't have documentation about the system like for other homecomputers at that time, nobody would sit down and write some.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, it had &lt;a href=&quot;https://en.wikipedia.org/wiki/Prestel&quot; rel=&quot;nofollow noreferrer&quot;&gt;Prestel&lt;/a&gt; access, and Prestel offered &lt;a href=&quot;https://www.historytoday.com/history-matters/prestel-british-internet-never-was&quot; rel=&quot;nofollow noreferrer&quot;&gt;on-line games&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So maybe that counts.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;since it would be interesting to see it's graphics capabilities&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I can give you some more information about the graphics capabilities. The 9735 is a typical chip used for the Videotex variants (of which the UK Prestel system is one). The datasheet can be found &lt;a href=&quot;https://datasheetspdf.com/pdf-file/547042/GECPlesseySemiconductors/MR9730/1&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Summary:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;24 row x 40 character&#xA;96 alphanumeric characters&#xA;64 graphics shapes, contigous or separated&#xA;7 colors + black&#xA;double height characters&#xA;special graphics (one bit for each 6 dots in line of char)&#xA;  6x18 for each char&#xA;half page operation&#xA;cursor in 8th bit of page store&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So any game would use the alphanumeric characters and the graphics shapes. While one can display arbitrary graphics, 1K RAM is not enough to make use of that for larger parts of the display.&lt;/p&gt;&#xA;&lt;p&gt;Which means games would have a blocky style, but animations (in the sense of &amp;quot;moving&amp;quot; characters) should still be possible. It's not clear how quickly the 1K page memory RAM can be accessed from the main CPU, so there may be restrictions on how fast the screen can be updated.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-07-26T06:13:50.900" LastActivityDate="2020-07-26T06:13:50.900" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15744" PostTypeId="1" CreationDate="2020-07-26T05:31:10.847" Score="1" ViewCount="207" Body="&lt;p&gt;So appearently there's a Red Hat Linux Enterprise 5.1 and I'd just like to make it clear that I'm not trying to install that. I'm trying to install the original Red Hat Linux 5.1 from 1998 in a virtual machine for use in a project.&lt;/p&gt;&#xA;&lt;p&gt;I tried VirtualBox first, and during installation I got multiple errors regarding the architecture. Some google searches taught me that VirtualBox has trouble emulating Linux 2.1, and I would need to set up VirtualBox on a 32-bit system. I don't have a good enough 32-bit system to run VirtualBox, and I'd rather use my 64-bit system for the better monitor and specs anyways.&lt;/p&gt;&#xA;&lt;p&gt;So I tried QEMU. After a three hour journey that consumed my night, I have concluded that while Red Hat does install in QEMU, X can only be used in the cierra VGA mode at 16 colors. Any other VGA mode and X throws an error lack of memory, even if I'm simply at 640x480 with with 16 colors. The cierra mode CAN use more then 16 colors, but doing so causes fonts to render poorly and the cursor to render invisible. I don't want to go into specifics, but for the project I will need at least 640x480 with more then 16 colors.&lt;/p&gt;&#xA;&lt;p&gt;What is the best way, then, to emulate Red Hat Linux 5.1 while getting more then 16 colors? Alternatively, how can I get RHL running in QEMU with more then 16 colors? I should also mention that running on real hardware is not an option. While I do have period-accurate machines that can run 5.1, I need to be able to take advantage of features from my modern PC (such as fast internet access, and not having to constantly use USB thumb drives or floppy disks) for this project to go successfully. If nothing else, is there at least another old version of Linux that will run the Enlightenment Window Manager that can be emulated in QEMU with more then 16 colors.&lt;/p&gt;&#xA;" OwnerUserId="18736" LastEditorUserId="6659" LastEditDate="2020-07-27T00:02:04.907" LastActivityDate="2020-07-27T00:02:04.907" Title="What is the best way to run Red Hat Linux 5.1 (the original version) with more than 640x480 with with 16 colors resolution?" Tags="&lt;linux&gt;" AnswerCount="0" CommentCount="6" ClosedDate="2020-07-26T13:33:22.663" ContentLicense="CC BY-SA 4.0" />
  <row Id="15745" PostTypeId="2" ParentId="15733" CreationDate="2020-07-26T12:25:08.237" Score="5" Body="&lt;p&gt;A chapter in Richard Feynman's autiobiography, &amp;quot;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0393355624&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Surely You're Joking Mr. Feynman&lt;/a&gt; describes a room full of computers working for the atomic scientists at Los Alamos.&lt;/p&gt;&#xA;&lt;p&gt;I don't remember all of the details, but part of the &amp;quot;program&amp;quot; involved cards that were passed from station to station, and the person at each station had specific instructions about which numbers from each card they were supposed to combine in which specific ways, and where they were supposed to write the result before passing the card to the person at the next station.&lt;/p&gt;&#xA;&lt;p&gt;I somewhat vaguely remember that there might have been more than one kind of card, with different instructions for each kind. I definitely remember him saying that there were cards of different colors that got inserted into the process as corrections when mistakes were discovered.&lt;/p&gt;&#xA;" OwnerUserId="588" LastActivityDate="2020-07-26T12:25:08.237" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15747" PostTypeId="2" ParentId="15681" CreationDate="2020-07-26T16:37:09.207" Score="0" Body="&lt;p&gt;In Microsoft-based BASIC interpreters, the primary limitation with direct mode was the fact that the same buffer is used for inputting BASIC lines as for input within a program (e.g. the &lt;code&gt;INPUT&lt;/code&gt; statement and the &lt;code&gt;GET&lt;/code&gt; statement).  If one were to perform e.g. &lt;code&gt;INPUT A$&lt;/code&gt; in direct mode, then once the input was complete, the buffer would be left holding the text that was input, rather than the immediate-mode line.  I don't think there would have been any particular difficulty designing &lt;code&gt;GET&lt;/code&gt; to store the new character someplace else (since it would only be a single byte), but I suspect that &lt;code&gt;INPUT&lt;/code&gt; and &lt;code&gt;GET&lt;/code&gt; share a routine that takes a string stored in the input buffer and copies it to garbage-collected string space; sharing that routine wouldn't avoid the need to have the &lt;code&gt;GET&lt;/code&gt; function set the length to a hard-coded value of 1, but would avoid the need have it include its own code to set the source address.  Even with that design, &lt;code&gt;GET&lt;/code&gt; could probably have been made to support immediate mode if it did something like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;lda InputBufferStart&#xA;pha&#xA;jsr handleGet&#xA;pla&#xA;sta InputBufferStart&#xA;rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;but that would made the interpreter 12 bytes bigger for relatively minor benefit.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;FOR&lt;/code&gt; loop construct that saves the start-of-loop address doesn't need to use the input buffer, and thus has no difficulty with direct mode.  Constructs that would need to GOTO the direct-mode line wouldn't work, of course, but otherwise the only constructs that are problematic in direct mode are those that would use the input buffer.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-07-26T16:37:09.207" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15748" PostTypeId="2" ParentId="15733" CreationDate="2020-07-26T19:42:30.923" Score="32" Body="&lt;p&gt;Every ship at sea carried such a human computer, in the person of the navigator.  He followed a number of such &amp;quot;programs&amp;quot;, properly termed &lt;em&gt;algorithms&lt;/em&gt;, taken from Nathaniel Bowditch's seminal work &lt;em&gt;The [American] Practical Navigator&lt;/em&gt;.  Here is a two-page spread from a 1940 edition of that work:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XfBQz.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XfBQz.jpg&quot; alt=&quot;Bowditch&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a worksheet, containing labelled spaces as an aid to correctly performing each algorithm, rather than a complete description of the algorithms themselves.  The navigator would prepare copies of this worksheet in advance of need, rather than writing in the book itself, and would be familiar enough with the algorithm to be able to follow it using only the worksheet and the various lookup tables that it referenced.  Here is part of one such lookup table:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/scXQF.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/scXQF.jpg&quot; alt=&quot;Trigonometry&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For an actual algorithm we must look earlier in the book; this describes not only the mathematical operations required, but also the means of taking measurements upon which the calculations are based:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yt2a2.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yt2a2.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-07-26T19:42:30.923" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15749" PostTypeId="2" ParentId="15733" CreationDate="2020-07-26T19:44:37.787" Score="12" Body="&lt;p&gt;Human computers did execute &amp;quot;programs&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;The programs were written (typed up) instructions that included a sequence of steps, such as what numbers to take off which line on a worksheet, what operations to perform, where to put results back on a worksheet, what to do next (including &amp;quot;loops&amp;quot;, e.g. repeat n time, or for the number of items in a column on the worksheet.)&lt;/p&gt;&#xA;&lt;p&gt;The &amp;quot;programs&amp;quot; were written up by the scientists (essentially programmers). The room full of (most often) women would be trained to follow these instructions, and their work was sometimes duplicated by another &amp;quot;computer&amp;quot; for error-checking/fault-tolerance.&lt;/p&gt;&#xA;&lt;p&gt;Why do I know? My mother claims to have done this as a grad student at U.C. Berkeley during WWII.  Also, see the book &amp;quot;When Computers were Human&amp;quot;, by D. Grier.&lt;/p&gt;&#xA;&lt;p&gt;All done on paper, and later after the industrial revolution, on mechanical calculators.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2020-07-26T20:50:16.080" LastActivityDate="2020-07-26T20:50:16.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15750" PostTypeId="2" ParentId="14452" CreationDate="2020-07-27T21:28:46.973" Score="0" Body="&lt;p&gt;1985, it could have easily been any IBM PC equipped with a Hercules Monochrome Graphics card. More likely, however (as you said this was on IBM premises), the machines capable of displaying the full APL character set were &lt;a href=&quot;https://en.wikipedia.org/wiki/PC-based_IBM-compatible_mainframes#Personal_Computer_XT/370&quot; rel=&quot;nofollow noreferrer&quot;&gt;XT-370&lt;/a&gt;, mixed-mode beasts consisting of a PC/XT, a terminal emulator and dual-Motorola 68000 for the emulation.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2020-07-27T21:28:46.973" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15751" PostTypeId="2" ParentId="14452" CreationDate="2020-07-27T22:46:24.790" Score="3" Body="&lt;p&gt;Some 3270 terminals supported an optional &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/ibm/3278/GA33-3056-0_3270_Information_Display_System_Color_and_Programmed_Symbols_3278_3279_3287_Sep1979.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Programmed Symbols&lt;/a&gt; feature, allowing the use of arbitrary character bitmaps. This was available on the 3279 Color Display Station (models 2B and 3B), the 3278 Display Station (models 2, 3 and 4) and the 3270 PC (with the Programmed Symbols card).&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2020-07-27T22:46:24.790" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15752" PostTypeId="1" AcceptedAnswerId="15753" CreationDate="2020-07-28T03:31:09.807" Score="3" ViewCount="1124" Body="&lt;p&gt;In the aftermath of &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15741&quot;&gt;the question about running the arcade Pac-Man ROM on a Sinclair ZX Spectrum&lt;/a&gt; I discovered that about the same time that was done, somebody else did the reverse, porting a classic Spectrum game to run on the original Pac-Man arcade hardware: &lt;a href=&quot;http://wosland.podgamer.com/new-old-times/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pac Manic Miner Man&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;p&gt;In the eight years since, the original site/page for it has disappeared but the link via which I discovered this includes &lt;a href=&quot;http://worldofstuart.excellentcontent.com/pacminer.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link to the ROM&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I thought that I could just rename it to pacman.zip and place it in the MAME roms folder and that MAME would warn me that the checksums didn't match but would then give me an option to run it anyway. It does tell me the checksums are wrong but I can't find any way to get it to ignore that and run the game anyway.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FBXva.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FBXva.png&quot; alt=&quot;MAME checksum errors&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm using the regular mame64 version for Windows 10 straight from the &lt;a href=&quot;https://www.mamedev.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MAME homepage&lt;/a&gt;. I've pored over the commandline options. I've looked at &lt;a href=&quot;https://github.com/mamedev/mame/issues&quot; rel=&quot;nofollow noreferrer&quot;&gt;MAME's issues on GitHub&lt;/a&gt;. I've gone through all the options menus and I've wasted quite a bit of time Googling for solutions. Since MAME has been around for over twenty years and has changed a lot over that time it's a bit hard to home in on current stuff actually.&lt;/p&gt;&#xA;&lt;p&gt;But there must be a way to achieve this. Surely people would use this when finding new game variants or when making new games for old arcade hardware, &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14113&quot;&gt;which I've read is a thing&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3290" LastActivityDate="2021-02-04T10:18:06.330" Title="How can I get MAME to run modified ROMs whose checksums don't match the originals?" Tags="&lt;emulation&gt;&lt;rom&gt;&lt;arcade&gt;&lt;mame&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15753" PostTypeId="2" ParentId="15752" CreationDate="2020-07-28T10:19:28.337" Score="7" Body="&lt;p&gt;There's probably some obscure way to do it in the GUI... But it behaves exactly like you want it to if you just run MAME from the command line with the target machine as an argument.&lt;/p&gt;&#xA;&lt;p&gt;In &lt;code&gt;cmd.exe&lt;/code&gt; or a similar shell:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;c:\Program Files\MAME&amp;gt;mame64.exe pacman&#xA;pacman.6e WRONG CHECKSUMS:&#xA;    EXPECTED: CRC(c1e6ab10) SHA1(e87e059c5be45753f7e9f33dff851f16d6751181)&#xA;       FOUND: CRC(11dee14e) SHA1(1aeb94299a33daa9b51fdab3c0abea98858cc7dd)&#xA;pacman.6f WRONG CHECKSUMS:&#xA;    EXPECTED: CRC(1a6fb2d4) SHA1(674d3a7f00d8be5e38b1fdc208ebef5a92d38329)&#xA;       FOUND: CRC(8c449bd7) SHA1(84233296683321f71fdef604ca19bfffd97e993c)&#xA;pacman.6h WRONG CHECKSUMS:&#xA;    EXPECTED: CRC(bcdd1beb) SHA1(8e47e8c2c4d6117d174cdac150392042d3e0a881)&#xA;       FOUND: CRC(a0e62570) SHA1(654a71144eae3c78d7baaeb9119aad0ece500e60)&#xA;pacman.6j WRONG CHECKSUMS:&#xA;    EXPECTED: CRC(817d94e3) SHA1(d4a70d56bb01d27d094d73db8667ffb00ca69cb9)&#xA;       FOUND: CRC(c71c0011) SHA1(1ceaf73df40e531df3bfb26b4fb7cd95fb7bff1d)&#xA;pacman.5e WRONG CHECKSUMS:&#xA;    EXPECTED: CRC(0c944964) SHA1(06ef227747a440831c9a3a613b76693d52a2f0a9)&#xA;       FOUND: CRC(9b3cc7cd) SHA1(9bfb71e71f7f61e26d23e6370d684cdc6c910899)&#xA;pacman.5f WRONG CHECKSUMS:&#xA;    EXPECTED: CRC(958fedf9) SHA1(4a937ac02216ea8c96477d4a15522070507fb599)&#xA;       FOUND: CRC(c1b2dc90) SHA1(3a089696bab9f3ff39e09c84117d22b861ddec40)&#xA;WARNING: the machine might not run correctly.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;After which it lets you start it anyway.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JaAWz.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JaAWz.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15661" LastActivityDate="2020-07-28T10:19:28.337" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15754" PostTypeId="2" ParentId="1976" CreationDate="2020-07-28T13:50:10.597" Score="3" Body="&lt;p&gt;The &lt;a href=&quot;http://www.computinghistory.org.uk/det/35673/Olympia-People/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Olympia People computer&lt;/a&gt; had a fully-redefinable character set.  This was used to implement the 'national character support' its marketing touted.  While a colour display with graphical add-in card was an optional extra the machine shipped by default with only a text mode.&lt;/p&gt;&#xA;&lt;p&gt;IIRC font data was stored at $E4000 in memory with 32 bytes per character, although the default CRT controller was setup to only use half of those to display a 8x16 cells.  The text-mode screen stored character/attribute pairs from $E0000.  With its ability to produce four intensity levels on its monochrome monitor it was capable of very reasonable displays.&lt;/p&gt;&#xA;&lt;p&gt;The startup screen that prompts for the boot drive shows this feature in action.  The 'People' logo and surrounding box are actually characters $80+ (the 128 characters after the ASCII range) with a custom font loaded:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/DmFJO.jpg&quot; alt=&quot;Olympia People computer at boot screen&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="14972" LastEditorUserId="4025" LastEditDate="2021-01-06T16:31:28.197" LastActivityDate="2021-01-06T16:31:28.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15755" PostTypeId="2" ParentId="1976" CreationDate="2020-07-28T14:04:41.527" Score="4" Body="&lt;p&gt;The big value-add feature advertised for the Hercules Graphics Card &lt;em&gt;Plus&lt;/em&gt; was &lt;em&gt;RamFont&lt;/em&gt;, or re-definable character sets. Custom characters could be uploaded into the card, and rendered as part of a 3072 character set. (In contrast to the 256 fixed characters of the MDA, CGA, and original Hercules cards).&lt;/p&gt;&#xA;&lt;p&gt;Driver support was available to use this feature in a few key applications of the time... at least Lotus 1-2-3 and Microsoft Word. (The original DOS version.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/stream/198610ByteMagazineVol1111InsideTheIBMPC/198610%20Byte%20Magazine%20Vol%2011-11%20Inside%20the%20IBM%20PC#page/n259/mode/2up/search/RAMfont&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/stream/198610ByteMagazineVol1111InsideTheIBMPC/198610%20Byte%20Magazine%20Vol%2011-11%20Inside%20the%20IBM%20PC#page/n259/mode/2up/search/RAMfont&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4522" LastActivityDate="2020-07-28T14:04:41.527" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15756" PostTypeId="1" AcceptedAnswerId="15757" CreationDate="2020-07-28T20:07:15.207" Score="4" ViewCount="166" Body="&lt;p&gt;Is this an IDE or something completely different. Could it be used to connect gotek?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ftt1l.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ftt1l.jpg&quot; alt=&quot;CN13 CDTV Rev 2.2.1&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-07-28T23:14:37.227" Title="What is the interface of the proprietary memory card connector in CDTV" Tags="&lt;hardware&gt;&lt;hardware-mods&gt;&lt;amiga-cdtv&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15757" PostTypeId="2" ParentId="15756" CreationDate="2020-07-28T21:26:54.853" Score="6" Body="&lt;p&gt;That's &lt;a href=&quot;https://archive.org/details/CDTV_Service_Manual_1991-05_Commodore/page/n23/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;CN13&lt;/a&gt;. The pins are documented &lt;a href=&quot;http://www.hardwarebook.info/CDTV_Memory_Card&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and have address and data lines as you would expect for memory, not the &lt;a href=&quot;https://old.pinouts.ru/HD/InternalDisk_pinout.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;signals&lt;/a&gt; you would need for  a floppy drive.&lt;/p&gt;&#xA;&lt;p&gt;I would connect a Gotek to the DB-23 connector on the rear panel.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2020-07-28T23:14:37.227" LastActivityDate="2020-07-28T23:14:37.227" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15758" PostTypeId="1" AcceptedAnswerId="15759" CreationDate="2020-07-28T14:47:25.333" Score="6" ViewCount="252" Body="&lt;p&gt;In the IBM PC 5150 documentation, it is stated that the floppy drive has 40 tracks, 8 sectors/track and 512 bytes/sectors, for a total of 163 840 bytes of data. It makes sense, 40x8x512 = 163 840 bytes. Ok. It is also said that a floppy drive has 45 cylinders...&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CF4J6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CF4J6.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt; (page 2-110 from the IBM 5150 Technical Reference, 1st. edition)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/0NORp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0NORp.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt; (page 2-104 from the IBM 5150 Technical Reference, 1st. edition)&lt;/p&gt;&#xA;&lt;p&gt;(both manuals available from &lt;a href=&quot;https://www.pcjs.org/documents/manuals/ibm/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pcjs.org/documents/manuals/ibm/&lt;/a&gt; )&lt;/p&gt;&#xA;&lt;p&gt;How is it possible? How can the number of cylinders be different from the number of tracks? What happens if I want to access cylinder 42 when there are only 40 tracks?&lt;/p&gt;&#xA;&lt;p&gt;I thought cylinders were tracks on top of the others, there should be the same number of tracks as cylinders, shouldn't there? Or are there 45x8x512 = 184 320 bytes, but 163 840 usable and some tracks are disabled? I suppose this is not the case because the address mode would have been THS for Track/Head/Sector instead of CHS.&lt;/p&gt;&#xA;" OwnerUserId="18922" OwnerDisplayName="Adrien" LastEditorUserId="3290" LastEditDate="2020-07-29T13:54:25.203" LastActivityDate="2020-07-29T13:54:25.203" Title="How can the number of cylinders be different from the number of tracks?" Tags="&lt;hardware&gt;&lt;floppy-drive&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15759" PostTypeId="2" ParentId="15758" CreationDate="2020-07-29T11:51:40.747" Score="8" Body="&lt;p&gt;As far as I can tell, &lt;a href=&quot;http://www.minuszerodegrees.net/manuals/IBM_5150_Technical_Reference_6025005_AUG81.pdf&quot; rel=&quot;noreferrer&quot;&gt;the first edition of the IBM 5150 Technical Reference&lt;/a&gt; is the only IBM manual which mentions 45 cylinders. Few Technical References document the FDC, which is where the “45 cylinder” mention appears, but those that do, other than the 5150 first edition, don’t reproduce this — see for example &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/pc/xt/1502237_PC_XT_Technical_Reference_Apr83.pdf&quot; rel=&quot;noreferrer&quot;&gt;the first edition of the IBM 5160 Technical Reference&lt;/a&gt;, page 1-167.&lt;/p&gt;&#xA;&lt;p&gt;This suggests that it could have been a mistake (and indeed, it’s impossible to use 45 tracks on a 5.25” drive).&lt;/p&gt;&#xA;&lt;p&gt;I initially thought that another explanation could be that the section mentioning 45 cylinders is documenting the FDC’s limits, but the FDC isn’t limited to 45 cylinders, and the text seems to me to be specifying a disk format.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-07-29T12:56:57.137" LastActivityDate="2020-07-29T12:56:57.137" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15760" PostTypeId="2" ParentId="15758" CreationDate="2020-07-29T12:49:56.070" Score="5" Body="&lt;p&gt;Floppy disk drives could usually mechanically access more than 40 tracks, but only 40 were actually used, &amp;quot;formatted&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;First track is on the outer edge of the disk, there is a detector than signals when the disk head has reached the edge. Other tracks are reached by moving by a known number of phases a stepping motor.&lt;/p&gt;&#xA;&lt;p&gt;Simple drives use &amp;quot;CAV&amp;quot; = Constant Angular Velocity : The disk turns always at the same speed. Combined with the fact that all tracks have the same number of sectors, data on outer tracks is occupying more area, which makes these tracks more reliable. Even if a drive could phycically access up to 45 tracks, inner tracks can be too short to be reliably used.&lt;/p&gt;&#xA;&lt;p&gt;A bit more recent drives such as Macintosh floppies or CDs use variable motor speed (&amp;quot;Constant Linear Velocity&amp;quot;) and different number of sectors per track to compensate from differing track lenghts (and in CDs data starts from the innermost part of the disk to support different diameters).&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2020-07-29T12:49:56.070" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15761" PostTypeId="1" AcceptedAnswerId="15762" CreationDate="2020-07-29T13:53:30.097" Score="3" ViewCount="374" Body="&lt;p&gt;I have Ubuntu 20.04 and Dosbox 0.74-3. Is is possible to install GUI for this dosbox? Can one install C compiler for this box?&lt;/p&gt;&#xA;" OwnerUserId="18923" LastEditorUserId="15334" LastEditDate="2021-02-18T15:07:23.793" LastActivityDate="2021-02-18T15:07:23.793" Title="Dosbox with C-compiler and gui" Tags="&lt;dosbox&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2020-07-29T18:51:23.410" ContentLicense="CC BY-SA 4.0" />
  <row Id="15762" PostTypeId="2" ParentId="15761" CreationDate="2020-07-29T15:38:48.137" Score="7" Body="&lt;ul&gt;&#xA;&lt;li&gt;For the GUI: you can run Windows 3.1 in a Dosbox.&lt;/li&gt;&#xA;&lt;li&gt;For a C compiler: you can use any C compiler of the era, for example Watcom C, djgpp, or Borland C.&lt;/li&gt;&#xA;&lt;li&gt;For an IDE: Borland C had a quite good character IDE.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="129" LastActivityDate="2020-07-29T15:38:48.137" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15763" PostTypeId="1" CreationDate="2020-07-29T16:10:48.713" Score="4" ViewCount="397" Body="&lt;p&gt;I have a fairly decent computer, and I have been messing around with DS Emulation recently. I have found that if a game is running on the emulator, and if I have anything else running, the performance of the emulation drops like a rock (And the sound gets all crackly, too). I used to think this shouldn't have happened because my computer is &lt;strong&gt;WAY&lt;/strong&gt; more powerful than a DS. But recently, I did a little research and I found out the DS is based around an ARM CPU? Could the fact that I'm emulating ARM on a x64 machine be the cause of why it is so slow when I have anything else running?&lt;/p&gt;&#xA;" OwnerUserId="18252" LastActivityDate="2020-07-29T16:10:48.713" Title="What is it with DS emulation being so slow?" Tags="&lt;emulation&gt;&lt;nintendo-ds&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15764" PostTypeId="1" CreationDate="2020-07-29T21:06:23.870" Score="2" ViewCount="230" Body="&lt;p&gt;Hard Drivin' is a classic Atari video game released in the arcades and then ported to many home systems.&lt;/p&gt;&#xA;&lt;p&gt;How does the game engine work? How is the world data handled, how is collision detection done etc? I'm asking for a general description of its internal workings.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="3290" LastEditDate="2020-07-30T02:11:00.230" LastActivityDate="2020-07-30T02:11:00.230" Title="How does the Hard Drivin' game engine work?" Tags="&lt;atari&gt;&lt;arcade&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15765" PostTypeId="1" CreationDate="2020-07-29T21:18:29.423" Score="2" ViewCount="122" Body="&lt;p&gt;I know that every year there are still at least a couple of new games for old systems like VIC-20, C64, Amiga, different ZX Spectrum and Amstrad variants, DOS, different games consoles, and so on, some of them even commercial. Is there any data about the market share of modern games for retro machines? Said with other words, for which vintage systems a new game will have the biggest audience?&lt;/p&gt;&#xA;&lt;p&gt;This might be related to the total amount of units of each system sold, but I think that it is not mandatory to be in a such way. It is possible some systems produced in greater numbers to be not as suitable for games like other systems produced in lower numbers. The existence of emulators also may change the things, by making the numbers of the real system not so important as its actual capabilities. Another factor which I think that have to be considered is the eventual legal issues of distributing a game for an old system if the company which owns it still exists.&lt;/p&gt;&#xA;" OwnerUserId="15096" OwnerDisplayName="bobeff" LastEditorUserId="15096" LastEditDate="2020-07-30T13:05:37.020" LastActivityDate="2020-07-30T13:05:37.020" Title="Is there any statistical data about the modern vintage games marketshare by system?" Tags="&lt;gaming&gt;&lt;game-consoles&gt;" AnswerCount="0" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15766" PostTypeId="1" AcceptedAnswerId="15768" CreationDate="2020-07-30T12:34:50.160" Score="1" ViewCount="192" Body="&lt;p&gt;I am working on coding a driver of sorts for a Z80 based computer I am making. I am compiling with SDCC and I have been getting the following?&lt;/p&gt;&#xA;&lt;p&gt;ASlink-Warning-Undefined Global 'data' referenced by module 'main'&lt;/p&gt;&#xA;&lt;p&gt;I am essentially trying to access a c variable (function parameter) through inline assembly without messing with the stack (I would prefer solutions that don't involve the stack, but if that is the only way I would greatly appreciate you explaining how to do this and how it works with as much detail as possible and do an example for me). I am currently trying to use something like this:&#xA;ld A, (varname)&#xA;and it is throwing the error above.&lt;/p&gt;&#xA;&lt;p&gt;I appreciate your help in advance :)&lt;/p&gt;&#xA;&lt;p&gt;Edit:&#xA;A bit more info: I am compiling for the Z80 Processor and I am using the SDCC compiler on MacOS. The command I am using is: sdcc -mz80 --no-std-crt0 --vc --code-loc 0x0 src/main.c&lt;/p&gt;&#xA;&lt;p&gt;And here is the code that is causing the error. It is in a file called pio.c and is connected to pio.h which I have attached to my main code by an include statement.&lt;/p&gt;&#xA;&lt;p&gt;Pio.c:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;quot;../../include/stdint.h&amp;quot;&#xA;#include &amp;quot;pio.h&amp;quot;&#xA;&#xA;typedef struct pio&#xA;{&#xA;    uint8_t portA;&#xA;    uint8_t portB;&#xA;    void (*init)(char reg, uint8_t control);&#xA;    void (*load)(char reg, uint8_t data);&#xA;} PIO;&#xA;void init(char reg, uint8_t control){&#xA;    switch(reg){&#xA;        case 'A':&#xA;            __asm&#xA;                LD iy,#2&#xA;                ADD iy,sp&#xA;                LD A, 1(iy)&#xA;                OUT (0x13), A /*Output register a to the address 0000000000010011 */&#xA;            __endasm;&#xA;            break;&#xA;        case 'B':&#xA;            __asm&#xA;                OUT (0x9), A  /*Output register a to the address 000000000001001*/&#xA;            __endasm;&#xA;            break;&#xA;    }&#xA;}&#xA;void load(char reg, uint8_t data){&#xA;    switch(reg){&#xA;        case 'A':&#xA;             __asm&#xA;                mov A, data&#xA;                OUT (0x12), A /*Output register a to the address 0000000000010010*/&#xA;            __endasm;&#xA;            break;&#xA;        case 'B':&#xA;             __asm&#xA;                LD A, (IX)&#xA;                OUT (0x8), A /*Output register a to the address 0000000000010000*/&#xA;            __endasm;&#xA;            break;&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And here is Pio.h&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/*&#xA; * pio.h&#xA; *&#xA; *  Created on: 2020. 7. 28.&#xA; *      Author: me&#xA; *      LIB_PIO_PIO_H_&#xA; */&#xA;&#xA;#ifndef PIO_H&#xA;#define PIO_H&#xA;#include &amp;quot;pio.c&amp;quot;&#xA;&#xA;extern void init(char reg, uint8_t control);&#xA;extern void load(char reg, uint8_t control);&#xA;&#xA;#endif /* LIB_PIO_PIO_H_ */&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;An additional note, I know my first line of pio.c is for stdint in a higher folder. For some reason, the compiler won't see it if I just do a normal include, so I decided to copy all of the include files into my project directory. It is not great practice, but I just want it to work at this point.&lt;/p&gt;&#xA;" OwnerUserId="18704" LastEditorUserId="18704" LastEditDate="2020-07-30T13:51:03.240" LastActivityDate="2020-07-30T14:15:22.297" Title="Working on programming a retro z80 computer (SDCC error)" Tags="&lt;z80&gt;&lt;assembly&gt;&lt;c&gt;&lt;sdcc&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15767" PostTypeId="1" CreationDate="2020-07-30T13:19:48.600" Score="2" ViewCount="172" Body="&lt;p&gt;I wrote this arbitrary precision arithmetic utility on BSD in my postgraduate days, then after graduating ported it to DOS using TurboC. Was proud that it would do the same thing with 16bit word limits as it had done with 32. Later got a staff account for a university CMS IBM mainframe and started to port it there but had all sorts of compiler/runtime failures until a seasoned IBMer advised I change my function call symbols. &amp;quot;The function call names are clashing with your VM name space&amp;quot; I was told, so rename them or prefix them with an underscore or something else. The VM &amp;quot;D:&amp;quot; drive, its &amp;quot;filenames&amp;quot;, and the &amp;quot;executive text&amp;quot; files all lived in the same flat namespace.&lt;/p&gt;&#xA;&lt;p&gt;That was the end of portability to CMS, sadly, after I had carefully handled all the ASCII / EBCDIC mappings for the interpreter's scanner.&lt;/p&gt;&#xA;&lt;p&gt;Is CMS still alive and well, and is it still illegal to have a &amp;quot;C&amp;quot; function name identical to a file name?&lt;/p&gt;&#xA;" OwnerUserId="15798" LastActivityDate="2020-07-30T13:19:48.600" Title="Hitting the CMS Limits of Portable Code" Tags="&lt;c&gt;&lt;mainframe&gt;" AnswerCount="0" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="15768" PostTypeId="2" ParentId="15766" CreationDate="2020-07-30T14:15:22.297" Score="5" Body="&lt;p&gt;The problem is that you're trying to access the function parameter &lt;code&gt;data&lt;/code&gt;, but the compiler does not expose that as a symbol to the internal assembler, so it's looking in the public, global namespace for it -- and can't find it.&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://gist.github.com/Konamiman/af5645b9998c802753023cf1be8a2970&quot; rel=&quot;noreferrer&quot;&gt;SDCC - Interfacing with Z80 assembler code&lt;/a&gt;, you do indeed need to access the parameters from the stack. I don't know if there are options to the compiler to not push the function parameter on to the stack.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Parameters for the function are pushed to the stack before the&#xA;function is called. They are pushed from right to left, so the&#xA;leftmost parameter is the first one found when going up in the stack:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;char SumTwoChars(char x, char y) __naked&#xA;{&#xA;    __asm&#xA;    ld iy,#2&#xA;    add iy,sp ;Bypass the return address of the function &#xA;&#xA;    ld l,(iy)   ;x&#xA;    ld a,1(iy)  ;y&#xA;&#xA;    add l&#xA;    ld l,a      ;return value&#xA;&#xA;    ret&#xA;    __endasm;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-07-30T14:15:22.297" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15769" PostTypeId="1" CreationDate="2020-07-30T16:12:43.053" Score="6" ViewCount="303" Body="&lt;p&gt;The DEC VAX has a set of 256 instructions set aside for user addition via microcode edits. Were extension sets ever commercially produced and sold, or was this functionality mostly used in-house?&lt;/p&gt;&#xA;&lt;p&gt;Including links to documentation and software that uses the extension would be greatly appreciated, as well.&lt;/p&gt;&#xA;&lt;p&gt;For documentation on this range of instructions, check the 1987 VAX Architecture Reference Manual, page 101 (115 in most scans)&lt;/p&gt;&#xA;" OwnerUserId="11724" LastEditorUserId="11724" LastEditDate="2020-07-30T22:24:31.263" LastActivityDate="2020-09-22T17:06:15.603" Title="Were the VAX eXtended Function Control (XFC) instructions ever used commercially?" Tags="&lt;dec&gt;&lt;microcode&gt;&lt;vax&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15770" PostTypeId="2" ParentId="15522" CreationDate="2020-07-30T21:27:47.260" Score="-1" Body="&lt;p&gt;As voltage shows up on electron microscopes, somewhat, but you cannot see hidden layers.  ICs are getting more 3d.&lt;/p&gt;&#xA;" OwnerUserId="18927" LastActivityDate="2020-07-30T21:27:47.260" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15771" PostTypeId="2" ParentId="15769" CreationDate="2020-07-30T22:16:29.450" Score="3" Body="&lt;p&gt;Note:  Strictly speaking, my answer below doesn't answer the question asked, because what the OP was referring to was the instructions reserved for customer use, rather than those it reserved for DEC, which is what my reply was about.     The corrected version of my answer, for the &amp;quot;XFC&amp;quot; opcodes (with a prefix of hex 0xFC) would be &lt;em&gt;not as far as I know&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I think you may be referring to opcodes originally labeled &amp;quot;Reserved to DEC&amp;quot;.   There were 3 of them, ESCD, ESCE, and ESCF, where in hex were FD, FE, and FF.&lt;/p&gt;&#xA;&lt;p&gt;The later &lt;a href=&quot;http://www.itec.suny.edu/scsys/vms/OVMSDOC073/v73/4515/4515pro_contents_002.html#toc_chapter_10&quot; rel=&quot;nofollow noreferrer&quot;&gt;VAX Vector Architecture&lt;/a&gt; used ESCD as a prefix for two-byte opcode, but was only available on certain models, but I think this meets what you are looking for, but it wasn't just a microcode upgrade.&lt;/p&gt;&#xA;&lt;p&gt;Because of the byte-order convention on a VAX, these two-byte opcodes were generally listed as words with the FD at the end, rather than at the beginning.    For example: A1FD became VSMULL.&lt;/p&gt;&#xA;" OwnerUserId="10861" LastEditorUserId="10861" LastEditDate="2020-07-31T21:11:37.160" LastActivityDate="2020-07-31T21:11:37.160" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15772" PostTypeId="1" AcceptedAnswerId="15773" CreationDate="2020-07-30T23:19:24.943" Score="2" ViewCount="606" Body="&lt;p&gt;I keep telling to everyone who wants to hear it (or not) that my personal IT education as a kid in the 80s was superior to what kids are exposed to today (to the degree that I can observe that as a parent). While I know this must be wrong since we now have the Raspberry and YouTube and Arduinos, still, I don't sense the vibes that I had sensed back then. And I do not see teachers exposing the average kid to this tech. And IT courses, if existing, are Excel and Word - no programming, not even macros, with kids not being particularly eager to attend them, understandably.&lt;/p&gt;&#xA;&lt;p&gt;Have we lost something? Is it the extra complexity that has made us lose touch with the tech between generations? Or is there just so much more you can use the computers for that there is less time to change what the computer are doing? Or is it something social? Or ist it just me?&lt;/p&gt;&#xA;&lt;p&gt;Edit: I agree that this question can be barely more than an invite to pose better questions. I nevertheless liked the initial replies and hope that the community derives something that could somehow help those who are educating our youth - in or out of school.&lt;/p&gt;&#xA;" OwnerUserId="14971" LastEditorUserId="6659" LastEditDate="2020-08-05T16:14:48.090" LastActivityDate="2020-08-05T16:14:48.090" Title="Were the 80s more educational on IT?" Tags="&lt;history&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="1" ClosedDate="2020-07-31T16:08:01.990" ContentLicense="CC BY-SA 4.0" />
  <row Id="15773" PostTypeId="2" ParentId="15772" CreationDate="2020-07-31T02:30:04.457" Score="6" Body="&lt;h3&gt;Warning, Subjective &amp;amp; Location-based&lt;/h3&gt;&#xA;&lt;p&gt;This is a poor question in two ways - it is both subjective (how do you &amp;quot;value&amp;quot; learning about different computer languages, different types of hardware, etc.) and very much location based - even within the USA, the level of computer/IT education provided varied tremendously in the 80s - a typical school varied from no computers at all to a handful of Apple ][s or TRS-80s or minicomputer access for a small fraction of the students to use, to early attempts at computer education for every student.&lt;/p&gt;&#xA;&lt;p&gt;That being said, &lt;em&gt;I was there&lt;/em&gt;, in high school and college in the 80s, so I can provide &lt;em&gt;some&lt;/em&gt; relevant history.&lt;/p&gt;&#xA;&lt;p&gt;My high school was very small (it was so small...that the entire school could fit in one van). We had a few computers donated and/or loaned to the school and had some basic (and BASIC) programming courses. In my previous school (technically not relevant - 70s) I don't recall any computers available to the students, but I did take some summer computer classes at other area schools.&lt;/p&gt;&#xA;&lt;p&gt;I went on to major in computer science in college at the University of Maryland, College Park. At the time, the typical student (outside of computer science, engineering, etc.) might never touch a computer as part of their studies. There were terminal rooms around campus - originally just terminals connected to mainframes, but by the mid-80s many had IBM PCs as well. The typical business major might have one course in COBOL. Many students in other majors would have no computer courses at all. Even word processing was relatively unusual for most students. Yes, I wrote my papers on a computer - the same WordStar that I used to write software in non-document mode could write documents in document mode, but most students didn't.&lt;/p&gt;&#xA;&lt;p&gt;End result: The &lt;em&gt;average&lt;/em&gt; level of computer education in the 80s (at least where I was, through 1986) was extremely low by today's standards. Those students who &lt;em&gt;did&lt;/em&gt; have any hands-on computer education, at least beyond one &amp;quot;try it and see if you like it&amp;quot; course, likely ventured far deeper into real programming than today's average non-geek student. But those were not the average students, then or now.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2020-07-31T04:35:06.853" LastActivityDate="2020-07-31T04:35:06.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15774" PostTypeId="1" AcceptedAnswerId="15780" CreationDate="2020-07-31T07:51:01.253" Score="3" ViewCount="312" Body="&lt;p&gt;I would like to blank out a couple of lines between two given rasterlines. Above that I'm planning to have a scrolling background and sprites, below that is a textual info area.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bFnIx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bFnIx.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm thinking of a rasterline interrupt that turns on the blanking and a second one turning it off a couple of rasterlines later. Half-drawn characters and sprites should be covered by the bar. For this reason I cannot realize it with sprites, because the sprites are in use.&lt;/p&gt;&#xA;&lt;p&gt;For scrolling, the VIC chip provides the feature of increasing the borders, which covers scrolling artifacts, but this feature only works at the border.&#xA;Bit 4 of register $D011 provides a blank out feature, but this one only starts at rasterline 0 and blanking cannot be controlled to turn on/off during one frame.&lt;/p&gt;&#xA;&lt;p&gt;Any good idea how to realize this?&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="3290" LastEditDate="2020-07-31T08:00:22.827" LastActivityDate="2020-07-31T22:32:42.993" Title="Is there a way to blank out a portion of a screen on Commdore C64?" Tags="&lt;commodore-64&gt;&lt;graphics&gt;&lt;programming&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15776" PostTypeId="2" ParentId="15774" CreationDate="2020-07-31T09:45:38.920" Score="1" Body="&lt;p&gt;There may still be a way that you can use sprites to achieve this: If you have raster interrupt firing at the right time, then you can reprogram the sprites to cover the right area.&lt;/p&gt;&#xA;&lt;p&gt;Then your next interrupt will fire to turn the &amp;quot;blanking&amp;quot; back off. At this time you set the sprites to be what you need in the top area.&lt;/p&gt;&#xA;&lt;p&gt;This simple trick is known as sprite multiplexing.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;With judicious or clever graphical design, it might be unnecessary to do this. If you can set your background colour, attributes and the border colour all the same, and make sure that graphical data never gets written to this area, then you can safely switch to text mode when you need. But this depends on where your badlines are, exactly how tall you want the blank region, and so on.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2020-07-31T11:58:55.477" LastActivityDate="2020-07-31T11:58:55.477" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15777" PostTypeId="2" ParentId="15772" CreationDate="2020-07-31T12:01:27.473" Score="7" Body="&lt;p&gt;Personally I think this is a side effect of a much more general issue: the more access you have to &amp;quot;free stuff&amp;quot; the less people value it.&lt;/p&gt;&#xA;&lt;p&gt;I'm too old to have any first hard knowledge of the school system in the 1980s, but when I learned about computers you had to make an effort to borrow or buy &lt;em&gt;books&lt;/em&gt; (and later, magazines) and then put in the time and effort to read and understand them.&lt;/p&gt;&#xA;&lt;p&gt;These days, many so-called professional programmers think that all you have to do to write code is fire up Google and copy-and-paste random code snippets together until something &amp;quot;sort of works.&amp;quot; Cargo cult programming rules!&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2020-07-31T12:01:27.473" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15778" PostTypeId="1" AcceptedAnswerId="15783" CreationDate="2020-07-31T20:51:22.650" Score="5" ViewCount="339" Body="&lt;p&gt;&lt;strong&gt;Warning: There are flashing images below, do not scroll down if you are sensitive to them!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;According to various sources (for example &lt;a href=&quot;https://www.floodgap.com/retrobits/ckb/secret/264memory.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; for the Plus/4), both the C64 and Plus/4 have a &amp;quot;jiffy&amp;quot; clock, which ticks approximately every 1/60 sec. However, when I tried to use the jiffy clock in code, I found it strangely correlated with the screen refresh on Plus/4. Take &lt;a href=&quot;https://github.com/zivanfi/commodore-jiffy-test&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; ASM example in CA65 dialect, which changes the border color on every jiffy change (then changes it back after a short while):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.ifdef __C64__&#xA;    border_color = $d020&#xA;    jiffy_lsb = $a2 ; Jiffy clock LSB&#xA;.endif&#xA;.ifdef __PLUS4__&#xA;    border_color = $ff19&#xA;    jiffy_lsb = $a5 ; Jiffy clock LSB&#xA;.endif&#xA;&#xA;loop:&#xA;    lda jiffy_lsb&#xA;wait4jiffy:&#xA;    cmp jiffy_lsb&#xA;    beq wait4jiffy&#xA;&#xA;    inc border_color&#xA;&#xA;    ldx #$ff&#xA;simulate_workload:&#xA;    dex&#xA;    bne simulate_workload&#xA;&#xA;    dec border_color&#xA;&#xA;    jmp loop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I tested this in the VICE emulator. On a PAL C64, the placement of the colored range changes erratically (as expected), because the jiffy clock is 60Hz and the PAL screen refresh is 50Hz. The following screen recording is slowed down to reduce flashing and to make the pattern more visible:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MKGKU.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MKGKU.gif&quot; alt=&quot;C64 PAL&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;On an NTSC C64, the colored bar moves slowly and fluently (as expected), because the jiffy clock and the NTSC screen refresh are both around 60Hz, but are not exactly the same. The following screen recording is approximately real speed:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Sp8iG.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Sp8iG.gif&quot; alt=&quot;C64 NTSC&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;However, on a Plus/4, regardless of PAL/NTSC, the colored bar is completely stationary (apart from a tiny jitter). The following screen recordings are approximately real speed:&lt;/p&gt;&#xA;&lt;p&gt;Plus/4 PAL:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WaqGv.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WaqGv.gif&quot; alt=&quot;Plus/4 PAL&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Plus/4 NTSC:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aI0Hp.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aI0Hp.gif&quot; alt=&quot;Plus/4 NTSC&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;How is this possible?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Did I overlook something?&lt;/li&gt;&#xA;&lt;li&gt;Is this a bug in the VICE emulator?&lt;/li&gt;&#xA;&lt;li&gt;Is the jiffy clock tied to the screen refresh in the Plus/4 (making it 50Hz in the PAL model instead of the stated 60Hz)?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9064" LastEditorUserId="9064" LastEditDate="2020-08-01T09:08:36.723" LastActivityDate="2020-08-01T09:08:36.723" Title="Commodore Plus/4 jiffy clock tied to screen refresh frequency? (warning: flashing images)" Tags="&lt;assembly&gt;&lt;commodore&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15780" PostTypeId="2" ParentId="15774" CreationDate="2020-07-31T22:32:42.993" Score="4" Body="&lt;p&gt;I found a very compact solution that requires only two memory writes to enable the bar:&lt;/p&gt;&#xA;&lt;p&gt;It uses a combination of Extended Color Mode (ECM) with Bitmap Mode (BMM), which the VIC cannot display - it is going into some sort of blanking mode instead. This provides a good separation line for the scrolled characters. After a couple of rasterlines (I used 12) the normal text mode is turned back on. To avoid jumping of the lines, it is necessary to force a badline. Luckily this is done via the same register as for the ECM and bitmap mode, so the following code does the trick (raster1 is the rasterline where the blanking area starts):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;lda #$78 + ((raster1+1) &amp;amp; 7) ;turn on ECM and BMM and cause a badline at line raster1+1&#xA;sta $D011&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;As a welcome side effect, this also sets the 9th bit of the next raster line IRQ.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, the ECM+Bitmap blank does not cover the sprites, to cut off a sprite in mid-drawing I temporarily switch the screen pointer to a location where &lt;code&gt;SCREEN+$3f8&lt;/code&gt; are pointing to an empty sprite. Since there is no output of characters, the other content of the screen area does not matter. I used $0000 as screen address during blanking and had the empty sprite at $340 (so address $3f8 to $3ff contain $0d):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;lda #$05&#xA;sta $d018   ;change sprite pointers by switching screen&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That's it to start the blanking bar, two memory writes. To end the bar, I set these two addresses back after a couple of rasterlines. In my experiment, I used a rasterline IRQ to start blanking at line 150 (this is in the middle of a character) and ended the blanking bar in 162. The gray border showing in the picture is an additional effect that can be left out.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/akMo7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/akMo7.png&quot; alt=&quot;Example with a cut off sprite&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;One disadvantage is that the bar created with ECM+BMM is always black, but for my purpose this is acceptable.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-07-31T22:32:42.993" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15781" PostTypeId="2" ParentId="15778" CreationDate="2020-07-31T22:44:42.123" Score="2" Body="&lt;p&gt;The video timing is generated by the onboard crystal oscillator.&lt;/p&gt;&#xA;&lt;p&gt;On the C64, the 50/60 Hz clock comes from the stepped down mains frequency of the 9VAC from the transformer, so it ticks at whatever the current mains frequency happens to be.&lt;/p&gt;&#xA;&lt;p&gt;So the C64 clocks are asynchronous. It is not tied to screen refresh.&lt;/p&gt;&#xA;&lt;p&gt;The Plus/4 works differently, it does not use the mains frequency and it is tied to the screen refresh.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2020-08-01T07:51:28.527" LastActivityDate="2020-08-01T07:51:28.527" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15782" PostTypeId="1" AcceptedAnswerId="15784" CreationDate="2020-07-31T23:29:24.740" Score="1" ViewCount="149" Body="&lt;p&gt;Where are the missing signals that I can't pair between amiga external drive connector and gotek drive?&lt;/p&gt;&#xA;&lt;p&gt;I'd like to connect GOTEK to CDTV, there is a way to do it directly (caddy died), but I can't find schematics for cable. I found this, both CDTV (left) and Floppy (right), but not sure where are all the signals and how to wire it up.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n9Ni9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n9Ni9.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-08-01T07:53:55.287" Title="Help in finding signals on schematics" Tags="&lt;amiga&gt;&lt;floppy-drive&gt;&lt;new-hardware-adaptation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15783" PostTypeId="2" ParentId="15778" CreationDate="2020-07-31T23:47:56.770" Score="6" Body="&lt;p&gt;As you stated, the results for the C64 make sense, given that the interrupt source is based on a 50 Hz timer which is a bit off from a real 50 Hz signal, like for example the PAL screen refresh.&lt;/p&gt;&#xA;&lt;p&gt;For the Plus/4, both models, the PAL and the NTSC version use a rasterline interrupt as an interrupt source. This can be checked by looking at address &lt;code&gt;$ff0a&lt;/code&gt; which shows the enabled interrupt sources. Timer interrupts are disabled. Since the Plus/4 supports graphic modes with raster splits, that makes sense.&lt;/p&gt;&#xA;&lt;p&gt;In the NTSC mode, the jiffy clock is increased by one with every raster interrupt, providing a 60 Hz clock. Your assembler program detects a change after each interrupt service routine, which makes it synchronized to the rasterline.&lt;/p&gt;&#xA;&lt;p&gt;In the PAL mode, the Plus/4 routine cheats a little bit. The routine is now called 50 times per second, but the jiffy clock should count 60 ticks per second. Therefore, the Plus/4 PAL jiffy clock skips a number every now and then, after a quick test recording I saw such a sequence &lt;code&gt;00 01 02 04 05 06 07 08 0a 0b 0c 0d 0e 10 11 ...&lt;/code&gt; - so there was a two-step increase from &lt;code&gt;$02&lt;/code&gt; to &lt;code&gt;$04&lt;/code&gt; and from &lt;code&gt;$08&lt;/code&gt; to &lt;code&gt;$0a&lt;/code&gt;. Since your program only checks for a change of the jiffy clock lsb, your program changes the screen 50 times a second while the jiffy clock increases by 60 in the same time.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-07-31T23:47:56.770" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15784" PostTypeId="2" ParentId="15782" CreationDate="2020-08-01T00:02:59.770" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I'd like to connect GOTEK to CDTV [...]  but not sure where are all the signals and how to wire it up.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Simply connect either side according to names - they are the same on both sides, aren't they?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Signal  CDTV  Gotek&#xA;/CHNG    11     2&#xA;/MTRX     8     4 /MTRON&#xA;/INDEX   22     8&#xA;/RESET   10    --&#xA;/SEL0    21    10 &#xA;/SEL1     9    12&#xA;/SEL2    20    --&#xA;               16 /MTRON&#xA;/DIR     19    18&#xA;/STEP    18    20&#xA;/WD      17    22&#xA;/WE      16    24&#xA;/TRK0    15    26&#xA;/WPROT   14    28&#xA;/RD       2    30&#xA;SIDE     13    32&#xA;/RDY      1    34&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but I can't find schematics for cable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Maybe because it's straight forward? Commodore didn't invent the floppy, they simply worked with what was there, and noone likes to make complex cables. If you flip either connector upside down, you will notice that the sequence is the same on both sides, so a flat ribbon will do most of the work.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Where are the missing signals that I can't pair between amiga external drive connector and gotek drive?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Gotek is build after Standard (PC style) Floppies which use only 2 select signals (no need for SEL2) and don't feature a RESET.&lt;/p&gt;&#xA;&lt;p&gt;MTRX/MTRON are the same signal, Motor-On. For PC style floppies there are two motor signals, but Amiga only supplies one - which doesn't really matter for the Gotek, so both can (should) be bridged.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-01T07:53:55.287" LastActivityDate="2020-08-01T07:53:55.287" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15785" PostTypeId="1" CreationDate="2020-08-01T13:08:38.157" Score="6" ViewCount="178" Body="&lt;p&gt;What happens when I8008 CPU reads the &amp;quot;undefined&amp;quot; opcode (22h, 2Ah, 32h, 38h, 39h, 3Ah)? Are these opcodes evaluated as a NOP instruction, or lead to some side effects (RESET, etc). How many T cycles those instruction takes?&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="6659" LastEditDate="2020-08-01T15:53:18.483" LastActivityDate="2020-08-01T15:53:18.483" Title="Undefined opcodes for the Intel 8008 CPU" Tags="&lt;intel&gt;&lt;microprocessor&gt;&lt;8008&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15786" PostTypeId="2" ParentId="14452" CreationDate="2020-08-01T13:53:19.163" Score="0" Body="&lt;p&gt;The 3270 would have needed to be connected to a mainframe, you didn't mehntion the setup.&lt;/p&gt;&#xA;&lt;p&gt;If you remember the system as being standalone, it could have been a 5120 &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_5120&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/IBM_5120&lt;/a&gt; that supported Basic and APL - selectable by an actual switch as in hardware :-)&lt;/p&gt;&#xA;" OwnerUserId="16218" LastActivityDate="2020-08-01T13:53:19.163" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15787" PostTypeId="1" AcceptedAnswerId="15789" CreationDate="2020-08-01T15:57:08.930" Score="3" ViewCount="355" Body="&lt;p&gt;Intel 8008 CPU has an internal stack, implemented as an 8 x 14-bit scratchpad. How does it work exactly? Is there any &amp;quot;invisible 3-bit stack pointer&amp;quot;?&lt;/p&gt;&#xA;&lt;p&gt;I want to know what happens when the stack is full and call operation is performed. Is the stack &amp;quot;infinite&amp;quot; and the oldest value is dropped, or the oldest saved return address is overwritten?&lt;/p&gt;&#xA;&lt;p&gt;And what happens when the stack is &amp;quot;empty&amp;quot; and return operation is performed? Does it read any undefined/unpredictable value?&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="11446" LastEditDate="2020-08-01T16:19:36.260" LastActivityDate="2020-08-01T22:42:16.800" Title="Intel 8008 stack behavior" Tags="&lt;intel&gt;&lt;microprocessor&gt;&lt;8008&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15788" PostTypeId="1" AcceptedAnswerId="15790" CreationDate="2020-08-01T16:00:11.400" Score="0" ViewCount="130" Body="&lt;p&gt;Datasheet for the Intel 8008 CPU mentions that the Carry (C) flag is affected with the logic operations (AND, OR, XOR), but it does not make any sense. I believe Carry will be zeroed, but I have no proof of this conclusion.&lt;/p&gt;&#xA;&lt;p&gt;What is the exact behaviour of the Carry flag?&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="6659" LastEditDate="2020-08-01T16:52:26.783" LastActivityDate="2020-08-01T17:02:52.460" Title="Carry flag in the Intel 8008" Tags="&lt;intel&gt;&lt;microprocessor&gt;&lt;8008&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15789" PostTypeId="2" ParentId="15787" CreationDate="2020-08-01T16:16:13.550" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Intel 8008 CPU has an internal stack, implemented as an 8 x 16-bit scratchpad.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, it's entries are 'only' 14 bit long, as all addressing on the 8008 supports only 14 bit (*1).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How does it work exactly? Is there any &amp;quot;invisible 3-bit stack pointer&amp;quot;?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. In reality it's not  a stack pointer, but selects the active PC.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;A three-bit address pointer is used to designate the present&#xA;location of the program counter.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(From the 1973 User Manual section III.B.1 p.7)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I want to know what happens when the stack is full and call operation is performed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It simply cycles (7-&amp;gt;0).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;When the capacity of the stack is exceeded, the address pointer&#xA;recycles and the content of the lowest level register is destroyed.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(From the 1973 User Manual section III.B.1 p.7)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is the stack &amp;quot;infinite&amp;quot; and the oldest value is dropped, or the oldest saved return address is overwritten?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Erm, not clear what 'dropping' is supposed meant. The stack pointer simply runs over, reusing the oldest entry (see above)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And what happens when the stack is &amp;quot;empty&amp;quot; and return operation is performed? Does it read any undefined/unpredictable value?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It switches to the previous PC, which my hold an undefined value - or to be exact, whatever has been left here by some previous use.&lt;/p&gt;&#xA;&lt;p&gt;The manual states that all registers, as well as stack pointer and stack are cleared (*2) on startup (*3).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;When power (Voo ) and clocks (cP1 , cP2 ) are first turned on, a flip-flop internal to the&#xA;8008 is set by sensing the rise of Voo . This internal signal forces a HALT (00000000)&#xA;into the instruction register and the 8008 is then in the STOPPED state. The following&#xA;sixteen clock periods after entering the STOPPED state are required to clear (logic &amp;quot;0&amp;quot;)&#xA;memories (accumulator, scratch pad, program counter, and stack). During this time the&#xA;interrupt line has been at logic &amp;quot;0&amp;quot;. Any ti me after the memories are cleared, the 8008&#xA;is ready for normal operation.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(From the 1973 User Manual section V.A.2 p.20)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The top two bits of the second address byte signal the access type as&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Program&lt;/li&gt;&#xA;&lt;li&gt;Memory Read&lt;/li&gt;&#xA;&lt;li&gt;IO&lt;/li&gt;&#xA;&lt;li&gt;Memory Write&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;*2 - Personally I'd be a bit careful here, as 16 cycles do not really seam enough to do all of this.&lt;/p&gt;&#xA;&lt;p&gt;*3 - The 8008 has no Reset input, but uses power-up to initialize.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="5199" LastEditDate="2020-08-01T22:42:16.800" LastActivityDate="2020-08-01T22:42:16.800" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="15790" PostTypeId="2" ParentId="15788" CreationDate="2020-08-01T17:02:52.460" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Datasheet for the Intel 8008 CPU mentions that the Carry (C) flag is affected with the logic operations (AND, OR, XOR), but it does not make any sense. I believe Carry will be zeroed, but I have no proof of this conclusion.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;First, the manual does not say anything special about logic operations but states:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;The result of the ALU instructions affect all of the flag flip-flops.&#xA;The rotate instructions affect only the carry flip-flop.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(From the 1973 User Manual section IV.B p.8)&lt;/p&gt;&#xA;&lt;p&gt;Second, yes and no. Carry will not explicite forced to clear, but reflects, like the other flags, whatever the ALU output was (after any ALU operation). In case of logic operation this means&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Zero set if the result is all zero&lt;/li&gt;&#xA;&lt;li&gt;Sign set to the top bit&lt;/li&gt;&#xA;&lt;li&gt;Parity set according to the 1 bit sum of all bits&lt;/li&gt;&#xA;&lt;li&gt;Carry cleared, als logic never generates carry&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-08-01T17:02:52.460" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15791" PostTypeId="1" AcceptedAnswerId="15801" CreationDate="2020-08-01T23:17:48.213" Score="2" ViewCount="278" Body="&lt;p&gt;I was looking at &lt;a href=&quot;http://e4004.szyc.org/emu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this emulator&lt;/a&gt; of a Intel 4004, and I noticed something with the RAM. It had something called &amp;quot;Status Chars&amp;quot;. There were 4 of them per memory line and all were 4-bit numbers which could be set from 0-F. They didn't seem like they had any use to me, so I searched on Google to find answers, but I found nothing. They appeared on every single RAM chip on the emulator, and they didn't appear at all in the ROM. What are these &amp;quot;Status characters&amp;quot;, and what is their purpose in the 4004 and other microprocessors?&lt;/p&gt;&#xA;" OwnerUserId="17968" LastEditorUserId="3290" LastEditDate="2020-08-03T14:25:29.353" LastActivityDate="2020-08-03T22:07:48.633" Title="What is a 4002's &quot;RAM Status Character&quot;?" Tags="&lt;ram&gt;&lt;terminology&gt;&lt;intel-4004&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15792" PostTypeId="2" ParentId="15791" CreationDate="2020-08-02T00:16:35.403" Score="3" Body="&lt;p&gt;Per &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_4004&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;4002&lt;/strong&gt;: 40-byte RAM (80 4-bit data words), and one built-in 4-bit output&#xA;port; the RAM portion of the chip is organized into four &amp;quot;registers&amp;quot;&#xA;of 20 4-bit words:&lt;/p&gt;&#xA;&lt;p&gt;16 data words (used for mantissa digits in the original calculator&#xA;design), accessed in a relatively standard manner, and&lt;/p&gt;&#xA;&lt;p&gt;4 status words (used for exponent digits and signs in the original&#xA;calculator design), accessed using I/O type commands in place of the&#xA;ROM's input channel.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-08-02T00:16:35.403" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15793" PostTypeId="2" ParentId="15717" CreationDate="2020-08-02T02:25:17.083" Score="0" Body="&lt;p&gt;Look at it in the Mesen emulator, under Debugger / PPU Viewer / Palette Viewer (there you can change the palette to see the effect).&lt;/p&gt;&#xA;&lt;p&gt;For the text color, you want palette address $3F09.  This is also the cloud's color.  $3F11 is in the sprite palette rather than the background, and it seems to be Mario's outfit color.&lt;/p&gt;&#xA;&lt;p&gt;Also, note that most games store the palette in RAM, and write to the PPU every vblank.  Makes it easier to handle palette cycling, transitions, stuff like that.&lt;/p&gt;&#xA;" OwnerUserId="7024" LastActivityDate="2020-08-02T02:25:17.083" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15794" PostTypeId="1" AcceptedAnswerId="15796" CreationDate="2020-08-02T11:38:21.700" Score="7" ViewCount="1164" Body="&lt;p&gt;I was reading the user manual for an old program &amp;quot;UNRAVEL&amp;quot;: &lt;a href=&quot;http://www.ml1.org.uk/pdf/Unravel_User_Manual_1971.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.ml1.org.uk/pdf/Unravel_User_Manual_1971.pdf&lt;/a&gt;. On page 9, it describes the syntax for integer constants:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Unsigned integers may be used as constants. If the integer starts with the digit zero it is evaluated to the machine base; otherwise it is taken as decimal. Thus, for example, on an octal machine 077 would be the same as 63 and on a hexadecimal machine 0A9 (where A means ten) would be the same as 169.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I am aware of different word sizes, but what is the point in interpreting an integer literal differently depending on the machine? Was this practice common back in the day?&lt;/p&gt;&#xA;" OwnerUserId="18933" LastActivityDate="2020-08-02T13:41:05.010" Title="What is the point in interpreting an integer literal differently depending on the machine?" Tags="&lt;software&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15796" PostTypeId="2" ParentId="15794" CreationDate="2020-08-02T13:10:23.177" Score="10" Body="&lt;p&gt;I believe that the intent is that, since UNRAVEL is intended as a tool for building raw-memory interpretation programs (dump analyzers), then the main use of non-decimal notation would be to interpret memory content at the level of a field within a word, possibly even a single bit.&lt;/p&gt;&#xA;&lt;p&gt;Given the state of art at the time, such interpretation would be specific to a given machine (and OS).  And you'd likely be copying your bit/field definitions from the native software - there probably were not &amp;quot;header files&amp;quot; you could just use.&lt;/p&gt;&#xA;&lt;p&gt;It's convenient for doing this copying to be able to express your definitions in whatever base the machine in question used.  Or, more precisely, whatever base was conventionally used for software and documentation for that machine.&lt;/p&gt;&#xA;&lt;p&gt;It seems a little strange to be using one notation to denote different numbers, rather than providing explicit indicators for octal, hex, and binary, but there was probably no practical drawback.&lt;/p&gt;&#xA;&lt;p&gt;(This is theorizing, I have never seen the program before)&lt;/p&gt;&#xA;&lt;p&gt;It's interesting that they have the same 'leading 0 is a different base' convention as C and Unix. I wonder if that's where they got the notion from?  I never saw it anywhere before C.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-08-02T13:41:05.010" LastActivityDate="2020-08-02T13:41:05.010" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15797" PostTypeId="1" CreationDate="2020-08-02T13:36:17.547" Score="4" ViewCount="569" Body="&lt;p&gt;As software for micros developed, you could use the BASIC interpreter just to CLOAD and RUN assembly language programs. Those might call BASIC ROM routines (say, for converting ASCII input to binary or vice versa). So could BASIC interpreters on such systems be considered an operating system? What are the criteria they would have to meet to do so?&lt;/p&gt;&#xA;&lt;p&gt;Interpreters of course varied widely. On the first TRS-80, the computer would immediately start up in BASIC. On the initial Apple II, however, the computer would start up in a monitor, and you’d type in a keystroke to launch BASIC.&lt;/p&gt;&#xA;" OwnerUserId="18934" LastEditorUserId="6659" LastEditDate="2020-08-02T14:07:55.403" LastActivityDate="2020-08-03T16:27:04.977" Title="Would some BASIC interpreters for microcomputers be considered operating systems?" Tags="&lt;basic&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15798" PostTypeId="2" ParentId="15797" CreationDate="2020-08-02T13:50:18.940" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;So could BASIC interpreters on such systems be considered an operating system?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, the &lt;em&gt;resident (*1) software&lt;/em&gt; initializes the machine and all I/O, prepares operation, offer services for I/O (disk, tape, ports, clock, etc.) and dumps the user at a command shell. So what would you call that.&lt;/p&gt;&#xA;&lt;p&gt;For all practical purpose BASIC can be seen as the shell of that system, able to run scripts written in shell commands as well as binary applications.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What are the criteria they would have to meet to do so?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now, that's something you need to ask yourself, as the term OS in itself does not contain any criteria. There is no clear border.&lt;/p&gt;&#xA;&lt;p&gt;The main issue here might be that many services we expect today from an OS - or were expected in the 80s from a 'real' OS (*2) - were not required in BASIC systems of the 70s or typical 8 bit machines (*3) of the 80s.&lt;/p&gt;&#xA;&lt;p&gt;These integrated systems, no matter im BASIC, Forth, or whatever else, were one step in an evolutionary process. Diversification does happen over time if there is a need to separate functions - like boot system from runtime from application. That need wasn't there in the times of 8-bit.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Or loaded in case of machines with just boot loader, loading a stand alone BASIC system.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Multiprocessing? Multiprogramming? Memory Management? Inter Process Communication?&lt;/p&gt;&#xA;&lt;p&gt;*3 - At that time it's important to remember that early 8 bit systems were simply mimicking the previous generation of desktop systems like Wang 2200 (1973), Olivetti 6060 (1975) and many others. Here as well BASIC was used for shell/environment.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-02T19:41:51.520" LastActivityDate="2020-08-02T19:41:51.520" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15799" PostTypeId="2" ParentId="15797" CreationDate="2020-08-02T14:04:50.447" Score="7" Body="&lt;p&gt;The definition of an OS is quite fuzzy, though it generally includes resource allocation and handling, a way to indicate actions to be performed ('commands', not necessarily interactive), and a way to run user programs.&lt;/p&gt;&#xA;&lt;p&gt;Your BASIC-only microprocessor systems seem to fulfil that definition, though the &amp;quot;OS&amp;quot; aspects were pretty limited.  We can at least conceptually distinguish the BASIC language from the command structure (RUN, LIST, etc.)&lt;/p&gt;&#xA;&lt;p&gt;For a non-micro example, RSTS-11 on the PDP-11/20 had a fairly conventional OS kernel which supported a single runtime system, BASIC-PLUS, which provided language compiler and command interface in one.  This was very definitely an operating system, and the capabilities do not seem so very different to the micro systems you refer to, though the structures are dissimilar.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-08-02T14:04:50.447" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15800" PostTypeId="1" AcceptedAnswerId="15803" CreationDate="2020-08-02T15:25:42.020" Score="3" ViewCount="286" Body="&lt;p&gt;The 6502 was released in 1975 with an advertised speed of about 1mhz but I can't find reliable information on what year faster versions became available (was 2mhz possible at launch?) or what the true top speed was. The sources I can find tend to simply list a top speed of either 3mhz or 4mhz and I'm not sure if some of them are conflating the 6502 with the later CMOS based 65c02 (circa 1983).&lt;/p&gt;&#xA;" OwnerUserId="15514" LastEditorUserId="4335" LastEditDate="2020-08-04T17:29:50.687" LastActivityDate="2020-08-04T17:29:50.687" Title="When did the faster versions of the NMOS 6502 become commercially available?" Tags="&lt;hardware&gt;&lt;6502&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15801" PostTypeId="2" ParentId="15791" CreationDate="2020-08-02T16:44:00.587" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;[...] RAM. It had something called &amp;quot;Status Chars&amp;quot;. There were 4 of them per memory line and all were 4-bit numbers which could be set from 0-F. [...] They appeared on every single RAM chip on the emulator, and they didn't appear at all in the ROM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The 4004 can address 16 ROMs and 4 RAM chips. When addressing a ROM port 4 bits are used to indicate the ROM. With RAMs two are used to address the chip, while the two remaining select the register (*1)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What are these &amp;quot;Status characters&amp;quot;,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They are simple RAM cells, like all the others. Except, they got kind of an immediate addressing mode.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;To access any of the 'main' words the address (chip/bank in R and address in R+1) had to be set with the SRC instruction and fetched/written with RDM/WRM. For accessing another word the address had to be set again and issued with a SRC instruction.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre&gt;&lt;code&gt;     LDM   0        / 0 -&amp;gt; ACCU&#xA;     DCL            / Select Data Bank 0&#xA;     FIM   2   4    / Load register pair 2/3 with address for Chip 0 Register 0 Word 4&#xA;     SRC            / Set address&#xA;     RDM            / Read word 4 into ACCU&#xA;     ...&#xA;     WRM            / Write the same word&#xA;     ...&#xA;     INC   3        / Increment Word address&#xA;     SRC&#xA;     RDM            / Read word 5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;To access the 'status character' only the chip/bank part had to be set via SRC, while the individual words were addressed by specific instructions, resulting in faster access&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre&gt;&lt;code&gt;     LDM   0        / 0 -&amp;gt; ACCU&#xA;     DCL            / Select Data Bank 0&#xA;     FIM   2   0    / Load register pair 2/3 with address for Chip 0 Register 0 Word x&#xA;     SRC            / Set address&#xA;     RD0            / Read status character 0&#xA;     ...&#xA;     RD1            / Read status character 1&#xA;     ...&#xA;     WR0            / Write status character 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and what is their purpose in the 4004&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Primary to work as fast, direct accessible scratch pad and/or markers for the value stored in a (RAM) register. The 4 status characters of a (RAM) register addressed can be accessed direct without setting up and issuing an SCL instruction.&lt;/p&gt;&#xA;&lt;p&gt;Like with any RAM it's up to the programmer what to use it for. The &lt;a href=&quot;http://www.vintagecalculators.com/html/busicom_141-pf.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Busicom 141PF&lt;/a&gt;, the first device using a 4004, had two RAM chips for a total of 8 registers of 20 words each. While register 0 was used as keyboard buffer, the other seven stored numbers.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Special Character 0 held the sign in bit 0, while&lt;/li&gt;&#xA;&lt;li&gt;SC1 held the position of the decimal point, essentially the decimal exponent (*2).&lt;/li&gt;&#xA;&lt;li&gt;SC2 and SC3 of some registers held various flags,&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So long story short, the RAM was used as 7 registers, one keyboard buffer and 32 words of other RAM.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and other microprocessors?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They are specific to the 4004&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;At that point one may ask why this strange organisation. After all, there were enough opcodes to address a second set of 16 word registers instead of fiddling with normal RAM and 'special' RAM.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;For one such a chip would have been way to complex (and expensive) at the time. The 4002 RAM had already a transistor count similar to the 4004 CPU. Doubling that was simply unrealistic.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For the intended use as calculator the main need for RAM comes from number storage, not so much from runtime variables and alike. The Busicom 141PF uses only 8 words to store other information then numbers, most of them holding just one or two valid bits.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Of course Intel could have gone for a straight 4x16x4 RAM instead, but then calculators would have had to limit precision to less than 16 digits (*3) or use a second RAM chip.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;By implementing full 16 digit storage per register and 4 word scratch in one device a simple calculator could be made with a single RAM chip. Further lowering entry cost.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The description from the Wiki about them being addressed instead of ports is misleading, as for one a different instruction is used, but even if assuming, it's not instead of ports but instead of ROM addresses.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Except only positive - the machine was intended as business device, a task in no need for real small numbers.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Busicom 141PF used only 14, but that's due the printer only offering 15 positions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-03T22:07:48.633" LastActivityDate="2020-08-03T22:07:48.633" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15802" PostTypeId="2" ParentId="15797" CreationDate="2020-08-02T17:36:00.153" Score="4" Body="&lt;p&gt;I would say &amp;quot;no&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;If anything, the BASIC might be considered the &amp;quot;command line&amp;quot; for the system, but not the OS itself.&lt;/p&gt;&#xA;&lt;p&gt;If you step back to other system, such as the DEC PDP's. These, to, would essentially present itself as BASIC. You login, and you get the BASIC prompt.&lt;/p&gt;&#xA;&lt;p&gt;But it's clear that in these scenarios, that BASIC is not the OS. The underlying RSTS or RSX were the actual OS, as those aspects managed the jobs, multiple users, etc.&lt;/p&gt;&#xA;&lt;p&gt;Micros didn't need all that, they just needed routines to abstract the hardware.&lt;/p&gt;&#xA;&lt;p&gt;The early systems were not very sophisticated, the line between the BASIC runtime and the &amp;quot;OS&amp;quot; (if any) was fuzzy indeed. Witness modern hobby BASICs that simply need the console driver routines for fundamental operation. I don't consider a serial port console driver an &amp;quot;OS&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;But, consider something like the Atari systems. which has a built in extensible device manager that BASIC leveraged. BASIC was an add on for Ataris, coming in cartridge form. Now is a device manager an OS? Meh, &amp;quot;sorta&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;BASIC on CP/M, clearly, DID run on top of an &amp;quot;OS&amp;quot; -- they ran on top of CP/M and it's BDOS services.&lt;/p&gt;&#xA;&lt;p&gt;Finally, as we get in to MS-DOS, which was more and more like an OS (it did things like memory management, device abstraction, &amp;quot;TSRs&amp;quot;, etc.) Offering more services than simple devices. Then the boundaries between OS and application program (including development and runtime environments like BASIC) were getting more clear.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-08-02T17:36:00.153" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15803" PostTypeId="2" ParentId="15800" CreationDate="2020-08-02T21:11:47.037" Score="3" Body="&lt;p&gt;The MOS MCS6500 microprocessor family datasheet from May, 1976 indicates that:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;&amp;quot;All versions of the microprocessor are available in 1 MHz and 2 MHz maximum operating frequencies.&amp;quot;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;The document is archived here: &lt;a href=&quot;http://archive.6502.org/datasheets/mos_6500_mpu_preliminary_may_1976.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://archive.6502.org/datasheets/mos_6500_mpu_preliminary_may_1976.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-08-02T21:11:47.037" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15804" PostTypeId="1" CreationDate="2020-08-03T11:34:10.763" Score="3" ViewCount="364" Body="&lt;p&gt;I was trying to take apart a Toshiba T1950ct laptop to replace the slim floppy drive’s belt. Unfortunately, I broke the delicate flat flex cable (ffc), which is a non-standard 26-wire floppy cable. The motherboard end has narrower pitch than the floppy end, which is a &lt;a href=&quot;https://www.plrelectronics.com/lab/pictures/pin1_location_for_26_pin_ffc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;standard&lt;/a&gt; 26-wire connector. So a new drive won’t help the situation. Space is very limited too.&lt;/p&gt;&#xA;&lt;p&gt;All T19x0 series laptops use the same ffc cable. There can be other brands or models that use same cable too. Question is where could I find one? It does not need to look the same, or be same shape, and it can be longer. The only thing that matters is flatness, the ends and the motherboard side of the flat flex cable. It does not have Toshiba part number, the only thing that has been mentioned is the connector &amp;quot;Pj202&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2SocF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2SocF.jpg&quot; alt=&quot;The cable in question, laid next to a pen on what looks like 5 mm graph paper. One end looks about 20 mm wide, the other looks about 25 mm wide.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Similar ends, the drive side is the wider one.&lt;/p&gt;&#xA;" OwnerUserId="18937" LastEditorUserId="18937" LastEditDate="2021-03-08T14:23:46.547" LastActivityDate="2021-03-08T14:23:46.547" Title="Where can I find a 26-pin flex flat cable for the floppy drive in a Toshiba T19x0 laptop?" Tags="&lt;repair&gt;&lt;floppy-drive&gt;&lt;laptop&gt;&lt;toshiba&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15805" PostTypeId="2" ParentId="9650" CreationDate="2020-08-03T15:28:25.537" Score="1" Body="&lt;p&gt;Does it count if it was only prototype like Xerox Notetaker? On Kaypro machines only Kaypro 2000 with 3.5&amp;quot; drive was battery powered in wiki info. I have Kaypro 2x and no battery option on these bigger models as i know of. From &lt;a href=&quot;https://wiki2.org/en/Kaypro&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://wiki2.org/en/Kaypro&lt;/a&gt;  &amp;quot;This and other Kaypro computers (except for the Kaypro 2000) run off regular AC mains power and are not equipped with a battery.&lt;/p&gt;&#xA;&lt;p&gt;There is also a &lt;a href=&quot;http://vintagecomputer.net/gavilan/SC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gavilan&lt;/a&gt; computer.&#xA;Also found &lt;a href=&quot;http://oldcomputers.net/attache.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Otrona Attache&lt;/a&gt; is reported with optional battery and price tag on it, if it counts.&#xA;Osborne apparently have an official battery pack, while it is not small enough to be called a laptop but &lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?62558-Battery-Powered-Osborne-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18937" LastEditorUserId="18937" LastEditDate="2020-08-27T11:05:41.910" LastActivityDate="2020-08-27T11:05:41.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15807" PostTypeId="2" ParentId="15797" CreationDate="2020-08-03T16:21:51.120" Score="1" Body="&lt;p&gt;If you agree that ‘OS’ is only a loosely-defined term then self-labelling is probably worth inspecting.&lt;/p&gt;&#xA;&lt;p&gt;The Acorn machines from the BBC onwards ship with at least two resident pieces of ROM software, one being the MOS (i.e. the Machine Operating System, thing Acorn labelled as an OS) and the other being BASIC, which runs atop the OS. So Acorn would have said: no, BASIC is not an OS.&lt;/p&gt;&#xA;&lt;p&gt;Amstrads all ship with a BASIC ROM and those with built-in disk drives also separately include a ROM for AMSDOS, the disk operating system. But it’s not part of BASIC. So Amstrad would probably also have thought of what they supply as an ‘operating system’ as distinct from BASIC.&lt;/p&gt;&#xA;&lt;p&gt;CP/M is at least as much an OS as MS-DOS but those machines provide BASIC separately on disk so the two are disjoint.&lt;/p&gt;&#xA;&lt;p&gt;Commodore probably comes closest to passable nomenclature in having something called a KERNAL (i.e. a kernel, spelling errors aside) that is heavily coupled to BASIC but nothing is formally an ‘OS’.&lt;/p&gt;&#xA;&lt;p&gt;MSX machines with disk drives built-in also keep BASIC as a distinct thing from the built-in MSX-DOS, which is more or less an 8-bit port of MS-DOS. So the relationship is much like the IBM PC except that the presumption is reversed in that every MSX has BASIC but only some have MSX-DOS built in.&lt;/p&gt;&#xA;&lt;p&gt;So my feeling is that an ‘OS’ is loosely defined but that since so many manufacturers had something discrete which they called the disk operating system, probably ‘no’ is the correct answer by standards of the time.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-08-03T16:27:04.977" LastActivityDate="2020-08-03T16:27:04.977" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15808" PostTypeId="2" ParentId="13043" CreationDate="2020-08-03T18:00:48.827" Score="2" Body="&lt;p&gt;There is a usb hdd adapter witch have usual laptop and desktop ide ports (2.5&amp;quot; and 3.5&amp;quot; hdd) Also sata port and usb. You can copy stuff in each of them when connected to a modern Pc. Make sure it has power supply included, if a need transfer from bigger drives as they require more power. I bought &lt;a href=&quot;https://www.ebay.com/itm/IDE-SATA-PATA-to-USB-2-0-Adapter-Converter-Cable-for-Hard-Drive-2-5-3-5-Inch/163509479799%20https://www.ebay.com/itm/IDE-SATA-PATA-to-USB-2-0-Adapter-Converter-Cable-for-Hard-Drive-2-5-3-5-Inch/163509479799&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;. Just make sure voltage rating suits your country. Then its easy to copy or transfer almost any software or operation system to any hdd drive. Hdd removal is easy on Toshiba T19xx series. I also have ide to compact flash adapter and cf card which I intend to use in my Toshiba T1950ct. The floppy drive is the last part witch comes off. Beware the floppy cable and the floppy head also when changing the belt.  If you need a new fdd drive make sure it is a 26 pin without power connector from &lt;a href=&quot;https://www.plrelectronics.com/lab/floppy_identification.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; (2nd from bottom). Be careful as I broke my floppy drive cable in the operation, and I am in a hunt to find replacement.&lt;/p&gt;&#xA;" OwnerUserId="18937" LastEditorUserId="129" LastEditDate="2020-08-03T18:46:31.847" LastActivityDate="2020-08-03T18:46:31.847" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15810" PostTypeId="1" CreationDate="2020-08-04T07:55:28.323" Score="1" ViewCount="294" Body="&lt;p&gt;When we load any game on ZX Spectrum from cassette player...&lt;/p&gt;&#xA;&lt;p&gt;Should red stripes move smoothly for better result or they should be static for perfect result?&lt;/p&gt;&#xA;&lt;p&gt;What is the theory?&lt;/p&gt;&#xA;" OwnerUserId="18939" LastEditorUserId="6659" LastEditDate="2020-08-04T23:23:32.557" LastActivityDate="2020-08-05T09:10:24.277" Title="ZX Spectrum red stripes during loading" Tags="&lt;zx-spectrum&gt;&lt;cassette-tape&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15811" PostTypeId="2" ParentId="15810" CreationDate="2020-08-04T10:01:20.413" Score="9" Body="&lt;p&gt;It doesn't make any difference. The border colour changes between red and cyan whenever the tape loading routine detects a change in level between low and high, and this happens many times over the period that a video frame is being sent to the display (from top to bottom), producing the stripes.&lt;/p&gt;&#xA;&lt;p&gt;Static stripes would just mean that the level changes are happening at a frequency that's an exact multiple of the 50Hz screen refresh rate. As far as the tape loading routine is concerned, there's nothing significant about 50Hz, and there's enough tolerance built in to the timings that it doesn't matter whether the actual frequency is (say) 1500Hz, or 1499 or 1501.&lt;/p&gt;&#xA;" OwnerUserId="13618" LastActivityDate="2020-08-04T10:01:20.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15812" PostTypeId="1" AcceptedAnswerId="15818" CreationDate="2020-08-04T10:25:18.913" Score="40" ViewCount="4346" Body="&lt;p&gt;Many songs in the so called &amp;quot;tracker&amp;quot; format quite popular in the early 90s (think .MOD, .S3M, .XM, .IT and the like) seemingly used sound samples from real synthesizers. This sometimes could also be seen in the sample names in the tracker music files featuring brands such as Korg or Roland.&lt;/p&gt;&#xA;&lt;p&gt;As many of those tracker songs were written by enthusiasts, how did they manage to grab those samples? Did they really plug a synthesizer's audio output into a line input of a sound card and digitize the analog sound? But were audio cards of the early 90s at all capable of capturing analog audio at reasonable quality?&lt;/p&gt;&#xA;&lt;p&gt;Or did they find a way to somehow dump the keyboard firmware and/or reverse engineer sample banks provided by the keyboard vendor and convert the samples into a format that could be understood by Scream Tracker / Fast Tracker (or whatever tracker music editor they used)?&lt;/p&gt;&#xA;" OwnerUserId="3303" LastEditorUserId="-1" LastEditDate="2020-08-04T11:42:45.530" LastActivityDate="2021-04-05T16:43:39.303" Title="How did musicians acquire samples for tracker music (MOD, S3M, XM and the like)?" Tags="&lt;audio&gt;&lt;digital-audio&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15813" PostTypeId="2" ParentId="12846" CreationDate="2020-08-04T11:20:01.063" Score="0" Body="&lt;p&gt;On &lt;a href=&quot;https://groups.google.com/d/topic/comp.sys.apple2/JIhAE6hqARk&quot; rel=&quot;nofollow noreferrer&quot;&gt;comp.sys.apple2&lt;/a&gt; Has answers and info of how to fix keyboard, but is the keyboard in question the right one? Also some of the fixes in there are not for the fainted heart. So continue with caution, searching more on the group could get more information. But one short quote from there:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;Also, somebody else mentioned that the ROM 255 keyboard had springs that were problematic. They removed those and the rubber mat underneath.&amp;quot; More comprehensive repair details in the link.&#xA;And the look of your keyboard, the rubber membrane has teared, so you would need to clean possible dirt or residue inside the keyboard and add more tension on springs maybe? If rubber membrane is not obtainable or cannot/ want take apart completely the key switches, then probably easier would be to look replacement keyboard. This &lt;a href=&quot;https://youtu.be/HjDgMRgzllo?t=340&quot; rel=&quot;nofollow noreferrer&quot;&gt;keyboard&lt;/a&gt; Looks like yours?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="18937" LastEditorUserId="18937" LastEditDate="2020-08-16T17:21:20.053" LastActivityDate="2020-08-16T17:21:20.053" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15814" PostTypeId="2" ParentId="15812" CreationDate="2020-08-04T11:20:07.410" Score="28" Body="&lt;p&gt;The four main ways were:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you knew someone with the sampling card or sampler (many of samplers had the capability to sample sound in CD quality and save it to floppy disk).&lt;/li&gt;&#xA;&lt;li&gt;you bought some kind of &amp;quot;sample bank&amp;quot;&lt;/li&gt;&#xA;&lt;li&gt;you simply grabbed sounds from other MODs&lt;/li&gt;&#xA;&lt;li&gt;you generated fully artificial sound by math algorithms and computed sample data (e.g. simple sawtooth or sine wave, AM/FM modulated with LFO, filtered, envelopes, etc.) The 90s computers have no power to do it real-time, but it was possible to pre-computed in lower quality and then re-compute in full quality&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-08-04T11:20:07.410" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15815" PostTypeId="2" ParentId="15812" CreationDate="2020-08-04T12:09:15.600" Score="18" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Did they really plug a synthesizer's audio output into a line input of a sound card and digitize the analog sound? But were audio cards of the early 90s at all capable of capturing analog audio at reasonable quality?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Samplers existed even for low-end machines. I remember using a sampler on my Amiga 500. It was 8-bit, but so are the .MOD samples, and sample rate on the Amiga is limited to 28 kHz per channel too.&lt;/p&gt;&#xA;&lt;p&gt;On IBM-PCs with a high-end sound card, it was probably possible to get 16-bit/higher sample rate (then convert to 8SVX or whatever).&lt;/p&gt;&#xA;&lt;p&gt;To create good samples from those keyboards, you had to record the samples with a sampler:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;using different octaves (different octaves often mean different sounds, plus strecting the sample rate will yield mediocre results). Doesn't apply to drum/percussion samples.&lt;/li&gt;&#xA;&lt;li&gt;for strings or piano, you had to record chords to avoid wasting module channels (often limited to 4, with a stretch at 7 or 8 but with extra CPU power)&lt;/li&gt;&#xA;&lt;li&gt;for strings/leads, you had to make sure the looping point was at the same level as the starting point, else the sample could &amp;quot;click&amp;quot; when looping&lt;/li&gt;&#xA;&lt;li&gt;using different note attacks (if you really wanted that the instrument sounded good)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Very rarely, what was possible was to record from real songs, for instance when the drums/instrument is alone on the track.&lt;/p&gt;&#xA;&lt;p&gt;I also remember buying an audio CD with a lot of sampled sounds from known keyboards and rythm units. Those could be extracted to .wav and converted, or just sampled (wasteful, but converting to .wav wasn't easy before the CD-ROM era).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or did they find a way to somehow dump the keyboard firmware and/or reverse engineer sample banks provided by the keyboard vendor and convert the samples into a format that could be understood by Scream Tracker / Fast Tracker (or whatever tracker music editor they used)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That would be difficult &lt;em&gt;and&lt;/em&gt; not practical because a sound is often not a sample but a mix of sample + effects. For instance, if you press a key very strongly, the keyboard could issue another sample or a mix of 2 samples because the attack is different (for instance a piano).&lt;/p&gt;&#xA;&lt;p&gt;Now MT32 emulators exist (for instance &lt;a href=&quot;https://sourceforge.net/projects/munt/&quot; rel=&quot;nofollow noreferrer&quot;&gt;munt&lt;/a&gt;) and the MT32-like roms have been dumped, but it's still difficult to convert the samples from this data.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="4340" LastEditDate="2020-08-07T10:03:53.133" LastActivityDate="2020-08-07T10:03:53.133" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15816" PostTypeId="2" ParentId="14396" CreationDate="2020-08-04T20:35:27.850" Score="1" Body="&lt;p&gt;Sorry, couldn't add this as a comment as I'm new.&lt;/p&gt;&#xA;&lt;p&gt;Look up the 3c589 PCMCIA card. That was the card to get when you needed a PCMCIA card with compatibility with almost every OS back in the day.&lt;/p&gt;&#xA;&lt;p&gt;One of the notable examples was Farallon had a card which was a rebranded 3c589 that you could modify the drivers and make it work on MacOS and Apple Newton.&#xA;Their version of the RJ45 ethernet dongle included an integrated hub so you could chain your laptop off an existing port in a pinch. Great for doing onsite network diagnostics.&lt;/p&gt;&#xA;&lt;p&gt;The direct to RJ45 one up top, and the female RJ45 at the bottom go with this card. I had both, and might still have the female one in the garage somewhere.&lt;/p&gt;&#xA;" OwnerUserId="18941" LastEditorUserId="18941" LastEditDate="2020-08-04T20:36:56.203" LastActivityDate="2020-08-04T20:36:56.203" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15817" PostTypeId="2" ParentId="15810" CreationDate="2020-08-04T20:45:46.353" Score="4" Body="&lt;p&gt;A &amp;quot;perfect&amp;quot; result would be obtained if the stripes move at the same pace you can observe when SAVEing a program, that is, a signal with a period of exactly 2168*2 T-states, which means 807.2 Hz. (T-state information taken from &lt;a href=&quot;https://faqwiki.zxnet.co.uk/wiki/Spectrum_tape_interface&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://faqwiki.zxnet.co.uk/wiki/Spectrum_tape_interface&lt;/a&gt; )&lt;/p&gt;&#xA;&lt;p&gt;As the screen you see is the sampled version of what the TV is interpreting after the actual TV signal is received, your perception of how fast the stripes move may vary, using a CRT monitor, without little or no postprocessing, or a smartTV with a composite to HDMI adapter. FYR, the SAVE routine produces red/cyan stripes moving upwards at a rate of, aproximately, 6.5 stripes per second when viewed in a CRT screen (also tried in Spectaculator, and in a ZX-UNO using 48K ULA timings, with the same results). You can use this result to fine tune your tape playing speed if you see that the stripes move too much quickly in one direction or the other.&lt;/p&gt;&#xA;&lt;p&gt;Nevertheless, the cassette loading routines have a great tolerance, and will allow variations in the speed of up to +/-15% . I've used that tolerance to push the loading routine to its limits by playing a TAP file with slighly higher frequencies for all their parameters (leader tone, sync pulse, 0 and 1 bit) so it loads a bit faster than usual.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2020-08-04T20:51:53.327" LastActivityDate="2020-08-04T20:51:53.327" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15818" PostTypeId="2" ParentId="15812" CreationDate="2020-08-04T21:40:25.080" Score="59" Body="&lt;p&gt;I composed a small number of &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga&quot; rel=&quot;noreferrer&quot;&gt;Amiga&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Module_file&quot; rel=&quot;noreferrer&quot;&gt;tracker modules&lt;/a&gt; at around the turn of the 1990s, &lt;a href=&quot;https://www.youtube.com/results?search_query=Guitarous%20mod&quot; rel=&quot;noreferrer&quot;&gt;one of which&lt;/a&gt; even enjoyed some popularity. These songs were made, first and foremost, for my personal amusement — for exploring music creation and sequencing on a personal computer — but they also ended up being used in some &lt;a href=&quot;https://en.wikipedia.org/wiki/Demoscene&quot; rel=&quot;noreferrer&quot;&gt;demoscene&lt;/a&gt; productions.&lt;/p&gt;&#xA;&lt;p&gt;My tools of choice were, at first, &lt;a href=&quot;http://www.robotplanet.dk/amiga/oktalyzer/&quot; rel=&quot;noreferrer&quot;&gt;Oktalyzer&lt;/a&gt; (see &lt;a href=&quot;https://www.youtube.com/results?search_query=Oktalyzer&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; as well), and later &lt;a href=&quot;https://en.wikipedia.org/wiki/ProTracker&quot; rel=&quot;noreferrer&quot;&gt;ProTracker&lt;/a&gt; (see &lt;a href=&quot;https://www.youtube.com/results?search_query=Protracker&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; as well).&lt;/p&gt;&#xA;&lt;p&gt;For the very first experiments, I used whatever sounds were available to me. The instrument samples were borrowed from tracker modules made by other people or originated from the famous &lt;code&gt;ST-##&lt;/code&gt; instrument sample disks, originally meant to be used with Karsten Obarski’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Ultimate_Soundtracker&quot; rel=&quot;noreferrer&quot;&gt;Soundtracker&lt;/a&gt;, the forefather of ProTracker.&lt;/p&gt;&#xA;&lt;p&gt;I then spotted this ad in a computer magazine for an Amiga-compatible sound digitizer device. It was a black, nondescript plastic box — a bit larger than a pack of cigarettes — which plugged into the printer (parallel) port on the back of the Amiga. It had a single mono RCA input and a trimmer knob for adjusting the input level. There was also a DE-9 cable for a connection to the joystick port which it used for powering itself. That’s about it.&lt;/p&gt;&#xA;&lt;p&gt;It was quite similar to this device (&lt;a href=&quot;https://bigbookofamigahardware.com/bboah/product.aspx?id=1115&quot; rel=&quot;noreferrer&quot;&gt;more information&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qFQag.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qFQag.jpg&quot; alt=&quot;Deluxe Sound Audio Digitzer&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The audio editor I mostly used with it was Aegis AudioMaster:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0u2zh.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0u2zh.gif&quot; alt=&quot;Aegis AudioMaster IV&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;See &lt;a href=&quot;https://www.youtube.com/watch?v=RGP5Uen5sks&quot; rel=&quot;noreferrer&quot;&gt;this video&lt;/a&gt; showing the AudioMaster in action. I never utilized this tool’s built-in sequencing capability, though, but only used it for acquisition and for cleaning up the instrument samples. The actual songs were composed in the tracker programs.&lt;/p&gt;&#xA;&lt;p&gt;I also used the internal samplers and audio editors built into some trackers, but I tended to use AudioMaster (an external tool) the most.&lt;/p&gt;&#xA;&lt;p&gt;The audio digitizer device was 8-bit, and only supported monophonic sound, but it was a perfect match for the Amiga capabilities since the Amiga sound hardware had four 8-bit sound channels. (Of course, I would later learn that oversampling and better-than-8-bit dynamics during acquisition would yield better results when downsampled to the target format. But at the time, the Amiga hardware was all that I had for working with sound.)&lt;/p&gt;&#xA;&lt;p&gt;You would not normally have used stereo samples due to the limited disk and memory resources and the limited number of sound channels (polyphony) available in the hardware so the audio digitizer being mono only was not really a hindrance.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;With the hardware and software in order, I then started digitizing instrument samples from commercially-published songs. These tended to be contemporary (late 1980s, early 1990s) pop and rock music published on C cassettes. Many songs had intro sequences or breaks from where you could get great, clean drum or bass samples. I also sourced some nice strings or pads with usable major and minor and other chords.&lt;/p&gt;&#xA;&lt;p&gt;A great deal of effort went into finding suitable loop points for sustained sound without it clicking or popping, especially for the strings and the pads. The audio editors had some tools which made this easier, such as functions for finding zero points in the waveform. But a good result would only come by experimenting and listening to how it sounds.&lt;/p&gt;&#xA;&lt;p&gt;I then started borrowing keyboards from my friends for the purpose of methodically growing my instrument sample library. I used everything I could get my hands on — from cheap entry-level Casios to actual synthesizers, samplers, and drum machines. A friend of mine had an Ensoniq sampler and an Alesis drum machine which were treasure troves.&lt;/p&gt;&#xA;&lt;p&gt;In the end, the instrument samples in my sample library came from three sources — other people’s sound tracker modules (some of the instrument samples other people had made were just too good to dismiss), self-digitized from compact cassettes containing commercial music and popular songs, and self-digitized from synthesizers and consumer keyboards. I also digitized my own voice a couple of times.&lt;/p&gt;&#xA;&lt;p&gt;I can no longer recall the purchase price of the audio digitizer device but I’d estimate it was maybe something like €20 or €30 in today’s money. Certainly not a professional thing at any level but worked fine for the purpose it was made.&lt;/p&gt;&#xA;&lt;p&gt;There’s this nice video from “debuglive” on YouTube which describes the very process:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=i9MXYZh1jcs&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=i9MXYZh1jcs&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4893" LastEditorUserId="4893" LastEditDate="2021-04-05T16:43:39.303" LastActivityDate="2021-04-05T16:43:39.303" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15820" PostTypeId="1" AcceptedAnswerId="15826" CreationDate="2020-08-05T09:24:27.277" Score="3" ViewCount="519" Body="&lt;p&gt;A while ago I &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/9229/4025&quot;&gt;asked&lt;/a&gt; about the possible origin of a Russian version of the &amp;quot;Lunar Lander&amp;quot; game. No definitive answers were given.&lt;/p&gt;&#xA;&lt;p&gt;Meanwhile, I was able to decompile the binary into a &lt;a href=&quot;https://github.com/besm6/bega-re/blob/master/bega.pas&quot; rel=&quot;nofollow noreferrer&quot;&gt;semi-readable form&lt;/a&gt; (search for &amp;quot;landing&amp;quot;, near line 300). A few variable names had been guessed, some incorrectly or in a misleading fashion, as some of the variables were reused for unrelated purposes. This is still a work in progress.  &lt;em&gt;Caveat lector.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The game asked, &lt;code&gt;WHAT IS YOUR EXPERIENCE? 0 1 2(STANDARD) 3 4 5 6 7 8 9(NO EXPERIENCE)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;The amount of fuel was computed as &lt;code&gt;fuel := round(15000 + level * 500);&lt;/code&gt;, then &lt;code&gt;mass := 32500; drymass := mass - fuel;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;When specifying the burn rate, it was possible to change the time step from the default 10 seconds to a lower number, down to 1 second.&lt;/p&gt;&#xA;&lt;p&gt;A typical technique to do the landing is to free-fall for about 70 seconds, then to burn the maximum possible 200 lb/sec for about 65-70 seconds, then to start performing a more controlled descent.&lt;/p&gt;&#xA;&lt;p&gt;I was able to write a simple program which has found winning sequences of burn rates for levels from 9 down to 2 (the standard 16000 lb), the latter using the 5-second interval, but nothing worked so far for harder levels (15500 or 15000 lb).&lt;/p&gt;&#xA;&lt;p&gt;Assuming that BASIC versions of the game allowing to select the initial amount of fuel existed, and people have experience with them, my question is:&lt;/p&gt;&#xA;&lt;p&gt;Was it at all possible to perform a successful landing using 15500 or less pounds of fuel, in any of such programs? The formulas in all of them are pretty much identical (*); the differences, if any, would be caused by variations in floating point representations, thus if a technique works in one of them, it should work in all.&lt;/p&gt;&#xA;&lt;p&gt;Searching for &amp;quot;lunar lander best strategy&amp;quot; yields results related to other games.&lt;/p&gt;&#xA;&lt;p&gt;As suggested by @lvd in the comments, the &amp;quot;launch&amp;quot; test results in (negative speeds are upwards):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ТIМЕ(SЕС) АLТ(МILЕS + FЕЕТ) VЕLОСIТУ(FРS) FUЕL(LВS)&#xA;    0            0       5        0        16000&#xA;   80           40     717    -6019            1&#xA;  153          120    3679    -5633            1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;With the standard fuel load, the initial altitude is reached with the speed comfortably exceeding 1 mps (5280 fps).&lt;/p&gt;&#xA;&lt;p&gt;With 15500 lb of fuel, it's getting close:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ТIМЕ(SЕС) АLТ(МILЕS + FЕЕТ) VЕLОСIТУ(FРS) FUЕL(LВS)&#xA;    0            0       5        0        15500&#xA;   78           37    4707    -5745            1&#xA;  157          120    3960    -5328            1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And with 15000 lb, it looks like a lost cause:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ТIМЕ(SЕС) АLТ(МILЕS + FЕЕТ) VЕLОСIТУ(FРS) FUЕL(LВS)&#xA;    0            0       5        0        15000&#xA;   75           34    3642    -5486            1&#xA;  115           75    2410    -5275            1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It looks like the level 0 was deliberately unwinnable.&lt;/p&gt;&#xA;&lt;p&gt;(*) It appears that a term in the rocket equation, log(Minit/Mfinal) = -log(Mfinal/Minit) = -log((Minit-Mspent)/Minit) = -log(1-Mspent/Minit), may be expressed incorrectly as log(1+Mspent/Minit), resulting in progressively imprecise calculations.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2020-08-05T20:51:24.590" LastActivityDate="2020-08-09T06:20:30.150" Title="Was it possible to win the &quot;Lunar Lander&quot; game with less fuel than the default?" Tags="&lt;history&gt;&lt;basic&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15821" PostTypeId="2" ParentId="2432" CreationDate="2020-08-05T10:14:30.860" Score="1" Body="&lt;p&gt;The term was definitely used in conjunction with games in the 8-bit and 16-bit era, the 1980s.&lt;/p&gt;&#xA;&lt;p&gt;For example &lt;a href=&quot;https://archive.org/details/theone-magazine-15?q=%22game%20engine%22&quot; rel=&quot;nofollow noreferrer&quot;&gt;this item on football game 'Player Manager' from 1989&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Using the same basic game engine as Kick Off&amp;quot; ...&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2020-08-05T10:14:30.860" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15822" PostTypeId="2" ParentId="15611" CreationDate="2020-08-05T20:54:34.963" Score="4" Body="&lt;p&gt;There is a story, probably apocryphal, that there was a meeting, back in the day, between some ATT folks and some TI folks.&lt;/p&gt;&#xA;&lt;p&gt;ATT asked, &amp;quot;How did you guys come up with that layout? We did a ton of human factors stufies and focus group testing, and the top-to-bottom keypad clearly out-performed the bottom-to-top, in both efficiency and user preference.  What did you find?&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;The TI folks looked blankly back at the ATTers, &amp;quot;Studies?&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="18963" LastActivityDate="2020-08-05T20:54:34.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15823" PostTypeId="2" ParentId="15812" CreationDate="2020-08-06T10:16:18.650" Score="3" Body="&lt;p&gt;&lt;em&gt;But were audio cards of the early 90s at all capable of capturing analog audio at reasonable quality?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Kind of yes, but...&lt;/h3&gt;&#xA;&lt;p&gt;There is relatively little &amp;quot;information&amp;quot; in audio above 10kHz, and you can even go lower than that with many sources.  You can certainly recognise presence, absence, or distortion in those higher frequencies, but voice and instruments are perfectly recognisable and clear.  The sound will be a little &amp;quot;dull&amp;quot;, but in the context of 8-bit audio this was never a problem in principle.  As with Dr Johnson's dog, the wonder is not that it does it well, but that it does it at all!&lt;/p&gt;&#xA;&lt;p&gt;With higher frequencies though, they cause aliasing if they go into the sampler.  The effect of aliasing is to give a &amp;quot;reflected&amp;quot; frequency from half the sample rate, so if you sampled at 20kHz and you stuck signals at 11kHz, 12kHz and 13kHz into a sampler then you'd record aliased signals at 9kHz, 8kHz and 7kHz. Basically this gives you all sorts of distorted junk you don't want unless you cut hard at half your sample rate.&lt;/p&gt;&#xA;&lt;p&gt;8-bit sampling also was not a problem in principle.  An interesting feature of sampled sound is that its quality depends as much on dither as it does on bit depth.  Appropriate dither adds &amp;quot;hiss&amp;quot;, but also recreates the signal properly.  The UK audio industry magazine SoundOnSound had &lt;a href=&quot;https://www.soundonsound.com/techniques/digital-problems-practical-solutions&quot; rel=&quot;nofollow noreferrer&quot;&gt;a great article about digital sampling&lt;/a&gt; where they reduced a piano recording to 3-bit sampling, and with the correct dither it was still perfectly audible.&lt;/p&gt;&#xA;&lt;p&gt;In practise though, one problem for all sampled audio in the 80s was that anti-aliasing was not well understood - or even when understood, the technology did not exist to filter higher frequencies well enough to prevent aliasing.  And the other problem was that dither was also not well enough understood, and at 8-bit or even 16-bit depth the resolution is bad enough that you need it.  The result was that sampled recordings suffered for the lack of both these features.&lt;/p&gt;&#xA;&lt;p&gt;This is why early CDs in the 80s got such a bad reputation for their sound.  There was nothing in principle wrong with CDs or with CD players, and the myth of CDs and players having any kind of &amp;quot;sound&amp;quot; is provably mathematically wrong.  (The truth is that analogue playback media &lt;em&gt;does&lt;/em&gt; have a &amp;quot;sound&amp;quot;, and what you hear from a CD is accurate playback without the distortion that vinyl or tape will always add.)  Where things went wrong in the early days was with the sampling stage, because the electronics of the day didn't have adequate anti-aliasing and the mastering stage generally didn't include dither.  This was mostly solved by the 90s, but the myth persisted.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Audio cards &lt;em&gt;&lt;strong&gt;were&lt;/strong&gt;&lt;/em&gt; capable of capturing that audio at reasonable quality; but they often should have had an extra analogue filter on the way in, and the recording needed dithering adding.  And awareness of those two features back in the 80s was very low.  So sampled audio often did not use those audio cards to the full extend of their abilities.&lt;/p&gt;&#xA;" OwnerUserId="6749" LastEditorUserId="6749" LastEditDate="2020-08-06T10:24:59.700" LastActivityDate="2020-08-06T10:24:59.700" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15824" PostTypeId="1" AcceptedAnswerId="15825" CreationDate="2020-08-06T10:51:45.920" Score="5" ViewCount="241" Body="&lt;p&gt;The control codes (my C64 handbook actually calls them ASCII codes) for color changing on the Commodore 64 are as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Color       Control Code    Color number&#xA;&#xA;BLACK           $90             0&#xA;WHITE           $05             1&#xA;RED             $1C             2&#xA;CYAN            $9F             3&#xA;PURPLE          $9C             4&#xA;GREEN           $1E             5&#xA;BLUE            $1F             6&#xA;YELLOW          $9E             7&#xA;ORANGE          $81             8&#xA;BROWN           $95             9&#xA;PINK            $96            10&#xA;DARK GRAY       $97            11&#xA;MEDIUM GRAY     $98            12&#xA;LIGHT GREEN     $99            13&#xA;LIGHT BLUE      $9A            14&#xA;LIGHT GRAY      $9B            15&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So, the command &lt;code&gt;PRINT CHR$(5)&lt;/code&gt; for example changes the text color to white. But why are the colors so spread out in the code table? Internally, colors are assigned numbers from 0 (black) to 15 (light gray). The last seven colors from brown to light gray have subsequent codes starting from $95/149, but why has this not been done for all colors? For programming tasks like identifiying a color control code, translating from control codes to color numbers and vice versa this would have been much better.&lt;/p&gt;&#xA;&lt;p&gt;I first thought that the ASCII standard might have defined places for these control characters, but I could not find color codes in the original ASCII.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-08-06T12:26:05.777" Title="Why are the CBM control codes for color setting so spread out?" Tags="&lt;commodore-64&gt;&lt;graphics&gt;&lt;commodore&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15825" PostTypeId="2" ParentId="15824" CreationDate="2020-08-06T12:26:05.777" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;But why are the colors so spread out in the code table?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because these were &lt;a href=&quot;https://en.wikipedia.org/wiki/PETSCII#Commodore_64_control_characters&quot; rel=&quot;nofollow noreferrer&quot;&gt;usable holes in the area of $00..$1F and $80..$9F&lt;/a&gt;. Some part was already taken by PET control characters (like Reverse), so everything had to be shifted around - plus, not only colours were added, but function keys as well.&lt;/p&gt;&#xA;&lt;p&gt;Function keys, BTW, provide the only continuous stretch between $85 and $8C - and so are their colours.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For programming tasks like identifiying a color control code, translating from control codes to color numbers and vice versa this would have been much better.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There's much that could have been improved, but Commodores codes did evolve over several generations always trying to maintain compatibility(*1).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I first thought that the ASCII standard might have defined places for these control characters, but I could not find color codes in the original ASCII.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;ASCII was never about colour. Also, most control codes used by Commodore redefine ASCII codes. Not really compatible to start with. Colour only became a standard for text with &lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_escape_code&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANSI escape sequences&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 -  While this worked mostly, the added complexity is way worse than with IBM Mainframe codes, which are usually blamed for their artefacts. IBM at least stayed compatible all the way, while Commodore switched at will, so is C128 PETSCII in part incompatible with C64, and worse, it's incompatible with itself in 80 character vs. 40 character mode.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-08-06T12:26:05.777" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15826" PostTypeId="2" ParentId="15820" CreationDate="2020-08-06T13:50:14.840" Score="3" Body="&lt;p&gt;My final idea how to check solvability of the landing problem is the following.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Let's assume the initial position of a lander: height is 120 miles above the surface, vertical speed is 1 mile per second downwards, purely 1D problem.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The most extreme way to land is to fall freely until some point, where the full burn is applied until touchdown at zero vertical velocity. As the fuel amount is limited, there might be cases when the fuel is exhausted while the capsule still has some vertical speed at touchdown and therefore crashes.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now my idea is to reverse the problem starting from the lander standing on the surface, then apply full burn until no fuel, then see whether the lander would reach given height and with no less that given speed (this time upwards).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There is however a discrepancy in the conditions during burn: for touchdown, burn starts with full mass (and non-zero speed) and ends with empty mass (and zero speed), while for takeoff it is in the other way: zero speed with full mass.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Above is solved if you patch the code like this: Let the mass of the capsule before takeoff be empty (i.e. no fuel), then, while the engine burns, &lt;em&gt;increase&lt;/em&gt; the mass proportional to the amount burnt, stop the burn when the mass reaches full (maximum fuel). This way the conditions are fully reversed and you can apply test from p.3.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2020-08-06T15:34:54.553" LastActivityDate="2020-08-06T15:34:54.553" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15827" PostTypeId="2" ParentId="14872" CreationDate="2020-08-06T15:04:50.343" Score="11" Body="&lt;p&gt;William &amp;quot;Bill&amp;quot; Mensch exclusively designed the chip to Nintendo, and &lt;a href=&quot;https://archive.computerhistory.org/resources/access/text/2015/06/102739969-05-01-acc.pdf&quot; rel=&quot;noreferrer&quot;&gt;the interview&lt;/a&gt; of Bill Mensch leaves lots of question marks, but his motto was that both sides would benefit from the deals. Quote: &amp;quot;Ricoh supplied the Nintendo. It's the only exclusive agreement I ever gave anyone, exclusively for Ricoh to supply Nintendo 8/16-bit chips for their SuperNintendo. Well, my son got a Super Famicom.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;Another quote: &amp;quot;And &amp;quot;I licensed Ricoh the camera and copier company of Japan. I gave Ricoh an exclusive license on the W65C816 processor for use in a Nintendo game system. That exclusivity meant the I would not license anyone else to manufacture a W65C816 for Nintendo, an exclusivity for only one company, Nintendo.&amp;quot; As far I know, you could seize sales at least in the United States if there is a problem with deals like what Amiga Cd32 sales &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_CD32&quot; rel=&quot;noreferrer&quot;&gt;happened&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;And little &lt;a href=&quot;https://atariage.com/forums/topic/274263-1200xl-mysteries-continued/page/2/&quot; rel=&quot;noreferrer&quot;&gt;off the topic&lt;/a&gt;: &amp;quot;I licensed a company in Taiwan on my W65C816 design that has built probably about a billion game system chip over the years, many times what Apple and Atari combined ever sold. Those systems are still being sold to this day. I received royalties off every one sold.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;So it is not a direct answer but I cannot find information that Ricoh did not honor their deal. He has made a statement in one interview that Jack Tramiel was ripping him off. That state would possibly indicate that he had better deals with others, or would at least mention if there was a problem with licensing associates.&lt;/p&gt;&#xA;" OwnerUserId="18937" LastEditorUserId="11446" LastEditDate="2020-08-06T15:54:28.453" LastActivityDate="2020-08-06T15:54:28.453" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15829" PostTypeId="1" CreationDate="2020-08-07T19:28:46.133" Score="1" ViewCount="497" Body="&lt;p&gt;I'm trying to hook up my EUR N64 to a TV that handles both Composite and RGB SCART alright (A1200, CDTV, Megadrive).&lt;/p&gt;&#xA;&lt;p&gt;The picture is very dark and I can only make out the shapes and contours.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2bcel.jpg&quot; alt=&quot;IMAGE HERE&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is no setting in TV that allows to flip between RGB/composite SCART input. How to resolve it? Should I just buy AV cable with one of these RCA to SCART adapter? Would this work?!&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="3290" LastEditDate="2020-08-08T02:16:27.457" LastActivityDate="2020-08-10T06:12:42.967" Title="N64 displays dark picture with barely recognisable contours" Tags="&lt;nintendo-64&gt;&lt;troubleshooting&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15830" PostTypeId="1" CreationDate="2020-08-08T00:44:23.817" Score="18" ViewCount="4197" Body="&lt;p&gt;In the episode &lt;a href=&quot;https://en.wikipedia.org/wiki/Lisa_Gets_an_%22A%22&quot; rel=&quot;noreferrer&quot;&gt;Lisa Gets an &amp;quot;A&amp;quot;&lt;/a&gt; of The Simpsons, there is a fictional computer called &lt;a href=&quot;https://www.youtube.com/watch?v=wni4_n-Cmj4&quot; rel=&quot;noreferrer&quot;&gt;Coleco&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tsV8i.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tsV8i.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Is that computer based on a real one or are there any records of computers resembling that?&lt;/p&gt;&#xA;" OwnerUserId="18999" LastEditorUserId="3290" LastEditDate="2020-08-08T02:26:24.130" LastActivityDate="2020-08-10T15:35:00.593" Title="Is the Coleco computer from The Simpsons based on a real computer?" Tags="&lt;identify-this-computer&gt;&lt;coleco&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15831" PostTypeId="2" ParentId="15830" CreationDate="2020-08-08T01:03:40.987" Score="10" Body="&lt;p&gt;The only Coleco computer I know of is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Coleco_Adam&quot; rel=&quot;noreferrer&quot;&gt;Coleco Adam&lt;/a&gt;, but it did not look like the computer in the Simpsons. The Coleco logo is very similar to their actual logo though.&lt;/p&gt;&#xA;&lt;p&gt;Of course Coleco is most known for their home video game system the &lt;a href=&quot;https://en.wikipedia.org/wiki/ColecoVision&quot; rel=&quot;noreferrer&quot;&gt;ColecoVision&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4849" LastActivityDate="2020-08-08T01:03:40.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15832" PostTypeId="2" ParentId="15830" CreationDate="2020-08-08T01:39:05.897" Score="25" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Is that computer based on a real one or are there any records of computers resembling that?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Yes and no.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is no computer exactly like the one shown, but Coleco was a successful video game company, rivaling Atari with their &lt;a href=&quot;http://www.colecovisionzone.com/page/console/colecovision%20console.html&quot; rel=&quot;noreferrer&quot;&gt;ColecoVison&lt;/a&gt; system. It may have been the best system available in 1982, selling half a million units between August and Christmas.&lt;/p&gt;&#xA;&lt;p&gt;In Summer 1983 they presented the &lt;a href=&quot;https://en.wikipedia.org/wiki/Coleco_Adam&quot; rel=&quot;noreferrer&quot;&gt;Coleco Adam&lt;/a&gt; computer as well as the &lt;a href=&quot;http://www.colecovisionzone.com/page/accessory/module3.html&quot; rel=&quot;noreferrer&quot;&gt;Expansion Module #3&lt;/a&gt;, which would turn the ColecoVision into a computer system compatible with the Adam. Generally a great idea (*1), if it wasn't for two issues: for one, it was just before the video game crash of 1984, and the Adam was quite bug ridden - or at least, that was the impression customers got from media reports about the system.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;So while the device shown in this Simpsons episode is rather generic (apart from the sticker/logo) and has no resemblance to either Coleco system, the story shown clearly references to the perceived bad quality as well as the non existent sales.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In fact, the Adam had quite competitive specs for the time. While CPU, Sound and graphics hardware is comparable to later MSX systems it also featured two fast, build in cassette drives, 80 KiB of RAM, a network interface, a Printer included and quite a lot of software - including the ability to run &lt;em&gt;all&lt;/em&gt; ColecoVision games. Everyone seeing the system in 1983 was easy convinced that it would be a huge success.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-08-09T19:51:24.793" LastActivityDate="2020-08-09T19:51:24.793" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="15833" PostTypeId="1" AcceptedAnswerId="15834" CreationDate="2020-08-08T07:04:18.780" Score="6" ViewCount="189" Body="&lt;p&gt;I just found out that emulators for the Coleco Adam use a disk image file format with the DSK file extension.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Kw8Pm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Kw8Pm.jpg&quot; alt=&quot;Coleco floppy drive&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a very very overused extension on many different disk formats. Though a few DSK formats are used by multiple platforms. Also several raw track &amp;amp; sector formats use the DSK file extension.&lt;/p&gt;&#xA;&lt;p&gt;Do we know if the Coleco DSK image file format is one of those used by computers/emulators?&lt;/p&gt;&#xA;&lt;p&gt;Or if we it's a raw format, is there anything special we should know about the order of the sectors such as interleave/skew?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_floppy_disk_formats#Logical_formats&quot; rel=&quot;nofollow noreferrer&quot;&gt;According to Wikipedia&lt;/a&gt; there was only one type of floppy: 5​1⁄4-inch, double density (MFM), single-sided, 40 tracks x 8 sectors of 512 bytes, holding 160 KB.&lt;/p&gt;&#xA;&lt;p&gt;Also, what disk layout did those floppies used? Is there a boot sector, directory track, file allocation table, etc? On which tracks and sectors are those located and what is the format of a directory entry?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-08-09T07:17:15.293" LastActivityDate="2020-08-09T07:17:15.293" Title="What floppy disk format and layout and what disk image format are used for the Coleco Adam?" Tags="&lt;floppy-disk&gt;&lt;file-format&gt;&lt;disk-image&gt;&lt;coleco&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15834" PostTypeId="2" ParentId="15833" CreationDate="2020-08-08T17:40:09.967" Score="8" Body="&lt;p&gt;A partly speculative answer, working backwards from the source code of &lt;a href=&quot;https://fms.komkon.org/ColEm/&quot; rel=&quot;noreferrer&quot;&gt;Marat Fayzulin's ColEm&lt;/a&gt;, it appears to be a fixed-size sector dump. On line 52 of EMULib/FDIDisk.c you can see confirmation of the geometry you already know about:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;single sided;&lt;/li&gt;&#xA;&lt;li&gt;40 tracks;&lt;/li&gt;&#xA;&lt;li&gt;8 sectors per track;&lt;/li&gt;&#xA;&lt;li&gt;512-byte sectors.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Line 406 lists &lt;code&gt;FMT_ADMDSK&lt;/code&gt; (i.e. Adam disk) amongst those that &amp;quot;must have exact size&amp;quot; and that exact size is calculated by multiplying those fields together.&lt;/p&gt;&#xA;&lt;p&gt;I also grabbed the TOSEC collection for the ColecoVision Adam from archive.org and looked at its DSK collection; it has only 21 of them. Of those, all but two are exactly 163,840 bytes in size (i.e. 40&lt;em&gt;8&lt;/em&gt;512); the two that are not are both marked '[a]' which is apparently impenetrable ROM-hoarder code for 'alternate', i.e. both are accompanied by images of the same disk that are 163,840 bytes in size. So bad images that have been preserved through a surplus of caution is not necessarily a bad guess, though it is a guess.&lt;/p&gt;&#xA;&lt;p&gt;Peeking inside these images for further confirmation, there was no commonality in terms of a potential file header and all had what looked like catalogue/directory contents starting at exactly 0x400, further making it unlikely that there's anything present beyond a sector contents dump.&lt;/p&gt;&#xA;&lt;p&gt;Checking out &lt;a href=&quot;http://www.komkon.org/%7Edekogel/&quot; rel=&quot;noreferrer&quot;&gt;Marcel de Kogel's AdamEm&lt;/a&gt; I noticed at line 1983 of Coleco.c there is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;static const byte interleavetable[8]= { 0,5,2,7,4,1,6,3 };&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And, elsewhere, what look like high-level emulation of disk functionality:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;diskread(addr+i,(len-i&amp;lt;512)? len-i:512,&#xA;                                (block&amp;amp;(~7))|interleavetable[block&amp;amp;7],&#xA;                                 DiskStream[nr])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;With the interesting bit being &lt;code&gt;(block&amp;amp;(~7))|interleavetable[block&amp;amp;7]&lt;/code&gt; — given that there are eight sectors per track, I would guess that they're stored in a disk image in physical order and that these equate to Coleco blocks &lt;code&gt;0, 5, 2, 7, 4, 1, 6, 3&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I could find no corresponding table in ColEm though, so probably this is a software construct. So I would imagine that you'll need to do that mapping if writing a piece of software that thinks in terms of ColecoVision block numbers, but probably they're just labelled 0-7 on disk and the disk image is definitely just track 0 then track 1 then track 2...&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-08-08T17:40:09.967" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15835" PostTypeId="5" CreationDate="2020-08-09T00:50:49.977" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-08-09T00:50:49.977" LastActivityDate="2020-08-09T00:50:49.977" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15836" PostTypeId="4" CreationDate="2020-08-09T00:50:49.977" Score="0" Body="For questions about different versions of, and products for, Coleco consoles (ColecoVision,  Spectravideo SV-603, Dina) and home computers (Adam)." OwnerUserId="3290" LastEditorUserId="6659" LastEditDate="2020-08-09T01:25:09.970" LastActivityDate="2020-08-09T01:25:09.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15837" PostTypeId="2" ParentId="15820" CreationDate="2020-08-09T06:20:30.150" Score="2" Body="&lt;p&gt;The answer turns out to be positive, although a smaller interval than the default 10 seconds is needed (T&lt;em&gt;x&lt;/em&gt; before the fuel rate requests switching the time interval to chr(&lt;em&gt;x&lt;/em&gt;) - chr('0'), therefore &amp;quot;T:&amp;quot; means a 10-second interval.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MISSION CONTROL CALLING LUNAR MODULE:&#xA;MANUAL CONTROL IS NECESSARY FOR LANDING.&#xA;WHAT IS YOUR EXPERIENCE: 0 1 2(STANDARD) 3 4 5 6 7 8 9(NO EXPERIENCE) ?&#xA;WHAT IS YOURS ? 1&#xA;YOU MUST SPECIFY A FUEL RATE EACH 10 SECONDS.&#xA;RATES MUST BE ZERO OR BETWEEN 8 AND 200 LBS.PER SEC.&#xA;YOU HAVE 15500 LBS OF FUEL.&#xA;CAPSULE WEIGHT IS NOW 32500 LBS INCLUDING FUEL.&#xA;COMMENCE LANDING PROCED.&#xA;FIRST RADAR CHECK COMING UP:&#xA; TIME(SEC) ALT(MILES + FEET) VELOCITY(FPS) FUEL(LBS)&#xA;    0          120       0     5280        15500&#xA;FUEL RATE= 0&#xA;   10          109    5016     5333        15500&#xA;FUEL RATE= 0&#xA;   20           99    4224     5386        15500&#xA;FUEL RATE= 0&#xA;   30           89    2904     5438        15500&#xA;FUEL RATE= 0&#xA;   40           79    1056     5491        15500&#xA;FUEL RATE= 0&#xA;   50           68    3960     5544        15500&#xA;FUEL RATE= 0&#xA;   60           58    1056     5597        15500&#xA;FUEL RATE= T80&#xA;   68           49    3633     5639        15500&#xA;FUEL RATE= 200&#xA;   76           41    2484     5204        13900&#xA;FUEL RATE= 200&#xA;   84           33    4911     4745        12300&#xA;FUEL RATE= T40&#xA;   88           30    1730     4766        12300&#xA;FUEL RATE= T:200&#xA;   98           21    4627     4151        10300&#xA;FUEL RATE= 200&#xA;  108           14    3354     3487         8300&#xA;FUEL RATE= 200&#xA;  118            8    3735     2763         6300&#xA;FUEL RATE= 200&#xA;  128            4    1127     1971         4300&#xA;FUEL RATE= 200&#xA;  138            1    1566     1095         2300&#xA;FUEL RATE= 200&#xA;  148            0     683      120          300&#xA;FUEL RATE= T414&#xA;  152            0     223      110          244&#xA;FUEL RATE= 59&#xA;  156            0       1        1            8&#xA;FUEL RATE= 8&#xA;FUEL OUT AT 157 SECONDS.&#xA;ON THE MOON AT 157 SECONDS.&#xA;IMPACT VELOCITY OF 2 F.P.S.&#xA;FUEL LEFT 0 LBS.&#xA;PERFECT LANDING. YOU LUCKY JET JOCKEY.&#xA;TRY AGAIN (2) OR NOT (0) ? PERFECT RECORD! NO FAIR USING CALCULATING AIDS.&#xA;MISSION CONTROL OUT.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And that's even with the &amp;quot;bad&amp;quot; rocket equation. The proper one, using &lt;em&gt;-log(1-Mspent/Minit)&lt;/em&gt;, is slightly more forgiving. Also, using finer intervals, it is possible to land with a few dozen pounds of fuel left.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-08-09T06:20:30.150" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15839" PostTypeId="2" ParentId="15804" CreationDate="2020-08-09T16:09:21.940" Score="3" Body="&lt;p&gt;Most laptops of that time period used a straight through flex cable with the same pitch connector on both ends, so yours is custom made for that series/model.  While there may be other laptops that used the same pitch on the motherboard connector, finding one that would be long enough, and even which model laptop has such a compatible cable, would be a monumental task.&lt;/p&gt;&#xA;&lt;p&gt;If you could find a flat bed scanner, you could flatten the cable and scan it.  Then you could send the scanned image with dimensions and specifications(such as which side of each end has the contacts exposed) to a flex cable house for a prototype quote, and if you could find an inexpensive-enough manufacturer, you might be able to get several samples for less than the price of a night's worth of pints for each sample.  You could then re-sell the extras in case anyone else ever wanted the same cable.&lt;/p&gt;&#xA;&lt;p&gt;An alternative would be to try to repair the cable you have.  If only two or three traces are damaged, you might be able to carefully solder enameled wire or wire-wrap wire between the ends of the existing cable, if you can access any copper protruding from the connectors on each end.&lt;/p&gt;&#xA;&lt;p&gt;A third option, if you wanted to &amp;quot;roll your own&amp;quot;, would be to purchase two shorter &lt;a href=&quot;http://www.lunashops.com/images/201112/goods_img/1800_G_1324455499211.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;standard flex cables&lt;/a&gt;, which are easily sourced.  You would purchase one cable of the proper pitch for each end of your old cable, and then design and etch a thin printed circuit board to adapt the two differently-pitched cables together by soldering the cables to the adapter board.&lt;/p&gt;&#xA;&lt;p&gt;All of that being said, it may be less trouble to just purchase another scrap laptop of the same model, so that you would also have other spare parts for use later.&lt;/p&gt;&#xA;" OwnerUserId="11734" LastActivityDate="2020-08-09T16:09:21.940" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15840" PostTypeId="2" ParentId="15804" CreationDate="2020-08-09T17:53:16.970" Score="2" Body="&lt;p&gt;&lt;a href=&quot;https://www.cables.nyc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cables and Chips&lt;/a&gt; in NYC might be able to make one.  They do all sorts of one-off custom cables.  Not sure if they do flat flex though.  Got a custom SCSI cable for an ST from them back in the day; they had it done within an hour.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2020-08-10T02:44:03.220" LastActivityDate="2020-08-10T02:44:03.220" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15841" PostTypeId="2" ParentId="15804" CreationDate="2020-08-10T03:30:41.500" Score="3" Body="&lt;p&gt;Making your own cable is another option.  Flexible blank PCBs such as &lt;a href=&quot;https://www.adafruit.com/product/1894&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; (Pyralux) or &lt;a href=&quot;https://pcbfx.com/main_site/pages/products/flex_pc_board.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;these&lt;/a&gt; (1-ply fiberglass) are available&lt;sup&gt;1&lt;/sup&gt;; they can be etched using standard &lt;a href=&quot;http://quinndunki.com/blondihacks/?p=835&quot; rel=&quot;nofollow noreferrer&quot;&gt;home etching techniques&lt;/a&gt;&lt;sup&gt;2&lt;/sup&gt;.  You could scan the existing cable, use a paint program to trace the tracks (in black-and white), then etch the board as normal.&lt;sup&gt;3&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Alternatively one could use a commercial PCB manufacturer.  &lt;a href=&quot;https://www.pcbway.com/flexible.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCBway&lt;/a&gt;, for example, will do a 2-sided flexible board of up to 429×449 mm for about US$125 to US$200 delivered.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Pyralux is probably more robust than fiberglass.&lt;br /&gt;&#xA;&lt;sup&gt;2&lt;/sup&gt; I've had good success with the chemicals she uses (hydrogen peroxide, vinegar, table salt).&lt;br /&gt;&#xA;&lt;sup&gt;3&lt;/sup&gt; The full process is left as an exercise for the reader.  For fine-pitch traces, using &lt;a href=&quot;https://www.amazon.com/s?k=Photosensitive+Dry+Film&amp;amp;i=electronics&amp;amp;ref=nb_sb_noss&quot; rel=&quot;nofollow noreferrer&quot;&gt;photosensitive dry film&lt;/a&gt; would likely work better than using the toner transfer method; &lt;a href=&quot;https://www.youtube.com/watch?v=w72YCqXt-qA&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt; shows how to use it.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2020-08-11T18:58:07.353" LastActivityDate="2020-08-11T18:58:07.353" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15842" PostTypeId="2" ParentId="15829" CreationDate="2020-08-10T06:12:42.967" Score="5" Body="&lt;p&gt;Possible reasons IMHO could be:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Older computers and consoles sometimes do not work with modern TVs. Modern TV needs a more precise TV signal, especially the timing and voltage level, than older TVs.&lt;/li&gt;&#xA;&lt;li&gt;There is a problem in the N64 itself - maybe some passive parts (resistors or capacitors) in the video circuit are degraded by time.&lt;/li&gt;&#xA;&lt;li&gt;It looks like a video signal has a weak voltage. The reason could be some corrosion or &amp;quot;cold solder joint&amp;quot;, which has a significantly higher resistance, in a signal way, or some parasite conductivity with a high resistance between signal and ground...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Try it with another old TV, if you can. Or try to open the N64 carefully, looking for some rust or dust or any other signs of degradation, if you dare... The problem SHOULD be on the video way between the video processor and your TV.&lt;/p&gt;&#xA;&lt;p&gt;P.S.: Maybe this idea could help you: &lt;a href=&quot;http://members.optusnet.com.au/eviltim/n64rgb/n64rgb.html&quot; rel=&quot;noreferrer&quot;&gt;RGB Video DAC for N64&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-08-10T06:12:42.967" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15843" PostTypeId="1" AcceptedAnswerId="15845" CreationDate="2020-08-10T08:14:31.197" Score="3" ViewCount="3111" Body="&lt;p&gt;I need a way to write on floppy disks from my modern PC (motherboard GIGABYTE z730p). I own a Panasonic JU-257A606P I took from an old machine of mine, and before buying a USB floppy drive I wanted to give it a try.&lt;/p&gt;&#xA;&lt;p&gt;Is there some kind of adapter from the &amp;quot;twisty&amp;quot; IDE cable to modern SATA? Could it possibly work or should I just go for the USB one?&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="19012" LastActivityDate="2020-08-11T16:10:51.560" Title="Connecting old Floppy Drive to modern computer" Tags="&lt;floppy-drive&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15844" PostTypeId="2" ParentId="15843" CreationDate="2020-08-10T08:28:27.170" Score="1" Body="&lt;p&gt;There are various devices that can interface old floppy drives with your PC via USB. For example, I had success with reading old PC floppies using &lt;a href=&quot;https://www.kryoflux.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;KryoFlux&lt;/a&gt; but there are &lt;a href=&quot;https://www.archiveteam.org/index.php?title=Rescuing_Floppy_Disks&quot; rel=&quot;nofollow noreferrer&quot;&gt;other solutions&lt;/a&gt; out there as well. These are usually not meant to be used to expose your floppy drive as a normal/&amp;quot;live&amp;quot; drive to your OS. Instead, there's software to dump the content of your floppy into images.&lt;/p&gt;&#xA;" OwnerUserId="793" LastActivityDate="2020-08-10T08:28:27.170" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15845" PostTypeId="2" ParentId="15843" CreationDate="2020-08-10T08:45:20.450" Score="13" Body="&lt;p&gt;There are &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12474/79&quot;&gt;a number of devices&lt;/a&gt; which can be used to connect a floppy drive to a modern computer. Whether they are appropriate in your case depends on what you’re trying to do...&lt;/p&gt;&#xA;&lt;p&gt;If you want to read and write standard PC floppies (1.44 MiB, perhaps 1.68 MiB; this includes most bootable floppy images), then buying a USB floppy drive will be cheaper than buying one of the devices mentioned in the answer linked above. Many USB drives can also read and write single-density (720 KiB) disks.&lt;/p&gt;&#xA;&lt;p&gt;If you want to read (and perhaps write) non-standard PC floppies, or floppies from other platforms, or connect a 5.25“ drive, you’ll need another device.&lt;/p&gt;&#xA;&lt;p&gt;In any case, from a purely financial perspective, there’s nothing worth experimenting with before buying a USB drive, unless you can borrow the equipment. The cheapest options are USB floppy drives (even factoring in the “value” of your existing drive) and discarded PCs with floppy controllers.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-08-10T08:45:20.450" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15846" PostTypeId="1" AcceptedAnswerId="15847" CreationDate="2020-08-10T08:56:46.290" Score="8" ViewCount="8115" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15611/why-is-the-keyboard-and-cellphone-telephone-numbers-in-a-different-order&quot;&gt;This question is related to this one.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I realise not all keyboards have the NumPad, but why do those who do have a NumPad have two sets of keys for numbers ( the numbers above the letters and below the F keys and then the NumPad numbers.)&lt;/p&gt;&#xA;&lt;p&gt;My logic seems to think a second set would be redundant, that would be better to have either the NumPad or the number above the letters, but it seems all keyboards have numbers above the letters and then a certain amount have the NumPads numbers as well.&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="4589" LastEditDate="2020-08-11T09:45:40.543" LastActivityDate="2020-08-12T15:49:50.417" Title="Why do keyboards with a NumPad repeat the numbers?" Tags="&lt;keyboards&gt;" AnswerCount="6" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15847" PostTypeId="2" ParentId="15846" CreationDate="2020-08-10T09:10:52.497" Score="35" Body="&lt;p&gt;The two sets of numbers serve different purposes, and&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I realise not all keyboards have the NumPad&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;is an important factor.&lt;/p&gt;&#xA;&lt;p&gt;The main part of the keyboard &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/9129/79&quot;&gt;is based on typewriters&lt;/a&gt;, and has to provide everything required for text entry, on its own. This means that it has to include digits (including 0 and 1, which many typewriters didn’t). Typists will tend to only use this part of the keyboard.&lt;/p&gt;&#xA;&lt;p&gt;The numeric keypad is based on calculators, and is used for numeric data entry; imagine the sort of entry historically performed on printing calculators (as can be seen in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15614/79&quot;&gt;Raffzahn’s answer to your previous question&lt;/a&gt;), &lt;em&gt;e.g.&lt;/em&gt; for accounting purposes. This explains the layout, with larger &lt;kbd&gt;+&lt;/kbd&gt; and &lt;kbd&gt;Enter&lt;/kbd&gt; keys (and specifically &lt;kbd&gt;Enter&lt;/kbd&gt; rather than &lt;kbd&gt;Return&lt;/kbd&gt;), and sometimes even a &lt;kbd&gt;00&lt;/kbd&gt; key.&lt;/p&gt;&#xA;&lt;p&gt;Many computer users don’t need the numeric keypad, which is why it is optional in practice; but everyone needs the digit keys in the main section, at least some of the time. On the other hand, users who need the numeric keypad do benefit from its specific layout, and can’t use the digit keys in the main section to the same effect.&lt;/p&gt;&#xA;&lt;p&gt;Historically, early keyboards were re-purposed typewriters, with no numeric keypad. As the applications of computers expanded, along with the development of interactive uses and the associated input and output devices, keys were added to keyboards, leading to some &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/495/79&quot;&gt;famous examples which have been discussed here previously&lt;/a&gt;. Some early keyboards had pads to the right with function keys; see for example &lt;a href=&quot;http://bitsavers.org/pdf/sandersAssociates/Sanders_720_Product_Description_May69.pdf&quot; rel=&quot;noreferrer&quot;&gt;the Sanders 720&lt;/a&gt; in 1969. One of the earliest keyboards with duplicated number keys, with one set in a separate keypad on the right, was used in &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint_3300&quot; rel=&quot;noreferrer&quot;&gt;the Datapoint 3300 terminal&lt;/a&gt;, released in 1969. The numeric keypad there was called an “adding machine format keyboard”, and &lt;a href=&quot;http://bitsavers.org/pdf/datapoint/3300/Datapoint_3300_Instructions.pdf&quot; rel=&quot;noreferrer&quot;&gt;the manual&lt;/a&gt; says&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For those accustomed to using adding machines, or when large amounts of numerical data is to be entered into the computer, the adding machine format keys are especially useful.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-08-10T14:35:02.420" LastActivityDate="2020-08-10T14:35:02.420" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15848" PostTypeId="1" CreationDate="2020-08-10T09:15:43.320" Score="13" ViewCount="733" Body="&lt;p&gt;In the early days of computer CD-ROM drives, aside from SCSI interfaces, there were a number of proprietary interfaces developed by individual manufacturers. This was exemplified by PC sound cards such as this Sound Blaster 16, which included three different connectors for CD-ROM drives:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/pFHZN.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pFHZN.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;(source: &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:KL_Creative_Labs_Soundblaster_16_CT2230.jpg&quot; rel=&quot;noreferrer&quot;&gt;https://commons.wikimedia.org/wiki/File:KL_Creative_Labs_Soundblaster_16_CT2230.jpg&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;On the left of the board, we see headers for a Creative / Panasonic drive, a Mitsumi drive, and also a Sony drive.&lt;/p&gt;&#xA;&lt;p&gt;As the IDE/ATAPI standard became established, later cards were shipped with a single 'IDE' header (e.g. the &lt;a href=&quot;https://commons.wikimedia.org/wiki/Category:Sound_Blaster_32#/media/File:Soundblaster32.jpg&quot; rel=&quot;noreferrer&quot;&gt;Sound Blaster 32&lt;/a&gt;), and was eventually left off altogether when motherboards started carrying dual IDE controllers as standard.&lt;/p&gt;&#xA;&lt;p&gt;My question is as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;How did these early interfaces differ from each other, and from the eventual ATAPI standard that followed?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2020-08-11T07:17:43.513" Title="How did Sony, Panasonic and Mitsumi CD-ROM drives differ from the later ATAPI standard?" Tags="&lt;cd-rom&gt;&lt;soundblaster&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15849" PostTypeId="2" ParentId="15848" CreationDate="2020-08-10T09:40:59.117" Score="11" Body="&lt;p&gt;Physically, the Panasonic and Mitsumi interfaces are identical to unkeyed ATA interfaces, and 40-pin unkeyed IDE cables can be used to connect Panasonic and Mitsumi drives to a compatible controller. The Sony interface is based on the 34-pin floppy interface instead.&lt;/p&gt;&#xA;&lt;p&gt;In terms of signalling, according to &lt;a href=&quot;https://allpinouts.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;AllPinouts&lt;/a&gt; the &lt;a href=&quot;https://allpinouts.org/pinouts/connectors/data_storage/cd-rom-mitsumi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mitsumi&lt;/a&gt; and &lt;a href=&quot;https://allpinouts.org/pinouts/connectors/data_storage/cd-rom-panasonic/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Panasonic&lt;/a&gt; pinouts are the same (which seems surprising to me, I’ll update if I find anything different). The &lt;a href=&quot;https://allpinouts.org/pinouts/connectors/data_storage/cd-rom-sony/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sony&lt;/a&gt; pinout is very similar, but squashed to 34 pins, which is quite straightforward since four pins aren’t connected in the 40-pin interfaces and half the pins are ground (all even pins on the Mitsumi, Panasonic and Sony interfaces are ground).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://allpinouts.org/pinouts/connectors/data_storage/ata-advanced-technology-attachment-internal/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ATA interface&lt;/a&gt; supports all ATAPI drives, not just CD-ROM drives, so it uses more pins for non-ground purposes; for example, it has 16 data lines (instead of 8 on the CD-ROM specific interfaces) and 3 address lines (instead of 2). It also includes a LED driver, a key pin etc.&lt;/p&gt;&#xA;&lt;p&gt;All three interfaces used different controllers, and required different drivers. If you’re really interested you can look at the different implementations &lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/cdrom?id=e654bc4393e8&quot; rel=&quot;nofollow noreferrer&quot;&gt;in older versions of the Linux kernel&lt;/a&gt;; they provide &lt;a href=&quot;https://www.kernel.org/doc/html/latest/cdrom/cdrom-standard.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;a unified interface&lt;/a&gt; which makes it easier to understand them, but it’s still a lot of work to describe the differences.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-08-11T07:17:43.513" LastActivityDate="2020-08-11T07:17:43.513" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15850" PostTypeId="1" CreationDate="2020-08-10T10:28:52.107" Score="12" ViewCount="4228" Body="&lt;p&gt;In the 1998 Swedish comedy musical &amp;quot;Åke från Åstol&amp;quot;, there's a moment toward the end when a man is pushing around some sort of Amiga-looking computer with a monitor and mouse on a wheelbarrow. The context of the scene is that this fisherman has just come back from the &amp;quot;big city&amp;quot; after learning about computers and now he is bringing one of them home in order to &amp;quot;sell herring in cyberspace&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Presumably for comedic effect (and probably also prop cost reasons), they seem to have deliberately used an outdated computer, or at least one that would be &lt;em&gt;perceived&lt;/em&gt; as such by the general public at the time. The relatively cheap Amiga computers were probably a common sight here in the late 1980s or at least early-to-mid 1990s, but not so much by year 1998, when powerful &amp;quot;home PCs&amp;quot; started becoming a thing in many homes, being paid off monthly through the salary with a government deal.&lt;/p&gt;&#xA;&lt;p&gt;I'm trying to identify what kind of machine this is. It looks like an Amiga of some kind, but I can't read &amp;quot;Amiga&amp;quot; anywhere on the front. Maybe the brand was removed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KOW5l.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KOW5l.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19013" LastEditorUserId="3290" LastEditDate="2020-08-11T09:34:14.423" LastActivityDate="2020-08-22T10:39:53.080" Title="Is this an Amiga? If so, which model?" Tags="&lt;commodore&gt;&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15851" PostTypeId="2" ParentId="15850" CreationDate="2020-08-10T10:37:33.733" Score="43" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I'm trying to identify what kind of machine this is. It looks like an Amiga of some kind,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's a &lt;a href=&quot;https://www.c64-wiki.com/wiki/C64C&quot; rel=&quot;noreferrer&quot;&gt;Commodore C64-II&lt;/a&gt; also known as C64C:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FLEhm.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FLEhm.jpg&quot; alt=&quot;C64-II&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The mouse seams to be an Apple &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Apple_desktop_mouse.jpg&quot; rel=&quot;noreferrer&quot;&gt;ADB mouse&lt;/a&gt; (Type A9M0331), sold from 1986 until the mid 1990s:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/D4tbIt.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/D4tbIt.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but I can't read &amp;quot;Amiga&amp;quot; anywhere on the front. Maybe the brand was removed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If you look into the lower right, you'll see a tag reading &amp;quot;&lt;strong&gt;commodore 64&lt;/strong&gt; PERSONAL COMPUTER&amp;quot;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Pxkn5.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Pxkn5.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-10T10:57:44.533" LastActivityDate="2020-08-10T10:57:44.533" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15852" PostTypeId="2" ParentId="15846" CreationDate="2020-08-10T12:09:19.513" Score="15" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I realise not all keyboards have the NumPad, but&#xA;why do those who do have a NumPad have two sets&#xA;of keys for numbers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, it wouldn't be a numeric keypad if it didn't have numbers.&lt;/p&gt;&#xA;&lt;p&gt;The answer is surely &amp;quot;because it is exceedingly useful&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I'm a programmer; I don't use the numeric keypad for numerics in programming, when I'm typing &amp;quot;all characters&amp;quot;.  I'm expecting standard typewriter layout when I'm doing that.&lt;/p&gt;&#xA;&lt;p&gt;But I do use the keypad when working primarily with numbers -- e.g., in calculator programs, personal-finance programs, and (oddly) when entering numeric codes from two-factor-authentication text messages.&lt;/p&gt;&#xA;&lt;p&gt;The usefulness appears to stem from the fact that I can type all digits with one hand, freeing the other up for holding whatever I'm reading from (bank statement, phone, whatever).&lt;/p&gt;&#xA;&lt;p&gt;So why not just have the numeric keypad?   The answer is, it costs nothing to retain the top-row digits even though you've added more keys.  You can't usefully use those shifted key positions for anything else: you'd end up with a non-standard layout that no-one would want.&lt;/p&gt;&#xA;&lt;p&gt;I see no downside to having two sets of digits. I wouldn't buy a keyboard that didn't have a numeric keypad.&lt;/p&gt;&#xA;&lt;p&gt;(Laptops are an exception due to size).&lt;/p&gt;&#xA;&lt;p&gt;My experience with numeric keypads separate from the main typing array goes back to the 1977 &lt;a href=&quot;http://bitsavers.org/pdf/dec/terminal/vt52/EK-VT5X-OP-001_DECscope_Users_Manual_Mar77.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEC VT52&lt;/a&gt;, though I admit that there I mostly used it in &amp;quot;alternate keypad mode&amp;quot;, for text editor commands.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="2037" LastEditDate="2020-08-12T04:32:55.523" LastActivityDate="2020-08-12T04:32:55.523" CommentCount="24" ContentLicense="CC BY-SA 4.0" />
  <row Id="15853" PostTypeId="2" ParentId="6281" CreationDate="2020-08-10T13:06:39.647" Score="1" Body="&lt;p&gt;A Soviet computer Vector-06c did have a CP/M port called Micro-DOS that could work with a RAM disk only.&lt;/p&gt;&#xA;&lt;p&gt;Cold boot was either from a cassette tape or from ROM (cannot remember, though, if the operating system was a part of the on-board ROM, or one still had to plug an external ROM cartridge - either way, the bootloader could boot from both)&lt;/p&gt;&#xA;&lt;p&gt;The RAM disk itself was an extension board with up to 256Kb of RAM, either memory-mapped into the CPU address space (think rudimentary EMS with a page size of 8 Kb), or addressable via the stack pointer (this mode gave some performance boost for sequential reads/writes of 16-bit words with a 8-bit CPU, and I guess this mode was heavily used by the OS for simulating disk data transfers).&lt;/p&gt;&#xA;&lt;p&gt;Of course if an application program accessed the RAM disk directly, it would most likely corrupt the data and/or crash the OS.&lt;/p&gt;&#xA;" OwnerUserId="3303" LastEditorUserId="3303" LastEditDate="2020-08-10T13:14:17.707" LastActivityDate="2020-08-10T13:14:17.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15854" PostTypeId="2" ParentId="15843" CreationDate="2020-08-10T14:41:29.877" Score="7" Body="&lt;p&gt;If you want something more flexible than a USB floppy drive, but barely more expensive, and you're OK with beginner-level through-hole soldering and a command-line interface on the reading/writing tool, take a look at the &lt;a href=&quot;http://cowlark.com/fluxengine/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FluxEngine&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The FluxEngine is a very cheap USB floppy disk interface capable of reading and writing exotic non-PC floppy disk formats. It allows you to use a conventional PC drive to accept Amiga disks, CLV Macintosh disks, bizarre 128-sector CP/M disks, and other weird and bizarre formats. (Although not all of these are supported yet. I could really use samples.)&lt;/p&gt;&#xA;&lt;p&gt;The hardware consists of a single, commodity part with a floppy drive connector soldered onto it. No ordering custom boards, no fiddly surface mount assembly, and no fuss: nineteen simpler solder joints and you’re done. You can make one for $15 (plus shipping).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(Basically, you solder one row of the pins on the floppy connector through the holes on a ready-made FPGA development board and assembly is done. If you're poor, you can even use regular pin header and just remember not to connect the cable the wrong way around.)&lt;/p&gt;&#xA;&lt;p&gt;There's a chart at that link detailing which formats the software for it currently knows how to write, which is &lt;a href=&quot;https://github.com/davidgiven/fluxengine#old-disk-formats&quot; rel=&quot;nofollow noreferrer&quot;&gt;also&lt;/a&gt; on the GitHub page for the software.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; I haven't tried it. I already owned a KryoFlux by the time I learned of it and my next purchase is probably going to be parts for a &lt;a href=&quot;https://github.com/sanni/cartreader&quot; rel=&quot;nofollow noreferrer&quot;&gt;sanni reader&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastEditorUserId="1920" LastEditDate="2020-08-11T16:10:51.560" LastActivityDate="2020-08-11T16:10:51.560" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15855" PostTypeId="2" ParentId="15830" CreationDate="2020-08-10T15:35:00.593" Score="1" Body="&lt;p&gt;The script is clearly a reference to the Coleco Adam, but the computer design doesn't resemble the machine.  Most likely the animation department had no idea what such a machine would actually look like.  While it probably wouldn't have been hard to find reference material for the artists, having an arbitrarily-chosen case design that would have been considered out of date even when the Adam was new &lt;em&gt;probably makes the show even funnier than it would have been with a historically accurate picture&lt;/em&gt;.  Perhaps poor Gil wasn't actually hawking real Coleco Adams, but instead got snookered in the 1980s into buying some fake Coleco Adams he's been trying to offload ever since.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-08-10T15:35:00.593" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15856" PostTypeId="1" AcceptedAnswerId="15857" CreationDate="2020-08-10T20:15:01.837" Score="10" ViewCount="1016" Body="&lt;p&gt;I implemented a differential equation solver on my Dragon 32 (which uses Microsoft Extended Color BASIC) but the results I get quickly diverge from those I expect, which are the same as those I get when I write the solver in Python. I suspect that the divergence is due to numerical precision, but I don't know how to model the precision of numbers stored in this BASIC (meanwhile, modelling imprecision in IEEE854 floating point numbers is well-documented).&lt;/p&gt;&#xA;&lt;p&gt;I don't even know whether non-integer numbers are stored using a floating point representation: all I know (which I worked out by &lt;code&gt;PRINT MEM&lt;/code&gt; before and after &lt;code&gt;DIM&lt;/code&gt;ing some of my data, to ensure the problem would fit in memory) is that five bytes are used per number. None of the books I own on the Dragon 32 talk about numerical precision at all, most of them deal only with integer maths (including the Dragon manual, which only has a little diversion into the trig functions at the end).&lt;/p&gt;&#xA;&lt;p&gt;Is the memory layout of numbers in Microsoft Extended BASIC documented anywhere? What limits on precision are there in use?&lt;/p&gt;&#xA;" OwnerUserId="18500" LastEditorUserId="3290" LastEditDate="2020-08-11T05:39:14.197" LastActivityDate="2020-08-11T16:54:33.327" Title="How can I understand numerical precision of values in Microsoft BASIC (on the Dragon 32)?" Tags="&lt;floating-point&gt;&lt;microsoft-basic&gt;&lt;dragon-32&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15857" PostTypeId="2" ParentId="15856" CreationDate="2020-08-10T21:02:53.600" Score="11" Body="&lt;p&gt;Microsoft Extended BASIC, as used by the Dragon, uses a 40 bit (5 byte) float format(*1):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; Field          Size (Bits)  &#xA; Exponent Sign      1 &#xA; Exponent           7&#xA; Mantissa Sign      1&#xA; Mantissa          31&#xA;                   --&#xA;                   40&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Numbers are always normalized with the top mantissa bit removed.&lt;/p&gt;&#xA;&lt;p&gt;As an oddity, they are stored in a 6 byte structure with the 6th byte unused.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I suspect that the divergence is due to numerical precision,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Most likely, as Microsofts 40 bit format differs from &lt;a href=&quot;https://en.wikipedia.org/wiki/IEEE_754-2008_revision#Clause_3:_Formats&quot; rel=&quot;noreferrer&quot;&gt;IEEE-754&lt;/a&gt; single (32 Bit) as well as from double (64 bit). Since Python uses double IEEE format, its results will differ in precision and these differences may add up.&lt;/p&gt;&#xA;&lt;p&gt;In addition, if you use any trigonometric function or square-root, results may wander off even more due to a different approximation.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;Some unordered thoughts:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;One solution would be to use single precision (with &lt;a href=&quot;https://en.wikipedia.org/wiki/NumPy&quot; rel=&quot;noreferrer&quot;&gt;numpy&lt;/a&gt;) with your Python solver, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15856/how-can-i-understand-numerical-precision-of-values-in-microsoft-basic-on-the-dr/15857?noredirect=1#comment52995_15857&quot;&gt;Jean-François Fabre sugsests&lt;/a&gt;. But it's still a different precision, so depending on the task the results may still vary a lot.&lt;/p&gt;&#xA;&lt;p&gt;This could be levelled by 'amputating' the BASIC numbers down to single precision as well by clearing the lowest mantissa byte after each computational assignment. Doing this in BASIC alone will be rather cumbersome (*2), but a quite short machine routine called with &lt;code&gt;USR&lt;/code&gt; will do the trick.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;100 A=1+1 : A=USR0(A)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;USR&lt;/code&gt; will lookup the variable and move it to the Floating Point Accumulator at &lt;a href=&quot;http://dragon32.info/info/memmap.html&quot; rel=&quot;noreferrer&quot;&gt;$004F&lt;/a&gt; and the assignment stores the result in A again. Of course any other variable can be uses as well (*3). Since BASIC is doing most of the Stuff, the machine routine is essentially just two instructions:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    B7 53 00   STAA   $4F    ; Clear the lowest mantissa byte (*4)&#xA;    39         RTS           ; Return to BASIC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Of course this has to be stored somewhere. For routines that short, the 6 unused (*5) bytes at $011A work fine, so the add&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 POKE &amp;amp;H011A,&amp;amp;HB7: POKE  &amp;amp;H011B,....&#xA;20 DEFUSR0=&amp;amp;H011A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;to initialise the &lt;code&gt;USR&lt;/code&gt; function.&lt;/p&gt;&#xA;&lt;p&gt;(CAVEAT: this is a quick hack from my faint memory while peeking at the &lt;a href=&quot;http://dragon32.info/info/memmap.html&quot; rel=&quot;noreferrer&quot;&gt;memory map&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Of course, this still doesn't solve possible different approximations of build in function. Only precision should now be aligned.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(And sorry for being carried away, it was too tempting :))&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - It's the so called Extended Format (sic) added with the 8 KiB &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_BASIC&quot; rel=&quot;noreferrer&quot;&gt;extended Basic&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Or not, as the Dragon knows VATPTR ... so forget all that follows and do simply &lt;code&gt;A=1+1 : POKE VARPTR(A)+4,0&lt;/code&gt;. With preparing the addresses ahead of time (&lt;code&gt;AA=VARPTR(A)+4 ... POKE AA,0&lt;/code&gt;) this might be as fast as the machine language routine :(&lt;/p&gt;&#xA;&lt;p&gt;*3 - BTW, to speed up calculations it's helpful to define the most used variables first.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Confused ... well, this is using a neat side effect. BASIC passes the type of the parameter in A - 1 for a string and 0 for a float - so we receive a cleared A, ready to be used :))&lt;/p&gt;&#xA;&lt;p&gt;*5 - Only with a Dragon 32.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-10T22:35:51.953" LastActivityDate="2020-08-10T22:35:51.953" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15858" PostTypeId="2" ParentId="15856" CreationDate="2020-08-10T21:06:32.787" Score="5" Body="&lt;p&gt;As far as I can see, any Microsoft BASIC at that time should have used &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Binary_Format#Technical_details&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft Binary Format&lt;/a&gt; for floating-point numbers. Since you found out that numbers are occupying five bytes, that should mean that your implementation is using the 40-bit format.&lt;/p&gt;&#xA;&lt;p&gt;This format is similar enough to IEEE-754 binary formats in that it has a sign bit, a base-2, biased exponent, and a mantissa with an implicit 1-bit to the left (but there is no support for denormals). The 40-bit Microsoft format has an 8-bit exponent and a 31-bit mantissa, as compared to single-precision IEEE-754's 8 exponent + 23 mantissa, or double-precision IEEE-754's 11 exponent + 52 mantissa, so its precision (as long as you don't touch on the range of denormals) should lie between the two.&lt;/p&gt;&#xA;" OwnerUserId="336" LastEditorUserId="336" LastEditDate="2020-08-11T16:54:33.327" LastActivityDate="2020-08-11T16:54:33.327" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15859" PostTypeId="2" ParentId="15856" CreationDate="2020-08-10T21:53:12.397" Score="4" Body="&lt;p&gt;You may want to look at the &lt;a href=&quot;http://people.math.sc.edu/Burkardt/c_src/paranoia/paranoia.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PARANOIA&lt;/a&gt; floating point test suite, which tests for quite a few characteristics of the floating point format and implementation (range, bits of precision, rounding, guard bits, etc.).&lt;/p&gt;&#xA;&lt;p&gt;It is said that it was originally written in BASIC, but I could not find the BASIC version (EDIT: hat tip to @scruss, &lt;a href=&quot;https://www.netlib.org/paranoia/paranoia.b&quot; rel=&quot;nofollow noreferrer&quot;&gt;here it is&lt;/a&gt;). The C variant, as follows from the comments, is a rewrite of the Pascal version, which is a rewrite of the original BASIC version.&lt;/p&gt;&#xA;&lt;p&gt;The coding style, though, is very easy to follow to re-convert back to BASIC. For example, the numerical radix of the f. p. representation is calculated as follows (note that literal constants are replaced with variables to inhibit optimization, but it should not be a problem in BASIC, you could write &lt;code&gt;1.0&lt;/code&gt; instead of &lt;code&gt;One&lt;/code&gt;, etc.):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;printf ( &amp;quot;Searching for Radix and Precision.\n&amp;quot; );&#xA;W = One;&#xA;&#xA;do {&#xA;    W = W + W;&#xA;    Y = W + One;&#xA;    Z = Y - W;&#xA;    Y = Z - One;&#xA;} while (MinusOne + FABS(Y) &amp;lt; Zero);&#xA;&#xA;/*&#xA;  Now W is just big enough that |((W+1)-W)-1| &amp;gt;= 1.&#xA;*/&#xA;Precision = Zero;&#xA;Y = One;&#xA;do {&#xA;    Radix = W + Y;&#xA;    Y = Y + Y;&#xA;    Radix = Radix - W;&#xA;} while ( Radix == Zero);&#xA;&#xA;if ( Radix &amp;lt; Two ) {&#xA;    Radix = One;&#xA;}&#xA;&#xA;printf ( &amp;quot;Radix = %f\n&amp;quot;, Radix );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In the pre-IEEE854 formats, radix was not necessarily 2. For example, it was 16 in the IBM floating point.&lt;/p&gt;&#xA;&lt;p&gt;Other specific tests are equally short and lucid.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2020-08-10T22:19:24.363" LastActivityDate="2020-08-10T22:19:24.363" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15860" PostTypeId="2" ParentId="15846" CreationDate="2020-08-10T23:39:14.407" Score="1" Body="&lt;p&gt;While not a better answer per se, the others have excluded what I consider a key(get it?) point. The number pad also doubled as a cursor movement input &lt;em&gt;prior to arrow keys being commonplace&lt;/em&gt;(on IBM-PC). I've had trouble finding a good reference, but &lt;a href=&quot;https://www.addictivetips.com/windows-tips/use-home-end-and-arrows-key-on-a-number-pad-on-windows-10/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link at least mentions it&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In the early days, keyboards didn’t have dedicated arrow keys so the&#xA;number pad keys doubled in function. You could use it to enter&#xA;numbers, and you could use the arrow keys to move your cursor. The&#xA;number pad seemed like a good place to put the keys too since it was&#xA;easy to use and it didn’t interfere with the letter keys.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Keyboards have changed quite a bit but you’ll be surprised to know&#xA;that a certain aspect of it dates back to when a computer was used&#xA;exclusively through the terminal and GUI, as a concept, didn’t exist.&#xA;This is the number pad with its home, end, and arrow key buttons. To&#xA;be precise, it’s the arrow keys on a number pad. The other keys, i.e.,&#xA;Home, End, Pgup, and Pgdn are included to make it more functional.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As pointed out by @Raffzhan and @EuroMicelli this is relevant because most modern keyboards derived from the IBM-PC, but many alternative keyboards existed with various configurations and arrow keys outside the number pad/as their own section of the keyboard. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Arrow_keys&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia article on Arrow Keys&lt;/a&gt; actually has a decent overview on some other combinations as outlined by EuroMicelli, but nothing as early, and relevant to this conversation, as @Raffzahn's link to the &lt;a href=&quot;http://xahlee.info/kbd/datapoint_3300.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;DataPoint 3300&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19020" LastEditorUserId="19020" LastEditDate="2020-08-11T17:11:22.087" LastActivityDate="2020-08-11T17:11:22.087" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15861" PostTypeId="2" ParentId="15846" CreationDate="2020-08-11T04:18:56.797" Score="3" Body="&lt;p&gt;There is a fairly obvious answer: to a lot of people (non-accountants, basically) it is NOT a NumPad, it is a cursor control pad.  If you look closely, you will see that the keys are labeled with arrows, PgUp, PgDn, and so on.  This is not an accident.&lt;/p&gt;&#xA;&lt;p&gt;I've been using the now-standard 101/102 key keyboards since they were introduced, but I don't think I have EVER intentionally used that &amp;quot;NumPad&amp;quot; to enter numbers.  In fact, within X I've disabled NumLock (and CapsLock).&lt;/p&gt;&#xA;&lt;p&gt;Perhaps a better question would be why keyboards duplicate the cursor movement keys, while placing them awkwardly so they're difficult to use correctly.&lt;/p&gt;&#xA;" OwnerUserId="19026" LastActivityDate="2020-08-11T04:18:56.797" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="15863" PostTypeId="2" ParentId="15846" CreationDate="2020-08-11T11:51:47.453" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;... that it would be better to have either the NumPad or the numbers&#xA;above the letters...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;At least some of us like using the NumPad for numerical entry, so we prefer keyboards that have one. You are asking why keyboards marketed at us still have the upper numerical row.&#xA;I'd say it's because you can't easily remove those keys - even if the numbers aren't needed, &lt;strong&gt;where do you put the symbols?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;One could scatter them around accessed by an extra &amp;quot;shift&amp;quot; key (like Fn on laptops) but then I'd have different keyboard layouts in different rooms, driving me nuts every time I needed a '%' or ')'.&lt;/p&gt;&#xA;&lt;p&gt;People who don't use the NumPad can buy a keyboard without one. People who do can buy a keyboard with one, and (as it still also has that upper row) it's still usable by everyone.&lt;/p&gt;&#xA;" OwnerUserId="18757" LastEditorUserId="18757" LastEditDate="2020-08-12T10:53:59.300" LastActivityDate="2020-08-12T10:53:59.300" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15865" PostTypeId="1" AcceptedAnswerId="15866" CreationDate="2020-08-12T10:05:48.663" Score="21" ViewCount="2098" Body="&lt;p&gt;The question of ownership of Amiga-related intellectual property post-Commodore is &lt;a href=&quot;https://amitopia.com/a-eon-amigaone-development-hyperion-issues/&quot; rel=&quot;noreferrer&quot;&gt;famously&lt;/a&gt; &lt;a href=&quot;http://www.generationamiga.com/2020/01/28/cloanto-vs-hyperion-jury-trial-is-currently-set-for-august-3rd-2020/&quot; rel=&quot;noreferrer&quot;&gt;difficult&lt;/a&gt; to answer. My question is: does anyone &amp;quot;own&amp;quot; Commodore's semiconductor IP now, and if so, who?&lt;/p&gt;&#xA;&lt;p&gt;I imagine that patents have expired everywhere that they were granted, as it's been 26 years since Commodore went bankrupt. I would also guess (but welcome confirmation) that the various &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_custom_chips&quot; rel=&quot;noreferrer&quot;&gt;Amiga chip designs&lt;/a&gt; are part of the IP that Escom-&amp;gt;Amiga Inc.-&amp;gt;A-Eon own/claim to own.&lt;/p&gt;&#xA;&lt;p&gt;But Commodore had a lot of other semiconductor designs too, including those gained through the MOS acquisition: who owns those now?&lt;/p&gt;&#xA;" OwnerUserId="18500" LastActivityDate="2020-08-12T15:51:41.010" Title="Who ended up owning Commodore's semiconductor IP?" Tags="&lt;amiga&gt;&lt;commodore&gt;&lt;mos-650x&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15866" PostTypeId="2" ParentId="15865" CreationDate="2020-08-12T15:12:47.863" Score="21" Body="&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; The ownership issue is really associated with the trademarked brand and product names, and the copyrighted ROM software, not the processor/co-processor hardware.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;I think there are two &lt;strong&gt;mainstream products&lt;/strong&gt; who's licensing terms are instructive to understanding how the earlier (non-Amiga) Commodore IP has been used and defended by the new rights holders after Commodore's liquidation in 1994.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The 2004 &lt;a href=&quot;https://en.wikipedia.org/wiki/C64_Direct-to-TV&quot; rel=&quot;noreferrer&quot;&gt;C64 Direct-to-TV&lt;/a&gt; - a single-chip implementation of the Commodore 64 computer, contained in a joystick. Also known as the &amp;quot;C64 DTV&amp;quot;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The 2019 &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_retro_style_video_game_consoles#Dedicated_retro_style_home_consoles_(2001%E2%80%93present)&quot; rel=&quot;noreferrer&quot;&gt;THEC64 mini/maxi&lt;/a&gt; - A software emulator based recreation of the C64 with reproduction case.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The C64 DTV, which was sold by Mammoth Games, has licensing terms printed on the bottom of the device stating &amp;quot;&lt;em&gt;C64 and Commodore 64 are registered trademarks&lt;/em&gt; of Commodore International B.V., used under license&amp;quot;. Tulip Computers owned the rights to the C64 (acquired in 1997) and authorized this product to be built. Later, in late-2004, Tulip sold the Commodore trademark to a new holder, and apparently conveyed licensing that allowed continued sale and use of the trademark by the C64 DTV.&lt;/p&gt;&#xA;&lt;p&gt;Since the time of the C64 DTV, there have been many re-implementations of the C64 hardware offered for sale, usually implemented as compatible VHDL synthesized in an FPGA. Though some newer products like THEC64 rely on modern SoC computers with software emulation of the C64 hardware.&lt;/p&gt;&#xA;&lt;p&gt;To my knowledge, such reverse-engineering of hardware via either FPGA's or emulation doesn't require a license, and none of these products have resulted in successful law suits. However, there are copyright holder issues related to the C64 ROM software and to the use of the trademarks &amp;quot;Commodore&amp;quot; and &amp;quot;Commodore 64&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Thus, we can see this in practice by just looking at the rights acknowledgements that come with THEC64. This states &amp;quot;&lt;em&gt;CBM 8-Bit ROMs © 1977-1984&lt;/em&gt; Cloanto® Corporation. All Rights Reserved. Furnished under license from Cloanto®&amp;quot;. Notably, the trademarked terms that could be licensed for this product are avoided. Instead, the new trademark &amp;quot;THEC64&amp;quot; has been registered by the manufacturer to use in the marketing of this product. Meanwhile, they had to go to Cloanto for rights to use their copyrighted ROM.&lt;/p&gt;&#xA;&lt;p&gt;Obviously, both of these products rely on previous Commodore IP related to the C64, including the C64's custom chips, CPU, and ROM's. Additionally, and probably more important, the C64 DTV gleefully used the Commodore brand and C64 name/trademark when sold to the public in 2004. In contrast, THEC64 actively avoids trademarked terms that still have ownership claims associated with them. The timeline of ownership for both trademarks and patents is well-documented on &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_International#Post-Commodore_International_Ltd.&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia's Commodore International&lt;/a&gt; page. Gateway 2000, the large American computer manufacturer, ended up with the Commodore IP in 1997, but was mainly interested in the Amiga patents. Thus, Gateway sold off the trademarks and copyrights, and presumably kept and enforced the patents until they expired. This leaves us with the prevailing situation today, centered around trademarks and ROM copyrights.&lt;/p&gt;&#xA;&lt;p&gt;In conclusion, Commodore's old IP is only protected by the new rights-holders through trademark licensing and copyrights on the software ROM. The other silicon, like Amiga custom chips, if not still covered by a patent, can be and has been reverse-engineered and sold by various manufacturers.&lt;/p&gt;&#xA;&lt;p&gt;So, the situation does not appear to be any different whether you are talking about the earlier Commodore 8-bit computers, or the later Amigas. Such products would require licensed ROM's, being either the C64 firmware or Amiga Kickstart, both of which are owned by Cloanto. If you want to use trademarked terms like &amp;quot;Commodore&amp;quot; or &amp;quot;Amiga&amp;quot; on a product, then that is also likely to require a license.&lt;/p&gt;&#xA;&lt;p&gt;*** &lt;em&gt;I am not a lawyer, and nothing in this answer should be construed as legal advice. This is my opinion based on a sampling of existing products and their published license arrangements.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-08-12T15:51:41.010" LastActivityDate="2020-08-12T15:51:41.010" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15867" PostTypeId="2" ParentId="15846" CreationDate="2020-08-12T15:49:50.417" Score="-1" Body="&lt;p&gt;A touch typist will prefer the typewriter number keys for all but long strings of digits.&lt;/p&gt;&#xA;&lt;p&gt;A touch typist can type the number keys that are above the letters without looking, pretty quickly, and without moving the hands from the home position.  Although using the numeric keypad for digits is faster, it takes so long to move the right hand from the home row to the numeric keypad, and then back again once the digits are typed, that it takes a very long string of digits to make the cost of using the keypad worth it.&lt;/p&gt;&#xA;&lt;p&gt;Having to look to direct the hand is another cost of using the numeric keypad.  A touch typist can keep the eyes on the screen, on the work, where mistakes can be spotted and corrected quickly.&lt;/p&gt;&#xA;" OwnerUserId="3324" LastActivityDate="2020-08-12T15:49:50.417" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15868" PostTypeId="2" ParentId="15685" CreationDate="2020-08-12T15:56:34.697" Score="7" Body="&lt;p&gt;All these answers accurately describe the most salient features of Multics. One of the main consequences was that it could only run on specialized hardware.&lt;/p&gt;&#xA;&lt;p&gt;From a programmer's standpoint, dynamic links had a fantastic use: when debugging a program,  you could pause on a breakpoint, fix your code, recompile it, update the link and continue execution (if you use an interpreted language, this may sound trivial, but for compiled languages, this was paradise).&lt;/p&gt;&#xA;&lt;p&gt;The ring-based protection system was also very nice. It allowed multiple organizations to have projects on the same machine, and each organization to manage the protection of their own projects.&#xA;Having said that, UNIX' set_uid bit was a wonderful invention (if I had to rate the nicest features of UNIX, I would certainly place it in the top 3).&lt;/p&gt;&#xA;" OwnerUserId="19047" LastActivityDate="2020-08-12T15:56:34.697" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15869" PostTypeId="2" ParentId="15685" CreationDate="2020-08-12T18:45:48.553" Score="5" Body="&lt;p&gt;Perhaps the best way of thinking about it is that Unix basically is a minimal implementation of Multics (the ideas in it a least) with absolutely everything that was not strictly necessary to bring up the system stripped out.  So segmenting and virtual memory are not really needed (at least to get started).  Complex permissions, ACLs or protection rings, quotas, mandatory access controls, ... -- all gone.  The idea being to have an absolutely minimal system that could run on minimal hardware, and could be implemented by one person (or a minimal team).&lt;/p&gt;&#xA;&lt;p&gt;Since a lot of the philosophy behind Unix is the same as Multics, over time pretty much all the features of Multics have made their way into Unix, though some of the &amp;quot;minimalist&amp;quot; philosophy has survived.  So one can argue that the &lt;em&gt;only&lt;/em&gt; difference between Unix and Multics is that minimalist philosophy&lt;/p&gt;&#xA;" OwnerUserId="19052" LastEditorUserId="19052" LastEditDate="2020-08-12T18:51:10.557" LastActivityDate="2020-08-12T18:51:10.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15871" PostTypeId="2" ParentId="13995" CreationDate="2020-08-13T13:16:13.783" Score="3" Body="&lt;p&gt;Bill Hart (Amiga investor and director) told the story of Steve Jobs visiting Amiga in 1983.&lt;/p&gt;&#xA;&lt;p&gt;On the way out, Jobs said, “I don’t see anything here that would ever be a threat to the Macintosh.”&lt;/p&gt;&#xA;&lt;p&gt;So this could be easy and straight answer to original question.&lt;/p&gt;&#xA;&lt;p&gt;Link to Bill Hart talk (2015.): &lt;a href=&quot;https://youtu.be/GszY6dgSGTg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/GszY6dgSGTg&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11238" LastActivityDate="2020-08-13T13:16:13.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15872" PostTypeId="1" CreationDate="2020-08-13T14:38:51.973" Score="15" ViewCount="2201" Body="&lt;p&gt;I've been reading manuals for BASIC implementations and the earliest reference I can find to PEEK, POKE, and USR is in the Altair BASIC 3.2 manual, published in 1975. This morning I came across this article, in the &lt;a href=&quot;https://archive.computerhistory.org/resources/access/text/2015/02/102740021-05-14-acc.pdf&quot; rel=&quot;noreferrer&quot;&gt;March 31, 1976 issue&lt;/a&gt; of the Homebrew Computing Newsletter: &amp;quot;Tiny BASIC is a proper subset of Dartmouth BASIC... For the 6800, this language has been augmented to include the functions RND, USR, and PEEK and POKE, giving the user access to all his system components in the 6800 from the BASIC program.&amp;quot; Tom Pittman writes as if he expects his readers to know what these are; now, the Homebrew club did have an early incident of software piracy, with 50 paper tape copies of Altair BASIC distributed, so he might have assumed they knew it from Altair BASIC, but not everyone had an 8080, so that seems a stretch.&lt;/p&gt;&#xA;&lt;p&gt;What earlier usage, if any, is there of these functions in an implementation of BASIC or another language? Or were they a Microsoft invention?&lt;/p&gt;&#xA;" OwnerUserId="18934" LastEditorUserId="6659" LastEditDate="2020-08-14T13:09:22.080" LastActivityDate="2020-08-14T13:09:22.080" Title="What is the oldest reference to PEEK, POKE, and USR?" Tags="&lt;history&gt;&lt;basic&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15874" PostTypeId="2" ParentId="15872" CreationDate="2020-08-13T15:38:49.810" Score="11" Body="&lt;p&gt;According to the book &lt;a href=&quot;https://www.goodreads.com/book/show/38925026-endless-loop&quot; rel=&quot;noreferrer&quot;&gt;Endless Loop: The History of the BASIC Programming Language&lt;/a&gt; by Mark Jones Lorenzo, they are indeed a Microsoft addition. Divergences in Altair BASIC from Dartmouth BASIC were listed in Appendix H of the Altair manual. Page 75 (emphasis mine):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Among the points mentioned [in Appendix H] are difference in array subscripts, [... more differences ...]; and PEEK (returning the value of a byte to the memory) and POKE (writing the value of a byte to the memory) for direct access to memory. (The POKE keyword would, later on, acquire nefarious uses, such as employing the command to alter the contents of memory addresses in order to facilitate game cheats in 8-bit processors; &lt;strong&gt;note that both PEEK and POKE did not exist before Gates and Allen&lt;/strong&gt;.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Note that the author is confusing two things here: &lt;a href=&quot;https://archive.org/stream/bitsavers_mitsMITSAl_6669937/MITS_AltairBASIC_1975#page/n35/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;the MITS Altair BASIC manual&lt;/a&gt; does indeed have an Appendix H on porting programs from other BASICs, but it doesn't mention PEEK and POKE. They're described in the main body of the manual.&lt;/p&gt;&#xA;" OwnerUserId="18500" LastEditorUserId="18500" LastEditDate="2020-08-13T15:54:17.580" LastActivityDate="2020-08-13T15:54:17.580" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="15876" PostTypeId="1" CreationDate="2020-08-13T18:11:56.630" Score="15" ViewCount="2302" Body="&lt;p&gt;I am looking for information on a training language called &amp;quot;WhatDoesItDo&amp;quot;. It was used in 1978 at Austin Community College on a Motorola 6800 CPU.&lt;/p&gt;&#xA;&lt;p&gt;If anyone has any information, I would appreciate it very, very much.&lt;/p&gt;&#xA;" OwnerUserId="19064" LastEditorUserId="6659" LastEditDate="2020-08-13T20:08:00.280" LastActivityDate="2020-08-14T09:06:58.200" Title="Looking for information on a programming language called WhatDoesItDo" Tags="&lt;programming&gt;&lt;6800&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15877" PostTypeId="2" ParentId="15876" CreationDate="2020-08-13T19:11:03.580" Score="21" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I am looking for information on a training language called &amp;quot;WhatDoesItDo&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It was called WADUZITDO&lt;/p&gt;&#xA;&lt;p&gt;Well, for training purposes, you might check out the online-version at &lt;a href=&quot;http://waduzitdo.org/&quot; rel=&quot;noreferrer&quot;&gt;Waduzitdo.org&lt;/a&gt;. It hosts a faithful (*1) port to JavaScript (*2), even including a few quirks of the original 6800 version. It offers as well an online reference of all legal instructions.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It was used in 1978 at Austin Community College on a Motorola 6800 CPU.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Serious? Now that's a cool fact to know. Do you have any reference?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If anyone has any information,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As usual, the &lt;a href=&quot;https://esolangs.org/wiki/Main_Page&quot; rel=&quot;noreferrer&quot;&gt;Esolang-Wiki&lt;/a&gt; got &lt;a href=&quot;https://esolangs.org/wiki/Waduzitdo&quot; rel=&quot;noreferrer&quot;&gt;some information&lt;/a&gt;, including a link to the Archive.org copy for the original &lt;a href=&quot;https://archive.org/details/byte-magazine-1978-09/page/n167/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;Byte article&lt;/a&gt; of September 1978 (p.166), showing the 6800 Assembly source.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Sans the editor. A text box is simply more convenient today.&lt;/p&gt;&#xA;&lt;p&gt;*2 - The port was made on Christmas 2005 and contains some 'tricks' to ensure workings on different Browsers (anyone remember the Browser Wars? The early 2000s were a horror for web applications) and relies on certain workings for text output which seem no longer true (or maybe simply optimized away by modern JS engines).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-14T09:06:58.200" LastActivityDate="2020-08-14T09:06:58.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15878" PostTypeId="2" ParentId="15876" CreationDate="2020-08-13T21:22:47.643" Score="13" Body="&lt;p&gt;A CP/M implementation can be found in the SIG/M archives, &lt;a href=&quot;http://www.classiccmp.org/cpmarchives/cpm/mirrors/oak.oakland.edu/pub/sigm/vol028/&quot; rel=&quot;noreferrer&quot;&gt;volume 28&lt;/a&gt; as &lt;code&gt;waduzit.com&lt;/code&gt;, &lt;code&gt;waduzit.doc&lt;/code&gt; and &lt;code&gt;waduzit.pas&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;From the Pascal source:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;{&#xA;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++&#xA;+ PROGRAM TITLE:        What Does It Do?                +&#xA;+                                                       +&#xA;+ WRITTEN BY:           Larry Kheriaty, Computer Center +&#xA;+                       Western Washington Univ.        +&#xA;+                       Bellingham, Wa. 98225           +&#xA;+                       BYTE MAG, Sept 1978             +&#xA;+                                                       +&#xA;+ SUMMARY:                                              +&#xA;+ A minimal PILOT interpreter.  A sample of what can be +&#xA;+ done with the high level language Pascal. Commands    +&#xA;+ will be found in the file WADUZIT.DOC.                +&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2020-08-13T21:22:47.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15879" PostTypeId="1" AcceptedAnswerId="15880" CreationDate="2020-08-13T21:39:22.397" Score="7" ViewCount="1297" Body="&lt;h3&gt;Availability&lt;/h3&gt;&#xA;&lt;p&gt;I most likely played it in the late 90s (1997+). It might have been the early 2000s as well, but it's less likely. My computer at the time was running Windows 95 or 98.&lt;/p&gt;&#xA;&lt;p&gt;The game came on a CD with a washing detergent (probably Skip, a brand by Unilever) in Greece but was in English, and likely other languages, so logically it was available internationally. It was either included with a big box of the detergent, or perhaps you had to mail some coupon from the box.&lt;/p&gt;&#xA;&lt;h3&gt;Game content&lt;/h3&gt;&#xA;&lt;p&gt;From what I remember of the game itself, the theme was washing machines. I think you controlled a blond boy who moved around a pseudo-3D environment, displayed at an angle, so that the left arrow key made him move northwest, up northeast and so on. I think jumping was not possible, so you had to climb up stairs or fall down in holes to reach other heights.&lt;/p&gt;&#xA;&lt;p&gt;There were collectibles, but I'm not sure what they were. I think some were diamonds and some others were Skip boxes. There were probably some washing machines as well, either enemies or background. I think there were also whirlpools you had to avoid, and perhaps there was a dog following you (but I could be mixing it up with another game).&lt;/p&gt;&#xA;&lt;p&gt;The challenge of the game was to find your way around the level so that you could grab all the collectibles, while avoiding enemies and hazards. It probably played similarly to the modern &lt;em&gt;Captain Toad&lt;/em&gt; game.&lt;/p&gt;&#xA;&lt;h3&gt;Other software on the CD&lt;/h3&gt;&#xA;&lt;p&gt;The CD also contained a program about the detergent, mostly running on Quicktime, if I remember correctly. It had adverts for the detergent from all over the world and perhaps tips for washing clothes. I specifically remember an advert from a South American country (probably Brazil) that was a bunch of people singing and dancing at a garden party (while washing clothes, of course).&lt;/p&gt;&#xA;&lt;p&gt;I'm wondering if there is any way to find this game in the present age.&lt;/p&gt;&#xA;" OwnerUserId="13815" LastEditorUserId="6659" LastEditDate="2020-08-13T21:49:23.013" LastActivityDate="2020-08-16T00:00:50.723" Title="Which was this game with collectibles, that came with a washing machine detergent?" Tags="&lt;identify-this-game&gt;&lt;windows&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15880" PostTypeId="2" ParentId="15879" CreationDate="2020-08-13T22:23:03.700" Score="18" Body="&lt;p&gt;I believe the game is &lt;em&gt;&lt;strong&gt;Max &amp;amp; Sparky&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OQn3gF7RM4U&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=OQn3gF7RM4U&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It is:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;an isometric exploration/platform game with hazards&lt;/li&gt;&#xA;&lt;li&gt;given away with laundry&lt;/li&gt;&#xA;&lt;li&gt;advertainment&lt;/li&gt;&#xA;&lt;li&gt;compatible with Windows 3.1 and 95&lt;/li&gt;&#xA;&lt;li&gt;associated with Skip&lt;/li&gt;&#xA;&lt;li&gt;available in Greece&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/max-and-sparky&quot; rel=&quot;nofollow noreferrer&quot;&gt;Internet Archive&lt;/a&gt; gives the following description:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Isometric MS-DOS game on CD-ROM, with an installable launcher for Windows 3.1/95.&#xA;Max &amp;amp; Sparky is an advertising game created to promote the laundry detergent known as OMO in Finland, Austria, the Netherlands and Denmark, a.k.a. Skip (Portugal, France, Greece, Spain &amp;amp; Germany), a.k.a. Persil (England &amp;amp; Ireland), a.k.a. Via (Sweden).&#xA;Note: The scans are from the Danish/Finnish edition, but the disc contents are identical for all 12 countries, with a country/language selector on startup.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I found it by searching for &lt;code&gt;&amp;quot;skip detergent&amp;quot; &amp;quot;windows 95&amp;quot;&lt;/code&gt; on Google - it claimed there was no good matches, but on the Images search, the only match was the IA link showing the &lt;em&gt;Max &amp;amp; Sparky&lt;/em&gt; disc. Pretty lucky!&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;It may also possibly be &lt;em&gt;&lt;strong&gt;Mall Maniacs&lt;/strong&gt;&lt;/em&gt; (a.k.a &lt;em&gt;&lt;strong&gt;Mega Game 1&lt;/strong&gt;&lt;/em&gt; or &lt;em&gt;&lt;strong&gt;Mall Mania&lt;/strong&gt;&lt;/em&gt; depending on region).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=cHBtR1cYlQU&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=cHBtR1cYlQU&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This game isn't isometric (like &lt;em&gt;Head Over Heels&lt;/em&gt; or other classic 8-bit Spectrum action-adventures) but it is an advertainment game set in a supermarket. You run around collecting licensed grocery items. It is a Windows 95/98 3dfx-compatible game. I could see versions being made for specific companies made around specific product lines.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="439" LastEditDate="2020-08-16T00:00:50.723" LastActivityDate="2020-08-16T00:00:50.723" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15881" PostTypeId="2" ParentId="15872" CreationDate="2020-08-13T23:28:05.750" Score="20" Body="&lt;p&gt;Thanks to @another-dave, I went searching in DEC manuals. The &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/www.computer.museum.uq.edu.au/pdf/DEC-10-OMCMA-B-DN1%20DECsystem10%20Monitor%20Calls.pdf&quot; rel=&quot;noreferrer&quot;&gt;decsystem10 Monitor Calls manual&lt;/a&gt; has PEEK (&amp;quot;return the contents of a specified exec address&amp;quot;) and POKE (&amp;quot;alter the specified location in the monitor&amp;quot;). There is no USR function. While the manual was first printed in June 1971, I can only find a March 1976 revision.&lt;/p&gt;&#xA;&lt;p&gt;Looking for an older edition, I came across &amp;quot;The PEEK function allows a privileged user to examine any word location in the monitor part of memory. The user program can examine words in the BASIC-PLUS run time system.&amp;quot; &lt;a href=&quot;http://www.bitsavers.org/pdf/dec/pdp11/rsts/V05/DEC-11-ORSMC-A-D_sMgr_Mar75.pdf&quot; rel=&quot;noreferrer&quot;&gt;RSTS/E System Manager's Guide&lt;/a&gt; &amp;quot;First printing, October 1974&amp;quot; And it has: &amp;quot;If the user desires a byte change, he must read the word (using the PEEK function), change the desired byte, and rewrite (using the POKE call) the entire word.&amp;quot; No USR function.&lt;/p&gt;&#xA;&lt;p&gt;So then I went searching monitor programs in general, and found PEEK (&amp;quot;used to get the contents of any absolute location in memory&amp;quot;) in &lt;a href=&quot;https://stacks.stanford.edu/file/druid:hb976hq8639/uuomanual.pdf&quot; rel=&quot;noreferrer&quot;&gt;UUO Manual&lt;/a&gt; published in December 1973, definitely pre-Altair. There is no POKE command listed.&lt;/p&gt;&#xA;&lt;p&gt;So PEEK and POKE predated Altair BASIC and made their way there through BASIC-PLUS.&lt;/p&gt;&#xA;" OwnerUserId="18934" LastEditorUserId="18934" LastEditDate="2020-08-13T23:59:22.907" LastActivityDate="2020-08-13T23:59:22.907" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15882" PostTypeId="2" ParentId="1001" CreationDate="2020-08-14T07:03:21.253" Score="2" Body="&lt;p&gt;Fundamentally, the real issue is lack of demand. Let's say a 6502 compatible chip...&lt;/p&gt;&#xA;&lt;p&gt;It won't be any cheaper than the current 65816 (which is a 16bit 65xx series with support for bank-switching 256 banks of 64kb, and 14 MHz). Probably be more expensive, even. It works best with 14 NS or faster RAM and ROM.&lt;/p&gt;&#xA;&lt;p&gt;The 65816 is mostly used in embedded systems where 16 MB memory is spacious.&lt;/p&gt;&#xA;&lt;p&gt;Replacing it with a 6502 sounds cool, until you realize most 65816 code is for the non-emulation mode, and would require recompile. A faster 65816 would exist if the market demanded it, but the embedded systems using it are not looking for faster - they can swap to ARM if then need more speed or power.&lt;/p&gt;&#xA;&lt;p&gt;Now here's the other big element: if you build a faster 65xx or 65xxx processor, what are you going to connect it to? Most of the compatible support chips aren't that fast, either.&lt;/p&gt;&#xA;&lt;p&gt;So, you wind up wanting faster everything else, too.&lt;/p&gt;&#xA;&lt;p&gt;And that's where the other shoe drops: FPGAs are now running over 50 MHz emulating the 65xx line.&lt;/p&gt;&#xA;&lt;p&gt;There's no need to make a 50 MHz 6502 - you buy the off-the-shelf FPGA, load the core file into it, and use it as a 6502 at 50 MHz... or software set it for 20, or 10, or 4... or even the original 1.2... as needed for your current program. And a bonus: if you want, you can load a different core and use that FPGA as a Z80 or i8080.&lt;/p&gt;&#xA;&lt;p&gt;I have heard there was a company looking at a faster 65816... but the price for a new chip would be prohibitive.&lt;/p&gt;&#xA;&lt;p&gt;I have seen [reports][1] of FPGA 65xx cores running nearly 100 MHz...&lt;/p&gt;&#xA;&lt;p&gt;And really, there's no need for 65xx processors that fast; it would be cheaper to use a modern 16 or 32 bit ARM (some arm SBCs using 32bit chips are under $20) and an emulator.&lt;/p&gt;&#xA;&lt;p&gt;[1:]&lt;a href=&quot;http://forum.6502.org/viewtopic.php?f=10&amp;amp;t=2500&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://forum.6502.org/viewtopic.php?f=10&amp;amp;t=2500&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19069" LastActivityDate="2020-08-14T07:03:21.253" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15883" PostTypeId="1" CreationDate="2020-08-14T12:36:45.943" Score="6" ViewCount="789" Body="&lt;p&gt;Apparently the first microcomputer capable of working with the Chinese language in Chinese characters was the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6594/how-did-the-microprofessor-ii-have-space-for-a-chinese-font-in-the-rom&quot;&gt;Microprofessor II&lt;/a&gt; (or MPF-II-C), a Taiwanese Apple II clone from 1982.&lt;/p&gt;&#xA;&lt;p&gt;Now I'm 99% sure that there were early microcomputers capable of working with the Japanese language in only &lt;a href=&quot;https://en.wikipedia.org/wiki/Katakana&quot; rel=&quot;noreferrer&quot;&gt;katakana&lt;/a&gt; and/or &lt;a href=&quot;https://en.wikipedia.org/wiki/Hiragana&quot; rel=&quot;noreferrer&quot;&gt;hiragana&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Unlike Chinese, Japanese can be 100% represented using only roughly 50 characters. There are actually two sets, hiragana and katakana, so about 100 total, but as a bare minimum for communication you didn't need both. Any word that can be written in &lt;a href=&quot;https://en.wikipedia.org/wiki/Kanji&quot; rel=&quot;noreferrer&quot;&gt;kanji&lt;/a&gt; can also be written in kana at the cost of added ambiguity. And an utter loss of elegance.&lt;/p&gt;&#xA;&lt;p&gt;This also means that a Japanese micro could get by with a variable-sized subset of kanji if need be. Early encoding standards required around 2,000 characters but there were surely proprietary encodings before there were standard ones.&lt;/p&gt;&#xA;&lt;p&gt;So I'm wondering if there were any microcomputers, or addons, that allowed working with Japanese including kanji before the MPF-II-C? Perhaps there was even an MPF-II-J that was first?&lt;/p&gt;&#xA;&lt;p&gt;I'm pretty sure Japan was more technologically advanced than Taiwan in the late '70s/early '80s, but perhaps the possibility of getting by in kana alone made it less urgent to develop a kanji-capable system sooner?&lt;/p&gt;&#xA;" OwnerUserId="3290" LastEditorUserId="3290" LastEditDate="2020-08-14T14:14:45.873" LastActivityDate="2020-08-16T00:21:41.113" Title="What was the first microcomputer capable of working with Japanese kanji?" Tags="&lt;history&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15884" PostTypeId="2" ParentId="15883" CreationDate="2020-08-14T13:44:04.883" Score="9" Body="&lt;p&gt;You didn't mention the MPF-II's release: That was, apparently, 1982.&lt;/p&gt;&#xA;&lt;p&gt;There were earlier Japanese Microcomputers than that, notably the &lt;a href=&quot;https://en.wikipedia.org/wiki/PC-8000_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;NEC PC-8000&lt;/a&gt; series (released in 1979) that used a Katakana/Kanji character set (that had to be removed/changed when preparing a release for the US market in 1981)&lt;/p&gt;&#xA;&lt;p&gt;Even the &lt;a href=&quot;http://museum.ipsj.or.jp/en/computer/personal/0003.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hitachi Basic Master&lt;/a&gt; (released 1978 and commonly considered the first &amp;quot;Japanese Microcomputer&amp;quot;) used a Katakana character set.&lt;/p&gt;&#xA;&lt;p&gt;If &amp;quot;desk size&amp;quot; falls into your microcomputer definition, the &lt;a href=&quot;http://museum.ipsj.or.jp/en/computer/office/0068.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Toshiba TOSBA&lt;/a&gt;C might have been be the first with reasonable Kanji support.&lt;/p&gt;&#xA;&lt;p&gt;A short comment on your question (too long to fit into a real comment): I think you are largely overestimating the complexity of the problem. Even entirely dumb telex machines could transmit and receive Kanji telegraphs right from the beginning - The operators simply used codebooks to transfer to and from a Japanese text into code combinations of the 32 possible characters in a telegraph (If you think about this, an English Dictionary that tells you how to build words from characters is not much different from such a codebook) . So, the only real problem is the method of input and output, rather than internal representation.&lt;/p&gt;&#xA;&lt;p&gt;Character-based writing has a similar concept to Kanji - we classically call that &lt;em&gt;words&lt;/em&gt; - And we had &lt;em&gt;word processing&lt;/em&gt; software for roughly 30 years before computers were good enough to actually have a concept of words and offer input methods for them (with that I'm referring to real-time input checks whether something that's keyed in is actually an accepted word or not).&lt;/p&gt;&#xA;&lt;p&gt;Input methods for Kanji were, in the beginning, rather a mechanical problem than a computational one - The first computers that allowed direct Kanji input worked with something closely resembling a codebook - A &amp;quot;book&amp;quot; of pages that were essentially keyboard overlays and depicted the glyphs, the computer detected what page you were in and could sort out the proper glyph from key and page (the TOSBAC mentioned above used such a method). Output: Well, as soon as the dot matrix printer was invented, that wasn't much of a problem anymore.&lt;/p&gt;&#xA;&lt;p&gt;It is obvious that mechanical contraptions like the above are hard to put into a &amp;quot;Microcomputer&amp;quot; (whatever your definition of that would be), so the size of a TOSBAC is probably pretty close to the smallest that could be made before GUI input methods with contextual update and high-definition screens were available.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2020-08-16T00:21:41.113" LastActivityDate="2020-08-16T00:21:41.113" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15885" PostTypeId="2" ParentId="13995" CreationDate="2020-08-14T13:53:16.297" Score="1" Body="&lt;p&gt;In order to lead a proper lawsuit against &amp;quot;stealing&amp;quot; software concepts, you need to have proof that the defendant actually had access to your code base - That was easy for Apple in the case of MS - As MS was developing Apple software in the very early stage of development of the Macintosh and thus had access to Apple internal code, there was actually at least a theoretical possibility that software concepts were being transferred from MacOS into Windows.&lt;/p&gt;&#xA;&lt;p&gt;That never happened with the Amiga.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2020-08-14T13:53:16.297" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15886" PostTypeId="2" ParentId="15883" CreationDate="2020-08-14T15:40:01.453" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What was the first microcomputer capable of working with Japanese kanji?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What seams to be an easy question might not be one at all, as it depends definition:&lt;/p&gt;&#xA;&lt;p&gt;Like your value of 'microcomputer'?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Does it had to be contemporary called micro in (*1), or&lt;/li&gt;&#xA;&lt;li&gt;due the fact that it uses a microprocessor?&lt;/li&gt;&#xA;&lt;li&gt;Is a dedicated text system a computer or not?&lt;/li&gt;&#xA;&lt;li&gt;Would it be one if it can load other software?&lt;/li&gt;&#xA;&lt;li&gt;Last but not least, is the number of units made/sold relevant?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In this case additionally the 'working with' may need clarification:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Any computer able of bitmap graphics can display Kanji, and this for sure has been used&lt;/li&gt;&#xA;&lt;li&gt;Is it required to 'manipulate' them b default or can it be part of add on software?&lt;/li&gt;&#xA;&lt;li&gt;What kind of input methods are acceptable?&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A separate key for every Kanji?&lt;/li&gt;&#xA;&lt;li&gt;A specific method of combining keys?&lt;/li&gt;&#xA;&lt;li&gt;Is Kata input with automated (and checked) kanji translation sufficient?&lt;/li&gt;&#xA;&lt;li&gt;Is a Latin based Kanji selection as well ok?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So unless there is a clear definition many answers are possible.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Beside the obvious answer of &lt;em&gt;any computer with graphics and a Kana/Kanji-input-processor&lt;/em&gt;, I'd see a few nice candidates for first or important with microprocessors.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sord M200 of 1977 - Z80 based with a huge keyboard to form Kanji&lt;/li&gt;&#xA;&lt;li&gt;Toshiba JW-10 of 1979 - with a vocabulary of 80,000 Kanji, introducing Kana/Kanji input translation, going by word meaning&lt;/li&gt;&#xA;&lt;li&gt;Sharp WD-3000 of 1979 - build in a desktop with a huge touch pad to enter Kanji&lt;/li&gt;&#xA;&lt;li&gt;Oki Word-200 of (again) 1979 - Compact machine using an input method based on sound.&lt;/li&gt;&#xA;&lt;li&gt;Sord M343 of 1983 - a dual CPU machine with 8086 and Z80; ca. 5000 Kanji&lt;/li&gt;&#xA;&lt;li&gt;DR even introduced a CP/M-86 with Kanji support in 1984 for generic PC&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Except for a few attempts Kanji support is a pure software issue as soon as there's bitmap output. It depends (mostly) on a sufficient performing input method using a limited keyboard layout (*2) to 'form' Kanji symbols. The usual way is to type a series of Kana and an interpreter looking for the closest Kanji (*3), offering them as a list and have the user select. It's a bit like programming in an IDE with auto completion.&lt;/p&gt;&#xA;&lt;p&gt;Standards were set by Toshiba with TOSWORD and Sharp with (the later) Shoin. Their Kana/Kanji input methods eventually defined today's handling.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - At it's time the Olivetti P603 as well as the P606 were called micro computers due their size.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Limited as in there isn't a key for every Kanji. In most cases (today) it's a Latin keyboard with common layout and Kana assigned as well. This is worked out as the most handy combination as it allows direct typing of Kana (as well as Latin) text and Kanji with help of an input-translator. In addition there have been keyboard that allow building Kanji from 'strokes' or 'parts'. This allows building symbols based on it's visuals, while Kana/Latin based input is usually structured via sound or meaning.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Basically there are three different ways to approach Kanji creation with a limited keyboard:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Visual based - Here a symbol is created from parts/strokes. This usually requires a rather large keyboard of more than 100 keys for parts generation alone.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Sound based - Here Kana are used according to their sounds to select a Kanji&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Meaning based - Words are written in Kana up to a point were they form a word which then is replaced by it's Kanji.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-15T08:48:13.260" LastActivityDate="2020-08-15T08:48:13.260" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15887" PostTypeId="1" CreationDate="2020-08-14T18:08:52.237" Score="3" ViewCount="314" Body="&lt;p&gt;I'm currently trying to use the nj32disk.sys driver to use my USB stick as a virtual hard drive. The problem is that the driver acts like a floppy disk. My question is: Is there a documentation about nj32disk.sys?&lt;/p&gt;&#xA;" OwnerUserId="19073" LastActivityDate="2020-08-14T20:15:16.327" Title="Does anyone have information about the nj32disk.sys driver?" Tags="&lt;ms-dos&gt;&lt;emulation&gt;&lt;hard-disk&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15888" PostTypeId="2" ParentId="15887" CreationDate="2020-08-14T18:18:30.627" Score="3" Body="&lt;p&gt;There’s a &lt;a href=&quot;https://www.jumpjet.info/Application-Software/DOS/Hardware/3/NJ32DISK/About.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;short text file describing &lt;code&gt;NJ32DISK.SYS&lt;/code&gt;&lt;/a&gt;, but it doesn’t say much:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;NJ32DISK.SYS is the ASPI disk driver for USB mass-storage devices (it&#xA;assigns a DOS drive letter). Run the USB hardware driver (such as&#xA;USBASPI.SYS) before NJ32DISK (similar to the way you first run the&#xA;cd-rom ASPI driver before running MSCDEX).  If USBASPI does not find&#xA;any USB mass-storage devices on bootup, NJ32DISK will not load or&#xA;assign any drive letters.  Drive letters assigned will come after the&#xA;internal Floppy drive, Hard drive, and other bios established storage&#xA;devices have been assigned drive letters.&lt;/p&gt;&#xA;&lt;p&gt;This driver will assign its USB drive letters before the CD/DVD gets&#xA;assigned their drive letters (due to NJ32DISK being loaded in&#xA;Config.sys wheras the CD/DVD MSCDEX driver is loaded in Autoexec.bat).&lt;br /&gt;&#xA;Therefore to keep your CD/DVD drive letters consistant, it is suggested&#xA;that you always boot with the USB mass-storage devices connected, or&#xA;that you assign a &amp;quot;starting&amp;quot; drive letter to your CD/DVD unit that&#xA;appears lower in the alphabet than the USB assigned drive letter.&lt;/p&gt;&#xA;&lt;p&gt;After a drive letter has been assigned, you can remove and replace the&lt;br /&gt;&#xA;mass-storage media (of the same formatted Mb size) in a similar fashion&#xA;as you can remove and replace floppy diskettes (the cache may have to&#xA;be refreshed to recognize the media change though, just as you must&#xA;often do with floppy diskettes).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You might be better off looking at &lt;a href=&quot;http://bretjohnson.us/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bret Johnson’s USB drivers&lt;/a&gt;, they’re documented and quite configurable.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-08-14T20:15:16.327" LastActivityDate="2020-08-14T20:15:16.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15890" PostTypeId="1" AcceptedAnswerId="15896" CreationDate="2020-08-15T12:14:09.420" Score="5" ViewCount="399" Body="&lt;p&gt;Sega must have thought about upgradability prior to the Genesis’s release, as there is a  expansion slot to the right of the unit when looked at from the front. Is this the only expansion slot? Is it part of a standard or a bespoke Sega implementation?&lt;/p&gt;&#xA;&lt;p&gt;Here is a guess of how the games are loaded. For the Genesis, the 68000 starts at address 0h where a ROM is present, which initiallises it and then starts the cartridge game. If the Sega CD is being used then its 68000 will start at address 0h but this will be a ROM within the Sega CD, and then it starts a CD game. So when using the Sega CD there cannot be a cartridge present otherwise the Genesis will automatically load this?&lt;/p&gt;&#xA;&lt;p&gt;Does the Genesis 68000 do anything if the Sega CD is playing a game? If it does, is synchronisation needed, and if so how is this done? More broadly, what Genesis resources does the Sega CD utilise?&lt;/p&gt;&#xA;&lt;p&gt;A story like answer of how the Sega CD works from bootup may make it easier to understand.&lt;/p&gt;&#xA;" OwnerUserId="15219" LastActivityDate="2020-08-17T23:09:58.727" Title="Sega Genesis and Sega CD interaction" Tags="&lt;sega-genesis&gt;&lt;cd-rom&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15891" PostTypeId="2" ParentId="11183" CreationDate="2020-08-15T15:22:46.670" Score="4" Body="&lt;p&gt;Since this question was asked, there is now a slightly better &lt;a href=&quot;https://archive.org/details/personalcomputerworld&quot; rel=&quot;nofollow noreferrer&quot;&gt;Personal Computer World&lt;/a&gt; collection at the Internet Archive.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The article that introduces the benchmarks — “Direct Addressing: Where to&#xA;get your Personal Computer — a look at Hardware and Software” by &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Coll&quot; rel=&quot;nofollow noreferrer&quot;&gt;John Coll&lt;/a&gt; starts on &lt;a href=&quot;https://archive.org/details/PersonalComputerWorld1978-04/page/55/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 55 of issue 1&lt;/a&gt; (April 1978)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Benchmarks 1–8 are printed on pages &lt;a href=&quot;https://archive.org/details/PersonalComputerWorld1978-04/page/56/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;56&lt;/a&gt; and &lt;a href=&quot;https://archive.org/details/PersonalComputerWorld1978-04/page/58/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;58&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Page &lt;a href=&quot;https://archive.org/details/PersonalComputerWorld1978-11/page/52/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;52&lt;/a&gt; of issue 7 (November 1978) gives a table of results from several computers.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-08-15T15:22:46.670" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15892" PostTypeId="2" ParentId="8975" CreationDate="2020-08-15T19:26:58.623" Score="2" Body="&lt;p&gt;Probably the simplest pattern to look for is 0.1+2-2-0.1.  Depending upon precision, 0.1 is going to be (the .... is some number of repetitions of 0011)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0.00011....00110011&#xA; 0.00011....0011010&#xA;  0.00011....001101&#xA;   0.00011....00110&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Adding 2 is going to reduce the available precision at the low end by five bits (more than a whole repetition of the 0011 pattern), forcing some kind of rounding there.  After 2 is subtracted, zeroes would be shifted into the low-order bits, and subtracting 0.1 would leave values in those bits.&lt;/p&gt;&#xA;&lt;p&gt;When using decimal floating point, all calculations would be exact, and thus the final residue would be zero.&lt;/p&gt;&#xA;&lt;p&gt;Incidentally, with regard to speed, the 6502 has patented circuitry to perform BCD addition and subtraction as fast as binary (interestingly, the CMOS versions of the chip do not have such circuitry, causing BCD addition and subtraction to be slower), but performing most other kinds of BCD math efficiently requires some substantial lookup tables.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-08-15T19:26:58.623" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15893" PostTypeId="2" ParentId="15252" CreationDate="2020-08-15T19:40:20.603" Score="2" Body="&lt;p&gt;There were grey versions, particularly in Germany. It was not marketed under a different model number afaik.&lt;/p&gt;&#xA;&lt;p&gt;For images see &lt;a href=&quot;https://bigbookofamigahardware.com/bboah/product.aspx?id=661&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://bigbookofamigahardware.com/bboah/product.aspx?id=661&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19080" LastActivityDate="2020-08-15T19:40:20.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15894" PostTypeId="2" ParentId="12190" CreationDate="2020-08-15T23:44:29.897" Score="3" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wLGyq.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Original Apple II Rev 0 with 4K memory select blocks and 4K memory chips also pictured is an original Datanetics keyboard.&lt;/p&gt;&#xA;" OwnerUserId="19082" LastActivityDate="2020-08-15T23:44:29.897" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15896" PostTypeId="2" ParentId="15890" CreationDate="2020-08-16T02:51:32.017" Score="7" Body="&lt;p&gt;To answer the first half of your questions:&lt;/p&gt;&#xA;&lt;p&gt;The right-side 60-pin expansion slot is bespoke, and found on Mega Drive / Genesis 1 and 2 only. It is not present on the Genesis 3 or Nomad.&lt;/p&gt;&#xA;&lt;p&gt;It exposes the address and data buses and a lot of other signals. In that respect it's very similar to the 86-pin expansion slot on the left side of an Amiga 500 (and the 56-pin trapdoor), but isn't compatible.&lt;/p&gt;&#xA;&lt;p&gt;There is a second expansion slot, labelled EXT, found only on early Mega Drive 1s. It's a DE-9 female port similar to the front controller ports; is programmable and can act as a serial port. There are very few peripherals designed for this port, the main one being the &lt;a href=&quot;https://segaretro.org/Sega_Mega_Modem&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mega Modem&lt;/a&gt;, exclusive to Japan.&lt;/p&gt;&#xA;&lt;p&gt;On the Sega Multi-Mega, the two 68000s are discrete as shown in this photograph from &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Multi_Mega_mobo.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/K7jhP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K7jhP.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;--&lt;/p&gt;&#xA;&lt;p&gt;Your assumption about booting is wrong. If a Sega CD is installed, the memory map changes. The Sega CD takes ownership of $000000-$3FFFFF causing the system to boot into the Sega CD BIOS on power-on, and the 4 Megabyte cartridge slot address space becomes $400000-$7FFFFF.&lt;/p&gt;&#xA;&lt;p&gt;--&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://segaretro.org/Sega_CD_programming_FAQ_(1998-12-06)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Christian Schiller's Mega CD programming FAQ&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Both 68k processors run simultaneously. Only the Genesis 68k has access to the VDP and sound registers of the Genesis soundchip. That leaves only&#xA;three tasks for the SCD´s 68k:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;accessing the CD drive,&lt;/li&gt;&#xA;&lt;li&gt;accessing the custom chips and&lt;/li&gt;&#xA;&lt;li&gt;computing.&#xA;The SCD´s 68k (or the special graphics chip) for example does all&#xA;the sprite/playfield zooming and rotation in games like Sonic CD or&#xA;Thunderhawk. Then the Genesis 68k simply downloads the pre-calulated&#xA;data via the connector port (which is, simply said, &amp;quot;just&amp;quot; a second&#xA;cartridge port) and displays it on screen.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Let´s imagine we load some bitmap&#xA;graphics from CD in order to display them onscreen. We´d need to do the following:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;give a load command to load the gfx file into the CD buffer&lt;/li&gt;&#xA;&lt;li&gt;copy the gfx from the cd buffer to the main RAM (512K?) of&#xA;the CD processor&lt;/li&gt;&#xA;&lt;li&gt;maybe rotate/zoom the gfx using the CD graphics chip...&lt;/li&gt;&#xA;&lt;li&gt;switch main RAM to Genesis CPU&lt;/li&gt;&#xA;&lt;li&gt;copy gfx data from main RAM to Genesis RAM&lt;/li&gt;&#xA;&lt;li&gt;copy gfx data from Genesis RAM to VDP RAM to display it&#xA;onscreen.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-08-17T23:09:58.727" LastActivityDate="2020-08-17T23:09:58.727" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15897" PostTypeId="1" CreationDate="2020-08-16T03:43:27.983" Score="45" ViewCount="4880" Body="&lt;p&gt;By the early 1980s, C was using &lt;code&gt;0x&lt;/code&gt; as a prefix to indicate integer literals expressed in hexadecimal, e.g., &lt;code&gt;0xCAFE&lt;/code&gt;. This &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/kbman.html&quot; rel=&quot;noreferrer&quot;&gt;did not exist in B&lt;/a&gt; as of 1972, though B did support octal integer literals via a &lt;code&gt;0&lt;/code&gt; prefix.&lt;/p&gt;&#xA;&lt;p&gt;Where and when was this &lt;code&gt;0x&lt;/code&gt; prefix first used?&lt;/p&gt;&#xA;" OwnerUserId="7208" LastEditorUserId="6794" LastEditDate="2020-08-20T13:37:52.397" LastActivityDate="2020-08-20T13:37:52.397" Title="Where and when did the `0x` convention for hexadecimal literals originate?" Tags="&lt;history&gt;&lt;hexadecimal&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15898" PostTypeId="2" ParentId="15897" CreationDate="2020-08-16T06:28:18.867" Score="38" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;This did not exist in B as of 1972, though B did support octal integer literals via a 0 prefix.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;True, but B's predecessor, BCPL, had a notation of &lt;code&gt;#&lt;/code&gt; for octal and &lt;code&gt;#x&lt;/code&gt; for hexadecimal. So the idea 'jumped' a generation.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;The history of C&lt;/strong&gt; is one of removing features to be added later on again ... for better or worse.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;CPL (Combined Programming Language) was developed in Cambridge and London as a simplified Algol for system programming (*1). It was implemented in 1965/66 for the EDSAC 2, Atlas and  IBM 7094.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/BCPL&quot; rel=&quot;noreferrer&quot;&gt;BCPL&lt;/a&gt; (Basic CPL) was, as the name suggests a simplified version of CPL, first implemented 1967 on an IBM 7094 (*2).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/B_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;B&lt;/a&gt; was again a simplified BCPL (*3, *4), made to it fit the PDP-7 in 1969.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;C was developed via NB (New B) for the PDP-11 in 1972ff, adding (back in) features.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;CPL&lt;/strong&gt; used &lt;code&gt;#&lt;/code&gt; to denote octal constants. There was no real need for hex, as all machines it was implemented for had word sizes dividable by 3 and used 6 bit characters for output.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;BCPL&lt;/strong&gt; evolved over (quite short) time. While from start on &lt;code&gt;#&lt;/code&gt; was used to mark an octal number, it got soon supplemented by &lt;code&gt;#b&lt;/code&gt; for binary &lt;a href=&quot;https://www.lysator.liu.se/c/clive-on-bcpl.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;#x&lt;/code&gt; for hexadecimal&lt;/a&gt; and even &lt;code&gt;#o&lt;/code&gt; for octal. These additions were time and implementation specific, but at least &lt;code&gt;#x&lt;/code&gt; became quick a standard.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;B&lt;/strong&gt; dropped &lt;code&gt;#x&lt;/code&gt; again with the whole &lt;code&gt;#&lt;/code&gt; notation (*5) in favour of a preceding zero, simplifying the parser. Since the PDP-7 was a multiple of 3 word size machine, octal was the only machine specific notation needed (*6,7).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;C&lt;/strong&gt; in turn was developed for the PDP-11, for which, as 16 bit machine, many machine dependent constants come naturally in hex - not to mention the 8 bit byte and ASCII's segmentation in groups of 32. Now reintroducing a hex notation was considered useful - just this time staying with the idea of a preceding zero.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - CPL is really worth a look. While it already has many of the basics of C, like pointers to words as basic element,it also contains several features that seem quite unconventional from today. For example &lt;code&gt;a = bc&lt;/code&gt;doesn't assign the variable bc to a, but the product of b times c. Multi-character identifiers had to start with capital letters. This might as well be the origin of the much liked camel case.&lt;/p&gt;&#xA;&lt;p&gt;*2 - And a Model 35 TTY, which, at that time, had no curly or square braces, thus digraphs were added. Similar no back slash, so &lt;code&gt;*&lt;/code&gt;was used for special characters in strings.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Plus some funny switches. Had Algol &lt;code&gt;+:=&lt;/code&gt; as augmented assignment, so used CPL and BCPL &lt;code&gt;=+&lt;/code&gt;, while B switched back to &lt;code&gt;+=&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Maybe some PL/I added.&lt;/p&gt;&#xA;&lt;p&gt;*5 - It similar dropped &lt;code&gt;#&lt;/code&gt;as part of comparison operators as well&lt;/p&gt;&#xA;&lt;p&gt;*6 - It's always worth to keep in mind that the 8 bit byte and the corresponding hex notation was only introduced shortly before with the IBM /360.&lt;/p&gt;&#xA;&lt;p&gt;*7 - An interesting side note may be that CTC used as well a preceding zero for octal constants in their Assembler for the 1970 &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint_2200&quot; rel=&quot;noreferrer&quot;&gt;Datapoint 2200&lt;/a&gt;. So while I know of no direct relation, it's quite interesting that they came up with the same solution at the same time as Thompson did.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-16T14:31:13.563" LastActivityDate="2020-08-16T14:31:13.563" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="15899" PostTypeId="1" AcceptedAnswerId="15900" CreationDate="2020-08-16T10:10:57.333" Score="26" ViewCount="1795" Body="&lt;p&gt;I found this &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15897/where-and-when-did-the-0x-convention-for-hexadecimal-literals-originate&quot;&gt;question&lt;/a&gt; asking about the origin of &lt;code&gt;0x&lt;/code&gt; to denote hexadecimal to be interesting.&lt;/p&gt;&#xA;&lt;p&gt;However, when I cut my teeth programming on 8-bit 65xx systems in the early 80's everything I saw used a &lt;code&gt;$&lt;/code&gt; to denote hexadecimal digits (assemblers, monitors, books, magazines, etc).  It wasn't until I got my first Amiga 1000 and started to learn C that I even knew the &lt;code&gt;0x&lt;/code&gt; prefix was a thing.&lt;/p&gt;&#xA;&lt;p&gt;If the &lt;code&gt;0x&lt;/code&gt; prefix clearly predates the &lt;em&gt;8-bit revolution&lt;/em&gt;, then (1) why was &lt;code&gt;$&lt;/code&gt; adopted so widely?  And the opposite, (2) having become ubiquitous for a whole generation of 8 bit programmers, why was it abruptly dropped?  (Not that it matters, but I &lt;em&gt;still&lt;/em&gt; use &lt;code&gt;$&lt;/code&gt; when commenting code or scribbling on dead trees.)&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="15334" LastEditDate="2020-08-22T17:56:44.907" LastActivityDate="2020-08-26T08:15:19.907" Title="When and where did the $ convention for hexadecimal literals originate?" Tags="&lt;history&gt;&lt;8-bit-microcomputers&gt;&lt;hexadecimal&gt;" AnswerCount="1" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15900" PostTypeId="2" ParentId="15899" CreationDate="2020-08-16T12:59:39.313" Score="21" Body="&lt;h2&gt;Short Answer:&lt;/h2&gt;&#xA;&lt;p&gt;Motorola used it for their 6800 and MOS (6500) inherited it from Motorola. After all, the 6500 team members came out of the 6800 project so they were already used to it.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long Answer:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If the 0x prefix clearly predates the 8-bit revolution,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It doesn't, really. Motorola used the &lt;code&gt;$&lt;/code&gt; prefix already with the 6800 of 1974. Unix had only recently (1973) been rewritten in C, which added the &lt;code&gt;0x&lt;/code&gt; convention around that time, and shown outside of AT&amp;amp;T.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;then (1) why was $ adopted so widely?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because of Motorola's 6800/02/09 line as well as MOS' 6500 series used in many lower-end micro (home) computers. Most notably by Acorn, Apple, Atari and Commodore. Naturally, everyone writing software for these machines/CPUs would use its notation.&lt;/p&gt;&#xA;&lt;p&gt;Later on, it got enforced by the popularity of the 68000 used, for example, with Atari ST and Commodore Amiga line of machines.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And the opposite, (2) having become ubiquitous for a whole generation of 8 bit programmers,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now this does very much depend on your 'processor bubble', as it's only true for users of 65xx/68xx based machines. Whoever grew up with an x80 (8080, 8085, Z80) or x86 based machine, like Altair (S100), Tandy TRS-80 and the whole MSX world, will disagree. They'll be quite firm in that a &lt;code&gt;H&lt;/code&gt; suffix was the only valid way and everything else is quite exotic :))&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;why was it abruptly dropped?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It wasn't. There is no worldwide ruling body outclassing it. After all, using either prefix (or suffix) isn't inherent to hex code, but defined by the language used. Motorola/MOS assemblers want a &lt;code&gt;$&lt;/code&gt; prefix, Intel a &lt;code&gt;H&lt;/code&gt; suffix, C a &lt;code&gt;0x&lt;/code&gt; prefix and others again want a more mathematics-like prefix of &lt;code&gt;16#&lt;/code&gt; (Ada) or &lt;code&gt;16r&lt;/code&gt; (Smalltalk).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(Not that it matters, but I still use $ when commenting code or scribbling on dead trees.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And so do many other (*3).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: the language one uses defines the notation - and, as always, the first leaves the deepest impression.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Advantage of Prefix over Postfix&lt;/h2&gt;&#xA;&lt;p&gt;Classic mathematics uses a postfix notation of having the &lt;a href=&quot;https://en.wikipedia.org/wiki/Radix&quot; rel=&quot;nofollow noreferrer&quot;&gt;radix&lt;/a&gt; trailing a number. Which Intel followed with their &lt;code&gt;nnnnH&lt;/code&gt; notation. For compiler writing, this brings the downside that a whole word (constant) has to be read first, before it could be decided how to interpret it. This means a buffer is needed holding the whole string, as it can only be converted after advancing until the postfix.&lt;/p&gt;&#xA;&lt;p&gt;By using a prefix, it's clear from the beginning how to interpret the following characters. This there's no need to buffer (*2). This gives an advantage in parser design and does simplify the assembler a lot. This was especially helpful for fast creation of early cross assembler tools as first bootstrap.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Some History&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Hex notation was rather uncommon in the early years. Instead, octal was the thing, as most machines were build to a &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11807/6659&quot;&gt;multiple of 3 word size&lt;/a&gt;, as well as characters were usually handled as 6 bits.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Of the few machines/systems that very early on offered hex, many used various letters/symbols, like the last 6 in the alphabet &lt;code&gt;UVWXYZ&lt;/code&gt; (*2), often even non-continuous.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;IBM introduced a prefixed string format (&lt;code&gt;X'nnnn'&lt;/code&gt;) with the /360 in 1965&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Datapoint used octal with a prefixed Zero&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Intel's 4004 used hex with a suffix of &lt;code&gt;h&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Intel's 8008 used all octal in manuals and documentation, written as &lt;code&gt;nnnO&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;By 1973, both assemblers were made to use the same B/O/H suffixes.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Caring for a few bytes of buffer might seam strange today, where the whole source is usually loaded into memory, but RAM was a scare resource back then. As a result, algorithms were preferred that could read data, like from paper tape, and directly work on each symbol read without buffering.&lt;/p&gt;&#xA;&lt;p&gt;An optimal assembler allows to read any item a character at a time and process it right away with no need to look ahead. Using a prefix supports this.&lt;/p&gt;&#xA;&lt;p&gt;*2 - A convention often used in engineering when needing symbols.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Here on RC.SE I try to use notation according to the topic, so &lt;code&gt;$&lt;/code&gt;for 65/68, &lt;code&gt;H&lt;/code&gt; for Intel, and so on...and when there is no clear relation, I'll fall back to /370 notation &lt;code&gt;x'nn'&lt;/code&gt;, as that was what I used most, despite having used &lt;code&gt;$&lt;/code&gt; first.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-26T08:15:19.907" LastActivityDate="2020-08-26T08:15:19.907" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="15901" PostTypeId="2" ParentId="9382" CreationDate="2020-08-16T15:17:37.230" Score="16" Body="&lt;p&gt;Just use Z84C40 SIO chip. It's a part of standard Z80 family chips and has two channels. I used it for PS/2 keyboard and USB connection to my breadboard Z80 computer running at 2.4576 MHz. Z84C40 can divide system clock by factor of 16, 32 or 64 thus I run my UART-USB bridge at 38,400 baud without use of 4-bit counter as system clock divider. Luckily PS/2 keyboards generate clock themselves.&#xA;So all you need to connect a keyboard is this chip and PS/2 connector (female).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Kf18a.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Kf18a.jpg&quot; alt=&quot;LCD 20x4 chars&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Update: I have finally made adapter PCB for 2.8&amp;quot; TFT Arduino UNO shield which provides back compatibility with previous LCD screen (no need to rearrange connection wires). Also I've made a convenient EEPROM programmer shield for Arduino MEGA. So now I have a lot of fun coding my Z80 breadboard machine which now runs at 10 MHz. Also there is 7.3728 MHz clock generator for UART-USB bridge (115,200 baud).&#xA;&lt;a href=&quot;https://i.stack.imgur.com/gkIh9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gkIh9.jpg&quot; alt=&quot;TFT 320x240&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o5gpo.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o5gpo.jpg&quot; alt=&quot;TFT shield&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SjIWc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SjIWc.jpg&quot; alt=&quot;EEPROM programmer shield&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19085" LastEditorUserId="19085" LastEditDate="2021-05-26T10:48:16.490" LastActivityDate="2021-05-26T10:48:16.490" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15902" PostTypeId="1" AcceptedAnswerId="15910" CreationDate="2020-08-16T18:51:06.343" Score="64" ViewCount="9210" Body="&lt;p&gt;Back in 1984, I was commissioned to write some games for ZX-Spectrum. They were sold together. To my amazement I found that someone is selling a copy online.&lt;/p&gt;&#xA;&lt;p&gt;I thought of buying it but it is in the original cassette format. Given that I don't have either a cassette player or a Speccy, I don't suppose I'll ever be able to play it.&lt;/p&gt;&#xA;&lt;p&gt;I know there are emulators but my games were for educational purposes and didn't achieve massive sales. I don't suppose anyone would have bothered to extract the code. I have long since lost the source code.&lt;/p&gt;&#xA;&lt;p&gt;Will a 36-year tape still be playable?&lt;/p&gt;&#xA;&lt;p&gt;Is there a way to play my old games again?&lt;/p&gt;&#xA;" OwnerUserId="18612" LastEditorUserId="18612" LastEditDate="2020-08-16T22:36:46.110" LastActivityDate="2020-08-18T12:33:50.943" Title="Back in 1984 I wrote some games for Spectrum - Will they still be playable?" Tags="&lt;zx-spectrum&gt;&lt;gaming&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15903" PostTypeId="2" ParentId="15902" CreationDate="2020-08-16T19:15:37.910" Score="76" Body="&lt;p&gt;well, if you &lt;em&gt;really&lt;/em&gt; want those games back, just buy the tape.&lt;/p&gt;&#xA;&lt;p&gt;Then buy a cassette player (they're cheap, you can try to get a high quality one) or find a friend who still has one. Now:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Make sure to clean up the player heads with isopropyl alcohool before using it.&lt;/li&gt;&#xA;&lt;li&gt;Rewind the tape&lt;/li&gt;&#xA;&lt;li&gt;Extract it and use 2 pencils on the reels to gently tighten the tape so it's not loose. Loose tapes have a tendency to unwind in the tape player. You don't want that. Be gentle! Don't break the tape.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Then digitize the output using audacity (some steps will be similar as this Q&amp;amp;A: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14438/how-do-i-extract-the-program-from-the-radiohead-nude-tribute-by-james-houston&quot;&gt;How do I extract the program from the Radiohead &amp;quot;Nude&amp;quot; tribute by James Houston?&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;There are converters that can convert wav to &lt;a href=&quot;https://faqwiki.zxnet.co.uk/wiki/TAP_format&quot; rel=&quot;noreferrer&quot;&gt;tap format&lt;/a&gt; (TZX is an alternative) for emulators, or emulators that can load directly from .wav or even from the real tape (but digitizing allows to give back the tape player that you borrowed).&lt;/p&gt;&#xA;&lt;p&gt;Then you can try to load the converted file. If your program is in assembly, just dump the code to a file and use a modern disassembler to get it back (without symbols or comments, that's the problem).&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, if your programs are in BASIC, you can read your code again using the emulator, print it, or even convert the BASIC program to plain text (there are tools for that, like listbasic, from the fuse-emulator-utils Debian package: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5798/make-a-basic-tap-file-readable-on-linux&quot;&gt;Make a BASIC TAP file readable on Linux&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;The only gamble you're taking is that by buying a 36-year old tape you're not sure at all if you can recover all data from it. But even if there are errors, they can be fixed afterwards (specially with a BASIC program).&lt;/p&gt;&#xA;&lt;p&gt;I remember doing this very operation for a lot of my Oric tapes, that was in 1996, so it's been a while. But most .TAP files that can be found on the Oric nowadays originate from those conversions.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-08-17T04:36:46.180" LastActivityDate="2020-08-17T04:36:46.180" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15904" PostTypeId="2" ParentId="15902" CreationDate="2020-08-16T19:16:19.097" Score="10" Body="&lt;p&gt;Yes, quite possibly.  Unless the tape is damaged with complete dropouts, I would be cautiously optimistic that you can recover it.  While ageing tends to increase wow/flutter, and can cause the recording to &amp;quot;fade&amp;quot; for lack of a better word, complete drop-out is uncommon unless the tape is actually disintegrating, or the oxide is flaking off.&lt;/p&gt;&#xA;&lt;p&gt;There are also some techniques, ranging from using a simple audio filter, all the way to actually squinting at a waveform of the audio to guess whether a bit is supposed to be 0 or 1, that make it more likely you can recover it even if a Speccy wouldn't be able to read it.&lt;/p&gt;&#xA;&lt;p&gt;I would try to secure a good quality digital recording of the tape, ideally FLAC or WAVE lossless.  Perhaps you know someone who has an old stereo with a tape deck in a dusty storage room they've forgotten about?  (Oh, do make sure it works with a sacrificial tape first!)&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-08-16T19:16:19.097" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15905" PostTypeId="2" ParentId="15902" CreationDate="2020-08-17T05:50:44.437" Score="32" Body="&lt;p&gt;Back in the '80s, I wrote a couple of games too. A few years ago I have found the old cassettes with those games, but I had no tape deck at all. I bought a &amp;quot;USB walkman&amp;quot; Basetech BT-USB-TAPE-100 on eBay for a few dollars. Then I just plugged this deck to my PC and record my old tapes to uncompressed WAV (at full possible sample speed, 48 kHz, 16 bit, stereo). Then I have cut them using Audacity and converted to TZX via some utility (named WAV2TZX or so...)&lt;/p&gt;&#xA;&lt;p&gt;I was afraid that those old cassettes will be unreadable and the sound record will be damaged, but I was surprisingly successful. So - try it, it can be done.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="3316" LastEditDate="2020-08-17T05:56:01.857" LastActivityDate="2020-08-17T05:56:01.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15906" PostTypeId="1" CreationDate="2020-08-17T07:22:09.657" Score="5" ViewCount="854" Body="&lt;p&gt;In Windows 9x, the MSDOS.SYS configuration file contains a &lt;code&gt;[Paths]&lt;/code&gt; section whose contents usually look like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[Paths]&#xA;WinDir=C:\WINDOWS&#xA;WinBootDir=C:\WINDOWS&#xA;HostWinBootDrv=C&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Both &lt;code&gt;WinDir&lt;/code&gt; and &lt;code&gt;WinBootDir&lt;/code&gt; point to the Windows installation directory, which usually is &lt;code&gt;C:\WINDOWS&lt;/code&gt;, and &lt;code&gt;HostWinBootDrv&lt;/code&gt; points to the drive letter containing it. Having distinct settings suggests that potentially these could be different. Are there situations where this is the case? Why are there three different settings at all? What is their purpose anyway?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-09-26T08:43:36.217" LastActivityDate="2020-09-26T10:20:16.320" Title="Why are there three different settings in the [Paths] section of MSDOS.SYS?" Tags="&lt;windows-98&gt;&lt;windows-95&gt;&lt;windows-me&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15907" PostTypeId="2" ParentId="15906" CreationDate="2020-08-17T07:22:09.657" Score="9" Body="&lt;p&gt;&lt;code&gt;HostWinBootDrv&lt;/code&gt; is the easiest to explain: it has to do with disk compression, i.e. DoubleSpace/DriveSpace. What DriveSpace does is create a file with a name like &lt;code&gt;DRVSPACE.nnn&lt;/code&gt; (with &lt;code&gt;nnn&lt;/code&gt; being a three-digit number) that contains the compressed contents of the disk. The compressed file system is assigned the drive letter of the partition containing the file, and the latter (called the &lt;em&gt;host drive&lt;/em&gt; in this context) is assigned another drive letter, or sometimes hidden entirely. If the partition from which Windows starts is compressed, &lt;code&gt;HostWinBootDrv&lt;/code&gt; points to the host drive of that partition, which by default is &lt;code&gt;H&lt;/code&gt;, while the other settings point to the compressed file system.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;As for &lt;code&gt;WinDir&lt;/code&gt; and &lt;code&gt;WinBootDir&lt;/code&gt;, what they do is relatively easy to discover. Some experimentation reveals the following:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;WinDir&lt;/code&gt; points to the directory in which Windows is installed. The presence of &lt;code&gt;WinDir&lt;/code&gt; in &lt;code&gt;MSDOS.SYS&lt;/code&gt; is what instructed &lt;code&gt;IO.SYS&lt;/code&gt; (before Windows Me) that there was a Windows installation present that it should be prepared to launch (as opposed to just booting to a command prompt, like on an emergency boot floppy). If &lt;code&gt;WinDir&lt;/code&gt; is set, the real-mode kernel will do the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Put two entries in the &lt;code&gt;PATH&lt;/code&gt; environment variable: the directory pointed to by &lt;code&gt;WinDir&lt;/code&gt; and its subdirectory &lt;code&gt;COMMAND&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;Create a subdirectory &lt;code&gt;TEMP&lt;/code&gt; under this directory and point the environment variables &lt;code&gt;TEMP&lt;/code&gt; and &lt;code&gt;TMP&lt;/code&gt; to it;&lt;/li&gt;&#xA;&lt;li&gt;Clear a flag, returned by interrupt &lt;code&gt;0x2f&lt;/code&gt; service &lt;code&gt;0x1611&lt;/code&gt; in BL register bit 5, which &lt;code&gt;COMMAND.COM&lt;/code&gt; checks to decide whether to launch &lt;code&gt;WIN.COM&lt;/code&gt; after processing &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;Start the device configuration manager before processing &lt;code&gt;CONFIG.SYS&lt;/code&gt; (this can be suppressed by the &lt;code&gt;SystemReg=0&lt;/code&gt; setting in the &lt;code&gt;[Options]&lt;/code&gt; section)&lt;/li&gt;&#xA;&lt;li&gt;Look for certain critical files in this directory, including &lt;code&gt;SYSTEM.DAT&lt;/code&gt; (the Registry), &lt;code&gt;COMMAND.COM&lt;/code&gt; (which will fall back to the root directory if absent) and real-mode drivers like &lt;code&gt;HIMEM.SYS&lt;/code&gt; and &lt;code&gt;IFSHLP.SYS&lt;/code&gt; (which can be suppressed by setting &lt;code&gt;DOS=NOAUTO&lt;/code&gt; in &lt;code&gt;CONFIG.SYS&lt;/code&gt;);&lt;/li&gt;&#xA;&lt;li&gt;Store the directory itself in the &lt;code&gt;winbootdir&lt;/code&gt; environment variable (all-lowercase!).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The last two of these is what can be overridden by setting &lt;code&gt;WinBootDir&lt;/code&gt;: if that setting is present as well, those files will be looked up in &lt;code&gt;WinBootDir&lt;/code&gt; instead, and of course it’s that directory which will end up in the &lt;code&gt;winbootdir&lt;/code&gt; environment variable.&lt;/p&gt;&#xA;&lt;p&gt;There are some wrinkles here however, for example with respect to &lt;code&gt;WIN.COM&lt;/code&gt;. When the &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; file is absent, empty or being skipped (like e.g. in Safe Mode), &lt;code&gt;COMMAND.COM&lt;/code&gt; is not loaded and the real-mode kernel will instead directly execute &lt;code&gt;WIN.COM&lt;/code&gt; from &lt;code&gt;WinBootDir&lt;/code&gt;. However, if &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; is present, &lt;code&gt;COMMAND.COM&lt;/code&gt; will be launched to process it, after which it will in turn execute the command &lt;code&gt;WIN&lt;/code&gt;, launching &lt;code&gt;WIN.COM&lt;/code&gt;… by looking it up in &lt;code&gt;PATH&lt;/code&gt;, which by default points to &lt;code&gt;WinDir&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Well, great, but why are &lt;code&gt;WinDir&lt;/code&gt; and &lt;code&gt;WinBootDir&lt;/code&gt; separate settings at all? It is still not entirely clear to me, but from what little I can gather, it was probably meant to support booting Windows over a LAN. In such a configuration, DOS would first be loaded from a normal file system (or even itself from a disk image downloaded over the network), load essential drivers like &lt;code&gt;HIMEM.SYS&lt;/code&gt; from &lt;code&gt;WinBootDir&lt;/code&gt; located on the same file system, then load DOS network drivers, map a share (containing &lt;code&gt;WinDir&lt;/code&gt;) to its drive letter, and then continue booting from there. If that’s the intended scenario, then even the &lt;code&gt;WIN.COM&lt;/code&gt; oddity starts making sense now: there could be a ‘main’ Windows copy started when booting normally from &lt;code&gt;WinDir&lt;/code&gt;, and another minimal ‘emergency’ copy booted in Safe Mode from &lt;code&gt;WinBootDir&lt;/code&gt;, when network boot fails.&lt;/p&gt;&#xA;&lt;p&gt;In any case, the requirements of this scenario could easily require those two settings to have different values. Here’s a short fragment from &lt;a href=&quot;ftp://blurredmanswebsite.ddns.net/Drivers/Mainboards/ECS_K7VZA/Peripheral/Lan/Davicom/Bootrom/BOOTROM.TXT&quot; rel=&quot;nofollow noreferrer&quot;&gt;a document&lt;/a&gt; describing just such a configuration:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;D-2. MSDOS.SYS Sample File for DM9102 :&#xA;=======================================&#xA;&#xA;      [Paths]&#xA;      WinDir=g:\client1&#xA;      WinBootDir=d:\winboot     &amp;lt;== According to RAMDRIVE.SYS assign&#xA;      HostWinBootDrv=c              Virtual Drive (D: or E:)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is also a &lt;a href=&quot;https://www.matem.unam.mx/%7Emicho/papers/Ripl.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt; and a series of articles by Micho Durdevich (&lt;a href=&quot;https://www.matem.unam.mx/%7Emicho/ripl1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;part 1&lt;/a&gt;, &lt;a href=&quot;https://www.matem.unam.mx/%7Emicho/ripl2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;, &lt;a href=&quot;https://www.matem.unam.mx/%7Emicho/ripl3.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;3&lt;/a&gt;, &lt;a href=&quot;https://www.matem.unam.mx/%7Emicho/ripl4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;4&lt;/a&gt;, &lt;a href=&quot;https://www.matem.unam.mx/%7Emicho/ripl5.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;5&lt;/a&gt; and &lt;a href=&quot;https://www.matem.unam.mx/%7Emicho/ripl6.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;6&lt;/a&gt;) that describe how to achieve network boot with Windows 9x.&lt;/p&gt;&#xA;&lt;p&gt;They are somewhat scant on the details of how this all worked, but both those sources mention a &lt;code&gt;SETMDIR&lt;/code&gt; utility, which is distributed as part of Windows 95. This implies that network booting was probably a use case intended by Microsoft.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-09-24T16:21:03.017" LastActivityDate="2020-09-24T16:21:03.017" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15908" PostTypeId="2" ParentId="15902" CreationDate="2020-08-17T11:58:22.530" Score="16" Body="&lt;p&gt;In regards to &amp;quot;is there a way to play my old games again?&amp;quot;, there is a good chance that they are available online somewhere. You might start with the &lt;a href=&quot;https://archive.org/details/softwarelibrary_zx_spectrum&quot; rel=&quot;noreferrer&quot;&gt;Internet Archive&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Collectors and enthusiasts have already made archive copies of almost all spectrum software so if your games were ever on sale there is an excellent chance that someone has already preserved them and you can play them via an emulator.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-08-17T11:58:22.530" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15909" PostTypeId="1" AcceptedAnswerId="15911" CreationDate="2020-08-18T08:17:40.387" Score="6" ViewCount="443" Body="&lt;p&gt;I'm fixing a game (TV Sports Basketball) that tries to write in audio data (using the range &lt;code&gt;$DFF0A0&lt;/code&gt; to &lt;code&gt;$DFF0D0&lt;/code&gt;) but for some reason (bad programming), the index is sometimes (not always) bogus&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MOVEA.L #$00DFF0A0,A0        ;004e78: 207c00dff0a0  load custom address in A0&#xA;MOVE.W  $0008(A5),D0         ;004e80: 302d0008      audio channel 0-3&#xA;LSL.W   #4,D0                ;004e84: e948          shifting (mul by 16)&#xA;MOVE.L  -$346E(A4),(A0,D0.W) ;004e86: 21accb920000  write to register&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;if &lt;code&gt;D0&lt;/code&gt; is greater than 3, then the write to &lt;code&gt;(A0,D0.W)&lt;/code&gt; is way out of bounds. In my case it writes to &lt;code&gt;$DFC5A0&lt;/code&gt;, because after shifting &lt;code&gt;D0&lt;/code&gt; is &lt;code&gt;$D500&lt;/code&gt;. It also depends on the memory location of the memory expansion (using only chip memory doesn't trigger the bug).&lt;/p&gt;&#xA;&lt;p&gt;I know that the Amiga addressing system has masks for custom registers and CIAs, and maybe it will actually write to the correct address (I doubt it with &lt;code&gt;$D50&lt;/code&gt; as a base value for the channel index...), but if I fix the issue by removing the write when the index is out of range, maybe that the sound won't work, whereas it works with that bogus address.&lt;/p&gt;&#xA;&lt;p&gt;For instance, if I write somethig to &lt;code&gt;$DFC09A&lt;/code&gt; it actually has an effect on &lt;code&gt;$DFF09A&lt;/code&gt; (INTENA, easier to check with this particular register which has a read-only counterpart) but if I write to &lt;code&gt;$DFC59A&lt;/code&gt; it has no effect on INTENA.&lt;/p&gt;&#xA;&lt;p&gt;I don't want to leave that bogus address as is, because it violates the memory layout. Is there a formula to mask this address and get back in the &lt;code&gt;$DFF0A0 - $DFF0D0&lt;/code&gt; range ?&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-08-18T21:37:18.860" LastActivityDate="2020-08-18T21:45:14.270" Title="On Amiga, what happens when I write to $DFC5A0 by mistake?" Tags="&lt;hardware&gt;&lt;amiga&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15910" PostTypeId="2" ParentId="15902" CreationDate="2020-08-18T12:33:50.943" Score="18" Body="&lt;p&gt;Did you check the archive at &lt;a href=&quot;http://www.worldofspectrum.org&quot; rel=&quot;noreferrer&quot;&gt;www.worldofspectrum.org&lt;/a&gt;? They preserve whatever spectrum software they can get their hands on, not just games. If you don't find it there, it is likely someone in the forums will assist you to transfer it to .tzx / .tap format and they will upload it to the site.&lt;/p&gt;&#xA;&lt;p&gt;Btw, I've bought many used tapes and was able to load them on a real machine.&lt;/p&gt;&#xA;" OwnerUserId="19107" LastActivityDate="2020-08-18T12:33:50.943" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15911" PostTypeId="2" ParentId="15909" CreationDate="2020-08-18T21:36:04.120" Score="9" Body="&lt;p&gt;&lt;em&gt;note: I'm answering my own question after more research and experimentation.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;$DFF000&lt;/code&gt; base is the custom chip register base address &lt;em&gt;recommended by Commodore&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;But many other base addresses work. Some address lines select the custom chip base, and some are ignored.&lt;/p&gt;&#xA;&lt;p&gt;The custom chip address area is &lt;code&gt;DF0000-DFFFFF&lt;/code&gt; so any base like &lt;code&gt;$DFx000&lt;/code&gt; works.&lt;/p&gt;&#xA;&lt;p&gt;This is confirmed by doing some tests on WinUAE emulator, which is very faithful of those aspects, and which has the interesting ability of being able to &lt;em&gt;read&lt;/em&gt; what's written in the register using its internal debugger.&lt;/p&gt;&#xA;&lt;p&gt;So if I write &lt;code&gt;$12345678&lt;/code&gt; in &lt;code&gt;$DFC0A0&lt;/code&gt; for instance, &lt;code&gt;$12345678&lt;/code&gt; will appear in &lt;code&gt;$DFF0A0&lt;/code&gt; when reading custom registers (using the emulator): &lt;code&gt;$DFC000&lt;/code&gt; is as good as &lt;code&gt;$DFF000&lt;/code&gt; as a custom chip base address, and some games (for instance Curse of Ra) use alternate custom base addresses (Curse of Ra uses &lt;code&gt;$DFE000&lt;/code&gt;), maybe to confuse hackers, or just to be original.&lt;/p&gt;&#xA;&lt;p&gt;Now when I write a 32-bit value to &lt;code&gt;$DFC5A0&lt;/code&gt; (real-life example), the address translates to custom registers &lt;code&gt;$1A0&lt;/code&gt; and &lt;code&gt;$1A2&lt;/code&gt; which are color registers 16 and 17 (&lt;code&gt;$5A0&lt;/code&gt; is masked to &lt;code&gt;$1A0&lt;/code&gt;, there are only $100 16 bit custom registers, any higher bit is ignored), so in that case, the audio register isn't written, color registers are written instead, so there's really a bug in the sound routine.&lt;/p&gt;&#xA;&lt;p&gt;Now why doesn't it have an effect of the visuals? Because writing to color registers has usually no effect: most copperlists overwrite those at each start of the beam, every 20ms in PAL. It can be noticeable for the background color (background would briefly flash) but for foreground colors it would be barely visible or even invisible.&lt;/p&gt;&#xA;&lt;p&gt;So now I just have to decide if I perform no action in that case (like the original game) or if I mask the value to select a valid audio channel and see if it changes the sound, and maybe correct a long-term bug in the game.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-08-18T21:45:14.270" LastActivityDate="2020-08-18T21:45:14.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15913" PostTypeId="2" ParentId="5401" CreationDate="2020-08-19T07:03:03.547" Score="4" Body="&lt;p&gt;Cromemco also made a dual CPU board with the Z80B at 5mhz and MC68010 at 10mhz on the same S100 board. The Cromemco XPU. &lt;a href=&quot;http://vintagecomputer.ca/files/Cromemco/Cromemco%20XPU%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://vintagecomputer.ca/files/Cromemco/Cromemco%20XPU%20Manual.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19116" LastActivityDate="2020-08-19T07:03:03.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15914" PostTypeId="1" CreationDate="2020-08-20T01:58:59.013" Score="0" ViewCount="138" Body="&lt;p&gt;When I was growing up, I played a game for the Atari 800 entitled &amp;quot;Jupiter Mission 1999&amp;quot;, which has as a premise that you wake up in the middle of the night with astronauts at your door and they tell you that you're going to Jupiter with them.  I've searched for videos to watch someone doing a &amp;quot;let's play&amp;quot; on YouTube, Twitch, and using the search engine DuckDuckGo, but all I've gotten is some articles about it, such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Jupiter_Mission_1999&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiki article&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Have I missed something?  Is there some public video of someone playing this game somewhere?&lt;/p&gt;&#xA;" OwnerUserId="10419" LastActivityDate="2020-08-20T13:27:47.947" Title="Any Public Videos of Anyone Playing Jupiter Mission 1999?" Tags="&lt;commodore-64&gt;&lt;gaming&gt;&lt;atari-800&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15915" PostTypeId="1" CreationDate="2020-08-20T04:21:11.370" Score="20" ViewCount="3570" Body="&lt;p&gt;I found out all my SmartTVs don't work because they are too modern for my old computer.&lt;/p&gt;&#xA;&lt;p&gt;I am a young owner of a Commodore 64, so please bear with me as this machine is a decade older than me.&lt;/p&gt;&#xA;&lt;p&gt;I do have &lt;em&gt;AV-video-wires&lt;/em&gt; that I got from eBay.&lt;/p&gt;&#xA;&lt;h2&gt;Question&lt;/h2&gt;&#xA;&lt;p&gt;Before, I make my purchase on Ebay what older television sets would work with the Commodore-64 given I use the &lt;em&gt;AV-video-wires&lt;/em&gt;?&lt;/p&gt;&#xA;" OwnerUserId="11944" LastEditorUserId="11944" LastEditDate="2020-08-24T03:06:24.143" LastActivityDate="2020-08-24T03:06:24.143" Title="What kind of television set would work with the Commodore 64?" Tags="&lt;commodore-64&gt;&lt;display&gt;" AnswerCount="5" CommentCount="14" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15916" PostTypeId="2" ParentId="15915" CreationDate="2020-08-20T05:56:29.730" Score="19" Body="&lt;p&gt;Modern smart TVs may have analog inputs, but they are very &amp;quot;picky&amp;quot;. They often do not work with older computers. My two Smart TVs cannot display even Amiga nor Atari ST, although they provide Composite input, RGB SCART, etc. So I have one very old TV for all my retro machines. The problem is nobody can say if your TV will work with your C64 before you try it.&lt;/p&gt;&#xA;&lt;p&gt;One possible way is to buy any PAL-to-VGA or PAL-to-HDMI (Composite-to-VGA) converter / scandoubler, but the result does not satisfy me (there are some video artifacts on the screen and picture shakes sometimes). Maybe the expensive ones do their work better.&lt;/p&gt;&#xA;&lt;p&gt;But a couple of years ago I have found a gadget on eBay / AliExpress, named &amp;quot;Car rear camera PAL display parking blah blah...&amp;quot; It cost around 30 USD and it is &lt;a href=&quot;https://www.aliexpress.com/item/32334053998.html&quot; rel=&quot;noreferrer&quot;&gt;4.3&amp;quot;&lt;/a&gt; or &lt;a href=&quot;https://alitronik.com/7-tft-display-with-palntsc-input/&quot; rel=&quot;noreferrer&quot;&gt;7&amp;quot;&lt;/a&gt; LCD color display with PAL input (composite video). It is pretty small, but the picture is perfect, much better than the picture from any XXX-to-VGA (XXX-to-HDMI) converter I ever saw.&lt;/p&gt;&#xA;&lt;p&gt;I have tested it with ZX Spectrum (with video signal output), Atari 130, Commodore 128 as well as my hobby &amp;quot;Arduino-based computer with monochrome PAL output&amp;quot;. Unfortunately, I have not tested it with the C64, but I believe it should work together.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rDQ0M.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;ZX Spectrum + PAL parking display&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rDQ0M.jpg&quot; alt=&quot;ZX Spectrum + PAL parking display&quot; title=&quot;ZX Spectrum + PAL parking display&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/c09WN.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;Atari 130XE + PAL parking display&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/c09WN.jpg&quot; alt=&quot;Atari 130XE + PAL parking display&quot; title=&quot;Atari 130XE + PAL parking display&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="202" LastEditDate="2020-08-20T19:03:37.573" LastActivityDate="2020-08-20T19:03:37.573" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15918" PostTypeId="2" ParentId="15915" CreationDate="2020-08-20T12:56:05.440" Score="5" Body="&lt;p&gt;Assuming the problem is that your smart TVs don't have any analog video inputs, the &lt;a href=&quot;https://www.retrotink.com/product-page/retrotink-2x&quot; rel=&quot;noreferrer&quot;&gt;Retrotink-2X&lt;/a&gt; upscaler, about $100, converts component, S-Video, and composite to HDMI.&lt;/p&gt;&#xA;&lt;p&gt;The Framemeister XRGB-Mini used to be the best option ($200), but recently it has skyrocketed in price ($500) due to parts going out of production.&lt;/p&gt;&#xA;&lt;p&gt;On the low end, there are various &amp;quot;av2hdmi&amp;quot; converters on eBay and elsewhere that will work if you find a good one ($10). The quality won't be as good as the Retrotink-2X, and it will add a fraction of a second of lag and make high-speed gaming difficult, but it's cheap.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-08-20T12:56:05.440" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15919" PostTypeId="2" ParentId="15914" CreationDate="2020-08-20T13:27:47.947" Score="1" Body="&lt;p&gt;I recall the ads for this game being among the most enticing I had ever seen in the era, and one of my earlier examples of must-have-itis.&lt;/p&gt;&#xA;&lt;p&gt;I recently tried playing the game with the aid of an emulator. I was rather disappointed to learn that it consists of a series of mini-games, including ones that had been released separately as stand-alone games, notably Space Cowboy.&lt;/p&gt;&#xA;&lt;p&gt;My suggestion is to simply download an emulator, a set of 400/800 ROMs and have at it. Disk images are &lt;a href=&quot;http://www.atarimania.com/game-atari-400-800-xl-xe-jupiter-mission-1999_2721.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;widely available&lt;/a&gt;. You &lt;em&gt;will&lt;/em&gt; go nuts waiting for loads.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-08-20T13:27:47.947" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15920" PostTypeId="2" ParentId="15915" CreationDate="2020-08-20T14:36:30.880" Score="2" Body="&lt;p&gt;I once plugged a Super Nintendo, via an AV cable, into an LG TV (made in about 2013) and there was so much lag that it was unplayable.  (Though I do not recall whether I plugged it directly into the TV or routed it through a VCR at the time.)  So keep that in mind.&lt;/p&gt;&#xA;&lt;p&gt;The other thing I remember when I first got my Commodore 64 (C64) in the 1980s was the C64 would not work well with certain models of analog televisions: The image would constantly &amp;quot;bounce&amp;quot; up and down on the screen (and this happened with two different C64s that I tried).  So if you're going to buy an analog TV, I'd test it first.&lt;/p&gt;&#xA;&lt;p&gt;That said, if you're in the USA, and looking to get a dedicated analog TV for this endeavor, you may want to check out &lt;a href=&quot;https://freecycle.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Freecycle.org&lt;/a&gt; where people give and take things locally, for free.&lt;/p&gt;&#xA;" OwnerUserId="8963" LastEditorUserId="8963" LastEditDate="2020-08-20T15:54:02.880" LastActivityDate="2020-08-20T15:54:02.880" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15921" PostTypeId="2" ParentId="15915" CreationDate="2020-08-20T15:01:22.977" Score="20" Body="&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; If you don't want to rely on an intermediate device, such as a &amp;quot;scan-doubler&amp;quot;, then you need a screen that includes analog inputs &lt;strong&gt;and internal electronics&lt;/strong&gt; capable of displaying a &lt;a href=&quot;https://en.wikipedia.org/wiki/Low-definition_television&quot; rel=&quot;noreferrer&quot;&gt;low-definition 240p video&lt;/a&gt; signal.&lt;/p&gt;&#xA;&lt;p&gt;The real issue is the inability of those screens that do have the composite video input to &lt;em&gt;correctly deal with a signal source that only sends the odd or even field&lt;/em&gt; (at 60Hz) rather than sending both fields interlaced (at 30Hz). Most of the retro computers and consoles that produce NTSC/PAL do so with a non-interlaced output. Interlaced NTSC/PAL is only common on the Amiga, and it is rarely used (without a scan-doubler) because there is too much &amp;quot;flicker&amp;quot; on a CRT screen at 30Hz to be usable for text display and most games.&lt;/p&gt;&#xA;&lt;p&gt;My experience is that modern LCD TV's that have the necessary composite analog, S-video, or component style inputs can work fine with an interlaced, 480i, signal. But they will experience all sorts of syncing issues if you try to use a non-interlaced 240p signal. What a scan-doubler actually does is promote the 240p to 480p, thus eliminating the sync problems caused by 240p and &lt;strong&gt;also eliminating the &amp;quot;flicker&amp;quot; problem&lt;/strong&gt; on CRT's by getting rid of interlace.&lt;/p&gt;&#xA;&lt;p&gt;Such a 480p signal also has a 31.5kHz horizontal frequency, doubled from the original 240p 15.75kHz, and is compatible with &amp;quot;VGA&amp;quot; inputs, if you separate out the RGB and sync portions as separate inputs. So, that's why most &amp;quot;scan-doubler&amp;quot; solutions output to a VGA connector.&lt;/p&gt;&#xA;&lt;p&gt;There are LCD screens that support 240p, but they are becoming more and more rare as this use case dies out. I have two Dell &amp;quot;1080p&amp;quot; monitors (Model #U2410, actual resolution 1920x1200) that support 240p. These monitors are already 10 years old and newer monitors tend not to support 240p.&lt;/p&gt;&#xA;&lt;p&gt;Your best solutions for a C64, in my opinion:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Acquire a old, compatible, CRT monitor that supports the chroma/luma (&amp;quot;S-video&amp;quot;) output of the C64.&lt;/li&gt;&#xA;&lt;li&gt;Acquire an external scan-doubler along with any VGA compatible monitor, either CRT or LCD.&lt;/li&gt;&#xA;&lt;li&gt;Try to find a used LCD with 240p support. Dell and BenQ are the most common.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Since this situation is already well-understood, none of the solutions are particularly cheap. Old LCD's with this added capability, and virtually all old CRT's, now fetch somewhat &amp;quot;premium&amp;quot; prices. Fortunately, scan-doublers are becoming cheaper and more pervasive. You might investigate the retroTINK.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-08-20T18:47:14.810" LastActivityDate="2020-08-20T18:47:14.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15922" PostTypeId="2" ParentId="13611" CreationDate="2020-08-20T22:29:42.513" Score="4" Body="&lt;p&gt;My personal experience with the Alpha AXP was when I attended a presentation in the Detroit area during the introduction of the product many years ago.  It was a video presentation and it showed the president of DEC on a stage demonstrating the capabilities of the system.&lt;/p&gt;&#xA;&lt;p&gt;He had a projection display screen that was attached to the computer, and the computer was represented by a wire-frame head on that display.&lt;/p&gt;&#xA;&lt;p&gt;He could speak to the computer and it would respond.  It demonstrated real-time voice-recognition and real-time animation of the head.&lt;/p&gt;&#xA;&lt;p&gt;He would get it to check his e-mails, respond to them and to contact, by telephone call, one of the senders of an email.&lt;/p&gt;&#xA;&lt;p&gt;It was very impressive.  Even today, we have no common usage of this technology, which was demonstrated decades ago.&lt;/p&gt;&#xA;&lt;p&gt;To be clear,the feature I witnessed were exactly what put it so far ahead of even today's computers.&lt;/p&gt;&#xA;&lt;p&gt;I would give a lot to get my hands on that demonstration video again.&lt;/p&gt;&#xA;" OwnerUserId="19131" LastActivityDate="2020-08-20T22:29:42.513" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15924" PostTypeId="2" ParentId="9599" CreationDate="2020-08-21T08:25:05.367" Score="0" Body="&lt;p&gt;There was and is a GUI toolkit called Winteracter (&lt;a href=&quot;http://winteracter.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://winteracter.com/&lt;/a&gt;) for multiple Fortran compilers across  Windows, *NIX and MacOS.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2020-08-21T08:25:05.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15925" PostTypeId="2" ParentId="8112" CreationDate="2020-08-21T11:56:41.180" Score="0" Body="&lt;p&gt;Metrowerks was a very popular set of dev tools for classic Macs, but I believe only C, C++, and Object Pascal. I don't remember them ever shipping a Modula-2 compiler.&lt;/p&gt;&#xA;&lt;p&gt;CodeWarrior was the name of the Metrowerks GUI IDE running stand alone rather than as command line tools within MPW.&lt;/p&gt;&#xA;&lt;p&gt;Apple sold an MPW Command Reference manual, and IIRC a tutorial book as well. I don't think anyone else wrote much: MPW was a sort of very strange Unix with Latin-1 characters replacing the ASCII pipe, redirect, etc. (An MPW terminal was briefly visible in the movie Jurassic Park on Nedry's Mac.)&lt;/p&gt;&#xA;&lt;p&gt;Macintosh Revealed, volumes 1 &amp;amp; 2, by Stephen Chernicoff was the most popular tutorial for the initial wave of Mac developers. (Inside Mac was a reference, not a tutorial.)&lt;/p&gt;&#xA;&lt;p&gt;Around the time of System 6 a lot of Mac development was done with MacApp, the Apple object orientated framework. First two versions were Object Pascal, after that switched to C++. Look for books or references with &amp;quot;MacApp&amp;quot; in the title.&lt;/p&gt;&#xA;" OwnerUserId="8197" LastActivityDate="2020-08-21T11:56:41.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15926" PostTypeId="2" ParentId="15915" CreationDate="2020-08-21T12:32:47.830" Score="5" Body="&lt;p&gt;You can use the RF output of your C64. Get a &lt;a href=&quot;https://www.c64-wiki.com/wiki/RF_Jack&quot; rel=&quot;noreferrer&quot;&gt;Chinch-RF cable&lt;/a&gt; and plug it into the antenna input in your TV. Then you just have to scan for the correct channel your Commodore will use to &amp;quot;broadcast&amp;quot; (remember to select &amp;quot;analog&amp;quot;). Tested on modern Samsung SmartTV (PAL)&lt;/p&gt;&#xA;" OwnerUserId="19136" LastActivityDate="2020-08-21T12:32:47.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15927" PostTypeId="1" CreationDate="2020-08-21T20:39:17.340" Score="-1" ViewCount="260" Body="&lt;p&gt;&lt;em&gt;Note: I've attempted to ask this question several times in the &amp;quot;Arqade&amp;quot; category. Just like with the &amp;quot;History&amp;quot; category, anything I ask there is deleted by their broken bots soon after I post it. And I don't mean &amp;quot;closed&amp;quot;, but &lt;em&gt;DELETED&lt;/em&gt;. As in, memoryholed. 404 error. That's why I ask here. Not because I think this is the best fitting category, but it's the next best, is about retro computers and it even has an &amp;quot;emulation&amp;quot; tag.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ever since the late 1990s, I've tried countless video game emulators, everything from the NES to the Nintendo 64. They have all been &lt;em&gt;awful&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I'm not implying that I could do better, of course (I could not even make a crappy emulator), but as a person who grew up with video games of the golden era (1980-2000), I've become increasingly appalled by how the classic games are butchered by people who apparently cannot tell the difference.&lt;/p&gt;&#xA;&lt;p&gt;Every time I've brought up just how horribly butchered the games look, sound and play through their emulator, they've acted as if I were personally insulting them, their parents, or their kids. If I don't get banned/blocked right away, they become at best very surly, no matter how nicely I put it.&lt;/p&gt;&#xA;&lt;p&gt;It truly seems as if they cannot tell the difference. I feel like some sort of food snob who tries to convince somebody that their package of moldy fries that they found in a dumpster behind a fast food restaurant is not the same as the food you get at the finest restaurant in town.&lt;/p&gt;&#xA;&lt;p&gt;I immediately notice that the resolution is completely wrong, that the aspect ratio is stretched to widescreen, that the text and 2D sprites look completely warped and &amp;quot;cut off&amp;quot;, that various entire layers are not present or flicker, that the in-game &amp;quot;big screen&amp;quot; object in Mario Kart 64 doesn't display anything at all, that the animations are absurdly off/glitchy, the sound is all warped/sounds wrong, the timing of all kinds of things seems to be nothing like they are on the real hardware, etc.&lt;/p&gt;&#xA;&lt;p&gt;It seems to me as if they have entirely ceased all emulation development since many years. Every time, 5 years apart, when I try the latest emulators, I notice that they still are lightyears from actually emulating the real hardware. Even for freaking NES, as crazy as that sounds! But &lt;em&gt;especially&lt;/em&gt; for SNES, Nintendo 64, PlayStation, Saturn, etc.&lt;/p&gt;&#xA;&lt;p&gt;Maybe I'm just an idiot who can't find the &amp;quot;real&amp;quot; emulators, but I don't think they exist. I think the people who use them simply don't have the ability to tell how bad they are. I'm not asking for links or names of emulators as I'm pretty sure I know about them all.&lt;/p&gt;&#xA;&lt;p&gt;I dream of the day when I can finally play all these games that I never got as a child, and which are now too expensive to actually buy second-hand, and which are butchered with current emulators.&lt;/p&gt;&#xA;&lt;p&gt;With this in mind, what does &amp;quot;cycle-accurate emulation&amp;quot; mean? Are there any such emulators out there? And does that mean that it's 100% impossible to tell them apart from the real hardware in 100% of all cases, if hooked up to a CRT TV and using some sort of adapter to be able to use the real controllers?&lt;/p&gt;&#xA;" OwnerUserId="19138" LastActivityDate="2020-08-22T09:51:13.647" Title="What does &quot;cycle-accurate emulation&quot; mean?" Tags="&lt;hardware&gt;&lt;emulation&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ClosedDate="2020-08-22T10:07:42.497" ContentLicense="CC BY-SA 4.0" />
  <row Id="15928" PostTypeId="2" ParentId="15927" CreationDate="2020-08-21T21:32:21.053" Score="7" Body="&lt;p&gt;Speaking as an emulator author, &amp;quot;cycle-accurate emulation&amp;quot; is a label that authors apply to their emulator if they want to advertise that they've attempted to implement the parts of the logic they consider fundamental so that every event they model occurs within the correct discrete window of time as marked out by the system clock.&lt;/p&gt;&#xA;&lt;p&gt;On something like a NES that should mean that the processor makes its decisions at the correct moments, that the image processor fetches tiles and sprites at the correct intervals, and therefore that those things intersect as they did on real hardware.&lt;/p&gt;&#xA;&lt;p&gt;In essence: the objective is to ensure that it is impossible for software to detect that it is in an environment other than its original.&lt;/p&gt;&#xA;&lt;p&gt;For the NES, &lt;a href=&quot;http://fceux.com/web/home.html&quot; rel=&quot;noreferrer&quot;&gt;FCEUX&lt;/a&gt; is both claimed to be cycle accurate, and widely accepted as such. So it likely is.&lt;/p&gt;&#xA;&lt;p&gt;With many emulators things fall down a little at the point of video output — it's still fairly common to send complete frames atomically, and either display them at exact 1:1 pixel ratio with the host machine's screen. So, in modern terms, the pixels always end up square. Some emulators attempt post-processing to apply the correct aspect ratio and possibly to give a more TV-like display but mileage varies and clearly sending a whole frame and then post-processing it is completely distinct from how real audio-video equipment functions.&lt;/p&gt;&#xA;&lt;p&gt;I'm the author of an emulator that tries to maintain signal-level fidelity even in that last mile, which means there'll be others too, but I'm not aware of any mainstream emulator that does so.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-08-21T21:32:21.053" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15929" PostTypeId="1" CreationDate="2020-08-21T22:45:46.800" Score="3" ViewCount="267" Body="&lt;p&gt;Is it possible to load CDTV.DEVICE and CDFileSystem extracted from CDTV extended rom on Workbench Startup, or manipulate amiCD drivers to load CDTV.DEVICE instead?&lt;/p&gt;&#xA;&lt;p&gt;My setup is CDTV, KS3.1, TF536 50mhz, MMU, 64MB RAM, SD2IDE, ClassicWB ADVSP. This all works okay and stable with disabled extended rom, but I would love to have native/emulated access to built in CDROM.&lt;/p&gt;&#xA;&lt;p&gt;When I set CD0 device to cdtv.device and set bufmemtype between 2 and 5 after enqbling extended rom I had the error, not sure what is it referring to, bit I guess this is to do with CD ROM DMA?&lt;/p&gt;&#xA;&lt;p&gt;Settings:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/5ECcZ.jpg&quot; alt=&quot;CD options&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Error when extended rom is enabled&#xA;&lt;img src=&quot;https://i.stack.imgur.com/rGpUR.jpg&quot; alt=&quot;error&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2020-10-19T21:39:10.663" LastActivityDate="2020-10-19T21:39:10.663" Title="Can Workbench 3.1 have access to CDTV CD Rom" Tags="&lt;cd-rom&gt;&lt;amiga-kickstart&gt;&lt;amiga-cdtv&gt;&lt;amiga-workbench-3.1&gt;" AnswerCount="0" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15930" PostTypeId="1" CreationDate="2020-08-21T23:07:48.937" Score="2" ViewCount="144" Body="&lt;p&gt;I've found a text formatting tool, under the name of &lt;strong&gt;SCHEMA&lt;/strong&gt;, which would accept an input language like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;*RED&#xA;*0STA*NN*RG*1RL*0MCS1 20&#xA;*3/&#xA;*MDLorem ipsum dolor sit amet,&#xA;*MDconsectetur adipiscing elit,&#xA;*MDsed do eiusmod tempor incididunt&#xA;*MDut labore et dolore magna aliqua.&#xA;*MD&#xA;*MD&#xA;*P&#xA;*E&#xA;*END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and produced line printer output like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.----------------------------------------------------------------------------------.&#xA;I                                                                                  I&#xA;I                                                                                  I&#xA;I                                                                                  I&#xA;I                                                                                  I&#xA;I                                                                                  I&#xA;I                                                                                  I&#xA;I                                                                                  I&#xA;I                                                                                  I&#xA;I                                                                                  I&#xA;I           LОRЕМ IРSUМ DОLОR                                                      I&#xA;I                                                                                  I&#xA;I               SIТ АМЕТ,                                                          I&#xA;I                                                                                  I&#xA;I              СОNSЕСТЕТUR                                                         I&#xA;I                                                                                  I&#xA;I            АDIРISСING ЕLIТ,                                                      I&#xA;I                                                                                  I&#xA;I             SЕD DО ЕIUSМОD                                                       I&#xA;I                                                                                  I&#xA;I           ТЕМРОR INСIDIDUNТ                                                      I&#xA;I                                                                                  I&#xA;I          UТ LАВОRЕ ЕТ DОLОRЕ                                                     I&#xA;I                                                                                  I&#xA;I             МАGNА АLIQUА.                                                        I&#xA;I                                                                                  I&#xA;...&#xA;I                                                                                  I&#xA;I                                                                                  I&#xA;.----------------------------------------------------------------------------------.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;so that each page would fit exactly on one sheet of fan-fold line printer paper vertically, and occupy half the sheet horizontally.&lt;/p&gt;&#xA;&lt;p&gt;Experimentation shows that the number 20 appears to be the width of the centered field, and the number before RL appears to specify line separation. For example, if &lt;code&gt;20&lt;/code&gt; is replaced with &lt;code&gt;30&lt;/code&gt;, and &lt;code&gt;1RL&lt;/code&gt; with &lt;code&gt;0RL&lt;/code&gt;, I get&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;...&#xA;I           LОRЕМ IРSUМ DОLОR SIТ АМЕТ,                                            I&#xA;I           СОNSЕСТЕТUR АDIРISСING ЕLIТ,                                           I&#xA;I              SЕD DО ЕIUSМОD ТЕМРОR                                               I&#xA;I                    INСIDIDUNТ                                                    I&#xA;I            UТ LАВОRЕ ЕТ DОLОRЕ МАGNА                                             I&#xA;I                     АLIQUА.                                                      I&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This language does not look like an original Soviet invention, and it does not look like DEC &lt;a href=&quot;https://en.wikipedia.org/wiki/TYPSET_and_RUNOFF&quot; rel=&quot;nofollow noreferrer&quot;&gt;RUNOFF&lt;/a&gt; nor like IBM &lt;a href=&quot;https://en.wikipedia.org/wiki/SCRIPT_(markup)&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCRIPT&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Does it ring a bell to anyone?&lt;/p&gt;&#xA;&lt;p&gt;Update: To experiment, please use the following instructions (Linux/Ubuntu, please modify as appropriate for other OS/environments):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git clone https://github.com/besm6/dispak.git&#xA;sudo apt install automake&#xA;sudo apt install bison&#xA;./configure --prefix=$HOME&#xA;make&#xA;make install&#xA;export BESM6_PATH=$HOME/share/besm6&#xA;cat &amp;gt; test.b6 &amp;lt;&amp;lt; EOF&#xA;USER 419900RC5^&#xA;LPR 128^&#xA;DISK 67(4002)^&#xA;EEB1A3&#xA;*NAME SCHEMA&#xA;*     Lines with 5 spaces after * are comments&#xA;*     E. g.  add 5 spaces after *  next line to see loader output&#xA;*NO LOAD LIST&#xA;*     The next line enables max heap size&#xA;*CALL YESMEMORY&#xA;*     The next 3 lines are akin to ld -u SCHEMA -l &amp;lt;library&amp;gt;; ./a.out&#xA;*MAIN SCHEMA&#xA;*PERSO:670702&#xA;*EXECUTE&#xA;*RED&#xA;*0STA*NN*RG*1RL*0MCS1 20&#xA;*3/&#xA;*MDLorem ipsum dolor sit amet,&#xA;*MDconsectetur adipiscing elit,&#xA;*MDsed do eiusmod tempor incididunt&#xA;*MDut labore et dolore magna aliqua.&#xA;*MD&#xA;*MD&#xA;*P&#xA;*E&#xA;*END&#xA;*END FILE&#xA;``````&#xA;EFINISH&#xA;EOF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The lines between &lt;code&gt;*EXECUTE&lt;/code&gt; and &lt;code&gt;*END FILE&lt;/code&gt; are the standard input to the program being executed.&#xA;Then running &lt;code&gt;~/bin/dispak -l test.b6&lt;/code&gt; should produce the sample output above. The &lt;code&gt;-l&lt;/code&gt; option is needed to make sure that all Latin letters having identical Cyrillic analogs are output as Latin rather than Cyrillic.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2020-08-23T06:17:25.180" LastActivityDate="2020-08-23T06:17:25.180" Title="Has anyone heard of SCHEMA page layout tool?" Tags="&lt;history&gt;&lt;file-format&gt;&lt;text&gt;&lt;identify-this-software&gt;&lt;besm-6&gt;" AnswerCount="0" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="15931" PostTypeId="2" ParentId="13990" CreationDate="2020-08-22T01:25:10.617" Score="6" Body="&lt;p&gt;While I think it's well-established here S1 was pure vaporware, I located some additional information about the product and the company.&lt;/p&gt;&#xA;&lt;p&gt;Between 1984 and 1985, Multi Solutions announced partnerships with several companies for S1 licenses, including &lt;a href=&quot;https://archive.org/details/computerworld1822unse/page/118/mode/2up?q=multi%20solutions&quot; rel=&quot;nofollow noreferrer&quot;&gt;Philips Medical Systems&lt;/a&gt;, &lt;a href=&quot;https://archive.org/details/computerworld1847unse/page/78/mode/2up?q=multi%20solutions&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computer Engineering &amp;amp; Consulting&lt;/a&gt; (Japan), and (under the headline &amp;quot;The S1 Lives!&amp;quot;) &lt;a href=&quot;https://archive.org/details/PersonalComputerWorld1985-02/page/118/mode/2up?q=multi%20solutions&quot; rel=&quot;nofollow noreferrer&quot;&gt;Entronix AB&lt;/a&gt; (Sweden).  &lt;em&gt;Datamation&lt;/em&gt; mentions Multi Solutions had &lt;a href=&quot;https://archive.org/details/bitsavers_datamation_23943913/page/n65/mode/2up?q=multi%20solutions&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;virtually no revenues since its founding&amp;quot;&lt;/a&gt; in 1982.&lt;/p&gt;&#xA;&lt;p&gt;Yet, a &lt;em&gt;Personal Computer World&lt;/em&gt; columnist claimed in 1984 &lt;a href=&quot;https://archive.org/details/PersonalComputerWorld1984-05/page/126/mode/2up?q=multi%20solutions&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;the US stock market has already found over a million dollars&amp;quot;&lt;/a&gt; for the company.  And Japanese computer magazine &lt;em&gt;I/O&lt;/em&gt; printed what I believe is an &lt;a href=&quot;https://archive.org/details/Io19847/page/n317/mode/2up?q=multi%20solutions&quot; rel=&quot;nofollow noreferrer&quot;&gt;advertorial&lt;/a&gt; written by John Little of Multi Solutions, complete with a two-page feature grid demonstrating YES, S1 can do everything the competition cannot.&lt;/p&gt;&#xA;&lt;p&gt;One oddball reference I found was buried in a &lt;a href=&quot;https://archive.org/details/mag_PersonalComputerNews036-16Nov1983/page/n9/mode/2up?q=multi%20solutions&quot; rel=&quot;nofollow noreferrer&quot;&gt;report&lt;/a&gt; on the National Software Show in San Francisco, 1983.  The operating system is bafflingly called &amp;quot;F-1&amp;quot; here, and the reporter notes Robert Knight &amp;quot;wrote the language in which it's written,&amp;quot; a claim Jerry Pournelle alluded to obliquely in one of his Chaos Manor columns.&lt;/p&gt;&#xA;&lt;p&gt;In 1986, S1 was mentioned in the &lt;em&gt;S-100 Journal&lt;/em&gt;'s &lt;a href=&quot;https://archive.org/details/S100JournalVol01031986Spring/page/n33/mode/2up?q=multi%20solutions&quot; rel=&quot;nofollow noreferrer&quot;&gt;letters to the editor page&lt;/a&gt; by a reader interested in the &amp;quot;highly-impressive&amp;quot; operating system.  An editor responded he too was excited but&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;they want to sell it only to OEMs in large quantities, so I lost interest. …they have it there fully configured for the CompuPro 68K.  All they'd need to do would be to make copies, ship them out, collect the money, and hire a person for telephone technical support.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This sounds like another clue that a press demo of some sort was available for the CompuPro 68K.&lt;/p&gt;&#xA;&lt;p&gt;The topper is a &lt;em&gt;PC World&lt;/em&gt; article from June 1985.  Headlined &lt;a href=&quot;https://archive.org/details/pcworld36unse/page/82/mode/2up?q=multi%20solutions&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Operating System Operator&amp;quot;&lt;/a&gt;, the writer describes his dealings with a &amp;quot;fast-talking&amp;quot; Charles Lombardo.  The article reprints a Multi Solutions ad with stone tablets carved as microchips in the style of the Ten Commandments.  When asked to produce a list of potential S1 vendors, Lombardo claims the partnerships were &amp;quot;classified&amp;quot; (even though Multi Solutions had been announcing them to the press for two years by this point).  When asked to produce the operating system itself for review, Lombardo declared:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;Our staff would be spending all their time answering phones and giving magazine reviewers technical support if I released copies.  We don't have the resources for that.  Besides,&amp;quot; he added, &amp;quot;your reviewers couldn't understand it.  It's unlike anything they've seen.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By 1989, Multi Solutions was &lt;a href=&quot;https://archive.org/details/macworld00unse_8as/page/52/mode/2up?q=multi%20solutions&quot; rel=&quot;nofollow noreferrer&quot;&gt;advertising HyperCard stacks&lt;/a&gt; in Mac magazines (note the &amp;quot;S1&amp;quot; bubble in their corporate logo).  As with the earlier advertising, the ad copy sells the stacks as capable of doing everything anyone would ever want, employing the same kind of rolling hyperbolic one would find on a label of Dr. Bronner's soap.&lt;/p&gt;&#xA;&lt;p&gt;But at the bottom of the ad is a rather telling clue: Beneath &amp;quot;ABSOLUTELY THE GREATEST VALUE EVER!!!&amp;quot; the company's phone number is listed as 1-800-888-HYPE.&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="4222" LastEditDate="2020-08-23T03:00:32.187" LastActivityDate="2020-08-23T03:00:32.187" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15932" PostTypeId="2" ParentId="15927" CreationDate="2020-08-22T09:51:13.647" Score="3" Body="&lt;p&gt;&amp;quot;Cycle-accurate&amp;quot; means the emulated parts (mainly the CPU and the video processor) do things at the same speed and with the same steps sequence as the original hardware did. For example, the real CPU did instruction fetch in the first cycle, then did an instruction decoding, then did the memory access, then reads the value, etc... At the same time, the video processor did its own job. A lot of special effects were achieved with this cooperation (or &amp;quot;race condition&amp;quot;) in the mind, depending on the exact timing. I.e. the CPU changes the video processor registers at a very precise moment to generate the desired video effect, and this timing depended on the &amp;quot;clock cycles per each instruction&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Such level of emulation is harder to achieve, so a lot of emulators does it work in a simple way: just emulate &amp;quot;a bunch of CPU instruction&amp;quot; at one time, then compute the video result, and so on. It is easier and &amp;quot;fair enough&amp;quot;, but it cannot achieve the proper look, especially in the cases the software rely on the exact timing.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-08-22T09:51:13.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15933" PostTypeId="1" CreationDate="2020-08-22T10:07:18.110" Score="1" ViewCount="64" Body="&lt;p&gt;For the C64, there are a lot of emulation devices floating on (Euro) ebay that allow you to load programs from SDcard via emulated serial floppy or/and tape interfaces, simulating the insertion of a disk by selecting a e.g. &amp;quot;.d64&amp;quot; file from SDcard.&lt;/p&gt;&#xA;&lt;p&gt;While I have seen clones of particular modules for the expansion slot, e.g. Final Cartridge III, I have never seen a generic module in the vein of above mentioned drive emulators where you can load some module file from SDcard.&lt;/p&gt;&#xA;&lt;p&gt;Why is that? Would it be possible to do? Is all such a module is just 6510 opcodes in ROM that get loaded into RAM on boot, nothing else?&lt;/p&gt;&#xA;&lt;p&gt;I do remember that such modules had &amp;quot;cheat&amp;quot; functions like pausing a game and storing / retrieving its state to/from disk etc - I'm not sure whether this required some extra logic in the module and use of special signal lines from the expansion port.&#xA;That would mean that VICE module files must contain more than just opcode, and stuff that only works in VICE.&lt;/p&gt;&#xA;&lt;p&gt;OTOH if I'm just confused about the above and it's as straightforward as it seems to otherwise look , I'd like to give making such a module myself a try.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;:&#xA;Ok, I can't precisely answer my own question, but this find gives me some idea that it's indeed more complicated... This module supportes a few very specific modules, and has a Xilinx FPGA on it from the looks of it, so apparently they figured not even a fast MCU would do it...&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://skoe.de/easyflash/ef3intro/&quot; rel=&quot;nofollow noreferrer&quot;&gt;EasyFlash3&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19141" LastEditorUserId="19141" LastEditDate="2020-08-22T12:26:49.723" LastActivityDate="2020-08-22T12:26:49.723" Title="Expansion Port &amp; Final Cartridge et al - Are they just programs in ROM, or is there more to it?" Tags="&lt;commodore-64&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2020-08-22T17:58:09.133" ContentLicense="CC BY-SA 4.0" />
  <row Id="15934" PostTypeId="1" CreationDate="2020-08-22T13:51:39.403" Score="7" ViewCount="436" Body="&lt;p&gt;I had a PlayStation. Not some &amp;quot;slim&amp;quot; version or &amp;quot;late-era model&amp;quot;. The original. The real one.&lt;/p&gt;&#xA;&lt;p&gt;It had a built-in CD player with a rather elegant, if &amp;quot;blocky&amp;quot;, GUI.&lt;/p&gt;&#xA;&lt;p&gt;In the latest episode of &lt;a href=&quot;https://en.wikipedia.org/wiki/Angry_Video_Game_Nerd&quot; rel=&quot;nofollow noreferrer&quot;&gt;AVGN&lt;/a&gt;, the Nerd puts in a music CD into his PlayStation (which visually looks just like the classic one, so it's not the later &amp;quot;PSOne&amp;quot; model) and (probably with sarcasm) claims that it's &amp;quot;the best CD player ever&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;What's displayed on his TV is not what I expected. Instead, the GUI looks completely different, with bright, &amp;quot;friendly&amp;quot; colors and shapes. Nothing whatsoever like what I remember so vividly. This both shocked and annoyed me. Now, a whole generation of kids who watches that video will forever think that's how the CD player GUI looked like in the PlayStation...&lt;/p&gt;&#xA;&lt;p&gt;It doesn't seem like he made this up. It looks far too polished/professional to be some &amp;quot;two-second gag&amp;quot; just for the video. I assume that Sony did change the GUI after some time, but the fact remains that his PlayStation, as seen in the video underneath the TV, is the classic, &amp;quot;bulky&amp;quot;, grey one. So apparently, they changed the GUI while they were still making the classic PlayStation model(s)? That's curious to me, if true.&lt;/p&gt;&#xA;&lt;p&gt;Or is this a case where he shot the parts with the Nerd in his room and had other people help him with all the capturing of footage, to save time, and those people only had access to a &amp;quot;PSOne&amp;quot; which would feature this &amp;quot;childish&amp;quot; GUI instead of the far more &amp;quot;industrial&amp;quot; looking original GUI? It looks like it's his (modern) TV in the &amp;quot;Nerd room&amp;quot;, though, so that seems unlikely in this case.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/D9TT6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/D9TT6.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19142" LastEditorUserId="3290" LastEditDate="2020-08-23T09:25:50.367" LastActivityDate="2020-08-23T10:37:32.230" Title="Why does the GUI for the built-in PlayStation CD player look so weird in the latest AVGN episode?" Tags="&lt;sony-playstation&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15935" PostTypeId="1" AcceptedAnswerId="15937" CreationDate="2020-08-22T15:15:34.863" Score="6" ViewCount="415" Body="&lt;p&gt;It's long been an established fact that the EGA only had four memory planes, which limited the number of colors on the screen to (2&lt;sup&gt;4&lt;/sup&gt;) 16. The best compatible monitors at the time had six TTL color lines, meaning the screen was capable of displaying (2&lt;sup&gt;6&lt;/sup&gt;) 64 different colors. It was always my assumption that the EGA could be programmed via palette registers to arbitrarily choose any of the 64 display colors for the 16 memory colors, and that none of the EGA DOS games of the era bothered to reprogram the palette because... shrug? Now I'm starting to think there was a hardware limitation, but I'm trying to piece that together.&lt;/p&gt;&#xA;&lt;p&gt;Based on my research, there were three monitors available in the EGA's heyday:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &lt;strong&gt;Monochrome Display&lt;/strong&gt;, with two pins (video/intensity) allowing for four shades of gray.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;strong&gt;Color Display&lt;/strong&gt;, with four pins (red/green/blue/intensity) allowing for 16 colors.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;strong&gt;Enhanced Color Display&lt;/strong&gt;, with six pins (R/G/B/R-Intensity/G-Intensity/B-Intensity) allowing for 64 colors.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;From what I understand, the EGA card was capable of driving all three monitor types provided the selected video mode ran at a supported frequency. If a Color Display was plugged into the EGA card, the R/G/B pins would line up correctly and the monitor's Intensity pin would read the card's G-Intensity pin. The R-Intensity and B-Intensity card outputs would be unused. (In the opposite case -- an Enhanced Color Display plugged into a CGA card -- the monitor would never receive any R-Intensity or B-Intensity input and, presumably, the image would have an incorrect greenish tinge to it.)&lt;/p&gt;&#xA;&lt;p&gt;It seems (based on discussions like &lt;a href=&quot;https://www.vogons.org/viewtopic.php?t=31882&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;) that the designers of the EGA felt that CGA/Color Display compatibility was important enough to limit the output in 200-line video modes so it displayed the same on both color monitor types. Based on my own experimentation, I see these limitations as well.&lt;/p&gt;&#xA;&lt;p&gt;In EGA mode Dh (320×200, 16 color), when calling BIOS INT 10h, AH=10h, AL=0h with various color values in BH, only four of the six bits seem to have any effect. The table of observed effects vs. expectations is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Bit pos. │ Effect&#xA;─────────┼───────────────────────────────────────────&#xA;.......X │ Blue&#xA;......X. │ Green&#xA;.....X.. │ Red&#xA;....X... │ No Effect (expected Blue Intensity)&#xA;...X.... │ R+G+B Intensity (expected Green Intensity)&#xA;..X..... │ No Effect (expected Red Intensity)&#xA;00...... │ Not Used&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Bits 3 and 5 have absolutely no effect on the image. The end result is that there are only four useful bits that can be set, limiting the output to 16 unique display colors. It appears that no matter how the registers are programmed, the most the programmer can achieve in video mode Dh is a &lt;em&gt;rearrangement&lt;/em&gt; of the 16 RGBI colors, with the remaining 48 possible display colors completely out of reach.&lt;/p&gt;&#xA;&lt;p&gt;Other video modes like 10h (460×350, 16 color) respond to all six bits, so I'm reasonably sure my test programs are correct.&lt;/p&gt;&#xA;&lt;p&gt;Now, the questions:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Was the 16-color display limitation explicitly documented somewhere? The &lt;a href=&quot;http://minuszerodegrees.net/oa/OA%20-%20IBM%20Enhanced%20Graphics%20Adapter.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;EGA documentation&lt;/a&gt;, pgs. 56/59 &lt;em&gt;sort of&lt;/em&gt; hints at this behavior if the reader expects it, but it doesn't directly state &amp;quot;the hardware does something different in 200-line modes&amp;quot;; you just sort of have to know that.&lt;/li&gt;&#xA;&lt;li&gt;Was the behavior implemented in the EGA card (i.e. the R-Intensity and B-Intensity pins were unconditionally tied to the G-Intensity pin output) or was it implemented in the Enhanced Color Display (i.e. the R-Intensity and B-Intensity pins &lt;em&gt;did&lt;/em&gt; output the value the programmer placed in the palette registers, but the monitor ignored it -- sort of how the Color Display had a special case to change &amp;quot;low intensity yellow&amp;quot; into &amp;quot;brown&amp;quot;)?&lt;/li&gt;&#xA;&lt;li&gt;Was there a way the programmer could alter values in the EGA registers to allow any of the &amp;quot;inaccessible&amp;quot; 48 display colors to be used in mode Dh that didn't destabilize the image or fail on certain hardware configurations?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="12139" LastEditorUserId="15334" LastEditDate="2020-08-31T07:32:27.630" LastActivityDate="2020-08-31T07:32:27.630" Title="Was it ever possible to access the full EGA color space in 200-line modes?" Tags="&lt;ibm-pc&gt;&lt;video&gt;&lt;color-display&gt;&lt;bios&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15937" PostTypeId="2" ParentId="15935" CreationDate="2020-08-22T17:21:11.313" Score="7" Body="&lt;ol&gt;&#xA;&lt;li&gt;It is a feature of the monitor. On an IBM EGA display, the 200-line mode is limited to only 4-bit RGBI color mode input, to be pin compatible with the 16 color IBM CGA display. The monitor ignores the remaining 2 color input bits in 200-line mode. Only on 350-line mode, all the 6 color bits are used as RrGgBb color mode input to allow for 64 colors.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;2&amp;amp;3) No the card does not limit this. The EGA card initially sets the palette registers to match the 4-bit output in 200-line modes, but the palette registers can be freely changed by user. There is just little point in this since a standard IBM CGA or EGA monitor also expect 4-bit input in 200-line mode. If the monitor is a non-standard one that allows for 6-bit colors then 64 colors can be used in 200-line mode too.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-08-22T17:21:11.313" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15938" PostTypeId="2" ParentId="9724" CreationDate="2020-08-22T18:12:19.753" Score="20" Body="&lt;p&gt;Since the asker mentioned ‘similar executables’, I think it is fair to point to three applications, all bundled with MS-DOS 6.22:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;FDISK&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/J5sEA.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/J5sEA.gif&quot; alt=&quot;WARNING! Data in the deleted Primary DOS Partition will be lost.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Microsoft Diagnostics&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ueCff.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ueCff.gif&quot; alt=&quot;MSD is examining your system...&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;VSafe&lt;/strong&gt;, an anti-virus TSR licensed by Microsoft from Central Point Software:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/g6i9j.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/g6i9j.gif&quot; alt=&quot;VSafe Warning: Program is trying to write to Hard disk. Do you wish to continue?&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Those are the only examples that I know of. Blinking text was not frequently used perhaps less because it was considered ‘over the top’, but rather because most DOS applications (at least the bundled ones) were written against the terminal-style interrupt 0x21 I/O services, which did not expose capabilities like blinking text that are specific to PC video hardware. As we remember, the early versions of DOS did not only target PC-compatible hardware; relying on such features would harm DOS’s portability. As a bonus, those programs were able to be used with any terminal device that had DOS drivers; one could for example invoke the &lt;code&gt;CTTY AUX&lt;/code&gt; command and later be able to interact with programs like FORMAT via a serial connection. TUI-style programs that accessed video hardware directly or via interrupt 0x10 calls (necessary to output blinking text) did not have this capability. But even the relatively few programs in the latter group usually had no reasonable use for blinking text.&lt;/p&gt;&#xA;&lt;p&gt;One may argue that, for example, MSD shouldn’t count as ‘MS-DOS itself’, because it isn’t part of the ‘core’ MS-DOS; that, however, may be countered by saying that what deserves to be called a ‘core’ program is very much subjective anyway. The asker apparently considers &lt;code&gt;FORMAT.COM&lt;/code&gt; a core utility, but it is very much possible to use DOS without formatting any disks; it isn’t strictly necessary. Not even &lt;code&gt;COMMAND.COM&lt;/code&gt; is technically necessary to use DOS; a &lt;code&gt;SHELL=&lt;/code&gt; setting in &lt;code&gt;CONFIG.SYS&lt;/code&gt; can change the first loaded program to any other executable (say, DOSShell), not even necessarily an actual shell. MSD is located on the second of the three MS-DOS 6.22 installation floppies, and the setup program will install it by default, so it can be considered just as much a part of the operating system as &lt;code&gt;HIMEM.SYS&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-01-16T09:38:29.857" LastActivityDate="2021-01-16T09:38:29.857" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15939" PostTypeId="1" AcceptedAnswerId="15940" CreationDate="2020-08-22T21:47:23.433" Score="24" ViewCount="11203" Body="&lt;p&gt;In the movie &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Licence_to_Kill&quot; rel=&quot;noreferrer&quot;&gt;Licence to Kill&lt;/a&gt;&lt;/em&gt;, James Bond breaks into Felix Leiter's house and gets a CD out from behind a picture. He then sticks a CD in an absolutely massive CD drive. It was about three times the width of the CD. This movie was released in 1989. I've never seen anything like that before. Did such CD drives actually exist?&lt;/p&gt;&#xA;&lt;p&gt;Sorry, I don't have a picture.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastEditorUserId="3290" LastEditDate="2020-08-24T09:39:13.513" LastActivityDate="2020-09-15T12:39:22.153" Title="What is the massive CD drive used in the movie &quot;Licence to Kill&quot;?" Tags="&lt;storage&gt;&lt;cd-rom&gt;" AnswerCount="2" CommentCount="13" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15940" PostTypeId="2" ParentId="15939" CreationDate="2020-08-22T21:58:29.263" Score="36" Body="&lt;p&gt;As far as I remember, this wasn't a CD, but (supposed to be) a &lt;a href=&quot;https://en.wikipedia.org/wiki/LaserDisc&quot; rel=&quot;noreferrer&quot;&gt;Laserdisc&lt;/a&gt;, and he was using a Philips player (the movie contained several Philips machines). Laserdiscs were available in different sizes between 12 cm, which is like a CD and up to 30 cm (&lt;a href=&quot;https://en.wikipedia.org/wiki/LP_record&quot; rel=&quot;noreferrer&quot;&gt;LP size&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;In a technical way, the movie screwed up, as Laserdisks were neither digital (they used an analogue format) nor writable. Except for the &lt;a href=&quot;https://en.wikipedia.org/wiki/LV-ROM&quot; rel=&quot;noreferrer&quot;&gt;LV-ROM&lt;/a&gt; which could carry digital data as well - still not writable.&lt;/p&gt;&#xA;&lt;p&gt;Looking at this picture from &lt;a href=&quot;http://starringthecomputer.com/snapshots/license_to_kill_philips_p3230_2.jpg&quot; rel=&quot;noreferrer&quot;&gt;Starringthecomputer&lt;/a&gt;,&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tu4PH.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tu4PH.jpg&quot; alt=&quot;Enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;it seems plausible that it is a &lt;a href=&quot;https://www.domesday86.com/?page_id=316&quot; rel=&quot;noreferrer&quot;&gt;Philips VP-415&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Uh2eE.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Uh2eE.jpg&quot; alt=&quot;Enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(The same drive was used for the &lt;a href=&quot;https://www.domesday86.com/?page_id=2140&quot; rel=&quot;noreferrer&quot;&gt;Acorn/BBC Domesday Project&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2020-09-15T12:39:22.153" LastActivityDate="2020-09-15T12:39:22.153" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="15941" PostTypeId="2" ParentId="15939" CreationDate="2020-08-22T22:11:27.287" Score="15" Body="&lt;p&gt;That is a Philips VP415 LV-ROM player.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-08-22T22:11:27.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15942" PostTypeId="2" ParentId="4815" CreationDate="2020-08-22T23:43:09.770" Score="1" Body="&lt;p&gt;Try somehow going to their old office somehow? I don't know...&lt;/p&gt;&#xA;&lt;p&gt;However, I do have their address! Try going to Google Maps and search&#xA;&amp;quot;Audubon, PA&amp;quot; and you should see it as &amp;quot;CSG/MOS/GMT&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I hope this helps you somehow!&lt;/p&gt;&#xA;&lt;p&gt;Then:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hF1Y9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hF1Y9.jpg&quot; alt=&quot;Then&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7xw4w.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7xw4w.png&quot; alt=&quot;Now&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Also, you should see this:&#xA;&lt;a href=&quot;https://cumulis.epa.gov/supercpad/SiteProfiles/index.cfm?fuseaction=second.Cleanup&amp;amp;id=0301146#bkground&quot; rel=&quot;nofollow noreferrer&quot;&gt;CSG/MOS&lt;/a&gt;&#xA;There, it says that everything was &amp;quot;Liquified&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;Also, davidmjc on the 6502 forum, said the he made a SVG blueprint of the 6502&#xA;&lt;a href=&quot;https://davidmjc.github.io/6502/cd.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19144" LastEditorUserId="19144" LastEditDate="2020-08-25T22:45:44.950" LastActivityDate="2020-08-25T22:45:44.950" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15943" PostTypeId="2" ParentId="15934" CreationDate="2020-08-23T10:37:32.230" Score="8" Body="&lt;p&gt;&lt;strong&gt;Different BIOS versions have different built-in user interfaces for managing the memory card and playing audio CDs.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There doesn't seem to be any consistency in dates or regions to indicate one style was newer or older, looking at &lt;a href=&quot;https://en.wikipedia.org/wiki/PlayStation_models#Variants&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia's list of PS1 variations&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;From &lt;a href=&quot;https://tcrf.net/PlayStation&quot; rel=&quot;noreferrer&quot;&gt;The Cutting Room Floor's page on the PlayStation&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;System Menu Differences and Similarities&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NZWHg.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NZWHg.png&quot; alt=&quot;ps1_1&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The menu on the SCPH-10x model series uses simple icons with text above them. On the other hand, the menu on the SCPH-1002, DTL-H3002 and SCPH-5502 models has a similar background, but with different icons and no text.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xz1G7.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xz1G7.png&quot; alt=&quot;ps1_2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The menus have briefly changed their gradient colors for button plates (such as the SCPH-5501, and SCPH-7001 firmwares). Some of the cursors have changed their colors as well.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2y2qp.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2y2qp.png&quot; alt=&quot;ps1_3&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Ditto. The screen was scaled vertically in the SCPH-7502 firmware to take advantage of the higher resolution.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Virtual Environments&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/qkNDU.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qkNDU.png&quot; alt=&quot;ps1_4&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Look pretty standard for a CD player built into a game console, doesn't it?   Now this is more like it. No other CD player in a game console has ever done this before.&#xA;The CD Player on the PS one model has a new addition where the player can select from a list of presets that change the way the music sounds so as to emulate the specified environment with the PlayStation's built-in reverberation processor. Seeing as no other CD player at the time had a reverberation processor, this addition was considered to be mind-blowing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="19150" LastActivityDate="2020-08-23T10:37:32.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15944" PostTypeId="2" ParentId="8975" CreationDate="2020-08-23T16:17:52.780" Score="2" Body="&lt;p&gt;Although not a direct answer to the question, I believe this is still worth pointing out:&lt;/p&gt;&#xA;&lt;p&gt;Atari BASIC used BCD for its FP implementation. It was free from the sorts of errors being outlined above. I have found several other BCD implementations, but nothing &amp;quot;mainstream&amp;quot; to this degree.&lt;/p&gt;&#xA;&lt;p&gt;The flip side is that BCD is theoretically slightly slower, you have to be careful turning the BCD mode on and off, and you get slightly fewer digits per 40-bit store.&lt;/p&gt;&#xA;&lt;p&gt;On top of that, the Atari implementation was notoriously slow, but that was not specifically because it was BCD, it was just bad.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-08-23T16:17:52.780" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15945" PostTypeId="1" CreationDate="2020-08-23T17:40:14.567" Score="20" ViewCount="4964" Body="&lt;p&gt;All the 8 bit home computers I'm aware of, had BASIC in their ROMs. A notable exception was Jupiter Ace, a british home computer, which used Forth.&lt;/p&gt;&#xA;&lt;p&gt;Were there any other 8 bit home computers that came with other languages in their ROMs? Or perhaps without a full programming language at all, something like a rudimentary os.&lt;/p&gt;&#xA;&lt;p&gt;I'm not asking for other languages availability in general on these systems, but only to the embedded language in their ROM chips.&lt;/p&gt;&#xA;" OwnerUserId="8057" LastEditorUserId="8057" LastEditDate="2020-08-25T15:43:17.807" LastActivityDate="2020-08-30T19:52:57.573" Title="8-bit home computers without BASIC" Tags="&lt;basic&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="17" CommentCount="12" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15946" PostTypeId="2" ParentId="15945" CreationDate="2020-08-23T18:03:18.627" Score="20" Body="&lt;p&gt;&lt;em&gt;(Please see as well other fine answers for more computers fitting the list)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I guess we can put them in four categories (in descending order of application):&lt;/p&gt;&#xA;&lt;h3&gt;Machines with Different Language in ROM&lt;/h3&gt;&#xA;&lt;p&gt;The early models of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Electronika_BK#Electronika_BK-0010&quot; rel=&quot;noreferrer&quot;&gt;Soviet BK-0010&lt;/a&gt; series had FOCAL in ROM. BASIC was available as an add-on module. Later models starting from BK-0010.01 already had BASIC in ROM.&lt;/p&gt;&#xA;&lt;h3&gt;Clean Computers&lt;/h3&gt;&#xA;&lt;p&gt;And then there would be the classic &lt;a href=&quot;https://en.wikipedia.org/wiki/Sharp_MZ&quot; rel=&quot;noreferrer&quot;&gt;Sharp MZ-80 series&lt;/a&gt; with no language in ROM. Clean computers from the start, BASIC or any other language had to be loaded from Cassette. Quite successful around the world.&lt;/p&gt;&#xA;&lt;h3&gt;With Separate but Included Language ROM&lt;/h3&gt;&#xA;&lt;p&gt;Similar but less fitting are machines that had no language fix build in, but supplied (usually) BASIC separate on a (ROM-) module which was &lt;em&gt;always&lt;/em&gt; included when buying the unit. After all, everyone would have had it plugged in ... at least until switching for something more sophisticated. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Exidy_Sorcerer&quot; rel=&quot;noreferrer&quot;&gt;Exidy Sorcerer&lt;/a&gt; of 1978 might be the earliest example. An even more prominent example are Atari 400/800 (&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15948/6659&quot;&gt;as mentioned&lt;/a&gt;) of 1979.&lt;/p&gt;&#xA;&lt;h3&gt;Systems From a Time Before Language Were Included&lt;/h3&gt;&#xA;&lt;p&gt;The same, of course, goes for many very early systems, from single boarders to S-100, including hobbyist systems like Heathkit H8 or the Apple 1. Remember MS' first BASIC for the Altair was delivered on paper tape or cassette. But then again, these are so early, that the term 'home computer' may not really apply.&lt;/p&gt;&#xA;&lt;h3&gt;Close Runner Ups&lt;/h3&gt;&#xA;&lt;p&gt;Also, while not really an 8 bit home computer, the Newton had it's &lt;a href=&quot;https://en.wikipedia.org/wiki/NewtonScript&quot; rel=&quot;noreferrer&quot;&gt;NewtonScript&lt;/a&gt; interpreter in ROM.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-24T07:54:57.847" LastActivityDate="2020-08-24T07:54:57.847" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="15947" PostTypeId="2" ParentId="15945" CreationDate="2020-08-23T18:53:14.273" Score="5" Body="&lt;p&gt;Likely too many to list.&lt;/p&gt;&#xA;&lt;p&gt;However, &lt;a href=&quot;https://en.wikipedia.org/wiki/PMD_85&quot; rel=&quot;noreferrer&quot;&gt;PMD-85&lt;/a&gt; is notable and borderline because it included a BASIC on a detachable ROM module. By default, it started into a monitor (with tape loading routines etc.); there were other ROM modules produced (with Pascal, LOGO, IIRC also KAREL). But they were almost exclusively used with the BASIC module.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2020-08-23T18:53:14.273" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15948" PostTypeId="2" ParentId="15945" CreationDate="2020-08-23T19:08:36.540" Score="26" Body="&lt;p&gt;One example of popular 8-bit computers without BASIC in ROM is the first three &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_8-bit_family&quot; rel=&quot;noreferrer&quot;&gt;Atari 8-bit computers&lt;/a&gt;, the 400, 800, and 1200XL, which didn’t have BASIC built-in but on a separate cartridge.&lt;/p&gt;&#xA;&lt;p&gt;Their predecessor, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_2600&quot; rel=&quot;noreferrer&quot;&gt;Atari Video Computer System&lt;/a&gt;, also had a &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC_Programming&quot; rel=&quot;noreferrer&quot;&gt;BASIC Programming&lt;/a&gt; cartridge, written by &lt;a href=&quot;https://en.wikipedia.org/wiki/Warren_Robinett&quot; rel=&quot;noreferrer&quot;&gt;Warren Robinett&lt;/a&gt;, but it wasn’t supplied with the system (it was released in 1979) and required two CX50 controllers. (Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/340/supercat&quot;&gt;supercat&lt;/a&gt; for the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15945/8-bit-home-computers-without-basic#comment53475_15948&quot;&gt;reminder&lt;/a&gt;!)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-08-24T21:16:48.883" LastActivityDate="2020-08-24T21:16:48.883" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="15949" PostTypeId="2" ParentId="15945" CreationDate="2020-08-23T20:24:33.617" Score="5" Body="&lt;p&gt;The ELAN Enterprise didn't have BASIC built-in. Its IS BASIC was supplied on a cartridge (that was, admittedly, part of the base pack). But you could just as well use any other language. It's &amp;quot;main application&amp;quot; was WP - A simple editor/word processor.&lt;/p&gt;&#xA;&lt;p&gt;If you consider the Cambridge Z88 a home computer, its &amp;quot;main OS&amp;quot; was definitely not (BBC) BASIC, that was just one application amongst others. OS control was through the GUI.&lt;/p&gt;&#xA;&lt;p&gt;The Coleco Adam was basically (sic) a ColecoVision plus Expansion Module #3 - the base machine was a games console, that expanded into the Adam home computer (includeing BASIC) using a set of add-ons.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="5199" LastEditDate="2020-08-24T06:44:28.090" LastActivityDate="2020-08-24T06:44:28.090" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15950" PostTypeId="2" ParentId="15945" CreationDate="2020-08-23T20:44:20.833" Score="15" Body="&lt;p&gt;The French company Micronique had a few models that came with Forth instead of BASIC, like the Hector HRX and Hector MX.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?c=142&amp;amp;st=1&quot; rel=&quot;noreferrer&quot;&gt;https://www.old-computers.com/museum/computer.asp?c=142&amp;amp;st=1&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2020-08-23T20:44:20.833" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15951" PostTypeId="2" ParentId="15945" CreationDate="2020-08-23T21:32:24.177" Score="2" Body="&lt;p&gt;The TRS-80 Model 4P was based on a 4-MHz Z-80a and had no BASIC in ROM.&lt;/p&gt;&#xA;&lt;p&gt;The Apple 1 was shipped with BASIC on cassette.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2020-08-23T23:36:14.803" LastActivityDate="2020-08-23T23:36:14.803" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15952" PostTypeId="2" ParentId="15945" CreationDate="2020-08-23T21:36:01.203" Score="7" Body="&lt;p&gt;Some more Soviet home computers that lacked BASIC in their ROMs:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Vector-06C&quot; rel=&quot;noreferrer&quot;&gt;Vector-06C&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%90%D0%BF%D0%BE%D0%B3%D0%B5%D0%B9_%D0%91%D0%9A-01&quot; rel=&quot;noreferrer&quot;&gt;Apogey BK-01&lt;/a&gt; (wiki is only available in Russian and it is not very clear about whether there were built-in BASIC, but other sources say there weren't)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Radio-86RK&quot; rel=&quot;noreferrer&quot;&gt;Radio-86RK&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Specialist_(computer)&quot; rel=&quot;noreferrer&quot;&gt;Specialist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Orion-128&quot; rel=&quot;noreferrer&quot;&gt;Orion-128&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%88%D0%B0&quot; rel=&quot;noreferrer&quot;&gt;Microsha&lt;/a&gt; (only Russian, clear statement that the BASIC was loadable from the tape)&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-08-23T21:36:01.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15953" PostTypeId="2" ParentId="15945" CreationDate="2020-08-23T22:04:27.660" Score="6" Body="&lt;p&gt;I'm not sure that the IBM5100 could really be considered a &amp;quot;home computer&amp;quot;, and I believe that it was not an 8-bit computer (it was, as I recall, based on a cut-down version of the 360), but it might pass today's &amp;quot;sniff test&amp;quot; for home computers, and came in two versions: The 5100B did in fact have BASIC in ROM (which IBM called ROS), but the 5100A came with APL rather than BASIC in ROS. (The follow-on 5110 had both, user-selectable via a front-panel switch.)&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2020-08-23T22:04:27.660" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15954" PostTypeId="2" ParentId="15945" CreationDate="2020-08-24T02:44:46.080" Score="7" Body="&lt;p&gt;I had a &lt;a href=&quot;https://en.wikipedia.org/wiki/Coleco_Adam&quot; rel=&quot;nofollow noreferrer&quot;&gt;Colecovision Adam&lt;/a&gt; computer back in the day. A very odd feature of that system was that the power supply was actually in the printer.  It came with a word processor in its ROM rather than a programming language.&lt;/p&gt;&#xA;&lt;p&gt;I remember using all my lawn mowing money to buy SmartBASIC and SmartLOGO on cassette tape along with a 300-baud modem for it.&lt;/p&gt;&#xA;" OwnerUserId="4565" LastEditorUserId="4565" LastEditDate="2020-08-24T19:02:09.490" LastActivityDate="2020-08-24T19:02:09.490" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15955" PostTypeId="1" AcceptedAnswerId="15957" CreationDate="2020-08-24T06:55:34.307" Score="17" ViewCount="2108" Body="&lt;p&gt;I have personally always been of the opinion that it would make sense for the default integer type to be unsigned, though it's been a long time since that would've been a live issue for debate; C in the 1970s was already defaulting to signed integers, nor was it the first language to do so.&lt;/p&gt;&#xA;&lt;p&gt;I'm interested in exactly when, why and how the decision was first made. In assembly language, there isn't really a default; you always specify signed versus unsigned. So we should look at high-level languages (using here the classical definition of high-level as 'higher level than assembly'). The first significantly influential high-level language was Fortran. Modern Fortran standards mandate that compilers shall treat integer variables as signed unless otherwise specified.&lt;/p&gt;&#xA;&lt;p&gt;When did Fortran decide this? Was the decision already made in the earliest Fortran compilers? Did any compilers on any machines, treat integers as unsigned?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-08-25T22:22:53.697" Title="When did FORTRAN decide on signed integers?" Tags="&lt;history&gt;&lt;programming&gt;&lt;fortran&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15956" PostTypeId="2" ParentId="15945" CreationDate="2020-08-24T07:13:20.660" Score="3" Body="&lt;p&gt;The &lt;strong&gt;Amstrad PCW&lt;/strong&gt; range begun in 1985 were all 8-bit (except for the final model) and didn't have BASIC in ROM.&lt;/p&gt;&#xA;&lt;p&gt;Although intended primarily as &amp;quot;home office&amp;quot; machines, they were still essentially home computers.&lt;/p&gt;&#xA;&lt;p&gt;( &lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?c=190&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.old-computers.com/museum/computer.asp?c=190&lt;/a&gt; : &amp;quot;ROM: No ROM chip.&amp;quot;)&lt;/p&gt;&#xA;" OwnerUserId="19151" LastActivityDate="2020-08-24T07:13:20.660" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15957" PostTypeId="2" ParentId="15955" CreationDate="2020-08-24T08:24:00.763" Score="21" Body="&lt;p&gt;FORTRAN was originally developed for the IBM 704 computer, which stored integers in sign-and-magnitude format.  In the &lt;a href=&quot;https://archive.computerhistory.org/resources/text/Fortran/102649787.05.01.acc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;original documentation,&lt;/a&gt; it supports fixed-point variables, which used the machine’s native format, floating-point variables,  and unsigned fixed-point &lt;strong&gt;constants&lt;/strong&gt;, which were intended for line numbers and subscripts.  These would be translated into offsets that fit into the 704’s index registers.  Other than indexing by those three registers, &lt;a href=&quot;http://bitsavers.org/pdf/ibm/704/24-6661-2_704_Manual_1955.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the 704 had only a small handful of instruction for unsigned integer arithmetic,&lt;/a&gt; &lt;code&gt;ACY&lt;/code&gt; and &lt;code&gt;CAL&lt;/code&gt; (which could add a logical word to the accumulator).  It was also possible to do multiplication by constants through a combination of shifts and additions, which was enough to compute the address of an array element, but not to perform other arithmetic.&lt;/p&gt;&#xA;&lt;p&gt;John Backus &lt;a href=&quot;http://www.softwarepreservation.org/projects/FORTRAN/paper/p25-backus.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;wrote later,&lt;/a&gt; “We certainly had no idea that languages almost identical to the one we were working on would be used for more than one IBM computer, not to mention those of other manufacturers.”&lt;/p&gt;&#xA;&lt;p&gt;There was no serious consideration of unsigned integer variables, because the architecture FORTRAN was designed to run on had no such native type.  The decision was made for that technical reason.  Considerations about how useful one would or would not have been for computational physics were not historically important to it.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2020-08-25T22:22:53.697" LastActivityDate="2020-08-25T22:22:53.697" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15958" PostTypeId="2" ParentId="15945" CreationDate="2020-08-24T10:11:08.550" Score="2" Body="&lt;p&gt;The Amstrad PCW was clearly sold as a home word processor, its printer was not good enough for most office use.   It did not have BASIC in ROM, I can't recall if even had basic on an included disk.&lt;/p&gt;&#xA;&lt;p&gt;It used a Z80 cpu so was 8 but, but had bank switch ram.&lt;/p&gt;&#xA;" OwnerUserId="538" LastActivityDate="2020-08-24T10:11:08.550" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15959" PostTypeId="1" CreationDate="2020-08-24T12:02:35.577" Score="3" ViewCount="292" Body="&lt;p&gt;&lt;strong&gt;Background:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Multimedia/Internet keys are additional function keys on PC keyboards that either invoke specific applications like browser, e-mail, media player, etc. or invoked certain function for these applications. They are to be distinguished from ordinary function keys as they are labelled with specific tasks like opening a URL, changing sound volume or alike.&lt;/p&gt;&#xA;&lt;p&gt;They did show up in great numbers in late 1998 and brought a certain hype, which faded fast in the early 2000s. Here's an especially 'pretty' unit:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DpKoZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DpKoZ.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Not only featuring multimedia keys and many labels, but as well made with a case copying the &lt;a href=&quot;https://en.wikipedia.org/wiki/IMac_G3#Design&quot; rel=&quot;nofollow noreferrer&quot;&gt;translucent style made popular by the G3 IMac&lt;/a&gt; ... another hype of the late 1998,&lt;/p&gt;&#xA;&lt;p&gt;Technical they were simply additional scancodes handled by Windows (or background in general) to start either application/bring it to foreground or be forwarded to the fitting application as messages to invoke functions.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; Which were the first keyboards to include dedicated keys to invoke an internet browser and/or similar functions.&lt;/p&gt;&#xA;&lt;p&gt;So far everything I know points to Microsoft (see &amp;quot;Answer&amp;quot; below), but was there anyone going that way before or was it really MS' hardware department that started all of this?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Please Note:&lt;/strong&gt; This question is about keyboards (PS/2, USB) for IBM PC compatible machines and Windows and focuses on browser invocation. I don't mind additional information, but only if they fit the basic idea, so Commodore's Plus4 should not apply.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-25T09:50:01.430" LastActivityDate="2020-08-25T12:35:40.197" Title="When and Which (PC) Keyboards Introduced Browser and/or Multimedia Keys to Windows" Tags="&lt;keyboards&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15960" PostTypeId="2" ParentId="15959" CreationDate="2020-08-24T12:02:35.577" Score="6" Body="&lt;h3&gt;Not an Answer, but my knowledge so far:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Microsoft extended the scancodes with the 1994 Microsoft natural Keyboard in 1994 to include Windows and Menue (application) keys.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With the PC97 guidelines these became a requirement for all (PC97-) standard configurations (See the  p.182 in &lt;a href=&quot;http://tech-insider.org/windows/research/acrobat/970711/t_14_io_97.pdf&quot; rel=&quot;noreferrer&quot;&gt;Chapter 14 of the PC 97 Hardware Design Guide&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;PC97 included as well a definition for an &lt;em&gt;Entertainment PC97&lt;/em&gt; which mentions media keys to be added to an (optional) remote (See p.189 of the above document).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With &lt;a href=&quot;http://tech-insider.org/windows/research/acrobat/970711/t_14_io_97.pdf&quot; rel=&quot;noreferrer&quot;&gt;Windows 98&lt;/a&gt; these scancodes were supported by default.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;During 1998 essentially all manufacturers added 'Multimedia' or 'Internet' Keyboards.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Microsoft with the Microsoft Internet Keyboard (they also took it over the edge with their Office Keyboard)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;IBM had the &lt;a href=&quot;https://www-03.ibm.com/press/us/en/pressrelease/2574.wss&quot; rel=&quot;noreferrer&quot;&gt;Rapid Access Keyboard&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Logitech had their &lt;a href=&quot;https://docs.rs-online.com/92d9/0900766b8002c7d9.pdf&quot; rel=&quot;noreferrer&quot;&gt;Internet Keyboard&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compaq's Easy Internet Keyboard even went all the way to include a specific Altavista key and another one to call Yahoos &amp;quot;What's cool&amp;quot;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I do not know if there was already support in Windows 95, but Logitech states that their keyboard supports the browser keys with Win95&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-08-24T12:02:35.577" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="15961" PostTypeId="2" ParentId="15945" CreationDate="2020-08-24T14:04:14.900" Score="6" Body="&lt;p&gt;The &lt;strong&gt;Nascom 1&lt;/strong&gt; didn't have &lt;em&gt;any&lt;/em&gt; high level languages. Its successor the Nascom 2 came with BASIC however.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Nascom 1 and 2 were single-board computer kits issued in the&#xA;United Kingdom in 1977 and 1979, respectively, based on the Zilog Z80&#xA;and including a keyboard and video interface, a serial port that could&#xA;be used to store data on a tape cassette using the Kansas City&#xA;standard, and two 8-bit parallel ports. At that time, including a full&#xA;keyboard and video display interface was uncommon, as most&#xA;microcomputer kits were then delivered with only a hexadecimal keypad&#xA;and seven-segment display. To minimize cost, the buyer had to assemble&#xA;a Nascom by hand-soldering about 3,000 joints on the single circuit&#xA;board. &lt;a href=&quot;https://en.wikipedia.org/wiki/Nascom_(computer_kit)&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Nascom_(computer_kit)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I had one and remember programming Turing machines in assembler (or was it machine code - can't remember). I hand-made various dongles for it including a &amp;quot;slow down&amp;quot; clock and a hardware random number generator.&lt;/p&gt;&#xA;&lt;p&gt;I cheated and bought the ready-soldered bare board (no case), plus keyboard  to avoid all the soldering.&lt;/p&gt;&#xA;" OwnerUserId="18612" LastActivityDate="2020-08-24T14:04:14.900" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15962" PostTypeId="2" ParentId="15945" CreationDate="2020-08-24T17:57:33.550" Score="2" Body="&lt;p&gt;The MCM/70 by Micro Computing Machines came with rom APL.&#xA;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/MCM/70&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.m.wikipedia.org/wiki/MCM/70&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19163" LastActivityDate="2020-08-24T17:57:33.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15963" PostTypeId="1" AcceptedAnswerId="15965" CreationDate="2020-08-25T01:34:01.727" Score="8" ViewCount="1176" Body="&lt;p&gt;FORTRAN had an 'assigned goto' statement. Firstly, a statement number is assigned to a variable:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ASSIGN 42 TO L&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Subsequently, one can obey&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;GOTO L&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which (given the preceding ASSIGN) would transfer control to the statement labelled 42.&lt;/p&gt;&#xA;&lt;p&gt;But in actual fact, the assigned goto had to be given a list of statement numbers:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;GOTO L, (17, 23, 42, 63, 99)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Why was that needed or chosen?&lt;/p&gt;&#xA;&lt;p&gt;I would suppose that the affect of ASSIGN is to set the variable to the actual address corresponding to the labelled statement.  That being so, the assigned goto is just an indirect jump through the variable.  What purpose does the statement-label list serve?&lt;/p&gt;&#xA;&lt;p&gt;Compare with the computed-goto, which is somewhat like the Algol &lt;strong&gt;switch&lt;/strong&gt; statement: given an integer &lt;em&gt;N&lt;/em&gt;, jump to the &lt;em&gt;N&lt;/em&gt;'th label.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; GOTO (17, 23, 42, 63, 99), N&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;For this case it's clear the label list is needed. But not in the assigned-goto case.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-01-29T09:31:09.507" Title="Why did the assigned goto statement in Fortran need a label list?" Tags="&lt;history&gt;&lt;fortran&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15964" PostTypeId="2" ParentId="15955" CreationDate="2020-08-25T01:47:53.747" Score="3" Body="&lt;p&gt;Fortran was developed with scientific computing in mind. Negative values clearly occur quite frequently when doing scientific computing or, for that matter, in many other problem domains that the developers of the language might have considered.&lt;/p&gt;&#xA;&lt;p&gt;Supporting unsigned integral would have had some value but the language would have still had to support signed integral types. Since almost all interesting unsigned values fit comfortably within a signed integer variable, they may have felt that they were able to support their target audience (scientific computing) while also providing a reasonable level of support for those who really did want to work with unsigned values. Alternatively, they may have simply decided to focus on signed arithmetic without making any real effort to consider what it might mean to support unsigned arithmetic simply because their target audience would almost all need a language that supported signed values.&lt;/p&gt;&#xA;" OwnerUserId="19166" LastActivityDate="2020-08-25T01:47:53.747" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15965" PostTypeId="2" ParentId="15963" CreationDate="2020-08-25T03:38:52.623" Score="16" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;That being so, the assigned goto is just an indirect jump through the variable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Right.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But in actual fact, the assigned goto had to be given a list of statement numbers&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, it had not. The list was always an optional one. If not given, the GOTO was simply executed without any further check.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What purpose does the statement-label list serve?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's a run time check for valid targets.&lt;/p&gt;&#xA;&lt;p&gt;This is why literature often calls the variants as 'Unguarded' (without a list) or 'Guarded' (with a list) Assigned GOTO.&lt;/p&gt;&#xA;&lt;p&gt;It's important to keep in mind that FORTRAN was missing next to all control structures we take for granted today. FORTRAN &lt;em&gt;is&lt;/em&gt; the prototypical spaghetti code and Assigned GOTO was &lt;em&gt;the&lt;/em&gt; way to create complex structures with jump targets hidden in variables.&lt;/p&gt;&#xA;&lt;p&gt;Adding a list to check against was a way to make certain loop constructions spaghetti code manageable (kind of) as well as to catch pointer errors.  Not really the best way for either, but these were the beginnings of HLL, one had to start somewhere.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail:&lt;/h2&gt;&#xA;&lt;p&gt;Using assign basically turns an integer into a pointer and loads it with the address of the label, not its numeric value.&lt;/p&gt;&#xA;&lt;p&gt;An Unguarded Assigned GOTO takes the pointer value of the integer and jumps. With a list added it checks if the Integer holds the address of any single label within the list and only jumps when it's among them.&lt;/p&gt;&#xA;&lt;p&gt;Think of forming a loop with a various cases within, like a state machine. Remember, there was no switch/case like statement in FORTRAN, so it had to be done some other way. And assigned GOTO was the way to go. At the end of each state check the next state was loaded into an integer but control was returned (via unconditional GOTO) to the main loop, which picked the next data and switched accordingly.&lt;/p&gt;&#xA;&lt;p&gt;All of this ends up with a vast number of targets. In addition storage, and thus variables, was limited, so variables get reused. Using a single variable (like IGO) for all/most Assigned GOTO in a program was quite common. So this variable might contain some value from outside the loop constructions one was in. Quite a good chance to ass programming errors ending up at a &lt;code&gt;GOTO IGO&lt;/code&gt; with a leftover target from some prior construct.&lt;/p&gt;&#xA;&lt;p&gt;Being able to name a list of all (at the point) valid targets seemed like a good idea to catch that and make sure all works as intended.&lt;/p&gt;&#xA;&lt;p&gt;At that point it's once again important that we talk about a time when everything was barely invented, machines were small and compilers straightforward without much ability or even chance for checking. Not to mention that FORTRAN was on purpose kept simple to have users adopt it. Maybe hard to believe, but scientists were hardcore Assembly users at that time. So many concepts were tried, some of them might look strange from today's orderly landscape.&lt;/p&gt;&#xA;&lt;p&gt;In addition, FORTRAN, as simple as it may seem today, was considered by many users as bloat. So making it work as straightforward as possible, so users can imagine the Assembly code while writing FORTRAN, was mandatory. There is a very nice &lt;a href=&quot;https://ethw.org/Oral-History:Frances_%22Fran%22_Allen&quot; rel=&quot;noreferrer&quot;&gt;interview with Frances Allen&lt;/a&gt; talking about this time.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Now, in a perfect world it could end here, but the real world also included implementation specific effects. The FORTRAN description did leave up a few grey areas:&lt;/p&gt;&#xA;&lt;p&gt;For one it didn't define if and how an integer used to hold an integer is prevented against being used as target, nor if and how one holding a target is protected against being used as integer.&lt;/p&gt;&#xA;&lt;p&gt;Using a Guarded Assigned GOTO one way to protect against such errors, by checking the values against legal values.&lt;/p&gt;&#xA;&lt;p&gt;Second, it wasn't stated what happens if the integer is holding a target that is not within the list. Some implementation simply dropped to the next statement, while others threw an exception ending the program - which might be the most safe way.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Well, and some ignored the list at all.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Spaghetti code, implementation dependant behaviour, added, changed or missing instructions - everything we love and hate about BASIC was already present in FORTRAN, but on a much worse level.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;With the introduction of additional loop control (WHILE, EXIT, etc.) in many FORTRAN-77 compilers (aka &lt;a href=&quot;https://en.wikipedia.org/wiki/Fortran#Transition_to_ANSI_Standard_Fortran&quot; rel=&quot;noreferrer&quot;&gt;FORTRAN-78&lt;/a&gt;) the use of Assigned GOTO as well as computed GOTO or alternate returns became obsolete and finally removed in FORTRAN-90.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-27T08:40:17.470" LastActivityDate="2020-08-27T08:40:17.470" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="15966" PostTypeId="2" ParentId="15959" CreationDate="2020-08-25T08:32:28.533" Score="2" Body="&lt;p&gt;I'm trying to tie that to Keyboards produced (or rather, branded) by Microsoft themselves, as I would assume the keyboard and OS guys in MS talk to each other:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &amp;quot;Microsoft Natural Keyboard&amp;quot; (1994) did introduce the new &lt;em&gt;Menu&lt;/em&gt;&#xA;and &lt;em&gt;Windows&lt;/em&gt; keys - It didn't have any multimedia keys.&lt;/li&gt;&#xA;&lt;li&gt;The next&#xA;iteration, the &amp;quot;Microsoft Natural Keyboard Elite&amp;quot; (1998) messed up&#xA;the cursor keys and the complete navigational block, but didn't have&#xA;any multimedia keys.&lt;/li&gt;&#xA;&lt;li&gt;The &amp;quot;Microsoft Natural Keyboard Pro&amp;quot; (1999) was&#xA;the first to introduce a row of 16 additional blue multimedia and&#xA;power management keys. The fact that it needed specific drivers&#xA;(&amp;quot;Intellitype&amp;quot;) to support these keys on Windows before Vista hints&#xA;that these scancodes were not considered in earlier systems.&lt;/li&gt;&#xA;&lt;li&gt;The&#xA;&amp;quot;Microsoft Natural Multimedia Keyboard&amp;quot; (2002) got rid of the row of&#xA;nondescript blue buttons for multimedia functions and replaced them&#xA;with a new arrangement of keys that had icons on them.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="780" LastActivityDate="2020-08-25T08:32:28.533" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15967" PostTypeId="2" ParentId="15945" CreationDate="2020-08-25T09:42:22.333" Score="2" Body="&lt;p&gt;The Nintendo Family Computer (Famicom, also known as the Nintendo Entertainment System in the West) did not come with BASIC in ROM. In fact it didn't come with a keyboard, you had you buy a bundle that included the keyboard and BASIC cartridge.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-08-25T09:42:22.333" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15968" PostTypeId="2" ParentId="15945" CreationDate="2020-08-25T09:51:26.180" Score="1" Body="&lt;p&gt;I used this kind of computer that had no basic. CHIP8 language was available.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.hobbylabs.org/oscom_nano.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.hobbylabs.org/oscom_nano.htm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19170" LastActivityDate="2020-08-25T09:51:26.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15969" PostTypeId="2" ParentId="15959" CreationDate="2020-08-25T12:17:31.887" Score="4" Body="&lt;p&gt;On the hardware side of things, I suspect that the first models were the Microsoft Internet Keyboard and the Logitech Internet Keyboard, both launched (as far as I can tell) in 1999. &lt;a href=&quot;https://www.win.tue.nl/%7Eaeb/linux/kbd/scancodes-6.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Andries Brouwer’s list of scancodes&lt;/a&gt; provides a comprehensive list of keyboards implementing multimedia scancodes, but it’s not easy to determine launch dates for all of them...&lt;/p&gt;&#xA;&lt;p&gt;On the software side of things, the story is quite complex. Support for early multimedia keyboards, and even pre-Windows 95 support for “Windows 95” keyboards (with the Windows and “application” keys), was implemented in add-on device drivers before it became part of device drivers included with the operating system itself.&lt;/p&gt;&#xA;&lt;p&gt;In Microsoft’s case, this is IntelliType, which supported versions of Windows going back to 3.1 and NT, and is mentioned in &lt;a href=&quot;http://ftpmirror.your.org/pub/misc/ftp.microsoft.com/peropsys/Win_News/archive/Docs/newkey.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;New Key Support for Microsoft® Windows® Operating Systems and Applications&lt;/em&gt;&lt;/a&gt;. Pre-95 support is quite comprehensive: the Windows key brings up the task manager, and with IntelliType 1.1 (released to support 95, but still supporting older versions of Windows), the application key brings up the context menu, if any (by simulating a right-button click!). IntelliType had provisions for OEM licensing (by other keyboard manufacturers), and for multimedia-style shortcuts, but using Windows + number keys:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Ten Windows logo keys combinations have been reserved for OEM use.  These keys can be used by OEMs to provide keyboard hotkey controls for Speaker Volume, Monitor/LCD Brightness or Contrast, Password or other value added functions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Logitech and Compaq had similar drivers (Logitech iTouch, and Compaq Easy Access).&lt;/p&gt;&#xA;&lt;p&gt;Operating system support for client applications in Windows was provided in Windows Me and Windows 2000, with the addition of a number of &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes&quot; rel=&quot;nofollow noreferrer&quot;&gt;virtual key codes&lt;/a&gt; and the &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-appcommand&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;WM_APPCOMMAND&lt;/code&gt;&lt;/a&gt; window message. This allows various “extra” commands to be handled in applications, and unsurprisingly, ended up determining the keys available on multimedia keyboards: it covers audio equalisation and volume changes, email handling (in detail!), browser navigation, etc. This probably came from remote-control support, and resulted in keyboards in the early 2000s with a large remote-control’s worth of extra keys, regardless of their actual usefulness (who needs extra copy/cut/paste keys on a keyboard?). Thanks to Windows’ message-handling architecture, the messages can be generated by a variety of sources, including (with device driver support) keyboards, remote controls, extra buttons on mice, etc. IntelliType can detect applications which support this message, and will adjust its behaviour accordingly (&lt;em&gt;e.g.&lt;/em&gt; in “media select” mode).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-08-25T12:35:40.197" LastActivityDate="2020-08-25T12:35:40.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15970" PostTypeId="1" AcceptedAnswerId="15971" CreationDate="2020-08-25T14:43:44.183" Score="17" ViewCount="4485" Body="&lt;p&gt;I have an old computer from around 1995. It's from a computer brand that I've never heard of called Samanna Compu-Solutions. I am unsure of the model. The problem is, I only have one PS/2 port to work with. Since the computer is from 1995, there are no USB ports. The PS/2 port is labeled as a mouse port, and I've tried a keyboard on there to no avail. My question is: why isn't there a keyboard port? Without a keyboard, there's no way to get past the BIOS.&lt;/p&gt;&#xA;&lt;p&gt;I'm also getting a CMOS checksum error. The computer is using the Award Modular BIOS v4.51PG. It has 64MB of RAM, and a Pentium MMX 233MHz CPU.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Keyboard error or no keyboard present &lt;br&gt;&#xA;CMOS checksum error - Defaults loaded &lt;br&gt;&#xA;&lt;br&gt;&#xA;Press F1 to continue, DEL to enter SETUP&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Without a keyboard, I can't press F1 to continue, or press DEL to enter the setup.&lt;/p&gt;&#xA;&lt;p&gt;I have tried:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Clearing the CMOS/removing the motherboard battery&lt;/li&gt;&#xA;&lt;li&gt;Unplugging the keyboard and plugging it back in (while the computer is off, I've heard PS/2 is not hot swappable)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Basically, what I'm trying to solve is how I can use a keyboard and mouse at the same time.&#xA;Any help would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="19175" LastActivityDate="2020-08-26T09:17:37.953" Title="Why is there only one PS/2 port on my computer?" Tags="&lt;keyboards&gt;&lt;bios&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15971" PostTypeId="2" ParentId="15970" CreationDate="2020-08-25T14:48:58.887" Score="49" Body="&lt;p&gt;Given your computer’s vintage, I’m going to guess that the reason there’s a single PS/2 port, intended for use with a mouse, is that its keyboard port is a &lt;a href=&quot;https://en.wikipedia.org/wiki/DIN_connector&quot; rel=&quot;noreferrer&quot;&gt;5-pin DIN connector&lt;/a&gt; as used in the IBM PC AT and its descendants. This was quite a common setup in the mid- to late nineties — most socket 7 motherboards were AT boards and included these two ports (I still have a Pentium computer with this configuration), and some post-socket-7 boards continued the trend. The 5-pin DIN connector disappeared with the switch to ATX, but &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/6782/79&quot;&gt;that ended up taking quite a long time&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Here’s a photo illustrating the two ports, from &lt;a href=&quot;http://philipstorr.id.au/pcbook/showtell/show1.htm&quot; rel=&quot;noreferrer&quot;&gt;Phil Storrs PC Hardware book&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XZfBU.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XZfBU.jpg&quot; alt=&quot;A 5-pin DIN connector next to a PS/2 connector&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This isn’t strictly AT-compliant, a more common configuration was to have the PS/2 port on a bracket or another cut-out in the back of the case.&lt;/p&gt;&#xA;&lt;p&gt;If your computer does have such a DIN port, you can use a PS/2-to-DIN adapter to connect a PS/2 keyboard to it.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-08-26T09:17:37.953" LastActivityDate="2020-08-26T09:17:37.953" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15972" PostTypeId="2" ParentId="15945" CreationDate="2020-08-25T15:22:06.967" Score="1" Body="&lt;p&gt;The Tatung Einstein shipped with a Machine Operating System (MOS) in ROM, which offered a moderately useful if limited set of commands including a loader to boot from a language disk. Two such disks were included in the pack I had - a version of Microsoft BASIC, and a near-perfect port of BBC BASIC.&lt;/p&gt;&#xA;&lt;p&gt;Annoyingly, the MS language had been extended to access the hardware capabilities of the machine but the BBC language hadn't - so one was forced to choose between the advanced (for the time) language features of the BBC, or the more rudimentary features (but better hardware support) of MS.&lt;/p&gt;&#xA;" OwnerUserId="600" LastActivityDate="2020-08-25T15:22:06.967" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15973" PostTypeId="1" CreationDate="2020-08-25T17:04:44.963" Score="3" ViewCount="191" Body="&lt;p&gt;There exist many fastloading systems for the Commdore 64/VC 1541 combination. Unfortunately, only a few work with the cost-efficient SD2IEC device, a most notable exception is the &lt;a href=&quot;https://www.c64-wiki.com/wiki/DreamLoad&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dreamload loader system&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;However, writing to &amp;quot;disk&amp;quot; is not supported with Dreamload. Due to the customized disk protocol, even using the standard ROM routines for saving require a reset to deinstall the loader system.&lt;/p&gt;&#xA;&lt;p&gt;Is there a Commodore 64 Fastloader/Fastsaver system that is SD2IEC-compatible? Ideally, it should be an IRQ-loader (i.e. it doesn't affect IRQs during load) and provide a speed improvement for both, loading and saving.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-08-27T23:45:40.790" Title="Is there a Commodore 64 Fastloader/Fastsaver combination that is SD2IEC-compatible?" Tags="&lt;commodore-64&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15974" PostTypeId="2" ParentId="15973" CreationDate="2020-08-25T18:08:26.363" Score="4" Body="&lt;p&gt;Some people (e.g. &lt;a href=&quot;https://www.lemon64.com/forum/viewtopic.php?t=53867&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;) recommends the JiffyDOS as the most compatible speeder. But I am afraid that SD2IEC is not &amp;quot;fast loader friendly&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.c64-wiki.com/wiki/sd2iec_(firmware)&quot; rel=&quot;nofollow noreferrer&quot;&gt;From the C64 Wiki&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Are fastloaders supported?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In general, no. That said, sd2iec does have special support for a few well-known fastloaders.&lt;/p&gt;&#xA;&lt;p&gt;Longer explanation: &lt;a href=&quot;https://www.c64-wiki.com/wiki/Fastloader&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fastloaders&lt;/a&gt; consist of a code portion running on the C64 and of code running on the floppy. sd2iec cannot emulate a complete 1541 since this would imply emulating a whole 6502 processor, several additional circuits, and the floppy's mechanism. A microcontroller's resources are just not enough for that (it's not only about processing power and timing but also memory requirements). This can be done using an FPGA though - see &lt;a href=&quot;https://www.c64-wiki.com/wiki/1541_Ultimate&quot; rel=&quot;nofollow noreferrer&quot;&gt;1541 Ultimate&lt;/a&gt;. For sd2iec, it is possible to add special support for individual fastloaders to the firmware only (which basically means reimplementing the fastloader's code formerly running on the floppy for the ATMega controller). This has been done for a few well-known fastloaders (see &lt;a href=&quot;https://www.c64-wiki.com/wiki/sd2iec_(firmware)&quot; rel=&quot;nofollow noreferrer&quot;&gt;feature list&lt;/a&gt; above).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Feature list&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(...)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Support for Turbo Disk AKA Fast Load AKA Speeddisk fastloader&lt;/li&gt;&#xA;&lt;li&gt;Supports the JiffyDOS fast serial bus protocol, the Final Cartridge 3 fastloader/fastsaver, DreamLoad, Exos, GEOS&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="11446" LastEditDate="2020-08-25T18:13:53.907" LastActivityDate="2020-08-25T18:13:53.907" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15975" PostTypeId="2" ParentId="15970" CreationDate="2020-08-26T01:15:28.433" Score="-3" Body="&lt;p&gt;you already have an answer, but just some other options:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;i think there was an adapter that allowed to plug a ps/2 device into a com-port&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;you could add an additional card that gives you another port&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;maybe the port would be available on the motherboard and just not wired to the back of the computer, so you can buy another port and attach it&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="19178" LastEditorUserId="333" LastEditDate="2020-08-26T07:46:19.293" LastActivityDate="2020-08-26T07:46:19.293" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15976" PostTypeId="2" ParentId="15963" CreationDate="2020-08-26T17:44:56.467" Score="1" Body="&lt;p&gt;As an example, the PDP-11 FORTRAN (UNIX V5) had a runtime check, if the label list had been provided. An attempt to jump to a label not equivalent to those mentioned on the list would result in a runtime error.&lt;/p&gt;&#xA;&lt;p&gt;Using &lt;a href=&quot;https://skn.noip.me/pdp11/pdp11.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;an online emulator&lt;/a&gt;,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Paul Nankervis - paulnank@hotmail.com&#xA;&#xA;Boot&amp;gt; boot rk0&#xA;@unix&#xA;&#xA;login: root&#xA;# chdir /tmp&#xA;# cat &amp;gt; test.f&#xA;      assign 10 to l&#xA;      goto l,(20)&#xA;      stop&#xA;  10  print 1&#xA;   1  format(' label 10')&#xA;      stop&#xA;  20  print 2&#xA;   2  format(' label 20')&#xA;      stop&#xA;      end&#xA;Ctrl/D&#xA;# fc test.f&#xA;# ./a.out&#xA;Runtime error 14&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Whereas the program with just &lt;code&gt;goto l&lt;/code&gt; prints &lt;code&gt;label 10&lt;/code&gt;, as expected.&lt;/p&gt;&#xA;&lt;p&gt;However, this works:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;      assign 10 to l&#xA;      goto l,(20)&#xA;   10 continue&#xA;   20 continue&#xA;      end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;because both labels resolve to the same offset in the compiled executable, and the check succeeds.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-08-26T17:44:56.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15977" PostTypeId="1" AcceptedAnswerId="15978" CreationDate="2020-08-26T20:42:00.300" Score="5" ViewCount="344" Body="&lt;p&gt;This question has been prompted by &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/15963/4025&quot;&gt;a recent question about the assigned GOTO operator&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It appears that some early FORTRAN implementations supported a non-obvious construct: using an indexed variable in the &lt;code&gt;ASSIGN&lt;/code&gt; operator and the &lt;code&gt;GOTO&lt;/code&gt; operator, e.g.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ASSIGN 10 TO IGO(K)&#xA;...&#xA;GOTO IGO(K)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This allowed to mimic recursive functions (with appropriately managed local variable frame, if needed) even on platforms with no call stack.&lt;/p&gt;&#xA;&lt;p&gt;The following program compiles and executes correctly on &lt;a href=&quot;https://skn.noip.me/pdp11/pdp11.html&quot; rel=&quot;noreferrer&quot;&gt;PDP-11 UNIX V5&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Paul Nankervis - paulnank@hotmail.com&#xA;&#xA;Boot&amp;gt; boot rk0&#xA;@unix&#xA;&#xA;login: root&#xA;# chdir /tmp&#xA;# cat &amp;gt; fact.f&#xA;      integer st(100),ptr,f&#xA;      ptr=1&#xA;      n=10&#xA;      assign 10 to st(ptr)&#xA;      goto 100&#xA;   10 print 1,n,f&#xA;    1 format(' factorial of ', i2, ' is ', i10)&#xA;      stop&#xA;  100 print 2,n&#xA;   2  format(' called: factorial of ', i5)&#xA;      if (n.gt.1)goto 101&#xA;      f = 1&#xA;      goto st(ptr)&#xA;  101 n=n-1&#xA;      ptr=ptr+1&#xA;      assign 102 to st(ptr)&#xA;      goto 100&#xA;  102 continue&#xA;      print 3,n,f&#xA;    3 format(' fact(',i2,') =', i10)&#xA;      ptr=ptr-1&#xA;      n=n+1&#xA;      f=f*n&#xA;      goto st(ptr)&#xA;      end&#xA;# fc fact.f&#xA;# ./a.out&#xA; called: factorial of    10&#xA; called: factorial of     9&#xA; called: factorial of     8&#xA; called: factorial of     7&#xA; called: factorial of     6&#xA; called: factorial of     5&#xA; called: factorial of     4&#xA; called: factorial of     3&#xA; called: factorial of     2&#xA; called: factorial of     1&#xA; fact( 1) =         1&#xA; fact( 2) =         2&#xA; fact( 3) =         6&#xA; fact( 4) =        24&#xA; fact( 5) =       120&#xA; fact( 6) =       720&#xA; fact( 7) =      5040&#xA; fact( 8) =     40320&#xA; fact( 9) =    362880&#xA; factorial of 10 is    3628800&#xA;# &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(an aside: allowing quoted strings instead of Hollerith style had been an early enhancement, apparently)&lt;/p&gt;&#xA;&lt;p&gt;A BESM-6 FORTRAN compiler, directly derived from the CDC 1604 compiler, accepts the code and produces an identical result. A newer (post-1977) BESM-6 compiler rejects it.&lt;/p&gt;&#xA;&lt;p&gt;G77 rejects the code as well:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;fact.f:4: &#xA;         assign 10 to st(ptr)&#xA;                      ^&#xA;Expression at (^) has incorrect data type or rank for its context&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It looks like when FORTRAN was being standardized, the syntax was tightened.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The question is: Was the liberal reading of the syntax, allowing assigning labels to array elements, an &amp;quot;official&amp;quot; one, that is, originated by IBM, or was it an unrelated initiative, adopted by competing vendors (at least DEC and CDC)?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-08-27T21:38:43.757" Title="Was this FORTRAN &quot;extension&quot; originated by IBM?" Tags="&lt;programming&gt;&lt;ibm&gt;&lt;dec&gt;&lt;fortran&gt;&lt;cdc&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15978" PostTypeId="2" ParentId="15977" CreationDate="2020-08-26T22:35:07.493" Score="6" Body="&lt;p&gt;I can't say whether IBM invented this extension or even whether any IBM compiler ever supported it, but at least as of the IBFTC FORTRAN IV compiler for IBSYS version 13 (manual dated 1968), subscripted variables were explicitly prohibited in an ASSIGN.&lt;/p&gt;&#xA;&lt;p&gt;Assuming the vendor's documentation to be accurate :-)&lt;/p&gt;&#xA;&lt;p&gt;A System/360 &lt;a href=&quot;http://bitsavers.org/pdf/ibm/360/fortran/C28-6515-6_FORTRAN_IV_Language_1966.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;FORTRAN IV manual&lt;/a&gt; says the same thing (see page 32).  As does &lt;a href=&quot;http://bitsavers.org/pdf/ibm/370/fortran/GC26-3986-1_VS_FORTRAN_Application_Programming_Language_Reference_Jan82.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this 1982 manual for S/370&lt;/a&gt; - page 46.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-08-27T00:42:23.203" LastActivityDate="2020-08-27T00:42:23.203" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15979" PostTypeId="2" ParentId="4815" CreationDate="2020-08-27T01:28:45.750" Score="5" Body="&lt;p&gt;You may ask Jeri Ellsworth. Apparently, she has got, or has access to the internal schematics of some custom chips of the Commodore Amiga.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://twitter.com/jeriellsworth/status/1228966902694699008&quot; rel=&quot;noreferrer&quot;&gt;https://twitter.com/jeriellsworth/status/1228966902694699008&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ou2E6.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ou2E6.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2020-08-27T01:28:45.750" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15980" PostTypeId="2" ParentId="15963" CreationDate="2020-08-27T02:18:43.453" Score="1" Body="&lt;p&gt;I'm posting my own answer as a summary, just prior to accepting someone else's.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The statement list is not necessary. If present, it &lt;em&gt;may&lt;/em&gt; be used for validation of the jump target. If absent, the GOTO will jump regardless.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The statement list is optional in some implementations. We have not yet proven whether it was/wasn't optional in the original FORTRAN.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the statement list is supplied on the GOTO, and the variable is assigned a statement not in the list, the results vary between implementations.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-08-27T02:18:43.453" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15981" PostTypeId="2" ParentId="15977" CreationDate="2020-08-27T11:00:08.213" Score="4" Body="&lt;p&gt;DEC PDP-10 Fortran documentation says the target of an assigned go to can be a variable or an array element.   It sounds like it would allow the construct discussed in this question.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.bitsavers.org/www.computer.museum.uq.edu.au/pdf/DEC-10-AFDO-D%20decsystem10%20FORTRAN%20IV%20Programmer%27s%20Reference%20Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;see manual&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This edition of the manual is dated 1972.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2020-08-27T11:00:08.213" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15982" PostTypeId="1" AcceptedAnswerId="15983" CreationDate="2020-08-27T18:38:31.050" Score="6" ViewCount="650" Body="&lt;p&gt;I’d like to run Windows 3.11 on a relatively modern laptop. One problem I have is that the only display driver that works with my hardware is the basic VGA driver, which only supports the rather unimpressive resolution of 640×480×4bpp, whereas my screen is able handle 32-bpp graphics nearly five times the pixel count.&lt;/p&gt;&#xA;&lt;p&gt;I have no expectations that a native driver would be available for my video hardware; however, I know that my video BIOS supports VESA BIOS Extensions version 3.0, which (after &lt;a href=&quot;http://915resolution.mango-lang.org/&quot; rel=&quot;noreferrer&quot;&gt;patching&lt;/a&gt;) allows my boot manager to switch to the native screen resolution.&lt;/p&gt;&#xA;&lt;p&gt;Perhaps if I had a VBE video driver for Windows, I would be able to use the same resolution (or at least one higher than 640×480) in Windows as well. Is there such a driver available?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastActivityDate="2020-11-05T20:10:18.520" Title="Is there a generic VBE driver available for Windows 3.x?" Tags="&lt;video&gt;&lt;windows-3.x&gt;&lt;driver&gt;&lt;software-recommendation&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15983" PostTypeId="2" ParentId="15982" CreationDate="2020-08-27T18:38:31.050" Score="9" Body="&lt;p&gt;It seems unlikely that a fully-functional VBE driver for Windows 3.x exists. Microsoft started bundling a VBE driver with the operating system only as late as with Windows XP, by which time the Windows 3.x (and 9x) driver architecture was long obsolete. According to &lt;a href=&quot;http://www.os2museum.com/wp/display-drivers-os2-and-16-bit-windows/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a post on &lt;em&gt;OS/2 Museum&lt;/em&gt;&lt;/a&gt;, the display driver architecture of Windows 3.x was pretty baroque: the drivers were required to implement not only mode switching and transferring pixel buffers to the screen but also many drawing operations as well. This in turn means that one should not expect it to be easy to create such a driver from scratch; it certainly wouldn’t be a weekend project.&lt;/p&gt;&#xA;&lt;p&gt;In Windows 95, the driver architecture was simplified: drivers could re-use generic drawing routines from the DIB engine, which is (presumably) what enabled the development of &lt;a href=&quot;https://bearwindows.zcm.com.au/vbe9x.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;a VBE driver for Windows 9x from the VBEMP project&lt;/a&gt;. The same project also developed &lt;a href=&quot;https://bearwindows.zcm.com.au/vbemp.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;a VBE driver for earlier versions of Windows NT&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The above notwithstanding, there is a hacky partial solution: &lt;a href=&quot;https://www.japheth.de/Download/Win16/svgaptch.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;Japheth’s SVGAPatch&lt;/a&gt;. In order to use it, follow these steps:&lt;/p&gt;&#xA;&lt;ol start=&quot;0&quot;&gt;&#xA;&lt;li&gt;Download the archive and extract &lt;code&gt;SVGAPTCH.EXE&lt;/code&gt; into some known location.&lt;/li&gt;&#xA;&lt;li&gt;Open Windows Setup and change the display driver to 256-colour SuperVGA with your chosen resolution. Point the installer to installation archives/floppies as necessary.&lt;/li&gt;&#xA;&lt;li&gt;Exit Windows without restarting.&lt;/li&gt;&#xA;&lt;li&gt;Enter the &lt;code&gt;SYSTEM&lt;/code&gt; directory and run &lt;code&gt;svgaptch -p&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Restart Windows.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The patched driver doesn’t expose the full VBE capabilities; it can only switch to one of three hardcoded modes supported by the original driver (640×480, 800×600 and 1024×768). The patch accomplishes its task by replacing the hardware-specific mode-switching routines (and some data structures) in &lt;code&gt;SVGA256.DRV&lt;/code&gt; with routines using VBE calls. (If you feel adventurous, you may even try further patching the driver to enable other resolutions.) For basic usage the patched driver seems sufficient, but I noticed that starting a DOS box, switching between full-screen and windowed modes thereof or even triggering a blue screen usually causes visual glitches (which may require Windows to be restarted) or outright crashes Windows immediately. For that functionality to work correctly, the &lt;code&gt;VDDSVGA.386&lt;/code&gt; virtual device driver would probably need be patched as well (and maybe the ‘386 grabber’ driver too). User beware.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-11-05T20:10:18.520" LastActivityDate="2020-11-05T20:10:18.520" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="15984" PostTypeId="1" CreationDate="2020-08-27T19:26:54.837" Score="8" ViewCount="698" Body="&lt;p&gt;I just watched this video: &lt;a href=&quot;https://www.youtube.com/watch?v=izxXGuVL21o&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=izxXGuVL21o&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's this Naughty Dog developer who talks about how they &amp;quot;hacked&amp;quot; the PlayStation to bypass the slow, Sony-provided C libraries and instead use a &amp;quot;secret&amp;quot; co-processor/chip to calculate specific math much faster than what was otherwise possible.&lt;/p&gt;&#xA;&lt;p&gt;He even mentions that people from Sony sat in them in a dark room like in a spy movie scene and slid over a couple of papers secretively, saying: &amp;quot;This is how you can do things faster. You did not hear it from us.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;Why on Earth would Sony not want the developers to take full advantage of their PlayStation, making it look more powerful to consumers and reviewers? And wasn't Naughty Dog a subdivision of Sony or something, on top of it? (Maybe they just &lt;em&gt;became&lt;/em&gt; that later.)&lt;/p&gt;&#xA;&lt;p&gt;Is this related in some way to Sony wanting &amp;quot;an upper hand&amp;quot; for their first-party titles or something? &amp;quot;You lowly third-party developers can use these slow, unoptimized C libraries, but we're going to be talking directly with the secret hardware!&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;It seems strange to me. It seems like it would only hurt Sony.&lt;/p&gt;&#xA;" OwnerUserId="19188" LastActivityDate="2020-08-28T20:57:21.807" Title="Why did Sony allegedly not want developers to take advantage of the full power of their PlayStation?" Tags="&lt;sony-playstation&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15985" PostTypeId="2" ParentId="15984" CreationDate="2020-08-27T19:56:42.037" Score="13" Body="&lt;p&gt;&lt;em&gt;The following answer is only my personal point of view&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I don't believe that Sony created a C library that was slow on purpose. They created a C library so developers use high-level interface which respects the way to access the hardware, instead of documenting it in details.&lt;/p&gt;&#xA;&lt;p&gt;Respecting/checking the hardware usage domain and timings (and also using C) has an overhead. In some particular cases, cutting to the chase by hardware banging and using assembly is faster. But it can also fail with nasty glitches in some cases. They may also have portability in mind, wanting to keep the API stable for future Playstation generations and new chips.&lt;/p&gt;&#xA;&lt;p&gt;This also happened on the Amiga when the AA chipset was designed. Commodore didn't reveal the hardware details of most of the AA features to force developers to use the standard system libraries (with their overhead). After a while, someone reverse engineered the workbench copperlists (created by the ROM) and found how to use big AA sprites, etc...&lt;em&gt;without&lt;/em&gt; using the system.&lt;/p&gt;&#xA;&lt;p&gt;In this very case, if we listen to Andy Gavin in the video (around 12:00), it seems that the Sony C library didn't use a co-processor/instruction which existed in the GPU to perform a multiply-add operation, frequent in 3D games, which cut down the performance tenfold!&lt;/p&gt;&#xA;&lt;p&gt;So, in the case of Sony, they probably realized themselves that the overhead of such a library was too high, or they got complaints from developers, and started leaking direct hardware access to some developers who needed it. It was a major advantage for the developers who knew.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-08-27T21:47:36.047" LastActivityDate="2020-08-27T21:47:36.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15987" PostTypeId="2" ParentId="15977" CreationDate="2020-08-27T21:38:43.757" Score="2" Body="&lt;p&gt;The 1966 ANSI standard X3.9-1966 ANSI standard (&lt;a href=&quot;https://wg5-fortran.org/ARCHIVE/Fortran66.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://wg5-fortran.org/ARCHIVE/Fortran66.pdf&lt;/a&gt;) just says&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A GO TO assignment statement is of the form&lt;/p&gt;&#xA;&lt;p&gt;ASSIGN k to i&lt;/p&gt;&#xA;&lt;p&gt;where k is a statement label and i is an integer variable name.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;so anything other than an integer variable name would have been an extension to Fortran 66.&lt;/p&gt;&#xA;&lt;p&gt;From the compiler writer's point of view, whether to allow an extension or not would depend on the the syntax of the assigned goto.  If it is defined as (Lahey, Fujitsu, ICL)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;GOTO assign-variable [[,] (labels)]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It would mean that the comma was optional, so&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;GOTO st(10)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;could mean goto ST and label 10 was one of the options or goto the label pointed to by ST(10).  The problem is not really in the ASSIGN statement but in the GOTO.  If the comma is compulsory i.e.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;GOTO assign-variable [, (labels)]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;then it shouldn't be a problem.  Once you've gotten over that hurdle, it is quite easy to extend the language to allow assignment of labels to array elements.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;OFF TOPIC&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The other common use of assigned labels is in format statements.  eg&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ASSIGN 10 to COORD&#xA;...&#xA;WRITE(1, COORD) X, Y, Z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Bending the rules a bit, COORD could live in a common block and subroutines could use the same write statement and only have the FORMAT statement defined in one place.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2020-08-27T21:38:43.757" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15988" PostTypeId="1" AcceptedAnswerId="15990" CreationDate="2020-08-27T21:45:33.210" Score="46" ViewCount="5583" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/COBOL&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/COBOL&lt;/a&gt; the project to design COBOL began when&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;On 28 and 29 May 1959 (exactly one year after the Zürich ALGOL 58 meeting), a meeting was held at the Pentagon to discuss the creation of a common programming language for business. It was attended by 41 people and was chaired by Phillips.[20] The Department of Defense was concerned about whether it could run the same data processing programs on different computers. FORTRAN, the only mainstream language at the time, lacked the features needed to write such programs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What features did FORTRAN lack, that the Department of Defense believed were necessary to write portable business software? The two I can think of are decimal arithmetic and records with named fields; were those what the DoD had in mind, or were they thinking of something else that hasn't occurred to me?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10854" LastEditDate="2020-09-07T23:22:24.887" LastActivityDate="2020-09-07T23:22:24.887" Title="What did the DoD think Fortran lacked?" Tags="&lt;history&gt;&lt;fortran&gt;&lt;cobol&gt;&lt;algol&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15989" PostTypeId="2" ParentId="15988" CreationDate="2020-08-27T22:04:18.817" Score="47" Body="&lt;p&gt;FORTRAN was, at the time(*1), lacking almost everything, from string handling to all I/O beside reading numbers from cards or tape. Heck, not even integer size was guaranteed across machines.&lt;/p&gt;&#xA;&lt;p&gt;No real way of structuring or flow control beside GOTO — even subroutines/functions were only integrated a year before with FORTRAN II. For most parts, FORTRAN is a symbolic assembler with a focus on mathematics, that made it easy to write formulas, but not much else.&lt;/p&gt;&#xA;&lt;p&gt;But real world computing is about data handling and I/O. This is especially true for a huge organization as the US military, represented by its bureaucratic arm, the DoD. Being able to easily write down some complex calculation is nice, but useless in an environment there it's about managing inventory, ordering supplies, calculating pay and have all of that delivered in time.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;An army is like a huge corporation, not a scientific institute and the task at hand is data processing, not number crunching.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Data Processing is vastly different from number crunching — it's a completely different world. It's about the classic &amp;quot;read card, process item, write output&amp;quot; loop, the stuff that got automated with punch cards. It is the core reason why the /360 has survived until today as a successful architecture. Its instruction set is perfectly tailored to shovel data, being built to support these principles. The fact that IBM tried to make it an all around (360 degree) architecture by including FP and even trying to make it fit for process control didn't really matter on the long run — others were much better for either.&lt;/p&gt;&#xA;&lt;p&gt;And the DoD did need data processing to fight the wars at the time (Korea just ended and Vietnam was coming up), and a language to support writing data processing programs in a machine independent way. That's why COBOL was developed as a result of the mentioned conference.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - FORTRAN did improve a lot since back then, still, it didn't really change the basic nature.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-30T15:15:04.453" LastActivityDate="2020-08-30T15:15:04.453" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15990" PostTypeId="2" ParentId="15988" CreationDate="2020-08-27T22:46:26.433" Score="32" Body="&lt;p&gt;The meeting that defined the requirements of the new language took place on May 28–29, 1959.  Charles Phillips prepared a memo  several months later summarizing the decisions made at that meeting.  Its listing of requirements is reprinted on &lt;a href=&quot;https://books.google.com/books?id=Hy-jBQAAQBAJ&amp;amp;lpg=PA199&amp;amp;ots=jl5N5juYV0&amp;amp;dq=Anonymous%20(1960a).%20March.%20Editorial---The%20High%20Cost%20of%20Computer%20Babble.%20Management%20and%20Business%20Automation.&amp;amp;lr&amp;amp;pg=PA201#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;page 201 of the ACM’s &lt;em&gt;History of Programming Languages&lt;/em&gt;.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;a. Majority of group supported maximum use of simple English language; even though some participants suggested there might be advantage from using mathematical symbolism.&lt;/p&gt;&#xA;&lt;p&gt;b. A minority suggested we steer away from problem-oriented language because English is not a panacea as it cannot be manipulated as algebraic expressions can.&lt;/p&gt;&#xA;&lt;p&gt;c. The need is for a programming language that is &lt;em&gt;easier to use&lt;/em&gt;, even if somewhat less powerful.&lt;/p&gt;&#xA;&lt;p&gt;d. We need to broaden the base of those who can state problems to computers.&lt;/p&gt;&#xA;&lt;p&gt;e. The [Common Business Language] should not be biased by present compiler problems.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The committee did not consider FORTRAN as an alternative.  According to Jean E. Sammet, who was chair (She describes herself as the “chairman”) of two of the committees that developed COBOL and served on a third, the major inspirations were FLOW-MATIC (developed by Grace Hopper and others for Remington-Rand Univac), AIMACO (developed by the Air Materiel Command based on Hopper’s work, and described by Sammet as “a minor modification of FLOW-MATIC”) and COMTRAN (Commercial Translator, which at that time existed as a manual at IBM, and had never been implemented).  Sammet claims that FACT, developed at Honeywell, had far less influence on COBOL than some people believed.&lt;/p&gt;&#xA;&lt;p&gt;The entire chapter I link to has extensive notes that Sammet took at the time from the committee that developed COBOL, and the decisions it made.&lt;/p&gt;&#xA;&lt;p&gt;She makes the particularly interesting admission on page 221:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I felt there was a strong anti-IBM bias in this committee from me, and from some (but certainly not all) of the others.  Since I was not working for IBM at the time, I can freely (although &lt;em&gt;not&lt;/em&gt; with pride) admit that in some cases suggestions or decisions were made on the basis of doing things differently from how IBM did it.  For example, we felt that the verb for loop control should &lt;em&gt;not&lt;/em&gt; be called &lt;code&gt;DO&lt;/code&gt; because that was how FORTRAN did it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sammet lists among the ideas COBOL took from FLOW-MATIC, “It used full data names rather than short symbolic names (as in FORTRAN)” e.g. &lt;code&gt;SOCIAL-SECUR&lt;/code&gt; instead of &lt;code&gt;SOCSEC&lt;/code&gt;, and used English words as commands.  Less cosmetically, it allowed fields to be packed into a data word. She says, “Note that Fortran assumes that every number is in a single machine word.” It separated data definitions from instructions, which she says became so commonplace that it’s difficult to appreciate what a conceptual breakthrough it was.&lt;/p&gt;&#xA;&lt;p&gt;Among the ideas she lists as coming from COMTRAN are nested data structures, expressions, and conditionals.  It was controversial at that time to allow mathematical formulas and even Boolean expressions, as some committee members believed those were only needed in a few edge cases.&lt;/p&gt;&#xA;&lt;p&gt;She also states that IAL, which developed into ALGOL, had a significant influence, by convincing the committee not to follow its example, and instead allow in its source code only characters that actually exist.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="10854" LastEditDate="2020-08-28T23:24:01.960" LastActivityDate="2020-08-28T23:24:01.960" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="15991" PostTypeId="2" ParentId="15973" CreationDate="2020-08-27T23:45:40.790" Score="2" Body="&lt;p&gt;According to the reverse engineered code at &lt;a href=&quot;https://github.com/mist64/final_cartridge&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/mist64/final_cartridge&lt;/a&gt; , The final cartridge III cartridge does indeed have fast saving routines for both cassette tape and floppy disk. So such things did/do exist. I can't say the same of SJLOAD, but the name to me implies loading only.&lt;/p&gt;&#xA;&lt;p&gt;That code on github also contains a makefile target to build just the FCIII fastloader/fastsaver as a loadable .prg file, so perhaps this might meet your needs?&lt;/p&gt;&#xA;" OwnerUserId="7044" LastActivityDate="2020-08-27T23:45:40.790" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15992" PostTypeId="1" AcceptedAnswerId="16000" CreationDate="2020-08-28T09:26:19.203" Score="5" ViewCount="233" Body="&lt;p&gt;Information online states that a 18/36-bit DECtape holds 576 blocks.  People claim it may be possible to add a few more blocks, but no more.  Where does this number come from?  Is there a hard limit on the length of the tape?&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2020-08-28T16:36:58.037" Title="Why does a DECtape have 576 blocks?" Tags="&lt;magnetic-tape&gt;" AnswerCount="1" CommentCount="17" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15993" PostTypeId="1" CreationDate="2020-08-28T11:05:02.697" Score="11" ViewCount="1059" Body="&lt;p&gt;The SuperFX chip was an additional RISC processor includes in some Super Famicom cartridges to generate 3D graphics, the most famous example being the game Starfox.&lt;/p&gt;&#xA;&lt;p&gt;However it's performance wasn't particularly impressive, with games on other 16 bit machines such as the Amiga demonstrating higher frame rates with similar levels of detail (e.g. the game No Second Prize).&lt;/p&gt;&#xA;&lt;p&gt;What were the factors limiting the performance of the SuperFX chip for 3D graphics? Calculation speed, memory bandwidth, transfer speed when copying data to the Super Famicom for display?&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-08-28T15:53:48.370" Title="What limited the performance of the SuperFX chip?" Tags="&lt;snes&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15994" PostTypeId="1" AcceptedAnswerId="15997" CreationDate="2020-08-28T11:54:45.013" Score="24" ViewCount="6190" Body="&lt;p&gt;Here's a recent Microsoft article claiming, &amp;quot;Windows 95 was launched on August 24, 1995&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://blogs.windows.com/windows-insider/2020/08/24/looking-back-the-25th-anniversary-of-windows-95/&quot; rel=&quot;noreferrer&quot;&gt;https://blogs.windows.com/windows-insider/2020/08/24/looking-back-the-25th-anniversary-of-windows-95/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But I distinctly remember thinking that it was late, back at that time. It had always seemed like a lot of hubris to name a product after a date only to find you couldn't ship it on time. But is my memory incorrect?&lt;/p&gt;&#xA;&lt;p&gt;(Maybe actual availability came in 1996 for some reason?)&lt;/p&gt;&#xA;" OwnerUserId="11795" LastEditorUserId="11795" LastEditDate="2020-08-28T15:54:36.880" LastActivityDate="2020-09-01T13:33:36.290" Title="Was Windows 95 really released in 1995?" Tags="&lt;history&gt;&lt;windows-95&gt;&lt;microsoft&gt;" AnswerCount="5" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15995" PostTypeId="2" ParentId="15994" CreationDate="2020-08-28T12:09:31.673" Score="10" Body="&lt;p&gt;Here's a &lt;a href=&quot;https://www.bbc.co.uk/archive/microsoft-launches-windows-95/z3p6jsg&quot; rel=&quot;noreferrer&quot;&gt;BBC News&lt;/a&gt; article describing the midnight retail availability of Windows 95 on 24th August 1995. &lt;a href=&quot;https://mashable.com/2015/08/24/windows-95-launch/&quot; rel=&quot;noreferrer&quot;&gt;This Mashable article&lt;/a&gt; claims to show a photograph of a buyer at the Australian launch on the same date. It gives a November date for Japan.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastActivityDate="2020-08-28T12:09:31.673" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15996" PostTypeId="2" ParentId="15994" CreationDate="2020-08-28T12:38:06.243" Score="18" Body="&lt;p&gt;For a long time (starting late 1992/ early 1993), what was to become Windows 95 went under the name of &amp;quot;Chicago&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Only in september 1994 (beta 1.4 / build 189), did it become Windows 95. Microsoft must have been reasonably sure they were going to release in 1995 by then.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://betawiki.net/wiki/Windows_95_Usability_Testing_Builds&quot; rel=&quot;noreferrer&quot;&gt;Early Chicago Usability Testing builds - 1992/93&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://betawiki.net/wiki/Windows_95_build_180&quot; rel=&quot;noreferrer&quot;&gt;Last Chicago labeled build - build 180&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://betawiki.net/wiki/Windows_95_build_189&quot; rel=&quot;noreferrer&quot;&gt;First Windows 95 branded build - build 189&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://betawiki.net/wiki/Windows_95_build_950_r-6&quot; rel=&quot;noreferrer&quot;&gt;Windows 95 Release to manufacturing (RTM) - build 950 r-6&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15545" LastEditorUserId="15545" LastEditDate="2020-08-28T12:43:34.637" LastActivityDate="2020-08-28T12:43:34.637" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="15997" PostTypeId="2" ParentId="15994" CreationDate="2020-08-28T12:46:17.447" Score="50" Body="&lt;p&gt;Yes, &lt;a href=&quot;https://www.nytimes.com/1995/08/24/business/midnight-sales-frenzy-ushers-in-windows-95.html&quot; rel=&quot;noreferrer&quot;&gt;Windows 95 really was released on August 24, 1995&lt;/a&gt;; I still have &lt;a href=&quot;https://www.nytimes.com/1995/08/24/business/media-business-advertising-software-makes-strange-bedfellows-britain-microsoft.html&quot; rel=&quot;noreferrer&quot;&gt;the special issue of &lt;em&gt;The Times&lt;/em&gt; that heralded the event&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But I distinctly remember thinking that it was late, back at that time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That’s not surprising: Microsoft had been trumpeting the release of the next version of Windows for a long time, and there was widespread coverage in the media for a long time before the actual release, which &lt;a href=&quot;https://archive.org/details/bub_gb_cTwEAAAAMBAJ&quot; rel=&quot;noreferrer&quot;&gt;was originally announced&lt;/a&gt; &lt;a href=&quot;https://archive.org/details/1993-07-compute-magazine/page/n5/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;for 1994&lt;/a&gt;. Many magazines had lengthy articles about “Windows 4” or “Chicago” (the operating system’s code name) in 1994 and even 1993; they also shipped a number of demo disks quite a while before the actual release, and Microsoft themselves had a “preview” program available in some countries. The Windows 95 name was settled on late in 1994. As a result of all this, Windows 95 was perceived as “coming soon” for a very long time before its actual availability.&lt;/p&gt;&#xA;&lt;p&gt;This wasn’t new for Microsoft; MS-DOS 6 had also had a lengthy beta program with a lot of users quite a long time before its release.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-08-28T13:20:41.223" LastActivityDate="2020-08-28T13:20:41.223" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15998" PostTypeId="2" ParentId="15993" CreationDate="2020-08-28T15:06:08.807" Score="15" Body="&lt;p&gt;There are two main limitations with SuperFX that limited its performance and the level of 3D gaming that could thus be accomplished (e.g how many polygons/second).&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The chip itself only provided limited computational abilities. Mostly, it allowed up to 16x16 bit signed and unsigned multiplies with adequate working register set. This made it far faster than the SNES's own CPU for polygon math and bitmap scaling, but it is not capable of the parallelism or SIMD instructions that would become common on more advanced GPU's. These computational limits set an upper-bound on the number of polygons in a frame.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The memory architecture was not unified, and there was a lot of latency in transferring data from the SuperFX working framebuffer RAM to the SNES VRAM. It would typically take 2 to 3 frames just to transfer one frame worth of data from the RAM on the cartridge (which the SuperFX chip was rendering to) over to the VRAM in the SNES. This bandwidth limitation alone could limit the system to around 20 FPS, depending on how large of a framebuffer the game needed for the 3D calculations.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-08-28T15:06:08.807" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15999" PostTypeId="2" ParentId="15993" CreationDate="2020-08-28T15:53:48.370" Score="10" Body="&lt;p&gt;I'll add a couple of nuances.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;SuperFX chip was limited, among other things, in power consumption - the console could not really give a lot of power to the cartridge port.&lt;/li&gt;&#xA;&lt;li&gt;The memory architecture significantly limited the performance not only by the HDMA speed of 2.7MB / s, but also by access to ROM / RAM. The code from the 512-byte cache executed, in general, almost three times faster.&lt;/li&gt;&#xA;&lt;li&gt;The SNES graphic data format with elements of bitplanes in a tile engine forced the architecture of the chip to be complicated and significantly limited the performance in some games.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2020-08-28T15:53:48.370" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16000" PostTypeId="2" ParentId="15992" CreationDate="2020-08-28T16:36:58.037" Score="10" Body="&lt;p&gt;The standard tape reels had a capacity of 260 feet of tape.  Standard tape thickness was 1.25 mil, so it would have theoretically been possible to put more tape on a reel if you made it thinner (which was hard to do because thinner tape was typically also stretchier).  Making the reel larger wasn't a good option because the hubs on the drives were too close together to allow them to be much larger than they were already, and you would have needed &lt;em&gt;two&lt;/em&gt; larger reels, one for the tape and a second one to use as the take-up reel.&lt;/p&gt;&#xA;&lt;p&gt;The reason you could fit a few extra blocks on the tape was because both ends had a lot of leader tape so that you could securely wind it onto the take-up reel.  You could therefore squeeze a few more blocks on the tape if you were willing to (a) reformat the tape, and (b) have a slightly increased risk of tape not winding properly because there wasn't enough on the take-up reel to hold securely.&lt;/p&gt;&#xA;&lt;p&gt;I believe the 'hard' limit on the number of blocks would have been 4096 because block numbers were recorded as 12-bit values.  This is assuming there's nothing in the electronics that would have limited it to something smaller, or which treated block numbers as signed values, either of which would have reduced the maximum number of blocks.&lt;/p&gt;&#xA;&lt;p&gt;The operating system or software in use might also have imposed a limit, for example any system that treated the tape as a slow disk might assume the default number of blocks, and therefore be unable to use the extra blocks without modifications.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2020-08-28T16:36:58.037" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16001" PostTypeId="2" ParentId="15984" CreationDate="2020-08-28T18:32:37.640" Score="0" Body="&lt;p&gt;&lt;em&gt;The following answer is only my point of view&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The main business in the console world is not based on hardware selling, but games selling. Hardware is pretty cheap (compared to the PC), but games costs 2x more than the same PC version.&lt;/p&gt;&#xA;&lt;p&gt;From this point of view, it makes sense to have any &amp;quot;undocumented instructions or features&amp;quot;, which gives you (in this case, Sony's partner as a game developer) a little bit advantage over the other software house. Just because your games could be faster, polished, or something. Because - let's say it once more - the main business is the games, not the hardware itself.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-08-28T18:32:37.640" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16002" PostTypeId="2" ParentId="15984" CreationDate="2020-08-28T20:57:21.807" Score="3" Body="&lt;p&gt;If many game developers exploit some particular hardware quirk, then any hardware revision which changes the behavior of that quirk would risk incompatibility with those games.  If there are only a small number of games that exploit the quirk, however, and their development teams coordinate their efforts with the console maker, then it may be possible for the console maker to work with them develop patches that will let the games that use the trick work with the new hardware, and &lt;em&gt;include those patches within the ROM of devices using that new hardware&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If the console maker thinks that a game has a potential to be a flagship product for the console, the extra effort for the console engineering team to coordinate with that game's development team may be worthwhile, but it wouldn't be practical to invest that level of effort with every game developer.&lt;/p&gt;&#xA;&lt;p&gt;I'm not sure whether these were the motivating factors behind Sony's actions in particular, but game console makers have historically wanted to ensure that games and consoles would &amp;quot;just work&amp;quot; without requiring that users manually install any kind of patch.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-08-28T20:57:21.807" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16005" PostTypeId="2" ParentId="15994" CreationDate="2020-08-29T22:15:05.857" Score="1" Body="&lt;p&gt;In a sense, it was late.  Early in Development Microsoft expected to ship Windows 4 sooner than 1995.  Wikipedia does list &amp;quot;Windows 93&amp;quot; and &amp;quot;Windows 94&amp;quot; as temporary project codenames for what was eventually released as Windows 95.  But there was never public marketing for &amp;quot;Windows 94.&amp;quot;  Perhaps at the time you heard about Microsoft having an intention to release Windows 4 in 93 or 94, so you considered it late despite there being no real public commitment to an earlier timeline for the release.&lt;/p&gt;&#xA;&lt;p&gt;That said, it was released in 1995, as the name suggests.  Windows 98 likewise had &amp;quot;Windows 97&amp;quot; as an internal name before the timeline for release got finalized.  It's pretty normal to start a project with an initial overly optimistic timeline.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Microsoft_codenames#Windows_3.x_and_9x&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/List_of_Microsoft_codenames#Windows_3.x_and_9x&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5309" LastActivityDate="2020-08-29T22:15:05.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16006" PostTypeId="1" AcceptedAnswerId="16007" CreationDate="2020-08-30T04:12:27.043" Score="22" ViewCount="2285" Body="&lt;p&gt;I found an old Macintosh SE/30 in the basement and fired it up recently, only to find that there's some kind of problem with the built-in CRT. I don't really know how to describe it, though. Can anyone identify the glitch shown in this image? Without knowing what it's called, it's hard to google for fixes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/P82US.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/P82US.jpg&quot; alt=&quot;mac-se30-screen-glitch&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It seems like there are horizontal bands on the screen that are duplicates of nearby bands of pixels. For example, you can see in the image that the menu bar at the top doesn't have a top half and a bottom half, it has two bottom-halves stacked on top of each other.&lt;/p&gt;&#xA;&lt;p&gt;None of this moves. The screen isn't flickering or jumping, and the bands don't move with time. Note that the cursor &lt;em&gt;does&lt;/em&gt; show the same effect as it moves into and out of these bands.&lt;/p&gt;&#xA;&lt;p&gt;If you've seen this behavior before, I'd love to know what causes it, if there's a way to fix it, or even just what it's called. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="19204" LastEditorUserId="19204" LastEditDate="2020-08-30T13:09:08.563" LastActivityDate="2020-08-31T16:58:52.107" Title="Glitch in the display of a Mac SE/30" Tags="&lt;apple-macintosh&gt;&lt;display&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16007" PostTypeId="2" ParentId="16006" CreationDate="2020-08-30T10:07:09.527" Score="37" Body="&lt;p&gt;As comments on the question already suggest, it looks quite like an address fault when video memory is read. While the picture is not really great, I'd say:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Blocks of 8 lines are visible, so it must be about A9 of the video address generator (*1).&lt;/li&gt;&#xA;&lt;li&gt;Since these 8 lines are displayed twice, A9 must be tied to one level.&lt;/li&gt;&#xA;&lt;li&gt;From the content it seems as if the 'second' 8 lines are put over the 'first', A9 must be tied to one (Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4378/tuomas&quot;&gt;tuomas&lt;/a&gt; for the correction)&lt;/li&gt;&#xA;&lt;li&gt;As continuation across the screen is otherwise undisturbed, the address generator must work as expected, so the fault must be after.&lt;/li&gt;&#xA;&lt;li&gt;Since the Mac seems to work otherwise, it can't be on the memory side&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Conclusion:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Somewhere between the video address generator and the address multiplexer input (joining Video and CPU access) A9 must be tied to ground.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This can be either some faulty trace (have you checked the batteries?), a bad socketed chip, or a 'dead' chip. First step is checking for visible damage and press all chips into their sockets. If still faulty, next step would be to look at the schematics to see if this is still discrete on the SE30 or integrated in a custom chip. If discrete, swapping either the line counter or the multiplexer should solve it, this can be done blind (*2). In case of the later, than you might want to look sad, hold him up, shout &amp;quot;He's dead Jim&amp;quot; and put him over to the spare parts shelf.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Revised story&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I had a short &lt;a href=&quot;https://recapamac.com.au/wp-content/uploads/2019/07/mac-se30-logic.jpg&quot; rel=&quot;noreferrer&quot;&gt;peek at board&lt;/a&gt; and &lt;a href=&quot;https://preterhuman.net/blog/wp-content/uploads/2017/10/SE-30-Logic-Board-5.gif&quot; rel=&quot;noreferrer&quot;&gt;schematics&lt;/a&gt;, and it seems as if the SE30 is the worst combination possible. While counters and muxes are discrete, they are all SMD devices, so changing them needs soldering on expert level.&lt;/p&gt;&#xA;&lt;p&gt;The whole logic is rather nice made but different than expected by using 41254 type RAM. These are quite nifty Video RAM that can be accessed like standard 64 Ki by 4 RAM (&lt;a href=&quot;https://console5.com/techwiki/images/4/4b/UPD41264.pdf&quot; rel=&quot;noreferrer&quot;&gt;41464&lt;/a&gt;), but offer in addition a 1024 bit line access shifted thru a 4 bit port. The SE30 contains two of these, essentially managing the output of the 4 lines of 512 pixel on its own (well, with a little help of a LS166 8 bit shifter). There is some logic hidden in the PALs used, but it seems straightforward.&lt;/p&gt;&#xA;&lt;p&gt;This breaks the reasons for fault down to:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;either output of VADR(1) on pin 4 (QC) of the LS393 counter at position UF8 being broken,&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;input C1 (Pin 11) of the F253 mux in position UD8 'broken' (somewhat unlikely)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Both are SMD devices, so not easy to replace.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Or someone pulling the line up to one. A good candidate might be the 16R8B PAL at position UG6 (pin 4 - I3).&lt;/p&gt;&#xA;&lt;p&gt;This would be great and bad at the same time. Great as it's socketed, bad as I don't know how easy it is to get the image to program a new one (or reprogram if that's possible).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So in either case, you will need to pull out your oscilloscope and start searching in that area.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - SE30 video is &lt;a href=&quot;https://support.apple.com/kb/sp195?locale=de_DE&quot; rel=&quot;noreferrer&quot;&gt;512 by 384 by 1&lt;/a&gt;, so 64 byte make a line, 8 lines do 512 byte, so the 10th address line, aka A9, is the one flipping every 8 lines.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Counter chip first, test again, if still bad, change multiplexer. No test equipment other than the machine needed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-31T13:59:17.230" LastActivityDate="2020-08-31T13:59:17.230" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16008" PostTypeId="1" CreationDate="2020-08-30T10:45:19.687" Score="9" ViewCount="246" Body="&lt;p&gt;Answers to question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/8200/pdp-10-effective-address-calculation&quot;&gt;PDP-10 effective address calculation&lt;/a&gt; explain how PDP-10 effective address calculation works, including potentially infinite indirections.&lt;/p&gt;&#xA;&lt;p&gt;However the answers don't address how this feature would be typically used, and to what extremes. Was it common to use more than, say, two indirections for some particular programming paradigm or data structure (or design pattern as one might say these days).&lt;/p&gt;&#xA;&lt;p&gt;One kind of application I could imagine is a garbage collector which moves allocated memory blocks around, without the users of that memory being aware of it. To hide this fact, it fiddles with pointers to the memory by adding another step of indirection (&amp;quot;any problem can be solved by adding another layer of indirection&amp;quot;).&#xA;Were there such memory management schemes?&lt;/p&gt;&#xA;&lt;p&gt;What other clever uses are there of multiple-to-infinite levels of indirection?&lt;/p&gt;&#xA;" OwnerUserId="7059" LastActivityDate="2020-08-31T10:35:19.473" Title="Paradigm for (repeated) use of PDP-10 indirect bit" Tags="&lt;memory-layout&gt;&lt;pdp-10&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16010" PostTypeId="2" ParentId="16008" CreationDate="2020-08-30T16:19:01.850" Score="5" Body="&lt;p&gt;It might be useful in indirect threaded code.  This is a contrived example based on my brief 45-years-ago acquaintance with a Snobol4 implementation (Macro Spitbol - Dewar and McCann).&lt;/p&gt;&#xA;&lt;p&gt;Consider that each statement is compiled into a sequence of 'code objects', each of which contains some standard attributes and also a pointer to the (fixed per type of code object) body of code that implements the operation -- such as a pattern match -- required by the code object.&lt;/p&gt;&#xA;&lt;p&gt;The whole program is a list of addresses of code objects. Execution proceeds as a sequence of jumps to the actual code.  We start by jumping to the first piece of actual code, which does its thing and then jumps to the successor.&lt;/p&gt;&#xA;&lt;p&gt;This can be handled by multilevel indirection.  In pseudocode:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; compiled user program&#xA;&#xA;codeobj1: &#xA;   @actualCode1&#xA;   blah&#xA;   blah&#xA;&#xA;codeobj2:&#xA;   @actualCode2&#xA;   mumble&#xA;   mumble&#xA;&#xA;userprog:&#xA;   @codeobj1&#xA;   @codeobj2&#xA;    :&#xA;    :&#xA;&#xA;; standard stuff&#xA;&#xA;start:&#xA;   movei ptr,userprog&#xA;   jump @ptr&#xA;&#xA;actualcode1:&#xA;   ...&#xA;   increment ptr ; or set it, for 'goto'&#xA;   jump @ptr &#xA;&#xA;actualcode2:&#xA;   ...&#xA;   increment ptr &#xA;   jump @ptr &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Having made all that up, I don't know if the TOPS-10 version actually made use of multiple-level indirection. The compiler was written in MINIMAL, a machine-independent macro assembly language designed for SPITBOL implementation, which was then translated into a target assembly language.  The translator from MINIMAL to MACRO-10 would have to recognize the possibility of using indirect chains.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-08-30T16:19:01.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16012" PostTypeId="2" ParentId="15945" CreationDate="2020-08-30T19:52:57.573" Score="1" Body="&lt;ul&gt;&#xA;&lt;li&gt;Basis108 — an Apple II clone which came without basic ROMs but a basic on floppy. You had to load it before Apple DOS.&lt;/li&gt;&#xA;&lt;li&gt;KC85 and KC87 — Z80-based computers from the GDR, they booted from tape.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2020-08-30T19:52:57.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16013" PostTypeId="2" ParentId="16006" CreationDate="2020-08-30T20:08:18.857" Score="12" Body="&lt;p&gt;Although the question is already answered in great detail above, just wanted to share that I fixed almost the same issue some 11 years ago with an SE/30 found in the trash, which was caused by corrosion of PCB traces, and simply fixed by soldering. Not sure if I used wires, or simply put solder on them. (I also replaced all caps I could see as they were clearly getting old.)&lt;/p&gt;&#xA;&lt;p&gt;So this may be an easy fix! Pictures are just quick snapshots of 2009 iPhone 3G quality (blurry etc), apologies for that, but you can still see what happened:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hZ6kt.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hZ6kt.jpg&quot; alt=&quot;interesting 4x repeat of every 4 lines&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;interesting 4x repeat of every 4 lines&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/H70Gq.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/H70Gq.png&quot; alt=&quot;in the middle, trace interruptions are clearly visible&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;in the middle, corrosion and trace interruptions are clearly visible above UD8 and UE8.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MBdfU.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MBdfU.png&quot; alt=&quot;fixed&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;fixed! Too bad I don't speak this language.&lt;/p&gt;&#xA;" OwnerUserId="19210" LastActivityDate="2020-08-30T20:08:18.857" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16014" PostTypeId="2" ParentId="5911" CreationDate="2020-08-31T05:32:41.597" Score="4" Body="&lt;p&gt;From the Feb '66 maintenance manual:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/J5LiN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/J5LiN.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19212" LastEditorUserId="611" LastEditDate="2020-08-31T08:06:40.737" LastActivityDate="2020-08-31T08:06:40.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16015" PostTypeId="2" ParentId="16008" CreationDate="2020-08-31T10:35:19.473" Score="1" Body="&lt;p&gt;I can think of a potential use of multiple level indirect addressing.&lt;/p&gt;&#xA;&lt;p&gt;It has to do with accessing a single cell in a multidimensional array.  If we have a three dimensional array A,  and we want to access cell A(7, 3, 8).  We have to figure out what address that's located at,  relative to some base address called, say, ABASE.&lt;/p&gt;&#xA;&lt;p&gt;The classical way you go about doing this is by doing some address arithmetic.  You take the first index, 7 subtract 1 from it (assuming indexes begin at 1 as in Fortran), multiply by the size of the second dimension,  now add 3 (maybe minus 1) to that,  multiply by the size of the third dimension,  and add 8  (maybe minus 1) to that.  Finally multiply by the cell size if the cell size is larger than 1 word.  Now you have the offset of the desired address from the base address ABASE of the array.  (Unless I've made a mistake in the above).&lt;/p&gt;&#xA;&lt;p&gt;Anyway, it's a whole lot of work, and it takes a considerable amount of time.  If you start doing millions of references to a large array,  we're talking hours of compute time here.&lt;/p&gt;&#xA;&lt;p&gt;There is a faster way, using multiple level indirection,  and referencing an accumulator in the index field. This requires auxiliary data structures to be set up when the array is constructed.  These auxiliary data structures have the indirect bit set (except for the lowest level), and reference some accumulator in the index field.&lt;/p&gt;&#xA;&lt;p&gt;The top level auxiliary has one entry per possible value of the first index,  let's say 20,  It has the form:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;@ABASE2+x(B).  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where ABASE2 is the base address for the second level auxiliary structure,  B is one of the accumulators used as an index register and X is some offset that I'm too lazy to figure out.&lt;/p&gt;&#xA;&lt;p&gt;The second layer of auxiliary structure might have the form:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;@ABASE3+y(C)  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And the third level auxiliary points to one the cells as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; ABASE+ z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Where Z is some multiple of the cell size.&lt;/p&gt;&#xA;&lt;p&gt;Now, if you do:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; MOVEI A, 6&#xA; MOVEI B, 2&#xA; MOVEI C, 7&#xA; MOVEI D, @ABASE1(A)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;what happens is that A selects the seventh entry in ABASE1,  which selects the third entry in ABASE2, which selects the eighth entry in ABASE3, which points to the desired address somewhere in ABASE,  the array itself.&lt;/p&gt;&#xA;&lt;p&gt;It's awfully complicated sounding,  and I would hate to implement it with my tired old brain,  but it runs faster than doing all the address arithmetic at run time.&lt;/p&gt;&#xA;&lt;p&gt;It also requires extra memory to hold the auxiliaries.  This is similar to the way a B-TREE index to a table requires extra space in a database.&lt;/p&gt;&#xA;&lt;p&gt;What I do not know is whether any of the third generation languages, like Fortran or Algol, ever employed this technique on the PDP-10.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2020-08-31T10:35:19.473" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16016" PostTypeId="2" ParentId="15994" CreationDate="2020-08-31T14:49:24.833" Score="2" Body="&lt;p&gt;Yes, it was released in 1995, as other answers demonstrate through references.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But I distinctly remember thinking that it was late, back at that time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yup.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But is my memory incorrect?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No.&lt;/p&gt;&#xA;&lt;p&gt;In fact, this is WHY the product called Windows 95 got the name that it did.&lt;/p&gt;&#xA;&lt;p&gt;People were so fed up with the delays for something initially slated for 1993, that when Microsoft was going to again announce a delay from the intended Spring 1995 release, they also announced the formal name change.  The point was to really, really emphasize that yes, they really are going to get this thing out in 1995.  Because, as you correctly remembered, they were quite late.&lt;/p&gt;&#xA;&lt;p&gt;By the way, shortly before Windows 95's release, OS/2 was actually outselling Microsoft Windows.  Microsoft might not have had the success they did with Windows if they ended up delaying the product significantly, again.&lt;/p&gt;&#xA;&lt;p&gt;Of course, the reality is, they did ship this in 1995.  And that initial version wouldn't run for more than 49.7 days (without requiring a reboot) because of one of the product's uncaught bugs.  I believe it also did not come with Microsoft Internet Explorer.  Some features that many people think of as being part of Windows were actually released in a separate product called the &amp;quot;Windows 95 Plus!&amp;quot; pack, as a sold add-on which contained the Internet Jumpstart Kit including Microsoft Internet Explorer, and DriveSpace (which was previously part of MS-DOS 6.2 and 6.22), System Agent (later renamed to Task Scheduler), and other items like &amp;quot;graphical improvements such as anti-aliased screen fonts, full-window drag&amp;quot; (to quote &lt;A HREF=&quot;https://en.wikipedia.org/wiki/Microsoft_Plus!#Microsoft_Plus!_for_Windows_95&quot; rel=&quot;nofollow noreferrer&quot;&gt;WikiPedia's article for &amp;quot;Microsoft Plus!&amp;quot;, section called &amp;quot;Microsoft Plus! for Windows 95&lt;/A&gt;).  Perhaps such simplification helped to enable the greater focus on the larger operating system to be able to meet the desired target date.&lt;/p&gt;&#xA;&lt;p&gt;So, in summary, Microsoft managed to get the thing out by 1995 by releasing a not-quite-polished-real-well version.&lt;/p&gt;&#xA;" OwnerUserId="419" LastEditorUserId="419" LastEditDate="2020-09-01T13:33:36.290" LastActivityDate="2020-09-01T13:33:36.290" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16017" PostTypeId="1" AcceptedAnswerId="16021" CreationDate="2020-08-31T16:04:54.173" Score="2" ViewCount="243" Body="&lt;p&gt;Urgently need a copy of Motorola Application Note AN-754 &amp;quot;Device Operation and System Implementation of the Asynchronous Serial Interface Adapter&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I have two boards from college days (1979) one is a MC6809 and the other is a MC6802. Both have terminal access via RS-232 through the ACIA MC6850.&lt;/p&gt;&#xA;&lt;p&gt;I need sample I/O code to manage bi-directional communication to get the boards up.&lt;/p&gt;&#xA;" OwnerUserId="19218" LastEditorUserId="576" LastEditDate="2020-09-01T19:39:02.647" LastActivityDate="2020-09-01T19:39:02.647" Title="Where can I find the Motorola Application Note AN-754?" Tags="&lt;6809&gt;&lt;6800&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16018" PostTypeId="1" AcceptedAnswerId="16022" CreationDate="2020-08-31T16:48:55.763" Score="1" ViewCount="219" Body="&lt;p&gt;I need a code listing for 6802 (or 6809) to initialize and set the 6850 ACIA into bidirectional serial I/O mode.&lt;/p&gt;&#xA;&lt;p&gt;I have two vintage boards and need to get the ports working and connected before I can do anything with them.&lt;/p&gt;&#xA;&lt;p&gt;The relevant Motorola App Note is missing from my collection (AN-754), and everything else I have points to that.&lt;/p&gt;&#xA;&lt;p&gt;Most references talk about the registers, but not how poll/monitor or control flow...code&lt;/p&gt;&#xA;" OwnerUserId="19218" LastEditorUserId="4025" LastEditDate="2020-09-04T05:44:16.283" LastActivityDate="2020-09-04T05:44:16.283" Title="How to code for bidirectional I/O for MC6850 ACIA (680x Assembler)" Tags="&lt;6800&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16019" PostTypeId="2" ParentId="16006" CreationDate="2020-08-31T16:58:52.107" Score="3" Body="&lt;p&gt;and the most common cause of corrosion and trace shorts is capacitors gone bad. There are a couple of people on the net who specialize in Mac &amp;quot;Re-Capping&amp;quot; specifically because Apple used some known bad caps for a while.&#xA;Google &amp;quot;Macintosh recapping&amp;quot;. Here's but one.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.maccaps.com/MacCaps/Repair_Service.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.maccaps.com/MacCaps/Repair_Service.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19218" LastActivityDate="2020-08-31T16:58:52.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16020" PostTypeId="2" ParentId="16017" CreationDate="2020-08-31T17:03:26.923" Score="4" Body="&lt;p&gt;While I couldn't find an online copy as well, so I had to check the dead tree issue :) It won't make you happy, as there is no sophisticated example given. Only two rather simple flow diagrams and a dotzend instructions loading the registers. Most text is spend repeating the datasheet.&lt;/p&gt;&#xA;&lt;p&gt;Then again it shouldn't be a huge task to get a 6850 running. It is a no frills serial port. Everything needed is nicely described in the &lt;a href=&quot;http://www.cpcwiki.eu/imgs/3/3f/MC6850.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet&lt;/a&gt;. There are no suprises.&lt;/p&gt;&#xA;&lt;p&gt;There are countless examples out there how to use, like in Leventhal's &lt;a href=&quot;https://archive.org/details/6809_Assembly_Language_Programming_by_Lance_Leventhal/page/n307/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;6809 Assembly book&lt;/a&gt;. Its examples are similar to the ones in the app-note. You might as well want to check the manuals for the boards you have, as Motorola used to provide rather detailed manuals. In fact, Leventhal did as well write books for some Motorola boards, like &lt;em&gt;&lt;a href=&quot;https://archive.org/details/microcomputer-experimentation-with-the-motorola-mek-6800-d-2-lance-a-leventhal-1981/page/330/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Experimentation with the Motorola MEK 6800D2&lt;/a&gt;&lt;/em&gt;, which goes into greater detail than the app-note.&lt;/p&gt;&#xA;&lt;p&gt;Of course, if your problem is more exotic than straight serial communication, why not post a question about?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-31T17:34:31.280" LastActivityDate="2020-08-31T17:34:31.280" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16021" PostTypeId="2" ParentId="16017" CreationDate="2020-08-31T17:04:02.043" Score="8" Body="&lt;p&gt;&lt;a href=&quot;https://archive.org/details/Motorola-SeminarsandApplicationBooksMCUandMPUApplicationsManualOCR&quot; rel=&quot;noreferrer&quot;&gt;The following book at archive.org&lt;/a&gt; contains several applications notes.&#xA;Among those you have AN-754 on pp. 21-32.&lt;/p&gt;&#xA;" OwnerUserId="10565" LastEditorUserId="7347" LastEditDate="2020-08-31T17:37:21.117" LastActivityDate="2020-08-31T17:37:21.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16022" PostTypeId="2" ParentId="16018" CreationDate="2020-08-31T18:00:21.160" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;initialize and set the 6850 ACIA into bidirectional serial I/O mode.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Google &amp;quot;6850 ACIA&amp;quot; and look at the pin out.  There is a &amp;quot;Tx Data&amp;quot; line and an &amp;quot;Rx Data&amp;quot; line on the chip.  It's already bidirectional.&lt;/p&gt;&#xA;&lt;p&gt;If you want it &lt;em&gt;unidirectional&lt;/em&gt; you have to not do one of these things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;When you setup the chip, you have to put a 1 into bit 7 of the Control Register to &amp;quot;Receive Interrupt Enable&amp;quot;.  You need an IRQ routine that will check bit 0 of the Status Register to ensure that's what caused the IRQ and then get the data from the Receive Data register and put it into a buffer.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I'm guessing if you write a byte to the Transmit Data Register, the ACIA will start sending it and generate an IRQ when it's done.  Your IRQ routine needs to check bit 1  of the Status Register to ensure that's what caused the IRQ and then put new data from a buffer into the Transmit Data Register.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It does look like you have to &amp;quot;Master Reset&amp;quot; the chip by writing 1s into the &amp;quot;Counter Divide&amp;quot; bits and then write 00, 10, or 01 - not sure what the correct value is for your boards/application.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but not how poll/monitor or control flow...code&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;On a CPU of this type, you're basically having to build a small system that feeds/eats bytes in/out of the ACIA from a buffer that is separately filled using other routines.  This is too application specific to make general code for.&lt;/p&gt;&#xA;" OwnerUserId="746" LastActivityDate="2020-08-31T18:00:21.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16023" PostTypeId="1" CreationDate="2020-08-31T18:07:28.303" Score="8" ViewCount="526" Body="&lt;p&gt;I have an SE/30 and want to get some software off of vintage-software internet sites. The machine does not have an AppleTalk card, Ethernet card or even a modem attached. What is the best method of getting software from these websites to the Mac' ? ( I have tried an old MacAlly USB-attached floppy drive, attached to my Windows 7 system to generate a 1.4M floppy, but the SE/30 (OS 6.0.1 and 7.1) will not read data on the generated floppy, and insists on initializing it).&lt;/p&gt;&#xA;" OwnerUserId="19217" LastEditorUserId="447" LastEditDate="2020-09-01T08:06:20.927" LastActivityDate="2020-09-01T08:06:20.927" Title="How to transfer software from website to a Classic (SE/30) Macintosh" Tags="&lt;apple-macintosh&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16024" PostTypeId="2" ParentId="16018" CreationDate="2020-08-31T18:21:28.210" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Most references talk about the registers,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;'cause that's all there is.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but not how poll/monitor or control flow...code&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Polling is done by reading the status register.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;To see if data has been received, one reads the status register (Offset 0) and checks bit 0:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If set, a character has been received, which can now be read from the data register (Offset 0).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To see i data can be send, again the status register is to be read, just this time bit 1 tells the story:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If set, the resister is empty, and a character can written into (to be send).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Or, as pseudo C like code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;while(1)&#xA;{&#xA;  char status = read_status_port;&#xA;  if(status &amp;amp; 1)&#xA;    read_byte_from_ACIA();&#xA;  if(status &amp;amp; 2)&#xA;    write_byte_to_ACIA();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Yes, it's that simple. Of course I can't tell how to handle your buffers, detect transmission end or alike. this is just the serial handling. Everythign else depends on your application structure and goal ... as usual.&lt;/p&gt;&#xA;&lt;p&gt;And yes, one could get into background operation with interrupts and alike to operate in parallel with some program and so on, but i guess that is out of scope here.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-08-31T18:21:28.210" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16025" PostTypeId="2" ParentId="16023" CreationDate="2020-08-31T18:50:48.657" Score="5" Body="&lt;p&gt;Happy to be shown wrong by other answers, but I suspect you're going to need some additional hardware. Some options I see:&lt;/p&gt;&#xA;&lt;h2&gt;Low level floppy controller&lt;/h2&gt;&#xA;&lt;p&gt;The controllers on the USB floppy drives available these days tend to only support a narrow range of DOS formatting and not much else. These show up as drive letters in Windows and are convenient to use but not very powerful.&lt;/p&gt;&#xA;&lt;p&gt;However there are a number of projects that provide special hardware that is also USB but use their own apps to actually access the disks — i.e. it won't show up as a &amp;quot;drive&amp;quot; but instead you use custom utility programs to read and write raw images to the disks. Check out &lt;a href=&quot;https://github.com/keirf/Greaseweazle/wiki/Hardware-Connection&quot; rel=&quot;nofollow noreferrer&quot;&gt;Greaseweazle&lt;/a&gt; or &lt;a href=&quot;http://cowlark.com/fluxengine/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;FluxEngine&lt;/a&gt; or &lt;a href=&quot;https://www.cbmstuff.com/proddetail.php?prod=SCP&quot; rel=&quot;nofollow noreferrer&quot;&gt;SuperCard Pro&lt;/a&gt; for examples. There may be information on their forums or other blog posts on a good workflow (including suggested utilities) for taking the vintage software downloads you have and converting them to the disks you want.&lt;/p&gt;&#xA;&lt;h2&gt;Floppy emulator&lt;/h2&gt;&#xA;&lt;p&gt;Another trick is to actually replace the floppy drive in your SE/30 with something that reads off a USB flash drive or SD card! In this case you buy a &lt;a href=&quot;http://www.gotekemulator.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;GoTek floppy emulator&lt;/a&gt; (physical hardware) and replace its factory firmware with something like &lt;a href=&quot;https://github.com/keirf/FlashFloppy&quot; rel=&quot;nofollow noreferrer&quot;&gt;FlashFloppy&lt;/a&gt; or &lt;a href=&quot;http://hxc2001.free.fr/floppy_drive_emulator/index.html#Download_HxCFirmwareForGotek&quot; rel=&quot;nofollow noreferrer&quot;&gt;buy an HxC license&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Then you can configure the GoTek to act just like the original floppy drive did, but instead of using actual floppies you stick in a flash drive full of disk image files and the Gotek lets you choose one of them at a time for the SE/30 to see.&lt;/p&gt;&#xA;&lt;p&gt;Both of these options (the &amp;quot;raw&amp;quot; floppy drive controller, or the &amp;quot;fake&amp;quot; floppy drive) have pretty good support for common emulator formats, that is if there is a forum full of people who like to play games in an SE/30 emulator then there's probably also a utility available to convert from the emulator format to the type of file that the controller or aftermarket GoTek firmware support.&lt;/p&gt;&#xA;&lt;h2&gt;Macintosh from between eras&lt;/h2&gt;&#xA;&lt;p&gt;Otherwise can you get your hands on a Macintosh that still has a floppy, but was released in the days when the Internet was becoming well supported?&lt;/p&gt;&#xA;&lt;p&gt;I used something like a Power Macintosh 5200 LC or Performa 5430 in the opposite direction once, to make a backup of some of the original wiki HyperCard stacks. The machine I had was new enough to have an ethernet card available and run a version of Netscape that could post a file to a basic HTML form. But it was old enough to have the floppy drive and understand its old formatting.&lt;/p&gt;&#xA;&lt;p&gt;While many current download sites probably don't render well on older browsers, and you might have issues extracting the compressed downloads or similar, but in the worst case you can do all the processing on a modern computer and set up your own very simple plain HTML page with links to the files you need.&lt;/p&gt;&#xA;&lt;h2&gt;Cable and special utilities?&lt;/h2&gt;&#xA;&lt;p&gt;There may also be software (names like &amp;quot;Kermit&amp;quot; and &amp;quot;Laplink&amp;quot; come to mind) that works with one of the serial/AppleTalk ports to send files back and forth with one half supported on modern computer hardware/OS. See e.g. &lt;a href=&quot;https://www.macintoshrepository.org/articles/35--connecting-two-macs-with-a-serial-connection&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.macintoshrepository.org/articles/35--connecting-two-macs-with-a-serial-connection&lt;/a&gt; or &lt;a href=&quot;https://www.reddit.com/r/VintageApple/comments/eeu78e/is_it_possible_to_send_files_to_mac_se_via_serial/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.reddit.com/r/VintageApple/comments/eeu78e/is_it_possible_to_send_files_to_mac_se_via_serial/&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You'll still probably need to purchase at least one sort of cable and/or adapters (e.g. a USB to serial converter) and there's a bootstrapping problem here because you'll need to get at least one program — the file transfer utility — onto the SE/30 before you can use that to load all the other content.&lt;/p&gt;&#xA;" OwnerUserId="13904" LastEditorUserId="13904" LastEditDate="2020-08-31T19:01:49.617" LastActivityDate="2020-08-31T19:01:49.617" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16026" PostTypeId="1" AcceptedAnswerId="16029" CreationDate="2020-08-31T19:42:05.543" Score="4" ViewCount="202" Body="&lt;p&gt;While COBOL was the first highly successful business-oriented programming language, several business-oriented languages were designed before it in the late fifties, including Honeywell-800 Business Compiler a.k.a. Fully Automated Compiling Technique (FACT).&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&quot;https://books.google.ie/books?id=Hy-jBQAAQBAJ&amp;amp;lpg=PA199&amp;amp;ots=jl5N5juYV0&amp;amp;dq=Anonymous%20(1960a).%20March.%20Editorial---The%20High%20Cost%20of%20Computer%20Babble.%20Management%20and%20Business%20Automation.&amp;amp;lr=&amp;amp;pg=PA201&amp;amp;redir_esc=y#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;History of Programming Languages page 209&lt;/a&gt; Jean Sammet remarks on the comparison between that language and the in-development COBOL:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;since ... FACT was really a good and advanced language, any technical comparison would usually be on the side of FACT. However, the difficulties of dealing with machine independence, and the interaction of competing manufacturers certainly made the creation of a &lt;em&gt;common&lt;/em&gt; business language orders of magnitude more difficult.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(Emphasis in the original.)&lt;/p&gt;&#xA;&lt;p&gt;While I can certainly see that FACT didn't need to be machine-independent and COBOL did, and that machine independence would require a little more care, I am very surprised by the assertion that it was 'orders of magnitude more difficult' (even allowing for hyperbole). I would expect, for example, a business-oriented language to specify data in characters and decimal digits (as COBOL does), therefore naturally not care about things like byte size, endianness, or ones versus twos complement signed integers, that might cause trouble for a lower-level language. But perhaps there were other particular difficulties at that time, that I am not used to taking into account.&lt;/p&gt;&#xA;&lt;p&gt;What exactly was machine-specific about FACT? What were the big difficulties in achieving machine independence?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2020-08-31T20:01:31.603" LastActivityDate="2020-08-31T22:46:04.683" Title="What was machine-specific about Honeywell FACT?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;cobol&gt;&lt;honeywell&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16027" PostTypeId="1" AcceptedAnswerId="16028" CreationDate="2020-08-31T20:31:08.000" Score="4" ViewCount="293" Body="&lt;p&gt;COBOL was the first exercise in design of a programming language by a committee of representatives from competing companies. irrespective of one's opinion of the technical quality of the end result, there is no doubt that it was highly successful from both an organizational and subsequent commercial perspective.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://books.google.ie/books?id=Hy-jBQAAQBAJ&amp;amp;lpg=PA199&amp;amp;ots=jl5N5juYV0&amp;amp;dq=Anonymous%20(1960a).%20March.%20Editorial---The%20High%20Cost%20of%20Computer%20Babble.%20Management%20and%20Business%20Automation.&amp;amp;lr=&amp;amp;pg=PA201&amp;amp;redir_esc=y#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;History of Programming Languages page 211&lt;/a&gt; quotes one dissenting view from the Minneapolis-Honeywell representative, objecting that the specification the committee had produced, was deficient in four ways. Some of those are understandable, e.g. lack of a built-in sort capability (they were under time pressure; you have to draw the line somewhere).&lt;/p&gt;&#xA;&lt;p&gt;But I'm confused about &amp;quot;the inability to process card input files directly&amp;quot;. What, exactly, makes COBOL, even the first version thereof, unable to process card input files directly? I thought 'read a file of records e.g. from punched cards' was not only possible but extremely common operation in COBOL. Does the word 'directly' have a significance that I am not grasping? Is the dissenter talking about e.g. direct access to I/O registers for the card reader? Is the complaint that COBOL still needs support from some assembly language systems code for low-level I/O?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-08-31T22:37:41.777" Title="COBOL and processing card files directly" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;cobol&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16028" PostTypeId="2" ParentId="16027" CreationDate="2020-08-31T21:57:08.163" Score="5" Body="&lt;p&gt;Processing card input is among the most basic functions COBOL had to provide to get a hold in data processing - computers were meant to be integrated and improve existing card procedures.&lt;/p&gt;&#xA;&lt;p&gt;Now, reading past the citation gives &lt;a href=&quot;https://history.computer.org/pioneers/sammet.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ms. Sammet's&lt;/a&gt; impression:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4zMF3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4zMF3.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I would think that the use of 'inappropriate' does indicate that the mentioned 'direct processing' of card input is something quite out of the intended scope of COBOL.&lt;/p&gt;&#xA;&lt;p&gt;COBOL is all about machine independent processing of (decimal) integer and text. The later mostly by moving and comparing. To comply with this important goal, the language itself does not define a specific character set to be used, nor does it provide any way of binary manipulation of characters. All input or output was always thought to be opaque  characters - not to mention, that back then most, at the time, were printable anyway - the number of non printable characters was, at the time, essentially zero.&lt;/p&gt;&#xA;&lt;p&gt;With this in mind, the request of 'direct processing of card files' could refer to being able to read cards as image (aka the holes), instead of characters (*1). It's obvious that this feature could be useful to read 'foreign' data - while at the same time may introduce many possible ways to break code and programs, making them quite machine dependent. It is easy to see why this proposal might have received a lot of flak.&lt;/p&gt;&#xA;&lt;p&gt;This interpretation gets some support when looking at the way how &lt;a href=&quot;https://en.wikipedia.org/wiki/FACT_(computer_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;FACT&lt;/a&gt; (*2), Honeywell's business language, defined fields in terms of a mode specifier that included lots of punch card based definitions, leaving a lot of machine specific interpretation.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q7Ycq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q7Ycq.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;More so the input definition allowed not only the dame types for each column/field, but enabled definition of quite complex relations including redefinition of characters. For someone familiar with the way punch cards were used before computers and during early computerization, this may come extreme handy to read and process 'unusual' cards - like all the variant combinations users had make up for their specific purpose ... never underestimate the creativity of a user to find additional uuse cases :)&lt;/p&gt;&#xA;&lt;p&gt;Just a guess considering the time, history and general workings in the punch card age.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Optional even the ability to manipulate these data (on 'hole' level) and output arbitrary images again.&lt;/p&gt;&#xA;&lt;p&gt;*2 - IMHO COBOL inherited way more from FACT than from any other language including the often praised FLOWMATIC.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-08-31T22:37:41.777" LastActivityDate="2020-08-31T22:37:41.777" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16029" PostTypeId="2" ParentId="16026" CreationDate="2020-08-31T22:10:37.357" Score="3" Body="&lt;p&gt;This is a partial answer at best, and guesswork as well.&lt;/p&gt;&#xA;&lt;p&gt;Jean Sammets's &lt;a href=&quot;https://www.semanticscholar.org/paper/Programming-languages-history-and-fundamentals-Sammet/8e1fb77a1c2c8a170fdc8fa0e979e7a1a8beea1e&quot; rel=&quot;nofollow noreferrer&quot;&gt;Programming Languages: History and Fundamentals&lt;/a&gt; -- another book everyone here needs -- has a very brief section on FACT, pp327-328.  This might be relevant to the present question:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The implicit assumption is that people using FACT will have their data&#xA;on an input deck from which a tape must be created by the FACT system.&#xA;(A similar facility is available for paper-tape file data.)  The FACT&#xA;system does quite a bit of error checking as this conversion is taking&#xA;place.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;My inference from that is that programs are rather particular about data format, and this the language is implicitly tied to a system (rather than to hardware).&lt;/p&gt;&#xA;&lt;p&gt;How that relates to the language itself, rather than the sole implementation of the language, I can't guess.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://bitsavers.org/pdf/honeywell/fact/160-2M_FACT_spec_1960.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;FACT language manual&lt;/a&gt; describes file handling.  File descriptions on cards are used to create some sort of data dictionary that is written to the tape that will hold the file.&lt;/p&gt;&#xA;&lt;p&gt;That seems to be a constraint of the language, and what data it can process -- only files created by the same language? -- and not something truly hardware-specific. But perhaps that was enough to disqualify FACT.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-08-31T22:46:04.683" LastActivityDate="2020-08-31T22:46:04.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16030" PostTypeId="2" ParentId="16023" CreationDate="2020-09-01T02:56:33.707" Score="8" Body="&lt;p&gt;No additional hardware is required. The SE/30 has a high density floppy drive that is compatible with USB floppy drives.&lt;/p&gt;&#xA;&lt;p&gt;In System 7.1, you cannot read FAT-formatted disks by inserting them in the Finder. You need to use the Apple File Exchange application that comes on one of the supplemental system install disks.&lt;/p&gt;&#xA;&lt;p&gt;System 7.5 introduced PC Exchange, which allows FAT floppies to be mounted in the Finder.&lt;/p&gt;&#xA;&lt;p&gt;If you don't already have Apple File Exchange or System 7.5 with PC Exchange, you can write a Mac-formatted raw disk image containing them to a floppy using Windows and your USB floppy drive.&lt;/p&gt;&#xA;&lt;p&gt;You can either download raw disk images containing the software you desire or create them yourself using HFVExplorer. HFVExplorer can also write the image to the floppy for you.&lt;/p&gt;&#xA;&lt;p&gt;I have heard of people who couldn't get HFVExplorer to write to physical floppies. The program is very old and the source code is lost. But if it fails, you can use any raw disk writing tool you want once you have the images prepared. HFVExplorer may be convenient in that it (probably? iirc) supports Disk Copy images that you would otherwise have to strip the header from.&lt;/p&gt;&#xA;" OwnerUserId="94" LastEditorUserId="94" LastEditDate="2020-09-01T04:57:57.233" LastActivityDate="2020-09-01T04:57:57.233" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16031" PostTypeId="1" CreationDate="2020-09-02T03:45:06.543" Score="26" ViewCount="3381" Body="&lt;p&gt;All the technology in my house is modern, but I want to build a dialup network that I can use to produce sounds from Bell 101/103 (if I can find the proper softmodem) to V.92bis. I honestly don't know where to start here, but I do have multiple computers. Would I just purchase two USB modems and put them together? How could I record the sound from them, and command them to use specific protocols? Could I shift between using them for internet passthrough and using them as very literal modems for terminals?&lt;/p&gt;&#xA;&lt;p&gt;EDIT: Also, is there any software I can use to generate dial-up tones from V.8(bis) to V.92 without need for a USB modem? It seems to me it should be obviously available somewhere, but the best I've found is minimodem, which - although it's great - is nowhere near enough.&lt;/p&gt;&#xA;" OwnerUserId="19229" LastEditorUserId="19229" LastEditDate="2020-09-02T20:30:43.093" LastActivityDate="2020-09-11T09:34:34.467" Title="How can I construct a dial-up network in my home, purely for the kicks?" Tags="&lt;internet&gt;&lt;modem&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16032" PostTypeId="2" ParentId="16018" CreationDate="2020-09-02T07:57:07.040" Score="0" Body="&lt;p&gt;Here is my code for 6809 / 6850 for &lt;a href=&quot;https://github.com/omenmicro/kilo&quot; rel=&quot;nofollow noreferrer&quot;&gt;my homebrew computer&lt;/a&gt;. Hope it helps.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, the communication is bidirectional &amp;quot;by nature&amp;quot;, the ACIA can transmit and receive data at the same moment (but only one byte at once).&lt;/p&gt;&#xA;&lt;p&gt;You can combine both those routines to one &amp;quot;transmit-and-read-if-necessary&amp;quot; and call it often, or by an interrupt.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; ; serial&#xA;&#xA;ACIA        EQU     $83fe  ;base address&#xA;ACIAC       EQU     ACIA   ;control register&#xA;ACIAS       EQU     ACIA   ;status register&#xA;ACIAD       EQU     ACIA+1 ;data register&#xA;&#xA;INIT:       LDA     #$15 &#xA;            STA     ACIAC &#xA;&#xA;ACIA_TDRE   EQU     02h &#xA;ACIA_RDRF   EQU     01h &#xA;&#xA;&#xA;; send one byte from A to serial&#xA;&#xA;SEROUT:             &#xA;            PSHS    a,b &#xA;SEROUTL:            &#xA;            LDB     ACIAS &#xA;            ANDB    #ACIA_TDRE &#xA;            BEQ     seroutl &#xA;            STA     ACIAD &#xA;            PULS    a,b &#xA;            RTS     &#xA;&#xA;; Wait for serial char to read&#xA;&#xA;SERIN:              &#xA;            LDA     ACIAS &#xA;            ANDA    #ACIA_RDRF &#xA;            BEQ     serin &#xA;            LDA     ACIAD &#xA;            RTS     &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-09-02T07:57:07.040" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16033" PostTypeId="2" ParentId="16031" CreationDate="2020-09-02T08:05:12.153" Score="2" Body="&lt;p&gt;Some modems can drive a reasonably short dead line and talk to another modem with a direct connection.  In that case you just connect them together.  On the software side, when configured correctly it'd behave much like a direct serial connection.  Both modems would have to be configurable to pick up and switch directly into the appropriate mode, since there's no phone service.  This was usually done with the appropriate AT commands, which would be documented in the manual.  Such modems did, and maybe still do exist, though I can't advise you on models.&lt;/p&gt;&#xA;&lt;p&gt;As to recording their sound, the only obvious way to me is to use a line splitter and a phone adapter to microphone input adapter.  But this approach may affect their ability to operate at higher speeds (or at all, in this configuration).&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-09-02T08:05:12.153" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16034" PostTypeId="2" ParentId="7270" CreationDate="2020-09-02T08:54:33.230" Score="10" Body="&lt;p&gt;Because it was already reserved for batch file command-line parameters.&lt;/p&gt;&#xA;&lt;p&gt;Early DOS versions (1.x) did not support environment variables at all. They did, however, support batch files and parameter substitution using the &lt;code&gt;%&lt;i&gt;n&lt;/i&gt;&lt;/code&gt; syntax (&lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/04a3d20ff411409ab98474892b2bb1713bde0f7f/v1.25/source/COMMAND.ASM#L683-L692&quot; rel=&quot;nofollow noreferrer&quot;&gt;source&lt;/a&gt;). The character &lt;code&gt;%&lt;/code&gt; was already reserved for that purpose, and already had to be escaped as &lt;code&gt;%%&lt;/code&gt; in batch files; it made sense to re-use it for variable substitution, as the two features are quite similar.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;$&lt;/code&gt; character, on the other hand, was already in use in names of temporary files, for example in EDLIN (&lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/04a3d20ff411409ab98474892b2bb1713bde0f7f/v2.0/source/EDLIN.ASM#L560-L573&quot; rel=&quot;nofollow noreferrer&quot;&gt;source&lt;/a&gt;; the public source code is from the 2.0 version of DOS, but the &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/04a3d20ff411409ab98474892b2bb1713bde0f7f/v1.25/bin/EDLIN.COM&quot; rel=&quot;nofollow noreferrer&quot;&gt;binary in the &lt;code&gt;v1.25/bin/&lt;/code&gt; directory&lt;/a&gt; contains equivalent code, offset +0xd0 in the binary); subsequent DOS releases added more such uses. If the &lt;code&gt;$&lt;/code&gt; character were used for variables and the user wanted to delete a leftover temporary file with such a name (or, especially, if they wanted to have a batch file do it), the &lt;code&gt;$&lt;/code&gt; character would have to be escaped, which would be inconvenient (not to mention it would pose a slight backwards incompatibility). I am under the impression that Microsoft wanted to avoid adding more escape sequences to COMMAND.COM syntax, from the fact that for example they outright banished &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt; and &lt;code&gt;|&lt;/code&gt; from file names when pipes were introduced.&lt;/p&gt;&#xA;&lt;p&gt;Of course, that in turn raises the question why &lt;code&gt;%&lt;/code&gt; was used for batch file parameters instead of &lt;code&gt;$&lt;/code&gt;, like in the equivalent CP/M functionality provided by the SUBMIT command. Batch files are supported in MS-/PC DOS 1.x, but apparently not in 86-DOS 0.3; the &lt;a href=&quot;https://web.archive.org/web/20160409042609/http://www.patersontech.com/dos/docs/86_Dos_usr_03.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual&lt;/a&gt; makes no mention of it. So it appears the functionality was added sometime between those two versions; this is confirmed by the &lt;a href=&quot;http://antitrust.slated.org/www.iowaconsumercase.org/011607/0000/PX00001.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;86-DOS license agreement between Microsoft and Seattle Computer Products&lt;/a&gt;, which mentions ‘SUBMIT facility comparable to CP/M’ as one of the improvements to 86-DOS that Microsoft requested from SCP. Perhaps &lt;code&gt;%&lt;/code&gt; was chosen for reasons similar to the above; per the manual, 86-DOS 0.3 already contained EDLIN, and so we may surmise that &lt;code&gt;$&lt;/code&gt; was already being used as a file name character back then. But to be sure you’d probably have to ask Tim Paterson; otherwise your guess is as good as mine.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-09-22T08:49:56.310" LastActivityDate="2020-09-22T08:49:56.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16035" PostTypeId="1" AcceptedAnswerId="16038" CreationDate="2020-09-02T10:09:32.673" Score="13" ViewCount="1577" Body="&lt;p&gt;The Intel 4004 used MOS (metal–oxide–semiconductor) transistors.&lt;/p&gt;&#xA;&lt;p&gt;What has been the transistor types used in Intel processors onwards from the 4004 to 8085 to the x86 family of instruction set architectures?&lt;/p&gt;&#xA;&lt;p&gt;There are probably complications such as maybe some processors are composed of more than one transistor type or there may be more than say ten different transistor types, from the 4004 to present day. So if needed to simplify the answer detailing the main transistor types used or trends would be fine.&lt;/p&gt;&#xA;&lt;p&gt;Any commentary on advantages of a change of transistor type over the previous one is also welcome.&lt;/p&gt;&#xA;" OwnerUserId="15219" LastEditorUserId="15334" LastEditDate="2021-02-25T18:50:32.667" LastActivityDate="2021-02-25T18:50:32.667" Title="Intel processor transistor type evolution" Tags="&lt;cpu&gt;&lt;intel&gt;&lt;microprocessor&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16036" PostTypeId="2" ParentId="15495" CreationDate="2020-09-02T10:19:16.357" Score="18" Body="&lt;p&gt;I'm one of the developers of the Rekursiv. Its biggest problem was its recursive nature. Basically if a page fault happened while executing a (microcode, recursive) instruction it wasn't possible to abort execution of the instruction, issue a memory fault and switch to a different thread while the fault was serviced. Instead, the entire processor halted while the host machine (Sun 3) serviced the page fault, and then the Rekursiv carried on from where it had left off.&lt;/p&gt;&#xA;&lt;p&gt;Also, the fact that there were so many different memories made efficient use of RAM tricky, and there was no VMM on anything but the object-store (IIRC), so there was a distinct upper limit on the number of processes which could run.&lt;/p&gt;&#xA;&lt;p&gt;If we'd been able to integrate the entire CPU on one chip I think it would have been faster than the Sun, but we couldn't and so inter-chip communication delays probably halved what could have been achieved for execution rate. That and the fact that the board had no access to I/O of its own made getting to and from disk pretty slow.&lt;/p&gt;&#xA;&lt;p&gt;Finally, if any of us had had any actual previous experience designing high-speed digital circuits or even (gasp!) processors, we might have made it go a bit faster. But we didn't :-)&lt;/p&gt;&#xA;" OwnerUserId="19230" LastActivityDate="2020-09-02T10:19:16.357" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16037" PostTypeId="2" ParentId="16031" CreationDate="2020-09-02T12:19:58.677" Score="24" Body="&lt;p&gt;A/the correct solution would be to set up some sort of small local &lt;a href=&quot;https://en.wikipedia.org/wiki/Business_telephone_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;PBX&lt;/a&gt;. In the spirit of retro you can probably score an analogue PBX for not very much money and the mechanical ones are arguably even more fun to play with than retrocomputers because you can watch them working, but if you would like that bit to be somewhat smaller and more reliable than a clattering Strowger exchange and aren't intimidated by Linux, a couple of VoIP ATAs (&amp;quot;Analog(ue) Telephone Adaptor&amp;quot;) and a machine running something like bare &lt;a href=&quot;https://www.asterisk.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Asterisk&lt;/a&gt; or a full &lt;a href=&quot;https://www.freepbx.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FreePBX&lt;/a&gt; system would be how I'd do it. Or rather, how I did do it back in ~2005 for a substantially similar project to yours.&lt;/p&gt;&#xA;&lt;p&gt;For testing the PBX you may want to start with a pair of phones until you're satisfied that calls work. Then it's a case of plugging in the modems and calling from one to the other using a pair of terminals or terminal emulators. This may need some further tweaking of VoIP settings since high-speed modems are more picky than humans about sound quality, but for a local-only configuration it should work so long as you're using the G.711 codec.&lt;/p&gt;&#xA;&lt;p&gt;With VoIP, you should be able to easily configure a software &amp;quot;tap&amp;quot; and get a call recording in perfect digital quality. A more advanced analogue PBX should offer a tap feature, otherwise you're going to just have to dig out the croc clips and look for somewhere plausible to attach a tape recorder.&lt;/p&gt;&#xA;&lt;p&gt;If you're OK with something a bit jankier than going the full PBX route, connecting two phone sockets back-to-back and using a PP3 battery to provide (barely) line voltage is apparently sufficient to convince modems that they're connected to a phone line. You'll need to tell the caller to ignore the lack of dial tone and force the receiver to send &amp;quot;ATA&amp;quot; (in this context, that's a Hayes modem command) because there will be no ringing voltage to tell it there's an incoming call, but this may be enough. Again, some ingenuity may be required to get a recording.&lt;/p&gt;&#xA;&lt;p&gt;From here, if you want to &lt;em&gt;use&lt;/em&gt; it rather than just record the tones, it should be simple enough to install a BBS application on one machine and dial into it from the other. This is perhaps as far as a non-expert may wish to go.&lt;/p&gt;&#xA;&lt;p&gt;For the full late-90s dialup Internet experience, you get the fun(?) job of setting up a mini-ISP, probably on a Linux machine—doing this on the same machine that's running Asterisk should be fine—with at least some sort of (faked?) RADIUS login and PPP. Apart from the details regarding physical serial ports, this now falls outwith the scope of retrocomputing since modern broadband still involves PPP, RADIUS, etc, and in some devices you even get the pleasure(?) of using obscure, possibly even undocumented, Hayes modem commands to configure the connection.&lt;/p&gt;&#xA;&lt;p&gt;Note that you'll only be able to get up to V.34(bis) with a pair of analogue modems. V.90 and other &amp;quot;56K&amp;quot; technologies requires a digital connection at the ISP end. VoIP is that digital connection, but when I last looked into this a couple of years back, I could not find a suitable softmodem which could answer V.90 calls. (I briefly considered writing one, but it's a lot of work for little reward.) Previous work to record V.90 involved finding somebody with a decades-old ISDN modem bank and a suitable PSTN connection. I think they had to make international calls to Australia in the end, and the extra latency of going half way round the world meant that the tones sounded a bit off compared to memories of local dialup calls back in the day.&lt;/p&gt;&#xA;&lt;p&gt;One advantage of setting this up using VoIP rather than analogue is that it's much easier to connect to the wider world by signing up for a VoIP service and bridging the networks. Other interested people can then dial in to your system, or you can dial into theirs.&lt;/p&gt;&#xA;&lt;p&gt;If you are really into the idea of using an analogue PBX instead, &lt;a href=&quot;https://twitter.com/gewt/&quot; rel=&quot;nofollow noreferrer&quot;&gt;@gewt on Twitter&lt;/a&gt; (profile tagline &amp;quot;cat lady, but the cats are phones&amp;quot;) is a fellow fan of them and should be able to offer advice or point you at suitable units.&lt;/p&gt;&#xA;" OwnerUserId="80" LastEditorUserId="80" LastEditDate="2020-09-11T09:34:34.467" LastActivityDate="2020-09-11T09:34:34.467" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16038" PostTypeId="2" ParentId="16035" CreationDate="2020-09-02T12:24:08.847" Score="25" Body="&lt;p&gt;Here’s the list of main technologies used:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_4004&quot; rel=&quot;noreferrer&quot;&gt;4004&lt;/a&gt;: 10µm PMOS;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_4040&quot; rel=&quot;noreferrer&quot;&gt;4040&lt;/a&gt;: 10µm PMOS;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8008&quot; rel=&quot;noreferrer&quot;&gt;8008&lt;/a&gt;: 10µm PMOS;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8080&quot; rel=&quot;noreferrer&quot;&gt;8080&lt;/a&gt;: 6µm NMOS (faster than PMOS, and TTL-compatible);&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8085&quot; rel=&quot;noreferrer&quot;&gt;8085&lt;/a&gt;: 3.2µm NMOS, then HMOS (“H” variants);&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8086&quot; rel=&quot;noreferrer&quot;&gt;8086&lt;/a&gt;: 3.2µm NMOS, then HMOS (in three iterations) and &lt;a href=&quot;https://en.wikipedia.org/wiki/CHMOS&quot; rel=&quot;noreferrer&quot;&gt;CHMOS&lt;/a&gt; (static variants);&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80186&quot; rel=&quot;noreferrer&quot;&gt;80186&lt;/a&gt;: 3.2µm HMOS and CHMOS;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80286&quot; rel=&quot;noreferrer&quot;&gt;80286&lt;/a&gt;: 1.5µm HMOS (also CMOS, at least from other manufacturers);&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80386&quot; rel=&quot;noreferrer&quot;&gt;80386&lt;/a&gt;: 1.5µm CHMOS, then 1µm CHMOS;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80486&quot; rel=&quot;noreferrer&quot;&gt;80486&lt;/a&gt;: 1µm CHMOS initially;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/P5_(microarchitecture)&quot; rel=&quot;noreferrer&quot;&gt;Pentium&lt;/a&gt;: 0.8µm &lt;a href=&quot;https://en.wikipedia.org/wiki/BiCMOS&quot; rel=&quot;noreferrer&quot;&gt;BiCMOS&lt;/a&gt;, down to 0.35µm;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pentium_Pro&quot; rel=&quot;noreferrer&quot;&gt;Pentium Pro&lt;/a&gt;: 0.6µm BiCMOS, down to 0.35µm;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/P5_(microarchitecture)&quot; rel=&quot;noreferrer&quot;&gt;Pentium MMX&lt;/a&gt;: 0.28µm CMOS (which Intel referred to as 0.35µm because the transistor density is the same as 0.35µm BiCMOS used in previous Pentiums);&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pentium_II&quot; rel=&quot;noreferrer&quot;&gt;Pentium II&lt;/a&gt;: 0.35µm CMOS, then 0.25µm;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pentium_III&quot; rel=&quot;noreferrer&quot;&gt;Pentium III&lt;/a&gt;: 0.25µm CMOS, down to 0.18µm;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pentium_4&quot; rel=&quot;noreferrer&quot;&gt;Pentium 4&lt;/a&gt;: 0.18µm CMOS, down to 65nm;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_Core_2&quot; rel=&quot;noreferrer&quot;&gt;Core 2&lt;/a&gt;: 65nm CMOS, then 45nm.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Since then, the main technology remains CMOS, with smaller pitches, down to &lt;a href=&quot;https://en.wikipedia.org/wiki/7_nm_process&quot; rel=&quot;noreferrer&quot;&gt;7nm FinFETS&lt;/a&gt; in the latest CPUs.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-09-03T09:25:04.300" LastActivityDate="2020-09-03T09:25:04.300" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="16039" PostTypeId="1" AcceptedAnswerId="16040" CreationDate="2020-09-02T21:16:50.707" Score="3" ViewCount="245" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zglBc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zglBc.jpg&quot; alt=&quot;IBM PC case badge&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/fg67c.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fg67c.jpg&quot; alt=&quot;IBM PC XT case badge&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A while back, I purchased an original IBM PC (5150). The seller had an improper top case or badge on it, as the badge actually said it was an XT (5160) instead. After confirming that it is indeed a 5150 (for example, only 5 ISA slots), I waited until I could find either a replacement case or badge for it. As you'd assume, these don't come around too often, but recently I was able to acquire a replacement badge.&lt;/p&gt;&#xA;&lt;p&gt;I'd like to get opinions on the best way to:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Remove the IBM PC XT badge&lt;/li&gt;&#xA;&lt;li&gt;Attach the proper IBM PC badge&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Any thoughts on tools to use or what sort of adhesive I should apply to it? Are these badges really tough on there? I'd hate to damage the XT badge as well.&lt;/p&gt;&#xA;" OwnerUserId="19191" LastActivityDate="2020-09-02T23:49:47.457" Title="Best way to swap IBM PC case badge?" Tags="&lt;ibm-pc&gt;&lt;ibm&gt;&lt;case&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16040" PostTypeId="2" ParentId="16039" CreationDate="2020-09-02T23:49:47.457" Score="4" Body="&lt;p&gt;alephzero's suggestion of cold is a good one. I've used dry ice to release adhesive on a 3d printer's build plate (PEI sheet) which is held by a 3M adhesive. Dry ice is not particularly inexpensive and you'd need only a small piece for about two or three minutes.&lt;/p&gt;&#xA;&lt;p&gt;Various products designed to release/dissolve glue, often called Goo-gone or similar would work. You'd want to build a dam around the badge, with the case front positioned horizontally, to allow the stuff to soak in thoroughly.&lt;/p&gt;&#xA;&lt;p&gt;Some have used products such as WD-40 to accomplish similar results.&lt;/p&gt;&#xA;" OwnerUserId="6925" LastActivityDate="2020-09-02T23:49:47.457" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16041" PostTypeId="1" AcceptedAnswerId="16042" CreationDate="2020-09-03T03:07:09.860" Score="11" ViewCount="786" Body="&lt;p&gt;(I'm not sure if this is the correct place to ask this, please let me know if should post this somewhere else)&lt;/p&gt;&#xA;&lt;p&gt;For a long time, using SLI for gaming has been dying out &lt;strong&gt;and for good reason&lt;/strong&gt;. From what I've read, there are a few main reasons why:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It's difficult to support.&lt;/li&gt;&#xA;&lt;li&gt;Buying 2 graphics cards of the most current generation is very expensive and doesn't have a good price-to-performance ratio.&lt;/li&gt;&#xA;&lt;li&gt;Buying a current generation card gives you new features and almost always gives similar performance when compared to 2 previous generation cards using SLI.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;It seems to me that these reasons should have also applied back when SLI was introduced. If that's the case, then why was SLI for gaming introduced and supported in the first place? Why did it last so long? Finally, what changed to cause it to fall out of favor?&lt;/p&gt;&#xA;" OwnerUserId="16508" LastActivityDate="2020-09-04T14:27:01.967" Title="Why was SLI for gaming introduced and supported in the first place?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;graphics&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16042" PostTypeId="2" ParentId="16041" CreationDate="2020-09-03T07:00:29.663" Score="10" Body="&lt;p&gt;Your second and third points are disadvantages from the user’s perspective. Looking at things from the manufacturers’ perspective, SLI has one significant advantage: it raises the maximum number of graphics cards in a single system, which automatically raises the market’s ability to envision buying more graphics cards.&lt;/p&gt;&#xA;&lt;p&gt;SLI started with 3dfx, where it was based on alternate scan lines (&lt;a href=&quot;https://en.wikipedia.org/wiki/Scan-Line_Interleave&quot; rel=&quot;noreferrer&quot;&gt;Scan-Line Interleave&lt;/a&gt;). 3dfx designed SLI into their hardware starting at least with the Voodoo Graphics (even though SLI was only marketed starting with the Voodoo²), probably before it was realised that the performance benefit wasn’t as great as initially hoped. Regardless of what 3dfx engineers knew, the Voodoo² was still marketed as providing double the performance when paired in an SLI setup. Even if game support and performance wasn’t as good as users would have wanted, a non-negligible portion of the 3D-accelerator-buying community at the time was driven by bragging rights rather than economic sense, and thus SLI Voodoo² was perceived as “the thing to have”. That might not have translated into all that many actual purchases though; when 3dfx Voodoo² cards were common on the second-hand market, SLI connectors weren’t. 3dfx’s SLI did have one significant advantage: it raised the maximum resolution from 800×600 to 1024×768.&lt;/p&gt;&#xA;&lt;p&gt;Much of the above applies to Nvidia’s SLI (&lt;a href=&quot;https://en.wikipedia.org/wiki/Scalable_Link_Interface&quot; rel=&quot;noreferrer&quot;&gt;Scalable Link Interface&lt;/a&gt;) and AMD’s CrossFire: it presumably cost less to develop than the missed opportunities in the market resulting from its absence (especially for AMD). The bragging-rights-driven nature of the GPU marketplace continued long after the Voodoo², helped by the advent of 3DMark and the rise of e-sports celebrities and their endorsements; thus for any given generation, an SLI setup would always be more desirable.&lt;/p&gt;&#xA;&lt;p&gt;As to SLI’s falling out of favour, the cynical answer would be that manufacturers no longer need it to sell multiple graphics cards; they can sell more cards per system for computational workloads nowadays (and at a higher price). SLI is also less visible because, at least in some configurations, it happens over the PCI Express bus rather than a dedicated bridge (XDMA on Radeon).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-09-03T13:47:20.630" LastActivityDate="2020-09-03T13:47:20.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16043" PostTypeId="2" ParentId="1086" CreationDate="2020-09-03T07:30:43.417" Score="1" Body="&lt;p&gt;I learned there is a Danish company &amp;quot; B Cool Controls &amp;quot; that apparently are people from ex &amp;quot;Lanng Stelman&amp;quot; MEMAC, they probably have knowledge and experience of complete MEMAC, so they may help with any issues reg files and conversion&lt;/p&gt;&#xA;" OwnerUserId="19234" LastActivityDate="2020-09-03T07:30:43.417" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16044" PostTypeId="2" ParentId="16041" CreationDate="2020-09-03T07:30:44.063" Score="5" Body="&lt;p&gt;It's all about the top end performance.&lt;/p&gt;&#xA;&lt;p&gt;What can be done if the performance needed is greater than the best card available can offer? Right, using two of them, and that's the whole idea of SLI, adding another card to satisfy demand. Quite the same reason why in the mid 90s dual socket workstations kept popping up to satisfy the demand for power, despite the inability of most software to use more than one core.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It's difficult to support.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. It isn't. Or better, not more complex than any advanced feature.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Buying 2 graphics cards of the most current generation is very expensive and doesn't have a good price-to-performance ratio.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Of course not. Buying at the top end performance never gives a good performance per money ratio. This is already true when buying a graphics card alone. A top end NVIDIA RTX 3090 is about three times as expensive as a RTX 3070, but gives only about 50% more. Bang per Buck ratio is never good at the top end. Much like with processors, cars, or anything else. Anyone buying for an optimal BpB ratio, will always end at a middle class CPU/GPU/car. If one needs/wants top end performance, the price will skyrocket in a way that buying two cards is quite within reason.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Buying a current generation card gives you new features and almost always gives similar performance when compared to 2 previous generation cards using SLI.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure, if one got time to wait for the next generation (like a few years) to play a game at the resolution his screen can provide and in maximum details, fine - but I'm not sure how many gamer there ever were who would wait a few years before being able to play the newest game.&lt;/p&gt;&#xA;&lt;p&gt;A fair comparison is only possible within a generation - in fact only within a current offering. Looking at that you'll note that low to mid range models (*1) will never offer SLI, AFR, Crossfire or alike (*2), as there is more to gain from using a top end card. Only when a top end card can not supply a required performance coupling them makes sense.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;It feels as if the question is written in hindsight with all past options available and no real need for improvement. It hasn't always been that.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It seems to me that these reasons should have also applied back when SLI was introduced.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I dare you to get some Voodoo or early GeForce card and install a 2000s. Compared to these games Lego bricks are high resolution. Graphic cards were far from being able to display what game designers wanted in simple triangles - not to mention higher functions.&lt;/p&gt;&#xA;&lt;p&gt;And that's why 3dfx developed SLI - coupling multiple chips (2 or 4) on a card to increase performance to satisfy needs by games. Since then development has gone a long way and GPUs did speed up way past a point that is needed to generate even most complex scenes.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If that's the case, then why was SLI for gaming introduced and supported in the first place?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Triangles, Triangles, Triangles.&lt;/p&gt;&#xA;&lt;p&gt;It allowed more detailed content.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why did it last so long?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because there was such a long way for GPUs to deliver a performance sufficient to give a level of detail that is sufficient to display content in a way that closes in to natural.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Finally, what changed to cause it to fall out of favor?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In the game area mostly because, as said, detail level reached a point were adding more doesn't result in much better rendering, so requirements from game designers no longer have to be cut down to fit existing cards.&lt;/p&gt;&#xA;&lt;p&gt;On a technical level SLI became obsolete with the availability of (local) busses fast enough to exchange abstract data between GPUs instead of linking and joining partitial rendered screens.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - If they did, it's usually to support buyers interested more in bragging not top performance.&lt;/p&gt;&#xA;&lt;p&gt;*2 - SLI being either 3dfx Scan Line Interleave (~1998) or Nvidia's Scalable Link Interface (~2005). AFR is alternate Frame Rendering of ATI, while CrossFire is it's later (meaningless) name to have GPU chips working &lt;strong&gt;on the same result&lt;/strong&gt;. Nowadays it got replaced by high speed links.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-09-04T07:17:29.097" LastActivityDate="2020-09-04T07:17:29.097" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16045" PostTypeId="2" ParentId="16031" CreationDate="2020-09-03T16:50:25.843" Score="3" Body="&lt;p&gt;Another approach would be to use a specialized piece of test equipment known as a telephone line emulator or telephone line simulator, which is a device with multiple phone jacks that simulates the entire mechanics of a telephone exchange.  Plug in two telephones and you can dial from one to the other.&lt;/p&gt;&#xA;&lt;p&gt;These devices are available relatively cheaply now on eBay and other places.  Teltone was one manufacturer of such equipment and I have used their TLE series of emulators for telephony testing.&lt;/p&gt;&#xA;" OwnerUserId="19236" LastActivityDate="2020-09-03T16:50:25.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16046" PostTypeId="1" AcceptedAnswerId="16048" CreationDate="2020-09-03T19:03:30.727" Score="23" ViewCount="2996" Body="&lt;p&gt;SoftwareEngineering.SE has a question about the historically first &lt;a href=&quot;https://softwareengineering.stackexchange.com/questions/103487/what-was-the-first-hierarchical-file-system&quot;&gt;hierarchical file system&lt;/a&gt; (also a similar &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/7712/4025&quot;&gt;local question&lt;/a&gt;), but what was the first OS with a file system in general?&lt;/p&gt;&#xA;&lt;p&gt;That is, what OS was the first to abstract the external storage away from physical volumes at the OS level, even by pre-allocated fixed-size chunks, by introducing the notion of a &amp;quot;personal virtual volume&amp;quot; or similar, according to metadata maintained by the OS?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="10260" LastEditDate="2020-09-04T06:30:23.523" LastActivityDate="2020-09-07T20:07:29.323" Title="What was the first file system?" Tags="&lt;history&gt;&lt;file-system&gt;" AnswerCount="2" CommentCount="15" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16047" PostTypeId="2" ParentId="16046" CreationDate="2020-09-03T20:57:19.383" Score="11" Body="&lt;p&gt;(This answer has now been determined not to satisfy the now-clarified requirements of the question.  Nevertheless, the discussion seems useful, if only in my own mind, so I will leave it here.  But see my other answer about CTSS.)&lt;/p&gt;&#xA;&lt;p&gt;I will guess that the standard answer for 'first' applies here: &lt;a href=&quot;http://www.chilton-computing.org.uk/acl/technology/atlas/p019.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Atlas Supervisor&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Section 6 of the linked document talks about data handling.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The fast computing speed of Atlas and the use of multiple input and&#xA;output peripheral equipments enable the computer to handle a large&#xA;quantity and variety of problems. These will range from small jobs for&#xA;which there is no data outside the program itself, to large jobs&#xA;requiring several batches of data, possibly arriving on different&#xA;media. Other input items may consist of amendments to programs, or&#xA;requests to execute programs already supplied. Several such items may&#xA;be submitted together on one deck of cards or length of punched tape.&#xA;All must be properly identified for the computer.&lt;/p&gt;&#xA;&lt;p&gt;To systematise this identification task, the concept of a document has&#xA;been introduced. A document is a self-contained section of input&#xA;information, presented to the computer consecutively through one input&#xA;channel. Each document carries suitable identifying information (see&#xA;below) and supervisor keeps in the main store a list of the documents&#xA;as they are accepted into the store by the input routines, and a list&#xA;of jobs for which further documents are awaited.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is perhaps more dynamic than you had in mind; the supervisor only maintains identification/location information for 'active' files.   However, I think this is not so very different to systems using exchangeable disc storage; the OS often only knows the content of what's currently mounted online - unless of course it has the design that maintains a single catalogue for all volumes.&lt;/p&gt;&#xA;&lt;p&gt;The important feature that makes this a valid answer is that the user assigns a name to the document, the program asks for the document by name, and the supervisor uses the name to match the program request to the hardware on which the document lives (which might, transparently, be on magtape if input spooling is being used).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-07T20:07:29.323" LastActivityDate="2020-09-07T20:07:29.323" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="16048" PostTypeId="2" ParentId="16046" CreationDate="2020-09-04T01:38:58.447" Score="18" Body="&lt;p&gt;My second guess is CTSS.  It was operational in 1961, but at that time had only tapes for user file storage. I suppose that tape name records don't constitute 'metadata' in the sense required by this question.&lt;/p&gt;&#xA;&lt;p&gt;A disk was added somewhere around 1962 to 1963.  The &lt;a href=&quot;http://people.csail.mit.edu/saltzer/CTSS/CTSS-Documents/CTSS_ProgrammersGuide_1963.pdf&quot; rel=&quot;noreferrer&quot;&gt;CTSS Programmer's Guide&lt;/a&gt; from 1963 mentions&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;the installation of the IBM 1301 disk file; and 5) the design and&#xA;programming of a master disk control subroutine (memo CC-196) and an&#xA;associated disk editor program (memo CC-208)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I have not found CC-196 online, but &lt;a href=&quot;http://people.csail.mit.edu/saltzer/CTSS/CTSS-Documents/CC-Memos/CC-208.pdf&quot; rel=&quot;noreferrer&quot;&gt;CC-208&lt;/a&gt; describes the Master File Directory (MFD), User File Directories (UFDs). Each UFD entry contains the starting track number and number of tracks for the file; I infer files are contiguous.&lt;/p&gt;&#xA;&lt;p&gt;(Page 1 if you want to look it up; it doesn't cut and paste well)&lt;/p&gt;&#xA;&lt;p&gt;So, this definitely qualifies as a file system within the requirements of the question.  It also demonstrates a pleasing ancestral relationship to the subsequent hierarchical filesystem paper. Whether CTSS was 'first' depends on whether anyone else here can find anything earlier.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-09-04T01:38:58.447" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16049" PostTypeId="1" CreationDate="2020-09-04T21:44:42.913" Score="12" ViewCount="548" Body="&lt;p&gt;I find the RS-232 standard fascinating as it's one of the standards in computing that's survived - and is still used - for well over 50 years. The only major development has been a change in voltage from 12 V to 3.3 V in most applications, but with 12 V still available and being used.&lt;/p&gt;&#xA;&lt;p&gt;The Wikipedia article on RS-232 tells us the standard was developed in 1960. The Bell 103 modem, the first one (acoustically coupled), was released in 1962.&lt;/p&gt;&#xA;&lt;p&gt;That article also says the very first devices were &amp;quot;electromechanical typewriters&amp;quot; - which makes sense. The famous ASR-33 was released in 1963, but there were models beforehand. The Bell 103 couldn't have then been the first RS-232 device. So what was the first?&lt;/p&gt;&#xA;" OwnerUserId="746" LastEditorUserId="5199" LastEditDate="2021-03-13T13:47:43.937" LastActivityDate="2021-03-13T13:47:43.937" Title="What was the very first device to have an RS-232 serial port" Tags="&lt;serial&gt;&lt;rs232&gt;" AnswerCount="1" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="16050" PostTypeId="2" ParentId="16049" CreationDate="2020-09-05T07:30:49.343" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What was the very first device to have an RS-232 serial port&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The question is a bit misleading, especially when tying it to 1960.&lt;/p&gt;&#xA;&lt;p&gt;RS-232 is a standard. Standards are usually made &lt;em&gt;after&lt;/em&gt; something has been invented and used first. Their purpose is usually to either unify a varying landscape or turning de facto usage into standard (*1). Think of bolt dimension, tube sizes or screw driver heads.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;RS-232 is such a standard codifying and unifying existing industry usage and terminology.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;As such there is no real 'first' that can be pointed out without doubt. It's kind like a quantum problem. It's like the cat in the box. prior to opening the box, noone knows if the cat is alive or dead. Or in this case, there can't be no device adhering to RS-232 before it got recommended, but as soon as it was published, a lot of existing devices were compliant and instantly became RS-232 devices, or not ... &lt;strong&gt;Getting a common classification is the whole purpose of such a standard&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;--&lt;/p&gt;&#xA;&lt;p&gt;Serial communication using asynchronous is way older. The beginning of what after several steps became RS-232 was Baudot's &amp;quot;Système de télégraphie rapide&amp;quot; which in many ways did forshade upcoming information age - for example by being the first to use a binary representation for encoding and transmission (*2). Like telegraph before it used a current loop for the signals.&lt;/p&gt;&#xA;&lt;p&gt;Development evolved over the next 100+ years. While Baudot's first machine was semi synchronous (the operator had to type the next character every time the keyboard got release from the previous character, later became truly asynchronous.&lt;/p&gt;&#xA;&lt;p&gt;While original current was around 60 mA, it got lowered to 20 mA when the 7 bit teletypes got introduced. All still asynchronous over a single line.&lt;/p&gt;&#xA;&lt;p&gt;With emerging switching and amplifying voltage driven communication became a thing. Various companies developed a great range of interfaces/devices, using different voltages and additional signals.&lt;/p&gt;&#xA;&lt;p&gt;EIA generated RS232 to unify these into using the same name, workings and meanings.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;That article also says the very first devices were &amp;quot;electromechanical typewriters&amp;quot; - which makes sense. The famous ASR-33 was released in 1963, but there were models beforehand. The Bell 103 couldn't have then been the first RS-232 device. So what was the first?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Hard to say, as RS-232 covers a wide range of devices already in existence in 1960. There is no minimum requirement for being either duplex or using any of the control signals. A single pair carrying a word synchronous transmission guarded by a start and a stop bit will be RS232 compliant. So essentially a (Baudot) TTY interface changing current loop to voltage level would fit - and they have been around from the 1870s - for sure including the early days of computing.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Not to be confused with (interface) specifications made up by companies/inventors/committees to define something new to be implemented later - these may as well become a standard at some point.&lt;/p&gt;&#xA;&lt;p&gt;*2 - All the way to time multiplexed transmission.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6576" LastEditDate="2021-02-25T18:13:05.643" LastActivityDate="2021-02-25T18:13:05.643" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="16051" PostTypeId="1" AcceptedAnswerId="16053" CreationDate="2020-09-05T12:45:02.113" Score="35" ViewCount="8533" Body="&lt;p&gt;While we're all accustomed to using &lt;code&gt;*&lt;/code&gt; as the multiplication symbol (not to mention other esoteric meanings in programming) it is of course not actually the everyday standard symbol for multiplication. And yet, there is no &lt;code&gt;×&lt;/code&gt; key on any normal keyboard.&lt;/p&gt;&#xA;&lt;p&gt;Given the lack of &lt;code&gt;×&lt;/code&gt; I can see why &lt;code&gt;*&lt;/code&gt; was the next-best choice, &lt;em&gt;but why is it there at all&lt;/em&gt;? What did it mean originally and or what use did it have?&lt;/p&gt;&#xA;&lt;p&gt;Every 'standard' &amp;quot;IBM-PC&amp;quot; type keyboard I can every remember using had this symbol. Possibly some Solaris terminals may or may not have (can't recall). The C64 had it. In any case it seems to go way back to at least the early 80s, I'd bet earlier.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;[I searched for &amp;quot;asterisk&amp;quot; on here but didn't find this question already; if I missed a dupe, please point it out.]&lt;/p&gt;&#xA;" OwnerUserId="11795" LastEditorUserId="10854" LastEditDate="2020-09-07T23:19:11.233" LastActivityDate="2020-09-07T23:19:11.233" Title="Why do keyboards have an asterisk?" Tags="&lt;history&gt;&lt;keyboards&gt;&lt;character-sets&gt;" AnswerCount="4" CommentCount="20" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16052" PostTypeId="2" ParentId="16051" CreationDate="2020-09-05T13:50:11.170" Score="75" Body="&lt;p&gt;Keyboards have an asterisk because typewriters did, long before computers existed.&lt;/p&gt;&#xA;&lt;p&gt;Typewriters, particularly mechanical ones, typically made a number of compromises to reduce the number of keys required. For example, many didn‘t have &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt;, and people used &lt;code&gt;O&lt;/code&gt; and &lt;code&gt;I&lt;/code&gt; or &lt;code&gt;l&lt;/code&gt; instead. Likewise, &lt;code&gt;×&lt;/code&gt; wasn’t needed since &lt;code&gt;x&lt;/code&gt; could be used instead, or &lt;code&gt;·&lt;/code&gt; (&lt;code&gt;.&lt;/code&gt; half-up). The asterisk was used a lot (&lt;em&gt;e.g.&lt;/em&gt; for footnotes, section separators, etc.), and no alphabetic character could replace it, so it was included in many popular keyboards (see for example &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Underwood_Typewriter_Company#/media/File%3AErnest_Hemingway_typewriter.jpg&quot; rel=&quot;noreferrer&quot;&gt;Hemingway’s Underwood Portable&lt;/a&gt; or the Underwood 5).&lt;/p&gt;&#xA;&lt;p&gt;Since it featured on most typewriters, it ended up being included in some of the character sets used for communications, and in early computer keyboards too (they started off as typewriters), and then in ASCII (via said communications character sets). See &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/9127/79&quot;&gt;Why are the symbols on the number keys of PC &amp;amp; Mac keyboards different to ASCII keyboards?&lt;/a&gt; for details. By the time ASCII was standardised, &lt;code&gt;*&lt;/code&gt; had taken on its mathematical meaning; it’s included &lt;a href=&quot;https://textfiles.meulie.net/bitsaved/Books/Mackenzie_CodedCharSets.pdf&quot; rel=&quot;noreferrer&quot;&gt;in the mathematical symbols (p. 213)&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-09-05T16:21:22.323" LastActivityDate="2020-09-05T16:21:22.323" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="16053" PostTypeId="2" ParentId="16051" CreationDate="2020-09-05T14:32:24.173" Score="64" Body="&lt;p&gt;Computer terminal keyboards needed to reproduce the symbols available on punched cards and paper tape. In the US, punched cards dominated the data-processing industry (communications uses tended to paper tape).&lt;/p&gt;&#xA;&lt;p&gt;IBM punched card codes in particular were significant in the industry.&lt;/p&gt;&#xA;&lt;p&gt;The IBM 026 keypunch (and its replacement the 029) had an asterisk. By the time online keyboards became interesting, the asterisk was already in use in various programming contexts, and therefore was still needed.&lt;/p&gt;&#xA;&lt;p&gt;The 026 had different character sets (and encoding) available, but asterisk was common to most (all?) of the configurations.  See &lt;a href=&quot;http://homepage.cs.uiowa.edu/%7Ejones/cards/codes.html&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; for examples, but here is the FORTRAN set:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;+-0123456789ABCDEFGHIJKLMNOPQR/STUVWXYZ ='    .)    $*    ,(&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You can regard that scanty set as the minimum requirement for any subsequent computer keyboard.&lt;/p&gt;&#xA;&lt;p&gt;But why was there an asterisk on 026/029 card punches?&lt;/p&gt;&#xA;&lt;p&gt;This authoritative &lt;a href=&quot;https://textfiles.meulie.net/bitsaved/Books/Mackenzie_CodedCharSets.pdf&quot; rel=&quot;noreferrer&quot;&gt;document on coded character sets&lt;/a&gt; says, on page 66, that asterisk was added to IBM punch card codes 'somewhere around 1932' and was used for cheque protection.  This was a 39-character set: alphanumerics, minus sign, ampersand, asterisk.&lt;/p&gt;&#xA;&lt;p&gt;Therefore, the need for asterisk on data-processing equipment was settled long before stored-program digital computers came on the scene.  And of course, if the processing equipment can use a character, it needs to be on the keyboards.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-05T20:49:01.910" LastActivityDate="2020-09-05T20:49:01.910" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="16054" PostTypeId="2" ParentId="11557" CreationDate="2020-09-05T21:37:08.927" Score="2" Body="&lt;p&gt;As others have said, with limited video memory, that extra video mode gives you flexibility to choose 1280×1024@16bpp over 1600×1200@8bpp depending on your needs.&lt;/p&gt;&#xA;&lt;p&gt;But it also allows you to choose an optimal refresh rate. If screen flicker bothers you and your monitor or video card is limited to a 72 kHz horizontal scan rate, you might choose 1280×1024@70Hz vertical refresh over 1600×1200@60Hz. Trading pixels for higher refresh rates can be just as good of a compromise as trading pixels for more colors.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-09-05T21:37:08.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16055" PostTypeId="2" ParentId="7717" CreationDate="2020-09-05T21:50:07.793" Score="5" Body="&lt;p&gt;I found this: &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Active_USB_to_PS2_Adatper_(keyboard%2Bmouse).jpg&quot; rel=&quot;noreferrer&quot;&gt;https://commons.wikimedia.org/wiki/File:Active_USB_to_PS2_Adatper_(keyboard%2Bmouse).jpg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;don't know where to get one though.&lt;/p&gt;&#xA;" OwnerUserId="19248" LastActivityDate="2020-09-05T21:50:07.793" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16056" PostTypeId="2" ParentId="9179" CreationDate="2020-09-06T00:38:21.000" Score="4" Body="&lt;p&gt;If you want to use a 102 display in a 100, you've got an annoying task ahead - While User12's answer shows that they are electrically the same, the connector is very different. The Model 100 has a 2 row connector with (I believe) .100 pin spacing. Similar to what you'd see on an old IDE drive.&lt;/p&gt;&#xA;&lt;p&gt;The 102 has a flat ribbon that pushes into a connector on the PCB. I believe these are called 'Flat Flexible Cables'.&lt;/p&gt;&#xA;&lt;p&gt;So, assuming that the LCD modules are electrically the same, to use a 102 module in a 100 means you have to hand wire one end of the connection. This is by no means undoable, it's just going to be annoying.&lt;/p&gt;&#xA;" OwnerUserId="4356" LastActivityDate="2020-09-06T00:38:21.000" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16057" PostTypeId="2" ParentId="16051" CreationDate="2020-09-06T02:40:34.990" Score="9" Body="&lt;p&gt;Circa 1950 Royal typerwriter.  Top row of keys, second from the right.  What do you see?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2BGs8.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2BGs8.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3483" LastActivityDate="2020-09-06T02:40:34.990" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16058" PostTypeId="1" AcceptedAnswerId="16060" CreationDate="2020-09-06T07:21:13.063" Score="45" ViewCount="10128" Body="&lt;p&gt;Modern general-purpose computers typically have a 64-bit word size, but looking back in time, we see narrower CPUs. In the early 80s, the 68000 dealt with 32-bit addresses but the ALU was only 16 bits (so a single 32-bit addition took a pair of ALU operations). The 8086 dealt with 20-bit addresses but the ALU was, again, only 16 bits. Going back to the 70s, the 6502 dealt with 16-bit addresses but the ALU was only 8 bits; the Z80 dealt with 16-bit addresses but the ALU was only 4 bits. (Admittedly part of the motive for going that narrow was to come up with an obviously different implementation to avoid being sued by former employer Intel. But still.)&lt;/p&gt;&#xA;&lt;p&gt;The reason for this is obvious enough: going back in time, logic gates become more expensive; you can't afford to build such a wide CPU. Also memory is expensive; you have less of it; you don't need such wide addresses.&lt;/p&gt;&#xA;&lt;p&gt;And then going back to still earlier decades, and we encounter:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;IBM 650. Word size 10 decimal digits. (Depending on how you reckon it, this is equivalent to somewhere between 33 and 40 bits.)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Burroughs 205. 10 decimal digits.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;IBM 704. 36 bits.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;DEC PDP-10. 36 bits.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Why so wide?&lt;/p&gt;&#xA;&lt;p&gt;It was certainly not for the memory addressing reasons that motivated the increase in the 90s-00s from 32 to 64 bits. Indeed, 16 bits would have sufficed for the memory addressing needs of all those computers.&lt;/p&gt;&#xA;&lt;p&gt;Clearly other things equal a wide ALU is faster than a narrow one (basically, it's the difference between being able to perform an operation in one clock cycle versus several). And it's also presumably more expensive. What factors go into deciding whether it's worth spending the money for the extra speed?&lt;/p&gt;&#xA;&lt;p&gt;Clearly the further back we go, the more expensive is each logic gate. I would've expected narrow CPUs going back that far, but this is not what's happening.&lt;/p&gt;&#xA;&lt;p&gt;Another factor is speed of supporting components, particularly memory. There's no point spending money on a CPU that can crunch data faster than the memory can feed it. So what sort of memory speed did these computers enjoy?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_650&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/IBM_650&lt;/a&gt; says&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A word could be accessed when its location on the drum surface passed under the read/write heads during rotation (rotating at 12,500 rpm, the non-optimized average access time was 2.5 ms).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;2.5 &lt;em&gt;milliseconds&lt;/em&gt;. 2500 microseconds access time. Okay, you could do better than that by carefully placing instructions near where the head would be when the previous instruction was complete, but still, that looks to me like a memory system much less, not more, able to keep up with a wide CPU, compared to the semiconductor memories of later decades, something that would again intuitively make a wide CPU less, not more worthwhile.&lt;/p&gt;&#xA;&lt;p&gt;So why did the first and second-generation computers have such wide CPUs?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-09-14T20:20:25.650" Title="Why did 1950s-60s computers have such wide words?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;dec&gt;&lt;architecture&gt;&lt;ibm650&gt;" AnswerCount="10" CommentCount="17" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16059" PostTypeId="2" ParentId="16051" CreationDate="2020-09-06T08:20:24.217" Score="13" Body="&lt;p&gt;The reason to use * instead of &lt;code&gt;×&lt;/code&gt; is disambiguation. &lt;code&gt;×&lt;/code&gt; looks very similar to x now, even more so in the early days of computing, before the laser printer became ubiquitous and you needed typesetting software and a printing press to produce an &lt;code&gt;×&lt;/code&gt; that was distinguishable from an x.&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://www.quora.com/Is-the-asterisk-used-to-represent-multiplication?share=1&quot; rel=&quot;noreferrer&quot;&gt;this post&lt;/a&gt;, we can blame Fortran:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;While it is now common practice to use an asterisk for multiplication,&#xA;I don’t think that was the case before the FORTRAN programming language was developed at IBM by John Backus and his team.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Presumably, the asterisk was chosen — presumably because it was the non-alphanumeric symbol that most-closely resembled the customary ×&#xA;symbol that denoted multiplication, whereas the letter X could not be used, since FORTRAN used letters of the alphabet for symbolic variable names of variables and unknowns. Since there were no superscripts (nor subscripts) available, so exponentiation was indicated with a double-asterisk: ** (and parentheses were used to surround subscripts). Furthermore, the letter “E” was used (following a string of digits) to render numbers in “scientific notation”, e.g., 6.02×10&lt;sup&gt;23&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The asterisk has been used as a multiplication symbol &lt;a href=&quot;https://www.smartickmethod.com/blog/math/operations-and-algebraic-thinking/mutiplication/division-and-multiplication/&quot; rel=&quot;noreferrer&quot;&gt;for a long time&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In the old days of arithmetic, many algorithms made use of the cross of San Andres to solve division and multiplication products and proportions. It may be for that reason that in 1631, Oughtred, chose this cross as a symbol for multiplication.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It experienced great acceptance, except by the mathematicians Gottfried W. Leibniz and Isaac Newton, who did not feel completely comfortable with the symbol. Leibniz, in 1698, in one of his letters to the mathematician Johann Bernoulli, writes: “I do not like the × symbol as a symbol for multiplication since it can be mistaken for x; … I often simply relate two quantities with a point and indicate multiplication with RS · PQ.”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For example, the Swiss mathematician Johann Rahn, (1622-1676), used the asterisk * in his work Teutsche Algebra (1659). As well as Leibniz, who previously used a fallen C, with the open side down, in his Dissertatio of combinatorial art (1666).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7159" LastActivityDate="2020-09-06T08:20:24.217" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16060" PostTypeId="2" ParentId="16058" CreationDate="2020-09-06T09:31:47.083" Score="74" Body="&lt;p&gt;And if you go back further, e.g. to the ENIAC, you'll see a word size of 40 bits.&lt;/p&gt;&#xA;&lt;p&gt;And if you go back even further, to mechanical calculators, you'll see word sizes determined by the number of decimal digits they can represent.&lt;/p&gt;&#xA;&lt;p&gt;And that explains the approach: Computers originally were meant to automate calculations. So you want to represent numbers. With enough digits you can do meaningful calculations.&lt;/p&gt;&#xA;&lt;p&gt;Then you decide if you want a binary or a decimal representation.&lt;/p&gt;&#xA;&lt;p&gt;That's how you end up with something like 10 decimal digits, or between 33 and 40 bits.&lt;/p&gt;&#xA;&lt;p&gt;Then you discover that this is too many bits for instructions. So you stuff several instructions into one word (or you have lots of space for an address in the instruction).&lt;/p&gt;&#xA;&lt;p&gt;And you think about representing characters. Which have 6 bits for teletypes. So multiples of 6 make a lot of sense.&lt;/p&gt;&#xA;&lt;p&gt;Then you want to make the computers cheaper. If you are DEC and have a 36 bit machine, and you are using octal, 3*4 = 12 bits are an obvious choice, because that's a fraction of 36 bits. So you get the PDP-8.&lt;/p&gt;&#xA;&lt;p&gt;And further on, you get the PDP-11, microcomputers, and word sizes of multiple of 8 bits.&lt;/p&gt;&#xA;&lt;p&gt;So starting out with large word sizes to represent numbers is the natural thing to do. The really interesting question is the process by which they became smaller.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-09-06T12:28:39.167" LastActivityDate="2020-09-06T12:28:39.167" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16061" PostTypeId="1" CreationDate="2020-09-06T09:43:27.110" Score="1" ViewCount="30" Body="&lt;p&gt;I know the vocoder was firstly developed by the company Emagic, which then bought by Apple. Now it is part of Logic Pro X and impossible to find the original version, that can work in Windows.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone still have a version of EVOC20 vocoder that was released in the 90s?&lt;/p&gt;&#xA;" OwnerUserId="19253" LastActivityDate="2020-09-06T09:43:27.110" Title="Where can I find EVOC20 package for Emagic Logic 2.5?" Tags="&lt;software&gt;&lt;audio&gt;&lt;digital-audio&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16062" PostTypeId="2" ParentId="16058" CreationDate="2020-09-06T10:00:40.603" Score="13" Body="&lt;p&gt;A possible answer occurs to me: it might be precisely because of the slow memory.&lt;/p&gt;&#xA;&lt;p&gt;Say you want to add a pair of ten-digit decimal numbers, &lt;code&gt;SUM += VAL&lt;/code&gt;, on a 6502. That chip has a BCD mode in which it can add two digits at a time; it has to do everything through an 8-bit accumulator. So we need a loop of five iterations, which we might unroll for speed. Each iteration will look like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LDA SUM+0&#xA;ADC VAL+0&#xA;STA SUM+0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;for offsets from 0 to 4 inclusive.&lt;/p&gt;&#xA;&lt;p&gt;If we put the operands in zero page, that's thirty memory accesses for instructions, another fifteen for operands, forty-five memory accesses at maybe one microsecond each, plus however many more for overhead, still less than a hundred microseconds for the whole operation.&lt;/p&gt;&#xA;&lt;p&gt;Now connect the 6502 to the memory drum of a 650. Suddenly the worst case memory access time is measured in milliseconds not microseconds. Some accesses might be amenable to near optimal placement, but not all. The whole operation will be orders of magnitude slower!&lt;/p&gt;&#xA;&lt;p&gt;So that's an argument for needing wide registers. As user1937198 points out, the 650 could only add one digit at a time, so maybe adding a pair of ten-digit numbers takes ten CPU clock cycles, but that's okay; the point is that with the wide registers, it doesn't need a whole bunch of memory accesses in the middle of this.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-09-06T10:00:40.603" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16063" PostTypeId="2" ParentId="16058" CreationDate="2020-09-06T10:42:34.363" Score="20" Body="&lt;p&gt;Longer words mean more bits can be processed at once. An 8 bit processor can perform a 32 bit calculation, but it has to do it in 4 stages of 8 bits each. A 32 bit processor can do it in one stage.&lt;/p&gt;&#xA;&lt;p&gt;Since early computers had limited clock speeds due to slow electronics increasing the word size was one of the few options available to improve performance.&lt;/p&gt;&#xA;&lt;p&gt;In the 70s the focus shifted to cost and 8 bit CPUs became popular. Word widths slowly increased as micro/personal computers became more popular and once again performance became a priority. Today some Intel CPUs have 512 bit word support for certain operations, all in the name of performance.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-09-06T10:42:34.363" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16064" PostTypeId="2" ParentId="11557" CreationDate="2020-09-06T12:28:38.293" Score="5" Body="&lt;p&gt;The concept of 5:4 aspect ratio, and 1280x1024 graphics coordinates, is actually much older than you think.&lt;/p&gt;&#xA;&lt;p&gt;It dates back at least to the BBC Micro introduced at the end of 1981; it had graphics modes designed around the PAL TVs used in the UK, with 160x256, 320x256, and 640x256 modes, all with a standard &lt;em&gt;coordinate system&lt;/em&gt; of 1280x1024 for easy graphics programming.  At 8x8 character size, this allowed an 80x32 text display on affordable hardware at home, better than many of the cheaper dumb terminals.  The Acorn Archimedes, which succeeded the BBC Micro in the late 1980s, extended this capability to 640x512 with PAL TV timings, as well as supporting VGA/SVGA resolutions when connected to a PC-type monitor.&lt;/p&gt;&#xA;&lt;p&gt;These resolutions were very easy to implement on PAL, using a 16MHz master dot clock, since the time between horizontal sync pulses is exactly 64µs, and there are slightly more than 512 lines (divided between the two interlaced fields) in the display-safe area.  This relatively high level of capability was used by the BBC to generate broadcast TV graphics during the early to mid 1980s.&lt;/p&gt;&#xA;&lt;p&gt;By 1984, early SGI IRIS workstations supported high-resolution graphics, with - in particular - 1024 rows of pixels:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The IRIS 1400 comes standard with 1.5 MB of CPU  memory,  8 bit-planes of 1024x1024 image memory, and…&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's not immediately clear whether all of these could be displayed simultaneously in practice at the time.  More likely, a section of the framebuffer could be selected for display output, the size of that section depending on the output device's capabilities.&lt;/p&gt;&#xA;&lt;p&gt;Apple introduced what was then considered a very high-resolution monochrome display in 1989, supporting just 1152x870 resolution (in a 4:3 aspect ratio), a size most likely designed to just fit in a megabit of RAM.  A special modification to the Acorn Archimedes series allowed it to support 1152x896 (close to 5:4 aspect ratio) on a particular monitor, probably very similar to the one made by Apple; the Archimedes allocated display memory in system DRAM, so it didn't have a hard megabit limit as a Mac's graphics card did.&lt;/p&gt;&#xA;&lt;p&gt;As the availability of fast and affordable memory became less of a restriction on graphics capabilities in the 1990s, it is notable that 1280x1024 with a 5:4 aspect ratio was specifically catered for by high-end monitor vendors.  If three bytes per pixel are used to support 24-bit truecolour, moreover, this is a resolution that fits comfortably in a comparatively affordable 4MB of VRAM.  CRTs could easily be built this way, as the natural shape of a glass tube is circular, thus the squarer the aspect ratio the easier the CRT was to make.  This also did not restrict the display from handling 4:3 aspect ratios cleanly, just leaving a slightly different pattern of blank borders at the edges.  Once 1280x1024 was established, LCD monitors for computer use were made to support it (in contrast to those for televisions) and these are still available today.&lt;/p&gt;&#xA;&lt;p&gt;The slightly taller aspect ratio is useful in text modes, where programmers appreciate having more lines of code on screen more than they do having more columns, and also in desktop environments where menus and toolbars have a habit of consuming vertical space more often than horizontal.  The present trend towards wider aspect ratios, by contrast, is driven by the movie and gaming industries which want to cater for human &lt;em&gt;peripheral&lt;/em&gt; vision, and thus immersion in the scene, rather than for display of information.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-09-06T12:28:38.293" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16065" PostTypeId="1" CreationDate="2020-09-06T13:31:50.107" Score="4" ViewCount="322" Body="&lt;p&gt;The 80286 processor added these instructions: ARPL, VERR, VERW, LAR, LSL, SMSW, SGDT, SIDT, SLDT, STR, LMSW, LGDT, LIDT, LLDT, LTR, CLTS.&lt;/p&gt;&#xA;&lt;p&gt;To help understand how this was implemented I am looking for an outline of how protected mode works, which includes the points where some of the above instructions are used, like mentioning that the LGDT, and LLDT and load the global and local descriptor tables, which are used for OS and DLLs (global), and user processes (local).&lt;/p&gt;&#xA;" OwnerUserId="15219" LastEditorUserId="15219" LastEditDate="2020-09-06T16:12:03.783" LastActivityDate="2020-09-06T16:12:03.783" Title="Instructions added with the Intel 80286" Tags="&lt;intel&gt;&lt;80286&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ClosedDate="2020-09-07T06:34:33.703" ContentLicense="CC BY-SA 4.0" />
  <row Id="16066" PostTypeId="1" AcceptedAnswerId="16068" CreationDate="2020-09-06T14:24:42.977" Score="4" ViewCount="399" Body="&lt;p&gt;I have still a couple of old C64/Amiga joysticks and I'd like to use them on  &lt;a href=&quot;https://retrogames.biz/thec64&quot; rel=&quot;nofollow noreferrer&quot;&gt;the New C64&lt;/a&gt;, which has USB ports.&lt;/p&gt;&#xA;&lt;p&gt;Is there an adapter from 9-pin male to USB?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.breadbox64.com/blog/usb-joystick-adapters/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This 3-year old article&lt;/a&gt; references a company called Despegatop making such adapters, but it looks like they've stopped since.&lt;/p&gt;&#xA;" OwnerUserId="4737" LastActivityDate="2020-09-06T15:47:35.843" Title="Joystick adapter from 9-pin to USB" Tags="&lt;commodore-64&gt;&lt;amiga&gt;&lt;joystick&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16067" PostTypeId="2" ParentId="16065" CreationDate="2020-09-06T14:33:12.250" Score="7" Body="&lt;p&gt;Have you referred to the Intel 286 manuals yet?&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.bitsavers.org/components/intel/80286/210498-005_80286_and_80287_Programmers_Reference_Manual_1987.pdf&quot; rel=&quot;noreferrer&quot;&gt;286 Programmer's Reference Manual&lt;/a&gt; (PDF copy on Bitsavers linked here) covers the instructions in general from a programming perspective, including a brief overview of the protected mode instructions.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.bitsavers.org/components/intel/80286/121960-001_iAPX_286_Operating_Systems_Writers_Guide_1983.pdf&quot; rel=&quot;noreferrer&quot;&gt;Operating System Writer's Guide&lt;/a&gt; (Bitsavers again) deals specifically in depth with the 286's protected mode features, as relevant to someone implementing systems software.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-09-06T14:33:12.250" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16068" PostTypeId="2" ParentId="16066" CreationDate="2020-09-06T15:00:04.443" Score="4" Body="&lt;p&gt;There are a few options still readily available; one is &lt;a href=&quot;http://2600-daptor.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the 2600-daptor&lt;/a&gt;, which supports many 9-pin devices (not just 2600 joysticks and paddles). Another, more expensive, one is &lt;a href=&quot;https://bliss-box.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Bliss Box&lt;/a&gt; which supports many different controllers and connectors (with adapter cables).&lt;/p&gt;&#xA;&lt;p&gt;You can also build your own, using for example &lt;a href=&quot;http://www.grandideastudio.com/stelladaptor-2600/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Stelladaptor schematics and BOM&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;All these devices are USB HID controllers, and are thus compatible with most USB-equipped systems.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-09-06T15:32:52.847" LastActivityDate="2020-09-06T15:32:52.847" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16069" PostTypeId="2" ParentId="16066" CreationDate="2020-09-06T15:47:35.843" Score="3" Body="&lt;p&gt;I don't know how the New C64 implements USB HID, so I can't guarantee compatibility, but here are the options I'm aware of:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stepstick.pl/?35,en_usbjoy20-adapter-connect-your-atari-amiga-c64-joystick-to-pc!-develop-your-own-usb-device!&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stepstick.pl&lt;/a&gt; appears to still be selling C64-to-USB adapters if you want something pre-assembled. (They sell two products, but I couldn't figure out how to set the &amp;quot;English, please&amp;quot; cookie without linking to a specific product)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://commodore4ever.net/collections/commodore-computers-and-parts/products/retro-usb-joystick-to-usb-adapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore4ever&lt;/a&gt; is also selling an adapter that they also offer via an eBay listing as I'm writing this.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you need something that appears as a USB keyboard and you're handy with microcontrollers, here are some options:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A &lt;a href=&quot;https://create.arduino.cc/projecthub/fpfaffendorf/commodore-64-joystick-usb-adapter-c64joy-fc2389&quot; rel=&quot;nofollow noreferrer&quot;&gt;5-minute project&lt;/a&gt; using an Arduino Leonardo.&lt;/li&gt;&#xA;&lt;li&gt;Frank Buß's &lt;a href=&quot;https://frank-buss.de/joystickadapter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;project&lt;/a&gt; using a Freescale microcontroller.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I'm not sure what kind of HID device it presents as, but Markus Gritsch also did &lt;a href=&quot;http://dangerousprototypes.com/forum/index.php?topic=2971.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;a design&lt;/a&gt; using a PIC microcontroller.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2020-09-06T15:47:35.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16070" PostTypeId="1" CreationDate="2020-09-06T16:02:34.900" Score="3" ViewCount="461" Body="&lt;p&gt;Were developers using monitors like e.g. &amp;quot;Supermon+64&amp;quot;, &amp;quot;Merlin 64&amp;quot; or &amp;quot;Monitor$C000&amp;quot; and cartridges like &amp;quot;Final Cartridge&amp;quot;, &amp;quot;Action Replay&amp;quot; (both of these were not available until the mid-80s or later, I think)?&lt;/p&gt;&#xA;&lt;p&gt;Or games were written on more powerful computers (e.g. GEOS was), then compiled to 6502 machine language and transferred to C64?&lt;/p&gt;&#xA;" OwnerUserId="19184" LastEditorUserId="4335" LastEditDate="2020-09-09T13:40:38.057" LastActivityDate="2020-09-09T15:00:44.503" Title="How were games and programs written for the C64 in assembler in the 80s?" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;6502&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="2" ClosedDate="2020-09-07T15:29:45.257" ContentLicense="CC BY-SA 4.0" />
  <row Id="16071" PostTypeId="1" AcceptedAnswerId="16094" CreationDate="2020-09-06T16:26:54.207" Score="10" ViewCount="1183" Body="&lt;p&gt;I've been continuing to revise and expand the Wikipedia article that I started on &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC_interpreter&quot; rel=&quot;noreferrer&quot;&gt;BASIC interpreters&lt;/a&gt;. One of the criticisms was that it was too focused on the microcomputer era (which interested me the most). I've expanded it but realize that the &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC_interpreter#Coding&quot; rel=&quot;noreferrer&quot;&gt;section on coding&lt;/a&gt; focuses on machine- and assembly-language programming (my favorite is the Tiny BASIC Extended team that programmed in octal!). Anyway, I haven't had any luck identifying early BASIC interpreters that were coded in higher-level languages (presumably C). Do you know of any interpreters in the 1970s or 1980s that were coded above assembly?&lt;/p&gt;&#xA;" OwnerUserId="18934" LastActivityDate="2020-09-07T14:41:49.373" Title="What were the first BASIC interpreters to be programmed in high-level languages?" Tags="&lt;programming&gt;&lt;basic&gt;" AnswerCount="4" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16072" PostTypeId="1" AcceptedAnswerId="16167" CreationDate="2020-09-06T16:43:42.153" Score="2" ViewCount="216" Body="&lt;p&gt;Due to requirements of software I want to install on my win98 SE VM (I grabbed the VirtualBox image from archive.org), i.e. I'd like to install .NET 2.0 framework, I need to install the Windows Installer 2.0.&lt;/p&gt;&#xA;&lt;p&gt;So I again searched a bit on archive.org, to find MSDN CD images from back in the day, e.g. the &amp;quot;VS2003 prerequisites&amp;quot; one. One can't install that itself, but it has a folder with Windows Installer 2, and the instmsiA.exe that does start in Win98.&lt;/p&gt;&#xA;&lt;p&gt;But it claims the service was already installed.&#xA;As Windows said it was using the files, I booted into DOS mode of Win98 and xcopy'd the unpacked files from inside that exe over the ones in Windows/system, where I found msi related files. (after backing up the system folder)&#xA;But I guess there are registry entries or whatever it may be that's missing.&#xA;The .NET 2.0 redistributable installer still does not agree that installer 2.0 is installed.&lt;/p&gt;&#xA;&lt;p&gt;How can I get it installed properly, so I can continue to install &amp;amp; the software that requires it accept the fact it's on the system?&lt;/p&gt;&#xA;" OwnerUserId="19141" LastActivityDate="2020-09-13T09:38:18.707" Title="How to get Windows Installer 2.0 installed if it claims &quot;service already present&quot;?" Tags="&lt;windows-98&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16073" PostTypeId="2" ParentId="16058" CreationDate="2020-09-06T19:29:01.120" Score="3" Body="&lt;p&gt;I'd suggest that one issue is that a 1950/60s mainframe was considered to be a significant corporate resource, and by and large enough would be spent on it that it could serve the needs of the entire company as efficiently as possible. The S/360-20 was a reduced-width entry-level system, and similarly DEC etc. minis attacked the mainframe market by being able to keep the price down due- in part- to using narrow registers and data paths.&lt;/p&gt;&#xA;&lt;p&gt;I'd also suggest that computers which were at least in part intended for scientific use had a word size tailored to the particular signs+exponent+mantissa representation that that manufacturer used (typically around 48 bits), and that it made sense for commercial systems from the same manufacturer to use a comparable word size... insofar as they used registers for computation, rather than handling BCD arithmetic and string manipulation as memory-to-memory operations.&lt;/p&gt;&#xA;" OwnerUserId="18835" LastActivityDate="2020-09-06T19:29:01.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16074" PostTypeId="1" AcceptedAnswerId="16086" CreationDate="2020-09-06T19:51:55.813" Score="9" ViewCount="1520" Body="&lt;p&gt;The introduction to Greg Harvey’s &lt;em&gt;DOS for Dummies: Quick Reference&lt;/em&gt; (also subtitled &lt;em&gt;Command Reference&lt;/em&gt; in the first edition) contains this passage:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This book not only gives you the lowdown on each and every DOS command — excepting DELOLDOS, FDISK and SELECT, a trio of commands I guarantee you’ll never miss […]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(Another edition I remember having at one point also lists &lt;code&gt;DEBUG&lt;/code&gt; here.)&lt;/p&gt;&#xA;&lt;p&gt;Now, &lt;code&gt;DEBUG&lt;/code&gt; and &lt;code&gt;FDISK&lt;/code&gt; are pretty well-known. As for &lt;code&gt;DELOLDOS&lt;/code&gt;, the command name is suggestive enough for me to guess its purpose is to delete any previous versions of DOS after an upgrade, and some web searching &lt;a href=&quot;https://www.infania.net/misc/kbarchive/kb/070/Q70753/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;confirms this&lt;/a&gt;. As for &lt;code&gt;SELECT&lt;/code&gt; though, I am stumped. This is not an internal command of COMMAND.COM, and yet there is not a SELECT.COM or SELECT.EXE executable on any of my four MS-DOS 6.22 installation disks either; nothing is also mentioned in the online help system (HELP.COM). At one point I even started to suspect this might have been a misprint.&lt;/p&gt;&#xA;&lt;p&gt;Where did this &lt;code&gt;SELECT&lt;/code&gt; command come from? What did it do? Was this a real command at all?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-09-17T04:14:07.520" LastActivityDate="2020-09-17T04:14:07.520" Title="What did the SELECT command do in DOS?" Tags="&lt;ms-dos&gt;&lt;books&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16075" PostTypeId="2" ParentId="16074" CreationDate="2020-09-06T20:08:46.640" Score="5" Body="&lt;p&gt;Quoting the &lt;a href=&quot;http://www.dewassoc.com/support/msdos/select.htm#:%7E:text=Purpose%3A%20Formats%20a%20disk%20and,on%20the%20DOS%20supplemental%20disk.&amp;amp;text=SELECT%20transfers%20country%2Dspecific%20information,the%20program%20transfers%20the%20CONFIG.&quot; rel=&quot;noreferrer&quot;&gt;DEW Associates MS DOS support site from 1998&lt;/a&gt;: SELECT &amp;quot;formats a disk and installs country-specific information and keyboard codes.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;This is relevant only when you want to boot from a floppy disk. SYS would make this disk bootable, but not copy the configuration files, which you would then have to copy by hand. SELECT does this for you.&lt;/p&gt;&#xA;&lt;p&gt;By the time MS DOS 6.22 came around, this use case was pretty much nonexistent; everyone was booting from hard disks. The website above notes that &amp;quot;in DOS Version 6, this command is stored on the DOS supplemental disk&amp;quot;, which may be why you couldn't find it; or maybe it was removed altogether.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-09-06T20:15:58.337" LastActivityDate="2020-09-06T20:15:58.337" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16077" PostTypeId="2" ParentId="16070" CreationDate="2020-09-06T20:26:03.347" Score="5" Body="&lt;p&gt;I guess the answer is &amp;quot;all of the above, and more&amp;quot;. I was just a kid with a C-64 in his bedroom at the time, but from my recollection:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Cross compilers / assemblers existed; they were sometimes mentioned in magazine articles, usually involving a minicomputer, in the late 80s also a PC. However, this was rare and expensive, and limited to big companies.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Most people would develop on the C-64 itself, usually using some sort of integrated editor / assembler / linker. There were quite a few; the ones I used came from magazines like Input 64 (&amp;quot;INPUT ASS&amp;quot;) or 64'er.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There were also compilers for BASIC and other high-level languages. PASCAL and COMAL come to mind.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Most developers would also have a monitor programs like the ones you mention in a modified kernal or on a cartridge, but for debugging rather than coding. (Though I knew some people who could code simple assembly languages programs directly in hex).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-09-06T20:26:03.347" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16078" PostTypeId="2" ParentId="16071" CreationDate="2020-09-06T20:39:18.570" Score="9" Body="&lt;p&gt;Gordon Eubanks' &lt;a href=&quot;https://en.wikipedia.org/wiki/CBASIC&quot; rel=&quot;noreferrer&quot;&gt;BASIC-E&lt;/a&gt; for CP/M was written in PL/M around 1977. While &lt;a href=&quot;https://en.wikipedia.org/wiki/PL/M&quot; rel=&quot;noreferrer&quot;&gt;PL/M&lt;/a&gt; is a fairly low-level systems programming language almost entirely targeting Intel processors, it's still higher level than directly targeting a specific processor in assembly language.&lt;/p&gt;&#xA;&lt;p&gt;BASIC-E compiles to an intermediate p-code, which is then interpreted by a separate runtime. So it's still an interpreter, if not an interactive one.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-09-06T20:39:18.570" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16079" PostTypeId="2" ParentId="16074" CreationDate="2020-09-06T20:51:40.610" Score="7" Body="&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Where did this SELECT command come from?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;PC-DOS&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What did it do?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Install DOS on a blank drive as a complete bootdrive including language/country specific files.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was this a real command at all?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long story:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;SELECT&lt;/code&gt; was essentially like a &lt;code&gt;FORMAT /S&lt;/code&gt;, which also copies necessary files like &lt;code&gt;KEYBGR&lt;/code&gt; for German keyboard or &lt;code&gt;COUNTRY.SYS&lt;/code&gt; and creates fitting &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; and &lt;code&gt;CONFIG.SYS&lt;/code&gt; with appropriate settings for keyboard and display.&lt;/p&gt;&#xA;&lt;p&gt;To my memory &lt;code&gt;SELECT&lt;/code&gt; was only available for IBM's PC-DOS and only worked from diskette drives, with &lt;code&gt;A:&lt;/code&gt; hard coded as source for all files and &lt;code&gt;B:&lt;/code&gt; as destination.&lt;/p&gt;&#xA;&lt;p&gt;Later PC-DOS (3?) versions allowed the selection of source and destination drive, so it could be used for hard disk install. Again later, the fixed function utility controlled by command line was replaced by an interactive installer of the same name, to be finally (DOS 6?) replaced by &lt;code&gt;SETUP&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;This installer / SETUP was also what brought &lt;code&gt;DELOLDOS&lt;/code&gt;, as only they did copy any previous DOS installation on the target drive into a folder called &lt;code&gt;OLD_DOS&lt;/code&gt;. &lt;code&gt;DELOLDOS&lt;/code&gt; checked if that folder is to be found on the logged drive. If yes, it deleted the folder and in turn itself. So usually hard to find - especially if someone used it on a system :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7607" LastEditDate="2020-09-07T08:40:29.023" LastActivityDate="2020-09-07T08:40:29.023" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16080" PostTypeId="2" ParentId="16070" CreationDate="2020-09-06T20:53:57.317" Score="7" Body="&lt;p&gt;The &lt;strong&gt;HES MON 64&lt;/strong&gt; cartridge, by &lt;em&gt;Terry Peterson&lt;/em&gt;, seems to have been available as early as &lt;strong&gt;1982&lt;/strong&gt; (same year as the C64). This, according to the &lt;a href=&quot;https://www.cbmstuff.com/downloads/hesmon64.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;copyright notice on the manual&lt;/a&gt;. While it is referred to as a &amp;quot;ML Monitor&amp;quot;, it really comprises all the basic utility software you'd  need to create assembly language programs on a C64.&lt;/p&gt;&#xA;&lt;p&gt;HES MON 64 can be used to assemble code using its built-in assembler. You don't get fancy features like macros and advanced symbol management, but you can write assembly without those. The less advanced your assembly routines are, the less you will miss such features.&lt;/p&gt;&#xA;&lt;p&gt;Additionally, the cartridge has a disassembler and a whole wealth of debugging commands, including breakpoints. You could get quite far with just knowledge of assembly and having mastered the commands supported by this simple cartridge.&lt;/p&gt;&#xA;&lt;p&gt;I am referencing this particular cartridge because it is the one utility cartridge that I remember being very widely used by C64 programmers. It may even be seen reasonably as the main precursor to the many ML monitors that came after, and worked very similarly. For example, by the 1985 release of the C128, Commodore put a roughly equivalent ML Monitor into the firmware of their new machine.&lt;/p&gt;&#xA;&lt;p&gt;Since these utilities reside in ROM on the cartridge, they don't hijack any significant RAM from the C64. Pretty much the whole 64K is available for programming code &amp;amp; data.&lt;/p&gt;&#xA;&lt;p&gt;What's radically different here from the normal edit, compile/assemble, run/debug cycle you are used to is that &lt;em&gt;you aren't bothering with source code files&lt;/em&gt;. Rather, you use the assembler to &amp;quot;write&amp;quot; your code directly into the machine's memory as ML, wherever in memory it needs to reside. Same with data. Then, you use other commands in the ML Monitor to &amp;quot;save&amp;quot; that memory, raw to disk or tape, as your finished program.&lt;/p&gt;&#xA;&lt;p&gt;When you need to resume work later, you load the raw program back into memory, and can use the Disassembler to inspect, edit, execute, and debug. It sounds primitive, but it actually flows pretty smoothly. Nothing is wasted in terms of the computer resources available, and the utilities are all so &amp;quot;lightweight&amp;quot; that the operations all happen reasonably fast.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-09-09T15:00:44.503" LastActivityDate="2020-09-09T15:00:44.503" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16081" PostTypeId="2" ParentId="16071" CreationDate="2020-09-06T22:12:17.967" Score="9" Body="&lt;p&gt;BASIC for the &lt;a href=&quot;https://en.wikipedia.org/wiki/MAI_Basic_Four&quot; rel=&quot;noreferrer&quot;&gt;MAI Basic Four&lt;/a&gt; minicomputer series was programmed in a version of &lt;a href=&quot;https://en.wikipedia.org/wiki/TREE-META&quot; rel=&quot;noreferrer&quot;&gt;TREE-META&lt;/a&gt; - a language for writing compilers in.  I hesitate to call it a &amp;quot;high level language&amp;quot;.  TREE-META was more of a notation - very similar to BNF - with callouts to action routines.  But it was not assembly language in any way.  It was in fact an &amp;quot;attributed grammar&amp;quot; notation that happened to be executable.&lt;/p&gt;&#xA;&lt;p&gt;(BTW, regardless of what the wikipedia article linked above implies, MAI's Basic Four computers were on the market by the mid 70s.  I worked for them in '79-'81 and they were already very established in multiple vertical markets - car dealership parts&amp;amp;service, small doctor/dentist offices, to name two.)&lt;/p&gt;&#xA;&lt;p&gt;Now I think of it: The TREE-META part was the lexer+parser+&amp;quot;byte&amp;quot; code generator.  The &amp;quot;byte&amp;quot; code interpreter itself - not many instructions and those were high level as they handled BASIC string operations (e.g., concatenation) as single byte codes - was written in microcode.  (&amp;quot;byte&amp;quot; code is in quotes because I'm not actually sure it was a one-byte-per-instruction coding scheme - I don't remember how it was encoded.  But it was pretty simple!  And you could recover the BASIC language source statements from the instructions.)  Also in microcode was all of the memory management for the variables - which of course in BASIC means strings and arrays of numbers or strings as well as integers and floating point - and for the compiled byte code as well.  (So whether BASIC Four BASIC answers the OP's question is up to him.)&lt;/p&gt;&#xA;" OwnerUserId="332" LastActivityDate="2020-09-06T22:12:17.967" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16082" PostTypeId="1" AcceptedAnswerId="16083" CreationDate="2020-09-06T22:32:46.840" Score="9" ViewCount="851" Body="&lt;p&gt;This question was inspired by &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16051/why-do-keyboards-have-an-asterisk&quot;&gt;recent discussion&lt;/a&gt; on early keyboards and character sets, and mention in passing about how the &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15988/what-did-the-dod-think-fortran-lacked&quot;&gt;COBOL designers&lt;/a&gt; were concerned about not using &amp;quot;non-existent&amp;quot; symbols.&lt;/p&gt;&#xA;&lt;p&gt;Did any computer input device carry all characters required to write Algol 60 as it appeared in the reference language?&lt;/p&gt;&#xA;&lt;p&gt;The complete set of Algol Basic Symbols (per the &lt;a href=&quot;http://www.softwarepreservation.org/projects/ALGOL/report/Algol60_report_CACM_1960_June.pdf&quot; rel=&quot;noreferrer&quot;&gt;Revised Report&lt;/a&gt; are these:&lt;/p&gt;&#xA;&lt;p&gt;Letters: A-Z   a-z&lt;br /&gt;&#xA;Digits: 0-9&lt;br /&gt;&#xA;Arithmetic operators: +  −  ×  /  ÷  ↑&lt;br /&gt;&#xA;Relational operators: &amp;lt;  ≤  =  ≥  &amp;gt;  ≠&lt;br /&gt;&#xA;Logical operators: ≡  ⊃  ∨  ∧  ¬&lt;br /&gt;&#xA;Sequential operators: &lt;strong&gt;goto&lt;/strong&gt;  &lt;strong&gt;if&lt;/strong&gt;  &lt;strong&gt;then&lt;/strong&gt;  &lt;strong&gt;else&lt;/strong&gt;  &lt;strong&gt;for&lt;/strong&gt;  &lt;strong&gt;do&lt;/strong&gt;&lt;br /&gt;&#xA;Separators: ,  .  ₁₀  :  ;  :=  ␣  &lt;strong&gt;step&lt;/strong&gt;  &lt;strong&gt;until&lt;/strong&gt;  &lt;strong&gt;while&lt;/strong&gt;  &lt;strong&gt;comment&lt;/strong&gt;&lt;br /&gt;&#xA;Brackets: (  )  [  ]  ‘  ’  &lt;strong&gt;begin&lt;/strong&gt;  &lt;strong&gt;end&lt;/strong&gt;&lt;br /&gt;&#xA;Declarators: &lt;strong&gt;own&lt;/strong&gt;  &lt;strong&gt;Boolean&lt;/strong&gt;  &lt;strong&gt;integer&lt;/strong&gt;  &lt;strong&gt;real&lt;/strong&gt;  &lt;strong&gt;array&lt;/strong&gt;  &lt;strong&gt;switch&lt;/strong&gt;  &lt;strong&gt;procedure&lt;/strong&gt;&lt;br /&gt;&#xA;Specificators: &lt;strong&gt;string&lt;/strong&gt;  &lt;strong&gt;label&lt;/strong&gt;  &lt;strong&gt;value&lt;/strong&gt;&lt;br /&gt;&#xA;Boolean values: &lt;strong&gt;true&lt;/strong&gt;  &lt;strong&gt;false&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Due to limitations in the site markup language, the symbols that are written in boldface are to be understood as being underlined; the reference language uses underlining (as available on typewriters), though publications often use boldface, as I have done here.&lt;/p&gt;&#xA;&lt;p&gt;Technically, each underlined word is to be considered as a single indivisible symbol which has no relationship to the individual letters of which it is composed.  The same consideration applies to the becomes-symbol := and the subscript-10 symbol ₁₀ (both of which are made up of two characters in this posting).&lt;/p&gt;&#xA;&lt;p&gt;If I have counted correctly, there are 116 distinct symbols.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;I should clarify what I mean by &amp;quot;Did any computer input device carry all characters?&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I do not require that for each basic symbol, that a single keystroke represent the symbol on input.  Pretty obviously, it's unlikely to be true in cases such as &lt;strong&gt;begin&lt;/strong&gt;, which is more likely to require at least 7 keystrokes: underline-on, the letters b,e,g,i,n, and underline-off.  The operations of underline and overstrike can be used to build up a symbol from parts. Less-than-or-equal might, for example, be underlined-less-than.  Not-equals might be equals-backspace-slash.  The becomes-symbol can be keyed as plain old colon, equals.&lt;/p&gt;&#xA;&lt;p&gt;HOWEVER, the printed/displayed symbol should be in some reasonable way look like the symbol in the reference language.  So, &lt;strong&gt;begin&lt;/strong&gt; really has to be underlined and lowercase.  On the other hand, if there's an implementation that otherwise manages a high degree of fidelity to the Report except that it needs to use some stropping regime (like &amp;quot;begin&amp;quot; for &lt;strong&gt;begin&lt;/strong&gt;), that would be interesting to see.&lt;/p&gt;&#xA;&lt;p&gt;I'm not concerned for this question with the internal symbol encoding.  It's not relevant how many characters-worth of storage it takes to store &lt;strong&gt;begin&lt;/strong&gt; in memory or on disc.  This is a question about source-language input.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-07T23:19:50.163" LastActivityDate="2020-09-07T23:19:50.163" Title="Was there an input device capable of entering all Algol 60 symbols with correct appearance?" Tags="&lt;history&gt;&lt;keyboards&gt;&lt;algol&gt;&lt;character-sets&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16083" PostTypeId="2" ParentId="16082" CreationDate="2020-09-06T23:20:10.050" Score="8" Body="&lt;p&gt;Except for the full set of upper- and lowercase letters, there was. The Soviet character encoding standard &lt;a href=&quot;https://en.wikipedia.org/wiki/GOST_10859&quot; rel=&quot;noreferrer&quot;&gt;GOST 10859-64&lt;/a&gt; included all of the ALGOL-60 special characters, and there were &lt;a href=&quot;https://www.computer-museum.ru/histussr/m20perif.htm&quot; rel=&quot;noreferrer&quot;&gt;card punchers&lt;/a&gt; controlled by electric typewriters (Consul-260) with a standard-compliant character set.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vdHEn.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vdHEn.png&quot; alt=&quot;GOST 10859 keyboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note the lack of distinct Latin letters graphically equivalent to Cyrillics, allowing to fit all special characters into a regular keyboard.&lt;/p&gt;&#xA;&lt;p&gt;Given that the ALGOL-60 Revised Report says, with regard to letters (2.1),&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This alphabet may arbitrarily be restricted, or extended with any&#xA;other distinctive character (i.e. character not coinciding with any&#xA;digit, logical value or delimiter).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;of interest is the fidelity of representation of non-alphanumeric characters, which is achieved 100%, and of the keywords, which can be achieved by underlining or double-striking.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2020-09-07T00:19:05.983" LastActivityDate="2020-09-07T00:19:05.983" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16084" PostTypeId="2" ParentId="16082" CreationDate="2020-09-07T03:05:54.047" Score="3" Body="&lt;p&gt;For clarity, I decided to move the KDF9 part of my question to an answer, since that is what it really is... I have no intention of accepting my own answer.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;My submission for &amp;quot;most nearly fulfilling the requirements&amp;quot; was &lt;a href=&quot;http://bitsavers.org/pdf/englishElectric/kdf9/KDF_9_Algol_Programming.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Algol 60 on the English Electric KDF9&lt;/a&gt; using paper tape prepared on a Friden Flexowriter.  The Flexowriter had two cases of letters, and could do underlining.&lt;/p&gt;&#xA;&lt;p&gt;So: letters, digits, underlined words: no problem. For the rest of the symbols, all were available &lt;em&gt;except&lt;/em&gt; the following:&lt;/p&gt;&#xA;&lt;p&gt;Logical-operators: ≡  ⊃  ∨  ∧  ¬  replaced by &lt;strong&gt;eqv&lt;/strong&gt; &lt;strong&gt;imp&lt;/strong&gt; &lt;strong&gt;or&lt;/strong&gt; &lt;strong&gt;and&lt;/strong&gt; &lt;strong&gt;not&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;String quotes: ‘  ’  replaced by &lt;strong&gt;[&lt;/strong&gt; &lt;strong&gt;]&lt;/strong&gt;  (underlined brackets)&lt;/p&gt;&#xA;&lt;p&gt;Space indicator in strings: ␣ replaced by *&lt;/p&gt;&#xA;&lt;p&gt;These symbols were produced by underlining:  ≤  ≥&lt;/p&gt;&#xA;&lt;p&gt;and this by overstrike: ≠&lt;/p&gt;&#xA;&lt;p&gt;So, out of 116 symbols to be represented, 8 could not be presented as they appear in the Report.  I award the KDF9-and-Flex combination a score of 108/116.&lt;/p&gt;&#xA;&lt;p&gt;Is this the closest any implementation can come to absolute fidelity?&lt;/p&gt;&#xA;&lt;p&gt;(Note, things got very sad if you subsequently wanted to print out your program on a lineprinter rather than punching tape for Flexowriter interpretation).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-09-07T03:05:54.047" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16085" PostTypeId="1" CreationDate="2020-09-07T05:14:18.170" Score="5" ViewCount="153" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_650&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 650&lt;/a&gt;, one of the first general-purpose digital computers, designed in the early fifties, used decimal digits with bi-quinary representation for reasons discussed here: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9678/why-did-the-ibm-650-use-bi-quinary&quot;&gt;Why did the IBM 650 use bi-quinary?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Burroughs 205, nee CEC 30-201, was a computer developed around the same time, using essentially the same technology (vacuum tubes and drum memory) that also calculated with words of ten decimal digits plus sign, i.e. an extremely similar design, as far as I can tell not as a result of either company copying the other, but of convergent design driven by similar technological and market forces.&lt;/p&gt;&#xA;&lt;p&gt;So I was surprised to read in &lt;a href=&quot;http://archive.computerhistory.org/resources/text/Burroughs/ElectroData.204.1956.102646116.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the manual&lt;/a&gt; that it does &lt;em&gt;not&lt;/em&gt; use bi-quinary, but BCD.&lt;/p&gt;&#xA;&lt;p&gt;Why does it differ from the 650 in this regard? Was it simply a case of two teams of engineers weighing the trade-offs and reaching different conclusions, or was there some identifiable technical or business reason for the difference?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2021-02-22T17:34:54.170" LastActivityDate="2021-02-22T17:34:54.170" Title="Why did the Burroughs 205 not use bi-quinary like the IBM 650?" Tags="&lt;mainframe&gt;&lt;architecture&gt;&lt;ibm650&gt;&lt;biquinary&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16086" PostTypeId="2" ParentId="16074" CreationDate="2020-09-07T07:03:28.233" Score="6" Body="&lt;p&gt;&lt;code&gt;SELECT&lt;/code&gt; was introduced in IBM PC DOS 3.0, along with internationalisation support, and made available in MS-DOS starting with version 3.3.&lt;/p&gt;&#xA;&lt;p&gt;Its purpose is to create a bootable disk with support for a given country code and keyboard layout. The syntax, starting with version 3.2, is&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SELECT [[drive1:] drive2:[path]] country keyboard&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where &lt;code&gt;drive1&lt;/code&gt; is the source drive (&lt;code&gt;A&lt;/code&gt; by default), &lt;code&gt;drive2&lt;/code&gt; the destination drive (&lt;code&gt;B&lt;/code&gt; by default), &lt;code&gt;country&lt;/code&gt; is one of the supported country codes (033 for France, 049 for Germany — West Germany at the time — etc.), and &lt;code&gt;keyboard&lt;/code&gt; is one of the available keyboards (&lt;code&gt;FR&lt;/code&gt;, &lt;code&gt;GR&lt;/code&gt; etc.).&lt;/p&gt;&#xA;&lt;p&gt;This was effectively the installation procedure for floppy-based versions of DOS, outside the US: prepare a blank floppy, boot with DOS disk 1, and run &lt;code&gt;SELECT&lt;/code&gt; with the appropriate country and keyboard code. This would result in a usable DOS disk, with all the contents of DOS disk 1, and a correctly-configured keyboard as soon as the system was booted.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/K2wNp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K2wNp.png&quot; alt=&quot;Screenshot of MS-DOS 3.3 SELECT installing to a hard drive&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Version 3.0 and 3.1 of &lt;code&gt;SELECT&lt;/code&gt; use &lt;code&gt;DISKCOPY&lt;/code&gt; to copy the source disk to the destination disk, formatting the latter if necessary. Version 3.2 and 3.3 use &lt;code&gt;FORMAT&lt;/code&gt; and &lt;code&gt;XCOPY&lt;/code&gt; instead; version 3.3 supports hard drives (although running &lt;code&gt;FDISK&lt;/code&gt; is left as an exercise for the user, before running &lt;code&gt;SELECT&lt;/code&gt;). In both cases, the destination disk is erased, and all the contents of the source disk are copied, not only the files required to support the desired country and keyboard. In version 3.2, if the source disk doesn’t include the &lt;code&gt;KEYBxx&lt;/code&gt; file required for the desired keyboard, the user is prompted to instead the disk containing it. All versions then write an appropriate &lt;code&gt;CONFIG.SYS&lt;/code&gt; and &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; to the target disk, containing respectively&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;COUNTRY=&amp;lt;country&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(adding the &lt;code&gt;COUNTRY.SYS&lt;/code&gt; path too if necessary), and&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PATH ...&#xA;KEYB...&#xA;ECHO OFF&#xA;DATE&#xA;TIME&#xA;VER&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The default path (&lt;code&gt;PATH&lt;/code&gt; above) depends on the installation path (the second parameter).&lt;/p&gt;&#xA;&lt;p&gt;In version 4.0 of PC DOS and MS-DOS, &lt;code&gt;SELECT&lt;/code&gt; became an interactive installation tool, which was started automatically from the installation disk (or the “Select” disk on 5.25” disk sets).&lt;/p&gt;&#xA;&lt;p&gt;In version 5.0 of PC DOS and MS-DOS, the setup program was renamed to &lt;code&gt;SETUP.EXE&lt;/code&gt; and introduced support for upgrading DOS. This is where &lt;code&gt;DELOLDOS&lt;/code&gt; comes from: when upgrading, &lt;code&gt;SETUP&lt;/code&gt; would create &lt;code&gt;DELOLDOS&lt;/code&gt;, which could be used to undo the upgrade, restoring the previous version of DOS (and its boot sector etc.).&lt;/p&gt;&#xA;&lt;p&gt;There appears to have been another version of &lt;code&gt;SELECT&lt;/code&gt;, written by Karl D. Wright for Phoenix Technologies, and included in at least some OEM versions of MS-DOS 3.2; a quick look through it suggests it does the same thing as the “official” &lt;code&gt;SELECT&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;em&gt;The MS-DOS Encyclopedia&lt;/em&gt;, &lt;code&gt;SELECT&lt;/code&gt; was available in PC DOS 2.0, but my PC DOS 2 disks don’t have it and there wouldn’t have been much use for it on PC DOS 2 which didn’t have either the &lt;code&gt;COUNTRY&lt;/code&gt; statement or the &lt;code&gt;KEYBxx&lt;/code&gt; commands.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-09-07T13:49:01.297" LastActivityDate="2020-09-07T13:49:01.297" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16087" PostTypeId="1" AcceptedAnswerId="16092" CreationDate="2020-09-07T09:36:22.133" Score="19" ViewCount="1602" Body="&lt;p&gt;The Motorola 68000 has sixteen integer registers, which was considered a very generous complement at the time it was introduced. They are divided into address and data registers, eight each. Many instructions work the same with both kinds, but there are some instructions or addressing modes that only work with address registers, and some that only work with data registers.&lt;/p&gt;&#xA;&lt;p&gt;Presumably this division saved some resources (relative to the common practice in later CPUs of making all integer registers fully general-purpose). I'm interested in exactly what resources were saved.&lt;/p&gt;&#xA;&lt;p&gt;In particular, was it just about instruction bits, or was there a saving in wiring and multiplexer gates from only needing to connect some of the functional units to half of the registers instead of all of them?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-09-07T20:47:47.560" Title="Did the 68000 separate A/D registers save circuitry?" Tags="&lt;hardware&gt;&lt;motorola-68000&gt;&lt;architecture&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16089" PostTypeId="2" ParentId="12271" CreationDate="2020-09-07T10:07:47.177" Score="0" Body="&lt;h2&gt;An alternative way is this:&lt;/h2&gt;&#xA;&lt;p&gt;Transfer 256 bytes to drive at $500&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 OPEN2,8,2,&amp;quot;#2&amp;quot;&#xA;20 READ F&#xA;30 FOR X=1 TO 255&#xA;40 READ B:PRINT#2,CHR$(B);&#xA;50 NEXT&#xA;60 PRINT#2,CHR$(F);&#xA;70 CLOSE 2&#xA;80 DATA 0,1,2,3,4,5,6.....&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In basic it sounds weird but in assembler is easier and shorter to code than all the M-W&lt;/p&gt;&#xA;&lt;p&gt;Note: I transfer the first byte as the last because the block pointer starts at 1 and not at 0 and overflows at 0 after reaching 255.&lt;/p&gt;&#xA;" OwnerUserId="18092" LastEditorUserId="18092" LastEditDate="2020-09-07T10:19:59.677" LastActivityDate="2020-09-07T10:19:59.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16090" PostTypeId="1" AcceptedAnswerId="16095" CreationDate="2020-09-07T10:36:21.367" Score="3" ViewCount="353" Body="&lt;p&gt;I'm looking to port an old game I wrote for the Palm Pilot that relied on the &lt;code&gt;SysRandom&lt;/code&gt; function with a predefined game seed. A player could enter a &amp;quot;seed&amp;quot; and the sequence of tiles would be deterministic. So if I can recreate the &lt;code&gt;SysRandom&lt;/code&gt; function in another language (JavaScript is my jam, but I can probably port C and most other languages if pushed) then I can retain all the old player's high scores from the original game.&lt;/p&gt;&#xA;&lt;p&gt;I'm not even sure where to start searching though!&lt;/p&gt;&#xA;" OwnerUserId="5366" LastEditorUserId="5366" LastEditDate="2020-09-07T14:57:58.827" LastActivityDate="2020-09-07T15:55:22.710" Title="How did the SysRandom work on Palm Pilot SDK 3.5?" Tags="&lt;palm&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16091" PostTypeId="2" ParentId="15339" CreationDate="2020-09-07T11:18:04.357" Score="1" Body="&lt;p&gt;Working from memory and in addition to what everybody else has said, the order of the memory access and SP increment/decrement in the push and pop opcodes changed relative to the 8086 and 8088.&lt;/p&gt;&#xA;&lt;p&gt;This was the standard way of checking whether a CPU was an 88/86 or a 188/186. You could distinguish between the 88/188 and 86/186 by using self-modifying code to explore the length of the prefetch queue, and some related technique allowed the V20/30 to be identified.&lt;/p&gt;&#xA;&lt;p&gt;I forget for the moment how the code that distinguished between a 188/186 and a 286 worked, and from the '386 onwards there was a CPUID opcode.&lt;/p&gt;&#xA;" OwnerUserId="18835" LastActivityDate="2020-09-07T11:18:04.357" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16092" PostTypeId="2" ParentId="16087" CreationDate="2020-09-07T12:21:25.230" Score="27" Body="&lt;p&gt;Each of the 68K series CPUs had dedicated address-generation hardware which was wired more directly to the A registers and had only limited access to the D registers.  Conversely, the main ALU was more directly wired to the D registers than the A registers.  It thus became a performance enhancement, allowing the main ALU and the addressing logic to operate in parallel without conflicting in the register bank.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eeXQb.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eeXQb.jpg&quot; alt=&quot;68000 floorplan&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the above die-shot with the sections helpfully labelled, you can clearly see there are separate sections of the chip for processing addresses and data.  Notice also that there is no section marked &amp;quot;register bank&amp;quot;; the registers are physically entwined with their respective execution units.&lt;/p&gt;&#xA;&lt;p&gt;In the 68040 and 68060, these separate execution units became distinct stages in the CPU's pipeline(s).  The EA (Effective Address) was calculated in two stages, whose use was repeated as necessary for some of the more complex addressing modes, and the main ALU existed in another pipeline stage which came after these.&lt;/p&gt;&#xA;&lt;p&gt;If you carefully examine the 68K instruction set, you should notice that actually, instructions which modify the A registers have different mnemonics than those for the D registers, even when they perform the same function.  They decode to completely different sections of the microcode ROM (marked µROM in the floorplan) which activate the appropriate parts of the correct execution unit.&lt;/p&gt;&#xA;&lt;p&gt;Both sets of instructions have access to addressing modes (selected by the six-bit field at the right-hand end of the instruction word) that include using either A or D registers as the second operand.  Addressing modes that refer to memory are all based around A registers, with only indexed modes permitting the use of a D register in the address equation.  Indexed modes take correspondingly longer, as they require an access cycle across an internal bus bridging the two execution units.&lt;/p&gt;&#xA;&lt;p&gt;This duplication of circuitry stands in direct contrast with simpler CPUs such as the 6502 family, in which the same ALU was used for both accumulator and address-indexing arithmetic, including relative branches.  Only address operations which required merely an increment or decrement (such as advancing the program counter) had logic separate from the main ALU to increase internal parallelism at minimal cost.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-09-07T13:49:43.157" LastActivityDate="2020-09-07T13:49:43.157" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16093" PostTypeId="2" ParentId="16071" CreationDate="2020-09-07T13:02:58.690" Score="3" Body="&lt;p&gt;The BASIC interpreter for the TI 99/4A computer is written in an intermediate language called GPL, which in turn runs natively on the TMS9900 microprocessor.&lt;/p&gt;&#xA;&lt;p&gt;See: &lt;a href=&quot;http://www.nouspikel.com/ti99/titechpages.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.nouspikel.com/ti99/titechpages.htm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18640" LastActivityDate="2020-09-07T13:02:58.690" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16094" PostTypeId="2" ParentId="16071" CreationDate="2020-09-07T14:35:05.173" Score="5" Body="&lt;p&gt;&lt;a href=&quot;https://github.com/pkimpel/retro-b5500/blob/master/source/XBASIC/XBASIC.alg_m&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/pkimpel/retro-b5500/blob/master/source/XBASIC/XBASIC.alg_m&lt;/a&gt; is a BASIC interpreter for the B5500, written in ALGOL, and dated 1975.&lt;/p&gt;&#xA;&lt;p&gt;This also mentions Burroughs's own BASIC, but a cursory search doesn't turn up a manual etc. so I can't ascribe a date to it. However ALL Burroughs system software was either written in ALGOL (this includes compilers etc.) or in ESPOL (an ALGOL derivative with inline machine code etc.), with the exception of the initial boot card and test programs which were strictly for internal use.&lt;/p&gt;&#xA;&lt;p&gt;(Later) The system software tapes have the source of Burroughs's own BASIC compiler, Mark XII dated 1971.&lt;/p&gt;&#xA;" OwnerUserId="18835" LastEditorUserId="18835" LastEditDate="2020-09-07T14:41:49.373" LastActivityDate="2020-09-07T14:41:49.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16095" PostTypeId="2" ParentId="16090" CreationDate="2020-09-07T15:04:17.527" Score="12" Body="&lt;p&gt;The Palm &lt;code&gt;SysRandom&lt;/code&gt; RNG was reverse-engineered by Ian Goldberg and documented &lt;em&gt;e.g.&lt;/em&gt; in &lt;a href=&quot;https://vulners.com/exploitdb/EDB-ID:20746&quot; rel=&quot;noreferrer&quot;&gt;this Password Generator exploit&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/* The PalmOS SysRandom() RNG. */&#xA;&#xA;static unsigned int multiplier = 22695477;&#xA;static unsigned int _seed = 0;&#xA;&#xA;short palm_rand (unsigned int new_seed)&#xA;{&#xA;  if (new_seed)&#xA;    _seed = new_seed;&#xA;  &#xA;  _seed = (_seed * multiplier) + 1;&#xA;  return (short)  ((_seed &amp;gt;&amp;gt; 16)  &amp;amp; 0x7fff);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(See also &lt;a href=&quot;https://securitytracker.com/id/1001292&quot; rel=&quot;noreferrer&quot;&gt;the corresponding SecurityTracker entry&lt;/a&gt; which provides Thomas Roessler’s full message. This RNG is also briefly described in &lt;a href=&quot;https://www.springer.com/gp/book/9780387953878&quot; rel=&quot;noreferrer&quot;&gt;Peter Gutmann’s &lt;em&gt;Cryptographic Security Architecture: Design and Verification&lt;/em&gt;&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-09-07T15:55:22.710" LastActivityDate="2020-09-07T15:55:22.710" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16097" PostTypeId="1" AcceptedAnswerId="16099" CreationDate="2020-09-07T18:29:46.170" Score="5" ViewCount="202" Body="&lt;p&gt;EDIT:  I realize from reading the comments that I was bit loose in my use of the word &amp;quot;speed&amp;quot; as a property of the tape drive.  What I had in mind was the speed of the data transfer, not the speed of the tape across the tape head.&lt;/p&gt;&#xA;&lt;p&gt;My recollection is super fuzzy at this point, but I seem to remember having a 3rd party gizmo which plugged into the expansion port of the VIC-20 which would dramatically increase the speed of the tape drive.  I think it was called the &amp;quot;VIC-rabbit&amp;quot;, and that the tape drive plugged into the VIC-20 as it normally would.  I was always puzzled how such a device could work.  How did this device boost the tape drive's speed and why this wasn't used by the VIC-20 to begin with?&lt;/p&gt;&#xA;" OwnerUserId="19267" LastEditorUserId="19267" LastEditDate="2020-09-08T00:03:36.513" LastActivityDate="2020-09-08T00:03:36.513" Title="Upping the speed of the VIC-20 tape drive: aftermarket hardware for the expansion port with &quot;rabbit&quot; in the name?" Tags="&lt;cassette-tape&gt;&lt;vic-20&gt;" AnswerCount="1" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16098" PostTypeId="2" ParentId="16087" CreationDate="2020-09-07T20:47:47.560" Score="5" Body="&lt;p&gt;The primary advantage of the 68000 segregating address and data registers is the ability to have many instructions use three-bit register-select fields, thus saving opcode space compared with using four-bit fields.  IMHO, the ARM Thumb instruction set and derivatives could have benefited from employing such a concept, since otherwise the upper registers end up being much more awkward to use than the lower ones.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-09-07T20:47:47.560" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16099" PostTypeId="2" ParentId="16097" CreationDate="2020-09-07T22:40:01.410" Score="3" Body="&lt;p&gt;As to how such a device might work, look at the standard Commodore tape encoding, common to the PET, Vic-20, C64 and more. The timings actually vary very slightly between those computers when writing, but I'm going to use the archetypal timings given by &lt;a href=&quot;https://archive.org/details/transactor-anthology/page/n101&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Complete Commodore Inner Space Anthology, page 97&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A program file on tape consists of:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a leader — a block of high-pitched tone;&lt;/li&gt;&#xA;&lt;li&gt;the program header, then a second copy of the program header;&lt;/li&gt;&#xA;&lt;li&gt;the program data, then a second copy of the program data; and&lt;/li&gt;&#xA;&lt;li&gt;an end marker, followed by a second copy of the end marker.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Those things are encoded through three lengths of square wave:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a short wave consists of both a high and low portion, each lasting 182 µs;&lt;/li&gt;&#xA;&lt;li&gt;a long wave consists of both a high and low portion, each lasting 262 µs; and&lt;/li&gt;&#xA;&lt;li&gt;a mark wave consists of both a high and low portion, each lasting 342 µs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So a complete short wave is 364 µs, a complete long is 524 µs and a complete mark is 684 µs.&lt;/p&gt;&#xA;&lt;p&gt;The leader is just 50 cycles of 'short' waves. That's fairly straightforward.&lt;/p&gt;&#xA;&lt;p&gt;The other three parts are built up from bytes, and each byte is formed as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a byte marker;&lt;/li&gt;&#xA;&lt;li&gt;the eight bits from the byte; and&lt;/li&gt;&#xA;&lt;li&gt;a parity bit.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The byte marker is a complete mark wave plus a complete long wave. So it is 342+262 = 604 µs long. Each bit is then either: (i) a long wave followed by a short wave, to signal a '1'; or (ii) a short wave followed by a long wave, to signal a '0'. Therefore each bit is 182+262 = 444 µs long.&lt;/p&gt;&#xA;&lt;p&gt;There are nine bits plus the marker per byte = 4,600 µs. But every byte is repeated twice, so it actually occupies 9,200 µs.&lt;/p&gt;&#xA;&lt;p&gt;The machine is sensitive enough to detect the wave lengths as per above, so suppose you instead said that bytes don't have a marker, each one implicitly starts directly after the other. Also there's no parity, and each byte appears once. Instead a 16-bit CRC will be included after every 256 bytes. Also, we can simplify the encoding of each bit — e.g. just use one long wave for a '1' and one short wave for a '0'.&lt;/p&gt;&#xA;&lt;p&gt;Then the average bit length will be (262 + 182) / 2 = 222 µs. And each byte is just eight bits, so an average of 1776 µs long. Even if you include the new CRC bytes of two per 256, that adds only an average of (2/256)*1776 ~= 13.8 µs per byte. So call the new scheme 1790 µs per byte.&lt;/p&gt;&#xA;&lt;p&gt;9,200 / 1,790 ~= 5.14.&lt;/p&gt;&#xA;&lt;p&gt;So just by doing those things, you've increased the data rate to around 5.14 times as much as it was.&lt;/p&gt;&#xA;&lt;p&gt;I don't know whether that's close to what the Rabbit does or not, but this is how such a device &lt;em&gt;could&lt;/em&gt; work.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-09-07T22:40:01.410" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16100" PostTypeId="2" ParentId="16058" CreationDate="2020-09-08T06:59:10.323" Score="1" Body="&lt;p&gt;The 8086 addressing wasn't 20 bits, it's actually two 16-bit components (with a 16-bit ALU); those components being a segment and offset.&#xA;It sounds like 16+16=32, but the actual location was segment*16+offset, and wrapping around at 2^20 (later chips like 80286 allowed not wrapping, see &lt;a href=&quot;https://en.wikipedia.org/wiki/A20_line&quot; rel=&quot;nofollow noreferrer&quot;&gt;A20 line&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Usually this meant that e.g. for an array, you would allocate it to start a multiple of 16, and use that as the segment; then use the offset for the index within that array, always starting at zero. But it's very much using 16-bits at a time.&lt;/p&gt;&#xA;&lt;p&gt;AVR is a &amp;quot;modern&amp;quot; 8-bit architecture; it might be the brains in your washing machine or microwave. See ATMEGA328p, or Arduino UNO.&#xA;It's only got 8-bit words, 8-bit ALU; but addressing (2KB ram, 32KB flash) is done through multiple bytes. But because it's 8-bit, it's very much set up for handling numbers bigger than 8 bits; such as add-with-carry, etc.&lt;/p&gt;&#xA;&lt;p&gt;A regular 64-bit x86 PC has 64-bit words; which is way too much memory to handle as adresses; They don't even allow using al of them; with the upper bits of an address being flags, with meanings other than just address. Last I checked, 48 bits limit, but that's only 256 TB; so they might be expanding soon.&lt;/p&gt;&#xA;" OwnerUserId="19273" LastActivityDate="2020-09-08T06:59:10.323" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16101" PostTypeId="2" ParentId="16058" CreationDate="2020-09-08T18:45:54.683" Score="0" Body="&lt;p&gt;Early computing was dominated by batch processing, a program would run to completion without waiting for IO devices except storage. When a program was finished the next program (or batch of data) would be run, possibly for a different user.&lt;/p&gt;&#xA;&lt;p&gt;Wider registers and memory or ALUs would make computers faster and therefore requires less computers for the same throughput, that is less memory and control logic and a similar amount of register, ALU and memory interface for the same task.&lt;/p&gt;&#xA;&lt;p&gt;Later computers started to be used for tasks that were IO bound these reduced the memory savings of a fast CPU, as a fast CPU did not reduce the total run time of the program, though some saving is possible by using slower memory and copying to fast memory as required. That's why early home computers were typically stand-alone 8-bit systems, not dumb terminals connected to mainframes.&lt;/p&gt;&#xA;&lt;p&gt;Text processing also became more common for which large word sizes are less of an advantage.&lt;/p&gt;&#xA;&lt;p&gt;The reduced cost (and miniaturization) of computers made cost of using multiple smaller and slower computers cheaper than communications (and later admin) costs of a few larger computers.&lt;/p&gt;&#xA;" OwnerUserId="15729" LastActivityDate="2020-09-08T18:45:54.683" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16102" PostTypeId="2" ParentId="16058" CreationDate="2020-09-08T20:54:54.157" Score="2" Body="&lt;p&gt;The premise isn't entirely true. The IBM 1401, perhaps the most popular computer of the 1960's, used a &lt;strong&gt;seven&lt;/strong&gt; bit word (not including the parity bit). This was a business machine, not a number cruncher.&lt;/p&gt;&#xA;&lt;p&gt;Mainframe computers optimized for scientific and engineering calculations used big words for the same reason that most computer languages of the 21st century use 64 bits for their default floating point. Numerical calculations need extra precision to guard against numerical instability. Routinely using multiple precision techniques was considered too inefficient. But personal computers did a lot more text processing and graphics than heavy-duty number crunching, so multiple precision was OK for the occasional calculation.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2020-09-08T20:54:54.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16103" PostTypeId="2" ParentId="6381" CreationDate="2020-09-08T22:18:32.940" Score="0" Body="&lt;p&gt;At the beginning QDOS aka MS-DOS was trying to have some CP/M compatibility (File Control Block, 8.3 names, ^Z handling, etc.), so CRLF was used.&lt;/p&gt;&#xA;" OwnerUserId="7534" LastEditorUserId="7534" LastEditDate="2020-12-14T14:17:56.507" LastActivityDate="2020-12-14T14:17:56.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16104" PostTypeId="1" CreationDate="2020-09-09T00:26:55.353" Score="1" ViewCount="166" Body="&lt;p&gt;Over in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16082/was-there-an-input-device-capable-of-entering-all-algol-60-symbols-with-correct&quot;&gt;my question&lt;/a&gt; about input devices with character sets suited to Algol 60, I mentioned using an ASR-33 / KSR-33 teletype with the subscript-10 character &lt;code&gt;₁₀&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I have subsequently been unable to find details of what typewheels were available on teletypes. &lt;a href=&quot;http://bitsavers.trailing-edge.com/communications/teletype/33/1184B_Parts_Model_32_and_33_Page_Printer_Set_ASR_KSR_and_RO_Dec65.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;This parts manual&lt;/a&gt; lists several typewheels, giving part numbers and a two-letter code for each, but I can find no description of their character repertoires.&lt;/p&gt;&#xA;&lt;p&gt;(If you look at the parts list, just search for 'typewheel')&lt;/p&gt;&#xA;&lt;p&gt;What were the various typewheel configurations available for model 33 teletypes?  The answer I'm looking for will say what characters were available, and ideally what their codepoints were.  An easy way to write this up might be 'differences from ASCII', of whatever flavor of ASCiI you prefer to use as base.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-09-10T13:25:17.673" Title="What character repertoires were available on teletype typewheels?" Tags="&lt;character-sets&gt;&lt;teletype&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16105" PostTypeId="5" CreationDate="2020-09-09T01:59:27.333" Score="0" Body="" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-09T01:59:27.333" LastActivityDate="2020-09-09T01:59:27.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16106" PostTypeId="4" CreationDate="2020-09-09T01:59:27.333" Score="0" Body="Questions about character-sets, either from a standardization point of view, or in terms of the repertoire implemented by particular equipment." OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-09T01:59:27.333" LastActivityDate="2020-09-09T01:59:27.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16107" PostTypeId="5" CreationDate="2020-09-09T02:01:12.903" Score="0" Body="" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-09T02:01:12.903" LastActivityDate="2020-09-09T02:01:12.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16108" PostTypeId="4" CreationDate="2020-09-09T02:01:12.903" Score="0" Body="questions concerning actual teletype devices, including the famous model 33 teletype." OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-09T02:01:12.903" LastActivityDate="2020-09-09T02:01:12.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16109" PostTypeId="5" CreationDate="2020-09-09T02:02:21.313" Score="0" Body="" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-09T02:02:21.313" LastActivityDate="2020-09-09T02:02:21.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16110" PostTypeId="4" CreationDate="2020-09-09T02:02:21.313" Score="0" Body="Questions about the Algol languages: Algol 58 (IAL), Algol 60, Algol 68." OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-09T02:02:21.313" LastActivityDate="2020-09-09T02:02:21.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16111" PostTypeId="1" AcceptedAnswerId="16120" CreationDate="2020-09-09T05:05:18.483" Score="6" ViewCount="212" Body="&lt;p&gt;Who first proposed using a visual cue (of any kind) for hyperlinks the user has already visited?  If the individual is not known, what hypertext viewer first offered this feature?&lt;/p&gt;&#xA;&lt;p&gt;My guess would be NCSA Mosaic, but I cannot find confirmation of that.  &lt;a href=&quot;https://www.crazyegg.com/blog/why-hyperlinks-are-blue/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This article&lt;/a&gt; attempts to explain why hyperlinks default to blue in browsers, but does not explore why visited links are purple (or red, depending on your color spectrum sensitivity).  Tim Berners-Lee and Ted Nelson say, at first, color wasn't used to indicate links at all (only underlines).  The article doesn't touch on when a visual cue for a previously visited link was first offered.&lt;/p&gt;&#xA;&lt;p&gt;When I think back on pre-WWW hypertext viewers (WinHelp, Hypercard, etc.), none I recall offered the concept of a browsing history, which would be necessary to support the concept of a visited link.  Did the WWW introduce visited links to hypertext?&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="4222" LastEditDate="2020-09-09T20:48:52.913" LastActivityDate="2020-09-09T20:48:52.913" Title="First implementation of a visual cue for visited hyperlinks?" Tags="&lt;history&gt;&lt;internet&gt;&lt;netscape&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16112" PostTypeId="1" AcceptedAnswerId="16115" CreationDate="2020-09-09T05:57:23.387" Score="32" ViewCount="9853" Body="&lt;p&gt;In the fifties and sixties, program source code was typically stored on punch cards, one card per line.&lt;/p&gt;&#xA;&lt;p&gt;The most common card format was the IBM 80 column by 12 row. For source code, this was commonly used as one character position per column, the first 72 columns used for actual code, the last 8 for a sequence number. (Practical application: if you dropped a deck of cards all over the floor, after you picked them up, you could get them automatically sorted by the sequence number into correct order again.)&lt;/p&gt;&#xA;&lt;p&gt;In those days, computers didn't really do lowercase. Uppercase text only needs six bits per character.&lt;/p&gt;&#xA;&lt;p&gt;That means six bits per character were left over. What were they used for, if anything?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-10-03T16:02:00.677" Title="What did code on punch cards do with the other six bits per column?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;mainframe&gt;&lt;punched-cards&gt;" AnswerCount="9" CommentCount="11" FavoriteCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16113" PostTypeId="2" ParentId="16112" CreationDate="2020-09-09T07:48:31.203" Score="5" Body="&lt;p&gt;The code punched into a 12-row card is not a binary code, but actually a form of extended decimal coding.  Rows 0-9 are used to directly encode decimal digits, while letters and symbols are encoded as one decimal row plus one &amp;quot;zone row&amp;quot; which could be the A, B or 0 rows.&lt;/p&gt;&#xA;&lt;p&gt;Within the IBM 1401 series, this was re-encoded as an extended-BCD code in six bits.  Two of the bits record the zone row used (if any), while the other four encode the decimal rows.  This encoding propagated to the tape format.&lt;/p&gt;&#xA;&lt;p&gt;Each machine word on the 1401 had two additional bits for a total of eight; a &amp;quot;word mark&amp;quot; bit which was used to delimit instructions and data, and a parity bit for error detection.  These bits could not be encoded on a punch card.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-09-09T07:48:31.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16114" PostTypeId="2" ParentId="16112" CreationDate="2020-09-09T08:49:17.927" Score="31" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Uppercase text only needs six bits per character.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The fundamental mistake that you are making is assuming that punch codes were binary numbers.&#xA;They were not.&lt;/p&gt;&#xA;&lt;p&gt;The encodings were patterns, combinations of of zero, one, two, or three holes.&#xA;This is a &lt;em&gt;reference card&lt;/em&gt; in IBM 5081 format:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/-2ah9kYidBRY/WjiLOrr9rTI/AAAAAAABHM8/uUatyGuXBQYpACfx2rIO-aUh5DrGsEAgACHMYBhgL/w9999/punch-card-encoding.jpg&quot; alt=&quot;a reference punch card&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;The row numbering was somewhat odd, for historical reasons: 12, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.&#xA;Notice that the IBM 5081 here doesn't number rows 12 and 11.&lt;/p&gt;&#xA;&lt;p&gt;A complete explanation would be complex and long, and probably obscure the point.&#xA;But briefly:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Space was zero holes.&lt;/li&gt;&#xA;&lt;li&gt;The 12 one-hole patterns, through all rows, represented a couple of punctuation characters and then the digits 0 to 9.&lt;/li&gt;&#xA;&lt;li&gt;The remaining patterns were a combination of a range selection code, in the &amp;quot;zone&amp;quot; rows 12, 11, and 0, and an ordinal encoded in the &amp;quot;digit&amp;quot; rows 1 to 9.  The &amp;quot;zone&amp;quot; rows effectively bank-switched the meanings of the &amp;quot;digit&amp;quot; rows.&lt;/li&gt;&#xA;&lt;li&gt;The 27 major two-hole patterns all had exactly one hole in the &amp;quot;zone&amp;quot; rows and another hole in the 1 to 9 &amp;quot;digit&amp;quot; rows.  3 × 9 was enough for all uppercase letters of the English alphabet plus slash.&lt;/li&gt;&#xA;&lt;li&gt;Things got complex with the further patterns, which were punctuation but whose exact meanings varied over the years, and from manufacturer to manufacturer.  In these patterns, &amp;quot;digit&amp;quot; row 8 was &lt;em&gt;always&lt;/em&gt; punched, and the rest of the pattern was one hole in the &amp;quot;digit&amp;quot; rows 1 to 7 combined with zero (making two-hole patterns) or exactly one (making three-hole patterns) hole in the &amp;quot;zone&amp;quot; rows.  This made for 4 × 7 combinations.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In the IBM 5081 picture, the two one-hole patterns with holes in rows 12 and 11, representing two punctuation characters, are in fact there, but presented in the middle of the three-hole patterns.&#xA;The two-hole pattern for slash, with holes in rows 0 and 1, is similarly presented out of place.&#xA;This makes it less obvious that there are in fact one unassigned two-hole and three unassigned three-hole patterns with row 8 punched, here.&lt;/p&gt;&#xA;&lt;p&gt;EBCDIC looks odd to eyes used to character codes in binary.&#xA;It makes a lot &lt;em&gt;more&lt;/em&gt; sense when viewed as punch codes.&#xA;There is a direct correspondence between the upper nybble of the EBCDIC code and the &amp;quot;zone&amp;quot; row pattern, and between the lower nybble of the EBCDIC code and the &amp;quot;digit&amp;quot; row pattern.&#xA;There are tables showing this in detail in all three further reading items.&lt;/p&gt;&#xA;&lt;h1&gt;Further reading&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Douglas W. Jones.  &lt;em&gt;&lt;a href=&quot;http://homepage.divms.uiowa.edu/%7Ejones/cards/codes.html&quot; rel=&quot;noreferrer&quot;&gt;Punched Card Codes&lt;/a&gt;&lt;/em&gt;. The Punched Card Collection.  University of Iowa.&lt;/li&gt;&#xA;&lt;li&gt;John J. G. Savard. &lt;em&gt;&lt;a href=&quot;http://quadibloc.com/comp/cardint.htm&quot; rel=&quot;noreferrer&quot;&gt;The Punched Card&lt;/a&gt;&lt;/em&gt;.  quadibloc.com.&lt;/li&gt;&#xA;&lt;li&gt;W. Wayne Black (1971).  &amp;quot;Appendix 4: Punch Card Codes&amp;quot;. &lt;em&gt;An Introduction to On-line Computers&lt;/em&gt;.  CRC Press. ISBN 9780677029306.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1932" LastEditorUserId="1932" LastEditDate="2020-09-09T09:57:37.443" LastActivityDate="2020-09-09T09:57:37.443" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16115" PostTypeId="2" ParentId="16112" CreationDate="2020-09-09T09:13:48.823" Score="50" Body="&lt;h2&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;p&gt;Punch card code is &lt;strong&gt;not binary&lt;/strong&gt; but a collection of &lt;strong&gt;n out of m&lt;/strong&gt; encodings.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long Story&lt;/h2&gt;&#xA;&lt;p&gt;Yes, really a long story, so I'll only cover the main line from Hollerith to EBCDIC. There are many sidelines for special equipment, situations and as used by different manufacturers. Some covering up to 7 holes but all mostly compatible in the basic Numeric/Alpha region ... a bit like the various ISO 646 encodings :)&lt;/p&gt;&#xA;&lt;p&gt;Punch card encoding is essentially combinatoric and based upon decimal - with one hole per number - as it did grow out of numerical only - and based on the way cards were seen:&lt;/p&gt;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  COL 1234...&#xA;ROW  ,-------~&#xA;  12 |&#xA;  11 |&#xA;(1)0 |0000...  (Row zero is called 10 when it's about Alpha)&#xA;   1 |1111...&#xA;   2 |2222...&#xA;   3 |3333...&#xA;   4 |4444...&#xA;   5 |5555...&#xA;   6 |6666...&#xA;   7 |7777...&#xA;   8 |8888...&#xA;   9 |9999...&#xA;     '-------~&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Notation: Punched characters are described as their row numbers connected by hyphens, like &lt;em&gt;12-1&lt;/em&gt; marks an &lt;code&gt;A&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;Numbers&lt;/h3&gt;&#xA;&lt;p&gt;Numbers use a &lt;strong&gt;one out of ten&lt;/strong&gt; encoding. A number gets only one hole within a column. Rows 11 and 12 were used for &lt;code&gt;-&lt;/code&gt; and &lt;code&gt;+&lt;/code&gt; as sign.&lt;/p&gt;&#xA;&lt;h3&gt;(Upper Case) Letters&lt;/h3&gt;&#xA;&lt;p&gt;To add alpha, a &lt;strong&gt;two out of twelve&lt;/strong&gt; encoding was used (or more precisely, &lt;strong&gt;one out of three&lt;/strong&gt; plus &lt;strong&gt;one out of nine&lt;/strong&gt;) Each of the 26 basic (English) characters got one 'group' hole in row 10..12, called 'Zone', and a 'number' hole in 1..9. 3 x 9 = 27 combinations, a pleasant fit to hold 26 character, isn't it?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A..I got a hole in 12 plus one in 1..9&lt;/li&gt;&#xA;&lt;li&gt;J..R one in 11 plus another in 1..9, while&lt;/li&gt;&#xA;&lt;li&gt;S..Z had it in 10 (0) and 2..9.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The surplus combination (27 positions minus 26 letters) was assigned to 10-1 to avoid having two adjacent holes (*1).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;      RETRO&#xA;     ,-------~&#xA;  12 | X&#xA;  11 |X XXX&#xA;  10 | &#xA;   1 | &#xA;   2 | &#xA;   3 | &#xA;   4 | &#xA;   5 | X&#xA;   6 |    X&#xA;   7 | &#xA;   8 |  X&#xA;   9 |X  X&#xA;     '-------~&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3&gt;Punctuation&lt;/h3&gt;&#xA;&lt;p&gt;To add punctuation, the scheme was repeated using a three hole encoding. This time a hole in row 8 marks all punctuation, with characters as &lt;strong&gt;none or one out of three&lt;/strong&gt; (10..12) plus &lt;strong&gt;one out of six&lt;/strong&gt; in row 2 to 7, allowing up to 24 symbols.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;      *C+=1&#xA;     ,-------~&#xA;  12 | XX&#xA;  11 |X   &#xA;  10 | &#xA;   1 |    X&#xA;   2 | &#xA;   3 | X&#xA;   4 |X&#xA;   5 |  &#xA;   6 |  XX  &#xA;   7 | &#xA;   8 |X XX&#xA;   9 | &#xA;     '-------~&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3&gt;Lower Case Letters&lt;/h3&gt;&#xA;&lt;p&gt;EBCDIC finally added lower case letters by again using 3 holes, but this time two in the group section (10..12), making it a &lt;strong&gt;two out of three&lt;/strong&gt; plus &lt;strong&gt;one out of nine&lt;/strong&gt; (1..9). Except for the added group hole, the encoding was exactly like the uppercase, so&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a..i like A..I plus 10 (0)&lt;/li&gt;&#xA;&lt;li&gt;j..r like J..R plus 12&lt;/li&gt;&#xA;&lt;li&gt;s..z like S..Z plus 11&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre&gt;&lt;code&gt;      Retro&#xA;     ,-------~&#xA;  12 | XXXX&#xA;  11 |X XXX&#xA;  10 | X&#xA;   1 | &#xA;   2 | &#xA;   3 | &#xA;   4 | &#xA;   5 | X&#xA;   6 |    X&#xA;   7 | &#xA;   8 |  X&#xA;   9 |X  X&#xA;     '-------~&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3&gt;Control Characters&lt;/h3&gt;&#xA;&lt;p&gt;Control characters were filled in with EBCDIC as well, much like punctuation, but this time with an additional hole in row 9 and using a &lt;strong&gt;one out of three&lt;/strong&gt; (10..12) plus &lt;strong&gt;one out of seven&lt;/strong&gt; (1..7) producing 28 possible control codes.&lt;/p&gt;&#xA;&lt;h3&gt;Oddities&lt;/h3&gt;&#xA;&lt;p&gt;Two control characters (NUL and DS) use a five hole combination, while SPACE means no hole at all (and differs form BLANK). 12 alone has been redefined to &lt;code&gt;&amp;amp;&lt;/code&gt; as &lt;code&gt;+&lt;/code&gt; wandered over to 12-8-6&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;          S&#xA;          P&#xA;          AN&#xA;          CUD&#xA;      &amp;amp;-/+ELS&#xA;     ,--------~&#xA;  12 |X  X X&#xA;  11 | X    X&#xA;  10 |  X  XX&#xA;   1 |  X  XX&#xA;   2 | &#xA;   3 | &#xA;   4 | &#xA;   5 | &#xA;   6 |   X&#xA;   7 | &#xA;   8 |   X XX&#xA;   9 |     XX&#xA;     '-------~&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2&gt;Bottom line&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Although a hole might be seen as a binary values, punch card holes are not, but represent their row.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - It was later used for the slash (&lt;code&gt;/&lt;/code&gt;).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-01T13:54:04.647" LastActivityDate="2020-10-01T13:54:04.647" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16116" PostTypeId="2" ParentId="16112" CreationDate="2020-09-09T09:23:44.593" Score="30" Body="&lt;p&gt;Although you have many correct answers describing the nature of the coding used in punched cards, no  one has touched on the mechanical properties of the cards. Regular users of punched cards in the past would be familiar with this issue, as getting cards through the mechanics of a fast card reader regularly and repeatedly was a major issue at the time.&lt;/p&gt;&#xA;&lt;p&gt;If a card used all the holes in a vertical column (used to represent a character) then it would be much weakened and flimsy. It would not handle like a card and would very likely shred and thus jam the card reader. The design of the pattern of holes took issues like this into account, using just enough holes to convey information, but not so many holes as to remove any stiffness properties of the card.&lt;/p&gt;&#xA;&lt;p&gt;Cards lost their stiffness due to environmental issues, such as humidity, dampness and so on. This also caused them to jam up readers. Card reader jams was a regular daily occurrence in the day.&lt;/p&gt;&#xA;&lt;p&gt;That is a very strong reason why not all 12 x 80 holes were used in the coding.&lt;/p&gt;&#xA;&lt;p&gt;However it was possible to do this, and some IBM machines had this capability, and created what were known as lace cards. More details are shown in &lt;a href=&quot;https://en.wikipedia.org/wiki/Punched_card_input/output#Binary_format&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/7/7d/IBM_lace_card.jpg&quot; alt=&quot;Lace Card image from Wikipedia&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="611" LastEditorUserId="611" LastEditDate="2020-09-09T10:03:18.293" LastActivityDate="2020-09-09T10:03:18.293" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="16117" PostTypeId="2" ParentId="16104" CreationDate="2020-09-09T10:11:09.417" Score="3" Body="&lt;p&gt;&lt;em&gt;[No time for a real answer (got to push my narrowboat from Wolverhampton to B'ham), but ...]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.navy-radio.com/manuals-ttycorp.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;This page&lt;/a&gt; (which is a marvellous collection of TTY manuals) does have at least two charts (&lt;a href=&quot;http://www.navy-radio.com/manuals/tty/jh/ttyman4/AnalysisCharts/7171wd.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;7171WD&lt;/a&gt;, &lt;a href=&quot;http://www.navy-radio.com/manuals/tty/jh/ttyman4/AnalysisCharts/7172wd.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;7172WD&lt;/a&gt;) showing their encoding/population side by side (caution, strange PDF settings).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-09-09T19:16:12.847" LastActivityDate="2020-09-09T19:16:12.847" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16118" PostTypeId="1" AcceptedAnswerId="16127" CreationDate="2020-09-09T12:08:45.813" Score="11" ViewCount="3296" Body="&lt;p&gt;The most common punch card format was the IBM 80 column by 12 row, with narrow rectangular holes. However, there were other possibilities, such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Punched_card#IBM_96-column_punched_card_format&quot; rel=&quot;noreferrer&quot;&gt;a later IBM format&lt;/a&gt; that used round holes. That one was never widely used, but that's probably because it was introduced in 1969, at which point the days of punch cards were numbered anyway.&lt;/p&gt;&#xA;&lt;p&gt;Intuitively it seems to me that round holes would be better from a mechanical stiffness viewpoint, making the cards less likely to jam in the reader. Is it the case that round holes would be mechanically better and the rectangular hole format was used because of inertia? Or did rectangular holes have some other offsetting advantage? Or did it just really not make any difference?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10260" LastEditDate="2020-09-11T14:24:04.107" LastActivityDate="2020-09-11T14:24:04.107" Title="Were round punchcard holes mechanically stiffer?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;mainframe&gt;&lt;punched-cards&gt;" AnswerCount="4" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="16119" PostTypeId="2" ParentId="16118" CreationDate="2020-09-09T12:13:33.277" Score="13" Body="&lt;p&gt;Round holes might have been 'stiffer', but rectangular holes won on packing density.  When IBM invented the 80-column card (up from the previous 40-column Hollerith card of the same size), they determined you could get more columns per card by using rectangular holes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.ibm.com/ibm/history/ibm100/us/en/icons/punchcard/&quot; rel=&quot;noreferrer&quot;&gt;IBM's own history&lt;/a&gt; describes two competing designs: the 80-column rectangular-hole card we ended up with, and a 45-column round-hole approach with more than one symbol per column. But it appears to have 'specialized' subcolumns:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;thereby doubling the storage of data but with half of it devoted to&#xA;alphanumeric characters.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There seemed to have been two important factors which resulted in the decision going to the rectangular camp:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Tabulator operation would be simpler - I presume &amp;quot;one thing per column&amp;quot; being the factor here.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Rectangular-hole card design could be, &lt;a href=&quot;http://ibm-1401.info/Patent1772492.pdf&quot; rel=&quot;noreferrer&quot;&gt;and was&lt;/a&gt;, patented.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-09T21:58:32.343" LastActivityDate="2020-09-09T21:58:32.343" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16120" PostTypeId="2" ParentId="16111" CreationDate="2020-09-09T13:42:56.017" Score="5" Body="&lt;p&gt;As far as I can determine, the earliest tool with a visual cue identifying previously-visited links is &lt;a href=&quot;https://en.wikipedia.org/wiki/Netscape_Navigator&quot; rel=&quot;noreferrer&quot;&gt;Netscape Navigator&lt;/a&gt;, which already features purple visited links in beta versions (see &lt;a href=&quot;https://en.wikipedia.org/wiki/File:Mosaic_Netscape_0.9_on_Windows_XP.png&quot; rel=&quot;noreferrer&quot;&gt;this screenshot of 0.9&lt;/a&gt;, released in October 1994). I haven’t found any other web browser release available at the time with a similar feature.&lt;/p&gt;&#xA;&lt;p&gt;Competing browsers implemented the feature too; for example, NCSA Mosaic added it (and improved it by changing the underline to a dashed underline for visited links), as can be seen &lt;a href=&quot;https://www.howtogeek.com/661871/the-web-before-the-web-a-look-back-at-gopher/&quot; rel=&quot;noreferrer&quot;&gt;in this article on Gopher&lt;/a&gt; (the photo label is inaccurate, version 1.0 didn’t do this).&lt;/p&gt;&#xA;&lt;p&gt;Other potential candidates include Gopher browsers; but none of those available before 1994 that I’ve checked had any indication that a link had already been visited. &lt;a href=&quot;https://happymacs.wordpress.com/2017/06/08/using-turbogopher-to-access-happymacs-archive/&quot; rel=&quot;noreferrer&quot;&gt;TurboGopher on the Mac&lt;/a&gt; had bookmarks and kept a brief history, but didn’t differentiate links.&lt;/p&gt;&#xA;&lt;p&gt;There might have been earlier hypertext systems with a visual indicator, but I haven’t found one. (I’m thinking of systems such as PLATO Notes, even Xanadu although it was mostly vapourware in the 1990s...)&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-09-09T13:42:56.017" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16121" PostTypeId="2" ParentId="16104" CreationDate="2020-09-09T14:12:19.697" Score="0" Body="&lt;p&gt;At Waterloo, the old Teletypes were gradually replaced by IBM Selectrics.&#xA;Those used the &amp;quot;Script&amp;quot; and &amp;quot;APL&amp;quot; character sets, among others...&lt;/p&gt;&#xA;&lt;p&gt;IIRC, the older Teletypes also had the &amp;quot;APL&amp;quot; set - as we used APL a lot in those days (ca. 1975).&lt;/p&gt;&#xA;" OwnerUserId="19218" LastActivityDate="2020-09-09T14:12:19.697" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16122" PostTypeId="1" CreationDate="2020-09-09T15:04:55.230" Score="0" ViewCount="248" Body="&lt;p&gt;I cant find any adapters or secondary connectors, can anybody get me a link to a working floppy controller card that works or possibly a connector that goes from 20 pin male to 34 pin female? i have to work with 5.25 in apple 2 drives to recover geological survey data, and i have th e drive i just need the controller or connector in order to hook it up to my current pc, if it connects through usb thats helpful as well&lt;/p&gt;&#xA;" OwnerUserId="19290" LastActivityDate="2020-09-10T16:16:22.173" Title="I need to find a controller card for an apple II 5.25 inch floppy drive, the 20 pin connector wont work on the 34 pin controller card i have" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;&lt;floppy-drive&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16123" PostTypeId="2" ParentId="16122" CreationDate="2020-09-09T15:49:28.927" Score="2" Body="&lt;p&gt;Your question is confusing because there is not a 34-pin option for a 5.25&amp;quot; floppy disk drive that is directly compatible with an Apple ][ floppy controller card.&lt;/p&gt;&#xA;&lt;p&gt;This link describes &lt;a href=&quot;http://retro.co.za/ccc/apple2/disks-and-controllers/&quot; rel=&quot;nofollow noreferrer&quot;&gt;all the various, common, Apple II floppy controllers&lt;/a&gt;. They commonly provide either a 20-pin male ribbon cable connector, or a 19-pin female D-sub connector.&lt;/p&gt;&#xA;&lt;p&gt;I &lt;em&gt;assume&lt;/em&gt; you have an Apple ][ with the original Disk ][ controller card. This controller supports a 20-pin ribbon cable connections to a Apple Disk ][ drive, and the cable is normally hard-wired to the drive.&lt;/p&gt;&#xA;&lt;p&gt;You should check that your Apple ][ compatible floppy drive has either the 19-pin or 20-pin connection. If your drive has a 34-pin connection, then that sounds like a PC floppy drive to me.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="10666" LastEditDate="2020-09-09T19:03:14.983" LastActivityDate="2020-09-09T19:03:14.983" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16124" PostTypeId="2" ParentId="16118" CreationDate="2020-09-09T19:52:53.837" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;However, there were other possibilities, such as a later IBM format that used round holes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not only later, but also previous IBM formats used round holes. Similar next to all other contemporary (1930s) manufacturers (Powell, CDC, Honeywell, etc).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Intuitively it seems to me that round holes would be better from a mechanical stiffness viewpoint, making the cards less likely to jam in the reader. Is it the case that round holes would be mechanically better&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. Round holes are less prone to ripping and keep the cards more mechanical stable.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and the rectangular hole format was used because of inertia?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Nope.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or did rectangular holes have some other offsetting advantage?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's called using patents to fight off competition. The rectangular holes were part of IBM's patent application for the 80 column card and the essential claims of 'newness'. Patent law requires an invention to be new, not better.&lt;/p&gt;&#xA;&lt;p&gt;IBM's approach was to make their own equipment based on rectangular holes and fencing off competition. The fact that competitors did enable their machinery to read square and round holes was even in favour for IBM, as the market for (key) punches was way larger than for other equipment (sorters etc.). So only IBM punches could deliver cards for IBM machinery - and other manufacturers machinery as well.&lt;/p&gt;&#xA;&lt;p&gt;Unlike often cited, there is no advantage in density for rectangular holes over round ones, as readability (movement for brush wires) is defined by the width of a hole (in reading direction) which is the same for round or square holeswhen packing 80 columns on a card. Making them 'higher' has no advantage as already early 1900s equipment did transport cards fine enough to stay within a few mil.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or did it just really not make any difference?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;From an engineers point of view it was worse, but it wasn't about engineering but IP.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-09-10T09:12:25.113" LastActivityDate="2020-09-10T09:12:25.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16125" PostTypeId="2" ParentId="16118" CreationDate="2020-09-09T21:07:27.127" Score="1" Body="&lt;p&gt;If you punched a wrong character with a &lt;strong&gt;key punch&lt;/strong&gt; - (I have used them...), You could push a rectangular &amp;quot;chad&amp;quot; into a hole (with a bit of spit) and it would be retained sufficiently well to make it through a 600 card/minute card reader.&lt;/p&gt;&#xA;&lt;p&gt;Would this be true for a circular cut-out?&lt;/p&gt;&#xA;&lt;p&gt;BTW This was on ICL (ICT) 1900 machines, so I don't think it was a patent issue.&lt;/p&gt;&#xA;" OwnerUserId="19294" LastActivityDate="2020-09-09T21:07:27.127" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16126" PostTypeId="2" ParentId="16122" CreationDate="2020-09-09T21:35:19.720" Score="3" Body="&lt;p&gt;In short you won't find any adapter that will work for a regular PC controller.&lt;/p&gt;&#xA;&lt;p&gt;PC's use a different kind of encoding (MFM) from an apple ][ (GCR) so you'll need to get a new controller or use a genuine Apple ][.&lt;/p&gt;&#xA;&lt;p&gt;I would recommend AppleSauce &lt;a href=&quot;https://applesaucefdc.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://applesaucefdc.com/&lt;/a&gt; which connects over USB to a PC. Other alternatives are Kryoflux and there maybe a few more. Alternatively find a local apple ][ enthusiast.&lt;/p&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2020-09-09T22:43:55.730" LastActivityDate="2020-09-09T22:43:55.730" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16127" PostTypeId="2" ParentId="16118" CreationDate="2020-09-10T03:14:30.613" Score="9" Body="&lt;p&gt;&lt;em&gt;I'd have added this in a comment but don't have enough rep.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you read far enough into the IBM history link given by another-dave in his answer, you'll find this quote that indicates the rectangular holes were in fact stronger:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As well as handling more data, &lt;strong&gt;the unique rectangular hole was&#xA;stronger&lt;/strong&gt; [emphasis mine] and more compatible with the wire brushes that electrically&#xA;detected and gripped the holes, and thus was a patentable design. Such&#xA;innovations inspired IBM’s effort toward further patents in&#xA;tabluation—such as the Type 405 Alphabetic Accounting Machine and the&#xA;600 series of punched card machines—that came in a flurry during the&#xA;1930s.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, at the least, the person who wrote that caption believed that the rectangular holes were stronger than the round ones.&lt;/p&gt;&#xA;&lt;p&gt;This is the link to another-dave's original answer.&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/16119/19295&quot;&gt;https://retrocomputing.stackexchange.com/a/16119/19295&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the link to the page with the above quote:&#xA;&lt;a href=&quot;https://www.ibm.com/ibm/history/ibm100/us/en/icons/punchcard/breakthroughs/&quot; rel=&quot;noreferrer&quot;&gt;https://www.ibm.com/ibm/history/ibm100/us/en/icons/punchcard/breakthroughs/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;On that page, there is a set of four pictures. You need to push the &amp;gt; button to get to the one that has the quote (in the pic's caption).&lt;/p&gt;&#xA;" OwnerUserId="19295" LastActivityDate="2020-09-10T03:14:30.613" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16128" PostTypeId="2" ParentId="16122" CreationDate="2020-09-10T05:46:39.493" Score="1" Body="&lt;p&gt;EDIT: New answer. See below for old answer.&lt;/p&gt;&#xA;&lt;p&gt;Another solution that could work, not tested, is to read the floppies with Kryoflux. It is advertized as being able to read the raw magnetic flux of all floppies in PC drives. I haven't tested it and I read that it works but is somehow very complicated but it is an idea.&#xA;&lt;a href=&quot;https://www.kryoflux.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.kryoflux.com/&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.os2museum.com/wp/kryofluxing-pc-floppies/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.os2museum.com/wp/kryofluxing-pc-floppies/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;EDIT: I misread the question and responded with the contrary of the question. I keep the answer as it is still more or less relevant.&lt;/p&gt;&#xA;&lt;p&gt;There were special controllers for Apple II that had besides the 20 pin Apple Interface a 34 pin Shugart interface. Erphi from Germany sold them. I have one and it works quite well. DIP switches allow to set the nummber of tracks 35/40 (70/80), double step etc.&#xA;You just have to be careful to not use the IBM-PC twisted drive select/motor control cable and setting.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Disk%20Drive%20Controllers/erphi%20Disk%20Controller/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Disk%20Drive%20Controllers/erphi%20Disk%20Controller/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sometimes you can find them on ebay.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="7095" LastEditDate="2020-09-10T16:16:22.173" LastActivityDate="2020-09-10T16:16:22.173" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16129" PostTypeId="1" AcceptedAnswerId="16132" CreationDate="2020-09-10T13:21:09.470" Score="2" ViewCount="172" Body="&lt;p&gt;I have an Intel 8080 core and would like to build the minimal computer system around it to run Tiny BASIC interactively. I am building this computer on an FPGA, so I am not asking about actual components, rather, the connection of the peripherals in terms of ports or memory mapped addresses.&lt;/p&gt;&#xA;&lt;p&gt;An ideal answer to my question would consist of a link to a Tiny BASIC binary ready to be loaded on an Intel 8080, together with memory layout information (e.g. &amp;quot;put the binary at RAM starting at 0x0000 with size at least 4 K&amp;quot;), initialization (&amp;quot;reset PC to 0x0100 to start&amp;quot;), and IO (e.g. &amp;quot;if a byte is written to port 0x01, show it as ASCII to the user. If a byte is read from port 0x02, return 1 if a new input byte is ready, 0 otherwise. If a byte is read from port 0x69, return the next input byte&amp;quot;, or &amp;quot;interrupt with &lt;code&gt;RST 3&lt;/code&gt; when a new input byte is available and put it to RAM address 0Ff000&amp;quot;).&lt;/p&gt;&#xA;&lt;p&gt;I should also add that I am looking for a standalone version, not one that requires CP/M. The simpler the peripherals, the better.&lt;/p&gt;&#xA;" OwnerUserId="115" LastEditorUserId="115" LastEditDate="2020-09-10T13:34:12.823" LastActivityDate="2020-09-10T15:10:50.977" Title="Peripherals needed to run Tiny BASIC interactively on an Intel 8080" Tags="&lt;hardware&gt;&lt;basic&gt;&lt;8080&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16130" PostTypeId="2" ParentId="16104" CreationDate="2020-09-10T13:25:17.673" Score="0" Body="&lt;p&gt;I'm not sure of the ASR-33, but I did find a &amp;quot;&lt;a href=&quot;http://www.bitsavers.org/pdf/diablo/printer/Diablo_Supplies_Type_Book_Sep1982.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;type book&lt;/a&gt;&amp;quot; for the Diablo 630, which was available in a teleprinter terminal configuration (as well as a pure printer).  The selection there might be representative.  Look in the last few pages for a complete set of character maps, including both character codes and spoke positions.&lt;/p&gt;&#xA;&lt;p&gt;And yes, there is at least one character set specialised for APL.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-09-10T13:25:17.673" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16131" PostTypeId="1" CreationDate="2020-09-10T15:07:43.640" Score="6" ViewCount="2128" Body="&lt;p&gt;I have found two different sets of Nintendo 64 ROMs with the same games (which, of course, I physically own). One is labeled &amp;quot;ByteSwapped&amp;quot; and the other &amp;quot;BigEndian&amp;quot;. What exactly does this mean?&lt;/p&gt;&#xA;&lt;p&gt;While doing research prior to asking this question, all I found was this: &lt;a href=&quot;https://en.wikipedia.org/wiki/Endianness#Byte_swapping&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Endianness#Byte_swapping&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;That sadly doesn't clear anything up to me.&lt;/p&gt;&#xA;" OwnerUserId="19305" LastEditorUserId="3290" LastEditDate="2020-09-11T09:10:43.697" LastActivityDate="2020-09-11T13:45:35.700" Title="What does &quot;ByteSwapped&quot; and &quot;BigEndian&quot; refer to in the context of video game ROMs?" Tags="&lt;rom&gt;&lt;terminology&gt;&lt;nintendo-64&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16132" PostTypeId="2" ParentId="16129" CreationDate="2020-09-10T15:10:50.977" Score="2" Body="&lt;p&gt;I have Tiny BASIC 1 and 2 source code, for exactly the same reason you described (my own 8080-based computer).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/omenmicro/alpha/tree/master/sw/BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is a source code and a binary&lt;/a&gt;, ready to loaded from 01000h. Serial communication is provided by ACIA MC6850 - see lines 1420 - 1475, routines &lt;code&gt;outc&lt;/code&gt; and &lt;code&gt;chkio&lt;/code&gt;. ACIA is accessed via 0DEh (control/status register) and 0DFh (data register).&lt;/p&gt;&#xA;&lt;p&gt;So: Load it from 1000h, start it with &lt;code&gt;JMP 01000h&lt;/code&gt;, reading from 0DEh awaits a status byte (bit 2=1 when ACIA is clear to send, bit 1=1 when ACIA has received data), reading from 0DFh reads received data, writing to 0DFh sends data to transmission.&lt;/p&gt;&#xA;&lt;p&gt;I believe you can appreciate &lt;a href=&quot;https://github.com/datacipy/VHDL/tree/master/acia6850&quot; rel=&quot;nofollow noreferrer&quot;&gt;VHDL implementation of MC6850 for FPGA&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Feel free to contact me for further details or help with customization for your hardware.)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-09-10T15:10:50.977" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16133" PostTypeId="2" ParentId="16131" CreationDate="2020-09-10T15:39:04.233" Score="11" Body="&lt;p&gt;There’s &lt;a href=&quot;http://jul.rustedlogic.net/thread.php?id=11769&quot; rel=&quot;noreferrer&quot;&gt;a detailed thread about this on Jul&lt;/a&gt;. Basically, there are three data storage orders used for Nintendo 64 ROMs:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;big-endian, which is the Nintendo 64’s native order (Z64 in the thread);&lt;/li&gt;&#xA;&lt;li&gt;little-endian, which is x86’s native order (N64);&lt;/li&gt;&#xA;&lt;li&gt;byte-swapped, which swaps bytes in the native data pair-wise (V64).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Endianness determines the order in which data larger than one byte is stored. In big-endian order, the individual bytes composing a larger value are stored starting with the most significant byte; so 1,000,000 (0x000F4240) is stored, in a 32-bit type, as the sequence of bytes 0x00, 0x0F, 0x42, 0x40. In little-endian order, the individual bytes are stored starting with the least significant byte; 1,000,000 is stored as 0x40, 0x42, 0x0F, 0x00. Byte-swapped is an in-between format, storing 1,000,000 as 0x0F, 0x00, 0x40, 0x42.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-09-10T15:39:04.233" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16134" PostTypeId="2" ParentId="16058" CreationDate="2020-09-10T16:09:15.823" Score="1" Body="&lt;p&gt;Given the small (by today's standards) memory, it was very convenient to be able to include a full memory address within a machine instruction.&lt;/p&gt;&#xA;&lt;p&gt;For instance, &lt;a href=&quot;http://www.bitsavers.org/pdf/honeywell/series6000/BS16_GMAP_Pocket_Guide_Jul74.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Honeywell 6000 assembler&lt;/a&gt;&#xA;instructions looked like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wBFEW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wBFEW.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The first half of the instruction could contain a full memory address, so instructions such as load-register were self contained.&#xA;The complications of segmented memory were completely avoided.&lt;/p&gt;&#xA;&lt;p&gt;The address section could also be used to contain literal data, providing &amp;quot;immediate&amp;quot; instructions (e.g. the literal value 123456 could be in those first 18 bits, and the machine instruction could say to add that value to a specific register).&#xA;What would later, in the *86 processors, take several instructions (to build an address, load its contents, add it to a register, and copy it to another register) was fast and trivial.&lt;/p&gt;&#xA;" OwnerUserId="15689" LastActivityDate="2020-09-10T16:09:15.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16135" PostTypeId="2" ParentId="16058" CreationDate="2020-09-10T16:38:00.867" Score="1" Body="&lt;p&gt;Many early machines processed data in bit-serial fashion, which meant that doubling the word size would reduce the number of words that could be held by a given number of memory circuits, but wouldn't increase the required number of processing circuits.  To the contrary, cutting the number of discrete addresses would reduce the amount of circuitry necessary to access them.&lt;/p&gt;&#xA;&lt;p&gt;Further, while it might seem that using e.g. an 18-bit word to hold a value that would always be in the range 0-255 would be wasteful, having instructions that can process either long or short integer types would add complexity, and having hardware use short integer types would increase the number of instructions would be needed to operate on longer ones.&lt;/p&gt;&#xA;&lt;p&gt;For integers that are not part of an array, the amount of storage needed to hold the instructions that work with them will almost always be much larger than the amount of storage to hold the values themselves.  Thus, even if 75% of such integers would only need a half-word to hold them, doubling the amount of code needed to handle the other 25% would outweigh any savings from using a smaller word size.&lt;/p&gt;&#xA;&lt;p&gt;Incidentally, one advantage of load-store architectures is that it allows a system to reap most of the benefits of being able to work with mixed-sized objects, while only having to add multiple-size support to only a few instructions (loads and stores), rather than to all instructions.&lt;/p&gt;&#xA;&lt;p&gt;Perhaps it would have made sense to have machines wired so that part of their memory space is occupied by full-width memory and part of it only has half of the data bits connected.  This was sometimes done even into the 1990s with things like the display memory on true-color video cards that was frequently wired so that only 3/4 of the bytes would be populated.  Such designs, however, would tend to limit the use of the memory systee to certain specific purposes.  That makes sense for something like a 640x480 &amp;quot;true color&amp;quot; video card, but less sense for a general-purpose computer.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-09-10T16:38:00.867" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16136" PostTypeId="1" CreationDate="2020-09-10T17:32:52.133" Score="2" ViewCount="215" Body="&lt;p&gt;I was first exposed to GUI libraries in the 80's, and all of them initially included typical GUI objects like buttons, checkboxes, edit fields, and so on, but I don't recall being able to write a program that included a GUI library with a pre-built spreadsheet-like grid component until I first saw Visual Basic.&lt;/p&gt;&#xA;&lt;p&gt;What was the first language library to actually include a GUI grid component?&lt;/p&gt;&#xA;" OwnerUserId="19306" LastActivityDate="2020-09-10T18:15:23.950" Title="What was the first language library to include a GUI grid component?" Tags="&lt;gui&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16137" PostTypeId="2" ParentId="16136" CreationDate="2020-09-10T18:15:23.950" Score="3" Body="&lt;p&gt;One candidate is the &lt;a href=&quot;https://web.archive.org/web/20100620005332/http://linuxjunkies.org/programming/GUI/xwindow/x11/composite.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;form widget&lt;/a&gt; in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Project_Athena&quot; rel=&quot;nofollow noreferrer&quot;&gt;Project Athena&lt;/a&gt; Xaw library.&lt;/p&gt;&#xA;&lt;p&gt;I couldn't find an exact date for this library; Project Athena started in 1983.&lt;/p&gt;&#xA;&lt;p&gt;And it's really a for graphical UI, not a text-based one like dBase.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-09-10T18:15:23.950" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16138" PostTypeId="2" ParentId="14502" CreationDate="2020-09-10T21:50:36.453" Score="1" Body="&lt;p&gt;An example: the source code for a simple &lt;a href=&quot;http://www.s100computers.com/My%20System%20Pages/8080%20CPU%20Board/8080%20CPU%20Board%20Rev0.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;8080 Monitor&lt;/a&gt; is &lt;a href=&quot;http://www.s100computers.com/Software%20Folder/8080%20Monitor/8080.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; (PDF format, code starts on page 8 of 41).&lt;/p&gt;&#xA;&lt;p&gt;After several repeats of &lt;code&gt;MVI A, ... / OUT ...&lt;/code&gt; to set up hardware, we hit the magic line:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LXI SP,STACK        ; SETUP THE STACK AT 0EFF0H&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So the user has to initialize the stack in the right place, as Graham Nye said.&lt;/p&gt;&#xA;&lt;p&gt;The comment in the very next line explains why this is so important:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;                    ; Have a Stack, so we can use CALL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;CALL&lt;/code&gt; and &lt;code&gt;PUSH&lt;/code&gt; are effectively unavailable to the user until SP is set.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-09-10T21:50:36.453" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16139" PostTypeId="2" ParentId="4440" CreationDate="2020-09-11T01:10:25.040" Score="0" Body="&lt;p&gt;To answer the main question (&amp;quot;When was internet access first available to public in USA?&amp;quot;), one candidate would be &lt;a href=&quot;https://www.fidonet.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FidoNet&lt;/a&gt;, an early popular BBS (Bulletin Board System).&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://www.fidonet.org/inet92_Randy_Bush.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;this history&lt;/a&gt;, FidoNet had working &lt;a href=&quot;https://en.wikipedia.org/wiki/UUCP&quot; rel=&quot;nofollow noreferrer&quot;&gt;UUCP&lt;/a&gt; gateways as early as 1986:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Although primitive experiments had been conducted earlier, in 1986&#xA;gateways between FidoNet and the uucp network, and hence the Internet,&#xA;became sufficiently reliable for production use.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.lns.com/papers/ufgate/UFGATE.HOW&quot; rel=&quot;nofollow noreferrer&quot;&gt;UFGATE&lt;/a&gt; (UUCP-to-FidoNet Gateway) was the standard gateway for transferring mail and news.&lt;/p&gt;&#xA;&lt;p&gt;Since FidoNet was an ad-hoc network of dial-up systems, with most nodes available to the public for free or at low cost, these UUCP gateways would have given users indirect access to the early Internet (assuming the UUCP host was connected to the Internet, which became more common as time went on).&lt;/p&gt;&#xA;&lt;p&gt;This style of access, though, is not in the spirit of your second question (&amp;quot;where you open a connection to the internet, launch a web browser, and type in a domain name&amp;quot;).  These gateways did not offer interactive or direct connections.  FidoNet and UUCP were store-and-forward technologies, meaning the user's email might not be transferred for hours, or even days.&lt;/p&gt;&#xA;&lt;p&gt;For more background, &lt;a href=&quot;http://www.cs.cmu.edu/%7Edga/15-849/store_and_forward.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; offers a good comparison of FidoNet and UUCP.&lt;/p&gt;&#xA;" OwnerUserId="4222" LastActivityDate="2020-09-11T01:10:25.040" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16140" PostTypeId="2" ParentId="14502" CreationDate="2020-09-11T07:40:16.650" Score="2" Body="&lt;p&gt;Stack resides where the programmer tells.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;LXI SP,0FFFFh&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LXI H,0FFFFh&#xA;SPHL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;are the most commonly used construction to tell CPU where the stack should reside. So the main program has to set SP itself, and the best practise is to do it at the same beginning of execution.&lt;/p&gt;&#xA;&lt;p&gt;The typical sequence is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ORG 0&#xA;DI&#xA;LXI SP, STACK&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The DI instruction disables interrupt, which is effectively the same as CALL, i.e. it writes the return address on the stack. So DI is often the very first instruction, just to be sure that interrupt does not execute prior the stack pointer is valid.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-09-11T07:40:16.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16141" PostTypeId="1" CreationDate="2020-09-11T10:11:28.523" Score="4" ViewCount="829" Body="&lt;p&gt;If I start vanilla &amp;quot;Mesen-S&amp;quot; and load in &lt;em&gt;Super Mario Kart&lt;/em&gt;, it says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This game requires a firmware file for the DSP1B chip.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If I feed the emulator that &amp;quot;DSP ROM&amp;quot; file, it then runs Super Mario Kart.&lt;/p&gt;&#xA;&lt;p&gt;However, if I load in &lt;em&gt;Stunt Race FX&lt;/em&gt;, famous for being one of the games for SNES which uses the special &amp;quot;Super FX&amp;quot; chip, it just runs immediately without asking me to locate any special DSP ROM, or having such a thing for the Super FX chip.&lt;/p&gt;&#xA;&lt;p&gt;Why is this? How can this be?&lt;/p&gt;&#xA;&lt;p&gt;(Until now, I didn't know that SMK even used any special hardware/chip at all; I thought it was &amp;quot;vanilla SNES&amp;quot;.)&lt;/p&gt;&#xA;" OwnerUserId="19307" LastActivityDate="2020-09-12T10:22:33.840" Title="Why does the &quot;Mesen-S&quot; SNES emulator require a separate DSP ROM for Super Mario Kart, but *not* for Stunt Race FX?" Tags="&lt;emulation&gt;&lt;snes&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16142" PostTypeId="2" ParentId="16141" CreationDate="2020-09-11T12:17:46.140" Score="3" Body="&lt;p&gt;The source code for Mesen-S is available online at &lt;a href=&quot;https://github.com/SourMesen/Mesen-S&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/SourMesen/Mesen-S&lt;/a&gt; .&#xA;I found the following code in &lt;a href=&quot;https://github.com/SourMesen/Mesen-S/blob/master/Core/NecDsp.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/SourMesen/Mesen-S/blob/master/Core/NecDsp.cpp&lt;/a&gt; :&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;switch(type) {&#xA;    case CoprocessorType::DSP1: firmwareLoaded = FirmwareHelper::LoadDspFirmware(console, FirmwareType::DSP1, &amp;quot;dsp1.rom&amp;quot;, &amp;quot;dsp1.program.rom&amp;quot;, &amp;quot;dsp1.data.rom&amp;quot;, programRom, dataRom, embeddedFirware); break;&#xA;    case CoprocessorType::DSP1B: firmwareLoaded = FirmwareHelper::LoadDspFirmware(console, FirmwareType::DSP1B, &amp;quot;dsp1b.rom&amp;quot;, &amp;quot;dsp1b.program.rom&amp;quot;, &amp;quot;dsp1b.data.rom&amp;quot;, programRom, dataRom, embeddedFirware); break;&#xA;    case CoprocessorType::DSP2: firmwareLoaded = FirmwareHelper::LoadDspFirmware(console, FirmwareType::DSP2, &amp;quot;dsp2.rom&amp;quot;, &amp;quot;dsp2.program.rom&amp;quot;, &amp;quot;dsp2.data.rom&amp;quot;, programRom, dataRom, embeddedFirware); break;&#xA;    case CoprocessorType::DSP3: firmwareLoaded = FirmwareHelper::LoadDspFirmware(console, FirmwareType::DSP3, &amp;quot;dsp3.rom&amp;quot;, &amp;quot;dsp3.program.rom&amp;quot;, &amp;quot;dsp3.data.rom&amp;quot;, programRom, dataRom, embeddedFirware); break;&#xA;    case CoprocessorType::DSP4: firmwareLoaded = FirmwareHelper::LoadDspFirmware(console, FirmwareType::DSP4, &amp;quot;dsp4.rom&amp;quot;, &amp;quot;dsp4.program.rom&amp;quot;, &amp;quot;dsp4.data.rom&amp;quot;, programRom, dataRom, embeddedFirware); break;&#xA;    case CoprocessorType::ST010: firmwareLoaded = FirmwareHelper::LoadDspFirmware(console, FirmwareType::ST010, &amp;quot;st010.rom&amp;quot;, &amp;quot;st010.program.rom&amp;quot;, &amp;quot;st010.data.rom&amp;quot;, programRom, dataRom, embeddedFirware, 0xC000, 0x1000); break;&#xA;    case CoprocessorType::ST011: firmwareLoaded = FirmwareHelper::LoadDspFirmware(console, FirmwareType::ST011, &amp;quot;st011.rom&amp;quot;, &amp;quot;st011.program.rom&amp;quot;, &amp;quot;st011.data.rom&amp;quot;, programRom, dataRom, embeddedFirware, 0xC000, 0x1000); break;&#xA;    default: break;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It appears that these coprocessors are supported by loading an additional firmware file, whereas some others are emulated directly. I suspect this is because the various DSP chips are really just maths coprocessors, and therefore very simple to emulate, whereas the more advanced SuperFX chip is more of a graphics accelerator and requires its own emulation.&lt;/p&gt;&#xA;&lt;p&gt;All the code that emulates the DSP chips is the same for all the models, with a few conditional statements that affect the ST010 and ST011. They just need to have relevant firmware loaded, to ensure they work accurately, as they are not interchangeable&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2020-09-11T12:17:46.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16143" PostTypeId="2" ParentId="16131" CreationDate="2020-09-11T13:45:35.700" Score="2" Body="&lt;p&gt;For historical reasons most computers treat a byte as the smallest unit of data they operate on. A byte only contains 8 bits, so to store a 32 bit value you need 4 bytes. The question is what order the bytes should be stored in.&lt;/p&gt;&#xA;&lt;p&gt;The N64 has a MIPS CPU which is Big Endian. That means it stores the most significant byte first, a lot like how we write numbers in English. For example if I write 1234 then 1 is the most significant digit, it's the thousands digit. 4 is the last significant digit, the units, and comes last.&lt;/p&gt;&#xA;&lt;p&gt;Most PCs are Little Endian, meaning they put the least significant byte first. That would be like writing the above number as 4321, i.e. units first and thousands last. There are historic and technical reasons why computers do this, and it was one of the great holy wars back in the day. The name itself refers to Gulliver's Travels, in which there is a war over which end of the egg to break open (the big end or the little end).&lt;/p&gt;&#xA;&lt;p&gt;The V64 format is like writing the number as 2143, or hundreds thousands units tens. That rather strange order came about because of the design of the Doctor V64, a peripheral for the N64 that allowed ripping ROMs to a PC and is the source of many early files. It's not clear why they selected the unusual byte order, it may have been a primitive form of protection to prevent the ripped ROMs being used on competing devices, or it may simply have been a mistake.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-09-11T13:45:35.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16145" PostTypeId="1" AcceptedAnswerId="16201" CreationDate="2020-09-11T18:27:43.053" Score="18" ViewCount="2084" Body="&lt;p&gt;Intel invented the original 32/64-bit PCI bus in the early 1990s to replace the decade old ISA bus used in PC's. It was immediately popular (in comparison to Micro Channel or EISA), being both faster and more supportive of auto-configuration (i.e. &amp;quot;Plug &amp;amp; Play&amp;quot;) than the buses it replaced. By the mid-1990s, most new PC's included PCI slots and ISA slots started their gradual phase-out.&lt;/p&gt;&#xA;&lt;p&gt;None of the above is surprising, and other systems had already pioneered these features for consumer/home computers years before (e.g. Amiga Zorro, MIT's NuBus). But what did surprise me was that non-PC-compatible systems rapidly adopted PCI as well. The PowerPC 604 based &lt;a href=&quot;https://en.wikipedia.org/wiki/Power_Macintosh_9500&quot; rel=&quot;noreferrer&quot;&gt;Power Macintosh 9500&lt;/a&gt; brought PCI to the Mac product line in 1995, and Apple quickly deprecated NuBus in favor of PCI. Also, several years later, Elbox introduced the Mediator line of PCI bus boards (e.g. &lt;a href=&quot;http://amiga.resource.cx/exp/mediator1200&quot; rel=&quot;noreferrer&quot;&gt;Mediator PCI 1200&lt;/a&gt;) to the Amiga 68K based computers. Surely, there were many other systems that also had a compatible PCI bus without an Intel processor.&lt;/p&gt;&#xA;&lt;p&gt;It makes economic sense that Intel would design PCI to support multiple Intel processors, such as 80486/Pentium/Pentium II/etc. Thereby, they were creating a new bus that would support many processor generations and scale up bus performance as the processors also improved. But I don't know what Intel's economic rationale would be in making PCI a common bus and a good choice for designers of non-Intel CPU systems.&lt;/p&gt;&#xA;&lt;p&gt;My question is:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Did Intel intend to make PCI a solution for non-Intel systems too, and actually provide some sort of assistance to system integrators who pursued this? If so, then why?&lt;/li&gt;&#xA;&lt;li&gt;What hardware, if any, did system integrators have to engineer themselves to adapt non-Intel (e.g. PowerPC, MC68000, etc.) CPU's to the PCI bus? What I'm getting at here is whether these hardware designers had to make new, custom, bus interface hardware, or did they just use something off-the-shelf that was already CPU agnostic.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-09-14T14:55:26.860" LastActivityDate="2021-02-13T21:30:12.707" Title="How and why did Intel make the PCI bus &quot;CPU Agnostic&quot;?" Tags="&lt;history&gt;&lt;amiga&gt;&lt;apple-macintosh&gt;&lt;intel&gt;&lt;powerpc&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16147" PostTypeId="1" CreationDate="2020-09-11T19:28:19.337" Score="6" ViewCount="544" Body="&lt;p&gt;In honor of this weekend being 1,600,000,000 (1.6 billion) seconds since the Unix epoch, I was wondering if anyone knows why January 1st 1970 was chosen?&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Unix_time#History&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The earliest versions of Unix time had a 32-bit integer incrementing at a rate of 60 Hz, which was the rate of the system clock on the hardware of the early Unix systems. The value 60 Hz still appears in some software interfaces as a result. The epoch also differed from the current value. The first edition Unix Programmer's Manual dated 3 November 1971 defines the Unix time as &amp;quot;the time since 00:00:00, 1 January 1971, measured in sixtieths of a second&amp;quot;.&lt;a href=&quot;https://en.wikipedia.org/wiki/Unix_time#cite_note-16&quot; rel=&quot;noreferrer&quot;&gt;&lt;sup&gt;[16]&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The User Manual also commented that &amp;quot;the chronologically-minded user will note that 2**32 sixtieths of a second is only about 2.5 years&amp;quot;. Because of this limited range, the epoch was redefined more than once, before the rate was changed to 1 Hz and the epoch was set to its present value of 1 January 1970 00:00:00 UTC. This yielded a range of about 136 years, half of it before 1970 and half of it afterwards.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There's not really a mention of &lt;em&gt;why&lt;/em&gt; it was chosen.&lt;/p&gt;&#xA;&lt;p&gt;Honestly, it may be as simple as the logic below, but I'm curious if anyone has anything more definitive than a best guess.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;They wanted to use midnight January 1st at GMT because it is the start of the year in a &amp;quot;neutral&amp;quot; timezone.&lt;/li&gt;&#xA;&lt;li&gt;They used 1971 first because they could only express ~2.5 years of time when using 60 Hz intervals&lt;/li&gt;&#xA;&lt;li&gt;They used 1970 when they updated to 1 Hz intervals to round it to a &amp;quot;nicer&amp;quot; number (1970 has an additional zero) and is close to the original epoch they used before.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;One thing that sticks out is why not use the year 2000 instead of 1970? It is &amp;quot;nicer&amp;quot; than 1970 since it has more zeroes and is not so far in the future that the ~136 years of time that could be expressed before it is prohibitive (e.g., if you chose 2100 you could only express as far back as ~1964). &lt;em&gt;(To be clear, I am not asking why not use 2000 since that makes the question more subjective, I am just pointing out that 1970 is not some immediately obvious special number.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;For an example of a timekeeping format that uses a more &amp;quot;meaningful&amp;quot; epoch there are &lt;a href=&quot;https://tools.ietf.org/html/rfc4122#section-4.1.4&quot; rel=&quot;noreferrer&quot;&gt;(Time-based) UUIDs&lt;/a&gt;. They use midnight October 15th 1582 as the epoch because it was when the &lt;a href=&quot;https://en.wikipedia.org/wiki/Gregorian_calendar&quot; rel=&quot;noreferrer&quot;&gt;Gregorian calendar&lt;/a&gt; began being used.&lt;/p&gt;&#xA;" OwnerUserId="11612" LastActivityDate="2020-09-11T22:11:21.013" Title="Why is the Unix epoch January 1st 1970? (In honor of 1600000000 this weekend.)" Tags="&lt;history&gt;&lt;unix&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16148" PostTypeId="2" ParentId="16147" CreationDate="2020-09-11T20:47:48.683" Score="5" Body="&lt;p&gt;Many of such decisions are arbitrary and only guided by major considerations. An OS designer, especially back then, did not sit down for days to muse about the best way, it's all about usability for the given task. T&#xA;The story might have worked like this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;We need a timestamp.&lt;/li&gt;&#xA;&lt;li&gt;Lets take the 60 Hz source.&lt;/li&gt;&#xA;&lt;li&gt;That way 32 Bit is fine to hold a whole year.&lt;/li&gt;&#xA;&lt;li&gt;Cool.&lt;/li&gt;&#xA;&lt;li&gt;Let's start at 1/1/1971, so we get a clean number.&lt;/li&gt;&#xA;&lt;li&gt;Handy to go thru dumps.&lt;/li&gt;&#xA;&lt;li&gt;Oops, we might to live longer than 2 years.&lt;/li&gt;&#xA;&lt;li&gt;Lets take seconds instead, that 60-fold the range, that's more than anyone will ever need (*1)&lt;/li&gt;&#xA;&lt;li&gt;Cool, done, lets move on.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Serious, later on people often add more thought than originally has been used.&lt;/p&gt;&#xA;&lt;p&gt;Or in a more serious way:&lt;/p&gt;&#xA;&lt;p&gt;Points in no particular order to think about&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Time zones do not matter. There is no inherent advantage for selecting any specific time zone, as 'moving' a date/time value into any other time zone will always require the same calculation, only the constants used change. Using UTC does avoid any disscusion about 'why' as it's the same 'zero point' used for all mapping as well.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Starting from 1st of January is quite handy as it allows calculating the year of a given date/time value by simply subtracting a constant value for a years length (if not using a table, adjustment by leap years will be needed). To go from there to a date is again done by subtracting month values (or looking them up in a table), corrected by a leap day if after Feb 28th and dividable by four. So again straight forward.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using the year 2000 as base would not bring any advantage for calculation, but so  disadvantages for usage due numbers being negative for decades to come:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All handling, even the most primitive, would have to be signed.&lt;/li&gt;&#xA;&lt;li&gt;Simple binary sorting (like for logs) would be screwed when passing the 'zero point'&lt;/li&gt;&#xA;&lt;li&gt;Calculations (like before) would be less simple&lt;/li&gt;&#xA;&lt;li&gt;And (IMHO most important) timestamps in hex dumps aren't as easy to handle.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And yes, 1970 is nice in human eyes. Easy to memorise. And after all, if the new clock can cover more than 100 years, it doesn't really matter to give up a year to 'beautify'. Such nice round days are a practice found in several systems. For example, BS2000 sets the machine clock (*1) to zero for January 1st 1950 - even though it wasn't developed until the late 1960s.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Meaningful is always to be seen in a context. Unix time was designed to have a reliable time stamp for reporting, calculation of time passed (timers), marking file creation and update and alike. None of that needs to cover a time prior to system creation or many decades or even centuries. Its use for other purposes later on is a different story.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;So long story short, 1/1/1970 is a very sensible date to use within the of Unix and intended usage.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - 640 Kib are more ....&lt;/p&gt;&#xA;&lt;p&gt;*2 - That clock is hardware driven with 64 bit width. Bit position 41 is incremented every microsecond, making it somewhat similar, as position 31 is incremented every 1.024 seconds. Any yes, all of the above calculations work as well quite fine - it's all about the correction values for hour and day :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-09-11T21:11:29.207" LastActivityDate="2020-09-11T21:11:29.207" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16149" PostTypeId="2" ParentId="16145" CreationDate="2020-09-11T21:01:22.497" Score="19" Body="&lt;p&gt;Short Answer:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;At the time PCI was devised, the x86 bus had already gone a long way toward being less chip specific.&lt;/li&gt;&#xA;&lt;li&gt;PCI is maybe a clean design, but some choices for signals are still 'intelish'&lt;/li&gt;&#xA;&lt;li&gt;Moving bus definition from following what a certain CPU implementation needs toward a more generic structure opens up more ways for future CPU development than pulling along old features&lt;/li&gt;&#xA;&lt;li&gt;It follows a general direction of removing particular I/O implementation from CPU design and center the CPU bus at what the CPU needs (something that moved today into contrary direction again).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4663" LastEditDate="2020-09-11T21:21:36.367" LastActivityDate="2020-09-11T21:21:36.367" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16150" PostTypeId="2" ParentId="16147" CreationDate="2020-09-11T22:11:21.013" Score="0" Body="&lt;p&gt;Memory and disk space were very short in the olden days. In my first (non-unix) job, most &amp;quot;dates&amp;quot; were expressed as WWY - where WW was the week number and Y was the last digit of the year.&lt;/p&gt;&#xA;&lt;p&gt;So it was natural to use the biggest reasonable date that had a zero in the units year position as a base.&lt;/p&gt;&#xA;&lt;p&gt;Time zones don't matter if you have built a few tonnes of immovable computer and you aren't bothered about email (the first &amp;quot;email&amp;quot; didn't happen until 1971).&lt;/p&gt;&#xA;" OwnerUserId="19294" LastActivityDate="2020-09-11T22:11:21.013" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16152" PostTypeId="1" AcceptedAnswerId="16157" CreationDate="2020-09-12T08:53:00.067" Score="0" ViewCount="271" Body="&lt;p&gt;Should C be regarded as an intermediate language on a virtual machine named PDP-11 Architecture (which have a plain memory space and stacks), like opcode to jvm, msil to dotnet, asm.js to v8, which has to be translated and optimized for real machines of different architectures? (therefore C is the Java before Java)&lt;/p&gt;&#xA;&lt;p&gt;Or if not, should PDP-11 assembly do?&lt;/p&gt;&#xA;" OwnerUserId="17812" LastActivityDate="2020-09-12T15:01:00.497" Title="Should C be regarded as an Intermediate Language?" Tags="&lt;c&gt;&lt;pdp-11&gt;" AnswerCount="3" CommentCount="2" ClosedDate="2020-09-12T17:26:11.240" ContentLicense="CC BY-SA 4.0" />
  <row Id="16153" PostTypeId="1" AcceptedAnswerId="16183" CreationDate="2020-09-12T09:29:15.253" Score="24" ViewCount="8818" Body="&lt;p&gt;It is highly unrecommended to write your own code in assembly now since, in most cases, &lt;code&gt;gcc -O3&lt;/code&gt; does magic. But in the ‘80s it was believed that compiled C code takes 4(?) times or more than a well-organized assembly equivalent. When and why does coding C for performance as the primary choice become the received practice? Which compiler first made it, on which architecture?&lt;/p&gt;&#xA;&lt;p&gt;Are there any high level language compilers (Ada/COBOL/Fortran/Pascal) other than C families which generates optimized code outperforming average assembly programmers?&lt;/p&gt;&#xA;" OwnerUserId="17812" LastEditorUserId="15334" LastEditDate="2020-10-10T17:20:35.863" LastActivityDate="2021-03-04T01:03:25.270" Title="When did compilers start generating optimized code that runs faster than an average programmer's assembly code?" Tags="&lt;compilers&gt;" AnswerCount="12" CommentCount="18" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16154" PostTypeId="2" ParentId="16112" CreationDate="2020-09-12T09:32:09.243" Score="2" Body="&lt;p&gt;For completeness, here is an example of a punch card in the row-order byte-based Soviet &lt;a href=&quot;https://en.wikipedia.org/wiki/GOST_10859&quot; rel=&quot;nofollow noreferrer&quot;&gt;GOST&lt;/a&gt; encoding.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;     ,--------------------------------------------------------------------------------.&#xA;  12 |  X     X   XXXX X   XX  X  X  XXX    X   XX   X  X X X X   XXXXX X   X XX   XXX|&#xA;  11 |X X XXX XX  X XX X   X XX   XXXX X      X X XXX X XX X XX   XXXX X    XX X  X  X|&#xA;  10 |  X XX  X XX    XX  X   X   XXXXX X XXX  X  X X   X  X XXX   XXXX   XXXX  XX  X |&#xA;   1 |X X XX X  X  X XX   XXXXXX   X    X      X  XX  X XX  XXX   XXXXX XXXXXXX X XXX |&#xA;   2 |XX     X    XXX X   XXXXX   XXXXX XX    X X XXX XX   XXX  XX  X   X  X X X  XX  |&#xA;   3 |X   XXXX  XX   X  X  X XX   XXXX X  X X XX    X   X  X X X  X  XX XX X XX   XXXX|&#xA;   4 |XX  X XXX X XX XXX    X XX  X     X X X X XX  XXX   XXXX  X      X  X  XX   XXXX|&#xA;   5 | X    XX X  X  XXX     X  X  X XX   XXXXX X   X XX   X  X X XXX  X   X XX XXXXXX|&#xA;   6 |X   XXXX X   XX  X  X  XXX    X X   XXXX X       X  X  X  X XX    X  X X    XXX |&#xA;   7 |                                                                                |&#xA;   8 |                                                                                |&#xA;   9 |                                                                                |&#xA;     '--------------------------------------------------------------------------------'            &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It contains the text &amp;quot;A QUICK BROWN FOX JUMPS OVER THE LAZY DOG.  PORTEZ CE VIEUX WHISKY AU JUGE BLOND QUI FUME.&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-09-12T09:32:09.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16155" PostTypeId="2" ParentId="16153" CreationDate="2020-09-12T09:43:23.670" Score="31" Body="&lt;p&gt;For a start, it is widely known that FORTRAN II for the IBM 1401 series was &lt;em&gt;specifically&lt;/em&gt; designed to generate high enough quality object code to make assembly programming of numerical routines unnecessary.  FORTRAN compilers have largely kept up that legacy ever since.&lt;/p&gt;&#xA;&lt;p&gt;C compilers have historically varied in quality a great deal.  It must be remembered that C was originally designed as a sort of &amp;quot;portable assembly language&amp;quot; with a reasonable correspondence to the instructions and addressing modes of the PDP-11.  Suitably written C with even a simple compiler could be remarkably efficient.  But object code produced by some early compilers, particularly for microcomputer platforms such as the PC, was unreasonably bad.&lt;/p&gt;&#xA;&lt;p&gt;Today, even with the sophisticated compilers now available, it is still usually possible for a skilled assembly coder to write better code than a compiler produces.  They may use instructions that the compiler does not know how to use, or understand the algorithms more deeply than can be expressed in C.  At a minimum, they can start with the output of a compiler and improve from there.&lt;/p&gt;&#xA;&lt;p&gt;The advantage of the compiler is that it generates code &lt;em&gt;more quickly&lt;/em&gt;, ie. with less developer effort, and the source code is easier to maintain.  Today's sophisticated compilers help to reduce the performance deficit that traditionally went along with that.  But sophisticated compilers are not new.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="13660" LastEditDate="2020-09-14T20:51:45.733" LastActivityDate="2020-09-14T20:51:45.733" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16156" PostTypeId="2" ParentId="16141" CreationDate="2020-09-12T10:22:33.840" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;If I feed the emulator that &amp;quot;DSP ROM&amp;quot; file, it then runs Super Mario Kart.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The physical DSP chips have special firmware, which is illegal to distribute (just like &amp;quot;regular&amp;quot; game ROMs).&lt;/p&gt;&#xA;&lt;p&gt;This is somewhat similar to how some other consoles have a BIOS or &amp;quot;boot ROM&amp;quot; that's run when the console starts up. This isn't firmware for the CPU per se, but code that's required for the console to initialize correctly.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, if I load in Stunt Race FX, famous for being one of the games for SNES which uses the special &amp;quot;Super FX&amp;quot; chip, it just runs immediately without asking me to locate any special DSP ROM, or having such a thing for the Super FX chip.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Super FX is basically a CPU. It's a coprocessor that can do the calculations needed for rendering advanced graphical effects, including 3D polygons. It does not require any special software to run; the game gives it instructions directly (like with the regular CPU) and so it can be emulated directly.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(Until now, I didn't know that SMK even used any special hardware/chip at all; I thought it was &amp;quot;vanilla SNES&amp;quot;.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There are &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Super_NES_enhancement_chips&quot; rel=&quot;nofollow noreferrer&quot;&gt;many different chips in SNES cartridges&lt;/a&gt;, some of which require firmware and some that don't. This is one advantage of having cartridge-based games; the cartridges not only contain the game code in a ROM, but can also expand the base console with extra hardware to enhance the game.&lt;/p&gt;&#xA;" OwnerUserId="15661" LastActivityDate="2020-09-12T10:22:33.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16157" PostTypeId="2" ParentId="16152" CreationDate="2020-09-12T10:57:32.747" Score="5" Body="&lt;p&gt;It's not really clear in what context the question is asked, so I'll try to go along.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Should C be regarded as an intermediate language on a virtual machine named PDP-11 Architecture (which have a plain memory space and stacks), like opcode to jvm, msil to dotnet, asm.js to v8, which has to be translated and optimized for real machines of different architectures?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes and no.&lt;/p&gt;&#xA;&lt;p&gt;C is clearly not an intermediate code - the mentioned bytecodes aren't languages at all, but either instruction sets or halfway compiled source. C is a language of it's own, and while it can be used to crank out some bytecode (which may reassemble structures found on a DEC CPU), this isn't C but a layer for a virtual machine. C itself is still a HLL.&lt;/p&gt;&#xA;&lt;p&gt;Your assumption may come from the fact that, C, as a language, is very much targeted on a specific class of CPU architectures, less fitting for others. It isn't as abstract as other High Level Languages like BASIC, COBOL or Pascal. But on the other hand, it doesn't carry too specific constructs, thus compilation can be done for next to any CPU.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(therefore C is the Java before Java)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. If you're looking for &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Iznogoud&quot; rel=&quot;noreferrer&quot;&gt;Java before Java&lt;/a&gt;&amp;quot;, then &lt;a href=&quot;https://en.wikipedia.org/wiki/UCSD_Pascal&quot; rel=&quot;noreferrer&quot;&gt;UCSD Pascal&lt;/a&gt; with its &lt;a href=&quot;https://en.wikipedia.org/wiki/P-code_machine#UCSD_p-Machine&quot; rel=&quot;noreferrer&quot;&gt;p-code machine&lt;/a&gt; is what you're looking for.&lt;/p&gt;&#xA;&lt;p&gt;Over the years it got everything JAVA claims but about two decades before:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Binary portability&lt;/li&gt;&#xA;&lt;li&gt;Virtual machine&lt;/li&gt;&#xA;&lt;li&gt;Bytecode&lt;/li&gt;&#xA;&lt;li&gt;Bytecode to native translation&lt;/li&gt;&#xA;&lt;li&gt;IDE&lt;/li&gt;&#xA;&lt;li&gt;etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;... all the way to ...&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a CPU made to execute the bytecode native, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pascal_MicroEngine&quot; rel=&quot;noreferrer&quot;&gt;Pascal Microengine&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-09-12T10:57:32.747" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16158" PostTypeId="2" ParentId="16145" CreationDate="2020-09-12T11:02:29.427" Score="13" Body="&lt;p&gt;The early-to-mid 1990s was a time where the future of the Personal Computer was &lt;em&gt;very much&lt;/em&gt; up for grabs. Both the &amp;quot;Wintel&amp;quot; monopoly as a whole, and each part individually, where &lt;em&gt;not at all&lt;/em&gt; set to be the foundations of the future PCs.&lt;/p&gt;&#xA;&lt;p&gt;Even if we were to assume that x86 would &amp;quot;win&amp;quot;, we had OS/2 and to a lesser extent BeOS as competitors on the desktop, OS/2 and various Unices on the workstation, and Unices on the servers. Linux also started to make its first appearances. For example, in 1988, Intel, SCO, and AT&amp;amp;T had developed the Intel Binary Compatibility Standard (iBCS), a standard ABI ensuring that applications compiled against the iBCS would run on any Unix system on an x86 processor, and SCO contributed a Linux implementation in ~1994. It seems that Intel was not at all convinced that Windows would stay the dominant OS, and they wanted to improve the chances of Unix by working with Unix vendors to make their OSs compatible with each other.&lt;/p&gt;&#xA;&lt;p&gt;Plus, it was the time of the whole &amp;quot;new OS paradigm&amp;quot; hype with Workplace OS, Taligent, Rhapsody, and Cairo, where even Microsoft itself was working on a successor to Windows, IBM was working on a successor to OS/2, etc.&lt;/p&gt;&#xA;&lt;p&gt;And even if we were to assume that Windows would &amp;quot;win&amp;quot;, Microsoft had ensured that Windows NT was highly portable, even going so far as to use an architecture for the developer workstations and tests that they didn't even intend to publicly release a port for. Windows NT was running on x86, Alpha, MIPS, SPARC, and PowerPC, either ported by MS itself or by partners (e.g. the PowerPC port by IBM). Even Intel itself was developing the i860 (used in the Microsoft Dazzle workstations used to develop Windows NT) as a completely new CPU architecture that might be able to replace x86 on the workstation. &lt;a href=&quot;https://en.wikipedia.org/wiki/Architecture_Neutral_Distribution_Format&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANDF&lt;/a&gt; was also started at the end of 1989, as an effort to make compiled programs independent of the CPU. (It inspired both the Java platform and LLVM, although in both cases more in a &amp;quot;lessons learned&amp;quot; sense and not in a &amp;quot;great idea&amp;quot; sense.)&lt;/p&gt;&#xA;&lt;p&gt;In addition to that uncertainty about which CPU architecture and which OS would be the PC of the future, there were two disruptive technologies that not only meant that the choice wasn't obvious, but that made the whole choice of OS and CPU &lt;em&gt;completely irrelevant&lt;/em&gt;: the WWW and Java. (Java had not been released yet by the time PCI came out, but it already existed and was already talked about. It was also in some sense inevitable.)&lt;/p&gt;&#xA;&lt;p&gt;So, to put a long story short: designing a new bus that would &lt;em&gt;not&lt;/em&gt; be CPU-independent would quite simply have been stupid, since even Intel itself was working on an at least partial replacement for at least some markets of the x86. And it needed to be a (reasonably) open standard because it needed to be supported by DOS, Windows, Windows NT, OS/2, BeOS, MacOS, SCO Unix, Novell UnixWare, 386BSD, Linux, and all the &amp;quot;new&amp;quot; OSs that were expected at the time, and it should be easy to write drivers without Intel's involvement.&lt;/p&gt;&#xA;&lt;p&gt;Making PCI reasonably open was likely also a reaction to the failure of IBM's Micro Channel Architecture, which was mainly plagued by being proprietary and requiring expensive licenses from IBM. The proprietary nature and the licensing costs were two of the main driving factors in the creation of EISA.&lt;/p&gt;&#xA;&lt;p&gt;Note that this is a trend that we see continuing today with Intel-involved standards such as USB (released only 4 years later) and Thunderbolt.&lt;/p&gt;&#xA;" OwnerUserId="578" LastEditorUserId="3683" LastEditDate="2021-02-13T21:30:12.707" LastActivityDate="2021-02-13T21:30:12.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16159" PostTypeId="2" ParentId="16145" CreationDate="2020-09-12T11:35:06.750" Score="3" Body="&lt;p&gt;The answer to your question 1. is YES.&lt;/p&gt;&#xA;&lt;p&gt;Their rationale was a simple and effective business strategy. An approach that sacrificed proprietary control in exchange for market penetration.&lt;/p&gt;&#xA;&lt;p&gt;To illustrate that strategy:-&lt;/p&gt;&#xA;&lt;p&gt;The oil industry presented the automobile manufacturers with a simple but effective common denominator, the petrol pump with its standardised hose and spout. The oil companies knew that there would be lots of competition in the fuel chain and that there would be no end to the number of automobile brands and models. So, they made sure that petrol was going to be the energy source that everyone would use for decades to come. They created the defacto delivery standard.&lt;/p&gt;&#xA;&lt;p&gt;Intel knew that their competitors would not go away and so they provided the motherboard manufacturers with a defacto standard. One that would allow their chips to be installed on any motherboard.&lt;/p&gt;&#xA;&lt;p&gt;It is notable that electric cars are being manufactured with highly customised battery packs. No opportunities for creating a defacto standard there. Pity that the oil companies didn't take control of the Lithium resources.&lt;/p&gt;&#xA;" OwnerUserId="19315" LastEditorUserId="4335" LastEditDate="2020-09-12T14:09:26.613" LastActivityDate="2020-09-12T14:09:26.613" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16160" PostTypeId="2" ParentId="16152" CreationDate="2020-09-12T12:36:13.380" Score="2" Body="&lt;p&gt;This appears to be triggered by my answer to another question, in which I asserted that C was originally conceived as a &amp;quot;portable assembly language&amp;quot; with the PDP-11 in mind.  &lt;strong&gt;This does not at all mean that C should be thought of as targetting a virtual PDP-11.&lt;/strong&gt;  Rather, the PDP-11 had a relatively complete feature set, which was used as a model for what operations C should directly support.&lt;/p&gt;&#xA;&lt;p&gt;By the time C came along, several other high-level compiled and interpreted languages were already well established.  Some, like FORTRAN and BASIC, were relatively simple; others, like Algol, were extremely complex and correspondingly difficult to implement.  C had, as its primary goal, the capability to write large parts of an operating system's kernel and utilities, a goal which was not met by these high-level languages, and demanded a language which did not abstract the underlying machine too much.&lt;/p&gt;&#xA;&lt;p&gt;Hence C was designed to be easy to write an efficient compiler for, initially targeting the PDP-11 but also applicable to many other machines, and so that the code expressed in it would have a similar structure to competent assembly language.&lt;/p&gt;&#xA;&lt;p&gt;There is no built-in memory management except for the CPU's stack, with &lt;code&gt;malloc()&lt;/code&gt; and &lt;code&gt;free()&lt;/code&gt; being library routines that are themselves written in C.  Native string types require built-in memory management, so in C strings are just arrays of &lt;code&gt;char&lt;/code&gt;, and arrays in turn are just pointers to some known element within them (usually the first).  This closely matches how strings and memory are handled in assembler.&lt;/p&gt;&#xA;&lt;p&gt;Today's CPUs have grown many capabilities that the PDP-11 did not have.  To some extent the C language has not kept up with these developments.  But I have never heard of a C compiler which actually generated PDP-11 code as an intermediate product before translating it to its actual target; indeed that would be absurd.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-09-12T12:36:13.380" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16161" PostTypeId="2" ParentId="16152" CreationDate="2020-09-12T13:04:15.240" Score="1" Body="&lt;p&gt;No, by definition an intermediate language would be just that -- intermediate; a step in translation.  C was designed, and in practice, actually used, as a high-level systems programming language.  Unix (and other operating systems), compilers, user applications and all other kinds of software were, and still are, written directly in C.&lt;/p&gt;&#xA;&lt;p&gt;C only became a common target for automatic translation once C compilers were ubiquitous.&lt;/p&gt;&#xA;&lt;p&gt;Compare with how, back in the 1970s, it wasn't uncommon to see Fortran used in this role, since FORTRAN once held the exalted position of having a compiler available on nearly every platform.  Also compare with Javascript, which now holds a similar position.  Javascript is very poorly suited as a general purpose intermediate language, far more so than C (or even Fortran, arguably!) but, again, it is ubiquitous, so it will be used as an intermediate language in practice.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2020-09-12T15:01:00.497" LastActivityDate="2020-09-12T15:01:00.497" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16162" PostTypeId="1" CreationDate="2020-09-12T17:02:59.673" Score="-6" ViewCount="816" Body="&lt;p&gt;&lt;a href=&quot;https://byuu.org/higan/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://byuu.org/higan/&lt;/a&gt;&#xA;&lt;a href=&quot;https://byuu.org/bsnes/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://byuu.org/bsnes/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The domain is called &amp;quot;byuu.org&amp;quot;.&lt;/li&gt;&#xA;&lt;li&gt;The emulator is said to be called &amp;quot;higan&amp;quot; or &amp;quot;bsnes&amp;quot;.&lt;/li&gt;&#xA;&lt;li&gt;The download link for &amp;quot;higan&amp;quot; goes to: &lt;a href=&quot;https://github.com/higan-emu/higan/releases&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/higan-emu/higan/releases&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;That page doesn't talk about &amp;quot;higan&amp;quot; but &amp;quot;ares&amp;quot;.&lt;/li&gt;&#xA;&lt;li&gt;Downloading the file and running it, the application calls itself &amp;quot;lucia&amp;quot;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;What is going on? Is it called higan, ares or lucia? Does the author(s) have some sort of hate against consistency to the point where it's impossible to know what the application is actually called?&lt;/p&gt;&#xA;&lt;p&gt;I truly have no idea what's going on. I don't even have a guess. What is &amp;quot;lucia&amp;quot; and &amp;quot;ares&amp;quot;?&lt;/p&gt;&#xA;" OwnerUserId="19318" LastActivityDate="2020-09-12T17:15:55.377" Title="What's the deal with &quot;higan&quot;?" Tags="&lt;emulation&gt;&lt;snes&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2020-09-13T16:09:40.003" ContentLicense="CC BY-SA 4.0" />
  <row Id="16163" PostTypeId="2" ParentId="16162" CreationDate="2020-09-12T17:14:58.673" Score="3" Body="&lt;p&gt;The history is somewhat complex, but explained in &lt;a href=&quot;https://github.com/higan-emu/higan/wiki/Component-map&quot; rel=&quot;nofollow noreferrer&quot;&gt;the higan wiki&lt;/a&gt;, &lt;a href=&quot;https://byuu.org/higan/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the higan site&lt;/a&gt; and &lt;a href=&quot;https://byuu.org/ares/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the ares site&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;bsnes was originally a SNES emulator, with the goal of being as accurate as possible. Its author went by the nick “byuu”. After a while, other emulation targets were added to bsnes, so its name was deemed inaccurate, and byuu renamed it to higan. In March 2020 byuu retired from the project, handing it to the community; but then during the pandemic, byuu started developing it again, as a fork named ares.&lt;/p&gt;&#xA;&lt;p&gt;To make things a bit more complex, byuu was also the name of a UI for higan, written by the original author, who started using the nick “Near”. This UI is now called lucia.&lt;/p&gt;&#xA;&lt;p&gt;So ares is the emulator, and lucia is a UI for it.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-09-12T17:14:58.673" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16165" PostTypeId="1" CreationDate="2020-09-12T17:36:47.570" Score="8" ViewCount="666" Body="&lt;h2&gt;Context at the time&lt;/h2&gt;&#xA;&lt;p&gt;Handheld graphing calculator &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_48_series&quot; rel=&quot;noreferrer&quot;&gt;HP 48 series - Wikipedia&lt;/a&gt;, produced between 1990 and 2003, include infrared and serial communication ports to send and receive data and programs between each other and computers using the &lt;a href=&quot;https://en.wikipedia.org/wiki/Kermit_(protocol)&quot; rel=&quot;noreferrer&quot;&gt;Kermit protocol&lt;/a&gt; (first S/SX model), and also Xmodem (later G/GX model).&lt;/p&gt;&#xA;&lt;p&gt;At the time :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;common computers were PCs&lt;/li&gt;&#xA;&lt;li&gt;virtually all had a serial port (DB9 or DB25 connector)&lt;/li&gt;&#xA;&lt;li&gt;HP transfer cable were easy to buy, or make from any cable that has a DB-9 end (e.g. salvaged from a broken serial mouse)&lt;/li&gt;&#xA;&lt;li&gt;they were overwhelmingly running DOS or Windows&lt;/li&gt;&#xA;&lt;li&gt;Kermit-capable programs were available (some free-as-in-beer).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Kermit is a &amp;quot;implemented on hundreds of different computer and operating system platforms&amp;quot;, I remember transferring files between my HP48 and an Amiga computer around 2000.&lt;/p&gt;&#xA;&lt;p&gt;The original Kermit file transfer protocol implementation &amp;quot;C-Kermit&amp;quot; has existed on Linux for ages, yet not open-source.&lt;/p&gt;&#xA;&lt;h2&gt;Current context&lt;/h2&gt;&#xA;&lt;p&gt;Now it is 2020:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PCs are still common&lt;/li&gt;&#xA;&lt;li&gt;most (especially laptops) don't have DB9/DB25 serial ports.&lt;/li&gt;&#xA;&lt;li&gt;HP48 cable are available on e.g. ebay (wow, $25-$100 I consider that very expensive)&lt;/li&gt;&#xA;&lt;li&gt;alternatives to Windows are available (may I even say &amp;quot;common&amp;quot;?)&lt;/li&gt;&#xA;&lt;li&gt;it is somewhat accepted that open-source software tend to rot not as fast as closed-source software distributed as binary only.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Question: how to transfer files in practice?&lt;/h2&gt;&#xA;&lt;p&gt;Is there an easy solution to transfer files with currently common hardware and open-source software?  Assuming a modern Linux and open-source software may have the benefit of &lt;em&gt;not&lt;/em&gt; restricting the solution to x86/AMD64 (a.k.a. Intel architecture) machines.&lt;/p&gt;&#xA;" OwnerUserId="574" LastEditorUserId="10260" LastEditDate="2020-11-15T01:32:23.433" LastActivityDate="2020-11-29T20:00:25.107" Title="How to transfer file(s) between modern Linux host and HP48 handheld calculator?" Tags="&lt;serial&gt;&lt;hp&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16166" PostTypeId="2" ParentId="16165" CreationDate="2020-09-12T17:36:47.570" Score="15" Body="&lt;h1&gt;Prepare hardware&lt;/h1&gt;&#xA;&lt;h2&gt;Gather hardware&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Get or make a serial cable from HP48 to DB9 (most common) or DB25 (instructions on &lt;a href=&quot;https://www.hpcalc.org/hp48/docs/faq/48faq-12.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.hpcalc.org/hp48/docs/faq/48faq-12.html&lt;/a&gt;, the core of it being: looking at the calculator socket from left to right, pins are shield,tx,rx,ground ).&lt;/li&gt;&#xA;&lt;li&gt;Get a USB-to-Serial adapter with matching DB connector, or add an adapter.  Beware, some cheap adapters don't respect RS232 levels (-12/+12) and do 0-5V instead, this can be a cause of failure to communicate.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Ensure PC recognizes hardware&lt;/h2&gt;&#xA;&lt;p&gt;We assume here that the PC side operating system runs Linux.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Plug the USB-to-serial adapters: &lt;code&gt;(PC)[USB]---[USB](USB-to-Serial adapter)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;In most cases, the adapter will be recognized by Linux as &lt;code&gt;/dev/ttyUSB0&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Running &lt;code&gt;dmesg&lt;/code&gt; may provide a confirmation, or hints if the port is different. (Depending on distribution and settings, you might need root access to run &lt;code&gt;dmesg&lt;/code&gt;.)&lt;/li&gt;&#xA;&lt;li&gt;Plug the rest: &lt;code&gt;(PC)[USB]---[USB](USB-to-Serial adapter)[DB]---&amp;lt;hp48cable&amp;gt;---[4pin connector](HP48)&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;Prepare software&lt;/h1&gt;&#xA;&lt;h2&gt;Information: why the software choice below&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A &lt;a href=&quot;https://packages.debian.org/search?keywords=ckermit&quot; rel=&quot;nofollow noreferrer&quot;&gt;ckermit package&lt;/a&gt; used to be included in Debian (and thus derivatives like Ubuntu) but no longer. Edit: C-Kermit maintainer is working with Debian (in 2020) to get it included again!&lt;/li&gt;&#xA;&lt;li&gt;A &lt;a href=&quot;https://packages.debian.org/search?keywords=gkermit&quot; rel=&quot;nofollow noreferrer&quot;&gt;gkermit package&lt;/a&gt; exists but it seems restricted to a different use case: transferring files on a text-terminal-oriented session, which is what was common before TCP/IP and the web, and does not fit this use case.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Get C-Kermit source code and build it&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;From &lt;a href=&quot;http://www.kermitproject.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open-Source Kermit Project&lt;/a&gt;, follow link to source code download, currently &lt;a href=&quot;http://www.kermitproject.org/ck90.html#source&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.kermitproject.org/ck90.html#source&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Some users, especially &lt;strong&gt;Ubuntu and Debian users as of 2020&lt;/strong&gt;,  will need &lt;a href=&quot;http://www.kermitproject.org/ckdaily.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;C-Kermit “Daily” Source-Code Archive&lt;/a&gt; that &amp;quot;Fixes a problem in latest Ubuntu and Debian distributions.&amp;quot;&lt;/li&gt;&#xA;&lt;li&gt;Extract archive, you need basic build tools (compiler, make), compile.  If you don't know how to compile software you will have some hints on &lt;a href=&quot;http://www.kermitproject.org/ck90.html#unixbuild&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.kermitproject.org/ck90.html#unixbuild&lt;/a&gt; (you need some fairly basic command line practice).&lt;/li&gt;&#xA;&lt;li&gt;On my machine it generated a &lt;code&gt;wermit&lt;/code&gt; executable&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;Perform transfer&lt;/h1&gt;&#xA;&lt;h2&gt;Run software, set HP48-specific parameters&lt;/h2&gt;&#xA;&lt;p&gt;Since Kermit protocol is very general and this implementation supports many use cases, software needs some parameters to work in our case.&lt;/p&gt;&#xA;&lt;p&gt;The lines below worked for me, words after the semicolons are comments for the curious.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;./wermit&#xA;&#xA;set port /dev/ttyUSB0&#xA;set speed 9600          ; Serial port speed, HP48 defaults to 9600, also supports 4800 2400 1200&#xA;set carrier-watch off   ; Full serial wiring includes a &amp;quot;carrier detect&amp;quot; pin, tell it's not needed here.&#xA;set modem type direct   ; Probably means no need to send AT commands to a modem or anything.&#xA;set flow none           ; Don't use hardware (RTS/CTS wires) or software (XON/XOFF characters) flow control.&#xA;set parity none         ; 8 data bits, no parity&#xA;set control prefix all  ; Not sure about what this means, worked after I set it.&#xA;set file type binary    ; May not always be needed, safe default IMHO because it avoids the transfer program to corrupt the transferred data believing we expect it to change line feed characters and the like.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2&gt;Transfer files&lt;/h2&gt;&#xA;&lt;p&gt;From that on, it's up to your knowledge of the Kermit protocol.&lt;/p&gt;&#xA;&lt;p&gt;For example to send from PC to HP48, on the HP48 start a kermit server (menu or &lt;code&gt;SERVER&lt;/code&gt; command), and on the PC prompt type:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;send myfilename&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Or to send from HP48 to PC, on PC type&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;server&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and on the HP48 put a file name on the stack (with &lt;kbd&gt;VAR&lt;/kbd&gt; and possibly &lt;kbd&gt;NXT&lt;/kbd&gt;, find your object in the menu, press &lt;kbd&gt;'&lt;/kbd&gt; and the &lt;kbd&gt;A&lt;/kbd&gt;-&lt;kbd&gt;F&lt;/kbd&gt; key showing the object) and issue &lt;code&gt;SEND&lt;/code&gt; command.&lt;/p&gt;&#xA;&lt;h2&gt;Tested, success&lt;/h2&gt;&#xA;&lt;p&gt;Tested today on a PC running Xubuntu 20.04.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PC to HP48 with file &lt;a href=&quot;http://amphi-gouri.org/hp48/dm48/DM48.bin&quot; rel=&quot;nofollow noreferrer&quot;&gt;DM48&lt;/a&gt; from &lt;a href=&quot;http://amphi-gouri.org/hp48/dm48/#telecharger&quot; rel=&quot;nofollow noreferrer&quot;&gt;DM48. A Dungeon game for the HP48&lt;/a&gt; , works!.&lt;/li&gt;&#xA;&lt;li&gt;HP48 to PC with a simple file containing string &amp;quot;Hello World&amp;quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Both worked!&lt;/p&gt;&#xA;" OwnerUserId="574" LastEditorUserId="574" LastEditDate="2020-11-29T20:00:25.107" LastActivityDate="2020-11-29T20:00:25.107" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16167" PostTypeId="2" ParentId="16072" CreationDate="2020-09-12T17:47:34.350" Score="1" Body="&lt;p&gt;Ok, I found no way to manually get Installer 2.0 on my virtual box win98 SE installation.&lt;/p&gt;&#xA;&lt;p&gt;But I found this: &lt;a href=&quot;http://www.creopard.de/projekte/windows-98-se-service-pack.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unofficial Windows 98 SE service pack 2.1e&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;After installing that, I was able to install .NET 2.0 redístributable without problems.&#xA;Which means that the prerequisite of &lt;strong&gt;Installer 2.0 being on the system&lt;/strong&gt; is fulfilled after installation of that pack.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: good news, see further below -&#xA;&lt;em&gt;Unfortunately, the English versions of that pack are not available anymore (the site I linked links to wayback machine snapshots which don't have the binaries).&#xA;The site I linked has the German and Polish language versions.&#xA;I guess it could create some problems when mixing those with an English base installation of Windows 98.&#xA;Take it for what it's worth.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;:&#xA;Knol made me aware of the &lt;a href=&quot;https://www.philscomputerlab.com/windows-service-packs.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;English &amp;quot;unofficial SP 2.1&amp;quot; being available at this location&lt;/a&gt;.&#xA;Installing the correct language versions for such things seems to be important for more reasons than not understanding some dialogs - see my &amp;quot;experiment&amp;quot; description below.&#xA;I proceeded to install it on my mentioned Win98se English VirtualBox image from archive.org - and it worked there.&lt;/p&gt;&#xA;&lt;p&gt;The German pack would allow me to, after allowing me to install .NET 2.0 redistributable, run .NET 2.0 &lt;em&gt;console&lt;/em&gt; apps, but a &lt;em&gt;WinForms&lt;/em&gt; app with a bunch of controls slapped onto a form &lt;em&gt;crashed&lt;/em&gt; - it runs now with the correct language SP 2.1.&#xA;Same goes for my Pentium II that I dug out of the basement, which actually does have a German Win98se base installation and now the German &amp;quot;SP 2.1&amp;quot; on it plus .NET2.0 redistributable - that machine now also runs .NET 2.0 console as well as (so far simple) GUI apps. So it's not like the German pack was broken itself.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[Off Topic side note] To any (retro enthusiast) one wondering about the purpose (besides being able to install more programs that would still run under Win98 but need Installer 2.0):&#xA;This will now make my endeavours of doing retro stuff on Win98 much easier, writing little tools here in a bearable version of C# (compared to .NET 1.1, which e.g. does not have generics and hence makes you use 'object' a lot, source of bugs) that actually run on Win98, in a way much less time consuming than mucking with old Win32 API / Winsock stuff, with an old C++ compiler that may not even properly support C++98. Add unpleasant to time consuming - not everything retro is fun ;)&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19141" LastEditorUserId="19141" LastEditDate="2020-09-13T09:38:18.707" LastActivityDate="2020-09-13T09:38:18.707" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16168" PostTypeId="2" ParentId="16153" CreationDate="2020-09-12T21:56:17.610" Score="17" Body="&lt;p&gt;I came across an interesting comment a few days ago that Donald Knuth was deeply impressed when he discovered that 5 * 5 - 25 was optimised by an (ALGOL?) compiler to a register clear. That would have been in the late 1950s.&lt;/p&gt;&#xA;&lt;p&gt;Frances Allen's book on optimisation was published in 1972. I agree that a lot of 1980s-era PC compilers produced poor code, but they were also notable for (a) being cheap and (b) not assuming the availability of an arbitrarily-large amount of memory which would have allowed them to optimise an arbitrarily-complex expression (let alone attempting to optimise across expressions).&lt;/p&gt;&#xA;&lt;p&gt;I'd also note hearing a comment in the late 1980s that some of the most efficient compilers were for Modula-2, since the source language gave the compiler sufficient hints as to what was expected. The Topspeed compilers (written largely by George Barwood) were pretty good.&lt;/p&gt;&#xA;&lt;p&gt;So I think a reasonable answer would be that in principle a compiler could approximate the efficiency of a human programmer in the early to mid 1970s, provided that the user paid enough for the compiler and provided that the host on which it ran had sufficient resources.&lt;/p&gt;&#xA;" OwnerUserId="18835" LastActivityDate="2020-09-12T21:56:17.610" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="16170" PostTypeId="2" ParentId="16153" CreationDate="2020-09-13T02:41:52.477" Score="8" Body="&lt;p&gt;There's another factor going on here, also, that I have noticed in examining compiler output vs what I would have written (admittedly, I haven't done enough assembly to be a real expert at it):&lt;/p&gt;&#xA;&lt;p&gt;Given what the compilers know I have been impressed at how efficiently it was coded.  However, in every case I have examined I could have done better because I knew things about the problem the compiler didn't.&lt;/p&gt;&#xA;" OwnerUserId="1897" LastActivityDate="2020-09-13T02:41:52.477" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16171" PostTypeId="1" CreationDate="2020-09-13T05:51:37.560" Score="3" ViewCount="174" Body="&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=8c0_Lzb1CJw&amp;amp;ab_channel=ComputerHistoryMuseum&quot; rel=&quot;nofollow noreferrer&quot;&gt;a talk on the IBM 360 and the computers it replaced&lt;/a&gt; the speaker at 39:35 describes the 7070 as 'a dog', and elsewhere contrasts it unfavorably with the 1401 (which considerably exceeded expectations). This description is significant because the speaker is a former IBM executive, who seems to know what he is talking about.&lt;/p&gt;&#xA;&lt;p&gt;What went wrong with the 7070? How was its design inferior to contemporary computers?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-09-13T05:51:37.560" Title="Why was the IBM 7070 unsuccessful?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;mainframe&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16172" PostTypeId="1" AcceptedAnswerId="16176" CreationDate="2020-09-13T10:04:02.827" Score="9" ViewCount="542" Body="&lt;p&gt;The ASCII horizontal tab character defaults to 8 columns, which is unfortunate because it's too wide for indenting block structured languages (at least to most people's taste, acknowledging Linus Torvalds as a counterexample) and too narrow for columnar text such as assembly language. Looking for how this came about, I found &lt;a href=&quot;https://en.wikipedia.org/wiki/Tab_key#Tab_characters&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Tab_key#Tab_characters&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Originally, printer mechanisms used mechanical tab stops to indicate where the tabs went. This was done horizontally with movable metal prongs in a row, and vertically with a loop of mylar or other tape the length of a page with holes punched in it to indicate the tab stops. These were manually set to match the pre-printed forms that were loaded into the printer. In practice, settable tab stops were rather quickly replaced with fixed tab stops, de facto standardized at every multiple of 8 characters horizontally, and every six lines vertically. A printing program could send zero or more tabs to get to the closest tab stop above and left of where it wanted to print, then send line feeds and spaces to get to the final location. Tab characters simply became a form of data compression.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Despite five characters were the typical paragraph indentation on typewriters at that time, the horizontal tab size of eight evolved because as a power of two it was easier to calculate with the limited digital electronics available...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;When did this come about, that the fixed tab stops were de facto standardized at 8 characters horizontally?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-09-13T17:46:32.857" Title="When did tabs start defaulting to 8 columns?" Tags="&lt;history&gt;&lt;printer&gt;&lt;ascii&gt;&lt;teletype&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16173" PostTypeId="1" AcceptedAnswerId="16178" CreationDate="2020-09-13T11:13:05.417" Score="15" ViewCount="1231" Body="&lt;p&gt;Is it possible to run a text-mode DOS program in an emulator under a Unix-like operating system (Linux/*BSD/macOS) such that DOS text-mode input and output is done on a Unix terminal instead of a separate GUI window?&lt;/p&gt;&#xA;&lt;p&gt;The purpose would be to allow the DOS program to run in a terminal environment that is familiar to Unix users and integrates well with their usual workflow, including working copy/paste.&lt;/p&gt;&#xA;" OwnerUserId="19325" LastEditorUserId="15334" LastEditDate="2021-02-18T10:16:45.933" LastActivityDate="2021-02-18T10:16:45.933" Title="Emulate a text-mode DOS program using a Unix terminal" Tags="&lt;emulation&gt;&lt;terminal&gt;&lt;software-recommendation&gt;&lt;dos&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16174" PostTypeId="1" AcceptedAnswerId="16175" CreationDate="2020-09-13T13:26:14.933" Score="9" ViewCount="1840" Body="&lt;p&gt;The Intel 8087 supported both single and double precision floating point, but only in memory; the on-chip registers were purely double precision. (Strictly speaking they were actually 80-bit extended precision.) The same is true of the Motorola 68881, designed at almost the same time. Nor was this design decision exclusive to microprocessors, or to scalar machines; Cray vector supercomputers of that era had vector registers of double precision operands.&lt;/p&gt;&#xA;&lt;p&gt;By contrast, the later SSE2 instruction set has registers that can be treated as four single precision operands or two double precision, i.e. you can put a pair of single precision operands into the space that would've been occupied by a double precision operand. And as far as I can tell, this is typical of modern floating-point architectures, both CPU and GPU.&lt;/p&gt;&#xA;&lt;p&gt;Why the change?&lt;/p&gt;&#xA;&lt;p&gt;Is it for the technical reason that we now have enough transistor count to build SIMD vector units (as distinct from the Cray supercomputers which had vector registers but a scalar FPU) and that layout makes more sense for SIMD?&lt;/p&gt;&#xA;&lt;p&gt;Is it for the business reason that nowadays graphics and machine learning provide important workloads that actually want single precision?&lt;/p&gt;&#xA;&lt;p&gt;Or some other reason I haven't thought of?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-09-15T17:19:55.063" Title="Why the change in layout of single and double precision in floating-point registers?" Tags="&lt;history&gt;&lt;floating-point&gt;&lt;architecture&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16175" PostTypeId="2" ParentId="16174" CreationDate="2020-09-13T14:02:37.080" Score="23" Body="&lt;p&gt;When you have a small transistor budget, it is &lt;em&gt;considerably&lt;/em&gt; easier to design your circuitry around a single representation format - the most capable one - and treat converting other formats to and from it as a separate problem.  That's how the 8087 and 68881 were both designed.&lt;/p&gt;&#xA;&lt;p&gt;Today, there are enough transistors sloshing around in the average CPU that converting formats on the fly is trivial, and it's thus possible to pack variable numbers of floats into a single wide register.  Until about the 6th-generation x86 era, that was not yet practical.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-09-13T14:02:37.080" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16176" PostTypeId="2" ParentId="16172" CreationDate="2020-09-13T16:24:11.717" Score="7" Body="&lt;p&gt;I believe the only way we can answer this question is by members finding 'the earliest' such description.&lt;/p&gt;&#xA;&lt;p&gt;DEC's first CRT terminal device, the &lt;a href=&quot;https://vt100.net/docs/vt05-rm/chapter3.html#S3.5.6&quot; rel=&quot;noreferrer&quot;&gt;DEC VT05 terminal&lt;/a&gt; (1970), had tab stops fixed at 8-character intervals.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://bitsavers.org/pdf/dec/terminal/vt52/EK-VT5X-OP-001_DECscope_Users_Manual_Mar77.pdf&quot; rel=&quot;noreferrer&quot;&gt;DEC VT50/VT52 terminals&lt;/a&gt; (1974) had tab stops fixed at 8-character intervals.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://bitsavers.org/pdf/dec/terminal/vt100/EK-VT100-UG-001_VT100_User_Guide_Aug78.pdf&quot; rel=&quot;noreferrer&quot;&gt;DEC VT100 terminal&lt;/a&gt;, (1978) which replaced the VT52, had tab stops that were settable by firmware or by program action.  Thus giving rise to a whole new class of problem (&amp;quot;my layout is messed up&amp;quot; -&amp;gt; &amp;quot;your tab setup is wrong&amp;quot;)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;For software, the &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp10/TOPS10_monitor4.5/scnsrf.pdf&quot; rel=&quot;noreferrer&quot;&gt;scanner service&lt;/a&gt; (terminal driver) of TOPS-10 4.5 from 1969 emulates tab stops by outputting spaces to the next 8-character positions; see label CONTI2 on page 65.&lt;/p&gt;&#xA;&lt;p&gt;I'd be willing to bet the same thing happened on the earlier PDP-6, but have no evidence.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-13T17:46:32.857" LastActivityDate="2020-09-13T17:46:32.857" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16177" PostTypeId="1" AcceptedAnswerId="16180" CreationDate="2020-09-13T17:09:14.577" Score="4" ViewCount="120" Body="&lt;p&gt;I have written an emulation of the Heathkit ET-3400A microcomputer trainer in Java, mainly to see if I could do it and to get my feet wet in Java.  Odd question, but there's a discrepancy (one of many, I discovered) in the 6800 data sheet and the programmer's reference.  The datasheet says the I flag (interrupt mask) is set at reset.  The programmer's reference seems to indicate otherwise.  Anybody know what it really is?  Sold my ET-3400A a while back, still kicking myself for that.&lt;/p&gt;&#xA;&lt;p&gt;If anybody's interested, I have this up on Github and it works in Windows, MacOS, and Linux.&lt;/p&gt;&#xA;" OwnerUserId="19327" LastEditorUserId="576" LastEditDate="2020-09-14T05:50:59.877" LastActivityDate="2020-09-14T05:50:59.877" Title="6800 I flag at reset" Tags="&lt;assembly&gt;&lt;6800&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16178" PostTypeId="2" ParentId="16173" CreationDate="2020-09-13T17:27:58.163" Score="22" Body="&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/15108/ecm&quot;&gt;ecm&lt;/a&gt; wrote, DOSEMU supports this, using &lt;code&gt;-t&lt;/code&gt; or &lt;code&gt;-dumb&lt;/code&gt;. This works with &lt;a href=&quot;http://www.dosemu.org/&quot; rel=&quot;noreferrer&quot;&gt;the original DOSEMU&lt;/a&gt; and &lt;a href=&quot;https://dosemu2.github.io/dosemu2/&quot; rel=&quot;noreferrer&quot;&gt;DOSEMU2&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;-dumb&lt;/code&gt; runs DOS programs in “dumb” terminal mode, where output goes to DOSEMU’s standard output and can thus be scrolled back in your terminal or redirected. &lt;code&gt;-t&lt;/code&gt; uses &lt;a href=&quot;http://jedsoft.org/slang/&quot; rel=&quot;noreferrer&quot;&gt;S-Lang&lt;/a&gt; to provide an emulation of a PC text-mode screen inside the terminal, with colours, graphical characters, and mouse integration.&lt;/p&gt;&#xA;&lt;p&gt;Here’s the Turbo C++ IDE running in DOSEMU in GNOME Terminal with full mouse support:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mNrae.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mNrae.png&quot; alt=&quot;DOSEMU running Turbo C++ in GNOME Terminal&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-09-14T06:34:22.800" LastActivityDate="2020-09-14T06:34:22.800" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16179" PostTypeId="2" ParentId="16177" CreationDate="2020-09-13T17:39:59.687" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The datasheet says the I flag (interrupt mask) is set at reset&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Do you mean that the &lt;code&gt;I&lt;/code&gt; flag is set when a reset interrupt occurs? If not, please clarify what you mean. But if that's what you mean, that is correct. When any interrupt is serviced, the &lt;code&gt;I&lt;/code&gt; flag (interrupt mask) is set, so that no additional interrupt requests will be serviced until the current interrupt has been serviced.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The programmer's reference seems to indicate otherwise.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Quoting the reference would be helpful here. I do not see any indication in the programmer's reference that the interrupt mask is cleared/reset when an interrupt request occurs.&lt;/p&gt;&#xA;" OwnerUserId="15661" LastActivityDate="2020-09-13T17:39:59.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16180" PostTypeId="2" ParentId="16177" CreationDate="2020-09-13T17:41:08.803" Score="-2" Body="&lt;p&gt;Answered on StackOverflow.  Misunderstanding of the reference manual, the I flag is set at reset.&lt;/p&gt;&#xA;" OwnerUserId="19327" LastActivityDate="2020-09-13T17:41:08.803" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16181" PostTypeId="1" CreationDate="2020-09-13T18:24:40.543" Score="10" ViewCount="2418" Body="&lt;p&gt;Does anyone know of any bitmap-based 8080/8085 (or, failing that, Z80) computers?&lt;/p&gt;&#xA;&lt;p&gt;Background: In the late 70s and early 80s, there were a few hobby computers with bitmapped displays. For example, the 1802-based (with the 1864 &amp;quot;Pixie&amp;quot; video chip) COSMAC VIP, ETI-660 and ACE VDU computers, and the 6800-based DREAM. Probably others as well. These computers had a bitmap in VRAM, 64x32 or 64x48 pixels, which was sent to display via DMA. (Usually they also had a hexadecimal keypad, like trainer kits.)&lt;/p&gt;&#xA;&lt;p&gt;The contemporary 8080 was, as I can gather, mostly used for text, probably because of CP/M. 8080-based arcade cabinets (like Space Invaders) used bitmaps, of course.&lt;/p&gt;&#xA;&lt;p&gt;But were there any 8080-based hobby microcomputers that used a bitmap display, in the vein of the COSMAC VIP?&lt;/p&gt;&#xA;" OwnerUserId="15661" LastActivityDate="2020-09-16T20:49:36.790" Title="Were there any bitmap-based 8080 computers?" Tags="&lt;8080&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="8" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="16182" PostTypeId="2" ParentId="6387" CreationDate="2020-09-13T19:15:08.313" Score="7" Body="&lt;p&gt;I've ran into the same issue on my A2286 setup. The reason is that Windows is disk intensive and using a hardfile or Amiga partition through 'Janus' handler got extremly slow seek time on the disk.&lt;/p&gt;&#xA;&lt;p&gt;The solution is to get an ISA I/O card with Ide controller and use a dedicated harddrive, I used a SD adapter as hard drive. This solved it.&lt;/p&gt;&#xA;&lt;p&gt;Also helps with using a VGA card for graphics, but slow disk seek time using AmigaOS disk is the reason.&lt;/p&gt;&#xA;" OwnerUserId="19329" LastActivityDate="2020-09-13T19:15:08.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16183" PostTypeId="2" ParentId="16153" CreationDate="2020-09-13T19:46:13.507" Score="37" Body="&lt;p&gt;As a former professional assembly language programmer I would say that by the late 1980s a number of C compilers had become available whose output was as good as something a skilled assembler programmer could produce. I used various x86 C compilers around then and JPI C and WATCOM C in 1988 and MSVC 1.0 in 1994 produced output as good as anything I could write and even taught me the occasional trick.&lt;/p&gt;&#xA;" OwnerUserId="10892" LastActivityDate="2020-09-13T19:46:13.507" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16184" PostTypeId="2" ParentId="16181" CreationDate="2020-09-13T20:15:13.867" Score="10" Body="&lt;p&gt;To start with, there was &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11689/6659&quot;&gt;a whole lot of 8080 based home computer&lt;/a&gt;s, many of them offering bitmap graphics, but more important, already the very first general available colour video board, &lt;a href=&quot;https://en.wikipedia.org/wiki/Cromemco_Dazzler&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Dazzler&lt;/a&gt; offered bitmap graphics. The Dazzler was most definite meant for use with an 8080, as it was available at a time before the Z80 could be bought.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;For the secondary Z80 question: there were countless Z80 based computers with bitmap. Names like &lt;a href=&quot;https://en.wikipedia.org/wiki/ABC_800&quot; rel=&quot;nofollow noreferrer&quot;&gt;Luxor ABC-800&lt;/a&gt; (1981), &lt;a href=&quot;https://en.wikipedia.org/wiki/Sharp_MZ#MZ-80B_group&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sharp MZ80-B&lt;/a&gt; (1981), &lt;a href=&quot;https://en.wikipedia.org/wiki/Colour_Genie&quot; rel=&quot;nofollow noreferrer&quot;&gt;Colour Genie&lt;/a&gt;(1982) and &lt;a href=&quot;https://en.wikipedia.org/wiki/Coleco_Adam&quot; rel=&quot;nofollow noreferrer&quot;&gt;Coleco Adam&lt;/a&gt;(1983) spring to mind. And then of course later vut even more important systems like Amstrad CPC, or all of MSX. I guess, with some search, less known machines made before 1981 could be found.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-09-14T20:27:11.137" LastActivityDate="2020-09-14T20:27:11.137" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16185" PostTypeId="2" ParentId="16174" CreationDate="2020-09-13T21:05:26.037" Score="7" Body="&lt;p&gt;To expand a bit on Chromatix’s great answer: if you do all calculations at the highest precision, and convert to and from that, you only need a single FPU on your chip.&lt;/p&gt;&#xA;&lt;p&gt;When you build a floating-point VPU, you’re building multiple FPUs in parallel anyway.  It’s the whole point.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastActivityDate="2020-09-13T21:05:26.037" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16186" PostTypeId="2" ParentId="16153" CreationDate="2020-09-13T22:40:14.143" Score="18" Body="&lt;p&gt;Compilers started generating more efficient code than the average assembler programmer the moment that architectures became so complex that the assembler programmer wasn't been able to cope with all the details of them. Things like which instruction should go to pipe U or pipe V in a Pentium processor, etc.&lt;/p&gt;&#xA;&lt;p&gt;Which one was the first? I'd say, for the x86 architecture, it was the Intel Compiler. At least it was the first one (ttbomk) that was able to detect candidate loops for vectorization and use MMX, SSE and AVX instructions with them.&lt;/p&gt;&#xA;&lt;p&gt;However, the Watcom C compiler had a reputation for generating very good quality machine code in the days before Pentium and even 486. Some of the optimization options I saw after in the Intel Compiler, were already available in the Watcom.&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2020-09-13T22:40:14.143" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16187" PostTypeId="2" ParentId="16153" CreationDate="2020-09-13T22:41:23.973" Score="10" Body="&lt;p&gt;The primary advantage that C would have over an assembly-language programmer is the ability to adjust generated code to deal with changes to various constants.  When using a quality compiler, if one writes &amp;quot;unsigned foo = bar/8;&amp;quot; a compiler can generate a shift instruction, but if the constant would later need to be 5, a compiler can switch to using other means of performing the computation, such as a combination of a multiply and shift.  If, by contrast, the code had been written in optimal assembly language, changing the divisor would require more substantial changes to the code.&lt;/p&gt;&#xA;&lt;p&gt;Otherwise, while the makers of some free compilers may like to claim that their compilers can do as well or better than assembly languages, and while they may find some &amp;quot;clever&amp;quot; optimizations that occasionally allow them to do so, they routinely generate code which is significantly worse than would be expected from any competent assembly-language programmer.  For example, when targeting the popular Cortex-M0 microcontroller, gcc will process the use of a constant within a loop by generating code that reloads the constant every time through the loop.  Even if the constant is loaded to a register-qualified object before the loop, gcc will still defer the load until the value is used, and re-execute the load on every iteration through the loop.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-09-13T22:41:23.973" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="16188" PostTypeId="2" ParentId="16181" CreationDate="2020-09-13T23:27:34.963" Score="17" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Does anyone know of any bitmap-based 8080/&lt;strong&gt;8085&lt;/strong&gt; (or, failing that,&#xA;Z80) computers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=1079&quot; rel=&quot;noreferrer&quot;&gt;Kyotronics 85&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_Model_100&quot; rel=&quot;noreferrer&quot;&gt;TRS-80 Model 100&lt;/a&gt;, &lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=334&quot; rel=&quot;noreferrer&quot;&gt;NEC PC8201&lt;/a&gt; and &lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=475&quot; rel=&quot;noreferrer&quot;&gt;Olivetti M-10&lt;/a&gt; were 8085 based notebook-style computers all based on the KR-85 platform, which had a 640 x 64 pixel graphic LCD screen. It was introduced in 1983.&lt;/p&gt;&#xA;&lt;p&gt;Here's an example of bitmap graphics on the PC-8201, a &lt;a href=&quot;https://www.masswerk.at/rc2016/01/13.html&quot; rel=&quot;noreferrer&quot;&gt;3D maze game&lt;/a&gt; that writes graphics data directly to the screen, written in BASIC:-&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5noSR.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5noSR.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The PC-8201A also had an optional PC-8241 'CRT adapter', which contained a TMS9918A with bitmap graphics resolution of 256 x 192. This is the same chip that was used in the TI-99/4A, Sega SC3000, MSX etc.&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-09-13T23:27:34.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16189" PostTypeId="2" ParentId="16173" CreationDate="2020-09-14T02:37:41.740" Score="9" Body="&lt;p&gt;There's also ecm's fork of 8086tiny, &lt;a href=&quot;https://github.com/ecm-pushbx/8086tiny&quot; rel=&quot;noreferrer&quot;&gt;ecm-pushbx/8086tiny: ecm's repository for 8086tiny: a tiny PC emulator/virtual machine&lt;/a&gt;. Unlike dosemu, it runs on an emulated (not virtual) processor so will run on more hosts. &lt;a href=&quot;https://github.com/keaston/cp437&quot; rel=&quot;noreferrer&quot;&gt;keaston/cp437: Emulates an old-style &amp;quot;code page 437&amp;quot; / &amp;quot;IBM-PC&amp;quot; character set terminal on a modern UTF-8 terminal emulator.&lt;/a&gt; is supposed to be a useful wrapper for it.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-09-14T02:37:41.740" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16190" PostTypeId="1" CreationDate="2020-09-14T06:00:03.617" Score="27" ViewCount="5234" Body="&lt;p&gt;It strikes me that, in theory, it would be possible to skip the classic approach of emulation and instead literally &lt;strong&gt;build&lt;/strong&gt; a NES, SNES, Nintendo 64 or any console with digital &amp;quot;components&amp;quot;, which are wired together just like the original machines, on a digital &amp;quot;PCB&amp;quot; and even with the chassis around it so that it can be placed in a virtual 3D room and not just be a solid 3D object &amp;quot;prop&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;If such a software existed, it would basically let &amp;quot;anyone&amp;quot; build machines by picking out digital versions of components which exist in real life from a huge list, and soldering would be instant and perfect every time, etc.&lt;/p&gt;&#xA;&lt;p&gt;I'm not talking about an &amp;quot;assembly simulator&amp;quot;, like a game, but simply some kind of &amp;quot;actual&amp;quot; representation of every single little component inside those consoles.&lt;/p&gt;&#xA;&lt;p&gt;You would feed them virtual power in the power socket, and the virtual output from them, the video and audio signal, would be hooked up to a virtual CRT TV which displays the game just like the original consoles.&lt;/p&gt;&#xA;&lt;p&gt;Obviously, this is easier said than done, but what exactly is it that prevents this approach at this point? Are computers just not fast enough yet? They still have to use all these &amp;quot;shortcuts and tricks&amp;quot;?&lt;/p&gt;&#xA;&lt;p&gt;Note also that, using this method, there would be no actual &amp;quot;emulation coding&amp;quot;. All the work would be all about connecting these components together exactly like they are on a real machine, and of course to create this advanced software in the first place. But once that's done, any system could be emulated perfectly and there would no longer be any need for all the existing emulator softwares, with all their flaws and shortcomings.&lt;/p&gt;&#xA;&lt;p&gt;I'd like to hear why exactly this is not feasible.&lt;/p&gt;&#xA;" OwnerUserId="19335" LastActivityDate="2020-09-16T08:07:38.603" Title="Is there still no &quot;digital version of PCBs and ICs&quot; software that all future emulators can use?" Tags="&lt;emulation&gt;" AnswerCount="6" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16191" PostTypeId="2" ParentId="16181" CreationDate="2020-09-14T06:04:49.180" Score="3" Body="&lt;p&gt;I have started to use computers back in 1986 with a Czechoslovak computer &lt;a href=&quot;https://en.wikipedia.org/wiki/PMD_85&quot; rel=&quot;nofollow noreferrer&quot;&gt;PMD 85&lt;/a&gt; (based on the MHB8080 CPU, a local I8080 clone), which has bitmapped B/W graphics in a 288x256 matrix. A lot of games from the ZX Spectrum has been ported to this computer.&lt;/p&gt;&#xA;&lt;p&gt;Another Czechoslovak computer, named &lt;a href=&quot;https://en.wikipedia.org/wiki/IQ_151&quot; rel=&quot;nofollow noreferrer&quot;&gt;IQ-151&lt;/a&gt;, has a GRAFIK plug-in module, which provides B/W bitmap display 512x256 pixels.&lt;/p&gt;&#xA;&lt;p&gt;I guess the main reason for bitmap-based graphics in the Czechoslovak computers was simple: there were no advanced ICs like a display controller etc. widely available, so the bitmapped graphics was the easiest way to achieve at least any graphics.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-09-14T06:04:49.180" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16192" PostTypeId="2" ParentId="16190" CreationDate="2020-09-14T06:36:38.787" Score="33" Body="&lt;p&gt;It is feasible, but not in software, because software is not fast enough.&lt;/p&gt;&#xA;&lt;p&gt;But indeed,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;it would basically let &amp;quot;anyone&amp;quot; build machines by picking out digital versions of components which exist in real life from a huge list, and soldering would be instant and perfect every time, etc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The hardware that makes that possible it called &lt;a href=&quot;https://en.wikipedia.org/wiki/Field-programmable_gate_array&quot; rel=&quot;noreferrer&quot;&gt;Field-Programmable Gate Array&lt;/a&gt;, or FPGA.&lt;/p&gt;&#xA;&lt;p&gt;You can &amp;quot;program&amp;quot; such an FPGA by writing a description of the digital components, and how they are wired together, in a &amp;quot;language&amp;quot; like &lt;a href=&quot;https://en.wikipedia.org/wiki/VHDL&quot; rel=&quot;noreferrer&quot;&gt;VHDL&lt;/a&gt;. So it's not that difficult from writing a program in a programming language, except that you need special hardware to &amp;quot;run&amp;quot; it.&lt;/p&gt;&#xA;&lt;p&gt;And there are quite a few projects out there to implement components like CPUs, other special chips used in early computers, and even whole computers with those. Google &amp;quot;FPGA + (name of computer)&amp;quot;, and you'll find them.&lt;/p&gt;&#xA;&lt;p&gt;Here are some random links from my notes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/mist-devel/mist-board/wiki&quot; rel=&quot;noreferrer&quot;&gt;Mist-board&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://wfjm.github.io/home/w11/info/others.html&quot; rel=&quot;noreferrer&quot;&gt;PDP-11&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://mega65.org/&quot; rel=&quot;noreferrer&quot;&gt;Mega65&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.cs.columbia.edu/%7Esedwards/apple2fpga/&quot; rel=&quot;noreferrer&quot;&gt;Apple2fpga&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-09-14T06:44:06.873" LastActivityDate="2020-09-14T06:44:06.873" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16193" PostTypeId="2" ParentId="16190" CreationDate="2020-09-14T07:25:10.507" Score="63" Body="&lt;p&gt;Taken most literally, what you are proposing is complete analog simulation of the entire electronic circuit.  Analog circuit analysis is not cheap.  Generally, every point in the circuit has to be calculated against every other point, at a time resolution fine enough for the smallest relevant signalling details to be preserved.  The problem scales non-linearly with the more components there are.&lt;/p&gt;&#xA;&lt;p&gt;Spice is a simulator that is widely used for this kind of work, and a 20 component circuit handling audio frequencies will run many times slower than real-time on my fairly powerful modern desktop.  Even a simple pocket calculator has thousands, if not tens of thousands, of components.&lt;/p&gt;&#xA;&lt;p&gt;So &lt;em&gt;some&lt;/em&gt; &amp;quot;shortcuts and tricks&amp;quot; must be done.  for example, with fully digital circuits, you can simulate them with the assumption that they are, in fact, digital.  This can be done at the transistor or logic level.  It's still very computationally expensive, requiring every node to every node be computed.  This is &lt;em&gt;almost&lt;/em&gt; feasible today with simple machines.  See the &lt;a href=&quot;http://www.visual6502.org/&quot; rel=&quot;noreferrer&quot;&gt;Visual6502 Project&lt;/a&gt; for an example where this has been done with the entire 6502 processor.&lt;/p&gt;&#xA;&lt;p&gt;There is a transistor-level simulation of the TIA chip used in the Atari 2600, which is infamously hard to emulate.  There is &lt;a href=&quot;https://github.com/gregjames/Sim2600&quot; rel=&quot;noreferrer&quot;&gt;a complete transistor simulation of the Atari 2600&lt;/a&gt;, based on that and Visual6502.  It is very slow.  The reverse-engineered layout was, however, used to inform the current TIA emulation module in the Stella emulator.  It uses a mixed level of abstraction, and runs quickly on modern machines.&lt;/p&gt;&#xA;&lt;p&gt;Finally, there is the most common kind of emulation, behavioural, where the internal implementation does not match the real device.  If completely accurate, this is potentially interchangeable with a full digital simulation.  But for any complex component, making such an emulator fully accurate without fully reverse-engineering the electronics is often impossible.  Something like a CPU emulator may not emulate esoteric behaviour that occurs due to an unusual circuit layout, for example.&lt;/p&gt;&#xA;&lt;p&gt;Your general simulator would have to be general enough, and accurate enough, for all the components to work in whatever configuration you might put them in.  That brings me to a point raised by @TrevorBoydSmith in the comments.  We do not have such information for many designs.  They are generally proprietary, and potentially copyrighted.  The above transistor-level simulators of the components in the Atari 2600, for example, were created by literally breaking open chips, photographing them, and semi-automatically translating this into connection maps.  It is demanding, complicated work that gets harder the more complex and miniaturized the components are.  Only a few ICs have been mapped like this.&lt;/p&gt;&#xA;&lt;p&gt;In practice, mixing these approaches is often what is done in emulators aiming for very high accuracy.  A sound chip might be partially simulated as an analog circuit, for example.  As one commenter notes, some emulators including the Commodore 64's SID chip take this approach for the SID chip.  There is &lt;a href=&quot;https://sourceforge.net/projects/dice/&quot; rel=&quot;noreferrer&quot;&gt;the DICE emulator&lt;/a&gt; for very early video games such as Pong. A mixed approach is necessary here, as these games rely on analog components, but could not be simulated as an entire analog circuit including every transistor.  DICE runs just about fast enough to play some of the implemented games at full speed on modern computers.&lt;/p&gt;&#xA;&lt;p&gt;There are various emulation suites, of which DICE is an example, which do take a broadly component-level approach, mixing levels of simulation abstraction as necessary.  MAME/MESS takes a primarily behavioural approach, but does break the designs down into components for easy reuse.  It can be almost trivial to implement a new platform with MAME, if all of the components already exist and are 100% accurate in their emulation.  (They often are not.) These emulation suites usually only simulate just enough for the specific machines they target to be emulated accurately.&lt;/p&gt;&#xA;&lt;p&gt;In conclusion, your general simulator would have to be very complex, incorporating both general-purpose analog and digital simulation.  Most importantly, someone would have to actually translate the many proprietary logic or electrical circuit representations of the circuits we want into this simulator.&lt;/p&gt;&#xA;&lt;p&gt;So, theoretically, it is possible. But it is a software engineering and data collection/hardware reverse engineering problem of truly vast scope.  It is unlikely to run at real-time speed.  And it might forever be too computationally expensive to do for anything with extensive analog components.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2020-09-14T18:26:31.843" LastActivityDate="2020-09-14T18:26:31.843" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16194" PostTypeId="2" ParentId="16190" CreationDate="2020-09-14T07:25:51.860" Score="12" Body="&lt;p&gt;There already exists many FPGA implementations of many old platforms. FPGAs can be &amp;quot;wired&amp;quot; or &amp;quot;programmed&amp;quot; to replicate a machine at the logic gate level. However, it is unable to replicate the imperfections and other analog aspects of how the original machine outputs analog audio and video, unless significant processing power is again used to model these imperfections, so that for example audio of C64 SID chip sounds like it is supposed to sound or the displayed image on a TFT screen looks like how it looked on a CRT.&lt;/p&gt;&#xA;&lt;p&gt;Some old chips have been reverse-engineered from the silicon die photos. In theory the structures can be simulated in an analog circuit simulator, but CPU or GPU horsepower is not there yet to do it in real time for a whole set of chips.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-09-14T07:25:51.860" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16195" PostTypeId="1" AcceptedAnswerId="16204" CreationDate="2020-09-14T10:39:06.970" Score="9" ViewCount="488" Body="&lt;p&gt;I was looking the other day some NES clone footage, and I was surprised to find out that there is a &lt;a href=&quot;https://gameconsole.fandom.com/wiki/List_of_Famiclones&quot; rel=&quot;noreferrer&quot;&gt;ton of them&lt;/a&gt;. I am wondering, how could they be so many since Nintendo did not use standard off the self components? (As far as I know, the NES utilizes a custom 6502 based CPU, which handles audio, too)&lt;/p&gt;&#xA;" OwnerUserId="19338" LastActivityDate="2020-09-14T17:01:54.603" Title="Large number of Famiclones" Tags="&lt;nes&gt;&lt;game-consoles&gt;&lt;clone&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16196" PostTypeId="2" ParentId="16181" CreationDate="2020-09-14T12:08:01.100" Score="3" Body="&lt;p&gt;The Belgian DAI computer comes to mind. It had a very sophisticated and flexible graphic system that wasn't a pure bitmap but which memory was shared with the 8080 CPU. The address space was split in CPU only 8 bit memory and CPU/VDU shared 16 bit accessed memory (the VDU accessed in 16 bit width, the CPU 8 bit wise).&#xA;Resolution up to 528x240 pixels or up to 16 colours per scan line. Each scan line could have its own resolution.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/DAI_Personal_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/DAI_Personal_Computer&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;EDIT:Merged the 2 answers of 2 different systems.&lt;/p&gt;&#xA;&lt;p&gt;Victor Lambda was also a 8080A computer using a bitmap. It was even bitmap only in the lousy resolution of 112 x 78 in 4 colors. It didn't have a text mode, which made it really a horrible computer to work on, as it could only display 12 lines of 17 character. yuk. The bad keyboard didn't help. My brother and me almost bought one in 1981.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?c=151&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.old-computers.com/museum/computer.asp?c=151&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It was developed in the US but was nearly only commercialized in France. The successor machines Hector were a little bit better with higher resolutions, real keyboard and upgraded to Z80 cpu. There was even a model that was commercialized with Forth instead of Basic.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?c=427&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.old-computers.com/museum/computer.asp?c=427&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="7095" LastEditDate="2020-09-14T15:31:49.373" LastActivityDate="2020-09-14T15:31:49.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16198" PostTypeId="2" ParentId="16153" CreationDate="2020-09-14T12:23:01.627" Score="2" Body="&lt;p&gt;Never. That's my short and provocative answer. The code generated by the compiler was chosen by a programmer, the optimisations applied can also be applied to assembly, giving unlimited time and resources to the programmer, he will always be able to generate better code than the compiler.&#xA;The question is, is it worthwhile to try to overcome the limitations of the compiler or not.&#xA;There is a limit a compiler cannot break that a human can. The compiler has to conform to certain constraints (ABI, UB, call conventions, register usage, etc.) that the human can decide to violate.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastActivityDate="2020-09-14T12:23:01.627" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="16199" PostTypeId="2" ParentId="16181" CreationDate="2020-09-14T12:33:39.260" Score="0" Body="&lt;p&gt;The SOL-20 by Processor Technology was based on the 8080A and bitmapped a 1K block of memory to a 64 x 16 line character-only display. There were a few blocky graphic characters, if I recall.&lt;/p&gt;&#xA;" OwnerUserId="14652" LastActivityDate="2020-09-14T12:33:39.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16201" PostTypeId="2" ParentId="16145" CreationDate="2020-09-14T15:04:57.473" Score="13" Body="&lt;p&gt;Nobody has really covered the technical aspects of the PCI bus.&lt;/p&gt;&#xA;&lt;p&gt;Until then most busses had been mere extensions of the CPU's memory bus. Zorro was essentially an extension of the 68000 memory bus, S-100 which was just the 8080 bus, and ISA was basically the 8088 memory bus. There were a number of issues with these early expansion busses.&lt;/p&gt;&#xA;&lt;p&gt;These busses used the CPU bus clock, so the CPU had to operate at the same speed as the bus. If a card only worked at say 8MHz then a 16MHz CPU would not work with it. Furthermore the bus was shared by all devices on it, rather than being segmented to allow multiple devices to transfer data independently.&lt;/p&gt;&#xA;&lt;p&gt;There were electrical limits too, particularly as bus speeds increased. Longer busses are harder to keep in sync at high speeds and cause signalling problems.&lt;/p&gt;&#xA;&lt;p&gt;Modifications were made over the years that overcame these issues to some extent. For example Zorro and ISA disconnected from the CPU bus and had separate interface chips that generated their own clocks, allowing the CPU to run many times faster than the bus.&lt;/p&gt;&#xA;&lt;p&gt;Eventually the need for a new bus standard was obvious and Intel wanted PCI to be it. Since it was to no longer be based on the CPU bus there was no need for it to be similar to CPU bus signals, and in fact there were many advantages to it being different. x86 CPU busses themselves had evolved, it becoming apparent that having separate ones for RAM and for slow peripheral devices was a good idea and with the needs of highly integrated motherboards in mind, so the idea of using those as a template didn't make a lot of sesnse.&lt;/p&gt;&#xA;&lt;p&gt;While PCI became more widely adopted by non-x86 systems it was more down to there being a large number of cheaply available cards than down to PCI being widely compatible. For example PCI ROMs used to configure cards at boot time, e.g. setting up a graphics card to produce the BIOS display, usually contained x86 code. Mac PCI cards had special ROMs with 68000 code and later PPC code. You could make an often cheaper &amp;quot;PC&amp;quot; card Mac compatible by swapping the ROM. Other systems had a small x86 emulation layer in their BIOS equivalent, or simply required drivers to be loaded by the OS as was the case with the Amiga Mediator system.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-09-14T15:04:57.473" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16203" PostTypeId="2" ParentId="16181" CreationDate="2020-09-14T16:24:54.293" Score="3" Body="&lt;p&gt;Many of the various Texas Instruments graphing calculators were/are based on the Z80 processor, and those all have bitmap displays.  The TI-73 through the TI-86 all had variants of the Z80 processors.  Above that, they moved to the Motorola 68k and more recently to ARM9.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Comparison_of_Texas_Instruments_graphing_calculators&quot; rel=&quot;nofollow noreferrer&quot;&gt;Reference&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19341" LastActivityDate="2020-09-14T16:24:54.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16204" PostTypeId="2" ParentId="16195" CreationDate="2020-09-14T17:01:54.603" Score="11" Body="&lt;p&gt;Per &lt;a href=&quot;https://nerdlypleasures.blogspot.com/2017/10/nes-clones-reversed-duty-cycles-why-you.html&quot; rel=&quot;noreferrer&quot;&gt;Nerdly Pleasures&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;... back in the 80s and early 90s, Famiclones were typically made in Taiwan.  Frequently they simply cloned the die of the official NES CPU and PPU.  At some point, the Taiwanese semiconductor fab UMC made clone chips of the Nintendo/Ricoh 2A03 CPU and 2C02 PPU.  They were called the UA6527 and UA6528, respectively.  ...  This design prevailed for the most part when these chips were reduced to the single NES-on-a-Clone (NOAC) chips of the late 1990s until the present.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So that states that after a period of simply copying the original dies, &lt;a href=&quot;https://en.wikipedia.org/wiki/United_Microelectronics_Corporation&quot; rel=&quot;noreferrer&quot;&gt;UMC&lt;/a&gt; offered NES clone chips as a standard commercial product and that these later shrank into a single chip.&lt;/p&gt;&#xA;&lt;p&gt;Therefore the high number of clones is just because the chips were available off-the-shelf from a reliable mainstream source, despite Nintendo having designed them as custom parts originally.&lt;/p&gt;&#xA;&lt;p&gt;Taiwan is to this day not a member of the Berne Convention, which has governed international recognition of copyrights since the 19th century, though it signed up for the WTO's TRIPS agreement which is a 1990s instrument that goes beyond copyright to other areas of intellectual property. So it is likely that Nintendo had no recourse against UMC during the 1980s and had stopped caring about NES clones by the N64 era.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-09-14T17:01:54.603" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16205" PostTypeId="1" AcceptedAnswerId="16215" CreationDate="2020-09-14T19:41:38.897" Score="5" ViewCount="359" Body="&lt;p&gt;I recently rescued my Tandy CGP-115 plotter from the attic and had the idea to try and drive it from a modern machine.&lt;/p&gt;&#xA;&lt;p&gt;I have a FTDI CHIPI-X10 RS-232 adapter and installed drivers on a MacBook.&lt;/p&gt;&#xA;&lt;p&gt;I have assembled a lead (DE-9 female to 4-pin DIN), according to what I've been able to read up about the Tandy Color Computer serial port, as per the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TXD - pin 3 -&amp;gt; DIN pin 4&lt;/li&gt;&#xA;&lt;li&gt;GND - pin 5 -&amp;gt; DIN pin 3&lt;/li&gt;&#xA;&lt;li&gt;CTS - pin 8 -&amp;gt; DIN pin 2&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I believe I have the correct Python code to send data to the plotter:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import serial&#xA;import time&#xA;&#xA;ser = serial.Serial(port='/dev/tty.usbserial-FT2XIBOF', bytesize=serial.SEVENBITS, baudrate=600, rtscts=True, dsrdtr=True, stopbits=serial.STOPBITS_TWO)&#xA;ser.write(b&amp;quot;Hello, world! This is a message from a MacBook in 2020.\n&amp;quot;)&#xA;#ser.write(b&amp;quot;ABCDEFGHIJKLMNOP&amp;quot;)&#xA;ser.flush()&#xA;time.sleep(5)&#xA;ser.close()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Something seems to be not right - when I send the following:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;ABCDEFGHIJKLMNOP&lt;/code&gt; I get the following: &lt;code&gt;AJKLMNOPIJKLMNOP&lt;/code&gt;. Occasionally this comes out right.&lt;/p&gt;&#xA;&lt;p&gt;Likewise &lt;code&gt;Hello, world! This is a message from a MacBook in 2020.&lt;/code&gt; prints as something like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Hello, world! This is a messaa i &#xA;                                 2020.&#xA;&#xA;2020.&#xA;&#xA;2020.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So something's up, obviously, arguably something to do with the handshaking. Have I wired the cable correctly? I have tried the parallel port and that appears to work fine. (And why the echoing of the last few chars? Could that be electrical rather than logical?)&lt;/p&gt;&#xA;&lt;p&gt;I have also tried wiring other pins to DIN pin 2 in case I've misunderstood the handshaking: DSR, DTR, DSR/CTS together, even RXD, with similar results. Sometimes the printing is delayed for a second or two, suggesting the sender timed out the handshake and just flushed the data anyways. I've also tried various combinations in the code, &lt;code&gt;serial.EIGHTBITS&lt;/code&gt;, &lt;code&gt;rtscts=False&lt;/code&gt;, &lt;code&gt;dsrdtr=False&lt;/code&gt;, without success.&lt;/p&gt;&#xA;&lt;p&gt;Any advice much appreciated.&lt;/p&gt;&#xA;" OwnerUserId="19345" LastEditorUserId="19345" LastEditDate="2020-09-28T17:46:32.373" LastActivityDate="2020-09-28T17:46:32.373" Title="How can I send RS-232 serial data to a Tandy plotter reliably?" Tags="&lt;serial&gt;&lt;printer&gt;&lt;rs232&gt;&lt;radio-shack&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16206" PostTypeId="2" ParentId="16174" CreationDate="2020-09-14T19:49:42.460" Score="4" Body="&lt;p&gt;The older devices were intended primarily for high precision scientific applications.&lt;/p&gt;&#xA;&lt;p&gt;The newer ones are intended primarily for multimedia, and don't need so many bits.&lt;/p&gt;&#xA;&lt;p&gt;It's a similar phenomenon to how old computers from the 50s and 60s operated in words of 30~40 bits, which then got replaced by 8-bit bytes adequate for business application.&lt;/p&gt;&#xA;" OwnerUserId="19346" LastActivityDate="2020-09-14T19:49:42.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16207" PostTypeId="2" ParentId="16058" CreationDate="2020-09-14T20:20:25.650" Score="1" Body="&lt;p&gt;The early computers were created to do high precision scientific calculations that couldn't be done by hand (practically).&lt;/p&gt;&#xA;&lt;p&gt;The newer computers you mention from the 70s and 80s where business and home computers.&lt;/p&gt;&#xA;&lt;p&gt;And you are mistaken in saying that it was not memmory addressing that motivated the increase in word size from 32 to 64 bits. 32 bits were sufficient for home applications (16 bits weren't), but large size computing was very much pushing that boundary. Before 64-bit processors, Intel already had introduced a scheme** to increase the address space beyond 32 bits. Home video games from the early 90s had 16-bit data words but already needed 24-bit addressing.&lt;/p&gt;&#xA;&lt;p&gt;** called 'physical address extension, if i'm not mistaken.&lt;/p&gt;&#xA;" OwnerUserId="19346" LastActivityDate="2020-09-14T20:20:25.650" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16208" PostTypeId="1" AcceptedAnswerId="19863" CreationDate="2020-09-14T20:29:02.437" Score="4" ViewCount="358" Body="&lt;p&gt;I.e. how can I run xroach on a VM?&lt;/p&gt;&#xA;&lt;p&gt;A search on RC for xroach didn't turn anything up.&lt;/p&gt;&#xA;&lt;p&gt;xroach, as I remember it, ran under old versions of X and had a certain number of cockroaches on the root window which would run for cover if you closed, quickly moved, etc. a window they were hiding under.&lt;/p&gt;&#xA;" OwnerUserId="19348" LastActivityDate="2021-05-17T06:06:37.980" Title="What, if any, available older versions of Linux distributions does xroach gracefully run on?" Tags="&lt;linux&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16209" PostTypeId="2" ParentId="12015" CreationDate="2020-09-14T22:42:34.167" Score="4" Body="&lt;p&gt;One prominent example is the &amp;quot;homebrew&amp;quot; EPROM burner Tiny Eprommer, originally published 1984 in &lt;a href=&quot;https://archive.org/details/64er_sonderheft_84/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;64'er Magazine, Special Issue #84&lt;/a&gt;. (People are still building/using this device; it's often seen on fx eBay as both kit or assembled product.)&lt;/p&gt;&#xA;&lt;p&gt;The main board is attached to the user port but as the device needs more GPIO than what the user port provides, a daughter board is connected, with a cable, to the 2 joystick ports, each of which maps to 4 data bus pins on the EPROM. Thus, the device both reads and writes the EPROM's data bus using the control ports.&lt;/p&gt;&#xA;&lt;p&gt;The keyboard scanning routine does not interfere as long as the host software refrains from calling the kernal routine for keyboard scanning (&lt;code&gt;$EA86&lt;/code&gt;, typically invoked from the standard &lt;code&gt;$EA31&lt;/code&gt; interrupt handler), or disables interrupts. However, typing on the keyboard while using CIA1 for I/O is going to cause trouble, as &amp;quot;random&amp;quot; connections between inputs/outpus are being made.&lt;/p&gt;&#xA;&lt;p&gt;(As a side note, the control ports are neither better or worse protected than the user port - if you check the schematic, you'll find they both connect directly to a CIA chip. There is nothing inherently wrong with interfacing devices through the control ports, but apart from the inconvenience to the user of having to remove controllers, there is also the limitation of keyboard interference, which for some scenarios - like the EPROM burner - can be acceptable. And of course, if you do blow a CIA, you're more likely to notice if it's the one handling the keyboard/control ports. :)&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-09-15T15:59:04.823" LastActivityDate="2020-09-15T15:59:04.823" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16210" PostTypeId="2" ParentId="16153" CreationDate="2020-09-15T00:36:14.233" Score="3" Body="&lt;p&gt;My eureka moment was in the late 80's (88 or 89) when a Senior developer on our team decided that a hand-coded assembly language routine he needed to change must be rewritten in C first. At that time we were using the WATCOM C compiler. The immediate result was that the compiled C version was 20% smaller. I no longer recall what the speed difference was.&lt;/p&gt;&#xA;&lt;p&gt;That day I sent an email to WATCOM's top developer on the C compiler reporting the result, and claimed that I'd never write a another routine in assembly language. I still haven't, although with the rise of Arduino and tiny microprocessors, I would no longer rule it out.&lt;/p&gt;&#xA;" OwnerUserId="8720" LastActivityDate="2020-09-15T00:36:14.233" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16211" PostTypeId="2" ParentId="16174" CreationDate="2020-09-15T01:53:58.453" Score="1" Body="&lt;p&gt;I've seen a half-dozen different schemes for handling single vs double precision.&lt;/p&gt;&#xA;&lt;p&gt;One extreme is to do everything in double precision and then convert to/from that format if single precision operands are used.&lt;/p&gt;&#xA;&lt;p&gt;Another extreme is to break double-precision numbers in half and do multiple operations (that are essentially single precision) on the double-precision operands.&lt;/p&gt;&#xA;&lt;p&gt;And there have even been processors with separate single-precision and double-precision FPUs.&lt;/p&gt;&#xA;&lt;p&gt;Added:  And I will note that microprogrammed processors could mimic several different schemes, even when working with integer ALUs.&lt;/p&gt;&#xA;" OwnerUserId="3483" LastEditorUserId="3483" LastEditDate="2020-09-15T17:19:55.063" LastActivityDate="2020-09-15T17:19:55.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16212" PostTypeId="1" CreationDate="2020-09-15T03:03:33.430" Score="5" ViewCount="104" Body="&lt;p&gt;It's not so much about going from full-height drives to half-height drives, but about finer details.&lt;/p&gt;&#xA;&lt;p&gt;Disk rotation drive - when and how was the belt replaced with a direct drive and a flat motor? Who owned the patents and who launched the first major series?&lt;/p&gt;&#xA;&lt;p&gt;Head positioning drive - what options existed besides the early &amp;quot;snail&amp;quot; and the stepper with metal tape winding on the shaft? How have the types of motor steppers changed over time?&lt;/p&gt;&#xA;&lt;p&gt;When did the standard analog transistors and chips, as well as the digital logic of the 74 series, begin to be changed to more integrated solutions?&lt;/p&gt;&#xA;&lt;p&gt;And further, deeper, including the electromechanical features of DEC dual drives and Japanese exoticism in the spirit of SHARP used in the X68000 line of computers.&lt;/p&gt;&#xA;&lt;p&gt;PS&#xA;Something &lt;a href=&quot;https://www.usitc.gov/publications/337/pub1859.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;like this&lt;/a&gt; could have been used as the starting material for the wanted review ...&lt;/p&gt;&#xA;" OwnerUserId="11231" LastEditorUserId="11231" LastEditDate="2020-09-15T17:13:40.687" LastActivityDate="2020-09-15T17:13:40.687" Title="Looking for a timeline or overview of implementations/inventions in the electromechanical part of 5.25&quot; floppy drives" Tags="&lt;history&gt;&lt;floppy-drive&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2020-09-15T15:37:37.550" ContentLicense="CC BY-SA 4.0" />
  <row Id="16213" PostTypeId="2" ParentId="16208" CreationDate="2020-09-15T06:51:22.727" Score="6" Body="&lt;p&gt;&lt;a href=&quot;https://github.com/interkosmos/xroach&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;xroach&lt;/code&gt;&lt;/a&gt; (at least, this version, fixed for modern compilers) still works on current Linux distributions, as long as the desktop uses X and the root window is visible. Here it is running on Debian 10, with &lt;a href=&quot;https://www.fvwm.org/&quot; rel=&quot;noreferrer&quot;&gt;FVWM&lt;/a&gt; running the show:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PZwTQ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PZwTQ.png&quot; alt=&quot;xroach running on Debian 10 with FVWM&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(the cockroaches are in the top-left of the screen).&lt;/p&gt;&#xA;&lt;p&gt;To reproduce this, regardless of your current desktop (assuming all four programs are available):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Xephyr :20 &amp;amp;&#xA;DISPLAY=:20 fvwm &amp;amp;&#xA;DISPLAY=:20 xterm &amp;amp;&#xA;DISPLAY=:20 xroach &amp;amp;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If you want real “old school”, there’s no need for FVWM and XTerm:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DISPLAY=:20 xsetroot -gray&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rh10A.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rh10A.png&quot; alt=&quot;xroach running on Debian 10 on a stippled background&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Most “full-blown” desktop environments hide the root window, and there’s not necessarily an easy way to disable this. In any case as desktops move to Wayland, &lt;code&gt;xroach&lt;/code&gt;-style programs will stop working, and their replacements will have to be desktop extensions rather than generic X or Wayland clients.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-09-15T06:51:22.727" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16214" PostTypeId="2" ParentId="16190" CreationDate="2020-09-15T07:53:56.273" Score="6" Body="&lt;p&gt;There are a lot of good answers here but with respect, I feel that many of them are missing the true essence of this excellent question.&lt;/p&gt;&#xA;&lt;p&gt;As others have said, emulators are fast but the level of abstraction used is high and the implementation is generally nothing like the underlying hardware.&lt;/p&gt;&#xA;&lt;p&gt;Spice does painstaking sub component level simulation with great fidelity but is far too slow to be of practical use, even on fast modern machines.&lt;/p&gt;&#xA;&lt;p&gt;FPGAs go some way toward answering the question, but they are a hardwarez, whatever people may say about VHDL &lt;em&gt;et al&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So I believe the question simplifies to this:  Is there a software simulation somewhere between what MAME does and what Spice does?  Something that, say, simulates a 7404 in terms of &amp;quot;you put a logic 1 on pin &lt;em&gt;foo&lt;/em&gt;, and &lt;em&gt;bar&lt;/em&gt; picoseconds later a logic 0 comes out on pin &lt;em&gt;baz&lt;/em&gt;&amp;quot;?  Something that lets you, say, build a DEC VAX out of such simulated TTL?&lt;/p&gt;&#xA;&lt;p&gt;For &lt;strong&gt;purely digital&lt;/strong&gt; circuits running at a few megahertz with a few dozen chips and netlists of a few hundred pins - i.e. a typical late 1970s or early 1980s microcomputer - such an emulation ought to be possible on current hardware.  (For analog circuits, haha nope.)&lt;/p&gt;&#xA;&lt;p&gt;Later machines increasingly featured custom chips.  There are already emulations of these that may or may not be useful in designing a version to work with this system.  On the one hand, such custom chips pack a lot of TTL into a small space and might not be feasible to emulate;  OTOH, they potentially reduce a lot of complex internal functionality to the behaviour of a few (well, typically 40) external pins, which might actually make things easier.&lt;/p&gt;&#xA;&lt;p&gt;The stuff about proprietary chips I believe is not relevant.  If you want to simulate a chip at this level you should be able to get everything you need to know about how it works from the product data sheet.  (That, after all, is precisely what it is for.)&lt;/p&gt;&#xA;&lt;p&gt;So to summarise:  It is highly unlikely that you would be able to build a virtual Spectrum and plug it in to a virtual Sony TV and then play &lt;em&gt;Manic Miner&lt;/em&gt; on it &lt;em&gt;in software&lt;/em&gt; using current technology, or any technology in the foreseeable future.  It is &lt;em&gt;even less&lt;/em&gt; likely that you would be able to walk around it in your virtual lounge and flump down on your virtual sofa to play it.&lt;/p&gt;&#xA;&lt;p&gt;But if you wanted to build the gubbins of a virtual Commodore PET out of virtual TTL and are prepared to fake the I/O a little bit - go for it!&lt;/p&gt;&#xA;&lt;p&gt;And let me know when its done!&lt;/p&gt;&#xA;" OwnerUserId="19357" LastActivityDate="2020-09-15T07:53:56.273" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16215" PostTypeId="2" ParentId="16205" CreationDate="2020-09-15T09:49:19.367" Score="10" Body="&lt;p&gt;The manual says nothing more than it can print 12 characters per second and it uses BUSY pin.&lt;/p&gt;&#xA;&lt;p&gt;Even if you have connected BUSY output to CTS input, and turned RTS/CTS handshaking on, there is still a possibility that one or two extra bytes are sent out on the data pin, because the serial string write happens as a single large block, and also the USB packets contain multiple bytes to send in one packet, so it is up to the drivers and the chip how fast it can react to the BUSY/CTS signal.&lt;/p&gt;&#xA;&lt;p&gt;To be sure, write only single byte at a time, flush buffers after each byte written, and preferably add a delay of at least 84 milliseconds after flushing the single byte. Then, after that is up to the serial chip driver and USB controller driver and the chip itself how will it behave.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-09-15T09:49:19.367" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="16216" PostTypeId="1" CreationDate="2020-09-15T11:32:12.093" Score="2" ViewCount="128" Body="&lt;p&gt;I wonder if anyone has documentation left on this topic. In the early 80's, I used to be a 3270 terminal operator, and I wrote programs with GIS. I remember that this language was rather mighty but had a steep learning curve. One could write a program (which, of course, was run as a &amp;quot;job&amp;quot;), selecting from several tables, like a relational database. But it was no SQL dialect.&#xA;Has anyone the &amp;quot;programmer's manual&amp;quot;, or a link? I searched the Internet Archive, the IBM website and so on, but no results.&#xA;best greetings,&#xA;Andreas&lt;/p&gt;&#xA;" OwnerUserId="19361" LastActivityDate="2020-09-15T11:59:51.580" Title="Any informations on IBM's &quot;Generalized Information System&quot; still available?" Tags="&lt;history&gt;&lt;ibm360&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16217" PostTypeId="2" ParentId="16216" CreationDate="2020-09-15T11:59:51.580" Score="3" Body="&lt;p&gt;All I could find on &lt;a href=&quot;ftp://ftp.www.ibm.com/software/in/data/202452.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM's website&lt;/a&gt; was the following quote:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;One of the earliest systems designed to provide structure and random&#xA;access to data was the Generalized Information System (GIS), which was&#xA;developed at TRW by Dick Pick and Don Nelson. Pick further developed&#xA;this system into a multidimensional DBMS known as the Pick System,&#xA;which was also an operating system (OS)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is quite a lot of information about the Pick System still online, though, e.g.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.vimaservic.com/Descargas/Manual_D3.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.vimaservic.com/Descargas/Manual_D3.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This had a language known as AQL, see Page 91 onwards.&lt;/p&gt;&#xA;&lt;p&gt;This was possibly the same language used by GIS?&lt;/p&gt;&#xA;" OwnerUserId="19363" LastActivityDate="2020-09-15T11:59:51.580" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16218" PostTypeId="2" ParentId="16190" CreationDate="2020-09-15T14:03:32.910" Score="0" Body="&lt;p&gt;What you propose would be similar to an FPGA simulator. Such things exist but they are very resource heavy and have some major limitations.&lt;/p&gt;&#xA;&lt;p&gt;The basic issue is that with real hardware many things happen simultaneously and a lot of work is required to simulate that in software. The result probably wouldn't be any better than the traditional emulators we have now.&lt;/p&gt;&#xA;&lt;p&gt;Also writing the code that defines these systems is somewhat specialist and less well known than writing traditional computer code.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-09-15T14:03:32.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16219" PostTypeId="1" AcceptedAnswerId="16220" CreationDate="2020-09-15T15:49:08.393" Score="4" ViewCount="490" Body="&lt;p&gt;I'm following &lt;a href=&quot;https://www.youtube.com/watch?v=hn-9oL-ClCE&quot; rel=&quot;nofollow noreferrer&quot;&gt;root42's videos about DOS programming using Turbo C 2.01&lt;/a&gt;. I've written my own Soundblaster 1.xx driver following &lt;a href=&quot;http://www.scs.stanford.edu/05au-cs240c/lab/hardware/SoundBlaster.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Creative Labs documentation&lt;/a&gt;, and I'm confused about memory allocation. I'm working in real mode in the large model.&lt;/p&gt;&#xA;&lt;p&gt;To play sound through the SB using DMA, the source memory block must be wholly contained in one memory segment. In root42's video, they use the following code to allocate a 32768 byte block:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void assign_dma_buffer()&#xA;{&#xA;  unsigned char* temp_buf;&#xA;  long linear_address;&#xA;  short page1, page2;&#xA;&#xA;  temp_buf = (char *) malloc(32768);&#xA;  linear_address = FP_SEG(temp_buf);&#xA;  linear_address = (linear_address &amp;lt;&amp;lt; 4)+FP_OFF(temp_buf);&#xA;  page1 = linear_address &amp;gt;&amp;gt; 16;&#xA;  page2 = (linear_address + 32767) &amp;gt;&amp;gt; 16;&#xA;  if( page1 != page2 ) {&#xA;    dma_buffer = (char *)malloc(32768);&#xA;    free( temp_buf );&#xA;  } else {&#xA;    dma_buffer = temp_buf;&#xA;  }&#xA;  linear_address = FP_SEG(dma_buffer);&#xA;  linear_address = (linear_address &amp;lt;&amp;lt; 4)+FP_OFF(dma_buffer);&#xA;  page = linear_address &amp;gt;&amp;gt; 16;&#xA;  offset = linear_address &amp;amp; 0xFFFF;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This looks like it allocates memory, examines the resulting absolute address to determine whether both end-points lie within the same segment, and if so places the address in &lt;code&gt;page&lt;/code&gt; and &lt;code&gt;offset&lt;/code&gt; global variables for use by DMA later, otherwise it has a second attempt and returns that unconditionally.&lt;/p&gt;&#xA;&lt;p&gt;What would happen if the second attempt was also straddling a segment boundary? I think this code works on the assumption that malloc returns consecutive, contiguous blocks of memory.&lt;/p&gt;&#xA;&lt;p&gt;Is there some Turbo C / MS-DOS specific way I can request a block of memory that's guaranteed to lie within just one segment? Or, even better, just request the whole segment?&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="15334" LastEditDate="2020-11-15T12:00:41.280" LastActivityDate="2020-11-15T12:00:41.280" Title="How can I malloc() a block that's guaranteed to lie within a single DMA segment in Turbo C 2.01?" Tags="&lt;ms-dos&gt;&lt;programming&gt;&lt;memory-layout&gt;&lt;c&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16220" PostTypeId="2" ParentId="16219" CreationDate="2020-09-15T16:13:14.370" Score="9" Body="&lt;p&gt;You’re correct, the goal of this code is to ensure that the allocated buffer is entirely contained within the same DMA segment (DMA operates on 64KiB segments, not to be confused with the 16-byte-aligned real-mode segments of the x86 addressing model).&lt;/p&gt;&#xA;&lt;p&gt;The assumption that the allocator returns successive blocks is safe, at least before the heap gets fragmented, since the program won’t be doing any other allocations while this is happening; but even when the allocations return successive blocks, they won’t be adjoining, because Turbo C’s allocator has some overhead between blocks. Some quick testing with Turbo C 2.01 suggests that two successive 32KiB allocations are separated by 16 bytes (the blocks always start at offset 8 of a 16-byte segment, which suggests an overhead of 8 bytes plus segment alignment), so there are edge cases where such a sequence of allocations will return two blocks which aren’t within 64KiB DMA segments; for example, one buffer at 0x4FFF8, the following at 0x58008...&lt;/p&gt;&#xA;&lt;p&gt;The general way to avoid any issues with such allocations, for a DMA-compliant block of memory up to 32KiB, is to allocate a block of memory double the size (using &lt;code&gt;farmalloc&lt;/code&gt; in Turbo C if necessary); at least one of the halves of the returned block will be entirely within the same  64KiB DMA segment:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void far * full_buf;&#xA;&#xA;full_buf = farmalloc(65536);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;At this point, one of the halves of the block pointed at by &lt;code&gt;full_buf&lt;/code&gt; is within a 64KiB DMA segment. That’s not really DOS-like though since 32KiB is a lot of memory to waste; but you can always use it for something else.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-09-16T15:08:13.817" LastActivityDate="2020-09-16T15:08:13.817" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16221" PostTypeId="1" AcceptedAnswerId="16618" CreationDate="2020-09-15T20:55:09.050" Score="2" ViewCount="210" Body="&lt;p&gt;The Nokia 2760 is a clamshell mobile phone released in 2007 which advertised its Java game support. Ten years ago it was still a very popular phone. There were a number of games either preinstalled or available as an add-on. But was/is it also possible to develop and run a homebrew game for this device? A quick search did not reveal that there are any development kits, tutorials, or similar.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-10-20T21:41:25.063" Title="Are there public tools for developing homebrew Java games for the Nokia 2760?" Tags="&lt;java&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16223" PostTypeId="2" ParentId="16153" CreationDate="2020-09-15T21:35:07.607" Score="4" Body="&lt;p&gt;Its really a cost/benefit problem. Hand optimized assembly could still be faster as your optimizing for a specific code path, not a more general one. That being said, each iteration of a compiler could make better decisions and generate tighter code with less room for further optimization. At some point, the extra few instructions that could be saved are not worth the time/cost to hand optimize. There was a time, I believe early 90's, where we were using partial assembly.  Some routines were hand optimized assembly for critical performance, but most were done in higher level languages. Eventually,those hand optimized assembly routines were re-coded into higher level languages as chips became faster and the need for performance gains were reduced.&lt;/p&gt;&#xA;&lt;p&gt;As recently as a few years ago I dusted off my wizards cap and robes and hand coded a tiny inline ASM routine to perform a simple transformation...more because I could shave a few tics off of a routine that was being called in a tight loop and could manage the registers myself. The end result was something that out performed a similarly coded C routine by approximately twice (although we are talking tics). It is possible that a future version of the compiler could generate tighter code and/or new processor technologies would further reduce any noticeable gains.&lt;/p&gt;&#xA;" OwnerUserId="19367" LastActivityDate="2020-09-15T21:35:07.607" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16224" PostTypeId="1" CreationDate="2020-09-15T23:34:12.797" Score="-6" ViewCount="648" Body="&lt;p&gt;&lt;a href=&quot;https://datomatic.no-intro.org/index.php?page=download&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://datomatic.no-intro.org/index.php?page=download&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This website has the &lt;em&gt;worst&lt;/em&gt;, most cryptic and broken interface I've ever seen in my life, but eventually, I managed to download a big archive containing .dat files (which are actually some kind of XML files) containing every single video game title and the hashes for their files/ROMs, used to verify your own collection to make sure they have not been modified or incorrectly captured.&lt;/p&gt;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Sega - Master System - Mark III (Parent-Clone) (20200429-062328).dat&#xA;Sega - Mega Drive - Genesis (Parent-Clone) (20200822-054519).dat&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;There's also one for PlayStation, and for every other console ever, basically. But not one for Saturn. That's the one console I see missing. Many way more obscure ones are included, but not Sega Saturn.&lt;/p&gt;&#xA;&lt;p&gt;What could possibly explain this?&lt;/p&gt;&#xA;&lt;p&gt;I would refuse to use the website out of principle, just because I can't stand cryptic/idiotic interfaces, but this data is simply not available anywhere else online. (Or, if it is, it is extremely well hidden.)&lt;/p&gt;&#xA;&lt;p&gt;I also don't understand what the &amp;quot;(Parent-Clone)&amp;quot; parts mean.&lt;/p&gt;&#xA;" OwnerUserId="19370" LastActivityDate="2020-09-15T23:49:52.443" Title="Why is Sega Saturn mysteriously missing from No-Intros.org's hash database?" Tags="&lt;rom&gt;&lt;game-consoles&gt;&lt;sega&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2020-09-16T08:31:31.810" ContentLicense="CC BY-SA 4.0" />
  <row Id="16225" PostTypeId="2" ParentId="16224" CreationDate="2020-09-15T23:49:52.443" Score="1" Body="&lt;p&gt;I believe it's because there's an alternative preservation hashing project named &lt;em&gt;Redump&lt;/em&gt; that focuses on optical media. Since No-Intro focuses on cartridge games, it would be duplicated (though not wasted) effort for both projects to spend time on the Saturn.&lt;/p&gt;&#xA;&lt;p&gt;On No-Intro's website:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Welcome to the No-Intro wiki!&lt;/p&gt;&#xA;&lt;p&gt;We specialize in video game preservation for &lt;strong&gt;cartridge based systems&lt;/strong&gt; (my emphases) listed here.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;From &lt;a href=&quot;http://wiki.pleasuredome.org.uk/index.php/Comparison_of_ROMs_sets#Redump&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pleasuredome&lt;/a&gt;'s directory of these kinds of projects:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Redump&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Similiar mission as No-Intro but &lt;strong&gt;only for optical media&lt;/strong&gt;, also not quite as pure as Trurip: Redump.org is a disc preservation database and internet community dedicated to collecting precise and accurate information about every video game ever released on optical media of any system. The goal is to make blueprints of the data on console and PC game discs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In &lt;a href=&quot;http://robloach.github.io/awesome-dats/dats.xml&quot; rel=&quot;nofollow noreferrer&quot;&gt;this github post&lt;/a&gt;, you can see a list of dats for more systems, and how they interleave both No-Intro and Redump dats to cover more systems.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastActivityDate="2020-09-15T23:49:52.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16226" PostTypeId="2" ParentId="16190" CreationDate="2020-09-16T08:07:38.603" Score="0" Body="&lt;p&gt;To add a little to the excellent answers already posted... In digital electronics it's typical that we do as much as possible in software/firmware, for a number of good reasons (cost, space, power, risk management) and only resort to hardware for functions that code can't perform, such as power supplies and user interface.  Therefore in a purely virtual (software) environment there's little point in simulating hardware, that wouldn't be required in that environment, unless you're just doing it for fun.  As other contributors have pointed out, accurately simulating even a single transistor uses significant computing resources, and in this situation there's no obvious gain over a conventional software implementation.  There are limited examples of where limited real-time simulation is useful (e.g. using a PC to simulate the 8-bit micro in an old arcade game).&lt;/p&gt;&#xA;" OwnerUserId="19372" LastActivityDate="2020-09-16T08:07:38.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16227" PostTypeId="1" CreationDate="2020-09-16T11:38:20.347" Score="3" ViewCount="676" Body="&lt;p&gt;I have a collection of ROM files for the NES, SNES, Nintendo 64 and others. These ROMs match exactly those games that I own or owned growing up.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I found out about the &amp;quot;No-Intros&amp;quot; database, and thus made a script to import all the filenames and hashes into my database. I then looped through all my ROM files and checked if they match their data.&lt;/p&gt;&#xA;&lt;p&gt;None of them do.&lt;/p&gt;&#xA;&lt;p&gt;I have very carefully double-checked that it's not a bug in my script. My database does contain the correct information from their database.&lt;/p&gt;&#xA;&lt;p&gt;I do it like this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Pick a ROM file, such as: &lt;code&gt;Tetris (Europe).nes&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Calculate the SHA1 hash sum for the file, in this case: &lt;code&gt;817169b819aadaae52cce6b3d8d2fc24270566d7&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Check what SHA1 hash No-Intros claims that this exact file name has in my database: &lt;code&gt;66883b9eddec933e36b6bff0479cefd2434ffb40&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Conclusion: They don't match!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Apparently, every single ROM I have is modified somehow.&lt;/p&gt;&#xA;&lt;p&gt;Now, I vaguely know that many ROMs circulating over the decades have been &amp;quot;dirty&amp;quot; ones with modified headers (but otherwise identical game contents), messing up the hashes. That's likely what's happening here. I also vaguely know about programs that can scan and &amp;quot;repair&amp;quot; dirty ROMs to make them clean. However, I feel very, very scared about running software on my computer, so this would have to be a last resort, plus I'm not sure I can find any usable such software.&lt;/p&gt;&#xA;&lt;p&gt;If possible, I would like to &amp;quot;clean&amp;quot; the ROMs myself with some simple logic or some &lt;em&gt;very&lt;/em&gt; trustworthy self-contained script or something. But even more than that, I would like to know if my guess is even right at all.&lt;/p&gt;&#xA;&lt;p&gt;I assume that No-Intros' data is correct, or at least is not so massively incorrect as to give the wrong hashes for every single ROM I own.&lt;/p&gt;&#xA;&lt;p&gt;This makes me feel uneasy. I hate the thought of having some kind of &amp;quot;hacked&amp;quot; ROMs where some dude in 1997 or something modified the game slightly so that it runs differently. I want to be sure that I have only the exact data on the cartridges. Nothing more and nothing less.&lt;/p&gt;&#xA;&lt;p&gt;This is all very confusing to me since my ROMs follow a very strict naming convention. For example: &lt;code&gt;Zelda II - The Adventure of Link (Europe) (Rev B).nes&lt;/code&gt;. It seems unlikely (although definitely possible still) that somebody would go out of their way to rename bad ROMs to such a strict and specific naming scheme.&lt;/p&gt;&#xA;&lt;p&gt;What do you suggest?&lt;/p&gt;&#xA;" OwnerUserId="19375" LastEditorUserId="3324" LastEditDate="2020-09-16T14:04:48.143" LastActivityDate="2020-09-19T20:21:28.183" Title="Every single ROM in my collection has the wrong SHA1 hash according to No-Intros" Tags="&lt;emulation&gt;&lt;nes&gt;&lt;rom&gt;&lt;data-preservation&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16228" PostTypeId="2" ParentId="16227" CreationDate="2020-09-16T14:10:16.277" Score="4" Body="&lt;p&gt;There are multiple header formats for NES and SNES ROMs. For SNES and N64 ROMs there are also byte ordering issues. Unless you know precisely what source ROMs they used to make the database you can only use trial and error to find the matching ripper settings.&lt;/p&gt;&#xA;&lt;p&gt;The simplest option is probably to download No Intro ROM packs that others have assembled and discard the ROMs you do not wish to keep (e.g. for copyright reasons). BitTorrent is a safe and easy way to do that and the packs are easily available.&lt;/p&gt;&#xA;&lt;p&gt;Otherwise the only option is to try every combination of ripper settings until you find the ones they were using. Looking at their web site they do not seem to have documented the settings anywhere, or even clearly which version of the games they ripped in some cases. It's not uncommon for there to be multiple retail versions of the game for a particular region.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-09-16T14:10:16.277" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16229" PostTypeId="2" ParentId="16219" CreationDate="2020-09-16T18:45:24.393" Score="4" Body="&lt;p&gt;This is how I did it in an old program I wrote to exercise my knowledge of the DMA DSP of the Sound Blaster, back in 1996.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;char *AllocDMABuffer (void)&#xA;{&#xA;  char *pTemp;&#xA;  unsigned int Segm;&#xA;&#xA;  pTemp=farmalloc(131072);&#xA;  if (!pTemp)&#xA;    return NULL;&#xA;&#xA;  Segm=FP_SEG (pTemp);&#xA;  while (Segm &amp;amp; 0x0FFF)&#xA;    Segm++;&#xA;&#xA;  return MK_FP(Segm,0);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;For this specific program, I didn't care about freeing the allocated memory, as there was just one DMA buffer to be used by the whole program, until its termination, so I didn't care that the original pTemp pointer was lost upon function exit.&lt;/p&gt;&#xA;&lt;p&gt;As you see, it's all about allocating twice the desired amount of memory, and then normalize the pointer so that the memory region has a segment value which is an integral multiple of 4096.&lt;/p&gt;&#xA;&lt;p&gt;The DMA chip uses 16 bits for memory addressing, and the remaining 4 bits are stored in a different off-chip register. This means that not every 64KB memory block is well suited for a DMA transfer. Its starting physical address must be in the form &lt;code&gt;xxxx 0000 0000 0000 0000&lt;/code&gt; in binary.&lt;/p&gt;&#xA;&lt;p&gt;Translating this into the segment:offset scheme that the x86 uses in real mode, this means that the starting address must be in the form: &lt;code&gt;X000h:0000h&lt;/code&gt; so that the linear address is &lt;code&gt;X000&amp;lt;&amp;lt;4 + 0000 = X0000 = xxxx 0000 0000 0000 0000&lt;/code&gt;. That's why the segment has to be an integral multiple of 4096.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;while&lt;/code&gt; portion may probably be optimized, though. Something like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;if (Segm &amp;amp; 0x0FFF)&#xA;  Segm += (0x0FFF - Segm &amp;amp; 0x0FFF);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If you see the current code, you will notice why allocating twice the required size is needed. As you cannot control which segment the allocator gives to you, it might have any value so it must be adjusted to the next integral multiple of 4096 and that means advancing it up to 4095 steps. Each step (each &lt;code&gt;Segm++&lt;/code&gt; operation) walks through a parragrah (16 bytes), so in the worst case, finding a valid segment may mean wasting 4095*16 = 65520 bytes.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2020-09-16T21:14:46.230" LastActivityDate="2020-09-16T21:14:46.230" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16230" PostTypeId="2" ParentId="16181" CreationDate="2020-09-16T19:12:02.360" Score="0" Body="&lt;p&gt;Another bunch of 8080-based home computers from USSR with bitmap graphics:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Specialist_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Specialist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Vector-06C&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vector-06C&lt;/a&gt; (actually had quite advanced bitmap modes!)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Orion-128&quot; rel=&quot;nofollow noreferrer&quot;&gt;Orion-128&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%9F%D0%9A-01_%C2%AB%D0%9B%D1%8C%D0%B2%D0%BE%D0%B2%C2%BB&quot; rel=&quot;nofollow noreferrer&quot;&gt;PK-01 L'vov&lt;/a&gt; (no english wiki page is available)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%98%D1%80%D0%B8%D1%88%D0%B0_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Irisha&lt;/a&gt; (no english page)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Corvette_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Corvette&lt;/a&gt; (had both character-based and bitmap-based videomodes)&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-09-16T19:12:02.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16231" PostTypeId="2" ParentId="16181" CreationDate="2020-09-16T20:49:36.790" Score="0" Body="&lt;p&gt;Many UK home computers with Z80s  had bitmapped displays.&#xA;The Sinclair ZX Spectrum (1982) had a 1 bit per pixel bitmap that was transformed into a multi colour display by a separate array of attribute pairs for foreground and background colours.&#xA;The Amstrad CPC machines (1984) extended this to three different colour bitmap modes, with different tradeoffs between pixel resolution and palette size. Their later PCW machines were also Z80 based and had bitmapped monochrome displays.&#xA;Japanes MSX machines also had a bitmap graphics mode available.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2020-09-16T20:49:36.790" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16232" PostTypeId="1" CreationDate="2020-09-17T00:40:20.337" Score="10" ViewCount="623" Body="&lt;p&gt;In the magical mid-1990s, when we already had got our (second-hand) 486 PC and I had both a NES and SNES, I for some reason got my paws on an old Atari &amp;quot;XE Game System&amp;quot; (8-bit, 1987). It had a cartridge called &amp;quot;Flight Simulator II&amp;quot; which was very fascinating to me, even though I was able to run DOOM.&lt;/p&gt;&#xA;&lt;p&gt;The reason it was so fascinating to me was the way it drew &amp;quot;real 3D&amp;quot; graphics, albeit very primitive wireframe such, and at a very low FPS. I remember sitting there figuring out how to fly around with this virtual air plane and just watching the scenery and being amazed by how that ancient machine could draw such environments which even the SNES seemed to struggle with. Starwing (AKA Starfox) used a special chip in the cartridge and still wasn't as impressive to me, since it was so limited in where you could go. It was &amp;quot;on rails&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;In contrast, this &amp;quot;flying game&amp;quot; was really some kind of simulation, where I could explore the 3D world as freely as the air plane would let me move around. Nevermind the fact that there was virtually nothing in it; the few objects that &lt;em&gt;were&lt;/em&gt; there were extremely cool to me. In my mind, not at all understanding technical limitations other than &amp;quot;this is quite old&amp;quot;, there was a real chance that I could fly away and find some exciting new areas if I just spent long enough watching the screen and making sure the plane didn't crash. There was truly a sense of wonder, even though it was ridiculously outdated even back then.&lt;/p&gt;&#xA;&lt;p&gt;But wasn't this machine roughly the same in power as a NES? And the NES not only did never get a port of this game/simulation, but had nothing like it that I know of. And, as mentioned, even the SNES (16-bit, next generation) didn't even have this kind of free-roaming simulation. The &amp;quot;Mode 7&amp;quot; visuals were also very cool, but kind of &amp;quot;cheating&amp;quot; and &amp;quot;flat&amp;quot; somehow. And the fanciest 3D games for that console, such as Stunt Race FX, had to use expensive special chips inside the cartridges.&lt;/p&gt;&#xA;&lt;p&gt;Was there a technical reason for the lack of a NES port of this? Maybe that primitive computer/console was inferior in every way to the NES (not to mention the SNES), but had the one &amp;quot;pro&amp;quot; in that it was able to draw real 3D environments in a way which both failed to accomplish? But why would that be? I find that difficult to believe.&lt;/p&gt;&#xA;&lt;p&gt;Or was the reason simply that they didn't think the simulation would be fun to play/attractive for the NES audience? I can think of countless NES games that &lt;em&gt;were&lt;/em&gt; released which would've been deadly dull to me as a kid -- far more boring than this 3D world, even if I didn't care at all about the fact that it was a flight simulation.&lt;/p&gt;&#xA;" OwnerUserId="19380" LastActivityDate="2020-09-23T08:50:35.590" Title="Why was &quot;Flight Simulator II&quot; never ported to the NES? Was it technically impossible?" Tags="&lt;nes&gt;&lt;atari&gt;&lt;simulator&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16234" PostTypeId="2" ParentId="16232" CreationDate="2020-09-17T03:25:09.963" Score="10" Body="&lt;p&gt;The NES's architecture isn't really ideal for anything that involves all-pixel-addressable plotting such as vector graphics. It's instead strongly optimised for 2d backgrounds made of repeating 8x8 tiles and a small number of sprites on top.&lt;/p&gt;&#xA;&lt;p&gt;However, there is a NES port of Elite (&lt;a href=&quot;https://www.youtube.com/watch?v=RE_rdYHVhA4&quot; rel=&quot;noreferrer&quot;&gt;see here on YouTube&lt;/a&gt;), a vector 3d game which is much sparser but faster, and proves the technical capability subject to a bunch of caveats.&lt;/p&gt;&#xA;&lt;p&gt;The NES doesn't have memory for tiles built in. The cartridge has to provide that memory. In many games it's just ROM; for a vector title like Elite the cartridge instead has to use RAM, which is more expensive, and therefore there's a cost-benefit analysis to be made considering the possible audience.&lt;/p&gt;&#xA;&lt;p&gt;Elite came out for the NES in 1991 (i.e. a full seven years after its debut on other platforms) when costs will have been a lot lower and the NES had peaked in terms of its audience. It came out only in Europe since American publishers weren't interested.&lt;/p&gt;&#xA;&lt;p&gt;So I think your guess that there were few 3d vector titles for the NES (possibly no others?) because of assumptions about the audience is probably correct once the additional costs of manufacturing such a title are factored in.&lt;/p&gt;&#xA;&lt;p&gt;That said, to offer a more thorough comparison:&lt;/p&gt;&#xA;&lt;p&gt;The NTSC NES has a 1.79Mhz 6502 derivative; the Atari XE is actually almost exactly the same hardware as the Atari 400/800 of the late 1970s and also has a 1.79Mhz 6502. So you would prima facie expect the two machines to be equally good at 3d calculation.&lt;/p&gt;&#xA;&lt;p&gt;The Atari offers plain bitmapped modes, and from eyeballing it I would imagine Flight Simulator is using a 160px four-colour mode. The NES produces a higher pixel density than that, though it is generally in four colours (subject to different tiles not having to share palettes), so would likely need to draw more pixels. Suppose it wanted to fill its width as the Atari does and therefore probably cover the same amount of a TV that probably requires 256/160 = 1.6 times as much drawing.&lt;/p&gt;&#xA;&lt;p&gt;That's before you factor in that, unless you've added address translation hardware to your cartridge, the NES is also going to have to put more work into addressing because it needs to think in terms of tile + row.&lt;/p&gt;&#xA;&lt;p&gt;So the NES was indeed the technically weaker machine for this type of title — drawing would be more expensive in general, and you'd need the cartridge to assist by providing RAM and suitable timing logic.&lt;/p&gt;&#xA;&lt;p&gt;Other 8-bit computers overcame worse though, and Elite seems to contradict any claim of impossibility.&lt;/p&gt;&#xA;&lt;p&gt;For other instances of Atari does what Nintendon't, see e.g. &lt;a href=&quot;https://youtu.be/KXEwQCS4yow?t=308&quot; rel=&quot;noreferrer&quot;&gt;The Eidolon&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=0eRoMjirS3s&quot; rel=&quot;noreferrer&quot;&gt;Stunt Car Racer&lt;/a&gt; or &lt;a href=&quot;https://www.youtube.com/watch?v=jmfNMo6kHpA&quot; rel=&quot;noreferrer&quot;&gt;Way Out&lt;/a&gt; (all YouTube links). Stunt Car Racer is a recent port, but it's from the C64 version so it's fully representative of 1980s coding.&lt;/p&gt;&#xA;&lt;p&gt;Also, the game isn't great, but some programmers were able to do pretty well on the base SNES hardware — no SuperFX or any other acceleration whatsoever. See &lt;a href=&quot;https://youtu.be/QU4g7to603s?t=313&quot; rel=&quot;noreferrer&quot;&gt;Race Drivin'&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Potential performance now seems to be a matter under discussion; let's go ahead and assume supercat's ballpark figure of 400 bytes/frame writing to a hypothetical cartridge-with-a-framebuffer is accurate.&lt;/p&gt;&#xA;&lt;p&gt;I looked at:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://youtu.be/VXDl9d6D7Cc?t=91&quot; rel=&quot;noreferrer&quot;&gt;the Atari version of Flight Simulator II&lt;/a&gt;; and&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://youtu.be/0HWzJMFeQv8?t=6829&quot; rel=&quot;noreferrer&quot;&gt;the C64 version of Flight Simulator II&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I manually counted frames for half a minute. They're sufficiently slow that this isn't problematic. Results were:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Atari: 35 frames;&lt;/li&gt;&#xA;&lt;li&gt;C64: 23 frames.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So let's call the target 1fps. In each case it's about half the display that's being redrawn.&lt;/p&gt;&#xA;&lt;p&gt;On a NES, half the display occupies 32 * 112 * 2 = 7,168 bytes.&lt;/p&gt;&#xA;&lt;p&gt;So — if it were the bottleneck — the necessary framebuffer access speed on NTSC? 7168 / 60 = 119 bytes/frame.&lt;/p&gt;&#xA;&lt;p&gt;I therefore disagree that there is a bandwidth problem here.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-09-19T01:36:38.547" LastActivityDate="2020-09-19T01:36:38.547" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16235" PostTypeId="1" CreationDate="2020-09-17T05:12:04.553" Score="7" ViewCount="1582" Body="&lt;p&gt;Was ZX spectrum better at handling than later PCs-keyboards without having diodes in its key matrix? I encountered this comment on ycombinator but I fail to understand it.&#xA;Couldn't be Speccy method scaled to 101-key keyboards and the likes?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=7364709&quot; rel=&quot;nofollow noreferrer&quot;&gt;beagle3 on Mar 8, 2014&lt;/a&gt; [–]&lt;/p&gt;&#xA;&lt;p&gt;The ZX Spectrum in 1982 (and I'm quite sure its ancestors ZX-80 and&#xA;ZX-81 from their eponymous years) had a keyboard just as cheap or&#xA;cheaper, with a similar matrix arrangement), but had no ghosting at&#xA;all:&lt;/p&gt;&#xA;&lt;p&gt;Instead of having an &amp;quot;all hot&amp;quot; electrical configuration, it would&#xA;cycle through the rows with a &amp;quot;one hot&amp;quot; configuration, and read the&#xA;columns. If I recall correctly, it would be something like 20 cycles&#xA;of a 4Mhz Z-80 to read one 5-column row (you'd need 8 of them to read&#xA;the entire 40-key keyboard), and it was done every 50hz/60hz interrupt&#xA;by the main CPU - modern keyboards have an ASIC on par or 100 times&#xA;faster than a Z-80 just for the keyboard.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="19381" LastEditorUserId="1932" LastEditDate="2020-09-18T14:17:27.843" LastActivityDate="2020-09-18T14:17:27.843" Title="How ZX Spectrum avoided key ghosting" Tags="&lt;zx-spectrum&gt;&lt;keyboards&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16236" PostTypeId="2" ParentId="16235" CreationDate="2020-09-17T05:47:37.847" Score="17" Body="&lt;p&gt;As far as I did my own experiments with the ZX Spectrum keyboard, I strongly disagree with that quoted text. The ZX Spectrum keyboard did ghosting, of course.&lt;/p&gt;&#xA;&lt;p&gt;Let's look at the key matrix:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/3pqfn.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3pqfn.png&quot; alt=&quot;ZX Spectrum keyboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Imagine you press A, S, and Z keys together. It results in a &amp;quot;ghosted&amp;quot; Caps Shift.&lt;/p&gt;&#xA;&lt;p&gt;When the CPU starts to check the &lt;code&gt;CS-Z-X-C-V&lt;/code&gt; row, it drives the A8 line to &amp;quot;0&amp;quot;. This level goes through the Z key to the &lt;code&gt;2-W-S-Z&lt;/code&gt; column, through the S key to the row &lt;code&gt;A-S-D-F-G&lt;/code&gt; and so on, through the A key to the &lt;code&gt;1-Q-A-CS&lt;/code&gt; column and to the D0 input.&lt;/p&gt;&#xA;&lt;p&gt;I did those tests on my Spectrum 48k (Issue 2) back in the '80s and got the result I described. It may depend on values of pull-ups and many other circumstances, maybe later models have this ghosting fixed, but I have tried it and it worked that way.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="5199" LastEditDate="2020-09-17T09:11:51.810" LastActivityDate="2020-09-17T09:11:51.810" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16237" PostTypeId="2" ParentId="16232" CreationDate="2020-09-17T15:42:37.460" Score="4" Body="&lt;p&gt;Making a game like Flight Simulator work with any kind of reasonable frame rate, especially on an NTSC NES, would require using either a dual-port RAM, two RAM subsystems which could be switched between the CPU and PPU buses, or two RAM subsystems along with a means of quickly copying data from one to the other.  While the technology would have existed in the 1980s or early 1990s to make such a thing possible, the cheapest way of implementing the display subsystem would have probably been to use two 8Kx8 SRAM chips, twelve 8-bit bus driver chips (three to connect the first RAM chip to the CPU bus, three to connect it to the PPU bus, three to connect the second RAM chip to CPU, and three to connect that chip to PPU), along with a bunch of control circuitry, the cost would have been outrageous, especially considering that doesn't even include the ROM or supplemental RAM needed to run the game logic.&lt;/p&gt;&#xA;&lt;p&gt;Elite was able to kinda sorta work on European PAL machines because those machines allow the CPU access to the display memory during a relatively long vertical blanking interval.  The NTSC machines in the US only allow the CPU access to display memory for a much shorter time each frame.  Even insanely optimized display code would be limited to writing less than 400 bytes to the display buffer per NTSC frame.  If a program used a 4K display buffer to show monochrome graphics and included a little hardware assistance to facilitate writing every other byte, rewriting the whole buffer would take about ten frames even under insanely optimistic assumptions.  And that would be to yield a flight simulator with monochrome graphics inferior to those of late 1970s computers like the Apple II.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-09-17T15:42:37.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16238" PostTypeId="2" ParentId="16145" CreationDate="2020-09-17T16:33:19.533" Score="3" Body="&lt;p&gt;There are a few details with x86 inheritance in PCI :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Little Endian only. Big Endian CPUs (such as PowerPCs as default) had to adapt to that bus by using reversed endian instructions, or bus swap hardware in PCI controllers.&lt;/li&gt;&#xA;&lt;li&gt;IO address space. Competing RISC CPUs (PowerPCs, ARM, SPARC...) didn't use IO ports (well in POWER it was obsoleted IIRC), only memory-mapped IOs. Many PCI peripherals (such as video or disk controllers, had settings which allowed to access to all registers through memory accesses instead of IO ports.&lt;/li&gt;&#xA;&lt;li&gt;Wacky arcane options such as &amp;quot;VGA palette snoop&amp;quot; which was needed for compatibility with legacy PC ISA hardware.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So, I don't think Intel cared about enabling the use of PCI on non-x86 systems, it was adopted by Apple and others to benefit from the huge range of PCI peripheral chips for PCs, just like other standards like PS/2, VGA connector, IDE disks, or even USB.&lt;/p&gt;&#xA;&lt;p&gt;It can be seen in many 90's era computers which became more PC-like to be cheaper : Apple Macintosh, Sun UltraSparc and IBM PowerPC workstations...&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2020-09-17T16:33:19.533" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16239" PostTypeId="2" ParentId="16235" CreationDate="2020-09-17T20:11:34.720" Score="0" Body="&lt;p&gt;The code responsible for scanning a keyboard can detect situations where ghosting may occur, and suppress the reporting of any keypress which might be a ghost press (e.g. situations where four or more keys seem to be pressed at once).  Doing this slightly complicates keyboard logic, but generally not be a huge amount (if a keyboard scan differs from the previous scan, record the contents of the current scan for comparison with the next one, but don't otherwise act upon it).  Alternatively, if a keyboard needs to detect combinations of two modifiers plus certain other keys, it could arrange the keys in question to either ensure that no combination of three keys would form the corners of a rectangle, or at minimum ensure that they would never form the corner of a rectangle whose fourth corner would also be a &amp;quot;plausible&amp;quot; key.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-09-17T20:11:34.720" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16240" PostTypeId="2" ParentId="13734" CreationDate="2020-09-17T21:50:00.410" Score="4" Body="&lt;p&gt;In my opinion, the accepted answer from Raffzahn has this question inside out. Anyone who has ever worked with ECL logic knows that the cooling system for current-mode VLSCI is not a bolt-on afterthought (very-large-scale crochet integration).&lt;/p&gt;&#xA;&lt;p&gt;In the Cray-1 design, back corners of the boards are almost directly adjacent, so the wire length is determined by the rear-board surface area—without any other undesired system elements intruding—almost exactly as if the system was a conventional rectilinear cabinet design. With the rear corners almost directly adjacent, a conventional rectilinear design would also have the front board corners almost directly adjacent.&lt;/p&gt;&#xA;&lt;p&gt;Where does your cooling system go now? Forced air is not going to cut it at this power density. There's no room inside to apply tiny heat sinks to the ICs either. You could make more room by specifying a larger vertical separation between boards. But then guess what? Your wire lengths increase as a direct consequence of that solution. It doesn't strike me a simple matter to obtain that power density while maintaining the same wire panel surface area without introducing the wedge-shaped innovation. So no, as the currently accepted answer insists, the wires are no shorter than they would have been in a conventional rectilinear cabinet with no interior volume available to extract heat—but I think that entirely misses the point.&lt;/p&gt;&#xA;&lt;p&gt;Next, as a secondary consideration, what we see here is a production system. It's not obvious to me that they didn't exploit &amp;quot;through the center&amp;quot; wiring distances at some point during development and debugging, before it became completely obvious which panel needed to be inserted into which slot in order to achieve a consistent wiring maximum. For example, the Eiffel tower is way more interesting once you know how much of its structure was cleverly designed to permit its original construction. The bootstrap during pre-production is not always a throw-away consideration. I don't think this is particularly likely in this instance, but I wouldn't discard the idea merely on the basis of a production photograph.&lt;/p&gt;&#xA;&lt;p&gt;Finally, I want to comment on the geometric and electrical assumptions underlying the phrase &amp;quot;especially as it's only present in one dimension&amp;quot;. One of these assumptions is reiterated in the footnote &amp;quot;maximum speed is only possible if all bits of a word arrive at the same time&amp;quot;. This is roughly true for synchronous word transfer, surely a dominant functional element within that thick rat's nest.&lt;/p&gt;&#xA;&lt;p&gt;But is there no other functional element at all, where a different critical path analysis makes more sense? That's not obvious to me from the supplied photograph. Additionally, there's plenty of geometric flexibility inherent in this design around module boundaries and board placement so as to greatly benefit from distance reductions &amp;quot;only present in one dimension&amp;quot;. If this system was laid out so that every wedge is a bit-slice of 64 boards stacked vertically, that &amp;quot;one dimension&amp;quot; would be all the nuts in the macroscopic dataflow diagram. Again I don't know if that applies here, but I surely wouldn't jump to any hard conclusions on the supplied photograph.&lt;/p&gt;&#xA;&lt;p&gt;In a traditional bitslice, after a bitslice consumes one dimension, the other dimension is often all you have left to work with/worry about so far as routing distances are concerned.&lt;/p&gt;&#xA;&lt;p&gt;It's quite a puzzle from where I sit on the degree to which this is a vanity design and one motivated by realistic engineering constraints. However, I will assert that Cray in having taking this design choice realized a system quite different from what might have been designed for conventional cabinetry, and it would be far from a trivial isomorphism—a non-isomorphism involving real engineering risk—to map the one we have to the one we don't have.&lt;/p&gt;&#xA;&lt;p&gt;———&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;rules schmules&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The little &amp;quot;welcome&amp;quot; panel underneath my edit box says &amp;quot;But avoid ... responding to other answers.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;I actually intended to comment directly on the accepted answer, but I was forbidden by what I regard as an explicitly ageist policy: the need to first accumulate 50 reputation points.&lt;/p&gt;&#xA;&lt;p&gt;I've been in the industry for forty years, and active online pretty much since &amp;quot;online&amp;quot; came into existence (before the public internet, there was CompuServe—traditionally written &amp;quot;Compu$erve back in the day because adolescence outrage has always been a thing). I've got &lt;em&gt;thousands&lt;/em&gt; of geek reputation points scattered over hell's half acre, only not here. Obviously I'm well into my fifth decade now and what I have to offer is long experience rather than flashy new learning. But no, before I can comment directly on the accepted answer, I need to complete yet another 50-point reputational internship as if I were half my present age.&lt;/p&gt;&#xA;&lt;p&gt;Hey, if someone out there with a completed internship wants to place of a few of my main points in the comments section of the accepted answer and then delete my rancorous &amp;quot;Grumpy Old Men&amp;quot; disobedience (aka this post), go ahead and fill your boots. Trust me, I have many reputation points, but I've been deleted often enough, too. Won't be the first time and it won't be the last time, either.&lt;/p&gt;&#xA;" OwnerUserId="19387" LastActivityDate="2020-09-17T21:50:00.410" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16241" PostTypeId="1" AcceptedAnswerId="16253" CreationDate="2020-09-18T00:53:00.437" Score="5" ViewCount="946" Body="&lt;p&gt;I'm trying to put a new CPU cooler in my 1999 IBM Aptiva 2163-580 (which has an Intel 440BX chipset, in case that's relevant). The system uses a Slot 1 CPU.&lt;/p&gt;&#xA;&lt;p&gt;The old cooler had a 2-pin connector, which mated exactly with the connector on the system board:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Jm6IQ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Jm6IQl.jpg&quot; alt=&quot;Old Slot 1 CPU with fan that uses 2-pin connector&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The new cooler, on the other hand, has a 3-pin connector, which doesn't match the connector on my system board:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nakXw.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nakXwl.jpg&quot; alt=&quot;New Slot 1 CPU with fan that uses 3-pin connector&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;How can I connect this new fan to my system and make it work?&lt;/p&gt;&#xA;" OwnerUserId="19389" LastActivityDate="2020-09-18T22:32:30.400" Title="How can I connect this 3-pin Slot 1 CPU fan to my system that uses a 2-pin connector?" Tags="&lt;hardware&gt;&lt;cpu&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16242" PostTypeId="2" ParentId="16241" CreationDate="2020-09-18T01:28:41.713" Score="8" Body="&lt;p&gt;Just plug it in, making sure the red and black wires are the ones on the pins.  The connector should be keyed to enforce this.  The yellow wire is for monitoring the fan's speed, and isn't required for normal operation.&lt;/p&gt;&#xA;&lt;p&gt;You may need to swap the wires around if the keying doesn't match.  This is simple enough: the connectors are held in place by small springs, which can be released by pressing down on them through the side of the connector with a small screwdriver or similar, while pulling on the wire.&lt;/p&gt;&#xA;" OwnerUserId="4" LastEditorUserId="4" LastEditDate="2020-09-18T20:25:46.693" LastActivityDate="2020-09-18T20:25:46.693" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16243" PostTypeId="1" CreationDate="2020-09-12T09:27:24.970" Score="1" ViewCount="195" Body="&lt;p&gt;I have an &lt;em&gt;old&lt;/em&gt; Sun Ultra workstation from early 2000s, running Solaris with an IDE called sparcworks. I'm trying to revive it (I have some numerical analysis libraries I want to retrieve and re-use), but the software license has expired. Has anyone been in a similar situation, or have any suggestions as to whom I could contact to renew the license (since Sun microsystems no longer exists). Thanks v much&lt;/p&gt;&#xA;" OwnerDisplayName="Alastair" LastEditorUserId="149" LastEditDate="2020-09-18T10:27:10.773" LastActivityDate="2020-09-18T14:04:15.723" Title="is it possible to renew a solaris license for an Sun ultra workstation" Tags="&lt;licensing&gt;&lt;solaris&gt;&lt;sun-workstation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16244" PostTypeId="2" ParentId="16243" CreationDate="2020-09-18T14:04:15.723" Score="2" Body="&lt;p&gt;This sounds more like they're interested in a license for &amp;quot;sparcworks&amp;quot; rather than Solaris itself. According to Wikipedia, this product is now known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Oracle_Developer_Studio&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oracle Developer Studio&lt;/a&gt; after going through 7 name changes. So, you may want to contact Oracle about an updated license for that, with the hopes that it is still able to actually read the project information from your old projects.&lt;/p&gt;&#xA;&lt;p&gt;SPARCWorks dates back to 1991-1992, so the modern version may not support the oldest projects any more.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-09-18T14:04:15.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16245" PostTypeId="1" AcceptedAnswerId="16247" CreationDate="2020-09-18T14:52:43.283" Score="9" ViewCount="582" Body="&lt;p&gt;I've spent a ridiculous amount of time and effort over the years just trying to figure out what exact IBM product I grew up with. At last, I've finally established for 100% certain that it was a:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;IBM PS/ValuePoint&lt;/strong&gt; or &lt;strong&gt;IBM ValuePoint&lt;/strong&gt;. These seem to refer to the same product family, with different names. (Don't ask me why...)&lt;/p&gt;&#xA;&lt;p&gt;On &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_PS/ValuePoint&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/IBM_PS/ValuePoint&lt;/a&gt; , it lists multiple &amp;quot;form factors&amp;quot; and a &lt;em&gt;ton&lt;/em&gt; of different &amp;quot;models&amp;quot;:&lt;/p&gt;&#xA;&lt;p&gt;I can at least exclude the fourth form factor, because it was most certainly not a tower. It was a &amp;quot;desktop&amp;quot;, lying down.&lt;/p&gt;&#xA;&lt;p&gt;I have made separate image searches for all of those form factors but they all seem to return the same (generic, bad) photos.&lt;/p&gt;&#xA;&lt;p&gt;I hate myself for getting rid of this machine (due to space constraints and moving several times), but there's no point blaming myself for it now. I also didn't write down any of the product/serial numbers or even model number besides the following. All I have to go by is my foggy memory. Even the photos I have of it are of no use because it's in the background and you can't make out anything useful from those. (And I don't have access to them right now.)&lt;/p&gt;&#xA;&lt;p&gt;What I do remember is that it said either &amp;quot;486&amp;quot; or &amp;quot;466&amp;quot; followed by &amp;quot;DX2&amp;quot; and probably a &amp;quot;/abc&amp;quot; (where abc was either &amp;quot;Si&amp;quot;, &amp;quot;S&amp;quot; or &amp;quot;D&amp;quot;). That last part appears to refer to the form factor, whereas the &amp;quot;466/DX2&amp;quot; (if that's what it said) is the &amp;quot;model&amp;quot;, and &amp;quot;IBM ValuePoint&amp;quot; was the &amp;quot;product family&amp;quot; or &amp;quot;series&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;So, assuming that Wikipedia is correct in this case, it's either a:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&amp;quot;Space saving desktop introductory: IBM 6381 model #: /Si (3 expansion card slots &amp;amp; 3 drive bays)&amp;quot;&lt;/li&gt;&#xA;&lt;li&gt;&amp;quot;Space saving desktop: IBM 6382 model #: /S (3 expansion card slots &amp;amp; 3 drive bays)&amp;quot;&lt;/li&gt;&#xA;&lt;li&gt;&amp;quot;Desktop: IBM 6384 model #: /D (5 expansion card slots &amp;amp; 5 drive bays)&amp;quot;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I remember it was very bulky, but that says nothing since I was a child and it was an era where computers in general were pretty big still. And this was not brand new either, and on top of it was made to a &amp;quot;budget&amp;quot; price. I can't for the life of me remember how many expansion slots or drive bays it had. Actually, I just remember that it had a floppy disk drive (perhaps that counts as one drive bay) and a larger empty one which I later put a CD-ROM drive in... But that's just two drive bays. Assuming &amp;quot;drive bays&amp;quot; means what I think it means. Maybe there was another empty slot underneath the first floppy disk drive, for a secondary floppy disk drive. So maybe that means it has 3 drive bays... If that's right, I guess we can exclude the third form factor as well. But I cannot imagine how big the desktop with FIVE drive bays would be, since mine was so large already with three drive bays (again, if it even means what I think it means).&lt;/p&gt;&#xA;&lt;p&gt;I remember that I used to think that it was a 386, and only later (maybe after a year) realized it was a 486. It had a 66 MHz CPU, which I believe it said in the BIOS screen. I don't know why they called it &amp;quot;466&amp;quot; on the front, which is awfully close to &amp;quot;486&amp;quot; and easily confused. Maybe it was a 386 after all... But it was able to run DOOM, so probably not. It had 8 MB RAM. 120 MB HDD. 14&amp;quot; CRT (of course). A 3.5&amp;quot; floppy disk drive. It made a lot of noise and seemed dangerous to touch while powered on. I'm convinced that it could have killed me if I had touched the metal parts on the back side while it was running...&lt;/p&gt;&#xA;&lt;p&gt;I miss him a lot.&lt;/p&gt;&#xA;&lt;p&gt;It's frustrating to not be able to find any reliable photos of the different models, side by side. You'd think IBM themselves would have some kind of &amp;quot;hall of fame&amp;quot; listing every product they have ever released with high-res photos and full specs, but I've never been able to find anything like that, either from IBM or from a third party. It's all a big mess of random ancient HTML and text files and magazine scans as PDF. I've reached the end of my abilities at this point for sure.&lt;/p&gt;&#xA;&lt;p&gt;These are the main hard facts I'm trying to determine:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Reliable comparison photos to determine which form factor out of the three ones mentioned above my machine was.&lt;/li&gt;&#xA;&lt;li&gt;Some kind of reliable evidence that my machine must've been a specific model, based on what I've said.&lt;/li&gt;&#xA;&lt;li&gt;What date this machine of mine was released, if possible in Sweden (but in general is OK), and maybe even the price it was sold for originally.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I used to think that &amp;quot;once I become a billionaire, I will just hire somebody to hunt down a &amp;quot;new old stock&amp;quot; copy of this machine and buy it for whatever price they want and then I'll set it up in a dedicated room which is decorated exactly like the room I grew up with and dream back to those days&amp;quot;. Sadly, now that it's becoming more and more apparent that this will never happen, I'm at least trying to collect as many facts as possible. If I can't have the actual thing, at least I want to know as much as possible about it.&lt;/p&gt;&#xA;" OwnerUserId="19393" LastEditorUserId="19393" LastEditDate="2020-09-18T16:59:40.170" LastActivityDate="2020-12-02T01:02:51.017" Title="What year was my old, long-lost IBM PC born? And which form factor/model was it?" Tags="&lt;ibm-pc&gt;&lt;ibm&gt;&lt;identify-this-computer&gt;&lt;80486&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16246" PostTypeId="2" ParentId="6979" CreationDate="2020-09-18T15:48:27.913" Score="2" Body="&lt;p&gt;The 8086 was 16-bit processor, and thus could only access 64K of RAM. IIRC, the 8086 had 20 memory address lines, so it could address up to 1M of RAM. In order to directly address this memory, they would have needed at least 1 20-bit register. I'm assuming that was too expensive or difficult to fit into their architecture, so they decided to use the segmented memory scheme.&lt;/p&gt;&#xA;&lt;p&gt;For the time, it wasn't so bad. There were 4 segment registers (Code, Stack, Data, and Extra) each addressing 64K of RAM.&lt;/p&gt;&#xA;&lt;p&gt;Unrelated to the question, but as a student I couldn't afford a 'real' compiler, but the student edition of Turbo C++ was free. The catch was you could only use the Tiny memory model (which someone mentioned previously was for .COM files and CP/M compatibility), which meant you could only address 64K for code, data, and stack. Not knowing any better, I learned many good optimization techniques to make games run in that memory space. Imagine my joy and wonder when I finally bought a compiler and discovered I could access an entire megabyte! :-)&lt;/p&gt;&#xA;" OwnerUserId="10884" LastActivityDate="2020-09-18T15:48:27.913" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16247" PostTypeId="2" ParentId="16245" CreationDate="2020-09-18T21:26:25.863" Score="5" Body="&lt;p&gt;EDIT 2020-12-01: While I stand by my reasoning, my conclusion below was incorrect. Memory is a funny thing, isn't it? Anyway, @HopelessNostalgic provided the correct answer, please upvote that one instead of this one.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;To summarize the requirements:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IBM PS/ValuePoint or IBM ValuePoint desktop (not tower)&lt;/li&gt;&#xA;&lt;li&gt;&amp;quot;486&amp;quot; or &amp;quot;466&amp;quot; followed by &amp;quot;DX2&amp;quot; and probably a &amp;quot;/abc&amp;quot; suffix&lt;/li&gt;&#xA;&lt;li&gt;66 MHz CPU&lt;/li&gt;&#xA;&lt;li&gt;8 MB RAM.&lt;/li&gt;&#xA;&lt;li&gt;120 MB HDD&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Using the list &lt;a href=&quot;https://www.pc-collection.com/gamme-psvp.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, it's likely to be an IBM PS/ValuePoint 466DX2/Si, model #6381-W30, with the standard 4MB of RAM upgraded to 8MB by adding a second 4MB SIMM. From the same website, here is a photo of the 425SX/Si which should look identical except for the model name on the front:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3XAKF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3XAKF.jpg&quot; alt=&quot;Photo of IBM PS/ValuePoint 425SX/Si&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The other possibilities are more complicated, requiring either replacing the stock hard drive with a smaller one, or adding a hard drive in addition to adding RAM.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2020-12-02T01:02:51.017" LastActivityDate="2020-12-02T01:02:51.017" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16248" PostTypeId="2" ParentId="33" CreationDate="2020-09-18T21:43:12.193" Score="0" Body="&lt;p&gt;Check this out:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?43547-How-to-make-an-head-cleaning-kit-for-5-25-quot-floppy-drive-(my-way)&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.vcfed.org/forum/showthread.php?43547-How-to-make-an-head-cleaning-kit-for-5-25-quot-floppy-drive-(my-way)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This guy tells you exactly how to make your own cleaning floppy disk drive.&lt;/p&gt;&#xA;" OwnerUserId="19398" LastActivityDate="2020-09-18T21:43:12.193" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16249" PostTypeId="2" ParentId="2697" CreationDate="2020-09-18T21:43:37.930" Score="4" Body="&lt;p&gt;You could see what you were typing, as others have said, because the print head (which was cylindrical) rose up and rotated until the right character was in place, then slammed forward to smack the (simultaneously raised) tape and make a mark on the paper, and then dropped back down. The raise-spin-slam-unspin-and-lower sequence was rather noisy -- and not just the &amp;quot;slam&amp;quot; part.&lt;/p&gt;&#xA;&lt;p&gt;On a distantly-related note, the data-transmission mechanism for directly-connected model 33s was the &amp;quot;20 mA current loop&amp;quot; -- a loop of wire that went from A to B and back. Machine A would send pulses into this loop by raising the voltage on one end &lt;strong&gt;until a current of 20mA flowed&lt;/strong&gt;, hold it there for a short time, and then release. That was a &amp;quot;1&amp;quot; bit, I believe. A similar stretch of time with no current was a &amp;quot;0&amp;quot; bit.&lt;/p&gt;&#xA;&lt;p&gt;The cool thing about the 20mA design was that it really didn't matter how long the wire was, or how resistive (up to a point!): if 20mA is flowing HERE, then 20mA must be flowing THERE, and be enough to activate a solenoid or whatever at the remote location. For long wires and higher speeds, things look less and less like switched-DC, and more and more like high-frequency analog signals, and things like inductance and capacitance make the whole plan less workable. But it sure was a cute first draft!&lt;/p&gt;&#xA;" OwnerUserId="19397" LastActivityDate="2020-09-18T21:43:37.930" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16250" PostTypeId="1" AcceptedAnswerId="16252" CreationDate="2020-09-18T21:56:50.123" Score="7" ViewCount="877" Body="&lt;p&gt;Commodore 128 / 128D was capable of displaying 80 columns through RGBi, therefore it could compete with other business machines of the time, but was this the case? Was this line of machines ever used in the business environment? If so, what software would I find near the unit in an office?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="6794" LastEditDate="2020-09-24T01:31:30.953" LastActivityDate="2020-09-24T01:31:30.953" Title="Was Commodore 128 ever used in business environment on a mass scale?" Tags="&lt;history&gt;&lt;commodore-128&gt;&lt;application-program&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16251" PostTypeId="1" AcceptedAnswerId="16257" CreationDate="2020-09-18T22:07:32.077" Score="10" ViewCount="690" Body="&lt;p&gt;When powered on 1541 reads the disk for a brief moment. Is it used to boot system from floppy? Is it possible to create a bootable commodore 64 floppy?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="6576" LastEditDate="2020-09-19T07:15:47.677" LastActivityDate="2020-09-19T13:45:36.183" Title="Is it possible to boot C64/C128 from floppy" Tags="&lt;commodore-64&gt;&lt;floppy-disk&gt;&lt;commodore&gt;&lt;boot&gt;&lt;commodore-128&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16252" PostTypeId="2" ParentId="16250" CreationDate="2020-09-18T22:23:06.753" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Commodore 128 / 128D was capable of outupting 80 columns through RGBi, therefore it could compete with other business machines of the time, but was this the case?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. The C128 was introduced in 1985 - a new business machine of that time was x86 based, most likely using a 286 of 6-10 MHz, 512 or more KiB of RAM and a 20 MiB HD. Nothing an 8 bit machine could compete with - except maybe special purpose systems (word processors) or the rather unique &lt;a href=&quot;https://en.wikipedia.org/wiki/Amstrad_PCW&quot; rel=&quot;noreferrer&quot;&gt;Amstrad PCW&lt;/a&gt; of the same year.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was this line of machines ever used in business environment?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, but only in small numbers and rather offbeat applications...&lt;/p&gt;&#xA;&lt;p&gt;...except for schools that is. Schools are business/professional use and quite a lot did use C64/128 in class rooms. But I guess that's a unique case you did not think about.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If so, what software would I find near the unit in an office?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Keep in mind, even the most basic PC-XT offers a better environment to handle multiple application and even more to handle an adequate amount of data. THe later being the most important. Even (at the time) outdated S100 systems would offer more and faster storage. Investment in an office computer is about performing tasks more efficient, not eating up time with tiny disk drives, complicated handling and slow operation.&lt;/p&gt;&#xA;&lt;p&gt;So bottom line, there are only two reasons to have a C-128 as office computer:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;No possibility to aquirre a more capable system (like maybe in eastern Europe?)&lt;/li&gt;&#xA;&lt;li&gt;A very specific application only available for the C128 (or C64)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;At least in Western Europe only the later would stand as reason to buy a sub standard computer: to have it run THE application needed for the job. So if you can name the specific case, you got one example (*1).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;And yes, much can be done with dedication. Hobbyists have shown amazing usages for C64/128. But these are dedicated people enjoying to spend time with the machine, not office clerks doing their job.&lt;/p&gt;&#xA;&lt;p&gt;Business is about over all cost, not just buying a device. So empoloyee time (aka payment) to operate counts as much - and it adds up month by month, soon dwarfing even several 1000 dollar additional investment in Hardware. And any business not earning enough to switch to an, at least somewhat, state of the art computer to optimize its daily jobs, isn't a viable business.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - For a small exhibition in Vilshofen, doing something like you may have in mind, the use case will be a solution for forest management. That package wsa only available for C64 (C128 in C64 mode) at the time ... later it got ported to PC and marketed until today.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-09-19T08:27:42.843" LastActivityDate="2020-09-19T08:27:42.843" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16253" PostTypeId="2" ParentId="16241" CreationDate="2020-09-18T22:32:30.400" Score="3" Body="&lt;p&gt;As per the other answer, in your case the yellow wire is not needed - it's a tacho signal that shows the current fan speed.&lt;/p&gt;&#xA;&lt;p&gt;It is possible to physically plug the new fan into the old connector with only the red and black wires connecting to the board. However the pinout of the fans are not compatible at the moment - the red and black wires are reversed which will not function correctly.&lt;/p&gt;&#xA;&lt;p&gt;Fortunately KK connectors can be dissassembled relatively easily. If you use a small jewelers flat head screwdriver (or some other similar object), and gently press down on the metal latches in the slots on the side of the plastic connector housing, the wires should pull out.&lt;/p&gt;&#xA;&lt;p&gt;You can then either swap the red and black wires over in the 3-way connector, or preferably plug them in to the old two-pin housing. If using the latter option, the yellow wire can simply be cut off or wrapped in insulation tape.&lt;/p&gt;&#xA;" OwnerUserId="19392" LastActivityDate="2020-09-18T22:32:30.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16254" PostTypeId="1" CreationDate="2020-09-19T00:40:10.403" Score="1" ViewCount="110" Body="&lt;p&gt;&lt;a href=&quot;https://github.com/libretro-thumbnails/libretro-thumbnails&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/libretro-thumbnails/libretro-thumbnails&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This contains cover art for &amp;quot;most&amp;quot; games. Sadly, they are very low-res, often have bad contrast/color, and are frequently ugly/wrong/non-English versions.&lt;/p&gt;&#xA;&lt;p&gt;I'm looking for high-resolution, properly scanned/adjusted covers for classic video games, with &lt;em&gt;far&lt;/em&gt; better QA. But it probably doesn't exist.&lt;/p&gt;&#xA;&lt;p&gt;The one good thing I will say about &amp;quot;libretro-thumbnails&amp;quot; is that at least it uses &amp;quot;standardized&amp;quot; names, and allows me to download them all in one go for local processing, which is very important for this to be meaningful. For example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Donkey Kong Land III (USA, Europe) (Rev 1) (SGB Enhanced).png&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In my own research, I've found quite a bunch of websites which provide cover art/scans. I'm not sure if they all work independently or not, but while they usually have higher resolution images, there is no &amp;quot;standard path&amp;quot; or anything for me to fetch them one-by-one, nor any &amp;quot;download all data&amp;quot; option that I could find. As such, since this is an unthinkable task to be performed manually, I'm so far stuck with libretro-thumbnails. Sadly, it's just too bad quality, too low-res and too many errors for me to feel that it's meaningful to create a &amp;quot;virtual game collection&amp;quot; (since my physical one is sadly long gone).&lt;/p&gt;&#xA;&lt;p&gt;As you probably understand, I want to be able to zoom in and look at the details of the covers and, of course, for them to be right ones that I remember in my visual memory and feel nostalgic attachment to. Otherwise, I might as well just have a text file with the titles of the games. Which is what I have right now.&lt;/p&gt;&#xA;&lt;p&gt;Most likely, there is just no such thing as I'm asking for. Because it would require actual effort. And people don't put in real effort unless they get paid. So it wouldn't be free...&lt;/p&gt;&#xA;" OwnerUserId="19399" LastActivityDate="2020-09-19T00:40:10.403" Title="Is there something like &quot;libretro-thumbnails&quot; but with high-resolution, good scans of classic video game box art?" Tags="&lt;emulation&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2021-02-09T08:30:39.787" ContentLicense="CC BY-SA 4.0" />
  <row Id="16255" PostTypeId="2" ParentId="16250" CreationDate="2020-09-19T02:04:00.573" Score="7" Body="&lt;p&gt;Commodore released the CBM 8032 in 1980 with an 80 column screen aimed at business users so they would already be using that (or successor models) and accompanying business software well before 1985. There would have been no particular reason for Commodore business users to swap to a C128 and non-Commodore users would be eyeing up an IBM PC or AT by then.&lt;/p&gt;&#xA;" OwnerUserId="9177" LastEditorUserId="9177" LastEditDate="2020-09-22T20:41:07.163" LastActivityDate="2020-09-22T20:41:07.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16256" PostTypeId="2" ParentId="16245" CreationDate="2020-09-19T02:57:26.850" Score="7" Body="&lt;p&gt;I've found out the right model. Turns out it wasn't a &amp;quot;ValuePoint&amp;quot; at all. It was an IBM &amp;quot;Personal Computer 330&amp;quot;, but at least I remembered the &amp;quot;466DX2&amp;quot; part right...&lt;/p&gt;&#xA;&lt;p&gt;I found this image by searching for something similar to &amp;quot;IBM slide door&amp;quot;, after suddenly remembering that slide door thing: &lt;a href=&quot;https://i.pinimg.com/originals/70/89/31/7089318994968917487bef5be4f28682.jpg&quot; rel=&quot;noreferrer&quot;&gt;https://i.pinimg.com/originals/70/89/31/7089318994968917487bef5be4f28682.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is zero doubt that this is the right one. Everything falls in place in my memory now. If this is not the right machine, I will never again trust myself in any context.&lt;/p&gt;&#xA;&lt;p&gt;Sadly, my original question about the time it was released, price, etc., still applies, as I have not found anything like that for this one either. I frankly feel as if all these companies try to erase their past completely rather than having any pride in it.&lt;/p&gt;&#xA;" OwnerUserId="19400" LastActivityDate="2020-09-19T02:57:26.850" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16257" PostTypeId="2" ParentId="16251" CreationDate="2020-09-19T07:11:16.693" Score="21" Body="&lt;p&gt;On the C64, no.&lt;/p&gt;&#xA;&lt;p&gt;On power up, the drive is resetting and the motor may spin briefly, but the drive is not actually reading the disk.&lt;/p&gt;&#xA;&lt;p&gt;And even if it were, it is an IEC slave device and cannot initiate communication with the C64/C128 bus master itself.&lt;/p&gt;&#xA;&lt;p&gt;For an auto boot concept to be implemented, it would have to be the computer's kernal directing the flow of events, on reset.&lt;/p&gt;&#xA;&lt;p&gt;While theoretically possible to implement, no such option exists on stock C64 machines.&lt;/p&gt;&#xA;&lt;p&gt;However, the C128 actually implements this concept and at reset checks the sector 0 of track 1 for a &lt;a href=&quot;https://archive.org/details/C128_Programmers_Reference_Guide_1986_Bamtam_Books/page/n455/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;special signature boot sector&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-09-19T13:45:36.183" LastActivityDate="2020-09-19T13:45:36.183" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16258" PostTypeId="2" ParentId="5587" CreationDate="2020-09-19T15:30:37.653" Score="1" Body="&lt;p&gt;I programmed NCR Century computers (the 615 series) from 1973. These were 8 bit bytes, in 16 byte words. Each byte held 1 Ascii character, or 2 digits 0-9. &amp;quot;Byte&amp;quot; was invented in 1956 (when I was 7!).&#xA;Burroughs B3500's used 8 bit bytes and Ascii, as did IBM, who used EBCDIC code.&#xA;Holding text in 6 bits, in 24 bit words was how the ICL 1900 series worked.&lt;/p&gt;&#xA;" OwnerUserId="19404" LastActivityDate="2020-09-19T15:30:37.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16259" PostTypeId="1" AcceptedAnswerId="16261" CreationDate="2020-09-19T17:05:04.770" Score="9" ViewCount="494" Body="&lt;p&gt;I'm currently working on a project with an old device that exposes at least one V.35 interface. From my understanding and reading. V.35 commonly used a huge, bulky connector that looked like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XMff9.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XMff9.jpg&quot; alt=&quot;V.35 connector&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;However, this is huge and likely wasn't a good connector for things that needed a smaller form factor. I know that many companies used all sorts of custom connectors for V.35, in fact my device uses a DB44 connector. However, I got curious. &lt;a href=&quot;https://www.sangoma.com/data-wan/rs232-rs422-and-v-35-interfaces/&quot; rel=&quot;noreferrer&quot;&gt;This website&lt;/a&gt; notes (emphasis mine):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The V.35 plug is standard.&lt;/strong&gt; It is a black plastic plug about 20mm by 70mm, often with gold-plated contacts and built-in hold down and mating screws.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I've looked at the V.35 standard available at: &lt;a href=&quot;https://www.itu.int/rec/T-REC-V.35/en&quot; rel=&quot;noreferrer&quot;&gt;https://www.itu.int/rec/T-REC-V.35/en&lt;/a&gt; and can't find a single mention of this plug. In fact, there seems to be very little defined about the cable or plug itself. Am I missing it? Was this bulky connector actually ever &amp;quot;standard&amp;quot; for V.35? If not, where did this design come from?&lt;/p&gt;&#xA;" OwnerUserId="8590" LastEditorUserId="6794" LastEditDate="2020-09-24T01:31:40.317" LastActivityDate="2020-09-24T01:31:40.317" Title="Where is/was the standard V.35 connector defined?" Tags="&lt;serial&gt;&lt;connector&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16260" PostTypeId="2" ParentId="13137" CreationDate="2020-09-19T18:45:26.627" Score="2" Body="&lt;p&gt;It was, in fact possible to load Integer BASIC into RAM without the Language Card, and without purchasing a modified variant. Back in the day there was a magazine article (Creative Computing, Byte, Nibble come to mind as likely candidates) detailing how to perform the relocation patch. From then on you were good to go.&lt;/p&gt;&#xA;&lt;p&gt;I would think the article is available in an online archive somewhere, but I have yet to find it.  And unfortunately, due to basement flooding I lost my dear retro computing magazine collection collected when I was just a pup.&lt;/p&gt;&#xA;" OwnerUserId="11535" LastActivityDate="2020-09-19T18:45:26.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16261" PostTypeId="2" ParentId="16259" CreationDate="2020-09-19T18:56:15.200" Score="15" Body="&lt;p&gt;This is the &lt;a href=&quot;https://www.oreilly.com/library/view/t1-a-survival/0596001274/apes02.html&quot; rel=&quot;noreferrer&quot;&gt;Winchester connector&lt;/a&gt;. The form factor is specified in &lt;a href=&quot;https://www.iso.org/obp/ui/#iso:std:iso-iec:2593:ed-4:v1:en&quot; rel=&quot;noreferrer&quot;&gt;ISO 2593&lt;/a&gt;. ISO standards are typically not available for free, which may be why you had trouble finding information on it. I'm not aware of any standard actually specifying it for v.35. The first link above (to the O'Reilly book) suggests it was simply a de facto industry standard.&lt;/p&gt;&#xA;&lt;p&gt;This connector was commonly used on external T1/E1 CSU/DSUs or channel banks, back when those were a thing. They provided a synchronous serial link to a router or PBX. You're right that their large size was not very practical, and hardware vendors often used a smaller connector on the other end. Some standardized on DB-25, which had enough pins to support v.35 signalling. Cisco had their own custom &lt;a href=&quot;https://www.cisco.com/c/en/us/support/docs/routers/10000-series-routers/46803-cabv35mt-fc.html&quot; rel=&quot;noreferrer&quot;&gt;DB-60&lt;/a&gt;, which was roughly the size of a standard DB-15 or DVI connector, but with more and smaller pins.&lt;/p&gt;&#xA;" OwnerUserId="19406" LastActivityDate="2020-09-19T18:56:15.200" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16262" PostTypeId="2" ParentId="16227" CreationDate="2020-09-19T20:21:28.183" Score="0" Body="&lt;p&gt;To elaborate on what user said:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Have you tried the hashes from &lt;a href=&quot;https://datomatic.no-intro.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DAT-o-MATIC&lt;/a&gt; instead? Those are what I go by.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In my experience, NES hashes are typically calculated against the ROM data with the iNES header stripped off, so the hashes don't depend on header values which vary from dumper to dumper and may have been modified to automatically trigger emulator-specific compatibility tweaks.&lt;/p&gt;&#xA;&lt;p&gt;If I remember correctly, it's the first 16 bytes you need to skip on those.&lt;/p&gt;&#xA;&lt;p&gt;It's also possible your ROMs are in a different format, though less likely.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;N64 ROMs can take four different forms, depending on how the dumper laid out the data it retrieved. (byte-swapped, word-swapped, both, or neither)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There's an open-source swiss army knife for ROMs named &lt;a href=&quot;http://ucon64.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;uCON64&lt;/a&gt; which can serve pretty much any ROM reformatting needs you might have. (For example, see &lt;code&gt;ucon64 --help --n64&lt;/code&gt; for more info on byte-swapping N64 ROMs.)&lt;/p&gt;&#xA;&lt;p&gt;(It does technically also do hash checking, but its built-in checksum verification and &amp;quot;rename to match filename defined in datfile&amp;quot; (&lt;code&gt;-rdat&lt;/code&gt;) functions are archaic, so you'd need something like &lt;a href=&quot;http://www.logiqx.com/Tools/DatUtil/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DatUtil&lt;/a&gt; (EXE and source) to convert more modern hash database formats to what it expects.)&lt;/p&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2020-09-19T20:21:28.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16263" PostTypeId="1" AcceptedAnswerId="16264" CreationDate="2020-09-20T01:47:57.417" Score="2" ViewCount="2021" Body="&lt;p&gt;An &amp;quot;Everdrive&amp;quot; is like a cartridge that looks just like a NES/SNES/N64/whatever cartridge, and is put into a real, original console. So you need the original hardware for it to work. And there is no emulation whatsoever. The cartridge actually contains a modern, large memory into which you can put ROM images, and then the NES (for example) is &amp;quot;fed&amp;quot; one of the ROMs that you pick from a menu, and from that point on, it's &lt;em&gt;identical&lt;/em&gt; to having the actual cartridge; the NES thinks it's a real cartridge and the &lt;em&gt;exact&lt;/em&gt; same electrons beam out from the TV, with zero artifacts of any kind since it's not being emulated, but rather &amp;quot;run for real&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;At least, that's my understanding.&lt;/p&gt;&#xA;&lt;p&gt;What I don't understand is how it the Everdrive handles all the special chips and stuff that they often/frequently put into the cartridges to extend them in various ways. And it's not just a small few games that did this. Many of the classics actually were extended internally with special hardware. Does it really have every single chip that any game ever used as hardware inside the Everdrive? Or does it actually emulate them somehow?&lt;/p&gt;&#xA;" OwnerUserId="19408" LastEditorUserId="15334" LastEditDate="2021-02-17T11:48:58.233" LastActivityDate="2021-02-17T11:53:28.053" Title="How does the Everdrive handle all the special chips and stuff that were put in cartridges?" Tags="&lt;hardware&gt;&lt;emulation&gt;&lt;nes&gt;&lt;snes&gt;&lt;nintendo-64&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16264" PostTypeId="2" ParentId="16263" CreationDate="2020-09-20T02:56:16.153" Score="13" Body="&lt;p&gt;The latter.&lt;/p&gt;&#xA;&lt;p&gt;In the Super Everdrive and SD2SNES cartridges, the majority of the logic of the cartridge is performed by an FPGA. In photos of the boards, these will be usually labeled 'Altera' or 'Xilinx'.&lt;/p&gt;&#xA;&lt;p&gt;By the term 'logic', I refer to receiving bus signals from the console, decoding these, and activating the appropriate ICs on the flashcart board to give the right response. It can also provide the menu, SD card I/O and other things.&lt;/p&gt;&#xA;&lt;p&gt;An &lt;a href=&quot;https://en.wikipedia.org/wiki/Field-programmable_gate_array&quot; rel=&quot;nofollow noreferrer&quot;&gt;FPGA&lt;/a&gt; is a kind of reprogrammable chip that can take on almost any role (it can be a processor, a video chip, a sound chip, glue logic, or any combination of these). The function of the FPGA is defined by the 'firmware' you load into it. If the board is set up to do so, and the FPGA has the capacity, there's no reason why the FPGA can't be used to also simulate an expansion chipset.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://sd2snes.de/blog/archives/980&quot; rel=&quot;nofollow noreferrer&quot;&gt;On June 19 2018, an update was released for the SD2SNES&lt;/a&gt; that included Super FX chip emulation into its FPGA firmware.&lt;/p&gt;&#xA;&lt;p&gt;This means that somebody has determined the range of possible inputs to the Super FX chip and the correct (or correct enough) outputs it would provide, and programmed this in a hardware description language. That description was then included in the SD2SNES FPGA firmware so that within the FPGA there is a 'virtual Super FX chip' that's performing the same calculations as a physical chip would and responding in the same way. A thorough description would include things like internal RAM, counters, buffers, timing, etc.&lt;/p&gt;&#xA;&lt;p&gt;It would be possible to have a 2nd FPGA that's solely dedicated to the task of 'being' a Super FX chip, but I believe that the single FPGA on the SD2SNES board performs all the cartridge logic and Super FX simulation all 'wired up' appropriately within itself.&lt;/p&gt;&#xA;&lt;p&gt;This means that, just like software emulation, if the author's understanding of the chip is not 100% correct, there may be slightly miscalculated polygon positions in &lt;em&gt;Star Fox&lt;/em&gt; for example, sorry. :)&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="15334" LastEditDate="2021-02-17T11:53:28.053" LastActivityDate="2021-02-17T11:53:28.053" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16265" PostTypeId="2" ParentId="16263" CreationDate="2020-09-20T03:11:45.030" Score="10" Body="&lt;p&gt;Most flashcarts (including the Everdrive) use an &lt;a href=&quot;https://en.wikipedia.org/wiki/Field-programmable_gate_array&quot; rel=&quot;noreferrer&quot;&gt;FPGA&lt;/a&gt; to emulate mappers, which is essentially a programmable ASIC -- a developer writes code in a hardware description language specifying the behavior of the chip. So yes, the mapper is emulated -- but at a lower level than if the entire NES was being emulated through software, since it can't &amp;quot;cheat&amp;quot; in ways that a software emulator can. For example, an FPGA implementing scanline interrupts on the NES must &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/MMC3#IRQ_Specifics&quot; rel=&quot;noreferrer&quot;&gt;watch the VRAM bus for specific access patterns&lt;/a&gt; just like a real mapper would, whereas a software emulator can just directly read the internal state of the PPU to achieve the same effect.&lt;/p&gt;&#xA;&lt;p&gt;Just like with a pure-software emulator, an FPGA implementation of a mapper can still have bugs, or other differences from the original hardware. However, emulating just a mapper is a &lt;em&gt;lot&lt;/em&gt; easier than emulating an entire system. Most mappers are quite simple and well-documented, so there's not really a lot that could go wrong (besides maybe an occasional minute difference in timing, which would result in symptoms like &amp;quot;the glitchy line at the top of the status bar in SMB3 is one pixel shorter&amp;quot;)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;As a side note: I'm wondering what, specifically, have you found to be inaccurate with emulators? I don't have much experience with SNES or N64 emulation, but the best NES emulators are...just about perfect at this point. The CPU and PPU have been &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/Visual_2C02&quot; rel=&quot;noreferrer&quot;&gt;decapped, scanned, and reverse-engineered&lt;/a&gt;, and nearly &lt;em&gt;every&lt;/em&gt; quirk of the hardware -- even &lt;a href=&quot;http://forums.nesdev.com/viewtopic.php?f=2&amp;amp;t=10104&quot; rel=&quot;noreferrer&quot;&gt;really obscure ones&lt;/a&gt; -- is documented and implemented in emulators. If you use a high-quality emulator, the only difference you are likely to encounter is that pixels might look sharp instead of blurry -- but you can fix that with an NTSC filter.&lt;/p&gt;&#xA;" OwnerUserId="409" LastEditorUserId="409" LastEditDate="2020-09-21T03:16:43.223" LastActivityDate="2020-09-21T03:16:43.223" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16267" PostTypeId="2" ParentId="2264" CreationDate="2020-09-20T12:01:08.077" Score="5" Body="&lt;p&gt;The original MSX specification requires the AY-3-8910 sound chip to be included as part of the hardware, and indeed many machines (like the Philips VG-8020/00, for example) were built using that chip.&lt;/p&gt;&#xA;&lt;p&gt;This chip has two 8-bit I/O ports, and the decision of whether a port is an input or an output is made by software. In the MSX, one of the ports is used for input, and the other for output. The input port is used for the joystick and the cassette. If it's configured as output by the software, it's possible to short-circuit one or several of the lines that get to the port, which can lead to permanent damage.&lt;/p&gt;&#xA;&lt;p&gt;Later machines typically use the Yamaha S3527 chip, which integrates several functions necessary in MSX computers, among them a sound generator compatible with the AY-3-8910. But in this chip, the port direction bit for the joystick/cassette port is not honoured: the port is an input regardless of the setting, therefore this problem does not exist.&lt;/p&gt;&#xA;&lt;p&gt;This is known as the &amp;quot;unsafe port directions&amp;quot; problem. The openMSX emulator emits a warning when it detects a program that does this.&lt;/p&gt;&#xA;" OwnerUserId="16432" LastEditorUserId="16432" LastEditDate="2020-09-20T12:14:20.833" LastActivityDate="2020-09-20T12:14:20.833" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16268" PostTypeId="1" CreationDate="2020-09-20T14:58:14.077" Score="1" ViewCount="266" Body="&lt;p&gt;The situation: a Compaq Presario R 3000 that turned on about a year ago, but since then only  a little red light comes on with the battery in or out; I am not sure if this model was supposed to turn on with the battery out.&lt;/p&gt;&#xA;&lt;p&gt;The question:&#xA;Is this a repairable problem, and what might be the cause?&lt;/p&gt;&#xA;&lt;p&gt;The machine was (I think) running Windows XP. When turned on it asked for a (now forgotten) password. If I can't get the machine to boot is it possible to take out the drive, put it in an enclosure, and access the files that way?&lt;/p&gt;&#xA;&lt;p&gt;I am less familiar with Windows machines. Could I put the drive in an enclosure and link it to a more recent computer (say a Dell) and run it from there, bypassing the PW?&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="19414" LastEditorUserId="15334" LastEditDate="2021-02-18T06:16:06.777" LastActivityDate="2021-02-18T06:16:06.777" Title="Compaq Presario R 3000 - turned on a year ago, no longer does" Tags="&lt;repair&gt;&lt;compaq&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16269" PostTypeId="1" AcceptedAnswerId="16270" CreationDate="2020-09-20T16:23:21.073" Score="54" ViewCount="8725" Body="&lt;p&gt;Early single-chip silicon CPUs like the Zilog Z80 or MOS 6502 did not have a multiply instruction at all. Was this because the technology did not exist at the time to implement it, was it too expensive or was there simply no need for such an instruction (like FPUs for Amiga power users, the majority of people could and did get by without one)?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="5382" LastEditDate="2020-09-23T10:55:22.140" LastActivityDate="2020-09-29T19:58:27.410" Title="Why didn't early single-chip CPUs support multiplication instructions" Tags="&lt;history&gt;&lt;cpu&gt;" AnswerCount="8" CommentCount="11" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16270" PostTypeId="2" ParentId="16269" CreationDate="2020-09-20T16:31:31.277" Score="62" Body="&lt;p&gt;Fast multiplier circuits as used today take enormous amounts of logic, far beyond what would have been cost-effective (or perhaps even possible) in the mid-70s for an inexpensive microprocessor.  Even slow multiplier circuits (as would appear later on chips like the 6809, 68000 or 8086) use a fair bit of logic and would have very considerably added to the cost, perhaps forcing a multi-chip design with all the complications that entails.&lt;/p&gt;&#xA;&lt;p&gt;The first lines of microprocessors were primarily targeted at embedded control applications where rapid multiplication is rarely needed, so that was likely a factor too.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="10184" LastEditDate="2020-09-22T14:14:54.150" LastActivityDate="2020-09-22T14:14:54.150" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16271" PostTypeId="1" CreationDate="2020-09-20T17:45:19.143" Score="7" ViewCount="195" Body="&lt;p&gt;Although the 1571 is capable of reading and writing both sides of a disk, accesses to the second side using the second head will be performed with the drive spinning in opposite direction from how it would be read if inserted upside-down and accessed with the first head (only head on the 1541).  Conceptually, however, it would seem like it should be possible to write a disk which could be read in either direction, either by:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If one only needed to use about half the capacity of the second side, one could format the disk side with a mixture of forward-written and reverse-written sector headers.  Track 18, for examine, which would normally contain 17 sectors, could have eight reverse-written headers for sectors 0-7, followed by eight forward-written headers for sectors 0-7.  If the BAM for the &amp;quot;read as flippy&amp;quot; direction marked as &amp;quot;used&amp;quot; all of the sectors that didn't exist in that direction, inserting the disk as a flippy would simply make it appear as a normal disk that appeared full despite having less than 85K of stuff on it.  Presumably, to make the other side compatible with 1541 drives, it would be formatted as a normal 170K disk, so any data on the reverse would have to be accessed using track/sector accesses.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If one needed to use more of the capacity, one could write much of the data using a custom format that would precede each sector with a forward-written header and immediately follow it with a reverse-written one.  Reading a reverse-written sector would require different decoding logic from reading a forward-written one, but I don't think the drive electronics should care about whether the data is being read forward or backward.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Would such a thing have been possible?  Has anyone ever done it, either back in the day or in the &amp;quot;retro-computing era&amp;quot;?&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2020-09-20T17:50:20.597" LastActivityDate="2020-09-20T18:38:09.833" Title="Could a double-sided Commodore disk be written to be used as a &quot;flippy&quot; on a 1541, without requiring flipping on a 1571?" Tags="&lt;commodore-64&gt;&lt;floppy-disk&gt;&lt;commodore&gt;&lt;floppy-drive&gt;&lt;commodore-128&gt;" AnswerCount="1" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16272" PostTypeId="2" ParentId="16271" CreationDate="2020-09-20T18:38:09.833" Score="3" Body="&lt;p&gt;It's not just the drive spinning in the opposite direction; tracks are also offset by about 8 track widths between front and back to prevent both mechanical (squeezing the disk too hard) and electrical (interference) problems.&lt;/p&gt;&#xA;&lt;p&gt;Foone recently talked about that on Twitter: &lt;a href=&quot;https://twitter.com/foone/status/1267014860589555712&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://twitter.com/foone/status/1267014860589555712&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So even if you could solve the &amp;quot;reading backwards&amp;quot; issue by some clever reprogramming of the drive, 8 tracks on the reverse side would remain mechanically inaccessible.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-09-20T18:38:09.833" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16273" PostTypeId="2" ParentId="343" CreationDate="2020-09-20T20:07:31.883" Score="6" Body="&lt;p&gt;Since I can't comment, I thought I'd add to mcleod_ideafix's answer and explain how pitch is handled with the existing code -- it's using 16.16 fixed point arithmetic. So, if you wanted the loop to increment one address per loop; you'd provide a value of $00010000, but if you wanted to halve the frequency, you'd provice $00008000. What's happening here is that the high word will now only increment every other loop. We then simply SWAP the high and low words to use the high portion in our address offset.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; code enters with d2 and d3 holding the period counters in 16.16 notation&#xA;; a0 and a1 point to our sample addresses and d0/d1 should be zero&#xA;GetSample:  macro&#xA;        move.b  (a0,d0.w),d4  ; get sample from buffer addressed by a0 + d0&#xA;        add.b   (a1,d1.w),d4  ; add sample from buffer addressed by a1 + d1&#xA;        eor.b   d5,d4         ; d5=-128. Fast way to add -128 to result&#xA;        move.b  d4,(a5)+      ; store result into output buffer&#xA;        swap    d0            ; restore d0/d1 to normal 16.16 format&#xA;        swap    d1            ; (high in high half, low in low half)&#xA;        add.l   d2,d0         ; calculate offset for next samples&#xA;        add.l   d3,d1         ; 16.16 addition is the same as 32.0&#xA;        swap    d0            ; put the high word back into the low half&#xA;        swap    d1            ; for each index (this is effectively a /65536)&#xA;        endm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18143" LastActivityDate="2020-09-20T20:07:31.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16274" PostTypeId="1" CreationDate="2020-09-20T21:35:38.370" Score="3" ViewCount="100" Body="&lt;p&gt;I have an old Zenith “laptop” that runs on an 80c88 processor, and apparently was manufactured around 1985. It’s quite a beast of a laptop - size and weight, rather than computing power!.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately it fails at boot with a Timer Interrupt Error.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tI1Qj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tI1Qj.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I’ve started digging for any info that will help with a fix, with not much to find on the error or generally on the computer itself. The manuals have some basic hardware descriptions, but I’ve not found any schematics or technical fault finding manuals.&#xA;If anyone has any hints or tips, your advice would be much appreciated. Also, if there are any other online forums that are better for this kind of question, appreciate the info.&lt;/p&gt;&#xA;&lt;p&gt;I’ve already posted on a retro computer forum on Facebook, with some good advice for fault finding, however the fix remains elusive, so looking to the experts on this forum for any further advice.&#xA;&lt;a href=&quot;https://www.facebook.com/groups/retrocomputers/permalink/3798720313491155/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Discussion on FB forum&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Appreciate any help getting a fix for this.&#xA;Thanks&#xA;Rob&lt;/p&gt;&#xA;" OwnerUserId="19248" LastActivityDate="2020-09-20T21:35:38.370" Title="Zenith Data Systems laptop with Timer Interrupt Error" Tags="&lt;interrupt&gt;&lt;8088&gt;&lt;zenith-supersport&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16275" PostTypeId="2" ParentId="16268" CreationDate="2020-09-20T21:36:03.023" Score="0" Body="&lt;p&gt;The machine should work even when the battery doesn't work.  Just remove the battery: it should be able to run directly from mains.&lt;/p&gt;&#xA;&lt;p&gt;You should be able to take the drive out and use it as an external drive.  You probably need admin access (possibly the user called administrator) to view the files.&lt;/p&gt;&#xA;&lt;p&gt;If you manage to get your machine started but have forgotten the password, just google for &amp;quot;Windows XP forgot password&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;As for repairing, I've got no idea whatsoever.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2020-09-20T21:36:03.023" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="16276" PostTypeId="2" ParentId="16269" CreationDate="2020-09-21T01:07:02.560" Score="56" Body="&lt;h3&gt;You don't need it&lt;/h3&gt;&#xA;&lt;p&gt;Multiplying two arbitrary bytes together has limited practical value. (If you want to multiply by a constant you can hardcode the optimal sequence of instructions to do so.)&lt;/p&gt;&#xA;&lt;p&gt;Obviously it would be nice to have but the expense isn't worth it.&lt;/p&gt;&#xA;&lt;p&gt;In an arcade game... you basically never need to multiply a thing. To draw lines &lt;strong&gt;&lt;em&gt;or circles&lt;/em&gt;&lt;/strong&gt;, you can use &lt;a href=&quot;https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm&quot; rel=&quot;noreferrer&quot;&gt;Bresenham's algorithms&lt;/a&gt;. For nonlinear control problems, values from 0-255 are of pretty limited accuracy and you probably want floating-point anyway.&lt;/p&gt;&#xA;&lt;p&gt;For financial calculations (or things like pocket calculators), you want to use BCD to avoid rounding errors. For spreadsheets or graphing programs, you need floating-point.&lt;/p&gt;&#xA;&lt;p&gt;In microcontrollers, sometimes lookup tables are actually &lt;em&gt;better&lt;/em&gt; for &amp;quot;almost multiplication&amp;quot; problems because you can put fudge factors in them to deal with responses of the physical system—motors or whatever.&lt;/p&gt;&#xA;&lt;p&gt;Special mention goes to &lt;a href=&quot;https://youtu.be/1ZT6ItqZ2xc?t=543&quot; rel=&quot;noreferrer&quot;&gt;Elite&lt;/a&gt;, which managed to do real-time 3D graphics in 1984... now &lt;em&gt;that&lt;/em&gt; could have really used multiply and divide instructions.&lt;/p&gt;&#xA;" OwnerUserId="647" LastEditorUserId="647" LastEditDate="2020-09-21T01:14:16.270" LastActivityDate="2020-09-21T01:14:16.270" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16277" PostTypeId="2" ParentId="2264" CreationDate="2020-09-21T05:18:21.220" Score="5" Body="&lt;p&gt;The PDP-10 (KA-10 model) is a retro-computer but not a retro-&lt;em&gt;micro&lt;/em&gt;-computer.  But maybe you'll allow it.&lt;/p&gt;&#xA;&lt;p&gt;A friend in college programmed a few PDP-10 assembly language routines for multi-precision integer arithmetic (aka bignums).  He ran it to compute 50000! and Harvey Mudd College's PDP-10 crashed.  And wouldn't restart.  PDP-10 service was called, they came out, and replaced a burnt-out set of machine registers.  Well, that was a coincidence.&lt;/p&gt;&#xA;&lt;p&gt;He ran it again: same thing happened.  The PDP-10 service guy was perturbed: Whatever you were doing, don't do it again!  I'm not coming back for this!&lt;/p&gt;&#xA;&lt;p&gt;The PDP-10 has 16 registers.  You can refer to them in the register field of instructions - or you can refer to them as addresses 0..15 in the addressing field of instructions:  In other words, the PDP-10 registers are &lt;em&gt;addressable&lt;/em&gt; like main memory.  And this works throughout the machine: You can jump to address 5 (say) and start executing instructions &lt;em&gt;out of the registers&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;But the registers were transistors - not &lt;em&gt;core&lt;/em&gt; memory - and thus it was much faster to fetch instructions from registers than main memory.  And if you had a tight little loop where you could fit your data &lt;em&gt;and&lt;/em&gt; your instructions in registers - it would really fly.  Which is the way my friend wrote this code.&lt;/p&gt;&#xA;&lt;p&gt;But actually, the registers apparently weren't designed for the 100% duty cycle of adding instruction fetches to data read/write.  So they could overheat, and burn up, when calculating, say, 50000!.&lt;/p&gt;&#xA;" OwnerUserId="332" LastActivityDate="2020-09-21T05:18:21.220" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16278" PostTypeId="2" ParentId="16269" CreationDate="2020-09-21T07:20:55.837" Score="11" Body="&lt;p&gt;Slow multiplication implementations made with conventional ALUs and microprograms had another problem. There are a lot of machine cycles to execute a command. So much so that it becomes noticeable with intensive interrupt work. And for 8-bit microprocessors, with the exception of the case with the Atari 2600, working with interrupts generated by the graphics subsystem logic was very relevant.&lt;/p&gt;&#xA;&lt;p&gt;A useful article about one of the first massively available single-chip 16 by 16 multipliers - &lt;a href=&quot;http://www.cpushack.com/2017/12/19/chip-of-the-day-trw-mpy-16aj-making-multiplication-manageable/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2020-09-21T07:20:55.837" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16279" PostTypeId="2" ParentId="2264" CreationDate="2020-09-21T08:39:35.413" Score="0" Body="&lt;p&gt;I'm pretty sure that floppy drive &amp;quot;music&amp;quot; (using low level head/motor instructions to create noises/frequencies and play music) isn't very good for a computer internal floppy disk.&lt;/p&gt;&#xA;&lt;p&gt;(For instance &lt;a href=&quot;https://www.youtube.com/watch?v=-NYbd5AcwPY&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=-NYbd5AcwPY&lt;/a&gt;, A500 playing a star wars theme)&lt;/p&gt;&#xA;&lt;p&gt;When you operate a floppy disk normally, you read a track, then step, then read ... and the drive wear is real, but slow.&lt;/p&gt;&#xA;&lt;p&gt;With those kinds of hacks the drive wear/heating is much faster. Let's imagine a virus waiting you to leave your computer inattended (by scanning the keyboard/mouse/joystick) to trigger a massive step/motor operation that lasts until you notice it, it could damage the drive/accelerate the normal drive wear tenfold or more. And if the drive is an internal one, the replacement is more complicated.&lt;/p&gt;&#xA;&lt;p&gt;(I've heard rumours of Atari ST overheating and catching fire because of such code but was unable to confirm it, maybe it was just a hoax spread by Amigans :))&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-09-21T08:39:35.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16280" PostTypeId="2" ParentId="16269" CreationDate="2020-09-21T09:36:47.713" Score="4" Body="&lt;p&gt;It seems to be purely arbitrary (or pragmatic) choice of the designers, one of the main factors being the size of microcode ROM or PLA. As an example, I'll take soviet &lt;a href=&quot;https://en.wikipedia.org/wiki/1801_series_CPU#K1801VM1&quot; rel=&quot;nofollow noreferrer&quot;&gt;K1801VM1 CPU&lt;/a&gt;. Its latest modification, VM1G, does support multiplication. The only change is microcode, not even the size of microcode ROM or PLA. For the reference, look at this reverse-engineered verilog of the CPUs: &lt;a href=&quot;https://github.com/1801BM1/cpu11/tree/master/vm1&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/1801BM1/cpu11/tree/master/vm1&lt;/a&gt;, specifically, cpu11/vm1/hdl/wbc/rtl/vm1_plm.v (two microcode versions in two modules).&lt;/p&gt;&#xA;&lt;p&gt;Another example, though not an early one, is &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68HC05&quot; rel=&quot;nofollow noreferrer&quot;&gt;MC68HC05&lt;/a&gt; embedded CPU. Being otherwise simplistic, it does support multiplication too.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2020-09-21T13:02:47.950" LastActivityDate="2020-09-21T13:02:47.950" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16281" PostTypeId="2" ParentId="16269" CreationDate="2020-09-21T12:44:36.030" Score="4" Body="&lt;p&gt;From the beginning of electronic computation, this was a common design decision when building a computer using minimal circuitry. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Baby&quot; rel=&quot;nofollow noreferrer&quot;&gt;Manchester Baby&lt;/a&gt;, operational in 1948, had no multiplication hardware. Later, low end minicomputers such as the PDP-8 lacked hardware multiplication. For some, like the PDP11/20, there was an add-on peripheral for it.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2020-09-21T12:44:36.030" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16282" PostTypeId="1" AcceptedAnswerId="16290" CreationDate="2020-09-21T14:35:12.063" Score="6" ViewCount="271" Body="&lt;p&gt;I have a C64 program in a &lt;code&gt;.t64&lt;/code&gt; file. If I load it into an emulator, what I see is that it loads into a cracktro, which then proceeds to uncompress (taking several seconds at 100% speed) the original program. The program proper doesn't do any further tape or disk IO, so basically if I dump the RAM from the emulator after uncompression, that 64 Kb image contains everything.&lt;/p&gt;&#xA;&lt;p&gt;I'd like to reconstruct an uncompressed loader, for the purposes of easy editing. So I'd like a way to start either from the compressed &lt;code&gt;.t64&lt;/code&gt; file or the full RAM dump, and transform it into a format (&lt;code&gt;.prg&lt;/code&gt; I guess?) that I can then take apart, change, put back together, etc, and the result should be something I can put on tape or a disk and load it on a C64.&lt;/p&gt;&#xA;&lt;p&gt;Are there any established uncompressers for C64 images? Is there any way to start with this that is easier than straight-up reverse-engineering the cracktro's uncompression routine?&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2020-09-22T18:37:55.063" Title="Reconstructing uncompressed program from compressed tape image" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;compression&gt;&lt;tape-image&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16283" PostTypeId="1" AcceptedAnswerId="16285" CreationDate="2020-09-22T04:33:54.277" Score="4" ViewCount="533" Body="&lt;p&gt;I'm using Turbo C and Turbo Assembler 2.01 to write a C wrapper around the XMS interface so I can use XMS memory in real mode, large model. I've started by writing the following:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;dos.h&amp;gt;&#xA;&#xA;void (*xms_driver_interface)();&#xA;&#xA;/*&#xA;   Query whether there is an XMS driver available.       &#xA;   Returns 1 if XMS memory is available.&#xA;*/&#xA;int xms_available()&#xA;{&#xA;   union REGS inregs, outregs;       &#xA;   inregs.x.ax = 0x4300u;       &#xA;   int86(0x2Fu, &amp;amp;inregs, &amp;amp;outregs);       &#xA;   return !!(outregs.h.al &amp;amp; 0x80u);&#xA;}&#xA;&#xA;/*&#xA;   Query whether there is an XMS driver available,&#xA;   and populate xms_driver_interface if so.       &#xA;   Returns 1 if XMS memory is available and ready.&#xA;*/&#xA;int xms_init()&#xA;{&#xA;   union REGS inregs, outregs;&#xA;   struct SREGS sregs;&#xA;   int success;&#xA;   &#xA;   inregs.x.ax = 0x4310u;       &#xA;   int86x(0x2Fu, &amp;amp;inregs, &amp;amp;outregs, &amp;amp;sregs);       &#xA;   success = outregs.h.al;       &#xA;   if (!success) return 0;&#xA;   &#xA;   xms_driver_interface = (void (*)())((((unsigned long int)sregs.es) &amp;lt;&amp;lt; 4) + ((unsigned long int)outregs.x.bx));   &#xA;&#xA;   return 1;&#xA;}&#xA;&#xA;unsigned int xms_get_version_number()&#xA;{&#xA;   _AX = 0x0000;&#xA;   &#xA;   asm call [xms_driver_interface]&#xA;   &#xA;   return _AX;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When Turbo C reaches the line &lt;code&gt;asm call [xms_driver_interface]&lt;/code&gt;, it backs up and says it's &lt;code&gt;Restarting compile using assembly&lt;/code&gt;, and switches to a two stage process where TCC compiles xms.c and TASM assembles it. TASM aborts with the error &lt;code&gt;xms.ASM(111) Forward reference needs override&lt;/code&gt;, which seems like the output of the Turbo tools aren't mutually compatible because the generated xms.ASM is referring to &lt;code&gt;_xms_driver_interface&lt;/code&gt; before declaring it, requiring two passes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Is there a way I can tell Turbo Assembler through Turbo C to use multiple passes on assembling?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I know I can pass &lt;code&gt;/m2&lt;/code&gt; to TASM directly, but when I split up my compilation process into separate phases it doesn't link correctly and it turns into a big mess.&lt;/p&gt;&#xA;&lt;p&gt;Or is there some other method I should use to invoke my calculated pointer?&lt;/p&gt;&#xA;" OwnerUserId="19066" LastActivityDate="2020-09-23T08:48:01.237" Title="How can I force Turbo Assembler to use multiple passes when invoked from Turbo C?" Tags="&lt;programming&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16284" PostTypeId="2" ParentId="16283" CreationDate="2020-09-22T05:36:52.553" Score="3" Body="&lt;p&gt;One method that works around this for now is to write a shim .exe whose role is to call &lt;code&gt;system()&lt;/code&gt; on &lt;code&gt;tasm.exe&lt;/code&gt; with the &lt;code&gt;/m2&lt;/code&gt; parameter added at the start of the list and use this as the assembler with &lt;code&gt;-Eshim.exe&lt;/code&gt;. A batch file doing the same doesn't seem to work.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastActivityDate="2020-09-22T05:36:52.553" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16285" PostTypeId="2" ParentId="16283" CreationDate="2020-09-22T05:48:04.560" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Or is there some other method I should use to invoke my calculated pointer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;See &lt;a href=&quot;https://www.pcorner.com/list/CPP/TI1299.ZIP/TI1299.ASC/&quot; rel=&quot;noreferrer&quot;&gt;Borland’s note on the subject&lt;/a&gt;: if you declare your function pointer as&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void far (*xms_driver_interface) (void);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;you can call it directly:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;(*xms_driver_interface)();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The note also shows how to construct the pointer in idiomatic Turbo C:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;xms_driver_interface = (void (far *)(void)) MK_FP(sregs.es, outregs.x.bx);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or better yet,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;_AX = 0x4310;&#xA;geninterrupt(0x2F);&#xA;xms_driver_interface = (void (far *)(void)) MK_FP(_ES,_BX);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;An other possible approach, which is recommended in general when accessing C symbols from inline assembly (see chapter 7 of the Turbo Assembler 2.0 user’s guide), is to specify the symbol size (which is what the assembler needs to know, and determines using two passes otherwise):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;asm call dword ptr xms_driver_interface&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If you want to stick with inline assembly, you should add a &lt;code&gt;#pragma inline&lt;/code&gt; at the start of your C file; this will restart &lt;code&gt;TCC&lt;/code&gt; straight away in “compile using assembly” mode.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-09-22T07:29:55.787" LastActivityDate="2020-09-22T07:29:55.787" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16286" PostTypeId="2" ParentId="12768" CreationDate="2020-09-22T10:59:40.047" Score="1" Body="&lt;p&gt;On Atari ST/TT&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL/DR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;10 or 11 sectors instead of 9&lt;/li&gt;&#xA;&lt;li&gt;81, 82 or even 83 tracks instead of 80&lt;/li&gt;&#xA;&lt;li&gt;Remove second FAT and short directory (only 5 sectors).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Detail&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;On Atari ST, which had more or less the same floppy format than PC's, it was very common to format floppies with 10 sectors instead of 9 per track. The floppies had a lot of slack for tolerance so that in practice, there was always space for a 10th sector. By reducing the lead-ins and lead-outs to the minimum it was even possible to cram an 11th sector. The issue was that these sectors were more fragile than the normal sectors as the sync pattern were at the limit of usefulness and read errors were very frequent for such floppies. I read recently 2 such floppies back, one was completely unreadable the other was read without errors on my PC.&lt;/p&gt;&#xA;&lt;p&gt;The other trick that could even be combined, was to add more tracks. Depending on the floppy, the number of 80 tracks was not the hard limit of the drive. Depending on the build, it was possible to add up to 5 tracks to the floppy. Generally 2 were quite common to work on most drives. My drive could format 3 supplemental tracks.&lt;/p&gt;&#xA;&lt;p&gt;So, the biggest floppy I ever formatted was a 2x11x83 sector floppy.&#xA;It was also possible to gain a little bit of net space on the floppy by removing the second FAT (SD floppies had always 2 FAT, it was only with HD floppies that the 1 FAT format was standardized as it was noted that the redundant FAT on the same track as the first FAT was a stupid waste of space) and reducing the number of sectors reserved for the root directory.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="7095" LastEditDate="2021-01-19T08:30:42.690" LastActivityDate="2021-01-19T08:30:42.690" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16287" PostTypeId="2" ParentId="15906" CreationDate="2020-09-22T12:34:09.077" Score="2" Body="&lt;p&gt;Winbootdir points to the directory that DOS startup files are in.  It can be different to Windir.&lt;/p&gt;&#xA;&lt;p&gt;Windir points to the directory that the user's registry is in.  On a network this can be different to where windows is installed.&lt;/p&gt;&#xA;&lt;p&gt;Winbootdir is used if there is no config.sys/autoexec.bat, to load the drivers like himem.sys, ifs$hlp.sys, and co.  It could be on a boot image sent through the network, for example.&lt;/p&gt;&#xA;&lt;p&gt;Windir as in 3.0, needs to contain win.com, but win.com is then responsible for starting windows (by running win32.vxd or something.)&lt;/p&gt;&#xA;&lt;p&gt;== Edit ==&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://reboot.pro/topic/22047-dual-boot-msdos-710-and-630/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://reboot.pro/topic/22047-dual-boot-msdos-710-and-630/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This post describes the creation of a minimal DOS setup, using the DOS from Win98se, and a slightly modified MS-DOS 6.22.&lt;/p&gt;&#xA;&lt;p&gt;Exanples of what happens when winbootdir and windir are changed.  The command setmdir changes windir after the system is booted, we are not using it here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://reboot.pro/topic/18130-ms-dos-7-help-file/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://reboot.pro/topic/18130-ms-dos-7-help-file/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This topic contains the working comments for creating a qbasic help file for DOS 5 to 7 (ie as a replacement for what's on the CDROM).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.betaarchive.com/forum/viewtopic.php?f=72&amp;amp;t=34798&amp;amp;p=401645#p401645&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.betaarchive.com/forum/viewtopic.php?f=72&amp;amp;t=34798&amp;amp;p=401645#p401645&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is where we are documenting running multiple Windows 9x versions as options in the config.sys.  So far we have overcome most of the problems in launching Win95 from DOS98SE.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.betaarchive.com/forum/viewtopic.php?f=60&amp;amp;t=41489&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.betaarchive.com/forum/viewtopic.php?f=60&amp;amp;t=41489&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is progress on running Windows 95 and ME from DOS98SE.  It has a link to the DOS files used in the experiments.&lt;/p&gt;&#xA;&lt;p&gt;All of these experiments are based on VPC sessions that do what is described.  For example, after Offer posted the construction of c:\MSDOS7, i ran the experiment with several NT5x over the top of different Win98 and ME installs, in English and in German.  It's where I got the idea of using c:\msdos7 from.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastEditorUserId="19433" LastEditDate="2020-09-26T10:20:16.320" LastActivityDate="2020-09-26T10:20:16.320" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16288" PostTypeId="2" ParentId="15479" CreationDate="2020-09-22T12:42:13.287" Score="-2" Body="&lt;p&gt;You can decompress IO.SYS by downloading the decompressor io8decomp at &lt;a href=&quot;https://rloewelectronics.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://rloewelectronics.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It gives you something not decompressed,&lt;/p&gt;&#xA;&lt;p&gt;Windows ME also has himem.sys buried in the file.  It's pretty early, but you can search for the device name in it.  But the version from the boot cd has a different header.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2020-09-22T12:42:13.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16289" PostTypeId="2" ParentId="12946" CreationDate="2020-09-22T13:24:38.110" Score="-2" Body="&lt;p&gt;This is actually quite possible, but getting Windows to run in enhanced mode is something tricky.  I've been planning to experiment with PC-DOS 7.1, but the interesting thing is will windows 98 support dualboot on a fat32 partition, and can pc-dos 7.1 run windows.&lt;/p&gt;&#xA;&lt;p&gt;From people who run pcdos71, i'm told that build 1.19 is the go, with the 1.32 utilities, overlaid on a regular pcdos stuff.&lt;/p&gt;&#xA;&lt;p&gt;MS-DOS and Windows 3.1 need patches to run 3.1.&lt;/p&gt;&#xA;&lt;p&gt;EDIT:  Windows 98SE does not do multiboot in fat32.  So you have to go to the idea of running Windows 3.1 in standard mode in Dos98SE.&lt;/p&gt;&#xA;&lt;p&gt;You should point winbootdir and windir in MSDOS.SYS to '.', and create autoexec.bat for this.  The DOS dirvers in Win98 work with Win31, except that IFSHLP.SYS.  Load the win98 version, and don't run 3.1 in 32bfa.  (32-bit file access).&lt;/p&gt;&#xA;&lt;p&gt;If you don't patch USER.EXE in 3,1, you should change to the root directory, or have batch files that change to the directory before running, eg&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; cd win31&#xA; win&#xA; cd ..&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cd win98&#xA;win&#xA;cd..&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You can run both versions in the same session.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastEditorUserId="19433" LastEditDate="2020-12-07T12:46:08.920" LastActivityDate="2020-12-07T12:46:08.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16290" PostTypeId="2" ParentId="16282" CreationDate="2020-09-22T14:04:14.647" Score="3" Body="&lt;p&gt;With Vice, you can wait until the uncompressed, actual, application code has started execution, then activate the built-in ML Monitor. You will thus pause execution at wherever the Program Counter happens to be, most likely waiting for the first user input to the application.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Dump the stack to see the history of any subroutines that have been invoked. Going back up the stack should lead you to a code location very near the actual start of the code.&lt;/li&gt;&#xA;&lt;li&gt;Examine memory above and below this location, using the disassembler. Look for blocks of continuous discernible assembly code. You need to find the starting address that was jumped to after decompression, and there will most likely be a &amp;quot;gap&amp;quot; in the code before this address. This becomes the likely start address for the actual code.&lt;/li&gt;&#xA;&lt;li&gt;Examine memory in the opposite direction again using the disassembler. You should see discernible assembly code. There might be small gaps, but any large gap likely signifies the end of the code &lt;em&gt;OR, MAYBE, it's a SID score, or a bunch of graphical tile data, depending on what this app actually IS.&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;Prepend a two-byte header before the start of the code with your loading address, then save the whole range including header to a PRG file. This should be loadable in the emulator or on a real C64.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If you want to make multiple attempts at this without starting over, use the Vice snapshot feature to store the whole of the memory state. You can thus reload it and try again if you identified the wrong start/end of the code before. It would be highly unlikely, though possible, that there are many chunks of disjointed code and/or pre-initialized data. Such a memory map (if it ever existed) for the program should have been cleaned up before applying the compression, in order to simplify the decompression process.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-09-22T18:37:55.063" LastActivityDate="2020-09-22T18:37:55.063" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16291" PostTypeId="2" ParentId="2264" CreationDate="2020-09-22T17:04:24.673" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1620&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 1620&lt;/a&gt; is a retro-computer but not a retro-micro-computer. But maybe you'll allow it.&lt;/p&gt;&#xA;&lt;p&gt;You could get it with a hard disk drive - one of those washing machine-sized cabinets that had replaceable multi-platter disks. &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_IBM_magnetic_disk_drives#IBM_1311&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's a picture in a wikipedia article&lt;/a&gt; - note that the disk pack on top weighed 10 pounds and rotated at 1500rpm, and had 14&amp;quot; metal platters.  So you can imagine how big the multi-platter read head was - and how fast it had to move (light as it was), and also how much mass and momentum was involved in that spinning disk at the top of the cabinet.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, there was a thick multi-wire cable attaching the drive to the main computer cabinet.  And in the installation I was familiar with - at the local junior college (Pierce Jr College) in Los Angeles - the drive wasn't &amp;quot;embedded&amp;quot; into a raised floor - it was just sitting on it's 4 little legs and the cable went under one of those plastic tunnels.&lt;/p&gt;&#xA;&lt;p&gt;So the guys hanging around the computer lab were friendly to high schoolers and would show them stuff if they were curious.  Like me.  And one day they showed me a single-card program that sent the drive head back and forth from cylinder to cylinder in a narrowing sequence, e.g., &lt;code&gt;0 - 99 - 0 - 99 - 0 - 99 - 1 - 98 - 1 - 98 - 1 - 98 - 2 - 97 - ...&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;After a bit of this the drive would start to vibrate a bit, then start vibrating like an unbalanced washing machine, then it would &lt;em&gt;really&lt;/em&gt; start to go ... you'd found the resonant frequency where the heads bashing back and forth would interact with the entire device.&lt;/p&gt;&#xA;&lt;p&gt;And then you'd flip one of the console switches on the 1620 and the program would just start seeking between the two last tracks - &lt;code&gt;... - 32 - 68 - 32 - 68 - 32 - 68 - ...&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;And the drive would start walking across the floor, dragging its cable behind it.&lt;/p&gt;&#xA;&lt;p&gt;Now, I didn't see it, but they told me that one time they let it go so far that it pulled its own cable out of the plug.  Stopping it, of course.&lt;/p&gt;&#xA;&lt;p&gt;Does that count as &amp;quot;damaging&amp;quot; the machine?&lt;/p&gt;&#xA;" OwnerUserId="332" LastEditorUserId="332" LastEditDate="2020-09-22T17:10:10.780" LastActivityDate="2020-09-22T17:10:10.780" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16292" PostTypeId="2" ParentId="15769" CreationDate="2020-09-22T17:06:15.603" Score="6" Body="&lt;p&gt;I was VAX Architect for six years in the late '80s, and at least during my tenure, Raytheon was the only company licensed to design VAX-compatible processors, for producing MIL-SPEC machines. They did design at least one (a high-performance processor with a very interesting microarchitecture that translated VAX instructions on the fly into a RISC-like internal form), and it could conceivably have used those opcodes, but I don't remember its having done so, and it seems unlikely since the purpose was to create a MIL-SPEC machine that could run standard software. Furthermore, I don't know that their processor design ever shipped. Raytheon and Norden did sell Digital's processor designs in hardened versions under the MILVAX name. The ICF Systime 8750 mentioned in Wikipedia (and which I'd never heard of before today) similarly appears to be a repackaged Digital design. It's possible that some customer might have used the FC opcodes to do software emulation of non-existent hardware instructions, but that would have few advantages over just calling the emulator. So the short answer is, probably no one ever used the FC opcodes.&lt;/p&gt;&#xA;" OwnerUserId="19435" LastActivityDate="2020-09-22T17:06:15.603" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16293" PostTypeId="2" ParentId="16269" CreationDate="2020-09-23T00:40:55.237" Score="0" Body="&lt;p&gt;cost tradeoff vs time to compute faster&lt;/p&gt;&#xA;&lt;p&gt;that is why the 8086 was that way and they had the 8087 if you wanted faster math&lt;/p&gt;&#xA;&lt;p&gt;z80 was just a newer slightly better version of the 8080&lt;/p&gt;&#xA;" OwnerUserId="19436" LastActivityDate="2020-09-23T00:40:55.237" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16294" PostTypeId="2" ParentId="16269" CreationDate="2020-09-23T01:55:55.843" Score="3" Body="&lt;p&gt;Prior to microprogrammed/PLA-programmed processors, it took an enormous amount of control logic to manage a simple multiply (and forget about even trying floating point).  Especially with early single-chip designs there simply was not enough chip space for the control logic.&lt;/p&gt;&#xA;&lt;p&gt;With the invention of microprogrammed processors it became more practical to include multiply/divide and even floating point operations.&lt;/p&gt;&#xA;&lt;p&gt;Only when graphics, etc, created a demand (and chip density improved) did hardware-ifying the operations become economically attractive.&lt;/p&gt;&#xA;&lt;p&gt;(I worked on a microprogrammed processor for RCA in the early 70s.  We were basically duplicating the 360 instruction set on an early LSI-based system, and it was a bear working out the microprogram logic.)&lt;/p&gt;&#xA;" OwnerUserId="3483" LastActivityDate="2020-09-23T01:55:55.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16295" PostTypeId="1" AcceptedAnswerId="16298" CreationDate="2020-09-23T06:48:43.060" Score="2" ViewCount="290" Body="&lt;p&gt;Now I understand that Microsoft has a competing technology in the web server field with the Internet Information Services, so not every last web server is done with Linux, but how did Linux web servers become so ingrained in the web server sphere? Does the fact that it is an open source solution have anything to do with it?&lt;/p&gt;&#xA;" OwnerUserId="12298" LastActivityDate="2020-09-23T11:52:00.493" Title="How did Linux servers become the defacto web server?" Tags="&lt;internet&gt;&lt;linux&gt;" AnswerCount="3" CommentCount="6" ClosedDate="2020-09-23T09:49:02.027" ContentLicense="CC BY-SA 4.0" />
  <row Id="16296" PostTypeId="2" ParentId="16295" CreationDate="2020-09-23T07:09:07.067" Score="9" Body="&lt;p&gt;Cheaper (free) licenses. Besides, they didn't need a full-blown graphic OS under them, so they could run on cheaper machines (less RAM and even without a graphics card).&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2020-09-23T07:09:07.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16297" PostTypeId="1" AcceptedAnswerId="16299" CreationDate="2020-09-23T07:33:50.330" Score="2" ViewCount="212" Body="&lt;p&gt;Following on from &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16283/how-can-i-force-turbo-assembler-to-use-multiple-passes-when-invoked-from-turbo-c&quot;&gt;my last question&lt;/a&gt;, I cannot get &lt;code&gt;Move Extended Memory Block (Function 0Bh)&lt;/code&gt; working in Turbo C 2.01.&lt;/p&gt;&#xA;&lt;p&gt;The following &lt;code&gt;main.c&lt;/code&gt; contains only the minimum functions: get the XMS driver pointer, call the Move function. &lt;code&gt;xms_move_xmb_internal()&lt;/code&gt; is as bare as I can get it, no variables except the parameters. I couldn't get it working with the XMB handles, so I decided to make sure a conventional-&amp;gt;conventional copy worked first.&lt;/p&gt;&#xA;&lt;p&gt;Compile with &lt;code&gt;tcc -ml -d -G main.c&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In Dosbox 0.74-2, the call to the XMS driver will either hang indefinitely or crash Dosbox instantly. My other functions (query, freemem, allocation, deallocation, locking and unlocking) work, but not Move. Ethan Brodsky's &lt;a href=&quot;http://homepages.cae.wisc.edu/%7Ebrodskye/other/code.html#sb16snd&quot; rel=&quot;nofollow noreferrer&quot;&gt;SB16SND&lt;/a&gt; implementation of an XMS wrapper pushes and pops DS around calling the XMS driver pointer but that doesn't have any effect for me if I add it.&lt;/p&gt;&#xA;&lt;p&gt;I'm aware that in the Large model, &lt;code&gt;far&lt;/code&gt; is redundant but I added it to make sure I wasn't overlooking it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;main.c&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &amp;lt;stdlib.h&amp;gt;&#xA;#include &amp;lt;string.h&amp;gt;&#xA;#include &amp;lt;mem.h&amp;gt;&#xA;#include &amp;lt;dos.h&amp;gt;&#xA;&#xA;typedef union&#xA;{&#xA;   struct&#xA;   {&#xA;      unsigned int o;&#xA;      unsigned int s;&#xA;   } seg_off;&#xA;   void (far *function_ptr)();&#xA;   void far *ptr;&#xA;   unsigned long int offset;&#xA;} seg_off_ptr;&#xA;&#xA;seg_off_ptr xms_driver;&#xA;&#xA;int xms_init()&#xA;{&#xA;   union REGS inregs, outregs;&#xA;   struct SREGS sregs;&#xA;   inregs.x.ax = 0x4310u;   &#xA;   int86x(0x2Fu, &amp;amp;inregs, &amp;amp;outregs, &amp;amp;sregs);   &#xA;   if (!outregs.h.al) return 0;   &#xA;   xms_driver.seg_off.s = sregs.es;&#xA;   xms_driver.seg_off.o = outregs.x.bx;   &#xA;   return 1;&#xA;}&#xA;&#xA;unsigned int xms_version_implemented()&#xA;{&#xA;   _AX = 0x0000;   &#xA;   (*xms_driver.function_ptr)();   &#xA;   return _AX;&#xA;}&#xA;&#xA;void xms_move_xmb_internal(unsigned int ds, unsigned int si)&#xA;{      &#xA;   _AX = 0x0B00;&#xA;   _DS = ds;&#xA;   _SI = si;   &#xA;   (*xms_driver.function_ptr)();&#xA;}&#xA;&#xA;typedef struct _moveparams&#xA;{&#xA;   unsigned long int length;&#xA;   unsigned int      src_handle;&#xA;   unsigned long int src;&#xA;   unsigned int      dst_handle;&#xA;   unsigned long int dst;&#xA;} moveparams;&#xA;&#xA;void xms_move_xmb&#xA;(&#xA;   unsigned long int length,&#xA;   unsigned int      src_handle,&#xA;   unsigned long int src,&#xA;   unsigned int      dst_handle,&#xA;   unsigned long int dst&#xA;)&#xA;{      &#xA;   moveparams params;&#xA;   const void far *params_ptr = &amp;amp;params;&#xA;   &#xA;   params.length     = length;&#xA;   params.src_handle = src_handle;&#xA;   params.src        = src;&#xA;   params.dst_handle = dst_handle;&#xA;   params.dst        = dst;&#xA;   &#xA;   xms_move_xmb_internal(FP_SEG(params_ptr), FP_OFF(params_ptr));&#xA;}&#xA;&#xA;int main(int argc, char *argv[])&#xA;{&#xA;   int i;&#xA;   char far *test;&#xA;   &#xA;   xms_init(); &#xA;   printf(&amp;quot;Version %X\r\n&amp;quot;, xms_version_implemented());&#xA;   &#xA;   test = malloc(513);  &#xA;    test[0] = 0;&#xA;    &#xA;    /* Pattern, 64 XXX then 64 ---. */&#xA;    for (i = 0; i &amp;lt; (512/4); i++)&#xA;    {   &#xA;       if (i &amp;lt; 64)&#xA;       {&#xA;        strcat(test, &amp;quot;XXX &amp;quot;);&#xA;      }&#xA;      else&#xA;      {&#xA;         strcat(test, &amp;quot;--- &amp;quot;);&#xA;      }&#xA;   }&#xA;   &#xA;   printf(&amp;quot;%s\r\n\r\n&amp;quot;, test);&#xA;            &#xA;   if (1) xms_move_xmb(64ul, 0, (unsigned long)test, 0, (unsigned long)(test + 4*100));&#xA;   /* Should be equivalent to: */&#xA;   if (0) memcpy(test + 4*100, test, 64);&#xA;   &#xA;   printf(&amp;quot;%s\r\n\r\n&amp;quot;, test);&#xA;&#xA;    printf(&amp;quot;Did not crash.\r\n&amp;quot;);&#xA;    &#xA;    free(test);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The correct output should copy a block of the XXXs into the middle of the ---s.&lt;/p&gt;&#xA;&lt;p&gt;It's possible that I'm passing the pointer &lt;code&gt;test&lt;/code&gt; into the driver function incorrectly, but I've tried printing the fields of the struct, and printing  (and inserting) each individual byte of the params in turn and everything is landing in the correct place.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="11446" LastEditDate="2020-09-24T05:26:30.517" LastActivityDate="2020-09-24T05:26:30.517" Title="Why isn't this invocation of XMS function Move EMB 0Bh in Turbo C correct?" Tags="&lt;ms-dos&gt;&lt;programming&gt;&lt;memory&gt;&lt;c&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16298" PostTypeId="2" ParentId="16295" CreationDate="2020-09-23T08:28:08.833" Score="8" Body="&lt;p&gt;Unless someone can come up with some actual market research from the 1990s (&amp;quot;we've asked n companies which web servers they chose, and why&amp;quot;), this will be opinion based, but:&lt;/p&gt;&#xA;&lt;p&gt;I'd venture that (a) Unices had a head start as internet servers, and that (b) Linux was the cheapest good-enough platform.&lt;/p&gt;&#xA;&lt;p&gt;Regarding (a), there were many internet services (mail, Usenet news, FTP, Gopher) that predated the web. Their servers mostly ran on Unix or VMS machines, and VMS' star was fading by the early 90s. For what it's worth, the first webserver, CERN httpd, first ran under NeXTStep, a BSD-derived Unix(oid Operating System).&lt;/p&gt;&#xA;&lt;p&gt;Regarding (b), keep in mind that in the 90s, there were several commercial Unices: SunOS / Solaris, IRIX, HP-UX, AIX, and I'm probably forgetting several; and there were several BSD variants. But Linux ran on commodity hardware and was free.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-09-23T11:52:00.493" LastActivityDate="2020-09-23T11:52:00.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16299" PostTypeId="2" ParentId="16297" CreationDate="2020-09-23T08:36:22.603" Score="7" Body="&lt;pre&gt;&lt;code&gt;void xms_move_xmb_internal(unsigned int ds, unsigned int si)&#xA;{      &#xA;   _AX = 0x0B00;&#xA;   _DS = ds;&#xA;   _SI = si;   &#xA;   (*xms_driver.function_ptr)();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;looks like a bad idea. The compiler assumes DS to point to the global data segment of your program. In the large memory model, the stack segment can differ (I don't remember the default) from the data segment. You call the function like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void xms_move_xmb( /*...*/ )&#xA;{      &#xA;   moveparams params;&#xA;   const void far *params_ptr = &amp;amp;params;&#xA;&#xA;   /* ... */   &#xA;   &#xA;   xms_move_xmb_internal(FP_SEG(params_ptr), FP_OFF(params_ptr));&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;params&lt;/code&gt; is a local variable of &lt;code&gt;xms_move_xmb&lt;/code&gt;, and thus the segment part of &lt;code&gt;params_ptr&lt;/code&gt; indeed points to the stack segment. Setting &lt;code&gt;DS&lt;/code&gt; to the stack segment makes the global variable &lt;code&gt;xms_driver&lt;/code&gt; inaccessible and thus your call will jump to an unpredictable position and crash the machine.&lt;/p&gt;&#xA;&lt;p&gt;You could most likely work around the problem by making &lt;code&gt;params&lt;/code&gt; static in &lt;code&gt;xms_move_xmb&lt;/code&gt;, so it resides in the data segment. You can omit setting &lt;code&gt;DS&lt;/code&gt; in that case.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2020-09-23T08:36:22.603" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16300" PostTypeId="2" ParentId="16295" CreationDate="2020-09-23T08:43:40.873" Score="4" Body="&lt;p&gt;As a tongue-in-cheek answer, I'd look at&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;&amp;gt;uptime&lt;/code&gt;&lt;br&gt;&#xA;&lt;code&gt;09:40am  up 97 days 23:23,  32 users..., &lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;BTW this was post a recent upgrade. Before that it'd been running for a couple of years.&lt;/p&gt;&#xA;" OwnerUserId="6712" LastActivityDate="2020-09-23T08:43:40.873" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16301" PostTypeId="2" ParentId="16283" CreationDate="2020-09-23T08:48:01.237" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Or is there some other method I should use to invoke my calculated pointer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. Specify that it is a 32-bit (far) pointer:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;asm call DWORD PTR [xms_driver_interface]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2020-09-23T08:48:01.237" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16302" PostTypeId="2" ParentId="16232" CreationDate="2020-09-23T08:50:35.590" Score="0" Body="&lt;p&gt;If you are satisfied with 64×56 pixel, use my &lt;a href=&quot;https://cc65.github.io/doc/nes.html#ss5.1&quot; rel=&quot;nofollow noreferrer&quot;&gt;NES driver&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Remember subLOGIC's &lt;a href=&quot;https://www.youtube.com/watch?v=xmkYVSbodw4&quot; rel=&quot;nofollow noreferrer&quot;&gt;Flight Simulator 1 for TRS-80&lt;/a&gt; was also lo-res!&lt;/p&gt;&#xA;" OwnerUserId="7534" LastActivityDate="2020-09-23T08:50:35.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16303" PostTypeId="2" ParentId="2264" CreationDate="2020-09-23T09:43:49.290" Score="0" Body="&lt;p&gt;This is outside of boundaries but:&#xA;one of the storage manufacturers (EMC ?) had special firmware in their drives which allowed the storage controller to replace the same firmware (ie easy upgrades/fixes of faulty firmware.)&lt;/p&gt;&#xA;&lt;p&gt;Which basically allows an intruder to brick all the drives at the same time...&lt;/p&gt;&#xA;" OwnerUserId="15497" LastActivityDate="2020-09-23T09:43:49.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16304" PostTypeId="2" ParentId="12427" CreationDate="2020-09-23T09:51:45.337" Score="3" Body="&lt;p&gt;Paul Houle wrote a version of doskey with autocompletion.  I currently have it loaded under IBMDOS 5.00, but it works under other DOS versions as well.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.paulhoule.com/doskey/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.paulhoule.com/doskey/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2020-09-23T09:51:45.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16305" PostTypeId="2" ParentId="8208" CreationDate="2020-09-23T10:01:01.333" Score="-1" Body="&lt;p&gt;cdd and cdd! were quite common DOS utilities.  eg search for cddbang or dos cdd&lt;/p&gt;&#xA;&lt;p&gt;cd /d does not work under straight MS/PC-DOS.&lt;/p&gt;&#xA;&lt;p&gt;Another frightfully useful utility is mcd, make and change directory.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;c:&amp;gt;mcd c:\windows\system&#xA;c:\windows\system&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Would make the directory and change to it in a single line.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2020-09-23T10:01:01.333" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16306" PostTypeId="1" AcceptedAnswerId="16308" CreationDate="2020-09-23T12:13:42.013" Score="2" ViewCount="137" Body="&lt;p&gt;During the execution of an &lt;code&gt;IN&lt;/code&gt; or &lt;code&gt;OUT&lt;/code&gt; instruction (so after the opcode and its single-byte argument have been fetched from memory), how does the Intel 8080 react to its &lt;code&gt;READY&lt;/code&gt; pin going down? Is it meant to be possible for IO peripherals to be not immediately ready? If they are not ready, does the CPU keep the port number on the address bus?&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2020-09-23T18:31:56.167" Title="READY / WAIT when reading from / writing to IO ports" Tags="&lt;8080&gt;&lt;io&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16308" PostTypeId="2" ParentId="16306" CreationDate="2020-09-23T14:47:13.537" Score="4" Body="&lt;p&gt;(You may as well want to take a look at the manual, like p.2-5 of the September 1975 Manual)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;During the execution of an IN or OUT instruction [..], how does the Intel 8080 react to its READY pin going down?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Operation is the same for all M cycles, independent of memory or I/O, as seen here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RYQhq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RYQhq.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Taken from p.2-8 of the &lt;em&gt;8080 Micro Computer Systems User's Manual&lt;/em&gt; of September 1975, 98-153B)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;During Phi2 of T1 of any machine cycle the 8080 will output an address on A0..15 and status information denoting the type of access on D0..7 (usually decoded into signals by a 8212 latch).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;During Phi2 of T2 &lt;code&gt;READY&lt;/code&gt; is sampled (*1,*2).&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If active (Low)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;WAIT&lt;/code&gt; is asserted (pulled LOW)&lt;/li&gt;&#xA;&lt;li&gt;waitstates (Tw) are inserted. Waitstates are essentially repeated T2. Address signals are kept stable.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Ready&lt;/code&gt; is sampled again on Phi2 during each waitstate.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If inactive operation continues with T3 of whatever machine cycle is executed.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is it meant to be possible for IO peripherals to be not immediately ready?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. That's what these signals are meant for, to stretch access until a device is ready to deliver. This can be of &lt;em&gt;any&lt;/em&gt; time, microseconds or days.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If they are not ready, does the CPU keep the port number on the address bus?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. As long as &lt;code&gt;Ready&lt;/code&gt; is asserted, the address will be stable. Still, to decide between a memory address and an I/O address the status information needs to be decoded first (during T1) to decide if it's about I/O. D4 = high is signalling an OUT instruction, while D6 = high does so for IN. Using an 8228 does simplify this by handling all the related logic.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Together with &lt;code&gt;HOLD&lt;/code&gt; and `HALT for DMA and stopping.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Due the clock structure this happens around 2/3rd of a clock cycle.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-09-23T18:31:56.167" LastActivityDate="2020-09-23T18:31:56.167" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16309" PostTypeId="1" AcceptedAnswerId="16313" CreationDate="2020-09-23T15:09:29.147" Score="4" ViewCount="735" Body="&lt;p&gt;As a follow-up to &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/16282/115&quot;&gt;this question&lt;/a&gt;, I now have:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A memory dump of the unpacked application&lt;/li&gt;&#xA;&lt;li&gt;The start address of the application&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I can verify that the dump is correct by starting a new instance of Vice, loading back the dump, and then jumping to the start address, and the program works as expected.&lt;/p&gt;&#xA;&lt;p&gt;Normally, at this point I would be done: Vice already slaps a two-byte starting address at the start of each memory dump, so I could just put the resulting dump as-is into a tape or disk image using a tool like &lt;code&gt;c1541&lt;/code&gt;, and attach that to Vice.&lt;/p&gt;&#xA;&lt;p&gt;However, parts of the dump correspond to address regions that are by default banked to ROM. This is not a problem when saving/loading from Vice directly, since I can just use the &lt;code&gt;bank ram&lt;/code&gt; command to read from / write to RAM regardless of the current state of banking. And of course when jumping to the application's start address, the application initialization code will take care of setting up the right memory layout. But how do I load the data into these regions?&lt;/p&gt;&#xA;&lt;p&gt;I guess the obvious way would be to write a two-stage loader: load a tiny first program to set the value of 0x01 to expose all RAM, then load the rest. However, this sounds like something that should definitely exist. Moreover, the program + initial data is not all in a contiguous blob, so I should be able to speed up loading by skipping the runtime data parts that will be initalized during normal operation anyway. I would like to avoid this solution not only because I'm too lazy to write this program, but also because I'd like the result to be a single &lt;code&gt;.prg&lt;/code&gt; file.&lt;/p&gt;&#xA;&lt;p&gt;So my question is, what is the easiest way of translating a C64 memory dump, or, potentially, a set of non-overlapping memory dumps each with its own start address, into a single loadable file, if parts of the memory dump correspond to addresses that are mapped to ROM in the C64's initial state?&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2020-09-23T19:25:35.180" Title="Transforming a memory dump into something loadable" Tags="&lt;commodore-64&gt;&lt;memory-layout&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16310" PostTypeId="2" ParentId="16309" CreationDate="2020-09-23T15:45:08.537" Score="6" Body="&lt;p&gt;Maybe I'm confused by your question, but have you tried LOAD'ing the PRG file?&lt;/p&gt;&#xA;&lt;p&gt;Loading memory is done with write operations. Write operations ignore ROM banking and always go to the underlying RAM location. Yes, your program initialization needs to bank-in the RAM it will be using, but the loading should work regardless of the initial banking setup.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-09-23T15:45:08.537" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16311" PostTypeId="2" ParentId="2264" CreationDate="2020-09-23T15:45:36.807" Score="4" Body="&lt;p&gt;I don't suppose an IBM System 370/145 counts as a microprocessor, but let me tell you the story anyway as best I remember it. In 1975 or so, Boston University was running a home-grown operating system on its System 370. It had the typical mainframe peripherals of the day, including disks, tape drives, card reader, card punch, and a line printer, all in a raised-floor machine room. The line printer could be commanded (using privileged I/O instructions) to open its cover so the operator could load more fan-fold paper or change the print ribbon. My housemates and I were students, and one of us (Lew Nathan) made a bet with one of the OS developers that he could write a user-mode program to get the line printer to open. The program he wrote was a loop that repeatedly printed a full line of underscore characters followed by a carriage return WITHOUT a line feed. So a full line across was printed endlessly at the same spot on the paper. Lew's intention was to cut the paper in half, which the printer would sense, and would respond to by sounding an alarm and opening so it could be reloaded. What actually happened was that he also shredded the ribbon, so when the printer opened a cloud of (electrically conductive?) ink-coated ribbon shreds were wafted into the air and settled everywhere, including being drawn into the processor by the cooling fans. That shut down the computing center until everything could be cleaned. So that's a user-mode program that damaged the processor (admittedly by means of a peripheral). Sorry I can't do better.&lt;/p&gt;&#xA;" OwnerUserId="19435" LastActivityDate="2020-09-23T15:45:36.807" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16312" PostTypeId="2" ParentId="8208" CreationDate="2020-09-23T16:24:24.570" Score="0" Body="&lt;p&gt;&lt;em&gt;Disclaimer: I'm aware that this does &lt;strong&gt;not&lt;/strong&gt; answer the question about a &lt;strong&gt;tool of that name&lt;/strong&gt;. But chances are that no such tool was used...&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;EDIT: I overlooked the comment that confirmed the tool, sorry. Anyway, this might help when no tool is available.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am using &amp;quot;doskey&amp;quot; for this since at least since &lt;code&gt;cd&lt;/code&gt; knows the option &lt;code&gt;/d&lt;/code&gt;, and its macro:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cd=cd /d $*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This way there is no need to type &lt;code&gt;cdd&lt;/code&gt;, just &lt;code&gt;cd&lt;/code&gt;. You can change the name of the macro to your liking, of course.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Final note: You could add an automatically run batch if you put its name in the registry at &lt;code&gt;\HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun&lt;/code&gt;. Thats nice for some general stuff, like a better prompt.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="14875" LastEditorUserId="14875" LastEditDate="2020-09-24T08:16:47.980" LastActivityDate="2020-09-24T08:16:47.980" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16313" PostTypeId="2" ParentId="16309" CreationDate="2020-09-23T18:53:35.680" Score="5" Body="&lt;p&gt;Your intuition is right and you could write your own loader, of course. But the &amp;quot;standard&amp;quot; way we used to deal with this back in the day was to use a tool most often called a Packer.&lt;/p&gt;&#xA;&lt;p&gt;It typically accepts a list of memory blocks from disk and often lets you override load addresses of these units as well. Then it combines them into one, does a simple run length encoding compression and prepends a depacker - often stored in the screen memory to leave as much target memory as possible open, including under ROMs and I/O space.&lt;/p&gt;&#xA;&lt;p&gt;(Typically, you would then run a Cruncher  - using some LZW-like algorithm -  on this combined version, for greater compression. That could take like half a day to run. :)&lt;/p&gt;&#xA;&lt;p&gt;Threre are loads of different Packers out there but one of the most well known ones is called Sledgehammer - you've probably seen it advertise itself along with it's depacker code on the display of many an old demo production/crack.&lt;/p&gt;&#xA;&lt;p&gt;There are many versions of it to be found on &lt;a href=&quot;https://csdb.dk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CSDB&lt;/a&gt;, including a &lt;a href=&quot;https://csdb.dk/release/?id=169383&quot; rel=&quot;nofollow noreferrer&quot;&gt;pretty recent version&lt;/a&gt; (2018).&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-09-23T19:25:35.180" LastActivityDate="2020-09-23T19:25:35.180" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16314" PostTypeId="1" AcceptedAnswerId="16315" CreationDate="2020-09-23T23:11:00.357" Score="3" ViewCount="198" Body="&lt;p&gt;Looking over a list of &lt;a href=&quot;http://www.vaxmacro.de/vcms.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;various VAX processors&lt;/a&gt;, I noticed a reference to a &amp;quot;CI&amp;quot; bus. Poking about in Google I can only find &lt;em&gt;very&lt;/em&gt; passing mentions of this, and no details. I suspect this had some other un-acronym name that might work better?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-09-24T02:38:06.517" Title="DEC &quot;CI&quot; bus, better known as?" Tags="&lt;dec&gt;&lt;vax&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16315" PostTypeId="2" ParentId="16314" CreationDate="2020-09-23T23:35:53.383" Score="8" Body="&lt;p&gt;At a certain point in the 1980s, 'I' things were all the rage in DEC.&lt;/p&gt;&#xA;&lt;p&gt;BI - Backplane Interconnect (the bus in the 8xxx series VAXen - &lt;a href=&quot;https://en.wikipedia.org/wiki/VAXBI_Bus&quot; rel=&quot;noreferrer&quot;&gt;see Wikipedia&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;CI - Computer Interconnect (showed up as star coupler for VAXclusters, also to HSC intelligent storage controllers)&lt;/p&gt;&#xA;&lt;p&gt;NI - Network Interconnect (ethernet to you).&lt;/p&gt;&#xA;&lt;p&gt;SI - Storage Interconnect - controller-to-disk.&lt;/p&gt;&#xA;&lt;p&gt;The point was to define a hierarchy of standardized interconnect structure, with different characteristics of speed, operating area, number of nodes supported, etc.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.vaxhaven.com/images/7/7a/EK-HSCCN-IN-A01.pdf&quot; rel=&quot;noreferrer&quot;&gt;Figure 1-3 in this manual&lt;/a&gt; shows various interconnects, including the CI.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.dtjcd.vmsresource.org.uk/pdfs/dtj_v01-05_sep1987.pdf&quot; rel=&quot;noreferrer&quot;&gt;DEC Technical Journal, number 5&lt;/a&gt;, from 1987, has some CI details.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-24T02:38:06.517" LastActivityDate="2020-09-24T02:38:06.517" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16316" PostTypeId="2" ParentId="16297" CreationDate="2020-09-24T02:02:35.260" Score="3" Body="&lt;p&gt;To make the various steps in Michael's answer explicit:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;To call indirectly to another segment, &lt;code&gt;ES:BX&lt;/code&gt; needs to contain the address of &lt;code&gt;xms_driver&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;DS&lt;/code&gt; is invalid after inline asm/pseudo-variable assigment, so &lt;code&gt;xms_driver&lt;/code&gt; has to be inspected first.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is the result:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void xms_move_xmb_internal(moveparams *params_ptr)&#xA;{      &#xA;   asm push es&#xA;   asm push ds&#xA;   &#xA;   _ES = FP_SEG(&amp;amp;xms_driver);&#xA;   _BX = FP_OFF(&amp;amp;xms_driver);&#xA;   &#xA;   _DS = FP_SEG(params_ptr);&#xA;   _SI = FP_OFF(params_ptr);   &#xA;   &#xA;   _AX = 0x0B00;&#xA;            &#xA;   asm call dword ptr es:[bx]&#xA;   &#xA;   asm pop ds&#xA;   asm pop es&#xA;}&#xA;&#xA;void xms_move_xmb&#xA;(&#xA;   unsigned long int length,&#xA;   unsigned int      src_handle,&#xA;   unsigned long int src,&#xA;   unsigned int      dst_handle,&#xA;   unsigned long int dst&#xA;)&#xA;{      &#xA;   moveparams params;   &#xA;   params.length     = length;&#xA;   params.src_handle = src_handle;&#xA;   params.src        = src;&#xA;   params.dst_handle = dst_handle;&#xA;   params.dst        = dst;&#xA;   &#xA;   xms_move_xmb_internal(&amp;amp;params);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="19066" LastActivityDate="2020-09-24T02:02:35.260" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16317" PostTypeId="1" AcceptedAnswerId="16318" CreationDate="2020-09-24T11:06:39.283" Score="2" ViewCount="204" Body="&lt;p&gt;I have fond memories of using Lotus AmiPro word processor. If it would run on 64-bit Windows, I'd probably still use it today.&lt;/p&gt;&#xA;&lt;p&gt;One of the most infamous bugs in the program was its inability to show simultaneously the bottom of a page together with the beginning of the next page. (See: &lt;a href=&quot;https://en.wikipedia.org/wiki/Am%C3%AD&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;The limitation was fixed in the 32-bit rewrite (as Word Pro) but I have often wondered what technical reason lay behind this limitation. (If my memory is right, MS Word 6 on Windows 3.x didn't have the same problem.)&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know the reason for this quirk?&lt;/p&gt;&#xA;" OwnerUserId="16486" LastEditorUserId="6659" LastEditDate="2020-09-24T13:36:31.450" LastActivityDate="2020-09-24T14:00:56.677" Title="What was the reason for AmiPro's limitation in displaying two pages together when scrolling?" Tags="&lt;software&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16318" PostTypeId="2" ParentId="16317" CreationDate="2020-09-24T14:00:56.677" Score="3" Body="&lt;p&gt;Speculation: each page had its own memory segment, and the page drawing (rendering) routine was designed to work with 16-bit NEAR pointers within the segment.&lt;/p&gt;&#xA;&lt;p&gt;In the 16-bit world of Windows 2.x and 3.x, memory management informed the program architecture to a large degree. Each pointer could be &lt;a href=&quot;https://stackoverflow.com/questions/1749904/what-is-the-difference-between-far-pointers-and-near-pointers&quot;&gt;NEAR or FAR&lt;/a&gt; (or HUGE), with tradeoffs in size, performance and flexibility.&lt;/p&gt;&#xA;&lt;p&gt;I don't know about the internal architecture of Ami Pro, but it would have been possible/convenient to design the application to store each page in its own memory block/segment (probably allocated using GlobalAlloc). The Windows global heap could handle most of the large-scale memory management, including the ability to allocate &lt;a href=&quot;https://en.wikipedia.org/wiki/Expanded_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;Expanded&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;Extended&lt;/a&gt; memory blocks. The maximum size of a segment, 64 KiB, would have been quite enough for a typical page, possibly with graphics stored separately. The elements on the page could then be managed using NEAR pointers, possibly even using &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20041101-00/?p=37433&quot; rel=&quot;nofollow noreferrer&quot;&gt;a local heap inside each segment&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The text display and editing routines could then be kept simple/fast because they could work with a single &amp;quot;active&amp;quot; page at a time, relying only on NEAR pointers. They would allow you to manipulate text within the page, with the complication that any text that flowed off the &amp;quot;bottom&amp;quot; of the page would have to be copied over to the memory block for the next page, etc. Showing two pages at the same time would have been possible but more complex.&lt;/p&gt;&#xA;" OwnerUserId="13889" LastActivityDate="2020-09-24T14:00:56.677" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16319" PostTypeId="2" ParentId="1683" CreationDate="2020-09-24T15:33:51.380" Score="13" Body="&lt;p&gt;The beep comes from the OS ROM, and it is actually derived from the timing of the start and stop bits of each byte shifted into POKEY, this is determined from the interaction of the interrupts generated. The frequency output is nominally half of the operating bit rate, e.g. approximately 960Hz for a 19200 baud transmission (e.g. from a disk drive at normal speed). It is, in essence, the interrupt timer frequency, and it's spread across the last two channels (so that 16 bits can be used to define the divisor frequency)&lt;/p&gt;&#xA;&lt;p&gt;You also hear a slight clicking sound before each beep, which is POKEY being re-set slightly before sending the 5 byte command frame to the peripheral. This also means that &amp;quot;writing&amp;quot; to the peripheral doesn't actually output any sound except for the initial re-set of pokey to emit the command frame. You can observe this by sending a very large block&#xA;(say 16 kilobytes of data) over SIO at once with no interruptions.&lt;/p&gt;&#xA;&lt;p&gt;This also means, the &amp;quot;raspberry&amp;quot; you hear, is actually a repeated hammering of the POKEY being re-set to send each 5 byte command frame.&lt;/p&gt;&#xA;&lt;p&gt;Finally, the &amp;quot;sounder&amp;quot; can be enabled/disabled by setting the SOUNDR register (which lives in page zero at address 65 or $41 to zero)&lt;/p&gt;&#xA;" OwnerUserId="8428" LastEditorUserId="576" LastEditDate="2021-02-01T08:08:47.917" LastActivityDate="2021-02-01T08:08:47.917" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16320" PostTypeId="1" AcceptedAnswerId="16322" CreationDate="2020-09-24T22:48:48.147" Score="8" ViewCount="856" Body="&lt;p&gt;&lt;strong&gt;After many years I bought myself a new old Amiga 500 (rev 5)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;and wanted to hook it up to an LCD monitor (Samsung Syncmaster 152N) that has a VGA input.&lt;/p&gt;&#xA;&lt;p&gt;I tried hooking it up directly by making an Amiga Video Connector to VGA plug (RGB, HSync and VSync connected directly to the respective pins on the VGA side), and using an 1:1 VGA cable to connect that to the monitor. That didn't work. Black screen output. The monitor did not display.&lt;/p&gt;&#xA;&lt;p&gt;Then I tried a &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B00MUNIVRO&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;HD Video Converter&lt;/a&gt; (from China) that was supposed to work according to YouTube, and connected the Amiga to another monitor through it by using an original Amiga-&amp;gt;Scart cable. White screen output. That didn't work.&lt;/p&gt;&#xA;&lt;p&gt;Next I tried the &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B01AXRYT24&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;GBS-8220&lt;/a&gt; (also from China), that was supposed to work according to YouTube, hooked up the accompanying RGB-H/CSync-VSync cable to the Amiga connector and..  a no &amp;quot;No signal&amp;quot; message on screen. So the GBS-8220 did output to the LCD, but did not see or understand the input.&lt;/p&gt;&#xA;&lt;p&gt;Then, in some corner of the net I saw a comment about the Amiga not understanding H&amp;amp;VSync and you'd have to use CSync. So I disconnected H&amp;amp;VSync and connected CSync and I got an image!&lt;/p&gt;&#xA;&lt;p&gt;Now, I've dabbled a bit in video electronics and as far as I know, roughly speaking, HSync+CSync = CSync, and if CSync works so should its seperate components on VGA.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Out comes the ole' Scope&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/alVum.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/alVum.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Settings:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Top Graph; Amiga 500 CSync pin 10, 2 V/div. GND on the middle line.&lt;/li&gt;&#xA;&lt;li&gt;Bot.Graph; Amiga 500 HSync pin 11, 2 V/div. GND on the bottom line.&lt;/li&gt;&#xA;&lt;li&gt;Horizontally 10 uS/div&lt;/li&gt;&#xA;&lt;li&gt;Trigger on down slope of the CSync (scope filters VSync and triggers on that)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;em&gt;Notes&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I looked at VSync (pin 12) too and it looks like what you would expect - the low freq. part of the CSync.&lt;/li&gt;&#xA;&lt;li&gt;the Amiga video output has seperate H,V and CSync&lt;/li&gt;&#xA;&lt;li&gt;unconnected to the GBS-8220, CSync tops about 4.5V. If you connect it to the GBS it drops to 2.5V but the GBS keeps working and the LCD shows the Amiga image.&lt;/li&gt;&#xA;&lt;li&gt;buffering H/V sync (with a 74LS07 buffer gate each) does not help making the GBS work with H/V Syncs. Neither does a buffer make CSync not work.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Now, if you look at the scope, you will notice that HSync (bottom Graph) has half the frequency of the HSync component in the CSync (top graph) signal!&#xA;Both signals come from the same video connector on the Amiga and the HSync-part should be the same but are not.*&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Why??&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;(This likely explains why The HD Video Converter and the GBS did not work at first since I used H&amp;amp;V sync from the Amiga)&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Any explanation appreciated. Feel free to go technical.&lt;/p&gt;&#xA;" OwnerUserId="19430" LastActivityDate="2020-09-25T16:11:12.973" Title="Why does the Amiga 500 have half the HSYNC pulses seperately compared to those in CSYNC?" Tags="&lt;amiga&gt;&lt;video&gt;&lt;vga&gt;&lt;scart&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16322" PostTypeId="2" ParentId="16320" CreationDate="2020-09-25T07:06:59.367" Score="10" Body="&lt;p&gt;In analog TV, there was such thing as interlace. Roughly speaking, it kind of increased vertical resolution by putting scanlines of one &amp;quot;halfframe&amp;quot; (the one that lasts 20ms or goes 50 times per second, or, alternatively, 16.6ms and 60 Hz) between the scanlines of previous halfframe (saying scanlines I mean lines lit by electron beam on CRT).&lt;/p&gt;&#xA;&lt;p&gt;As the TVs were rather simple analog things, that was achived by selecting a clever ratio between vertical and horizontal frequencies so that every next halfframe scanlines would be drawn by the TV exactly in the middle of previous ones. Two such halfframes contain exactly 625 lines in PAL (or 525 in NTSC), so every of them should contain either different or non-integral numbers of scanlines. The latter is chosen and it is 312.5 (for PAL). Because of that, doubled rate of horizontal sync pulses should be emitted near and during the vertical pulse to equalize some analog circuitry inside older TVs (for reference, look here &lt;a href=&quot;http://martin.hinner.info/vga/pal.html&quot; rel=&quot;noreferrer&quot;&gt;http://martin.hinner.info/vga/pal.html&lt;/a&gt; or here &lt;a href=&quot;https://web.archive.org/web/20160428234231/http://www.pembers.freeserve.co.uk/World-TV-Standards/VBI-625-PAL.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://web.archive.org/web/20160428234231/http://www.pembers.freeserve.co.uk/World-TV-Standards/VBI-625-PAL.pdf&lt;/a&gt;, then probably this &lt;a href=&quot;https://www.ques10.com/p/26491/what-is-the-need-of-equalization-pulses-explain-pr/&quot; rel=&quot;noreferrer&quot;&gt;https://www.ques10.com/p/26491/what-is-the-need-of-equalization-pulses-explain-pr/&lt;/a&gt; also explains something).&lt;/p&gt;&#xA;&lt;p&gt;Most home computers of 80ies, while were formally emitting NTSC or PAL videos, actually did not use any kind of interlaced raster, with every halfframe being exactly the same, particularly with the integral number of scanlines in it and without any equalizing pulses on CSYNC near vertical synchronisation pulse. However, Amiga was the one known to correctly support interlaced raster. So I suppose what you see on the scope is exactly that (assuming there was no reason emitting equalizing pulses on HSYNC as it is targeted to be used with dedicated monitors and not conventional TVs).&lt;/p&gt;&#xA;&lt;p&gt;The most strange thing is that the non-doubled hsync rate on your scope is not having 64uS period, as it should be for PAL. Instead, it seems to be already double-rated. Are you trying to emit VGA, not PAL video from your Amiga? Or maybe the scope is wrong?&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2020-09-25T07:12:18.223" LastActivityDate="2020-09-25T07:12:18.223" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16323" PostTypeId="2" ParentId="16320" CreationDate="2020-09-25T07:10:24.167" Score="4" Body="&lt;p&gt;The CSYNC looks perfectly normal for a standard 576i or 480i composite signal, just like how sync signals on composite video and analog TV transmissions work.&lt;/p&gt;&#xA;&lt;p&gt;The video signal standards define that serrated equalizing sync pulses are sent at twice the HSYNC rate during the VSYNC and few lines before and after it. This is to allow the VSYNC to be detected better and it also gives a handy reference for starting the VSYNC at the start of a line or in the middle of a line to provide timings for odd and even frames for interlaced video.&lt;/p&gt;&#xA;&lt;p&gt;The VSYNC is not sent as a single long pulse that would block HSYNC, nor as a series of long sync pulses at HSYNC frequency.&lt;/p&gt;&#xA;&lt;p&gt;Also, the A500 outputs video at 15kHz interlaced rate and has no support for VGA compatible timings. It is extremely unlikely that a monitor would support 15kHz interlaced 480i/576i video on VGA connector. Most monitors support 31kHz progressive video at minimum.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2020-09-25T10:15:16.217" LastActivityDate="2020-09-25T10:15:16.217" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16324" PostTypeId="2" ParentId="16320" CreationDate="2020-09-25T16:11:12.973" Score="2" Body="&lt;p&gt;In an analog television set, the vertical and horizontal sync circuits are independent, but both need to derive their trigger signals from a common source.  As a general concept, a short &amp;quot;low-going&amp;quot; pulse [which is modulated for broadcast as an increase in signal level] will trigger the horizontal sync circuit, while a long pulse will trigger the vertical circuit.&lt;/p&gt;&#xA;&lt;p&gt;In order to improve apparent resolution, the horizontal frequency is 525/2 times the vertical frequency, so that on every other vertical scan the horizontal scans will be shifted by half a scan line.  If a television set were to simply transmit horizontal sync triggers as short pulses and vertical ones as long ones, this would cause a couple of problems:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;To facilitate separation, the vertical sync pulse is multiple scan lines long.  If there were no horizontal sync pulses within that time, television sets would be prone to lose horizontal synchronization.  Although sets would regain horizontal synchronization eventually, the time required for them to do so might be longer than the vertical blanking interval; the failure to reestablish synchronization within the blanking interval could cause &amp;quot;tearing&amp;quot; on the top part of the display.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The amount of time required for a set to detect a vertical scanning pulse might be affected by the time that elapsed since the end of the preceding horizontal pulse.  Typically, the vertical detector circuit will derive a rough &amp;quot;time averaged&amp;quot; version of the sync signal and trigger when the average voltage falls below a certain threshold.  While a horizontal sync pulse is active, the average will drop, and when it's inactive it will rise.  If the time required for the average to fully recover is more than half a scan line, this would affect the amount of time required for the set to detect the vertical sync.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;To alleviate these issues, the rate of horizontal sync pulses is doubled a shortly before the start of the vertical sync pulse.  Television sets will ignore a horizontal sync pulse that occurs before a point somewhere between 60% and 98% of the way through a scan line, but by the time the sync pulse arrives, the averaging circuit would have settled onto a level which would be the same on each pulse, whether or not it lined up with the vertical sync.&lt;/p&gt;&#xA;&lt;p&gt;I would expect that a signal which is intended for use with the kind of decoding circuitry found in a television set would include these extra pulses, though many computers and video game systems omit them.  A signal which is intended to directly drive a horizontal-sync trigger circuit, however, should omit them.  Some monitors might attempt to respond to the double-speed pulses by scanning twice as fast, even if this would cause damaging levels of stress on their components, or would cause them to needlessly adjust their deflection currents to double the rate at which the beam moves (without such adjustment, doubling the scan rate would squish the image by 50%).  If the sets start increasing the deflection current when the rate doubles, and then start dropping it when the rate goes back to normal, the time required for the current to stabilize at a level appropriate to the normal scan rate might exceed the vertical blanking interval, causing tearing.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-09-25T16:11:12.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16325" PostTypeId="2" ParentId="2509" CreationDate="2020-09-25T16:55:43.010" Score="2" Body="&lt;p&gt;I bought an Apple ][ serial number 219 in August 1977. I don't know what rev the motherboard was, but it did go directly to the monitor upon power up.&lt;/p&gt;&#xA;" OwnerUserId="19350" LastEditorUserId="19350" LastEditDate="2020-09-29T15:10:36.367" LastActivityDate="2020-09-29T15:10:36.367" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16327" PostTypeId="1" CreationDate="2020-09-26T20:04:39.993" Score="9" ViewCount="1052" Body="&lt;p&gt;Donald Knuth's 64-bit &lt;a href=&quot;https://en.wikipedia.org/wiki/MMIX&quot; rel=&quot;noreferrer&quot;&gt;MMIX architecture&lt;/a&gt; includes several novel instructions that operate matrixwise on an 8x8 square matrix (&lt;code&gt;MOR&lt;/code&gt;, &lt;code&gt;MXOR&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;(MMIX also has instructions like &lt;code&gt;BDIF&lt;/code&gt; that operate vectorwise on 8x 8-bit integers, which is less novel; x86 does that just fine.)&lt;/p&gt;&#xA;&lt;p&gt;Treating your 64-bit word as a square matrix is possible only when the word size is a perfect square.&lt;/p&gt;&#xA;&lt;p&gt;Back in the day, there were &lt;a href=&quot;https://en.wikipedia.org/wiki/36-bit_computing&quot; rel=&quot;noreferrer&quot;&gt;computers with a 36-bit word length&lt;/a&gt;. That's famously enough to store 6x 6-bit (pre-ASCII) characters in a single word. &lt;strong&gt;Did any historical 36-bit computer ever offer operations that were best understood by reading machine words as 6x6 matrices?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;How about any historical 16-bit computer?&lt;/p&gt;&#xA;&lt;p&gt;Besides complicated instructions like MMIX's &lt;code&gt;MOR&lt;/code&gt; and &lt;code&gt;MXOR&lt;/code&gt;, the simplest example of a &amp;quot;matrix operation&amp;quot; in the sense I mean would be a unary &lt;code&gt;TRANSPOSE&lt;/code&gt; operation:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;TRANSPOSE(1001'1010'1010'1011) = 1111'0000'0111'1001&#xA;TRANSPOSE(1001'0010'1011'0100) = 1010'0001'0110'1010&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3581" LastActivityDate="2020-09-28T07:24:07.420" Title="Did any 16-bit or 36-bit computer instruction set ever include 4x4 or 6x6 bit-matrix operations?" Tags="&lt;instruction-set&gt;&lt;pdp-10&gt;&lt;honeywell&gt;&lt;univac&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16328" PostTypeId="2" ParentId="16327" CreationDate="2020-09-26T20:17:16.673" Score="6" Body="&lt;p&gt;I don't know if it counts as a 16-bit historical computer, but there were a number of 80287 clones. One of them, from IIT, added a F4x4 instruction that operated on the entire FP stack to perform matrix operations (the IIT chip had not one, but four stacks of eight FPU registers each).&lt;/p&gt;&#xA;&lt;p&gt;A friend of mine had one of these coprocessors back in the day, and it came with a demo program showing a speed test of this F4x4 instruction. The leafsheet that served as fitting and user guide also mentioned this feature.&lt;/p&gt;&#xA;&lt;p&gt;The only information I have found so far is from the &lt;a href=&quot;https://mikro.naprvyraz.sk/docs/Coding/Hardware/COPRO16A.TXT&quot; rel=&quot;nofollow noreferrer&quot;&gt;COPRO16A.TXT file, by Norbert Juffa&lt;/a&gt;. Excerpts from that document include:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The IIT 2C87 provides extra functions not available on any other 287&#xA;chip [38]. It has 24 user-accessible floating-point registers organized&#xA;into three register banks. Additional instructions (FSBP0, FSBP1, FSBP2)&#xA;allow switching from one bank to another. (Transfers between registers&#xA;in different banks are not supported, however, so this feature by itself&#xA;is of limited usefulness. Also, there seems to be only one status&#xA;register (containing the stack top pointer), so it has to be manually&#xA;loaded and stored when switching between banks with a different number&#xA;of registers in use [40]). The register bank's main purpose is to aid&#xA;the fourth additional instruction the 2C87 has (F4X4), which does a full&#xA;multiply of a 4x4 matrix by a 4x1 vector, an operation common in 3D-&#xA;graphics applications [39]. The built-in matrix multiply speeds this&#xA;operation up by a factor of 6 to 8 when compared to a programmed&#xA;solution according to the manufacturer [38]. Tests show the speed-up to&#xA;be indeed in this range [40]. For the 3C87, I measured the execution&#xA;time of F4X4 to be about 280 clock cycles; the execution time on the&#xA;2C87 should be somewhat larger - I estimate it to be around 310 clock&#xA;cycles due to the higher CPU-NDP communication overhead in instruction&#xA;execution in 286/287 systems (~45-50 clock cycles) compared with 386/387&#xA;systems (~16-20 clock cycles). As desirable as the F4X4 instruction may&#xA;seem, however, there are very few applications that make use of it when&#xA;an IIT coprocessor is detected at run time (among them Schroff&#xA;Development's Silver Screen and Evolution Computing's Fast-CAD 3-D&#xA;[25]).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And a routine showing how to use the F4x4 instruction:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  ;---------------------------------------------------------------------&#xA;  ;&#xA;  ; IIT_MUL_4x4 multiplicates a four-by-four matrix by an array of four&#xA;  ; dimensional vectors. This operation is needed for 3D transformations&#xA;  ; in graphics data processing. There are arrays for each component of&#xA;  ; a vector.  Thus there is an array containing all the x components,&#xA;  ; another containing all the y components and so on. Each component is&#xA;  ; an 8 byte IEEE floating-point number. Two indices into the array of&#xA;  ; vectors are given. The first is the index of the vector that will be&#xA;  ; processed first, the second is the index of the vector processed&#xA;  ; last. This subroutine uses the special instructions only available&#xA;  ; on IIT coprocessors to provide fast matrix multiply capabilities.&#xA;  ; So make sure to use it only on IIT coprocessors.&#xA;  ;&#xA;  ;---------------------------------------------------------------------&#xA;&#xA;  IIT_MUL_4x4   PROC    NEAR&#xA;&#xA;        AddrX   EQU DWORD PTR [BP+24] ; address of X component array&#xA;        AddrY   EQU DWORD PTR [BP+20] ; address of Y component array&#xA;        AddrZ   EQU DWORD PTR [BP+16] ; address of Z component array&#xA;        AddrW   EQU DWORD PTR [BP+12] ; address of W component array&#xA;        AddrT   EQU DWORD PTR [BP+8]  ; addr. of 4x4 transf. matrix&#xA;        F       EQU WORD  PTR [BP+6]  ; first vector to process&#xA;        K       EQU WORD  PTR [BP+4]  ; last vector to process&#xA;        RetAddr EQU WORD  PTR [BP+2]  ; return address saved by call&#xA;        SavdBP  EQU WORD  PTR [BP+0]  ; saved frame pointer&#xA;        SavdDS  EQU WORD  PTR [BP-2]  ; caller's data segment&#xA;        Ctrl87  EQU WORD  PTR [BP-4]  ; caller's 80x87 control word&#xA;&#xA;        PUSH    BP                    ; save TURBO-Pascal frame ptr&#xA;        MOV     BP, SP                ; new frame pointer&#xA;        PUSH    DS                    ; save TURBO-Pascal data seg.&#xA;        SUB     SP, 2                 ; make local variabe&#xA;        FSTCW   [Ctrl87]              ; save 80x87 ctrl word&#xA;        LES     SI, AddrT             ; ptr to transformation matrix&#xA;        FINIT                         ; initialize coprocessor&#xA;        FSBP2                         ; set register bank 2&#xA;        FLD     QWORD PTR ES:[SI]     ; load a[0,0]&#xA;        FLD     QWORD PTR ES:[SI+32]  ; load a[1,0]&#xA;        FLD     QWORD PTR ES:[SI+64]  ; load a[2,0]&#xA;        FLD     QWORD PTR ES:[SI+96]  ; load a[3,0]&#xA;        FLD     QWORD PTR ES:[SI+8]   ; load a[0,1]&#xA;        FLD     QWORD PTR ES:[SI+40]  ; load a[1,1]&#xA;        FLD     QWORD PTR ES:[SI+72]  ; load a[2,1]&#xA;        FLD     QWORD PTR ES:[SI+104] ; load a[3,1]&#xA;        FINIT                         ; initialize coprocessor&#xA;        FSBP1                         ; set register bank 1&#xA;        FLD     QWORD PTR ES:[SI+16]  ; load a[0,2]&#xA;        FLD     QWORD PTR ES:[SI+48]  ; load a[1,2]&#xA;        FLD     QWORD PTR ES:[SI+80]  ; load a[2,2]&#xA;        FLD     QWORD PTR ES:[SI+112] ; load a[3,2]&#xA;        FLD     QWORD PTR ES:[SI+24]  ; load a[0,3]&#xA;        FLD     QWORD PTR ES:[SI+56]  ; load a[1,3]&#xA;        FLD     QWORD PTR ES:[SI+88]  ; load a[2,3]&#xA;        FLD     QWORD PTR ES:[SI+120] ; load a[3,3]&#xA;&#xA;                                      ; transformation matrix loaded&#xA;&#xA;        MOV     AX, F                 ; index of first vector&#xA;        MOV     DX, K                 ; index of last vector&#xA;&#xA;        MOV     BX, AX                ; index 1st vector to process&#xA;        MOV     CL, 3                 ; component has 8 (2**3) bytes&#xA;        SHL     BX, CL                ; compute offset into arrays&#xA;&#xA;        FINIT                         ; initialize coprocessor&#xA;        FSBP0                         ; set register bank 0&#xA;&#xA;  $mat_loop:LES     SI, AddrW             ; addr. of W component array&#xA;        FLD     QWORD PTR ES:[SI+BX]  ; W component current vector&#xA;        LES     SI, AddrZ             ; addr. of Z component array&#xA;        FLD     QWORD PTR ES:[SI+BX]  ; Z component current vector&#xA;        LES     SI, AddrY             ; addr. of Y component array&#xA;        FLD     QWORD PTR ES:[SI+BX]  ; Y component current vector&#xA;        LES     SI, AddrX             ; addr. of X component array&#xA;        FLD     QWORD PTR ES:[SI+BX]  ; X component current vector&#xA;        F4X4                          ; mul 4x4 matrix by 4x1 vector&#xA;        INC     AX                    ; next vector&#xA;        MOV     DI, AX                ; next vector&#xA;        SHL     DI, CL                ; offset of vector into arrays&#xA;&#xA;        FSTP    QWORD PTR ES:[SI+BX]  ; store X comp. of curr. vect.&#xA;        LES     SI, AddrY             ; address of Y component array&#xA;        FSTP    QWORD PTR ES:[SI+BX]  ; store Y comp. of curr. vect.&#xA;        LES     SI, AddrZ             ; address of Z component array&#xA;        FSTP    QWORD PTR ES:[SI+BX]  ; store Z comp. of curr. vect.&#xA;        LES     SI, AddrW             ; address of W component array&#xA;        FSTP    QWORD PTR ES:[SI+BX]  ; store W comp. of curr. vect.&#xA;&#xA;        MOV     BX, DI                ; ofs nxt vect. in comp. arrays&#xA;        CMP     AX, DX                ; nxt vector past upper bound?&#xA;        JLE     $mat_loop             ; no, transform next vector&#xA;        FLDCW   [Ctrl87]              ; restore orig 80x87 ctrl word&#xA;&#xA;        ADD      SP, 2                ; get rid of local variable&#xA;        POP      DS                   ; restore TP data segment&#xA;        POP      BP                   ; restore TP frame pointer&#xA;        RET      24                   ; pop parameters and return&#xA;  IIT_MUL_4x4   ENDP&#xA;&#xA;  CODE      ENDS&#xA;&#xA;  END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2020-09-28T07:24:07.420" LastActivityDate="2020-09-28T07:24:07.420" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16329" PostTypeId="1" AcceptedAnswerId="16338" CreationDate="2020-09-26T21:47:06.613" Score="9" ViewCount="420" Body="&lt;p&gt;I've wired up a simple Z80 circuit, and I've encountered a strange issue: after successfully executing one instruction, the M1 cycle of the NEXT instruction never completes successfully.&lt;/p&gt;&#xA;&lt;p&gt;Here are some facts:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I can execute indefinitely many M1-only instructions (such as: NOP, INC r)&lt;/li&gt;&#xA;&lt;li&gt;As soon as an instruction which has an M2 cycle as well (such as JP nn), only the FIRST such instruction is executed successfully; a second one enters a &amp;quot;corrupted&amp;quot; M1 cycle which never finishes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;My test setup&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;manual clock, using a Schmitt Trigger to clean up the edges; this is reliable, as I can accurately move from one Tstate to the next&lt;/li&gt;&#xA;&lt;li&gt;Hard wire 11000011b (0xC3) on data lines; this is intended to run as JP 0xC3C3. Z80 manual says this is a 10-clock operation (4, 3, 3)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;My reproduction steps&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Verify 0 on A0-A7 (to fetch opcode byte)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Run through M1 (4 clocks) and compare successfully to spec timing diagram at each clock cycle&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Verify 1 on A0-A7 (to fetch first byte of operand)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Run through M2 (3 clocks) and compare successfully to spec timing diagram at each clock cycle&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Verify 2 on A0-A7 (to fetch second byte of operand)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Run through M2 (3 clocks) and compare successfully to spec timing diagram at each clock cycle&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Verify 11000011 on A0-A7&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;(At this point, since C3 is present on A0-A7, it proves that the CPU has executed the first JP 0xC3C3 successfully.)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Verify output voltages correspond to beginning of M1&lt;/li&gt;&#xA;&lt;li&gt;Try executing the second JP 0xC3C3&lt;/li&gt;&#xA;&lt;li&gt;Failure: partway (T3 high clock) through M1, output voltages no longer match Z80 spec's M1 timing diagram and CPU is stuck in a repeating pattern.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I am able to reproduce this every single time I run this test. First JP nn is always successful, second instruction fails.&lt;/p&gt;&#xA;&lt;p&gt;Any help is appreciated; I've spent hours measuring and trying things out, but this issue has me beat :(&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My thanks in advance for any help at all!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2&gt;The observed timing of second instruction&lt;/h2&gt;&#xA;&lt;p&gt;Here is the timing I get, from the start of the second JP nn. My timing matches the spec timing only during T1 and T2.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/oxYB9.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oxYB9.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19452" LastActivityDate="2020-09-28T17:29:38.447" Title="Single-stepping a Z80 - only first instruction is successful" Tags="&lt;z80&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16330" PostTypeId="2" ParentId="16327" CreationDate="2020-09-26T22:42:33.533" Score="5" Body="&lt;p&gt;I think the big question you have to ask here is: &lt;strong&gt;What would such an instruction have been useful for?&lt;/strong&gt;  Single-bit data types don't usually go together with matrix operations.&lt;/p&gt;&#xA;&lt;p&gt;I've looked at some examples where the MMIX instructions are used, and they don't seem to be very compelling, given the hardware complexity of doing so.  For example, if you want a &lt;code&gt;ROL&lt;/code&gt; instruction, you can add a few gates to a &lt;code&gt;SHL&lt;/code&gt; instruction's implementation and avoid all the gymnastics needed to emulate it with a &lt;code&gt;MOR&lt;/code&gt; instruction.  Another example given involves spacing out a narrow character string (eg. ASCII) into a wider one (eg. UTF-16), which strikes me as not a common enough operation to justify using anything more clever than the obvious scalar loop.&lt;/p&gt;&#xA;&lt;p&gt;The best examples of this type of operation I know of come from relatively recent CPUs with SIMD units, such as ARM NEON (a 32-bit architecture with 64-bit and 128-bit SIMD registers).  These often include both &amp;quot;horizontal&amp;quot; (eg. sum all elements in a single register) and &amp;quot;vertical&amp;quot; (eg. multiply two registers element-wise and accumulate into a third) operations that can be used to efficiently support matrix arithmetic by combining a relatively small number of instructions.  There are also instructions for interleaving and de-interleaving data (aka. zip and unzip operations) which can be very useful for transposing matrices.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-09-26T22:42:33.533" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16331" PostTypeId="2" ParentId="11287" CreationDate="2020-09-27T07:22:03.160" Score="0" Body="&lt;p&gt;Scandisk appeared in msdos 6.20, to cure the problems that dblspace in 6.00 was doing to people's data.  It's essentially a cutdown version of Norton Disk Doctor (NDD).&lt;/p&gt;&#xA;&lt;p&gt;When Windows 95 came around, they continued to use it for the next rolling experiment: fat-lfn.  Nuts&amp;amp;Bolts included a competing product 'diskmind', as dmdos.exe and diskmind.exe.  You could fetch this at MGDx site.&lt;/p&gt;&#xA;&lt;p&gt;By the time Win95 came out, microsoft were trying to wean people off the command prompt, and scandisk was better at that than chkdsk.&lt;/p&gt;&#xA;&lt;p&gt;IBM were not so keen, and so even in gui systems like OS/2, they made the distinction between 'DOS' and 'OS/2' prompts, and never pretended one was the other.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2020-09-27T07:22:03.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16332" PostTypeId="2" ParentId="12476" CreationDate="2020-09-27T10:37:10.320" Score="0" Body="&lt;p&gt;I found it at last. This is &amp;quot;Metal Mech: Man &amp;amp; Machine&amp;quot; for NES&lt;/p&gt;&#xA;" OwnerUserId="19455" LastActivityDate="2020-09-27T10:37:10.320" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16336" PostTypeId="2" ParentId="16153" CreationDate="2020-09-27T23:45:12.137" Score="1" Body="&lt;p&gt;I guess the difference between &amp;quot;an average programmer&amp;quot; and a compiler is that the compiler has &amp;quot;mechanical sympathy&amp;quot; with the hardware it's compiled to.&#xA;Also feel the need to quote Donald Knuth / Hoare / Dijkstra, depending on who you ask: &amp;quot;premature optimisation is the root of all evil&amp;quot;.&lt;br /&gt;&#xA;In today's world of cloud computing, it all gets fuzzy:  virtual machines, containers and runtime virtual machines (eg Java's Virtual Machine) can all co-exist together.  Therefore, compiler micro-optimisations are meaningless in the grander scheme of things - code optimised for a container might be irrelevant on the VM / Physical hardware it runs on.&lt;/p&gt;&#xA;&lt;p&gt;Of course, if we're talking about bare-metal control, then it matters.   However these scenarios are quite niche, unless we're talking about running code on Micro Controllers, then optimising power by optimising CPU cycles is good.  x number of CPU cycles costs microamps of battery life, so this could be critical for some applications.&lt;/p&gt;&#xA;&lt;p&gt;Processors have branch condition caches, L1 and L2 caches for RAM to speed up memory access and branching, as well as disk/ssd-backed virtual memory.   Processors can also pipeline instructions and effectively run some parts of code in parallel if there are groups of unrelated instructions which are unaffected by the order of which they are executed.  Intel did this with their Hyper Threading technology, and there were probably others before them, but I'm not certain who they are without some proper research.&lt;/p&gt;&#xA;&lt;p&gt;The JVM has a Hotspot compiler.  The hotspot compiler converts frequently interpreted portions of byte-code into native machine code to save repeatedly parsing/translating the byte code continuously.  Compilers have optimisation too, like in-lining code to save on some kind of machine-code call instruction (which normally might involve additional cycles for saving the return address at the very least).   From a heuristics perspective, it's the empirical data which handles on-the-fly optimisation, so they're going to catch stuff you never even thought about.&lt;/p&gt;&#xA;&lt;p&gt;Much of this depends on the processor, the language, the operating system, the compiler and the data that needs to be processed.&lt;/p&gt;&#xA;" OwnerUserId="8799" LastEditorUserId="8799" LastEditDate="2021-03-04T01:03:25.270" LastActivityDate="2021-03-04T01:03:25.270" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16338" PostTypeId="2" ParentId="16329" CreationDate="2020-09-28T00:17:00.713" Score="2" Body="&lt;p&gt;The verdict is in. After more hours of trials, I found that the CPU was damaged, either by me or DOA. It's an interesting error state, since whatever circuitry is in charge of M1 goes into an undefined state after M2. But if M2 is not needed, M1 can execute successfully indefinitely. Another difference I see now is current draw: the setup with the bad CPU drew 190mA, while a setup with a good Z80 draws 70mA. The type is Z84C0020PEC, CMOS. When I started down this path, I did buy multiple Z80 in anticipation for issues like this :)&lt;/p&gt;&#xA;" OwnerUserId="19452" LastEditorUserId="19452" LastEditDate="2020-09-28T17:29:38.447" LastActivityDate="2020-09-28T17:29:38.447" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16339" PostTypeId="1" AcceptedAnswerId="16340" CreationDate="2020-09-28T05:01:14.197" Score="11" ViewCount="1208" Body="&lt;p&gt;I've had this drawer unit for nearly 20 years. I found it left behind in a vacant apartment. The label says &amp;quot;Radio Shack TRS-80 Data Drawer File System&amp;quot; but nothing else.&lt;/p&gt;&#xA;&lt;p&gt;I spent a lot of time in Radio Shacks looking at the the later Tandy branded computers, but the TRS-80 is a little before my time. I've been using it for paper storage.&lt;/p&gt;&#xA;&lt;p&gt;I've tried searching for the name and haven't come up with anything and I was wondering if anyone remembers it and what kind of media it held.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QtxQ7.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QtxQ7.jpg&quot; alt=&quot;Photo 1&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/awKMH.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/awKMH.jpg&quot; alt=&quot;Photo 2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19460" LastEditorUserId="19460" LastEditDate="2020-09-28T14:29:51.513" LastActivityDate="2020-09-28T14:29:51.513" Title="TRS-80 Accessory - Data Drawer File System" Tags="&lt;trs-80&gt;&lt;radio-shack&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16340" PostTypeId="2" ParentId="16339" CreationDate="2020-09-28T05:23:51.427" Score="8" Body="&lt;p&gt;Page 3 of &lt;a href=&quot;https://archive.org/details/Radio_Shack_Catalog_CCF833_1983_Radio_Shack/page/n1/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;this 1983 Radio Shack catalog&lt;/a&gt; shows the Data Drawer in two different sizes, &amp;quot;printout&amp;quot; which holds 14-7/8×11-inch 132-column printer paper, and &amp;quot;letter&amp;quot; which holds up to 8-1/2×14-inch legal size paper. There are also inserts for cassettes and printwheels.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-09-28T05:23:51.427" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16341" PostTypeId="2" ParentId="16329" CreationDate="2020-09-28T06:16:29.663" Score="7" Body="&lt;p&gt;In the comments you say:-&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Another difference I see now is current draw: the bad CPU drew&#xA;&lt;strong&gt;190mA&lt;/strong&gt; and a good one draws 70mA with the exact setup. The type is &lt;strong&gt;Z84C0020PEC&lt;/strong&gt;, CMOS&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I bet you have a 'fake' Z80, ie. a relabeled NMOS version. Ask me how I know!&lt;/p&gt;&#xA;&lt;p&gt;NMOS Z80s are not fully static, so you cannot clock them manually. 190 mA is a normal current draw for NMOS Z80.&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-09-28T06:16:29.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16342" PostTypeId="2" ParentId="8903" CreationDate="2020-09-28T09:12:15.333" Score="2" Body="&lt;p&gt;The innards of above device depicted by tofro are &lt;strong&gt;completely&lt;/strong&gt; different.&lt;/p&gt;&#xA;&lt;p&gt;No PIC inside but a 74HC164 8-bit serial-in, parallel-out shift register:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/35NLE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/35NLE.jpg&quot; alt=&quot;The Miracle Systems Centronics Printer Interface (Duel Port Version)&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19461" LastActivityDate="2020-09-28T09:12:15.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16343" PostTypeId="1" AcceptedAnswerId="16344" CreationDate="2020-09-28T13:05:22.487" Score="3" ViewCount="782" Body="&lt;p&gt;Was bakelite used for computer data storage like it was used for grammophone records? My brother says he remembers this but I cannot find it on Google.&lt;/p&gt;&#xA;" OwnerUserId="16482" LastEditorUserId="6794" LastEditDate="2020-10-13T08:27:29.943" LastActivityDate="2020-10-13T08:27:29.943" Title="Bakelite as data storage" Tags="&lt;hardware&gt;&lt;storage&gt;" AnswerCount="2" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="16344" PostTypeId="2" ParentId="16343" CreationDate="2020-09-28T13:42:20.087" Score="5" Body="&lt;p&gt;I don't think so, and I don't recall reading or hearing about any such data storage technology, although mechanical data storage (in its broadest sense) might have been done using Bakelite. For example, cam-actuated &amp;quot;programmers&amp;quot; that control electrical equipment may may have used Bakelite cams, and this could be considered to be a form of data storage. But for storing arbitrary data, Bakelite does not seem to be a suitable techology. One of the earliest forms of mechanical data storage was paper tape, which derived from telegraph (Telex) technology.&lt;/p&gt;&#xA;&lt;p&gt;It is true that early gramophone records were made from Bakelite, but that was replaced by shellac, and then vinyl.&lt;/p&gt;&#xA;" OwnerUserId="3278" LastActivityDate="2020-09-28T13:42:20.087" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16345" PostTypeId="2" ParentId="16339" CreationDate="2020-09-28T13:51:21.890" Score="6" Body="&lt;p&gt;Following up on @snips-n-snails.&lt;/p&gt;&#xA;&lt;p&gt;The use case for this is to organize printouts for reference. A simple example is that if someone wanted the ID of a vendor or customer, it was not untoward at the time to not look it up on the computer, but, rather, pull out a printout and look it up there. This organizes printout.&lt;/p&gt;&#xA;&lt;p&gt;You can easily envision a printout for the Customer Master (sorted by name) to find a customer code by name, then grabbing the Open Accounts printout to find the customers current balance.&lt;/p&gt;&#xA;&lt;p&gt;Part of the problem was simply storage space. With floppy based systems, and the small floppy sizes of the time, there simply wasn't enough space to keep the data on line all the time, and it's much safer to dig through a printout than have someone swapping floppies etc.&lt;/p&gt;&#xA;&lt;p&gt;Finally, of course, it takes very little training to learn to navigate a report, so it's easy to stick one of these up by the front desk, away from the computer.&lt;/p&gt;&#xA;&lt;p&gt;This storage cabinet is simply a manifestation of the day of folks making do with what they had. Today, naturally, we take this all for granted.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-09-28T13:51:21.890" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16349" PostTypeId="1" CreationDate="2020-09-29T01:18:04.907" Score="1" ViewCount="445" Body="&lt;p&gt;I find myself dying constantly in Donkey Kong. Although I don't have to pay money each time, it's still annoying to keep having to watch the intro each time.&lt;/p&gt;&#xA;&lt;p&gt;I've tried pressing all buttons I could think of, so I don't think it's skipable, but maybe it is.&lt;/p&gt;&#xA;&lt;p&gt;Same thing with Puckman/PAC-MAN.&lt;/p&gt;&#xA;&lt;p&gt;On pinball machines, you can usually tell it to: &amp;quot;get on with it already!&amp;quot; by pressing a button, and so it would make sense for an all-digital game to also have such a feature for people who have already seen the intro a million times and just want to get on with the game.&lt;/p&gt;&#xA;" OwnerUserId="19466" LastActivityDate="2020-10-30T01:21:19.507" Title="In Donkey Kong (arcade), is there some way to skip the annoying intro sequence?" Tags="&lt;arcade&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16350" PostTypeId="2" ParentId="16349" CreationDate="2020-09-29T04:42:27.977" Score="3" Body="&lt;p&gt;The ability to skip cut scenes was a rather late addition to the arcade scene.  I'm not quite sure why; if a player would rather skip a cut scene than spent time watching it, I can't imagine arcade operators being opposed.  Pinball machines likewise took awhile to let players skip animation sequences, though in the days before such sequences could be skipped they usually wouldn't be very long unless they were a reward for something impressive a player did.  The bonus-count sequence in Pinbot would take awhile if the player scored 5x 99000, but that would usually happen after a rather long ball where the player would be happy to have a breather.  It's somewhat interesting playing older pinball machines where the end-of-ball sequence can be two seconds or less.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-09-29T04:42:27.977" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16351" PostTypeId="1" AcceptedAnswerId="16422" CreationDate="2020-09-29T14:12:36.977" Score="19" ViewCount="6560" Body="&lt;p&gt;From the earliest K&amp;amp;R reference manuals I read, 'int' was synonymous with machine word and it seemed to raise adverse reactions in various user domains. With the UNIX crowd, they minimally required an MMU(Note *1) so the word had to be 32bits at least to do memory management without segmentation overhead such as we saw with 16bit WinTel memory models (tiny, large, huge etc), so the UNIX machines started with 32bits as a minimum for the preferred flat address space.&lt;/p&gt;&#xA;&lt;p&gt;But that did not define the C int. I also note that the DB crowd have had a preference for immutable storage specifications, so perhaps they too shunned the semantic int for an imperative one.&lt;/p&gt;&#xA;&lt;p&gt;The reason I ask is that I notice this sudden appearance of an access barrier where manufactured storage disks easily exceed 2TB which but is pegged by the 'long int's stuck on 32 bit 'int's. But the C int specification should not have forced the 32bit word size that now makes the 32bit semantic incapable of implementing 4TB disk access (by mere recompile) to that of 64bit native word machines?&lt;/p&gt;&#xA;&lt;p&gt;So if there does exist an explicit standard where 'int' is mandated to 32 bits does anyone know its origins (ANSI? IEEE? POSIX? OTHER? etc) and the motivation for that dramatic change from the K&amp;amp;R specification?&lt;/p&gt;&#xA;&lt;p&gt;If the 32bit standard was made 'pragmatically' then it would surely be equivalent to that other 640K limit which we once lived to regret.&lt;/p&gt;&#xA;&lt;p&gt;Feedback is pointing towards pragmatism thus far, for instance the Win64 (Answer by @ssokolow):&#xA;In addition to the reasons give on that web page, another reason is that doing so avoids breaking persistence formats. For example, part of the header data for a bitmap file is defined by the following structure:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;typedef struct tagBITMAPINFOHEADER {&#xA;        DWORD      biSize;&#xA;        LONG       biWidth;&#xA;        LONG       biHeight;&#xA;        WORD       biPlanes;&#xA;        WORD       biBitCount;&#xA;        DWORD      biCompression;&#xA;        DWORD      biSizeImage;&#xA;        LONG       biXPelsPerMeter;&#xA;        LONG       biYPelsPerMeter;&#xA;        DWORD      biClrUsed;&#xA;        DWORD      biClrImportant;&#xA;} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If a LONG expanded from a 32-bit value to a 64-bit value, it would not be possible for a 64-bit program to use this structure to parse a bitmap file.&lt;/p&gt;&#xA;&lt;p&gt;And the Amdahl 64 = 32x2 comment given by @ faddenon on the experience of bridging the large double jump from 32 to 64. I give a similar current Redhat/CentOS 8 file access structure that has hidden 32bit ints all over (man statx; from man inode):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   struct statx {&#xA;       __u32 stx_mask;        /* Mask of bits indicating&#xA;                                 filled fields */&#xA;       __u32 stx_blksize;     /* Block size for filesystem I/O */&#xA;       __u64 stx_attributes;  /* Extra file attribute indicators */&#xA;       __u32 stx_nlink;       /* Number of hard links */&#xA;       __u32 stx_uid;         /* User ID of owner */&#xA;       __u32 stx_gid;         /* Group ID of owner */&#xA;       __u16 stx_mode;        /* File type and mode */&#xA;       __u64 stx_ino;         /* Inode number */&#xA;       __u64 stx_size;        /* Total size in bytes */&#xA;       __u64 stx_blocks;      /* Number of 512B blocks allocated */&#xA;       __u64 stx_attributes_mask;&#xA;                              /* Mask to show what's supported&#xA;                                 in stx_attributes */&#xA;&#xA;       /* The following fields are file timestamps */&#xA;       struct statx_timestamp stx_atime;  /* Last access */&#xA;       struct statx_timestamp stx_btime;  /* Creation */&#xA;       struct statx_timestamp stx_ctime;  /* Last status change */&#xA;       struct statx_timestamp stx_mtime;  /* Last modification */&#xA;&#xA;       /* If this file represents a device, then the next two&#xA;          fields contain the ID of the device */&#xA;       __u32 stx_rdev_major;  /* Major ID */&#xA;       __u32 stx_rdev_minor;  /* Minor ID */&#xA;&#xA;       /* The next two fields contain the ID of the device&#xA;          containing the filesystem where the file resides */&#xA;       __u32 stx_dev_major;   /* Major ID */&#xA;       __u32 stx_dev_minor;   /* Minor ID */&#xA;   };&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;No culprits yet, but I suspect IEEE the 'real' pragmatists.&lt;/p&gt;&#xA;&lt;p&gt;*1) NetBSD which claims portability onto anything requires it to have an MMU&lt;/p&gt;&#xA;" OwnerUserId="15798" LastEditorUserId="15798" LastEditDate="2020-10-03T08:59:04.560" LastActivityDate="2020-10-19T06:11:13.020" Title="When if ever was the C language 'int' size altered from the host machine word (register) size into a literal 32 bit size?" Tags="&lt;c&gt;&lt;compilers&gt;" AnswerCount="10" CommentCount="26" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16352" PostTypeId="2" ParentId="16351" CreationDate="2020-09-29T14:37:55.837" Score="5" Body="&lt;p&gt;I don't know about a standard, but Microsoft chose the LLP64 model for 64-bit Windows, which means that everything except pointers stays as if the processor word size were 32-bit.&lt;/p&gt;&#xA;&lt;p&gt;Raymond Chen's blog, The Old New Thing, has an &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20050131-00/?p=36563&quot; rel=&quot;noreferrer&quot;&gt;explanation&lt;/a&gt; for why they made that choice (which builds on a now-dead link to &lt;a href=&quot;https://web.archive.org/web/20050906103124/http://msdn.microsoft.com/library/en-us/win64/win64/abstract_data_models.asp&quot; rel=&quot;noreferrer&quot;&gt;this MSDN page&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;(In short, to make 64-bit porting feasible for pre-&lt;code&gt;uint32_t&lt;/code&gt; code which embeds assumptions about type sizes in its definitions of things like file-formats and binary IPC, and to make it easier for 32-bit and 64-bit builds to be made from a common source during the transition period.)&lt;/p&gt;&#xA;&lt;p&gt;...and, as Patrick Schlüter pointed out and I forgot to mention, the C standard doesn't really say much more than which types are not allowed to be smaller than which other types.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastEditorUserId="1920" LastEditDate="2020-09-29T14:45:03.207" LastActivityDate="2020-09-29T14:45:03.207" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="16353" PostTypeId="2" ParentId="16351" CreationDate="2020-09-29T14:42:22.397" Score="53" Body="&lt;p&gt;The C standard of the language doesn't mandate a 32 bit &lt;code&gt;int&lt;/code&gt;. It defines&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sizeof(char) == 1 per definition &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sizeof(long long) &amp;gt;= sizeof(long) &amp;gt;= sizeof(int) &amp;gt;= sizeof(short) &amp;gt;= sizeof(char)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It also mandates that the constant in &lt;code&gt;limits.h&lt;/code&gt; are at least the values given below&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#define CHAR_BIT 8&#xA;#define CHAR_MAX UCHAR_MAX or SCHAR_MAX&#xA;#define CHAR_MIN 0 or SCHAR_MIN&#xA;#define INT_MAX +32767&#xA;#define INT_MIN-32767&#xA;#define LONG_MAX +2147483647&#xA;#define LONG_MIN -2147483647&#xA;#define LLONG_MAX +9223372036854775807&#xA;#define LLONG_MIN -9223372036854775807&#xA;#define MB_LEN_MAX 1&#xA;#define SCHAR_MAX +127&#xA;#define SCHAR_MIN -127&#xA;#define SHRT_MAX +32767&#xA;#define SHRT_MIN -32767&#xA;#define UCHAR_MAX 255&#xA;#define USHRT_MAX65535&#xA;#define UINT_MAX 65535&#xA;#define ULONG_MAX 4294967295&#xA;#define ULLONG_MAX 18446744073709551615&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This means that &lt;code&gt;int&lt;/code&gt; can be 16 bit or 64 bit, there's no requirement for 32 bit.&lt;/p&gt;&#xA;&lt;p&gt;AFAIK Posix doesn't go beyond that requirement. The only thing that POSIX mandates is that pointer (including function pointer) can be converted to &lt;code&gt;long&lt;/code&gt; and back. This is required for shared objects (dynamic libraries).&lt;/p&gt;&#xA;&lt;p&gt;The standard ISO/IEC 9899:1999 aka C99 can be consulted here&#xA;&lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf&lt;/a&gt;&#xA;There are newer standards (C11) but C99 is imho more relevant.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="7095" LastEditDate="2020-09-29T15:13:52.563" LastActivityDate="2020-09-29T15:13:52.563" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16354" PostTypeId="2" ParentId="16351" CreationDate="2020-09-29T14:51:35.227" Score="33" Body="&lt;p&gt;The C standard only requires that the &lt;code&gt;int&lt;/code&gt; type be at least 16 bits wide. There's no requirement that &lt;code&gt;int&lt;/code&gt; be 32 bits, though it's a very common implementation choice these days.  An exception would be C compilers targeting 8-bit embedded systems which mostly use a 16-bit &lt;code&gt;int&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;(Note the C standard specifically requires that &lt;code&gt;int&lt;/code&gt; be able to hold a value in the range -32,767 to 32,767 inclusive.  There's no requirement that it be able to hold the value -32,768, allowing for sign-magnitude and ones' complement representations.)&lt;/p&gt;&#xA;&lt;p&gt;The first C compiler was written for Unix running on the PDP-11 and used a 16-bit &lt;code&gt;int&lt;/code&gt;. So there wasn't a requirement in the Unix world that &lt;code&gt;int&lt;/code&gt; be 32 bits either. Originally POSIX didn't place any additional requirements on &lt;code&gt;int&lt;/code&gt; over the C standard, but in 2001 POSIX adopted the Single Unix Specification which requires at least a 32-bit &lt;code&gt;int&lt;/code&gt; (though still allowing sign-magnitude and ones' complement representations.)  However, unlike Standard C compliance which is commonly claimed by C compilers, very few current operating systems claim to be fully POSIX/SUS-compliant. Most environments that use a 32-bit &lt;code&gt;int&lt;/code&gt; are doing so voluntarily.&lt;/p&gt;&#xA;&lt;p&gt;These days, with the exception of certain embedded systems mentioned above, a 32-bit &lt;code&gt;int&lt;/code&gt; is the universal choice of C implementations.  In the past there have also been C compilers that used a 36-bit &lt;code&gt;int&lt;/code&gt; (for Honeywell GCOS systems) and a 64-bit &lt;code&gt;int&lt;/code&gt; (for Cray supercomputers), and of course MS-DOS C compilers used a 16-bit &lt;code&gt;int&lt;/code&gt;, but these are all long obsolete.&lt;/p&gt;&#xA;&lt;p&gt;When 64-bit CPUs became a thing, it might have seemed natural for C compilers targeting these CPUs to use a 64-bit &lt;code&gt;int&lt;/code&gt;, but in practice this would've produced slower code because of the increased data size, while adding additional difficulty in porting software to the CPUs.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorDisplayName="user722" LastEditDate="2020-10-01T14:30:42.800" LastActivityDate="2020-10-01T14:30:42.800" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16355" PostTypeId="1" AcceptedAnswerId="16359" CreationDate="2020-09-29T15:48:29.393" Score="15" ViewCount="2076" Body="&lt;p&gt;On early microcomputers it was common to have 40 columns of text with the alternative usually being 32 or 64 for technical reasons as well as ambitious 80 column models that became more common as technology improved and prices for memory and dedicated monitors came down.&lt;/p&gt;&#xA;&lt;p&gt;But the VIC-20 had a rather small 22 column display which makes it very cramped. Did any other microcomputers settle for a simiarly diminutive text mode as the standard for programming in? The only one I can think of is the Bally Astrocade, assuming that we treat the included BASIC cartridge (which displays a 26x11 text mode) as enough to call it a microcomputer and not just a dedicated video game console.&lt;/p&gt;&#xA;" OwnerUserId="15514" LastActivityDate="2020-10-10T15:58:11.633" Title="Besides the VIC-20 did any other micros have fewer than 32 columns available for text mode?" Tags="&lt;display&gt;&lt;text&gt;" AnswerCount="9" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="16357" PostTypeId="2" ParentId="16351" CreationDate="2020-09-29T17:07:54.823" Score="6" Body="&lt;p&gt;When C was invented, there was no particular reason why an implementation would want to use a value for &lt;code&gt;int&lt;/code&gt; which was smaller than a register.  Although the Standard allowed implementations to choose almost any means they wanted to pick the sizes of integer types, the common practice was that, &lt;em&gt;absent any reason to do otherwise&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;char&lt;/code&gt; would be the smallest addressable unit that was at least 8 bits (even platforms with bit-addressable or nybble-addressable storage were required to make all pointers be multiples of &lt;code&gt;char&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;short&lt;/code&gt; would be the smallest practical type that was at least 16 bits.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;long&lt;/code&gt; would be the smallest practical type that was at least 32 bits.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;long long&lt;/code&gt;, when supported, would be the smallest practical type that was at least 64 bits.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;int&lt;/code&gt; would be at least large as &lt;code&gt;short&lt;/code&gt;, but could be the smallest type of at least 32 bits on platforms that could process such values at about the same speed as smaller ones.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;On some platforms like the 68000, 32-bit computations were about 30-50% slower than 16-bit ones, so compilers for that platform often allowed programmers a choice of whether &lt;code&gt;int&lt;/code&gt; should be 16 or 32 bits.  On platforms where there would be a 2:1 speed difference, &lt;code&gt;int&lt;/code&gt; would typically be 16 bits, and on those where there was no speed difference or 32-bit math would be faster, &lt;code&gt;int&lt;/code&gt; would typically be 32 bits, but on the 68000 the speed difference fell right in the middle.&lt;/p&gt;&#xA;&lt;p&gt;Note that it's often considered desirable to have a standard integer type for each each power-of-two size from 8 bits to 64 bits.  If &lt;code&gt;int&lt;/code&gt; were 64 bits, there would only be two standard types that were smaller than 64 bits, which wouldn't be enough to have a type available for each of the common object sizes (8, 16, 32).&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-09-29T17:07:54.823" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16358" PostTypeId="2" ParentId="16351" CreationDate="2020-09-29T17:08:15.233" Score="18" Body="&lt;p&gt;There is no such requirement in standard C. Traditionally, an int was required to be at least 16 bits, though since the mid-1980s I started to write code as if an int was at least 32 bits, confident I did not intend to support older hardware.&lt;/p&gt;&#xA;&lt;p&gt;When we moved to 64-bit systems, it was common in some implementations for int to remain at 32 bits, since this eased porting code that had made that assumption.&lt;/p&gt;&#xA;&lt;p&gt;The first implementation of Unix, and C, was on the PDP-11, a 16-bit machine, so sizeof (int) was 2.  The &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/bits/Interdata/32bit/unix/univWollongong_v6/miller.pdf&quot; rel=&quot;noreferrer&quot;&gt;first port of Unix&lt;/a&gt;, to an Interdata 7/32. made sizeof (int) be 4.&lt;/p&gt;&#xA;&lt;p&gt;But the question is confused on other matters.&lt;/p&gt;&#xA;&lt;p&gt;Unix originally ran on PDP-11 (and without an MMU, either - at least until Thompson and Ritchie got an 11/40), which is a 16-bit machine, and int in C was defined as a 16-bit machine word.&lt;/p&gt;&#xA;&lt;p&gt;None of this is anything to do with file system size limits. 16-bit CPUs could and did support 32-bit file sizes (or larger, but practical concerns may not have made that sensible). 32-bit CPUs could, did, and do support 64-bit file sizes.&lt;/p&gt;&#xA;&lt;p&gt;There is a potential problem with API defined in C terms.  For example, PDP-11's seek() syscall had to become lseek() when disks could support more than 64K blocks, and an int argument was no longer sufficient.&lt;/p&gt;&#xA;&lt;p&gt;Windows on 32-bit hardware (the NT family at least) supported 64-bit file sizes, offsets, etc., by the simple expedient of providing two 32-bit arguments to hold a 64-bit value -- either as two actual function arguments, or as a single struct that had two 32-bit members.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-09-30T21:01:56.700" LastActivityDate="2020-09-30T21:01:56.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16359" PostTypeId="2" ParentId="16355" CreationDate="2020-09-29T17:11:08.963" Score="21" Body="&lt;p&gt;The BASIC Programming cartridge for the Atari 2600 displayed twelve characters per line.&lt;/p&gt;&#xA;&lt;p&gt;The RCA 1802-based VIP used bitmap graphics rather than having a &amp;quot;text mode&amp;quot; as such, but the typical bit map font was five pixels wide on a 64-pixel-wide screen.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-09-29T17:11:08.963" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16360" PostTypeId="2" ParentId="16355" CreationDate="2020-09-29T17:45:32.650" Score="11" Body="&lt;p&gt;Depends on your definition of a &lt;em&gt;microcomputer&lt;/em&gt;, but e.g. &lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?c=936&quot; rel=&quot;noreferrer&quot;&gt;Sharp PC 1210&lt;/a&gt; (and derivatives) had 24 characters per (one) line.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://sk.wikipedia.org/wiki/PMI-80&quot; rel=&quot;noreferrer&quot;&gt;PMI-80&lt;/a&gt; had 9 characters per line, but you might not consider it a true microcomputer.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2020-09-29T17:45:32.650" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16361" PostTypeId="2" ParentId="16349" CreationDate="2020-09-29T18:05:20.917" Score="1" Body="&lt;p&gt;While it doesn't &amp;quot;skip&amp;quot; per-se, if you are playing the game on MAME, you can press the &lt;code&gt;Page Down&lt;/code&gt; key on your keyboard to temporarily unlock the speed throttling and somewhat &amp;quot;fast forward&amp;quot; through intros and such you don't want to wait around for.&lt;/p&gt;&#xA;&lt;p&gt;The key might not be universal, but in my experience it works for anything that isn't emulating a keyboard (e.g. Apple II emulation), so for Donkey Kong it will do just fine.&lt;/p&gt;&#xA;&lt;p&gt;What the key does is simply removes the throttle on the emulation and lets the game run as fast as your computer can run it. Normally, you want a 1MHz 6502 to run at exactly 1MHz so you get the authentic experience. Holding PgDn will possibly get that 6502 running at 20MHz (depending on the raw performance of your computer), so those intro sequences can just blip past until you release the key.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2020-10-30T01:21:19.507" LastActivityDate="2020-10-30T01:21:19.507" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16363" PostTypeId="2" ParentId="16351" CreationDate="2020-09-29T19:51:21.417" Score="9" Body="&lt;p&gt;The book &amp;quot;Writing Solid Code&amp;quot; documents an instance where the size of an int changed.  There is a section which noted that (once upon a time) Microsoft's own internal C code sources often hard-coded the value '2' (bytes) instead of writing 'sizeof(int)', under the theory that &amp;quot;... well, we OWN the C compiler -surely our own compiler group wouldn't change something as fundamental as the size of an int!&amp;quot;.  They then proceeded to do exactly that.  Broke a lot of code - lots of embarrassment all around &lt;em&gt;['course that was back in the 80's]&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19472" LastActivityDate="2020-09-29T19:51:21.417" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16364" PostTypeId="2" ParentId="16269" CreationDate="2020-09-29T19:58:27.410" Score="0" Body="&lt;p&gt;I want to boil down this answer to engineering decisions (as are many choices made in engineering).&lt;/p&gt;&#xA;&lt;p&gt;A good engineer works with limits. One limit at the time was cost for producing the chip. More transistors leads to larger chip size leads to lower yield in the production and quickly increasing costs. In order to keep costs down you remove the &amp;quot;expensive&amp;quot; parts, such as multiplication and division circuits.&lt;/p&gt;&#xA;&lt;p&gt;Did it work? Well, rumors has it that the 6502 was used in Apple computers instead of 6800 because it had a lower cost. So, yes, lower cost worked.&lt;/p&gt;&#xA;&lt;p&gt;If we, playing with numbers here, assume that a 6502 with multiplication would cost 3 times as much -- would it be used? Probably not is my guess.&lt;/p&gt;&#xA;" OwnerUserId="7666" LastActivityDate="2020-09-29T19:58:27.410" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16365" PostTypeId="2" ParentId="16355" CreationDate="2020-09-29T23:43:44.883" Score="8" Body="&lt;p&gt;The Ohio Scientific C1P has a 24x24 text mode.&lt;/p&gt;&#xA;&lt;p&gt;Some computers with 40 and 80 column modes could also do 20 columns such as the Acorn BBC Micro series (Modes 2 &amp;amp; 5), and the Amstrad CPC series (Mode 0).&lt;/p&gt;&#xA;&lt;p&gt;The MSX computers had 32 &amp;amp; 40 column modes (later models also had 80 columns) but could do any number of columns using the WIDTH command. WIDTH 1 is pretty useless but works.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2020-09-29T23:43:44.883" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16366" PostTypeId="2" ParentId="16351" CreationDate="2020-09-30T01:00:11.953" Score="14" Body="&lt;p&gt;If you need a date, then &lt;a href=&quot;http://www.unix.org/version2/pr.html&quot; rel=&quot;noreferrer&quot;&gt;March 12, 1997&lt;/a&gt;.  That's when Single UNIX Specification version 2 (aka &lt;code&gt;UNIX98&lt;/code&gt;) was released. Among other changes to the ISO C standard (via &lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/007908799/xsh/limits.h.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;limits.h&lt;/code&gt;&lt;/a&gt;), &lt;code&gt;INT_MAX&lt;/code&gt; and &lt;code&gt;INT_MIN&lt;/code&gt; were changed to 2,147,483,647 and -2,147,483,647, respectively (the same as &lt;code&gt;LONG_MAX&lt;/code&gt; and &lt;code&gt;LONG_MIN&lt;/code&gt;).  This of course does not mandate a 32-bit int (64-bit ints are compliant) and it doesn't affect the ISO/ANSI C standards.&lt;/p&gt;&#xA;" OwnerUserId="3261" LastEditorUserId="3261" LastEditDate="2020-09-30T03:25:12.220" LastActivityDate="2020-09-30T03:25:12.220" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="16367" PostTypeId="2" ParentId="16355" CreationDate="2020-09-30T02:18:10.720" Score="8" Body="&lt;p&gt;The Dick Smith Super 80 kit was 32x16&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Dick_Smith_Super-80_Computer&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Dick_Smith_Super-80_Computer&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19475" LastActivityDate="2020-09-30T02:18:10.720" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16368" PostTypeId="2" ParentId="16355" CreationDate="2020-09-30T05:37:13.953" Score="8" Body="&lt;p&gt;The &lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=143&quot; rel=&quot;nofollow noreferrer&quot;&gt;Epson HX-20&lt;/a&gt; had 4 lines of 20 characters.&lt;/p&gt;&#xA;" OwnerUserId="17846" LastEditorUserId="6659" LastEditDate="2020-10-10T15:58:11.633" LastActivityDate="2020-10-10T15:58:11.633" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16369" PostTypeId="2" ParentId="16355" CreationDate="2020-09-30T07:26:38.047" Score="5" Body="&lt;p&gt;The &lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?c=1004&quot; rel=&quot;noreferrer&quot;&gt;Interact Home Computer System&lt;/a&gt; and its French reincarnation &lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=151&quot; rel=&quot;noreferrer&quot;&gt;Victor Lambda&lt;/a&gt; had a horrible 12 lines x 17 columns text mode. In fact it had no text mode but just a 112 x 78 graphic mode with 4 colors from 8.&lt;/p&gt;&#xA;&lt;p&gt;So, it was even worse than the VIC-20&lt;/p&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="7095" LastEditDate="2020-09-30T07:32:19.107" LastActivityDate="2020-09-30T07:32:19.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16370" PostTypeId="2" ParentId="16355" CreationDate="2020-09-30T07:31:29.390" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=236&quot; rel=&quot;nofollow noreferrer&quot;&gt;TI-99/4A&lt;/a&gt; had 24 lines of 32 columns but only 28 of them were used by the BASIC. So effectively it had 24x28. Its graphic chip was capable of 24x40 text mode but this was not accessible from Basic and required at least a memory extension (base model had only 256 bytes of memory and the 16 KiB of video memory was used for everything).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?c=163&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tandy Radio Shack MC-10&lt;/a&gt; and its French reincarnation &lt;a href=&quot;https://www.old-computers.com/museum/computer.asp?st=1&amp;amp;c=60&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matra-Hachette Alice&lt;/a&gt; had also only 32 x 16.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastActivityDate="2020-09-30T07:31:29.390" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16371" PostTypeId="2" ParentId="16351" CreationDate="2020-09-30T08:05:35.563" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;With the UNIX crowd, they minimally required an MMU so the word had to be 32bits at least to do memory management without segmentation overhead&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not true. The PDP-11 had a 16 bit word size and a 16 bit address size which meant that user space processes were limited to 64 kilobytes. I'm not 100% certain but I think that &lt;code&gt;int&lt;/code&gt; and &lt;code&gt;char *&lt;/code&gt; were both 16 bits for C compilers targeted at the PDP-11. The PDP 11 ran Unix just fine.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But that did not define the C int.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The C &lt;code&gt;int&lt;/code&gt; was usually but not always selected to be the optimal size for the target processor. I wouldn't say it was a standard but it was an informal &amp;quot;best practice&amp;quot;. For example, the Megamax C compiler that I used with my Atari ST had a 16 bit &lt;code&gt;int&lt;/code&gt; because that was the fastest size on a 68000. It did, however, have a 32 bit pointer size because that was the size of the address registers. That used to cause me all sorts of problems with porting code because a surprising amount of it assumed that &lt;code&gt;int&lt;/code&gt; and &lt;code&gt;char *&lt;/code&gt; were the same size.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, the more sophisticated and (crucially for me) more expensive Mark Williams C used 32 bits for both &lt;code&gt;int&lt;/code&gt; and &lt;code&gt;char *&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The reason I ask is that I notice this sudden appearance of an access barrier where manufactured storage disks easily exceed 2TB which but is pegged by the 'long int's stuck on 32 bit 'int's. But the C int specification should not have forced the 32bit word size that now makes the 32bit semantic incapable of implementing 4TB disk access (by mere recompile) to that of 64bit native word machines?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Any limits of that nature would be far more complicated than simply &amp;quot;the size of an &lt;code&gt;int&lt;/code&gt;&amp;quot;. For example, it might be  the size of an &lt;code&gt;int&lt;/code&gt; times the size of a block or cluster. It really depends on the operating system or the file system, not the compiler. The C definitions of the &lt;code&gt;stat&lt;/code&gt; structure are not prescriptive, they are descriptive. i.e. as a rule, the OS defines how big a thing is and the C declaration has to match it, not the other way around.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2020-09-30T08:05:35.563" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16372" PostTypeId="2" ParentId="16112" CreationDate="2020-09-30T10:17:07.247" Score="2" Body="&lt;p&gt;It's been mentioned already that cards were also used to hold binary data (and programs), specifically, using 2-columns representing 3-bytes. This must have been relatively modern, as prior to the introduction of System-360, IBM's mainframes (IBM 7090 et al) used 6-bit characters, packed 6 to a 36-bit word. I used a (then very old) IBM 7094-II back in the early 1970s and I remember encountering boxes of cards holding binary data. I don't know whether the data was directly encoded (3x12 columns - 36-bits) or whether the data was encoded to ensure some anti-holes were present, ensuring the structural integrity of the card.&lt;/p&gt;&#xA;" OwnerUserId="19481" LastActivityDate="2020-09-30T10:17:07.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16373" PostTypeId="2" ParentId="9751" CreationDate="2020-09-30T14:20:27.820" Score="0" Body="&lt;p&gt;I don't think the no value of 80 bit is correct. At the time of SSE however, large computational problems were not solved on x86, but rather on risc platforms that provided 64bit addressing capability, alpha, sparc, IBM power, SGI etc. There was also a vast performance gap between the P3 and the risc platforms of the time.&lt;/p&gt;&#xA;&lt;p&gt;All of these provided 64bit doubles, and some had support for 128bit floating point registers, but without the math hardware, making it slow.&lt;/p&gt;&#xA;&lt;p&gt;Having 80bit on x86, and 64bit on everything else was a pain, since then you wouldn't get the same answers on the 2 platforms reliably, there is nothing worse than 2 builds of the same code giving slightly different answers, and even worse since if you wrote the 80 bit x86 representation to memory which occupies 128 bits, the format is different to the 128 bit long double on any other platform making data interchange horrible. With doubles you only have to switch the endianess.&lt;/p&gt;&#xA;&lt;p&gt;These days when x64 is so dominant, this argument doesn't hold, but at the time SSE was introduced, it was a big deal.&lt;/p&gt;&#xA;" OwnerUserId="19486" LastActivityDate="2020-09-30T14:20:27.820" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16377" PostTypeId="2" ParentId="9751" CreationDate="2020-09-30T15:47:56.530" Score="1" Body="&lt;p&gt;The D language supports the maximum precision a platform provides. It has defined these 3 base floating point type &lt;code&gt;float&lt;/code&gt; for 32 bits floats, &lt;code&gt;double&lt;/code&gt; for 64 bits floats and &lt;code&gt;real&lt;/code&gt; for maximum of platform. In the case of x86, it's the 80 bits x87 type. The unusual feature is that the compiler still supports x87 even when generating x86_64 code. In 64 bit mode, double will generate code via SSE2 instruction set as do the C compilers, but will still maintain x87 code for &lt;code&gt;real&lt;/code&gt;.&#xA;Contrary to popular belief, x87 is still usable even in 64 bit mode of x86 processors. It might one day be deprecated or even get serious performance regressions, but that is not the rationale behind the specific reason of existence of the &lt;code&gt;real&lt;/code&gt; type in D. It is to include in the language a way to exploit a higher precision when available on a platform (128 bit float in some POWER or SPARC processor).&lt;/p&gt;&#xA;" OwnerUserId="7095" LastActivityDate="2020-09-30T15:47:56.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16378" PostTypeId="1" CreationDate="2020-09-30T17:32:55.050" Score="5" ViewCount="246" Body="&lt;p&gt;At least in the U.S., during the 1970s and 1980s (and likely before), many tollways and other ticket-based systems used to use publicly distributed and collected &amp;quot;IBM-style&amp;quot; punched cards along with automated equipment.  When someone entered a toll way, for example, one would receive a punched card which would be handed to an attendant at the exit.  Presumably, the cards could be fed into a computer to, among other things, produce a report of how much different portions of the tollway were used.  If toll collectors kept stacks of cards in order, and placed a &amp;quot;time of day&amp;quot; card onto the stack every hour, such reports could also include information about rush-hour and non-rush-hour usage compared.&lt;/p&gt;&#xA;&lt;p&gt;Did such systems make any effort to guard against the possibility that a malicious person with a card punch might alter cards so as to not only supply meaningless information, but perhaps disrupt system operations in more serious ways, such as by having a few consecutive motorists at a toll booth submit a JCL control card followed by some cards that were programmed to run malicious code?  Were there ever any incidents of them being attacked in such a fashion?  Or were the set of people with the knowledge that would be needed to perform such an attack and the set of people who would want to carry out such an attack sufficiently disjoint that no such attacks were ever attempted?&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-09-30T17:32:55.050" Title="Were punch-card data-processing systems susceptible to &quot;Bobby Tables&quot;" Tags="&lt;punched-cards&gt;&lt;security&gt;" AnswerCount="0" CommentCount="15" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16379" PostTypeId="2" ParentId="16112" CreationDate="2020-09-30T17:39:17.393" Score="3" Body="&lt;p&gt;More historical folklore...&lt;/p&gt;&#xA;&lt;p&gt;As late as 1978, I worked on META-4 systems at Digital Scientific Corporation that still supported punched card readers, and even had to write microcode to allow the systems to be bootstrap loaded from a single punched card.  These systems emulated IBM 1130 and 1800 computers, which were typically booted from a single punched card.&lt;/p&gt;&#xA;&lt;p&gt;The card only contained 12 &amp;quot;bits&amp;quot; per column, but during the special &amp;quot;initial program load&amp;quot; (IPL) or &amp;quot;boot load&amp;quot;, the 12 bits were mapped into the 16-bit &amp;quot;words&amp;quot; of the main memory at addresses 0-79, then the computer began executing the code starting at address 0.  This code then read the &amp;quot;boot sector&amp;quot; - sector 0 of the primary disk drive, which contained the next sequence to load the operating system.  The mapping of the 12 bits to 16 bits was pretty cute, as the instructions that could be used had to only use those &amp;quot;bits&amp;quot; that were mapped and had to have zero value bits for the 4 instruction bits not provided on the card.&lt;/p&gt;&#xA;" OwnerUserId="19491" LastActivityDate="2020-09-30T17:39:17.393" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16381" PostTypeId="1" AcceptedAnswerId="16384" CreationDate="2020-09-30T20:00:41.460" Score="1" ViewCount="223" Body="&lt;p&gt;I'm designing a Z80 based computer and I want to hook up LEDs to the data, address and control busses (for added cool value). So far, the design is gonna be something like this: One board that the Z80 and RAM sits on, then that plugs into a mainboard with LEDs and slots for cards which connect to the CPU main bus for peripherals such as video or keyboard. Do I need buffers on the mainboard to drive the LEDs, expansion cards or both? What kind of current (and capacitance) can the Z80 CPU handle?&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="19494" LastActivityDate="2020-09-30T20:57:43.167" Title="Do I need buffers to drive LEDs from the Z80's main bus?" Tags="&lt;z80&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2020-10-01T11:51:54.553" ContentLicense="CC BY-SA 4.0" />
  <row Id="16382" PostTypeId="1" CreationDate="2020-09-30T20:45:02.597" Score="8" ViewCount="1666" Body="&lt;p&gt;I recently installed FreeDOS on an old laptop and then transferred some dosbox based GOG games I own to the FreeDOS installation.  The problem is the manuals for these games is in PDF format and I cannot find a working DOS based PDF viewer.&lt;/p&gt;&#xA;&lt;p&gt;The one program I could find, called &lt;code&gt;psview&lt;/code&gt; crashed and gave me this output when I tried it on a PDF:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;TEMP directory: c:\\&#xA;Bad command or filename - 'pdftops'.&#xA;CHDIR failed for 'c:\gs'.&#xA;Bad command or filename - 'gs386'.&#xA;C:\&#xA;Bad command or filename - 'lxpic'.&#xA;File not found: 'C:\TEMP.PS'&#xA;(Couldn't get the rest of output because screen scrolled past really fast)&#xA;PSVIEW collapsed to DOS&#xA;(End of output)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I also tried viewing PDFs in two web browsers that run in FreeDOS called Arachne and Dillo, both in vain.  Any way to view PDF files in FreeDOS?&lt;/p&gt;&#xA;" OwnerUserId="19495" LastEditorUserId="15334" LastEditDate="2021-01-12T22:57:55.873" LastActivityDate="2021-01-12T22:57:55.873" Title="Any tools (that actually work) for viewing PDF files in FreeDOS?" Tags="&lt;file-format&gt;&lt;software-recommendation&gt;&lt;dos&gt;" AnswerCount="5" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16384" PostTypeId="2" ParentId="16381" CreationDate="2020-09-30T20:57:43.167" Score="8" Body="&lt;p&gt;While it's possible a very small Z80 system running at a low clock might survive the bus loading of low current LEDs, realistically you definitely want to use buffers or some sort of driver to power them.&lt;/p&gt;&#xA;&lt;p&gt;Remember, it's not just the Z80 that drives the bus; the data lines are regularly driven by your memory devices, too and those would also have to have sufficient drive capability.&lt;/p&gt;&#xA;&lt;p&gt;If you had a DMA controller (you probably don't...) then it's ability to drive the address lines would be a concern.&lt;/p&gt;&#xA;&lt;p&gt;And of course your LED patterns aren't likely to be all that useful during operation at anything above a single-step or 1 Hz type clock. Though you might see a little bit about some programs on the apparent intensity of the address line LEDs.&lt;/p&gt;&#xA;&lt;p&gt;If you had DRAM (you probably don't...) you'd likely want to use an &lt;em&gt;enable&lt;/em&gt; on the address buffers to keep the DRAM refresh cycles from confusing the picture.&lt;/p&gt;&#xA;" OwnerUserId="1874" LastActivityDate="2020-09-30T20:57:43.167" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16385" PostTypeId="2" ParentId="16382" CreationDate="2020-09-30T22:42:32.963" Score="2" Body="&lt;p&gt;Looks like Acrobat Reader 3.0 might be the latest version of Acrobat Reader that will work under Windows 3.11, which you can install in a DOS environment.&lt;/p&gt;&#xA;&lt;p&gt;If you have enough disk space, and are willing to replace FreeDOS with an actual MS-DOS 6.22 install, you can try installing Windows 3.x and use that to read PDFs when needed.&lt;/p&gt;&#xA;" OwnerUserId="746" LastActivityDate="2020-09-30T22:42:32.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16386" PostTypeId="2" ParentId="16382" CreationDate="2020-09-30T22:47:41.507" Score="3" Body="&lt;p&gt;A long time ago there was an official release of Acroreader for DOS.  I assume it would work with FreeDOS, but I don't know.  I also don't know where you might find a copy, but if you search it is probably still out there.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2020-09-30T22:47:41.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16387" PostTypeId="2" ParentId="16382" CreationDate="2020-09-30T22:57:35.700" Score="18" Body="&lt;p&gt;I discovered the answer on my own.  Turns out PSVIEW requires GhostScript, PDFTOPS, and LXPIC to be installed on the hard drive in order to run.  GhostScript must be placed in 'C:\gs'.  PDFTOPS and LXPIC must be in a directory mentioned in the path environment variable set in 'AUTOEXEC.BAT'.&lt;/p&gt;&#xA;" OwnerUserId="19495" LastActivityDate="2020-09-30T22:57:35.700" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16388" PostTypeId="2" ParentId="16351" CreationDate="2020-10-01T01:01:07.563" Score="2" Body="&lt;p&gt;As a couple of people have noted, Unix originally ran on the PDP-11,¹ which had 16-bit pointers and &lt;code&gt;int&lt;/code&gt;s. The original PDP-11/20, which Unix first ran on, had no MMU, but one was added in the PDP-11/45, which was still 16-bit. By V6, Unix implemented a form of virtual memory by copying entire programs in and out of memory as needed.&lt;/p&gt;&#xA;&lt;p&gt;(Interesting side-note: &lt;a href=&quot;https://www.tuhs.org/cgi-bin/utree.pl?file=V1/sh.s&quot; rel=&quot;nofollow noreferrer&quot;&gt;the shell on V1&lt;/a&gt; had about 350 lines of &lt;em&gt;assembler&lt;/em&gt; source code. &lt;em&gt;Large&lt;/em&gt; programs, like the C compiler and the assembler, were split into two executables, which communicated using temporary files. PDP-11 Unix programs were probably &lt;em&gt;too small&lt;/em&gt; to page! Paging, like 32-bit computing, was introduced by the port of BSD to the VAX.)&lt;/p&gt;&#xA;&lt;p&gt;Beyond that, &lt;a href=&quot;https://en.wikipedia.org/wiki/Xenix&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xenix&lt;/a&gt; ran on 8086s (with a non-standard MMU, so not 100% IBM-compatible) and 80286s, with a segmented memory architecture and 32-bit pointers but 16-bit &lt;code&gt;int&lt;/code&gt;s.&lt;/p&gt;&#xA;&lt;p&gt;That had interesting consequences when passing a literal &lt;code&gt;0&lt;/code&gt; to a K&amp;amp;R C function taking a pointer (no prototypes back then!), or to a variadic function like &lt;code&gt;execl&lt;/code&gt;. I think things like the &lt;code&gt;NULL&lt;/code&gt; symbolic constant come from that background, where an unambiguously pointer-sized &lt;code&gt;0&lt;/code&gt; was needed.&lt;/p&gt;&#xA;&lt;p&gt;(According to &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/1stEdman.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;DMR&lt;/a&gt;, the original Unix machine had 24KB of memory installed, which is a bit larger than the original IBM PC's 16KB, but less than half of what a 16-bit address space can handle. &lt;a href=&quot;https://github.com/jserv/unix-v1/blob/master/notes/machine.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;This link&lt;/a&gt; says V1 processes had 8KB of 'userspace' memory available to them. Of course, by the 1980s Unix programs had expanded to require a bit more memory!)&lt;/p&gt;&#xA;&lt;p&gt;¹ Technically Unix development started on the PDP-7, but development moved to the PDP-11 before V1, and long before anything we would recognize as 'Unix' today. (The kernel was rewritten in C &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Unix#1970s&quot; rel=&quot;nofollow noreferrer&quot;&gt;for V4&lt;/a&gt;, in 1973, and for ease of development, not for portability yet.) V6 (1975), which was the first widely-distributed Unix, and V7 (1979), which was the common ancestor of all 'modern' Unixes, including the *BSDs, both ran primarily on the PDP-11. (Although by V6 porting efforts to other machines had started.)&lt;/p&gt;&#xA;" OwnerUserId="222" LastEditorUserId="222" LastEditDate="2020-10-19T06:11:13.020" LastActivityDate="2020-10-19T06:11:13.020" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16390" PostTypeId="2" ParentId="16355" CreationDate="2020-10-01T06:07:29.717" Score="0" Body="&lt;p&gt;Would the Wang 720 &amp;quot;programmable calculator&amp;quot; count? It had a cassette tape for storage, and a typeball hooked up to a plotter mechanism. I recall writing a loader that allowed several programs to be written to tape, where the loader allowed a number to be input to select which program to load.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.oldcalculatormuseum.com/wang720.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.oldcalculatormuseum.com/wang720.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4660" LastActivityDate="2020-10-01T06:07:29.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16392" PostTypeId="1" CreationDate="2020-10-01T09:59:04.147" Score="6" ViewCount="244" Body="&lt;p&gt;In 1972, when I was 16, I was sent on a one-week computing course at the local technical college in Worcester (UK). I was one of a group of girls who were intending to take Maths A-level the following year.&lt;/p&gt;&#xA;&lt;p&gt;One of the interesting things I remember was being shown how to use an 'analog computer' to solve quadratic equations. They were open circuit boards, 12-15&amp;quot; square, and you plugged in cables with banana plugs to set up the equation to solve. I don't remember much else about them, but I have often wondered whether they had a real world use, and if so, when and why they became obsolete.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone remember these?&lt;/p&gt;&#xA;&lt;p&gt;[I have to say that that week put me off computers for ten years, which I spent learning librarianship, hating that, then becoming a 'fine wirewoman' for a lift control company. I did eventually get into computing via that route, and took a degree in Computer Systems Engineering in 1993.]&lt;/p&gt;&#xA;" OwnerUserId="19502" LastActivityDate="2020-10-01T14:51:43.623" Title="Does anyone remember analog computers in the early 70s?" Tags="&lt;hardware&gt;&lt;analogue-computer&gt;" AnswerCount="4" CommentCount="7" ClosedDate="2020-10-01T17:14:05.380" ContentLicense="CC BY-SA 4.0" />
  <row Id="16393" PostTypeId="2" ParentId="16392" CreationDate="2020-10-01T12:10:26.690" Score="5" Body="&lt;p&gt;I'm a few years younger than you (I was 13 in 1972), but I remember them. My college roommate had an old (and very crusty) &lt;a href=&quot;https://www.nutsvolts.com/magazine/article/restoring-the-heathkit-es-400-computer&quot; rel=&quot;noreferrer&quot;&gt;Heathkit ES-400&lt;/a&gt; analog computer in his family's barn back home. I don't think it would have been capable of being powered up without a lot of cleaning and restoration.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gKCSS.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gKCSS.jpg&quot; alt=&quot;Heathkit ES-400&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;One summer during high school (1975, IIRC), I also spent a week at a &amp;quot;summer camp&amp;quot; at the US Naval Academy, where they showed us a much larger rack-mounted analog computer.&lt;sup&gt;1&lt;/sup&gt; As I recall, they were demonstrating its use in simulating vehicle suspensions — a kind of &amp;quot;hardware-in-the-loop&amp;quot; simulation, in which they had a real wheel rolling over real terrain. A sensor converted the wheel's vertical position into an analog signal, and the computer then simulated the vehicle response, allowing parameters such as sprung weight, spring and damper constants, etc. to be &amp;quot;dialed in&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Analog computers were also used in real-time industrial process control — the sort of thing for which you'd write a PID loop on a microcontroller today.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Actually, now that I think about it, this may have been a hybrid computer, with both analog and digital sections. Something like &lt;a href=&quot;https://image.slidesharecdn.com/introductionofcomputer-121207043825-phpapp01/95/introduction-of-computer-6-638.jpg?cb=1354855545&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; (from &lt;a href=&quot;https://www.slideshare.net/prathapkr/introduction-of-computer-15532396&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="4183" LastEditorUserId="4183" LastEditDate="2020-10-01T12:17:25.823" LastActivityDate="2020-10-01T12:17:25.823" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16394" PostTypeId="2" ParentId="16392" CreationDate="2020-10-01T12:16:02.460" Score="5" Body="&lt;p&gt;Yes. Not only do I remember analogue computers, but I have used one.&lt;/p&gt;&#xA;&lt;p&gt;My Leeds University computer science course in the mid-1970s had an analogue computer programming module.&lt;/p&gt;&#xA;&lt;p&gt;The computer was 2 or 3 racks, if I recall correctly. I think lethal voltages were involved, but that could be faulty memory.&lt;/p&gt;&#xA;&lt;p&gt;Programming involved patching together your 'equations' from various computing elements: inductors, capacitors, and operational amplifiers.  Results were viewable on an oscilloscope display, or could be sent to a graph plotter.&lt;/p&gt;&#xA;&lt;p&gt;AFAIK, the equipment was more-or-less obsolete even then. The course module existed because the computer did.  The 'why' they became obsolete seems straightforward: because stored-program digital computers became available and capable of solving the same sort of things by numerical methods. Programming was easier (didn't involve manual plugging), programs could be saved without having a room full of plugboards, programs could be easily communicated to others, several people could use the computer at the same time, etc.&lt;/p&gt;&#xA;&lt;p&gt;I cannot so far find a photo online, unfortunately.&lt;/p&gt;&#xA;&lt;p&gt;At about the same time, the UK electronics hobbyist magazine 'Practical Electronics' published plans for the Practical Electronics Analogue Computer in several monthly installments, but that was beyond my skill and budget at the time (and still is beyond my skill).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-10-01T12:39:08.243" LastActivityDate="2020-10-01T12:39:08.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16395" PostTypeId="1" AcceptedAnswerId="16396" CreationDate="2020-10-01T12:54:05.687" Score="25" ViewCount="5425" Body="&lt;p&gt;In most versions of DOS, when they are started from a medium that lacks an &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; file, the very first thing &lt;code&gt;COMMAND.COM&lt;/code&gt; does is ask the user to confirm the current date and time:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Starting PC DOS...&#xA;&#xA;Current date is Thu 10-01-2020&#xA;Enter new date (mm-dd-yy): &#xA;Current time is  9:42:41.44a&#xA;Enter new time: &#xA;&#xA;&#xA;PC DOS Version 7.10&#xA;             (C)Copyright International Business Machines Corp 1981-2002.&#xA;&#xA;A:\&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This behaviour persisted until very late versions of DOS. Microsoft removed it only as late as in MS-DOS 7.0 (i.e. Windows 95), while IBM has never removed it from PC DOS (transcript above comes from PC DOS 7.10, &lt;a href=&quot;http://public.dhe.ibm.com/systems/support/system_x/31r1035.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;downloaded from IBM themselves&lt;/a&gt;); DR-DOS likewise kept it until its very last versions. MS-DOS 1.0 will even &lt;em&gt;require&lt;/em&gt; the user to enter a date unless &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; is present, and wouldn’t proceed to a command prompt otherwise; later versions relaxed this, allowing the user to press Enter to confirm the currently set date. Even FreeCOM replicates this behaviour (as of 0.84-pre2).&lt;/p&gt;&#xA;&lt;p&gt;This behaviour doesn’t seem necessary. Standard PC hardware includes a real-time clock powered by a battery; this allows current date and time to be maintained across power cycles, when the rest of the hardware is otherwise not functioning. It should be safe for the OS to assume that the current date and time are already set correctly upon booting.&lt;/p&gt;&#xA;&lt;p&gt;Why is this behaviour present, why was it tied to the presence of &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; and why did it persist for so long?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-23T14:04:34.170" LastActivityDate="2021-02-23T14:04:34.170" Title="Why does DOS ask for the current date and time upon booting?" Tags="&lt;ibm-pc&gt;&lt;boot&gt;&lt;dos&gt;&lt;rtc&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16396" PostTypeId="2" ParentId="16395" CreationDate="2020-10-01T12:54:05.687" Score="58" Body="&lt;p&gt;Because it used to be necessary.&lt;/p&gt;&#xA;&lt;p&gt;While a battery-powered real-time clock is standard today, this wasn’t always the case. The very first IBM 5150 did not include an RTC chip; the system clock was maintained by the PIT interrupt running on the CPU, which in particular meant that disabling interrupts halted the  system clock. When the computer was turned off, there was no hardware inside to maintain the clock. &lt;a href=&quot;http://www.minuszerodegrees.net/5150_5160/rtc_type_examples/5150_5160_rtc_type_examples.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;A number of third-party extension boards were available&lt;/a&gt; to overcome this problem; only with the PC/AT did an RTC chip become a built-in feature.&lt;/p&gt;&#xA;&lt;p&gt;The above part is uncontroversial. The rest of this answer is considerably more speculative.&lt;/p&gt;&#xA;&lt;p&gt;Skipping the date and time prompt when &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; is present allowed the user to establish the current date and time at boot-up in some other way than prompting for manual input (which was probably exploited by drivers for the above-mentioned devices). In fact, this seems to have been the original purpose of &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; in the first place: the &lt;code&gt;/D&lt;/code&gt; switch used to skip processing &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; was added primarily to suppress the date and time prompt, as implied by &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/04a3d20ff411409ab98474892b2bb1713bde0f7f/v2.0/source/COMMAND.ASM#L42-L43&quot; rel=&quot;nofollow noreferrer&quot;&gt;a comment in source code&lt;/a&gt; and overtly stated in &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/04a3d20ff411409ab98474892b2bb1713bde0f7f/v2.0/source/UTILITY.txt#L48-L49&quot; rel=&quot;nofollow noreferrer&quot;&gt;internal documentation&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;While an RTC eventually became a standard PC feature, Microsoft (and apparently Digital Research which developed DR DOS) probably wanted to maintain support for hardware which lacked it (including non-PC-compatible hardware), so instead of requiring the user to input the date and time, DOS started to allow the user to confirm the current setting. By the time computers without an RTC became vanishingly rare, this behaviour became a non-issue, as most computers would have an &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; file present anyway, if only to set the &lt;code&gt;PATH&lt;/code&gt; environment variable. DOS vendors therefore focused their attention on other concerns.&lt;/p&gt;&#xA;&lt;p&gt;Also, even a battery-powered RTC would occasionally need to be manually adjusted for Daylight Saving Time and to correct clock skew (thanks @Ron Maupin for pointing the latter out), as the RTC on DOS computers was, infamously, &lt;a href=&quot;http://www.os2museum.com/wp/troubled-time/&quot; rel=&quot;nofollow noreferrer&quot;&gt;usually set to local time&lt;/a&gt; and tended to drift a lot (as it does to this day, but now at least we have NTP to take care of it). Prompting the user to confirm the current time could serve as a mechanism ensuring the clock is set more-or-less accurately and that the DST adjustment is not overlooked. (This seems a weak justification now, especially given it’s a speculative one, and seems to contradict the &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; connection somewhat. Myself, I would expect this behaviour to instead train the user to press Enter twice each time the system boots up without paying attention to the prompt. But maybe it is only in hindsight that we understand effects like banner blindness.)&lt;/p&gt;&#xA;&lt;p&gt;Windows 95 offered an option to create a DOS startup disk; those would often boot without an &lt;code&gt;AUTOEXEC.BAT&lt;/code&gt; file — though not on non-English versions, where it was used to set up the console code page. This would have created an inconsistency where the English version would prompt the user for the current date and time, but non-English versions would not. Only then did Microsoft decide that asking for the date and time on boot-up is superfluous and removed it. (Even the DST justification wouldn’t have made sense any more, as DST adjustments are instead handled by the graphical interface.) Other DOS vendors apparently never felt the need to address it.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-12-27T14:13:18.023" LastActivityDate="2020-12-27T14:13:18.023" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16397" PostTypeId="2" ParentId="16392" CreationDate="2020-10-01T13:16:49.337" Score="3" Body="&lt;p&gt;Original analogue computing was the only way to solve complex math. Already 100+ years ago major ports had huge analogue computers to calculate tide tables.&lt;/p&gt;&#xA;&lt;p&gt;It wasn't until the late 1960s /early 70s that digital computers became a sensible tool in for complex calculations, and even then they were still way too slow for many questions/usages. Especially when it was about solving in real time, like for simulations etc.&lt;/p&gt;&#xA;&lt;p&gt;New analogue computers were designed way into the 1980s.&lt;/p&gt;&#xA;&lt;p&gt;And just recently a Startup was founded in Germany to build analogue/dgital hybrid processors using kind of an FPGA alike structure to allow programming of analogue configuration on the fly.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-10-01T13:16:49.337" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16398" PostTypeId="2" ParentId="16392" CreationDate="2020-10-01T14:51:43.623" Score="1" Body="&lt;p&gt;I haven't seen one ever, but we did still study them in school, in the last year of my electronics bachelor degree, which was 1988-1989. This was in the course &amp;quot;Operational Amplifiers&amp;quot;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Operational amplifiers as sum and difference amplifiers&lt;/li&gt;&#xA;&lt;li&gt;Operational amplifiers using a diode to build logarithmic and exponential amplifiers&lt;/li&gt;&#xA;&lt;li&gt;Taking these circuits together, it becomes possible to implement analog multipliers and dividers (input -&amp;gt; log -&amp;gt; sum or difference -&amp;gt; exponential -&amp;gt; result)&lt;/li&gt;&#xA;&lt;li&gt;Integration and differentiation are simple operations with operational amplifiers&lt;/li&gt;&#xA;&lt;li&gt;Taken all together, it becomes possible to build circuits which implement various equations&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And, yes, we made (theoretical) exercises designing such systems. I suppose it was a way to give more diverse exercises on operational amplifiers.&lt;/p&gt;&#xA;&lt;p&gt;On second thought, I think I might have seen such a setup in one of the electronic labs at school, kept a bit as a curiosity, a think that could be wired up manually.&lt;/p&gt;&#xA;" OwnerUserId="7388" LastActivityDate="2020-10-01T14:51:43.623" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16399" PostTypeId="2" ParentId="15185" CreationDate="2020-10-01T15:10:55.983" Score="3" Body="&lt;p&gt;You could try getting in touch with &lt;a href=&quot;http://www.vintage-icl-computers.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.vintage-icl-computers.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I was browsing through their pages earlier and see they have loads of old software disks and a DRS PWS M80 that looks to be running MS-DOS 4.1 &amp;amp; Windows 1.03&lt;/p&gt;&#xA;" OwnerUserId="19508" LastActivityDate="2020-10-01T15:10:55.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16400" PostTypeId="1" AcceptedAnswerId="16403" CreationDate="2020-10-01T15:20:21.110" Score="3" ViewCount="353" Body="&lt;p&gt;For scientific and high performance computing Algol was considered, and possibly is still considered by some, to be a more powerful language than Fortran. For the same algorithm encoded in both languages and using the same data, which of the two languages executed programs the fastest?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Edit&lt;/p&gt;&#xA;&lt;p&gt;My experience has been if you want to do intensive number crunching, such as might be used for, say, weather forecasting, use Fortran. In the past that used to be FORTRAN 77, now it's modern Fortran (90, onward ...).&lt;/p&gt;&#xA;&lt;p&gt;I know some software packages used by the mining industry, originally written in FORTRAN 77 in the 1980s and 1990s were later rewritten using C, just to get them &amp;quot;modernized&amp;quot;. Apparently computational speeds were reasonably similar.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.moreisdifferent.com/2015/07/16/why-physicsts-still-use-fortran/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Physicists and those involved with the cosmic sciences&lt;/a&gt; have need of high speed computer processing and they still use Fortran, whether it be old FORTRAN 77 or modern Fortran 90/95/03/08 ...&lt;/p&gt;&#xA;&lt;p&gt;To moderize, some use C++, but FORTRAN/Fortran is still part of their software toolkit and will be for some time, irrespective of implementation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Python, which is the darling of computer scientists, is usually about 100 times slower, but that is the nature of interpreted code. Python is unsuited for heavy numerical computation, ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;... irrespective of implementation. This is partly why &lt;a href=&quot;https://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technology&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIT&lt;/a&gt; developed &lt;a href=&quot;https://en.wikipedia.org/wiki/Julia_(programming_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Julia&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In my reading, a number of people have commented how Algol was so much better or preferred than FORTRAN.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I. D. Hill, &lt;a href=&quot;https://fortran.bcs.org/2007/jubilee/fortran.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;FORTRAN versus Algol&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Josef Illes, &lt;a href=&quot;https://fortran.bcs.org/2007/jubilee/jicomments.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;My comments on FORTRAN versus Algol&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.semanticscholar.org/paper/A-Brief-Description-and-Comparison-of-Programming-%2C-Mathur/282912a2e0f4553ec6ba80308a58ce712fe39078&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Brief Description and Comparison of Programming Languages FORTRAN&#xA;, ALGOL , COBOL , and LISP 1 . 5&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This then begs the question, for a given implementation, was Algol faster than FORTRAN?&lt;/p&gt;&#xA;" OwnerUserId="19504" LastEditorUserId="19504" LastEditDate="2020-10-01T22:23:02.173" LastActivityDate="2020-10-01T22:23:02.173" Title="Which language was faster at executing programs, Algol or Fortran?" Tags="&lt;fortran&gt;&lt;algol&gt;" AnswerCount="2" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16402" PostTypeId="2" ParentId="16112" CreationDate="2020-10-01T16:48:58.760" Score="0" Body="&lt;p&gt;One or two things not mentioned on this trip down memory lane.&lt;/p&gt;&#xA;&lt;p&gt;Columns 73-80 were used for sequence numbers on fortran (and probably other) source code cards because the IBM card readers on the 7090 series computers did not read those columns; they read the card as 24 36 bit words.&lt;/p&gt;&#xA;&lt;p&gt;We did use binary cards on CDC 3600 computers to store compiled programs and I remember patching such decks sometimes actually replacing a hole with a chad from the scrap bin in the key punch&lt;/p&gt;&#xA;&lt;p&gt;I saw but did not use cards with circular holes; I think these were used on early Sperry Univac systems.&lt;/p&gt;&#xA;" OwnerUserId="19512" LastActivityDate="2020-10-01T16:48:58.760" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16403" PostTypeId="2" ParentId="16400" CreationDate="2020-10-01T17:08:36.843" Score="3" Body="&lt;p&gt;Theoretically, &lt;strong&gt;assuming two equally optimizing compilers&lt;/strong&gt;, an Algol program may be either faster than a Fortran program implementing the same algorithm, if in Algol all subroutine parameters are declared as &lt;code&gt;value&lt;/code&gt;, and accessed from within the subroutine more efficiently that in Fortran (where everything is passed &lt;a href=&quot;https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_reference&quot; rel=&quot;nofollow noreferrer&quot;&gt;by reference&lt;/a&gt;); or slower, if they are not, and are passed &lt;a href=&quot;https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name&quot; rel=&quot;nofollow noreferrer&quot;&gt;by name&lt;/a&gt;, resulting in re-evaluation of the actual argument every time when the formal argument is needed.&lt;/p&gt;&#xA;&lt;p&gt;Also there may be a difference in computing index expressions and in memory access pattern due to the difference in array layout between Algol and Fortran (row-first or column-first), resulting in a difference in performance one way or the other.&lt;/p&gt;&#xA;&lt;p&gt;In my experience, though, more effort was put into adding optimizations to Fortran compilers rather than Algol compilers due to greater demand.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-10-01T17:08:36.843" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16404" PostTypeId="2" ParentId="16112" CreationDate="2020-10-01T17:55:55.057" Score="-2" Body="&lt;p&gt;When I worked with keypunches and card readers, the most common issue I faced was a jammed keypunch. You could often clear a keypunch with a card saw, but sometimes one of the punches stuck down, and then you needed a service call to IBM for a repair.&lt;/p&gt;&#xA;&lt;p&gt;One of the things I most dreaded was dropping someone's card deck. It happened to all of us, and there was really nothing to do but collect and rubber band the cards and attach a note of apology. Most user's didn't mark or number the cards, so it wasn't easy to correctly order the deck.&lt;/p&gt;&#xA;" OwnerUserId="19515" LastActivityDate="2020-10-01T17:55:55.057" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16405" PostTypeId="2" ParentId="16382" CreationDate="2020-10-01T17:56:28.553" Score="0" Body="&lt;p&gt;I think the last Acrobat for DOS was version 1&#xA;Acrobat 1.0 for DOS&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://winworldpc.com/download/48c5bdc3-ba6a-18c3-9a11-c3a4e284a2ef&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://winworldpc.com/download/48c5bdc3-ba6a-18c3-9a11-c3a4e284a2ef&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6766" LastActivityDate="2020-10-01T17:56:28.553" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16407" PostTypeId="2" ParentId="16400" CreationDate="2020-10-01T18:51:22.287" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;For scientific and high performance computing Algol was considered, and possibly is still considered by some, to be a more powerful language than Fortran.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Was (is) it? It might be great to have some reference to this.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For the same algorithm encoded in both languages and using the same data, which of the two languages executed programs the fastest?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A serious would depend on many parameters not given, like:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;what time it is about&lt;/li&gt;&#xA;&lt;li&gt;what machine&lt;/li&gt;&#xA;&lt;li&gt;what configuration&lt;/li&gt;&#xA;&lt;li&gt;what compilers are to be compared&lt;/li&gt;&#xA;&lt;li&gt;which algorithm&lt;/li&gt;&#xA;&lt;li&gt;which implementation (of the algorithm)&lt;/li&gt;&#xA;&lt;li&gt;how close it is done to the machine structure&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;and so on.&lt;/p&gt;&#xA;&lt;p&gt;Or as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16400/which-language-was-faster-at-executing-programs-algol-algol-60-or-algol-68-or#comment55210_16400&quot;&gt;another-dave nicely put it&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr - languages don't execute programs; implementations do.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-10-01T18:51:22.287" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16408" PostTypeId="1" AcceptedAnswerId="16412" CreationDate="2020-10-01T19:17:23.700" Score="10" ViewCount="2011" Body="&lt;p&gt;It's well known the X11 is capable of displaying a program's graphics output remotely.&lt;/p&gt;&#xA;&lt;p&gt;I checked the source code of the earliest version of X I found (X10R3, from 1986), and I found that this version was also capable of doing this (I checked &lt;code&gt;XOpenDisplay()&lt;/code&gt;, and it uses BSD sockets, so it must have supported remote displaying).&lt;/p&gt;&#xA;&lt;p&gt;I wonder, was X1 (from 1984) capable of doing the same? Or is there an even earlier system, which was capable of doing this?&lt;/p&gt;&#xA;" OwnerUserId="19516" LastActivityDate="2020-10-04T20:55:18.127" Title="Which system was the first which was capable of running graphics programs remotely?" Tags="&lt;history&gt;&lt;graphics&gt;&lt;xwindow-x11&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16409" PostTypeId="1" CreationDate="2020-10-01T19:53:10.680" Score="5" ViewCount="126" Body="&lt;p&gt;One of the CPU accelerators for the Apple II series is the RocketChip, which came in 5MHz and 10MHz versions. It came with a floppy disk that contained a number of utilities for manipulating the behavior of the chip, including CPU speed, slot caching, acceleration of the monitor WAIT routine and so forth.&lt;/p&gt;&#xA;&lt;p&gt;One of the features of the chip was to automatically slow down the CPU whenever the speaker was accessed at location &lt;code&gt;$C030&lt;/code&gt;. When the chip was running at full 5MHz speed, this would cause tight operations like the system beep to sound normal while the rest of the machine ran fast. This default behavior was settable by one of the included utilities called &lt;code&gt;AUDIO.NORMAL&lt;/code&gt;. If you wanted to disable this setting and instead have the system run full speed when clicking the speaker, another utility was included called &lt;code&gt;AUDIO.DISTORTED&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;That being said, there were three other audio-related utilities included: &lt;code&gt;AUDIO.SILENT&lt;/code&gt;, &lt;code&gt;AUDIO.HIFI&lt;/code&gt;, and &lt;code&gt;AUDIO.MUSIC&lt;/code&gt;. While the first one really speaks for itself (it simply ignores access to the speaker's &lt;code&gt;$C030&lt;/code&gt; location), the other two have always been a bit of a mystery to their actual function. The manual - in all its 14 pages of glory - only briefly acknowledges the HIFI and MUSIC tools saying that those modes will slow down the Apple during game play. Helpful, for sure.&lt;/p&gt;&#xA;&lt;p&gt;So my question is, has anyone ever figured out what exactly the HIFI and MUSIC settings actually did?&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2020-10-04T11:15:28.790" Title="What are the HIFI and MUSIC modes of the RocketChip?" Tags="&lt;apple-ii&gt;&lt;accelerators&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16410" PostTypeId="2" ParentId="16408" CreationDate="2020-10-01T20:19:48.277" Score="2" Body="&lt;p&gt;Programs written in the PostScript graphics programming language (1984) typically ran on a Motorola 68000 CPU remotely from the host computer.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-10-01T20:19:48.277" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16411" PostTypeId="2" ParentId="16408" CreationDate="2020-10-01T20:41:57.550" Score="9" Body="&lt;p&gt;Back in the 1970s, you could run a program on a DECsystem-10 that would display graphics on a  DEC &lt;a href=&quot;https://en.wikipedia.org/wiki/DEC_GT40&quot; rel=&quot;nofollow noreferrer&quot;&gt;GT-42&lt;/a&gt; (which was basically a PDP 11/10 with a video display).  The GT-42 was connected via serial link, probably 20mA loop, since it was several hundred yards away from the DECsystem-10.&lt;/p&gt;&#xA;&lt;p&gt;Structurally, this is the same arrangement as an X-terminal (not xterm, that's a different thing altogether).&lt;/p&gt;&#xA;&lt;p&gt;I recall using &lt;a href=&quot;https://dl.acm.org/doi/10.1145/356744.356748&quot; rel=&quot;nofollow noreferrer&quot;&gt;GINO-F&lt;/a&gt; on the DECsystem-10 for simple graphing applications. I also wrote a &lt;a href=&quot;https://en.wikipedia.org/wiki/Tic-tac-toe&quot; rel=&quot;nofollow noreferrer&quot;&gt;noughts-and-crosses&lt;/a&gt; game that used the GT42's light pen for interaction.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="19547" LastEditDate="2020-10-04T17:32:05.197" LastActivityDate="2020-10-04T17:32:05.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16412" PostTypeId="2" ParentId="16408" CreationDate="2020-10-01T21:20:52.957" Score="20" Body="&lt;p&gt;I suppose what you are looking for are graphics terminals: systems that receive display instructions over a (relatively) slow connection, like a network or a serial line, and construct and display an image based on that information.&lt;/p&gt;&#xA;&lt;p&gt;The earliest such graphics terminal I am aware of is the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_2250&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 2250&lt;/a&gt; from 1964, which connected to an IBM 360 mainframe. One such terminal cost around US$280k at the time, equivalent to $1.8m+ today, which might go some way to explain why we don't typically associate graphics terminals (or, in fact any kind of the CRT&#xA;terminals, despite the 2260) with the 360 era, even though the technology was there.&lt;/p&gt;&#xA;&lt;p&gt;Graphics terminals became more affordable in the 1970s. Two popular graphics terminals of that era include the include the &lt;a href=&quot;https://en.wikipedia.org/wiki/DEC_GT40&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEC GT-42&lt;/a&gt; mentioned by another-dave, and the storage tube based &lt;a href=&quot;https://en.wikipedia.org/wiki/Tektronix_4010&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tektronix 4010&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-10-04T20:55:18.127" LastActivityDate="2020-10-04T20:55:18.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16413" PostTypeId="2" ParentId="8702" CreationDate="2020-10-01T21:42:04.710" Score="3" Body="&lt;p&gt;Others have covered the bit that CP/M did not provide any abstraction of the output device so each program needing it, had to be instructed in what characters (usually escape sequences) should be sent to the console to do a specific task.&lt;/p&gt;&#xA;&lt;p&gt;I just want to mention that WordStar not only had the ability to shortcut printing out menus and other information by pressing a key (which was then interpreted) but also the ability to write directly to display memory to get incredibly faster output.  To my knowledge no other commercial program supported that.  It even saved memory so larger documents could be edited.&lt;/p&gt;&#xA;&lt;p&gt;It is described in &lt;a href=&quot;http://www.bitsavers.org/pdf/microPro/Wordstar_3.0/Wordstar_3.0_Installation_Manual_May81.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.bitsavers.org/pdf/microPro/Wordstar_3.0/Wordstar_3.0_Installation_Manual_May81.pdf&lt;/a&gt; in the section &amp;quot;DIRECT STORAGE ON A VIDEO BOARD&amp;quot; on page 6-5.&lt;/p&gt;&#xA;" OwnerUserId="447" LastEditorUserId="447" LastEditDate="2020-10-02T14:03:16.547" LastActivityDate="2020-10-02T14:03:16.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16416" PostTypeId="2" ParentId="3314" CreationDate="2020-10-01T22:17:09.737" Score="4" Body="&lt;p&gt;I wrote loads of ZX Spectrum games in the 80’s for Firebird, Masterteonic and Software Projects. I had a Tatung Einstein hooked up to a spectrum via a custom RS232 cable. I had a program running on the Einstein that let me code in Z-80 assembler before porting it over to the spectrum to test. The port took about 10 seconds which allowed for rapid development. The Einstein also had a built in drive and diskettes which made life a lot easier too.&lt;/p&gt;&#xA;" OwnerUserId="19522" LastActivityDate="2020-10-01T22:17:09.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16417" PostTypeId="2" ParentId="16408" CreationDate="2020-10-02T04:22:02.213" Score="10" Body="&lt;p&gt;The PLATO system, starting with &lt;a href=&quot;https://en.wikipedia.org/wiki/PLATO_(computer_system)#The_first_multimedia_experiences_(PLATO_IV)&quot; rel=&quot;noreferrer&quot;&gt;PLATO IV&lt;/a&gt; (1972), had 512x512 bitmap terminals that connected to a mainframe (CDC Cyber).&lt;/p&gt;&#xA;&lt;p&gt;Many early iterations of graphical game genres (MUD, FPS, ...) were programmed on the PLATO IV system.&lt;/p&gt;&#xA;&lt;p&gt;You can try out a PLATO IV system on an emulated CDC Cyber &lt;a href=&quot;http://www.cyber1.org/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;, if you install the required terminal emulator.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-10-02T06:36:46.367" LastActivityDate="2020-10-02T06:36:46.367" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16418" PostTypeId="2" ParentId="16395" CreationDate="2020-10-02T05:00:16.053" Score="9" Body="&lt;p&gt;It was necessary, because the early hardware did not contain a Real Time Clock (RTC) chip. The first IBM PC model to have an RTC chip as a standard feature and supported by BIOS was the IBM PC/AT, and earlier models could be retrofitted with an add-on RTC ISA card. So the models before AT cannot possibly know the current time automatically after powering the computer on or pushing the reset button, so it made sense to assume that by default, when there is no AUTOEXEC.BAT, the user wants to set the system time when DOS loads, and if there was an AUTOEXEC.BAT, it would prompt the user for date and time at a suitable point if necessary, or run an utility that reads the current time from the RTC addon card and sets the system time accordingly.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2020-10-02T06:26:46.113" LastActivityDate="2020-10-02T06:26:46.113" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16419" PostTypeId="2" ParentId="16395" CreationDate="2020-10-02T08:57:05.297" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Standard PC hardware includes a real-time clock powered by a battery&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I guess this is a valid assumption since IBM PC AT.&lt;/p&gt;&#xA;&lt;p&gt;Older PCs (PC, PCjr, XT) has no RTC by default (due to &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Personal_Computer#Technology&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-10-02T08:57:05.297" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16420" PostTypeId="2" ParentId="8702" CreationDate="2020-10-02T09:47:05.777" Score="1" Body="&lt;p&gt;To add to the other answers: While there was no support in the operating system itself, there were a couple of attempts at a terminal abstraction library that could be linked with programs. GSX (mentioned above) contains a set of text-mode output functions for cursor positioning, clearing areas of the screen and so forth, though it would have been a very heavyweight solution to link the entire GSX system just for its text mode functions.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://oldcomputers.dyndns.org/public/pub/manuals/zcpr/zcpr3_installation_manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZCPR&lt;/a&gt; (a replacement command processor for CP/M written by a group of hobbyists) eventually gained a terminal capabilities library. The characteristics of a terminal would be stored in a .Z3T file, which would be used by any ZCPR-aware program for screen highlighting, cursor movement etc.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2020-10-02T09:47:05.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16421" PostTypeId="2" ParentId="16408" CreationDate="2020-10-02T10:03:20.830" Score="3" Body="&lt;p&gt;The way the question is worded, several answers are possible.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Is it about remote stations capable of displaying glaphical output?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then essentially every graphics terminal/display/workstation qualifies, which would make even the very fist graphical terminal, the IBM 2250 a valid answer. In fact, it would as well make any other graphic output device, like a plotter, fit.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Is it about remote stations running a (user supplied) program?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then again the 2250, but as well Postscript or alike drawing languages will qualify (not pure output specifications like HP-GL)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Is it about moving an otherwise local application remote?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then it's not about a graphics system like X, but applications using its interface&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;If it's about X?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Well, then X and its earliest iteration is the answer, as the use of a network routable protocol layer is the core idea of X - or better, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16408/which-system-was-the-first-which-was-capable-of-running-graphics-programs-remote/16421?noredirect=1#comment55288_16421&quot;&gt;another-dave reminds&lt;/a&gt;, already with its &lt;a href=&quot;https://en.wikipedia.org/wiki/W_Window_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;precursor W&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom Line:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The question might need some refinement.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-02T14:38:34.267" LastActivityDate="2020-10-02T14:38:34.267" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16422" PostTypeId="2" ParentId="16351" CreationDate="2020-10-02T10:15:01.590" Score="6" Body="&lt;p&gt;What should be emphasized more because it is perhaps unexpected is that &lt;strong&gt;the C standard and POSIX differ&lt;/strong&gt; in their requirements for the value range of an &lt;code&gt;int&lt;/code&gt;. Specifically and importantly, &lt;strong&gt;C never mandated 32 bit &lt;code&gt;int&lt;/code&gt; sizes.&lt;/strong&gt; The reason for the discrepancy may be in the different assumptions each standard can make about the hardware.&lt;/p&gt;&#xA;&lt;p&gt;C is used for a wide variety of programming tasks. Importantly, because it compiles directly to machine code and does not need a huge runtime, it is the language of choice for programming small embedded systems and microcontrollers, often with &lt;em&gt;freestanding implementations:&lt;/em&gt; Such systems don't have an operating system, obviously no shell, no processes etc. The requirements the language imposes on C implementations running on such small hardware cannot be too restrictive or they would be broken all the time and hence be useless.&lt;/p&gt;&#xA;&lt;p&gt;A publicly available &lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf&quot; rel=&quot;noreferrer&quot;&gt;ISO C standard draft from 2007&lt;/a&gt;, for example, specifies in §5.2.4.2.1&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[The] implementation-defined values [from limits.h] shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The &amp;quot;minimal maximum&amp;quot; for &lt;code&gt;int&lt;/code&gt; is then given as&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;— maximum value for an object of type int&#xA;&lt;br&gt;INT_MAX &lt;strong&gt;+32767&lt;/strong&gt;     // 2&lt;sup&gt;15&lt;/sup&gt; - 1&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By contrast, a POSIX system runs an operating system kernel with *nix-like features (multi-user, multi-tasking among them), provides an elaborate command shell etc. Clearly this requires a much more capable hardware. Which is presumably why the &lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9699919799/&quot; rel=&quot;noreferrer&quot;&gt;current POSIX standard&lt;/a&gt; mandates &lt;strong&gt;at a minimum&lt;/strong&gt; 32 bit integers:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;{INT_MAX}&lt;br&gt;&#xA;Maximum value for an object of type int.&#xA;&lt;br&gt;&lt;strong&gt;[CX]&lt;/strong&gt; [Option Start] Minimum Acceptable Value: &lt;strong&gt;2 147 483 647&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9699919799/help/codes.html#CX&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;CX&amp;quot;&lt;/a&gt; marks this requirement as an extension to the C standard:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[CX] [Option Start] Extension to the ISO C standard [Option End]&#xA;The functionality described is &lt;strong&gt;an extension to the ISO C standard.&lt;/strong&gt; Application developers may make use of an extension as it is supported on all POSIX.1-2017-conforming systems.&#xA;[...]&#xA;&lt;br&gt;&lt;br&gt;Where additional semantics apply to a function or header, the material is identified by use of the CX margin legend.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="6566" LastEditorUserId="6566" LastEditDate="2020-10-02T15:30:59.900" LastActivityDate="2020-10-02T15:30:59.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16425" PostTypeId="1" AcceptedAnswerId="16435" CreationDate="2020-10-02T16:50:44.970" Score="11" ViewCount="728" Body="&lt;p&gt;If there is some piece of PC compatible hardware where there are no (publicly) existing drivers for Linux, the only option is to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/3041&quot;&gt;access the disk with BIOS calls&lt;/a&gt;. I'm aware that this imposes restrictions on the maximum size of disk and/or partition to be used.&lt;/p&gt;&#xA;&lt;p&gt;Has some old Linux Kernel featured such a driver? Searching online yields a lot of irrelevant hits about more modern systems and their particular booting challenges.&lt;/p&gt;&#xA;&lt;p&gt;My goal is to be able to run Linux from the emulated disk on an old &lt;a href=&quot;https://try-as400.pocnet.net/wiki/The_Integrated_PC_Servers&quot; rel=&quot;noreferrer&quot;&gt;AS/400 IPCS card&lt;/a&gt;. OS drivers are available only for Windows NT 4 and 2k.&lt;/p&gt;&#xA;" OwnerUserId="10295" LastEditorUserId="15334" LastEditDate="2020-10-03T17:33:34.187" LastActivityDate="2021-01-31T23:12:29.267" Title="Was there ever a Linux kernel driver for accessing disks via BIOS?" Tags="&lt;hard-disk&gt;&lt;bios&gt;&lt;linux&gt;&lt;driver&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16426" PostTypeId="1" CreationDate="2020-10-02T17:17:55.100" Score="11" ViewCount="198" Body="&lt;p&gt;I'm trying to understand how the video hardware (CRTC and Gate Array) in Amstrad CPCs works. Specifically, I have a question about the behavior of the refresh memory addresses and row adresses output by the Motorola 6845 CRT controller during horizontal/vertical retrace.&lt;/p&gt;&#xA;&lt;p&gt;When the horizontal counter reaches the value &amp;quot;Horizontal Displayed&amp;quot; (register 1) is the refresh memory address reset to the start of the current/next character row immediately?&lt;/p&gt;&#xA;&lt;p&gt;I'm confused, because I read in the Datasheet for the CRTC:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Both the memory addresses and the row addresses continue to run&#xA;during vertical retrace thus allowing the CRTC to provide the&#xA;refresh addresses required to refresh dynamic RAMs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I guess that would make sense for vertical retrace because the refresh memory address is reset to the value of &amp;quot;Display Start Address&amp;quot; (register 12/13) at the start of the frame anyways.&lt;/p&gt;&#xA;&lt;p&gt;But I'm unsure what happens during horizontal retrace.&lt;/p&gt;&#xA;&lt;p&gt;So, in other words what values do the refresh memory addresses and the row addresses have during horizontal and vertical retrace?&lt;/p&gt;&#xA;" OwnerUserId="16318" LastActivityDate="2020-10-04T11:04:10.217" Title="Which addresses does the Motorola 6845 CRTC output during retrace?" Tags="&lt;video&gt;&lt;cpc&gt;&lt;amstrad&gt;&lt;6845&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16427" PostTypeId="2" ParentId="16426" CreationDate="2020-10-02T18:51:04.517" Score="4" Body="&lt;p&gt;Short answer from memory:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;At the beginning of a frame the address is set to zero&lt;/li&gt;&#xA;&lt;li&gt;The address is incremented over a line for R0 (total chars aka horizontal timing) character access cycles.&lt;/li&gt;&#xA;&lt;li&gt;Only R1 (displayed characters) are visible.&lt;/li&gt;&#xA;&lt;li&gt;The address is reset after R0 character access cycles.&lt;/li&gt;&#xA;&lt;li&gt;Then the scan line counter is incremented&lt;/li&gt;&#xA;&lt;li&gt;When the scan line counter reaches R9 (Max Scan Line - 1):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Scan line counter is reset&lt;/li&gt;&#xA;&lt;li&gt;Address is incremented by R1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Rinse and repeat.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-04T11:04:10.217" LastActivityDate="2020-10-04T11:04:10.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16428" PostTypeId="2" ParentId="16355" CreationDate="2020-10-02T20:49:51.200" Score="2" Body="&lt;p&gt;Looking through the microcomputers of the 70s and 80s, I find a few which &lt;em&gt;supported&lt;/em&gt; low enough resolutions that they could fit only 20 characters across on the screen... but other than the Vic-20, no sign of one that displayed less than 32 characters &lt;em&gt;by default&lt;/em&gt;. Here's a list of the ones I've checked. Where there wasn't a text mode listed, just a bitmap output, I've mentioned that and assumed 8x8 character sprites:&lt;/p&gt;&#xA;&lt;p&gt;Less than 32 columns:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(year) cols Machine: text modes&lt;/li&gt;&#xA;&lt;li&gt;(1974) n/a Altair 8800: No video&lt;/li&gt;&#xA;&lt;li&gt;(1980) 8 Acorn Atom: Bitmap 64x64 to 256x192 so 8x8 to 32x24&lt;/li&gt;&#xA;&lt;li&gt;(1983) 16 Sanyo PHC-25: 16x16, 32x16&lt;/li&gt;&#xA;&lt;li&gt;(1978) 20 Atari 2600: Bitmap 160x192 so 20x24&lt;/li&gt;&#xA;&lt;li&gt;(1981) 20 BBC Micro: 20x32, 40x25, 40x32, 80x25, 80x32&lt;/li&gt;&#xA;&lt;li&gt;(1983) 20 Acorn Electron: 20x32, 40x25, 40x32, 80x25, 80x32&lt;/li&gt;&#xA;&lt;li&gt;(1984) 20 Amstrad CPC: 20x25, 40x25, 80x25&lt;/li&gt;&#xA;&lt;li&gt;(1987) 20 Acorn Archimedes: Bitmap 160x256 to 1152x896, so 20x32 to 144x112&lt;/li&gt;&#xA;&lt;li&gt;(1990) 20 PC: Bitmap 160x120 and up, so 20x15 and up.&lt;/li&gt;&#xA;&lt;li&gt;(1980) 22 Commodore VIC-20: 22x23, 27x23&lt;/li&gt;&#xA;&lt;li&gt;(1979) 28 TI-99/4: 32x24 (28x32 usable by basic), 40x24&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;32 columns and up:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(1975) 32 Smaky 2: Bitmap 256x160 so 32x20&lt;/li&gt;&#xA;&lt;li&gt;(1977) 32 TRS-80: 32x16, 64x16 (80x24 on later systems)&lt;/li&gt;&#xA;&lt;li&gt;(1978) 32 Smaky 6: Bitmap-over-text 256x120 so 32x15 atop 64x20&lt;/li&gt;&#xA;&lt;li&gt;(1979) 32 Atari 400/800: 32x12 to 48x30&lt;/li&gt;&#xA;&lt;li&gt;(1980) 32 Sinclair ZX80: 32x24&lt;/li&gt;&#xA;&lt;li&gt;(1981) 32 Sinclair ZX81: 32x24&lt;/li&gt;&#xA;&lt;li&gt;(1982) 32 Sinclair Spectrum: 32x24, 64x24&lt;/li&gt;&#xA;&lt;li&gt;(1983) 32 Coleco Adam: 32x24, 64x24?&lt;/li&gt;&#xA;&lt;li&gt;(1983) 32 MSX/HitBit: 32x24, 40x24&lt;/li&gt;&#xA;&lt;li&gt;(1983) 32 VTech Laser 200: 32x16&lt;/li&gt;&#xA;&lt;li&gt;(1984) 32 Sinclair QL: Bitmap 256x256, 512x256 so 42x28, 85x28&lt;/li&gt;&#xA;&lt;li&gt;(1985) 32 Elektronika BK-0010: 32x25, 64x25&lt;/li&gt;&#xA;&lt;li&gt;(1987) 32 Dragon 32k/64k: 32x24&lt;/li&gt;&#xA;&lt;li&gt;(1989) 32 Sam Coupe: Bitmap 256x192, 512x192 so 32x24, 64x24&lt;/li&gt;&#xA;&lt;li&gt;(1976) 40 Apple 1: 40x24&lt;/li&gt;&#xA;&lt;li&gt;(1977) 40 Apple ][: 40x25 (80x25 with addon board)&lt;/li&gt;&#xA;&lt;li&gt;(1977) 40 Commodore PET: 40x25, 80x25&lt;/li&gt;&#xA;&lt;li&gt;(1982) 40 Luxor Datorer ABC 802: 40x24, 80x24&lt;/li&gt;&#xA;&lt;li&gt;(1982) 40 MicroBee: 40x24, 80x24&lt;/li&gt;&#xA;&lt;li&gt;(1982) 40 Thomson TO7: Bitmap 320x200 so 40x25&lt;/li&gt;&#xA;&lt;li&gt;(1983) 40 Oric: 40x28&lt;/li&gt;&#xA;&lt;li&gt;(1985) 40 Robotron KC 85/1: 40x20, 40x24&lt;/li&gt;&#xA;&lt;li&gt;(1994) 40 Commodore 64: 40x25&lt;/li&gt;&#xA;&lt;li&gt;(1984) 40 Tiki 100: Bitmap 256x256, 512x256, 1024x256, so 40x25, 80x25, 160x25.&lt;/li&gt;&#xA;&lt;li&gt;(1985) 40 Atari ST: Bitmap 320x200 to 640x400, so 40x25 to 80x50&lt;/li&gt;&#xA;&lt;li&gt;(1985) 40 Commodore Amiga: Bitmap 320x200 to 640x512, so 40x25 to 80x64&lt;/li&gt;&#xA;&lt;li&gt;(1977) 64 Compucolor II: 64x32&lt;/li&gt;&#xA;&lt;li&gt;(1982) 64 Jupiter Ace: 64x48&lt;/li&gt;&#xA;&lt;li&gt;(1982) 80 Dumont Magnum/Kookaburra: (different models): 80x8, 80x16, 80x25&lt;/li&gt;&#xA;&lt;li&gt;(1984) 80 Fujitsu FM-7: Bitmap 640x200 so 80x25&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It seems that 32 and 40 were the standards that everyone used.&lt;/p&gt;&#xA;" OwnerUserId="444" LastEditorUserId="780" LastEditDate="2020-10-06T20:22:32.600" LastActivityDate="2020-10-06T20:22:32.600" CommentCount="5" CommunityOwnedDate="2020-10-05T16:24:59.017" ContentLicense="CC BY-SA 4.0" />
  <row Id="16429" PostTypeId="1" AcceptedAnswerId="16436" CreationDate="2020-10-02T21:19:04.930" Score="4" ViewCount="287" Body="&lt;p&gt;The USR filetype on the Commodore VC 1541 disk drive is a less common sequential file that according to some book sources can be executed as a program directly on the drive. The drive has its own 6502 processor and 2K of RAM.&#xA;While there exist a high number of program examples and demos for the C64, I could not find a single listing of a USR program. Would it theoretically be possible to provide a number of disk-executed commands as USR files, that for example to reverse a file on disk, compress a file, etc.?&lt;/p&gt;&#xA;&lt;p&gt;The 2K RAM with even less available is meagre, but could a program theoretically use disk space as external memory? Running locally at the drive a program could benefit from the native floppy speed, avoiding the serial protocol bottleneck.&lt;/p&gt;&#xA;&lt;p&gt;I know of C64 programs using a VC 1541 as a co-processor for fractal or 3D computations. I'm also aware of the programs that play music using the stepper motor, but as far as I remember those programs copied the code from the C64 over the serial program into the floppy memory.&lt;/p&gt;&#xA;&lt;p&gt;I would be interested, however, in the USR programs. Does there exist a list of meaningful USR programs or a tutorial on how to program them?&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-10-03T16:51:47.983" Title="What can be done with a USR file on the Commodore 1541 disk drive?" Tags="&lt;commodore&gt;&lt;floppy-drive&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16431" PostTypeId="2" ParentId="16343" CreationDate="2020-10-03T09:17:00.930" Score="1" Body="&lt;p&gt;And people did use vinyl grammophone records to store computer programs (though more as a gimmick), see for example &lt;a href=&quot;https://popcultureretrorama.com/2019/11/25/35-years-later-a-commodore-64-program-was-found-on-this-1984-album/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; about a Commodore 64 program hidden within Prodigal’s 1984 album entitled Electric Eye.&lt;/p&gt;&#xA;&lt;p&gt;There also was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Flexi_disc&quot; rel=&quot;nofollow noreferrer&quot;&gt;Flexi-disc&lt;/a&gt;, a thin square of plastic with a program on it, which could be produced very cheap, and came as part of a computer magazine. But again, vinyl, not bakelite.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-10-03T09:17:00.930" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16432" PostTypeId="2" ParentId="16429" CreationDate="2020-10-03T12:04:38.817" Score="3" Body="&lt;p&gt;I'm not sure about USR programs; but &lt;em&gt;I think&lt;/em&gt; you can issue a Block-Execute (B-E) command to the 1541 with a Track/Sector to load and execute a program directly from disk.&lt;/p&gt;&#xA;&lt;p&gt;I have a copy of &lt;a href=&quot;https://archive.org/details/Inside_Commodore_Dos&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inside Commodore DOS&lt;/a&gt; on my shelf, and it dedicates chapters 5 and 6 to direct access programming of the 1541, although the example are done from BASIC - they might prove insightful.&lt;/p&gt;&#xA;&lt;p&gt;It also vaguely mentions USR files with this cryptic text:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A user file may have the structure of either a sequential file or a&#xA;program file if it was created by the DOS. It may be structured&#xA;entirely differently if it was created using direct-access techniques&#xA;described in Chapter 5.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But I didn't see anything jump out at me about creating a USR file and loading/executing it directly on the 1541.  I also trolled through a few other books (PDF's) I have on programming for DOS and they have even less to say on the matter.&lt;/p&gt;&#xA;&lt;p&gt;To engage in wild speculation:  Maybe you can author your ML to disk as a USR file, then use the Block-Execute to load/execute the file - and from there let the code running on the 1541 continue to use Block-Read/Memory-Execute to chain further logic that didn't initially fit into memory?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2020-10-03T12:04:38.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16433" PostTypeId="2" ParentId="16429" CreationDate="2020-10-03T12:44:02.067" Score="1" Body="&lt;p&gt;The only use I've see for USR commands is an anti-piracy system.  The program downloaded sets a delay when writing a particular track.  If that track is read normally, the red light starts flashing because it is &lt;em&gt;corrupted&lt;/em&gt;.  If this USR command is used, it reads normally.  So if someone pirated a disk, on startup, after the program downloads the USR command, it can't read the disk.&lt;/p&gt;&#xA;&lt;p&gt;It is quite easy to break the security to see what it is trying to do.  The only problem is you need to get a memory map of the 1541 ROM.  It can be dumped out - takes a while to work out what it is doing.&lt;/p&gt;&#xA;&lt;p&gt;There is some code and memory map in the 1570/71 manual if you're looking for things to do with it.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2020-10-03T12:44:02.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16434" PostTypeId="2" ParentId="5862" CreationDate="2020-10-03T15:51:20.693" Score="1" Body="&lt;p&gt;Maybe this one, Wild Wheels from Ocean: &lt;a href=&quot;https://www.youtube.com/watch?v=oStzsQYLhKU&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=oStzsQYLhKU&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19536" LastActivityDate="2020-10-03T15:51:20.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16435" PostTypeId="2" ParentId="16425" CreationDate="2020-10-03T16:05:14.570" Score="10" Body="&lt;p&gt;To my knowledge, no such driver has ever been written.&lt;/p&gt;&#xA;&lt;p&gt;Since the very earliest versions, Linux has been a pure 32-bit protected-mode kernel that drove most devices (including disk controllers) directly, without going through the BIOS. The kernel has never had any facility to invoke 16-bit code from kernel mode during normal operation (after early boot); even the APM driver &lt;a href=&quot;https://github.com/schwabe/davej-history/blob/a1142b87288fbdd7ee4a847c5d1dfc09ef803ab7/drivers/char/apm_bios.c#L1058-L1061&quot; rel=&quot;nofollow noreferrer&quot;&gt;only ever supported the 32-bit protected-mode entry point&lt;/a&gt;. While support for 16-bit protected mode and virtual 8086 mode has been added, it was only ever driven by userspace, i.e. by DOSEMU, Wine and (userspace) VBE video drivers. The closest Linux got to a mechanism to invoke real-mode code from kernel mode is &lt;a href=&quot;https://web.archive.org/web/20101110072651id_/http://dev.gentoo.org/%7Espock/projects/vesafb-tng/archive/vesafb-tng-1.0-rc2-2.6.20-rc2.patch&quot; rel=&quot;nofollow noreferrer&quot;&gt;in a patch for the &lt;code&gt;vesafb&lt;/code&gt; driver in Linux 2.6.20&lt;/a&gt; that was never merged into the mainline kernel; the patch’s successor, &lt;code&gt;uvesafb&lt;/code&gt;, likewise invoked the video BIOS from userspace.&lt;/p&gt;&#xA;&lt;p&gt;In particular, there has never been a BIOS-based kernel disk driver. Such a driver &lt;a href=&quot;https://github.com/jbruchon/elks/blob/904d38e428097c24a419e53af83a58c4d8484a02/elks/arch/i86/drivers/block/bioshd.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;does exist in ELKS&lt;/a&gt; (a fork of Linux focusing on embedded systems), but I assume that ELKS and mainline Linux have already diverged enough to make adapting this driver for the latter a highly non-trivial task.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Your best bet is probably to write a driver for this device yourself: either via reverse-engineering or by creating a virtual 8086 mode monitor/emulator to run the BIOS-based driver in, like userspace VBE drivers do. In the general case, I expect the latter approach to be very fragile, as the ROM BIOS code may assume that it has the entirety of the hardware at its disposal, make all sorts of assumptions about its state, and attempt to perform operations that are difficult to emulate, especially from userspace code. In particular it may try to:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;raise a System Management Interrupt (the BIOS on a laptop I am writing this on does that),&lt;/li&gt;&#xA;&lt;li&gt;turn off interrupts to guarantee atomicity,&lt;/li&gt;&#xA;&lt;li&gt;reconfigure the Programmable Interrupt Controller and other hardware,&lt;/li&gt;&#xA;&lt;li&gt;perform DMA transfers,&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And many other things. Most of these considerations usually do not apply to video BIOSes, as those usually confine themselves to operating on the video hardware itself. As such, they only require access to I/O ports and memory, and those are rather easy to provide.&lt;/p&gt;&#xA;&lt;p&gt;Also note that the BIOS interrupt calls were not designed to be reentrant or execute under the supervision of a multitasking operating system (they were &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/3042/15334&quot;&gt;designed as drivers for DOS, after all&lt;/a&gt;). Given that, environments which &lt;em&gt;do&lt;/em&gt; provide BIOS-based disk drivers are either single-tasking systems like DOS anyway or take some pains to ensure that BIOS calls have exclusive access to all the hardware (including the CPU) and do not interfere with anything else:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GNU GRUB 2, a boot loader containing both BIOS and ‘bare-metal’ disk drivers, is a single-tasking, pure ring-0 environment that contains some logic to &lt;a href=&quot;https://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/disk/i386/pc/biosdisk.c?h=384091967d25ad7fe2fc0930b11adb23974bfeb9#n660&quot; rel=&quot;nofollow noreferrer&quot;&gt;ensure firmware-based and native drivers are not used at the same time&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20071224-00/?p=24063&quot; rel=&quot;nofollow noreferrer&quot;&gt;real-mode mapper in Windows 9x&lt;/a&gt; (i.e. its DOS/BIOS file system driver) executes real-mode code in ring 0 and guards it by &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20140912-00/?p=44083&quot; rel=&quot;nofollow noreferrer&quot;&gt;the critical section&lt;/a&gt;, which is essentially a global kernel lock (cf. Linux removing the Big Kernel Lock entirely in version 2.6.39)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All of the above told, things are not hopeless: if you stick to a narrow goal of writing a driver that works with a specific BIOS whose behaviour is known so that you can apply workarounds specific to your firmware (as opposed to creating a fully general solution), there is a good chance it might actually work quite reliably. Especially if the BIOS comes from an option ROM on an extension card, as those are much less free to assume things about other hardware that may be present.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-01-31T23:12:29.267" LastActivityDate="2021-01-31T23:12:29.267" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16436" PostTypeId="2" ParentId="16429" CreationDate="2020-10-03T16:51:47.983" Score="2" Body="&lt;p&gt;It seams as if the question mixes up the user-commands (Un) provided by DOS for loadable routines with the USR file type.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;USR&lt;/code&gt; file type has operations of it's own that can be performed thereon. For all purpose it's simply a sequential file. The only use of USR is to mark files that are not of any of the standard types.&lt;/p&gt;&#xA;&lt;p&gt;The user-commands are blank (*1) entry points that can be used to hook and call programms loaded into the DOS RAM - for example by Memory-Write (M-W).&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12272/6659&quot;&gt;This answer&lt;/a&gt; gives an overview.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/details/Commodore_1541_Disk_Drive_Users_Guide_1982-09_Commodore/page/n49&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chapter 8 of the floppy manual&lt;/a&gt; provides general information.&lt;/li&gt;&#xA;&lt;li&gt;Details of memory use can be &lt;a href=&quot;http://sta.c64.org/cbm1541mem.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;found here&lt;/a&gt; (for DOS 2.6)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-10-03T16:51:47.983" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16437" PostTypeId="1" AcceptedAnswerId="16438" CreationDate="2020-10-03T22:34:41.913" Score="15" ViewCount="6049" Body="&lt;p&gt;Microcomputers run off low voltage DC, but usually came with a power supply to produce a suitable DC current from the mains AC voltage.&#xA;It was usual among early home computers to supply an external power supply, either on lead or connected to a plug. Amstrad CPC, PCW and early PC machines had their power supply in the monitor. Most of these machines were passively cooled.&lt;/p&gt;&#xA;&lt;p&gt;The original IBM PC and subsequent clones mostly had the power supply mounted in the case. Given that microchips and other components can be sensitive to temperature, this seems a poor decision. Such machines often needed a fan for the power supply and even cooling for the CPU later on.&lt;/p&gt;&#xA;&lt;p&gt;Was it common practice prior to the IBM PC to build power supplies into the case with the board? Was their a good engineering reason for doing so?&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2020-10-06T06:41:26.313" LastActivityDate="2020-10-07T12:39:29.173" Title="Why did the IBM PC have an internal power supply?" Tags="&lt;ibm-pc&gt;&lt;power&gt;" AnswerCount="7" CommentCount="15" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16438" PostTypeId="2" ParentId="16437" CreationDate="2020-10-03T23:13:42.517" Score="35" Body="&lt;p&gt;Internal power supplies, while not universal, were not unusual at the time.  The major considerations were cost, ease of design, and safety (that is, passing safety regulations that already existed in most first-world nations), with thermal considerations factoring in somewhere further down the list.  The latter tended to point towards implementing a switch-mode PSU rather than a linear one; though a linear PSU tended to be cheaper, it was generally far less efficient.  Some early computers, such as the Commodore PET, did use linear PSUs, due to the relative ease of designing them using off-the-shelf components.&lt;/p&gt;&#xA;&lt;p&gt;When the computer and its monitor were sold as a set, it made plenty of sense to tap the computer's power off the transformer that the more power-hungry monitor needed anyway, and integrate only a rectifier and regulator into the computer proper.  A variation of this principle also applies to all-in-one computers such as the Amstrad PCW, the original Macintosh and the PET.  The computer logic, at the time, only needed a few watts at most, so this was quite a sensible option.&lt;/p&gt;&#xA;&lt;p&gt;However, that was not an option for computers designed to attach to some random TV that the user already owned.  The PC clone industry also demanded that monitors be interchangeable between computers, so a PSU had to be dedicated to the computer rather than shared with the monitor.&lt;/p&gt;&#xA;&lt;p&gt;Safety certification required that the user should not have physical access to mains-voltage circuits, even when opening the case of the computer to tinker with the logic circuitry (as was then commonly expected).  Putting the transformer in an external box, to replace the tap off a monitor's transformer, was one logical solution.  The practice survives today with laptops and phone chargers, mostly to get the &lt;em&gt;weight&lt;/em&gt; of the mains-voltage circuitry out of the computer itself.&lt;/p&gt;&#xA;&lt;p&gt;The BBC Micro serves as a good example of how thermal considerations could be solved by using a switch-mode PSU.  Early prototypes used a linear PSU, and there were concerns about how warm it got inside the case.  Most of the logic didn't mind being a little above room temperature, though one of the custom ULAs proved to be decidedly marginal in the final design.  However, design of a switch-mode PSU module, encased in a stout metal shield to deter user meddling, was subcontracted to a third party and proved to be both much more efficient and sufficiently inexpensive to meet the production budget for the machine.  The production BBC Micro scarcely gets warm inside.&lt;/p&gt;&#xA;&lt;p&gt;PSU modules of this type, designed by companies specialising in PSU design and safety certification, became standard practice and were commonly used in PCs and other microcomputers from the 1980s onwards.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-10-03T23:13:42.517" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16439" PostTypeId="1" CreationDate="2020-10-04T02:43:03.873" Score="8" ViewCount="1564" Body="&lt;p&gt;I've never heard of any emulator which requires different ROMs based on which version the emulator is.&lt;/p&gt;&#xA;&lt;p&gt;I thought that ROMs were fixed files that were dumped from hardware cartridges or PCBs, and then the emulator is just software interpreting those fixed files.&lt;/p&gt;&#xA;&lt;p&gt;It's not like the games change between them being dumped and later, just because a new version of MAME is released?&lt;/p&gt;&#xA;&lt;p&gt;Yet I see a lot of weird information where various &amp;quot;ROM sets&amp;quot; are for a specific version of MAME and they don't work in newer MAME versions and whatnot.&lt;/p&gt;&#xA;&lt;p&gt;It seems very strange to me and I don't get it at all.&lt;/p&gt;&#xA;" OwnerUserId="19540" LastActivityDate="2020-10-05T00:58:30.980" Title="Why exactly does MAME (apparently) require different ROMs for different versions of MAME?" Tags="&lt;emulation&gt;&lt;arcade&gt;&lt;mame&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16440" PostTypeId="2" ParentId="3041" CreationDate="2020-10-04T05:59:42.250" Score="1" Body="&lt;p&gt;You have to keep in mind that early IBM-compatible PCs did not have &amp;quot;standard&amp;quot; hardware.&lt;/p&gt;&#xA;&lt;p&gt;The hard disk would be a good example:&lt;/p&gt;&#xA;&lt;p&gt;Today, most computers typically have SATA hard drives, so an operating system must support SATA to support hard disk access.&lt;/p&gt;&#xA;&lt;p&gt;In the 1980s there were controllers for hard disks with ST-506 interface, IDE hard disks and a lot of different SCSI hard disk controllers.&lt;/p&gt;&#xA;&lt;p&gt;Mid-1990s Linux versions show what it meant not to use the BIOS to access the hard disk:&lt;/p&gt;&#xA;&lt;p&gt;The Linux distributions came with different kernels for different hard disks; the &amp;quot;Slackware 2.3&amp;quot; distribution (1995) used four different boot floppy images (booting from CD was not supported) if you wanted to install from an IDE CD-ROM:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;One floppy was intended for computers with IDE hard disk,&lt;/li&gt;&#xA;&lt;li&gt;one floppy was intended for computers with ST-506 hard disk,&lt;/li&gt;&#xA;&lt;li&gt;one for computers having one of 11 supported SCSI controllers and&lt;/li&gt;&#xA;&lt;li&gt;the last one for computers having one of 10 other supported SCSI controllers.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;(If you wanted to install from a non-IDE/SCSI CD-ROM, there were even more images on the CD-ROM.)&lt;/p&gt;&#xA;&lt;p&gt;MS-DOS would also have required multiple disks for different hard disk types if it did not use the BIOS.&lt;/p&gt;&#xA;&lt;p&gt;And because Linux used 1440K floppies and (early) MS-DOS used 360K floppies, you would not have required four different disks but maybe 10.&lt;/p&gt;&#xA;&lt;p&gt;Early MS-DOS versions came on two 360K floppies; 10 additional floppies containing different device drivers would have meant selling MS-DOS on 12 floppy disks instead of only 2 - knowing that the customer would definitely never use 9 of these 12 disks.&lt;/p&gt;&#xA;" OwnerUserId="8712" LastActivityDate="2020-10-04T05:59:42.250" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16441" PostTypeId="2" ParentId="16425" CreationDate="2020-10-04T06:30:19.540" Score="3" Body="&lt;p&gt;It's perfectly possible for both userspace and the kernel to access the BIOS. In fact, the kernel offers a &lt;a href=&quot;https://man7.org/linux/man-pages/man2/vm86.2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;vm86 syscall&lt;/a&gt;, which is an emulation of real mode.&lt;/p&gt;&#xA;&lt;p&gt;This syscall was used for a long time in the &lt;code&gt;vesa&lt;/code&gt; driver for X (before it got replaced with the &lt;code&gt;vesafb&lt;/code&gt; kernel driver; see e.g. &lt;a href=&quot;https://github.com/freedesktop/xorg-xserver/blob/xorg-server-1.12.4/hw/xfree86/vbe/vbe.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; for some code), there are projects like &lt;a href=&quot;https://github.com/mqudsi/lrmi&quot; rel=&quot;nofollow noreferrer&quot;&gt;Linux Real-Mode Interface&lt;/a&gt; which use it to provide a DPMI-like interface to real mode BIOS, etc.&lt;/p&gt;&#xA;&lt;p&gt;However, the problem with using the BIOS calls for disk access is that those depend on in-memory tables that are not preserved when Linux boots – in particular because different BIOSes do this differently. Therefore it was much easier and cleaner for Linux to just provide its own drivers for disk access than to try to deal with this mess.&lt;/p&gt;&#xA;&lt;p&gt;That's why the kernel never featured such a driver.&lt;/p&gt;&#xA;&lt;p&gt;So for your particular case, you'd need to write the drivers in one way or other. You can either go through the trouble to figure out where how the BIOS of the IPCS stores the tables, or you can figure out how your existing drivers work. Both would presumably have some way to communicate with the AS/400 host to transfer blocks from and to the emulated disk. So reverse engineering is needed anyhow, and then you can write the Linux drivers for it.&lt;/p&gt;&#xA;&lt;p&gt;This looks like a fun project, but it probably can be quite time consuming.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="15334" LastEditDate="2020-11-12T19:55:39.993" LastActivityDate="2020-11-12T19:55:39.993" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16442" PostTypeId="2" ParentId="16426" CreationDate="2020-10-04T10:22:33.237" Score="1" Body="&lt;p&gt;The horizontal counter increments continuously with the CRTC clock, and the vertical counter (divided into a pixel row counter and a text line counter) increments continuously with the horizontal sync pulse.  The blanking and sync signals are toggled, and the counters are reset, when these counters exactly match values set in configuration registers.&lt;/p&gt;&#xA;&lt;p&gt;The counter resets specifically occur when the &amp;quot;horizontal total&amp;quot; and &amp;quot;vertical total&amp;quot; registers are matched.  The latter also triggers reload of the address register, which is what permits hardware scrolling and double-buffering with the CRTC.  The addresses continue to increment during the blanking period, as shown in the following timing diagrams from the MC6845 datasheet:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3U9o9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3U9o9.png&quot; alt=&quot;horizontal timing&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/T1iuK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/T1iuK.png&quot; alt=&quot;vertical timing&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-10-04T10:22:33.237" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16443" PostTypeId="2" ParentId="16439" CreationDate="2020-10-04T10:33:27.957" Score="13" Body="&lt;p&gt;When MAME started, the aim was to make the classic games work on a &amp;quot;modern&amp;quot; machine.&lt;/p&gt;&#xA;&lt;p&gt;For that, a lot of shortcuts were taken:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;hardcoding some game data / hardware color palette in the code&lt;/li&gt;&#xA;&lt;li&gt;giving names to EEPROMS that weren't the most logical&lt;/li&gt;&#xA;&lt;li&gt;sometimes the emulator used the Yamaha YM chip from the popular Sounblaster / AWE64 to play the sounds of games which used similar YM chips&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The main difference with, say a NES or Sega Megadrive emulator is that MAME is able to emulate a lot of different hardware, and the ROMs that you feed the emulator with is a ROM &lt;em&gt;set&lt;/em&gt; (on NES/SNES... it's just a ROM dump of the program code), with roms from all chips included.&lt;/p&gt;&#xA;&lt;p&gt;When MAME evolved to try to emulate all machines as faithfully as possible and without any shortcuts&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a lot of &amp;quot;common rom parts&amp;quot; were identified so different versions were just an add-on to the original ROM set, without repeating the data. For instance, a &amp;quot;bootleg&amp;quot; version is the original version with just one file changed.&lt;/li&gt;&#xA;&lt;li&gt;some more strict renaming rules were decided, breaking compatibility with old .zip archives (tools like ClrMAME exist to &amp;quot;repair&amp;quot; romsets but anyhow it's a mess): the data is almost the same, but somehow renamed or with some small data missing.&lt;/li&gt;&#xA;&lt;li&gt;they dropped the YM sound redirection  now fully emulated (to be honest, it could be because Soundblaster cards aren't useable on nowadays PCs, but the FM sound was a wonder to listen to)&lt;/li&gt;&#xA;&lt;li&gt;even protection chips were emulated instead of just &amp;quot;cracking&amp;quot; the game by code&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This allows MAME to emulate the bare metal, without any shortcuts, but since 1996 a lot of archives became invalid, and the confusion was even greater when Android/Raspberry Pi MAME4All version forked from an old 0.37b5 MAME core (newer MAME versions are a lot more CPU intensive) and retained the old versions of the ROMs.&lt;/p&gt;&#xA;&lt;p&gt;The challenge for the users who need to play all games on the latest MAME is to find a reliable source to download &amp;quot;recent&amp;quot; roms, knowing that it's still barely legal to do so if you don't own the original machine to say the least. Personally I have 2 MAME versions around so I can play some games that I don't have the updated ROMs for.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-10-04T16:57:48.580" LastActivityDate="2020-10-04T16:57:48.580" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16444" PostTypeId="2" ParentId="5361" CreationDate="2020-10-04T11:14:33.140" Score="4" Body="&lt;p&gt;For completeness, I’ll mention &lt;a href=&quot;http://delorie.com/djgpp/16bit/djlink/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DJLINK&lt;/a&gt;, an OMF linker written by DJ Delorie (who also created DJGPP). This is probably not the &lt;em&gt;best&lt;/em&gt; option: it never seems to have left proof-of-concept stage, and compiling it on Linux with modern GCC requires a little patching (to add missing &lt;code&gt;const&lt;/code&gt; qualifiers and header includes). Nevertheless, I managed to use it with some success on simple NASM-produced object files to generate MZ executables.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastActivityDate="2020-10-04T11:14:33.140" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16445" PostTypeId="2" ParentId="16409" CreationDate="2020-10-04T11:15:28.790" Score="1" Body="&lt;p&gt;Here's a partial answer to be finished by someone who has a RocketChip.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;RocketChip $C035 bits:&#xA;76543210&#xA;....1... - APPLESPEED.WAIT - Slow firmware wait routine&#xA;....0... - ROCKET.WAIT     - Fast firmware wait routine&#xA;..0..... - AUDIO.SILENT    - Mute speaker&#xA;001..... - AUDIO.DISTORTED - Fast game play&#xA;011..... - AUDIO.NORMAL    - Fast game play&#xA;101..... - AUDIO.MUSIC     - Slow game play&#xA;111..... - AUDIO.HIFI      - Slow game play&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The difference between AUDIO.MUSIC and AUDIO.HIFI is bit 6, and so presumably the same as the difference between AUDIO.DISTORTED and AUDIO.NORMAL. Could it be just a longer slowdown period, or something more subtle?&lt;/p&gt;&#xA;" OwnerUserId="71" LastActivityDate="2020-10-04T11:15:28.790" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16446" PostTypeId="2" ParentId="16437" CreationDate="2020-10-04T14:45:24.213" Score="11" Body="&lt;p&gt;Aside from Cromatix great answer, the thing to consider was difference in power. Typical home microcomputers (like ZX Spectrum or &lt;a href=&quot;https://www.c64-wiki.com/wiki/Power_Supply#Power_Supply_of_the_Commodore_64&quot; rel=&quot;noreferrer&quot;&gt;Commodore 64&lt;/a&gt; etc) used power supplies with about 10-30 watts, while IBM PC XT has chunky &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Personal_Computer/AT#Power_supply&quot; rel=&quot;noreferrer&quot;&gt;130W power supply (which increased to 192W SMPS in IBM AT)&lt;/a&gt;. That much power requires much more space, and would be quite unwieldy as separate PS (especially when you add it in isolated casing).&lt;/p&gt;&#xA;&lt;p&gt;Also, when internal power supply has fan blowing outside, it actually helps with cooling of the case with main CPU, motherboards etc. as it draws air over the components, due to air pressure difference.&lt;/p&gt;&#xA;" OwnerUserId="4603" LastActivityDate="2020-10-04T14:45:24.213" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16447" PostTypeId="1" AcceptedAnswerId="16451" CreationDate="2020-10-04T22:48:36.510" Score="5" ViewCount="252" Body="&lt;p&gt;The Apple IIGS has a wavetable synthesis sound chip with dedicated 64 kilobytes of RAM.&lt;/p&gt;&#xA;&lt;p&gt;I assume the sound architecture dictates that samples have to be loaded into that dedicated RAM to be able to be played from there.&lt;/p&gt;&#xA;&lt;p&gt;64 kilobytes is not so much, but I assume that a playback routine can import samples from the main RAM and swap them out during playback any time on-the-fly in the background, should a piece of music have a large set of instruments.&lt;/p&gt;&#xA;&lt;p&gt;The Amiga has no such dedicated RAM as far as I know, it apparently just plays back all samples from the main RAM, which is usually at least 512 kilobytes large.&lt;/p&gt;&#xA;&lt;p&gt;So could there be the situation in a piece of MOD music when a set of samples required to be played back at a certain time is too large to fit into the Apple IIGS 64kb?&lt;/p&gt;&#xA;&lt;p&gt;If so, do the currently available MOD players handle that situation already? Do they cut and split the samples in question just-in-time, and is this process fast enough, or how else would that process work?&lt;/p&gt;&#xA;" OwnerUserId="19548" LastEditorUserId="19548" LastEditDate="2020-10-04T23:36:19.597" LastActivityDate="2020-10-05T01:48:01.597" Title="Could the Apple IIGS play any and all Amiga MOD files?" Tags="&lt;amiga&gt;&lt;memory&gt;&lt;sound&gt;&lt;apple-iigs&gt;&lt;audio&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16448" PostTypeId="2" ParentId="16437" CreationDate="2020-10-04T22:57:16.107" Score="5" Body="&lt;p&gt;The earliest personal computers of the 1970's, including the &lt;a href=&quot;https://en.wikipedia.org/wiki/Altair_8800&quot; rel=&quot;noreferrer&quot;&gt;Altair 8800&lt;/a&gt;, had built in power supplies.  The power supplies were often oversized to allow expansion boards to be added to the system.&lt;/p&gt;&#xA;&lt;p&gt;As the computers became smaller and more limited in expansion options (dare I say toy-like?) it became possible to power them with an external supply.  It was probably easier to get electrical certification if there was no high voltage in the chassis.&lt;/p&gt;&#xA;&lt;p&gt;The IBM PC, meant to be a serious computer for offices with generous expansion capabilities, was more suited to the built-in power supply model.&lt;/p&gt;&#xA;" OwnerUserId="4461" LastActivityDate="2020-10-04T22:57:16.107" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16449" PostTypeId="2" ParentId="16439" CreationDate="2020-10-05T00:58:30.980" Score="2" Body="&lt;p&gt;MAME emulates a fixed, finite (if rather large) list of arcade games. The complete circuit board layout of every game is stored in the MAME executable. All code and data needed for emulation of most of the chips is compiled into the MAME executable, but for practical reasons, the contents of ROM chips are stored in external files. This is partly to keep the executable from becoming absurdly large, and partly for copyright reasons. Because the external files are conceptually part of the executable, there is only one correct set of bits for every file. The executable rejects external files whose checksum doesn't match the expected checksum stored in the executable.&lt;/p&gt;&#xA;&lt;p&gt;The external files could change from version to version for many reasons. The change might even have no effect on the emulation in practice: for example, the old ROM dump contained garbage values for addresses that weren't actually stored in the ROM chip, and the new dump correctly omits those values. They could retain support for the old ROM file in such cases, but they have no interest in doing that because the data is conceptually a part of the emulator and they want to be free to refactor it like anything else.&lt;/p&gt;&#xA;&lt;p&gt;Other emulators emulate systems with swappable external storage like cartridges or magnetic disks, they support future-proof, documented file formats that describe the contents of the cartridges or disks (sometimes rather inaccurately called &amp;quot;ROMs&amp;quot;), and they will make a best effort to emulate any file that fits the format. Aside from that, though, they're similar in design to MAME. They only support a fixed list of motherboard configurations, only a fixed list of circuit board layouts in cartridges, and only a fixed list of expansion cards in systems that support those.&lt;/p&gt;&#xA;" OwnerUserId="14340" LastActivityDate="2020-10-05T00:58:30.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16450" PostTypeId="2" ParentId="16437" CreationDate="2020-10-05T00:59:00.990" Score="6" Body="&lt;p&gt;The IBM PC wasn't a &amp;quot;home computer&amp;quot; -- it was intended to be a business computer, and needed to suit the needs of a business owner.  Having the PS in the case eliminated extra connections (for the user) and made everything fit neatly on a desk.&lt;/p&gt;&#xA;&lt;p&gt;(And it should be pointed out that the PC was not IBM's first &amp;quot;personal computer&amp;quot;.  The IBM 5100 was also a single-unit system -- even including the keyboard and display in the package.)&lt;/p&gt;&#xA;" OwnerUserId="3483" LastActivityDate="2020-10-05T00:59:00.990" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16451" PostTypeId="2" ParentId="16447" CreationDate="2020-10-05T01:48:01.597" Score="5" Body="&lt;p&gt;There are many routine features of a MOD that do not map directly to the IIGS sound hardware — besides the 64kb limit, the Ensoniq also requires samples to be a power-of-two in size and will loop entire samples only. MODs frequently have a loop point somewhere after the start. On the plus side it can trigger an interrupt at the end of any channel's playback and has a single-shot playback mode in addition to looping.&lt;/p&gt;&#xA;&lt;p&gt;The larger number of available channels on the Ensoniq can somewhat make up for the looping point if you split the sample into the start bit plus the looping bit, and at least one player — Noise Tracker — resolves the 64kb issue with active streaming, though it then becomes almost a whole-CPU operation because the 64kb is not directly accessible to the CPU, it's accessed via a pointer register and data register.&lt;/p&gt;&#xA;&lt;p&gt;NinjaTracker is the most recent &lt;a href=&quot;http://www.ninjaforce.com/html/products_ninjatracker.html&quot; rel=&quot;noreferrer&quot;&gt;open source&lt;/a&gt; tracker for the IIGS that I could find, and doesn't do instrument streaming but seems to support a wider array of MOD effects; as a bonus it can work with MODs of up to 14 channels, which is obviously a lot more than you can do on a vanilla Amiga.&lt;/p&gt;&#xA;&lt;p&gt;So: I think the answer is 'no', at least in any currently-implemented solution, as I cannot find one which both breaks the 64kb barrier and supports the full range of audio effects.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-10-05T01:48:01.597" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16452" PostTypeId="1" AcceptedAnswerId="16454" CreationDate="2020-10-05T03:33:43.563" Score="23" ViewCount="4485" Body="&lt;p&gt;Wikipedia's page on the &lt;a href=&quot;https://en.wikipedia.org/wiki/System/360#A_family_of_computers&quot; rel=&quot;noreferrer&quot;&gt;IBM System/360&lt;/a&gt; family claims that a distinction once existed between business and scientific computers. The model 44 in particular was designed for scientific work and was set apart by lack of decimal instruction and inclusion of a floating point unit. Another source (I cannot recall) stated that IBM's machines were successors of their unit record equipment and as such were largely business oriented.&lt;/p&gt;&#xA;&lt;p&gt;I would like to know what other features of a computer architecture would have made it a scientific or business machine as well as examples of each, if it is possible to distinguish.&lt;/p&gt;&#xA;" OwnerUserId="19550" LastActivityDate="2020-10-05T13:49:41.913" Title="Distinction between scientific and business computing" Tags="&lt;history&gt;&lt;terminology&gt;&lt;architecture&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16453" PostTypeId="2" ParentId="16452" CreationDate="2020-10-05T04:13:58.017" Score="2" Body="&lt;p&gt;It is primarily floating point (needed for scientific calculation) versus fixed point decimal (needed for monetary calculations). Because that is in what the applications differed, and that was what was expensive to implement as part of the CPUs, given the low level of integration in the circuitry.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-10-05T04:13:58.017" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16454" PostTypeId="2" ParentId="16452" CreationDate="2020-10-05T04:27:54.813" Score="40" Body="&lt;p&gt;In practice, &amp;quot;scientific computing&amp;quot; meant floating-point number-crunching like physics simulations, and &amp;quot;business&amp;quot; computing meant I/O-oriented record processing, such as doing the weekly payroll.&lt;/p&gt;&#xA;&lt;p&gt;On machines targeted at the scientific market, binary arithmetic was more common, floating-point hardware was usually standard, error correction hardware less common (since once-off errors don't usually have the same consequences in a simulation vs. a bank account) and IO throughput, particularly from multiple sources, was not usually prioritized.&lt;/p&gt;&#xA;&lt;p&gt;On commercial machines, there is more emphasis on decimal data, string processing, and BCD arithmetic instructions were usually provided.  The early machines of this lineage were indeed in the tradition of unit record processing equipment, and they were designed around that environment.  More emphasis was given to IO and in particular record-oriented processing (punched card and magnetic tape), since a wide variety of disparate datasets might be frequently used, compared to the more typical scientific &amp;quot;load and compute&amp;quot; job.&lt;/p&gt;&#xA;&lt;p&gt;For IBM in particular the split originates at the very beginning of computing, in their first two designs, done by different branches within the company.  IBM had been contracted for a high-speed computer, and ultimately designed the IBM 701 &amp;quot;Defense Calculator&amp;quot;, with the US government's number-crunching needs being the primary intended market. It was a binary machine, high-speed and oriented towards high-speed magnetic tape IO.  Its successor, the 704, would have built-in floating point math as well.&lt;/p&gt;&#xA;&lt;p&gt;At the same time, the unit record equipment branch of IBM was developing the &amp;quot;drum machine&amp;quot; which would ultimately be the IBM 650.  It was a much smaller, slower machine, primarily targeted as a programmable replacement for unit record equipment.  It was a decimal machine and oriented exclusively towards processing punch cards.&lt;/p&gt;&#xA;&lt;p&gt;This split would continue for well over a decade, with later families of semi-compatible machines in both lines.  By the time of the IBM System 360, companies had realized most customers did at least a bit of both kinds of work on their machines, and that memory size, CPU size and IO needs could be very different for different customers.  That was part of the motivation for merging IBM's product lines into System 360, and most System 360 models could have both the &amp;quot;commercial&amp;quot; (decimal) and &amp;quot;scientific&amp;quot; (floating point) instructions, at least as options, and the very high-end machines had both by default.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="18835" LastEditDate="2020-10-05T13:49:41.913" LastActivityDate="2020-10-05T13:49:41.913" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16455" PostTypeId="1" CreationDate="2020-10-05T05:08:04.490" Score="49" ViewCount="13115" Body="&lt;p&gt;I've been watching &amp;quot;speedrunners&amp;quot; play those games for quite some time. I still can't believe what my eyes are seeing. Somehow, they have managed to find bizarre bugs in the games which enable them to do things which I cannot imagine that I or anyone would ever encounter by playing the game.&lt;/p&gt;&#xA;&lt;p&gt;I'm talking about standing at precise spots against walls and pressing keys in an exact manner to somehow cause Mario to start flying at super speed through the walls and other objects, for a long time, until he drops into some warp zone further away in the level. It looks unreal. I have real difficulty believing:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;That it's the original game and not some kind of modified copy. (But it actually is.)&lt;/li&gt;&#xA;&lt;li&gt;That somebody is able to reproduce these reliably.&lt;/li&gt;&#xA;&lt;li&gt;That somebody encountered these in the first place.&lt;/li&gt;&#xA;&lt;li&gt;That a game, even if 3D and thus complex, can actually contain such strange bugs.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Maybe I can understand that the collision detection code has a bug so that you can fall through certain objects or walls. OK. That makes sense.&lt;/p&gt;&#xA;&lt;p&gt;But how can the game make Mario seemingly start ignoring all the rules of the game world and go flying (while seemingly standing) across several rooms at super speed? How does that actually happen? How does that make it into game code? And how does anyone find that, no matter how popular the game is?&lt;/p&gt;&#xA;&lt;p&gt;Unless this entire reality has been set up just to mess with me, this is real. But I don't understand &lt;em&gt;how&lt;/em&gt; it can be real.&lt;/p&gt;&#xA;&lt;p&gt;I've never, even once, encountered even a minor glitch in any game while playing it. The speedrunners press the buttons and move the analogue stick around to seemingly freely warp around in the game world and do whatever they feel like. It's as if they had enabled some sort of crazy debug mode with a &amp;quot;Game Genie&amp;quot; or &amp;quot;Action Replay&amp;quot; cartridge hooked up to the console, but it's actually done on the original game, not using an emulator or modified ROM.&lt;/p&gt;&#xA;&lt;p&gt;I simply don't understand how it can be the case.&lt;/p&gt;&#xA;" OwnerUserId="19551" LastActivityDate="2020-10-08T12:52:19.847" Title="How is it possible that classic 3D video games such as Super Mario 64 and Ocarina of Time can contain such bizarre &quot;glitches&quot;?" Tags="&lt;nintendo-64&gt;&lt;game-consoles&gt;&lt;glitches&gt;" AnswerCount="8" CommentCount="17" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16456" PostTypeId="1" AcceptedAnswerId="16516" CreationDate="2020-10-05T06:24:20.813" Score="4" ViewCount="208" Body="&lt;p&gt;I have an what appears to be an AT&amp;amp;T 6300 Computer.  It seems to work fine, but I am missing the F5, #7 and numpad + key caps on the keyboard.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HsuWL.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HsuWL.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What is the easiest way to find a replacement for the key-caps on the AT&amp;amp;T 6300 keyboard.&lt;/p&gt;&#xA;&lt;p&gt;NOTE:  The replacement doesn't have to be original equipment for the 6300, it could be a 3rd party key-cap that happens to fit, or even something custom made or 3D-printed.  The preference however would be for a plastic cap that has the same look as the original.&lt;/p&gt;&#xA;&lt;p&gt;Finding a 5.25&amp;quot; DOS 3.0 disk so I can complete booting is another story...&lt;/p&gt;&#xA;" OwnerUserId="13468" LastActivityDate="2020-10-14T03:44:24.480" Title="What is the easieset way to replace some missing key-caps for the AT&amp;T 6300 keyboard?" Tags="&lt;keyboards&gt;&lt;maintenance&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16457" PostTypeId="2" ParentId="16455" CreationDate="2020-10-05T06:29:22.590" Score="111" Body="&lt;p&gt;3D games like Super Mario 64 and Ocarina of Time are time-step-based physics simulators. Their basic design is based on the assumption that nothing goes above a certain speed. Each frame, Super Mario 64 calculates four time steps, in which it (among other things):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;moves Mario ¼ of the distance he's supposed to travel in that frame; then&lt;/li&gt;&#xA;&lt;li&gt;pushes Mario out of any walls / floor / ceiling he's found his way inside.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There are three oversights that make this a massive source of glitches:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When the game calculates that Mario “should” move out-of-bounds and stops him from doing so, he doesn't slow down.&lt;/li&gt;&#xA;&lt;li&gt;“Out-of-bounds” is defined as “places without a floor under them”.&lt;/li&gt;&#xA;&lt;li&gt;Long-jumping only has a speed limit in the &lt;em&gt;forwards&lt;/em&gt; direction.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This means that all you need to do is find a thin wall without floor behind it, long-jump a distance away from it, hold the control stick backwards and keep sustaining that long-jump; if you time it just right, you'll land just before the wall so that ¼ of your speed would put you out of bounds, so you can keep mashing the A button and go as fast as you need to.&lt;/p&gt;&#xA;&lt;p&gt;Also, at least in Super Mario 64, there's only bounds checking for regions &lt;em&gt;without floors&lt;/em&gt;; areas of floor that extend outside or between rooms are perfectly accessible if you can clip through walls.&lt;/p&gt;&#xA;&lt;p&gt;The game developers &lt;em&gt;really&lt;/em&gt; didn't expect anybody to go so fast that they leave the map behind, so everything that occurs outside the map is an artefact of the design of the rest of the game; most of the glitchiness you'll observe &lt;em&gt;there&lt;/em&gt; doesn't really count.&lt;/p&gt;&#xA;&lt;p&gt;Because Super Mario 64's floor collision calculations use 16-bit integers (unlike the rest of the game, which uses floats), there are partial copies of the level repeated every 2&lt;sup&gt;16&lt;/sup&gt; units in the x, y and z directions. If you go fast enough, you can enter them without going through an out-of-bounds region, which has interesting effects.&lt;/p&gt;&#xA;&lt;p&gt;Most of the other glitches are due to synchronisation issues:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A crate can be picked up for a couple of frames without stopping the despawn timer, causing Mario's hands to point to uninitialised memory that's later populated by the next item to spawn.&lt;/li&gt;&#xA;&lt;li&gt;Once activated, a text box will wait until you're on the ground before showing, but if you jump &lt;em&gt;just&lt;/em&gt; after it's activated and fly away, you can get it to show (and run the associated code) in a completely different part of the level, letting you trigger bits of the level's scripting out of order.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Certain code is keyed off animation states, so being in an unexpected animation state can suppress its execution; e.g., the “fell in lava” animation can't run during the “sliding” animation, and the “lose health” script is keyed off the “fell in lava” animation, meaning you can slide across lava without losing health.&lt;/p&gt;&#xA;&lt;p&gt;I'm not sure of the details of Ocarina of Time, but since it uses almost the same engine I assume most things are the same.&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="3748" LastEditDate="2020-10-08T12:52:19.847" LastActivityDate="2020-10-08T12:52:19.847" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="16458" PostTypeId="1" CreationDate="2020-10-05T08:03:13.803" Score="0" ViewCount="231" Body="&lt;p&gt;If we consider legacy systems that are still crucial to modern life, say for instance ATM infrastructure. If they have been coded with old languages like Cobol, for instance, would there have to be an effort to educate a new generation in there operations, or is there nothing that is keeping a good C# / Java developer from working with these systems if he / she is required to?&lt;/p&gt;&#xA;&lt;p&gt;Assuming that eventually the OG nerds that originally developed and maintained these system, will eventually retire.&lt;/p&gt;&#xA;" OwnerUserId="12298" LastActivityDate="2020-10-05T12:49:58.773" Title="Will there have to be a concerted effort to train new developers for legacy systems?" Tags="&lt;history&gt;&lt;cobol&gt;" AnswerCount="1" CommentCount="12" ClosedDate="2020-10-05T12:25:25.763" ContentLicense="CC BY-SA 4.0" />
  <row Id="16459" PostTypeId="2" ParentId="16458" CreationDate="2020-10-05T12:49:58.773" Score="4" Body="&lt;p&gt;A facetious response is to point out &lt;a href=&quot;https://en.wikipedia.org/wiki/Betteridge%27s_law_of_headlines&quot; rel=&quot;nofollow noreferrer&quot;&gt;Betteridge's Law&lt;/a&gt;, i.e. the answer to your question is &amp;quot;no&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;There is nothing fundamentally different about COBOL and/or other legacy systems that prevents newcomers from learning them. That they're weird and unfamiliar and thus more effort than usual to learn is not a barrier, since bleeding-edge stuff is also weird and unfamiliar yet plenty of people are more than happy to dive in.&lt;/p&gt;&#xA;&lt;p&gt;The main thing &amp;quot;keeping a good C# / Java developer from working with these systems&amp;quot; is not technology. Places which are still running this stuff are often also stuck in the 1950s when it comes to hiring practices, salaries, and working conditions.&lt;/p&gt;&#xA;&lt;p&gt;I note the fine words of Charles Stross when it comes to being approached to work on something that none of the existing staff is prepared to touch with a ten foot pole: &lt;a href=&quot;https://www.goodreads.com/quotes/7643769-so-you-open-your-mouth-and-listen-to-yourself-say&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;I want eight thousand a day. Plus expenses.&amp;quot;&lt;/a&gt; Follow the link to the full quote for the NSFW punchline.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2020-10-05T12:49:58.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16460" PostTypeId="2" ParentId="16452" CreationDate="2020-10-05T13:09:52.237" Score="1" Body="&lt;p&gt;&amp;quot;business&amp;quot; or &amp;quot;commercial&amp;quot; instruction set usually includes string operations like moving strings in single instruction and BCD arithmetics operations like additions, multiplications/divisions and conversions of long multi-word BCD numbers in single instruction.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Scientific&amp;quot; instruction set, as already mentioned, includes floating point arithmetics.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-10-05T13:09:52.237" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16461" PostTypeId="2" ParentId="16455" CreationDate="2020-10-05T13:50:02.293" Score="19" Body="&lt;p&gt;You probably don't encounter these glitches because you play the game as the developers intended.&lt;/p&gt;&#xA;&lt;p&gt;In Oblivion you can pickup plates and stuff to move or throw (which is the intended use), but if you place the plate below yourself while holding, you could jump on it making you and the object move up and then you could jump on it again and again (which kinda makes your fly). But in real life you would never try to jump on a plate you holding below yourself, so why would you in the game.&lt;/p&gt;&#xA;&lt;p&gt;It probably helps if you know some programing, but this behavior kinda makes sense from a programming point of view. So knowing what kind of mistakes people can make while developing a game, and just trying lots of random stuff. You will probably find a few glitches in any game.&lt;/p&gt;&#xA;&lt;p&gt;Lots of retro games can now also be simulated on the computers, which give the users lots of tools to find these bugs easier.&lt;/p&gt;&#xA;&lt;p&gt;IGN has videos of developers responding to speedruns, they sometimes explain what went wrong in development for the glitch to happen.&#xA;Or Stryder7x has videos in which he explains glitches in Mario the thousand year door.&lt;/p&gt;&#xA;" OwnerUserId="19556" LastActivityDate="2020-10-05T13:50:02.293" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16462" PostTypeId="2" ParentId="16455" CreationDate="2020-10-05T13:57:09.663" Score="29" Body="&lt;p&gt;The short answer is: These games are built on code which is supposed to simulate the laws of physics, at least for motion.  But they are also &lt;em&gt;games&lt;/em&gt;, which means that that code has to run fast enough for the game to be playable.  To do that on the original hardware (which, after all, cannot run arbitrarily fast &lt;em&gt;like nature does&lt;/em&gt;), the code author had to take short-cuts in the physics simulation.  Those short-cuts cause side-effects which are not necessarily obvious (especially to a developer under pressure to get the product out &lt;em&gt;now&lt;/em&gt;).  People who play the games often enough and with enough variation in action eventually stumble on those side effects - and occasionally they are exploitable.&lt;/p&gt;&#xA;" OwnerUserId="19558" LastActivityDate="2020-10-05T13:57:09.663" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16463" PostTypeId="2" ParentId="16455" CreationDate="2020-10-05T15:17:28.797" Score="10" Body="&lt;p&gt;A good way to think about it is to consider board, card and tabletop games:&lt;/p&gt;&#xA;&lt;p&gt;A board game has rules: who goes first, what happens when you land on a space; and state: whose turn is it, where the pieces currently are, how much each player has. So does a card game like &lt;em&gt;Magic the Gathering&lt;/em&gt;, and a tabletop role-playing game like &lt;em&gt;Dungeons &amp;amp; Dragons&lt;/em&gt; has a lot more.&lt;/p&gt;&#xA;&lt;p&gt;Do these games have glitches too? They do, in a manner of speaking! What is a glitch? Let's say it's a vastly unexpected interaction that comes about because of some combination of states according to the rules of the game.&lt;/p&gt;&#xA;&lt;p&gt;(Let's discount non-repeatable glitches that come about by freak specific circumstance. Knocking over the board, stealing money, pulling out the cartridge...)&lt;/p&gt;&#xA;&lt;p&gt;If there was some quirk of the rules in &lt;em&gt;Monopoly&lt;/em&gt; that, if strictly followed, meant that a player could take infinite turns, or collect $200 GO money every turn, that'd be a glitch. &lt;em&gt;Dungeons &amp;amp; Dragons&lt;/em&gt; is vastly more complicated than &lt;em&gt;Monopoly&lt;/em&gt; - by 'some interpretation of the rules', a super-powerful character like &lt;a href=&quot;https://1d4chan.org/wiki/Pun-Pun&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pun-Pun&lt;/a&gt; can be developed. This and similar characters are made by looking at the rules of the game, coming up with some assumptions about how the model of the game works, and finding through trial-and-error or exhaustion the limits where the rules no longer apply. Look at the conditions you have to follow to make that character - doesn't it resemble the totally weird sets of button presses and conditions the player has to input to execute a &lt;em&gt;Super Mario 64&lt;/em&gt; glitch technique?&lt;/p&gt;&#xA;&lt;p&gt;The &lt;em&gt;RPG&lt;/em&gt; and &lt;em&gt;Board &amp;amp; Card Games&lt;/em&gt; Stack Exchanges are all-but dedicated to the resolution of unusual cases and combinations of states and rules within games like this.&lt;/p&gt;&#xA;&lt;p&gt;The 'advantage' of these non-electronic games above computer games is that the rules are being interpreted by humans. Humans have the advantage of understanding the context of the world, and can be flexible with the rules - every non-electronic game is played by mutual agreement and understanding of the players involved. If the rules listed a human player character's standard running speed in miles-per-second instead of miles-per-hour, you'd understand that it was a mistake and perhaps a misprint, unless they were The Flash. If a rule is blatantly unfair or unrealistic in context, even by design, you can strike it out.&lt;/p&gt;&#xA;&lt;p&gt;The glitches of &lt;em&gt;Super Mario 64&lt;/em&gt; are more striking compared to a tabletop game because everything happens in real-time: resolution of the rules is automatic and instant, and the rest of the game continues as normal around it. There's no referee to appeal to - if 'the rules' say Mario can do it, and XYZ happens as a result, that's what happens.&lt;/p&gt;&#xA;&lt;p&gt;How are things like this found? By accident, through observation and repetition. In video games there's also a sneaky way that we don't (yet) have in real life: examination of the code.&lt;/p&gt;&#xA;&lt;p&gt;It's like a scientific discipline - when something unusual happens, you construct a mental model of what is happening and why, what the rules and state are and how they're represented, attempt to repeat the conditions you've laid out, and ultimately determine the conditions by which something does and doesn't happen. The game &lt;em&gt;Super Mario 64&lt;/em&gt; is an imperfect realisation of the intended design, either through compromise or error.&lt;/p&gt;&#xA;&lt;p&gt;Why would 'the rules' be wrong with respect to the intent?&lt;/p&gt;&#xA;&lt;p&gt;A perfectly stable game would have the following properties.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;The model considers every possible interaction of every possible set of objects under all circumstances.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;There's a sensible response to each of these circumstances.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;It's impossible to violate the assumptions built into the model.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The model is an accurate description of the intended simulation.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;When one of these conditions isn't met, your simulation won't match your expectations, and you'll have a glitchy game.&lt;/p&gt;&#xA;&lt;p&gt;If you're already carrying an object, can you pick up another? What if you're sliding down a ramp while crouched and collide with a Wing Cap? Does collision still apply during the 'putting the hat on' animation? What happens if you get hit while opening a door? Is there a maximum speed if you continue move using a specific maneuver? Somebody has to think of all these things. If a limit isn't explicitly established, it doesn't exist. It might implicitly be bounded as a consequence of other rules, but if &lt;em&gt;those&lt;/em&gt; rules can be evaded, then speed, location, score, lives, time are all up for grabs.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-10-06T08:48:05.477" LastActivityDate="2020-10-06T08:48:05.477" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16465" PostTypeId="2" ParentId="16437" CreationDate="2020-10-05T18:20:39.580" Score="1" Body="&lt;p&gt;They still have internal power supplies. When you see an external supply, it's usually an AC-DC converter taking mains AC and converting it to an intermediate voltage, 5-20V. The computer contains DC-DC converters to make the voltages it needs from that.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2020-10-05T18:20:39.580" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16466" PostTypeId="2" ParentId="16455" CreationDate="2020-10-05T21:57:44.973" Score="3" Body="&lt;p&gt;In programming, it's common for a seemingly benign oversight to result in wild behavior. (e.g. division by zero, infinite loops) Weird behavior still notoriously happens even in big-budget, more modern games by Bethesda. In SM64/OOT, the glitches tend to happen because A) the player is able to build up speed beyond the intended cap (backwards long jumping repeatedly to stack speed) or B) the game is unable to calculate/handle certain types of collision. Basically, an underflow/overflow type of programming error where the game doesn't know what X/Y/Z coordinates to put the character, so it goes somewhere unintended.&lt;/p&gt;&#xA;" OwnerUserId="19569" LastEditorUserId="19569" LastEditDate="2020-10-06T12:43:32.203" LastActivityDate="2020-10-06T12:43:32.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16467" PostTypeId="2" ParentId="16455" CreationDate="2020-10-05T23:02:08.623" Score="14" Body="&lt;p&gt;No software is ever bug-free, and games are no exception.  The reason most of these bugs seem so crazy is that they're complex and frequently require several things to go right (wrong?) at the same time, combinations of things that rarely make sense in the context of normal gameplay.&lt;/p&gt;&#xA;&lt;p&gt;A large portion of these exploits are discovered by people playing the game in an emulator.  When you're emulating the hardware, you can pause the emulation and examine the internal machine state at any point in time.  You can see exactly which memory locations get modified when you pick up a coin or when you change the direction that you're moving.  After you understand how all of the individual pieces of the game work, you can start thinking about what might happen when you combine those pieces in unintended ways.  If you want to travel across the map quickly, you might start by examining moves that temporarily increase your movement speed and then try to make that increase permanent by finding a way to interrupt or bypass the code that resets your movement speed to normal at the end of the move.&lt;/p&gt;&#xA;&lt;p&gt;In other words, those exploits likely weren't discovered by someone who decided to stand in this particular corner and press a random button sequence to see what happened.  They were discovered by someone who studied how the game worked and is actively trying to break it.  You start with the &lt;em&gt;effect&lt;/em&gt; that you want, then you contrive some sequence or situation (the exploit) that could &lt;em&gt;cause&lt;/em&gt; that effect.&lt;/p&gt;&#xA;&lt;p&gt;Once you have the exploit created, you can use it in the original, non-emulated version of the game as well.  This makes it look more impressive since you're obviously not using some sort of modified version of the game.  Some exploits require timing so precise that it's not feasible for a human to do by hand.  Those exploits typically require an emulator, so that software can trigger the exploit with the required precision (as in a &amp;quot;tool-assisted speedrun&amp;quot;).&lt;/p&gt;&#xA;" OwnerUserId="13431" LastActivityDate="2020-10-05T23:02:08.623" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16468" PostTypeId="1" AcceptedAnswerId="16469" CreationDate="2020-10-06T03:06:52.807" Score="8" ViewCount="800" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Enterprise_(computer)&quot; rel=&quot;noreferrer&quot;&gt;The Enterprise 64 or 128 Home Computer apparently had a palette of 256 colors.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;However, that is pretty unusual and doesn't fit evenly into the typical 3 channels for RGB. Wikipedia doesn't provide any additional information.&lt;/p&gt;&#xA;&lt;p&gt;So, were the available bits per channel unevenly assigned and thus not equally represented in the machine's color space?&lt;/p&gt;&#xA;&lt;p&gt;Or was there an additional intensity channel (RGBI)?&lt;/p&gt;&#xA;&lt;p&gt;Or did that computer use an entirely different color model than RGB?&lt;/p&gt;&#xA;" OwnerUserId="19548" LastEditorUserId="19548" LastEditDate="2020-10-06T03:12:03.107" LastActivityDate="2020-10-06T05:50:17.420" Title="What kind of 256 color palette did the Enterprise 64/128 have?" Tags="&lt;graphics&gt;&lt;video&gt;&lt;display&gt;&lt;8-bit-microcomputers&gt;&lt;color-display&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16469" PostTypeId="2" ParentId="16468" CreationDate="2020-10-06T05:50:17.420" Score="10" Body="&lt;p&gt;The &amp;quot;Technical Descriptions&amp;quot; link for the Nick Chip on &lt;a href=&quot;http://enterprise.iko.hu/technical.htm&quot; rel=&quot;noreferrer&quot;&gt;this Enterprise 64/128 Technical Information page&lt;/a&gt; is a &lt;code&gt;.pdf&lt;/code&gt; file. Page 13 of this file seems to say that the 256-color palette uses 3 bits for red, 3 for green, and 2 for blue.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-10-06T05:50:17.420" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16470" PostTypeId="2" ParentId="3175" CreationDate="2020-10-06T07:10:27.540" Score="4" Body="&lt;p&gt;The emulator B7094 come with Fortran 2 and Fortran 4.&lt;/p&gt;&#xA;&lt;p&gt;It's relatively easy to use (much easier than hercules, of course) : &lt;a href=&quot;https://www.majorgeeks.com/files/details/b7094_ibm_7094_emulator.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.majorgeeks.com/files/details/b7094_ibm_7094_emulator.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Fortran 4 is very similar to the &amp;quot;still in use&amp;quot; Fortran 77 and any incompatibility can be easily patched. I don't remember if it's shipped with the emulator, but Fortran 2 &amp;amp; 4 manuals for the IBM 7094 can be easily found in pdf.&lt;/p&gt;&#xA;&lt;p&gt;You'll have emulated punch card and printer as well as a bunch of tape drive.&#xA;Last but not least, it have a &amp;quot;blinkenlights&amp;quot; panel.&lt;/p&gt;&#xA;&lt;p&gt;Thing of beauty and joy forever.&lt;/p&gt;&#xA;&lt;p&gt;Side note if you're an educator :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;this is sersiously hardcore oldschool Mainframe (you asked for it :D)&lt;/li&gt;&#xA;&lt;li&gt;No interactive shell, well... no shell at all actually.&lt;/li&gt;&#xA;&lt;li&gt;You powerup, load the fortran compiler, load the source code (punch card), compile the source code, get compiled code (punch card), load the compiled code (punch card), load the data punch card (if the code is waiting for data), get the result (printer/punch card).&lt;/li&gt;&#xA;&lt;li&gt;most (if not all) can be automated using some kind of batch file which is purely specific to the emulator.&lt;/li&gt;&#xA;&lt;li&gt;You get some kind of interactive shell but it's purely the emulator being nice to you to automate the button pushing and punch card manipulation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Good luck, it's very fun.&lt;/p&gt;&#xA;" OwnerUserId="15372" LastActivityDate="2020-10-06T07:10:27.540" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16471" PostTypeId="1" CreationDate="2020-10-06T09:24:55.933" Score="16" ViewCount="1355" Body="&lt;p&gt;On today's keyboards, the two Shift keys are somewhat elongated horizontally, but otherwise look much the same as any other key on the keyboard.  However, in times past it was not altogether unusual for Shift keys to have quite a different profile: overall the key was wider than the other keys, but the left and right edges were recessed.  The centre of the key jutted out from this recessed base, with a pressable surface that was about the same size, or maybe only slightly wider, than a normal alphanumeric key.  Below is an example of such a keyboard (namely, the famous &lt;a href=&quot;https://en.wikipedia.org/wiki/Space-cadet_keyboard&quot; rel=&quot;noreferrer&quot;&gt;space-cadet keyboard&lt;/a&gt; of 1978):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IBRe4.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IBRe4.jpg&quot; alt=&quot;Photograph of a space-cadet keyboard showing the partially recessed Shift keys&quot; /&gt;&lt;/a&gt;&#xA;&lt;em&gt;Source: &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Space-cadet.jpg&quot; rel=&quot;noreferrer&quot;&gt;Space-cadet.jpg&lt;/a&gt; by Shieldforyoureyes Dave Fischer / Retro-Computing Society of Rhode Island. Licensed under the &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/deed.en&quot; rel=&quot;noreferrer&quot;&gt;CC BY-SA 3.0 Unported&lt;/a&gt; licence.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now, I'm not saying that such Shift keys were ubiquitous in the past, nor that they are never found at all on modern-day keyboards, though in my experience they were much more common thirty or forty years ago than they are now.  I'd like to know the reason that these Shift keys (and no other keys on the keyboard) were designed this way and why this design seems to have disappeared.  Was there a particular ergonomic reason for the shape that applied back then but that is no longer relevant today?&lt;/p&gt;&#xA;&lt;p&gt;I suppose it could be argued that the unusual shape makes the keys easier to distinguish when touch-typing, though I've personally never had any problems finding the Shift key when my fingers are on the home row, and besides, the recessed edges seem to make the key harder to strike reliably.  Moreover, ergonomic aids don't seem to be high up on the list of features of ancient keyboards—for example, I don't recall seeing any of them with bumps on the F and J (or D and K) keys that are used today to help touch-typists find the home row.  If there really is some ergonomic benefit to this Shift key shape, then why don't most modern keyboards (even relatively expensive ones) continue to use it?&lt;/p&gt;&#xA;&lt;p&gt;Is it possible that this Shift key design had its roots in mechanical typewriters, and got mindlessly carried over to computer keyboards?  If so, what mechanical benefit did this design have, and why was it applied only to the Shift keys and not to other large keys such as the Return key or (on some typewriters) the Tab or Backspace keys?&lt;/p&gt;&#xA;" OwnerUserId="6527" LastActivityDate="2020-10-06T10:39:44.477" Title="Why are older Shift keys shaped the way they are?" Tags="&lt;keyboards&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16472" PostTypeId="2" ParentId="16471" CreationDate="2020-10-06T10:39:44.477" Score="6" Body="&lt;p&gt;Simple answer: When there is a definite place where the key has to be pressed, there is much less probability that the key is pressed off-center and binds, thus you could possibly do without the wire linkage that prevents that on most modern keyboards.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2020-10-06T10:39:44.477" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16473" PostTypeId="2" ParentId="16455" CreationDate="2020-10-06T11:40:59.900" Score="8" Body="&lt;p&gt;Since Ocarina of Time was mentioned, I'll say a little about that too, and things that aren't related to faulty collision detection. Many of the really game-breaking glitches in this game (i.e. which speedrunners would find useful) depend on the player doing two or more things simultaneously (or in quick succession), and the game doing unexpected things as a result.&lt;/p&gt;&#xA;&lt;p&gt;Here is a simple glitch that anyone can try out. It will replace any item in your inventory with a bottle (perform at your own risk). Have an empty bottle equipped, and go to something you can catch in a bottle (say a fish, that is easiest). Use the bottle. As Link starts swinging the bottle, pause and equip something else instead of the bottle. Unpause, let Link finish capturing. You now have a bottle with a fish equipped, and if you go to the item screen, you will see that the item you equipped over the bottle is replaced with your new bottled fish.&lt;/p&gt;&#xA;&lt;p&gt;So what happened? The developers didn't make it so that equipping something over a bottle cancels the capturing. That's all. It's a simple oversight. To understand the result, let's take a look at how a capture normally works:&lt;/p&gt;&#xA;&lt;p&gt;When Link has captured a fish, the game looks back in time at what C-button was pressed to do the capture. It overwrites the empty bottle that was there with a filled bottle. But the item menu must also be updated. For this purpose, the game also keeps track of what item menu slot has been equipped to what C-button (if you're familiar with the look of the item menu, basically, where the white squares are). And then it just overwrites the corresponding slot with the same filled bottle. It doesn't check that that slot previously held an empty bottle. Why would it? You must have had a bottle equipped on the C-button in the first place, right?&lt;/p&gt;&#xA;&lt;p&gt;And now you can probably see how you can replace your deku nuts or your hookshot or whatever else with a bottle. If you, between the time when you started the capture, and the time when the capture is completed, change which item is on the C-button, then the newly filled bottle will be written to some other item location. The game just carries on without bothering to check that what it does makes sense.&lt;/p&gt;&#xA;&lt;p&gt;Many of the more advanced glitches you will see speedrunners do, at their core, are in much the same way about doing two or more things simultaneously or right after one another, make the game similarily confused, and through that gaining access to changing pieces of memory that a player isn't normally supposed to have access to, or achieve other crazy effects. This particular glitch is quite limited in what it can write to where, but other glitches are much more flexible.&lt;/p&gt;&#xA;&lt;p&gt;For instance, say you managed to get a bottle on your B button (which is done by timing button presses much like the pausing and equipping above, but it is more precise, and I don't know the exact approach myself; the effect is that you confuse the &amp;quot;looking back in time&amp;quot; part of the above to make the game think you used your sword last). Using that bottle will completely confuse the &amp;quot;where is the white square&amp;quot; part of the above description (conveniently based on what item you have equipped on your C-right, because of how the memory is laid out). This gives you access to much more than just the items in your inventory, and lets you force, say, the game to write a &amp;quot;bottled fish&amp;quot; into your medallion or song collection. This is the glitch known as &amp;quot;reverse bottle adventure&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;As for how people find these, some of them are found on accident. Some have been discovered, thought to be some funny one-off thing with no application, and years later found to be game-breaking (&amp;quot;stale reference manipulation&amp;quot; and &amp;quot;wrong warping&amp;quot; come to mind, and reverse bottle adventure was thought to be nothing but a stepping stone to the now less known &amp;quot;bottle adventure&amp;quot;, until it was discovered to have its own very useful effects). And some glitches are hunted for. There are people who have a tremendous understanding of how the game works, think of something they want to achieve, and use their knowledge, together with their community, to see if they can make it happen. Barrier skip from Wind Waker is the most well-known successful such community driven glitch hunt that I know of.&lt;/p&gt;&#xA;" OwnerUserId="8606" LastEditorUserId="8606" LastEditDate="2020-10-06T20:43:35.383" LastActivityDate="2020-10-06T20:43:35.383" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16474" PostTypeId="2" ParentId="11800" CreationDate="2020-10-06T15:04:34.507" Score="7" Body="&lt;p&gt;Most of all, the form of the message reflects the underlying architecture of Windows 386 Enhanced mode.&lt;/p&gt;&#xA;&lt;p&gt;Enhanced mode Windows kernel &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20100517-00/?p=14013&quot; rel=&quot;noreferrer&quot;&gt;consists of two mostly independent layers&lt;/a&gt;. I am going to refer to them in this answer as the ‘supervisor’ and the ‘hypervisor’, although those terms are somewhat anachronistic: they were not used at the time to describe the design of Windows, although the terms already existed back then.&lt;/p&gt;&#xA;&lt;p&gt;The supervisor is pretty much Standard mode Windows, and it handles most of what we think of as ‘Windows’ proper: starting Windows applications, scheduling them, drawing on the screen and handling application crashes. Displaying messages informing of the latter is the responsibility of an internal API call named &lt;code&gt;SysErrorBox&lt;/code&gt;; other than being modal to the entire system, the message box is a completely ordinary window, handled by the same message loop architecture as every other window in the system.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wtDSR.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wtDSR.png&quot; alt=&quot;Screenshot of a white dialog box in Windows 3.11 with the title ‘Hello’, message ‘This is a SysErrorBox!’, and a single OK button. Underneath, Borland Pascal 7 for Windows IDE dislaying the source code of the program which produced it.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As for the distinction between error boxes that contain the ‘Ignore’ button and those which don’t, the &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20150717-00/?p=90881&quot; rel=&quot;noreferrer&quot;&gt;blog post linked in the question&lt;/a&gt; already explains it: whether the button appeared depended on whether the crash handler is able (and willing) to skip the particular instruction which triggered the crash. Either of these can result from a General Protection Fault (which usually means memory corruption), so they are about equally severe. The ‘Ignore’ feature appeared in Windows 3.1 (in earlier versions, all crashes were unrecoverable) and existed mostly to give the user a last-ditch option to attempt to save their data and exit the program relatively gracefully. The error message instructed the user to save their data in a &lt;em&gt;new&lt;/em&gt; file to prevent overwriting a known-good file with a potentially corrupted version (as it might very well be, given that it was written by an application in a corrupted state).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The hypervisor layer is the Virtual Machine Manager: its purpose is mainly to allow running DOS programs under Windows. Both the supervisor and each DOS box runs in a separate virtual machine; the virtual machine which runs the former is called the System VM. The VMM decides how those virtual machines map to physical hardware: it may, for example, direct writes to screen memory to update the contents of a DOS box window. Unlike the supervisor, the VMM does not understand how to draw on the screen and only knows enough about devices to know how to dispatch signals from them to the correct virtual machine. Most screen operations are handled by the virtual machines themselves; the VMM only contains just enough display drivers to be able to switch the video hardware to text mode and back. And so, when the VMM needs to communicate something to the user without the help of the System VM, that’s exactly what it does.&lt;/p&gt;&#xA;&lt;p&gt;As others have already pointed out though, &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20140909-00/?p=44123&quot; rel=&quot;noreferrer&quot;&gt;Windows 3.1 does not use full-screen text mode messages to inform of crashes&lt;/a&gt;: the actual Blue Screen of Death did not appear &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20140910-00/?p=44113&quot; rel=&quot;noreferrer&quot;&gt;until Windows 95&lt;/a&gt;. An outright crash in the VMM would take the entire system down and return the user to a DOS prompt. In Windows 3.x, messages from the VMM usually relate to the rather specific job it performs: for example, it informs the user about hardware conflicts and prompts the user to switch floppies when performing dual floppy drive emulation on a single-drive system. The VMM also includes a &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20140902-00/?p=93&quot; rel=&quot;noreferrer&quot;&gt;rudimentary software hang detector&lt;/a&gt;: pressing &lt;kbd&gt;Ctrl&lt;/kbd&gt;&lt;kbd&gt;Alt&lt;/kbd&gt;&lt;kbd&gt;Delete&lt;/kbd&gt; prompts the VMM to check for a Windows process stuck in a message loop and offer to forcibly terminate it. This results in the blue screen prompt featured in the question.&lt;/p&gt;&#xA;&lt;p&gt;Blue screen prompts can be, among other causes, triggered by VxD drivers through the VxD service &lt;code&gt;SHELL_SYSMODAL_Message&lt;/code&gt;, although that is not &lt;em&gt;quite&lt;/em&gt; its exact purpose — when invoked on behalf of a DOS box, it may try to display a regular message box instead, by handing over the request to the System VM.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NNTlJ.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NNTlJ.gif&quot; alt=&quot;Windows 3.11 showing a blue screen message, with the title ‘SHELL_SYSMODAL_Message’ and the lyrics to Rick Astley’s ‘Never Gonna Give You Up’ as the main message body. At the bottom, there is a prompt ‘Press Y for Yes or N for No’; at the position of the caret, the letter N appears.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/y9bgK.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y9bgK.png&quot; alt=&quot;Windows 3.11 showing the same message as above, but in a graphical message window instead: instead of a text prompt, there are graphical buttons ‘Yes’ and ‘No’, with the mouse pointer hovering over ‘No’. In the background, an MS-DOS Prompt window is seen, running the command ‘rickroll’.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-10-11T08:54:02.173" LastActivityDate="2020-10-11T08:54:02.173" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16475" PostTypeId="2" ParentId="16455" CreationDate="2020-10-06T19:05:17.167" Score="8" Body="&lt;p&gt;I'll be focusing first on the &amp;quot;How does anyone find that?&amp;quot; part of your question, but that will lead us to the &amp;quot;how did they get there&amp;quot; portion too:&lt;/p&gt;&#xA;&lt;p&gt;There are a few ways.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Chance&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Some things will just happen by random chance. I have come across glitches in some games where I've fallen through the floor, for example. Often these funny mistakes get spread around, because they are interesting and unusual. With millions of players, playing for cumulatively 10's or 100's of millions of hours of game time, you'd be surprised at the &amp;quot;glitch&amp;quot; conditions which can be generated purely by accident. Some of these things will be spread around, by word of mouth or particularly in the internet age, by videos etc. on social networks or on YouTube.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Programming knowledge leading to discoveries&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Second, if you have ever tried to program games, or even if you've just tried any kind of coding in general, you may be able to, when you play a game, think about how it's likely to have been coded. For example, I have only ever coded one thing which somebody might charitably call a game - as part of a university project. That game had collision detection, admittedly only in 2D and really only for the player character, so it would have been much simpler than the implementation in Mario, but there are still some things we can learn.&lt;/p&gt;&#xA;&lt;p&gt;Collision detection is a system with code which figures out if the character you are controlling (or indeed, any other object, character etc.) has collided with an object, the floor, another character, etc. - typically, for the player character, it will work something like this:&lt;/p&gt;&#xA;&lt;p&gt;For each frame:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Move the character where you're telling it to move (calculate a new position based on movement speed and direction)&lt;/li&gt;&#xA;&lt;li&gt;Check if any part of your character (or maybe just a subset of points related to the character's limbs to make it simpler, or sometimes just one point relating to your character's position, depending on the nature of the game, player models, etc.) is inside of another object (or character etc.) - if this is the case: move the character back so they are just touching the wall/character/object, and possibly perform some action - if Mario has run into a wall fast enough, he might &amp;quot;bonk&amp;quot; off of it and say &amp;quot;ow!&amp;quot;. &lt;em&gt;More generally&lt;/em&gt;, not just for collision detection, the process is: Change some state about the game (player position, move speed, etc.), check the new state for anything important, if anything important has happened or there are problems with the new state (such as the character being inside a wall), do something about it (resetting values, having a collision &amp;quot;bonk&amp;quot; and repositioning, updating the player's score, killing the player, etc.).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Having coded a &lt;em&gt;very&lt;/em&gt; basic implementation of this myself, I ran into a problem: My player character could speed up as the game progressed. If he went fast enough, I could (potentially) run into a problem where on one frame he is to the left of a wall moving rightwards, I would calculate his new position based on direction and speed, check to see if his position was intersecting a wall or object, but find that because of his high speed, he has actually passed &lt;em&gt;entirely through&lt;/em&gt; the wall or object so that he is fully on the right side of the wall, without intersecting on the next frame, and therefore my collision detection code would say &amp;quot;Nope! Everything OK! Don't need to do anything here!&amp;quot;. One of the key things to realise here is that speed, position etc. are calculated and checked in discrete increments - in most modern games this will be 60 times per second as this is the frame rate the game runs at - and as the travel speed increases, as the character travels further between each frame, the &lt;em&gt;distance&lt;/em&gt; between each check that occurs increases.&lt;/p&gt;&#xA;&lt;p&gt;There are ways to code around this, but it was what's called an &amp;quot;edge case&amp;quot; - the character would have to be going very fast for this to happen, and it's extra work to code in this more robust way - besides, I worked it out and the character could never &lt;em&gt;actually&lt;/em&gt; get up to a speed fast enough to cause this to happen.&lt;/p&gt;&#xA;&lt;p&gt;But what if I was wrong about that? What if there's some edge case or just outright mistake in the code which calculates the character speed? What if I've limited the speed a character can run at, but I've got something which increases your speed when you do a certain kind of jump? Like a long jump? Even if only temporarily? Say I've coded it so that when you do a long jump, you're travelling faster than the max run speed while you're jumping, but you very quickly slow back down again when you hit the ground, say within 2-3 frames (to make the animation look smooth, for example). What if, then, the player realised that with extremely precise timing they could chain long jumps together, and have it so that the second (and third and nth) long jumps increased the speed even further?&lt;/p&gt;&#xA;&lt;p&gt;Well OK. I've realised this and caught it, and coded in a hard speed limit for the character. The character can now only move forwards at a maximum of 20 units per second (this is an arbitrary number but you get the idea). What I've failed to account for though is that under certain circumstances such as standing on a steep staircase, the player can perform a long jump but it'll actually move them backwards! I've put a forwards speed limit in but not a backwards one, and now the character can do a backwards long jump over and over again, provided they are standing facing down a steep enough slope, build up extreme speed, and that with this extreme speed they can end up in the situation I mentioned where they clip straight through a wall very quickly (essentially they would be &amp;quot;inside the wall&amp;quot; &lt;em&gt;between frames and position checks&lt;/em&gt;), and the collision detection code which is meant to stop your character passing through that wall doesn't detect any problems.&lt;/p&gt;&#xA;&lt;p&gt;So what you can take from this is two things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Glitches are often a result of edge cases which the programmers thought were either impossible (mistakenly) or that would be so rare that it wasn't worth the extra effort to code around. They might also be a result of &lt;em&gt;multiple&lt;/em&gt; edge cases for different systems in the game (movement and collision detection in this case) interacting with each other.&lt;/li&gt;&#xA;&lt;li&gt;If you understand how at least some aspects of game coding &lt;em&gt;in general&lt;/em&gt; work then you may be able to make guesses about how you can break the game - in this case, knowing how collision detection is generally implemented, you might already have realised that a) speed can break it, and b) there's a speed limit for Mario going forwards, but when you see a backwards jump which seems unusual, you may think &amp;quot;Ah, I wonder if they remembered to put a speed limit in for that?&amp;quot;, test it out, and it turns out that no, they didn't, and voila, you can break the game.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Deconstructing the actual game code&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This next method is a step further from the above: If you can manage to get the code onto a PC (which could be done all sorts of ways, from just reading game discs directly, to more involved methods like connecting to console expansion ports, sometimes by the creation of additional specialist hardware; soldering additional wires to console main boards, etc.) then you can &lt;em&gt;decompile the code&lt;/em&gt;. Source code for any kind of program typically looks something like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PlayerAccel=2&#xA;PlayerSpeedMax=20&#xA;&#xA;If ButtonPressed.MoveForward = true; Has the player pressed the button to move forward?&#xA;   PlayerSpeed += PlayerAccel; Increase the player's speed by PlayerAccel figure&#xA;EndIf&#xA;&#xA;If Player.Speed &amp;gt; PlayerSpeedMax; Check player speed&#xA;   Player.Speed = 20; Reset player speed&#xA;EndIf  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now this is a very simplistic example, not from a real programming language, but the point is that you can look at it and fairly easily (especially if you know the particular language) work out exactly what's going on. This is how the original game programmers make the game. If you had access to this code you could very easily look for things that are not coded robustly and exploit them. Unfortunately the code you get from dumping game files is not this - the code is &lt;em&gt;compiled&lt;/em&gt; which means that some software takes it from easily-human-readable codes and converts it into code which the computer chip can execute very quickly. It looks something more like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JcUBV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JcUBV.png&quot; alt=&quot;Decompiled code example&quot; /&gt;&lt;/a&gt;&#xA;(Note this is not the same code, this is a random example - also this is x86 code for a PC, and not Nintendo native code, which would look different, but be more or less as difficult to read)&lt;/p&gt;&#xA;&lt;p&gt;As you can see it is NOT easy to read, there are no variable names or comments to tell you what's happening. There are additions, subtractions, moving data from one memory location to another, conditional jumps to new places in the code etc. - it is not easily-human-readable but that's fine, because the computer only processes the numbers and outputs the results, it doesn't need to know whether a figure relates to the player's speed in order to perform the necessary calculation. Unfortunately, this is what you get back when you decompile the code from a game. Now importantly, with the use of emulators and tools, you can look at the values of any one of these variables at a point in time.&lt;/p&gt;&#xA;&lt;p&gt;So it is possible to do things like look at the variable held in a particular memory location and watch how it changes over time. If you were looking for a &amp;quot;Player Speed&amp;quot; variable, you could put a watch on 20 different variables, play the game a bit, move around and see which variable changes as you'd expect with player movement (increasing as you run faster). Another thing which can help is that sometimes messages which come up in game, like &amp;quot;I'm sorry Mario, the Princess is in another castle&amp;quot; &lt;em&gt;may&lt;/em&gt; be in the code in plain text, so they can give you clues as to which variables make certain things happen. Alternatively you could make changes to some value (change a 1 to a 2) and see how that affects what happens in the game - though often this is more likely to just break a game and make it crash.&lt;/p&gt;&#xA;&lt;p&gt;Once you've figured out which variable it is you've been looking for, you can use decompilation software to start reconstructing something &lt;em&gt;like&lt;/em&gt; the original code, (note you can never reconstruct a perfect version as some information is lost - but you can make educated guesses) and name that variable as something like Player.Speed instead of something unreadable. You can do this again and again and again until you have something which more resembles the original game source code, piecing it all back together as you go. It's a long and arduous process, and the result will be messy, and the variables won't have the original names, &lt;em&gt;and&lt;/em&gt; there will be no comments on the code (except any which you add to help you keep track) but again, it doesn't need to be perfect to still help you figure out how you can break the game.&lt;/p&gt;&#xA;&lt;p&gt;In fact, people have done this exact thing, with Mario 64, and almost certainly with other games too.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Source code leaks&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Occasionally, although very rarely, the &lt;em&gt;actual original source code&lt;/em&gt;, that is, the code which the programmers wrote when the game was originally created, in easily-human-readable code, with comments and helpful variable names etc., gets leaked to the public. In some cases, a developer will freely release the code - Id Software did this with a number of its older games including Quake 3, but it's something Nintendo, to my knowledge, have never done. It would need to be released by somebody working for the company, or somebody who has hacked into the company's servers etc.&lt;/p&gt;&#xA;&lt;p&gt;However, the (I think partially incomplete?) source code for Mario 64, Ocarina of Time and Majora's mask did finally leak this summer, back in June, which was huge news at the time.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, as explained above, if you can see the game's code (either by seeing the actual original code or reconstructing some semblance of it) then you can find glitches more easily.&lt;/p&gt;&#xA;&lt;p&gt;I realise I've been talking about Mario here but the general processes described above will work for any game... it can be a &lt;em&gt;lot&lt;/em&gt; of effort for a complex game - it may take thousands of hours to decompile and reconstruct - but these days with vibrant speedrunning communities etc. more people have the incentive to do it. Also bear in mind that often in order to break certain aspects of a game you might only need to deconstruct a small percentage of the whole game's code. If you're only trying to break movement, then you don't have to reconstruct the code for the game's item-handling system, for example.&lt;/p&gt;&#xA;&lt;p&gt;So generally we can walk away with the following knowledge:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Programmers make mistakes and miss things - programming for every possible situation is really hard and rarely worth the effort.&lt;/li&gt;&#xA;&lt;li&gt;Programmers are lazy - or to put it more positively, they make efficiency choices about programming around edge cases - if something will happen very rarely, like a player would have to do something with very very precise timing, multiple times for something to happen, and it's very unlikely to ever happen by chance for more than one in 100,000 players, is it really worth spending 10's or 100's hours changing all of your code in complex ways to make sure that can't happen, or is it not really worth it?&lt;/li&gt;&#xA;&lt;li&gt;Gamers will go to great lengths to figure out ways in which they can break a game they're trying to set records for (or sometimes just to find interesting secrets).&lt;/li&gt;&#xA;&lt;li&gt;There are ways in which you can make educated guesses about how a game is coded and then test those hypotheses to find glitches.&lt;/li&gt;&#xA;&lt;li&gt;There are ways to look at the nuts and bolts of how the game actually works, and again if you have decent programming knowledge this can help you to &amp;quot;break the game&amp;quot;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10240" LastEditorUserId="10240" LastEditDate="2020-10-08T05:06:06.400" LastActivityDate="2020-10-08T05:06:06.400" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16476" PostTypeId="2" ParentId="16437" CreationDate="2020-10-06T22:03:36.897" Score="4" Body="&lt;p&gt;Good points in earlier answers, but one is overlooked. The Ibm PC needs a set of different voltages, like +5V for the main board, +12V for disk drives, -5V for the RS-232 serial interface, -12V in case you have a special board that needs it. It would be quite impractical to have an external power supply connected with a cable to the PC with that many conductors.&lt;/p&gt;&#xA;&lt;p&gt;In fact, modern PC's need most power at extremely low voltages, like 3.3 V, 1.5 V, perhaps even 0.8 V for the CPU. At a power level of over one hundred watt, this needs a LOT of amps (I should say: current). Completely nonsense to supply this through wires from an external power supply. These voltages do not even come directly from the PSU, but from dc-dc converters on the main board, just 1 or 2 cm remote from the cpu chip. Just look at those 4 to 8 funny cm-size inductors and transistors right next to the cpu. These cpu power voltages are not standardized, but differ for each cpu type. The central PSU unit of the PC does not even know the cpu type, which is another reason why the cpu voltages are converted and regulated locally at the main board.&lt;/p&gt;&#xA;&lt;p&gt;That said, you can buy pc cases with a PSU that accepts 12 V DC and generates all required ATX voltages. That gives you the flexibility to hook it up to any external 12 V power supply, e.g. from the 110V AC or 230 V AC wall socket, or from a car battery, UPS battery, solar panel etc.&lt;/p&gt;&#xA;&lt;p&gt;In all, it was not a poor decision to build in the power supply. As if IBM did not have smart engineers. The build-in power supply generated the exact voltages as required by the main board and peripherals, at the required power levels, to guarantee reliable operation.&lt;/p&gt;&#xA;&lt;p&gt;As for the fan, most heat is generated by the CPU. The efficiency of the pwer supply is over 80 percent, whether linear or switched mode. That means that 80 percent of heat is generated by the main board and peripherals. Using an external power supply would not make a fan superfluous. Most laptops have external power supplies, and many have also an internal fan.&lt;/p&gt;&#xA;" OwnerUserId="11687" LastEditorUserId="11687" LastEditDate="2020-10-07T08:53:50.583" LastActivityDate="2020-10-07T08:53:50.583" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16477" PostTypeId="1" AcceptedAnswerId="16479" CreationDate="2020-10-07T07:04:27.153" Score="8" ViewCount="507" Body="&lt;p&gt;I got these &lt;a href=&quot;https://archive.org/details/attdos33&quot; rel=&quot;nofollow noreferrer&quot;&gt;MS-DOS 3.3 disk images&lt;/a&gt; for the AT&amp;amp;T 6300 from archive.org:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ATDOS331.360&lt;/li&gt;&#xA;&lt;li&gt;ATDOS332.360&lt;/li&gt;&#xA;&lt;li&gt;ATDOS333.360&lt;/li&gt;&#xA;&lt;li&gt;ATDOS334.360&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Supposing that I have access to a physical 5.25″ floppy drive running on a Windows 98 machine and some disks.  &lt;strong&gt;What is the easiest way to transfer the images onto the disks?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The files are all in &amp;quot;.360&amp;quot; format.  What are the names of some utility programs that could open that format and copy it to a disk.&lt;/p&gt;&#xA;&lt;p&gt;Really at this point I don't know if the files are just the raw disk bits or if there are headers attached to the data, which would require the use of a special program that understands such headers.&lt;/p&gt;&#xA;" OwnerUserId="13468" LastEditorUserId="15334" LastEditDate="2020-11-28T18:45:37.597" LastActivityDate="2020-11-30T19:42:08.400" Title="How to transfer AT&amp;T 6300 &quot;.360&quot; disk images onto physical floppies" Tags="&lt;floppy-disk&gt;&lt;disk-image&gt;&lt;software-recommendation&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16478" PostTypeId="1" CreationDate="2020-10-07T07:16:07.793" Score="-1" ViewCount="364" Body="&lt;p&gt;Recently, I've been searching far and wide to collect, in digital form, the exact games that I owned as a child, or had temporarily, or rented/borrowed/played at somebody else's house, or never really got to play but stared at magazines screenshots of for hours upon hours and always dreamed of one day being able to get my hands on. Since I have no money or even the ability to buy things from auction sites and physically get them shipped here, there is no chance of me collecting the actual cartridges/floppies/discs/machines.&lt;/p&gt;&#xA;&lt;p&gt;We're talking NES, SNES, N64, Game Boy, Saturn, PlayStation, Tiger Electronics, PC (DOS + Windows), Amiga, Mac, arcade, Mega Drive/Genesis, GBC, GBA, Atari XEGS, Master System...&lt;/p&gt;&#xA;&lt;p&gt;I've looked through numerous ROM archives, and individually hosted ROMs/disk images. My conclusion is that they are very bad.&lt;/p&gt;&#xA;&lt;p&gt;Frequently, there is only an NTSC version of a game available even though a PAL one was released, or there's only a v1.1 version available (not v1.0), or the other way around, or it's a &amp;quot;dirty&amp;quot; ROM which is not a clean representation of the physical cartridge, but contains &amp;quot;extra data&amp;quot; and potentially modifications.&lt;/p&gt;&#xA;&lt;p&gt;Oftentimes, games I know exist are just missing entirely from the collection.&lt;/p&gt;&#xA;&lt;p&gt;Note that I'm not saying anything about the difficulties of actually &lt;em&gt;running&lt;/em&gt; these, which is a whole different topic. I'm just trying to &amp;quot;prepare&amp;quot; for the day when I will find a way to properly run these games with some kind of future, unified emulator or hardware device which plays anything correctly. This question is solely concerned with the low quality of all existing &amp;quot;ROM sets&amp;quot; or collections of games.&lt;/p&gt;&#xA;&lt;p&gt;I very much realize that this is a thankless and massive undertaking for an individual to sit and do for &amp;quot;ungrateful&amp;quot; people like me to complain about, and they of course can never make any money from it, since it's very illegal to make these available, which also puts them in serious danger of getting personally sued and having to pay money to Nintendo or others. I get it. I realize all of this, but still can't help but get annoyed that still, in 2020, there aren't 100% verified and vetted ROM archives with &lt;em&gt;every single&lt;/em&gt; game for a specific console, with clean, unmodified ROMs/images, named consistently, not leaving out any version, and complete not just for NTSC region but also PAL, etc.&lt;/p&gt;&#xA;&lt;p&gt;I've spent so much time now on this, and yet I'm sitting here with ROMs that don't seem to hash-match what appears to be verified hashes, and they aren't consistently named, and not all from the same source (since each set always misses various games), or, especially for arcade and PC games, it's highly doubtful that they are the &amp;quot;real&amp;quot; dumps and not some kind of modified or broken version.&lt;/p&gt;&#xA;&lt;p&gt;If they are able to host all these archives on &amp;quot;Internet Archive&amp;quot;, as they are, and have spent so much time compiling the collections, why not go the extra, final mile to actually make them complete and not include &amp;quot;dirty&amp;quot; (modified/incorrectly captured) ROMs?&lt;/p&gt;&#xA;" OwnerUserId="19586" LastActivityDate="2020-10-07T09:00:55.330" Title="Why are there no actual complete and 100% verified/vetted ROM collections still?" Tags="&lt;emulation&gt;&lt;rom&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2020-10-07T09:43:18.937" ContentLicense="CC BY-SA 4.0" />
  <row Id="16479" PostTypeId="2" ParentId="16477" CreationDate="2020-10-07T07:18:22.863" Score="12" Body="&lt;p&gt;These are headerless sector dumps of the 360KiB disks, and can be written directly to the appropriate floppies. Since you’re using Windows 98, I suspect the best tool to do is &lt;a href=&quot;http://www.classiccmp.org/dunfield/img/index.htm&quot; rel=&quot;noreferrer&quot;&gt;ImageDisk&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You’ll need to convert the images first:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;BIN2IMD ATDOS331.360 ATDOS331.IMD DM=5 N=40 SS=512 SM=1-9 /2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(250kbps MFM, 40 cylinders, 512 bytes per sector, sectors mapped linearly, two-sided output).&lt;/p&gt;&#xA;&lt;p&gt;Then you can write the images to disks using &lt;code&gt;IMD&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-10-07T07:18:22.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16481" PostTypeId="2" ParentId="16478" CreationDate="2020-10-07T08:41:08.907" Score="15" Body="&lt;p&gt;You've answered your own question:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;this is a thankless and massive undertaking&lt;/li&gt;&#xA;&lt;li&gt;they of course can never make any money from it&lt;/li&gt;&#xA;&lt;li&gt;it's very illegal to make these available, which also puts them in serious danger of getting personally sued and having to pay money to Nintendo or others (this depends on the reader's jurisdiction, but it's a safe assumption)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I'd add:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It requires knowledge of and access to every game either in the hands of one person with the suitable equipment to make the images and record all the necessary meta-information (mappers, board revision, expansion chip revision), or co-operation between multiple people who have agreed precisely on a format and methodology over a long period of time. If any two people disagree, now you've got two collections with conflicting headers and layouts just as you've observed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It's like asking 'Why is MobyGames incomplete?' or 'Why is Wikipedia incomplete?'&lt;/p&gt;&#xA;&lt;p&gt;Knowledge of every game might sound like a strange requirement, but new games are sometimes discovered that were thought to never have existed. &lt;em&gt;Cooly Skunk&lt;/em&gt; is a PS1 platform game, but there was a precursor of the same name available through the Satellaview on the SNES as a limited demo. It was only this year that a BS-X unit was discovered that held the &lt;em&gt;Cooly Skunk&lt;/em&gt; SNES image that could be dumped, but it was later found that &lt;em&gt;the entire game&lt;/em&gt; was present, just not accessible. Prior to 2020, &lt;em&gt;Cooly Skunk&lt;/em&gt; might as well have never existed.&lt;/p&gt;&#xA;&lt;p&gt;The fact that you've discovered unsatisfactory and incomplete databases is proof people &lt;em&gt;are&lt;/em&gt; working on the problem despite all the above. They just haven't &lt;em&gt;finished&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You might also be interested in &lt;a href=&quot;https://byuu.org/preservation/&quot; rel=&quot;noreferrer&quot;&gt;Byuu's project to make a perfect dump of every SNES game&lt;/a&gt; for the purposes of hashing, and the intense frustration and great amount of personal expense and effort involved for all the participants - A shipment of games worth thousands of dollars was shipped &lt;a href=&quot;https://www.eurogamer.net/articles/2017-02-14-snes-preservation-project-dead-after-package-lost-containing-usd10k-of-games&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;and then lost for months&lt;/em&gt;&lt;/a&gt;, and was only recovered after &lt;a href=&quot;https://www.eurogamer.net/articles/2017-02-23-missing-usd10k-snes-game-package-found&quot; rel=&quot;noreferrer&quot;&gt;media exposure and constant queries&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This led to my most ambitious goal yet: to buy every single SNES game&#xA;ever released in every region. A task that to this date has set me&#xA;back by over $30,000 of my own money.&lt;/p&gt;&#xA;&lt;p&gt;I successfully completed the ~725-game North American collection,&#xA;scanning and documenting every single game and revision for it.&lt;/p&gt;&#xA;&lt;p&gt;I was then able to fund much of the Japanese game collection through&#xA;the rather famous eBay auction where I sold off my complete North&#xA;American SNES collection. That was fun.&lt;/p&gt;&#xA;&lt;p&gt;Thus I successfully purchased the ~1,450-game Japanese collection,&#xA;which is to this date still a work in progress, with the most&#xA;expensive 100 titles already completed, and the rest in queue.&lt;/p&gt;&#xA;&lt;p&gt;And thanks to kind folks lending me their European games, I’ve&#xA;completed around ~300 of the ~550 cartridges for this region as well.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;--&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There was a very unfortunate incident in late-2016 where a package&#xA;containing 100 PAL games valued at around $10,000 was lost in the mail&#xA;due to damage during shipping. After several agonizing months of&#xA;waiting and trying everything possible to escalate the case privately,&#xA;I had no choice but to take the matter to the public.&lt;/p&gt;&#xA;&lt;p&gt;It generated far more press than even I had anticipated, which&#xA;successfully caught the eye of a manager at the USPS Consumer Affairs&#xA;department. His team helped locate the missing package in the Atlanta&#xA;Recovery Center, where it was slated to be auctioned off as&#xA;undeliverable mail in the near future.&lt;/p&gt;&#xA;&lt;p&gt;Thankfully, the games were recovered. I was able to preserve all of&#xA;them, and then return the games successfully to their original owner.&lt;/p&gt;&#xA;&lt;p&gt;We learned a valuable lesson, and I no longer accept any donations&#xA;unless they are 100% fully insured. I also have a strict limit of 50&#xA;games at one time so as to further minimize any potential losses.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-10-07T09:00:55.330" LastActivityDate="2020-10-07T09:00:55.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16482" PostTypeId="2" ParentId="16437" CreationDate="2020-10-07T12:39:29.173" Score="4" Body="&lt;p&gt;Another issue, outside the heat and multiple voltages issue, is the safety issue of low-voltage DC cabling. Home computers didn't draw much power, so a 5 – 12 V wall wart on a fairly short, thin two-conductor cable was considered safe enough. For example, the &lt;a href=&quot;http://blog.tynemouthsoftware.co.uk/2014/11/zx-spectrum-voltage-regulator.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX Spectrum&lt;/a&gt; used a 9 V 0.7 – 1.4 A supply feeding a simple 7805 regulator, consuming ~650 mA at 5 V (so 3.25 W or so), dumping the rest as heat.&lt;/p&gt;&#xA;&lt;p&gt;Once you draw more power (say the 65 W of the original IBM PC, which is not that far away from a modern laptop), DC cabling starts to cause problems:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;you either have to use a much heavier and more expensive cable, or you accept the losses and allow a cheaper cable to get warm in regular use. I²R losses get very expensive when you're specifying PSUs to be sold by the millions.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Unlike AC, DC arcs don't self-quench. While the arc from a broken connector for ≤ 12 V is tiny, it's still hot enough to create a fire risk.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Laptops now tend to use a higher DC voltage to reduce the copper losses in the cable, and the cable is thicker and better strain-relieved than the old home computer wall-warts. But the strain relief only came to some manufacturers after reports of &lt;a href=&quot;https://www.theguardian.com/technology/blog/2010/jul/20/apple-adapter-fire&quot; rel=&quot;nofollow noreferrer&quot;&gt;laptop adapters on fire&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-10-07T12:39:29.173" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16483" PostTypeId="1" AcceptedAnswerId="16484" CreationDate="2020-10-07T18:05:51.597" Score="5" ViewCount="532" Body="&lt;p&gt;I picked up this PET and trying to restore it. Screen is garbeled on boot and stays like that displaying random chars, some of them flashing. Tried to resocket the chips, but it didn't help. I don't have a logic analyzer, and ram chips are not socketed. What sort of checks I can I do to identify the fault? I have a multimeter and osciloscope, not very skilled at electronics, though.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kGI2J.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kGI2J.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/qfRbr.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qfRbr.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-10-08T15:18:47.443" Title="CBM PET 2001 garbled screen" Tags="&lt;repair&gt;&lt;ram&gt;&lt;commodore-pet&gt;&lt;troubleshooting&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16484" PostTypeId="2" ParentId="16483" CreationDate="2020-10-07T19:37:47.750" Score="9" Body="&lt;p&gt;The garbled screen is normal on startup, but should be replaced by the BASIC screen after a moment.&lt;/p&gt;&#xA;&lt;p&gt;There's a rather detailed troubleshooting guide, including links, at &lt;a href=&quot;http://www.dasarodesigns.com/projects/troubleshooting-common-problems-with-the-commodore-pet-2001/&quot; rel=&quot;noreferrer&quot;&gt;http://www.dasarodesigns.com/projects/troubleshooting-common-problems-with-the-commodore-pet-2001/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'd suggest that you ignore the spare parts sales pitch at the beginning and work your way through it.&lt;/p&gt;&#xA;&lt;p&gt;You might also want to have a look at the Tynemouth Software PET repair blog entries at &lt;a href=&quot;http://blog.tynemouthsoftware.co.uk/&quot; rel=&quot;noreferrer&quot;&gt;http://blog.tynemouthsoftware.co.uk/&lt;/a&gt; -- they show fixing some interesting PET issues step by step.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-10-07T19:49:41.160" LastActivityDate="2020-10-07T19:49:41.160" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16485" PostTypeId="2" ParentId="16477" CreationDate="2020-10-08T05:30:51.753" Score="2" Body="&lt;p&gt;In general, identifying a file format by the file extension can be misleading. Many files carry an extension that does not correspond to the actual format of their contents (just for one example, many DOS executables with the extension &lt;code&gt;.COM&lt;/code&gt; are actually in the MZ format), while some formats have no single standard extension at all. Raw disk images in particular may carry any of numerous different extensions: &lt;code&gt;.IMG&lt;/code&gt;, &lt;code&gt;.IMA&lt;/code&gt;, &lt;code&gt;.DSK&lt;/code&gt;, or as we see here, &lt;code&gt;.360&lt;/code&gt; (I also remember seeing &lt;code&gt;.720&lt;/code&gt; or &lt;code&gt;.144&lt;/code&gt;, depending on the underlying disk geometry). To discover what format a file is in, one may use a utility such as &lt;a href=&quot;https://man7.org/linux/man-pages/man1/file.1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;file&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ file *.360&#xA;ATDOS331.360: DOS/MBR boot sector, code offset 0x34+2, OEM-ID &amp;quot;IBM  3.3&amp;quot;, sectors/cluster 2, root entries 112, sectors 720 (volumes &amp;lt;=32 MB), Media descriptor 0xfd, sectors/FAT 2, sectors/track 9, dos &amp;lt; 4.0 BootSector (0x0), FAT (12 bit by descriptor), followed by FAT&#xA;ATDOS332.360: DOS/MBR boot sector, code offset 0x34+2, OEM-ID &amp;quot;IBM  3.3&amp;quot;, sectors/cluster 2, root entries 112, sectors 720 (volumes &amp;lt;=32 MB), Media descriptor 0xfd, sectors/FAT 2, sectors/track 9, dos &amp;lt; 4.0 BootSector (0x0), FAT (12 bit by descriptor), followed by FAT&#xA;ATDOS333.360: DOS/MBR boot sector, code offset 0x34+2, OEM-ID &amp;quot;IBM  3.3&amp;quot;, sectors/cluster 2, root entries 112, sectors 720 (volumes &amp;lt;=32 MB), Media descriptor 0xfd, sectors/FAT 2, sectors/track 9, dos &amp;lt; 4.0 BootSector (0x0), FAT (12 bit by descriptor), followed by FAT&#xA;ATDOS334.360: DOS/MBR boot sector, code offset 0x34+2, OEM-ID &amp;quot;IBM  3.3&amp;quot;, sectors/cluster 2, root entries 112, sectors 720 (volumes &amp;lt;=32 MB), Media descriptor 0xfd, sectors/FAT 2, sectors/track 9, dos &amp;lt; 4.0 BootSector (0x0), FAT (12 bit by descriptor), followed by FAT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If &lt;code&gt;file&lt;/code&gt; outputs ‘DOS/MBR boot sector’ it is probably safe to assume that it is a raw sector image of either an MBR-partitioned disk or a FAT floppy. Some particularly old raw disk images may fail to be detected by this method, though: as raw images have no discriminating signature of their own, they have to be identified by the signature of the contained file system, but sufficiently old FAT versions do not have those either. The worst-case scenario is that &lt;code&gt;file&lt;/code&gt; outputs ‘data’ or something completely bogus, like ‘dBase III DBT’.&lt;/p&gt;&#xA;&lt;p&gt;For disk images in particular, utilities from the &lt;a href=&quot;https://www.seasip.info/Unix/LibDsk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;LIBDSK project&lt;/a&gt; may be helpful. Among them there is &lt;code&gt;dskid&lt;/code&gt;, which can identify both the underlying low-level disk format (i.e. the way the surface of the disk is supposed to be divided into sectors) and the container format of the file (called a ‘type’ by LIBDSK to distinguish it from the former). Although this one in turn may be too &lt;em&gt;eager&lt;/em&gt; to identify files as raw images; it will do so for any image type that LIBDSK does not support.&lt;/p&gt;&#xA;&lt;p&gt;LIBDSK also includes &lt;code&gt;dskdump&lt;/code&gt;, &lt;code&gt;dsktrans&lt;/code&gt; and &lt;code&gt;dskconv&lt;/code&gt;, which can transfer sectors from one container format to another, and even to and from a physical disk drive. There is source code and binaries for DOS and for Windows available to download (and they do run under Windows 9x too).&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-10-08T07:30:32.727" LastActivityDate="2020-10-08T07:30:32.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16486" PostTypeId="1" CreationDate="2020-10-08T09:21:20.653" Score="2" ViewCount="272" Body="&lt;p&gt;RetroArch the emulator &amp;quot;wrapper&amp;quot; has an option to enable an NTSC filter over the image, simulating the visual look of a composite NTSC signal/TV. Here is a comparison between the &amp;quot;raw&amp;quot; (no filter) mode and with the filter turned on:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tn2Na.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tn2Na.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KlhHB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KlhHB.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note how it's &lt;em&gt;not&lt;/em&gt; some simple &amp;quot;blurring&amp;quot; or &amp;quot;anti-aliasing&amp;quot; filter.&lt;/p&gt;&#xA;&lt;p&gt;Although I'm not exactly sure how different NTSC and PAL look, I'm bothered by the fact that it says &amp;quot;NTSC&amp;quot; and not &amp;quot;PAL&amp;quot;. I'm sure that there are some differences in the look between an NTSC and PAL TV/signal. If somebody made a filter/&amp;quot;shader&amp;quot; for NTSC, it seems like a minor addition (for the ones who know this stuff) to make a PAL one as well. I've looked all over the options/menus without finding any mention of PAL except for the aspect ratio.&lt;/p&gt;&#xA;&lt;p&gt;So I'm forced to emulate my PAL games with the NTSC composite filter and &amp;quot;pretend&amp;quot; to myself that it's a PAL filter, but deep down, I know it's NTSC, and it bothers me a lot.&lt;/p&gt;&#xA;" OwnerUserId="19601" LastActivityDate="2020-10-08T09:21:20.653" Title="Does RetroArch have a PAL filter like the NTSC one?" Tags="&lt;emulation&gt;&lt;nes&gt;&lt;ntsc&gt;&lt;pal&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16487" PostTypeId="2" ParentId="14749" CreationDate="2020-10-08T09:50:33.247" Score="-1" Body="&lt;p&gt;This is not for a serial port - it uses an ethernet connection.  If you have one, it will be a lot quicker than a serial port.&lt;/p&gt;&#xA;&lt;p&gt;In addition the the methods described by @Spektre, you could also use mswgcn if you can find it on the internet.  It stands for MS Workgroup Connect - basically drivers for a wired ethernet link in DOS.  The last time I tried this was from DOS to XP.  I haven't tried it on W7 or the later offerings from MS.&lt;/p&gt;&#xA;&lt;p&gt;It worked on the network card I was using at that time.  It can handle 10T and 100T but not gigabit.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastEditorUserId="5311" LastEditDate="2020-10-08T09:56:28.463" LastActivityDate="2020-10-08T09:56:28.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16490" PostTypeId="2" ParentId="9289" CreationDate="2020-10-08T13:46:53.013" Score="3" Body="&lt;p&gt;The price tag is certainly higher (~100€), but AFAICT you can use a &lt;a href=&quot;https://www.kryoflux.com/?page=kf_tech&quot; rel=&quot;nofollow noreferrer&quot;&gt;KryoFlux&lt;/a&gt; to read &lt;em&gt;everything&lt;/em&gt; (even strange low-level software protections):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Works with all major 3.5&amp;quot; and 5.25&amp;quot; drives&lt;/li&gt;&#xA;&lt;li&gt;Works well with selected&#xA;3&amp;quot; (e.g. Amstrad FDI-1) drives.&lt;/li&gt;&#xA;&lt;li&gt;Also works with 8&amp;quot; (e.g. Shugart 851;&#xA;might require additional adapter) drives; other types of drives and&#xA;media currently under investigation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="19602" LastActivityDate="2020-10-08T13:46:53.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16491" PostTypeId="2" ParentId="9289" CreationDate="2020-10-08T14:42:40.303" Score="1" Body="&lt;p&gt;The firmware on all the 3.5&amp;quot; USB floppy drives of relatively modern make I've looked into seems to present the floppy as a LBA device with exactly 2880 sectors (of 512 bytes) to the host computer. That is the very same thing as an USB thumb drive (and in fact, most OSs seem to see such a thumb drive. You can even partition such a floppy).&lt;/p&gt;&#xA;&lt;p&gt;Replacing the 3.5&amp;quot; drive with a 5.25&amp;quot; drive might work in principle, (however, most recent drives in such floppies don't even have standard floppy connectors anymore, there you couldn't) but there simply is no such drive that could store 2880 sectors.&lt;/p&gt;&#xA;&lt;p&gt;A Kryoflux as proposed in another answer seems to be your best (and only, in 2020) bet to connect a 5.25&amp;quot; drive to USB.&lt;/p&gt;&#xA;&lt;p&gt;The main problem with Kryoflux for your purpose is: It doesn't present itself as a floppy drive (not even as a mass storage device) to the host computer, but rather as a commandable streaming data source and sink and will only work with it's own software, that can mainly produce disk image files. Any other floppy disk software that will happily work with a &amp;quot;real&amp;quot; floppy disk controller is not gooing to work with Kryoflux.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2020-10-09T16:10:01.467" LastActivityDate="2020-10-09T16:10:01.467" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16492" PostTypeId="2" ParentId="16483" CreationDate="2020-10-08T15:18:47.443" Score="2" Body="&lt;p&gt;This is anecdotal, so take with a big grain of salt...&lt;/p&gt;&#xA;&lt;p&gt;I have a C-64 power supply that was home-brewed for me by my Dad when I was a kid from the remnants of the original.  My Dad, never being one to do anything halfway, did a fantastic job and added a 'voltage adjust dial' and analog meter to the finished supply.  This means I can actually dial-down the voltage to my C-64 until the computer does _weird things_™.&lt;/p&gt;&#xA;&lt;p&gt;Not that I do this on purpose, but occasionally the dial gets bumped and the volts go low and the C-64 breaks out into a screen of gobbledy-gook that looks almost &lt;strong&gt;exactly&lt;/strong&gt; as you describe.&lt;/p&gt;&#xA;&lt;p&gt;I'd check the power supply first thing and make sure there are enough jolts going to the main board.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2020-10-08T15:18:47.443" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16493" PostTypeId="1" CreationDate="2020-10-08T17:11:12.383" Score="1" ViewCount="278" Body="&lt;p&gt;As I m buying a computer without an onboard sound card, I m thinking about using my old Creative Sound card from 21 years ago and buying a pcie riser adapter instead of a modern sound card (I m interested in one with hardware fm synthesis support rather than one emulated through pcm and sampling).&lt;br /&gt;&#xA;&lt;strong&gt;Please note in that case that it s not only about hardware accelaration and is also about sound quality because of not using pcm sound at all.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I know that by 1995, Creative abonned fm synthesis and started to use a low quality compatible hardware alternative based on cqm synthesis in order to cut down costs in their pci version of Sound Blaster 16 cards. But as processing powered evolved, cost to include it again should have decreased which doesn t means later models like mine don t include it.&lt;/p&gt;&#xA;&lt;p&gt;I also know Creative provided a tsr in order to let dos programs perform sound synthesis (I lost the driver CD).&lt;br /&gt;&#xA;&lt;strong&gt;But I fail to understand if it was for emulating everything or just reroute irq for accessing the hardware?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Also, if yes does they use fm synth or still use their low quality cqm based alternative?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Back in 2006, I was too young to pay attention about this in Windows 98se hardware settings and as Windows doesn t support hardware synthesis since Windows Vista and Linux never had support for such things with pci card, this is something I ve no idea on how to figure.&lt;/p&gt;&#xA;" OwnerUserId="15946" LastActivityDate="2020-10-08T19:14:41.240" Title="Does the Sound Blaster Live! Value had hardware support for Adlib/OPL3?" Tags="&lt;ibm-pc&gt;&lt;sound&gt;&lt;audio&gt;&lt;digital-audio&gt;&lt;soundblaster&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16494" PostTypeId="2" ParentId="16493" CreationDate="2020-10-08T17:39:46.823" Score="1" Body="&lt;p&gt;The SB Live series did not include any legacy hardware and support for these were made available with emulation only.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-10-08T17:39:46.823" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="16495" PostTypeId="2" ParentId="16493" CreationDate="2020-10-08T17:42:04.410" Score="3" Body="&lt;p&gt;No, the Soundblaster Live! doesn't have any hardware support for FM synthesis.  Soundblaster 16 emulation is provided by trapping accesses to the Soundblaster and AdLib ports and then emulating their functionality in software.  There is no OPL or CQM chip, or even a Soundblaster PCM compatible chip.&lt;/p&gt;&#xA;&lt;p&gt;Note that in the MS-DOS and Windows VxD drivers this emulation is based on generating PCI #SERR errors, which get turned into NMIs by the chipset.  However this doesn't work on newer motherboards, basically Pentium 4 or newer because by the time the NMI has arrived at the CPU, the CPU has gone on to execute the next instruction causing that one to appear to have accessed the SoundBlaster or AdLib port.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorUserId="79" LastEditDate="2020-10-08T19:14:41.240" LastActivityDate="2020-10-08T19:14:41.240" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16496" PostTypeId="2" ParentId="9382" CreationDate="2020-10-08T17:54:34.373" Score="0" Body="&lt;p&gt;If you want a &amp;quot;pure TTL solution&amp;quot;, maybe an evolution of this project can help you:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://shepherdingelectrons.blogspot.com/2020/07/uart-transceiver-for-breadboard-computer.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://shepherdingelectrons.blogspot.com/2020/07/uart-transceiver-for-breadboard-computer.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="19609" LastActivityDate="2020-10-08T17:54:34.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16497" PostTypeId="1" AcceptedAnswerId="16505" CreationDate="2020-10-09T00:05:29.780" Score="3" ViewCount="312" Body="&lt;p&gt;I'm programming my own sound mixing engine and drivers for MS-DOS, but I can't find any documentation for programming for Microsoft Windows Sound System interface sound cards.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Was there any documentation (official or otherwise) for programming Microsoft Windows Sound System sound cards?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have the &lt;a href=&quot;http://pdf.datasheetcatalog.com/datasheets/400/152772_DS.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;AD1848&lt;/a&gt;(K) and &lt;a href=&quot;https://www.cebix.net/downloads/bebox/cs4231a.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;CS4231&lt;/a&gt;(A) chip datasheets by themselves, but they're a little obtuse. I'd prefer something a little more goal-oriented rather than exhaustive :)&lt;/p&gt;&#xA;&lt;p&gt;What would be ideal is something similar to the Creative Labs &lt;em&gt;Sound Blaster Series Hardware Programming Guide&lt;/em&gt; and &lt;em&gt;AWE32/EMU8000 Programmer’s Guide&lt;/em&gt;, but for WSS.&lt;/p&gt;&#xA;&lt;p&gt;I could look at the source code to &lt;a href=&quot;https://liballeg.org/old.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Allegro&lt;/a&gt;, &lt;a href=&quot;https://github.com/greg-kennedy/SEAL/blob/master/README.TXT&quot; rel=&quot;nofollow noreferrer&quot;&gt;SEAL&lt;/a&gt; or &lt;a href=&quot;http://www.s2.org/hmqaudio/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Housemarque/MIDAS&lt;/a&gt;, which all support WSS, but I want to understand the code from first principles at the port level, not copy blindly.&lt;/p&gt;&#xA;&lt;p&gt;The only other source of information I've seen has come from &lt;a href=&quot;https://www.webtech.co.jp/company/doc/undocumented_mem/io_sound.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;a component-by-component breakdown of the PC-98XX range, in Japanese&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;--&lt;/p&gt;&#xA;&lt;p&gt;More info: In &lt;a href=&quot;http://iowa.gotthefacts.org/011607/5000/PX05529.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Microsoft OEM Briefing: Windows Into The Future&lt;/em&gt;&lt;/a&gt;, Microsoft gives two names to the WSS documentation: &lt;a href=&quot;https://i.stack.imgur.com/4BPIB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Developers Assistance Kit and MS-DOS Developers Kit&lt;/a&gt;. These are both named in MSDN News 1993 Jan, which can be read on &lt;a href=&quot;https://i.stack.imgur.com/Xhggv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Microsoft Developer Network - Disk 4 - Summer 93&lt;/em&gt;&lt;/a&gt; - which unfortunately does not contain the DAKs themselves. :(&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-10-09T13:28:53.230" LastActivityDate="2020-10-09T23:23:39.347" Title="Is there any documentation for programming Microsoft Windows Sound System sound cards?" Tags="&lt;programming&gt;&lt;sound&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16498" PostTypeId="2" ParentId="9289" CreationDate="2020-10-09T09:35:30.677" Score="1" Body="&lt;p&gt;Instead of the board you suggested or a KryoFlux, maybe &lt;a href=&quot;https://github.com/davidgiven/fluxengine/blob/master/doc/building.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;build&lt;/a&gt; a &lt;a href=&quot;http://cowlark.com/fluxengine/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FluxEngine&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You just buy the specified FPGA development board, solder one row of pins from a floppy connector onto it (or, in a pinch, a row of pin header), flash it, and you're done.&lt;/p&gt;&#xA;&lt;p&gt;You'll also need one of those wall-to-Molex power bricks that you see bundled with USB-PATA/SATA adapters, but the FluxEngine itself will cost around the same as that adapter you linked and &lt;a href=&quot;https://github.com/davidgiven/fluxengine#old-disk-formats&quot; rel=&quot;nofollow noreferrer&quot;&gt;a lot&lt;/a&gt; of 5.25&amp;quot; floppy formats are officially supported.&lt;/p&gt;&#xA;&lt;p&gt;Another option is the &lt;a href=&quot;https://github.com/keirf/Greaseweazle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Greaseweazle&lt;/a&gt; but be warned that, if you go for the &amp;quot;build it using a &lt;a href=&quot;https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Blue Pill&lt;/a&gt;&amp;quot; option, it won't work with a &lt;a href=&quot;https://github.com/keirf/Greaseweazle/wiki/STM32-Fakes&quot; rel=&quot;nofollow noreferrer&quot;&gt;counterfeit STM32&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2020-10-09T09:35:30.677" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16499" PostTypeId="1" CreationDate="2020-10-09T11:55:10.737" Score="11" ViewCount="635" Body="&lt;p&gt;I'm very familiar with what I consider to be the &amp;quot;real&amp;quot; version of Shadowgate -- the NES port. Today, I noticed this screenshot from the actual original:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/en/7/7a/Shadowgate_screenshot.jpg&quot; alt=&quot;Macintosh Shadowgate screenshot&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is no &amp;quot;take&amp;quot; or &amp;quot;leave&amp;quot; command, used constantly in the NES version.&lt;/p&gt;&#xA;&lt;p&gt;What's with that? How do you take objects/items in the original? And how are they dropped (rather than &amp;quot;used&amp;quot;)? Speaking of &amp;quot;using&amp;quot;, there is no &amp;quot;use&amp;quot; command either...&lt;/p&gt;&#xA;" OwnerUserId="19613" LastEditorUserId="4147" LastEditDate="2020-10-09T15:51:41.093" LastActivityDate="2020-10-09T15:51:41.093" Title="Did the original Shadowgate for the Macintosh (1987) not have &quot;take&quot; or &quot;leave&quot; command?" Tags="&lt;apple-macintosh&gt;&lt;nes&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16500" PostTypeId="2" ParentId="16499" CreationDate="2020-10-09T12:06:01.697" Score="14" Body="&lt;p&gt;From the &lt;a href=&quot;https://www.mocagh.org/mindscape/shadowgate-alt-manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;Shadowgate manual for Windows 3.1 and Macintosh Plus:&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Objects that you would expect to be easily moved - such as torches, swords and coins - can be &lt;em&gt;dragged&lt;/em&gt; and placed into the Inventory. Large objects such as fortresses, fountains, and trees which cannot be dragged cannot be placed into the Inventory. You will be alerted when you have too much to carry with you in your Inventory.&lt;/p&gt;&#xA;&lt;p&gt;To drag an object into your Inventory:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;With the mouse, point to the object you wish to move.&lt;/li&gt;&#xA;&lt;li&gt;Press the mouse button.&lt;/li&gt;&#xA;&lt;li&gt;While holding the button down, move the object into the window.&lt;/li&gt;&#xA;&lt;li&gt;When the item is inside the window, release the mouse button. If you are allowed to take the object with you, it will remain in the window.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The manual also lists &lt;code&gt;Operate&lt;/code&gt; as the command to use an object on another object. The example given is using a key on a locked door.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastActivityDate="2020-10-09T12:06:01.697" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16501" PostTypeId="2" ParentId="16497" CreationDate="2020-10-09T12:08:30.187" Score="1" Body="&lt;p&gt;Back in the days before the interwebs were the sum of all human knowledge, Microsoft used to supply documentation to MSDN subscribers on funny little plastic discs, affectionately known as 'CDs'.  I think sometime around 97 or 98 they published the &amp;quot;Library Archive&amp;quot; as a final, last hurrah, for outdated technical documentation.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5zVYj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5zVYj.jpg&quot; alt=&quot;MSDN Library Archive CD-ROM&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;According to the fold:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This Library Archive CD contains older, static, content taken from the&#xA;regular MSDN Library to give us more space for new and updated&#xA;content.  The Library Archive CD provides samples, technical articles,&#xA;documentation, specs, utilities and more for development based on&#xA;pre-Windows 95 technologies.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I installed the library on my Windows 98 box and did a quick search, which turned up the following:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/68d1O.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/68d1O.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This (to me) looks like the information you are looking for, you might try searching the net for an ISO of the Library Archive (mine requires my old 10 digit MSDN key to install, so there is another barrier), or maybe the DDK docs are out there somewhere as PDF's.&lt;/p&gt;&#xA;&lt;p&gt;EDIT&lt;/p&gt;&#xA;&lt;p&gt;10 seconds after posting this, I did a quick google and derp, it looks like the Internet Archive to the rescue&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/MSDN_Library_Archive_1998&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSDN Library Archive CD-ROM (1998)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="2080" LastEditDate="2020-10-09T12:14:27.750" LastActivityDate="2020-10-09T12:14:27.750" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="16502" PostTypeId="1" AcceptedAnswerId="16504" CreationDate="2020-10-09T20:01:12.273" Score="6" ViewCount="458" Body="&lt;p&gt;The &lt;a href=&quot;https://www.youtube.com/channel/UCLEoyoOKZK0idGqSc6Pi23w&quot; rel=&quot;noreferrer&quot;&gt;RetroManCave YouTube channel&lt;/a&gt; recently made me aware of the Sinclair PC-200 / Amstrad PC-20 and I already knew about the Tandy 1000EX / 1000HX but were there any other IBM-compatibles (or mostly compatible) using that same all-in-one wedge form factor?&lt;/p&gt;&#xA;" OwnerUserId="15985" LastActivityDate="2020-10-10T19:17:10.513" Title="Who produced all-in-one / wedge style IBM compatibles?" Tags="&lt;ibm-pc&gt;&lt;sinclair&gt;&lt;tandy-1000&gt;&lt;amstrad&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16503" PostTypeId="2" ParentId="16502" CreationDate="2020-10-09T20:07:11.967" Score="3" Body="&lt;p&gt;There was the &lt;a href=&quot;http://www.classiccomputer.de/ams/scheuropc.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Schneider Euro PC&lt;/a&gt;. Schneider had been selling Amstrad computers (the CPC line, the PC 1512/1640, and the Joyce) in Germany. The Euro PC in 1989 was their first attempt at an own design, doubtless inspired by the success of the Amiga 500 and the Atari 520/1040 ST.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-10-09T20:12:41.250" LastActivityDate="2020-10-09T20:12:41.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16504" PostTypeId="2" ParentId="16502" CreationDate="2020-10-09T20:12:14.423" Score="5" Body="&lt;p&gt;Three jump direct to mind:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/Schneider_Euro_PC&quot; rel=&quot;noreferrer&quot;&gt;Schneider Euro-PC&lt;/a&gt; and Euro-PC II&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PPC_512&quot; rel=&quot;noreferrer&quot;&gt;Amstrad PPC&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Vendex Headstart Explorer&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.worthpoint.com/worthopedia/vtech-laser-compact-xt-original-box-1870114433&quot; rel=&quot;noreferrer&quot;&gt;Laser Compact XT&lt;/a&gt; by VTech (&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16502/who-produced-all-in-one-wedge-style-ibm-compatibles/16504#comment55669_16504&quot;&gt;thanks mnem&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Not to mention the &lt;a href=&quot;https://www.c64-wiki.de/wiki/C64_Web.it&quot; rel=&quot;noreferrer&quot;&gt;WEB-IT&lt;/a&gt;, a 486 based as an all in one unit, introduced as late as 1998.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-09T20:26:24.347" LastActivityDate="2020-10-09T20:26:24.347" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16505" PostTypeId="2" ParentId="16497" CreationDate="2020-10-09T22:50:43.477" Score="4" Body="&lt;p&gt;The most accessible Microsoft documentation relating to writing a driver (MS-DOS or otherwise) for the Microsoft Windows Sound System AD-based hardware is &lt;strong&gt;&lt;a href=&quot;https://archive.org/details/94396011997WindowsNTDDKForWinNT4.0WorkstationUS.iso.7z&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSDN #94396 Windows NT DDK 4.0 Workstation US (01/1997)&lt;/a&gt;&lt;/strong&gt; in the folder &lt;code&gt;/ddk/src/mmedia/sndsys/&lt;/code&gt;. It includes a complete reference driver for AD1848-based cards, accessing the ports directly, as expected. It's intended as an example for writing multimedia drivers under Windows NT, but it does show the process of acquiring the card and beginning output.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Microsoft published several tiers of documentation and support for WSS in 1993, including at least the &lt;em&gt;Windows Sound System Driver Development Kit (DDK)&lt;/em&gt; (for $450) and the &lt;a href=&quot;https://i.stack.imgur.com/4BPIB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;MS-DOS Developers Kit&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.drdobbs.com/of-interest/184409083?queryText=386&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dr. Dobbs&lt;/a&gt; carried an advert for them, and &lt;a href=&quot;https://channel9.msdn.com/Series/History/The-History-of-Microsoft-1993&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft&lt;/a&gt; list it on their history, but I haven't been able to find either of them. It would be ideal if the MS-DOS Kit contained a commented MS-DOS-ready driver with a readme indicating step-by-step minimal examples for startup and configuration, but we won't know until it's found.&lt;/p&gt;&#xA;&lt;p&gt;The screenshot in Geo...'s answer is of the &lt;a href=&quot;https://archive.org/details/MSDN_Library_Archive_1997&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;MSDN Library Archive 1997&lt;/em&gt;&lt;/a&gt; disc - a big hypertext WinHelp-style interface with a lot of programming information, and some release notes, bulletins (&lt;a href=&quot;https://i.stack.imgur.com/Xhggv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;such as this one marking the release of the DDK&lt;/a&gt;) and odds-and-sods. Sometimes it's comprehensive, sometimes it's not. The screenshot itself shows the &lt;em&gt;Windows Sound System Version 2.0 DDK Release Notes&lt;/em&gt; that would accompany the DDK, but unfortunately the DDK isn't present on the disc itself. Part of the document is a list of filenames from the sample driver showing their role, so I looked them up to see if anybody had mirrored the DDK on Github or elsewhere.&lt;/p&gt;&#xA;&lt;p&gt;I found that the names are reused from a precursor to the WSS DDK called the &lt;a href=&quot;https://www-user.tu-chemnitz.de/%7Eheha/argon/multimed.zip/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Multimedia Device Development Kit&lt;/em&gt;&lt;/a&gt; (link to a mirror) which contains driver source code for Adlib and Sound Blaster (and the Pioneer 4200 Videodisc Player surprisingly) for Win 3.1.&lt;/p&gt;&#xA;&lt;p&gt;By the same method, I found this &lt;a href=&quot;http://mediaxw.sourceforge.net/files/tmp/Windows%20NT%20DDK%20-%20Multimedia%20Drivers.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Introduction to Multimedia Drivers&lt;/em&gt;&lt;/a&gt; document which comes from the Windows NT DDK, indicating that it has sample drivers including source code for Pro Audio Spectrum 16, Sound Blaster and Windows Sound System.&lt;/p&gt;&#xA;&lt;p&gt;As linked above, the Windows NT DDKs are a lot easier to find, and they do indeed contain WSS drivers for the AD1848 codec, complete with notes and warnings about when to use the enhanced modes. I'm looking through the rest of the disc to see if there's help files specifically about the card, but this might be as good as it gets. I doubt there's much more about it in the manual (if there was one).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Other references:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://liballeg.org/old.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Allegro&lt;/a&gt;. The driver is in &lt;a href=&quot;http://mediaxw.sourceforge.net/files/tmp/Windows%20NT%20DDK%20-%20Multimedia%20Drivers.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;src/dos/wss.c&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.s2.org/hmqaudio/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Housemarque Audio System / MIDAS Digital Audio System&lt;/a&gt; aka HMQ Audio. Many revisions - latest version has driver in &lt;code&gt;src/midas/wss.asm&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/greg-kennedy/SEAL/blob/master/README.TXT&quot; rel=&quot;nofollow noreferrer&quot;&gt;Synthetic Audio Library SEAL&lt;/a&gt;. The driver is in &lt;a href=&quot;https://github.com/greg-kennedy/SEAL/blob/master/src/wssdrv.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;src/wssdrv.c&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Datasheets:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://pdf.datasheetcatalog.com/datasheets/400/152772_DS.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Analog Devices AD1848K&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.dexsilicium.com/AD1845.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Analog Devices AD1845&lt;/a&gt; (Enhanced AD1848 with extra mode with finer-grained sampling rates)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.elektronik.ropla.eu/pdf/stock/adi/ad1815.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Analog Devices AD1815&lt;/a&gt; (Superset, claiming compatibility with WSS and Sound Blaster Pro natively)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.cebix.net/downloads/bebox/cs4231a.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Crystal Semiconductor CS4231&lt;/a&gt; (Compatible)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-10-09T23:23:39.347" LastActivityDate="2020-10-09T23:23:39.347" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16506" PostTypeId="1" CreationDate="2020-10-09T23:03:02.237" Score="4" ViewCount="357" Body="&lt;p&gt;I am working on designing a vintage computer and I have been using the TMS9918ANL. After working with it for a month or two and not making much progress, I really want to switch to another chip. I am avoiding using microcontrollers and FPGAs. Does anyone know of any graphics chips from the 70's or 80's that naturally produced composite NTSC video, outside of the TMS9918ANL? Preferably also one that can be found on eBay for less than $15 a piece.&lt;/p&gt;&#xA;&lt;p&gt;Thank you in advance!&lt;/p&gt;&#xA;" OwnerUserId="18704" LastActivityDate="2020-10-12T10:22:32.720" Title="Vintage computer composite graphics" Tags="&lt;hardware&gt;&lt;graphics&gt;&lt;video&gt;&lt;composite-video&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16507" PostTypeId="2" ParentId="16506" CreationDate="2020-10-09T23:12:29.860" Score="4" Body="&lt;p&gt;I'd suggest using a chain of discrete counters clocked with 4x chroma and generating a composite signal directly from that, using resistors as a crude DAC for the output stage.  If e.g. you have use a two-bit DAC that can generate sync, black, and two levels above that, you could fairly easily generate 81 colors by outputting a repeating sequence of four non-sync signal levels (since there are three usable levels, and 3x3x3x3 is 81).  If you use a 3-bit DAC with six non-sync levels, you could easily generate 1296 colors.&lt;/p&gt;&#xA;&lt;p&gt;To start with, I'd suggest building two timer chains--one of which counts groups of 910 pulses from the 14.3818Mhz clock, and the other of which counts groups of 263 pulses from the output of that first clock.  Each group could be implemented using three 74HC163 four-bit presettable counter chips.  One could, alternatively, use two such chips plus some other logic, but using three would be simple and avoid various fiddly issues.&lt;/p&gt;&#xA;&lt;p&gt;All six chips should be fed the same clock.  Arrange the first group so that any time bit 10 is 0, the upper bit will be loaded with its present value and the remaining bits loaded with 100 0111 0010 and allow the upper stage to advance using the ENT input.  Arrange the second group so that the carry output from the second stage will cause the first two stages to be loaded with either zero or 1111 1001.  Doing things this way will make the top bit of the horizontal counter available as a signal that alternates polarity each line, and make the top three bits of the vertical counter available for use as a frame counter.&lt;/p&gt;&#xA;&lt;p&gt;Once those counters are working, all you'll need to do is build circuitry that will, for each 14.3818Mhz clock pulse, figure out what the video level should be.  The first step for that is probably to generate sync and chroma, but there's a fair bit of room for flexibility.  To help you further with the design, I'd need to know more about what exactly you're looking to do.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2020-10-10T18:33:28.290" LastActivityDate="2020-10-10T18:33:28.290" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16508" PostTypeId="2" ParentId="2183" CreationDate="2020-10-10T03:17:11.020" Score="0" Body="&lt;p&gt;So, I think what you're thinking of is a Calcomp Digitizer -- and the device you're calling a mouse is almost always just called a &amp;quot;puck&amp;quot; or a &amp;quot;cursor&amp;quot; in that context.&lt;/p&gt;&#xA;" OwnerUserId="19620" LastActivityDate="2020-10-10T03:17:11.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16511" PostTypeId="1" AcceptedAnswerId="16781" CreationDate="2020-10-10T13:40:35.513" Score="10" ViewCount="592" Body="&lt;p&gt;I’m trying to boot an old IBM PS/1, mostly with the intention to read out its hard disk. I realized quickly that the original floppy disk drive was broken, so I replaced it with a Gotek floppy emulator, following &lt;a href=&quot;https://ps1stuff.wordpress.com/how-tos/ibm-ps1-model-2011-floppy-replacement/&quot; rel=&quot;nofollow noreferrer&quot;&gt;these instructions&lt;/a&gt;. As a last step, the instructions tell me to run &lt;code&gt;CONFIGUR.EXE&lt;/code&gt;, which would supposedly make the machine detect the newly-installed drive. I assume that &lt;code&gt;CONFIGUR.EXE&lt;/code&gt; would reside on the HDD. Now, it seems like the HDD was compressed using DriveSpace/DoubleSpace.&lt;/p&gt;&#xA;&lt;p&gt;I can boot into the IBM &lt;a href=&quot;https://giantbomb1.cbsistatic.com/uploads/original/11/118490/1644201-boot_screen_1k.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;four-quadrant screen&lt;/a&gt; just fine. Then, after choosing “Your Software”:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When I try opening the A: drive, I get an error message that there is no disk drive, presumably because I didn’t run &lt;code&gt;CONFIGUR.EXE&lt;/code&gt; yet to detect it.&lt;/li&gt;&#xA;&lt;li&gt;When I try opening the C: drive and choosing &lt;code&gt;COMMAND&lt;/code&gt;, I get an error message that I’m running the wrong DOS version.&lt;/li&gt;&#xA;&lt;li&gt;When I choose “DOS Prompt”, I get a familiar PC DOS 4.0 command line. I can’t run most DOS commands, though (Bad command or file name). &lt;code&gt;DIR&lt;/code&gt; works however, and shows a single file called &lt;code&gt;HOST_FOR_C&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Unfortunately, the IBM PS/1 HDD uses a proprietary connector, so I can’t just connect it to another machine using a standard IDE connector.&lt;/p&gt;&#xA;&lt;p&gt;Is there any way out of this situation that you can think of? Thanks for any advice!&lt;/p&gt;&#xA;" OwnerUserId="19624" LastEditorUserId="19624" LastEditDate="2020-11-04T08:38:04.167" LastActivityDate="2020-11-06T08:20:56.220" Title="How can I boot or extract files from an IBM PS/1 with a DoubleSpace-compressed hard drive?" Tags="&lt;ms-dos&gt;&lt;floppy-disk&gt;&lt;ibm&gt;&lt;floppy-drive&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16512" PostTypeId="2" ParentId="16502" CreationDate="2020-10-10T19:17:10.513" Score="2" Body="&lt;p&gt;I had (though have since sold) a Key-Comp 386 similar to the one &lt;a href=&quot;https://atariage.com/forums/topic/269326-were-there-any-other-computers-like-the-tandy-1000-exhx/?do=findComment&amp;amp;comment=3860723&quot; rel=&quot;nofollow noreferrer&quot;&gt;pictured&lt;/a&gt; at atariage.com. It had two ISA slots (for video and network cards) at the left-hand end of the case, and built-in parallel and serial ports.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2020-10-10T19:17:10.513" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16514" PostTypeId="1" CreationDate="2020-10-11T15:10:39.597" Score="4" ViewCount="523" Body="&lt;p&gt;Note: I'm unaware of the exact details for each region, but I vaguely remember people claiming that other region(s) got a golden cartridge. I'm talking about PAL/Europe primarily, since that's where I call home.&lt;/p&gt;&#xA;&lt;p&gt;The original two NES Zelda games had very cool, unique, shining gold cartridges. It really made you feel like you were holding a precious cartridge with a literally &amp;quot;golden&amp;quot; game inside. It had a huge impact on me.&lt;/p&gt;&#xA;&lt;p&gt;As far as I can remember, Zelda &amp;quot;3&amp;quot; (A Link to the Past) for the SNES had a normal, grey cartridge, and so did &amp;quot;Zelda 4&amp;quot; (Link's Awakening) for the Game Boy.&lt;/p&gt;&#xA;&lt;p&gt;But then, after all the years and years of hype leading up to the eventual release of the much-anticipated Ocarina of Time, I was 100% sure that they would once again use a shiny, golden cartridge. I was very disappointed when this fantastic and truly &amp;quot;golden&amp;quot; game got a boring, grey, normal cartridge. It felt wrong on so many levels.&lt;/p&gt;&#xA;&lt;p&gt;However, the spin-off Majora's Mask, also very much a &amp;quot;golden&amp;quot; game, &lt;em&gt;did&lt;/em&gt; actually get a golden cartridge. However, it was not &amp;quot;shiny&amp;quot; like the classic NES ones, but more &amp;quot;muted&amp;quot; and non-reflective. Still, it looks very good and makes the game seem special.&lt;/p&gt;&#xA;&lt;p&gt;Still to this day, it bothers me that Nintendo &amp;quot;cheapened out&amp;quot; (assuming that this is the reason) and gave Ocarina of Time a boring grey cartridge, at least for the PAL release.&lt;/p&gt;&#xA;&lt;p&gt;I'd like to know:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Did other regions get a gold cartridge? If so, what did it look like?&lt;/li&gt;&#xA;&lt;li&gt;What exactly was the reason for the grey cartridge? Cost?&lt;/li&gt;&#xA;&lt;li&gt;If the reason was cost, is it known how much extra it would've added to the price for Nintendo? Wasn't it &amp;quot;worth it&amp;quot; after such hype for so many years, for this epic global release?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I want to make clear that I don't believe that it was &lt;em&gt;actual&lt;/em&gt; gold covering the cartridge. Naturally, it was just spraypainted to resemble gold. (Although one might say that all of the classic six Zelda games are worthy of having actual gold cartridges.)&lt;/p&gt;&#xA;" OwnerUserId="19634" LastActivityDate="2020-10-11T16:40:04.317" Title="Why was the golden game Ocarina of Time not given a golden cartridge in the PAL region?" Tags="&lt;nintendo&gt;&lt;game-cartridge&gt;&lt;nintendo-64&gt;&lt;cost&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16515" PostTypeId="2" ParentId="16514" CreationDate="2020-10-11T15:54:53.327" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://retendo.fandom.com/wiki/The_Legend_of_Zelda:_Ocarina_of_Time&quot; rel=&quot;nofollow noreferrer&quot;&gt;Retendo&lt;/a&gt; has photos of the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Europe, PAL: Grey, with black label.&lt;/li&gt;&#xA;&lt;li&gt;Australia, New Zealand, PAL: Gold, with gold label.&lt;/li&gt;&#xA;&lt;li&gt;US, NTSC: Gold, Grey, (Player's Choice) Grey, (Not for Resale) Grey, all with gold label.&lt;/li&gt;&#xA;&lt;li&gt;Japan: Grey, with black and white label.&lt;/li&gt;&#xA;&lt;li&gt;Taiwan: Grey, with gold label.&lt;/li&gt;&#xA;&lt;li&gt;Hong Kong: Grey, with gold label.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/g2Mnz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;This American advert&lt;/a&gt; indicates that the gold cartridge was a limited-run promotional item in the US. &lt;a href=&quot;https://web.archive.org/web/20140220140653/http://www.ign.com/articles/1998/08/27/zeldas-future-is-golden&quot; rel=&quot;nofollow noreferrer&quot;&gt;IGN makes it seem like it was a last minute decision&lt;/a&gt; which &lt;a href=&quot;https://web.archive.org/web/20141025074405/http://www.ign.com/articles/1998/11/04/ye-snoozed-ye-loozed&quot; rel=&quot;nofollow noreferrer&quot;&gt;sold out quickly&lt;/a&gt;. It's my suspicion that NoE didn't have the budget or the impetus to do the same, which begs the question.&lt;/p&gt;&#xA;&lt;p&gt;The real mystery here relates to the relative sizes of the Nintendo markets and advertising expenditure in the US and UK in the mid-nineties, and if and why Nintendo wasn't so focused on, or popular in, Europe at the time - another question entirely.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.zeldaspeedruns.com/oot/generalknowledge/version-differences&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZeldaSpeedRuns&lt;/a&gt; also notes that the different game build revisions were released in both grey and gold in the USA, with photos.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://micro-64.com/database/colouredcarts.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micro-64&lt;/a&gt; has a summary of coloured cartridge publishing for third party cartridges based on documents from Acclaim. Relevant to your question:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There was a minimum manufacturing run of 50,000 for non-grey cartridges.&lt;/li&gt;&#xA;&lt;li&gt;All cartridge colours did not have any difference in manufacturing times, and cost the same with the exception of:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Gold (extra $0.20 per cartridge)&lt;/li&gt;&#xA;&lt;li&gt;Silver (extra $0.10 per cartridge)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Obviously, any requirements and prices would not apply to Nintendo when releasing their own games, outside of the true base costs and requirements of manufacturing which would have been lower than these.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-10-11T16:40:04.317" LastActivityDate="2020-10-11T16:40:04.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16516" PostTypeId="2" ParentId="16456" CreationDate="2020-10-11T18:03:08.510" Score="3" Body="&lt;p&gt;The keyboard pictured is an AT&amp;amp;T KBD301, which uses Olivetti dome with slider key switches.  &lt;a href=&quot;https://i.stack.imgur.com/H4jO1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/H4jO1.jpg&quot; alt=&quot;Olivetti dome with slider key switch detail.&quot; /&gt;&lt;/a&gt;  This keyboard was recently covered in a &lt;a href=&quot;https://youtu.be/c0Z9VdOu20w&quot; rel=&quot;nofollow noreferrer&quot;&gt;YouTube video by Chyrosran22&lt;/a&gt;.  These are going to be difficult to source as its not a common switch and key caps from other switch types aren't compatible.&lt;/p&gt;&#xA;&lt;p&gt;Other confirmed sources for compatible key caps are as follows:&lt;/p&gt;&#xA;&lt;p&gt;Xerox 6060.&lt;a href=&quot;https://i.stack.imgur.com/QiDWd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QiDWd.jpg&quot; alt=&quot;Xerox 6060 keyboard.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Olivetti Personal Computer Keyboard 1 (ANK 2463) included with the Docutel/Olivetti Personal Computer M24.&lt;a href=&quot;https://i.stack.imgur.com/CYGav.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CYGav.jpg&quot; alt=&quot;Olivetti ANK 2463 keyboard.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Olivetti Personal Computer Keyboard 2 (ANK 2462)&lt;a href=&quot;https://i.stack.imgur.com/t5xNr.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t5xNr.jpg&quot; alt=&quot;Olivetti ANK 2462 keyboard.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Olivetti M20HD built in keyboard.&lt;a href=&quot;https://i.stack.imgur.com/N8ue5.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/N8ue5.jpg&quot; alt=&quot;Olivetti M20HD computer.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Olivetti M21 luggable computer keyboard.&lt;a href=&quot;https://i.stack.imgur.com/vZxIv.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vZxIv.jpg&quot; alt=&quot;Olivetti M21 luggable computer.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Logabax Persona 1600 keyboard (rebranded 2462).&lt;a href=&quot;https://i.stack.imgur.com/0Y3gT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0Y3gT.jpg&quot; alt=&quot;Logabax Persona 1600 keyboard.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There may be compatibility with key caps from some other Olivetti key switch keyboards as well such as the Olivetti snap action switches as the key mounts look very similar, but I can't actually confirm that.  Examples of boards using these snap action switches would be the Olivetti L1 ANK 1426 and the built in keyboard of the Olivetti M20 computer.&lt;/p&gt;&#xA;" OwnerUserId="320" LastEditorUserId="320" LastEditDate="2020-10-14T03:44:24.480" LastActivityDate="2020-10-14T03:44:24.480" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16517" PostTypeId="1" AcceptedAnswerId="16519" CreationDate="2020-10-11T19:48:22.037" Score="44" ViewCount="5077" Body="&lt;p&gt;A paddle is a sort of input device, common on early video game consoles and home computers, consisting of a handheld wheel with one or more fire buttons.  Unlike dial boxes, which spin freely, paddles rotate through a fixed arc, with stops on each end.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KItdd.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KItdd.jpg&quot; alt=&quot;photo of two Atari paddles&quot; /&gt;&lt;/a&gt;&#xA;&lt;em&gt;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Atari_Paddle.JPG&quot; rel=&quot;noreferrer&quot;&gt;Atari Paddle&lt;/a&gt; by Miguel Durçan. Licensed under the &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/2.0/deed.en&quot; rel=&quot;noreferrer&quot;&gt;Creative Commons Attribution-Share Alike 2.0 Generic&lt;/a&gt; license.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;What's the origin of the name &amp;quot;paddle&amp;quot;?  Externally, the controllers look nothing like the sort of hand-held paddles you would use to play table tennis, nor to the ones you would use to propel a canoe.  I suppose the dial part of the device does vaguely resemble a paddle &lt;em&gt;wheel&lt;/em&gt;, such as one might find on a larger ship, but it also resembles pretty much any other kind of wheel, such as the steering wheel on a car.  And like a steering wheel, but &lt;em&gt;unlike&lt;/em&gt; a paddle wheel, the paddle controller has a fixed range of motion.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know who first gave the name &amp;quot;paddle&amp;quot; to this sort of input device and what their rationale was?&lt;/p&gt;&#xA;" OwnerUserId="6527" LastActivityDate="2020-10-13T14:48:06.280" Title="Why are paddles called paddles?" Tags="&lt;gaming&gt;&lt;terminology&gt;&lt;input-devices&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16518" PostTypeId="2" ParentId="16517" CreationDate="2020-10-11T19:52:35.570" Score="14" Body="&lt;p&gt;Those analogue controllers were designed for tennis-like games (Pong, Breakout) where you control a rectangle which hits a ball.&lt;/p&gt;&#xA;&lt;p&gt;It's paddle enough for me.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-10-11T19:52:35.570" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16519" PostTypeId="2" ParentId="16517" CreationDate="2020-10-11T19:54:42.137" Score="77" Body="&lt;p&gt;They're called paddles because they let you play (electronic) table tennis. :)&lt;/p&gt;&#xA;&lt;p&gt;This &lt;a href=&quot;https://www.atarimagazines.com/cva/v1n1/joysticks.php&quot; rel=&quot;noreferrer&quot;&gt;article from &lt;em&gt;CREATIVE COMPUTING VIDEO &amp;amp; ARCADE GAMES VOL. 1, NO. 1&lt;/em&gt;, 1983&lt;/a&gt; explains.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The reason this control is called a &amp;quot;paddle&amp;quot; in the personal computer industry is that it originally got its name from the control which moved the paddies[sic] on the screen in the game of Pong. This was followed by the game of Breakout and by then the incorrect term, paddle, had taken hold.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.opdenkelder.com/pics/minipong/30.jpg&quot; rel=&quot;noreferrer&quot;&gt;instruction plate on the &lt;em&gt;PONG&lt;/em&gt; arcade machine&lt;/a&gt; doesn't refer to paddles at all, and the &lt;a href=&quot;https://www.flickr.com/photos/umpqua/sets/1312509/&quot; rel=&quot;noreferrer&quot;&gt;Atari &lt;em&gt;Home Pong&lt;/em&gt; C-100 console manual&lt;/a&gt; refers to on-screen paddles, but refers to the physical controls as 'left knob' and 'right knob' (also listed as 'Left Control' and 'Right Control').&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The right knob controls the right paddle; the left knob controls the left. Turn to move paddle up or down, to hit the ball on your side of the net.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The official Atari name for the knob-bearing controller for the Atari VCS in your photograph is 'Standard Paddle Controller'. That is, it's a controller &lt;em&gt;for&lt;/em&gt; paddles, and this is how the manuals for 2600 and 5200 games go on to refer to it: as a 'Controller'. You can see it in the manual for the launch title &lt;a href=&quot;https://atariage.com/manual_page.php?SystemID=2600&amp;amp;SoftwareLabelID=942&amp;amp;ItemTypeID=MANUAL&amp;amp;currentPage=1&amp;amp;maxPages=16&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Video Olympics&lt;/em&gt;&lt;/a&gt; (a compilation of &lt;em&gt;Pong&lt;/em&gt; and &lt;em&gt;Pong&lt;/em&gt;-like paddle and sports games) and on &lt;a href=&quot;http://www.pixelatedarcade.com/pictures/278&quot; rel=&quot;noreferrer&quot;&gt;the box when bought separately&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;However, as you can see, the unit itself has 'paddle' written on it, so...&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-10-13T14:48:06.280" LastActivityDate="2020-10-13T14:48:06.280" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16520" PostTypeId="2" ParentId="16506" CreationDate="2020-10-12T10:22:32.720" Score="1" Body="&lt;p&gt;A standard VDC chip of the early eighties is the Motorola 6845. While originally intended not for pixel-addressable, but rather character-addressable frame buffers, it can easily be tricked into generating a pixel-adressable bitmap display (like used in many Amstrad computers)-&lt;/p&gt;&#xA;&lt;p&gt;The chip does not generate the video itself, but rather does the ghard work only and generates the timing and the address from which the next pixel to be displayed should be fetched for external circuitry.&lt;/p&gt;&#xA;&lt;p&gt;Tha echip is apparently no longer made, but quite easy to obtain.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2020-10-12T10:22:32.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16521" PostTypeId="1" AcceptedAnswerId="16528" CreationDate="2020-10-12T13:02:37.797" Score="12" ViewCount="1379" Body="&lt;p&gt;On an x86 chip running in Real Mode, interrupts are resolved with the help of the IVT (Interrupt Vector Table), which is an array located at address 0000h:0000h that consists of 256 entries, 32-bit addresses (segment + offset) that point to the interrupt handler code.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://wiki.osdev.org/Interrupt_Vector_Table&quot; rel=&quot;noreferrer&quot;&gt;This page&lt;/a&gt; (along with many others) lists that the first user definable interrupt handler is 20h. The first 32 handlers are reserved and used for various purposes. For example, interrupt 10h is used for x87 FPU exceptions, while interrupt 13h is used for SIMD FP exceptions. However, &lt;a href=&quot;https://en.wikipedia.org/wiki/BIOS_interrupt_call&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; (along with many others, including Ralf Brown's Interrupt List) shows that interrupts 10h and 13h are defined by the BIOS for video and disk services, respectively. Is there something I am missing, or are these interrupt addresses used for both hardware and software interrupts at the same time?&lt;/p&gt;&#xA;" OwnerUserId="16617" LastActivityDate="2021-01-18T10:21:21.707" Title="BIOS interrupts vs Hardware interrupts" Tags="&lt;x86&gt;&lt;interrupt&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16522" PostTypeId="2" ParentId="16521" CreationDate="2020-10-12T14:03:50.750" Score="8" Body="&lt;p&gt;In the original PC/AT Architecture, the FPU exception signal that should be connected directly to a dedicated input pin on the main CPU and should appear as INT 10h gets re-routed by glue logic to the second IRQ controller so that it appears as IRQ 13 (i.e. INT 75h) instead. Most of the other conflicting vectors are of such a nature that the hardware-defined vectors are of interest only in protected mode, and the BIOS-defined vectors only in real mode, so that usually there will be no real conflict.&#xA;Basically, the whole thing is a case of IBM engineers doing things differently from what Intel engineers intended.&lt;/p&gt;&#xA;" OwnerUserId="16504" LastActivityDate="2020-10-12T14:03:50.750" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16523" PostTypeId="1" AcceptedAnswerId="16526" CreationDate="2020-10-12T14:26:33.553" Score="31" ViewCount="9171" Body="&lt;p&gt;My teacher who teaches &amp;quot;Logic&amp;quot; at the university told us a story about Intel processors, which goes: In the '90s Intel had a bug in the calculation of mathematical functions like sin/cos encoded in the processor. This bug created inconsistencies in some bank accounts, bringing Intel to hire logicians in order to demonstrate the correctness of the code.&lt;/p&gt;&#xA;&lt;p&gt;I tried to search this story around the web but I did not found anything. Does anyone know anything about it or can anyone give me some sources?&lt;/p&gt;&#xA;" OwnerUserId="19611" LastEditorUserId="8845" LastEditDate="2020-10-15T16:17:34.673" LastActivityDate="2020-10-15T16:17:34.673" Title="Intel CPU bug in the '90s" Tags="&lt;history&gt;&lt;cpu&gt;&lt;intel&gt;&lt;x86&gt;" AnswerCount="4" CommentCount="16" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16524" PostTypeId="1" CreationDate="2020-10-12T14:30:40.963" Score="1" ViewCount="475" Body="&lt;p&gt;Let's suppose that Nintendo announce tomorrow that they are going to create exact re-releases of the American and European NES, SNES and Nintendo 64 consoles, &lt;em&gt;exactly&lt;/em&gt; the same as when they were originally sold, down to the packaging. As in, not even any new labels such as &amp;quot;Anniversary Edition&amp;quot; or anything. It literally is impossible to tell the difference between the new boxes and its contents from when it was originally sold.&lt;/p&gt;&#xA;&lt;p&gt;They announce a schedule ahead of time so that they start selling these to match the time difference between each console's original release date. At least 100,000 copies of each console.&lt;/p&gt;&#xA;&lt;p&gt;They do the same thing with the top-250 titles (in terms of commercial success) for each system, at least 100,000 copies for each game. Again, the games are released to match their relative dates when they were originally released.&lt;/p&gt;&#xA;&lt;p&gt;Even if only collectors and hardcore nostalgics like myself buy these, wouldn't it very much make economic sense? Am I grossly overestimating the &amp;quot;retro market&amp;quot;?&lt;/p&gt;&#xA;&lt;p&gt;It's impossible to collect/re-experience the games from my childhood today because they are insanely overpriced, or impossible to get hold of. And of course, Nintendo gets zero profits from somebody buying it second-hand (or more like 20th-hand at this point). To me, it appear as if Nintendo is allowing a lot of free money to go to waste.&lt;/p&gt;&#xA;&lt;p&gt;Note: We are talking about Nintendo doing this properly, the way I describe it. Not some half-hearted nonsense.&lt;/p&gt;&#xA;&lt;p&gt;I very much like the idea of buying an original Super Mario All-Stars, with &amp;quot;new manual smell&amp;quot;, from Nintendo in the year 2021. They'd earn money and I'd get a copy which is impossible to tell apart from a copy I had kept in perfect condition for all these years. And the greedy auction site sellers would be stuck with worthless items.&lt;/p&gt;&#xA;&lt;p&gt;I'm convinced that these copies would quickly sell out, and they could create more until the demand is finally met. Unless you have already spent decades paying insane prices to collect all the games, I can't see any reason why anyone would have anything against this. In fact, I wish that many other companies did the same thing with other classic products, but they never seem to.&lt;/p&gt;&#xA;&lt;p&gt;Why not?&lt;/p&gt;&#xA;" OwnerUserId="19640" LastActivityDate="2020-10-13T02:12:21.793" Title="Why doesn't Nintendo fire up the old factories and re-produce *exact* copies of many of their most popular games, controllers and consoles?" Tags="&lt;nes&gt;&lt;nintendo&gt;&lt;snes&gt;&lt;game-boy&gt;&lt;nintendo-64&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ClosedDate="2020-10-12T17:07:02.917" ContentLicense="CC BY-SA 4.0" />
  <row Id="16525" PostTypeId="2" ParentId="16523" CreationDate="2020-10-12T14:34:52.663" Score="2" Body="&lt;p&gt;I think this is probably referring to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pentium_FDIV_bug&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pentium FDIV bug&lt;/a&gt; (floating-point divide bug).&lt;/p&gt;&#xA;&lt;p&gt;I don't recall any specific problems with trigonometry instructions.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-10-12T14:34:52.663" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16526" PostTypeId="2" ParentId="16523" CreationDate="2020-10-12T14:35:00.257" Score="74" Body="&lt;p&gt;I suspect your teacher was referring to &lt;a href=&quot;https://www.cs.earlham.edu/%7Edusko/cs63/fdiv.html&quot; rel=&quot;noreferrer&quot;&gt;the &lt;code&gt;FDIV&lt;/code&gt; Pentium bug&lt;/a&gt;, which led to a large outcry in the media at the time and for which Intel issued a recall.&lt;/p&gt;&#xA;&lt;p&gt;This bug caused floating-point division to return incorrect results in some cases. It didn’t affect only &lt;code&gt;FDIV&lt;/code&gt;, some related instructions were affected: the other division and remainder instructions, and &lt;code&gt;FPTAN&lt;/code&gt; and &lt;code&gt;FPATAN&lt;/code&gt;. Other trigonometric instructions were treated with suspicion, but ultimately cleared, including &lt;code&gt;FSIN&lt;/code&gt; and &lt;code&gt;FCOS&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It does however seem unlikely that this would cause problems in banks: financial applications typically avoid floating point representations, so errors in a floating-point instruction would be unlikely to affect them.&lt;/p&gt;&#xA;&lt;p&gt;See also &lt;a href=&quot;https://en.wikipedia.org/wiki/Pentium_FDIV_bug&quot; rel=&quot;noreferrer&quot;&gt;the Wikipedia entry on this bug&lt;/a&gt;. Another famous Pentium bug was &lt;a href=&quot;https://en.wikipedia.org/wiki/Pentium_F00F_bug&quot; rel=&quot;noreferrer&quot;&gt;the F00F bug&lt;/a&gt;, which that didn’t cause calculation errors; it could lead to lock-ups, and was worked around by specific handling in operating systems.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-10-13T08:16:42.943" LastActivityDate="2020-10-13T08:16:42.943" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="16527" PostTypeId="2" ParentId="16524" CreationDate="2020-10-12T14:42:38.143" Score="7" Body="&lt;h3&gt;Cost&lt;/h3&gt;&#xA;&lt;p&gt;While the actual design work is already done, it is quite possible that much of the production-related equipment - e.g., molds for cases and controllers - is long gone. If so, that would all need to be built again, at significant cost. 100,000 may sound like a lot, but spreading costs of that equipment over 100,000 consoles is very different from spreading it over &lt;strong&gt;millions&lt;/strong&gt; of the original run.&lt;/p&gt;&#xA;&lt;p&gt;Based on supercat's answer, some of the chips themselves would have to be recreated - either converted to newer (but equivalent) technology, or entire production lines rebuilt to produce older technology. Either solution would have significant costs associated with it.&lt;/p&gt;&#xA;&lt;h3&gt;Sales&lt;/h3&gt;&#xA;&lt;p&gt;I suspect you may be projecting much higher sales than they would realistically have, particularly for the games (as opposed to the game consoles). Yes, this would appeal to collectors (a small group) and those who are really nostalgic (a somewhat larger group). But for a lot of people, that just isn't worth much. Some of them might be willing to pay a smaller amount for &amp;quot;old style&amp;quot; controllers + &amp;quot;official&amp;quot; emulator + downloadable games to play everything on their modern computer. But to buy a whole system? Not so much. Not when you can play modern games with much higher quality graphics and other features for a fraction of the price.&lt;/p&gt;&#xA;&lt;p&gt;Looking at a similar item: Do you think it would make sense for Apple to bring back the &amp;quot;classic&amp;quot; Apple II because of the nostalgia of all the now middle-aged people who grew up learning to program on one? Not too many people would jump at the chance to spend money on a 64K 6502 floppy disk machine, even if it only cost $100. Not when they can get a smartphone with a 64-bit processor, many Gigabytes of RAM and flash storage, dual cameras, touchscreen, etc. for &amp;lt; $100, and which can play games equivalent to (or better than) the NES, and even make phone calls.&lt;/p&gt;&#xA;&lt;h3&gt;Technical Problems&lt;/h3&gt;&#xA;&lt;p&gt;First one that comes to mind is video output. Consoles from that era typically output either via an RF modulator or composite video connections. RF modulation isn't even an option any more - that is for old analog TVs, not the current (and &lt;em&gt;only&lt;/em&gt; option for many years) digital TVs. Even composite video may not work so well for a lot of people - I suspect many modern TVs only have HDMI input.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2020-10-13T02:12:21.793" LastActivityDate="2020-10-13T02:12:21.793" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16528" PostTypeId="2" ParentId="16521" CreationDate="2020-10-12T15:29:02.903" Score="20" Body="&lt;p&gt;While the documentation for the 8088 CPU used in the original IBM PC reserved the first 32 interrupt vectors for CPU exceptions, the 8088 only made use of a few of them.  When IBM designed the PC they choose to ignore this and assigned the reserved but unused vectors for their own purposes.&lt;/p&gt;&#xA;&lt;p&gt;The original 8088 only defined exceptions for the first 5 interrupt vectors, for Divide Error, Single Step, NMI, Breakpoint, and Overflow respectively.   Interrupts vectors 5 through 31 were marked as reserved in Intel's 8086 Family User's Manual:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1uTcg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1uTcgl.png&quot; alt=&quot;8086 Interrupt Pointer Table&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Despite this, IBM decided to have their BIOS configure the interrupt controller to deliver hardware interrupts starting at interrupt vector 8.  Since the original IBM PC only supported 8 hardware interrupts, this meant that vectors 8 through 15 were used for hardware interrupts.  IBM then started assigning BIOS services starting with vector 16 (10h), to be invoked using software interrupts.  In addition, vector 5 was used to implement a print screen function.  Reserved vectors 6 and 7 weren't used.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately this proved to be a mistake by IBM, as when Intel designed the 80286 they defined additional CPU exceptions in the reserved range, going up all the way to vector 13 (0Dh).  This meant the IBM PC/AT, which used the 80286 CPU but also needed to be backwards compatible with the original 8088-based IBM PC, had interrupt vectors with two different purposes, one defined by the CPU and one defined by the BIOS.&lt;/p&gt;&#xA;&lt;p&gt;In particular, having both the print screen and &lt;code&gt;BOUND&lt;/code&gt; violation exception using vector 5 proved to be fairly big nuisance.  In theory, this shouldn't have been a problem, as any program using the the new &lt;code&gt;BOUND&lt;/code&gt; instruction would need to install their own interrupt handler, one that could distinguish between the two sources.  In practice, however the &lt;code&gt;BOUND&lt;/code&gt; instruction ended up getting executed unintentionally by programs that had crashed and the default BIOS handler would then get stuck in an infinite loop of printing the screen.&lt;/p&gt;&#xA;&lt;p&gt;The other conflicting uses for the vectors weren't as much of a problem, as exceptions 10 through 13 would normally only be generated in protected mode.  A protected mode operating system didn't need to be backwards compatible and couldn't use the BIOS, so could reconfigure the interrupt controller to deliver hardware interrupts through vectors outside the reserved range.&lt;/p&gt;&#xA;&lt;p&gt;The remainder of the CPU exceptions defined by later Intel processor were either also not normally generated by real mode code that needed to be backwards compatible or handled by default BIOS handlers that could properly distinguish between sources.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorUserId="15334" LastEditorDisplayName="user722" LastEditDate="2021-01-18T10:21:21.707" LastActivityDate="2021-01-18T10:21:21.707" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16529" PostTypeId="1" AcceptedAnswerId="16530" CreationDate="2020-10-12T15:45:47.163" Score="18" ViewCount="1174" Body="&lt;p&gt;On modern processors the x87 FPU is integrated in the CPU chip, but it used to be a separate chip before the 80486. So is there any way to detect its presence, and maybe even its generation (8087, 80187 etc)?&lt;/p&gt;&#xA;" OwnerUserId="16617" LastActivityDate="2020-10-14T15:08:46.530" Title="Detecting the external x87 FPU" Tags="&lt;x86&gt;&lt;floating-point&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16530" PostTypeId="2" ParentId="16529" CreationDate="2020-10-12T15:54:59.363" Score="31" Body="&lt;p&gt;The documented way to detect an x87 FPU is to attempt to initialise it, and then read its control word (&lt;code&gt;FPU_STATUS&lt;/code&gt; must be set to some non-zero value first):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FNINIT&#xA;FNSTSW WORD PTR [FPU_STATUS]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This uses the non-waiting variants, otherwise the CPU will wait for a non-existent FPU to respond. If the status word is &lt;em&gt;not&lt;/em&gt; 0 after this, no FPU is installed — the FPU socket is supposed to be wired in such a way that at least one of the lower eight bits of the status word floats high when no FPU is installed. (&lt;a href=&quot;http://bitsavers.org/components/intel/_dataBooks/1985_iAPX_286_Programmers_Reference_Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;The &lt;em&gt;iAPX 286 Programmer’s Reference Manual&lt;/em&gt;&lt;/a&gt; has details, in chapter 3 of the &lt;em&gt;Numeric Supplement&lt;/em&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;To check that the FPU is actually communicating, detection routines typically then try to write the control word.&lt;/p&gt;&#xA;&lt;p&gt;If an FPU is detected, determining its generation involves two main scenarios. In some cases the FPU generation has to match the installed CPU type, so detection boils down to &lt;a href=&quot;http://bitsavers.org/components/intel/appNotes/AP-485_Intel_Processor_Identification_and_the_CPUID_Instruction_Dec96.pdf&quot; rel=&quot;noreferrer&quot;&gt;identifying the CPU&lt;/a&gt;: if it’s an 8086 or 8088, the FPU is an 8087; if it’s a 186 or 188, the FPU is a 187; if it’s a 486, the FPU is built-in or the system is running on a 487SX. In other cases FPU features need to be used; the 286 and 386 can be paired with either a 287 or a 387 (in the guise of a 287XL on 286s and some 386s), and distinguishing these can be done by comparing positive and negative infinities — the 287 says they’re equal, the 287XL and 387 (and 187) say they’re different. (Thanks to &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/320/mnem&quot;&gt;mnem&lt;/a&gt; for &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16529/detecting-the-external-x87-fpu/16530#comment55783_16530&quot;&gt;the reminder&lt;/a&gt;!)&lt;/p&gt;&#xA;&lt;p&gt;It &lt;em&gt;is&lt;/em&gt; also possible to detect different FPUs by checking for other variations in behaviours. &lt;a href=&quot;https://www.sac.sk/download/utildiag/cpu215.zip&quot; rel=&quot;noreferrer&quot;&gt;TMI0SDGL&lt;/a&gt; includes sample code which shows how to do this. This would also be required to detect more capable clones of the Intel FPUs — some IIT FPUs added registers and instructions, and some Cyrix FPUs had more precise transcendental implementations.&lt;/p&gt;&#xA;&lt;p&gt;Note that FPU emulators on 286 and later CPUs, such as &lt;a href=&quot;http://cd.textfiles.com/simtel/simtel20/MSDOS/EMULATRS/EM87V1_3.ZIP&quot; rel=&quot;noreferrer&quot;&gt;EM87&lt;/a&gt; or &lt;a href=&quot;http://cd.textfiles.com/simtel/simtel20/MSDOS/EMULATRS/Q387_35.ZIP&quot; rel=&quot;noreferrer&quot;&gt;Q387&lt;/a&gt;, can fool the detection procedure shown above; but in such cases the EM bit of the machine status word is set, so it is still possible to distinguish between an emulator and an FPU (without resorting to timing measurements).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/users/823/njuffa&quot;&gt;Norbert Juffa&lt;/a&gt;’s &lt;a href=&quot;https://mikro.naprvyraz.sk/docs/Coding/Hardware/COPRO16A.TXT&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;COPRO16A.TXT&lt;/code&gt;&lt;/a&gt;, “Everything you always wanted to know about math coprocessors”, goes into much more detail about all this. His &lt;a href=&quot;https://www.sac.sk/download/utildiag/ctest260.zip&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;COMPTEST&lt;/code&gt;&lt;/a&gt; program includes detection source code for CPUs and FPUs (in &lt;code&gt;CCNEW.ASM&lt;/code&gt;, with detailed explanations in &lt;code&gt;COMPTEST.DOC&lt;/code&gt;), capable, like TMI0SDGL, of distinguishing between specific FPU models (Intel, Cyrix, IIT, C&amp;amp;T FPUs, and emulators).&lt;/p&gt;&#xA;&lt;p&gt;All this ignores the Weitek 3167 and 4167 coprocessors, which are very different both in terms of their interface with the CPU and in terms of their instruction sets.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-10-14T12:16:53.040" LastActivityDate="2020-10-14T12:16:53.040" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16531" PostTypeId="2" ParentId="16524" CreationDate="2020-10-12T16:55:44.947" Score="8" Body="&lt;p&gt;The custom chips in the original consoles were built using NMOS logic.  An NMOS (N-channel Metal Oxide Semiconductor) logic gate consists of one or more transistors called NFETs (N-channel Field Effect Transitor) which could pull a signal low when their inputs were high, along with a passive device that would pull a signal high when nothing was pulling it low.  For an NMOS logic gate to operate efficiently and reliably, it's important that the strength of the passive pull-up circuits be reasonably well controlled.  Too strong, and it will either generate too much heat or else prevent the transistors from reliably pulling their outputs low.  Too weak, and it will be unable to reliably pull outputs high.&lt;/p&gt;&#xA;&lt;p&gt;In the 1970s, NMOS designs started to give way to CMOS designs (Complementary Metal Oxide Semiconductor), which instead of using one kind of transistor, used two types: N channel devices which (as in NMOS) would switch outputs low when their inputs where high, but also P-channel devices which would switch outputs high when their inputs were low.  CMOS devices would generally require about twice as many many &amp;quot;active&amp;quot; transistors as NMOS devices to accomplish any particular task, but they offered greatly reduced power consumption/dissipation.  Further, they benefited much more from miniaturization.  In the early days of NMOS, the smallest passive-pullups that could be manufactured would be large enough to dissipate the heat they generated, but as manufacturing technologies improved, that ceased to be true.  While NMOS designs continued to be popular into the 1980s and even the early 1990s, they have by now been totally replaced with CMOS.&lt;/p&gt;&#xA;&lt;p&gt;It would in theory be possible to use some of the high-quality scans of parts like the NES PPU to make films that could in turn be used to manufacture chips if one had the proper equipment and expertise to tweak the exact chemical mixtures, temperatures, durations of all the various processing steps, etc. necessary to properly balance the strength of the active transistors and passive pull-up devices, but almost everyone who would have had the appropriate expertise will have long since retired, and any equipment such people would have used to fabricate the chips will have long since been replaced.  Further, while it's possible this wouldn't pose a problem, many industrial solvents that would have been used in the 1980s and 1990s are no longer legal or available, so even if someone knew all the parameters for the production steps and had the equipment available, the recipe would need to be reworked to use chemicals that are available today.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-10-12T16:55:44.947" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16532" PostTypeId="1" AcceptedAnswerId="16534" CreationDate="2020-10-12T17:19:59.727" Score="11" ViewCount="1150" Body="&lt;p&gt;The Seagate U Series hard disk Product manual states that the drive has 16 &amp;quot;&lt;strong&gt;Default read/write heads&lt;/strong&gt;&amp;quot; while it has 4/3/2/1 &amp;quot;Physical read/write heads&amp;quot; (depending on actual model).&#xA;Now, one or two disks is completely normal for a cheap drive 2001.&lt;/p&gt;&#xA;&lt;p&gt;But what on earth is a &amp;quot;default&amp;quot; head and how can it have 16?&lt;/p&gt;&#xA;&lt;p&gt;I have never heard of this term. If it refers to -- for example -- the maximum number of addressable heads by the controller logic, then it's a pretty marginal information and why include it among basic and vital information like number of sectors or cylingders?&#xA;(&lt;a href=&quot;http://www.codemicro.com/support/disc/manuals/ata/u6pmrevb.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.codemicro.com/support/disc/manuals/ata/u6pmrevb.pdf&lt;/a&gt;, see page 9: Specification summary table)&lt;/p&gt;&#xA;" OwnerUserId="19642" LastActivityDate="2020-10-13T19:58:07.350" Title="Default (as opposed to physical) read/write heads - what are they?" Tags="&lt;ibm-pc&gt;&lt;hard-disk&gt;&lt;disk-drive&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16533" PostTypeId="2" ParentId="16532" CreationDate="2020-10-12T17:31:00.277" Score="3" Body="&lt;p&gt;Some older computers used to identify 512-byte sectors by specifying a combination of a head number, sector number, and cylinder number.  For historical reasons, the head number was often limited to the range 0-15, sector number 1-63, and cylinder number 0-1022.  This limited disks to 8,455,200,768 bytes--a little bit under 8 GiB.  Newer drives simply access all sectors sequentially by number.&lt;/p&gt;&#xA;&lt;p&gt;I think what that manual is saying is that if it receives a command to read or write a sector at a specified cylinder/head/sector combination, it will access sector &lt;em&gt;(cylinder * 1008) + (head * 63) + (sector - 1)&lt;/em&gt;.  This would likely not yield meaningful results if one wanted to use the drive to its full capacity, but it would allow the drive to be connected to an older system and--if formatted on that system--used as though it were an antique just-under-8 GiB drive that used cylinder/head/sector addressing.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="7607" LastEditDate="2020-10-13T19:58:07.350" LastActivityDate="2020-10-13T19:58:07.350" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16534" PostTypeId="2" ParentId="16532" CreationDate="2020-10-12T17:33:18.437" Score="17" Body="&lt;p&gt;The physical geometry how many heads the drive actually has is not the same as the logical geometry of how many heads is presented to the PC by the drive.&lt;/p&gt;&#xA;&lt;p&gt;By translating the geometry, the drive can be fully addressable to up to the maximum of approximately 8 gigabytes in CHS mode, as the IDE interface is limited in CHS mode to 16 heads, 63 sectors and 16383 cylinders.&lt;/p&gt;&#xA;&lt;p&gt;If there was no translation, and the drive reported only the 4 physical heads, only the first about 2 gigabytes would be accessible via CHS addressing mode.&lt;/p&gt;&#xA;&lt;p&gt;The CHS geometry translation parameters are configurable, so the manual reports the geometry translation parameters that are the defaults that are selected after a powerup or drive reset.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2020-10-12T17:44:18.307" LastActivityDate="2020-10-12T17:44:18.307" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16535" PostTypeId="1" AcceptedAnswerId="16537" CreationDate="2020-10-12T18:15:55.213" Score="7" ViewCount="202" Body="&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/WinG&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article for WinG&lt;/a&gt; says the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;WinG would also perform a graphics hardware/driver profiling test on the first execution of the program in order to determine the best way to draw DIBs. This test showed a window full of red curved lines, sections of which would wobble as performance was tested. Once WinG had determined the fastest calls that did not cause graphics corruption, a profile would be saved so that the test would not need to be performed again.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What are the different &amp;quot;ways to draw DIBs&amp;quot; this performance test was trying out, and why some of them would sometimes work and sometimes not?&lt;/p&gt;&#xA;" OwnerUserId="4378" LastActivityDate="2020-10-12T22:11:07.523" Title="What exactly could cause corrupted graphics in WinG performance test?" Tags="&lt;graphics&gt;&lt;windows-3.x&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16536" PostTypeId="2" ParentId="16532" CreationDate="2020-10-12T18:41:12.153" Score="9" Body="&lt;p&gt;Modern hard drives are not addressed by Cylinder, Head and Sector (CHS) coordinates, but by Linear Block Address (LBA).  This is mostly due to the number of sectors per track changing across the width of the disk, as more sectors can be squeezed into the larger circles described by the outer tracks than the inner ones.  The drive electronics automatically translate the linear logical address into a physical one.&lt;/p&gt;&#xA;&lt;p&gt;This sectoring scheme began to be used before LBA addressing became the norm, so there was a long interim period in which logical CHS addresses were sent to the drive with no obvious relationship to its physical geometry, and the drive electronics had to translate them anyway.&lt;/p&gt;&#xA;&lt;p&gt;The drive would report a &amp;quot;default mapping&amp;quot; which the manufacturer considered to be a good fit for the drive's capacity, but a different mapping could be assigned by software (ie. the PC BIOS).  Very old BIOSes didn't know how to read the default mapping and had to be manually configured, which is why the default mapping is listed on the drive label.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-10-12T18:41:12.153" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16537" PostTypeId="2" ParentId="16535" CreationDate="2020-10-12T22:11:07.523" Score="9" Body="&lt;p&gt;Different computers had different kinds of caching between the CPU and the motherboard RAM, and some video cards had ways of taking data from memory without involving the CPU.  If any data copied from memory would involve the CPU, flushing the CPU cache to motherboard RAM before the copy operation would uselessly degrade performance, but if a display card uses bus mastering or other such techniques to grab data from motherboard RAM, failing to flush the cache before drawing may result in the display card receiving &amp;quot;stale&amp;quot; data.&lt;/p&gt;&#xA;&lt;p&gt;Such issues were made worse by the fact that many display cards could accept data faster during vertical and horizontal blanking intervals than they could during the active display period, and thus provided features that could perform graphics operations &amp;quot;in the background&amp;quot;.  Depending upon the display card, a request to display some data that was stored in main memory might report that it had been completed as soon as all of the operations were scheduled, rather than when they were completed.  If data in main memory were changed between the time the drawing commands were issued and the time they were actually carried out, the card might receive an updated version of the data, rather than receiving the data that had been stored in RAM at the time the commands were issued.&lt;/p&gt;&#xA;&lt;p&gt;Ideally, display drivers would take care of such issues automatically, but in the mid 1990s, motherboard and display card designs were both in flux, and there wasn't always a consensus as to who was responsible for handling caching issues under what circumstances.  While it would be possible to always force caches to be flushed whenever drawing anything, and then wait for each drawing operation to fully complete before returning control to the calling program, doing such things would severely degrade graphics performance.  Instead, the WingG tester tried to identify what combination of cache flushing, completion waiting, or other such techniques would run most efficiently while ensuring correct operation.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-10-12T22:11:07.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16538" PostTypeId="1" CreationDate="2020-10-12T23:05:00.240" Score="8" ViewCount="313" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Naval_Ordnance_Research_Calculator&quot; rel=&quot;noreferrer&quot;&gt;IBM NORC&lt;/a&gt; computer, among others, had an arithmetic instruction computing the difference of the absolute values of its operands (&lt;em&gt;|x|-|y|&lt;/em&gt;, see &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/norc/NORC_Programming_Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;NORC Programming Manual&lt;/a&gt;, page 11, opcode 28), which seems less useful than the &amp;quot;absolute difference&amp;quot;, aka &amp;quot;distance&amp;quot; (&lt;em&gt;|x-y|&lt;/em&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Apparently, at the time the instruction was considered useful enough for &lt;a href=&quot;https://en.wikipedia.org/wiki/Sergey_Lebedev_(scientist)&quot; rel=&quot;noreferrer&quot;&gt;Sergey Lebedev&lt;/a&gt; to include it in the M-20 and the BESM-6.&lt;/p&gt;&#xA;&lt;p&gt;What calculations was the &amp;quot;difference of absolute values&amp;quot; instruction intended for?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-10-13T14:23:27.677" Title="What is the purpose of the &quot;difference of absolute values&quot; instruction?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;instruction-set&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16539" PostTypeId="1" AcceptedAnswerId="16540" CreationDate="2020-10-13T08:19:09.823" Score="7" ViewCount="703" Body="&lt;p&gt;Reading &lt;a href=&quot;http://z80.info/decoding.htm&quot; rel=&quot;noreferrer&quot;&gt;Decoding Z80 Opcodes&lt;/a&gt;, There's a section about the &lt;code&gt;0xDD&lt;/code&gt; prefix. This instruction prefix causes the next instruction to use the &lt;code&gt;IX&lt;/code&gt; register instead of the &lt;code&gt;HL&lt;/code&gt; register. That makes sense. &lt;code&gt;HL&lt;/code&gt; and &lt;code&gt;IX&lt;/code&gt; (also &lt;code&gt;IY&lt;/code&gt;) are designed for holding pointers. That's why there's such an efficient encoding for &lt;code&gt;(HL)&lt;/code&gt; (called &lt;code&gt;M&lt;/code&gt; in Intel's parlance). This question is also about the &lt;code&gt;0xFD&lt;/code&gt; instruction prefix which does the same but for &lt;code&gt;IY&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, there's this comment about prefix &lt;code&gt;0xDD&lt;/code&gt; in particular:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If the next opcode makes use of HL, H, L, but not (HL), any occurrence of these will be replaced by IX, IXH, IXL respectively. An exception of this is EX DE, HL which is unaffected.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I think it's weird that &lt;code&gt;EX DE, HL&lt;/code&gt; is unaffected by this instruction prefix. I can see the utility of being able to efficiently switch pointers around. So has this been &amp;quot;special-cased&amp;quot; somehow to remove the possibility of exchange &lt;code&gt;DE&lt;/code&gt; with the index registers?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2020-10-13T10:29:33.960" LastActivityDate="2020-10-13T10:29:33.960" Title="Why does the Z80 not have EX DE, IX?" Tags="&lt;z80&gt;&lt;instruction-set&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16540" PostTypeId="2" ParentId="16539" CreationDate="2020-10-13T08:31:15.893" Score="15" Body="&lt;p&gt;Simply because these registers are not exchanged, but renamed (*1).&lt;/p&gt;&#xA;&lt;p&gt;All &lt;code&gt;EX DE,HL&lt;/code&gt; does is toggling a flip-flop which decides which is HL and which is DE.&lt;/p&gt;&#xA;&lt;p&gt;Much the same way the exchange for alternate AF (&lt;code&gt;EX AF,AF'&lt;/code&gt;) or alternate register (&lt;code&gt;EXX&lt;/code&gt;)set is done. It's as well the reason why all of them can be done in just 4 cycles — toggling either flip-flop does not need any data transfer.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - I have a vague feeling I did already explain that as part of some question about the register set, but can't find it right now.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2020-10-13T09:37:22.717" LastActivityDate="2020-10-13T09:37:22.717" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16542" PostTypeId="2" ParentId="16523" CreationDate="2020-10-13T10:56:50.423" Score="28" Body="&lt;p&gt;Stephen Kitt has already provided a good answer regarding the FDIV bug. I'll fill in some details about Intel employing logicians:&lt;/p&gt;&#xA;&lt;p&gt;Because of this bug, Intel had to replace a lot of processors, which was very expensive. Not wanting to repeat this, they hired a number of computer scientists with background in formal logic to prove the correctness of algorithms to be implemented in successors of the pentium. If you want to know more about their research, check out the publications of two of these scientists: &lt;a href=&quot;https://www.cl.cam.ac.uk/%7Ejrh13/papers/index.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.cl.cam.ac.uk/~jrh13/papers/index.html&lt;/a&gt;, &lt;a href=&quot;https://scholar.google.com/citations?user=MACCA0cAAAAJ&amp;amp;hl=en&quot; rel=&quot;noreferrer&quot;&gt;https://scholar.google.com/citations?user=MACCA0cAAAAJ&amp;amp;hl=en&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19646" LastActivityDate="2020-10-13T10:56:50.423" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16543" PostTypeId="1" AcceptedAnswerId="16548" CreationDate="2020-10-13T12:38:27.577" Score="16" ViewCount="2248" Body="&lt;p&gt;I can see the pinouts of these two chips are utterly different. Apparently the 'E needs an external clock as well. This question isn't so much about any of those hardware related differences. This question is about what a programmer can see.&lt;/p&gt;&#xA;&lt;p&gt;I have looked over the &lt;a href=&quot;https://techheap.packetizer.com/processors/6809/6809Instructions.html&quot; rel=&quot;noreferrer&quot;&gt;instruction set listing&lt;/a&gt;, but I don't see any mention in any documentation about differences between them. &lt;strong&gt;So what is the difference between a 6809 and a 6809E&lt;/strong&gt;?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="19066" LastEditDate="2020-10-13T12:59:33.290" LastActivityDate="2020-10-14T10:40:56.060" Title="Are the 6809 and 6809E different from a programmer's point of view?" Tags="&lt;instruction-set&gt;&lt;6809&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16544" PostTypeId="2" ParentId="16543" CreationDate="2020-10-13T13:24:52.050" Score="14" Body="&lt;p&gt;There's your answer, right there:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;the 'E needs an external clock as well&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's it. From the software side, there's no difference.&lt;/p&gt;&#xA;&lt;p&gt;(Also: The pinouts differ in 4 out of 40 pins. I wouldn't call that &amp;quot;utterly different&amp;quot;.)&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-10-13T13:30:32.013" LastActivityDate="2020-10-13T13:30:32.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16546" PostTypeId="2" ParentId="16538" CreationDate="2020-10-13T14:23:27.677" Score="7" Body="&lt;p&gt;The &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/norc/NORC_Programming_Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;programming manual&lt;/a&gt; does not explicitly give examples of how the difference of absolute values instructions were to be used.  However, it appears to be the easiest and fastest &lt;strong&gt;way to perform an absolute value, by using zero as the other operand&lt;/strong&gt;.  You can also perform a negative absolute value, which is consistent with the fact that all of the other arithmetic operations have negative versions.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The NORC has 2000 decimal words of memory, with each word being 16 binary-coded-decimal digits.  That makes 64 bits per word.  A &amp;quot;bit count&amp;quot; of the number of bits set to one, modulo 4, was also stored in 2 additional bits as a form of parity error checking.  The memory is painted as 2000 dots (one dot per address) on the face of 66 cathode ray tubes (one per bit).  The CRTs were periodically refreshed.  If the 64 bits of a word did not match the bit count, or if a nibble encoded outside the binary-coded-decimal range, then an error indicator was lit and the machine halted.&lt;/p&gt;&#xA;&lt;p&gt;Memory was shared for instructions and data.  The first two of the 16 decimal digits of a word (called the &lt;code&gt;P&lt;/code&gt; field) specified the contents of the word:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;P&lt;/code&gt; from 00 to 30 represents a floating point value with an exponent from 10&lt;sup&gt;0&lt;/sup&gt; to 10&lt;sup&gt;30&lt;/sup&gt;.  The next decimal digit of the word is the sign (0 for positive, 1 for negative).  &lt;strong&gt;This made inverting the sign easy, and most arithmetic operations had both normal and inverted sign versions.&lt;/strong&gt;  The remaining 13 decimal digits of the word are the mantissa.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;P&lt;/code&gt; from 70 to 99 represents a floating point value with an exponent from 10&lt;sup&gt;-30&lt;/sup&gt; to 10&lt;sup&gt;-1&lt;/sup&gt;.  The next decimal digit of the word is the sign (0 for positive, 1 for negative).  The remaining 13 decimal digits of the word are the mantissa.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;P&lt;/code&gt; from 40 to 59 represents an instruction word.  It appears that the instruction decoder completely ignored the &lt;code&gt;P&lt;/code&gt; field; rather, it was a hint for the human operators examining memory that such a word was instruction rather than data.  By convention, only the number 50 was actually used for &lt;code&gt;P&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The remaining 14 decimal digits of an instruction word were then split into fields:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Two decimal digits called &lt;code&gt;Q&lt;/code&gt; specified the opcode of the instruction.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Four decimal digits called &lt;code&gt;R&lt;/code&gt; specified the memory address of the first operand of the instruction.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Four decimal digits called &lt;code&gt;S&lt;/code&gt; specified the memory address of the second operand of the instruction.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Four decimal digits called &lt;code&gt;T&lt;/code&gt; specified the memory address to store the result.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Values of &lt;code&gt;R&lt;/code&gt;, &lt;code&gt;S&lt;/code&gt;, or &lt;code&gt;T&lt;/code&gt; in the range 0000 to 1999 were treated as direct memory addresses.  Values above 3999 selected an index register, which was added to the value, and then modulo 2000 specified the actual memory address.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Q&lt;/code&gt; opcodes below 20 seem to be unused.  Opcodes from 20 to 28 performed floating-point arithmetic on the &lt;code&gt;R&lt;/code&gt; and &lt;code&gt;S&lt;/code&gt; operands, with a rounded result stored in &lt;code&gt;T&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;20  Addition                                   R+S&#xA;21  Addition with inverse result sign        -(R+S)&#xA;22  Subtraction                                R-S&#xA;23  Subtraction with inverse result sign     -(R-S)&#xA;24  Multiplication                             R*S&#xA;25  Multiplication with inverse result sign  -(R*S)&#xA;26  Division                                   R/S&#xA;27  Division with inverse result sign        -(R/S)&#xA;28  Difference of absolute values            |R| - |S|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It's worth noting that only subtraction was directly implemented in hardware, and that the other arithmetic operations were implemented by subtraction:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The arithmetic unit adds, multiplies, and divides with subtraction performed by adding the tens complement of one operand to another.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;Q&lt;/code&gt; opcodes from 30 to 38 are identical to the 2X opcodes, except that the floating-point result is &lt;em&gt;not&lt;/em&gt; rounded.&lt;/p&gt;&#xA;&lt;p&gt;Opcode 40 performs an unsigned, 16-decimal-digit &lt;em&gt;integer&lt;/em&gt; addition of the operands in &lt;code&gt;R&lt;/code&gt; and &lt;code&gt;S&lt;/code&gt;, storing the result in &lt;code&gt;T&lt;/code&gt;.  Opcode 41 similarly performs and integer subtraction.  The manual suggests that this was intended for self-modifying code.&lt;/p&gt;&#xA;&lt;p&gt;Opcodes in the 5X range modify the index registers.&lt;/p&gt;&#xA;&lt;p&gt;Opcodes in the 6X and 7X range are conditional and unconditional jumps, and halt.  It is possible to implement subroutine calls and returns.  There are jumps conditioned on an operand's sign, but &lt;strong&gt;implementing absolute value using conditional jumps requires several instructions, compared to the one instruction of the difference of absolute values.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The 8X opcodes operate the printer, and the 9X opcodes operate magnetic tape storage.&lt;/p&gt;&#xA;&lt;p&gt;There are 24 suboperations that are used for instruction execution.  As previously mentioned, the only floating-point arithmetic suboperation was subtraction.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-10-13T14:23:27.677" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16547" PostTypeId="2" ParentId="16523" CreationDate="2020-10-13T16:19:43.537" Score="20" Body="&lt;p&gt;Intel had a rather complex bunch of hardware to compute a floating-point quotient in a way that yielded two bits per iteration, which required having a rather large table listing all the combinations of bit patterns where part of the quotient should be 11 [rather than listing all patterns individually, the table would have had entries where each bit may be 0, 1, or X, such that e.g. a bit pattern of 100X01X would match 1000010, 1000011, 1001010, or 1001011, so the table didn't need an impossibly huge number of entries].  Unfortunately, part of the table got corrupted when it was being transferred from whatever tool was used to generate it, into the chip design.&lt;/p&gt;&#xA;&lt;p&gt;I find this approach to division somewhat curious, since it would have been quick to examine the divisor and produce a value which, when multiplied by both the divisor (rounding up) and dividend (rounding down), would force the new divisor to have its upper bits equal to 0.1111 or 0.11111111, which would make it easy to extract 4 or 8 bits per iteration.  The final quotient would likely be slightly less than the correct value [never greater, given the directions of rounding earlier], but it would be close enough that only two or three couple of successive-approximation steps should be needed at the end to clean things up.&lt;/p&gt;&#xA;&lt;p&gt;In any case, the ultimate irony with the Intel FDIV bug is that, earlier, during the 386/387 era, there was a competing product by Weitek which could perform single-precision floating-point math much faster than Intel's chips, but didn't do double precision math at all.  Some programs which would normally have used double-precision math shipped versions for the Weitek which used single-precision math and thus produced less accurate results.  Intel's marketing team decided to exploit this (designed, and regarded as acceptable) lack of precision by producing an ad which showed a motherboard with a dime-store calculator decorated with clown graphics where the CPU should have been, and the caption &amp;quot;Ask for genuine Intel Math CoProcessors, or who knows what math you’ll have to count on&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ao97O.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ao97O.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="2037" LastEditDate="2020-10-14T04:49:15.930" LastActivityDate="2020-10-14T04:49:15.930" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16548" PostTypeId="2" ParentId="16543" CreationDate="2020-10-13T17:47:02.307" Score="18" Body="&lt;p&gt;To directly answer the question: &lt;strong&gt;there is no difference whatsoever on the software side&lt;/strong&gt;.  The CPU core and indeed the die inside the package is exactly the same, just different pins are bonded out in one specific corner.  The actual difference is entirely in the clock generator.&lt;/p&gt;&#xA;&lt;p&gt;The non-E version has oscillator-driver pins for directly attaching a crystal, and produces E and Q clocks in quadrature as outputs:&lt;br /&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Ac0Q5.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ac0Q5.png&quot; alt=&quot;HD6309 non-E&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The E version has E and Q clocks &lt;em&gt;as inputs&lt;/em&gt; so they must be generated by an external clock generator; it's straightforward to do that with a crystal can oscillator and a pair of JK flipflops.  The oscillator-driver pins are freed up for two control signals, TSC and LIC, potentially useful in more sophisticated systems.&lt;br /&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tFypJ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tFypJ.png&quot; alt=&quot;HD6309E&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Above diagrams taken from Hitachi's databook, so they refer to their 6309 clone rather than the 6809 itself.)  The major point here is that these differences are invisible to software.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-10-13T17:47:02.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16549" PostTypeId="2" ParentId="16543" CreationDate="2020-10-14T10:40:56.060" Score="3" Body="&lt;p&gt;From the other point of view: there is no way how a program can decide if runs on 6809, or 6809E. There are methods to distinct between MC6809 and HD6309 programmatically (HD6309 has a specific set of undocumented instructions), but 6809 and 6809E are the same chips, the only difference is the clock generating part.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-10-14T10:40:56.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16550" PostTypeId="1" AcceptedAnswerId="16562" CreationDate="2020-10-14T12:29:55.023" Score="6" ViewCount="415" Body="&lt;p&gt;I'm trying to find some resources on different versions of Amiga OS (aka Workbench) especially if there were any major changes to the OS architecture, resource use and drivers (with a goal to make CDTV use full extended RAM and CD ROM at the same time while on TF536 accelerator, known issue with conflicting memory addresses).&lt;/p&gt;&#xA;&lt;p&gt;Workbench 3.1 was a major revamp to previous versions 2.04 (A600) and 1.3 (A500) both in terms of looks and performance. 3.5 added number of network and utility features, improved look and so on. Then we had 3.9 with boing packs, which included suport for more features, expansion cards, improved look, etc.&lt;/p&gt;&#xA;&lt;p&gt;What about the underlying calls system makes to devices, drivers, how it manages memory? Is there any major difference there? Since 3.5 and 3.9 are modernised and RAM was more available at the time do they manage memory mappings differently?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="15334" LastEditDate="2020-10-14T14:29:31.960" LastActivityDate="2020-10-14T20:13:25.677" Title="Amiga OS 3.1 vs 3.5 vs 3.9 system difference" Tags="&lt;amiga&gt;&lt;operating-system&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16551" PostTypeId="1" CreationDate="2020-10-14T13:13:06.053" Score="10" ViewCount="4309" Body="&lt;p&gt;I was looking at &lt;a href=&quot;http://www.ibm.com/ibm/history/ibm100/us/en/icons/floppy/breakthroughs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; IBM webpage on the history of floppy disks and it says the original 8-inch floppy disk from 1971 could store 80 KB of data, equivalent to that of 3000 punched cards.&lt;/p&gt;&#xA;&lt;p&gt;So, based on that information and forgive me if I'm wrong because I'm bad at maths, but:&lt;/p&gt;&#xA;&lt;p&gt;80000/3000 = 26.6&lt;/p&gt;&#xA;&lt;p&gt;So the max storage capacity of 1 punched card would be roughly 26 bytes?&lt;/p&gt;&#xA;" OwnerUserId="19655" LastEditorUserId="5199" LastEditDate="2020-10-16T21:14:25.460" LastActivityDate="2020-10-17T04:28:02.800" Title="How much data could be stored on a single punched card?" Tags="&lt;ibm&gt;&lt;punched-cards&gt;" AnswerCount="6" CommentCount="8" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16552" PostTypeId="2" ParentId="16551" CreationDate="2020-10-14T13:47:15.800" Score="13" Body="&lt;p&gt;Each hole in a card represents one bit: It either can be punched, or not punched. The holes in a classic card are arranged in 80 columns and 12 rows. 80 x 12 = 960, so the &lt;em&gt;most&lt;/em&gt; amount of information that possibly could be stored on one card is 960 bits, which is equivalent to 120 bytes.&lt;/p&gt;&#xA;&lt;p&gt;In practice, most punched card applications stored one &lt;em&gt;text character&lt;/em&gt; per column.  If you used one byte to store each character code, then you could store the data from a typical card in an array of no more than 80 bytes.&lt;/p&gt;&#xA;&lt;p&gt;But, using eight bits to store each character is wasteful if the character set that you're using has fewer than 256 characters.  Many applications used not much more than just upper-case roman letters, digits, and maybe a handful of punctuation.  If you start looking at it from the viewpoint of information theory, you could &lt;em&gt;compress&lt;/em&gt; the information on &lt;em&gt;most&lt;/em&gt; cards into 50 bytes or less. For some applications, maybe a &lt;em&gt;lot&lt;/em&gt; less.&lt;/p&gt;&#xA;" OwnerUserId="588" LastEditorUserId="588" LastEditDate="2020-10-14T13:59:47.937" LastActivityDate="2020-10-14T13:59:47.937" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16553" PostTypeId="2" ParentId="16551" CreationDate="2020-10-14T13:51:31.747" Score="1" Body="&lt;p&gt;That &amp;quot;3000 punched cards&amp;quot; statement was what I'd call &amp;quot;advertising language&amp;quot;, mixing in a lot of usage assumptions, and effectively comparing apples with pears.&lt;/p&gt;&#xA;&lt;p&gt;A standard punched card could hold 80 columns of data, with each column typically representing 1 possible character of a text line. Each column consisted of 12 places, so you might call it 12 bits, but the encoding didn't use all possible combinations.&lt;/p&gt;&#xA;&lt;p&gt;On a floppy disk, with a different encoding, you typically have 1 byte per character, and represent lines by inserting carriage return and/or line feed characters in between the lines, so you typically get the text in a packed form.&lt;/p&gt;&#xA;&lt;p&gt;Probably they based their calculation on an assumed average text line length around 25 characters plus line separator, giving roughly 80000 bytes.&lt;/p&gt;&#xA;&lt;p&gt;If you were to squeeze the maximum out of the punched card medium, you`d get a raw 12*80 bits = 120 bytes. But punching too many holes into the card hurts its mechanical stability, so I guess you'd have to limit yourself to 10 bits per column (with a clever encoding avoiding too many holes), resulting in 100 bytes. Based on that calculation, one floppy equals 800 punched cards, but when advertising the shiny new technology called &amp;quot;floppy&amp;quot;, 3000 is much more impressive, isn't it?&lt;/p&gt;&#xA;" OwnerUserId="6565" LastEditorUserId="6565" LastEditDate="2020-10-15T08:13:38.707" LastActivityDate="2020-10-15T08:13:38.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16554" PostTypeId="2" ParentId="16551" CreationDate="2020-10-14T13:51:50.697" Score="5" Body="&lt;p&gt;3000 might be a slight exaggeration (standard IBM punch card had 80 columns with 12 rows) but there are some factors that make it so that you can't just treat a punch card as 80 or 120 bytes.&lt;/p&gt;&#xA;&lt;p&gt;One is that you generally didn't treat the holes on a punch card as binary, doing that would weaken it too much and it would fall apart in the machine. IBM punch cards were designed around only having 1-3 holes per column representing numbers, letters and symbols. While there were several different character sets depending on the machine or programming language you were normally limited to 64 symbols (6 bits) per column, meaning a maximum of 60 bytes per punch card.&lt;/p&gt;&#xA;&lt;p&gt;At 60 bytes per card we'd still need less than 1400 to store 80k.&lt;/p&gt;&#xA;&lt;p&gt;However a stack of punch cards was not normally treated as a single continuous stream of data. Rather for purposes of practicality each card was treated like a seperate record. Imagine if every time you wanted to insert a character you had to repunch the the entire deck of cards (or at least those past the insertion point) in order to shift them all by one.&lt;/p&gt;&#xA;&lt;p&gt;So instead punch cards tended to have empty space on them. If your punch cards stored employee data then each card would be just one employee or if they stored programming code then each card would store a single line of code. This makes the idea of a punch card only averaging 26 bytes or 26 characters far more believable and thus IBM's estimate of 3000 punch cards equal to 80KB of magnetic binary storage is a boastful but not entirely inaccurate number.&lt;/p&gt;&#xA;" OwnerUserId="15514" LastActivityDate="2020-10-14T13:51:50.697" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16555" PostTypeId="1" CreationDate="2020-10-14T14:00:55.907" Score="-2" ViewCount="380" Body="&lt;p&gt;I don't understand why 8bits is defined as being equal to 1byte or 1octet but at the same time the maximum capacity of an 8bit bus or 8bit databus would be 255 bytes because&lt;/p&gt;&#xA;&lt;p&gt;128 64 32 16 8 4 2 1&lt;br /&gt;&#xA;1  1  1   1 1 1 1 1  =255&lt;/p&gt;&#xA;&lt;p&gt;Likewise with 16bit &amp;amp; so on where it's equal to 2bytes/2octets but a 16bit bus can have a max capacity of 65536 values but in terms of memory the highest it could go is 65535bytes or rounded down to 64kb.&lt;/p&gt;&#xA;" OwnerUserId="19655" LastActivityDate="2020-10-14T14:15:11.943" Title="How can 8bits = 1byte but also = 255 bytes at the same time?" Tags="&lt;memory&gt;&lt;8-bit-microcomputers&gt;&lt;16-bit&gt;" AnswerCount="2" CommentCount="3" ClosedDate="2020-10-14T15:36:55.540" ContentLicense="CC BY-SA 4.0" />
  <row Id="16556" PostTypeId="2" ParentId="16555" CreationDate="2020-10-14T14:09:47.163" Score="11" Body="&lt;p&gt;A one octet word (eight bits, also known as a byte) can take a value 0-255 as you've found. When you use a byte &lt;em&gt;as an address&lt;/em&gt;, you can identify 256 different locations.&lt;/p&gt;&#xA;&lt;p&gt;A two-octet word (sixteen bits) can take a value 0-65535. When you use that value as an address, like on a Z80 or 6502 processor, you can identify 65536 different locations.&lt;/p&gt;&#xA;" OwnerUserId="19659" LastActivityDate="2020-10-14T14:09:47.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16557" PostTypeId="2" ParentId="16555" CreationDate="2020-10-14T14:15:11.943" Score="4" Body="&lt;p&gt;An 8-bit (also called a 1-byte) number, can hold one of 256 distinct values, often an integer between 0 and 255.&lt;/p&gt;&#xA;&lt;p&gt;When used as an address, an 8-bit or 1-byte number can address up to 256 different values, such as different bytes in memory.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-10-14T14:15:11.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16559" PostTypeId="2" ParentId="16551" CreationDate="2020-10-14T15:37:01.947" Score="17" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;it says the original 8inch floppy disk from 1971 could store 80kb of data equivalent to that of 3000 punched cards&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Given, the text is a bit misleading, as it mixes up firsts. While it is true that the first Floppy, used in a product, in 1971, had a storage of 80 KiB (exactly 79,75), it was neither used as generic storage media not available for user storage at all. This was the read only &lt;strong&gt;23FD&lt;/strong&gt; Drive used to load the microcode for certain /360 models. These drives were part of the CPU and not sold separate. Drives able to write this specific 80 KiB format were never sold to customers.&lt;/p&gt;&#xA;&lt;p&gt;The first drive sold and used as generic storage was the &lt;strong&gt;33FD&lt;/strong&gt; in 1972, sold starting in 1973 as part of the 3740 data entry system. Here it was literally used to store punch card equivalent, as the 3740 was meant to replace the classic process of data entry via key punch and reading them later via remote entry.&lt;/p&gt;&#xA;&lt;p&gt;Type 1 stations offered (over time) three sizes after formatting:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;~237 KiB (73 tracks with 26 sectors, each 128 bytes)&lt;/li&gt;&#xA;&lt;li&gt;277,5 KiB (74 tracks with 15 sectors, each 256 bytes)&lt;/li&gt;&#xA;&lt;li&gt;296 KiB (74 tracks with 8 sectors, each 512 bytes)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;237 KiB / 3000 gives about 80, the size of a punch card.&lt;/p&gt;&#xA;&lt;p&gt;Bottom Line, both numbers are right in being about firsts, but not related.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[...] so the max storage capacity of 1 punched card would be roughly 26bytes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Nope, beside the fact that a punch card does not hold bytes &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/16115/6659&quot;&gt;but characters&lt;/a&gt;, it's 80 per card.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="808" LastEditDate="2020-10-17T04:28:02.800" LastActivityDate="2020-10-17T04:28:02.800" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16560" PostTypeId="2" ParentId="16550" CreationDate="2020-10-14T17:29:54.240" Score="3" Body="&lt;p&gt;From what I've read over time, AmigaOS 3.5 and 3.9 do not make any changes to the underlying operating system other than they now requires at least a 68020 processor.&lt;/p&gt;&#xA;&lt;p&gt;AmigaOS 3.5 and 3.9 still rely on the Amiga Kickstart 3.1 ROMs which is where most of the code lives that handles the bits you're asking about (memory management, etc). The OS could have included patches to the ROM, but I am not aware of anything significant (certainly no virtual memory support).&lt;/p&gt;&#xA;&lt;p&gt;The key thing is that regardless of the availability of RAM in the mid-to-late-90s versus 1989, the 3.x series ran on the &amp;quot;classic&amp;quot; Amiga hardware and thus hardware created for those machines most likely supported 3.1 if not 2.04. Remember, an A2632 board which came out around 1990 could be loaded up with 112MB which was a ridiculous amount for an Amiga 2000. I believe the PowerPC boards later could hold more, but a PowerPC Amiga is stretching the definition of what a classic Amiga is in the first place.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2020-10-14T20:12:03.527" LastActivityDate="2020-10-14T20:12:03.527" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16561" PostTypeId="2" ParentId="16551" CreationDate="2020-10-14T18:03:36.037" Score="1" Body="&lt;p&gt;To find out the information capacity of a punched card, we need to consider the main limitation: the overall percentage of holes on a card must be substantially less than 50% for it to maintain rigidity and not to jam.&#xA;Let's be generous and say that a card maintains enough rigidity with up to 5 holes per column (encodings existed allowing up to 6 holes for some characters, for example, the double quote in &lt;a href=&quot;https://ub.fnwi.uva.nl/computermuseum//DWcodes.html#A082&quot; rel=&quot;nofollow noreferrer&quot;&gt;modified EBCDIC&lt;/a&gt;, which was represented by punches in rows BA8421, but they were rare).&lt;/p&gt;&#xA;&lt;p&gt;The number of 12-bit codes with up to 5 bits set is 1586 out of 4096 (for comparison, the number of 12-bit codes with up to 4 bits set is 794).&lt;/p&gt;&#xA;&lt;p&gt;Therefore, each column can carry the amount of information equal to log2(1586) = 10.6 bit (or, for up to 4 punches, log2(794) = 9.6 bit).&lt;/p&gt;&#xA;&lt;p&gt;The total information-theoretic practical capacity of a card will be, depending on the quality of the card stock, about 768-848 bit; maybe a little less if we have to adjust the encoding to prevent long sequences of consecutive punches in one row.&lt;/p&gt;&#xA;&lt;p&gt;In more understandable terms, that would be about 100 bytes, give or take a few bytes.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-10-14T18:03:36.037" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16562" PostTypeId="2" ParentId="16550" CreationDate="2020-10-14T20:13:25.677" Score="3" Body="&lt;p&gt;One big improvement of 3.5 over 3.1 is the &amp;quot;big drive&amp;quot; native support (by patching ROM calls)&lt;/p&gt;&#xA;&lt;p&gt;Without a separate NSD patch (new style device) installed, OS 3.1 could not handle drives bigger than 4Gb properly. Everything written after the 4Gb boundary destroyed the existing data by writing on the first sectors instead (the disk position was a 32-bit integer that only goes up to 4Gb, then wraps up to 0...)&lt;/p&gt;&#xA;&lt;p&gt;So while this patch had to be (prorperly) installed to be able to use big drives on OS 3.1, OS 3.5 fixed that natively and ended hours of frustration.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-10-14T20:13:25.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16563" PostTypeId="2" ParentId="6792" CreationDate="2020-10-15T09:43:40.877" Score="-2" Body="&lt;p&gt;its called Banner Mania, run under dos :D&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Banner_Mania&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Banner_Mania&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19664" LastActivityDate="2020-10-15T09:43:40.877" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16564" PostTypeId="2" ParentId="16551" CreationDate="2020-10-15T10:01:57.310" Score="0" Body="&lt;p&gt;The answer by Raffzhan to the Question, &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16112/what-did-code-on-punch-cards-do-with-the-other-six-bits-per-column&quot;&gt;What did code on punch cards do with the other six bits per column?&lt;/a&gt; gives a good example of how information was expressed on punched cards, as does &lt;a href=&quot;https://iclces.uk/articles/reading_a_punched_card.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article&lt;/a&gt; about computer cards for ICL (&lt;a href=&quot;https://en.wikipedia.org/wiki/International_Computers_Limited&quot; rel=&quot;nofollow noreferrer&quot;&gt;International Computers Limited&lt;/a&gt;) computers from Britain.&lt;/p&gt;&#xA;&lt;p&gt;As others have stated in other answers to this your question, each column on a computer card represented one character, or one byte. Most cards that I am aware of contained 80 columns, so the limit for a single card was 80 bytes.&lt;/p&gt;&#xA;&lt;p&gt;However, how much a stack of cards contained depended on what was stored on the cards and the format in which it was stored.&lt;/p&gt;&#xA;&lt;p&gt;During the era of computer cards, the cards either contained computer programs or data, where each card represented on line of a program or one line of data.&lt;/p&gt;&#xA;&lt;p&gt;A card with the program instruction,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;C := C + 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;only contained six characters, so it only stored 6 bytes.&lt;/p&gt;&#xA;&lt;p&gt;How much data was stored a single card depended on whether the data was integer numbers, floating point numbers, or characters and whether delimiters where used and whether spaces were used.&lt;/p&gt;&#xA;&lt;p&gt;I have seen data cards where all 80 columns were used as if an 80 digit long integer was stored on them. It was a method of maximizing data storage. The program reading the data, usually a FORTRAN program would parse the data as required, so, for example, the first four digits may have been one number and the next six digits another number. This required numbers to have leading zeros to fill out the fixed format of the data storage. If the number read needed to be in floating point format is was converted by the program after having been read and parsed.&lt;/p&gt;&#xA;" OwnerUserId="19504" LastActivityDate="2020-10-15T10:01:57.310" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16565" PostTypeId="1" AcceptedAnswerId="16569" CreationDate="2020-10-15T10:10:21.433" Score="9" ViewCount="247" Body="&lt;p&gt;Some background: I want to create a CPC MicroSD interface, so my first step is trying to hook the CAS* jumpblock entries just like AMSDOS and other DOSes do.&lt;/p&gt;&#xA;&lt;p&gt;My first goal is to override &lt;code&gt;CAS CATALOG&lt;/code&gt; so that Basic's &lt;code&gt;CAT&lt;/code&gt; does not try reading from the cassette and instead prints something and returns immediately to Basic's prompt (just like &lt;code&gt;CAT&lt;/code&gt; does when AMSDOS is loaded).&lt;/p&gt;&#xA;&lt;p&gt;After inspecting &lt;a href=&quot;http://www.cpcwiki.eu/imgs/f/f0/ROM_Listing.pdf&quot; rel=&quot;noreferrer&quot;&gt;Basic 1.0's listing&lt;/a&gt; (see &lt;code&gt;D246&lt;/code&gt; for Basic's &lt;code&gt;CAT&lt;/code&gt; code) I discovered Basic also calls the &lt;code&gt;CAS IN/OUT ABANDON&lt;/code&gt; functions (in &lt;code&gt;D2AD&lt;/code&gt;) so I'll hook those too just in case.&lt;/p&gt;&#xA;&lt;p&gt;I made a ROM (see the listing at the bottom of the question) that hooks the &lt;code&gt;CAS CATALOG&lt;/code&gt;, &lt;code&gt;CAS IN ABANDON&lt;/code&gt; and &lt;code&gt;CAS OUT ABANDON&lt;/code&gt; functions and prints their names instead.&lt;/p&gt;&#xA;&lt;p&gt;Everything seems to load and run fine (I'm using WinAPE), but when I type &lt;code&gt;CAT&lt;/code&gt; in Basic, after the hooked CAS* functions are called (and their names are printed, so the hook worked)... the CPC is stuck reading from tape! I get no other message, and the only way to get the &amp;quot;Ready&amp;quot; message and keyboard response is to either press ESC to trigger a &lt;code&gt;*break*&lt;/code&gt; or play a tape. Playing a tape from start to finish produces no output at all, but once finished cataloguing returns to Basic's prompt.&lt;/p&gt;&#xA;&lt;p&gt;What am I doing wrong?&lt;/p&gt;&#xA;&lt;p&gt;Here's AMSDOS which instantly goes back to Basic prompt (indicated by the &lt;code&gt;Ready&lt;/code&gt; message) as I want mine to do:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qXwDk.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qXwDk.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And here's my ROM waiting for tape data:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IHOwF.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IHOwF.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;My ROM after pressing ESC:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/H6PW7.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/H6PW7.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1&gt;My ROM Listing&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;hello.rasm&lt;/code&gt; (works with &lt;a href=&quot;https://github.com/mkoloberdin/rasm&quot; rel=&quot;noreferrer&quot;&gt;RASM&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;save &amp;quot;hello.rom&amp;quot;,#c000,#ffff-#c000&#xA;&#xA;org #c000&#xA;&#xA;os_reset equ #0000&#xA;os_txt_output equ #bb5a&#xA;os_cas_in_abandon equ #bc7d&#xA;os_cas_catalog equ #bc9b&#xA;os_cas_out_abandon equ #bc92&#xA;kl_curr_selection equ #b912&#xA;&#xA;header:&#xA;  db 1&#xA;  db 0,0,0&#xA;  dw rsx_commands&#xA;&#xA;rsx_table:&#xA;  jp init&#xA;  jp hello&#xA;  jp reset&#xA;&#xA;rsx_commands:&#xA;  str &amp;quot;TEST ROM&amp;quot;&#xA;  str &amp;quot;HELLO&amp;quot;&#xA;  str &amp;quot;RESET&amp;quot;&#xA;  db 0&#xA;&#xA;ALIGN 2&#xA;&#xA;init:&#xA;  push ix,bc&#xA;&#xA;  ;; Reserve 9 bytes for RST 18h args&#xA;  ld bc, -9&#xA;  add hl, bc&#xA;  inc hl ;; HL = first available byte&#xA;&#xA;  push af&#xA;    push hl ;; load hl into ix&#xA;    pop ix&#xA;&#xA;    call kl_curr_selection ;; A = current upper ROM number&#xA;&#xA;    ;; BB AA XX -- FAR CALL to AABB in ROM XX&#xA;    ld (ix+0), lo(my_cas_catalog)&#xA;    ld (ix+1), hi(my_cas_catalog)&#xA;    ld (ix+2), a&#xA;    ld (ix+3), lo(my_cas_in_abandon)&#xA;    ld (ix+4), hi(my_cas_in_abandon)&#xA;    ld (ix+5), a&#xA;    ld (ix+6), lo(my_cas_out_abandon)&#xA;    ld (ix+7), hi(my_cas_out_abandon)&#xA;    ld (ix+8), a&#xA;  pop af&#xA;&#xA;  ;; Patch jump block entries with FAR CALL into our ROM&#xA;  ;; (HL) = DF LL HH = RST 18h (HHLL)&#xA;  ld bc, 3&#xA;  ld ix, os_cas_catalog&#xA;  ld (ix+0), #df&#xA;  ld (ix+1), l&#xA;  ld (ix+2), h&#xA;  add hl, bc&#xA;  ld ix, os_cas_in_abandon&#xA;  ld (ix+0), #df&#xA;  ld (ix+1), l&#xA;  ld (ix+2), h&#xA;  add hl, bc&#xA;  ld ix, os_cas_out_abandon&#xA;  ld (ix+0), #df&#xA;  ld (ix+1), l&#xA;  ld (ix+2), h&#xA;  ld bc, -6&#xA;  add hl, bc&#xA;&#xA;  ;; Print copyright message&#xA;  push hl&#xA;    ld hl, str_init&#xA;    call print_str&#xA;  pop hl&#xA;&#xA;  ;; HL = last available address for next ROM&#xA;  dec hl&#xA;&#xA;  pop bc,ix&#xA;&#xA;  ret&#xA;&#xA;;; |HELLO&#xA;hello:&#xA;  push hl&#xA;    ld hl, str_hello&#xA;    call print_str&#xA;  pop hl&#xA;  ret&#xA;&#xA;;; |RESET&#xA;reset:&#xA;  jp os_reset&#xA;&#xA;&#xA;;; ----&#xA;&#xA;print_str:&#xA;    ld a, (hl)&#xA;  or a&#xA;  ret z&#xA;  call os_txt_output&#xA;  inc hl&#xA;  jr print_str&#xA;&#xA;my_cas_catalog:&#xA;  push hl&#xA;    ld hl, str_cas_catalog&#xA;    call print_str&#xA;  pop hl&#xA;&#xA;  ;; reset Z (preserving A)&#xA;  push bc&#xA;    ld b, a&#xA;    ld a, 1&#xA;    cp 0&#xA;    ld a, b&#xA;  pop bc&#xA;&#xA;  ;; set carry flag&#xA;  scf&#xA;&#xA;  ;; !Z &amp;amp;&amp;amp; C == success&#xA;  ret&#xA;&#xA;my_cas_in_abandon:&#xA;  ld hl, str_cas_in_abandon&#xA;  call print_str&#xA;  ret&#xA;&#xA;my_cas_out_abandon:&#xA;  ld hl, str_cas_out_abandon&#xA;  call print_str&#xA;  ret&#xA;&#xA;str_init: db &amp;quot; kaoD testing&amp;quot;,10,13,10,13,0&#xA;str_hello: db &amp;quot;Hello world!&amp;quot;,10,13,10,13,0&#xA;str_cas_catalog: db &amp;quot;CAS CATALOG&amp;quot;,10,13,10,13,0&#xA;str_cas_in_abandon: db &amp;quot;CAS IN ABANDON&amp;quot;,10,13,10,13,0&#xA;str_cas_out_abandon: db &amp;quot;CAS OUT ABANDON&amp;quot;,10,13,10,13,0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="19665" LastEditorUserId="19665" LastEditDate="2020-10-15T10:39:52.607" LastActivityDate="2020-10-16T16:40:15.057" Title="Trying to create a filesystem ROM for Amstrad CPC but tape is still waiting" Tags="&lt;file-system&gt;&lt;cpc&gt;&lt;cpc464&gt;&lt;amstrad&gt;&lt;firmware&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16567" PostTypeId="1" AcceptedAnswerId="16568" CreationDate="2020-10-16T05:27:52.920" Score="7" ViewCount="1116" Body="&lt;p&gt;I've managed to get my hands on a really old mac computer that was probably built in the late 90's. The operating system was last updated in 2001 to 10.1.4. The problem is that I'm not sure if it's okay to surf the Internet on this machine. There is no anti-virus security for it; and it's not like I can install Norton on it because the computer would be unable to run it since it only has half a gigabyte of RAM. I would think it would at least okay to browse on Google and access most of the pages that Google presents.&lt;/p&gt;&#xA;&lt;p&gt;Would it be relatively safe for me as long as I use common sense or is it unsafe. If not, is there an anti-virus software that is made for computers like this?&lt;/p&gt;&#xA;" OwnerUserId="19675" LastActivityDate="2020-10-16T06:19:51.593" Title="Questions about Security over Using an Ancient Mac Computer on The Internet" Tags="&lt;apple&gt;&lt;internet&gt;&lt;security&gt;" AnswerCount="1" CommentCount="13" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16568" PostTypeId="2" ParentId="16567" CreationDate="2020-10-16T05:52:00.650" Score="14" Body="&lt;p&gt;Risk assessment is, of course, subjective, but I wouldn't worry too much &lt;em&gt;if&lt;/em&gt; you're behind a firewall, or a router with NAT and no ports forwarded to this Mac.&lt;/p&gt;&#xA;&lt;p&gt;In that case, the only danger comes from actions originating at your machine, either done by you or the OS -- which is mostly software you download and run, websites you open, that sort of thing. And most of the malware out there today will not run on that Mac, anyway, either because it's not targeting PowerPC Macs, or because its targeting a browser much more capable than what you'll be able to run on that machine.&lt;/p&gt;&#xA;&lt;p&gt;As an aside, a late-90s Mac running OS X isn't &amp;quot;really old&amp;quot; ;-)&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-10-16T06:19:51.593" LastActivityDate="2020-10-16T06:19:51.593" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16569" PostTypeId="2" ParentId="16565" CreationDate="2020-10-16T12:28:07.120" Score="6" Body="&lt;p&gt;As I was expecting, it was an error in my code :) pelrun was very kind and found the bug (see &lt;a href=&quot;https://www.cpcwiki.eu/forum/programming/trying-to-create-a-filesystem-rom-for-amstrad-cpc-but-tape-is-still-waiting/&quot; rel=&quot;nofollow noreferrer&quot;&gt;my question on CPCWiki's forum&lt;/a&gt;) so props to him.&lt;/p&gt;&#xA;&lt;p&gt;I'll try to explain the issue:&lt;/p&gt;&#xA;&lt;p&gt;Notice I'm hooking into the jump entry by setting up a FAR CALL. Notice how that's a FAR &lt;strong&gt;CALL&lt;/strong&gt; and not a JUMP? There's an extra return address there that shouldn't be pushed into the stack!&lt;/p&gt;&#xA;&lt;p&gt;So, as soon as the FAR CALL ends, the return address is popped and it arrives right into the CAS WRITE jump entry (which I didn't hook) so the cassette routine starts, which explains the behavior.&lt;/p&gt;&#xA;&lt;p&gt;So why am I using FAR CALL and not a jump? Because it's the only way to call into an arbitrary upper ROM (where my code resides).&lt;/p&gt;&#xA;&lt;p&gt;Both AMSDOS (&lt;a href=&quot;http://cpctech.cpcwiki.de/docs/amsdos.asm&quot; rel=&quot;nofollow noreferrer&quot;&gt;listing, see CD30&lt;/a&gt;) and M4 (&lt;a href=&quot;https://github.com/M4Duke/m4rom/blob/be2b3c5866bb99cde2fea9ec13cab6620cfe1882/M4ROM.s#L481&quot; rel=&quot;nofollow noreferrer&quot;&gt;listing, see &lt;code&gt;fio_jvec&lt;/code&gt;&lt;/a&gt;) do a double trick there: first they remove the unwanted return address from the stack, and then they use it to address their own jump table.&lt;/p&gt;&#xA;&lt;p&gt;The second trick is not needed (useful nonetheless) since I'm not hooking many CAS entries (for now), but the fixing of the stack is needed and indeed does fix my use.&lt;/p&gt;&#xA;&lt;p&gt;Now, I'm not sure how to proceed but AFAICT these are my options:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1. Don't use FAR CALL and instead just jump&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;But this would require storing the routine in RAM (and will probably end up reimplementing a poor-man's version of FAR CALL).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2. Keep using FAR CALL (using the AMSDOS trick, or individual hooks) and manipulate the stack manually&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm going to guess that, since AMSDOS and M4 use this, every known firmware implements FAR CALL as having the bad return address on SP+6.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;3. Patch a jump into a FAR CALL immediately followed by a ret&lt;/strong&gt; (thanks andycadley at CPCWiki forum)&lt;/p&gt;&#xA;&lt;p&gt;This is slightly longer in RAM (3 bytes for the FAR CALL buffer + 3 bytes for the RST and in-band address + 1 for the RET) but much simpler.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;I asked the same question on CPCWiki's forum in case I missed an alternative, and will update this answer accordingly.&lt;/p&gt;&#xA;" OwnerUserId="19665" LastEditorUserId="19665" LastEditDate="2020-10-16T16:40:15.057" LastActivityDate="2020-10-16T16:40:15.057" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16570" PostTypeId="1" AcceptedAnswerId="16571" CreationDate="2020-10-16T13:24:41.103" Score="10" ViewCount="701" Body="&lt;p&gt;Apart from 1351 mouse what other official Commodore C64/C128 pointing devices were available, or notable 3rd party like Mouse Cheese. Joysticks and controllers are out of question. &lt;a href=&quot;https://www.c64-wiki.com/index.php?title=Peripheral_Devices&amp;amp;action=edit&amp;amp;redlink=1&quot; rel=&quot;noreferrer&quot;&gt;C64-wiki seems to be blank on that&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="129" LastEditDate="2020-10-16T14:53:23.863" LastActivityDate="2020-10-17T14:50:10.230" Title="What pointing devices were available for C64/C128?" Tags="&lt;history&gt;&lt;commodore-64&gt;&lt;commodore-128&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16571" PostTypeId="2" ParentId="16570" CreationDate="2020-10-16T13:38:49.147" Score="14" Body="&lt;p&gt;Before GEOS and the 1351 mouse became popular for the C64/C128, the most notable (non-joystick) pointing device was the famous &lt;a href=&quot;https://en.wikipedia.org/wiki/KoalaPad&quot; rel=&quot;noreferrer&quot;&gt;Koala Pad&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;There were a few programs for the C64 before GEOS that provided fairly complete GUI style interfaces. &lt;strong&gt;The Print Shop&lt;/strong&gt; and &lt;strong&gt;Doodle&lt;/strong&gt; come to mind, as well as the very early (1982) &lt;strong&gt;Pinball Construction Set&lt;/strong&gt;. Because there was no mouse at the time, these programs generally relied on the joystick/keyboard to control the &amp;quot;pointer&amp;quot;. It worked pretty well, but not so well for drawing programs. Therefore, it was the drawing/painting programs that tended to have support for the Koala Pad, with KoalaPainter being the best known of those.&lt;/p&gt;&#xA;&lt;p&gt;The Commodore engineers who designed the C64 seemed to think the &lt;a href=&quot;https://www.c64-wiki.com/wiki/Light_pen&quot; rel=&quot;noreferrer&quot;&gt;Light Pen&lt;/a&gt; would be the pointing device of choice for drawing/painting programs. So, this hardware is readily supported by the C64 (VIC-II lightpen interface) and its controller port. Many of these Light Pen devices were manufactured, but they failed to catch on with developers and users. This is most likely due to the awkward ergonomics of using a light pen on a vertical CRT display.&lt;/p&gt;&#xA;&lt;p&gt;Note: While the 1351 and Amiga mouse look nearly identical, they work completely different and aren't compatible. However, recent efforts have been made to create an &lt;a href=&quot;https://mamedev.emulab.it/robiza/2017/05/24/geos-e-mouse-amiga/&quot; rel=&quot;noreferrer&quot;&gt;Amiga mouse driver for GEOS&lt;/a&gt;. This opens another very convenient pointing device up for C64/C128 use.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-10-17T14:50:10.230" LastActivityDate="2020-10-17T14:50:10.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16572" PostTypeId="2" ParentId="16570" CreationDate="2020-10-16T13:41:16.677" Score="8" Body="&lt;p&gt;You're looking at the wrong page. :) The &lt;a href=&quot;https://www.c64-wiki.com/wiki/Input_Device&quot; rel=&quot;noreferrer&quot;&gt;C64-Wiki page on Input Devices&lt;/a&gt; lists &lt;a href=&quot;https://www.c64-wiki.com/wiki/Mouse&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;mice&lt;/strong&gt;&lt;/a&gt; (digital joystick-like mice, and analogue free movement mice), &lt;strong&gt;touchpads&lt;/strong&gt;, &lt;strong&gt;graphics tablets&lt;/strong&gt; such as the &lt;a href=&quot;https://i.pinimg.com/originals/d1/9c/4f/d19c4ff81a32898becb6c2a4572f8784.jpg&quot; rel=&quot;noreferrer&quot;&gt;Koala Pad with Koala Painter&lt;/a&gt;, &lt;a href=&quot;https://www.c64-wiki.com/wiki/Light_pen&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;light pens&lt;/strong&gt;&lt;/a&gt; and &lt;a href=&quot;https://www.c64-wiki.com/wiki/Light_gun&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;light guns&lt;/strong&gt;&lt;/a&gt; as typical C64 pointing devices.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-10-16T13:51:42.510" LastActivityDate="2020-10-16T13:51:42.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16573" PostTypeId="2" ParentId="14404" CreationDate="2020-10-16T14:13:49.010" Score="1" Body="&lt;p&gt;As another example of how open things were &amp;quot;back in the day&amp;quot;...&lt;/p&gt;&#xA;&lt;p&gt;In January 1996 I registered a domain and set up a Linux box on dial-up with my local ISP just outside the greater Chicago area.  Not only did I have static IP, but because of the way they were set up I received a whole 30-IP block of public addresses!  The Linux box ran SMTPD, NNTPD, IRCD, HTTPD, FTPD, Telnetd, etc. and also set up the PC as a router, so all three PCs in the house were publicly accessible on a 10base2 network.  I was even giving accounts on the machine to friends for hosting their own web and FTP sites.&lt;/p&gt;&#xA;&lt;p&gt;That lasted about 8 months before the ISP clawed back most of those but I still had 6 public IPs until I moved to a more rural area in late 1998, still in upstate Illinois.  Even then I had a Static IP dialup with a couple of different providers, first with 2 public IPs and finally just one but I was still able to run all the daemons.  I had NAT set up in my house so I could be at work and telnet to my home server or print to my home printer.&lt;/p&gt;&#xA;&lt;p&gt;In 2003 I moved to upstate New York and moved to a cable modem with Earthlink.  I stopped running NNTP but nothing was blocked.  It wasn't until I moved to Delaware in 2012 and had experience with Comcast and FIOS that SMTP was blocked at the ISP level.&lt;/p&gt;&#xA;" OwnerUserId="4822" LastActivityDate="2020-10-16T14:13:49.010" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16574" PostTypeId="1" AcceptedAnswerId="16581" CreationDate="2020-10-16T15:29:53.750" Score="4" ViewCount="127" Body="&lt;p&gt;For aesthetic reasons, I would prefer to run a US-english variant of System 6.0.8, but all my keyboards are of a Scandinavian layout. Is it possible to swap key maps (using ResEdit?) to use my Finnish layout keyboard on an US-english operating system variant?&lt;/p&gt;&#xA;&lt;p&gt;Normally I'd be fine with just using an US layout, but on these early Mac keyboards, they did something really weird to accommodate the international layout - The entire bottom row of characters is shifted to the right by one, for example.&lt;/p&gt;&#xA;" OwnerUserId="19681" LastActivityDate="2020-10-16T19:25:38.663" Title="Is it possible to change keyboard key maps on System 6?" Tags="&lt;apple-macintosh&gt;&lt;mac-os-classic&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16575" PostTypeId="1" AcceptedAnswerId="16576" CreationDate="2020-10-16T17:09:15.960" Score="4" ViewCount="211" Body="&lt;p&gt;When the BIOS gives control to the MBR (or the bootloader, for non-partitioned media), it passes the drive number from which the bootloader was loaded in the DL register. This number is most of the times 0x00 when booting floppy drives or 0x80 when booting from hard drives.&lt;/p&gt;&#xA;&lt;p&gt;The BIOS disk functions (int 0x13) all require a drive number when accessing a drive. Since the bootloader is only given the boot drive's number, how is it possible to determine how many drives are in the system (assuming that the BIOS will enumerate the disks sequentially, so the second floppy is 0x01, the second hard drive is 0x81 and so on...)? There seems to be no BIOS function for this, at least according to &lt;a href=&quot;https://en.wikipedia.org/wiki/INT_13H&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="16617" LastEditorUserId="3481" LastEditDate="2020-10-16T21:51:59.797" LastActivityDate="2020-10-20T09:04:04.043" Title="Detecting the number of disk drives installed" Tags="&lt;ibm-pc&gt;&lt;hard-disk&gt;&lt;x86&gt;&lt;bios&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16576" PostTypeId="2" ParentId="16575" CreationDate="2020-10-16T17:18:35.740" Score="7" Body="&lt;p&gt;The number of hard drives supported by interrupt 13h is stored in the byte at &lt;a href=&quot;https://fd.lod.bz/rbil/memory/bios/m00400075.html&quot; rel=&quot;noreferrer&quot;&gt;0040h:0075h&lt;/a&gt;. This includes drives managed by expansion ROMs (&lt;em&gt;e.g.&lt;/em&gt; SCSI drives); see &lt;a href=&quot;https://en.wikipedia.org/wiki/Option_ROM&quot; rel=&quot;noreferrer&quot;&gt;the Wikipedia article on the topic&lt;/a&gt; for details. You can also find this value at offset 70h in &lt;a href=&quot;https://fd.lod.bz/rbil/memory/bios/m0040000e.html&quot; rel=&quot;noreferrer&quot;&gt;IBM’s Extended BIOS Data Area&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Hard drives are accessed using values from 80h to 80h + the number of drives, minus one.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-10-16T17:30:56.000" LastActivityDate="2020-10-16T17:30:56.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16577" PostTypeId="1" AcceptedAnswerId="16579" CreationDate="2020-10-16T17:54:47.930" Score="27" ViewCount="7080" Body="&lt;p&gt;Reading the Wikipedia article about &lt;a href=&quot;https://en.wikipedia.org/wiki/Real-time_computing&quot; rel=&quot;noreferrer&quot;&gt;real-time computing&lt;/a&gt;, I found written that:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Once when the MOS Technology 6502 (used in the Commodore 64 and Apple II), and later when the Motorola 68000 (used in the Macintosh, Atari ST, and Commodore Amiga) were popular, anybody could use their home computer as a real-time system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The next sentence elaborates a little on that claim:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The possibility to deactivate other interrupts allowed for hard-coded loops with defined timing and the low interrupt latency allowed the implementation of a real-time operating system, giving the user interface and the disk drives lower priority than the real-time thread.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;After this they are contrasted with the modern CPUs and operating systems depending on them:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Compared to these the programmable interrupt controller of the Intel CPUs (8086..80586) generates a very large latency and the Windows operating system is neither a real-time operating system nor does it allow a program to take over the CPU completely and use its own scheduler, without using native machine language and thus surpassing all interrupting Windows code.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Could someone elaborate a bit more on this information and give some examples for &amp;quot;deactivating other interupts&amp;quot; and &amp;quot;hard-coded loops with defined timing&amp;quot; to clear what it exactly means and to give some additional reasons with appropriate examples, if any?&lt;/p&gt;&#xA;" OwnerUserId="15096" LastEditorUserId="535" LastEditDate="2020-10-18T18:49:02.763" LastActivityDate="2020-10-28T07:53:59.540" Title="Why are old CPUs like MOS Technology 6502 and Motorola 68000 considered better for real time systems applications than modern x86 based CPUs?" Tags="&lt;6502&gt;&lt;m68k&gt;" AnswerCount="6" CommentCount="20" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16579" PostTypeId="2" ParentId="16577" CreationDate="2020-10-16T18:23:51.283" Score="52" Body="&lt;p&gt;On a typical 6502, Z80, or 68000 system, it's possible to predict very precisely &lt;em&gt;exactly&lt;/em&gt; how long a piece of code will take to execute.  The same is true, incidentally, of many small microcontrollers produced today.  In many cases, this allows some operations to be done more efficiently than would otherwise be possible.&lt;/p&gt;&#xA;&lt;p&gt;For example, if both function-control latches are set, the Apple's Disk II controller card will, once every four cycles, grab whatever happens to be on the CPU bus into its shift register for transmission to disk.  To output a stream of data, the CPU must compute each byte byte, write it to a register which turns on control latch #1 [this operation takes four cycles, and will both set the latch and put the proper value on the data bus during the fourth cycle], and then turn off control latch #1 [which also takes four cycles, clearing the latch on the fourth cycle], then compute the next byte and repeat the sequence, with each byte's &amp;quot;set control latch #1&amp;quot; operation starting exactly 32 cycles after that of the previous byte.  Disk-writing code wouldn't include any data to check whether the controller is ready for a byte of data; instead, it would blindly expect that if latch #1 is on and #2 is off, the controller will look for data at a fixed intervals starting a certain amount of time after latch #2 turns on.&lt;/p&gt;&#xA;&lt;p&gt;On modern CPUs, out-of-order execution, memory caching, and many other features will improve the speed with which many operations are performed, most of the time, but predicting how much the speed will be improved would often be impractical.  If code accesses a piece of memory that had not been accessed in a long time and wasn't in a region of fast memory called the cache, the access would need to be performed using slow memory, but the data would get copied to the cache so that if it's needed again soon, it can be fetched more quickly--often more than an order of magnitude faster.  Because the cache is much smaller than main memory, however, data which is in the cache but hasn't been used for awhile will often need to be displaced to make room for other data.  Although it's unlikely, one may end up with situations where the CPU repeatedly selects for displacement information that's about to be used again.  Fetching data from memory in a sequence that causes that to occur may take an order of magnitude longer than fetching that same data in a slightly different sequence.&lt;/p&gt;&#xA;&lt;p&gt;On systems using a simple processor or controller, in most cases where the CPU would usually be significantly faster than needed to accomplish what needs to be done, one could establish that it will always be at least fast enough.  There may be some timing uncertainties with regard to how long it will take to handle an event if some other event happens simultaneously, but it's usually possible to compute worst-case timings and will be fairly close to what could realistically occur.  On fancier high-performance machines, however, it may be possible to guarantee that timing targets will be met unless more than 50% of memory accesses in a stretch of code result in cache misses, and one may determine that it would be unlikely for even 20% of the accesses to result in cache misses, but it may be very hard to prove that no sequence of inputs could cause 80% or more of the accesses to result in cache misses, which could in turn prevent a program from meeting a timing deadline.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-10-16T18:23:51.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16580" PostTypeId="2" ParentId="16577" CreationDate="2020-10-16T18:26:38.883" Score="22" Body="&lt;p&gt;It's the simplicity.&lt;/p&gt;&#xA;&lt;p&gt;Under modern general purpose operating systems, you don't usually have hard real-time guarantees.  Too many things are going on.  Context switching is slow.  Interrupts are slow.  The kernel is often not fully pre-emptable.&lt;/p&gt;&#xA;&lt;p&gt;On top of all that, modern hardware incorporates features like speculative execution, extensive pipelining, multiple levels of cache and other features that make instruction execution timings very complex.  It can be impossible to predict instruction timing, except to give an upper limit.&lt;/p&gt;&#xA;&lt;p&gt;This means that, if you have a process running on a Linux system in a tight loop, you don't know when the next instruction will run.  It could be in 2 nanoseconds, in 2 microseconds, or in 2 milliseconds.&lt;/p&gt;&#xA;&lt;p&gt;On a 6502 running at 1 MHz, you know it takes &lt;em&gt;exactly&lt;/em&gt; 2 microseconds to execute a CLC instruction.  You can trace your code lock-step with real-time if you want.&lt;/p&gt;&#xA;&lt;p&gt;There is no real barrier to that level of control on a modern x86 machine in principle; it's just very complicated compared to the simplicity of simpler machines.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-10-16T18:26:38.883" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16581" PostTypeId="2" ParentId="16574" CreationDate="2020-10-16T19:25:38.663" Score="5" Body="&lt;p&gt;&lt;strong&gt;Yes.&lt;/strong&gt;  I hauled out my Mac Plus, with System 6.0.8, and tested this.  The system file comes with two &lt;code&gt;KMAP&lt;/code&gt; resources, which define the keyboard mapping.  The &lt;code&gt;Keyboard&lt;/code&gt; section of the control panel allows you to choose between these two keymaps, &lt;code&gt;Domestic&lt;/code&gt; and &lt;code&gt;International&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You are correct that the scancodes for the bottom row of the &lt;code&gt;International&lt;/code&gt; keyboard are shifted by one key.  This can be seen from &lt;em&gt;Inside Macintosh&lt;/em&gt; volume III, chapter 2, figure 9:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gpgqZ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gpgqZ.png&quot; alt=&quot;early Mac keyboard layouts&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Make a copy of your System file, and open that copy in ResEdit.  Edit the &lt;code&gt;KMAP&lt;/code&gt; resource named &lt;code&gt;International&lt;/code&gt; to your desired layout.  Replace the System file with your new copy, and reboot.  &lt;em&gt;Et voila!&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-10-16T19:25:38.663" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16582" PostTypeId="2" ParentId="16577" CreationDate="2020-10-16T19:53:51.377" Score="27" Body="&lt;p&gt;This paragraph in Wikipedia really is no candidate for the best entry-of-the-year award. It seems to be comparing Apples with Oranges. (Or rather starts talking about CPUs, then commences on PCs vs. &amp;quot;something else&amp;quot;, i.e. system architecture). A comparison of interrupt latency and predictability thereof doesn't make much sense on &lt;em&gt;CPU level&lt;/em&gt; - It must be done on &lt;em&gt;system level&lt;/em&gt;, as all components of a system can affect this timing and need to be taken into account for comparison.&lt;/p&gt;&#xA;&lt;p&gt;Wikipedia seems to have realized that and warns you with a &amp;quot;largely unverified&amp;quot; banner. So, take it with a grain of salt (or, rather, a spoonful).&lt;/p&gt;&#xA;&lt;p&gt;While it is true that the 8259 in a PC (contemporary to the mentioned 68k and 6510, not a modern one) adds some overhead to the interrupt latency, this is not at all a trait of the x86 CPU, but rather one of the IBM PC's architecture. You can easily add an interrupt controller to a 68k system and it will add the same latency there. Lots of 68k computers BTW did that - The Atari ST (with its MFP) and the Amiga, had both interrupt and DMA controllers that introduced similar latency and bus contention overheads.&lt;/p&gt;&#xA;&lt;p&gt;Intel's x86 architecture can just as well be used for real-time applications - and this has been done successfully in the past - many embedded systems were based on 80186 and 80386 CPUs - just not on an IBM PC architecture.&lt;/p&gt;&#xA;&lt;p&gt;MS Windows didn't help much as well, so it was out of the question for running realtime applications - But there were (and are) quite some real-time OS for x86, like QNX or VxWorks, and there are even real-time Linux derivates for x86 CPUs.&lt;/p&gt;&#xA;&lt;p&gt;Of the three computers mentioned, the Commodore Amiga is probably the computer with the least predictable interrupt latency - Its custom chips are allowed to take over and occupy the bus for a significant and relatively unpredictable amount of time (length of a possible DMA access is of concern here).&lt;/p&gt;&#xA;&lt;p&gt;Taking superscalar traits of a CPU (like out-of-order-execution, parallel instruction execution, branch prediction, caches,...) into the argument (started with the Pentium on Intel's range of CPUs),&#xA;still doesn't distinguish the Intel CPU range as particularly bad - Motorola had, with the 68060, very similar technology in its portfolio with very similar consequences on predictability (obviously, there is no 6502 derivate with such features).&lt;/p&gt;&#xA;&lt;p&gt;Some more comments on the Wikipedia paragraph:&lt;/p&gt;&#xA;&lt;p&gt;On &lt;em&gt;...anybody could use their home computer as a real-time system.&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;p&gt;Well, yes and no. To my knowledge, there was no real-time multitasking OS available for any of the mentioned home computers other than the Atari ST, which had OS-9 and RTOS-UH, both respectable RTOSs. So, using any other such HC as a real-time system required you to write your OS from scratch - Not a task for the faint-hearted, and not distinguishing these computers at all from x86-based computers - you could have done the very same thing there.&lt;/p&gt;&#xA;&lt;p&gt;On &lt;em&gt;... possibility to deactivate other interrupts allowed for hard-coded loops with defined timing and the low interrupt latency&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Deactivating interrupts and hard-coded tight loops are both definite no-nos for real-time systems. This seems to be alluding to &amp;quot;racing-the-beam&amp;quot; applications and other tight synchronisation to video timing techniques, mainly used in the home computer demo scene. While those techniques are definitly closely dependant on timing, they are basically the opposite of a real-time system - as they hog the CPU for quite a long time for one single task, like busy-waiting until the CRT beam reaches some definite position. This indeed does rely on low interrupt latency, but also &lt;strong&gt;heavily&lt;/strong&gt; increases latency for anything else. Nonwithstanding that, there is no reason you couldn't do the same thing on an x86-based computer (maybe not the IBM PC, again because of its architecture)&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2020-10-27T06:32:50.073" LastActivityDate="2020-10-27T06:32:50.073" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16583" PostTypeId="2" ParentId="16577" CreationDate="2020-10-17T00:13:06.287" Score="10" Body="&lt;p&gt;There are three principal reasons:&lt;/p&gt;&#xA;&lt;p&gt;1: Realtime software demands CPUs whose execution time is highly predictable.  That is true mostly of CPUs without speculative features such as caching and dynamic branch prediction.  Some modern CPUs (eg. ARM Cortex-R series) are specifically designed to provide this property.&lt;/p&gt;&#xA;&lt;p&gt;2: Low interrupt latency and overhead, on the order of a single-digit cycle count.  This is a feature of the 6502 (which has a &lt;em&gt;maximum&lt;/em&gt; interrupt latency of about 15 cycles to the first instruction in the ISR, and a minimum of &lt;em&gt;one&lt;/em&gt; cycle if correctly prepared with the &lt;code&gt;WAI&lt;/code&gt; instruction) and the ARM (which has a dedicated alternate register bank for handling FIRQs, eliminating the overhead of saving registers to stack), but decidedly not of the 68000 and x86 families.  The 68000 and 68020 are sometimes used where interrupt latency is less of a concern.&lt;/p&gt;&#xA;&lt;p&gt;3: Ability to run at &amp;quot;micropower&amp;quot;, ie. less than a milliwatt, in embedded applications that demand extremely long battery life, sometimes on the order of several years (eg. 6502s are used in pacemakers).  This practically demands a &amp;quot;fully static&amp;quot; CMOS implementation.  Current production 6502 and ARM CPUs can achieve that in practice; your average x86 CPU and its auxiliary hardware eats several watts at full idle sleep.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-10-17T00:13:06.287" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="16584" PostTypeId="1" AcceptedAnswerId="16586" CreationDate="2020-10-17T11:28:58.030" Score="5" ViewCount="365" Body="&lt;p&gt;I'm building a breadboard Z80-based computer. As now, I have the CPU hooked up to an EEPROM and an I/O device (an HD44780 character display) with appropriate decoding logic.&lt;/p&gt;&#xA;&lt;p&gt;The ROM chip starts at address 0x0000 while the I/O device exposes two registers at addresses 0x00 and 0x01 when the IORQ pin is active (low).&lt;/p&gt;&#xA;&lt;p&gt;I wrote the following program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;;HD44780 LCD test procedure&#xA;&#xA;LCD_INSTR_REG: EQU %00000000&#xA;LCD_DATA_REG: EQU %00000001&#xA;&#xA;;Reset procedure&#xA;ld a,%00111000&#xA;out (LCD_INSTR_REG),a&#xA;ld a,%00001000&#xA;out (LCD_INSTR_REG),a&#xA;ld a,%00000001&#xA;out (LCD_INSTR_REG),a&#xA;&#xA;;Init procedure&#xA;ld a,%00111000&#xA;out (LCD_INSTR_REG),a&#xA;ld a,%00001110&#xA;out (LCD_INSTR_REG),a&#xA;&#xA;;Write characters to display&#xA;ld a,%01000100&#xA;out (LCD_DATA_REG),a&#xA;ld a,%01100001&#xA;out (LCD_DATA_REG),a&#xA;ld a,%01101110&#xA;out (LCD_DATA_REG),a&#xA;ld a,%01101001&#xA;out (LCD_DATA_REG),a&#xA;ld a,%01100101&#xA;out (LCD_DATA_REG),a&#xA;ld a,%01101100&#xA;out (LCD_DATA_REG),a&#xA;ld a,%01100101&#xA;out (LCD_DATA_REG),a&#xA;ld a,%00100001&#xA;out (LCD_DATA_REG),a&#xA;&#xA;halt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That, once compiled with GNU &lt;a href=&quot;https://linux.die.net/man/1/z80asm&quot; rel=&quot;nofollow noreferrer&quot;&gt;z80asm&lt;/a&gt;, translates to the following code:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TObab.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TObab.png&quot; alt=&quot;Machine code&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can see several &lt;code&gt;3E&lt;/code&gt; instructions that load an immediate value to register A, interleaved by &lt;code&gt;D3&lt;/code&gt; instructions that load to I/O register 00 (and then 01) the value present in register A. The last instruction (&lt;code&gt;76&lt;/code&gt;) is the halt instruction.&lt;/p&gt;&#xA;&lt;p&gt;The execution of the code causes the following bytes to appear on data bus (picked up with an Arduino used as a poor man's logic analyzer):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;HD44780 debugger&#xA;DATA BUS    HEX     RS&#xA;00000000    0x00    I&#xA;00000000    0x00    I&#xA;00000000    0x00    I&#xA;00000000    0x00    I&#xA;00000000    0x00    I&#xA;00000000    0x00    D&#xA;00000000    0x00    D&#xA;00000000    0x00    D&#xA;00000000    0x00    D&#xA;00000000    0x00    D&#xA;00000000    0x00    D&#xA;00000000    0x00    D&#xA;00000000    0x00    D&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Every line is the bus state at the IORQ descending edge (but I obtain the same result if I trigger my code on the rising edge).&lt;/p&gt;&#xA;&lt;p&gt;You can see, from left to right: the value of the single data bus bits, the same value in hex, the value of A0, that select the I/O device register (instruction is LOW and data is HIGH).&lt;/p&gt;&#xA;&lt;p&gt;As you can see, while the correct addresses are set, the CPU is writing all zeroes to the data bus. &lt;strong&gt;Did I misunderstand the way the &lt;em&gt;&lt;code&gt;OUT&lt;/code&gt;&lt;/em&gt; instruction works? Otherwise, what could be the problem in my code?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I decided to accept the answer from &lt;strong&gt;Spektre&lt;/strong&gt; as it is complete and argumentative. By the way, note that in my case &lt;em&gt;the problem was not due to timings&lt;/em&gt;, but two swapped lines in the address bus (so the CPU was reading in a whole different memory address, probably reading NOPs or garbage). My CPU was running at 140 Hz and I'd like to point out that, after fixing the addr bus pins, the LCD screen worked perfectly up to 14 kHz without needing to check the BUSY bit.&lt;/p&gt;&#xA;&lt;p&gt;Over a certain frequency, BTW, adding delays as proposed by Spektre &lt;em&gt;was not enough&lt;/em&gt;, as the signal was not kept on the data bus long enough for the LCD to read it. As far as I can understand, the only way to make the LCD work at frequencies in the MHz range is to use some kind of latched buffers/transceivers to &lt;em&gt;decouple&lt;/em&gt; the LCD EN frequency from the CPU frequency.&lt;/p&gt;&#xA;" OwnerUserId="14711" LastEditorUserId="7946" LastEditDate="2020-12-31T14:51:35.140" LastActivityDate="2020-12-31T14:51:35.140" Title="Why is my program outputting only zeros to the data bus during I/O operations?" Tags="&lt;z80&gt;&lt;assembly&gt;&lt;io&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16586" PostTypeId="2" ParentId="16584" CreationDate="2020-10-17T15:40:21.880" Score="3" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;LCD&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;as mentioned before your display init is not correct (too fast) you do not need to check busy flag you just need to add waits... This is my driver for LCD1602 on AVR32 which uses the same LCD controller using 4bit interface an 2x16 character LCD:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; //------------------------------------------------------------------------------------------&#xA; #ifndef _LCD1602_h&#xA; #define _LCD1602_h&#xA; //------------------------------------------------------------------------------------------&#xA; volatile avr32_gpio_port_t *LCD_gpio = &amp;amp;AVR32_GPIO.port[AVR32_PIN_PA31&amp;gt;&amp;gt;5];&#xA; #define LCD_shift (AVR32_PIN_PA28&amp;amp;31)&#xA; #define LCD_mask (15&amp;lt;&amp;lt;LCD_shift)&#xA; //------------------------------------------------------------------------------------------&#xA; enum _LCD_key_enum&#xA;     {&#xA;     _LCD_key_none=0,&#xA;     _LCD_key_left,&#xA;     _LCD_key_right,&#xA;     _LCD_key_up,&#xA;     _LCD_key_down,  &#xA;     };&#xA; //------------------------------------------------------------------------------------------&#xA; void LCD_write4bit(U8 x)    // (internal) write 4bit using 4bit interface&#xA;     {&#xA;     U32 m0,m1;&#xA;     // L&#xA;     m1=x&amp;amp;15; m1&amp;lt;&amp;lt;=LCD_shift; m0=m1^LCD_mask;&#xA;     LCD_gpio-&amp;gt;ovrc =m0; // clr&#xA;     LCD_gpio-&amp;gt;oders=m0;&#xA;     LCD_gpio-&amp;gt;gpers=m0;&#xA;     LCD_gpio-&amp;gt;ovrs =m1; // set&#xA;     LCD_gpio-&amp;gt;oders=m1;&#xA;     LCD_gpio-&amp;gt;gpers=m1;&#xA;     gpio_set_gpio_pin(AVR32_PIN_PB00); // E&#xA;     cpu_delay_us( 1,clk_cpu);&#xA;     gpio_clr_gpio_pin(AVR32_PIN_PB00); // E&#xA;     cpu_delay_us(40,clk_cpu);&#xA;     }&#xA; //------------------------------------------------------------------------------------------&#xA; void LCD_write(U8 x)        // (internal) write 8bit using 4bit interface&#xA;     {&#xA;     LCD_write4bit(x&amp;gt;&amp;gt;4);&#xA;     LCD_write4bit(x);&#xA;     cpu_delay_us(40,clk_cpu);&#xA;     }&#xA; //------------------------------------------------------------------------------------------&#xA; void LCD_init()             // init used GPIO and LCD&#xA;     {&#xA;     // ADC keyboard&#xA;     gpio_enable_module_pin(AVR32_ADC_AD_4_PIN,AVR32_ADC_AD_4_FUNCTION);&#xA;     sysclk_enable_peripheral_clock(&amp;amp;AVR32_ADC);&#xA;     adc_configure(&amp;amp;AVR32_ADC);&#xA;     adc_enable(&amp;amp;AVR32_ADC,4);&#xA;     // LCD&#xA;     gpio_configure_pin(AVR32_PIN_PA31,GPIO_DIR_OUTPUT|GPIO_PULL_UP);    // D7&#xA;     gpio_configure_pin(AVR32_PIN_PA30,GPIO_DIR_OUTPUT|GPIO_PULL_UP);    // D6&#xA;     gpio_configure_pin(AVR32_PIN_PA29,GPIO_DIR_OUTPUT|GPIO_PULL_UP);    // D5&#xA;     gpio_configure_pin(AVR32_PIN_PA28,GPIO_DIR_OUTPUT|GPIO_PULL_UP);    // D4&#xA;     gpio_configure_pin(AVR32_PIN_PB11,GPIO_DIR_OUTPUT|GPIO_PULL_UP);    // RS&#xA;     gpio_configure_pin(AVR32_PIN_PB00,GPIO_DIR_OUTPUT|GPIO_PULL_UP);    // E&#xA;     gpio_clr_gpio_pin(AVR32_PIN_PB11); // RS&#xA;     gpio_clr_gpio_pin(AVR32_PIN_PB00); // E&#xA;     cpu_delay_ms(50,clk_cpu);&#xA;     LCD_write4bit(0x03); cpu_delay_ms(  5,clk_cpu);&#xA;     LCD_write4bit(0x03); cpu_delay_us(150,clk_cpu);&#xA;     LCD_write4bit(0x03); cpu_delay_us(150,clk_cpu);&#xA;     LCD_write4bit(0x02); cpu_delay_ms(  1,clk_cpu);&#xA;     const U8 LCD_2LINE   =0x08;&#xA;     const U8 LCD_1LINE   =0x00;&#xA;     const U8 LCD_5x10DOTS=0x04;&#xA;     const U8 LCD_5x8DOTS =0x00;&#xA;     LCD_write(0x20|LCD_2LINE|LCD_5x8DOTS);  &#xA;     const U8 LCD_DISPLAYON =0x04;&#xA;     const U8 LCD_DISPLAYOFF=0x00;&#xA;     const U8 LCD_CURSORON  =0x02;&#xA;     const U8 LCD_CURSOROFF =0x00;&#xA;     const U8 LCD_BLINKON   =0x01;&#xA;     const U8 LCD_BLINKOFF  =0x00;&#xA;     LCD_write(0x08|LCD_DISPLAYON|LCD_CURSOROFF|LCD_BLINKOFF);&#xA;     LCD_write(0x01); cpu_delay_ms( 2,clk_cpu);&#xA;     const U8 LCD_ADRINC=0x02;&#xA;     const U8 LCD_ADRDEC=0x00;&#xA;     const U8 LCD_SHIFTON=0x01;&#xA;     const U8 LCD_SHIFTOFF=0x00;&#xA;     LCD_write(0x04|LCD_ADRINC|LCD_SHIFTOFF);&#xA;     }&#xA; //------------------------------------------------------------------------------------------&#xA; void LCD_clear()                // clear screen and set position to 0,0&#xA;     {&#xA;     LCD_write(0x01); cpu_delay_ms( 2,clk_cpu);&#xA;     }&#xA; //------------------------------------------------------------------------------------------&#xA; void LCD_gotoxy(U8 x,U8 y)      // set position to x,y&#xA;     {&#xA;     LCD_write(0x80+(y&amp;lt;&amp;lt;6)+x);&#xA;     }&#xA; //------------------------------------------------------------------------------------------&#xA; void LCD_prntxt(const char *txt)    // print txt at current position&#xA;     {&#xA;     gpio_set_gpio_pin(AVR32_PIN_PB11); // RS&#xA;     for (int i=0;(i&amp;lt;16)&amp;amp;&amp;amp;(txt[i]);i++) LCD_write(txt[i]);&#xA;     gpio_clr_gpio_pin(AVR32_PIN_PB11); // RS&#xA;     }&#xA; //------------------------------------------------------------------------------------------&#xA; void LCD_prndec(U32 num,int digits) // print num at current position as decimal number aligned to digit places or unaligned if digits&amp;lt;=0&#xA;     {&#xA;     #define _digits 10&#xA;     static char txt[_digits+1];&#xA;     int i,a,b,e;&#xA;     if (digits&amp;lt;=0)&#xA;         {&#xA;         if (num&amp;lt;10) digits=1;&#xA;         else if (num&amp;lt;100) digits=2;&#xA;         else if (num&amp;lt;1000) digits=3;&#xA;         else if (num&amp;lt;10000) digits=4;&#xA;         else if (num&amp;lt;100000) digits=5;&#xA;         else if (num&amp;lt;1000000) digits=6;&#xA;         else if (num&amp;lt;10000000) digits=7;&#xA;         else if (num&amp;lt;100000000) digits=8;&#xA;         else if (num&amp;lt;1000000000) digits=9;&#xA;         else                      digits=10;&#xA;         }&#xA;     if (digits&amp;gt;_digits) digits=_digits;&#xA;     if (digits&amp;lt;      1) digits=1;&#xA;     for (i=1,b=1;i&amp;lt;digits;i++,b*=10);&#xA;     for (e=0,i=0;i&amp;lt;digits;i++)&#xA;         {&#xA;         a=(num/b);&#xA;         num-=a*b;&#xA;         b/=10;&#xA;         e|=a; e=1;&#xA;         if (e) txt[i]=a+'0';&#xA;         }&#xA;     txt[i]=0;&#xA;     LCD_prntxt(txt);&#xA;     #undef _digits&#xA;     }&#xA; //------------------------------------------------------------------------------------------&#xA; U32 LCD_key()&#xA;     {&#xA;     adc_start(&amp;amp;AVR32_ADC);&#xA;     U32 adc=adc_get_value(&amp;amp;AVR32_ADC,4);&#xA;          if (adc&amp;lt;  0+10) return _LCD_key_right;&#xA;     else if (adc&amp;lt;127+10) return _LCD_key_up;&#xA;     else if (adc&amp;lt;510+10) return _LCD_key_down;&#xA;     else if (adc&amp;lt;896+10) return _LCD_key_left;&#xA;     return _LCD_key_none;&#xA;     }   &#xA; //------------------------------------------------------------------------------------------&#xA; #endif&#xA; //------------------------------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Just ignore the AVR32 stuff and pay attention to waits:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; cpu_delay_ms(x,y); // waits x[ms]&#xA; cpu_delay_us(x,y); // waits x[us]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where first parameter is the time you want to wait and second is CPU clock used. Usage is like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; LCD_init();&#xA;&#xA; LCD_clear();&#xA; LCD_gotoxy(0,0);&#xA; LCD_prntxt(&amp;quot;bla bla&amp;quot;);&#xA; LCD_gotoxy(0,1);&#xA; LCD_prntxt(&amp;quot;bla ...&amp;quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zeros on DB&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Zeros might be most likely due to problem on data bus like missing pull ups or fighting between Arduino and Z80, or wrongly configured Arduino ports or by reading by Arduino at wrong times... So you need to check:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What are the clocks for: Z80 and Arduino (ATMega328P?)?&lt;/li&gt;&#xA;&lt;li&gt;How did you interconnected?&lt;/li&gt;&#xA;&lt;li&gt;How are you getting data from Arduino?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;you have to take in mind the IO data buss is active only for a very short time so you should use External Interrupts on Arduino side for reading. The timing is  like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/d9X0i.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/d9X0i.png&quot; alt=&quot;IO timing&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;so you should sample on falling edge of &lt;code&gt;/IORQ&lt;/code&gt; + some small delay to stabilize &lt;code&gt;/WR&lt;/code&gt;. If you are sampling on rising edge of &lt;code&gt;/IORQ&lt;/code&gt; your Arduino might be too slow and read after the data bus is invalid...&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2020-10-17T15:52:19.943" LastActivityDate="2020-10-17T15:52:19.943" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16587" PostTypeId="1" CreationDate="2020-10-17T18:57:50.797" Score="2" ViewCount="243" Body="&lt;p&gt;I watch a lot of retro game streams. Frequently, whether they are running on a software emulator, hardware emulator (Retron 5 or whatever), or an Everdrive, whenever there is some weird glitch in the game, they always go:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It's probably a corrupted ROM!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Or:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It's probably a bad dump!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They never seem to consider that it might be anything but the actual ROM file.&lt;/p&gt;&#xA;&lt;p&gt;Sometimes, the error goes away if they restart the game, for example reloading it in the Everdrive.&lt;/p&gt;&#xA;&lt;p&gt;Isn't the thought that a ROM, which they clearly got from some kind of ROM dump online, would be &amp;quot;corrupted&amp;quot; or &amp;quot;badly dumped&amp;quot; extremely unlikely? I don't mean that ROMs passed around are always perfect, or &amp;quot;clean&amp;quot;, but I strongly doubt that such incorrect/corrupted files would make it in that context.&lt;/p&gt;&#xA;&lt;p&gt;Why do their assumptions immediately go to a bad ROM file? Isn't that the very last thing they should be suspecting when they see glitches? Wouldn't a bad ROM not load at all, rather than load, but display a bunch of visual artifacts at runtime?&lt;/p&gt;&#xA;" OwnerUserId="19690" LastEditorUserId="19066" LastEditDate="2020-10-17T21:31:54.810" LastActivityDate="2020-10-18T12:02:21.813" Title="How likely is it that a ROM could be &quot;corrupted&quot; resulting in visual artifacts during gameplay?" Tags="&lt;emulation&gt;&lt;rom&gt;" AnswerCount="1" CommentCount="7" ClosedDate="2020-10-17T21:50:09.260" ContentLicense="CC BY-SA 4.0" />
  <row Id="16588" PostTypeId="1" CreationDate="2020-10-17T19:04:57.710" Score="3" ViewCount="260" Body="&lt;p&gt;Years ago, I upgraded my IBM PCjr with a V20 and I was able to run CP/M 2.2. I have been looking for a CP/M 2.2 image that I can run on my current PCjr with 640K and Dual floppy (RACOR expansion). Where can I find a floppy image that I can run? Or, how can I create one?&lt;/p&gt;&#xA;" OwnerUserId="7626" LastActivityDate="2020-10-20T12:32:17.757" Title="How to run CP/M 2.2 on IBM PCjr (Not CP/M-86)" Tags="&lt;ibm-pcjr&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16589" PostTypeId="2" ParentId="16587" CreationDate="2020-10-17T21:10:30.907" Score="5" Body="&lt;p&gt;I can't speak as to why 'they' specifically think it's the case - the most straightforward answer is that they're making a joke, but I can tell you that bad dumps resulting in visual artifacts is very plausible. It doesn't even have to be a bad dump:&lt;/p&gt;&#xA;&lt;p&gt;The Amiga game &lt;em&gt;Pinkie&lt;/em&gt; is spread across three disks, with five worlds you can play in any order. The graphics and scripting necessary to show the ending is on all three disks to save you a disk swap at the end. Due to an oversight during mastering, &lt;a href=&quot;http://superadventuresingaming.blogspot.com/2019/10/pinkie-amiga.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the file containing the background graphics to be used in the ending was misnamed, but only on Disks 2 and 3&lt;/a&gt;. As a result, when you win &lt;em&gt;Pinkie&lt;/em&gt; or cheat to view the ending while on any world other than the first, the ending looks like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2NlCa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2NlCa.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Whereas, if the ending is viewed from Disk 1, the ending looks like this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ebxAh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ebxAh.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The animation itself (not to spoil it) plays as normal regardless. This isn't due to a bad dump, this is the behaviour of the actual, retail disks. &lt;a href=&quot;http://eab.abime.net/showthread.php?t=88278&quot; rel=&quot;nofollow noreferrer&quot;&gt;More information on English Amiga Board.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If an error in a dump or a master is in part of the game that isn't executed or used as part of a branch or calculation, i.e. it's just dumb data that's copied from place to place and displayed or played as sound, then there could be glitchy or discoloured tiles, missing samples, strangely placed enemies, or any number of effects. As discussed &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15575/why-does-amiga-500-reset-when-reading-a-faulty-disk&quot;&gt;in this question about Amiga error handling&lt;/a&gt;, Amiga games sometimes just barrel on through.&lt;/p&gt;&#xA;&lt;p&gt;The standard &lt;a href=&quot;https://plutiedev.com/rom-header&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sega Genesis header&lt;/a&gt; contains a checksum of the game image at $18E, but it isn't verified on boot. If you made a reproduction cartridge of a downloadable game like &lt;a href=&quot;https://bigevilcorporation.itch.io/tanglewood&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Tanglewood&lt;/em&gt;&lt;/a&gt; but for the sake of argument the download was bad or the upload into fooPROM was bad, you could get adverse visual effects playing on hardware, yes. (The Master System BIOS may check before booting though and you'll get &lt;a href=&quot;https://www.smspower.org/forums/17575-SegaMasterSystemSoftwareError#:%7E:text=Software%20error%20means%20the%20BIOS,controller%20and%20the%20cartridge%20slot.&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;SOFTWARE ERROR&lt;/code&gt;&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;On the Commodore 64, depending on your machine condition, tape condition and volume etc., a game like &lt;em&gt;Impossible Mission&lt;/em&gt; can seemingly load just fine from cassette, but may develop errors later in the room layouts preventing you from advancing with invisible walls or intangible floors. Loading a game from cassette tape into memory is very much like making a dump of a cart, except much more unreliable!&lt;/p&gt;&#xA;&lt;p&gt;Cracked Amiga games can be missing levels, deliberately or inadvertently, or be suffering from any number of effects from copy-protection (whether removed, not-removed, partially removed...)&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-10-18T12:02:21.813" LastActivityDate="2020-10-18T12:02:21.813" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16590" PostTypeId="1" AcceptedAnswerId="16592" CreationDate="2020-10-17T23:26:46.110" Score="6" ViewCount="1160" Body="&lt;p&gt;My BASIC is &lt;em&gt;almost&lt;/em&gt; working, the almost being the &lt;code&gt;DEF FN&lt;/code&gt;. Just so I don't paint myself into a corner, is there any &amp;quot;mainstream&amp;quot; BASIC from the 8-bit era that allowed user-defined &lt;strong&gt;string&lt;/strong&gt; functions?&lt;/p&gt;&#xA;&lt;p&gt;I'm mainly using &amp;quot;The Basic Language&amp;quot; from &lt;a href=&quot;https://www.atariarchives.org/basicgames/showpage.php?page=i12&quot; rel=&quot;noreferrer&quot;&gt;BASIC Computer Games&lt;/a&gt; as my guide to the language, and it doesn't really say much on the topic. All use of &lt;code&gt;DEF&lt;/code&gt; in the book is always math. Commodore BASICs definitely don't support string functions, the right-hand-side must be a mathematical expression, and I suspect this is true for most others derived from it.&lt;/p&gt;&#xA;&lt;p&gt;Are there any major 8-bit dialects that supported this - TRS-80, Coco, TI-99, Sinclair, BBC, etc? Not trying to do GW or even MSX, but I would be curious to know if they did.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-10-19T10:01:13.310" Title="Did any 8-bit versions of MS BASIC allow user-defined string functions?" Tags="&lt;basic&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16591" PostTypeId="1" CreationDate="2020-10-17T23:34:46.143" Score="2" ViewCount="198" Body="&lt;p&gt;I'm trying to recall the name of a game I spent too much time playing on my ST. It was a simulation of cold war sub combat. It took place entirely on a map view, where you controlled NATO subs, including British and US I'm not sure if others as well. There was no &amp;quot;internal view&amp;quot; or anything like that, you pointed and clicked on the map to perform operations at a fleet level.&lt;/p&gt;&#xA;&lt;p&gt;One key bit of gameplay I recall was when your US subs had SUBROCs on them and you'd launch and then wait for them to drop into the water right over the enemy while you sent your subs in the opposite direction.&lt;/p&gt;&#xA;&lt;p&gt;It was not Red Storm Rising, 688 or any of the other &amp;quot;common&amp;quot; ones. Nor was it Harpoon, although it felt more like that that any of the others I can find.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-10-17T23:34:46.143" Title="Cold war submarine game for the ST" Tags="&lt;identify-this-game&gt;&lt;atari-st&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16592" PostTypeId="2" ParentId="16590" CreationDate="2020-10-18T00:37:16.253" Score="11" Body="&lt;p&gt;BBC BASIC does. Example from the manual:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;100 DEF FNMID(A$)&#xA;110 LOCAL L&#xA;120 L=LEN(A$)&#xA;140 =MID$(A$,L/2,1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="637" LastEditorUserId="1981" LastEditDate="2020-10-18T11:20:42.313" LastActivityDate="2020-10-18T11:20:42.313" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="16593" PostTypeId="2" ParentId="16590" CreationDate="2020-10-18T15:21:25.040" Score="5" Body="&lt;p&gt;Locomotive BASIC &lt;em&gt;does&lt;/em&gt; support string functions (as do MSX BASIC 1.0 and BASIC-80 Rev. 5.2):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 DEF FNa(x)=x/2&#xA;20 DEF FNb$(a$)=LEFT$(a$,1)&#xA;30 PRINT FNa(10)&#xA;40 PRINT FNb$(&amp;quot;phweeen&amp;quot;)&#xA;Ready&#xA;run&#xA; 5&#xA;p&#xA;Ready&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2020-10-18T18:37:04.673" LastActivityDate="2020-10-18T18:37:04.673" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16595" PostTypeId="1" CreationDate="2020-10-19T01:04:12.483" Score="0" ViewCount="249" Body="&lt;p&gt;Does anyone have actual documentation on how MS/Commodore BASIC handles line wrapping in PRINT statements?&lt;/p&gt;&#xA;&lt;p&gt;I tried this in an online emulator:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PRINT 1,2,3,4,5,6,7,8,9,0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In this case it wraps at the 40-column mark (or thereabouts) so the 5 appears under the 1 in column 2. But as the tab width is 10 characters that might just be luck. So;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PRINT 1,2,3,4;5;6;7;8;9;10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;...wraps between the 6 and 7 and the 7 ends up in column 1. This seems to imply it doesn't simply reset the cursor to column 1 when it passes the 40 mark. I tried longer versions too, and it doesn't seem there's any logical line length - I thought it was 80 but it seemed to just keep going.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know the rules here?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-10-22T11:01:22.850" Title="Behaviour of commas in PRINT at a line-end" Tags="&lt;commodore-64&gt;&lt;basic&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16597" PostTypeId="2" ParentId="16595" CreationDate="2020-10-19T09:01:28.160" Score="0" Body="&lt;p&gt;In MS-BASIC&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a comma advances the cursor to the begin of the next tab 'field'.&lt;/li&gt;&#xA;&lt;li&gt;Size of tab fields is implementation depended&lt;/li&gt;&#xA;&lt;li&gt;Size is &lt;em&gt;usually&lt;/em&gt; a divisor of line length (*1).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;It doesn't matter as tab field and line length are synchronized anyway.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Now, in a more basic way, BASIC does not have an assumption of line length at all (*2). It's pretty deeeeeevice agnostic in this and leaves decisions about automatic wrap (or not) to output devices. Well, or program control that is.&lt;/p&gt;&#xA;&lt;p&gt;Commata, like semi colons, do only structure within a line. So, as adaptors of MS BASIC did, choosing a sensible value helps quite on line length deprivated devices is a good idea.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - For example 10 on a 40 character per line PET, 11 on a 22 cpl VIC20 or 8 on a 40/80 cpl Apple II&lt;/p&gt;&#xA;&lt;p&gt;*2 - An exception here is Commodore BASIC, or more exact its screen editor, as it does manage logical lines that can spread over multiple screen lines. But as such it's not part of BASIC, but a Commodore specific device/editor handling.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-20T09:41:29.057" LastActivityDate="2020-10-20T09:41:29.057" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16598" PostTypeId="2" ParentId="16590" CreationDate="2020-10-19T10:01:13.310" Score="2" Body="&lt;p&gt;TI-99/4A definitely did. It had DEF for numeric and string functions, in normal TI-Basic and in TI-Extended Basic.&#xA;Excerpt from the User manual.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DEFine &#xA;&#xA;    { numeric-function-name |(parameter)| = numeric-expression } &#xA;DEF { string-functlon-name|(parameter)| = string$-expresslon }&#xA;&#xA;The DEFine statement allows you to define your own functions to use within a program.&#xA;The function-name you specify may be any valid variable name. If you specify a &#xA;parameter following the function-name. the parameter must be enclosed in parentheses&#xA;and may be any valid variable name. Note that if the expression you specify evaluates&#xA;to a string result. the (unction-name you use must be string variable name (i.e .. &#xA;the last character must be a dollar sign. $). &#xA;[..]&#xA;User·s Reference Guide &#xA;Examples: &#xA;&amp;gt;NEW &#xA;&amp;gt;100 REM TAKE A NAME AND PRINT IT BACKWARDS &#xA;&amp;gt;110 DEF BACK$(Xl=SEG$(NAME$ , x, 1 ) &#xA;&amp;gt;120 INPUT &amp;quot;NAME? &amp;quot;:NAME$ &#xA;&amp;gt;130 FOR I=LEN(NAME$) TO 1 STEP -1 &#xA;&amp;gt;140 BNAME$=BNAME$&amp;amp;BACK$(I) &#xA;&amp;gt;150 NEXT I&#xA;&amp;gt;160 PRINT NAME$: BNAMES &#xA;&amp;gt;170 END &#xA;&amp;gt;RUN &#xA;NAME? ROBOT &#xA;ROBOT &#xA;TOBOR &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;** DONE **&lt;/p&gt;&#xA;" OwnerUserId="7095" LastActivityDate="2020-10-19T10:01:13.310" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16599" PostTypeId="2" ParentId="13975" CreationDate="2020-10-19T10:02:42.407" Score="1" Body="&lt;p&gt;You answered your own question, the 6809 assembler would take the 6800 instructions and replace them with a code fragment that generates the same result.&#xA;As for interfering with other programs, that would be somewhat unlikely.  The computers I used in that era typically ran only one piece of user code at a time.  In addition, the memory limits of the day would tend to require every program to start at the same memory address.&#xA;Going beyond your question, it would generally not be good coding practice to hard code addresses into your software.  You would use the label feature in the assembler so that code changes would adapt.  This would resemble the use of line numbers in older BASIC interpreters, and the recommendation to number lines by 10's.&lt;/p&gt;&#xA;" OwnerUserId="19704" LastActivityDate="2020-10-19T10:02:42.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16602" PostTypeId="1" CreationDate="2020-10-19T15:06:55.573" Score="2" ViewCount="1085" Body="&lt;p&gt;If I hex-edit an EXE for DOS or Windows, by adding or removing some text for example, it will no longer run.&lt;/p&gt;&#xA;&lt;p&gt;If I just change a single char around to a different one, it may run.&lt;/p&gt;&#xA;&lt;p&gt;Is this some anti-tampering mechanism built into the EXE itself, or by MS-DOS/Windows? Does it have some kind of built-in checksum baked into it which must match for it to run, so that additions and removals cannot be done (easily)? And that's why it works (sometimes) if I just &lt;em&gt;change&lt;/em&gt; &amp;quot;moo&amp;quot; to &amp;quot;foo&amp;quot;, for example (same number of chars)?&lt;/p&gt;&#xA;&lt;p&gt;And is this the same on all platforms? Or unique for DOS/Windows?&lt;/p&gt;&#xA;" OwnerUserId="19706" LastActivityDate="2020-10-20T06:33:48.523" Title="Why does changing a DOS/Windows EXE cause it to not run?" Tags="&lt;ms-dos&gt;&lt;ibm-pc&gt;&lt;windows&gt;&lt;copy-protection&gt;&lt;executables&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ClosedDate="2020-10-20T07:06:34.290" ContentLicense="CC BY-SA 4.0" />
  <row Id="16603" PostTypeId="2" ParentId="16602" CreationDate="2020-10-19T15:22:38.500" Score="13" Body="&lt;p&gt;If you change the lengths of strings in a binary, or indeed move any part of a binary around in any way, then you’re likely to break it: offsets to the data (and code) that the program expects to find are stored in the binary, and won’t be adjusted when you alter it.&lt;/p&gt;&#xA;&lt;p&gt;Thus changing text (or anything else, including code) while preserving the lengths is possible, but anything else is more complex.&lt;/p&gt;&#xA;&lt;p&gt;EXE files using the MZ header (starting with &lt;code&gt;MZ&lt;/code&gt;) have a checksum at offset 12h, but DOS doesn’t check it as far as I know. Some programs do their own checksumming as a way of resisting tampering, but causing that to fail should produce obvious results (except with some games...).&lt;/p&gt;&#xA;&lt;p&gt;Some strings in Windows files can be modified without breaking the program, using a resource editor: the editor will know how to update everything needed for the program to find its updated resources. Other features of Windows files are also typically represented using resources, and can be modified too: icons, bitmaps...&lt;/p&gt;&#xA;&lt;p&gt;The general constraint on changing binaries isn’t limited to DOS and Windows, it’s quite general: you can’t open a binary in a hex editor, move parts around and expect it to work.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-10-19T16:17:06.753" LastActivityDate="2020-10-19T16:17:06.753" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16604" PostTypeId="2" ParentId="16602" CreationDate="2020-10-19T15:24:42.073" Score="7" Body="&lt;p&gt;Adding or removing some text has the effect that things coming later in the EXE file are now found at a different absolute location, machine code as well as the EXE file format rely a lot on absolute locations.&lt;/p&gt;&#xA;&lt;p&gt;So, it's important to keep the exact same byte length of the file. So, replacing characters is mostly safe (if you're sure that the bytes are really meant to represent user-interface text). Replacing text with a shorter version might work if you pad it at the end with 00 bytes (but that depends on the source language: e.g. with C it's okay, with Pascal it's likely to fail). Replacing text with a longer version is impossible.&lt;/p&gt;&#xA;&lt;p&gt;It has nothing to do with checksums. If it were a checksum or similar, then even changing a single character e.g. from &amp;quot;moo&amp;quot; to &amp;quot;foo&amp;quot; would also reject the program.&lt;/p&gt;&#xA;&lt;p&gt;Modifying a program that you only have in binary form (like EXE file) is a time-consuming and error-prone task. For any change beyond the most simple text changes, it might be easier to rewrite the program from scratch.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2020-10-19T15:24:42.073" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16605" PostTypeId="2" ParentId="16577" CreationDate="2020-10-19T17:48:16.817" Score="4" Body="&lt;p&gt;While many of the performance capabilities of modern desktop processors intended to run multi-tasking operating systems are somewhat &lt;em&gt;wasted&lt;/em&gt; in a real time context, they are not actually impediments.&lt;/p&gt;&#xA;&lt;p&gt;A soundly designed real time operating system uses hardware timers for the precise timing needs in terms of scheduling when code runs.  Desktop operating systems typically have trouble performing to the true capability of the hardware, though there are various strategies for altering scheduling to prioritize certain tasks; at an extreme, a hard realtime schedular can own the actual hardware, and run the kernel of a conventional multi-tasking operating system as its lowest priority task.  Most of the &lt;em&gt;software architecture&lt;/em&gt; problems inherent in using commodity desktop hardware for real time control are thus solvable.  Ad&lt;/p&gt;&#xA;&lt;p&gt;However, most modern commodity computer boards are ill-suited for realtime control for another reason: &lt;strong&gt;the lack of low-latency I/O&lt;/strong&gt;, at least in any easily interfaced form.  Once local-bus I/O channels like true parallel ports were replace by things proxied through multiple levels of protocol indirection (USB being the notorious case) it became far harder for even carefully engineering code to interact with the external world in a timely fashion.&lt;/p&gt;&#xA;&lt;p&gt;What's fundamentally different about a modern ARM SoC or MCU that is suitable for real time applications, vs a typical x86 desktop platform that is not, is the provision of simple I/O schemes directly from the processor, eg, memory-mapped GPIOs, hardware timers with input/output channels, etc.  Nothing says that a part with a computational architecture in the x86 tradition could not have these (and indeed, from time to time vendors try an offering...) but these tend to lose in the marketplace, both to the flash-based ARM parts suitable for small problems, and the more tablet/router-class ARM/MIPS/etc SoC's used for larger ones.&lt;/p&gt;&#xA;&lt;p&gt;Typically what this all points to is the use of an distinct processor for real time tasks.  Some modern control-oriented SoC's even include one right on chip; in the PC world the existence of I/O copressors goes right back to the start and far simpler problems, eg, the original IBM PC has an early MCU on it simply to deal with the keyboard interface (and another in the keyboard) and the presence of additional processor continues to this day.  In the control realm, it's common to see things like a 3d printer which has a realtime G-code interpreter running in a small flash based MCU, and then a larger platform like PC or raspberry pi (or an ESP8266 talking to an Android tablet) which then provides a user interface and drip-feeds stored programs just ahead of need.  This not only solves the I/O latency problem, it also simplifies software by having the real-time and non-real-time code run on entirely separate computational engines, rather than having to fight over a single execution core.&lt;/p&gt;&#xA;" OwnerUserId="1874" LastEditorUserId="1874" LastEditDate="2020-10-19T17:53:57.483" LastActivityDate="2020-10-19T17:53:57.483" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16606" PostTypeId="1" AcceptedAnswerId="16608" CreationDate="2020-10-19T18:07:55.473" Score="2" ViewCount="143" Body="&lt;p&gt;Is there a way to limit Fast RAM used by Amiga OS 3.1, i.e. if A500 with 030 MMU detects full 64MB in address ranges 0x40000000 to 0x44000000. Instead, can I choose to map only 8MB in lower ranges at system boot?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-10-19T19:31:32.690" Title="How to limit RAM available to Workbench" Tags="&lt;hardware&gt;&lt;memory&gt;&lt;amiga-500&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16607" PostTypeId="2" ParentId="16606" CreationDate="2020-10-19T18:41:23.243" Score="0" Body="&lt;p&gt;It's generally not possible to do this. Memory boards will add their memory into the OS during power-on using Amiga AutoConfig or a similar mechanism. Changing the memory configuration after boot is difficult if not impossible as the OS and apps may already be using some of that memory.&lt;/p&gt;&#xA;" OwnerUserId="149" LastEditorUserId="3316" LastEditDate="2020-10-19T19:31:32.690" LastActivityDate="2020-10-19T19:31:32.690" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16608" PostTypeId="2" ParentId="16606" CreationDate="2020-10-19T19:29:38.460" Score="2" Body="&lt;p&gt;You can create a small C or assembly program which performs an &lt;code&gt;AllocAbs&lt;/code&gt; call (with location &amp;amp; size parameters), to reserve absolute memory and put it first thing in your startup sequence.&lt;/p&gt;&#xA;&lt;p&gt;If it succeeds, it blocks the memory you've allocated at the chosen address.&lt;/p&gt;&#xA;&lt;p&gt;Oh you don't even have to write it as it already exists:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://aminet.net/package/util/boot/blockmem11&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://aminet.net/package/util/boot/blockmem11&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Blockmem is a small utility which takes two memory addresses, and&#xA;allocates all of the memory between them, preventing the system (and&#xA;OS friendly programs) from using that area of memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;it was designed to prevent the OS from using faulty memory, but you can use it for whatever you want.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2020-10-19T19:29:38.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16609" PostTypeId="1" CreationDate="2020-10-19T23:55:13.300" Score="4" ViewCount="854" Body="&lt;p&gt;I'm reading here: &lt;a href=&quot;https://polymega.com/faq/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://polymega.com/faq/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;WILL EVERDRIVES, GAME GENIES AND MULTI-GAME CARTS WORK WITH POLYMEGA™?&lt;/p&gt;&#xA;&lt;p&gt;Polymega™ does not support Game Genies or Everdrives.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;How is that possible? What's there to &amp;quot;support&amp;quot;? An Everdrive is just a cartridge which looks to the console just like any cartridge, is it not? Is it actively (somehow) detecting this and blocking it, or what do they mean?&lt;/p&gt;&#xA;" OwnerUserId="19709" LastEditorUserId="15334" LastEditDate="2021-02-15T15:01:37.787" LastActivityDate="2021-02-15T15:01:37.787" Title="How is it possible that this &quot;Polymega™&quot; console will &quot;not support&quot; Everdrives?" Tags="&lt;emulation&gt;&lt;game-cartridge&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16610" PostTypeId="2" ParentId="16609" CreationDate="2020-10-20T00:40:16.827" Score="15" Body="&lt;p&gt;You're asking us to speculate about something that hasn't been released yet.&lt;/p&gt;&#xA;&lt;p&gt;However, looking at the FAQ, it's clear that this is just a fancy Linux box with some emulators on it.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Processor: Intel Coffee Lake S Series Processor&lt;/p&gt;&#xA;&lt;p&gt;Memory: 2GB DDR4 RAM&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Polymega’s Modules use top tier emulators with low latency controller inputs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Emulators: Legally licensed versions of Mednafen, Mesen, Kega Fusion, and MAME with additional bug fixes, CD BIOS development, and replaced YM2610 for Neo Geo CD from Playmaji.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;From their marketing text and FAQ, it's clear they want you to copy your cartridges into the internal storage (or buy them from whatever partner they've rustled up) and play them from there.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ouya&quot; rel=&quot;noreferrer&quot;&gt;It's a faster Ouya, in other words.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So how would it 'support' existing cartridges?&lt;/p&gt;&#xA;&lt;p&gt;To play existing cartridges in an emulator, they first have to be dumped into RAM. To do this, the makers have to devise an interface that's compatible with the cartridges only to the extent that the contents of their ROM can be read. For Genesis games, this can be as simple as reading the mask ROM in one linear block. For Game Boy and Master System games, this involves negotiation with the mapper chip. This stage can be implemented relatively easily for most consoles.&lt;/p&gt;&#xA;&lt;p&gt;To the end user, they put in a cart and then play the game. It's transparent to them: it feels like a console, and so they'd be satisfied. The cartridge slot is almost certainly not used at all during regular gameplay on this system.*&lt;/p&gt;&#xA;&lt;p&gt;The important distinction is that the reading interface doesn't have to be particularly fast. To run a game directly from a cartridge requires accessing the data and acting upon it in real-time. To dump a cartridge can be done leisurely.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sub&gt;* Reading and writing the save RAM on a cart could be somewhat straightforward, though would need to be tested on a game-by-game basis since it's not homogeneous (at least on Genesis). Impressive if they bother. :)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;How does being an emulator 'stop' Game Genies and Everdrives working?&lt;/p&gt;&#xA;&lt;p&gt;Everdrives, Game Raccoons, etc. interface with external hardware like (micro/)SD cards themselves, and have quirks beyond the standard Nintendo/Sega interface that aren't emulated in most emulators - Flash memory bankswitching, etc. If makers of this Linux console haven't programmed support in for these, it doesn't exist. It doesn't come for free. And support in this case would be some kind of bidirectional software passthrough from the emulated Everdrive menu to the real cart...? Why bother?&lt;/p&gt;&#xA;&lt;p&gt;If this was a hardware-based console, using FPGA or real chips, it could reproduce the exact bus interface and timing, you'd have compatibility with save RAM, enhancement chips, Game Boy Camera, real-time clocks and the like through that interface. The situation is very similar to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16263/how-does-the-everdrive-handle-all-the-special-chips-and-stuff-that-were-put-in-c?rq=1&quot;&gt;&amp;quot;How does the Everdrive handle all the special chips and stuff that were put in cartridges?&amp;quot;&lt;/a&gt;, except reversed: the ersatz console would have to correctly talk to all the real enhancement chips.&lt;/p&gt;&#xA;&lt;p&gt;There'd be little reason for the makers of that Linux emulator-based console to support any of this, given their stated monetising approach.&lt;/p&gt;&#xA;&lt;p&gt;It's much more likely they'll support a &lt;em&gt;simulated&lt;/em&gt; Game Genie on their &lt;em&gt;emulated&lt;/em&gt; console, since cheat support will come as standard in the emulator set they've taken, but that's all.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-10-20T17:21:52.860" LastActivityDate="2020-10-20T17:21:52.860" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16612" PostTypeId="2" ParentId="16575" CreationDate="2020-10-20T09:04:04.043" Score="3" Body="&lt;p&gt;&lt;a href=&quot;http://vitaly_filatov.tripod.com/ng/asm/asm_024.9.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;INT 13h / AL=8&lt;/a&gt;, when called with DL &amp;gt;= 80h, will return the number of hard drives in DL. On many systems (but not the original PC or XT) it will do the same for floppy drives if called with DL &amp;lt; 80h.&lt;/p&gt;&#xA;&lt;p&gt;The number of floppy drives configured can also be determined using &lt;a href=&quot;http://vitaly_filatov.tripod.com/ng/asm/asm_001.9.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;INT 11h&lt;/a&gt;. If bit 0 of AX is 0 there are no floppy drives; otherwise bits 7 and 6 give the count of floppy drives, minus 1. This is supported on the original PC and XT (where it returns the motherboard DIP switch settings), as well as subsequent systems.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2020-10-20T09:04:04.043" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16613" PostTypeId="2" ParentId="16588" CreationDate="2020-10-20T10:49:28.880" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Years ago, I upgraded my IBM PCjr with a V20 and I was able to run CP/M 2.2.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Are you sure you were really running a CP/M 2.2 on that machine? Or was it rather that you could run CP/M 2.2 applications, maybe in a CP/M like shell?&lt;/p&gt;&#xA;&lt;p&gt;I'm asking, as I'm not aware that anyone ever has gone the length to write a CP/M BIOS layer for 2.2 for the IBM PC(jr). All I ever seen were various emulation layers to alow CP/M 2.2 programs to run on V20/V30 equipped PC under MS-DOS.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I have been looking for a CP/M 2.2 image that I can run on my current PCjr with 640K and Dual floppy (RACOR expansion).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I would be quite surprised if such exists.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or, how can I create one?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Either by downloading one of the emulation layers, or writing one yourself. It's a rather easy task suitable even for beginners (basic knowledge given). After all, MS-DOS is virtually clone of CP/M 2.2 - at least for DOS 1.x - with direct equivalents for all BDOS calls.&lt;/p&gt;&#xA;&lt;p&gt;This reduces the task to write a CP/M style loader for:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Allocating 64 KiB of memory&lt;/li&gt;&#xA;&lt;li&gt;Moving the emulation stub somewhere at the end&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Considering of&#xA;&lt;ul&gt;&#xA;&lt;li&gt;backswitch to 8086 mode&lt;/li&gt;&#xA;&lt;li&gt;Call of translation code and&lt;/li&gt;&#xA;&lt;li&gt;switch to 8080 mode again&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;as well as BIOS entry points (only if you want to be perfect)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Preparing the &lt;a href=&quot;https://en.wikipedia.org/wiki/Zero_page_(CP/M)&quot; rel=&quot;nofollow noreferrer&quot;&gt;CP/M Zeropage&lt;/a&gt;, especially with&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Emulation stub addresses for&#xA;&lt;ul&gt;&#xA;&lt;li&gt;for BDOS entry&lt;/li&gt;&#xA;&lt;li&gt;Program Exit&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Default FCB setup&lt;/li&gt;&#xA;&lt;li&gt;Command line parameters&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Loading the CP/M binary to 0100h&lt;/li&gt;&#xA;&lt;li&gt;Starting emulation at 0100h&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Like the loader, the main part of the emulation layer will be outside the 8080's virtual address space and consist mainly of stubs for each BDOS (and if needed BIOS) call into MS-DOS calls. For next to all this is simply about moving some register values. And maybe a few data fields. Heck, even the call numbers are alost the same :)&lt;/p&gt;&#xA;&lt;p&gt;Such a setup is not only way less work than writing a CP/M BIOS, it does allow almost seamless integration as well - using CP/M programs like DOS without any booting or switching. Even within multiprocessing environments.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-20T12:32:17.757" LastActivityDate="2020-10-20T12:32:17.757" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16614" PostTypeId="2" ParentId="16609" CreationDate="2020-10-20T11:52:41.887" Score="4" Body="&lt;p&gt;You seen to be confusing the concept of &amp;quot;works&amp;quot; and &amp;quot;supports&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Supported&amp;quot; generally means that the vendor is willing to address any problems that arise.&lt;/p&gt;&#xA;&lt;p&gt;Code I write may appear to &amp;quot;work&amp;quot; in certain situations, but that doesn't mean I must &amp;quot;support&amp;quot; those situations - generally because I lack the capacity to reproduce any problems that you may encounter, or haven't adequately tested that environment, and thus I cannot possibly say I &amp;quot;support&amp;quot; them.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-10-20T11:52:41.887" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16615" PostTypeId="2" ParentId="16595" CreationDate="2020-10-20T18:25:57.513" Score="1" Body="&lt;p&gt;When I implemented this in my MS-BASIC alike I ended up using 14 characters as the comma field and keeping track of where I was on the line and then padding to the next 14 characters. I think I tested this on either a 4K or 8K MS basic and that was the &amp;quot;best&amp;quot; result I could come up with on a system without an defined screen size. I suspect this was chosen originally as an ASR33 has 72 characters across and 14 characters gives 5 &amp;quot;fields&amp;quot; for a comma separation with a total width of 70.&lt;/p&gt;&#xA;&lt;p&gt;From the later CP/M basics have a WIDTH command which sets where the internal wrap point is. The manual for MBASIC-80 notes the default value (and wrap point) is 72 characters.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/BASIC-80_MBASIC_Reference_Manual/page/n101/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/details/BASIC-80_MBASIC_Reference_Manual/page/n101/mode/2up&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Having just had a look at the code I wrote it forces a newline if the comma position is greater than the line width (current position starts at 0 and is incremented as each character is printed).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;public void NextComma()&#xA;{&#xA;    // Originally commas are split in to 14 character cells&#xA;    // which makes sense where width is 72.&#xA;    var newPosition = ((_currentPosition / CommaCellWidth) + 1) * CommaCellWidth;&#xA;    if ((newPosition + CommaCellWidth) &amp;gt;= _teletype.Width)&#xA;    {&#xA;        NewLine();&#xA;    }&#xA;    else&#xA;    {&#xA;        Tab((short)(newPosition + 1));&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2020-10-22T11:01:22.850" LastActivityDate="2020-10-22T11:01:22.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16616" PostTypeId="2" ParentId="4843" CreationDate="2020-10-20T19:36:32.367" Score="3" Body="&lt;p&gt;There was one Spectrum that had two 64K x 4 bit memory chips, but wasn't from Sinclair. It was the Inves Spectrum+, a clone manufactured in Spain. It had no contention, and the trick to achieve it was to make the ULA to do one read per clock cycle, and read the same data twice. Since the Z80 reads, at most, one byte per three clocks, this guarantees that the ULA can read the two bytes that it needs for each screen block.&lt;/p&gt;&#xA;&lt;p&gt;Here you have a more detailed explanation (in spanish, sorry) &lt;a href=&quot;http://www.zxprojects.com/inves/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.zxprojects.com/inves/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Also, here is the author of that article explaining it in english &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7655/a-different-way-to-share-the-memory-bus-between-the-cpu-and-the-video&quot;&gt;A different way to share the memory bus between the CPU and the Video&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19713" LastActivityDate="2020-10-20T19:36:32.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16617" PostTypeId="1" AcceptedAnswerId="16885" CreationDate="2020-10-20T19:51:47.403" Score="10" ViewCount="285" Body="&lt;p&gt;The TO-220 packaged VR1 regulator and Q1 transistor in the Commodore 64 motherboard (reference designators cited here from the Rev. B breadbin) are mounted in a way that suggests they were supposed to be tied down to the PCB to thermally couple the metal tab of the package to the PCB.&lt;/p&gt;&#xA;&lt;p&gt;The legs are bent, there is a significant area of metal from the PCB exposed with no solder mask below the package, and holes are drilled to match the hole in the package's metal tab.&lt;/p&gt;&#xA;&lt;p&gt;Yet, these components are not mounted onto these areas with thermal paste and screws, just bent over, barely or almost touching the PCB, as seen on the images from assy 250425 below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/C5TSd.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C5TSd.jpg&quot; alt=&quot;VR1&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/u9FBx.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/u9FBx.jpg&quot; alt=&quot;Q1&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Commodore were renowned for their cost reduction measures - is this likely to be an instance of those, having found the cooling to be sufficient without screwing the packages down, or is there a likely engineering reason, e.g. to get more airflow around the packages?&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-10-20T21:38:00.320" LastActivityDate="2020-11-12T22:45:59.010" Title="Rationale for almost heatsunk TO-220 packages on C64 motherboard" Tags="&lt;commodore-64&gt;&lt;motherboard&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16618" PostTypeId="2" ParentId="16221" CreationDate="2020-10-20T21:41:25.063" Score="5" Body="&lt;p&gt;I figured out how to unpack the installer I mentioned in question's comments and figured out how to launch NDS. You can grab it &lt;a href=&quot;https://drive.google.com/file/d/1PkkydZardCG1pPJg4gFWHATL2PJVSWjs/view?usp=sharing&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. To start (on Linux - for Windows you might need to use different directory separators), go to &lt;code&gt;MIDP_Products/NDSforJ2ME/core&lt;/code&gt; in command line and run &lt;code&gt;java -classpath ./NDS_MIDPToolSet.jar:./jhall.jar com.nokia.phone.tools.midp.ui.StandAlone ./modules ./lib&lt;/code&gt;. It wants to have older Java version (1.4.1) and throws some IOException at startup, but actually launches.&lt;/p&gt;&#xA;&lt;p&gt;Since this is as far from proper install as it can get, some extra steps will be necessary to get everything working as expected (for example both bundled emulators fail to run anything because of some error with MIDI and you might have to set permissions on executables yourself).&lt;/p&gt;&#xA;&lt;p&gt;I didn't have much time to tinker with it more, but if I do, I will update this answer.&lt;/p&gt;&#xA;" OwnerUserId="156" LastActivityDate="2020-10-20T21:41:25.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16619" PostTypeId="1" AcceptedAnswerId="16620" CreationDate="2020-10-21T02:22:16.113" Score="51" ViewCount="5834" Body="&lt;p&gt;In honor of today's landing of and sample collection by the &lt;a href=&quot;https://en.wikipedia.org/wiki/OSIRIS-REx&quot; rel=&quot;noreferrer&quot;&gt;OSIRIS-REx&lt;/a&gt; spacecraft on the &lt;a href=&quot;https://en.wikipedia.org/wiki/101955_Bennu&quot; rel=&quot;noreferrer&quot;&gt;asteroid Bennu&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;How did the arcade game &lt;em&gt;Asteroids&lt;/em&gt; detect collisions between the screen objects&lt;/strong&gt; (player's ship, asteroids, enemy saucers, shots) &lt;strong&gt;?&lt;/strong&gt;  Was it a rectangular bounding box?  Bounding circle?  Intersection of line segments?  Other?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iLYHw.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iLYHw.jpg&quot; alt=&quot;asteroids screenshot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-10-21T19:06:55.383" Title="How was collision detection done on the Asteroids arcade game?" Tags="&lt;programming&gt;&lt;atari&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16620" PostTypeId="2" ParentId="16619" CreationDate="2020-10-21T07:53:04.790" Score="53" Body="&lt;p&gt;it seems to be a simple bounding box check, as shown here from &lt;a href=&quot;https://www.nicholasmikstas.com/asteroids-program-rom&quot; rel=&quot;noreferrer&quot;&gt;6502 code disassembly&lt;/a&gt;, collision check between ship and saucer&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;HitDetShip:&#xA;L6A63:  CPX #$01                ;Is object 1 not the player's ship?&#xA;L6A65:  BCS HitDetSaucer        ;If not, branch.&#xA;&#xA;L6A67:  ADC #$1C                ;Ship hit box 42+28 = 70 X 70 from center.&#xA;&#xA;HitDetSaucer:&#xA;L6A69:  BNE CheckObjHit         ;Is object a saucer? If not, branch.&#xA;&#xA;L6A6B:  ADC #$12                ;Small saucer hit box 42+18 = 60 X 60 from center.&#xA;L6A6D:  LDX ScrStatus           ;&#xA;&#xA;L6A70:  DEX                     ;Is the object a small saucer?&#xA;L6A71:  BEQ HitDetFinishScr     ;If so, branch.&#xA;&#xA;L6A73:  ADC #$12                ;Large saucer hit box 42+18+18 = 78 X 78 from center.&#xA;&#xA;HitDetFinishScr:&#xA;L6A75:  LDX #$01                ;Reload object 1 as a saucer.&#xA;&#xA;CheckObjHit:&#xA;L6A77:  CMP ObjXDiff            ;Is object 1 X difference smaller than the hit box?&#xA;L6A79:  BCC HitDetNextObj2_     ;If not, no hit detected. Branch to check next object.&#xA;&#xA;L6A7B:  CMP ObjYDiff            ;Is object 1 Y difference smaller than the hit box?&#xA;L6A7D:  BCC HitDetNextObj2_     ;If not, no hit detected. Branch to check next object.&#xA;&#xA;HitDetPart3:&#xA;L6A7F:  STA ObjHitBox           ;Store hit box value.&#xA;L6A81:  LSR                     ;/2.&#xA;L6A82:  CLC                     ;Add two hit box values together.&#xA;L6A83:  ADC ObjHitBox           ;Hit box value is now 1.5 X value set above, about sqrt(2).&#xA;L6A85:  STA ObjHitBox           ;This has the effect of making the hit box more circular.&#xA;&#xA;L6A87:  LDA ObjYDiff            ;Add the two difference values together.&#xA;L6A89:  ADC ObjXDiff            ;If it causes a carry, The distance is too great.&#xA;L6A8B:  BCS HitDetNextObj2_     ;Branch to move to next object.&#xA;&#xA;L6A8D:  CMP ObjHitBox           ;Is combined difference values grater than the hit box?&#xA;L6A8F:  BCS HitDetNextObj2_     ;If so, branch to move to the next object.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I suppose that any other collision check would be too expensive:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(square) distance computation needs multiplication. We know that it's not natively supported by 8-bit chips like 6502, and if implemented by software is extremely costly cycle-wise&lt;/li&gt;&#xA;&lt;li&gt;segments collision need a lot more computation, also including multiplication&lt;/li&gt;&#xA;&lt;li&gt;I thought that the game used a shadowed/logical screen that is updated in the background to perform quick lookups (ex: 0 for void, 1 for ship, 2 for saucer, 3 for asteroid), but that wasn't the case (this technique is good but consumes a lot of memory or you have to reduce accuracy, then you have to recompute logical X/Y from real X/Y and use bit/masks, so it's costly if you don't have the memory)&lt;/li&gt;&#xA;&lt;li&gt;game has a &lt;a href=&quot;https://www.computerarcheology.com/Arcade/Asteroids/DVG.html&quot; rel=&quot;noreferrer&quot;&gt;vector hardware display&lt;/a&gt;, but you can't access to this buffer once drawn or check line intersections with this hardware.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So back to the old bounding box method. The trick is to make bounding boxes smaller than the actual displayed object. Players never complain about collision &amp;quot;bugs&amp;quot; when they get to survive because of them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Notes: Sorry for my back-and-forth versions. I first thought that the game used bounding boxes (which was right), but relied on a code that used to compute relative positions of saucer/ship, so it was unrelated. Then I thought the game used a logical backbuffer but that would have cost too much in memory to have good accuracy, then back to square one, good old boxes&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-10-21T19:06:55.383" LastActivityDate="2020-10-21T19:06:55.383" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16621" PostTypeId="1" AcceptedAnswerId="16622" CreationDate="2020-10-21T16:22:09.927" Score="6" ViewCount="251" Body="&lt;p&gt;I'm working on my ultimate CDTV setup, few hiccups along the way with CDROM access on TF536, but we will cross this bridge. As of right now I'm only missing and internet access, before I can finally close the lid and put it to it's place (constantly swapping SD card between PC and CDTV).&lt;/p&gt;&#xA;&lt;p&gt;What would be the easiest way for me to have access to aminet? PC doesn't have rs232, so I guess null modem cable is out of question. Should I just buy one of these wifi dongles that connect to rs232 at the back?&lt;/p&gt;&#xA;&lt;p&gt;Or would it make sense to buy &lt;a href=&quot;https://www.arananet.net/pedidos/product/ultimate-cdtv-video-board-sd-spi-reader/&quot; rel=&quot;noreferrer&quot;&gt;this board&lt;/a&gt; and hope to get WiFi working (killing 2 birds with one stone)&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-10-21T17:44:54.323" Title="What is the easiest way to get an Amiga online?" Tags="&lt;internet&gt;&lt;modem&gt;&lt;amiga-cdtv&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16622" PostTypeId="2" ParentId="16621" CreationDate="2020-10-21T17:44:54.323" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What would be the easiest way for me to have access to aminet?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Serial.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;PC doesn't have rs232, so I guess null modem cable is out of question.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;With some USB/Serial it's easy back on. They are usually rather cheap&lt;/p&gt;&#xA;&lt;p&gt;... and easy to hack, so some rewiring will make the nullmodem obsolete again :)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Should I just buy one of these wifi dongles that connect to rs232 at the back?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Huh? Seams like a bit of overkill.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or would it make sense to buy this board and hope to get WiFi working (killing 2 birds with one stone)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Unless you need it, I'd rather suggest to take an approach that does exactly what needed - less ways to screw it.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-10-21T17:44:54.323" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16623" PostTypeId="1" CreationDate="2020-10-21T22:44:54.503" Score="20" ViewCount="5631" Body="&lt;p&gt;Seeing &lt;a href=&quot;https://worldbuilding.stackexchange.com/q/188405/40033&quot;&gt;Moon base internet functionality&lt;/a&gt; in Worldbuilding reminded me of how I began an old Space SE question &lt;a href=&quot;https://space.stackexchange.com/q/15539/12102&quot;&gt;Are there discussions or plans for extending the internet into space beyond Earth?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Many years ago I remember reading about the upcoming implementation of the &lt;a href=&quot;https://en.wikipedia.org/wiki/IPv6_address&quot; rel=&quot;noreferrer&quot;&gt;internet protocol IPv6&lt;/a&gt; - which is now in place. In that article it mentioned that there was some discussion about space - I mean &lt;em&gt;outer space&lt;/em&gt;, not namespace. At the time, it seemed that the author was not just speculating, but that they were actually referring to some plans or at least calculations.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I would still like to see if this can be tracked down, and to find out if I'm mis-remembering, or mis-understood, or if the development of IPv6 or earlier explicitly took interplanetary distances or needing enough IP addresses for the whole solar system into consideration, or if it was just some creative journalism.&lt;/p&gt;&#xA;" OwnerUserId="7118" LastEditorUserId="7118" LastEditDate="2020-10-22T02:13:08.477" LastActivityDate="2020-11-03T18:01:13.937" Title="When IPv6 was designed were there any specific considerations for other planets?" Tags="&lt;history&gt;&lt;internet&gt;" AnswerCount="5" CommentCount="18" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16624" PostTypeId="1" CreationDate="2020-10-22T01:15:01.053" Score="5" ViewCount="451" Body="&lt;p&gt;I wonder if GW-BASIC may have had a method for allowing the creation of self-modifying programs just using BASIC, without needing to use &lt;code&gt;PEEK&lt;/code&gt;s or &lt;code&gt;POKE&lt;/code&gt;s, and not accessing disk-drives or similar memory.&lt;/p&gt;&#xA;&lt;p&gt;At the moment, I'm wondering if you could open the actual file of the current program.&lt;/p&gt;&#xA;&lt;p&gt;I'm looking at the &lt;code&gt;OPEN&lt;/code&gt; instruction detailed at &lt;a href=&quot;http://www.antonis.de/qbebooks/gwbasman/open.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;www.antonis.de&lt;/a&gt;, and wondering if it may contain a method of opening the actual file of the current program.&lt;/p&gt;&#xA;&lt;p&gt;Two questions I have at the moment are:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;OPEN &amp;quot;0&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Could &lt;code&gt;&amp;quot;0&amp;quot;&lt;/code&gt; above, specify the location of the current program file?&lt;/p&gt;&#xA;&lt;p&gt;Or&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;OPEN &amp;quot;0:&amp;quot; FOR OUTPUT AS #0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Could &lt;code&gt;#0&lt;/code&gt; in this line, somehow specify the file of the current program?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The document I'm looking at at the moment is &lt;a href=&quot;http://www.antonis.de/qbebooks/gwbasman/chapter%205.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;www.antonis.de&lt;/a&gt;  -&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;OPEN &amp;quot;O&amp;quot;,#1,&amp;quot;DATA&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&amp;quot;Open the file in output (O) mode&amp;quot; from &lt;a href=&quot;http://www.antonis.de/qbebooks/gwbasman/chapter%205.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;www.antonis.de&lt;/a&gt;,  so that specifies the letter &amp;quot;O&amp;quot; for &amp;quot;O&amp;quot; mode, not a location named &amp;quot;0&amp;quot; ( specifying the number &amp;quot;0&amp;quot; ), which is one of my two questions&lt;/p&gt;&#xA;&lt;p&gt;Normally, I have only seen the following type of format -&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;OPEN &amp;quot;C: PROGRAM&amp;quot; FOR OUTPUT AS #1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16462" LastEditorUserId="15334" LastEditDate="2021-04-26T06:31:43.987" LastActivityDate="2021-04-26T06:31:43.987" Title="Is there a way to make self-modifying programs in pure GW-BASIC?" Tags="&lt;basic&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ClosedDate="2021-05-02T16:30:22.987" ContentLicense="CC BY-SA 4.0" />
  <row Id="16625" PostTypeId="1" AcceptedAnswerId="16627" CreationDate="2020-10-22T02:02:43.850" Score="19" ViewCount="3048" Body="&lt;p&gt;Most ROMs are labeled with &amp;quot;(Europe)&amp;quot; or &amp;quot;(USA)&amp;quot;, meaning PAL or NTSC. However, some are labeled &amp;quot;(World)&amp;quot;. At first, I didn't think twice about this, just assuming that that the game was released world-wide identically, with no changes between the regions.&lt;/p&gt;&#xA;&lt;p&gt;But then I thought: &amp;quot;Wait a minute. This makes no sense. How can it be a single copy for both PAL and NTSC?&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;Does a &amp;quot;(World)&amp;quot; NES cartridge really have &lt;em&gt;both&lt;/em&gt; PAL and NTSC copies of the game on it, and somehow is able to automatically detect whether it's being played on a PAL (European) or NTSC (USAian) NES? I suppose that is reasonable, if the NES has such a &amp;quot;flag&amp;quot; that the game can check upon boot, but does it really have such a thing? Does &amp;quot;(World)&amp;quot; really mean this?&lt;/p&gt;&#xA;&lt;p&gt;I can't remember any NES game which had a menu where you had to pick your region at start.&lt;/p&gt;&#xA;" OwnerUserId="19720" LastEditorUserId="10952" LastEditDate="2020-10-22T12:12:12.477" LastActivityDate="2020-10-26T15:30:23.767" Title="Could a single NES ROM cartridge run on both PAL and NTSC systems?" Tags="&lt;nes&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16626" PostTypeId="2" ParentId="16624" CreationDate="2020-10-22T02:27:25.460" Score="5" Body="&lt;p&gt;Pretty much any program that can do file I/O can open the source file it came from, and overwrite it.  The trick is merely knowing what that file is.&lt;/p&gt;&#xA;&lt;p&gt;That is not &amp;quot;self-modifying code&amp;quot; under any common definition of the term, since the program is almost certainly not &amp;quot;running&amp;quot; from the source file.&lt;/p&gt;&#xA;&lt;p&gt;The sole exception might be a wholly interpreted language for which the interpreter re-reads the source for every statement executed, and the source file either permits writes &lt;em&gt;in situ&lt;/em&gt; while being read, or else the interpreter closes and reopens the file (thus seeing the updated instance) between statements.&lt;/p&gt;&#xA;&lt;p&gt;Simple-minded scripting languages like MS-DOS so-called 'batch' processing might do that, but I think it's not common, because it's so inefficient.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-10-22T02:27:25.460" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16627" PostTypeId="2" ParentId="16625" CreationDate="2020-10-22T02:57:58.210" Score="18" Body="&lt;p&gt;It means what it says: one game image for multiple regions, or 'the world'.&lt;/p&gt;&#xA;&lt;p&gt;The 10NES lockout chip pairing between cartridge and NES is the main determinator of whether a cartridge will be allowed to boot on a given system. When omitted like on the NES-101, the USA NES and the European NES are almost identical except for some timings. If you put a European game into that US-only NES-101, it'd do its best to run it. See also: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1329/what-are-the-differences-between-the-japanese-famicom-and-american-nes&quot;&gt;What are the differences between the Japanese Famicom and American NES?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I believe the main difference you'd encounter for a NES game, from the programmer's perspective, is the length of a game frame - how much calculation it's possible to accomplish in a single game frame. It is possible to design a game for use on multiple regions of a system, so that a frame completes in sufficient time no matter where it's used.&lt;/p&gt;&#xA;&lt;p&gt;Care might be taken to ensure the game works identically to players' perceptions in different regions, or it might not. If it's possible to detect the region, then parts of the game that deal with time-based simulation &lt;em&gt;may&lt;/em&gt; contain different routines simulating an NTSC 1/60sec frame and a PAL 1/50sec frame, and choose between them as necessary. A car that's supposed to accelerate from &lt;a href=&quot;http://accelerationtimes.com/models/lamborghini-diablo&quot; rel=&quot;nofollow noreferrer&quot;&gt;0-60MPH in 4.5s&lt;/a&gt; will need different values for per-frame acceleration and so on. It doesn't need to have two entire games like you suggest, as for example a routine that reads the player's position from RAM and places some sprites at a specific pixel on screen is not dependent on the frame timing.&lt;/p&gt;&#xA;&lt;p&gt;If this is ignored, the differences in clock speed are just accepted 'as is' when played on another system. When a 60Hz USA-designed 'World' game is played on a 50Hz European system, you might see the following effects:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Objects appearing to move slower on screen. The 60Hz game would appear to run at 5/6 the speed on a 50 Hz European console. You'd move the same speed per frame, but with fewer frames per second.&lt;/li&gt;&#xA;&lt;li&gt;In-game clocks like in racing and athletics games would run at the&#xA;wrong speed, as they're typically tied to frames occurring rather&#xA;than any calibrated clock.&lt;/li&gt;&#xA;&lt;li&gt;If the music engine is advanced once per frame, then the tempo of the song will become slower by the same ratio. The note pitches may be different but not necessarily proportionally so since the tone generator chip is fed a different clock derived from the master system clock than the one used for video display.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These effects are very obvious on Genesis games. &lt;a href=&quot;https://www.youtube.com/watch?v=DW-XsGN8oKc&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's &lt;em&gt;Sonic the Hedgehog&lt;/em&gt; being played alternating between two different regions.&lt;/a&gt; Another user will have to correct me if these observations don't hold for NES games. :)&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-10-23T22:32:38.830" LastActivityDate="2020-10-23T22:32:38.830" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16628" PostTypeId="1" AcceptedAnswerId="16629" CreationDate="2020-10-22T04:18:27.750" Score="6" ViewCount="204" Body="&lt;p&gt;In an typical 1980s 8086 system the 8284 clock chip is typically used to generate the clock for the CPU.&lt;/p&gt;&#xA;&lt;p&gt;The 8284 has two clock sources XTAL and EFI.  XTAL provides a steady clock source from a crystal.  EFI is an externally supplied clock source.  The 8284 chip allows you to switch between them using the  F/C# input.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Is there any an known systems that would switch between the crystal and EFI clocks while the system was running?&lt;/strong&gt;  Maybe this is a case for a Turbo button...&lt;/p&gt;&#xA;&lt;p&gt;If the EFI clock is used I presume that it would be within the allowed frequency range for the 8086 (2MHz to 8MHz) and not stopped or any thing like that.  But I would be interested in knowing if other cases (such as stopped) ever existed by design.&lt;/p&gt;&#xA;" OwnerUserId="13468" LastActivityDate="2020-10-24T19:31:50.510" Title="Are there any known 8086 systems that would dynamically switch between XTAL and EFI clocks on 8284 clock generator?" Tags="&lt;ibm-pc&gt;&lt;8086&gt;&lt;8254&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16629" PostTypeId="2" ParentId="16628" CreationDate="2020-10-22T08:32:45.890" Score="8" Body="&lt;p&gt;I's be rather surprised if anyone ever did. F/C is a static input, not meant to be switched at runtime. There are not only no examples for switching, but it's as well clearly stated on page 3-392 of the manual:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uWNP4.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uWNP4.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hu1sA.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hu1sA.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Strapping is datasheet lingo for fixed setting&lt;/p&gt;&#xA;&lt;p&gt;Looking at the (pseudo) schematics reveals that it's not meant as an active switcher as there is no protection against illegal timing states (glitches) during switching.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/s59aQ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/s59aQ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Using F/C does not make sense.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;In general, there are essentially only two uses for varying clock speed:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Slowing down (Switch between different speeds)&lt;/li&gt;&#xA;&lt;li&gt;Following a more sophisticated external scheme - like fitting a video timing (*1)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For slowing down it's usually more appropriate to use wait-states on the CPU itself, as this leaves all (internal) timing unchanged.&lt;/p&gt;&#xA;&lt;p&gt;For a more complex timing CSYNC could be used - but when using CSYNC, an external source on EFI is required anyway, making the internal obsolete again.&lt;/p&gt;&#xA;&lt;p&gt;Long story short, use an external source via EFI when interested in more complex clock solutions. In fact, such may as well make the whole 8284 obsolete, as its features may be added easy or come as side effect.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Having said that, it still might be possible to use the oscillator (OSC output with F/C = LOW) to feed an external clock generation, to be fed back via EFI, but it'll need some research (*2) before using it in any production setup. Not at least for noise reasons.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The Apple II is eventually the prime example here as the CPU clock is wraped around the needs for video.&lt;/p&gt;&#xA;&lt;p&gt;*2 - And talking to Intel (or whatever the prefered supplier is) to make it part of the (your) spec for parts.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-22T09:12:29.987" LastActivityDate="2020-10-22T09:12:29.987" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16630" PostTypeId="2" ParentId="16623" CreationDate="2020-10-22T08:37:58.887" Score="24" Body="&lt;p&gt;The address space is only one (maybe the easiest to solve) problem you'd have when extending Internet protocols beyond earth, especially with a supposed pretty low number of projected extraterrestrial nodes for the foreseeable future.&lt;/p&gt;&#xA;&lt;p&gt;A much bigger problem is the end-to-end delay. With anticipated packet delays of several minutes, the concept of the traditional TCP/IP networks is not able to cope - Traditional TCP/IP (regardless of whether it's v4 or v6) will try and open up the TCP window to immense sizes in order to accomodate throughput, requiring immensely large buffers on both ends of the connection.&lt;/p&gt;&#xA;&lt;p&gt;Other concepts that address the store-and-forward problem on both ends of the high-latency connections would be needed. There indeed have been studies in various places (like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Interplanetary_Internet&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;Interplanetary Internet&amp;quot; study at NASA's JPL&lt;/a&gt;) to address such issues. These studies are, however, not directly connected to IPv6 development (or were rather put in place after the IPv6 standardisation).&lt;/p&gt;&#xA;&lt;p&gt;Also note that, courtesy of Mr. Kepler, an interplanetary network is a &lt;em&gt;mobile network&lt;/em&gt; (albeit with relatively predictable mobility) by nature - something IP (v4 or v6) has not exactly been designed for. It has no mechanisms to detect a shortest path across several hops that &lt;em&gt;are moving&lt;/em&gt; dynamically. So, IP is probably not well-prepared for this use case.&lt;/p&gt;&#xA;&lt;p&gt;There's even a &lt;a href=&quot;https://public.ccsds.org/Pubs/702x1b1c1.pdf&quot; rel=&quot;noreferrer&quot;&gt;standard body&lt;/a&gt; that standardizes encapsulation of IP packets into space-grade transmission protocols.&lt;/p&gt;&#xA;&lt;p&gt;All of the above are strategies to keep connectivity alive even on long-roundtrip, low-stability connections.&lt;/p&gt;&#xA;&lt;p&gt;Then again, that is only a very small aspect of what makes up &amp;quot;the Internet&amp;quot;. Today, a lot of Internet applications are &lt;em&gt;interactive&lt;/em&gt; and thus directly rely on response times. When we go as far with development of the human race as evolving into a spacefaring society, we might just as well extrapolate the development of artifical intelligence - A server application should, in that far future, be able to &amp;quot;guess&amp;quot; the far-away user's next potential action(s) with high accuracy and already provide the proper answer(s) to that, rolling back on the server side in case the user actually decides on something different on the next round-trip.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2020-10-24T08:41:27.417" LastActivityDate="2020-10-24T08:41:27.417" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16631" PostTypeId="2" ParentId="16625" CreationDate="2020-10-22T09:03:18.230" Score="9" Body="&lt;p&gt;This was very common on some platforms, e.g. the Amiga. Games often didn't use the lower part of the screen in PAL regions, so that they still fit onto NTSC screens with a lower vertical resolution. That also meant that the aspect ratio was different between the two regions, a purely cosmetic issue.&lt;/p&gt;&#xA;&lt;p&gt;However most Amiga games did not run at the full frame rate or 50 or 60 FPS (PAL and NTSC respectively). PAL games have 20ms to complete a frame, NTSC games only have 16.6ms. PAL frames are larger too, having more vertical resolution. On consoles like the NES that isn't a big issue as the extra scanlines are rendered by the graphics hardware at very little extra cost in terms of processing time required.&lt;/p&gt;&#xA;&lt;p&gt;Therefore it is entirely possible to make a &amp;quot;world&amp;quot; game. The easiest method is to develop for NTSC which has the tighter timing requirements and then add some vertical resolution in PAL mode. Timers may need to be adjusted to take account of the different frame rates, and without modifying movement and animation in the game the PAL version will run more slowly. Many games didn't bother.&lt;/p&gt;&#xA;&lt;p&gt;One common method was to add an extra status area at the bottom of the PAL screen to use up the extra space. That way the gameplay area remained the same size and there was no danger of the player gaining an advantage or going out-of-bounds.&lt;/p&gt;&#xA;&lt;p&gt;While it's tempting to think that some machines can switch between PAL and NTSC, in reality very few can. They usually just support switching the display frequency between 50Hz and 60Hz, but the timing for things like the colour signal remain in the format the machine was designed for. So for example a PAL machine producing a 60Hz signal will not generate NTSC compatible colour, but rather PAL colour at 60Hz. Sometimes this is referred to as &amp;quot;PAL60&amp;quot;, e.g. by several Dreamcast games.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2020-10-26T15:30:23.767" LastActivityDate="2020-10-26T15:30:23.767" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16632" PostTypeId="2" ParentId="16623" CreationDate="2020-10-22T10:06:40.713" Score="8" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;No, as IPv6 does not work that way.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;p&gt;While IPv6 does carry several changes and enhancements/simplifications of protocol handling, none of them are about latency. It's main feature is an increased address size to 128 bit. That's more than enough to give each possible planet in the visible universe a dedicated address range the size of the IPv4 network (*1). More so right now only 1/8th of this range can be used at all.&lt;/p&gt;&#xA;&lt;p&gt;More important here is that segmentation of IPv6 does not of the same hard structured kind as with IPv4. Block allocation is way more dynamic and 'rightsized'. There is no need to give 'territorial' addresses but rather provider orientated, so feel free to open one or multiple providers on the moon (*2).&lt;/p&gt;&#xA;&lt;p&gt;What it does not solve are basic interplanetary communication issues. Store and forward systems like mail - or basically anything batch (file transfer) orientated (*3) - will work fine and at line speed (*4), even over interplanetary distances. But any kind of interactive services that requires genuine user input will suffer full round trip time, no matter what protocol (*5).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Back of an envelope calculation:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There are about 10^78 atoms in the visible universe.&lt;/li&gt;&#xA;&lt;li&gt;10^25 atoms are roughly in a kg of matter&lt;/li&gt;&#xA;&lt;li&gt;Earth got about 6*10^24 kg, so lets use 10^25&lt;/li&gt;&#xA;&lt;li&gt;This gives us enough matter for 10^(78-25-25) or &lt;strong&gt;10^28&lt;/strong&gt; planets.&lt;/li&gt;&#xA;&lt;li&gt;An IPv6 address is 128 bit,&lt;/li&gt;&#xA;&lt;li&gt;IPv4 is 32 bit,&lt;/li&gt;&#xA;&lt;li&gt;leaving 2^96 IPv4 sized networks (or names) for planets.&lt;/li&gt;&#xA;&lt;li&gt;2^96 is 8*&lt;strong&gt;10^28&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And yes, like any such estimation there are many arguments to push it a few magnitudes to either side - like that only a rather small amount of matter would exist in form of planets - still, 2^128 is a pretty big number way past anything mankind needs ... then again, we are known to be rather wasteful, so I'd better hedge my bets :))&lt;/p&gt;&#xA;&lt;p&gt;*2 - For world building this means provider wars and great firewalls do work on the moon as well :)&lt;/p&gt;&#xA;&lt;p&gt;*3 - This includes any database like news aggregation or, well, Wikipedia. Of course, concurrent edited databases experience way more colliding edits, but will work quite fine in reading mode. I expect any future manned spacecraft and colony to have read only copies of Wikipedia maintained by continuous update service. And at some point (world building) a bad mood about cultural domination by Earth :)&lt;/p&gt;&#xA;&lt;p&gt;*4 - Simply by using (much) larger packet windows (local buffer memory isn't expensive in such a setting), as well as multiple hops each doing store and forward.&lt;/p&gt;&#xA;&lt;p&gt;*5 - One my envision some kind of 'user support' AI that returns possible answers, before the full request has been received. Of course that only works with requests that includes a lot of data, providing a chance to answer ahead of receiving the full request.&lt;/p&gt;&#xA;&lt;p&gt;Similar when a request results in multiple answers, they could be sent interleaved and in a refining way. Much like sending first a low resolution image and then adding to it, so a decision how to proceed can be taken early on. Much like (good) web pages are made to work well on slow connections.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-24T22:50:18.983" LastActivityDate="2020-10-24T22:50:18.983" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16633" PostTypeId="1" AcceptedAnswerId="16641" CreationDate="2020-10-22T11:48:12.283" Score="11" ViewCount="1711" Body="&lt;p&gt;It just came to me that, the C standard I/O functions &lt;code&gt;fread&lt;/code&gt; and &lt;code&gt;fwrite&lt;/code&gt; are having 2 &lt;code&gt;size_t&lt;/code&gt; arguments because of I guess possibly, that on some systems, there may be more memory of which whose size can be represented in a single &lt;code&gt;size_t&lt;/code&gt; type.&lt;/p&gt;&#xA;&lt;p&gt;With 2 &lt;code&gt;size_t&lt;/code&gt;s, 1 for element size, another for elements count, caller will be able to read/write more data than can be measured with a single &lt;code&gt;size_t&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I find it reasonable with some ancient x86 processors with &amp;quot;near&amp;quot; addressing.&lt;/p&gt;&#xA;&lt;p&gt;Is this thinking right? What's the real history here?&lt;/p&gt;&#xA;" OwnerUserId="16095" LastActivityDate="2020-10-24T03:22:22.757" Title="Is this the reason why fread/fwrite has 2 `size_t` arguments?" Tags="&lt;memory&gt;&lt;c&gt;" AnswerCount="3" CommentCount="15" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16634" PostTypeId="2" ParentId="16623" CreationDate="2020-10-22T12:00:26.003" Score="14" Body="&lt;p&gt;No.&lt;/p&gt;&#xA;&lt;p&gt;One of the members of the committee designing ipv6, Andrew S Tanenbaum, wrote many about their decision processes and considerations in his book &amp;quot;&lt;a href=&quot;https://docs.google.com/viewer?a=v&amp;amp;pid=sites&amp;amp;srcid=ZGVmYXVsdGRvbWFpbnxza21pbmh8Z3g6NjQxMTI2MmYxMTAwZmNjZQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computer Networks&lt;/a&gt;&amp;quot;. The for us important part is in the chapter 5.6.3:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Interplanetary communication is not even mentioned. Not even indirectly.&lt;/li&gt;&#xA;&lt;li&gt;Nothing is mentioned what is a real problem of the current ipv4 system, not even indirectly.&lt;/li&gt;&#xA;&lt;li&gt;Their &amp;quot;standard&amp;quot; &amp;quot;solved&amp;quot; a lot of problems (for example, the so-named &amp;quot;exhausting of the ipv4 address space&amp;quot;), which were solved long ago, without them.&lt;/li&gt;&#xA;&lt;li&gt;On a &amp;quot;language of flowers&amp;quot;, one can read upon the text, that this committee was very far from thinking even into the short future, and Tanenbaum, indirectly, admits it.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;About the interplanetary distances: they cause a huge, unavoidable packet delay on an ip network. The design of the IP standard has nothing to do about the delays, or it would require at most the tuning of some timeout constants (for example, maybe arp cache timeouts should be increased; but these will surely happen in practical system even without a standard change, and have little to do to ipv6).&lt;/p&gt;&#xA;&lt;p&gt;Ip (v4 or v6, does not matter) could work with such packet delays without any problem. The applications using it would not. The problems are on higher levels - for example, file transfer over a TCP connection would surely need more sophisticated algorithms. To increase the perceived response time, probably&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;large caching&lt;/li&gt;&#xA;&lt;li&gt;error fixing data coding&lt;/li&gt;&#xA;&lt;li&gt;multicasting&lt;/li&gt;&#xA;&lt;li&gt;and re-sending of the bad packets&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;will be also needed. Probably an increase of the unidirectional protocols (like a radio sending) will be also useful.&lt;/p&gt;&#xA;&lt;p&gt;These all happen over the IP level today, ipv6 did not improve anything in this matter.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.s. Moon is a special case to other planets - signal transfer causes $\approx$ 1.2s delay there. Between the Moon and the Earth, even an unmodified IP network is possible, for example, by laser communication. This will be a slow, but usable network. To the Mars, the delay is at least 20 minutes, and this is already too much, and most apps would timeout. Against, these don't depend on the IP parameters, but on the usual behavior of most network applications.&lt;/p&gt;&#xA;" OwnerUserId="129" LastEditorUserId="129" LastEditDate="2020-11-03T18:01:13.937" LastActivityDate="2020-11-03T18:01:13.937" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16635" PostTypeId="2" ParentId="16633" CreationDate="2020-10-22T12:27:35.950" Score="13" Body="&lt;p&gt;The point of fread/fwrite is to write &lt;em&gt;N&lt;/em&gt; elements, each of size &lt;em&gt;S&lt;/em&gt; bytes.  The API is not a simple 'write this number of bytes' interface.&lt;/p&gt;&#xA;&lt;p&gt;Thus, for example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;struct S { int a, b; float c; };&#xA;struct S stuff[92];&#xA;fwrite(stuff, sizeof (struct S), 92, stream);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(I would not write '92' in real code, but I want the simple formulation in this example)&lt;/p&gt;&#xA;&lt;p&gt;Thus it has two size values because it needs them to express the intended operation.&lt;/p&gt;&#xA;&lt;p&gt;(I don't much like the API, but there it is)&lt;/p&gt;&#xA;&lt;p&gt;It is not that this is arranged just in case one size_t value can't handle the overall size to read/write, because size_t is by definition large enough to hold the size of the largest possible object (it’s defined as “the unsigned integral type of the result of the &lt;code&gt;sizeof&lt;/code&gt; operator”) — and anything fread/fwrite can handle is a single contiguous object.  To put it another way, given my above code fragement.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; size_t sz = sizeof stuff;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;is guaranteed to be valid.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;In the &lt;i&gt;Rationale&lt;/i&gt; for ANSI-X3.159-1989 (the document accompanying the standard that explains why decisions were made). it says&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;size_t&lt;/strong&gt;  is the appropriate type both for an object size and for an array bound, so this is the type of &lt;strong&gt;size&lt;/strong&gt; and &lt;strong&gt;nelem&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now, they were standardizing an existing function, not inventing it, and this just says why the type is now size_t rather than, say, int.  But it's clear they were thinking in terms of reading and writing an array.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-10-22T12:46:59.187" LastActivityDate="2020-10-22T12:46:59.187" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16637" PostTypeId="2" ParentId="16633" CreationDate="2020-10-22T17:33:40.970" Score="3" Body="&lt;p&gt;For STDIO files with no buffering, referring to &amp;quot;raw&amp;quot; devices, like tapes, it is important how the &lt;code&gt;write&lt;/code&gt; system calls are issued, because each &lt;code&gt;write&lt;/code&gt; system call results in a tape block of the specified size (and to read a raw block, a &lt;code&gt;read&lt;/code&gt; system call of size no less than the block size is required).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;fwrite&lt;/code&gt;/&lt;code&gt;fread&lt;/code&gt; API appears to facilitate writing and reading multiple blocks of the specified size, but various &lt;a href=&quot;https://chromium.googlesource.com/chromiumos/third_party/glibc/+/cvs/libc-970720/stdio/fwrite.c#33&quot; rel=&quot;nofollow noreferrer&quot;&gt;versions of &lt;code&gt;fwrite&lt;/code&gt;&lt;/a&gt;, including &lt;a href=&quot;https://www.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/libc/stdio/rdwr.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;UNIX V7&lt;/a&gt; ignore that distinction.&lt;/p&gt;&#xA;&lt;p&gt;Could be a conceived but never finalized feature.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2020-10-22T22:38:30.610" LastActivityDate="2020-10-22T22:38:30.610" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="16638" PostTypeId="2" ParentId="16624" CreationDate="2020-10-22T17:53:09.677" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I wonder if GW-BASIC may have had a method for allowing the creation of Self-modifying programs just using Basic, without needing to use Peek's or Poke's, and not accessing disk-drives or similar memory .&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Nope.  You can't do this in GW-BASIC without implementing some sort of VM that takes data and interprets it as commands.  GW-BASIC never had an &lt;code&gt;eval&lt;/code&gt;-type command that would take a string and execute from it.&lt;/p&gt;&#xA;&lt;p&gt;That being said GW-BASIC does have the &lt;code&gt;CHAIN MERGE&lt;/code&gt; command to bring in BASIC text from a file and overlay it on the currently running program.&lt;/p&gt;&#xA;" OwnerUserId="746" LastActivityDate="2020-10-22T17:53:09.677" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16639" PostTypeId="2" ParentId="16625" CreationDate="2020-10-22T18:44:41.393" Score="2" Body="&lt;p&gt;Apart from CIC (lockout) chip, which is easy to cut off, and obvious 50/60 Hz difference (incl. different number of scanlines), there is a truly interesting stuff that differ between NTSC and PAL NESes.&lt;/p&gt;&#xA;&lt;p&gt;The first one is the different number of scanlines between frame-syncing /NMI and the moment PPU starts to draw the picture on the screen, that is, 20 lines in NTSC and 70 lines in PAL.&lt;/p&gt;&#xA;&lt;p&gt;The second one is the different ratio between PPU and CPU clocks. NTSC has 3:1 ratio, while PAL has 16:5. This also includes different number of CPU clocks per scanline (113 1/3 and 106 9/16 clocks, resp.)&lt;/p&gt;&#xA;&lt;p&gt;All that could make NTSC cycle-counting games to fail badly on PAL.&lt;/p&gt;&#xA;&lt;p&gt;Interesting enough, that the so-called &amp;quot;Dendy&amp;quot; clone of the NES, that was very popular in Russia in 90ies, while being 50 Hz, was NOT made like PAL NES. Instead, it had the timings exactly like the NTSC NES (including PPU/CPU ratio, number of lines from NMI to start of picture, number of CPU clocks per scanline, etc.) except that the frame was lengthened further &lt;em&gt;before&lt;/em&gt; the vblank (and hence NMI) to match 50Hz/312 lines.&lt;/p&gt;&#xA;&lt;p&gt;This way almost all games were cheated to run on seemingly NTSC hardware, despite the frame rate was actually 50 Hz.&lt;/p&gt;&#xA;&lt;p&gt;That is what I'd call a wiser engineering decision, the decision Nintendo failed to commit itself when building PAL NES.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-10-22T18:44:41.393" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16640" PostTypeId="2" ParentId="16623" CreationDate="2020-10-22T20:22:43.570" Score="4" Body="&lt;h1&gt;DTN&lt;/h1&gt;&#xA;&lt;p&gt;Not an answer about IPv6, per se, but apropos to &amp;quot;IP in space&amp;quot; is a recent &lt;a href=&quot;https://www.quantamagazine.org/vint-cerfs-plan-for-building-an-internet-in-space-20201021/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quanta interview&lt;/a&gt; with Vincent Cerf, where he mentions the development of Delay-Tolerant Networking, which uses &amp;quot;bundle protocols&amp;quot;.  It's packet-switched like IP, but allows nodes to store packets rather than dropping them, waiting for an opportune time to reconnect with the rest of the network.  It is neither an evolution of nor a competitor to IPv6 because the protocol is more expensive in a high-reliability, high-throughput environment.  They are complementary, so it would not have been advantageous for the IPv6 designers to consider a DTN mode.&lt;/p&gt;&#xA;" OwnerUserId="15720" LastActivityDate="2020-10-22T20:22:43.570" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16641" PostTypeId="2" ParentId="16633" CreationDate="2020-10-22T21:14:06.263" Score="7" Body="&lt;p&gt;AT&amp;amp;T's documentation for &lt;code&gt;fread&lt;/code&gt; and &lt;code&gt;fwrite&lt;/code&gt; that pre-dates &lt;code&gt;size_t&lt;/code&gt; is quoted below.  But first, to answer the title question:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Both functions are designed for objects, not characters.  This is evidenced by the return value being a count of the &lt;em&gt;objects&lt;/em&gt; read or written, not the number of &lt;em&gt;characters&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Each function may read/write fewer objects than requested.  Well-written code will make another attempt to read/write the remaining objects.  (This is also true of the character I/O.)  The code to re-attempt reading/writing is a lot simpler if you need to only keep track of the number of objects, instead of the number of characters (which then requires dealing with alignment issues).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The original implementation used the &lt;code&gt;int&lt;/code&gt; type for both the number of objects and the size of the objects.  When &lt;code&gt;size_t&lt;/code&gt; and other &lt;code&gt;_t&lt;/code&gt; types were introduced, those two arguments needed to retain the same type, to avoid breaking existing source code and compiled libraries.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;It has very little to do with the size of memory.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The use of &lt;code&gt;size_t&lt;/code&gt; and other &lt;code&gt;_t&lt;/code&gt; data types did not appear until K&amp;amp;Rv2.  Before then, the arguments to standard library functions were of &lt;code&gt;int&lt;/code&gt; and &lt;code&gt;long&lt;/code&gt; types.  For example, &lt;em&gt;The C Programmer's Handbook&lt;/em&gt;, AT&amp;amp;T Bell Laboratories, February 1984, p. 50 states (C++ style comments are my addition):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;BLOCK I/O&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Manual Page&lt;/em&gt; -- The functions in this section are on the &lt;em&gt;fread(3S)&lt;/em&gt; manual page.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;fread&lt;/em&gt; -- Read specified number of bytes (characters) from stream.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Synopsis:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre&gt;&lt;code&gt;    int fread (ptr, size, nitems, stream)&#xA;    char *ptr;&#xA;    int size, nitems;    // &amp;lt;--- THEY WERE BOTH INT&#xA;    FILE *stream;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;fwrite&lt;/em&gt; -- Write specified number of bytes to stream.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Synopsis:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre&gt;&lt;code&gt;    int fwrite (ptr, size, nitems, stream)&#xA;    char *ptr;&#xA;    int size, nitems;    // &amp;lt;--- THEY WERE BOTH INT&#xA;    FILE *stream;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;size_t&lt;/code&gt; was established by the time the second edition of &lt;em&gt;The C Programming Language&lt;/em&gt;, Kernighan and Ritchie, 1988 was written.  The functions in question are described on p. 247:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;B1.5  Direct Input and Output Functions&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;size_t fread(void *ptr, size_t size, size_t nobj, FILE *stream)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;fread&lt;/code&gt; reads from &lt;code&gt;stream&lt;/code&gt; into the array &lt;code&gt;ptr&lt;/code&gt; at most &lt;code&gt;nobj&lt;/code&gt; objects of size &lt;code&gt;size&lt;/code&gt;.  &lt;code&gt;fread&lt;/code&gt; returns the &lt;strong&gt;number of objects read&lt;/strong&gt;; this may be less than the number requested.  &lt;code&gt;feof&lt;/code&gt; and &lt;code&gt;ferror&lt;/code&gt; must be used to determine status.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *stream)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;fwrite&lt;/code&gt; writes, from the array &lt;code&gt;ptr&lt;/code&gt;, &lt;code&gt;nobj&lt;/code&gt; objects of size &lt;code&gt;size&lt;/code&gt; on &lt;code&gt;stream&lt;/code&gt;.  It returns the &lt;strong&gt;number of objects written&lt;/strong&gt;, which is less than &lt;code&gt;nobj&lt;/code&gt; on error.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2020-10-24T03:22:22.757" LastActivityDate="2020-10-24T03:22:22.757" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16642" PostTypeId="1" AcceptedAnswerId="16644" CreationDate="2020-10-23T13:06:19.990" Score="6" ViewCount="430" Body="&lt;p&gt;I first learned about tracker / mod music on my Amiga in the early 1990's.  I remember fooling around with Protracker, listening to mods with Intuitracker, and coming to the realization that all those awesome demos, crack intro's and trainers were generally using the same technology to create those iconic soundtracks.&lt;/p&gt;&#xA;&lt;p&gt;Winding the clock back in time, I've been reconstructing a Commodore 64 ML program I wrote when I was about 15 or 16 that plays a basic beep-beep tune I was developing for a video game.  I've recently disassembled my original code, loaded the assembly into &lt;a href=&quot;https://www.ajordison.co.uk/index.html&quot; rel=&quot;noreferrer&quot;&gt;CBM .prg Studio&lt;/a&gt; and spent some time doing refinement and cleanup.  What I discovered along the way, was that my approach was eerily similar to how I now understand trackers to work, and also how I would have expected SID files to work, albeit a much more primitive implementation.&lt;/p&gt;&#xA;&lt;p&gt;This leads me to wonder about SID files on the C64.  Was there a de-facto  &lt;em&gt;editor&lt;/em&gt; for the C-64?  Something that might be considered &lt;em&gt;the&lt;/em&gt; definitive tool every crack team's audio-guy reached for to whip up a new tune for their next release?  If so, was the file format ever published or documented (by now it must be, right)?  And finally, is publicly available assembly available for playback (assuming a C64/SID architecture)?&lt;/p&gt;&#xA;&lt;p&gt;Applying 20-20 hindsight, it seems a modern developer doing a retro project would expect to simply download the editor, author some awesome music, export the data and spark up some boiler-plate assembler for playback.&lt;/p&gt;&#xA;&lt;p&gt;Please note, I'm interested in the technology as it existed on an actual C64.  I realize there are modern editors that run on Windows and what not, but if it was 1987 and you wanted to make some Chiptunes on your Breadbox, what tools would you reach for?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Brian H kindly pointed me back to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11825/how-did-c64-games-handle-music-during-gameplay&quot;&gt;this question&lt;/a&gt;, which is chuck full of SID file goodness, but doesn't really tell me what the leader of the pack was back in the 80's.  It does mention that what I refer to as a tracker/mod were actually called SID files, and that they bundled the playback code with the data into a single file.&lt;/p&gt;&#xA;" OwnerUserId="2080" LastEditorUserId="2080" LastEditDate="2020-10-23T16:16:04.010" LastActivityDate="2021-04-07T11:21:10.763" Title="Does a defacto format exist for Commodore 64 SID music?" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;tracker&gt;&lt;music&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16643" PostTypeId="2" ParentId="16623" CreationDate="2020-10-23T13:45:20.530" Score="6" Body="&lt;h3&gt;There was no need, because an appropriate protocol was created instead.&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Licklider_Transmission_Protocol&quot; rel=&quot;noreferrer&quot;&gt;Licklider Transmission Protocol (LTP)&lt;/a&gt; was explicitly designed to replace TCP/IP and UDP for long-distance networked communications in space.  LTP was conceived in 2008, which was still some time before IPv4 address exhaustion and the more widespread adoption of IPv6.  It also predated any serious possibility of longer-term trips to the Moon or Mars.  (And it was also before this website existed!)&lt;/p&gt;&#xA;&lt;p&gt;LTP has the concept of &amp;quot;red&amp;quot; and &amp;quot;green&amp;quot; parts, where &amp;quot;red&amp;quot; parts require error-checking and handshaking to ensure lossless transmission, and &amp;quot;green&amp;quot; parts are allowed to contain errors (or even not arrive at all).  These correspond fairly closely to the requirements of TCP/IP and UDP respectively.&lt;/p&gt;&#xA;&lt;p&gt;One significant difference is that LTP is a point-to-point protocol.  In practise of course this is not an obstacle, because communications beyond Earth require a dedicated transmitter aimed accurately at the receiver, and there is little possibility of multiple transmission paths.&lt;/p&gt;&#xA;" OwnerUserId="6749" LastActivityDate="2020-10-23T13:45:20.530" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16644" PostTypeId="2" ParentId="16642" CreationDate="2020-10-23T16:14:54.917" Score="8" Body="&lt;p&gt;No - at least not in the sense of some shared data structure that different music editors were all capable to work with, as was the case with fx MOD files and derivatives.&lt;/p&gt;&#xA;&lt;p&gt;C64 music is typically distributed as executables which contain both play routine and music data (cf. also &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14294/how-did-old-games-from-8-bit-era-game-consoles-store-music/14295#14295&quot;&gt;this answer&lt;/a&gt;). Many different players and editors exist, some native, some for &amp;quot;cross composing&amp;quot;. The music is played by the player software continuously changing the SID chip's parameters.&lt;/p&gt;&#xA;&lt;p&gt;Composers, or groups, often wrote the play routines themselves and held on to them, and the particulars of a given implementation was often part of the artist's distinctive style. Also, play routines evolved a great deal, everyone trying to get an edge in sound capability, raster time usage or whatever trade-off of the system's constraints were relevant in the context.&lt;/p&gt;&#xA;&lt;p&gt;There is, however, a pretty standardized meta data header - &lt;a href=&quot;http://www.hvsc.de/download/C64Music/DOCUMENTS/SID_file_format.txt&quot; rel=&quot;noreferrer&quot;&gt;PSID&lt;/a&gt; - that represents the information needed to play the music from emulating music players or for generic front ends on the C64 itself. But this was something that was invented after the fact, when people started building collections and wanting to play the music on other systems as well (fx the tracks you find in collections such as the &lt;a href=&quot;https://hvsc.c64.org/&quot; rel=&quot;noreferrer&quot;&gt;HVSC&lt;/a&gt; are wrapped in this header).&lt;/p&gt;&#xA;&lt;p&gt;There was not really any single &amp;quot;leader of the pack&amp;quot;, but there were a few play routines used by popular and productive composers that you were likely to encounter, such as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Rob Hubbard's&lt;/li&gt;&#xA;&lt;li&gt;Martin Galwin's&lt;/li&gt;&#xA;&lt;li&gt;Matt Gray's&lt;/li&gt;&#xA;&lt;li&gt;20CC's&lt;/li&gt;&#xA;&lt;li&gt;Vibrants'&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And also those of some widely available music editors such as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Future Composer&lt;/li&gt;&#xA;&lt;li&gt;Music Assembler&lt;/li&gt;&#xA;&lt;li&gt;DMC&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-10-23T19:14:27.007" LastActivityDate="2020-10-23T19:14:27.007" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16645" PostTypeId="1" CreationDate="2020-10-23T19:39:25.927" Score="-5" ViewCount="279" Body="&lt;p&gt;&lt;em&gt;(I first asked this in the Raspberry Pi section, but it received no responses. I think this, Retrocomputing, might be a better fit.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I the year 2003, I had my Xbox chipped in order to be able to run homebrew software, meaning a lot of emulators. Back then, I had very little understanding of what an emulator was, and I thought it was fantastic to be able to run all these games I never had back in the day for the actual consoles, although I was always frustrated that some wouldn't run at all or contain annoying visual/sound/logic glitches.&lt;/p&gt;&#xA;&lt;p&gt;Fast-forward to 2020, I finally installed the latest stable version of &lt;strong&gt;RetroPie&lt;/strong&gt; onto my Raspberry Pi which I bought in 2014 and which has mostly been sitting in a box since. Exact model: &lt;code&gt;Raspberry Pi 700MHz Arm CPU 512MB RAM. Raspberry Pi Model B Rev 2.&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Yes, I know that the RetroPie website recommends using a RPI 4, but of course they are gonna say that since it's the latest and by far most powerful one. However, I don't have one of those: I have one of the original models, which are still supported.)&lt;/p&gt;&#xA;&lt;p&gt;Having now spent two separate, long sessions in front of the TV evaluating this thing, trying many different games, I have to conclude that it seems... worse than the original Xbox. Some examples:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;R.C. Pro-Am II (NES) has such visual glitches while running the game that it's impossible to play it. The entire screen flickers/jumps around, but that doesn't happen in the intro or menu screen of the same game. This never happened on the Xbox.&lt;/li&gt;&#xA;&lt;li&gt;Super Mario All-Stars (SNES) and Super Mario Kart (SNES) run at &lt;em&gt;slow motion&lt;/em&gt; speed all the time. They were very accurate on the Xbox.&lt;/li&gt;&#xA;&lt;li&gt;Most of the N64 games don't run at all. When I launch them, they just go back to the menu again, without any error message or explanation. The few that do run, for example Majora's Mask (which is odd since it was such a demanding game), or Super Mario 64, run so slowly that I had to chuckle and shake my head in disbelief. &amp;quot;Unplayable&amp;quot; doesn't even begin to describe it. N64 emulation on the Xbox was basically like running a real N64 compared to this.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;With seventeen years of emulation development, and 512 MB of RAM compared to the Xbox's 64 MB, you'd think that it would at the very least be &lt;em&gt;on par&lt;/em&gt; with that old &amp;quot;junk box&amp;quot;, which I'm now starting to miss, but it's far &lt;em&gt;worse&lt;/em&gt;! My guess is that the explanation must be that the 733 MHz x86 CPU in the Xbox is much, much faster than the 700 MHz ARM one in my RPI?&lt;/p&gt;&#xA;&lt;p&gt;I cannot imagine that the flash card versus mechanical hard disk would matter as the ROMs would be loaded into RAM. (It does take a surprising amount of time to start playing each game, though, whereas it was instant on the Xbox. I cannot imagine that this is due to the I/O speed, though.) Maybe the video chip of the Xbox helped a lot with emulation somehow? This really makes me confused. While I didn't expect anything near perfect emulation, especially not for N64, this is remarkable.&lt;/p&gt;&#xA;&lt;p&gt;I should note that all of this happened even without me even having applied any &amp;quot;shaders&amp;quot;, so it was not that dragging down the performance of the poor RPI. I also did not change any of the settings into some kind of unusual/experimental way.&lt;/p&gt;&#xA;" OwnerUserId="19736" LastActivityDate="2020-10-23T20:11:11.987" Title="Is the Raspberry Pi Model B (2014) technically inferior to an original Xbox (2001) in compute power/specifically for emulators?" Tags="&lt;emulation&gt;&lt;nes&gt;&lt;x86&gt;&lt;snes&gt;&lt;arm&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2020-10-24T03:29:39.573" ContentLicense="CC BY-SA 4.0" />
  <row Id="16646" PostTypeId="2" ParentId="16645" CreationDate="2020-10-23T20:11:11.987" Score="9" Body="&lt;p&gt;The original Xbox has a 733MHz Pentium 3 CPU, coupled to a GPU that is essentially an Nvidia Geforce 3.  They share a 128-bit DDR memory interface that supports 6.4 GB/s bandwidth.&lt;/p&gt;&#xA;&lt;p&gt;The original Raspberry Pi Model B has a 700MHz ARM1176JZF-S CPU core, coupled to a Broadcom VideoCore 4 GPU (which occupies the majority of the die area in the central SoC).  The RAM interface is DDR2 but only 64-bit, and I wasn't quickly able to find out its bandwidth.&lt;/p&gt;&#xA;&lt;p&gt;The GPUs of the two machines are fairly similar in performance.  The CPUs however are not, as an interview shortly before the Raspberry Pi's release makes clear:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Overall real world performance is something like a 300MHz Pentium 2…&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Emulation relies heavily on CPU performance, so that is what's holding you back.  Later Raspberry Pi models have considerably more capable CPUs.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-10-23T20:11:11.987" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16647" PostTypeId="1" AcceptedAnswerId="16648" CreationDate="2020-10-24T07:43:37.150" Score="5" ViewCount="1339" Body="&lt;p&gt;Wondering if anyone can help me shed some light on this vague memory I have as a kid. My older brother had a friend who got us tons of pirated games for our Commodore 64/128. I'm trying to recall one game in particular - here's what I can remember:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You flew some sort of hovercraft/tank/ship (definitely futuristic, not present-day) across a flat field towards a dark rectangular tower on the horizon.&lt;/li&gt;&#xA;&lt;li&gt;I'm pretty sure it was presented in a third-person point of view, directly behind the ship, with the flat horizon in the middle of the screen&lt;/li&gt;&#xA;&lt;li&gt;As you approached the tower, it would slowly get larger and larger - not sure what happened when you reached it&lt;/li&gt;&#xA;&lt;li&gt;I think maybe the sky would change shades as it got 'later' or you got closer to the tower.&lt;/li&gt;&#xA;&lt;li&gt;I think you could only 'strafe' left and right, and maybe slightly forward and backward - i.e. you were always heading towards the 'horizon' and the tower&lt;/li&gt;&#xA;&lt;li&gt;There were definitely some sort of powerups you could fly over, that would maybe give you shields, fuel, or ammo? They were represented as sort of 'discs' that kind of looked like whirlpools&lt;/li&gt;&#xA;&lt;li&gt;I believe the field you flew across was green - may have had obstacles or something to avoid&lt;/li&gt;&#xA;&lt;li&gt;I assume you shot incoming enemies with lasers or something, but I don't really remember&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The one thing that stands out is how the tower got larger as you approached the horizon. It sticks in my mind because it was very similar to when I rode my bicycle across Kansas - long flat horizon with the next town's grain silo in the distance, that would grow as you approached it!&lt;/p&gt;&#xA;&lt;p&gt;I've scoured the internet for all the search terms I can think of, and have come up empty. Anybody have some guesses?&lt;/p&gt;&#xA;" OwnerUserId="19740" LastEditorUserId="15334" LastEditDate="2021-05-14T17:42:26.003" LastActivityDate="2021-05-14T17:42:26.003" Title="1980s Commodore 64 game about flying toward tower" Tags="&lt;identify-this-game&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16648" PostTypeId="2" ParentId="16647" CreationDate="2020-10-24T08:06:08.593" Score="16" Body="&lt;p&gt;It sounds a lot like the game &lt;a href=&quot;https://www.mobygames.com/game/c64/stealth&quot; rel=&quot;noreferrer&quot;&gt;Stealth&lt;/a&gt;, by Brøderbund, released in November 1984:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You are flying above the land in a stealth airplane. You are trying to&#xA;destroy the tower of darkness which is a distance of 9999 meters away.&#xA;Destroy enemy military radar, bunkers,etc; to get more points. Use&#xA;yellow energy fields for increasing your fuel level, but avoid the red&#xA;energy fields. Once you destroy the Tower, you go onto a tougher level&#xA;with the same basic objective.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=P6c4elSgajg&quot; rel=&quot;noreferrer&quot;&gt;Here is a longplay video&lt;/a&gt;, also &lt;a href=&quot;https://archive.org/details/C64Videoarchive200-50longplays_part1&quot; rel=&quot;noreferrer&quot;&gt;available&lt;/a&gt; in the Internet Archive.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-10-24T08:06:08.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16649" PostTypeId="1" CreationDate="2020-10-24T13:20:57.740" Score="0" ViewCount="215" Body="&lt;p&gt;When looking on the internet at information about old consoles it's  pretty easy to find out information on CPUs like the 6502, 65816, 68000 &amp;amp; Z80 used in retro computers &amp;amp; consoles like the NES, SNES, Megadrive, mastersystem, Atari 2600, Atari 8 bit family,  Apple IIGS ect but I find GPU information much harder to come by. Things like how the PPU (picture processing unit) in the NES/SNES worked or  the TMS9918 based video display controller/video display processor in the master system &amp;amp; megadrive worked .&lt;/p&gt;&#xA;&lt;p&gt;Furthermore do these processors used for graphics processing have any similarities to FPU(Floating point units) &amp;amp; maths co processors of the time period such as the x87 &amp;amp; Motorola 68881 &amp;amp; 68882 &amp;amp; how do these chips differ from modern graphics cards?&lt;/p&gt;&#xA;" OwnerUserId="19655" LastActivityDate="2020-10-24T17:22:11.703" Title="How did graphics processing for old 8/16bit consoles work &amp; what are the differences between an FPU/maths co processor &amp; a graphics card?" Tags="&lt;z80&gt;&lt;6502&gt;&lt;nintendo&gt;&lt;sega-genesis&gt;&lt;sega&gt;" AnswerCount="4" CommentCount="2" ClosedDate="2020-10-24T17:24:14.243" ContentLicense="CC BY-SA 4.0" />
  <row Id="16650" PostTypeId="2" ParentId="16649" CreationDate="2020-10-24T13:56:05.873" Score="3" Body="&lt;p&gt;The video circuitry was a lot simpler in those days and there was no true GPU as we have today. The video memory was part of the CPU memory space and any video circuitry merely converted it into a video signal. There was no graphics processing outside of what the CPU did.&lt;/p&gt;&#xA;&lt;p&gt;Some, particularly earlier systems use discrete components to produce a simple video display such as the Apple II, the early Commodore PETs, and the TRS-80.&lt;/p&gt;&#xA;&lt;p&gt;Some systems had a PLA (Programmable Logic Array) such as the Sinclair ZX-81 and Sinclair ZX Spectrum.&lt;/p&gt;&#xA;&lt;p&gt;Some systems had a video shifter such as the TIA on the Atari 2600 but the 6502 did most of the work.&lt;/p&gt;&#xA;&lt;p&gt;Some systems had CRT controllers such as the Motorola MC6845 on the BBC Micro and Amstrad CPC and the MDA, CGA, and EGA adapters on the IBM PC.&lt;/p&gt;&#xA;&lt;p&gt;Some systems had a Video Interface Controller, such as the VIC in the VIC-20 and the VIC-II in the Commodore 64. and the Motorola MC6847 in the Tandy Color Computers.&lt;/p&gt;&#xA;&lt;p&gt;The more powerful graphics chips were the ANTIC on the Atari 8-bit computers, the TMS9918 on the TI-99/4(A), MSX, and ColecoVision, and the Agnus on the Amiga 16-bit computers.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2020-10-24T13:56:05.873" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16651" PostTypeId="2" ParentId="16649" CreationDate="2020-10-24T14:34:29.120" Score="2" Body="&lt;p&gt;A standalone processor, such as the ones you have listed, would usually only be able to perform some basic operations on integer data. This would typically be add and subtract because those operations can be trivially implemented with minimal amounts of logic (see &lt;a href=&quot;https://www.youtube.com/channel/UCS0N5baNlQWJCUrhCEo8WlA&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ben Eater&lt;/a&gt;'s series on building a CPU on a breadboard as an example).&lt;/p&gt;&#xA;&lt;p&gt;Earlier versions of the 68000 (for example) could only perform multiply or divide on &amp;quot;words&amp;quot; - that is 16 bits. A math co-processor would enable the CPU to perform multiply and divide on &amp;quot;longs&amp;quot; (32 bits) or perhaps even bigger numbers. If the math co-processor also included an FPU (likely), then it would be able to perform such operations on floating point numbers too.&lt;/p&gt;&#xA;&lt;p&gt;A math co-processor is intended to help a standalone CPU perform more, or more complex operations than are implemented in its silicon, and without one, you are left to perform these operations in software which is naturally much slower.&lt;/p&gt;&#xA;&lt;p&gt;A modern GPU, which is built to be a number crunching powerhouse, can very likely do a lot of what a math co-processor can do, but it is not necessarily considered a general purpose math co-processor. People have used GPUs to do math intensive work in specialised applications (e.g. crypto currency mining), but that is not an every day thing to do. In general, they are built to process large amounts of numerical data in a graphical sense to draw textures on screen, stretch and contort them around objects, apply visual effects, etc. If you like, you could consider them an application specific math co-processor, offloading all of that intensive computation from the CPU.&lt;/p&gt;&#xA;&lt;p&gt;Math co-processors these days are more or less a thing of the past - all of the functionality they provided is now built-in to CPUs, so there is no need for external hardware to provide this kind of functionality.&lt;/p&gt;&#xA;&lt;p&gt;As for 8-bit era hardware and how it worked, this is going to differ wildly from maufacturer to maufacturer, just as computer systems in general did. Back then, it was anyones guess as to how the computing landscape would evolve, and what would eventually become &amp;quot;normal&amp;quot;. A lot of techniques and architectures were tried, some succeeded and others didn't.&lt;/p&gt;&#xA;&lt;p&gt;But given the capabilities of technology at the time, the operations the hardware performed was likely very simple, limited to applying colour palettes to sprites and positioning sprites on the screen, perhaps with some simple collision detection, and drawing to essentially a bit mapped screen.&lt;/p&gt;&#xA;&lt;p&gt;You're likely to find some videos on YouTube explaining how to use this hardware (I know there are some channels like &lt;a href=&quot;https://www.youtube.com/user/adric22&quot; rel=&quot;nofollow noreferrer&quot;&gt;The 8-bit Guy&lt;/a&gt; who have made their own modern games for things like the Commodore 64) which may give away some clues as to how it works, but finding definitive and specific information on how it actually functions beyond what datasheets are available is going to be difficult.&lt;/p&gt;&#xA;" OwnerUserId="13575" LastEditorUserId="13575" LastEditDate="2020-10-24T14:41:07.933" LastActivityDate="2020-10-24T14:41:07.933" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16652" PostTypeId="1" CreationDate="2020-10-24T16:23:50.263" Score="2" ViewCount="271" Body="&lt;p&gt;I would like to learn how to write drivers for Amiga OS. Seems like a daunting task, but I have spare time and I find great value for amiga (CDTV) community in particular. Currently if a CD ROM breaks there is no driver to replace it with a modern equivalent, nor use CD under any accelerator (apart from expensive and ancient stuff like savyna).&lt;/p&gt;&#xA;&lt;p&gt;If it was AWS or GCP you just type in xxx learning path and there you go. Here, I simply have no idea where to start. Should I learn 68k architecture, amiga hardware reference manual, HxD, assembler? Or is it still possible to hire someone skilled in this tech do do it for me? This is 30 years old, obsolete tech, the community is amazing, but we are hobbyists after all. What do you suggest to start with?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-10-25T07:59:18.723" Title="How to get started with writing drivers for amiga OS" Tags="&lt;amiga&gt;&lt;programming&gt;&lt;driver&gt;&lt;amiga-workbench-3.1&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16653" PostTypeId="2" ParentId="16649" CreationDate="2020-10-24T16:46:41.500" Score="2" Body="&lt;p&gt;Broadly speaking, all these systems worked in the same way. The base system is always the same, generate the lines and synchronisation pulses needed to build display frames.&lt;/p&gt;&#xA;&lt;p&gt;The video circuit (could be a single chip or not) knows when it starts a single frame, and has somewhere access to memory (which can be private or shared with the microprocessor). It starts to read memory and uses the read data to generate a video stream, line per line, and frame per frame.&lt;/p&gt;&#xA;&lt;p&gt;Implementations can use a single byte to represent 8 pixels (monochrome), or use several bits to represent colour (possibly through a fixed or configurable palette), or use a single byte to represent a character (which is then looked up through a ROM table (fixed font) or RAM (configurable font)).&lt;/p&gt;&#xA;&lt;p&gt;Part of the functionality is the generation of interrupts when (or just before) the horizontal and vertical video pulses are generated, so that the processor can do meaningful work for the video picture during those times that there is no output, e.g. moving objects in the video memory, reconfiguring the palette, ...&lt;/p&gt;&#xA;&lt;p&gt;Additions to the video circuits were things like the sprites for VIC-20/C64, which made it possible to have (some) moving objects completely done by the video circuitry so that the processor could do other work, or collision detection. The NES PPU is an example of a circuit with a private address space and additions for sprites and colour palettes.&lt;/p&gt;&#xA;&lt;p&gt;With the advent of very high level integration, it became possible to create processors that worked alongside the main microprocessor and could manipulate objects through application of linear algebra (matrix computations) in the graphics memory itself. This lead to the development of graphical processing units with their extremely large performance.&lt;/p&gt;&#xA;&lt;p&gt;Before this was possible, the addition of a floating point unit (or other specialised math coprocessors) helped speed up the work of the main microprocessor to manipulate graphics (30 years ago, adding an 80387 to a PC helped with using AutoCad, or running Doom), in the same way, by performing and speeding up linear algebra operations.&lt;/p&gt;&#xA;" OwnerUserId="7388" LastActivityDate="2020-10-24T16:46:41.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16654" PostTypeId="2" ParentId="16649" CreationDate="2020-10-24T17:22:11.703" Score="1" Body="&lt;p&gt;Not really an answer, but...&lt;/p&gt;&#xA;&lt;p&gt;...The phrase &amp;quot;co-processor,&amp;quot; can mean two different things.&lt;/p&gt;&#xA;&lt;p&gt;When you're talking about a &amp;quot;floating point co-processor&amp;quot; or &amp;quot;FPU,&amp;quot; you're probably talking about a chip that extends the capabilities of the main CPU. In a very real sense, it becomes &lt;em&gt;part&lt;/em&gt; of the CPU when it is installed. It adds functional units, and it extends the CPU instruction set. This type of closely coupled &amp;quot;co-processor&amp;quot; can not function independently of the CPU for which it was designed.&lt;/p&gt;&#xA;&lt;p&gt;When you're talking about a typical &amp;quot;graphics card&amp;quot; or &amp;quot;graphics co-processor&amp;quot; or &amp;quot;GPU,&amp;quot; you probably are talking about a more loosely coupled sub-system of the computer. It runs its own software, different from the software that runs on the main CPU. I haven't actually done any GPU programming myself, but I'm reasonably certain that the communication between GPU and CPU happens at some significantly higher level than the op-code-by-op-code communication between a CPU and its FPU.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Also, when you say &amp;quot;graphics card,&amp;quot; you could be talking about a range of different things. It could be as simple as some RAM, and some hardware that generates a video signal from the contents of the RAM, or it could be that plus a GPU to make a complete, autonomous computing sub-system, or it could be somewhere in-between (e.g., a video frame buffer plus a hard-wired &amp;quot;raster-op&amp;quot; engine that can perform a few, specialized operations on the VRAM content.&lt;/p&gt;&#xA;" OwnerUserId="588" LastActivityDate="2020-10-24T17:22:11.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16656" PostTypeId="1" CreationDate="2020-10-24T19:11:30.677" Score="17" ViewCount="564" Body="&lt;p&gt;The closest I was able to find on StackOverflow is &lt;a href=&quot;https://stackoverflow.com/questions/10285410/what-are-s-files&quot;&gt;What are .S files?&lt;/a&gt;, in which no answerer addresses &lt;em&gt;why&lt;/em&gt; we use &lt;code&gt;.s&lt;/code&gt; for assembly. (And &lt;code&gt;.S&lt;/code&gt; for preprocessor/macro assembly; and &lt;code&gt;gcc -S&lt;/code&gt; to produce assembly...)&lt;/p&gt;&#xA;&lt;p&gt;(By &amp;quot;we,&amp;quot; I mean basically the POSIX ecosystem. I understand that the &lt;code&gt;.s&lt;/code&gt; convention isn't universal. But the convention that &lt;em&gt;does&lt;/em&gt; exist, must have originated somewhere.)&lt;/p&gt;&#xA;&lt;p&gt;My wild guesses are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;.s&lt;/code&gt; for &amp;quot;source,&amp;quot; as opposed to &lt;code&gt;.o&lt;/code&gt; for &amp;quot;object.&amp;quot; Seems to require a timeline where we had 8.3 filesystems before we had high-level languages.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;.s&lt;/code&gt; for aSsembler, because &lt;code&gt;.a&lt;/code&gt; was already occupied by Archive.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Anyone got an authoritative answer, or any anecdotal citations to establish a &amp;quot;not after&amp;quot; date?&lt;/p&gt;&#xA;" OwnerUserId="3581" LastActivityDate="2020-10-25T17:33:43.563" Title="Where and when did the &quot;.s&quot; suffix for assembly-language source files originate?" Tags="&lt;assembly&gt;&lt;unix&gt;&lt;file-format&gt;&lt;compilers&gt;&lt;file-system&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16657" PostTypeId="2" ParentId="16647" CreationDate="2020-10-24T19:28:16.430" Score="1" Body="&lt;p&gt;Sounds to me like &lt;a href=&quot;https://www.youtube.com/watch?v=o-IGDKtER2M&quot; rel=&quot;nofollow noreferrer&quot;&gt;Starglider&lt;/a&gt;, one of my two favorite games for the Commodore. The towers in the game flank energy rails, which are used to charge up the spacecraft. Interesting note, this game came bundled with &lt;a href=&quot;https://www.goodreads.com/book/show/52007803-starglider&quot; rel=&quot;nofollow noreferrer&quot;&gt;a novel&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/o-IGDKtER2M?t=442&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is a video of the gameplay.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PWC7G.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PWC7G.png&quot; alt=&quot;Video of Starglider gameplay&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="543" LastEditorUserId="543" LastEditDate="2020-10-25T20:17:00.973" LastActivityDate="2020-10-25T20:17:00.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16658" PostTypeId="2" ParentId="16628" CreationDate="2020-10-24T19:31:50.510" Score="1" Body="&lt;p&gt;My Turbo XT, which has a clone of the DTK PIM TB10 mainboard, picture of the original (10MB!) at &lt;a href=&quot;http://www.minuszerodegrees.net/xt_clone_bios/DTK%20PIM-TB10-Z%20of%20revision%209.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.minuszerodegrees.net/xt_clone_bios/DTK%20PIM-TB10-Z%20of%20revision%209.jpg&lt;/a&gt; seems to do exactly what you suggest. It has a 30MHz crystal oscillator and a 14.318 Crystal driven by the 8284. I did not look into the way they use to overcome the problem of clock glitches while switching between the two clock sources, but I did not encounter random crashes while toggling the turbo mode during operation yet.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2020-10-24T19:31:50.510" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16659" PostTypeId="2" ParentId="16647" CreationDate="2020-10-24T19:32:37.680" Score="1" Body="&lt;p&gt;The description is only half-right for &lt;a href=&quot;https://en.wikipedia.org/wiki/Rescue_on_Fractalus!&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rescue On Fractalus&lt;/a&gt; but maybe it's the one. The towers in Rescue On Fractalus are enemy turrets, which need to be destroyed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/FbZ-chrOgGg?t=175&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is some gameplay&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ov9mj.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ov9mj.png&quot; alt=&quot;Screenshot of Rescue on Fractalus&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="543" LastEditorUserId="543" LastEditDate="2020-10-25T20:17:49.057" LastActivityDate="2020-10-25T20:17:49.057" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16660" PostTypeId="2" ParentId="16652" CreationDate="2020-10-25T07:59:18.723" Score="3" Body="&lt;p&gt;Amiga device drivers aren't &lt;em&gt;too&lt;/em&gt; hard to write, but the terminology and how we write software has changed in the last 35 years so it would seem quite alien if you weren't there the first time round. It is mostly boilerplate due to having to use C and all of its manual memory allocation and other tedious makework. However, you would need to learn enough about the platform to have a chance of knowing &lt;em&gt;which&lt;/em&gt; boilerplate to use. Commodore provided example code for basic drivers, but these assume you have a specific C compiler and development kit, which I certainly didn't have back in the day, so you'd either need to figure out the missing headers or acquire a yo-ho-ho copy of the compiler.&lt;/p&gt;&#xA;&lt;p&gt;If you want this badly enough to spend money on it, hiring somebody who was active in Amiga development would be a much easier solution and produce better results than starting from scratch yourself. I'd be inclined to approach &lt;a href=&quot;https://en.wikipedia.org/wiki/Matthew_Dillon&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matthew Dillon&lt;/a&gt; for this.&lt;/p&gt;&#xA;&lt;p&gt;However, it's possible that you don't need to do this at all. (Some versions of) the CDTV's extended ROM don't play nicely with newer Kickstarts, but the ROM only provides the device driver, ISO9660 filesystem, and the fancy menu. The latter is not necessary to boot CDTV discs. I know this because I lashed together bits of Aminet and some scripts (which detected the presence of a CD, and assigned C:/Devs:/etc to it before executing the CD's Startup-Sequence) to boot them on my Amiga 4000 with an Apple CD300 drive.&lt;/p&gt;&#xA;&lt;p&gt;As it happens, I too have a CDTV where the CD-ROM drive no longer works, but I have not yet attempted to fix it. However, one approach would be something like this: I also have a &lt;a href=&quot;https://apollo-accelerators.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vampire&lt;/a&gt; board, which replaces the Kickstart and provides a PATA port, and I'd install it in the CDTV. It's possible that the extended ROM would crash with the fancy 68080 Kickstart, so I'd remove said ROM if so. The CDTV would now be essentially just a standard Amiga 500 with Vampire at that point. I would then attach a disk (likely an SSD with a PATA-SATA converter) and a DVD drive from the spare parts bin to the Vampire, install AmigaOS and the CD-ROM drivers from Aminet, and then recreate the scripts from 25 years ago.&lt;/p&gt;&#xA;&lt;p&gt;While I have little doubt that this hack would work, it's unlikely to fit in the CDTV's case. But the problem there is with physically mounting hardware and making it look tidy, and not drivers as per your question.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2020-10-25T07:59:18.723" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16661" PostTypeId="2" ParentId="16656" CreationDate="2020-10-25T14:08:12.240" Score="12" Body="&lt;p&gt;The V1 Unix &lt;a href=&quot;http://man.cat-v.org/unix-1st/1/b&quot; rel=&quot;noreferrer&quot;&gt;B manpage&lt;/a&gt; uses &lt;code&gt;.s&lt;/code&gt; as the extension for intermediate assembly files used during the build. This is the earliest use of &lt;code&gt;.s&lt;/code&gt; that I can find, and would correspond to November 1971 at the latest.&lt;/p&gt;&#xA;&lt;p&gt;There were assemblers on systems with file systems before Unix, but none that I’m aware of used &lt;code&gt;.s&lt;/code&gt;. Some like DECsys don’t appear to have extensions; other used extensions referring to the tool used to process files (&lt;em&gt;e.g.&lt;/em&gt; &lt;code&gt;.fap&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Unix &lt;code&gt;as&lt;/code&gt; was based on PAL-11R, which used the &lt;code&gt;PAL&lt;/code&gt; extension (see &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp11/dos-batch/DEC-11-ASDB-D_PAL-11R_Assembler_Programmers_Manual_May71.pdf&quot; rel=&quot;noreferrer&quot;&gt;page 9-2 of the PAL-11R manual&lt;/a&gt;, thanks &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/10854/another-dave&quot;&gt;another-dave&lt;/a&gt;!).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-10-25T17:33:43.563" LastActivityDate="2020-10-25T17:33:43.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16662" PostTypeId="1" AcceptedAnswerId="16663" CreationDate="2020-10-25T20:15:32.597" Score="8" ViewCount="1186" Body="&lt;p&gt;The Neo Geo has incredibly powerful sprite based hardware, but can it do raster effects?&lt;/p&gt;&#xA;&lt;p&gt;Raster effects are where changes to the graphics hardware registers are made mid frame, usually timed to be in the horizontal blanking period between scanlines but not always.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-10-25T20:57:12.470" Title="Is the NeoGeo capable of raster effects?" Tags="&lt;game-consoles&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16663" PostTypeId="2" ParentId="16662" CreationDate="2020-10-25T20:37:55.537" Score="11" Body="&lt;p&gt;The &lt;a href=&quot;https://wiki.neogeodev.org/index.php?title=Palettes&quot; rel=&quot;noreferrer&quot;&gt;palette information&lt;/a&gt; gives a hint:&lt;/p&gt;&#xA;&lt;p&gt;The maximum number of colors on screen &lt;strong&gt;without timer interrupt&lt;/strong&gt; tricks is: 256 palettes * 15 colors = 3840 (out of 2^16 = 65536).&lt;/p&gt;&#xA;&lt;p&gt;So, yes, it seems possible thanks to the &lt;a href=&quot;https://wiki.neogeodev.org/index.php?title=Timer_interrupt&quot; rel=&quot;noreferrer&quot;&gt;timer interrupt&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The value of this counter is decremented by the pixel clock, which runs at 6MHz (166.7ns period).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;With this resolution of 1 pixel, it looks like it's designed for &lt;a href=&quot;https://wiki.neogeodev.org/index.php?title=Scanline_effects&quot; rel=&quot;noreferrer&quot;&gt;raster/scanline effects&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Examples of usage mention sophisticated effects like sprite deformation. One famous example is &lt;a href=&quot;https://wiki.neogeodev.org/index.php?title=Neo_Turf_Masters&quot; rel=&quot;noreferrer&quot;&gt;Neo Turf Master&lt;/a&gt;, where timer interrupts were used to fake 3D effects&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-10-25T20:57:12.470" LastActivityDate="2020-10-25T20:57:12.470" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16664" PostTypeId="1" AcceptedAnswerId="16665" CreationDate="2020-10-26T22:06:49.000" Score="4" ViewCount="364" Body="&lt;p&gt;Recently I've been playing around with an Amstrad CPC emulator. I haven't written BASIC code for years, but back in the day I did actually use a CPC for real.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, looking at documentation online, I see the CPC has a &lt;code&gt;CALL&lt;/code&gt; command, for executing arbitrary Z80 machine code subroutines. However, I'm having trouble finding much documentation about it; most command lists just say &amp;quot;if you don't know what this is, don't touch it!&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;CALL&lt;/code&gt; is followed by the address of the machine code to execute. Presumably a simple return-from-subroutine instruction will take you back to BASIC when you're done.&lt;/p&gt;&#xA;&lt;p&gt;That leaves the problem of how to pass data between BASIC and machine code. In particular, the &lt;code&gt;CALL&lt;/code&gt; command seems to accept additional parameters after the start address, but it doesn't seem to be documented what these actually do. (Sadly, there doesn't appear to be a way to return results back to BASIC.)&lt;/p&gt;&#xA;" OwnerUserId="11695" LastActivityDate="2020-10-26T23:05:55.170" Title="CPC BASIC &quot;CALL&quot; command" Tags="&lt;cpc&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16665" PostTypeId="2" ParentId="16664" CreationDate="2020-10-26T22:15:51.653" Score="5" Body="&lt;p&gt;Call accepts only integers and pointers as parameters; both are 16 bit values. The parameters are put on the BASIC stack. IX points to the top of that stack. The number of parameters is put into A. The machine code operation needs to take it from there, including figuring out (or just assuming) the data type of the parameters.&lt;/p&gt;&#xA;&lt;p&gt;For an example, see e.g. &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Technical_information_about_Locomotive_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cpcwiki.eu/index.php/Technical_information_about_Locomotive_BASIC&lt;/a&gt; ; but beware that the description is a little confusing.&lt;/p&gt;&#xA;&lt;p&gt;Note that when you pass a pointer, you effectively pass by reference, so a value can be returned to the variable that is being pointed to.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-10-26T23:05:55.170" LastActivityDate="2020-10-26T23:05:55.170" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16666" PostTypeId="2" ParentId="16664" CreationDate="2020-10-26T22:55:10.490" Score="1" Body="&lt;p&gt;A few pointers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A nice book for doing Z80 assembly from some HLL POV has always been Osborne's &lt;a href=&quot;http://www.bitsavers.org/pdf/osborne/books/Z80_Assembly_Language_Subroutines_1983.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z80 Assembly Language Subroutines&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For CPC specific addresses you might want to look at CPC related sites like the &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Main_Page&quot; rel=&quot;nofollow noreferrer&quot;&gt;CPCWIKI&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And the generic 8080 return instruction is &lt;a href=&quot;http://z80-heaven.wikidot.com/instructions-set:ret&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;RET&lt;/code&gt;&lt;/a&gt; (C9h)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Conditional return is &lt;code&gt;RET xx&lt;/code&gt; with xx as condition.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-10-26T22:55:10.490" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16669" PostTypeId="1" CreationDate="2020-10-27T00:50:42.497" Score="3" ViewCount="288" Body="&lt;p&gt;I bought a Playstation 2 in 2000, which famously included a DVD drive capable of playing DVD movies. I wanted the same movie playback capability on my Windows 98 PC.&lt;/p&gt;&#xA;&lt;p&gt;As I recall, I mistakenly thought this would mostly be a matter of just upgrading my PC's optical drive to a DVD-ROM. I did so, but never had working DVD video playback. I don't recall whether it was an issue of my PC specs, or needing some additional hardware or software for video decoding. I never upgraded beyond Windows 98 and switched to a PowerPC Mac around 2005, which by then had DVD playback out-of-box.&lt;/p&gt;&#xA;&lt;p&gt;I'm sure there must have been a moment when PC &amp;amp; video card specs and Windows software (ME?, XP?) came into alignment for easy DVD playback on most Windows PCs. And I do recall there was a brief craze over &amp;quot;Home Theater PC's&amp;quot; (HTPC) in the early 2000's. Now, I am thinking about accessing this feature on a retro PC.&lt;/p&gt;&#xA;&lt;p&gt;Which version of Windows first supported DVD movie playback out-of-box, using what included playback software, and with what required PC specifications?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="15334" LastEditDate="2020-11-04T17:56:13.510" LastActivityDate="2020-11-04T17:56:13.510" Title="What old version of Windows provides out-of-the-box DVD movie playback?" Tags="&lt;video&gt;&lt;windows&gt;&lt;disk-drive&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16670" PostTypeId="2" ParentId="16669" CreationDate="2020-10-27T01:01:44.510" Score="6" Body="&lt;p&gt;The first version of Windows to support out-of-the-box DVD playback is Windows XP Media Centre Edition*, which was created specifically to target the HTPC fad that you mention, and it also has some special &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_XP_editions#Hardware_requirements&quot; rel=&quot;nofollow noreferrer&quot;&gt;hardware requirements&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The only mainstream versions of Windows to play DVDs without additional software were Windows Vista Home Premium and Ultimate, and Windows 7**.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;* &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_XP_Media_Center_Edition&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Windows XP Media Center Edition is distinguished with its exclusive component, Media Center, a media player that supports watching and recording TV programs, as well as playing DVD-Video&amp;quot;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;** &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_Media_Player&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;MPEG-2 and Dolby Digital (AC-3) decoders were included beginning with Windows Media Player 11 on Windows Vista (Home Premium and Ultimate editions only).&amp;quot;&lt;/a&gt;; &lt;a href=&quot;https://www.wikihow.com/Play-DVDs-on-Windows-Media-Player&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Unfortunately, the Windows Media Player program doesn't support DVDs in Windows 8 and 10&amp;quot;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4335" LastEditDate="2020-10-27T14:22:30.883" LastActivityDate="2020-10-27T14:22:30.883" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16671" PostTypeId="1" CreationDate="2020-10-27T03:30:44.740" Score="2" ViewCount="100" Body="&lt;p&gt;I have under my disposal some Ford EECV bin files and my goal for the next few weeks is to retrieve the functions and tables and plot them out before going onto DIY hardware . .&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know which platforms to use to analyze Ford/Intel 8061/8065 bin files or possible disassemble them? I checked into the bin files today using notepad++ hex editor plugin and didn't get much strings except for 'Ford copyright 2002' but I do see some hex patterns floating around. . thus I would I find a disassembling platform or hack it with the 8061 manual?&lt;/p&gt;&#xA;&lt;p&gt;Also, pardon my ignorance, but how do you regulars retrieve bin files? I know you can stick the ROM into the ROM reader but intuitively I feel that people also get bin files from the OBD port upon KOEO and get the 'ROM dump' from the RAM in the ECU. Is that the 'frontdoor' way of getting live data?&lt;/p&gt;&#xA;&lt;p&gt;ps. pardon my use of semantics.&lt;/p&gt;&#xA;" OwnerUserId="19753" LastActivityDate="2020-10-27T03:50:05.063" Title="advice for retrieving functions and tables from intel 8061/8065 bin file (reverse engineering) from Ford EECV ECU" Tags="&lt;intel&gt;&lt;rom&gt;&lt;disassembly&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16673" PostTypeId="2" ParentId="3228" CreationDate="2020-10-27T05:01:00.733" Score="1" Body="&lt;p&gt;I think I know the music program you mean. I had it on my old IBM-XT. The link below isn't quite it, but I also remember this one. But I remember there being one in 80-column mode with a lot more song choices (30-50.) I am not even sure it was just a basic program, I feel like it was an .exe or .com file. That same IBM-XT had a game called &amp;quot;Beast&amp;quot; that I just found, where you have to crush the &amp;quot;beasts&amp;quot; in this random maze of pushable ASCII blocks. Beast lists as being from 1984, if that helps. I wonder if these were part of some IBM XT software package?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=y_bqgTDtV8s&quot; rel=&quot;nofollow noreferrer&quot;&gt;music.bas on youtube&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19754" LastEditorUserId="19754" LastEditDate="2020-10-27T05:23:57.563" LastActivityDate="2020-10-27T05:23:57.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16674" PostTypeId="1" AcceptedAnswerId="16677" CreationDate="2020-10-27T06:12:21.873" Score="4" ViewCount="199" Body="&lt;p&gt;I'm developing a game for C64 using CC65 to compile my C code to ASM. To get started quickly, I have been defining the data for my sprites in C arrays and then copying the data in those arrays to the correct location in memory for my sprites to point to. I have pointed the VIC II to Bank 3 and have my sprite data starting at 0xE000. This has been working fine but obviously that means my sprite data is stored in two places and that is not ideal.&lt;/p&gt;&#xA;&lt;p&gt;So I want to load the data directly to 0xE000 at compile time using a segment in an ASM file like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.segment &amp;quot;GFXDATA&amp;quot;&#xA;&#xA;.byte $7f,$ff,$fe,$e0,$00,$01,$e0,$00&#xA;.byte $01,$e0,$00,$01,$e0,$00,$01,$e0&#xA;.byte $00,$01,$e0,$c0,$c1,$e1,$21,$21&#xA;.byte $e0,$00,$01,$e0,$00,$01,$e0,$00&#xA;.byte $01,$e0,$3f,$01,$e0,$40,$81,$e0&#xA;.byte $80,$41,$e1,$00,$21,$e0,$00,$01&#xA;.byte $e0,$00,$01,$e0,$00,$01,$ff,$ff&#xA;.byte $ff,$ff,$ff,$ff,$7f,$ff,$fe,$01&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To start with I created a simple test program that doesn't switch VIC Banks and loading the sprite data at 0x0840. This works fine after I modified the CC65 config file to look like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FEATURES {&#xA;    STARTADDRESS: default = $0801;&#xA;}&#xA;SYMBOLS {&#xA;    __LOADADDR__:  type = import;&#xA;    __EXEHDR__:    type = import;&#xA;    __STACKSIZE__: type = weak, value = $0800; # 2k stack&#xA;    __HIMEM__:     type = weak, value = $D000;&#xA;}&#xA;MEMORY {&#xA;    ZP:       file = &amp;quot;&amp;quot;, define = yes, start = $0002,           size = $001A;&#xA;    LOADADDR: file = %O,               start = %S - 2,          size = $0002;&#xA;    HEADER:   file = %O, define = yes, start = %S,              size = $000D;&#xA;    MAIN:     file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__;&#xA;    BSS:      file = &amp;quot;&amp;quot;,               start = __ONCE_RUN__,    size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;&#xA;}&#xA;SEGMENTS {&#xA;    ZEROPAGE: load = ZP,       type = zp;&#xA;    LOADADDR: load = LOADADDR, type = ro;&#xA;    EXEHDR:   load = HEADER,   type = ro;&#xA;    STARTUP:  load = MAIN,     type = ro;&#xA;    GFXDATA:  load = MAIN,     type = ro;&#xA;    LOWCODE:  load = MAIN,     type = ro,  optional = yes;&#xA;    CODE:     load = MAIN,     type = ro;&#xA;    RODATA:   load = MAIN,     type = ro;&#xA;    DATA:     load = MAIN,     type = rw;&#xA;    INIT:     load = MAIN,     type = rw;&#xA;    ONCE:     load = MAIN,     type = ro,  define   = yes;&#xA;    BSS:      load = BSS,      type = bss, define   = yes;&#xA;}&#xA;FEATURES {&#xA;    CONDES: type    = constructor,&#xA;            label   = __CONSTRUCTOR_TABLE__,&#xA;            count   = __CONSTRUCTOR_COUNT__,&#xA;            segment = ONCE;&#xA;    CONDES: type    = destructor,&#xA;            label   = __DESTRUCTOR_TABLE__,&#xA;            count   = __DESTRUCTOR_COUNT__,&#xA;            segment = RODATA;&#xA;    CONDES: type    = interruptor,&#xA;            label   = __INTERRUPTOR_TABLE__,&#xA;            count   = __INTERRUPTOR_COUNT__,&#xA;            segment = RODATA,&#xA;            import  = __CALLIRQ__;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The only line I added was this one:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;GFXDATA:  load = MAIN,     type = ro;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That all works as expected.&lt;/p&gt;&#xA;&lt;p&gt;So my next test was to try and get the sprite data in Bank 3 like in my game. This is where it has come unstuck. I successfully point the VIC to Bank 3, but my sprites are completely blank. The data doesn't seem to be loaded properly now. Here is the config file I have created to try and get this to work:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FEATURES {&#xA;    STARTADDRESS: default = $0801;&#xA;}&#xA;SYMBOLS {&#xA;    __LOADADDR__:  type = import;&#xA;    __EXEHDR__:    type = import;&#xA;    __STACKSIZE__: type = weak, value = $0800; # 2k stack&#xA;    __HIMEM__:     type = weak, value = $D000;&#xA;}&#xA;MEMORY {&#xA;    ZP:       file = &amp;quot;&amp;quot;, define = yes, start = $0002,           size = $001A;&#xA;    LOADADDR: file = %O,               start = %S - 2,          size = $0002;&#xA;    HEADER:   file = %O, define = yes, start = %S,              size = $000D;&#xA;    MAIN:     file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__;&#xA;    BSS:      file = &amp;quot;&amp;quot;,               start = __ONCE_RUN__,    size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;&#xA;    GFXDATA:  start = $E000, size = $0040, file = %O, define = yes;&#xA;}&#xA;SEGMENTS {&#xA;    ZEROPAGE: load = ZP,       type = zp;&#xA;    LOADADDR: load = LOADADDR, type = ro;&#xA;    EXEHDR:   load = HEADER,   type = ro;&#xA;    STARTUP:  load = MAIN,     type = ro;&#xA;    LOWCODE:  load = MAIN,     type = ro,  optional = yes;&#xA;    CODE:     load = MAIN,     type = ro;&#xA;    RODATA:   load = MAIN,     type = ro;&#xA;    DATA:     load = MAIN,     type = rw;&#xA;    INIT:     load = MAIN,     type = rw;&#xA;    ONCE:     load = MAIN,     type = ro,  define   = yes;&#xA;    BSS:      load = BSS,      type = bss, define   = yes;&#xA;    GFXDATA:  load = GFXDATA,  type = ro;&#xA;}&#xA;FEATURES {&#xA;    CONDES: type    = constructor,&#xA;            label   = __CONSTRUCTOR_TABLE__,&#xA;            count   = __CONSTRUCTOR_COUNT__,&#xA;            segment = ONCE;&#xA;    CONDES: type    = destructor,&#xA;            label   = __DESTRUCTOR_TABLE__,&#xA;            count   = __DESTRUCTOR_COUNT__,&#xA;            segment = RODATA;&#xA;    CONDES: type    = interruptor,&#xA;            label   = __INTERRUPTOR_TABLE__,&#xA;            count   = __INTERRUPTOR_COUNT__,&#xA;            segment = RODATA,&#xA;            import  = __CALLIRQ__;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The main different here is that I am trying to define a new memory area outside of MAIN. One called GFXDATA that starts where my sprites would start at 0xE000. Then I am loading the segment into that.&lt;/p&gt;&#xA;&lt;p&gt;I must admit I am a pixel artist and game designer first, and a coder second, so I may be missing some really important concepts here.&lt;/p&gt;&#xA;&lt;p&gt;Any help is much appreciated!&lt;/p&gt;&#xA;" OwnerUserId="19755" LastActivityDate="2020-10-27T16:21:19.980" Title="Commodore 64 CC65 - I need help with config set up for using a data segment in Bank 3" Tags="&lt;commodore-64&gt;&lt;cc65&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16675" PostTypeId="1" AcceptedAnswerId="16678" CreationDate="2020-10-27T08:49:14.317" Score="6" ViewCount="1060" Body="&lt;p&gt;One of my favourite computer history books is Stan Augarten's &amp;quot;Bit by Bit&amp;quot;, which has an author-approved scanned copy at &lt;a href=&quot;http://ds-wordpress.haverford.edu/bitbybit/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ds-wordpress.haverford.edu/bitbybit/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In it, the author makes the following assertion:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As a former military pilot, Tom Watson was quite familiar with radar and other avionic devices – the typical B-29 had about a thousand tubes – and he had a fine appreciation for the potential of electronic technology. Although Watson Senior and other old hands at the company believed that IBM’s customers would shy away from anything electronic, considering it too advanced and possibly unreliable, Watson decided to let his son test his hunch. ... To everyone’s surprise – including Tom’s – the entire lot was snapped up.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Allowing that bombsights and fire-control computers were still basically mechanical devices in 1946, should one assume that Watson Jr.'s enthusiasm was solely because he recognised that tubes (valves in UK English) could be reliable (and somebody in IBM had introduced him to the idea of digital electronics), or because the B-29 bomber contained digital equipment which has not so far been widely discussed?&lt;/p&gt;&#xA;" OwnerUserId="18835" LastEditorUserId="2037" LastEditDate="2020-10-28T05:09:11.780" LastActivityDate="2020-10-28T05:09:11.780" Title="What specific factor(s) made Thomas Watson, Jr. (of IBM) so enthusiastic about early electronics?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;mainframe&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16676" PostTypeId="2" ParentId="14235" CreationDate="2020-10-27T09:15:59.903" Score="0" Body="&lt;p&gt;This is a late answer but I hope that it might to some small extent be useful.&lt;/p&gt;&#xA;&lt;p&gt;I've not delved into the original IBM APL to any extent other than to adapt my 2741 emulator to handle it, but have gone moderately deeply into other applications in particular derivatives of Ken Thompson's APL/11.&lt;/p&gt;&#xA;&lt;p&gt;I can't remember whether the &lt;em&gt;source&lt;/em&gt; of IBM APL was ever made available, my recollection was that after the Silverberg(?) brothers reconstituted it from tape nobody in IBM would authorise the release of anything other than a binary.&lt;/p&gt;&#xA;&lt;p&gt;In the general case, I don't think an implementation saves an APL workspace etc. as the characters as entered, since this would mess up compatibility between different types of terminal (e.g. IBM printing terminals such as the 2741, and CRT-based terminals in the 3270 range).&lt;/p&gt;&#xA;&lt;p&gt;I don't believe that an implementation saves a compound (overstruck) operation as a single character, since ultimately the number of potential compound operators comes close to exhausting the free codepoints in EBCDIC.&lt;/p&gt;&#xA;&lt;p&gt;I don't believe that an implementation trivially tokenises. I think that in general what happens is that it reads the input into a buffer (where it can still be edited to some extent character-by-character), parses left-to-right (saving operations in numeric form, i.e. + becomes a single number, antilog becomes a single number and so on), and then evaluates right-to-left.&lt;/p&gt;&#xA;&lt;p&gt;Finally, I agree that APL is great and can be spectacularly efficient... provided that one doesn't look too closely at storage requirements (there are plenty of stories of elegant APL programs sending a mainframe into a paroxysm of thrashing, and taking months to complete).&lt;/p&gt;&#xA;" OwnerUserId="18835" LastActivityDate="2020-10-27T09:15:59.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16677" PostTypeId="2" ParentId="16674" CreationDate="2020-10-27T09:53:41.473" Score="0" Body="&lt;p&gt;&lt;em&gt;(This seems like an essential duplicate of this question: &amp;quot;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13188/putting-code-into-two-different-memory-areas-with-cc65-ca65&quot;&gt;Putting code into two different memory areas with cc65/ca65&lt;/a&gt;&amp;quot;)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Short answer:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;CC65 is a compiler, not a loader&lt;/strong&gt; - and the C64 does only provide a minimal loader moving one continuous chunk of data to a single address. You may need your own loading scheme, or a more sophisticated loader.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;All the structural information given (*1) is used to define base values for the generated code. The binary will still simply contain all segments consecutively. It still needs a loader to move the data blocks to each destination address. CC65 as a generic/multi platform tool does not provide one, as that is a machine specific function.&lt;/p&gt;&#xA;&lt;p&gt;Simple programs are an exception, as they do not need any segment moving. So either you stay with your original version (and reuse the area were the sprites are delivered by the C64 loader) or you write a custom loader - eventually based on the segment data generated by the compiler. See &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13189/6659&quot;&gt;this answer&lt;/a&gt; for some additional information.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - I like the detailed structuring, serious, but in case of learning a new tool it might be helpful to cut it down to minimum.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2020-10-27T16:21:19.980" LastActivityDate="2020-10-27T16:21:19.980" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16678" PostTypeId="2" ParentId="16675" CreationDate="2020-10-27T10:12:28.067" Score="4" Body="&lt;p&gt;There is a significant step between mechanical (digital and analogue) devices, and digital electronics: Analogue electronic equipment. It appears that this is what the assertion is referring to. The B-29 contained a lot of electronic radio equipment: &lt;a href=&quot;https://aafradio.org/flightdeck/b29.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://aafradio.org/flightdeck/b29.htm&lt;/a&gt;. Additionally there is the &lt;a href=&quot;https://en.wikipedia.org/wiki/H2X&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/H2X&lt;/a&gt; radar and APN-9 LORAN radio navigation equipment.&lt;/p&gt;&#xA;&lt;p&gt;Since digital equipment is built out of analogue electronics, the underlying technologies needed to get stable and cheap enough for building digital circuitry out of them to become practical.&lt;/p&gt;&#xA;" OwnerUserId="18058" LastEditorUserId="18058" LastEditDate="2020-10-27T10:55:34.753" LastActivityDate="2020-10-27T10:55:34.753" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16679" PostTypeId="2" ParentId="16675" CreationDate="2020-10-27T11:26:43.633" Score="5" Body="&lt;p&gt;I don't know about IBM, but in the UK, people like &lt;a href=&quot;https://en.wikipedia.org/wiki/Maurice_Wilkes&quot; rel=&quot;nofollow noreferrer&quot;&gt;Maurice Wilkes&lt;/a&gt; gained wartime practical experience with electronics operating at megahertz frequencies and with delay-line storage, this latter being used to store one radar 'frame', so that background images could be screened out by subtracting one frame from the next.&lt;/p&gt;&#xA;&lt;p&gt;As recounted in &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0262231220&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;his memoirs&lt;/a&gt;, this gave Wilkes the knowledge and confidence to design and build the &lt;a href=&quot;https://en.wikipedia.org/wiki/EDSAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;EDSAC&lt;/a&gt;, one of the first stored-program digital computers in service.&lt;/p&gt;&#xA;&lt;p&gt;Digital techniques still had to be invented, but the underlying electronics technology was largely understood.&lt;/p&gt;&#xA;&lt;p&gt;The relevance to Watson at IBM is, I suppose, that people grew sufficiently familiar with electronics technology to believe that complex systems could be built, and could be made sufficiently reliable that important work could be completed.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-10-27T19:23:04.853" LastActivityDate="2020-10-27T19:23:04.853" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16680" PostTypeId="2" ParentId="16511" CreationDate="2020-10-27T15:19:37.963" Score="7" Body="&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The solution below ultimately failed to work for the asker as-is. I presume this is because my printable &lt;code&gt;auxcopy&lt;/code&gt; binary was not written well enough to operate correctly on bare hardware (it was only tested in a VM); perhaps this flaw can be easily corrected, but I am not yet able to see how. Nevertheless, as it seems to have served as a major inspiration for &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/16781/15334&quot;&gt;the asker’s own solution&lt;/a&gt;, I am leaving it here for posterity.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Based on the question body and subsequent clarifications in the chat, the asker’s situation is a quite tricky one. The floppy drive is currently non-functional and is yet to be configured by a separate executable, which is not available at the moment. There is apparently a copy of MS-DOS 6 stored on a DoubleSpace-compressed disk, but it cannot be booted either. The only operating system that the asker can boot is a copy of PC DOS 4.0 stored in the machine’s ROM.&lt;/p&gt;&#xA;&lt;p&gt;But that should be enough.&lt;/p&gt;&#xA;&lt;p&gt;The PS/1 contains one other piece of hardware that you can use to transfer data between it and the outside world: the serial port. Using a null-modem cable, you can connect two PCs directly and send data from one to the other. To have data transferred via the serial line properly delimited into files, you will need a file transfer program. For example, a program whose binary code is as follows&lt;sup&gt;−1&lt;/sup&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PYX5!!,TP-N!5~LP-b!-~rP5!uP-!G-&amp;amp;~P59!-~&amp;amp;P-~D,DP5!!5;.P-{$%-JP5bxP=&#xA;@@@P5r7P5!B,9P-~D,rP5P!-x&amp;quot;P-Q!5&amp;amp;]PHP-y!%wBP5K=P5N9P5^6P5X&amp;lt;P5HrP=&#xA;-J!-~pP-5!%&amp;lt;*P-!+5o/P-5!%&amp;lt;-P-!.5o+P-u4%&amp;lt;`P-~',JP-~7,rP-9!-~}P=&#xA;5y&amp;quot;P5y&amp;quot;P-O!5~LP-!!-BrP-!!5]|P5!&amp;amp;,6P-~E,FP5!!-Z4P-~v,.P-K0P-~G,JP=&#xA;5!!-b2P-~v,.P-K0P-~G,VP5&amp;quot;2,;P-~,,dP5#&amp;lt;,_P-&amp;quot;%%DHP5!!-#&amp;gt;P5'_,!P=&#xA;-~&amp;gt;,5P5!!5p&amp;amp;P5!Y,9P-~A,bP-!!56)PPPPPP-!&amp;quot;58~P-!#-|~P5!!5~?P-5&amp;quot;%u$P=&#xA;5!!5&amp;amp;IP54lP5&amp;amp;!-~8P-!)5#nPP-!!5#`P4!HP-tHP-!)5P+P5!!5\'P5!%,9P=&#xA;-!!-?pP5!@-5/P-~V,pP-!!5f6P5!!-&amp;quot;UP-!!572P-9!-~yPT]-R!%8CP[5[sP=&#xA;_-5a-~~PPXX)?BF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You can enter this program into the machine from the keyboard, using the command &lt;code&gt;copy con auxcopy.com&lt;/code&gt;; when done, press &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Z&lt;/kbd&gt; (or &lt;kbd&gt;F6&lt;/kbd&gt;) to return to the DOS prompt. This program has been carefully constructed to ensure this is possible to do by maintaining the following properties:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All the bytes other than line breaks are printable ASCII characters, readily possible to enter from a US-layout keyboard.&lt;/li&gt;&#xA;&lt;li&gt;No line is longer than 80 lines; this is to accommodate the line buffer size of 128 bytes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Other than line breaks, there are no whitespace characters in the binary. The line breaks are supposed to be encoded as CR+LF (as they usually are under DOS). Pay attention to confusable pairs (like &lt;code&gt;O&lt;/code&gt; vs &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;5&lt;/code&gt; vs &lt;code&gt;S&lt;/code&gt;, &lt;code&gt;'&lt;/code&gt; vs &lt;code&gt;`&lt;/code&gt;, etc.) when typing the file in.&lt;/p&gt;&#xA;&lt;p&gt;I expect the compressed hard drive to contain just enough free space to let this small executable and a little more data fit in the uncompressed area; DoubleSpace by default leaves some amount of free space available there.&lt;/p&gt;&#xA;&lt;p&gt;What this program does&lt;sup&gt;0&lt;/sup&gt; is read a slightly modified form of base64&lt;sup&gt;1&lt;/sup&gt; from the serial port and writes decoded data to standard output. This modified base64 can be generated from a given file by the following Unix command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;base64 -w0 &amp;lt; &amp;quot;${file}&amp;quot; | ( tr 'A-Za-z0-9+/=' '0-o~'; printf \~ )&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;After creating the executable on the DOS machine, launch it as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;C:\&amp;gt;AUXCOPY &amp;gt; file&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then, on the other end of the null-modem cable, send the encoded file over the serial port. The &lt;code&gt;AUXCOPY&lt;/code&gt; program will exit when the transfer finishes (as long as the final &lt;code&gt;~&lt;/code&gt; character is present). The serial port may need to be configured beforehand; on the PS/1 side that should be possible to accomplish by using the &lt;code&gt;MODE.COM&lt;/code&gt; executable stored with the ROM DOS.&lt;/p&gt;&#xA;&lt;p&gt;With this transfer program, you now have a good chance of bootstraping yourself out of this situation. You can use it to transfer any of the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &lt;code&gt;CONFIGUR.EXE&lt;/code&gt; program that will allow you to enable the floppy drive.&lt;/li&gt;&#xA;&lt;li&gt;System files from the MS-DOS 6 distribution, such as &lt;code&gt;SYS.COM&lt;/code&gt;, &lt;code&gt;IO.SYS&lt;/code&gt;, &lt;code&gt;MSDOS.SYS&lt;/code&gt;, &lt;code&gt;FDISK.EXE&lt;/code&gt;, &lt;code&gt;DEBUG.COM&lt;/code&gt; and &lt;code&gt;COMMAND.COM&lt;/code&gt;, to attempt to repair hard disk boot (or set it up in the first place)&lt;/li&gt;&#xA;&lt;li&gt;A more sophisticated serial file transfer program (supporting things like error correction), allowing you to extract files &lt;em&gt;from&lt;/em&gt; the PS/1 over the serial port.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;−1&lt;/sup&gt; I wrote — well, &lt;em&gt;constructed&lt;/em&gt;, the process was partially automated — this one myself, actually. I might post source code somewhere someday; I think the way I managed to create this program is quite interesting on its own. For now, I’ll leave it here as a puzzle for reverse engineering junkies.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;0&lt;/sup&gt; I tested it with a pair of QEMU instances whose serial ports were connected to each other via a FIFO.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;sup&gt;2&lt;/sup&gt;&lt;/sup&gt; The modification to base64 makes it simpler to decode, so that the decoding program is shorter.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; This superscript is both an exponent and a footnote.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-11-04T16:32:41.707" LastActivityDate="2020-11-04T16:32:41.707" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16681" PostTypeId="1" CreationDate="2020-10-27T19:54:57.103" Score="3" ViewCount="393" Body="&lt;p&gt;I'm trying to trace a type of system I did a little work on in my first job, which was for a company which no longer exists and I am not in regular touch with most of my former colleagues.&lt;/p&gt;&#xA;&lt;p&gt;It was a desktop-minicomputer style system, with a system unit and dumb terminals on (I think) RS-232.&lt;/p&gt;&#xA;&lt;p&gt;The main system unit was a big box, and had an integral CRT. I.e. the host machine had an integral terminal, or was even built into a terminal. This unit had an 8&amp;quot; floppy drive, vertically mounted to the right of the CRT. Behind the CRT in the (large, densely-packed) case was a hard disk drive of bigger than 8&amp;quot; platter size -- in fact the biggest I've ever seen in anything I actually worked on. 12&amp;quot; platters maybe? The capacity was quite small, I think 5MB to 20MB on bigger ones.&lt;/p&gt;&#xA;&lt;p&gt;It supported multiple users on dumb terminals.&lt;/p&gt;&#xA;&lt;p&gt;The system unit had a lot of boards in it -- I have a feeling the processor may not have been a single chip, but might have been distributed across several boards. We only had a few customers with them, and they were already very old machines when I worked on them in 1988-1989. Only one guy in the company really knew much about operating them, and he was also our main Alpha Micro engineer/programmer.&lt;/p&gt;&#xA;&lt;p&gt;I am fairly sure these were not Alpha Micro machines, though, and the OS was nothing like AMOS.&lt;/p&gt;&#xA;&lt;p&gt;Applications software was I think mainly bespoke, accountancy or maybe stock-tracking type functions.&lt;/p&gt;&#xA;&lt;p&gt;The OS was called something like CP/M-83 or something -- I think it was CP/M followed by a number but it might have been CPM* (CP/M Star) or something. I have a vague feeling it was not punctuated in the normal CP-slash-M place.&lt;/p&gt;&#xA;&lt;p&gt;The CLI was not even remotely CP/M or DOS-like. In my very minimal contact with things like IBM S/36 and AS/400, it was more like that: commands were short abbreviations, sometimes just a letter or two, with arguments that were often numeric. It was more like interacting with a machine-code monitor than any other shell I've used (quite a few: DEC VAX-VMS, DOS, Netware 2/3/4/5, etc.) It was not a DEC machine, either -- quite a lot of my early career involved VAX, Alpha and briefly PDP-11.&lt;/p&gt;&#xA;&lt;p&gt;We also supported Jarogate Sprite systems, running Concurrent CP/M -- it was not them, but it was an older system that was used in similar roles. (E.g. multiuser accounts systems.)&lt;/p&gt;&#xA;" OwnerUserId="209" LastEditorUserId="15334" LastEditDate="2021-02-11T15:17:55.447" LastActivityDate="2021-02-11T15:17:55.447" Title="Trying to recall an OS I worked on that was called CPM but was not DR's CP/M" Tags="&lt;identify-this-computer&gt;&lt;identify-this-software&gt;&lt;minicomputers&gt;" AnswerCount="2" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="16683" PostTypeId="1" AcceptedAnswerId="16684" CreationDate="2020-10-27T21:44:37.880" Score="1" ViewCount="113" Body="&lt;p&gt;I have a &lt;a href=&quot;https://bigbookofamigahardware.com/bboah/product.aspx?id=731&quot; rel=&quot;nofollow noreferrer&quot;&gt;CDTV ROM development board&lt;/a&gt;, and I know it is possible to flash it using floppies. How to make such floppy with a custom rom?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Gbl1k.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gbl1k.jpg&quot; alt=&quot;CDTV Flash Memory&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2021-03-26T23:07:50.617" Title="How to flash CDTV extended ROM using development board" Tags="&lt;floppy-disk&gt;&lt;rom&gt;&lt;amiga-cdtv&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16684" PostTypeId="2" ParentId="16683" CreationDate="2020-10-27T22:20:50.550" Score="1" Body="&lt;p&gt;&lt;em&gt;[Preface, what follows are wild guesses, looking at the photo while considering some basic knowledge about the CDTV and chips shown]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A quick look at the chips reveals that they exactly mimic the ROMs, so the floppy must contain a bootable image bringing up the loader software which in turn will load some binary image file into the chips. So the task is to find a genuine update disk, add your new image and burn it.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The alternative would be writing your own loader. Since the CDTV is otherwise much like an A500, booting a Kickstart should be possible, reducing the task to write a loader. This might be a rather straight forward task, as the used Intel 28F010 is a simple 128KiB chip erasable at one and byte wise writable.&lt;/p&gt;&#xA;&lt;p&gt;This brings the task down to decoding the circuit to get the addresses needed to switch on programming voltage (VPP) needed to access the command register and reading the &lt;a href=&quot;https://datasheetspdf.com/pdf-file/489619/Intel/28F010/1&quot; rel=&quot;nofollow noreferrer&quot;&gt;28F010 datasheet&lt;/a&gt;. The TTL are inverters ('06) and OR-gates('32) that might do address decoding and a '74 flip-flop, which probably is used to enable/disable programming.&lt;/p&gt;&#xA;&lt;p&gt;Once the address to set the FF is found, it should be simple to flip programming mode on, erase the devices according to the procedure explain in the datasheet and, after waiting for the device to finish, simply store the image into the FLASH. The chips seem to be wired in parallel, so programming might be only possible word wise (16 bit at once *1), with an appropriate wait between words (10µs). The data sheet holds a detailed description of the procedure(s).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - for a definite answer schematics have to be found or drawn up&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-27T22:33:12.647" LastActivityDate="2020-10-27T22:33:12.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16685" PostTypeId="1" AcceptedAnswerId="16760" CreationDate="2020-10-27T23:03:15.660" Score="3" ViewCount="492" Body="&lt;p&gt;On this &lt;a href=&quot;https://www.linux.org/threads/gparted-partition-and-filesystem-flags.11640/&quot; rel=&quot;nofollow noreferrer&quot;&gt;website&lt;/a&gt; (and others, of course) you could be informed that there is a special partition flag (“hidden”) to avoid detection by Microsoft operating systems.&lt;/p&gt;&#xA;&lt;p&gt;First: Is this a convention by/with MS or a trick?&lt;/p&gt;&#xA;&lt;p&gt;Second: How could a Microsoft OS be so dangerous to others’ partitions? Was there an advantage hidden in that?&lt;/p&gt;&#xA;&lt;p&gt;Third: When and why is this not used today in modern systems?&lt;/p&gt;&#xA;&lt;p&gt;Ok... The questions are somewhat rare and strange. But I think they have a potential to clarify some things of past and today.&lt;/p&gt;&#xA;" OwnerUserId="17729" LastEditorUserId="15334" LastEditDate="2020-11-04T16:41:37.790" LastActivityDate="2020-11-04T16:41:37.790" Title="The &quot;hidden&quot; flag on partitions and Microsoft" Tags="&lt;operating-system&gt;&lt;hard-disk&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16686" PostTypeId="2" ParentId="16685" CreationDate="2020-10-27T23:31:28.403" Score="7" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Master_boot_record#Partition_table_entries&quot; rel=&quot;nofollow noreferrer&quot;&gt;MBR partition tables&lt;/a&gt; have no 'flags', with one exception: the value at offset 0 that indicates the active or bootable partition.&lt;/p&gt;&#xA;&lt;p&gt;What they have is a partition type indicator, a byte value (0 to 255).&lt;/p&gt;&#xA;&lt;p&gt;DOS recognized certain partition types as containing file systems it knew about (FAT, FAT16, FAT32).  If you changed the type to something else, DOS would not recognize it, i.e., it would be 'hidden' from DOS.&lt;/p&gt;&#xA;&lt;p&gt;See list of &lt;a href=&quot;https://www.win.tue.nl/%7Eaeb/partitions/partition_types-1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;partition types&lt;/a&gt;.  It's claimed there that the OS/2 boot manager used to hide partitions except the currently booted system.  It did this by replacing the 0x4 type by 0x14, and so on.  So now we say that if 0x4 denotes FAT, 0x14 is a 'hidden' FAT partition.  But at base it's just a partition type that DOS does not recognize.&lt;/p&gt;&#xA;&lt;p&gt;The point, I suppose, was to ensure that a given DOS instance was isolated (when running) from other instances.&lt;/p&gt;&#xA;&lt;p&gt;Whether Microsoft or IBM was responsible for implementing that, I don't know.&lt;/p&gt;&#xA;&lt;p&gt;The same thing could be done in principle for any other OS's file system types.  To &amp;quot;hide&amp;quot; a partition from an OS, change the partition type to some number that the OS does not use or recognize. Of course, that needs the OS to leave alone partitions that it does not recognize, rather than doing something destructive to them.&lt;/p&gt;&#xA;&lt;p&gt;That there are no partition types reserved for &amp;quot;hidden&amp;quot; variants of other standard types is just a matter of need. No-one had any reason to want them, I assume.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/GUID_Partition_Table&quot; rel=&quot;nofollow noreferrer&quot;&gt;GUID partition tables&lt;/a&gt;, by contrast, have an attributes/flags quadword.  Microsof defines a 'hidden' flag at bit 60.&lt;/p&gt;&#xA;&lt;p&gt;On Windows 10&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DISKPART&amp;gt; detail part&#xA;&#xA;Partition 2&#xA;Type    : e3c9e316-0b5c-4db8-817d-f92df00215ae&#xA;Hidden  : Yes&#xA;Required: No&#xA;Attrib  : 0X8000000000000000&#xA;Offset in Bytes: 525336576&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;There's nothing particularly mysterious about this. Sometimes operating systems think that some things are not generally interesting, will clutter output, etc., and therefore define a mechanism to tag things as 'hidden'.&lt;/p&gt;&#xA;&lt;p&gt;It's not different in concept to, say, the fact that the Unix &amp;quot;ls&amp;quot; command does not, by default, show files whose names start with a dot.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-10-28T14:56:41.220" LastActivityDate="2020-10-28T14:56:41.220" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16687" PostTypeId="2" ParentId="16681" CreationDate="2020-10-28T07:24:00.863" Score="3" Body="&lt;p&gt;There are potentially many candidates for this question (&amp;quot;CP&amp;quot; for &amp;quot;Control Program&amp;quot; was used frequently in that era), so just to mention one:&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Sigma_9&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xerox Sigma 9&lt;/a&gt; had two Operating systems with a name similar to CP/M: CP-R &amp;quot;Control Program for Real-Time&amp;quot;, and CP-V &amp;quot;Control Program Five&amp;quot;. The latter included timesharing (multiuser).&lt;/p&gt;&#xA;&lt;p&gt;You can find manuals at &lt;a href=&quot;http://www.bitsavers.org/pdf/sds/sigma/&quot; rel=&quot;nofollow noreferrer&quot;&gt;bitsavers&lt;/a&gt; and the &lt;a href=&quot;https://livingcomputers.org/Computer-Collection/User-Documentation.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;Living Computer Museum&lt;/a&gt;, so please have a look if anything looks familiar.&lt;/p&gt;&#xA;&lt;p&gt;There are also &lt;a href=&quot;https://livingcomputers.org/Computer-Collection/Vintage-Computers/Mainframes/Xerox-Sigma-9.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;pictures&lt;/a&gt; at the museum website.&lt;/p&gt;&#xA;&lt;p&gt;At least in this installation, the main cabinet does not have an integral terminal, but often this was somewhat configurable (though I don't know if this was the case for the Sigma 9).&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-10-28T07:29:49.717" LastActivityDate="2020-10-28T07:29:49.717" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16688" PostTypeId="2" ParentId="16577" CreationDate="2020-10-28T07:53:59.540" Score="2" Body="&lt;p&gt;I simply have to add my take on this subject. And, basically, it misses the most important parts. You cannot talk about real-time unless you add two important parameters:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;what time scale are you talking about?&lt;/li&gt;&#xA;&lt;li&gt;what are the consequences of missing a deadline?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;My belief is that the wikipedia article as well as several of the answers given are very much a question of &amp;quot;old-school&amp;quot; thinking in the box. It used to be that real-time was esoteric, today it is extremely commonplace.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Time scale&lt;/strong&gt;&#xA;The definition of realtime might include working with things happening on the hour, the minute, the second, the millisecond, the microsecond or the nanosecond scale. No 6502 or 68000 microcomputer in itself will help you in controlling things happening on the nanosecond scale. On the other hand you could probably use any computer chip controlling things on the hourly scale. And all time scales do exist in what are called real-time. Controlling healing in a house as example is somewhere between minute and hour on the scale. Assembling information from an particle collision experiment at CERN might be on the nanosecond scale.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Consequence of missing a deadline&lt;/strong&gt;&#xA;The most common real-time application today I would say is running Youtube. Here the computer outputs both video and sound fetching it from the internet without you as user noticing stuttering or delay. Most of the time that is. In this application missing a deadline, creating what the kids call a lag, is not especially serious.&lt;/p&gt;&#xA;&lt;p&gt;In other cases, missing the deadline might kill people, say in controlling the ABS breaks in a car. When missing the deadline may actually lead to death, you would not rely on the computer chip and the program as the only safety. You add safety circuits and functions outside the computer chip as part of the system. These extra circuits may extend to taking over the software functions, perhaps with a slighly lower efficiency or performance.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Why the 6502 or 68000&lt;/strong&gt;&#xA;Again, this is to me old school thinking. That answer focuses on one aspect only, how well the programmer can understand what the computer chip is doing. And it generally assume something like a millisecond time scale. If we widen the horizon a bit, we find that any discussion would need to include the whole system as such, where the computer chip is only one part. Yes, of course, you may find exemples where one or the other property of the computer chip is the limiting factor. But to state it again, you need to look at the totality of the system and the requirements of the environment.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Finally the answer&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why are old CPUs like MOS Technology 6502 and Motorola 68000&#xA;considered better for real time systems applications than modern x86&#xA;based CPUs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because the persons writing that kind of things are old-school and not thinking outside their little box.&lt;/p&gt;&#xA;" OwnerUserId="7666" LastActivityDate="2020-10-28T07:53:59.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16689" PostTypeId="1" AcceptedAnswerId="16692" CreationDate="2020-10-28T17:38:22.157" Score="28" ViewCount="8068" Body="&lt;p&gt;I remember that Doom had a free trial version where you can play the first episode but the other two you have to buy.  There are other games that did that as well.  If I understand it, in order to do that the entirety of the game engine would have to be supplied, but the content itself would have to be limited.  How did that limit happen, and how did the game know that you are trying to exceed the limit of the content that was available?  I'm curious about Doom particularly but if there is a general method that was used that would be interesting too.&lt;/p&gt;&#xA;" OwnerUserId="4407" LastEditorUserId="6659" LastEditDate="2020-10-30T21:26:30.087" LastActivityDate="2020-10-31T09:23:56.323" Title="How did games like Doom offer free trials? What was packaged in their free trial software packages?" Tags="&lt;game&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16690" PostTypeId="2" ParentId="16689" CreationDate="2020-10-28T17:45:57.877" Score="28" Body="&lt;p&gt;In Doom’s case, the game was split into episodes, each split into multiple levels. The shareware (free trial) version of the game included the first episode only; a further two episodes were provided in the paid-for version. The game didn’t have to figure out whether you were somewhere “allowed” in the game — all the content provided was allowed.&lt;/p&gt;&#xA;&lt;p&gt;This was a common model for many shareware games, such as Apogee’s games, id Software’s games before and after Doom (apart from Doom II), etc. In many cases, the first (free) episode was actually the best in the game — this isn’t all that surprising, since it had to be good enough to entice users to buy the rest!&lt;/p&gt;&#xA;&lt;p&gt;In some games with more complex assets, the free version didn’t just limit the levels available, but also game assets such as textures or weapon models. In some cases the engine could be limited too, for example network play wouldn’t be possible in the free version.&lt;/p&gt;&#xA;&lt;p&gt;Usually all this worked by having the full game adding content to the shareware version, or put another way, the shareware game shipping a partial version of the full game. In some cases, the shareware version was a straight subset of the full game’s files; examples include even early games such as &lt;a href=&quot;https://3drealms.com/catalog/pharaohs-tomb_46/&quot; rel=&quot;noreferrer&quot;&gt;Pharaoh’s Tomb&lt;/a&gt;, which had one executable per episode, and late games such as Quake, which used the same engine but had its shareware assets in one &lt;code&gt;pak0.pak&lt;/code&gt; file and the complement in another &lt;code&gt;pak1.pak&lt;/code&gt; file. In others, the full version replaced part of the shareware version; examples include Duke Nukem 3D, which has a 10.5 MiB &lt;code&gt;duke3d.grp&lt;/code&gt; file in the shareware version and a 42 MiB version in the full game.&lt;/p&gt;&#xA;&lt;p&gt;The Digital Antiquarian has an interesting series on &lt;a href=&quot;https://www.filfre.net/2020/04/the-shareware-scene-part-1-the-pioneers/&quot; rel=&quot;noreferrer&quot;&gt;the shareware scene&lt;/a&gt; which provides a lot more context and information.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-10-28T20:00:21.357" LastActivityDate="2020-10-28T20:00:21.357" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16691" PostTypeId="2" ParentId="16689" CreationDate="2020-10-28T17:48:58.793" Score="15" Body="&lt;p&gt;&lt;em&gt;Doom&lt;/em&gt; and other 'Apogee model' games work exactly how you describe. The game engine is there, as are almost all of the assets, but resources for episodes 2 and beyond aren't included. The executable itself will be different from the full game slightly, with ordering information in the menu and so on.&lt;/p&gt;&#xA;&lt;p&gt;To answer 'what was packaged?':&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Doom&lt;/em&gt; stores its data in &lt;a href=&quot;https://doomwiki.org/wiki/DOOM1.WAD&quot; rel=&quot;nofollow noreferrer&quot;&gt;WAD&lt;/a&gt; files. I used a tool named &lt;strong&gt;deutex&lt;/strong&gt; to extract all the files contained in the shareware &lt;em&gt;Doom&lt;/em&gt; &lt;code&gt;DOOM1.WAD&lt;/code&gt; and the &lt;em&gt;Ultimate Doom&lt;/em&gt; &lt;code&gt;DOOM.WAD&lt;/code&gt;, and as you might expect, there's files for &lt;code&gt;E1M1&lt;/code&gt;-&lt;code&gt;E1M9&lt;/code&gt; in both, but &lt;em&gt;Ultimate Doom&lt;/em&gt; continues on to episodes 2-4.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Jazz Jackrabbit&lt;/em&gt; is another episodic game, but since it stores each planet's graphics and layout in separate files it's easy to see what data each version includes. Comparing shareware Jazz v1.0 and Jazz CD v1.3, you can see that the first episode's first planet Diamondus &lt;code&gt;PLANET.000&lt;/code&gt; is present in both versions, but the second episode's first planet Letni &lt;code&gt;PLANET.003&lt;/code&gt; is only present on Jazz CD.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1Pt4W.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1Pt4W.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You might wonder if you can just copy data from the shareware version of a game into the registered version and vice versa - in some games you can, as long as the menu is set up to load them. The &lt;a href=&quot;http://www.lixgame.com/jazz/versions.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;different versions&lt;/a&gt; of &lt;em&gt;JJ1&lt;/em&gt; have slightly different physics, and you can copy the shareware menu over the full game to play later episodes with the early physics.&lt;/p&gt;&#xA;&lt;p&gt;This screenshot is from &lt;em&gt;Jazz Jackrabbit Holiday Hare 95&lt;/em&gt; - only episode X should be playable, but if I copy some files from the full game into the &lt;em&gt;Hare 95&lt;/em&gt; directory, the corresponding episodes become available to play. It looks like the menu doesn't hard-code episodes 1-6,A-C as being inaccessible, but only shows the 'available in registered version' message if the files are absent.&lt;/p&gt;&#xA;&lt;p&gt;You might also enjoy trying the following in the shareware  version of &lt;em&gt;Quake&lt;/em&gt;: There's a variable ingame that keeps track of whether the game is the shareware or the registered version. You can change this by opening the Quake console with the backtick key and entering &lt;code&gt;registered 1&lt;/code&gt;. Now if you start a new game, the walls blocking episodes 2, 3 and 4 will be unblocked, letting you play them! Sadly, the maps themselves aren't included in shareware &lt;em&gt;Quake&lt;/em&gt; so it'll abort loading with a &lt;code&gt;couldn't spawn server maps/e2m1.bsp&lt;/code&gt; error and soft-hang in the Quake console waiting for you to start a new game. You'll have to buy the full version. ;)&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-10-31T08:13:22.880" LastActivityDate="2020-10-31T08:13:22.880" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16692" PostTypeId="2" ParentId="16689" CreationDate="2020-10-28T19:59:45.523" Score="76" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;If I understand it, in order to do that the entirety of the game engine would have to be supplied, but the content itself would have to be limited. How did that limit happen,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Simply by not supplying the further content. Works well with any application that uses a clean separation of content and engine. No matter if it'a PDF reader, a HTML Browser or, well, DOOM.&lt;/p&gt;&#xA;&lt;p&gt;Doom was delivered as two files:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;DOOM.EXE&lt;/p&gt;&#xA;&lt;p&gt;roughly 700 KiB in size, containing the whole engine and&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;DOOM.WAD&lt;/p&gt;&#xA;&lt;p&gt;around 11 MiB in size, containing all game assets for all 3 episodes (*1)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In contrast the shareware version contained a&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;DOOM1.WAD&lt;/p&gt;&#xA;&lt;p&gt;of ca. 4 MiB, containing only all assets needed to play all 9 levels (*2) of episode 1 (&lt;em&gt;Knee-Deep in the Dead&lt;/em&gt;)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and how did the game know that you are trying to exceed the limit of the content that was available?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Simply by not delivering content past the first episode.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[I guess here is an underlying question hidden: How to stop someone to buy the full game and then share it with his friends? Well, there was no such protection. The game was open and ID simply trusted the user. Guess what, it worked flawlessly.]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm curious about Doom particularly but if there is a general method that was used that would be interesting too.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The point, as mentioned, is to strictly separate engine and content. Thus new content can simply be added. The WAD format and handling was made to support easy extension, thus modding as well.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;More about WADs&lt;/h3&gt;&#xA;&lt;p&gt;The content files, called WAD (&lt;em&gt;Where's All the Data&lt;/em&gt;), were essentially what one could today call a mountable, read-only file system. DOOM1.WAD contained ~1200 'files' called &lt;em&gt;lumps&lt;/em&gt;, while DOOM.WAD had ~2200. Each and every asset from colours to textures, lines to maps, weapons or sounds and many more, were stored within as lumps. All references between the assets were pointing to (other) lumps to be found via the directory, not to within the game engine. This is why not only total conversions like 'Alien' were possible, but as well complete different games like Heretic or Hexen could run from essentially the same engine (*3).&lt;/p&gt;&#xA;&lt;p&gt;When starting, the DOOM engine located all available WAD files and filled an internal directory structure with the headers of all lumps - think of it like mounting a virtual drive. But, other than with drive images, they weren't loaded as separate entities, but instead appended, in a predefined order (*4), into a single structure.&lt;/p&gt;&#xA;&lt;p&gt;Since assets were always searched from the end of that directory structure, a 'newer' WAD's assets would overload 'older' ones. This is also why modding never required any patching. Just drop another WAD into the DOOM directory and/or add it to the command line.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Further Information&lt;/h3&gt;&#xA;&lt;p&gt;If you're really interested in internals, there is not only the&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/id-Software/DOOM&quot; rel=&quot;noreferrer&quot;&gt;DOOM source code&lt;/a&gt; available online,&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;but also a &lt;em&gt;very&lt;/em&gt; fine book available, called&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://fabiensanglard.net/gebbdoom/&quot; rel=&quot;noreferrer&quot;&gt;GAME ENGINE BLACK BOOK: DOOM&lt;/a&gt;&lt;/em&gt; by Fabien Sanglard (*5).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It offers a detailed walk-through for all algorithms, structures and usage plus a lot of background information and history. I would consider it an easy read, as he does a good job in explaining from zero - of course, some understanding of programming might help. A true work of love and worth it's money. The version I have is 1.1. (*6)&lt;/p&gt;&#xA;&lt;p&gt;Of course, a peek into the&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://doomwiki.org/wiki/Entryway&quot; rel=&quot;noreferrer&quot;&gt;DOOM Wiki&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;is always worth the time when searching for related information.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.S.: And then there is &lt;a href=&quot;https://twitter.com/JoeSiegler/status/1322229100568846336&quot; rel=&quot;noreferrer&quot;&gt;this Tweet&lt;/a&gt; ... somewhat related and a reminder of the times when business was done via mail, not call centers or web pages.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Ultimate DOOM included a 4th Episode &lt;em&gt;Thy Flesh Consumed&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;*2 - The XBox version got a 10th secret level.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Both engine were modified to add features like flight, or most notably a scripting language in case of Hexen.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Modifiable via command line sequence.&lt;/p&gt;&#xA;&lt;p&gt;*5 - He did as well one about ID's first hit, &lt;a href=&quot;https://fabiensanglard.net/gebbwolf3d/index.html&quot; rel=&quot;noreferrer&quot;&gt;Wolfenstein 3D&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Don't miss to stop by &lt;a href=&quot;https://fabiensanglard.net/&quot; rel=&quot;noreferrer&quot;&gt;his blog/web site&lt;/a&gt; every now and then, as he not only adds more details about DOOM and its ports, but quite good articles about other machines and games as well.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-31T09:23:56.323" LastActivityDate="2020-10-31T09:23:56.323" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16693" PostTypeId="1" CreationDate="2020-10-28T21:58:59.727" Score="2" ViewCount="159" Body="&lt;h3&gt;Preamble&lt;/h3&gt;&#xA;&lt;p&gt;For a while, I had a copy of a BESM-6 Pascal compiler which worked only on very simple programs, like &amp;quot;Hello, world&amp;quot;, and would throw a division by 0 exception on anything more complicated, and, on another disk image, a copy of a slightly older revision of the same compiler which worked perfectly.&lt;/p&gt;&#xA;&lt;p&gt;Last week, I got a chance to figure out what was going on by doing a comparison of the two compiler binaries; luckily, they synchronized quite well except for a slight difference in offsets in procedure calls.&lt;/p&gt;&#xA;&lt;p&gt;The difference was in a couple of instructions, which were completely nonsensical in the bad version. After replacing them with the corresponding instructions from the good version (correcting for a procedure offset), the problem went away.&lt;/p&gt;&#xA;&lt;h3&gt;Question&lt;/h3&gt;&#xA;&lt;p&gt;As far as I remember, the IBM 9-track tape with the disk image was given to a guy who had a tape drive in his garage, and he had sent back the result, so it is unknown if reading of the block with the corruption was flagged as I/O error — because of the differing parity of the bytes between the good and the bad version — or not.&lt;/p&gt;&#xA;&lt;p&gt;How plausible is a media corruption of an 800 bpi (NRZI, I guess) 9-track tape which would cause reading of the byte sequence &lt;code&gt;... 10 D9 8C 45 32 6E ...&lt;/code&gt; instead of the correct &lt;code&gt;... 10 00 35 D9 8C 6E ...&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2020-10-28T23:37:32.040" LastActivityDate="2020-10-29T01:38:59.777" Title="How plausible is this data corruption on an IBM 9-track tape?" Tags="&lt;ibm&gt;&lt;magnetic-tape&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16694" PostTypeId="2" ParentId="16693" CreationDate="2020-10-28T22:26:48.820" Score="3" Body="&lt;p&gt;There is no easy answer without way more information - especially as it's a non-IBM machine.&lt;/p&gt;&#xA;&lt;p&gt;In any case, a bit flip on 9 track is of course possible, like with any media. Detecting it depends on a lot of factors not mentioned so far - for example what format is used, what block structure, if at all, and what additional checking this block structure offers.&lt;/p&gt;&#xA;&lt;p&gt;Without seeing the parity bit noting can be guessed from the byte sequence shown.&lt;/p&gt;&#xA;&lt;p&gt;Basic to all formats is only a single parity bit per character. Already a double bit flip within the byte will pass undetected. Only additional protection like record and block checksums/CRC may detect such - if used. Basic recording on 800 NRZI 9 track does operate with records and &lt;em&gt;no&lt;/em&gt; additional error check information. If the data is recorded in basic record format, an I/O error will only be be raised on single (or any uneven) bit flip within a single byte.&lt;/p&gt;&#xA;&lt;p&gt;Long story short, it would be helpful to know more about the higher format layers used and see the raw header data (CRC in block formats is stored at block start).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-10-29T00:11:47.293" LastActivityDate="2020-10-29T00:11:47.293" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16695" PostTypeId="1" CreationDate="2020-10-28T23:26:53.033" Score="10" ViewCount="3052" Body="&lt;p&gt;I don't understand why Western Design Center made the 65816 a 16-bit upgrade to the 6502 but Commodore Semiconductor Group/MOS Technology didn't make their own variant &amp;amp; why neither company made 32-bit or 64-bit versions of the architecture.&lt;/p&gt;&#xA;&lt;p&gt;Also I don't understand why Motorola switched over to PowerPC architecture instead of developing a 64-bit variant of the 68000 oarchitecture or why they never made more powerful 32-bit processors after the 68040.&lt;/p&gt;&#xA;" OwnerUserId="19655" LastEditorUserId="19655" LastEditDate="2021-02-06T17:14:26.943" LastActivityDate="2021-02-06T17:14:26.943" Title="Why were there no 32-bit or 64-bit versions of the m68k &amp; 65xx lines of CPUs?" Tags="&lt;6502&gt;&lt;motorola-68000&gt;&lt;m68k&gt;&lt;65816&gt;" AnswerCount="5" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16696" PostTypeId="2" ParentId="16695" CreationDate="2020-10-28T23:49:29.623" Score="17" Body="&lt;p&gt;The 65816 was close to the bare minimum of a 16 bit processor.  It was primarily used where compatibility with existing 6502 code was needed, such as with the Apple IIgs.  It was also used where the designers of a new 16-bit system were already familiar with 6502.  This is probably why the SNES has the 65816, given the NES had the 6502.&lt;/p&gt;&#xA;&lt;p&gt;By the time the 32 bit era came into its own, the 8-bit 6502 codebase was very obsolete.  Apple never developed a successor to the IIgs and there were few if any other consumer computers using the 65816.  Given that most programming had shifted from assembly to high level languages, designers would have also felt more free to switch architectures.  I suspect there was no real target market for this processor, so it was not developed.&lt;/p&gt;&#xA;&lt;p&gt;Regarding the 68000, that is part of a much larger industry switch away from the CISC (complex instruction set computer) architectures of the 70s and 80s to RISC (reduced instruction set computers) which offered superior performance.&lt;/p&gt;&#xA;&lt;p&gt;In my view, it's more of the exception that the PC family did not migrate to RISC as well.  The need to maintain compatibility with an extraordinarily diverse set of hardware and the need for binary compatibility (with multiple operating systems) created a unique pressure to maintain the architecture.  For vendors like Apple, with a closed system and control over the software stack and hardware, something like the PowerPC transition was much easier to pull off.  Same for the UNIX world, where most software was in C and readily recompiled.&lt;/p&gt;&#xA;&lt;p&gt;So once RISC chips offered better performance, many of the vendors using the 68000 started to abandon it.  Motorola could probably have pursued the same CISC-to-RISC translation approach used in the Pentium Pro, but they already had their own RISC designs that were faster than any 68000, and with a shrinking 68000 market segment.  They probably saw no market for a &amp;quot;68080&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-10-28T23:49:29.623" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16697" PostTypeId="2" ParentId="16695" CreationDate="2020-10-28T23:55:32.833" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I don't understand why western design centre made the 65816 a 16bit upgrade to the 6502 but commodore semiconductor group/MOS technology didn't make their own variant&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For one, the 65816 is only a 16 bit CPU in a very restricted way. All external transfers are still 8 bit wide and address expansion is rather clumsy. The main improvement wider architectures offer is plain management of large address space. As a result the 65816's performance isn't much higher than a plain 6502. Improved performance comes mainly from increased clock speed.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;amp; why neither company made 32bit or 64bit versions of the architecture.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;32 or 64 bit do not increase much performance on their own - and not much without new software. Performance gain comes from wider busses and most importantly a larger usable address space. The 8088 is a great example. Performance wise, a 4.77 MHz 8088 doesn't deliver notably more processing punch than a 1 MHz 6502 - but the ability to address up to 1 MiB without much hassle (*1) made a huge difference.&lt;/p&gt;&#xA;&lt;p&gt;Any 65xx extension to 32 bit would have been essentially a complete new CPU, maybe offering some emulation mode, which wouldn't carry over the many advantages of the 6502, being dead simple and cheap to produce. Chip technology had advanced by several magnitudes between the mid 1970s when the 6502 was done and mid 1980s, making more complex but also more powerful CPUs taking up that niche.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Also I don't understand why Motorola switched over to powerPC architecture instead of developing a 64bit variant of the 68000 or architecture or why they never made more powerful 32bit processors after the 68040&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For one, there was of course the 68060, which was at the time comparable to a Pentium, delivering up to 3 times the throughput of an 68040.&lt;/p&gt;&#xA;&lt;p&gt;More important, in the mid 1990s (the 060 came in 1994) the usage of non-x86 CPUs in (consumer) desktops was history. Amiga as well as Atari were gone, Sun long switched for SPARC. There was simply no way that Motorola as a single designer could compete with close to a dozen different companies designing x86 CPUs and pushing performance limits at an unimaginable speed.&lt;/p&gt;&#xA;&lt;p&gt;At the time (early 1990s) Motorola investing in two different and incompatible CPU lines, 68k and PowerPC, for the same market (high performance) doesn't make much business sense, so joining forces with IBM and focusing on PowerPC (*2) was the sensible way to go.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - No, segment registers aren't a hassle - in fact, they are a huge performance boost, comparable to the gain ZP addressing has on the 6502. Especially not when considering what effort 8 bit machines, like the Apple II, had to sped to manage larger data sets.&lt;/p&gt;&#xA;&lt;p&gt;*2 - In turn Motorola did not only reduce the 68k development, but as well scrapped their beautiful new &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_88000&quot; rel=&quot;nofollow noreferrer&quot;&gt;88k RISC line&lt;/a&gt; as well.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="11579" LastEditDate="2020-10-31T16:52:49.067" LastActivityDate="2020-10-31T16:52:49.067" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16698" PostTypeId="1" AcceptedAnswerId="16725" CreationDate="2020-10-29T00:04:07.033" Score="3" ViewCount="432" Body="&lt;p&gt;In the 80s, the NSA was a major customer of supercomputers. &lt;a href=&quot;https://www.nsa.gov/Portals/70/documents/news-features/declassified-documents/cryptologic-quarterly/NSA_and_the_Supercomputer.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.nsa.gov/Portals/70/documents/news-features/declassified-documents/cryptologic-quarterly/NSA_and_the_Supercomputer.pdf&lt;/a&gt; discusses this, including the lamentation that the industry was moving from the old vector supercomputers to new massively parallel models, as they had legacy software valued at $3 billion, which was not necessarily designed to run well on massively parallel machines.&lt;/p&gt;&#xA;&lt;p&gt;What exactly did they use supercomputers for? In particular, those vector machines from vendors like Cray, were designed to crunch floating-point numbers. It doesn't jump out at me that this is useful for cryptography, which would seem to require bit shuffling rather than number crunching. At first glance, it seems like a Cray would be wasted on cryptography, achieving no more performance than a cheaper machine like a DEC.&lt;/p&gt;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-13T20:50:35.677" Title="How did the NSA use vector supercomputers?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;floating-point&gt;&lt;cray&gt;&lt;cryptography&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16699" PostTypeId="2" ParentId="16693" CreationDate="2020-10-29T01:38:59.777" Score="5" Body="&lt;p&gt;Comparing the two set of bytes suggests there might have been a problem where the tape physically &amp;quot;stuck&amp;quot; and then &amp;quot;jumped&amp;quot;, reading erroneous data:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 10&#xA;   00&#xA;   35&#xA;D9 D9&#xA;8C 8C&#xA;45&#xA;32&#xA;6E 6E&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Of course there is no way to know what conditions the tape had been stored in, how well the tape reader had been maintained, and how the reading software would have handled hardware errors (including parity errors).&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2020-10-29T01:38:59.777" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16700" PostTypeId="1" CreationDate="2020-10-29T04:40:14.300" Score="32" ViewCount="10876" Body="&lt;p&gt;In the Swedish-language song &amp;quot;Nostalgi&amp;quot; by Markoolio from 2003, some of the lyrics go:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My first computer had 64 kB&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;you surfed on the water, and that's that&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The computer games were &lt;strong&gt;loaded in from tapes&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;it took 25 minutes if everything went alright.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(Obviously, it doesn't rhyme when translated into English.)&lt;/p&gt;&#xA;&lt;p&gt;He was likely referring to his &lt;strong&gt;Commodore 64&lt;/strong&gt;. As far as I understand, that home computer/console came with a cartridge slot built in, but no floppy disk station or tape player. You had to buy the two latter separately. (But they had slots to connect them.)&lt;/p&gt;&#xA;&lt;p&gt;I realize that piracy was absolutely rampant, so maybe people invested in separate tape players and then copied games easily onto cheap tapes and that's why it took so long to load them in? But even then, 25 minutes still sounds insane. Even if it was really just 1-2 minutes, that would still be significantly longer than the slow floppies that I remember impatiently waiting for. Imagine sitting down to play a game before lunch, only to realize that the game has not finished loading by the time the food is ready...&lt;/p&gt;&#xA;&lt;p&gt;Did they actually sell commercial/legal software for Commodore 64 and other early home computers on tapes on shelves in stores? For full price? Surely those &amp;quot;genuine&amp;quot; copies must have come on the expensive-to-produce and impossible-to-reproduce-at-home cartridges with near-zero loading time? So if you had actually &lt;em&gt;purchased&lt;/em&gt; a Commodore 64 game, it would not take &amp;quot;25 minutes&amp;quot; to load, but more like 25 &lt;strong&gt;milliseconds&lt;/strong&gt;? You'd just slide in the cartridge and press &amp;quot;power on&amp;quot; and it's running right away?&lt;/p&gt;&#xA;&lt;p&gt;Is the only reason that people talk about games taking so long to load in those days that they only experienced pirated/warez copies of games? They never bought any for money? It makes me wonder how anyone could make a living in those days...&lt;/p&gt;&#xA;&lt;p&gt;Also, what's that part about &amp;quot;if everything went right&amp;quot;? It could also fail to load, even at that slow speed?&lt;/p&gt;&#xA;&lt;p&gt;Is there something I'm fundamentally missing?&lt;/p&gt;&#xA;" OwnerUserId="19765" LastActivityDate="2020-12-20T00:19:13.867" Title="Did computer games for Commodore 64 really take &quot;25 minutes&quot; to load &quot;if everything went alright&quot;?" Tags="&lt;commodore-64&gt;&lt;cassette-tape&gt;&lt;game-cartridge&gt;" AnswerCount="12" CommentCount="16" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16701" PostTypeId="2" ParentId="16700" CreationDate="2020-10-29T05:24:39.250" Score="18" Body="&lt;p&gt;&lt;strong&gt;Yes, cassettes were common, they took ages, and they were error prone.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In Europe, disk drives for the ZX Spectrum and Commodore 64 were uncommon. It's the same for cartridge games for the C64. The market for the 8-bit micros in the 80s in the UK was driven by price, so the cassette interfaces were the majority here. (BBC Micros with floppy drives were common for education.)&lt;/p&gt;&#xA;&lt;p&gt;As for 'did they actually sell' cassettes - yes, in fact &lt;em&gt;They Sold A Million&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://www.commodore-info.com/foto/cassette_the_sold_a_million2_01.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;There's at least 3 of these compilations - each compilation's  games were chosen as between them they sold at least a million copies.&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9260/how-much-data-could-a-home-computer-store-on-an-audio-cassette!&quot;&gt;this answer&lt;/a&gt;, the C64 tape data rate is calculated at 55 bytes per second, giving approximately 15 minutes to load 48 kilobytes. On the Spectrum, a title screen alone (&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/212/what-format-is-the-timex-sinclair-zx-spectrum-screen-scr-file&quot;&gt;6912 bytes&lt;/a&gt;) would take just under a minute (&lt;a href=&quot;https://www.youtube.com/watch?v=V0EfycbDhiw&quot; rel=&quot;noreferrer&quot;&gt;like in this video of Jetpac&lt;/a&gt;) to load from tape. (Though to a kid it would feel like forever :) .)&lt;/p&gt;&#xA;&lt;p&gt;The typical C64 tape interface was a first party Datasette with little user tweaking required. On the Spectrum using an off the shelf tape recorder you'd need to adjust the volume level using trial and error. On both, especially with pirate cassettes there might be an extra bit of calibration required - cassettes recorded on one recorder might not 'like' another.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;A View To A Kill&lt;/em&gt; is a multiload C64 game (more like a sequence of minigames) and each section has a very lengthy loading time. I haven't measured it but I could accept AVTAK having a combined loading time of 25 minutes.&lt;/p&gt;&#xA;&lt;p&gt;I suggest you read a magazine like Zzap64 to get an impression of what was available at the time.&lt;/p&gt;&#xA;" OwnerUserId="19766" LastEditorUserId="-1" LastEditDate="2020-10-30T11:58:11.883" LastActivityDate="2020-10-30T11:58:11.883" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="16702" PostTypeId="2" ParentId="16700" CreationDate="2020-10-29T05:30:23.743" Score="3" Body="&lt;p&gt;Commercial software was certainly released on cassette tapes. This was a very common practise in the days of early micro-computers since floppy disk drives were very expensive, and some micro-computers did not have floppy disk drive interfaces. For these computers, audio cassette was the only means of data storage.&lt;/p&gt;&#xA;&lt;p&gt;I can remember having to wait for many minutes for games to load on my BBC Microcomputer (which only had 32 kilobytes of memory). However, I cannot remember the data format or the data speeds, so I cannot estimate the maximum time that you might have to wait for a game to load.&lt;/p&gt;&#xA;&lt;p&gt;It is possible that on commercial tapes, each block of data may have been recorded more than once for redundancy purposes, and this would slow things down considerably. Also, to keep users amused, a smaller program might be loaded to play music while the main game was loading, and this would extend the overall loading time even more.&lt;/p&gt;&#xA;" OwnerUserId="3278" LastActivityDate="2020-10-29T05:30:23.743" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16703" PostTypeId="2" ParentId="16700" CreationDate="2020-10-29T06:28:44.420" Score="9" Body="&lt;p&gt;TL;DR: Yes, it could take up to 25 minutes (from tape) and it could fail due to many reasons, like record dropout or bad adjusted head.&lt;/p&gt;&#xA;&lt;p&gt;Long story: It was pretty common to distribute software and games on tape cassettes. Cartridges were rare, much rarer than the cassettes. And it was not only for Commodore - almost every home computer of the early 80s' has the tape deck to load and save software; floppy drives were a little bit uncommon, at least in Europe, especially behind the Iron Curtain.&lt;/p&gt;&#xA;&lt;p&gt;Cartridges are pretty fast but remember: it is a solid piece of hardware, some ICs on the PCB, so they cannot beat the price of the more versatile cassettes and their manufacturing was much expensive. They were common for game consoles, because of its instant loading time. But in the home computer world (don't forget that all those Commodores, Ataris, Spectrums, etc. were computers, not only game consoles) you need a memory medium, not only the &amp;quot;game load medium&amp;quot;. On the other side: it was slow and you have to face &amp;quot;Tape Loading Error&amp;quot; from time to time...&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-10-29T06:28:44.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16704" PostTypeId="2" ParentId="16700" CreationDate="2020-10-29T06:54:54.077" Score="64" Body="&lt;p&gt;&lt;strong&gt;Theoretically it could take 25 minutes (or more), in practice it never did.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Theoretically it could, because the C-64's built-in tape handling routines had a &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_Datasette#Encoding&quot; rel=&quot;noreferrer&quot;&gt;data rate of about 300 bit/s&lt;/a&gt;. That's 37.5 bytes per second, or almost 30 minutes for a full 64K.&lt;/p&gt;&#xA;&lt;p&gt;In practice, it never did, because the tape handling / decoding was done almost entirely in software, Commodore's own tape handling routines were horribly inefficient*, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Fast_loader&quot; rel=&quot;noreferrer&quot;&gt;third party speeders&lt;/a&gt; managed &lt;a href=&quot;https://de.wikipedia.org/wiki/Datasette&quot; rel=&quot;noreferrer&quot;&gt;data rates close to 5 kbit/s&lt;/a&gt;, reducing load times dramatically. Almost every bit of commercial software, and every quality crack released on tape ;-), had a two part loader, first loading a fast loader at normal speed, then loading the rest of the game at higher speed. I can't recall waiting more than a few minutes for any game to load.&lt;/p&gt;&#xA;&lt;p&gt;As for cartridges: Hardly any game or application software for the C-64 was sold on cartridges. Tapes and disks were way cheaper to produce.&lt;/p&gt;&#xA;&lt;p&gt;* &lt;a href=&quot;https://en.wikipedia.org/wiki/Fast_loader&quot; rel=&quot;noreferrer&quot;&gt;One source&lt;/a&gt; claims that the inefficiency was a response to the quality of audio tapes typically used at the time the PET was designed (mid-70s), and that only improved tape quality in the mid-80s made fast loaders possible. I'm not convinced.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-10-30T06:37:15.573" LastActivityDate="2020-10-30T06:37:15.573" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16705" PostTypeId="2" ParentId="16700" CreationDate="2020-10-29T09:08:27.323" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Did they actually sell commercial/legal software for Commodore 64 and other early home computers on tapes on shelves in stores? For full price?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I remember that the Oric 1/Atmos had a fast and a slow mode.&lt;/p&gt;&#xA;&lt;p&gt;Slow mode was 300 bauds. But it wasn't the default. Default was &amp;quot;fast&amp;quot; (2400 bauds). Both modes were built-in (there were slightly faster custom formats but I never saw them in any production)&lt;/p&gt;&#xA;&lt;p&gt;However, some commercial programs (by Tansoft, mostly) put the fast loading version of the game on one side and the slow loading version on the other side. So it probably decreased the risk of not loading the tape with a bad tape player (there were a ton of them)&lt;/p&gt;&#xA;&lt;p&gt;But it was dropped gradually. For instance there are 2 versions of &lt;a href=&quot;https://www.oric.org/software/harrier_attack-52.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Harrier Attack&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Oric-1 version had a tape with 2 fast recordings on side A, and a slow recording on side B, and was labelled &amp;quot;Oric&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Oric-1/Atmos version only had one fast recording on both sides, and was labelled &amp;quot;Atmos / Oric 1&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I remember that Harrier Attack loaded in around 3 minutes in fast load mode, so more than 20 minutes on slow mode probably (who used that ? :))&lt;/p&gt;&#xA;&lt;p&gt;Of course if the tape player chewed on the tape, it destroyed both sides so it was unlikely to be safer. The only proper safety was to record software on both sides (fast was okay) just if one side was erased by mistake (because someone disabled the read-only tape safety?)&lt;/p&gt;&#xA;&lt;p&gt;Cracked copies were &lt;em&gt;always&lt;/em&gt; spread in fast mode. And the Oric had no commerical software on disk or cartridge (note: there's an almost-cartridge system now with Erebus card which is able to read tape data from SD card and transfert data through parallel port at lightning speed)&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2020-10-29T09:16:30.523" LastActivityDate="2020-10-29T09:16:30.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16706" PostTypeId="2" ParentId="16695" CreationDate="2020-10-29T12:53:37.493" Score="41" Body="&lt;p&gt;The premise in the question is incorrect. There &lt;em&gt;were&lt;/em&gt; such chips. The question also fails to allow for the way that the silicon-chip industry developed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Moore%27s_law&quot; rel=&quot;noreferrer&quot;&gt;Moore's Law&lt;/a&gt; basically said that every 18 months, it was possible to build chips with twice as many transistors for the same amount of money.&lt;/p&gt;&#xA;&lt;p&gt;The 6502 (1975) is a mid-1970s design. In the '70s it cost a lot to use even thousands of transistors; the 6502 succeeded partly because it was very small and simple and didn't use many, compared to more complex rivals such as the Z80 and 6809.&lt;/p&gt;&#xA;&lt;p&gt;The 68000 (1979) was also from the same decade. It became affordable in the early 1980s (e.g. Apple Lisa) and slightly more so by 1984 (Apple Macintosh). However, note that Motorola also offered a version with an 8-bit external bus, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68008&quot; rel=&quot;noreferrer&quot;&gt;68008&lt;/a&gt;, as used in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sinclair_QL&quot; rel=&quot;noreferrer&quot;&gt;Sinclair QL&lt;/a&gt;. This reduced performance, but it was worth it for cheaper computers because it was so expensive to have a 16-bit chipset and 16-bit memory.&lt;/p&gt;&#xA;&lt;p&gt;Note that just 4 years separates the 6502 and 68000. That's how much progress was being made then.&lt;/p&gt;&#xA;&lt;p&gt;The 65C816 was a (partially) 16-bit successor to the 6502. Note that WDC also designed a 32-bit successor, the 65C832. Here is a datasheet: &lt;a href=&quot;https://downloads.reactivemicro.com/Electronics/CPU/WDC%2065C832%20Datasheet.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://downloads.reactivemicro.com/Electronics/CPU/WDC%2065C832%20Datasheet.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;However, this was never produced. As a 16-bit extension to an 8-bit design, &lt;a href=&quot;https://news.ycombinator.com/item?id=22237661&quot; rel=&quot;noreferrer&quot;&gt;the 65C816 was compromised&lt;/a&gt; and slower than pure 16-bit designs. A 32-bit design would have been even more compromised.&lt;/p&gt;&#xA;&lt;p&gt;Note, this is also why Acorn succeeded with the ARM processor: its clean 32-bit-only design was more efficient than Motorola's combination 16/32-bit design, which was partly inspired by the DEC PDP-11 minicomputer. Acorn evaluated the 68000, 65C816 (which it used in the rare Acorn Communicator), NatSemi 32016, Intel 80186 and other chips and found them wanting. Part of the brilliance of the Acorn design was that it used slow DRAM effectively and did not need elaborate caching or expensive high-speed RAM, resulting in affordable home computers that were nearly 10x faster than rival 68000 machines. (The best layman's explanation of this I've seen is &lt;a href=&quot;https://www.youtube.com/watch?v=Hf67JYkUCHQ&quot; rel=&quot;noreferrer&quot;&gt;the Ultimate Acorn Archimedes Talk&lt;/a&gt; at the Chaos Computer Congress 36C3.)&lt;/p&gt;&#xA;&lt;p&gt;The 68000 was 16-bit externally but 32-bit internally: that is why the Atari machine that used it was called the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_ST&quot; rel=&quot;noreferrer&quot;&gt;ST&lt;/a&gt;, short for &amp;quot;sixteen/thirty-two&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;The first fully-32 bit 680x0 chip was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Motorola_68020&quot; rel=&quot;noreferrer&quot;&gt;68020&lt;/a&gt; (1984). It was faster but did not offer a lot of new capabilities, and its successor the 68030 was more successful, partly because it integrated a memory management unit. Compare with the Intel 80386DX (1985), which did much the same: 32-bit bus, integral MMU.&lt;/p&gt;&#xA;&lt;p&gt;The 80386DX struggled in the market because of the expense of making 32-bit motherboards with 32-bit wide RAM, so was succeeded by the 80386SX (1988), the same 32-bit core but with a half-width (16-bit) external bus. This is the same design principle as the 68008. Motorola's equivalent was the 68EC020, as used in the Amiga 1200.&lt;/p&gt;&#xA;&lt;p&gt;The reason was that around the end of the 1980s, when these devices came out, 16MB of memory was a huge amount and very expensive. There was no need for mass-market chips to address 4GB of RAM — that would have cost hundreds of thousands of £/$ at the time. Their 32-bit cores were for performance, not capacity.&lt;/p&gt;&#xA;&lt;p&gt;The 68030 was followed by the 68040 (1990), just as the 80386 was followed by the 80486 (1989). Both also integrated floating-point coprocessors into the main CPU die. The progress of Moore's Law had now made this affordable.&lt;/p&gt;&#xA;&lt;p&gt;The line ended with the 68060 (1994), but still 32-bit — but again like Intel's 80586 family, now called &amp;quot;Pentium&amp;quot; because they could't trademark numbers — both have Level 1 cache on the CPU die.&lt;/p&gt;&#xA;&lt;p&gt;The reason was because at this time, fabricating large chips with millions of transistors was still expensive, and these chips could still address more RAM than was remotely affordable to fit into a personal computer.&lt;/p&gt;&#xA;&lt;p&gt;So the priority at the time was to find way to spend a limited transistor budget on making faster chips:&#xA;8-bit → 16-bit → 32-bit → integrate MMU → integrate FPU → integrate L1 cache → integrate L2 cache&lt;/p&gt;&#xA;&lt;p&gt;This line of development somewhat ran out of steam by the mid-1990s. This is why there was no successor to the 68060.&lt;/p&gt;&#xA;&lt;p&gt;Most of the industry switched to the path Acorn had started a decade earlier: dispensing with backwards compatibility with now-compromised 1970s designs and starting afresh with a stripped-down, simpler, reduced design — Reduced Instruction Set Computing (&lt;a href=&quot;https://en.wikipedia.org/wiki/Reduced_instruction_set_computer&quot; rel=&quot;noreferrer&quot;&gt;RISC&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;ARM chips supported several OSes: RISC OS, Unix, Psion EPOC (later renamed Symbian), Apple NewtonOS, etc.&#xA;Motorola's supported more: LisaOS, classic MacOS, Xenix, ST TOS, AmigaDOS, multiple Unixes, etc.&lt;/p&gt;&#xA;&lt;p&gt;No single one was dominant.&lt;/p&gt;&#xA;&lt;p&gt;Intel was constrained by the success of Microsoft's MS-DOS/Windows family, which sold far more than all the other x86 OSes put together. So backwards-compatibility was more important for Intel than for Acorn or Motorola.&lt;/p&gt;&#xA;&lt;p&gt;Intel had tried several other CPU architectures: iAPX-432, i860, i960 and later Itanium. All failed in the general-purpose market.&lt;/p&gt;&#xA;&lt;p&gt;Thus, Intel was forced to to find a way to make x86 quicker. It did this by breaking down x86 instructions into RISC-like &amp;quot;micro operations&amp;quot;, re-sequencing them for faster execution, running them on a RISC-like core, and then reassembling the results into x86 afterwards. First on the Pentium Pro, which only did this efficiently for x86-32 instructions, when many people were still running Windows 95/98, an OS composed of a lot of x86-16 code and which ran a lot of x86-16 apps. The Pentium Pro also had 8KB of onboard L1.&lt;/p&gt;&#xA;&lt;p&gt;Then with the Pentium II, an improved Pentium Pro with L2 cache (first on a separate die, later integrated) and improved x86-16 optimisation — but also around the time that the PC market moved to Windows XP, a fully x86-32 OS.&lt;/p&gt;&#xA;&lt;p&gt;In other words, even by the turn of the century, the software was still moving to 32-bit and the limits of 32-bit operation (chiefly, 4GB RAM) were still largely theoretical. So, the effort went into making faster chips with the existing transistor budget.&lt;/p&gt;&#xA;&lt;p&gt;Only by the middle of the first decade of the 21st century did 4GB become a bottleneck, leading to the conditions for AMD to create a 64-bit extension to x86.&lt;/p&gt;&#xA;&lt;p&gt;The reasons that 64-bit happened did not apply in the 1990s (EDIT: OK, except in high-end RISC chips for workstations -- between 1991 - 1994, all the main RISC processors went 64-bit: MIPS, SPARC and finally IBM POWER. DEC's Alpha chips were 64-bit from the start in 1992 and were arguably the only fully-native 64-bit mass-market CPU.)&lt;/p&gt;&#xA;&lt;p&gt;From the 1970s to about 2005, 32 bits were more than enough, and CPU makers worked on spending the transistor budgets on integrating more go-faster parts into CPUs. Eventually, this strategy ran out, when CPUs included the integer core, a floating-point core, a memory management unit, a tiny amount of L1 cache and a larger amount of slower L2 cache.&lt;/p&gt;&#xA;&lt;p&gt;Then, there was only 1 way to go: integrate a second CPU onto the chip. Firstly as a separate CPU die, then as dual-core dies. Luckily, by this time, NT had replaced Win9x, and NT and Unix could both support symmetrical multiprocessing.&lt;/p&gt;&#xA;&lt;p&gt;So, dual-core chips, then quadruple-core chips. After that, a single user on a desktop or laptop gets little more benefit. There are many CPUs with more cores but they are almost exclusively used in servers.&lt;/p&gt;&#xA;&lt;p&gt;Secondly, the CPU industry was now reaching limits of how fast silicon chips can run, and how much heat they emit when doing so. The megahertz race ended.&lt;/p&gt;&#xA;&lt;p&gt;So the emphases changed, to two new ones, as the limiting factors became:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the amount of system memory&lt;/li&gt;&#xA;&lt;li&gt;the amount of cooling they required&lt;/li&gt;&#xA;&lt;li&gt;the amount of electricity they used to operate&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These last two things are two sides of the same coin, which is why I said two not three.&lt;/p&gt;&#xA;&lt;p&gt;Koomey's Law has replaced Moore's Law.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://itigic.com/koomeys-law-equivalent-of-21st-century-moores-law/&quot; rel=&quot;noreferrer&quot;&gt;https://itigic.com/koomeys-law-equivalent-of-21st-century-moores-law/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://gfxspeak.com/2012/04/10/koomeys-law-rewrites-the-future-of-computing/&quot; rel=&quot;noreferrer&quot;&gt;https://gfxspeak.com/2012/04/10/koomeys-law-rewrites-the-future-of-computing/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="209" LastEditorUserId="209" LastEditDate="2020-10-31T22:25:46.313" LastActivityDate="2020-10-31T22:25:46.313" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="16707" PostTypeId="2" ParentId="16695" CreationDate="2020-10-29T14:22:14.043" Score="6" Body="&lt;p&gt;Because binary compatibility in most cases is overrated and not worth compromising a design to maintain.&lt;/p&gt;&#xA;&lt;p&gt;The only reason to extend a chip family like that is to maintain binary compatibility. In contrast, &amp;quot;reinventing the wheel&amp;quot; with a new design empowers the designers embrace everything the field has gained over time.&lt;/p&gt;&#xA;&lt;p&gt;If anything, Intel is the exception to that, putting a lot of work in to ensure its chips are compatible, but nobody else was in the position Intel to really need to maintain that. (That said, Intel certainly innovated the underlying processor design while still maintaining compatibility.)&lt;/p&gt;&#xA;&lt;p&gt;Apple felt they needed that when they worked with WDC for the 65816 in order to leverage the Apple II market, but that ended up being a dead end compared to the path of the Macintosh, which is a great example of how binary compatibility isn't necessary for a successful platform.&lt;/p&gt;&#xA;&lt;p&gt;Apple switched over to the PPC because it was a better chip in terms of power and performance than what the 68K line was, important for their laptop series, and clearly IBM/Motorola felt that they could do better (for assorted values of &amp;quot;better&amp;quot;) investing in the Power architecture than sticking with the 68K family.&lt;/p&gt;&#xA;&lt;p&gt;Similarly, they switched to Intel because PPC was not advancing more on the power/performance spectrum since PPC was being more deigned to the server market.&lt;/p&gt;&#xA;&lt;p&gt;The IBM PC helped establish that the industry was able to easily move from one architecture to another by establishing a &amp;quot;CP/M like&amp;quot; environment that was ostensibly &amp;quot;source code&amp;quot; compatible with the legacy CP/M base. Software vendors readily adopted the PC. The early PC was, essentially, a &amp;quot;better&amp;quot; CP/M platform with better, standard hardware, a better OS (MS/PC-DOS), and more memory. This made legacy code easy to port, even at machine language.&lt;/p&gt;&#xA;&lt;p&gt;But by them, the modern machines were powerful enough to be efficiently coded in high level languages which were more readily ported. The UNIX market demonstrated that hardware manufacturers that adopted UNIX could rapidly see vendors support their platform, regardless of the underlying architecture. 68000, PPC, PA-RISC, 88000, x86, SPARC, single processors, multi processors, etc. etc. etc. The UNIX server and workstation market was incredibly diverse, yet the overlying UNIX OS allowed vendors to quickly move their software from platform to platform.&lt;/p&gt;&#xA;&lt;p&gt;This diversity and rapid expansion allowed companies to truly innovate at all levels, rather than be trapped with 15 year old design decisions of 5 generations of technology.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-10-29T14:22:14.043" CommentCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="16708" PostTypeId="2" ParentId="16695" CreationDate="2020-10-29T15:25:22.033" Score="5" Body="&lt;p&gt;To add to the other answers, the 65xx family design, with just a few on-chip registers, made sense when transistors were expensive, and memory accesses were cheap. That allowed using the zero page as, essentially, a large and flexible register set. A quick look at the WDC 65C832 datasheet reveals that it sticks to that philosophy, presumably because the instruction encoding doesn't have room for addressing a lot more registers.&lt;/p&gt;&#xA;&lt;p&gt;However, this approach stopped working as clock speeds advanced, because memory access times didn't increase as fast as clock speeds. That makes more registers, capable of being used flexibly, very valuable for saving memory accesses, and the 65xx approach of a few registers, all with specific jobs, became a major handicap.&lt;/p&gt;&#xA;&lt;p&gt;The 68000 had more registers, but the division between address and data registers was unhelpful, and was not continued in the PowerPC.&lt;/p&gt;&#xA;&lt;p&gt;The x86 family had more registers than the 65xx, and managed to maintain competitive performance via complex and hard-to-design cache systems. Until quite recently, Intel were the world experts at running processor fabrication plants. They've lost that position to TSMC at present, but their abilities in manufacturing were important to keeping x86 competitive.&lt;/p&gt;&#xA;&lt;p&gt;WDC has always been a small operation, did not have the manpower to design high-end cache systems, and could not rely on Intel-level manufacturing.&lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2020-10-29T15:25:22.033" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16710" PostTypeId="2" ParentId="16511" CreationDate="2020-10-29T16:16:05.527" Score="2" Body="&lt;p&gt;DOS 4 does not have DoubleSpace.&lt;/p&gt;&#xA;&lt;p&gt;DoubleSpace was introduced in MS-DOS 6.0, improved in MS-DOS 6.2, removed in 6.21 due to a successful lawsuit from STAC Inc., and replaced with DriveSpace in MS-DOS 6.22.&lt;/p&gt;&#xA;&lt;p&gt;If you are sure it is DoubleSpace not DriveSpace, then you will need to find a bootable disk image with MS-DOS 6.2 or failing that 6.0. (The matching versions of IBM PC DOS should work too, I think.) Boot from that disk image using your Gotek and it should be able to mount the compressed drive.&lt;/p&gt;&#xA;&lt;p&gt;If you can access it, MS-DOS 6.x contains InterLink. This is MS' equivalent of Laplink, and will let you (very slowly) move the files off over the serial link that you say you have.&lt;/p&gt;&#xA;&lt;p&gt;Failing that, you could probably find a copy of LapLink on an abandonware site. It can transmit itself over a serial cable.&lt;/p&gt;&#xA;&lt;p&gt;However, this will not help you mount a DoubleSpace-compressed drive. You need MS-DOS 6 or later for that. You need to solve the DOS boot disk issue and mount the DoubleSpace volume &lt;em&gt;before&lt;/em&gt; addressing the file-transfer problem.&lt;/p&gt;&#xA;&lt;p&gt;It is possible to uncompress a DoubleSpace volume into a standard disk. If it is less than (approximately) 50% full you can do this in-place. If it is over 50% full, you must free up space to do it &lt;em&gt;in situ&lt;/em&gt;. In that event, it is probably easier to fit a second drive, copy all the contents onto that, make it bootable, then disconnect the compressed drive. A circa 512MB CF card in a CF-to-IDE connector would do very well for this; then you could insert the CF card into a more modern computer to retrieve the contents.&lt;/p&gt;&#xA;" OwnerUserId="209" LastActivityDate="2020-10-29T16:16:05.527" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16711" PostTypeId="1" AcceptedAnswerId="16716" CreationDate="2020-10-29T16:40:12.837" Score="6" ViewCount="368" Body="&lt;p&gt;I'm trying to get a feel for what it looked like when you designed a computer to have a &lt;em&gt;lot&lt;/em&gt; of memory chips stuffed into it. To that end, I found this: &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:VAX_11_780_16mb_memory_board.jpg&quot; rel=&quot;noreferrer&quot;&gt;https://commons.wikimedia.org/wiki/File:VAX_11_780_16mb_memory_board.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If I'm counting correctly, that's 256 RAM chips on the visible side of the board. Assuming the use of 256kbit RAM chips, 256 x 256 x 1024 / 8 = 8Mbytes on the visible side, so if it's double-sided, that would be correct.&lt;/p&gt;&#xA;&lt;p&gt;What are the physical dimensions of the board? Height, width, and depth in terms of how far apart they are spaced in the machine?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-10-31T12:13:08.823" Title="VAX 11/780 16MB memory board - what was the physical size?" Tags="&lt;hardware&gt;&lt;memory&gt;&lt;dec&gt;&lt;vax&gt;" AnswerCount="2" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="16712" PostTypeId="2" ParentId="16700" CreationDate="2020-10-29T16:40:47.877" Score="4" Body="&lt;p&gt;As other answers note, the basic tape and disk routines on the C64 were notoriously slow.  Commercial game releases usually were on tape, but tended to use a &amp;quot;fastloader&amp;quot; routine to bring the loading times down to something vaguely sane.  The loader routine also served as an excuse to display a loading screen and play music while you waited - and some of those loader tunes were works of art in themselves.  Many games didn't need to load a full 64KB into RAM before starting.  This also tended to speed up loading.&lt;/p&gt;&#xA;&lt;p&gt;For concrete examples, I timed loading &lt;strong&gt;Cybernoid&lt;/strong&gt; into an emulator, with the &amp;quot;warp load&amp;quot; feature of the emulator switched off so that it ran in simulated realtime.  It took about &lt;strong&gt;5m15s&lt;/strong&gt; until the title screen and music started.  This is a game that doesn't have a distinct loading screen and music; it takes about a minute to bootstrap the fastloader, and the rest of the time is spent loading the game proper.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Arkanoid&lt;/strong&gt; is another famous example that does have a loading screen.  The fastloader bootstraps in about 40 seconds, the loader music starts at the one minute mark, and about the next 45 seconds are spent loading the loader screen.  In total it takes &lt;strong&gt;less than 5 minutes&lt;/strong&gt; before the loader music changes to the title music, at which point loading is complete, despite the extra time taken by the loading screen.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The Last Ninja&lt;/strong&gt; actually uses both sides of the tape - it is a comparatively big game for the machine.  However, it is effectively several distinct games chained together, so there is a relatively normal loading time at the start, and subsequently after completing each level, each with its own set of loader music.  The loader music begins at about 1m10s, and the first level completes loading in &lt;strong&gt;7m30s&lt;/strong&gt; total.&lt;/p&gt;&#xA;&lt;p&gt;In short, there's a genuine reason why short 10 and 15 minute tapes - this rating counting &lt;em&gt;both&lt;/em&gt; sides - were commonly produced for use with home computers.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-10-29T16:40:47.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16713" PostTypeId="2" ParentId="11022" CreationDate="2020-10-29T16:46:47.030" Score="2" Body="&lt;p&gt;Not all desiccant bags are create equal.  Silica Sand Beads only adsorb moisture and stick to surface.  Expanding Polymer bags absorb and can pull moisture into bag in enclosed spaces.  check it out.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=0U6kIsGj9X8&amp;amp;t=5s&amp;amp;ab_channel=SteelCamel&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=0U6kIsGj9X8&amp;amp;t=5s&amp;amp;ab_channel=SteelCamel&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19776" LastActivityDate="2020-10-29T16:46:47.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16714" PostTypeId="1" AcceptedAnswerId="16715" CreationDate="2020-10-29T18:16:57.840" Score="4" ViewCount="266" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Refal&quot; rel=&quot;nofollow noreferrer&quot;&gt;Refal&lt;/a&gt; is a language from the 1960s that is based on the concept of pattern-matching with many features that could be considered advanced even today- it is functional, garbage collected, and supported metaprogramming.&lt;/p&gt;&#xA;&lt;p&gt;It was developed in Russia, much of its documentation is in Russian, and it seems to have dropped off the map with the death of its author V. Turchin in 2010.&lt;/p&gt;&#xA;&lt;p&gt;Although it seems Refal was competitive with Lisp, and certainly seems to have brought some ideas to the table, I could find no reference to Refal having had any influence or impact on any other computing language.&lt;/p&gt;&#xA;&lt;p&gt;Why is this? Is Refal indeed the programming language equivalent of a &amp;quot;language isolate&amp;quot;? And how could it have been so for a language that was actively developed, and apparently used, for at least 40 years?&lt;/p&gt;&#xA;" OwnerUserId="19778" LastActivityDate="2020-10-29T18:27:53.963" Title="Whatever happened to the Refal language?" Tags="&lt;history&gt;&lt;software-development&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16715" PostTypeId="2" ParentId="16714" CreationDate="2020-10-29T18:27:53.963" Score="3" Body="&lt;p&gt;The &lt;a href=&quot;http://etutorials.org/Server+Administration/TCPIP+network+administration/Chapter+10.+sendmail/Section+10.6.+Rewriting+the+Mail+Address/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sendmail address rewriting language&lt;/a&gt; used at the time when an e-mail address could include a mix of various routing notations, with its meta-variables, recursively called rulesets, and magic brackets &lt;code&gt;&amp;lt;&lt;/code&gt; and &lt;code&gt;&amp;gt;&lt;/code&gt; to denote the part of the string under consideration does resemble Refal somewhat.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-10-29T18:27:53.963" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16716" PostTypeId="2" ParentId="16711" CreationDate="2020-10-29T18:29:34.347" Score="6" Body="&lt;p&gt;In answering this question, I found that there were multiple generations of 11/780 memory board, and so sizes, capacity, etc., are quite hard to pin down.  I still have not found a board larger than 4MB.&lt;/p&gt;&#xA;&lt;p&gt;I did get an answer for physical board size, though not for slot width (board separation).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;One MS780 memory controller can take 16 memory array boards.  For the original release of the 11/780, the boards were the M8210 or M8211 (32Kbyte/8Kbyte capacity, respectively), leading to a maximum of 512 KB per controller.&lt;/p&gt;&#xA;&lt;p&gt;The system supported up to 4 controllers, thus a max of 2MB.&lt;/p&gt;&#xA;&lt;p&gt;So, for the 'get a feel' part, that's up to 64 memory boards.  If we assume the boards are spaced at least 1&amp;quot; apart (I could not find slot-size info), that's over 5 feet of memory alone.&lt;/p&gt;&#xA;&lt;p&gt;ECC was used, 8 check bits per 64 data bits.&lt;/p&gt;&#xA;&lt;p&gt;The board size us 12.5 x 15.5 x 0.75 in; I assume the 'depth' includes the tallest chips.&lt;/p&gt;&#xA;&lt;p&gt;The board numbers came from the &lt;a href=&quot;http://www.bitsavers.org/pdf/dec/vax/780/EK-MS780-TD-001_MS780_Technical_Manual_Aug78.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MS780 memory system tech manual&lt;/a&gt;, see figure 1-1 on page 1-3.&lt;/p&gt;&#xA;&lt;p&gt;Here's a link to an &lt;a href=&quot;https://www.computerhistory.org/collections/catalog/XD165.80&quot; rel=&quot;nofollow noreferrer&quot;&gt;M8211 catalog entry&lt;/a&gt; in the Computer History Museum.  When they say '64K module' they apparently mean 'bits'.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Later memory boards increased the board capacity and thus the system capacity. My 1980 &amp;quot;VAX Hardware Handbook&amp;quot; (includes the 780 and 750) has the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Per chip 16K bits&lt;/li&gt;&#xA;&lt;li&gt;Per board 256KB&lt;/li&gt;&#xA;&lt;li&gt;Per controller 4MB&lt;/li&gt;&#xA;&lt;li&gt;Per system 16MB&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The physical board size won't have changed for these though.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;This &lt;a href=&quot;http://bitsavers.org/pdf/dec/vax/780/MP01759_MS780H_Jun84.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1984 print set&lt;/a&gt; for the MS780H memory controller talks about 256Kbit MOS devices,  which squares with the OP's chip identification.&lt;/p&gt;&#xA;&lt;p&gt;The memory board appears to be an M8374, a 4MB board (which nets out to 144 chips including 1 check bit per byte; the print set say there are 156 RAM chips).&lt;/p&gt;&#xA;&lt;p&gt;The system might only support 2 controllers at this point though. It's not clear to me what is authoritative.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-10-30T01:07:18.023" LastActivityDate="2020-10-30T01:07:18.023" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16717" PostTypeId="1" CreationDate="2020-10-29T21:15:52.057" Score="3" ViewCount="263" Body="&lt;p&gt;I'm looking for a way (apart from manually wiring up Fig.15 of &lt;a href=&quot;http://www.z80.info/zip/z80-interrupts_rewritten.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Z80 Family Program Interrupt Structure&lt;/a&gt;) to daisy chain &amp;quot;non-Z80-family&amp;quot; devices in an IM2 Z80 system &lt;a href=&quot;https://gitlab.com/nonchip/nz80mod/&quot; rel=&quot;nofollow noreferrer&quot;&gt;i'm designing&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So far i've come across the &amp;quot;one PIO (using a bit mask) / CTC (using a trigger input) / CIO (not sure how, haven't looked too much at that chip yet, but afaik it's just a PIO/CTC combined) port per device&amp;quot; approach, which, frankly, sounds rather wasteful (in pcb real estate, power, money and code overhead, especially since i'm making a modular system with multiple daughter boards, so each one would need one of those chips).&lt;/p&gt;&#xA;&lt;p&gt;I've also found &lt;a href=&quot;https://patents.google.com/patent/US4860200A/en&quot; rel=&quot;nofollow noreferrer&quot;&gt;US4860200A&lt;/a&gt;, but couldn't find any indication that ever was an actual Tektronix product.&lt;/p&gt;&#xA;&lt;p&gt;I've tried (and failed) to wire up the circuit in GAL22V10, and want to avoid full on CPLD/FPGA/microcontroller solutions.&lt;/p&gt;&#xA;&lt;p&gt;Essentially what i need is an IC with data bus, IEI, IEO, INT on one side and &amp;quot;HELP&amp;quot;, &amp;quot;INTACK&amp;quot; on the other, and implements the logic linked to above. Address decoding and outputting the IM2 interrupt vector i can do myself easily with a binary comparator and a tristateable buffer (or more likely the combination of those in a GAL because i have a bunch of them and they save space&amp;amp;power)&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know any such thing I might've missed in my research?&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;for the record, i've asked this on &lt;a href=&quot;https://www.reddit.com/r/AskElectronics/comments/jfuxj9/z80_interrupt_daisy_chaining_for_nonz80family/&quot; rel=&quot;nofollow noreferrer&quot;&gt;reddit&lt;/a&gt; too, where you can see a naive and extremely wrong attempt at the GAL implementation, but we didn't come to any results there, the most helpful reply there was showing me how to do interrupts in IM0 with polling the devices to see which has data, which i already knew&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="19630" LastEditorUserId="19630" LastEditDate="2020-10-29T21:32:49.727" LastActivityDate="2020-11-27T22:15:15.067" Title="Z80: Interrupt (IM2) daisy chain for &quot;foreign&quot; peripherals" Tags="&lt;z80&gt;&lt;interrupt&gt;" AnswerCount="2" CommentCount="18" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16718" PostTypeId="1" AcceptedAnswerId="16721" CreationDate="2020-10-29T21:37:27.150" Score="8" ViewCount="406" Body="&lt;p&gt;The Research Machines 380Z was an early British microcomputer, released in 1977. Unlike many other early microcomputers, the design was industrial style, a hefty metal box, sometimes described as 'built like a tank'; a good description can be found here: &lt;a href=&quot;https://www.pinterest.co.uk/pin/658229301760799838/&quot; rel=&quot;noreferrer&quot;&gt;https://www.pinterest.co.uk/pin/658229301760799838/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It is said to be rack mountable, though the width has been given at 59.5 cm, which is 23.4 inches; I thought a standard equipment rack was 19 inches wide?&lt;/p&gt;&#xA;&lt;p&gt;One thing I have not been able to find is a figure for the weight of the machine. I imagine it must've been quite substantial, and not necessarily easy to carry with those thin handles.&lt;/p&gt;&#xA;&lt;p&gt;How much did it weigh?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-15T17:51:56.990" Title="How much did the RM 380Z weigh?" Tags="&lt;hardware&gt;&lt;british-computers&gt;&lt;rm&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16719" PostTypeId="1" CreationDate="2020-10-29T22:26:54.910" Score="9" ViewCount="331" Body="&lt;p&gt;Computer pioneer Grace Hopper often recounted the story of her team &lt;a href=&quot;https://en.wikipedia.org/wiki/Grace_hopper#Anecdotes&quot; rel=&quot;noreferrer&quot;&gt;finding the first physical computer bug&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;While she was working on a Mark II Computer at Harvard University in 1947, her associates discovered a moth that was stuck in a relay; the moth impeded the operation of the relay.  While neither Hopper nor her crew mentioned the phrase &amp;quot;debugging&amp;quot; in their logs, the case was held as an instance of literal &amp;quot;debugging.&amp;quot;  For many years, the term &lt;em&gt;bug&lt;/em&gt; had been in use in engineering. The remains of the moth can be found in the group's log book at the Smithsonian Institution's National Museum of American History in Washington, D.C.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The photo below of the log book states &amp;quot;Relay #70 Panel F&amp;quot;.  &lt;strong&gt;What precise function did this relay perform?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kucdt.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kucdt.jpg&quot; alt=&quot;first computer bug&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-05-12T03:39:01.690" LastActivityDate="2021-05-12T03:39:01.690" Title="What was the specific function of the relay which captured Grace Hopper's famous &quot;bug&quot;?" Tags="&lt;history&gt;&lt;bugs&gt;&lt;relay-computer&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16721" PostTypeId="2" ParentId="16718" CreationDate="2020-10-29T23:19:40.427" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;It is said to be rack mountable, though the width has been given at 59.5 cm, which is 23.4 inches; I thought a standard equipment rack was 19 inches wide?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. It's a bit wider than 49 cm or 19 inches (*1) as shown here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xQ5Gi.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xQ5Gi.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So it's safe to assume that the 59.5 you found might have been a typo and should rather read 49.5.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;One thing I have not been able to find is a figure for the weight of the machine. I imagine it must've been quite substantial,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While I can't answer the weight part exactly due a &lt;a href=&quot;https://i.stack.imgur.com/OcoE4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;dead battery&lt;/a&gt;, I did a quick comparison with a beer case (17 kg) and it did feel rather similar. Plus at least another ~2 kg for the keyboard :)&lt;/p&gt;&#xA;&lt;p&gt;&lt;s&gt;More as soon as I get a working scale.&lt;/s&gt; Only 4 month later I got that darn beast working:&lt;/p&gt;&#xA;&lt;p&gt;The &lt;strong&gt;system unit wights 15.2 kg&lt;/strong&gt; (ca. 33 1/3 foot-stones or whatever that is called) plus the &lt;strong&gt;keyboard&lt;/strong&gt; adding an astonishing &lt;strong&gt;4.2 kg&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and not necessarily easy to carry with those thin handles.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Oh, they are, like with any 19 inch, really helpful and make moving it rather easy. It's the boxy shape that gets into one's way. Carrying two helps, one in each hand to balance them out.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Yes, I own a tape measure with inches. I got it a few weeks ago in England, they still have them.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-15T17:51:56.990" LastActivityDate="2021-02-15T17:51:56.990" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="16722" PostTypeId="2" ParentId="14457" CreationDate="2020-10-30T01:51:18.737" Score="2" Body="&lt;p&gt;The UNIVAC I had an assembly language that was mostly single-letter opcodes.  Here is the &amp;quot;Code Card&amp;quot; developed by &lt;a href=&quot;http://edan.si.edu/slideshow/viewer/?eadrefid=NMAH.AC.0324_ref300&quot; rel=&quot;nofollow noreferrer&quot;&gt;Grace Hopper&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fWMXJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fWMXJ.jpg&quot; alt=&quot;UNIVAC I Code Card&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-10-30T01:51:18.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16723" PostTypeId="2" ParentId="14505" CreationDate="2020-10-30T03:06:06.913" Score="3" Body="&lt;p&gt;The Honeywell 800 had a multithreading CPU with hardware registers for 8 concurrent threads.  See &lt;a href=&quot;https://people.cs.clemson.edu/%7Emark/h800.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here, an article&lt;/a&gt; for a brief description.&lt;/p&gt;&#xA;&lt;p&gt;Basically the CPU itself implemented a round-robin scheduler - first it would run a single instruction from &amp;quot;thread 1&amp;quot; out of the corresponding register set 1, next it would run a single instruction from &amp;quot;thread 2&amp;quot; out of the corresponding register set 2.  (Looking now &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14506/332&quot;&gt;at the previous answer&lt;/a&gt; this seems to be an example of a &amp;quot;barrel processor&amp;quot; but I don't know for sure.)&lt;/p&gt;&#xA;&lt;p&gt;Notice that this computer was first available in 1960 - and this article claims 89 were delivered.  I know where &lt;em&gt;one&lt;/em&gt; of them was: When I worked for Honeywell's Marine Systems Division, West Covina, CA while still in college an H-800 was installed there.  It did the &lt;em&gt;payroll&lt;/em&gt; for the Marine Systems Division (I think there were two locations for that business unit).  No disk: Only a bank of spinning tapes.  6 or 8 of them?  Anyway, the thing to note was this was in 1977-1978! Thing had been obsolete for years yet was still running a production job for them - it's how we got paid!&lt;/p&gt;&#xA;&lt;p&gt;(This extended retention of working assets apparently was not unusual for Honeywell.  My desk at work was this large slate gray steel thing that a tank could have run over and left completely undamaged. It had a metal property tag riveted to the front.  It said: &amp;quot;Minneapolis Regulator Company&amp;quot;.  Honeywell stopped being called the &amp;quot;Minneapolis Regulator Company&amp;quot; long before World War II ...)&lt;/p&gt;&#xA;" OwnerUserId="332" LastActivityDate="2020-10-30T03:06:06.913" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16724" PostTypeId="1" CreationDate="2020-10-30T03:53:22.127" Score="3" ViewCount="150" Body="&lt;p&gt;In the MIPS architecture, &lt;code&gt;blez/bgtz&lt;/code&gt; and &lt;code&gt;bltz/bgez&lt;/code&gt; are encoded differently:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;blez/bgtz&lt;/code&gt; are encoded as: [BLEZ/BGTZ: 6 bits] [RS: 5 bits] [0: 5 bits] [OFFSET: 16 bits]&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;bltz/bgez&lt;/code&gt; are encoded as: [REGIMM: 6 bits] [RS: 5 bits] [BLTZ/BGEZ: 5 bits] [OFFSET: 16 bits]&lt;/p&gt;&#xA;&lt;p&gt;My question is:&#xA;Why didn't they encode all 4 branches into the &lt;code&gt;REGIMM&lt;/code&gt; space which is more than large enough to accommodate them and many more?&#xA;Why waste 2 out of 64 instruction slots on &lt;code&gt;blez/bgtz&lt;/code&gt; instead?&lt;/p&gt;&#xA;" OwnerUserId="10686" LastActivityDate="2020-10-30T03:53:22.127" Title="MIPS Encoding of blez/bgtz vs bltz/bgez" Tags="&lt;cpu&gt;&lt;mips&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16725" PostTypeId="2" ParentId="16698" CreationDate="2020-10-30T06:20:09.573" Score="5" Body="&lt;p&gt;Your assumption that Cray computers were designed solely for floating point operations is incorrect.  The Cray 2, at least, supported a variety of integer and logical operations in its vector processors, including population count, which I understand is the critical operation for high performance cryptographic operations. See page 6 of &lt;a href=&quot;http://s3data.computerhistory.org/brochures/cray.cray2.1985.102646185.pdf&quot; rel=&quot;noreferrer&quot;&gt;this document&lt;/a&gt; for a list of supported operations.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-10-30T06:20:09.573" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16726" PostTypeId="2" ParentId="16700" CreationDate="2020-10-30T11:42:06.770" Score="-2" Body="&lt;p&gt;Some games, Gauntlet on Atari 800, Lord of the rings on BBC, for example where multiple 90 minute tapes.&lt;/p&gt;&#xA;" OwnerUserId="19785" LastActivityDate="2020-10-30T11:42:06.770" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16727" PostTypeId="2" ParentId="16700" CreationDate="2020-10-30T13:01:46.227" Score="2" Body="&lt;p&gt;Loading from cassette was very, very common and the default option for most 8-bit micro owners. The early micros like the C64 were reasonably affordable, and the fact you could hook them up to a regular television set as a monitor and an ordinary cassette deck to load data added to that affordability. Floppy drives were quite expensive and could double the cost of owning a system.&lt;/p&gt;&#xA;&lt;p&gt;Games took various different lengths of time to load from cassette depending on a number of factors, but each individual game always took the same length of time to load because the cassette ran at a specific speed. Games loaded from the cassette into the computer's RAM so, broadly speaking, the more memory the game took up when loaded, the longer it took to load.&lt;/p&gt;&#xA;&lt;p&gt;In the very early days of all 8-bit micros, games tended to be quite simple in concept and graphically. Some were designed to fit into far less RAM than your computer had because many micros came with memory options (for example, the Commodore had 16K and 64K models, and the ZX Spectrum 16K and 48K models). Games designed for 16K naturally loaded faster than later, more complex titles that took full advantage of the enhanced machines.&lt;/p&gt;&#xA;&lt;p&gt;Part of the tape-loading experience was a 'loading screen' - usually a graphical display that you could look at while the game loaded. This had to load and show on the screen before the main game started loading, so this added to the loading time. A few games even had loading music that played while the main game loaded. These things loaded in a sequence, so the loading screen/music would load first and be cleared from RAM by the time the main program had loaded.&lt;/p&gt;&#xA;&lt;p&gt;As development on 8-bit micros progressed, programmers found ways to make games load faster by coding their own tape loading systems which could receive data faster than the system's in-built method. To make use of this though, the fast-loading system had to load itself first using the system method, and then the rest of the data on the tape would be in the faster format. These systems often had a timer on the screen which counted down so you could see how long the game had left to load. As this later era of software coincided with bigger titles, games could still take some considerable time to load.&lt;/p&gt;&#xA;&lt;p&gt;Finally, it is worth mentioning 'multi-load' games. These were games that were too big to fit into the memory in one go. Often these were arcade-conversions which had not been designed with small micros in mind. These would usually load the game engine first, then you were asked to stop the tape. Each level of the game would load separately and you were prompted to stop and start the tape in-between levels.&lt;/p&gt;&#xA;&lt;p&gt;I'd say that 5-10 minutes is probably a more realistic average loading time for a decent game at the height of the 8-bit micro era, but to a child that wait could seem a lot longer which may account for the exaggeration in the song you quoted.&lt;/p&gt;&#xA;&lt;p&gt;Having games on cassette did make piracy quite easy, but it also kept production costs quite low so arguably there was less temptation to pirate them when you could buy them at an affordable price. Because there was no internet, piracy was limited to copying games from other people you knew which was far more limiting than file-sharing today. The time it would take for a game to copy tape-to-tape didn't put us off. I'd buy 90-minute blank cassettes which I would append newly copied games to. If a friend brought round a new game we'd load it, and then then I'd copy it while we played it.&lt;/p&gt;&#xA;&lt;p&gt;The line from your song which says &amp;quot;if everything went alright&amp;quot; seems to refer to the fact that tape-loading could sometimes fail. Tapes could get damaged or just degrade over time. Poor quality cassette players could &amp;quot;eat&amp;quot; cassettes - causing the tape to come off the spool and get tangled up inside the deck. Cassette player heads could also be slightly misaligned, and users with persistent loading difficulties were often advised to adjust the azimuth alignment screw which could improve the tone of playback in a way that would be condusive to successful loading. Copied (pirated) cassettes could also be of poorer quality. Some twin-cassette decks available at the time had a feature called 'high-speed dubbing' that copied cassettes at double-speed. I found their games copied this way didn't always load so reliably, possibly because the process left a slight high-pitched whine on the dubbed copy which could interfere with loading.&lt;/p&gt;&#xA;" OwnerUserId="10492" LastEditorUserId="10492" LastEditDate="2020-10-30T20:14:22.940" LastActivityDate="2020-10-30T20:14:22.940" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16728" PostTypeId="2" ParentId="16717" CreationDate="2020-10-30T14:03:23.537" Score="4" Body="&lt;p&gt;My opinion is that I wouldn't rely too much on Z80 daisy-chained interrupts. It was actually invented to &amp;quot;dissolve&amp;quot; the need for the dedicated interrupt controller IC among the ordinary peripheral chips. Besides that only useful feature, everything else is disadvantage:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The need for extra logic inside chips, i.e. decoding RETI instruction and maintaining IEI/IEO chain&lt;/li&gt;&#xA;&lt;li&gt;The need for extra pins dedicated to that interrupt stuff, that is, instead of single /INT output, now ICs have IEI, IEO and /M1 pins. This is probably the most stringent objection given the only standard DIP cases were available at the time.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;A funny thing that the Z80 CPU itself knows little of that daisy chaining. IM2 mode could be made useful without any Z80 peripherals. Another (though little) its 'knowledge' is &lt;code&gt;RETI&lt;/code&gt; instruction that Z80 executes exactly the same way as RET, except for two opcodes instead of one.&lt;/p&gt;&#xA;&lt;p&gt;If I need to have a vectored prioritized interrupt system on Z80, I'd consider the following ideas:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Do not use vectored prioritized system at all&lt;/li&gt;&#xA;&lt;li&gt;Use another IC from 80ies, that is 8259 interrupt controller, along with IM0 mode in Z80&lt;/li&gt;&#xA;&lt;li&gt;When some kind of programmable logic is made voluntarily available, I'd build my own minimal prioritized interrupt controller. It is as simple as having to priority encode interrupt requests to directly form an interrupt vector (for IM2 mode) or &lt;code&gt;RST n&lt;/code&gt; opcode (for IM0 mode).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;P.S.: Consider using MAX CPLDs (that is, EPM7032, 7064 and 7128, or EPM3032, 3064, 3128). They are available in PLCC cases (so that you can use PLCC sockets for them), quite powerful in comparison with GALs/PALs, 5v tolerant (only applicable to EPM30xx, as EPM70xx are already 5v-only devices) and considerably easier to program as vhld/verilog languages are higher level ones.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2020-10-30T14:03:23.537" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16729" PostTypeId="1" CreationDate="2020-10-30T15:21:30.333" Score="4" ViewCount="182" Body="&lt;p&gt;The Commodore PET/VIC-20/C64 tape routines write out the leader for each file twice, and then write the data twice.  While it would seem that this should allow data to be loaded more reliably, experimenting with different kinds of corruption suggests that any problems on the tape are prone to render it unreadable, even if there is a complete undamaged header and a complete undamaged copy of the data.&lt;/p&gt;&#xA;&lt;p&gt;The Commodore tape format certainly provides enough redundant information that a suitably-designed loader would be able to recover from any dropout which is shorter than the gaps between the two copies of a file header, or between the two copies of a file.  As such, it would appear to be an example of a cassette format that uses a crude form of error-correcting code (as alluded to in the other question), but the load routines found in the VIC-20 and C64 don't seem live up to that promise.&lt;/p&gt;&#xA;&lt;p&gt;Are there cases where the redundant information stored on the tape would allow successful loading of data that would otherwise be lost?  Or is the intention simply to provide extra assurance that if both copies retrieve identically the data is almost certainly correct?  Or perhaps tape format was designed for the PET, which might have had enough ROM space available for a more sophisticated tape loader?&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2020-10-30T22:56:51.840" LastActivityDate="2020-10-30T22:56:51.840" Title="From what errors could Commodore's tape loader recover" Tags="&lt;commodore-64&gt;&lt;commodore&gt;&lt;cassette-tape&gt;&lt;commodore-pet&gt;&lt;vic-20&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16730" PostTypeId="2" ParentId="16729" CreationDate="2020-10-30T15:33:10.977" Score="3" Body="&lt;p&gt;What I've heard from people who should know, is that it's simply a form of error &lt;em&gt;checking&lt;/em&gt;, not error &lt;em&gt;correction&lt;/em&gt;.  The data is always read twice, but the second time it simply checks that the data read from the tape is what is already in RAM.  Most other systems, even at that time, used a CRC to do the same job more efficiently.&lt;/p&gt;&#xA;&lt;p&gt;Of course, you can theoretically use the data stored on whichever copy is &amp;quot;good&amp;quot; to reconstruct the file.  But the stock KERNAL routines didn't give you any help with that.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-10-30T15:33:10.977" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16732" PostTypeId="2" ParentId="16689" CreationDate="2020-10-30T20:31:21.643" Score="1" Body="&lt;p&gt;Original Doom publisher &lt;em&gt;id Software&lt;/em&gt; released a number of titles before Doom including Wolfenstein and Commander Keen. These were released as &lt;em&gt;shareware&lt;/em&gt; which meant they were free to be copied and shared, but the shareware versions were not complete and only contained a limited number of levels. Because the internet was not yet widely used, these versions were distributed on floppy disks, sometimes on the cover of computing magazines. This put the playable shareware version in the hands of lots of users.&lt;/p&gt;&#xA;&lt;p&gt;On completion of the shareware game, you were encouraged to buy the complete title. I personally purchased a number of titles like this via mail-order. Floppy disks were very easy to send by mail and many titles sold through the shareware model didn't come in any bulky packaging making it a very cost-effective way to sell software for PC. There may well have been other similar models for selling software.&lt;/p&gt;&#xA;&lt;p&gt;You asked if the game engine was supplied with the original release and then the data for additional levels supplied on purchase. I can't say authoratively whether that was the case with Doom, but many games back then fit onto a single floppy disk, so that single floppy would include both the engine and the level data. If a software house had to send out a second floppy to purchasers it really wouldn't make much difference if the entire game was sent out again. I recall one game I bought like this (the title escapes me) where the game was in two halves, the first half being shareware. The disk sent to me contained just the second half of the game which loaded independently. A code presented on completion of part one allowed you to begin part two.&lt;/p&gt;&#xA;&lt;p&gt;Of course, the immense popularity of Doom following the original MS-DOS release meant that it was released commercially for many other platforms. These more commercial releases were mostly boxed-packages containing the full ported game.&lt;/p&gt;&#xA;" OwnerUserId="10492" LastEditorUserId="10492" LastEditDate="2020-10-30T20:37:52.517" LastActivityDate="2020-10-30T20:37:52.517" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16734" PostTypeId="1" AcceptedAnswerId="16735" CreationDate="2020-10-30T22:42:28.163" Score="-2" ViewCount="330" Body="&lt;p&gt;So, first off, to begin with this isn't &amp;quot;exactly&amp;quot; retrocomputing; the technology in question is about 5-10 years old. That being said, I couldn't find answers anywhere else, so my best bet was to ask here.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, I recently found my mother's old (~5-10 year old) laptop, and I saw a few ports on there that I have been unable to recognize.&lt;/p&gt;&#xA;&lt;p&gt;Here's some pictures:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/8TZsmnF.jpg&quot; alt=&quot;on the side&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/ZcFfGOd.jpeg&quot; alt=&quot;below&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;What exactly are these, and what do they do?&lt;/p&gt;&#xA;" OwnerUserId="19796" LastEditorUserId="15334" LastEditDate="2021-02-01T14:38:42.443" LastActivityDate="2021-02-01T14:38:42.443" Title="What is this port?" Tags="&lt;laptop&gt;&lt;ports&gt;" AnswerCount="2" CommentCount="7" ClosedDate="2020-10-31T13:31:26.220" ContentLicense="CC BY-SA 4.0" />
  <row Id="16735" PostTypeId="2" ParentId="16734" CreationDate="2020-10-30T22:48:37.777" Score="10" Body="&lt;p&gt;That would be USB, Audio out, Microphone in, FireWire. And PCMCIA slot above the two connectors.&lt;/p&gt;&#xA;&lt;p&gt;And there is a connector for a docking station at the bottom.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-10-30T22:48:37.777" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16736" PostTypeId="1" CreationDate="2020-10-30T23:00:02.093" Score="0" ViewCount="66" Body="&lt;p&gt;I have a patched version of CDTV extended rom, which I need to burn to 2 chips. I have 2 ST M27C1000 with pin swap adapter (pins 2 &amp;amp; 24 - M27C1001), TL866 mini pro programmer, hex editor and I was advised in rather cryptic way 'split even odd and swap byte'.&lt;/p&gt;&#xA;&lt;p&gt;What do I need to do to burn it into 2 chips from one *.rom file?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-10-30T23:00:02.093" Title="How to burn CDTV extended ROM image to eeproms" Tags="&lt;programming&gt;&lt;rom&gt;&lt;amiga-cdtv&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16737" PostTypeId="2" ParentId="9093" CreationDate="2020-10-31T00:58:04.590" Score="5" Body="&lt;p&gt;The original FORTRAN I compiler, which was later expanded into the FORTRAN II compiler,&#xA;did some pretty sophisticated optimizations. It was written in 1954–1956, back when many&#xA;programmers thought it was impossible for a computer to generate machine code comparable&#xA;in efficiency to what humans could write. Hence the FORTRAN team focused heavily on&#xA;getting the compiler to produce an efficient object program.&lt;/p&gt;&#xA;&lt;p&gt;One of the authors, Peter Sheridan, wrote an article in 1959 about the method used by the&#xA;compiler to translate expressions (citation below). Here is what it says regarding common&#xA;subexpression elimination:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The next stage of optimization involves the “elimination” of common subexpressions, so as&#xA;to avoid redundant computation. This is accomplished in two steps:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Beginning with &lt;em&gt;S&lt;sub&gt;L&lt;/sub&gt;&lt;/em&gt;, the last segment in Π̅(Φ), and for each &lt;em&gt;i&lt;/em&gt; ≤ &lt;em&gt;L&lt;/em&gt;, the&#xA;set of all &lt;em&gt;S&lt;sub&gt;j&lt;/sub&gt;&lt;/em&gt; with &lt;em&gt;j&lt;/em&gt; &amp;lt; &lt;em&gt;i&lt;/em&gt; is examined for the occurrence of an&#xA;&lt;em&gt;S&lt;sub&gt;j&lt;/sub&gt;&lt;/em&gt; = &lt;em&gt;S&lt;sub&gt;i&lt;/sub&gt;&lt;/em&gt;. As soon as some &lt;em&gt;S&lt;/em&gt;&lt;sub&gt;j&lt;/sub&gt; = &lt;em&gt;S&lt;sub&gt;j&lt;/sub&gt;&lt;/em&gt;,&#xA;&lt;em&gt;S&lt;sub&gt;j&lt;/sub&gt;&lt;/em&gt; is eliminated from Π̅(Φ), and all references to &lt;em&gt;S&lt;sub&gt;j&lt;/sub&gt;&lt;/em&gt; replaced&#xA;by references to &lt;em&gt;S&lt;sub&gt;i&lt;/sub&gt;&lt;/em&gt;, i.e., if some Ψ&lt;sub&gt;&lt;em&gt;k&lt;/em&gt;&lt;/sub&gt; = &lt;em&gt;j&lt;/em&gt;, then &lt;em&gt;j&lt;/em&gt; is set&#xA;equal to &lt;em&gt;i&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Having eliminated, by (1), common segments, we now eliminate common subexpressions.&#xA;Beginning with &lt;em&gt;S&lt;sub&gt;L&lt;/sub&gt;&lt;/em&gt;, and for each &lt;em&gt;i&lt;/em&gt; ≤ &lt;em&gt;L&lt;/em&gt;, the set of all &lt;em&gt;S&lt;sub&gt;j&lt;/sub&gt;&lt;/em&gt;&#xA;with &lt;em&gt;j&lt;/em&gt; &amp;lt; &lt;em&gt;i&lt;/em&gt; is examined for the occurrence of more than one reference to&#xA;&lt;em&gt;S&lt;sub&gt;i&lt;/sub&gt;&lt;/em&gt;, i.e., the occurrence of Ψ&lt;sub&gt;&lt;em&gt;m&lt;/em&gt;&lt;/sub&gt;, Ψ&lt;sub&gt;&lt;em&gt;n&lt;/em&gt;&lt;/sub&gt;, with &lt;em&gt;m&lt;/em&gt; ≠ &lt;em&gt;n&lt;/em&gt;&#xA;and Ψ&lt;sub&gt;&lt;em&gt;m&lt;/em&gt;&lt;/sub&gt; = Ψ&lt;sub&gt;&lt;em&gt;n&lt;/em&gt;&lt;/sub&gt; = &lt;em&gt;i&lt;/em&gt;. If and only if this is the case is&#xA;&lt;em&gt;S&lt;sub&gt;i&lt;/sub&gt;&lt;/em&gt; tagged as a common subexpression (what we call a cs-type segment).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Procedures (1) and (2) together assure the elimination of outermost common subexpressions.&#xA;Thus, if&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Φ = A * (B * C) + SINF(A * (B * C)),&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;then&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[Π̅(Φ) = (0,+,1)(0,+,14)(1,*,A)(1,*,7)(7,*,B)(7,*,C)(14,⊕,SINF)(14,⊕,16)(16,*,A) (16,*,22)(22,*,B)(22,*,C)].&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Procedures (1) and (2) reduce Π̅ to&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(0,+,16)(0,+,14)(14,⊕,SINF)(14,⊕,16)(16,*,A)(16,*,22)(22,*,B)(22,*,C),&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;with &lt;em&gt;S&lt;/em&gt;&lt;sub&gt;16&lt;/sub&gt; tagged as a cs-type segment, since Ψ&lt;sub&gt;0&lt;/sub&gt;&lt;sup&gt;1&lt;/sup&gt; = Ψ&lt;sub&gt;14&lt;/sub&gt;&lt;sup&gt;2&lt;/sup&gt; = 16.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Remember that this was before our modern ideas of how to implement programming languages.&#xA;The formalization described in Sheridan's article is rather complicated, and I'm not going&#xA;to try to explain the notation in this answer. The point is that early optimization&#xA;techniques, from before we came up with things like SSA, were not necessarily ad hoc or&#xA;bad or hacky. Quite a bit of thought and mathematical analysis went into the development&#xA;of FORTRAN I.&lt;/p&gt;&#xA;&lt;p&gt;Citation for the article:&lt;/p&gt;&#xA;&lt;p&gt;P.B. Sheridan. The arithmetic translator-compiler of the IBM FORTRAN automatic coding&#xA;system. &lt;em&gt;Communications of the ACM&lt;/em&gt;, Volume 2, Number 2, February 1959, pages 9–21.&#xA;&lt;a href=&quot;https://archive.computerhistory.org/resources/text/Fortran/102663107.05.01.acc.pdf&quot; rel=&quot;noreferrer&quot;&gt;(PDF)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;See the Software Preservation Group's website for primary resources on implementations of&#xA;other early languages. In many cases source code listings for compilers or interpreters&#xA;are available.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ALGOL: &lt;a href=&quot;http://www.softwarepreservation.org/projects/ALGOL&quot; rel=&quot;noreferrer&quot;&gt;http://www.softwarepreservation.org/projects/ALGOL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Lisp: &lt;a href=&quot;http://www.softwarepreservation.org/projects/LISP&quot; rel=&quot;noreferrer&quot;&gt;http://www.softwarepreservation.org/projects/LISP&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Regarding the first FORTRAN compilers, only FORTRAN II's source code seems to have&#xA;survived; however, as I mentioned, FORTRAN II was derived directly from FORTRAN I, and the&#xA;main changes were extensions. A listing of FORTRAN II can be found in a couple different&#xA;forms &lt;a href=&quot;http://www.softwarepreservation.org/projects/FORTRAN/index.html#Source_code&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;&#xA;(courtesy, again, of the Software Preservation Group).&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2020-10-31T00:58:04.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16738" PostTypeId="1" CreationDate="2020-10-31T01:07:35.487" Score="2" ViewCount="109" Body="&lt;p&gt;I primarily know Shadowgate from the wonderful NES port, which was ported by some Japanese company and whose Japanese musician composed the beautiful, iconic music which I frankly thought was there all along. This turned out to be false; the original game was entirely mute, save for some ridiculous sound effects. Having only learned about the original many years later, it seemed sterile and dead in comparison.&lt;/p&gt;&#xA;&lt;p&gt;The original game lists the credits here: &lt;a href=&quot;https://www.mobygames.com/game/macintosh/shadowgate/credits&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mobygames.com/game/macintosh/shadowgate/credits&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;David Feldman, David Marsh, Terry Schulenburg, Karl Roelofs, Jay Zipnick, Todd Squires, Darin Adler, Tod Zipnick, Waldemar Horwat, Steven Hays&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sadly, they are all bundled together under a generic &amp;quot;Staff&amp;quot; label; there's no telling who actually did what. Frequently, there are just a couple of actual programmers/designers/graphics artists, with several members of a staff/team just being responsible for the business side and marketing and all that stuff, which really has nothing to do with the actual game itself. (But of course is still very important -- crucial even -- for the game to actually find an audience.)&lt;/p&gt;&#xA;&lt;p&gt;I've long searched and tried to figure out the &amp;quot;real&amp;quot; credits. I want to know exactly who did what. I don't think that it's ever the case that all these people would sit in a room and &amp;quot;do a little here and a little there&amp;quot;; that's just not how things work. Maybe they would give minor idea input and things like that, but I'm convinced that there must have been a subset of those listed individuals who did the &amp;quot;actual work&amp;quot; for that classic game.&lt;/p&gt;&#xA;&lt;p&gt;Note that, while I'm &lt;em&gt;also&lt;/em&gt; interested in the answer to the same question for &lt;em&gt;Déjà Vu&lt;/em&gt;, I primarily am asking about the original &lt;em&gt;Shadowgate&lt;/em&gt; for Macintosh and not the other games in the &amp;quot;MacVenture&amp;quot; series.&lt;/p&gt;&#xA;" OwnerUserId="19798" LastActivityDate="2020-10-31T01:07:35.487" Title="Who did what exactly for the original Shadowgate (1987) Macintosh video game?" Tags="&lt;history&gt;&lt;apple-macintosh&gt;&lt;gaming&gt;&lt;software-development&gt;&lt;game&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16739" PostTypeId="2" ParentId="16681" CreationDate="2020-10-31T04:45:58.077" Score="2" Body="&lt;p&gt;(I'll leave the other answer there, because the linked system and OS may be interesting).&lt;/p&gt;&#xA;&lt;p&gt;If the &amp;quot;big box&amp;quot; was a desktop unit comparable in in size and form-factor to a DEC VT-50&amp;quot;, then I would assume it was not a discrete multi-board CPU, but a single IC CPU.&lt;/p&gt;&#xA;&lt;p&gt;The only multi-user system similar to CP/M at this time I can think of is &lt;a href=&quot;https://en.wikipedia.org/wiki/MP/M&quot; rel=&quot;nofollow noreferrer&quot;&gt;MP/M&lt;/a&gt;. As you can read there,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In the early 1980s Digital Research also developed a networking software named &lt;strong&gt;CP/NET&lt;/strong&gt; used to connect an MP/M server with multiple CP/NET clients (named requesters) running CP/M. [...]&lt;/p&gt;&#xA;&lt;p&gt;MP/NET was an MP/M system with networking allowing the MP/M system to function as both requester and server with CP/M requesters.&lt;/p&gt;&#xA;&lt;p&gt;The CP/NET clients could also be run in a diskless configuration with the system stored in ROM, then named &lt;strong&gt;CP/NOS&lt;/strong&gt; (with NOS for Network Operating System).&lt;/p&gt;&#xA;&lt;p&gt;Similar, MP/NOS contained MP/M without local disk facilities. Like CP/NOS, MP/NOS performed the disk functions through the network.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So then the candidates for the &amp;quot;OS with a name similar to CP/M&amp;quot; would be &amp;quot;CP/NET&amp;quot; and &amp;quot;CP/NOS&amp;quot;. A manual for CP/NET can be found &lt;a href=&quot;https://www.autometer.de/unix4fun/z80pack/cpnet/cpnet.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;However, that doesn't fit the description of the CLI: Both CP/NET and MP/M had commands very similar to CP/M. (However, it's possible that the &amp;quot;commands were short abbreviations, sometimes just a letter or two, with arguments that were often numeric.&amp;quot; language was something that ran on top of the OS). It also would involve some kind of networking, not just dumb terminals connected to a central machine, which would be MP/M.&lt;/p&gt;&#xA;&lt;p&gt;So again, not a complete fit, but possibly it helps in remembering more details.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-10-31T04:45:58.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16740" PostTypeId="2" ParentId="16734" CreationDate="2020-10-31T06:26:21.760" Score="4" Body="&lt;p&gt;Those images show PCMCIA, USB (looks like 2.0) , Headphone audio out, Mic audio in, FireWire 400(4-pin type). Second image is Laptop Docking Port, and battery disconnect slider.&lt;/p&gt;&#xA;&lt;p&gt;Here is a very handy link that shows you MANY of the varied symbols on computers:&#xA;Among others the FireWire, which is likely what tripped you up.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.computerhope.com/issues/ch001801.htm#port&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.computerhope.com/issues/ch001801.htm#port&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Or for the actual port &amp;amp; cable appearance:&#xA;&lt;a href=&quot;https://www.whatdoesthatlooklike.com/firewire-cables.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.whatdoesthatlooklike.com/firewire-cables.shtml&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As for the laptop.. that smells like an HP Compaq?  from... Brazil?&#xA;Just wondering.&lt;/p&gt;&#xA;" OwnerDisplayName="user19800" LastActivityDate="2020-10-31T06:26:21.760" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16741" PostTypeId="2" ParentId="16700" CreationDate="2020-10-31T09:38:33.977" Score="0" Body="&lt;p&gt;in the very early days of owning commodore 64 (1981) there were hardly any games available and any games had to be typed in from a book and were written in BASIC.  Next came games on tape. These were mainly written in the mysterious machine code. Longer running tapes (90 mins or more) could stretch a bit, for example we had a tape with lots of games on and the ones at the beginning of the tape usually loaded whereas the ones later on usually didn't load.  Tapes of 60 min length were usually safer.  Load screens sometimes with music were sort of slightly later in the tape game loading experience.  We had one cartridge (a maze game with a mouse and some cheese) which loaded instantly, presumably it was expensive.  Later on in the owning experience came the external disk drive which was of course far quicker and more reliable (mid to late 80s?).&#xA;As to '25 minutes' I wouldn't say that was not the norm.  The longest loading game for tape we had was entirely text based adventure game The Hobbit.  This took 15 minutes to load and 'usually' loaded but not always. According to wikipedia, Hobbit was released for C64 in 1984.&lt;/p&gt;&#xA;" OwnerUserId="19803" LastActivityDate="2020-10-31T09:38:33.977" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16742" PostTypeId="2" ParentId="16711" CreationDate="2020-10-31T12:13:08.823" Score="2" Body="&lt;p&gt;To give you a sense of the inter-board spacing in these types of systems, it is useful to consider the main constraints. These include airflow for cooling, the physical space between the connectors on the backplane and component height.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The gap for airflow purposes was such that most folk could slide their fingertips between boards, but only at the expense of scratches caused by the sharper bits of the through-hole pins. After component height, this means ~10 mm.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The connectors on this generation of system were simple slide in affairs, much like a contemporary PCIe slot. Later generations (e.g. VAX BI backplane) had a much more elaborate cranked/clamped system. Signal integrity along the backplane demands the spacing between the connectors be minimised, but the physical constraints typically limit the pitch to ~20 mm.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To get a sense of the size of the components, those two large silver cylindrical capacitors by the legend card are ~0.5in in diameter (say 10-12 mm). Double sided board were rare because of assembly difficulties, but not unheard of.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So, the net result is an inter-board spacing of around 20 mm.&lt;/p&gt;&#xA;" OwnerUserId="19804" LastActivityDate="2020-10-31T12:13:08.823" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16743" PostTypeId="2" ParentId="14457" CreationDate="2020-10-31T16:16:46.723" Score="2" Body="&lt;p&gt;Control Data had the only reasonable syntax I’ve ever seen in the COMPASS assembler for CDC 60 bit computers. Most instructions were one letter for the type of instruction, followed by the destination register, followed by any expression that would fit into one instruction. For example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SA4 A5+B7 - Set register A4 to sum of A5 and B7&#xA;IX2 X3-X4 - Integer expression, X2 = X3 -X4&#xA;IX2 X3/X4 - Integer expression, X2 = X3 divided by X4.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So no separate add/subtract/multiply/divide instructions in the assembly language.&lt;/p&gt;&#xA;" OwnerUserId="1959" LastActivityDate="2020-10-31T16:16:46.723" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16744" PostTypeId="2" ParentId="14457" CreationDate="2020-10-31T17:50:44.940" Score="1" Body="&lt;p&gt;I guess this is a &amp;quot;on the way to assembler&amp;quot; answer.&lt;/p&gt;&#xA;&lt;p&gt;The FA-5 &amp;quot;Automatic coding system&amp;quot; for BESK doesn't have mnemonics for instructions, those are just notated in normal octal. But, it allows symbolic addressing, computed at &amp;quot;assembly time&amp;quot;. The assembled program was printed out, with symbolic addresses replaced by real addresses. It was also (if short enough) stored in RAM, and could be punched to tape, for later loading.&lt;/p&gt;&#xA;" OwnerUserId="3842" LastActivityDate="2020-10-31T17:50:44.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16746" PostTypeId="1" CreationDate="2020-11-01T01:30:05.527" Score="2" ViewCount="243" Body="&lt;p&gt;I recently &amp;quot;attended&amp;quot; a meeting of the UK Computer Conservation Society on the subject of &lt;a href=&quot;https://en.wikipedia.org/wiki/LEO_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;LEO&lt;/a&gt; (Lyons Electronic Office; Lyons was a bakery and cafeteria business that found itself designing and building computers), and mention was made of the &lt;a href=&quot;https://en.wikipedia.org/wiki/LEO_(computer)#Leo_III&quot; rel=&quot;nofollow noreferrer&quot;&gt;multitasking capabilities of LEO III&lt;/a&gt;.  There was some follow-up talk about the desirability of memory isolation for multitasking, inevitably followed by asking &amp;quot;who was first?&amp;quot;.  The contenders offered were Ferranti, English Electric, and LEO. I missed some of this discussion due to other calls on my attention.&lt;/p&gt;&#xA;&lt;p&gt;The primary mechanism used in second-generation UK computers was datum and limit (base and bounds) registers. Programs run at virtual zero, the hardware relocating address references during execution by adding the datum, after checking that the address did not exceed the limit.&lt;/p&gt;&#xA;&lt;p&gt;I'm going to post my own answer to this, which seems to be an approved SE thing to do, but I really am interested in other answers.&lt;/p&gt;&#xA;&lt;p&gt;The question: what is the earliest example of the use of hardware datum and limit mechanisms for address-space relocation and isolation?&lt;/p&gt;&#xA;&lt;p&gt;Secondary question: was the idea invented multiple times? It &amp;quot;seems an obvious thing to do&amp;quot;, but that's easy for me to say, since I was educated on machines that had the benefit of the invention.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="11446" LastEditDate="2020-11-01T22:19:52.043" LastActivityDate="2020-11-01T22:19:52.043" Title="When/where was datum and limit relocation invented?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;british-computers&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16747" PostTypeId="2" ParentId="16746" CreationDate="2020-11-01T01:30:05.527" Score="2" Body="&lt;p&gt;Looking for more information on the internet about the computers from the companies mentioned, I find:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ferranti Orion, introduced 1961&lt;/li&gt;&#xA;&lt;li&gt;Ferranti-Packard FP6000, introduced 1963&lt;/li&gt;&#xA;&lt;li&gt;English Electric KDF9, introduced 1964&lt;/li&gt;&#xA;&lt;li&gt;LEO III, introduced 1961&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Of these, the dates suggest that Orion (design started 1959) has first claim to the invention.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-11-01T01:30:05.527" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16748" PostTypeId="2" ParentId="16746" CreationDate="2020-11-01T04:07:57.777" Score="2" Body="&lt;p&gt;Another good contender for first is &lt;a href=&quot;http://simh.trailing-edge.com/docs/ctss_hardware.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the special option for the modified IBM 7090 used for the CTSS project&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It adds three 7-bit registers for base, end and relocation registers which specify 256 word blocks.  When in user mode, they operate as typical base/limit registers plus relocation offset.  CTSS always treated base and reloc as 0, but the hardware was more flexible.&lt;/p&gt;&#xA;&lt;p&gt;Exact dating is hard to find, but the system was definitely in operation by mid-1962.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-11-01T04:07:57.777" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16749" PostTypeId="2" ParentId="6159" CreationDate="2020-11-01T05:52:24.800" Score="5" Body="&lt;p&gt;The cash register is an IBM 4693 or 4694 and in 1995 it had just been moved from IBM's General Sales Application to Walmart's own internal point of sale system. If it was still running GSA the display would have said &amp;quot;AMT/TEND&amp;quot; or &amp;quot;ENTER AMT/TEND&amp;quot; when the cashier entered the $20.00 tendered instead of whatever it said. Walmart receipts from registers running GSA would have &amp;quot;CASH-1&amp;quot; in the header row. If &amp;quot;CASH-1&amp;quot; isn't in the header row, it's not running IBM's GSA.&lt;/p&gt;&#xA;&lt;p&gt;Walmart has successfully used legacy IBM front end point of sale equipment for many years because of the improvements they've made on the backend. These days the systems are maintained through a contract with NCR and the back end is running Linux. I think the full screen registers up front are running Java based apps.&lt;/p&gt;&#xA;" OwnerUserId="19805" LastActivityDate="2020-11-01T05:52:24.800" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16750" PostTypeId="1" CreationDate="2020-11-01T06:12:56.813" Score="11" ViewCount="2505" Body="&lt;p&gt;I always start at level 9, game mode A.&lt;/p&gt;&#xA;&lt;p&gt;At some point, whether it's based on time or the number of points, the blocks start falling so fast that the &amp;quot;down button&amp;quot; feature loses all meaning; it gets so intense that it rarely takes longer than a few minutes at the most before the game outspeeds my brain and it's game over for me.&lt;/p&gt;&#xA;&lt;p&gt;This appears to happen roughly around 200,000 points. My record is just about 240,000 points, when it's already absolutely crazy how fast the blocks go.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sub&gt;(I cannot believe that there are people who are able to get 999,999 points. They must have super fast and focused brains. Even 300,000 seems infinitely far away for me; it took me seven months of bathroom breaks to reach 240,000 from my previous record: 230,000... I fear I've reached some sort of upper limit for my own Tetris skills, which probably aren't going to get better at this point.)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;The manual is very vague and isn't clear on whether this is based on time or the number of points.&lt;/p&gt;&#xA;&lt;p&gt;Basically, can I take my sweet time until a certain number of points, or is there an advantage in reaching a high score as fast as possible as well? I sort of assumed that it was time-based, but now I'm unsure. If it's time-based, that's another stress factor to take into consideration, and I'll probably reset even more often if such is the case. After all, it's much easier to get &amp;quot;Tetris strikes&amp;quot; (four rows at once) at level 9 compared to whatever level I'm on when it starts going super fast (I tend to only look at the score), so if it's indeed time-based, I'd want to get in as many such &amp;quot;strikes&amp;quot; as early as possible, before the game goes crazy on me.&lt;/p&gt;&#xA;&lt;p&gt;(This game is truly addicting, and extremely satisfying.)&lt;/p&gt;&#xA;" OwnerUserId="19806" LastEditorUserId="129" LastEditDate="2020-11-02T21:52:55.940" LastActivityDate="2020-11-03T02:25:07.097" Title="In Tetris on Game Boy, does the speed increase depend on time or on the number of points?" Tags="&lt;nintendo&gt;&lt;game-boy&gt;&lt;game&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16751" PostTypeId="2" ParentId="16700" CreationDate="2020-11-01T06:51:56.473" Score="2" Body="&lt;p&gt;Can confirm, at least as a ballbark figure: I remember Impossible Mission taking 15 minutes to load.&#xA;We just went out in the back yard and played in the meantime, being about 12 at the time.&lt;/p&gt;&#xA;&lt;p&gt;How did we put up with it? That was just how long it took. We didn't know how fast it would load 30-odd years in the future, so we didn't have that point of reference.&#xA;I don't remember knowing that cartridges were even available for the C64, though the Spectrum definitely had. Not everything made it all the way out to NZ, back then.&lt;/p&gt;&#xA;" OwnerUserId="4173" LastActivityDate="2020-11-01T06:51:56.473" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16752" PostTypeId="2" ParentId="16746" CreationDate="2020-11-01T10:59:33.827" Score="1" Body="&lt;p&gt;The Atlas computer went into operation in 1962.  It had an associative memory for virtual address mapping in a page by page basis.  This is more flexible than the datum and limit registers,  because the free space need not be shuffled for defragmentation purposes.&lt;/p&gt;&#xA;&lt;p&gt;The main reason for address mapping on a paged basis is that it enables virtual memory.  Some pages can be left on secondary storage until they are needed to honor a memory reference.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2020-11-01T12:20:56.973" LastActivityDate="2020-11-01T12:20:56.973" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16753" PostTypeId="2" ParentId="16750" CreationDate="2020-11-01T11:32:17.677" Score="25" Body="&lt;p&gt;Neither.&lt;/p&gt;&#xA;&lt;p&gt;The level determines how fast the pieces drop. At level 9 a piece drops (assuming you don't press down) 1 row every 11 frames. So at the Gameboy's framerate of 59.73fps that means it drops at a speed of 1 row every 184ms.&lt;/p&gt;&#xA;&lt;p&gt;At level 10 it speeds up, dropping the piece every 10 frames. At level 20 it reaches a speed of 1 drop every 3 frames (50ms) and doesn't get any faster after that.&lt;/p&gt;&#xA;" OwnerUserId="15514" LastActivityDate="2020-11-01T11:32:17.677" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16754" PostTypeId="2" ParentId="16750" CreationDate="2020-11-02T03:03:45.110" Score="-1" Body="&lt;p&gt;from memory 20 years ago, might not be accurate! :p&lt;/p&gt;&#xA;&lt;p&gt;yes, the speed increases with every level!&lt;/p&gt;&#xA;&lt;p&gt;some tips since you seem to struggle:&lt;/p&gt;&#xA;&lt;p&gt;for training you can start in higher levels, so the speed difference is not that high and you don't get lured into getting sleepy in the first levels. there was a combination to start in level 2+10 instead of 2, not sure, maybe A+start or downarrow+start.&lt;/p&gt;&#xA;&lt;p&gt;Also in the higher levels there is no time to think about how to solve the patterns, you try to get one narrow free channel in the middle and anything that does not fit gets moved left or right out of the way.&lt;/p&gt;&#xA;&lt;p&gt;while the current stone is dropping you should already think about where you will place the stone that you see in the next box. or more accurately, you have to know where you will place it.&lt;/p&gt;&#xA;&lt;p&gt;i remember playing on that high levels was like turning the brain off and just letting muscle memory do everything. you get an L, move it to the left and rotate it upside down. for inverse the same, but move it to the right, and so on for the S and inverse S and the long tetris bricks go in the middle channel which might be exactly on row or better two rows, so you can fill it with random pieces from time to time.&lt;/p&gt;&#xA;&lt;p&gt;but i think the best thing was to get the long tetris and clear 4 rows, then the animation of the row destruction gives you some extra milliseconds to breath. ;P&lt;/p&gt;&#xA;&lt;p&gt;do not hit pause .. i repeat, do not hit pause! it's exhausting to play the whole thing until the end, but any break the fast pace and your brain won't be able to jump in when you unpause.&lt;/p&gt;&#xA;&lt;p&gt;good luck, one day you will see the giant rocket, too&lt;/p&gt;&#xA;&lt;p&gt;/* goes to ebay to see if there a used gameboys for purchase */&lt;/p&gt;&#xA;" OwnerUserId="19811" LastActivityDate="2020-11-02T03:03:45.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16755" PostTypeId="2" ParentId="7124" CreationDate="2020-11-02T04:01:10.920" Score="13" Body="&lt;p&gt;The oldest version I have disk images for is 0.87 and the file sizes are:&#xA;(although the WSU.COM creates WS.COM files that crash to the &amp;gt; prompt)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;WSU.COM     29696 (the install program is embedded into the WSU.COM file)&#xA;WSMSGS.COM  14464&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The earliest version I have that the install works is 0.93 and those files sizes are:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;INSTALL.COM 16128&#xA;WSU.COM     29568&#xA;WSMSGS.COM  19328&#xA;OVERVIEW.WS (or EXAMPLE.TXT) 13440&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Also WordMaster (basically a text editor) and WordStar (a word processor) are not the same program, so you can't compare the two as far as the sizes go. WordStar succeeded WordMaster. Both were written by John Robbins Barnaby.&lt;/p&gt;&#xA;" OwnerUserId="19813" LastEditorUserId="15334" LastEditDate="2020-11-02T04:59:40.563" LastActivityDate="2020-11-02T04:59:40.563" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16756" PostTypeId="2" ParentId="6159" CreationDate="2020-11-02T13:57:10.157" Score="3" Body="&lt;p&gt;The particular printer is an &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Printer_Model_4&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM Printer Model 4&lt;/a&gt;, aka IBM 4693 / 4694 / &lt;a href=&quot;https://www.recycledgoods.com/ibm-93f0463-ibm-4693-4694-model-4-receipt-printer-no-cable/&quot; rel=&quot;nofollow noreferrer&quot;&gt;93F0463&lt;/a&gt;. It's an impact receipt printer introduced in 1991. The printer has distinctive up-down arrow control buttons on its left front side.&lt;/p&gt;&#xA;&lt;p&gt;Apart from the very distinctive dot-matrix impact sound, these are journal printers that print the same lines on two different rolls. So instead of one &lt;em&gt;zzeet!&lt;/em&gt; per line, you get &lt;em&gt;zzeet zzeet!&lt;/em&gt;. One receipt is given to the customer, the other retained for record keeping and fraud prevention.&lt;/p&gt;&#xA;&lt;p&gt;Walmart is particularly obsessed with reducing losses from all forms of theft, be it shrinkage (shoplifting), sweet-hearting (tellers deliberately not ringing up items) or whatever new creative methods come up. So journal printing would have been part of their 1990s fraud prevention toolkit.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-11-02T13:57:10.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16757" PostTypeId="1" AcceptedAnswerId="16758" CreationDate="2020-11-02T14:30:34.620" Score="9" ViewCount="1757" Body="&lt;p&gt;After sporadically reading about the C64 and tinkering here and there for over 32 years I finally decided to get to know my C64 memory layout properly. In doing so I have a question about the VIC-II chip:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Why is $D000 - $D03F &amp;quot;copied&amp;quot; to each of $D040 - $D07F, $D080 - $D0BF, ..., $D3C0 - $D3FF ?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://www.c64-wiki.com/wiki/Page_208-211&quot; rel=&quot;noreferrer&quot;&gt;this C64 Wiki page&lt;/a&gt; each one of those 64 byte address areas is the &amp;quot;... same as $D000-$D03F.&amp;quot; For years I've only understood the VIC2 registers in terms of $D000 - $D03F.&lt;/p&gt;&#xA;&lt;p&gt;For a moment I thought I might be able to tell the VIC-II which of those 64 byte memory areas to work with (*), but after doing some POKE-ing and PEEK-ing I found out that the Wiki article is meant to be taken literally. For some reason the C64 duplicates $D000 - $D03F across all those extra 64 byte address areas. Why? I'm guessing some kind of simple hardware hack for cost/design reasons?&lt;/p&gt;&#xA;&lt;p&gt;Just imagine if (*) were true - the potential for use with raster interrupts and sprites could have been awesome because 128 lots of sprite position/other data could have been stored in those areas and 16 raster line interrupts could have quickly switched between them !&lt;/p&gt;&#xA;" OwnerUserId="16295" LastActivityDate="2020-11-03T17:45:53.223" Title="Why does the VIC-II duplicate its registers? (C64)" Tags="&lt;commodore-64&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16758" PostTypeId="2" ParentId="16757" CreationDate="2020-11-02T15:06:37.477" Score="25" Body="&lt;p&gt;It's called &lt;strong&gt;incomplete decoding&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Peripheral registers in the C-64 (and generally in the 6800/6502 world) are &lt;em&gt;memory mapped&lt;/em&gt;, meaning that RAM, ROM, and all the peripheral chips (VIC, SID, and the two CIAs) share one big 64K / 16 bit address space, and a register access on one of these looks just like a memory access to software.* Some kind of circuitry is needed to look at the address bus and figure out which IC should be selected when a given address is accessed. This circuitry is called the &lt;em&gt;address decoder&lt;/em&gt;, and the more fine-grained it divides memory, the more complicated and thus expensive it becomes.&lt;/p&gt;&#xA;&lt;p&gt;To uniquely decode one 64 byte area out of a 64 KB address range, the address decoder must evaluate the first 10 bits of the address, which, using the technology of 1982, would have cost more than Commodore was willing to pay. As the entire memory range from 0xd000 to 0xdfff had been designated as I/O anyway, a compromise was made to evaluate just the first 6 bits of the address in that region, thus assigning&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0xd000 to 0xd3ff to the VIC,&lt;/li&gt;&#xA;&lt;li&gt;0xd400 to 0xd7ff to the SID and&lt;/li&gt;&#xA;&lt;li&gt;0xd800 to 0xdbff to the colour RAM, while&lt;/li&gt;&#xA;&lt;li&gt;subdividing 0xdc00 to 0xdfff further into 4 pages with an additional decoder&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The VIC, however, only has 47 registers, so it needs to look only at the bottom 6 bits of the address bus, and has only 6 address input pins. That means that no-one looks at the 7th to 10th bit of the address -- they are now undecoded. The result is that the VIC appears 16 times in memory, once for each combination of these four bits.&lt;/p&gt;&#xA;&lt;p&gt;Incomplete decoding was common practice when your adress space is larger than your physical memory. When you have only 16K of RAM and 8K of ROM, who cares if you're giving a whole K of the address space to a handful of registers. It's a bit weird to see it in the C-64's cramped address space, but then again, you need bank switching anyway to get to the full 64K.&lt;/p&gt;&#xA;&lt;p&gt;Also, it's important to keep in mind that the VIC really only has 47 registers, and that these registers are &lt;em&gt;on the chip&lt;/em&gt;, not &lt;em&gt;in memory&lt;/em&gt;. So even if you could choose where the VIC appears (your (*)), there'd still be only one set of registers.&lt;/p&gt;&#xA;&lt;p&gt;* as opposed to using a separate I/O address space, as the 8080 and its descendents do&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-11-03T17:45:53.223" LastActivityDate="2020-11-03T17:45:53.223" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16759" PostTypeId="2" ParentId="16757" CreationDate="2020-11-02T15:15:53.333" Score="8" Body="&lt;p&gt;Only top 6 bits are used for address decoding the chip select line for this chip, most likely for simplicity. This covers the range from 0xD000 to 0xD3FF, as it will have the bit pattern 1101:00xx:xxxx:xxxx. Any access in this area selects the same chip that is being talked to.&lt;/p&gt;&#xA;&lt;p&gt;But as the chip itself uses bottom 6 bits of address from 0x00 to 0x3F to select a certain register, the bit pattern is 1101:00xx:xxrr:rrrr so the x bits are don't care and thus the 0x40 chip registers have many aliases in the 0x400 address space reserved for it.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-11-02T15:15:53.333" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16760" PostTypeId="2" ParentId="16685" CreationDate="2020-11-02T17:12:59.197" Score="7" Body="&lt;h1&gt;GNU Parted's flags are misleading.&lt;/h1&gt;&#xA;&lt;p&gt;GNU Parted's &amp;quot;flags&amp;quot; are not accurate representations of how partition tables actually work.&#xA;They are abstractions, that are mapped, with varying degrees of congruence, onto the actual partition table mechanisms.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The MBR-style (a.k.a. &amp;quot;DOS&amp;quot;) partitioning scheme originally had an 8-bit type code and 8 bits of flags (only one of which was actually used) for each partition table entry, which IBM extended to have some more flags in an ancillary table in an adjoining disc block.&lt;/li&gt;&#xA;&lt;li&gt;The EFI partitioning scheme has a GUID for the partition type and a set of 64 attribute bits for each partition table entry.  48 of the attribute bits apply in general to all types of partitions and 16 of them have meanings that depend from the partition type.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Parted's &lt;code&gt;hidden&lt;/code&gt; flag does not actually map to a single real flag bit in the MBR-style partition table, and maps to an unexpected flag in the EFI partitioning scheme.&lt;/p&gt;&#xA;&lt;p&gt;In the EFI partitioning scheme, one would expect Parted's &lt;code&gt;hidden&lt;/code&gt; flag to map to the &amp;quot;hidden&amp;quot; attribute bit.&#xA;The &amp;quot;hidden&amp;quot; attribute bit is one of the type-specific bits, bit 62, and only means that for &lt;em&gt;Microsoft Basic Data&lt;/em&gt; partitions (type EBD0A0A2-B9E5-4433-87C0-68B6B72699C7).&#xA;But Parted's &lt;code&gt;hidden&lt;/code&gt; maps to the (general) &amp;quot;the platform requires this partition in order to function&amp;quot; flag instead.&#xA;(Ironically, this is more akin to &amp;quot;system&amp;quot; rather than &amp;quot;hidden&amp;quot;.)&lt;/p&gt;&#xA;&lt;p&gt;In the MBR-style partitioning scheme, Parted's &lt;code&gt;hidden&lt;/code&gt; flag alters the partition type code.&#xA;It does not correspond to a flag or an attribute bit in the actual partition table at all.&lt;/p&gt;&#xA;&lt;p&gt;Various tools have made partitions &amp;quot;hidden&amp;quot; by altering their type codes to ones that operating systems do not recognize.&#xA;Andries Brouwer's list of partition types as of 2015 listed IBM's Boot Manager, FreeDOS's &lt;code&gt;fdisk&lt;/code&gt; program, Acronis's OS Selector, and BlueSky's Power Boot each with different formulae for altering the types of &amp;quot;hidden&amp;quot; partitions.&#xA;(This is a deceptively short list; as other softwares have simply adopted the mechanisms of one of these tools.)&lt;/p&gt;&#xA;&lt;p&gt;Parted only knows about the IBM scheme, which has a parallel set of partition type codes (for the few &amp;quot;hideable&amp;quot; types of partitions) with bit 5 toggled.&#xA;But this is far from being an IBM or OS/2 thing, nor even was it three decades ago.&lt;/p&gt;&#xA;&lt;h1&gt;What partition type codes (in the MBR-style scheme) do&lt;/h1&gt;&#xA;&lt;p&gt;Partition type codes prevent operating systems from trying to automatically mount disc volumes that they either won't recognize or won't handle correctly.&#xA;Operating systems such as MS/PC/DR-DOS and OS/2 would scan the entire partition table and try to automatically mount disc volumes for every partition that had a type code that they recognized.&lt;/p&gt;&#xA;&lt;p&gt;The various &amp;quot;FAT&amp;quot; partition types are widely mis-named.&#xA;They didn't denote 12-bit, 16-bit, or 32-bit File Allocation Table widths.&#xA;They denoted partitions that &lt;em&gt;earlier versions of MS-DOS would handle wrongly if they tried to use them&lt;/em&gt;, for various reasons: they went over a 16MiB, 32MiB, or 2GiB size limit in the older operating systems' code; they were positioned across or beyond the limit of Cylinder+Head+Sector addressing in the ATA disc I/O command interface; and so forth.&lt;/p&gt;&#xA;&lt;h1&gt;What &amp;quot;hiding&amp;quot; really was&lt;/h1&gt;&#xA;&lt;p&gt;IBM's tools (which were not strictly speaking IBM's Boot Manager, as IBM's &lt;code&gt;fdisk&lt;/code&gt;, &lt;code&gt;setboot&lt;/code&gt;, and to an extent &lt;code&gt;lvm&lt;/code&gt; commands were also in on the act) were also stopping operating systems from automatically recognizing disc volumes, but for a slightly different reason.&#xA;Rather than preventing old code and old addressing modes in I/O commands from breaking on bigger volume sizes and larger discs, IBM's tools were trying to get operating systems to correctly recognize their own boot volumes.&lt;/p&gt;&#xA;&lt;p&gt;(I am using the Microsoft &amp;quot;boot volume&amp;quot;/&amp;quot;system volume&amp;quot; terminology in this answer:&#xA;The &amp;quot;boot&amp;quot; volume is the disc volume containing the main part of the operating system, all of its data files, utility programs, and so forth; whereas the &amp;quot;system&amp;quot; volume is the EFI System Partition or similar.)&lt;/p&gt;&#xA;&lt;p&gt;This wasn't about old operating systems being &lt;em&gt;dangerous&lt;/em&gt; to the hidden volumes, it was about old operating systems not being fully able to identify which disc partitions were themselves.&lt;/p&gt;&#xA;&lt;p&gt;Some old operating systems would simply assume that they were bootstrapped from the first primary partition in the partition table that had a recognizable partition type, and take that to be their boot volume.&#xA;Newer operating systems would do things such as: check the in-memory copy of the Volume Boot Record for its BIOS Parameter Block, and compare the sector start position to the various partition table entries to see which one was the boot volume; or have a bespoke boot manager that encoded the boot volume location as an ARC Path that it passed along to the boot loader program; or patch the boot volume location into the kernel image.&#xA;But a few old ones simply made a simplistic assumption.&lt;/p&gt;&#xA;&lt;p&gt;IBM's tools allowed selecting any primary partition to boot from, so it hid and un-hid primary partitions so that only the right one, actually selected by the user at bootstrap or preselected by the &lt;code&gt;setboot&lt;/code&gt; command, would be recognized as the operating system's own boot volume if it were one of these old operating systems.&lt;/p&gt;&#xA;&lt;p&gt;IBM's tools were not alone.&#xA;There were a number of boot managers and partition utilities around two to three decades ago, some of them lost to history, and some of them switched things around like this (or in other ways) too.&lt;/p&gt;&#xA;&lt;p&gt;If you look up Jan van Wijk's DFSee — still going after 25 years — you will see that its &lt;code&gt;setaccess&lt;/code&gt; and &lt;code&gt;startable&lt;/code&gt; commands do this sort of thing as well.&lt;/p&gt;&#xA;&lt;h1&gt;This mechanism was not vital.&lt;/h1&gt;&#xA;&lt;p&gt;The necessity for this has since gone away.&lt;/p&gt;&#xA;&lt;p&gt;The EFI partitioning scheme only has primary partitions, and has forced the hands of operating systems that were assuming that there was only ever going to be one recognizable primary partition and it was them.&#xA;The EFI Boot Manager and other boot managers can now pass EFI device paths and other sorts of information into boot loader programs.&lt;/p&gt;&#xA;&lt;p&gt;It wouldn't have really been necessary even back then, in fact.&#xA;There was a protocol that worked even back then.&lt;/p&gt;&#xA;&lt;p&gt;As mentioned, the in-memory copy of the Volume Boot Record contained the BIOS Parameter Block for the volume, which had a &amp;quot;hidden sectors&amp;quot; field indicating where on the disc volume it was located.&#xA;This location information could be used as-is in the case of primary partitions, to match against the partition table entries to determine which partition was the boot volume.&#xA;Boot managers, both IBM's and other people's, would fix up the in-memory BPB for secondary partitions, whose on-disc values were relative rather than absolute positions; so that the matching procedure would work for them as well.&#xA;An operating system simply looked through the partition table until it found a partition with the same start position.&lt;/p&gt;&#xA;&lt;p&gt;As mentioned, though, not all operating systems were this smart.&#xA;OS/2 was, and being able to find its own boot volume correctly is what made it possible to install it entirely on secondary partitions (albeit that its installer was still dumb enough to think that only IBM's Boot Manager would do the BPB fixups properly, and require that IBM Boot Manager be present); but others were not.&lt;/p&gt;&#xA;&lt;h1&gt;Further reading&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Jonathan de Boyne Pollard (2006). &amp;quot;&lt;a href=&quot;http://jdebp.uk./FGA/determining-filesystem-type.html#PartitionTypes&quot; rel=&quot;noreferrer&quot;&gt;How partition types (do not) imply filesystem types&lt;/a&gt;&amp;quot;.  &lt;em&gt;How to determine the filesystem type of a volume&lt;/em&gt;.  Frequently Given Answers.&lt;/li&gt;&#xA;&lt;li&gt;Jonathan de Boyne Pollard (2006). &lt;a href=&quot;http://jdebp.uk./FGA/boot-and-system-volumes.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;What &amp;quot;boot&amp;quot; and &amp;quot;system&amp;quot; volumes are&lt;/em&gt;&lt;/a&gt;. Frequently Given Answers.&lt;/li&gt;&#xA;&lt;li&gt;Jonathan de Boyne Pollard (2006). &amp;quot;&lt;a href=&quot;http://jdebp.uk./FGA/bios-parameter-block.html#V3.4&quot; rel=&quot;noreferrer&quot;&gt;MS/PC-DOS version '3.4' BPBs&lt;/a&gt;. &lt;em&gt;All about BIOS parameter blocks&lt;/em&gt;.  Frequently Given Answers.&lt;/li&gt;&#xA;&lt;li&gt;Jan van Wijk (1994).  &lt;em&gt;&lt;a href=&quot;https://www.dfsee.com/dfsee/dfsfdisk.txt&quot; rel=&quot;noreferrer&quot;&gt;FDISK related command reference&lt;/a&gt;&lt;/em&gt;.  dfsee.com.&lt;/li&gt;&#xA;&lt;li&gt;Jan van Wijk (1994).  &amp;quot;&lt;a href=&quot;https://www.dfsee.com/dfsee/dfsmenu-expert-fdisk.php#id03404&quot; rel=&quot;noreferrer&quot;&gt;Set partition Status to&lt;/a&gt;&amp;quot;. &lt;em&gt;DFSee disktool, EXPERT menusystem documentation&lt;/em&gt;.  dfsee.com.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1932" LastActivityDate="2020-11-02T17:12:59.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16765" PostTypeId="1" CreationDate="2020-11-03T01:20:32.610" Score="8" ViewCount="284" Body="&lt;p&gt;The first computer prediction of a U.S. Presidential election was by a UNIVAC I computer used by CBS News on election night 1952.  &lt;a href=&quot;http://edan.si.edu/slideshow/viewer/?eadrefid=NMAH.AC.0324_ref304&quot; rel=&quot;noreferrer&quot;&gt;At 9:15 pm&lt;/a&gt;, with only 3.4 million of the eventual 61.8 million popular votes counted, &lt;a href=&quot;http://edan.si.edu/slideshow/viewer/?eadrefid=NMAH.AC.0324_ref305&quot; rel=&quot;noreferrer&quot;&gt;the UNIVAC predicted&lt;/a&gt; 43 states and 438 electoral college votes for Dwight Eisenhower, and 5 states and 93 electoral votes for Adlai Stevenson.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/1952_United_States_presidential_election#Results&quot; rel=&quot;noreferrer&quot;&gt;actual results&lt;/a&gt; were 39 states and 442 electoral votes for Eisenhower.  The popular vote was also within 3.5%.  It proved to be a success for both UNIVAC and CBS.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;What inputs and algorithms were used by the UNIVAC to predict the election?&lt;/strong&gt;  Was this merely a ratio of the votes counted at the time, or was there a more sophisticated mathematical model?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gV9Tz.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gV9Tz.jpg&quot; alt=&quot;UNIVAC prediction of the 1952 election&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-11-05T02:04:17.557" Title="How did a UNIVAC predict the results of the 1952 U.S. Presidential election?" Tags="&lt;history&gt;&lt;univac&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16766" PostTypeId="2" ParentId="16750" CreationDate="2020-11-03T02:25:07.097" Score="0" Body="&lt;p&gt;Neither, the speed depends on the level, which in turn depends on the number of lines you have completed.&lt;/p&gt;&#xA;&lt;p&gt;So if you want to maximize your score, then in the early game you want to focus on getting as much score as possible out of each line, then at some point switch focus to preparing for and then surviving the speedup.&lt;/p&gt;&#xA;" OwnerUserId="499" LastActivityDate="2020-11-03T02:25:07.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16767" PostTypeId="1" CreationDate="2020-11-03T08:06:13.253" Score="9" ViewCount="1941" Body="&lt;p&gt;What is algorithms use for boot/start sound (when turn on computer) in Apple IIe and Apple IIgs? I can't find information about Apple boot sound algorithms or where in computer ROM store either algorithm.&lt;/p&gt;&#xA;" OwnerUserId="18369" LastActivityDate="2020-11-03T18:07:54.617" Title="Algorithm for Apple IIe and Apple IIgs boot/start beep" Tags="&lt;apple-ii&gt;&lt;rom&gt;&lt;boot&gt;&lt;sound&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16768" PostTypeId="2" ParentId="16767" CreationDate="2020-11-03T10:14:15.850" Score="2" Body="&lt;p&gt;Look here for ROM Disassembly: &lt;a href=&quot;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Computers/Apple%20II/Apple%20IIe/Manuals/Apple%20IIe%20Reference%20Manual%20Addendum%20Monitor%20ROM%20Listings.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Computers/Apple%20II/Apple%20IIe/Manuals/Apple%20IIe%20Reference%20Manual%20Addendum%20Monitor%20ROM%20Listings.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Look on Page 11, Adresses FBD9 to FBEF,&lt;/p&gt;&#xA;" OwnerUserId="16504" LastActivityDate="2020-11-03T10:14:15.850" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16769" PostTypeId="1" AcceptedAnswerId="16772" CreationDate="2020-11-03T10:45:11.527" Score="2" ViewCount="398" Body="&lt;p&gt;I did an installation of Workbench 3.1 grounds up. The system takes a moment to boot, well over a minute. I've watched a YouTube video where the system booted in seconds. I have another image of Workbench1.3 on different SD card, it boots in seconds as well. Is it done using software, patches or skilled manipulation of files like boot-sequence, startup-sequence?&lt;/p&gt;&#xA;&lt;p&gt;My setup:&lt;/p&gt;&#xA;&lt;p&gt;CDTV KS 3.1, 030 MMU 64MB Fast RAM (TF536), 2GB system partition only (sd2ide), disabled extended rom.&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2020-11-03T18:39:56.740" LastActivityDate="2020-11-16T14:55:57.590" Title="What tricks or techniques were used to speed up AmigaOS boot" Tags="&lt;amiga&gt;&lt;operating-system&gt;&lt;amiga-workbench-3.1&gt;&lt;amiga-workbench-1.3&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16771" PostTypeId="1" CreationDate="2020-11-03T12:22:52.863" Score="5" ViewCount="192" Body="&lt;p&gt;I recall seeing a PC demo - meaning an executable program demonstrating various graphics and sound effects - in mid-2000s (does this count as sufficiently retro?) that featured animations of the four seasons. The animations were like a tree is blossoming in the spring, then the tree has green leaves in the summer, then the leaves become yellow and torn away by the wind in the autumn. Also, dandelions flying above green grass in the summer etc.&lt;/p&gt;&#xA;&lt;p&gt;The animations were accompanied with well-written wordings describing the &amp;quot;feeling&amp;quot; of each of the seasons that appeared on the screen phrase after phrase.&lt;/p&gt;&#xA;&lt;p&gt;Would greatly appreciate if anyone could refresh my memory on the name of this demoscene production. I vaguely remember it was a 64K intro, but not 100% sure about that.&lt;/p&gt;&#xA;" OwnerUserId="3303" LastActivityDate="2020-11-04T13:31:03.797" Title="A demoscene production from mid-2000s featuring four seasons animation" Tags="&lt;identify-this-software&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16772" PostTypeId="2" ParentId="16769" CreationDate="2020-11-03T14:34:44.060" Score="3" Body="&lt;p&gt;In general, booting an Amiga from an HDD is quite fast, and can certainly be far less than 30 seconds even when a significant number of drivers and small applications are loaded via commands in &lt;code&gt;S:Startup-Sequence&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It should normally take only ~5 seconds to initialize the hardware and see the display of the CLI window (see below about cold vs. warm boot times). From there, the delay in reaching the Workbench screen is determined mainly by the commands you spawn via your &lt;code&gt;Startup-Sequence&lt;/code&gt;, with the only &lt;em&gt;essential&lt;/em&gt; commands being &lt;code&gt;SetPatch&lt;/code&gt; and &lt;code&gt;BindDrivers&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It should be noted that a cold boot will be longer than a warm boot simply because any HD boot ought to be running &lt;code&gt;SetPatch&lt;/code&gt;. The inclusion of &lt;code&gt;SetPatch&lt;/code&gt; thus adds an extra system initialization sequence lasting ~5 seconds for cold boot only.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;BindDrivers&lt;/code&gt; is necessary to load Disk-based device drivers if you are using any. This is normally a quick process, unless the device driver has a long initialization process for whatever hardware it is controlling.&lt;/p&gt;&#xA;&lt;p&gt;If you want to keep things to a minimum, you can follow these two commands with a simple &lt;code&gt;LoadWB&lt;/code&gt; and &lt;code&gt;EndCLI&lt;/code&gt;. This will completely initialize the system ready for use and the only delay is going to be loading whatever icons from the disk that you use to populate the Workbench desktop. The minimum would be a simple &lt;code&gt;.info&lt;/code&gt; file for your HDD.&lt;/p&gt;&#xA;&lt;p&gt;Of course, you can include as many commands (and sub-scripts!) in your &lt;code&gt;Startup-Sequence&lt;/code&gt; as desired. Each one of these will add some delay, even if only simple DOS commands setting up your environment. You can speed up the repeated use of common DOS commands by using the &lt;code&gt;Resident&lt;/code&gt; command to keep them in RAM.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-11-03T14:34:44.060" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16773" PostTypeId="2" ParentId="16767" CreationDate="2020-11-03T14:37:20.877" Score="30" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What is algorithms use for boot/start sound (when turn on computer)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Algorithm? Well, yes, technically everything is an algorithm. In this case it's simply executing the beep subroutine during reset, which in turn toggles the speaker line 192 times over 0.1s resulting in a sound of roughly 1 kHz, which should be is close to  b′′.&lt;/p&gt;&#xA;&lt;p&gt;Lets have a look into the manual:&lt;/p&gt;&#xA;&lt;p&gt;(All excerpts taken from the 1979 Apple I Reference Manual A2L0001A (030-0004-01) -*1)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/01tyA.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/01tyA.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(The Reset Cycle, p.36)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the end the function BELL1 is called.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jc8Ij.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jc8Ij.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Some Useful Monitor Subroutines, p.62)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;So if you're looking or the algorithm produceing the 0.1 second beep, here it is.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I can't find information about Apple boot sound algorithms or where in computer ROM store either algorithm.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's all in the reference manual, described in great detail, ready to be followed.&lt;/p&gt;&#xA;&lt;p&gt;For an example how to read see below.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;An Exercise in Code Reading&lt;/h2&gt;&#xA;&lt;p&gt;So as usual everything starts at Reset. With a 6502 that's a vector at $FFFC/FD:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WcEWA.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WcEWA.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Monitor ROM Listing, p.171)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;On The Apple II Autostart ROM this points to a routine called ... well .. RESET at $FF59:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/29omc.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/29omc.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Monitor ROM Listing, p.169)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;As shown, RESET calls the BELL function, described in the manual as:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9Tu61.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9Tu61.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Some Useful Monitor Subroutines, p.62)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;BELL is a rather 'short' piece of code, as it simply loads the ASCI BEL character ($07, $87 in Apple keyboard encoding) and calls the standard output routine COUT.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2cyV3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2cyV3.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Monitor ROM Listing, p.163)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;COUT is described as:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ba80P.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ba80P.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Some Useful Monitor Subroutines, p.61)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;COUT itself doesn't do anything but handling the redirection to whatever standard output is set by issuing an indirect jump via CSW.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NdavT.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NdavT.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Monitor ROM Listing, p.167)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The vector was previous (via SETVID, see above) set to COUT1, handling the build in screen:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sBpQ1.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sBpQ1.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Some Useful Monitor Subroutines, p.61)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note that it mentions handling the control character of 'bell'.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6ZbHq.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6ZbHq.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Monitor ROM Listing, p.167)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;COUT1 essentially it only changes the display of control characters and saves A and Y, while forwarding all work to VIDOUT at $FBFD.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BDrbi.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BDrbi.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Monitor ROM Listing, p.163)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;VIDOUT is, as one expects, a rather lengty routine, but luckly all decisions essential to see what happens with the BEL char ($87) are in the first few lines. All non control characters get outputted right away, followed by a check for CR, LF and BS. If neither of these are detected, it must be BEL (*2), so the handling is forwarded to BELL1&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/57TZv.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/57TZv.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Monitor ROM Listing, p.163)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;BELL1 simply waits for ~10 milliseconds, producing that amount of silence, followed by flipping the speaker driver every ~0.5 milliseconds for roughly 100 milliseconds (192 turns), which, easy to see, makes a 0.1 second beep of ~1 kHz.&lt;/p&gt;&#xA;&lt;p&gt;That's it. Everything is described in great detail. No big or small secrets or 'algorithm' beside counting the right number of cycles before fliping the speaker.&lt;/p&gt;&#xA;&lt;p&gt;So for completeness, here's how the manual describes WAIT:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GTCLM.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GTCLM.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Some Useful Monitor Subroutines, p.63)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;While the formula sounds complicated at first, it simply adds up the cycles wasted ... err ... waited within the function as seen clear when looking at the code (*2):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1y4Bt.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1y4Bt.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Monitor ROM Listing, p.165)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The manual describes the Apple II+. Used because the original version most easy reveals all working - also it's a nice course in how to read. Low level speaker handling is the same for all models, while over all operations are the same for the IIe and similar for the IIc and IIgs.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Well, when looking really close, one might find some discrepancies, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/56/fadden&quot;&gt;fadden&lt;/a&gt; did with &lt;a href=&quot;https://6502disassembly.com/a2-rom/#wait&quot; rel=&quot;noreferrer&quot;&gt;his inspection&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-03T18:07:54.617" LastActivityDate="2020-11-03T18:07:54.617" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16774" PostTypeId="2" ParentId="16767" CreationDate="2020-11-03T16:18:26.840" Score="10" Body="&lt;p&gt;The Apple IIgs uses a different routine and has a completely different sound. The monitor entry point is the same as in the Apple //e, though the monitor is a bit tricky to trace because it jumps around a lot (it's trying to preserve the old entry points).&lt;/p&gt;&#xA;&lt;p&gt;To see the code from the Apple IIgs monitor, you need to be in bank $FF.&lt;/p&gt;&#xA;&lt;p&gt;As in the earlier Apple IIs, at $FBD9 you can see it check for $87, and if it matches it loads Y-reg with $9E and jumps to $F89C, which switches to native mode and sets the speed register, then calls $9F88.  The Y-reg contents are negative so it branches to $9FC5.&lt;/p&gt;&#xA;&lt;p&gt;At $9FC5 it doubles the Y-reg value (x2=$3C, regs are still 8-bit) and uses it as an index into a jump table at $A011/A012.  $A04D/A04E holds $A05C, which gets pushed, so RTS takes us to $A05D.&lt;/p&gt;&#xA;&lt;p&gt;That calls through a vector at $E1/006C, which jumps to $FF/B5DE.  Which just sets the carry and returns, causing the following BCS $A064 to be taken.&lt;/p&gt;&#xA;&lt;p&gt;$A064 is where the actual sound code happens; it's a little difficult to trace in the monitor because the register width changes.  It calls $F882 to set the data bank register (B) to $E1 so it can have some storage for counters.  You can see it hitting the $C030 speaker location at $A0AF.&lt;/p&gt;&#xA;&lt;p&gt;Here's a quick dump of the core part of the routine:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CYAREG          .eq   $c036           ;RW Configure Your Apple&#xA;SPKR_GS         .eq   $e1c030         ;RW toggle speaker&#xA;CYAREG_GS       .eq   $e1c036         ;RW Configure Your Apple&#xA;SOUNDCTL_GS     .eq   $e1c03c         ;RW sound settings (0-3=volume)&#xA;&#xA;                .org  $ffa064&#xA;                .rwid shortm,shortx&#xA;                .dbank $00&#xA;                php&#xA;                sei&#xA;                lda   #$b0&#xA;                jsr   $fca8&#xA;                lda   CYAREG&#xA;                pha&#xA;                and   #$7f&#xA;                sta   CYAREG&#xA;                phx&#xA;                phb&#xA;                jsr   $f882&#xA;                .dbank $e1&#xA;                lda   $02df&#xA;                eor   #$0f&#xA;                sta   $016d&#xA;                stz   $016e&#xA;                rep   #$20&#xA;                .rwid longm&#xA;                lda   #$8888&#xA;                sta   $0169&#xA;                lda   #$2000&#xA;                sta   $016b&#xA;                sep   #$30&#xA;                .rwid shortm&#xA;                lda:  $00ca&#xA;                sta   $016f&#xA;                pha&#xA;                clc&#xA;                rep   #$30&#xA;                .rwid longm,longx&#xA;                ldy   $016d&#xA;                ldx   #$0250&#xA;LFFA0A4         dey&#xA;                bne   LFFA0B2&#xA;                ldy   $016d&#xA;                rol   $0169&#xA;                bcc   LFFA0B2&#xA;                lda   SPKR_GS&#xA;LFFA0B2         dex&#xA;                bne   LFFA0CD&#xA;                ldx   #$0250&#xA;                sep   #$20&#xA;                .rwid shortm&#xA;                lda   $016f&#xA;                beq   LFFA0D8&#xA;                dec   A&#xA;                sta   $016f&#xA;                sta:  $00ca&#xA;                sta   SOUNDCTL_GS&#xA;                rep   #$20&#xA;                .rwid longm&#xA;                bra   LFFA0D3&#xA;&#xA;LFFA0CD         lda   #$0005&#xA;LFFA0D0         dec   A&#xA;                bne   LFFA0D0&#xA;LFFA0D3         dec   $016b&#xA;                bne   LFFA0A4&#xA;                .rwid shortm&#xA;LFFA0D8         sep   #$30&#xA;                .rwid shortx&#xA;                pla&#xA;                sta:  $00ca&#xA;                sta   SOUNDCTL_GS&#xA;                plb&#xA;                plx&#xA;                ldy   #$00&#xA;                pla&#xA;                sta   CYAREG_GS&#xA;                plp&#xA;                rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2020-11-03T16:36:37.990" LastActivityDate="2020-11-03T16:36:37.990" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16775" PostTypeId="2" ParentId="16769" CreationDate="2020-11-03T21:37:36.507" Score="0" Body="&lt;p&gt;With a spare megabyte of RAM you could also install Workbench or equivalent in a resident bootable RAM disk (&amp;quot;RAD:&amp;quot;), so you could boot from RAM with no moving parts.&lt;/p&gt;&#xA;&lt;p&gt;Of course that will only work for a warm boot/warm start, not the first &amp;quot;cold&amp;quot; boot.&lt;/p&gt;&#xA;&lt;p&gt;Some details here: &lt;a href=&quot;https://www.amigareport.com/ar139/p1-6.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amigareport.com/ar139/p1-6.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="141" LastEditorUserId="141" LastEditDate="2020-11-16T14:55:57.590" LastActivityDate="2020-11-16T14:55:57.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16776" PostTypeId="1" CreationDate="2020-11-03T21:41:32.480" Score="2" ViewCount="247" Body="&lt;p&gt;What is the modern solution I could use in &lt;a href=&quot;https://oldcrap.org/2018/09/18/commodore-c386sx-lt/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore C386SX-LT&lt;/a&gt;? It requires selection of disk type in bios, otherwise it won't work. Max setting allows up to 63MB, so would a 64MB CF with IDE adapter work?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-11-04T09:20:49.113" Title="Modern HDD replacement for an old laptop" Tags="&lt;hard-disk&gt;&lt;old-hardware-adaptation&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16780" PostTypeId="2" ParentId="16776" CreationDate="2020-11-04T01:52:46.977" Score="1" Body="&lt;p&gt;Modern hard drives tend to list a CHS geometry of some large number of cylinders, 16 heads, 63 sectors.  I'm reading the label on an 18GB IBM Travelstar for that; as CHS only goes up to about 8GB, the listed settings wouldn't cover the entire capacity of the drive.&lt;/p&gt;&#xA;&lt;p&gt;I think it's better to have the correct number of heads and sectors.  It may then be possible to have the operating system use a large number of cylinders than the BIOS supports, while still having compatible geometry otherwise.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-11-04T01:52:46.977" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16781" PostTypeId="2" ParentId="16511" CreationDate="2020-11-04T08:37:16.057" Score="6" Body="&lt;p&gt;I'm going to describe a process that worked for me. If you should happen to be in the same situation, &lt;strong&gt;I'd &lt;em&gt;strongly&lt;/em&gt; recommend you try the procedure outlined by user3840170&lt;/strong&gt; in their answer. It is a much more sensible approach, however it did not work out for me, most likely because I failed to correctly set up the serial port on the Linux end for their &lt;code&gt;auxcopy&lt;/code&gt; program to work.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;To bootstrap out of this situation, the general plan is to connect a Linux machine to the IBM PS/1 using the IBM's serial connection.&lt;/p&gt;&#xA;&lt;p&gt;First of all, buy a USB to null-modem adapter cable as well as a null-modem DE-9 to DB-25 connector. Make sure that the latter is in fact a null-modem adapter, since there are different pinouts for these things. On the Linux machine you need &lt;a href=&quot;http://kermitproject.org/ck90.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ckermit&lt;/a&gt; and optionally &lt;a href=&quot;https://salsa.debian.org/minicom-team/minicom/&quot; rel=&quot;nofollow noreferrer&quot;&gt;minicom&lt;/a&gt;. To test the cabling, boot both machines. On the IBM, enter &lt;code&gt;mode com1:300,n,8,1,p&lt;/code&gt; and on the Linux machine launch &lt;code&gt;minicom&lt;/code&gt; and set up the serial port to 300 baud, 8N1 (&lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;A&lt;/kbd&gt; → &lt;kbd&gt;Z&lt;/kbd&gt; → &lt;kbd&gt;O&lt;/kbd&gt; → Serial Port Setup). After typing &lt;code&gt;ctty com1&lt;/code&gt; you should see the familiar &lt;code&gt;C:\&amp;gt;&lt;/code&gt; prompt in &lt;code&gt;minicom&lt;/code&gt;. Return the control to the IBM by typing &lt;code&gt;ctty con&lt;/code&gt; in &lt;code&gt;minicom&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The next step is now to input a small program that is able to receive text using the Kermit protocol on the IBM. Its source can be found &lt;a href=&quot;http://ftp.nluug.nl/networking/kermit/a/tcomtxt.asm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. It reads:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;XPHPD[0GG0G,0G51G31GB'(G+(G:u'0g?(G&amp;gt;(GE1G@arwIV_F*=US@&amp;lt;1|_,5wXNg-7muTu(4&#xA;1m0ss1k260s@3G1g360@3G0i7t2g3A1g350@3G2E1=0C1g350@3T2M0^\1g3&amp;gt;0@3T=1s2g0T&#xA;1g3;0@3ToN2g391g0t@3G0^F1k0s2?0@3T4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;There is a DOS line break (CR+LF) after the first two lines but not the last one. I entered the program line by line using e.g.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;C:\&amp;gt;copy con line1&#xA;XPHPD[0GG0G,0G51G31GB'(G+(G:u'0g?(G&amp;gt;(GE1G@arwIV_F*=US@&amp;lt;1|_,5wXNg-7muTu(4&#xA;^Z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(&lt;code&gt;^Z&lt;/code&gt; is &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Z&lt;/kbd&gt; or alternatively &lt;kbd&gt;F6&lt;/kbd&gt;) and subsequently &lt;code&gt;copy line1+line2+line3 tcom.com&lt;/code&gt;. This way, you only have to re-type one line if you mess up. To check your program, you can connect using &lt;code&gt;minicom&lt;/code&gt;, issue &lt;code&gt;type tcom.com&lt;/code&gt; and compare the output e.g. using &lt;code&gt;diff&lt;/code&gt;. &lt;code&gt;tcom.com&lt;/code&gt; should also exit upon hitting the &lt;kbd&gt;Esc&lt;/kbd&gt; key.&lt;/p&gt;&#xA;&lt;p&gt;We will now use &lt;code&gt;tcom.com&lt;/code&gt; to copy a small utility to the IBM machine, which is able to extract a &lt;code&gt;BOO&lt;/code&gt; encoded file to a DOS executable, which can be found &lt;a href=&quot;http://web.mit.edu/kubitron/Mail/kermit/99&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Copy the code to a text file called &lt;code&gt;msbpct.com&lt;/code&gt; and make sure you set line endings to Windows/DOS (e.g. &lt;code&gt;gedit&lt;/code&gt; supports this on Linux). On the IBM type &lt;code&gt;tcom.com &amp;gt; msbpct.com&lt;/code&gt;. Then launch &lt;code&gt;ckermit&lt;/code&gt; and enter:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;set line /dev/ttyUSB0&#xA;set speed 300&#xA;set parity none&#xA;set local echo on&#xA;set transmit linefeed on&#xA;set transmit prompt \0&#xA;transmit msbpct.com&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then put a weight on the &lt;kbd&gt;Return&lt;/kbd&gt; key of the IBM (I'm not making this up, it is not working without this for me). C-Kermit shows what has been written to the serial port already, and, after some time, should return to a Kermit prompt. Leave the weight on the &lt;kbd&gt;Return&lt;/kbd&gt; key for a minute or so, then hit &lt;kbd&gt;Esc&lt;/kbd&gt;. &lt;code&gt;msbpct.com&lt;/code&gt; should now be successfully transmitted; when executed, it should give a usage hint message and return.&lt;/p&gt;&#xA;&lt;p&gt;The next step is to encode our payload as a &lt;code&gt;.BOO&lt;/code&gt; file and transmit it the same way. The file I required was &lt;code&gt;CUSTOMIZ.EXE&lt;/code&gt;, which I obtained from &lt;a href=&quot;https://ps1stuff.wordpress.com/download/downloads-for-type-2011/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. The C source of a program to encode a binary file to &lt;code&gt;.BOO&lt;/code&gt; can be found &lt;a href=&quot;http://kermitproject.org/ftp/kermit/ckermit/ckbmkb.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Compile it and use it to encode your payload like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;gcc ckbmkb.c -o msbmkb &amp;amp;&amp;amp; ./msbmkb CUSTOMIZ.EXE CUSTOMIZ.BOO&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Finally, enter C-Kermit one last time and use it to transmit the &lt;code&gt;.BOO&lt;/code&gt; file: simply replace &lt;code&gt;transmit msbpct.com&lt;/code&gt; with &lt;code&gt;transmit CUSTOMIZ.BOO&lt;/code&gt; in the Kermit session above (and likewise launch &lt;code&gt;tcom &amp;gt; CUSTOMIZ.BOO&lt;/code&gt; on the PS/1). Repeat the “weight on &lt;kbd&gt;Return&lt;/kbd&gt;” spiel as before. Now, enter &lt;code&gt;msbpct.com CUSTOMIZ.BOO&lt;/code&gt; which will unpack &lt;code&gt;CUSTOMIZ.EXE&lt;/code&gt;. In my case I had to simply run it, and chose hard disk boot from the GUI menu. Since then, my IBM PS/1 is booting from hard disk without hassle.&lt;/p&gt;&#xA;" OwnerUserId="19624" LastEditorUserId="15334" LastEditDate="2020-11-06T08:20:56.220" LastActivityDate="2020-11-06T08:20:56.220" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16782" PostTypeId="2" ParentId="16776" CreationDate="2020-11-04T09:20:49.113" Score="1" Body="&lt;p&gt;CF &lt;em&gt;should&lt;/em&gt; work. I guess this may help you:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Connect the CF to your computer, no BIOS settings needed.&lt;/li&gt;&#xA;&lt;li&gt;Boot from floppy to the DOS&lt;/li&gt;&#xA;&lt;li&gt;Use utilities like &lt;a href=&quot;http://dl.mroach.com/dos/whatide/&quot; rel=&quot;nofollow noreferrer&quot;&gt;WhatIDE&lt;/a&gt; or &lt;a href=&quot;https://www.vogons.org/download/file.php?id=36376&quot; rel=&quot;nofollow noreferrer&quot;&gt;IDEInfo&lt;/a&gt;. They tell you how the system &amp;quot;see&amp;quot; the CF card (if so)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;You can find more details &lt;a href=&quot;https://www.vogons.org/viewtopic.php?t=55167&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; or &lt;a href=&quot;https://www.vogons.org/viewtopic.php?t=55861&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-11-04T09:20:49.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16783" PostTypeId="1" CreationDate="2020-11-04T12:12:51.547" Score="16" ViewCount="2313" Body="&lt;p&gt;Most automatic elevators have an algorithm that optimises travel between floors and users. Presumably this can be tailored to a particular building.&lt;/p&gt;&#xA;&lt;p&gt;The first elevators were hand-operated purely by button pushing and had no intelligence of their own.&lt;/p&gt;&#xA;&lt;p&gt;I am interested in knowing when the first programmable 'intelligent' elevator was built and what processor and operating system it might have had.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;If I need to be more specific about the meaning of 'intelligence' then I'm happy to restrict this to the first use of one or other &lt;a href=&quot;https://www.tinyepiphany.com/2009/12/elevator-algorithms.html&quot; rel=&quot;noreferrer&quot;&gt;elevator algorithms&lt;/a&gt;,&lt;/p&gt;&#xA;" OwnerUserId="18612" LastEditorUserId="18612" LastEditDate="2020-11-04T12:18:16.083" LastActivityDate="2020-11-06T15:10:22.360" Title="Processor and operating systems for automatic lifts/elevators" Tags="&lt;operating-system&gt;" AnswerCount="1" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16784" PostTypeId="2" ParentId="16771" CreationDate="2020-11-04T13:05:54.557" Score="10" Body="&lt;p&gt;Managed to find it on YouTube thanks to &amp;quot;best of the demoscene&amp;quot; compilations. It's &lt;a href=&quot;http://www.pouet.net/prod.php?which=3282&quot; rel=&quot;noreferrer&quot;&gt;Sonnet by Threestate&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If anyone is interested, here's a YouTube video: &lt;a href=&quot;https://youtu.be/VauT4zzSz0g&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/VauT4zzSz0g&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3303" LastEditorUserId="79" LastEditDate="2020-11-04T13:31:03.797" LastActivityDate="2020-11-04T13:31:03.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16785" PostTypeId="1" AcceptedAnswerId="16827" CreationDate="2020-11-04T13:51:05.787" Score="2" ViewCount="214" Body="&lt;p&gt;I am taking advantage of lockdown(s) and scanning/imaging all old media to archive.org, but would like to donate the boxes when finished.&lt;/p&gt;&#xA;&lt;p&gt;A bit like &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9411/where-can-i-donate-my-old-computer-shopper-magazines-to-make-sure-they-get-scann&quot;&gt;Donating old Computer Shopper Magazines&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Centre for Computing history say they want a list so they can choose.&#xA;I'd rather just give it all away in one go, is there anywhere in the UK ?&#xA;Old Computer media might be too specific a subject for a local library.&#xA;I also realise some of the media maybe corrupted by now.&lt;/p&gt;&#xA;" OwnerUserId="19825" LastActivityDate="2020-11-09T13:52:47.263" Title="Where can I donate Old Mags and Media in bulk in UK?" Tags="&lt;ibm-pc&gt;&lt;zx-spectrum&gt;&lt;atari-st&gt;&lt;cd-rom&gt;&lt;magazine&gt;" AnswerCount="1" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="16786" PostTypeId="2" ParentId="16783" CreationDate="2020-11-04T13:58:28.377" Score="38" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;If I need to be more specific about the meaning of 'intelligence' then I'm happy to restrict this to the first use of one or other &lt;a href=&quot;https://www.tinyepiphany.com/2009/12/elevator-algorithms.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;elevator algorithms&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;All the algorithms mentioned in that post have been implemented by means of relays or even high power contactors way before any processor and even less operating system was used.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Most automatic elevators have an algorithm that optimises travel between floors and users. Presumably this can be tailored to a particular building.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Automatic elevators became already a thing in the 1930s, naturally including logic for decisions what to do when there is no immediate request. This included not only waiting level, but also changing that according to time of day - e.g. not moving to a waiting position during the night, wait at the lobby in morning hours and some higher level during afternoon. All of that was implemented by electro mechanic means (relays, controller cylinders and alike).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I am interested in knowing when the first programmable 'intelligent' elevator was built and what processor and operating system it might have had.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As soon as there are preferences for what to do when there is no immediate request, there must be ways of setup, or as you call it 'programmable' and 'intelligent'. Programming the waiting region for each mode happened by plugging wires or setting pins on controller cylinders. Similar time-dependent settings were put as contact pins on clock driven controller cylinders and so on.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;I got interested in this when our department moved into a 12-storey building in 1980. The building was erected in 1972 and had only three elevators. We occupied the upper 5 floors and waiting was sometimes less than satisfying. So our CEO, a engineer by trade, became, let's say, 'interested' in their workings. This included real-time monitoring on his desk and us optimizing the programming ... a quite nifty mixture of TTL, relays and contactors. Capable of doing example #1, #2 and #3 on the list - no need for #4, as Munich isn't New York :) But sorry, no processor or OS.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;A Little Rant&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Not implying anything about the OP)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The question reminds of the problems we often have looking into the past, as we automatic apply today's point of view. Today we use microprocessors to control even such a simple issue as the charge of a battery, and more often than not they are way more complex than a classic 8-bit microcontroller and run some OS - heck, some even an off-the-shelf Linux. All for a task that could as well be done with a Zener diode and a resistor.&lt;/p&gt;&#xA;&lt;p&gt;We automatically assume that everything more complex than an on/off switch will need some processor to perform, and doing so the application will of course need an OS to run on.&lt;/p&gt;&#xA;&lt;p&gt;But development was different. Tasks like controlling a lift are rather simple sequences of logic that can be easily done using switches and contactors - adding relays only pays when it gets more complex and there's a saving to be made by adding voltage conversion. Replacing this by some TTL logic is neither a mandatory nor even a logical step. There needs to be a saving that makes a redesign necessary - after all, engineering hours to develop new circuitry are way more expensive than just continuing to build the existing one.&lt;/p&gt;&#xA;&lt;p&gt;Same when switching to a microprocessor. And even if there's a switch, why go for a high end version capable of running an OS, when all the task needs is to check a few signals and perform simple decisions? Any minimalist (8080 or 8042 or alike) system will do it and programming is a few hundred bytes on bare metal.&lt;/p&gt;&#xA;&lt;p&gt;The fact that today, 40+ years after the first micros, even the most basic systems offer more than some top end system of the 80s should is no reason to project today's methods back into the past.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2020-11-06T15:10:22.360" LastActivityDate="2020-11-06T15:10:22.360" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16789" PostTypeId="1" CreationDate="2020-11-04T21:19:33.357" Score="5" ViewCount="430" Body="&lt;p&gt;Is there an SSH client for DOS 6.22 or Windows 3.1 that supports certificates and could be used to connect to AWS or Azure instances, or any other server for that matter? I have another laptop restoration I'm hoping to finish this week, want to find a cool purpose for it rather than just sit there and gather dust.&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="15334" LastEditDate="2020-11-05T08:04:30.587" LastActivityDate="2021-01-02T11:07:29.973" Title="SSH for DOS / Win 3.1" Tags="&lt;ms-dos&gt;&lt;windows-3.x&gt;&lt;software-recommendation&gt;" AnswerCount="1" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="16790" PostTypeId="2" ParentId="16765" CreationDate="2020-11-05T02:04:17.557" Score="3" Body="&lt;p&gt;Seems like it was designed by Grace Hopper / Remington Rand:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Navy mathematician Grace Murray Hopper worked for Remington Rand with&#xA;a team of programmers who input voting statistics from earlier&#xA;elections and wrote code to allow the calculator to predict the result&#xA;based on previous races. Technicians would use Unityper machines to&#xA;encode the data onto paper tape to feed into UNIVAC.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.edn.com/univac-predicts-election-results-november-4-1952/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.edn.com/univac-predicts-election-results-november-4-1952/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8856" LastActivityDate="2020-11-05T02:04:17.557" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16792" PostTypeId="2" ParentId="12649" CreationDate="2020-11-05T10:07:24.430" Score="3" Body="&lt;p&gt;There are no differences, except to the version number.&lt;/p&gt;&#xA;&lt;p&gt;The drivers are a various package distributed with DOS, Windows, and some compiler utilities.  It is possible to use later ones, and even earlier ones.&lt;/p&gt;&#xA;&lt;p&gt;You can see from this table, that the versions have been generally updated through time.  Value in (brackets) are reported from the emulation, value in sq brackets [] are period OEM versions supplied with cdrom etc.&lt;/p&gt;&#xA;&lt;p&gt;====&lt;/p&gt;&#xA;&lt;p&gt;The major version (2, 3) are some standard supported.  More features were added to 3, which is why EMSMAGIC patches the NT version of himem.sys.  The minor features are bug fixes.  PC-DOS 5.0 and Windows 3.00 have version 2.77, but in updates to this (and also in MS-DOS 5.00a), this was updated to 2.78.&lt;/p&gt;&#xA;&lt;p&gt;The version numbers are intended also to see if the program should update your version.  So if it were doing its job properly, it would not point your himem line to 2.77 if you already have 3.10.&lt;/p&gt;&#xA;&lt;p&gt;It is for this reason that Windows 9x has a subversion of .95.  It's a higher number than even 3.15 (the PC-DOS 7 version).  Windows 9x emulates mouse 8.3, so you would not install 8.2, but can install 9.0.&lt;/p&gt;&#xA;&lt;p&gt;You find other versions of himem.sys etc in other software, the programming languages supply versions of these.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;                  HIMEM   EMM386    RAMDRV    SMARTDRV  MOUSE   MSCDEX&#xA;  WINNT           (2.77)                                (8.00)   (2.21)&#xA;  MS-DOS  5.00     2.78    4.33      3.06       3.13     8.20    [2.21]&#xA;  Windows 3.11     3.07    4.44      3.06       4.00     8.20    [2.21]&#xA;  MS-DOS  6.00     3.07    4.45      3.06       4.10     8.20     2.22&#xA;  PC-DOS  6.10     3.09    4.45      3.06       4.10     8.20     &#xA;  PC-DOS  6.30     3.09    4.48      3.06       5.00     9.01     2.23&#xA;  MS-DOS  6.20     3.10    4.48      3.07       5.00     8.20     2.23&#xA;  Win/W   3.11     3.10    4.49      3.07       5.00     8.20     2.23&#xA;  MS-DOS  6.22     3.10    4.49      3.07       5.01     8.20     2.23&#xA;  PC-DOS  7.00     3.15    4.50      3.10       5.10     8.20     2.25&#xA;  Windows  95      3.95    4.95      3.06       5.00    (8.30)    2.25&#xA;  Windows  98      3.95    4.95      3.06       5.02    (8.30)    2.25&#xA;  Windows  ME     (3.99)   4.95      3.06       5.02    (8.30)    2.25&#xA;  PC-DOS 7.10      3.15                                           2.25&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;There are three different versions of IBM mouse 8.20, the remaining mouse.com are identical to the retail versions.&lt;/p&gt;&#xA;&lt;p&gt;You can use these utilities with any version of DOS.  For example, the Win98SE versions run as stated under PC-DOS 5 or MS-DOS 5.  The requirement is 3.3 or later.&lt;/p&gt;&#xA;&lt;p&gt;The differences appear to be bug-fixes and optimising.  Windows NT for example, uses an emulated version of (8.00) here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;MSDRIVERS&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;From a very early stage, I figured that the files liste above were not 'part' of DOS or Windows, but rather different drivers distributed with whatever the package was going out the door.&lt;/p&gt;&#xA;&lt;p&gt;In the days of the 286, HIMEM and EMM286 were often distributed with the card, and often specific to it.  In a similar way, MOUSE, MSCDEX, came with these devices.  SMARTDRV and RAMDRIVE were more software drivers, but were dos-&#xA;independent.&lt;/p&gt;&#xA;&lt;p&gt;HIMEM supports quite a number of machines, as can be seen in the help on the subject.  It has a DOS-side that supports a growing portion of XMS 2,x and 3,x interfaces, and a HW-side that supports a range of previous machines.  Faults and implementations on either side could give rise to a new version, although the major versions supported a more extensive interface.&lt;/p&gt;&#xA;&lt;p&gt;EMM386 supports a different range of interrupts etc, that Lotus, Intel and Microsoft agreed on.  Like HIMEM, there are programs that support this, and it involves a bit of poking around in RAM.&lt;/p&gt;&#xA;&lt;p&gt;Windows only uses HIMEM.SYS 2.77 on the DOS side, and VMM.vxd looks after memory on the windows side.  In effect, Windows grabs all of the DOS memory, and VMM is responsible for allocating XMS bits to windows.  This is the same version number reported under Windows 9x, NT and OS/2.&lt;/p&gt;&#xA;&lt;p&gt;Reading the documentation on EMM support given by the likes of EMSMAGIC and VEMM.SYS, these programs exist because EMM was not carried through, but preserved for backwards compatibility.  EMSMAGIC even goes as far as to extend the XMS support in Windows past 2,77, to allow such DOS programs that need it to run.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;ADITIONAL TOOLS&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am not so much a programmer, but a 'power-user' and OS/collector.  As part of the fun, it is possible to see that there is in the retail box, not just DOS, but a range of drivers and utilities (licenced from third-parties), as a bundle.  The same retail upgrade DOS, for example is packaged as 'DOS and additional tools'.&lt;/p&gt;&#xA;&lt;p&gt;The price paid per OEM copy depends on how many 'additional tools' are included.  IBM negotiated a deal with one of their OEMs to supply DOS without QBASIC/EDIT at a reduced rate.  On the same basis, IBM did not buy Microsoft's additional tools.&lt;/p&gt;&#xA;&lt;p&gt;Because the drivers and additional tools serve as marker files, it gives a bit of insight into what is on the distribution.  For example, the MSD 2.0x files were released when IBM had access to the code.  2.00 is in Windows, 2.01 is in DOS 6, both MS-DOS and the oldest PC-DOS 6.00 beta.  2.1x did not appear until after IBM had no access to the new code, ie D 6.22 and W 3.11.  Likewise, we see that PC-DOS 6.30 of 1993-12-31 has the retail 9.01 mouse driver, but an OEM version a month later reverts to IBM's 8.20 version.&lt;/p&gt;&#xA;&lt;p&gt;Other versions of these drivers appear in different retail packages, along with boxed hardware.  Mouse 8.20 contains something like a dozen extra files, including panels for controling mouse.ini under DOS and Windows 3.1.  These are not in the OS versions.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastEditorUserId="19433" LastEditDate="2020-12-02T12:10:33.387" LastActivityDate="2020-12-02T12:10:33.387" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16793" PostTypeId="1" CreationDate="2020-11-05T19:38:02.663" Score="-1" ViewCount="143" Body="&lt;p&gt;On the first boot up, the early builds of Windows 95 (pre-OSR2) would commonly show the following error screen during the post-installation boot-up,&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://www.betaarchive.com/imageupload/2016-05/1462073415.or.32035.png&quot; alt=&quot;Error&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Restarting the computer doesn't fix the issue. How to fix the problem?&lt;/p&gt;&#xA;" OwnerUserId="15407" LastActivityDate="2020-11-05T19:38:23.157" Title="Windows 95 early build's &quot;Windows protection error&quot; on the post-installation boot up" Tags="&lt;windows-95&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2020-11-06T01:48:38.083" ContentLicense="CC BY-SA 4.0" />
  <row Id="16794" PostTypeId="2" ParentId="16793" CreationDate="2020-11-05T19:38:23.157" Score="2" Body="&lt;p&gt;I don't claim that my answer is the &lt;em&gt;only&lt;/em&gt; known solution, but after looking through the obscure forums, I found the following solution.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Download and burn on one of the supported media (CD disc, floppy, or something else), &lt;a href=&quot;http://lonecrusader.x10host.com/fix95cpu.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fix95CPU patch&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;When you are past the last (graphical) installation phase, insert, and boot from the Fix95CPU medium.&lt;/li&gt;&#xA;&lt;li&gt;Go through the on-screen instructions. Once finished, remove the media and reboot&lt;/li&gt;&#xA;&lt;li&gt;Try booting back to the OS. If you're lucky (which is seemingly always for me?) - them you are in luck&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I hope this helps someone. The information on Windows 95 and its troubleshooting seems really scarce online&lt;/p&gt;&#xA;" OwnerUserId="15407" LastActivityDate="2020-11-05T19:38:23.157" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16795" PostTypeId="1" AcceptedAnswerId="16796" CreationDate="2020-11-05T23:23:35.103" Score="15" ViewCount="1581" Body="&lt;p&gt;The two most important chips in a game console are the CPU and GPU. In the Atari 2600, the CPU was a cut down version of the 6502, a very common low-cost microprocessor. The GPU was the TIA, which was manufactured for Atari by several chip companies, as detailed in the answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6915/who-made-the-atari-2600-tia-video-chip&quot;&gt;Who made the Atari 2600 TIA video chip?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When competitor Coleco introduced the Colecovision, they also introduced an 'adapter' to make it compatible with 2600 games, which effectively consisted of a 2600 console in an adapter form factor. Presumably for this, they purchased TIA chips from one of the manufacturers thereof.&lt;/p&gt;&#xA;&lt;p&gt;I am surprised that Atari didn't get to object to this on the grounds that they owned the intellectual property rights to the TIA. Why not? If they didn't own those rights, how did that come about?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-07T16:45:24.400" Title="Who owned the rights to the TIA chip?" Tags="&lt;history&gt;&lt;chip&gt;&lt;atari-2600&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16796" PostTypeId="2" ParentId="16795" CreationDate="2020-11-05T23:55:58.287" Score="22" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Television_Interface_Adaptor&quot; rel=&quot;noreferrer&quot;&gt;TIA&lt;/a&gt; was designed by &lt;a href=&quot;https://en.wikipedia.org/wiki/Jay_Miner&quot; rel=&quot;noreferrer&quot;&gt;Jay Miner&lt;/a&gt; while he was working at Atari. I'd be very surprised if Atari did not hold whatever rights could be held.&lt;/p&gt;&#xA;&lt;p&gt;That being said, the rights that &lt;em&gt;could&lt;/em&gt; be held to an IC design at the time were much more limited than they are today. Before the Washington treaty of 1989 and TRIPS, &lt;a href=&quot;https://www.linkedin.com/pulse/reverse-engineering-patent-protection-cautionary-tale-harry-strange&quot; rel=&quot;noreferrer&quot;&gt;ICs were protected only by patents, not by copyright, and patents by their nature were limited to new functionality, and could not be used to protect an IC as a whole&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;That's how &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14872/did-nintendo-pay-wdc-for-their-use-of-the-65816-core&quot;&gt;Nintendo/Ricoh were able to use a slightly modified 6502 as the CPU part of the 2A03 without licensing it from Commodore&lt;/a&gt;: The patent for the 6502 covered only its BCD implementation, the only new functionality on the chip.  By disabling the BCD part of the chip, it was possible to legally use an otherwise exact copy of the 6502 core without infringing Commodore's rights.&lt;/p&gt;&#xA;&lt;p&gt;The same lack of protection is what, in turn, &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16195/large-number-of-famiclones/16204#comment54570_16204&quot;&gt;made the large number of NES clones possible&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Wikipedia article on Miner notes that he (together with others) held a patent for the later CTIA and ANTIC chips, but doesn't mention one for the TIA; and a quick search for his name at the EPO only gives a patent for a &lt;a href=&quot;https://worldwide.espacenet.com/patent/search?q=pn%3DUS4471463A&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;data processing system with programmable graphics generator&amp;quot;&lt;/a&gt; (i.e., the 2600 as a whole, not the TIA specifically) in the relevant time frame. Combining this with &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6915/who-made-the-atari-2600-tia-video-chip&quot;&gt;Stephen Kitt's answer to the question linked to in your question&lt;/a&gt;, where he notes that &amp;quot;not all of these chips were manufactured under contract with Atari&amp;quot;, I'd assume that the legal protection available at the time was simply not strong enough for Atari to do anything about the cloned TIAs.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-11-06T14:12:33.423" LastActivityDate="2020-11-06T14:12:33.423" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16797" PostTypeId="1" AcceptedAnswerId="16798" CreationDate="2020-11-06T04:14:19.137" Score="5" ViewCount="436" Body="&lt;p&gt;To be clear, I am not questioning that Steve Jobs spent a while working for Atari; that much is indubitably historical fact. Apparently he joined the company in 1974.&lt;/p&gt;&#xA;&lt;p&gt;Atari was founded in the summer of 1972. According to &lt;a href=&quot;https://www.landley.net/history/mirror/atari/museum/Atari-Timeline.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.landley.net/history/mirror/atari/museum/Atari-Timeline.html&lt;/a&gt; by 1974, the company had not only made tens of thousands of Pong machines, but also developed a number of other games, generating millions of dollars in revenue.&lt;/p&gt;&#xA;&lt;p&gt;According to other sources, Atari's hiring process was at least in the early days not very selective, and they had a lot of trouble with theft, which presumably led to firings, so if employee number 40 were hired in 1974, that would mean the current employee count at that time would be significantly lower.&lt;/p&gt;&#xA;&lt;p&gt;Did they really accomplish all that with so few employees?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-06T23:41:38.587" Title="Was Steve Jobs really Atari employee number 40?" Tags="&lt;history&gt;&lt;atari&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16798" PostTypeId="2" ParentId="16797" CreationDate="2020-11-06T10:14:44.140" Score="9" Body="&lt;p&gt;&lt;a href=&quot;https://atariage.com/forums/topic/198054-kotaku-article-atari-employee-cards/&quot; rel=&quot;noreferrer&quot;&gt;Employee #159, Ronald Jardine, was hired on 1973-10-07&lt;/a&gt;. If &lt;a href=&quot;https://www.gamasutra.com/view/news/127537/Steve_Jobs_Atari_Employee_Number_40.php&quot; rel=&quot;noreferrer&quot;&gt;Steve Jobs was hired by Atari in May, 1974&lt;/a&gt;, and if employee numbers were assigned in consecutive numerical order and never reused, then he should have had a higher employee number.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2020-11-06T23:41:38.587" LastActivityDate="2020-11-06T23:41:38.587" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16801" PostTypeId="2" ParentId="16795" CreationDate="2020-11-07T16:45:24.400" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/ColecoVision#Atari_2600_expansion&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiki&lt;/a&gt; explains it in detail ...&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The expansion module prompted legal action from Atari. Coleco and Atari settled out of court with Coleco becoming licensed under Atari's patents. The royalty based license also applied to Coleco's Gemini game system, a stand-alone clone of the 2600&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerDisplayName="user19844" LastActivityDate="2020-11-07T16:45:24.400" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16802" PostTypeId="1" CreationDate="2020-11-07T18:22:15.747" Score="10" ViewCount="319" Body="&lt;p&gt;The Harris company, well known for being an early second source making x86 chips under license, eventually produced a fully static CMOS 80C286 of their own design (later known as the Intersil 80C286 and apparently also sold &lt;a href=&quot;http://www.x86-guide.net/en/cpu/Intel-80C286-12-PGA-cpu-no412.html&quot; rel=&quot;noreferrer&quot;&gt;by Intel&lt;/a&gt;).  This processor was very popular in late PC AT clones on account of being able to run at a whopping 25 MHz.&lt;/p&gt;&#xA;&lt;p&gt;Does the Harris 80C286 have any difference in behaviour from an Intel 80286 as far as the programmer is concerned?  For example:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do any instruction timings differ?&lt;/li&gt;&#xA;&lt;li&gt;Are there any additional or different documented or undocumented instructions?&lt;/li&gt;&#xA;&lt;li&gt;Does the Harris 80C286 microcode behave different from the Intel 80286 microcode?&lt;/li&gt;&#xA;&lt;li&gt;Is it possible for a program to detect that it's running on a Harris 80C286?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Despite its popularity, very little details on the innards of this chip seem to be available on the internet.&lt;/p&gt;&#xA;" OwnerUserId="24" LastActivityDate="2020-11-07T19:34:04.447" Title="Did the Harris 80C286 differ from Intel's 80286 in its behaviour?" Tags="&lt;ibm-pc&gt;&lt;x86&gt;&lt;80286&gt;&lt;compatibility&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16803" PostTypeId="2" ParentId="16802" CreationDate="2020-11-07T18:48:39.860" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Does the Harris 80C286 have any difference in behaviour from an Intel 80286 as far as the programmer is concerned?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The Harris/Intersil/&lt;a href=&quot;https://www.renesas.com/us/en/products/legacy-mcu/80c-82c-micro-peripherals/microprocessors-peripherals/device/80C286.html&quot; rel=&quot;noreferrer&quot;&gt;Renesas 80C286&lt;/a&gt; is, like its 80C86 predecessor fully compatible with its NMOS brother. In fact, it fulfils as well all electrical parameters (voltage, thresholds, lead timing), except of course current and thus power consumption.&lt;/p&gt;&#xA;&lt;p&gt;It's a 100% compatible drop in replacement made with Intel licence and support (*1). They are not clones but second source.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://datasheets.chipdb.org/Harris/80c286.pdf&quot; rel=&quot;noreferrer&quot;&gt;data sheets&lt;/a&gt; do not reveal any difference either.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Do any instruction timings differ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No.&lt;/p&gt;&#xA;&lt;p&gt;Timing differences happened only with compatible but independent developed/enhanced processors - like NEC's V20 extended the 8086 with 80186 elements.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Are there any additional or different documented or undocumented instructions?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Does the Harris 80C286 microcode behave different from the Intel 80286 microcode?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Why would that matter?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is it possible for a program to detect that it's running on a Harris 80C286?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, unless there's a machine dependent way to measure power consumption.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - At that point it might be important to remember that Intel did licence their designs (including all support chips  and up to the 80386) to a wide range of manufacturers, Harris been one of them.  In fact, Intel was eager to get others to licence and manufacture their chips, as their customers wanted to have a secure delivery. Not going into single-vendor lock-in was a major concern back then. Thus absolute identical behaviour was a basic requirement to allow drop in replacement.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-07T19:34:04.447" LastActivityDate="2020-11-07T19:34:04.447" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="16804" PostTypeId="2" ParentId="7717" CreationDate="2020-11-07T22:59:57.737" Score="3" Body="&lt;p&gt;If you want some DIY, you can try my opensource project, &lt;a href=&quot;https://github.com/10110111/usb2ps2conv&quot; rel=&quot;nofollow noreferrer&quot;&gt;usb2ps2conv&lt;/a&gt;. It lets you make a USB-keyboard to PS/2-computer converter out of an STM32F401C-DISCO board and a couple of resistors.&lt;/p&gt;&#xA;&lt;p&gt;This project is currently in development, but it's already functional enough to control a Linux PC via a USB keyboard plugged into a PS/2 port through this converter. The only current really noticeable limitation is that multimedia keys are unsupported (because only boot protocol is used).&lt;/p&gt;&#xA;" OwnerUserId="1992" LastEditorUserId="1992" LastEditDate="2020-11-08T00:15:30.793" LastActivityDate="2020-11-08T00:15:30.793" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16805" PostTypeId="2" ParentId="7717" CreationDate="2020-11-08T02:50:58.260" Score="2" Body="&lt;p&gt;There are some keyboards that can electrically and logically handle both USB-HID and PS/2 protocols, and just need a passive adapter to make the plug fit physically.  The latter is probably what you were able to dig up.  A keyboard that doesn't come with such an adapter probably &lt;em&gt;only&lt;/em&gt; supports USB, so the adapter won't work in the first place.&lt;/p&gt;&#xA;&lt;p&gt;If you want a good-quality modern keyboard that definitely supports PS/2, take a look at the Cherry range.  They are of course best known as the makers of the MX keyswitches, but they make their own keyboards based around them as well as selling the keyswitches themselves.  One of their long-standing products is the &lt;a href=&quot;https://www.cherry.co.uk/cherry-g80-3000.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;G80-3000&lt;/a&gt;, which as well as having both PS/2 and USB support, would also stylistically go well with a vintage PC or terminal.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-11-08T02:50:58.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16806" PostTypeId="1" CreationDate="2020-11-08T08:46:25.957" Score="3" ViewCount="230" Body="&lt;p&gt;There are a few games for MS-DOS with music only through MPU-401, like the platformer &lt;a href=&quot;https://www.dosgames.com/forum/viewtopic.php?t=20906&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Abuse&lt;/em&gt;&lt;/a&gt; and the RPG &lt;a href=&quot;https://www.abandonwaredos.com/abandonware-game.php?abandonware=Avalon&amp;amp;gid=1904&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Avalon&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Is there a TSR available that intercepts MPU-401 port accesses and transforms them into OPL2 or OPL3 music? I expect the result wouldn't be great, but I'd like to try. I think I could do this by running the games from within Windows 3.1 or 95, but is there a way in just DOS?&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="15334" LastEditDate="2020-11-08T08:54:52.013" LastActivityDate="2021-04-07T11:02:05.197" Title="Does there exist a MPU-401 to OPL3 TSR for MS-DOS?" Tags="&lt;ms-dos&gt;&lt;driver&gt;&lt;software-recommendation&gt;&lt;music&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16807" PostTypeId="2" ParentId="16806" CreationDate="2020-11-08T09:24:24.487" Score="2" Body="&lt;p&gt;There is &lt;a href=&quot;https://bjt42.github.io/softmpu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SoftMPU&lt;/a&gt;, which is a TSR emulating a MPU-401 and redirecting it to the SoundBlaster MIDI ports.&lt;/p&gt;&#xA;&lt;p&gt;Not exactly what you want, but if you somehow manage to attach a &amp;quot;play MIDI using OPL2 or OPL3&amp;quot; library to it (if CPU speed is fast enough to permit that), it might do what you want.&lt;/p&gt;&#xA;&lt;p&gt;At least you can use it as a blueprint on how to intercept MPU-401 accesses.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-11-08T09:24:24.487" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16808" PostTypeId="1" AcceptedAnswerId="16812" CreationDate="2020-11-08T09:52:09.413" Score="11" ViewCount="1201" Body="&lt;p&gt;Many computers have followed the design pattern of a backplane with expansion cards, including arguably the three most influential microcomputers ever built: the Altair 8800, the Apple II and the IBM PC.&lt;/p&gt;&#xA;&lt;p&gt;All three of those oriented the case horizontally and the cards vertically. The shape of the Apple II case was chosen by Steve Jobs for aesthetic reasons (whether or not one agrees with his taste, it's a documented historical fact that he was motivated by aesthetics). I haven't seen anything written about the criteria by which the shape and orientation of the Altair case were chosen.&lt;/p&gt;&#xA;&lt;p&gt;By contrast, modern tower cases are vertical and orient the cards horizontally. The latter doesn't have to be so. A tower could be vertical and also orient the cards vertically, just placing the long axis vertical as opposed to the earlier machines that placed the cards short axis vertical. I would expect that to be better for heat dissipation, because it would allow natural convection to work better: hot air could rise between the cards.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, modern tower cases came in after all PCs had started adding cooling fans to cope with the increased heat dissipation of high-frequency chips and hard disks. Maybe once you have fans, there isn't a reason to care as much about natural convection? The trend is suggestive, but doesn't prove anything. It's possible the orientations were chosen for other reasons.&lt;/p&gt;&#xA;&lt;p&gt;Was natural convection ever a consideration in the orientation of the expansion cards, in the design of any computer following the backplane plus card pattern? Is there anything written down anywhere about the criteria that were used?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-08T14:30:45.853" Title="Was natural convection ever a consideration in orienting expansion cards?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;ibm-pc&gt;&lt;altair-8800&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16809" PostTypeId="2" ParentId="16808" CreationDate="2020-11-08T10:41:49.197" Score="11" Body="&lt;p&gt;Simply put, for most of the PC's history, either the components were roughly uniform in their power consumption (with the major offenders typically being the 12V motors in disk drives, rather than anything solid-state), or the CPU was the major power consumer and thus source of heat.  Only fairly recently has one particular type of expansion card, namely the GPU, become so power hungry that it needed its own thermal management strategy.&lt;/p&gt;&#xA;&lt;p&gt;When power dissipation was low and uniform, convective airflow was sufficient to cool all of the components regardless of orientation, with cool air filtering in through whichever vents happened to be low on the case, and warm air filtering out through high vents.  The main exception might have been the PSU, which often had an exhaust fan purely to cool itself, with little effect on airflow elsewhere in the case.&lt;/p&gt;&#xA;&lt;p&gt;The move from Baby-AT to the ATX series specification was prompted by 6th and 7th generation x86 CPUs (Pentium II/III/IV, K6, Athlon) routinely dissipating tens of watts, and thus needing a substantial heatsink that was clear of physical interference from expansion cards.  The ATX PSU included a relocated fan which explicitly drew air from the vicinity of the CPU, and the ATX case included a space for an exhaust fan from this area as well.&lt;/p&gt;&#xA;&lt;p&gt;With so much suction towards the CPU area, air movement within the case is towards the CPU &lt;strong&gt;in both desktop and tower orientations&lt;/strong&gt;.  This is roughly equivalent, from expansion cards' point of view, to being fitted in a tower case with the cards horizontal.  On the other hand, the air movement is generally faster than with natural convection.&lt;/p&gt;&#xA;&lt;p&gt;When ATX was introduced, graphics card were still relatively limited in their capabilities and power consumption, with only a few outliers such as the last 3dfx Voodoo models including a small fan to bolster the performance of a small heatsink.  Many other cards had no heatsink at all, such as most of ATI's cards before the Radeon series.  This illustrates that thermal considerations were not a major concern when it came to expansion cards in general.&lt;/p&gt;&#xA;&lt;p&gt;Modern ATX cases often break from the original ATX spec, in that they put the PSU at the opposite end of the motherboard than the CPU.  In these designs, all of the airflow is actively driven and there is no reliance on convection at all.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-11-08T10:41:49.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16810" PostTypeId="1" AcceptedAnswerId="16811" CreationDate="2020-11-08T10:42:51.847" Score="8" ViewCount="330" Body="&lt;p&gt;Econet was used in a classroom setting to connect a room full of BBC Micros to a single floppy disk drive. This was an important capability because in those days, a floppy disk drive cost in the ballpark of the price of a computer, so one per computer would have been unreasonably expensive. I suspect this was the main thing Econet was used for in practice.&lt;/p&gt;&#xA;&lt;p&gt;As far as I remember, security was on the honor system; everyone just saved their file under a different name; there was nothing like a login procedure, no technological barrier to reading, modifying or deleting other people's files. And indeed the cost of implementing security with the technology of the day would've been nontrivial, and if I were designing the system, I wouldn't have paid that cost when the expected use case would have all users in the same room.&lt;/p&gt;&#xA;&lt;p&gt;But obviously that was a long time ago, and memory is fuzzy, so I'd like to make sure: do I remember correctly? Or was there some form of security that I have forgotten or did not encounter?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-11T18:50:28.067" Title="Did Econet have security?" Tags="&lt;bbc-micro&gt;&lt;security&gt;&lt;econet&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16811" PostTypeId="2" ParentId="16810" CreationDate="2020-11-08T11:02:58.363" Score="10" Body="&lt;p&gt;Econet did not; there was no authentication at the network level. Nor could you attach a floppy drive directly to Econet; you'd use a computer (BBC, Master or Archimedes) that had a floppy or (later) hard disk drive attached, running server software, or an &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/Network/Pics/Acorn_FileStoreE01S.html&quot; rel=&quot;noreferrer&quot;&gt;Acorn FileStore&lt;/a&gt; unit.&lt;/p&gt;&#xA;&lt;p&gt;Some versions of the server software did implment authentication and permissions. &lt;a href=&quot;https://en.wikipedia.org/wiki/Econet&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia notes:&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Access Permissions – By the time of the Acorn Level 4 File Server and the SJ Research MDFS systems, Econet file servers had a full user name and password system with public and private attributes. These worked similar to Unix permissions without the group field. Files could be set to be readable and/or writable by everyone, just by the user, or both.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-11-08T11:02:58.363" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16812" PostTypeId="2" ParentId="16808" CreationDate="2020-11-08T12:03:14.810" Score="6" Body="&lt;p&gt;The main means of thermal dissipation are convection and radiation (and flow). Convection is used always and independent of orientation. Board setup of the era have been made in any direction.&lt;/p&gt;&#xA;&lt;p&gt;Putting boards close and in parallel is, independent of orientation, not a great idea at first, as they heat each other (by radiation). This means for thermal dissipation the whole stack has to be treated as one, independent of orientation or packaging. Similar any closed case will only allow to equalisation within by means of convection/radiation/flow.&lt;/p&gt;&#xA;&lt;p&gt;This only changes if there's an additional air flow across the stack/between the boards. This can for example be encouraged by an orientation that lets air freely come in from one side and leave (again freely) on the other side. I assume that's what the question is about.&lt;/p&gt;&#xA;&lt;p&gt;To start with, typical S100 cases, like the Altair, do not really support airflow as the base board is in the way. In addition, there is usually a closed metal sheet direct above the boards.and often solid walls on either side.&lt;/p&gt;&#xA;&lt;p&gt;In general thermal design wasn't a big issue for early machines as they combined low power consumption (in absolute terms) with huge volume, wo thermal density was quite low. Even loaded S100 machines did usually produce more heat in the power supply than along the boards (*1).&lt;/p&gt;&#xA;&lt;p&gt;Of course situation was different in minis and mainframes, but they were as well designed for airflow. Here Mounting was usually on a backplane leaving room for a straight airflow across the boards - which usually was enforced by ventilators.&lt;/p&gt;&#xA;&lt;p&gt;The Apple II did rely only on convection thru the plastic covers, as there was no real airflow design, despite the slots on the side and openings on the back. While this was fine for the low heat production of the basic machine even including a few cards, it only became a problem when really stacked, clogged with cables and operated in an hot environment (like with a CRT stacked on top blocking heat flow or even adding). Here solutions like &lt;a href=&quot;http://www.digibarn.com/collections/systems/appleII/DSC04305.JPG&quot; rel=&quot;noreferrer&quot;&gt;Kensington System Saver&lt;/a&gt; added airflow. In relation to the question it's notable that the System Saver did simply suck out air on one side, square to the card orientation. This worked fine, as the effect of exchanging the air outclasses everything that relies on convection.&lt;/p&gt;&#xA;&lt;p&gt;Still, it wasn't as much of a problem as Kensignton adds may suggest, as the as the original Apple II PS was rated at 38 Watt (*2). Still keeping over all heat production rather low. Of course, as soon as there was a hard disk to be build in, air flow became a must - in addition to a bigger PS anyway :))&lt;/p&gt;&#xA;&lt;p&gt;The IBM PC in turn was already designed with that experience in mind. Here the power supply's ventilator sucks air out of the case - replenished via inlets on the opposite side as the PS was located in the back to the right and inlets were in the front to the left - in fact, right were (full length) expansion board would end up.&lt;/p&gt;&#xA;&lt;p&gt;Still it's important to keep in mind that the IBM-PC was extreme low power from today's POV. The &lt;a href=&quot;http://www.minuszerodegrees.net/5150/psu/5150_psu.htm&quot; rel=&quot;noreferrer&quot;&gt;original PSU&lt;/a&gt; was rated at 63 Watt. Nop, no zero missing or so, it was that low. Combined with a case that large as the original PC, the design was more than sufficient to keep everything within limits.&lt;/p&gt;&#xA;&lt;p&gt;Modern PCs with a much higher over all power dissipation have an improved airflow design with the power supplies ventilator forcing air out of the case, thus sucking in cold (room temperature) air via designated ventilating openings or simply any other opening (*3,*4). While focusing on CPU and chipset, this is more than sufficient to get all heat, including additional bards out, despite of board orientation.&lt;/p&gt;&#xA;&lt;p&gt;The issue with added ventilators to certain chips/boards isn't the over all heat production, but local distribution (*5).&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Long story short: &lt;strong&gt;Early systems didn't ned much air flow design and board orientation was more due case construction and handling than heat management.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Yes, that includes the (comparably) inefficient regulators on each board.&lt;/p&gt;&#xA;&lt;p&gt;*2 - There is a real nice (as usual) &lt;a href=&quot;http://www.righto.com/2012/02/apple-didnt-revolutionize-power.html&quot; rel=&quot;noreferrer&quot;&gt;analysis&lt;/a&gt; of the Apple II PSU as well the IBM-PC's by Ken Shirriff.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Who doesn't remember some PC clogging up floppy drives with lint as their case was missing dedicated air inlets.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Related were home build machines were users added ventilators pressing fresh air into the case, which of course increased inside pressure and exhaust true every possible opening, again including floppy drives, depositing even more dirt there.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Given,there are some high end cards that do have their complete own air flow, sucking in fresh air thru a desicated slot cover.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="773" LastEditDate="2020-11-08T14:30:45.853" LastActivityDate="2020-11-08T14:30:45.853" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16813" PostTypeId="1" AcceptedAnswerId="16814" CreationDate="2020-11-08T12:24:27.710" Score="3" ViewCount="856" Body="&lt;p&gt;The 8080 is referred to as an 8-bit CPU because it has an 8-bit data bus, but there are a number of cases where it must perform 16-bit memory access, for example when reading or writing a 16-bit register pair, or the 16-bit program counter when performing subroutine call or return.&lt;/p&gt;&#xA;&lt;p&gt;I assume it supports unaligned access, i.e. the address is not required to be even.&lt;/p&gt;&#xA;&lt;p&gt;Does it support fully unaligned access in all cases, i.e. no requirement that both bytes be in the same page? For example, if you try to write a 16-bit register pair to address $7fff, will the second byte be written to $8000? Or if the stack pointer was set to $8001 and you perform a subroutine call, will the return address be written to the addresses $8000 and $7fff?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6794" LastEditDate="2020-11-10T07:16:30.373" LastActivityDate="2020-11-10T07:16:30.373" Title="Does the 8080 always handle unaligned access correctly?" Tags="&lt;memory&gt;&lt;8080&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16814" PostTypeId="2" ParentId="16813" CreationDate="2020-11-08T12:31:34.970" Score="9" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;The 8080 does not know about any alignment. All access is byte access and linear. There is also no page logic. All addresses are handled as straight 16 bit and all data access is 8 bit.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(For additional musings see further down)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I assume it supports unaligned access, i.e. the address is not required to be even.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The 8080 does not handle or even know anything about alignment. A 16 bit value is simply stored at two consecutive (8 bit) memory locations.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Does it support fully unaligned access in all cases,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, 16 bit load/stores can be done from any address.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;no requirement that both bytes be in the same page?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, the 8080 does not have a concept of 'pages'. all address pointers are 16 bit and increments are handled as such.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For example, if you try to write a 16-bit register pair to address $7fff, will the second byte be written to $8000?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes (*1).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or if the stack pointer was set to $8001 and you perform a subroutine call, will the return address be written to the addresses $8000 and $7fff?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Exactly.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The 8080 as 16 Bit CPU&lt;/h2&gt;&#xA;&lt;p&gt;Yes, in some sense the 8080 (and its offsprings 8085 and Z80) are 16 bit CPUs - at least when it comes to the register set and address handling. The register file is organzied as&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a set of six 16 bit register: BC, DE, HL, SP, IP and WZ (*2)&lt;/li&gt;&#xA;&lt;li&gt;directly connected to a 16 bit incrementer/decrementer&lt;/li&gt;&#xA;&lt;li&gt;directly connected to a 16 bit address latch&lt;/li&gt;&#xA;&lt;li&gt;which in turn is connected to the address bus&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thus each of these registers can, within a single machine cycle be&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;latched to be put on the (external) address bus, and/or&lt;/li&gt;&#xA;&lt;li&gt;incremented or&lt;/li&gt;&#xA;&lt;li&gt;decremented&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Note that there is no restriction by implied 'pages' or need got even/odd alignment, as address generation is plain 16 bit with a byte sized memory interface.&lt;/p&gt;&#xA;&lt;p&gt;The 8080s internal structure is, regarding registers and addressing, fully 16 bit, weras the 6502 is here as well 8 bit, operating with separate 8 bit units to handle pages and addresses within pages.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;The question may stem from a mixup between data size requirements and data bus size. Alignment issues can only come up with designs that have a finer address granulation than the external data bus and accessing a data item sized of multiple address units, i.e. a CPU with byte addressing but a multiple byte wide data bus accessing data wider than a single byte - like a 68020 (byte addressing, 4 byte wide data bus) accessing a 16 bit word.&lt;/p&gt;&#xA;&lt;p&gt;The 8080 does not fall into this category. Addressable data unit and access with do not differ.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Or more correct it will be address 7FFFh and 8000h :)) SCNR&lt;/p&gt;&#xA;&lt;p&gt;*2 - Note that AF  is not one of them A is a separate register, while F doesn't exist.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-08T13:51:40.573" LastActivityDate="2020-11-08T13:51:40.573" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16815" PostTypeId="1" AcceptedAnswerId="16817" CreationDate="2020-11-08T13:32:07.237" Score="25" ViewCount="6318" Body="&lt;p&gt;If you purchased a computer, back when they were actually made from discrete components, would you expect to get a circuit diagram as part of the documentation? Was that something you could purchase as an optional extra? Or would you be expected to pay the manufacturer to come and service your equipment?&lt;/p&gt;&#xA;&lt;p&gt;I'm guessing certainly for valve-based systems, they would at least be labelled with which model of valve you need to replace them with. But would you get an actual diagram of the entire system? (Presumably such a thing would span many, many pages.)&lt;/p&gt;&#xA;&lt;p&gt;Was it ever commonplace to get complete circuit diagrams? And if so, roughly when did that fade out?&lt;/p&gt;&#xA;" OwnerUserId="11695" LastActivityDate="2021-03-07T05:39:49.533" Title="Did computers come with circuit diagrams?" Tags="&lt;documentation&gt;" AnswerCount="13" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16816" PostTypeId="1" AcceptedAnswerId="16818" CreationDate="2020-11-08T13:38:43.360" Score="6" ViewCount="845" Body="&lt;p&gt;I asked &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16813/does-the-8080-always-handle-unaligned-access-correctly&quot;&gt;a similar question about the Intel 8080&lt;/a&gt; to which I guessed the answer would probably be yes, because later Intel CPUs did fully handle unaligned access.&lt;/p&gt;&#xA;&lt;p&gt;I am less sure about the Motorola 6800, because several of the inventors went on to invent the MOS Technology 6502, which in some contexts treats page boundaries as special. But there are differences between the two; for example, the 6800 has a 16-bit stack pointer, whereas the 6502 has an 8-bit stack pointer. Perhaps this is also a difference.&lt;/p&gt;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&lt;p&gt;The 6800 is referred to as an 8-bit CPU because it has an 8-bit data bus, but there are a number of cases where it must perform 16-bit memory access, for example when reading or writing a 16-bit register, or the 16-bit program counter when performing subroutine call or return.&lt;/p&gt;&#xA;&lt;p&gt;I assume it supports unaligned access, i.e. the address is not required to be even.&lt;/p&gt;&#xA;&lt;p&gt;Does it support fully unaligned access in all cases, i.e. no requirement that both bytes be in the same page? For example, if you try to write a 16-bit register to address $7fff, will the second byte be written to $8000? Or if the stack pointer was set to $8001 and you perform a subroutine call, will the return address be written to the addresses $8000 and $7fff?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6794" LastEditDate="2020-11-10T07:20:03.013" LastActivityDate="2020-11-10T07:20:03.013" Title="Does the 6800 always handle unaligned access correctly?" Tags="&lt;memory&gt;&lt;6800&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16817" PostTypeId="2" ParentId="16815" CreationDate="2020-11-08T13:50:54.237" Score="41" Body="&lt;p&gt;Back until the late 80ies, it was actually pretty commonplace to get a circuit diagram with a lot of electronics devices when you bought them - Even TVs and radio sets often came with them.&lt;/p&gt;&#xA;&lt;p&gt;In cases where the device didn't come with a schematics directly, you were at least able to request one from the manufacturer in most cases. Sinclair, for example, did charge you extra when you wanted a &amp;quot;Service Manual&amp;quot; (that included the circuit diagrams) for the ZX Spectrum and QL. The same was apparently true for Commodore computers up to the C128.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2020-11-08T13:50:54.237" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16818" PostTypeId="2" ParentId="16816" CreationDate="2020-11-08T13:52:34.353" Score="8" Body="&lt;p&gt;No alignment is necessary. There is no paging of any kind either. Any 16-bit register can be stored to or retrieved from any memory address, odd or even.&lt;/p&gt;&#xA;&lt;p&gt;There is one thing though, if the accessed memory addresses are in the range from $0000 to $00FF, these can be accessed by using direct memory addressing opcodes that only take 8-bit memory address as parameter, instead of using extended addressing mode opcodes that take the full 16-bit memory addresses. So accessing variables in the zero page is slighty faster than variables not in zero page.&lt;/p&gt;&#xA;&lt;p&gt;Examples:&lt;/p&gt;&#xA;&lt;p&gt;Storing a 16-bit register into memory:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LDX #$1234&#xA;STX $7FFF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;First line loads register X with immediate value of $1234 and the second line stores the register X into memory address $7FFF. So it writes $12 to address $7FFF and $34 to address $8000.&lt;/p&gt;&#xA;&lt;p&gt;Jumping to a subroutine:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LDS #$7FFF&#xA;JSR XYZ&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;First line sets the stack pointer to $7FFF, and the second line jumps to subroutine XYZ, which stores low byte of PC to address $7FFF and high byte of PC to address $7FFE, and finally the stack pointer would be $7FFD.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2020-11-08T14:37:12.723" LastActivityDate="2020-11-08T14:37:12.723" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16819" PostTypeId="2" ParentId="16816" CreationDate="2020-11-08T14:28:06.780" Score="5" Body="&lt;p&gt;For the 6800 the same basic considerations as for all other CPUs are valid, as already &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/16814/6659&quot;&gt;mentioned in the 8080 answer&lt;/a&gt; is as well valid here:&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The question may stem from a mixup between data size requirements and data bus size. Alignment issues can only come up with designs that have a finer address granulation than the external data bus and accessing a data item sized of multiple address units, i.e. a CPU with byte addressing but a multiple byte wide data bus accessing data wider than a single byte - like a 68020 (byte addressing, 4 byte wide data bus) accessing a 16 bit word.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The 6800 is, like the 8080 a plain 8 bit CPU with a 16 bit address path. Motorola CPUs are much like taken literally from a beginners lecture - middle of the road, as vanilla as it can be :)&lt;/p&gt;&#xA;&lt;p&gt;So no, like with the 8080, pointers can hold any address and word access (essentially loading pointers) can be done from such.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-11-08T14:28:06.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16820" PostTypeId="2" ParentId="16815" CreationDate="2020-11-08T14:41:30.400" Score="9" Body="&lt;p&gt;I remember the computers from Czechoslovakia back in the 80s', and they come with the circuit diagram automatically, especially those for &amp;quot;professional use&amp;quot;. The manufacturers knew that users have to repair those computers or build their own peripherals.&lt;/p&gt;&#xA;&lt;p&gt;Other computers, e.g. the &amp;quot;hobby computer&amp;quot; PMD-85, come with the block diagram and bus interface description, but schematics have been available in the &amp;quot;extended manual set&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-11-08T14:41:30.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16821" PostTypeId="2" ParentId="16815" CreationDate="2020-11-08T15:10:40.937" Score="2" Body="&lt;p&gt;The questions wording (discrete, valve) makes it sound as if it's about early systems, not microcomputer and maybe not even mini-computers.&lt;/p&gt;&#xA;&lt;p&gt;Here it may be safe to distinguish one off machines (which covers moste valve based) and in numbers produced units. One-offs were usually also full or in part developed by their users, so circuit diagrams were of course inherent parts of them.&lt;/p&gt;&#xA;&lt;p&gt;Manufactured machines in contrast did (usually) not have such supplied to its users for their direct use, but they were more often than not part of the maintenance set stored at the customers site. Depending on manufacturer, model and installation, this could be several cabinets/shelfs of repair parts, tools (including oscilloscopes), consuambles and sometimes literally hundrets of folders with machine documentation, not part of user manuals. This was done so maintenance/service engineers don't had to carry a carload full of paper for each job.&lt;/p&gt;&#xA;&lt;p&gt;This was done pretty consistent up into the mid to late 1980s ... or about the time when boards became less (on site) repairable and, more relevant, it became less possible to trace errors down to single components due the fact that integration simply took away most possible points to check while looking for a cause.&lt;/p&gt;&#xA;&lt;p&gt;During later years (mid 70s) more and more documentation got moved into microfilm to save space, wo a micro-fiche reader became as well part of the (customer stored) maintenance setup for a mainframe.&lt;/p&gt;&#xA;&lt;p&gt;And no, all of this was not given to customers in any way. They were proprietary documents for sole use by (manufacturer employed) service personal.&lt;/p&gt;&#xA;&lt;p&gt;Of course, this may (and was) different handled for mini computers, system that often were configured / extended by customer side personal. Here it was about board documentation and alike, including schematics, at least for interfaces, while over all documentation was to be done by whoever configured a certain setup.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-11-08T15:10:40.937" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16823" PostTypeId="2" ParentId="16813" CreationDate="2020-11-08T18:23:10.050" Score="4" Body="&lt;p&gt;Although the 8080 and Z80 don't care about alignment, a compiler that targets the 8080 could benefit somewhat from knowing that pointers to 16-bit and 32-bit objects will be aligned.  For example, consider the code necessary to process &lt;code&gt;*p += 1;&lt;/code&gt; if &lt;code&gt;p&lt;/code&gt; is an &lt;code&gt;int*&lt;/code&gt;.  If &lt;code&gt;p&lt;/code&gt; is known to be aligned, a compiler could generate [Z80 opcodes shown]&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ld hl,(p)&#xA;    inc (hl)&#xA;    jnz noHighByte&#xA;    inc l&#xA;    inc (hl)&#xA;noHighByte:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If a compiler didn't know that p will be 16-bit aligned, it would need to generate an &amp;quot;inc hl&amp;quot; instruction instead of &amp;quot;inc l&amp;quot;, which would take an extra two cycles to execute.  The extra cost is small enough that none of the 8080/Z80 compilers I've seen made any effort to avoid it, but if a language required that objects be aligned in that fashion it could have offered some benefits.&lt;/p&gt;&#xA;&lt;p&gt;Interestingly, the benefits would be even larger if small arrays could be guaranteed not to straddle page boundaries, but languages don't offer ways of specifying such constraints.  If, e.g., one has a pointer to a &lt;code&gt;char[16];&lt;/code&gt; which is known to be 16-byte aligned, evaluation of &lt;code&gt;p[i]++&lt;/code&gt; could be:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ld hl,(p)&#xA;    ld a,(i)&#xA;    add a,l&#xA;    ld  l,a&#xA;    inc (hl)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;instead of something like either:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ld hl,(p)&#xA;    ld a,(i)&#xA;    ld e,a&#xA;    ld d,0&#xA;    add de,hl&#xA;    inc (hl)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ld hl,(p)&#xA;    ld a,(i)&#xA;    add a,l&#xA;    ld  l,a&#xA;    jnc noCarry&#xA;    inc h&#xA;noCarry:&#xA;    inc (hl)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;with the latter version being bigger, but leaving DE unaffected.  Note that the last version is bigger than the middle one, but faster, since &amp;quot;ADD HL,DE&amp;quot; is a very slow instruction.&lt;/p&gt;&#xA;&lt;p&gt;In order to exploit things like the latter speed up, a compiler would have to know that indexing &lt;code&gt;p&lt;/code&gt; by &lt;code&gt;i&lt;/code&gt; wouldn't cross a page boundary, and no languages I know of would generally provide any way of telling a compiler that.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-11-08T18:23:10.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16825" PostTypeId="2" ParentId="16815" CreationDate="2020-11-08T22:05:55.920" Score="31" Body="&lt;p&gt;To clarify Tim Locke's comment about the Commodore 64 Programmer's Reference having a schematic, here are a couple of quick photos of the copy I lucked into in 2003.&lt;/p&gt;&#xA;&lt;p&gt;The rest of the book includes things like pinouts for the ports, data sheets, block diagrams and timing diagrams for chips like the 6510 CPU and the 6581 SID, complete references for the assembly language mnemonics used by the 64MON cartridge and Commodore BASIC, etc.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qChck.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qChck.jpg&quot; alt=&quot;Front Side&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/szZCp.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/szZCp.jpg&quot; alt=&quot;Back Side&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The back cover has a manufacturer's suggested retail price of $19.95, so, for the early 1980s this thing was at the same price point as the $50 computer programming bricks you find in bookstores today.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2020-11-08T22:05:55.920" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16826" PostTypeId="2" ParentId="16815" CreationDate="2020-11-09T07:43:56.853" Score="4" Body="&lt;p&gt;In early 1980, Harvey Mudd College got one of the first VAX-11/780s, one of the first 32-bit mini-computers.  It included complete schematics for everything.  HMC was (and is) a STEM school.  It was an educational experience - we could see how DEC tied together a bunch of 74000 series bit slices to create an ALU, we could see how the microcode out of its control store into the ALU (but we couldn't see the microcode itself).  Although not in the schematics, somebody at DEC got some technical papers on how the Synchronous Backplace Interface (SBI) worked.&lt;/p&gt;&#xA;&lt;p&gt;When I got out of HMC, I went to work a large aerospace firm in the greater Seattle.  I became a VAX sysadmin and I was given a VAX-11/730 of my very own.  I worked my up to a VAX-11/780 (obsolete, but still useful for classified work because nobody else wanted it), to a VAXcluster of a couple of monster 8700s.  The 11/730 came with schematics.  The 11/780 did not, but it may be that they were lost in the sands of time.  I asked politely and got a set from DEC.&lt;/p&gt;&#xA;&lt;p&gt;DEC's fall from grace came about because they were an engineering company, and their products were designed by engineers for engineers.  It was damm fine equipment, but it was pricey.  When the PC came out, DEC didn't realize that the microcomputer was going to do to the minicomputer what the minicomputer did to the mainframe.  DEC tried to hang on to the minicomputer market by coming out with Alpha, and there was a very technical book published that explains how the Alpha work, which had some circuit diagrams in it.  Alas, DEC's marketing was terrible and the Alpha went nowhere.  The AMD-64 chip was the nail in its coffin.&lt;/p&gt;&#xA;&lt;p&gt;Remember that a schematic diagram represents an abstraction.  I would argue that this &lt;a href=&quot;https://i.stack.imgur.com/iuJzm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iuJzm.jpg&quot; alt=&quot;A schematic diagram of a modern PC with the northbridge and southbridge chips&quot; /&gt;&lt;/a&gt;is a schematic diagram of a computer.  I would argue that this since this diagram and diagrams like it are free for the taking, your PC includes a schematic diagram.&lt;/p&gt;&#xA;" OwnerUserId="19855" LastActivityDate="2020-11-09T07:43:56.853" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16827" PostTypeId="2" ParentId="16785" CreationDate="2020-11-09T10:15:09.573" Score="4" Body="&lt;p&gt;We are a computer museum here in the Northwest, we were going to open up in August but unfortunately have had to push it forward because of the Covid. We are looking for magazines to put into our museum and also in the Internet Cafe. We would love to take them for our museum which is called Northwest Computer Museum/Workshops in Leigh. Website is &lt;a href=&quot;http://www.nwcomputermuseum.org.uk&quot; rel=&quot;nofollow noreferrer&quot;&gt;www.nwcomputermuseum.org.uk&lt;/a&gt; and my email address is joe@nwcomputermuseum.org.uk.&lt;/p&gt;&#xA;" OwnerUserId="19857" LastEditorUserId="8268" LastEditDate="2020-11-09T13:52:47.263" LastActivityDate="2020-11-09T13:52:47.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16828" PostTypeId="2" ParentId="16815" CreationDate="2020-11-09T10:26:01.330" Score="4" Body="&lt;p&gt;Schematics for the Sun2 came with the workstation, and for the Sun3 were available upon request.&lt;/p&gt;&#xA;&lt;p&gt;I received the schematics for the BBC Micro as part of their Service Manual. This had a somewhat restricted distribution, but samizdat photocopies were easily found.&lt;/p&gt;&#xA;&lt;p&gt;These days service manuals don't include full schematics, as manufacturers won't warrant field repairs of surface mount components. Rather the service manuals focus on locating the faulty board or subsystem and replacing that entire board.&lt;/p&gt;&#xA;&lt;p&gt;For high-end boards these faulty boards are then returned to a factory-like repair centre, where they are repaired and tested and returned to the stock of spare boards used by the field engineers.  This is fair enough: you can imagine a client's reaction should a field engineer set up logic analysers and a solder rework station within their computer centre.&lt;/p&gt;&#xA;&lt;p&gt;The Raspberry Pi has &lt;a href=&quot;https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/README.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;schematics online&lt;/a&gt; for all of its products.&lt;/p&gt;&#xA;" OwnerUserId="568" LastEditorUserId="6794" LastEditDate="2020-11-12T05:00:57.953" LastActivityDate="2020-11-12T05:00:57.953" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16829" PostTypeId="2" ParentId="16815" CreationDate="2020-11-09T11:31:04.560" Score="3" Body="&lt;p&gt;I'm afraid that I have to disagree with @Raffzahn, in part citing @JeffSilverman's answer relating to DEC equipment.&lt;/p&gt;&#xA;&lt;p&gt;Focussing on mainframes, and in particular Burroughs Large Systems (capitalised since that was what the range of ALGOL-based systems were called), I cite this reference &lt;a href=&quot;https://users.monash.edu.au/%7Eralphk/burroughs.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://users.monash.edu.au/~ralphk/burroughs.html&lt;/a&gt; which comprises the memoir of an engineer employed by Monash University to maintain a Burroughs mainframe: this required component-level repair and quite simply would not have been possible had Burroughs not supplied schematics and MTR (Maintenance Test Routine) material.&lt;/p&gt;&#xA;&lt;p&gt;My own recollection is that while Burroughs service agreements stipulated that only Burroughs technicians would work on the equipment, the documentation was not locked away and technical issues were discussed openly.&lt;/p&gt;&#xA;&lt;p&gt;So without going and looking for a list of what accompanied each machine (which I believe can be found on Bitsavers), I think it's reasonable to assume that in the case of the Burroughs Large Systems at least it included the OS (MCP) binaries and sources, the schematics and the MTR material. The schematics might or might not have included the underlying logic equations.&lt;/p&gt;&#xA;&lt;p&gt;I would suspect that Logic Improvement Notices (mandatory) and Reliability Improvement Notices (discretionary) would only have been available by subscription. The same might apply to MCP updates.&lt;/p&gt;&#xA;&lt;p&gt;That is, obviously, not to say that any of that material was &amp;quot;free&amp;quot; (as in speech), and any customer who didn't play fairly could expect a court case. He could also expect that Burroughs would refuse to supply spare parts, including the weird (Fairchild?) current-mode logic that most of their machines used before switching to TTL in the late 70s.&lt;/p&gt;&#xA;&lt;p&gt;IBM, in the early days, similarly supplied operating system sources etc., and in fact many of their customers were better at writing and maintaining OSes than they were. I can't speak for schematics, and don't know to what extent non-IBM maintenance was viable.&lt;/p&gt;&#xA;" OwnerUserId="18835" LastActivityDate="2020-11-09T11:31:04.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16830" PostTypeId="2" ParentId="15963" CreationDate="2020-11-09T15:05:01.183" Score="10" Body="&lt;p&gt;First of all, the accepted answer is wrong; the statement list was not optional in the&#xA;&amp;quot;original&amp;quot; FORTRANs (I and II). Here is a listing of the routine used to read &lt;code&gt;GO TO&lt;/code&gt;&#xA;statements:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       REM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *&#xA;       REM&#xA;       REM C0200/ CALLS=GETIFN,DIAG,TEST..,C0190,C0180,TET00,C0160,&#xA;       REM CIT00,SS000(CSA000).&#xA;       REM C0200 PROCESSES GO TO STATEMENTS.&#xA;C0200  TSX GETIFN,4                * GET INTERNAL FORMULA NUMBER IN 1C&#xA;       STO 1C+2                      AND IN 1C+2.&#xA;       TSX C0190,4                 * OBTAIN IN ACC NEXT NB CHARACTER&#xA;       CAS L(9)                      AND COMPARE IT WITH 9.&#xA;       TXI C0205,0                   IF NON-NUMERIC, GO COMPARE WITH (.&#xA;       NOP                           IF NUMERIC, THEN&#xA;       TSX C0180,2                 * OBTAIN IN 1G THE BINARY EQUV BETA.&#xA;       TSX TESTD0,4                * THE AC SHOULD CONTAIN AN ENDMARK.&#xA;       CLA 1G                        STORE BETA IN 1C+1 TO CONSTRUCT&#xA;       STO 1C+1                      THE 2ND WORD OF TIFGO TABLE ENTRY.&#xA;       TXI C0202,0                   GO  TO ENTER 1C,1C+1 INTO TIFGO.&#xA;C0205  CAS ALPAR                     TEST CHARACTER FOR ALPHABETIC.&#xA;       TXI C0210,0                   IF NOT ALPHABETIC, THEN&#xA;       TXI C0212,0                   THIS IS TYPE= GO TO ( ), I.&#xA;C0210  TSX C0160,2                 * TYPE= GO TO N,(),SO OBTAIN IN 1G N&#xA;       TSX TESTG0,4                * WHICH SHOULD BE FOLLOWED BY COMMA.&#xA;       CLA 1G                        SAVE THE SYMBOL N IN 1C+3&#xA;       STO 1C+3                      FOR COMPILED INSTRUCTION.&#xA;       TSX C0190,4                 * OBTAIN IN ACC NEXT NB CHARACTER,&#xA;       TSX TESTE0,4                * WHICH SHOULD BE A LPARAN.&#xA;       CLA L(1)                      PREPARE TO SET ADDRESS PART OF 1C&#xA;       TRA C0213                     TO 1 TO INDICATE CLASS OF TRANSFER.&#xA;C0212  CLA L(2)                      PREPARE TO SET ADDR OF 1C TO 2.&#xA;C0213  STA 1C                        STORE 1 OR 2 IN ADDR OF 1C.&#xA;       LXD CTRAD,2                   OBTAIN 250-(NO. TRAD ENTRIES), AND&#xA;       PXD ,2                        PLACE IN THE DECREMENT OF THE AC&#xA;       STO 1C+1                      AND STORE IN 1C+1.&#xA;C0215  TSX C0190,4                 * OBTAIN IN ACC NEXT NB CHAR.&#xA;       TSX C0180,2                 * OBTAIN IN 1G THE BIN EQU OF BETA.&#xA;       STO 2G                        SAVE CHAR IN ACC.&#xA;       TSX TET00,1                 * GO TO ENTER 1G&#xA;       PZE 3                         INTO TRAD TABLE (TABLE 3).&#xA;       LXD CTRAD,2                   REDUCE COUNTER&#xA;       TIX C0216,2,1                 CTRAD&#xA;C0216  SXD CTRAD,2                   BY 1.&#xA;       CLA 2G                        RESTORE CHAR TO ACC.&#xA;       TSX TESTB0,4                * TEST FOR COMMA OR RPAREN.&#xA;       TNZ C0215                     IF RIGHT PARENTHESIS, THEN&#xA;       CLA CTRAD                     OBTAIN IN ADDR OF ACC 250-NO. OF&#xA;       ARS 18                        ENTRIES IN TRAD TABLE,AND STORE&#xA;       STA 1C+1                      IN ADDR OF 1C+1.&#xA;       CLA 1C                        OBTAIN 1C IN ACC&#xA;       LBT                           AND TEST LOW ORDER BIT.&#xA;       TRA C0220                     THIS IS A TYPE GO TO (),I FORMULA.&#xA;       TSX C0190,4                 * OBTAIN NEXT NB CHAR AND&#xA;       TSX TESTD0,4                * TEST FOR ENDMK.&#xA;       TSX CIT00,4                 * GO MAKE THE FOLLOWING CIT ENTRY=&#xA;       PZE 1C+2                      WORD 1--DECR= INTFORMNN (LOCATION)&#xA;       PZE L(TRA)                    WORD 2--TRA00P (OP AND DECR)&#xA;       PZE 1C+3                      WORD 3--VARIABLE N (ADDRESS)&#xA;       PZE L(0)                      WORD 4--00000 (REL ADDR AND TAG).&#xA;       TRA C0202                     GO TO ENTER 1C,1C+1 INTO TIFGO.&#xA;C0220  TSX C0190,4                 * EXAMINE NEXT NB CHARACTER,&#xA;       TSX TESTG0,4                * WHICH SHOULD BE A COMMA.&#xA;       TSX C0190,4                 * OBTAIN IN ACC NEXT NB CHAR, AND&#xA;       TSX C0160,2                 * OBTAIN IN 1G THE FXF-PT. VARIABLE.&#xA;       TSX TESTD0,4                * WHICH SHOULD BE FOLLOWED BY ENDMK.&#xA;       CLA L(1)                      PREPARE PROPER FORM OF SUBSCRIPT&#xA;       STO E+3                       COMBINATION AS&#xA;       STO DIMCTR                    INPUT TO SUBSCRIPT ANALYSIS=&#xA;       CLA 1G                        E+3 = 1ST COEFFICIENT.&#xA;       STO E+4                       E+4 = 1ST SUBSCRIPT VARIABLE,&#xA;       STZ E+9                       E+9 = ADDEND OF SUBSCRIPT,&#xA;       TSX CSA000,4                * DIMCTR = DIMENSION OF VARIABLE.&#xA;       CLA E                         OUTPUT FROM CSA IS FOUND IN&#xA;       ARS 24                        E = I--TAUTAG (GENERAL TAG) 1-11.&#xA;       STO 2G                        ADJUST AND SAVE FOR COMP. INSTR.&#xA;       TSX CIT00,4                 * GO MAKE THE FOLLOWING CIT ENTRY=&#xA;       PZE 1C+2                      WORD 1--DECR-INTFORMNO(LOCATION)&#xA;       PZE L(TRA)                    WORD 2--TRA000(OP AND DECR)&#xA;       PZE L(0)                      WORD 3--000000(ADDRESS)&#xA;       PZE 2G                        WORD 4--ADDR = TAUTAG FOR I&#xA;       REM C0200= ENTRY POINT USED BY C0400,C1000.&#xA;C0202  TSX TET00,1                 * GO TO TET TO ENTER 1C AND 1C+1&#xA;       PZE 2                         INTO TIFGO TABLE (TABLE 2).&#xA; CTRAD TXI CA010,0,250             * EXIT TO PROCESS NEXT STATEMENT.&#xA;       REM  END OF PROGRAM C0200.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(See the end of this answer for the source of the code.)&lt;/p&gt;&#xA;&lt;p&gt;Clearly a comma and a statement list is expected when &lt;code&gt;GO TO&lt;/code&gt; is not followed by a number.&lt;/p&gt;&#xA;&lt;p&gt;But &lt;em&gt;why&lt;/em&gt; was it required? Well, the reason is a little complicated. It certainly wasn't&#xA;for the benefit the programmer or for safety. The concept of a run-time error check&#xA;generated by a compiler was, after all, a silly idea at the time. The following discussion&#xA;pertains to IBM's FORTRAN I and II for the 704/709/7090/7094.&lt;/p&gt;&#xA;&lt;p&gt;In actuality, the list was necessary for the compiler. During the flow analysis phase, the&#xA;user's program is divided into basic blocks, and control transfers between the blocks are&#xA;recorded. Then a simulation of the program is carried out to determine the relative&#xA;frequency of execution of blocks. (Naturally, any information provided in &lt;code&gt;FREQUENCY&lt;/code&gt;&#xA;specifications is taken into account here.) The knowledge gained in this process is used&#xA;by the register allocation algorithm, which tries to minimize the use of load/store&#xA;operations in &amp;quot;hot&amp;quot; portions of the user's code.&lt;/p&gt;&#xA;&lt;p&gt;Because &lt;code&gt;ASSIGN&lt;/code&gt; statements can occur anywhere in a FORTRAN program, the compiler couldn't&#xA;know where control might be sent by a &lt;code&gt;GO TO&lt;/code&gt; statement with a non-numeric operand unless&#xA;the entire program has been read and all &lt;code&gt;ASSIGN&lt;/code&gt;s have been seen. Upon seeing &lt;code&gt;GO TO N, (...)&lt;/code&gt;, the compiler makes a table entry saying &amp;quot;at this point, we might transfer to any&#xA;one of these statements&amp;quot;; a similar thing happens for computed &lt;code&gt;GO TO&lt;/code&gt; statements as well.&#xA;The determination of basic blocks is based on these table entries, and not on accumulated&#xA;constants in &lt;code&gt;ASSIGN&lt;/code&gt; statements, since this way is more straightforward and avoids&#xA;creating a symbol table exclusively for &lt;code&gt;ASSIGN&lt;/code&gt;ed variables. Also, the list of targets&#xA;lets the compiler produce a diagnostic if an illegal transfer (e.g., one leading into the&#xA;range of a &lt;code&gt;DO&lt;/code&gt; loop that has not yet been entered) might happen.&lt;/p&gt;&#xA;&lt;p&gt;Consider also how the form of computed and &lt;code&gt;ASSIGN&lt;/code&gt;ed &lt;code&gt;GO TO&lt;/code&gt; allows for a&#xA;micro-optimization. Here are excerpts from a real FORTRAN program (from 1965, but these&#xA;parts use nothing that wasn't available in FORTRAN II; regardless, this is just an example&#xA;for illustration, and the source is linked at the end of this answer):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  216 ASSIGN 224 TO KADD1&#xA;      ASSIGN 250 TO KADD2&#xA;      ...&#xA;      ASSIGN 240 TO KADD2&#xA;      ...&#xA;      ASSIGN 223 TO KADD1&#xA;      ...&#xA;      ASSIGN 223 TO KADD1&#xA;      ...&#xA;      GO TO KADD2,(240,250)&#xA; 240  PRINT 1017&#xA; 1017 FORMAT(1H0,10X,84H** INDICATES THAT THIS VALUE IS TOO HIGH DUE TO&#xA;     XSAMPLING ERROR. IT WILL BE SET EQUAL/14X,71HTO THE MAXIMUM VALUE O&#xA;     XF THE REMAINING COHERENCES FOR PLOTTING PURPOSES.)&#xA;  250 GO TO KADD1,(223,224)&#xA; 223  PRINT 1018&#xA; 1018 FORMAT(1H0,10X,91HX INDICATES THIS VALUE IS NOT COMPUTABLE DUE TO&#xA;     XA NEGATIVE OR ZERO POWER SPECTRAL ESTIMATE./13X,82HIT WILL BE SET&#xA;     XEQUAL TO THE MAXIMUM OF THE REMAINING VALUES FOR PLOTTING PURPOSES&#xA;     X.)&#xA; 224  IF(IPRNT3(KIT+1)-IB)231,232,231&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and later&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;      ASSIGN 442 TO KADD1&#xA;      ASSIGN 433 TO KADD2&#xA;      ...&#xA;  432 GO TO KADD2,(433,434)&#xA;  433 SPMAX=-9999999.0&#xA;      ...&#xA;      ASSIGN 440 TO KADD1&#xA;      ASSIGN 434 TO KADD2&#xA;  434 SPX(I)=SPMAX&#xA;      ...&#xA;      GO TO KADD1,(440,442)&#xA; 440  PRINT 1405&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If the analysis were based on &lt;code&gt;ASSIGN&lt;/code&gt; statements, then the compiler would have to treat a&#xA;&lt;code&gt;GO TO KADD1&lt;/code&gt; as potentially transferring to any of the statements 223, 224, 440, and 442,&#xA;even though such a four-way transfer isn't actually possible. A &amp;quot;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17633/when-was-the-phrase-sufficiently-smart-compiler-first-used&quot;&gt;sufficiently smart&#xA;compiler&lt;/a&gt;&amp;quot; could determine this itself, but this was 1958.&lt;/p&gt;&#xA;&lt;p&gt;Note that the LLVM &lt;a href=&quot;https://releases.llvm.org/2.7/docs/LangRef.html#i_indirectbr&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;indirectbr&lt;/code&gt; instruction&lt;/a&gt;, which performs an indirect transfer of control much like FORTRAN's assigned &lt;code&gt;GO TO&lt;/code&gt;, also requires a list of potential locations &amp;quot;so that dataflow analysis has an accurate understanding of the CFG [control-flow graph]&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;The level of optimization achieved by IBM's FORTRAN I and FORTRAN II was not matched by&#xA;another FORTRAN compiler for quite a long time, according to what I've read. Compilers&#xA;that didn't do sophisticated flow analysis did not have the same need for the target list&#xA;in &lt;code&gt;ASSIGN&lt;/code&gt;ed &lt;code&gt;GO TO&lt;/code&gt; statements. Therefore it became optional.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Sources (credit for most of them goes to the Software Preservation Group's fantastic&#xA;&lt;a href=&quot;http://www.softwarepreservation.org/projects/FORTRAN/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;History of FORTRAN and FORTRAN II&#xA;page&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;p&gt;The main source is the &lt;a href=&quot;https://archive.computerhistory.org/resources/text/Fortran/102653992.05.01.acc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Systems Manual for 704 FORTRAN and 709 FORTRAN. Applied&#xA;Programming Department, International Business Machines Corporation, April&#xA;1960&lt;/a&gt;.&#xA;This is a must-read if you're interested in FORTRAN I/II's internals.&lt;/p&gt;&#xA;&lt;p&gt;The next source is a &lt;a href=&quot;http://www.softwarepreservation.org/projects/FORTRAN/index.html#Source_code&quot; rel=&quot;nofollow noreferrer&quot;&gt;listing of FORTRAN II's source&#xA;code&lt;/a&gt;. The&#xA;&lt;code&gt;GO TO&lt;/code&gt; processing routine &lt;code&gt;C0200&lt;/code&gt; begins at sequence number 4F11844, which is on page 70&#xA;of the &lt;a href=&quot;https://archive.computerhistory.org/resources/access/software/2011/08/102660000/102660000.06.2of4.acc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDF of Volume&#xA;I&lt;/a&gt;&#xA;(according to the handwritten page number in the bottom right, this is logically page 66).&lt;/p&gt;&#xA;&lt;p&gt;The FORTRAN example came from the fabulous &lt;a href=&quot;https://github.com/retro-software/B5500-software&quot; rel=&quot;nofollow noreferrer&quot;&gt;B5500 Software&#xA;repository&lt;/a&gt;. The specific source was&#xA;file&#xA;&lt;a href=&quot;https://github.com/retro-software/B5500-software/blob/1fd62ddc9ac4ba760682f76b14b37d6b447e7660/CUBE-Library-13/Files/BMD02T-T800016.for&quot; rel=&quot;nofollow noreferrer&quot;&gt;BMD02T/T800016&lt;/a&gt;,&#xA;which is headed &amp;quot;AUTOCOVARIANCE AND POWER SPECTRAL ANALYSIS&amp;quot;. The dialect of FORTRAN here&#xA;is B5500 FORTRAN IV; a manual for it from 1968 (three years after the quoted code was&#xA;written) is available&#xA;&lt;a href=&quot;http://bitsavers.org/pdf/burroughs/B5000_5500_5700/1032083_B5500_FortranRef_Apr68.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Jack Harper's &lt;a href=&quot;https://www.frobenius.com/7090.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;website on the IBM 7090/7094 computers&lt;/a&gt;&#xA;is a great resource when studying old programs like FORTRAN II and the &lt;a href=&quot;http://www.softwarepreservation.org/projects/LISP/lisp15_family#LISP_I_and_LISP_1.5_for_IBM_704,_709,_7090_&quot; rel=&quot;nofollow noreferrer&quot;&gt;LISP 1.5&#xA;interpreter&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19767" LastEditorUserId="4025" LastEditDate="2021-01-29T09:31:09.507" LastActivityDate="2021-01-29T09:31:09.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16831" PostTypeId="2" ParentId="16815" CreationDate="2020-11-09T16:41:25.417" Score="2" Body="&lt;p&gt;Modcomp minicomputers, popular for communications processing and process control, came with full schematics as well as manuals describing how the hardware operates.  Everything came in thick three-ring binders; I think the schematics were fold-out.&#xA;I know this is true for the Modcomp II, which was wire wrapped.  I think (my memory is hazy) it was also true for the Modcomp IV.&lt;/p&gt;&#xA;&lt;p&gt;As I recall, Modcomp intended for customers to be able to build and use custom boards with these computers, which may have been the reason that customers needed to have all of that information.&lt;/p&gt;&#xA;" OwnerUserId="3324" LastActivityDate="2020-11-09T16:41:25.417" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16832" PostTypeId="1" AcceptedAnswerId="16849" CreationDate="2020-11-09T18:04:24.290" Score="3" ViewCount="399" Body="&lt;p&gt;The original IBM PC had a slot for the 8087 floating-point coprocessor. This was a somewhat esoteric feature at the time – previous microcomputers had done all their floating-point in software – but it was sometimes used, and quite a few programs supported it; there is some discussion here: &lt;a href=&quot;http://www.vcfed.org/forum/archive/index.php/t-38292.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.vcfed.org/forum/archive/index.php/t-38292.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Notably:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Unlike nowadays, games never used floating point; even 3D calculations were always done as fixed point approximations.&lt;/li&gt;&#xA;&lt;li&gt;AutoCAD, as expected, could use the FPU.&lt;/li&gt;&#xA;&lt;li&gt;Ditto mathematical analysis and statistical programs.&lt;/li&gt;&#xA;&lt;li&gt;Somewhat unexpectedly, so could some databases.&lt;/li&gt;&#xA;&lt;li&gt;So could spreadsheets like Lotus 1-2-3. This is a tricky one. Spreadsheets should really use decimal arithmetic, because they are commonly used for financial calculations. &lt;a href=&quot;https://rmf.vc/implementingvisicalc&quot; rel=&quot;nofollow noreferrer&quot;&gt;VisiCalc correctly did this.&lt;/a&gt; Lotus 1-2-3 chose to use binary floating point. One could criticize this decision, but having made it, then it clearly made sense to support the FPU.&lt;/li&gt;&#xA;&lt;li&gt;And of course scientists compiling their own number crunching code in Fortran would benefit from the FPU.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;What was the reasons for people to buy the 8087? Given that spreadsheets were considered the killer application of personal computers, I would guess that to be the answer, but I would be interested if it turns out to be something else.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="156" LastEditDate="2020-11-10T07:16:18.090" LastActivityDate="2020-11-16T17:31:28.523" Title="What were the most common applications of the 8087?" Tags="&lt;ibm-pc&gt;&lt;software&gt;&lt;floating-point&gt;&lt;8087&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16833" PostTypeId="1" CreationDate="2020-11-09T19:06:08.713" Score="8" ViewCount="709" Body="&lt;p&gt;After seeing &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16832/what-was-the-most-common-application-of-the-8087&quot;&gt;this question&lt;/a&gt;, I reminisced about how my old Amiga 2500/030 had a 68882 FPU unit. I recall that the Amiga's floating point routine library was smart enough to detect if you had an FPU or not and would automatically utilize it if available. If that was the case, you just got the benefit for free in any application that utilized the library.&lt;/p&gt;&#xA;&lt;p&gt;That being said, I was always curious exactly how much performance benefit did it actually give. Are there any benchmarks or notable examples on the Amiga where this difference is visible? Any particular Amiga applications which greatly benefited from an FPU?&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="3481" LastEditDate="2020-11-09T22:28:08.160" LastActivityDate="2020-11-11T10:22:19.497" Title="What performance increase did an Amiga typically get with an FPU?" Tags="&lt;amiga&gt;&lt;floating-point&gt;&lt;m68k&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16834" PostTypeId="2" ParentId="16833" CreationDate="2020-11-09T20:37:32.397" Score="8" Body="&lt;p&gt;The extreme example is pure floating point calculations.  Analogue electronics simulations, some kinds of 3D graphics rendering, statistical machine learning, huge spreadsheets, and so on.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.faqs.org/faqs/motorola/68k-chips-faq/&quot; rel=&quot;noreferrer&quot;&gt;comp.sys.m68k FAQ&lt;/a&gt; gives 264 kFLOPS for the 68882 at 25 MHz.  The 68030 runs about 8 MIPS (integer) at 25 MHz.  The &lt;a href=&quot;https://elixir.bootlin.com/linux/latest/source/arch/m68k/math-emu&quot; rel=&quot;noreferrer&quot;&gt;source code for Linux's m68k floating point emulation library&lt;/a&gt; is available, and the routines require dozens to many hundreds of instructions to run.&lt;/p&gt;&#xA;&lt;p&gt;While the exact speed-up would depend on the library and specific instruction mix, we can infer from these numbers that floating point with the 68882 will generally run dozens of times faster.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-11-09T20:37:32.397" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16835" PostTypeId="2" ParentId="16815" CreationDate="2020-11-09T20:42:18.640" Score="1" Body="&lt;p&gt;The Apple II Reference Manual that came in the box included a complete schematic.  One did not need to purchase any additional (programmers reference or service) manuals.&lt;/p&gt;&#xA;&lt;p&gt;The Apple III manual did not include a schematic.  One needed to purchase a service manual to get an official copy.&lt;/p&gt;&#xA;&lt;p&gt;The RCA B&amp;amp;W vacuum tube TV my parents purchased circa 1960 had a full schematic inside the back cabinet cover.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2020-11-09T20:48:45.410" LastActivityDate="2020-11-09T20:48:45.410" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16836" PostTypeId="1" AcceptedAnswerId="16837" CreationDate="2020-11-09T21:04:41.287" Score="17" ViewCount="1317" Body="&lt;p&gt;The 6502 had special support for BCD arithmetic, because it was widely used in those days; this much, it had in common with other CPUs.&lt;/p&gt;&#xA;&lt;p&gt;But the 8080 and 6800 implemented this in the form of a 'decimal adjust after addition' instruction, the idea being that to add two pairs of BCD digits, you first of all add the bytes using the ordinary binary add instruction, which also sets half and full carry flags from four and eight bits respectively, then DAA checks the results and the flags and performs a fixup to make them correct for a BCD add.&lt;/p&gt;&#xA;&lt;p&gt;Yet the 6502, designed by some of the inventors of the 6800, takes a different strategy; it provides a BCD mode, as a global flag which when set, causes all addition and subtraction to give the correct results for BCD until cleared.&lt;/p&gt;&#xA;&lt;p&gt;This seems intuitively like a 'higher level' design, one that does more work for the programmer in order to more closely match intuition. That is particularly surprising because generally speaking the 6502 was a simpler processor that skimped on programmer comfort for the sake of lower cost.&lt;/p&gt;&#xA;&lt;p&gt;Why did the 6502 designers choose this way of handling BCD? Was there some lesson learned after the 6800, some reason they figured this was the right way to do it after all?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="15334" LastEditDate="2020-11-09T21:09:41.447" LastActivityDate="2020-11-10T19:59:21.420" Title="Why did the 6502 handle BCD with a special mode?" Tags="&lt;6502&gt;&lt;design-choices&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16837" PostTypeId="2" ParentId="16836" CreationDate="2020-11-09T21:54:39.753" Score="20" Body="&lt;p&gt;From the &lt;a href=&quot;https://patents.google.com/patent/US3991307A/en&quot; rel=&quot;nofollow noreferrer&quot;&gt;patent&lt;/a&gt;, &lt;em&gt;&amp;quot;Integrated circuit microprocessor with parallel binary adder having on-the-fly correction to provide decimal results&amp;quot;&lt;/em&gt; (US3991307A) by Peddle et al. in 1975:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It is desirable in microprocessors to improve the speed by reducing the number of cycles necessary to perform a given operation. However, it is also desirable to have a minimum number of components, and it is typically not justified to have both a binary and a decimal adder in the same microprocessor. The prior art has typically chosen the disadvantage of using two cycles to get a decimal sum or difference rather than to suffer the cost of a separate decimal adder.&lt;/p&gt;&#xA;&lt;p&gt;This invention takes a new approach to the problem: it uses only a binary adder to get the decimal sum or difference of two numbers, but does it in a single cycle of the binary adder, thus significantly improving the speed of operation without suffering the cost of an additional decimal adder. In accordance with the invention, the binary sum of two bcd operands is corrected by suitable gating as it travels from the binary adder to another part of the microprocessors, e.g., the accumulator, so that it becomes the binary coded decimal sum or difference of the two operands by the time it reaches that other part of the microprocessor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="3261" LastEditorUserId="2037" LastEditDate="2020-11-10T19:59:21.420" LastActivityDate="2020-11-10T19:59:21.420" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16839" PostTypeId="1" AcceptedAnswerId="16848" CreationDate="2020-11-10T01:27:19.270" Score="3" ViewCount="314" Body="&lt;p&gt;&lt;a href=&quot;http://www.vcfed.org/forum/archive/index.php/t-38292.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;A discussion on programs that used the 8087&lt;/a&gt; mentions several categories I expected, and one I did not:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Database programs (dBase IV, FoxBase, Paradox, Revelation)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The more I think about it, the more that sounds really weird. I expect databases to bottleneck on memory and disk, and perhaps on CPU integer/general logic operations if they accept a complex query language like SQL, or stored procedures.&lt;/p&gt;&#xA;&lt;p&gt;But I never, ever heard of a database bottlenecking on floating-point calculation. A Google search for 'borland paradox 8087' doesn't indicate such either.&lt;/p&gt;&#xA;&lt;p&gt;How on Earth were those old DOS database programs bottlenecking on floating-point arithmetic? Or is the claim simply incorrect?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-10T14:59:27.020" Title="How did databases use the 8087?" Tags="&lt;ibm-pc&gt;&lt;8087&gt;&lt;database&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16840" PostTypeId="2" ParentId="16839" CreationDate="2020-11-10T01:44:18.197" Score="2" Body="&lt;p&gt;Many database programs, including later versions of dBase and Paradox, provided features beyond simple database table storage lookup.  They could generate tables dynamically, and also had programming languages that enabled open-ended calculations and report generation.&lt;/p&gt;&#xA;&lt;p&gt;Some people used them somewhat like spreadsheets, or where one might use a statistics or math programming language.  One might wish to calculate the average value of every completed sale in the last month, for example.  With tens of thousands or even millions of entries, that's a nontrivial calculation.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-11-10T01:44:18.197" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16841" PostTypeId="2" ParentId="16815" CreationDate="2020-11-10T02:31:40.910" Score="5" Body="&lt;p&gt;At my university in the 70's&#xA;was an Adage Graphics Terminal,&#xA;a full-blown digital computer&#xA;(30-bit, one's complement!)&#xA;along with analog graphics hardware&#xA;driving a 3D vector display.&#xA;It was the size of about&#xA;3 refrigerators, full of discrete components,&#xA;had a very loud hard disk&#xA;(itself the size of a large desk)&#xA;with removable packs,&#xA;a tape drive,&#xA;teletype,&#xA;light pen,&#xA;even foot pedals.&#xA;It booted from slow paper tape.&#xA;The machine came with complete&#xA;blueprint schematics,&#xA;so a smart grad student&#xA;used those to modify the machine&#xA;to boot from a prom instead of paper tape.&#xA;Saved us a ton of time after any crash requiring a reboot.&lt;/p&gt;&#xA;" OwnerUserId="4733" LastActivityDate="2020-11-10T02:31:40.910" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16842" PostTypeId="1" AcceptedAnswerId="16845" CreationDate="2020-11-10T04:51:29.963" Score="2" ViewCount="184" Body="&lt;p&gt;VisiCalc represented numbers in BCD to be able to handle decimals precisely. But how did it decide how many decimal places to display?&lt;/p&gt;&#xA;&lt;p&gt;In some screenshots like &lt;a href=&quot;https://www.researchgate.net/figure/A-Screen-Shot-of-the-First-Version-of-VisiCalc_fig1_255635232&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.researchgate.net/figure/A-Screen-Shot-of-the-First-Version-of-VisiCalc_fig1_255635232&lt;/a&gt; and &lt;a href=&quot;https://www.linkedin.com/pulse/history-spreadsheet-software-jayantkumar-joshi&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.linkedin.com/pulse/history-spreadsheet-software-jayantkumar-joshi&lt;/a&gt; it looks like it's just always displaying two decimal places, even for integers.&lt;/p&gt;&#xA;&lt;p&gt;But in other screenshots like the one down near the end of &lt;a href=&quot;https://spreadsheet-day.com/blog/2019/02/25/visicalc-demo-by-dan-bricklin/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://spreadsheet-day.com/blog/2019/02/25/visicalc-demo-by-dan-bricklin/&lt;/a&gt; it looks like it is suppressing all trailing zeros, even when this causes numbers to not line up vertically.&lt;/p&gt;&#xA;&lt;p&gt;What exactly did it do? Did the behavior change with different versions?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-10T14:19:53.307" Title="How did VisiCalc decide how many decimal places to display?" Tags="&lt;apple-ii&gt;&lt;software&gt;&lt;floating-point&gt;&lt;visicalc&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16843" PostTypeId="1" AcceptedAnswerId="16844" CreationDate="2020-11-10T07:19:13.533" Score="8" ViewCount="1723" Body="&lt;p&gt;Was there any equipment which could &lt;em&gt;directly&lt;/em&gt; print out the program or data on a stack of punchcards, without first loading the deck into a general-purpose computer?&lt;/p&gt;&#xA;&lt;p&gt;In other words, a transfer from the machine-readable hole pattern, printing to a typewritten human-readable listing on a line printer.  Decoding the pattern of holes into printer signals is fine, extracting a data field is fine, but I do not mean adding up data.  Such a device could print out a source code listing, or print addresses for mailing.  (I don't mean making the cards in the first place, nor labeling the card, nor copying a card to another card.)&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2020-11-10T19:31:22.633" LastActivityDate="2020-11-10T19:31:22.633" Title="Was there a way to directly print out a deck of punch cards without involving a computer?" Tags="&lt;punched-cards&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16844" PostTypeId="2" ParentId="16843" CreationDate="2020-11-10T07:34:33.057" Score="18" Body="&lt;p&gt;Punch cards predate computers, so yes, of course, there was. A printing tabulator like the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_402&quot; rel=&quot;noreferrer&quot;&gt;IBM 402&lt;/a&gt; or the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_407&quot; rel=&quot;noreferrer&quot;&gt;IBM 407&lt;/a&gt; should be able to do that.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-11-10T07:34:33.057" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="16845" PostTypeId="2" ParentId="16842" CreationDate="2020-11-10T08:31:33.270" Score="6" Body="&lt;p&gt;VisiCalc doesn’t “decide”, it does what the user asks it to. As far as displaying values, it supports a few different &lt;a href=&quot;http://danbricklin.com/history/refcard3.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;display formats&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;general (the default), which displays however many significant digits the value contains, within the column limits (which result in rounding to the closest digit, &lt;em&gt;e.g.&lt;/em&gt; π is shown as 3.141593 on the default PC display), without adding trailing zeroes after the decimal point;&lt;/li&gt;&#xA;&lt;li&gt;integer, which rounds the value to the closest integer (0.5 up);&lt;/li&gt;&#xA;&lt;li&gt;dollars and cents, which always displays two digits after the decimal point, and is commonly used for monetary values (as shown in the first two screenshots);&lt;/li&gt;&#xA;&lt;li&gt;left- or right-justified (applied to the general format);&lt;/li&gt;&#xA;&lt;li&gt;graph, which displays the truncated value as a “bar” formed using &lt;code&gt;*&lt;/code&gt; symbols (so 3 is displayed as &lt;code&gt;***&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The format can be set for a given cell using &lt;kbd&gt;/&lt;/kbd&gt;&lt;kbd&gt;F&lt;/kbd&gt; followed by respectively &lt;kbd&gt;G&lt;/kbd&gt;, &lt;kbd&gt;I&lt;/kbd&gt;, &lt;kbd&gt;$&lt;/kbd&gt;, &lt;kbd&gt;L&lt;/kbd&gt;, &lt;kbd&gt;R&lt;/kbd&gt;, or &lt;kbd&gt;*&lt;/kbd&gt;. It can be reset with &lt;kbd&gt;/&lt;/kbd&gt;&lt;kbd&gt;F&lt;/kbd&gt;&lt;kbd&gt;D&lt;/kbd&gt;, and the default can be configured per-window with &lt;kbd&gt;/&lt;/kbd&gt;&lt;kbd&gt;G&lt;/kbd&gt;&lt;kbd&gt;F&lt;/kbd&gt; followed by the corresponding format key.&lt;/p&gt;&#xA;&lt;p&gt;As far as I’m aware the behaviour didn’t change with different versions.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-11-10T14:19:53.307" LastActivityDate="2020-11-10T14:19:53.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16846" PostTypeId="2" ParentId="16843" CreationDate="2020-11-10T11:26:58.193" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Was there any equipment which could directly print out the program or data on a stack of punchcards, without first loading the deck into a computer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;No. Such a dedicated device did not exist.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Neither during the time pf punch card processing (pre-electronic computer) nor and even less after electronic computers became a thing. The simple reason is that there was no need to do so that would justify construction of a special purpose machine.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Then again, it depends on your values of 'program', 'directly', 'loading' and 'printing'.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;'Printing'&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now, while there is no card reading printer (at least none I know of), there are (alphabetic) interpreters (like the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_557&quot; rel=&quot;noreferrer&quot;&gt;IBM 557&lt;/a&gt;), whose purpose was to read a card and print one or two lines (depending on model) onto the very same card.&lt;/p&gt;&#xA;&lt;p&gt;Also, beside the fact that they could only print 60 characters per line, they as well need to be programmed to do so. A plug board had to be setup defining the print position, for each column read of the card, to be used.&lt;/p&gt;&#xA;&lt;p&gt;The reason such a specific device as an interpreter was build was the need for automated production of cheques. So all data for a check was punched on a card with a printed on cheque form by the producing tabulator. The resulting stackwas then moved into an interpreter to translate certain fields into human readable print, making it a valid document, banks (in the US) were required by law to accept.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Without Computer&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Before the advent of electronic computers there were tabulating machines, especially printing tabulators, of which some could print alphanumeric characters. Then again, a tabulator &lt;em&gt;is&lt;/em&gt; the computing instance of that age (*1).&lt;/p&gt;&#xA;&lt;p&gt;To make them print a card content meant 'writing' (wiring) a program that directed each column of a card input to a corresponding column of the printer output and let it feed after each card (to enable empty lines).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;'Loading'&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now, having a program on card(s) means that we talk about electronic stored program computers - so no printing tabulator. In that case there there no way around using a computer. But the program had not to be loaded, but just processed as data.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;How it was done&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Keep in mind, (360ish) Mainframes were meant to shovel data, so that printing a card stack is like their perfect job description. All it needs is a simple 'read-card;print-line' loop. Each iteration is simply one machine instruction for reading and one for printing plus a conditional branch executing the loop as long as there are cards in the hopper. Setup is usually all static data or maybe one or two move instructions to get it in place.&lt;/p&gt;&#xA;&lt;p&gt;So it could be done on bare metal with a few preceding cards holding the program and starting the combined stack as a job.&lt;/p&gt;&#xA;&lt;p&gt;These copy jobs were that essential, that every OS I've seen, even the most primitive, contains built-in routines to do so (*2), usually accessible via a console command, or by having a card with that command preceding the stack. Essentially a &lt;code&gt;cat &amp;lt;punch: &amp;gt;prn:&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Being such a basic task for a mainframe, it wasn't long that a dedicated spool job was added, waiting in the background for a copy (spool) command coming up and executing it at lowest priority level. This became even more handy with tapes and later disks, as now a stack could be read onto tape, freeing up the card reader (which was usually way faster than the printer) for the next stack, while printing took place from tape/disk.&lt;/p&gt;&#xA;&lt;p&gt;Heck, having a spooler sitting in background and handling print from disk was so integral to (mainframe) computing, that one does not wonder that IBM requested Microsoft to add a print spool to PC-DOS. Where other micros added printer buffers to speed up printing and still stalled when the buffer was filled, IBM simply ported the idea of a disk based spool to PC-DOS. Programs should not print directly, but always print to a file and issue that file to spool to get it done in background.&lt;/p&gt;&#xA;&lt;p&gt;The only drawback was that this idea was somewhat alien to all the micro-kids: &lt;em&gt;'What? A service printing files from Disk? What is it good for? Why on earth should I do that when I can access the printer directly? Also, why does DOS not provide temporary files?'&lt;/em&gt; (*3). As a result, PRINT did not get the attention it should have, but that's another story.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Not to mention that basically every computing center that got an electronic computer would throw out all tabulators right away - allone to save cost. And only computing centers with electronic computers would as well have programs on punch cards, as tabulators were programmed by plugboards, not cards.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Of course a bit more complex than the mentioned program, as the requirement was to copy between vastly different drive, so a lot of setup was required, with the core loop being exactly the same. So three instructions for the loop and maybe 100 for setup :))&lt;/p&gt;&#xA;&lt;p&gt;*3 - The classic issue with programmers only seeing their own program and the single task at hand - still today.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-10T14:22:10.737" LastActivityDate="2020-11-10T14:22:10.737" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="16847" PostTypeId="2" ParentId="16833" CreationDate="2020-11-10T12:18:09.273" Score="8" Body="&lt;p&gt;As an example, years ago I installed a 25MHz 68030RC / 68851 / 68882 8MB accelerator in my A1200. First thing I did was use Realsoft Real 3D 1.x ray tracing program to render the teapot project. I rendered it using the standard program(1), then the FPU version. From what I remember, using the FPU version of Real 3D, the speed up was about 3 to 4 times faster.&lt;/p&gt;&#xA;&lt;p&gt;So whilst doing floating point emulation in software can take dozens to hundreds of instructions, real world programs would tend to be mixed with CPU instructions for program control and logic, e.g comparisons, branches, moves etc, so the speed increase wouldn't be so dramatic. Still nothing to be sniffed at though.&lt;/p&gt;&#xA;&lt;p&gt;(1 - I think the standard program would have been compiled for 68000 as it could run on my A500. So a minority of the speed up of the FPU version would have been due to the 020/030 32-bit instruction set enhancements.)&lt;/p&gt;&#xA;" OwnerUserId="19862" LastActivityDate="2020-11-10T12:18:09.273" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16848" PostTypeId="2" ParentId="16839" CreationDate="2020-11-10T14:59:27.020" Score="6" Body="&lt;p&gt;You need to understand that using the 8087 was effectively &amp;quot;free&amp;quot; for the developers and for the users. You linked in a floating point library that determined the existence of the 8087, and if it was there, it used it. If not it fell back to a software method. This means that the users don't have to do anything special to their code to leverage it. The singular issue would be for a legacy database system using a floating point format that was not compatible with the 8087.&lt;/p&gt;&#xA;&lt;p&gt;When something like that is &amp;quot;free&amp;quot;, then there's no reason for a database program to not use it and make it available to it users. While database programs aren't known for their number crunching applications, people do perform extensive FP calculations on data, including that in databases. Not all databases were financial in nature (financial data, as a rule, should not use floating point).&lt;/p&gt;&#xA;&lt;p&gt;So, for essentially zero effort, the database program and their users get enhanced FP support. No reason to not use it if it's available. Whether its noticeable is up to the application.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-11-10T14:59:27.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16849" PostTypeId="2" ParentId="16832" CreationDate="2020-11-10T15:59:54.790" Score="4" Body="&lt;p&gt;Without detailed sales and usage figures, “the most common” is probably impossible to answer, and even considering only the 8087, the answer depends on “when” — reasons to buy 8087s changed as programs using it became available.&lt;/p&gt;&#xA;&lt;p&gt;The more open plural variant of your question is largely answered in the question.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/byte-magazine-1984-09&quot; rel=&quot;nofollow noreferrer&quot;&gt;Byte’s 1984 “Guide to the IBM PCs”&lt;/a&gt; gives a good overview of the state of the PC market at that point in time, and spends quite a lot of space discussing the merits of the 8087. Its adverts provide some insight into what would have been possible at the time; &lt;a href=&quot;https://archive.org/details/byte-magazine-1984-09/page/n123/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;the MicroWay ad on page 116&lt;/a&gt; in particular. It mostly lists development packages supporting the 8087, but also a few “end-user” software packages: various graphics packages, an intriguing “Optical Design Program” (cheap at $3,000), and SuperCalc III. SPSS also features in &lt;a href=&quot;https://archive.org/details/byte-magazine-1984-09/page/n193/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;its own ad&lt;/a&gt;, and a few other statistical packages appear elsewhere. &lt;a href=&quot;https://archive.org/details/byte-magazine-1984-09/page/n203/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;The 8087 performance article&lt;/a&gt; mentions, regarding spreadsheets, that “their 8087 implementation really pays off in iterative financial analysis”.&lt;/p&gt;&#xA;&lt;p&gt;So as you surmise, spreadsheets could have accounted for a large number of 8087 sales (whether for financial analysis or graphs), but arguably statistics programs could have as well, and in fact, given the state of the market and typical uses of PCs at the time, bespoke programs used for a variety of purposes.&lt;/p&gt;&#xA;&lt;p&gt;The ads and magazine coverage also show the cost of the 8087 at the time — $230 as an official IBM option for its computers, but available for typically $175 on its own or $150 as part of  a number of packages (with 8087-using software).&lt;/p&gt;&#xA;&lt;p&gt;The same magazine shows another use of the 8087, which doesn’t quite fit into your question, but would have likely contributed to quite a few sales (albeit not as an add-on coprocessor): &lt;a href=&quot;https://archive.org/details/byte-magazine-1984-09/page/n217/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;the IBM XT/370&lt;/a&gt;, which featured an apparently fully-IEEE-compliant variant of the 8087 used to implement the 370 mainframe’s floating-point operations.&lt;/p&gt;&#xA;&lt;p&gt;Well-known programs which &lt;em&gt;required&lt;/em&gt; FPUs appeared later on, as far as I can determine; examples include later releases of AutoCAD, and significantly, 3D Studio (see these interviews of &lt;a href=&quot;https://cgpress.org/archives/cgarticles/the_history_of_3d_studio&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tom Hudson&lt;/a&gt; and &lt;a href=&quot;https://cgpress.org/archives/cgarticles/the_history_of_3d_studio_pt2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gary Yost&lt;/a&gt; if you’re interested in the latter’s history, and &lt;a href=&quot;https://www.fourmilab.ch/autofile/&quot; rel=&quot;nofollow noreferrer&quot;&gt;John Walker’s &lt;em&gt;The Autodesk File&lt;/em&gt;&lt;/a&gt;). For such programs, the cost of an FPU was small compared to the cost of the package (3D Studio was heralded as excellent value for money when it released at $2,999, although if I remember correctly that quickly went up to $3,495). 3D Studio was perhaps the largest contributor to Weitek sales...&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-11-16T17:31:28.523" LastActivityDate="2020-11-16T17:31:28.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16850" PostTypeId="1" AcceptedAnswerId="16852" CreationDate="2020-11-10T16:29:57.220" Score="5" ViewCount="295" Body="&lt;p&gt;In &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1314/6854&quot;&gt;this question&lt;/a&gt;, it's mentioned the Apple II's slot 7 was used by third party graphics cards. Is there any documentation on those? What were those cards and what were their capabilities?&lt;/p&gt;&#xA;" OwnerUserId="6854" LastEditorUserId="6659" LastEditDate="2020-11-12T00:00:55.940" LastActivityDate="2020-11-13T17:39:25.823" Title="What were the alternative graphic cards for the Apple II?" Tags="&lt;apple-ii&gt;&lt;apple&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16852" PostTypeId="2" ParentId="16850" CreationDate="2020-11-10T19:06:14.470" Score="8" Body="&lt;p&gt;There are two types of graphic cards that were produced back in the day:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;80-column cards.&lt;/li&gt;&#xA;&lt;li&gt;Video enhancing graphics cards.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2&gt;=== 80 Columns ===&lt;/h2&gt;&#xA;&lt;p&gt;For #1, there were a few companies that produced 80-column cards for the Apple II and II+ machines which were only capable of generating 40-column, uppercase-only text. Videx was one such company and produced cards that could generate 80-column and even 132-column displays, though this it is important to note that these cards only handled text mode - they had no effect on GR/HGR modes.&lt;/p&gt;&#xA;&lt;p&gt;While this solved the issue of making the older II / II+ capable of displaying 80-column text, the problem was that the II's firmware only knew how to work with 40 columns. As such, it was left to the individual companies to come up with ways to do things such as clearing the screen or positioning the cursor without interfering with the Apple's normal operation. This led to incompatibilities and made it that programs needed to be specifically coded to support the cards otherwise unexpected results could occur.&lt;/p&gt;&#xA;&lt;p&gt;Interesting to point out, these 80-column cards had separate video connectors for their output. I can't say I've seen all the cards ever produced, but I do recall that one would plug the Apple II's native composite output into the VideoTerm board which then had a separate line out which you would plug into your monitor. This was more of an automatic switch more than anything else as all screen contents were memory based and the card wasn't trying to decode the NTSC signal of the II.&lt;/p&gt;&#xA;&lt;p&gt;To wrap up the topic on 80-column cards, be aware that the cards that went into the Apple //e's AUX slot were not graphics cards per-se, but simply RAM and firmware extensions to the machine. The ability to display 80-column text was always present on the //e's motherboard, but the card gave it the extra RAM needed for the higher density display.&lt;/p&gt;&#xA;&lt;h2&gt;=== Video Enhancing Cards ===&lt;/h2&gt;&#xA;&lt;p&gt;For #2, I'm assuming the spirit of your question was more around were there any cards that would have improved the Apple II's video capabilities beyond just displaying 80-columns or the standard GR/HGR modes. There was only one company that I was ever aware of that produced such a thing; Synetix's SuperSprite board. This was a board based on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TMS9918&quot; rel=&quot;nofollow noreferrer&quot;&gt;TMS9918A video display processor&lt;/a&gt; which was effectively the same chip that was found in the ColecoVision, MSX, and TI-99/4 machines.&lt;/p&gt;&#xA;&lt;p&gt;The SuperSprite board did plug into slot 7 to get access to some video signals that weren't in other slots. What it did was that it would overlay sprites on the Apple's hi-res screen. It didn't improve the underlying hi-res capabilities, but the end result was that you could get colorful, animated sprites with little-to-no load on the CPU.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, the board was not popular (probably due to it going for $395; about $1040 in 2020) and thus little-to-no software was ever produced for it.&lt;/p&gt;&#xA;&lt;p&gt;If you want to find out more about the board, it appears to be supported in MESS/MAME these days as suggested on &lt;a href=&quot;https://ptouchman.blogspot.com/2017/09/fun-with-synetix-supersprite-board.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this blog&lt;/a&gt;. As well, there are disk images, pictures, and manuals on &lt;a href=&quot;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/Video/Synetix%20SuperSprite/&quot; rel=&quot;nofollow noreferrer&quot;&gt;apple2.org.za&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;=== Modern Solution ===&lt;/h2&gt;&#xA;&lt;p&gt;If we fast-forward to 2019, there is a product called the &lt;a href=&quot;https://www.callapple.org/vidhd/&quot; rel=&quot;nofollow noreferrer&quot;&gt;VidHD&lt;/a&gt; which is interesting and worth noting. While the purpose of the card is to simply add HDMI output capabilities to a slotted Apple II while maintaining complete compatibility with the machine, it also has an interesting side-benefit of being able to produce more advanced graphics modes for the older Apple II machines.&lt;/p&gt;&#xA;&lt;p&gt;How this works is that the card operates by watching the bus and looking for accesses to the memory locations of the II that deal with video. When it observes something video related, it updates its own internal frame buffers which ultimately produce HDMI output. The trick here is that the card doesn't care whether it is being run on a ][+, unenhanced //e, or a IIgs - if it sees the right sequence of writes to specific memory locations, it is possible to trick it into displaying DHGR and even IIgs video modes on older machines.&lt;/p&gt;&#xA;&lt;p&gt;That being said, since your question mentioned slot 7, it is worth pointing out that this card does not rely on the video signals in that slot and as such can run in any free slot (including Slot 3).&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2020-11-13T17:39:25.823" LastActivityDate="2020-11-13T17:39:25.823" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16853" PostTypeId="1" AcceptedAnswerId="16865" CreationDate="2020-11-10T21:01:14.337" Score="5" ViewCount="455" Body="&lt;p&gt;I have a memory setup where the whole address space can be exchanged (default 2 slots with 2 banks each, but may change depending on &amp;quot;expansion cards&amp;quot; plugged in).&lt;/p&gt;&#xA;&lt;p&gt;Banks are switched by sending a certain control byte to a certain control port (actual values depend on hardware setup / expansion cards / etc and should be left to the program. I might get away with hardcoding the port since changing that in the &amp;quot;default setup&amp;quot; requires solder jumpers, but any &amp;quot;expansion cards&amp;quot; adding memory would have different ports, so I'd rather not).&lt;/p&gt;&#xA;&lt;p&gt;By convention, &lt;code&gt;$FFFE..FFFF&lt;/code&gt; on each bank holds the SP for that bank, while this handler gets copied onto each bank on bootup.&lt;/p&gt;&#xA;&lt;p&gt;To be able to call across bank boundaries I came up with the following &lt;code&gt;RST $08&lt;/code&gt; handler:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; call using:&#xA;;   RST $08&#xA;;   DB controlport&#xA;;   DB controlbyte&#xA;;   DW calladdress&#xA;RST08: ; $0008 contains a JP RST08&#xA;  POP IX ; returnpoint&#xA;  INC IX ; controlbyte&#xA;  INC IX ; controlport&#xA;  INC IX ; jump low&#xA;  INC IX ; jump high&#xA;  PUSH IX ; put new returnpoint back&#xA;  LD C, (IX+2) ; control port&#xA;  LD B, (IX+3) ; control byte&#xA;  LD ($FFFE),SP ; back up SP&#xA;  IN A, (C) ; so we can go back there&#xA;  OUT (C), B ; we're in remote bank now, better hope the bankcall handler was installed there&#xA;  LD SP, ($FFFE) ; load remote SP&#xA;  LD B, A ; load &amp;quot;return control byte&amp;quot;&#xA;  PUSH BC ; back up &amp;quot;return controls&amp;quot;&#xA;  LD H, (IX+0) ; jump high&#xA;  LD L, (IX+1) ; jump low&#xA;  CALL JPHL&#xA;  POP BC ; restore &amp;quot;return controls&#xA;  LD SP, ($FFFE) ; load backed up SP&#xA;  OUT (C), B ; go back to previous bank&#xA;  RET&#xA;JPHL: ; because there's no CALL (HL)&#xA;  JP (HL)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Something tells me there must be an easier way to do this, but I can't quite wrap my head around it. I'm also positive I've seen way easier code achieving similar effects in other Z80 &amp;quot;boot ROMs&amp;quot; I stumbled upon randomly during my research on the architecture, but somehow I'm unable to find them when actively searching for it&lt;/p&gt;&#xA;" OwnerUserId="19630" LastEditorUserId="19630" LastEditDate="2020-11-10T21:48:22.467" LastActivityDate="2021-01-08T14:06:06.703" Title="Better way to do Z80 &quot;bank switch &amp; call&quot;?" Tags="&lt;z80&gt;&lt;assembly&gt;" AnswerCount="4" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16854" PostTypeId="2" ParentId="16853" CreationDate="2020-11-10T22:21:38.947" Score="3" Body="&lt;p&gt;The normal way to handle cross-bank calls is to use a springboard which is either in an unbanked area of memory or appears identically in both old and new areas.  If one doesn't mind using a different entry point for each origin bank, things can be pretty simple, especially if bank switching I/O addresses use the bottom bits of the address, rather than the data, to select the bank.  For example if addresses 0xF0 to 0xFF select bank 0 to 15, then:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;call_func1_from_bank0:  ; Assume func1 is in bank 2&#xA;  out 0F2h&#xA;  call func1&#xA;  out 0F0h&#xA;  ret&#xA;call_func1_from_bank1:  ; Assume func1 is in bank 2&#xA;  out 0F2h&#xA;  call func1&#xA;  out 0F1h&#xA;  ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Not quite as fast as calling code in the same bank, but nowhere near as slow as the more general-purpose recipe.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-11-10T22:21:38.947" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16855" PostTypeId="2" ParentId="16853" CreationDate="2020-11-11T03:11:41.327" Score="3" Body="&lt;p&gt;Hard to do a lot better while keeping full generality but the code can be considerably smaller and faster by avoiding &lt;code&gt;IX&lt;/code&gt;.  Code hasn't been tested.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; call using:&#xA;;   RST $08&#xA;;   DB controlport&#xA;;   DB controlbyte&#xA;;   DW calladdress&#xA;RST08:                  ; $0008 contains a JP RST08&#xA;     POP   HL           ; return point&#xA;     LD    C,(HL)       ; control port&#xA;     INC   HL&#xA;     LD    B,(HL)       ; control byte&#xA;     INC   HL&#xA;     LD    E,(HL)       ; jump low&#xA;     INC   HL&#xA;     LD    D,(HL)       ; jump high&#xA;     INC   HL&#xA;     PUSH  HL           ; put new return point back&#xA;     LD    ($FFFE),SP   ; back up SP&#xA;     IN    A,(C)        ; so we can go back there&#xA;     OUT   (C),B        ; we're in remote bank now, better hope the bankcall handler was installed there&#xA;     LD    SP,($FFFE)   ; load remote SP&#xA;     LD    B,A          ; load &amp;quot;return control byte&amp;quot;&#xA;     PUSH  BC           ; back up &amp;quot;return controls&amp;quot;&#xA;     CALL  JPDE&#xA;     POP   BC           ; restore &amp;quot;return controls&#xA;     LD    SP,($FFFE)   ; load backed up SP&#xA;     OUT   (C),B        ; go back to previous bank&#xA;     RET&#xA;JPDE: ; because there's no CALL (DE)&#xA;     EX    DE,HL&#xA;     JP    (HL)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;As others have mentioned, removing a bit of generality can go a long way to simplifying things.  If you're really looking to simplify you could have the hardware switch banks based on the Z-80 executing an instruction at a particular address.  Say if the Z-80 runs an instruction at &lt;code&gt;$01x0&lt;/code&gt; then the hardware switches to bank &lt;code&gt;x&lt;/code&gt;.  You could then have 16 shorter context switch routines carefully aligned to have the bank switch without the Z-80 having is issue specific instructions.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2020-11-11T03:11:41.327" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16856" PostTypeId="1" AcceptedAnswerId="16859" CreationDate="2020-11-11T03:23:31.373" Score="8" ViewCount="556" Body="&lt;p&gt;The Altair 8800 was based on what came in later years (much to the displeasure of MITS) to be known as the S-100 bus, because it had 100 lines, because MITS found 100-pin edge connectors were available cheaply.&lt;/p&gt;&#xA;&lt;p&gt;Why were 100-pin edge connectors available cheaply? What were they used for before then? Were they some kind of de facto industry standard, was there some particular machine that used a lot of them, or was it just a random one off event that someone happened to be liquidating a few crates of them?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-11T12:48:31.757" Title="Why did the Altair use 100-pin edge connectors?" Tags="&lt;history&gt;&lt;s-100&gt;&lt;altair-8800&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16857" PostTypeId="2" ParentId="16833" CreationDate="2020-11-11T10:22:19.497" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Any particular Amiga applications which greatly benefited from an FPU?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Any program that uses floating point math extensively should greatly benefit. It can be done automatically by going through an external library that uses the FPU if available, but this has higher overhead than inlined FPU instructions.&lt;/p&gt;&#xA;&lt;p&gt;In general if a program has different versions for FPU and non-FPU, or the documentation states that it requires an FPU, then it probably has inline FPU code. Since requiring an FPU greatly reduces the target audience it suggests the developers thought the performance gain was worth it.&lt;/p&gt;&#xA;&lt;p&gt;Notable examples of Amiga applications with specific FPU versions include &lt;a href=&quot;https://en.wikipedia.org/wiki/LightWave_3D#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lightwave 3D&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Imagine_(3D_modeling_software)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Imagine&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/VistaPro&quot; rel=&quot;nofollow noreferrer&quot;&gt;VistaPro&lt;/a&gt;, and &lt;a href=&quot;https://www.ibrowse-dev.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBrowse&lt;/a&gt; (Javascript library).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I was always curious exactly how much performance benefit did it&#xA;actually give. Are there any benchmarks or notable examples on the&#xA;Amiga where this difference is visible?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The benchmarking program &lt;a href=&quot;http://aminet.net/package/util/moni/AIBB_65&quot; rel=&quot;nofollow noreferrer&quot;&gt;AIBB&lt;/a&gt; includes several tests that show the difference between using software floating point math and inline FPU instructions. On my A1200 with Blizzard 1230-IV accelerator (50MHz 68030 and 68882) the following results were obtained:-&lt;/p&gt;&#xA;&lt;p&gt;Savage (nested calls to transcendental functions in double precision floating point math):-&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SC Math: 64.6 seconds &#xA;CP math: 1.68 seconds &#xA;speedup: 38.5 times faster&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;BeachBall (raytraced 3D beach ball rendered on hires 8 color screen):-&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SC Math: 60.45 seconds      &#xA;CP Math: 7.35 seconds&#xA;speedup: 8.2 times faster&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The BeachBall test is probably more representative of typical real world performance (though of course results are always dependent on the particular implementation). In this case the speedup is equivalent to running the 68030 at 410 MHz, and 52% faster than a 50 MHz 68060 running software floating point code.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tFIqM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tFIqM.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-11-11T10:22:19.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16858" PostTypeId="1" CreationDate="2020-11-11T10:41:47.613" Score="0" ViewCount="115" Body="&lt;p&gt;I lately wanted to try some of the Commodore 64 games I have kept as D64 files on my Fedora Linux system using VICE. I have lately upgraded the system from Fedora 26 to Fedora 32.&lt;/p&gt;&#xA;&lt;p&gt;After I started up VICE, attached a D64 image of a floppy disk and typed LOAD&amp;quot;*&amp;quot;,8,1 the emulator displayed &amp;quot;SEARCHING FOR *&amp;quot; and &amp;quot;LOADING&amp;quot;, just like a real Commodore 64. And just like a real Commodore 64, the &amp;quot;LOADING&amp;quot; message just stayed there for several minutes.&lt;/p&gt;&#xA;&lt;p&gt;Shouldn't modern systems be able to load files consisting only of tens of kilobytes into memory in microseconds, not minutes? Why then was it taking so long to load?&lt;/p&gt;&#xA;&lt;p&gt;I turned off &amp;quot;true drive emulation&amp;quot; and turned on &amp;quot;enable virtual devices&amp;quot; from the settings menu but that didn't help.&lt;/p&gt;&#xA;&lt;p&gt;Googling for this suggested enabling &amp;quot;warp mode&amp;quot; by pressing Alt-W but no such option appears on the settings or the menus and pressing Alt-W does nothing.&lt;/p&gt;&#xA;&lt;p&gt;It also turned out that VICE actually runs x64sc, not x64. I don't even have the command &amp;quot;x64&amp;quot; installed. I tried dnf to see how I could get it, here is the output.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ dnf whatprovides x64&#xA;Fedora 32 openh264 (From Cisco) - x86_64        2.5 kB/s | 2.5&#xA;kB     00:01    &#xA;Fedora Modular 32 - x86_64                      7.0 MB/s | 4.9&#xA;MB     00:00    &#xA;Fedora Modular 32 - x86_64 - Updates            6.5 MB/s | 3.9&#xA;MB     00:00    &#xA;Fedora 32 - x86_64 - Updates                    9.5 MB/s |  27&#xA;MB     00:02    &#xA;Fedora 32 - x86_64                              9.3 MB/s |  70&#xA;MB     00:07    &#xA;home:FrodeSolheim:stable (Fedora_31)             12 kB/s |  35&#xA;kB     00:02    &#xA;RPM Fusion for Fedora 32 - Free - Updates       242 kB/s | 664&#xA;kB     00:02    &#xA;RPM Fusion for Fedora 32 - Free                 172 kB/s | 679&#xA;kB     00:03    &#xA;RPM Fusion for Fedora 32 - Nonfree - Updates    146 kB/s | 119&#xA;kB     00:00    &#xA;RPM Fusion for Fedora 32 - Nonfree              148 kB/s | 225&#xA;kB     00:01    &#xA;vice-x64-3.2-6.fc32.x86_64 : Vice Commodore 64 Emulator&#xA;Repo        : rpmfusion-nonfree&#xA;Matched from:&#xA;Filename    : /usr/bin/x64&#xA;&#xA;$ sudo dnf install vice-x64 [sudo] password for: &#xA;Last metadata expiration check: 0:16:14 ago on Wed 11 Nov 2020 11:37:51 AM EET.&#xA;Package vice-x64-3.4-1.fc32.x86_64 is already installed.&#xA;Dependencies resolved.&#xA;Nothing to do.&#xA;Complete!&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Apparently vice-x64-3.2.6 provides &amp;quot;x64&amp;quot; but since I already have vice-x64-3.4.1 dnf doesn't install it.&lt;/p&gt;&#xA;&lt;p&gt;How can this be resolved? Note that I don't necessarily need to install &amp;quot;x64&amp;quot; instead of &amp;quot;x64sc&amp;quot; if there's some other way. What I really want in the end is to have VICE load programs faster than a real Commodore 64, because that should be what modern systems are quite capable of.&lt;/p&gt;&#xA;" OwnerUserId="19868" LastActivityDate="2020-11-11T15:00:26.343" Title="VICE loads files slowly on Fedora 32 Linux" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2020-11-12T06:46:29.693" ContentLicense="CC BY-SA 4.0" />
  <row Id="16859" PostTypeId="2" ParentId="16856" CreationDate="2020-11-11T12:48:31.757" Score="12" Body="&lt;p&gt;As Wikipedia says (&lt;a href=&quot;https://en.wikipedia.org/wiki/S-100_bus&quot; rel=&quot;noreferrer&quot;&gt;S-100 bus&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;(Author) then looked for an inexpensive source of connectors, and he&#xA;came across a supply of military surplus 100-pin edge connectors. The&#xA;100-pin bus was created by an anonymous draftsman, who selected the&#xA;connector from a parts catalog and arbitrarily assigned signal names&#xA;to groups of connector pins.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So the prime reason is &amp;quot;a military surplus&amp;quot;. I guess they were used in some army projects in the '70s, like TTL-based mainframes, but I cannot find any evidence for such a claim, as the military computers are not wide-known.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-11-11T12:48:31.757" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16860" PostTypeId="1" AcceptedAnswerId="16861" CreationDate="2020-11-11T13:15:55.757" Score="9" ViewCount="782" Body="&lt;p&gt;I got a working ZX Spectrum 48k (issue 6a) with the original power supply.&lt;/p&gt;&#xA;&lt;p&gt;Before hooking up the power supply I tested with my multimeter to see if it was good. The power supply specifies it outputs 9V but my multimeter says 15V. To be safe I didn't use it.&lt;/p&gt;&#xA;&lt;p&gt;Is the power supply malfunctioning? Or is this normal?&lt;/p&gt;&#xA;" OwnerUserId="19870" LastEditorUserId="129" LastEditDate="2020-11-11T15:57:13.410" LastActivityDate="2020-11-12T15:56:43.053" Title="ZX Spectrum 48k Power Supply outputting 15V" Tags="&lt;zx-spectrum&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16861" PostTypeId="2" ParentId="16860" CreationDate="2020-11-11T13:31:10.800" Score="17" Body="&lt;p&gt;This is relatively normal for the original PSU.&lt;/p&gt;&#xA;&lt;p&gt;The supply unit is a &amp;quot;soft&amp;quot; one that will output a much lower voltage under load when connected to the ZX Spectrum. 12 or even more Volts are normal.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2020-11-11T13:31:10.800" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16862" PostTypeId="2" ParentId="16858" CreationDate="2020-11-11T15:00:26.343" Score="3" Body="&lt;p&gt;&amp;quot;Shouldn't modern systems be able to load files consisting only of tens of kilobytes into memory in microseconds, not minutes?&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;You seem to be unclear as to what an emulator is. The whole point of an emulator is to emulate what the real hardware would do. If a C64 took 30 minutes to load a non-fastload game from tape, then the emulator taking 30 minutes is correct behaviour.&lt;/p&gt;&#xA;&lt;p&gt;x64sc is an extremely accurate emulation of the C64, so I assume that's why there is no warp mode option. If the alternate x64 executable is not present you might need to build Vice yourself. Or you could try the X64DTV executable if that's there.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2020-11-11T15:00:26.343" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16863" PostTypeId="1" AcceptedAnswerId="16864" CreationDate="2020-11-11T18:57:14.973" Score="38" ViewCount="3632" Body="&lt;p&gt;Reading on the AGP spec, the little bits I've found on sites like &lt;a href=&quot;https://old.pinouts.ru/Slots/agp_pinout.shtml&quot; rel=&quot;noreferrer&quot;&gt;https://old.pinouts.ru/Slots/agp_pinout.shtml&lt;/a&gt;, say:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Accelerated Graphics Port (also called Advanced Graphics Port) is a high-speed point-to-point channel for attaching a single device (generally a graphics card) to a computers motherboard, primarily to assist in the acceleration of 3D computer graphics. Many classify AGP as a type of computer bus, but this is something of a misnomer since buses generally allow multiple devices to be connected, while AGP does not. AGP originated from Intel, and it was first built into a chipset for the Pentium II microprocessor. AGP cards generally slightly exceed PCI cards in length and can be recognized by a typical hook at the inner end of the connector, which does not exist on PCI cards. Nowdays AGP is almost replaced by PCI-Express.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This tells me that the connector is, in fact, more generic and just a high-speed peripheral connect to the CPU.  This has obvious advantages for graphics processing which needed the higher bandwidth of the time, but I can think of several other devices which would enjoy that connection speed (capture cards, disk controllers, cache devices, etc).&lt;/p&gt;&#xA;&lt;p&gt;Were there reasons this wouldn't be done, and are there examples of hardware utilizing the AGP connector in this manner?&lt;/p&gt;&#xA;" OwnerUserId="19874" LastActivityDate="2020-11-13T09:56:00.973" Title="Was AGP only ever used for graphics cards?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;graphics&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16864" PostTypeId="2" ParentId="16863" CreationDate="2020-11-11T19:39:36.177" Score="43" Body="&lt;p&gt;I researched this question online fairly thoroughly a while back.  I could not find any reference to an AGP device that wasn't a graphics card.  It wasn't exhaustive, and absence of proof is not proof of absence, but I strongly suspect no such cards were made.  I also think there are technical and economic reasons that make it unlikely.  It would have been a rather strange product, with no clear target market.&lt;/p&gt;&#xA;&lt;p&gt;The main feature of AGP over PCI is the addition of an DMA channel to main memory.  Importantly, this is an &lt;em&gt;exclusive&lt;/em&gt; channel, not a proper bus.  You can have only one AGP slot.  So &lt;strong&gt;the only real market for such a card would be for computers that don't need graphics, such as servers.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;But the server market already had high-bandwidth buses like PCI-X, and they were actual buses, so you could, for example, have both a high-speed SCSI and a Gigabit Ethernet card in the same machine.  I suspect most customers who wanted a very high-end peripheral at the time, like a Gigabit Ethernet card, would not want to stick it in a low-end desktop motherboard with only one high-speed slot.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="2037" LastEditDate="2020-11-12T18:05:07.973" LastActivityDate="2020-11-12T18:05:07.973" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16865" PostTypeId="2" ParentId="16853" CreationDate="2020-11-11T21:03:50.507" Score="3" Body="&lt;p&gt;Considering what I learned in the comments under the question, I'd suggest a combined hard/software solution to this design issue. It's based around a single port, or a consecutive group of ports that are handled as one, by all 'cards'. Decoding is done as sum of address and data.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;[Insert]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Assumptions for all following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bit-numbering in Address/Data is LSB to MSB, so A0/D0 is lowest value&lt;/li&gt;&#xA;&lt;li&gt;The term 'Card' is used for any functional block providing an address block independent of being a card on its own, part of another card or some base system.&lt;/li&gt;&#xA;&lt;li&gt;The system provides single memory window of 32 KiB, starting at 8000h to map card content.&lt;/li&gt;&#xA;&lt;li&gt;The term 'selected' describes a card active mapping its content into the window.&lt;/li&gt;&#xA;&lt;li&gt;The term 'page' describes a memory region to be mapped into the window&lt;/li&gt;&#xA;&lt;li&gt;The term 'id' describes the static porion of a cards 'address' - usually hard coded via switches, jumpers or some ROM.&lt;/li&gt;&#xA;&lt;li&gt;The term 'page number' describes an identifier (address) of a page supplied by a card&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Basic Workings with a Single Port&lt;/h2&gt;&#xA;&lt;p&gt;The essential idea is to address all pages of all cards via a single port and decode the value written there as card id and page number.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There is a single I/O port used for bank selection.&lt;/li&gt;&#xA;&lt;li&gt;Lets say at FFh.&lt;/li&gt;&#xA;&lt;li&gt;All cards will decode that address&lt;/li&gt;&#xA;&lt;li&gt;Each card has an 'id' 0..7 bits wide&lt;/li&gt;&#xA;&lt;li&gt;If it's a read access&#xA;&lt;ul&gt;&#xA;&lt;li&gt;only the actual selected card reacts and returns the actual setting (all of D0..D7)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;If it's a write access&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All cards deselect&lt;/li&gt;&#xA;&lt;li&gt;All cards decode data written&lt;/li&gt;&#xA;&lt;li&gt;The data is decoded as card-id&#xA;&lt;ul&gt;&#xA;&lt;li&gt;by selecting D7..Dn depending on the card structure and matching it with the card id.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;If data matches the card id it selects&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The page part of the data (Dn-1..D0) is used as page number and the according page mapped.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Sounds complicated? It isn't. Lets make a simple example.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Lets assume a card offering 64 KiB&lt;/strong&gt; of RAM as two pages (0,1).&lt;/p&gt;&#xA;&lt;p&gt;The card decode port F0h.&lt;/p&gt;&#xA;&lt;p&gt;On a write access to port F0h it will compare D7..D1 to a set of DIP-Switches with it's address. If they are the same, the select flip-flop is set and D0 is saved to another flip-flop (page FF) to address either page.&lt;/p&gt;&#xA;&lt;p&gt;From that time on all access to the window (8000h..FFFFh) will go to the selected page (A15=1 &amp;amp; select flip-flop set). If the id does not match, the 'selected' flip-flop gets reset, and the card becomes inactive.&lt;/p&gt;&#xA;&lt;p&gt;On a read access on port F0h &lt;em&gt;and&lt;/em&gt; if the select flip-flop is set, the card will put it's id on D7..D1 and the state of the page-flip-flop on D0. Otherwise it does nothing.&lt;/p&gt;&#xA;&lt;p&gt;If we now enter this card into the system and jumper the ID to 0000.011x, it will provide two pages as 06h and 07h.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Now lets take a card with 256 KiB&lt;/strong&gt; or 8 pages. Workings are as before, except the id match only goes this time for D7..D3 with D2..D0 being the page within. If jumpered as 0000.1xxx, it will provide pages 08h..0Fh.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;With a 1 MiB card&lt;/strong&gt; ... Well, I guess by now the picture is clear.&lt;/p&gt;&#xA;&lt;p&gt;So far the hardware is no more complex than with the original solution. Code is also quite similar to your original solution - just sans some quirks. Let's look at the software:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; call using:&#xA;;   RST $08&#xA;;   DB callpagelow   ; Pagenumber&#xA;;   DB callpagehi    ; Ignored for now (port-part)&#xA;;   DW calladdress   ; Address within page (Special value with A15=0)&#xA;;&#xA;; $0008 contains a JP RST08&#xA;;&#xA;; Destroys registers BC, DE and HL before entering the new bank.&#xA;; Only A, IX and IY can be used for parameter transfer&#xA;;&#xA;; Destroys BC and DE on return.&#xA;; Only A, Flags, HL, IX and IY can be used for return values.&#xA;;&#xA;&#xA;RST08: &#xA;  POP  HL            ; load parameter list address into HL without changing SP and save HL&#xA;  LD   B,(HL)        ; Load pagenumber (callpagelow)&#xA;  INC  HL&#xA;  INC  HL            ; Skip callpagehigh&#xA;  LD   E,(HL)        ; Load target address low&#xA;  INC  HL&#xA;  LD   D,(HL)        ; Load target address high&#xA;  INC  HL&#xA;  PUSH HL            ; Place new return address&#xA;  EX   DE,HL         ; Bring target address into HL&#xA;  LD   E,B           ; Free B for IN/OUT&#xA;&#xA;  LD   (0FFFEh),SP   ; Save current page SP&#xA;&#xA;;Do the flip&#xA;&#xA;  LD   BC,00F0h      ; Portaddress&#xA;  IN   D,(C)         ; Load actual Page&#xA;  OUT  (C),E         ; Flip to new page&#xA;&#xA;; here we continue in (hopefully) the same code on the new page&#xA;&#xA;  LD   SP,(0FFFEh)   ; Load page SP&#xA;  PUSH DE            ; Save previous/actual page&#xA;&#xA;  CALL JPHL          ; Call the desired function&#xA;&#xA;  POP  DE            ; Reload page&#xA;  LD   BC,00F0h      ; Portaddress&#xA;  OUT  (C),D         ; Flip to previous page&#xA;&#xA;; And back to code in the original page&#xA;  &#xA;  LD  SP, (0FFFEh)   ; Load page SP&#xA;&#xA;  RET&#xA;JPHL:                ; because there's no CALL (HL)&#xA;  JP (HL)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;I do not like the fact that it destroys a lot of registers, after all, how to transfer parameters between pages?(*1)  So while there could be still a fey cycles shaved, I do think this is a viable compromise.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I wouldn't care so much about the switchers size. Any routine so small that above instructions would make a considerable overhead should be embedded in the caller code anyway (*2).&lt;/p&gt;&#xA;&lt;p&gt;In general I'd suggest to put that code into ROM and have as at least a data access function as well, allowing to read bytes (or words) form a different pages - maybe in conjunction with an interbank block move to exchange parameter blocks.&lt;/p&gt;&#xA;&lt;p&gt;In general this is not much different than your original idea, except now the cards act cooperative and programs only need to know a logical page number, not a physical port and page. With some careful address assignment programs can 'see' a continuous series of pages without the need to know about each cards structure and limits.&lt;/p&gt;&#xA;&lt;p&gt;Using a logical page number while hiding real port numbers within the switcher also enables transparent hardware changes - i.e. a later machine having, for what ever reason, these ports at different locations and/or different organized, which brings us to part #2, usage of a port group to expand past 8 MiB (if ever needed):&lt;/p&gt;&#xA;&lt;p&gt;##Using a Port Group&lt;/p&gt;&#xA;&lt;p&gt;The scheme is much like before, except we now decode a wider page number than 8 bit. How? simply by using addresses as data. This allows in theory the use of up to 16 (I/O) address bits together with the 8 data bits as a 24 bit page number, enabling up to 16 Mi Pages of 32 KiB each, all together an address space of 39 Bit 512 Gigabyte. Cool, isn't it. Of course it would use up all I/O Ports available, so maybe we just go for a usage of a maximum of 8 of the address bits. This still allows up to 64 Ki pages with 32 KiB each - or 2 GiB of address space. Truly more than a Z80 can wish for. Workings are much like described before (*3):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There is sequence of I/O ports used for bank selection.&lt;/li&gt;&#xA;&lt;li&gt;Address is again arbitrary but need to be alligned to the size of the port group. E.g. if there are 4 ports it needs to be aligned on a 4 port boundary (0, 4, 8, ...), with 16 it needs to be a 16 port boundary (like 10h, 20h, ...)&lt;/li&gt;&#xA;&lt;li&gt;All cards will decode that address range&lt;/li&gt;&#xA;&lt;li&gt;Each card has an 'id' 0..15 bits wide&lt;/li&gt;&#xA;&lt;li&gt;If it's a read access&#xA;&lt;ul&gt;&#xA;&lt;li&gt;only the actual selected card reacts and returns the actual setting (all of D0..D7)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;If it's a write access&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All cards deselect&lt;/li&gt;&#xA;&lt;li&gt;All cards decode address and data written&lt;/li&gt;&#xA;&lt;li&gt;The The lower address bits and all data bis are decoded as card-id&#xA;&lt;ul&gt;&#xA;&lt;li&gt;by selecting Am..A0 and D7..Dn depending on the card structure and matching it with the card id.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;If data matches the card id it selects&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The page part of the data (Am-1..D0) is used as page number and the according page mapped.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So lets assume there we spend 16 port addresses for the switcher, located at E0h. Now cards would decode A3..A0 and D7..D0 as page address. That'll be 4 Ki pages or 128 MiB of RAM.&lt;/p&gt;&#xA;&lt;p&gt;Software wouldn't be much different. A few more instructions to handle the wider page number, but that's it. I'll leve that up as an exercice.&lt;/p&gt;&#xA;&lt;p&gt;Best of all, from a software's view this would be fully upward compatible - only difference is that now more than 256 pages are available. Heck, even the hardware can be made to already adhere to that by optional decoding address bits as zero. So old cards could be used in a follow up system.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Using 8080 IN/OUT (aka restricting port address to 8 bit) would free (with some register reloading) enabling the preservation HL as input parameter (or another 16 bit register). Also BC could be saved, but not be used as In or Out.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Yes, there may be exceptions for some OS functions that urely exist to abstract access, but even then, if it's that time constrained the whole concept needs to be rethought.&lt;/p&gt;&#xA;&lt;p&gt;*3 - There is a not so tiny problem hidden - lets see who spots it first :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-11-11T21:03:50.507" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16866" PostTypeId="2" ParentId="16850" CreationDate="2020-11-12T00:34:44.090" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;it's mentioned the Apple II's slot 7 was used by third party graphics cards.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'm a bit suspicious here, as slot 7 wasn't any more capable for generic graphic cards than any other slot.&lt;/p&gt;&#xA;&lt;p&gt;As Dirkt already mentioned in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1313/6659&quot;&gt;his answer&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[...] There's not really a lot you can do with them, except cater for some different TV encoding system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And that's exactly the point about the additional signals (SYNC and COLOR REF). They support &lt;em&gt;modification&lt;/em&gt; and &lt;em&gt;transcoding&lt;/em&gt; of the existing video signal.&lt;/p&gt;&#xA;&lt;p&gt;By default the Apple II delivers a (kind-of) NTSC compatible signal intended for direct feed to a NTSC compatible CRT/TV. If one wants to (or has to) use a different output standard (SECAM, PAL, RGB, etc.) the signal existing signal needs to be decoded and reencoded. To do so the card needs to be able to detect position within the video frame so the colour signal can be detected within the video signal - which is the third signal needed, provided by a pin header beside slot 7.&lt;/p&gt;&#xA;&lt;p&gt;Of course this could as well be used to overlay the Apple II picture with additional elements, or use it as background for another video generator (like for a TMS9918). In any case the result had to stay within the same (TV like) capabilities of the Apple II signal.&lt;/p&gt;&#xA;&lt;p&gt;A third use, light-pens, is as well based on the same effect of  synchronisation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What were those cards and what were their capabilities?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As mentioned, next to all were encoder for different video formats.&lt;/p&gt;&#xA;&lt;p&gt;Having said that,there were of course alternative video cards, some with (for back then) extreme high resolutions like 512x384 in colour.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-11-12T00:34:44.090" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16867" PostTypeId="1" AcceptedAnswerId="16869" CreationDate="2020-11-12T01:11:23.807" Score="1" ViewCount="160" Body="&lt;p&gt;In 1974, Intel released the 8080, which basically was the first microprocessor good enough to build a serious computer around. That led to the Altair 8800 the following year, which was the beginning of the personal computing revolution.&lt;/p&gt;&#xA;&lt;p&gt;What sometimes gets forgotten is that later in 1974, Motorola released the 6800, which while not quite as good as the 8080 (in speed or code density, the latter being perhaps even more important in those days), was the &lt;em&gt;second&lt;/em&gt; microprocessor good enough to build a serious computer around, and accordingly likewise someone did the following year: &lt;a href=&quot;http://www.computinghistory.org.uk/det/16739/SWTPC-6800/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.computinghistory.org.uk/det/16739/SWTPC-6800/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's basically the same kind of design as the Altair: horizontal box with a backplane that takes expansion cards that are expected to hold most of the actual hardware. It doesn't list separate prices for kit versus assembled, so presumably the listed $395 (from the above link) is for assembled, compared to $621 (from &lt;a href=&quot;https://en.wikipedia.org/wiki/Altair_8800&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;) for the Altair.&lt;/p&gt;&#xA;&lt;p&gt;Why the price difference?&lt;/p&gt;&#xA;&lt;p&gt;It's not because MITS was overcharging for the Altair; on the contrary, they were drastically undercharging, to the point where they couldn't expand to meet demand and there was no margin for retailers.&lt;/p&gt;&#xA;&lt;p&gt;It's not because the inferior CPU was cheaper; Motorola matched Intel's price for their CPU. (&lt;a href=&quot;https://www.techspot.com/article/884-history-of-the-personal-computer-part-2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.techspot.com/article/884-history-of-the-personal-computer-part-2/&lt;/a&gt; &amp;quot;Roberts was able to secure supply of the 8080 for $75 a processor (Intel's list price was $360, as was Motorola's 6800)...&amp;quot;)&lt;/p&gt;&#xA;&lt;p&gt;The SWTPC does not have the front panel with the switches and blinking lights of the Altair, which would have saved some cost, though that component doesn't feel like it should have been very expensive.&lt;/p&gt;&#xA;&lt;p&gt;Perhaps more significantly, it uses the SS-50 bus compared to the S-100 bus. That's 50 fewer wires on the backplane, 50 fewer pins on each edge connector. Intuitively, it feels that should cut the cost significantly, though it is said that MITS was able to source 100-pin edge connectors cheap as military surplus: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16856/why-did-the-altair-use-100-pin-edge-connectors&quot;&gt;Why did the Altair use 100-pin edge connectors?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am curious about several things regarding this machine and the 'might have been' branch of personal computing history that it represents, but to ask a specific question here:&lt;/p&gt;&#xA;&lt;p&gt;Assuming the price difference reflected actual manufacturing cost difference, what accounts for the SWTPC being cheaper to build than the Altair?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2020-11-12T01:45:00.723" LastActivityDate="2020-11-12T03:33:16.250" Title="Why was the SWTPC 6800 Computer System cheaper than the Altair?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;cost&gt;&lt;6800&gt;&lt;altair-8800&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16869" PostTypeId="2" ParentId="16867" CreationDate="2020-11-12T03:33:16.250" Score="1" Body="&lt;p&gt;It turns out that the price difference was not as large as I thought it was. According to &lt;a href=&quot;http://www.oocities.org/peterochocki/computers/1980comp/swtp6800.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.oocities.org/peterochocki/computers/1980comp/swtp6800.htm&lt;/a&gt; the $395 for the SWTPC was in kit form, which means it compares to $430 for the Altair, a rather small price difference. Raffzahn is probably right that the $35 difference is accounted for by the Altair having a sturdier case and a front panel with switches and blinking lights.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-12T03:33:16.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16870" PostTypeId="1" AcceptedAnswerId="16878" CreationDate="2020-11-12T04:01:57.993" Score="2" ViewCount="184" Body="&lt;p&gt;In 1974, a major semiconductor company released its first 8-bit CPU that was good enough to build a serious computer around. In 1975, a smaller company built a computer around it, a horizontal box with backplane and expansion cards, released it as a kit for ~$400 or fully assembled for somewhat more.&lt;/p&gt;&#xA;&lt;p&gt;The CPU was the 8080, the computer was the Altair 8800, and it took off, inspiring IMSAI, CP/M, and a whole ecosystem of business computing in the late seventies that was sufficiently comprehensive that the Apple II even acquired an expansion card with a Z80 just so that it could run CP/M.&lt;/p&gt;&#xA;&lt;p&gt;The CPU was the 6800, the computer was the SWTPC 6800 Computer System, and it... I won't say sank without a trace. Surely they sold some units. But it failed to be very popular or influential, to the extent that, though I've done a lot of reading about the history of computing in the last few years, its existence never really registered with me until today.&lt;/p&gt;&#xA;&lt;p&gt;One can imagine an alternative history in which it was the 6800 that took off in a big way, leading to a future history where the dominant operating system for business computing ran on the 6502. I don't know if that would've been better or worse, but it would certainly have been different.&lt;/p&gt;&#xA;&lt;p&gt;Why did it not happen?&lt;/p&gt;&#xA;&lt;p&gt;The 8080 was technically superior to the 6800 in both performance and code density. Did either hobbyists or businesses, at that time, know enough about the respective CPUs to make their decision on that basis? I kind of feel they didn't, though I could be wrong.&lt;/p&gt;&#xA;&lt;p&gt;The nominal minimum price turns out to have been close to the same, with the SWTPC being slightly cheaper: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16867/why-was-the-swtpc-6800-computer-system-cheaper-than-the-altair&quot;&gt;Why was the SWTPC 6800 Computer System cheaper than the Altair?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The SWTPC didn't come with a front panel with switches and blinking lights; you really needed a keyboard, screen and cassette interface to do anything with it, which made the effective minimum price much higher. That would have been an issue for hobbyists. Was it an issue for businesses? Or was the chain of events that hobbyists bought the Altair, developed other products for it, leading to a scenario where the Altair had a more attractive ecosystem?&lt;/p&gt;&#xA;&lt;p&gt;Are there any other factors I am missing, that caused the SWTPC to lose out to the Altair in the race to become the industry standard platform?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-12T18:20:23.123" Title="Why did the SWTPC 6800 Computer System not take off?" Tags="&lt;history&gt;&lt;6800&gt;&lt;altair-8800&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ClosedDate="2020-11-12T11:53:58.813" ContentLicense="CC BY-SA 4.0" />
  <row Id="16871" PostTypeId="2" ParentId="4524" CreationDate="2020-11-12T04:15:59.640" Score="0" Body="&lt;p&gt;I know it's a bit late but I was after a very similar game and just came across it again.&lt;/p&gt;&#xA;&lt;p&gt;Mission Omega - C64 and Amstrad?&lt;/p&gt;&#xA;&lt;p&gt;I'd recommend you check it out but you build robots from parts and send them out to explore. Choosing everything from their mode of movement to their weapons and sensors.&lt;/p&gt;&#xA;" OwnerUserId="19875" LastActivityDate="2020-11-12T04:15:59.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16872" PostTypeId="1" AcceptedAnswerId="16874" CreationDate="2020-11-12T05:21:19.753" Score="32" ViewCount="3298" Body="&lt;p&gt;The most controversial part of the IEEE 754 floating-point standard is gradual denormals. Typically they trap to software rather than being implemented in hardware. In the common case where a workload has numbers that decline to zero, when they hit the denormal range, there is an abrupt slowdown of a couple of orders of magnitude until the programmer finds out what's going on and how to turn off denormals. There is a good reason for this: in a nutshell, to make them run fast, would require spending more hardware resources &lt;em&gt;all the time&lt;/em&gt; so that, for a given budget of transistors and power, &lt;em&gt;everything&lt;/em&gt; would run slower in throughput, latency or both: &lt;a href=&quot;https://stackoverflow.com/questions/54937154/why-are-denormal-floating-point-values-slower-to-handle&quot;&gt;https://stackoverflow.com/questions/54937154/why-are-denormal-floating-point-values-slower-to-handle&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When the IEEE 754 committee was debating the matter, DEC hired an expert numerical analyst named Pete Stewart to study it and give his opinion, expecting him to support their position (based on experience with the VAX) that denormals should not be in the standard; they were unpleasantly surprised when he claimed they could in fact be implemented efficiently: &lt;a href=&quot;https://people.eecs.berkeley.edu/%7Ewkahan/19July10.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://people.eecs.berkeley.edu/~wkahan/19July10.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But I haven't been able to find any specifics on how he expected this to be done. Presumably if the method he was thinking of would really work with no downside, modern CPUs would use it.&lt;/p&gt;&#xA;&lt;p&gt;So what was he thinking? Why doesn't it work with no downside? Why did he believe it would? Was he ignoring latency and power consumption? Was he ignoring diffuse cost? (Sure, you can make denormals just as fast as normals – by making everything slower.) Was he working on assumptions that were true only with the technology of the time? (Gate delays exceeding wire delays, floating point implemented in microcode?) Or something else I haven't thought of?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="-1" LastEditDate="2020-11-13T13:31:38.527" LastActivityDate="2020-11-13T13:31:38.527" Title="What did Pete Stewart think he knew about efficient implementation of floating point denormals?" Tags="&lt;history&gt;&lt;floating-point&gt;&lt;design-choices&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16873" PostTypeId="2" ParentId="16870" CreationDate="2020-11-12T05:37:50.617" Score="5" Body="&lt;p&gt;I strongly suspect &lt;strong&gt;CP/M was the key&lt;/strong&gt;. Plenty of 8080 (and by extension, Z80) machines ran other operating systems, particularly the Radio Shack TRS-80 line. But the basics of Altair, Imsai, Osborne, Kaypro, NorthStar and &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_computers_running_CP/M&quot; rel=&quot;noreferrer&quot;&gt;so many others&lt;/a&gt; promoted the Intel 8080/compatible market in a huge way. CP/M led to mass-market &lt;strong&gt;business software&lt;/strong&gt; like WordStar, dBase II, and many other programs.&lt;/p&gt;&#xA;&lt;p&gt;CP/M was no miracle operating system. But it was early - 1974. The (from a brief look) somewhat comparable FLEX for 6800 came out in 1976. Two years was a long time even in those days, which could have easily affected early adoption of 8080 vs. 6800.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2020-11-12T05:37:50.617" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16874" PostTypeId="2" ParentId="16872" CreationDate="2020-11-12T06:20:18.247" Score="31" Body="&lt;p&gt;As far as I am familiar with the genesis of the IEEE-754 floating-point standard from the literature, G. W. Stewart never looked at implementation cost for the support of gradual underflow. He was tasked with examining its claimed advantages to floating-point computation from a numerical analysis viewpoint.&lt;/p&gt;&#xA;&lt;p&gt;Charles Severance, &amp;quot;IEEE 754: An Interview with William Kahan.&amp;quot; &lt;em&gt;Computer&lt;/em&gt;, Vol. 31, No. 3, March 1998, pp. 114-115&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Yes, DEC had been struggling to persuade us that gradual underflow was a bad thing. If they could prove it was unnecessary, there was no reason not to use DEC’s exponent bias. The exceptional handling and other details could be done with small tweaks. DEC finally commissioned one of the most prominent error analysts in the east, G.W. (Pete)&#xA;Stewart, to perform the study. He was to look into the error analysis aspects to demonstrate that gradual underflow was not all that I had cracked it up to be. [...] At a meeting in Boston in 1981, Stewart reported that, on balance, he thought gradual underflow was the right thing to do. The DEC folk who had commissioned the report were rather disappointed and they said, &amp;quot;OK, we’ll publish this later.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Severance's &lt;a href=&quot;https://people.eecs.berkeley.edu/%7Ewkahan/ieee754status/754story.html&quot; rel=&quot;noreferrer&quot;&gt;interview notes&lt;/a&gt; entitled &amp;quot;An Interview with the Old Man of Floating-Point&amp;quot; also describe DEC's objections from a hardware implementation viewpoint (in this quote, K-C-S refers to the proposal by Kahan, Coonen, and Stone which eventually became the basis for IEEE-754):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;At an early meeting of p754 in the late 1970s a hardware engineer from DEC had stated flatly that K-C-S could not be built to run as fast as VAX arithmetic hardware. Meanwhile George Taylor, then a graduate student supervised by Computer Science Prof. Dave Patterson at U.C. Berkeley, had been building K-C-S floating-point onto two accelerator boards for a VAX there. The plan was to substitute these for DEC's without changing the VAX instruction set, and then see how well software ran on each arithmetic. After Taylor showed his design to a p754 meeting nobody could dispute the feasibility of fast K-C-S floating-point.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;DEC's objections to a supposedly unacceptably high implementation burden for the proposed floating-point standard were refuted by two researchers from UC Berkeley, who built standard-compliant replacements for the five VAX FPA (floating-point accelerator) boards:&lt;/p&gt;&#xA;&lt;p&gt;George S. Taylor and David Patterson, &amp;quot;VAX hardware for the proposed IEEE floating-point standard.&amp;quot; In: &lt;em&gt;5th IEEE Symposium on Computer Arithmetic&lt;/em&gt;, May 1981, pp. 190-196&lt;/p&gt;&#xA;&lt;p&gt;In the summary line of table 1 in the paper one sees that the total IC count increased from 700 in DEC's original hardware to 870 for the standard compliant replacement. This 25% increase in hardware expenditure was necessary not just to support gradual underflow but &lt;em&gt;all&lt;/em&gt; proposed new features including extended precision and square root capability. The table shows an increase from 35 to 45 ICs for normalization functionality. Table 2 shows that the execution time of the standard-compliant operations provided by the replacement boards is roughly in line with DEC's original FPA, some are a bit slower, others are a bit faster.&lt;/p&gt;&#xA;" OwnerUserId="823" LastEditorUserId="823" LastEditDate="2020-11-12T22:14:58.853" LastActivityDate="2020-11-12T22:14:58.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16875" PostTypeId="2" ParentId="16860" CreationDate="2020-11-12T09:16:54.553" Score="2" Body="&lt;p&gt;Original PSU is &amp;quot;soft&amp;quot;, which means the real voltage depends on current consumption. I.e. 9 volts (nominal) is under the full load. With no load, it could be much higher.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-11-12T09:16:54.553" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16876" PostTypeId="1" AcceptedAnswerId="16879" CreationDate="2020-11-12T09:46:20.827" Score="12" ViewCount="1070" Body="&lt;p&gt;The 8080 starts running code at location 0 on reset. The natural layout of memory on a computer using that CPU is therefore ROM at the bottom of the memory map and RAM at the top.&lt;/p&gt;&#xA;&lt;p&gt;CP/M demands the reverse; it insists that ROM shall be at the top. The rationale is that this allows RAM to be used 'up until when it bumps into the ROM, wherever that happens to be' i.e. the entire address space can be filled with usable RAM right up until it bumps into the ROM that is actually installed in the machine, instead of having to set aside the first X kilobytes for ROM even if not all was actually used. This requires a small amount of extra circuitry to redirect the CPU from bottom to top of the address space on reset.&lt;/p&gt;&#xA;&lt;p&gt;CP/M originated on the Altair 8800, an 8080-based machine.&lt;/p&gt;&#xA;&lt;p&gt;But the Altair was a streamlined, indeed downright bare-bones machine, designed to minimize cost to be affordable to hobbyists in 1975. I would not have expected it to start off with the extra circuitry to redirect the CPU on reset.&lt;/p&gt;&#xA;&lt;p&gt;When and how did the Altair acquire that extra circuitry necessary to accommodate CP/M?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-12T19:58:05.990" Title="When did the Altair move ROM to the top of memory?" Tags="&lt;history&gt;&lt;8080&gt;&lt;cp-m&gt;&lt;altair-8800&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16877" PostTypeId="2" ParentId="3286" CreationDate="2020-11-12T11:38:19.240" Score="4" Body="&lt;p&gt;It crippled DOS quite half-heartedly.&lt;/p&gt;&#xA;&lt;p&gt;As for why, Microsoft has apparently been intending to deprecate DOS (and Win16) in favour of Windows NT for quite some time&lt;sup&gt;0&lt;/sup&gt;, for both technical and business reasons: I estimate it was since at least the inception of Windows 95, and possibly even earlier. They couldn’t afford to drop support for DOS software right away, though; after all, most of the value proposition of DOS (and any operating system ever) came from the programs written for it. If they ceased supporting them, Digital Research for example (or actually Novell at this point, if I remember correctly) would be more than eager to fill the void. So Microsoft painstakingly maintained backwards compatibility with DOS programs, while simultaneously incentivising application vendors to write new software against new, NT-compatible APIs that, of course, only Microsoft provided. They ported the Win32 API, created for Windows NT 3.1, first to DOS-based Windows 3.x (as Win32s) and then to Windows 95. They unified NT and 9x driver architecture with the Windows Driver Model; it’s telling that on the 9x side, the driver providing WDM support was named &lt;code&gt;NTKERN.VXD&lt;/code&gt;. The clearly wanted to move away from DOS to NT, but needed to do so gradually.&lt;/p&gt;&#xA;&lt;p&gt;Maintaining compatibility with DOS meant that Microsoft had to keep the basic architecture that began with Windows 386 Enhanced Mode unchanged: a hypervisor (the Virtual Machine Manager), initially launched in a DOS environment, that takes over the responsibility of managing hardware from DOS drivers, loads its own virtual device drivers (VxDs) and then oversees a number of virtual machines that mimic the DOS ABI and physical hardware just well enough to allow most DOS programs to run unmodified. Any change to this basic design would risk introducing incompatibilities, which Microsoft wanted to avoid. When DOS and the VMM were integrated into a single product, Windows 95 (the VMM being launched automatically at boot time), a number of backwards compatibility features were introduced to keep supporting software that couldn’t run under the supervision of the VMM: single-application mode, an option to boot to a command prompt without launching Windows, and even an option to boot to a previously-installed version of MS-DOS.&lt;/p&gt;&#xA;&lt;p&gt;Millenium in particular was a pretty rushed release; I remember reading somewhere that Microsoft wanted to switch the ‘consumer’ line of Windows to the NT codebase already back then, but apparently they felt they weren’t quite ready yet, so they came up with yet another DOS-based release to fill the gap until the switch was realised with Windows XP. They still could not afford to change the architecture too much; any radical change would risk breaking compatibility with existing software, which this time meant VxDs. So to continue with their deprecation plan, Microsoft simply removed single-application mode and the ability of the DOS component to do anything else but launch the VMM.&lt;/p&gt;&#xA;&lt;p&gt;To restore DOS mode support, it suffices to replace the DOS component of Windows with a more functional version, and remove some other behaviour interfering with it. This requires patching &lt;em&gt;three&lt;/em&gt; files: IO.SYS, COMMAND.COM and REGENV32.EXE.&lt;/p&gt;&#xA;&lt;h2&gt;IO.SYS&lt;/h2&gt;&#xA;&lt;p&gt;IO.SYS is the file containing the DOS kernel; it is the first file loaded and executed, &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15598/15334&quot;&gt;straight from the boot sector&lt;/a&gt;. Unlike Windows 95 and 98 which use the same IO.SYS file in all situations, in Windows Me this file comes in multiple versions, of which I am going to highlight three:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The usual ‘crippled’ version, used to boot from hard disks.&lt;/p&gt;&#xA;&lt;p&gt;This version ignores CONFIG.SYS and AUTOEXEC.BAT completely, won’t boot to a real mode command prompt and will always launch the VMM (i.e. execute &lt;code&gt;%winbootdir%\SYSTEM\VMM32.VXD&lt;/code&gt; instead of &lt;code&gt;%winbootdir%\COMMAND.COM&lt;/code&gt;). Otherwise though, it contains a fully-functional DOS kernel capable of running any DOS program. If one were to replace VMM32.VXD with some other executable, IO.SYS will happily load that instead. (Although it can’t just be the original COMMAND.COM: see below for that.)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The ‘Emergency Boot Disk’ version, used to boot from floppies.&lt;/p&gt;&#xA;&lt;p&gt;This version can &lt;em&gt;only&lt;/em&gt; boot to a command line and cannot be used to boot off a hard disk. It fully supports booting into real mode MS-DOS (including processing CONFIG.SYS and AUTOEXEC.BAT files), as that is its sole purpose: the boot menu (accessible via the &lt;kbd&gt;F8&lt;/kbd&gt; or &lt;kbd&gt;Ctrl&lt;/kbd&gt; key) includes only a single item, ‘Normal’, which behaves just like ‘Command prompt only’ did in earlier versions. To actually start Windows from this version, one has to invoke WIN.COM, either manually or from inside AUTOEXEC.BAT. It is likewise a mostly fully-functional DOS, albeit it lacks serial and parallel port drivers that are present in the hard-disk version; the &lt;code&gt;AUX&lt;/code&gt;, &lt;code&gt;PRN&lt;/code&gt;, &lt;code&gt;COMn&lt;/code&gt; and &lt;code&gt;LPTn&lt;/code&gt; file names are still reserved, but the drivers are vestigial and always return failure.&lt;/p&gt;&#xA;&lt;p&gt;In 32-bit Windows XP and later versions, &lt;code&gt;diskcopy.dll&lt;/code&gt; contains a copy of this version, altered only to remove the Windows Millenium branding in error messages. The un-branding was pretty half-hearted, though: the boot splash logo, for example, is still there, and the &lt;code&gt;VER&lt;/code&gt; command of COMMAND.COM still reports the version as ‘Windows Millenium’.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The version used to boot from the Windows Me installation CD.&lt;/p&gt;&#xA;&lt;p&gt;This version is similar to the previous one: it also prevents booting off a hard disk, but is otherwise the most similar to IO.SYS of earlier Windows versions. It includes the full boot menu and can actually boot Windows by itself (without having COMMAND.COM do it). The serial and parallel port drivers are still non-functional, though.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The patch, applied to either of the latter two versions, simply disables the boot device check and allows hard disk boot to go through. Since &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/3288/15334&quot;&gt;Ross Ridge’s answer&lt;/a&gt; contains a detailed disassembly already, I’m not going to repeat it here; this answer is long enough as it is.&lt;/p&gt;&#xA;&lt;p&gt;There are even &lt;a href=&quot;http://www.multiboot.ru/msdos8.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;reports&lt;/a&gt; of the Windows Me installation CD containing, stashed away in CAB files, a number of alternative versions of this file (and of COMMAND.COM) that don’t require any patching. (They have fully-functional port drivers, too.)&lt;/p&gt;&#xA;&lt;h2&gt;COMMAND.COM&lt;/h2&gt;&#xA;&lt;p&gt;As for COMMAND.COM, the file is identical on the hard disk and the EBD. The problem with this file is that if it detects that DOS has booted from a hard disk, it will refuse to run, unless in it also detects it’s running inside a DOS box. The patch modifies COMMAND.COM so that the result of this check is ignored.&lt;/p&gt;&#xA;&lt;p&gt;The patched code is as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;seg000:2223                 mov     bx, 1&#xA;seg000:2226                 mov     ax, 1683h&#xA;seg000:2229                 int     2Fh&#xA;seg000:222B                 cmp     bx, 1&#xA;seg000:222E                 jnz     short ?ok&#xA;seg000:2230                 mov     ax, 160Eh&#xA;seg000:2233                 mov     dl, 0&#xA;seg000:2235                 mov     bl, 6&#xA;seg000:2237                 int     2Fh&#xA;seg000:2239                 or      ax, ax&#xA;seg000:223B                 jnz     short ?ok&#xA;seg000:223D                 cmp     dl, 3&#xA;seg000:2240                 jnz     short ?ok                 ; ← the patched byte&#xA;seg000:2242                 mov     ax, 160Eh&#xA;seg000:2245                 mov     bl, 3&#xA;seg000:2247                 int     2Fh&#xA;seg000:2249                 mov     dx, ds:?msg_please_reboot&#xA;seg000:224D                 call    ?print_msg&#xA;seg000:2250&#xA;seg000:2250 ?hang:&#xA;seg000:2250                 jmp     short ?hang&#xA;seg000:2252&#xA;seg000:2252 ?ok:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;First, COMMAND.COM checks if it is running inside a Windows DOS box; it does this by calling &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/id/50/45.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;interrupt 0x2f service 0x1683&lt;/a&gt; that returns the virtual machine ID in the BX register. If Windows is not running, the register is unmodified and keeps the value 1 set up before the call; inside a DOS box, the returned value is greater than 1. (The call may also return 1 if COMMAND.COM is running in the system VM; this may happen if &lt;code&gt;%winbootdir%\SYSTEM\KRNL386.EXE&lt;/code&gt; is replaced with a copy of COMMAND.COM, like described in Andrew Schulman’s &lt;em&gt;Unauthorized Windows 95&lt;/em&gt;.) If the value in the register is different from 1, the rest of the code is skipped and COMMAND.COM starts normally. Next, COMMAND.COM uses an undocumented interrupt 0x2f service 0x160e subfunction 6 to determine what drive the system was booted from. If the call is unsupported or returns something other than 3 (drive C), the rest of this code is again skipped. Otherwise, COMMAND.COM uses &lt;a href=&quot;https://archive.fo/2u35H&quot; rel=&quot;nofollow noreferrer&quot;&gt;subfunction 3&lt;/a&gt; to disable the boot splash screen, then it displays a message &amp;quot;Please press CTRL+ALT+DEL to restart your computer&amp;quot; and hangs the system.&lt;/p&gt;&#xA;&lt;p&gt;(Amusingly enough though, COMMAND.COM still contains code that will invoke WIN.COM after processing AUTOEXEC.BAT if &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15907/15334&quot;&gt;instructed so by IO.SYS&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;The patch makes it so that the result of the last of these checks is ignored, and the code that hangs the system is skipped always.&lt;/p&gt;&#xA;&lt;p&gt;Another way to avoid problems with this file is to use an entirely different command interpreter (for example, FreeCOM) by putting a &lt;code&gt;SHELL=&lt;/code&gt; statement in CONFIG.SYS. The ‘hidden CAB file’ version of COMMAND.COM on the installation CD also doesn’t contain this code, so it may be used instead.&lt;/p&gt;&#xA;&lt;h2&gt;REGENV32.EXE&lt;/h2&gt;&#xA;&lt;p&gt;Modifying IO.SYS and COMMAND.COM is enough to obtain a functional DOS mode for Windows Me. To make it actually suitable for daily use, however, another file needs to be modified.&lt;/p&gt;&#xA;&lt;p&gt;While the hard-disk version of IO.SYS will ignore AUTOEXEC.BAT and CONFIG.SYS, the VMM does not &lt;em&gt;quite&lt;/em&gt; ignore them. On bootup, both files are scanned for commands that set environment variables and replaced with dummy versions (CONFIG.SYS is emptied, while AUTOEXEC.BAT is modified to contain only &lt;code&gt;SET&lt;/code&gt; commands). This means that all device drivers and TSRs are going to be removed from CONFIG.SYS and AUTOEXEC.BAT if Windows boots even once. To have an MS-DOS mode suitable for daily use, this mechanism has to be disabled.&lt;/p&gt;&#xA;&lt;p&gt;This task is performed by a program named REGENV32.EXE. The simplest way to disable it is to replace the file names it looks for, so that the actual AUTOEXEC.BAT and CONFIG.SYS files are left untouched. This method is rather crude, but perfectly viable.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;0&lt;/sup&gt; Look for example how Raymond Chen &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20071224-00/?p=24063&quot; rel=&quot;nofollow noreferrer&quot;&gt;refers to DOS support in Windows 95 as a mere backwards-compatibility feature&lt;/a&gt;. This was written in 2007, so obviously there may be some hindsight bias there: perhaps there is a better source for this.&lt;/p&gt;&#xA;&#xA;" OwnerUserId="15334" LastActivityDate="2020-11-12T11:38:19.240" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16878" PostTypeId="2" ParentId="16870" CreationDate="2020-11-12T11:46:11.097" Score="7" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;SWTPC and their 6800 system did sell quite well and over a longer time than all of its competition. The question is rather why do most people only know MITS/Altair, which I'd say is rather a hype in hindsight - plus the same effect that made the PC ubiquitous: Cloning.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Run&lt;/h2&gt;&#xA;&lt;p&gt;When considering 'success' of a single machine or manufacturer it is worth to keep in mind that essential all manufacturers that played a major role during 1976 to 1979 faded rather soon or went belly up straight away. So the success was rather limited.&lt;/p&gt;&#xA;&lt;p&gt;Lets take a look at major player of the first wave:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Micro_Instrumentation_and_Telemetry_Systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;MITS&lt;/a&gt; - Sold to TA in 1979, S100 business ended.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IMS_Associates,_Inc.&quot; rel=&quot;nofollow noreferrer&quot;&gt;IMSAI&lt;/a&gt; - Bankrupt in 1979.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ohio_Scientific&quot; rel=&quot;nofollow noreferrer&quot;&gt;OSI&lt;/a&gt; - Sold in 1981, changed business.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/The_Digital_Group&quot; rel=&quot;nofollow noreferrer&quot;&gt;Digital Group&lt;/a&gt; - Folded in 1979 (with a closet full of cheques :).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/SWTPC&quot; rel=&quot;nofollow noreferrer&quot;&gt;SWTPC&lt;/a&gt; - Made systems until a decade later (1989)!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All of them left, one way or another, the end customer business by around 1980 - all except SWTPC who stayed until way into the 1980s. So not so sure if the SWTPC 6800 can be seen as a failure due company, pricing or alike. Sales wise all these companies were quite comparable. So beside management failure - and there was quite some - a changed market environment put a stop on them - with none being able to take the turn.&lt;/p&gt;&#xA;&lt;p&gt;While making boxes with minimalist computers was a great idea in ~1975, and making them extendable should have made them future proof, it was the all in one, ready to use systems that came after, who took over. Starting with Processor Technology's SOL and the mighty three (Apple II, TRS-80, Commodore PET), ready to use computers were available. All in one and atop your desk. Why buying a bulky box plus a terminal when one can get all in one and at a lower price with better performance?&lt;/p&gt;&#xA;&lt;p&gt;All of the above tried to get into that market, like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Digital Group's &lt;a href=&quot;http://www.bytecollector.com/dg_bytemaster.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bytemaster&lt;/a&gt; - almost a predecessor of schleptops to come, or&lt;/li&gt;&#xA;&lt;li&gt;IMSAI's &lt;a href=&quot;https://classictech.files.wordpress.com/2010/03/1978-imsai-vdp-80-brochure-10-9-78.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;VDP-80&lt;/a&gt; - looks like a Tandy clone&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But most failed - maybe with an exception of OSI with their Superboard/Challenger series.&lt;/p&gt;&#xA;&lt;p&gt;So if MITS failed, why did S100 survive? &lt;strong&gt;Cloning it was.&lt;/strong&gt; With IMSAI being the first and many more to come. The same reason the Apple II had its long enduring success and later the PC. Others were building compatible machines and compatible add ons that enabled an ecosystem independent of the original manufacturer.&lt;/p&gt;&#xA;&lt;p&gt;S100 played an even more unique role here, as it allowed the construction of upper end micro computers from (mostly) standard parts. THey could be equipped with faster CPUs and lots of memory, capable to run (comparable) large applications and even multi user environments - filling a niche right below and up to classic mini computers. This gave an extension in life way past the due date of other systems.&lt;/p&gt;&#xA;&lt;p&gt;Heck, In all the years, I have never found an Altair or IMSAI with the original CPU still installed. All had some kind of Z80 all in one CPU board or even better.&lt;/p&gt;&#xA;&lt;p&gt;On a final note, as the question tries to frame a lets competition between CPUs, let's be serious, the CPU used wasn't really a deciding factor at all. Not back then and not now - except maybe for some very special reasoning - or plain nerdyness. It's price and usability.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="637" LastEditDate="2020-11-12T18:20:23.123" LastActivityDate="2020-11-12T18:20:23.123" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16879" PostTypeId="2" ParentId="16876" CreationDate="2020-11-12T12:26:52.367" Score="23" Body="&lt;p&gt;It didn't move anything. There is no ROM at the beginning of memory. As the system did not include any code in ROM at all by default, ROMs were optional and usually placed at the end of memory. ROM is not needed, because the front panel can be used to halt the CPU, enter a program into RAM without CPU intervention, and command the CPU to execute the code loaded from front panel.&lt;/p&gt;&#xA;&lt;p&gt;So if there is a ROM installed, user must operate the front panel to make the CPU execute commands at the address where ROM is installed.&lt;/p&gt;&#xA;&lt;p&gt;In a system with no ROM at all, user must operate the front panel to load in the code to RAM and to execute it.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2020-11-12T19:58:05.990" LastActivityDate="2020-11-12T19:58:05.990" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16880" PostTypeId="2" ParentId="16860" CreationDate="2020-11-12T15:12:14.253" Score="3" Body="&lt;p&gt;A 48K ZX84 uses between 0.4 and 1Amp (&lt;a href=&quot;https://www.bytedelight.com/?page_id=3610&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.bytedelight.com/?page_id=3610&lt;/a&gt;).&#xA;A 22.5Ohm resistor will simulate a 0.4Amp load. The nearest standard values are 22Ohm or 24Ohm.&lt;/p&gt;&#xA;&lt;p&gt;If you have (or can buy) a resistor of this value (and at least 7 Watt power rating) you can use the resistor as a dummy load to check the PSU.&lt;/p&gt;&#xA;&lt;p&gt;To test on full load you'll need a 9.1Ohm, 16W resistor.&#xA;NB, the resistance values are for 9V, but the power ratings are for 12V.&lt;/p&gt;&#xA;" OwnerUserId="7323" LastEditorUserId="7323" LastEditDate="2020-11-12T15:56:43.053" LastActivityDate="2020-11-12T15:56:43.053" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16881" PostTypeId="2" ParentId="16872" CreationDate="2020-11-12T17:19:32.740" Score="10" Body="&lt;p&gt;Suppose one is considering adding something to the specifications of a car that will, on 1% of units manufactured, extend the time required to perform some fabrication step by ten seconds.  How much should that be expected to affect the cost of a car?&lt;/p&gt;&#xA;&lt;p&gt;If cars are being assembled individually, the extra cost would be trivial.  An average of 0.1 seconds per car.  If cars are being mass-produced on an assembly line, however, the extra cost could be huge.  If each station on the assembly line takes 2.5 minutes, and the extra 10 seconds of labor would have to be added at a stage that already takes 2.45 minutes, it would be necessary to either feed &lt;em&gt;every&lt;/em&gt; car through an extra assembly line stage, or else extend the time for &lt;em&gt;all&lt;/em&gt; assembly-line stages by 7 seconds every time a car required that extra step.&lt;/p&gt;&#xA;&lt;p&gt;When floating-point standards were being written, floating-point operations would involve performing multiple steps performed sequentially on one number at a time.  Mandated support for features like denormals would sometimes necessitate an extra step, but that would only affect the execution time for a few operations, and only by a little bit.&lt;/p&gt;&#xA;&lt;p&gt;Modern CPUs, however, have multiple floating-point units, each of which will be pipelined so that as soon as one section finishes the first step of a floating-point operation on a number, it can start performing the first step of a floating-point operation on another number while a different section performs the second step on the first number.  To make operations flow together efficiently, a scheduling unit will need to be able to predict when the results from each operation will become available.&lt;/p&gt;&#xA;&lt;p&gt;Even if each floating-point operation would require four steps, and the time required to handle a denormalized value would be 10% of the time required to perform one step, handling such values would require either reducing the speed of all floating-point computations by 10%, making floating-point operations take five steps instead of four, or generating a pipeline stall whenever a denormalized number is processed, which would impact not only the particular computation involving the denormalized value, but could delay many other computations on multiple computation units.  If computation units #2 and #3 expect that a certain result will be available from unit #1 at a certain time, but it ends up being late, units #2 and #3 will end up sitting idle for a cycle while they await the result, which will in turn cause any results that are affected by them to end up being late as well.&lt;/p&gt;&#xA;&lt;p&gt;While the marginal cost of supporting denormalized values would have been small when using floating-point hardware that processes one number at a time, they have huge impacts on the performance of heavily pipelined multi-processors.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2020-11-12T17:45:57.940" LastActivityDate="2020-11-12T17:45:57.940" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16882" PostTypeId="1" CreationDate="2020-11-12T18:33:50.683" Score="1" ViewCount="150" Body="&lt;p&gt;I'm trying to work out what is wrong with &lt;a href=&quot;https://oldcrap.org/2018/09/18/commodore-c386sx-lt/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this laptop&lt;/a&gt;. There is a hissing sound coming from the power board mid left. The laptop screen remains off and there is no output to external VGA unless it requires BIOS settings, manual doesn't specify key combination to switch. The hissing sound is also present when either inverter board or lamp is disconnected. The laptop flashes all leds and FDD comes in as it would be POSTting.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/6zwhr5HJJp8&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/6zwhr5HJJp8&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2020-11-13T13:03:57.550" LastActivityDate="2020-11-13T13:03:57.550" Title="Commodore C386SX-LT, what is causing this hissing sound" Tags="&lt;commodore&gt;&lt;repair&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16883" PostTypeId="1" CreationDate="2020-11-12T20:39:57.173" Score="7" ViewCount="451" Body="&lt;p&gt;Example: &lt;a href=&quot;https://youtu.be/E9QJZSBpvg0?t=80&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/E9QJZSBpvg0?t=80&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The road turns not only left and right, like in the classic &lt;em&gt;Pole Position&lt;/em&gt;, but also goes up and down. Other than the cars and the road, there are numerous objects both on and off the road.&lt;/p&gt;&#xA;&lt;p&gt;Obviously, they made some kind of 2D track map, placing out all the road pieces and objects, and the background is just a static image which moves to the left and right (also slightly up and down). And the car you play as is of course going around on this 2D map as a position, checking collisions with other objects and all that usual stuff.&lt;/p&gt;&#xA;&lt;p&gt;But how exactly does the game decide what to paint on the screen? Does the car &amp;quot;cast invisible rays&amp;quot; in all directions facing forward, and then draw the sprites and road pieces if they are &amp;quot;seen&amp;quot; currently, with the right scaling and x/y position on the screen, starting from the back and going forward toward the car so that objects in front are drawn the last?&lt;/p&gt;&#xA;&lt;p&gt;Is that really how it was done? Because it sounds just like &amp;quot;raycasting&amp;quot; to me, a technique used by Wolfenstein 3D, which barely ran on the SNES even in a very crude form. As far as I know, Top Gear didn't use any special chip inside the cartridge, and there were also many other games which probably used the same technique for the SNES.&lt;/p&gt;&#xA;&lt;p&gt;I've always wondered how this was done. The fact that it's an &amp;quot;illusion&amp;quot; rather than &amp;quot;real environments&amp;quot; (as would be the case with actual polygons) makes this and similar games very interesting to me to think about.&lt;/p&gt;&#xA;&lt;p&gt;It seems to me that this would've been very difficult to code and get to run smoothly, but this game is very smooth and fast, and some levels even include what looks like &amp;quot;real 3D&amp;quot; tunnels sometimes. (But they may also be some kind of sprite-trick illusion.)&lt;/p&gt;&#xA;&lt;p&gt;It's easy to say, as a non-programmer, that these old car games just &amp;quot;go on rails&amp;quot; and &amp;quot;give you a headache&amp;quot;. Well, it may be kind of true, but they certainly don't just randomly put sprites on the screen; it's clearly calculated from some kind of rigid math/algorithm, based on a well-defined &amp;quot;world&amp;quot;. I'm wondering how exactly they determined how to place the sprites on the screen so precisely and in such an optimized manner as to run this well on such a (relatively) weak console as the vanilla SNES.&lt;/p&gt;&#xA;&lt;p&gt;If it used &amp;quot;invisible rays&amp;quot;, how many (roughly) of those did it cast per frame? Are we talking 25 or 320 or even more?&lt;/p&gt;&#xA;" OwnerUserId="19880" LastActivityDate="2020-11-12T21:24:32.823" Title="How did old car games, using &quot;sprite illusions&quot;, function on a technical level?" Tags="&lt;programming&gt;&lt;software-development&gt;&lt;snes&gt;&lt;game&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16884" PostTypeId="2" ParentId="16883" CreationDate="2020-11-12T21:04:44.030" Score="4" Body="&lt;p&gt;There's actually two layers of activity going on here.&lt;/p&gt;&#xA;&lt;p&gt;First, &lt;strong&gt;for each scanline&lt;/strong&gt; the machine can choose both which row of pixels to scan out, and where on the row to begin.  This is the basis for drawing the scenery backdrop and the track.  I believe the SNES has specific facilities for doing this which are much more convenient than on the 6845-family CRTC or the VIC-II.&lt;/p&gt;&#xA;&lt;p&gt;The track itself is represented as a series of horizontal and vertical curvature values along its length - more like 1.5D than 2D, a simplification which really speeds up processing.  These are interpolated and fed into lookup tables to determine vertical positions and row offsets per scanline, as well as how much the car should be pushed around (which the player has to counteract by steering).&lt;/p&gt;&#xA;&lt;p&gt;On top of this row of pixels are the &lt;strong&gt;sprites&lt;/strong&gt; representing obstacles and cars.  If you go through the video frame by frame, you'll see that there's not a smooth animation of object size as it gets closer, but that it jumps through just a few sizes, and that the cars are only drawn from behind and from a rear quarter view.  The motion of most objects is fast enough that it isn't really obvious.&lt;/p&gt;&#xA;&lt;p&gt;The obstacles are listed in distance-along-track order, so the game only checks for the next one in the distance to come into view, and discards the ones that have fallen behind.  There is thus a contiguous list of objects that are rendered every frame by passing them to the sprite engine.&lt;/p&gt;&#xA;&lt;p&gt;Each object (obstacle or car) is simply placed at a height and horizontal offset corresponding to that of the track at the correct distance ahead, and the video hardware overlays them on the background pixels.  There are no rays to cast, just a simple calculation per object.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-11-12T21:24:32.823" LastActivityDate="2020-11-12T21:24:32.823" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16885" PostTypeId="2" ParentId="16617" CreationDate="2020-11-12T21:42:19.870" Score="2" Body="&lt;p&gt;Some points that came in as comments support that this is likely due to a &amp;quot;just in case&amp;quot; design that would allow for heat sinking the packages through the motherboard if the need should arise.&lt;/p&gt;&#xA;&lt;p&gt;Presumably the additional cost of drilling the unused holes is minimal, whereas unnecessarily screwing down the packages, probably adding manual steps to the manufacturing process, would add significantly to the cost.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-11-12T22:45:59.010" LastActivityDate="2020-11-12T22:45:59.010" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16886" PostTypeId="2" ParentId="16882" CreationDate="2020-11-12T22:40:27.123" Score="3" Body="&lt;p&gt;It sounds a bit like &amp;quot;coil whine&amp;quot;, i.e. high frequency vibrations in a transformer or coil caused by fluctuation in the magnetic field they maintain.&lt;/p&gt;&#xA;&lt;p&gt;That in itself does not necessarily indicate a failure, but sometimes you can hear this type of sound from switchers straining to maintain the desired output voltage, maybe due to some component failing shorted.&lt;/p&gt;&#xA;&lt;p&gt;Without knowing specifics of this model, the display may need elevated voltages and there could be a boost converter hard at work.&lt;/p&gt;&#xA;&lt;p&gt;This does not explain the missing external video output except if something is shorted and dragging down the supply in general. Did you check voltages?&lt;/p&gt;&#xA;" OwnerUserId="6576" LastActivityDate="2020-11-12T22:40:27.123" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16887" PostTypeId="2" ParentId="16882" CreationDate="2020-11-13T08:48:28.363" Score="2" Body="&lt;p&gt;Retrograde's suggestion is most likely the cause... On the video it looks like the sound comes from LCD so my bet its the high voltage supply in the link of yous its called &lt;code&gt;BACKLIGHT POWER INVERTER MODULE&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZpQ5L.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZpQ5L.png&quot; alt=&quot;backlight inverter&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are many possible reasons for this like:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;failing caps (electrolytes) of switching power supply / inverter&lt;/p&gt;&#xA;&lt;p&gt;I see two on the image the black tall cylinders with aluminium top check if they are not slightly lose (can be turn by +/-5 deg radially without bending the pins) or the top is not flat anymore (if it is spherically convex) then it means the cap is bad and need to be replaced.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;disconnected load (backlight)&lt;/p&gt;&#xA;&lt;p&gt;sometimes the connector can get lose and disconnect&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;short circuited load (backlight)&lt;/p&gt;&#xA;&lt;p&gt;I saw once (also on laptop) that the high voltage cables where isolated just by tape which in time unstack and the cables short circuited them self after twisting.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;faulty backlight lamp&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;My bet its one of the first two reasons. These converters are usually located on one of the edges of the LCD so try to verify its the case... From the images it looks like its the right vertical edge of your LCD so check if the sound comes from that area:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fvrA7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fvrA7.png&quot; alt=&quot;location&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2020-11-13T09:02:27.307" LastActivityDate="2020-11-13T09:02:27.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16888" PostTypeId="2" ParentId="16863" CreationDate="2020-11-13T09:56:00.973" Score="16" Body="&lt;h3&gt;Yes, because it did not provide the necessary connections for wider use&lt;/h3&gt;&#xA;&lt;p&gt;AGP had asymmetric bandwidths.  It was very much faster in transferring data from the CPU to the graphics card.  For transferring data back from the graphics card to the CPU though, it was no faster than a PCI slot.&lt;/p&gt;&#xA;&lt;p&gt;For graphics cards, this is exactly what you need.  You typically do not need to read much data back from the graphics card.  Most other applications need symmetric bandwidths in both directions, and AGP simply was not designed for this.&lt;/p&gt;&#xA;&lt;p&gt;This was a major obstacle to graphics cards being useable for more general processing, initially with more custom code and later with &lt;a href=&quot;https://en.wikipedia.org/wiki/CUDA&quot; rel=&quot;noreferrer&quot;&gt;CUDA&lt;/a&gt;.  Whilst input data could be transferred more quickly, retrieving output data was no faster than a regular PCI card.  Since motherboards with more than one AGP card were &lt;em&gt;very&lt;/em&gt; rare, there was no incentive for manufacturers to use AGP.&lt;/p&gt;&#xA;&lt;p&gt;Lessons learnt from AGP are why PCIe was developed, because the industry realised the missed potential of needing a faster bus system which could be used by everyone.&lt;/p&gt;&#xA;" OwnerUserId="6749" LastActivityDate="2020-11-13T09:56:00.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16889" PostTypeId="1" AcceptedAnswerId="16890" CreationDate="2020-11-13T10:29:21.880" Score="4" ViewCount="351" Body="&lt;p&gt;I am looking at &lt;a href=&quot;https://www.autometer.de/unix4fun/z80pack/ftp/altair/tinybasic-2.0.hex&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Tiny BASIC dump&lt;/a&gt; which seems to consist of two sections, the first being a list of symbol addresses, and the second one containing Intel Hexadecimal records with a leading space:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; 001 BLOCK01 0&#xA; 002 A     0007H&#xA; 003 ABS   0450H&#xA;...&#xA; 233 BLOCK31 0&#xA;$&#xA; :100000003100203EFFC34506E3EFBEC368003E0D4E&#xA;...&#xA; $&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What is the name of this file format, and what modern tools can I use to convert it into a binary image?&lt;/p&gt;&#xA;&lt;p&gt;(of course, one way is to process it textually: keep only lines &lt;code&gt;^ *:&lt;/code&gt; and then delete &lt;code&gt;^ *&lt;/code&gt;, resulting in a normal IHEX file; but I would prefer something that is more robust.)&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2020-11-15T15:48:27.837" Title="What is this Intel Hexadecimal-like file format in this Tiny BASIC dump?" Tags="&lt;file-format&gt;&lt;identify-this-software&gt;&lt;dump&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16890" PostTypeId="2" ParentId="16889" CreationDate="2020-11-13T10:40:11.803" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What is the name of this file format,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, it's called &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_HEX&quot; rel=&quot;noreferrer&quot;&gt;Intel-Hex-Format&lt;/a&gt; :))&lt;/p&gt;&#xA;&lt;p&gt;Or are you asking about the file the link points to (tinybasic-2.0.hex) ?&lt;/p&gt;&#xA;&lt;p&gt;That's no file format. It's simply the recording of a (terminal) output (*1) while one has first dumped the symbol list followed by the the Intel-Hex file.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and what modern tools can I use to convert it into a binary image?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Since it's no format, there won't be tools. Simply use your prefered editor ac cut everything above and below the hex file dump.&lt;/p&gt;&#xA;&lt;p&gt;Working with dumping was, BTW, standard practice to create a loader tape - simply dumped the file onto a paper tape punch. Then loading everything preceding the : was ignored anyway.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - That's why the prompt &lt;code&gt;$&lt;/code&gt; is visible, but no command entered.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-11-13T10:40:11.803" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16891" PostTypeId="1" AcceptedAnswerId="16896" CreationDate="2020-11-13T11:39:00.597" Score="12" ViewCount="781" Body="&lt;p&gt;Checking the MS-DOS interrupt list we see &lt;code&gt;INT 0x20&lt;/code&gt;  &amp;quot;Terminate the program&amp;quot; (see &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS_API&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/DOS_API&lt;/a&gt;) but if we check the same page we see &lt;code&gt;INT 0x21&lt;/code&gt; with function &lt;code&gt;0x4C&lt;/code&gt; will &amp;quot;Terminate with return code&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;AFAIK, in COM programs is enough to use the former when terminating the program but for EXE programs is required to use the later (I learnt this after a while of reading documentation and getting my EXE files stuck).&lt;/p&gt;&#xA;&lt;p&gt;My question is, does this mean COM programs never return an exit code and they are needed only for EXE programs in classic MS-DOS?&lt;/p&gt;&#xA;" OwnerUserId="19884" LastEditorUserId="15334" LastEditDate="2020-11-13T17:03:24.980" LastActivityDate="2021-02-02T15:08:25.487" Title="Difference between INT 0x20 and INT 0x21 (0x4C)?" Tags="&lt;ms-dos&gt;&lt;assembly&gt;&lt;x86&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16892" PostTypeId="1" AcceptedAnswerId="16895" CreationDate="2020-11-13T12:12:39.927" Score="22" ViewCount="4525" Body="&lt;p&gt;Nowadays floating point is usually either 32 or 64 bits, sometimes 16, occasionally 128. But of course, the Basic interpreters on the 8-bit machines, having to implement floating point in software anyway, on CPUs that did things 8 or at most 16 bits at a time, were not obliged to stick to such power of 2 formats.&lt;/p&gt;&#xA;&lt;p&gt;So I have never been particularly surprised that the old Commodore machines of my youth used 40-bit floating point. Nor would it surprise me to learn that other machines whose Basic was also licensed from Microsoft, such as the Apple II, did likewise. Why 40 bits? Well, everyone was still figuring things out as they went along. For all I know, maybe Bill Gates just stuck his finger into the air and picked a number at random. It would not be unreasonable, given the lack of hard data and the need to get things done in a hurry when he had told MITS they already had a Basic interpreter to sell.&lt;/p&gt;&#xA;&lt;p&gt;But the BBC Micro and ZX Spectrum Basic interpreters were each independently written. And a quick Google search confirms they both used 40-bit floating point.&lt;/p&gt;&#xA;&lt;p&gt;Huh? Why? It's not a power of 2, not a nice round number, doesn't match any particular requirement or standard that I know of, is neither the largest nor smallest reasonably possible value. What's going on? Did Microsoft choose a number at random and everyone else just copy them, or is there something else I am missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-04-29T19:43:34.087" Title="Why did 8-bit Basic use 40-bit floating point?" Tags="&lt;history&gt;&lt;basic&gt;&lt;floating-point&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="8" CommentCount="9" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16893" PostTypeId="1" AcceptedAnswerId="16904" CreationDate="2020-11-13T12:14:29.843" Score="5" ViewCount="345" Body="&lt;p&gt;I'd like to identify a game I played on my first PC (x386, 2MB RAM) which I built in 1991. It was also one of the first, if not &lt;em&gt;the&lt;/em&gt; first game I ever played on a PC.&lt;/p&gt;&#xA;&lt;p&gt;The game was heavily, and I mean &lt;em&gt;heavily&lt;/em&gt; based on &lt;em&gt;Blade Runner&lt;/em&gt;. It was set in a futuristic city that was a mix of US and oriental culture. Set at night, lots of neon signs. I remember the character you played was some kind of cop, and I think there was a scene where you saw a very Bladerunneresque flying car.&lt;/p&gt;&#xA;&lt;p&gt;It was an adventure game, I think it was a 'point and click' interface, but the screen stayed static and the characters didn't move around like in the 'Monkey Island' or other SCUMM games - I think you just received text dialogue in windows as you clicked on things. I remember each location as a pre-rendered image which you interacted with in order to progress. The graphics were fairly low-res, but nowhere near as cartoonish as the SCUMM games. You could travel freely between locations but I think the story was quite linear. I believe the storyline was that you were a cop trying to solve a murder, but I can't be sure.&lt;/p&gt;&#xA;&lt;p&gt;That's all I can recall. It definitely wasn't an official &lt;em&gt;Blade Runner&lt;/em&gt; game but the likeness was deliberate and obvious. I don't recall anything about the packaging, I worked in a computer shop at the time and my boss let me take games home to 'try', but only the disks. I have tried Googling of course, but the mention of 'Blade Runner' brings up so many pages about official Blade Runner games. I'd be really pleased if anyone can recall the title of this game so I could research it properly.&lt;/p&gt;&#xA;&lt;h1&gt;Games it definitely &lt;em&gt;isn't&lt;/em&gt;:&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;Geisha&lt;/em&gt; - this doesn't have the cop / mystery elements. I've seen screenshots, it isn't this game.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Beneath A Steel Sky&lt;/em&gt; - this wasn't released until 1994, and in any case, this used the SCUMM interface which definitely was not this game's style.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Edit: I originally wrote that the game featured Japanese culture, specifically Geishas. I also remembered a scene involving taking a photograph through a telephoto lens. I now believe I remembered these two elements from the game &lt;em&gt;Geisha&lt;/em&gt; on the Amiga, which I didn't play but may have seen demoed as I worked in a computer game store from 1991-1992.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10492" LastEditorUserId="10492" LastEditDate="2020-11-15T16:22:49.610" LastActivityDate="2020-11-17T12:31:27.553" Title="MS-DOS adventure game heavily based on Blade Runner, circa 1991" Tags="&lt;identify-this-game&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16894" PostTypeId="2" ParentId="16892" CreationDate="2020-11-13T12:43:41.350" Score="17" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;It's not a power of 2, not a nice round number&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But it is :-) 1 byte exponent (with an assumed 1 bit always equal to one), 4 bytes mantissa, at least on the ZX Spectrum – see the &lt;a href=&quot;https://worldofspectrum.org/ZXBasicManual/zxmanchap24.html&quot; rel=&quot;noreferrer&quot;&gt;ZX Spectrum manual&lt;/a&gt;. And since the mantissa and exponent are processed individually, the mantissa is a nice power of 2. Granted, this is less of an advantage without full 32 bit registers, but still.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2020-11-13T12:43:41.350" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16895" PostTypeId="2" ParentId="16892" CreationDate="2020-11-13T12:52:36.253" Score="42" Body="&lt;p&gt;The floating-point routines for Microsoft BASIC were written by Monte Davidoff in 1975, originally for the Altair, which used an Intel 8080 CPU.  The source code had been lost for years, until Bill Gates’ former tutor discovered a copy in 2000 &lt;a href=&quot;https://web.archive.org/web/20020102173701/http://www.rjh.org.uk/altair/ian.htm&quot; rel=&quot;noreferrer&quot;&gt;that had fallen behind his file cabinet two decades before.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Davidoff needed to invent his own floating-point format, and came up with: 8 exponent bits (bias-128), 1 sign bit, and 23 normalized mantissa bits.  This was similar to DEC VAX single-precision floating-point numbers, but laid out in a more logical order.&lt;/p&gt;&#xA;&lt;p&gt;In 1976, Gates, Allen and Davidoff wrote a 6502 version of their BASIC.  &lt;a href=&quot;https://www.pagetable.com/?p=46&quot; rel=&quot;noreferrer&quot;&gt;When they were unable to fit it into 8K,&lt;/a&gt; they decided to put it in a larger ROM chip and add more features, including an “extended” 40-bit floating-point format.  They chose to keep eight-bit exponents on the 8-bit CPU and extend the precision of the mantissa.  Although Wozniak had already written Integer BASIC and was at that time working on a floating-point BASIC, he was also working on other projects at the same time.  Steve Jobs felt it was taking too long and bought Microsoft’s instead. In &lt;a href=&quot;http://www.woz.org/letters/apple-basic/&quot; rel=&quot;noreferrer&quot;&gt;Woz’s recollection:&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My design style is to spend quite a bit of time thinking out every angle in my head and in rough sketches, and then to start coding. The first results aren’t visible right away, but at the end they come up very quickly. Steve Jobs got concerned that I wasn’t making enough progress. He even accused me of slacking and coming in at 10 AM in one staff meeting, but I pointed out that I’d been laying out our floppy PC Card [...] and that I’d been leaving at 4 AM every morning, long after even the Houston brothers, Dick and Cliff, had left.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Microsoft’s MBASIC for CP/M and its GWBASIC for MS-DOS were originally based on its 8080 BASIC for Altair, and used its 32-bit format at first, but went through several floating-point formats (including packed BCD in the Xenix version) before switching to IEEE format in GWBASIC 4.&lt;/p&gt;&#xA;&lt;p&gt;When Sophie Wilson wrote the original BBC Micro BASIC for the 6502, and Richard T. Russell ported &lt;a href=&quot;https://github.com/davidgiven/cpmish/blob/master/third_party/bbcbasic/fpp.z80&quot; rel=&quot;noreferrer&quot;&gt;it to the Z80&lt;/a&gt; in 1986, and later to several other machines (crediting Wilson as “the genius” behind the BBC Micro BASIC), they gave its “reals” the same range as Microsoft’s extended floating-point numbers. (Wilson’s previous BASIC, for the Acorn Atom, did not support floating-point.) &lt;a href=&quot;http://www.bbcbasic.co.uk/bbcbasic/history.html&quot; rel=&quot;noreferrer&quot;&gt;In Russell’s words,&lt;/a&gt; “What we now know as BBC BASIC arose as the result of a compromise between what Acorn were already planning to produce and the BBC's desire for a ‘standard’ language. Programs written for Microsoft BASIC required little or no alteration to run on BBC BASIC, but programs written specifically for BBC BASIC could take advantage of its more sophisticated features.”  BASIC VI for the ARM replaced the earlier number formats, which would have required unaligned memory access on a 32-bit RISC system, with 32-bit integers and 64-bit reals.&lt;/p&gt;&#xA;&lt;p&gt;The Spectrum BASIC was an extension of the ZX81 BASIC by Steven Vickers, which was written at the same time as BBC BASIC.  Vickers later said, “The only firm brief for the [ZX]81 was that the [ZX]80’s math package must be improved,” so it is likely that Sinclair wanted it to be able to match the floating-point precision of its competitors, such as the TRS-80 with its Microsoft BASIC.  Several other British computers, including Sinclair’s notebooks in 1988, used a BASIC by Russell derived from BBC Basic.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2020-11-13T23:16:22.353" LastActivityDate="2020-11-13T23:16:22.353" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16896" PostTypeId="2" ParentId="16891" CreationDate="2020-11-13T13:00:25.450" Score="18" Body="&lt;p&gt;The difference is that the latter appeared in DOS 2.0.&lt;/p&gt;&#xA;&lt;p&gt;MS-DOS 1.x was pretty much a rebranded version of Seattle Computer Products’ 86-DOS (initially named QDOS), which in turn was heavily inspired by CP/M. One of the design goals of 86-DOS has been to maintain a certain level of compatibility with CP/M-80: specifically, to be able to port CP/M software to DOS by translating 8080 assembly code into 8086/8088 assembly code with minimal amount of patching. Intel took care of translating the instructions themselves in their 8086 design; the part that remained was to supply a compatible operating system interface.&lt;/p&gt;&#xA;&lt;p&gt;In CP/M-80, exiting the program was achieved by jumping to address zero, at the very beginning of the address space; this lay in the so-called zero page, where CP/M maintained an interface to the operating system. Address zero contained an instruction which jumped to the appropriate CP/M system call entry point which terminated the program. The equivalent data structure in DOS, the Program Segment Prefix, &lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20200309-00/?p=103547&quot; rel=&quot;nofollow noreferrer&quot;&gt;contains an &lt;code&gt;int 0x20&lt;/code&gt; instruction at offset zero&lt;/a&gt;; with that instruction in place, jumping to offset 0 in the program’s segment exited the program just like jumping to absolute address 0 did in CP/M. In either operating system, the same entry point could be reached just by executing the return instruction; this is because the stack was initialised to contain a zero word at the bottom, so that returning would jump to that same zero address.&lt;sup&gt;0&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;With MS-DOS version 2.0, Microsoft started drawing a lot of design inspiration from Unix, &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/04a3d20ff411409ab98474892b2bb1713bde0f7f/v2.0/source/XENIX.ASM#L21&quot; rel=&quot;nofollow noreferrer&quot;&gt;specifically Xenix&lt;/a&gt;: they added features like hierarchical directory structure, file handles, I/O redirection, &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/16034/15334&quot;&gt;environment variables&lt;/a&gt; and process exit codes. Since the CP/M-style exit call did not accept an exit code, a new system call had to be created: that system call is interrupt 0x21 function 0x4c.&lt;sup&gt;1&lt;/sup&gt; The old exit call was of course kept, and made to return an exit code of zero.&lt;/p&gt;&#xA;&lt;p&gt;With the right DOS version, either call can theoretically be used in either type of executable.&lt;sup&gt;2&lt;/sup&gt; The only restriction is that &lt;a href=&quot;http://delorie.com/djgpp/doc/rbinter/id/82/24.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the &lt;code&gt;int 0x20&lt;/code&gt; call&lt;/a&gt; requires that the &lt;code&gt;cs&lt;/code&gt; register point to the Program Segment Prefix. This is set up on startup in &lt;code&gt;.COM&lt;/code&gt; files (and usually maintained afterwards), but usually not in MZ (‘&lt;code&gt;.EXE&lt;/code&gt;’) executables; in multi-segment executables this requirement in practice &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/072/Q72848/&quot; rel=&quot;nofollow noreferrer&quot;&gt;forces the program to perform this interrupt call by jumping to the PSP&lt;/a&gt;. The &lt;a href=&quot;http://delorie.com/djgpp/doc/rbinter/id/86/29.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;interrupt 0x21 function 0x4c&lt;/a&gt; call, on the other hand, has no such requirement. Perhaps this difference is why your attempts to use the former system call failed.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;0&lt;/sup&gt; The exit function was also available through CP/M’s generic system call mechanism, &lt;a href=&quot;https://www.seasip.info/Cpm/bdos.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;call 5&lt;/code&gt;&lt;/a&gt;, as system call number zero. The preferred system call interface on DOS was interrupt 0x21, but the &lt;code&gt;call 5&lt;/code&gt; interface was also supported by DOS, later becoming the source of &lt;a href=&quot;http://www.os2museum.com/wp/?s=%22call+5%22&quot; rel=&quot;nofollow noreferrer&quot;&gt;endless headaches&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; It was introduced along with a pair of other process-management system calls: &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/04a3d20ff411409ab98474892b2bb1713bde0f7f/v2.0/source/MSCODE.ASM#L374-L376&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;EXEC&amp;quot; (0x4b) and &amp;quot;WAIT&amp;quot; (0x4d)&lt;/a&gt;; they enabled any program to &lt;a href=&quot;http://delorie.com/djgpp/doc/rbinter/id/51/29.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;launch executable files&lt;/a&gt; and &lt;a href=&quot;http://delorie.com/djgpp/doc/rbinter/id/88/29.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;check the exit code afterwards&lt;/a&gt;. Before DOS 2.0, loading programs was actually the responsibility of the &lt;em&gt;shell&lt;/em&gt;, COMMAND.COM; any other program had to implement executable loading on its own.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; DOS 1.x, on the other hand, &lt;a href=&quot;https://github.com/microsoft/MS-DOS/blob/04a3d20ff411409ab98474892b2bb1713bde0f7f/v1.25/source/COMMAND.ASM#L966-L968&quot; rel=&quot;nofollow noreferrer&quot;&gt;did support &lt;code&gt;.EXE&lt;/code&gt; files&lt;/a&gt;, but of course only had the CP/M-style exit call, so it obviously had to work with those.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-02T15:08:25.487" LastActivityDate="2021-02-02T15:08:25.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16897" PostTypeId="1" CreationDate="2020-11-13T13:11:47.850" Score="2" ViewCount="221" Body="&lt;p&gt;&lt;sup&gt;I asked this question on &lt;a href=&quot;https://superuser.com/questions/1601746/are-the-control-characters-any-useful-nowadays&quot;&gt;Super User&lt;/a&gt;, but the community at the site told me to redirect to this site. If this is again an &lt;a href=&quot;https://retrocomputing.stackexchange.com/help/on-topic&quot;&gt;off-topic question&lt;/a&gt;, do not blame me please!&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;I am sorry if the control characters are actually super useful nowadays; I am not a computer technician.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am studying Unicode characters. More specifically, I am learning when and how to use them. But the control codepoints keep bugging me.&lt;/p&gt;&#xA;&lt;h3&gt;What are even contr...?&lt;/h3&gt;&#xA;&lt;p&gt;By &amp;quot;Control characters&amp;quot;, I mean the &lt;a href=&quot;https://en.wikipedia.org/wiki/C0_and_C1_control_codes&quot; rel=&quot;nofollow noreferrer&quot;&gt;set of valid ASCII/Unicode characters&lt;/a&gt; which do not render anything, but instead were (&lt;em&gt;or are&lt;/em&gt;) used to control the host device.&lt;/p&gt;&#xA;&lt;h1&gt;So what?&lt;/h1&gt;&#xA;&lt;p&gt;Indeed, some control characters, like the Linefeed (LF) and Tab (HT) are still used today commonly for organizing text, but what about the others? Where can I use the Device Control 3 (DC3)? Can I even use the Negative Acknowledgment (NAK)?&lt;/p&gt;&#xA;&lt;p&gt;It would be great if someone can write a detailed usage definition for each control character (If it &lt;em&gt;is&lt;/em&gt; useful nowadays).&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="19885" LastActivityDate="2020-11-13T17:06:38.357" Title="Are the control characters any useful nowadays?" Tags="&lt;ascii&gt;&lt;unicode&gt;" AnswerCount="3" CommentCount="7" ClosedDate="2020-11-13T17:13:34.713" ContentLicense="CC BY-SA 4.0" />
  <row Id="16898" PostTypeId="2" ParentId="16889" CreationDate="2020-11-13T13:54:34.343" Score="1" Body="&lt;p&gt;Simply use any text editor to remove everything but the HEX lines (started by a colon character &amp;quot;:&amp;quot;). This is how to get a pure HEX file. Colon has to be the very first character on each row, so remove the leading spaces too.&lt;/p&gt;&#xA;&lt;p&gt;Step 2 - use e.g. ASM80 Tools &lt;a href=&quot;https://www.asm80.com/tools/index.html#/hex2bin&quot; rel=&quot;nofollow noreferrer&quot;&gt;for HEX to BIN conversion&lt;/a&gt; to convert it to binary image.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-11-13T13:54:34.343" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16899" PostTypeId="2" ParentId="16892" CreationDate="2020-11-13T13:55:20.243" Score="22" Body="&lt;p&gt;Using a 32 bit signed mantissa and 8 bit unsigned exponent has one major advantage: You can re-use 32 bit integer math functions for operating on the mantissa.&lt;/p&gt;&#xA;&lt;p&gt;That re-use saves memory. It may even be possible to optimize the 8 bit exponent maths if character maths are supported, as characters are typically stored as 8 bit unsigned ASCII.&lt;/p&gt;&#xA;&lt;p&gt;The original Microsoft BASIC was intended to be 8k, but eventually was expanded to 16k due to lack of space. Before that decision was made it would have made sense to try to save as much space as possible, so it's easy to imagine how an 8/32 bit floating point format was chosen.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-11-13T13:55:20.243" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16900" PostTypeId="1" AcceptedAnswerId="16928" CreationDate="2020-11-13T13:57:51.337" Score="12" ViewCount="334" Body="&lt;p&gt;The Z80 was (except for a handful of tiny incompatibilities) a superset of the 8080, adding a number of new instructions as well as the alternate register set. It seems therefore that it must have at least slightly superior code density.&lt;/p&gt;&#xA;&lt;p&gt;Has anyone ever, by looking at 8080 code modified to take advantage of the Z80, or just estimating based on familiarity with both instruction sets, or otherwise, come up with any measured or estimated figure for just how much better the code density was on the Z80?&lt;/p&gt;&#xA;&lt;p&gt;The previous question on code density of 8-bit microprocessors links to a paper that gives figures for the 6502 and Z80, but not for the 8080.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2020-11-13T14:07:24.433" LastActivityDate="2020-11-15T23:08:32.247" Title="Ratio of code density between 8080 and Z80" Tags="&lt;z80&gt;&lt;instruction-set&gt;&lt;8080&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16901" PostTypeId="2" ParentId="16897" CreationDate="2020-11-13T15:01:01.193" Score="3" Body="&lt;p&gt;I posit that the original use of control characters was strictly for &lt;strong&gt;non-textual&lt;/strong&gt; usage. In other words, things that &lt;strong&gt;don't print&lt;/strong&gt;. In ye olden times, that was the primary way to communicate anything other than actual text to:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Terminals - initially printing, e.g., ASR-33, and later video terminals, e.g., ADM-3A, VT-100, etc.&lt;/li&gt;&#xA;&lt;li&gt;Printers&lt;/li&gt;&#xA;&lt;li&gt;Modems - to &lt;em&gt;control&lt;/em&gt; the modems, not just to pass text through to terminals &amp;amp; printers&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Any device with no capability for out-of-band control&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The last is the key. In-band = control using the same transmission of data (typically, but not always, 8-bit bytes) used for the content. Out-of-band = control using some separate mechanism.&lt;/p&gt;&#xA;&lt;p&gt;A typical example of out-of-band control is disk drives. An &lt;a href=&quot;https://en.wikipedia.org/wiki/ST506/ST412&quot; rel=&quot;nofollow noreferrer&quot;&gt;ST-506&lt;/a&gt; drive had 3 cables: power, data, control. The drive would know when to read vs. write vs. move not based on the data cable but based on the control cable. Well, a little more complicated than that, but the point is that it wasn't arbitrary characters in the data stream that determined when to perform different actions.&lt;/p&gt;&#xA;&lt;p&gt;In-band control is a must when you only have one transmission path, unless your data is encapsulated inside something else, &lt;em&gt;a packet&lt;/em&gt;. In the olden days, terminals, printers and similar devices were often a 3-wire system - send, receive, ground. Sometimes they would include hardware handshaking, but that was typically limited to start/stop and possibly answer/hang up (e.g., CD on a modem) or equivalent. Additional control, such as when to move the platen (CR, LF, VT), ring a bell (BEL), or sometimes more complex operations, were sent as Control Codes. Any other method might work &lt;em&gt;locally&lt;/em&gt;, but would not work with a remote terminal or printer, transmitted over a modem, etc.&lt;/p&gt;&#xA;&lt;p&gt;So what has survived?&lt;/p&gt;&#xA;&lt;p&gt;The obvious ones are CR, LF and TAB. BEL is also still supported in many devices. But there is one more that is still very often used: ESC. While the average user never sees it, a typical non-GDI (don't get me started about GDI printers...) printer relies heavily on Escape Codes - traditionally ESC followed by a manufacturer-specific sequence of text. &lt;a href=&quot;https://en.wikipedia.org/wiki/Printer_Command_Language&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCL&lt;/a&gt; is still huge, in almost every non-GDI laser or inkjet printer, but there are other variations still commonly used in receipt printers, label printers and other devices.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_escape_code&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANSI escape codes&lt;/a&gt; are supported by many common terminal programs &amp;amp; operating system shells, even though the transmission process now is almost always either a directly attached device (memory mapped screen/video card) or a TCP/IP network connection.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, codes related to flow control and some other actions are now handled out-of-band. Typically this is by encapsulating the textual data inside a packet, with transmission issues handled outside the packets (e.g., TCP/IP transmission) or other &amp;quot;control&amp;quot; information handled in a defined structured manner &lt;em&gt;inside&lt;/em&gt; the packet. While out-of-band transmission of control information does complicate the process a bit, requiring either a second transmission path or packets of some sort, it allows for transmission of &lt;em&gt;any&lt;/em&gt; data string, which was a real issue in the early days. For example, if you wanted to control a Hayes-compatible modem while connected, you would pause for a short time, send +++, then pause again, and the modem would switch from transmit/receive modem to control mode. Great if you wanted to do that. But a potential path for problems if you didn't want to do that. Murphy's Law says that any arbitrary string of characters + timing &lt;strong&gt;will&lt;/strong&gt; occur when you least expect it.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2020-11-13T15:01:01.193" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16902" PostTypeId="2" ParentId="16892" CreationDate="2020-11-13T15:02:22.897" Score="8" Body="&lt;p&gt;32-bit floating point has 23 bits of mantissa (8 used by exponent and 1 used by sign). This gives only 6 significant decimal digits of precision, possibly up to 9 but not with guaranteed precision. It is enough precision to claim you support floating point maths, but it isn't very much precision for some scientific needs.&lt;/p&gt;&#xA;&lt;p&gt;I suspect they wanted to provide more significant decimal digits of precision but felt 64-bits was overkill, particularly on an 8-bit system. 40-bits gives 9 significant decimal digits of precision without taking too much more space.&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Binary_Format&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;, upon porting MS BASIC to the 6502, more than 8K of space was required. Now having 12K of space, there was room to expand to 40-bit FP.&lt;/p&gt;&#xA;&lt;p&gt;Many earlier versions of Microsoft BASICs have only 32-bit FP, even the IBM PC ROM BASIC has 32-bit FP, but later MS BASICs typically have 40-bit FP. The MS BASIC on the Tandy 100/102 and MSX BASIC have 64-bit FP. Kyan Pascal for the C64 has 64-bit FP.&lt;/p&gt;&#xA;&lt;p&gt;Atari BASIC has 48-bit FP but they are stored as BCD which causes some precision loss. Microsoft BASIC for the Atari has both 32-bit and 64-bit FP, allowing the programmer to choose between speed and precision as their needs require.&lt;/p&gt;&#xA;&lt;p&gt;The PROMAL programming language for the C64, IBM PC and Apple II has 48-bit FP.&lt;/p&gt;&#xA;&lt;p&gt;Nearly every 8-bit LOGO implementation has 32-bit FP, but the Atari version uses the 48-bit BCD FP routines in the OS ROM.&lt;/p&gt;&#xA;&lt;p&gt;DEC's FOCAL-71 has 48 bit FP but as it is a 12-bit system, it is split into 36-bits for the mantissa and 12-bits for the exponent.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2020-11-13T15:02:22.897" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16903" PostTypeId="2" ParentId="16893" CreationDate="2020-11-13T15:02:45.010" Score="1" Body="&lt;p&gt;Some details aren’t exactly the same but it really reminds me of &lt;a href=&quot;https://en.wikipedia.org/wiki/Martian_Memorandum&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tex Murphy: Martian Memorandum&lt;/a&gt;. It’s still available on &lt;a href=&quot;https://www.gog.com/game/tex_murphy_1_2&quot; rel=&quot;nofollow noreferrer&quot;&gt;GOG&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10204" LastActivityDate="2020-11-13T15:02:45.010" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16904" PostTypeId="2" ParentId="16893" CreationDate="2020-11-13T15:28:22.823" Score="9" Body="&lt;p&gt;I suspect this could be &lt;a href=&quot;https://www.mobygames.com/game/dos/rise-of-the-dragon&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Rise of the Dragon&lt;/em&gt;&lt;/a&gt;. It was released in 1990 for PCs (and several other platforms), and is a point-and-click adventure game with a first-person view and pre-rendered, static backgrounds. The protagonist is a private detective who used to be a police officer. The game starts as a murder investigation. It is set in Los Angeles in the future (2053) and is reminiscent of &lt;em&gt;Blade Runner&lt;/em&gt; in a number of ways.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-11-13T15:28:22.823" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16905" PostTypeId="2" ParentId="16897" CreationDate="2020-11-13T16:47:04.393" Score="0" Body="&lt;p&gt;IMO, ASCII control characters ceased to be meaningful around the same time when people stopped thinking of ASCII as a code for sending telegrams, and started thinking of it as a code that was used for storing text in computer systems.&lt;/p&gt;&#xA;&lt;p&gt;The same question that you're asking today—what do most of these even mean?—is the same question that I asked when I first learned about ASCII more than 40 years ago. The answer that I got back then only grows stronger with time:  They're obsolete.&lt;/p&gt;&#xA;" OwnerUserId="588" LastActivityDate="2020-11-13T16:47:04.393" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16906" PostTypeId="2" ParentId="16897" CreationDate="2020-11-13T17:06:38.357" Score="2" Body="&lt;p&gt;One example of the classic ASCII control codes being used today would be ETX and EOF.  On a Unix-like system in the terminal, Ctrl-C is ETX and will normally quit the program, and ctrl-D is EOF and is often used to mark end of input to a program.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-11-13T17:06:38.357" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16907" PostTypeId="2" ParentId="6529" CreationDate="2020-11-13T21:51:25.437" Score="2" Body="&lt;p&gt;There's two things here. First, where there was a need for ad-hoc transfers Kermit was very popular, supported (in the case of Lowbrow University when I worked there) by a campus-wide Gandalf network.&lt;/p&gt;&#xA;&lt;p&gt;Second, where there was a need to e.g. create installation media there were commercial boxes which supported all possible types of drive and several OSes (8&amp;quot;, 5 1/4&amp;quot; with both hard- and soft-sectors etc.; CP/M, MS-DOS, PC-DOS and so on). When direct transfer wasn't possible, companies such as Grey Matter would fall back to Kermit or X-Modem.&lt;/p&gt;&#xA;&lt;p&gt;As a variant of the latter, /some/ computers could read and write multiple formats. For example, the Future Computers FX20 and FX30 running CP/M-86 had tables in the BIOS which configured their 800K discs to emulate various other systems... there were various humorous comments in the source from one CPKS including reference to a &amp;quot;bijou subroutinette&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Later on, there were various plugin cards for PCs supported by specialist software, and there were things like Quaid Disk Explorer specifically written to explore copy protection etc.&lt;/p&gt;&#xA;" OwnerUserId="18835" LastActivityDate="2020-11-13T21:51:25.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16908" PostTypeId="2" ParentId="6529" CreationDate="2020-11-14T00:46:29.213" Score="2" Body="&lt;p&gt;On minicomputers, not quite the focus of this question, in the 1970s we used post office leased lines to transfer files.&lt;/p&gt;&#xA;&lt;p&gt;My very first professional project was to implement a remote job entry station, i.e., transfer files (representing cards) to a remote mainframe and transfer files (representing printouts) back.&lt;/p&gt;&#xA;&lt;p&gt;This was communicating between a 16-bit machine and a 36-bit machine; or, in character terms, between an 8-bit machine and a 6-bit machine.&lt;/p&gt;&#xA;&lt;p&gt;Implicit in this is the problem of data conversion. But it wasn't really an issue: if you need to connect A and B, then you need to handle data compatibility issues. In my case it was only a matter of character codes.&lt;/p&gt;&#xA;&lt;p&gt;Using a network is way easier than using disks.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-11-14T00:46:29.213" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16909" PostTypeId="1" AcceptedAnswerId="16923" CreationDate="2020-11-14T02:23:28.043" Score="5" ViewCount="239" Body="&lt;p&gt;The S-100 bus was extremely versatile; originally designed for the 8080, computers using it had no trouble with the Z80 as a drop-in upgrade, and it even went to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9566/how-was-the-8-to-16-bit-transition-of-data-lines-managed-for-s-100&quot;&gt;16-bit with the 8086&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To my surprise, there have also been several successful attempts to put a 68000 into an S-100 machine e.g. &lt;a href=&quot;http://www.s100computers.com/My%20System%20Pages/68000%20Board/68K%20CPU%20Board.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this board&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;How does this work from the endian-ness perspective? The 8080, Z80 and 8086 are all little endian, but the 68000 is big endian. I would expect this to cause a problem, but while the above link mentions several challenges, it doesn't mention that as one of them.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10260" LastEditDate="2021-03-07T04:39:21.870" LastActivityDate="2021-03-07T04:39:21.870" Title="Did 68000 on S-100 have any problem with being big endian?" Tags="&lt;motorola-68000&gt;&lt;s-100&gt;&lt;endianness&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16910" PostTypeId="1" AcceptedAnswerId="16915" CreationDate="2020-11-14T02:47:16.803" Score="2" ViewCount="116" Body="&lt;p&gt;On this page about &amp;quot;&lt;a href=&quot;http://www.s100computers.com/My%20System%20Pages/68000%20Board/68K%20CPU%20Board.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;An S-100 68000 CPU Board&lt;/a&gt;&amp;quot; it is said:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;From a hardware perspective there are some very significant differences how Intel and Motorola CPU's talk to the world.  Somewhat oversimplifying, one could say that Intel CPUs assume that external devices are ready to talk to them immediately unless told otherwise (adding wait states).  While Motorola CPU's assume the opposite, they wait for a &amp;quot;I'm ready to talk&amp;quot; signal unless they are told otherwise -- so called synchronous communications.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is a difference in the CPU families that I didn't know about before.&lt;/p&gt;&#xA;&lt;p&gt;What were the reasons for Intel and Motorola making their respective design decisions in this regard? Was a consensus ever reached on which approach is best? Or even, best for a general-purpose computer versus embedded systems?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2020-11-14T10:26:44.583" LastActivityDate="2020-11-14T11:18:57.330" Title="Intel vs Motorola device communication protocols" Tags="&lt;hardware&gt;&lt;intel&gt;&lt;motorola-68000&gt;&lt;design-choices&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16911" PostTypeId="2" ParentId="16889" CreationDate="2020-11-14T03:54:48.743" Score="0" Body="&lt;p&gt;Since &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/16890/115&quot;&gt;it turns out this really is just a text dump&lt;/a&gt; and not some container format with any rigidity, I ended up using simple Unix text processing tools to convert it into a normal &lt;code&gt;.hex&lt;/code&gt; file:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sed -ne 's/^ *:/:/p'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="115" LastEditorUserId="15334" LastEditDate="2020-11-15T15:48:27.837" LastActivityDate="2020-11-15T15:48:27.837" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16912" PostTypeId="1" AcceptedAnswerId="16917" CreationDate="2020-11-14T05:06:27.653" Score="31" ViewCount="3315" Body="&lt;p&gt;One of the big turning points in the history of the industry was IBM choosing the Intel 8088 over the Motorola 68000. Given that most people outside IBM considered the 68000 preferable, there has been much speculation about the reasons for the decision, with candidates ranging from cost to pressure from the mainframe division worried about the PC being too capable, to the Motorola support chips not being ready in time.&lt;/p&gt;&#xA;&lt;p&gt;I just came across a very interesting paragraph in this &lt;a href=&quot;https://www.techspot.com/article/893-history-of-the-personal-computer-part-3/&quot; rel=&quot;noreferrer&quot;&gt;Techspot article&lt;/a&gt; about the PC's history.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;IBM's original plan had been to design the personal computer around Motorola's 6800 processor at its Austin, Texas research center. IBM marketing had arranged for the PC to be sold through the stores of Sears, Roebuck &amp;amp; Co., and the deal teetered in the balance as Motorola's 6800 along with its support chips slipped in schedule.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A contingency plan named Project Chess was set up to run concurrently with the Austin design...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Obviously 6800 is a typo for 68000; let's take that as read and look at the claim being made.&lt;/p&gt;&#xA;&lt;p&gt;The author is not only subscribing to the 'Motorola support chips not ready in time' explanation, but claiming IBM had gone so far as to already choose the 68000 before the schedule issue scuppered their original choice.&lt;/p&gt;&#xA;&lt;p&gt;Is that correct? Are there any historical documents that can confirm or refute the claim?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2020-11-14T16:03:44.807" LastActivityDate="2020-11-18T20:13:48.520" Title="Did IBM originally plan to use the 68000 in the PC?" Tags="&lt;history&gt;&lt;ibm-pc&gt;" AnswerCount="5" CommentCount="9" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16913" PostTypeId="2" ParentId="16909" CreationDate="2020-11-14T10:27:51.503" Score="2" Body="&lt;p&gt;Buses like S-100 are &amp;quot;endianness-agnostic&amp;quot;. They do not care about data and its order, they just transport desired content as CPU (or &amp;quot;master&amp;quot;) asks. Endianness is &amp;quot;the CPU thing&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-11-14T10:27:51.503" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16914" PostTypeId="2" ParentId="16912" CreationDate="2020-11-14T10:41:39.147" Score="9" Body="&lt;p&gt;The main factor could be the availability of the 8-bit data bus version of those CPUs. 68008 came to the market in 1982, but 8088 in 1979.&lt;/p&gt;&#xA;&lt;p&gt;The 8-bit version was important because peripherals (memories etc.) had only 8-bit wide data buses those days; change to full 16-bit could be very expensive.&lt;/p&gt;&#xA;&lt;p&gt;So those &amp;quot;crippled&amp;quot; versions were important mid-step between 8bit and 16bit systems. I believe that the availability of the 8088 was important for IBM during the consideration phase because the rest of the IBM PC could be built on less and much cheaper ICs.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-11-14T10:41:39.147" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16915" PostTypeId="2" ParentId="16910" CreationDate="2020-11-14T11:18:57.330" Score="3" Body="&lt;p&gt;&lt;em&gt;[While having a twist in its own, I got a feeling this had be answered already some time ago, in context about the ways to mark bus cycles on 8 bit CPU, but can't find it right now]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;To start with, the page mentioned compared kind of Apples and Oranges, as it's about Intel 8080 vs. Motorola 68000 (*1). These were complete different CPUs designed at different times in different environments.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This is a difference in the CPU families that I didn't know about before.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's called bus protocol, here asynchronous memory handling, and is the most fundamental behaviour about a CPU. It all comes down to what philospohy a designer/design team follows/creates when looking at the interaction of CPU and other components.In fact, these protocols changed even between CPU's of the same manufacturer, Motorola being a good example.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What were the reasons for Intel and Motorola making their respective design decisions in this regard?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because they liked it that way? Serious, it's arbitrary to do it either way and I doubt there was a high level decision taken at all. It might be how one approaches the issue, what image he had about the workings and who's the 'boss'. So your opinion is as good as mine - or the designers fwiw.&lt;/p&gt;&#xA;&lt;p&gt;In essence they are the same. Logically the 68k's &lt;code&gt;/DTACK&lt;/code&gt; (*2) signal has the same semantics as the  8080's &lt;code&gt;/READY&lt;/code&gt; (*3).&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In both cases it's about the peripheral (or some decoder) to set it in time to extend a bus cycle - or not.&lt;/li&gt;&#xA;&lt;li&gt;Both could be fixed to one state (Low for 'DTACK', High for '/READY') to make the CPU work synchronous.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So unlike the paragraph makes it look, the differences aren't that big. Of course it gets way more complicated in detail when attaching a 16 bit CPU to an 8 bit bus, as there is a lot of wait state generation and bus holds to be generated. But that's most definitely not the fault of these innocent signals.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was a consensus ever reached on which approach is best?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is no best, they are equal in all practical aspects for board design.&lt;/p&gt;&#xA;&lt;p&gt;Well, &lt;em&gt;if at all,&lt;/em&gt; it's possible to see Motorola's addition of &lt;code&gt;/DTACK&lt;/code&gt; as kind of an acknowledgement/adoption of Intels &lt;code&gt;/READY&lt;/code&gt;. The 6800, Motorola' genuine first CPU didn't have any handshake for asynchronous memory, but relied on Clock stretching for slower memory. Only the 68000 added &lt;code&gt;/DTACK&lt;/code&gt;, while the 6809 got &lt;code&gt;MRDY&lt;/code&gt; (*4).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or even, best for a general-purpose computer versus embedded systems?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Again, no.&lt;/p&gt;&#xA;&lt;p&gt;It is like left hand driving vs. right hand. Of course we all know driving on the left side is morally wrong and against the natural order, but one has to acknowledge that it works fine on certain islands :)&lt;/p&gt;&#xA;&lt;p&gt;If at all, modern (really modern) consensus is to drop the multi purpose bus and add STT interfaces for each purpose. Where classic CPU's do use a generic memory mapped (*5) bus system, modern ones have shifted to separate interfaces like Memory, USB, PCI, etc. Not to mention that modern CPUs are rather SoC's in them self than a classic CPU only CPU. &lt;em&gt;Embedded meets thousands of pins.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - While not stated explicit, it's about 68K on S100, which is simply the 8080 bus.&lt;/p&gt;&#xA;&lt;p&gt;*2 - &lt;strong&gt;D&lt;/strong&gt;ata &lt;strong&gt;T&lt;/strong&gt;ransfer &lt;strong&gt;ACK&lt;/strong&gt;nowledge - made famous by DTACK Grounded.&lt;/p&gt;&#xA;&lt;p&gt;*3 - In fact, one could argue that Intel's naming is almost poetic, after all /READY can well be read as Not-Ready. Given, it's bad practice to name that way, still it tickles a certain nerd sense.&lt;/p&gt;&#xA;&lt;p&gt;*4 - MRDY is in fact more of a signal to control a build in clock stretching. unlike &lt;code&gt;/READY&lt;/code&gt; or &lt;code&gt;/DTACK&lt;/code&gt; it's timing is rather critical. in return it allows to strech wait stats by partial clock cycles. Now that's what I'd call unusual.&lt;/p&gt;&#xA;&lt;p&gt;*5 - for this, the difference between address spaces, like for IO and memory, are irrelevant.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-11-14T11:18:57.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16916" PostTypeId="1" CreationDate="2020-11-14T12:02:52.120" Score="15" ViewCount="943" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Qix&quot; rel=&quot;noreferrer&quot;&gt;Qix&lt;/a&gt; was a quite unique Taito arcade video game that saw ports to nearly any home computing platform of its time. At first glance, the game mechanics seem to be targeted at low-performance hardware - no need for fast pixel graphics, as the game objects consist mainly of lines, no need for many colors, as the playfield actually seems to be using 4 colours only. Using such simple graphics also doesn't ask for hardware sprite support, and the music is fairly limited.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cK5c8.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cK5c8.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When you look a bit deeper, however, the game algorithm that reacts on the user closing up an area with a line, seems to become a bit more tricky: What needs to happen is the game to decide whether the newly closed-up area is &amp;quot;left&amp;quot; or &amp;quot;right&amp;quot; of the line that was just drawn - this decision is apparently based on the position of the &amp;quot;Qix&amp;quot; (the conglomerate of lines that erratically moves about the screen in the non-player-occupated black areas) - the newly drawn line has divided the black area of the screen in two parts, one that does contain the Qix, and one that doesn't. The game apparently choses the part that doesn't contain the Qix as the newly-claimed screen area. (Apparently, in later stages of the game there can be more than one Qix, and &amp;quot;splitting the Qix&amp;quot;, that is, there's one Qix on either side of the line, makes you automatically win the  level).&lt;/p&gt;&#xA;&lt;p&gt;There are trivial cases (like a new line dividing the screen horizontally in half) where it's dead-easy to find the area that doesn't contain he Qix. But more complicated cases apparently need a &amp;quot;simulated flood-fill&amp;quot; (probably in an off-screen buffer) to find the half of the screen where the Qix is - in order to be able to do a real flood-fill of the other area. Flood-fill is a pretty expensive operation for an 8-bit CPU.&lt;/p&gt;&#xA;&lt;p&gt;Question: Did Qix (and its home-computer descendants) really use a flood-fill algorithm to decide the newly-claimed areas? Or did the programmers find a &amp;quot;better&amp;quot; or &amp;quot;simpler&amp;quot; method?&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="15334" LastEditDate="2020-11-14T17:11:49.293" LastActivityDate="2021-05-26T21:44:06.600" Title="How was the main mechanic of the game Qix implemented?" Tags="&lt;8-bit-microcomputers&gt;&lt;game&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16917" PostTypeId="2" ParentId="16912" CreationDate="2020-11-14T12:06:41.667" Score="41" Body="&lt;p&gt;Several CPUs were considered. Essentially all 16 bit CPU of the time:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TI's 9900,&lt;/li&gt;&#xA;&lt;li&gt;Motorola's 68000,&lt;/li&gt;&#xA;&lt;li&gt;Zilog's Z8000 and&lt;/li&gt;&#xA;&lt;li&gt;Intel 8086/88&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This &lt;a href=&quot;https://spectrum.ieee.org/tech-history/heroic-failures/the-inside-story-of-texas-instruments-biggest-blunder-the-tms9900-microprocessor&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEEE Spectrum article&lt;/a&gt; sheds some light on the development, at least for 68k, 9900 and 8088 (*1,*2).&lt;/p&gt;&#xA;&lt;p&gt;In the end,it came down to a combination of factors:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TI's 9900 was single source, IBM didn't want a lock in.&lt;/li&gt;&#xA;&lt;li&gt;Motorola's 68000 was simply not ready at the time - and as well without second source (at the time)&lt;/li&gt;&#xA;&lt;li&gt;Zilog's Z8000 could have made it - except &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zilog&lt;/a&gt; was (at that time) owned by Exxon, who at that time invested an extreme amount of money in what they perceived as a future without oil, creating &lt;a href=&quot;https://en.wikipedia.org/wiki/Exxon#Exxon_Office_Systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;Exxon Office System&lt;/a&gt; in direct competition to IBM in general and the target market of the PC in particular. So any Zilog CPU was political off limits.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Intel's 8086/88 did not bear any of these problems.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It was ready to be used.&lt;/li&gt;&#xA;&lt;li&gt;It had plenty of second source availability.&lt;/li&gt;&#xA;&lt;li&gt;There were no political reasons to not choose Intel.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In addition several 8080/85 based designs have been made at IBM for some time, so the upgrade path to 8088 was as well kind of natural.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Although the author seems to be a bit biased against his own creation :)&lt;/p&gt;&#xA;&lt;p&gt;*2 - In addition the 15 bit address space (32 KiWords) wasn't an issue as usage of a 74LS610 mapper was default for 9900 systems, Allowing virtual memory and up to 24 Bit addressing.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6794" LastEditDate="2020-11-18T20:13:48.520" LastActivityDate="2020-11-18T20:13:48.520" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16918" PostTypeId="2" ParentId="16892" CreationDate="2020-11-14T12:18:03.763" Score="8" Body="&lt;p&gt;I used an IBM 360 a lot for numerical work around 1970, and found single-precision (32-bit) floating point almost, but not quite, adequate for a surprisingly wide range of problems; whereas &amp;quot;double precision&amp;quot; (64-bit) was overkill and slow.&#xA;40-bit floating point (32 bit mantissa) is probably an excellent compromise. But of course it depends on exactly what you are doing.&lt;/p&gt;&#xA;" OwnerUserId="19889" LastActivityDate="2020-11-14T12:18:03.763" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16919" PostTypeId="2" ParentId="16916" CreationDate="2020-11-14T12:18:21.283" Score="7" Body="&lt;p&gt;I believe many versions of Qix did a flood-fill on &lt;em&gt;both&lt;/em&gt; sides of the line, then observed which one hit the Qix itself and &amp;quot;activated&amp;quot; the other one.  There are flood-fill algorithms that are quite efficient for the relatively large, open, geometric areas that usually result from gameplay.&lt;/p&gt;&#xA;&lt;p&gt;A modern approach would probably use a path-based scanline-fill algorithm, using the boundary of the open playfield and the newly drawn line.  The origin and termination of the new line would become split points on the boundary path, dividing that into left and right halves, and then forward and reverse copies of the new line would be inserted into these to form closed polygons.  Scanline fill only requires looking for vertical segments of these polygons; after crossing an odd number you are inside the polygon, and after crossing an even number you are outside it.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-11-14T12:18:21.283" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16920" PostTypeId="2" ParentId="16912" CreationDate="2020-11-14T13:57:58.107" Score="25" Body="&lt;p&gt;One reason that has not been mentioned is that the memory and speed of the PC placed it in the ballpark of CP/M systems rather than UNIX systems (already available at the time).  At this time there was a reasonably thriving market of CP/M office systems, and in spite of almost all of them being run by variants of the Z80 processor, much of the application software range (including the operating system itself) would happily run on 8080 processors.  At this point of time, much software was not really written in general-purpose languages but either in assembly language or something rather close to the processor.&lt;/p&gt;&#xA;&lt;p&gt;While the 8088 was not binary compatible with the 8080, its register structure was so similar to the 8080 that assembly code could be translated mechanically into 8088 assembly without much of a performance loss (if I remember correctly, the 8086/8088 even have a few instructions that serve no purpose apart from this kind of source compatibility).&lt;/p&gt;&#xA;&lt;p&gt;So this provided a good venue into convincing existing application software vendors to come out with a version for 8088/8086 without a lot of front-up investment, giving the platform a good start in the current staple of office computers and software.&lt;/p&gt;&#xA;&lt;p&gt;The original entry points into the operating system were also mimicking CP/M's BDOS entry calls, with Unix-like system calls (device agnostic open/read/write working through file ids rather than device-specific data structures and separate calls) getting added soon and partly with strange restrictions.&lt;/p&gt;&#xA;" OwnerUserId="19890" LastActivityDate="2020-11-14T13:57:58.107" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16921" PostTypeId="2" ParentId="16916" CreationDate="2020-11-14T15:21:59.320" Score="2" Body="&lt;p&gt;I can't say, I didn't write it, and I haven't seen the game in some time.&lt;/p&gt;&#xA;&lt;p&gt;But the fill is pretty simple as I recall.&lt;/p&gt;&#xA;&lt;p&gt;Remember, that the boundary that is drawn does not have to be square, or a straight line, or anything. You press the button and leave the border, and then you can draw a shape of arbitrary complexity (you just can't cross over yourself, and, of course, there's no curves, just straight lines).&lt;/p&gt;&#xA;&lt;p&gt;Once that's done, you have a well defined polygon, and you can quickly iterate from top to bottom, creating a list of line segments to fill.&lt;/p&gt;&#xA;&lt;p&gt;You can do a simple ray casting technique, for example. The play field is broken up in to horizontal chunks by the lines of the pattern. Those &amp;quot;in&amp;quot; the polygon, and those &amp;quot;out&amp;quot; of the polygon. Once you've determined &amp;quot;in&amp;quot; vs &amp;quot;out&amp;quot;, you can easily skip to each point. Just run down the list, toggling &amp;quot;in&amp;quot; and &amp;quot;out&amp;quot; as you encounter each line.&lt;/p&gt;&#xA;&lt;p&gt;Once that's done, you have your list of lines to paint to fill the zone, and that can be done howere you like.&lt;/p&gt;&#xA;&lt;p&gt;The trivial flood fill algorithm is a recursive algorithm, and certainly does not look like what QIX does when rendered. You start at a point, &amp;quot;fill the point&amp;quot;, then fill its neighbors by calling flood fill again with each point.&lt;/p&gt;&#xA;&lt;p&gt;It's expensive because of all the recursion and call over head, and it does not look at all like QIX, which paints from the top down.&lt;/p&gt;&#xA;&lt;p&gt;And you'll notice during the game (if I recall), that the game halts (even the QIX stops) during the fill. So big fills cause a big pause to the game while it resets the play field. In that sense the fill only has to be &amp;quot;fast enough&amp;quot; without any hard real time limits to keep up with the game play. The only limit is player patience.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-11-14T15:21:59.320" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16922" PostTypeId="2" ParentId="16909" CreationDate="2020-11-14T15:24:09.360" Score="2" Body="&lt;p&gt;A long time ago I worked on an &lt;a href=&quot;https://en.wikipedia.org/wiki/Alpha_Microsystems&quot; rel=&quot;nofollow noreferrer&quot;&gt;Alpha Microsystems&lt;/a&gt; computer which was S-100 based little-endian, and while I was there we upgraded to a 68000-based system that had been wired (I don't know the details) to behave as if it was a little-endian system.  So I can't give you details, but it is possible.&lt;/p&gt;&#xA;" OwnerUserId="660" LastActivityDate="2020-11-14T15:24:09.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16923" PostTypeId="2" ParentId="16909" CreationDate="2020-11-14T16:01:45.143" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How does this work from the endian-ness perspective?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Endianness is for most parts a software issue. Hardware, especially memory is either agnostic to the way a word ist stored, or doesn't have any idea about units wider than a byte at all(*1). Basically all I/O on S100 is 8 bit wide - after all, continuing the use of existing peripherals was a main point of continued use of the outdated S100 bus. Ther might have been a few, very special interfaces using the 16 bit wide data bus (*2), but there it depends on each individual card. S100 does not define a byte order.&lt;/p&gt;&#xA;&lt;p&gt;In all practical situation endian issues will only arise if two S100 boards, with CPUs using different word endianes, share the same memory &lt;strong&gt;and&lt;/strong&gt; data is exchanged/shared between them. Which is exactly the same as comes with every storage from RAM to floppy and punch tape to SSD, isn't it? So it's up to Software to handle this, not hardware.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but while the above link mentions several challenges, it doesn't mention that as one of them.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As the page is about hardware, not software.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Storing whatever comes along &lt;em&gt;is&lt;/em&gt; the what RAM does, isn't it?&lt;/p&gt;&#xA;&lt;p&gt;*2 - Maybe refer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/9567/6659&quot;&gt;this answer&lt;/a&gt; about S100 definition and extension to 16 bit.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-11-14T16:01:45.143" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16924" PostTypeId="2" ParentId="16916" CreationDate="2020-11-14T17:46:50.030" Score="3" Body="&lt;p&gt;I don't know how the algorithm works, but I can describe an algorithm which is consistent with the behavior I've observed.&lt;/p&gt;&#xA;&lt;p&gt;The marker moves multiple pixels at a time.  This means that rows and columns can be divided into those that the marker can occupy and those which it cannot.  Software need only concern itself with pixels that are on columns the marker can occupy but rows that it cannot, or rows the marker can occupy but columns it cannot (each group of consecutive rows or columns the marker can't occupy can be treated as a single row or column).  Each such &amp;quot;pixel&amp;quot; would need two bits to distinguish whether it is:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;On the path the player drew&lt;/li&gt;&#xA;&lt;li&gt;On the portion of the boundary of the area occupied by the Qix&lt;/li&gt;&#xA;&lt;li&gt;On a portion of the boundary that is confirmed to surround the Qix&lt;/li&gt;&#xA;&lt;li&gt;None of the above.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Once the player completes a path, the system should scan leftward from the Qix until it hits either the player's path or the boundary.  It should then proceed upward around the new boundary while hugging the left wall, marking as &amp;quot;confirmed&amp;quot; any portions of the boundary which it traverses, until it encounters a pixel that is on the portion of the path which has been confirmed to surround the Qix (which would only happen after it has made a complete circuit).&lt;/p&gt;&#xA;&lt;p&gt;Once scanning has made a complete circuit, software should proceed through all of the rows where the marker can't move.  Scan each row left to right and toggle the &amp;quot;painting&amp;quot; state every time one encounters a pixel which the player drew, or that was on the boundary but does &lt;em&gt;not&lt;/em&gt; surround the Qix.&lt;/p&gt;&#xA;&lt;p&gt;The scenario where the player splits the two Qix could be detected by running the above scanning algorithm for the first Qix, and then starting it for the second but stopping as soon as code encounters a pixel on the old boundary.  If that pixel is on the path surrounding the first Qix, both are surrounded by that path.  Otherwise, the Qix were split.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-11-14T17:46:50.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16925" PostTypeId="2" ParentId="16912" CreationDate="2020-11-14T20:23:48.277" Score="2" Body="&lt;p&gt;IBM already had an extensive history of using Intel chips in its products and had also acquired the rights to manufacture the 8086 family from Intel for its hardware. Intel wanted to build its own computers.&lt;/p&gt;&#xA;&lt;p&gt;However, due to competition from Japanese manufacturers, who were able to undercut costs, Intel abandoned the market and focused solely on microprocessors.&lt;/p&gt;&#xA;" OwnerUserId="19814" LastEditorUserId="5199" LastEditDate="2020-11-15T12:13:40.517" LastActivityDate="2020-11-15T12:13:40.517" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16926" PostTypeId="1" AcceptedAnswerId="16929" CreationDate="2020-11-15T01:23:00.187" Score="9" ViewCount="1081" Body="&lt;p&gt;After trying out FS-UAE on my Fedora Linux system, which worked quite nicely, I got to thinking. Even though when the Amiga was originally released in the middle 1980s, it was revolutionary in its graphics and sound capabilities, not all Amiga programs need them. As a specific case, C compilers on the Amiga have no need of the computer's graphics and sound capabilities. (I mean the compilers themselves don't, the programs they produce as compiled output may well do.)&lt;/p&gt;&#xA;&lt;p&gt;So it seems to me that firing up a fully emulated Amiga just to compile C code on it is overkill. Would it be technically possible to have an emulator that has an emulated Motorola 680x0 CPU and the Amiga operating system ROM running, maps the Amiga's file system to the host computer's like FS-UAE does, but instead of implementing a full Amiga GUI only interacts with the user through standard stdio? That way it could run in a Linux terminal and be faster, more efficient and less error-prone to use. The emulator could just skip all system calls or direct chip instructions that use graphics or sound.&lt;/p&gt;&#xA;&lt;p&gt;What I am looking for here is some kind of system that would allow me to run this kind of program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;int main(void) {&#xA;  printf(&amp;quot;Hello world!\n&amp;quot;);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;in a Linux terminal, but with the actual program being in Motorola 608x0 machine code using the AmigaOS system libraries.&lt;/p&gt;&#xA;&lt;p&gt;This would allow me to write programs such as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;exec/types.h&amp;gt;&#xA;#include &amp;lt;exec/memory.h&amp;gt;&#xA;#include &amp;lt;libraries/dos.h&amp;gt;&#xA;int main(void) {&#xA;  BPTR lock;&#xA;  lock = Lock(&amp;quot;DF0:Stuff&amp;quot;, ACCESS_READ);&#xA;  AssignLock(&amp;quot;Stuff:&amp;quot;, lock);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which will (if I remember my AmigaOS correctly) assign &amp;quot;Stuff:&amp;quot; to &amp;quot;DF0:Stuff&amp;quot;, all in AmigaOS code, but with the emulator never actually starting up an Amiga GUI, but instead doing the whole thing in a Linux terminal. Note that exec/types.h, exec/memory.h and libraries/dos.h are AmigaOS library headers, not Linux library headers.&lt;/p&gt;&#xA;&lt;p&gt;Is this kind of thing possible? And if it is, does something like it exist and has anyone else thought about it?&lt;/p&gt;&#xA;" OwnerUserId="19868" LastEditorUserId="15334" LastEditDate="2020-11-15T11:23:46.893" LastActivityDate="2020-11-15T11:23:46.893" Title="Is there a seamless, Wine-like AmigaOS emulator for Linux, specifically for text-based programs?" Tags="&lt;amiga&gt;&lt;emulation&gt;&lt;linux&gt;&lt;software-recommendation&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16927" PostTypeId="1" CreationDate="2020-11-15T01:41:52.287" Score="5" ViewCount="137" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/16909/10260&quot;&gt;This question&lt;/a&gt; asks about endian issues of the S-100 bus.  A peripheral card that has a register larger than one byte (e.g. a 16-bit or larger word) would need to be read/written by more than one access; endianness then becomes an issue.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Did any peripheral cards for the S-100 bus have registers larger than one byte?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;To be clear, I am asking about actual products, not whether it was theoretically possible.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2020-11-16T00:16:02.800" LastActivityDate="2020-11-16T11:58:10.793" Title="Did any S-100 cards have multi-byte peripheral registers?" Tags="&lt;s-100&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16928" PostTypeId="2" ParentId="16900" CreationDate="2020-11-15T03:17:55.493" Score="19" Body="&lt;h1&gt;85%&lt;/h1&gt;&#xA;&lt;p&gt;A Z-80 program will be 15% smaller than an 8080 program.&lt;/p&gt;&#xA;&lt;p&gt;To come up with this guess I took a reasonably tight Z-80 program, &lt;a href=&quot;http://48k.ca/L1Basic.html&quot; rel=&quot;noreferrer&quot;&gt;the TRS-80 4K Level 1 BASIC ROM&lt;/a&gt; and estimated the cost of replacing the Z-80 specific instructions with 8080 code.  I'll get back to the limits of this methodology later but for now let me plow on with this example.&lt;/p&gt;&#xA;&lt;p&gt;Of the 4096 bytes in the ROM, 3708 comprise 2100 Z-80 instructions.  And 508 of those are not available on the 8080.&lt;/p&gt;&#xA;&lt;p&gt;16 are &lt;code&gt;DJNZ&lt;/code&gt; which can almost universally be replaced with &lt;code&gt;DEC B; JP NZ&lt;/code&gt; at a cost of 2 bytes each.&lt;/p&gt;&#xA;&lt;p&gt;248 are relative jumps (JR) which can be replaced with absolute jumps (JP) at a cost of 1 byte each.&lt;/p&gt;&#xA;&lt;p&gt;The remaining 244 I figured would cost either 1 or 2 extra bytes to replace.  At 1 byte each the total code size would be 3708 + 16 * 2 + 244 or 4232 bytes.  At 2 bytes, 3708 + 16 * 2 + 244 * 2 or 4476 bytes.&lt;/p&gt;&#xA;&lt;p&gt;Reducing 4232 bytes to 3708 is a 12% reduction.&#xA;Reducing 4476 bytes to 3708 is a 17% reduction.&lt;/p&gt;&#xA;&lt;p&gt;15% looks like a nice round number in between those two.&lt;/p&gt;&#xA;&lt;h2&gt;Sketching why one or two bytes&lt;/h2&gt;&#xA;&lt;p&gt;A good deal of the remaining Z-80 instructions were bit test, set and reset (the &lt;code&gt;ED&lt;/code&gt; prefix opcodes).  The 8080 can do something like those on the &lt;code&gt;A&lt;/code&gt; register using &lt;code&gt;AND&lt;/code&gt; and &lt;code&gt;OR&lt;/code&gt; instructions.  Here's an outline to replace them:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;BIT  3,B     ; 2 bytes&#xA;...&#xA;LD   A,B&#xA;AND  8       ; 3 bytes&#xA;&#xA;SET  7,C     ; 2 bytes&#xA;...&#xA;LD   A,C&#xA;OR   128&#xA;LD   C,A     ; 4 bytes&#xA;&#xA;RES  4,H     ; 2 bytes&#xA;...&#xA;LD   A,H&#xA;AND  $EF&#xA;LD   H,A     ; 4 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;An average of 1.7 extra bytes.   Of course, the &lt;code&gt;A&lt;/code&gt; register may not be available for simple translation.  Saving and restoring it would cost 2 more bytes and would be problematic with the &lt;code&gt;BIT&lt;/code&gt; instruction which sets flags.  But I'll stick with the 1 to 2 byte estimate.  The value may not need to be immediately loaded back into the register and often a small amount of restructuring could eliminate the need to save &lt;code&gt;A&lt;/code&gt; register.&lt;/p&gt;&#xA;&lt;p&gt;Another number of instructions were under the &lt;code&gt;ED&lt;/code&gt; prefix.  The 3 prominent ones are &lt;code&gt;LD (mem),DE&lt;/code&gt;, &lt;code&gt;SBC HL,DE&lt;/code&gt; and &lt;code&gt;LDIR&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;LD (mem),DE&lt;/code&gt; can be done with two extra bytes in 8080:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LD    (mem),DE    ; 4 bytes&#xA;...&#xA;EX    DE,HL&#xA;LD    (mem),HL&#xA;EX    DE,HL       ; 5 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You may be done with &lt;code&gt;DE&lt;/code&gt; and &lt;code&gt;HL&lt;/code&gt; and not have to exchange them back.  Or in this example you only need one swap with a little trickery and there is no cost:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LD    HL,(mem1)&#xA;LD    DE,(mem2)    ; 7 bytes&#xA;...&#xA;LD    HL,(mem2)&#xA;EX    DE,HL&#xA;LD    HL,(mem1)    ; 7 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;SBC HL,DE&lt;/code&gt; is often just used to subtract the two registers without carry (the Z-80 does not have a &lt;code&gt;SUB HL,DE&lt;/code&gt; instruction).  Often the 3 byte sequence &lt;code&gt;OR A; SBC HL,DE&lt;/code&gt; is used (&lt;code&gt;OR A&lt;/code&gt; is a Z-80 idiom to clear the carry flag).  And commonly it is used to wastefully subtract a constant.  Consider:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LD    DE,1000&#xA;OR    A&#xA;SBC   HL,DE       ; 6 bytes&#xA;...&#xA;LD    DE,-1000&#xA;ADD   HL,DE       ; 4 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Being a little more clever makes the 8080 code smaller and faster than the straightforward Z-80 solution.&lt;/p&gt;&#xA;&lt;p&gt;To literally replace &lt;code&gt;SBC HL,DE&lt;/code&gt; when can do:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LD    A,L&#xA;SBC   E&#xA;LD    L,A&#xA;LD    A,H&#xA;SBC   D&#xA;LD    H,A      ; 6 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That's a 4 byte loss.  However if you actually wanted to subtract without the initial carry then the replacement is still 6 bytes but the original is 3 bytes.  And at this point we should also consider the king of code density: subroutines.  If &lt;code&gt;SBC HL,DE&lt;/code&gt; occurs frequently it can be replaced by a call to a subroutine that does just that at a cost of a single extra byte.  Over a large program the fixed overhead of the subroutine will amortize down to nearly zero.  And there's no extra cost on each instruction if the &lt;code&gt;OR A; SBC HL,DE&lt;/code&gt; 3 byte idiom is used.&lt;/p&gt;&#xA;&lt;p&gt;This becomes more clear for &lt;code&gt;LDIR&lt;/code&gt; and other block moves - a two byte instruction which can always be done with a 3 byte call.&lt;/p&gt;&#xA;&lt;p&gt;The example program uses 37 instructions that involve the &lt;code&gt;IX&lt;/code&gt; register (and none for &lt;code&gt;IY&lt;/code&gt;).  The main power of the index registers is that they can do (almost) anything &lt;code&gt;HL&lt;/code&gt; can do at the cost of a single extra byte.  Or 2 bytes if they are used to access memory via a signed byte offset -- &lt;code&gt;LD D,(IX+3)&lt;/code&gt; or &lt;code&gt;LD (IY-2),E&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Here it becomes difficult to imagine directly replacing them.  I will argue that in many cases &lt;code&gt;HL&lt;/code&gt; can take over for them at little to no cost because programs tend to access memory sequentially.  For example, consider:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LD    IX,mem&#xA;LD    B,(IX+4)&#xA;LD    C,(IX+5)&#xA;LD    D,(IX+6)&#xA;LD    E,(IX+7)     ; 15 bytes&#xA;...&#xA;LD    HL,mem+4&#xA;LD    B,(HL)&#xA;INC   HL&#xA;LD    C,(HL)&#xA;INC   HL&#xA;LD    D,(HL)&#xA;INC   HL&#xA;LD    E,(HL)        ; 10 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The pure 8080 code is 5 bytes shorter.  Of course, there are situations where it will be more difficult.  Once again we may appeal to either programmer cleverness or subroutines to postulate a lower overhead.&lt;/p&gt;&#xA;&lt;p&gt;The last two instructions are harder to reason about.  &lt;code&gt;EX AF,AF'&lt;/code&gt; and &lt;code&gt;EXX&lt;/code&gt; switch to alternate register sets.  In essence they give you an entire new bank of 8080 general purpose registers to work with.  This is a boon to speed but we can once again use subroutines to reduce the overhead to a mere 2 bytes per use asymptotically.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;EXX        ; 1 byte&#xA;...&#xA;CALL zexx  ; 3 bytes&#xA;...&#xA;zexx:  (subroutine left as an exercise for the reader)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In summary, I contend that in many cases there are replacements that cost only one or two extra bytes and in other cases subroutines can be used to make the cost per use at most 2 bytes and in large programs the fixed cost of a subroutine approaches zero.&lt;/p&gt;&#xA;&lt;p&gt;And than isn't even considering the &lt;code&gt;RST&lt;/code&gt; instructions which are single-byte &lt;code&gt;CALL&lt;/code&gt; instructions though only 8 are available.  Used strategically they can reduce the overhead even more.&lt;/p&gt;&#xA;&lt;h2&gt;Reasonable Objections&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Only one program was examined.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you buy the Z-80 instruction cost analysis then this is easily remedied by studying other programs.  But the only question is what percentage of the program being Z-80 only is reasonable.  The rest is just math.  The BASIC ROM was 25% Z-80 only instructions.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Replacing instructions with subroutine calls is really expensive.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;It sure is, but we're looking an density, not speed.  And that's more than plenty to grasp.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;This doesn't take into account programmer cleverness.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The chances are good that a clever programmer starting from scratch will produce a smaller 8080 program.  However, with very minor exceptions that will also be a valid Z-80 program so it makes the question moot.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;But what we'd really like to know is how much smaller an 8080 program could be if written in Z-80.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Yes, that would be nice to know.  And useful.  But that seems like a much harder question involving the skill of the programmer.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Can we just game the system by writing a Z-80 interpreter in 8080 and thus claim for any Z-80 program larger than twice the size of that interpreter the density is actually worse?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I don't see why not.  Again, density, not efficiency is in question.  It may seem silly, but consider any program which uses some data-driven or interpreted code for its operation.  How exactly do you account for that?  Pedantically we can only really fall back on Z-80 and 8080 instructions that are directly executed by the processor.  But in general programming it is a legitimate and fruitful technique to reduce code size.  It does, however, seem like a solution out of the bounds of the spirit of the question.  I think it is important to keep in mind if you are looking at actual solutions and deserves mention as a complicating factor in quantifying the density question.&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2020-11-15T23:08:32.247" LastActivityDate="2020-11-15T23:08:32.247" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16929" PostTypeId="2" ParentId="16926" CreationDate="2020-11-15T03:18:39.380" Score="20" Body="&lt;p&gt;A solution like that already exists: it's called vamos (Virtual AMiga OS) and emulates a 68k CPU and a bunch of libraries - enough to get terminal only programs (like compilers and assemblers) running:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/cnvogelg/amitools&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/cnvogelg/amitools&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Not all that easy to setup though.&lt;/p&gt;&#xA;" OwnerUserId="19895" LastActivityDate="2020-11-15T03:18:39.380" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16930" PostTypeId="1" CreationDate="2020-11-15T15:38:24.837" Score="4" ViewCount="223" Body="&lt;p&gt;Some weeks ago I got a non-working Powerbook 145b for 20€ (~23USD).&#xA;The first thing I did was to test the power supply, which was giving a good 7.8V.&lt;/p&gt;&#xA;&lt;p&gt;I saw that the battery was still in place and I feared the worst. When I took it out my suspicions were confirmed: corrosion.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xlvu0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xlvu0.jpg&quot; alt=&quot;corroded battery&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It was looking pretty bad and it didn't look any better when I opened the laptop:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6NV7N.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6NV7N.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I spent quite some time cleaning everything and given my experience with a Powerbook 180 (which had broken traces underneath the battery connector) the first thing that I did to start troubleshooting the main board was to desolder the battery connector.&lt;/p&gt;&#xA;&lt;p&gt;I could see how the trace that goes from one of the battery connectors to the fuse was completely gone. I fixed it (red circle in the image below)&lt;/p&gt;&#xA;&lt;p&gt;After some more checking, I also saw that the trace going from R99 to the third pin in the connector, which I think is for the battery temperature sensor, was broken. I ran a wire from the resistor to the back pin of the connector (in blue in the image below). Not sure if this one was critical for the board to work, given that it is for the temperature sensor connector, but well... it is fixed also.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w1WGp.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w1WGp.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I couldn't see anything else, but the laptop was not working yet. I put more time on checking and cleaning, I saw that the buttons (startup and reset/interrupt) were not working properly, so I cleaned them thoroughly. And finally, the laptop turned on!&lt;/p&gt;&#xA;&lt;p&gt;I used it for a bit and there were some things not working, like the mouse (which I also troubleshot later and saw that one of the diodes is gone). But the seller also sent me one of those old Apple mice so I was able to use it.&lt;/p&gt;&#xA;&lt;p&gt;The next day I went to power it on again but it was not working. I could hear some weird sounds through the speaker. I started moving the power adapter connector and pressing the buttons at the back. I desolder the buttons and the battery connector from the board and cleaned them, also tested and they were fine. So I put them back and still the same. I also replaced the PRAM battery. After much more time testing and trying stuff I've been able to get the &amp;quot;trick&amp;quot; to start it up.&lt;/p&gt;&#xA;&lt;p&gt;I need to press the reset button for a while (~10 seconds) one or two times and then it starts fine. &lt;a href=&quot;https://www.youtube.com/watch?v=A0tulAwOOgk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is a video showing it&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;At this point, I have no idea what is the issue with the laptop.&lt;/p&gt;&#xA;&lt;p&gt;Sorry about the long post, but I wanted to explain the whole process I've followed to get to where I'm right now.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone have any idea what is going on? or what else can I try?&lt;/p&gt;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="19870" LastEditorUserId="19870" LastEditDate="2020-11-15T20:16:45.663" LastActivityDate="2020-12-17T20:02:55.300" Title="Reviving a Powerbook 145B, but it still struggles to power up correctly" Tags="&lt;apple&gt;&lt;repair&gt;&lt;powerbook&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16931" PostTypeId="1" AcceptedAnswerId="16932" CreationDate="2020-11-15T16:25:39.837" Score="18" ViewCount="2848" Body="&lt;p&gt;Does anyone know what kind of device this is? I found it in my late dad's stuff, probably from the 1970s.&#xA;It has no number, type, model, serial number or anything else on it that could be used for identification, besides the IBM logo.&lt;/p&gt;&#xA;&lt;p&gt;Picture #1&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wzTom.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wzTom.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Picture #2&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Bywe8.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Bywe8.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19900" LastEditorUserId="6659" LastEditDate="2020-11-15T16:46:27.410" LastActivityDate="2020-11-17T00:07:00.100" Title="What is the function of this strange IBM apparatus?" Tags="&lt;hardware&gt;&lt;ibm&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16932" PostTypeId="2" ParentId="16931" CreationDate="2020-11-15T16:34:59.870" Score="34" Body="&lt;p&gt;Classic &lt;a href=&quot;http://vintage-technics.ru/Eng-IBM_224.htm&quot; rel=&quot;noreferrer&quot;&gt;IBM 224 Dictating Unit&lt;/a&gt; using a &lt;a href=&quot;https://obsoletemedia.org/magnabelt/&quot; rel=&quot;noreferrer&quot;&gt;magnabelt&lt;/a&gt;, often called a &lt;a href=&quot;https://en.wikipedia.org/wiki/Dictaphone&quot; rel=&quot;noreferrer&quot;&gt;Dictaphone&lt;/a&gt;, although that wasa  trademark of a different company. Introduced in 1966 and sold in high volume and worldwide, way into the 1970s.&lt;/p&gt;&#xA;&lt;p&gt;Seen here &lt;a href=&quot;https://www.youtube.com/watch?v=qfPm-Xci3rE&quot; rel=&quot;noreferrer&quot;&gt;in action&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So while being from IBM, it's in no way computer related. They are still a common find. Only complete setups, including the microphone and all other accessories, in the original carrying case are a bit more rare.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-15T16:42:53.473" LastActivityDate="2020-11-15T16:42:53.473" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16933" PostTypeId="1" AcceptedAnswerId="16935" CreationDate="2020-11-15T18:22:01.220" Score="15" ViewCount="3231" Body="&lt;p&gt;In a nutshell, could the Z80 address 64 KB of ROM &lt;em&gt;and&lt;/em&gt; 64 KB of RAM, or just 64 KB for both RAM and ROM?&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, I couldn't find an exact and a direct answer to my question while searching. Excuse me if my question has a very very direct answer, that I don't understand&lt;/p&gt;&#xA;&lt;p&gt;Now whenever I see how memory a Z80 could address on many sites, Wikipedia and so it states 64 KB, but the type of memory isn't specified ROM or RAM. At the same time on other sites, it is specified that RAM and ROM share the 64 KB address space, so 32 KB for RAM and 32 KB for ROM. At other places I saw that the maximum RAM space is 64 KB, hence there should be extra space for ROM.&lt;/p&gt;&#xA;&lt;p&gt;I became very confused, and tried to open the Z80 datasheet directly, but due to my simple understanding, I couldn't get a rigid answer, but I found what's called a stack pointer which is holding a 16-bit address for external RAM plus there is a pin called MREQ which supposedly becomes active when the Z80 is using RAM. Now some evidence suggest that the Z80 could address a total 64 KB total ROM and RAM, and some suggest that is could address 64 KB ROM and 64 KB RAM, so 128 KB total for both of the memory types.&lt;/p&gt;&#xA;" OwnerUserId="18356" LastEditorUserId="535" LastEditDate="2020-11-16T17:53:05.970" LastActivityDate="2021-05-12T17:52:43.887" Title="Could a Z80 address a total of 128 KB of ROM and RAM?" Tags="&lt;z80&gt;&lt;memory&gt;" AnswerCount="8" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16934" PostTypeId="2" ParentId="16933" CreationDate="2020-11-15T18:34:02.083" Score="12" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;It's 64 KiB total in any combination imaginable.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Or more general:&lt;/h2&gt;&#xA;&lt;p&gt;The Z80 features&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;16 address lines (A15..A0),&lt;/li&gt;&#xA;&lt;li&gt;sufficient to address 64 KiB (via D7..D0),&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;which can be used to access one of two address spaces&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;default memory (with next to all instructions, indicated by &lt;code&gt;/MREQ&lt;/code&gt;) or&lt;/li&gt;&#xA;&lt;li&gt;I/O locations (with IN and OUT instructions, indicated by &lt;code&gt;/IORQ&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Either address space can be filled at will with&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RAM,&lt;/li&gt;&#xA;&lt;li&gt;ROM,&lt;/li&gt;&#xA;&lt;li&gt;I/O or&lt;/li&gt;&#xA;&lt;li&gt;not at all.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Pick your choice.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Not to mention swapping RAM/ROM/IO in and out by reconfiguration of address decoding - but that'll be design/machine specific and not due to CPU design)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Whenever I see how Memory a Z80 could address in many sites, Wikipedia and so it states 64KB, but type type of memory isn't specified ROM or RAM,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because it's an address space of 64 Ki, independent of what is placed there.&lt;/p&gt;&#xA;&lt;p&gt;I could understand that your confusion comes from modern SoC with separate channels for each use case. The Z80, like basically all classic CPUs offer only a single, generic bus for all types connected. All devices use the same interface. Selection is done by address decoding &lt;em&gt;outside&lt;/em&gt; the CPU.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;it is specified that RAM and ROM share the 64KB address so 32KB for RAM and 32KB for ROM,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Why does it have to be 32+32 KiB? Any split is possible. Some systems will have only a small 2-4 KiB Boot ROM, able to load some OS from an external media.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;in other places I saw that maximum RAM space is 64KB, hence there should be extra space for ROM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, not necessary, as ROM may only be needed during boot and will be disabled after some OS is booted - the usual way for CP/M machines.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;tried to open the Z80 datasheet directly [...] I found what's called a stack pointer which is holding 16bit address for external RAM&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's the software side. If you want to see how hardware is interfaced, you ned to look at the pins and their function. Like A15..A0 holding an address.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;plus there is a pin called MREQ which supposedly becomes active when the Z80 is using RAM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, it's active when it accesses memory - independent of being RAM or ROM (or whatever). It distinguishes access to memory address space to I/O address space (marked by &lt;code&gt;/IORQ&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Now some evidence suggest that the Z80 could address a total 64KB total ROM and RAM, and some suggest that is could address 64KB ROM and 64KB RAM so 128KB total for both of the memory types.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now that would be nice to see that evidence. Because all I ever found is reference to a 16-bit address space that can be populated with anything.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-16T18:17:03.457" LastActivityDate="2020-11-16T18:17:03.457" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="16935" PostTypeId="2" ParentId="16933" CreationDate="2020-11-15T18:48:59.033" Score="45" Body="&lt;p&gt;The Z80 has an &lt;strong&gt;address space&lt;/strong&gt; of 64KB. That means it can perform 8 bit reads or writes to 65,536 distinct locations as specified by the 16 address pins on the CPU. As far as the Z80 is concerned that's all it knows about.&lt;/p&gt;&#xA;&lt;p&gt;Now it's up to the system designer to decide which of those locations lead to RAM, which lead to ROM, which might lead to memory mapped peripherals and which lead nowhere. The CPU doesn't know the difference between them and it will happily try to write to ROM even though that has no effect. On a system like the original 48KB ZX Spectrum the first 16KB of the address space led to 16KB of ROM while the rest led to 48KB of RAM.&lt;/p&gt;&#xA;&lt;p&gt;Of course this kind of arrangement doesn't need to be set in stone. &lt;strong&gt;Bank Switching&lt;/strong&gt; is a design where you can change what is connected to different address ranges dynamically in response to a command (such as writing a bank number to a specially chosen address or port). The CPU still only has 64KB of address space but you swap what portions of that address space actually connect to.&lt;/p&gt;&#xA;&lt;p&gt;The ZX Spectrum 128 had more than 64KB of RAM and used bank switching to let programs access all of it. So the first 16KB of the address space still led to ROM, the next 32KB still led to the same fixed RAM but that last 16KB could be switched in between operations to connect to any one of eight 16KB banks of RAM in the system (the 16KB ROM could also be switched between accessing the original BASIC and a new 16KB editor).&lt;/p&gt;&#xA;" OwnerUserId="15514" LastActivityDate="2020-11-15T18:48:59.033" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="16936" PostTypeId="2" ParentId="16892" CreationDate="2020-11-15T23:42:29.997" Score="7" Body="&lt;p&gt;This all happened on an 8 bit computer. So the designer of the floating-point format was free to use 3, 4, 5, 6, 7, 8 or 9 bytes for floating-point numbers, there was no particular advantage of using 4 or 8 bytes.&lt;/p&gt;&#xA;&lt;p&gt;The obvious difference is the precision, the storage requirements, the amount of code, and the execution time of operations. 32 bit float is Ok nowadays because we can switch to 64 bits if it is not precise enough, but at that point in time having two formats would have been too complicated. And 4 bytes for everything isn't good enough. 5 bytes for everything is borderline, just about the acceptable minimum.&lt;/p&gt;&#xA;&lt;p&gt;Since BASIC had to fit into 8-16 Kbyte, code size was a problem. Up to some n, you can afford to do n operations with code replicated n times, but beyond that you'd need loops to keep the size small - and that really increases the execution time. So I think that was the reason to go with the minimum acceptable precision, and not use 6, 7 or more bytes.&lt;/p&gt;&#xA;" OwnerUserId="1959" LastActivityDate="2020-11-15T23:42:29.997" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16937" PostTypeId="2" ParentId="16927" CreationDate="2020-11-16T00:30:10.870" Score="1" Body="&lt;p&gt;I have never seen any 16 bit I/O cards. There wasn't much business sense to build such, as it would have quite limited possible sales.&lt;/p&gt;&#xA;&lt;p&gt;(CPU)-Boards according to the IEEE standard for 16 bit access (*1) had to be able to turn any 16 bit request into two consecutive cycles to enable seamless interaction with 8 bit boards. Making a card requiring single cycle 16 bit access would have limited the use to 16 bit CPUs only.&lt;/p&gt;&#xA;&lt;p&gt;But there have been several memory cards, like &lt;a href=&quot;http://www.s100computers.com/Hardware%20Folder/BG%20Computer%20Applications/256K%20RAM/256K%20RAM.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this 256 KiB static&lt;/a&gt; or &lt;a href=&quot;http://www.s100computers.com/Hardware%20Folder/SC%20Digital/1M%20DRAM/1M%20DRAM.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this 1 MiB dynamic RAM&lt;/a&gt;, that could be configured to for 16 bit transfers using the IEEE 16 bit extension (*1).&lt;/p&gt;&#xA;&lt;p&gt;In general 16 bit RAM boards are a rather rare find. Usually 16 bit CPU CPUs did bring plenty on-board memory and/or proprietary interfaces (*2), as S100 bus speed was usually limited to 4-6 MHz, considerably slowing down operation.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - See &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9566/how-was-the-8-to-16-bit-transition-of-data-lines-managed-for-s-100/9567#9567&quot;&gt;this answer&lt;/a&gt; for details.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Same is true for Multibus boards - but here more to avoid bus arbitrating.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-16T11:58:10.793" LastActivityDate="2020-11-16T11:58:10.793" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16938" PostTypeId="2" ParentId="2405" CreationDate="2020-11-16T02:30:52.533" Score="-4" Body="&lt;p&gt;How i managed to do it on a &amp;quot;modern&amp;quot; 486 board with integrated IDE:&#xA;first i needed to disable IDE controller in bios&#xA;IMPORTANT: for whatever reason this drive only works as secondary slave drive, the other drives are selected on the BIOS as &amp;quot;None&amp;quot; and the actual disk is&#xA;selected as drive type 2&lt;/p&gt;&#xA;&lt;p&gt;the drive is a tandon 20mb mfm drive&lt;/p&gt;&#xA;" OwnerUserId="19906" LastActivityDate="2020-11-16T02:30:52.533" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16939" PostTypeId="1" AcceptedAnswerId="16941" CreationDate="2020-11-16T04:48:49.357" Score="8" ViewCount="2852" Body="&lt;p&gt;I am considering taking my nostalgia for the eighties to the next level and getting hold of a green monochrome monitor. In particular, the nine inch monitor of the Apple IIc, but maybe something else depending on price and availability. If you put 'monochrome' into Ebay there are a number of options.&lt;/p&gt;&#xA;&lt;p&gt;It would be good to run a terminal of my modern Debian on it, either a second monitor with the terminal in it and modern stuff on the main monitor or booting into recovery mode and running only terminal programs and commands.&lt;/p&gt;&#xA;&lt;p&gt;This might be harder on a notebook which is limited to USB and HDMI ports, but easier on a desktop where you can perhaps the appropriate 'graphics' card, or maybe better called 'anti-graphics' card if it exists.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know hard or time consuming it would be to achieve this? On the surface it sounds like it might be easy, since these monochrome monitors and Unix were developed around the same time, but there are possibly some details of the electronics and signal transfer which could turn it into a nasty electronics project. If there were a simple adaptor from the notebook to the monochrome monitor, I may do it, but then if you have to design and build your own circuit and circuit board would probably leave it out for now. Then there is the software side of it, such a thing is probably not going to be 'plug and play', you're going to have to tell Debian what kind of monitor it is.&lt;/p&gt;&#xA;" OwnerUserId="19907" LastEditorUserId="6659" LastEditDate="2020-11-16T19:06:48.643" LastActivityDate="2021-03-14T05:07:04.110" Title="Connecting a Vintage Monochrome Monitor to a Modern PC" Tags="&lt;linux&gt;&lt;old-hardware-adaptation&gt;&lt;screen&gt;&lt;apple-iic&gt;" AnswerCount="6" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16940" PostTypeId="2" ParentId="16939" CreationDate="2020-11-16T05:39:19.510" Score="11" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Does anyone know hard or time consuming it would be to achieve this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Assuming you have a modern PC with VGA out, or you can put in a graphics card with VGA out, it's not hard at all, if you know a bit about how this works.&lt;/p&gt;&#xA;&lt;p&gt;You need to look up the horizontal and vertical sync frequencies that your monitor operates with (use the documentation, or google for online documentation, or if you know it was connected to e.g. an Apple II, then use those). Often the old monitors only worked at exactly these frequencies, and using others (in particular higher ones) could be dangerous for the monitor and even destroy some of the earlier monitors. So be careful.&lt;/p&gt;&#xA;&lt;p&gt;Then you need to program the graphics card to use those frequences. On Linux, with X, this is done with a &lt;strong&gt;modeline&lt;/strong&gt;; there are plenty of tutorials and tools that help you making one. On Windows, it's more tricky, and I'd have to google that, but I'd assume it can still be done editing some configuration files, or the registry.&lt;/p&gt;&#xA;&lt;p&gt;On the hardware side, you'll probably need a VGA converter to whatever input (e.g. coax) your monitor uses. Simplest way would be to just use one color channel (e.g. the green one). You can make those yourself with a bit of soldering skills.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-11-16T05:39:19.510" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16941" PostTypeId="2" ParentId="16939" CreationDate="2020-11-16T08:05:21.543" Score="8" Body="&lt;p&gt;The Apple IIc monitor (A2M4043) mentioned in the question takes a composite video signal. Some older laptops and graphics cards output composite or S-Video either directly or through a breakout cable. Otherwise, an external graphics adapter that interfaces to the PC via USB and outputs VGA is about $10-15. Once you're working in the analog domain, you have a few options, such as a pre-built adapter that converts VGA to composite or S-Video for about $25-30.&lt;/p&gt;&#xA;&lt;p&gt;Or you can take the &amp;quot;dumb terminal&amp;quot; approach. Gary Kaufman's &lt;a href=&quot;https://hackaday.io/project/173216-ascii-video-terminal&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASCII Video Terminal&lt;/a&gt; (an update to &lt;a href=&quot;https://geoffg.net/terminal.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Geoff Graham's original design&lt;/a&gt;) connects to a host PC through RS-232, outputs text to VGA and Composite, and takes a PS/2 or USB keyboard for sending commands back to the host computer.&lt;/p&gt;&#xA;&lt;p&gt;If your monitor were VGA, I would recommend &lt;a href=&quot;https://www.hackster.io/news/geoff-s-vt100-terminal-kit-supports-ansi-graphics-79e1c589bfe6&quot; rel=&quot;nofollow noreferrer&quot;&gt;Peter Hizalev's version&lt;/a&gt; (full kit &lt;a href=&quot;https://www.tindie.com/products/petrohi/geoffs-vt100-terminal-kit/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; for $52) with a much better font.&lt;/p&gt;&#xA;&lt;p&gt;Personally, I'm interested in the old TTL (Hercules/MDA) monitors such as the Zenith 12 inch ZVM-122 (amber) or ZVM-123 (green) CRT, but I don't know of &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12643/commodore-monitor-to-vga-or-hdmi&quot;&gt;a good way to drive these from a modern computer&lt;/a&gt;. Maybe modify Peter Hizalev's code for MDA timings, find an appropriate font, and cobble up an HD-15 to DE-9 adapter?&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2020-11-16T19:19:15.090" LastActivityDate="2020-11-16T19:19:15.090" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16942" PostTypeId="2" ParentId="16912" CreationDate="2020-11-16T10:14:25.340" Score="3" Body="&lt;p&gt;The story comes I believe from the IBM Scientific Computer being developed by in the late 70's/early 80's at IBM Hursley Research in the UK.&lt;/p&gt;&#xA;&lt;p&gt;This was a substantial 68000 based workhorse compared with the original IBM PC.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System_9000&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/IBM_System_9000&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19911" LastActivityDate="2020-11-16T10:14:25.340" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16943" PostTypeId="2" ParentId="16933" CreationDate="2020-11-16T12:35:27.220" Score="5" Body="&lt;p&gt;We had a clone of ZX Spectrum called &lt;a href=&quot;https://en.wikipedia.org/wiki/Didaktik#Didaktik_Gama&quot; rel=&quot;nofollow noreferrer&quot;&gt;Didaktik Gama&lt;/a&gt; (with single &lt;code&gt;m&lt;/code&gt; indeed). It had 16kB ROM and 80kB RAM total. As all Z80 based computers, it had 16bit address space - addresses 0 - 65535, with memory mapping like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Address          Contents&#xA;0 - 16383        16kB ROM (BASIC)&#xA;16384 - 32767    16kB RAM (starting with video memory)&#xA;32768 - 65535    two switcheable 32kB RAM banks (0 and 1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Upon boot there was a default bank 0 mapped, and it was up to user to &amp;quot;manually&amp;quot; &lt;a href=&quot;https://en.wikipedia.org/wiki/Bank_switching&quot; rel=&quot;nofollow noreferrer&quot;&gt;switch&lt;/a&gt; to the second bank. The data in the bank 1 survived reboot! That was a luxury back then, when normally you'd have to spend like 3-5 minutes after each reboot to load your programme from tape cassette. So many times, I just loaded my assembler development environment (I chose address above 32768 to load it) into bank 1 and it just stayed there (until a physical power off :)). If my assembler program screwed up, I just rebooted the computer, switched to bank 1 and everything was already there! Didn't have to wait 5 minutes again till my assembler environment loads from tape cassette :-)) Big luxury back then.&lt;/p&gt;&#xA;&lt;p&gt;I didn't work with &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum#ZX_Spectrum_128&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX Spectrum 128&lt;/a&gt;, but according to &lt;a href=&quot;http://www.breakintoprogram.co.uk/computers/zx-spectrum/memory-map&quot; rel=&quot;nofollow noreferrer&quot;&gt;the description here&lt;/a&gt; it had 128kB RAM (not including ROM) and it used similar &lt;a href=&quot;https://en.wikipedia.org/wiki/Bank_switching&quot; rel=&quot;nofollow noreferrer&quot;&gt;bank switching&lt;/a&gt; principle, just using the top 16kB address space (instead of 32kB) to switch between extra 16kB banks (scheme from the &lt;a href=&quot;http://www.breakintoprogram.co.uk/computers/zx-spectrum/memory-map&quot; rel=&quot;nofollow noreferrer&quot;&gt;above link&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8rpBt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8rpBt.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I personally preferred the 32kB banks because I had 32kB of continuous RAM safe from any reboot :-)&lt;/p&gt;&#xA;" OwnerUserId="15873" LastEditorUserId="15873" LastEditDate="2020-11-17T18:18:21.050" LastActivityDate="2020-11-17T18:18:21.050" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16944" PostTypeId="2" ParentId="16933" CreationDate="2020-11-16T15:11:28.753" Score="-2" Body="&lt;p&gt;The Z80 had a total address space of 128K, but one had to be very careful with ones coding. There was an early &amp;quot;multimedia&amp;quot; computer from- I think- Sony, which had a Z80, 128K of memory, and an optical disc.&lt;/p&gt;&#xA;&lt;p&gt;This is from memory, but I was given chapter and verse on this a number of years ago by somebody who'd (professionally) written games for Z80-based systems.&lt;/p&gt;&#xA;&lt;p&gt;The majority of opcodes assumed direct access to 64K of memory space (RAM+ROM with some arbitrary split, or with ROM only visible at boot, or with some form of bank switching).&lt;/p&gt;&#xA;&lt;p&gt;In addition, the I/O opcodes were documented as handling 256 (2^8) port addresses, but in actual fact there was an indirect mode which handled 64K (2^16) port addresses... I think there was something odd in there like the indirection being nibble-swapped.&lt;/p&gt;&#xA;&lt;p&gt;The Sony system (and perhaps some others) used this to support 128K of memory. I don't know what the performance was like, and I don't know how it handled I/O ports.&lt;/p&gt;&#xA;&lt;p&gt;I note the older discussion at &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7782/z80-16-bit-i-o-port-addresses&quot;&gt;Z80 16-bit I/O port addresses&lt;/a&gt; which deals fairly concisely with 16-bit port address issue. Google etc. has a lot of noise relating to the the Spectrum 128K, I don't know how the extra memory on that was addressed but generally speaking it looks as though the port address bits were used for the keyboard etc.&lt;/p&gt;&#xA;" OwnerUserId="18835" LastEditorUserId="18835" LastEditDate="2020-11-16T17:15:31.833" LastActivityDate="2020-11-16T17:15:31.833" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16945" PostTypeId="2" ParentId="16939" CreationDate="2020-11-16T19:38:25.567" Score="4" Body="&lt;p&gt;Creating a composite signal for a monochrome monitor should be quite easy.&lt;/p&gt;&#xA;&lt;p&gt;I remember using 4 or 5 resistors to mix green, brightness, HSync and VSync from a 9-pin EGA output to construct a perfectly usable composite video signal.&lt;/p&gt;&#xA;&lt;p&gt;You will probably not find CGA or EGA adapter in 2020, but the standard 15-pin VGA looks  almost as easy.&lt;/p&gt;&#xA;&lt;p&gt;The timing in VGA is programmable. 31.5kHz interlaced is trivial to construct as a modeline in Xorg and if you want Windows, a lot (all?) of video drivers have something resembling modelines in their INF files. HSync and VSync should be made positive.&lt;/p&gt;&#xA;&lt;p&gt;The three luminosity signals of VGA are 0-0.7v @ 75 ohm that are acceptable in the composite signal, except that you have to mix in hsync/vsync at 1v and they come in TTL level. You'll have to use 2 diodes and a few resistors.&lt;/p&gt;&#xA;" OwnerUserId="15647" LastActivityDate="2020-11-16T19:38:25.567" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16946" PostTypeId="2" ParentId="1402" CreationDate="2020-11-16T21:00:30.630" Score="0" Body="&lt;p&gt;If you're familiar with BASIC, &amp;quot;STOS&amp;quot; is probably your best choice, but it has its limitations, unless you know a little regarding assembly, in which case you can combine the two.  100 % assembly gives best results, but it's a hassle to debug.  8 Mhz processor remains 2 Mhz efficent, because it takes 4 CPU cycles per instruction : fetch, decode, execute and write.  Nevertheless, go with STOS.  It does most of the work for you, and you can use the compiler afterwards to make your game quicker.&lt;/p&gt;&#xA;" OwnerUserId="19916" LastActivityDate="2020-11-16T21:00:30.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16947" PostTypeId="2" ParentId="16939" CreationDate="2020-11-16T21:18:48.327" Score="5" Body="&lt;h2&gt;VGA was a huge and very bold rejection of NTSC!&lt;/h2&gt;&#xA;&lt;p&gt;TLDR of this whole history section: VGA and NTSC have nothing to do with each other. VGA was a blank-sheet design that smashed NTSC limitations &lt;em&gt;with extreme prejudice&lt;/em&gt; - and planned to never, ever, ever go back.&lt;/p&gt;&#xA;&lt;p&gt;Apple IIc monitors, like most monitors of that age, use the NTSC composite video standard in all respects that are not incompatible with their purpose.   For instance monochrome displays do not use the color modulation obviously. S-video displays deliver luma and chroma separately. RGB delivers R G and B as three separate monochrome channels.  Other than that, they are NTSC through and through.&lt;/p&gt;&#xA;&lt;p&gt;These were &lt;em&gt;tentative tiptoes&lt;/em&gt; away from traditional NTSC; they stayed with the standard in all other respects - frame rate, scan line rate, timing and screen dimensions.  This frustratingly limited screen resolution, right up until VGA finally smashed the &amp;quot;glass ceiling&amp;quot;: it threw away NTSC altogether and started with a blank-sheet new design.  The word was &amp;quot;we will no longer support using your TV as a display device; get a dedicated PC monitor&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;And THAT required the market to shift from &amp;quot;basically everyone using TVs as their display&amp;quot; in 1977 to &amp;quot;almost everyone using a dedicated PC monitor&amp;quot; - and remember at the time, monochrome monitors were $200-300 and color monitors were $700.  &lt;strong&gt;Even in the mid-1980s&lt;/strong&gt;, the need to drive a TV had strong sway - can you imagine the PCjr shipping with no ability to connect it to a TV?  Impossible!&lt;/p&gt;&#xA;&lt;p&gt;The only company ever to get away with smashing the NTSC monolith was IBM, with their niche &lt;em&gt;Monochrome Display Adapter (MGA)&lt;/em&gt; in 1981 (~350 scan lines &lt;em&gt;per field&lt;/em&gt; instead of the usual 200).&lt;/p&gt;&#xA;&lt;p&gt;So again it was IBM to introduce original VGA (640x480 non-interlaced per field), with their meant-to-be-revolutionary Personal System/2 (PS/2) line.  IBM was correct that nobody in the business world cared about TV support and would not object if asked to pay $700 for a dedicated-to-purpose color monitor.   &lt;strong&gt;The goal of VGA was to entirely free computer displays from the albatross of NTSC limitations. No NTSC support was even imagined; the goal was to leave NTSC in the dust&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*But mind you, 1987 was also when the Amiga was starting to &amp;quot;find its feet&amp;quot; in the marketplace.  Heck, Amiga's Video Toaster launched &lt;em&gt;in 1991&lt;/em&gt; and wound up becoming the king of midsize TV production for the whole decade - a lot of local TV markets used the Video Toaster for graphics and fonting of news, commercial production - Amigas even did the CGI on &lt;em&gt;Babylon-5&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;But the market message was clear: &lt;strong&gt;All-in, or all-out&lt;/strong&gt; of NTSC. No more &amp;quot;stuck in the middle&amp;quot;, no more &amp;quot;NTSC albatross dragging down PC resolutions&amp;quot;.&lt;/p&gt;&#xA;&lt;h2&gt;It isn't &lt;em&gt;resistors&lt;/em&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As such, there are only 2 ways to get from a VGA output to an NTSC-family display:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use a &lt;em&gt;frame buffer&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;Have the video card be versatile enough that you can change its parameters to actually output NTSC timing signals, even though they will be RGB of course.  From that point it's simply a matter of mixing the sync and luminance signals correctly, and yeah, that you can do with analog circuitry... &lt;strong&gt;but only if the video card is able to do &lt;em&gt;all&lt;/em&gt; the heavy lifting&lt;/strong&gt; because its designers were extra clever and &lt;em&gt;provisioned&lt;/em&gt; the ability to do that weird old thing.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Really, you're better off starting from scratch&lt;/h2&gt;&#xA;&lt;p&gt;The right way to solve this problem, &lt;em&gt;really,&lt;/em&gt; is to have a USB or Lightning attached &lt;strong&gt;external GPU&lt;/strong&gt; that inherently outputs NTSC composite/EGA/TARGA-24. StackExchange is not a product-recommendation site, but I gotta imagine &lt;em&gt;somebody&lt;/em&gt; makes or made such a thing, for old-school TV production if nothing else.  Technologically, it would be little more than a dongle.  Far cry from the stacked/stuffed TARGA-24 boards!&lt;/p&gt;&#xA;&lt;p&gt;Then, appropriate video drivers so your Linux/Windows/Mac system can see it as &amp;quot;just another display&amp;quot; like it does with other GPUs.&lt;/p&gt;&#xA;&lt;p&gt;This GPU certainly could maintain a 533++ x 400 internal buffer.  &lt;strong&gt;With monochrome NTSC displays, there is no inherent limit to the number of horizontal lines&lt;/strong&gt;, depending on how you feel about pixels being square.  And if the display supports interlacing, you can also get 400 vertical resolution, although picture elements would need to be at least 2px wide (so they are present on both fields) or they would flicker.&lt;/p&gt;&#xA;&lt;p&gt;Keeping in mind that most NTSC-era computers outputted a non-interlaced signal 200 pixels tall x 280-320 horizontal. Interlaced TVs were able to tolerate this.  Most likely, your Apple IIc monitor has the same vertical sweep hardware as other TVs of the day, and would accept interlacing.&lt;/p&gt;&#xA;" OwnerUserId="4330" LastActivityDate="2020-11-16T21:18:48.327" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16949" PostTypeId="2" ParentId="16933" CreationDate="2020-11-17T05:32:11.080" Score="1" Body="&lt;p&gt;Practically, you could map 64k of memory into the I/O space but you couldn’t execute code from it since it requires special op codes to read/write.  A typical application might be to store an audio recording and then read it out one sample at a time.  Even with 1980s 8-bit sampling and 8ksps playback you’d have room for only 8 seconds of audio, but might be enough for some dings and beeps for a video game.&lt;/p&gt;&#xA;" OwnerUserId="19372" LastActivityDate="2020-11-17T05:32:11.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16950" PostTypeId="2" ParentId="2386" CreationDate="2020-11-17T05:42:45.597" Score="0" Body="&lt;p&gt;Also bear in mind that PC performance was just becoming adequate for a proper GUI, and also display resolution - while Windows would run on CGA it was of limited usefulness and for most purposes you’d be better off with a character display.&lt;/p&gt;&#xA;" OwnerUserId="19372" LastActivityDate="2020-11-17T05:42:45.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16951" PostTypeId="2" ParentId="16893" CreationDate="2020-11-17T10:29:56.657" Score="1" Body="&lt;p&gt;That description also matches &lt;a href=&quot;https://en.wikipedia.org/wiki/Snatcher_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;SNATCHER&lt;/a&gt;, a Hideo Kojima classic, pretty much exactly.&lt;/p&gt;&#xA;" OwnerUserId="19922" LastEditorUserId="19922" LastEditDate="2020-11-17T12:31:27.553" LastActivityDate="2020-11-17T12:31:27.553" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16952" PostTypeId="1" AcceptedAnswerId="16953" CreationDate="2020-11-17T16:02:29.567" Score="4" ViewCount="258" Body="&lt;p&gt;I am trying to understand the trade-offs between scalar and vector machines, the threshold of complexity/transistor count/performance at which vector machines started to make sense.&lt;/p&gt;&#xA;&lt;p&gt;As data points, the Cray-1 was a vector machine, but the earlier CDC 6600 was not, and as far as I can tell, the CDC 7600 was not either.&lt;/p&gt;&#xA;&lt;p&gt;So, defining a vector supercomputer as a machine on which you can add or multiply two vectors of floating-point numbers with a single instruction, and stipulating that each vector must be at least as large as two double precision numbers,&lt;/p&gt;&#xA;&lt;p&gt;What was the first vector supercomputer?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-19T22:21:37.663" Title="What was the first vector supercomputer?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;floating-point&gt;&lt;cray&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16953" PostTypeId="2" ParentId="16952" CreationDate="2020-11-17T16:29:35.610" Score="6" Body="&lt;p&gt;There are two computers meeting your definition: the &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_STAR-100&quot; rel=&quot;noreferrer&quot;&gt;CDC STAR 100&lt;/a&gt; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/TI_Advanced_Scientific_Computer&quot; rel=&quot;noreferrer&quot;&gt;TI ASC&lt;/a&gt;, available in 1974. Both of these are memory-based vector computers, capable of issuing vector operations on data stored in memory, and storing the results in memory. The STAR could operate on vectors of up to 65,535 elements. Both systems could operate on double-precision floating-point numbers.&lt;/p&gt;&#xA;&lt;p&gt;The first register-based vector supercomputer was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cray-1&quot; rel=&quot;noreferrer&quot;&gt;Cray 1&lt;/a&gt;, which also introduced chained operations; both of these improvements were largely a result of the difficulties encountered on the STAR and ASC — it was very difficult to reach anything like the nominal performance on both systems.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-11-17T16:29:35.610" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16954" PostTypeId="2" ParentId="16930" CreationDate="2020-11-17T19:25:12.237" Score="2" Body="&lt;p&gt;Startup is when the CMOS data is accessed; it's likely that you&#xA;will need to reset PRAM (parameter random access memory, aka CMOS)&#xA;by holding down command-option-P-R for several seconds after&#xA;powering ON.   There will be a beep to acknowledge the reset,&#xA;usually one waits for the beep to repeat, then you can let go.&lt;/p&gt;&#xA;&lt;p&gt;The backup battery for the CMOS is (if memory serves)&#xA;a rechargeable lithium&#xA;cell (similar to Panasonic VL2020), which after all this time&#xA;may no longer accept a charge.   You've replaced it (good) but&#xA;it will still need a few hours of  power-on before it charges.&#xA;I hope the replacement IS the rechargeable type (it looks like&#xA;a primary coin cell, but it is NOT the same electrically).&lt;/p&gt;&#xA;" OwnerUserId="4108" LastActivityDate="2020-11-17T19:25:12.237" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16955" PostTypeId="2" ParentId="16939" CreationDate="2020-11-17T19:54:29.033" Score="3" Body="&lt;p&gt;Raspberry Pi has composite video out built in. There's a &lt;a href=&quot;https://raspberrypi.stackexchange.com/q/15311&quot;&gt;QA here&lt;/a&gt; which has details relevant to configuration.&lt;/p&gt;&#xA;&lt;p&gt;One of those with the appropriate adapter/cable may be the easiest way to get that old-fashioned experience you're looking for.&lt;/p&gt;&#xA;" OwnerUserId="19925" LastEditorUserId="19925" LastEditDate="2020-11-18T14:05:41.700" LastActivityDate="2020-11-18T14:05:41.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16957" PostTypeId="1" CreationDate="2020-11-17T23:55:53.480" Score="7" ViewCount="189" Body="&lt;p&gt;In a fit of nostalgia I decided to boot SunOS 4.1.4 up under emulation using &lt;code&gt;qemu-system-sparc&lt;/code&gt;. It all seems to work, but I'm trying to remove an annoying manual step.&lt;/p&gt;&#xA;&lt;p&gt;I'm starting &lt;code&gt;qemu-system-sparc&lt;/code&gt; like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#!/bin/sh&#xA;&#xA;exec qemu-system-sparc \&#xA;    -rtc base=2009-12-13 \&#xA;    -drive file=sunos-root.img,format=raw,bus=0,unit=3 \&#xA;    -drive file=sunos-home.img,format=raw,bus=0,unit=1 \&#xA;    -nographic \&#xA;    -bios ss5.bin \&#xA;    &amp;quot;$@&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This boots the root disk at SCSI target 3, which matches the Open Firmware devalias for disk:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ok devalias disk&#xA;disk           /iommu/sbus/espdma@5,8400000/esp@5,8800000/sd@3,0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Unfortunately, when booting with an Open Firmware ROM (like &lt;a href=&quot;https://github.com/andarazoroflove/sparc/blob/master/ss5.bin&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt;), something insists on setting the &lt;code&gt;diag-switch?&lt;/code&gt; setting to &lt;code&gt;true&lt;/code&gt; when the system boots:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Incorrect configuration checksum;&#xA;Setting NVRAM parameters to default values.&#xA;Setting diag-switch? NVRAM parameter to true&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That means the system tries (and fails) to boot from the network, dropping to the &lt;code&gt;ok&lt;/code&gt; prompt, which requires me to type &lt;code&gt;boot disk&lt;/code&gt; to actually boot the system.&lt;/p&gt;&#xA;&lt;p&gt;If I drop the SparcStation 5 ROM (i.e. get rid of the &lt;code&gt;-bios ss5.bin&lt;/code&gt; option), the system boots using OpenBIOS instead, which has a different problem: apparently the &lt;code&gt;disk&lt;/code&gt; alias in OpenBIOS doesn't point at target 3:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0 &amp;gt; boot disk Not a bootable ELF image&#xA;Not a bootable a.out image&#xA;No valid state has been set by load or init-program&#xA; ok&#xA;0 &amp;gt; boot disk1 Not a bootable ELF image&#xA;Loading a.out image...&#xA;Loaded 7680 bytes&#xA;entry point is 0x4000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Unexpectedly, the magic name is &lt;code&gt;disk1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So, I have a questions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is there any way to resolve the &lt;code&gt;Incorrect configuration checksum&lt;/code&gt; message that shows up when using Open Firmware? I suspect that would allow the system to boot correctly.&lt;/li&gt;&#xA;&lt;li&gt;Aternatively, is there any way to get OpenBIOS to boot from &lt;code&gt;disk1&lt;/code&gt; by default? You'd think that adding &lt;code&gt;-prom-env boot-device=disk1&lt;/code&gt; would do it, but that doesn't work.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7235" LastActivityDate="2020-12-11T22:30:21.120" Title="Automatic booting of SunOS 4.1.14 in qemu-system-sparc: OpenFirmware vs OpenBIOS" Tags="&lt;qemu&gt;&lt;solaris&gt;&lt;sunos&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16958" PostTypeId="2" ParentId="6529" CreationDate="2020-11-18T04:39:14.113" Score="2" Body="&lt;p&gt;I used Xmodem and variants to transfer to/from my 286 via RS232.  I remember that Data General had a program called BLAST although I suspect that it was a wrapper for Ymodem protocol.  Not long before that I wrote a driver for 110-baud 20mA current loop to interface a BBC micro to a teletype that I had acquired, which had a paper tape punch.  Sadly I was never able to persuade anyone else to get on board and so I was never able to use it for data transfer per se, although technically it would have done the job.  It was rather slower than using a cassette tape, but had the advantage that if you dropped your tape in a puddle you could dry and iron it and it would still work.&lt;/p&gt;&#xA;" OwnerUserId="19372" LastActivityDate="2020-11-18T04:39:14.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16959" PostTypeId="1" AcceptedAnswerId="16963" CreationDate="2020-11-18T12:06:25.027" Score="24" ViewCount="3804" Body="&lt;p&gt;In the old days, game consoles were usually sold with a &lt;a href=&quot;https://www.gamezone.com/originals/pack-in-games-through-the-years/&quot; rel=&quot;noreferrer&quot;&gt;pack-in game&lt;/a&gt;, including some iconic titles like 2600 Combat and NES Super Mario Brothers. This makes sense; it provided clear value for the customer, thereby presumably increasing sales.&lt;/p&gt;&#xA;&lt;p&gt;One thing that surprises me is that the pack-in games were in most cases literally that: a game cartridge packed into the box with the console. It seems to me that it would've been cheaper to put the ROM for the game directly onto the console mainboard, and let it be the default program the machine runs on boot when no other game is present, thereby saving the cost of a circuit board and cartridge case. A small saving to be sure, but small is greater than zero, and these machines were &lt;em&gt;very&lt;/em&gt; cost sensitive. (How cost-sensitive? For the 2600, Atari started with the already insanely cheap 6502 CPU, then talked MOS Technology into making an even more cutdown version with several address pins omitted, and followed up by putting only 128 &lt;em&gt;bytes&lt;/em&gt; of RAM in the console.)&lt;/p&gt;&#xA;&lt;p&gt;In addition, putting the game directly on the mainboard would halve the number of cartridges needing to be plugged in and out when switching between that and other games.&lt;/p&gt;&#xA;&lt;p&gt;Is there a reason I'm missing, why pack-in games were provided as actual cartridges rather than ROM chips on the mainboard?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2020-11-18T16:44:49.187" LastActivityDate="2020-11-25T22:34:28.323" Title="Why were pack-in games not usually incorporated on the console mainboard?" Tags="&lt;game-consoles&gt;" AnswerCount="6" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16960" PostTypeId="2" ParentId="16959" CreationDate="2020-11-18T12:12:09.900" Score="13" Body="&lt;p&gt;It's simple: this method allows only one way to run a game: put the cartridge into the slot and power it on.&lt;/p&gt;&#xA;&lt;p&gt;With games incorporated on the board, you have to provide some kind of boot loader, menu, switch, or some other way to select an onboard game.&lt;/p&gt;&#xA;&lt;p&gt;Another reasons could be:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;some cartridges had extended HW (more ROM, added RAM, etc.)&lt;/li&gt;&#xA;&lt;li&gt;it provides a more flexible way to change bundled games - they just put another set of cartridges to the box.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-11-18T12:12:09.900" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16961" PostTypeId="1" AcceptedAnswerId="16964" CreationDate="2020-11-18T12:12:56.320" Score="7" ViewCount="519" Body="&lt;p&gt;In 1985, Intel released the 80386, a particularly complex and sophisticated microprocessor for its day, consisting of 275,000 transistors, a rather large number for the day.&lt;/p&gt;&#xA;&lt;p&gt;How many transistors went into the accompanying 80387 floating-point coprocessor?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-18T16:15:13.010" Title="80387 transistor count" Tags="&lt;intel&gt;&lt;80386&gt;&lt;80387&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16962" PostTypeId="2" ParentId="16959" CreationDate="2020-11-18T12:26:57.550" Score="26" Body="&lt;p&gt;I suspect a major factor is the &lt;em&gt;availability&lt;/em&gt; of games. Shipping a game on a console’s motherboard requires that the game be complete quite a long time before the shipments start; including a game cartridge in the final box can be done with a game that’s ready much later.&lt;/p&gt;&#xA;&lt;p&gt;There have been instances where later iterations of a games console were changed to include a game; see for example &lt;a href=&quot;https://en.wikipedia.org/wiki/Alex_Kidd_in_Miracle_World&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Alex Kidd in Miracle World&lt;/em&gt;&lt;/a&gt; on the Sega Master System.&lt;/p&gt;&#xA;&lt;p&gt;There are a number of marketing advantages to using cartridges:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;not shipping a game in the console hardware avoids tying the console’s success to the chosen game’s success (which can be hard to determine before its release);&lt;/li&gt;&#xA;&lt;li&gt;the bundled game can easily be changed based on local preferences, seasonal preferences, or for game-related tie-ins (&lt;em&gt;e.g.&lt;/em&gt; a strong game franchise which can be used to sell consoles).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-11-18T13:16:25.203" LastActivityDate="2020-11-18T13:16:25.203" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="16963" PostTypeId="2" ParentId="16959" CreationDate="2020-11-18T15:25:12.453" Score="39" Body="&lt;p&gt;While I agree with &lt;a href=&quot;/a/16960/6659&quot;&gt;both&lt;/a&gt; &lt;a href=&quot;/a/16962/6659&quot;&gt;answers&lt;/a&gt; given so far, I feel they are touching only some aspects and somewhat miss the most important one:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;It is actually less expensive to not build a game into the console.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;With this fixed, several other abilities come for free:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Different default games for different markets&lt;/li&gt;&#xA;&lt;li&gt;&amp;quot;New&amp;quot; seasonal packages like &amp;quot;Terminator&amp;quot; for Thanksgiving, &amp;quot;ET&amp;quot; for Christmas&lt;/li&gt;&#xA;&lt;li&gt;And, as Stephen mentions, easy exchange of the default game if it sucks (*1)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Related to the last but somewhat less &amp;quot;glamorous&amp;quot;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Exchange of bugfixed versions without opening the console.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And of course, we all know,&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Marketing likes to be able to change a setup until the very last moment.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It seems to me that it would've been cheaper to put the ROM for the game directly onto the console mainboard,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. The cost of a PCB is directly related to its size and number of holes drilled. While integrating them &lt;em&gt;might&lt;/em&gt; save a bit of PCB area (not much), it will carry at least the same amount of holes to be drilled.&lt;/p&gt;&#xA;&lt;p&gt;But more importantly, as &lt;a href=&quot;/a/16960/6659&quot;&gt;Martin&lt;/a&gt; mentions, there need to be switching hardware. Even with just a switch, it will be far more expensive than the saved PCB area, not to mention at least two more holes. Anything more considerable than a mechanical switch (*2) will at least need some TTL and/or some I/O pin to control it. While the first adds &lt;em&gt;lots&lt;/em&gt; of through-holes, I/O is as well a rare resource on these early systems.&lt;/p&gt;&#xA;&lt;p&gt;In any case, mounting a default game in a simple console like the VCS will always  increase cost, as the relevant factors do not scale by volume. Such consoles already start at a production volume that maxes out the usual volume related savings, so every square centimetre and every hole will add linearly.&lt;/p&gt;&#xA;&lt;p&gt;This of course changes as soon as it's about a console that already includes a boot ROM. A great example here is the Vectrex which came with Asteroids preinstalled. The console had a preinstalled OS ROM, so adding a game was rather a case of more ROM/filling up the ROM. Having a Full 64 KiB Address range it was &amp;quot;simple&amp;quot; to put the built-in game at a different address and use OS software to detect the presence of an external game or not. Here it really comes down to just another socket.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and let it be the default program the machine runs on boot when no other game is present,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which does mean a way to detect and switch, adding to the cost of the base device by either hardware, or some OS plus hardware.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;thereby saving the cost of a circuit board and cartridge case.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But at the cost of an increased base PCB, increased by more than the cartridge PCB would be, making it more expensive. Not to mention that basic game PCBs had to be manufactured anyway. Similarly for cases: they are needed anyway and production cost is negligible once the forms are made.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In addition, putting the game directly on the mainboard would halve the number of cartridges needing to be plugged in and out when switching between that and other games.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Beside that this is a &lt;em&gt;very&lt;/em&gt; long term consideration, and it depends on how often one will use the base game - which is an argument that can be made for any game cartridge, as the first one is no different. Also, how often will people have played Combat after they got more sophisticated games?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there a reason I'm missing, why pack-in games were provided as actual cartridges rather than ROM chips on the mainboard?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's cost and flexibility, but mainly cost.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Historical Footnote:&lt;/h2&gt;&#xA;&lt;p&gt;Browsing thru Curt Vendel's faboulous book &lt;em&gt;Atari, Inc: Business is fun&lt;/em&gt;, to understand a &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17072/why-did-gran-trak-10-cost-so-much&quot;&gt;different question&lt;/a&gt;, I stumbled about a related direct quote:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;Shortly after the design was conceived, we went to an external ROM connector instead of the ROM being on board. Other concept ideas were to use a stack of ROM chips and be able to select a game, like a jukebox&amp;quot; recalls Steve Mayer&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(p.252/253)&lt;/p&gt;&#xA;&lt;p&gt;Steve Mayer was part of Cyan Engineering, a division of Atari, responsible for the development of many of Atari's hardware, including the VCS. The quote is reffered for as 1975 during the very first stage of VCS development.&lt;/p&gt;&#xA;&lt;p&gt;So while it's not surprising that various concepts were considered, it's nice to find a hint about.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Just think what a huge success the ET-package would have been. Having the game not on board makes refurbishing the unsold boxes to some other special edition a simple task of replacing the game cartridge (pack) and slapping a new banderole before shrink-wrapping again.&lt;/p&gt;&#xA;&lt;p&gt;*2 - A switch will of course add mechanical issues when being operated every single game change.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-25T22:34:28.323" LastActivityDate="2020-11-25T22:34:28.323" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16964" PostTypeId="2" ParentId="16961" CreationDate="2020-11-18T16:15:13.010" Score="12" Body="&lt;p&gt;I’ve wondered about this for a long time — manufacturers don’t seem to communicate FPU transistor counts as readily as CPU counts.&lt;/p&gt;&#xA;&lt;p&gt;The best I’ve found so far is &lt;a href=&quot;https://web.archive.org/web/20070328064115/http://coprocessor.cpu-info.com/index2.php?mainid=html%2Fcopro.php&amp;amp;tabid=4&amp;amp;page=1&quot; rel=&quot;noreferrer&quot;&gt;a claim on coprocessor.info&lt;/a&gt; that the 80387 contained approximately 120,000 transistors (quite a bit more than the 8087’s 45,000 transistors).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-11-18T16:15:13.010" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16965" PostTypeId="2" ParentId="16939" CreationDate="2020-11-18T17:00:43.680" Score="1" Body="&lt;p&gt;There are some solutions you could try.&#xA;You can search for a monochrome VGA (actually they are multisync monitors.&#xA;Search on ebay for an IBM 4707 or an IBM 8503/8504 for that 90s look. While you are at it and are lucky you could find a complete PS/2 you could use as a terminal or even try to run an older version of Linux of it (Model 90 were 486 and pentiums, so provider you have 80 floppies handy you colud install Slackware on it, as I did in the 90s). Otherwise old DOS terminal emulator are available.&lt;/p&gt;&#xA;&lt;p&gt;VGA green monochrome monitors were avaliable at the time, but weren't so common, but there were some Olivetti models or some unknowns&#xA;Taiwanese brands.&lt;/p&gt;&#xA;&lt;p&gt;You could also use as a second monitor for your main computer. There were some monochrome super VGA monitors that were used in typographies, they are lesser iconic but they do the work too.&lt;/p&gt;&#xA;&lt;p&gt;If you have a monochrome composite monitor, like the ones were used on Apple II and Commodore computers, you could use the composite out of a Raspberry Pi then attach a keyboard and you have another fully fledged computer with Linux on it.&lt;/p&gt;&#xA;&lt;p&gt;You could force a &amp;quot;true&amp;quot; VGA to sync at NTSC or PAL frequencies, but it's tricky and depends on how the legacy part of the video board is made.&lt;/p&gt;&#xA;" OwnerUserId="15814" LastActivityDate="2020-11-18T17:00:43.680" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16966" PostTypeId="2" ParentId="13803" CreationDate="2020-11-18T19:22:59.977" Score="-1" Body="&lt;p&gt;If Frederico Faggin had anything to do with the examples in the Z80 manual then I'd say he was responsible for more optimisations than just the ALU. The example code for performing a multiplication (not available in an instruction) used a bit shifting algorithm (i.e. binary logic approach) rather than repetitive addition (simplistic approach) reducing the number of additions by several orders of magnitude. It is quite brilliant, although sadly today, it seems too damn obvious. I hate it when you look back at how you were decades ago and can only reflect on how dumb you were rather than appreciate how much smarter you are now. Yeah, that smarts, pardon the pun.&lt;/p&gt;&#xA;&lt;p&gt;Anyhow, here's the algorithm (with a couple of minor errors in the comments) ...&#xA;&lt;a href=&quot;http://cpctech.cpc-live.com/docs/mult.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://cpctech.cpc-live.com/docs/mult.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19928" LastEditorUserId="7946" LastEditDate="2020-11-18T23:32:51.533" LastActivityDate="2020-11-18T23:32:51.533" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16967" PostTypeId="2" ParentId="16933" CreationDate="2020-11-18T20:05:50.547" Score="0" Body="&lt;p&gt;I owned a 128kb TRS-80 Mod IV.&lt;/p&gt;&#xA;&lt;p&gt;64kb was available at any one time.  There was a port you could write to that would swap in either of the extra 32kb banks in place of the normal ones--I forget all the details by now.&lt;/p&gt;&#xA;&lt;p&gt;In practice the only safe way to handle it was to disable interrupts (which means you couldn't do it for too long), swap it in, do whatever you needed to with the data there and swap it back out.  You had to ensure you code wasn't in the swap region and that your stack wasn't in the swap region.  Thus it was realistically only useful as data space, you couldn't run code from it.&lt;/p&gt;&#xA;&lt;p&gt;You could, however, store code there.  One of the most useful things I did with it was write a program that would on boot load all the swappable OS pieces into the upper bank, then intercept the call to load them and bring them in from memory instead.  (Some rather tricky coding as resident programs normally lived at the top of memory, but the OS swaps were fairly low in memory--there was no place to swap the bank to.  I ended up writing the loader as a normal program and the part it left behind was partially written in a small hole in OS memory and partially overwriting part of the OS swapper that was no longer needed.)&lt;/p&gt;&#xA;" OwnerUserId="1897" LastActivityDate="2020-11-18T20:05:50.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16969" PostTypeId="1" CreationDate="2020-11-18T21:53:24.757" Score="6" ViewCount="980" Body="&lt;p&gt;The &lt;code&gt;test&lt;/code&gt; command on Unix-like systems provides two special syntax forms for checking whether a string is empty or not:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;test -z &amp;quot;$foo&amp;quot; # the length of $foo is zero&#xA;test -n &amp;quot;$foo&amp;quot; # the length of $foo is nonzero&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;These forms are actually redundant, and equivalent to the following:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;test &amp;quot;$foo&amp;quot; = &amp;quot;&amp;quot;&#xA;test &amp;quot;$foo&amp;quot; != &amp;quot;&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Why are there two different forms? Is there a historical reason or justification for this design decision?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Background, as far as I know it. Bash descends from an older shell Almquist shell. The Almquist shell didn't internalize expressions. So you wrote them with using a utility called test which just resolved them to a return code,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;if test &amp;quot;$foo&amp;quot; = &amp;quot;&amp;quot;; then echo &amp;quot;Foo has a length of 0&amp;quot;; fi;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That would call the actually utility &lt;code&gt;/bin/test&lt;/code&gt; and test that first argument &lt;code&gt;$foo&lt;/code&gt; was equal to third argument ( an empty string).&lt;/p&gt;&#xA;&lt;p&gt;It also provided another option,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;if test -z &amp;quot;$foo&amp;quot;; then echo &amp;quot;Foo has a length of 0&amp;quot;; fi;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I don't understand why this syntax exists though.&lt;/p&gt;&#xA;" OwnerUserId="8579" LastEditorUserId="8579" LastEditDate="2021-01-18T00:05:31.453" LastActivityDate="2021-01-18T00:05:31.453" Title="Why does -z and -n exist in most shells and /bin/test?" Tags="&lt;unix&gt;&lt;shell&gt;&lt;design-choices&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16970" PostTypeId="2" ParentId="16959" CreationDate="2020-11-18T22:28:10.977" Score="20" Body="&lt;h3&gt;The cartridge is a &quot;free gift&quot; from a marketing standpoint and primes the customer to purchase more cartridges.&lt;/h3&gt; &#xA;&lt;p&gt;You say, &amp;quot;It provided clear value for the customer, thereby presumably increasing sales.&amp;quot; I would say a physical, discrete cartridge provides clear extra value to the customer as &lt;strong&gt;&lt;a href=&quot;https://medium.com/better-marketing/the-science-behind-free-gift-and-bundling-promotions-23a024e7a7ee&quot; rel=&quot;noreferrer&quot;&gt;a free gift&lt;/a&gt;&lt;/strong&gt;. A pack-in title included on the board, on the other hand, feels like part of the console and &lt;strong&gt;psychologically&lt;/strong&gt; might not be interpreted as a &amp;quot;free gift&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;The concept of &amp;quot;&lt;a href=&quot;https://medium.com/better-marketing/the-science-behind-free-gift-and-bundling-promotions-23a024e7a7ee&quot; rel=&quot;noreferrer&quot;&gt;a free gift&lt;/a&gt;&amp;quot; is classic marketing strategy that increases buyer willingness to pay and reduces returns. I think that, from a psychological/marketing perspective, including the pack-in titles on the mainboard would not make the buyer feel like they are getting an additional physical gift.&lt;/p&gt;&#xA;&lt;p&gt;Indeed, it seems that the goal was to sell to the consumer more cartridges rather than the game console (the &lt;a href=&quot;https://en.wikipedia.org/wiki/Razor_and_blades_model&quot; rel=&quot;noreferrer&quot;&gt;razor and blades model&lt;/a&gt;). Including a cartridge with the console might prime the consumer to to buy more cartridges in the future. Given that it was new technology, a console with a built-in game might have the issue that some buyers might not realize that they could insert new cartridges to play other games and would not seek these out.&lt;/p&gt;&#xA;" OwnerUserId="10661" LastEditorUserId="10661" LastEditDate="2020-11-19T15:22:59.690" LastActivityDate="2020-11-19T15:22:59.690" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16971" PostTypeId="1" AcceptedAnswerId="16974" CreationDate="2020-11-18T23:39:54.923" Score="5" ViewCount="170" Body="&lt;p&gt;I have been retrogaming with Octapolis on an emulated Commodore 64. Starting up the game presents a menu offering a choice between one or two players, and between music and sound effects. But I don't know how to use the menu. It does not respond to anything other than the fire button, which starts the game with one player and sound effects. Moving the joystick, pressing the cursor keys, or pressing space doesn't do anything. How is this supposed to work?&lt;/p&gt;&#xA;" OwnerUserId="19868" LastActivityDate="2020-11-19T02:12:53.077" Title="Menu in Octapolis" Tags="&lt;commodore-64&gt;&lt;emulation&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16972" PostTypeId="2" ParentId="16969" CreationDate="2020-11-19T00:45:52.750" Score="7" Body="&lt;p&gt;The argument from consistency:&lt;/p&gt;&#xA;&lt;p&gt;The majority of &lt;code&gt;test&lt;/code&gt; commands are of the form &lt;code&gt;-flag value&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For example,  &lt;code&gt;test -e foo.bar&lt;/code&gt; - does file foo.bar exist?&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;test -n &amp;quot;$VAR&amp;quot;&lt;/code&gt; fits into that model, and is therefore consistent.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The first mention of &lt;code&gt;test&lt;/code&gt; I could find in 'man' pages is to &lt;a href=&quot;https://www.in-ulm.de/%7Emascheck/bourne/PWB/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link to the PWB (Programmer's Work Bench) shell&lt;/a&gt; &lt;em&gt;aka&lt;/em&gt; Mashey shell, it in turn links to &lt;a href=&quot;https://www.in-ulm.de/%7Emascheck/bourne/PWB/if.1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt;, which describes a version of &lt;code&gt;test&lt;/code&gt; that has  both forms: &lt;code&gt;-n str&lt;/code&gt; and &lt;code&gt;str !- &amp;quot;&amp;quot;&lt;/code&gt;.&#xA;Note that &lt;code&gt;test&lt;/code&gt; and &lt;code&gt;if&lt;/code&gt; are the same program.&lt;/p&gt;&#xA;&lt;p&gt;(Curiously, the title of that second page is 'Thompson shell manual')&lt;/p&gt;&#xA;&lt;p&gt;PWB started on 4th. ed. Unix, and the Mashey shell was derived from Thompson's original &lt;code&gt;sh&lt;/code&gt;.  Given the focus of PWB, it's probable that this is the first appearance of 'if' and 'test'.&lt;/p&gt;&#xA;&lt;p&gt;There is also the paper &lt;a href=&quot;https://grosskurth.ca/bib/1976/mashey-command.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Using a Command Language as a High-Level Programming Language&lt;/a&gt;, written by Mashey, that describes &lt;code&gt;if&lt;/code&gt;.  In that paper, the &lt;code&gt;-n&lt;/code&gt; and &lt;code&gt;-z&lt;/code&gt; forms are not mentioned, only the string-comparison form.&lt;/p&gt;&#xA;&lt;p&gt;Two things are possible: (1) at the time of the paper, the full if/test syntax existed in PWB, but the paper is not intended to be exhaustive, or (2) the syntax was later expanded, and/or the 'test' command was added.&lt;/p&gt;&#xA;&lt;p&gt;Either way, I think this shell is the likely first appearance of 'test' in the shell; plausibly so because it was the explicit intent of PWD to be able to facilitate the programmer's tasks.&lt;/p&gt;&#xA;&lt;p&gt;We have the first; we can still only guess at the 'why'.  But I still think consistency has a lot to do with it, especially if, as appears possible, the string-comparison form existed before the &lt;code&gt;-z&lt;/code&gt;/&lt;code&gt;-n&lt;/code&gt; form.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-11-20T13:17:54.490" LastActivityDate="2020-11-20T13:17:54.490" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16973" PostTypeId="2" ParentId="16969" CreationDate="2020-11-19T01:55:26.190" Score="16" Body="&lt;p&gt;Because &lt;code&gt;$foo&lt;/code&gt; may itself start with a hyphen and look like an option or an operation, which would cause misinterpretation of the command line. Using &lt;code&gt;-z&lt;/code&gt; or &lt;code&gt;-n&lt;/code&gt; guarantees that no matter the contents of &lt;code&gt;$foo&lt;/code&gt;, it will never be interpreted as an option.&lt;/p&gt;&#xA;&lt;p&gt;The BSD 2.11 man page for &lt;code&gt;test&lt;/code&gt; says: &lt;em&gt;The test grammar is inherently ambiguous. In order to assure a degree of consistency, the cases described in the IEEE Std 1003.2 (&amp;quot;POSIX&amp;quot;), section D11.2/4.62.4, standard are evaluated consistently according to the rules specified in the standards document. All other cases are subject to the ambiguity in the command semantics.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;So whatever can be done to simplify writing unambiguous expressions, helps.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2020-11-20T21:00:10.173" LastActivityDate="2020-11-20T21:00:10.173" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="16974" PostTypeId="2" ParentId="16971" CreationDate="2020-11-19T02:12:53.077" Score="3" Body="&lt;p&gt;Use F1 and F3 to toggle one/two player game and music/sfx.&lt;/p&gt;&#xA;" OwnerUserId="19895" LastActivityDate="2020-11-19T02:12:53.077" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16975" PostTypeId="2" ParentId="16969" CreationDate="2020-11-19T11:53:48.690" Score="4" Body="&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This answer is to an extent speculative, and I’m not sure I can find sources for some of the claims I make here. So I cannot say for certain that this is the definitive reason. But I find it pretty plausible.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The &lt;code&gt;test&lt;/code&gt; command actually provides &lt;em&gt;three&lt;/em&gt; forms of (non-)emptiness checking:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;test &amp;quot;$a&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;test -n &amp;quot;$a&amp;quot;&lt;/code&gt; vs &lt;code&gt;test -z &amp;quot;$a&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;test &amp;quot;$a&amp;quot; != &amp;quot;&amp;quot;&lt;/code&gt; vs &lt;code&gt;test &amp;quot;$a&amp;quot; = &amp;quot;&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In contemporary Unix-like systems, they can be reliably distinguished by counting arguments to the &lt;code&gt;test&lt;/code&gt; command: one argument means the first form was used, two arguments mean it’s the second form, and three arguments mean it’s the third form. This method &lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/007908799/xcu/test.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;is recommended by SUS&lt;/a&gt; and by POSIX (IEEE 1003.1-2017 vol. 3, ch. 4, pp. 3290–3291). Historically though, different algorithms have been used: some implementations of &lt;code&gt;test&lt;/code&gt; parsed options like any other utility, matching command line arguments against a list of known options, which caused problems if the string to be tested happened to match one of them. The following transcript, for example, &lt;a href=&quot;https://www.jdpressman.com/2015/11/27/how-to-emulate-unix-v7-using-SIMH-(2015).html&quot; rel=&quot;nofollow noreferrer&quot;&gt;comes from Version 7 Unix&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ test '' ; echo $?&#xA;1&#xA;$ test x ; echo $?&#xA;0&#xA;$ test -r ; echo $?&#xA;test: argument expected&#xA;255&#xA;$ test '' = '' ; echo $?&#xA;0&#xA;$ test x = '' ; echo $?&#xA;1&#xA;$ test x = x ; echo $?&#xA;0&#xA;$ test -r = -r ; echo $?&#xA;1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Also, not all of these constructs were available on all systems. Some provided &lt;code&gt;-z&lt;/code&gt;, but not &lt;code&gt;-n&lt;/code&gt;, and apparently some even provided neither. Furthermore, there were shells in use in which empty string arguments were not passed to the command executed, so that &lt;code&gt;test &amp;quot;$a&amp;quot; = &amp;quot;&amp;quot;&lt;/code&gt; could run the &lt;code&gt;test&lt;/code&gt; command with just two or one arguments, and trigger a syntax error. For these reasons, in &lt;code&gt;configure&lt;/code&gt; scripts generated by GNU Autoconf, &lt;a href=&quot;http://ac-archive.sourceforge.net/doc/howto.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;emptiness testing is performed via the command &lt;code&gt;test &amp;quot;x$var&amp;quot; = x&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Add to that that some shell scripts did not even bother to quote variables: instead of writing &lt;code&gt;&amp;quot;$a&amp;quot;&lt;/code&gt; each time, they would write &lt;code&gt;$a&lt;/code&gt;, so an empty variable would have resulted in an empty string argument even if the shell supported those correctly. (This remains a common shell programming blunder to this day.)&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;-z&lt;/code&gt; option may have originated as a workaround for some of these problems:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Having an explicit operator ensures that tested strings would not be themselves interpreted as testing operators.&lt;/li&gt;&#xA;&lt;li&gt;With a buggy shell that doesn’t pass empty arguments correctly, &lt;code&gt;test -z &amp;quot;$foo&amp;quot;&lt;/code&gt; may result in &lt;code&gt;test&lt;/code&gt; being called:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If &lt;code&gt;foo&lt;/code&gt; is non-empty, with two arguments: &lt;code&gt;-z&lt;/code&gt;, and the contents of &lt;code&gt;foo&lt;/code&gt;; this then returns failure, as expected.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If &lt;code&gt;foo&lt;/code&gt; is empty, with one argument &lt;code&gt;-z&lt;/code&gt;, which the &lt;code&gt;test&lt;/code&gt; command may then interpret as either:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a check whether an empty list of remaining arguments is empty (which it is), or&lt;/li&gt;&#xA;&lt;li&gt;a check whether the &lt;code&gt;-z&lt;/code&gt; string is non-empty, which just so happens to have the same truth value as the emptiness of &lt;code&gt;&amp;quot;$foo&amp;quot;&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Either way, the command returns success – as expected.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The &lt;code&gt;-n&lt;/code&gt; command may have been added to similarly disambiguate the first form from a missing argument when the string to be tested matches a known &lt;code&gt;test&lt;/code&gt; operator, e.g. &lt;code&gt;test -n '-t'&lt;/code&gt; vs &lt;code&gt;test -t&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-11-19T21:53:33.823" LastActivityDate="2020-11-19T21:53:33.823" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16976" PostTypeId="1" AcceptedAnswerId="16980" CreationDate="2020-11-19T12:39:55.767" Score="3" ViewCount="281" Body="&lt;p&gt;I have fond memories of programming the 6502, though I never did any hardware hacking with it. I notice that the Altair, with its iconic front panel, was based on the Intel 8080, and from then on, Intel/Zilog and Motorola/MOS Technology ecosystems developed quite separately with limited crossover. The closest thing I know of to a 6502 equivalent of the Altair was the SWTPC which was based on the 6800 and did not have a similar front panel. I'm wondering whether a machine like the Altair &lt;em&gt;could&lt;/em&gt; have been just as easily built around the 6502, to what extent this is a matter of technology versus historical contingency.&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/MOS_Technology_6502&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The main change in terms of chip size was the elimination of the three-state from the address bus outputs. This had been included in the 6800 to allow it to work with other chips in direct memory access (DMA) and co-processing roles, at the cost of significant die space. In practice, using such a system required the other devices to be similarly complex, and designers instead tended to use off-chip systems to coordinate such access. The 6502 simply removed this feature, in keeping with its design as an inexpensive controller being used for specific tasks and communicating with simple devices. Peddle suggested that anyone that actually required this style of access could implement it with a single 74158.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That last sounds like hyperbole; a Google search suggests the 74158 was a quad multiplexer, so four of them plus glue logic would've been needed to build a multiplexer for a 16-bit address bus?&lt;/p&gt;&#xA;&lt;p&gt;But in any case, doesn't the Altair front panel depend on the ability to do exactly what is described, tri-state the CPU in order to take over as a DMA device? Would that be a significant obstacle to building such a system around the 6502 (at least without having to provide extra logic which would tend to negate the cost advantage of the CPU itself)?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-19T18:50:56.653" Title="Could the 6502 have worked with an Altair-style front panel?" Tags="&lt;hardware&gt;&lt;6502&gt;&lt;altair-8800&gt;&lt;front-panel&gt;" AnswerCount="2" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16977" PostTypeId="1" AcceptedAnswerId="16979" CreationDate="2020-11-19T13:29:39.247" Score="9" ViewCount="705" Body="&lt;p&gt;According to &lt;a href=&quot;https://jamiestarling.com/project-8088-the-8088-cpu-pinout/&quot; rel=&quot;noreferrer&quot;&gt;https://jamiestarling.com/project-8088-the-8088-cpu-pinout/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;One thing to note – the 8088 registers are made from dynamic memory cells – they have to be refreshed. The minimum clock speed for any 8088 is 2Mhz. The max depends on the chip you are using.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This was unexpected (at least to me), though logical from the viewpoint of saving chip area; dynamic memory cells are smaller than static ones. It means you cannot freeze the CPU, but the only microcomputer I know of on which that is a feature/requirement is the Altair 8800 and clones (which were based on the 8080 and Z80).&lt;/p&gt;&#xA;&lt;p&gt;The 8088 was transitional to the 16-bit era. Presumably the earlier, 8-bit CPUs would have had even more need to conserve chip area.&lt;/p&gt;&#xA;&lt;p&gt;Did any of the 8-bit CPUs use dynamic memory cells for registers? If not, why not? Do static cells run faster, did designers expect people to want to be able to freeze the CPU, or is there some other disadvantage?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-21T10:51:00.920" Title="Did any 8-bit CPUs use dynamic memory for registers?" Tags="&lt;hardware&gt;&lt;chip&gt;&lt;8-bit-microcomputers&gt;&lt;8088&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16978" PostTypeId="2" ParentId="6529" CreationDate="2020-11-19T14:01:15.377" Score="0" Body="&lt;p&gt;Sometimes, I used the ten-finger cables (ie retype), but for the most part, the 8-bit computer did its deed, and there really wasn't worth the effort to copy these things.  REXX does most of what rombasic did, and a program i cobbled together around rexx, did in the time it took to take a sip of coffee, sixty times what I had done in two years.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2020-11-19T14:01:15.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16979" PostTypeId="2" ParentId="16977" CreationDate="2020-11-19T15:01:59.360" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;One thing to note – the 8088 registers are made from dynamic memory cells – they have to be refreshed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This was unexpected (at least to me),&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Same to me. And I guess to anyone else as well. Ken Shirriff's &lt;a href=&quot;http://www.righto.com/2020/07/the-intel-8086-processors-registers.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;analysis of the 8086 registers&lt;/a&gt; clearly shows that they are not dynamic, but static, using the same inverter loop as the 8080 already did (and essentially every CPU of that time in one way or anotehr). The dynamic nature comes from different design elements - especially precharged busses, a very basic measure to speed up NMOS designs (see in part &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13355/how-did-the-6502-alu-perform-a-decrement/13357#13357&quot;&gt;this answer&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;It could end here, but it might be interesting to go thru the valid assumptions based from that quote:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It means you cannot freeze the CPU, but the only microcomputer I know of on which that is a feature/requirement is the Altair 8800 and clones (which were based on the 8080 and Z80).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They are not freezing the CPU, but simply taking over the bus, like in any other multi master system. The CPU is still clocked and running, but waiting on a bus access.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The 8088 was transitional to the 16-bit era. Presumably the earlier, 8-bit CPUs would have had even more need to conserve chip area.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;True. But then again, there is less to save as well.&lt;/p&gt;&#xA;&lt;p&gt;(Next to) Every saving comes with a cost to implement that. In case of dynamic RAM this is payed by the read out amplifiers, write back logic and refresh timing/cycles. So even if the CPU is made in a way that refresh can be done without spending clock cycles, the circuitry needed for reading/writing/refreshing is way more complex than a single or a few static cells. For dynamic RAM it pays, as here hundrets of rows share the same read/write/refresh logic. In a 16 KiBit RAM (4016) 128 bits (one from each row) share the same logic. That gives savings allowing sbstantial investment and still save over all.&lt;/p&gt;&#xA;&lt;p&gt;Even a register rich CPU as the 8080 does have &lt;em&gt;only six&lt;/em&gt; registers that can be (and are) handled as a group like a RAM (BC, DE, HL, WZ, PC, SP). Not much dough to form the additional circuitry.&lt;/p&gt;&#xA;&lt;p&gt;In addition it's worth to remember that registers on an 8080 are not formed as full figured RAM cells, but simply as two inverters hooked up as a loop - that's two transistors. Writing them is done by forcing a vaue in from a 'stronger' source. Replacing such a cell them by a dynamic one might not save anything at all, as that requires at least one transistor and a capacitor - the later eventually bigger than a single transistor.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did any of the 8-bit CPUs use dynamic memory cells for registers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not that I know of. The often cited dynamic behaviour of the NMOS 6502 is not due the registers itself, but the way intermediate values are handled on the busses.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If not, why not?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As shown, there is for one not much to save from, but the kind of register cells used are already pretty tiny. Even with the 8086 and its 15 register there is not enough savings - ignoring for a moment the implication of steady refresh on a CPU design).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Do static cells run faster, did designers expect people to want to be able to freeze the CPU, or is there some other disadvantage?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. Static are (over all) faster, but that wouldn't matter as CPUs not even use full figured static cells. It's important to keep in mind that while a register can be seen as a memory cell from a logic PoV, they are not, or often not, when implemented the same way than memory - Register design has different constrains.&lt;/p&gt;&#xA;&lt;p&gt;And holding a CPU steady on a per clock base (I guess that's what your &amp;quot;freezing&amp;quot; is supposed to mean) is done in different ways, depending on CPU type/structure.&lt;/p&gt;&#xA;&lt;p&gt;Long story short: While some CPU may have used classic static memory arrays for registers - and some even dynamic - most didn't, especially not early on and when different design may give advantages.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-19T20:39:49.740" LastActivityDate="2020-11-19T20:39:49.740" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16980" PostTypeId="2" ParentId="16976" CreationDate="2020-11-19T17:04:50.090" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;But in any case, doesn't the Altair front panel depend on the ability to do exactly what is described, tri-state the CPU in order to take over as a DMA device?&#xA;Would that be a significant obstacle to building such a system around the 6502 (at least without having to provide extra logic which would tend to negate the cost advantage of the CPU itself)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Depends on what you want to reach and how.&lt;/p&gt;&#xA;&lt;p&gt;For simply single stepping, i.e. let the CPU execute a single instruction per step, the classic solution is using the NMI and handle everything else in software, which is in line with the basic 6502 idea of do as much in software. This method was for example used with the KIM. When the SST switch is set, every instruction outside the KIM ROM (*1) fetched (marked by &lt;code&gt;SYNC&lt;/code&gt;) will issue a NMI, which is served by the ROM, giving control back to the monitor, allowing any operation to examine/change memory, I/O and as well registers (*2), something not possible by taking over the bus.&lt;/p&gt;&#xA;&lt;p&gt;Singe cycling, i.e. let the CPU execute one and exactly one clock cycle per step, needs to be done in hardware. Here it's simply about pulling &lt;code&gt;RDY&lt;/code&gt;. This works because every cycle of a 6502 is a memory cycle, so pulling &lt;code&gt;RDY&lt;/code&gt; will extend that memory access for as many cycles as RDY is active.&lt;/p&gt;&#xA;&lt;p&gt;While the basic logic is rather simple, it gets a bit more sophisticated when combining functions. Still, the whole circuitry for single stepping cycles and instructions needs just 6 TTL and fits on a single page of the Hardware Manual :&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8gvIZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8gvIZ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Figure 3.1 on p.125 of the &lt;a href=&quot;http://retro.hansotten.nl/uploads/files/MCS6500%20Hardware%20Manual%20jan%201976%20second%20edition.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;January 1976 second edition&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Of course this only lets one static examine bus state and all signals. To be able to read/write memory independent of the CPU, as set of tristate buffers and/or muxes would be needed to take over the bus while the CPU is halted. Plus the usual bunch of switches and LED ofc.&lt;/p&gt;&#xA;&lt;p&gt;Over all hardware effort would be comparable with Altairs front panel.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - That is &lt;em&gt;only&lt;/em&gt; the KIM ROM (6530-002 at $1C000), not the cassette extension (6530-003 at $1800).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-19T18:26:26.320" LastActivityDate="2020-11-19T18:26:26.320" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16981" PostTypeId="2" ParentId="16976" CreationDate="2020-11-19T18:50:56.653" Score="1" Body="&lt;p&gt;Even without three-state drivers, one could have fairly easily built a computer with an Altair-style front panel by using three-position switches that included a contact for the middle position which would connect the CPU.  For the machine to run, the address and data switches would need to be in the middle position to let the CPU drive them.  Such a design could be reasonable convenient if it included a couple of hinged levers that would allow groups of eight switches to be switched high or low simultaneously.&lt;/p&gt;&#xA;&lt;p&gt;Alternatively, a system could use a 25-pole switch to assert READY (freezing program execution with a contact that should break first), disconnect the address and data from the CPU, and connect address to the front panel and data to a ten-pole switch which would disconnect read-enable, connect the data switches, and assert write-enable.  While 25-pole switch might seem like a monstrosity, mechanical many-pole switching arrangements used to be somewhat common before the days of electronic control systems.  A robust way of doing the switching would be to use a group of roller-actuated microswitches operated by cams, but even contacts sliding on a PC board would likely have worked.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-11-19T18:50:56.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16982" PostTypeId="2" ParentId="16952" CreationDate="2020-11-19T22:11:45.773" Score="1" Body="&lt;p&gt;Another candidate, designed from 1972, prototype building started in 1974 was the &lt;a href=&quot;https://en.wikipedia.org/wiki/ICL_Distributed_Array_Processor&quot; rel=&quot;nofollow noreferrer&quot;&gt;ICL Distributed Array Processor (DAP)&lt;/a&gt; with a 64 * 64 bit SIMD architecture.&#xA;First was shipped in 1979, &lt;a href=&quot;https://www.computerconservationsociety.org/wg-mildap.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;(or perhaps 1978)&lt;/a&gt; and &lt;a href=&quot;https://onlinelibrary.wiley.com/doi/abs/10.1002/spe.4380160603&quot; rel=&quot;nofollow noreferrer&quot;&gt;Edinburgh University had one&lt;/a&gt; around the same time (1980ish).&lt;/p&gt;&#xA;&lt;p&gt;As I understand it, its 4096 Processing Elements (PEs) were 1-bit each, arranged as a 64x64 2-D array, so it could emulate 64 vectors each of 64 bits.&lt;/p&gt;&#xA;&lt;p&gt;It was operated as a coprocessor to the ICL2900-series mainframes.&lt;/p&gt;&#xA;" OwnerUserId="6700" LastEditorUserId="6700" LastEditDate="2020-11-19T22:21:37.663" LastActivityDate="2020-11-19T22:21:37.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16984" PostTypeId="2" ParentId="9593" CreationDate="2020-11-20T00:15:31.980" Score="3" Body="&lt;p&gt;Although the CDP1802 was implemented as a single chip, a preceding version was implemented as two chips.  I don't know exactly how functionality was split, but the architecture would have been very amenable to subdivision into two chips--one of which would hold the 4-bit P and X registers along with the sixteen numbered 16-bit registers and the logic to increment and decrement them and the other of which would hold just about everything else.  Because all addressing operations are performed using an address specified by one of the registers, only the &amp;quot;registers&amp;quot; chip would need a connection to the system address bus.&lt;/p&gt;&#xA;&lt;p&gt;If the main CPU gave the address chip a signal indicating when it should be performing an instruction fetch, the address chip could fairly easily watch the instruction stream and know on each cycle which address register should have its value placed on the address bus, which half (if either) should be placed on the data bus, and whether its value should be altered by being incremented or decremented, or having the upper or lower half fetched from the data bus.  It could also recognize some instructions to read the P or X registers from either half of the data bus, or output their values on the upper and lower halves of the data bus.&lt;/p&gt;&#xA;&lt;p&gt;If one observes the bus states on the CDP1802, it actually behaves as though implemented in a fashion somewhat like that.  The instructions to move values between the address registers and the data register (accumulator), for example, place the value on the data bus during the transfer.  Thus, having the accumulator in one chip but the address registers in the other wouldn't pose a particular problem since the data bus could be used to pass values between the two chips.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2020-11-20T18:48:28.423" LastActivityDate="2020-11-20T18:48:28.423" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16985" PostTypeId="2" ParentId="16959" CreationDate="2020-11-20T09:52:21.460" Score="2" Body="&lt;p&gt;There's another aspect, that at the time there were game consoles with pre-installed games and that they weren't non-expandable and actually weren't using microprocessor.&lt;/p&gt;&#xA;&lt;p&gt;A new console with a fixed set of games and an expansion slot, could have been looked like these older models and not being new and different. People could buy them but use only the preinstalled games and not the extra cartridges.&lt;/p&gt;&#xA;" OwnerUserId="15814" LastActivityDate="2020-11-20T09:52:21.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16986" PostTypeId="1" AcceptedAnswerId="16999" CreationDate="2020-11-20T10:09:44.617" Score="12" ViewCount="909" Body="&lt;p&gt;Cassette, being cheaper than a floppy disk drive, was a popular storage medium in the 8-bit era. Some computers such as the Sinclair Spectrum, just provided a port to plug in an existing cassette deck. However, you couldn't do that on a Commodore; instead, they sold a 'datasette' which was fundamentally a cassette deck like the ones designed for playing music, but connected to the computer with a special connector; you couldn't use an off-the-shelf deck.&lt;/p&gt;&#xA;&lt;p&gt;Clearly the datasette provided some reliability benefits, through uniformity if nothing else; you would be guaranteed to be using exactly the same model that the ROM tape routines were designed for. (And since the PET was designed for business as well as home use, it made sense to pay the cost of a datasette if that would improve reliability.)&lt;/p&gt;&#xA;&lt;p&gt;But was there anything else special about it? I'm guessing Commodore could just as easily have provided a plug compatible with any off-the-shelf cassette deck, and made the datasette optional if you wanted the uniformity benefit, that the special connector was just to increase revenue by making everyone buy a datasette. But maybe I'm wrong; maybe there was something special about the interface, that allowed some analog conversion step to be skipped or some such?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-20T20:50:14.533" Title="Did the Commodore datasette interface provide greater reliability?" Tags="&lt;hardware&gt;&lt;commodore&gt;&lt;cassette-tape&gt;&lt;storage&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16987" PostTypeId="2" ParentId="16986" CreationDate="2020-11-20T10:22:57.983" Score="3" Body="&lt;p&gt;I believe the datasette had the ADC built in, so it could then transmit digital signals to the computer. By optimising for digital output, the unit should have been more reliable, compared to a conventional tape player which would have bias settings for a more accurate output of analogue sound data.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2020-11-20T10:22:57.983" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16988" PostTypeId="2" ParentId="16986" CreationDate="2020-11-20T10:38:15.417" Score="18" Body="&lt;p&gt;The Datassette has a digital interface, and since it is not meant to process audio signals at all, it allows directly writing sharp digital magnetic transitions to the tape, using a single monophonic read/write head. The written pulses are always written at same amplitude, so there is no variation between equipment. Also when reading the transitions off the tape, the signal amplitude can be assumed to be written sharply and with defined amplitude, the transitions can be amplified and processed into digital pulses as they don't vary much.&lt;/p&gt;&#xA;&lt;p&gt;Compare that with audio interfaces of various different ranges of audio tape equipment. For certain amplitude of audio signal on wire, the amplitude written on tape is not standardized, and there might even be manual recording volume control. Audio equipment may also have bandwidth limiting so pulse edges stored on tape may not be so sharp. Audio is typically written by using a 100kHz bias sine wave to help linerarize the magnetic signal, so that can have a detrimental effect on the edge sharpness as well. Also playback amplitude is not standardized, and there might again be a manual playback volume control. The equipment might also have stereo tape head, which requires feeding identical audio to both stereo channels, or playing the signal back in a mono equipment has half the amplitude.&lt;/p&gt;&#xA;&lt;p&gt;Basically, creating a separate tape deck means that tapes are easily interoperable with different computers that have the same defined equipment to access the tapes. By using various audio tape recorders, the interoperability is much less, as it varies between different tape decks and their properties, and adjustable volume knobs make it hard to even save and load your own tapes reliably.&lt;/p&gt;&#xA;&lt;p&gt;Sure, the Datassette can still have interoperability problems, as there are several different revisions of the hardware, and the tape head azimuth angle can still be a variable that needs user tuning.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-11-20T10:38:15.417" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16989" PostTypeId="1" AcceptedAnswerId="16993" CreationDate="2020-11-20T12:06:07.187" Score="19" ViewCount="3559" Body="&lt;p&gt;Many early computers were sold as self-assembly kits (you get a box of parts and an instruction leaflet and have to solder them together yourself). For example, the Altair was priced at $439 kit, $621 preassembled.&lt;/p&gt;&#xA;&lt;p&gt;The obvious rationale for offering this option is that if you are willing to do the assembly work, this saves the vendor the cost of labor to do it, so it's natural to pass on the saving to the customer. But it's not clear to me that this stands up so well to closer scrutiny. Some percentage of the time, the assembled computer won't work. The vendor, having no way of knowing whose fault this is, has to take the machine back and try to debug it. This quickly adds up to much more expense than it would've been to just assemble and test the machine before sending it out, particularly since if every machine will be sold preassembled, the vendor can invest in things like wave soldering equipment that can do the job much more efficiently than a user doing it once on the kitchen table. Tandy, for example, considered selling the TRS-80 in kit form, but concluded it would be more trouble than it was worth. But if Tandy didn't think it was worth the trouble, why was it that other vendors did?&lt;/p&gt;&#xA;&lt;p&gt;Possible explanations:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Tradition. The personal computer industry developed from roots in the electronics hobby, where magazines such as Popular Electronics would publish projects, instructions on how to build something interesting; that is exactly how the Altair was first announced to the world. Originally, you would have to source the components yourself; a kit with all the components in a box, was a step up from that. It just takes time for tradition to change.&lt;/li&gt;&#xA;&lt;li&gt;Market segmentation. To maximize overall profit, you want to be able to charge a higher price to customers with more money, e.g. business versus hobbyists. Kit versus preassembled was a way to do that.&lt;/li&gt;&#xA;&lt;li&gt;Add an egg. There is a famous, possibly apocryphal but plausible story, about instant cake mix that sold better when it was made less comprehensive, requiring the customer to add an egg; this was interpreted as a finding that people like a product better when they have to put some work into it and get to feel some pride in creation. By this way of thinking, perhaps some hobbyists actively preferred soldiering their computer together themselves, and would be less interested in a preassembled machine.&lt;/li&gt;&#xA;&lt;li&gt;Speed. Yes, it's ultimately more efficient to do all the assembly in the factory. But hiring workers and setting up factories takes time. Just shoving the components in a box lets the business start ramping up &lt;em&gt;quickly&lt;/em&gt;, and that was what mattered in the early days of the industry, when companies like MITS were flooded with far more orders for the Altair than they could fulfill.&lt;/li&gt;&#xA;&lt;li&gt;Something else I haven't thought of.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Is there any evidence – ideally something written down at the time, but I would also be interested in any relevant experiences people have, or any logic that I have missed – to indicate which factors were the decisive ones?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4186" LastEditDate="2020-11-21T16:23:52.477" LastActivityDate="2020-11-22T01:38:45.013" Title="Why user-assembled kits?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;altair-8800&gt;" AnswerCount="8" CommentCount="16" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16990" PostTypeId="2" ParentId="16989" CreationDate="2020-11-20T12:22:47.077" Score="25" Body="&lt;p&gt;I believe that your presumption is incorrect:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The vendor, having no way of knowing whose fault this is, has to take&#xA;the machine back and try to debug it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The vendors did not have to take the machine back and if they did offer a repair service it was not free.  I don't recall that MITS (vendor for Altair) offered a repair service but I know that Heathkit did as well as SWTPC (Southwest Technical Products Corp.). You could send your non-functional self-built kit to them and they would fix it for a price depending on how much time and material was needed to get it operational.&lt;/p&gt;&#xA;&lt;p&gt;While I never purchased an Altair, I did purchase a number of other kits from that era and they were always sold &amp;quot;as-is&amp;quot;.  Any issues were the problem of the user, not the company.  Kits always came with schematics and other relevant documentation so that it was possible for end-users to debug, diagnose, and repair.  There were also local user groups which were invaluable for getting help from more experienced kit builders.&lt;/p&gt;&#xA;" OwnerUserId="13762" LastActivityDate="2020-11-20T12:22:47.077" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16991" PostTypeId="1" CreationDate="2020-11-20T15:05:51.783" Score="8" ViewCount="305" Body="&lt;p&gt;I definitely remember that sometime after OS/2 was introduced - while it was still in its very early days - after the breakup from Microsoft, long before Warp - IBM announced with great fanfare a tremendously large software project that was going to produce an entire suite of &amp;quot;productivity&amp;quot; software for it.&lt;/p&gt;&#xA;&lt;p&gt;I can't remember what it was called - it had a fancy IBM-like name for the entire suite - and can't find any reference to it.  I'd like to know what it was called and what, if anything, was delivered from it.  I have a distinct memory that it in fact was never delivered and was one of the major expensive failures of software development.  (But it could very well be a false memory as I don't see it listed anywhere as an expensive software project failure.) (The memory of its failure might be false, that is, not the memory that it was announced: that's definitely true.)&lt;/p&gt;&#xA;&lt;p&gt;I can't even remember what was going to be in the suite.  I have the vague idea that it included enterprisey stuff like accounting software and such, not necessarily word processor, spreadsheet, etc.&lt;/p&gt;&#xA;&lt;p&gt;(And I'm not talking about anything &amp;quot;serverish&amp;quot; that ran on OS/2, like IBM Database or their communications/networking stuff.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Clarification:&lt;/strong&gt; I am definitely &lt;em&gt;not&lt;/em&gt; talking about software IBM licensed and rebranded from some other company, e.g., from SPC or from Lotus.  This was definitely an &lt;em&gt;IBM&lt;/em&gt; project to specify, architect, design, and build.&lt;/p&gt;&#xA;&lt;p&gt;(This memory comes from when I worked at SPC (Software Publishing Corporation) on porting their as-yet-unshipped client-server database from OS/2 to Windows/386.  Or maybe it was Windows 3.0, I forget.  But I was following OS/2 rather closely in those days and definitely remember seeing stuff about this IBM effort.)&lt;/p&gt;&#xA;" OwnerUserId="332" LastEditorUserId="15334" LastEditDate="2020-11-21T09:31:21.293" LastActivityDate="2020-11-21T09:52:10.793" Title="What was IBM’s early attempt at an OS/2 office suite?" Tags="&lt;identify-this-software&gt;&lt;os2&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16992" PostTypeId="2" ParentId="16989" CreationDate="2020-11-20T15:12:48.550" Score="13" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;if every machine will be sold preassembled, the vendor can invest in things like wave soldering equipment that can do the job much more efficiently than a user doing it once on the kitchen table&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I think this is a key point. Back in the 1970s, you did not have the super-cheap build-it-in-China and ship extremely inexpensively that you have today. Container shipping. Electronic transmission of specifications. Large job shops set up for electronics. A lot of different pieces have evolved over the last 40 years, that make a &lt;em&gt;huge&lt;/em&gt; difference in producing an &lt;em&gt;assembled&lt;/em&gt; consumer electronics product at a low price.&lt;/p&gt;&#xA;&lt;p&gt;This also fits with a huge factor, particularly in the days of Altair &amp;amp; Heathkit (less so with Heathkit as time went on and they had experience/market knowledge): Nobody knew how many products they would sell: 100, 1,000, 10,000? If your only bespoke piece is a motherboard (and I mean &lt;em&gt;only&lt;/em&gt; the board, not populated/assembled) then your up-front costs are pretty low. Nearly everything else is buy 'x' quantity of each chip, transistor, LED, etc., and put them in bags, make more copies of the user manual (couldn't just laser print them, but copy machines were available), etc.&lt;/p&gt;&#xA;&lt;p&gt;If you are really confident that you will sell 10,000 of a product, it paid to get it done in a big factory (whether US or overseas, depending on timing and other factors) that has big equipment, or you actually invest in some of that equipment for your own factory. But if you have no idea how many you will sell, &amp;quot;kit form at a discount&amp;quot; makes a lot of sense. Plus charge enough extra for &amp;quot;assembled &amp;amp; tested&amp;quot; that you can afford to do that at a profit, even if you have to hire hourly workers on short notice to do the work.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2020-11-20T15:50:44.657" LastActivityDate="2020-11-20T15:50:44.657" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16993" PostTypeId="2" ParentId="16989" CreationDate="2020-11-20T15:35:32.270" Score="25" Body="&lt;p&gt;Back in the 80s, it was an industry and market very different from today's PC world.&lt;/p&gt;&#xA;&lt;p&gt;The audience were mainly do-it-yourself people who wanted to create things, and to understand how they worked. So, of your suggestions, &amp;quot;Tradition&amp;quot; best captures that aspect.&lt;/p&gt;&#xA;&lt;p&gt;You'll also find that, in line with that mindset, writing individual programs was a main topic. Nearly every microcomputer came with BASIC pre-installed or at least easily available. That also meant &amp;quot;do-it-yourself&amp;quot;, only at software level.&lt;/p&gt;&#xA;&lt;p&gt;So, the customers were typically very tech-affine, and many of them came from hobby electronics, having the necessary soldering skills to get the computer up and running. I did that myself, together with some friends plus some support from the equipment of a university EE department (oscilloscope, EPROM programmer etc.). We really liked to do it ourselves, and of course we were always tight on budget.&lt;/p&gt;&#xA;&lt;p&gt;Compare that with the typical PC customers today. Have them solder their computer? Write a computer program? Nope. Most of them won't even be able to install an SSD. So, selling computer kits doesn't stand a chance today. Even building your computer from components like motherboard, CPU, RAM and graphics card has become a niche market.&lt;/p&gt;&#xA;&lt;p&gt;But we currently see a revival of the do-it-yourself spirit in the Maker scene, where people create their own controllers (based on Arduinos and similar processors), doing hardware as well as software.&lt;/p&gt;&#xA;&lt;p&gt;And, as a funny side-note, an Arduino's capabilities are quite similar to the early microcomputers, so, after more than 30 years, I find myself again thinking in kilobytes instead of the gigabytes that we typically waste in our desktop PCs.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2020-11-20T15:35:32.270" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16994" PostTypeId="2" ParentId="16959" CreationDate="2020-11-20T15:39:09.650" Score="1" Body="&lt;p&gt;The main reason is that for reasons of per-unit cost, the firmware for a game machine would be in a mask-ROM which involves sending data to the chip manufacturer for metal fuses/links (could have a mask ROM version of a fusible link ROM too)  to be diffused onto the top layer of the ROM chip, then it would be tested, packaged and shipped.&#xA;As a result, there was a high one-off cost in putting code in mask-ROMs , and about a 3 month delay in implementing even a small change, as the chip had still to be packaged and tested.&lt;br /&gt;&#xA;If the product-with-game did not sell then you were left with a warehouse full of less-attractive machines.&lt;br /&gt;&#xA;Easier to expect the game manufacturer to take the hit on a less-than stellar sales performance for their game, while your machine sold many more times absolutely identical products.  (seem to remember $5000-$50000 one-off cost per mask ROM )&lt;/p&gt;&#xA;&lt;p&gt;And if you used EPROMS, it was cheaper to use a non-erasable version in plastic packaging - I can remember working with Teletext decoders that were test-programmed on the silicon wafer, UV erased on the wafer then plastic packaged as erased . Which allowed the final code to be programmed into packaged chips just before shipping to the customer.. except on the Bad Day when somebody shipped blank chips to a major manufacturer of TV sets, and the customer had a belt stop as the soldered-in blank chips were not in-system programmable..&lt;/p&gt;&#xA;&lt;p&gt;We are so used to Flash-ROMs now which can be reprogrammed many times and erased in circuit, that we think nothing of firmware updates.&lt;/p&gt;&#xA;&lt;p&gt;I am also reminded of the Acorn home computers that used some mask-ROMS but used the memory management capabilities of the ARM chip to map small areas of RAM for patches to the ROM, as this was cheaper than re-doing the mask-ROMS...&lt;/p&gt;&#xA;" OwnerUserId="19911" LastEditorUserId="19911" LastEditDate="2020-11-20T15:54:00.763" LastActivityDate="2020-11-20T15:54:00.763" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16995" PostTypeId="2" ParentId="16986" CreationDate="2020-11-20T18:34:59.590" Score="3" Body="&lt;p&gt;The datassette doesn't have the bias circuit on recording, because on digital data wasn't necessary, and also has sensors that informed if the motor was engaged. Also the power supply was from the computer so no batteries or extra plugs were involved.&lt;/p&gt;&#xA;&lt;p&gt;On the reproducing part a circuit designed to process a digital signal doesn't introduces unnecessary stages like volume and tone controls.&lt;/p&gt;&#xA;&lt;p&gt;There were dome DIY kits that made possible to use a normal cassette recorder with a c64 (see at page 59 below) but they were unreliable.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.rsp-italy.it/Electronics/Magazines/Nuova%20Elettronica/_contents/Nuova%20Elettronica%20095.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.rsp-italy.it/Electronics/Magazines/Nuova%20Elettronica/_contents/Nuova%20Elettronica%20095.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15814" LastActivityDate="2020-11-20T18:34:59.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16997" PostTypeId="2" ParentId="16989" CreationDate="2020-11-20T19:03:40.793" Score="3" Body="&lt;p&gt;At the time the numbers of unit made were was smaller than today, and technology for assembly electronics was way less advanced than today.&#xA;Was a labour-intensive process so shifting the work to the end user made sense, especially if the end user was an amateur without a lot of money, but some spare time and a love for electronics.&lt;/p&gt;&#xA;&lt;p&gt;Add to this that was a totally new market, so nobody know exactly what product should have be done. Selling an electronic organ was a more streamlined process, music shops already sold Hammonds and Rhodes, so having a Farfisa or a Vox wasn't a big deal because they were similar things with similar customer base.&lt;/p&gt;&#xA;&lt;p&gt;A microprocessor based home computer was a pretty new thing, event if at the time there were some &amp;quot;personal computer&amp;quot; from Olivetti and HP but they were basically programmable calculators and were designed for business and scientific use.&#xA;Olivetti made in 1976 the P6060 that was based on 8080 CPU, had a printer and a 8 inch floppy disk integrated but was really expensive and designed for banks and the like.&lt;/p&gt;&#xA;&lt;p&gt;Next, with Commodore PET, Apple II and TRS-80 home computers and office computer converged, due the decrease of costs, the units sold were more, there was a market for them, so a less labour intensive manufacturing was possible.&lt;/p&gt;&#xA;" OwnerUserId="15814" LastActivityDate="2020-11-20T19:03:40.793" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16998" PostTypeId="2" ParentId="16989" CreationDate="2020-11-20T19:55:32.240" Score="13" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Many early computers were sold as self-assembly kits&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. They were only more visible than the ready made machines.&lt;/p&gt;&#xA;&lt;p&gt;Kits were simply the best way to fill pages of magazines - and that's what most people saw and still find on the net - thus they got more 'screen time' than ready units. Especially early on, when there were no (semi-) professional publications for computers, but a well sorted assembly of electronic magazines which featured computer kits as just another kit to be build - among electronic dice and water level sensors for rain collection.&lt;/p&gt;&#xA;&lt;p&gt;In fact, when reading thru electronic magazines of the mid 70s, one can find quite a lot of different, ready made computers - most of them complete forgotten by now. Those ready made machines simply didn't need lengthy articles about how to solder a transistor and how to add some interface from scratch.&lt;/p&gt;&#xA;&lt;p&gt;It is these magazines we see (and some remember) when looking back, thus adding bias toward kits, as they came with a lot of magazines and articles to support them. Browsing thru professional publications of the same time gives a complete different picture of microcomputers.&lt;/p&gt;&#xA;&lt;p&gt;It's as so often: &lt;strong&gt;Looking back gives us a biased image that does not fully reflect history.&lt;/strong&gt; That's why serious history work needs more time than skimming a Wiki article or opening a single issue of Popular Electronics (Ask me why I know :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-21T14:06:17.137" LastActivityDate="2020-11-21T14:06:17.137" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16999" PostTypeId="2" ParentId="16986" CreationDate="2020-11-20T20:50:14.533" Score="0" Body="&lt;p&gt;There are three ways an attempt to load a tape can fail:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The loader reports success, but the data is incorrect.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The loader reports failure and does not read correct data.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The loader reports failure, but in fact loads the data correctly anyhow.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Commodore's tape system does a very good job of preventing failure #1.  Unfortunately, it writes two complete copies of information to tape purely for that purpose, rather than either using a cheaper means of achieving that purpose (such as a Fletcher's checksum) or using the redundant copy of the information to maximize the likelihood of successfully reading correct data even if the tape isn't perfect.  As it is, any imperfection on either copy of the written data will virtually guarantee a #2 or #3 failure, and the fact that two copies of the data must be perfect to achieve a good load makes success less likely than if there was only one copy, and it had to be correct.&lt;/p&gt;&#xA;&lt;p&gt;To be sure, there are some situations where failure #1 would be far more disastrous than #2 or #3, and the focus on ensuring that possible errors get reported may be useful, but there are many others where Commodore's approach is decidedly less than ideal.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-11-20T20:50:14.533" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17000" PostTypeId="1" CreationDate="2020-11-20T20:50:52.287" Score="7" ViewCount="295" Body="&lt;p&gt;I just happened upon this video:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=6tNizdyx-DE&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=6tNizdyx-DE&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's a selection of Amiga music produced using a program I've never heard of before: &amp;quot;Symphonie Pro&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Does anybody know anything about this program? Most particularly, the sound it produces seems vastly in excess of anything I've ever heard from an Amiga. It sounds less like a sample-based system, and more like an actual subtractive synthesizer, with convolutional reverb, distortion effects, phasing, etc. And the video description talks about how this program is &amp;quot;aimed at high-end Amigas&amp;quot; and uses &amp;quot;software DSP&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Thing is, real-time subtractive synthesis should be &lt;em&gt;vastly&lt;/em&gt; out of reach for any Amiga. Certainly programs like OctaMED could do realtime wavetable stuff. But I've run both FM synthesis and subtractive synthesis programs on the Amiga, and none of them were even remotely real-time. (E.g., multiple minutes to render a 6-second synthesizer riff. And it sounded awful anyway.) So I'm confused as to how this program works. Does anybody know anything about it?&lt;/p&gt;&#xA;" OwnerUserId="11695" LastActivityDate="2021-03-06T00:21:47.003" Title="How does Symphonie Pro actually work?" Tags="&lt;amiga&gt;&lt;music&gt;&lt;tracker&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17001" PostTypeId="1" AcceptedAnswerId="19623" CreationDate="2020-11-20T21:15:10.197" Score="4" ViewCount="372" Body="&lt;p&gt;On the Apple II, system beeps were typically just the 'Control-G' beep noise. However, many ProDOS-based applications from Apple Computer abandoned the firmware-based beep routine and instead used a softer alert sound instead.&lt;/p&gt;&#xA;&lt;p&gt;Was this softer alert sound built into the ProDOS kernel accessible through a MLI call, or was it just a widely copied piece of code that these applications used?&lt;/p&gt;&#xA;&lt;p&gt;For the answer, it would be helpful if there was also a link to the source, proper name, or how to use it if it was in-fact accessed via the MLI.&lt;/p&gt;&#xA;" OwnerUserId="382" LastActivityDate="2021-04-15T04:46:20.433" Title="Was the ProDOS beep part of the kernel or just a commonly duplicated piece of code?" Tags="&lt;apple-ii&gt;&lt;apple-dos&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17002" PostTypeId="2" ParentId="17000" CreationDate="2020-11-20T21:21:55.070" Score="10" Body="&lt;p&gt;There's nothing &lt;em&gt;magic&lt;/em&gt; with it as such. Simple subtractive synthesis and software sample mixing is &amp;quot;easily&amp;quot; possible on a 50 MHz 68060, which is the kind of Amigas this software targets. You would of course not run this on an unaccelerated Amiga 500.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://github.com/MastaTabs/Symphonie&quot; rel=&quot;noreferrer&quot;&gt;source code&lt;/a&gt; is available for download, and the program itself can be freely downloaded from &lt;a href=&quot;http://aminet.net/package/mus/edit/Symphonie&quot; rel=&quot;noreferrer&quot;&gt;Aminet&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;One random &lt;a href=&quot;https://amigaworld.net//modules/newbb/viewtopic.php?viewmode=flat&amp;amp;order=0&amp;amp;topic_id=25834&amp;amp;forum=27&amp;amp;post_id=485017&quot; rel=&quot;noreferrer&quot;&gt;thread&lt;/a&gt; where a few users discuss this tool tells us that some modules indeed required a 68060 CPU, and with a 68040 you could expect about 32 channels.&lt;/p&gt;&#xA;" OwnerUserId="333" LastActivityDate="2020-11-20T21:21:55.070" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17003" PostTypeId="1" AcceptedAnswerId="17035" CreationDate="2020-11-20T21:47:14.433" Score="5" ViewCount="221" Body="&lt;p&gt;The IBM/360 Macro Assembly language was quite powerful, allowing non-trivial compile-time string manipulation.&lt;/p&gt;&#xA;&lt;p&gt;Did macro packages exist which would facilitate programming at a (slightly) higher level, like writing  expressions in an infix form, allowing a form of structured programming, standardizing subroutine calling conventions, accessing bit-fields conveniently, etc?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The reason I'm asking it that one of the BESM-6 assembly languages was a syntax-level port of the IBM/360 assembler, including the macro language, e.g.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; macro&#xA; mnop &amp;amp;a,&amp;amp;b,&amp;amp;c,&amp;amp;d,&amp;amp;e,&amp;amp;f,&amp;amp;g,&amp;amp;h&#xA; aif (&amp;amp;a eq '').x&#xA; gbla &amp;amp;cnt  global arith. variable&#xA; mnote * comment &amp;amp;cnt&#xA;&amp;amp;cnt seta &amp;amp;cnt+1 &#xA; nop &amp;amp;a&#xA; mnop &amp;amp;b,&amp;amp;c,&amp;amp;d,&amp;amp;e,&amp;amp;f,&amp;amp;g,&amp;amp;h&#xA;.x anop&#xA; mend&#xA; MNOP  FIRST,SECOND,THIRD,FOURTH&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;expands to&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; 0001  0001        MACRO&#xA; 0002  0002        MNOP  &amp;amp;A,&amp;amp;B,&amp;amp;C,&amp;amp;D,&amp;amp;E,&amp;amp;F,&amp;amp;G,&amp;amp;H&#xA; 0003  0003        AIF   (&amp;amp;A EQ ’’).X&#xA; 0004  0004        GBLA  &amp;amp;CNT GLOBAL ARITH. VARIABLE&#xA; 0005  0005        MNOTE * COMMENT &amp;amp;CNT&#xA; 0006  0006 &amp;amp;CNT   SETA  &amp;amp;CNT+1&#xA; 0007  0007        NOP   &amp;amp;A&#xA; 0008  0008        MNOP  &amp;amp;B,&amp;amp;C,&amp;amp;D,&amp;amp;E,&amp;amp;F,&amp;amp;G,&amp;amp;H&#xA; 0009  0009 .X     ANOP&#xA; 0010  0010        MEND&#xA; 0011  0011        MNOP  FIRST,SECOND,THIRD,FOURTH&#xA; 0012  0005 * COMMENT 0&#xA; 0013 +0007+       NOP   FIRST&#xA; 0014  0005 * COMMENT 1&#xA; 0015 +0007+       NOP   SECOND&#xA; 0016  0005 * COMMENT 2&#xA; 0017 +0007+       NOP   THIRD&#xA; 0018  0005 * COMMENT 3&#xA; 0019 +0007+       NOP   FOURTH&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But the precompiled macro package for &amp;quot;higher-level&amp;quot; programming (likely also ported from IBM/360 with the appropriate architecture-dependent modifications) is missing.&lt;/p&gt;&#xA;&lt;p&gt;Here's a few examples of using the macros from the package:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;RЕG (М1 = 1,М2 = 2,М3 = 3,М4 = 4,М5 = 5)&#xA;КТ1 ВINDА (А(PAGE1)+KMD+М14)&#xA;FКТ3 SТRIТ (NCMD,0,0,8),(NARCH,0,40,8),(SND,0,16,8)&#xA;ЕХРR (FNM = $) FILE NAME&#xA;ЕХРR (SND = (OWNER,ADDR)) SENDER&#xA;ЕХРR (NUMREQ = (OWNER,REQ)) REQUEST NUMBER&#xA;IFА (QUEUE),Z=DISCRD NO REQUEST&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Searching the web for the most distinctive macro names &lt;code&gt;BINDA&lt;/code&gt; and &lt;code&gt;STRIT&lt;/code&gt; doesn't help.&lt;/p&gt;&#xA;&lt;p&gt;If a macro package with those or similar macros existed for the IBM/360 Macro Assembler, getting access to its source code would be of great help.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-11-22T01:42:14.523" Title="Were there &quot;higher level programming&quot; macro packages for the IBM Macro Assembler?" Tags="&lt;assembly&gt;&lt;ibm360&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17004" PostTypeId="2" ParentId="16989" CreationDate="2020-11-20T21:48:55.550" Score="3" Body="&lt;p&gt;The difference is the 2 years from 1975 to 1977 (when the Apple and TRS-80 came out). A 1975 Altair was programmed in opcodes using toggle-switches, and the output was flashing lights. Whee. By 1977 we had video, BASIC, keyboards and the ability to save programs on tape.&lt;/p&gt;&#xA;&lt;p&gt;The only reason to get an early 1975 Altair was to mess around with it as a technical artifact. Programming it with real hardware codes was cool (I saw one once as a kid -- it was). But you probably won't get your family interested. But as other excellent answers have noted, electronics skill was cooler and more common then. Putting cutting-edge chips together was the rest of what made it cool. My engineer dad built an electronic organ around then and he didn't even play.&lt;/p&gt;&#xA;&lt;p&gt;By 1977 the software side was much more friendly, accessible and entertaining. Neighbors who might watch the Altair's lights for a few minutes would wait for a turn to play TRS-80 Hangman, loaded from a tape once typed-in from a book. Your kid could realistically learn to program it. That market was about the end-product being fun. Like all products designed to be used, &amp;quot;some assembly required&amp;quot; would have been a drawback.&lt;/p&gt;&#xA;" OwnerUserId="15823" LastActivityDate="2020-11-20T21:48:55.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17005" PostTypeId="2" ParentId="17003" CreationDate="2020-11-20T22:37:27.510" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The IBM/360 Macro Assembly language was quite powerful, allowing non-trivial compile-time string manipulation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, reducing it to &lt;em&gt;&amp;quot;string manipulation&amp;quot;&lt;/em&gt; might fall short, as there is no similarity to the usual string manipulation languages. It's a rather full figured imperative programming language. Programs get executed when 'assembled'. It provides typed global and local variables (bool, integer, string), arrays (depending on assembler version) and more.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did macro packages exist which would facilitate programming at a (slightly) higher level,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not just 'slightly' higher.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;like writing expressions in an infix form, allowing a form of structured programming, standardizing subroutine calling conventions, accessing bit-fields conveniently, etc?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For structured programming (which ofc includes calling conventions and data structures) this has already be kind of answered in a question about stacks on stackless machines:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7199/6659&quot;&gt;How was C ported to architectures that had no hardware stack?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Example of a dummy program, calling a function and checking the result, copied from the answer:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    @ENTR TYPE=M,NAME=MAIN  ** Main programm, execution starts here&#xA;    ...&#xA;    @PASS NAME=FUBAR,PLIST=(FCB,RECORD)&#xA;    @IF   NE&#xA;    LTR   R15,R15         * Return Code Not Zero?&#xA;    @THEN&#xA;    @EXIT RC=#UNSATISFIED * Finish Program with Return Code UNSATISFIED&#xA;    @BEND&#xA;    ...&#xA;    @EXIT RC=#HAPPYENDING * Finish Program with Return Code HAPPYENDING&#xA;    @END&#xA;&#xA;&#xA;    @ENTR TYPE=L,NAME=FUBAR,PLIST=(FCB,RECORD)  * Function FUBAR, called by MAIN&#xA;    ...&#xA;    (do whatever needed with FCB and RECORD)&#xA;    ...&#xA;    @EXIT RC=0            * Finish Function with Return Code Zero&#xA;    @END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;While the mentioned &lt;a href=&quot;https://books.google.co.jp/books?id=L5qnBgAAQBAJ&amp;amp;pg=PA172&amp;amp;lpg=PA172&amp;amp;dq=columbus+assembler&amp;amp;source=bl&amp;amp;ots=l_uoM2ffMF&amp;amp;sig=ACfU3U2ysgrxLpOrZmEM_vAieVZINAkBag&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=2ahUKEwjfjb--lpLtAhXBlIsKHVCLD2UQ6AEwA3oECAEQAg#v=onepage&amp;amp;q=columbus%20assembler&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;COLUMBUS Assembler&lt;/a&gt; (*1) package was AFAIK a Siemens specific development, it was 100% F-Assembler macro code. In addition to the macro library there were as well listing formatters that turned a straight assembler listing into an intended or &lt;a href=&quot;https://en.wikipedia.org/wiki/Nassi%E2%80%93Shneiderman_diagram&quot; rel=&quot;noreferrer&quot;&gt;Nassi/Shneiderman&lt;/a&gt; listings.&lt;/p&gt;&#xA;&lt;p&gt;Besides that, projects/companies of course did build macro packages to enable easy handling of more complex issues. Plus, of course, every OS did supply macros for whatever services they had as well.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;getting access to its source code would be of great help&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, I do still have somewhere a tape with several versions (we did modify it quite a lot from its original version). In addition I did port it a long time ago to ORCA/M for the Apple II. Just, finding either may take some time.&lt;/p&gt;&#xA;&lt;p&gt;Then again, building such a lib for structured programming is, with &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Basic_Assembly_Language_and_successors#Assembler_E_and_F&quot; rel=&quot;noreferrer&quot;&gt;F-Assembler&lt;/a&gt; (or better) macros or higher/compatible, a mostly trivial task of building a parsing stack to check syntax and generate labels. Drop me a note, if you like some hints.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;D/E/F-Assembler (and its macro language) was published short after the /360 was introduced with F being the 'full' version, but also coming with a huge RAM requirement of 64 KiB :)) So this is most likely the base for your package.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The same package was available for COBOL, just then code generation was done by a preprocessor.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-21T01:17:13.063" LastActivityDate="2020-11-21T01:17:13.063" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="17006" PostTypeId="2" ParentId="17001" CreationDate="2020-11-20T22:57:50.793" Score="0" Body="&lt;p&gt;Interesting question. I do not remember anything like it.&lt;/p&gt;&#xA;&lt;p&gt;The Prodos MLI was rather frugal and offered, beside file system related access, only five funtions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GET_TIME,&lt;/li&gt;&#xA;&lt;li&gt;ALLOC/DEALLOC_TNTERRUPTand&lt;/li&gt;&#xA;&lt;li&gt;READ/WRITE_BLOCK.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But then again, I really used only ProDOS 8, so there might be more in ProDOS 16.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-21T11:11:38.143" LastActivityDate="2020-11-21T11:11:38.143" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17007" PostTypeId="2" ParentId="16991" CreationDate="2020-11-20T23:57:12.577" Score="7" Body="&lt;p&gt;It was &lt;a href=&quot;https://www-01.ibm.com/common/ssi/cgi-bin/ssialias?appname=skmwww&amp;amp;htmlfid=897%2FENUS289-201&amp;amp;infotype=AN&amp;amp;mhq=IBM%20Network%20Station%208361%20Series%20100&amp;amp;mhsrc=ibmsearch_a&amp;amp;subtype=CA&quot; rel=&quot;noreferrer&quot;&gt;OfficeVision&lt;/a&gt;. From the link:&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;The IBM OfficeVision/2 LAN Series provides office functions to&#xA;interconnected OS/2 Extended Edition and IBM DOS workstations on a&#xA;local area network (LAN).  Support is introduced in IBM&#xA;OfficeVision/2 Release 1 for mail, correspondence processing, address&#xA;book, file system and telephony.  In addition to enhancing portions&#xA;of IBM OfficeVision/2 Release 1, IBM OfficeVision/2 Release 2 adds&#xA;the functions of calendar, decision support, file cabinet, library,&#xA;extensive online help and tutorials, and an application platform.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;There's a write-up on &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_OfficeVision&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt; and now you have a name you can search for further links.&lt;/p&gt;&#xA;&lt;p&gt;I investigated OfficeVision for a ~1,000 user roll-out in 1990 and got to see demonstrations of the products (in Austin, Tx. Yay!). The main client ran on OS/2 though there was some support across the IBM range from PCs running DOS through mid-range to mainframe systems.&lt;/p&gt;&#xA;&lt;p&gt;The vision was impressive and was far ahead of anything available on MS-DOS or the then relatively unpopular MS Windows. (Windows only started to take off with the release of V3 in the same year.) The quote above lists specific features but the general idea was that you'd have an office automation tool where all the components were fully integrated. You wouldn't need to switch from a database to a spreadsheet, then format the results in a word processor and  a graphics program and finally run an email tool to send the results out. You could do all of this in a single program which IBM rather modestly called the editor.&lt;/p&gt;&#xA;&lt;p&gt;So what went wrong? Why didn't it take over the industry, instead leaving our OP scratching their head trying to remember its name?&lt;/p&gt;&#xA;&lt;p&gt;Firstly it was &lt;a href=&quot;https://trove.nla.gov.au/work/53553806&quot; rel=&quot;noreferrer&quot;&gt;expensive&lt;/a&gt;. The licences were expensive. It ran on an OS/2 workstation which meant more memory, preferably high end CPU models (i.e 386/486) and a restricted set of hardware drivers (hence limited hardware choices) so the hardware was more expensive than a typical DOS/Windows PC.&lt;/p&gt;&#xA;&lt;p&gt;Secondly, perhaps due to poor take-up resulting from the first point, the Officevision products that actually shipped didn't achieve their exalted vision and were seemingly no better than the existing DOS/Windows products that were cheaper and in any case already paid for and familiar. IBM ended up pulling the Officevision product and migrated users to Lotus Notes, a product I haven't used but doesn't seem to enjoy a reputation for user-friendliness.&lt;/p&gt;&#xA;&lt;p&gt;We didn't rollout Officevision to our users so I was saved from hordes of users complaining about their enforced Notes migration. (As we didn't proceed with the rollout I didn't have a chance to use the actual initial production products.)&lt;/p&gt;&#xA;" OwnerUserId="9177" LastEditorUserId="9177" LastEditDate="2020-11-21T00:10:21.137" LastActivityDate="2020-11-21T00:10:21.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17008" PostTypeId="1" AcceptedAnswerId="17011" CreationDate="2020-11-21T00:03:04.870" Score="2" ViewCount="214" Body="&lt;p&gt;I recently got my first Amstrad CPC and started refurbishing it. Now I wonder, I saw a video, on someone using the RPM test tool for the Amstrad. I found the download online, but this question might sound silly.... how do I get in todays infrastructure a *.dsk program on a 3&amp;quot; disk, when the disk drive itself is currently being refurbished. I am quite new to this, so I seek some advice from you here :)&lt;/p&gt;&#xA;" OwnerUserId="19948" LastEditorUserId="6659" LastEditDate="2020-11-21T00:52:27.810" LastActivityDate="2020-11-21T13:16:40.680" Title="First time using an Amstrad CPC 6128 Disc Drive" Tags="&lt;floppy-disk&gt;&lt;cpc&gt;&lt;amstrad&gt;" AnswerCount="3" CommentCount="0" ClosedDate="2020-11-21T14:15:25.003" ContentLicense="CC BY-SA 4.0" />
  <row Id="17009" PostTypeId="2" ParentId="17008" CreationDate="2020-11-21T01:06:00.413" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;. how do I get in todays infrastructure a *.dsk program on a 3&amp;quot; disk, when the disk drive itself is currently being refurbished.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I sense a basic plot hole: Even if you would get it on a disk (*1), how to start it from that disk if the drive is not operational?&lt;/p&gt;&#xA;&lt;p&gt;Puting that aside, a proper way would be &lt;em&gt;loading&lt;/em&gt; (only) the program needed via cassette port, like using  &lt;a href=&quot;https://github.com/pelrun/dsk2cdt2disc&quot; rel=&quot;nofollow noreferrer&quot;&gt;dsk2cdt2disc&lt;/a&gt; and a sound interface (or recording it on a casette), a parallel interface, or going ahead and getting yourself some &lt;a href=&quot;https://www.octoate.de/2009/03/21/floppy-emulator-with-sdmmc-card/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MMC/SD-Card interface&lt;/a&gt;, which can emulate a drive with files from an SD-CARD written on a PC.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Like by attaching another drive to some (older) PC and use some disk transfer program.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-11-21T01:06:00.413" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17011" PostTypeId="2" ParentId="17008" CreationDate="2020-11-21T10:28:18.567" Score="2" Body="&lt;p&gt;The easiest (and my recommended) way:&lt;/p&gt;&#xA;&lt;p&gt;Get an &lt;a href=&quot;http://www.cpcwiki.eu/index.php/M4_Board&quot; rel=&quot;nofollow noreferrer&quot;&gt;M4 board&lt;/a&gt;. This expansion allows to push .dsk images to an SD card connected to your CPC via a simple Web browser and Wi-Fi interface. From there, you could easily transfer the contents of the disk to a real 3&amp;quot; disk (if you still want that)&lt;/p&gt;&#xA;&lt;p&gt;Other ways are&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Disk transfer - This obviously needs a 3&amp;quot; floppy drive connected to your PC (not so easy, because you first need to have a PC that still has a &amp;quot;real&amp;quot; floppy controller, then you need to hardware-adapt the non-standard 3&amp;quot; drive to that controller).&lt;/li&gt;&#xA;&lt;li&gt;Tape transfer - If you only want to run one specific program on your CPC, you should obtain that program as a .TZX or .CDT &lt;strong&gt;tape&lt;/strong&gt; image, this can then be converted to a .wav sound file, which can then be transfered to the CPC using its tape input sockets with a .wav-player on the PC.&lt;/li&gt;&#xA;&lt;li&gt;Serial port transfer - If you have a serial interface for your CPC, you could also use that - The simplest way in your case would then probably be using the CP/M system disk that came with your CPC, boot into CP/M and use PIP to transfer files.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="780" LastActivityDate="2020-11-21T10:28:18.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17012" PostTypeId="2" ParentId="16977" CreationDate="2020-11-21T10:51:00.920" Score="2" Body="&lt;p&gt;It is my understanding that many microprocessors used dynamic logic. The likes of the 6800,6809 and the 6502 used this.&lt;/p&gt;&#xA;&lt;p&gt;This reference discusses one such technique:&#xA;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Four-phase_logic&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.m.wikipedia.org/wiki/Four-phase_logic&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19950" LastActivityDate="2020-11-21T10:51:00.920" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17013" PostTypeId="2" ParentId="17008" CreationDate="2020-11-21T11:13:26.480" Score="2" Body="&lt;p&gt;I have a &amp;quot;&lt;a href=&quot;http://www.gotekemulator.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gotek USB floppy emulator&lt;/a&gt;&amp;quot; in my CPC6128 (with ParaDOS and the &lt;a href=&quot;http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/cpc6128-parados-and-internal-3-5%27-floppy-drive-mod/&quot; rel=&quot;nofollow noreferrer&quot;&gt;3.5&amp;quot; FDD interface mod&lt;/a&gt;). It has the same connector as the floppy drive and the USB connector for the USB Flash Drive. You just copy the .dsk file to this USB Flash (under the specific name, see the manual), plug it into the Gotek, and voila, it works like the floppy drive! So I believe it could work as an &amp;quot;&lt;a href=&quot;http://www.cpcwiki.eu/index.php/Guide_on_how_to_connect_a_3.5%22_drive_to_a_CPC6128/664&quot; rel=&quot;nofollow noreferrer&quot;&gt;external floppy drive&lt;/a&gt;&amp;quot; together with the original 3&amp;quot; FDD, so you can use both drives and transfer software between them.&lt;/p&gt;&#xA;&lt;p&gt;(Disclaimer: I did not try it!)&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-11-21T11:13:26.480" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17015" PostTypeId="1" AcceptedAnswerId="17016" CreationDate="2020-11-21T13:37:18.027" Score="3" ViewCount="107" Body="&lt;p&gt;I am definitely at the very beginning of my refurb-journey and learning every step now on the way ... I struggle with the following: I saw a video by Noel's Retrolab where he troubleshooted a CPC.&lt;/p&gt;&#xA;&lt;p&gt;He connected his bench power supply to the CPC, but I just cannot figure out the cabling setup. How do you properly set this up? Are there adaptor cables from banana plug to the power jack? It seems he uses the female connector that leads to the display output?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dVwCa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dVwCa.png&quot; alt=&quot;Noel's Retro Lab&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19948" LastEditorUserId="6659" LastEditDate="2020-11-21T14:31:03.213" LastActivityDate="2020-11-21T19:15:56.493" Title="Amstrad CPC 6128 - Bench Power Supply Connection Setup" Tags="&lt;power&gt;&lt;cpc&gt;&lt;amstrad&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17016" PostTypeId="2" ParentId="17015" CreationDate="2020-11-21T14:17:18.363" Score="4" Body="&lt;p&gt;CPC Machines were powered by 5v DC from monitor to the 2.1mm socket on the machine. Any power supply that meets these requirements with the correct polarity should work. The plug has one outer and one inner contact. The outer contact is 0V, and the inner contact is 5V.&lt;/p&gt;&#xA;&lt;p&gt;However, disc models also needed a separate 12v for the drive. This is the curly wire ending in a plug that you can see leaving the board in the photo helpfully added to your question.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2020-11-21T19:15:56.493" LastActivityDate="2020-11-21T19:15:56.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17017" PostTypeId="1" CreationDate="2020-11-21T14:23:26.103" Score="4" ViewCount="391" Body="&lt;p&gt;I am quite a newbie to retrocomputing, and I don't know if such a question should be asked here. But I hope maybe some of you could help me.&#xA;I started reflecting on ways to send data without the internet and came up with the vague idea of using older cellular networks to slowly transfer code from one computer to another. Would it be possible to plug a computer (any type) to an old 2G (GSM) cellphone and act as a modem to receive raw binary code from another computer with a real 2G modem?&lt;/p&gt;&#xA;" OwnerUserId="19951" LastEditorUserId="6659" LastEditDate="2020-11-21T15:48:42.567" LastActivityDate="2020-11-21T23:47:09.910" Title="Using a GSM (2G) cellphone as a modem to send code" Tags="&lt;modem&gt;&lt;data-transfer&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17018" PostTypeId="2" ParentId="17017" CreationDate="2020-11-21T14:50:58.913" Score="1" Body="&lt;p&gt;The GSM standard defined a digital cellular network. Therefore, it has always been capable of doing data communications, computer-to-computer, from the very beginning. Nowadays, most public networks support 4G/LTE, and smartphones are advanced enough to serve as Wi-Fi hotspots. In the 2G time frame, you could do a similar function by connecting a serial cable from your PC laptop to a connector on the phone, putting the phone into a modem &amp;quot;mode&amp;quot;, and then connecting to a terminal server upstream. Most likely, you would use PPP to form the conduit for TCP/IP networking and this would allow your serial modem connection to get you onto the Internet. It was quite similar to &amp;quot;dial-up&amp;quot; networking, but substituted the GSM cellular network for the landline. [Personal note: I was part of an R&amp;amp;D team that took this to the next level by inventing &amp;quot;Bluetooth Dial-Up Networking&amp;quot; implementations that eliminated the wire.]&lt;/p&gt;&#xA;&lt;p&gt;Nowadays, I'm unsure the level of backwards compatibility available on public cellular networks. Maybe 2G and 2.5G (GPRS) connections still work for slow data transfer. This might vary from network to network and region to region. 4G normally falls back to 3G in areas of low coverage. I'm not sure if it falls back to 2G or not.&lt;/p&gt;&#xA;&lt;p&gt;Likely, a better approach today for wireless networking with retro computers is to connect them to local Wi-Fi. There are very inexpensive modules, such as the ESP8266, which can bridge a retro computer's serial port, to a LAN in your house using W-Fi. It's a pretty common use-case for people wanting to recreate the old &amp;quot;BBS experience&amp;quot;. Naturally, you can also use this approach to connect to Wi-Fi that in turn connects to 4G or 5G cellular through a smartphone or other &amp;quot;Hotspot&amp;quot; style device.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-11-21T17:25:42.540" LastActivityDate="2020-11-21T17:25:42.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17019" PostTypeId="2" ParentId="17017" CreationDate="2020-11-21T14:56:04.047" Score="0" Body="&lt;p&gt;I guess it's not fully insane idea - see &lt;a href=&quot;https://en.wikipedia.org/wiki/Circuit_Switched_Data&quot; rel=&quot;nofollow noreferrer&quot;&gt;CSD&lt;/a&gt;. And I remember there were &amp;quot;modems&amp;quot; for CSD, with a SIM card and a RS-232 interface... E. g. &lt;a href=&quot;https://en.four-faith.com/f1003-gsm-modem.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt; (google: &amp;quot;CSD modem&amp;quot;)&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-11-21T14:56:04.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17020" PostTypeId="2" ParentId="16989" CreationDate="2020-11-21T15:09:48.830" Score="1" Body="&lt;p&gt;In many cases, you can maximise profit by having one price for many people, and another price for a few - you just have to somehow achieve this. If you have one price, then the number of customers gets less as you increase the price, but the profit per item grows, and there is an optimal point. If you manage to offer a different price point at less convenience, then you will get more customers and more profits, without &lt;em&gt;everyone&lt;/em&gt; going for the lower price, which costs profits.&lt;/p&gt;&#xA;&lt;p&gt;That's why restaurants have &amp;quot;early bird&amp;quot; offers, shops have vouchers, because they get customers they would otherwise not get, without losing profits for the majority of customers. Same here; they sold &lt;em&gt;more&lt;/em&gt; computers this way, without losing on customers who were willing to pay the higher price anyway.&lt;/p&gt;&#xA;&lt;p&gt;Today you couldnt do this, because very very few people would be able to assemble say a MacBook from parts, and even fewer could assemble it and get a working computer.&lt;/p&gt;&#xA;" OwnerUserId="1959" LastActivityDate="2020-11-21T15:09:48.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17021" PostTypeId="2" ParentId="17017" CreationDate="2020-11-21T15:57:59.663" Score="5" Body="&lt;p&gt;Sure, as long as these phones have a build in 2G modem interface - usually provided via a serial line and behaving like a hayes modem. So &lt;a href=&quot;https://www.cnet.com/products/gsm-kit-siemens-s4-sony-cmd-x1000/&quot; rel=&quot;nofollow noreferrer&quot;&gt;check the specs&lt;/a&gt;. There were also separate 'air' modems, essentially a phone in a box doing the same - or even &lt;a href=&quot;http://nokiamuseum.info/nokia-card-phone/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCMCIA cards&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Finding either might be less easy as all (especially the serial cables) were rather expensive and thus rare - after all, who had the money to transfer data over an expensive mobile phone connection back then?&lt;/p&gt;&#xA;&lt;p&gt;Not as old, and maybe more phun are GSM modem modules which are &lt;a href=&quot;http://www.gsm-modem.de/module-gsm.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;still available today&lt;/a&gt;. They are essentially a GSM phone on a single carrier board, meant to be integrated into custom PCBs. The stuff used in renal bikes and alike.&lt;/p&gt;&#xA;&lt;p&gt;Technology wise GSM was made to support modem connections at at least 9600 Bd looking like regular dial up from a user (computers) perspective.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line, read the specs and get it going.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-21T23:47:09.910" LastActivityDate="2020-11-21T23:47:09.910" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17022" PostTypeId="2" ParentId="17017" CreationDate="2020-11-21T16:43:14.817" Score="1" Body="&lt;p&gt;Yes.  GSM has support for both circuit-switched data (CSD) and packet-switched data (GPRS).  As late as the original iPhone, GPRS was the main standard for mobile data with smartphones and similar devices.  GPRS service remains available from many carriers, and most modern cell modems will fall back to GPRS if UMTS/LTE is not available.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-11-21T16:43:14.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17023" PostTypeId="1" AcceptedAnswerId="17026" CreationDate="2020-11-21T19:26:10.613" Score="3" ViewCount="473" Body="&lt;p&gt;While it is not used as much nowadays, wave soldering was a big advance in the productivity of manufacturing electronics, compared to soldering all the components by hand. It consists of placing all the components on the board, then passing the board over a standing wave of solder.&lt;/p&gt;&#xA;&lt;p&gt;The part I have not been able to find an answer to: intuitively that seems like it should uniformly coat the entire underside of the board with solder. How does the stuff know it is supposed to only stick to the components?&lt;/p&gt;&#xA;&lt;p&gt;(I don't know whether this technology has changed significantly over the decades, but if it matters, I am particularly interested in how it worked in the sixties and seventies when it was replacing hand soldering, and with through-hole rather than surface-mount components.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-21T20:02:47.283" Title="How did wave soldering work?" Tags="&lt;hardware&gt;&lt;printed-circuit-board&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2020-11-22T13:54:11.210" ContentLicense="CC BY-SA 4.0" />
  <row Id="17024" PostTypeId="1" AcceptedAnswerId="17027" CreationDate="2020-11-21T19:28:13.693" Score="5" ViewCount="260" Body="&lt;p&gt;Back in the day, SCSI was the way to go.  I remember my high school having a single 5Mb Sider hdd connected to an Apple //e - which seemed &lt;em&gt;awesome&lt;/em&gt; after endlessly swapping floppies.  Not long after, I lusted for and purchased a 20Mb Xebec 9710 (or 9720?) for my Amiga 1000.&lt;/p&gt;&#xA;&lt;p&gt;More recently however, I've managed to acquire two First Class Peripherals Sider hard disks for my Apple //e, and a Xebec 9710 to pair with my Amiga 1000; but before I start connecting and terminating and formatting and troubleshooting and pulling out my hair, etc.  I wondered what might still be lurking on these drives.&lt;/p&gt;&#xA;&lt;p&gt;Conveniently, I also have a working Pentium III with both Jaz and Syjet drives connected via a Buslogic FlashPoint SCSI card.  So I started to think it might be possible to connect the Sider/Xebec drive(s) one at a time to the Buslogic card via the external connector and (assuming the drives still work, and the termination is correct, and drive id doesn't conflict) I might be able to 'query' the drives in some fashion.  This of course leads to my question, would it be possible to actually 'detect' what file system the drives were/are formatted with?&lt;/p&gt;&#xA;&lt;p&gt;I'd hazard a guess the Sider drives are probably formatted for use with ProDOS? - but the Xebec drive could potentially be anything.  It might be interesting to do some detective work before trying to flatten the drives and start over.  It's a long shot, but you never know what kind of history you might find lost on a seemingly random drive from 30+ years ago.&lt;/p&gt;&#xA;&lt;p&gt;Speculating, I suspect if this is possible it would require a version of Linux (maybe a bootable CD like Knoppix) because I doubt Windows 98 and or MS-DOS is going to get me very far.&lt;/p&gt;&#xA;&lt;p&gt;Is what I am asking even possible?&lt;/p&gt;&#xA;" OwnerUserId="2080" LastActivityDate="2020-11-22T14:38:22.560" Title="How to identify the filesystem for an old SCSI drive?" Tags="&lt;hard-disk&gt;&lt;file-system&gt;&lt;scsi&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17025" PostTypeId="2" ParentId="17023" CreationDate="2020-11-21T19:38:18.250" Score="4" Body="&lt;p&gt;The PCB is coated with a solder mask. That's usually the green shiny layer on the surface of the PCB. There are openings in the solder mask on places that need solder. So the solder only sticks to exposed copper pads and component legs.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2020-11-21T19:38:18.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17026" PostTypeId="2" ParentId="17023" CreationDate="2020-11-21T19:45:23.120" Score="7" Body="&lt;p&gt;&lt;em&gt;(There is a rather complete &lt;a href=&quot;https://en.wikipedia.org/wiki/Wave_soldering&quot; rel=&quot;noreferrer&quot;&gt;Wiki-article about&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;While it is not used as much nowadays,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Still widely in use, just not so much with fine electronics.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;then passing the board over a standing wave of solder.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's rather the edge of a 'solder-fall', but there were various designs over time.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How does the stuff know it is supposed to only stick to the components?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Solder isn't a glue, but joins by diffusing into the surface of another metal (*1,*2), thus it doesn't stick to anything. So it does not stay on a PCB just by touching it. Old radio boards (but even early computer boards, most notably SWTPC or OSI) are made that was. quite visible by having 'thick' and 'round' traces.&lt;/p&gt;&#xA;&lt;p&gt;To avoid solder on such and parts that should not carry any, a &lt;a href=&quot;https://en.wikipedia.org/wiki/Solder_mask&quot; rel=&quot;noreferrer&quot;&gt;solder mask&lt;/a&gt; is used. That's essentially a layer of lacquer printed on top of the traces, wherever no solder needs to go. It also helps increasing fine details&lt;/p&gt;&#xA;&lt;p&gt;In addition the PCBs are preheated, so the solder moves in right away. Naturally the traces heat better than the PCB. In fact, heating (degree and speed) - and later cooling - is a major part of making a wave soldering work.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I don't know whether this technology has changed significantly over the decades,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It did, but that doesn't matter much.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - That's what &lt;a href=&quot;https://en.wikipedia.org/wiki/Soldering&quot; rel=&quot;noreferrer&quot;&gt;soldering&lt;/a&gt; is about, melting just one of the metals. In contrast to &lt;a href=&quot;https://en.wikipedia.org/wiki/Welding&quot; rel=&quot;noreferrer&quot;&gt;welding&lt;/a&gt; were both sides (usually the same metal) that get melted and crystalize again in a unified area - and no, &lt;a href=&quot;https://en.wikipedia.org/wiki/Sintering&quot; rel=&quot;noreferrer&quot;&gt;sintering&lt;/a&gt; is again different, but &lt;a href=&quot;https://en.wikipedia.org/wiki/Brazing&quot; rel=&quot;noreferrer&quot;&gt;brazing&lt;/a&gt; is essentially the same a soldering.&lt;/p&gt;&#xA;&lt;p&gt;*2 - It's not any 'metal', but a specific one. Solder is especial formulated to interact at a certain temperatures with a certain metal.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-21T20:02:47.283" LastActivityDate="2020-11-21T20:02:47.283" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17027" PostTypeId="2" ParentId="17024" CreationDate="2020-11-21T19:52:12.360" Score="14" Body="&lt;p&gt;Yes, this is possible.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.darwinsys.com/file/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;file&lt;/code&gt;&lt;/a&gt; utility can recognise many disk partition layouts and file systems. If you connect your drives to your Pentium III system, running a version of Linux, they should appear as &lt;code&gt;/dev/sd?&lt;/code&gt; devices. To simplify further analysis, you should copy their contents to a file:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo ddrescue /dev/sdX backup.img backup.map&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(replacing &lt;code&gt;X&lt;/code&gt; as appropriate), then &lt;code&gt;file backup.img&lt;/code&gt; will tell you what you have.&lt;/p&gt;&#xA;&lt;p&gt;This uses &lt;a href=&quot;https://www.gnu.org/software/ddrescue/ddrescue.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;ddrescue&lt;/code&gt;&lt;/a&gt; which will allow as much data as possible to be recovered from marginal drives; the map file allows rescue attempts to be interrupted, resumed, and analysed (using &lt;a href=&quot;http://ddrescueview.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;ddrescueview&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Once the data is copied, you can &lt;code&gt;chown&lt;/code&gt; the backup file to your regular user, and use other tools to analyse the backup.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-11-22T14:38:22.560" LastActivityDate="2020-11-22T14:38:22.560" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17028" PostTypeId="1" CreationDate="2020-11-21T20:23:19.360" Score="0" ViewCount="66" Body="&lt;p&gt;Of course the unthinkable happened and I lost one cap key spring while cleaning the keyboard. I am still searching but assuming all things went south, what would be the best solution to replace them? Just another keyboard from ebay? Or are there &amp;quot;cheap&amp;quot; solutions?&lt;/p&gt;&#xA;&lt;p&gt;Are they like similar to other keyboard types?&lt;/p&gt;&#xA;" OwnerUserId="19948" LastEditorUserId="19948" LastEditDate="2020-11-22T14:44:04.520" LastActivityDate="2020-11-22T14:44:04.520" Title="Amstrad CPC 6128 - Key cap spring missing" Tags="&lt;keyboards&gt;&lt;cpc&gt;&lt;amstrad&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17029" PostTypeId="1" AcceptedAnswerId="17030" CreationDate="2020-11-21T20:34:41.930" Score="13" ViewCount="950" Body="&lt;p&gt;It seems that integrated circuits of the 1970s tended to have 4-digit part numbers. This includes not only the ones that came to be well-known like CPUs (Intel 4004, 8008, 8080, 8085, 8086, 8088, Motorola 6800, 6809, MOS Technology 6502, 6507), but also the 7400 series, memory chips like the Intel 1103 and Mostek 4096, graphics chips like the MOS Technology 6567/8562/8564/6569/8565/8566, better known as the VIC-II, still better known as the graphics chip developed for the Commodore 64, etc.&lt;/p&gt;&#xA;&lt;p&gt;It looks like there was a global namespace of 4-digit numbers that all the companies used. (Indeed it was common for a particular chip to be manufactured by multiple companies; big customers often insisted on second sources.) But I haven't seen any mention of a registry of numbers used, or any other central way of avoiding collisions.&lt;/p&gt;&#xA;&lt;p&gt;How did they avoid collisions? Was there even any such thing as a comprehensive catalog of chips listed by number, that you could look up to make sure a candidate number wasn't already in use?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-22T15:29:36.990" Title="How were 4-digit IC part numbers assigned?" Tags="&lt;history&gt;&lt;chip&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17030" PostTypeId="2" ParentId="17029" CreationDate="2020-11-21T20:55:10.513" Score="12" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;It seems that integrated circuits of the 1970s tended to have 4-digit part numbers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. Anything from letters to numbers and 3 to 7 characters have been used. even with numbers like &lt;em&gt;&lt;strong&gt;7400&lt;/strong&gt;&lt;/em&gt;, the chips name wasn't just the number, but a letter number combination, like &lt;em&gt;&lt;strong&gt;SN7400&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Other than often assumed is SN not a prefix used to indicate TI, but the 'family' TI puts that chip into. 'Family' in quotes as it's not really a technological differentiation but rather organisational - exactly to avoid collisions if different divisions use the same number. In addition some of the prefixes are historical. Examples for prefixes used by TI are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CA - Analogue, inherited from RCA&lt;/li&gt;&#xA;&lt;li&gt;CD - Digital, inherited from RCA&lt;/li&gt;&#xA;&lt;li&gt;SN - 'regular' digital&lt;/li&gt;&#xA;&lt;li&gt;RSN - Radiation hardened digital&lt;/li&gt;&#xA;&lt;li&gt;SNJ - Mil Spec Digital&lt;/li&gt;&#xA;&lt;li&gt;TL - Linear&lt;/li&gt;&#xA;&lt;li&gt;TMS - Data Processing (computer)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There're might be more - we in digital electronics are simply way too used to 'SN', not seeing the rest.&lt;/p&gt;&#xA;&lt;p&gt;Other companies made up similar distinction (Like Altera with EP/EPC/EPF), while on the other end small newcommers wanted to fit in and simply added their company mark in front, like CY for Cypress or MAX for Maxim. Important is, that all of these letters are integral part of the 'name', not just ignorable prefixes.&lt;/p&gt;&#xA;&lt;p&gt;In addition people often add a manufacturers abbreviation to the name when needed, like &lt;em&gt;&lt;strong&gt;TI-SN7400&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It looks like there was a global namespace of 4-digit numbers that all the companies used.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, there wasn't. Every manufacturer used it's own system. Well, except there was an attempt to standardize names on functionality in Europe. It did make inroad for diodes and some analogue IC, but never cought on for digital/TTL.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Indeed it was common for a particular chip to be manufactured by multiple companies&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure, if one wants to sell a compatible chip, he named it alike to pave the way for customers to find and buy his chips. Although, it did need a learning curve from marketing. Especially visible with early RAM (*1) and ROM chips, were functional identical chips had different names, leading to long lists of equivalent models.&lt;/p&gt;&#xA;&lt;p&gt;Heck, even companies that licenced other companies designs re-'named' them. A good example would be AMD's AM9511 FPU of 1979(?), licenced and marketed by Intel as C8231.&lt;/p&gt;&#xA;&lt;p&gt;This changed &lt;em&gt;a bit&lt;/em&gt; when chip names, especially the numeric part, became household names if not brands (but really only a bit).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But I haven't seen any mention of a registry of numbers used, or any other central way of avoiding collisions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Corse there was none.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How did they avoid collisions?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They simply didn't.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was there even any such thing as a comprehensive catalogue of chips listed by number, that you could look up to make sure a candidate number wasn't already in use?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, there were huge IC databooks, sold for unimaginary high prices by third party publisher - 1000 USD for a comprehensive list wasn't out of the ordinary (and we're talking 1980s USD). But their use wasn't about avoiding collisions, but helping engineers finding the chips they need, or equivalent chips from other manufacturers - like when looking for a replacement or lower prices.&lt;/p&gt;&#xA;&lt;p&gt;It was as well the high time of chip brokers, firms specialized in keeping an overview, consulting and often arranging a deal/sales.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - For example chips compatible (or licenced) with the well known Mostek MK4116 16 KiBit RAM were available as (peeked from an old paper under my desk mat):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;AM9016 from AMD&lt;/li&gt;&#xA;&lt;li&gt;F16K from Fairchild&lt;/li&gt;&#xA;&lt;li&gt;MB8116/MB8216 from Fujitsu&lt;/li&gt;&#xA;&lt;li&gt;HM4716 from Hitachi&lt;/li&gt;&#xA;&lt;li&gt;2117 from Intel&lt;/li&gt;&#xA;&lt;li&gt;M58759 from Mitsubishi&lt;/li&gt;&#xA;&lt;li&gt;MM5290 from National&lt;/li&gt;&#xA;&lt;li&gt;uPD416 from NEC&lt;/li&gt;&#xA;&lt;li&gt;MSM3716 from OKI&lt;/li&gt;&#xA;&lt;li&gt;LH6116 from Sharp&lt;/li&gt;&#xA;&lt;li&gt;N2690 from Signetics&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Not to mention that Mostek as well sold them as MKB4116 in military grade and MKI in industrial grade  :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-22T15:29:36.990" LastActivityDate="2020-11-22T15:29:36.990" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17031" PostTypeId="2" ParentId="17029" CreationDate="2020-11-21T20:55:52.267" Score="8" Body="&lt;p&gt;I guess the first one (Texas Instruments in the case of TTL) settled some number prefixes (74xx, 54xx) and start its own series, which became &lt;em&gt;de facto&lt;/em&gt; standard. Other manufacturers later adopt the same numbering (with a different alphabet prefix than &amp;quot;SN&amp;quot;) for the same ICs. There were minor collisions, but the bigger manufacturer just pushed the others out of their &amp;quot;number tracks&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;But in the rare cases of collisions, there were relatively harmless, because the ICs were not only part number but the manufacturer letter prefix (or postfix) too. SN is used by Texas Instruments for TTL (TI uses other denominators too, like CD for CMOS), MC by (former) Motorola, etc.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="11446" LastEditDate="2020-11-22T10:38:57.287" LastActivityDate="2020-11-22T10:38:57.287" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17032" PostTypeId="1" AcceptedAnswerId="17036" CreationDate="2020-11-21T22:30:33.193" Score="8" ViewCount="546" Body="&lt;p&gt;The &lt;kbd&gt;Ctrl&lt;/kbd&gt; + &lt;kbd&gt;Alt&lt;/kbd&gt; + &lt;kbd&gt;Del&lt;/kbd&gt; key combination to reset is known to me to work on older PC/MS-DOS PCs, some versions of Atari TOS, on runlevel 3 / multiuser.tager Linuxes (it can be disabled).&lt;/p&gt;&#xA;&lt;p&gt;The older of these is apparently IBM PC. Did it originate on this platform or was it used on older systems also? Any stories about how these keys were chosen?&lt;/p&gt;&#xA;" OwnerUserId="8057" LastEditorUserId="15334" LastEditDate="2020-11-28T19:15:33.073" LastActivityDate="2020-11-28T19:15:33.073" Title="Origin of Ctrl-Alt-Delete key combination to reset" Tags="&lt;ibm-pc&gt;&lt;keyboards&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17033" PostTypeId="2" ParentId="17032" CreationDate="2020-11-21T22:38:26.510" Score="5" Body="&lt;p&gt;&lt;em&gt;[&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11961/is-it-true-that-controlaltdelete-only-became-a-thing-because-ibm-would-not-bui&quot;&gt;This question&lt;/a&gt; is kind of related, if not a duplicate]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The older of these is apparently IBM PC. Did it originate on this platform or&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, part of the BIOS.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;was it used on older systems also?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Any stories about how these keys were chosen?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sorry, no fancy story story, just practical considerations.&lt;/p&gt;&#xA;&lt;p&gt;Using three keys and having them far enough apart to need two hands to operate made it rather error-proof, while the combination had to be something that wasn't likely to be used otherwise CTRL and ALT are modifiers, thus free to be used, while DEL is a 'new', non-ASCII key, thus risk of collision with any existing software to be ported is virtual zero.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-21T23:26:27.150" LastActivityDate="2020-11-21T23:26:27.150" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="17034" PostTypeId="2" ParentId="16989" CreationDate="2020-11-22T01:38:45.013" Score="2" Body="&lt;p&gt;Predictable volume was an unknown.  This stuff was so new, nobody knew how many would sell.  And for many who dared make them, market estimates were way off.&lt;/p&gt;&#xA;&lt;p&gt;Mass manufacturing requires knowing the volume so that the tooling investments can be amortized.  Tooling for manufacturing also adds lead time, by which time you might be &amp;quot;scooped&amp;quot; by some competition.  Whereas kits, you could advertise as soon as you could verify small quantity parts availability.  Then just kit up the parts and ship them out as the orders come in.  Very little inventory, and no underutilized tooling or finished inventory risks (bank loans, interest, obsolete product, etc.).  New designs could use much of the same old inventory, so not a lost investment.&lt;/p&gt;&#xA;&lt;p&gt;As for repairs, many kit vendors would only do that for a fee, if at all, e.g. another revenue center.&lt;/p&gt;&#xA;&lt;p&gt;Whereas currently, computer companies have huge marketing departments, with tons of people working on sales estimates, dynamic cost of sales spreadsheets (which didn't exist back then!), just-in-time inventory management and operations, and etc.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2020-11-22T01:38:45.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17035" PostTypeId="2" ParentId="17003" CreationDate="2020-11-22T01:42:14.523" Score="2" Body="&lt;p&gt;There is a group of macros called &lt;a href=&quot;https://skycoast.us/pscott/software/mvs/concept14.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Concept 14&lt;/a&gt;, that was written by an IBM Federal Systems employee named Marvin Kessler. They ran on IFOX00 (the F assembler) and were used as the basis for the HLASMTK SPM.&lt;/p&gt;&#xA;&lt;p&gt;A former co-worker of mine, Paul Scott, provides them in IEBUPDTE format. He also has a scan of the documentation; unfortunately it is missing a page.&lt;/p&gt;&#xA;&lt;p&gt;I believe they have also made it into the Hercules and z390 worlds.&lt;/p&gt;&#xA;" OwnerUserId="3697" LastActivityDate="2020-11-22T01:42:14.523" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17036" PostTypeId="2" ParentId="17032" CreationDate="2020-11-22T10:52:13.333" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;was it used on older systems also&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Just for curiosity: some kind of key combination to reset had other computers (non PC) too, e.g. the CPC6128 had &lt;kbd&gt;Control&lt;/kbd&gt; + &lt;kbd&gt;Shift&lt;/kbd&gt; + &lt;kbd&gt;ESC&lt;/kbd&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Otherwise, Wikipedia has &lt;a href=&quot;https://en.wikipedia.org/wiki/Control-Alt-Delete&quot; rel=&quot;noreferrer&quot;&gt;an interesting insight&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The soft reboot function via keyboard was originally designed by David Bradley. Bradley, as the chief engineer of the IBM PC project and developer of the machine's ROM-BIOS, had originally used Ctrl+Alt+Esc, but found it was too easy to bump the left side of the keyboard and reboot the computer accidentally. According to his own account, Mel Hallerman, who was the chief programmer of the project, therefore suggested switching the key combination to Ctrl+Alt+Del as a safety measure, a combination impossible to press with just one hand on the original IBM PC keyboard.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The feature was originally conceived only as a development feature for internal use and not intended to be used by end users, as it triggered the reboot without warning or further confirmation—it was meant to be used by people writing programs or documentation so that they could reboot their computers without powering them down. Bill Gates (former Microsoft CEO) remembered it as &amp;quot;just something we were using in development and it wouldn't be available elsewhere&amp;quot;. The feature, however, was detailed in IBM's technical reference documentation to the original PC and thereby revealed to the general public.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Bradley is also known for his good-natured jab at Gates at the celebration of the 20th anniversary of the IBM PC on August 8, 2001 at The Tech Museum: &amp;quot;I have to share the credit. I may have invented it, but I think Bill made it famous.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-11-22T10:52:13.333" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17037" PostTypeId="1" CreationDate="2020-11-22T11:18:15.877" Score="1" ViewCount="113" Body="&lt;p&gt;I have a question regarding the difference in common failure modes between an older motherboard such as the ABIT BP6, and a new motherboard such as what you might find in an Intel NUC. What is a failure mode you might have with the former and not with the latter?&#xA;My guess is capacitors just because of the different cap designs between the two, or perhaps expandability?&#xA;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="19956" LastActivityDate="2020-11-22T11:18:15.877" Title="Failure modes of old motherboards vs new motherboards" Tags="&lt;component-failure&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2020-11-22T17:55:42.233" ContentLicense="CC BY-SA 4.0" />
  <row Id="17038" PostTypeId="1" AcceptedAnswerId="17041" CreationDate="2020-11-22T13:08:05.077" Score="4" ViewCount="1749" Body="&lt;p&gt;I have the following assembly code for 8086&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MOV AL, [BX]&#xA;OUT DX, AL&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The bus clock frequency is 1MHz. Access to memory is done without WAIT, and to I/O with one WAIT tick. How I can calculate the duration of this program?&lt;/p&gt;&#xA;" OwnerUserId="19957" LastEditorUserId="19957" LastEditDate="2020-11-22T15:47:33.383" LastActivityDate="2020-11-23T13:03:14.457" Title="8086 duration of program" Tags="&lt;assembly&gt;&lt;cpu&gt;&lt;8086&gt;&lt;microprocessor&gt;&lt;io&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17039" PostTypeId="2" ParentId="17038" CreationDate="2020-11-22T13:38:09.930" Score="10" Body="&lt;p&gt;I am afraid that the answer is &amp;quot;it could take any time, depending on circumstances and the real WAIT condition&amp;quot;. WAIT states have unpredictable length, so there is no exact way to answer your question.&lt;/p&gt;&#xA;&lt;p&gt;The general answer, theoreticaly valid for every CPU (and really valid for the most of 8bit CPUs), is:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Take an &lt;a href=&quot;https://www2.math.uni-wuppertal.de/%7Efpf/Uebungen/GdR-SS02/opcode_i.html&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;instruction timing chart&amp;quot;&lt;/a&gt; and count:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;MOV AL,[BX]&lt;/code&gt; takes 12 + 5 = 17 T cycles,&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;OUT DX, AL&lt;/code&gt; takes 12 T cycles (&lt;strong&gt;without WAIT!!!&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So together it will take 29 T cycles. (EDIT: My mistake, it's a timing for the 8088, not 8086)&lt;/p&gt;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;You know the frequency of the clock, so one T takes &lt;code&gt;1/freq&lt;/code&gt; seconds. 1MHz means each T takes 1 µs.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Simply multiple, and you can see your code should take 29 µs.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;BUT! It will be affected in the real environment by different influences, from real IC latency to internal pipelining mechanism, which allows to pre-decode the second instruction during the execution of the first one.&lt;/p&gt;&#xA;" OwnerUserId="11446" LastEditorUserId="11446" LastEditDate="2020-11-22T20:00:05.370" LastActivityDate="2020-11-22T20:00:05.370" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17040" PostTypeId="1" AcceptedAnswerId="17046" CreationDate="2020-11-22T14:44:55.573" Score="9" ViewCount="1584" Body="&lt;p&gt;There is &lt;a href=&quot;https://www.landley.net/history/mirror/apple2/implementingvisicalc.html&quot; rel=&quot;noreferrer&quot;&gt;an excellent article about VisiCalc&lt;/a&gt; that goes into all the details about what happened and why, highly recommended if you are interested in that part of computing history. I was reading this section:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;At its heart, VisiCalc is about numbers. One of the early decisions we made was to use decimal arithmetic so that the errors would be the same one that an accountant would see using a decimal calculator. In retrospect this was a bad decision because people turn out to not care and it made calculations much slower than they would have been in binary.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And nodding, yes, VisiCalc's successors backslid in this regard; to this day, the Internet is full of questions and answers about why Excel exhibits anomalies with numbers like 0.1 and binary floating point not rounding the way people expect. VisiCalc should really have launched an advertising campaign at the time pointing out the...&lt;/p&gt;&#xA;&lt;p&gt;... Wait a minute. Fridge logic.&lt;/p&gt;&#xA;&lt;p&gt;Made calculations much slower?&lt;/p&gt;&#xA;&lt;p&gt;VisiCalc was written on the 6502, which supports BCD arithmetic. You just have to turn on decimal mode, and the CPU will add BCD bytes at exactly the same speed as it would add binary bytes.&lt;/p&gt;&#xA;&lt;p&gt;But most numbers in a spreadsheet are simple when expressed in decimal. A number like 1234.56 takes three bytes in BCD where it would've taken eight bytes in double precision binary floating point. That not only saves memory but, if your calculation routines (which have to be done in software – the machine had no FPU) take the opportunity for early exit, also saves time. So calculation of numbers that typically occur in spreadsheets should be &lt;em&gt;faster&lt;/em&gt; in decimal.&lt;/p&gt;&#xA;&lt;p&gt;And small spreadsheets spend a lot of their time updating the display. Converting a number from internal representation to ASCII for display is quite a bit faster when the internal representation was decimal.&lt;/p&gt;&#xA;&lt;p&gt;So why did he say decimal made calculations slower?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-22T18:39:22.263" Title="Why did decimal arithmetic slow down VisiCalc?" Tags="&lt;history&gt;&lt;6502&gt;&lt;floating-point&gt;&lt;visicalc&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17041" PostTypeId="2" ParentId="17038" CreationDate="2020-11-22T15:27:41.110" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I have the following assembly code for 8086&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To start with basic timing for 8086 (*1) in CPU clocks is &lt;strong&gt;21 clock cycles&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;MOV AL,[BX]  (*2)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;13 cycles&lt;/strong&gt;, consisting of 8 cycles for the instruction (MOV reg8,mem) plus 5 to calculate the address from [BX]. Since it's a byte access, no penalty for misalignment can happen.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;OUT DX, AL&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;8 cycles&lt;/strong&gt;, all for the instruction.&lt;/p&gt;&#xA;&lt;p&gt;In addition it depends on the prefetch queue being filled or not, as code fetches are additional. Above code is 3 bytes (8A 07 EE), so two code fetches are necessary. Depending on the prior instructions they could be already loaded, adding zero cycles, or 4 additional cycles per fetch, adding 4 or 8 cycles total.&lt;/p&gt;&#xA;&lt;p&gt;Since move's 13 clocks leaves a lot of room (only 4 are needed to get the data), the OUT usually can be fetched in parallel, leaving the total penalty here at 0 or 4 CPU clocks. In real world application the queue is rarely empty, as only a few high performance instructions can empty it when executed in sequence.&lt;/p&gt;&#xA;&lt;p&gt;Base line: Prefetch wait is &lt;em&gt;usually&lt;/em&gt; zero and thus doesn't matter, and if it does, one needs to analyze the instructions before that sequence.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The bus clock frequency is 1MHz.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Is that memory cycle or CPU clock? These are not the same and bus clock is an ambiguous term here.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Access to memory is done without WAIT, and to I/O with one WAIT tick.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What is a 'Wait tick'? Mind to specify it, preferably in CPU clocks?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How I can calculate the duration of this program?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As usual by adding up the clock cycles and multiply them by the clock &lt;a href=&quot;https://en.wikipedia.org/wiki/Frequency#:%7E:text=The%20period%20is%20the%20duration,seconds%20divided%20by%20120%20beats&quot; rel=&quot;nofollow noreferrer&quot;&gt;period&lt;/a&gt; used.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - If your question is about an 8088, as used in the original PC, then it's actually 29, as described &lt;a href=&quot;/a/17039/6659&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Please do not use white-spaces within parameters. Even if your assembler copes with it, it may introduce incompatibilities and hard to correct problems when using a different environment.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2020-11-23T13:03:14.457" LastActivityDate="2020-11-23T13:03:14.457" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17042" PostTypeId="2" ParentId="17040" CreationDate="2020-11-22T15:49:07.570" Score="8" Body="&lt;p&gt;6502 supported SIMPLE BCD arithmetic. I would bet that the VisiCalc guys in the end didn't even use that feature and wrote the whole thing from scratch. There's not just addition and subtraction, there's also multiplication and division, plus VisiCalc was floating point (just decimal floating point).&lt;/p&gt;&#xA;&lt;p&gt;The reason the decimal math is slower is simply the same reason &amp;quot;nobody&amp;quot; uses decimal math today, they use binary math. With binary math, each bit is a digit. With decimal math, 4 bits is a digit. More memory for less precision, the math is just slower, its just a lot more work for the computer, even the 6502 with nascent support for it.&lt;/p&gt;&#xA;&lt;p&gt;(And, yes, decimal math is used all over the place in different places, but it's the exception not the rule.)&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-11-22T15:49:07.570" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="17043" PostTypeId="1" AcceptedAnswerId="17044" CreationDate="2020-11-22T15:52:57.037" Score="1" ViewCount="253" Body="&lt;p&gt;Fresh install of dos 6.22, unfortunately there appears to be a virus in MBR, each time I get Virus:DOS/V_Sign when re-using floppy from this machine. I can't connect HDD to modern PC, any idea how I can get rid of it?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="6659" LastEditDate="2020-11-22T17:13:11.860" LastActivityDate="2020-11-23T09:23:45.017" Title="How to remove Virus:DOS/V_Sign from a DOS 6.22 system" Tags="&lt;ms-dos&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17044" PostTypeId="2" ParentId="17043" CreationDate="2020-11-22T16:05:10.500" Score="7" Body="&lt;p&gt;If you have a clean MS-DOS 6.22 installation disk, you can boot from that, then run &lt;code&gt;MSAV&lt;/code&gt; from your hard drive — the antivirus included with MS-DOS, a repackaged version of Central Point’s product, can detect and clean up &lt;a href=&quot;https://www.f-secure.com/v-descs/v-sign.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;V-Sign&lt;/a&gt; (which it identified as “Sigalit”).&lt;/p&gt;&#xA;&lt;p&gt;You could also use any other DOS-era &lt;a href=&quot;http://reimagery.com/fsfd/antivir.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;antivirus program&lt;/a&gt; capable of cleaning V-Sign, such as F-Prot. If you can get the target PC on the Internet, download it directly there, otherwise you’ll have to download it on another system and transfer it. Don’t forget the definition file too; you won’t be able to get that from F-Prot any more, but you’ll find the last updates on SAC: &lt;a href=&quot;https://www.sac.sk/download/avir/fp-def.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;fp-def.zip&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://www.sac.sk/download/avir/macrdef2.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;macrdef2.zip&lt;/code&gt;&lt;/a&gt; (you can also download the program itself from SAC, it’s &lt;a href=&quot;https://www.sac.sk/download/avir/fp-316f.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;fp-316f.zip&lt;/code&gt;&lt;/a&gt; — this will be useful when the main site disappears, now that F-Prot has been shut down).&lt;/p&gt;&#xA;&lt;p&gt;Whichever antivirus you use, you will have to run it on all the disks (including floppies) on the DOS PC. Ideally you should copy and run the antivirus after booting from a clean floppy, but it might be difficult to prepare one (you’d need another PC capable of writing floppies).&lt;/p&gt;&#xA;&lt;p&gt;With F-Prot you’ll need to specify the &lt;code&gt;/OLD&lt;/code&gt; flag on the command line, otherwise it will complain that the signatures are too old.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-11-23T09:23:45.017" LastActivityDate="2020-11-23T09:23:45.017" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17045" PostTypeId="2" ParentId="17040" CreationDate="2020-11-22T17:13:20.003" Score="5" Body="&lt;p&gt;Because decimal operations are slower, even on the 6502.  There is processor support for 8-bit BCD addition and subtraction, but that's it.&lt;/p&gt;&#xA;&lt;p&gt;Code for decimal multiplication, division, shifting, floating point normalization, and maybe even comparison, will be somewhat larger and slower than with binary.&lt;/p&gt;&#xA;&lt;p&gt;For example, shift-and-subtract division routines require a subroutine to halve the value.  In binary this is trivial.  Using an 8 bit value as an example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        LSR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In decimal mode, it'll be something like this (&lt;a href=&quot;http://nparker.llx.com/a2/decimal.html&quot; rel=&quot;noreferrer&quot;&gt;courtesy of &amp;quot;Multiplying and Dividing in Decimal Mode&amp;quot;&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        ROR&#xA;N08     PHP&#xA;        BPL HALF2&#xA;        SEC&#xA;        SBC #$30&#xA;HALF2   BIT N08&#xA;        BEQ HALF3&#xA;        SEC&#xA;        SBC #3&#xA;HALF3   PLP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Code like this would be in the inner loop of a decimal divide routine.  The speed penalty is significant.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2020-11-22T18:05:35.990" LastActivityDate="2020-11-22T18:05:35.990" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17046" PostTypeId="2" ParentId="17040" CreationDate="2020-11-22T17:22:56.777" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;A number like 1234.56 takes three bytes in BCD where it would've taken eight bytes in double precision binary floating point.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Generally speaking, that is not the case. If you have a database field definition of 6 digits total, 4 before the decimal, 2 after, positive numbers only, then yes you can have 1234.56 represented in 3 8-bit BCD bytes. But if, as is more typically the case:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You allow any number to have many more digits - e.g., 8 digits is a minimum just to allow up to (but not including) $1,000,000 specified to the penny. More typical would be 10 or 12 or more.&lt;/li&gt;&#xA;&lt;li&gt;You allow varying numbers of digits past the decimal place in different fields - e.g., 2 for US (and many other) currency values, but 6 or more for unit costs (e.g., cost of kWh for utility bills)&lt;/li&gt;&#xA;&lt;li&gt;You allow negative numbers.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Then you very quickly go beyond 3 bytes. 8 bytes becomes a reasonable &lt;em&gt;minimum&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Even for storage (ignoring calculation), 3 bytes doesn't work for the 6-digit number because something somewhere has to define that &lt;em&gt;this cell&lt;/em&gt; has a 3-byte positive number with the decimal point before the last 2 digits. That takes a byte, so now we are at 4 bytes.&lt;/p&gt;&#xA;&lt;p&gt;In addition, the code needed for the extra manipulations (code/decode different length numeric formats) eats into the very limited 64k &lt;em&gt;code + data&lt;/em&gt; available on typical 8-bit systems. It could easily be the case that the space saved for values by varying size (and hopefully on average much smaller) of numeric cells in a spreadsheet would typically be outweighed by the extra code needed in memory to support display, manipulation and calculation of those numbers.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2020-11-22T18:39:22.263" LastActivityDate="2020-11-22T18:39:22.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17047" PostTypeId="1" AcceptedAnswerId="17049" CreationDate="2020-11-22T17:54:45.520" Score="5" ViewCount="654" Body="&lt;p&gt;I am trying to learn more about different video formats. I have a SONY PVM9044QM and want to understand the different connection options.&lt;/p&gt;&#xA;&lt;p&gt;So I understand, that Y/C equals S-Video input.&#xA;But what does Lina A and Line B, as well as &amp;quot;Video In&amp;quot; mean. Is this Composite?&#xA;RGB Component is clear though. So that means I can connect:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;S-Video&lt;/li&gt;&#xA;&lt;li&gt;Composite (if I see this correctly)&lt;/li&gt;&#xA;&lt;li&gt;Component / RGB&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So when I have a Composite Cable with Video/L/R means, I put the cable into Video IN (Line A) and Audio In (Line A+B)?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ojGzY.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ojGzY.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19948" LastActivityDate="2020-11-22T21:21:35.457" Title="Sony PVM Connections / Composite Signale" Tags="&lt;video&gt;&lt;crt-monitor&gt;&lt;s-video&gt;&lt;composite-video&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17048" PostTypeId="2" ParentId="17038" CreationDate="2020-11-22T18:07:30.650" Score="12" Body="&lt;p&gt;On the 8088 and 8086, execution involves two parallel processes--memory access and internal computation--and will be limited by the speed of whichever is slower.  Generally, on the 8088 execution speed will be limited by memory access, while the 8086 will be better balanced.  Every memory cycle on the 8088 or 8086 takes a minimum of four cycles, and on most machines they will usually take exactly four cycles except when e.g. accessing display-card memory, or when a DRAM refresh occurs [which may be thought of as introducing a few spontaneous memory accesses beyond those issued by the CPU; while there are situations where it may be possible to arrange DRAM refreshes to occur exactly once per loop with predictable timing, it's usually best to think of it as some additional overhead that can't be precisely predicted, but is small in any case].&lt;/p&gt;&#xA;&lt;p&gt;Any time the main CPU isn't asking for a memory access and there fewer than four bytes (8088) or three two-byte words (8086) of code have been fetched ahead of the current execution point, the prefetch unit will initiate a code fetch, which will take four cycles.  To figure out how long a sequence of instructions will take, one would need to figure out when these operations will occur, and then add to every instruction's execution time the amount of time it would spend waiting either for an instruction to be fetched, or for the bus unit to finish a prefetch operation.&lt;/p&gt;&#xA;&lt;p&gt;If an instruction is preceded and followed by instructions like MUL which take a long time to execute without performing many memory accesses, then prefetch time will be irrelevant.  If it's preceded and followed by long sequences of instructions like &amp;quot;add reg,immed16&amp;quot; which take longer to fetch than to execute, the internal execution time may be irrelevant.  On the 8086, a sequence of &amp;quot;add reg,immed16&amp;quot; would each have an execution time of 4 cycles, but replacing instructions in the prefetch buffer would take eight, meaning that as the processor starts executing the last such instruction, the prefetch buffer will be empty, and it will get one word loaded into it during the instruction.&lt;/p&gt;&#xA;&lt;p&gt;Although the nominal execution time of &amp;quot;mov al,[bx]&amp;quot; would be 13 cycles, execution under those circumstances would likely take 16 cycles (since a prefetch would likely start one the cycle before the MOV would have requested its memory access, forcing it to wait three cycles for the prefetch to complete) &lt;em&gt;but&lt;/em&gt; during those 16 cycles, three instructions would have been prefetched.  If the instruction was followed by a sequence of more big-but-fast instructions, the presence of those words in the prefetch buffer could eliminate eight cycles worth of waiting later on.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-11-22T18:07:30.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17049" PostTypeId="2" ParentId="17047" CreationDate="2020-11-22T18:11:20.953" Score="7" Body="&lt;p&gt;There are four groups of connectors (Line A, Line B, RGB/Component, and Ext Sync), and each group should be treated as a whole.&lt;/p&gt;&#xA;&lt;p&gt;As it's a monitor, I assume you have an &amp;quot;out&amp;quot; for each &amp;quot;in&amp;quot;, and the &amp;quot;out&amp;quot; is just connected to the corresponding &amp;quot;in&amp;quot; (because &amp;quot;out&amp;quot; otherwise doesn't make sense for a monitor).&lt;/p&gt;&#xA;&lt;p&gt;You'll be able to choose between three sources, &amp;quot;Line A&amp;quot;, &amp;quot;Line B&amp;quot;, and &amp;quot;RGB Component&amp;quot;. &amp;quot;Line A&amp;quot; accepts both S-Video (Y/C) and Composite (Video) in addition to audio, &amp;quot;Line B&amp;quot; only accepts Composite (Video) in addition to audio, and &amp;quot;RGB/component&amp;quot; accepts either RGB or component (R-Y/Y/B-Y) in addition to audio. You'll be able to select for the latter which type it is.&lt;/p&gt;&#xA;&lt;p&gt;In addition to everything, there's the option to have external sync signals (whatever kind, you'd need the manual for that).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So when I have a Composite Cable with Video/L/R means, I put the cable into Video IN (Line A) and Audio In (Line A+B)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It means you decide if you want to connect it to &amp;quot;Line A&amp;quot; or &amp;quot;Line B&amp;quot;, and then you connect it to &amp;quot;Video&amp;quot; and &amp;quot;Audio In&amp;quot;. Say you connect it to &amp;quot;Line A&amp;quot;, then you can connect a second composite signal from some other computer to &amp;quot;Line B&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-11-22T18:11:20.953" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17050" PostTypeId="2" ParentId="17047" CreationDate="2020-11-22T19:09:31.503" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;So when I have a Composite Cable with Video/L/R means, I put the cable&#xA;into Video IN (Line A) and Audio In (Line A+B)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It looks to be mono audio only so you can either get an adapter that connects left and right audio together or run your stereo audio through a separate amplifier. Either Audio A or B (but not both) will be selected along with the corresponding video signal using the front panel input selection buttons.&lt;/p&gt;&#xA;&lt;p&gt;There's a brochure/specification sheet available e.g. &lt;a href=&quot;http://www.productionav.co.uk/wp-content/uploads/2016/02/Sony-9-Inch-Preview-Monitor-Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; which might be easier to start with than the service manual.&lt;/p&gt;&#xA;" OwnerUserId="9177" LastEditorUserId="9177" LastEditDate="2020-11-22T21:21:35.457" LastActivityDate="2020-11-22T21:21:35.457" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17051" PostTypeId="2" ParentId="3016" CreationDate="2020-11-22T22:44:07.947" Score="1" Body="&lt;p&gt;If you restrict your use of BASIC to statements and commands and functions that exist in version 2.0, with no memory-address references (so no &lt;code&gt;POKE&lt;/code&gt;, &lt;code&gt;PEEK&lt;/code&gt;, &lt;code&gt;SYS&lt;/code&gt;, &lt;code&gt;USR&lt;/code&gt;, or &lt;code&gt;WAIT&lt;/code&gt;), and keep the program small enough to fit into the unexpanded VIC-20's 3583 bytes (including space taken up by variable values during the course of the program's execution), you can write a program that will load and run on any of the 8-bit Commodore machines. Everyone's favorite maze generator works great on all of them, from an original PET all the way through to a C65:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT CHR$(142);:REM SHIFT TO UC/GFX, NOT THE DEFAULT ON ALL MACHINES&#xA;20 PRINT CHR$(205.5+RND(0));:GOTO 20&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So with some care you can write portable BASIC. Portable machine code is harder; you run into a problem right away just picking a load address. Most machine-code programs on Commodores were either on cartridges (which appeared at a fixed spot in the address space) or loaded into the BASIC program area, in which case they started with a small BASIC program that used &lt;code&gt;SYS&lt;/code&gt; to launch the machine code. But that's still machine-dependent; the most common start address for BASIC text on these machines is 4096/$1000, which is where it is on the PET, unexpanded VIC-20, and C-16/Plus4. But as soon as the VIC-20 has any memory expansion, the start of BASIC moves down to to 1024/$0400. BASIC text in the C-64 starts at 2048/$0800, while on the C-128 it starts at 7168/$1C00 - unless the high-resolution graphics screen has been reserved, in which case it starts at 16384/$4000 (and is hidden behind BASIC ROM, so you have to change the memory &lt;code&gt;BANK&lt;/code&gt; to call it)! And even if you can reliably get the program loaded and executed, it's very hard to write position-independent 6502 code.&lt;/p&gt;&#xA;&lt;p&gt;You could no doubt write some 6502 &lt;em&gt;assembly source&lt;/em&gt; that would work across all the machines as long as it was reassembled (or at least re-loaded/linked, depending on how sophisticated your build system is) for each target machine. And there are of course some ways for code to inspect the machine and figure out which model it's being run on, so you can have different versions of some of the logic for different ones. Probably not and still fit into an unexpanded VIC-20, though. :)&lt;/p&gt;&#xA;&lt;p&gt;And you'd be pretty much restricted to text I/O. The C64, C128, and C65 are the only machines with sprites; the TED machines (C-16 and Plus/4) do have high-res graphics capability, but while they offer the same basic graphics modes as the VIC-II machines (C64 and C128), the details are completely different. The C-65 uses a VIC-III and is different yet again.&lt;/p&gt;&#xA;&lt;p&gt;The post-PET machines do all have the ability to simulate high-res graphics using custom character sets, though an unexpanded VIC only lets you map a small patch of screen that way. Even so, the details of how you go about setting that up are completely different from video chip to video chip, so you'd be looking at a lot of platform-conditional code.&lt;/p&gt;&#xA;" OwnerUserId="19759" LastEditorUserId="19759" LastEditDate="2020-11-27T00:02:38.687" LastActivityDate="2020-11-27T00:02:38.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17052" PostTypeId="1" CreationDate="2020-11-23T16:25:22.113" Score="1" ViewCount="155" Body="&lt;p&gt;Though I can identify some technologies like following, I would like to know which ones will surely fail and which ones are worth to test on my old Palm, Symbian, WindowsCE,...&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Web&#xA;    Issues with protocols (HTTPS will be a no go for sure)&#xA;    Issues with web technologies (css, modern javascript and web2.0 will be a problem too)&#xA;    Compatible webpages (services with a view or that are still on HTTP, HTML1)&#xA;Other technologies&#xA;    RSS&#xA;    IM (jabber,....&#xA;    gopher&#xA;    ...&#xA;email&#xA;    Issues with protocols&#xA;    Compatible services (POP3/SMTP)&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11438" LastEditorUserId="15334" LastEditDate="2021-02-28T19:07:15.313" LastActivityDate="2021-02-28T19:07:15.313" Title="Internet services that are still compatible with devices (phones/pdas from 2000-2007)" Tags="&lt;internet&gt;&lt;palm&gt;&lt;pda&gt;&lt;backward-compatibility&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2020-11-23T18:02:16.273" ContentLicense="CC BY-SA 4.0" />
  <row Id="17053" PostTypeId="1" AcceptedAnswerId="17056" CreationDate="2020-11-24T02:16:21.900" Score="7" ViewCount="504" Body="&lt;p&gt;In general, it is possible to use inline assembler statements within C macros, for example&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#define toscreencode(C) (__AX__ = (C),   \&#xA;                         asm(&amp;quot;cmp #$60&amp;quot;),\&#xA;                         asm(&amp;quot;bcc L1&amp;quot;),  \&#xA;                         asm(&amp;quot;and #$df&amp;quot;),\&#xA;                         asm(&amp;quot;bne L2&amp;quot;),  \&#xA;                         asm(&amp;quot;L1:&amp;quot;),     \&#xA;                         asm(&amp;quot;and #$3f&amp;quot;),\&#xA;                         asm(&amp;quot;L2:&amp;quot;),     \&#xA;                         __AX__)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This works fine as long as the macro is called at most once per module. However, if the macro is called more than once, the compiler throws errors for the two labels (&amp;quot;Error: ASM label 'L1' is already defined&amp;quot;) since the named labels are now used twice since the code is duplicated every time the macros is used.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, it is not possible to use a &lt;code&gt;.scope&lt;/code&gt; / &lt;code&gt;.endscope&lt;/code&gt; with the inline assembler command.  I also tried cheap local labels (&amp;quot;@L1&amp;quot; instead of &amp;quot;L1&amp;quot;), but the error persists.&lt;/p&gt;&#xA;&lt;p&gt;Unnamed labels (&amp;quot;:+&amp;quot;, &amp;quot;:&amp;quot;) are not accepted by the inline assembler.&lt;/p&gt;&#xA;&lt;p&gt;It is also not possible to hack the branch command by replacing it with two recalculated bytes, because the &lt;code&gt;.byte&lt;/code&gt; command does not work with the inline assembler.&lt;/p&gt;&#xA;&lt;p&gt;Any suggestions on how to make the macro usable more than once in a module?&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="15334" LastEditDate="2021-03-11T08:41:20.157" LastActivityDate="2021-03-11T08:41:20.157" Title="Labels in cc65 inline assembler with #define macro" Tags="&lt;assembly&gt;&lt;6502&gt;&lt;c&gt;&lt;cc65&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17054" PostTypeId="2" ParentId="5024" CreationDate="2020-11-24T03:38:53.603" Score="1" Body="&lt;p&gt;Stumbled into this question while searching for games for Family Basic.&#xA;While I have no idea what kind of power the systems of the time had, I can tell you this, the original manual for Family Basic V2 (specifically Game Basic) explicitly mentions that you can write directly to any memory address of the console using the POKE function and also directly call machine code subroutines with the CALL function, which I've been able to successfully leverage to write my own 6502 machine code subroutines while playing around in the emulator. The manual also describes the memory structure of the console.&lt;/p&gt;&#xA;&lt;p&gt;If you want to test this, just type &amp;quot;CALL &amp;amp;8000&amp;quot; into Family Basic. &amp;amp;8000 is the starting address of the ROM, and after pressing Enter, you should find yourself staring at the starting screen of Family Basic. In V2, this would be the selection menu between BG GRAPHIC and BASIC, and V3 will entertain you by printing &amp;quot;BASIC HOT START&amp;quot; instead of the default welcome message.&lt;/p&gt;&#xA;" OwnerUserId="19970" LastActivityDate="2020-11-24T03:38:53.603" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17055" PostTypeId="2" ParentId="17053" CreationDate="2020-11-24T03:58:07.343" Score="4" Body="&lt;p&gt;You can use &lt;em&gt;anonymous labels&lt;/em&gt; in ca65.  The equivalent to your example code using these, but without the C wrapping, would be:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  CMP #$60&#xA;  BCC :+&#xA;  AND #$DF&#xA;  BNE :++&#xA;: AND #$3F&#xA;:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You can also use &lt;code&gt;:-&lt;/code&gt; to refer to an anonymous label preceding the current position.  Increasing the number of &lt;code&gt;+&lt;/code&gt; or &lt;code&gt;-&lt;/code&gt; symbols increases the number of anonymous labels to skip over.&lt;/p&gt;&#xA;&lt;p&gt;Another possible workaround, to use in emergencies only, is to directly code the number of bytes between the opcode of the branch instruction and that of the target:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  CMP #$60&#xA;  BCC *+6&#xA;  AND #$DF&#xA;  BNE *+4&#xA;  AND #$3F&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Note that the actual assembled code will have relative offsets of +4 and +2 respectively, because the 6502 takes the offset from the opcode of the instruction &lt;em&gt;following&lt;/em&gt; the branch, but the assembler's &lt;code&gt;*&lt;/code&gt; pseudo-variable refers to the instruction currently being assembled.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-11-24T14:40:19.800" LastActivityDate="2020-11-24T14:40:19.800" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17056" PostTypeId="2" ParentId="17053" CreationDate="2020-11-24T04:09:26.673" Score="12" Body="&lt;p&gt;Since the inline assembler of cc65 doesn't accept anonymous labels (from my other answer), another approach is to provide a unique suffix to the labels, which can be applied by the macro.  The &lt;em&gt;stringizing operator&lt;/em&gt; of the C preprocessor, and the fact that C string literals written consecutively are automatically concatenated, might make this more convenient:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#define toscreencode(C, _suffix) \&#xA;                        (__AX__ = (C),   \&#xA;                         asm(&amp;quot;cmp #$60&amp;quot;),\&#xA;                         asm(&amp;quot;bcc @L1_&amp;quot; #_suffix),  \&#xA;                         asm(&amp;quot;and #$df&amp;quot;),\&#xA;                         asm(&amp;quot;bne @L2_&amp;quot; #_suffix),  \&#xA;                         asm(&amp;quot;@L1_&amp;quot; #_suffix &amp;quot;:&amp;quot;),     \&#xA;                         asm(&amp;quot;and #$3f&amp;quot;),\&#xA;                         asm(&amp;quot;@L2_&amp;quot; #_suffix &amp;quot;:&amp;quot;),     \&#xA;                         __AX__)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Call as, for example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;x = toscreencode(y, A);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;…which will use labels &lt;code&gt;@L1_A&lt;/code&gt; and &lt;code&gt;@L2_A&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;It turns out that unique label suffixes can &lt;em&gt;also&lt;/em&gt; be generated automatically, though this does explore yet more of the outer reaches of the C preprocessor - relying on &lt;em&gt;argument prescan&lt;/em&gt; which is probably an even more obscure detail than the &lt;em&gt;stringizing operator&lt;/em&gt;, and the automatically incrementing &lt;code&gt;__LINE__&lt;/code&gt; macro.  We actually have to use nested macro calls to make this work:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#define stringify(_x) #_x&#xA;#define superstringify(_z) stringify(_z)&#xA;#define suffix superstringify(__LINE__)&#xA;#define toscreencode(C) (__AX__ = (C),   \&#xA;                         asm(&amp;quot;cmp #$60&amp;quot;),\&#xA;                         asm(&amp;quot;bcc @L1_&amp;quot; suffix),  \&#xA;                         asm(&amp;quot;and #$df&amp;quot;),\&#xA;                         asm(&amp;quot;bne @L2_&amp;quot; suffix),  \&#xA;                         asm(&amp;quot;@L1_&amp;quot; suffix &amp;quot;:&amp;quot;),     \&#xA;                         asm(&amp;quot;and #$3f&amp;quot;),\&#xA;                         asm(&amp;quot;@L2_&amp;quot; suffix &amp;quot;:&amp;quot;),     \&#xA;                         __AX__)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Make sure every invocation of the macro is on a different line.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, although the above code &lt;em&gt;should&lt;/em&gt; work, it appears that cc65 doesn't implement the C preprocessor accurately enough to support it.  Fortunately, it turns out that there is a simpler and less subtle approach since asm() supports a printf-like syntax:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#define toscreencode(C) (__AX__ = (C),   \&#xA;                         asm(&amp;quot;cmp #$60&amp;quot;),\&#xA;                         asm(&amp;quot;bcc @L1_%s&amp;quot;, __LINE__),  \&#xA;                         asm(&amp;quot;and #$df&amp;quot;),\&#xA;                         asm(&amp;quot;bne @L2_%s&amp;quot;, __LINE__),  \&#xA;                         asm(&amp;quot;@L1_%s:&amp;quot;, __LINE__),     \&#xA;                         asm(&amp;quot;and #$3f&amp;quot;),\&#xA;                         asm(&amp;quot;@L2_%s:&amp;quot;, __LINE__),     \&#xA;                         __AX__)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Again, every invocation of this macro must be on a different line to deconflict the labels.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-11-25T01:31:55.913" LastActivityDate="2020-11-25T01:31:55.913" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="17057" PostTypeId="1" AcceptedAnswerId="17061" CreationDate="2020-11-24T04:43:35.910" Score="20" ViewCount="3484" Body="&lt;p&gt;Over the past half-century, one of the largest trends in the computer industry has been the replacement of mainframes by microcomputers. Not total by any means – there are still many mainframes in operation – but their heyday is long past. The same is true of COBOL, which still in some capacity or other handles a fair chunk of world GDP, but certainly the percentage of commercial code written in COBOL versus other languages like Java, has declined substantially from its peak.&lt;/p&gt;&#xA;&lt;p&gt;It's interesting to note what has &lt;em&gt;not&lt;/em&gt; happened. By and large, COBOL code has &lt;em&gt;not&lt;/em&gt; been ported from mainframes. Where it is still running, it is in most cases still running on mainframes. Where they have been replaced by microcomputers, the microcomputers are by and large running code in other languages. This is somewhat counterintuitive. In principle, software doesn't care what hardware it's running on – okay, some software does, if it's written in assembly, or otherwise does low-level things with the hardware, but this would not seem to describe business applications in COBOL. Intuitively it seems reasonable that all that code would start being ported to microcomputers once microcomputers cost less for a given capacity. But that's not what happened, and I'm curious about why not.&lt;/p&gt;&#xA;&lt;p&gt;One consideration is that the hardware capacity was not there in all cases. Even when microcomputers started challenging mainframes for MIPS and megaflops, they could not match a high-end mainframe on other metrics like storage capacity in the hard disk array, or number of terminals that could be served simultaneously. Still, there was overlap. Consider the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_9370&quot; rel=&quot;noreferrer&quot;&gt;IBM 9370&lt;/a&gt;: a 370-architecture minicomputer introduced in 1986; it was available with 4-16 MB RAM, 64-384 terminal capacity; that overlaps with the capabilities of contemporary 386 servers; there would be cases where the mainframe was running several applications, at least some of which would use only a small part of its capacity; and of course there would be cases where there was a desire to port code from older mainframes, so the comparison could be with a much later generation of microcomputers. So in some cases, the hardware capacity would be there.&lt;/p&gt;&#xA;&lt;p&gt;What other requirements? Clearly, a COBOL compiler on the target platform. It is certainly the case that such was available on microcomputer operating systems like CP/M, MS-DOS, OS/2 and Windows,  e.g. &lt;a href=&quot;https://rosettacode.org/wiki/CIS_COBOL&quot; rel=&quot;noreferrer&quot;&gt;CIS COBOL&lt;/a&gt; and &lt;a href=&quot;http://www.edm2.com/index.php/Micro_Focus_COBOL&quot; rel=&quot;noreferrer&quot;&gt;Micro Focus COBOL&lt;/a&gt;. Of course, the compiler would need to be sufficiently feature-complete and of adequate quality. This might not have been a trivial requirement, e.g. the former link says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In the late seventies, the company Micro Focus created Compact Interactive Standard COBOL (CIS COBOL) for 8-bit microcomputers. CIS COBOL is based on the ANSI COBOL standard X3.23 (1974). Due to the memory constraints of 64 kilobyte RAM only Level 1 and a few features from Level 2 are implemented.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Okay, it's understandable that features were limited on 64K machines, but one would expect that restriction to be lifted in a few years. However, &lt;a href=&quot;http://www.edm2.com/index.php/Microsoft_COBOL&quot; rel=&quot;noreferrer&quot;&gt;http://www.edm2.com/index.php/Microsoft_COBOL&lt;/a&gt; says&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It should be noted that neither the Microsoft 1.x and 2.x compilers nor the later Micro Focus sourced compilers were in general considered very good even in their day and library support and code quality was considered below par. The Microsoft 1.x/2.x series also had a number of peculiarities that meant that considerable time was needed to port COBOL code to and from the system. The systems were mostly bought by people that needed to do mixed language programming but even in version 1 the support for that was already better than most of their competitors in the DOS world. With release 3 and the inclusion of the &amp;quot;Professional series&amp;quot; tools the support was excellent and the tool would also integrate fully with other Microsoft &amp;quot;Pro series&amp;quot; tools.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And apparently Microsoft and IBM both dropped their independent PC COBOL compilers in favor of licensing the Micro Focus one, despite the above problems. So, not trivial at all.&lt;/p&gt;&#xA;&lt;p&gt;Still, supposing the target COBOL compiler were adequate, what else would be needed? It is common for software to need more than the language per se. If you have a website written in Ruby, it's likely to also depends on Rails. If you have machine learning code written in Python, it's highly likely it also depends on PyTorch or Tensorflow. If you have business software written in COBOL, what is it likely to depend on? I don't know much about IBM mainframes, but I gather they had:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;JCL, the job control language. Roughly equivalent to bash? Some Linux software has quite a bit of code in bash scripts, that would create nontrivial effort to port to a platform with a different shell. Is the same true regarding JCL?&lt;/li&gt;&#xA;&lt;li&gt;RPG, the report generation language, going all the way back to 1959. Roughly equivalent to something like Crystal Reports, albeit without the GUI? Probably substantial chunks of a typical business application could be written in this?&lt;/li&gt;&#xA;&lt;li&gt;DB2, a relational database. This actually seems less likely to be a problem, partly because it was first released only in 1983, and partly because there are other relational databases, and the effort of porting between them, while nontrivial, would be less than if you had to port to a different kind of database.&lt;/li&gt;&#xA;&lt;li&gt;IMS, a pre-relational database. This seems much more likely to be a problem, partly because it goes back to 1966 and partly because the effort of porting from it to a relational database would be correspondingly greater.&lt;/li&gt;&#xA;&lt;li&gt;Other major software components that I'm not aware of?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Which components or facilities were the biggest obstacle to porting typical COBOL applications?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-25T17:19:14.417" Title="What was the most critical supporting software for COBOL on IBM mainframes?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;mainframe&gt;&lt;application-program&gt;&lt;cobol&gt;" AnswerCount="7" CommentCount="15" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17058" PostTypeId="2" ParentId="17057" CreationDate="2020-11-24T06:02:30.360" Score="13" Body="&lt;p&gt;COBOL applications have not typically been ported from mainframes to micros because they rely on two features that micros typically lack.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Throughput&lt;/strong&gt;  COBOL applications often need to process large amounts of data in a fixed amount of time (e.g. processing a day's sales data for all stores in a chain).  These tasks are typically I/O bound and mainframes have special hardware (e.g. I/O processors) to handle the load; micros don't have this.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reliability&lt;/strong&gt; Again, COBOL applications are often used in situations where downtime or errors cannot be tolerated.  Mainframes have hardware and software redundancy built-in so that they can gracefully handle failures; micros typically don't have this.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;See, for example, Tandem's &lt;a href=&quot;https://en.wikipedia.org/wiki/NonStop_(server_computers)&quot; rel=&quot;noreferrer&quot;&gt;NonStop&lt;/a&gt; platform.&lt;/p&gt;&#xA;&lt;p&gt;Java (very popular for businesses) has been ported to a number of mainframe platforms.  Even so, older applications are not typically rewritten since 1) they work fine as-is and 2) there is a risk of changing behavior (new bugs, etc.).&lt;/p&gt;&#xA;" OwnerUserId="7347" LastActivityDate="2020-11-24T06:02:30.360" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17059" PostTypeId="2" ParentId="17057" CreationDate="2020-11-24T06:21:49.887" Score="5" Body="&lt;p&gt;Different things happened.&lt;/p&gt;&#xA;&lt;p&gt;One, when mainframes were replaced, their applications were replaced with new applications written in modern languages for the new platforms. Many a IBM mainframe have been replaced by modern Unix machines with completely new software applications.&lt;/p&gt;&#xA;&lt;p&gt;Two, for those that didn't want rewrite their applications, but change platforms, they relied on virtual environments to run the software. We installed a new HP replacing an IBM system, and part of the installation was a emulator to run IBM code on the HP. So, in this case, the sytem did not need to be rewritten.&lt;/p&gt;&#xA;&lt;p&gt;The real question is why there was never much &amp;quot;greenfield&amp;quot; COBOL written on smaller machines. Likely this was just a matter of modern systems, modern environments, which had more value to the developers than COBOL could offer them at the time.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-11-24T06:21:49.887" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17060" PostTypeId="2" ParentId="17057" CreationDate="2020-11-24T12:03:12.737" Score="-2" Body="&lt;p&gt;The mainframe of yesterday is today’s micro eg: IBM’s Z series.&#xA;As for today’s micros not having IO processors, it began with IDE drives. Even the cheapy SATA hard drives of today have significant cache and transfer rates that would leave the old mainframe systems standing. The average smartphone far exceeds the io and compute performance of 80’s mainframes.&#xA;As for the cobol applications not being ported or replaced - I think that is referred to as ‘technical debt’&lt;/p&gt;&#xA;" OwnerUserId="19950" LastActivityDate="2020-11-24T12:03:12.737" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="17061" PostTypeId="2" ParentId="17057" CreationDate="2020-11-24T14:18:48.693" Score="17" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Which components or facilities were the biggest obstacle to porting typical COBOL applications?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Simply that there were not many applications that made sense to be ported to (desktop) micros. If at all, downward migration of whole applications was toward /3x systems and ultimately AS400. Which was well supported and rather painless.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;lt;RANT&amp;gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;While I wouldn't directly see it in this question, there are two common mistakes when it comes do mainframes and their usage/software&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mainframes are like micros, just older and eating up more space&lt;/li&gt;&#xA;&lt;li&gt;Mainframes were used much like today, just with text based terminals.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;No, they are not and they were not.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Mainframe applications are about data processing, not computing. They are not about interactive use (beside data entry that is). And they are never about privat data stacks but company wide repositories. For 90% of all mainframe software there is simply no use case on and for a desktop machine.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;lt;SUB-RANT&amp;gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Which,BTW, is also why that created a BIAS against the whole idea of micro/desktop computing and, AFAICT, the major issue behind next to no mainframe manufacturers catching the micro computer wave in time, and often butchering the mini (unixoid) business as well. Management simply didn't see why anyone on earth would want to run a logistics consolidation system on a desktop. And couldn't imagine other applications. After all, their secretaries already had nice Selectric typewriters, what more could they want?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;lt;/SUB-RANT&amp;gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Comparing mainframes to micros is like comparing a 40 ton (18-wheeler, road-train, pick whatever is king on your roads) with a family sedan. The sedan is meant to ferry the owner and optional bring little stuff along, with a focus on getting everywhere, the lorry is meant to &lt;em&gt;transport&lt;/em&gt; with it's driver having no intent to get there being rather the operator necessary. It can't get everywhere, but were it gets, it shovels what 100 sedans can't. True, slower but more economic.&lt;/p&gt;&#xA;&lt;p&gt;Mainframes are like that. They do data processing, not computing. They are the heirs of punch card processing. That's not only the reason why they are still around (and will be for quite some time), but also why there is no real need to port whole applications down to micros.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(And much the same way that large lorries still fill our motorways, there is still and will for all forseeable future be a use case for modern mainframes - but that's a different story)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;lt;/RANT&amp;gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Longer Story&lt;/h2&gt;&#xA;&lt;p&gt;Now, having said that, there was a need to port down &lt;em&gt;parts&lt;/em&gt; of mainframe code down to micros: &lt;strong&gt;Complience&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;We all know that software is not simply some magic that does things but codified business rules, regulations and procedures. It formalizes judging and decision making within a workflow. And there's a lot of that in companies. Where small companies may go along by some random, situation based scheme, larger ones will have fine tuned rules.&lt;/p&gt;&#xA;&lt;p&gt;Lat's take a simple one, checking an entry for validity, like a order number for structure. With a decentralized client, like in a car repair shop to order spare parts, it would be cool to have the form beep already local when entering, not half an hour later when the logistics system returns a batch of error messages, right? It's a 25 character alphanumeric entry with lots of hyphens and alike. There is a precise order how to check it.&lt;/p&gt;&#xA;&lt;p&gt;No issue, can be easy done in C, right? Right, but there is already one module, written in COBOL doing the check. And this one piece of source code is used (or called) wherever there is a part number check. Process management does not want &lt;em&gt;anyone&lt;/em&gt; within the company to bypass that code. So either the client developers fight an uphill battle for &lt;em&gt;years&lt;/em&gt; to come to make their own implementation, or rather included that module. And that's exactly what the major use for mainframe originated COBOL on micros was, copying certain function to maintain compatibility and single source for validation and/or access.&lt;/p&gt;&#xA;&lt;p&gt;Microsoft COBOL was quite up to the task of having a bunch of COBOL modules included in your PASCAL, C or BASIC program. Being limited to 64 KiB isn't a big deal, as such modules did not tend to be huge applications. Just kinda closed/read-only source blobs to be compiled and called at the right time.&lt;/p&gt;&#xA;&lt;p&gt;So long story short, &lt;strong&gt;it was (almost) never about porting whole applications down to micro, but integrating micros (as front end) into a mainframe (software) environment.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;... now, porting mainframe COBOL applications to UNIX on the other hand is a complete different story.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;For completeness:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;JCL, the job control language. Roughly equivalent to bash?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Err ... no, not really. Well, yes as it's about controlling jobs, but no so much as programming.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Some Linux software has quite a bit of code in bash scripts, that would create nontrivial effort to port to a platform with a different shell. Is the same true regarding JCL?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Computing centers used a ton of JCL around every application. JCL is essentially the glue logic to transporting piles of punch cards between each stage of processing.Serious, you need to think of it as people moving carts between big mechanical card processing ... and later tapes and disk stacks :)&lt;/p&gt;&#xA;&lt;p&gt;So no, JCL is not really an issue for COBOL on micros, as here handling is done different. CMD.EXE, PowerShell or BASH will be needed anyway - if at all.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;RPG, the report generation language, going all the way back to 1959. Roughly equivalent to something like Crystal Reports, albeit without the GUI?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Just remotely. RPG isn't simply a report generator, but a full figured programming language. It's unique philosophy is again build around punch cards. RPG programs are essentially textual plugboards. Well, that's were it started out - nowadays it's way more complex.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Probably substantial chunks of a typical business application could be written in this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. if not all. Think of it as a framework for data shoveling.&lt;/p&gt;&#xA;&lt;p&gt;But whoever had stuff written in RPG would have not migrated to PC but to a system /3x when downsizing. Low software adaption cost outweighs higher IBM mid range prices by far.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;DB2, a relational database. This actually seems less likely to be a problem, partly because it was first released only in 1983,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;DB2 is SQL and SQL is DB2. Literally.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;IMS, a pre-relational database. This seems much more likely to be a problem,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;IMS is more of an runtime environment and transaction system than a data base. So transferring IMS application to a PC does not make much sense. What does make sens (a lot of in fact) is doing client applications on micros from scratch, no COBOL involved, except maybe above mentioned modues for colpience. IMS offered communication solutions again early on.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Other major software components that I'm not aware of?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;CICS. Then again, for client usage CICS connectors were available from early on, so no issue, while server side interfaces weren't needed.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="3912" LastEditDate="2020-11-25T07:12:45.283" LastActivityDate="2020-11-25T07:12:45.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17062" PostTypeId="2" ParentId="17057" CreationDate="2020-11-24T15:43:16.727" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;IMS is more of an runtime environment and transaction system than a&#xA;data base.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'll have to disagree on that one. IMS is/was a non-relational database (hierachical, if I correctly recall my grad school course in it). It's almost unused today, everyone having gone over to relational databases (SQL style).&lt;/p&gt;&#xA;&lt;p&gt;Perhaps you were thinking of CMS (Conversational/Cambridge Monitor System) under VM, or TSO (Time Share Option, I think) under MVS?&lt;/p&gt;&#xA;" OwnerUserId="19971" LastActivityDate="2020-11-24T15:43:16.727" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17063" PostTypeId="2" ParentId="17057" CreationDate="2020-11-24T19:45:06.620" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What was the most critical supporting software for COBOL on IBM mainframes?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'd venture to say that it was neither of the things you mention; I think it was what IBM termed &amp;quot;access methods&amp;quot; -- data structures and low level system libraries allowing programmatic access to files, first sequential (on tapes), later random (on DASDs). COBOL evolved to be pretty tightly integrated with the access methods available at each stage of its development (ISAM, VSAM, BDAM etc.)&lt;/p&gt;&#xA;&lt;p&gt;A large portion of COBOL applications have been what we call today ETL jobs: reading files, parsing input records, manipulating them, the writing new files with a different record structure. SQL and interactive I/O capabilities were added to COBOL much later.&lt;/p&gt;&#xA;&lt;p&gt;Minicomputer operating systems offered a different, higher-level abstraction for file access, which required new programming paradigms, languages and tools. By the time various COBOL implementations were ported to mini- and microcomputer platforms, the &amp;quot;native&amp;quot; alternatives had already had established themselves, bringing about a new generation of programmers and related technologies.&lt;/p&gt;&#xA;" OwnerUserId="19972" LastActivityDate="2020-11-24T19:45:06.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17064" PostTypeId="1" AcceptedAnswerId="17065" CreationDate="2020-11-25T03:53:22.950" Score="5" ViewCount="1036" Body="&lt;p&gt;... At least, without getting sued into the ground?&lt;/p&gt;&#xA;&lt;p&gt;According to one of the answers to &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/17059/6659&quot;&gt;What was the most critical supporting software for COBOL on IBM mainframes?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;We installed a new HP replacing an IBM system, and part of the installation was a emulator to run IBM code on the HP.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I haven't been able to find any likely reference to that emulator on Google. Closest thing I could find was an emulator called Hercules, which was first released in 1999. However, apparently IBM explicitly refused to license any of its operating systems for running on Hercules. Hobbyists might try it anyway with a pirate copy of an operating system just to play around, figuring probably rightly that IBM won't care, but a business would find it highly inadvisable to go that route.&lt;/p&gt;&#xA;&lt;p&gt;And indeed, a comment to another answer:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It goes without saying that the mainframe middleware is heavily encumbered and protected by NDAs etc. No matter how supportive IBM might appear to be of cut-down versions of e.g. their MQ products running on unix or Windows, you can bet your life that anybody who tried to emulate every mainframe nuance would find themselves tied up in court for a long time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That sounds plausible. Yet if IBM would react like that to someone emulating their middleware, surely they would react even more aggressively to emulation of the entire platform?&lt;/p&gt;&#xA;&lt;p&gt;So what was the emulator on the HP referring to, and how did they get away with it?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="6659" LastEditDate="2020-11-26T01:59:24.493" LastActivityDate="2020-11-26T10:06:44.787" Title="How was it possible to run IBM mainframe software in emulation on HP?" Tags="&lt;history&gt;&lt;emulation&gt;&lt;ibm&gt;&lt;mainframe&gt;&lt;hp&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17065" PostTypeId="2" ParentId="17064" CreationDate="2020-11-25T05:14:14.430" Score="11" Body="&lt;p&gt;I don't know what environment they installed to run their software on the HP. The vendor did all the work. For all I know it was just raw COBOL with an IBM compatible runtime running on top of HP-UX. The most notable thing was that it require 3270 terminals (mostly unheard of in the Unix world).&lt;/p&gt;&#xA;&lt;p&gt;Recall a couple of things.&lt;/p&gt;&#xA;&lt;p&gt;All the IBM machines are, and have been for some time, large virual machine runtimes. Code is not compiled for the underlying hardware, it's compiled to a virtual machine, which is then loaded to work on the actual underlying machine.&lt;/p&gt;&#xA;&lt;p&gt;While a mainframe is particularly sophisticated, that does not mean that the actual applications are particularly sophisticated. This was a Hotel Management and Reservations System. COBOL is not a particularly good system programming system (if this was even written in COBOL, that's an assumption). It's high level business system designed around screens and reports. You don't need cycle accurate systems to run most COBOL applications. You simply need to be able to support the file system, printer, and screen interfaces. And, perhaps, some JCL glue that may come with the application as wrappers for workflow and such.&lt;/p&gt;&#xA;&lt;p&gt;So, I doubt they were actually running a &amp;quot;virtual&amp;quot; mainframe, rather I think they had a compatibility layer supported by their development environment that made porting their software straight forward, down to using the 3270 terminals.&lt;/p&gt;&#xA;&lt;p&gt;Consider the software that we sold and wrote was written to a P-Code, with the runtime ported to a bunch of different systems. As needed, the code could be compiled to binary for specific machines, but, like Java, the P-Code was portable as is as long as the runtime was installed.&lt;/p&gt;&#xA;&lt;p&gt;In our case the P-Code was adequate for the vast majority of programs, but we suggested compiling the most common, large programs not so much for raw performance, but simply for memory space. Compiled code shared the executable pages across the many users, whereas the P-Code did not and thus had a larger memory footprint when 10 or 20 users are running the same program.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-11-25T05:14:14.430" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17066" PostTypeId="2" ParentId="17064" CreationDate="2020-11-25T05:23:49.963" Score="9" Body="&lt;p&gt;There were a number of companies offering IBM 'compatible' mainframes - Hitachi, Fujitsu and Amdahl come to mind. IBM got slapped with an anti-trust suit when it tried to limit their operating systems for their machines only. There was also a lot of business in after-market terminals, printers, tape and disk drives etc.&lt;/p&gt;&#xA;&lt;p&gt;Amdahl was particularly successful in producing faster and cheaper machines than IBM.&#xA;Thus, running IBM code on other machines was commonplace.&lt;/p&gt;&#xA;" OwnerUserId="19950" LastEditorUserId="19950" LastEditDate="2020-11-26T10:06:44.787" LastActivityDate="2020-11-26T10:06:44.787" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17067" PostTypeId="2" ParentId="12001" CreationDate="2020-11-25T06:27:16.817" Score="5" Body="&lt;p&gt;As far as I have been able to find, the earliest use of the word “destructuring” in its current&#xA;meaning is in the &lt;a href=&quot;https://ml.cddddr.org/lispnews/lispnews-19780916.html&quot; rel=&quot;noreferrer&quot;&gt;release notes for Maclisp 1742, from September&#xA;1978&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;[1] New autoloadable interpreter macros: backquote (&amp;quot;`&amp;quot;) and LET.&#xA;    The &amp;quot;backquote&amp;quot; macro and the LET macro will be autoloaded when used.  &#xA;        The backquote macro allows generation of quoted structure with&#xA;    evaluated inserts, and is compatible with the LISP Machine's version.  &#xA;    A &amp;quot;,&amp;quot; within a backquote indicates evaluation of the next s-expression, &#xA;    and &amp;quot;,@&amp;quot; indicates not only evaluation but also that the resultant form is &#xA;    &amp;quot;spliced&amp;quot; into the surrounding list.&#xA;    For example:&#xA;        `(A B ,(+ 1 2)) reads in like (CONS 'A (CONS 'B (CONS (+ 1 2) 'NIL)))&#xA;          which when evaluated  generates  (A B 3)&#xA;        `(A B ,@(LIST 1 2)) read in like &#xA;         (CONS 'A (CONS 'B (APPEND (LIST 1 2) 'NIL)))&#xA;          which when evaluated  generates  (A B 1 2)&#xA;    One can imagine how especially helpful this will be in writing definitions&#xA;    of MACROs.&#xA;        The LET macro provides a convenient way to lambda-bind variables to &#xA;    values.  Its usages is as follows:&#xA;        (LET ((var1 val1) (var2 val2) . . . (varn valn))&#xA;             &amp;lt;form1&amp;gt;&#xA;             . . . &#xA;             &amp;lt;formn&amp;gt;)&#xA;    One may substitute merely &amp;quot;var&amp;quot;  in place of &amp;quot;(var NIL)&amp;quot;&#xA;    For example:&#xA;        (LET ((A 1) (B 2) C)&#xA;             &amp;lt;forms&amp;gt;)&#xA;    Binds A to 1, B to 2, and C to NIL and then evaluates &amp;lt;forms&amp;gt;.&#xA;    An extension to the binding of one variable, is a &amp;quot;pattern&amp;quot; of&#xA;    variables, which are bound to the corresponding subparts of the &#xA;    &amp;quot;val&amp;quot;;  e.g., (LET ( ((A . B) '(CONS 1 2)) ((C () D) (LIST 1 2 3)))&#xA;                       &amp;lt;forms&amp;gt;)&#xA;    would bind A to &amp;quot;CONS&amp;quot;, B to &amp;quot;(1 2)&amp;quot;, C to &amp;quot;1&amp;quot;, and D to &amp;quot;3&amp;quot;.&#xA;    There is an attempt by the LET macro code to optimize the destructuring&#xA;    operations of CAR and CDR over the original value.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If that's too informal, the term also occurs in 1980, in &lt;a href=&quot;https://www.ban.ai/multics/doc/a087372.pdf&quot; rel=&quot;noreferrer&quot;&gt;MIT Laboratory for Computer&#xA;Science TM-169 (“LOOP Iteration Macro”)&lt;/a&gt;,&#xA;section 5:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Destructuring&lt;/em&gt; provides one with the ability to “simultaneously” assign or bind&#xA;multiple variables to components of some data structure.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A 1972 thesis about APL program verification (Susan Lucille Gerhart, &lt;a href=&quot;http://reports-archive.adm.cs.cmu.edu/anon/scan/CMU-CS-72-gerhart.pdf&quot; rel=&quot;noreferrer&quot;&gt;“Verification of APL&#xA;Programs”&lt;/a&gt;) uses&#xA;“destructuring” to mean something unrelated, though still related to programming.&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2020-11-25T06:27:16.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17068" PostTypeId="2" ParentId="17057" CreationDate="2020-11-25T17:19:14.417" Score="2" Body="&lt;p&gt;Not sure what you really asked.&lt;/p&gt;&#xA;&lt;p&gt;I was an IBM SE back then.&#xA;Cobol is a compiled language.&#xA;So you need a compiler for it.&#xA;The compiler needs an operating system.&#xA;The operating system needs a mainframe computer.&#xA;The mainframe computer needs FEs to maintain it and electricity to run it and it needs to be cooled in a special room with a raised floor to permit cabling  underneath.&lt;/p&gt;&#xA;&lt;p&gt;There were many mainframes that ran cobol.&#xA;There were several operating systems that ran cobol although only two main classes of those:  Big Oz  and Dos.  Maybe s/20 had an opsys too with cobol.&#xA;There were several compilers with various completeness of features.&#xA;Again mostly DOS and OS based.  Unsure about s/20 ; and later s/3 which I think was only RPG.&lt;/p&gt;&#xA;&lt;p&gt;If you could ask a shorter direct question we could answer you better.&lt;/p&gt;&#xA;" OwnerUserId="19978" LastActivityDate="2020-11-25T17:19:14.417" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17069" PostTypeId="1" AcceptedAnswerId="17070" CreationDate="2020-11-25T18:49:26.497" Score="27" ViewCount="5300" Body="&lt;p&gt;I mean, all other OSs that I know of use some form of slash as a path separator, so why did Apple choose the colon?&lt;/p&gt;&#xA;" OwnerUserId="19979" LastActivityDate="2020-11-26T17:44:21.897" Title="Why did MacOS Classic choose the colon as a path separator?" Tags="&lt;history&gt;&lt;mac-os-classic&gt;&lt;file-system&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17070" PostTypeId="2" ParentId="17069" CreationDate="2020-11-25T19:08:23.663" Score="36" Body="&lt;p&gt;&lt;strong&gt;Colon was inherited from SOS for the Apple III&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Unlike one may assume, &lt;a href=&quot;https://en.wikipedia.org/wiki/Classic_Mac_OS&quot; rel=&quot;noreferrer&quot;&gt;MacOS&lt;/a&gt; (1984/01) did not inherited the colon (&lt;code&gt;:&lt;/code&gt;) from Lisa OS (1983/01), which &lt;a href=&quot;https://www.pagetable.com/?p=241&quot; rel=&quot;noreferrer&quot;&gt;used a hyphen&lt;/a&gt; (&lt;code&gt;-&lt;/code&gt;) as path separator, but from Apple III's &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_SOS&quot; rel=&quot;noreferrer&quot;&gt;SOS&lt;/a&gt; (1980/10), created for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_III&quot; rel=&quot;noreferrer&quot;&gt;Apple III&lt;/a&gt; to manage the huge data pile of a 5 MiB Profile.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Staircase wit:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;On colon vs. slash, Apple went not once but twice full circle:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;SOS had a colon,&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ProDOS, the direct SOS offspring for the Apple II, switched the colon for a slash (&lt;code&gt;/&lt;/code&gt;) when introduced in 1983; its 16-bit follow up&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ProDOS 16 for the IIgs (as kernel of GS/OS) &lt;a href=&quot;http://www.1000bit.it/support/manuali/apple/technotes/gsos/tn.gsos.04.html&quot; rel=&quot;noreferrer&quot;&gt;reintroduced the colon&lt;/a&gt; for compatibility with MacOS, which in turn with&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Mac OSX - (re)introduced the slash to accommodate its Unix base system.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2020-11-26T08:22:08.737" LastActivityDate="2020-11-26T08:22:08.737" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17071" PostTypeId="2" ParentId="17069" CreationDate="2020-11-25T19:09:44.017" Score="25" Body="&lt;p&gt;The original Macintosh File System did not support directories.  But the Mac did support multiple floppy drives from the start, and colon &lt;code&gt;:&lt;/code&gt; was used in fairly standard fashion as a drive prefix analogous to VMS, MS-DOS and elsewhere – &lt;code&gt;Disk:File&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is only an educated guess, but I suspect they generalized &lt;code&gt;:&lt;/code&gt; to a path separator later with HFS as it was already a reserved character for the drive specifier use.  This would prevent incompatibility with forward slash &lt;code&gt;/&lt;/code&gt; being used as a valid character in existing Mac file names.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="15334" LastEditDate="2020-11-25T19:59:14.203" LastActivityDate="2020-11-25T19:59:14.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17072" PostTypeId="1" CreationDate="2020-11-25T19:16:22.660" Score="4" ViewCount="149" Body="&lt;p&gt;In 1974, Atari released a driving game called Gran Trak 10. The development prototypes had used real car steering wheels and pedals, but it was realized these were too expensive, so they were changed for the production version.&lt;/p&gt;&#xA;&lt;p&gt;Nonetheless, due to a dreadful miscalculation, it turned out (according to &lt;em&gt;Atari, Inc: Business is fun&lt;/em&gt;, page 250), the game cost $1095 to produce, while it was being sold for $995, losing a hundred dollars on each unit. This was a large part of the reason Atari ended up with an annual loss of over half a million dollars, earning Gran Trak 10 the title of &amp;quot;the game that nearly put Atari out of business&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Clearly there was too much firewalling between different parts of the company, but I am also curious about the material causes. How did the game end up costing $1095 to produce? It doesn't look that much more complex than Pong - it's described as perhaps the first game to use a ROM chip, but one ROM chip surely cannot have been that expensive - and Pong has been said to have cost $300 to produce. Where did the extra cost come from?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2020-11-25T20:38:35.777" LastActivityDate="2020-11-25T20:38:35.777" Title="Why did Gran Trak 10 cost so much?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;atari&gt;&lt;arcade&gt;" AnswerCount="0" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17073" PostTypeId="2" ParentId="17069" CreationDate="2020-11-25T19:50:42.387" Score="13" Body="&lt;p&gt;It's not completely accurate to focus on slashes as &lt;em&gt;the&lt;/em&gt; established solution — &lt;code&gt;.&lt;/code&gt; was also in the mix, being DEC's choice for both TOPS and VMS.&lt;/p&gt;&#xA;&lt;p&gt;That said, I'm going to speculate wildly that it comes down to:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Apple's Macintosh filing systems were already fairly non-standard — supporting forked files, for example — in support of simplifying the user experience; and&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;:&lt;/code&gt; makes a lot more sense to a normal non-computer user than a slash.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;E.g. suppose we were important 1980s office people and I told you that I had filed a report under 'Finance: Housing', you'd assume it was in the 'housing' subcategory to 'finance'. If I told you I had filed it as 'Finance/Housing' you'd think it was in the single category that is simultaneously both finance and housing.&lt;/p&gt;&#xA;&lt;p&gt;So the former better communicates intent.&lt;/p&gt;&#xA;&lt;p&gt;Couple that with the fact that Macintoshes of the era couldn't even physically read the floppy disks of other machines — other disks were either 5.25&amp;quot; or double density, Macintoshes take 3.5&amp;quot; disks and the pre-SE Macintosh disk controllers can decode single density and GCR only — and there's really no good reason for hewing to slashes.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-11-26T17:44:21.897" LastActivityDate="2020-11-26T17:44:21.897" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="17074" PostTypeId="1" AcceptedAnswerId="17130" CreationDate="2020-11-25T20:27:13.490" Score="3" ViewCount="201" Body="&lt;p&gt;What sort of performance I can expect from PC Task 4.4 on Amiga 500 + 030 50MHz MMU, 64MB RAM? Would it be possible to run Windows 3.11 / 95 and have any real use from it?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2020-11-28T21:06:37.413" Title="PC Task performance" Tags="&lt;ibm-pc&gt;&lt;emulation&gt;&lt;amiga-500&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17075" PostTypeId="2" ParentId="17069" CreationDate="2020-11-25T21:03:00.813" Score="23" Body="&lt;p&gt;I think the colon deserves to be considered the original, the one true separator character.  All others are mere imitators  ;-)&lt;/p&gt;&#xA;&lt;p&gt;My rationale for this is the seminal paper &lt;a href=&quot;https://multicians.org/fjcc4.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;A General-Purpose File System For Secondary Storage&lt;/em&gt;&lt;/a&gt; which first laid out the conceptual design of a tree-structured file system. It used &amp;quot;:&amp;quot; to separate components in path names (and in tree names, a distinction we don't generally bother with these days).&lt;/p&gt;&#xA;&lt;p&gt;Thus, to answer the question - I imagine that the MacOS implementers were simply following historical precedent.&lt;/p&gt;&#xA;&lt;p&gt;When implemented in Multics, the path separator had become &amp;quot;&amp;gt;&amp;quot;, so the honors go to the paper, not the implementation.&lt;/p&gt;&#xA;&lt;p&gt;George 3 (for the ICL 1900 series) curiously used &amp;quot;:&amp;quot; for a username prefix, but &amp;quot;.&amp;quot; for the pathname separator.  I suppose this to be similar to the way Unix interprets &amp;quot;~user&amp;quot;, except that &amp;quot;:user&amp;quot; was built into the file system.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-11-25T21:03:00.813" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17076" PostTypeId="1" AcceptedAnswerId="17077" CreationDate="2020-11-25T21:46:31.087" Score="20" ViewCount="5319" Body="&lt;p&gt;Some fascinating stories in &lt;a href=&quot;https://groups.google.com/g/alt.folklore.computers/c/cUYpRP6bj8g/m/0EklpD_PiNIJ&quot; rel=&quot;noreferrer&quot;&gt;this discussion thread&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It starts with discussion about computers overheating, but about halfway through the thread, it switches to discussion of mainframe installations in which it was apparently typical to have an emergency power off button that was big, conspicuous, placed in a very visible and easily reachable location, and basically had everything short of a 'PUSH ME' sign over it. Needless to say, these buttons often got pushed, with results that make amusing stories after the fact.&lt;/p&gt;&#xA;&lt;p&gt;Why exactly were these buttons there? The guess that comes to mind is that the installations were designed by engineers used to other kinds of industrial machinery, such as gears that could catch and mangle an unwary limb, or pumps transporting toxic or flammable fluids, where an emergency power off button could have safety benefits, and they kept the habit. But is there any reasonably probable scenario where there would be a safety benefit from powering off a mainframe a few seconds faster?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="5199" LastEditDate="2020-11-25T21:55:04.680" LastActivityDate="2020-11-28T10:01:59.860" Title="Why did mainframes have big conspicuous power-off buttons?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;mainframe&gt;&lt;design-choices&gt;" AnswerCount="5" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17077" PostTypeId="2" ParentId="17076" CreationDate="2020-11-25T21:58:11.027" Score="36" Body="&lt;p&gt;Yes, huge safety concerns as I remember engineers sitting inside the cabinets of large mainframes while it was running, fully powered, large currents in each cabinet powering fans. Cooling water being pumped through the frames. Huge wiring looms hanging across the floor to great logic analysers on wheeled trolleys; trip hazards.&lt;/p&gt;&#xA;&lt;p&gt;One person regularly smoked their pipe whilst sitting inside the open cabinet using naked flames to re-light it. Different times.&lt;/p&gt;&#xA;&lt;p&gt;Once the water cooling developed a slight leak and it was months before the 4 foot deep water was discovered in the dark false floor void.&lt;/p&gt;&#xA;&lt;p&gt;An emergency button was certainly re-assuring.&lt;/p&gt;&#xA;" OwnerUserId="611" LastActivityDate="2020-11-25T21:58:11.027" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17078" PostTypeId="2" ParentId="17076" CreationDate="2020-11-25T22:15:47.857" Score="18" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;It starts with discussion about computers overheating,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That discussion seams to include some quite vague memory, so I wouldn't put to much into here. Still, such buttons were available and even installed after market, depending on company or state regulations. A CRAY Y-MP EL used at TU München is a great example, with its big power off:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qajxs.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qajxs.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Picture taken from &lt;a href=&quot;https://cray-cyber.org/category/cray-y-mp-el/&quot; rel=&quot;noreferrer&quot;&gt;this report&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The  massive plastic ring is an after-market add-on by university staff to avoid unintended use.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Needless to say, these buttons often got pushed, with results that make amusing stories after the fact.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. Never had any such in several decades of working in computing centers.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why exactly were these buttons there?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Regulations that require machinery above certain power level and/or in certain environment to have such an instant off facility.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But is there any reasonably probable scenario where there would be a safety benefit from powering off a mainframe a few seconds faster?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Emergency off switches are exactly for the time when there is no educated personnel to operate a regular shutdown. It's like emergency measures in contrast to security. Security is to allow secure operation by (hopefully) trained operators, while emergency measures must be made in a way that everyone can operate.&lt;/p&gt;&#xA;&lt;p&gt;Imagine a mainframe with smoke is emerging - what is the better solution, having some random guy, noticing this jumping ahead and pressing the button, or walking to the next phone and calling some help desk to get hold of an operator?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-26T19:59:40.797" LastActivityDate="2020-11-26T19:59:40.797" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17079" PostTypeId="2" ParentId="11588" CreationDate="2020-11-25T22:22:24.893" Score="1" Body="&lt;p&gt;Every time we started up we had to unplug and replug to get the keyboard connected to a Windows 10 computer with a PS2 to USB adapter (which I believe is a passive unit) to work. It was plugged into a USB2 port.  All I had to do was plug it into one of the computers USB3 ports and the keyboard started up perfectly with the computer afterwards no unplugging and replugging required.&lt;/p&gt;&#xA;" OwnerUserId="19982" LastActivityDate="2020-11-25T22:22:24.893" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17080" PostTypeId="1" AcceptedAnswerId="17081" CreationDate="2020-11-25T22:25:55.120" Score="4" ViewCount="265" Body="&lt;p&gt;The &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/rp06.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEC RP06 disk drive&lt;/a&gt; was a remarkable piece of hardware. It seems to have been the last generation of drives that used rigid magnetic disks in removable packs, before their replacement by 'Winchester' fully enclosed hard disks.&lt;/p&gt;&#xA;&lt;p&gt;Unscheduled loss of power has always been a bane of disk drives; what happens if there is a power cut, or someone hits the emergency power off button, while in the middle of writing a file? But I've heard of worse; there was one story about one of the old drives – I forget which model, but one of the ones the size of washing machines – where someone tripping over the power cable caused a prompt head crash, physically destroying the head and disk. At the other extreme, I've also heard of drives where the rotational energy would be used to finish writing the current chunk of data.&lt;/p&gt;&#xA;&lt;p&gt;So, to be specific: What happens to a DEC RP06 when there is unscheduled loss of power in the middle of writing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-25T23:41:08.443" Title="How did the DEC RP06 respond to unscheduled power off?" Tags="&lt;history&gt;&lt;hard-disk&gt;&lt;disk-drive&gt;&lt;dec&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17081" PostTypeId="2" ParentId="17080" CreationDate="2020-11-25T23:15:04.393" Score="8" Body="&lt;p&gt;The &lt;a href=&quot;http://bitsavers.org/pdf/dec/disc/rp04_rp05_rp06/RP05_06_DriveMaintMan_Dec75.pdf&quot; rel=&quot;noreferrer&quot;&gt;RP06 maintenance manual&lt;/a&gt; says&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Emergency Retract.&lt;/strong&gt; An emergency retract operation is used to remove&#xA;the heads from the pack if the retract operation fails, or if there is&#xA;a power or power supply failure.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;3.4.2.3 &lt;strong&gt;Emergency Retract Mode&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Only one positioning operation can occur in this mode, this being an emergency-retract operation. In the&#xA;emergency-retract operation/mode, the heads are unloaded and retracted&#xA;from the pack whenever a serious malfunction warrants such action.&#xA;Examples are logic voltage failure, retract failure, overcurrent&#xA;failure, and supply voltage failure. During this operation, heads are&#xA;cammed away from the disc surfaces as the heads move in reverse out of&#xA;the pack.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, it seems that when loss of power is detected, the heads are immediately retracted off the disc by logic in the drive unit.  I don't believe the current write, if any, is completed, but I did not find specific statement of that.  However, all mentions of emergency retract suggest it's immediately triggered by loss of power (and by other fault situations).&lt;/p&gt;&#xA;&lt;p&gt;The power supply seems to have arrangements for supplying &amp;quot;emergency retract power&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-11-25T23:41:08.443" LastActivityDate="2020-11-25T23:41:08.443" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17082" PostTypeId="1" AcceptedAnswerId="17084" CreationDate="2020-11-25T23:19:59.837" Score="5" ViewCount="145" Body="&lt;p&gt;The obvious way for a database to store data is with each record in a contiguous chunk, and each field having a fixed size and offset in the record. &lt;a href=&quot;https://www.joelonsoftware.com/2001/12/11/back-to-basics/&quot; rel=&quot;noreferrer&quot;&gt;Joel Spolsky&lt;/a&gt; praises that way of doing things:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;With relational databases, the performance of moving from record to record is fixed and is, in fact, one CPU instruction. That’s very much by design.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And what he says is true, or at least traditionally was.&lt;/p&gt;&#xA;&lt;p&gt;As time goes by, CPU power becomes cheaper and more plentiful, to the point where it makes sense to start spending some of it using more complex storage formats that save disk space and bandwidth, and indeed &lt;a href=&quot;https://stackoverflow.com/questions/1369864/does-postgresql-support-transparent-compressing-of-tables-fragments&quot;&gt;modern databases can do this&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I would like to get a feel for when this started happening.&lt;/p&gt;&#xA;&lt;p&gt;What was the first database that started at least optionally compressing tables? That is, compressing tables in situ as opposed to in backup dumps, and commercial-grade database rather than experimental prototype, and as a capability actually used in production rather than a lab demonstration?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-26T10:31:06.863" Title="What was the first database to start compressing in situ?" Tags="&lt;history&gt;&lt;compression&gt;&lt;database&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17083" PostTypeId="2" ParentId="17064" CreationDate="2020-11-26T00:54:52.130" Score="3" Body="&lt;p&gt;Micro Focus COBOL will emulate at least 20 different COBOL dialects, and can compile and run on various platforms, including HP/UX (at least in older versions).  It even has a CICS emulator.  It's possible that the vendor was using this tool, or some other mainframe COBOL porting tool to move the application to the HP.&lt;/p&gt;&#xA;" OwnerUserId="3796" LastActivityDate="2020-11-26T00:54:52.130" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17084" PostTypeId="2" ParentId="17082" CreationDate="2020-11-26T01:56:19.480" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;As time goes by, CPU power becomes cheaper and more plentiful, to the point where it makes sense to start spending some of it using more complex storage formats that save disk space and bandwidth, and indeed modern databases can do this.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Oh, the situation was rather the other way around. There was never enough disk space. If one got to store several tables of each holding &amp;gt;100,000 records on disks of only 72 MiB, storage is a bigger problem than any CPU ever can become. So various kinds of compression were used early on.&lt;/p&gt;&#xA;&lt;p&gt;The methods go along a continuous vector from optimized data types and data storage all the way to deduplication (*1)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The most basic way of compression is simply storing data more compactly - like using an integer or a BCD instead of character based data.&lt;/li&gt;&#xA;&lt;li&gt;In addition, data was stored wherever there was some space - think of using the high bit of the first character of a name holding a male/female flag (*2)&lt;/li&gt;&#xA;&lt;li&gt;Use of variable-length records allowed databases to simply not store what doesn't need to be stored.&lt;/li&gt;&#xA;&lt;li&gt;This became especially useful with variable-length fields. Here storage on disk was done much like one knows from later mini/micro computers. When writing a record, each field was only transferred until the last used character, followed by a delimiter (*3). When reading, the fields were again filled into a virtual fixed size record.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All of this not only saved valuable disk space, but also sped up many operations. Access operations are, more often than not, local to each other. Having more records in a single block increases chances of not needing another disk access - which is aeons in CPU time, no matter how fast the disk and how slow the CPU is.&lt;/p&gt;&#xA;&lt;p&gt;Of course most of these mechanisms were application-specific. But already the field-level compression can be done by a more generic layer inside a database - as soon as it had an idea about field location and size.&lt;/p&gt;&#xA;&lt;p&gt;In the mid 1970s, which is about the time when generic databases started to become a thing, some implemented these methods - such as IBM's &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System_R&quot; rel=&quot;nofollow noreferrer&quot;&gt;System R&lt;/a&gt;, close tied to later &lt;a href=&quot;https://en.wikipedia.org/wiki/Ingres_(database)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ingres&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;From Grampa's Vault&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;On an application-specific database, designed ca. 1976/77, we used a somewhat similar mechanism, albeit without a field dictionary. Records were structured as follows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;total length of record&lt;/li&gt;&#xA;&lt;li&gt;unique key (fixed Length)&lt;/li&gt;&#xA;&lt;li&gt;version number&lt;/li&gt;&#xA;&lt;li&gt;write race detection&lt;/li&gt;&#xA;&lt;li&gt;a binary chunk, preceded by a length field&lt;/li&gt;&#xA;&lt;li&gt;a character chunk&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The savings came within the character chunk. It can only hold, as the name implies, characters, which in EBCDIC occupy the range of X'40'..X'FF'. The compression routine simply walked along and replaced every occurrence of more than two (and less than 64) blanks (spaces) by its length in binary. E.g. three blanks became X'03' and so on.&lt;/p&gt;&#xA;&lt;p&gt;If, for whatever reason, bytes with values of less than x'40' were encountered, they were stored as-is, preceded by x'00' and its length. Of course such were to be avoided.&lt;/p&gt;&#xA;&lt;p&gt;When reading, a function provided a buffer and what it would expect as binary and total length - this was meant to allow upward (and strictly for reading, downward) compatibility, so record definitions could be extended (new fields) without the need to convert the all data including archive and/or recompile all accessing programs.&lt;/p&gt;&#xA;&lt;p&gt;Depending on the data stored, savings of more than 90%, with an average of over 50%, were realized in real-world applications.&lt;/p&gt;&#xA;&lt;p&gt;At some point we also added a simple RLE for other characters beside space (by using the X'01' prefix), but found that this would result in next to no savings. I think it stayed in the code until today, but I'm not sure.&lt;/p&gt;&#xA;&lt;p&gt;Compared to field-based compression, this method had not only the advantage of not needing any knowledge about the record structure (beside where to begin compression), but more importantly, it didn't add any data for delimiters. Its worst-case storage size was the uncompressed record, where delimiter based systems add one byte per field - including for empty ones, where our method only used one in worst case.&lt;/p&gt;&#xA;&lt;p&gt;Back to today ...&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Long story short: While modern compression tools can deliver great results independent of the data to be compressed, simple methods, tailored to the data to be stored, can come quite close.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In fact, the request for deduplication in databases never was just a theoretical way toward 'cleaner' structures.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Believe me, that's one of the most simple examples. If there are only 28 bytes to store a complete transaction record, one gets very creative.&lt;/p&gt;&#xA;&lt;p&gt;*3 - It's useful to remember that IBM already introduced specific control characters to be used as separators to ASCII.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2020-11-26T10:31:06.863" LastActivityDate="2020-11-26T10:31:06.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17085" PostTypeId="1" AcceptedAnswerId="17086" CreationDate="2020-11-26T05:32:27.330" Score="20" ViewCount="4301" Body="&lt;p&gt;Now of course there is a sense in which they were – some mainframe installations supported thousands of users! But there is a distinction.&lt;/p&gt;&#xA;&lt;p&gt;Consider the familiar fixture in so many 80s computer science labs: a VAX running UNIX or VMS, with an account for each student. That's a multiuser system in the sense that each user had an account with the right to run &lt;em&gt;arbitrary code&lt;/em&gt;. Thus it was necessary or at least highly beneficial for the operating system to use memory protection to screen the users from each other, so that e.g. one student trying to debug a C program dereferencing stray pointers, couldn't crash another's processes.&lt;/p&gt;&#xA;&lt;p&gt;By contrast, consider this site, retrocomputing.stackexchange.com. It has many users – but we are &lt;em&gt;not&lt;/em&gt; users on the underlying server. The server is running an operating system, most often Linux, that has multiuser capability like the VAX – but that multiuser capability is not being used. We users do not have the right to run arbitrary code, and we can be handled purely in software. To the operating system, the entire site is just one user.&lt;/p&gt;&#xA;&lt;p&gt;Now, IBM mainframes were not really about providing student accounts. Their stock in trade was transaction processing. A mainframe might, say, run an airline reservation system. Each teller making bookings would be a user within the reservation system – but &lt;em&gt;not&lt;/em&gt; running arbitrary code, and not a user on the operating system.&lt;/p&gt;&#xA;&lt;p&gt;So that's the typical mode of use of an IBM mainframe. And at least in the early days, some of them were also used to run student jobs in batch mode.&lt;/p&gt;&#xA;&lt;p&gt;But were any of them used like the college-lab VAX, to provide a bunch of people with interactive shell accounts that could run arbitrary code?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-03T16:55:11.210" Title="Were any IBM mainframes ever run multiuser?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;mainframe&gt;&lt;ibm360&gt;&lt;s360&gt;" AnswerCount="17" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17086" PostTypeId="2" ParentId="17085" CreationDate="2020-11-26T05:43:44.327" Score="33" Body="&lt;p&gt;Yes.  There were CP/CMS and VM/370 - true multiuser operating systems running on the mainframe with individual users logged in.  AFAIK it was mainly used for software developers (to develop IBM mainframe software).&lt;/p&gt;&#xA;&lt;p&gt;I had the pleasure working on VM/370 once.  Not what you'd call an ideal development environment.  You got storage allocated to you:  A certain number of 'cylinders' on the hard disk.  Then you allocated files on it yourself.  By cylinder number.  IIRC.  Not pretty.&lt;/p&gt;&#xA;&lt;p&gt;Here's a &lt;a href=&quot;https://en.wikipedia.org/wiki/VM_(operating_system)#History&quot; rel=&quot;noreferrer&quot;&gt;wikipedia article on (historical) IBM operating systems that points to other articles on these multiuser systems&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://gunkies.org/wiki/Installing_VM/370_on_Hercules&quot; rel=&quot;noreferrer&quot;&gt;Try it yourself on the Hercules emulator!&lt;/a&gt;  no warranty here! I have &lt;em&gt;not&lt;/em&gt; tried it myself and have no intention to at any time whatsoever.&lt;/p&gt;&#xA;" OwnerUserId="332" LastEditorUserId="332" LastEditDate="2020-11-26T05:49:05.830" LastActivityDate="2020-11-26T05:49:05.830" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17087" PostTypeId="2" ParentId="17085" CreationDate="2020-11-26T06:20:14.780" Score="19" Body="&lt;p&gt;IBM mainframes are still around (&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Z&quot; rel=&quot;noreferrer&quot;&gt;IBM Z&lt;/a&gt;). &lt;a href=&quot;https://en.wikipedia.org/wiki/Linux_on_IBM_Z&quot; rel=&quot;noreferrer&quot;&gt;Linux&lt;/a&gt; has been available for IBM Z hardware and its predecessor, System/390, for 20 years, and z/OS is itself a certified UNIX through the &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIX_System_Services&quot; rel=&quot;noreferrer&quot;&gt;z/OS UNIX System Services&lt;/a&gt;. Which is to say that IBM mainframes have been run in UNIX-like multi-user fashion for two decades &lt;em&gt;by running UNIX&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Apart from that, z/OS and its predecessors have been supporting multiple concurrent users through &lt;a href=&quot;https://de.wikipedia.org/wiki/Resource_Access_Control_Facility&quot; rel=&quot;noreferrer&quot;&gt;RACF&lt;/a&gt; (access control) and &lt;a href=&quot;https://en.wikipedia.org/wiki/Time_Sharing_Option&quot; rel=&quot;noreferrer&quot;&gt;TSO&lt;/a&gt; (time sharing) since the 1970s.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-11-26T06:20:14.780" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17088" PostTypeId="2" ParentId="17085" CreationDate="2020-11-26T07:53:20.720" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Thus it was necessary or at least highly beneficial for the operating system to use memory protection to screen the users from each other ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That &lt;em&gt;&amp;quot;memory protection&amp;quot;&lt;/em&gt; scheme is typically &lt;a href=&quot;https://en.wikipedia.org/wiki/Virtual_memory&quot; rel=&quot;noreferrer&quot;&gt;virtual memory&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But were any of them used like the college-lab VAX, to provide a bunch of people with interactive shell accounts that could run arbitrary code?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, dating back to the late 1960s.&lt;br /&gt;&#xA;&amp;quot;The IBM System/360 Model 67 was announced in 1965 and shipped in 1966 to support the demand for time-sharing systems, computers that could support numerous users at the same time. The Model 67 was essentially a Model 65 with the addition of virtual memory.&lt;br /&gt;&#xA;It supported &amp;quot;on-line&amp;quot; computing with remote users, time-sharing, and multiple concurrent users. Unfortunately, due to delays in releasing the operating system the Model 67 was not a large success, with only 52 installations by the end of 1970.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;Quotes from &lt;a href=&quot;http://www.righto.com/2019/04/iconic-consoles-of-ibm-system360.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.righto.com/2019/04/iconic-consoles-of-ibm-system360.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Similar information is at &lt;a href=&quot;https://www.computerhistory.org/revolution/mainframe-computers/7/161&quot; rel=&quot;noreferrer&quot;&gt;https://www.computerhistory.org/revolution/mainframe-computers/7/161&lt;/a&gt;:&lt;br /&gt;&#xA;&amp;quot;A version for timesharing, called the Model 67, was the first 360 to use virtual memory.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;I recall using a timeshare account on the university's IBM 360 back in the early 1970s. A hardcopy terminal (probably an &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/2741.html&quot; rel=&quot;noreferrer&quot;&gt;IBM 2741 Terminal&lt;/a&gt;) with a Selectric &amp;quot;golf ball&amp;quot; print head was used for sessions, and were scattered around the campus.&lt;/p&gt;&#xA;" OwnerUserId="19157" LastEditorUserId="19157" LastEditDate="2020-11-26T08:11:51.307" LastActivityDate="2020-11-26T08:11:51.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17089" PostTypeId="1" CreationDate="2020-11-26T08:37:15.263" Score="1" ViewCount="98" Body="&lt;p&gt;I was working for a Hungarian magazine in the early 90s which had the most curious device: a laser printer which had a pass through scanner on top ie you laid down a page and it dragged it under a fixed head and that's how it scanned (see today's mobile scanners Fujitsu ScanSnap iX100 or the Epson DS-70 for examples, it basically had one of these bolted on top). It was a desktop model about the same with as an A4 sheet but very long. Does anyone have any idea what this could've been?&lt;/p&gt;&#xA;" OwnerUserId="3722" LastEditorUserId="3722" LastEditDate="2020-11-26T11:51:09.830" LastActivityDate="2020-11-26T11:51:09.830" Title="Early multifunction laser printer with a fixed scanning head?" Tags="&lt;printer&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17090" PostTypeId="2" ParentId="17085" CreationDate="2020-11-26T09:05:34.163" Score="4" Body="&lt;p&gt;Wikipedia has this:&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Time-sharing_system_evolution&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Time-sharing_system_evolution&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;IBM features heavily.&lt;/p&gt;&#xA;" OwnerUserId="19950" LastActivityDate="2020-11-26T09:05:34.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17091" PostTypeId="1" AcceptedAnswerId="17110" CreationDate="2020-11-26T10:01:53.393" Score="3" ViewCount="132" Body="&lt;p&gt;A standard Amstrad 3 inch disc can be formatted to CP/M Data format on the machine:&#xA;single sided, single track, 40 tracks, 9 sectors/track, 512-byte sectors, no reserved tracks, 1k blocks, 2 directory blocks, gap lengths 2Ah and 52h, not bootable.This gives around 178Kb usable space.&lt;/p&gt;&#xA;&lt;p&gt;You typically format these discs using the Amstrad DISCKIT3 under CP/M, though it is possible to do so from AMSDOS using firmware routines: there are simple RSX utilities to do so.&lt;/p&gt;&#xA;&lt;p&gt;There were also some non-standard formats used by game developers to fit more space onto the disc. For example, I have seen disc images with 10 sectors/track for 38 of the 40 tracks. The gaps between sectors are reduced accordingly. These disks appear to be readable on the Amstrad disc drive. This is distinct from various copy protection schemes that were also used.&lt;/p&gt;&#xA;&lt;p&gt;Is it possible to format a regular 3 inch diskette to a higher capacity than the standard 180Kb (less directory), with the following restrictions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The disc should be readable from the computer using AMSDOS routines, patched if necessary.&lt;/li&gt;&#xA;&lt;li&gt;There should be no additional hardware involved, for example additional ROMs.&lt;/li&gt;&#xA;&lt;li&gt;Using an Amstrad CPC6128.&lt;/li&gt;&#xA;&lt;li&gt;No need to read the disc under CP/M&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I am open to solutions that involve creating a disk image on another machine and transfering it to the CPC via a utility such as &lt;a href=&quot;https://github.com/pelrun/dsk2cdt2disc&quot; rel=&quot;nofollow noreferrer&quot;&gt;dsk2cdt2disc&lt;/a&gt;, which now copes with non-standard gaps between sectors.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2020-11-28T09:51:47.840" LastActivityDate="2020-11-28T09:51:47.840" Title="How can I format a higher capacity 3 inch disc on a regular CPC6128?" Tags="&lt;floppy-disk&gt;&lt;disk-drive&gt;&lt;floppy-drive&gt;&lt;cpc&gt;&lt;amstrad&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17092" PostTypeId="1" CreationDate="2020-11-26T10:14:40.167" Score="2" ViewCount="229" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/38&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM System/38&lt;/a&gt; or just S/38 was an IBM mini-computer launched in 1978.  I don't know when IBM stopped marketing it but their &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System_i&quot; rel=&quot;nofollow noreferrer&quot;&gt;AS/400&lt;/a&gt; was released in 1988 and it was very easy to switch from the S/38 to the AS/400 so the S/38 will have died out quite rapidly.&lt;/p&gt;&#xA;&lt;p&gt;The AS/400 has changed its name and its technology several times since, e.g. CISC to RISC, but it still lives on as the IBM i.  IBM i is actually the latest O/S, there is no longer any unique hardware for it and it runs on the same hardware as Aix (IBM Unix).&lt;/p&gt;&#xA;&lt;p&gt;A feature of these systems is technology independance.  The compilers are two stage: high level language to intermediate code followed by intermediate code to machine code.  This is common but what is not so common is that the intermediate code is stored in the generated object.  This allows a program to be restored to and run on a later machine with different hardware.  The machine code is discarded and the second stage compile is run again.  This is possible even if the HLL compiler is not available.  The second stage compiler is in the base operating system.&lt;/p&gt;&#xA;&lt;p&gt;I have done this many times over the years e.g. S/38 to AS/400 and CISC AS/400 to RISC AS/400.  However, I have not tried the extreme of the long obsolete S/38 to a current IBM i.&lt;/p&gt;&#xA;&lt;p&gt;Edit.  I see that my question is answered within the S/38 Wikipedia article that I linked.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;As a result, it is possible for a program originally developed on a System/38 to run on current IBM i hardware without ever being recompiled.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;But I think that this is just an expectation, as I have myself, rather than actual confirmation.  It is also technically incorrect as IBM i is an operating system and not the hardware.  The current hardware is IBM Power System which can also run other operating systems.&lt;/p&gt;&#xA;" OwnerUserId="7805" LastEditorUserId="447" LastEditDate="2020-11-26T10:46:25.327" LastActivityDate="2021-05-25T00:01:35.200" Title="Can I restore an S/38 program to a current IBM i?" Tags="&lt;ibm&gt;&lt;minicomputers&gt;&lt;as400&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17094" PostTypeId="2" ParentId="17085" CreationDate="2020-11-26T13:25:22.823" Score="9" Body="&lt;p&gt;Certainly. A place where I worked in the early 1980s had an IBM 4341 system running some species of MVS, with the TSO ('time sharing option') that supported interactive program development.&lt;/p&gt;&#xA;&lt;p&gt;I'm slightly familiar with this, since at the time I was writing a 3277 terminal emulator for VMS, and once it was good enough, the IBM sysprogs switched to that so that they could work on VMS and MVS with only one terminal on their desks.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-11-26T13:25:22.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17095" PostTypeId="1" AcceptedAnswerId="17887" CreationDate="2020-11-26T14:25:47.357" Score="2" ViewCount="277" Body="&lt;p&gt;I'm failing to find a concise document that describes the formatting used by (6502) MS BASIC when converting internal floating-point numbers to text for display in &lt;code&gt;PRINT&lt;/code&gt;, &lt;code&gt;STR$&lt;/code&gt;, etc.&lt;/p&gt;&#xA;&lt;p&gt;I know it has a leading - or space for +, so for testing, I punted and used &lt;code&gt;sprintf(str, &amp;quot;% -f&amp;quot;, a);&lt;/code&gt;, but that has some rather common edge cases and now I'd like to implement the canonical solution.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="15334" LastEditDate="2021-02-06T19:36:23.480" LastActivityDate="2021-02-27T09:10:30.130" Title="Clear description of MS BASIC number → string conversions?" Tags="&lt;6502&gt;&lt;floating-point&gt;&lt;microsoft-basic&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17096" PostTypeId="2" ParentId="17085" CreationDate="2020-11-26T14:57:17.217" Score="3" Body="&lt;p&gt;Yes, I had a timeshare account on my university's IBM System/360 in the early 1970s where I wrote and debugged programs in APL. The computer center had several dumb terminals that students could use for personal projects. Input was by keyboard and light pen -- no mouse. Printouts could be picked up in the printer room down the hall.&lt;/p&gt;&#xA;" OwnerUserId="14652" LastActivityDate="2020-11-26T14:57:17.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17097" PostTypeId="2" ParentId="17085" CreationDate="2020-11-26T15:23:55.600" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;But were any of them used like the college-lab VAX, to provide a bunch of people with interactive shell accounts that could run arbitrary code?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3&gt;Absolutely 100%!&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR University of Maryland - hundreds of simultaneous users on ASCII terminals emulating 3270 terminals for full interactive usage of email and programming.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I was a student at the University of Maryland, College Park in the 1980s. They had several IBM mainframes as well as some VAXen, a Univac 1100 mainframe and assorted smaller machines including while I was there starting to add labs full of IBM PC/XT/AT instead of just dumb terminals.&lt;/p&gt;&#xA;&lt;p&gt;The VAXen were used primarily for graduate level research and occasional other courses - I never had the opportunity to use them myself! The IBM mainframes were the main systems used for Computer Science courses and for the typical COBOL courses in the Business department. Everyone (by which I mean, undergraduate students and professors in those courses, which were the bulk of the people on campus using email at the time) had interactive accounts running under VM/CMS. For anyone who had to (or wanted to) program, they had access to many languages running on the IBM mainframes.&lt;/p&gt;&#xA;&lt;p&gt;There were some real IBM 3270 terminals in the bowels of the computer science building. But almost everyone used an ASCII video terminal (ADM 3A was typical, but there were some other types) or a DECwriter to access these mainframes as well as to access the Univac, the VAXen and possibly some other systems. There was some system in between the terminals and the mainframes that (a) handled (in some cases, some were dedicated to one system) selection of host system and (b) translated ASCII to EBCDIC for the IBM systems.&lt;/p&gt;&#xA;&lt;p&gt;Initially all those terminals (not just the DECwriters :-) ) were all running in TTY mode. While I was there they switched to full-screen 3270-emulation for most of the video terminals, which was a huge improvement. I (and my evil twin) helped teach our class how to use the full-screen editor as it was a big change and not everyone jumped right in. We also went down to the computer science basement over winter break to have our terminal (Wyse 100 - beautiful machine) programmed into the Series/1 that handled the 3270 emulation so that we could use all the features (more than the ADM 3A could do).&lt;/p&gt;&#xA;&lt;p&gt;I don't know how well memory protection, storage partitioning, etc. all worked on those mainframes. We were basically assigned a chunk of space (IIRC, you could get more space if you justified it) and just did our thing, essentially as if we had our own standalone mainframe - except no access to bare metal, of course. I do know that if you ran something that really hogged CPU time they might notice and get you in a little trouble. (But that is a story for another time.)&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2020-11-26T15:23:55.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17098" PostTypeId="2" ParentId="17085" CreationDate="2020-11-26T15:48:54.123" Score="15" Body="&lt;p&gt;Another one to mention is &lt;a href=&quot;https://en.wikipedia.org/wiki/Michigan_Terminal_System&quot; rel=&quot;noreferrer&quot;&gt;MTS&lt;/a&gt; which was first released in 1967, last release in 1988. It was in use at Rensselaer Polytechnic Institute from 1976 to 1999, of which I took part during the early 80s. In 1984 they were running it on Sybil, a dual processor IBM 3081D; slightly before that it ran on Myron, which I think was a 3070 but I'm not sure.&lt;/p&gt;&#xA;&lt;p&gt;There were a wide variety of dumb terminals attached, everything from IBM Couriers to AMD3As to even some DECWriters if you needed a transcript.&lt;/p&gt;&#xA;&lt;p&gt;And yes, we all had our own &amp;quot;shell&amp;quot; accounts with access to multiple compilers (PASCAL, LISP, FORTRAN, SNOBOL come to mind. The C course I took had its coursework on an IBM PC, but there was probably a compiler for that on MTS too.)&lt;/p&gt;&#xA;" OwnerUserId="18845" LastActivityDate="2020-11-26T15:48:54.123" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17099" PostTypeId="2" ParentId="17085" CreationDate="2020-11-26T16:19:28.263" Score="6" Body="&lt;p&gt;Circa 1970, MIT's EE department operated an APL\360 virtual machine under CP/67 on an IBM 360/67. APL\360 was a multiuser dialup system for 360 mainframes, specialized for APL, but virtualizing it meant that the physical mainframe computer was shared with other users, who were mostly using CMS. So, a timeshared timesharing system. IBM's research center in Yorktown, NY was running multiuser APL\360 commencing no later than 1967.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastEditorUserId="-1" LastEditDate="2020-11-28T21:20:50.667" LastActivityDate="2020-11-28T21:20:50.667" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="17100" PostTypeId="2" ParentId="17085" CreationDate="2020-11-26T16:58:48.013" Score="5" Body="&lt;p&gt;In the 70's I used Orvyl and Wylbur extensively on Stanford's 360/67, which &lt;a href=&quot;https://en.wikipedia.org/wiki/ORVYL_and_WYLBUR&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia says&lt;/a&gt; were originally developed in 1967-68.  There were golfball terminals all over campus.  Keypunched batch jobs were simultaneously being processed via card reader at the computer center.&lt;/p&gt;&#xA;" OwnerUserId="4733" LastActivityDate="2020-11-26T16:58:48.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17101" PostTypeId="2" ParentId="17085" CreationDate="2020-11-26T17:26:29.340" Score="5" Body="&lt;p&gt;To add to all this, System/370 with virtual memory was one of the first platforms (perhaps the third) that UNIX was ported to.  You can &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/otherports/ibm.pdf&quot; rel=&quot;noreferrer&quot;&gt;read a paper about that porting done here&lt;/a&gt;.  IBM would follow it up with an AIX port not long after.&lt;/p&gt;&#xA;&lt;p&gt;It was never a dominant mainframe OS, but a number of customers ran UNIX or UNIX clones on their mainframes starting in the 80s, often under virtualization alongside other OSes.  Some still do, with zSeries having excellent Linux support.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-11-26T17:26:29.340" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17102" PostTypeId="2" ParentId="17085" CreationDate="2020-11-26T17:34:06.033" Score="4" Body="&lt;p&gt;Yes&lt;/p&gt;&#xA;&lt;p&gt;To add to the UM students above we had a 7090 in the mid 60s that any student could run their own program on by submitting a punch card deck to the computer center.&lt;/p&gt;&#xA;&lt;p&gt;You picked up the print out and your cards later,  often being returned to our own building where you could also have submitted them to  be carried to the computer center.&lt;/p&gt;&#xA;&lt;p&gt;Later in the 60s the IBM datacenter on 19th st in DC offered shared running of user  programs in their 360/65.  Other computers even the 360/30 were designed to run multiple jobs at once and the user would have been irrelevant if one was allowed to access the computer whether themselves or by having an operator submit the job.&lt;/p&gt;&#xA;&lt;p&gt;Once telecomm was widely used most IBM mainframes were accessed by many users either with RJE or by time sharing.&lt;/p&gt;&#xA;" OwnerUserId="19986" LastActivityDate="2020-11-26T17:34:06.033" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17104" PostTypeId="2" ParentId="17076" CreationDate="2020-11-27T00:03:49.017" Score="6" Body="&lt;p&gt;At CMU in 1968-69, we had an IBM 360/67, with the big Emergency Power Off switch at the bottom right corner of the blinkenlights panel.&lt;/p&gt;&#xA;&lt;p&gt;It also had an 8&amp;quot; wide &amp;quot;THIMK!&amp;quot; sign atop the panel.&lt;/p&gt;&#xA;&lt;p&gt;One midnight shift, the paper ball struck the &amp;quot;THIMK!&amp;quot; sign, which fell on the EPO switch.&lt;/p&gt;&#xA;&lt;p&gt;Instant OFF!&lt;/p&gt;&#xA;&lt;p&gt;In the morning, after the IBM Field Engineer had come and reset the system, the Director visited the machine room to find out what happened. In a hand-waving explanation, somebody replaced the sign, and showed how easily it could be knocked off to plummet down to the EPO switch, again!&lt;/p&gt;&#xA;&lt;p&gt;Instant OFF! Again!&lt;/p&gt;&#xA;&lt;p&gt;The &amp;quot;THIMK!&amp;quot; sign found a new home.&lt;/p&gt;&#xA;" OwnerUserId="11232" LastActivityDate="2020-11-27T00:03:49.017" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17105" PostTypeId="2" ParentId="15607" CreationDate="2020-11-27T07:14:12.800" Score="0" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The PS/2 keyboard protocol allows the keyboard to generate a clock rate between 10 kHz and 16.7 kHz.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As far as synchronous communications go, this is not fast at all. Even the most rudimentary serial-to-parallel converter solutions could cope with MHz clock rates, and if you wanted a PS/2 interface that could deal with 1MHz clock rate, it'd need an internal FIFO but there was support for all that in the TTL databook, so not a big deal. A 16kHz clock rate is extremely slow, I'd say, at least from the point of the digital logic at the time.&lt;/p&gt;&#xA;" OwnerUserId="10800" LastActivityDate="2020-11-27T07:14:12.800" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17106" PostTypeId="2" ParentId="17000" CreationDate="2020-11-27T10:17:47.060" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;real-time subtractive synthesis should be vastly out of reach for any Amiga&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I've looked at the source code and it looks like any typical sample-based tracker would. It has a variety of sample processing available, so that the samples can be modified exactly as you describe, and it also has DSP block plug-ins for additional global effects such as reverb. No subtractive synthesis is done.&lt;/p&gt;&#xA;" OwnerUserId="10800" LastActivityDate="2020-11-27T10:17:47.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17107" PostTypeId="2" ParentId="16933" CreationDate="2020-11-27T11:38:48.780" Score="2" Body="&lt;p&gt;Yes, it could, with some help :)&lt;/p&gt;&#xA;&lt;p&gt;I had an oddball CP/M (Z80) machine that had additional logic that let you switch at runtime between a Harvard and Von Neumann memory addressing. It had 128kB of RAM (and a little bit of EPROM overlapping some of it), and both 64kB address spaces could be used simultaneously when in the Harvard mode: you had independent 64kB of code space, and 64kB of data space.&lt;/p&gt;&#xA;&lt;p&gt;On Z80, opcode fetches are signaled by asserting the M1 output signal. There was some discrete logic state machine that used M1 along with the contents of the data bus (i.e. the opcode(s)) to determine which operands came from the machine instructions (immediate operands and displacements), and which were actual data loads/stores. The output of that state machine classified each memory access as either code fetch (immediate operands/displacements) or data load/store.&lt;/p&gt;&#xA;&lt;p&gt;There were a couple bits in configuration registers that let you customize this - it was quite flexible, in spite of how little logic was used to implement it. There were three kinds of accesses on CPU side: code, data, and I/O, and each could be mapped to any of the address spaces: code space, data space, or I/O space. The I/O accesses couldn't be mapped to the data space IIRC, since that'd be useless.&lt;/p&gt;&#xA;&lt;p&gt;One of the configuration registers was used when within an interrupt handler, the other at all other times - the state machine used the /INT pin and opcode monitoring to determine when an ISR was entered and exited, to select the proper config register.&lt;/p&gt;&#xA;&lt;p&gt;The default configuration provided 192kB of non-banked address space, split between three address classes: 64kB of code space, 64kB of data space, and 64kB of I/O space. The code and data spaces each had 64kB of dedicated RAM mapped to them, with some of both spaces also overlapped by EPROM, so that you could store both data and code in the EPROM.&lt;/p&gt;&#xA;&lt;p&gt;There was no other memory banking, i.e. the RAM was always evenly split between the code and data address spaces. Two of the unused/invalid opcodes had special treatment by the state machine: a NOP would be placed on the data lines, and a &amp;quot;code space override&amp;quot; or &amp;quot;data space override&amp;quot; was latched, so that the subsequent instruction would do all accesses from that space no matter what was configured. This effectively added two prefixes not unlike segment override opcodes on 8086 - likely that was where the inspiration came from, I guess.&lt;/p&gt;&#xA;" OwnerUserId="10800" LastActivityDate="2020-11-27T11:38:48.780" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17108" PostTypeId="2" ParentId="17091" CreationDate="2020-11-27T12:39:51.307" Score="1" Body="&lt;p&gt;This is not yet a complete and verified answer, because I haven't tested it on real hardware.&lt;/p&gt;&#xA;&lt;p&gt;There is a utility by CNGSoft called '2H' (written in 2013) which claims a capacity of 208K, using 41 tracks of 10 sectors each.&#xA;I found this on the &lt;a href=&quot;http://www.cpcwiki.eu/forum/programming/2h-a-homemade-208k-3%27-disc-format-tool/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CPCWiki forum&lt;/a&gt; and a dsk image of the tool on &lt;a href=&quot;https://www.cpc-power.com/index.php?page=detail&amp;amp;num=15132&quot; rel=&quot;nofollow noreferrer&quot;&gt;CPC-Power&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2020-11-27T12:39:51.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17110" PostTypeId="2" ParentId="17091" CreationDate="2020-11-27T16:28:56.100" Score="3" Body="&lt;p&gt;Nemesis' &lt;a href=&quot;https://cpcrulez.fr/applications_crack-bonzo_doo_dah_AA.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bonzo Doo Dah&lt;/a&gt; and Richard Monteiro's &lt;a href=&quot;https://cpcrulez.fr/applications_disc-fastform_AA.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;FastForm/BigK&lt;/a&gt; in &lt;a href=&quot;https://archive.org/details/amstrad-action-016/page/n19/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amstrad Action Issue 16&lt;/a&gt; gave somewhere between 203 – 206 K per side, leaving one or two standard tracks for a small boot stub to load up the custom disk parameters.&lt;/p&gt;&#xA;&lt;p&gt;Both of these hit all three of your parameters: all they did was modify some settings held in RAM. I was a dedicated user of Bonzo Doo Dah back in the day on my dual-drive CPC464. It was useful, but the custom format made backups a little fiddly.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-11-27T16:28:56.100" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17111" PostTypeId="1" CreationDate="2020-11-27T18:35:27.090" Score="1" ViewCount="85" Body="&lt;p&gt;A common technology stack for line of business applications in the sixties and seventies was IBM COBOL with the IMS database. I'm curious about how the combination handled record definitions.&lt;/p&gt;&#xA;&lt;p&gt;COBOL has a &lt;a href=&quot;https://docs.informatica.com/data-integration/powerexchange-for-cdc-and-mainframe/10-0/_utilities-guide_powerexchange-for-cdc-and-mainframe_10-0_ditamap/createdatamaps_-_data_map_creation_utility/redefinitions_and_record_ids_in_cobol_copybooks/redefinitions_with_rid_fields_in_cobol_copybooks/example_cobol_copybooks_with_rid_fields.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;COPYBOOK&lt;/a&gt; facility:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00001 * TRAIN6 EXAMPLE COBOL COPYBOOK&#xA;00002   01 MASTER_REC.                                                  COL 73-80&#xA;00003      05  ACCOUNT_NO                  PIC X(9).                    COL 73-80&#xA;00004      05  REC_TYPE                    PIC X.                       COL 73-80&#xA;00005      05  AMOUNT                      PIC S9(4)V99 COMP-3.         COL 73-80&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which seems straightforward enough. Presumably it must also have some equivalent of &lt;code&gt;#include&lt;/code&gt; or &lt;code&gt;import&lt;/code&gt; so that many COBOL programs can share a single COPYBOOK definition instead of having to repeat it.&lt;/p&gt;&#xA;&lt;p&gt;IMS must also have had a record definition facility, and indeed there is an example of usage in &lt;a href=&quot;https://share.confex.com/share/125/webprogram/Handout/Session17764/SHARE_Orlando%20DDL%2017764.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://share.confex.com/share/125/webprogram/Handout/Session17764/SHARE_Orlando%20DDL%2017764.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CREATE TABLE table_decimal (&#xA;    r_number INT INTERNALNAME RNUM,&#xA;    ll SHORT INTERNALNAME LL,&#xA;    c_decimal DECIMAL(7,2) INTERNALNAME CDEC,&#xA;    FOREIGN KEY REFERENCES table_root&#xA;) IN COGDBD.COGDATA&#xA;    INTERNALNAME TDEC&#xA;    MAXBYTES 10&#xA;    MINBYTES 6&#xA;    INSERT LOGICAL&#xA;    DELETE LOGICAL&#xA;    REPLACE LOGICAL&#xA;    AMBIGUOUS INSERT HERE;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;There is some syntax overlap with SQL. I'm not sure whether that's because IMS DDL is an ancestor of SQL, or because some of the latter was retrofitted to a later version of the former.&lt;/p&gt;&#xA;&lt;p&gt;But how was the combination handled?&lt;/p&gt;&#xA;&lt;p&gt;If a COBOL program tried to read an IMS table, but the two were using different record definitions, would there be a runtime check for metadata compatibility, and a crash with an error message? Or would the COBOL program just misinterpret the stream of bytes, giving garbage results?&lt;/p&gt;&#xA;&lt;p&gt;And how was maintenance handled? Did programmers have to keep the COBOL and IMS record definitions in sync by hand, or was there an automatic way to generate one from the other, or both from some third format?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-27T18:35:27.090" Title="Record definitions with IBM COBOL and IMS" Tags="&lt;history&gt;&lt;ibm&gt;&lt;mainframe&gt;&lt;cobol&gt;&lt;database&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17112" PostTypeId="2" ParentId="17076" CreationDate="2020-11-27T18:47:12.973" Score="3" Body="&lt;h3&gt;Stop A Big &amp;quot;Oops&amp;quot;&lt;/h3&gt;&#xA;&lt;p&gt;While I suspect that, short of national security situations (like say shutting off &lt;a href=&quot;https://en.wikipedia.org/wiki/WarGames&quot; rel=&quot;nofollow noreferrer&quot;&gt;WOPR&lt;/a&gt; before it launches a first strike), &lt;em&gt;mainframes&lt;/em&gt; were not deliberately shut off to stop a running program, I have heard (first-hand accounts, but not my own actions) of situations where, for example, a failed RAID mirrored drive was being replaced &lt;em&gt;and the rebuild started going in the wrong direction&lt;/em&gt; - i.e., &amp;quot;new empty&amp;quot; copying to &amp;quot;old good&amp;quot; instead of &amp;quot;old good&amp;quot; to &amp;quot;new empty&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;In such a situation, the main power switch may be the fastest way to stop the process and hope for successful restoration of the partially-erased &amp;quot;old good&amp;quot; drive. A &amp;quot;master&amp;quot; switch in that case makes more sense than an individual switch on each component because you want to get &amp;quot;everything&amp;quot; off absolutely ASAP. A few more seconds, and especially a few seconds of &amp;quot;complete current batch automatically including writing all disk directory updates&amp;quot; would actually do quite a bit of harm in that particular scenario.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2020-11-27T18:47:12.973" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17113" PostTypeId="2" ParentId="16700" CreationDate="2020-11-27T19:29:49.847" Score="2" Body="&lt;p&gt;The other answers cover the historic reality, but I also think it’s worthwhile to illustrate what were the technical reasons for tapes to be “slow”. Audio tape as a medium is not “slow” and is quite data-dense, compared to what one might think based on what the home micros did back then. Compared to C64’s default rate, the tape can do 4 orders of magnitude better at least!&lt;/p&gt;&#xA;&lt;p&gt;Primarily, a lot of the information from signal recorded on tape was lost. It was passed to the CPU not as if you had a sound card, there wasn’t a parallel-output A/D converter that would sample the signal from the tape and feed 8-bit values to the CPU. The most popular tape interfaces had a simple analog signal shaper and a comparator for threshold detection. The CPU saw a serial bitstream on some input port. All the information you had left were zero crossings of the audio signal. Some micros probably did things a bit better, e.g. using a low resolution sigma-delta converter that would provide the equivalent of 2-4 bit sampling. It had to be cheap, even 8-bit A/D converters that could sample at kilohertz rates were expensive in the early 80s as well as power hungry, and usually were considered “glam” peripherals rather than something you could waste on tape duty.&lt;/p&gt;&#xA;&lt;p&gt;8-bit microprocessors used in home micros had no multiplier, and to do the digital signal processing needed to demodulate high density tape data you definitely need lots of multiplications to implement the DSP algorithms. You could definitely hook an 8-bit ADC to a micro and implement a state-of-the-art demodulator system that could offer quite high data rates with error correction - think 1-5kbytes/s on a mono audio tape. Said demodulator would probably run at least 1000x slower than real time, though :( It couldn’t keep up with real-time tape data, and even if a large RAM buffer was available to sample the data, store, and process offline, you’d still get throughput much slower than the “naive” methods allow.&lt;/p&gt;&#xA;&lt;p&gt;As far as what tapes are actually capable of: with a 16-bit sound card and processing throughput of a 486DX2, you could load 64 kilobytes from stereo tape in 15 seconds or so, with state of the art error correction and so on - that tape could be pretty well mangled, and the head azimuth a bit off, and it still worked. But this is the sort of stuff that even today requires specialist knowledge, and most people who designed I/O for micros of the era did not have that sort of a background. I did a class project very long ago on this and it was lots of work, especially that the access to literature was much harder in the late 90s, so collecting all the necessary bits of wisdom wasn’t easy - and I forgot like 99% of it since then, too :) This problem is harder than what the voice line modems had to cope with: they have a very limited adaptive ability for channel estimation, so if the channel changes too much, they must retrain to re-estimate the channel model, and while they do that, the data transmission is suspended. They also don’t tolerate any sort of timing slips - those usually force a full retraining. With tape you have a time-variable channel whose model you have to continuously estimate and adapt. Then the timing is not constant either, since the tape speed regulation is orders of magnitude worse than the phase stability needed for demodulation of dense data, so you have to do clock recovery and resample the data. All of this is computationally heavy, even in fixed point integer arithmetic. On a “fancy” CISC like the 486, you could run integer processing in parallel with floating point, but this had to be hand-coded in assembly at the time. Tedious stuff.&lt;/p&gt;&#xA;" OwnerUserId="10800" LastEditorUserId="10800" LastEditDate="2020-11-27T19:36:45.650" LastActivityDate="2020-11-27T19:36:45.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17114" PostTypeId="2" ParentId="16892" CreationDate="2020-11-27T19:49:01.693" Score="2" Body="&lt;p&gt;Floating point operations on most integer CPUs are actually performed on an unpacked representation, where the exponent is a freestanding value, the mantissa another such value, and the sign a separate boolean flag, sometimes a stolen bit from exponent or mantissa. So the use of packed IEEE representation is counter-productive since you have to keep unpacking the values before you operate on them, and then packing them again when done. Floating point BASICs also had an integer data type, and if the integers were 32-bit wide, then the subroutines used to operate on them were perfect for operations on the mantissa: you needed shifts and the 4 arithmetic operators: add, sub, mul, div - those were all available already on most 32-bit-integer BASICs. A 40-bit format is quite handy then: the only additional code that makes the floating point work is “wrapper” logic to orchestrate the mantissa operations, and do the simple 8-bit math on the exponent.&lt;/p&gt;&#xA;" OwnerUserId="10800" LastActivityDate="2020-11-27T19:49:01.693" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17115" PostTypeId="1" AcceptedAnswerId="17117" CreationDate="2020-11-27T21:39:26.213" Score="2" ViewCount="262" Body="&lt;p&gt;The CDC 6600 system console was a vector drawing system with a single font that also provided a way of drawing simple graphics (&lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_6000_series#Display_console&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;In simple terms how does this vector drawing system work?&lt;/p&gt;&#xA;&lt;p&gt;Further, how did the dual screens operate and how were they used? Particularly interesting may be the simple graphics functionality.&lt;/p&gt;&#xA;&lt;p&gt;An additional but lesser question is what font was used?&lt;/p&gt;&#xA;" OwnerUserId="15219" LastEditorUserId="6659" LastEditDate="2020-11-27T22:12:59.090" LastActivityDate="2020-11-29T00:33:23.657" Title="CDC 6600 system console" Tags="&lt;cdc&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17117" PostTypeId="2" ParentId="17115" CreationDate="2020-11-27T22:00:12.410" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;In simple terms how does this vector drawing system work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Like essentially like an oscilloscope. A beam is used to draw on the screen, controlled by two voltages for X/Y. Not much different as a TV, except with TV the movement is fixed as lines left to right and top down.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;In very simple terms:&lt;/strong&gt;&lt;/em&gt; (*1)&lt;/p&gt;&#xA;&lt;p&gt;A CRT is a huge tube with a heated electrode supplying a constant stream of electrons (*2) focused to hit another electrode which happens to be the screen. When an electron hits, its energy gets turned into photons aka light. The beam can be modulated (on/off) and directed by applying voltage to a set of coils. One deflecting in horizontal direction. Negative for up, positive for down. The other coil does the same vertical. Positive to the right, negative to the left. Changing the voltage allows to draw any arbitrary set of lines or vectors as they are called.&lt;/p&gt;&#xA;&lt;p&gt;For a text vector display one would sort all vectors for the letters to be drawn in sequence of characters and vectors within a character.&lt;/p&gt;&#xA;&lt;p&gt;For musings about how such displays can be made, take a looks at this question:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14736/what-are-principles-of-vector-crt-display-simplest-way-to-drive-crts&quot;&gt;What are principles of vector CRT display?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In case of the 6600 console all drawing was done from CPU memory by a dedicated I/O processor, which reads a stream of XY coordinate to be drawn and sends them to a DA converter within the console to to be turned into voltages to the coils to deflect the beam.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[In some way this is a bit like used by 'cheap video' and later Sinclair's ZX80/81 computers. The (A) CPU (Peripheral Processor) feeds a data structure in RAM to a rather primitive video hardware only doing the signal conversion.]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Further, how did the dual screens operate and how were they used?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Simply as two screens. One for interactive input one for a log. Or one as system console one as user output (graphics). There was no hardware preference for either screen. Much like today one could use two windows on a PC - or two screens.&lt;/p&gt;&#xA;&lt;p&gt;Of course users got creative - like with every new toy. There was a chess program that did draw board and pieces on one screen while having a textual list of all moves on the other. And then there was eventually the first implementation of the 'EYES' program, well known from X-Window. Here each screen displayed an eye, both looking around (synchronized), blinked and so on. Of course not following a mouse pointer, but it could be controlled.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Particularly interesting may be the simple graphics functionality.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It wasn't simple (*3) in any way, as next to arbitrary vector graphic could be displayed. As a rough estimation a peripheral processor can output one value per micro second, two are needed for a vector, or 500,000 vectors per second. Lets say we want to keep the refresh rate at 50 Hz (*4), then a graphic displayed can be made up from up to 10,000 lines - more with lower refresh rates (*5).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;An additional but lesser question is what font was used?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A readable? Not sure what you expect as an answer here. At this time in history there were no artistic choices. It was all about getting some text out - which was already seen as a major achievement. What can be said is that characters were designed to use as little vectors (strokes, visible or invisible) as possible, as the total number of vectors displayed defined the refresh rate.&lt;/p&gt;&#xA;&lt;p&gt;Characters were thus rather angled, but seamed, thanks to their vector nature way more clean and readable than any contemporary raster display:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YQJsO.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YQJsO.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Picture taken a cray-cyber.org &lt;a href=&quot;https://cray-cyber.org/cdc-cyber-960-starts-after-8-years/&quot; rel=&quot;nofollow noreferrer&quot;&gt;blog entry&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The shown CC545 console is a later model. Workings are still the same, including the ability to produce two pictures, but only a single CRT is used. A switch, labeled left/right, seen in the lower left, beside the keyboard, is provided to select between either output , here set to display the right screen.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - REALLY simple. It's as simple as I can. So please, no arguing about finer details, correct names, etc.&lt;/p&gt;&#xA;&lt;p&gt;*2 - In a tube the electrode emitting the electron ray is called cathode - hence the name &lt;em&gt;Cathode Ray Tube&lt;/em&gt; or short &lt;em&gt;CRT&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;*3 - I guess the one adding that wording would qualify all vector display as 'simple' in hindsight.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Refresh rate on vector displays is not a constant but depends on the number of vectors displayed.&lt;/p&gt;&#xA;&lt;p&gt;*5 - 50 Hz is a rather high refresh rate for vector displays, as these displays do usually feature a longer persistence than later raster screens. As low as 20 Hz can be still fine.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-29T00:33:23.657" LastActivityDate="2020-11-29T00:33:23.657" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="17118" PostTypeId="2" ParentId="16717" CreationDate="2020-11-27T22:15:15.067" Score="1" Body="&lt;p&gt;This answer is an attempt at a “middle of the road” solution: not as flexible as a fully decoded IM2 system with 128 interrupt vectors, but certainly practical enough not to require programmable logic.&lt;/p&gt;&#xA;&lt;p&gt;Routing the IEI/O chain through modules in a general purpose system is not the best idea due to timing constraints and the general Z80-specificity - it’s not quite necessary.&lt;/p&gt;&#xA;&lt;p&gt;So, if you can do with 7 prioritized interrupt vectors then it can be done differently - still using IM2. The trick is to use a one-of-7 priority encoding for interrupt vector number, eg. 0x00 highest priority then 0x02, 0x06, 0x0E, 0x1E, 0x3E, 0x7E, 0xFE lowest priority. Data bus would have pull ups - they can be gated by VECRQ described below, if you want to decrease general bus loading a bit. Prioritized requester uses an open-collector driver to place their interrupt vector (from jumpers etc) on the data bus in response to a vector request. The wire-or of concurrent vectors automatically provides the highest priority vector to the CPU, should multiple interrupts be pending.&lt;/p&gt;&#xA;&lt;p&gt;This allows the use of Z80-native peripherals without the chain as well: all they would need is two bus access buffers: open-collector gated by VECRQ | CS &amp;amp; !RD, and open-emitter gated by CS &amp;amp; !RD only.&lt;/p&gt;&#xA;&lt;p&gt;So let’s see what the logic requirements would be: each non-Z80 peripheral needs an additional 8-bit open-collector driver, input set to the encoded interrupt priority, with its OE:=VECRQ &amp;amp; DEVINT, where VECRQ:=M1 &amp;amp; !IOREQ driven by the motherboard.&lt;/p&gt;&#xA;&lt;p&gt;Interrupt acknowledgment would be quite peripheral-specific. Some peripherals don’t need it - the handling of the device’s state may clear the interrupt active flag, or it can be cleared via a config register. But if you really need one, then physical INTACK can be generated using any GPIO mechanism or even just a plain 8-bit address comparator gated by !IORQ, and can be pulsed by the interrupt handler, or set by the interrupt handler and cleared on next M1 - just one F/F for that.&lt;/p&gt;&#xA;&lt;p&gt;Using IRET snooping for acknowledgments takes a bit more logic: the motherboard would provide IACK:=M1 &amp;amp; D[7:0]=IRET. The device then would need two things: 1) comparator that compares D[7:0] with its interrupt vector, with the output, say INTEQ, latched by falling VECRQ. This lets the device know that it won the priority contest. 2) Device INTACK := INTEQ &amp;amp; IACK from motherboard, this would synchronously reset the INTEQ latch as well.&lt;/p&gt;&#xA;&lt;p&gt;Since interrupt handling highly depends on peripheral type, it makes sense to put the device-specific part of it on the side of the device rather than on the motherboard, and only provide VECRQ and IACK as somewhat general-purpose signals from the motherboard.&lt;/p&gt;&#xA;" OwnerUserId="10800" LastActivityDate="2020-11-27T22:15:15.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17119" PostTypeId="1" AcceptedAnswerId="17120" CreationDate="2020-11-27T23:48:16.877" Score="16" ViewCount="2187" Body="&lt;p&gt;The IBM PC included a coprocessor socket for the 8087 floating-point unit. Logical enough; some customers wanted to use the 8087 to make numeric calculations run faster.&lt;/p&gt;&#xA;&lt;p&gt;But why was the 8087 designed such that it needed a special socket? Why could it not be simply placed on an expansion card? As I understand it, the ISA bus basically just runs the address and data lines from the CPU, such that RAM could be placed on expansion cards (and indeed this was the only way to go past 64K), and if that can be done with RAM, I would expect it to be doable with a coprocessor.&lt;/p&gt;&#xA;&lt;p&gt;Was it because its designers were not sure in advance that 8088 computers would have expansion slots?&lt;/p&gt;&#xA;&lt;p&gt;Was it because expansion slots were scarce, and it was considered worth saving one?&lt;/p&gt;&#xA;&lt;p&gt;Or was there some reason a floating-point coprocessor needed a special socket?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-11-29T02:40:16.600" Title="Why did the 8087 need a special socket?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;floating-point&gt;&lt;8088&gt;&lt;8087&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17120" PostTypeId="2" ParentId="17119" CreationDate="2020-11-28T00:15:06.643" Score="33" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;But why was the 8087 designed such that it needed a special socket?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because the 8087 is a processor EXTENSION, not another CPU.&lt;/p&gt;&#xA;&lt;p&gt;The 8087 has, except for a few lines, exactly the same signals and pinout as the 8086/88. The socket is, except for 4(?) lines, a one-on-one duplicate of the CPU socket. This includes signals that need to be connected between both like TEST/BUSY.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why could it not be simply placed on an expansion card?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because it would not only be considerably slower, but the ISA connector is also missing necessary signals. ISA is, unlike Multibus, a strict I/O and memory bus. It does not have features to use the multi master control, which the 8087 uses to take over from the 8088.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;As mentioned, the 8087 is an extension to the 8086/88. It is not operated as an I/O device (using address space) but snoops the CPU execution to intercept FPU instructions and takes over bus control to access memory.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4201" LastEditDate="2020-11-28T20:16:09.297" LastActivityDate="2020-11-28T20:16:09.297" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17121" PostTypeId="2" ParentId="17085" CreationDate="2020-11-28T00:32:43.230" Score="5" Body="&lt;p&gt;The University of Cambridge (UK) Computing Service acquired a 370 around 1972 at the time I was starting my Ph.D, and operated it as a time-sharing service. Using experience from the Titan operating system, they pretty well rewrote the system (it was unusable out of the box).&lt;/p&gt;&#xA;&lt;p&gt;Particular features I recall were the job scheduler devised by John Larmouth, which was designed on the premise that rationing resources didn't work, and paying for resources didn't work, instead you incentivised users by giving faster turnround if they made an effort to economise on their use of resources - this worked very effectively.&lt;/p&gt;&#xA;&lt;p&gt;JCL of course was totally unusable, so they wrote their own Phoenix Command Language to replace it: I don't remember who was responsible for it, but Steve Bourne was an active member of the team and I think you'll find early ideas in there that later came to fruition in the Bourne shell.&lt;/p&gt;&#xA;&lt;p&gt;There was also an in-house text editor developed by Philip Hazel later famous for the PCRE regex engine; it was a powerful language which I think someone proved to be Turing complete, and it was the only language small enough to run in the 8K memory available to interactive users, so we did some powerful coding in it.&lt;/p&gt;&#xA;&lt;p&gt;I did all my coding in BCPL, as did many others, under the guidance of Martin Richards. I seem to remember my own contribution was a little utility for freeing up space in disk libraries (&amp;quot;partitioned data sets&amp;quot; IIRC?) needed because the IBM utility was incredibly resource hungry.&lt;/p&gt;&#xA;&lt;p&gt;The other thing I recall was that on the Titan machine security had been a major feature, and breaking the security was considered a major challenge. On the 370, security was so feeble that breaking it was no fun at all. They made the radical decision to remove all filestore protection: everything was public, so you simply didn't put anything sensitive on the machine, and you didn't gain any kudos for penetrating it.&lt;/p&gt;&#xA;" OwnerUserId="4915" LastEditorUserId="4915" LastEditDate="2020-11-28T00:45:27.220" LastActivityDate="2020-11-28T00:45:27.220" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17122" PostTypeId="2" ParentId="17092" CreationDate="2020-11-28T01:29:56.270" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://lists.midrange.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This&lt;/a&gt; appears to be a list of mailing lists devoted to the AS/400 and iSeries systems.  Someone on one of those lists would certainly know.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;List    Description&#xA;BPCS-L  BPCS ERP System&#xA;C400-L  Bare Metal Programming IBM i (AS/400 and iSeries)&#xA;COBOL400-L  COBOL Programming on the IBM i (AS/400 and iSeries)&#xA;Consult400  Consulting on the IBM i (AS/400 and iSeries)&#xA;Domino400   Lotus Domino on the IBM i (AS/400 and iSeries)&#xA;JAVA400-L   Java Programming on and around the IBM i&#xA;LINUX5250   Linux 5250 Development Project&#xA;MAPICS-L    MAPICS ERP System Discussion&#xA;MIDRANGE-JOBS   Midrange Jobs: Postings &amp;amp; Discussion&#xA;MIDRANGE-L  Midrange Systems Technical Discussion&#xA;Midrange-NonTech    Non-Technical Discussion about the IBM i (AS/400 and iSeries)&#xA;OpenSource  IBMi Open Source Roundtable&#xA;PcTech  PC Technical Discussion for IBM i (AS/400 and iSeries) Users&#xA;RPG400-L    RPG programming on IBM i&#xA;WDSCI-L Rational Developer for IBM i&#xA;WEB400  Web Enabling the IBM i (AS/400 and iSeries)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3683" LastActivityDate="2020-11-28T01:29:56.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17123" PostTypeId="1" AcceptedAnswerId="17125" CreationDate="2020-11-28T02:57:23.033" Score="6" ViewCount="101" Body="&lt;p&gt;So, I've got a C-128 with only 16K of VDC video RAM. I've finished my lovely high-resolution graphics routine on the RGBI display and want to exit to BASIC with a functional 80-column text screen, ideally without zapping the contents of main memory. What are my options?&lt;/p&gt;&#xA;&lt;p&gt;CINT doesn't redo the character set copy from ROM to VDC RAM;&#xA;RESET erases everything.&lt;/p&gt;&#xA;&lt;p&gt;Is there an in-between option I could use other than rolling my own copy-ROM-to-VDC logic?&lt;/p&gt;&#xA;" OwnerUserId="19759" LastEditorUserId="19759" LastEditDate="2020-11-28T15:09:59.763" LastActivityDate="2020-11-28T17:28:39.897" Title="How can I restore the VDC RAM to usable text mode after clearing memory for hi-res graphics?" Tags="&lt;commodore&gt;&lt;commodore-128&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17124" PostTypeId="2" ParentId="17076" CreationDate="2020-11-28T10:01:59.860" Score="0" Body="&lt;p&gt;Not an answer: just a silly story on trips and on/off switches.&lt;/p&gt;&#xA;&lt;p&gt;This happened in the early 80s.  We used to have a VAX, and MV8000 and a few Data General Eclipses.  One of the eclipses had a power problem and used to trip every so often.&lt;/p&gt;&#xA;&lt;p&gt;The problem was the position of the reset switch - it was on the back wall, about 10ft up.  In front of it was the 11 platter disks, the VAX and the MV8000.  You had to get up on a ladder and reach over to reset the trip.  The problem was that the ladders were kept in the janitor's office which was locked when the janitor wasn't around and it wasn't safe to stand on the disk drives - they'd sometimes shake like washing machines. Then someone got a bright idea - just use a long stick to flick the switch over.&lt;/p&gt;&#xA;&lt;p&gt;This worked quite well until one day when one of the shorter engineers couldn't control the momentum of the stick.  He's switched the Eclipse on but in the follow through, switched off the trip for the VAX, which happened to be facing in the opposite direction.  Then, to switch on the VAX, he swing the stick in the opposite direction, switching off the Eclipse.&lt;/p&gt;&#xA;&lt;p&gt;The head of dept promptly raised an order to change the position of the switch so we didn't have to improvise using sticks.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2020-11-28T10:01:59.860" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17125" PostTypeId="2" ParentId="17123" CreationDate="2020-11-28T15:53:37.247" Score="6" Body="&lt;p&gt;Found the solution thanks to Compute's &lt;em&gt;Mapping the Commodore 128&lt;/em&gt;, though the call is also documented in the C-128 &lt;em&gt;Programmer's Reference Guide&lt;/em&gt;. There's a kernal jump table entry called &lt;code&gt;DLCHAR&lt;/code&gt; at $FF62 (&lt;em&gt;Mapping the 128&lt;/em&gt; calls it &lt;code&gt;JINIT80&lt;/code&gt;) that initializes the VDC RAM from the character ROM. A call to that gets things working again.&lt;/p&gt;&#xA;&lt;p&gt;That routine doesn't touch the character matrix or attribute RAM, so you'll still want to clear that; a call to &lt;code&gt;CINT&lt;/code&gt; ($FF81) or just printing the clear-screen character $93 (assuming the output channel is set to the 80-column display) will do the trick.&lt;/p&gt;&#xA;" OwnerUserId="19759" LastEditorUserId="19759" LastEditDate="2020-11-28T17:28:39.897" LastActivityDate="2020-11-28T17:28:39.897" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17128" PostTypeId="2" ParentId="17085" CreationDate="2020-11-28T20:28:29.420" Score="2" Body="&lt;p&gt;Many answers mention interactive timesharing systems, but, even in a purely batch environment, there would typically be multiple jobs (i.e. processes) loaded into main memory at once and the CPU would switch between them.&lt;/p&gt;&#xA;&lt;p&gt;The reason was efficiency.  If you have one job that had to stop and wait for, say, a tape to be mounted, you'd want the CPU to switch to a compute bound job.  Although core memory was very expensive, high-end CPUs were very very expensive; it made sense to buy enough core memory that several jobs could fit in it at once, so as to keep the idle time of the CPU low.&lt;/p&gt;&#xA;&lt;p&gt;Then as now, the computer was executing arbitrary machine code submitted by the user.  Users would typically put stacks of cards in a bin for the operator to pick up and load into the card reader.  After a few cards at the front that contained the user name, password, and OS commands, these cards would (or could) contain machine code.&lt;/p&gt;&#xA;&lt;p&gt;Thus memory protection was important, since you wouldn't want a stray pointer from one job to mess up another.&lt;/p&gt;&#xA;&lt;p&gt;This really has little to do with there being multiple users. Then, as now, you didn't want bad pointers in one process to mess up another process, even if the same user owns both processes.&lt;/p&gt;&#xA;&lt;p&gt;One place where user accounts were important was for reading and writing files.  If the operator got a request to mount a tape belonging to user X from a job submitted by user Y, that would be a problem.  When disks files came along, the protection needed to be automated.&lt;/p&gt;&#xA;&lt;p&gt;Another place where user accounts were important was billing.&lt;/p&gt;&#xA;" OwnerUserId="8226" LastActivityDate="2020-11-28T20:28:29.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17129" PostTypeId="2" ParentId="17085" CreationDate="2020-11-28T21:05:57.407" Score="2" Body="&lt;p&gt;Lots of good information here but as an ex-MVS sysprog I would like to approach it from a different direction.&lt;/p&gt;&#xA;&lt;p&gt;The MVS/370 operating system (Multiple Virtual Storage on 370 architecture) was an OS that could provide virtual address spaces to a large number of users. Although not directly equivalent think of an address space as being like a Unix process and its associated memory space. Certain memory addresses (the nucleus/kernel) would be common and probably read-only for user processes but each address space would have its own private memory that it could do with as it pleased without affecting any other address space. Unless explicitly specified programs could be loaded anywhere into memory so internal addresses had to be relocatable. Many features of modern computing that we take for granted were invented or first implemented by these early IBM systems.&lt;/p&gt;&#xA;&lt;p&gt;Thus one address space would be used to run JES2 or 3 (Job Entry Subsystem), another for VTAM (Virtual Telecommunication Access Method - terminals etc), one for CICS, one for an IMS database etc.&lt;/p&gt;&#xA;&lt;p&gt;For interactive users they could either all connect to a single CICS region or by using TSO (Time Sharing Option) each user would also have their own address space. This was quite resource heavy for the system so TSO use was generally limited to those who really needed it. And for reference, ISPF, a panel-driven interface that ran under TSO gave MVS a &amp;quot;friendly&amp;quot; user interface when Unix was still using the command line :-)&lt;/p&gt;&#xA;&lt;p&gt;As has been mentioned another OS that used this architecture at the time was VM/370. As the name suggests the only function of VM was to provide Virtual S370 architecture Machines in which you would run the &amp;quot;real&amp;quot; OS. MVS for example could be run within a single VM virtual machine and many shops would run multiple MVS copies each in their own virtual machine running under a single instance of VM/370. Another OS that ran under VM/370 was CMS which was a single user environment providing a command line interface, disk space etc. CMS also had its own panel-driven environment but this was not as powerful as ISPF.&lt;/p&gt;&#xA;&lt;p&gt;So yes, through VMs and address spaces the early IBM mainframe OSes definitely provided separate user spaces in which individuals would run programs etc.&lt;/p&gt;&#xA;" OwnerUserId="20016" LastActivityDate="2020-11-28T21:05:57.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17130" PostTypeId="2" ParentId="17074" CreationDate="2020-11-28T21:06:37.413" Score="5" Body="&lt;p&gt;I have an A1200 with Blizzard 1230-IV (50MHz 68030/MMU/FPU) and 32 MiB of FastRAM.  I installed DOS 6.22 and Windows 3.0 into a 20 MB hardfile on a CF card in the PCMCIA slot. I ran it under &lt;a href=&quot;http://aminet.net/package/misc/emu/PC-Task44&quot; rel=&quot;noreferrer&quot;&gt;PC-Task 4.4&lt;/a&gt; Dynamic with 'huge' code buffer, 1 MiB extended memory and VGA graphics emulation on PAL screens (outputting composite video to my LCD TV).&lt;/p&gt;&#xA;&lt;p&gt;DOS performance was quite good, feeling significantly faster than my &lt;a href=&quot;https://oldcomputer.info/pc/ams2086/index.htm&quot; rel=&quot;noreferrer&quot;&gt;Amstrad PC2086&lt;/a&gt;. I ran &lt;a href=&quot;https://winworldpc.com/product/checkit/30&quot; rel=&quot;noreferrer&quot;&gt;Checkit 3.0&lt;/a&gt; to benchmark performance. Here are the results (screens captured with SGrab by &lt;a href=&quot;https://stephan-rupprecht.de/&quot; rel=&quot;noreferrer&quot;&gt;Stephan Rupprecht&lt;/a&gt;):-&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CPU&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RGDLu.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RGDLu.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Initially Checkit measured the CPU speed at 5.3 MHz, but when running the test again (with the code now running from PC-Task's dynamic cache) it jumped up to 12.48 MHz. FPU speed is impressive...&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Hard drive&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3AzK7.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3AzK7.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The CF card really shines here, providing about 50% native transfer speed under emulation. In comparison my PC2086 only manages a miserable 29 kB/s,  perhaps because its hard drive sector &lt;a href=&quot;https://en.wikipedia.org/wiki/Interleaving_(disk_storage)&quot; rel=&quot;noreferrer&quot;&gt;interleave&lt;/a&gt; is not optimal.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Video&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ycePf.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ycePf.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Running 640x200 in 16 colors with 'immediate' screen update, the performance is about what you would expect from a real machine of the same class. It might be a bit slower on an A500 due to reduced ChipRAM bandwidth - best to use MGA (Hercules) text mode if you don't need color.&lt;/p&gt;&#xA;&lt;p&gt;However the screen update speed in Windows 3.0 was very slow, whether 'immediate' or updating every 4 frames. I suspect this is due to inefficiencies in the stock Windows VGA driver and other code. Windows operation was slow in general - fast enough to be usable &lt;em&gt;but&lt;/em&gt; you need to be patient.&lt;/p&gt;&#xA;&lt;p&gt;Finally the acid test - was it fast enough to enjoy playing Solitaire? The answer is... yes!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Gl3Yv.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gl3Yv.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Total memory usage (including screen etc.) on the A1200 was ~13 MiB, which was no problem for my 34 MiB system. I even managed to (accidentally) run two virtual PCs at the same time!&lt;/p&gt;&#xA;&lt;p&gt;But what about Windows 95? In mid 1995 I installed a pre-release version on my 386-DX 40MHz with 4 MiB RAM and ISA bus VGA, and it was sluggish. So while it should run under PC-Task I imagine it would be much too slow for practical use.&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-11-28T21:06:37.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17131" PostTypeId="2" ParentId="17115" CreationDate="2020-11-28T21:34:23.963" Score="3" Body="&lt;p&gt;Specifically a sub-answer with respect to fonts:  Don't know about the CDC 6600 but in the vector graphics world the &lt;a href=&quot;https://en.wikipedia.org/wiki/Hershey_fonts&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Hershey fonts&lt;/em&gt;&lt;/a&gt; ruled - at least until the very late 70's, early 80's.  And for plotters - perhaps even later, as they were provided by all the plotting libraries you could get.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20111116000733/http://idlastro.gsfc.nasa.gov/idl_html_help/Hershey_Vector_Font_Samples.html#wp1050826&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here are some examples&lt;/a&gt; of what they looked like, and &lt;a href=&quot;https://www.google.com/books/edition/Calligraphy_for_Computers/qFFCAAAAIAAJ?hl=en&amp;amp;gbpv=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;here is Hershey's original technical report&lt;/a&gt; which has more information than you ever wanted to know about the constraints under which they were designed, and how they were designed (including mathematical formulas!).&lt;/p&gt;&#xA;&lt;p&gt;(Almost forgot: Extremely important in establishing their ubiquity was that they were &lt;em&gt;free&lt;/em&gt;! Developed at great expense and with great care by the US military they were available for all to use.)&lt;/p&gt;&#xA;&lt;p&gt;Here's &amp;quot;Simplex Roman&amp;quot;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5Ssyy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5Ssyy.png&quot; alt=&quot;Hershey's &amp;quot;Simplex Roman&amp;quot; font&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And here's &amp;quot;Complex Script&amp;quot; which was for some reason very widely used, even though even back then - not to mention now to the modern eye - it looked like ... well, hmm, amateur?  (If not worse.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9RAX5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9RAX5.png&quot; alt=&quot;![enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Answer truthfully, you prefer &lt;em&gt;Comic Sans&lt;/em&gt; to that, right?)&lt;/p&gt;&#xA;" OwnerUserId="332" LastEditorUserId="332" LastEditDate="2020-11-28T21:50:14.560" LastActivityDate="2020-11-28T21:50:14.560" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17132" PostTypeId="1" AcceptedAnswerId="17134" CreationDate="2020-11-28T23:02:12.500" Score="8" ViewCount="282" Body="&lt;p&gt;When an IRQ occurs, the 6502 microprocessor and its derivatives in the C64 and C128 push the status register to the stack and then load the contents of a two-byte vector at memory address &lt;code&gt;$FFFE/$FFFF&lt;/code&gt; into the program counter to continue program execution at the address specified by the vector. Usually, the address pointed by this vector leads to a Kernal routine that does some register saving and then jumps into the actual interrupt service routine specified by the vector in &lt;code&gt;$0314/$0315&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;On a C64 there are thus two possibilities to install a custom interrupt service routine: either by modifying the address in &lt;code&gt;$0314/$0315&lt;/code&gt; or by switching off the ROM and putting the address of your ISR into the RAM at &lt;code&gt;$FFFE/$FFFF&lt;/code&gt;. The latter method requires that you do some more register housekeeping, but it saves a considerable number of cycles until your routine starts. Thus, when timing is important, the second method is preferred.&lt;/p&gt;&#xA;&lt;p&gt;The IRQ mechanisms are very similar on a Commodore 128 in the C128 mode, but according to my understanding, the mapping of memory area &lt;code&gt;$FF00-$FFFF&lt;/code&gt; is fixed. In particular, reading &lt;code&gt;$FFFE/$FFFF&lt;/code&gt; always gives a predefined vector from ROM, pointing to &lt;code&gt;$FF17&lt;/code&gt; on my machine. The hardware IRQ vector is thus fixed in all memory configurations, allowing the C128 to execute an interrupt no matter what memory configuration is active. However, this would also mean that the direct hardware interrupt configuration is not possible in C128 mode. Since this is necessary for advanced IRQ routines (e.g. the &amp;quot;double IRQ&amp;quot; method used in many demos) this would deprive the C128 mode of an important feature.&lt;/p&gt;&#xA;&lt;p&gt;Is this analysis correct? Or did I overlook a possibility to customize the IRQ hardware vector on a Commodore 128 in C128 mode?&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;After checking Brian's answer it becomes clear that this analysis was not correct. The reason why the ROM seems to appear at $FF05-FFFF in every bank is simply because the OS copied it there. But, as shown by Brian's example, this area can be simply overwritten.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2020-11-29T23:05:36.610" LastActivityDate="2020-11-29T23:05:36.610" Title="Is there a possibility for a user-defined IRQ hardware vector on a Commodore 128 in C128 mode?" Tags="&lt;commodore-64&gt;&lt;6502&gt;&lt;commodore-128&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17133" PostTypeId="2" ParentId="17119" CreationDate="2020-11-29T02:40:16.600" Score="6" Body="&lt;p&gt;The socket was 'special' only in the sense that its only purpose was to accept an 8087; it wasn't an unusual component.  Adding this socket would be significantly cheaper than adding what would come to be known as an ISA connector.  It's also good practice to keep the PCB tracks short, so placing the 8087 close to the CPU would be preferable to having it on a card, although technically either would be possible.  I've seen 'passive backplane' industrial PCs where the CPU and ancillaries are all on an ISA card and there are only connectors on the motherboard, no silicon at all.&lt;/p&gt;&#xA;" OwnerUserId="19372" LastActivityDate="2020-11-29T02:40:16.600" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17134" PostTypeId="2" ParentId="17132" CreationDate="2020-11-29T03:23:11.857" Score="7" Body="&lt;p&gt;When the C128 is running in its native mode, the only &amp;quot;fixed&amp;quot; memory addresses are $FF00-$FF04. These 5 bytes allow access to the first 5 registers of the MMU regardless of the current memory configuration (which is controlled via the MMU).&lt;/p&gt;&#xA;&lt;p&gt;The MMU's RAM Configuration Register, which is in I/O space at $D500, but &lt;strong&gt;always available&lt;/strong&gt; at $FF00, controls how ROM, RAM, and I/O are banked in and out of the memory map. Using this register, you can certainly bank the Kernal ROM out, and thus allow access to interrupt vectors stored in RAM.&lt;/p&gt;&#xA;&lt;p&gt;You may have been considering the other ability of the MMU to allow common areas of RAM that are in Bank 0 but also seen when accessing Bank 1. These &lt;strong&gt;optional&lt;/strong&gt; shared RAM areas can occur at the bottom and at the top of RAM in various configurations. The top RAM sharing &lt;strong&gt;does share $FF00-$FFFF between the two RAM banks&lt;/strong&gt;. But this is independent of the RAM or ROM being visible in that region of the memory map (as described above).&lt;/p&gt;&#xA;&lt;p&gt;You can test all of this in BASIC right after cold starting.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;BANK 15:PRINT PEEK(65534) - this prints &amp;quot;23&amp;quot;&#xA;BANK 0:POKE 65534, 18&#xA;PRINT PEEK(65534)         - this prints &amp;quot;18&amp;quot;&#xA;BANK 15:PRINT PEEK(65534) - back to &amp;quot;23&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-11-29T19:28:56.993" LastActivityDate="2020-11-29T19:28:56.993" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17135" PostTypeId="1" AcceptedAnswerId="17136" CreationDate="2020-11-29T20:38:39.250" Score="2" ViewCount="106" Body="&lt;p&gt;I have an old Macintosh IIci that worked until a few weeks ago but now doesn't turn on anymore.&lt;/p&gt;&#xA;&lt;p&gt;When I press the power button on the keyboard all the lights on the keyboard and the one on the main case flash but nothing else happens. When I keep the button held the fan turns on at some point and the lights flash repeatedly.&lt;/p&gt;&#xA;&lt;p&gt;I have taken out the power supply but all the caps seem fine. Any advice on how to proceed would be appreciated!&lt;/p&gt;&#xA;" OwnerUserId="20027" LastEditorUserId="6659" LastEditDate="2020-11-29T21:55:09.940" LastActivityDate="2020-11-29T22:48:33.143" Title="Macintosh IIci not booting" Tags="&lt;hardware&gt;&lt;apple-macintosh&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17136" PostTypeId="2" ParentId="17135" CreationDate="2020-11-29T22:48:33.143" Score="1" Body="&lt;p&gt;I know from experience that the Caps on the Mainboard itself nowadays are mostly bad, leaky and thus need replacement before the electrolyte causes additional damage to the board. The same applies to the Cache Card (if installed). Doing this will most likely bring the machine back to life.&lt;/p&gt;&#xA;&lt;p&gt;The IIcx, IIci and Q700 share the same PSU, at least from the pinout. From multiple machines I've had, the PSU was never the fault. However, I suggest to disassemble the PSU also and look for about-to-break solder spots, to be on the safe side. Weak points usually are big and/or heavy things (main caps, switching transistor, probably more), as well as components becoming considerably warm when used. Usually visible through a brownish tint around the components.&lt;/p&gt;&#xA;&lt;p&gt;This description is from my memory. The last IIci recap I did is around 10 years ago, so I can't recall much detail.&lt;/p&gt;&#xA;" OwnerUserId="10295" LastActivityDate="2020-11-29T22:48:33.143" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17137" PostTypeId="1" CreationDate="2020-11-30T07:59:31.530" Score="2" ViewCount="298" Body="&lt;p&gt;I need to install Windows NT 4 on a pentium computer with Windows 98 installed on a Fat32 partition 160 GB drive. I made a 2GB Fat16 primary partition before this c partition with partition magic, hidden. I do not have CD access and would avoid the floppy drive. But there is network access. I also copied the i386 folder on the Windows 98 partition.&lt;/p&gt;&#xA;&lt;p&gt;My problem how to install NT on the hidden partition while being on Windows 98?&lt;/p&gt;&#xA;&lt;p&gt;Secondly, I would like to install Windows NT on a NFTS partition on the same disk.&lt;/p&gt;&#xA;&lt;p&gt;I am normally a Mac user and strict beginner on PC.&lt;/p&gt;&#xA;" OwnerUserId="20032" LastEditorUserId="276" LastEditDate="2020-11-30T09:29:29.847" LastActivityDate="2020-12-02T12:28:02.883" Title="Help installing Windows NT 4" Tags="&lt;windows&gt;" AnswerCount="1" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="17138" PostTypeId="1" CreationDate="2020-11-30T09:54:32.157" Score="4" ViewCount="189" Body="&lt;p&gt;You'd think this would be the simplest thing in the world to find out, but Wikipedia and all other sources just mention the USA and Japan release dates -- not the European one. I have no idea why because I know for a 100% fact that they did release the Game Boy &lt;strong&gt;Pocket&lt;/strong&gt; here.&lt;/p&gt;&#xA;&lt;p&gt;Wikipedia doesn't even have a dedicated article for it -- it's part of the general Game Boy article.&lt;/p&gt;&#xA;&lt;p&gt;It probably was sometime in 1996, but I need the exact date.&lt;/p&gt;&#xA;" OwnerUserId="20033" LastActivityDate="2020-11-30T10:44:15.973" Title="When was the Game Boy Pocket released in Europe?" Tags="&lt;game-boy&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17139" PostTypeId="2" ParentId="2992" CreationDate="2020-11-30T10:14:21.040" Score="1" Body="&lt;p&gt;Following a simple approach just place your code&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;on a C64 somewhere between $C000 and $CFFF, this RAM area is unused by BASIC and always visible to the CPU&lt;/li&gt;&#xA;&lt;li&gt;on a C128 somewhere between $1300 and $17FF, this RAM area is unused by BASIC and visible to the CPU in Banks 0 and 15 (but not 1)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you want to go under ROM, on both systems, C64 and C128 you would still need at least a stub that is visible when the jump vector is called. Since this is usually done by Kernal or BASIC and since the normal target of the jump vector goes into the Kernal you can assume that&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;on a C64, at least Kernal is banked in&lt;/li&gt;&#xA;&lt;li&gt;on a C128, that you have Bank 15 enabled (RAM from Bank 0 until $3FFF, above that all ROM and I/O)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So, a natural place to put your stub would be&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;on a C64 somewhere between $C000 and $CFFF&lt;/li&gt;&#xA;&lt;li&gt;on a C128 somewhere between $1300 and $17FF&#xA;there are also some other usable holes in the memory map like the cassette buffer, but at least on the C64 this is also a frequent place for putting sprites or machine code. Moreover, data gets erased there after a datasette operation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The safest part probably is towards the end of this memory area, but for $C000 and $CFFF some people place the screen memory to $CC00-$CFE8 when setting the VIC to use the highest 16K.&lt;/p&gt;&#xA;&lt;p&gt;Moreover, if you place only a stub there and hide the larger parts of your code under ROM, the safest place is probably&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;on a C64 under the char ROM/IO-area $D000-$DFFF, which is one of the least used memory areas - for a reason: if your code needs to access VIC registers or the color ROM, being in this area is a big disadvantage since you need bank switching code from outside to access this area. In this case, the better place is under the Kernal ROM, but even this could be overwritten if somebody puts a bitmap there. The area under the BASIC ROM is more often used by programs, for example cc65 compiled programs use this area at default setting&lt;/li&gt;&#xA;&lt;li&gt;on a C128 I would recommend to shorten the BASIC code area a bit via pointer $39/$3A and then put the code beneath the Kernal somewhere between $E000 and $FEFF.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For pure BASIC programs this approach would be safe, even for those programs placing sprites into the cassette buffer and putting some machine code to the beginning of $C000 (on a C128 that would be $1300 respectively)&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, there is always a risk of a conflict with another program. A bitmap or screen placed on the page with your code immediately kills it and of course, somebody could have a similar idea of using the end of a memory area to place their code. Some BASIC extensions offer two memory areas, asking if they want to be installed in memory area 1 or memory area 2 at set up. This would be a way to go: a normal BASIC user just uses the default setting and somebody using exotic memory areas would get the possibility to select the memory area for installation that does not interfere with their code and data.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-11-30T10:14:21.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17140" PostTypeId="2" ParentId="17138" CreationDate="2020-11-30T10:44:15.973" Score="3" Body="&lt;p&gt;The Spanish Wikipedia has a &lt;a href=&quot;https://es.wikipedia.org/wiki/Game_Boy_Pocket&quot; rel=&quot;nofollow noreferrer&quot;&gt;dedicated Gameboy Pocket&lt;/a&gt; article, giving a European release date of March 1997.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2020-11-30T10:44:15.973" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17141" PostTypeId="1" AcceptedAnswerId="17142" CreationDate="2020-11-30T17:49:23.307" Score="8" ViewCount="985" Body="&lt;p&gt;Why did Apple include shapes in Applesoft BASIC? There are no sprites on the Apple II, but shapes provide a simple vector drawing tool. As graphics go the shapes are kind of an odd duck, they provide a little bit of what Quickdraw could do later on the Mac. Shapes lack some useful features like fill and xor, so only simple games/programs can use them.&lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2020-11-30T19:10:27.407" Title="Why does the Applesoft BASIC have shapes?" Tags="&lt;apple-ii&gt;&lt;graphics&gt;&lt;programming&gt;&lt;applesoft-basic&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17142" PostTypeId="2" ParentId="17141" CreationDate="2020-11-30T18:25:51.987" Score="13" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why did Apple include shapes in Applesoft BASIC?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because they were introduced with the '&lt;a href=&quot;https://archive.org/details/programmers-aid-1&quot; rel=&quot;noreferrer&quot;&gt;Programmers Aid #1&lt;/a&gt; ROM' for &lt;a href=&quot;https://en.wikipedia.org/wiki/Integer_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Integer BASIC&lt;/a&gt;, so it was rather natural for Applesoft to support it as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Shapes lack some useful features like fill and xor,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To start with, there was a XOR mode. In addition, they provided features only vector graphic could add: Arbitrary rotation and scaling.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;From Grandpa's Memory:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In fact, one of my earliest Applesoft programs based on the benefits shapes offer. A little program drawing an &lt;a href=&quot;https://en.wikipedia.org/wiki/Advent_wreath&quot; rel=&quot;noreferrer&quot;&gt;Adventskranz&lt;/a&gt; with its four candles,which could be lighted according to date. I guess one would call it today a 'Seasonal APP' :)&lt;/p&gt;&#xA;&lt;p&gt;While wreath and candles were static drawn, I used two shapes to draw the flame, which randomly&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;grew and shrinked a bit (using &lt;code&gt;SCALE=&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;tilted to the sides (using &lt;code&gt;ROT=&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The second shape was smaller than the main shape and drawn inside. Always wit the same tilting, but growing and shrinking on it's own within the main shape. THe resulting image was quite natural ... at least to me.&lt;/p&gt;&#xA;&lt;p&gt;There was a keystroke to enlight one or more and another to blow them - which first tilted them all to one side, flickering a lot, and only if pressed long enough put them off.&lt;/p&gt;&#xA;&lt;p&gt;Doing the same with sprites (or similar drawing routines) would have meant to draw more than a dozend sprites to cover each size/tilt combination, while with shapes it was just one for all&lt;/p&gt;&#xA;&lt;p&gt;Given, not the biggest fish in town, but the whole idea grew when reading the description of shapes and ... well, it was about the same time of the year, 42 years ago: &lt;a href=&quot;https://en.wikipedia.org/wiki/Advent&quot; rel=&quot;noreferrer&quot;&gt;Adventszeit&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-11-30T19:10:27.407" LastActivityDate="2020-11-30T19:10:27.407" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17143" PostTypeId="2" ParentId="16477" CreationDate="2020-11-30T19:42:08.400" Score="2" Body="&lt;p&gt;Those are raw disk images. No special software is needed. You can use the &lt;code&gt;DEBUG&lt;/code&gt; program - a part of DOS - to load the image from file to memory, and then to write it out to disk. I do suggest you try it out using either actual MS-DOS or FREEDOS, or by rebooting into DOS mode from Windows.&lt;/p&gt;&#xA;&lt;p&gt;Within debug, it’d go something like:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;N atdos331.360&lt;/code&gt; - set the file to load from, you should start debug in the folder containing that file&lt;br /&gt;&#xA;&lt;code&gt;L&lt;/code&gt; - load the file starting at CS:0100&lt;br /&gt;&#xA;&lt;code&gt;R&lt;/code&gt; - show registers to check that the BX:CX pair has the number of bytes read as expected  (360k = 720*512, so BX:CX=5:A000)&lt;br /&gt;&#xA;&lt;code&gt;W 100 0 0 2D0&lt;/code&gt; - write from CS:0100 to drive 0 (A:) starting at sector 0, a total of 720 (2D0) sectors&lt;/p&gt;&#xA;&lt;p&gt;I don’t recall at the moment whether DEBUG starts with a suitable value of CS, but I presume it should - ie. CS must be just above debug’s own memory area. You’ll have no problem fitting 360k worth of data into the available space.&lt;/p&gt;&#xA;" OwnerUserId="10800" LastActivityDate="2020-11-30T19:42:08.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17144" PostTypeId="1" CreationDate="2020-11-30T22:02:41.243" Score="11" ViewCount="1894" Body="&lt;p&gt;I recently saw a video made by the famous &amp;quot;The 8 Bit Guy&amp;quot; about PE6502 computer.  At &lt;a href=&quot;https://youtu.be/KAivGLHJzJM?t=1181&quot; rel=&quot;nofollow noreferrer&quot;&gt;19:41&lt;/a&gt;, he successfully sent a text file from his Windows 95 laptop to the PE6502 using only a standard serial cable.&lt;/p&gt;&#xA;&lt;p&gt;I got interested in this topic and looked if anyone had ever come up with something similar to send text to the Commodore 64 (I am a C64 newbie btw).&lt;/p&gt;&#xA;&lt;p&gt;I found that there were many similar projects, but they all used UserPort on the C64 side, rather than SerialPort, and I am not sure why they used that port. They also required special software for the C64.&lt;/p&gt;&#xA;&lt;p&gt;Is it possible to transfer text or files from PC to C64 without any software on the C64 side, using similar method as on 8BitGuy's video? If so, how to do it?&lt;/p&gt;&#xA;" OwnerUserId="7710" LastEditorUserId="15334" LastEditDate="2020-12-01T15:40:02.413" LastActivityDate="2020-12-01T19:50:26.623" Title="Is it possible to just construct a simple cable serial↔︎serial and send data from PC to C64?" Tags="&lt;commodore-64&gt;&lt;serial&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17145" PostTypeId="1" AcceptedAnswerId="17146" CreationDate="2020-11-30T22:21:23.190" Score="29" ViewCount="5866" Body="&lt;p&gt;I was playing Remedy Entertainment's video game &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Control_(video_game)&quot; rel=&quot;noreferrer&quot;&gt;Control&lt;/a&gt;&lt;/em&gt; the other day. Inside the game world, I've come across several computers. (They all look extremely similar.) To me, it looks like some kind of DEC system. Now I'm wondering... is it just designed &lt;em&gt;in the style of&lt;/em&gt; a DEC? Or is it an &lt;em&gt;actual&lt;/em&gt; real-world model? And if so, which one? Perhaps someone more familiar with this stuff can tell me...&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8KUS0.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8KUS0.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11695" LastEditorUserId="7347" LastEditDate="2020-12-03T17:16:30.977" LastActivityDate="2020-12-03T17:16:30.977" Title="Is this a real system? Which one?" Tags="&lt;gaming&gt;&lt;identify-this-computer&gt;&lt;dec&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17146" PostTypeId="2" ParentId="17145" CreationDate="2020-11-30T22:29:53.753" Score="42" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is this a real system? Which one?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, it's most likely not a specific machine but a setup to look contemporary.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I've come across several computers. (They all look extremely similar.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The usual way of game designers to speed up development: Reuse of props.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[or] is it just designed in the style of a DEC&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That seems to be the purpose. All elements are at least smoothed or outright edited/recreated.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or is it an actual real-world model?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Nop. Even if these were real components, they would be quite unusual one, I mean, 11 CPUs and only tapes for data storage? Even if, they would be mounted in a more accessible way - this is pure random.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;What is visible?&lt;/h2&gt;&#xA;&lt;p&gt;It's made up of typical PDP elements but in rather random order and mixture. There are for example:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;three &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-12&quot; rel=&quot;noreferrer&quot;&gt;PDP-12&lt;/a&gt; front panels (the ones with a keyboard like 'table', two of them with a screen atop)&lt;/li&gt;&#xA;&lt;li&gt;four boxes that seem like PDP-8f, but edited (the black/orange boxes.&lt;/li&gt;&#xA;&lt;li&gt;four boxes that may be based on a &lt;a href=&quot;http://www.pdp-11.nl/pdp11-04/pdp11-04startpage.html&quot; rel=&quot;noreferrer&quot;&gt;PDP-11/04&lt;/a&gt; or 11/34 with programmers console (or PDP-8a) but quite heavy edited (the ones with a black front and a keypad to the left).&lt;/li&gt;&#xA;&lt;li&gt;three &lt;a href=&quot;http://www.pdp-11.nl/peripherals/tape/tu56-info.html&quot; rel=&quot;noreferrer&quot;&gt;TU56 dual DECtape&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;one (again edited) &lt;a href=&quot;http://www.pdp-11.nl/peripherals/tape/tu60-info.html&quot; rel=&quot;noreferrer&quot;&gt;TU-60 cassette drive&lt;/a&gt; (top of second last rack), which is interesting, as it's a rather rare device.&lt;/li&gt;&#xA;&lt;li&gt;The grey boxes with cables seem to be either I/O interfaces for some process/lab control, Or maybe some terminal interface - I'm not really remember any name here.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Long story short, it's most definite made to represent a DEC(ish) machine, but its parts do not make much sense. The game designer took (or found) some pictures edited (or recreated) them and used the result to 'build' the setup.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Bonus Content:&lt;/h2&gt;&#xA;&lt;p&gt;There are some oscilloscopes on the right side which look much like classic Tektronics. The lower one might be a &lt;a href=&quot;https://w140.com/tekwiki/wiki/555&quot; rel=&quot;noreferrer&quot;&gt;555&lt;/a&gt; or 556. The one above &lt;em&gt;might&lt;/em&gt; be a &lt;a href=&quot;https://w140.com/tekwiki/wiki/564&quot; rel=&quot;noreferrer&quot;&gt;564&lt;/a&gt;. Again both are rather edited. The 555/6 should have a rather bulky power supply  below. The &lt;a href=&quot;https://w140.com/tekwiki/wiki/555#/media/File:Wellenkino_555.jpg&quot; rel=&quot;noreferrer&quot;&gt;cart&lt;/a&gt; holding them is again heavy edited, but rather true to the design of carts supplied by Tektronics.&lt;/p&gt;&#xA;&lt;p&gt;Looking close, I start to appreciate the time the artist did spend to model these items in a way capturing the essence. Would be interesting (although not really RC.SE related) to see the whole setup. Maybe add a wider picture?&lt;/p&gt;&#xA;&lt;p&gt;In addition, scopes are not exactly a to be found in a computing room. At least not a setup that expensive.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-01T23:57:37.890" LastActivityDate="2020-12-01T23:57:37.890" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="17147" PostTypeId="2" ParentId="17144" CreationDate="2020-11-30T22:31:38.127" Score="16" Body="&lt;p&gt;The C64 does not have a real standard RS-232 port. (The C64 port marked Serial is something quite different, namely its native IEC port.)&lt;/p&gt;&#xA;&lt;p&gt;The User Port, however - apart from being usable as a a parallel port - can &lt;em&gt;almost&lt;/em&gt; be used as an RS-232 port as well.&lt;/p&gt;&#xA;&lt;p&gt;The &amp;quot;OS&amp;quot; (kernal) has support for it, but the voltage levels are +5/0 instead of the ±12V of RS-232 so there's a need for some level shifting, which can be trivially handled by an external MAX232 IC. So reasonably easy to homebrew an adaptor - there were also commercial options, of course.&lt;/p&gt;&#xA;&lt;p&gt;With &lt;a href=&quot;https://www.c64-wiki.com/wiki/RS-232&quot; rel=&quot;noreferrer&quot;&gt;such a solution&lt;/a&gt; in place, you can indeed talk to the C64 using standard RS-232 and standard kernal I/O routines (at limited baud rates!), including from BASIC.&lt;/p&gt;&#xA;&lt;p&gt;You &lt;em&gt;will&lt;/em&gt; need some software running on the C64, though, as there is no built in support of redirecting the  RS-232 port to the keyboard input in the way the PE6502 has implemented it in the video you mention.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-11-30T23:04:00.190" LastActivityDate="2020-11-30T23:04:00.190" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17148" PostTypeId="1" CreationDate="2020-12-01T01:02:19.573" Score="1" ViewCount="107" Body="&lt;p&gt;I have a toshiba HX-10 64KB MSX1 computer (PAL video output). I recently used a new cassette cable which caused a problem with the video;I am using the AV composite audio and video; because the video looks distorted similar to when it would just be tuned out if it was plugged into an analog CRT TV and the sound here sounds distorted too;however when I sometimes wiggle the cassette lead (though not always) or turn the computer upside down then the MSX works as normal (i.e. video and sounds look perfect). What maybe the problem with it ? and how to fix it?&lt;/p&gt;&#xA;" OwnerUserId="20035" LastActivityDate="2020-12-01T01:02:19.573" Title="How to fix problem with MSX Composite Video?" Tags="&lt;msx&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17149" PostTypeId="2" ParentId="17144" CreationDate="2020-12-01T09:04:27.513" Score="3" Body="&lt;p&gt;There's a company called FTDI who make cables which fit this purpose, they're USB on one end (your PC), and the other end can be wire ended or have a connector. In @Retrograde's answer it's stated that the voltage levels are +5/0 V so something like the TTL-232RG-VSW5V-WE from &lt;a href=&quot;https://www.ftdichip.com/Products/Cables/USBTTLSerial.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;FTDI&lt;/a&gt; should work.&lt;/p&gt;&#xA;&lt;p&gt;I am in no way affiliated with the company, I just use some of their products in my working life and they seem reliable.&lt;/p&gt;&#xA;" OwnerUserId="3514" LastActivityDate="2020-12-01T09:04:27.513" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17151" PostTypeId="2" ParentId="14537" CreationDate="2020-12-01T10:22:41.783" Score="11" Body="&lt;h2&gt;A Brief History of BSD Net/1, Net/2&lt;/h2&gt;&#xA;&lt;p&gt;I found the answers while browsing the old OpenBSD release notes today. The release note of OpenBSD 4.4 contains a brief history of BSD Net/1 and Net/2. While it doesn't answer exactly &lt;em&gt;what code&lt;/em&gt; or &lt;em&gt;which features&lt;/em&gt; were removed and rewritten from the BSD codebase (time for me to start digging up the source code and Usenet archives?), but still offers much historical insight on its development process.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Nearly 10 years ago Kirk McKusick wrote a history of the Berkeley Unix distributions for the O'Reilly book &amp;quot;&lt;a href=&quot;https://www.oreilly.com/openbook/opensources/book/kirkmck.html&quot; rel=&quot;noreferrer&quot;&gt;Open Sources: Voices from the Open Source Revolution&lt;/a&gt;&amp;quot;. We recommend you read his story, entitled &amp;quot;Twenty Years of Berkeley Unix From AT&amp;amp;T-Owned to Freely Redistributable&amp;quot; first, to see how Kirk remembers how we got here. Sadly, since it showed up in book form originally, this text has probably not been read by enough people.&lt;/p&gt;&#xA;&lt;p&gt;The USL(AT&amp;amp;T) vs BSDI/UCB court case settlement documents were not public until recently; their disclosure has made the facts more clear. But the story of how three people decided to free the BSD codebase of corporate pollution — and release it freely — is more interesting than the lawsuit which followed. Sure, a stupid lawsuit happened which hindered the acceptance of the BSD code during a critical period. But how did a bunch of guys go through the effort of replacing so much AT&amp;amp;T code in the first place? After all, companies had lots of really evil lawyers back then too — were they not afraid?&lt;/p&gt;&#xA;&lt;p&gt;After a decade of development, most of the AT&amp;amp;T code had already been replaced by university researchers and their associates. So Keith Bostic, Mike Karels and Kirk McKusick (the main UCB CSRG group) started going through the 4.3BSD codebase to cleanse the rest. Keith, in particular, built a ragtag team (in those days, USENIX conferences were a gold mine for such team building) and led these rebels to rewrite and replace all the Imperial AT&amp;amp;T code, piece by piece, starting with the libraries and userland programs. Anyone who helped only got credit as a Contributor — people like Chris Torek and a cast of .. hundreds more.&lt;/p&gt;&#xA;&lt;p&gt;Then Mike and Kirk purified the kernel. After a bit more careful checking, this led to the release of a clean tree called Net/2 which was given to the world in June 1991 — the largest dump of free source code the world had ever received (for those days — not modern monsters like OpenOffice).&lt;/p&gt;&#xA;&lt;p&gt;Some of these ragtags formed a company (BSDi) to sell a production system based on this free code base, and a year later Unix System Laboratories (basically AT&amp;amp;T) sued BSDi and UCB. Eventually AT&amp;amp;T lost and after a few trifling fixes (described in the lawsuit documents) the codebase was free. A few newer developments (and more free code) were added, and released in June 1994 as 4.4BSD-Lite. Just over 14 years later OpenBSD is releasing its own 4.4 release (and for a lot less than $1000 per copy).&lt;/p&gt;&#xA;&lt;p&gt;The OpenBSD 4.4 release is dedicated to Keith Bostic, Mike Karels, Kirk McKusick, and all of those who contributed to making Net/2 and 4.4BSD-Lite free.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;My following answer with more details was based on the OpenBSD release note and Kirk McKusick's article.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.oreilly.com/openbook/opensources/book/kirkmck.html&quot; rel=&quot;noreferrer&quot;&gt;Open Sources: Voices from the Open Source Revolution&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;BSD Net/1&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The first &amp;quot;unencumbered&amp;quot; BSD release free from such restrictions was BSD Net/1, which was a BSD release based on 4.3BSD-Tahoe. By removing all proprietary AT&amp;amp;T code, the entire system became freely available,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is incorrect. BSD Net/1 was not a full operating system, it was only a small part of it - namely the TCP/IP networking code from 4.3BSD kernel and its userspace utilities. It was copied from the main BSD codebase and released as an independent software package. Because the TCP/IP code was BSD's original work and didn't exist in the original Unix 32/V (a 32-bit VAX port of Unix v7) at all, Berkeley had the rights to release it under the free BSD license. The motivation was to allow PC software vendors to implement TCP/IP in their products using the existing BSD code, without an expensive Unix license (which was required to use the &amp;quot;full&amp;quot; BSD).&lt;/p&gt;&#xA;&lt;p&gt;So the answer to the first question is clear: What code was removed from BSD/Net1? The entire operating system.&lt;/p&gt;&#xA;&lt;h2&gt;BSD Net/2&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;By removing the AT&amp;amp;T code, what was its impact on the features and functionalities of BSD? Was it a complete removal, or was it a partial replacement with reimplementation of affected features?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;TL;DR: It was a heroic effort to replace and reimplement nearly all affected features in the system.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;BSD Net/2 was a further progression of the campaign to free BSD, after the success of Net/1, naturally, BSD developers started to take the idea further to release not just the TCP/IP stack, but a free version of the entire operating system.&lt;/p&gt;&#xA;&lt;p&gt;In fact, BSD had a major advantage here. By the time 4.3BSD has released, the development of BSD has already been independent from AT&amp;amp;T for more than a decade - ever since the commercialization of Unix, Berkeley quickly stepped into the clearing-house role previously provided by the Bell Laboratories - thus, many components in the kernel from AT&amp;amp;T had already been replaced by university researchers and their associates at this point.&lt;/p&gt;&#xA;&lt;p&gt;Nevertheless, freeing the entire system was still not an easy task, a major rewrite was needed for the entire userland. So developers at Berkeley started a major campaign, lead by Keith Bostic, Mike Karels and Kirk McKusick. To attack this problem, Keith Bostic organized an informal team with hundreds of contributors recruited from the Internet and USENIX conferences, pioneered the use of online community which would later become the norm in free and open source software.&lt;/p&gt;&#xA;&lt;p&gt;Their mission was to replace and rewrite Unix utilities from scratch solely based on their public descriptions, one binary at a time. And as always, should they choose to accept it, their only compensation would be to have their name listed among the Berkeley contributors next to the name of the utility that they rewrote, and nothing more. Initially, progress was slow and only trivial utilities were being rewritten, but as time went by, the list of freed Unix utilities soon exceeded 100 - more and more contributors joined the project. It was a spectacular success - within just 18 months, &amp;quot;nearly all the important utilities and libraries had been rewritten.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;The next step was painstakingly going through the BSD kernel and checking hundreds of files, one by one, for their copyright status. And after several months of audit, it turned out that the entire kernel was almost clean; the vast majority of code were either developed at BSD, or could be rewritten easily. Only 6 files were technically challenging, thus the affected code was implemented and those 6 files were removed. The University administration gave clearance to the release of BSD Net/2. And the rest was history.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Closing the gap from the Networking Release 2 distribution to a fully functioning system did not take long. Within six months of the release, Bill Jolitz had written replacements for the six missing files. He promptly released a fully compiled and bootable system for the 386-based PC architecture which he called 386/BSD. Jolitz's 386/BSD distribution was done almost entirely on the Net. He simply put it up for anonymous FTP and let anyone who wanted it download it for free. Within weeks he had a huge following.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, the demands of keeping a full-time job meant that Jolitz could not devote the time needed to keep up with the flood of incoming bug fixes and enhancements to 386/BSD. So, within a few months of the release of 386/BSD, a group of avid 386/BSD users formed the NetBSD group [...] The FreeBSD group was formed a few months after the NetBSD group with a charter to support just the PC architecture and to go after a larger and less technically advanced group of users, much as Linux had done.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;Lawsuits&lt;/h2&gt;&#xA;&lt;p&gt;After the release of BSD Net/2, a for-profit company, Berkeley Software Design, Incorporated (BSDi) also formed to sell a Net/2-based commercial Unix. It presented itself as a serious competitor, with an independent system free from AT&amp;amp;T/USL's copyright. And in their early aggressive advertising campaign, it marketed that the system was available at $995, just 1% of the USL's price. BSDi also used the phone number 1-800-ITS-Unix for sales and marketing (the &amp;quot;ITS Unix&amp;quot; phone number was later dropped due to trademark infringement, which is part of the puzzling legal history of the Unix trademark).&lt;/p&gt;&#xA;&lt;p&gt;Seeing USL's monopoly was being threatened, it was at this point that USL started its lawsuits.&lt;/p&gt;&#xA;" OwnerUserId="12128" LastEditorUserId="12128" LastEditDate="2020-12-01T20:07:05.160" LastActivityDate="2020-12-01T20:07:05.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17152" PostTypeId="2" ParentId="17145" CreationDate="2020-12-01T12:07:11.510" Score="16" Body="&lt;p&gt;As @Raffzahn answers, this is probably a concocted image made to look like various real DEC setups. The attached image is of a PDP-12. You can see the heavy tilt towards DECtapes. You also see an object in the lower image that might be an oscilloscope.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8xmJy.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8xmJy.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Image taken from Ed Thelens &lt;a href=&quot;http://ed-thelen.org/comp-hist/&quot; rel=&quot;noreferrer&quot;&gt;great site&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="6659" LastEditDate="2020-12-02T02:08:25.380" LastActivityDate="2020-12-02T02:08:25.380" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17153" PostTypeId="1" AcceptedAnswerId="17155" CreationDate="2020-12-01T14:34:34.797" Score="8" ViewCount="627" Body="&lt;p&gt;I recently saw an &lt;a href=&quot;https://www.youtube.com/watch?v=BPUe0qJcd2M&quot; rel=&quot;noreferrer&quot;&gt;TV old advert&lt;/a&gt; (1983) from an Italian company, called SAGA, that sells a so-called SAG computer. It looks like a microcomputer for SMB, with bundled software.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know what kind of system this is?&lt;/p&gt;&#xA;" OwnerUserId="20037" LastEditorUserId="6659" LastEditDate="2020-12-01T20:59:17.737" LastActivityDate="2021-02-17T02:24:48.617" Title="SAG Computer: What System is it?" Tags="&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17154" PostTypeId="2" ParentId="17144" CreationDate="2020-12-01T14:49:18.523" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Is it possible to transfer text or files from PC to C64 without any software on the C64 side, using similar method as on 8BitGuy's video? If so, how to do it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The C64 does not have a RS-232 port, so you cannot use a standard RS-232 adapter on the PC side without having some hardware and software on the C64 side.&lt;/p&gt;&#xA;&lt;p&gt;However, you can use the IEC bus on the C64 (where normally the 1541 Floppy is attached) without modifications on the C64 side. But then you need special software (and today, also special hardware) on the PC side.&lt;/p&gt;&#xA;&lt;p&gt;Back when all PCs had a parallel port, a simple self-soldered cable called &lt;a href=&quot;http://sta.c64.org/x1541c.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;X1541 cable&lt;/a&gt; was all that's needed. Special software on the PC driving the IEC bus through the parallel port could then emulate a floppy, so you could transfer data.&lt;/p&gt;&#xA;&lt;p&gt;Today, PCs don't come with a parallel port, and the USB-to-parallel converters don't offer the same flexibility as an in-built parallel port, so the modern equivalent would probably be a RaspPi or something similar with a level converter, and a port of the software. I found at least one project (&lt;a href=&quot;https://cbm-pi1541.firebaseapp.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CBM PI1541&lt;/a&gt;) with that approach.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-12-01T15:07:23.133" LastActivityDate="2020-12-01T15:07:23.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17155" PostTypeId="2" ParentId="17153" CreationDate="2020-12-01T18:37:33.053" Score="13" Body="&lt;p&gt;SAGA or &lt;em&gt;Sistemi Avanzati Gestione Aziendale&lt;/em&gt; was (?) an Italian software companiy based in Rome. The name may be translated as &lt;em&gt;&amp;quot;Advanced Business Management Systems&amp;quot;&lt;/em&gt; (Literally &lt;em&gt;Systems Advanced Management Corporate&lt;/em&gt;). I'm not sure if they ever sold just computers (or made them at all), as their business was about company software like bookkeeping, taxes, stock management etc.&lt;/p&gt;&#xA;&lt;p&gt;SAG is &lt;em&gt;Sistem Avanzat Gestione&lt;/em&gt; (&lt;em&gt;&amp;quot;Advanced Management System&amp;quot;&lt;/em&gt;) and marks  a bundle a bundle of a SAGAFOX computer and the SAGA software package. Their business model were turn key solutions, selling hardware and service as well, so customers didn't have to care about how it works.&lt;/p&gt;&#xA;&lt;p&gt;The machine shown was called &lt;a href=&quot;https://www.1000bit.it/scheda.asp?id=108&quot; rel=&quot;nofollow noreferrer&quot;&gt;SAGAFOX&lt;/a&gt; plus a number depending on disk space (FD or FD/HD). It is essentially a Z80 based CP/M system wit dual FD and high resolution B&amp;amp;W graphics (*1). The case looks quite similar to a MAEL 1000/2000. They as well sold the package bundled with generic CP/M boxed called BIP (plus a number) for a lower price.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17153/sag-computer-what-system-is-it#comment58238_17155&quot;&gt;Snips-n-snails&lt;/a&gt; found a quite informative &lt;a href=&quot;http://youtube.com/watch?v=9L9wgUy37Kg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Youtube video&lt;/a&gt; (in Italian) about the system. F80 marks the dual floppy system with 800 KiB (2 x 400 KiB).&lt;/p&gt;&#xA;&lt;p&gt;SAGA are related to MAEL computer of Milano which is well known for their POS system. Around 1980 next to every post office and railways station had MAEL systems - and of course every news stand offering &lt;a href=&quot;https://it.wikipedia.org/wiki/Totocalcio&quot; rel=&quot;nofollow noreferrer&quot;&gt;Totocalcio&lt;/a&gt; (football bet pools). MAEL was bought by Olivetti in the mid 1980s.&lt;/p&gt;&#xA;&lt;p&gt;SAGA developed (and sold) their software first for MAEL mini computers (System 5000), and sold them as integrated solutions.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.S.: Nice find. Italy had, much like Germany, a rather diverse landscape for business systems before everything converted to PC in the 90s. Much less visible than home computers and other systems directed at a general public - though, way more fun to find and deciffer.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1  - I've once be told (and the video repeats this) it would be similar to an Intertec Superbrain, as it as well features a slave Z80 for I/O, but there are too many dissimilarities, not at least a different disk format, for me to stay sceptic.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-17T02:24:48.617" LastActivityDate="2021-02-17T02:24:48.617" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17156" PostTypeId="2" ParentId="17144" CreationDate="2020-12-01T19:50:26.623" Score="5" Body="&lt;p&gt;Once you get the cable sorted out, you might want to investigate the program called Kermit. It was widely used to transfer data between various types of computers over serial links before networking was widely established. There is a version of Kermit specifically for the C64 in the Columbia University archive, see &lt;a href=&quot;http://www.columbia.edu/kermit/c64.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.columbia.edu/kermit/c64.html&lt;/a&gt; or the Kermit project site &lt;a href=&quot;http://www.kermitproject.org/&quot; rel=&quot;noreferrer&quot;&gt;http://www.kermitproject.org/&lt;/a&gt; . Of course there are Windows/Linux/MacOS versions of kermit for the other end.&lt;/p&gt;&#xA;" OwnerUserId="19018" LastActivityDate="2020-12-01T19:50:26.623" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17157" PostTypeId="1" CreationDate="2020-12-01T23:16:28.960" Score="3" ViewCount="301" Body="&lt;p&gt;I have &lt;a href=&quot;https://github.com/besm6/besm6.github.io/blob/master/wiki/graf.pas&quot; rel=&quot;nofollow noreferrer&quot;&gt;a Pascal program with a fair amount of inline assembly code in it&lt;/a&gt; which demonstrates the capabilities of «Электроника МС 7401» — символьно-графический видеотерминал (Elektronika MS 7401 - alphanumeric-graphical videoterminal), made in the Ukraine in the 1980s. Its commands were described in the Soviet magazine &amp;quot;Microprocessor Tools and Systems&amp;quot; (Микропроцессорные средства и системы) in 5/1989, but a scan of that issue that I could find online in &lt;a href=&quot;http://publ.lib.ru/ARCHIVES/M/%27%27Mikroprocessornye_sredstva_i_sistemy%27%27/_%27%27MPSS%27%27.html#1989&quot; rel=&quot;nofollow noreferrer&quot;&gt;a public library&lt;/a&gt; is incomplete, the article in question is missing.&#xA;I was able to guess the meaning of only a fraction of the commands. Replacing them with PostScript, I got a few pictures.&lt;/p&gt;&#xA;&lt;p&gt;Here is one of the pictures drawn by the program:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/LxHA3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LxHA3.png&quot; alt=&quot;An abstract pattern&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hoping that its commands follow a Western prototype, I'll provide a few translated code excerpts of the graphical primitives:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;... obvious type definitions elided for brevity ...&#xA;&#xA;(* Draws a line of the given type (solid/dotted/dashes, etc) to relative coordinates (PS rlineto) *)&#xA;procedure LINCUR(TYP,Х,Y:INТ);&#xA;begin&#xA;    WRIТЕ(’8’,TYP:0,' ',Х:0,' ',Y:0,BK)&#xA;end;&#xA;&#xA;(* Same as above, but to absolute coordinates (lineto) *)&#xA;procedure LINE(TYP,Х,Y:INТ);&#xA;begin&#xA;    WRIТЕ(’7’,TYP:0,' ',Х:0,' ',Y:0,BK)&#xA;end;&#xA;&#xA;(* Analog of PostScript moveto/rmoveto *)&#xA;procedure CURPT(ABS:ВООL;Х,Y:INТ);&#xA;begin&#xA;    if ABS then WRIТЕ(’4’) else WRIТЕ(’5’);&#xA;    WRIТЕ(' ',Х:0,' ',Y:0,BK)&#xA;end;&#xA;&#xA;(* Draws a circle around the current point *)&#xA;procedure CIRCLE(TYP,R:INТ);&#xA;begin&#xA;    WRIТЕ(’&amp;gt;’,TYP:0,' ',R:0,BK)&#xA;end;&#xA;&#xA;(* The coordinates are relative to the current point *)&#xA;procedure BOX(ХН,YН,ХВ,YВ:INТ);&#xA;begin&#xA;    WRIТЕ(’] ’,ХН:0,' ',YН:0,' ',ХВ:0,' ',YВ:0,BK)&#xA;end;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The end-of-command symbol &lt;code&gt;BK&lt;/code&gt; was defined as ’≡125’ which raises doubts that the native encoding of the terminal was ASCII, but the commands themselves look reasonable.&lt;/p&gt;&#xA;&lt;p&gt;Were there known Western graphical terminals using space-separated decimal coordinates, numerical commands for movement and line drawing, and numerical line type selectors?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-12-02T12:00:39.410" Title="What are these graphical display commands?" Tags="&lt;graphics&gt;&lt;display&gt;&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17158" PostTypeId="2" ParentId="17157" CreationDate="2020-12-02T09:10:26.417" Score="2" Body="&lt;p&gt;If you can read Russian, here is a &lt;a href=&quot;https://www.1801bm1.com/files/retro/BOOK/MPSS/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%BD%D1%8B%D0%B5%20%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B0%20%D0%B8%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B%201989-05-06.djvu&quot; rel=&quot;nofollow noreferrer&quot;&gt;complete scan&lt;/a&gt; of the magazine issue you're referring to:&lt;/p&gt;&#xA;&lt;p&gt;In DjVu page numbering, the first page of interest is page 45.&lt;/p&gt;&#xA;&lt;p&gt;I am not sure though if the article in question would give you much useful info as it does not contain any detailed command reference.&lt;/p&gt;&#xA;" OwnerUserId="3303" LastEditorUserId="6659" LastEditDate="2020-12-02T12:00:39.410" LastActivityDate="2020-12-02T12:00:39.410" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17159" PostTypeId="2" ParentId="17137" CreationDate="2020-12-02T12:28:02.883" Score="2" Body="&lt;p&gt;The 160 GB disk is the problem here.  You are running into a thing called the 48bit addressing, which would limit the drive to 137 GB.  You can still use the 160 gigs, if you overcome the &amp;quot;48BLBA&amp;quot;, you should overcome the problem.&lt;/p&gt;&#xA;&lt;p&gt;Windows NT does not need to be on a primary partition, and my suggestion here is to set the thing up as a small (20 MB) FAT16 partition, and the balance as an extended drive.  You could have something like a 120 MB fat partition (this overcomes a DOS problem when the first partition on the extended drive is not FAT32.  It is also used for data exchange between the two operating systems.  If you make this over 120 MB, Windows 9x will try to change it to a fat32 partition.&lt;/p&gt;&#xA;&lt;p&gt;Partition E can be a 2 G fat32 partition.  You install Windows 9x into this partition, and it will create a small amount of files on the C: drive.  My experience is because of the shared C: drive, to install different Windows into different names.&lt;/p&gt;&#xA;&lt;p&gt;The next partition F can be an NTFS partition.  If your machine is limited by the 8 GB limit, it is best to limit this drive to 2 GB also.  Install NT here.  It will recognise the Win9x and add it to the boot menu.&lt;/p&gt;&#xA;&lt;p&gt;Neither of these OS versions can access past 137 GB, so the remainder would go missing, but you can create both NTFS and Fat32 partitions up there.  Where you have a network, you can copy the Windows NT setup onto the D: drive, and run winnt.exe from there.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2020-12-02T12:28:02.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17160" PostTypeId="2" ParentId="13114" CreationDate="2020-12-02T12:53:15.090" Score="4" Body="&lt;p&gt;IBM in essence, is a hardware company, not a software one.  We see that Gerstner was C.E.O., and IBM was loosing money.  The lack-luster reception of first the PS/2, and then the PS/1 (which followed it), meant that IBM was eventually going to withdraw from the market place.  Lou Gerstner hastened the process.&lt;/p&gt;&#xA;&lt;p&gt;There is a book called &amp;quot;Big Blues&amp;quot; / &amp;quot;the unmaking of IBM&amp;quot; by Paul Carroll, that features this.  It was also in the glossies at the time.&lt;/p&gt;&#xA;&lt;p&gt;One problem was that Florida started asking for taxed based on global sales, rather than local sales.  This killed Boca Raton (home to the DOS/OS2 group).  This happened around 1995/6, but the programming was moved in reduced form to Austin in Texas.&lt;/p&gt;&#xA;&lt;p&gt;This is where DOS 2000, OS/2 4.0, 4.5x comes from.  The DOS is simply a superinposition of the DOS 7.00 fixes.  OS/2 continued to be managed, although no major version coming.  4.0 has a new set of wallpaper.&lt;/p&gt;&#xA;&lt;p&gt;But without digging out the glossies, I can't give statements from actual IBMers.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2020-12-02T12:53:15.090" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17162" PostTypeId="2" ParentId="8562" CreationDate="2020-12-03T01:17:58.807" Score="3" Body="&lt;p&gt;The latest version of &amp;quot;Sperfo Harlequin 128 (issue 4)&amp;quot; support ALLRAM mode&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://onedrive.live.com/?id=E0ADBB58ADB8D869%21209864&amp;amp;cid=E0ADBB58ADB8D869&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://onedrive.live.com/?id=E0ADBB58ADB8D869%21209864&amp;amp;cid=E0ADBB58ADB8D869&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can connect to floppy disk interface and run CP/M 2.2 or CP/M Plus, the same as ZX Spectrum +3&lt;/p&gt;&#xA;" OwnerUserId="20044" LastActivityDate="2020-12-03T01:17:58.807" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17163" PostTypeId="1" AcceptedAnswerId="17165" CreationDate="2020-12-03T04:50:49.150" Score="27" ViewCount="6465" Body="&lt;p&gt;I would like to know how much early PC hard drives cost but have only been aable to find adjacent or unsourced data.&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://www.computinghistory.org.uk/det/21352/IBM-5161/&quot; rel=&quot;noreferrer&quot;&gt;the Centre for Computing History&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The &amp;quot;IBM 5161 Expansion Chassis&amp;quot; came with one 10 MB hard disk and&#xA;allowed the installation of a second hard disk.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?29532-IBM-5150-amp-5161-pricing-from-1982-83&quot; rel=&quot;noreferrer&quot;&gt;a user of the Vintage Computer Forum&lt;/a&gt;, the 5161 cost $2,881 in December 1983. I have not been able to find out how much a second hard drive cost.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.pingdom.com/blog/amazing-facts-and-figures-about-the-evolution-of-hard-disk-drives/&quot; rel=&quot;noreferrer&quot;&gt;Amazing Facts and Figures About the Evolution of Hard Disk Drives&lt;/a&gt; claims:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A 5MB hard disk drive from Apple cost $3,500 in 1981.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They do not provide a source for that claim.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;How much did the first hard drives for the IBM PC or Apple || cost, and how big were they?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="20045" LastActivityDate="2020-12-29T18:38:04.970" Title="How much did the first hard drives for PCs cost?" Tags="&lt;apple-ii&gt;&lt;ibm-pc&gt;&lt;hard-disk&gt;&lt;cost&gt;" AnswerCount="17" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17164" PostTypeId="1" CreationDate="2020-12-03T06:28:49.643" Score="8" ViewCount="366" Body="&lt;p&gt;I've been reacquainting myself with classic Mac OS programming (&lt;em&gt;e.g.&lt;/em&gt; the Toolbox, MacsBug, THINK Pascal/C, &lt;em&gt;etc.&lt;/em&gt;) and became curious how software engineering best practices were ...practiced... using the platform's tools of the day.&lt;/p&gt;&#xA;&lt;p&gt;Specifically, I've been looking into &lt;strong&gt;source code management&lt;/strong&gt;: what tools did classic Mac OS programmers use for source control?&lt;/p&gt;&#xA;&lt;p&gt;My beard is grey enough to have personally worked with eight or nine different SCM tools, but all of them have been for DOS/Windows, *NIX, and &amp;quot;big(-ish) iron&amp;quot; environments. My Google-Fu is apparently weak in this area, as the only thing I've been able to find being &amp;quot;discussed&amp;quot; &amp;quot;widely&amp;quot; is MPW's Projector and SourceServer tools. Was that the standard? Were there other options in common use?&lt;/p&gt;&#xA;" OwnerUserId="6945" LastActivityDate="2020-12-04T22:05:33.427" Title="What source-code management tools were available for Classic Mac OS development?" Tags="&lt;apple-macintosh&gt;&lt;software-development&gt;&lt;source-control&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17165" PostTypeId="2" ParentId="17163" CreationDate="2020-12-03T08:10:43.253" Score="36" Body="&lt;p&gt;I looked at trade periodicals from the time in question, because the intended customer for a hard drive in the early 1980's was almost certainly a business or school (look at the prices, particularly after they are adjusted for inflation!)&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;PC Magazine&lt;/em&gt; only started operations in February of 1982, but there were already several hard drives &lt;a href=&quot;https://books.google.ca/books?id=w_OhaFDePS4C&amp;amp;lpg=RA1-PA52&amp;amp;vq=hard%20disk&amp;amp;pg=RA1-PA125#v=snippet&amp;amp;q=hard%20disk&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;announced or available in the first issue&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Datamac Computer Systems: 6MB (US$2995), 12MB (US$3495), 18MB (US$4195), available in May 1982&lt;/li&gt;&#xA;&lt;li&gt;Santa Clara Systems: 5MB, 10MB (no price given, but a US$200 rebate was offered!)&lt;/li&gt;&#xA;&lt;li&gt;Davong Systems: 5MB (US$1995)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Apple II hard drives were a bit harder for me to find. The earliest one that I was able to get information about was in &lt;em&gt;InfoWorld&lt;/em&gt; (v.2, n.1: February 18, 1980):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://books.google.ca/books?id=aj4EAAAAMBAJ&amp;amp;lpg=PT43&amp;amp;ots=mSUZ15ndlK&amp;amp;dq=byte%20magazine%20corvus%20drive%20systems&amp;amp;pg=PT43#v=onepage&amp;amp;q=byte%20magazine%20corvus%20drive%20systems&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;Corvus Systems Model 11AP&lt;/a&gt;: 10MB (US$5350), which could accept three additional disks (US$3690 each)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;My guess is these prices were all manufacturer's suggested retail price, so the actual amount you would have paid may have been less. Also, this is not an exhaustive list and there may be earlier examples: I chose the earliest examples that I could find after a few searches.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastEditorUserId="4159" LastEditDate="2020-12-04T11:22:34.553" LastActivityDate="2020-12-04T11:22:34.553" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17166" PostTypeId="2" ParentId="17163" CreationDate="2020-12-03T09:23:17.260" Score="6" Body="&lt;p&gt;Disclaimer: I don't recall the exact prices and dates, so it's only rough estimates.&lt;/p&gt;&#xA;&lt;p&gt;For my Z80 CP/M system, around 1984 I bought a 20MB hard drive for 3000DM (~ US$ 1200 by that time). It had the 5.25&amp;quot; full height form factor and an ST506/412 interface.&lt;/p&gt;&#xA;&lt;p&gt;For interfacing with my machine, I used a SASI-to-ST506 controller plus an ECB-based SASI adapter. The SASI-to-ST506 controller was a huge board, same size as the HD, and accounted for DM1500 (~ US$ 600 by that time).&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2020-12-03T09:23:17.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17167" PostTypeId="2" ParentId="17163" CreationDate="2020-12-03T12:07:10.180" Score="19" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How much did the first hard drives for the IBM PC or Apple || cost, and how big were they?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Ready to use setups started around 3,000+ USD for 5 MiB in 1981&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Long (Hi-)Story&lt;/h2&gt;&#xA;&lt;p&gt;As usual defining 'first' is hard, as of course some people always attached drives to their micros way before there wer standard offering - our own Bruce Abbott gives a great example for this by attaching an &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7280/hard-disks-in-1977/7288#7288&quot;&gt;IBM midrange disk drive to a ZX81&lt;/a&gt;. Similar there were multiple offerings to add hard drives to micros, even before the Apple II or the IBM-PC.&lt;/p&gt;&#xA;&lt;p&gt;While there were larger drives before, the &lt;em&gt;Hard Disk Age&lt;/em&gt; for micros essentially started in May 1980 with &lt;a href=&quot;https://www.redhill.net.au/d/1.php&quot; rel=&quot;noreferrer&quot;&gt;Seagate's ST-506&lt;/a&gt;, a full height 5.25 inch drive offering 5 MiB. &lt;strong&gt;The drive&lt;/strong&gt; (without controller) was introduced &lt;strong&gt;at 1500 USD&lt;/strong&gt; as seen in this &lt;a href=&quot;https://archive.org/details/byte-magazine-1981-03/page/n375/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;Byte ad from March 1981&lt;/a&gt;. According to &lt;a href=&quot;https://archive.org/details/byte-magazine-1981-12/page/n384/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;this Byte ad&lt;/a&gt; of Computer Stop in Torrance in Byte 12/1981 the drive was sold with an Apple II interface for 2500 USD.&lt;/p&gt;&#xA;&lt;p&gt;A peek at the world right prior to Seagate is well represented by this &lt;a href=&quot;https://archive.org/details/byte-magazine-1981-03/page/n114/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;Morrow Design ad&lt;/a&gt; in Byte 3/1981, showing their offerings of an 8 Inch 10 MiB drive at 3700 USD and a 14 Inch 26 MiB at 5000 USD. These are already rather lowered prices compared to years before, nonetheless way undercut by Seagates new offerings. Also such drives were almost always rackmount, while the ST-506 could easy dit a desktop (add-on) case. Another data point may be OSI's C3-C system on the back cover of the same issue, starting at 11 grand for a HD version.&lt;/p&gt;&#xA;&lt;p&gt;Apple as well used the ST-506 (in modified form) for their first HD add-on, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_ProFile&quot; rel=&quot;noreferrer&quot;&gt;Profile&lt;/a&gt;, for the Apple III (*1), like advertised in &lt;a href=&quot;https://archive.org/details/byte-magazine-1982-03/page/n85/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;this March 1982 ad&lt;/a&gt; Sales started at 3500 USD in September 1981.&lt;/p&gt;&#xA;&lt;p&gt;In 1981 Seagate introduced the ST-412 with 10 MiB, still full height. This is the drive selected by IBM for the PC and PC-XT.&lt;/p&gt;&#xA;&lt;p&gt;In 1982 the 20 MiB half height ST-225 followed, setting the standard size for years to come.&lt;/p&gt;&#xA;&lt;p&gt;By late 1982 Prices had already dropped to offerings like a 5 MiB drive (ST-506) for ~1500 USD for a Tandy Model I/III including controller and DOS.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Used later with Lisa and Apple II as well&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-03T12:36:03.813" LastActivityDate="2020-12-03T12:36:03.813" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17168" PostTypeId="1" AcceptedAnswerId="17173" CreationDate="2020-12-03T15:24:13.400" Score="13" ViewCount="1432" Body="&lt;p&gt;If I was to write an Amiga game, what would be the best/most reliable way to detect how much RAM is actually available?&lt;/p&gt;&#xA;&lt;p&gt;Looking at &lt;a href=&quot;http://zakalwe.fi/%7Eshd/amiga-cracking/agafix-v2.html&quot; rel=&quot;noreferrer&quot;&gt;Action's Guide to AGA-Fixing!&lt;/a&gt;, he mentions &lt;em&gt;Faulty Memory Detection&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   move.l   #0,$0&#xA;   move.l   #$aaaaaaaa,$200000  ;Poke in $200000&#xA;   cmp.l    #$aaaaaaaa,$200000  ;Re-read to check valid address&#xA;   bne      NoFastAt200000&#xA;   cmp.l    $0,$200000          ;Test the mirror effect&#xA;   beq      NoFastAt200000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I do wonder though if that's a good way to work across all Amigas, from an original A1000 with 256k Chip RAM to an A4000 with 2MB Chip and 4MB Fast RAM. Also, I don't see how that would tell me how much Fast RAM is available.&lt;/p&gt;&#xA;&lt;p&gt;I saw &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node01EE.html&quot; rel=&quot;noreferrer&quot;&gt;AvailMem&lt;/a&gt; and &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_2._guide/node0332.html&quot; rel=&quot;noreferrer&quot;&gt;AllocMem&lt;/a&gt; in exec.library, though I wonder: Will that work even if I don't load Workbench? (That is, if my game boots from a Floppy disk directly - though from my understanding, exec.library is always around, since it's part of Kickstart)&lt;/p&gt;&#xA;&lt;p&gt;For my specific need, I really only care about detecting if I have 512k or 1MB RAM available on a regular Amiga 500 with Kickstart 1.3, but I would like to make sure that the code works on other Amigas, including an A4000 with Kickstart 3.1 and Fast RAM.&lt;/p&gt;&#xA;" OwnerUserId="3344" LastActivityDate="2021-04-09T18:41:57.187" Title="How would I reliably detect the amount of RAM, including Fast RAM?" Tags="&lt;amiga&gt;&lt;assembly&gt;&lt;c&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17169" PostTypeId="2" ParentId="17163" CreationDate="2020-12-03T15:59:32.083" Score="1" Body="&lt;p&gt;By the time the first hard drives were becoming common at retail for early &amp;quot;clone&amp;quot; PCs, you could buy a 10 MB one for about $250 to $300 in the US. That was the actual price for a 10MB &amp;quot;disk-on-a-card&amp;quot; drive assembly consisting of a Western Digital drive attached to a controller ISA board.&lt;/p&gt;&#xA;&lt;p&gt;Of course, drives were much more expensive in the very early days of PCs, but by the time (circa 1986) PC clones were widespread and consumers started buying hard drives, but before all PCs came with hard drives, discount units were in the $300 dollar range.&lt;/p&gt;&#xA;" OwnerUserId="4192" LastActivityDate="2020-12-03T15:59:32.083" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17170" PostTypeId="2" ParentId="17163" CreationDate="2020-12-03T16:42:16.583" Score="3" Body="&lt;p&gt;The first hard drive I ever saw for sale was at a Radio Shack around 1979 or 1980, as an add on to the TRS80.&lt;/p&gt;&#xA;&lt;p&gt;It was a 1.5 megabyte drive, priced at $1000. Chief advantage of it over a 180k floppy drive was higher speed and longevity. Floppy discs had a limited lifespan, and could easily be damaged in handling.&lt;/p&gt;&#xA;&lt;p&gt;In 1990, I bought a 500 meg SCSI drive for $1k, for a NeXT workstation that I got from a BusinessLand that was closing ($2k... a real bargain). Still have that cube up in my attic. To see that in 1990, and to see the first real IDE (the App Builder), when almost everyone was still on DOS and 80x25 text displays was... amazing.&lt;/p&gt;&#xA;" OwnerUserId="5302" LastActivityDate="2020-12-03T16:42:16.583" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17171" PostTypeId="2" ParentId="17164" CreationDate="2020-12-03T17:47:52.517" Score="7" Body="&lt;p&gt;I had a previous employment at a company doing software synthesizers in C++ on Mac OS 9. We were using Microsoft Visual SourceSafe for Mac OS, of all things, for SCM.&lt;/p&gt;&#xA;&lt;p&gt;(Not sure there was a SourceSafe server for Mac OS, I think ours was running off a Windows NT machine.)&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-12-03T17:53:02.040" LastActivityDate="2020-12-03T17:53:02.040" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17172" PostTypeId="2" ParentId="17168" CreationDate="2020-12-03T18:24:43.320" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I do wonder though if that's a good way to work across all Amigas,&#xA;from an original A1000 with 256k Chip RAM to an A4000 with 2MB Chip&#xA;and 4MB Fast RAM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, it's a very bad way. This code can only be safely used if you have killed the OS and taken over completely - then you have to be aware of all possible differences between machines, including additional memory and I/O cards, different CPUs etc.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I saw AvailMem and AllocMem in exec.library, though I wonder: Will&#xA;that work even if I don't load Workbench?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes (provided you didn't kill the OS by eg. overwriting allocated memory). For greatest compatibility your game should be run from the startup-sequence (if not from an icon on Workbench) rather than from bootblock code, then users can add commands before it if necessary to enable non-autoconfig RAM etc.&lt;/p&gt;&#xA;&lt;p&gt;You should try to use the OS as much possible in order to support various features of the machine that may have different hardware implementations. Avoid code that accesses absolute memory locations or pokes into memory that doesn't belong to it, and only access I/O ports directly &lt;em&gt;after&lt;/em&gt; claiming them for your exclusive use.&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-12-03T18:24:43.320" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17173" PostTypeId="2" ParentId="17168" CreationDate="2020-12-03T19:54:00.467" Score="11" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;If I was to write an Amiga game, what would be the best/most reliable way to detect how much RAM is actually available?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The routine you're quoting is only able to detect chip memory (not fast memory), by hardware banging in certain areas. Games sometimes tried &lt;code&gt;$C00000&lt;/code&gt; (popular slow memory location) in the same fashion. But there are too many fast memory configurations to try to detect them that way. The system doesn't do like that (autoconfig works better, and other non-autoconfig boards have software that declare the available memory areas to the system)&lt;/p&gt;&#xA;&lt;p&gt;Games sometimes did that on the &lt;code&gt;$200000&lt;/code&gt; address &lt;em&gt;without&lt;/em&gt; checking the mirror effect (because they didn't expect chip memory to be more than one megabyte). And that failed.&lt;/p&gt;&#xA;&lt;p&gt;But even games that end up taking over the system use &lt;code&gt;AllocMem&lt;/code&gt; on boot (with &lt;code&gt;MEMF_CHIP&lt;/code&gt; or &lt;code&gt;MEMF_FAST&lt;/code&gt;) to get a base value, mask it to try to guess the start of the memory (and then destroyed the OS). It worked rather well on boot because no other program is using up any memory at this point.&lt;/p&gt;&#xA;&lt;p&gt;And games &lt;em&gt;not&lt;/em&gt; taking over the system can just use &lt;code&gt;AvailMem&lt;/code&gt; with &lt;code&gt;MEMF_LARGEST&lt;/code&gt; flag combined to &lt;code&gt;MEMF_CHIP&lt;/code&gt; or &lt;code&gt;MEMF_FAST&lt;/code&gt; to try to predict if the subsequent allocations that they're going to perform are going to succeed (else they can print an error message and exit). A lot of games &lt;em&gt;don't&lt;/em&gt; predict it and if there isn't enough memory the game will fail at a random point of the game...&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    move.l 4,A6&#xA;    move.l #MEMF_CHIP|MEMF_LARGEST,d1&#xA;    jsr  _LVOAvailMem(a6)&#xA;    cmp.l #$80000,d0&#xA;    bcc.b  .one_meg&#xA;    ; 512k only&#xA;    ...&#xA;.one_meg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;MEMF_LARGEST&lt;/code&gt; is not absolutely necessary. It just tells that you can allocate that much memory in one go and it will succeed. Useful when you want to manage the memory block yourself after that.&lt;/p&gt;&#xA;&lt;p&gt;For fast memory, using &lt;code&gt;MEMF_LARGEST&lt;/code&gt; will return the biggest &lt;em&gt;contiguous&lt;/em&gt; memory block. It means that if there are different fastmem areas (Z2 &amp;amp; Z3, slow), you'll only get the biggest one. Use just &lt;code&gt;MEMF_FAST&lt;/code&gt; alone to get the total available fast memory amount.&lt;/p&gt;&#xA;&lt;p&gt;Unlike some other libraries that need some initialization, the exec library functions are available as soon as the system is running. It works from a disk custom boot sector too.&lt;/p&gt;&#xA;&lt;p&gt;Another way (maybe cleaner) is to check exec &lt;code&gt;MaxLocMem&lt;/code&gt;, which provides top of chipmem (&lt;code&gt;$80000&lt;/code&gt; for 512k, &lt;code&gt;$100000&lt;/code&gt; for 1 meg, ...)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;move.l 4,A6&#xA;move.l MaxLocMem(a6),d1&#xA;cmp.l  #$100000,d1&#xA;bcs.b  .not_one_meg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The only drawback is when you configure WinUAE with more than 2MB chip, &lt;code&gt;MaxLocMem&lt;/code&gt; doesn't reflect the chipmem size you configured. But that's a corner case among cornercases (the &lt;code&gt;AvailMem&lt;/code&gt; method works even in that case)&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2021-04-09T18:41:57.187" LastActivityDate="2021-04-09T18:41:57.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17174" PostTypeId="2" ParentId="17164" CreationDate="2020-12-03T21:34:35.693" Score="1" Body="&lt;p&gt;You can look at early Mozilla releases which targeted classic MacOS. The code contained various CVS directories.&lt;/p&gt;&#xA;" OwnerUserId="18904" LastActivityDate="2020-12-03T21:34:35.693" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17175" PostTypeId="1" AcceptedAnswerId="17176" CreationDate="2020-12-04T15:32:18.660" Score="20" ViewCount="10820" Body="&lt;p&gt;I was reading &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2923&quot;&gt;this answer&lt;/a&gt;, as the question came to my mind: why does &lt;code&gt;C:&lt;/code&gt; indicate the first hard drive partition?&lt;/p&gt;&#xA;&lt;p&gt;The usage dates back to CP/M (as noted in a comment), was embraced by MS-DOS, and persists in Windows 10.&#xA;I looked around but could not find any better explanation than&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The computer reserves A: and B: drive letters for the floppy disk&#xA;drive and removable media, such as tape drives, even if these devices&#xA;are not installed in the computer. As you install other drives and&#xA;create new partitions, they are assigned to other drive letters after&#xA;C, such as D, E, F, G, etc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;which I took &lt;a href=&quot;https://web.archive.org/web/20201204151902/https://www.computerhope.com/issues/ch000799.htm&quot; rel=&quot;noreferrer&quot;&gt;from here&lt;/a&gt; and it's basically the same thing that is &lt;a href=&quot;https://en.wikipedia.org/wiki/Drive_letter_assignment&quot; rel=&quot;noreferrer&quot;&gt;on Wikipedia&lt;/a&gt; and &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/2923&quot;&gt;in the aforementioned SE answer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I may be in for disappointment, but I wonder if there is more to the story.&#xA;To draw a parallel, in many scientific fields (, , ) is acknowledged as a tuple of unknowns.&#xA;The rationale behind this choice is likely that the first letters of the alphabet were used for known quantities, and the last for unknown quantities (as per &lt;a href=&quot;https://mathoverflow.net/a/30414&quot;&gt;this answer on MathOverflow&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;So the question may probably be better phrased as: did &lt;code&gt;C:&lt;/code&gt; have a meaning which was unrelated to the existence of two floppy drives?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATES:&lt;/strong&gt;&#xA;It has been pointed out in a comment that a very similar question has also been &lt;a href=&quot;https://superuser.com/questions/231273/what-are-the-windows-a-and-b-drives-used-for&quot;&gt;asked, answered and massively upvoted on superuser SE&lt;/a&gt;.&#xA;Does it even make sense at this point for this question to exist here?&#xA;Mods and admins, feel free to close or take any action you deem appropriate!&lt;/p&gt;&#xA;" OwnerUserId="20053" LastEditorUserId="836" LastEditDate="2020-12-07T17:11:31.573" LastActivityDate="2020-12-17T13:11:11.090" Title="Why was &quot;C:&quot; chosen for the first hard drive partition?" Tags="&lt;history&gt;&lt;ms-dos&gt;" AnswerCount="3" CommentCount="10" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17176" PostTypeId="2" ParentId="17175" CreationDate="2020-12-04T16:30:20.577" Score="58" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why has “C:” been chosen for the first hard drive partition?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because it is the first letter after A and B. Drives are simply numbered in sequence using letters. Since the vast majority of systems in use had only one or two floppy drives, C was usually the first number to be assigned to the next drive found after them.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did C: have a meaning which was non-depending of the existence of two floppy drives?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, drive letters have no meaning at all. They are simply variable names chosen in sequence of detection.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;why does C: indicate the first hard drive partition?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because it is the first letter after A and B, which were defined for floppy drives - as in the beginning, there were  only floppies.&lt;/p&gt;&#xA;&lt;p&gt;The fact that C is &lt;em&gt;always&lt;/em&gt; the primary HD (or partition) is, as explained in the linked answer, a later mechanic, made to please (install) software that was made to assume C the main installation drive.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The usage dates back to CP/M (as noted in a comment), was embraced by MS-DOS, and persists in Windows 10. I looked around but could not find any better explanation than [A&amp;amp;B are fixed while further letters are assigned in sequence of drives 'discovered']&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's exactly the point. Internally drives (in CP/M) were simply numbered. The use of letters is a translation of this number into a letter. 1st (Drive) -&amp;gt; A, 2nd -&amp;gt; B and so on.&lt;/p&gt;&#xA;&lt;p&gt;The sequence was not related to types of media or drives. A hard disk could well be drive A, while the first Floppy could be E, being the 4th drive reported by BIOS. Similar there was mo virtual drive B. Only available drives got numbered.&lt;/p&gt;&#xA;&lt;p&gt;MS-DOS changed this by putting floppies first and adding a virtual floppy drive B for single floppy systems (yes, they were common, after all, 160 KiB is a lot of storage). This simplifies operation of software that needs two disks at once - not just for copying, but every other usage - like having a system disk with OS and application, for example a word processor, and another for data (read: text files). With only one drive a software had to handle disk change on it's own, not a nice task - especially if other components may be needed from the system disk. Handling two disks independently in the same drive did away with all issues (*1), software could assume there are always two drives to work with (*2).&lt;/p&gt;&#xA;&lt;p&gt;So in an MS-DOS system C was always the first available drive number (thus letter) after the mandatory (at the time) floppy(s). When &lt;em&gt;(later)&lt;/em&gt; hard disks became available they were usually mounted as C. Again &lt;em&gt;(much)&lt;/em&gt; later when hard disk became a commodity, software started to assume C as being a hard disk, the same way they did for A&amp;amp;B as floppies. Which of course did not work out as easy with systems offering more floppy drives than two. So, again later (with DOS 5) C was finally reserved for the primary boot disk/partition (if not being a floppy).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;which I took from here and it's basically the same thing that is on Wikipedia and in the aforementioned SE answer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Finding it in many variations should give a hint that it really is the way it was made.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I may be in for disappointment, but I wonder if there is more to the story.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, there is no meaning with drive letters. It's simply meant to number the drives, so they can be distinguished.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;To draw a parallel, in many scientific fields (, , ) is acknowledged as a tuple of unknowns. The criteria behind this choice is likely that the first letters of the alphabet were used for known quantities, and the last for unknown quantities (as per this answer on MathOverflow).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, that's exactly as here. The sequence of known drives starts with A and goes up the alphabet order.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did C: have a meaning which was non-depending of the existence of two floppy drives?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, drive letters have no meaning at all. They are simply variable names chosen in sequence of detection.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Beyond One's Own Nose&lt;/h2&gt;&#xA;&lt;p&gt;Putting aside if meaningful drive names are a good thing or not, other systems did use more meaningful names, like Amiga-DOS used &lt;code&gt;DFn&lt;/code&gt; for floppies (with n sequential numbered starting with &lt;em&gt;Zero&lt;/em&gt;) and &lt;code&gt;DHn&lt;/code&gt; for hard drives. The problem about locating the system drive was solved by adding logical names like &lt;code&gt;SYS&lt;/code&gt; for the system drive/directory.&lt;/p&gt;&#xA;&lt;p&gt;Then again, why use drive designators at all?&lt;/p&gt;&#xA;&lt;p&gt;Like Unixoides, simply just work with their directory tree, having files (directories) from some various drives - and points thereof - simply mounted anywhere. Some not adding any way to access the drive as such, others offering symbolic entries to do so. Being somewhere in the middle between desktop and mainframe this dual handling makes quite sense.&lt;/p&gt;&#xA;&lt;p&gt;And then there are systems, like all TSOS offspring, that do not care much about directories or alike but manage everything in a single catalogue database with volume names as attributes to the file entry. These being mainframe systems, the user does not have any idea about drives. For most parts not even drive types, or if it's on a disk or tape (*3)  If at all, a volume were the file is located is known. In addition, drives do not have fixed hardware names - by exchanging a simple plug they can be renamed on the fly ...&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - That is except the dreaded message to swap floppies.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Apple did go a step further by using volume names, so the single Mac drive could handle multiple disks concurrently, notifying the user to swap whatever was needed next . Which is as well less tricky in a windowed system allowing modal message boxes than on a line based interface.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Random reads on non cached tape files just happened to be somewhat ... err .. . slow&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="3748" LastEditDate="2020-12-05T11:47:02.650" LastActivityDate="2020-12-05T11:47:02.650" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="17177" PostTypeId="2" ParentId="17175" CreationDate="2020-12-04T16:54:28.747" Score="18" Body="&lt;p&gt;The letters &lt;code&gt;A:&lt;/code&gt; and &lt;code&gt;B:&lt;/code&gt; were reserved by MS-DOS, which was essentially a clone of CP/M and followed its usual practice, for floppy disk drives.  If only one such drive was fitted, both letters were mapped to the same physical drive via prompts for the user to swap disks.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;C:&lt;/code&gt; was simply the next available letter.  Early filesystems had severe limits on how large a partition they could handle, so it was common for drives to have multiple partitions to collectively make use of an expensive hard disk's capacity, and these gained letters in sequence from there.  The FAT16 filesystem in MS-DOS relieved these limits for some years, until hard disk capacity again caught up.&lt;/p&gt;&#xA;&lt;p&gt;Drive &lt;code&gt;M:&lt;/code&gt; was commonly used to refer to a temporary filesystem held in RAM.  This was far enough ahead in the sequence that it didn't usually interfere with the above scheme.&lt;/p&gt;&#xA;&lt;p&gt;When CD-ROMs became available, the driver installation scripts often also just picked the next available letter.  This led to compatibility problems with some poorly-written game installers which assumed the user had a particular number of hard disk partitions, and hence a particular CD-ROM drive letter.&lt;/p&gt;&#xA;&lt;p&gt;Network drives, where the physical storage was attached to a different computer entirely, usually avoided this situation by assigning letters late in the alphabet, such as &lt;code&gt;T:&lt;/code&gt; or &lt;code&gt;X:&lt;/code&gt;.  Diskless workstations, however, could often be found running from a network drive mapped to &lt;code&gt;C:&lt;/code&gt;.  I used one such system while taking an office-computing class.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-12-04T19:38:20.320" LastActivityDate="2020-12-04T19:38:20.320" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17178" PostTypeId="1" CreationDate="2020-12-04T18:13:29.120" Score="6" ViewCount="528" Body="&lt;p&gt;As the title, really. I'm reading a SEQ file into memory, and need to know how big it is ahead of time. I know that I can get the size in blocks by parsing the directory, although it's ugly, but the disk system itself knows the size in bytes. How can I get it to tell me what it is?&lt;/p&gt;&#xA;" OwnerUserId="6846" LastActivityDate="2020-12-04T22:51:05.417" Title="How do I get the size of a file on disk on the Commodore 64?" Tags="&lt;commodore-64&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17179" PostTypeId="2" ParentId="17178" CreationDate="2020-12-04T18:27:08.037" Score="7" Body="&lt;p&gt;For a SEQ file, the directory holds the location of the first data block; each data block other than the last holds 254 bytes of data and the location of the next block, while the last block holds up to 254 bytes of data along with a count of how many are part of the file.  Although the drive can tell when all of the bytes of a file have been read, there's no way it can determine the number of bytes within a file without examining every sector thereof.  It's possible that code which uses the block-read (&lt;code&gt;B-R&lt;/code&gt;) command to read the first two bytes of each block while ignoring the remainder might be faster than code which reads all of the data, but trying to determine a file's length is apt to be a slow operation in any case.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-12-04T18:27:08.037" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17180" PostTypeId="2" ParentId="17178" CreationDate="2020-12-04T18:35:56.450" Score="2" Body="&lt;p&gt;Reading the directory (Filename &amp;quot;$&amp;quot;) like described on &lt;a href=&quot;https://www.commodore.ca/wp-content/uploads/2018/11/commodore_vic_1541_floppy_drive_users_manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 23 of the manual&lt;/a&gt; is the way to go. Every other attempt would be even more 'ugly' If not slower.&lt;/p&gt;&#xA;&lt;p&gt;Going thru the Directory is rather straight forward (the example can be streamlined) Entries are 32 bytes each with the file name in position 3..18 and total number of blocks in 28/29 (Low/High). Simply loop around reading them until the name matches and then pick the length in blocks.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Some Considerations:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;How much will be wasted by taking the number of blocks times 254?&lt;/p&gt;&#xA;&lt;p&gt;Lets be serious, for a real world application, knowing the size in bytes, prior to reading it anyway, seams rather useless. After all, any knowledge would be only useful to determinate if it can be loaded at all. Taking the number of block times 254 will always end up with 0..253 bytes above real length length, but -and that's important for memory considerations - &lt;em&gt;never below&lt;/em&gt;. 253 Bytes at 64 KiB, that is less than 0.4% Not sure if it's really worth to care about.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What will be the price to be payed when doing so?&lt;/p&gt;&#xA;&lt;p&gt;Using the simplified formula will end up refusing to load files that are exactly within 253 bytes of available space. So before investing much time in alternative routine, one should ask how many files will fall into this size range? Is there a worthwhile gain beside theoretical 100% fill?&lt;/p&gt;&#xA;&lt;p&gt;Adding an ability to 'fully' load may still end up with an unusable file - at least if extending isa legal operation :)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the price of byte exact size determination?&lt;/p&gt;&#xA;&lt;p&gt;Essentially doing so means reading all blocks to reach the last and then checking how many bytes are used there - which may or may not work as DOS does not really keep record about how far the last block is used at all.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Is There a Sensible Solution?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Well, the last paragraph already had it: Determination of the last block and it's filling level means reading the whole file, so why not&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Deny any file with a size clearly above maximum&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Read any below that threshold into memory&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Break with an error (and reset any marker made so far) if it's larger than the memory available&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Clear maximum is defined as the number of blocks that could store a file made up from the maximum memory available for that file or simply&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;(BytesAvailable/254)+1&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The best part, this is a constant able to be calculated at compile time, so the whole checking at run time comes down to a 16 bit compare.&lt;/p&gt;&#xA;&lt;p&gt;Performance wise this will perform&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;for loadable file like accessing the directory plus reading the file&lt;/li&gt;&#xA;&lt;li&gt;for clearly non loadable files abort right after reading the directory&lt;/li&gt;&#xA;&lt;li&gt;for the few files between max-size and (max-size mod 254 + 1) take as long as checking it's length by following the blockchain.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So instead of always spending the time to follow the chain, &lt;em&gt;AND&lt;/em&gt; then spending that time again to load, every load is reduced to ... well, load time. Only the (asumable) small number of cases of being &lt;em&gt;&amp;quot;just a little bigger than the memory but less than 254&amp;quot;&lt;/em&gt; will spend the whole time parsing the chain (which are exactly the cases were it's needed) before issueing a 'To big to load' error..&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-04T22:51:05.417" LastActivityDate="2020-12-04T22:51:05.417" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17181" PostTypeId="2" ParentId="17178" CreationDate="2020-12-04T19:10:31.737" Score="4" Body="&lt;p&gt;It is a little bit involved but doable.&lt;/p&gt;&#xA;&lt;p&gt;All but the last sector holds 254 bytes of data (2 being set aside for track/sector links to the next sector in the chain). The last sector has a 0 in the &lt;code&gt;track link&lt;/code&gt; field and a number indicating much of the sector is actually used in the &lt;code&gt;sector link&lt;/code&gt; field.&lt;/p&gt;&#xA;&lt;p&gt;If you need the &lt;em&gt;exact&lt;/em&gt; byte size of the file there is no way around crawling through the track/sector chain to get to the last sector. The first sector you get from the file's directory entry.&lt;/p&gt;&#xA;&lt;p&gt;However, if you just need the &lt;em&gt;&amp;quot;worst case&amp;quot;&lt;/em&gt; in number of sectors (fx to be able to bound a buffer), you can get the number of sectors used directly from the directory entry of the SEQ file, without following the chain. (Assuming the disk file has been closed properly, of course.)&lt;/p&gt;&#xA;&lt;p&gt;Either way, you will have to read in and process the disk's &lt;a href=&quot;https://wiki.retrograde.dk/doc:cbm:disk:image:d64&quot; rel=&quot;nofollow noreferrer&quot;&gt;directory structure&lt;/a&gt;. There is no DOS command or ROM routine to get the value directly; the disk system itself does &lt;em&gt;not&lt;/em&gt; know the size in bytes.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-12-04T22:32:44.387" LastActivityDate="2020-12-04T22:32:44.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17182" PostTypeId="2" ParentId="13964" CreationDate="2020-12-04T20:16:08.643" Score="2" Body="&lt;p&gt;Three factors come to mind:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Cost is a function of word size.&lt;/li&gt;&#xA;&lt;li&gt;Performance is a function of flexibility.&lt;/li&gt;&#xA;&lt;li&gt;Moore's Law&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The second point encourages the selection of a 'good' word size.&#xA;Good, here, means an even multiple of 2, 3 or 5 or a combination thereof.&#xA;The 'good' choices are 8, 10, 12, 16, 20, 24, 30, 32, 36, 40, 48, 60, 64, 72, 80, 96, 120, 128 and 256.&lt;/p&gt;&#xA;&lt;p&gt;Having selected 48 as a cost effective word size, one gets a 36 bit mantissa.&lt;/p&gt;&#xA;&lt;p&gt;Moore's law eventually makes a larger machine feasible.&lt;/p&gt;&#xA;&lt;p&gt;The next 'good' size after 48 is 60, which results in a mantissa of 48 bits.&#xA;Unless you are tied to even multiples of 8 bit characters, which CDC was not.&lt;/p&gt;&#xA;" OwnerUserId="20057" LastEditorUserId="129" LastEditDate="2020-12-04T20:25:07.050" LastActivityDate="2020-12-04T20:25:07.050" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17183" PostTypeId="1" CreationDate="2020-12-04T21:30:21.857" Score="4" ViewCount="171" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/G4CuY.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G4CuY.jpg&quot; alt=&quot;Old 8-bit computer with two floppy drives opened&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I used to have an out-phased Danish 8-bit computer as a hobby machine back in the 90's.  It had two external 8&amp;quot; floppy drives, and I have kept the old floppies.  Now I'd like to salvage my old projects, and therefore have gotten access to a similar machine at the local computer museum.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately the B: drive is not working well so I investigated if another A: could be made into a B:.   Findings:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The unit is basically a YD-174 8&amp;quot; drive with a power supply - &lt;a href=&quot;https://datamuseum.dk/bits/30001084&quot; rel=&quot;noreferrer&quot;&gt;https://datamuseum.dk/bits/30001084&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The cable is a straight mapping to the drive connector, and optionally on to the next drive.  To my untrained eye it is a straight pin mapping on the connector on the machine to the drive connector.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The selection of the drive is done by shortening one of four pairs of pins in the upper right corner of the print at the bottom of the drive (they are upside down on the photo), and only that (I might be wrong on this).  The A drives had pair 1 shortened, the B drive had pair 2 shortened.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Unfortunately the spare A: drive did not work well when converted to B:.  I forgot to see if it worked as it should before tinkering, so I do not know if I missed something or the drive was broken all along.&lt;/p&gt;&#xA;&lt;p&gt;Now I am considering options.   My guess is that any drive that works the same as this drive (same connector) could be a replacement.  Does such drives still exist?  Any other thoughts?&lt;/p&gt;&#xA;" OwnerUserId="447" LastEditorUserId="447" LastEditDate="2020-12-04T22:41:01.843" LastActivityDate="2020-12-05T05:55:31.783" Title="Replacing an 8&quot; disk drive with a newer/smaller drive on an old 8-bit computer?" Tags="&lt;z80&gt;&lt;cp-m&gt;&lt;8-inch-floppy&gt;&lt;yd-174&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17184" PostTypeId="2" ParentId="17164" CreationDate="2020-12-04T22:05:33.427" Score="5" Body="&lt;p&gt;During the late 1990s, I was the Mac port maintainer for a multi-platform open source project.  I edited and compiled the code using CodeWarrior, then used a &lt;strong&gt;standalone Classic application called &lt;a href=&quot;http://www.maccvs.org/user.html&quot; rel=&quot;noreferrer&quot;&gt;MacCVS&lt;/a&gt;&lt;/strong&gt; to upload to our project's CVS server (on someone's work Unix system).  Its icon was an orange fish.  According to the link, the program works with any Mac System 7.5.3 or later with internet access.  The program was later ported to MacOS X.  It worked great!  Sadly, it is not on the &lt;a href=&quot;http://mirror.macintosharchive.org/archive.info-mac.org/&quot; rel=&quot;noreferrer&quot;&gt;Info-Mac&lt;/a&gt; or &lt;a href=&quot;http://www.umich.edu/%7Earchive/mac/&quot; rel=&quot;noreferrer&quot;&gt;UMich&lt;/a&gt; archives.&lt;/p&gt;&#xA;&lt;p&gt;Looking back at my old machine, apparently CodeWarrior also had plugins that could be used directly in the IDE for several different version control systems: Microsoft SourceSafe, Clearcase, and CVS (the CWCVS plugin).  I never used the first two, and MacCVS was superior to the CWCVS plugin.&lt;/p&gt;&#xA;&lt;p&gt;CVS was directly available to the maintainers of Unix, VMS, and Windows ports, so they had no problem using native tools.  The approaches for the Amiga, Atari, and DOS ports varied.  Some people copied files to and then used CVS from their own work computer; some did the same with an account on our CVS server; some merely e-mailed the changes to the development team.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-12-04T22:05:33.427" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17185" PostTypeId="2" ParentId="3237" CreationDate="2020-12-04T22:12:31.433" Score="3" Body="&lt;p&gt;Yes, at least for IBM P70 PS/2 8573 it is possible; mine runs well with a standard Mitsumi 90 mm 1440 KiB floppy drive.&lt;/p&gt;&#xA;&lt;p&gt;I don’t know IBM devices very well, but it appears that PS/2 models run the floppy drive with only one cable that runs +5 V and +12 V through the wire, +5 V from pin 3 and +12 V from pin 6.&lt;/p&gt;&#xA;&lt;p&gt;To install a standard and modern 1440 KiB floppy drive, without any modification to your computer (and keep original wiring), you should work only on your floppy drive, as follows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;connect pin 4 to one ground pin;&lt;/li&gt;&#xA;&lt;li&gt;completely remove pin 6 of your floppy drive (+12 V), as all modern drives run on 5 V only;&lt;/li&gt;&#xA;&lt;li&gt;if your floppy drive connector has no wire for pin 3, add one and connect it to the +5 V of your floppy drive power connector;&lt;/li&gt;&#xA;&lt;li&gt;take 2 ground pins to wire to the ground of the floppy drive power connector.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Finding the perfect eject button is another story, but it is possible.&lt;/p&gt;&#xA;&lt;p&gt;On YouTube, retrospector78 has &lt;a href=&quot;https://www.youtube.com/watch?v=vRU7U1i2hCU&quot; rel=&quot;nofollow noreferrer&quot;&gt;released a video covering this topic among others&lt;/a&gt;; the above follows their instructions.&lt;/p&gt;&#xA;" OwnerUserId="20058" LastEditorUserId="15334" LastEditDate="2020-12-07T19:17:55.297" LastActivityDate="2020-12-07T19:17:55.297" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17186" PostTypeId="2" ParentId="17163" CreationDate="2020-12-04T23:19:23.407" Score="0" Body="&lt;p&gt;I had an original Atari 800 with the twin sockets for the cartridges and 48K total of memory. (10K rom on a plug in to the chassis and a separate memory card (individual chips hand soldered) to boost the intrinsic 32K to 48K (BYTES, that was all).  That was in the UK in 1978. It, along with the 9 pin dot matrix printer and a 88K (Bytes again) floppy cost me about £2000 UK (about $2.40 to the pound then).  2 Years later I bought a 20MB hard drive that cost me about £1000 - 8 years later a friend of mine 'borrowed' the kit and for the next 5 years it ran the Welsh National Opera's lighting rig.&lt;/p&gt;&#xA;&lt;p&gt;And I never even got a ticket, nor a tax deductible.  But I did get to see a shed load of rehearsals for free.  And if I were a drinker, then I would have been unable to count the beers I got bought.  Particularly for designing and paying for the RS232 link to their kit, and writing the software to do the linkage.&lt;/p&gt;&#xA;&lt;p&gt;They were different times.  I ended up running my NHS's trust (independent provider of care) and Bull (a French firm) wanted to charge us £15000 for a 64K upgrade to their machine we were using (Unix but not Unix so you couldn't hack it easily).&lt;/p&gt;&#xA;&lt;p&gt;And when challenged they told me, and I quote &amp;quot;some forms of 64K memory are much bigger in size than others!&amp;quot;  I can only assume as I did then, that they meant that they weren't very good at miniaturisation.&lt;/p&gt;&#xA;" OwnerUserId="20060" LastActivityDate="2020-12-04T23:19:23.407" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17187" PostTypeId="2" ParentId="17183" CreationDate="2020-12-04T23:59:00.847" Score="3" Body="&lt;p&gt;It's probably doable!&lt;/p&gt;&#xA;&lt;p&gt;The floppy interfaces and signals were all quite similar [at least until the cost-optimized all-in-one USB peripheral drives] although some of the pin usages did evolve a bit over time. The 8&amp;quot; drive would likely use the &amp;quot;Shugart&amp;quot; style interface rather than the later &amp;quot;IBM/PC&amp;quot; one in terms of the two tables at &lt;a href=&quot;https://old.pinouts.ru/HD/InternalDisk_pinout.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://old.pinouts.ru/HD/InternalDisk_pinout.shtml&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You may find the thread at &lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?16765-Any-way-to-image-8-quot-CP-M-disks-or-convert-to-5-25-quot&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.vcfed.org/forum/showthread.php?16765-Any-way-to-image-8-quot-CP-M-disks-or-convert-to-5-25-quot&lt;/a&gt; helpful although it is focused in the reverse goal of connecting an old 8&amp;quot; drive to a newer PC rather than vice versa (and some of its links have rotted and will need to be run through the Wayback Machine, e.g. &lt;a href=&quot;https://web.archive.org/web/20190622115010/https://majzel.blogspot.com/2009/04/converting-from-8-to-35-inch-floppy.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://web.archive.org/web/20190622115010/https://majzel.blogspot.com/2009/04/converting-from-8-to-35-inch-floppy.html&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;IIRC the particular RPM and number of tracks make the 3.5&amp;quot; inch drives actually more similar to the 8&amp;quot; formats even though the 5.25&amp;quot; &lt;em&gt;feel&lt;/em&gt; more similar at first glance.&lt;/p&gt;&#xA;&lt;p&gt;Depending on your preference, it may either eliminate (or introduce) complication to use a floppy &amp;quot;emulator&amp;quot; instead, e.g. installing a firmware like &lt;a href=&quot;https://github.com/keirf/FlashFloppy&quot; rel=&quot;nofollow noreferrer&quot;&gt;FlashFloppy&lt;/a&gt; on a Gotek-style device. There's a forum thread at &lt;a href=&quot;https://torlus.com/floppy/forum/viewtopic.php?t=2708&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://torlus.com/floppy/forum/viewtopic.php?t=2708&lt;/a&gt; where you might find some additional tips in using a Gotek as an 8&amp;quot; drive replacement.&lt;/p&gt;&#xA;" OwnerUserId="13904" LastEditorUserId="13904" LastEditDate="2020-12-05T00:05:27.673" LastActivityDate="2020-12-05T00:05:27.673" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17188" PostTypeId="1" AcceptedAnswerId="17189" CreationDate="2020-12-05T01:40:35.653" Score="2" ViewCount="202" Body="&lt;p&gt;I was watching music videos on YouTube and noticed these machines in the &lt;a href=&quot;https://www.youtube.com/watch?v=Ofz0iJQd-xU&quot; rel=&quot;nofollow noreferrer&quot;&gt;video for the song &lt;em&gt;Who's Behind the Door&lt;/em&gt;&lt;/a&gt; by the band &lt;a href=&quot;https://en.wikipedia.org/wiki/Zebra_(American_band)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zebra&lt;/a&gt;.  The song was released on their album in 1983, but I don't know when the video was made.  They're an American band from New Orleans.&lt;/p&gt;&#xA;&lt;p&gt;There are two kinds of monitor present, or possibly two completely different terminals, but I suspect they're from the same manufacturer.  They keyboard is interesting because it has a separate strip of keys between the main keys and the keypad.  A nameplate is visible in the keyboard closeup, but illegible to me.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nsSXm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nsSXm.png&quot; alt=&quot;One with a box&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3o1AQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3o1AQ.png&quot; alt=&quot;Different monitor, no box&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HnSm5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HnSm5.png&quot; alt=&quot;Close-up of keyboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4325" LastEditorUserId="6659" LastEditDate="2020-12-05T03:05:44.617" LastActivityDate="2020-12-05T03:05:44.617" Title="Identify Terminals Used in this Music Video" Tags="&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17189" PostTypeId="2" ParentId="17188" CreationDate="2020-12-05T02:48:40.023" Score="6" Body="&lt;p&gt;Well, the first and third picture clearly shows an &lt;a href=&quot;https://en.wikipedia.org/wiki/Epson_QX-10&quot; rel=&quot;noreferrer&quot;&gt;Epson QX-10&lt;/a&gt; of 1983. It's not a terminal, but a Z80 based CP/M system.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sjdWG.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sjdWG.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Picture taken from Wikipedia)&lt;/p&gt;&#xA;&lt;p&gt;No idea so far about the second picture, wich in fact may be a terminal. Or something complete different, like a video telephone. I think I remember a similar looking one from back then. For the video they changed the setup at least for a later scene (2:38) were this other systems screen is put atop the QX-10. Maybe because it could display a TV signal right away - for that symbol thingy.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-05T03:03:15.943" LastActivityDate="2020-12-05T03:03:15.943" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17190" PostTypeId="2" ParentId="17175" CreationDate="2020-12-05T03:03:03.673" Score="8" Body="&lt;p&gt;The bit that the previous answers are not emphasizing is that hard drives were unheard of. Computers came with floppy drives (if you were lucky...), more likely a cassette tape.   So the numbering was logical, you booted from drive A: . If you were lucky to have a drive B: for data, then that was used, otherwise you took the program disk out of drive A: and put in your data disk.&lt;/p&gt;&#xA;&lt;p&gt;There were no hard disks.  Well there were - but these were luxury devices.&lt;/p&gt;&#xA;&lt;p&gt;The first computer I programmed was my fathers TRS-80 that he ran his news-agency business from.  All his customer data and accounting was stored on floppy disks, as well as all the software, and operating system.&lt;/p&gt;&#xA;&lt;p&gt;You inserted your DOS Disk - there were a choice of flavors, including MS DOS, DR-DOS, PC-DOS etc.  Then you inserted your expensive custom software program, then you inserted disks for storage when prompted.......&lt;/p&gt;&#xA;&lt;p&gt;And now I feel old....&lt;/p&gt;&#xA;" OwnerUserId="20066" LastEditorUserId="20066" LastEditDate="2020-12-05T03:14:09.890" LastActivityDate="2020-12-05T03:14:09.890" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17191" PostTypeId="1" CreationDate="2020-12-05T04:04:51.907" Score="2" ViewCount="243" Body="&lt;p&gt;Based on &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17163/how-much-did-the-first-hard-drives-for-pcs-cost&quot;&gt;this topic&lt;/a&gt; (and continuing &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11071/what-was-the-macintoshs-bom-cost&quot;&gt;this topic&lt;/a&gt;), my question once again surfaced:&lt;/p&gt;&#xA;&lt;p&gt;And what was the layout of the prime cost of early 8 and 5.25 inch hard drives? From Seagate and competing manufacturers? BOM Cost and retail margins (including relationships with dealer networks), R&amp;amp;D costs and financial burden ...&lt;/p&gt;&#xA;&lt;p&gt;HDD prices in the early 1980s were high - even when compared to floppy drives. And the effect of serial production / production scale for such &amp;quot;mechanical&amp;quot; devices is not so noticeable in comparison with chips.&lt;/p&gt;&#xA;&lt;p&gt;It would be especially interesting to read academic or at least amateur studies on the topic - but my google-fu does not yet give adequate results.&lt;/p&gt;&#xA;" OwnerUserId="11231" LastEditorUserId="15334" LastEditDate="2020-12-07T18:42:12.810" LastActivityDate="2020-12-07T18:42:12.810" Title="Bill-of-material cost of early hard drives" Tags="&lt;history&gt;&lt;hard-disk&gt;&lt;cost&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17192" PostTypeId="2" ParentId="5042" CreationDate="2020-12-05T05:38:28.433" Score="0" Body="&lt;p&gt;I don't know what's going on in VICE, but the C64 game definitely uses multicolor character mode for the graphics. (And standard character mode for the text; as others have said, you can have both at once as long as they're on different scanlines). You can tell it's a character mode because the graphics use repeating 8x8 tiles, and because the game moves at more than like 3 FPS (updating the entire screen in bitmap mode was very slow, and basically never used in games outside of 3D sims and title screens); it's multicolor because the pixels are double-wide.&lt;/p&gt;&#xA;&lt;p&gt;Incidentally, the DOS version does not use the same character map as the C64 version; all the custom characters have been redrawn. The C64's double-wide multicolor-mode pixels are very distinctive; compare screens like &lt;a href=&quot;https://cdn.vox-cdn.com/uploads/chorus_image/image/35894708/maniac_mansion.0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one on the 64&lt;/a&gt; with the same room in &lt;a href=&quot;https://www.pixelatedarcade.com/screenshots/695/1349/screenshot_329-maniac-mansion-green-tentacle-is-rather-depressed.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;CGA&lt;/a&gt; or &lt;a href=&quot;https://i.ytimg.com/vi/1HnqtsILmE8/maxresdefault.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;EGA&lt;/a&gt; modes in the DOS version.&lt;/p&gt;&#xA;" OwnerUserId="20067" LastActivityDate="2020-12-05T05:38:28.433" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17193" PostTypeId="2" ParentId="17183" CreationDate="2020-12-05T05:55:31.783" Score="1" Body="&lt;p&gt;Your &lt;a href=&quot;https://datamuseum.dk/bits/30001084&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt; has a description of the pinout of the cable on page 32:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Interface J1&#xA;(Rest is &amp;quot;Return&amp;quot;)&#xA;&#xA;2 Alternate I/O&#xA;4 Alternate I/O&#xA;6 Alternate I/O&#xA;8 Alternate I/O&#xA;10 Alternate I/O&#xA;12 Alternate I/O&#xA;14 Side Select&#xA;16 Alternate I/O&#xA;18 Alternate I/O&#xA;20 Index&#xA;22 Ready'&#xA;24 Low current&#xA;26 Drive Select 1&#xA;28 Drive Select 2&#xA;30 Drive Select 3&#xA;32 Drive Select 4&#xA;34 Direction&#xA;36 Step&#xA;38 Write Data&#xA;40 Write Gate&#xA;42 Tack 00&#xA;44 Write Protect&#xA;46 Read Data&#xA;48 Reserved&#xA;50 Reserved&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Note that this confirms your theory about drive selection.&lt;/p&gt;&#xA;&lt;p&gt;It looks sufficiently close to other floppies that you could try using them. &lt;a href=&quot;https://old.pinouts.ru/HD/InternalDisk_pinout.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is the standard Shugart pinout used in many non-PC 8&amp;quot; and 5.25&amp;quot; floppy drives and, slightly modified, for PC 5.25&amp;quot; and 3.5&amp;quot; floppy drives. And PC floppy drives should still be easy to find somehow.&lt;/p&gt;&#xA;&lt;p&gt;This assumes that the &amp;quot;Alternate I/O&amp;quot; pins are not used for anything (please verify by looking at the board), and also that the &amp;quot;Low current&amp;quot; pin is either not used or can somehow be emulated.&lt;/p&gt;&#xA;&lt;p&gt;Also, it won't be as easy as just plugging in another drive, you'll probably need to spend a bit of time (with a scope etc.) and figure out more details about the signals (polarity, voltage level, etc.). With access to a working drive that shouldn't be hard. Somebody at the computer museum should have a scope somewhere.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-12-05T05:55:31.783" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17196" PostTypeId="1" CreationDate="2020-12-05T19:48:06.983" Score="25" ViewCount="10436" Body="&lt;p&gt;There are many documents (e.g. &lt;a href=&quot;https://old.pinouts.ru/HD/InternalDisk_pinout.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;) describing the twist on two-drive floppy disk cable on IBM PC compatibles. While this is not the most proud example of clean hardware design, how much of this was originally planned in advance, or was it just improvised on the go?&lt;/p&gt;&#xA;&lt;p&gt;Having the desired pins aligned on the pin out nicely enough to make this happen suggests, that this was intentional at least to some degree.&lt;/p&gt;&#xA;" OwnerUserId="4378" LastEditorUserId="6794" LastEditDate="2021-01-06T21:31:41.210" LastActivityDate="2021-01-06T21:31:41.210" Title="Twist in floppy disk cable - hack or intended design?" Tags="&lt;ibm-pc&gt;&lt;floppy-disk&gt;&lt;design-choices&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17197" PostTypeId="2" ParentId="17196" CreationDate="2020-12-05T20:04:19.410" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Having the desired pins aligned on the pin out nicely enough to make this happen suggests, that this was intentional at least to some degree.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Since the pinout is an IBM one, made especially for the IBM PC (*1), and this twisted cable was used from the very first PC model, it's pretty clear that it was done on purpose.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Interlude:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;hack or intended design?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While 'hack' is a rather fuzzy term, used for a variety of assignments - including great ideas one would not have thought of - it is exclusive tied to modifying something after market to enable a new usage, not planned by it's original manufacturer.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Keeping that in mind it's clear that the twisted cable is part of the PC design, as it is based on the floppy connector pinout which the PC engineers did device for theit machine. The Connector used is &lt;em&gt;not&lt;/em&gt; a standard one used before, but on purpose made to enable this 'twist'. Standard (Shugart) drives could not be used with this connector. And a standard bus connector does not allow this 'trick' as it holds the signals in different order.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The original Shugart bus had only one motor signal.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-06T13:52:53.700" LastActivityDate="2020-12-06T13:52:53.700" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17198" PostTypeId="2" ParentId="17196" CreationDate="2020-12-05T20:13:18.960" Score="8" Body="&lt;p&gt;Definitely a hack. A systems with floppy disk drives had separate selection wires in the connection cable, where one of them was to choose between on of 2 or 4 drives connected in parallel. There was a jumper on the drive to activate one of these wires resulting in an address.&lt;/p&gt;&#xA;&lt;p&gt;Setting up this jumper was somewhat error prone and also extra work. The trend was to make more and more components of the PC self configuring. With the twist all drives could be jumpered on select 1, and a different wire would connect to that.&lt;/p&gt;&#xA;&lt;p&gt;Other examples of self configuration are the PCI bus for addresses and interrupts, and USB for peripherals.&lt;/p&gt;&#xA;" OwnerUserId="20075" LastEditorUserId="10479" LastEditDate="2020-12-05T21:38:46.810" LastActivityDate="2020-12-05T21:38:46.810" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17199" PostTypeId="2" ParentId="17191" CreationDate="2020-12-05T20:31:12.560" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;what was the layout of the prime cost of early 8 and 5.25 inch hard&#xA;drives? From Seagate and competing manufacturers? BOM Cost and retail&#xA;margins (including relationships with dealer networks), R&amp;amp;D costs and&#xA;financial burden ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While it may be interesting to those studying manufacturing economics in the 1980's, I don't think think that breaking down costs in such fine detail has much relevance to retro-computing. With the technology advancing rapidly the ratios of R&amp;amp;D, material costs and labor etc. were in constant flux.&lt;/p&gt;&#xA;&lt;p&gt;However I do know of one case where calculating it should be easy - &lt;a href=&quot;https://en.wikipedia.org/wiki/MiniScribe&quot; rel=&quot;noreferrer&quot;&gt;MiniScribe&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In January 1987... the cost to produce those drives that did sell was&#xA;higher than initially thought, which, if properly booked against&#xA;sales, would mean their operating margins would be unimpressive.&#xA;Instead of reporting this, a number of the managers decided to cover&#xA;it up with various means...&lt;/p&gt;&#xA;&lt;p&gt;This led to the company's most infamous cover-up; the managers rented&#xA;a second warehouse in Colorado, where they personally packed 26,000&#xA;&lt;strong&gt;bricks&lt;/strong&gt; into hard drive boxes and shipped them to Singapore in order to shore up the inventory count. After the count was complete,&#xA;they recalled those serial numbers as defective units, but instead of&#xA;writing them off, they checked them into inventory, along with other&#xA;failed drives that had been returned&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-12-05T20:31:12.560" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17200" PostTypeId="1" CreationDate="2020-12-06T00:50:47.207" Score="40" ViewCount="7526" Body="&lt;p&gt;I'm wondering if any of the ancient 1980's style text to speech algorithms were saved from oblivion and are still available. It might be nice to hear that vintage sound like what appeared in War Games.&lt;/p&gt;&#xA;" OwnerUserId="20076" LastActivityDate="2020-12-29T15:42:14.127" Title="Is there any text to speech program that will run on an 8- or 16-bit CPU?" Tags="&lt;audio&gt;&lt;text&gt;" AnswerCount="17" CommentCount="13" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17201" PostTypeId="2" ParentId="17200" CreationDate="2020-12-06T01:10:49.087" Score="23" Body="&lt;p&gt;First, there is a major caveat.  Most of the iconic early voice synthesizers were not purely software systems.  For example, the classic &lt;a href=&quot;https://en.wikipedia.org/wiki/DECtalk&quot; rel=&quot;noreferrer&quot;&gt;DECTalk&lt;/a&gt; system, famously the voice of the late Stephen Hawking, was a discrete unit that connected by serial RS-232.  It is effectively a closed box that is sent ASCII text and generates line-level audio.  Internally, I vaguely recall reading that it's a mix of a general-purpose processor with dedicated signal processors and audio synthesis hardware.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_LPC_Speech_Chips&quot; rel=&quot;noreferrer&quot;&gt;Ti LPC speech synthesis chips&lt;/a&gt;, as used in the Speak and Spell products, were similar.  The chips can synthesize basic phonemes and words, and a microcontroller or microprocessor has to do the text analysis and drive the synthesis chip.&lt;/p&gt;&#xA;&lt;p&gt;The fact is that the classic 8/16 bit processors just don't have enough oomph to pull off speech synthesis in software well, at least in real time.  Still, there were a number of respectable attempts.  &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Software_Automatic_Mouth&quot; rel=&quot;noreferrer&quot;&gt;SAM&lt;/a&gt;&lt;/strong&gt; (Software Automatic Mouth) was one of the first, and one of the more popular.  It runs on the Commodore 64 and other machines.  A clever hacker &lt;a href=&quot;https://discordier.github.io/sam/&quot; rel=&quot;noreferrer&quot;&gt;recently ported the algorithm to Javascript, so you can hear it in your browser&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-12-06T01:10:49.087" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17202" PostTypeId="2" ParentId="17200" CreationDate="2020-12-06T02:06:52.037" Score="17" Body="&lt;p&gt;Is the 68000 a 16-bit CPU? :) To some it is, and therefore &lt;em&gt;Say&lt;/em&gt;, from 1985, for the Commodore Amiga counts. It can be found on the Workbench disk. For more reading, look up the narrator.device interface on the AmigaOS wiki: &lt;a href=&quot;https://wiki.amigaos.net/wiki/Narrator_Device&quot; rel=&quot;noreferrer&quot;&gt;https://wiki.amigaos.net/wiki/Narrator_Device&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And here's Steamed Hams recreated using &lt;em&gt;Say&lt;/em&gt;: &lt;a href=&quot;https://www.youtube.com/watch?v=Rx6mJ4XY0oQ&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=Rx6mJ4XY0oQ&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2020-12-06T02:15:32.207" LastActivityDate="2020-12-06T02:15:32.207" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17203" PostTypeId="2" ParentId="16382" CreationDate="2020-12-06T03:31:07.850" Score="3" Body="&lt;p&gt;FLTK for DOS - Apps - XFDOS distro:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/projects/fltk-dos/files/Applications/Binary%20versions%20of%20FLTK%20applications/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sourceforge.net/projects/fltk-dos/files/Applications/Binary%20versions%20of%20FLTK%20applications/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here you will find mupdf.zip which has been working very well for me over the last hour since I downloaded it. Acrodos is useless except for viewing the pdfs it came with.&lt;/p&gt;&#xA;&lt;p&gt;You will need cwsdpmi.exe in the same directory as mupdf.exe / very surprised at how well it's handling modern pdfs so far - especially for a program compiled for DOS in 2012.&lt;/p&gt;&#xA;" OwnerUserId="20078" LastActivityDate="2020-12-06T03:31:07.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17204" PostTypeId="2" ParentId="17200" CreationDate="2020-12-06T05:33:02.270" Score="20" Body="&lt;p&gt;There existed a Russian text-to-speech program written for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Electronika_BK#Electronika_BK-0010.01&quot; rel=&quot;noreferrer&quot;&gt;Elektronika BK-0010&lt;/a&gt; in the early 1980s, whose length was 023500 bytes == 10048, mentioned in &lt;a href=&quot;https://forum.maxiol.com/index.php?s=a4c4a6ef23a647b48300d8c4f2eaf418&amp;amp;act=Attach&amp;amp;type=post&amp;amp;id=4562&quot; rel=&quot;noreferrer&quot;&gt;a list of application programs for the BK-0010&lt;/a&gt; under the name of ГОВОРУН (&amp;quot;Chatterer&amp;quot;, after a talking bird in a childrens' book/cartoon &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Mystery_of_the_Third_Planet&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The Mystery of the Third Planet&lt;/em&gt;&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Its sound quality was barely recognizable for an untrained ear, partially because the computer had only a 1-bit manipulated buzzer, but reportedly it had been written by request of the All-Union Society of the Blind, and it took the members of the target audience about 10-15 minutes to get accustomed to it and to start using it productively.&lt;/p&gt;&#xA;&lt;p&gt;The trick was to record the phonemes using as narrow a frequency band as necessary for marginal recognition, and to encode each phoneme using as low a frequency as possible for that specific phoneme. This process has made some phonemes, like S and F, sound pretty much the same, allowing to save more memory by folding them.&lt;/p&gt;&#xA;&lt;p&gt;Needless to say, there was the phonetic alphabet spelling mode, switchable by a keypress, and &amp;quot;repeat last word&amp;quot; and/or &amp;quot;repeat last sentence&amp;quot; keys as well.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2020-12-06T05:43:05.247" LastActivityDate="2020-12-06T05:43:05.247" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17205" PostTypeId="1" AcceptedAnswerId="17210" CreationDate="2020-12-06T05:45:19.690" Score="4" ViewCount="1011" Body="&lt;p&gt;A Quora question &lt;a href=&quot;https://www.quora.com/Why-did-Digital-Equipment-Corporation-DEC-fail&quot; rel=&quot;noreferrer&quot;&gt;Why did Digital Equipment Corporation (DEC) fail?&lt;/a&gt; has gathered some really interesting answers, including from former DEC people.&lt;/p&gt;&#xA;&lt;p&gt;There is one such answer I do not quite understand:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;We never had a clear partner model. This meant we were never able to get into important industries like Finance in the way IBM did. Of course this all came to a head when DEC and Compaq merged, as Compaq had no direct sales.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Did IBM have a partner model for getting into industries like finance? If so, how did it work, who were their partners? This was something I wasn't previously aware of.&lt;/p&gt;&#xA;&lt;p&gt;Or does he mean something more like: DEC didn't have as strong a direct sales force as IBM, but the best way to remedy this would have been to partner with companies who did?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-07T14:04:22.397" Title="IBM vs DEC and business partners" Tags="&lt;history&gt;&lt;ibm&gt;&lt;dec&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17206" PostTypeId="2" ParentId="17200" CreationDate="2020-12-06T07:23:52.740" Score="31" Body="&lt;p&gt;Superior Software's &amp;quot;Speech&amp;quot; was a pure software speech synthesizer that ran on the BBC Micro (which used a 2MHz 6502A processor, so had slightly more raw processing power than typical 8-bit machines); it  is described in detail &lt;a href=&quot;http://bbc.nvg.org/doc/Speech.html&quot; rel=&quot;noreferrer&quot;&gt;on this page&lt;/a&gt;, which states it was inspired by similar programs on C64 and Spectrum that achieve it using sound chips (so the Spectrum must have been the 128K version, as the original 16/48K versions had no sound chip) but this system just uses direct control of the built-in speaker to produce the sound.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-12-06T07:23:52.740" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17207" PostTypeId="2" ParentId="17163" CreationDate="2020-12-06T08:43:16.153" Score="0" Body="&lt;p&gt;Another anecdotal answer...&#xA;I bought a 5Mb drive from HP in 1980, which connected via the HPIB interface, for £7,000.&lt;/p&gt;&#xA;&lt;p&gt;This was bought to connect to an HP9836.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2020-12-06T08:43:16.153" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17208" PostTypeId="2" ParentId="17200" CreationDate="2020-12-06T09:05:37.657" Score="13" Body="&lt;p&gt;see:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://cs.speccy.cz/?scn=3&amp;amp;new_it=0&amp;amp;srt=41&quot; rel=&quot;nofollow noreferrer&quot;&gt;CZ+SK ZX SW archive&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In there are TTS engines for ZX Spectrum (1bit  digital sound, no DAC, no FPU, no mul/div instructions, ~3.5 MHz 8bit Z80 CPU):&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kecal 1.0&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;very simple asm, (portable to C/C++ see the link below), very low demands on CPU. It is not very good quality&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kecal 2.3&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;much improved quality&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;ZX Fone&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;its slightly worse than Kecal 2.3&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hlasovy program&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;this one is very good quality (much better than Kecal 2.3, you can recognize the words easily). Its just 801 Bytes of assembly code.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;also see:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/52935496/2521214&quot;&gt;SE/SO:Can arduino tell room temperature by voice call using sim900?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;[Edit1] C++ port of Hlasový program&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am happily announcing that I successfully disassembled and port the awesome ancient TTS engine from &lt;strong&gt;Voicesoft&lt;/strong&gt; into C++. For simplicity I added sound API header &lt;code&gt;void sound_out(bool on);&lt;/code&gt; that must be implemented in order to use this. It should simply add a sample to sound buffer (or synchronize with time and output to sound port). Here the ported code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;//---------------------------------------------------------------------------&#xA;//---  ZX Hlasovy program Voicesoft 1985  -----------------------------------    &#xA;//--- ported to C++ by Spektre ver: 1.000 -----------------------------------&#xA;//---------------------------------------------------------------------------&#xA;#ifndef _speech_h&#xA;#define _speech_h&#xA;//---------------------------------------------------------------------------&#xA;// API:&#xA;void sound_out(bool on);    // you need to code this function (should add a sample to sound output)&#xA;void say_text(char *txt);   // say null terminated text, &amp;quot;a'c'&amp;quot; -&amp;gt; &amp;quot;áč&amp;quot;&#xA;//---------------------------------------------------------------------------&#xA;// internals:&#xA;void say_char(char chr);    // internal function for single character (do not use it !!!)&#xA;void say_wait(WORD ws);     // internal wait (do not use it !!!)&#xA;//---------------------------------------------------------------------------&#xA;// vars:&#xA;bool _sound_on=false;       // global state of the reproductor/sound output&#xA;//---------------------------------------------------------------------------&#xA;// config: (recomputed for 44100 Hz samplerate)&#xA;const static BYTE t_speed=5;        // [samples] speech speed (pitch)&#xA;const static WORD t_pause=183;      // [samples] pause between chars&#xA;const static WORD t_space=2925;     // [samples] pause ` `&#xA;const static WORD t_comma=5851;     // [samples] pause `,`&#xA;//---------------------------------------------------------------------------&#xA;// tables:&#xA;const static BYTE tab_char0[52]=    //  0..25 normal alphabet A..Z&#xA;    {                               // 26..51 diacritic alphabet A..Z&#xA;    0x00,0x02,0x06,0x0a,0x0e,0x10,0x12,0x16,0x1a,0x1c,0x22,0x26,0x2a,0x2e,0x32,&#xA;    0x34,0x38,0x42,0x48,0x4a,0x4e,0x50,0x50,0x56,0x1a,0x5c,0x64,0x66,0x70,0x74,&#xA;    0x7a,0x7c,0xc2,0x84,0x86,0xc2,0xc2,0xc2,0x88,0x8c,0x92,0x94,0xc2,0x9e,0xa6,&#xA;    0xa8,0xae,0xb0,0xc2,0xc2,0x86,0xbc&#xA;    };&#xA;const static BYTE tab_char1[196]=&#xA;    {&#xA;    0x36,0x81,0x34,0x19,0x31,0xab,0x18,0x19,0x91,0xc3,0x34,0x19,0x31,0xe0,0x36,&#xA;    0x84,0x92,0xe3,0x35,0x19,0x51,0x9c,0x31,0x31,0x34,0x96,0x36,0x87,0x33,0x3a,&#xA;    0x32,0x3d,0x32,0xc0,0x18,0x19,0x51,0x9c,0x33,0x22,0x31,0xb1,0x31,0x31,0x36,&#xA;    0xa5,0x31,0x31,0x36,0xa8,0x36,0x8a,0x18,0x19,0x31,0xab,0x18,0x19,0x51,0x1c,&#xA;    0x34,0x31,0x32,0x34,0x32,0xb7,0x22,0x10,0x13,0x19,0x21,0xae,0x92,0xc3,0x18,&#xA;    0x19,0x31,0xe0,0x36,0x8d,0x34,0x31,0x32,0x34,0x32,0xb7,0x18,0x19,0x71,0x1c,&#xA;    0x92,0xc3,0x32,0x31,0x32,0x43,0x32,0x44,0x32,0xc5,0x3f,0x81,0x34,0x19,0x31,&#xA;    0x2b,0x33,0x3a,0x32,0x3d,0x32,0xc0,0x18,0x19,0x91,0xd3,0x33,0x19,0x71,0x6d,&#xA;    0x32,0x93,0x3e,0x84,0x92,0x63,0x33,0x3a,0x32,0x3d,0x32,0xc0,0x92,0xf3,0x3e,&#xA;    0x87,0x31,0x31,0x36,0x25,0x31,0x31,0x35,0x25,0x32,0x93,0x3e,0x8a,0x18,0x19,&#xA;    0x31,0x2b,0x33,0x3a,0x32,0x3d,0x32,0xc0,0x13,0x19,0x32,0x60,0x13,0x19,0x71,&#xA;    0xdd,0x92,0xd3,0x18,0x19,0x71,0x6d,0x32,0x93,0x3e,0x8d,0x34,0x31,0x32,0x34,&#xA;    0x32,0x37,0x33,0x3a,0x32,0x3d,0x32,0xc0,0x32,0x53,0x32,0x54,0x32,0xd5,0x1a,&#xA;    0x99&#xA;    };&#xA;const static BYTE tab_char2[262]=&#xA;    {&#xA;    0x1a,0x99,0xe1,0xc3,0xe1,0xc7,0x8f,0x0f,0xf8,0x03,0x0f,0x07,0xc1,0xe3,0xff,&#xA;    0x40,0x17,0xff,0x00,0x03,0xf8,0x7c,0xc1,0xf1,0xf8,0x03,0xfe,0x00,0x7f,0xfc,&#xA;    0x00,0x03,0xf8,0x0f,0x09,0xf1,0xfe,0x03,0xef,0x40,0x17,0xff,0x00,0x03,0xe1,&#xA;    0x5c,0x35,0xc5,0xaa,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x8e,0x38,0x73,&#xA;    0xcf,0xf8,0x78,0xc3,0xdf,0x1c,0xf1,0xc7,0xfe,0x03,0xc0,0xff,0x00,0x00,0xff,&#xA;    0xf8,0x00,0x7f,0xf8,0x03,0xff,0xf0,0x01,0xff,0xe0,0x03,0xaa,0xca,0x5a,0xd5,&#xA;    0x21,0x3d,0xfe,0x1f,0xf8,0x00,0x00,0x1f,0xff,0xfc,0x20,0x00,0x00,0x03,0xff,&#xA;    0xff,0x08,0x79,0x00,0x02,0xff,0xe1,0xc7,0x1f,0xe0,0x03,0xff,0xd0,0x01,0xff,&#xA;    0xf0,0x03,0x7f,0x01,0xfa,0x5f,0xc0,0x07,0xf8,0x0f,0xc0,0xff,0x00,0x42,0xaa,&#xA;    0xa5,0x55,0x5a,0xaa,0xaa,0x5a,0xa5,0x5a,0xaa,0x55,0x55,0xaa,0xaa,0xa5,0x55,&#xA;    0xaa,0x5a,0xaa,0xa5,0x55,0xaa,0xaa,0xa5,0x55,0xaa,0xaa,0x55,0xa5,0xa5,0xaa,&#xA;    0xa5,0xb7,0x66,0x6c,0xd8,0xf9,0xb3,0x6c,0xad,0x37,0x37,0x66,0xfc,0x9b,0x87,&#xA;    0xf6,0xc0,0xd3,0xb6,0x60,0xf7,0xf7,0x3e,0x4d,0xfb,0xfe,0x5d,0xb7,0xde,0x46,&#xA;    0xf6,0x96,0xb4,0x4f,0xaa,0xa9,0x55,0xaa,0xaa,0xa5,0x69,0x59,0x9a,0x6a,0x95,&#xA;    0x55,0x95,0x55,0x6a,0xa5,0x55,0xa9,0x4d,0x66,0x6a,0x92,0xec,0xa5,0x55,0xd2,&#xA;    0x96,0x55,0xa2,0xba,0xcd,0x00,0x66,0x99,0xcc,0x67,0x31,0x8e,0x66,0x39,0xa6,&#xA;    0x6b,0x19,0x66,0x59,0xc6,0x71,0x09,0x67,0x19,0xcb,0x01,0x71,0xcc,0x73,0x19,&#xA;    0x99,0xcc,0xc6,0x67,0x19,0x9a,0xc6,&#xA;    };&#xA;const static BYTE tab_char3[5]={ 0x00,0x2e,0x5a,0x5e,0xfe };&#xA;//---------------------------------------------------------------------------&#xA;void say_text(char *txt)&#xA;    {&#xA;    WORD hl;&#xA;    BYTE a,b,c;&#xA;    for (b=0xBB,hl=0;;hl++)     // process txt&#xA;        {&#xA;        a=b;                    // a,c char from last iteration&#xA;        c=b;&#xA;        if (!a) break;          // end of txt&#xA;        b=txt[hl];              // b actual char&#xA;        if ((b&amp;gt;='a')&amp;amp;&amp;amp;(b&amp;lt;='z')) b=b+'A'-'a'; // must be uppercase&#xA;        a=c;&#xA;        if ((a&amp;gt;='A')&amp;amp;&amp;amp;(a&amp;lt;='Z'))&#xA;            {&#xA;            // handle diacritic&#xA;            if (a!='C'){ a=b; if (a!='\'') a=c; else{ a=c; a+=0x1A; b=0xBB; }}&#xA;            else{&#xA;                a=b;&#xA;                if (a=='H'){ a+=0x1A; b=0xBB; }&#xA;                 else{ if (a!='\'') a=c; else{ a=c; a+=0x1A; b=0xBB; }}&#xA;                }&#xA;            // syntetize sound&#xA;            say_char(a);&#xA;            continue;&#xA;            }&#xA;        if (a==',')say_wait(t_comma);&#xA;        if (a==' ')say_wait(t_space);&#xA;        }&#xA;    }&#xA;//----------------------------------------------------------------------&#xA;void say_wait(WORD ws)&#xA;    {&#xA;    for (;ws;ws--) sound_out(_sound_on);&#xA;    }&#xA;//----------------------------------------------------------------------&#xA;void say_char(char chr) // chr =  &amp;lt; `A` , `Z`+26 &amp;gt;&#xA;    {&#xA;    WORD hl,hl0,cy,cy0;&#xA;    BYTE a,b,c,ws;&#xA;    hl=tab_char0[chr-'A'];&#xA;    for (;;)&#xA;        {&#xA;        c =tab_char1[hl  ]&amp;amp;0x0F;&#xA;        c|=tab_char1[hl+1]&amp;amp;0x80;&#xA;        for (;;)&#xA;            {&#xA;            a=tab_char1[hl];&#xA;            a=(a&amp;gt;&amp;gt;5)&amp;amp;7;&#xA;            cy=a&amp;amp;1;&#xA;            hl0=hl;&#xA;            if (a!=0)&#xA;                {&#xA;                b=tab_char3[a];&#xA;                hl=hl0;&#xA;                a=tab_char1[hl+1];&#xA;                hl0=hl;&#xA;                cy0=(a&amp;gt;&amp;gt;7)&amp;amp;1;&#xA;                a=((a&amp;lt;&amp;lt;1)&amp;amp;254)|cy;&#xA;                cy=cy0;&#xA;                hl=a;&#xA;                a=0x80;&#xA;                for (;;)&#xA;                    {&#xA;                    _sound_on=(a&amp;amp;tab_char2[hl]);&#xA;                    for (ws=t_speed;ws;ws--) sound_out(_sound_on);&#xA;                    b--;&#xA;                    if (!b) break;&#xA;                    cy=a&amp;amp;1;     &#xA;                    a=((a&amp;gt;&amp;gt;1)&amp;amp;127)|(cy&amp;lt;&amp;lt;7);&#xA;                    if (!cy) continue;&#xA;                    hl++;&#xA;                    }&#xA;                }&#xA;            a^=a;&#xA;            say_wait(t_pause);&#xA;            c--;&#xA;            a=c&amp;amp;0x0F;&#xA;            hl=hl0; &#xA;            if (a==0) break;&#xA;            }&#xA;        cy0=(c&amp;gt;&amp;gt;7)&amp;amp;1;&#xA;        a=((c&amp;lt;&amp;lt;1)&amp;amp;254)|cy;&#xA;        cy=cy0;&#xA;        if (cy) return;&#xA;        hl+=2;&#xA;        }&#xA;    }&#xA;//---------------------------------------------------------------------------&#xA;#endif&#xA;//---------------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It does not use any libs,files or whatever... If your environment does not have &lt;code&gt;BYTE,WORD&lt;/code&gt; then use &lt;code&gt;unsigned int&lt;/code&gt; instead... I tried it with 44100Hz sampling rate on PC and the sound is superior to any other TTS I tried over the years.&lt;/p&gt;&#xA;&lt;p&gt;The sound is quite good even on AVR32 (however need a normal reproduktor instead of the small beepers).&lt;/p&gt;&#xA;&lt;p&gt;In case you're interested how it works see this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://reverseengineering.stackexchange.com/q/26544/4709&quot;&gt;Understand/Reverse simple (but good quality) TTS engine&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Where much more in depth analysis (up to the last bit of data) and much more didactical code and data can be found for this.&lt;/p&gt;&#xA;&lt;p&gt;Here a small win32/waveout demo for testing just do not forget to write the text phoneticaly... have fun:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ulozto.net/file/l8YdkqTnQ6fe/speech-syntesis-zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;win32 TTS port&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It responds to these keys:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;[enter   ]&lt;/code&gt; will send text from edit box to TTS&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;[up arrow]&lt;/code&gt; will return last string to edit box&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;[escape  ]&lt;/code&gt; clears the edit box&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2020-12-19T14:06:05.663" LastActivityDate="2020-12-19T14:06:05.663" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17209" PostTypeId="2" ParentId="17196" CreationDate="2020-12-06T11:04:19.880" Score="37" Body="&lt;p&gt;This was a good piece of production engineering.&lt;/p&gt;&#xA;&lt;p&gt;IBM expected to sell lots of twin-floppy PCs, even after the launch of the XT (personal experience in a UK reseller in late 1984).&lt;/p&gt;&#xA;&lt;p&gt;To assemble a twin-floppy PC and have the drives respond correctly to the drive select wires in the cable, there are four choices:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Pay the drive supplier to jumper &amp;quot;left&amp;quot; and &amp;quot;right&amp;quot; drives, and keep them separate in the supply chain right up to final assembly.&lt;/li&gt;&#xA;&lt;li&gt;Introduce a jumpering operation for the &amp;quot;right&amp;quot; drives and a separate supply to the assembly station.&lt;/li&gt;&#xA;&lt;li&gt;Increase the time and skill level of the assembly position in changing the jumper at final assembly.&lt;/li&gt;&#xA;&lt;li&gt;Pay the cable supplier to make up a twisted cable.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There is no question that option 4 will give the best results (cost, time and quality) in the IBM assembly plant. If the cable supplier can be persuaded to make the twist at a reasonable price and with good quality, it's an excellent solution which also saves time and effort in field service.&lt;/p&gt;&#xA;" OwnerUserId="4160" LastEditorUserId="2037" LastEditDate="2020-12-06T12:35:46.053" LastActivityDate="2020-12-06T12:35:46.053" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17210" PostTypeId="2" ParentId="17205" CreationDate="2020-12-06T12:36:40.723" Score="15" Body="&lt;p&gt;I don't agree with the answer you read on quora. DEC did have a partner relationship with a certain kind of customer, namely engineering and science labs.  Ken Olsen and the engineering staff at DEC all understood how scientists and engineers think and what they want.&#xA;But this was without any marketing specialists to act as liaisons.&#xA;Sometime in the 1970s, DEC began selling more to business types like banks and insurance companies.  That's where the big money was.  But the engineers didn't have an intuitive grasp of those customers' preferences.&#xA;DEC continued to thrive with superior products but inferior marketing.&#xA;When the desktop computer began to displace the minicomputer, they were completely unprepared to sell into that market.  They didn't have a partnership model with retailers, and they couldn't make much money selling to retail customers.  At this point in time, the quora answer makes sense.&lt;/p&gt;&#xA;&lt;p&gt;IBM's middle name was Business.&#xA;DEC's middle name was Equipment.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2020-12-06T12:59:47.757" LastActivityDate="2020-12-06T12:59:47.757" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17211" PostTypeId="2" ParentId="17200" CreationDate="2020-12-06T14:55:47.590" Score="7" Body="&lt;p&gt;Of course there was the &lt;a href=&quot;https://www.retro-kit.co.uk/page.cfm/content/Acorn-Speech-Synthesiser-Upgrade/&quot; rel=&quot;noreferrer&quot;&gt;Acorn Speech System&lt;/a&gt; for the BBC Micro.&lt;br /&gt;&#xA;This required two Texas Instruments chips to be fitted below the keyboard, so was not a pure software solution.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Stj1a.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Stj1a.jpg&quot; alt=&quot;Acorn Speech Manual Cover&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Different to most of the other answers in that it took phoneme input rather than pure text but that meant that it gave much clearer, comprehensible audio than many of its competitors.&lt;br /&gt;&#xA;Back in the day I used it do provide alarms in a process automation setting.  It was deemed much safer to have a call like &lt;em&gt;Crane A Descending&lt;/em&gt;, or &amp;quot;Crane B Ascending&amp;quot; than to have a range of different bleeps that everyone forgot which was which.&lt;/p&gt;&#xA;&lt;p&gt;It famously used the digitized voice of &lt;a href=&quot;https://www.bafta.org/heritage/in-memory-of/kenneth-kendall&quot; rel=&quot;noreferrer&quot;&gt;Kenneth Kendall&lt;/a&gt;, a BBC newsreader at the time.  He also appeared in the film &lt;em&gt;2001: A Space Odyssey&lt;/em&gt;, playing a BBC newsreader.&lt;/p&gt;&#xA;" OwnerUserId="276" LastEditorUserId="276" LastEditDate="2020-12-06T15:11:01.367" LastActivityDate="2020-12-06T15:11:01.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17212" PostTypeId="2" ParentId="17205" CreationDate="2020-12-06T18:23:47.797" Score="10" Body="&lt;p&gt;My answer is conventional; I put the blame on a very successful established product set, an entrenched culture that valued technical excellence and disdained non-DEC approaches, a notorious lack of sales expertise, and ultimately, failure to see that those toy computers were no longer toys.&lt;/p&gt;&#xA;&lt;p&gt;I don't think &amp;quot;more partners&amp;quot; would have made a lot of difference.  We had an outdated view of the marketplace and a reliance on unsustainable margins.&lt;/p&gt;&#xA;&lt;p&gt;There is of course a tragic irony that much of DEC's success in the 1980s came from persuading customers that they didn't need the big machines that were previously the standard.&lt;/p&gt;&#xA;&lt;p&gt;Me? A digit, 1977-1992. Leaving &amp;quot;home&amp;quot; was hard, but I shoulda left sooner.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-12-06T18:23:47.797" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="17213" PostTypeId="2" ParentId="17205" CreationDate="2020-12-06T18:55:24.623" Score="0" Body="&lt;p&gt;A natural consequence of Ries and Ries observation that markets tend to devolve to one leader a clear 2nd and then others that will hang on until they change to a new market or fail.&lt;/p&gt;&#xA;&lt;p&gt;There were way more computer manufacturers than needed.  Businesses wanted to hire people who knew the computer not train them from scratch.  IBM was bigger and had more users so that advantage helped them succeed, along with better marketing of wider product line, and some luck.&lt;/p&gt;&#xA;" OwnerUserId="20086" LastActivityDate="2020-12-06T18:55:24.623" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17214" PostTypeId="2" ParentId="17196" CreationDate="2020-12-06T19:06:00.040" Score="17" Body="&lt;p&gt;There seems to be some confusion about how this worked clouding the categorization of what to call it.&lt;/p&gt;&#xA;&lt;p&gt;Let's compare the interfaces between how Shugart designated signals at the drive (and how other makers used them) vs how IBM re-designated them at the controller in order to support the twist idea.  (I've used A and B on the IBM version to reduce confusion)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;pin   Shugart      IBM before flip      IBM after flip   &amp;quot;2nd drive&amp;quot; interprets&#xA;10    /DS1         /MOTOR_A             /MOTOR_B         ignored&#xA;12    /DS2         /SELECT_B            /SELECT_A        /DS&#xA;14    /DS3         /SELECT_A            /SELECT_B        ignored&#xA;16    /MOTOR       /MOTOR_B             /MOTOR_A         /MOTOR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;IBM then jumpered all drives to use /DS2 on pin 12.  And being standard Shugart drives (or equivalent) they expected their motor enable on pin 16 just as Shugart intended.  So you have drives that, regardless of their actual role, expect one signal on pin 12 and one on pin 16, and don't pay any attention to what is going on at pins 10 or 14.&lt;/p&gt;&#xA;&lt;p&gt;As such, the pre-twist drive connector becomes DOS drive B, presenting the original Shugart /DS2 select signal on pin 12, and the motor enable on pin 16, all in the very ordinary vanilla way (except that the BIOS should only set the bit to drive the traditional motor signal when using drive B)&lt;/p&gt;&#xA;&lt;p&gt;But after the twist, the signal on the motor enable is what Shugart would call /DS1, but IBM is instead cleverly using as a &amp;quot;new&amp;quot; motor enable A.   And the select signal arriving on pin 14, would be that which originated on the controller end pin Shugart would call /DS3, but which IBM is using as drive enable A.&lt;/p&gt;&#xA;&lt;p&gt;Given that this scheme works with standard &lt;em&gt;unmodified&lt;/em&gt; Shugart-interface drives, I'd categorize it as a clever &amp;quot;hack&amp;quot; or bit of manufacturing engineering.  IBM changed only their controller card (which already had to be customized to match their bus design) and cable, and just bought the drives off the shelf.&lt;/p&gt;&#xA;&lt;p&gt;You can see the manual for Shugart's longer-predating-the-IBM-PC original 1976 single-sided SA400 drive which originated this interface (as an evolution of the earlier 8-inch drive's interface) &lt;a href=&quot;http://www.classiccmp.org/dunfield/r/sa400.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.  When Shugart extended the scheme to double sided drives such as the SA450 (still before the IBM-PC), they put four more places on the far end of the connector adding a side select and a &amp;quot;spare&amp;quot; and corresponding grounds, but didn't change the part of the interface used for drive selection and motor control.  Regardless if IBM's drives had their logo molded into the front plastic, the technical reality is that they were and remain interchangeable with standard Shugart interface drives like the SA450.  Peel the four wires that Shugart had previously added to create their 34-pin double-sided interface off the cable, and even getting an old 30-pin 1976 SA400 to work would have been merely a matter of software support.&lt;/p&gt;&#xA;" OwnerUserId="1874" LastEditorUserId="1874" LastEditDate="2020-12-06T20:47:57.170" LastActivityDate="2020-12-06T20:47:57.170" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17215" PostTypeId="2" ParentId="17200" CreationDate="2020-12-06T19:51:26.373" Score="6" Body="&lt;p&gt;Another such program from the early ’80s was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Software_Automatic_Mouth&quot; rel=&quot;nofollow noreferrer&quot;&gt;Software Automatic Mouth&lt;/a&gt;.  I also had hazy memories of a demo of The Voice by Muse Software, for Apple ][e.  (“Merry Christmas from Santa and the voice of Muse ....”)&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2020-12-09T18:45:46.973" LastActivityDate="2020-12-09T18:45:46.973" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17216" PostTypeId="2" ParentId="17200" CreationDate="2020-12-07T06:39:59.950" Score="4" Body="&lt;p&gt;Here is an online version of S.A.M. for c64, you can type some text onto the web page and tape the audio: &lt;a href=&quot;https://discordier.github.io/sam/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://discordier.github.io/sam/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are music plugins also based on mac and atari st which are designed for music enhancements on top of the original speech engine code: &lt;a href=&quot;https://www.youtube.com/watch?v=FmaeI5eoeH0&amp;amp;ab_channel=PlogueArtetTechnologie%2CInc&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=FmaeI5eoeH0&amp;amp;ab_channel=PlogueArtetTechnologie%2CInc&lt;/a&gt;.&#xA;there are demo versions of it someplace on the web.&lt;/p&gt;&#xA;" OwnerUserId="18004" LastEditorUserId="18004" LastEditDate="2020-12-09T17:29:27.100" LastActivityDate="2020-12-09T17:29:27.100" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17217" PostTypeId="2" ParentId="17196" CreationDate="2020-12-07T12:34:04.880" Score="-2" Body="&lt;p&gt;It's intended.  The outbound cable at the motherboard is for a slave drive B.  But it has settings for the master drive A as well.  So to make all the drives alike, you have a twist in the cable.  They all come like that.&lt;/p&gt;&#xA;&lt;p&gt;Hard drives sort the issue with a jumper at the back.&lt;/p&gt;&#xA;&lt;p&gt;There's a similar device with the PS/2 plug, which uses five of the six pins.  If one switches the mouse into the unused chanel, you can plug both keyboard and mouse into a single socket, as is done on Laptops.  I have recently acquired a keyboard with two tails (mouse + keyboard), and it can daisychain the real mouse as well.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The hardware arrangement supposes at the front of the box, that drive A: is above drive B:.  A cable without any kinks in it would go A: to B: to the motherboard, providing a 3½ and 5¼ connector before and after the twist.&lt;/p&gt;&#xA;&lt;p&gt;So a twist is needed between A: and B: if these are to be identical kinds of drive.  There is no twist needed between B: and the motherboard.&lt;/p&gt;&#xA;&lt;p&gt;As time goes by, you can drop various connectors, if you don't plan to support that kind of drive.  This is done simply by not providing headers on the cable.&lt;/p&gt;&#xA;&lt;p&gt;Because a direct cable remains between B: and the motherboard, dropping B: means that the connectors below the twist are dropped, and the one above the twist (aka A:) is set.&lt;/p&gt;&#xA;&lt;p&gt;It is possible to swap the drives in software, but the balance of things is that one gets better assembly and running if one reduces the amount of user fiddling: ie use cables that set the identical floppies to A: and B:.  A is above the twist, B is below.&lt;/p&gt;&#xA;&lt;p&gt;Likewise, swapped cables allow one to use things like Null modems (which are a serial or parellel cable, with two 'computer' ends, and a twist in the middle.)&lt;/p&gt;&#xA;" OwnerUserId="19433" LastEditorUserId="19433" LastEditDate="2020-12-08T08:57:29.267" LastActivityDate="2020-12-08T08:57:29.267" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17218" PostTypeId="2" ParentId="17205" CreationDate="2020-12-07T12:57:08.587" Score="6" Body="&lt;p&gt;DEC suffered from a problem that you can see throughout their history in different contexts: partners invariably came to be seen as competitors.&lt;/p&gt;&#xA;&lt;p&gt;A good example late in their evolution can be seen in MIPS/Alpha. In the late 1980s it was clear the VAX was running out of steam - their own sales teams were telling them in no uncertain terms that customers who had VMS platforms were interested in new ones, but absolutely no one else was interested even in the slightest. If they needed &amp;quot;big iron&amp;quot;, IBM's AS/400 was highly competitive, while those looking for compute performance for engineering and science could buy off the shelf RISC stations running Unix that were competitive at a fraction of the price and would clearly be faster than VAX within a couple of years.&lt;/p&gt;&#xA;&lt;p&gt;Within DEC this caused massive confusion. With Olsen's ear, the 9000 team delivered DECs version of the Itanic, completely oblivious to the changing market. No one was going to buy one even if it was cheaper than IBM, because anyone even &lt;em&gt;considering&lt;/em&gt; a non-IBM mainframe would just buy a Unix server. So there goes a couple of billion dollars that would have come in handy.&lt;/p&gt;&#xA;&lt;p&gt;Others within DEC were perfectly aware of the problem and began development of their own RISC designs, only to be repeatedly shut down. This led the California offices to develop their own workstations based on MIPS. There were some real problems with the R4400, but all they needed was some time and money, both of which they eventually received. But that was not to be...&lt;/p&gt;&#xA;&lt;p&gt;... because DEC decided that they could not, in good conscience, give money to some other company when they could take all of that money for themselves. So instead of helping MIPS they re-started their own efforts and delivered Alpha. Don't get me wrong, Alpha is a fine chip, but there are &lt;a href=&quot;https://yarchive.net/comp/vax.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;immutable laws in the building of chips and their resulting price/performance&lt;/a&gt; that DEC had absolutely no way of hitting. Had they stayed with MIPS, who was also selling to SGI, maybe it would have worked, but with their own chip in their own products? No way in a million years.&lt;/p&gt;&#xA;&lt;p&gt;They could have aggressively marketed Alpha and moved to be a supplier, but those around at the time will no doubt remember their half-assed attempts. Other companies at the high-end had their own designs - MIPS, SPARC, POWER, etc., and, like DEC, felt their design was the secret sauce to future success and would never consider someone else's design.&lt;/p&gt;&#xA;&lt;p&gt;That left only the smaller vendors who were not going to have the volumes required. And those guys were targeting the server market, which is precisely where DEC was trying to go. Once again, potential partners were instead seen as the enemy. And so DEC's big outside marketing effort was to offer one-off development boards and hobby kits. That was not going to sustain them.&lt;/p&gt;&#xA;&lt;p&gt;So DEC became one of many companies pushing a RISC chip into a market that had room for perhaps one mass-market design. Intel was going gangbusters through this period, so by the late 90s the jig is up; x86 is offering &lt;em&gt;reasonable&lt;/em&gt; performance relative to the RISC chips but at a tiny fraction of the price, and free Unix systems are available for download.&lt;/p&gt;&#xA;&lt;p&gt;And that was that.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="4196" LastEditDate="2020-12-07T14:04:22.397" LastActivityDate="2020-12-07T14:04:22.397" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17219" PostTypeId="1" AcceptedAnswerId="17243" CreationDate="2020-12-07T13:51:03.603" Score="13" ViewCount="4039" Body="&lt;p&gt;Writing &lt;a href=&quot;https://github.com/maurymarkowitz/RetroBASIC&quot; rel=&quot;noreferrer&quot;&gt;a BASIC interpreter&lt;/a&gt; has revealed a number of interesting bits of information that tend not to be mentioned in the documentation. For instance:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT&amp;quot;ONE&amp;quot;;:IF 1=2 THEN PRINT&amp;quot;TWO&amp;quot;:PRINT&amp;quot;THREE&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Will print &lt;code&gt;ONE&lt;/code&gt; on Microsoft-derived BASICs, while Dartmouth will produce &lt;code&gt;ONETHREE&lt;/code&gt;. That is, MS treats the entire rest of the line as part of the &lt;code&gt;THEN&lt;/code&gt;, which is... weird (and wrong IMHO). I only noticed this because the example code I had &lt;em&gt;did&lt;/em&gt; run the last statement, which caused Super Star Trek to fail.&lt;/p&gt;&#xA;&lt;p&gt;I've come across another example I'd like to throw open to the hoi polloi. Consider this program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT&amp;quot;HELLO&amp;quot;&#xA;20 GOTO 25&#xA;30 PRINT&amp;quot;WORLD&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The example code I have would look up line 25 &lt;em&gt;or the next higher statement&lt;/em&gt;. So in that code, line 30 would be run. This is definitely not the case for Commodore BASIC, which returns &amp;quot;UNDEFN'D STATEMENT&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;So... does anyone know a version of BASIC that works in this fashion, or is this (as I strongly suspect) simply a bug in the example code?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-12-09T17:45:56.877" Title="GOTO (etc) to a non-existent line?" Tags="&lt;basic&gt;" AnswerCount="8" CommentCount="24" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17220" PostTypeId="2" ParentId="14649" CreationDate="2020-12-07T13:56:43.420" Score="3" Body="&lt;p&gt;I can think of several solutions&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Run the software in a virtual machine with a virtual floppy disk image attached to it&lt;/li&gt;&#xA;&lt;li&gt;Just change the drive letter of some partition to A: or B: since I doubt that the software actually checks the drive type and just assumes that the first 2 letters are for floppy drives&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But I think migrating to some newer software is the best solution. You should migrate as soon as possible, otherwise the migration cost would be much bigger in the future, especially with some ancient software that's vulnerable to attacks like Windows XP you may have to pay some other much more painful cost&lt;/p&gt;&#xA;" OwnerUserId="1981" LastActivityDate="2020-12-07T13:56:43.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17222" PostTypeId="2" ParentId="17219" CreationDate="2020-12-07T14:04:21.593" Score="13" Body="&lt;p&gt;BASIC dialects are known to vary in details quite a lot.  One of the more definitive versions is BBC BASIC, which does the following:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0q3LE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0q3LE.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note the IF-THEN-ELSE construct, which justifies the use of multi-statement IF-THEN bodies - which are in fact useful in practice.&lt;/p&gt;&#xA;&lt;p&gt;BBC BASIC V added an ENDIF keyword and the facility for multi-line IF-THEN-ELSE-ENDIF blocks.  In general BBC BASIC is geared to make &lt;em&gt;structured programming&lt;/em&gt; easier than most earlier microcomputer BASICs.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2020-12-07T14:07:35.847" LastActivityDate="2020-12-07T14:07:35.847" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="17223" PostTypeId="2" ParentId="17200" CreationDate="2020-12-07T14:18:52.080" Score="5" Body="&lt;p&gt;The Texas Instruments &lt;a href=&quot;https://en.wikipedia.org/wiki/Texas_Instruments_TI-99/4A#Speech_synthesizer&quot; rel=&quot;noreferrer&quot;&gt;TI-99/4A&lt;/a&gt; could do text-to-speech if you had the Terminal Emulator II cartridge and the Solid State Speech Synthesizer.  (More information about the latter can be found in &lt;a href=&quot;https://joelreyesnoche.files.wordpress.com/2013/09/ssss.pdf&quot; rel=&quot;noreferrer&quot;&gt;the manual&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/84e27.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/84e27.jpg&quot; alt=&quot;Solid State Speech Synthesizer&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11421" LastActivityDate="2020-12-07T14:18:52.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17224" PostTypeId="2" ParentId="17219" CreationDate="2020-12-07T15:18:18.557" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;10 PRINT&amp;quot;ONE&amp;quot;;:IF 1=2 THEN PRINT&amp;quot;TWO&amp;quot;:PRINT&amp;quot;THREE&amp;quot;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Will print ONE on Microsoft-derived BASICs, while Dartmouth will produce ONETHREE. That is, MS treats the entire rest of the line as part of the THEN, which is... weird (and wrong IMHO).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, I guess there is no right or wrong, but each BASIC's own way. MS' way essentially allow the creation of a code block within a THEN clause without the need of GOTO. With Dartmouth, which works at that point like FORTRAN before, the THEN needs to jump into the code block, followed by a GOTO to get around:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT&amp;quot;ONE&amp;quot;;&#xA;20 IF 1=2 THEN GOTO 40&#xA;30 GOTO 50&#xA;40 PRINT&amp;quot;TWO&amp;quot;&#xA;50 PRINT&amp;quot;THREE&amp;quot;&#xA;60 REM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Well, or use an inverted clause to jump around the code block. Neither a really great construct.&lt;/p&gt;&#xA;&lt;p&gt;It must be noted that allowing arbitrary statements after THEN is a later add-on, not present in Dartmouth BASIC. The same goes with multiple statements separated by colon.&lt;/p&gt;&#xA;&lt;p&gt;With MS' way of treating the whole (rest of the) line as part of the then block allows this constructs without a lot of brain jogging and gotos.&lt;/p&gt;&#xA;&lt;p&gt;But it wasn't invented by MS, they just took it from &lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp11/rsts/V04/DEC-11-ORBPA-A-D_BASIC-PLUS_LangMan_Oct72.pdf&quot; rel=&quot;noreferrer&quot;&gt;DEC BASIC-PLUS&lt;/a&gt; of 1972 (After all, MS BASIC is a clone of DEC BASIC) as described on p.3-12 of the manual:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ncz4p.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ncz4p.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So here after a THEN multiple statements are allowed, but either executed as whole (if the condition is true) or not at all.&lt;/p&gt;&#xA;&lt;p&gt;Now, when looking for the 'right' ways, it is usually best to first take a look BASIC standards. The first here might be&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://buraphakit.sourceforge.io/ECMA-55,1st_Edition,_January_1978.pdf&quot; rel=&quot;noreferrer&quot;&gt;ECMA 55 Minimal BASIC&lt;/a&gt; of 1978&lt;/p&gt;&#xA;&lt;p&gt;This describes the very minimum every BASIC needs to comply with to be portable.  Essentially it codifies Dartmouth BASIC (Thomas Kurtz was one of the editors) in it's later incarnations in a clear and reproducible way. Here THEN statements only allow a line number to jump to.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Dartmouth_BASIC#ANSI_BASIC,_Eighth_Edition&quot; rel=&quot;noreferrer&quot;&gt;ANSI Minimal BASIC&lt;/a&gt; of 1979&lt;/p&gt;&#xA;&lt;p&gt;Essentially the ANSI version of ECMA-55.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;em&gt;This is BTW, the point in time were MS-BASIC started to become a normative force&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.ecma-international.org/publications/files/ECMA-ST-WITHDRAWN/ECMA-116,%201st%20edition,%20June%201986.pdf&quot; rel=&quot;noreferrer&quot;&gt;ECMA 116 BASIC of 1986&lt;/a&gt;, also called 'Full BASIC'&lt;/p&gt;&#xA;&lt;p&gt;Here multi statement and multi line THEN constructs and mixtures thereof are possible. Multi statement works like the 'MS way', while multi line needs an ENDIF (or ELSE/ELSEIF) statement to close the block. (It also got many other nie features known from modern BASICs, just with line numbers)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ANSI/ISO/IEC Full BASIC of 1987&lt;/p&gt;&#xA;&lt;p&gt;Essentially ECMA-116 with a few clarifications/extensions.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So MS does follow what ECMA-116 says ... well, or better maybe the standard codifies what MS did before and thus became defacto standard. A lot of work has been put into these standards to capture a workable common place for BASIC. This includes especially edge cases of seemingly clear issues. I'd consider it best practice to check them whenever there is something open for discussion. Especially because they as well point out issues that have been not decided on/are still open to interpretation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The example code I have would look up line 25 or the next higher statement [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So... does anyone know a version of BASIC that works in this fashion, or is this (as I strongly suspect) simply a bug in the example code?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I do remember a TINY BASIC that allowed to jump 'between' lines to ease computed GOTO, but looking at the original source it seams like this was a modification.&lt;/p&gt;&#xA;&lt;p&gt;In contrast ECMA-55 states on targets used as targets in THEN/GOTO/GOSUB:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;All line-numbers in control-statements shall refer to lines in the program.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-08T08:18:21.377" LastActivityDate="2020-12-08T08:18:21.377" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17225" PostTypeId="2" ParentId="17219" CreationDate="2020-12-07T18:54:18.543" Score="13" Body="&lt;p&gt;The examples are not bugs but undefined behavior, which is common in other languages as well. If you expect cross-platform compatibility, simply don't do things that result in undefined behavior.&lt;/p&gt;&#xA;&lt;p&gt;Moreover, the programmer's intention in the first example is unclear, which can lead to bugs that are difficult to fix. Again, don't do that. The second example is better because either it works as the programmer intended or the parser complains, making it easy to find and fix the bug quickly.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-12-07T18:54:18.543" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17226" PostTypeId="1" AcceptedAnswerId="18255" CreationDate="2020-12-07T19:00:17.737" Score="26" ViewCount="4297" Body="&lt;p&gt;I have been rereading &lt;a href=&quot;https://yarchive.net/comp/vax.html&quot; rel=&quot;noreferrer&quot;&gt;a fascinating discussion about why DEC replaced VAX with Alpha&lt;/a&gt; based on talks with people who were there at the time; in a nutshell, in the opinion of the VAX engineers, it was no longer feasible to make VAX performance-competitive with RISC.&lt;/p&gt;&#xA;&lt;p&gt;I'm not so clear about why it was necessary to develop Alpha instead of continuing with MIPS; DEC had already launched a project to build MIPS workstations, and this would seem to be a reasonably clean RISC architecture that could have delivered high performance at reasonable cost, and would have improved the chances of a single RISC architecture having wide enough industry support to achieve critical mass rather than being outcompeted by x86.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, it is true that Alpha did for a while outperform MIPS according to SPEC benchmarks (figures given in the above linked discussion). I'm not clear to what extent this was because of intrinsic qualities of the architecture, versus Alpha having more resources put behind it (development team, fab, TDP?).&lt;/p&gt;&#xA;&lt;p&gt;Why did DEC go with Alpha instead of MIPS? What characteristics did Alpha have, that led them to believe it would serve them better?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-03-09T16:08:15.200" Title="Why did DEC develop Alpha instead of continuing with MIPS?" Tags="&lt;history&gt;&lt;dec&gt;&lt;architecture&gt;&lt;mips&gt;&lt;alpha&gt;" AnswerCount="8" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17227" PostTypeId="2" ParentId="17226" CreationDate="2020-12-07T20:21:53.497" Score="34" Body="&lt;p&gt;The main thrust of the marketing behind the DEC Alpha was its 64-bit microprocessor architecture. They got there &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/13613/4335&quot;&gt;years before potential competitors&lt;/a&gt;, including MIPS. At the time DEC was shipping the 64-bit Alpha, MIPS was just beginning to have success with the 32-bit MIPS R4000 being used by SGI.&lt;/p&gt;&#xA;&lt;p&gt;Given that DEC didn't just need to replace their aging Vax architecture, but also needed to carve out a strong marketing case against competitors like SGI and Sun, being early to market with a 64-bit RISC platform seems a reasonable move. If they just &amp;quot;stuck with MIPS&amp;quot;, they would have nothing to differentiate from SGI on the hardware side; whereas SGI itself had a strong differentiator with its 3D graphics hardware. For workstations (not designed for 3D) and servers, Alpha would give DEC a stronger technical and marketing position.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2020-12-07T20:21:53.497" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17228" PostTypeId="2" ParentId="17219" CreationDate="2020-12-08T00:35:19.277" Score="1" Body="&lt;p&gt;In pragmatic terms,&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Decide what legacy code you want your interpreter to be able to run&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Decide which incompatible dialects, if any, you want to support as options&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do the same thing they do.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;As Raffzahn brings up, Microsoft’s behavior is more handy than Dartmouth’s, because Microsoft BASIC allows you to write a conditional block with multiple statements.  You also say you want to run programs that expect Microsoft’s behavior.&lt;/p&gt;&#xA;&lt;p&gt;Similarly, it is very unlikely that any legacy code will intentionally &lt;code&gt;GOTO&lt;/code&gt; a line that does not exist, but it is possible that some existing program might run correctly despite a typo like &lt;code&gt;GOTO 24&lt;/code&gt; instead of &lt;code&gt;GOTO 25&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If you also need to run code that depends on incompatible behavior, you might provide that as an option.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastActivityDate="2020-12-08T00:35:19.277" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17229" PostTypeId="2" ParentId="17226" CreationDate="2020-12-08T01:05:22.207" Score="26" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;and would have improved the chances of a single RISC architecture&#xA;having wide enough industry support to achieve critical mass rather&#xA;than being outcompeted by x86.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's important to remember that in the late 80's and very early 90's when Alpha was being developed, absolutely nobody was worried about x86 dominating high end computing.  Not even Intel considered it a likely path forward -- they were working on RISC designs like i860.  Defending against x86 is only obvious as a goal in hindsight.&lt;/p&gt;&#xA;&lt;p&gt;From DEC's perspective, CPU architecture fragmentation was basically a non-issue.  Since their founding, they had been a major force in the industry by designing their own architectures.  They were selling MIPS, Vax, and even the last new PDP-11 hardware in the early 90's, so the market had room for multiple architectures.  Not designing their own next gen ISA would have been like a vineyard giving up on making their own wine.  Being permanently dependent on MIPS CPU's in the long term would have been nearly a non starter, especially after seeing how successful designs like SPARC and even ARM were.  It was very much an era of bespoke RISC architectures, so it seemed like a golden moment for a company with a history of experience making and supporting new architectures.  At the time, high end fabs were much cheaper than they are today, and a company could make a huge profit margin selling CPU's that they manufactured, rather than giving that profit margin to a CPU vendor.&lt;/p&gt;&#xA;&lt;p&gt;Add that to the fact that MIPS had no immediate path to 64 bit, and Alpha seemed like a huge opportunity.&lt;/p&gt;&#xA;" OwnerUserId="5309" LastActivityDate="2020-12-08T01:05:22.207" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17231" PostTypeId="1" CreationDate="2020-12-08T06:16:51.583" Score="0" ViewCount="154" Body="&lt;p&gt;I don't know the name of an arcade game; can someone please help?&lt;/p&gt;&#xA;&lt;p&gt;When you go all the way to the ground, your ship turns into a car and your seat vibrates.  In the last stage, your ship turns into another special, different ship.  The beginning story says you're trying to save a professor.  You start at 'A', then go to either 'B' or 'C' on the map.&lt;/p&gt;&#xA;" OwnerUserId="20106" LastEditorUserId="10260" LastEditDate="2020-12-08T06:51:43.300" LastActivityDate="2020-12-08T06:51:43.300" Title="Arcade game with a sit-down cabinet and vibrating seat" Tags="&lt;identify-this-game&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17232" PostTypeId="2" ParentId="17219" CreationDate="2020-12-08T08:18:12.990" Score="-1" Body="&lt;p&gt;As another data point, the BASIC as implemented in the Radio Shack Tandy TRS-80 would report an&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;UL ERROR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;for attempts to GOTO or GOSUB to a non-existing line. UL being the abbreviation for &lt;em&gt;undefined line&lt;/em&gt;. So the answer to your question appears to lean towards &amp;quot;it's a bug, not a feature.&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="17882" LastActivityDate="2020-12-08T08:18:12.990" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17233" PostTypeId="2" ParentId="17226" CreationDate="2020-12-08T08:58:32.480" Score="4" Body="&lt;p&gt;They wanted an architecture that was capable of supporting OpenVMS, Tru64 UNIX and Windows NT in 64 Bit right from the start. MIPS was not there by the time.&lt;/p&gt;&#xA;" OwnerUserId="20108" LastActivityDate="2020-12-08T08:58:32.480" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17235" PostTypeId="1" CreationDate="2020-12-08T12:11:02.383" Score="2" ViewCount="105" Body="&lt;p&gt;On the Apple II series of computers, peripheral cards contend for bus mastership through a priority daisy-chain system. A peripheral card is only allowed to perform DMA if its DMA_IN line is at logic 1, indicating that no higher-priority cards are using the bus. When performing DMA, a card must set DMA_OUT to logic &amp;quot;0&amp;quot; in order to inhibit lower-priority cards from mastering the bus.&lt;/p&gt;&#xA;&lt;p&gt;However, I have recently become aware of a different convention regarding the DMA_IN and DMA_OUT lines. Some ROM cards and Language Card-type RAM cards use the DMA_IN and DMA_OUT lines to arbitrate between multiple cards using the /INH feature. This can be seen in the &lt;a href=&quot;https://ia800906.us.archive.org/15/items/rom_emulator_card_050-0009-01_schematic/rom_emulator_card_050-0009-01_schematic.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple 050-0009-01 ROM card schematic&lt;/a&gt;, in which the DMA_OUT line is a logical AND between DMA_IN and the enable signal for the onboard ROMs.&lt;/p&gt;&#xA;&lt;p&gt;I can understand this usage of the DMA_IN and DMA_OUT lines, but where can I see this usage of the DMA priority daisy chain discussed further?&lt;/p&gt;&#xA;" OwnerUserId="7486" LastEditorUserId="7486" LastEditDate="2020-12-08T14:36:14.360" LastActivityDate="2020-12-09T15:40:59.897" Title="Apple II DMA daisy chain also used to arbitrate /INH?" Tags="&lt;apple-ii&gt;&lt;apple&gt;&lt;dma&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="17236" PostTypeId="2" ParentId="17226" CreationDate="2020-12-08T13:20:50.337" Score="11" Body="&lt;p&gt;Using someone else's processor would fundamentally change the nature of the company, which historically was based on creating computer systems based on DEC-designed processors.&lt;/p&gt;&#xA;&lt;p&gt;I don't believe DEC was capable of such a radical change.&lt;/p&gt;&#xA;&lt;p&gt;That's not to pooh-pooh the technical reasons given in other excellent answers here.  But historical inertia should not be overlooked.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-12-08T13:20:50.337" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17237" PostTypeId="2" ParentId="17200" CreationDate="2020-12-09T02:26:57.810" Score="5" Body="&lt;p&gt;For the 1980's &lt;a href=&quot;https://www.microbee-mspp.org.au/wiki/tiki-index.php?page=Microbee&quot; rel=&quot;noreferrer&quot;&gt;Microbee&lt;/a&gt; (z80) there was a hardware module named &amp;quot;Bee Talker&amp;quot; which plugged into a parallel port.  It looks nearly exactly like the &amp;quot;Beethoven&amp;quot; unit in this image (seen sitting next to the &amp;quot;keyboard&amp;quot;), except it was labelled &amp;quot;Beetalker&amp;quot;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mZKjN.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mZKjN.jpg&quot; alt=&quot;Microbee Computer&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It had a simple Text-to-Speech software interface that came with the module.  Whatever you typed in the console would be somewhat weirdly converted to speech.  I don't remember exactly what worked well, but sometimes you had to phonetically misspell the word to get the desired result.&lt;/p&gt;&#xA;&lt;p&gt;The module has been &lt;a href=&quot;https://www.microbeetechnology.com.au/beetalker-voice-synth-kit.htm&quot; rel=&quot;noreferrer&quot;&gt;re-released&lt;/a&gt; should you want to connect it to an Arduino or whatever.&lt;/p&gt;&#xA;&lt;p&gt;EDIT: Finally found a better image:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MxfbT.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MxfbT.jpg&quot; alt=&quot;beetalker &amp;amp; beethoven&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8767" LastActivityDate="2020-12-09T02:26:57.810" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17238" PostTypeId="2" ParentId="17200" CreationDate="2020-12-09T03:26:19.100" Score="5" Body="&lt;p&gt;You can find various incarnations of the formant synthesizer underlying DECTalk &lt;a href=&quot;https://github.com/chdh/klatt-syn&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I doubt you could get satisfactory results on an 8-bit processor. 16-bit, yes (though you may need to rewrite the floating point code as fixed point). I assume the original Macintalk used a fairly similar algorithm, though I never saw that source code. MacinTalk 3 (&amp;quot;Fred&amp;quot; and related voices), that has been available on Macs for more than 30 years, uses a similar method.&lt;/p&gt;&#xA;&lt;p&gt;Klatt also wrote a fairly readable &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0521306418&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;book&lt;/a&gt; describing a somewhat earlier system.&lt;/p&gt;&#xA;&lt;p&gt;Ultimately, it's probably memory that is the limiting factor for a 1980s system. Processing power of 16 bit processors is OK for formant synthesis, but in English, you're never going to have very accurate pronunciation without a large dictionary or an enormous rule set.&lt;/p&gt;&#xA;" OwnerUserId="10696" LastActivityDate="2020-12-09T03:26:19.100" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17239" PostTypeId="2" ParentId="17226" CreationDate="2020-12-09T08:22:58.387" Score="15" Body="&lt;p&gt;DEC's use of MIPS was only ever as basically a stop-gap.&lt;/p&gt;&#xA;&lt;p&gt;Before they used MIPS, DEC had started work on a project called Prism. It was intended to be their first commercial RISC processor. In June of 1988, however, there was a meeting of senior executives. The PRISM project was producing some interesting technology, but didn't have a chip set available yet (like VAXen, it was going to be a multi-chip design, with FPU separate from the CPU). The executives decided they were too far behind the power curve, so they shut down the PRSIM project, and decided to start using MIPS chips instead.&lt;/p&gt;&#xA;&lt;p&gt;At the time, this was seen solely as a workstation thing though--something completely different from the VAX. But, it was enough to get one of the executives to ask Robert Supnik to look into the question of whether this new RISC &amp;quot;stuff&amp;quot; could, perhaps, someday become a threat to DEC's VAX systems.&lt;/p&gt;&#xA;&lt;p&gt;To answer that, Supnik formed what was called the &amp;quot;RISCy VAX&amp;quot; study group. They quickly concluded that yes, RISC could become a legitimate threat to the big machines, not just workstations. In fact, not only could become a threat, bt probably already was enough of a threat that they needed to respond. Further, based on the earlier PRISM work, they felt confident that DEC could produce a RISC processor they could sell.&lt;/p&gt;&#xA;&lt;p&gt;They then considered a number of approaches to how to make a RISC processor that would run VMS efficiently enough to be successful. Approaches included a stripped-down VAX instruction set, some sort of hybrid RISC/CISC design, etc.&lt;/p&gt;&#xA;&lt;p&gt;Around then, they considered just porting VMS to some RISC chip (such as MIPS) that was originally intended to run UNIX, but eventually decided that wasn't practical--that porting VMS to such a design would probably add something like 2 years to the schedule.&lt;/p&gt;&#xA;&lt;p&gt;So, they decided on a pure RISC design, but with some sort of &amp;quot;trap door&amp;quot; to allow them to fairly cleanly add support for some VAX-like features upon which VMS depended (e.g., some parts of how it did its interrupt handling and paging). That resulted in the Alpha's PAL feature, with separate libraries of PALcode to support VMS and OSF1.&lt;/p&gt;&#xA;&lt;p&gt;As others have mentioned, at the time DEC also saw 32-bit architectures reaching the end of their usefulness, so they decided that the new processor should be a 64-bit design from the beginning--where MIPS not only started out as 32-bits, but didn't have a 64-bit design until well after the Alpha.&lt;/p&gt;&#xA;&lt;p&gt;They also looked at some of the existing RISC characteristics and decided against them. For example, they saw delay slots as scaling poorly (not obvious how they fit with a multiple-issue, out of order microarchitecture, among other things).&lt;/p&gt;&#xA;&lt;p&gt;There's quite a bit more to it, of course, but I think that covers most of the &amp;quot;why not MIPS&amp;quot; question though.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;References&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=144508&quot; rel=&quot;noreferrer&quot;&gt;IEEE: How DEC Developed Alpha&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.linuxjournal.com/article/2105&quot; rel=&quot;noreferrer&quot;&gt;Linux Journal: An Interview with DEC&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2020-12-09T09:14:44.813" LastActivityDate="2020-12-09T09:14:44.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17240" PostTypeId="2" ParentId="17219" CreationDate="2020-12-09T08:51:06.873" Score="-1" Body="&lt;p&gt;Since you are using a basic interpreter to run your program, in most cases it will only process lines of code that it executes.&lt;/p&gt;&#xA;&lt;p&gt;So if you have a goto statement in your program that is never used, no error will be issued.&lt;/p&gt;&#xA;&lt;p&gt;A basic compiler would scan every line of code and would 'notice' the invalid goto statement&lt;/p&gt;&#xA;" OwnerUserId="20114" LastActivityDate="2020-12-09T08:51:06.873" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17241" PostTypeId="2" ParentId="17219" CreationDate="2020-12-09T14:57:05.847" Score="1" Body="&lt;p&gt;The dialect I used was passing control to the existing line with the closest larger number, if such existed. If not, this was the legitimate way to terminate the program without any error message.&lt;/p&gt;&#xA;&lt;p&gt;Passing control into the middle of the range allowed adding lines to either side of the entry point. This helped a lot because refactoring was also very tedious: there was no search and the only way to change the line was by retyping it full length in completeness. That version did not have any automated line renumeration.&lt;/p&gt;&#xA;&lt;p&gt;The machine was some kind of Soviet &amp;quot;Elektronika&amp;quot; but I no not remember precisely. It looked more like a very high end calculator with the own two row LED display on the console, but already supported external monitor and keyboard.&lt;/p&gt;&#xA;" OwnerUserId="496" LastEditorUserId="496" LastEditDate="2020-12-09T17:45:56.877" LastActivityDate="2020-12-09T17:45:56.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17243" PostTypeId="2" ParentId="17219" CreationDate="2020-12-09T15:36:17.580" Score="5" Body="&lt;p&gt;Sinclair BASIC on the ZX Spectrum would jump to the next available line number.&#xA;The &lt;a href=&quot;https://worldofspectrum.org/ZXBasicManual/zxmanchap2.html&quot; rel=&quot;noreferrer&quot;&gt;manual&lt;/a&gt; says&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If the line number in a GO TO command refers to a non-existent line, then the jump is to the next line after the given number. The same goes for RUN; in fact RUN on its own actually means RUN 0.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="20117" LastActivityDate="2020-12-09T15:36:17.580" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17244" PostTypeId="1" CreationDate="2020-12-09T16:14:09.473" Score="3" ViewCount="217" Body="&lt;p&gt;Unlike many drives, the Apple Disk II has inputs that control the individual head stepper coils.  These are commonly described as advancing by half-tracks, since advancing a full track requires activating two coils in sequence.  Four-pole stepper motors, however, can not only be moved by driving coils individually, but also by driving pairs of coils.  Since advancing by one pole moves a half track, energizing a pair of cells will access a quarter-track location between two half-track locations.&lt;/p&gt;&#xA;&lt;p&gt;Experimentally, at least on the Apple //c, when writing data sequentially, it's possible to write data at 3/4-track intervals and then read back previously written tracks.  For test purposes, I used a program that packs twelve double-high-res graphics pictures into the space of 27 normal tracks (2.25 tracks each) and allows random access via keyboard.  I likely could have used 15 if I'd had that many DHGR pictures handy.  This would likely not be reliable if tracks were being written by different drives at different times, and I'm not sure how reliable it would be for data written using one drive and read using another (I just have one drive on my Apple //c) but the fact that this works at all would suggest that it could be expected to be reliable if information were written on quality media using a drive specialized for the purpose--something that could have been really great for copy-protection purposes if a game would make use of data in a way that effectively required 200K to fit on a single disk (&amp;quot;normal&amp;quot; Apply formatting is 35 tracks of 16 sectors of 256 bytes, but the game Prince of Persia used a format that packed 4.5K bytes per track, which would allow 35 tracks to hold 157.5K); 200K would have exceeded that by a substantial margin.&lt;/p&gt;&#xA;&lt;p&gt;Were there any other floppy drive systems that offered quarter-track control, or high-density systems that offered half-track control, or was such ability unique to the Disk-II style systems?&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-01-03T19:21:31.640" Title="Did any 5.25&quot; floppy drives not based on the Apple Disk II offer quarter-track control" Tags="&lt;apple-ii&gt;&lt;floppy-disk&gt;&lt;floppy-drive&gt;" AnswerCount="2" CommentCount="25" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17245" PostTypeId="2" ParentId="17226" CreationDate="2020-12-09T17:47:50.460" Score="6" Body="&lt;p&gt;It goes deeper than just inventing another ISA, DEC being a hardware company that liked to invent ISA's, etc.    As people who have commented (and I can't respond since I'm new here) DEC had MIPS and VAX at the time but they also had a huge installed base of people who were running VMS on those VAXen who needed a path forward.&lt;/p&gt;&#xA;&lt;p&gt;There was a lot of work that went into Alpha, and the first shot at RISC known as PRISM,  to make sure that it could run VMS to give that installed base a path forward as everyone knew that the VAX architecture was running out of ways to make it faster.    And even though we were building RISC/Unix workstations and low-end servers out of MIPS products the word from the software guys was that VMS wasn't going to run on MIPS.   I often questioned that assumption and was told quite forcefully that there were issues.&lt;/p&gt;&#xA;&lt;p&gt;And the problem was that installed base of VMS.  If the customers were going to take the effort to switch from VAX/VMS to a RISC/Unix offering, a possible large undertaking, the hold that DEC had on them would vanish.  Because of the promise of an easy migration from one Unix to another, that customer  could be gone forever.  And that wasn't a solution that would fly.  Thus Alpha was green-lit.   And if you are going to invent a new ISA and bring it to market is there really a reason to have two (e.g. keep the MIPS stuff?)  of course not, that means designing two of everything and that would have been insane. So MIPS was dead at that point.&lt;/p&gt;&#xA;&lt;p&gt;And honestly the company had a really hard time convincing customers that they really NEEDED 64-bits but if you were designing a new architecture at that point in time you really had no choice but to make it a 64-bit processor.    Systems, at least at the high end, were starting to see memory approaching the 4GB limit with a 32-bit processor.  Certainly not on the low end (the VAXstation 4000 Model 60, which was my product, held I think 4 SIMMS that were 32MB and that was considered a LOT of memory at the time)  But everyone knew that the 4GB limit of 32-bit addressing was going to be short lived and the engineers gave us 64-bit, both in memory addressing and in arithmetic.    But when we were trying to sell the things to people, 64-bits didn't really mean anything to anyone other than the lunatic scientists who wanted to do 64-bit math.   (we even tried testing the  line that 64-bit addressing didn't matter as much as 34 bit or 36 because memory  was getting limited and bit applications like transaction processing were memory hogs.  It didn't work)&lt;/p&gt;&#xA;" OwnerUserId="20120" LastActivityDate="2020-12-09T17:47:50.460" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17246" PostTypeId="2" ParentId="17200" CreationDate="2020-12-09T19:24:53.313" Score="4" Body="&lt;p&gt;The IIgs has enough hardware to pull off pretty good software only speech using &lt;a href=&quot;https://www.whatisthe2gs.apple2.org.za/smoothtalker.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;SmoothTalker&lt;/a&gt;. The speech engine from SmoothTalker was used in a number of other IIgs programs including the &lt;em&gt;Talking&lt;/em&gt; series for &lt;a href=&quot;https://www.whatisthe2gs.apple2.org.za/reading.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;reading&lt;/a&gt; and &lt;a href=&quot;https://www.whatisthe2gs.apple2.org.za/maths.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;math&lt;/a&gt;. Even a &lt;a href=&quot;https://www.whatisthe2gs.apple2.org.za/microtype-the-wonderful-world-of-paws.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;typing program&lt;/a&gt; for the IIgs used speech, my daughter used it and the speech is pretty good by current standards.&lt;/p&gt;&#xA;" OwnerUserId="175" LastActivityDate="2020-12-09T19:24:53.313" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17247" PostTypeId="2" ParentId="17226" CreationDate="2020-12-09T23:00:16.790" Score="3" Body="&lt;p&gt;DEC as a systems company had lots of experience in creating high-performance memory and io systems along with multi CPU clustered systems.   All the above requires the ability to extent and modify a CPU including adding additional custom logic.&lt;/p&gt;&#xA;&lt;p&gt;At the time the only CPU vendor that let other companies change and extend CPU designs was ARM, hence computer companies had to choose between being a &amp;quot;systems integrator&amp;quot; or designing their own CPU.&lt;/p&gt;&#xA;&lt;p&gt;From the PC market, it had already become clear that system integrators had to give most of their profit to the CPU vendors and could mostly only compete on price with other system integrators.&lt;/p&gt;&#xA;&lt;p&gt;At the time, it was believed that complex instruction set processors could not complete with RISK - Intel and yet to prove that they could.   However, I question if DEC could have afforded the design costs Intel had done so.&lt;/p&gt;&#xA;&lt;p&gt;(If I recall correctly there was not a 64 bit ARM that DEC could use.)&lt;/p&gt;&#xA;" OwnerUserId="538" LastActivityDate="2020-12-09T23:00:16.790" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17248" PostTypeId="1" CreationDate="2020-12-10T02:14:23.160" Score="4" ViewCount="192" Body="&lt;p&gt;Among many modern &lt;a href=&quot;https://en.wikipedia.org/wiki/Disassembler#Examples_of_disassemblers&quot; rel=&quot;nofollow noreferrer&quot;&gt;disassembly/reverse engineering tools&lt;/a&gt;, has any been used to disassemble legacy code for a word-oriented mainframe, preferably with a non-power-of-2 word length, like &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_6600&quot; rel=&quot;nofollow noreferrer&quot;&gt;CDC 6600&lt;/a&gt; (60 bit) or &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-10&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-10&lt;/a&gt; (36 bit)? If so, is there an existing open source example of a plugin implementing such an architecture?&lt;/p&gt;&#xA;&lt;p&gt;(While some may infer a request for opinion from the above, please keep in mind that the phrasing of the question makes it a question of fact.)&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2020-12-10T18:59:28.940" LastActivityDate="2020-12-11T10:24:15.820" Title="Has a retargetable disassembler been used successfully for a word-oriented mainframe architecture?" Tags="&lt;mainframe&gt;&lt;software-recommendation&gt;&lt;disassembly&gt;" AnswerCount="1" CommentCount="16" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17249" PostTypeId="1" CreationDate="2020-12-10T05:48:07.837" Score="-1" ViewCount="470" Body="&lt;p&gt;The PlayStation, released in late 1995 in the West, was a magical console in a magical era. One of the magical things that made it so magical was the fact that it used cheap and thin CD-ROMs instead of expensive and thick cartridges. While this does have several downsides, it has one &lt;em&gt;serious&lt;/em&gt; upside:&lt;/p&gt;&#xA;&lt;p&gt;They were able to affordably press and include a &amp;quot;demo disc&amp;quot; for PlayStation owners with various magazines every month, each containing several playable demos of upcoming games. This truly blew my mind back then and was such a major change from having to invest 36 months of allowances into a single hit-or-miss game for the Nintendo consoles. There was something beautiful about a nice little disc full of digital candy being shrinkwrapped onto a magazine.&lt;/p&gt;&#xA;&lt;p&gt;While the Saturn also was CD-ROM-based, I can't recall ever seeing a single demo disc for my Saturn besides the one that it shipped with, so the PlayStation was unique in this regard. I remember buying magazines for the sole purpose of getting to play the demos on the demo discs. As a bonus, I got a magazine to read! And for a fraction of the price of the impossibly (to me) expensive new retail games. Hell, even compared to the second-hand full games.&lt;/p&gt;&#xA;&lt;p&gt;I only ever ended up owning a very small number of actual PS games, and those I got were bought second-hand or after they had hit the far cheaper re-release edition. My major experiences were playing the demos over and over, more as tech demos than me actually caring too much about them being actual video games which I had any interest in &amp;quot;beating&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I can very much imagine that this applied to many others as well, and I'm sure that some were even more extreme than I, and didn't ever buy a single game. Maybe it's difficult to find reliable statistics on this, but I would be very interested in hearing if it's known how many people did or might have done this.&lt;/p&gt;&#xA;&lt;p&gt;Note that I'm only caring about the original PlayStation -- not the PS2 or later.&lt;/p&gt;&#xA;" OwnerUserId="20124" LastActivityDate="2020-12-10T19:01:40.410" Title="How common was it for people who owned a PlayStation back in the day to never actually buy games, but only play demo discs?" Tags="&lt;sony-playstation&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ClosedDate="2020-12-10T22:08:35.457" ContentLicense="CC BY-SA 4.0" />
  <row Id="17250" PostTypeId="2" ParentId="17249" CreationDate="2020-12-10T15:40:35.307" Score="8" Body="&lt;p&gt;Sony claims that it sold 102.4 million PlayStations. The best reported number I can find is that a total of 962 million games were sold. So that's an average of about 9.4 games per machine sold, with the best selling single title being Gran Turismo at 10.85 million (i.e. 10.6% as many copies sold as systems).&lt;/p&gt;&#xA;&lt;p&gt;I couldn't find any further breakdown on that — e.g. attach rate by year, or any sort of standard deviation.&lt;/p&gt;&#xA;&lt;p&gt;I therefore don't think there's an objective answer to your question, but as to its potential implication an attach rate of 9.4 is considered to be pretty successful. For comparison the NES managed only 8.08, the Game Boy 4.22, and the Nintendo 64 achieved 6.83.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2020-12-10T19:01:40.410" LastActivityDate="2020-12-10T19:01:40.410" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17251" PostTypeId="2" ParentId="16609" CreationDate="2020-12-10T16:12:41.920" Score="2" Body="&lt;p&gt;Many NES-recreation consoles work by reading the entire contents of a cartridge on startup and then playing the copied data in an emulator, except that if the emulator recognizes actions which are supposed to write to non-volatile storage on a cartridge it may use the hardware to update the contents of the physically-installed cartridge.&lt;/p&gt;&#xA;&lt;p&gt;A major limitation of this approach, and with software-based emulation in general, is that while a modern processor like an ARM can on average emulate 6502 instructions much faster than an actual 6502 could run them, it cannot achieve such performance with every individual operation.  Generally, emulators will process a sequence of instructions that don't involve any display or sound updates much faster than a 6502, but then have to spend some time processing display updates without executing any instructions.  This is fine if the emulator doesn't have to interact with actual hardware while this is going on, but not when using actual cartridges &amp;quot;live&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;If the software on a cartridge would expect to send a command to the cartridge which would then allow the CPU to fetch and execute 59,552 bytes/frame of content that hasn't been read from the cartridge previously, the only way that would happen would be if the hardware can access bytes from the cartridge every 139.6 nanoseconds.  If the emulator knew what data the cartridge would report, it might be able to process that data faster on average, and thus process all 59,552 bytes within a frame time even if it sometimes busy for a millisecond or so processing graphics or sound without emulating any instructions.  If the emulator doesn't have the data available, however, its &lt;em&gt;peak&lt;/em&gt; speed will be limited to the the 139ns/byte rate that cartridges are designed to support.&lt;/p&gt;&#xA;&lt;p&gt;Some NES-recreation consoles use a different kind of chip called an FPGA.  An FPGA (&amp;quot;field programmable gate array&amp;quot;) is a device that overlaps two functional layers of circuitry: a collection of logic elements which are connected by grids of wires connected by switches, and some &amp;quot;programming&amp;quot; hardware which can selectively close the switches at various connection points.  Unlike a CPU which one task (or, for a multi-core CPU, a few tasks) at a time, all parts of an FPGA can operate simultaneously.  As a result, an FPGA-based recreation of the NES would be able to perform all individual operations at precisely the same speed as a real NES.&lt;/p&gt;&#xA;&lt;p&gt;Although the Everdrive is a cartridge rather than a console, it uses an FPGA to recreate the behavior of a wide range of game cartridges with timings that match the original.&#xA;Further, if there is a cartridge whose behavior isn't understood by the Everdrive today, its FPGA can be reconfigured to behave like the original by feeding it a different &amp;quot;fusemap&amp;quot; [set of information about which configuration switches to open and close].&#xA;Although it might be possible to design an emulator-based (non-FPGA) console to work with an Everdrive to load games whose physical behavior the emulator understands, it would have no way to accommodate a game whose cartridge behavior it didn't understand, but for which the Everdrive had a fuse map.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-12-10T16:12:41.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17252" PostTypeId="2" ParentId="9678" CreationDate="2020-12-10T17:40:43.250" Score="5" Body="&lt;p&gt;This isn't intended as an answer per se, but I want to provide some support for &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/576/omarl&quot;&gt;OmarL&lt;/a&gt;'s &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/9679/&quot;&gt;explanation&lt;/a&gt; by quoting official documentation for the machine, which speaks of binary values as units of information rather than as digits of a base-2 number.&lt;/p&gt;&#xA;&lt;p&gt;Here is how the &lt;a href=&quot;http://bitsavers.org/pdf/ibm/650/22-6284-1_650_CE_Manual_of_Instruction.pdf&quot; rel=&quot;noreferrer&quot;&gt;IBM 650 Customer Engineering Manual of Instruction&lt;/a&gt; describes the machine's representation of numbers:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h1&gt;Number Systems for Digit Representation&lt;/h1&gt;&#xA;&lt;p&gt;A recorded magnetic spot is essentially a binary storage device, because it may have&#xA;either of two magnetic polarities depending on the direction of current flow through the&#xA;writing head at the time the spot is written. Polarization in one direction is take to&#xA;mean a binary &lt;em&gt;1&lt;/em&gt;, while the opposite direction means a binary &lt;em&gt;0&lt;/em&gt;. Some system must be&#xA;used so that a combination of these binary devices can represent the decimal digits 0&#xA;through 9.&lt;/p&gt;&#xA;&lt;p&gt;In the 650 two such systems are used. The two-out-of-seven, bi-quinary, system is used for&#xA;Read Buffer Storage (RBS) and Punch Buffer Storage (PBS) and the arithmetic units. The&#xA;two-out-of-five system is used for general storage.&lt;/p&gt;&#xA;&lt;p&gt;Figure I-1 shows how the bi-quinary system combines several binary &lt;em&gt;1&lt;/em&gt; indications from&#xA;two of seven parallel devices to represent each of the ten decimal digits. In the case of&#xA;the read and punch buffer storages, the binary devices are recorded magnetic spots on&#xA;seven parallel tracks. Successive &lt;em&gt;1&lt;/em&gt; indications from the various combinations of two of&#xA;the seven tracks during successive digit time intervals will indicate serially the decimal&#xA;values of the digits of a word. In the case of the arithmetic units the paralleled binary&#xA;devices are capacitor storage units. Seven parallel capacitors are used to represent each&#xA;of the ten digits of a word. Each row is tested at its digit time by impulses from a&#xA;drum-driven timing ring. Binary &lt;em&gt;1&lt;/em&gt; indications from two of the seven capcitors will&#xA;indicate the decimal value of the digit.&lt;/p&gt;&#xA;&lt;p&gt;Notice that the bi-quinary system requires that there be a &lt;em&gt;1&lt;/em&gt; indication from one and&#xA;&lt;em&gt;only&lt;/em&gt; one of the binary indicating devices in each of the two levels. It is this unique&#xA;characteristic of the bi-quinary system that makes it easily adaptable to self-checking&#xA;arrangements.&lt;/p&gt;&#xA;&lt;p&gt;Notice also that the binary level indication determines whether the quinary level&#xA;indication is to be read as it is or have five added to it to determine the deceimal&#xA;value. This above- or below-five characteristic of the system makes it easily adaptable to&#xA;calculating circuitry.&lt;/p&gt;&#xA;&lt;p&gt;Figure I-2 shows how the two-of-five system combines different binary &lt;em&gt;1&lt;/em&gt; indications from&#xA;two-of-five parallel devices to represent each of the ten decimal digits. This system is&#xA;used only for general storage largely because of the saving of heads and circuits that it&#xA;affords. This system requires that all information entering general storage passes through&#xA;a seven-to-five conversion matrix and that all information leaving general storage passes&#xA;through a five-to-seven conversion matrix.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0axdZ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0axdZ.png&quot; alt=&quot;Figure I-1 from the linked document&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vfrAw.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vfrAw.png&quot; alt=&quot;Figure I-2 from the linked document&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note that it doesn't speak of binary digits at all. It does use &lt;em&gt;1&lt;/em&gt; and &lt;em&gt;0&lt;/em&gt; to denote the states of binary devices, but they aren't interpreted as numbers.&lt;/p&gt;&#xA;&lt;p&gt;That document also includes many schematics and diagrams that you might find interesting.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Here is what the &lt;a href=&quot;http://bitsavers.org/pdf/ibm/650/22-6060-2_650_OperMan.pdf&quot; rel=&quot;noreferrer&quot;&gt;IBM 650 Operation Manual&lt;/a&gt; says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h1&gt;Bi-quinary code&lt;/h1&gt;&#xA;&lt;p&gt;The type 650 translates the decimal-digit representation of the input data into bi-quinary&#xA;digit representation for internal transmission and use.&lt;/p&gt;&#xA;&lt;p&gt;The bi-quinary code makes use of seven possible units of information. Two of these units&#xA;(or bits) are known as the binary portion of the code and have the assigned values of 0&#xA;and 5 (Figure 12). The remaining five units are known as the quinary portion of the code&#xA;and have the assigned values of 0, 1, 2, 3, and 4 (Figure 12).&lt;/p&gt;&#xA;&lt;p&gt;When this code is used, all digits 0–9 are represented by the combinary of one binary&#xA;unit and one quinary unit of information (Figure 13). Because of this condition, it is&#xA;possible to check for valid information. This checking is known as &lt;em&gt;validity checking&lt;/em&gt; and&#xA;will be discussed under that topic.&lt;/p&gt;&#xA;&lt;p&gt;Signs of numbers are translated internally into a digit 9 for plus and a digit 8 for minus&#xA;to enable ehecking of their validity.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rs0io.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rs0io.png&quot; alt=&quot;Figure 12 from linked document&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/XVsQd.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XVsQd.png&quot; alt=&quot;Figure 13 from linked document&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The term &amp;quot;bit&amp;quot; is mentioned but not used.&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2020-12-10T17:40:43.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17253" PostTypeId="2" ParentId="9678" CreationDate="2020-12-10T21:33:14.723" Score="5" Body="&lt;p&gt;Storing a one-of-two selection using vacuum tube technology doesn't require one valve (combination of an anode, cathode, and one or more grids); it requires two.  Thus, holding four bits would require eight valves.  Because a one-of-five selection can be held with five tubes, holding a one-of-five selection plus a bit will require seven tubes.&lt;/p&gt;&#xA;&lt;p&gt;Note that from an information-density standpoint, ternary notation would in many ways be ideal, since a pair of one-of-three selections would require six valves, which is the same number that would be required to hold three bits, but would have nine available states rather than eight.  Using 36 valves as twelve one-of-three selections would allow a system to select one of 531,441 different states; using 38 valves as nineteen bits, by contrast, would only allow selection of 524,288 different states despite the fact that it would need two more valves.  Using five valves to hold a one-of-five selection yields an information density lower than binary (a one-of-five selection is equivalent to 2.32 bits, but would take as many valves as storing 2.5 bits), but if one needs a circuit to hold 3.32 bits of information, using a bit plus a one-of-five selection will be cheaper than using four bits but only using them to hold a one-of-ten selection.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-12-10T21:33:14.723" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17254" PostTypeId="2" ParentId="17200" CreationDate="2020-12-11T03:47:13.793" Score="2" Body="&lt;p&gt;The early days of audio on IBM PC compatibles have a few examples of speech synthesis. These qualify for your 16-bit category as the 8088 and 80286 were 16-bit CPUs (though the 8088 was crippled by an 8-bit data bus).&lt;/p&gt;&#xA;&lt;p&gt;The Covox Speech Thing was a parallel port DAC intended to be used with software-based speech synthesis. I assume such a program came with it, given that while there were a decent number of programs that supported it, I never ran across anything to do with speech synthesis.&lt;/p&gt;&#xA;&lt;p&gt;Creative Labs shipped a program called Dr Sbaitso with the original Sound Blaster cards. It was essentially an ELIZA chat-bot coupled to a speech synthesiser (all done in software). Being an 8-bit ISA card that worked in an original 16-bit IBM PC, this definitely qualifies.&lt;/p&gt;&#xA;&lt;p&gt;The later Sound Blaster 16 ASP and Sound Blaster AWE32 included the Advanced Signal Processor chip, which provided hardware-accelerated speech synthesis capabilities, but didn't get much, if any, use outside of Creative's own software. Whether these two qualify is debatable, given they're 16-bit ISA cards that probably would work in a 286, but which came out when everyone was using 32-bit 386 or 486 CPUs.&lt;/p&gt;&#xA;&lt;p&gt;The OPL2 FM synthesiser chip that powered the Adlib and early Sound Blaster cards' music capabilities included a Composite Sine Modelling mode that could be used for hardware-assisted speech synthesis, but as far as I know it was never used. Adlib's programming guide from 1987 mentions the feature, then promptly dismisses it saying there are better-quality methods available.&lt;/p&gt;&#xA;&lt;p&gt;There were certainly a few programs that could produce speech through the PC Speaker, but I have no idea if they were synthesising it or just playing back samples, and I don't remember any names, anyway.&lt;/p&gt;&#xA;" OwnerUserId="17800" LastActivityDate="2020-12-11T03:47:13.793" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17255" PostTypeId="1" AcceptedAnswerId="17257" CreationDate="2020-12-11T07:13:48.767" Score="7" ViewCount="647" Body="&lt;p&gt;Reading &lt;em&gt;Alan Sugar : The Amstrad Story&lt;/em&gt;, I just came across one of those little oddities that initially manifest as 'huh, wait a minute' and sometimes just mean someone has made a typo, and sometimes point out something I have fundamentally misunderstood about historical events.&lt;/p&gt;&#xA;&lt;p&gt;On page 190:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sinclair had sold over 5 million computers, including more than 1 million Spectrums, its flagship product.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This was in 1986.&lt;/p&gt;&#xA;&lt;p&gt;Wait a minute. What other computer could Sinclair have sold the other 4 million of? I was under the impression it sold a few million Spectrums, maybe 100,000 each of the ZX80 and ZX81, and not very many of the QL which was basically a flop.&lt;/p&gt;&#xA;&lt;p&gt;Maybe it was just a typo and the 1 in the above quote should read 4? Then the figures would make sense; 4 million Spectrums and a few hundred thousand of everything else. Or have I been missing something important about the history of the company?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-11T19:37:05.670" Title="What non-Spectrum computers did Sinclair sell 4 million of?" Tags="&lt;history&gt;&lt;zx-spectrum&gt;&lt;sinclair&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17256" PostTypeId="2" ParentId="17248" CreationDate="2020-12-11T10:24:15.820" Score="4" Body="&lt;p&gt;Disclaimer: I work for Hex-Rays.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.hex-rays.com/products/ida/processors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;IDA Pro by Hex-Rays&lt;/a&gt; supports disassembly of several processor families with “wide instruction words”, for example:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;PDP-11 (16-bit instructions)&lt;/li&gt;&#xA;&lt;li&gt;PIC (12-, 14- and 16-bit instruction sizes)&lt;/li&gt;&#xA;&lt;li&gt;Various DSPs from AD, TI and Motorola (generally 16 to 48 bits)&lt;/li&gt;&#xA;&lt;li&gt;Itanium (VLIW, 128-bit instruction bundles)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;(There are probably more that escape my mind at the moment.)&lt;/p&gt;&#xA;&lt;p&gt;It was also used to handle an esoteric ISA called cLEMENCy specifically invented for a CTF (capture the flag) contest, with a &lt;strong&gt;9-bit&lt;/strong&gt; byte size and middle-endian byte order:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/cseagle/ida_clemency&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/cseagle/ida_clemency&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In short, if IDA does not handle it, you can probably write a module to do it.&lt;/p&gt;&#xA;" OwnerUserId="3783" LastActivityDate="2020-12-11T10:24:15.820" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17257" PostTypeId="2" ParentId="17255" CreationDate="2020-12-11T10:56:38.187" Score="9" Body="&lt;p&gt;##TL;DR:&lt;/p&gt;&#xA;&lt;p&gt;Not really sure where this claim of over 5 M computers, including 1 M Spectrum comes from. While still not correct, it would sound more believable the other way around, as 5 M units, including &lt;strong&gt;4 M of Spectrums&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So my guess is, that it's for one a very rough number, but more important the author simply used the wrong label for the additior.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Deails:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What other computer could Sinclair have sold the other 4 million of?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While I'm not sure that any other computer sold 4 million by itself, adding the ZX80/81 and QL up should end up way higherat least around 1,8-2M&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I was under the impression it sold a few million Spectrums,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The Spectrum, all versions combined, did sell well beyond 4 Million (&lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki&lt;/a&gt; tells more than 5 Million), so it can't be included (*1).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;maybe 100,000 each of the ZX80 and ZX81,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The 100k is fine for just the ZX80 (&lt;a href=&quot;https://en.wikipedia.org/wiki/ZX80&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki&lt;/a&gt;). The ZX81 sold at least 1.5M (&lt;a href=&quot;https://en.wikipedia.org/wiki/ZX81&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki&lt;/a&gt;) and this might not include the kits.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17255/what-non-spectrum-computers-did-sinclair-sell-4-million-of/17257#comment58700_17257&quot;&gt;LaconicDroid mentions&lt;/a&gt; 50,000 MK-14 in addition, way less than a million, but a quite surprising number.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and not very many of the QL&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Oh, quite contraire. Here again the sells were way past a million (&lt;a href=&quot;https://en.wikipedia.org/wiki/Sinclair_QL&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki&lt;/a&gt; tells 150k).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;which was basically a flop.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Flop it was maybe in relative terms compared to Atari ST's, Amigas, or upcoming (Home) PC. I'd call that quite successful. Its tainted image is rater due delays and early faults.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Well, it gets fuzzy here, as the question does not point out if the number of Spectrum mentioned (1M) is about total sales of all model, or only until Amstrad bought them.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-11T19:37:05.670" LastActivityDate="2020-12-11T19:37:05.670" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="17259" PostTypeId="1" CreationDate="2020-12-11T15:53:00.340" Score="1" ViewCount="205" Body="&lt;p&gt;I work in network design/IT for a church, and a someone came in with a AST Advantage Explorer 486SX/33. It looks like it has no OS. After failing to boot, it requests to go to the BIOS to look for an OS. No CD-ROM, just Floppy. How would I get started in getting this thing back up and running, for a fun project?&lt;/p&gt;&#xA;" OwnerUserId="20133" LastEditorUserId="611" LastEditDate="2020-12-11T18:18:25.180" LastActivityDate="2020-12-14T15:31:28.993" Title="AST Laptop With No OS" Tags="&lt;floppy-disk&gt;&lt;operating-system&gt;&lt;laptop&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17260" PostTypeId="2" ParentId="17259" CreationDate="2020-12-11T16:10:14.047" Score="1" Body="&lt;ul&gt;&#xA;&lt;li&gt;Find someone with a floppy drive and controller, make some floppy disks for it (for example, I could make you some, but I doubt you live near me).&lt;/li&gt;&#xA;&lt;li&gt;Does it have a harddisk? Is it an IDE harddisk? Take harddisk out, hook up the harddisk to some other computer with IDE interface (or buy an USB-to-IDE interface), format the harddisk with an OS.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Finding disk images shouldn't be too hard, search a bit. Or you can use &lt;a href=&quot;https://www.freedos.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FreeDOS&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;And if it doesn't have a CD, and doesn't boot from the harddisk (you still haven't told us if it has a harddisk or not), then no, putting ISO images on some kind of media won't get you anywhere. That's not how things worked back then.&lt;/p&gt;&#xA;&lt;p&gt;If you manage to get an OS up and running, you may be able to install a driver that's able to read ISO images, but you certainly cannot boot from them.&lt;/p&gt;&#xA;&lt;p&gt;And if it doesn't have a harddisk, but an IDE socket, you could try an IDE-to-SD-card adapter, you you want to use an SD card. Again, you'll have to format the SD card properly on another computer.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-12-11T18:05:49.343" LastActivityDate="2020-12-11T18:05:49.343" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="17261" PostTypeId="1" CreationDate="2020-12-11T21:13:13.313" Score="3" ViewCount="226" Body="&lt;p&gt;When I was a kid, probably around 1990-1992, I was at my cousins' house and they played NES. I vividly remember a side-scrolling stage which either was dark the whole time, or alternated between being dark and bright, with spotlights or searchlights that you had to avoid.&lt;/p&gt;&#xA;&lt;p&gt;Ever since, I've been trying to figure out what game that was.&lt;/p&gt;&#xA;&lt;p&gt;My suspicions were &amp;quot;Metal Gear&amp;quot; and &amp;quot;Mission Impossible&amp;quot;. However, I've previously (and now) looked at playthrough videos of those games and could not spot that stage.&lt;/p&gt;&#xA;&lt;p&gt;I believe it was not the very first stage, but at the very least the second, or &amp;quot;well into the game&amp;quot;. Might even be one of last, if not &lt;em&gt;the&lt;/em&gt; very last stage.&lt;/p&gt;&#xA;&lt;p&gt;Can you help me figure out which game this was? I want to revisit that area in particular, and it's really frustrating to not know what the game was called.&lt;/p&gt;&#xA;&lt;p&gt;I frustratingly cannot remember anything else besides that level. I don't think it was a very obscure game, and it may still be one of the titles I mentioned above, and I just somehow missed it.&lt;/p&gt;&#xA;" OwnerUserId="20136" LastActivityDate="2020-12-11T21:21:40.760" Title="What stealthy NES game had that profile-view darkness/searchlight area?" Tags="&lt;nes&gt;&lt;identify-this-game&gt;&lt;game&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17262" PostTypeId="2" ParentId="17261" CreationDate="2020-12-11T21:21:40.760" Score="2" Body="&lt;p&gt;Could it possibly be &lt;a href=&quot;https://youtu.be/fzATD1D6yyQ?t=77&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rescue - The Embassy Mission&lt;/a&gt; (Youtube link, cued up)? That's the retitled NES port of the Infogrames title &lt;a href=&quot;https://en.wikipedia.org/wiki/Hostages_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hostages&lt;/a&gt;; it plays as a series of minigames with spotlight avoidance being one of them.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-12-11T21:21:40.760" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17263" PostTypeId="2" ParentId="16957" CreationDate="2020-12-11T22:30:21.120" Score="2" Body="&lt;p&gt;I know of a few people doing this, or at least things much like it. I have found a few links, in case they help.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikibooks.org/wiki/QEMU/SunOS_4.1.4&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikibooks.org/wiki/QEMU/SunOS_4.1.4&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://defcon.no/sysadm/playing-with-sunos-4-1-4-on-qemu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://defcon.no/sysadm/playing-with-sunos-4-1-4-on-qemu/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;found via &lt;a href=&quot;https://virtuallyfun.com/wordpress/2013/12/05/qemu-sunos-4-1-4/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://virtuallyfun.com/wordpress/2013/12/05/qemu-sunos-4-1-4/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;or in case you like videos: &lt;a href=&quot;https://www.dailymotion.com/video/x216hbh&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.dailymotion.com/video/x216hbh&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Any of these any help at all?&lt;/p&gt;&#xA;&lt;p&gt;If not, I would suggest asking on the SunRescue or ClassicCmp.org mailing lists.&lt;/p&gt;&#xA;" OwnerUserId="209" LastActivityDate="2020-12-11T22:30:21.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17264" PostTypeId="1" AcceptedAnswerId="17275" CreationDate="2020-12-12T20:11:39.263" Score="7" ViewCount="2128" Body="&lt;p&gt;An interesting feature of the Apple II was that it had three rows of sockets for RAM chips, each of which could take either 4k or 16k chips. That meant the minimum configuration was 4K (cheap) but it could be expanded in increments all the way up to 48K (enough to get useful work done).&lt;/p&gt;&#xA;&lt;p&gt;Were any computers ever released that did the same trick with 16k vs 64k chips? I could imagine that being useful in the late seventies to early eighties, though it might be technically trickier due to some of the pins being used differently, as described in the answers to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5245/can-a-16k-computer-be-upgraded-to-64k&quot;&gt;Can a 16K computer be upgraded to 64K?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;To be clear, I'm talking about sockets on the main board, that could take either kind of RAM chip. There were certainly computers like the IBM PC that could take either kind by virtue of being able to take memory in expansion cards; that's a different thing.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-14T13:39:18.250" Title="Could any computers use 16k or 64k RAM chips?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;memory&gt;&lt;chip&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17265" PostTypeId="2" ParentId="17264" CreationDate="2020-12-12T20:48:54.530" Score="11" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Siemens_PC-D&quot; rel=&quot;nofollow noreferrer&quot;&gt;Siemens PC-D&lt;/a&gt;, a 186 based DOS machine (*1) has 32 sockets to be either populated by 64 Ki chips or 256 Ki, allowing memory configurations from 128 KiB up to 1 MiB:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Two rows of 4164 (8 each) -&amp;gt; 128 KiB&lt;/li&gt;&#xA;&lt;li&gt;Four rows of 4164 -&amp;gt; 256 KiB (*2)&lt;/li&gt;&#xA;&lt;li&gt;Two rows of 41256 -&amp;gt; 512 KiB&lt;/li&gt;&#xA;&lt;li&gt;Four rows of 41256 -&amp;gt; 1024 KiB&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Selection was done by a single DIP switch, that did feed several PAL generating/routing the signals.&lt;/p&gt;&#xA;&lt;p&gt;Since all chip position were socketed, a field upgrade could be done without the need to (un)solder, much the same way as with the Apple II.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Originally developed as a Unix workstation, but soon, with the MMU removed, successful  marketed as DOS computer.&lt;/p&gt;&#xA;&lt;p&gt;*2 - There was also an upgrade version with a 256 KiB daughter board, using 4164, plugged into the MMU connectors to bring a 256 KiB setup up to 512 KiB without pulling the existign chips - after all, at that time (1984), 4164 still held considerable value.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-13T13:46:21.553" LastActivityDate="2020-12-13T13:46:21.553" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17266" PostTypeId="2" ParentId="2770" CreationDate="2020-12-12T22:48:06.887" Score="4" Body="&lt;p&gt;A major advantage of plastic over ceramic is that ceramics are slightly radioactive. An alpha particle can change the value of a bit stored in memory, and cause errors in programming.  Because of work by physicists Timmothy C. May, and M.H.Woods in 1979, computers chips use plastic over ceramics, whenever possible.&lt;/p&gt;&#xA;" OwnerUserId="20144" LastActivityDate="2020-12-12T22:48:06.887" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17267" PostTypeId="1" AcceptedAnswerId="17274" CreationDate="2020-12-12T23:44:13.873" Score="9" ViewCount="1177" Body="&lt;p&gt;I have a very simple problem with is turning out to be surprisingly complex to solve.&lt;/p&gt;&#xA;&lt;p&gt;I wish to add two bytes using modulus arithmetic, where the modulus is known at compile time. e.g. given modulus 5, 3+3 = 1. The specific number I have currently for the modulus is 201, but that might change in the future.&lt;/p&gt;&#xA;&lt;p&gt;On fast computers, this is just &lt;code&gt;(x+y) % modulus&lt;/code&gt;. Except, this requires extending the intermediate values to words, to avoid overflow, and then doing a division, which I'd very much like to avoid (this is going to be happening rather a lot). The other option is to try and redefine my problem so that &lt;code&gt;modulus&lt;/code&gt; is a power of two, and then just masking the result... but I can't do that in this case.&lt;/p&gt;&#xA;&lt;p&gt;Are there any cunning tricks for doing this on the 6502 which someone can suggest?&lt;/p&gt;&#xA;" OwnerUserId="6846" LastActivityDate="2020-12-14T00:28:02.173" Title="Modulus arithmetic on the 6502" Tags="&lt;6502&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17270" PostTypeId="2" ParentId="17267" CreationDate="2020-12-13T00:32:25.073" Score="7" Body="&lt;p&gt;The easiest solution is to assume they're both below &lt;code&gt;modulus&lt;/code&gt; already, then do &lt;code&gt;if (result &amp;gt;= modulus) result -= modulus;&lt;/code&gt; – same as the method in the question, but with faster subtraction (or addition) instead of division.&lt;/p&gt;&#xA;&lt;p&gt;Since &lt;code&gt;210&lt;/code&gt; is between &lt;code&gt;128&lt;/code&gt; and &lt;code&gt;256&lt;/code&gt;, this is even easier. I don't know 6502, so here's some fake C:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;const mod = 210;&#xA;&#xA;char sum_mod(char a, char b) {&#xA;            a = a + b;&#xA;            if (!CARRY) goto later;&#xA;            a -= mod;&#xA;            if (!CARRY) goto again;&#xA;    later:  COMPARE(a, mod);&#xA;            if (!(a &amp;gt; mod)) goto after;&#xA;    again:  a -= mod;&#xA;    after:  return a;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;For modulus less than 128, you'd need to compare and subtract successively smaller &lt;code&gt;(mod &amp;lt;&amp;lt; n)&lt;/code&gt;, after the overflow check. The overflow check should use the largest &lt;code&gt;(mod &amp;lt;&amp;lt; n)&lt;/code&gt; (i.e., the largest less than &lt;code&gt;256&lt;/code&gt;; including as the &lt;code&gt;again&lt;/code&gt; target), because the important part is just to get it back under the overflow threshold so normal mathematics works again.&lt;/p&gt;&#xA;&lt;h2&gt;Explanation&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Theoretical&lt;/em&gt; &lt;code&gt;a + b&lt;/code&gt; might be:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;gt;= 0&lt;/code&gt; and &lt;code&gt;&amp;lt; mod&lt;/code&gt;: both of the conditional jumps encountered will be followed, and &lt;code&gt;a + b&lt;/code&gt; will be returned.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;gt; mod&lt;/code&gt; but &lt;code&gt;&amp;lt; 256&lt;/code&gt;: the carry flag is not set, so the &lt;code&gt;later&lt;/code&gt; jump will be followed, but neither the &lt;code&gt;again&lt;/code&gt; nor &lt;code&gt;after&lt;/code&gt; jump will; this means that &lt;code&gt;a + b - mod&lt;/code&gt; will be returned.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;gt; 255&lt;/code&gt; and &lt;code&gt;&amp;lt; 2 * mod&lt;/code&gt;: the carry flag is set, so the &lt;code&gt;later&lt;/code&gt; jump won't be followed, and then the &lt;code&gt;after&lt;/code&gt; jump will; this means that &lt;code&gt;a + b - mod&lt;/code&gt; will be returned.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;gt;= 2 * mod&lt;/code&gt; and &lt;code&gt;&amp;lt; mod + 256&lt;/code&gt;: no jump will be followed, so &lt;code&gt;a + b - 2 * mod&lt;/code&gt; will be returned.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;gt; mod + 255&lt;/code&gt; and &lt;code&gt;&amp;lt; 511&lt;/code&gt;: &lt;code&gt;again&lt;/code&gt; will be followed, so &lt;code&gt;a + b - 2 * mod&lt;/code&gt; will be returned.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks to &lt;a href=&quot;/users/6659&quot;&gt;Raffzahn&lt;/a&gt; for pointing out the need for the &lt;code&gt;again&lt;/code&gt; jump. (And sorry for the useless label names.)&lt;/p&gt;&#xA;" OwnerUserId="278" LastEditorUserId="278" LastEditDate="2020-12-13T12:24:38.580" LastActivityDate="2020-12-13T12:24:38.580" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17271" PostTypeId="1" CreationDate="2020-12-13T00:38:22.777" Score="1" ViewCount="65" Body="&lt;p&gt;I would like to convert an assembler program in ca65 with macros into assembler code with resolved macros in order to carry out manual or automatic optimizations with the resulting code. Then, the assembler program should be assembled into object code/executable code.&lt;/p&gt;&#xA;&lt;p&gt;Is there an option or macro for ca65 to make it run only the macro pre-processor?&lt;/p&gt;&#xA;&lt;p&gt;I'm assembling with&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ca65 myprog.s&#xA;cl65 myprog.o -C c64-asm.cfg -u __EXEHDR__ -o myprog.prg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or using cl65 in one step&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cl65 myprog.s -C c64-asm.cfg -u __EXEHDR__ -o myprog.prg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Mini example for myprog.s with macros:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;loop:   inc $D021&#xA;        .repeat 20&#xA;        nop&#xA;        .endrep&#xA;        jmp loop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2020-12-13T00:38:22.777" Title="Run ca65 assembler with intermediate step of resolving macros" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;cc65&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17272" PostTypeId="2" ParentId="17267" CreationDate="2020-12-13T02:12:48.583" Score="2" Body="&lt;p&gt;Given the assumption that 0 &amp;lt; A &amp;lt; modulus and 0 &amp;lt; B &amp;lt; modulus, than the following routine for 6502 (following the suggested algorithm of wizzwizz4) does the job:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MODULUS=201&#xA;varA=$FC&#xA;varB=$FD&#xA;&#xA;;add two numbers A and B given in memory address&#xA;;numbers A and B must be &amp;lt; MODULUS&#xA;;returns with the value (A+B) mod MODULUS in Accu&#xA;&#xA;        clc&#xA;        lda varA&#xA;        adc varB&#xA;        ;we only need this if the added numbers could overflow&#xA;        .if MODULUS&amp;gt;=128&#xA;        bcc no_overflow&#xA;        sbc #MODULUS&#xA;        rts&#xA;        .endif&#xA;no_overflow:&#xA;        cmp #MODULUS&#xA;        bcc exit&#xA;        sbc #MODULUS ;carry is 1 because of past two lines&#xA;exit:&#xA;        rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I tested several combinations of modulus, A and B with a BASIC program&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 FORM=5TO255STEP37&#xA;20 POKE49160,M:POKE49163,M:POKE49167,M&#xA;30 FORA=1TOM-1STEP1+INT(M/37)&#xA;40 FORB=4TOM-1STEP1+INT(M/26)&#xA;50 POKE252,A:POKE253,B:SYS49152&#xA;60 C=PEEK(780)&#xA;70 D=A+B:IFD&amp;gt;=MTHEND=D-M&#xA;80 IFC&amp;lt;&amp;gt;DTHEN PRINTM;A,B,C,D:END&#xA;90 NEXTB,A,M&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;finding it working in all tested cases.&lt;/p&gt;&#xA;&lt;p&gt;Shortened version hinted by David:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MODULUS=201&#xA;varA=$FC&#xA;varB=$FD&#xA;&#xA;;add two numbers A and B given in memory address&#xA;;numbers A and B must be &amp;lt; MODULUS&#xA;;returns with the value (A+B) mod MODULUS in Accu&#xA;        clc&#xA;        lda varA&#xA;        adc varB&#xA;        ;we only need this if the added numbers could overflow&#xA;        .if MODULUS&amp;gt;=128&#xA;        bcs overflow&#xA;        .endif&#xA;        cmp #MODULUS&#xA;        bcc exit&#xA;overflow:&#xA;        sbc #MODULUS ;carry is already set&#xA;exit:&#xA;        rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Automatic testing program for second version:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 FORM=5TO255STEP37&#xA;20 POKE49160,M:POKE49164,M&#xA;30 FORA=1TOM-1STEP1+INT(M/37)&#xA;40 FORB=4TOM-1STEP1+INT(M/26)&#xA;50 POKE252,A:POKE253,B:SYS49152&#xA;60 C=PEEK(780)&#xA;70 D=A+B:IFD&amp;gt;=MTHEND=D-M&#xA;80 IFC&amp;lt;&amp;gt;DTHEN PRINTM;A,B,C,D:END&#xA;90 NEXTB,A,M&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Some example testcases for manual testing:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;A=0, B=0 -&amp;gt; (A+B)%201=0&#xA;A=1, B=1 -&amp;gt; (A+B)%201=2&#xA;A=100, B=100 -&amp;gt; (A+B)%201=200&#xA;A=101, B=100 -&amp;gt; (A+B)%201=0&#xA;A=200, B=0 -&amp;gt; (A+B)%201=200&#xA;A=200, B=1 -&amp;gt; (A+B)%201=0&#xA;A=200, B=200 -&amp;gt; (A+B)%201=199&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2020-12-14T00:28:02.173" LastActivityDate="2020-12-14T00:28:02.173" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17273" PostTypeId="2" ParentId="2770" CreationDate="2020-12-13T03:01:45.877" Score="2" Body="&lt;p&gt;It used to be the case that ceramic packages were preferred for aerospace applications because it was believed that they were more reliable.  This changed in about 1990 IIRC when researchers found that there was no significant difference.&lt;/p&gt;&#xA;" OwnerUserId="19372" LastActivityDate="2020-12-13T03:01:45.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17274" PostTypeId="2" ParentId="17267" CreationDate="2020-12-13T03:43:06.330" Score="10" Body="&lt;p&gt;Here's a shorter solution than wizzwizz4's:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  SEC&#xA;  LDA x&#xA;  SBC modulus&#xA;  ADC y&#xA;  BCS end&#xA;  ADC modulus&#xA;end:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The idea is to bias the inputs so that the addition overflows just when the modulus needs to be subtracted.&lt;/p&gt;&#xA;&lt;p&gt;This requires x &amp;lt; modulus. If y &amp;lt; modulus then the result will be less than modulus, otherwise it may be any value like y. The carry will always be set at the end which may be useful.&lt;/p&gt;&#xA;" OwnerUserId="14340" LastActivityDate="2020-12-13T03:43:06.330" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17275" PostTypeId="2" ParentId="17264" CreationDate="2020-12-13T07:26:22.620" Score="14" Body="&lt;p&gt;The Tandy Color Computer 2 could be upgraded from 16k to 64k by simply swapping chips and adding a jumper.&lt;/p&gt;&#xA;&lt;p&gt;Early revisions used eight 16k x 1 bit or 64k x 1 bit DRAMs. The 16k chips were type MCM4517 or 2118, which only require a +5V power supply (unlike the 4116 which needs +12V, +5V and -5V).&lt;/p&gt;&#xA;&lt;p&gt;Later revisions used two 16k x 4 bit or 64k x 4 bit DRAMs. Here is my CoCo2 upgraded from 16k to 64k. The two 64k x 4 DRAMs are in the upper right area (between the 2 white sockets intended to take a 64k daughter board), and the 64k 'RAM SIZE' jumper is in the lower left corner.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nHINn.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nHINn.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-12-13T07:26:22.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17276" PostTypeId="2" ParentId="3016" CreationDate="2020-12-13T11:46:20.657" Score="0" Body="&lt;p&gt;With cc65's o65 format you can write drivers even across platforms (from PET to C65).&#xA;With GEOS you have at least source code compatibility, not to mention LUnix.&lt;/p&gt;&#xA;" OwnerUserId="7534" LastEditorUserId="7534" LastEditDate="2020-12-13T16:16:13.823" LastActivityDate="2020-12-13T16:16:13.823" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17277" PostTypeId="2" ParentId="17264" CreationDate="2020-12-13T13:07:04.763" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Vortex_Expansions_RAM_card&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vortex memory upgrade board&lt;/a&gt; for the Amstrad CPC 464/664 would kind-of qualify as answer, as it is (like the PC-D) capable of taking x1 memory chips of different size, but also (like the PC-D) it is about 64KiBits vs. 256KiBits and not about 16KiBits vs 64KiBits. This is an upgrade board, and not the mainboard itself, but it hooks into the computer into a way that it logically becomes part of the mainboard. The same PCB can be equipped with&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a single bank of 4164 (64KB)&lt;/li&gt;&#xA;&lt;li&gt;two banks of 4164 (128KB)&lt;/li&gt;&#xA;&lt;li&gt;a single bank of 41256 (256KB)&lt;/li&gt;&#xA;&lt;li&gt;a bank of 41256 and a second bank of 4164 (320KB)&lt;/li&gt;&#xA;&lt;li&gt;both banks filled with 41256 (512KB)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Each bank has its own socketed data latch (a 74HCT373), so if you bought the card with just one bank installed, you don't just need to buy memory chips for the second bank, but you need to add the missing second '373 as well.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="10479" LastEditDate="2020-12-13T13:12:06.053" LastActivityDate="2020-12-13T13:12:06.053" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17278" PostTypeId="2" ParentId="17264" CreationDate="2020-12-13T14:46:36.643" Score="4" Body="&lt;p&gt;The main issue is that 16kbits DRAM chips like 4116 used to require 3 power supply voltages : +5V, -5V, +12V, while more recent DRAM chips such as 4164 only need a +5V power supply.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Differences:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        4116    4164           41256&#xA; Pin 1   -5V    no connect     Address bit 8&#xA; Pin 8  +12V    +5V            +5V&#xA; Pin 9  +5V     Adress bit 7   Address bit 7&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Not only several power supplies and signals would have to be strapped, but any wiring error would have fried the memory chips and maybe other chips around.&lt;/p&gt;&#xA;&lt;p&gt;Some later models of 16kbits DRAM chips (as Bruce Abbott explained above) had pinout compatible with 64kbits chips, but they weren't available when computers like the Apple ][ were designed.&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2020-12-13T14:46:36.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17280" PostTypeId="2" ParentId="17267" CreationDate="2020-12-13T18:28:46.797" Score="1" Body="&lt;p&gt;If one needs to compute the mod-201 sum of many values, a useful technique is e.g.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ; Compute the mod-M sum of N values, for N up to 129.&#xA;    ; Easily adaptable for 256 values, or for other numbers of values.&#xA;    ldy #N-1&#xA;    lda #256-M&#xA;    clc&#xA;loop:&#xA;    adc values,y&#xA;    bcc noWrap&#xA;wrapped:&#xA;    sbc #M      ; Note that carry is set here&#xA;    bcs wrapped ; Could be omitted if original values are all less than M&#xA;noWrap:&#xA;    dey&#xA;    bpl loop&#xA;    adc #M ; Note carry is clear here&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;While performing the computation, there's no need for code to care about the modulus except when a carry occurs.  At the end of the loop, the value in the accumulator will be equal to the correct residue plus (256-M), so adding M will negate the -M term.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-12-13T18:28:46.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17281" PostTypeId="1" AcceptedAnswerId="17282" CreationDate="2020-12-13T20:16:13.487" Score="11" ViewCount="2534" Body="&lt;p&gt;The Commodore 1541 floppy disk drive, sold for use with the 64, was notoriously slow for &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_1541#Throughput_and_Software&quot; rel=&quot;noreferrer&quot;&gt;historical and technical reasons&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Marketing insisted on compatibility with the 1540, the floppy drive sold with the Vic-20, which was slow because the shift register in the 6522 VIA chip didn't work, so it had to transfer a bit at a time instead of a byte at a time.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Then it had to go even slower because unlike the Vic-20, the 64's video chip has to completely take over the bus one out of every eight active scan lines.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Okay, so given the worst-case combination of those two factors, with no development time allowed for alleviating the problem, one could see how the drive could end up only being able to transfer one bit per horizontal blank = 63 microseconds. 1/(63e-6) = 15873 bits/s = 1984 bytes/s.&lt;/p&gt;&#xA;&lt;p&gt;But apparently &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14061/how-fast-are-transfers-between-the-c64-and-the-1541-floppy-drive&quot;&gt;the actual speed was only 400 bytes/s&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Why was the actual speed only a fifth of what would seem to be possible even with the unhappy combination of historical and technical problems?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-13T21:29:50.573" Title="Why was the 1541 so slow?" Tags="&lt;commodore-64&gt;&lt;disk-drive&gt;&lt;performance&gt;&lt;data-transfer&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17282" PostTypeId="2" ParentId="17281" CreationDate="2020-12-13T21:29:50.573" Score="14" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;the drive could end up only being able to transfer one bit per horizontal blank = 63 microseconds. 1/(63e-6) = 15873 bits/s = 1984 bytes/s.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That would be the bitrate during transmission within a byte, but bytes are framed and handshaked, which adds an average of 160 µs per byte. Resulting in &lt;code&gt;(63 * 8) + 160 µs&lt;/code&gt;, or ~664 µs per byte. So the upper transfer sped is rather at or below 1500 byte/s&lt;/p&gt;&#xA;&lt;p&gt;Above numbers are the absolute minimum, the time between to bytes can be as long a 1000 µs and still within specs. Additional turn around times are in front of commands and between blocks/commands. Next, the 1541 does need time to react and respond. And finally the C64 side does as well need management past pure bit transfer. All of this adds up.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But apparently the actual speed was only 400 bytes/s.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Before everything else, it's important to keep in mind that these 400 Bytes/s are about reading from a real world FD drive. With real head movement, search latency, transfers and turn around. The often used test is about reading a 185 block program, which means at least 10 track changes and so on.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A good benchmark for real world transfer rates using an unmodified C64 (nospeed loader, all original routines used) without a mechanical drive might be the &lt;a href=&quot;https://www.c64-wiki.com/wiki/SD2IEC&quot; rel=&quot;noreferrer&quot;&gt;SD2IEC&lt;/a&gt; interface. It offers an average throughput of &lt;strong&gt;650 Bytes/s&lt;/strong&gt;. The SD2IEC is essentially an Atmel ATMega running at 8 MHz direct handling the serial IEC. Its response and transfer time are close to the maximum possible. Reading  from SD/MMC does not carry any mechanical movements, search latency and rather high speed data transfer from SD/MMC to controller RAM.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-12-13T21:29:50.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17283" PostTypeId="1" CreationDate="2020-12-13T21:35:26.830" Score="2" ViewCount="426" Body="&lt;p&gt;I remember browsing in WikiPedia a year or two ago and found an interesting old computer running some UNIX or similar os, where the screenshot of the terminal was amusing because it was a computer or an account named my family name or very close to my family name (&amp;quot;Rosen*****&amp;quot;). I try to find which one it was but today having looked through all the VAX, VMS and PDP articles in Wikipedia I cannot find the one I was looking for. I'm quite sure that it was a system from 1970s or early 1980s where it was clearly seen from the screenshot of the terminal that the name of the machine was &amp;quot;Rosen****&amp;quot;, Rosenholz or similar. I would like to find it if possible.&lt;/p&gt;&#xA;" OwnerUserId="297" LastActivityDate="2020-12-14T06:14:36.020" Title="Identify computer seen in Wikipedia" Tags="&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17284" PostTypeId="2" ParentId="17283" CreationDate="2020-12-14T06:14:36.020" Score="5" Body="&lt;p&gt;Found it! &amp;quot;Welcome to Rosencrantz!&amp;quot; If this is Rosencrantz, where is Guildenstern? &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/5/59/OpenVMSlogin.png&quot; rel=&quot;noreferrer&quot;&gt;https://upload.wikimedia.org/wikipedia/commons/5/59/OpenVMSlogin.png&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8wC6A.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8wC6A.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="297" LastActivityDate="2020-12-14T06:14:36.020" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17290" PostTypeId="2" ParentId="17259" CreationDate="2020-12-14T15:31:28.993" Score="0" Body="&lt;p&gt;Does it have the standard early 90s IDE interface for the HDD?&lt;/p&gt;&#xA;&lt;p&gt;If it does, and if the IDE controller supports it you could add an old IDE CD-ROM drive either as &amp;quot;primary-slave&amp;quot;, or as &amp;quot;secondary-master&amp;quot; if the interface supports plugging in a seccond ribbon cable.&lt;/p&gt;&#xA;&lt;p&gt;This will most likely NOT not make it bootable though. So you'll need to need to configure DOS with MSCDEX or something compatible to access the CD-ROM.&lt;/p&gt;&#xA;&lt;p&gt;You could try using a cheap IDE-to-USB interface between any modern computer and the old HDD to read and write to it.&lt;/p&gt;&#xA;&lt;p&gt;This would let you see if the OS is intact and/or fix any errors to revive it.&lt;/p&gt;&#xA;" OwnerUserId="18155" LastActivityDate="2020-12-14T15:31:28.993" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17291" PostTypeId="2" ParentId="15519" CreationDate="2020-12-14T16:49:19.450" Score="0" Body="&lt;p&gt;Did you try partitioning and formatting it on the Amiga instead, and then loading it into WinUAE?&lt;/p&gt;&#xA;&lt;p&gt;That would create the correct Amiga RDB instead a DOS MBR bootblock.&lt;/p&gt;&#xA;" OwnerUserId="18155" LastActivityDate="2020-12-14T16:49:19.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17292" PostTypeId="1" AcceptedAnswerId="17293" CreationDate="2020-12-14T18:13:41.583" Score="30" ViewCount="4031" Body="&lt;p&gt;The &lt;code&gt;auto&lt;/code&gt; keyword in C seems quite redundant: wherever it makes sense to define a variable with automatic storage duration, it is already the default, so there is no reason to use the keyword. The keyword is so useless that C++11 managed to repurpose it for type deduction, with impunity: the change made virtually no impact on syntax-compatibility with C code.&lt;/p&gt;&#xA;&lt;p&gt;We do know, however, that some seemingly superfluous syntactical features of C, like the &lt;code&gt;register&lt;/code&gt; keyword (made mostly obsolete by modern register allocators) and &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/10812/&quot;&gt;the &lt;code&gt;-&amp;gt;&lt;/code&gt; operator&lt;/a&gt;, did serve some purpose historically, even if they are mostly redundant now. I would assume the same is the case with &lt;code&gt;auto&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Why was the &lt;code&gt;auto&lt;/code&gt; storage class specifier added to C? Was it inherited from another language? Included ‘for completeness’? Is there a document that provides a rationale for its existence?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-01-16T16:04:09.067" LastActivityDate="2021-01-16T16:04:09.067" Title="Why is the ‘auto’ storage class specifier included in C?" Tags="&lt;history&gt;&lt;programming&gt;&lt;c&gt;&lt;design-choices&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17293" PostTypeId="2" ParentId="17292" CreationDate="2020-12-14T18:29:25.353" Score="42" Body="&lt;p&gt;It wasn't added in C; it was inherited from B.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/B_(programming_language)&quot; rel=&quot;noreferrer&quot;&gt;B Programming Language&lt;/a&gt; didn't have types, so there no way to declare a variable local to function without using the &lt;code&gt;auto&lt;/code&gt; keyword.&lt;/p&gt;&#xA;&lt;p&gt;So, for example, you might have a B function something like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;add(a, b) {&#xA;    auto ret;&#xA;    ret = a + b;&#xA;    return ret;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Because of the default &lt;code&gt;int&lt;/code&gt; rule in C, that's also &lt;a href=&quot;https://gcc.godbolt.org/z/EKa4cG&quot; rel=&quot;noreferrer&quot;&gt;a valid C program&lt;/a&gt;, and it is equivalent to this modern &amp;quot;ANSI C&amp;quot; version:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;int add(int a, int b) {&#xA;    int ret;&#xA;    ret = a + b;&#xA;    return ret;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I'm not sure there was any rationale for including the &lt;code&gt;auto&lt;/code&gt; keyword in C other than it allowed most existing B programs to be valid C programs.&lt;/p&gt;&#xA;" OwnerDisplayName="user722" LastEditorUserId="7946" LastEditDate="2020-12-14T20:41:19.077" LastActivityDate="2020-12-14T20:41:19.077" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17294" PostTypeId="1" CreationDate="2020-12-14T22:20:22.273" Score="10" ViewCount="1447" Body="&lt;p&gt;I've just realized I have a gap in my understanding of the VGA CRT monitors of the 80386 era (1980s-1990s).&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What was the phosphor resolution? It turns out I did not have proper understanding of the shadow mask and having discrete R G B phosphor dots. But I also remember my monitor had analog controls to resize and move the image and possibly even do pillow correction. For that to work, the shadow mask resolution had to be significantly higher than the monitor image resolution. Is that correct? Did monitors typically use hole-type masks or slit-style masks (that could give infinite vertical resolution).&lt;/li&gt;&#xA;&lt;li&gt;How was control over the electron beams distributed between the monitor and the video card? Which part controlled the following aspects?&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Start X,Y of the first scanline&lt;/li&gt;&#xA;&lt;li&gt;Scanline width (was it always the same for all scanlines?)&lt;/li&gt;&#xA;&lt;li&gt;Time to draw a scanline&lt;/li&gt;&#xA;&lt;li&gt;Vertical distance between scanlines (was it always the same for all scanlines?)&lt;/li&gt;&#xA;&lt;li&gt;Number of scanlines&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Could a (custom) video card technically output image with arbitrary resolution (up to some physical limit), say 1x1 to 1000x10 to 1000x1000?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="20155" LastEditorUserId="20155" LastEditDate="2020-12-17T00:58:51.297" LastActivityDate="2020-12-17T00:58:51.297" Title="Physical resolution and control of old VGA (color) CRT monitors" Tags="&lt;crt-monitor&gt;&lt;vga&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17295" PostTypeId="2" ParentId="17294" CreationDate="2020-12-14T22:52:42.373" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I've just realized I have a gap in my understanding of the VGA CRT monitors of the 80386 era (1980s-1990s).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It may be more a general need to consult basic information about basic analogue TV/&lt;a href=&quot;https://en.wikipedia.org/wiki/Composite_video&quot; rel=&quot;noreferrer&quot;&gt;composite video&lt;/a&gt; signal structure, independent of PCs or time.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What was the phosphor resolution?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is no general (practical) phosphor resolution.&lt;/p&gt;&#xA;&lt;p&gt;Resolution is an attribute of the digital signal source, not the analogue screen.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But I also remember my monitor had controls to resize and move the image and possibly even do pillow correction. For that to work, the shadow mask resolution had to be significantly higher than the monitor image resolution. Is that correct?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, as those are not synchronized values.&lt;/p&gt;&#xA;&lt;p&gt;Though, a the mask grid does imply a (fuzzy) lower end for usable details.&lt;/p&gt;&#xA;&lt;p&gt;For any data about grid size, pleas check the screen used.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did monitors typically use hole-type masks or slit-style masks&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Depends on the manufacturer and series as both have been used at times and models.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(that could give infinite vertical resolution).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, slits do as well have a defined height. otherwise the mask would not be stable.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How was control over the electron beams distributed between the monitor and the video card?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Beam control was due signal timing delivered by the controller (virsocard) which hadto be within the capabilities of the screen to decode / interpret it.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Which part controlled the following aspects?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;All done by the CRT controller by generating the frame signal.&lt;/p&gt;&#xA;&lt;p&gt;Or better, the controller creates a certain composite signal and the CRT electronics are adjusted to display this.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Start X,Y of the first scanline&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The controller puts themat a certain position within the signal generated and the CRT electronics may offset them according to it's setup (remember the little potis to adjust the picture?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Scanline width&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Like above.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(was it always the same for all scanlines?)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It better should. Having different line length &lt;em&gt;may&lt;/em&gt; distort the decoding electronics.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Time to draw a scanline&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By controller as it's the same as scanline width.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Vertical distance between scanlines&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Defined by CRT electronics setup.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(was it always the same for all scanlines?)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Number of scanlines&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By controller.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Could a (custom) video card technically output image with arbitrary resolution (up to some physical limit), say 1x1 to 1000x10 to 1000x1000?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure. As long as it's within the limits the electronics of the CRT can adapt to/decode. Basic electronics of a CRT are build for a certain frequency range, were they could syncronize with the signal. Later/more expensive CRT had extended electronics able to &lt;a href=&quot;https://en.wikipedia.org/wiki/Multisync_monitor&quot; rel=&quot;noreferrer&quot;&gt;sync within a wider frequency range&lt;/a&gt;. Ofen called 'Multisync' based on a brand name by NEC who introduced them first for a larger audience.&lt;/p&gt;&#xA;&lt;p&gt;It's important to keep in mind that vertical and horizontal resolution limits are independent. While horizontal resolution is limited by the number of lines a screen electronic can display is horizontal resolution defined by bandwidth and signal type.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;If you really want to get into video design, don't reach for the stars, but create a standard B&amp;amp;W composite signal first. Experiment with settings of your generator and reactions (and settings) of an according (simple) CRT screen. This will give you a firm grasp of the basics. Every further step like adding colour or higher/different resolutions will be quite clear and easy thereafter.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-14T23:00:42.850" LastActivityDate="2020-12-14T23:00:42.850" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17296" PostTypeId="2" ParentId="17294" CreationDate="2020-12-15T00:01:47.937" Score="4" Body="&lt;p&gt;1a. Yes, the shadow mask should be at least double the monitor resolution in both X and Y directions to give a good picture.&lt;/p&gt;&#xA;&lt;p&gt;1b. Most monitors had hole-style (shadow) masks, but Triniton used an aperture grille with slots and wires that extended the entire vertical height of the image, with one or two wires running horizontally across the screen to stabilize the vertical slots and wires.&lt;/p&gt;&#xA;&lt;p&gt;2. VGA uses 5 discrete signals: Red, Green, Blue, Horizontal Sync, and Vertical Sync. H-Sync tells the monitor when to begin a new scanline, and V-Sync tells it when to begin a new frame. This is how the monitor and video card coordinate with each other to display the image. I believe they're both simple pulses. To determine (most of) the other aspects you listed, the monitor simply counts the pulses and measures the time between them. If you want more control than that, for example to drive a vector display, you would replace the digital H/V signals with analog X/Y signals.&lt;/p&gt;&#xA;&lt;p&gt;I think the beam width is the same for all scanlines, but you can manually adjust the brightness.&lt;/p&gt;&#xA;&lt;p&gt;3. The horizontal resolution is continuous so it can support whatever horizontal resolution you can throw at it, although the horizontal contrast may be too low to see every pixel. The vertical resolution is limited by the minimum and maximum timings that the monitor can support.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2020-12-15T00:01:47.937" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17297" PostTypeId="2" ParentId="5179" CreationDate="2020-12-15T02:10:57.230" Score="0" Body="&lt;p&gt;The early Unix evidence is inconclusive, but nevertheless I'm offering this answer as supporting material.&lt;/p&gt;&#xA;&lt;p&gt;See this &lt;a href=&quot;http://bitsavers.org/pdf/bellLabs/unix/UNIX_ProgrammersManual_Nov71.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1971 Unix Programmer's Manual&lt;/a&gt;, in particular page SYS EXEC (II), i.e., the man page for the exec system call.&lt;/p&gt;&#xA;&lt;p&gt;The synopsis for the call shows that the caller of exec is expected to provide a zero-terminated list of string pointers.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    sys exec; name; args&#xA;     …&#xA;name: &amp;lt;…\0&amp;gt;&#xA;      …&#xA;args: arg1; arg2; …; 0&#xA;arg1:  &amp;lt;…\0&amp;gt;&#xA;      …&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Clearly, the null is needed here because there is no count.&lt;/p&gt;&#xA;&lt;p&gt;However, the description of what the exec'd image sees does not include the null terminator. It does however include an argument count.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sp-&amp;gt;  nargs&#xA;      arg1&#xA;        …&#xA;      argN&#xA;arg1: &amp;lt;arg1\0&amp;gt;&#xA;        …&#xA;argN: &amp;lt;argn\0&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(addresses increase &lt;em&gt;down&lt;/em&gt; the diagram).&lt;/p&gt;&#xA;&lt;p&gt;I think this is &amp;quot;1st edition Unix&amp;quot; since there's a slightly later version that explicitly calls itself &amp;quot;2nd edition&amp;quot;. This is an unmapped PDP-11/20; the 2nd ed. manual anticipates the future support for an 11/45 (which can support an MMU).&lt;/p&gt;&#xA;&lt;p&gt;So, the relevance to the question? I think it's self-evident that the C convention would follow exactly the &amp;quot;bare Unix&amp;quot; convention, and that there would be a null terminator pointer in the exec'd process.  However, there's no actual evidence in the manual that the terminating null pointer was present.&lt;/p&gt;&#xA;&lt;p&gt;But there &lt;strong&gt;is&lt;/strong&gt; evidence that the argument count was there from the start.    So, either the argument count came first and the null pointer was added later for some reason, or else the argument count and the null pointer were both there all along.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-12-15T02:16:04.337" LastActivityDate="2020-12-15T02:16:04.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17298" PostTypeId="2" ParentId="17294" CreationDate="2020-12-15T05:38:30.430" Score="15" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What was the phosphor resolution?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The usual specification quoted for CRT resolution is the 'dot pitch', or distance between groups of RGB phosphor dots. Here are some examples of IBM monitors produced from 1987 to 1993 (taken from &lt;a href=&quot;https://psref.lenovo.com/syspool/Sys/PDF/withdrawnbook/mwbook.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;):-&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Model Year Standard size viewable pixels   dot pitch (mm)    notes&#xA;8513  1987   VGA    12&amp;quot;   10.4&amp;quot;   640x480    0.28&#xA;8512  1987   VGA    14&amp;quot;   11.8&amp;quot;   640x480    0.41&#xA;8511  1992   VGA    14&amp;quot;   11.8&amp;quot;   640x480    0.39&#xA;9518  1992   VGA    14&amp;quot;   12.3&amp;quot;   640x480    0.28&#xA;8514  1987   XGA    16&amp;quot;   14.4&amp;quot;  1024x768    0.31&#xA;9515  1992   XGA    14&amp;quot;   12.3&amp;quot;  1024x768    0.28&#xA;9517  1992   XGA    17&amp;quot;   14.7&amp;quot;  1280x768    0.26 (stripe)  Trinitron&#xA;6314  1992  SVGA    14&amp;quot;   12.0&amp;quot;  1280x768    0.28&#xA;6318  1993  SVGA    14&amp;quot;   12.1&amp;quot;   800x600    0.39           &amp;quot;Low End&amp;quot;&#xA;6317  1993  SVGA    17&amp;quot;   14.7&amp;quot;  1280x1024   0.28&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To fairly compare the dot pitches you also have to take into account the screen size, so for example a 14.4&amp;quot; diagonal (viewable) screen with dot pitch of 0.31mm should be equivalent to a 12.3&amp;quot; (viewable) screen with 0.27&amp;quot; dot pitch.&lt;/p&gt;&#xA;&lt;p&gt;That's not the full story though, because actual resolution is also affected by beam size and video bandwidth.&lt;/p&gt;&#xA;&lt;p&gt;The monitor doesn't need to know where each phosphor dot is because (unlike LCD screens) they are &lt;em&gt;not&lt;/em&gt; lined up with pixels, there are simply (hopefully) enough of them that the beam will always land on at least a few dots.&lt;/p&gt;&#xA;&lt;p&gt;However if the beam is narrowly focused relative to the dot pitch then single pixels may not be able to illuminate all phosphor colors equally, depending on where the beam lands relative to the dot triads or stripes. For smooth color rendering the dot pitch should be much smaller than the beam diameter. However a high resolution may still be achievable with large dot pitch by using a finer beam, at the expense of color rendering fidelity (pixels get fringes of different colors that vary depending on their exact location on the screen, and noticeable &lt;a href=&quot;https://en.wikipedia.org/wiki/Moir%C3%A9_pattern&quot; rel=&quot;noreferrer&quot;&gt;Moiré&lt;/a&gt; effects with fine pixel patterns).&lt;/p&gt;&#xA;&lt;p&gt;CRTs with higher vertical resolution also need a narrower beam to separate the horizontal lines. However at lower resolutions this causes the scan lines to become visible due to the dark space between them, which makes the display a bit darker and harder to view. If the beam is fatter then the display looks better vertically, but the lines merge together when there are more of them, lowering the effective vertical resolution.&lt;/p&gt;&#xA;&lt;p&gt;In the horizontal direction video amplifier bandwidth limits how fast the beam can change intensity, causing the image to smear sideways. The higher the pixel resolution and frame rate the higher the bandwidth needs to be. This is not a limitation of the CRT itself, but achieving higher bandwidth is difficult so it is generally matched to the dot pitch.&lt;/p&gt;&#xA;&lt;p&gt;To achieve a small spot size the CRT guns must be designed to focus the beam narrowly, and the the deflection system has to accurately converge the 3 beams (one for each color) at the shadow mask. This makes the CRT and control electronics more expensive.&lt;/p&gt;&#xA;&lt;p&gt;If the dot pitch is large relative to the pixel resolution then the display will show bad fringing and lose effective resolution. With triad dots the display will look blurry in all directions, but smoother horizontally than vertical stripes (Trinitron). However vertical stripes have higher brightness due to more of the beam getting through the slots in the shadow mask, and can have higher contrast by putting black stripes between the phosphors. This may make the screen appear sharper for photographic images, but not so much for text or fine lines (which is why few computer monitors used vertical stripe CRTs).&lt;/p&gt;&#xA;&lt;p&gt;A well designed CRT monitor will have a tube with beam focusing and dot pitch matched, and the video bandwidth and viewable display modes matched to the tube. Some early 'Super VGA' monitors did not do a good job, due to trying to keep the cost down by using a lower resolution tube and/or poorer electronics. We can deduce that the 6318 was one of these, as the dot pitch is lower than other monitors with the same screen size and it could only display 1024x768 pixels in interlace mode. This explains its low price of only $318 (vs $480 for the 6314).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How was control over the electron beams distributed between the&#xA;monitor and the video card? Which part controlled the following&#xA;aspects?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Start X,Y of the first scanline&#xA;Scanline width (was it always the same for all scanlines?)&#xA;Time to draw a scanline&#xA;Vertical distance between scanlines (was it always the same for all scanlines?)&#xA;Number of scanlines&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is all determined by the timing of the sync pulses. The beam moves horizontally with sufficient magnetic deflection amplitude to go across the screen (from left to right) in the time between horizontal sync pulses, and vertically down the screen at a slower rate that scans the entire screen in one vertical field (time between vertical sync pulses).&lt;/p&gt;&#xA;&lt;p&gt;Unlike an LCD screen the CRT controller does not look at the RGB video signals, so it has no idea what the pixel resolution is, only the sync timing. To accommodate different display modes the controller first detects the screen mode (by detecting  sync pulse polarity and/or measuring the time between horizontal and vertical sync pulses) and adjusts the scan speeds to suit,  then waits for the horizontal and vertical sync pulses and pulls the beam back between lines and at the end of the display.&lt;/p&gt;&#xA;&lt;p&gt;To change the horizontal scan speed different capacitors are switched into the EHT transformer and scan coil circuit. Due to the high voltages involved, this is sometimes done with relays which you can hear 'clicking' when changing screen resolutions.&lt;/p&gt;&#xA;&lt;p&gt;The number of scan lines and distance between scan lines is determined by the sync timing, as the beam moves across and down the screen at a constant rate until it sees the vertical sync. Because the beam is deflected by electromagnetic coils with analog control circuitry, the rate of movement and position on screen may vary with temperature and line voltage etc., so user controls are provided to adjust the height, width, and position of the display.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Could a (custom) video card technically output image with arbitrary&#xA;resolution (up to some physical limit), say 1x1 to 1000x10 to&#xA;1000x1000?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. Apart from possibly expecting a 'black' level at the display edges, The CRT monitor doesn't care what is in the video signals. So long as the sync timing matches a known resolution it will be quite happy scanning a completely blank screen or one that only has a single pixel spanning all displayed lines. This is how for example 320x200 can be displayed on a VGA CRT with the same timing as 640x400. The VGA card could just as easily put out 100x100 (with each line repeated 4 times) or 1000x400, and the monitor wouldn't know the difference so long as the sync timing was the same.&lt;/p&gt;&#xA;&lt;p&gt;For 1000x1000 the monitor would have to scan at least 1000 lines, so it would need to support a screen with normal resolution of eg. 1280x1024 (with 24 'blank' lines not displaying pixels), and the VGA card would have to generate sync pulses equating to that screen mode. To get 1000 pixels to fill the screen horizontally the card would have to generate them at the appropriate rate, eg. at ~78% of the clock frequency required for 1280 pixels.&lt;/p&gt;&#xA;&lt;p&gt;Early VGA monitors had fairly crude analog circuits that did not even count the number of lines or accurately measure sync timing. To synchronize with the signal they use simple &lt;a href=&quot;https://en.wikipedia.org/wiki/Phase-locked_loop&quot; rel=&quot;noreferrer&quot;&gt;PLL&lt;/a&gt; circuits that 'pull' the horizontal and vertical oscillators in phase with the sync pulses, so they often work with non-standard timing (though the screen may be off center or a different size than usual). If the timing is too far off the monitor might operate too fast or produce too much deflection, which could overheat components or blow up them up with high voltage.&lt;/p&gt;&#xA;" OwnerUserId="4663" LastEditorUserId="4663" LastEditDate="2020-12-15T05:48:15.880" LastActivityDate="2020-12-15T05:48:15.880" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17299" PostTypeId="2" ParentId="17292" CreationDate="2020-12-15T11:29:32.323" Score="14" Body="&lt;p&gt;The keyword was inherited from B.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20150611114642/https://www.bell-labs.com/usr/dmr/www/bref.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;B&lt;/a&gt; was a programming language with no type system at all: every variable held a machine word (corresponding to the &lt;code&gt;int&lt;/code&gt; type in C), and the type of each value was determined by the operation performed. Since there was no type to specify for variables, the only thing to declare about a variable was its storage class; unlike in C, the default in B corresponded to C’s &lt;code&gt;static&lt;/code&gt;, i.e. a variable that existed for the duration of the whole program’s run time. Thus the &lt;code&gt;auto&lt;/code&gt; keyword was included to denote automatic variables, which existed only for the duration of a single function call. The term &lt;em&gt;automatic&lt;/em&gt; itself came from PL/I, from which B also borrowed the &lt;code&gt;/* ... */&lt;/code&gt; comment syntax.&lt;/p&gt;&#xA;&lt;p&gt;While C added type declarations, &lt;code&gt;int&lt;/code&gt; was kept as the implicit default, and it was still possible to declare &lt;code&gt;int&lt;/code&gt; variables with only the storage class specifier, just like in B. In the early days of C, it was common to rely on this. Here’s for example &lt;a href=&quot;http://doc.cat-v.org/bell_labs/duffs_device&quot; rel=&quot;nofollow noreferrer&quot;&gt;the famous Duff’s device from 1983&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;send(to, from, count)&#xA;register short *to, *from;&#xA;register count;&#xA;{&#xA;    register n=(count+7)/8;&#xA;    switch(count%8){&#xA;    case 0: do{ *to = *from++;&#xA;    case 7:     *to = *from++;&#xA;    case 6:     *to = *from++;&#xA;    case 5:     *to = *from++;&#xA;    case 4:     *to = *from++;&#xA;    case 3:     *to = *from++;&#xA;    case 2:     *to = *from++;&#xA;    case 1:     *to = *from++;&#xA;        }while(--n&amp;gt;0);&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Duff omits any type specifiers for the &lt;code&gt;count&lt;/code&gt; parameter, the &lt;code&gt;n&lt;/code&gt; variable and the return type of &lt;code&gt;send&lt;/code&gt;; all are assumed to be &lt;code&gt;int&lt;/code&gt;. (Since he doesn’t actually return any value from the function, he would have probably used &lt;code&gt;void&lt;/code&gt; for the return type in modern C, but &lt;a href=&quot;https://web.archive.org/web/20080731144110/http://cm.bell-labs.com/cm/cs/who/dmr/chist.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;that barely existed back then&lt;/a&gt;.) The K&amp;amp;R-style declaration for function parameters he uses for the &lt;code&gt;send&lt;/code&gt; function is also a straightforward extension of B syntax.&lt;/p&gt;&#xA;&lt;p&gt;We can therefore surmise that the &lt;code&gt;auto&lt;/code&gt; keyword was included ‘for symmetry’ with other storage class specifiers, to support this coding style that relied on implicit &lt;code&gt;int&lt;/code&gt;; this also eased porting B code into C. Whether compatibility with B code was an explicit goal or just an emergent property coming from the fact that the first C compiler grew out of a B compiler, I don’t know. But it was probably a consideration.&lt;/p&gt;&#xA;&lt;p&gt;Over the years, implicit &lt;code&gt;int&lt;/code&gt; fell into disuse (with contemporary compilers emitting warnings against it), and with it, the &lt;code&gt;auto&lt;/code&gt; keyword as well. (I’d assume &lt;code&gt;auto&lt;/code&gt; was never popular in C in the first place, as &lt;code&gt;int&lt;/code&gt; is one character shorter, so everyone declared the type anyway.) With the B language extinct, and B-derived K&amp;amp;R C displaced by ISO C, the keyword became redundant.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2020-12-16T08:55:12.107" LastActivityDate="2020-12-16T08:55:12.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17300" PostTypeId="2" ParentId="17294" CreationDate="2020-12-15T11:31:41.530" Score="3" Body="&lt;p&gt;Let me try a summary how analog CRT monitors work(ed).&lt;/p&gt;&#xA;&lt;p&gt;Let's start with monochrome, later explain the color models, and then answer your questions.&lt;/p&gt;&#xA;&lt;h2&gt;How it works&lt;/h2&gt;&#xA;&lt;p&gt;The CRT produces a thin electron beam that produces light when it hits the phosphor. A deflection circuitry can bend that beam so that it can reach all of the sreen front area. This circuitry is driven by two ramp signals:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A low-frequency signal (e.g. 50Hz) for the vertical direction, so the beam starts at the top of the screen and continuously moves downward to the end, then quickly returns to the top, all this e.g. within 20ms.&lt;/li&gt;&#xA;&lt;li&gt;A higher-frequency signal (e.g. 25kHz) for the horizontal direction, moving the beam from left to right, and then quickly returning (within e.g. 40µs).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Combining both circuits, the beam moves along a raster pattern of nearly horizontal lines covering the screen front.&lt;/p&gt;&#xA;&lt;p&gt;The video card provides:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a clock signal (called VSYNC) telling the monitor when to vertically return (&amp;quot;retrace&amp;quot;) to the top position,&lt;/li&gt;&#xA;&lt;li&gt;a clock signal (called HSYNC) telling the monitor when to horizontally return to the left position,&lt;/li&gt;&#xA;&lt;li&gt;an intensity signal commanding the current beam intensity to the monitor.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The deflection circuitry can only work within some given frequency ranges, so the video card isn't completely free to decide on these frequencies, but must create a timing appropriate for the monitor.&lt;/p&gt;&#xA;&lt;p&gt;The intensity signal is zero during the times when the monitor is expected to do the horizontal or the vertical beam return.&lt;/p&gt;&#xA;&lt;p&gt;So, the intensity signal is active (non-zero) during the major part of one horizontal cycle, e.g. during 32 of the 40µs. This time corresponds to the srceen width (the beam moves across the screen from left to right during that time), and the video card divides this time into slots corresponding to horizontal pixels, e.g. to fit 640 pixels into 32µs, each pixel occupies 0.05µs. In each of these pixel slots, the video card provides an intensity voltage corresponding to the desired screen brightness of that pixel.&lt;/p&gt;&#xA;&lt;h2&gt;Resolution&lt;/h2&gt;&#xA;&lt;p&gt;So, what's the resolution we get?&lt;/p&gt;&#xA;&lt;p&gt;The vertical resolution is given by counting the horizontal cycles that fit into one vertical cycle, being the ratio between horizontal and vertical sync frequencies (minus the time for vertical retrace), e.g. 25kHz / 50Hz = 500, meaning that maybe 450 lines are usable.&lt;/p&gt;&#xA;&lt;p&gt;So, the vertical resolution is given by the video card. But, as the acceptable sync frequencies are constrained by the monitor, the card isn't completely free in its decision.&lt;/p&gt;&#xA;&lt;p&gt;The horizontal resolution also is defined by the video signal, by the aspect, how many different analog intensity values the card emits during one horizontal line. Here, the video card is completely free to produce whatever number of pixels it wants, but the monitor's beam controlling amplifier has its limits, so it won't be able to follow the signal changes exactly, if they come too fast, resulting in a horizontally blurry impression.&lt;/p&gt;&#xA;&lt;p&gt;One additional aspect impacts the resolution: the diameter of the electron beam. If the beam size is too large, multiple scan lines overlap, so you can't distinguish the individual values from vertically-adjacent pixels. But the beam can also be &amp;quot;too thin&amp;quot;, resulting in unpleasant gaps between the horizontal lines. And of course, large beam diameters also amount to horizontal blurriness. So, sending a high-resolution signal to a monitor with a blurry beam might be technically possible, but won't give the desired crisp image.&lt;/p&gt;&#xA;&lt;p&gt;One remark on pixel aspect ratio:&lt;/p&gt;&#xA;&lt;p&gt;As horizontal and vertical resolution are controlled by completely different timing aspects, it's easy to get pixels that aren't square, meaning different horizontal and vertical dpi values, resulting e.g. in circles appearing as ellipses.&lt;/p&gt;&#xA;&lt;h2&gt;Linearity&lt;/h2&gt;&#xA;&lt;p&gt;As the picture geometry is mainly controlled by the beam deflection circuitry, it's important that the beam moves with constant speed (at least during the active signal periods). Otherwise, you'd get different pixel scales over the screen size, resulting in distortions. CRTs never achieved perfect linearity, but many of them could fine-tune various aspects of that deflection, e.g.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Horizontal size: this modifies the amplification of the horizontal-deflection circuitry, making the beam cover a wider horizontal range within the given horizontal time.&lt;/li&gt;&#xA;&lt;li&gt;Vertical size: this modifies the amplification of the vertical-deflection circuitry, making the beam cover a taller vertical range within the given vertical time.&lt;/li&gt;&#xA;&lt;li&gt;Pillow correction: adding correction signals to the deflection system so that the corners get the same deflection ratio as the center (pillow error: there is too much deflection in the corners, barrel error: the center gets more deflection than the corners).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Color CRT&lt;/h2&gt;&#xA;&lt;p&gt;A color CRT works mostly the same, but:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There are three electron cannons, producing three beams (meant for R, G, and B). Some monitors arrange them in a row, others in a triangle configuration.&lt;/li&gt;&#xA;&lt;li&gt;The beams have to go through a mask with holes before hitting the phosphor surface.&lt;/li&gt;&#xA;&lt;li&gt;Coming from different electron cannons at different positions, after passing through one hole of the mask, the three beams hit the phosphor surface at different positions.&lt;/li&gt;&#xA;&lt;li&gt;At these different positions, phosphors of different color are applied, so the electrons coming from the &amp;quot;R&amp;quot; cannon only hit red phosphor dots, the &amp;quot;G&amp;quot; electrons only green dots, and the &amp;quot;B&amp;quot; ones only blue dots.&lt;/li&gt;&#xA;&lt;li&gt;The deflection circuitry deflects all three beams the same way, so they always hit the same spot of the screen front.&lt;/li&gt;&#xA;&lt;li&gt;The video card provides three intensity signals, simultaneously controlling the three electron cannons.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With color CRT, we have one more aspect limiting the effective resolution: mask and the dotted phosphor surface need to be finely pitched to allow for the desired resolution. If a single RGB tripel is bigger than the desired pixel size, you don't get the impression of a &amp;quot;single mixed-color dot&amp;quot;, but individual red, green, and blue dots.&lt;/p&gt;&#xA;&lt;h2&gt;Your questions&lt;/h2&gt;&#xA;&lt;p&gt;Phosphor resolution only applies to color CRTs, being the dot pitch. Dot pitch has to be clearly smaller than the desired size of a single pixel.&lt;/p&gt;&#xA;&lt;p&gt;There were both dot-mask and slit-mask monitors. Dot-mask corresponds to a triangle configuration of the cannons, slit-mask to a linear one.&lt;/p&gt;&#xA;&lt;p&gt;In theory, a dot mask imposes a limit on vertical resolution, but in reality other factors dominated: the beam diameter, and the difficulty of having three beams hit the same screen spot.&lt;/p&gt;&#xA;&lt;p&gt;As explained above, the video card controlled the resolution by using an appropriate timing, but that had to fit within the limits of the monitor.&lt;/p&gt;&#xA;&lt;p&gt;The position and size on screen could be controlled by both the video card and the monitor:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The card could start its intensity signal earlier or later (horizontally as well as vertically), resulting in the image moving left or right (or up and down).&lt;/li&gt;&#xA;&lt;li&gt;The card could use more or less of the available beam-moving time, thus producing a bigger or a smaller image.&lt;/li&gt;&#xA;&lt;li&gt;The monitor could adjust amplification and possibly offset of the deflection ramp signals, thus magnifying and/or moving the image, both horizontally as well as vertically.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;From the video card's point of view, the scan line width was the same over the full screen. There was no reason to generate shorter and longer scan lines. But the analog beam deflection circuitry never was perfectly linear, so it was quite common that the image width varied slightly over the screen height (e.g. cushion or barrel distortion).&lt;/p&gt;&#xA;&lt;p&gt;The time to draw a scan line was always constant, corresponding to the horizontal sync frequency. Monitors were designed for constant H and V frequencies, and always needed some time to adapt to different ones.&lt;/p&gt;&#xA;&lt;p&gt;The vertical distance between scan lines was given by the amount of vertical deflection corresponding to one horizontal cycle. E.g. with a 50Hz / 25kHz setting, each scan line consumed 40µs, and within 40µs the vertical deflection advanced by roughly 1/450 of the screen height (not 1/500 to account for the vertical retrace).&lt;/p&gt;&#xA;&lt;p&gt;The number of scan lines was given by the ratio between horizontal and vertical scan frequencies (minus the time needed for vertical retrace).&lt;/p&gt;&#xA;&lt;p&gt;A video card could in theory produce any pixel resolution desired. Limiting factors were:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The maximum pixel clock rate, making e.g. 1000*1000 hard to achieve in this era (60MHz or more necessary).&lt;/li&gt;&#xA;&lt;li&gt;The horizontal and vertical scan frequencies that the monitor was capable to handle.&lt;/li&gt;&#xA;&lt;li&gt;The unpleasant appearance of low vertical resolution with thin electron beams, resulting in visible gaps between the lines.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6565" LastEditorUserId="6565" LastEditDate="2020-12-15T11:49:22.807" LastActivityDate="2020-12-15T11:49:22.807" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17302" PostTypeId="1" AcceptedAnswerId="17303" CreationDate="2020-12-15T13:02:09.390" Score="10" ViewCount="2528" Body="&lt;p&gt;My Amstrad CTM644 CRT 'monitor' (really a TV grade tube with RGB inputs), makes a high pitched whine when powered on, audible to my children and cats, though no longer to my own ears. My research indicates that this is just the scanning frequency of the tube, and not a fault of the electronics.&lt;/p&gt;&#xA;&lt;p&gt;Did consumer CRTs always do this in the 80s, and I have forgotten? Or has my monitor got worse over time?&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2020-12-16T18:15:30.447" Title="Why does my CRT whine?" Tags="&lt;crt-monitor&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17303" PostTypeId="2" ParentId="17302" CreationDate="2020-12-15T13:26:42.807" Score="18" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;My Amstrad CTM644 CRT 'monitor', makes a high pitched whine [...] My research indicates that this is just the scanning frequency of the tube,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The ~15 kHz line frequency is the most likely source. More exactly, it's the retrace, as that's not only one of the most powerful moves the ray does - which equates to higher currents used to initiate it - but it's also nicely regular, so is detectable by our ears. 15 kHz is at the upper end of what humans can hear - and usually only in our first 2-3 decades, as high pitch hearing is the first thing we lose.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and not a fault of the electronics.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Erm, no. It &lt;em&gt;is&lt;/em&gt; usually a fault of the electronics, but not with its electronic operation, but the mechanical mounting/stiffness. The sound comes from coils that move (vibrate) due to the changing magnetic fields.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did consumer CRTs always do this in the 80s, and I have forgotten? Or has my monitor got worse over time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Both. Often coils and the like are pressed into place and/or glued down to stop them from making these noises. When not done properly, these sounds come even with new devices.&lt;/p&gt;&#xA;&lt;p&gt;In addition, depending on the design of the coil and its mounting, it may be temperature sensitive, meaning the device has to be heated up to ensure a proper fit. That's why this sound often comes only during warm up. This was extremely common with early (1960s) TVs, but later as well.&lt;/p&gt;&#xA;&lt;p&gt;The problem may get worse due ageing which adds shrinking and/or loosening of the mountings. Again, depending on the design and changes this may only be an issue during warm up.&lt;/p&gt;&#xA;&lt;p&gt;Exact measures to remove this (if possible at all) depends much on the type of circuitry and its mechanical design. The best approach would be to simply drown it in glue... except that would most likely result in overheating :( So if you want to get rid of it, a lot of experimenting is ahead of you - mind the high voltage.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4201" LastEditDate="2020-12-16T18:15:30.447" LastActivityDate="2020-12-16T18:15:30.447" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="17304" PostTypeId="2" ParentId="17302" CreationDate="2020-12-15T15:01:02.710" Score="15" Body="&lt;p&gt;Basically it's the 15625 Hz sawtooth-like signal that drives the horizontal deflection coil, that is heard because the generated magnetic field moves the coil. It's a problem with all TV CRT, on some is barely audible, in other is more noticeable because the coil is more able to move. You could also hear a 50/60 Hz lower tone sometimes caused by the horizontal coil and in some sets by the mains transformer.&lt;/p&gt;&#xA;&lt;p&gt;Anyway it's not normally a problem and the set is working as designed, or maybe the masic used to dampen the coil has dried out: not a big problem.&lt;/p&gt;&#xA;" OwnerUserId="15814" LastActivityDate="2020-12-15T15:01:02.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17305" PostTypeId="1" AcceptedAnswerId="17307" CreationDate="2020-12-15T15:02:33.490" Score="18" ViewCount="2736" Body="&lt;p&gt;AMD really started to come into its own as a competitor to Intel around the time of the Intel 80486 introduction. AMD countered Intel by shipping the popular (at least with PC enthusiasts) Am386-40, which many have claimed performed as well as the Intel 80486-25 at a lower price point.&lt;/p&gt;&#xA;&lt;p&gt;I don't know if AMD itself marketed the Am386 as comparable to the Intel 80486, but they definitely did market their 80486 &amp;quot;clones&amp;quot; as comparable to Intel's Pentium. They even claimed specific performance comparisons, such as the Am586 (which is a 486 clone) being equal to a &amp;quot;P75&amp;quot; (e.g. 75MHz Pentium).&lt;/p&gt;&#xA;&lt;p&gt;If these claims are &amp;quot;real&amp;quot;, then what technical achievements were specifically done by AMD in order to allow their last generation &amp;quot;clone&amp;quot; CPUs to perform on par with Intel's newest generation? Is it really so simple as &lt;strong&gt;just getting to higher clock speeds&lt;/strong&gt; than Intel did? Or, was there &lt;strong&gt;more to AMD's technical achievements&lt;/strong&gt; even in these early years?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-12-15T15:15:22.553" LastActivityDate="2020-12-16T15:14:38.703" Title="How did AMD's 386 and 486 perform like Intel's newer generation?" Tags="&lt;intel&gt;&lt;80386&gt;&lt;80486&gt;&lt;amd&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17306" PostTypeId="2" ParentId="17305" CreationDate="2020-12-15T16:15:48.803" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Is it really so simple as just getting to higher clock speeds than Intel did?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, it is that simple. Up and including the 486 AMD's CPUs were developed close to Intels devices, supported by in detail information provided by Intel as well as reverse engineering. AMD adapted the design to their production process. This included low level changes in how certain circuits got implemented. Higher speeds are usually a result of that adaption.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or, was there more to AMD's technical achievements even in these early years?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, but...&lt;/p&gt;&#xA;&lt;p&gt;No in sense of functional structure. The CPUs were in all logic parts designed exactly like Intel's template. Same blocks, same path design, same registers, same micro code.&lt;/p&gt;&#xA;&lt;p&gt;Yes as implementation of elements like transistors, resistors, capacitors did vary due different manufacturing technology. And that's an area substantial for gains in clock frequency and thus performance.&lt;/p&gt;&#xA;&lt;p&gt;'Technical' (whatever that may be) advancement does not only come from processor design, but at least as much from chip design. And the later is a major component in clock frequencies a certain logical design can reach when made into a chip. And that has been an area were AMD was obvious ahead of Intel.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;A Bit of AMD/Intel Licencing History&lt;/h2&gt;&#xA;&lt;p&gt;It's important to keep in mind that AMD and Intel agreed in 1976 to a cross licence and technology transfer lasting for 20 years (until 1995) which covers all their circuitry and micro code. It is that contract that made AMD a supplier of fully compatible CPUs from 8080 until and including the 80486 - Intel in turn got the 9511 FPU and other chip designs.&lt;/p&gt;&#xA;&lt;p&gt;In 1982 they added another contract specifying technology transfer as primary means. So AMD had not only the rights to reverse engineer all Intel CPUs but as well the right to get all information needed direct without the need to reverse engineer. The 1982 contract got amended in 1984 were AMD agreed to not receive information about Intels new embedded measures for in-circuit emulation (ICE).&lt;/p&gt;&#xA;&lt;p&gt;This was in turn the base for Intel's 1994 law suit against AMD and its AM486 product line, as AMD copied as well the micro code handling the ICE operation, which Intel claimed being a breach of the 1984 amendment. AMD's position was that the microcode was an integral hardware part of the 486 and thus covered by the base agreement.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="815" LastEditDate="2020-12-16T15:14:38.703" LastActivityDate="2020-12-16T15:14:38.703" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17307" PostTypeId="2" ParentId="17305" CreationDate="2020-12-15T16:21:36.193" Score="20" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Am386&quot; rel=&quot;noreferrer&quot;&gt;Am386&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Am486&quot; rel=&quot;noreferrer&quot;&gt;Am486&lt;/a&gt; were designed as clock-for-clock equivalents of the corresponding Intel CPUs, based on reverse-engineering and AMD’s previous second-source licenses — at least the Am386 even used the same micro-code as Intel’s 80386. The only speed advantages came from higher clock speeds (40MHz v. 33MHz) and, in some Am486 models, the use of write-back cache instead of write-through. Both were marketed against the corresponding Intel CPUs, not the next one up, although magazine reviewers were quick to point out that, for example, the 40MHz Am386 could keep up with the 25MHz Intel 486DX in many tasks.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/File:AMD_80386DX_die.JPG&quot; rel=&quot;noreferrer&quot;&gt;Am386&lt;/a&gt; die even bears a “© Intel ’85” note; however comparing it with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80386#/media/File:Intel_A80386DX-20_CPU_Die_Image.jpg&quot; rel=&quot;noreferrer&quot;&gt;Intel 80386&lt;/a&gt; die shows that the Am386 isn’t a direct clone.&lt;/p&gt;&#xA;&lt;p&gt;The next CPU in the range, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Am5x86&quot; rel=&quot;noreferrer&quot;&gt;Am5x86&lt;/a&gt;, was mostly still the same Am486 core, but clock-quadrupled to 133MHz and more, and with a larger cache. This allowed it to compete, in some benchmarks, with 75MHz Pentiums; this is when AMD introduced the “Pentium Rating” marketing speed rating, which would be used by a number of x86 CPU manufacturers.&lt;/p&gt;&#xA;&lt;p&gt;The first AMD CPU which used a significantly different design to Intel’s was the &lt;a href=&quot;https://en.wikipedia.org/wiki/AMD_K5&quot; rel=&quot;noreferrer&quot;&gt;K5&lt;/a&gt;, based on AMD’s 29k RISC CPU; its complexity however limited AMD’s ability to scale its clock speed, so the K5 couldn’t compete on performance, only on price, offering similar performance per dollar (the Pentium had initial teething problems, but by the time the K5 was released, the Pentium had quite high clock speeds, and its performance got better with the MMX variants released just after the K5 became available). Its successor in the market, the &lt;a href=&quot;https://en.wikipedia.org/wiki/AMD_K6&quot; rel=&quot;noreferrer&quot;&gt;K6&lt;/a&gt;, was based on NexGen’s Nx686 after AMD acquired NexGen, and proved capable enough to compete with three generations of Intel CPUs, from the Pentium to the Pentium III (I’m leaving the Pentium Pro aside since it was positioned quite differently).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2020-12-15T16:47:01.443" LastActivityDate="2020-12-15T16:47:01.443" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17308" PostTypeId="2" ParentId="17292" CreationDate="2020-12-15T16:42:03.247" Score="5" Body="&lt;h3&gt;Minority report:&lt;/h3&gt;&#xA;&lt;p&gt;user3840170 answered:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I’d assume auto was never popular in C in the first place, as int is one character shorter, so everyone declared the type anyway.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Some of us more anal retentive types &lt;em&gt;always&lt;/em&gt; used &amp;quot;auto&amp;quot;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;auto int x;&#xA;auto int y;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;as two lines, never as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;int x, y;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It made it much easier to find all the declarations by simply searching for &amp;quot;auto&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Or perhaps it was over-reaction to finding:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;char*  x,y;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;wasting time wondering if that's what they really meant, and having to rewrite it as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;auto char *x;&#xA;auto char  y;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;if it actually was correct.&lt;/p&gt;&#xA;&lt;p&gt;Things like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;char *x, *rindex(), *y;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where implicit &amp;quot;auto&amp;quot; and &amp;quot;extern&amp;quot; were combined, were annoying too.&lt;/p&gt;&#xA;&lt;p&gt;Asking &amp;quot;&lt;em&gt;Why is the ‘auto’ storage class specifier included in C?&lt;/em&gt;&amp;quot; is the wrong question.&lt;br /&gt;&#xA;It should be &amp;quot;&lt;em&gt;Why wasn't the 'auto' storage class specifier &lt;strong&gt;required&lt;/strong&gt; in C?&lt;/em&gt;&amp;quot;.&lt;br /&gt;&#xA;To me it makes even less sense than leaving the &amp;quot;e&amp;quot; off &amp;quot;creat()&amp;quot;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Note: this answer was inspired by a similar frustration (about making things more complicated by simplifying them) that I just commented in Chinese.SE &lt;a href=&quot;https://chinese.stackexchange.com/questions/42153/is-pinyin-an-accurate-pronunciation-guide&quot;&gt;Is pinyin an accurate pronunciation guide?&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;@goPlayerJuggler says &amp;quot;&lt;em&gt;once you understand its (sometimes quite counter-intuitive) rules&lt;/em&gt;&amp;quot;.&#xA;Ironically (to an outsider at least), those complicating rules were done in the name of simplification.&#xA;E.g. When a &amp;quot;ü&amp;quot; is used where a &amp;quot;u&amp;quot; would be illegal, then omit the umlaut — The sequence &amp;quot;ui&amp;quot; is never legal, so omit the &amp;quot;e&amp;quot; from sequence &amp;quot;uei&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which is why &amp;quot;Feng shuei&amp;quot; is spelled &amp;quot;Feng shui&amp;quot;, and commonly mispronounced as a result.&lt;/p&gt;&#xA;" OwnerUserId="15689" LastActivityDate="2020-12-15T16:42:03.247" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17309" PostTypeId="1" CreationDate="2020-12-15T19:34:48.617" Score="11" ViewCount="489" Body="&lt;p&gt;It was long assumed by FS drivers that all diskette and harddisk units operate in blocks of size 512 Bytes. How did this happen to be the case, historically? Why not the &amp;quot;neater&amp;quot; 1 KiB, say?&lt;/p&gt;&#xA;" OwnerUserId="15108" LastActivityDate="2020-12-17T00:42:33.347" Title="How did 512 Bytes come to be the most common sector size?" Tags="&lt;floppy-disk&gt;&lt;hard-disk&gt;&lt;file-system&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17310" PostTypeId="2" ParentId="17309" CreationDate="2020-12-15T21:11:11.973" Score="8" Body="&lt;p&gt;Sectoring on disks predates floppies.  It was in widespread use on hard disks by the time floppies came around.  Also, I would note that everything from 1 byte/word granularity to track-sized sectors has been argued for (and sometimes used) over the years on both floppies and hard disks.&lt;/p&gt;&#xA;&lt;p&gt;Still, why did it settle largely on 512?  First, it's just as neat as 1024.  It's the previous power of 2.  And it was picked for the same reason why memory sizes are a power of two; it's a nice round number for a binary computer.&lt;/p&gt;&#xA;&lt;p&gt;Beyond that, as to why 512 instead of 128, 256 or 1024 or whatever, my impression is that it was a question of trade-offs:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Space efficiency on disk.  Small sectors waste space for headers and spacing.  Large sectors waste space to store a few bytes in a whole sector.  512 bytes turns out to be a reasonable compromise for a couple hundred files on a half megabyte of media.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use of memory vs. speed.  1 KB was a lot of memory on systems in the late 70s and into the 1980s.  Open a few files, add a tiny bit of caching so the system doesn't crawl, and you're using all your RAM just for buffers.  On the other hand, if the sector size is too small, there is increased overhead, more seeking on disk, and it gets too slow.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2020-12-15T21:24:08.177" LastActivityDate="2020-12-15T21:24:08.177" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17311" PostTypeId="2" ParentId="16815" CreationDate="2020-12-15T21:37:30.977" Score="1" Body="&lt;p&gt;The Memotech MTX computer (circa 1983, 4MHz Z80A, 24 KB ROM, 32 or 64 KB RAM, 9918A/9929A VDP, 16KB VRAM) came with a manual with full circuit diagrams at the back, and even selected extracts from chip specifications (eg: VDP).&lt;/p&gt;&#xA;" OwnerUserId="11415" LastActivityDate="2020-12-15T21:37:30.977" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17312" PostTypeId="1" AcceptedAnswerId="17315" CreationDate="2020-12-15T22:06:25.950" Score="20" ViewCount="4886" Body="&lt;p&gt;Most 8-bit computers implemented hardware text mode, and most of those used 8x8 fonts. This was logical for American computers; the title safe area on NTSC is about 200 scan lines; font height 8 gets you 25 text lines, which is the de facto standard. (Or use 192 scan lines for 24 text lines, the other candidate for de facto standard.)&lt;/p&gt;&#xA;&lt;p&gt;But the title safe area on PAL is more like 250 scan lines. To get 25 text lines, an 8x10 font would be ideal. This would nicely fill the screen, and would also look better. (8x8 is not &lt;em&gt;quite&lt;/em&gt; enough to make descenders look good.)&lt;/p&gt;&#xA;&lt;p&gt;It seems to me that there is a curious absence of this being done.&lt;/p&gt;&#xA;&lt;p&gt;For example, the PAL version of the Commodore 64, sticks to the 8x8 font, leaving large chunks of unused screen space at the borders. Okay, because the font size on that machine was intimately linked to the graphics modes, changing it would break the ability to import American games, which is a good reason for that design decision.&lt;/p&gt;&#xA;&lt;p&gt;But the Commodore PET had no such graphical capability; changing the font could not possibly have upset anything, yet it kept 8x8 anyway. Maybe that was because Commodore figured a better-looking display wouldn't gain them enough extra sales to pay for the extra engineering effort; easier to just take the American design straight across.&lt;/p&gt;&#xA;&lt;p&gt;Much stranger was the ZX Spectrum, which didn't even have hardware text mode, rendered everything purely bitmap, but used 8x8 anyway, using only 192 scan lines for 24 text lines.&lt;/p&gt;&#xA;&lt;p&gt;The only 8-bit machine I know of to take advantage of PAL resolution was the BBC Micro, and that &lt;em&gt;still&lt;/em&gt; stuck to 8x8 for its software bitmap fonts, giving 32 text lines, which at least is using the full resolution of the screen, though creates awkwardness if you want to port software across the Atlantic.&lt;/p&gt;&#xA;&lt;p&gt;Did any European 8-bit computers use a 10-line font, either hardware or software, to take advantage of PAL displays? (Not counting the later GUI machines where fonts became arbitrarily resizable anyway.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-19T18:20:56.820" Title="Did any European computers use 10-line fonts?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;display&gt;&lt;8-bit-microcomputers&gt;" AnswerCount="11" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17314" PostTypeId="1" AcceptedAnswerId="17347" CreationDate="2020-12-15T23:53:18.143" Score="10" ViewCount="516" Body="&lt;p&gt;Received wisdom has it that Commodore didn't want to pay Microsoft extra for updated BASIC interpreters, and thus very little changed in Commodore BASIC v2 from the PETs to the C64. But consider the following program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;5 PRINT&#xA;10 PRINT &amp;quot;FOR:&amp;quot;&#xA;20 T=TIME&#xA;30 FOR I=1 TO 7138&#xA;40 NEXT I&#xA;50 DT=(TIME-T)/60&#xA;60 PRINT I;&amp;quot;LOOPS IN&amp;quot;;DT;&amp;quot;S:&amp;quot;;INT(I/DT);&amp;quot;/S&amp;quot;&#xA;70 PRINT &amp;quot;GOTO:&amp;quot;&#xA;80 T=TIME&#xA;90 FOR I=1 TO 4588&#xA;100 GOTO 110&#xA;110 NEXT I&#xA;120 DT=(TIME-T)/60&#xA;130 PRINT I;&amp;quot;LOOPS IN&amp;quot;;DT;&amp;quot;S:&amp;quot;;INT(I/DT);&amp;quot;/S&amp;quot;&#xA;135 PRINT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Run on an NTSC C64, it outputs:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FOR:&#xA; 7139 LOOPS IN 10 S: 713 /S&#xA;GOTO:&#xA; 4589 LOOPS IN 10 S: 458 /S&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But on a PET (almost any model), the results are:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FOR:&#xA; 7139 LOOPS IN 9.93333334 S: 718 /S&#xA;GOTO:&#xA; 4589 LOOPS IN 13.3166667 S: 344 /S&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So while the &lt;code&gt;FOR&lt;/code&gt; loops run about the same speed on both machines, the PET's &lt;code&gt;GOTO&lt;/code&gt; is roughly ⅓ slower than the C64's.&lt;/p&gt;&#xA;&lt;p&gt;So my question: what changed in the code to improve this performance? (And perhaps a secondary question: was this improvement made by Microsoft and reflected in other MS 6502 interpreters?)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Further to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17314/commodore-basic-why-was-the-pets-goto-so-slow?noredirect=1#comment58929_17314&quot;&gt;WimC's comment&lt;/a&gt; I renumbered the test as suggested to ensure that the high byte of the &lt;code&gt;GOTO&lt;/code&gt; target was higher than that of the current line:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;5 PRINT&#xA;10 PRINT &amp;quot;FOR:&amp;quot;&#xA;20 T=TIME&#xA;30 FOR I=1 TO 7138&#xA;40 NEXT I&#xA;50 DT=(TIME-T)/60&#xA;60 PRINT I;&amp;quot;LOOPS IN&amp;quot;;DT;&amp;quot;S:&amp;quot;;INT(I/DT);&amp;quot;/S&amp;quot;&#xA;70 PRINT &amp;quot;GOTO:&amp;quot;&#xA;80 T=TIME&#xA;90 FOR I=1 TO 4588&#xA;100 GOTO 310&#xA;310 NEXT I&#xA;320 DT=(TIME-T)/60&#xA;330 PRINT I;&amp;quot;LOOPS IN&amp;quot;;DT;&amp;quot;S:&amp;quot;;INT(I/DT);&amp;quot;/S&amp;quot;&#xA;335 PRINT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The C64 results stay the same, but on an emulated PET the &lt;code&gt;GOTO&lt;/code&gt; rate is faster:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FOR:&#xA; 7139 LOOPS IN 9.93333334 S: 718 /S&#xA;GOTO:&#xA; 4589 LOOPS IN 9.95 S: 461 /S&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2020-12-17T16:09:35.827" LastActivityDate="2020-12-18T03:30:22.840" Title="Commodore BASIC: why was the PET's GOTO so slow?" Tags="&lt;basic&gt;&lt;6502&gt;&lt;commodore&gt;&lt;benchmarking&gt;" AnswerCount="4" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17315" PostTypeId="2" ParentId="17312" CreationDate="2020-12-16T00:23:50.717" Score="15" Body="&lt;p&gt;Why is the question restricted to 8-bit computers? How would the bus or register width factor in that decision?&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Electronika_BK&quot; rel=&quot;noreferrer&quot;&gt;Elektronika BK&lt;/a&gt; series used 256 scan lines and a 10-line font, subdivided into 24 text lines, 1 status line, and a divider/tabstop indicator area between them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WQ7mE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WQ7mE.png&quot; alt=&quot;Screenshot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2020-12-16T00:45:02.850" LastActivityDate="2020-12-16T00:45:02.850" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17316" PostTypeId="2" ParentId="17312" CreationDate="2020-12-16T00:42:22.803" Score="16" Body="&lt;p&gt;Teletext — as seen in the BBC Micro's &lt;code&gt;MODE 7&lt;/code&gt; — used more than 8 lines for its font:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YZnK4.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YZnK4.png&quot; alt=&quot;enlarged mode 7 text&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(The line spacing in the image is incorrect, but to the best of my knowledge the pixel imagery is correct)&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-12-16T00:42:22.803" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17317" PostTypeId="1" CreationDate="2020-12-16T02:23:38.720" Score="7" ViewCount="3197" Body="&lt;p&gt;The Wave Race game for Nintendo 64 is called &amp;quot;&lt;strong&gt;Wave Race 64 - Kawasaki Jet Ski&lt;/strong&gt;&amp;quot; in a ROM set.&#xA;On Wikipedia, which I've previously considered authoritative for titles of commercial products, it's simply called &amp;quot;&lt;strong&gt;Wave Race 64&lt;/strong&gt;&amp;quot;.&#xA;On MobyGames, it's called &amp;quot;&lt;strong&gt;Wave Race 64: Kawasaki Jet Ski&lt;/strong&gt;&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Three different titles for the same game. And it doesn't seem to be based on the region in this case, unlike other games which may have completely different subtitles or even full titles based on the region.&lt;/p&gt;&#xA;&lt;p&gt;How am I supposed to know what a game &lt;em&gt;actually&lt;/em&gt; was officially called? Is there a massive list of the real, official titles for all video games? (Which is not just &amp;quot;guessed&amp;quot; or &amp;quot;approximated&amp;quot;.)&lt;/p&gt;&#xA;&lt;p&gt;I'm not just asking for this game in particular, but in general. Clearly, there is no consistency between Wikipedia, MobyGames and the filenames in ROM sets.&lt;/p&gt;&#xA;&lt;p&gt;For this particular case (and in many other cases), the box art is of little help, since the &amp;quot;subtitle&amp;quot; is ambiguous at best: &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/en/e/e6/Wave_Race_64_Coverart.png&quot; rel=&quot;noreferrer&quot;&gt;https://upload.wikimedia.org/wikipedia/en/e/e6/Wave_Race_64_Coverart.png&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20163" LastActivityDate="2020-12-16T02:41:29.567" Title="How do I find out the REAL title of a given video game?" Tags="&lt;identify-this-game&gt;&lt;data-preservation&gt;&lt;database&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17318" PostTypeId="2" ParentId="17314" CreationDate="2020-12-16T02:27:33.370" Score="1" Body="&lt;p&gt;It is more likely counting from the beginning.  In 8bit basic, the line lengths are stored, and to find the beginning of a line, it must, look at each line.&lt;/p&gt;&#xA;&lt;p&gt;I had the same with the Tandy 100.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2020-12-16T02:27:33.370" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17319" PostTypeId="2" ParentId="17317" CreationDate="2020-12-16T02:41:29.567" Score="29" Body="&lt;p&gt;I commend your desire for accuracy in software preservation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How am I supposed to know what a game actually was officially called?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This presupposes the existence of a single, official title.  That may not always be the case.  Titles of software are often chosen quite late in development, and may be localized, or chosen by the publisher and not the creator or studio.  This is particularly true with the physical packaging, manuals, and so on.&lt;/p&gt;&#xA;&lt;p&gt;Software is also sometimes renamed, relaunched or re-issued with minor changes, and that may include tweaking the title or other such superficial elements.&lt;/p&gt;&#xA;&lt;p&gt;If you wish to be methodical about this, you would have to define what an official title is, and then attempt to establish that the criteria are met.  Some thoughts on what you might consider:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If the work was registered for copyright in a jurisdiction that allows or requires this, what was the title used there?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it was advertised, or listed in catalogues, etc., what was the title used there?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Does the title actually appear in the software itself?  Is it the same in different localizations/markets?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What was the title, as actually chosen by the people responsible for the choice at the studio or publishers?  This would likely require insider information -- documents or testimonials from someone who worked there.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If there actually are multiple forms of the title used, which should take precedence?  Packaging or the software?  Publisher or the author?  Local market or overseas markets?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-12-16T02:41:29.567" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17321" PostTypeId="2" ParentId="17314" CreationDate="2020-12-16T05:15:40.613" Score="6" Body="&lt;p&gt;If memory serves, the BASIC in the C64 and VIC-20 checks whether a GOTO line number is greater than or equal to the present line number and will scan from the start of the current line if so, and otherwise start from the beginning of the program.  I wouldn't be surprised if the PET BASIC is always starting from the start of the program.  It looks like the code is taking about 720 extra cycles per goto, to scan 11 lines, so about 65 cycles/line.  It's too bad 6502 versions of MS-BASIC didn't store the length of each line at the start, rather than an address link, since that would have saved a byte per line, reduced scanning time (to about 26 cycles/line), and eliminated the need to fix up line links when code gets relocated.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2020-12-16T16:57:46.847" LastActivityDate="2020-12-16T16:57:46.847" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17322" PostTypeId="2" ParentId="17312" CreationDate="2020-12-16T07:44:23.463" Score="5" Body="&lt;p&gt;The &lt;a href=&quot;http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Interface%20Cards/80%20Column%20Cards/Videx%20Videoterm/&quot; rel=&quot;noreferrer&quot;&gt;Videx Videoterm&lt;/a&gt; 80 column card for the Apple II (very different from the 80 column display on the Apple //e) used an 6845 that had a programmable character height (and width), with a maximum of 8x16 pixels for characters.&lt;/p&gt;&#xA;&lt;p&gt;You could change the font by burning your own EEPROM, but the standard font was 7x9 (or 9x9 if you count spacing between characters) for 80x24 characters on a monitor.&lt;/p&gt;&#xA;&lt;p&gt;Apparently at some stage they also offered a 7x12 (or 9x12) font for 80x18 characters, but this feature was then removed (the 80 column card I had didn't aloow this).&lt;/p&gt;&#xA;&lt;p&gt;So it looks like your sentiment of &amp;quot;to get 25 text lines, an 8x10 font would be ideal&amp;quot; was not shared by everyone ... though you could have burned your own EEPROM to get such a font.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-12-16T07:44:23.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17323" PostTypeId="2" ParentId="17312" CreationDate="2020-12-16T09:06:49.420" Score="17" Body="&lt;p&gt;The ABC 80 computer used a 5×9 character matrix, each interspersed with one row and one column giving 6×10 pixels per character.&lt;/p&gt;&#xA;&lt;p&gt;The followup ABC 800 models followed teletext specifications and thus also had 10 pixels per text row.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Mvhll.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Mvhll.png&quot; alt=&quot;Source: Mikrodatorns ABC&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9074" LastActivityDate="2020-12-16T09:06:49.420" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17324" PostTypeId="2" ParentId="17312" CreationDate="2020-12-16T11:35:23.670" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Minitel&quot; rel=&quot;nofollow noreferrer&quot;&gt;French Minitel&lt;/a&gt; (cocorico!) used a 8x10 font size. But it has its own screen, you couldn't connect an external PAL screen.&lt;/p&gt;&#xA;&lt;p&gt;The  &lt;a href=&quot;https://en.wikipedia.org/wiki/Philips_VG5000&quot; rel=&quot;nofollow noreferrer&quot;&gt;Philips VG5000&lt;/a&gt; also. This one was made to be connected to a TV through a peritel port.&lt;/p&gt;&#xA;&lt;p&gt;In fact, both these use the SGS-Thomson EF9345 &amp;quot;graphic&amp;quot; chip. I suspect it was used by some other computers too, and I bet those would certainly all have a 8x10 font size: it is on the &lt;a href=&quot;https://www.goto10.fr/minitel/specifications/ef9345.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;specs&lt;/a&gt; of the chip. See page 22, for example.&lt;/p&gt;&#xA;" OwnerUserId="4614" LastActivityDate="2020-12-16T11:35:23.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17325" PostTypeId="2" ParentId="17312" CreationDate="2020-12-16T13:23:17.770" Score="1" Body="&lt;p&gt;With the PAL-compatible 50Hz / 15.625kHz setting, it was even possible to get 288 visible scan lines, allowing for 24 text lines of 12 pixels height (not from your average modified TV set, but from a monitor).&lt;/p&gt;&#xA;&lt;p&gt;At university, I used a programmable video card to subdivide these 24 lines one step further to get 72 &amp;quot;lines&amp;quot; of 4*8px cells. Each text position consisted of 3 cells, two with the upper and lower half of the glyph, and one gap cell. This gave the opportunity to move a glyph up or down by 1/3 of a line height.&lt;/p&gt;&#xA;&lt;p&gt;I used this arrangement to support indices and exponents in a WordStar extension for scientific text.&lt;/p&gt;&#xA;&lt;p&gt;But the character generator was still based on an 8*8 font, so this doesn't literally match the question.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2020-12-16T13:23:17.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17327" PostTypeId="2" ParentId="17200" CreationDate="2020-12-16T17:04:40.647" Score="1" Body="&lt;p&gt;If you want a decent history of speech synthesis check out  &lt;a href=&quot;https://www.youtube.com/watch?v=XsMRxNSDccc&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video by the 8 bit guy&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20184" LastEditorUserId="611" LastEditDate="2020-12-16T18:12:32.940" LastActivityDate="2020-12-16T18:12:32.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17329" PostTypeId="2" ParentId="17312" CreationDate="2020-12-17T00:35:26.970" Score="1" Body="&lt;p&gt;The Nascom 1 and 2 computers used a 9-line font on a 256 scan-line display, but as their display hardware was implemented with 74xxx series logic chips simplicity was its main goal, so for ease of address calculation, the 9-line font was displayed with 7 blank lines between each character, meaning there were only 16 rows on the display.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-12-17T00:35:26.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17330" PostTypeId="2" ParentId="17309" CreationDate="2020-12-17T00:42:33.347" Score="2" Body="&lt;p&gt;512 byte sector became the de facto standard because they were the size of sector used by the IBM PC. Prior to the PC's dominance, other sector sizes were also common - notably, CP/M (which was the most popular microcomputer operating system prior to the release of the IBM PC)  used 256 byte sectors.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-12-17T00:42:33.347" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17331" PostTypeId="2" ParentId="16815" CreationDate="2020-12-17T00:49:22.887" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Nascom_(computer_kit)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nascom 1 and 2 computers&lt;/a&gt; went a step further still - they were launched alongside a series of articles in a well-known UK electronics magazine that explained how they work in precise detail.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-12-17T00:49:22.887" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17334" PostTypeId="2" ParentId="11959" CreationDate="2020-12-17T04:17:38.130" Score="3" Body="&lt;p&gt;Commodore Germany developed the &lt;a href=&quot;http://www.6502.org/users/sjgray/computer/hsg/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;High Speed Grafik&lt;/a&gt;, a graphics card displaying 512x512i or 512x256 pixels on the internal monitor of a CBM 4xxx/8xxx. A follow up graphics card for the 8296, &lt;a href=&quot;http://www.6502.org/users/sjgray/computer/petgraphics/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;HRE&lt;/a&gt;, was also developed in Braunschweig.&lt;/p&gt;&#xA;&lt;p&gt;The printers were already mentioned, they also did the &lt;a href=&quot;http://www.zimmers.net/cbmpics/jkeys7.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MBS system&lt;/a&gt; that would let several pets share the same set of peripherals. Additionally some (or all?) of the later CBM 8xxx (8096, 8296, I think, maybe the -SK designs) were done in Braunschweig.&lt;/p&gt;&#xA;&lt;p&gt;The reason for all this PET centered development is that the PET was pretty successful as a business computer in Germany (allegedly, they had about 20% of the business market in 1982). That's also why they started developing PCs: Commodore USA had decided to concentrate on the consumer market, but Germany needed a follow-up for their aging CBM line.&lt;/p&gt;&#xA;&lt;p&gt;PCs developed in Braunschweig (there might be more:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PC-5&lt;/li&gt;&#xA;&lt;li&gt;PC-10&lt;/li&gt;&#xA;&lt;li&gt;PC-20&lt;/li&gt;&#xA;&lt;li&gt;PC-30&lt;/li&gt;&#xA;&lt;li&gt;PC-10 II&lt;/li&gt;&#xA;&lt;li&gt;PC-20 II&lt;/li&gt;&#xA;&lt;li&gt;PC-10 III&lt;/li&gt;&#xA;&lt;li&gt;PC-20 III&lt;/li&gt;&#xA;&lt;li&gt;Colt&lt;/li&gt;&#xA;&lt;li&gt;PC-30 III&lt;/li&gt;&#xA;&lt;li&gt;PC-35 III&lt;/li&gt;&#xA;&lt;li&gt;PC-40 III&lt;/li&gt;&#xA;&lt;li&gt;PC-45 III&lt;/li&gt;&#xA;&lt;li&gt;PC-60 III&lt;/li&gt;&#xA;&lt;li&gt;PC-70 III&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Th PC-10/20 had a motherboard that consisted of two separate parts. One of the explanations (there are others) I heard for that fact: The design was done on PETs, and the PET didn't have enough memory for designing bigger boards...&lt;/p&gt;&#xA;&lt;p&gt;Braunschweig also developed the original A2000 design, that was later cost-reduced by Dave Haynie, the sidecar and most (if not all) &amp;quot;Bridgeboards&amp;quot; that contained a mostly complete PC on an Amiga expansion card.&lt;/p&gt;&#xA;&lt;p&gt;Commodore Germany's chief of engineering Wilfried Rusniok joined Schneider Computer Division in 1988, which then developed the &lt;a href=&quot;http://www.classiccomputer.de/ams/scheuropc.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Schneider Euro PC&lt;/a&gt;, the most Commodore-like PC ever built ;)&lt;/p&gt;&#xA;&lt;p&gt;The CBM 900 was &lt;strong&gt;not&lt;/strong&gt; designed in Germany but in West Chester by Commodore's 'Unix Group'.&lt;/p&gt;&#xA;" OwnerUserId="20197" LastActivityDate="2020-12-17T04:17:38.130" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17335" PostTypeId="1" CreationDate="2020-12-16T21:22:13.727" Score="11" ViewCount="572" Body="&lt;p&gt;I am trying to find which language used the &lt;code&gt;|&amp;gt;&lt;/code&gt; operator first.&lt;/p&gt;&#xA;&lt;p&gt;It's &lt;a href=&quot;https://www.youtube.com/watch?t=4089&amp;amp;v=X_eDHNVceCU&quot; rel=&quot;noreferrer&quot;&gt;being discussed for use in R&lt;/a&gt;, and it's been in &lt;a href=&quot;https://stackoverflow.com/a/8986507&quot;&gt;OCaml&lt;/a&gt; for some years.&lt;/p&gt;&#xA;&lt;p&gt;Did it originate in OCaml? If not, what are its earliest origins and use?&lt;/p&gt;&#xA;" OwnerUserId="20198" OwnerDisplayName="stevec" LastEditorUserId="2037" LastEditDate="2020-12-17T07:39:53.303" LastActivityDate="2020-12-17T12:19:55.610" Title="What was the earliest use of |&gt; pipe in programming?" Tags="&lt;history&gt;&lt;programming&gt;&lt;terminology&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17336" PostTypeId="2" ParentId="17335" CreationDate="2020-12-17T08:01:54.170" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pipeline_%28Unix%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pipes&lt;/a&gt; have been a feature of Unix and &lt;a href=&quot;https://en.wikipedia.org/wiki/Unix_shell&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unix shell&lt;/a&gt; programming since the the first Unix shell was introduced between 1971 and 1975.&lt;/p&gt;&#xA;" OwnerUserId="19504" LastActivityDate="2020-12-17T08:01:54.170" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17337" PostTypeId="1" CreationDate="2020-12-17T09:38:24.240" Score="43" ViewCount="7732" Body="&lt;p&gt;In cartoons, you often see characters like Scrooge McDuck with a coin where they have drilled a hole in the middle and attached a string, enabling them to insert the coin multiple times and keep pulling it out from the machine repeatedly, tricking the machine into believing that many different coins have been inserted.&lt;/p&gt;&#xA;&lt;p&gt;Is or was this actually ever possible? I was too honest and scared to ever try this as a kid, although I did &lt;em&gt;think&lt;/em&gt; about it many times. If I had the resources, I would probably at least have &lt;em&gt;tried&lt;/em&gt; it once, just to see if it would work.&lt;/p&gt;&#xA;&lt;p&gt;Maybe they had predicted this and implemented some kind of scissors auto-cutting above the coin every time it registers a new coin? Or maybe the coin moves in such a way that any string would get stuck or not be able to pull it back up again?&lt;/p&gt;&#xA;&lt;p&gt;If this was actually possible, did some people actually do it? I almost never got to play on the arcade games, because I had so little money, so it would've been a game changer (literally) to me. On the other hand, doing it on slot machines and other gambling devices seems very illegal, since you'd actually be robbing the one-armed bandits!&lt;/p&gt;&#xA;" OwnerUserId="20201" LastActivityDate="2020-12-19T06:59:37.507" Title="Was it actually possible to do the cartoon &quot;coin on a string trick&quot; for old arcade and slot machines?" Tags="&lt;arcade&gt;" AnswerCount="12" CommentCount="13" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17338" PostTypeId="2" ParentId="17335" CreationDate="2020-12-17T10:18:14.523" Score="6" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Douglas_McIlroy&quot; rel=&quot;noreferrer&quot;&gt;Douglas McIlroy&lt;/a&gt; wanted to introduce pipes already at the beginning of &lt;a href=&quot;https://en.wikipedia.org/wiki/Multics&quot; rel=&quot;noreferrer&quot;&gt;Multics&lt;/a&gt; project in 1964:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;We should have some ways of connecting programs like garden hose -- screw in another segment when it becomes necessary to massage[sic?] data in another way.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But at least according to Wikipedia, they were implemented in Unix first.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;|&amp;gt;&lt;/code&gt; in OCAML and similar operators for &lt;a href=&quot;https://stackoverflow.com/questions/944446/what-is-point-free-style-in-functional-programming&quot;&gt;point-free&lt;/a&gt; (i.e., not using variables, instead composing functions by pipes and other means) programming in other functional (and increasingly, non-functional) languages go back at least to the seminal article &lt;a href=&quot;https://dl.acm.org/doi/10.1145/359576.359579&quot; rel=&quot;noreferrer&quot;&gt;Can programming be liberated from the von Neumann style?&lt;/a&gt; by &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Backus&quot; rel=&quot;noreferrer&quot;&gt;John Backus&lt;/a&gt; (you may have heard of Backus-Naur-Form or BNF) from 1978.&lt;/p&gt;&#xA;&lt;p&gt;If the question is meant more as &amp;quot;why was specifically &lt;code&gt;|&amp;gt;&lt;/code&gt; chosen&amp;quot;, it's important to keep in mind that in OCAML, infix operators have to start with certain symbols, and the precedence of the operator is determined by the initial symbols (see e.g. &lt;a href=&quot;https://caml.inria.fr/pub/docs/manual-ocaml/libref/Ocaml_operators.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;That's why the choice of operators in OCAML is very different from, e.g., Haskell, where there is a whole zoo of left and right application and composition operators, for pure functions, monads, categories, and other structures.&lt;/p&gt;&#xA;&lt;p&gt;Even though the operation itself is the same.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-12-17T12:19:55.610" LastActivityDate="2020-12-17T12:19:55.610" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17339" PostTypeId="2" ParentId="17337" CreationDate="2020-12-17T10:48:30.270" Score="21" Body="&lt;p&gt;It's difficult to be sure that there was never a system in use that was vulnerable to this trick, but certainly there were systems available from a very early stage that weren't. &lt;a href=&quot;http://www.sandsmuseum.com/coinop/mechanisms/coinslide/coinslide.html&quot; rel=&quot;noreferrer&quot;&gt;This coin acceptor&lt;/a&gt; is typical: it uses a ratchet mechanism that engages the moment the coin is accepted to prevent reverse motion.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2020-12-17T10:48:30.270" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17340" PostTypeId="2" ParentId="17337" CreationDate="2020-12-17T11:27:50.033" Score="17" Body="&lt;p&gt;You could fool purely mechanical devices with mechanical tricks. One trick I have used when a kid, was with bottle caps. We wore them out underneath our shoes, until they were the size of a coin, fit for a bubblegum machine.&lt;/p&gt;&#xA;&lt;p&gt;But I get the feeling that with the earliest introduction of electronics into slot and arcade machines, the electronic sensing of the correct coins was not far behind in development.&lt;/p&gt;&#xA;" OwnerUserId="7388" LastActivityDate="2020-12-17T11:27:50.033" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="17341" PostTypeId="2" ParentId="17337" CreationDate="2020-12-17T11:56:03.713" Score="8" Body="&lt;p&gt;In the early days, some pay-phones were modified because it was possible to recover the coin (push button A), once a connection had been made.&lt;/p&gt;&#xA;&lt;p&gt;The other common device was to use slugs (like washers or coins of lower value), to get the games at discount prices.  This is one of the reasons for having different-sized coins for different denominations and countries.&lt;/p&gt;&#xA;&lt;p&gt;For example, NZ money was worth $1NZ = 80c AU, but their coins were the same size for 5-20 c.  So feeding a 10c NZ money gives a game for 8c.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2020-12-17T11:56:03.713" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="17342" PostTypeId="2" ParentId="17335" CreationDate="2020-12-17T12:05:15.250" Score="0" Body="&lt;p&gt;vbar is used for a number of different uses, some keyboards have two variants of it ¦ and ̄&lt;/p&gt;&#xA;&lt;p&gt;In IBM languages like APL, it is used for logical or (true if either or both).  IBM were dissenters against a common ASCII code for this reason.&lt;/p&gt;&#xA;&lt;p&gt;In written maths, | can also mean 'divides', so 5 | 15 means that five goes into 15 an integer number of times.&lt;/p&gt;&#xA;&lt;p&gt;In the BNL markup form | gives a range of equal options, in 'radio-button' style (exclusive or), so answer = yes | no .&lt;/p&gt;&#xA;&lt;p&gt;in REXX (1980s), it comes to mean logical or singularly, or concatinate double.&lt;/p&gt;&#xA;&lt;p&gt;You will probably find it goes back as far as the character used to divide tables, ie a vertical rule in a set of type.  This is why it's in CP 437.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2020-12-17T12:05:15.250" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17343" PostTypeId="2" ParentId="3041" CreationDate="2020-12-17T12:25:41.613" Score="-2" Body="&lt;p&gt;DOS 1 is the only DOS version to not support drivers.  Anything higher supports drivers.&lt;/p&gt;&#xA;&lt;p&gt;In essence, writing to register-and-interrupt is a relatively simple process.  I wrote an RPN calculator, the control structure was 10 lines of BASICA, and six registers.  The nature of the thing was that there was a continual stream of characters, which would toggle various states of the registers.&lt;/p&gt;&#xA;&lt;p&gt;When a function was invoked, it would read registers and return the answer to A.  If a certain condition (error-flag = 0), then the value in A would be expanded to display, and the stack (T,Z,Y,X,L) moved about.&lt;/p&gt;&#xA;&lt;p&gt;Some of the loaded drivers in DOS provide an interrupt interface.  Installing a mouse will not make programs that don't know about the mouse see it.  The mouse has its own interrupts, and moves an overlay on the screen to match what the motions of the rodent are.&lt;/p&gt;&#xA;&lt;p&gt;One of the big things in MSDOS-compatable computer era (ie pre-dos 5), is that the video bios differed from machine to machine, one bought games for the IBM or the Tandy or whatever, just as one buys machines for X-Box or whatever.&lt;/p&gt;&#xA;&lt;p&gt;It must be remembered that IBMDOS.COM and MSDOS.SYS are little more than interrupt providers for standard drivers.  These change much less from version to version: identical in MS-DOS 6.20/1/2 for example.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastEditorUserId="19433" LastEditDate="2020-12-17T13:07:02.103" LastActivityDate="2020-12-17T13:07:02.103" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17345" PostTypeId="2" ParentId="17312" CreationDate="2020-12-17T15:21:39.113" Score="6" Body="&lt;p&gt;It isn't European, but the Atari 8-bit range could do a ten-line character mode (IR mode 3, which looks like graphics mode 0 but with a little bit of extra line spacing), where the characters were still designed on an 8x8 grid but descenders (the last 32 characters) were padded by two blank lines at the top, with the rest padded with two blank lines at the bottom.&lt;/p&gt;&#xA;&lt;p&gt;Obviously this isn't &lt;em&gt;quite&lt;/em&gt; the same as a true 8x10 character mode, but it's an interesting data point I think.&lt;/p&gt;&#xA;" OwnerUserId="6857" LastActivityDate="2020-12-17T15:21:39.113" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17346" PostTypeId="2" ParentId="17337" CreationDate="2020-12-17T16:54:54.090" Score="27" Body="&lt;p&gt;I actually did this with pinball machines in 1980-ish. Getting 3-5 games before the coin was lost wasn't impossible, and some of my friends did better than that.&lt;/p&gt;&#xA;" OwnerUserId="9127" LastActivityDate="2020-12-17T16:54:54.090" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17347" PostTypeId="2" ParentId="17314" CreationDate="2020-12-17T17:59:35.813" Score="4" Body="&lt;p&gt;PET basic v2 only starts scanning from the current line if the high byte of the goto line number is greater than the high byte of the current line number. Otherwise it starts at the beginning of the program. What happens if you renumber lines 110 up so that they start from 310 (and the goto on line 100 of course)?&lt;/p&gt;&#xA;" OwnerUserId="20160" LastActivityDate="2020-12-17T17:59:35.813" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17348" PostTypeId="2" ParentId="17337" CreationDate="2020-12-17T19:20:17.427" Score="4" Body="&lt;p&gt;There was some washing machines that were susceptible to a modified &amp;quot;quarter on a string&amp;quot; trick. These washing machines were circa 2002-2004.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Given that the above mentioned &amp;quot;coin on a string trick&amp;quot; worked in 2002-2004, the example shows that some coin slots could be tricked (and these machines were not old)!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I think coin slots are probably like locks and have a large variety with some being very cheap and some being more expensive (probably casino slot machines you can not trick).&lt;/p&gt;&#xA;&lt;p&gt;long story:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Eventually the washing machines switched to a card based system&lt;/li&gt;&#xA;&lt;li&gt;the card held the amount of money (less people cheating, less maintenance, less labor collecting coins, less broken machines caused by people jamming the coin slot)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The &amp;quot;modified&amp;quot; version of &amp;quot;quarter on a string was to use &amp;quot;many layers of scotch tape&amp;quot; (i won't go into detail on purpose).&lt;/p&gt;&#xA;" OwnerUserId="6567" LastEditorUserId="6567" LastEditDate="2020-12-18T14:52:34.520" LastActivityDate="2020-12-18T14:52:34.520" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17349" PostTypeId="2" ParentId="17337" CreationDate="2020-12-17T19:27:57.193" Score="3" Body="&lt;p&gt;Not for a coin on a string, but there is (and probably several) cases of 'bill on a string'.&#xA;&lt;a href=&quot;https://www.indystar.com/story/news/crime/2019/05/24/bill-string-car-wash-theft-suspect-faces-new-charges-after-chase/1204906001/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.indystar.com/story/news/crime/2019/05/24/bill-string-car-wash-theft-suspect-faces-new-charges-after-chase/1204906001/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This was not the one I remembered, but similar to. A laminated bill and a long spool of plastic were fed into the machine. When refunded, the whole amount were pulled back out.&lt;/p&gt;&#xA;" OwnerUserId="16088" LastActivityDate="2020-12-17T19:27:57.193" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17350" PostTypeId="2" ParentId="17337" CreationDate="2020-12-17T20:14:06.943" Score="4" Body="&lt;p&gt;Not a gaming machine, but a street phone operated by coins. Pretty much working trick in '80s in USSR and &amp;quot;influenced&amp;quot; countries (I think there was only one model of a street phone).&lt;/p&gt;&#xA;&lt;p&gt;The trick worked for a while (years), then rather strong inflation kicked in and the trick became pointless.&lt;/p&gt;&#xA;" OwnerUserId="15647" LastActivityDate="2020-12-17T20:14:06.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17351" PostTypeId="2" ParentId="17337" CreationDate="2020-12-17T22:30:08.407" Score="12" Body="&lt;p&gt;The answer is yes, in some cases....&lt;/p&gt;&#xA;&lt;p&gt;Back in the 80's my college roommate figured out how to defeat the coin operated washing machines at the local laundromat.   The machine took US quarters.  It had the type of coin receiver where you loaded several quarters into slots on a metal plate, then pushed the plate in and pulled it out.  The machine took the coins, and the washer started.&lt;/p&gt;&#xA;&lt;p&gt;He discovered if he used Canadian quarters AND pushed the plate in and retracted it quickly the washer would start and the Canadian quarters would still be on the plate.   This only worked with Canadian quarters.  It was not 100 percent effective as the washer would get 1 out of every ten or twenty quarters.   Also, the coin mechanisms were not worn out and the trick worked on all of the 20 washers.   The washer always got the US quarters.   He washed his laundry at low cost for years.   The driers were different and couldn't be beaten.    Also, there was an air hockey table at an arcade where a similar trick worked 3/4 of the time.&lt;/p&gt;&#xA;&lt;p&gt;On old gum machines that took dimes you could put your dime in, spin the handle real fast, and get your dime back as well as a big gumball.  That worked about half the time.&lt;/p&gt;&#xA;&lt;p&gt;Both examples are in the spirit of the original question which is can you get the service and get your coin back.   I point out that doing this intentionally is theft even if the machines let you.&lt;/p&gt;&#xA;&lt;p&gt;It is hard to design things that are perfect.   If one person in 1000 gets a free wash it will cost more to fix the problem than is being lost.&lt;/p&gt;&#xA;&lt;p&gt;Casinos are a whole different matter.   They are always watching and if the slot machines can be scammed they will catch on and fix them.   The roommate mentioned above above was from Vegas.  Back in the early 80's he would dare to try to cheat a Vegas slot machine.&lt;/p&gt;&#xA;" OwnerUserId="20212" LastActivityDate="2020-12-17T22:30:08.407" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17352" PostTypeId="1" AcceptedAnswerId="17354" CreationDate="2020-12-18T01:47:13.887" Score="5" ViewCount="470" Body="&lt;p&gt;The 6522 VIA is an I/O chip used in the Vic-20. I was under the impression that UART (Universal Asynchronous Receiver/Transmitter) is the general term for such chips, so was surprised to see this: &lt;a href=&quot;https://www.reddit.com/r/vintagecomputing/comments/83uoqv/what_is_the_purpose_of_the_6522_via/&quot; rel=&quot;noreferrer&quot;&gt;https://www.reddit.com/r/vintagecomputing/comments/83uoqv/what_is_the_purpose_of_the_6522_via/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The MOS 6522 is an upgraded 6520 PIA. In your case, the shift register aspect of this device could be used as a simple serial port. It is not a UART, per se...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What is the difference between the 6522 and a UART?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-25T03:40:38.387" Title="What is the difference between the 6522 VIA and a UART?" Tags="&lt;hardware&gt;&lt;mos-6522&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17353" PostTypeId="1" AcceptedAnswerId="17357" CreationDate="2020-12-18T02:09:40.943" Score="3" ViewCount="670" Body="&lt;p&gt;The Vic-20 uses the 6522 VIA for peripheral I/O. However, it has two of them. I find this surprising, particularly considering minimizing cost was an important design goal. Is there a reason why it couldn't get by with just one? Or is it a case where having two of them, lets the machine do two things at the same time? In which case, which two things?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-18T17:20:50.453" Title="Why does the Vic-20 have two VIA chips?" Tags="&lt;hardware&gt;&lt;vic-20&gt;&lt;mos-6522&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="17354" PostTypeId="2" ParentId="17352" CreationDate="2020-12-18T02:20:43.840" Score="11" Body="&lt;p&gt;First of all, the 6522 has some things (parallel ports and timers) that a UART simply doesn't have at all.&lt;/p&gt;&#xA;&lt;p&gt;A UART will normally generate some programmable number of start bits, stop bits, and possibly parity bits. The number of data bits will typically also be programmable (e.g., on an 8250, anywhere from 5 to 8 data bits). Insertion of the start and stop bits is what makes it &amp;quot;asychronous&amp;quot;--that is, adding the start/stop bits allows asynchronous transmission. The start and stop bits are used to synchronize transmission, even though the transmitter and receiver don't (otherwise) share any clocking. The level of configuration is what makes it &amp;quot;universal&amp;quot;--that is, a single chip was supposed to be compatible with essentially any serial standard from an ancient Teletype ASR32, using 5-bit Baudot codes at 110 bits per second, all the way up to a 28800 bps modem using 8 data bits, no parity, 1 start bit and one stop bit (and faster than that, up to some upper limit on speed--115200 bps for a lot of designs, but newer ones go up to a few megabits per second in some cases).&lt;/p&gt;&#xA;&lt;p&gt;The 6522 wasn't programmable to that degree. It just took 8 bits of data in a register, and pulsed them out on a serial line (or read 8 bits on a serial line and put them into a register). No start bits. No stop bits. No parity. Only 8 bits, no more, no less. Without the start/stop bits, it doesn't support asynchronous transmission, and with programmable parameters, it's not &amp;quot;universal&amp;quot;. So I guess if we started from &amp;quot;UART&amp;quot; and removed the parts that don't apply to a 6522, we're left with an &amp;quot;RT&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2020-12-25T03:15:32.407" LastActivityDate="2020-12-25T03:15:32.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17355" PostTypeId="2" ParentId="4635" CreationDate="2020-12-18T02:53:24.613" Score="-1" Body="&lt;p&gt;Pronto Computer, Inc, Torrance CA, were the first to provide a tower for their PCs. They received award from technical magazines.&lt;/p&gt;&#xA;" OwnerUserId="20219" LastEditorUserId="79" LastEditDate="2020-12-18T15:09:21.510" LastActivityDate="2020-12-18T15:09:21.510" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17356" PostTypeId="2" ParentId="17352" CreationDate="2020-12-18T03:00:57.187" Score="6" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter&quot; rel=&quot;noreferrer&quot;&gt;UART&lt;/a&gt;&lt;/strong&gt; is a generic term for a &lt;em&gt;serial&lt;/em&gt; interface function (chip) for asynchronous transmission.&lt;/p&gt;&#xA;&lt;p&gt;In contrast &lt;strong&gt;6522&lt;/strong&gt; is a specific chip - which does not include UART functionality.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Implementation for UARTs were done by next to every manufacturer, each using names (and numbers) of their own, like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Intel's UART &lt;a href=&quot;https://en.wikipedia.org/wiki/8250_UART&quot; rel=&quot;noreferrer&quot;&gt;8250&lt;/a&gt; / 8251,&lt;/li&gt;&#xA;&lt;li&gt;Zilog's &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Z80-DART/Z80-SIO_chip&quot; rel=&quot;noreferrer&quot;&gt;Z80-SIO&lt;/a&gt; (Z8440) or &lt;em&gt;Serial Input/Output&lt;/em&gt;,&lt;/li&gt;&#xA;&lt;li&gt;Zilog's Z80-DART (Z8470) or &lt;em&gt;Dual Asynchronous Receiver Transmitter&lt;/em&gt;,&lt;/li&gt;&#xA;&lt;li&gt;Motrola's ACIA &lt;a href=&quot;http://www.cpcwiki.eu/imgs/3/3f/MC6850.pdf&quot; rel=&quot;noreferrer&quot;&gt;6850&lt;/a&gt; or &lt;em&gt;Asynchronous Communications Interface Adapter&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Of course MOS, the designer of the 6500 series had as well one, the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6551&quot; rel=&quot;noreferrer&quot;&gt;6551&lt;/a&gt; called ACIA like Motorola's (that's where they came from :))&lt;/p&gt;&#xA;&lt;p&gt;The 6522, called &lt;em&gt;Versatile Interface Adapter&lt;/em&gt; (VIA), in contrast is a multi function chip. Essentially an enhanced &lt;a href=&quot;https://en.wikipedia.org/wiki/Peripheral_Interface_Adapter&quot; rel=&quot;noreferrer&quot;&gt;6520&lt;/a&gt; parallel port (&lt;em&gt;Peripheral Interface Adapter&lt;/em&gt;, PIA) with it's two 8 bit ports and a set of handshake lines going with them to build a fast parallel interface. It got two timers and a shift register added. The later is not an UART, just a shift register (*1) which can be used for synchronous serial communication.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The often mentioned bug is only relevant in certain configurations.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-18T03:07:35.807" LastActivityDate="2020-12-18T03:07:35.807" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17357" PostTypeId="2" ParentId="17353" CreationDate="2020-12-18T03:27:10.930" Score="11" Body="&lt;p&gt;&lt;em&gt;[Not sure if I understand the question in full]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A parallel port chip like the 6522 is about providing port lines. In case of a 6522 these are 16 lines (two 8 bit ports) for arbitrary use plus 4 control lines with restricted use. Like with any other interface, a designer adds as many as he needs.&lt;/p&gt;&#xA;&lt;p&gt;In case of the VIC-20 the schematics show&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YX3Qe.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YX3Qe.gif&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;that&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;of the first VIA&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the two 8 bit ports are used to scan the keyboard,&lt;/li&gt;&#xA;&lt;li&gt;the handshake lines are used for the serial interface.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;of the second VIA&#xA;&lt;ul&gt;&#xA;&lt;li&gt;of the first 8 bit port&#xA;&lt;ul&gt;&#xA;&lt;li&gt;three lines are used as well for the serial port,&lt;/li&gt;&#xA;&lt;li&gt;three are used for the joysticks&lt;/li&gt;&#xA;&lt;li&gt;one for the lightpen&lt;/li&gt;&#xA;&lt;li&gt;one for cassette&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;of the first two control lines&#xA;&lt;ul&gt;&#xA;&lt;li&gt;one is used for the restore key&lt;/li&gt;&#xA;&lt;li&gt;one is used for cassette&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;the second 8 bit port is available as user port&lt;/li&gt;&#xA;&lt;li&gt;likewise the two control lines going with that.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All used up. If they would have need any more line the VIC-20 would have had a third VIA :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;From a comment of the OP:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Maybe what I really should be asking is, why were the VIAs needed at all?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because they are the most simple and, as the name already gives, versatile solution. Not much fiddling and thinking needed. Each line can be controlled independent from all others. No restrictions, most decisions are moved into software.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or put another way, what did the Spectrum lose by not having them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The Spectrum is a complete different design. Commodore designs are rather clean and straight from the school book.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There must've been some disadvantage to not having them;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Higher design effort, as building ports from TTL need more time to design. Also higher board production cost, as any TTL design will need more holes drilled. In addition the TTL may be similar, if not higher in cost - especially considering that the 6522 is produced in house.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;the Commodore engineers wouldn't have put them in just for fun.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Last, but not least, at the core the VIC follows the PET design, which already used the 6522 much the same way. So why spending money on a new design?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-18T17:20:50.453" LastActivityDate="2020-12-18T17:20:50.453" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17358" PostTypeId="2" ParentId="17314" CreationDate="2020-12-18T03:30:22.840" Score="3" Body="&lt;p&gt;Further to WimC's explanation, here's perhaps the worst-case example that's possible on an 8K PET 2001.&lt;/p&gt;&#xA;&lt;p&gt;This code runs in 2.2 seconds:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 REM AA&#xA;  ... 762 MORE LINES LIKE THIS ...&#xA;7640 REM AA&#xA;7650 T=TI&#xA;7660 FOR I=1 TO 1000&#xA;7670 GOTO 7680&#xA;7680 NEXT I&#xA;7690 PRINT(TI-T)/60&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;while this code, with one line fewer, takes over &lt;strong&gt;45&lt;/strong&gt; seconds:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 REM AA&#xA;  ... 761 MORE LINES LIKE THIS ...&#xA;7630 REM AA&#xA;7640 T=TI&#xA;7650 FOR I=1 TO 1000&#xA;7660 GOTO 7670&#xA;7670 NEXT I&#xA;7680 PRINT(TI-T)/60&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The issue is clearer if the line numbers are shown in hex:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;7670 GOTO 7680  →  $1DF6 GOTO $1E00 : fast, as $1E &amp;gt; $1D&#xA;7660 GOTO 7670  →  $1DEC GOTO $1DF6 : slow, as $1D = $1D&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The fast code only has to search for the next line, while the slow code (due to the bug) has to search through &amp;gt; 750 lines from the start of the program to find the target line.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-12-18T03:30:22.840" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17359" PostTypeId="1" AcceptedAnswerId="17360" CreationDate="2020-12-18T06:48:22.330" Score="3" ViewCount="249" Body="&lt;p&gt;The Vic-20 used two 6522 VIA chips for I/O. I asked &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17353/why-does-the-vic-20-have-two-via-chips&quot;&gt;why it had two of them&lt;/a&gt; but thanks to a comment from Bruce Abbott, I now think that wasn't quite the question I needed to ask.&lt;/p&gt;&#xA;&lt;p&gt;What I really need to ask is why it needed any at all? For example, the ZX Spectrum had no equivalent chips, and seemed to communicate with its keyboard and peripherals just fine without them. The Vic was supposed to minimize cost. The designers wouldn't have spent money on extra chips for no reason. They must have seen some advantage to be gained by including those chips.&lt;/p&gt;&#xA;&lt;p&gt;What advantage did the Vic gain from the VIAs, relative to machines like the Spectrum that lacked them?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-18T08:45:06.837" Title="Why did the Vic-20 need special chips for I/O?" Tags="&lt;hardware&gt;&lt;zx-spectrum&gt;&lt;vic-20&gt;&lt;mos-6522&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17360" PostTypeId="2" ParentId="17359" CreationDate="2020-12-18T08:45:06.837" Score="8" Body="&lt;p&gt;Commodore owned MOS technologies, who made the VIA chips.  Although the VIC-20 might have been able to replace a VIA chip with a 4051, a 74LS139, a couple of 74LS373s, and eight resistors, I don't know that doing so would have really saved anything compared to the in-house cost of the VIA.  Further, using a second VIA made it possible for them to have one timer tick feed the IRQ while the other fed NMI.  Not essential, but nice nonetheless.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2020-12-18T08:45:06.837" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17361" PostTypeId="2" ParentId="4635" CreationDate="2020-12-18T09:38:53.237" Score="1" Body="&lt;p&gt;If we want to talk about the formfactor and not necessarily have the device be called a tower, I would say the MacSE(1984) could make an interesting case study (pun intended). Although it could be argued it was more akin to the portables of its time but in a vertical orientation rather than a horizontal one. Portable/luggables still needed to be plugged into wall sockets and had integrated 6&amp;quot;-8&amp;quot; monitors.&lt;/p&gt;&#xA;" OwnerUserId="3648" LastActivityDate="2020-12-18T09:38:53.237" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17362" PostTypeId="2" ParentId="17337" CreationDate="2020-12-18T14:14:49.833" Score="16" Body="&lt;p&gt;I can personally confirm &lt;strong&gt;this worked on at least some video arcade machines in the 80s&lt;/strong&gt;, when I was young. I can vividly remember being at an arcade at one point, and losing a quarter in the machine. Instead of refunding my money, the attendant came by and gave me a free game with the use of a coin-shaped slug welded to a long, flexible wire. It looked like an official tool-of-the-trade, not something jury-rigged or hand-built.&lt;/p&gt;&#xA;&lt;p&gt;It clearly made a big impression on me, given that was over thirty years ago.&lt;/p&gt;&#xA;" OwnerUserId="20233" LastActivityDate="2020-12-18T14:14:49.833" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17363" PostTypeId="2" ParentId="17337" CreationDate="2020-12-18T17:25:35.450" Score="0" Body="&lt;p&gt;It was possible to use a length of plastic strimmer* line permanently set into a v-shape at the end by melting a section, on some 80s machines.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;US: Weed Whacker&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2020-12-18T17:25:35.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17364" PostTypeId="2" ParentId="17337" CreationDate="2020-12-18T18:31:29.820" Score="3" Body="&lt;p&gt;Until the 1990s, pay phones in Israel used &lt;b&gt;asimonim&lt;/b&gt;, tokens with a hole in the middle.  I was told in the 1970s by Israeli kids that the string trick worked on many pay phones.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/INkkL.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/INkkL.jpg&quot; alt=&quot;image of asimonim, Israeli phone tokens with a hole in the middle&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8387" LastActivityDate="2020-12-18T18:31:29.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17365" PostTypeId="2" ParentId="17312" CreationDate="2020-12-19T00:38:05.950" Score="1" Body="&lt;p&gt;The Sperry UTS-30 used a 10x16 font matrix on a 24 line by 80 column green screen. The UTS-60, a color variant, used a 9x15 matrix with the same screen dimensions. See &lt;a href=&quot;http://www.bitsavers.org/pdf/datapro/programmable_terminals/Datapro_C21_Sperry.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sperry UTS 4000 Universal Terminal System&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20240" LastActivityDate="2020-12-19T00:38:05.950" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17366" PostTypeId="1" AcceptedAnswerId="17367" CreationDate="2020-12-19T01:29:59.227" Score="7" ViewCount="783" Body="&lt;p&gt;AT&amp;amp;T released &lt;a href=&quot;https://en.wikipedia.org/wiki/Version_7_Unix&quot; rel=&quot;noreferrer&quot;&gt;UNIX Version 7&lt;/a&gt; (seven) in 1979.&lt;/p&gt;&#xA;&lt;p&gt;The same company released &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIX_System_V&quot; rel=&quot;noreferrer&quot;&gt;UNIX System V&lt;/a&gt; (five) in 1983.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Why did the later release have a lower number?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2020-12-19T22:20:42.487" Title="Unix: Why was five (SysV) released *after* seven (V7)?" Tags="&lt;unix&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17367" PostTypeId="2" ParentId="17366" CreationDate="2020-12-19T01:55:25.110" Score="18" Body="&lt;p&gt;There is not a single Unix line ('Unix' is not unique). The numbers measure different things.  Anyone who forked a variant of Unix was free to start a whole new sequence of numbering.&lt;/p&gt;&#xA;&lt;p&gt;Seventh edition Unix came from the 'classic' Unix lineage out of Bell Labs, latterly known as 'Research Unix'.&lt;/p&gt;&#xA;&lt;p&gt;Meanwhile, presumably because of its flexibility, there were many offshoots from the original, under various divisions or departments.  In particular for this answer, the Unix Support Group (USG) developed a commercialized Unix system. &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIX_System_III&quot; rel=&quot;noreferrer&quot;&gt;System III&lt;/a&gt; contained features from several different Unixes:  7th ed. Unix, PWB/UNIX 2.0, CB UNIX 3.0, UNIX/RT and UNIX/32V.&lt;/p&gt;&#xA;&lt;p&gt;Per &lt;em&gt;Wikipedia&lt;/em&gt;, the system was apparently called System III because it was considered the outside release of UNIX/TS 3.0.1 and CB UNIX 3.&lt;/p&gt;&#xA;&lt;p&gt;System V followed on from System III (System IV never seems to have emerged in public).&lt;/p&gt;&#xA;&lt;p&gt;But to state my answer differently, there's no reason why the number sequence of the commercial &amp;quot;System N&amp;quot; variants should follow on from the numbers used by Bell Lab's &amp;quot;N'th edition&amp;quot; Unix.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2020-12-19T22:20:42.487" LastActivityDate="2020-12-19T22:20:42.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17368" PostTypeId="1" CreationDate="2020-12-19T04:08:21.170" Score="9" ViewCount="1106" Body="&lt;p&gt;Just now, I saw a stream of a person playing Game Boy games. The technical setup is like this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Real American SNES.&lt;/li&gt;&#xA;&lt;li&gt;Real Super Game Boy 2. (Only released in Japan; fixes the speed bug in the Super Game Boy).&lt;/li&gt;&#xA;&lt;li&gt;ROMs on a Game Boy Everdrive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Going through the list of games, he first started &amp;quot;Animaniacs&amp;quot;. On the first stage, there was an upbeat circus music. Soon, he stopped playing it, resetting the Everdrive through some button combination on the controller, and started a new game: &amp;quot;Midway Arcade Classics&amp;quot; (the one with Millipede).&lt;/p&gt;&#xA;&lt;p&gt;The menu music for Millipede sounded right, but once the actual game/stage started, it did not use the actual music for the game. Instead, it played the &amp;quot;Animaniacs&amp;quot; first stage upbeat circus music. He was so baffled by this that he turned off the SNES, pulled out the Everdrive, inserted it back in again, and then repeated that for both games.&lt;/p&gt;&#xA;&lt;p&gt;Now, Millipede had the right music. Not the circus music from Animaniacs.&lt;/p&gt;&#xA;&lt;p&gt;How is this technically possible? What kind of technical glitch could possibly make such a thing happen? It's especially weird that it waited to glitch out until you actually started the gameplay, so it wasn't just picking the same song data somehow for &lt;em&gt;any&lt;/em&gt; music, which would've made more sense.&lt;/p&gt;&#xA;" OwnerUserId="20242" LastEditorUserId="15334" LastEditDate="2021-01-19T10:17:55.043" LastActivityDate="2021-01-19T10:17:55.043" Title="How can a Game Boy game &quot;glitch-inherit&quot; the music from a different game like this?" Tags="&lt;rom&gt;&lt;game-cartridge&gt;&lt;game-boy&gt;&lt;glitches&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17369" PostTypeId="2" ParentId="17368" CreationDate="2020-12-19T05:51:00.830" Score="17" Body="&lt;p&gt;I don't know if this is correct, but it seems to fit.&lt;/p&gt;&#xA;&lt;p&gt;The SNES sound chip is a full processor.  It can run its own program and play sounds independently of the main processor.  It is also possible for a Game Boy ROM to load a sound program into the SNES sound chip via the Super Game Boy. Animaniacs is one those games.&lt;/p&gt;&#xA;&lt;p&gt;While the way the SNES sound chip is programmed varies from game to game, one common approach was to send it a fairly large program and treat it as self-contained unit, which the main processor just sends signals like &amp;quot;play a bell sound&amp;quot; or &amp;quot;play the title music&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Also, music for Game Boy games that are &lt;em&gt;not&lt;/em&gt; enhanced for the SNES is actually generated in the Super Game Boy unit using hardware like in a Game Boy and is just passed through the SNES.&lt;/p&gt;&#xA;&lt;p&gt;With all that in mind, I suspect a program for Animaniacs sound effects was loaded into the SNES audio processor when that game was first played.  The combination of the Everdrive and Super Game Boy did not properly reset the SNES like a full hardware reset would, with changing the cartridge physically.  Partial state from the previous game was still in the SNES sound chip.&lt;/p&gt;&#xA;&lt;p&gt;I also suspect the Super Game Boy sends standard things like &amp;quot;start was pressed&amp;quot; to the sound chip for both types of games, which the sound program simply ignores when it's been reset.  But in this case, the previous program received the command, and behaved accordingly.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="15593" LastEditDate="2020-12-19T18:22:53.170" LastActivityDate="2020-12-19T18:22:53.170" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17370" PostTypeId="2" ParentId="17337" CreationDate="2020-12-19T06:59:37.507" Score="1" Body="&lt;p&gt;Yes, it was possible. I had keys so I only cared out of curiosity. My Dad owned a drugstore with a soda fountain and a bitchin’ arcade. I think at one point we had about 15 games. It was an AWESOME way to grow up. Bear in mind I’m 48 so I was 8 in 1980. Perfect. At one point the games were so busy that the guy that owned the games only had the keys. I’m sure he was getting robbed blind by the store owners. The thing that most people don’t realize is that those machines are better than an atm (unless you own it and stock it with your own cash) The purveyor would show up to bundle all the change, leave you a slip and a mountain of $. Enter debit and credit cards into your business. No one carries cash anymore. Video games are cash cows. Now we’re slaves to the banks. Prayers every night for Bitcoin to remain as it is.&lt;/p&gt;&#xA;" OwnerUserId="20243" LastActivityDate="2020-12-19T06:59:37.507" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17371" PostTypeId="1" CreationDate="2020-12-19T11:28:28.723" Score="4" ViewCount="339" Body="&lt;p&gt;This happens for numerous games. If I search, for example, for &amp;quot;Spear of Destiny&amp;quot;, I get this: &lt;a href=&quot;https://archive.org/details/TGODFloppyCollection?and%5B%5D=spear+of+destiny&amp;amp;sin=&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/details/TGODFloppyCollection?and%5B%5D=spear+of+destiny&amp;amp;sin=&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Four different entities which are all identical, then two more which are obviously separate since they are called different things.&lt;/p&gt;&#xA;&lt;p&gt;I've tried to download and inspect the duplicates for many of the games, but can never figure out if there is any difference. They have different &amp;quot;numbers&amp;quot; and that's it. What does that mean?&lt;/p&gt;&#xA;&lt;p&gt;The id numbers don't seem to be chronological. For example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;000828-SpearOfDestiny&#xA;001237-SpearOfDestiny&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Not anywhere close to each other.&lt;/p&gt;&#xA;&lt;p&gt;Since this is the only source online I've found for ancient PC games in any kind of coherent form, I wish to understand what exactly is the difference between these seeming dupes, as I only want one version saved. (The right one!)&lt;/p&gt;&#xA;" OwnerUserId="20246" LastActivityDate="2020-12-19T12:19:13.053" Title="What does it mean when &quot;The Good Old Days&quot; have several seemingly identical downloads for the same game?" Tags="&lt;ibm-pc&gt;&lt;file-format&gt;&lt;game&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17372" PostTypeId="2" ParentId="17312" CreationDate="2020-12-19T11:58:18.903" Score="1" Body="&lt;p&gt;The Sinclair QL used a 5x9 pixel matrix in a 6x10 character cell in monitor mode, ending up with a 85x25 character screen.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2020-12-19T11:58:18.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17373" PostTypeId="2" ParentId="17371" CreationDate="2020-12-19T12:19:13.053" Score="7" Body="&lt;p&gt;The info files fore the downloads (can be downloaded separately) show that there are two different versions of the game (1.0 and 1.4) plus two revisions of each version (1.0 with an alternative disk 1 and 1.4 with disk 1 and two having differences) Not uncommon with old games that they released several versions and never told you about it. The 'revisions' might come from someone removing a copy protection or adding their address before uploading to a BBS.&lt;/p&gt;&#xA;&lt;p&gt;The id number is most probably a serial number used by The Good old Days, so it only shows in which order they got hold of those disk sets.&lt;/p&gt;&#xA;" OwnerUserId="10565" LastActivityDate="2020-12-19T12:19:13.053" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17375" PostTypeId="1" CreationDate="2020-12-19T15:48:02.997" Score="-1" ViewCount="151" Body="&lt;p&gt;The Intel 8086 CPU could address up to 1 MB of memory using segmentation, and this CPU have 4 segment registers, which are CS and SS and DS and ES.&#xA;Each segment in memory can have a maximum size of 64 KB. I want to know what are the possible ways of putting CS,SS,DS and ES in RAM and Are there any specific ways that we could not put CS,SS,DS and ES in RAM? how many of CS,SS,DS and ES can we use in a RAM?&lt;/p&gt;&#xA;" OwnerUserId="20248" LastActivityDate="2020-12-19T16:31:50.213" Title="Possible and impossible RAM layouts in 8086" Tags="&lt;ram&gt;&lt;8086&gt;&lt;microprocessor&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2020-12-19T17:52:39.460" ContentLicense="CC BY-SA 4.0" />
  <row Id="17376" PostTypeId="2" ParentId="17375" CreationDate="2020-12-19T16:31:50.213" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I want to know what are the possible ways of putting CS,SS,DS and ES in RAM&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Each of them can point to any location in RAM dividable by 16 (ending in xxxx0).&lt;/p&gt;&#xA;&lt;p&gt;Since each of them is 16 bits, there are 65536 locations to point them to, resulting in a total of 2^64 possible combinations, right?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Are there any specific ways that we could not put CS,SS,DS and ES in RAM?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They can have any value allowed with 16 bit, so 0..65535. Thus, as mentioned before, each can point to any location within the 2^20 address space were the lower 4 address bits are zero and address the 64 KiB including thereafter.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;how many of CS,SS,DS and ES can we use in a RAM?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;All 4 are usable to point to, given that they do have dedicated meaning during execution.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It is a research that I am doing and I can't find anything useful in the Internet&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Maybe you're simply looking to hard for some secret, where none exists?&lt;/p&gt;&#xA;&lt;p&gt;A segment is simply 64 KiB of RAM. In case of the 8086 (or any other real mode x86) it starts at the address build from the value the segment register holds times 16. In virtual mode it turns into a handle to a segment descriptor (*1) pointing to a segment of arbitrary size and location defined by the descriptor, but I guess that's another story.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In fact, even in real mode it's best to think of the content of a segment register as a handle, not an address value ... but that as well may be beyond your question, right?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-12-19T16:31:50.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17378" PostTypeId="2" ParentId="17312" CreationDate="2020-12-19T18:20:56.820" Score="2" Body="&lt;p&gt;The Teletext standard, and the SAA5050 series character generators which supported it, were designed to provide a highly readable 40x25 text display on a PAL TV.&lt;/p&gt;&#xA;&lt;p&gt;The electronics had to be simple and cheap enough to integrate into consumer TVs, but also found their way into some microcomputers.  Teletext support was insisted upon by the BBC when sponsoring Acorn to build the BBC Micro, and was continued with the subsequent BBC Master and BBC A3000 (technically a member of the 32-bit ARM-powered Archimedes family).  This allowed the BBC themselves to use BBC Micros to prepare broadcast graphics and Teletext screens accurately.&lt;/p&gt;&#xA;&lt;p&gt;The SAA5050 implemented Teletext using a built-in 6x10 font bitmap, which was internally upscaled using a simple edge-smoothing algorithm for the purpose of providing an interlaced display.  Other members of the SAA5050 family provided alternative character sets, most notably the SAA5055 which implemented ASCII instead of the Teletext character set.&lt;/p&gt;&#xA;&lt;p&gt;After upscaling, the equivalent graphics resolution was effectively 480x500 pixels, corresponding to a 12x20 upscaled font bitmap.  The pixels were not square, and the characters appeared noticeably wider than the numbers suggest, more similar to a 16x20 matrix of square pixels.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-12-19T18:20:56.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17379" PostTypeId="1" CreationDate="2020-12-19T20:41:17.683" Score="9" ViewCount="427" Body="&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/projects/tvision/&quot; rel=&quot;noreferrer&quot;&gt;Turbo Vision&lt;/a&gt;, Borland’s text-mode widget toolkit, is fairly widely known by those old enough to remember it, and apparently quite influential: it gave rise to a number of ports and reimplementations (&lt;a href=&quot;http://www.sigala.it/sergio/tvision/&quot; rel=&quot;noreferrer&quot;&gt;Sergio Sigala’s TVision&lt;/a&gt;, &lt;a href=&quot;https://wiki.freepascal.org/Free_Vision&quot; rel=&quot;noreferrer&quot;&gt;Free Vision&lt;/a&gt;, &lt;a href=&quot;https://gitlab.com/klamonte/jexer&quot; rel=&quot;noreferrer&quot;&gt;jexer&lt;/a&gt;, or the recently-released &lt;a href=&quot;https://github.com/magiblot/tvision&quot; rel=&quot;noreferrer&quot;&gt;port by magiblot&lt;/a&gt;), especially after the library was donated into the public domain.&lt;/p&gt;&#xA;&lt;p&gt;Despite this wide recognition and influence, I am struggling to come up with examples of software that actually used it back in the day, other than Borland’s own Pascal and C++ IDEs, the demos included with them, and Turbo Debugger.&lt;/p&gt;&#xA;&lt;p&gt;Was there any ‘major’, widely-known, especially non-Borland software that used Turbo Vision (either the Pascal or C++ version), from before the library was released into the public domain? Or did Turbo Vision gain this ‘cult following’ only in retrospect?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-18T15:06:50.313" LastActivityDate="2021-02-18T15:06:50.313" Title="What software used Turbo Vision back in its prime time?" Tags="&lt;history&gt;&lt;dos&gt;&lt;borland&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17380" PostTypeId="1" AcceptedAnswerId="17382" CreationDate="2020-12-19T21:53:24.677" Score="9" ViewCount="343" Body="&lt;p&gt;I'm using &lt;a href=&quot;http://fuse-emulator.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;fuse-emulator&lt;/a&gt; on Ubuntu. In a book of type-in programs, some are spread across multiple files. There is a &amp;quot;loader&amp;quot; (usually setting up graphics or some machine code parts) which ends with &lt;code&gt;load &amp;quot;&amp;quot;&lt;/code&gt;. On cassette, this would then load then next program that would normally be the main code for the program.&lt;/p&gt;&#xA;&lt;p&gt;Is there a way to accommodate this in Fuse? I've tried replacing the empty string with the name of the next file to load but Fuse seems to get stuck and repeats &amp;quot;Program: (original program)&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I save/&amp;quot;compile&amp;quot; the listings to &lt;code&gt;.TAP&lt;/code&gt; format using zmakebas utility.&#xA;As an example&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT &amp;quot;loader program&amp;quot;&#xA;20 LOAD &amp;quot;part2&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;saved as &amp;quot;part1.bas&amp;quot;, converted to .TAP with&#xA;&lt;code&gt;zmakebas -a 10 -n &amp;quot;part1&amp;quot; -o &amp;quot;part1.tap&amp;quot; part1.bas&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT &amp;quot;main program&amp;quot;&#xA;20 PRINT &amp;quot;finished&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;saved as &amp;quot;part2.bas&amp;quot; and converted with&#xA;&lt;code&gt;zmakebas -a 10 -n &amp;quot;part2&amp;quot; -o &amp;quot;part2.tap&amp;quot; part2.bas&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;but I can't seem to get the second file to load.&lt;/p&gt;&#xA;" OwnerUserId="20117" LastActivityDate="2020-12-19T22:51:14.230" Title="ZX Spectrum fuse-emulator - how to use loader/multi-file program?" Tags="&lt;emulation&gt;&lt;zx-spectrum&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17381" PostTypeId="2" ParentId="17379" CreationDate="2020-12-19T22:38:56.663" Score="2" Body="&lt;p&gt;I don’t remember any major non-Borland software written using Turbo Vision either. I suspect that if there had been, it would have been listed in &lt;a href=&quot;http://www.faqs.org/faqs/C++-faq/turbovision/tvplus/part3/&quot; rel=&quot;nofollow noreferrer&quot;&gt;part 3 of the Turbo Vision FAQ, “Applications written with Turbo Vision”&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2020-12-19T22:38:56.663" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17382" PostTypeId="2" ParentId="17380" CreationDate="2020-12-19T22:51:14.230" Score="12" Body="&lt;p&gt;In order for the program to load in one go without having to open a new file for each section, you'll need to combine them into a single .tap file. Happily, the .tap format is designed to make this easy - concatenating two files together results in a valid file. So, after creating part1.tap and part2.tap with zmakebas as above, you can combine them with:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cat part1.tap part2.tap &amp;gt; final.tap&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13618" LastActivityDate="2020-12-19T22:51:14.230" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17383" PostTypeId="2" ParentId="16700" CreationDate="2020-12-20T00:03:54.740" Score="1" Body="&lt;p&gt;Yes, although the disk releases here in North America weren't much faster. However with that said, awesome loader music made the waiting time far less painful. Cartridges may have been rare in the UK and most of Europe, however they were quite common in the early days of the computer here in North America. Most of the early Activision games for example were released in cartridge AND disk format. For the record cassette tapes kind of died out here in North America around late 1983-early 1984. I hardly know anyone who used a Datassete or a third party cassette deck here after the VIC-20 days.&lt;/p&gt;&#xA;" OwnerUserId="20254" LastEditorUserId="20254" LastEditDate="2020-12-20T00:19:13.867" LastActivityDate="2020-12-20T00:19:13.867" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17384" PostTypeId="1" AcceptedAnswerId="17388" CreationDate="2020-12-20T04:01:41.907" Score="1" ViewCount="593" Body="&lt;p&gt;Also of interest, would be the first OS to support color graphics in other ways (assuming it wasn't a Unix).&lt;/p&gt;&#xA;&lt;p&gt;Background: I'm thinking of playing around with Unix v6 due to all the material available, but am curious if attempting color graphics in any form are worth the effort.&lt;/p&gt;&#xA;" OwnerUserId="20257" LastEditorUserId="20257" LastEditDate="2020-12-20T21:16:36.367" LastActivityDate="2020-12-20T21:16:36.367" Title="Does an OS, in particular Unix, need special support for terminal colors?" Tags="&lt;graphics&gt;&lt;unix&gt;" AnswerCount="2" CommentCount="8" ClosedDate="2020-12-20T19:54:22.530" ContentLicense="CC BY-SA 4.0" />
  <row Id="17385" PostTypeId="1" AcceptedAnswerId="17446" CreationDate="2020-12-20T04:10:51.913" Score="6" ViewCount="233" Body="&lt;p&gt;According to &lt;a href=&quot;https://www.computerarcheology.com/Arcade/SpaceInvaders/Hardware.html&quot; rel=&quot;noreferrer&quot;&gt;the Computer Archeology page on Space Invaders&lt;/a&gt;, port 1 presents &amp;quot;player 1's shoot/left/right&amp;quot; input to the CPU, whereas port 2 presents player 2. Playing around the code in an emulator, this tracks: if I start a 2-player game of Space Invaders, then when player 1 is on, only the inputs mapped to player 1 work in moving the spaceship/shooting; then when player 2 is on, only the second set of inputs work.&lt;/p&gt;&#xA;&lt;p&gt;However, looking at &lt;a href=&quot;https://strategywiki.org/wiki/Space_Invaders/Getting_Started&quot; rel=&quot;noreferrer&quot;&gt;photos and descriptions of the original arcade machine's control panel&lt;/a&gt;, there are only five buttons visible: left/right, fire, and 1-player start/2-player start:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pojtz.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pojtz.jpg&quot; alt=&quot;Space Invaders control panel&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So what's going on here? Is it simply that the same move left/move right/fire buttons were connected both to the player 1 and the player 2 inputs (by physically splitting the wires)? Was the internal hardware designed so that it can be used in other arcade games where there is simultaneous two-player input, and on those machines there really is two set of inputs?&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2020-12-27T19:41:49.207" Title="Player 1 / Player 2 input for Space Invaders" Tags="&lt;hardware&gt;&lt;arcade&gt;&lt;input-devices&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17386" PostTypeId="2" ParentId="17384" CreationDate="2020-12-20T05:41:32.800" Score="10" Body="&lt;p&gt;Probably wasn't a Unix release per se, but the GUI you happened to use,such as raw x-windows (which would be my guess).  There were other GUI's layered on top of x-windows, and it wouldn't surprise me if there were GUIs predating x-windows.&lt;/p&gt;&#xA;&lt;p&gt;Initially, as I'm sure you know, Unix was solely a console-controlled OS.  So the first color available would likely have been color terminals, with programs and scripts making use of ESC sequences to implement color into their work.&lt;/p&gt;&#xA;" OwnerUserId="4138" LastActivityDate="2020-12-20T05:41:32.800" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17387" PostTypeId="2" ParentId="6381" CreationDate="2020-12-20T08:36:13.840" Score="-1" Body="&lt;p&gt;On a typewritter, and on some mainframe prints, CR and LF are different functions and can be run differently.  Pushing the return lever on a typewriter first returns the print point to the left margin, and pushing it past the limit causes the paten to rotate by a line, hence CRLF.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2020-12-20T08:36:13.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17388" PostTypeId="2" ParentId="17384" CreationDate="2020-12-20T09:13:42.140" Score="10" Body="&lt;p&gt;Depends on what you mean by &amp;quot;OS support&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Early Unix (and all other OS) used &lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_terminal&quot; rel=&quot;noreferrer&quot;&gt;video terminals&lt;/a&gt; that replaced the teletypes of even earlier Unixes.&lt;/p&gt;&#xA;&lt;p&gt;These video terminals started supporting graphics and a bit later also color graphics. The first color graphics video terminal from DEC was the &lt;a href=&quot;https://en.wikipedia.org/wiki/VT220&quot; rel=&quot;noreferrer&quot;&gt;VT241&lt;/a&gt; with Regis and &lt;a href=&quot;https://en.wikipedia.org/wiki/Sixel&quot; rel=&quot;noreferrer&quot;&gt;Sixel&lt;/a&gt; graphics from 1983. BTW, Sixel graphics &lt;a href=&quot;https://github.com/saitoha/libsixel&quot; rel=&quot;noreferrer&quot;&gt;still work&lt;/a&gt; in many Linux terminal windows on modern systems.&lt;/p&gt;&#xA;&lt;p&gt;An early color graphics IBM video terminal (non-Unix) is the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_3270#IBM_3179G&quot; rel=&quot;noreferrer&quot;&gt;IBM 3179G&lt;/a&gt; from 1984.&lt;/p&gt;&#xA;&lt;p&gt;I am sure there were others.&lt;/p&gt;&#xA;&lt;p&gt;These graphics worked by sending with special escaped character sequences, so any &amp;quot;OS support&amp;quot; (if present at all) consisted in libraries that applications could use.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/X_Window_System&quot; rel=&quot;noreferrer&quot;&gt;X Window System&lt;/a&gt; that became the standard for Linux appeared in 1984 (and was probably not very usable right then), The X11 protocal variant that it finally settled on was defined in 1987.&lt;/p&gt;&#xA;&lt;p&gt;Unix v6 is a lot earlier than all of that. Of course you could still compile and run applications on your Simh-emulated Unix v6 that then send Sixel codes to the &lt;code&gt;xterm&lt;/code&gt; you've attached to Simh. Just don't expect any GUI.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2020-12-20T09:21:43.517" LastActivityDate="2020-12-20T09:21:43.517" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17389" PostTypeId="1" AcceptedAnswerId="17390" CreationDate="2020-12-20T09:42:32.523" Score="22" ViewCount="1181" Body="&lt;p&gt;In 1959, Donald Knuth wrote an assembly program named SuperSoap for the IBM 650. &lt;a href=&quot;https://archive.computerhistory.org/resources/access/text/2018/07/102784983-05-01-acc.pdf&quot; rel=&quot;noreferrer&quot;&gt;Here&lt;/a&gt; is the manual, and &lt;a href=&quot;https://archive.computerhistory.org/resources/access/text/2018/07/102784987-05-01-acc.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; is a listing of the program (in SuperSoap assembly language). Quoting from the abstract:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;SuperSoap is a major revision of Case SOAP III [Knuth's modifications to SOAP II], designed to take&#xA;advantage of a 650 with extra attachments. The present SuperSoap program requires index registers, core, a disk file unit, and &lt;strong&gt;the table-lookup-on-equal&#xA;feature&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Note the bolded text. Looking at the &lt;a href=&quot;http://bitsavers.org/pdf/ibm/650/&quot; rel=&quot;noreferrer&quot;&gt;available documentation on Bitsavers&lt;/a&gt;, we know that the index registers and core come with the IBM 653, and the disk file unit is presumably an IBM 355. But &lt;strong&gt;what is this mysterious &amp;quot;TLE&amp;quot;&lt;/strong&gt;?&#xA;Appendix I of the SuperSoap manual lists operation codes and mnemonics, assigning TLE to operation code 63. Available 650 documentation that lists instructions says that operation code 63 is unused. It does not seem to have been added when the Model 4 was released (see the last section, beginning on page 33, of &lt;a href=&quot;http://bitsavers.org/pdf/ibm/650/650_System_Bulletins.pdf&quot; rel=&quot;noreferrer&quot;&gt;this document&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2020-12-20T15:51:26.460" Title="When did the IBM 650 have a &quot;Table lookup on Equal&quot; instruction?" Tags="&lt;history&gt;&lt;assembly&gt;&lt;instruction-set&gt;&lt;ibm650&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17390" PostTypeId="2" ParentId="17389" CreationDate="2020-12-20T15:18:22.823" Score="21" Body="&lt;p&gt;The TLE instruction is a modification of the TLU instruction.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;TLU (Table LookUp)&lt;/strong&gt; (Opcode 84) compared a word with a series of consecutive words on the drum and finished as soon as an entry was found being equal &lt;em&gt;or higher&lt;/em&gt;. It was meant to find a point in a &lt;strong&gt;sorted list&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;TLE (Table Lookup Equal)&lt;/strong&gt; (Opcode 63) is a modification of TLU stopping only when equal, which is useful to find a known entry in an &lt;strong&gt;unsorted list&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;TLE is essentially executing TLU, but suppressing assessment on higher. It was available from IBM as 'add on' at USD 25 per month, as mentioned on page 375 of the &lt;a href=&quot;http://www.ed-thelen.org/comp-hist/BRL61-ibm065.html#IBM-650-RAMAC&quot; rel=&quot;noreferrer&quot;&gt;BRL Report 1115&lt;/a&gt; of 1961.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-20T15:51:26.460" LastActivityDate="2020-12-20T15:51:26.460" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="17391" PostTypeId="2" ParentId="17379" CreationDate="2020-12-20T17:01:15.897" Score="3" Body="&lt;p&gt;You have to appreciate that the vast bulk of software written in the world never sees the light of day outside of the business that created it. There are millions of programmers worldwide working every day on applications, yet we as the public see a small fraction of those applications.&lt;/p&gt;&#xA;&lt;p&gt;Most of the code is line of business back office work, software used for internal research projects, work at universities, etc.&lt;/p&gt;&#xA;&lt;p&gt;Eleventy billion lines of Visual Basic apps can't be wrong.&lt;/p&gt;&#xA;&lt;p&gt;As you can imagine there has always been a bottomless need for tools that make application development easier for day to day coders.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2020-12-20T17:01:15.897" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17392" PostTypeId="2" ParentId="15508" CreationDate="2020-12-20T19:07:03.947" Score="2" Body="&lt;p&gt;Not an answer, really, but I would suppose that the name would have been seen as natural for Project MAC's goals.&lt;/p&gt;&#xA;&lt;p&gt;The name MAC, in one of its many interpretations, stood for &amp;quot;Multiple Access Computer&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Computing as a utility, that is as a service, had been talked about at MIT from the beginning. John McCarthy used the term &lt;a href=&quot;https://www.technologyreview.com/2011/10/03/190237/the-cloud-imperative&quot; rel=&quot;nofollow noreferrer&quot;&gt;at least as early as 1961&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Given the seeds of multiple access, timesharing, and computing as a service, it doesn't seem much of a leap to come up with &amp;quot;Multiplexed Information and Computing Service&amp;quot;  (easy though it is for me to say, with the benefit of a view from the 21st century).&lt;/p&gt;&#xA;&lt;p&gt;Thus my guess is that it was named by MIT (rather than GE or Bell).  If I had to guess further, I'd go for Corbató or Fano, both having worked on CTSS and having the vision of where they were going.  As to the &amp;quot;when&amp;quot; - when it came to the time to write up papers?&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2020-12-20T19:07:03.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17393" PostTypeId="1" CreationDate="2020-12-20T19:36:55.007" Score="0" ViewCount="222" Body="&lt;p&gt;How to do correct copying char to sprite ?&#xA;Lets say 1st char is at $2000 second is at $2008 and copying to sprite at $2480.&#xA;And with this we can copy 1 char to top left position of 1st sprite. But what if we add more chars or any from 0 to 255. How we will solve that regarding 2 sprites in left sideborders and two in right sideborders? Lets say with 30 chars which occupy 6 chars in 5 rows (so total 30 chars; assuming Y - rows X - columns)&#xA;We can copy 3 x 2 chars to two left sprites but what about 3rd row char (21 is not divisible with 8).&#xA;This routine copy 1 char to 1st sprite. How to copy 30 chars (6 chars in 5 rows) to 2 sprites which data are 1st $2480 2nd 24C0?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;                    ldy #$00&#xA;               char lda $2000,y&#xA;                    sta $2480,x&#xA;                    inx&#xA;                    inx&#xA;                    inx&#xA;                    iny&#xA;                    cpy #$08&#xA;                    bne char           &#xA;                &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13605" LastEditorUserId="13605" LastEditDate="2020-12-21T14:32:04.387" LastActivityDate="2020-12-21T18:40:07.153" Title="c64 copy chars to sprite issue" Tags="&lt;commodore-64&gt;&lt;assembly&gt;&lt;sprite&gt;" AnswerCount="3" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="17395" PostTypeId="2" ParentId="17393" CreationDate="2020-12-21T01:38:56.093" Score="1" Body="&lt;p&gt;I still have no idea what the question is really about. So what follows is a wild guess from what the OP posted in question, edits and comments as well as what I think he could be about:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Blowing Up an 8x8 Char Into a 24x21 Sprite&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[I have no idea if this is right, but I can't believe it's just about copying, as that would be way too simple]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A character is stored within the character generator as a sequence of 8 bytes each holding a line with bits set for each pixel to be set, high to low as left to right. Example&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00011000 (18) -&amp;gt;    **   &#xA;00111100 (3C) -&amp;gt;   ****  &#xA;01100110 (66) -&amp;gt;  **  **&#xA;01111110 (7E) -&amp;gt;  ******&#xA;01100110 (66) -&amp;gt;  **  **&#xA;01100110 (66) -&amp;gt;  **  **&#xA;00000000 (00) -&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To turn this into a sprite each bit needs to be tripled within a line - and similar each line (*1) as sprites are simply 3 bytes per line and 21 lines.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00000000 01111110 00000000 (00 7E 00) -&amp;gt;          ******   &#xA;00000000 01111110 00000000 (00 7E 00) -&amp;gt;          ******   &#xA;00000000 01111110 00000000 (00 7E 00) -&amp;gt;          ******   &#xA;00000011 11111111 11000000 (03 FF C0) -&amp;gt;       ************  &#xA;00000011 11111111 11000000 (03 FF C0) -&amp;gt;       ************  &#xA;00000011 11111111 11000000 (03 FF C0) -&amp;gt;       ************  &#xA;00011111 10000001 11111000 (1F 81 F8) -&amp;gt;    ******      ******&#xA;00011111 10000001 11111000 (1F 81 F8) -&amp;gt;    ******      ******&#xA;00011111 10000001 11111000 (1F 81 F8) -&amp;gt;    ******      ******&#xA;00011111 11111111 11111000 (1F FF F8) -&amp;gt;    ******************&#xA;00011111 11111111 11111000 (1F FF F8) -&amp;gt;    ******************&#xA;00011111 11111111 11111000 (1F FF F8) -&amp;gt;    ******************&#xA;00011111 10000001 11111000 (1F 81 F8) -&amp;gt;    ******      ******&#xA;00011111 10000001 11111000 (1F 81 F8) -&amp;gt;    ******      ******&#xA;00011111 10000001 11111000 (1F 81 F8) -&amp;gt;    ******      ******&#xA;00011111 10000001 11111000 (1F 81 F8) -&amp;gt;    ******      ******&#xA;00011111 10000001 11111000 (1F 81 F8) -&amp;gt;    ******      ******&#xA;00011111 10000001 11111000 (1F 81 F8) -&amp;gt;    ******      ******&#xA;[No line 22..24]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The following routine is a straight implementation without much tricks to get the job done. There might be some optimization possible, but I'd prefer to get it working first, before playing with alternative/more compact solutions.&lt;/p&gt;&#xA;&lt;p&gt;Also, unlike the code posed with the question, this is made with pointers, keeping it as independent from any environment as possible (and free of self modifying code, so ROMable). So again, later optimizations may change this and save some code ... but as before I'd put that way at the end of all development. Having Independent subroutines help a lot to minimize development issues.&lt;/p&gt;&#xA;&lt;p&gt;It's not neccessary made for shortest possible code, but execution time should be fairly good.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; Generic subroutiene to convert a character definition&#xA;; (a bitmap stored in 8 consecutive bytes) into a sprite&#xA;; of 24x21 pixel&#xA;&#xA;; Called at&#xA;;  convert&#xA;&#xA;; In:&#xA;;  chrptr, word, holding address of char definition, will be modified&#xA;;  sptr, word, holding the address of a 63 byte area to be filled with sprite data&#xA;&#xA;; Out:&#xA;;  63 bytes of sprite data processed from character data stored beginning at sptr&#xA;;  chrptr pointing to the last line (not converted) of the character.&#xA;&#xA;; In/Out&#xA;chrptr  DW  0   ; A zp-pointer to an 8 byte character definition to be converted&#xA;sptr    DW  0   ; A zp-pointer to a 64 byte area to be filled with the expanded character&#xA;&#xA;; Local variables&#xA;sptr1   DW  0   ; Support pointer (zp) to the second line (copy of first+3)&#xA;sptr2   DW  0   ; Support pointer (zp) to the third line (copy of first+6)&#xA;temp    DB  0   ; temporary value for conversion&#xA;&#xA;; Entry&#xA;convert:&#xA;&#xA;;Setup&#xA;        LDA  sptr        ; prepare the pointers to save later on&#xA;        LDX  sptr+1&#xA;        CLC&#xA;        ADC  #3&#xA;        BCC  nopage1&#xA;        INX&#xA;nopage1:&#xA;        STA  sptr1       ; Pointer for second sprite line&#xA;        STX  sptr1+1&#xA;        CLC&#xA;        ADC  #3&#xA;        BCC  nopage1&#xA;        INX&#xA;nopge2:&#xA;        STA  sptr2       ; Pointer for third sprite line&#xA;        STX  sptr2+1&#xA;&#xA;        LDY  #0          ; Offset within the character definition&#xA;        LDX  #7          ; 7 lines to be converted (no room for the 8th&#xA;&#xA;;Conversion loop&#xA;loop:&#xA;        LDA  chrptr      ; Load a character line and bring it into tmp&#xA;        ROL  A           ; But lets extract the first bit first  - saves 3 cycles and a byte :))&#xA;        STA  temp&#xA;        LDA  #0          ; Clear A&#xA;        BCC  J1A         ; Was the top bit set ? &#xA;        LDA  #%11100000  ; Yes -&amp;gt; set the first 3 bits of the sprite&#xA;J1A:&#xA;        ROL  temp        ; Check second bit&#xA;        BCC  J1B         ; Was it set ?&#xA;        ORA  #%00011100  ; Yes -&amp;gt; set the second 3 bits of the sprite&#xA;J1B:&#xA;        ROL  temp        ; Check third bit&#xA;        BCC  J1C         ; Was it set?&#xA;        ORA  #%00000011  ; Yes -&amp;gt; set the third 3 bits of the sprite ... ups, there are only two left in this byte&#xA;J1C:&#xA;        STA  (sptr),Y    ; Store first byte of first line&#xA;        STA  (sptr1),Y   ; Store first byte of second line&#xA;        STA  (sptr2),Y   ; Store first byte of third line&#xA;&#xA;        INY              ; Next byte of the sprite&#xA;        LDA  #0          ; Clear A&#xA;        ROR              ; Bring the remaining bit into the second sprite byte&#xA;&#xA;        ROL  temp        ; Check bit 4&#xA;        BCC  J2A         ; Was it set?&#xA;        ORA  #%01110000  ; Yes -&amp;gt; set the 4th 3 bits of the sprite &#xA;J2A:&#xA;        ROL  temp        ; Check bit 5&#xA;        BCC  J2B         ; Was it set?&#xA;        ORA  #%00001110  ; Yes -&amp;gt; set the 5th 3 bits of the sprite &#xA;J2B:&#xA;        ROL  temp        ; Check bit 6&#xA;        BCC  J2C         ; Was it set?&#xA;        ORA  #%00000001  ; Yes -&amp;gt; set the 6th 3 bits of the sprite - again wraping into the next byte&#xA;J2C:&#xA;        STA  (sptr),Y    ; Store second byte of first line&#xA;        STA  (sptr1),Y   ; Store second byte of second line&#xA;        STA  (sptr2),Y   ; Store second byte of third line&#xA; &#xA;        INY              ; Next byte of the sprite&#xA;        LDA  #0          ; Clear A&#xA;        BCC  J3A         ; Was bit 6 set?&#xA;        ORA  #%11000000  ; Yes -&amp;gt; set the remaining bits of the 6th group&#xA;J3A:&#xA;        BIT  temp        ; Check bit 7 (Now using BIT to save 2 cycles)&#xA;        BPL  J3B         ; Was it set?&#xA;        ORA  #%00111000  ; Yes -&amp;gt; set the 7th 3 bits of the sprite &#xA;J3B:&#xA;        BIT  temp        ; Check bit 8 (Now using BIT to save 2 cycles)&#xA;        BVC  J3C         ; Was it set?&#xA;        ORA  #%00000111  ; Yes -&amp;gt; set the 8th 3 bits of the sprite &#xA;J3C:&#xA;        STA  (sptr),Y    ; Store third byte of first line&#xA;        STA  (sptr1),Y   ; Store third byte of second line&#xA;        STA  (sptr2),Y   ; Store third byte of third line&#xA;&#xA;        DEX                    ; All 7 done?&#xA;        BEQ  end               ; Yes -&amp;gt; end&#xA;&#xA;; Adjust pointer(s)&#xA;&#xA;; Y needs to skip three lines/9 bytes (which are already filled) minus the two INY that already happened. Doing it via A saves 2 bytes and 4 cycles. Also, writing so many INY just adds a chance of a miscount.&#xA;        TYA&#xA;        CLC&#xA;        ADC  #7                ; 9-2&#xA;        TAY&#xA;&#xA;; select next line in character&#xA;        INC  chrptr            ; Select next line of character&#xA;        BNE  loop              ; Next round if no page carry&#xA;        INC  chrptr+1          ; handle page carry&#xA;        BNE  loop              ; next round (will fail if the character table wraps at $FFFF - not really likely)&#xA;&#xA;end:&#xA;        RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Lets see if this is in any way related to the question :))&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[... thinking of it, there would also be a way for a table driven solution thay may be shoter and faster ... though, not sure, as above is ~127 bytes, while the table base solution neds already 32 bytes of table... :)]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Yes, I know, this doesn't end well, as there is no room for the lowest line.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-21T09:36:49.067" LastActivityDate="2020-12-21T09:36:49.067" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17396" PostTypeId="2" ParentId="17393" CreationDate="2020-12-21T09:04:00.600" Score="1" Body="&lt;p&gt;If you want a straight up copy, then what about reading the char's bitmap first, and then writing it to the sprite?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       ldy #$07&#xA;cpch:  lda (chptr),y&#xA;       pha&#xA;       dey&#xA;       bpl cpch&#xA;&#xA;       ldy #$17&#xA;       ldx #$07&#xA;cpspr: pla&#xA;       sta (sprptr),y&#xA;       dey&#xA;       dey&#xA;       dey&#xA;       dex&#xA;       bpl cpspr&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Something like that?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2020-12-21T12:53:14.617" LastActivityDate="2020-12-21T12:53:14.617" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17398" PostTypeId="2" ParentId="17393" CreationDate="2020-12-21T10:45:11.497" Score="1" Body="&lt;h2&gt;Alternative solution&lt;/h2&gt;&#xA;&lt;p&gt;With the last edit it seams as if it could be not about blowing up a char, but filling 6 char definitions located in sequence in into 6 sprites, again located in sequence. As before, it's just a guess due the rather unclear wording.&lt;/p&gt;&#xA;&lt;p&gt;A routine to copy one char into one sprite (pre cleaned) might look like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; Generic subroutiene to convert a character definition&#xA;; (a bitmap stored in 8 consecutive bytes) into a sprite&#xA;; of 8x8 pixel&#xA;&#xA;; Called at&#xA;;  convert&#xA;&#xA;; In:&#xA;;  chrptr, word, holding address of char definition, will be modified&#xA;;                character data is assumed not to spread over a page boundry&#xA;;  sprptr, word, holding the address of a 63 byte area to be filled with sprite data&#xA;;                sprite area is assumed not to spread over a page boundry&#xA;;                sprite area is assumed not to be zeroed out&#xA;&#xA;; Out:&#xA;;  sprite data processed from character data stored beginning at sprptr&#xA;;  chrptr pointing after the last line of the character.&#xA;&#xA;&#xA;chrptr  DW   0&#xA;sprptr  DW   0&#xA;&#xA;convert:&#xA;&#xA;;Setup&#xA;        LDY  #0          ; Sprite index&#xA;        LDX  #0&#xA;moveit:                  ; well, moveit!&#xA;        LDA  (chrptr,X)  ; Same as (chrptr), but that's only available on a C02&#xA;        STA  (sprptr),Y &#xA;&#xA;        CPY  #3*7        ; Last line done?&#xA;        BEQ  done        ; Yes -&amp;gt; return&#xA;        INC  chrptr      ; Next character line&#xA;        INY              ; Next sprite line&#xA;        INY&#xA;        INY&#xA;        JMP  moveit      ; Moveit :))&#xA;&#xA;done:&#xA;        RTS&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;A routine doing calling above for 6 consecutive character definitions into 6 consecutive sprites may look like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;chrcnt  DB  0            ; Temporary counter, preferable in ZP&#xA;&#xA;entry:&#xA;        LDA #&amp;gt;charlist   ; Set Pointer to list of character definitions&#xA;        STA chrptr&#xA;        LDA #&amp;lt;charlist&#xA;        STA chrptr+1&#xA;&#xA;        LDA #&amp;gt;spritearea ; Set Pointer to sprite area&#xA;        STA sprptr&#xA;        LDA #&amp;lt;spritearea&#xA;        STA sprptr+1&#xA;&#xA;        LDA #6           ; Doing 6 chars&#xA;        STA chrcnt&#xA;&#xA;cvtlp:&#xA;        JSR convert      ; Convert a char to sprite&#xA;        DEC chrcnt&#xA;        BEQ end          ; Last char -&amp;gt; exit&#xA;                         ; Character pointer is already advanced by convert&#xA;        LDA sprptr       ; Move pointer to next sprite&#xA;        CLC&#xA;        ADC #64          ; Length of a sprite entry&#xA;        STC sprptr&#xA;        BCC cvtlp        ; No carry -&amp;gt; Next round&#xA;        INC sprptr+1&#xA;        BCC cvtlp        ; Always -&amp;gt; Next round&#xA;&#xA;end: &#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Of course there are many more variations possible, like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;using an ASCII string as input and getting the character bitmap from the character generator,&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Which would simply requite locating the character definition from it's character code and hand over that address as pointer.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;packing them in two sprites (row of 3 characters per sprite) if it's supposed to be a horizontal scrolling text&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This can be done much like before, but after setting up the pointers we need to move them into the same sprite ofsetted by one:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        LDA #3           ; Doing 3 chars&#xA;        STA chrcnt&#xA;&#xA;cvtlp:&#xA;        JSR convert      ; Convert a char to sprite&#xA;        DEC chrcnt&#xA;        BEQ end          ; Last char -&amp;gt; exit&#xA;                         ; Character pointer is already advanced by convert&#xA;        INC sprptr       ; Move pointer to next character position within sprite&#xA;        BCC cvtlp        ; Always -&amp;gt; Next round&#xA;&#xA;end: &#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;[Obvious why I prefer routines that can be reused over premature optimized code?]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;packing them in three sprites (column of 2 characters per sprite) if it's supposed to be a vertical scrolling text&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Like above, but after setting up the pointers simply inserting the two characters:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        JSR convert      ; Convert first char into sprite&#xA;        LDA sprptr       ; Avance sprite pointer within the sprite to the next row&#xA;        CLC&#xA;        ADC #8*3         ; Skip 8 rows of 3 bytes&#xA;        STC sprptr       ; Correction of high-byte is not needed as sprites&#xA;                         ; are always aligned to $40 boundaries&#xA;        JSR convert      ; Convert second char into sprite&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;packing all 6 characters into a single sprite forming a two lines of 3 characters sprite&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I guess, by now, the picture is clear: Rinse and repeat.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;... and so on ...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;So, again, possibilities are endless with the unclear information given. There is no chance to give a definitive answer without a clear definition of the intended layout/usage.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-21T14:21:32.920" LastActivityDate="2020-12-21T14:21:32.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17399" PostTypeId="1" CreationDate="2020-12-21T18:57:18.233" Score="6" ViewCount="262" Body="&lt;p&gt;Diddy Kong Racing for the N64 was released in late 1997. This was long before the Expansion Pak was released. I remember, and have recently re-read, an old review in a printed magazine explaining that the graphics were stunning, and that this was the first (?) N64 game to use the &amp;quot;high-res mode&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;N64 games typically used 320 × 240 pixels, but Diddy Kong Racing allegedly used 640 × 480... without an Expansion Pak. Is this really accurate? Was it really 640 × 480? And how was it able to do this without the RAM upgrade? It looks very good, but one thing I will say, from watching streams of people playing the game on a real N64 (since I don't have a setup to actually play it myself these days, sadly) is that it looks just as blurry/fuzzy a all the other N64 games which use 320 × 240.&lt;/p&gt;&#xA;&lt;p&gt;In short: I do not see the double resolution. It does look good, but so do all the other N64 games to me.&lt;/p&gt;&#xA;&lt;p&gt;I suppose one possible explanation is that the capture equipment the streamers use don't fully capture the &amp;quot;sharpness&amp;quot; of 640 × 480, but that sounds unlikely. I'd assume that modern capturing devices would handle even higher resolutions from that era, such as 720p on Dreamcast.&lt;/p&gt;&#xA;&lt;p&gt;Then again, the streamers almost always have the 4:3 picture stretched to widescreen, so if they can get &lt;em&gt;that&lt;/em&gt; wrong, maybe they also get the resolution messed up somehow as well?&lt;/p&gt;&#xA;&lt;p&gt;PS: I should add that I spent many hours trying to find technical specs but was unable to.&lt;/p&gt;&#xA;" OwnerUserId="20272" LastEditorUserId="15334" LastEditDate="2020-12-22T09:07:28.380" LastActivityDate="2020-12-22T09:07:28.380" Title="Did Diddy Kong Racing for Nintendo 64 really use 640 × 480 pixels resolution?" Tags="&lt;nintendo-64&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17400" PostTypeId="1" CreationDate="2020-12-21T19:03:46.083" Score="17" ViewCount="6563" Body="&lt;p&gt;A lot of games from the PS1 and especially PS2 era are full of low contrast greys and browns and not much else. Some examples:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NcVjm.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NcVjm.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/eBH7k.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eBH7k.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/XakH3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XakH3.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/mnZaO.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mnZaO.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/7VWqB.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7VWqB.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Why is this? Was it just a design decision, or was there a technical reason?&lt;/p&gt;&#xA;&lt;p&gt;Edit: Based on comments here are some histograms for a couple of the screenshots. First, Vice City which is the most colourful:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JE28j.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JE28j.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Quite a compressed range of colours, even the neon pink is muted.&lt;/p&gt;&#xA;&lt;p&gt;Next the woman in purple:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6RydR.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6RydR.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Everything below 50% of the full range, and the RGB curves are closely matched because it's mostly grey.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2020-12-22T16:57:32.603" LastActivityDate="2020-12-22T16:57:32.603" Title="Why were early 3D games so full of muted colours?" Tags="&lt;gaming&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17401" PostTypeId="1" AcceptedAnswerId="17402" CreationDate="2020-12-21T22:30:04.203" Score="35" ViewCount="5174" Body="&lt;p&gt;First of all, I hope this is the right place to post this question. I was looking through one of my dad's old programming books from the 80s, and at the back it has a list of utility functions, one of which is &lt;code&gt;gcd&lt;/code&gt;. Its implementation is as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;gcd(u, v)&#xA;int u, v;&#xA;{&#xA;    int k, t, f;&#xA;    if ((u &amp;lt;= 0) || (v &amp;lt;= 0)) return 1;&#xA;    k = 0; f = 1;&#xA;    while ((0 == (u % 2)) &amp;amp;&amp;amp; (0 == (v % 2))) {&#xA;        k++; u &amp;gt;&amp;gt;= 1; v &amp;gt;&amp;gt;= 1; f *= 2;&#xA;    }&#xA;    if (u &amp;amp; 1) {&#xA;        t = -v; goto B4;&#xA;    } else {&#xA;        t = u;&#xA;    }&#xA;B3: if ( t &amp;gt; 0) { t &amp;gt;&amp;gt;= 1; } else { t = -((-t) &amp;gt;&amp;gt; 1); };&#xA;B4: if (0 == (t%2)) goto B3;&#xA;    if (t &amp;gt; 0) u = t; else v = -t;&#xA;    if (0 != (t = u - v)) goto B3;&#xA;    return (u * f);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It's clearly meant to be compatible with an old version of C, given it assumes an &lt;code&gt;int&lt;/code&gt; return type and the location it declares the type of the parameters. And from my quick testing (and conversion to newer C), it seems to work. But why is it so complicated? Euclid's Algorithm has been known for literally thousands of years, and is just&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;gcd(int u, int v) {&#xA;    if (v == 0) return u;&#xA;    return gcd(v, u % v);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Assuming recursion would be a problem, this could also easily be converted to an iterative version. Are there any technical reasons that the above algorithm would be preferred?&lt;/p&gt;&#xA;" OwnerUserId="13864" LastActivityDate="2020-12-25T03:11:42.520" Title="Why is this gcd implementation from the 80s so complicated?" Tags="&lt;c&gt;" AnswerCount="6" CommentCount="14" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="17402" PostTypeId="2" ParentId="17401" CreationDate="2020-12-21T22:51:26.523" Score="37" Body="&lt;p&gt;This is (or at least appears to be) the binary euclidean GCD.  &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary_GCD_algorithm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Binary_GCD_algorithm&lt;/a&gt; has a slighty different version (but the version you post has the nice feature that there's no recursion (which I seem to recall earlier C compilers wanted to limit).  As I noted in my comment that I deleted when I realized I do have access to Wikipedia even if I don't have access to my crypto text book that covered various GCD algorithms, I didn't think 80's C compilers would do the &amp;quot;optimization&amp;quot; that modulus by a power of 2 can be done using a bitwise and of that number -1 (e.g. N % 2 == N &amp;amp; 1, N % 4 == N &amp;amp; 3), but that would be the main benefit (since division is much slower than bitwise operators, especially in 80's / 90's hardware)&lt;/p&gt;&#xA;&lt;p&gt;Edit fwiw, I was hoping I could run a test on an Apple IIGS emulator but alas while the Orca C compiler is open sourced, to actually get the binary requires buying it and I wasn't that interested at this point.  I instead ran it on QEMU running 386 emulator using OpenWatcom with the -0 flag which is supposed to generate code that will run on 8086+ ... and lo and behold, the recursive one was about 50% faster to calculate gcd(i,j) for i and j between 1 and 1000 (and I ran some code with openwatcom that did foo % 2 vs foo &amp;amp; 1 and they both took the same amount of time so while I don't know how to get openwatcom to dump assembly to compare, I rather expect it to be doing the optimization (I did try to go through quickly the source of Orca C to see what that would spit out for a 6502 / 65816, but wasn't able to find what I was looking for quickly enough)&lt;/p&gt;&#xA;" OwnerUserId="11797" LastEditorUserId="11797" LastEditDate="2020-12-25T03:11:42.520" LastActivityDate="2020-12-25T03:11:42.520" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="17403" PostTypeId="2" ParentId="7570" CreationDate="2020-12-21T23:46:53.320" Score="2" Body="&lt;p&gt;I found this question because I was getting the same symptoms on my Tandy Model 100 when trying to load a text file that I had just (seemingly successfully) recorded to an MP3 file on a Zoom H1 recorder - the TEXT program would just sit there and wouldn't respond to anything, even turning the unit off and on didn't help and I had to reset it (didn't lose any data, luckily).&lt;/p&gt;&#xA;&lt;p&gt;In my case, the problem was I hadn't given any name when saving or trying to load, but just &lt;strong&gt;CAS:&lt;/strong&gt; - when I saved the file again, but typed something proper like MYTEXT instead of CAS:, the recording of this could successfully be loaded again entering MYTEXT as the filename to search for. I have the manual for the Model 100, I just hadn't bothered to look this up before trying... Load/Save in TEXT always refers to cassette files, and cassette files &lt;strong&gt;must&lt;/strong&gt; have a name. BASIC is different, it can LOAD/SAVE/OPEN various devices that you specify together with the filename.&lt;/p&gt;&#xA;" OwnerUserId="20274" LastActivityDate="2020-12-21T23:46:53.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17404" PostTypeId="2" ParentId="17400" CreationDate="2020-12-22T00:01:07.587" Score="38" Body="&lt;p&gt;On the PS1 the lack of perspective correction when applying textures means that geometry will always retain its correct silhouette but the inner pixels may be displaced. Coupled to that, the most common texture format is paletted 16-colour.&lt;/p&gt;&#xA;&lt;p&gt;That suggests one obvious way to minimise perceived texture warping: make sure your textures are low-contrast. Then it’s not going to be so obvious that you don’t have a large array of colours available per texture, or that some of the pixels are being painted out of place.&lt;/p&gt;&#xA;&lt;p&gt;Two obvious art styles emerge: cartoon, ala Crash Bandicoot, where individual objects are so plainly textured that many of them aren’t textured at all; and brown/grey, which neatly avoids those reds and greens that your eye is most sensitive to. There are other options, of course, such as the variety of whites used by the briefly-faddish snowboarding genre, but those two are the more universal.&lt;/p&gt;&#xA;&lt;p&gt;After that it’s just a question of the target audience. The PlayStation audience initially skewed towards older videogame players so the ‘realistic’ look is a better fit.&lt;/p&gt;&#xA;&lt;p&gt;Low-contrast design also meshes well with low-resolution textures, especially when bilinearly fillered, so there’s also some technical advantage even elsewhere.&lt;/p&gt;&#xA;&lt;p&gt;That said, never discount aesthetic choices. Why are movies from the ‘80s so much more likely to contain neon? Certainly not for technical reasons.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-12-22T00:01:07.587" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17405" PostTypeId="2" ParentId="17379" CreationDate="2020-12-22T01:10:29.007" Score="5" Body="&lt;p&gt;Somewhat obscure but &lt;a href=&quot;https://www.hex-rays.com/products/ida/&quot; rel=&quot;nofollow noreferrer&quot;&gt;IDA Pro&lt;/a&gt; for DOS was using Turbo Vision&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pGYRO.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pGYRO.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Later the same TUI got ported to OS/2, Win32 console and Linux terminal and at one point &lt;a href=&quot;https://www.hex-rays.com/blog/ida-on-iphone/&quot; rel=&quot;nofollow noreferrer&quot;&gt;even iPhone&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/A6LCs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/A6LCs.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The TVision version is &lt;a href=&quot;https://twitter.com/malwarelab_eu/status/1338453648825847809&quot; rel=&quot;nofollow noreferrer&quot;&gt;still shipped today&lt;/a&gt; for Win32, Linux and macOS together with the default Qt GUI.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YUnNW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YUnNW.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Updated cross-platform TVision library source code is &lt;a href=&quot;https://www.hex-rays.com/products/ida/support/download/&quot; rel=&quot;nofollow noreferrer&quot;&gt;available for download&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3783" LastEditorUserId="3783" LastEditDate="2020-12-22T08:32:38.237" LastActivityDate="2020-12-22T08:32:38.237" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17406" PostTypeId="2" ParentId="17400" CreationDate="2020-12-22T05:22:32.223" Score="7" Body="&lt;p&gt;I seem to remember reading that the original Quake from id software back in '97 decided to go with 256 color modes due to highcolor (15/16 bit color) and truecolor (16M colors) video cards were still relatively rare. Usually 256 color modes only had 6 bits to assign a color in the DAC, so the ability to get a range of brightness values for a particular color for lighting purposes was quite limited, so you wound up with a relatively dark image.&lt;/p&gt;&#xA;" OwnerUserId="20276" LastActivityDate="2020-12-22T05:22:32.223" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="17407" PostTypeId="1" AcceptedAnswerId="17410" CreationDate="2020-12-22T05:49:46.027" Score="26" ViewCount="5025" Body="&lt;p&gt;Pong, the electronic ping-pong game invented by Atari in 1972, was the first really successful video game.&lt;/p&gt;&#xA;&lt;p&gt;In Britain, 'pong' was also slang for a nasty smell, and I remember reading somewhere, a long time ago, that Atari became aware of this and had a discussion about what if anything to do about it, but I cannot for the life of me remember what the conclusion was, nor can I find any mention of it on Google.&lt;/p&gt;&#xA;&lt;p&gt;What was the game called when it was released in Britain? Did they just keep the name Pong, or did they change it to something else?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-23T07:59:40.467" Title="What was Pong called in Britain?" Tags="&lt;history&gt;&lt;atari&gt;&lt;arcade&gt;&lt;pong&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17408" PostTypeId="2" ParentId="17407" CreationDate="2020-12-22T07:29:09.443" Score="27" Body="&lt;p&gt;&lt;strong&gt;According to Atari co-founder Nolan Bushnell, Pong was marketed as &amp;quot;Ping&amp;quot; in the UK.&lt;/strong&gt; He said so &lt;a href=&quot;https://twitter.com/BBCArchive/status/1200420398178816001&quot; rel=&quot;noreferrer&quot;&gt;in this 1982 BBC interview&lt;/a&gt; (&amp;quot;because evidently Pong is not a good word in England&amp;quot;), and repeated it 16 years later in this &lt;a href=&quot;https://www.heise.de/tp/features/Interview-mit-Nolan-Bushnell-Erfinder-von-Pong-und-Atari-Gruender-3440093.html&quot; rel=&quot;noreferrer&quot;&gt;interview with German online magazine Telepolis&lt;/a&gt;. If nothing else, Bushnell is probably the source of the story you heard.&lt;/p&gt;&#xA;&lt;p&gt;Also, Pong is indeed a British informal word for &amp;quot;an unpleasant odor&amp;quot; (&lt;a href=&quot;https://www.merriam-webster.com/dictionary/pong&quot; rel=&quot;noreferrer&quot;&gt;Merriam-Webster&lt;/a&gt;) or &amp;quot;a disagreeable or offensive smell; stink&amp;quot; (&lt;a href=&quot;https://www.collinsdictionary.com/dictionary/english/pong&quot; rel=&quot;noreferrer&quot;&gt;Collins&lt;/a&gt;), lending credibility to Bushnell's claim.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, several people in this thread have stated that Pong has always been Pong in the UK, whereas no-one can remember it being called Ping. So Bushnell may be misremembering (perhaps this was discussed at Atari, but never implemented?), or Atari may have reverted to Pong after a couple of machines. Or Bushnell is playing a really long-time prank.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2020-12-22T23:07:59.380" LastActivityDate="2020-12-22T23:07:59.380" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="17409" PostTypeId="2" ParentId="17401" CreationDate="2020-12-22T07:45:45.597" Score="7" Body="&lt;p&gt;It avoids recursion, so the resources required (in particular stack depth) are independent of the parameters. OP might find that the book didn't assume the availability of virtual memory, or targeted CP/M or real-mode x86 systems with a stack limit of 64K.&lt;/p&gt;&#xA;&lt;p&gt;How does Knuth deal with this in his 1970s books?&lt;/p&gt;&#xA;" OwnerUserId="18835" LastActivityDate="2020-12-22T07:45:45.597" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17410" PostTypeId="2" ParentId="17407" CreationDate="2020-12-22T08:13:11.127" Score="61" Body="&lt;p&gt;Pong.&lt;/p&gt;&#xA;&lt;p&gt;I've lived in the UK for many years and never heard it  called Ping! That is news to me. Now, when talking about the video game called Pong, we call it Pong.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-12-22T08:13:11.127" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="17411" PostTypeId="2" ParentId="17400" CreationDate="2020-12-22T08:42:32.053" Score="23" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why is this? Was it just a &lt;strong&gt;design decision&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Undoubtedly. While there may have been 'a lot' of games that set a sombre tone of greys and browns (and not much else), there were also a lot that didn't. Here are some screenshots from &lt;a href=&quot;https://www.funstockretro.co.uk/news/the-best-ps1-games-ever/&quot; rel=&quot;noreferrer&quot;&gt;The Best PS1 Games, Ever!&lt;/a&gt;:-&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oYkYV.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oYkYV.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The colors used are chosen to match the tone of the game. Take Tomb Raider for example (IMO the best 3D game ever!). In the screenshot above (bottom right) lots of muted browns and greys are used because the scene is inside a mountain cave. But in the jungle level...&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ScQ0O.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ScQ0O.gif&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-12-22T08:42:32.053" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="17412" PostTypeId="2" ParentId="17401" CreationDate="2020-12-22T15:17:35.083" Score="3" Body="&lt;p&gt;Other answers/comments have touched on two very good reasons: Avoiding recursion (stack overflow) and avoiding division/modulo which may take orders of magnitude more CPU cycles than the messy-looking alternative.&lt;/p&gt;&#xA;&lt;p&gt;If the book is 1980s you've got to consider it was likely targeting very early microprocessors/minicomputers - 1970s hardware - where you have &lt;em&gt;incredibly&lt;/em&gt; limited resources by modern standards.&lt;/p&gt;&#xA;&lt;p&gt;Recursive code can eat resources very quickly and the cost in time and memory could be relatively huge by the standards of the time.&lt;/p&gt;&#xA;&lt;p&gt;Also remember that a lot of optimisation kung-fu that's well understood (or even done behind your back by the compiler) these days was hardly thought of back then, C was a relatively new thing and a lot of coding was done in more arcane languages or assembler.&lt;/p&gt;&#xA;&lt;p&gt;The fact the code contains &lt;code&gt;goto&lt;/code&gt;s makes it pretty darn old-school considering it was &lt;a href=&quot;https://en.wikipedia.org/wiki/Considered_harmful&quot; rel=&quot;nofollow noreferrer&quot;&gt;considered harmful&lt;/a&gt; since 1968.&lt;/p&gt;&#xA;&lt;p&gt;The book you've got may be 1980s but is the 1st printing of the book earlier? It could easily be a 10-year-old text.&lt;/p&gt;&#xA;" OwnerUserId="4432" LastEditorUserId="8845" LastEditDate="2020-12-22T16:01:03.250" LastActivityDate="2020-12-22T16:01:03.250" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="17413" PostTypeId="1" CreationDate="2020-12-22T15:45:50.057" Score="1" ViewCount="252" Body="&lt;p&gt;I have enjoyed Linux for about two years now, but I laugh at how hard I failed when I first started my Linux journey. I would try and enter a password and then nothing would happen. I first thought that my keyboard had failed and then I realised, yeah it does not show a star when you enter a password.&lt;/p&gt;&#xA;&lt;p&gt;Why does Linux operate like this? It seems to be a rather curious way in which Windows and Linux is different.&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="276" LastEditDate="2020-12-22T18:21:02.503" LastActivityDate="2020-12-22T18:21:02.503" Title="Why does Linux not show you an asterisk when you enter a character for a password?" Tags="&lt;operating-system&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2020-12-23T04:01:22.077" ContentLicense="CC BY-SA 4.0" />
  <row Id="17414" PostTypeId="2" ParentId="17413" CreationDate="2020-12-22T16:02:02.093" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why does Linux operate like this? It seems to be a rather curious way in which Windows and Linux is different.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As Faden already &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17413/why-does-linux-not-show-you-an-asterix-when-you-enter-a-character-for-a-password#comment59248_17413&quot;&gt;commented&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;quot;Because it tells an observer how long your password is&amp;quot;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;And to make at least the answer RetroComputing related, classic mainframe (block) terminals for example had an &lt;em&gt;invisible&lt;/em&gt; or &lt;em&gt;dark&lt;/em&gt; field type for secure information. They could be handled/edited (if editable) like other field, except nothing was shown, except for the cursor.&lt;/p&gt;&#xA;&lt;p&gt;While block mode terminals edit local, thus have no issues of slow lines (during typing), and feedback is given local, character mode devices can't provide this. So there either&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;the user gets no feedback - the way (many) unixoides work, or&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;some default character is returned per keystroke.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On CRT based terminals, which do provide a cursor, a space can be returned, giving about the same feedback as mainframe terminals.&lt;/li&gt;&#xA;&lt;li&gt;On 'cursorless' terminals - like real TTY - a different character had to be used. Some used an asterisk, others used other characters, or even combinations with overstrike.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Now, returning on char per char entered might enable guessing the password length (*1). Thus some OS / hidden field provider returned at random one or more replacement characters, resulting in an arbitrary number of symbols is outputted each time, making length detection a guess (*2).&lt;/p&gt;&#xA;&lt;p&gt;Windows effectively works somewhat like text mode without cursor mixed with blockmode. While it provides a cursor, it (mostly) uses proportional fonts, so spaces are quite small and would not rally provide a visual feedback. Using an asterisk as feedback is the next best solution.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand the whole 'hiding' is made only at the output side of an otherwise standard control (*3,*4), so it works more like a block terminal, only allowing a 1:1 relation between invisible character and replacement character.&lt;/p&gt;&#xA;&lt;p&gt;And finally, selecting an asterisk is for one restrained by the need to use a basic (7-bit) ASCII character, to make it work with essentially all fonts the computer in question may have installed and set as default. Of the characters available the asterisk seams like a good choice simply due being a rather bulky and symmetric character - in some way looking like an overstrike of the original symbol. Other OS have used different characters, like &lt;code&gt;x&lt;/code&gt; / &lt;code&gt;X&lt;/code&gt; or similar. In the end it's to each gusto.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - When done strictly like some OS did, edit keys are interpreted but also returned as replacement char. So as soon as someone edits the hidden text, the number of symbols does no longer corespondent to the password length, but more often than not people do not edit.&lt;/p&gt;&#xA;&lt;p&gt;*2 - It's still not really hiding the password length, as the number of symbols does set an upper limit.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Ofc, all of this could be (and sometimes is) changed with custom controls.&lt;/p&gt;&#xA;&lt;p&gt;*4 - It's simply the way windows drawing is structured.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-22T16:34:23.350" LastActivityDate="2020-12-22T16:34:23.350" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17415" PostTypeId="1" AcceptedAnswerId="17417" CreationDate="2020-12-22T16:42:47.027" Score="3" ViewCount="192" Body="&lt;p&gt;I'm not conversant enough in Intel assembler to understand what's going on in the early MS interpreters, so maybe someone can help...&lt;/p&gt;&#xA;&lt;p&gt;Generally in MS-derived BASIC an expression would only be semi-&amp;quot;chunked&amp;quot; and in the simple cases would pretty much leave the code in its original ASCII form. For instance, &lt;code&gt;X+1&lt;/code&gt; would appear that way in code.&lt;/p&gt;&#xA;&lt;p&gt;Also, AFAIK, variable lookup occurs at runtime, so when it encounters &lt;code&gt;X&lt;/code&gt; it looks through the variable table and returns/inserts it.&lt;/p&gt;&#xA;&lt;p&gt;So how did it manage the &amp;quot;local&amp;quot; variables in DEF? For instance:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DEF FNX(A)=A+B+1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In this case, A is a &amp;quot;local&amp;quot;, and B is a global and would be called like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;X=FNX(10)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So how did it substitute the 10 into the formula?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-12-22T18:52:31.463" Title="How did early MS BASIC handle &quot;local&quot; variables in DEF FNX(A)?" Tags="&lt;microsoft-basic&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17416" PostTypeId="2" ParentId="17415" CreationDate="2020-12-22T18:32:39.493" Score="1" Body="&lt;p&gt;I tested this by creating two functions:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;10 A=2&lt;/code&gt;&lt;br /&gt;&#xA;&lt;code&gt;20 B=3&lt;/code&gt;&lt;br /&gt;&#xA;&lt;code&gt;30 DEF FNX(A)=A+B+1&lt;/code&gt;&lt;br /&gt;&#xA;&lt;code&gt;40 DEF FNY(A)=FNX(A)+10&lt;/code&gt;&lt;br /&gt;&#xA;&lt;code&gt;50 PRINT FNY(100),A&lt;/code&gt;&lt;br /&gt;&#xA;&lt;code&gt;RUN&lt;/code&gt;&lt;br /&gt;&#xA;&lt;code&gt; 114       2&lt;/code&gt;&lt;br /&gt;&#xA;&lt;code&gt;READY.&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since the A variable is not clobbered, it is not creating a variable. Since you can have a function call a second function without the value of the first function being clobbered, I'd suspect the value is being placed on the stack until the each function exits. If there was a place in zero page where the value was being stored, then the second function would clobber the value of the first function.&lt;/p&gt;&#xA;" OwnerUserId="637" LastActivityDate="2020-12-22T18:32:39.493" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17417" PostTypeId="2" ParentId="17415" CreationDate="2020-12-22T18:52:31.463" Score="4" Body="&lt;p&gt;The substitution takes place by saving the current value of &lt;code&gt;A&lt;/code&gt; on the hardware stack and assigning &lt;code&gt;A&lt;/code&gt; the evaluated argument for the duration of the computation. Then the variable &lt;code&gt;A&lt;/code&gt; is restored from the stack.&lt;/p&gt;&#xA;&lt;p&gt;Some more detail. A function definition is stored in the variable table (with bit 7 of the first character of its name set to mark it as a function entry).  The function definition in the variable table holds two pointers.  The first one points to the start of the expression after the &lt;code&gt;=&lt;/code&gt; sign of the &lt;code&gt;DEF FN&lt;/code&gt; command.  The second points to the storage of the variable that is named as the argument in the variable table.&lt;/p&gt;&#xA;&lt;p&gt;For example, &lt;code&gt;DEF FN X(Y) = Y+1&lt;/code&gt; would create a function variable named &lt;code&gt;X&lt;/code&gt; (with bit 7 set) which points to the &lt;code&gt;Y+1&lt;/code&gt; part in the program, and to the five bytes of storage for the variable &lt;code&gt;Y&lt;/code&gt;.  When a function is invoked as, say &lt;code&gt;FN X(10)&lt;/code&gt;, then&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The argument is evaluated (resulting in &lt;code&gt;10&lt;/code&gt; in the FAC).&lt;/li&gt;&#xA;&lt;li&gt;The current value of the variable &lt;code&gt;Y&lt;/code&gt; is pushed onto the hardware stack.&lt;/li&gt;&#xA;&lt;li&gt;The variable &lt;code&gt;Y&lt;/code&gt; is assigned the evaluated argument in the FAC.&lt;/li&gt;&#xA;&lt;li&gt;The expression pointed to by the function &lt;code&gt;X&lt;/code&gt; is evaluated (&lt;code&gt;Y + 1&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;And finally the value of &lt;code&gt;Y&lt;/code&gt; is restored from the hardware stack.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="20160" LastActivityDate="2020-12-22T18:52:31.463" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17418" PostTypeId="1" CreationDate="2020-12-22T20:48:52.017" Score="-1" ViewCount="273" Body="&lt;p&gt;Many popular DOS games were ported from video game consoles:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Earthworm_Jim_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Earthworm Jim&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Mega_Man_(1990_video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mega Man&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/The_Lion_King_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Lion King&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/The_Lost_Vikings&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Lost Vikings&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Turrican_II:_The_Final_Fight&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turrican 2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rayman_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rayman&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Oscar_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oscar&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zool&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zool&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Video game consoles generally have wildly different hardware than PCs. They have different CPU architectures, graphics modes, and specialized chips for video, sound, and effects that were specifically targeted by the game developers who programmed these games. You can actually notice the difference when playing a port versus a game developed originally for MS-DOS (such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Commander_Keen&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commander Keen&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Therefore, I have always wondered about the &amp;quot;runtime&amp;quot; environments these DOS ports shipped with. I assume these games were not completely recreated from scratch when they were ported to DOS. At least they could reuse the artwork and level files. But to what extent was the game's original engine reused, or perhaps even emulated, to make the game playable on DOS computers?&lt;/p&gt;&#xA;" OwnerUserId="20286" LastActivityDate="2020-12-22T22:08:07.740" Title="How were console games ported to DOS?" Tags="&lt;ms-dos&gt;&lt;programming&gt;&lt;gaming&gt;&lt;game-consoles&gt;&lt;ports&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17419" PostTypeId="2" ParentId="17418" CreationDate="2020-12-22T20:56:55.097" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I assume these games were not completely recreated from scratch when they were ported to DOS. At least they could reuse the artwork and level files.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Same way they were ported between different consoles.&lt;/p&gt;&#xA;&lt;p&gt;Reprogrammed while, as mentioned, saving as much resources (graphics, sounds, maps) to keep it the same game.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;After all, the PC is just another console with different hardware.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;And like with any port to a different hardware the resulting games will differ as they are new implementations.  Like Earthwork Jim did from Mega Drive to SNES in many respects - here even in graphic/sound assets. It's a rewrite with a goal to hit the same game play, which is the core value to keep it selling.&lt;/p&gt;&#xA;&lt;p&gt;The Asteroids port from arcade to 2600 is a great example. While console port is in no technical detail like the original, it brought the same basic gameplay and many hours of fun to the TV screen.&lt;/p&gt;&#xA;&lt;p&gt;Then again, sometimes this doesn't work out and some ports simply sucked.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-22T22:08:07.740" LastActivityDate="2020-12-22T22:08:07.740" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17420" PostTypeId="1" AcceptedAnswerId="17930" CreationDate="2020-12-22T22:16:54.050" Score="7" ViewCount="422" Body="&lt;p&gt;The &lt;a href=&quot;https://www.youtube.com/playlist?list=PLA3elidp12Ut4pC6rKS5CGauwEYLUF7ms&quot; rel=&quot;nofollow noreferrer&quot;&gt;Classic Tetris World Championship&lt;/a&gt; uses original NES consoles that are modded to provide &lt;a href=&quot;https://thectwc.com/rules-2020/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the same RNG&lt;/a&gt; for both players:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Players WILL have the same RNG&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I am wondering how this was done. So, my question is two-fold:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What &lt;a href=&quot;https://en.wikipedia.org/wiki/Random_seed&quot; rel=&quot;nofollow noreferrer&quot;&gt;random seed&lt;/a&gt; is used by the NES?&lt;/li&gt;&#xA;&lt;li&gt;How can this seed be manipulated?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="20286" LastEditorUserId="20286" LastEditDate="2021-02-10T17:13:33.003" LastActivityDate="2021-02-11T11:46:50.083" Title="How can you set the NES RNG to a known state?" Tags="&lt;gaming&gt;&lt;nes&gt;&lt;rng&gt;" AnswerCount="1" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17421" PostTypeId="1" CreationDate="2020-12-22T23:47:33.540" Score="1" ViewCount="294" Body="&lt;p&gt;What color dot matrix printers exist during 1980s &amp;amp; 1990s (I already know Apple ImageWriter 2)? How their quality and speed compare with ImageWriter 2.&lt;/p&gt;&#xA;" OwnerUserId="18369" LastActivityDate="2020-12-27T18:37:28.820" Title="Color dot matrix printers in 1980s &amp; 1990s" Tags="&lt;printer&gt;&lt;dot-matrix&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17422" PostTypeId="2" ParentId="17421" CreationDate="2020-12-23T01:29:17.083" Score="3" Body="&lt;p&gt;There were many during the 80s, as almost every printer manufacturer had one or more. A short list may include (from faint memory):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;INTEGRAL DATA SYSTEMS-Prism 132&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://archive.org/details/StarNx-1000cRainbowColorPrinterUsersManual&quot; rel=&quot;nofollow noreferrer&quot;&gt;Star NX-1000 Rainbow&lt;/a&gt; or later NX-2480&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://books.google.co.jp/books?id=sy8EAAAAMBAJ&amp;amp;pg=PA187&amp;amp;lpg=PA187&amp;amp;dq=Transtar%20315%20color%20printer&amp;amp;source=bl&amp;amp;ots=R4C3HPceBt&amp;amp;sig=ACfU3U3Sa3h4VDDjbvQIT9wvqFbfwshATQ&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=2ahUKEwitj_2E9eLtAhVIzYUKHVvPDKIQ6AEwC3oECAEQAg#v=onepage&amp;amp;q=Transtar%20315%20color%20printer&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Transtar 315&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Seikosha GP-700A&lt;/li&gt;&#xA;&lt;li&gt;C.Itho's 1570&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The last being the base for the Imagewriter II as Apple had them manufactured by &lt;a href=&quot;https://en.wikipedia.org/wiki/Itochu&quot; rel=&quot;nofollow noreferrer&quot;&gt;Itochu&lt;/a&gt;, like the Imagewriter and the Apple DMP before.&lt;/p&gt;&#xA;&lt;p&gt;Not to mention thermal transfer ones like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Oki's &lt;a href=&quot;https://en.wikipedia.org/wiki/Okimate_10&quot; rel=&quot;nofollow noreferrer&quot;&gt;Okimate 10&lt;/a&gt; and 20&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://books.google.co.jp/books?id=5t3_KRY6ZeUC&amp;amp;pg=RA1-PA97&amp;amp;lpg=RA1-PA97&amp;amp;dq=fujitsu%20TTP-16%20color%20printer&amp;amp;source=bl&amp;amp;ots=WhScHhoQU9&amp;amp;sig=ACfU3U0qskAn5PlnMvh2scDAniOAVapf5A&amp;amp;hl=de&amp;amp;sa=X&amp;amp;ved=2ahUKEwiT6JTQ9eLtAhVBTBoKHRDkBDwQ6AEwBnoECB0QAg#v=onepage&amp;amp;q=fujitsu%20TTP-16%20color%20printer&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fujitsu TTP-16&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And of course daisy wheel ones with multi colour ribbons like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Brother's HR-25&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These are all 198x printers. A few more, usually continued lines came during the early 1990s until everything in that class was taken over by inkjet printers.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Doing a useful comparison seems beyond a useful compact answer.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="4335" LastEditDate="2020-12-23T17:02:42.187" LastActivityDate="2020-12-23T17:02:42.187" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17424" PostTypeId="2" ParentId="17421" CreationDate="2020-12-23T03:43:45.940" Score="4" Body="&lt;p&gt;Only a personal anecdote, but I had a Commodore MCS810 (connected to a C64). I only note it because I don't remember seeing anything before or since, and naturally, it is long gone and this is all recalled from the depths of memory.&lt;/p&gt;&#xA;&lt;p&gt;It used a thermal wax ribbon and could take a colour or black ribbon.&lt;/p&gt;&#xA;&lt;p&gt;The colour ribbon featured alternating strips of (from memory) cyan, magenta and yellow sections, each a page width. When printing in colour, it would of course have to advance by the full width each time to get a pass on all three colours, while the black ribbon only advanced as much as needed, making colour printing at least 3 times slower than black.&lt;/p&gt;&#xA;&lt;p&gt;I remember it had a better resolution than many printers I had seen, I would say 24 pixels/row and could do bitmapped graphics, but I may be mistaken.&lt;/p&gt;&#xA;&lt;p&gt;A full row pass, I recall, would take around 1-2 seconds, so at least triple that for colour. Obviously, with less-than-full lines, black would be much faster.&lt;/p&gt;&#xA;&lt;p&gt;So, in summary, pretty amazing quality at the time, but so, so slow.&lt;/p&gt;&#xA;" OwnerUserId="20290" LastActivityDate="2020-12-23T03:43:45.940" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17425" PostTypeId="2" ParentId="17407" CreationDate="2020-12-23T07:47:55.663" Score="10" Body="&lt;p&gt;It was marketed as PONG (note the capitals) and can be seen (subject to current restrictions) at British retro preservation venues like the Centre for Computing History.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.computinghistory.org.uk/det/4007/Atari-PONG/&quot; rel=&quot;noreferrer&quot;&gt;http://www.computinghistory.org.uk/det/4007/Atari-PONG/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20292" LastEditorUserId="20292" LastEditDate="2020-12-23T07:59:40.467" LastActivityDate="2020-12-23T07:59:40.467" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17427" PostTypeId="2" ParentId="17421" CreationDate="2020-12-23T09:15:16.727" Score="5" Body="&lt;p&gt;In the late 80ies I bought myself a STAR LC-10 C color dot matrix printer for my Amiga.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;strong&gt;Quality&lt;/strong&gt; was &amp;quot;impressive&amp;quot; (if you hold the printout 2-4m away ). In normal reading distance you could recognize the dots and see the patterns in graphics.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;strong&gt;Speed&lt;/strong&gt; was awful. in high quality mode the printer needed to print every line twice and this was my default mode. For a nice graphic in half page mode it took approx 1 hr(maybe 30-40 min.. it is long time ago, but it was sllooooww).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;strong&gt;Sound&lt;/strong&gt; was loud! You could never print anything later in the night because it would literally &amp;quot;scream&amp;quot;  while spitting out the data onto the paper&lt;/p&gt;&#xA;&lt;p&gt;One benefit over todays printers was it could handle continuous form paper. Which I used extensively to print out my source codes to work on them on my way to school(no laptops).&lt;/p&gt;&#xA;&lt;p&gt;The second benefit was its sturdiness: I think I never saw anything comparable ever again. The printer was heavy but seemingly indestructible. It worked even after 20 years(in the basement). I just throwed it away when I need to move, but it was fully functional, nothing broken, everything ran as on the first day.&lt;/p&gt;&#xA;" OwnerUserId="8195" LastEditorUserId="8195" LastEditDate="2020-12-27T18:37:28.820" LastActivityDate="2020-12-27T18:37:28.820" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17429" PostTypeId="1" AcceptedAnswerId="17450" CreationDate="2020-12-23T11:44:59.350" Score="5" ViewCount="286" Body="&lt;p&gt;The KR580VM1 (or КР580ВМ1) is a CPU from Soviet Ukraine that is not directly equivalent to any Western ones. It's basically an Intel 8080 with another register pair, H1L1, and another address space which can contain data but not executable code. Instruction prefixes control the use of H1L1 and the second address space.&lt;/p&gt;&#xA;&lt;p&gt;Sounds like a great product, right?&lt;/p&gt;&#xA;&lt;p&gt;The thing is I cannot find any evidence that this chip was ever used anywhere by anyone. Maybe the Z80 clones plus bank switching mechanisms eclipsed the KR580VM1's usefulness. Maybe it was used only in embedded applications that nobody writes about today. So my question is if this CPU actually was used in any products&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2020-12-24T08:58:14.593" LastActivityDate="2020-12-24T19:59:13.303" Title="Did any computer actually use the KR580VM1?" Tags="&lt;cpu&gt;&lt;ussr&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17430" PostTypeId="1" AcceptedAnswerId="17433" CreationDate="2020-12-23T12:04:28.337" Score="4" ViewCount="832" Body="&lt;p&gt;Please watch the first few seconds of gameplay of the following two SNES games:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Pocket Monster: &lt;a href=&quot;https://www.youtube.com/watch?v=EbPw6-Z2pkU&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=EbPw6-Z2pkU&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Disney's Bonkers: &lt;a href=&quot;https://www.youtube.com/watch?v=kaIh0Lcdhrc&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=kaIh0Lcdhrc&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;They use the &lt;em&gt;exact&lt;/em&gt; same title screen music! I suspect other games use it as well. What is the source of this song, what's it called, and why does it appear in multiple games?&lt;/p&gt;&#xA;" OwnerUserId="20286" LastActivityDate="2020-12-23T14:44:38.833" Title="Why do multiple SNES games share the same title screen music?" Tags="&lt;gaming&gt;&lt;snes&gt;&lt;music&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17431" PostTypeId="1" CreationDate="2020-12-23T13:04:26.787" Score="0" ViewCount="137" Body="&lt;p&gt;I inherited two A500s. The other day I brought them out and hooked them up with their A500 power supplies. The monitor displays the hand asking for the Workbench disc, and the A500 drive clicks as it waits for a disc to be inserted, but when I insert a Workbench 1.3, it does not boot, but still asks for the Workbench disc. I have two A500 PSU for them, and tried both supplies on each machine. Same results for both A500s.&lt;/p&gt;&#xA;&lt;p&gt;Why won't it boot from the disc? As far as I know, the disc is reliable and good.&lt;/p&gt;&#xA;" OwnerUserId="20299" LastActivityDate="2020-12-25T14:51:22.023" Title="I have two A500s which won't boot from Workbench 1.3" Tags="&lt;amiga-500&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17432" PostTypeId="2" ParentId="17431" CreationDate="2020-12-23T14:43:53.523" Score="6" Body="&lt;p&gt;If the illustration disappears, the drive makes sound, but then the illustration comes back, either the drive is bad or the disks are bad.&lt;/p&gt;&#xA;&lt;p&gt;Floppy drive maintenance for the A500 is as follows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Unplug the Amiga.&lt;/li&gt;&#xA;&lt;li&gt;Remove the screws on the underside.&lt;/li&gt;&#xA;&lt;li&gt;Lift off the top.&lt;/li&gt;&#xA;&lt;li&gt;Detach the power cable and data ribbon to the drive.&lt;/li&gt;&#xA;&lt;li&gt;Unscrew the drive from the mounting rack.&lt;/li&gt;&#xA;&lt;li&gt;Remove the floppy drive.&lt;/li&gt;&#xA;&lt;li&gt;Unscrew the small screws on the sides or underside of the floppy drive to remove the top metal casing.&lt;/li&gt;&#xA;&lt;li&gt;Gently clean the drive heads with a swab using rubbing alcohol or lighter fluid.&lt;/li&gt;&#xA;&lt;li&gt;Clean the drive rail with rubbing alcohol or lighter fluid.&lt;/li&gt;&#xA;&lt;li&gt;Re-lubricate the drive rail with lithium grease.&lt;/li&gt;&#xA;&lt;li&gt;Also clean the small switches near the front slot of the drive, these detect the disk insertion and write-protect condition.&lt;/li&gt;&#xA;&lt;li&gt;Reverse the steps to re-mount the drive. Reseat the cables firmly - these may have come loose with moving the unit.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Alternatively:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The disks really are bad, try other disks.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If the illustration doesn't disappear, the drive is not detecting the disk or the drive is not powered. Cleaning the detect switch and reseating the cables firmly should fix this.&lt;/p&gt;&#xA;&lt;p&gt;Less likely but still possible is the CIA chips that help coordinate everything the Amiga have started to become defective. These may need to be replaced.&lt;/p&gt;&#xA;&lt;p&gt;It's also possible that one of the voltages coming from your PSU is bad, so the motherboard is active but the drive is not.&lt;/p&gt;&#xA;" OwnerUserId="20300" LastActivityDate="2020-12-23T14:43:53.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17433" PostTypeId="2" ParentId="17430" CreationDate="2020-12-23T14:44:38.833" Score="11" Body="&lt;p&gt;The reason for this is that Pocket Monster is an &lt;a href=&quot;https://bootleggames.fandom.com/wiki/Pocket_Monster_(Mega_Drive/SNES)&quot; rel=&quot;noreferrer&quot;&gt;unlicensed SNES game released in September 1998&lt;/a&gt;, and in being an unlicensed game, it does not need to uphold itself to Nintendo's licensing standards.  It stole both graphics and audio freely from many games, including the title screen music from Disney's Bonkers.&lt;/p&gt;&#xA;&lt;p&gt;I would imagine that the same stolen music track would be found in many unlicensed games because doing so saves development time, which brings down the cost of production.&lt;/p&gt;&#xA;" OwnerUserId="8679" LastActivityDate="2020-12-23T14:44:38.833" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17434" PostTypeId="2" ParentId="17163" CreationDate="2020-12-23T15:43:23.047" Score="1" Body="&lt;p&gt;Yep, I was a service manager for one of the first Apple stores (before Apple screwed us and sold through Sears...) The Apple Profile came in 5MB and 10MB and were very slow and prone to failure if moved.&lt;/p&gt;&#xA;&lt;p&gt;Our service contracts had to specify that we would move the profiles as customers were just unplugging them and moving them while the platters were still spun up. They were thousands of dollars for replacement drives (Yes, even for dealers). The Mac 512 was one of the first to have larger hard drives. That was through a third party that built the Hyperdrive, if I remember right, it was initially an internal 20 Meg drive. We had to install a special clip on the 68000 to allow it to interface. It wasn't till the Mac SE, that they included a SCSI port for external hard drives.&lt;/p&gt;&#xA;" OwnerUserId="20303" LastActivityDate="2020-12-23T15:43:23.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17435" PostTypeId="2" ParentId="17163" CreationDate="2020-12-23T15:46:37.603" Score="0" Body="&lt;p&gt;I believe hard drives started becoming popular for IBM PC's (and compatibles ;), for consumers, around 1985-ish usually 10-20MB.&lt;/p&gt;&#xA;&lt;p&gt;To give an idea of the cost in 1987 when they started becoming more mainstream, I was extremely excited to get my first at a computer show - a whopping 40MB for $400. It was a 5-1/4&amp;quot; half-height, loud whirring vibrating beast. I think I maxed out my RAM to 640K around that time too.&lt;/p&gt;&#xA;&lt;p&gt;The thought of that drive and buying experience pops into my head every once in awhile when I'm looking at file sizes, free space, etc.&lt;/p&gt;&#xA;" OwnerUserId="20302" LastActivityDate="2020-12-23T15:46:37.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17436" PostTypeId="2" ParentId="17163" CreationDate="2020-12-23T16:57:32.587" Score="0" Body="&lt;p&gt;My first HD was 60MB and cost ~$800.00 US.  I also got 4MB of memort and that cost ~$1000.00.  The mothervoard with a 8MHz CPU(286) was ~$1000.00.  About the same time(early 80's) I saw an add for a 300MB full height drive for ~$5K.&lt;br /&gt;&#xA;Cliff&lt;/p&gt;&#xA;" OwnerUserId="20307" LastEditorUserId="20307" LastEditDate="2020-12-23T23:51:23.273" LastActivityDate="2020-12-23T23:51:23.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17437" PostTypeId="1" CreationDate="2020-12-23T18:24:32.867" Score="0" ViewCount="511" Body="&lt;p&gt;I have just managed to find and install my native language versions of MS-DOS 6 and Windows 3.11 in a virtual machine, just as I had on my first computer: an IBM 486 DX2 66 MHz.&lt;/p&gt;&#xA;&lt;p&gt;VM software: VMware Workstation 15 Player.&lt;/p&gt;&#xA;&lt;p&gt;I've got it working, and I'm very happy for that, but there's two issues:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It's going at lightning speed. When I type &amp;quot;win&amp;quot; in MS-DOS prompt after starting it up, I can only see the Windows logo for a split second before I see the Windows 3.11 Program Manager, fully loaded. The way I remember it, that Windows logo &amp;quot;splash screen&amp;quot; is supposed to show for many seconds until the GUI gradually loads up. How do I slow it down? I've already looked in the CPU settings for the VM, and baffingly, it lacks any option to &amp;quot;simulate 486&amp;quot; or anything like that. Not even a field to enter any kind of cryptic number. How is it done?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The GUI uses 640 × 480 pixels, just as I remember it. However, even in fullscreen mode, it looks like a little square in the middle of my 1920 × 1080 screen. It could easily be &amp;quot;2×2&amp;quot; as big without being upscaled in any way. (Yes, there would still be black bars on all four sides.) I don't see any options anywhere to make it scale up either, but even if there were, I wouldn't want that. The &amp;quot;VMware tools&amp;quot; only seem to be available for Windows, and when I try to install them anyway, there is no &lt;code&gt;D:&lt;/code&gt; (CD-ROM) drive, neither in Windows or DOS. So that's probably not it.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;How do I solve these two frustrating problems so that I can actually see what I'm doing and immerse myself in nostalgia and preferably never return back to the present?&lt;/p&gt;&#xA;" OwnerUserId="20311" LastEditorUserId="15334" LastEditDate="2020-12-27T19:28:22.757" LastActivityDate="2020-12-29T17:26:16.360" Title="How do I slow down the emulation in VMware and make it go &quot;proper fullscreen&quot; for Windows 3.11?" Tags="&lt;emulation&gt;&lt;windows-3.x&gt;&lt;80486&gt;" AnswerCount="2" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="17438" PostTypeId="2" ParentId="17401" CreationDate="2020-12-23T18:56:44.340" Score="5" Body="&lt;p&gt;As others have pointed out, this GCD algorithm avoids the use of division and modulus (except for division and modulus by &lt;code&gt;2&lt;/code&gt;, which can be implemented very easily in binary arithmetic).  There might be good reasons to avoid division and modulus in some environments.&lt;/p&gt;&#xA;&lt;p&gt;Let's take a closer look at the code.  The algorithm is basically in two pieces.&lt;/p&gt;&#xA;&lt;p&gt;Top part: find the highest power of &lt;code&gt;2&lt;/code&gt; which divides both &lt;code&gt;u&lt;/code&gt; and &lt;code&gt;v&lt;/code&gt;.  So you divide both variables by &lt;code&gt;2&lt;/code&gt; until one of them is odd, and count the number of times you did that.&lt;/p&gt;&#xA;&lt;p&gt;At the end of the top part, you know that one of the two variables is odd (the other one might still be even).  The code keeps track of the one that we know for sure is odd.  And then, for the one that might be even, we might as well divide out all its remaining factors of &lt;code&gt;2&lt;/code&gt; to make it odd also.&lt;/p&gt;&#xA;&lt;p&gt;Bottom part: repeatedly subtract either &lt;code&gt;u&lt;/code&gt; from &lt;code&gt;v&lt;/code&gt; or vice-versa.  Naturally you want to know which variable is which, so that you can update the right one.  And also, when you subtract an odd number from an odd number, the result is even.  So for that variable, you might as well divide out the factors of &lt;code&gt;2&lt;/code&gt; again!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Comment&lt;/strong&gt;: in both parts, the code keeps track of which variable is which, by &lt;strong&gt;setting &lt;code&gt;t&lt;/code&gt; to be either positive or negative.  This is a confusing way to do it.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Comment&lt;/strong&gt;: I am not convinced that there is any compelling reason to remember which variable is (known to be) odd, in either part.  You can always just divide out the &lt;code&gt;2&lt;/code&gt;'s in both variables.  The one that's odd won't take long.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Comment&lt;/strong&gt;: They replace all the &lt;code&gt;/2&lt;/code&gt; operations with &lt;code&gt;&amp;gt;&amp;gt;1&lt;/code&gt;, but they leave &lt;code&gt;%2&lt;/code&gt; everywhere instead of &lt;code&gt;&amp;amp;1&lt;/code&gt;.  Maybe this makes sense depending on your compiler.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Comment&lt;/strong&gt;: As noted in the comments, &lt;code&gt;k&lt;/code&gt; is never used, so it could be removed.  Alternatively, you could remove all instances of &lt;code&gt;f&lt;/code&gt; and write &lt;code&gt;return (u &amp;lt;&amp;lt; k);&lt;/code&gt; at the end.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Comment&lt;/strong&gt;: As noted in the comments, this gives the wrong answer if either input is &lt;code&gt;0&lt;/code&gt;.  Also, I'd say it gives the wrong answer for negative inputs.  Personally, I would say that the greatest common divisor of &lt;code&gt;6&lt;/code&gt; and &lt;code&gt;-16&lt;/code&gt; is &lt;code&gt;2&lt;/code&gt;.  It definitely isn't &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Comment:&lt;/strong&gt; So, a lot of the confusion comes from this &amp;quot;use the sign of &lt;code&gt;t&lt;/code&gt; to encode a boolean&amp;quot; idea.  And also, I don't think that boolean value is all that important to begin with.  And also, we could probably do without &lt;code&gt;t&lt;/code&gt; altogether.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; I don't think the code had to be as confusing as it was.&lt;/p&gt;&#xA;&lt;p&gt;For reference, here's a Python version of this algorithm, with some changes as described above.  It should be straightforward to port to C, just put in enough brackets and semicolons, etc.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def gcd(u, v):&#xA;    if u &amp;lt; 0: u = -u&#xA;    if v &amp;lt; 0: v = -v&#xA;    # handle negative input before zero input,&#xA;    # to ensure output is nonnegative in cases like gcd(0, -1)&#xA;    if u == 0: return v&#xA;    if v == 0: return u&#xA;    # Top part: find exponent on 2 in output&#xA;    k = 0&#xA;    while ((0 == u&amp;amp;1) and (0 == v&amp;amp;1)):&#xA;        k += 1; u &amp;gt;&amp;gt;= 1; v &amp;gt;&amp;gt;= 1&#xA;    # Bottom part: subtract u from v or vice-versa&#xA;    while True:&#xA;        while u&amp;amp;1 == 0:&#xA;            u &amp;gt;&amp;gt;= 1&#xA;        while v&amp;amp;1 == 0:&#xA;            v &amp;gt;&amp;gt;= 1&#xA;        if u &amp;gt; v:&#xA;            u -= v&#xA;        elif u &amp;lt; v:&#xA;            v -= u&#xA;        else: # u == v, DONE.&#xA;            return u &amp;lt;&amp;lt; k&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="20312" LastActivityDate="2020-12-23T18:56:44.340" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17439" PostTypeId="2" ParentId="17163" CreationDate="2020-12-23T19:06:38.113" Score="0" Body="&lt;p&gt;In January 1983 I bought one of the first ever 5.25 inch Winchester hard disks. It's marketing style launch was called &amp;quot;Shugart's Case for Success&amp;quot; and the SA604, 6 Mega bytes of unformatted storage capacity, came in a briefcase, which I still have. It came with a photocopy style preliminary OEM manual. I have a cover letter dated May 30,1983 signed by the &amp;quot;Senior Advisory Applications Engineer&amp;quot; saying the updated manuals were enclosed. It was $1727.32 Canadian 1983 dollars.&lt;/p&gt;&#xA;&lt;p&gt;My friend had an older 8 inch Winchester, similar capacity but more cost. Both were full height drives, and I don't think the term 1/2 height even existed yet.&lt;/p&gt;&#xA;&lt;p&gt;At the time we were building an 80186 based computer from scratch. 5.25 inch floppies were just starting to be used, but we used an 8 inch floppy drive.&lt;/p&gt;&#xA;" OwnerUserId="20314" LastEditorUserId="20314" LastEditDate="2020-12-23T19:21:08.660" LastActivityDate="2020-12-23T19:21:08.660" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17440" PostTypeId="2" ParentId="17163" CreationDate="2020-12-23T19:42:26.200" Score="1" Body="&lt;p&gt;Are you limiting your question to &amp;quot;IBM PCs?&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;Because hard drives for hobbyists existed long before the IBM PC.&lt;/p&gt;&#xA;&lt;p&gt;I built my first computer, a Heathkit H-89, from a kit. It included 4kB of RAM! I designed and built 64kB of RAM for it, which I built on perf board with wire-wrap wire.&lt;/p&gt;&#xA;&lt;p&gt;I had a pair of ONE MEGABYTE 8&amp;quot; hard drives that I bought for it! They were pulls from minicomputers, and cost $800 (~1980 dollars) used, each! I spent another $400 for the controller, and a hundred or so for power supplies, cabinet, and cabling. It had a stepper motor, and was not terribly faster than a floppy when seeking, except latency and continuous read was much quicker. I think these were something like $6,000 new at the time.&lt;/p&gt;&#xA;&lt;p&gt;I was working for Tandem Computers, and we had huge &amp;quot;washing machine&amp;quot; hard drives that held 100 megabytes on a thirteen platter removable pack. These cost upwards of $20,000, which is probably more like $100,000 in inflation-adjusted dollars.&lt;/p&gt;&#xA;&lt;p&gt;When the industry moved to 300 megabyte removable-pack hard drives, I almost got one of the older models for a reasonable price from my employer, but I didn't have room for a washing machine, nor did I have an air-conditioned room for it, nor 220VAC service, as was required!&lt;/p&gt;&#xA;&lt;p&gt;I recall a talk by Bill Gates in the mid-1980s, where he said that if the auto industry were like the PC industry, we'd have cars that could go 5,000 miles per hour while getting 1,000 miles to the gallon in fuel economy. Some wag loudly quipped from the audience, &amp;quot;Yea, and they'd crash three times a day!&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;Now, people think nothing about starting a 300 megabyte download for some new app that they want to try. My, how things have changed.&lt;/p&gt;&#xA;" OwnerUserId="20315" LastEditorUserId="20315" LastEditDate="2020-12-25T07:13:50.033" LastActivityDate="2020-12-25T07:13:50.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17441" PostTypeId="2" ParentId="17437" CreationDate="2020-12-23T19:56:04.020" Score="14" Body="&lt;p&gt;VMWare is not an emulator these days, but a hypervisor.  Windows 3.1 is running directly on the hardware with nothing underneath it, just fenced in by hardware-level protection and translation.  If you want to slow it down, you'll have to eat up cycles with a busy task, or slow down your processor some other way.&lt;/p&gt;&#xA;&lt;p&gt;Another option would be to use an emulator like &lt;a href=&quot;https://pcem-emulator.co.uk/&quot; rel=&quot;noreferrer&quot;&gt;PCem&lt;/a&gt; which aims for timing accuracy of real 8086 through 80586 PC compatible machines, though it may not have some other features of VMWare you need.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2020-12-23T19:56:04.020" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="17442" PostTypeId="2" ParentId="17163" CreationDate="2020-12-23T20:47:23.060" Score="0" Body="&lt;p&gt;This answer is anecdotal. PC Magazine was not the only monthly rag. There was Byte Magazine. But I remember the price of a hard drive then very vividly.&lt;/p&gt;&#xA;&lt;p&gt;Remember the IBM-PC came with a Floppy Disk Drive ($6000). Two if you were lavish ($8000). But the clones came roaring in with two drives Standard; so that went away quietly. But then -XT showed up right behind, priced in double digit thousands ($13000) with built in hard drive (All 5MB of it).&lt;/p&gt;&#xA;&lt;p&gt;You then could upgrade your Floppy IBM-PC machine to XT grade with a Winchester Drive for $5000.00. So the earliest IBM-offered stand-alone 5MB Winchester disk went for $5000.00 Retail at IBM authorized stores.&lt;/p&gt;&#xA;&lt;p&gt;Why am I so sure, you'd ask? Because, I drooled over many a Byte Magazine, over purchasing options, especially after Kaypro - the Oscilloscope manufacturer turned IBM Luggable (CP/M) Clone Manufacturer - decided to throw in a 10MB hard drive into their Kaypro II (2 Floppy, that is), rebranded Kaypro 10 (See Wikipedia reference &lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-05/1984_05_BYTE_09-05_Computers_and_the_Professions#page/n207/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://archive.org/stream/byte-magazine-1984-05/1984_05_BYTE_09-05_Computers_and_the_Professions#page/n207/mode/2up&lt;/a&gt;) for a grand all-inclusive price of $2395.00 ($2500.00 after Tax).&lt;/p&gt;&#xA;&lt;p&gt;I dehydrated quite a bit on that, torn about IBM compatibility in exchange for a full system half the price of a single IBM Winchester Drive by itself.&lt;/p&gt;&#xA;&lt;p&gt;Never got to buy a Kaypro, but later missed its media compatibility promise in its dying models where its tower could read single sided, double sided, double density and high density up to 1.2MB 5-1/4&amp;quot; floppies.&lt;/p&gt;&#xA;&lt;p&gt;PC Magazine eventually killed off Byte, but that's where the real history lay. Another note to make is that at the time there was no Kit nor other system named PC. IBM coined PC for its 'kit' so PC was then IBM Only - until of course its loss of monopoly first to Phoenix BIOS (which survived IBM's court challenge), then the AT-bus and finally the hoards of willing Pacific Rim manufacturers that could churn out dumb boxes spruced into life by Microsoft's $40.00 MS-DOS.&lt;/p&gt;&#xA;" OwnerUserId="15798" LastEditorUserId="15798" LastEditDate="2020-12-24T09:01:08.450" LastActivityDate="2020-12-24T09:01:08.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17443" PostTypeId="2" ParentId="10983" CreationDate="2020-12-23T21:30:42.040" Score="2" Body="&lt;p&gt;For the Atari 8-bit, not the Atari ST, everything you've asked for (and more can be) found at the &lt;a href=&quot;https://atariwiki.org/wiki/Wiki.jsp?page=Action&quot; rel=&quot;nofollow noreferrer&quot;&gt;Action page at AtariWiki&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="20261" LastActivityDate="2020-12-23T21:30:42.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17444" PostTypeId="2" ParentId="17421" CreationDate="2020-12-23T23:07:24.883" Score="3" Body="&lt;p&gt;The grandfather of all of the color dot-matrix printers was the Epson JX-80, available from 1983. The commands it used to select the colors, starting with a escape-R, were used by practically everyone else.&lt;/p&gt;&#xA;&lt;p&gt;Around 1985/6, Epson introduced a new model with a 24-pin head, I believe the LQ-300-II. We had one at work and printed out all sorts of GIFs, many of them from one of the employee's sisters who had quite a talent for swords-n-sorcery imagry.&lt;/p&gt;&#xA;&lt;p&gt;I always throught the ImageWriter II was an Epson but I see it was a C.Itoh.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2020-12-23T23:07:24.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17445" PostTypeId="2" ParentId="17401" CreationDate="2020-12-24T00:51:24.447" Score="19" Body="&lt;p&gt;The reason is that it's quicker.&lt;/p&gt;&#xA;&lt;p&gt;You just need to look up GCD in Knuth, that is Volume 2 of TAOCP, to get answers and analysis. There you have comparisons of &amp;quot;Original Euclidean algorithm&amp;quot;, &amp;quot;Modern Euclidean algorithm&amp;quot; and &amp;quot;Binary gcd algorithm&amp;quot;. The last one is introduced with the remark that &amp;quot;Since Euclid's patriarchal algorithm has been used for so many centuries, it is a rather surprising fact that it may not always be the best method for finding the greatest common divisor after all.&amp;quot; This new algorithm was discovered by J. Stein in 1961, and has the advantage that it has no division, but only (i) subtraction, (ii) testing whether a number is even or odd, and (iii) shifting the binary representation of an even number to the right (halving)&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;The code you are reading follows the how &amp;quot;Algorithm B&amp;quot; is described there (Vol. 2, p. 321), and the labels B3 and B4 reference those steps in the algorithm. I think it's sensible to use labels that directly correspond to the steps as named by Knuth, since it makes it easy to compare the program with something known to work and thoroughly analyzed. Using that instead of writing your own (maybe naive) GCD isn't that far off from using a standard library function in a higher-level language, like math.gcd in Python. It is there, and you can assume it will be done in an efficient way.&lt;/p&gt;&#xA;&lt;p&gt;With the make-up processor Knuth analyzes these algorithms for, the program that implements this binary algorithm is with some assumptions on average 8.8n + 5 cycles where the average value for Euclid is 11.1n + 7 (with random inputs between 1 and 2^n).&lt;/p&gt;&#xA;&lt;p&gt;That is made with a variant of MIX, which is Knuth's original make-up processor, similar to real processors from the 1960s. How it fares with more modern processors (for example Knuth's replacement MMIX) I don't know. But at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary_GCD_algorithm&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia page about the binary algorithm&lt;/a&gt; there is a reference from 2000 proving that proved that binary GCD uses about 60% fewer bit operations than the Euclidean algorithm.&lt;/p&gt;&#xA;" OwnerUserId="10426" LastEditorUserId="10426" LastEditDate="2020-12-24T01:18:18.927" LastActivityDate="2020-12-24T01:18:18.927" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17446" PostTypeId="2" ParentId="17385" CreationDate="2020-12-24T01:27:21.920" Score="8" Body="&lt;p&gt;Many arcade games came in upright and cocktail versions, using the same PCB assembly for both versions. They usually had one dip-switch position on the circuit board to designate the cabinet type, while some had a software configuration menu where you could change the cabinet type, and some others (for example, I think Space Invaders) had a different mainboard part number for each cabinet type, with the only difference being the ROMs installed or a solder jumper installed.&lt;/p&gt;&#xA;&lt;p&gt;Depending on the setting of this parameter, the ROM would either map both players to the &amp;quot;Player One&amp;quot; set of controls, or map each player to its respective physical control set, while flipping the video on the monitor depending on which player was playing.&lt;/p&gt;&#xA;&lt;p&gt;Source: 20+ years ago I repaired arcade machines for a living and was given a malfunctioning original black and white &amp;quot;Trimline&amp;quot; upright &lt;a href=&quot;https://web.archive.org/web/20200929170023/https://www.firstversions.com/2015/05/space-invaders.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Space Invaders&lt;/a&gt;. I spent many hours poring over its service documentation before I got it fully working again. Browsing through some of the online &lt;a href=&quot;https://web.archive.org/web/20200921092104/http://www.classicgaming.cc/classics/space-invaders/technical-info&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation&lt;/a&gt; to refresh my memory, it appears as if an 8-bit input is dedicated for the player input switches, with three bits dedicated to left, right, and fire inputs for each of both players, and the last two bits dedicated to the one and two player game select buttons on the mainboards of both cabinet types. This characteristic appears to be the same, regardless of whether the machine is of Taito or Midway manufacture.&lt;/p&gt;&#xA;" OwnerUserId="11734" LastEditorUserId="16497" LastEditDate="2020-12-27T19:41:49.207" LastActivityDate="2020-12-27T19:41:49.207" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17447" PostTypeId="2" ParentId="17163" CreationDate="2020-12-24T10:19:27.097" Score="1" Body="&lt;p&gt;In the early 1980's Lithgow Electronics [based in Greenock - not so far from &amp;quot;Spango Valley with its own railway station &amp;quot;IBM Halt] had the contract to assemble just 5,000 IBM PC's - single floppy drive. We assembled 50,000 that year !&lt;/p&gt;&#xA;&lt;p&gt;Then we decided to get some for our own use: First addition was a 5mb TallGrass Winchester unit with a tape backup. Cost £10,000.&lt;/p&gt;&#xA;&lt;p&gt;Then I wrote a memo to Sir William Lithgow saying the new IBM with a 10Mb hard drive would have a life of 10 years..... MUCH. The IBM PC AT came out soon after.&#xA;Then the great battle - Token Ring versus what we all have now.&lt;/p&gt;&#xA;&lt;p&gt;Eur. Ing. Richard Townsend-Rose MA CEng MICE, Glasgow, Scotland ....&lt;/p&gt;&#xA;" OwnerUserId="20323" LastActivityDate="2020-12-24T10:19:27.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17448" PostTypeId="2" ParentId="17401" CreationDate="2020-12-24T10:36:56.990" Score="12" Body="&lt;p&gt;As others have said, this is Stein's algorithm, and is remarkable for having taken so long to be discovered, considering the importance of GCD to number theory.  While it was discovered at least as early as 1962, it was not published until 1967.&lt;/p&gt;&#xA;&lt;p&gt;One thing that hasn't been mentioned is that it scales much better than division.  As you deal with larger and larger numbers, division time grows quadratically.  Shift and subtraction operations, however, do not.  On an AMD Zen processor, a 64-bit integer divide takes 13-44 cycles, whereas every Stein's algorithm op takes one cycle, with the exception of the bit-scan op, which takes two.&lt;/p&gt;&#xA;&lt;p&gt;Also note that in the example you cite, many things are done in loops that we now have instructions for - specifically the loop that continually divides the number by two until it's odd: that's just two instructions now.&lt;/p&gt;&#xA;&lt;p&gt;Also note that while on x86, dividion and modulo are computed and returned simultaneously, on other architectures, a separate multiplication and subtraction operation is needed in order to compute the modulo, further slowing down the traditional GCD calculation.&lt;/p&gt;&#xA;&lt;p&gt;Modern Stein's algorithm code looks like this.  (Note &lt;code&gt;__builtin_ctzll&lt;/code&gt;, count trailing zeroes, is the gcc built-in to tell you how many times you need to divide a number by two until it's odd.)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;uint64_t gcd(uint64_t x, uint64_t y) {&#xA;  if (x == 0) return y;&#xA;  if (y == 0) return x;&#xA;  auto xs = __builtin_ctzll(x);&#xA;  x &amp;gt;&amp;gt;= xs;&#xA;  auto ys = __builtin_ctzll(y);&#xA;  y &amp;gt;&amp;gt;= ys;&#xA;  auto topshift = std::min(xs, ys);&#xA;  // x and y are both odd and we don't know which is bigger.&#xA;  for (;;) {&#xA;    if (x &amp;lt; y) std::swap(x, y);&#xA;    x -= y;&#xA;    if (x == 0) break;&#xA;    x &amp;gt;&amp;gt;= __builtin_ctzll(x);&#xA;  }&#xA;  return y &amp;lt;&amp;lt; topshift;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;See &lt;a href=&quot;https://godbolt.org/z/7hKa34&quot; rel=&quot;noreferrer&quot;&gt;https://godbolt.org/z/7hKa34&lt;/a&gt; for the generated code, and note how complex the &amp;quot;simple&amp;quot; divide algorithm is, at least on x86-64.&lt;/p&gt;&#xA;&lt;p&gt;On my MacBook Pro just now, computing GCD of all pairs of numbers between 10,000 and 20,000 takes a little over 2 seconds using Stein, and about 8 seconds using Euclid.&lt;/p&gt;&#xA;&lt;p&gt;Finally, note that Euclid is worst when the incoming numbers have a ratio close to the golden ratio; the first several divisions produce simply 1, and the so the first few modulo operations are merely extremely expensive subtraction operations, while the number becomes smaller very slowly.&lt;/p&gt;&#xA;&lt;p&gt;By contrast, Euclid is fastest, and Stein the worst, when the numbers have largely differing magnitudes; Euclid will immediately bring the larger number into the same range as the small one, while Stein only clears away one or two bits per iteration.&lt;/p&gt;&#xA;&lt;p&gt;You can alleviate these problem areas by combining the algorithms like so:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;// The &amp;quot;Brown-Euclid-Stein Hybrid&amp;quot;, if no one has thought of it.&#xA;uint64_t besh(uint64_t x, uint64_t y) {&#xA;  if (x == 0) return y;&#xA;  if (y == 0) return x;&#xA;  auto xs = __builtin_ctzll(x);&#xA;  x &amp;gt;&amp;gt;= xs;&#xA;  auto ys = __builtin_ctzll(y);&#xA;  y &amp;gt;&amp;gt;= ys;&#xA;  auto topshift = std::min(xs, ys);&#xA;  if (x &amp;gt; y) std::swap(x, y);&#xA;  for (;;) {&#xA;    y %= x;&#xA;    y &amp;gt;&amp;gt;= __builtin_ctzll(y);&#xA;    if (y &amp;lt;= 1) return (y ? 1 : x) &amp;lt;&amp;lt; topshift;&#xA;    x %= y;&#xA;    x &amp;gt;&amp;gt;= __builtin_ctzll(x);&#xA;    if (x &amp;lt;= 1) return (x ? 1 : y) &amp;lt;&amp;lt; topshift;&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="20322" LastActivityDate="2020-12-24T10:36:56.990" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17450" PostTypeId="2" ParentId="17429" CreationDate="2020-12-24T11:44:07.980" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Sounds like a great product, right?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It does. 64 KiB code + 64 KiB data is about the ideal structure for an 8 bit CPU with 16 bit addressing.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The thing is I cannot find any evidence that this chip was ever used anywhere by anyone.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It came not only late, but as well at a rather troubled time, followed by an extreme fast swing to simply by world standard CPUs.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Maybe it was used only in embedded applications that nobody writes about today. So my question is if this CPU actually was used in any products&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;None that I know of. But there are reports of &lt;a href=&quot;https://en.wikipedia.org/wiki/Vector-06C&quot; rel=&quot;nofollow noreferrer&quot;&gt;Вектор-06Ц&lt;/a&gt; (Vector-06Z) to be fitted with a КР580ВМ1 - which is easy as it is in Mode 0 mostly compatible with the default КР580ВМ80А.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://sensi.org/scalar/ware/552/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Virtual Vector&lt;/a&gt; emulator does support the КР580ВМ1 extensions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-24T19:59:13.303" LastActivityDate="2020-12-24T19:59:13.303" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17453" PostTypeId="1" AcceptedAnswerId="17456" CreationDate="2020-12-24T22:26:39.207" Score="15" ViewCount="672" Body="&lt;p&gt;In the history of computers, much is said of microprocessors, for good reason, but the relatively unsung RAM chips were equally important. Of particular significance were the 4kbit and 16kbit dynamic RAMs, which had capacity sufficient to enable a single-board personal computer to do nontrivial things; the Apple II, for example, could use either kind of chip, in up to three rows, for a range of 4Kbyte (affordable) to 48Kbyte (capable of running spreadsheets and word processors).&lt;/p&gt;&#xA;&lt;p&gt;At what process node were 4k and 16k DRAMs first made? For example, &lt;a href=&quot;https://en.wikichip.org/wiki/6_%C2%B5m_lithography_process&quot; rel=&quot;noreferrer&quot;&gt;the 6um process&lt;/a&gt; saw the introduction of the 8080 and 6800 microprocessors, but there is no mention on that page of which RAM chips it covered.&lt;/p&gt;&#xA;&lt;p&gt;If it makes a difference, by 'first made' I mean commercially significant volume production, not just prototypes.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-25T23:00:46.560" Title="What process node were 4k and 16k DRAMs first made at?" Tags="&lt;history&gt;&lt;chip&gt;&lt;ram&gt;&lt;dram&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17454" PostTypeId="2" ParentId="17453" CreationDate="2020-12-25T02:59:23.527" Score="5" Body="&lt;p&gt;My recollection was that 4 kbit and 16 kbit DRAMS were being manufactured in volume around roughly circa same time frame as when 8 micron NMOS fabrication was common for other stuff.  This web site seems to support that hypothesis:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikichip.org/wiki/8_%C2%B5m_lithography_process&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikichip.org/wiki/8_µm_lithography_process&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2020-12-25T02:59:23.527" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17455" PostTypeId="2" ParentId="17352" CreationDate="2020-12-25T03:40:38.387" Score="2" Body="&lt;p&gt;Referring specifically to the &lt;strong&gt;serial communication&lt;/strong&gt; functionality of the VIA, there is a very crucial difference between that and a UART.  (It is not unusual for a UART to also include some GPIO pins and a timer or two, as for example the 28L92 does.)&lt;/p&gt;&#xA;&lt;p&gt;UART stands for Universal &lt;strong&gt;Asynchronous&lt;/strong&gt; Receiver &amp;amp; Transmitter.  Asynchronous here means that no explicit clock signal is sent along with the data.  That is why you have to set the speed of a serial port at both ends, rather than only at the origin, and why the protocol includes start and stop bits to synchronise the receiver to each byte.&lt;/p&gt;&#xA;&lt;p&gt;The VIA's shift register does not transmit or expect start and stop bits.  Instead, it uses a second pin as a clock signal.  This makes it a &lt;strong&gt;synchronous&lt;/strong&gt; serial device.  It can be interfaced fairly directly to an SPI slave for this reason, though only for unidirectional data transmission.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-12-25T03:40:38.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17456" PostTypeId="2" ParentId="17453" CreationDate="2020-12-25T07:03:55.073" Score="14" Body="&lt;p&gt;Intel manufactured its 1-kilobit 1103 RAM &lt;a href=&quot;https://books.google.com/books?id=2cu1Oh_COv8C&amp;amp;pg=PA362#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;on an 8 μm P-MOS process.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Through most of the 1970s, DRAM was made from NMOS. The first successful CMOS memory was &lt;a href=&quot;https://web.archive.org/web/20190705234921/http://www.shmj.or.jp/english/pdf/ic/exhibi727E.pdf&quot; rel=&quot;noreferrer&quot;&gt;the Hitachi HM6147 SRAM,&lt;/a&gt; a 4-kilobit chip which used a 3 μm CMOS process.  This was not the first 4-kb chip on the market (it was preceded by, among others, the Intel 2114 SRAM), but it’s more comparable to the CMOS DRAMs that followed it.&lt;/p&gt;&#xA;&lt;p&gt;The first 16K RAM chip was the Intel 2116, circa 1976, and the market leader was the MOSTEK 4116, introduced circa 1977. Unfortunately, I don’t have a reference for their feature size at hand, but NMOS memories of the sizes you’re asking about would have used a process somewhere in the neighborhood of 6 micron, between the 8 micron process of the 1K RAM and the 5 micron process of the 64K RAM. There were other innovations in process technology beyond shrinking the feature size, particularly in the 4116.&lt;/p&gt;&#xA;&lt;p&gt;MOSTEK’s &lt;a href=&quot;http://www.bitsavers.org/components/mostek/_dataBooks/1979_Mostek_Memory_Data_Book_and_Designers_Guide_Mar79.pdf&quot; rel=&quot;noreferrer&quot;&gt;1979 databook&lt;/a&gt; said,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;At MOSTEK, all new products are being designed to work on either current process technology (5 microns) or new generation SCALED POLY 5. To accomplish this goal all new products are designed to operate on a single 5 volt power supply. All products use advanced state-of-the-art design techniques and perform very respectably on the standard process.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;MOSTEK was then selling 64-kibibit DRAM, the MK4164, apparently on an advanced 5-micron process.&lt;/p&gt;&#xA;&lt;p&gt;I found a claim that NEC introduced 64-kilobit RAM on a 1.5 μm process in 1981, but not a reliable reference for it so far.&lt;/p&gt;&#xA;&lt;p&gt;From that point onward, when an apples-to-apples comparison becomes possible, &lt;a href=&quot;https://maltiel-consulting.com/Semiconductor_technology_memory.html&quot; rel=&quot;noreferrer&quot;&gt;this site&lt;/a&gt; is an excellent resource. It describes the state of the industry in 1983 as:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;256Kb development is at a maturing stage. NMOS 256Kb by Fujitsu with 2.5um NMOS triple poly process, 256Kb by NEC on 1.3um double poly process, 256Kb by Mitsubishi on 2um process, 256Kb by Motorola, 256Kb by Toshiba with 2um double poly process. Intel shows off industry-first CMOS DRAM with 64Kb on 1.2um process.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There was a leap to 1 megabit DRAM in 1984, using a 1 μm CMOS process.&lt;/p&gt;&#xA;&lt;p&gt;4-megabit DRAM appeared in 1987, using an 800 nm process.&lt;/p&gt;&#xA;&lt;p&gt;16-megabit DRAM appeared experimentally in 1988, and became mainstream in 1989 on a 500–600 nm process.&lt;/p&gt;&#xA;&lt;p&gt;64-megabit DRAM became mainstream in 1991 on a 400 nm process.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2020-12-25T23:00:46.560" LastActivityDate="2020-12-25T23:00:46.560" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17457" PostTypeId="1" AcceptedAnswerId="17459" CreationDate="2020-12-25T12:34:22.187" Score="3" ViewCount="202" Body="&lt;p&gt;I'm trying to get an idea of the quantitative parameters of the computer industry in the era that saw the rise of personal computers. Of course, the industry as a whole was old by then; companies like Intel got their start in large part by selling RAM chips for minicomputers and mainframes; there was even a debate within Intel in the early seventies about whether the company should be doing microprocessors, versus just staying focused on the RAM chips that were the profitable business.&lt;/p&gt;&#xA;&lt;p&gt;I think the one specific quantitative question that could sum it all up is: how much RAM was sold, in total throughout the world, each year during the seventies? Every computer uses memory, and it was not far into that decade before every computer, from the largest to the smallest, was using semiconductor memory. There are certainly figures available on the &lt;em&gt;price per kilobyte&lt;/em&gt; of RAM, but it seems to me that people involved with the industry must have gathered at least estimates of the &lt;em&gt;total amount sold&lt;/em&gt; each year. If there isn't an available estimate for total worldwide sales, it would still be interesting to see figures for the major manufacturers like Intel and Mostek.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2020-12-25T20:49:04.807" Title="How much RAM was sold each year in the 1970s?" Tags="&lt;history&gt;&lt;chip&gt;&lt;intel&gt;&lt;ram&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17458" PostTypeId="2" ParentId="17431" CreationDate="2020-12-25T14:51:22.023" Score="4" Body="&lt;p&gt;The people who had these A500s most likely had a huge stash of bootable game diskettes, so you can use that to test the disk drives.&lt;/p&gt;&#xA;&lt;p&gt;From what I remember about how the A500 drive works, you should be able to know if the drive is bad, or if the disk is bad just by listening to it.&lt;/p&gt;&#xA;&lt;p&gt;Without a disk in, the drive should make a click at regular intervals.&lt;/p&gt;&#xA;&lt;p&gt;With a disk in, assuming the disk is spinning, which you will hear, if the drive does not seek at all, it means it can't read the boot sector. This can mean either the disk or the drive is bad.&lt;/p&gt;&#xA;&lt;p&gt;If you hear it seeking several times this means it read the boot sector and is trying to load files from the disk. This means the drive heads work, and the seek motor probably works too. If it stops seeking, then that's probably a bad disk.&lt;/p&gt;&#xA;" OwnerUserId="4941" LastActivityDate="2020-12-25T14:51:22.023" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17459" PostTypeId="2" ParentId="17457" CreationDate="2020-12-25T20:49:04.807" Score="6" Body="&lt;p&gt;I don't know the total quantity of 'RAM' sold in those years, but according to &lt;a href=&quot;https://phe.rockefeller.edu/LogletLab/DRAM/&quot; rel=&quot;noreferrer&quot;&gt;this site&lt;/a&gt; the total number of DRAM chips and Bytes sold each year was:-&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Year   million units     GiB&#xA;----   -------------   -------&#xA;1974        4.77         2.27  &#xA;1975       23.15        11.04&#xA;1976       48.34        24.02&#xA;1977       80.79        49.88&#xA;1978      111.36       109.74&#xA;1979      181.34       284.00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2020-12-25T20:49:04.807" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17460" PostTypeId="1" AcceptedAnswerId="17469" CreationDate="2020-12-25T23:29:01.087" Score="4" ViewCount="271" Body="&lt;p&gt;In the 90s and in Western countries, you were able to buy import software for pretty much every video game system, for instance, Super Nintendo, Mega Drive, PC Engine, PlayStation and so on.&lt;/p&gt;&#xA;&lt;p&gt;To run them, you generally needed either an adapter for cartridges or a modchip for CD-ROMs.&lt;/p&gt;&#xA;&lt;p&gt;But most importantly, the language barrier didn't have to be a problem, especially Japanese.&lt;/p&gt;&#xA;&lt;p&gt;Of course for a video game, this was mostly acceptable except maybe for RPGs with a lot of text.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;But what about for computers ? (let's say the PC platform for instance)&lt;/p&gt;&#xA;&lt;p&gt;Was one easily able to find out import software for it as it was the case for consoles back then?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I don't consider something like Microsoft Office being an &amp;quot;import&amp;quot; software because even though it came from the US, locally you would find it in  the language of the region you live in and at a regular price, i.e. it has been localized.&lt;/p&gt;&#xA;&lt;p&gt;Say for PlayStation, suppose you live in a PAL region, import software would be NTSC-U/C and NTSC-J. In other terms, software that isn't supposed to be distributed at all in your region, but that you can still buy from few local shops that import it from overseas.&lt;/p&gt;&#xA;&lt;p&gt;In short, was software for US-only region commonly available in EU as import? And the other way around as well. Maybe let's say, between US, EU and Asia.&lt;/p&gt;&#xA;&lt;p&gt;The best analogy I can think of would be VHS tapes, you were able to buy imported ones but at your own risk, language barrier, no warranty but also compatibility issues, but quite a few people did it because you had some sort of 'exclusive' content for the place you were in.&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2020-12-26T13:16:53.933" LastActivityDate="2021-01-01T05:40:02.937" Title="Was imported software for computers as common as it was for consoles?" Tags="&lt;software&gt;" AnswerCount="3" CommentCount="13" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17462" PostTypeId="1" AcceptedAnswerId="17466" CreationDate="2020-12-26T06:28:46.847" Score="13" ViewCount="1250" Body="&lt;p&gt;&lt;a href=&quot;https://www.sciencephoto.com/media/228556/view&quot; rel=&quot;noreferrer&quot;&gt;Science Photo Library&lt;/a&gt; says that this photograph of Claude Shannon was taken in Bell Laboratories in 1954.  What is the name of the computer behind him?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cwkw4.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cwkw4.jpg&quot; alt=&quot;ClaudeShannon&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11421" LastActivityDate="2020-12-26T20:08:44.810" Title="What is the name of this computer? (Bell Laboratories, 1954)" Tags="&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17463" PostTypeId="1" AcceptedAnswerId="17467" CreationDate="2020-12-26T09:00:49.467" Score="9" ViewCount="940" Body="&lt;p&gt;I seem to remember that an A500 (probably A600 too) would keep emitting a click from the floppy drive. I think this was only with no disk in the drive, but I'm not sure.&lt;/p&gt;&#xA;&lt;p&gt;What was that?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2020-12-27T15:23:04.580" Title="Why does an Amiga's floppy drive keep clicking?" Tags="&lt;amiga&gt;&lt;floppy-drive&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17465" PostTypeId="2" ParentId="17463" CreationDate="2020-12-26T09:31:04.513" Score="3" Body="&lt;p&gt;The floppy drives have a &amp;quot;disk inserted&amp;quot; sensor and signal wire. When a disk is removed, the signal changes immediately. But when a disk is inserted, the signal does not change automatically, but only when the disk head is moved. Amiga handles this by stepping the drive head of empty drives every couple of seconds - if a disk has been inserted, the step causes the disk inserted sensor to change and the OS reacts to this.&lt;/p&gt;&#xA;" OwnerUserId="149" LastActivityDate="2020-12-26T09:31:04.513" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17466" PostTypeId="2" ParentId="17462" CreationDate="2020-12-26T10:25:59.033" Score="15" Body="&lt;p&gt;It's likely part of the Bell Model VI relay computer, installed at Bell Labs in 1949. This was a revision of the massive &lt;a href=&quot;https://en.wikipedia.org/wiki/Model_V&quot; rel=&quot;noreferrer&quot;&gt;Model V&lt;/a&gt; designed and built by Bell, which were installed at NACA (1946) and BRL (1947).&lt;/p&gt;&#xA;&lt;p&gt;The test panel next to Shannon is very similar to this &lt;a href=&quot;https://americanhistory.si.edu/collections/search/object/nmah_904274&quot; rel=&quot;noreferrer&quot;&gt;Model V control panel&lt;/a&gt; (missing its fascia). This is not much of a help to identification, however, as Bell reused standard telephone racks, cabinets, switches and relays as much as possible.&lt;/p&gt;&#xA;&lt;p&gt;The glimpse of the other panel through the glass door, showing &amp;quot;Control …&amp;quot;, &amp;quot;Digits …&amp;quot; and &amp;quot;Register&amp;quot; above a large relay rack is more distinctive. The device may not have been a computer as we know it: the Model VI  was not a stored program device, though it did have some features that came very close.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2020-12-26T20:08:44.810" LastActivityDate="2020-12-26T20:08:44.810" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17467" PostTypeId="2" ParentId="17463" CreationDate="2020-12-26T16:30:54.917" Score="5" Body="&lt;p&gt;On the Amiga, CIA 1 is used for the disk controller, and Port A on CIA 1 is used to sense the state of the &lt;code&gt;/DSKCHANGE&lt;/code&gt; signal from a pin on the floppy drive interface &lt;em&gt;of the currently selected unit&lt;/em&gt; (Amigas support up to 4 daisy-chained floppy drives).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;/DSKCHANGE&lt;/code&gt; signal is latched in the active (low) state when a disk is removed, and Amiga floppy drives will not change the state just by inserting a disk. Instead, the state only changes back to inactive whenever the drive's head is stepped with a disk inserted.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;trackdisk.device&lt;/code&gt;, which is contained in the Kickstart ROM on an Amiga, includes logic to probe all the connected floppies for changes in the &lt;code&gt;/DSKCHANGE&lt;/code&gt; signal. Therefore, for any floppy drive without a disk inserted, the &lt;code&gt;trackdisk.device&lt;/code&gt; will poll that drive by selecting it and stepping the head every couple of seconds, thus causing the state change to happen after a disk has been inserted. Therefore, whenever the Amiga is on, you will hear the head stepping &amp;quot;click&amp;quot; on all floppy drives without disks inserted every couple of seconds in a round-robin sequence.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;trackdisk.device&lt;/code&gt; also provided functionality to the programmer to disable the clicking. This was done by setting a flag called &lt;code&gt;TDPF_NOCLICK&lt;/code&gt; in the device structure for any floppy drives that the programmer wanted to &amp;quot;silence&amp;quot;. Because of this feature being in the OS, and the clicking sound being annoying to some users, there were various utility programs created to enable this flag, such as &lt;a href=&quot;http://aminet.net/package/disk/misc/NoClick&quot; rel=&quot;nofollow noreferrer&quot;&gt;NoClick&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Disabling the clicking relies on another feature of the Amiga disk  hardware. Stepping the head and the click sound do not occur if the head is already positioned to track zero, and the movement of the head is restricted by the mechanical stop.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-12-27T15:23:04.580" LastActivityDate="2020-12-27T15:23:04.580" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17469" PostTypeId="2" ParentId="17460" CreationDate="2020-12-26T17:44:59.297" Score="3" Body="&lt;p&gt;&lt;em&gt;Preface:&lt;/em&gt; The question is a bit complicated as it revolves around issues that were not present at every time and in every area, like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Direct protection by different interfaces&lt;/li&gt;&#xA;&lt;li&gt;Direct protection by encryption&lt;/li&gt;&#xA;&lt;li&gt;Direct protection with region locking&lt;/li&gt;&#xA;&lt;li&gt;Indirect protection due video standards&lt;/li&gt;&#xA;&lt;li&gt;Sales restrictions&lt;/li&gt;&#xA;&lt;li&gt;etc&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Similar the the distinction 'the West' isn't really useful. What constructs 'the West' ? Is Brasil part of it? Or Yugoslavia? Or South Africa? Cold war propaganda terms aren't as useful in a serious setting as one may think at first. The 'West' is way more diverse than that.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;So while I think the question as such can not be answered in a serious manner, I think it may be useful to add some personal views over the years - as IT professional and gamer who was never big into consoles, but spend way too many hours playing on my Apple/Atari/PC.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;General&lt;/h2&gt;&#xA;&lt;p&gt;In general, the most relevant point here is that on the computer side there was never a concept of regional locking or separated markets, like it was on consoles - and ever there it took time to evolve.&lt;/p&gt;&#xA;&lt;p&gt;Of course did NTSC games for the Atari VCS not work on a PAL unit straight away. Or better, they did, as the console didn't care, but a strict 50 Hz PAL TV's would not display the generated 60 Hz PAL  picture (*1) . But that was only a minor hurdle, as already in the late 70s TV sets (at least many German produced) were able to synchronize at 60 Hz as well (*2). They were made for export and build to carter to many standards and combinations thereof. If at all, one had to get a second decoder module for the TV, which were easy available.&lt;/p&gt;&#xA;&lt;h2&gt;Early Computer Games - ca. 1980&lt;/h2&gt;&#xA;&lt;p&gt;For machines that did essentially not differ between markets, like the Apple II, or Commodore PET / TRS-80 due bringing their own display, the issue wasn't copy protection or sales hurdles - foreign manufacturers were eager to sell to Germany - but taxation. I remember when I once tried to bring a bunch of brand new Apple II games in from the US. Must have been 1979 or 1980, so really the beginning of commercial computer games. They twice across the pond until we figured out how to do it. There was simply no import duty category for software at that time. So we finally settled on them as being promotional items without commercial value - which required them to have it clearly marked, so they got returned, someone in California put a stamp on each disk cover 'DEMO' and send it again over. This time flawless. I still have the covers :))&lt;/p&gt;&#xA;&lt;p&gt;Fun part aside, at the time the second mailing arrived I already had most of these games as pirated copies ... Yes, pirating has always been faster, even way before the Internet.&lt;/p&gt;&#xA;&lt;h2&gt;8 Bit World&lt;/h2&gt;&#xA;&lt;p&gt;Now, there were also machines that differed between markets, most notably the C64 with it's ~4% lowered clock rate for European models (0.985 MHz vs. 1.023 MHz). But again, like with the 2600, most (early) games simply worked. Maybe a bit slowed down when counting frames for speed effects. Later, when games got more sophisticated, using raster effects and alike some did show glitches&lt;/p&gt;&#xA;&lt;p&gt;With the C64 the problems were more prevalent when using a PAL game on a NTSC machine due having less border space and equally faster action. But again, a large number of games simply worked.&lt;/p&gt;&#xA;&lt;p&gt;In general the same issue happens with the Atari 8 bit series. Due it'S way more powerful graphics system games used many effects already early on, creating incompatibility. Here again the use of NTSC games in a PAL system results in (usually) less glitches than the other way around. Again most based on the higher resolution offered by PAL due the lower frame rate.&lt;/p&gt;&#xA;&lt;p&gt;Of course, machines that were mostly sold in Europe didn't had anyone outside suffering, like the ZX80/81/Spectrum series. Similar the Amstrad CPC avoided it by using their own displays (*3)&lt;/p&gt;&#xA;&lt;p&gt;When it comes to Japanese computers, their market was rather limited in Europe. Sharp did make some good sales with the MZ-80 series, but they again not only more business orientated, but as well all in one units, so compatibility was a given thing.&lt;/p&gt;&#xA;&lt;h2&gt;The Brave New 16 Bit World&lt;/h2&gt;&#xA;&lt;p&gt;For the Atari ST, software is mostly agnostic of the frame rate and modulation (with the *m models) is done according to either standard. Again, top end games (like XENON) may or may not work on either frame rate. Resolution is, unlike with previous generation, less of an issue and stable per mode. Also, most users didn't use a TV set at all, but dedicated CRTs (*4). In general software companies did take this into account and made single versions for all markets.&lt;/p&gt;&#xA;&lt;p&gt;For the Amiga it was a bit more complicated and simple at the same time. Machines could be switched by hardware modification between both video standards, or, units with 1 MiB chipram, could do so in software. With AmigaDOS 3 and higher the mode could be set with a key combination during start up. In the end it came again to each game if it did run in either or both modes.&lt;/p&gt;&#xA;&lt;h2&gt;Finally the PC&lt;/h2&gt;&#xA;&lt;p&gt;With the PC all of this became obsolete and hardware differences vanished. Not only due displays independent of TV standards, but as well due software layers like DirecX.&lt;/p&gt;&#xA;&lt;p&gt;In fact, why should a manufacturer restrict sales at all? The whole idea of regions and locking is more that of console manufacturers trying to control market access. With the PC there is no single manufacturer guarding the machine but independent developers of hardware and software - and the later do have an interest to sell as many as possible.&lt;/p&gt;&#xA;&lt;p&gt;If any manufacturer wanted to restrict access at all, it became a complicated game of guessing, as neither Windows version not IP addresses or any setting does really reflect where the PC or its user is located. Even more, all of that are software settings.&lt;/p&gt;&#xA;&lt;h2&gt;Long Story Short&lt;/h2&gt;&#xA;&lt;p&gt;On computers regional/market locking was never a real thing, more of an anoyance to be overcome.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Even with a US game the output would still be PAL encoded, but 60 Hz and 525 lines.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Heck, even the old (late 1960s) B&amp;amp;W TV I had in my room could show US-TV from a nearby base (with some fiddling of an 8 year old). Only for the sound I had to ask for help.&lt;/p&gt;&#xA;&lt;p&gt;*3 - There was a Power/TV Modulator unit available, at least from Schneider, but I'm not sure if many were sold.&lt;/p&gt;&#xA;&lt;p&gt;*4 - In fact, the TV-ready models did only come rather late, when Atari tried to expand downwards to low end users - mostly in the US, as the ST was considered more of a professional computer in Europe.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2020-12-26T17:44:59.297" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17472" PostTypeId="2" ParentId="17460" CreationDate="2020-12-26T20:10:53.220" Score="3" Body="&lt;p&gt;On the territory of the ex-USSR, in the turbulent 90s, it was possible from time to time, for the owners of the largest stolen fortunes, to find pure examples of software imports - that is, literally non-localized boxes from the United States, not intended for export, were exported and sold as item of status consumption.&lt;/p&gt;&#xA;&lt;p&gt;In other cases - piracy. It cannot be said that the software was &amp;quot;imported&amp;quot; - it was still a slightly different process. Compilations on CD, with cracks, homemade amateur localizations ...&lt;/p&gt;&#xA;&lt;p&gt;And I would say that it was a fundamentally larger market in terms of scale and influence.&lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2020-12-26T20:10:53.220" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17473" PostTypeId="2" ParentId="17463" CreationDate="2020-12-26T20:45:27.277" Score="0" Body="&lt;p&gt;The click is caused by the drive head hitting the backstop that prevents it stepping beyond the location of track 1.&lt;/p&gt;&#xA;&lt;p&gt;The Amiga floppy controller can only detect when there is a disk inserted when stepping the drive head, so the trackdisk.device that operates it periodically steps the head against the backstop, causing the clicking sound.&lt;/p&gt;&#xA;&lt;p&gt;Revision 33.7 of trackdisk.device added support for a &amp;quot;no click&amp;quot; mode. In this mode the drive steps the head back and forth instead of always back, so that it doesn't keep hitting the backstop.&lt;/p&gt;&#xA;&lt;p&gt;Reference: trackdisk/changed.asm lines 67 and 357.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2020-12-26T20:45:27.277" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17474" PostTypeId="2" ParentId="259" CreationDate="2020-12-26T20:49:45.893" Score="-1" Body="&lt;p&gt;The sound is caused by the drive head hitting the backstop. By default trackdisk.device periodically steps it inwards, causing it to hit the backstop every time.&lt;/p&gt;&#xA;&lt;p&gt;From version 33.7 of trackdisk.device an alternative method is available that steps the head out, and then in again alternately. That way it doesn't hit anything. Other utilities that do this either make use of that feature or patch trackdisk.device to add it.&lt;/p&gt;&#xA;&lt;p&gt;From the trackdisk.device source code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;*       ;------ Step the drive.  We will recalibrate it eventually&#xA;*       ;------ anyway, so don't worry about where it is.&#xA;*       ;------ if noclickstart flag is set, always step out.&#xA;*       ;------ to save space, clear it then change it to set it.&#xA;*       ;------ D3 is a flag to tell if I changed direction.&#xA;    MOVEQ   #0,d3               ; assume changed (d3=0)&#xA;    BTST.B  #TDPB_NOCLICK,TDU_PUBFLAGS(A3)&#xA;    BEQ.S   CC_Click&#xA;    BCLR    #CIAB_DSKDIREC,TDU_6522(A3) ; will get changed!&#xA;    SNE d3              ; d3=1 if bit was 1&#xA;CC_Click:&#xA;    BCHG    #CIAB_DSKDIREC,TDU_6522(A3)&#xA;&#xA;    MOVE.B  TDU_6522(A3),D0&#xA;    MOVE.B  D0,D1&#xA;    BCLR    #CIAB_DSKSTEP,D1&#xA;    MOVE.B  D1,(A2)&#xA;    MOVE.B  D0,(A2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4301" LastEditorUserId="4301" LastEditDate="2020-12-28T12:19:38.637" LastActivityDate="2020-12-28T12:19:38.637" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17475" PostTypeId="1" AcceptedAnswerId="17477" CreationDate="2020-12-26T22:18:49.123" Score="5" ViewCount="351" Body="&lt;p&gt;I'm just creating my own &lt;code&gt;.prg&lt;/code&gt; file using &lt;a href=&quot;http://manpages.ubuntu.com/manpages/trusty/man1/hexedit.1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;NCurses Hexeditor&lt;/a&gt; in Ubuntu which I load using &lt;code&gt;load&amp;quot;file.prg&amp;quot;,8&lt;/code&gt; in Vice. I followed the information in &lt;a href=&quot;https://michaelcmartin.github.io/Ophis/book/x72.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt; explaining how to create a &lt;code&gt;.prg&lt;/code&gt; file. It says basic starts at 2048 ($0800) but loads the &lt;code&gt;.prg&lt;/code&gt; code starting at $0801:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SL0gi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SL0gi.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Is there any reason for this? I tried it at $0800 and all works fine (see below). I guess it wouldn't matter because the Assembly code starts at 2064 ($0810), but just thought I might be missing something as to why they chose $0801 and not $0800.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;What I tried&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;First of all, according to the C64 Programmer's Reference Guide (C64PRM, p.59):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jSpj2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jSpj2.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Tests show that no matter what PRG header I use my bytes are always loaded into 2048 when using &lt;code&gt;,8&lt;/code&gt; as per C64PRM. But let's just suppose I use a header for $0800, then I have the following bytes in Hexeditor:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vXi9O.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vXi9O.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;and I don't get an error, e.g.:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SG4pL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SG4pL.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16295" LastEditorUserId="16295" LastEditDate="2020-12-27T09:36:22.823" LastActivityDate="2020-12-27T09:36:22.823" Title="Basic / Assembler startup code (C64)" Tags="&lt;commodore-64&gt;&lt;6502&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17476" PostTypeId="2" ParentId="6480" CreationDate="2020-12-26T23:04:25.940" Score="6" Body="&lt;p&gt;Most of BBC BASIC's speed advantage came from Acorn's use of a 2 MHz 6502 with fast 4816A RAM chips. It's a good interpreter, but it's the hardware that makes it near-mythically fast.&lt;/p&gt;&#xA;&lt;p&gt;To confirm this, one can run J. G. Harston's port of &lt;a href=&quot;http://mdfs.net/Software/BBCBasic/C64/&quot; rel=&quot;noreferrer&quot;&gt;6502 BBC BASIC for Commodore 64&lt;/a&gt;. This is essentially the Acorn BBC Micro's interpreter lightly patched to talk to KERNAL routines. Running the &lt;a href=&quot;https://stardot.org.uk/forums/viewtopic.php?f=2&amp;amp;t=19819&amp;amp;start=30#p276764&quot; rel=&quot;noreferrer&quot;&gt;ClockSp 3.00&lt;/a&gt; BBC BASIC benchmark on an NTSC C64 (1.023 MHz 6510 or 8500):&lt;/p&gt;&#xA;&lt;p&gt;ClockSp 3.00 (RTR)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;RUN&#xA;BBC BASIC CPU TIMING PROGRAM&#xA;REALLY REAL REPEAT LOOP      0.97MHZ&#xA;INTEGER REPEAT LOOP          0.96MHZ&#xA;REALLY REAL FOR LOOP         0.97MHZ&#xA;INTEGER FOR LOOP             0.96MHZ&#xA;TRIG/LOG TEST                0.97MHZ&#xA;STRING MANIPULATION          0.97MHZ&#xA;PROCEDURE CALL               0.97MHZ&#xA;GOSUB CALL                   0.94MHZ&#xA;COMBINED AVERAGE             0.96MHZ&#xA;&#xA;COMPARED WITH A 2.00MHZ BBC B&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;A just-switched-on BBC Micro would return 1.92 MHz. To get to the 2 MHz value, you have to turn off some interrupts. So a C64 clocks in at half the speed of the BBC Micro, as you might expect from the clock speed.&lt;/p&gt;&#xA;&lt;p&gt;To verify that the Acorn interpreter is not much faster that Commodore BASIC 2.0, one can run my &lt;a href=&quot;https://github.com/scruss/bench64&quot; rel=&quot;noreferrer&quot;&gt;bench64&lt;/a&gt; portable BASIC index program on the C64 BBC BASIC interpreter. With Commodore BASIC, an NTSC C64 scores 100 on each test:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;BASIC BENCH INDEX&#xA;&amp;gt;I GOOD. NTSC C64=100&#xA;&#xA;1/8 - FOR:&#xA;      57.8S;700/S; I=104&#xA;2/8 - GOTO:&#xA;      87.8S;302.1/S; I=68&#xA;3/8 - GOSUB:&#xA;      45.3S;465.1/S; I=133&#xA;4/8 - IF:&#xA;      43.3S;336.5/S; I=139&#xA;5/8 - FN:&#xA;      60.2S;60.5/S; I=100&#xA;6/8 - MATHS:&#xA;      63.3S;6.1/S; I=95&#xA;7/8 - STRING:&#xA;      56.6S;87.1/S; I=106&#xA;8/8 - ARRAY:&#xA;      55.2S;30.3/S; I=109&#xA;&#xA;OVERALL INDEX=102&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So Acorn's interpreter might only be very slightly faster on the same hardware as Commodore BASIC.&lt;/p&gt;&#xA;&lt;p&gt;This is not to say that you couldn't do efficient things with BBC BASIC — its integer &lt;code&gt;FOR&lt;/code&gt; loops are around 3x the speed of Commodore BASIC's floating point ones on the same hardware, and it's undoubtedly a better dialect  — but for portable code it was the Acorn hardware that made most of the difference.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2020-12-26T23:04:25.940" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17477" PostTypeId="2" ParentId="17475" CreationDate="2020-12-27T01:43:07.960" Score="5" Body="&lt;p&gt;It is not strictly true that &amp;quot;all works fine&amp;quot; for ML programs with a standard BASIC header starting at $0800 vice $0801. The idea of the BASIC header is that your program is easily loaded and then started using the &amp;quot;RUN&amp;quot; command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LOAD&amp;quot;MYPROG&amp;quot;,8 REM NOTE ABSENCE OF &amp;quot;,1&amp;quot;&#xA;RUN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If you move the header one-byte down to $0800, then BASIC no longer parses it correctly. Your line number will be messed up, and RUN'ing your program will likely return &amp;quot;?SYNTAX ERROR&amp;quot;. It is true that your actual ML code is unaffected and you could still start it with the appropriate &amp;quot;SYS&amp;quot; command manually entered. But the desire is for it to work by just using the standard LOAD &amp;amp; RUN. Screen shot below shows this for a quick &amp;amp; dirty test program I created to load at $0800. The list of the program &lt;em&gt;should read as&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;2020 SYS 4864&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Looking at the disassembly of Commodore BASIC v2, this assumption of the actual first line being at $0801 is probably related to the fact that the RUN command is a special case of the GOTO command. Because of this, I think the first byte is skipped just to simplify the coding of the interpreter.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zN02T.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zN02T.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2020-12-27T01:56:07.557" LastActivityDate="2020-12-27T01:56:07.557" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17478" PostTypeId="1" CreationDate="2020-12-27T10:26:43.393" Score="4" ViewCount="583" Body="&lt;p&gt;Note: I hope this question is on topic. I'm not sure where else to put it.&lt;/p&gt;&#xA;&lt;p&gt;There are several tutorials available online for writing emulators/simulators. Unfortunately they all seem to focus on microprocessors, often with the intention of playing video games. The problem is that these guides are not too useful if you are interested in emulating/simulating computers from before the '70s.&lt;/p&gt;&#xA;&lt;p&gt;In particular, there is never any discussion about punched cards (reading and writing), paper or magnetic tape, or line printers. (I'm not at all criticizing the tutorials for this; the omission is entirely sensible.) The core functionality of early computers can be emulated/simulated without too much effort, but any large, interesting program is going to have some sort of interface. The manuals for the devices can't tell you how best to reconcile the differences between modern and old IO conventions. Should card decks be stored as binary files with the bit patterns corresponding to actual punched-card encoding? Or should they simply be text files whose characters get converted just before being processed? What if the machine supports an extended character set?&lt;/p&gt;&#xA;&lt;p&gt;Examples of computers that aren't too complicated in essence but have troubling IO conventions are the &lt;a href=&quot;https://www.frobenius.com/io.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 7090&lt;/a&gt; and the &lt;a href=&quot;http://ed-thelen.org/comp-hist/lgp-30-man.html#R5.00&quot; rel=&quot;nofollow noreferrer&quot;&gt;LGP-30&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Are there any good resources for dealing with early computer IO?&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2020-12-31T10:28:08.353" Title="Are there any good resources on emulating/simulating early computing input/output?" Tags="&lt;emulation&gt;&lt;early-computer&gt;&lt;io&gt;" AnswerCount="5" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17479" PostTypeId="2" ParentId="17478" CreationDate="2020-12-27T10:45:24.587" Score="5" Body="&lt;p&gt;Not too sure about resources, actually. But, I can walk you through the logic I used when I wrote an (unpublished) emulator for BESK, a machine that had paper tape for input, either in &amp;quot;5-bit teletype code&amp;quot; mode or &amp;quot;4-bit binary number&amp;quot; (using one channel as a &amp;quot;there's data&amp;quot; indicator) and for output had a printer (well, an electric typewriter) or a paper tape punch. It also had a built-in &amp;quot;plot screen&amp;quot; that I guess technically counts s an output device.&lt;/p&gt;&#xA;&lt;p&gt;What I did for that was to &amp;quot;encode&amp;quot; the input as the 5-bit teletype/baudot code, left-shifted 3 bits (or &amp;quot;multiplied by 8), to mostly make it easily readable. It did mean I ended up with some non-displayable characters (an &amp;quot;all-bits set&amp;quot; ends up as DEL, and a &amp;quot;no bits set&amp;quot; ends up as a NUL) and it is probably possible to find other encodings that are less messy while still making things easily readable.&lt;/p&gt;&#xA;&lt;p&gt;The other option I was entertaining was simply to use the lower 5 bits to encode the data, but in the end I went for the slightly more complicated scheme. However, I really canät tell you why, at this point, this was well over a decade ago.&lt;/p&gt;&#xA;" OwnerUserId="3842" LastActivityDate="2020-12-27T10:45:24.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17480" PostTypeId="1" CreationDate="2020-12-27T10:48:52.393" Score="3" ViewCount="137" Body="&lt;p&gt;In the mid-1990s, I purchased a Swedish boxed copy of v1.0 (I believe) of Klik &amp;amp; Play in a computer store. Since that, the floppies have died and I stupidly even threw away the entire big box and manual, which I now bitterly regret.&lt;/p&gt;&#xA;&lt;p&gt;It's trivial to find a &amp;quot;Klik &amp;amp; Play For Schools&amp;quot; online to download, in English. But that's not the version I had. I don't care if the only difference was a slight change of the splash screen -- it wasn't the one I had!&lt;/p&gt;&#xA;&lt;p&gt;I'm also aware that there is a &amp;quot;1.1&amp;quot; version of it, but again, it's in English. My version was in Swedish, because it was sold in Sweden in an era where they still cared about translating software (or anything).&lt;/p&gt;&#xA;&lt;p&gt;I'm thus looking for a Swedish-language, v1.0 Klik &amp;amp; Play (or KNP as it's frequently abbreviated). This is hopeless to find, apparently, since I've spent many years regularly searching but only finding the &amp;quot;For Schools&amp;quot; crap in English, or even the non-&amp;quot;For Schools&amp;quot; one in English.&lt;/p&gt;&#xA;&lt;p&gt;Even if this is probably technically piracy, they have not sold that program for eons, and I did buy a copy long ago, so I have the moral right to re-experience it digitally as far as I'm concerned.&lt;/p&gt;&#xA;&lt;p&gt;PS1: If there is &amp;quot;only&amp;quot; a Swedish v1.1, that will do as well. It's still much better than &amp;quot;For Schools&amp;quot; and/or English language! And frankly, I'm not 100% sure that my copy was 1.0. It &lt;em&gt;could&lt;/em&gt; have been the v1.1 that I had.&lt;/p&gt;&#xA;&lt;p&gt;PS2: I'm unsure what exactly was different about the &amp;quot;For Schools&amp;quot; edition. AFAIK, it was the exact same program, no differences, just with a &amp;quot;freeware&amp;quot; license.&lt;/p&gt;&#xA;&lt;p&gt;PS3: I'm &lt;strong&gt;not&lt;/strong&gt; asking for the serial number that the installer asks you for to install the program.&lt;/p&gt;&#xA;" OwnerUserId="20350" LastEditorUserId="15334" LastEditDate="2020-12-27T11:07:43.287" LastActivityDate="2020-12-27T11:07:43.287" Title="Is there any way to obtain the abandonware 1994 original release of Klik &amp; Play in non-English, non-&quot;For Schools&quot; versions?" Tags="&lt;ibm-pc&gt;&lt;software&gt;&lt;windows-3.x&gt;" AnswerCount="0" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="17481" PostTypeId="2" ParentId="17478" CreationDate="2020-12-27T11:33:00.493" Score="11" Body="&lt;p&gt;You can have a look at how &lt;a href=&quot;http://simh.trailing-edge.com/&quot; rel=&quot;noreferrer&quot;&gt;simh&lt;/a&gt;, which emulates quite a few computer systems that had punch cards, paper tape, magnetic tape, harddisks, floppy disks, printer and terminals, handle it.&lt;/p&gt;&#xA;&lt;p&gt;Basically most kind of storage mediums (including paper tape) are mapped to a file. The printer is also mapped to file. Terminals are mapped to some kind of interface you can connect a terminal emulator like &lt;code&gt;xterm&lt;/code&gt; to, for example via a telnet server.&lt;/p&gt;&#xA;&lt;p&gt;Conventions as to how to map words that are not multiples of 8 bits, different endian, and different character sets, are mostly ad-hoc.&lt;/p&gt;&#xA;&lt;p&gt;For a pure storage medium, it doesn't really matter (though you need conversion programs to create copies from real media). For different charsets, external programs like &lt;code&gt;iconv&lt;/code&gt; are useful.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2020-12-27T11:33:00.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17482" PostTypeId="2" ParentId="259" CreationDate="2020-12-27T22:25:12.303" Score="2" Body="&lt;p&gt;Just a small addition from the technical department:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;trackdisk.device&lt;/em&gt; (TDD) polls the disk status in regular intervalls. In order to detect a quick disk change in between two polls, the drive latches a &lt;em&gt;DC&lt;/em&gt; status until the head is moved. So, TDD needs to move the head to update the status.&lt;/p&gt;&#xA;&lt;p&gt;Moving the head outwards usually stops once track 0 is reached by gating the step pulse within the drive. However, &lt;em&gt;some&lt;/em&gt; drives don't gate the outward step - so the head would hit the physical end stop endlessly, possibly disaligning the heads (remember the 1541?). Since C= sourced different types and there's no way for TDD to tell whether the head actually does try to step outwards from track 0, TDD steps outward until the end sensor triggers and then alternates between tracks 0 and 1. So, the clicking on an empty drive never stops. If you listen &lt;em&gt;very&lt;/em&gt; closely (or open the drive) you can tell the two directions apart.&lt;/p&gt;&#xA;&lt;p&gt;As already mentioned, the v33 trackdisk.device introduced the &lt;code&gt;TDPB_NOCLICK&lt;/code&gt; flag that simply tells TDD to keep stepping outward, stopping the clicking - unless one of the non-gating drives is used. Then, a muffled click is heard and &lt;code&gt;TDPB_NOCLICK&lt;/code&gt; should not be set for that drive.&lt;/p&gt;&#xA;" OwnerUserId="5200" LastActivityDate="2020-12-27T22:25:12.303" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17483" PostTypeId="1" AcceptedAnswerId="17485" CreationDate="2020-12-28T10:56:07.743" Score="0" ViewCount="407" Body="&lt;p&gt;Take the NES, the Super NES and say, the PlayStation, they all have something in common : games on PAL regions were about 16.7% slower than their NTSC counterpart.&lt;/p&gt;&#xA;&lt;p&gt;Now if on you play an arcade game, let's say Pang 3, the ROM for Europe region runs at the exact same speed than the ROM for Japan region.&lt;/p&gt;&#xA;&lt;p&gt;So why did arcade cabinets designated to run in 50Hz regions didn't exhibit the same slower speed as it was the case for consoles running also in 50Hz regions ?&lt;/p&gt;&#xA;" OwnerUserId="3282" LastActivityDate="2020-12-28T22:04:21.630" Title="Why the 50/60Hz speed rule didn't apply for arcades but did for consoles?" Tags="&lt;arcade&gt;&lt;game-consoles&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="17484" PostTypeId="1" CreationDate="2020-12-28T12:40:06.140" Score="1" ViewCount="250" Body="&lt;p&gt;Perhaps 15 years ago, I saw a photo which looked professional showing multiple media types all with labels for either Netscape v4 or the integrated Mozilla suite (which became SeaMonkey). At the very least this included 3.5, 5 and 8&amp;quot; floppies, but I suspect there were other types as well.&lt;/p&gt;&#xA;&lt;p&gt;Does this ring a bell with anybody, is the photo still available, and can anybody comment on the story (e.g. was it taken to mark the retirement of certain target architectures)?&lt;/p&gt;&#xA;&lt;p&gt;I was reminded of that by &lt;a href=&quot;https://politics.stackexchange.com/questions/61178/why-does-the-eu-uk-trade-deal-have-the-7-bit-ascii-table-as-an-appendix&quot;&gt;https://politics.stackexchange.com/questions/61178/why-does-the-eu-uk-trade-deal-have-the-7-bit-ascii-table-as-an-appendix&lt;/a&gt; which highlights that Netscape 4 is apparently mentioned in the &amp;quot;Brexit&amp;quot; withdrawal documents.&lt;/p&gt;&#xA;" OwnerUserId="18835" LastActivityDate="2020-12-28T12:40:06.140" Title="Ancient browser media photo" Tags="&lt;operating-system&gt;&lt;architecture&gt;&lt;netscape&gt;&lt;mozilla&gt;&lt;media&gt;" AnswerCount="0" CommentCount="12" ClosedDate="2020-12-30T01:00:17.367" ContentLicense="CC BY-SA 4.0" />
  <row Id="17485" PostTypeId="2" ParentId="17483" CreationDate="2020-12-28T13:27:17.353" Score="13" Body="&lt;p&gt;Arcade cabinets are closed systems that you simply plug into the wall; the only thing that needs to change between regions is the PSU. The internal hardware will run at the same frequencies and therefore output graphics at the same rates and sizes regardless of the region.&lt;/p&gt;&#xA;&lt;p&gt;Conversely, consoles and home computers of the era mostly expect the user to supply their own display, which may be a television. Therefore they’re adapted for each country’s television standards.&lt;/p&gt;&#xA;&lt;p&gt;Market realities of the era plus the way that relevant hardware usually varies between 50Hz and 60Hz regions tends to lead to letterboxing and slower games; it’s not unavoidable but is common. Arcade games don’t have that hardware variation.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2020-12-28T13:27:17.353" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17486" PostTypeId="2" ParentId="17478" CreationDate="2020-12-28T17:37:43.890" Score="5" Body="&lt;p&gt;Peter Onion's &lt;a href=&quot;http://www.peteronion.org.uk/Elliott/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Elliott 803&lt;/a&gt; emulator tries to replicate the experience of using an &lt;a href=&quot;https://en.wikipedia.org/wiki/Elliott_803&quot; rel=&quot;nofollow noreferrer&quot;&gt;803&lt;/a&gt; in a 3D, almost VR, setting. Virtual paper tapes are used to load programs and data.&lt;/p&gt;&#xA;&lt;p&gt;Doug W. Jones's &lt;a href=&quot;http://homepage.divms.uiowa.edu/%7Ejones/cards/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Punched Cards&lt;/a&gt; pages have more on how punched cards were used than almost anywhere else. The simh emulator uses Doug's punched card library for managing card inputs for multiple machines.&lt;/p&gt;&#xA;&lt;p&gt;There are a lot of aspects of old media that you can't or might not want to emulate: the faint aroma of light machine oil and slightly warm motors around teletypes, card readers and paper punches; the heft of a box of punched cards or even the “wieldiness” of a single 9-track spool; the constant air-conditioning whine in the computer room almost drowning out the fan noise from a tape loader vacuum or the spin-up of a big disk pack; the surprising sharpness of card or paper tape chad bin (leading to the urban myth of the punch girl's wedding party ending up in the eye hospital when someone threw chad instead of confetti); the staccato start-stop of the big tape drives on a data processing run; the machine-gunning of a big line printer; the incredible patience required to deal with real (and slow) old media … Later media really only provided small sounds, usually warnings: the distinctive seek-read-fail-retry clunking from a floppy drive that came before a &lt;code&gt;Bdos Err On A&lt;/code&gt;, or the much later Iomega &lt;a href=&quot;http://www.geocities.ws/iomegano/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Click of Death&lt;/a&gt; …&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2020-12-28T18:43:27.117" LastActivityDate="2020-12-28T18:43:27.117" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17488" PostTypeId="2" ParentId="17478" CreationDate="2020-12-28T19:06:48.167" Score="2" Body="&lt;p&gt;Speaking of punched cards, there are several conventions used to encode arbitrary combinations of punches, usually akin to Base64, so that 80 columns are encoded into 160 printable ASCII characters.&#xA;Thus, if a line is no more than 80 characters long, it represents a text card, converted into the appropriate encoding, otherwise if it is exactly 160 characters long and consists of the Base64 ASCII subset, it represents a binary image, each two characters encoding a column, the first — rows 9-4, the second — rows 3-12.&lt;/p&gt;&#xA;&lt;p&gt;For my simulator, I use Unicode Braille which is less compact but it provides a passable visual representation of the cards; for example, below is a punched form of an object module.&#xA;The quality depends on the font, though: in my Linux terminal window the columns are properly aligned, not so much in the browser.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/G8hq7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G8hq7.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;⠀⠆⢠⠀⠀⢠⠀⡤⠤⡀⠀⠀⡠⠤⢄⠀⢀⠤⢄⠀⢠⠤⠤⢄⠀⠤⢤⠤⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠌⠄&#xA;⡀⡃⠀⢣⢠⠃⠀⡇⠀⠈⡆⠀⠑⠒⢢⠀⡇⢀⡀⡇⢸⠤⢤⠜⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣺⡃&#xA;⠂⠀⠀⠀⠃⠀⠀⠓⠒⠊⠀⠈⠒⠒⠊⠀⠈⠒⠊⠂⠘⠀⠀⠑⠀⠀⠘⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣥⡄&#xA;&#xA;⠈⡀⠌⠄⠀⠀⠀⠀⠁⠀⠃⠀⠀⠀⠀⠀⠀⠃⠀⠁⠀⠘⠀⠘⠀⠀⠀⠀⠀⢁⢉⢪⠀⠠⣾⠡⢽⠂⠌⠄&#xA;⡀⡅⣺⡃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠂⠂⠀⠐⢠⢐⢡⠀⣺⡃&#xA;⠂⠁⣥⡄⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⢈⢨⣰⢨⡀⣥⡄&#xA;&#xA;⠐⡀⠬⡀⣖⡃⢠⡢⢽⠁⠀⠜⡟⠬⡗⢀⢰⣷⡢⠁⡅⠋⣆⣞⢨⠀⢀⠀⡅⠀⠀⠀⠀⢀⠀⢀⠀⠀⠌⠄&#xA;⡀⡆⡊⠀⠙⠀⢘⢐⢡⢈⠀⡊⡄⡊⡄⠀⠈⠋⢎⠁⠀⠀⠱⠙⠀⠀⠀⠐⠀⡄⡁⠀⠀⠀⠀⠠⠀⠀⣺⡃&#xA;⠂⡃⡂⡂⠀⠀⠀⢰⢨⡀⠀⡆⣅⡆⣅⢐⠀⠀⠀⠀⠀⡂⠀⠀⢸⢀⢸⠀⠀⡅⠀⡅⠀⠀⠀⢀⠀⠀⣥⡄&#xA;&#xA;⠘⡊⠌⠄⠠⠀⠀⠅⠀⠆⠀⣺⠄⡢⠄⢐⠥⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠌⠄&#xA;⡀⡃⣺⡃⠀⡄⠀⢠⠀⢠⠀⠐⡂⢸⡂⠀⢗⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣺⡃&#xA;⠂⡆⣥⡄⢀⡄⠀⣠⠀⣠⠀⣙⠂⣡⠂⢈⡓⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣥⡄&#xA;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2020-12-28T19:06:48.167" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17489" PostTypeId="2" ParentId="17200" CreationDate="2020-12-28T19:42:30.600" Score="2" Body="&lt;p&gt;Sure; e.g. the Naval Research Laboratory published a document (NRL-7948) in 1976 entitled: &amp;quot;Automatic Translation of English Text to Phonetics by Means of Letter-to-Sound Rules&amp;quot;&#xA;&lt;a href=&quot;https://apps.dtic.mil/dtic/tr/fulltext/u2/a021929.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;(a copy here)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This was within the capability of 8-bit machines.  (I myself have implemented the algorithm a few times on microcontrollers - in this case, the rules took just over 8,000 bytes.  You'll need a little more for the code that runs them.)&lt;/p&gt;&#xA;&lt;p&gt;This performs the text-to-speech operation, converting English text to a phoneme sequence that would then be fed into the synthesis device.  This part was usually hardware.&lt;/p&gt;&#xA;&lt;p&gt;Edit: If you're curious about the results using this ruleset, &lt;a href=&quot;https://cdn.hackaday.io/files/1714177333904928/testcase_001.wav&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; is sample output from text-to-speech'ing the lyrics to The Doors 'Hello'.  There are a few mispronunciations that are amusing; e.g. 'sky' is pronounced as we would 'ski'.&lt;/p&gt;&#xA;" OwnerUserId="4400" LastEditorUserId="4400" LastEditDate="2020-12-29T00:18:01.780" LastActivityDate="2020-12-29T00:18:01.780" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17490" PostTypeId="2" ParentId="17163" CreationDate="2020-12-28T21:38:54.480" Score="0" Body="&lt;p&gt;In 1985 I bought a Computer memories CM5619 (19 Mb un-formatted) for a bargain price of $1900.  At the time thinking only $100/Meg, what a deal.[&lt;img src=&quot;https://i.stack.imgur.com/KkSyS.jpg&quot; alt=&quot;D][1]&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="20364" LastActivityDate="2020-12-28T21:38:54.480" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17491" PostTypeId="2" ParentId="17483" CreationDate="2020-12-28T21:57:43.680" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Take the NES, the Super NES and say, the PlayStation, they all have something in common : games on PAL regions were about 16.7% slower than their NTSC counterpart.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure? Any proof for that? They did display maybe 16% less pictures per second, but so does every US TV show aired in Europe. To me no of the actors seam like pumped with tranquillizers.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Now if on you play an arcade game, let's say Pang 3, the ROM for Europe region runs at the exact same speed than the ROM for Japan region.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, it isn't a ROM, but a game board that does the display. And most important here, they use the same board in Europe than in the US or Japan. The software (ROM - but more often than not EPROM) differs only for on screen language - if at all, as some games can be switched between languages.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So why did arcade cabinets designated to run in 50Hz regions didn't exhibit the same slower speed as it was the case for consoles running also in 50Hz regions ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As these, unlike game consoles, do not differ between regions - at least not in game related parts. What differs are transformators and PSUs as they need to cope with the different frequencies and, more important, different voltages. Another part that usually differs are the coin slots/money detectors, as different countries happen to have different coins.&lt;/p&gt;&#xA;&lt;p&gt;Arcade cabinets are closed system, not intended to be interoperable with other devices, like local TV. Consoles in contrast have to do exactly that, work with a local TV at default setting.&lt;/p&gt;&#xA;&lt;p&gt;A comparable situation with computer would be the Commodore PET. An all in one solution, much like a game cabinet. Id did not have to bother with 50 half frame per second TV. Again, it was the power supply that had to be changed to work with the various voltages available in Europe at the time.&lt;/p&gt;&#xA;&lt;p&gt;The equivalent in game consoles would be the Vectrex. Here again it was an all in one unit containing the CRT as well. So when MB sold it in Germany, all they did was replace the 115V transformer with a 220V unit. Nothing else ... well, ofc, warranty sticker and packaging had to be changed as well :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-28T22:04:21.630" LastActivityDate="2020-12-28T22:04:21.630" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17492" PostTypeId="2" ParentId="17437" CreationDate="2020-12-28T22:29:51.860" Score="7" Body="&lt;p&gt;You might consider DOSBox (free).  It is more oriented towards emulating retro hardware, and has some speed control options.  It tries to 'figure out' what the speed control should be, but there is a manual setting you can also use if that fails.&lt;/p&gt;&#xA;&lt;p&gt;Additionally, it does have a scaling feature (which I personally prefer over going full-screen anyway -- going full screen does some DirectX stuff and moves my existing open windows all around).&lt;/p&gt;&#xA;" OwnerUserId="4400" LastEditorUserId="4400" LastEditDate="2020-12-29T17:26:16.360" LastActivityDate="2020-12-29T17:26:16.360" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17493" PostTypeId="2" ParentId="17200" CreationDate="2020-12-29T05:31:35.067" Score="1" Body="&lt;p&gt;The original 1984 Macintosh (which ran on a Motorola 68000)  had Macintalk. It ran reasonably well. It voiced one of the characters in the movie WALL-E.  It shows up in a large number of pop culture places. Check out the &lt;em&gt;In Popular Culture&lt;/em&gt; section of &lt;a href=&quot;https://en.m.wikipedia.org/wiki/PlainTalk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.m.wikipedia.org/wiki/PlainTalk&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I bet if I pulled my 1984 Mac out of the closet and found the right diskette, I could convince it to talk. It was a pretty amazing party trick back in the day&lt;/p&gt;&#xA;" OwnerUserId="9166" LastActivityDate="2020-12-29T05:31:35.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17494" PostTypeId="2" ParentId="17163" CreationDate="2020-12-29T06:47:03.493" Score="0" Body="&lt;p&gt;The first mention I can find for a Macintosh hard drive is in the November 1984 Macworld (magazine).  The cover story was &amp;quot;Thd Fat Mac Arrives - 512k&amp;quot;.  It's an ad from &lt;em&gt;Corvus&lt;/em&gt; (in San Jose). From the ad:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;A hard disk drive available in 5, 11, 16 and 45 megabyte capacities. The software necessary for communicating with the Macintosh is built into the drive. A mount manager utility allows you to organize storage space into smaller volumes; this system permits more files to be stored on disk because Finder does not have to keep track of files for the entire disk at once. You can place the Mac on top of the or up to 15 feet away with the included cable. List price: 5M $1795, 11M $2495, 16M $3195, 45M $4995.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A few things worth noting. The Mac file system at the time was flat (no folders) and the directory structure was read into memory. There were two models, the 128k model and the newly introduced 512k model. You could overwhelm a 128k Mac by having a floppy with a lot of small files. The partitioning mechanism described above was a work-around. Basically, your big hard disk looked like a library of floppy disks.&lt;/p&gt;&#xA;&lt;p&gt;The other thing was that the only available ports on 1984 Macs were two &lt;em&gt;&amp;quot;high speed&amp;quot;&lt;/em&gt; RS-422 serial ports and a proprietary floppy port (for a second floppy drive). My guess is that this plugged into one of the serial ports. It would not have been fast.&lt;/p&gt;&#xA;&lt;p&gt;The thing was a box. It looks bigger than the base of the Mac and about 4 to 5 inches (10-13 cm) tall (from looking at the ad).&lt;/p&gt;&#xA;&lt;p&gt;Hard drives didn't become prevalent for Macs until Apple introduced a SCSI port and an hierarchical file system with the Macintosh Plus in January 1986. Owners of the 128k or 512k models could then send their computers into third-party hardware hacking companies who would knit an outrigger board onto the original motherboard that contained a (huge) one megabyte of memory and a SCSI port (that would sneak out the back of the box on a ribbon cable).&lt;/p&gt;&#xA;" OwnerUserId="9166" LastActivityDate="2020-12-29T06:47:03.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17495" PostTypeId="2" ParentId="17200" CreationDate="2020-12-29T15:02:13.823" Score="3" Body="&lt;h2&gt;War Games... was not actually computer generated&lt;/h2&gt;&#xA;&lt;p&gt;You mention the War Games voice.  It was not an artificial voice, but an actor.  He said the sentences with words in reversed order, which were edited later.  Ref:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.imdb.com/title/tt0086567/trivia#tr5373943&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.imdb.com/title/tt0086567/trivia#tr5373943&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;8bit guy video mentioned by @RCDAWebmaster &lt;a href=&quot;https://www.youtube.com/watch?t=39&amp;amp;v=XsMRxNSDccc&quot; rel=&quot;nofollow noreferrer&quot;&gt;link to relevant instant&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;What you've been asking for: &amp;quot;...saved from oblivion and are still available&amp;quot;&lt;/h2&gt;&#xA;&lt;p&gt;Yes! Thanks to the 8bit guy for the information. You can:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;visit &lt;a href=&quot;https://www.simulationcorner.net/index.php?page=sam&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.simulationcorner.net/index.php?page=sam&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;get source code &lt;a href=&quot;https://github.com/s-macke/SAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/s-macke/SAM&lt;/a&gt; or &lt;a href=&quot;https://github.com/vidarh/SAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/vidarh/SAM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This does compile and work on a modern machine.&lt;/p&gt;&#xA;&lt;h2&gt;Software-only solutions, of the era&lt;/h2&gt;&#xA;&lt;p&gt;It looks like there is a full software-based solution (I have not tested it): &lt;a href=&quot;https://cpcrulez.fr/applications_music-superior_software-speech__MANUEL__ENGLISH.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://cpcrulez.fr/applications_music-superior_software-speech__MANUEL__ENGLISH.htm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Common solution at the time: 8-bit speaking machines often used dedicated optional chips&lt;/h2&gt;&#xA;&lt;p&gt;As mentioned in one comment, during the 8bit era, common solutions used dedicated chips.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/General_Instrument_SP0256&quot; rel=&quot;nofollow noreferrer&quot;&gt;General Instrument SP0256&lt;/a&gt; demoed on the same page and e.g. on &lt;a href=&quot;https://www.youtube.com/watch?v=fesVxipNaw8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Roland in Space with SSA-1 Speech Synthesiser&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=v8WKbKK3Apg&quot; rel=&quot;nofollow noreferrer&quot;&gt;GLEN HODDLE SOCCER with SSA-1 Speech Synthesiser&lt;/a&gt;. Each chip was more or less specialized, the most common one did generic English voice.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.cpcwiki.eu/index.php/MEA8000&quot; rel=&quot;nofollow noreferrer&quot;&gt;MEA8000&lt;/a&gt; was more flexible, allowing several languages.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Example: the SSA-1 for the Amstrad CPC&lt;/h2&gt;&#xA;&lt;p&gt;Typically, it was a multi-tier solution.&lt;/p&gt;&#xA;&lt;p&gt;Below is outlined the example of SSA-1 the Amstrad CPC:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the early (high-level) part of the text-to-speech was done on the host computer CPU, and transformed regular (English) text into a series of allophones (typically, 64 different) -- this could be bypassed using an API that provides a way to directly request a series of allophones.  On the Amstrad CPC, both options were available: user was offered to load specific software, made additional commands &amp;quot;RSX&amp;quot;  available from Basic, (and therefore from assembly code, too, although assembly production would typically directly target the next step because they don't need to parse generic English sentence, only pronounced pre-defined utterances).&lt;/li&gt;&#xA;&lt;li&gt;allophones codes were transmitted to the chip, one byte per allophone, via regular I/O interchip communication&lt;/li&gt;&#xA;&lt;li&gt;on the chip, a real-time microcontroller turned allophone codes into low-level vocal tract simulation parameters, and tuned in real time the hardware registers to command the next step&lt;/li&gt;&#xA;&lt;li&gt;dedicated hardware performed the digital computation of the vocal tract model, and output a PCM signal&lt;/li&gt;&#xA;&lt;li&gt;a digital-to-analog step provided analog output signal at line level&lt;/li&gt;&#xA;&lt;li&gt;an amplifier brings signal to speaker level.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All those steps (including the speakers) are integrated in the SSA-1 solution for the Amstrad CPC.  In the very first step, the solution is software running on the host computer, the rest is extra hardware.&lt;/p&gt;&#xA;&lt;p&gt;More details on the SSA-1: &lt;a href=&quot;http://www.cpcwiki.eu/index.php/Amstrad_SSA-1_Speech_Synthesizer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amstrad SSA-1 Speech Synthesizer - CPCWiki&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="574" LastEditorUserId="574" LastEditDate="2020-12-29T15:42:14.127" LastActivityDate="2020-12-29T15:42:14.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17496" PostTypeId="2" ParentId="17163" CreationDate="2020-12-29T18:38:04.970" Score="2" Body="&lt;p&gt;I just found a great web page: &lt;a href=&quot;https://jcmit.net/diskprice.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Disk Drive Prices 1955+&lt;/a&gt;, which has one simple chart showing yearly, and in later years monthly, prices of drives. The page was made by John C. McCallum - more details about it on &lt;a href=&quot;https://jcmit.net/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;his home page&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Most of the earlier examples are either IBM/DEC drives (not so easily attached to microcomputers) or floppy drives. One that is relevant:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1983 - 5 Meg. HDD - $ 1,595.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Fascinating table, even if it doesn't 100% answer the question.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2020-12-29T18:38:04.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17497" PostTypeId="1" AcceptedAnswerId="17501" CreationDate="2020-12-29T19:46:13.550" Score="9" ViewCount="1010" Body="&lt;p&gt;I'm writing a very basic OS for my homebrew Z80 computer. As an absolute assembly language beginner, I managed to obtain a working &amp;quot;os plus memory monitor&amp;quot; that can show memory content and load bytes to RAM. In doing so, I wrote some &amp;quot;system routines&amp;quot; to interface some I/O devices. For example, I have a &amp;quot;Printc&amp;quot; routine that reads a byte and draws the corresponding ASCII character on the screen.&lt;/p&gt;&#xA;&lt;p&gt;This is working with the code built by the assembler because the assembler decides where to put the routine's first byte and uses that address when encounters a jp command with the same label.&lt;/p&gt;&#xA;&lt;p&gt;Now, I'd like to call the Printc routine from a dynamically loaded program. I'm able to tell where the assembler placed the routine's first byte in the ROM thanks to the &lt;code&gt;-l&lt;/code&gt; flag, that produces output containing:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;...&#xA;Print:    equ $043a&#xA;Printc:    equ $043e&#xA;Readc:    equ $0442&#xA;Readline:    equ $0446&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I can now write a program like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ld a, 0x50     ; ASCII code for P&#xA;call 0x043e    ; Calls Printc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This program prints the letter P successfully: I called my Printc routine using its memory address.&lt;/p&gt;&#xA;&lt;p&gt;This is fine as long as I don't change any assembly code preceding the Printc declaration in my &amp;quot;os&amp;quot;. If I do, the Printc label will be assigned to another address and my existing program will stop working.&lt;/p&gt;&#xA;&lt;p&gt;What is the canonical solution for this type of problem? The only one that comes to my mind is to create a &amp;quot;jump table&amp;quot; at the beginning of my assembly code, before any import, with the list of system calls, hoping that they will obtain every time the same address. Something like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;...&#xA;; System routines&#xA;Sys_Print:&#xA;call Print&#xA;ret&#xA;Sys_Printc:&#xA;call Printc&#xA;ret&#xA;.... and so on&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But this seems pretty hackish... Is it possible to instruct the &lt;a href=&quot;https://linux.die.net/man/1/z80asm&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;z80asm&lt;/code&gt;&lt;/a&gt; assembler to place the routine's first instruction at a memory address decided by me?&lt;/p&gt;&#xA;" OwnerUserId="14711" LastEditorUserId="535" LastEditDate="2020-12-30T15:34:38.387" LastActivityDate="2020-12-30T19:21:53.920" Title="Make the &quot;z80asm&quot; assembler place an instruction at a known memory address" Tags="&lt;assembly&gt;&lt;z80&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17498" PostTypeId="2" ParentId="17497" CreationDate="2020-12-29T20:16:33.270" Score="5" Body="&lt;p&gt;The &lt;code&gt;org&lt;/code&gt; directive should do specifically what you ask.  However, z80asm is a little simplistic in its output format.  Instead you can use &lt;code&gt;ds&lt;/code&gt; to place routines at particular addresses:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        ds     0x1000&#xA;printc:&#xA;        ...&#xA;        ret&#xA;&#xA;        ds     0x1100-$&#xA;readc:&#xA;        ...&#xA;        ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will always put &lt;code&gt;printc&lt;/code&gt; at 0x1000 and &lt;code&gt;readc&lt;/code&gt; at 0x1100.  There are many disadvantages.  Should &lt;code&gt;printc&lt;/code&gt; grow larger than 0x100 the program won't assemble and you'll need to break &lt;code&gt;printc&lt;/code&gt; apart in some fashion and put the extra code somewhere else.  For that and other reasons a jump table at a fixed location in memory is easier to manage and more flexible:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;           ds    0x100&#xA;v_printc:  jp    printc&#xA;v_readc:   jp    readc&#xA;           ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Another technique is to use a single entry point and choose the function using a value in &lt;code&gt;A&lt;/code&gt; register.   This will at least be a bit slower but does mean that only a single entry point needs to be maintained as the operating system changes.&lt;/p&gt;&#xA;&lt;p&gt;And instead of doing a &lt;code&gt;CALL&lt;/code&gt; to the entry point place it at one of the special &lt;code&gt;RST&lt;/code&gt; locations (0, 8, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38) where you can use &lt;code&gt;RST 0x18&lt;/code&gt; as a single byte call to memory location 0x18.  Usually &lt;code&gt;RST 0&lt;/code&gt; and &lt;code&gt;RST 0x38&lt;/code&gt; are avoided since one they are the pwoer-on entry point and interrupt model 1 handler locations respectively.&lt;/p&gt;&#xA;" OwnerUserId="301" LastEditorUserId="301" LastEditDate="2020-12-30T03:56:53.913" LastActivityDate="2020-12-30T03:56:53.913" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17499" PostTypeId="2" ParentId="3019" CreationDate="2020-12-29T20:59:43.773" Score="-3" Body="&lt;p&gt;This also may have a history with multi-byte vs. unicode character.  Multi-byte was a stop-gap support for unicode a while back when uuencode was invented.  Supporting multi-byte is not really needed unless you have some really old backups.&lt;/p&gt;&#xA;" OwnerUserId="20370" LastActivityDate="2020-12-29T20:59:43.773" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17501" PostTypeId="2" ParentId="17497" CreationDate="2020-12-29T21:31:11.620" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What is the canonical solution for this type of problem?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There isn't any canonical solution, but many variants, all to be found usable.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The only one that comes to my mind is to create a &amp;quot;jump table&amp;quot; at the beginning&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which is a perfect good one. Except, usually one would use jumps instead of calls to reduce code length, speed up execution, and reduce stack load.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;JUMP_TABLE:&#xA;PRINT    JP  _I_PRINT    ; First Function&#xA;READC    JP  _I_READC    ; Second Function&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But this seems pretty hackish...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, many 8080 and Z80 systems work like that.&lt;/p&gt;&#xA;&lt;p&gt;The main step ahead is that all entry points are at a single defined location and sequence.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is it possible to instruct the z80asm assembler to place the routine's first instruction at a memory address decided by me?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure, use an ORG to put it at whatever address you want it (*1). But that would be hackish or at least not very forward looking. Having such a jump table at a defined address is a great start. Of course it eats up some space. Three bytes per entry, but only two being the address. Wouldn't it be better to just make an address table? Like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SYS_TABLE:&#xA;         DW    _I_PRINT    ; First Function&#xA;         DW    _I_READC    ; Second Function&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Calling a function would be like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;         LD    HL, (SYS_TABLE+0)   ; Load Address of First Function - PRINT&#xA;         JP    (HL)                ; Do it&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This can easy be combined with kind of a function selector:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SYS_ENTRY:&#xA;         PUSH  HL&#xA;         LD    H,0&#xA;         LD    L,A&#xA;         ADD   HL,HL&#xA;         ADD   HL,SYS_TABLE&#xA;         JP    (HL)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now even the jump table can be moved around in ROM (or RAM) as needed.&lt;/p&gt;&#xA;&lt;p&gt;Calling it would be by using a function number - like many OS have - simply put the function number in A and call the default system entry point (SYS_ENTRY).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;         LD    A,0   ; Print&#xA;         CALL  SYS_ENTRY&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Of course it gets more readable if the OS provides a set of equates for the function numbers :)&lt;/p&gt;&#xA;&lt;p&gt;So far the program loaded does still need to know either the table address (SYS_TABLE) or the entry point for the selector (SYS_ENTRY). The next level of abstraction would move their address into a defined location, like 0100h, best maybe in form of a JP, so any user program always calls that fixed address (0100h) no matter if your OS is in ROM or RAM or wherever.&lt;/p&gt;&#xA;&lt;p&gt;And yes, if this seems familiar, it is, as it's the same way CP/M handles system calls, or MS-DOS does.&lt;/p&gt;&#xA;&lt;p&gt;Speaking of MS-DOS, it provides an additional (and more common known way) to call an OS function, so called software-interrupts, like the well known INT 21h. And there's something quite similar the Z80 (and 8080 before) offers: A set of eight distinct ReSTart vectors (0/8/16/...). Restart 0 is reserved for reset, all others can be used. So why not using the second (RST 8h) for your OS? Function calls then would look like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;         LD    A,0   ; Print&#xA;         RST   8h&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now user program code is as much separated from OS structure and memory layout as possible - without the need of any relocator or whatsoever. The best part is, with a little fiddling, the whole selector fits into the 8 bytes available, making it optimal coding.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;A little suggestion:&lt;/p&gt;&#xA;&lt;p&gt;If you go for any of these models, make sure that the first function (0) of your OS will be a call providing information about the OS, so programs can check for compatibility. At least two basic values should be returned:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ABI release number&lt;/li&gt;&#xA;&lt;li&gt;Maximum supported function number.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Application_binary_interface&quot; rel=&quot;nofollow noreferrer&quot;&gt;ABI&lt;/a&gt; release number may or may not be the same as a version number, but does not have to. It must be increased with every API change. Together with the maximum supported function number this information can be used by a user program to quit graceful in case of incompatibility - instead of crashing midway. For luxury the function may as well return a pointer to a&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Structure containing further information about OS like&#xA;&lt;ul&gt;&#xA;&lt;li&gt;readable name/version&lt;/li&gt;&#xA;&lt;li&gt;Addresses of various sources&lt;/li&gt;&#xA;&lt;li&gt;'special' entry points&lt;/li&gt;&#xA;&lt;li&gt;Machine information like RAM size&lt;/li&gt;&#xA;&lt;li&gt;available interfaces, etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Just saying...&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - And no, other than some may assume, ORG should &lt;strong&gt;never ever&lt;/strong&gt; add padding or alike on its own. Assemblers doing so are a bad choice. Org should only change the address level, not define what is in any area 'jumped over'. Doing so adds may levels of potential errors - at least as soon as some advanced ORG usage is done - believe me, ORG is a very versatile tool when doing complex structures.&lt;/p&gt;&#xA;&lt;p&gt;In addition filling 'void' areas with some padding will result in this padding being part of the program instead of untouched memory, taking away a main tool for later patches: uninitialized EPROM space. By simply not defining and not loading these areas, they will stay in whatever the cleared state is (all ones in case of EPROM) and can be later programmed - for example to hold some code during debugging, or to apply a hot fix without the need of programming new devices.&lt;/p&gt;&#xA;&lt;p&gt;So undefined memory should be just that, undefined. And that's why even the earliest assembler output/loader formats (think &lt;a href=&quot;https://en.wikipedia.org/wiki/SREC_(file_format)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motorola SREC&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_HEX&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel HEX&lt;/a&gt;) used for program delivery to anything from ROM fabrication all the way to user programs supported a way to leave out areas.&lt;/p&gt;&#xA;&lt;p&gt;Long story short: If one want's to have it filled, it has to be done expcit. z80asm does it right.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-30T19:21:53.920" LastActivityDate="2020-12-30T19:21:53.920" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="17502" PostTypeId="2" ParentId="17497" CreationDate="2020-12-29T21:55:54.933" Score="12" Body="&lt;p&gt;The problem with Z80ASM specifically is that it takes the assembly input and spits out a static binary file. This is good and bad.&lt;/p&gt;&#xA;&lt;p&gt;In &amp;quot;normal&amp;quot; systems, address assignment is, inevitably, the responsibility of the linker, not the assembler. But assemblers are simple enough that many skip that aspect of the build cycle.&lt;/p&gt;&#xA;&lt;p&gt;Since Z80ASM spits out literal binary images, rather than &amp;quot;object&amp;quot; files, it does not need a linker. But it also won't let you necessarily do what you want to do.&lt;/p&gt;&#xA;&lt;p&gt;Consider the ubiquitous ORG directive.&lt;/p&gt;&#xA;&lt;p&gt;ORG tells the assembler what the starting (origin -- thus ORG) address is for the upcoming assembly code.&lt;/p&gt;&#xA;&lt;p&gt;This means if you do this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ORG 0x100&#xA;L1: jp L1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The assembler will assemble the JP instruction to JUMP to the address of 0x100 (L1).&lt;/p&gt;&#xA;&lt;p&gt;BUT, when it spits out he binary file, the file will be just 3 bytes. The jump instruction, followed by 0x100 in the binary format. There's nothing in this file that tells, well, anything, that it must be loaded at 0x100 to &amp;quot;work&amp;quot;. That information is missing.&lt;/p&gt;&#xA;&lt;p&gt;If you do:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ORG 0x100&#xA;L1: jp L2&#xA;&#xA;    ORG 0x200&#xA;L2: jp L1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is going to produce a file that is 6 bytes long. It's going put those two JP instructions right after each other. The only thing the ORG statement is doing is telling what the labels should be. This is not what you would expect.&lt;/p&gt;&#xA;&lt;p&gt;So, simply adding a ORG to your file will not do what you want to do, unless you have an alternate method to load the code at the specific place that you want your code to be.&lt;/p&gt;&#xA;&lt;p&gt;The only way to do that with Z80ASM out of the box is to pad your output file with blocks of bytes, empty space, that will fill the binary up to put your code at the right place.&lt;/p&gt;&#xA;&lt;p&gt;Normally, this is what the linker does for you. The linker's job is to take your disparate pieces of code, and create a resulting binary image. It does all this for you.&lt;/p&gt;&#xA;&lt;p&gt;On my assembler, which did not use a linker, it produced an Intel HEX file format which includes the actual address for each block of data.&lt;/p&gt;&#xA;&lt;p&gt;So, for the previous example, it would have created two records. One destined for 0x100, the other for 0x200, and then the hex loading program would put things in the right place. This is another alternative, but Z80ASM doesn't seem to support that either.&lt;/p&gt;&#xA;&lt;p&gt;So.&lt;/p&gt;&#xA;&lt;p&gt;Z80ASM is great if you're making ROM images starting at, say, arbitrarily, 0x1000. You would ORG that, get a resulting binary, and download the entire file burned in to an EPROM. It's perfect for that.&lt;/p&gt;&#xA;&lt;p&gt;But for what you want to do, you'll need to pad you code to move your routines to the right places, or come up with some other loader scheme to manifest this for you.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="4663" LastEditDate="2020-12-30T19:16:59.183" LastActivityDate="2020-12-30T19:16:59.183" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17504" PostTypeId="1" AcceptedAnswerId="17505" CreationDate="2020-12-30T09:35:08.333" Score="5" ViewCount="451" Body="&lt;p&gt;I've been reading up on bank switching &lt;a href=&quot;https://www.c64-wiki.com/wiki/Bank_Switching&quot; rel=&quot;noreferrer&quot;&gt;on Wiki&lt;/a&gt; and in particular &lt;a href=&quot;https://www.atarimagazines.com/compute/issue32/112_1_COMMODORE_64_ARCHITECTURE.php&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; which contains the below nice image and have a few questions:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Am I right in thinking that &lt;code&gt;LOAD&lt;/code&gt; loads into RAM (dark grey in the image), ignoring any switched-in banks? For example if the &lt;code&gt;.prg&lt;/code&gt; had header $01 $08 followed by 63486 zero's then &lt;code&gt;LOAD&lt;/code&gt; would effectively zero fill the computers memory from $0801 onward? If I were to switch-out any of BASIC ROM, IO, or Kernal, for example, then &lt;code&gt;PEEK&lt;/code&gt;ing (&lt;code&gt;LDA&lt;/code&gt;ing) those areas would return zero?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If I switch out BASIC ROM do I need to disable any interrupts at all?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If IO and Kernal are not switched-out the CPU will see them and not the underlying RAM, but will the VIC see RAM there regardless? If so I was going to use $C000-$FFFF for graphics (character set and sprites) whilst keeping IO and Kernal switched-in for the CPU to see.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lGCug.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lGCug.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16295" LastEditorUserId="16295" LastEditDate="2020-12-30T09:47:38.023" LastActivityDate="2020-12-31T08:21:34.293" Title="Bank switching and memory perspectives (C64)" Tags="&lt;commodore-64&gt;&lt;memory-layout&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17505" PostTypeId="2" ParentId="17504" CreationDate="2020-12-30T10:52:02.750" Score="6" Body="&lt;h3&gt;1. Kinda&lt;/h3&gt;&#xA;&lt;p&gt;Any time the CPU &lt;em&gt;writes&lt;/em&gt; to memory, it writes to RAM or I/O. Your example will zero out all the RAM, but also will zero any I/O locations. That's going to have the effect of disabling sprites, setting their colour to black, turning any sound off, etc etc. It might send a zero byte to the serial port or something as well, I'm a little hazy on exactly how that works. This is going to have an effect on loading from disk also.&lt;/p&gt;&#xA;&lt;p&gt;So if you want to write anything into this region of RAM, then you can't do so directly from disk. You need to load it into some other region first, and then move it. (That's as well, since you probably want to decompress it etc).&lt;/p&gt;&#xA;&lt;p&gt;But if the aim is just to load some data to be displayed, then you could try and fit it all into the upper 8 kilobytes and separately configure the VIC-II to display it.&lt;/p&gt;&#xA;&lt;h3&gt;2. No&lt;/h3&gt;&#xA;&lt;p&gt;The interrupt handlers are part of the KERNAL, and they don't depend on BASIC. The design of the C64 is precisely so that you can page BASIC out without having worry about that kind of thing. But if you want to page out the KERNAL, then of course you need to set up an interrupt handler first (or disable interrupts until you page KERNAL back in)&lt;/p&gt;&#xA;&lt;h3&gt;3. That's right.&lt;/h3&gt;&#xA;&lt;p&gt;The VIC-II's view of memory is completely different from the CPU's view of memory. If the VIC-II is set to bank 3 (starting at $C000), then it will see RAM all the way through those 16K. It'll be up to you to upload whatever charsets you want.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2020-12-31T08:21:34.293" LastActivityDate="2020-12-31T08:21:34.293" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17506" PostTypeId="1" AcceptedAnswerId="17507" CreationDate="2020-12-30T12:08:07.027" Score="3" ViewCount="177" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CjHwc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CjHwc.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(p. 70 in the &lt;a href=&quot;https://www.elhvb.com/mobokive/edwin/laptops/HP/OmniBook%20300%20425%20430%20530.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Service manual&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="7265" LastActivityDate="2020-12-31T10:30:52.843" Title="What does HP Omnibook 300 error code 0302h mean?" Tags="&lt;hp&gt;&lt;omnibook&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17507" PostTypeId="2" ParentId="17506" CreationDate="2020-12-30T12:15:13.487" Score="6" Body="&lt;p&gt;0AAh is the Basic Assurance Test code (BAT). See &lt;a href=&quot;http://www.textfiles.com/programming/biosdiag.man&quot; rel=&quot;noreferrer&quot;&gt;BIOS Diagnostic - keyboard&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This error code means that the keyboard does not respond to this command.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;1.0.3. Keyboard controller test.&#xA;&#xA;A keyboard controller BAT command is issued(command 0AAH) and the&#xA;response is checked. Response should be 55H.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2020-12-30T12:15:13.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17508" PostTypeId="1" CreationDate="2020-12-30T20:23:46.270" Score="31" ViewCount="4066" Body="&lt;p&gt;I seem to remember that IBM claimed one of its versions of OS/2 was crashproof. I believe they specifically said it was &amp;quot;crashproof&amp;quot; or some similar term to indicate that it would never crash.&lt;/p&gt;&#xA;&lt;p&gt;But someone came up with an exploit that caused OS/2 to crash, and IBM stopped advertising it as crashproof.&lt;/p&gt;&#xA;&lt;p&gt;A PC Magazine &lt;a href=&quot;https://www.pcmag.com/opinions/the-computer-that-never-crashes&quot; rel=&quot;noreferrer&quot;&gt;article&lt;/a&gt; backs up my recollection:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Years ago, IBM tried to promote a version of OS/2 as &amp;quot;crash-proof.&amp;quot; This gambit ended when Microsoft designed some code specifically to crash the system and during a COMDEX event, Steve Ballmer went from machine to machine with a floppy disk crashing these &amp;quot;crash-proof&amp;quot; OS/2 machines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also, a &lt;a href=&quot;https://i.imgur.com/rqbfiFb.png&quot; rel=&quot;noreferrer&quot;&gt;photo&lt;/a&gt; of the back of an OS/2 Warp box shows that it says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Its Crash Protection helps prevent a single, wayward program from affecting the rest of your system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Although my recollection is that they changed their description of OS/2 from &amp;quot;crashproof&amp;quot; to &amp;quot;crash protected&amp;quot; after the release of the exploit.&lt;/p&gt;&#xA;&lt;p&gt;Was there a specific feature or design/architecture that OS/2 had that IBM believed would prevent it from crashing, and what was the exploit that proved that wasn't true?&lt;/p&gt;&#xA;" OwnerUserId="6953" LastEditorUserId="6953" LastEditDate="2020-12-30T21:13:40.230" LastActivityDate="2021-01-01T22:57:34.307" Title="How was OS/2 supposed to be crashproof, and what was the exploit that proved it wasn't?" Tags="&lt;os2&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17509" PostTypeId="2" ParentId="17508" CreationDate="2020-12-30T20:47:49.357" Score="25" Body="&lt;p&gt;I'm not sure about the advertising, but OS/2 1.3 really was &lt;em&gt;extremely&lt;/em&gt; stable. Later versions were also quite stable, though it never seemed to me that any of the others quite matched the last of the 1.x series.&lt;/p&gt;&#xA;&lt;p&gt;Most of that came from using the processor's protected mode, which most other OSes that were in wide use on PCs at the time didn't use.&lt;/p&gt;&#xA;&lt;p&gt;In particular, most people on PCs at the time ran MS-DOS, which ran in real mode. In real mode, all code running on the machine had access to all memory locations, so it was entirely trivial for a normal program to overwrite things like the operating system or the interrupt table. The interrupt table was especially vulnerable because it was right at the beginning of memory, so writing via a null pointer would overwrite more or less arbitrary interrupt vectors.&lt;/p&gt;&#xA;&lt;p&gt;By the time of OS/2 1.3, many MS-DOS users did use sort of memory manager (e.g., 386Max). In this case, MS-DOS was technically running on a V86 process, and the processor itself was actually running in protected mode. For better or worse, however, unless you also ran something else as a &amp;quot;supervisor&amp;quot; (e.g., DesqView), the fact that you were in protected mode was mostly hidden, so the system provided (at best) a minimal improvement in stability over actual real mode.&lt;/p&gt;&#xA;&lt;p&gt;Since then, use of protected mode has become ubiquitous. While it's still possible to crash a computer (e.g., Windows' notorious blue screen of death) there's really no comparison to how things were under MS-DOS.&lt;/p&gt;&#xA;&lt;p&gt;I'm not sure it was ever used as the basis of an actual attack, but others have mentioned OS/2's queuing problem, but nobody's explained what the problem was.&lt;/p&gt;&#xA;&lt;p&gt;As events arrive from the keyboard, mouse, etc., they're put into a queue. Then the PM figures out where they should be routed, and the target process removes the event from the queue. Lather, rinse, repeat.&lt;/p&gt;&#xA;&lt;p&gt;The problem arose if a program simply quit removing its events from the queue. There was one queue shared between all PM processes, so if one didn't retrieve its message, nobody else could retrieve theirs either, and the system quickly ground to a halt.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YGUhm.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YGUhm.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For Windows NT, Microsoft changed the architecture just a bit, to prevent this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4vZR3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4vZR3.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this architecture, the OS kernel code removes events from the shared queue, sorts out where they should go, and deposits each in the event queue associated with the proper process. If a process quits processing its events, its own queue will back up (and the user will get an error message), but it won't affect any other processes.&lt;/p&gt;&#xA;&lt;p&gt;Windows certainly has its share of problems as well, but this particular problem definitely is not one of them (unless you're looking at Windows 3.x/9x/Me, which was an entirely different beast).&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2021-01-01T22:57:34.307" LastActivityDate="2021-01-01T22:57:34.307" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17510" PostTypeId="2" ParentId="17508" CreationDate="2020-12-30T20:53:54.290" Score="5" Body="&lt;p&gt;Is there any source beside your memory for this or a similar claim? It would be helpful to see a first hand source supporting that &lt;em&gt;IBM made it&lt;/em&gt;, like an advertisement or some promotional matter or manual or a lake. The cited PC Magazin posting seems as well rather based on memory.&lt;/p&gt;&#xA;&lt;p&gt;Also, the cited OS/2 Warp box clearly mentions &lt;em&gt;Crash-Protection&lt;/em&gt; as a function to isolate single processes from crashing the whole system. Something that was almost the default behaviour on Windows prior to NT.&lt;/p&gt;&#xA;&lt;p&gt;While being an OS/2 developer (and user) since 1.2 (but only really felt in love with 2.0), I do not remember any claim for it being 'crashproof'. And it seams rather dubious that IBM would have changed that somehow along the way.&lt;/p&gt;&#xA;&lt;p&gt;Now, having mentioned OS/2 Version 2.0, it did come with an advertising campaign using the claim of being&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/OS/2#DOS_compatibility&quot; rel=&quot;noreferrer&quot;&gt;a better DOS than DOS and a better Windows than Windows&lt;/a&gt;&amp;quot;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Was it maybe this line that got stuck in your memory?&lt;/p&gt;&#xA;&lt;p&gt;OS/2 was in fact way more stable than any DOS/Windows of the same time - and years to follow. Mostly due its use of 286/386 protection mechanics to really separate processes while providing safe(er) interfaces than DOS/Windows.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2020-12-30T21:33:50.757" LastActivityDate="2020-12-30T21:33:50.757" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17512" PostTypeId="2" ParentId="17508" CreationDate="2020-12-30T21:59:10.973" Score="25" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;SteveB went on the road to see the top weeklies, industry&#xA;analysts and business press this week to give our systems&#xA;strategy. The meetings included demos of Windows 3.1 (pen and&#xA;multimedia included), Windows NT, OS/2 2.0 including a&#xA;performance comparison to Windows and a “bad app” that&#xA;corrupted other applications and crashed the system. It was a&#xA;very valuable trip and needs to be repeated by other MS&#xA;executives throughout the next month so we hit all the&#xA;publications and analysts.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://techrights.org/2009/06/17/steve-ballmer-crimes-vs-os2/&quot; rel=&quot;noreferrer&quot;&gt;http://techrights.org/2009/06/17/steve-ballmer-crimes-vs-os2/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Unfortunately, OS/2 had a crucial flaw in its design: a Synchronous Input Queue (SIQ). What this meant was that all messages to the GUI window server went through a single tollbooth. If any OS/2 native GUI app ever stopped servicing its window messages, the entire GUI would get stuck and the system froze. OK, technically the operating system was still running. Background tasks continued to execute just fine. You just couldn’t see them or interact with them or do anything, because the entire GUI was hung. Some enterprising OS/2 fan wrote an application that polled the joystick port and was supposed to unstick things when the user pressed a button. It rarely worked.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://arstechnica.com/information-technology/2019/11/half-an-operating-system-the-triumph-and-tragedy-of-os2/5/&quot; rel=&quot;noreferrer&quot;&gt;https://arstechnica.com/information-technology/2019/11/half-an-operating-system-the-triumph-and-tragedy-of-os2/5/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20276" LastActivityDate="2020-12-30T21:59:10.973" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="17513" PostTypeId="1" AcceptedAnswerId="17514" CreationDate="2020-12-30T22:33:36.380" Score="25" ViewCount="3115" Body="&lt;p&gt;To my knowledge, neither MS-DOS nor BIOS offers any kind of API for sound cards. Therefore the concept of a &amp;quot;driver&amp;quot; is absent, as we know it today. Apart from accessories and sample files and Windows-related stuff found in the setup package, what is the essentials needed for a DOS-program to use a sound card?&lt;/p&gt;&#xA;&lt;p&gt;One thing I've read somewhere and cannot find anymore is that some sound cards are 'inactive' at power-up and need some sort of initialization to work. Can you please comment on this?&lt;/p&gt;&#xA;" OwnerUserId="19642" LastEditorUserId="20389" LastEditDate="2020-12-31T17:52:06.343" LastActivityDate="2021-01-01T17:37:45.653" Title="What really is a sound card driver in MS-DOS?" Tags="&lt;ms-dos&gt;&lt;ibm-pc&gt;&lt;sound&gt;&lt;driver&gt;" AnswerCount="5" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17514" PostTypeId="2" ParentId="17513" CreationDate="2020-12-30T23:21:12.167" Score="5" Body="&lt;p&gt;The typical way to provide &amp;quot;driver&amp;quot; services to other programs in DOS is to run a TSR (Terminate and Stay Resident) program installing a software interrupt vector such that running DOS programs could invoke this INT for services (see &lt;a href=&quot;http://ctyme.com/rbrown.htm&quot; rel=&quot;noreferrer&quot;&gt;Ralph Brown's Interrupt List&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;In the sound context, however, programs would typically do the device I/O directly by reading and writing I/O ports directly, handling interrupts and DMA transfers when relevant. Maybe due, in part at least, to the fact that multimedia services were rapidly evolving.&lt;/p&gt;&#xA;&lt;p&gt;With no resource management provided by DOS, you would have to detect devices manually which could be a bit tricky and potentially trigger crashes depending on what happened to be installed in the I/O space. It is possible that some devices only monitored a minimal I/O footprint until an init sequence was performed to reduce this risk, but this is not behaviour I recognize from the sound routines I wrote myself for AdLib, Roland MPU-401 MIDI and classic SoundBlaster cards.&lt;/p&gt;&#xA;&lt;p&gt;Mainly, detection was based on conventional I/O, IRQ and DMA allocations supplemented by environment variable conventions specifying these configuration points.&lt;/p&gt;&#xA;&lt;p&gt;You basically wrote a piece of code that should only give a certain result in the presense of the expected device (fx setting up the on-board timers on the AdLib card) and ran it blindly against the conventional or specified I/O addresses and saw what dropped out of the sky.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2020-12-30T23:41:52.143" LastActivityDate="2020-12-30T23:41:52.143" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17515" PostTypeId="2" ParentId="17513" CreationDate="2020-12-30T23:29:00.567" Score="4" Body="&lt;p&gt;Like any hardware, the hardware of a sound card needs to be “prepared for operation” after having powered up in an unconfigured state.&lt;/p&gt;&#xA;&lt;p&gt;Usually this consists of writing certain values to certain hardware ports and/or memory addresses (after testing for the presence of said sound card). After this, the sound card is ready for operation.&lt;/p&gt;&#xA;&lt;p&gt;In Windows or any other modern Operating Systems this is done by a driver upon booting the operating system and scanning for any hardware that’s present. In DOS this configuration is (usually) done by the game or application utilizing the sound card when it is started. Before the application starts, the hardware is not yet configured.&lt;/p&gt;&#xA;" OwnerUserId="15545" LastActivityDate="2020-12-30T23:29:00.567" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17516" PostTypeId="1" AcceptedAnswerId="17533" CreationDate="2020-12-31T02:30:02.723" Score="6" ViewCount="357" Body="&lt;p&gt;The Sega Saturn sold only nine million units, well short of the ambition with which Sega launched it, and as it would turn out, well short of what was needed to ultimately keep the company in the console business. The failure has been attributed to several factors including the Genesis add-on mess, suboptimal hardware design, rushed American launch that alienated retailers, and the PlayStation being a hundred dollars cheaper.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Revolutionaries at Sony&lt;/em&gt;, page 108, makes a claim that surprised me:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It was common knowledge in the industry that the failure of the Sega Saturn was the result of Sega's dependence on the long-established wholesaler organization Shoshinkai in spite of adopting CD-ROM as an innovative medium. Following the same argument, we can say that the reason for the PlayStation's success is that Sony revolutionized distribution in order to take advantage of the features of CD-ROM as a medium.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Is that true? What effects exactly did the existing Japanese game wholesaler network have on availability of Saturn games?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-02T01:56:20.220" Title="Did the Saturn fail because of game distribution issues?" Tags="&lt;history&gt;&lt;game-consoles&gt;&lt;sega&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17517" PostTypeId="2" ParentId="17513" CreationDate="2020-12-31T05:16:50.590" Score="16" Body="&lt;p&gt;Most PCI soundcards do not have hardware support for games and other applications that expect a SoundBlaster or AdLib to be present.  Older cards made a special effort to provide what's known as &amp;quot;register level compatibility&amp;quot;, so they could be used with a wide range of existing games.  By the time PCI arrived, Windows had become the PC operating system of choice, so compatibility with DOS games was less important at the hardware level.&lt;/p&gt;&#xA;&lt;p&gt;The DOS &amp;quot;driver&amp;quot; for these newer cards is actually emulation software, which intercepts accesses to the I/O ports normally occupied by Adlib and SB hardware, and converts them into commands to the actual soundcard present.  This may include performing audio synthesis and/or mixing in software.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2020-12-31T05:16:50.590" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17518" PostTypeId="2" ParentId="17478" CreationDate="2020-12-31T10:28:08.353" Score="2" Body="&lt;p&gt;I don't know of any online resources that will teach you how to handle emulation of I/O devices, aside from looking at the source code of emulators that do this.  There aren't any hard and fast rules about how an emulated I/O device should be mapped to 'real' I/O -- just do it however it's convenient for you and your users.  Some mappings are natural, such as using a TCP network connection to simulate a serial port, or a file on disk to simulate a disk drive or a paper tape.  Some mappings will require you to develop your own convention or reuse an already established one, such as the format SIMH uses for magnetic tape images.&lt;/p&gt;&#xA;&lt;p&gt;Once you are past the mapping/file format problem (which is often the easy part), generally there are two basic approaches for implementation.  First, you can treat I/O as incidental to your CPU emulation, which means it doesn't need to be an accurate emulation itself, it only needs to work well enough to meet the needs of the CPU emulator.  Emulated I/O devices of this type will often take shortcuts such as assuming that I/O operations will execute instantaneously.  Such shortcuts are convenient because your I/O can be triggered by having your CPU emulator recognize (and act on) I/O instructions.  If I/O instructions complete as soon as they are executed, you don't need to worry about keeping track of the status of slower operations that might take many cycles to complete, which makes things simpler.&lt;/p&gt;&#xA;&lt;p&gt;The second approach is to attempt a more accurate emulation of the I/O device, which may include simulating delays waiting for I/O operations to complete.  For example you might delay writing a sector to disk for a few tens or hundreds of milliseconds for no reason except that real hardware would have taken that long.  This approach is a bit more complicated because now you have essentially two emulators running in parallel -- one emulating the CPU, and another emulating the I/O device -- which means you either need a way to pass messages between the two emulators (if they are running independently), or you need a way to 'time-slice' the emulators so they run in lockstep (if they are sharing a common clock).&lt;/p&gt;&#xA;&lt;p&gt;During development, it may work well to start with the first approach just to get something basically functional, then switch to the second approach as your needs get more sophisticated.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2020-12-31T10:28:08.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17519" PostTypeId="2" ParentId="17506" CreationDate="2020-12-31T10:30:52.843" Score="1" Body="&lt;p&gt;The 8041 is designed to be a coprocessor that executes service work for a main processor. It has an integrated communication infrastructure, consisting of two 8-bit mailboxes. A mailbox is a structure where one party can store data in it, and another party can consume the data from it. Both parties can check whether the mailbox is full (data stored which has not yet been removed) or empty (no data in the mailbox at the moment, the sending party may store data).&lt;/p&gt;&#xA;&lt;p&gt;Assuming the hardware interface to the keyboard controller works (we can't be sure!), if the software in the keyboard controller would not run at all, it would never consume the command code 0AAh from its input mailbox. This would be error code 0301h. So under this assumption, we know that the keyboard controller software runs at least partially. If the software in the keyboard controller runs correctly, it will put 055h (self test OK) or 0FCh (self test failed) into the output mailbox. Error code 0302h means, it did put &lt;em&gt;neither&lt;/em&gt; of these answers into the output mailbox. If the keyboard controller had responded with 0FCh, the error code would have been 0303h instead. So we can conclude that this symptom (under the initial assumtion that the interface between the host processor and the keyboard controller works) means that the program in the keyboard controller is partially corrupted. The Omnibook 300 seems old enough that the keyboard controller is not field-upgradable. For newer laptop, this symptom might be caused by a failed update to the &amp;quot;embedded controller&amp;quot; which usually contains the keyboard controller stuff, too.&lt;/p&gt;&#xA;&lt;p&gt;Another plausible explanation for the symptom would be broken communication between the host processor and the keyboard controller (or a completely dead keyboard controller), such that the mailbox status errorneously always reports &amp;quot;empty&amp;quot;. In that case, the BIOS would write the 0AAh command, find the input mailbox empty afterwards, conclude that the controller began execution of that command, but never find the result of this command in the output mailbox.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2020-12-31T10:30:52.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17520" PostTypeId="2" ParentId="17513" CreationDate="2020-12-31T11:10:46.320" Score="22" Body="&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Real Sound Blasters don't need a driver to initialise or support them. Clones may need one-time initialisation. Exotic cards may need memory-resident translation layers.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Games use a collection of per-card drivers to 'talk' to the appropriate hardware interfaces. These can be hard-coded into the game, or a collection of external files like in HMI or Miles.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Depending on your situation, one or both of these may apply.&lt;/p&gt;&#xA;&lt;p&gt;To play &lt;em&gt;Halloween Harry&lt;/em&gt; on a real Sound Blaster, no extra files are needed. The SB support is hard-coded.&lt;/p&gt;&#xA;&lt;p&gt;To play &lt;em&gt;Theme Hospital&lt;/em&gt; on a SB Live PCI under MS-DOS, the game uses a third-party Miles driver to abstract the SB card. The card itself requires a Live driver to imitate the hardware interface of an older SB card.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;All the answers given here so far are correct, for different scenarios. What may confuse is that there are two distinct phases that both could correctly be called 'drivers'. Let me describe what I mean:&lt;/p&gt;&#xA;&lt;p&gt;Pretty much everything here applies to both digitised audio output and AdLib/OPL2/OPL3 support equally.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1) Initialisation and support to -provide- the interface&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Legitimate, first-party Sound Blaster series of cards are programmed directly through I/O ports. There's a chip on-board known as the 'DSP'* which handles all the data movement to and from the card. If you have a real Sound Blaster, and the game knows how to 'talk Sound Blaster' to the DSP using the interface described in the &lt;em&gt;Sound Blaster Series Hardware Programming Guide&lt;/em&gt; then that's all that's needed.&lt;/p&gt;&#xA;&lt;p&gt;*(Not to be confused with a 'DSP' in later usage which typically provides a programmable effect like reverb.)&lt;/p&gt;&#xA;&lt;p&gt;If you have a clone card or a third-party 'compatible card', then one of the following applies:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The clone card exactly acts as one of the Sound Blaster series cards and no further intervention by a 'driver' is necessary.&lt;/li&gt;&#xA;&lt;li&gt;The card starts off 'inert' and requires some initialisation. This is common with 1995-1997 PnP compatible cards whose IRQ and DMA settings are done in software rather than by jumpers. My Avance ALS100+ based card and CMI8330 cards require a start-up program to be run before they will work. This program talks to the card, tells it what IRQ and DMA to use, and from that point onwards the card acts as a clone card. No persistent program resides in memory to translate a game's Sound Blaster DSP commands into Avance commands, etc. If you've installed the 'driver' for a clone-like card, this most likely applies to you.&lt;/li&gt;&#xA;&lt;li&gt;If the card is not capable of directly acting as a clone card because it is exotic like a Gravis Ultrasound, or a very new (relatively speaking: post 1996) Sound Blaster / Ensoniq PCI card, then it cannot be simply initialised into acting as an SB clone card. These cards require a software shim layer to be loaded resident to intercept Sound Blaster DSP commands and translate them in real time to commands the card understands. For the GUS, this is SBOS. If the game you're playing natively supports GUS, then you don't need SBOS. For cards without FM chips/clone chips present, the shim layer may synthesize the audio in software in real-time, with mixed results.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;2) Game support to -consume- the interface&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Completely independently of the above, is the 'driver' that provides the game's ability to talk to a specific sound card. This could be more precisely called an audio library, but since it also has to talk to the Sound Blaster / Windows Sound System etc DSP processors, it's also a driver. In this respect, a DOS game is sort of like a mini-operating-system into itself.&lt;/p&gt;&#xA;&lt;p&gt;This driver takes the form of a library of routines that abstract the base primitives of the sound card interface into a useful, consistent set of commands for game developer.&lt;/p&gt;&#xA;&lt;p&gt;By itself, a Sound Blaster provides a single output stream of audio and FM capability. A Gravis Ultrasound or SB AWE provides a wavetable interface to multiple short looping streams of sound-card-RAM-resident samples (in addition to the SB digitised stream and FM, for the AWE). The PC speaker goes beep.&lt;/p&gt;&#xA;&lt;p&gt;The game programmer doesn't want to think about this level of detail - they want to start music, play an explosion, etc. It would be the driver's job to abstract these details: begin/stop output, start/stop sound effects, mix them, alter volumes, etc.&lt;/p&gt;&#xA;&lt;p&gt;Early games would have these drivers coded directly into the game in a sort of ad-hoc fashion - &lt;em&gt;Halloween Harry&lt;/em&gt; can only support original Sound Blasters, and the support is hard-coded into the game. &lt;em&gt;Rise of the Triad&lt;/em&gt; has its own huge sound library; since RoTT is open source, you can see all of the different initialisation and support routines on &lt;a href=&quot;https://github.com/videogamepreservation/rott/tree/master/audiolib&quot; rel=&quot;noreferrer&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For late, mature MS-DOS games like &lt;em&gt;Theme Hospital&lt;/em&gt;, a library like Miles or HMI is used. If you've seen a sound card set up screen with dozens of sound cards available, then they most likely use one of these libraries. I point this out since the different sound card drivers can be shown in a directory listing as &lt;code&gt;.386&lt;/code&gt; or &lt;code&gt;.ovl&lt;/code&gt; or &lt;code&gt;.hmi&lt;/code&gt; files. Epic MegaGames Jensen-library games like &lt;em&gt;One Must Fall 2097&lt;/em&gt; and &lt;em&gt;Jazz Jackrabbit&lt;/em&gt; store their sound card drivers in &lt;code&gt;MDRV---R.MUS&lt;/code&gt; files.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The sound card drivers in &lt;strong&gt;1)&lt;/strong&gt; would be provided on an installation disk with your sound card, if required.&lt;/p&gt;&#xA;&lt;p&gt;The sound card drivers in &lt;strong&gt;2)&lt;/strong&gt; would be provided with or part of the games themselves.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2021-01-01T13:20:14.923" LastActivityDate="2021-01-01T13:20:14.923" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="17521" PostTypeId="1" CreationDate="2020-12-31T18:41:43.383" Score="3" ViewCount="397" Body="&lt;p&gt;Many games (such as Breath of Fire III for the PlayStation) have computer-controlled characters as members of your party. When you walk around the game, the others in the party follow your footsteps, apparently in the same path as you walked.&lt;/p&gt;&#xA;&lt;p&gt;Frequently, however, these non-player characters get stuck in the environment. They may get 'caught' on a piece of scenery, or take a &amp;quot;wrong turn&amp;quot; at some point. BoF has two NPCs that follow the player, and deals with this issue by &amp;quot;teleporting&amp;quot; the stuck character to where the human player is now. I doubt the developers &lt;em&gt;wanted&lt;/em&gt; the game to work like that: I'm sure they'd prefer their computer-controlled characters to follow the player character in a realistic manner. It seems to me that teleporting a character when they get stuck is more work than making the &amp;quot;pathfinding&amp;quot; routine solid.&lt;/p&gt;&#xA;&lt;p&gt;Why was it not practical for the designers of this game (and others of the same era) to implement a fully functional pathfinding routine for their NPCs? I'd expect it to be straight-forward for them to just follow the human player's path, and thus not get stuck.&lt;/p&gt;&#xA;&lt;p&gt;Additionally, what causes them to take different turns sometimes (apparently) since they get stuck in the environment? (If they did follow the same path as the player, they shouldn't get stuck, as the player evidently made it through.)&lt;/p&gt;&#xA;" OwnerUserId="20390" LastEditorUserId="10566" LastEditDate="2021-01-05T11:15:41.870" LastActivityDate="2021-01-05T11:59:14.583" Title="Why do NPC party members often &quot;get stuck&quot; when following the player?" Tags="&lt;sony-playstation&gt;&lt;glitches&gt;&lt;game&gt;" AnswerCount="1" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="17522" PostTypeId="1" AcceptedAnswerId="17523" CreationDate="2021-01-01T01:55:22.367" Score="3" ViewCount="420" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.vgmpf.com/Wiki/index.php?title=S-SMP&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.vgmpf.com/Wiki/index.php?title=S-SMP&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The S-SMP (perhaps: Sony - Sound &amp;amp; Music Processor?) is the audio CPU used by the Super Nintendo Entertainment System. It consists of two integrated units, the SPC700 and a digital signal processor (DSP), as well as 64 kB of SRAM...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Wait a minute. 64 kilobytes isn't much by today's standards, but it's half a million bits. Static RAM is generally said to require six transistors per bit, so that would be three million transistors. This is in 1989, the same year as the release of the 486, which contained just over one million transistors. Granted, static RAM would be highly regular and probably somewhat denser than random logic, but still, three times the transistor count of &lt;em&gt;an extremely complex and expensive cutting-edge CPU that costs more than an entire SNES&lt;/em&gt;? How is that possible?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; Looking up some ads in the back of Byte magazine, December 1989, I find the following:&lt;/p&gt;&#xA;&lt;p&gt;SRAM: 32768x8 (1.5 million transistors): $18&lt;/p&gt;&#xA;&lt;p&gt;DRAM: 1048576x1 (1 million transistors): $12&lt;/p&gt;&#xA;&lt;p&gt;Of course it's not quite as simple as that; a DRAM cell probably doesn't take exactly the same area as an SRAM transistor; price is not purely a function of chip area; there are small variations in price by speed grade, etc. Still, the figures are suggestive. They do at least indicate that static RAM costs $36 for 64K at this time. A big company buying in bulk would expect to pay less. How much less? I did see one indication elsewhere earlier in the decade that Amstrad was paying $2.50 for memory chips advertised in Byte at $3. If that ratio holds true here, Nintendo would pay about $30 for 64K of static RAM.&lt;/p&gt;&#xA;&lt;p&gt;A reasonable guideline for this era is that retail price needs to be at least three times manufacturing cost. That means the static RAM alone would account for $90 of the price of a $200 console.&lt;/p&gt;&#xA;&lt;p&gt;It looks like Jerry Coffin is right: Nintendo was willing to initially sell the hardware at a loss, presumably figuring both on making it up on software sales, and on the component costs dropping rapidly over the following couple of years.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2021-01-01T03:45:17.517" LastActivityDate="2021-01-01T03:45:17.517" Title="Did the Nintendo S-SMP really contain 3 million transistors?" Tags="&lt;hardware&gt;&lt;chip&gt;&lt;nintendo&gt;&lt;snes&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17523" PostTypeId="2" ParentId="17522" CreationDate="2021-01-01T02:44:21.080" Score="6" Body="&lt;p&gt;Direct from the SNES development manual:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SBw3o.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SBw3o.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As for how it's possible: game consoles are almost always sold at a loss. Vendors make their money off the games (which is why they work so hard to assure that nobody but themselves can publish games for their console).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Reference&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/SNESDevManual/book1/page/n153/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;https://archive.org/details/SNESDevManual/book1/page/n153/mode/2up&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2021-01-01T02:50:06.373" LastActivityDate="2021-01-01T02:50:06.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17524" PostTypeId="2" ParentId="17460" CreationDate="2021-01-01T05:40:02.937" Score="2" Body="&lt;p&gt;I made some comments but I think I'm going to go ahead and give you an answer.&#xA;You are speaking of console games being imported, so you are speaking specifically of the Japanese market. At the time of the 8 and 16-bit consoles, games were almost EXCLUSIVELY made in Japan, yet the consoles enjoyed worldwide popularity. But if you added together ALL the other markets, they still wouldn't be as large as the market was in Japan at the time. So, games were developed in Japan, for a Japanese market with all other markets being addressed as almost an afterthought. This meant that games would come out in Japan and then not be available in the US for months or in the UK for years(UK always got the shaft). They did not even consider other markets while making a game and the only reason English was even included in a game was because it was &amp;quot;cool&amp;quot; in Japan to do so.&lt;/p&gt;&#xA;&lt;p&gt;Since the only barriers to playing a Japanese console game on an American console were physical (SNES tabs) if they even existed at all and everything came out WAY earlier in Japan, importing Japanese games became a thing. I visited my friend in Japan at the time of the SNES and almost all I did was buy games in Akihabara.&lt;/p&gt;&#xA;&lt;p&gt;As for importing PC games, if you mean from the Japanese market to America... well, there really wasn't much call for it because the few Japanese games developed for PC that were good were either RPGs with a language barrier, or released in the US market officially. Case in point- Sierra-on-line released games made by Game Arts, like Thexder and Zeliard. The PC games market was essentially the opposite of the console market, with most PC games being made in the US (or the west, whatever) for the western market with other markets being an afterthought if thought of at all. Games like Wizardry and Ultima WERE heavily imported; from the west TO Japan, where they inspired games like Xanadu and Dragon Quest.&lt;/p&gt;&#xA;&lt;p&gt;When the Famicom(NES) was released, it basically took the place of the PC with regards to games. Heck, Fami-com meant Family Computer. After that, the only games (mostly) made in Japan for the PC were hentai (adult) games. So there really wasn't anything to IMPORT.&lt;/p&gt;&#xA;&lt;p&gt;As for the consoles you listed, ALL of them could play Japanese games on an American console without any modchips or adapters. Now, the UK consoles are another story as they tended to lock those simply because of the difference between PAL and NTSC. Yet even still, if you could get the game to display in PAL, generally done with a &amp;quot;region patch&amp;quot; being applied to the game ISO which was ripped from the CD, there was nothing else preventing the game from playing. To apply a patch, one would have to burn a new CD of the game, which is where you might be getting the idea that a modchip was necessary from.&lt;/p&gt;&#xA;&lt;p&gt;To sum up: if you lived somewhere that was PAL (UK, Europe), you got the shaft because you got the games last AND you needed some type of adapter or modchip to play games imported from either Japan OR the US, who are both NTSC. PCs displayed on monitors using VGA and simply did not have this problem. No one imported PC games from Japan because all they had was Hentai, though the Japanese DID import US PC games until the Famicom, which ushered in the age of Hentai for the Japanese PC.&lt;/p&gt;&#xA;" OwnerUserId="3338" LastActivityDate="2021-01-01T05:40:02.937" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17526" PostTypeId="1" AcceptedAnswerId="17528" CreationDate="2021-01-01T14:20:48.733" Score="19" ViewCount="4812" Body="&lt;p&gt;Doom &lt;a href=&quot;https://doom.fandom.com/wiki/Super_NES&quot; rel=&quot;noreferrer&quot;&gt;was ported to the Super Nintendo&lt;/a&gt; using a Super FX 2 chip on the cartridge. It has most of the features of the full game, though with a few omissions, such as absence of sound propagation, probably due to the SNES having a much weaker CPU than a 386 PC.&lt;/p&gt;&#xA;&lt;p&gt;One omission that surprises me is the lack of textures on the floor and ceiling. I would've thought that was exactly the kind of thing the SNES mode 7 was for.&lt;/p&gt;&#xA;&lt;p&gt;Was it for some reason impossible to combine mode 7 with the Super FX 2, or was there some other reason for the omission?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-01T21:23:43.423" Title="Why didn't SNES Doom use mode 7?" Tags="&lt;nintendo&gt;&lt;snes&gt;&lt;game&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17527" PostTypeId="2" ParentId="17526" CreationDate="2021-01-01T14:42:18.453" Score="20" Body="&lt;p&gt;Among other reasons: floors and ceilings of different heights would be very difficult due to the way Mode 7 is used to imitate a projective transformed plane.&lt;/p&gt;&#xA;&lt;p&gt;The effect works by setting the rotation, scale and offset of the tilemap on each scanline and these remain constant for the entire horizontal line. This can be used to render a single perfectly flat plane that spans the screen, but not one with holes or gaps in (unless these are represented by solid colour/other effects).&lt;/p&gt;&#xA;&lt;p&gt;You can't change these parameters midway through a scanline to render floors at different heights, so the blue and grey floors here would be incredibly difficult to render textured on a single horizontal screen line using that mode.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/15sIJ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/15sIJ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2021-01-01T21:23:43.423" LastActivityDate="2021-01-01T21:23:43.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17528" PostTypeId="2" ParentId="17526" CreationDate="2021-01-01T14:42:45.147" Score="32" Body="&lt;p&gt;Mode 7 is just an image warp — the programmer sets a 2d offset that is applied between each pixel and the next when proceeding in raster order. That allows 2d rotation and scaling to be applied; if you change the start position and scale per line then that’s how you get a flat perspective plane.&lt;/p&gt;&#xA;&lt;p&gt;Doom can’t make use of this for at least two reasons:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;it would need to draw multiple perspective planes, not just one, so the hardware is insufficient;&lt;/li&gt;&#xA;&lt;li&gt;if it were having the SNES apply display warping, it’d then have no way to draw the walls flat.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There’s also the concern that the drawing is only part of the problem. Doom knows the shape of the floor areas as vertical spans but it needs to convert those into horizontal spans for efficient pixel plotting. That’s another CPU cost and, as you observe, the SNES is already struggling.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2021-01-01T14:42:45.147" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17529" PostTypeId="2" ParentId="17513" CreationDate="2021-01-01T17:37:45.653" Score="1" Body="&lt;p&gt;When the Sound Blaster was first introduced, the documented way to use the digitized audio features was to make use of a supplied blob of code which was supplied by Creative Labs.  If memory serves, using this blob of code required reading it into RAM at a multiple-of-16 address, and invoke it with a normalized form of that address (offset zero of whatever segment it happened to start at).  If memory serves, the MIDI interface was defined in terms of I/O port operations, and the documentation may have specified how code which was able to run fast enough could output individual samples to an I/O port without using DMA [which ended up being how many programs actually used the SoundBlaster], but I think Creative Labs' expectation was that people would use the supplied blob of code.  I don't think it was clear, however, whether they expected that programmers would always put that blob in a file with a certain name in a certain place so as to allow it to be replaced with alternative implementations, or how much space they expected programmers to allocate for it.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-01-01T17:37:45.653" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17530" PostTypeId="2" ParentId="2103" CreationDate="2021-01-01T19:12:22.510" Score="8" Body="&lt;p&gt;We can infer the price of one of the first ROM reading the agreement signed between the Japanese Nippon Calculating Machine (later Busicom) and Intel in February 1970 (&lt;a href=&quot;https://xnumber.com/xnumber/agreement.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;available here&lt;/a&gt;). The agreement provided for manufacturing of a set of 4 chips: RAM, ROM, shift register, CPU (this was the famous Intel 4004, made by Federico Faggin). ROMs cost consisted of a fixed part and a variable part. Fixed part was:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$60k as development charge of the 4 chips. The breakdown of this cost is: about $15k for RAM, $10k for ROM, $5k for shift register, $30k for CPU&lt;/li&gt;&#xA;&lt;li&gt;$2k ‘as the tooling charge for each ROM separately’.&#xA;NCM undertook to purchase 60k kits of the chips with the cost dropping with volume: The first 50,000 ROMs cost $13 each with each additional ROM costing $12.&#xA;The cost per bit can be found recalling that the ROM stored 256 8-bit words, i.e. 2048 bits.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="20401" LastEditorUserId="7347" LastEditDate="2021-01-02T10:08:57.033" LastActivityDate="2021-01-02T10:08:57.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17531" PostTypeId="1" CreationDate="2021-01-01T20:33:20.263" Score="6" ViewCount="373" Body="&lt;p&gt;The TMS9918 is still available, which is nice.&lt;/p&gt;&#xA;&lt;p&gt;But are there any other (better) video chips still on the (after-)market in any numbers? Obviously Commodore's VIC-II is not one of them.&lt;/p&gt;&#xA;" OwnerUserId="15591" LastActivityDate="2021-01-02T00:02:15.057" Title="Are there any 1980's video chips still available besides the TMS9918?" Tags="&lt;video&gt;&lt;chip&gt;&lt;tms9918&gt;&lt;vic&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17532" PostTypeId="2" ParentId="17531" CreationDate="2021-01-02T00:02:15.057" Score="8" Body="&lt;p&gt;Since you seem to consider buying on ebay to qualify as available, I'd nominate the TI 34010 and 34020. Looks like you can pick them up for around $50-60 apiece (though quantity available may be open to question--most seemed to be lots of one).&lt;/p&gt;&#xA;&lt;p&gt;There seem to be at least a few Intel 82876's available as well (for around the same price).&lt;/p&gt;&#xA;" OwnerUserId="808" LastActivityDate="2021-01-02T00:02:15.057" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17533" PostTypeId="2" ParentId="17516" CreationDate="2021-01-02T01:56:20.220" Score="9" Body="&lt;p&gt;Accident analysis includes the concept of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Chain_of_events_(accident_analysis)&quot; rel=&quot;noreferrer&quot;&gt;chain of events&lt;/a&gt;. The fundamental premise being that there's not usually just one mistake that leads to an accident. It usually takes several, and sometimes many mistakes, before an accident finally occurs.&lt;/p&gt;&#xA;&lt;p&gt;Likewise, it's oversimplistic to say that a game console failed solely because of one factor. The failure of a retail product nearly always involves multiple factors, and the same is true here. So presumably your question isn't literally asking of the distribution issues were &lt;strong&gt;the&lt;/strong&gt; cause of failure, but rather were those issues one of the several factors (besides those you mention and others).&lt;/p&gt;&#xA;&lt;p&gt;I would say that the answer is definitely yes, distribution played a part in the lack of success of the Sega Saturn. Besides your own reference, which I see no reason to discount, there is the corroborating claim:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Lack of distribution may have contributed significantly to the failure of the Sega Saturn to gain an installed base. Sega had limited distribution for its Saturn launch, which may have slowed the building of its installed base both directly (because consumers had limited access to the product) and indirectly (because distributors that were initially denied product may have been reluctant to promote the product after the limitations were lifted). Nintendo, by contrast, had unlimited distribution for its Nintendo 64 launch, and Sony not only had unlimited distribution, but had extensive experience with negotiating with retailing giants such as Wal-Mart for its consumer electronics products.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;From &lt;a href=&quot;https://www.researchgate.net/publication/261984366_Technological_Leapfrogging_Lessons_from_the_US_Video_Game_Console_Industry&quot; rel=&quot;noreferrer&quot;&gt;Technological Leapfrogging: Lessons From the U.S. Video Game Console Industry&lt;/a&gt; (this is also &lt;a href=&quot;https://en.wikipedia.org/wiki/Sega_Saturn#cite_note-Schilling-54&quot; rel=&quot;noreferrer&quot;&gt;cited by the Wikipedia Sega Saturn article&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Note that this passage describes not just the relative lack of distribution, which would inherently constrain sales of the console, but also the fact that Sega chose to provide the console only to select few retailers, leading to other retailers not helping to promote the console later when it was more widely available.&lt;/p&gt;&#xA;&lt;p&gt;More details on that are available &lt;a href=&quot;https://en.wikipedia.org/wiki/Sega_Saturn#Launch&quot; rel=&quot;noreferrer&quot;&gt;in the same Wikipedia article&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Cause and effect are notoriously difficult to prove. Only a robust scientific experiment can really nail down exactly what factors are causal and which are not, and there's no feasible way to perform that experiment. So any claim of what exactly caused the failure of the Saturn is always going to be debatable.&lt;/p&gt;&#xA;&lt;p&gt;But it seems that there is plenty of evidence to suggest strongly that distribution problems were at least one of the factors that led to failure.&lt;/p&gt;&#xA;" OwnerUserId="16497" LastActivityDate="2021-01-02T01:56:20.220" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17534" PostTypeId="2" ParentId="16789" CreationDate="2021-01-02T11:07:29.973" Score="2" Body="&lt;p&gt;If you could use Java on Windows 3.1 there is a SSH client written in pure Java that would work. I use one on a desktop Java system that has been running for 12 years on Windows to avoid having an SSH tunnel. If it works on an old version of Java that still runs on 3.1 is another question.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/995944/ssh-library-for-java&quot;&gt;https://stackoverflow.com/questions/995944/ssh-library-for-java&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20396" LastActivityDate="2021-01-02T11:07:29.973" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17535" PostTypeId="2" ParentId="17244" CreationDate="2021-01-02T11:13:32.117" Score="0" Body="&lt;p&gt;There used to be games that used half tracks, and I believe, quarter tracks for copyright protection.&lt;/p&gt;&#xA;&lt;p&gt;Skipping half tracks in the middle was fairly common, there were special copy programs that could copy those disks but they where unreliable and took forever. If a normal floppy was written as 1 3 5 7 9 half track such a disk would be written as 1 3 6 8 10 and such pattens. It would reduce the capacity of the disk a bit but make it harder to copy.&lt;/p&gt;&#xA;&lt;p&gt;As for quarter tracks I recall one program that wrote the floppy disk as a sort of quantum vinyl record with a spiral jumping a quarter track to the inside every quarter rotation.&lt;/p&gt;&#xA;&lt;p&gt;You could read by reading all the quarter quarter tracks to find the legitimate block of data with a marker. I suspect you would need a special modified disk drive to write such things, or very precise timing.&lt;/p&gt;&#xA;" OwnerUserId="20396" LastActivityDate="2021-01-02T11:13:32.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17536" PostTypeId="1" CreationDate="2021-01-02T20:02:22.217" Score="6" ViewCount="553" Body="&lt;p&gt;So I'm having a good bit of trouble understanding this protocol. Many resources seem to compare it to modern networking protocols in some way, while others, including the specification, seem to refer to it as solely a protocol for communicating between the DTE and DCE. I the latter case, I'm extremely confused. How does the DCE get packets to remote terminal at the end of the circuit, since that seems it would involve DCE to DCE communications?&lt;/p&gt;&#xA;&lt;p&gt;Sorry if this sounds like word soup, as I'm having difficult really explaining my exact confusion. If X.25 is an &lt;em&gt;Interface between Data Terminal Equipment (DTE) and Data Circuit-terminating Equipment (DCE)&lt;/em&gt; than how does the data get to the remote terminal specified in the packet? Does the DCE just throw the frames onto the network and it gets switched across various PSE's? How do the PSE's communicate with each other to switch the packets? And what really is a DCE in this case? Modem's? Curiously, I've never seen an X.25 modem even when searching for one (or any X.25 related hardware for that matter, including PAD's or PSE's).&lt;/p&gt;&#xA;" OwnerUserId="8590" LastEditorUserId="8590" LastEditDate="2021-01-02T20:28:13.687" LastActivityDate="2021-01-03T11:10:52.500" Title="Was X.25 solely about the connection from the DTE to DCE link?" Tags="&lt;network&gt;&lt;x.25&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17538" PostTypeId="2" ParentId="17536" CreationDate="2021-01-02T21:24:30.947" Score="5" Body="&lt;p&gt;X.25 is anything but an interface. It is a packet-switched network, very much comparable to TCP/IP. Most of the packet-switching, however, is entirely invisible to the end subscriber as PSE (Packet-switch-exchange, comparable to a router in a TCP/IP network) are entirely hidden within the Telco's network - The end user sees a pretty simple serial line (RS-232, 449 or X.21), nothing else. This connection entirely looks like a point-to-point link.&lt;/p&gt;&#xA;&lt;p&gt;The physical serial interfaces can also be established over modem lines - the modem, however, just forms the lowest physical layer, transporting the end-users physical serial bitstream to the nearest PSE or PAD. These PADs (Packet Assembler/Disassembler) packetise serial data into X.25 packets that can be switched through the network, and are also responsible to establish/tear down the virtual links through the packet network.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2021-01-02T21:24:30.947" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17539" PostTypeId="2" ParentId="17536" CreationDate="2021-01-02T21:59:47.150" Score="11" Body="&lt;p&gt;Technically speaking, X.25 only describes what goes on at the edges -- the DCE/DTE interface, as you guessed.  Within the packet switched network itself, any suitable protocol can be implemented.  Of course, it has to be able to deliver the signaling and data that are implied by X.25; for example you need to be able to convey a &amp;quot;call request&amp;quot; from source to destination.  And data packet boundaries need to be preserved end-to-end (it's a sequenced-packet protocol, not a byte stream protocol).&lt;/p&gt;&#xA;&lt;p&gt;The mid-to-late 1970s picture looked like this. If you wanted your computer to talk to other computers over a packet-switcched network, then &amp;quot;your computer&amp;quot; would implement the DTE role of X.25.&lt;/p&gt;&#xA;&lt;p&gt;Some device on Post Office property would implement the DCE role.&lt;/p&gt;&#xA;&lt;p&gt;In my case, the two would then be connected via a Post Office leased line.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PDP-11 = DTE  &#xA;  |  &#xA;Synchronous modem   &#xA;  | &#xA;Post Office leased line  &#xA;  |  &#xA;Synchronous modem   &#xA;  |  &#xA;DCE somewhere in Post Office property  &#xA;  |  &#xA;+-----------------------------+  &#xA;| The packet-switched network |  &#xA;|   (the original cloud!)     |  &#xA;+-----------------------------+  &#xA;  |  &#xA; remote DCE  &#xA;  |  &#xA;… details omitted …  &#xA;  |&#xA; remote DTE   &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In this picture, the PDP-11 is equipped with a synchronous line interface, capable of operating in bitstuff mode (e.g., a DUP-11).  The modems do what modems traditionally do: condition a digital bit stream for transmission over analog communication wires. There's no X.25 intelligence in them.&lt;/p&gt;&#xA;&lt;p&gt;(The DTE end had an actual modem as a separate box, with a cable to the line device in the PDP-11; I was not privy to what went on at the DCE end, so that end is a little figurative).&lt;/p&gt;&#xA;&lt;p&gt;Note that the X.25 packet protocol is a network (layer 3) protocol; to the extent you can map TCP/IP to OSI layers, IP is layer 3, TCP is layer 4.  X.25 provides &amp;quot;virtual circuits&amp;quot; that are analogous to real physical circuits.&lt;/p&gt;&#xA;&lt;p&gt;The X.25 software in &amp;quot;your computer&amp;quot; would probably (certainly in my case) provide some locally-appropriate way for other programs to access X.25 virtual circuits.&lt;/p&gt;&#xA;&lt;p&gt;A use-case would be DECnet.  DECnet networks were (pre-Ethernet) built with point-to-point links, for a fully or partially connected mesh.   Any such link could be replaced by an X.25 virtual circuit.  Thus DECnet would be the &amp;quot;user&amp;quot; of X.25, and other programs would use DECnet, without knowing that data were travelling over X.25.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-01-02T22:19:37.910" LastActivityDate="2021-01-02T22:19:37.910" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17540" PostTypeId="2" ParentId="17085" CreationDate="2021-01-02T23:25:06.080" Score="2" Body="&lt;p&gt;Most large System/360 and System/370 installations were multiuser. I never saw a University whose S/360 or S/370 was not multiuser, and I never worked on a machine larger than a 360/50I that was not multiuser. CP-67, TSO and VM were common, to say nothing of the services running multi-user APL software.&lt;/p&gt;&#xA;&lt;p&gt;As for single threading command interpretation, that never happened, except perhaps on dedicated APL services (I doubt that APL did that either, but can't rule it out.) It's true that the TSO code in the Link Pack Area (LPA) was shared by all users, and that CMS users commonly shared a Dis-Contiguous Shared Segment (DCSS), but that was read-only code, not part of the user's state, and multiple users could be concurrently executing the code.&lt;/p&gt;&#xA;" OwnerUserId="20412" LastActivityDate="2021-01-02T23:25:06.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17541" PostTypeId="1" CreationDate="2021-01-03T04:57:00.430" Score="4" ViewCount="290" Body="&lt;p&gt;Donkey Kong Country was among the most ambitious, popular and influential of Super Nintendo games. Technically, its big trick was taking animations rendered on Silicon Graphics workstations and putting them on the cartridge to be displayed as SNES sprites.&lt;/p&gt;&#xA;&lt;p&gt;The cartridge was 32 megabits (4 MB). That was pretty big for a fourth-generation game cartridge, and ROM chips were a significant contributing factor to total cost. If I were the developer, I would have tried very hard to compress the animations, background images and other data on the cartridge, decompressing them into console RAM for use. I'm sure the developers at the time must've thought of it.&lt;/p&gt;&#xA;&lt;p&gt;What data compression techniques did they use?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-03T04:57:00.430" Title="What data compression did Donkey Kong Country use?" Tags="&lt;nintendo&gt;&lt;game-cartridge&gt;&lt;snes&gt;&lt;compression&gt;" AnswerCount="0" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17542" PostTypeId="2" ParentId="17536" CreationDate="2021-01-03T11:10:52.500" Score="0" Body="&lt;p&gt;The DCE/DTE connection is V.24 aka RS-232. X.25 is a signalling protocol.&lt;/p&gt;&#xA;" OwnerUserId="18835" LastActivityDate="2021-01-03T11:10:52.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17543" PostTypeId="2" ParentId="17085" CreationDate="2021-01-03T12:43:47.087" Score="1" Body="&lt;p&gt;CTSS at MIT was one of the first timesharing systems ever built.  It ran on a modified IBM 7094 mainframe. This is from the 1963-1966 time frame.&lt;/p&gt;&#xA;&lt;p&gt;Memory protection was extremely primitive.  There were two banks of memory, one for the system and the other for the current user.  The user program could only clobber its own memory.&lt;/p&gt;&#xA;&lt;p&gt;Users could develop programs interactively, from teletypes or terminals that looked like an IBM selectric typewriter.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.multicians.org/thvv/7094.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.multicians.org/thvv/7094.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2021-01-03T16:55:11.210" LastActivityDate="2021-01-03T16:55:11.210" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17544" PostTypeId="1" AcceptedAnswerId="17553" CreationDate="2021-01-03T13:31:53.540" Score="4" ViewCount="215" Body="&lt;p&gt;I am reading over the history of the Nova, which claims that a key moment in its creation was a 4-bit ALU which was shown to them by their Fairchild sales rep. I assume this refers to the 9340? But other sources claim the Nova used the 74181, which was from TI.&lt;/p&gt;&#xA;&lt;p&gt;I believe this bit of confusion is due to the 9340 being a licensed 74181? I see mentions of the 9341 being &amp;quot;the equivalent&amp;quot; to the 74181, but I'm not sure if the last digit being 0 or 1 is meaningful.&lt;/p&gt;&#xA;&lt;p&gt;But now &lt;a href=&quot;https://apollo181.wixsite.com/apollo181/about&quot; rel=&quot;noreferrer&quot;&gt;I see notes that the early Novas did not use ALUs at all&lt;/a&gt;, but were based on simpler adders and such, like the 7483. It was only the SuperNova that used more complex designs, apparently the Signetics 8260. However, spec sheets suggest the 8260 &lt;em&gt;is&lt;/em&gt; a 74181, so I am again confused.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone have a better source on all of this with more detail?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2021-01-04T10:37:02.140" Title="Did the Nova use the 74181 or 9340 or are they the same?" Tags="&lt;data-general&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17545" PostTypeId="1" AcceptedAnswerId="18332" CreationDate="2021-01-03T13:57:12.457" Score="7" ViewCount="533" Body="&lt;p&gt;According to the transcript at &lt;a href=&quot;https://fabiensanglard.net/another_world_polygons_SNES/&quot; rel=&quot;noreferrer&quot;&gt;https://fabiensanglard.net/another_world_polygons_SNES/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;... I could get the software running again to run at about 30 frames per second if of course I'm using a fast cartridge because cartridges at the time you could buy them either 2.68Mhz [SlowROM] or 3.58Mhz [FastROM[12]].&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;To give you an idea, the SNES actually runs a 3.6Mhz. It's a pretty fast chip for the time but the ROMs that run at that speed costs a little bit more that roms that run at a slower speed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Using a 3.6Mhz ROM you know my dev kit can ran and go to run at 10Mhz so it was no problem for you just to set the switch to run to dev kit I got it running really fast frame rate so it's looking good ready. Then Fargo comes out he said &amp;quot;Can you use the slower ROM it'll save 50 cents a cartridge.&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(I recommend reading the whole thing, incidentally, it has a lot of very interesting detail.)&lt;/p&gt;&#xA;&lt;p&gt;This is understandable; the fast ROM would make it easier to get a game running at the speed you want; the slow ROM would save money. Ideally you would use the slow ROM and decompress code and data into RAM as needed, but the machine only had 256K RAM total of which 64K each were earmarked for video and sound, leaving limited working space for decompression buffer, and the CPU was not very fast, limiting the sophistication of compression algorithms you could use.&lt;/p&gt;&#xA;&lt;p&gt;Did any SNES games end up biting the bullet and paying extra for the fast ROM?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-03-19T00:40:46.730" Title="Did any SNES games use the fast ROM?" Tags="&lt;nintendo&gt;&lt;rom&gt;&lt;game-cartridge&gt;&lt;snes&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17546" PostTypeId="2" ParentId="17244" CreationDate="2021-01-03T19:21:31.640" Score="4" Body="&lt;p&gt;The Disk-II mechanism is essentially a floppy drive with the low-level controller ripped out. Few, if any, other manufacturers were willing to do that, as it means a more complex controller and connection to the computer.&lt;/p&gt;&#xA;&lt;p&gt;Drive mechanisms from the Shugart SA-400 onwards used just two lines — Direction and Step — to manage the heads. To manage the four bipolar stepper motor lines required far more complex timing and switching, and while the Disk-II controller is a marvel of electronics, it was also implementing a solved problem. It seemed to be more important to Apple at the time to produce a low parts cost design that maximised profit than to get a working drive to market quickly.&lt;/p&gt;&#xA;&lt;p&gt;By the time other competitors to Apple were implementing disk drives, rapid time to market was more important than gaining a few more bytes on a disk by designing your own low-level controller. It was also likely that the disk drive market was larger, and no one buyer would have enough clout to demand their own weird controller-less variant.&lt;/p&gt;&#xA;&lt;p&gt;I know of no other computer company that went Apple's way. That's not to say that someone else didn't, but the reasons for Apple making the choices they did were very specific to their market entry time and their technical team being very close to management.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2021-01-03T19:21:31.640" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17548" PostTypeId="2" ParentId="17544" CreationDate="2021-01-03T22:03:39.867" Score="2" Body="&lt;p&gt;In the hope that this helps (but I'm a programmer so this is all greek to me):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.org/pdf/dg/NovaMaint_1969.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nova maintenance manual&lt;/a&gt; has what seems to be a complete parts list in Appendix B.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.org/pdf/dg/DGC-TP-539-11-02_Technical_Manual_for_the_SuperNova.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SuperNova Technical Manual&lt;/a&gt; has schematics and parts list near the end.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-01-03T22:03:39.867" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17549" PostTypeId="1" CreationDate="2021-01-03T23:19:18.217" Score="5" ViewCount="200" Body="&lt;p&gt;When trying to run &lt;a href=&quot;http://www.terminate.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.terminate.com/&lt;/a&gt; under &lt;a href=&quot;http://www.dosemu.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.dosemu.org/&lt;/a&gt;, I get &lt;code&gt;Runtime Error 200&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I know that this is a well known issue with software compiled with Turbo / Borland Pascal and using the CRT unit.&#xA;This unit has an overflow in a delay loop if the computer is too fast and as this routine was written in approx. 8MHz age, the limitation is not a big surprise.&lt;/p&gt;&#xA;&lt;p&gt;There are several workarounds available for cases in which you cannot recompile with a modified library as it is always the case for closed-source software.&#xA;However, these usually have different draw-backs and they all are work-arounds.&lt;/p&gt;&#xA;&lt;p&gt;Because of this, I have this explicit question about Terminate, whether someone knows about a working work-around.&#xA;I want to be sure that I do not later have connection issues or what-ever, because required delay times are wrong due to the workaround.&lt;/p&gt;&#xA;" OwnerUserId="6824" LastEditorUserId="79" LastEditDate="2021-01-04T08:32:28.203" LastActivityDate="2021-01-04T08:32:28.203" Title="How to get Terminate running in DOSEMU on recent machines?" Tags="&lt;ms-dos&gt;&lt;software&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ClosedDate="2021-01-04T13:32:59.220" ContentLicense="CC BY-SA 4.0" />
  <row Id="17550" PostTypeId="2" ParentId="17549" CreationDate="2021-01-04T02:11:56.837" Score="3" Body="&lt;p&gt;&lt;strong&gt;Surprisingly&lt;/strong&gt;, googling &amp;quot;Runtime error 200&amp;quot; yields &lt;a href=&quot;https://www.st-andrews.ac.uk/%7Ebds2/ltsn/tpbug.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;, which still refers to the defunct Altavista:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Borland: Runtime Error 200 - 'Divide by 0'&lt;/p&gt;&#xA;&lt;p&gt;Applications that use the CRT unit may generate this error message when running on very fast machines (i.e. Pentium Pro 180 and above). The cause of this error is a timing loop that occurs as part of the initialization of the CRT unit. This timing loop counts how many clock ticks occur within the loop and then that number is divided by 55. The result of this division is a value that is too large to fit into an integer value. The 'Divide by 0' error message is the catch-all error that is displayed when this overflow occurs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There are currently no Borland endorsed patches for this problem. There are several user provided patches available on the internet that patch both the CRT unit as well as existing EXE files. The easiest way to obtain these patches is to go to &lt;a href=&quot;http://www.altavista.digital.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;www.altavista.digital.com&lt;/a&gt; and search on '+bp7patch.zip +tppatch.zip' without the quotes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;but the suggestion to search for &lt;a href=&quot;https://www.google.com/search?q=%2Bbp7patch.zip+%2Btppatch.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;the relevant files&lt;/a&gt; appears to yield some results.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2021-01-04T05:48:47.940" LastActivityDate="2021-01-04T05:48:47.940" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17551" PostTypeId="2" ParentId="17549" CreationDate="2021-01-04T06:14:14.003" Score="5" Body="&lt;p&gt;Several of the approaches listed in the answers to &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/12111/79&quot;&gt;Why did MS-DOS applications built using Turbo Pascal fail to start with a division by zero error on faster systems?&lt;/a&gt; should work; in particular, &lt;a href=&quot;http://ss64.net/merlyn/pas-r200.htm#TP2&quot; rel=&quot;noreferrer&quot;&gt;c’t’s patch&lt;/a&gt;, which includes a working &lt;code&gt;Delay&lt;/code&gt; routine, or one of &lt;a href=&quot;http://www.reimagery.com/fsfd/system.htm#pascalfix&quot; rel=&quot;noreferrer&quot;&gt;the Pascal fix TSRs&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2021-01-04T06:14:14.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17552" PostTypeId="1" AcceptedAnswerId="17554" CreationDate="2021-01-04T08:47:02.287" Score="1" ViewCount="117" Body="&lt;p&gt;Here is a brief survey of the literature that I know of/have access to: The most complete description of the X1 that I am aware of is given in &lt;a href=&quot;https://www.cs.utexas.edu/users/EWD/PhDthesis/PhDthesis.PDF&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dijkstra's 1959 PHD thesis&lt;/a&gt;, which describes in detail only punched tape and an electronic typewriter, while mentioning that the machine can deal with &amp;quot;a large number of such varied mechanisms simultaneously&amp;quot;. &lt;a href=&quot;https://academic.oup.com/comjnl/article/2/1/39/398496&quot; rel=&quot;nofollow noreferrer&quot;&gt;B. J. Loopstra's 1958 article&lt;/a&gt; about the computer says that it could deal with punched cards as well, but doesn't go into detail about the related orders/instructions. Aretz Kruseman's &lt;a href=&quot;https://ir.cwi.nl/pub/4155&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;The Dijkstra-Zonneveld ALGOL 60 compiler for the Electrologica X1&lt;/em&gt;&lt;/a&gt; mentions that there were four Flexowriters at the Mathematical Centre in Amsterdam by the early sixties.&lt;/p&gt;&#xA;&lt;p&gt;What kinds of peripherals could the X1 connect to, and what instructions/orders were available to interface with them? How many could it use at the same time?&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2021-01-04T22:31:30.237" Title="What kinds of input/output devices could the Electrologica X1 interface with (simultaneously)?" Tags="&lt;early-computer&gt;&lt;io&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17553" PostTypeId="2" ParentId="17544" CreationDate="2021-01-04T09:59:35.217" Score="5" Body="&lt;p&gt;The 9341, 54181 and 74181 are indeed functionally identical. This is from a contemporary Fairchild databook:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fB227.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fB227.png&quot; alt=&quot;Scan from Fairchild databook&quot; /&gt;&lt;/a&gt; (taken from &lt;a href=&quot;https://apollo181.wixsite.com/apollo181/about&quot; rel=&quot;noreferrer&quot;&gt;https://apollo181.wixsite.com/apollo181/about&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Looking through the parts list in &lt;a href=&quot;http://bitsavers.org/pdf/dg/NovaMaint_1969.pdf&quot; rel=&quot;noreferrer&quot;&gt;the Nova maintenance manual posted by another-dave&lt;/a&gt;, the original 1969 Nova doesn't appear to use it, though. On the other hand, a 74181 is clearly visible center-right in &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/9/96/Data_General_Nova_1200_CPU.agr.jpg&quot; rel=&quot;noreferrer&quot;&gt;this photo&lt;/a&gt; of a slightly later Nova 1200 board:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XhN1q.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XhN1q.jpg&quot; alt=&quot;partial enlargement of the Wikipedia photo of a Nova 1200 board&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2021-01-04T10:37:02.140" LastActivityDate="2021-01-04T10:37:02.140" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17554" PostTypeId="2" ParentId="17552" CreationDate="2021-01-04T12:21:21.733" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;what instructions/orders were available to interface with them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While the thesis you linked only describes paper tape and typewriter, we can do an educated guess based on this description, compared with the general format of an &amp;quot;order&amp;quot; (instruction) as described throughout the thesis, and the binary format of an order as described in appendix B.&lt;/p&gt;&#xA;&lt;p&gt;In the order description the paper tape and typewriter, what would be normally a 15-bit address in ordinary order is &lt;code&gt;1 XP&lt;/code&gt; for the tape punch/reader and &lt;code&gt;2 XP&lt;/code&gt; for the typewriter. Moreover, the communication orders use the letter &lt;code&gt;Y&lt;/code&gt; if they affect register &lt;code&gt;A&lt;/code&gt;, and the letter &lt;code&gt;Z&lt;/code&gt; if they affect register &lt;code&gt;S&lt;/code&gt;. Finally, we have input operations&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0Y n    (A) + (..) -&amp;gt; (A)&#xA;1Y n    (A) - (..) -&amp;gt; (A)&#xA;2Y n        + (..) -&amp;gt; (A)&#xA;3Y n        - (..) -&amp;gt; (A)&#xA;   &#xA;0Z n    (S) + (..) -&amp;gt; (S)&#xA;1Z n    (S) - (..) -&amp;gt; (S)&#xA;2Z n        + (..) -&amp;gt; (S)&#xA;3Z n        - (..) -&amp;gt; (S)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and output operations&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;6Y n        + (A) -&amp;gt; (..)&#xA;7Y n        - (A) -&amp;gt; (..)&#xA;&#xA;6Z n        + (S) -&amp;gt; (..)&#xA;7Z n        - (S) -&amp;gt; (..)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And if you compare this with appendix B, there's not much freedom in those orders, except for the choice of n, which has 15 bits.&lt;/p&gt;&#xA;&lt;p&gt;So the educated guess is that n serves as an I/O address, with the two special addresses mentioned above for the tape punch/reader and the typewriter. It's unclear if the I/O addresses are treated differently from normal memory addresses or not.&lt;/p&gt;&#xA;&lt;p&gt;That means that there are 2^15 = 32768 potential I/O addresses. So:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How many could it use at the same time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If each device uses a single I/O address, and if the I/O addresses are distinct from memory addresses, then up to 32768. But likely some devices (e.g. the magnetic tapes) would use several I/O addresses. And this number is large enough to explain the &amp;quot;unlimited&amp;quot; claim that are made in some of the sources.&lt;/p&gt;&#xA;&lt;p&gt;Also note that as mentioned in the thesis, strictly speaking it does not use them &amp;quot;at the same time&amp;quot; at the &amp;quot;micro level&amp;quot; (though it looks like it's done in parallel on the &amp;quot;macro level&amp;quot;, as the thesis states), but it deals with them serially, using an interrupt mechanism.&lt;/p&gt;&#xA;&lt;p&gt;So another potential limit is the reaction time of the devices; if the computer has to deal with too many devices, the illusion that all this happens &amp;quot;at the same time&amp;quot; will be lost due to the total delay.&lt;/p&gt;&#xA;&lt;p&gt;As an side, they are even talking about using this interrupt mechanism to do a kind of multi-tasking, which is pretty amazing for that time.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What kinds of peripherals could the X1 connect to&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Anything that would have an &amp;quot;I/O controller&amp;quot; connected to the internal bus, with a decoder for the I/O addresses specific to that device. So basically everything you could imagine.&lt;/p&gt;&#xA;&lt;p&gt;The sources list most of the devices available at that time as options: paper tape, punch cards, printer, plotter, typewriter.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="611" LastEditDate="2021-01-04T22:31:30.237" LastActivityDate="2021-01-04T22:31:30.237" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17555" PostTypeId="1" CreationDate="2021-01-04T21:50:29.900" Score="20" ViewCount="5556" Body="&lt;p&gt;Some programs notice if they are run on a real Commodore 64 or an emulator. For example, &lt;a href=&quot;https://csdb.dk/release/?id=48577&quot; rel=&quot;noreferrer&quot;&gt;this demo from 2007&lt;/a&gt; stops on &lt;a href=&quot;https://en.wikipedia.org/wiki/VICE&quot; rel=&quot;noreferrer&quot;&gt;VICE&lt;/a&gt; emulator 3.2 with the message &amp;quot;No VIC inside&amp;quot;. How is this done?&lt;/p&gt;&#xA;&lt;p&gt;I found some code to identify a &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_128&quot; rel=&quot;noreferrer&quot;&gt;Commodore 128&lt;/a&gt; in Commodore 64 mode, but no code to identify emulation.&lt;/p&gt;&#xA;&lt;p&gt;In particular, I would be interested in a solution to detect a real Commodore 64, THEC64, and VICE emulator in software.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="6659" LastEditDate="2021-01-06T16:00:02.237" LastActivityDate="2021-01-06T16:00:02.237" Title="How to detect a real Commodore 64, THEC64, or VICE emulator in software?" Tags="&lt;commodore-64&gt;&lt;emulation&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17556" PostTypeId="2" ParentId="17555" CreationDate="2021-01-04T22:08:53.480" Score="23" Body="&lt;p&gt;In general, no there is no reliable way to detect an emulator (if it's any good). Especially if it's actively developed.&lt;/p&gt;&#xA;&lt;p&gt;The trick that worked yesterday probably don't tomorrow as emulation improves. Also, exploiting margins like ghost signals on floating bus lines may just lead to false positives as well, as there were quite a few differences between C64 boards in its life time. (This was a problem with some copy protections based on this scheme, for instance. Also, it could still be emulated if the developer's set their mind to it.)&lt;/p&gt;&#xA;&lt;p&gt;There's a discussion of the topic over at lemon64 &lt;a href=&quot;https://www.lemon64.com/forum/viewtopic.php?t=56405&amp;amp;start=0&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. As commented, specifically for VICE it may be possible to detect if True Drive emulation is turned off. But the user can still just turn it on.&lt;/p&gt;&#xA;&lt;p&gt;Earlier versions of VICE supported an emulator ID that was optionally mapped into the memory space to detect the presence but it was since removed.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2021-01-04T22:16:15.327" LastActivityDate="2021-01-04T22:16:15.327" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17557" PostTypeId="2" ParentId="17555" CreationDate="2021-01-04T22:38:45.527" Score="12" Body="&lt;p&gt;Wouldn't it defy the purpose of an emulator, designed to mimic a machine as perfect as possible, if it can be detected? In general, every detectable difference must be considered a bug one would expect to be removed ASAP.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Some programs notice if they are run on a real C64 or an emulator.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It would be great if you could add some examples. Especially with notes if these programs do the detection reliably or only in certain configuration/situations.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How is this done?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Assuming that any of the named emulators is good enough to run most C64 software, I would look out for discrepancies in handling of external devices, most likely floppy disk drives. For example, by measuring the response time for various commands send to a drive. Measuring can be done by taking a CIA timer, put in PHI2 counting mode.&lt;/p&gt;&#xA;&lt;p&gt;Three basic results can be measured:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Direct response to a transfer&lt;/p&gt;&#xA;&lt;p&gt;(i.e. reaction/round trip times)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Response to CPU only commands&lt;/p&gt;&#xA;&lt;p&gt;(i.e. answer given by the external device CPU without accessing the drive)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Response to positioning and read commands&lt;/p&gt;&#xA;&lt;p&gt;(i.e. mechanical response like moving 20 tracks)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Each of this will give indicators about having an unmodified or a modified C64. Modification in this sense can have many meanings&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Faster &lt;em&gt;drive&lt;/em&gt; electronics&lt;/li&gt;&#xA;&lt;li&gt;Faster drives or solid state drives&lt;/li&gt;&#xA;&lt;li&gt;Improved protocol (fastloaders/DOS)&lt;/li&gt;&#xA;&lt;li&gt;Emulator usage&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Differences are only gradual, not absolute. A real fast response may come from an emulation that does not care for being as slow in floppy operations as the original (or simply accept the faster operation of the host PC). It may respond almost instant.&lt;/p&gt;&#xA;&lt;p&gt;But similar results may as well come from a genuine C64 equipped with solid state drives, SD2IEC for example. With increased processing power available such devices may at one point as well deliver instant response &lt;em&gt;with the real C64&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So for sure timing can only reveal relative differences to a genuine setup, not how they are achieved (*1). For this method I would give the response time within a single transmission the highest chance to find &lt;em&gt;something&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I found some code to identify a C128 in C64 mode, but no code to identify emulation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Detection of a C128 vs. a C64 is a different issue, as these machines &lt;em&gt;do&lt;/em&gt; differ in certain details.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Not to mention that these measurements are only valid within the reference system given, so an emulation delivering the right relative timing may still run faster or slower.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-01-06T15:58:01.650" LastActivityDate="2021-01-06T15:58:01.650" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="17558" PostTypeId="2" ParentId="2042" CreationDate="2021-01-05T00:53:39.977" Score="7" Body="&lt;p&gt;This thread seems a little dated but just on the chance that John O is still listening I thought I'd mention that I worked for a major Wang client and I still have a working Wang VS system.  Wang tried to avoid using the term &amp;quot;mainframe&amp;quot; in their product lines because they wanted potential users to perceive that the VS series had a much lower overhead cost than a typical mainframe.  They did however pitch that the 7000 series were equivalent in capacity and capability to IBM mainframes.  I have had experience with both IBM and Wang large systems so I can say with confidence that the Wang VS could do everything imaginable on a large system and, especially in terms of user experience, quite a bit more.&lt;/p&gt;&#xA;&lt;p&gt;John O: were you ever able to find the information you wanted?  I have all the user documents from my personal Wang VS but it won't tell you much about the other models.  I am curious to know what you did find.  Large Wang systems seem to be pretty rare in the retro community so I imagine finding information could be quite difficult.&lt;/p&gt;&#xA;" OwnerUserId="20455" LastEditorUserId="6659" LastEditDate="2021-01-05T01:19:43.213" LastActivityDate="2021-01-05T01:19:43.213" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17559" PostTypeId="1" CreationDate="2021-01-05T08:17:47.660" Score="48" ViewCount="14998" Body="&lt;p&gt;This happens a lot on older consoles than this, but for this specific example, I'm picking what I spotted today: Harvest Moon for PlayStation.&lt;/p&gt;&#xA;&lt;p&gt;Here is a screenshot of the player just about to exit an area, thus causing a &amp;quot;fade to black&amp;quot;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W0aFQ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W0aFQ.jpg&quot; alt=&quot;1&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here is what it actually looks like halfways (or 75%) finished:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/v2wqB.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v2wqB.png&quot; alt=&quot;2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is what it would have looked like if the game had unlimited colors and instead used a semi-transparent black rectangle over laid over the entire screen:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Vq2vs.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Vq2vs.jpg&quot; alt=&quot;3&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;While the &amp;quot;black rectangle&amp;quot; thing may look good on a still picture, it most certainly does not &amp;quot;in motion&amp;quot;. The actual fade method, however, looks really good, and it seems to be &amp;quot;gradual&amp;quot; or &amp;quot;uneven&amp;quot;, where the bright parts of the image appear to linger on longer, as if somebody had been making the lights gradually go out in a studio with a film camera in the early 20th century.&lt;/p&gt;&#xA;&lt;p&gt;What I wonder is: What exactly causes this cool effect? I assume that it's somehow related to the relatively few colors available, so that it's not possible to use a &amp;quot;black rectangle&amp;quot; covering the screen which gradually changes transparency.&lt;/p&gt;&#xA;&lt;p&gt;You can often very easily spot a &amp;quot;fake retro&amp;quot; video game by how it fades to black using the &amp;quot;black rectangle&amp;quot; method, which looks extremely jarring when coupled with the pixely sprites that try so hard to look retro. However, I'd like to finally understand what exactly is involved in creating that beautiful kind of &amp;quot;uneven lights out&amp;quot; effect.&lt;/p&gt;&#xA;&lt;p&gt;Final Fantasy VII on PlayStation also did this. Example: &lt;a href=&quot;https://youtu.be/h0mqRkhOvtY?t=14318&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/h0mqRkhOvtY?t=14318&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20461" LastActivityDate="2021-01-06T11:41:42.633" Title="What causes that &quot;organic fade to black&quot; effect in classic video games?" Tags="&lt;graphics&gt;&lt;color-display&gt;&lt;sony-playstation&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17560" PostTypeId="2" ParentId="17521" CreationDate="2021-01-05T11:59:14.583" Score="9" Body="&lt;p&gt;&lt;strong&gt;Firstly, on the &amp;quot;difficulty&amp;quot; of programming a teleport routine:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Teleporting an NPC when it gets stuck is actually a relatively straight-forward task to achieve. Identifying when an NPC has gotten caught is simple: you can calculate the &lt;a href=&quot;https://en.wikipedia.org/wiki/Euclidean_distance&quot; rel=&quot;noreferrer&quot;&gt;Euclidian distance&lt;/a&gt; between the NPC and the player, and if it exceeds some threshold &lt;em&gt;X&lt;/em&gt;, then you conclude that the NPC has gotten stuck and needs to be teleported back to the player. (Though it may be the case that the NPC is lagging behind, rather than trapped.)&lt;/p&gt;&#xA;&lt;p&gt;Finding a suitable place to teleport the NPC to is a little more complicated to do - you don't want to teleport them into a wall, after all. Though I have no direct experience of this style of programming, I anticipate that it could be done by a combination of using the player's current location and orientation, adding an offset so they spawn &lt;em&gt;behind&lt;/em&gt; the player, and using the game's existing clipping algorithms to ensure that the NPC isn't &amp;quot;out-of-bounds&amp;quot; relative to the player's position.&lt;/p&gt;&#xA;&lt;p&gt;You might choose to zone particular areas of the map as being unsuitable for teleporting into, or alternatively use a whitelist of &amp;quot;safe&amp;quot; locations to teleport the NPCs to, and let them catch up with the player from the last teleport location they passed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;On why NPCs would get stuck in the first place:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The example you mentioned (Breath of Fire) has two NPCs following the player. These NPCs can't occupy the same space at the same time - not if we're aiming for realistic gameplay. And while you could write a pathfinding algorithm for the &amp;quot;permanent&amp;quot; structure of the level (rooms, corridors, etc), it wouldn't include moving objects that the NPCs would encounter.&lt;/p&gt;&#xA;&lt;p&gt;The designers will have written some rudimentary AI to stop one NPC constantly trying to run through the leading NPC in an attempt to catch up with the player. In a game like GoldenEye for the Nintendo 64, where there are numerous NPCs, you could have two that each want to be where the other is stood (or somewhere beyond), and just try running through each other - at least until James Bond opens the door and shoots them both! That sort of unnatural movement and behaviour would break the player's suspension of disbelief.&lt;/p&gt;&#xA;&lt;p&gt;Instead, when an NPC finds an obstacle between them and their immediate objective, they're programmed to respond in a slightly more realistic manner. An example would be for the NPC to turn slightly to the left, and try again to find a path to their objective. In the scenario of the two NPCs facing each other, if they both turn to their left they'll get out of each others' way, and can continue to their objective. These same collision avoidance routines are typically used for NPCs that are part of the player's party, too. Why reinvent the wheel, after all?&lt;/p&gt;&#xA;&lt;p&gt;This illustrates how NPCs can stray &amp;quot;off the beaten path&amp;quot; that the player takes, in an attempt to respond to their environment in a realistic manner. Other ways they could get &amp;quot;caught up&amp;quot; or delayed when following the player include if their &amp;quot;hitbox&amp;quot; (which dictates whether they can stand on a ledge, fit through a gap, or be hit by a bullet) differs to that of the player, or if there are doors or platforms that operate on a cycle.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;On the limitations of pathfinding algorithms for NPCs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;While it is possible to calculate the &lt;a href=&quot;https://en.wikipedia.org/wiki/Shortest_path_problem&quot; rel=&quot;noreferrer&quot;&gt;shortest path&lt;/a&gt; for an NPC to take to catch up with the player, such calculations are not &amp;quot;free&amp;quot; - they have to compete for CPU time with everything else the games console is doing, such as rendering graphics, responding to user input, and calculating actions for all the other NPCs in the level too. Consider also the fact that these routeing calculations need to be updated as the player moves through the level. Spending ever more processing power on NPC AI would have diminishing returns beyond some given point, and with the limited power of early 3D consoles such as the Playstation and N64, you will reach that threshold sooner rather than later.&lt;/p&gt;&#xA;&lt;p&gt;Even if you manage to route your NPC out of their trap, they can still end up lagging behind the player. If the player notices, and they want the benefit of having their party members alongside to help them through the level, they'll either have to stop and wait for the NPC to catch up, or (if they're still stuck) double back and go find them.&lt;/p&gt;&#xA;&lt;p&gt;Encouraging the player to do either of those actions will break the flow of their gameplay, and probably leave them cursing the stupid NPCs for getting lost &lt;em&gt;again&lt;/em&gt;. It is a more enjoyable experience if the game can make up for its technological shortcomings by teleporting NPCs back to the player. Ideally, if they reappear outside of the player's field of view, they might never know what happened!&lt;/p&gt;&#xA;" OwnerUserId="10566" LastActivityDate="2021-01-05T11:59:14.583" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17561" PostTypeId="2" ParentId="17559" CreationDate="2021-01-05T13:31:17.940" Score="13" Body="&lt;p&gt;There can't be a simple answer, as there are many ways to reach that effect depending on console/hardware used.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Using some 'overlay' needs incredible computing power and is usually tied to rather high end 3D engines. A way simpler method is&lt;/li&gt;&#xA;&lt;li&gt;cycling/dampening the colours. Here each colour used is replaced by a dimmer variant. An effect that is already easy to produce on hardware as simple and early as the Atari 2600 (*1). It takes even less effort&lt;/li&gt;&#xA;&lt;li&gt;if the display hardware used a dedicated, programmable palette. Now all needed to do is changing them colours (*2).&lt;/li&gt;&#xA;&lt;li&gt;If organized as indices, then some elaborate translate table may do it (*3).&lt;/li&gt;&#xA;&lt;li&gt;If these table entries are RGB values, then a fading can be created by simply counting them down by one for each colour and cycle (*4).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All of this does only need to manipulate a few bytes of colour definition instead of manipulating several kilobytes of screen memory (like a 'overlay' would do).&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[Since this effect is so handy and easy to perform it is part of the basic toolset for all classic (i.e. non 3D engine based) games and used in many variations. Like cycling only a few colours to create a force field, a glow around a character or item, or, well, a flickering fire. With well created scenes (and enough colours available), it can replace several sprites or modifications of large screen areas that would otherwise be simply impossible.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;With the right colour distribution this can be used to enhance fade-out/-in sequences by using colours for the player avatar which will not be changed, so only the playfield vanishes, while the avatar stays. When reaching black, the new playfield is drawn and the reverse effect is used for fade-in. Incredible visuals with minimal hardware requirements.]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Of course one could&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;apply the same methods to the whole screen if there is no colour table to be manipulated.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But that would require going thru al of the screen data. Not impossible, especially on fast machines like the PS1, but I do not think any game programmer would do it if it can be avoided. Doing whole screen modifications are brute force modern - fit for modern devices, but not elegant in any way.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Here colours are loaded into the registers each time they are used. By loading from a definition table instead of fixed values the effect can be reached by using a series of tables in ROM (there is rarely enough RAM in the 2600 to manipulate such a table, so having a bunch in ROM is the way to go).&lt;/p&gt;&#xA;&lt;p&gt;*2 - Much like before, except now replacement is by whatever colours are there&lt;/p&gt;&#xA;&lt;p&gt;*3 - A translate table defining a sequence. Like in a system with 8 colours colour 5 could become 7 and then 3 followed by 2 and 0.  This table would look like 0,1,0,2,4,7,6,3. Note that colours 1, 4 and 6 doesn't change, so they can be used for titles, scores or any other static content&lt;/p&gt;&#xA;&lt;p&gt;*4 - RGB means that for each colour the 'brightness' for each of the three components are stored. So by decreasing a components value (linear or relative) it will dim. On a 3-3-2 colour system bright white is 7-7-3 while black is 0-0-0. so counting down all components will fade a white spot to black. The same for other colours, like 7-0-0 is bright red and any decrease of the red component will let it fade.&lt;/p&gt;&#xA;&lt;p&gt;Having RGB even offers an easy and low effort way to do fading in more colourful ways - like fading to red in the 'evening' or green in a forest and so on.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-01-05T13:51:21.160" LastActivityDate="2021-01-05T13:51:21.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17562" PostTypeId="2" ParentId="17559" CreationDate="2021-01-05T16:11:19.170" Score="18" Body="&lt;p&gt;This effect happens when the luminosity curve of the image is adjusted like so:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UlZ08.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UlZ08.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is called gamma correction and is a fairly common feature of graphics processing software and GPUs. My research has not turned up anything to suggest that the PS1 supports this feature natively in hardware, although it can be emulated in software fairly easily.&lt;/p&gt;&#xA;" OwnerUserId="4301" LastActivityDate="2021-01-05T16:11:19.170" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17563" PostTypeId="2" ParentId="9569" CreationDate="2021-01-05T17:03:21.060" Score="4" Body="&lt;p&gt;Quite usual disposition on Apple II with 9&amp;quot; monitors.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2IBsn.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2IBsn.jpg&quot; alt=&quot;Apple II+&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7095" LastActivityDate="2021-01-05T17:03:21.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17564" PostTypeId="1" AcceptedAnswerId="17565" CreationDate="2021-01-05T18:22:22.507" Score="4" ViewCount="482" Body="&lt;p&gt;The Nintendo 64 used Rambus RDRAM. This was an unusual choice, e.g. the PlayStation used regular EDO RAM which I gather most consoles and computers did at the time.&lt;/p&gt;&#xA;&lt;p&gt;As I understand it, Nintendo chose Rambus for speed. This is surprising; it was only 9 bits wide, compared to 32 bits for the EDO RAM on the PlayStation, so by default I would've expected it to be slower.&lt;/p&gt;&#xA;&lt;p&gt;How fast was it compared to EDO RAM? To have a speed advantage, it would need to be clocked at least four times as fast. Was this actually the case? If so, how?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-07T20:07:02.630" Title="How fast was Rambus compared to regular EDO RAM?" Tags="&lt;memory&gt;&lt;ram&gt;&lt;performance&gt;&lt;nintendo-64&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17565" PostTypeId="2" ParentId="17564" CreationDate="2021-01-05T20:09:03.580" Score="8" Body="&lt;h2&gt;What's the question?&lt;/h2&gt;&#xA;&lt;p&gt;First problem here is what is to be considered speed.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Random access time?&lt;/li&gt;&#xA;&lt;li&gt;Cycle time?&lt;/li&gt;&#xA;&lt;li&gt;Maximum memory thruput?&lt;/li&gt;&#xA;&lt;li&gt;Average memory thruput?&lt;/li&gt;&#xA;&lt;li&gt;Either value per chip or&lt;/li&gt;&#xA;&lt;li&gt;for the whole memory subsystem?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For the following I'll go with maximum memory band for the whole memory subsystem. That is when a memory page is opened and successive access is done at full bus speed. In this page opening time can be (mostly) ignored, as it is (at each time) the same, independent of interface technology. Doing the numbers is thus rather simple:&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Numbers&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;RDRAM&lt;/strong&gt; in the N64 is bytewide (*1) and operates at 250 MHz, delivering two bytes per cycle:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;250 MHz x 2 Byte = &lt;strong&gt;500 MB/s&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDO-RAM&lt;/strong&gt; in the Playstation is 32 bit wide and operates ~33 MHz, delivering a word per cycle:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;33 MHz x 4 Byte = &lt;strong&gt;133 MB/s&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;So basically RDRAM as used in the N64 is about 15 times faster than EDO-RAM used by the PS. Considering the 4 times wider memory word of the PS leaves still leaves almost four times the memory bandwidth.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Why RDRAM&lt;/h2&gt;&#xA;&lt;p&gt;There are several benefits from using RDRAM with its high clock rate:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Memory doesn't need to be as wide, as four consecutive fetches (for a word) can be done faster than the CPU can swallow it&lt;/li&gt;&#xA;&lt;li&gt;Smaller memory width means less lines to be routed. 9 vs. 32 bit results 23 saved lanes to be routed to CPU and graphics - at cost of only a single additional address line.&lt;/li&gt;&#xA;&lt;li&gt;Less lanes to route means cheaper board production - part of the reason why the N64 could get away with a simple two layer board&lt;/li&gt;&#xA;&lt;li&gt;Fast transfer speed allows a Unified Memory Architecture (UMA), saving the need for additional logic/buffers to separate main and video RAM.&lt;/li&gt;&#xA;&lt;li&gt;UMA allows flexible allotment of RAM to either purpose.&lt;/li&gt;&#xA;&lt;li&gt;UMA nullifies (or at least greatly reduces) the need to transfer data from  main memory to video memory ans such can be done by bending pointers.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Any Drawback?&lt;/h2&gt;&#xA;&lt;p&gt;A unified memory architecture means that CPU and graphics hardware compete for RAM access. Depending on how much data either component needs to access, congestion can happen. Albeit, the quite high bandwidth and the way memory is accessed make it manageble.&lt;/p&gt;&#xA;&lt;h2&gt;Why EDO RAM in the PS?&lt;/h2&gt;&#xA;&lt;p&gt;At the time of the Playstation, EDO was already an outdated technology, passed by SDRAM were PC100 became standard in 1992. 32 bit wide SDRAM would have provided 400 MB/s. But as well be expensive.&lt;/p&gt;&#xA;&lt;p&gt;Sony picked a design with separate main and video RAM so main RAM had only to go along with the CPU speed - and &lt;em&gt;needed&lt;/em&gt; to be 32 bit wide to for sufficient thruput. So chips may have been way less expensive, but at the same time board design was more complex and it did need additional logic.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - For simplicity we ignore the dance around the 9th bit some N64 fans love to do :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-01-05T20:09:03.580" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17566" PostTypeId="1" CreationDate="2021-01-06T00:27:55.700" Score="6" ViewCount="397" Body="&lt;p&gt;The Nintendo 64 had a reputation for being great at drawing triangles, but not so good at texturing them, so that many games fell back on heavy use of untextured (though Gouraud shaded) triangles, giving them a more cartoony look compared to PlayStation games.&lt;/p&gt;&#xA;&lt;p&gt;What was it about the hardware that made the N64 bad at textures?&lt;/p&gt;&#xA;&lt;p&gt;I have seen it claimed that it was because the texture cache was only 4K. But according to &lt;a href=&quot;https://en.wikipedia.org/wiki/PlayStation_technical_specifications#Graphics_processing_unit_(GPU)&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/PlayStation_technical_specifications#Graphics_processing_unit_(GPU)&lt;/a&gt; the PlayStation texture cache was only 2K!&lt;/p&gt;&#xA;&lt;p&gt;It can't been lack of memory bandwidth; according to the answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17564/how-fast-was-rambus-compared-to-regular-edo-ram&quot;&gt;How fast was Rambus compared to regular EDO RAM?&lt;/a&gt; the RDRAM on the N64 was considerably faster than the EDO RAM on the PlayStation. Even if you divide it by two to take into account the need for CPU and GPU to share the unified memory, it's still faster.&lt;/p&gt;&#xA;&lt;p&gt;I have seen it suggested that it was because of memory latency, but in the light of the above, it seems unlikely that the N64 had worse memory latency than the PlayStation.&lt;/p&gt;&#xA;&lt;p&gt;I have seen it suggested that it was something to do with lack of DMA and the need for coordination between the CPU and GPU. Is there any truth in that? If so, what exactly was the issue? Or was it something else?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: Found a hint at &lt;a href=&quot;https://forum.beyond3d.com/threads/how-bad-a-limitation-was-the-4k-texture-cache-in-n64.40696/&quot; rel=&quot;noreferrer&quot;&gt;https://forum.beyond3d.com/threads/how-bad-a-limitation-was-the-4k-texture-cache-in-n64.40696/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Back to the original question, i was a pretty big limitation, as mentioned it wasn't a cache in the traditional sense it was an explicitly loaded block of memory that was the only place you could render from. It could not be updated mid triangle, so if you wanted a texture that wouldn'y fit, you were stuck with adding more tris and doing more explict loads, which generally led to poor performance.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2021-01-06T03:38:13.347" LastActivityDate="2021-01-06T03:38:13.347" Title="Why was the Nintendo 64 bad at textures?" Tags="&lt;graphics&gt;&lt;memory&gt;&lt;performance&gt;&lt;nintendo-64&gt;" AnswerCount="0" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17567" PostTypeId="1" AcceptedAnswerId="17568" CreationDate="2021-01-06T05:13:41.027" Score="16" ViewCount="4749" Body="&lt;p&gt;The PlayStation was notorious for texture warp, because it didn't have the transistor budget to implement perspective: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5019/why-do-3d-models-on-the-playstation-1-wobble-so-much&quot;&gt;Why do 3D models on the PlayStation 1 “wobble” so much?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But wait a minute. The Super Nintendo implements perspective in mode 7, and that's a previous generation machine. Play a game like Mario Kart and you can see perspective being implemented perfectly.&lt;/p&gt;&#xA;&lt;p&gt;A comment on &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5323/where-did-sonys-3d-graphics-hardware-in-the-ps1-originate&quot;&gt;Where did Sony&amp;#39;s 3D graphics hardware in the PS1 originate?&lt;/a&gt; reminded me of this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sony invested quite a few years into this, and their GPU is very simple. Given that it discards perspective, the work of filling each polygon scan line is really little beyond the work the SNES does for each line of the display in Mode 7.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;... Little beyond? It looks to me like it is significantly &lt;em&gt;less&lt;/em&gt;, as the SNES did implement perspective. Now to be sure, the SNES only did this for a single background layer, not for arbitrary triangles, but within that context, didn't it do more than the PS1?&lt;/p&gt;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-06T06:33:50.750" Title="How did SNES render more accurate perspective than PS1?" Tags="&lt;graphics&gt;&lt;snes&gt;&lt;sony-playstation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17568" PostTypeId="2" ParentId="17567" CreationDate="2021-01-06T06:08:36.907" Score="31" Body="&lt;p&gt;The SNES hardware doesn’t implement perspective, it implements affine transforms of the background layer. Affine transforms aren’t sufficient for perspective.&lt;/p&gt;&#xA;&lt;p&gt;Perspective is implemented by changing the affine transform at every scanline, to change the scale. This is what allows parallel lines to be transformed so that they aren’t parallel on-screen, thus providing perspective...&lt;/p&gt;&#xA;&lt;p&gt;The SNES does provide additional features which make all this possible; &lt;a href=&quot;https://wiki.superfamicom.org/grog%27s-guide-to-dma-and-hdma-on-the-snes&quot; rel=&quot;noreferrer&quot;&gt;HDMA mode&lt;/a&gt; allows fast changes during the horizontal blank.&lt;/p&gt;&#xA;&lt;p&gt;All this still only provides perspective on the projected background layer, so sprites still “float” without matching transforms. See &lt;a href=&quot;https://arstechnica.com/gaming/2019/04/hd-emulation-mod-makes-mode-7-snes-games-look-like-new/&quot; rel=&quot;noreferrer&quot;&gt;this Ars story on bsnes’ HD mode 7&lt;/a&gt; for some nice screenshots illustrating this.&lt;/p&gt;&#xA;&lt;p&gt;Effectively, the SNES still allowed “racing the beam” techniques to be used to supplement its hardware capabilities in software. On platforms with full-scene rendering, such as the PlayStation, this was no longer possible.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-01-06T06:33:50.750" LastActivityDate="2021-01-06T06:33:50.750" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="17569" PostTypeId="2" ParentId="17559" CreationDate="2021-01-06T07:52:55.460" Score="62" Body="&lt;p&gt;@user253751 and @WimC are correct, this fade &lt;em&gt;is&lt;/em&gt; achieved by drawing a semi-transparent rectangle over the screen, but using a transparency mode where the rectangle's color is subtracted from the color of the background.&lt;/p&gt;&#xA;&lt;p&gt;The PS1 has four semi-transparency modes (search &lt;a href=&quot;http://hitmen.c02.at/files/docs/psx/gpu.txt&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; for &amp;quot;Semi Transparency&amp;quot;). The one used here is mode 2 in which the result of drawing a color is&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;(result) = (background ie. color in framebuffer) - (foreground ie. color being drawn)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(In Open GL, this corresponds to the blend equation &lt;code&gt;GL_FUNC_REVERSE_SUBTRACT&lt;/code&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;At the beginning of the fade, a black rectangle is drawn over the screen with this transparency mode (foreground = 0 so result = background), and the color gradually increases until at the end of the fade the rectangle is white (so result = 0).&lt;/p&gt;&#xA;&lt;p&gt;Pseudo-code for Back to Nature:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def start_fade():&#xA;    fade_color = 0&#xA;&#xA;def update_fade():&#xA;    fade_color += 25  # approximate&#xA;    frames_til_next_fade_update = 2&#xA;&#xA;def draw():&#xA;    draw_regular_scene()&#xA;    if fading:&#xA;        set_semitransparency_mode(BackgroundMinusForeground)&#xA;        draw_fullscreen_quad(color=rgb(fade_color, fade_color, fade_color))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I applied this method to a screenshot to check it (GIF slowed down for easier viewing).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6N1Do.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6N1Do.gif&quot; alt=&quot;This method applied to a screenshot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(All of this was discovered by hacking on the neat &lt;a href=&quot;https://github.com/stenzek/duckstation&quot; rel=&quot;noreferrer&quot;&gt;duckstation&lt;/a&gt; emulator to check what Back to Nature was doing.)&lt;/p&gt;&#xA;" OwnerUserId="20471" LastEditorUserId="20471" LastEditDate="2021-01-06T08:07:43.427" LastActivityDate="2021-01-06T08:07:43.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17570" PostTypeId="2" ParentId="2042" CreationDate="2021-01-06T08:11:47.893" Score="3" Body="&lt;p&gt;Raffzahn:  I have had possession of this Wang VS since new in 1987 and I have every manual, document, advertisement, cable and accessory to go with it.  I have two Wang branded 928 terminals and the unique twin wires to go with it too.  I still have the terminal and print servers (AST 286 PC with special 16 Bit ISA interface card) and associated software.  The terminal/print servers allowed it to talk to devices on an ethernet network.  I plan to keep it together until I can transfer it to the custody of a Canadian Computer museum (none currently exists).&lt;/p&gt;&#xA;&lt;p&gt;Right now the main processor is in my basement and the mock-computer room I built is two floors above it in my house.  I am waiting for the Pandemic to lift before I hire movers to carry the Wang VS and an IBM AS/400 I also own up 3 flights of stairs.  My wife and I just aren't strong enough to lift them.&lt;/p&gt;&#xA;" OwnerUserId="20455" LastActivityDate="2021-01-06T08:11:47.893" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17571" PostTypeId="2" ParentId="2042" CreationDate="2021-01-06T08:22:49.613" Score="1" Body="&lt;p&gt;John O:  The more contemporary Wang VS CPUs employed a writeable control store so that they could load processor core firmware at the time of IPL.  They came standard with software to load an IBM 360 compatible instruction set because this gave Wang access to a larger pool of talented programmers.  They were not IBM compatible in any respect and the rest of the system architecture and the operating system were a complete departure from anything offered by IBM.  They were optimized for a fast online user interaction and didn't really provide much support for batch processing.&lt;/p&gt;&#xA;&lt;p&gt;An Wang, the founder, was a former IBM employee and a substantial IBM shareholder who didn't like the way things were done at IBM so he designed his systems to be completely different.&lt;/p&gt;&#xA;&lt;p&gt;We did all our programming in high level languages so I don't think I have any assembler documentation.  I'll go through what I have to see if anything would be useful.&lt;/p&gt;&#xA;&lt;p&gt;On another issue:&lt;/p&gt;&#xA;&lt;p&gt;I noticed that your table 3xxx - Technology companies &amp;amp; businesses doesn't have an entry for Cincinnati Milacron, a process automation and industrial robot manufacturer who for a period of time manufactured IBM source code compatible data processing systems.  It was described to customers as an IBM compatible (targeting the System/3) but it had an 18 bit word so I don't think it was a clone of any IBM CPU.  I wrote some software for them at a data processing VAR in the early 1980s.  The only programming language we had was RPG II and it could execute IBM standard JCL. It supported 1 VDT workstation and our applications were all batch oriented.&lt;/p&gt;&#xA;&lt;p&gt;Rob Carnegie&lt;/p&gt;&#xA;" OwnerUserId="20455" LastEditorUserId="20455" LastEditDate="2021-01-06T08:44:35.583" LastActivityDate="2021-01-06T08:44:35.583" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17573" PostTypeId="2" ParentId="1976" CreationDate="2021-01-06T11:15:16.217" Score="3" Body="&lt;p&gt;The Future Computers FX/20 and FX/30 models from the mid-1980s ran DOS or (C)CP/M. They loaded a character map during boot, and had a utility to edit the characters.&lt;/p&gt;&#xA;" OwnerUserId="20473" LastActivityDate="2021-01-06T11:15:16.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17574" PostTypeId="2" ParentId="17555" CreationDate="2021-01-06T11:18:24.993" Score="1" Body="&lt;p&gt;One thing that can give emulators away (not reliably, but it might be good enough in practice) is how undefined the results are when you do something that is supposed to yield an undefined result. One thing that comes to mind is what you read from a bus when there is actually nothing writing to it, or using hardware in a way that is known to cause glitches some times but not all the time.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2021-01-06T11:18:24.993" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17575" PostTypeId="2" ParentId="17559" CreationDate="2021-01-06T11:41:42.633" Score="5" Body="&lt;p&gt;For PC VGA, which definitely has just 256 colours on screen that are picked from the 16 million available via a look up table, such fades are &lt;em&gt;definitely&lt;/em&gt; done by changing just the palette definition every 0.1 seconds or something like that.&lt;/p&gt;&#xA;&lt;p&gt;If you do it naively, you just substract a fixed value from each R, G, B component on each frame. The consequence is that brighter colours take longer to reach black (zero) since they start from higher RGB values. That's what seems to be happening in your screenshots.&lt;/p&gt;&#xA;&lt;p&gt;I'm not familiar with the PS1 capabilities enough to guess exactly at what's happening there, but Harvest Moon seems to have been available on less powerful devices as well, that were definitely paletted. So I'm guessing that's what you're seeing there.&lt;/p&gt;&#xA;&lt;p&gt;Edit: Oh ok, the PS1 does it differently as @scurest said. My answer is only good for older, paletted devices.&lt;/p&gt;&#xA;" OwnerUserId="20462" LastActivityDate="2021-01-06T11:41:42.633" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17577" PostTypeId="2" ParentId="1976" CreationDate="2021-01-06T18:31:32.957" Score="2" Body="&lt;p&gt;Redefinable character sets aren't limited to CRT-based computers.  Many 5x7 or 5x8 dot matrix displays are driven using an HD44780 or compatible chip, which allows eight of the characters to be redefined.  I don't know if any vintage portable computers used such displays, but there were certainly some that had text displays which were 4x40 or smaller, and it would hardly be surprising if some of them did use such displays.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-01-06T18:31:32.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17578" PostTypeId="2" ParentId="2042" CreationDate="2021-01-07T02:55:43.533" Score="1" Body="&lt;p&gt;Simon Kissane: I have tried to contact TransVirtual Systems to see if they would consider some kind of Retro-Computing offering but I've never even had a reply.  I suspect the company may no longer exist.  In any case, they probably could only sell the product to somebody that already owns a license to the operating system and development tools etc as I assume they are only emulating the hardware environment.&lt;/p&gt;&#xA;&lt;p&gt;I think there is was working Wang VS80 at a museum in Rhode Island, it is about 5 year earlier model than my VS 6E.&lt;/p&gt;&#xA;" OwnerUserId="20455" LastActivityDate="2021-01-07T02:55:43.533" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17580" PostTypeId="1" CreationDate="2021-01-07T15:03:07.750" Score="3" ViewCount="583" Body="&lt;p&gt;There are repositories of tape software available online, for example &lt;a href=&quot;https://www.cpc-power.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;CPC Power&lt;/a&gt; for Amstrad CPC machines.&lt;/p&gt;&#xA;&lt;p&gt;What is the fastest and simplest way to load such games onto an unmodified computer, with the minimum of extra equipment? I am using an Amstrad CPC6128, but it would be helpful to also include other machines that used tape decks, such as ZX Spectrum, Commodore 64 or BBC Micro.&lt;/p&gt;&#xA;&lt;p&gt;Note: I intend this question as a single place to store the most efficient and effective ways for each machine to download and run software without additional hardware (other than simple cables etc). Obviously, some internet connected device is required such as a computer or phone!&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2021-01-07T21:29:21.817" LastActivityDate="2021-01-09T01:43:05.313" Title="What are quick ways to load downloaded tape images onto an unmodified 8-bit computer?" Tags="&lt;commodore-64&gt;&lt;zx-spectrum&gt;&lt;bbc-micro&gt;&lt;cpc&gt;&lt;tape-image&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17581" PostTypeId="2" ParentId="17580" CreationDate="2021-01-07T15:03:07.750" Score="9" Body="&lt;p&gt;This is a wiki answer, so please amend with additional solutions, or improve the ones below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;CPC Tape Software&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Tape images are normally downloaded as a .cdt file, the same file format as the Spectrum .tzx tape format. Though these do not contain any sound data, they can be played back on an Android or iOS phone, using an app such as '&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.baltazarstudios.playzxtape&quot; rel=&quot;nofollow noreferrer&quot;&gt;PlayZX&lt;/a&gt;' or '&lt;a href=&quot;https://itunes.apple.com/au/app/speccy-tape/id460743976&quot; rel=&quot;nofollow noreferrer&quot;&gt;Speccy Tape&lt;/a&gt;'.&lt;/p&gt;&#xA;&lt;p&gt;These 'tapes' can be recorded onto physical cassettes with an appropriate recorder, or connected directly to a CPC464 using a tape adapter. The original CPC6128 has a tape I/O port, to which a suitable cable can be connected that will plug into a headphone socket on a phone or cassette player. Unfortunately, the CPC6128+ models removed this port, so a hardware modification would be necessary to enable it.&lt;/p&gt;&#xA;&lt;p&gt;These tapes still load in real time so can easily take 6-10 minutes to load a game. There is a limited repository of much faster compressed tape images at &lt;a href=&quot;http://cngsoft.no-ip.org/cpc_lzx.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;CNGSoft&lt;/a&gt;, which will load in 1-2 minutes, using the above method. I download these short tapes on my Android phone and then use PlayZX to send them to my CPC6128.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2021-01-08T17:22:46.637" LastActivityDate="2021-01-08T17:22:46.637" CommentCount="2" CommunityOwnedDate="2021-01-07T15:03:07.750" ContentLicense="CC BY-SA 4.0" />
  <row Id="17583" PostTypeId="2" ParentId="17564" CreationDate="2021-01-07T20:01:21.387" Score="2" Body="&lt;p&gt;Do not confuse &amp;quot;fast&amp;quot; in terms of bandwidth (bytes per second) with &amp;quot;fast&amp;quot; in terms of latency (nS from beginning of address request till when bytes are in cache).  Rambus used a highly serialized protocol that required multiple clocks to even start a transaction, and more clocks to transmit the address values.&lt;/p&gt;&#xA;&lt;p&gt;Thus the combination of the N64 memory control unit and the Rambus memory was &amp;quot;fast&amp;quot; in terms of the rate of bytes per second flying back, but &amp;quot;slow&amp;quot; in terms of the number of clocks from start of memory transaction to end of memory transaction.  Thus it was fast (bytes per second) for large bursts of data, but &amp;quot;slow&amp;quot; if you wanted a single byte from memory right now (in terms of number of stalled clock cycles on in-order cache misses).&lt;/p&gt;&#xA;&lt;p&gt;EDO memory was &amp;quot;slow&amp;quot; in terms of clock speed and peak bandwidth, but an address could get sent in a single (2 phase) clock, and more bits of data came back in one clock.  Thus it could be faster (lower latency) for small item fetches.&lt;/p&gt;&#xA;&lt;p&gt;The (cancelled) Magic Carpet follow-on project at SGI/MIPs switched (back) to using SDRAM because of various latency issues found in developing software for the Reality Engine.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2021-01-07T20:07:02.630" LastActivityDate="2021-01-07T20:07:02.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17584" PostTypeId="2" ParentId="17580" CreationDate="2021-01-07T23:15:31.493" Score="5" Body="&lt;p&gt;&lt;strong&gt;For the ZX Spectrum:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sorted by amount of non standard modern equipment needed (less to more):&lt;/p&gt;&#xA;&lt;p&gt;A smartphone with SpeccyTape (IOS, unfortunately, now unmaintained and not available for 64 bit devices) or PlayZX (Android) and a stereo to mono cable.&lt;/p&gt;&#xA;&lt;p&gt;Or&lt;/p&gt;&#xA;&lt;p&gt;TZXDuino / TAPDuino: hobbyst grade gadget (built and sold in several places) that essentially does the same as SpeccyTape/PlayZX, but with a more suitable (powerful) audio output.&lt;/p&gt;&#xA;&lt;p&gt;Or&lt;/p&gt;&#xA;&lt;p&gt;DivMMC device: plugged in the expansion bus. Allows almost instant load of unprotected TAP files. For the CPC computer, the equivalent would be a M4 Board. Some incarnations of the DivMMC device include the DivMMC Future and DivMMC enJOY.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="105" LastEditDate="2021-01-08T13:50:21.070" LastActivityDate="2021-01-08T13:50:21.070" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17585" PostTypeId="1" AcceptedAnswerId="17586" CreationDate="2021-01-07T23:23:38.857" Score="14" ViewCount="1445" Body="&lt;p&gt;I'm wondering how to write a program in Z80 assembler that discovers the value stored in the SP register.&lt;/p&gt;&#xA;&lt;p&gt;From what I've seen, the only instructions that touch the SP register are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;LD SP, HL/IX/IY&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;EX (SP), HL/IX/IY&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;PUSH / POP&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;However, none of them seem to load the address stored in the SP register anywhere. Is there a way to do it?&lt;/p&gt;&#xA;" OwnerUserId="20493" LastActivityDate="2021-01-08T14:20:41.040" Title="How can a Z80 assembly program find out the address stored in the SP register?" Tags="&lt;assembly&gt;&lt;z80&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17586" PostTypeId="2" ParentId="17585" CreationDate="2021-01-07T23:28:13.617" Score="25" Body="&lt;p&gt;The standard way would be adding it to HL. After clearing HL that is.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    LD  HL,0&#xA;    ADD HL,SP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Voila.&lt;/p&gt;&#xA;&lt;p&gt;This is not only already available with the 8080,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    DAD  SP   ; Same opcode (39h), same workings&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;thus preferable, but as well very handy when setting up a pointer to parameters on stack as, of course, any other constant than 0 can be used and added.&lt;/p&gt;&#xA;&lt;p&gt;Now, the Z80 did in addition bring a way to store SP with the ED group:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    LD  (loc),SP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;With 4 bytes (ED 73 ll hh) it's as long as the LD/ADD sequence and only one T-cycle faster (20 vs. 21) while restricting the store to a fixed address, which may not be always handy - accessing SP is quite often done during task switch or alike where hard coded addresses are a bad idea.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-01-08T14:20:41.040" LastActivityDate="2021-01-08T14:20:41.040" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17587" PostTypeId="1" CreationDate="2021-01-08T05:36:25.247" Score="3" ViewCount="168" Body="&lt;p&gt;According to a competition programming site, where users can submit single source files to be compiled and run, &amp;quot;programs are run on a modern processor but times are scaled to a 700 MHz Pentium III ... with 16MB datasize limit and 1MB stacksize limit&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;How can I estimate this scaling factor when running on a modern(ish) processor, such as a i3-8100 CPU @ 3.60GHz? Is this even possible, or would runtimes vary too greatly due to things like cache, instruction set, different clock speeds, etc. too be able to get a useful number?&lt;/p&gt;&#xA;" OwnerUserId="8230" LastActivityDate="2021-01-08T05:36:25.247" Title="Scaling compute times to a Pentium III 700 MHz" Tags="&lt;cpu&gt;&lt;intel&gt;" AnswerCount="0" CommentCount="6" ClosedDate="2021-01-08T17:31:30.010" ContentLicense="CC BY-SA 4.0" />
  <row Id="17588" PostTypeId="2" ParentId="16853" CreationDate="2021-01-08T14:06:06.703" Score="0" Body="&lt;p&gt;I have programmed on a device with paged flash memory (Hypercom Z80 based credit card terminal). It used a very simple scheme where the top 32K was paged (I think the terminal had 2mb flash). The bottom 8K was ROM (startup code, page switching and shared run time code). The stack was set to the top of the lower 32K RAM (visable to program at any time was 32k flash, 24k ram and 8k rom). A simple 8 bit latch was used for page selection (created extended address bus with A16 to A23). A cross page call made using rst instruction encodes as [rstn][8bit-page][16bit-address]. The compiler we were using supported the 'long' call instruction. Note that if you want a multi card system you just need to bring out the A16-A23 lines to your bus and decode on individual cards as required (basic memory selection logic, no special hardware needed). I can't remember the code exactly but it was basically, push current page, get address from stack, get page number from stack and output to latch, call address, pop and restore page and return.&lt;/p&gt;&#xA;&lt;p&gt;When I wanter a faster call i would create a small stub in ram:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;stub_func:&#xA;  ld a, far_page&#xA;  out control_port,a&#xA;  call far_func&#xA;  ld a, local_page&#xA;  out control_port, a&#xA;  ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1956" LastActivityDate="2021-01-08T14:06:06.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17589" PostTypeId="1" AcceptedAnswerId="17591" CreationDate="2021-01-08T17:07:30.277" Score="10" ViewCount="601" Body="&lt;p&gt;I need to make a 25 pin Sub-D extension cable for my C128D keyboard. I think it may be as easy as connecting male pins from one side to corresponding female pins on the other side, but need reassurance please. Would be shame to blow something up.&lt;/p&gt;&#xA;&lt;p&gt;I understand I can't simply use parallel or serial off the shelf as wires are laid out differently.&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="15334" LastEditDate="2021-01-13T19:18:11.463" LastActivityDate="2021-01-13T19:18:11.463" Title="Extending C128D Keyboard cable" Tags="&lt;keyboards&gt;&lt;commodore-128&gt;&lt;hardware-mods&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17590" PostTypeId="2" ParentId="17589" CreationDate="2021-01-08T18:59:39.510" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I think it may be as easy as connecting male pins from one side to corresponding female pins on the other side,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Exactly that.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but need reassurance please. Would be shame to blow something up.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For what? I mean, which logic gives that a strict 1:1 connection can blow up anything? After all, i1:1 means that there are no other connections made, doesn't it?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I understand I can't simply use parallel or serial off the shelf as wires are laid out differently.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Why not? Parallel cables are exactly that, one to one connections. Just sometimes not all wires.&lt;/p&gt;&#xA;&lt;p&gt;So most simple solution is buying one from your valued local store or mail order shop.&lt;/p&gt;&#xA;&lt;p&gt;If you insist in dong it yourself, then get a 25 lane &lt;a href=&quot;https://en.wikipedia.org/wiki/Ribbon_cable&quot; rel=&quot;noreferrer&quot;&gt;flat ribbon&lt;/a&gt;, two flat-ribbon/Sub-D plugs, mount them and done...&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-01-08T18:59:39.510" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17591" PostTypeId="2" ParentId="17589" CreationDate="2021-01-08T20:27:44.710" Score="11" Body="&lt;p&gt;You can absolutely do this, I've used a 6 foot extension like this before on my 128DCR with no signaling issues.  You are correct that you need all 25 pins wired straight through which a normal DB25m/f cable for serial / modem won't provide (and a normal Centronics cable obviously has the wrong connector on one end).  You need to look for a IEEE 1284 DB25 M/F cable which are designed to be used as an &lt;strong&gt;extension&lt;/strong&gt; for a Centronics parallel printer cable.  These are commonly available from the usual online shops, Monoprice has a 6' one &lt;a href=&quot;https://www.monoprice.com/product?p_id=384&quot; rel=&quot;noreferrer&quot;&gt;listed&lt;/a&gt; for less than $6USD currently.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Eq93o.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Eq93o.jpg&quot; alt=&quot;IEEE-1284 Compliant Cable&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="320" LastEditorUserId="320" LastEditDate="2021-01-08T20:42:23.850" LastActivityDate="2021-01-08T20:42:23.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17592" PostTypeId="1" CreationDate="2021-01-08T20:29:03.103" Score="5" ViewCount="161" Body="&lt;p&gt;A slightly arcane question that I think is relevant to a chapter of the history of game consoles whose dynamics I'm trying to understand.&lt;/p&gt;&#xA;&lt;p&gt;In the mid-nineties, several companies were developing optical disks with enough capacity for movies.  The default outcome would've been a format war, but instead they formed an alliance called the DVD Consortium, subsequently renamed to the DVD Forum, where they would all pool their patents, agree on a format, and each get a percentage of royalties.&lt;/p&gt;&#xA;&lt;p&gt;The royalties were significant. How much were they, in dollars per unit? I would be interested in knowing that, and have not been able to find a figure, but at any rate, the sum was enough to deter Microsoft and Nintendo from including DVD movie capability out of the box in the Xbox and Wii, despite these machines physically containing DVD drives.&lt;/p&gt;&#xA;&lt;p&gt;Sony did include DVD movie capability out of the box in the PlayStation 2. How many people made their sixth generation console purchase decision because of this? Hard to say, but anecdotally, it was significant. In the end, the PS2 became the most successful console of all time, 155 million units sold.&lt;/p&gt;&#xA;&lt;p&gt;Why did Sony make a different decision to Microsoft and Nintendo? One obvious possibility is that being a founding member of the DVD Forum, they were entitled to a percentage of the royalties, which meant they would get some of their own money back, essentially having a discount on DVD movie player capability, making it cheaper for them to provide.&lt;/p&gt;&#xA;&lt;p&gt;But how much of a discount? &lt;a href=&quot;https://en.wikipedia.org/wiki/DVD_Forum&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/DVD_Forum&lt;/a&gt; says ten companies founded the organization, then promptly lists twelve (including Sony). If we take the smaller number, and assume royalties were divided equally, that would give Sony a 10% discount, which seems unlikely to be enough to base the decision on.&lt;/p&gt;&#xA;&lt;p&gt;Did they actually get a larger percentage? Or did they make the decision to include DVD movie player capability out of the box in the PS2 – a highly consequential decision, that would contribute to the most successful game console of all time – for some other reason?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-08T20:29:03.103" Title="What percentage of DVD forum royalties did Sony get?" Tags="&lt;history&gt;&lt;sony-playstation&gt;&lt;sony&gt;&lt;dvd&gt;" AnswerCount="0" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17593" PostTypeId="2" ParentId="16810" CreationDate="2021-01-08T20:40:52.700" Score="3" Body="&lt;p&gt;Additionally you had full read/write and execute access on any other station's RAM (including video RAM) if you used assembly language. This is without any authentication required, so there was no security in that aspect.&lt;/p&gt;&#xA;" OwnerUserId="20497" LastEditorUserId="20497" LastEditDate="2021-01-11T18:50:28.067" LastActivityDate="2021-01-11T18:50:28.067" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17595" PostTypeId="2" ParentId="17580" CreationDate="2021-01-09T01:43:05.313" Score="1" Body="&lt;p&gt;BBC micro&lt;/p&gt;&#xA;&lt;p&gt;I haven’t done this but I believe you could instigate a DMA transfer via the 2MHz ‘tube’ interface and write the image directly into RAM.  That would require additional hardware but no modifications to the machine itself.&lt;/p&gt;&#xA;" OwnerUserId="19372" LastActivityDate="2021-01-09T01:43:05.313" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17596" PostTypeId="1" CreationDate="2021-01-09T13:09:24.207" Score="2" ViewCount="106" Body="&lt;p&gt;I have used the MAME debugger a lot with arcade machine emus.&lt;/p&gt;&#xA;&lt;p&gt;Now I would like to use it to help debug a game I build for Amiga. Having set up A500 emulation in MAME by adding the roms, I can start it, but I cannot enter the debugger.&lt;/p&gt;&#xA;&lt;p&gt;Using '-debug' option does not work. There is also no config-menu on 'TAB'. I cannot find it on the mame documentation. It seems quite sparse on home-computers.&lt;/p&gt;&#xA;&lt;p&gt;Is there a way to use the debugger here?&lt;/p&gt;&#xA;&lt;p&gt;I using MAME 0.226 with this commandline:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;mame64.exe a2000n -debug -flop C:\AMIGA\g.adf&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;MAME is build from source, so if the solution requires changing some compiler options or such, this is no issue.&lt;/p&gt;&#xA;" OwnerUserId="20500" LastActivityDate="2021-01-09T13:09:24.207" Title="Use MAME debugger for Amiga software" Tags="&lt;amiga&gt;&lt;debugging&gt;&lt;mame&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2021-01-09T18:32:28.027" ContentLicense="CC BY-SA 4.0" />
  <row Id="17598" PostTypeId="1" AcceptedAnswerId="17599" CreationDate="2021-01-09T22:35:56.357" Score="6" ViewCount="1406" Body="&lt;p&gt;There have been CPUs with exposed branch delays, such as early MIPS: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2616/what-was-the-first-cpu-with-exposed-pipeline&quot;&gt;What was the first CPU with exposed pipeline?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Later MIPS kept the delay slots from the early MIPS, though by that time, it wasn't about exposing hardware pipeline stages – which would have increased the number of delay slots – but keeping compatibility with the early ones.)&lt;/p&gt;&#xA;&lt;p&gt;Did any CPU ever expose load delays? So that if you try to load a register from memory, then use the contents of that register, instead of pausing until the new value is loaded, for the next N clock cycles, you just get the previous value that was in the register?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-10T19:40:00.910" Title="Did any CPU ever expose load delays?" Tags="&lt;history&gt;&lt;cpu&gt;&lt;architecture&gt;" AnswerCount="1" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17599" PostTypeId="2" ParentId="17598" CreationDate="2021-01-09T23:14:06.803" Score="13" Body="&lt;p&gt;Yes, it happened. MIPS I (R2000/R3000) did suffer from Load Delay Slots. In practice on R2000, on cache hit the next instruction would typically see the old value of the load-result register; on cache miss it would see the load result.  So you couldn't usefully take advantage of it and there were no on-paper guarantees of anything, unlike on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Mill_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mill&lt;/a&gt; (*1).&lt;/p&gt;&#xA;&lt;p&gt;Other than MIPS, the decision to use load delay slots was never an issue. Mostly because inserting a delay does not really save much hardware. Stalling the pipeline only needs one (or two) rather simple comparator checking if the previous target is used as source in the next instruction.&lt;/p&gt;&#xA;&lt;p&gt;Detecting dependencies by adding a little logic can be used to kill two birds with one stone as any code, independent of ordering will run, while at the same time 'intelligent' instruction ordering can be used to take advantage of the load delay.&lt;/p&gt;&#xA;&lt;p&gt;This method has already been used by (e.g) /360 in the 70s, and assembly programmers did take care thereof (or not, depending on their quality).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;For RISC CPUs this logic can, for all practical purpose, be seen like an automatic 'insertion' of a NOP. Something otherwise the compiler had to do whenever it couldn't find an instruction to move into the load slot.&lt;/p&gt;&#xA;&lt;p&gt;A simple addition like &lt;code&gt;A+=B;&lt;/code&gt; would create at least two load slots (plus maybe a store slot) which more often than not can't be filled:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    L   R1,VAL1&#xA;    NOP &#xA;    A   R1,VAL2&#xA;    NOP&#xA;    ST  R1,VAL1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is by no means a rare kind of code - programs are full of such lines.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;Load slots bring almost no improvement but add considerable code bloat.&lt;/strong&gt; (*2)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The whole situations of load delays differs a lot from branch delays, as the load delay happens to data access in linear code execution, not stalling code fetch. In contrast a (conditioned) jump instructions always needs at least one additional code fetch cycle that can't be avoided - or more exact discard the already fetched next instruction without using that cycle for operation. A branch delay slot means nothing else that this already fetched instruction gets executed. This situation does not exist in linear, non-branching code.&lt;/p&gt;&#xA;&lt;p&gt;So one can just speculate why the R2000 had that load delay slot. IMHO they tried to make it more simple than it has to be. They even named the ISA after this fact: &lt;a href=&quot;https://stackoverflow.com/questions/15878994/what-is-an-interlocked-pipeline-as-in-the-mips-acronym&quot;&gt;MIPS = Microprocessor without Interlocked Pipeline Stages&lt;/a&gt; means it doesn't stall for anything, except unpredictable long stalls (cache miss/RAM access).&lt;/p&gt;&#xA;&lt;p&gt;Later, when the load delay slot was removed (&lt;a href=&quot;https://en.wikipedia.org/wiki/MIPS_architecture#MIPS_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIPS II&lt;/a&gt; / &lt;a href=&quot;https://www.linux-mips.org/wiki/Instruction_Set_Architecture#MIPS_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;R6000&lt;/a&gt;), existing R2000/R3000-compatible code was full of NOPs in cases where the compiler (or optimizing assembler) couldn't fill the load-delay slot with useful work. These cases were not as rare as MIPS architects may have hoped. It was not helping anything, only bloating the code.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Unlike &lt;a href=&quot;https://millcomputing.com/topic/introduction-to-the-mill-cpu-programming-model-2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Mill architecture&lt;/a&gt; where a load instruction can indicate how many instructions later the result should be ready, allowing use of the old value for up to a few instructions, and reuse of the address register. The Mill is still a paper architecture, though, not a CPU that actually existed.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Same is as well true for branch slots, except they happen less often.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="3316" LastEditDate="2021-01-10T19:40:00.910" LastActivityDate="2021-01-10T19:40:00.910" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="17600" PostTypeId="1" AcceptedAnswerId="17601" CreationDate="2021-01-10T01:13:28.770" Score="5" ViewCount="336" Body="&lt;p&gt;I'm trying to work out how a Control Panel applet on Windows 3.1, which interacts with some host-specific hardware, works and as part of this I'd like to dump the contents of memory which the process uses.&lt;/p&gt;&#xA;&lt;p&gt;For example, is there some Windows 3.x equivalent of ProcDump I could use, or a straightforward method of getting DOS DEBUG to dump this memory?  How can I tell what address to dump for a Windows 3.1 &amp;quot;process&amp;quot;?&lt;/p&gt;&#xA;&lt;p&gt;Since this interacts with hardware on a specific host, I'm limited to the 4MB of memory that host has to be able to run any dump or debug tools.&lt;/p&gt;&#xA;&lt;p&gt;Windows is running in standard, not enhanced, mode, in case that makes any difference to tools applicability.&lt;/p&gt;&#xA;" OwnerUserId="7062" LastEditorUserId="15334" LastEditDate="2021-01-13T19:13:48.990" LastActivityDate="2021-01-13T19:13:48.990" Title="Dump process memory of Windows 3.1 control panel applet" Tags="&lt;windows-3.x&gt;&lt;software-recommendation&gt;&lt;debugging&gt;&lt;reverse-engineering&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17601" PostTypeId="2" ParentId="17600" CreationDate="2021-01-10T12:14:59.503" Score="10" Body="&lt;p&gt;Among the Borland Pascal 7 example programs, there is an OWL application called &lt;strong&gt;HeapSpy&lt;/strong&gt;, which can inspect the list of memory blocks allocated by any running Windows module.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/I1koX.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I1koX.png&quot; alt=&quot;HeapSpy&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The demo is pretty simplistic; the only thing it can do with memory dumps is display them in a built-in viewer. But since it comes with source code, it shouldn’t be too hard to expand its functionality.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastActivityDate="2021-01-10T12:14:59.503" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17602" PostTypeId="2" ParentId="11995" CreationDate="2021-01-10T13:49:20.320" Score="5" Body="&lt;p&gt;If you want to get it running on a modern Posix system, here's what you can do.&lt;/p&gt;&#xA;&lt;p&gt;Get the source from &lt;a href=&quot;https://www.funet.fi/pub/archive/comp.sources.misc/volume23/smiley/part01.gz&quot; rel=&quot;nofollow noreferrer&quot;&gt;this archive&lt;/a&gt;. (This is a more recent version than the one cited in the other answer.) Follow the instructions to obtain the files &lt;code&gt;bsearch.c&lt;/code&gt;, &lt;code&gt;Makefile&lt;/code&gt;, etc.&lt;/p&gt;&#xA;&lt;p&gt;In &lt;code&gt;smiley.c&lt;/code&gt;, there is a function &lt;code&gt;explain&lt;/code&gt;, which looks like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;static int&#xA;explain(s)&#xA;    char           *s;&#xA;{&#xA;    int             i;&#xA;&#xA;    if((i = fsearch(s)) == -1)&#xA;        return 0;&#xA;&#xA;    PUTFACE(FD, i);&#xA;    return 1;&#xA;#if 0&#xA;    int     found = 0;&#xA;&#xA;    for (i = 0; i &amp;lt; nfaces; i++)&#xA;    {&#xA;        extern int      strcmp();&#xA;&#xA;        if (strcmp(s, faces[i].face) == 0)&#xA;        {&#xA;            found = 1;&#xA;            PUTFACE(FD, i);&#xA;        }&#xA;    }&#xA;    return found;&#xA;#endif&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Simply replace the lines&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    if((i = fsearch(s)) == -1)&#xA;        return 0;&#xA;&#xA;    PUTFACE(FD, i);&#xA;    return 1;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;with the &lt;code&gt;#if&lt;/code&gt;'d out lines, to obtain&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;static int&#xA;explain(s)&#xA;    char           *s;&#xA;{&#xA;    int             i;&#xA;    int     found = 0;&#xA;&#xA;    for (i = 0; i &amp;lt; nfaces; i++)&#xA;    {&#xA;        extern int      strcmp();&#xA;&#xA;        if (strcmp(s, faces[i].face) == 0)&#xA;        {&#xA;            found = 1;&#xA;            PUTFACE(FD, i);&#xA;        }&#xA;    }&#xA;    return found;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Running &lt;code&gt;make&lt;/code&gt; will produce several compiler warnings, but you should get a working &lt;code&gt;smiley&lt;/code&gt; executable. To check, run &lt;code&gt;smiley &amp;quot;:)&amp;quot;&lt;/code&gt;; the correct output is&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;:)  cheshire cat smile&#xA;:)  happy&#xA;:)  midget smiley&#xA;:)  salamander&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Alternatively, since the program is a rather simple utility based on the &lt;code&gt;faces.in&lt;/code&gt; file, you could probably write an equivalent in Python just as easily.&lt;/p&gt;&#xA;" OwnerUserId="19767" LastEditorUserId="19767" LastEditDate="2021-01-10T15:35:48.217" LastActivityDate="2021-01-10T15:35:48.217" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17603" PostTypeId="1" CreationDate="2021-01-10T15:29:47.077" Score="0" ViewCount="286" Body="&lt;p&gt;The 6502 has the decimal mode, which causes the ALU to always output valid BCD if it's given valid BCD. Of course, you can turn it off, as any sane person always does.&lt;/p&gt;&#xA;&lt;p&gt;I was just looking at the kludges provided by some of the other CPU families. They seem to use a separate opcode to do the same job. It's called &lt;code&gt;daa&lt;/code&gt;, for &amp;quot;decimal adjustment&amp;quot; or whatever. The Z80 sets a flags to say that the last operation was a subtraction, and this influences any following &lt;code&gt;daa&lt;/code&gt;. But the 6800 has no such flag exposed in the status register. So what if an interrupt happens in between?&lt;/p&gt;&#xA;&lt;p&gt;Anyhow, I am looking for some kind of description of how this actually works on the 6800, 6801, 6809. I intend to use this to implement an emulator, so it would be great to also know all the weird edge cases, such as&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;what if the preceding instruction is not an add or subtract operation, but something else that's valid, like &amp;quot;MUL&amp;quot; or &amp;quot;INC&amp;quot;?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;what if the preceding instruction is something that doesn't make sense in decimal, like &amp;quot;XOR&amp;quot; or &amp;quot;AND&amp;quot;?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;what if the two operands to an add or subtract operation were not actually valid BCD?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;What the 6502 does, and I can't see any other sensible way, is to compare the lower half to 0x09, and then maybe both add 0x10 and subtract 0x06, and then do the same on the upper half. But apparently their method was covered by some patent or other, so the earlier ones like 6800 can't have done it this way.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-01-10T15:56:34.573" LastActivityDate="2021-01-10T16:41:26.273" Title="What does the DAA instruction do?" Tags="&lt;6800&gt;&lt;6809&gt;&lt;binary-coded-decimal&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17604" PostTypeId="2" ParentId="17603" CreationDate="2021-01-10T16:19:49.573" Score="7" Body="&lt;p&gt;The DAA instruction on 6800 just works on the accumulator based on the data it contains and the flags register as set by the previous instructions.&lt;/p&gt;&#xA;&lt;p&gt;So it does not know what instruction it was and whether it was valid or not in relation to BCD arithmetic, it simply does what is told.&lt;/p&gt;&#xA;&lt;p&gt;An interrupt happening before DAA instruction will not be an issue, as the flags register gets pushed to stack before entering the interrupt and popped from stack when returning from interrupt.&lt;/p&gt;&#xA;&lt;p&gt;The DAA instruction looks at the carry flag C and half-carry flag H and the value in register A, and determines if it must add 0x00, 0x06, 0x60, or 0x66, and then sets the output flags C,N,Z accordingly.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, the programming manuals for various 6800 processors and clones only describe how it works based on the assumption that the inputs are based on valid operation on BCD numbers, there is no table that describes the operation for any arbitrary input data.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-01-10T16:41:26.273" LastActivityDate="2021-01-10T16:41:26.273" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17605" PostTypeId="1" AcceptedAnswerId="17607" CreationDate="2021-01-10T20:18:53.300" Score="7" ViewCount="1384" Body="&lt;p&gt;What is the largest single file that can be loaded into a C128 using standard Kernal functions (i.e., LOAD, DLOAD, BLOAD). Is it possible to load more than 64kB by overflowing to Bank 1?&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2021-01-11T12:53:52.503" Title="What is the largest single file that can be loaded into a Commodore C128?" Tags="&lt;commodore-128&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17606" PostTypeId="2" ParentId="17605" CreationDate="2021-01-10T21:58:22.463" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What is the largest single file that can be loaded into a C128 using standard Kernal functions (i.e., LOAD, DLOAD, BLOAD).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;LOAD and DLOAD load only as many bytes as given by the file information. In addition they only work reliably with Bank0 and paged in Kernal (*1).&lt;/p&gt;&#xA;&lt;p&gt;BLOAD, by contrast, can load up to 65535 bytes (one less than 64 KiB) into any bank. So while loading into bank 0 is still restricted by other RAM usage and ROM(s) mapped in, loading to any other (RAM) Bank will let you use up to 64 KiB minus 1.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is it possible to load more than 64kB by overflowing to Bank 1?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. The C128 does not manage its banks in a continuous manner. Each is a separate 64 KiB address space with no inherent relation to any other.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Making the RAM writable doesn't really help, as hitting any hardware register will break it - especially hitting the MMU ($FF00).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-01-11T12:53:52.503" LastActivityDate="2021-01-11T12:53:52.503" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17607" PostTypeId="2" ParentId="17605" CreationDate="2021-01-10T22:22:41.480" Score="11" Body="&lt;p&gt;The maximum size file that you can load with the built-in commands is &lt;strong&gt;65280 bytes&lt;/strong&gt;. This is using the address range of $0000-$FEFF for &lt;em&gt;either&lt;/em&gt; BANK. There is no &amp;quot;wrap&amp;quot; ability to extend from bank 0 to 1.&lt;/p&gt;&#xA;&lt;p&gt;All of the BASIC commands (LOAD, DLOAD, BLOAD) rely on the kernal ILOAD code. The limitation is that the ILOAD code will not continue loading once it reaches a destination address &amp;gt;$FF00.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://github.com/mist64/cbmsrc/blob/master/KERNAL_C128_06/load.src&quot; rel=&quot;noreferrer&quot;&gt;source code&lt;/a&gt; tracks this using the variable &lt;code&gt;eah&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-01-10T22:30:56.360" LastActivityDate="2021-01-10T22:30:56.360" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17608" PostTypeId="1" CreationDate="2021-01-11T11:28:11.560" Score="5" ViewCount="683" Body="&lt;p&gt;I own a Macintosh Performa 360 and 420 with a 250 MB drive.&#xA;Currently I plan about migrating to a modern system like Windows Linux or Mac.&lt;/p&gt;&#xA;&lt;p&gt;I could make sure, that I can still read my data, copied to a DOS formatted floppy on my Win XP System and convert them to a current .doc or .pdf.&lt;/p&gt;&#xA;&lt;p&gt;However copying roughly 250m MB via floppies is not a very comfortable way.&#xA;That's why I am looking for a suitable way to mount the 250MB HDD on my Linux or Windows (or even Mac?).&lt;/p&gt;&#xA;&lt;p&gt;I tried the following&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;hfsutils on Linux (&lt;a href=&quot;https://www.mars.org/home/rob/proj/hfs/&quot; rel=&quot;noreferrer&quot;&gt;https://www.mars.org/home/rob/proj/hfs/&lt;/a&gt;) leading to an Input Output Error&lt;/li&gt;&#xA;&lt;li&gt;hfsexplorer (&lt;a href=&quot;https://www.catacombae.org/hfsexplorer/&quot; rel=&quot;noreferrer&quot;&gt;https://www.catacombae.org/hfsexplorer/&lt;/a&gt;) which can't find any hfs-filesystem on the disk.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I am doing all those experiments with an IDE to USB converter from an outdated external drive. I hope you guys can give me a hint.&lt;/p&gt;&#xA;&lt;p&gt;Best to all readers,&#xA;Ben&lt;/p&gt;&#xA;&lt;p&gt;Further Reading:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1585/a-good-method-for-formatting-a-modern-device-in-hfs-not-hfs/&quot;&gt;A good method for formatting a modern device in HFS (Not HFS+)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="20508" LastActivityDate="2021-01-12T11:43:22.563" Title="How to mount Macintosh Performa's HFS (not HFS+) Filesystem" Tags="&lt;apple-macintosh&gt;&lt;hfs&gt;&lt;powerpc&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17609" PostTypeId="2" ParentId="17608" CreationDate="2021-01-11T15:13:22.860" Score="8" Body="&lt;p&gt;It sounds like you've done what would be immediately logical, but are misunderstanding some concepts to diagnose the problem.  If could be that the HFS code in the kernel is no-longer working, but its more likely there is a problem with your disk, or the permissions needed to access it.&lt;/p&gt;&#xA;&lt;p&gt;So apologies if this is too basic but..  Firstly the whole disk, is really just a blob of data.  Normally that starts with a partition table, which then defines subsections of that blob of data, which are then 'formatted' according to a certain standard.&lt;br /&gt;&#xA;Regardless of what the format of the disk is, you should be able to either copy the entire 250Mb Blob, as a straight blob of data, to a modern disk, or identify which partitions are important, and copy those as separate blobs.&lt;br /&gt;&#xA;Mounting a partition, essentially means having the OS, use the blob, actually in place on the original disk, whilst understanding the format of said blob.&#xA;Most of the work I did with HFS and HFS+ partitions, started with copying the entire disk to a file, then working with that file.&lt;/p&gt;&#xA;&lt;p&gt;You haven't really given enough information for my to give you specifics, but here's what I'd do in your situation.&lt;/p&gt;&#xA;&lt;p&gt;First get a linux machine running, either natively or using a recovery disk (such as you get with any Ubuntu Desktop install CD).&lt;br /&gt;&#xA;Next install drivers for and mount a target disk, where you intend to put your HFS image.  This could be an actual install HDD, a USB stick, or a remote file share (even a windows box, with an smb share would work).&#xA;Next look at the list of partitions available on the box, by running &lt;code&gt;cat /proc/partitions&lt;/code&gt;&#xA;Next plug in your HFS drive via USB, give it a sec, and run &lt;code&gt;cat /proc/partitions&lt;/code&gt;, and play spot the difference, to see if/where the new disk appeared.&lt;/p&gt;&#xA;&lt;p&gt;The disk might be called /dev/sd[a-z] or /dev/hd[a-z] (where the [a-z] could be any letter), or it might have detected partitions, so given you /dev/sd[a-z][1-9] (where the [1-9] is the partition number it's seeing).&lt;/p&gt;&#xA;&lt;p&gt;Once you have identified the partition(s) you want, copy them to a file, on the partition we mentioned earlier (see &lt;a href=&quot;https://stackoverflow.com/questions/30048316/is-it-safe-to-backup-a-partition-with-dd/30048462&quot;&gt;https://stackoverflow.com/questions/30048316/is-it-safe-to-backup-a-partition-with-dd/30048462&lt;/a&gt;).  So if that was &lt;code&gt;/dev/sda1&lt;/code&gt; and &lt;code&gt;/volume1&lt;/code&gt; the command might be something like &lt;code&gt;dd if=/dev/sda1 &amp;gt; /volume1/sda1_hfs_image&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now the act of making a copy of the image, should address all the permissions issues I said might be the cause of the problem.  It'll also fail if the disk is physically corrupt.&lt;/p&gt;&#xA;&lt;p&gt;Once you have the image, then you should be able to install the hfs modules, and simply mount it using &lt;code&gt;mount -t hfs /volume1/sda1_hfs_image /mnt&lt;/code&gt;.  From memory though hfsutils would just access the filesystem in a terminal, rather than mounting it.&lt;/p&gt;&#xA;&lt;p&gt;It's been nearly 20 years since I last played with HFS (around the time OS X came out), so I'm a bit rusty (I saw your cry for help linking to this question on the hfs-user@ mailing list, so it's not totally ignored)&lt;/p&gt;&#xA;&lt;p&gt;Regards,&lt;/p&gt;&#xA;&lt;p&gt;Si&lt;/p&gt;&#xA;" OwnerUserId="20509" LastActivityDate="2021-01-11T15:13:22.860" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17610" PostTypeId="2" ParentId="17608" CreationDate="2021-01-11T20:43:53.300" Score="4" Body="&lt;p&gt;Linux has native HFS read/write support.  Most distributions do not include it by default, but if you install hfsprogs and the kernel modules, you should be able to mount the disk, or an image of it, like a regular file system.&lt;/p&gt;&#xA;&lt;p&gt;Dealing with the resource fork, however, is a bit complicated that way, so you can't expect applications and such to work if just copied.  But for word processing documents, etc., that is generally stored in the data fork and should be accessible.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2021-01-11T22:26:57.367" LastActivityDate="2021-01-11T22:26:57.367" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17611" PostTypeId="1" AcceptedAnswerId="17612" CreationDate="2021-01-11T20:52:03.480" Score="2" ViewCount="462" Body="&lt;p&gt;The PlayStation 1 performed all calculations in fixed point. On the face of it, this is straightforward enough; it couldn't afford floating-point hardware, which was introduced only later, with the PS2, thereby allowing the PS2 to perform 3D calculations with better accuracy.&lt;/p&gt;&#xA;&lt;p&gt;But there are a few reasons I'm not quite satisfied with this account.&lt;/p&gt;&#xA;&lt;p&gt;For one thing, fixed point is not necessarily cheaper to calculate than floating point, e.g. 32-bit fixed-point multiply actually costs more than 32-bit floating point multiply: &lt;a href=&quot;https://electronics.stackexchange.com/questions/368862/transistor-count-of-floating-point-multiplier&quot;&gt;https://electronics.stackexchange.com/questions/368862/transistor-count-of-floating-point-multiplier&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For another thing, it's also not necessarily inferior, e.g. a commenter on &lt;a href=&quot;https://www.quora.com/Why-didnt-the-original-Playstation-support-floating-point&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.quora.com/Why-didnt-the-original-Playstation-support-floating-point&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You don't really need floating-point numbers for most things. The only time you &amp;quot;need&amp;quot; them is for astronomical or molecular calculations where the values are so large and/or so small that precision is not important.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Fixed-point values a greater precision (using the same number of bits because there are no bits wasted on the exponent) and 32-bits offer enough dynamic range for any video-game simulation to appear fluid. It's actually more work to use floating-point numbers because they introduce more instabilities due to their quirky rounding behaviors and conversion between internal formats and IEEE-754 format and you have to ensure all the code is written taking this into account. (e.g. You can't just normalize 32-bit floating-point vectors once ... you have to normalize them twice for them to end up actually normal.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Even today, if you want speed and stability you still use fixed-point values. Floating-point computations are toys for research to make it easier. When it's time to engineer a real product, fixed-point dominates.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now, I'm not endorsing that view as the whole truth. For example, fixed point requires all code plus input data a given program to agree on the required dynamic range, so at the least, floating point would have become mandatory for games by the PS3 era when, as Sweeney observed, it became commonplace for a game to incorporate 10-20 middleware libraries. Still, it does indicate that the story is not as simple as it looked at first glance.&lt;/p&gt;&#xA;&lt;p&gt;But one thing fixed point does give you is the opportunity to cheat, to take shortcuts, to use less than full 16.16 precision. Maybe that was the tradeoff made on the PS1.&lt;/p&gt;&#xA;&lt;p&gt;What precision did PlayStation 1 games typically use for 3D calculations?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="15334" LastEditDate="2021-01-12T19:57:10.933" LastActivityDate="2021-01-12T19:57:10.933" Title="What precision did the original PlayStation use?" Tags="&lt;floating-point&gt;&lt;sony-playstation&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17612" PostTypeId="2" ParentId="17611" CreationDate="2021-01-11T22:37:08.283" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;For one thing, fixed point is not necessarily cheaper to calculate than floating point, e.g. 32-bit fixed-point multiply actually costs more than 32-bit floating point multiply: &lt;a href=&quot;https://electronics.stackexchange.com/questions/368862/transistor-count-of-floating-point-multiplier&quot;&gt;https://electronics.stackexchange.com/questions/368862/transistor-count-of-floating-point-multiplier&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The conclusion is only true when accepting a good amount of restrictions, wich make it a rather useless point most important as it ignores all additional measures to handle float - not at least normalizing. For all practical purpose a integer multiplication will needless hardware and thus be less expensive.&lt;/p&gt;&#xA;&lt;p&gt;Here lies BTW the only real advantage of float: A 32 bit float multiplied by a 32 bit float will always return a 32 bit float , as the exponent covers more magnitudes than its precision is.&lt;/p&gt;&#xA;&lt;p&gt;Fixed point is in next to all applications superior to float when it comes to calculations - float'sadvantage is in storage, as it contains a 'description' what is stored.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For another thing, it's [fixed point] also not necessarily inferior,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Of course not. An integer (fixpoint) can display &lt;em&gt;all&lt;/em&gt; values within it's range, while float only covers 0%.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Now, I'm not endorsing that view as the whole truth. For example, fixed point requires all code plus input data a given program to agree on the required dynamic range,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which would be very easy to do for a game, as it has to be done only within the game. Games do usually not care for interfaces and data transfer, or do they?&lt;/p&gt;&#xA;&lt;p&gt;But more important here, intermediate values outside the precision used for display do simply not matter. In reality calculations will be already clipped, for performance, way before reaching these limits.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;so at the least, floating point would have become mandatory for games by the PS3 era when, as Sweeney observed, it became commonplace for a game to incorporate 10-20 middleware libraries.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is no principal issue to why these middle ware units (aka libraries) can't made using fixed point. In fact, there is only a single sub operation within a single operation were the structure of a fixed point number has to be known: picking the valid digits after a fixed point multiplication.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But one thing fixed point does give you is the opportunity to cheat, to take shortcuts, to use less than full 16.16 precision. Maybe that was the tradeoff made on the PS1.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. For one the PS1 hardware did much of the nasty parts, but more important, there are not many shortcuts to be taken. 3D math is usually centered around a small set of operations, all based on addition, subtraction (each a simple machine instruction) and multiplication used direct or as combinations (dot-product, cross-product) on vectors. In addition some tigonometrics may be used to generate 3D data, but that's negotiable in realtion to the former. Off all of them, multiplication is the only complex one, and only here some optimization may pay off. The only one reliably reduceing is defining teh point at unit borders (e.g along word/byte lines), as it reduces the neccessary shift to a simple address operation.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;So, why Float with the PS3?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The hardware or performance reason why float is used nowadays - the only one is convenience. During the 1990s FPUs became a common place, so using them, despite their disadvantage was simply the more convenient way. Why adding something custom (like the PS1 geometry engine) when a FPU can be bought off the shelf and offers sufficient performance?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-01-12T18:05:18.887" LastActivityDate="2021-01-12T18:05:18.887" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="17615" PostTypeId="5" CreationDate="2021-01-12T22:53:21.487" Score="0" Body="&lt;p&gt;DOS is a family of operating systems targeting x86-based computers (most often IBM PC compatibles), which includes QDOS/86-DOS, MS-DOS (and its OEM-branded versions), PC DOS, DR-DOS (and its various incarnations like Novell DOS and OpenDOS), RxDOS and FreeDOS.&lt;/p&gt;&#xA;&lt;p&gt;Questions specifically about MS-DOS (that don’t apply to other versions) should use &lt;a href=&quot;/questions/tagged/ms-dos&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;ms-dos&amp;#39;&quot; rel=&quot;tag&quot;&gt;ms-dos&lt;/a&gt; instead. Likewise, questions about IBM PC DOS should use &lt;a href=&quot;/questions/tagged/pc-dos&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;pc-dos&amp;#39;&quot; rel=&quot;tag&quot;&gt;pc-dos&lt;/a&gt;. For non-x86 disk-operating systems, simply use &lt;a href=&quot;/questions/tagged/operating-system&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;operating-system&amp;#39;&quot; rel=&quot;tag&quot;&gt;operating-system&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-18T19:40:06.980" LastActivityDate="2021-02-18T19:40:06.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17616" PostTypeId="4" CreationDate="2021-01-12T22:53:21.487" Score="0" Body="The DOS family of operating systems for x86-based computers, especially IBM PC compatibles. DO NOT USE for non-x86 systems with ‘DOS’ in the name!" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-18T19:40:06.980" LastActivityDate="2021-02-18T19:40:06.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17617" PostTypeId="1" AcceptedAnswerId="17618" CreationDate="2021-01-13T04:18:17.540" Score="8" ViewCount="4130" Body="&lt;p&gt;I'm used to the idea that the maximum resolution there was any point in trying to generate on NTSC TV sets was about 320x224 (or 240 as a compromise figure between NTSC and PAL), but according to &lt;a href=&quot;https://en.wikipedia.org/wiki/PlayStation_technical_specifications&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; the original PlayStation was designed to go up to 640x480.&lt;/p&gt;&#xA;&lt;p&gt;But that machine only had one megabyte of video RAM. Even if you dial the color depth down to 16 bits, a single frame buffer would take 600K, and for 3D gaming you need two buffers, which would exceed the total video RAM even before trying to reserve any for textures or whatever.&lt;/p&gt;&#xA;&lt;p&gt;Did any PS1 games use such a high resolution? If so, how did they do it?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="3748" LastEditDate="2021-01-13T22:44:36.000" LastActivityDate="2021-01-14T14:55:00.360" Title="Did any PS1 games use 640x480?" Tags="&lt;graphics&gt;&lt;sony-playstation&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17618" PostTypeId="2" ParentId="17617" CreationDate="2021-01-13T04:26:00.847" Score="18" Body="&lt;p&gt;You don’t need two buffers at 640x480 because television is interlaced — each field is only 640x240; if you can render at 60Hz then you can always draw the next field while the current is being output and therefore maintain proper even/odd sampling positions for a genuine interlaced signal. This is even a better solution than a 640x480 buffer because it recognises that fields are distinct things drawn at distinct times, not halves of some hypothetical ‘full image’.&lt;/p&gt;&#xA;&lt;p&gt;I’ve personally written Yaroze software that ran in full 3d at 640x480 and it’s a common title-screen resolution; Tobal #1 springs to mind as an example of a commercial title which runs at that resolution.&lt;/p&gt;&#xA;&lt;p&gt;And as an aside: it is not true that two buffers are a requirement for 3d gaming; if your scene were simple enough that you could draw in the time between the final visible line of one frame and the first of the next then a second buffer would be unnecessary.&lt;/p&gt;&#xA;&lt;p&gt;While there is no definitive (short) list of the commercial PS1 releases that included game play running at 480i resolution, some enthusiasts have created an &lt;a href=&quot;https://shmups.system11.org/viewtopic.php?f=6&amp;amp;t=54382&quot; rel=&quot;nofollow noreferrer&quot;&gt;informal list of 480i games&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4335" LastEditDate="2021-01-14T14:55:00.360" LastActivityDate="2021-01-14T14:55:00.360" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="17619" PostTypeId="2" ParentId="7882" CreationDate="2021-01-13T05:25:13.690" Score="2" Body="&lt;p&gt;It was the board game &amp;quot;Acquire&amp;quot; set in space. I used to hook the Laser 128 up to the TV and play this with friends. At least until someone realized the game wouldn't prevent you from buying negative stock. If you weren't doing well and shorted at the right time, it'd make you a fortune. Otherwise it'd trap you with massive negative interest and no cash.&lt;/p&gt;&#xA;" OwnerUserId="20513" LastActivityDate="2021-01-13T05:25:13.690" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17620" PostTypeId="2" ParentId="6995" CreationDate="2021-01-13T11:33:39.700" Score="1" Body="&lt;p&gt;&lt;strong&gt;Some time in late 1985 or early 1986.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you went to an industry supplier like RS or Mouser, you could get a 286 as soon as it was available.  But anyone who wanted more than the 8086 could offer tended to just use a 68k, which was simpler to interface, simpler to program and had of course been available for years.  So there was not a lot of demand for the 286 until IBM released the AT and backwards compatibility with the PC became an issue.  Even then it apparently took a while to trickle down to the typical &amp;quot;end user&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;In the &lt;a href=&quot;https://archive.org/details/byte-magazine-1986-07/page/n459/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;July 1986 issue of BYTE&lt;/a&gt; a company called JDR Microdevices is offering an 80286 for 129.95 and an 80287 for 199.95 - though it does not say what speed (presumably 8 MHz).&lt;/p&gt;&#xA;&lt;p&gt;The same company advertising in the same magazine &lt;a href=&quot;https://archive.org/details/byte-magazine-1985-07/page/n475/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;a year earlier&lt;/a&gt; does not list those devices.&lt;/p&gt;&#xA;&lt;p&gt;So the answer to your question is:  Demand for the 286 among &amp;quot;hobbyists&amp;quot; became great enough for typical &amp;quot;hobbyist suppliers&amp;quot; to offer it starting some time in late 1985 or early 1986.&lt;/p&gt;&#xA;" OwnerUserId="19357" LastActivityDate="2021-01-13T11:33:39.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17621" PostTypeId="2" ParentId="16698" CreationDate="2021-01-13T20:50:35.677" Score="4" Body="&lt;p&gt;The NSA used vector processing because it lets you parallelize attacks on a symmetric cipher.  This is because a single instruction operates on multiple data in different vectors.  As an example, &lt;a href=&quot;https://www.copacobana.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;COPACOBANA&lt;/a&gt; is a vector architecture that breaks &lt;a href=&quot;https://en.wikipedia.org/wiki/Data_Encryption_Standard&quot; rel=&quot;nofollow noreferrer&quot;&gt;DES&lt;/a&gt; by brute force, which is exactly how the NSA would have used a vector processor.  However, this would still have been out of the capability of the Cray at the time.&lt;/p&gt;&#xA;" OwnerUserId="15461" LastActivityDate="2021-01-13T20:50:35.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17622" PostTypeId="1" AcceptedAnswerId="17623" CreationDate="2021-01-13T20:53:01.193" Score="3" ViewCount="315" Body="&lt;p&gt;I have a historical question. &lt;a href=&quot;https://en.wikipedia.org/wiki/Pretty_Good_Privacy&quot; rel=&quot;nofollow noreferrer&quot;&gt;PGP&lt;/a&gt; has been around since 1991-ish. At that time, there were still some 8086 kicking around. How long would it take generate a 1024 bit (or whatever the 1991 standard was) asymmetric key on something like an 8086?&lt;/p&gt;&#xA;" OwnerUserId="15461" LastActivityDate="2021-01-15T02:14:56.260" Title="Time to generate an asymmetric key on a 6800 or 8086?" Tags="&lt;cryptography&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17623" PostTypeId="2" ParentId="17622" CreationDate="2021-01-13T22:53:00.303" Score="14" Body="&lt;p&gt;Generating a 1024-bit PGP key with PGP 2.6.3ia on a (double-speed) &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_200LX&quot; rel=&quot;nofollow noreferrer&quot;&gt;HP 200LX&lt;/a&gt; (80186 cpu) takes about fifteen minutes.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2021-01-15T02:14:56.260" LastActivityDate="2021-01-15T02:14:56.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17625" PostTypeId="2" ParentId="11281" CreationDate="2021-01-14T11:16:01.340" Score="1" Body="&lt;p&gt;How about a USI monitor like the one shown here :&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.si.edu/newsdesk/photos/apple-ii-computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.si.edu/newsdesk/photos/apple-ii-computer&lt;/a&gt;?&lt;/p&gt;&#xA;&lt;p&gt;or a &amp;quot;National&amp;quot; as shown here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GTNQ2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GTNQ2.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20530" LastEditorUserId="20530" LastEditDate="2021-01-14T11:29:03.197" LastActivityDate="2021-01-14T11:29:03.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17626" PostTypeId="1" CreationDate="2021-01-14T16:23:16.050" Score="8" ViewCount="3596" Body="&lt;p&gt;Were there any computers that did not support virtual memory? if yes, were these computers able to run multiple processes at the same time?&lt;/p&gt;&#xA;&lt;p&gt;By “virtual memory” I mean when a process would want to access a memory address, it would access a virtual address, and then this virtual address would be translated into a physical address.&lt;/p&gt;&#xA;" OwnerUserId="20534" LastEditorUserId="11795" LastEditDate="2021-01-15T13:55:45.380" LastActivityDate="2021-01-19T21:37:20.160" Title="Were there any computers that did not support virtual memory?" Tags="&lt;history&gt;" AnswerCount="8" CommentCount="2" ClosedDate="2021-01-16T14:50:42.673" ContentLicense="CC BY-SA 4.0" />
  <row Id="17627" PostTypeId="2" ParentId="17626" CreationDate="2021-01-14T17:08:48.907" Score="7" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-8&quot; rel=&quot;noreferrer&quot;&gt;PDP-8&lt;/a&gt; did not have virtual memory — in the classic sense that there was no hardware page tables, no hardware page faults, no expandable virtual address space.&lt;/p&gt;&#xA;&lt;p&gt;The PDP-8 has 12-bit instruction size and 12 bit address space for 4k 12-bit words.  It was expanded with bank switching to hold up to 8 4k banks or 32k words total.&lt;/p&gt;&#xA;&lt;p&gt;Under &lt;a href=&quot;https://en.wikipedia.org/wiki/TSS/8&quot; rel=&quot;noreferrer&quot;&gt;TSS/8&lt;/a&gt;, the operating system required 8k (2 4k banks), and you needed at least one more for user programs.  User programs were given a full 4k bank and the bank switching instructions were privileged so could not access any other banks.  In time sharing, the operating system would swap a user process to disc, swap another into memory, and give it a time slice.  This worked best if you had at least 2 4k banks for processes, because it would use DMA to the disc to swap processes in/out while at the same time giving a CPU time slice to the user process in the other bank.&lt;/p&gt;&#xA;" OwnerUserId="7985" LastActivityDate="2021-01-14T17:08:48.907" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17628" PostTypeId="2" ParentId="17626" CreationDate="2021-01-14T17:10:48.310" Score="16" Body="&lt;p&gt;Based on your clarification from comments, “I mean when a process would want to access a memory address, it would access a virtual address, and then this virtual address would be translated into a physical address”, yes, there were computers that did not support virtual memory: any computer where addresses were used with no indirection. There are many examples of this: most 8-bit micros, 8088- and 8086-based PCs...&lt;/p&gt;&#xA;&lt;p&gt;Virtual memory is not required to run multiple processes simultaneously (within the limits of a system without multiple processors), nor even is bank switching; for example, MS-DOS arguably supports multiple processes loaded simultaneously in memory, and processes can grab control from each other (this is what TSRs do).&lt;/p&gt;&#xA;&lt;p&gt;Hardware support isn’t even necessary to implement virtual memory; &lt;a href=&quot;http://mud.co.uk/richard/htflpism.htm&quot; rel=&quot;noreferrer&quot;&gt;the Z-machine&lt;/a&gt; provided paging and virtual memory for its virtual machine, and worked very well on rather limited 8-bit micros.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-01-14T21:57:53.197" LastActivityDate="2021-01-14T21:57:53.197" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17629" PostTypeId="2" ParentId="17626" CreationDate="2021-01-14T18:12:05.717" Score="22" Body="&lt;p&gt;There are three different concepts which may be bundled into the term &amp;quot;virtual memory&amp;quot;, depending on whose definitions you prefer.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Separation between program addresses and physical memory addresses.  This can be as simple as datum and limit registers to relocate the program.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Splitting of the program address space into pieces that can be independently relocated; the pieces may be variable-sized ('segments') or fixed-size ('pages').&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Support for parts of the address space being non-resident, together with a way to stop an instruction that attempts to reference a non-resident part, and a way to restart the instruction when the missing part has been made resident.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There's a natural hierarchy there, in that the higher numbered facilities usually required the lower-numbered ones.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;But yes, there were dozens of computers without &lt;em&gt;any&lt;/em&gt; of that in hardware.  I will note a few from memory, in no particular order and with no particular significance other than what I first thought of, off the top of my head.&lt;/p&gt;&#xA;&lt;p&gt;A couple of 'firsts':&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/EDSAC&quot; rel=&quot;noreferrer&quot;&gt;EDSAC&lt;/a&gt;&lt;br /&gt;&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_Mark_1&quot; rel=&quot;noreferrer&quot;&gt;Manchester Mark 1&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Big iron:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_7090&quot; rel=&quot;noreferrer&quot;&gt;IBM 7090&lt;/a&gt;&lt;br /&gt;&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360&quot; rel=&quot;noreferrer&quot;&gt;IBM System/360&lt;/a&gt; at its introduction.&lt;/p&gt;&#xA;&lt;p&gt;Minicomputers:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-8&quot; rel=&quot;noreferrer&quot;&gt;PDP-8&lt;/a&gt;&lt;br /&gt;&#xA;&lt;a href=&quot;http://gunkies.org/wiki/PDP-11/20&quot; rel=&quot;noreferrer&quot;&gt;PDP-11/20&lt;/a&gt;&lt;br /&gt;&#xA;&lt;a href=&quot;http://gunkies.org/wiki/PDP-11/40&quot; rel=&quot;noreferrer&quot;&gt;PDP-11/40&lt;/a&gt; without a &lt;a href=&quot;https://gunkies.org/wiki/KT11-D_Memory_Management_Unit&quot; rel=&quot;noreferrer&quot;&gt;KT11-D&lt;/a&gt; MMU.&lt;/p&gt;&#xA;&lt;p&gt;The last-mentioned one nevertheless managed to run an operating system (RSX-11M) that supported multiple simultaneous tasks; it just required that you link the task file for a specific physical address.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-01-15T02:41:33.430" LastActivityDate="2021-01-15T02:41:33.430" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17630" PostTypeId="2" ParentId="17626" CreationDate="2021-01-14T18:36:17.893" Score="10" Body="&lt;p&gt;For classic Macintosh system versions prior to system 7, all applications used physical memory accesses all the time.  Multiple applications could be resident in memory because the address of every application instance's static data would be immutably determined before it launched, and the static data would include a jump table with an entry for every function that could be called between 32K code segments, or whose address could be taken.  Generated code Address register A5 was at all times left holding the base address of the current application's static data which, as noted, would never change during the execution of an application instance.&lt;/p&gt;&#xA;&lt;p&gt;A multi-tasking OS like Multifinder 6.1b9 could switch between application instances whenever an application polled for events by saving the values CPU registers in the current application instance, and loading those registers with values for the application to switch to (either startup values or the last values saved for the that instance).  An application which wrote to addresses it didn't own could corrupt other applications, but most applications didn't do such things and the system was remarkably functional and stable.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-01-14T18:36:17.893" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17631" PostTypeId="2" ParentId="17626" CreationDate="2021-01-14T18:42:44.837" Score="24" Body="&lt;p&gt;The Amiga from Commodore shipped in October 1985 with a &lt;em&gt;preemptive multitasking&lt;/em&gt; operating system designed to run many processes. The hardware lacked any support for virtual memory, and the Operating System never added it.&lt;/p&gt;&#xA;&lt;p&gt;As a multitasking system, it worked very well, especially measured against similarly priced competition that usually lacked this feature (&lt;a href=&quot;https://en.wikipedia.org/wiki/Sinclair_QL&quot; rel=&quot;noreferrer&quot;&gt;Sinclair QL&lt;/a&gt;, notwithstanding). Indeed, most of the drawbacks of the Amiga OS would trace to lack of support for hardware protected memory, not the lack of support for virtual memory.&lt;/p&gt;&#xA;&lt;p&gt;Protected memory is what allows a system to withstand corruption to kernel memory that is easily caused by errant application in a non-protected memory system. You might be familiar with the &amp;quot;Blue Screen of Death&amp;quot; famous on Windows systems in the past. On the Amiga, such crashes were a common occurrence, but had the less ominous sounding name &lt;a href=&quot;https://www.amigalove.com/viewtopic.php?f=7&amp;amp;t=500&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;&amp;quot;Guru Meditation&amp;quot; errors&lt;/strong&gt;&lt;/a&gt;. Either way, you usually had to reboot the machine to recover.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-01-14T18:55:33.850" LastActivityDate="2021-01-14T18:55:33.850" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17632" PostTypeId="2" ParentId="17626" CreationDate="2021-01-14T19:31:10.623" Score="12" Body="&lt;h2&gt;Preface:&lt;/h2&gt;&#xA;&lt;p&gt;Reading question and comment, it feels as if there is a confusion between address translation and virtual addressing vs. memory protection and separate (process) address spaces. These are more or less independent issues.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Address Translation is a mechanism to turn an address issued by a program into a real memory address to be used. There is no principal need for programs or processes to use different address spaces.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Virtual addressing is about allowing addressing more memory than there is, by providing a way to detect access to addresses that are currently not in main memory and have them brought in (one way or another)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Memory protection is about stopping one process from accessing memory assigned to another. This can and has been done long before usage of virtual addresses. For example the /360 family provides a 4-bit field for each memory page meant to hold a storage key. Similarly, a dedicated CPU register holds the key of the process running. Whenever it accesses memory with a different key, a protection fail is inserted.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Separate memory spaces are about giving every process the same (virtual) addresses, so it seems as if it's the only process on a machine - simplifying relocation issues a swell.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Equally important to this question, hardware support for virtual memory is the least important part here: it's all about an OS using this feature. An OS can still provide multi-processing without virtual memory, despite the hardware being present - like Classic MacOS on a 68040 LC475.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;For the Questions:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Were there any computers that did not support virtual memory?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, essentially every computer did in the early days.&lt;/p&gt;&#xA;&lt;p&gt;There were already a number of computers working when the concept of virtual addressing was first described in 1956 by F. Güntsch at TU Berlin, Germany. It wasn't until 1959 when the &lt;a href=&quot;https://en.wikipedia.org/wiki/Manchester_computers&quot; rel=&quot;nofollow noreferrer&quot;&gt;Manchester&lt;/a&gt; MUSE project showed off a first prototype of virtual addressing. Still, it only reached mainstream usage in the late 60s with the IBM 360/67.&lt;/p&gt;&#xA;&lt;p&gt;It's important to understand that, at that time, virtual addressing wasn't about separating processes, but to allow a process to grow beyond existing memory. We all know that there is never enough memory in a computer, but that was even more scarce back in the days when mainframes with 128 KiB were considered large.&lt;/p&gt;&#xA;&lt;p&gt;And while virtual addressing as a tool to support multiprocessing became useful in universities during the 1970s, most commercial use stayed with real mode environments to avoid the speed penalty of address translation.&lt;/p&gt;&#xA;&lt;p&gt;The same was true when minis became a thing in the 1960s/70s - and it repeated of course with micros. Here, much as before, virtual addressing became available quite early on in the 1970s, but it wasn't until the mid-1980s that it caught on with workstations and mid 90s with mass market PC - not at least as its usage is way more of an OS issue than hardware related.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;if yes, were these computers able to run multiple processes at the same time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Of course= multi-programming and multi-processing do not rely on having virtual addressing. &lt;strong&gt;It only needs well-behaved processes, staying away from accessing any resources (memory, I/O, Disk, etc.) not assigned to them.&lt;/strong&gt; Something to be expected anyway from any program, isn't it?&lt;/p&gt;&#xA;&lt;p&gt;There have been many examples for operating systems supporting concurrent execution without virtual addressing on all classes. By just focusing on micros, a short list may look like this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/MP/M&quot; rel=&quot;nofollow noreferrer&quot;&gt;MP/M&lt;/a&gt; for 8080 compatible CPUs (1979)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/OS-9&quot; rel=&quot;nofollow noreferrer&quot;&gt;OS/9&lt;/a&gt; for 6809 (1979)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/MP/M#MP/M-86&quot; rel=&quot;nofollow noreferrer&quot;&gt;MP/M-86&lt;/a&gt; (later Concurrent CP/M and &lt;a href=&quot;https://en.wikipedia.org/wiki/Concurrent_DOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;Concurrent DOS&lt;/a&gt;) for x86 (1981)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/QNX&quot; rel=&quot;nofollow noreferrer&quot;&gt;QNX&lt;/a&gt; for x86 (1982)&lt;/li&gt;&#xA;&lt;li&gt;[OS-9/68k] port of OS/9 to 68,000 (1983). Later ported to many other architectures&lt;/li&gt;&#xA;&lt;li&gt;(Classic) &lt;a href=&quot;https://en.wikipedia.org/wiki/Classic_Mac_OS&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mac-OS&lt;/a&gt; for 68,000 (1984)&lt;/li&gt;&#xA;&lt;li&gt;Sinclair &lt;a href=&quot;https://en.wikipedia.org/wiki/Sinclair_QDOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;QDOS&lt;/a&gt; for 68,000 (1984)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/GEM_(desktop_environment)&quot; rel=&quot;nofollow noreferrer&quot;&gt;GEM&lt;/a&gt; for x86 and 68,000 (1985)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/AmigaOS&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga OS&lt;/a&gt; for 68,000 (1985)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_1.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Windows&lt;/a&gt; for x86 (1987)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Please note that there are many ways to run different processes, and all of the above changed over time in what types were supported, or what restrictions applied. Also, some added virtual addressing (and memory protection) in later versions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-01-19T21:37:20.160" LastActivityDate="2021-01-19T21:37:20.160" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17633" PostTypeId="1" AcceptedAnswerId="17643" CreationDate="2021-01-14T20:57:10.410" Score="14" ViewCount="2512" Body="&lt;p&gt;In discussions and arguments about programming language design, one often hears comments about &amp;quot;sufficiently smart&amp;quot; compilers, as in &amp;quot;X needn't be inefficient, since a sufficiently smart compiler should be able to optimize it well&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;As far as I know, the term originated within the Lisp community, since compiling Lisp into efficient object code is notoriously difficult (though not impossible, by any means). But what is the earliest known use of the phrase? &lt;a href=&quot;https://cl-su-ai.cddddr.org/msg03457.html&quot; rel=&quot;noreferrer&quot;&gt;Here's one from 1986&lt;/a&gt;, but surely earlier instances exist:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I think that one documentation string is enough, the rest can be&#xA;ignored by any sufficiently smart compiler given the semantics of the&#xA;language, and anyone who builds a really nice Commmon Lisp environment&#xA;is welcome to extend the notion of documentation strings to include&#xA;multiple ones.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(Incidentally, that message suggests that &amp;quot;&lt;code&gt;...&lt;/code&gt;&amp;quot; be made a special identifier that is syntactically valid but signals an error when evaluated, to mark unimplemented code. This exact functionality would be added to Perl in version 5.12 from 2010.)&lt;/p&gt;&#xA;&lt;p&gt;I am also interested (to a lesser extent) in early documents expressing the same sentiment with similar wording, if not the specific phrasing.&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2021-01-15T19:27:54.333" Title="When was the phrase &quot;sufficiently smart compiler&quot; first used?" Tags="&lt;history&gt;&lt;programming&gt;&lt;terminology&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17634" PostTypeId="2" ParentId="17633" CreationDate="2021-01-14T22:06:24.437" Score="9" Body="&lt;p&gt;The phrase &lt;em&gt;&lt;strong&gt;any sufficiently advanced/smart/etc X&lt;/strong&gt;&lt;/em&gt; in a technology context stems from (in other words, is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Snowclone&quot; rel=&quot;nofollow noreferrer&quot;&gt;snowclone&lt;/a&gt; of) the Arthur C. Clarke's quote “Any sufficiently advanced technology is indistinguishable from magic” (&lt;del&gt;1962&lt;/del&gt; 1973).&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2021-01-15T19:27:54.333" LastActivityDate="2021-01-15T19:27:54.333" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="17635" PostTypeId="2" ParentId="17633" CreationDate="2021-01-14T23:25:42.567" Score="8" Body="&lt;p&gt;The Evolution of Lisp, an outline of the history, traces the phrase back to 1984.  See page 42.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.scribd.com/document/62651058/The-Evolution-of-Lisp&quot; rel=&quot;noreferrer&quot;&gt;https://www.scribd.com/document/62651058/The-Evolution-of-Lisp&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2021-01-14T23:25:42.567" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17636" PostTypeId="1" CreationDate="2021-01-14T23:35:33.683" Score="5" ViewCount="504" Body="&lt;p&gt;Back in the 1980's, I tried my hand at programming video games, mostly using Atari's player/missle&#xA;system which used sprites.&#xA;I could freehand draw most sprites but couldn't come close to the animated explosions commercial video games like Xevious(1982) displayed.&#xA;Today, we can download that asset from the web but obviously that wasn't an option back then.&#xA;Video digitizers existed but I doubt they were used due to cost.&#xA;So, were those cool 8 bit fireballs created purely &amp;quot;by hand&amp;quot;?&lt;a href=&quot;https://i.stack.imgur.com/zzBIz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zzBIz.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;Esentially I'm wondering if the images were hand drawn first on graph paper or was there more to it. I couldn't get realistic results that way. The image strip is a random image I found on Google. Its not really 8-bit, but I included it to illustrate what I mean.&lt;/p&gt;&#xA;" OwnerUserId="19429" LastEditorUserId="19429" LastEditDate="2021-01-15T02:30:59.287" LastActivityDate="2021-01-17T01:47:53.397" Title="How did 1980's 8 bit video game coders create realistic fireballs and explosions?" Tags="&lt;graphics&gt;&lt;arcade&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17637" PostTypeId="2" ParentId="17626" CreationDate="2021-01-15T01:13:57.043" Score="7" Body="&lt;h3&gt;Most current microcontrollers&lt;/h3&gt;&#xA;&lt;p&gt;Most microcontrollers have no support for virtual memory in hardware. Microcontrollers running Linux will have this supported in software, but microcontrollers are typically used more for real-time systems. As such, they will normally run an RTOS instead, or often will simply go straight for bare metal. Neither will use virtual memory.&lt;/p&gt;&#xA;&lt;p&gt;It is perfectly possible to run multiple tasks simultaneously in an RTOS. Unlike the time-slicing multitasking which you are probably most familiar with, RTOSes work slightly differently. The important part of real-time processing is that important processing is turned around in time, so tasks are prioritised. One task at a time (the highest priority) runs with full control over the processor, and it runs until it finishes. If a higher priority task comes along, the current task is frozen and the new task gets full control until &lt;em&gt;it&lt;/em&gt; finishes. If a lower priority task is triggered, it goes in the queue. When this task finishes, the RTOS checks the queue for the next highest priority task which has been triggered, and runs that. Sometimes this is supported directly by the hardware using prioritised interrupts, and sometimes it is handled in software. This is called &amp;quot;pre-emptive multitasking&amp;quot;, because a higher-priority task can &amp;quot;preempt&amp;quot; (interrupt) a lower.&lt;/p&gt;&#xA;" OwnerUserId="6749" LastActivityDate="2021-01-15T01:13:57.043" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="17638" PostTypeId="2" ParentId="17626" CreationDate="2021-01-15T02:50:43.640" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Were there any computers that did not support virtual memory?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, a great many.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;if yes, were these computers able to run multiple processes at the same time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, if the operating system was designed for it and the programs were well-behaved. Generally, programs need to work when they're loaded at different locations in memory, they need to be able to figure out (with OS help) where they were loaded and how much memory is available to them, and they need to refrain from messing with each other's memory. It's helpful if they limit themselves to using OS facilities to access hardware, instead of direct access (otherwise, strange things can happen during task switch). And there needs to be some way (either preemptive or cooperative) to actually switch between tasks.&lt;/p&gt;&#xA;&lt;p&gt;All of these things were, in fact, possible on MS-DOS on an 8086 (which had no memory management); DOS had sensible memory allocation routines (if programs used them) and facilities for hardware access (if programs used them), and third party software such as Quarterdeck DESQview provided task switching and even the ability to run multiple apps simultaneously in text-based &amp;quot;windows&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Many early time-sharing systems and early Unix also operated this way — sharing was based on convention and well-behaved apps. Putting processes into &amp;quot;virtual&amp;quot; spaces where everything they can see is their own was a later development.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2021-01-15T02:50:43.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17639" PostTypeId="2" ParentId="17636" CreationDate="2021-01-15T07:40:24.527" Score="4" Body="&lt;p&gt;The question is way too broad to answer completely, but I'm pretty sure that in almost every case it was either graph paper (+ manual translation into hex, + manual fine tuning), or simple sprite editors. The latter existed on most platforms since at least the mid-80s (from personal knowledge), probably earlier.&lt;/p&gt;&#xA;&lt;p&gt;Editing sprites with these editors was still a rather basic affair, limited mostly to turning on and off individual pixels, but at least you'd see immediately what you sprite looked like on a CRT. Some also supported overlay (composing one sprite out of many, to get a bigger sprite and / or more colors) and animation previews, which was helpful when working on effects.&lt;/p&gt;&#xA;&lt;p&gt;Video digitizers of the day would produce grainy, noisy images, at least on machines like the C-64 with its limited palette. The result might be suitable for full-screen art, with a lot of editing, but not for 21x24 pixel sprites. This technology only became useful with machines like the Amiga. Broadly the same goes for early scanners.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastEditorUserId="10666" LastEditDate="2021-01-15T23:53:27.557" LastActivityDate="2021-01-15T23:53:27.557" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17640" PostTypeId="2" ParentId="17636" CreationDate="2021-01-15T09:19:54.237" Score="8" Body="&lt;p&gt;The sprites in the 1982 Arcade Game Xevious were designed by Shigeki Toyama on graph paper by hand. They were admired in the day for their appearance, but they look pretty simple compared to subsequent games.&lt;/p&gt;&#xA;&lt;p&gt;If you look closely at this screenshot, you can see that explosion is quite low detail, though precise use of colour and many frames of animation can mask this on a CRT.  &lt;a href=&quot;https://www.mobygames.com/images/shots/l/662324-xevious-arcade-screenshot-explosion.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://www.mobygames.com/images/shots/l/662324-xevious-arcade-screenshot-explosion.png&quot; alt=&quot;Xevious Arcade&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&quot;http://www5f.biglobe.ne.jp/%7Ezekzek/artworks.html&quot; rel=&quot;noreferrer&quot;&gt;book&lt;/a&gt; has been published of his artwork and sprite designs, which includes some of the graph paper grids for Xevious. One image is below: &lt;a href=&quot;https://i.stack.imgur.com/dobDQ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dobDQ.jpg&quot; alt=&quot;Xevious Graphics&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Image credit: taken from &lt;a href=&quot;http://gaming.moe/?p=405&quot; rel=&quot;noreferrer&quot;&gt;this review&lt;/a&gt; of the book.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2021-01-15T14:09:30.613" LastActivityDate="2021-01-15T14:09:30.613" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17641" PostTypeId="2" ParentId="15536" CreationDate="2021-01-15T10:40:04.213" Score="1" Body="&lt;p&gt;I too have found a curious gap in the literature about how to program the PIO. Page 225 of the PIO manual gives the programming overview. My project is to use a PIO as a digital to analogue (D-A) converter, and I will be using 8 resistors in a binary weighted array to get 8-bit data bytes to set up the appropriate voltage.&lt;/p&gt;&#xA;&lt;p&gt;One problem I find as an elderly gent is the presence of jargon in the advice offered all over the web, which shows my ignorance, but for instance, the original poster, like myself, might have no idea what a &amp;quot;bitbang&amp;quot; is and would have to research the term first.&lt;/p&gt;&#xA;&lt;p&gt;The question would appear to me to involve serial data processing for which the SIO would indeed be a more sensible option. However, since Benjamin has stated exactly what he wants to do, rather than trying to change his direction, I will post the Z80 assembly code for my PIO project here in a few days (when it works!) so he can see my solution.&lt;/p&gt;&#xA;&lt;p&gt;However, a few hours research later, I now realise that my application is too different from Benjamins so my code would be of little use to him.  In looking through the Zilog Z80 PIO Technical Manual, there is a good example of an I/O interface on page 18 which I think would be a place for him to start. I'm guessing that the PS/2 keyboard has a serial data connection, so Benjamin might be able to use the circuit using a single PIO data line as an input to the PIO.&lt;/p&gt;&#xA;&lt;p&gt;Essentially Benjamin, once you have designed the hardware circuit for the PS/2, you can select an operating mode, most likely Mode 2 (bidirectional) and then&#xA;follow the PIO setup sequence in the PIO Technical manual. If you like you could email the relevant schematics to me. I would imagine you would might choose to use interrupts rather than polling although it is a bit more tricky to get working, in which case you would load an interrupt vector to point to the code to be executed by the interrupt service routine. The Zilog Applications book published by Sybex has a load of good stuff in it if you can find one&lt;/p&gt;&#xA;&lt;p&gt;I think you need to have the Zilog books in front of you to get the hang of it. In essence it is easy, like everything else, once you have done it. With the best will in the world, there's a bit too much to put into a post like this.&lt;/p&gt;&#xA;&lt;p&gt;Busybee I agree with you. I would have to research the PS/2 keyboard spec to know what his hardware design would look like, but guessing the Zilog circuit could be adapted with minimal work.&lt;/p&gt;&#xA;" OwnerUserId="20540" LastEditorUserId="20540" LastEditDate="2021-01-15T20:12:18.453" LastActivityDate="2021-01-15T20:12:18.453" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17642" PostTypeId="1" AcceptedAnswerId="17646" CreationDate="2021-01-15T11:47:57.850" Score="6" ViewCount="129" Body="&lt;p&gt;Back in the day we had a sixword swiftdisk we were ahead of the game on our speccy allowing us to us 3.5inch floppy disks. See:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.worthpoint.com/worthopedia/swift-disc-interface-zx-spectrum-540379389&quot; rel=&quot;noreferrer&quot;&gt;https://www.worthpoint.com/worthopedia/swift-disc-interface-zx-spectrum-540379389&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.crashonline.org.uk/44/swiftdisk.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.crashonline.org.uk/44/swiftdisk.htm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://spectrumcomputing.co.uk/index.php?cat=96&amp;amp;id=1000412&quot; rel=&quot;noreferrer&quot;&gt;https://spectrumcomputing.co.uk/index.php?cat=96&amp;amp;id=1000412&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://hardware.speccy.org/hardware/Swift_Disc-Sixword-i.html&quot; rel=&quot;noreferrer&quot;&gt;https://hardware.speccy.org/hardware/Swift_Disc-Sixword-i.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I see the full hardware spec and even the rom is available online at the hardware.speccy.org link above which is pretty amazing.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone have an idea what disk format was used (it was a snapshot of the entire memory) and how our old floppies might be digitalized for the modern retro world. Possibly we could convert them to &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_Disk_File&quot; rel=&quot;noreferrer&quot;&gt;FDI format&lt;/a&gt;?&lt;/p&gt;&#xA;&lt;p&gt;Motivation:&lt;/p&gt;&#xA;&lt;p&gt;It would be kind of nice to try and upload our never released game Galactic Patrol like we did with &lt;a href=&quot;https://spectrumcomputing.co.uk/entry/4811/ZX-Spectrum/Star_Blade&quot; rel=&quot;noreferrer&quot;&gt;StarBlade&lt;/a&gt;.&#xA;Apologies for making the enemy waves too evil there! Could have done with some more playtesting but we were both still in school.&lt;/p&gt;&#xA;&lt;p&gt;This ran in 'full' colour using the rapid screen switch scheme my brother devised which is mentioned &lt;a href=&quot;https://archive.org/stream/Crash36Jan87/Crash/Crash30-Jul86_djvu.txt&quot; rel=&quot;noreferrer&quot;&gt;here in crash&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11079" LastEditorUserId="4692" LastEditDate="2021-01-15T13:53:23.037" LastActivityDate="2021-01-16T09:25:38.540" Title="Reading data of floppies from a ZX Spectrum Swift disk" Tags="&lt;zx-spectrum&gt;&lt;floppy-drive&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17643" PostTypeId="2" ParentId="17633" CreationDate="2021-01-15T12:39:09.663" Score="14" Body="&lt;p&gt;The phrase&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In some cases a sufficiently smart compiler could figure out some of&#xA;these precedence relationships.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;was used in the 1979 book:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/B9780120441204500088&quot; rel=&quot;noreferrer&quot;&gt;https://www.sciencedirect.com/science/article/pii/B9780120441204500088&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Chapter 3 - SIMSCRIPT: PAST, PRESENT, AND SOME THOUGHTS ABOUT THE FUTURE&#xA;HARRY M.MARKOWITZ&lt;/p&gt;&#xA;&lt;p&gt;Indicating that it predated Steele, and also that it started as &amp;quot;sufficiently smart&amp;quot; not &amp;quot;sufficiently advanced&amp;quot; - indicating that it wasn't influenced by Clarke.&lt;/p&gt;&#xA;&lt;p&gt;The phrase&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This is the sort of thing that we might imagine a sufficiently advanced compiler being able to do, but we might not be willing to pay for the overhead needed to deduce the information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;was used in 1984 in The Description of Large Systems by Kent Pitman&#xA;(might be same influence as Steele.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://apps.dtic.mil/dtic/tr/fulltext/u2/a148072.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://apps.dtic.mil/dtic/tr/fulltext/u2/a148072.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Found by google scholar.)&lt;/p&gt;&#xA;" OwnerUserId="20541" LastEditorUserId="20541" LastEditDate="2021-01-15T12:45:59.597" LastActivityDate="2021-01-15T12:45:59.597" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17644" PostTypeId="1" CreationDate="2021-01-15T19:54:54.230" Score="4" ViewCount="113" Body="&lt;p&gt;When I load the Workbench, it loads normally and I can use the mouse to select and open folders and load programs as expected.&lt;/p&gt;&#xA;&lt;p&gt;What happens is, at random, if I double-click on an icon the icon will indicate that it has been selected but the second click does not get processed and the command to load the program from the Workbench disk does not occur. Clicking on any other icon results in nothing occurring at all.&lt;/p&gt;&#xA;&lt;p&gt;Eventually, I notice that the mouse cursor will just freeze. The interesting thing is that the mouse clicks seem to be buffered because if I remove the Workbench disk from the internal drive and then re-insert it, there is then drive activity and the Workbench screen suddenly becomes active again and all my previous clicks get processed. Obviously, this behavior is annoying with the disk having to be removed and re-inserted each time to unfreeze the screen.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone shed any light on this as to why this is happening? The only thing I could find on an internet search was the following comment that someone made: &amp;quot;If the system clock is not &amp;quot;clean&amp;quot; one can expect these issues as the Workbench relies on the clock for timing.&amp;quot; If anyone can clarify this statement, explain what is going on here and possibly recommend a course of action for resolution it would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="20544" LastEditorUserId="15334" LastEditDate="2021-01-18T14:16:17.133" LastActivityDate="2021-01-18T14:16:17.133" Title="Amiga 500 WorkBench 1.2 Freezes" Tags="&lt;commodore&gt;&lt;amiga-500&gt;&lt;troubleshooting&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17646" PostTypeId="2" ParentId="17642" CreationDate="2021-01-15T21:11:13.893" Score="3" Body="&lt;p&gt;I couldn't find technical information or an existing emulator but via your links I found &lt;a href=&quot;https://hardware.speccy.org/hardware/Swift_Disc-Sixword/imagenes/alta_calidad/cara_componentes.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this high-resolution image of the interface's board&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;From there I notice the following things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the disk controller is a WD1770, that's the big one on the left;&lt;/li&gt;&#xA;&lt;li&gt;the two large chips on the right both half underneath the edge connector are an 8kb RAM and an EPROM; and&lt;/li&gt;&#xA;&lt;li&gt;everything else that's visible is 74-series logic.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It's a safe bet based on the architecture of the Spectrum that the interrupt button switches in the on-board ROM and triggers an NMI.&lt;/p&gt;&#xA;&lt;p&gt;The ROM images linked are 32kb and 16kb in size but the former just seems to be 16kb data copied twice you can also adduce that the EPROM is 16kb, in which case there might be some guesswork in figuring out when and where that 8kb of RAM appears.&lt;/p&gt;&#xA;&lt;p&gt;I found old mentions in comp.sys.sinclair that the Microdrive emulation added to a later version was partly hardware based, but seems to have come with a board revision. So an emulator author would probably start with the older EPROM in the hope that the extra hardware wasn't yet present.&lt;/p&gt;&#xA;&lt;p&gt;Otherwise, the good news is that the disk controller is an extremely standard part that just does vanilla IBM encoding, and based on the advertised floppy capacity of &amp;quot;thirteen 48kb games per disk&amp;quot;, you can assume the physical format of the data on disk is MFM (i.e. regular PC 'double density').&lt;/p&gt;&#xA;&lt;p&gt;So: you &lt;em&gt;might&lt;/em&gt; be able to image your disk using a plain USB disk drive (unless you find one that supports high density floppies only) as MFM is essentially the only thing they support — but they're often restricted to 512-byte sectors with fixed numbering so this isn't guaranteed. Might be worth a try before looking around for a less-common solution though. &lt;a href=&quot;https://www.msx.org/wiki/How_to_make_a_floppy_disk_image&quot; rel=&quot;nofollow noreferrer&quot;&gt;This MSX-related page&lt;/a&gt; gives a guide for Linux and macOS though the Windows section is empty. Some slight more research might be necessary there.&lt;/p&gt;&#xA;&lt;p&gt;Failing that, look into solutions that can image floppies for a machine like the Amstrad CPC, as those should handle different sector sizes and addressing, and the common CPC-related file formats can retain all that information. If you have an old enough PC to have a pre-USB floppy-disk controller and drive and an OS like DOS that gives software unfettered access to the controller then that should do the trick. Or low-level disk controllers now exist for exactly this problem, such as the Greaseweazle mentioned by scruss, the Kryoflux and others.&lt;/p&gt;&#xA;&lt;p&gt;Starting from a working Spectrum emulator it then shouldn't be too much of a trek to get the Swift disc interface added and to read your floppy.&lt;/p&gt;&#xA;&lt;p&gt;What software should write to a WD1770 is very well-known so you could isolate those addresses fairly easily, and pretty much the first thing the NMI routine will need to do is backup the current display so you'd likely be able to figure out the RAM question without too much dilemma. At that point it might well be as easy as just plugging in your disk image.&lt;/p&gt;&#xA;&lt;p&gt;A lot of the time when these slightly more obscure interfaces don't get emulated it's just because no test data is available; it's very possible that you'd be able to get an existing author interested just by having a disk image. Otherwise a Spectrum emulator is easy to knock up so someone like me who has the generally correct sort of code kicking about should be able to help.&lt;/p&gt;&#xA;&lt;p&gt;Alternatively, since my search wasn't especially thorough, you might find that the thing already is emulated — in which case please let me know so that I can change 90% of this answer.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2021-01-15T21:11:13.893" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17647" PostTypeId="2" ParentId="17644" CreationDate="2021-01-15T21:37:40.017" Score="4" Body="&lt;p&gt;Workbench 1.2 is known to have some bugs, and it would be better if you could boot into Workbench 1.3 instead.&lt;/p&gt;&#xA;&lt;p&gt;Based on your description, I suspect your mouse could be malfunctioning. It sounds like the left-button might be &amp;quot;sticking&amp;quot;, meaning that it registers as pressed after you release it or fails to detect the &amp;quot;click&amp;quot; when you press it. Can you try an alternate mouse?&lt;/p&gt;&#xA;&lt;p&gt;Servicing the mouse internals would be a reasonable troubleshooting step.&lt;/p&gt;&#xA;&lt;p&gt;Disassemble the mouse and inspect the button switches internally. They need to be clean, free of obstruction, and reliable in their action. Cleaning with isopropyl alcohol and mechanical agitation of the switches may be useful to ensure they are not obstructed. Also, inspect the wiring connected to the switches for any possible shorts or opens. And, as long as you have it disassembled, you should also clean the internal rollers with alcohol and wash mouse ball in warm, soapy water too.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2021-01-15T21:37:40.017" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17650" PostTypeId="2" ParentId="17642" CreationDate="2021-01-16T09:25:38.540" Score="2" Body="&lt;p&gt;Looks like it uses &lt;strong&gt;WD1770&lt;/strong&gt; I am not familiar with it but first check if &lt;strong&gt;WD1770&lt;/strong&gt; is compatible with IBM format. If yes then you can read the discs directly on PC ... If not you need &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7846/6868&quot;&gt;HW capable of reading the disc&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So in case of PC compatible you just image it using direct sector access in C++ (or any other language or utility) instead of file format. After you obtain the binary image of the floppy (one way or the other) there are two options:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;emulate FDC&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;so you need to have some emulator capable of emulating your FDC interface or add such functionality to some open source code one.&lt;/p&gt;&#xA;&lt;p&gt;In your last link are ROM images and also circuit (but that one is unreadable) so it might be possible to emulate this by reversing the circuitry... I done this before for my emulator and &lt;a href=&quot;https://cs.wikipedia.org/wiki/Didaktik_40&quot; rel=&quot;nofollow noreferrer&quot;&gt;D40/D80 FDC&lt;/a&gt; based on &lt;strong&gt;WD2797&lt;/strong&gt;. However this is easily doable only for emulators that runs on &lt;a href=&quot;https://stackoverflow.com/a/33317202/2521214&quot;&gt;MC (machine cycle) timing resolution&lt;/a&gt; (like mine) otherwise the FDC must be only hacked by hooking up to the HW and SW condition bypassing Z80 code and injecting FDC code/operations instead (that is how most emulators do it however this is not 100% compatible and custom loaders and stuff might not work) which no one without deep knowledge on the targeted FDC workings can do.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;extract files&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;or you bypass the FDC completely and extract the non compressed files from the image into format readable by emulators like &lt;code&gt;*.tap&lt;/code&gt;. In case you share some images (best with description what files and how long are in it) I would be happy to try to create a win32 converter that would do this for you.&lt;/p&gt;&#xA;&lt;p&gt;as the files are just snapshots this might be your best option. Ideally if you have also access to the HW you could create a specific memory pattern and save it to floppy so the inffering of filesystem is easier ... for example fill the 128K (RAM part) with 32 bit addresses (incremental value) so we can get the sectors together in correct order and then match it to FAT if its used...&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6868" LastActivityDate="2021-01-16T09:25:38.540" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17651" PostTypeId="1" AcceptedAnswerId="17655" CreationDate="2021-01-16T15:18:59.780" Score="2" ViewCount="91" Body="&lt;p&gt;I am trying to use the &lt;a href=&quot;https://www.floodgap.com/retrotech/xa/&quot; rel=&quot;nofollow noreferrer&quot;&gt;xa&lt;/a&gt; assembler to write some 6502 code. According to &lt;a href=&quot;https://www.floodgap.com/retrotech/xa/xa.1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the documentation&lt;/a&gt;, I can define a zeropage segment using the &lt;code&gt;.zero&lt;/code&gt; pseudo-op. I was hoping to do something like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.zero&#xA;&#xA;tmp1: .byt 0&#xA;tmp2: .byt 0&#xA;&#xA;.text&#xA;&#xA;      lda $12&#xA;      sta tmp1&#xA;      lda $34&#xA;      sta tmp2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I am hoping for this output:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;a512 8500 a534 8501&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But trying to assemble the above fails with:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;foo.s:line 1: 1000:Illegal segment error&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;According to the docs, &amp;quot;These pseudo-ops are valid in relative and absolute modes&amp;quot;. Just for kicks, I tried enabling relocatable mode (&lt;code&gt;xa -R ...&lt;/code&gt;), which compiles the code without error, but now I have an &lt;code&gt;o65&lt;/code&gt; format file instead of raw assembly output (and linking that with &lt;code&gt;ldo65&lt;/code&gt; produces an &lt;code&gt;o65&lt;/code&gt; binary).&lt;/p&gt;&#xA;&lt;p&gt;Is it possible to use segment pseudo-ops in xa while still producing raw assembly output?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;@Raffzahn asked for complete command lines. Assuming the code is in file &lt;code&gt;xatest.s&lt;/code&gt;, this fails:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;xa xatest.s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This fails:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;xa -bz 0 -bt 512 xatest.s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This completes without error, but doesn't produce useful output:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;xa -R xatest.s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7235" LastEditorUserId="7235" LastEditDate="2021-01-16T18:50:51.567" LastActivityDate="2021-01-16T20:22:37.210" Title="Defining zeropage address labels in xa assembler?" Tags="&lt;assembly&gt;&lt;6502&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17652" PostTypeId="1" CreationDate="2021-01-16T16:11:11.337" Score="2" ViewCount="188" Body="&lt;p&gt;What was the most popular operating system on the PDP-11 computers?&lt;/p&gt;&#xA;&lt;p&gt;And is it known what percentage of PDP-11 computers used this operating system?&lt;/p&gt;&#xA;" OwnerUserId="20556" LastEditorUserId="6659" LastEditDate="2021-01-16T17:14:44.953" LastActivityDate="2021-01-16T19:35:18.333" Title="What was the most popular operating system on the PDP-11 computers?" Tags="&lt;history&gt;&lt;pdp-11&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2021-01-16T19:09:51.927" ContentLicense="CC BY-SA 4.0" />
  <row Id="17653" PostTypeId="2" ParentId="17652" CreationDate="2021-01-16T17:34:53.507" Score="2" Body="&lt;p&gt;I'm only guessing, but I would guess in the late '70s and early '80s either&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;RSTS/E for traditional timesharing use&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;RSX-11M for real-time application use; maybe this transitioned to RSX-11M-Plus as larger memories became common&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I have no data for this, just an impression of what was going on in DEC while I was there.   I'd be interested in numbers if anyone can come up with them.  The answer should in principle be knowable for DEC systems, since software came with a price tag.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-01-16T19:35:18.333" LastActivityDate="2021-01-16T19:35:18.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17654" PostTypeId="1" CreationDate="2021-01-16T19:51:27.953" Score="3" ViewCount="148" Body="&lt;p&gt;In this DEC &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp11/memos/740919_PDP-11_Strategy_Status.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-11 Strategy Memo&lt;/a&gt; from Sept 1974, there is this curious question.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;HOW MUCH OF THE DEC SYSTEM 10 SOFTWARE&lt;br /&gt;&#xA;CAN THE 11/85 USE, OR DOES THE 11/85 HAVE&lt;br /&gt;&#xA;TO START FROM SCRATCH?&lt;/p&gt;&#xA;&lt;p&gt;CONFLICTING GOALS?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(All caps in original)&lt;/p&gt;&#xA;&lt;p&gt;What was the PDP-11/85 intended to be?&lt;br /&gt;&#xA;Why might it be able to run DECsystem-10 software?&lt;/p&gt;&#xA;&lt;p&gt;To put this in context, the VAX strategy was still emerging at the time; there was still thought that a VAX really would be an addressability extension of the PDP-11.  The same memo talks about extended (i.e., 32-bit) addressing in the 11/44, which did not happen.&lt;/p&gt;&#xA;&lt;p&gt;Even if the 11/85 was an early designation for what became the VAX-11/780, why might it be able to use DECsystem-10 software?  Were they talking about BLISS source compatibility? Or something more fundaemental?&lt;/p&gt;&#xA;&lt;p&gt;Or, to summarize: what was a PDP-11/85 expected to be?&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-01-16T19:51:27.953" Title="What was a DEC PDP-11/85 intended to be, and why might it be able to use DECsystem-10 software?" Tags="&lt;history&gt;&lt;pdp-11&gt;&lt;dec&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17655" PostTypeId="2" ParentId="17651" CreationDate="2021-01-16T20:22:37.210" Score="2" Body="&lt;p&gt;This code achieves the output you want:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    tmp1=$00&#xA;    tmp2=$01&#xA;&#xA;* = $100&#xA;    lda $12&#xA;    sta tmp1&#xA;    lda $34&#xA;    sta tmp2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I don't think the segment identifiers are really intended to be used in raw output. They're for relocatable object files, as the documentation tries to allude to:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The following pseudo-ops apply primarily to relocatable .o65 objects.&#xA;A full discussion of the relocatable format is beyond the scope of this&#xA;manpage, as it is currently a              format in flux.&#xA;Documentation on the proposed v1.2 format is in doc/fileformat.txt&#xA;within the xa installation directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2021-01-16T20:22:37.210" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17656" PostTypeId="1" AcceptedAnswerId="17658" CreationDate="2021-01-16T23:31:19.900" Score="4" ViewCount="419" Body="&lt;p&gt;I've been looking at a bunch of different 6502 assemblers recently (dasm, ca65, xa, kickass), and many of them have support for multiple code segments. Some of these assemblers can generate relocatable object code, and have a separate linker to create the final binary. Others don't, and I'm trying to understand the use of code segments in this second case.&lt;/p&gt;&#xA;&lt;h2&gt;example 1&lt;/h2&gt;&#xA;&lt;p&gt;For example, the following two snippets of dasm code produce the same output. First, one that uses an undefined (&lt;code&gt;.u&lt;/code&gt;) segment to label some memory addresses:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        processor 6502&#xA;&#xA;        seg.u zero&#xA;        org $0&#xA;&#xA;tmp1    ds.b 1&#xA;tmp2    ds.b 1&#xA;&#xA;        seg text&#xA;        org $200&#xA;&#xA;        lda #$12&#xA;        sta tmp1&#xA;        lda #$34&#xA;        sta tmp2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2&gt;example 2&lt;/h2&gt;&#xA;&lt;p&gt;And a second that just uses a pair of explicit labels instead:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        processor 6502&#xA;&#xA;tmp1    = $00&#xA;tmp2    = $01&#xA;&#xA;        org $200&#xA;&#xA;        lda #$12&#xA;        sta tmp1&#xA;        lda #$34&#xA;        sta tmp2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Is there a practical difference between these two examples? Are there situations in which the use of segment directives either makes something substantially easier to implement or significantly impacts the clarity of the code?&lt;/p&gt;&#xA;" OwnerUserId="7235" LastEditorUserId="7235" LastEditDate="2021-01-17T14:39:43.597" LastActivityDate="2021-01-17T23:20:50.510" Title="The use of segments in non-relocating assemblers" Tags="&lt;assembly&gt;&lt;6502&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17658" PostTypeId="2" ParentId="17656" CreationDate="2021-01-17T01:03:01.463" Score="6" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Using segments offloads program code management to dedicated tools.&lt;/li&gt;&#xA;&lt;li&gt;Not using segments replaces these tools by the a programmer doing everything by hand.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While the difference may not be a big one with short programs, it gets relevant soon.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Segments are a way to organize code and/or data on a logical level. Segments group sections of code and/or data according to their use. When grouped, they can be used to assign meta-attributes needed to manage the program.&lt;/p&gt;&#xA;&lt;p&gt;The basic organization of C (Unix) programs as three segments is a great example here.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TEXT - collects all executable data (code).&lt;/li&gt;&#xA;&lt;li&gt;DATA - all non executable data fields (with predefined values)&lt;/li&gt;&#xA;&lt;li&gt;BSS - joins all uninitialized data.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;By assigning everything a program source generates during compilation to either segment, it allows the linker, as first step, to combine all chunks of each kind into a single element and adjust all addresses accordingly. The loader, as next stage, can place these unified blobs into memory and, if supported by architecture, for example set executable (TEXT) or non-executable (DATA) flags for protection. Similar it can enable write protection for code and so on.&lt;/p&gt;&#xA;&lt;p&gt;So again, segments are about two basic mechanics:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;grouping code/data&lt;/li&gt;&#xA;&lt;li&gt;assigning attributes to these groups.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Of course, with rather simple programs, like the example given, without much structure, the grouping doesn't give much support. Similar, with rather simple systems like a bare 6502, there isn't much management that could be simplified by segments.&lt;/p&gt;&#xA;&lt;p&gt;Still, even with a 6502, complex structures can be build, where usage of segments will simplify management - and more important reduce chance of programming errors.&lt;/p&gt;&#xA;&lt;p&gt;Imagine a game, for example for an Atari VCS 2600; as soon as this project goes beyond basic PONG, it will outgrow the 4 KiB ROM space the console offers. So the game needs to be split into multiple code chunks that get paged in and out depending on program flow (essentially overlays). All of them will reside at the same address as viewed from the CPU, but different addresses within the ROM chip.&lt;/p&gt;&#xA;&lt;p&gt;Such a program may of course still be handled the 'simple way' of our second example (without segments). But to do so, the whole project must reside in a single source file. Or at most, it can be split at physical addresses. One must keep very fine track of what to put where.&lt;/p&gt;&#xA;&lt;p&gt;With segments, code can be structured (almost) freely, as they tell the linker how to join the various pieces, each compiled separately, into a single binary. In our example, one would simply define a segment name for each ROM page (like PAGE1/2/3/etc.). When writing code intended to go into page 1, it simply gets prefixed by &lt;code&gt;.segment &amp;quot;PAGE1&amp;quot;&lt;/code&gt; (&lt;a href=&quot;https://www.cc65.org/doc/ca65-11.html#.SEGMENT&quot; rel=&quot;nofollow noreferrer&quot;&gt;CA65 syntax&lt;/a&gt;). After that, the linker will take care of grouping all code for page 1 together, no matter in what source file it was written or compiled from and in which sequence. The programmer becomes free to organize source in a manner reflecting the way the game is organized, while compiler/linker/loader takes care of putting it into the sequence the computer needs to see it. The linker will also report when a segment outgrows the available space, so no-one has to count bytes by hand. After all, isn't the whole purpose of using tools, like an Assembler, to offload the grind to the computer, so the programmer can focus on the problem?&lt;/p&gt;&#xA;&lt;p&gt;The same issue comes, BTW, as well up on larger 6502 systems than a VCS. Like having even more complex programs that outgrow even a 64 KiB RAM - or need to be shrunk by modularisation to keep some RAM free for user data. :))&lt;/p&gt;&#xA;&lt;p&gt;Of course, more sophisticated usage also needs more sophisticated tools. XA65 is here rather on the simple side. CA65 in turn is quite capable of handling complex linking situations - which as well means it needs a bit more time to discover how to do it.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line, like any other management tool, segments shine with increasing complexity of the task to be done.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-01-17T23:20:50.510" LastActivityDate="2021-01-17T23:20:50.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17659" PostTypeId="2" ParentId="17636" CreationDate="2021-01-17T01:47:53.397" Score="2" Body="&lt;p&gt;This rather detailed article does give some insight in the ways they worked back then:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://vgdensetsu.tumblr.com/post/179656817318/designing-2d-graphics-in-japan-from-the-late-70s&quot; rel=&quot;nofollow noreferrer&quot;&gt;Designing 2D graphics in the Japanese industry&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It doesn't go into details of fireballs, but does capture the various stages of development and their evolution over time. Especially the example of CRT vs. pixel is an interesting one.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-01-17T01:47:53.397" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17660" PostTypeId="2" ParentId="17656" CreationDate="2021-01-17T02:51:16.957" Score="9" Body="&lt;p&gt;A convenient application of segments is the handling of zeropage addresses in &lt;code&gt;ca65&lt;/code&gt;. Often, code pieces are written in a way that they use fixed coded ZP addresses (usually defined in some config file), which makes it very difficult to avoid and debug zeropage address conflicts when having more than one module.&lt;/p&gt;&#xA;&lt;p&gt;The standard assembler configuration for the C64 &lt;code&gt;c64-asm.cfg&lt;/code&gt; defines a zeropage segment from $02 to $ff, so that a program can use the segment to reserve memory for zeropage addresses instead of a fixed address.&lt;/p&gt;&#xA;&lt;p&gt;Example with two modules:&lt;/p&gt;&#xA;&lt;p&gt;A simple module using a zeropage address:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;;program myprog1.s&#xA;.import display_chars&#xA;.zeropage&#xA;myvar: .res 1&#xA;&#xA;.code&#xA;        jsr display_chars&#xA;        sta myvar&#xA;        lda $400&#xA;        sta $d020&#xA;        lda myvar&#xA;        rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and a second module also using the zeropage.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;;program myprog2.s&#xA;.export display_chars&#xA;.zeropage&#xA;zptr: .res 2&#xA;&#xA;.code&#xA;display_chars:&#xA;        lda #&amp;lt;$400&#xA;        sta zptr&#xA;        lda #&amp;gt;$400&#xA;        sta zptr+1&#xA;        ldy #$00&#xA;loop:&#xA;        tya&#xA;        sta (zptr),y&#xA;        dey&#xA;        bne loop&#xA;        rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now after assembling and linking it with&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ca65 myprog1.s&#xA;ca65 myprog2.s&#xA;cl65 myprog1.o myprog2.o -C c64-asm.cfg -u __EXEHDR__ -o myprog.prg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;we get a program that uses three zeropage addresses ($2, $3, $4 in the standard configuration for C64) for the two modules.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2021-01-17T02:51:16.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17662" PostTypeId="1" AcceptedAnswerId="17663" CreationDate="2021-01-17T16:34:28.923" Score="0" ViewCount="365" Body="&lt;p&gt;Would somebody care to explain how &amp;quot;Super Mario Bros.&amp;quot; was released in 1985. But the DASM Assembler came out in 1987?&lt;/p&gt;&#xA;&lt;p&gt;The 6502 Assembly language was introduced in 1975. How would you compile/convert Assembly code into machine code back then? Why wouldn't we just use &lt;em&gt;that&lt;/em&gt; compiler instead of using DASM? How does that compiler compare to DASM? What are the differences?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&#xA;What did Nintendo use to compile their Assembly code? There's no way they wrote actual machine code, right?&lt;/p&gt;&#xA;" OwnerUserId="20561" LastActivityDate="2021-01-17T18:44:10.633" Title="How was “Super Mario Bros” made with Assembly if the DASM compiler came out in 1987?" Tags="&lt;assembly&gt;&lt;6502&gt;&lt;nintendo&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17663" PostTypeId="2" ParentId="17662" CreationDate="2021-01-17T16:59:25.433" Score="7" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;Your confusion might steam from not being aware that DASM is just one of many 6502 capable assemblers which most came way before DASM - and some much later, like CA65.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Fine Print&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Would somebody care to explain how &amp;quot;Super Mario Bros.&amp;quot; was released in 1985. But the DASM Assembler came out in 1987?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is no relation between Super Mario Bros. and DASM.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The 6502 Assembly language was introduced in 1975. How would you compile/convert Assembly code into machine code back then?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By using the cross assembler provided by MOS. That &lt;a href=&quot;http://retro.hansotten.nl/uploads/6502docs/CrossAssemblerMOSmanual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;cross assembler&lt;/a&gt; did run on a GE timeshare system and was already available before the 6502 went to market. Cross assembler packages were as well offered for IBM mainframe and DEC PDP-11.&lt;/p&gt;&#xA;&lt;p&gt;Heck, in some way we have returned to these times by using again cross assemblers like DASM, XA65 or CC65, haven't we?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why wouldn't we just use that compiler instead of using DASM?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, shouldn't the question be rather &amp;quot;why using DASM?&amp;quot;, as it is just one of many assemblers (and other tools) able to  produce 6502 code. (*1)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How does that compiler compare to DASM?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, the first ones provided by MOS are rather primitive, something that is even visible in the syntax of basic 6502 instructions, as they are made to be compiled in a single run without much analysis needed.&lt;/p&gt;&#xA;&lt;p&gt;Later assemblers added more tools to structure and modularize source code, macro capabilities, language/runtime linking and so on.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What are the differences?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Since there are literally dozens of 6502 capable assemblers (if not hundreds), any serious comparison would take a book of many pages, so a bit out of scope here. If there are really pairs of interest to you, maybe add a more specific page.&lt;/p&gt;&#xA;&lt;p&gt;In general it ranges from Wozniaks &lt;a href=&quot;https://www.callapple.org/vintage-apple-computers/apple-ii/apple-mini-assembler/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mini-Assembler&lt;/a&gt; build in the Apple II ROMs (1977) over similar but more sophisticated ones available for many 6502 machines of the late 70s/early 80s, over third party assemblers like &lt;a href=&quot;https://en.wikipedia.org/wiki/Lazer%27s_Interactive_Symbolic_Assembler&quot; rel=&quot;nofollow noreferrer&quot;&gt;LISA&lt;/a&gt;, some grew from simple to quite sophisticated, like &lt;a href=&quot;https://en.wikipedia.org/wiki/Merlin_(assembler)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Merlin&lt;/a&gt;, all the way to serious capable systems like CA65 or, IMHO the best of all, &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Byte_Works&quot; rel=&quot;nofollow noreferrer&quot;&gt;ORCA/M&lt;/a&gt; which gives almost mainframe like flexibility.&lt;/p&gt;&#xA;&lt;p&gt;In this range &lt;a href=&quot;https://dasm-assembler.github.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DASM&lt;/a&gt; occupies a spot at the lower middle class. Its capabilities are rather limited, but it shines with a good documentation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;TL;DR What did Nintendo use to compile their Assembly code?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'd says some tool chain of their own, were the assembler was only a tiny part of. Being a well funded company they did employ standard development systems, usually hosted on larger workstations running special cross assembler packages. Such systems do as well include ICE (In Circuit Emulation) debugging and alike, simplifying bug hunting a lot.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There's no way they wrote actual machine code, right?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really, who would? (*2)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 -  DASM is not among the most capable. It might be fine for small projects, but as a professional, getting paid to do the job, I wouldn't use DASM for anything larger than a few pages - the same amount one writes Sunday afternoon using Notepad - if at all.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Then again, Wozniak did not only write all Apple 1 software, but as well the Apple II monitor and much of Integer BASIC by hand. But these were not only the very early times but as well at a time when Apple wasn't loaded with cash like now - to put it mildly.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="3481" LastEditDate="2021-01-17T18:44:10.633" LastActivityDate="2021-01-17T18:44:10.633" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17664" PostTypeId="2" ParentId="17662" CreationDate="2021-01-17T17:06:01.223" Score="12" Body="&lt;p&gt;The Japanese children's book &lt;a href=&quot;https://www.chrismcovell.com/secret/weekly/Stars_of_the_Family_Computer.html&quot; rel=&quot;noreferrer&quot;&gt;The Stars of Famicom Games&lt;/a&gt; includes pictures of Super Mario Brothers 3 development for the NES/Famicom.  Code was written on an &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_64000&quot; rel=&quot;noreferrer&quot;&gt;HP 64000 Logic Development System&lt;/a&gt; and cross assembled. See also: &lt;a href=&quot;https://www.retroreversing.com/famicom-nes-development-kit/&quot; rel=&quot;noreferrer&quot;&gt;NES (Famicom) Development Kit Hardware&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3261" LastActivityDate="2021-01-17T17:06:01.223" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17665" PostTypeId="1" CreationDate="2021-01-17T18:02:59.357" Score="7" ViewCount="2488" Body="&lt;p&gt;I recently sold a defective Amiga 1000 on Ebay for over $300. I'm going to list my old Amiga 1200 and expect to get over $1000 for it since its  working and &amp;quot;souped up&amp;quot;.&#xA;This made me wonder: Besides pure nostalgia, what are people using Amigas for today?&#xA;In its day it was unbeatable but the CGI I managed to create on a Windows 10 computer now makes anything I did with the Amiga 30 years ago seem laughable.&#xA;I respect my buyers privacy and am reluctant to ask them.&lt;/p&gt;&#xA;" OwnerUserId="19429" LastActivityDate="2021-01-18T23:30:29.927" Title="What are people using old (and expensive) Amigas for today?" Tags="&lt;amiga&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ClosedDate="2021-01-19T00:08:37.100" ContentLicense="CC BY-SA 4.0" />
  <row Id="17666" PostTypeId="2" ParentId="17662" CreationDate="2021-01-17T18:04:38.030" Score="2" Body="&lt;p&gt;DASM is not the only 6502 assembler.  It wasn't the first or last, either.  Nintendo had &lt;a href=&quot;https://www.retroreversing.com/famicom-nes-development-kit/&quot; rel=&quot;nofollow noreferrer&quot;&gt;their own in-house development system&lt;/a&gt;, which included an assembler among other tools.  I'm sure that 3rd party developers used a variety of assemblers, as well.  6502 assemblers were widespread even on non-6502 platforms by the mid-80s, so it's doubtful anyone ever wrote significant amounts of direct machine code for the Famicom or NES.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2021-01-17T18:04:38.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17667" PostTypeId="2" ParentId="17665" CreationDate="2021-01-17T18:40:34.253" Score="13" Body="&lt;p&gt;I think your expectation of the price you might get is wildly overoptimistic.&lt;/p&gt;&#xA;&lt;p&gt;The A1000 was an unusual machine, the first model in a new range. It did not sell in very high numbers and was discontinued in 1987 after just two years on the market.&lt;/p&gt;&#xA;&lt;p&gt;The A1200 was a fairly common high-end home computer, stayed in production for over four years, from Commodore then from Escom. It went off sale in 1996, nearly a decade more recently. It's also much easier to expand -- for instance it accepts IDE hard disks (or CF cards) and PCMCIA cards directly.&lt;/p&gt;&#xA;&lt;p&gt;An A1000 is more desirable to most collectors than an A1200, I would expect.&lt;/p&gt;&#xA;&lt;p&gt;What do people use them for? Well, hardcore Amiga fans who did art and so forth on the machines probably kept theirs. Someone looking for one now is probably just a collector. Most collectors don't do anything with the machines: they clean them up and put them on a shelf. Maybe it might get tested then used to play a few games.&lt;/p&gt;&#xA;" OwnerUserId="209" LastActivityDate="2021-01-17T18:40:34.253" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17668" PostTypeId="2" ParentId="17665" CreationDate="2021-01-17T18:50:13.323" Score="7" Body="&lt;p&gt;Your question seems to assume that there must be some practical need for owning a classic Amiga computer today, and that the price of the machine in the marketplace should be reflective of this practical need.&lt;/p&gt;&#xA;&lt;p&gt;For practical use, the only technically sound cases are &lt;strong&gt;Amiga hardware development and Amiga emulator development&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;New hardware releases occur periodically. Those who develop new Amiga hardware need an accurate test-bed, and that likely means acquiring a real Amiga. They at least need testers with access to Amigas to perform the testing.&lt;/p&gt;&#xA;&lt;p&gt;In addition, for those involved in creating either a hardware (e.g. FPGA) or software emulation for the Amiga, the only definitive test of the emulation accuracy is to compare it with the behavior of the actual hardware. For this reason, emulation development benefits from being able to conduct such testing, and those developers have a practical need for the classic hardware.&lt;/p&gt;&#xA;&lt;p&gt;Those developing games or other content (new releases still occur regularly) may desire to test or enjoy their creations on an actual Amiga. This because they are &amp;quot;enthusiasts&amp;quot; who want to &lt;strong&gt;capture an &amp;quot;authentic&amp;quot; experience&lt;/strong&gt;. The authenticity of using the original hardware is not easily replicated through emulation. But, this content is still quite functional in an emulator, and that is enough for many of the creators.&lt;/p&gt;&#xA;&lt;p&gt;So, &lt;strong&gt;practical use-cases for a classic Amiga are quite &amp;quot;niche&amp;quot;&lt;/strong&gt;. As @Raffzahn noted, those really needing an Amiga for development reasons probably already have one or more. This puts them firmly in the group of &amp;quot;those not selling Amigas&amp;quot;, rather than in the group that might be bidding on one for auction today.&lt;/p&gt;&#xA;&lt;p&gt;The majority of those wanting to buy the machines are viewing them as collectibles, and for them the price is not related to the practical utility of the Amiga itself. Rather, the price is a function of the &lt;strong&gt;rarity and the importance attached&lt;/strong&gt; to the item by the buyer. This is essentially what sets the prices for all collectibles.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-01-17T23:03:52.843" LastActivityDate="2021-01-17T23:03:52.843" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17669" PostTypeId="1" CreationDate="2021-01-17T23:49:44.500" Score="0" ViewCount="169" Body="&lt;p&gt;I have a function that should be callable with the following syntax:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void __fastcall__ initSIDplayer1(uint8_t a);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The &lt;code&gt;__fastcall__&lt;/code&gt; modifier here means that the argument is passed in the Accu instead of the software stack. The address is given as 16-bit address, for example, 0x1000 for a SID player file that is loaded with the.&lt;/p&gt;&#xA;&lt;p&gt;I have used the following line to define the function with the specified address:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;static void  __fastcall__ (*initSIDplayer1)(uint8_t)=(const void *)0x1000;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The approach works, but the compiler generates a lot of code in comparison to the statically defined function &lt;code&gt;initSIDplayer1&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;;&#xA;; code generated for initSIDplayer1(1);&#xA;;&#xA;        lda     #$61&#xA;        jsr     _initSIDplayer&#xA;;&#xA;; code generated for initSIDplayer2('a');&#xA;;&#xA;        lda     _initSIDplayer2&#xA;        ldx     _initSIDplayer2+1&#xA;        jsr     pushax&#xA;        lda     #$61&#xA;        pha&#xA;        ldy     #$00&#xA;        lda     (sp),y&#xA;        sta     jmpvec+1&#xA;        iny&#xA;        lda     (sp),y&#xA;        sta     jmpvec+2&#xA;        pla&#xA;        jsr     jmpvec&#xA;        jsr     incsp2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The generated code for initSIDplayer2 writes the target address into memory (using two stack operations) and then jumps to that memory address-1 where it executes another jmp. This is a very flexible, but slow and cumbersome approach.&lt;/p&gt;&#xA;&lt;p&gt;How do I need to write the function definition with the given address so that the compiler translates it into a simple &lt;code&gt;jsr ADDR&lt;/code&gt; call like with &lt;code&gt;initSIDplayer1&lt;/code&gt;?&lt;/p&gt;&#xA;&lt;p&gt;I know that this can be also done with inline assembler or an external assembler file, but I would be interested in the C code syntax.&lt;/p&gt;&#xA;&lt;p&gt;For completeness, this is the minimum test program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdint.h&amp;gt;&#xA;&#xA;void __fastcall__ initSIDplayer1(uint8_t a);&#xA;&#xA;static void  __fastcall__ (*initSIDplayer2)(uint8_t)=(const void *)0xFFD2;&#xA;&#xA;void main() {&#xA;  initSIDplayer1('a');&#xA;  initSIDplayer2('a');&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I compiled it with &lt;code&gt;cc65 function.c&lt;/code&gt; which generates an &lt;code&gt;.s&lt;/code&gt; file.&lt;/p&gt;&#xA;" OwnerUserId="11100" LastEditorUserId="11100" LastEditDate="2021-01-18T17:32:15.017" LastActivityDate="2021-01-18T17:32:15.017" Title="Defining a C function with given address in cc65" Tags="&lt;6502&gt;&lt;cc65&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17670" PostTypeId="2" ParentId="17669" CreationDate="2021-01-18T02:05:39.883" Score="4" Body="&lt;p&gt;Preface: I'm not the world greatest C expert - not at least as I dislike C quite a lot :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;What Happenes&lt;/h2&gt;&#xA;&lt;p&gt;The general issue here is that CC65 puts the address into a pointer variable, visible when looking at the generated source:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.segment    &amp;quot;DATA&amp;quot;&#xA;_myfunction2:&#xA;    .word   $FFD2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Later that variable gets loaded onto the stack - like CC65 does with every 16 bit value - and from there moved to a prepared jump which then is taken. Kind of ok-ish with variable function pointers, less cool with a constant address.&lt;/p&gt;&#xA;&lt;h2&gt;Solution in C&lt;/h2&gt;&#xA;&lt;p&gt;No idea. Personally I'd write&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;static void __fastcall__ (* const myfunction2)(uint8_t a) = (const void *) 0xFFD2;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;as myfunction2 is a constant, but that should not make a difference and true, it doesn't :(&lt;/p&gt;&#xA;&lt;p&gt;I played a bit around, but couldn't see any way to change that behaviour. Even with using implied type conversion (adds only a warning) didn't change the result. The same for leaving out the non standard &lt;code&gt;__fastcall__&lt;/code&gt; attribute (A is used anywayfor the first parameter).&lt;/p&gt;&#xA;&lt;h2&gt;What I'd do:&lt;/h2&gt;&#xA;&lt;p&gt;The main problem here is that issues like external function addresses, and that's what a ROM function is, aren't really a things C cares for. That's a job for the linker, isn't it? So why not adding an external reference and have the linker resolve it?&lt;/p&gt;&#xA;&lt;p&gt;In this case, the function definition would be simply&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void __fastcall__ myfunction2(uint8_t a);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The address could now be delivered to the linker using parameter or with its configuration file. Then again, I think it's safe to assume that there will be more than just one entry point to ROM than just this. Going by the address it's as well quite likely we have a C64 at hand, right? So lets add a collection of entry points:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; C64_Kernal_Calls.s:&#xA;;&#xA;; Commodore-compatibles Kernal functions&#xA;&#xA;CHRIN  :=       $FFCF&#xA;CHROUT :=       $FFD2&#xA;&#xA;       .export  CHRIN&#xA;       .export  CHROUT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;Of course this can be beautified using a macro:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; C64_Kernal_Calls.s:&#xA;;&#xA;; Commodore-compatibles Kernal functions&#xA;&#xA;.macro  entrypoint LBL,ADR&#xA;LBL     :=      ADR&#xA;        .export ADR&#xA;.endmacro&#xA;&#xA;      entrypoint CHRIN, $FFCF&#xA;      entrypoint CHROUT,$FFD2&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Calling that from C now works rather simple:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void __fastcall__ CHROUT(uint8_t a);&#xA;&#xA;// ...&#xA;&#xA;    CHROUT('a');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Going that road´provides, beside solving the issue, considerable better structuring than embedding addresses into random source files, doesn't it?&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Always program as if you're not writing another Hello_World but the next GEOS.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-01-18T02:05:39.883" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17671" PostTypeId="2" ParentId="17665" CreationDate="2021-01-18T04:50:33.207" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Besides pure nostalgia, what are people using Amigas for today?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The same things I was using it for in 1997 - writing programs in 68k assembler, browsing the Net and downloading the latest stuff from Aminet, listening to music, playing games... You see, for me it's not nostalgia, it's just continuing to do what I have always done.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In its day it was unbeatable but the CGI I managed to create on a&#xA;Windows 10 computer now makes anything I did with the Amiga 30 years&#xA;ago seem laughable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;CGI was never my thing, so I have no need for the latest hardware. I don't even own a Windows 10 PC and probably never will (why pay for an OS you hate?). But what advantages does an ancient Amiga have for me over a modern PC?&lt;/p&gt;&#xA;&lt;p&gt;I enjoy designing and building electronic devices, both for work and as a hobby. I want to know exactly what I am doing down to individual component level, which is practically impossible in a modern PC. The Amiga has relatively simple hardware and OS that is easy to poke around in. It can also be programmed 'bare metal' for games or hardware interfacing. I have 34 years of experience with it (and still learning!). At 63 years old there's no way I could get anywhere near that depth of knowledge on a modern PC, even if I wanted to.&lt;/p&gt;&#xA;&lt;p&gt;For many of us who have owned an Amiga or still do, the scene is better today than it ever was. New hardware addons are being designed that take advantage of modern technology at very low cost. Now anybody can design a PCB and have it manufactured to professional standards, and even sell finished products on eBay for a small profit. There also several online shops that specialize in Amiga hardware.&lt;/p&gt;&#xA;&lt;p&gt;On the software side, most titles are now abandonware that is free to download. The OS source code was leaked (for 'personal study' only!) and there is an open-source replacement. Cross development is much easier and cheaper now. New games are being produced that are showing what can be done when developers with real talent apply themselves (rather than just quickly porting stuff from other platforms), and games that never made it to the Amiga before are getting new life. The move towards open-source has also made it easier to keep up with modern standards, and official development of the OS was recently restarted.&lt;/p&gt;&#xA;&lt;p&gt;An Amiga might not be the best computer for productivity today, but as &lt;em&gt;entertainment&lt;/em&gt; it is still a good choice. Few would consider building and configuring a new PC to be anything but a chore, while tinkering with old computers is still fun. With Covid running rampant and many people having unexpected spare time on their hands, some are returning to hobbies like computing. That is why Amiga prices are going up.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm going to list my old Amiga 1200 and expect to get over $1000 for&#xA;it since its working and &amp;quot;souped up&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Right now that price is probably a bit steep (unless it has an 060 or PPC accelerator in it), but leave it there long enough and you just might get a buyer eventually. Then again, you might change your mind and decide to keep it!&lt;/p&gt;&#xA;" OwnerUserId="4663" LastActivityDate="2021-01-18T04:50:33.207" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17672" PostTypeId="1" CreationDate="2021-01-18T06:01:07.733" Score="3" ViewCount="113" Body="&lt;p&gt;Does there exist either an embedded task manager, or a third party task manager for for Mac OS 8/9?&lt;/p&gt;&#xA;&lt;p&gt;So I can:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;View currently running tasks&lt;/li&gt;&#xA;&lt;li&gt;Kill processes&lt;/li&gt;&#xA;&lt;li&gt;View system load&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15407" LastActivityDate="2021-01-18T06:01:07.733" Title="Task manager for Mac OS 8/9" Tags="&lt;mac-os-classic&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17673" PostTypeId="1" CreationDate="2021-01-18T06:04:57.670" Score="8" ViewCount="403" Body="&lt;p&gt;Arcade strider game show level name use different language follow Strider Hiryu (飛竜)'s adventure. But I not recognize languages for level  3 and level 5.&lt;/p&gt;&#xA;&lt;p&gt;Can see titles in this video, &lt;a href=&quot;https://www.youtube.com/watch?v=FZwzRRHn53k&quot; rel=&quot;noreferrer&quot;&gt;Arcade Longplay [052] Strider&lt;/a&gt;, at times:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FZwzRRHn53k&amp;amp;t=384&quot; rel=&quot;noreferrer&quot;&gt;6:24&lt;/a&gt; - Level 3&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ClsxW.png&quot; rel=&quot;noreferrer&quot; title=&quot;Strider - Level 3&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ClsxW.png&quot; alt=&quot;Strider - Level 3&quot; title=&quot;Strider - Level 3&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FZwzRRHn53k&amp;amp;t=802&quot; rel=&quot;noreferrer&quot;&gt;13:22&lt;/a&gt; - Level 5&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B85Ls.png&quot; rel=&quot;noreferrer&quot; title=&quot;Strider - Level 5&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B85Ls.png&quot; alt=&quot;Strider - Level 5&quot; title=&quot;Strider - Level 5&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Other levels' titles:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Казахскся. ССР. A.D.2048&lt;/li&gt;&#xA;&lt;li&gt;Сибйрь&lt;/li&gt;&#xA;&lt;li&gt;???&lt;/li&gt;&#xA;&lt;li&gt;Amazon&lt;/li&gt;&#xA;&lt;li&gt;???&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;What language is used for levels 3 and 5?&lt;/p&gt;&#xA;" OwnerUserId="18369" LastEditorUserId="202" LastEditDate="2021-01-18T07:45:32.013" LastActivityDate="2021-01-18T16:08:27.800" Title="What is language use for level name in level 3 and 5 of Strider arcade game?" Tags="&lt;arcade&gt;&lt;game&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ClosedDate="2021-01-18T16:45:54.353" ContentLicense="CC BY-SA 4.0" />
  <row Id="17674" PostTypeId="2" ParentId="17673" CreationDate="2021-01-18T07:43:52.397" Score="14" Body="&lt;p&gt;(Links are to the pertinent points in the video)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;00:15 &lt;a href=&quot;https://youtu.be/FZwzRRHn53k?t=15&quot; rel=&quot;nofollow noreferrer&quot;&gt;Казахскся. ССР. A.D.2048&lt;/a&gt;&lt;br /&gt;&#xA;&amp;quot;Kazakh SSR A.D.2048&amp;quot;&lt;br /&gt;&#xA;(Russian script, Latin date)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;02:49 &lt;a href=&quot;https://youtu.be/FZwzRRHn53k?t=169&quot; rel=&quot;nofollow noreferrer&quot;&gt;Сиби́рь&lt;/a&gt; &lt;sup&gt;1&lt;/sup&gt;&lt;br /&gt;&#xA;&amp;quot;Siberia&amp;quot;&lt;br /&gt;&#xA;(Russian script)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;06:24 &lt;a href=&quot;https://youtu.be/FZwzRRHn53k?t=384&quot; rel=&quot;nofollow noreferrer&quot;&gt;געלראב&lt;/a&gt;&lt;br /&gt;&#xA;&amp;quot;Balrog&amp;quot;&lt;sup&gt;2&lt;/sup&gt; (written backwards and mis-spelled&lt;sup&gt;3&lt;/sup&gt;)&lt;br /&gt;&#xA;(looks like some kind of Aramaic or Hebrew script; Hebrew shown above)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;11:03 &lt;a href=&quot;https://youtu.be/FZwzRRHn53k?t=663&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amazon&lt;/a&gt;&lt;br /&gt;&#xA;&amp;quot;Amazon&amp;quot;&lt;br /&gt;&#xA;(Latin/English script)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;13:23 &lt;a href=&quot;https://youtu.be/FZwzRRHn53k?t=803&quot; rel=&quot;nofollow noreferrer&quot;&gt;ᚦᛖ ᛏᚻᛚᚱᛒ ᛗᛟᛟᚾ&lt;/a&gt;&lt;br /&gt;&#xA;Perhaps &amp;quot;The Third Moon&amp;quot;&lt;br /&gt;&#xA;(Norse runes; literally &amp;quot;the thlrb moon&amp;quot;&lt;sup&gt;4&lt;/sup&gt;)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Thanks to @RadovanGarabík for pointing out the typo in my original transcription (I'm not very familiar with Slavic languages).&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; Per &lt;a href=&quot;https://en.wikipedia.org/wiki/Strider_Hiryu&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Strider_Hiryu&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;3&lt;/sup&gt; Aramaic and its descendants (including Hebrew) are written right-to-left.  Thanks to @RossPresser for pointing out that it's also mis-spelled.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;4&lt;/sup&gt; To be pedantic, it's literally &amp;quot;ÞE THLRB MOON&amp;quot; with &lt;strong&gt;Þ&lt;/strong&gt; being the letter &lt;em&gt;thorn&lt;/em&gt; (pronounced &lt;em&gt;th&lt;/em&gt;).  This letter existed in English up until Middle English&lt;sup&gt;5&lt;/sup&gt;; currently only Icelandic still uses it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;5&lt;/sup&gt; It is still used very rarely in English in phrases such as &amp;quot;Ye Olde Shoppe&amp;quot;&lt;sup&gt;6&lt;/sup&gt; which should properly be pronounced &amp;quot;The Old Shop&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;6&lt;/sup&gt; &lt;strong&gt;Y&lt;/strong&gt; is used for &lt;strong&gt;Þ&lt;/strong&gt; since when the printing press was first invented (in Europe, at least) the presses were manufactured in Germany.  German didn't use the letter &lt;strong&gt;þ&lt;/strong&gt; so when English publishers needed to print that letter they chose the most similarly-shaped letter that the presses did have, namely &lt;strong&gt;y&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;( I love languages ☺ )&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2021-01-18T16:08:27.800" LastActivityDate="2021-01-18T16:08:27.800" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17676" PostTypeId="1" AcceptedAnswerId="17677" CreationDate="2021-01-18T09:01:36.630" Score="2" ViewCount="327" Body="&lt;p&gt;Dynamic RAM is denser than static RAM, but needs to be refreshed every few milliseconds to avoid losing data. How many milliseconds, exactly? If the answer has changed over time, then I'm interested in what it was on the RAM chips used in the seventies and eighties.&lt;/p&gt;&#xA;&lt;p&gt;What prompted the question was that I was under the impression some computers used the video circuitry to do the refresh, which would suggest it sufficed to do it once per 60 Hz frame, which would be about 16 ms, but according to &lt;a href=&quot;http://www.jagregory.com/abrash-black-book/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.jagregory.com/abrash-black-book/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Each DRAM chip in the PC must be completely refreshed about once every four milliseconds in order to ensure the integrity of the data it stores.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Was 4 ms the typical figure for standard DRAM chips?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-18T10:29:32.207" Title="What was the DRAM refresh interval on early microcomputers?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;dram&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17677" PostTypeId="2" ParentId="17676" CreationDate="2021-01-18T09:13:42.463" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Was 4 ms the typical figure for standard DRAM chips?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Only starting with 128kbit and 256kbit chips. Many earlier chips (16kbit, 32kbit, 64kbit) and some 128kbit chips were documented as requiring a 2 ms refresh cycle; see these tables for details: &lt;a href=&quot;http://minuszerodegrees.net/memory/4116.htm&quot; rel=&quot;noreferrer&quot;&gt;4116&lt;/a&gt;, &lt;a href=&quot;http://minuszerodegrees.net/memory/4132.htm&quot; rel=&quot;noreferrer&quot;&gt;4132&lt;/a&gt;, &lt;a href=&quot;http://minuszerodegrees.net/memory/4164.htm&quot; rel=&quot;noreferrer&quot;&gt;4164&lt;/a&gt;, &lt;a href=&quot;http://minuszerodegrees.net/memory/41128.htm&quot; rel=&quot;noreferrer&quot;&gt;41128&lt;/a&gt;, &lt;a href=&quot;http://minuszerodegrees.net/memory/41256.htm&quot; rel=&quot;noreferrer&quot;&gt;41256&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The fact that many computers used the video circuitry to handle DRAM refresh doesn’t mean that that refresh happened at the same rate as the video refresh. See &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/14012/79&quot;&gt;What is DRAM refresh and why is the weird Apple II video memory layout affected by it?&lt;/a&gt; for a description of the Apple II’s implementation. In the 8-bit Ataris, DRAM refresh was handled by ANTIC, with a dedicated counter for that purpose; see &lt;a href=&quot;http://www.atarimania.com/faq-atari-400-800-xl-xe-what-are-sally-antic-ctia-gtia-fgtia-pokey-and-freddie_14.html&quot; rel=&quot;noreferrer&quot;&gt;the Atari 8-bit FAQ&lt;/a&gt; for details. Reenigne wrote &lt;a href=&quot;https://www.reenigne.org/blog/how-to-get-away-with-disabling-dram-refresh/comment-page-1/&quot; rel=&quot;noreferrer&quot;&gt;a blog post explaining DRAM refresh on the IBM 5150&lt;/a&gt; (not using the video circuitry).&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2021-01-18T09:13:42.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17678" PostTypeId="1" AcceptedAnswerId="17679" CreationDate="2021-01-18T09:16:52.257" Score="7" ViewCount="736" Body="&lt;p&gt;Modern out of order CPUs can do all sorts of things in parallel, having not only multiple functional units, but a lot of logic to check at runtime exactly which instructions really depend on others, so as to extract as much instruction level parallelism as possible.&lt;/p&gt;&#xA;&lt;p&gt;The first microprocessors, of course, were strictly serial devices, which would finish one instruction before beginning the next. Even when pipelining was introduced, e.g. with early RISC CPUs like MIPS and ARM, each instruction would both start after, and end after, the previous one.&lt;/p&gt;&#xA;&lt;p&gt;It seems to me that after pipelining, the next step in instruction level parallelism would be to try to do other things while waiting on a memory access. Once clock speeds get into double-digit megahertz, main memory is expected to be slow relative to the CPU (cache helps, but the hit rate is never 100%), and if you could start a load going, then do something else for a couple of cycles until it finishes, you could gain instruction level parallelism without needing multiple functional units.&lt;/p&gt;&#xA;&lt;p&gt;What was the first microprocessor that could do ALU operations (independent of the value being loaded, e.g. in other registers) while a load from memory was in progress?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-01-18T17:58:04.777" Title="What was the first microprocessor to overlap loads with ALU ops?" Tags="&lt;history&gt;&lt;cpu&gt;&lt;microprocessor&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17679" PostTypeId="2" ParentId="17678" CreationDate="2021-01-18T09:32:58.620" Score="11" Body="&lt;p&gt;I suspect this isn’t quite the answer you’re looking for, but there’s no need to wait for RISC...&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What was the first microprocessor that could do ALU operations (independent of the value being loaded, e.g. in other registers) while a load from memory was in progress?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I think the answer is the 6502, &lt;a href=&quot;https://xania.org/201405/jsbeeb-getting-the-timings-right-cpu&quot; rel=&quot;noreferrer&quot;&gt;which fetches the next instruction before the current instruction has finished executing&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This type of pipelining ended up being common, with various designs. The 8088/8086 &lt;a href=&quot;https://trixter.oldskool.org/2013/01/10/optimizing-for-the-8088-and-8086-cpu-part-1/&quot; rel=&quot;noreferrer&quot;&gt;has a separate bus interface and execution unit&lt;/a&gt;, and the former prefetches instructions while the latter is busy executing instructions.&lt;/p&gt;&#xA;&lt;p&gt;The answer to your clarifying comment,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;what I'm asking for is not the first pipelined microprocessor but the first one to go beyond that and allow 'start a data load from memory, then do something else, then finish the data load and do something with the loaded data'.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;which I’m interpreting as, the first microprocessor which would be capable of handling a sequence of instructions involving a memory load followed by an independent operation, by starting the memory load, setting that instruction aside, handling the following operation, and coming back to the memory load — which is effectively instruction reordering — is the first microprocessor to implement instruction reordering, which I think was &lt;a href=&quot;https://www.nxp.com/docs/en/data-sheet/MPC601.pdf&quot; rel=&quot;noreferrer&quot;&gt;the PowerPC 601&lt;/a&gt; in 1993. It can emit instructions to its branch-processing unit, its integer unit, and its FPU in parallel, and handle their results in whatever order they arrive; it can also reorder memory loads and stores. Memory loads are handled in the IU, and are considered complete once the address translation is done, so the IU can go on to other things before the load completes.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-01-18T10:10:12.593" LastActivityDate="2021-01-18T10:10:12.593" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17680" PostTypeId="1" CreationDate="2021-01-18T09:44:43.357" Score="41" ViewCount="6254" Body="&lt;p&gt;I'm having trouble accessing HTTPS websites using Netscape Communicator 4.8. This is the error message I get:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xExrw.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xExrw.png&quot; alt=&quot;Netscape and this server cannot communicate securely because they have no common encryption algorithm(s)&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Is there a way I can configure some sort of proxy that will allow me to access HTTPS websites over HTTP? Or any other solution to this problem?&lt;/p&gt;&#xA;" OwnerUserId="20286" LastActivityDate="2021-04-12T22:48:46.373" Title="How can I visit HTTPS websites in old web browsers?" Tags="&lt;internet&gt;&lt;windows-95&gt;&lt;web-browser&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="17681" PostTypeId="2" ParentId="17680" CreationDate="2021-01-18T10:01:53.500" Score="12" Body="&lt;p&gt;You can use the &lt;a href=&quot;https://github.com/tenox7/wrp&quot; rel=&quot;noreferrer&quot;&gt;Web rendereing proxy&lt;/a&gt;, displaying modern web pages inside a GIF and imagemap. It works well, though Google Captcha often thinks (rightfully) that it is not a human controlling the web browser and won't let you through.&lt;/p&gt;&#xA;&lt;p&gt;Alternately (and more useful for other activities than web browsing), you can try VNC connection. Although you probably have to de-configure modern security settings (like encryption) at the server side. Expect problems with entering non-ASCII characters, fancy keyboard layout and scrollwheel.&lt;/p&gt;&#xA;&lt;p&gt;(this is a modified copy of my answer here: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/15066/problem-accessing-internet-from-old-phones-pdas-https-ssl-certificates-compa/15091#15091&quot;&gt;Problem accessing Internet from old phones/PDAs (HTTPS, SSL, certificates, compatible services,....)&lt;/a&gt; but that question has been closed).&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2021-01-18T10:01:53.500" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17682" PostTypeId="1" CreationDate="2021-01-18T10:13:51.810" Score="1" ViewCount="270" Body="&lt;p&gt;Why did IBM decide to use 8 bits for EBCDIC?&lt;/p&gt;&#xA;&lt;p&gt;7 bits per character seems reasonable, since &lt;code&gt;2^7 = 128 symbols&lt;/code&gt; which is enough for all English letters and special symbols.&lt;/p&gt;&#xA;" OwnerUserId="18599" LastActivityDate="2021-01-19T08:25:36.790" Title="Why did IBM decide to use 8 bits for EBCDIC?" Tags="&lt;ibm&gt;&lt;ebcdic&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17683" PostTypeId="2" ParentId="17676" CreationDate="2021-01-18T10:29:32.207" Score="3" Body="&lt;p&gt;About that video thing: Early chips have a 7bit refresh, so you have to access all rows in a 2ms frame. You could swap some address lines to achieve more (physical) rows access per cycle.&lt;/p&gt;&#xA;&lt;p&gt;In an extreme case, you can swap A0-A6 and A7-A13 completely, so for linear access will be each byte stored in a totally different physical row. Et voila, you have a &amp;quot;free refresh&amp;quot; by design (and a lot of headaches, because it is very slow). So it is possible, but it needs some kind of trade-off.&lt;/p&gt;&#xA;&lt;p&gt;See also: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11335/why-do-early-drams-e-g-4116-have-a-negative-column-address-set-up-time&quot;&gt;Why do Early DRAMs (e.g. 4116) have a negative Column Address Set-up Time?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11446" LastActivityDate="2021-01-18T10:29:32.207" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17684" PostTypeId="2" ParentId="17644" CreationDate="2021-01-18T12:24:06.597" Score="0" Body="&lt;p&gt;This sounds a bit like the issue I was having with my Amiga 500. It seemed to work fine shortly after power up, but at some point a click on the Workbench would freeze it just like you describe. I posted a question here on it: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13684/fixing-an-ailing-amiga-500?rq=1&quot;&gt;Fixing an ailing Amiga 500&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In my case the issue was fixed by applying contact-cleaner to all the socketed ICs inside the Amiga. The system is still working fine since that fix, so could be a solution for you as well.&lt;/p&gt;&#xA;" OwnerUserId="7784" LastActivityDate="2021-01-18T12:24:06.597" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17686" PostTypeId="1" CreationDate="2021-01-18T15:41:12.743" Score="30" ViewCount="5720" Body="&lt;p&gt;In this &lt;a href=&quot;https://stackoverflow.com/questions/65769534/why-does-python-not-read-the-next-line-if?noredirect=1#comment116284452_65769534&quot;&gt;Stack Overflow question&lt;/a&gt; the original code made the mistake of using the function name as a variable, and assigned the return value to it. A &lt;a href=&quot;https://stackoverflow.com/users/5987/mark-ransom&quot;&gt;commenter&lt;/a&gt; mentioned that he once used a language where this was the way you returned the value from functions. The comment reads&#xA;&amp;quot;I know I once used a language where the return value of a function needed to be assigned to the name of the function. It's so ancient and obsolete I can't even remember which language it was.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;That sounds familiar to me as well, but I also can't remember what language it was.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone have better memory than us and can tell us which language it is?&lt;/p&gt;&#xA;" OwnerUserId="5436" LastEditorUserId="15334" LastEditDate="2021-02-03T14:50:31.283" LastActivityDate="2021-02-03T14:50:31.283" Title="In what language(s) is the return value set by assigning to the function’s name?" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="13" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17687" PostTypeId="2" ParentId="17686" CreationDate="2021-01-18T15:45:16.567" Score="50" Body="&lt;p&gt;Pascal does this, I don't know of others. Don't know if the practice move forward with other Wirth languages.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2021-01-18T15:45:16.567" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="17688" PostTypeId="2" ParentId="17686" CreationDate="2021-01-18T16:02:20.110" Score="12" Body="&lt;p&gt;Fortran has used this syntax, from the earliest version which had functions at all right up to Fortran 2008 and beyond.&lt;/p&gt;&#xA;&lt;p&gt;However Fortran 2008 has an (even more confusing?) option where you can declare a different variable name that is used to return a function value! For example&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;function xyz(argument) result(answer)&#xA;...&#xA;answer = 42&#xA;...&#xA;end function xyz&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;instead of the old style&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;...&#xA;xyz = 42&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2021-01-18T16:08:46.780" LastActivityDate="2021-01-18T16:08:46.780" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17689" PostTypeId="2" ParentId="17686" CreationDate="2021-01-18T16:03:13.430" Score="29" Body="&lt;p&gt;Fortran, for sure:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;      PROGRAM TRIANG &#xA;      WRITE(UNIT=*,FMT=*)'Enter lengths of three sides:' &#xA;      READ(UNIT=*,FMT=*) SIDEA, SIDEB, SIDEC &#xA;      WRITE(UNIT=*,FMT=*)'Area is ', AREA3(SIDEA,SIDEB,SIDEC) &#xA;      END &#xA;&#xA;      FUNCTION AREA3(A, B, C) &#xA;*Computes the area of a triangle from lengths of sides &#xA;      S = (A + B + C)/2.0 &#xA;      AREA3 = SQRT(S * (S-A) * (S-B) * (S-C)) &#xA;      END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(from Clive G. Page's &lt;a href=&quot;https://www.star.le.ac.uk/%7Ecgp/prof77.html#tth_sEc2.6&quot; rel=&quot;noreferrer&quot;&gt;Professional Programmer's Guide to Fortran77&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;It's also defined that way in the Fortran &lt;a href=&quot;https://archive.org/details/ansi-x-3.9-1966-fortran-66/page/24/mode/2up?q=function&quot; rel=&quot;noreferrer&quot;&gt;ANSI X 3.9 1966 Fortran 66&lt;/a&gt; standard.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2021-01-18T16:03:13.430" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17690" PostTypeId="2" ParentId="17686" CreationDate="2021-01-18T16:03:46.653" Score="6" Body="&lt;p&gt;BASIC is another language with functions where some dialects used assignment to the function name to provide the return value. The earliest dialects were similar to Fortran single-line functions:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DEF FND(x) = x*x&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But later dialects allowed more complex variants, similar to &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/17689/79&quot;&gt;Fortran multi-line functions&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DEF FNPeekWord&amp;amp; (A&amp;amp;)&#xA;  FNPeekWord&amp;amp; = PEEK(A&amp;amp;) + 256&amp;amp; * PEEK(A&amp;amp; + 1)&#xA;END DEF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="79" LastActivityDate="2021-01-18T16:03:46.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17691" PostTypeId="2" ParentId="17678" CreationDate="2021-01-18T16:13:23.493" Score="6" Body="&lt;p&gt;The &lt;strong&gt;Motorola 68882&lt;/strong&gt;, while not strictly a &lt;em&gt;microprocessor&lt;/em&gt; but a &lt;em&gt;coprocessor&lt;/em&gt;, was explicitly designed to handle loads and format conversions in parallel with arithmetic operations.  This was, in fact, the main advantage it held over its immediate predecessor, the 68881.  The 68882 was available by at least &lt;strong&gt;1988&lt;/strong&gt;, as the Macintosh IIx included it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JnYk7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JnYk7.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you consider the 68030 and 68882 combination as a single CPU, then the following sequence of operations was possible:&lt;/p&gt;&#xA;&lt;p&gt;1: The 68882 is instructed to begin an arithmetic operation.  Some such operations (eg. taking the logarithm) could take hundreds of cycles to complete.&lt;/p&gt;&#xA;&lt;p&gt;2: The 68882 is instructed to load a single-precision operand for a subsequent calculation.  This takes a number of cycles in the 68882's CU to convert it to 80-bit internal format.  The load and conversion proceeds independently of the arithmetic operation already in progress in the AU.&lt;/p&gt;&#xA;&lt;p&gt;3: Once the load portion of item 2 is complete, the 68030 then loads and executes operations on integer and address operands while both the AU and CU in the 68882 are busy.&lt;/p&gt;&#xA;&lt;p&gt;4: The 68882 is then instructed to perform arithmetic on the operand just loaded.  This must wait for the conversion to complete (making the operand available in the register file) and for the previous arithmetic operation to complete (making the AU available).  However, the 68882 can buffer the instruction and allow the 68030 to proceed with further instructions, provided it doesn't need to load any data.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2021-01-18T17:58:04.777" LastActivityDate="2021-01-18T17:58:04.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17692" PostTypeId="2" ParentId="17686" CreationDate="2021-01-18T16:14:08.220" Score="50" Body="&lt;p&gt;The languages in the Visual Basic family do exactly this. This includes VBScript, VBA, Visual Basic and earlier. I believe these inherit the &amp;quot;feature&amp;quot; from QBASIC. For example&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Public Function AddTwo(something as Integer)&#xA;    AddTwo = something + 2&#xA;End Function&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-01-20T08:41:35.163" LastActivityDate="2021-01-20T08:41:35.163" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17693" PostTypeId="2" ParentId="17686" CreationDate="2021-01-18T16:54:25.023" Score="22" Body="&lt;p&gt;The earliest such languages I can find are FORTRAN II and ALGOL 58, both published in the same year 1958; though the original FORTRAN (1956) can arguably also be included.&lt;/p&gt;&#xA;&lt;p&gt;For FORTRAN, the first page of the &lt;a href=&quot;http://archive.computerhistory.org/resources/text/Fortran/102653989.05.01.acc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual chapter covering functions&lt;/a&gt; contains this example (p. 27):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FUNCTION AVRG (ALIST, N)&#xA;DIMENSION ALIST (500)&#xA;SUM = ALIST (1)&#xA;DO 10 I=2, N&#xA;SUM = SUM + ALIST (I)&#xA;AVRG = SUM / FLOATF (N)&#xA;RETURN&#xA;END (2, 2, 2, 2, 2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;FORTRAN II also includes another function syntax (p. 10), the single-line function definition, inherited from its prececessor:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FIRSTF(X) = A*X + B&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It’s not hard to see how the former syntax is a natural extension of the latter, in turn coming from mathematical usage.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.softwarepreservation.org/projects/ALGOL/report/Algol58_preliminary_report_CACM.pdf/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ALGOL 58&lt;/a&gt;, similarly to FORTRAN, defines both single-line ‘functions’:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A &lt;em&gt;function&lt;/em&gt; declaration declares a given expression to be a function of certain of its variables. Thereby, the declaration gives (for certain simple functions) the computing rule for assigning values to the function (cf. &lt;em&gt;functions&lt;/em&gt;) whenever this function appears in an expression.&lt;/p&gt;&#xA;&lt;p&gt;Form: Δ ~ I&lt;sub&gt;n&lt;/sub&gt; (I, I, ~, I) := E where the I are identifiers and E is an expression which, among its constituents, may contain simple variables named by identifiers appearing in the parentheses.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;and ‘procedures’, equivalent to a today’s definition of function (in imperative/procedural programming languages, at least). The return value is indicated as follows (p. 19):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For each single output procedure I(P&lt;sub&gt;i&lt;/sub&gt;) listed in the heading, a value must be assigned within the procedure by an assignment statement “I := E” where I is the identifier naming that procedure.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;These syntaxes were later taken up by some dialects of BASIC (in the form of &lt;code&gt;DEF FN&lt;/code&gt; and later &lt;code&gt;FUNCTION&lt;/code&gt;) and ALGOL’s descendant Pascal: in Borland’s Pascal compilers, assigning to the function name was the only supported syntax before the introduction of the &lt;code&gt;Result&lt;/code&gt; variable in Delphi 1.0.&lt;/p&gt;&#xA;&lt;p&gt;It is probably Pascal that the mentioned commenter remembered; some universities still teach programming in it, and usually stick to the original, standard variety, instead of modern extended dialects like Object Pascal. (This isn’t really part of the question, but I’d assume the StackOverflow asker’s misunderstanding came from that as well.)&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-01-21T10:11:42.670" LastActivityDate="2021-01-21T10:11:42.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17694" PostTypeId="2" ParentId="17686" CreationDate="2021-01-18T17:28:55.533" Score="17" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;I'd say, most likely it is PASCAL you remember, as it was rather popular in the early 80s, used in University courses all thru the 80s way into the 90s and still had some fellowship there after, most notably Delphi.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Some History&lt;/h2&gt;&#xA;&lt;p&gt;The basic idea is that the function name is not only already reserved, so no need to come up with anything different, and using it is a clear statement that this  is the result. It also simplifies compiler design, as a dedicated data item can be allocated within the calling convention.&lt;/p&gt;&#xA;&lt;p&gt;There are essentially two lines of heritage, FORTRAN and ALGOL.&lt;/p&gt;&#xA;&lt;p&gt;For both some of their descendants kept it, like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;some BASIC variants from FORTRAN and&lt;/li&gt;&#xA;&lt;li&gt;Pascal and Modula from ALGOL.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Others dropped it, like the ALGOL follow up&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BCPL, which introduced the &lt;code&gt;return()&lt;/code&gt; syntax,&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;which is quite common today as C took it from BCPL.&lt;/p&gt;&#xA;&lt;p&gt;Language ideas are like genes jumping between hosts. For example ADA, in many ways an ALGOL/PASCAL grandchild, also turned to using a &lt;code&gt;return&lt;/code&gt; element.&lt;/p&gt;&#xA;&lt;p&gt;Granddaddy FORTRAN has, over the years, varied the way it returns function results.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Originally the result of a function was assigned to the identifier of the function&lt;/li&gt;&#xA;&lt;li&gt;with FORTRAN 90 the explicit definition of a return name in the function head was introduced.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While this is essentially just syntactical sugar, it features a change in style. The reasoning applied was that with recursion constructions like &lt;code&gt;Foo = Foo(x-1)&lt;/code&gt; would look strange. But I guess that is up to interpretation.&lt;/p&gt;&#xA;&lt;p&gt;Interestingly here as well is that FORTRAN II of 1958 did introduce a &lt;code&gt;RETURN&lt;/code&gt; statement in its strive to add procedural programming, but it's usage was simply to return execution to a caller, the return value had to be set separate.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-01-19T01:01:29.163" LastActivityDate="2021-01-19T01:01:29.163" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="17695" PostTypeId="1" AcceptedAnswerId="17698" CreationDate="2021-01-18T17:46:45.083" Score="3" ViewCount="333" Body="&lt;p&gt;The C64 and the C128 have a memory for storing the color values of a character. The size of this memory is 1k x 4bit (2k x 4bit for the C128 which can do a double buffering), thus reading the value at a given address gives you the memory value in the 4 lower bits. The higher nibble can yield different results though.&lt;/p&gt;&#xA;&lt;p&gt;Trying out&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 PRINT PEEK(55296);:GOTO10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;on a C64 emulator gave me something like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; 14  14  254  254  254  110  14  254  14&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where 14 is the foreground color of the chars here and means light blue, the color that is set after  a reset of the C64. 254 has the same lower nibble, but all bits set in the upper nibble.&lt;/p&gt;&#xA;&lt;p&gt;My questions is, are &lt;code&gt;1111&lt;/code&gt; or &lt;code&gt;0000&lt;/code&gt; the only possibilities for the high nibble or are other values possible as well?&lt;/p&gt;&#xA;" OwnerUserId="11100" LastActivityDate="2021-01-19T07:02:46.977" Title="What high nibble values can you get when you read the 4 bit color memory on a C64/C128?" Tags="&lt;commodore-64&gt;&lt;memory&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17696" PostTypeId="2" ParentId="17686" CreationDate="2021-01-18T18:02:51.890" Score="9" Body="&lt;p&gt;Algol 60 for one.&lt;/p&gt;&#xA;&lt;p&gt;Here's the relevant words from the &lt;I&gt;Revised Report on the Algorithmic Language Algol 60&lt;/I&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;5.4.4. Values of function designators.&lt;/p&gt;&#xA;&lt;p&gt;For a procedure declaration to define the value of a function designator there must, within the&#xA;procedure declaration body, occur one or more explicit assignment&#xA;statements with the procedure identifier in a left part; at least one&#xA;of these must be executed, and the type associated with the procedure&#xA;identifier must be declared through the appearance of a type&#xA;declarator as the very first symbol of the procedure declaration. The&#xA;last value so assigned is used to continue the evaluation of the&#xA;expression in which the function designator occurs.&lt;/p&gt;&#xA;&lt;p&gt;Any occurrence of&#xA;the procedure identifier within the body of the procedure other than&#xA;in a left part in an assignment statement denotes activation of the&#xA;procedure.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The last sentence is significant -- it shows that the name of the type procedure (function) is not treated 'just like' a variable within the procedure (function) body; rather, it is only assignment that is special-cased.&lt;/p&gt;&#xA;&lt;p&gt;In Algol 60, a call to a function that takes no arguments is not followed by empty parentheses:  thus &lt;code&gt;n := read&lt;/code&gt; rather than &lt;code&gt;n := read()&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The last sentence is also famous as being &lt;strong&gt;the sentence&lt;/strong&gt; that got recursive procedures into the language.  But that's not germane to this answer.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-01-18T18:21:24.740" LastActivityDate="2021-01-18T18:21:24.740" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17697" PostTypeId="2" ParentId="17680" CreationDate="2021-01-18T19:03:06.143" Score="55" Body="&lt;h3&gt;Forward proxy&lt;/h3&gt;&#xA;&lt;p&gt;It turned out that configuring my own &lt;strong&gt;forward HTTP proxy&lt;/strong&gt; was actually really simple! Here's how I did it. First, I placed the following &lt;a href=&quot;https://nginx.org/en/&quot; rel=&quot;noreferrer&quot;&gt;nginx&lt;/a&gt; configuration file in &lt;code&gt;/etc/nginx/sites-enabled/&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;server {&#xA;  listen 81;&#xA;&#xA;  location / {&#xA;    resolver 8.8.8.8;&#xA;    proxy_http_version 1.1;&#xA;    proxy_pass https://$host$request_uri;&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then, on the Window 95 machine, I opened Netscape Communicator and went to &lt;code&gt;Edit -&amp;gt; Preferences -&amp;gt; Advanced -&amp;gt; Proxies -&amp;gt; Manual Proxy Configuration&lt;/code&gt; and entered the following information:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KaGsp.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KaGsp.png&quot; alt=&quot;servers: HTTP: Address of proxy server to use: 192.168.178.129 Port: 81&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Note that &lt;code&gt;192.168.178.129&lt;/code&gt; is the IP address of the machine that is running nginx in my case.)&lt;/p&gt;&#xA;&lt;p&gt;That's it! Netscape Communicator now happily connects to &lt;em&gt;any&lt;/em&gt; HTTPS website. As proof, here is a screenshot of this very question, as rendered by this 25 year old web browser:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0Cp0D.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0Cp0D.png&quot; alt=&quot;Screenshot of Netscape Communicator visiting this question&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Rewrite links in the document&lt;/h3&gt;&#xA;&lt;p&gt;A problem is that links in the document will still likely point to HTTPS targets and will bypass the proxy. The &lt;a href=&quot;https://nginx.org/en/docs/http/ngx_http_sub_module.html&quot; rel=&quot;noreferrer&quot;&gt;ngx_http_sub&lt;/a&gt; module can be used to rewrite some or most of the links in the document:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;proxy_set_header Accept-Encoding &amp;quot;&amp;quot;;&#xA;&#xA;sub_filter_once off;&#xA;sub_filter_last_modified on;&#xA;sub_filter '&amp;lt;a href=&amp;quot;https:' '&amp;lt;a href=&amp;quot;http:';&#xA;sub_filter '&amp;lt;img src=&amp;quot;https:' '&amp;lt;img src=&amp;quot;http:';&#xA;&#xA;gzip_proxied any;&#xA;gzip_http_version 1.0;&#xA;gzip_comp_level 7;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The http_sub module will only work on &lt;code&gt;text/html&lt;/code&gt; by default, and can not operate on compressed data so compression is disabled by modifying the &lt;code&gt;Accept-Encoding&lt;/code&gt; header. Compression can then be turned back on to the client using the &lt;code&gt;gzip_…&lt;/code&gt; directives.&lt;/p&gt;&#xA;&lt;p&gt;The built-in substitution can only do exact strings so it will not catch all links. There is a &lt;a href=&quot;https://www.nginx.com/resources/wiki/modules/substitutions/&quot; rel=&quot;noreferrer&quot;&gt;regex-capable module&lt;/a&gt; available for the ambitious.&lt;/p&gt;&#xA;" OwnerUserId="20286" LastEditorUserId="333" LastEditDate="2021-04-12T22:48:46.373" LastActivityDate="2021-04-12T22:48:46.373" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="17698" PostTypeId="2" ParentId="17695" CreationDate="2021-01-18T19:05:58.527" Score="10" Body="&lt;p&gt;On a Commodore 64 or Commodore 128, the upper four bits of the data bus will be left&#xA;floating when reading color memory.  On my vintage Commodore 128, floating data bits would generally read as high, but on the Commodore 64 they would be more likely to report whatever value had been last output to the data bus.  Because CPU cycles alternate with display data fetches, this would typically cause the upper four bits of the data bus to reflect the upper four bits of the last byte fetched by the VIC-II chip, but trying to predict which bytes those would be will generally be difficult and not very useful.  Instead, it's generally best to regard the upper bits as though every read might independently yield whatever bit pattern would be least useful.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-01-18T19:05:58.527" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17699" PostTypeId="2" ParentId="17682" CreationDate="2021-01-18T19:48:27.460" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why did IBM decide to use 8 bits for EBCDIC?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because the /360 ISA defined a byte to consist of 8 bits - which in turn was chosen as it allows to store two decimal numerals (BCD) within a byte.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;7 bits per character seems reasonable, since 2^7 = 128 symbols which is enough for all English letters and special symbols.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For one, there is not just English - a company like IBM for sure does not want to restrict their sales to only English speaking countries? And even then, its customers don't want to serve only them as well, right?&lt;/p&gt;&#xA;&lt;p&gt;On a more practical side, when it came to printable characters EBCDIC did cover everything ASCII did (*1) while leaving plenty room for additional use cases.&lt;/p&gt;&#xA;&lt;p&gt;Most important: &lt;strong&gt;There is simply no sense in defining a character code that uses less bits than a character cell offers.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - At that point its important to keep in mind that IBM was a major proponent of ASCII - in fact, next to all terminal equipment used ASCII - there was never any dispute people nowadays assume.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7095" LastEditDate="2021-01-19T08:25:36.790" LastActivityDate="2021-01-19T08:25:36.790" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="17700" PostTypeId="1" CreationDate="2021-01-18T19:56:59.853" Score="4" ViewCount="219" Body="&lt;p&gt;I have a Thinkpad T41 on which I installed Windows 98 SE.&#xA;I installed an old DOS game, and was wondering if I could get a USB mouse to work with it ? (the PC doesn't have a PS/2 port)&lt;/p&gt;&#xA;&lt;p&gt;At the moment, my USB mouse doesn't even work on Windows, I'm going to try to buy an older one.&#xA;Touchpad is working on Windows, but not on DOS.&lt;/p&gt;&#xA;&lt;p&gt;What are my options ?&lt;/p&gt;&#xA;" OwnerUserId="20570" LastActivityDate="2021-01-18T20:08:38.480" Title="Use a USB mouse for DOS games" Tags="&lt;ms-dos&gt;&lt;mouse&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17701" PostTypeId="2" ParentId="17700" CreationDate="2021-01-18T20:08:38.480" Score="6" Body="&lt;p&gt;To get your mouse working under DOS, you can try &lt;a href=&quot;http://bretjohnson.us/&quot; rel=&quot;noreferrer&quot;&gt;Bret Johnson’s USB programs&lt;/a&gt; — you’ll need one of the &lt;code&gt;USBUHCI&lt;/code&gt; drivers, &lt;code&gt;USBMOUSE&lt;/code&gt;, and &lt;a href=&quot;http://cutemouse.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;CuteMouse&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Given how &lt;code&gt;USBMOUSE&lt;/code&gt; works, it might also allow Windows 98 to use it, but I haven’t tried that.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2021-01-18T20:08:38.480" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17702" PostTypeId="2" ParentId="17665" CreationDate="2021-01-18T23:30:29.927" Score="0" Body="&lt;p&gt;Allegedly &lt;a href=&quot;https://mobile.twitter.com/netbsd/status/1286898183923277829&quot; rel=&quot;nofollow noreferrer&quot;&gt;hosting a mirror of netbsd.org&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="18500" LastActivityDate="2021-01-18T23:30:29.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17703" PostTypeId="2" ParentId="17686" CreationDate="2021-01-19T00:12:23.833" Score="4" Body="&lt;p&gt;Verilog (1995/2001) also returns by assignment to implicit variable.  SystemVerilog added the &amp;quot;return&amp;quot; statement but the classic assignment is still available.&lt;/p&gt;&#xA;" OwnerUserId="18640" LastActivityDate="2021-01-19T00:12:23.833" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17704" PostTypeId="2" ParentId="17686" CreationDate="2021-01-19T06:08:27.160" Score="0" Body="&lt;p&gt;Pascal is one that I personally used that does it. Common Lisp kinda-sorta-but-not-really does it, in that return values are almost always implicit (ie. every statement has a value, and the last value in a block is the block's return value), so you very rarely see an explicit return statement, but when you need to return a value and can't use the implicit way, the way to do it is by using the &lt;code&gt;RETURN-FROM&lt;/code&gt;&lt;sup&gt;[*]&lt;/sup&gt; statement, like so: &lt;code&gt;(return-from function-name value)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;[*]&lt;/sup&gt;There's also a &lt;code&gt;RETURN&lt;/code&gt; statement, but it's a shorthand for &lt;code&gt;(return-from nil value)&lt;/code&gt;, and will &lt;em&gt;not&lt;/em&gt; have the effect of making &lt;code&gt;VALUE&lt;/code&gt; the value of the function in which it was executed. It's a great pitfall for newbies coming from C and its descendants.&lt;/p&gt;&#xA;" OwnerUserId="18233" LastActivityDate="2021-01-19T06:08:27.160" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17705" PostTypeId="2" ParentId="17695" CreationDate="2021-01-19T07:02:46.977" Score="1" Body="&lt;p&gt;This is completely from memory (and one from 35 years ago at that) But I seem to remember that you could also have multi-color mode in text mode as well. The higher 4 bits were the designation for the second color. The built-in fonts looked funny when the low-res multi color mode was set, but you could twiddle the bitmaps of custom fonts to achieve other effects&lt;/p&gt;&#xA;" OwnerUserId="556" LastActivityDate="2021-01-19T07:02:46.977" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17709" PostTypeId="1" AcceptedAnswerId="17710" CreationDate="2021-01-19T10:48:31.573" Score="6" ViewCount="1242" Body="&lt;p&gt;I'd like to JSR or JMP (preferably JMP as it's 3 cycles cheaper) to an address stored somewhere else in memory, the address of which is itself indexed.&lt;/p&gt;&#xA;&lt;p&gt;I came up with the following self-modifying code (which I know is sometimes not regarded as good practice):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ldx #2&#xA;    lda storedAddresses, x&#xA;    sta selfModify + 1&#xA;    inx&#xA;    lda storedAddresses, x&#xA;    sta selfModify + 2&#xA;&#xA;.selfModify&#xA;    jmp selfModify   // jmp (or jsr) to $BEEF&#xA;&#xA;...&#xA;&#xA;.storedAddresses&#xA;    .byte $AB    // lo byte of address1&#xA;    .byte $CD    // hi byte of address1&#xA;    .byte $EF    // lo byte of address2&#xA;    .byte $BE    // hi byte of address2&#xA;&#xA;$BEEF: // do something...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Is there a more efficient way to achieve this?&lt;/p&gt;&#xA;" OwnerUserId="16295" LastEditorUserId="6659" LastEditDate="2021-01-19T19:10:49.383" LastActivityDate="2021-02-01T03:08:00.507" Title="Efficient way to JMP or JSR to an address stored somewhere else?" Tags="&lt;6502&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17710" PostTypeId="2" ParentId="17709" CreationDate="2021-01-19T11:12:37.073" Score="16" Body="&lt;p&gt;You could also use the Stack and &lt;code&gt;RTS&lt;/code&gt;. This is code I use to reference an indexed jump table containing subroutine addresses:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ldy #$nn                            // [2]      load jump address offset&#xA;    lda f40.CONCODEH,y                  // [4]      get control code handler address hi-byte&#xA;    pha                                 // [3]      push to Stack&#xA;    lda f40.CONCODEL,y                  // [4]      get control code handler address lo-byte&#xA;    pha                                 // [3]      push to Stack&#xA;    rts                                 // [6]      return via control code handler&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Note that the addresses have to be decremented by 1 because RTS increments it automatically. Example table:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CONCODEL:   .pc = * &amp;quot;CONCODEL&amp;quot;      // Control character handler lo-bytes&#xA;            .byte &amp;lt;setcolr-1,&amp;lt;shftmode-1,&amp;lt;shftmode-1,&amp;lt;linefeed-1,&amp;lt;cargrtrn-1&#xA;CONCODEH:   .pc = * &amp;quot;CONCODEH&amp;quot;      // Control character handler hi-bytes&#xA;            .byte &amp;gt;setcolr-1,&amp;gt;shftmode-1,&amp;gt;shftmode-1,&amp;gt;linefeed-1,&amp;gt;cargrtrn-1,&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="600" LastEditorUserId="600" LastEditDate="2021-01-20T09:56:34.470" LastActivityDate="2021-01-20T09:56:34.470" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17711" PostTypeId="5" CreationDate="2021-01-19T11:36:43.300" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2021-01-19T11:36:43.300" LastActivityDate="2021-01-19T11:36:43.300" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17712" PostTypeId="4" CreationDate="2021-01-19T11:36:43.300" Score="0" Body="The process of discovering and diagnosing bugs in software. Use [bugs] to ask about specific defects in well-known software that are already known and (presumably) understood." OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-01-19T11:54:21.567" LastActivityDate="2021-01-19T11:54:21.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17713" PostTypeId="1" CreationDate="2021-01-19T11:47:08.533" Score="6" ViewCount="265" Body="&lt;p&gt;I delved a bit into the origins of (commercial) &lt;a href=&quot;https://github.com/void4/notes/issues/41&quot; rel=&quot;nofollow noreferrer&quot;&gt;timesharing&lt;/a&gt; and it seems there have been very interesting computing hardware and software &lt;a href=&quot;http://cap-lore.com/CapTheory/KK/&quot; rel=&quot;nofollow noreferrer&quot;&gt;(architectures)&lt;/a&gt; which have become relatively unknown but may experience a revival in the future.&lt;/p&gt;&#xA;&lt;p&gt;I read the book &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1973430185&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Tym Before ...: The Untold Origins of Cloud Computing&lt;/a&gt;, can you recommend any other sources?&lt;/p&gt;&#xA;" OwnerUserId="20581" LastEditorUserId="15334" LastEditDate="2021-01-20T13:59:25.393" LastActivityDate="2021-01-20T13:59:25.393" Title="Documents about timesharing systems, access and resource control and its financials" Tags="&lt;mainframe&gt;&lt;network&gt;&lt;books&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17714" PostTypeId="2" ParentId="17709" CreationDate="2021-01-19T12:19:07.487" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I came up with the following self-modifying code (which I know is sometimes not regarded as good practice):&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So don't modify, but use an indirect JMP&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    LDX   #whateverindex*2     *     Index to be used&#xA;    LDA   AddressTable,X       * 3/4 Low byte target address&#xA;    STA   IndirectPTR          * 2/3 Store to pointer (+1/1 if not in ZP)&#xA;    LDA   AddressTable+1,X     * 3/4 High byte target address&#xA;    STA   IndirectPTR+1        * 2/3 Store to pointer (+1/1 if not in ZP)&#xA;    JMP   (IndirectPTR)        * 3/5 Do the jump&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It's 4 byte longer than &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/17710/6659&quot;&gt;going via stack&lt;/a&gt;, but one clock less (if the pointer resides in ZP).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-01-19T12:19:07.487" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17715" PostTypeId="2" ParentId="17686" CreationDate="2021-01-19T13:38:28.550" Score="5" Body="&lt;p&gt;MATLAB / Octave also does this.&lt;/p&gt;&#xA;&lt;p&gt;It is from 1984; so not as old as some of the others.&lt;/p&gt;&#xA;&lt;p&gt;It was probably imitating Fortran, since it was orginally concieved as a high-level tool. On top of the Fortran libraries like Linpack and Eispack.&lt;/p&gt;&#xA;" OwnerUserId="523" LastEditorUserId="129" LastEditDate="2021-01-19T14:15:14.707" LastActivityDate="2021-01-19T14:15:14.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17716" PostTypeId="2" ParentId="17713" CreationDate="2021-01-19T13:42:03.887" Score="9" Body="&lt;p&gt;This answers your question by suggesting some avenues of further research.  This is one of those cases where just knowing the right buzzwords helps with the search.&lt;/p&gt;&#xA;&lt;p&gt;You could start by doing some research on Fernando Corbato and the Compatible Time Sharing System (CTSS) for the IBM 7090/7094.  This was one of the pioneering projects in timesharing.  You could follow up with Multics, and maybe even unix, although unix was initially not built for multiple concurrent users.&lt;/p&gt;&#xA;&lt;p&gt;Also look into Digital Equipment Corporation (DEC) and Bolt, Beranek, and Newman  (BBN).  Also Scientific Data Systems (SDS) which was bought out by Xerox,  and the Xerox Palo Alto Research Center (PARC). PARC was more geared towards servers in a local area network, where each user has a personal computer on the desk.&lt;/p&gt;&#xA;&lt;p&gt;Early DEC machines like the PDP-1 were adapted for timesharing,  and the PDP-6 was specifically organized to run a timeshared operating system.  The PDP-10, a successor to the PDP-6, was a major player in the timesharing vendor field in the early 1970s.  You might look up the corporate history of Compuserve, as an example of a timesharing service bureau.  The VAX, a successor to the PDP-11, was a scalable timesharing system, and was DEC's flagship product through the 1980s.  VMS was the culmination of a lot of evolution in timesharing operating systems.&lt;/p&gt;&#xA;&lt;p&gt;Eventually, the minicomputer and the microcomputer eroded the market for timesharing systems.  Cloud computing did not take off until communications progressed to where broadband was cheap and ubiquitous.&lt;/p&gt;&#xA;&lt;p&gt;As far as hacking is concerned,  you might want to start with Hackers:  Heroes of the Computer Revolution.  This book deals with the history of hacking, which intersects with the history of timesharing.&lt;/p&gt;&#xA;&lt;p&gt;This is only a partial answer, as your question is very broad.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2021-01-19T21:56:15.657" LastActivityDate="2021-01-19T21:56:15.657" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17717" PostTypeId="2" ParentId="17686" CreationDate="2021-01-19T14:29:52.680" Score="5" Body="&lt;p&gt;I believe that SNOBOL4 did this. &lt;a href=&quot;http://berstis.com/greenbook.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://berstis.com/greenbook.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The following is an example of the definition and use of a function to&#xA;compute factorials of numbers:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   DEFINE('FACT(N)') :(SKIPFCN)&#xA; * Set value to 1&#xA; FACT      FACT = 1&#xA; * Return 1 if N&amp;lt;2&#xA; * Return N*((N-1)!) with recursive call&#xA;   FACT = GT(N,1) FACT(N - 1) * N :(RETURN)&#xA; SKIPFCN&#xA;   OUTPUT = '5 factorial is ' FACT(5)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://berstis.com/s4ref/prim3e.htm&quot; rel=&quot;noreferrer&quot;&gt;http://berstis.com/s4ref/prim3e.htm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="18612" LastActivityDate="2021-01-19T14:29:52.680" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17718" PostTypeId="2" ParentId="17713" CreationDate="2021-01-19T15:23:38.890" Score="3" Body="&lt;p&gt;Another aspect to consider in this discussion is the EDI VANs. EDI is Electronic Data Interchange, and is part and parcel to the wholesale/retailer supply chain. In brief terms, it's a way for retailers to send purchase orders to wholesalers, and get information back.&lt;/p&gt;&#xA;&lt;p&gt;VAN is the Value Added Network. The VAN is the backbone which integrates these disparate enterprises. It's the routing infrastructure. Rather than connecting directly to each other, the participants connect to the VAN, and it routes the messages. Consider it Financial Email.&lt;/p&gt;&#xA;&lt;p&gt;These have been around since the mid-70's.&lt;/p&gt;&#xA;&lt;p&gt;I bring it up because it was a large, and mostly hidden, component of the early computing landscape and helped modernize the supply chain.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2021-01-19T15:23:38.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17719" PostTypeId="2" ParentId="17709" CreationDate="2021-01-19T18:01:07.177" Score="5" Body="&lt;p&gt;Place a sequence of JMP instructions, possibly along with other small bits of code, within a single page.  One may then use something like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    lda jumpTable,x&#xA;    sta patch1+1&#xA;patch1:&#xA;    jmp jumps&#xA;&#xA;jumps:&#xA;jproc1: jmp proc1&#xA;jproc2a: lda #0&#xA;        jmp proc2&#xA;jproc2b: lda #1&#xA;        jmp proc2&#xA;jproc2: jmp proc2&#xA;&#xA;jumpTable:&#xA;    .byte &amp;lt;jproc1, &amp;lt;jproc2a, &amp;lt;jproc2b, &amp;lt;jproc1, &amp;lt;jproc1, &amp;lt;jproc3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Note that if multiple spots in the jump table should identify the same routine, they may all springboard off the same jump instruction, and that it's possible to include little bits of code within the jump table if the whole thing fits in a page.&lt;/p&gt;&#xA;&lt;p&gt;One could use an indirect jump instruction rather than a &lt;code&gt;jmp&lt;/code&gt; at location &lt;code&gt;patch1&lt;/code&gt;, and then simply list addresses rather than jump instructons starting at &lt;code&gt;jumps&lt;/code&gt;.  This would save a byte per entry, and also save a cycle at execution time, but would forego the ability to insert tiny bits of code within the jump table itself which can often be very useful if multiple entries in the jump table should have behaviors that should match except for one small detail.&lt;/p&gt;&#xA;&lt;p&gt;Note that even in situations where this approach would end up requiring a an &amp;quot;extra&amp;quot; jump, the three cycles necessary to execute an extra JMP instruction will be far cheaper than the load and store necessary to handle the second byte from a table of two-byte jump addresses.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2021-01-20T14:46:07.340" LastActivityDate="2021-01-20T14:46:07.340" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="17720" PostTypeId="2" ParentId="11661" CreationDate="2021-01-19T20:31:42.497" Score="3" Body="&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11661/what-made-windows-me-so-crash-prone#comment35941_11665&quot;&gt;mentioned by Justin Time&lt;/a&gt;, WDM and VXD drivers had a tendency to conflict.&lt;/p&gt;&#xA;&lt;p&gt;This introduced a fairly strong &amp;quot;whether you remember WinME as great or garbage depends on the hardware you ran it on&amp;quot; element to people's recollections of it.&lt;/p&gt;&#xA;&lt;p&gt;I didn't use it myself but the impression I got from people who did was that the rule of thumb was &amp;quot;If you're not going all-WDM, stay on 98SE&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;(I stayed on Windows 98 SE long into the Windows XP era because I had a childishly petulant reaction to &amp;quot;Windows: Fisher-Price Edition&amp;quot; and wanted maximum compatibility with the games I actually ran.)&lt;/p&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2021-01-19T20:31:42.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17722" PostTypeId="1" CreationDate="2021-01-20T08:22:39.200" Score="4" ViewCount="174" Body="&lt;p&gt;Sorry if this is &lt;em&gt;too&lt;/em&gt; recent, but back when I was first getting into programming in ~2002-2004, there was some Flash/SWF-to-EXE tool that provided ActionScript bindings to Windows desktop APIs. Does anyone know what that tool might have been called?&lt;/p&gt;&#xA;&lt;p&gt;I would have used it with Macromedia Flash MX 2004 or maybe Macromedia Flash 8&lt;/p&gt;&#xA;&lt;p&gt;Google-ing has been fruitless thanks to the recent death of Flash.&lt;/p&gt;&#xA;" OwnerUserId="8236" LastEditorUserId="8236" LastEditDate="2021-01-20T08:41:53.700" LastActivityDate="2021-04-06T17:39:04.973" Title="Macromedia Flash Desktop API / EXE bundler" Tags="&lt;identify-this-software&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17724" PostTypeId="1" AcceptedAnswerId="17726" CreationDate="2021-01-20T12:24:31.760" Score="7" ViewCount="423" Body="&lt;p&gt;I was wondering if it is still possible to access any online BBS using dial up and an 80's era computer.&lt;/p&gt;&#xA;&lt;p&gt;I'm aware that some dial up internet providers still exist (eg Nippy Internet in the UK), but will these work with an old Acorn Electron or Commodore 64, assuming I have the appropriate hardware (something like this &lt;a href=&quot;https://www.ebay.co.uk/itm/184622606357&quot; rel=&quot;noreferrer&quot;&gt;Prism Modem&lt;/a&gt;? ), and such a BBS service still exists?&lt;/p&gt;&#xA;&lt;p&gt;I think re-watching the War Games movie recently on TV in the UK awakened some dial-up nostalgia for me :)&lt;/p&gt;&#xA;" OwnerUserId="20602" LastActivityDate="2021-01-22T14:19:34.590" Title="Is it still possible to access a BBS via dial up internet on the C64 (or other retro computers)" Tags="&lt;commodore-64&gt;&lt;internet&gt;&lt;acorn&gt;&lt;bbs&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17725" PostTypeId="2" ParentId="17724" CreationDate="2021-01-20T12:53:43.240" Score="5" Body="&lt;p&gt;There are still a lot of retro-BBS out there, accessible via dial-up or telnet (or both). &lt;a href=&quot;https://www.telnetbbsguide.com/&quot; rel=&quot;noreferrer&quot;&gt;telnetbbsguide&lt;/a&gt; has a list.&lt;/p&gt;&#xA;&lt;p&gt;Typically they will work with retro computers (they are often &lt;em&gt;made&lt;/em&gt; for that), but you will have to figure out either if you can connect up your retro computer to something (e.g. a RaspPi) somehow (e.g via serial) that can forward that connection via telnet, or you'll have to figure out how you'll connect a modem to your telephone system, so you can dial in (and pay money for that, unless you've a phone flatrate to the location of the BBS).&lt;/p&gt;&#xA;&lt;p&gt;In Germany, Fritzboxes work great for that, as they normally have a TAE-socket where you can plug in the usual German modems. For your country, YMMV.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-01-20T12:53:43.240" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17726" PostTypeId="2" ParentId="17724" CreationDate="2021-01-20T14:12:21.060" Score="8" Body="&lt;p&gt;There are many and you can always create your own.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.bbscorner.com/&quot; rel=&quot;noreferrer&quot;&gt;BBS Corner&lt;/a&gt; has a number of links to some that are running and links to software.&lt;/p&gt;&#xA;&lt;p&gt;It is true that many old BBSs still (sort of) running are now accessible via the Internet, even if by Telnet.  But there are die-hard devotees out there running boards that are accessed by dial-up.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2021-01-20T14:12:21.060" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17727" PostTypeId="2" ParentId="17680" CreationDate="2021-01-20T18:17:10.640" Score="5" Body="&lt;p&gt;I've used &lt;a href=&quot;https://github.com/moxie0/sslstrip&quot; rel=&quot;noreferrer&quot;&gt;sslstrip&lt;/a&gt; for this before.&lt;/p&gt;&#xA;&lt;p&gt;The program itself works well but some sites were giving me problems:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Some of them redirect you to https:// when clicking a link, so you have to edit the URL sometimes&lt;/li&gt;&#xA;&lt;li&gt;Some pages made my Netscape 4.0 on Windows 3.1 crash&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="20605" LastActivityDate="2021-01-20T18:17:10.640" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17728" PostTypeId="2" ParentId="17686" CreationDate="2021-01-20T20:02:45.150" Score="1" Body="&lt;p&gt;Haskell (from 1990) does this as well:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;doubleMe x = x + x  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;defines a function &lt;code&gt;doubleMe&lt;/code&gt; of one parameter &lt;code&gt;x&lt;/code&gt; and assigns the function body &lt;code&gt;x+x&lt;/code&gt; to it, see the great &lt;a href=&quot;http://learnyouahaskell.com/starting-out#babys-first-functions&quot; rel=&quot;nofollow noreferrer&quot;&gt;Learn You A Haskell For Great Good&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20607" LastActivityDate="2021-01-20T20:02:45.150" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17729" PostTypeId="1" CreationDate="2021-01-21T04:07:11.293" Score="2" ViewCount="731" Body="&lt;p&gt;In the non-OOP programming languages that I know of, you can't make a variable &lt;code&gt;private&lt;/code&gt; (i.e. there is no &lt;code&gt;private&lt;/code&gt; keyword), but there are some tricks that you can use to effectively make a variable &lt;code&gt;private&lt;/code&gt; (i.e. to only allow certain functions to be able to access the variable), for example the programming language &lt;code&gt;C&lt;/code&gt; allows you to use such tricks.&lt;/p&gt;&#xA;&lt;p&gt;But are there some non-OOP programming languages that does not allow you to use such tricks to make a variable &lt;code&gt;private&lt;/code&gt; (i.e. where all variables are accessible by all functions)?&lt;/p&gt;&#xA;" OwnerUserId="20613" LastActivityDate="2021-01-21T13:51:45.027" Title="Are there some non-OOP programming languages that does not allow you to make a variable private?" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="4" CommentCount="10" ClosedDate="2021-01-21T14:29:27.797" ContentLicense="CC BY-SA 4.0" />
  <row Id="17730" PostTypeId="2" ParentId="17729" CreationDate="2021-01-21T04:28:04.840" Score="7" Body="&lt;p&gt;The BASIC language did not have the notion of variable scopes. All variables were statically allocated and globally accessible.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2021-01-21T04:28:04.840" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17731" PostTypeId="2" ParentId="17729" CreationDate="2021-01-21T07:08:42.710" Score="3" Body="&lt;p&gt;(I guess this isn't really retrocomputing, and more general programming languages theory ...)&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Private&amp;quot; in OOP is tied to a particular object, and non-OOP languages usually don't have objects.&lt;/p&gt;&#xA;&lt;p&gt;If you allow other constructs:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Module systems&lt;/strong&gt; in nearly all languages have a concept of &amp;quot;exported&amp;quot; vs. &amp;quot;non-exported&amp;quot; (&amp;quot;private&amp;quot;) items.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Scope&lt;/strong&gt; in procedural languages makes variables accessible only on the static scope where they are defined. If you combine that with constructs that extend the lifetime of the variable (e.g. &lt;code&gt;static&lt;/code&gt; in C), you get something like a global private variable.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Rank-2 types&lt;/strong&gt; in typed functional languages can tie a particular expression to a quantified type variable, and prevents the &amp;quot;escape&amp;quot; from that expression into surrounding code. This is for example used in the &lt;code&gt;ST&lt;/code&gt; monad in Haskell.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-01-21T07:08:42.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17732" PostTypeId="2" ParentId="17729" CreationDate="2021-01-21T07:09:57.613" Score="5" Body="&lt;p&gt;In C, if a variable has &amp;quot;static&amp;quot; in front of it, it is private to the code module.  If someone decides to stick it in a header file, then every source file that #includes that header file will have their own private copy.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2021-01-21T07:09:57.613" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17733" PostTypeId="1" AcceptedAnswerId="17736" CreationDate="2021-01-21T09:43:45.443" Score="6" ViewCount="296" Body="&lt;p&gt;&lt;a href=&quot;https://archive.org/details/run-magazine-51/page/n21/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;The March 1988 issue of &lt;em&gt;RUN&lt;/em&gt;&lt;/a&gt; contains the following tip from a reader on page 20:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Attention: C-128/1902A Owners!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you use a Commodore 1902A video monitor with your C-128, here's a way to get a clearer and cleaner screen image by increasing the resolution of 80-Column mode:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;POKE 54784,9:POKE54785,232&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since I'm a confirmed RUN Script 128 user, I found the default resolution a little hard on my eyes after an hour or so. So now I include the above Pokes within the boot programs of all my 80-column programs.&lt;/p&gt;&#xA;&lt;p&gt;—John Ryan, Biloxi, MS&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I tried typing these commands in the 80-column mode of a C128 emulated with &lt;a href=&quot;https://vice-emu.sourceforge.io/&quot; rel=&quot;noreferrer&quot;&gt;VICE&lt;/a&gt;, but the only thing that seems to happen is that the text area shifts a bit.  What do these POKEs do on a real Commodore 128 and Commodore 1902A monitor?  Do they really &amp;quot;increase the resolution&amp;quot; of the screen, making it &amp;quot;clearer and cleaner&amp;quot;, and if so, how exactly does this work and why didn't Commodore configure the computer this way by default?&lt;/p&gt;&#xA;" OwnerUserId="6527" LastActivityDate="2021-01-21T10:49:43.773" Title="Can the 80-column display really be improved on a C128 and 1902A monitor?" Tags="&lt;crt-monitor&gt;&lt;commodore-128&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17734" PostTypeId="1" CreationDate="2021-01-21T09:46:14.623" Score="23" ViewCount="6620" Body="&lt;p&gt;Memory corruption bugs have always been a common problem in large C programs and projects. It was a problem in 4.3BSD back then, and it's still a problem today. No matter how carefully the program is written, if it's sufficiently large, it's often possible to discover yet another out-of-bound read or write bug in the code.&lt;/p&gt;&#xA;&lt;p&gt;But there was a time when large programs, including operating systems, were written in assembly, not C. Was memory corruption bugs a common problem in large assembly programs? And how did it compare to C programs?&lt;/p&gt;&#xA;" OwnerUserId="12128" LastActivityDate="2021-01-24T14:26:26.947" Title="Was memory corruption a common problem in large programs written in assembly language?" Tags="&lt;history&gt;&lt;assembly&gt;&lt;bugs&gt;" AnswerCount="12" CommentCount="29" FavoriteCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17735" PostTypeId="2" ParentId="17734" CreationDate="2021-01-21T10:23:06.037" Score="53" Body="&lt;p&gt;Coding in assembly is brutal.&lt;/p&gt;&#xA;&lt;h3&gt;Rogue pointers&lt;/h3&gt;&#xA;&lt;p&gt;Assembly languages rely even more on pointers (through address registers) so you can't even rely on the compiler or static analyzing tools to warn you about such memory corruptions / buffer overruns as opposed to C.&lt;/p&gt;&#xA;&lt;p&gt;For instance in C, a good compiler may issue a warning there:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; char x[10];&#xA; x[20] = 'c';&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That's limited. As soon as the array decays to a pointer, such checks cannot be performed, but that's a start.&lt;/p&gt;&#xA;&lt;p&gt;In assembly, without proper run-time or formal execution binary tools you can't detect such errors.&lt;/p&gt;&#xA;&lt;h3&gt;Rogue (mostly address) registers&lt;/h3&gt;&#xA;&lt;p&gt;Another aggravating factor for assembly is that the register preservation and routine calling convention isn't standard / guaranteed.&lt;/p&gt;&#xA;&lt;p&gt;If a routine is called and doesn't save a particular register by mistake, then it returns to the caller with a modified register (beside the &amp;quot;scratch&amp;quot; registers that are known to be trashed on exit), and the caller doesn't expect it, which leads to reading/writing to the incorrect address. For instance in 68k code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    move.b  d0,(a3)+&#xA;    bsr  a_routine&#xA;    move.b  d0,(a3)+   ; memory corruption, a3 has changed unexpectedly&#xA;    ...&#xA;&#xA;a_routine:&#xA;    movem.l a0-a2,-(a7)&#xA;    ; do stuff&#xA;    lea some_table(pc),a3    ; change a3 if some condition is met&#xA;    movem.l (a7)+,a0-a2   ; the routine forgot to save a3 !&#xA;    rts&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Using a routine written by someone else which doesn't use the same register saving conventions can lead to the same issue. I usually save &lt;em&gt;all&lt;/em&gt; registers prior to using someone else’s routine.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, a compiler uses the stack or standard register parameter passing, handles local variables using stack/other device, preserves registers if needed, and it's all coherent in the whole program, guaranteed by the compiler (unless there are bugs, of course)&lt;/p&gt;&#xA;&lt;h3&gt;Rogue addressing modes&lt;/h3&gt;&#xA;&lt;p&gt;I fixed a lot of memory violations in ancient Amiga games. Running them in a virtual environment with MMU activated sometimes triggers read/write errors in complete bogus addresses. Most of the time those read/writes have no effect because the reads return 0 and the writes go in the woods, but depending on the memory configuration it can have nasty consequences.&lt;/p&gt;&#xA;&lt;p&gt;There were also cases of addressing errors. I saw stuff like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; move.l $40000,a0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;instead of immediate&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; move.l #$40000,a0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;in that case, the address register contains what's in &lt;code&gt;$40000&lt;/code&gt; (probably trash) and not the &lt;code&gt;$40000&lt;/code&gt; address. This leads to catastrophic memory corruption in some cases. The game usually ends up doing the action that didn't work somewhere else without fixing this so the game works properly most of the time. But there are times when the games had to be properly fixed  to restore proper behaviour.&lt;/p&gt;&#xA;&lt;p&gt;In C, misleading a value for a pointer leads to a warning.&lt;/p&gt;&#xA;&lt;p&gt;(We gave up on a game such as &amp;quot;Wicked&amp;quot; that had more and more graphical corruption the more advanced you got in levels, but also depending on the way you passed the levels and their order...)&lt;/p&gt;&#xA;&lt;h3&gt;Rogue data sizes&lt;/h3&gt;&#xA;&lt;p&gt;In assembly, there are no types. It means that if I do&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;move.w #$4000,d0           ; copy only 16 bits&#xA;move.l #1,(a0,d0.l)    ; indexed write on d1, long&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;the &lt;code&gt;d0&lt;/code&gt; register only gets half of the data changed. May be what I wanted, maybe not. Then if &lt;code&gt;d0&lt;/code&gt; contained zero on most significant 32-16 bits, the code does what's expected, otherwise it adds &lt;code&gt;a0&lt;/code&gt; and &lt;code&gt;d0&lt;/code&gt; (full range) and the resulting write is &amp;quot;in the woods&amp;quot;. A fix is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;move.l #1,(a0,d0.w)    ; indexed write on d1, long&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But then if &lt;code&gt;d0&lt;/code&gt; &amp;gt; &lt;code&gt;$7FFF&lt;/code&gt; it does something wrong too, because &lt;code&gt;d0&lt;/code&gt; is considered &lt;em&gt;negative&lt;/em&gt; then (not the case with &lt;code&gt;d0.l&lt;/code&gt;). So &lt;code&gt;d0&lt;/code&gt; needs sign extension or masking...&lt;/p&gt;&#xA;&lt;p&gt;Those size errors can be seen on a C code, for instance when assigning to a &lt;code&gt;short&lt;/code&gt; variable (which truncates the result) but even then you just get a wrong result most of the time, not fatal issues like above (that is: if you don't &lt;em&gt;lie&lt;/em&gt; to the compiler by forcing wrong type casts)&lt;/p&gt;&#xA;&lt;p&gt;Assemblers have no types, but good assemblers allow to use structures (&lt;code&gt;STRUCT&lt;/code&gt; keyword) which allow to elevate the code a little by automatically computing structure offsets. But a bad size read can be catastrophic no matter you're using structs/defined offsets or not&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;move.w  the_offset(a0),d0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;instead of&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;move.l  the_offset(a0),d0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;isn't checked, and gives you the wrong data in &lt;code&gt;d0&lt;/code&gt;. Make sure you drink enough coffee while coding, or just write documentation instead...&lt;/p&gt;&#xA;&lt;h3&gt;Rogue data alignment&lt;/h3&gt;&#xA;&lt;p&gt;The assembler usually warns about unaligned code, but not on unaligned pointers (because pointers have no type), that can trigger bus errors.&lt;/p&gt;&#xA;&lt;p&gt;High level languages use types and avoid most of those errors by performing alignment/padding (unless, once again, lied to).&lt;/p&gt;&#xA;&lt;p&gt;You can write assembly programs successfully however. By using a strict methodology for parameter passing/register saving and by trying to cover 100% of your code by tests, and a debugger (symbolic or not, this is still the code that you have written). That isn't going to remove all the potential bugs, specially the ones caused by wrong input data, but it will help.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="15334" LastEditDate="2021-01-21T19:46:49.467" LastActivityDate="2021-01-21T19:46:49.467" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="17736" PostTypeId="2" ParentId="17733" CreationDate="2021-01-21T10:49:43.773" Score="10" Body="&lt;p&gt;In the Commodore 128, the Video Display Controller (VDC) was used for the 80-column mode. Two variants of the VDC were used, the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_8563&quot; rel=&quot;noreferrer&quot;&gt;8563&lt;/a&gt; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_8568&quot; rel=&quot;noreferrer&quot;&gt;8568&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Looking at the &lt;code&gt;POKE&lt;/code&gt;s, the address 54784 ($D600) is the index register for the VDC, while 54785 ($D601) is the data register.&lt;/p&gt;&#xA;&lt;p&gt;So those two &lt;code&gt;POKE&lt;/code&gt;s write the value 232 ($E8) to register 9 of the VDC.&lt;/p&gt;&#xA;&lt;p&gt;Register 9 is the &amp;quot;Character Total Vertical&amp;quot; register, so that changes the total height of the character.&lt;/p&gt;&#xA;&lt;p&gt;Therefore &amp;quot;increasing the resolution of 80-Column mode&amp;quot; is probably a clumsy way of saying &amp;quot;characters are now taller&amp;quot;, probably with an additional blank line of pixels between two lines of characters (I don't have a real C128, so I cannot try this out). If the 1902A monitor by default had enough overscan to still completely display all characters, then that would make the overall picture bigger, and therefore probably easier to read.&lt;/p&gt;&#xA;&lt;p&gt;It probably would not have worked on all monitors in this way; it's possible that on other monitors, not everything would have been displayed. That's also probably the reason Commodore didn't configure it by default.&lt;/p&gt;&#xA;&lt;p&gt;I'd also assume that VICE doesn't simulate analog monitors and/or the VDC to the degree necessary to see the full effect.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-01-21T10:49:43.773" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17737" PostTypeId="2" ParentId="17729" CreationDate="2021-01-21T13:51:45.027" Score="0" Body="&lt;p&gt;The question is, I think, wrong in its assumptions. Non-object-oriented languages frequently permit private access to symbols (variables, functions, …) without the need to resort to &amp;quot;tricks&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;The essential feature, supported by many languages, including every assembler I've used and pretty much every higher-level language that supports separate compilation, is the &amp;quot;source file&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;In a given source file, symbols can typically be declared as &amp;quot;internal to this file&amp;quot; or &amp;quot;visible outside this file&amp;quot; (as well as &amp;quot;defined in some other file but used here&amp;quot;).  In a decent system, IMO, the default is &amp;quot;internal&amp;quot;, since then you have to consciously think about what is not private.&lt;/p&gt;&#xA;&lt;p&gt;So, yes, we have &amp;quot;private&amp;quot;.  It's either implicit, or else it's spelled something like &amp;quot;internal&amp;quot; (or .INTRN, etc.)&lt;/p&gt;&#xA;&lt;p&gt;There were also programming systems that did not support programs split into multiple files; typically early systems. Algol 60 was an example, though implementation-specific extensions sometimes existed. These controlled symbol visibility through lexical scope: the nested block structure helped.  Sometimes it was technically necessary to give symbols wider visibility than you'd like, but then, in a one-file program, the author is not trying to access things that he intends that he does not access.&lt;/p&gt;&#xA;&lt;p&gt;This doesn't answer the question, which I interpret as &amp;quot;is there at least one system that does not allow control of symbol visibility?&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;So, yes, there is. It cannot really be otherwise. There must be at least one language that does not have this feature that is really essential to large programming.&lt;/p&gt;&#xA;&lt;p&gt;One obvious candidate presents itself: BASIC.&lt;/p&gt;&#xA;&lt;p&gt;The original Dartmouth BASIC had an undifferentiated symbol space. Every symbol (which were all one or two characters) was available throughout the program.  There was not even any lexical division into &amp;quot;routines&amp;quot; -- a subroutine call was just a GOSUB to any line number you wanted; like a GOTO but with an address &amp;quot;saved&amp;quot; in case you ever executed a RETURN.&lt;/p&gt;&#xA;&lt;p&gt;(No slight on BASIC's inventors - it was designed as a Beginner's language)&lt;/p&gt;&#xA;&lt;p&gt;So that's my answer: BASIC.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-01-21T13:51:45.027" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17738" PostTypeId="2" ParentId="17734" CreationDate="2021-01-21T16:10:23.230" Score="19" Body="&lt;p&gt;Simple idiotic errors abound in assembly, no matter how careful you are.  It turns out that even stupid compilers for poorly-defined high level languages (like C) constrain a huge range of possible errors as semantically or syntactically invalid.  A mistake with a single extra or forgotten keystroke is far more likely to refuse to compile than it is to assemble.  Constructs you can validly express in assembly which just &lt;em&gt;don't make any sense&lt;/em&gt; because you're doing it all wrong are less likely to translate into something that's accepted as valid C.  And since you're operating at a higher level, you're more likely to squint at it and go &amp;quot;huh?&amp;quot; and rewrite the monster you just wrote.&lt;/p&gt;&#xA;&lt;p&gt;So assembly development and debugging is, indeed, painfully unforgiving.  But most such errors break things &lt;em&gt;hard&lt;/em&gt;, and would show up in development and debugging.  I would hazard the educated guess that, if the developers are following the same basic architecture and same good development practices, the final product should be about as robust.  The sort of errors a compiler catches can be caught with good development practices, and the sort of errors compilers &lt;em&gt;don't&lt;/em&gt; catch may or may not be caught with such practices.  It will take a lot longer to get to the same level, though.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2021-01-21T16:10:23.230" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17739" PostTypeId="2" ParentId="17734" CreationDate="2021-01-21T17:00:48.063" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Memory corruption bugs have always been a common problem in large C programs [...]&#xA;But there was a time when large programs, including operating systems, were written in assembly, not C.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You're aware that there are other languages that were quite common already early on? Like COBOL, FORTRAN or PL/1?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was memory corruption bugs a common problem in large assembly programs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This depends of course on multiple factors, like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the Assembler used, as different assembler programs offers different level of programming support.&lt;/li&gt;&#xA;&lt;li&gt;program structure, as especially large programs adhere to checkable structure&lt;/li&gt;&#xA;&lt;li&gt;modularisation, and clear interfaces&lt;/li&gt;&#xA;&lt;li&gt;the kind of program written, as not every task requires pointer fiddling&lt;/li&gt;&#xA;&lt;li&gt;best practice style&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;A good assembler does not only make sure that data is aligned, but as well offers tools to handle complex data types, structures and alike in abstract fashion, reducing the need to 'manually' calculate pointers.&lt;/p&gt;&#xA;&lt;p&gt;An assembler used for any serious project is as always a macro assembler (*1), thus capable to encasule primitive operations into higher level macro instructions, enabling a more application centric programming while avoiding many pitfalls of pointer handling (*2).&lt;/p&gt;&#xA;&lt;p&gt;Program types are also quite influential. Applications usually consist of various modules, many of them can be written almost or complete without (or only controlled) pointer usage. Again, usage of tools provided by the assembler is key to less faulty code.&lt;/p&gt;&#xA;&lt;p&gt;Next would be best practice - which goes hand in hand with many of the before. Simply do not write programs/modules that need multiple base registers, that hand over large chunks of memory instead of dedicated request structures and so on...&lt;/p&gt;&#xA;&lt;p&gt;But best practice starts already early on and with seemingly simple things. Just take the example of a primitive (sorry) CPU like the 6502 having maybe a set of tables, all adjusted to page borders for performance. When loading the address of one of these tables into a zero page pointer for indexed access, usage of the tools the assembler would mean to go&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;     LDA   #&amp;lt;Table&#xA;     STA   Pointer&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Quite some programs I've seen rather go&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;     LDA   #0&#xA;     STA   Pointer&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(or worse, if on a 65C02)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;     STZ   Pointer&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The usual argumentation is 'But it is aligned anyway'. Is it? Can that be guaranteed for all future iterations? What about some day when address space get tight and they need to be moved to non aligned addresses? Plenty of great (aka hard to find) errors to be expect.&lt;/p&gt;&#xA;&lt;p&gt;So Best practice again brings us back to using the Assembler and all the tools it offers.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Do not try to play &lt;a href=&quot;https://en.wikipedia.org/wiki/Iznogoud&quot; rel=&quot;nofollow noreferrer&quot;&gt;Assembler instead of the Assembler&lt;/a&gt; - let him do his job for you.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;And then there is the runtime, something that applies to all languages but is often forgotten. Beside things like stack checking or bounds check on parameters, one of the most effective ways to catch pointer errors is simply locking the first alnd last memory page against write &lt;em&gt;and read&lt;/em&gt; (*3). It not only catches the all beloved null pointer error, but as well all low positive or negative numbers which are often result of some prior indexing going wrong. Sure, Runtime is always the last resort, but this one is an easy one.&lt;/p&gt;&#xA;&lt;p&gt;Above all, maybe the most relevant reason is&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the machine's ISA&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;in reducing chances of memory corruption by reducing the need to handle with pointers at all.&lt;/p&gt;&#xA;&lt;p&gt;Some CPU structures simply require less (direct) pointer operations than other. There is a huge gap between architectures that include memory to memory operations vs. such who don't, like accumulator based load/store architectures. The inherently require pointer handling for anything larger than a single element (byte/word).&lt;/p&gt;&#xA;&lt;p&gt;For example to transfer a field, let's say a customer name from around in memory, a /360 uses a single MVC operation with addresses and transfer length generated by the assembler from data definition, while a load/store architecture, designed to handle each byte separate, has to set up pointers and length in registers and loop around a moving single elements.&lt;/p&gt;&#xA;&lt;p&gt;Since such operations are quite common, resulting potential for errors is as well common. Or, on a more generalized way it can be said that:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Programms for CISC processors are usually less prone to errors than such written for RISC machines.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Of course and as usual, everything can be screwed up by bad programming.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And how did it compare to C programs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Much the same - or better, C is the HLL equivalent of the most primitive CPU ISA, so anything offering higher level instructions will fair better.&lt;/p&gt;&#xA;&lt;p&gt;C is inherently a RISCy language. Operations provided are reduced to a minimum, which goes with a minimum ability for check against unintended operations. Using unchecked pointers is not only standard but required for many operations, opening many possibilities for memory corruption.&lt;/p&gt;&#xA;&lt;p&gt;Take in contrast a HLL like ADA, here it's almost impossible to create pointer havoc - unless it's intended and explicit declared as option. A good part of it is (like with the ISA before) due higher data types and handling thereof in a typesafe manner.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;For the experience part, I did most of my professional life (&amp;gt;30y) in Assembly projects, with like 80% Mainframe (/370) 20% Micros (mostly 8080/x86) - plus private a lot more :) Mainframe programming covered projects as large as 2+ millions LOC (instructions only) while micro projects kept around 10-20k LOC.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - No, something offering away replacing text passages with premade text is at best some textual preprocessor, but not a macro assembler. A macro assembler is a meta tool to create the language needed for a project. It offers tools to tap the information the assembler gathers about the source (field size, field type, and many more) as well as control structures to formulate handling, used to generate appropriate code.&lt;/p&gt;&#xA;&lt;p&gt;*2 - It's easy to bemoan that C wasn't fit with any serious macro capabilities, it would not only removed the need for many obscure constructs, but as well enabled much advancement by extending the language without the need to write a new one.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Personally I prefer to make page 0 only write protected and fill the first256 bytes with binary zero. That way all null (or low) pointer writes still result in a machine error, but reading from a null pointer returns, depending on the type, a byte/halfword/word/doublewort containing zero - well, or a null-string :) I know, it's lazy, but it makes life much more if easy one has to incooperate other peoples code. Also the remaining page can be used for handy constant values like pointers to various global sources, ID strings, constant field content and translate tables.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-01-22T22:48:08.480" LastActivityDate="2021-01-22T22:48:08.480" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17740" PostTypeId="2" ParentId="17734" CreationDate="2021-01-21T20:45:03.307" Score="4" Body="&lt;p&gt;I don't think memory corruption is generally more of a problem in assembly language than in any other language which uses unchecked array-subscripting operations, when comparing programs that perform similar tasks.  While writing correct assembly code may require attention to details beyond those that would be relevant in a language like C, some aspects of assembly language are actually safer than C.  In assembly language, if code performs a sequence of loads and stores, an assembler will produce load and store instructions in the order given without questioning whether they are all necessary.  In C, by contrast, if a clever compiler like clang is invoked with any optimization setting other than &lt;code&gt;-O0&lt;/code&gt; and given something like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;extern char x[],y[];&#xA;int test(int index)&#xA;{&#xA;    y[0] = 1;&#xA;    if (x+2 == y+index)&#xA;        y[index] = 2;&#xA;    return y[0];&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;it may determine that the value of &lt;code&gt;y[0]&lt;/code&gt; when the &lt;code&gt;return&lt;/code&gt; statement executes will always be 1, and there's thus no need to reload its value after writing to &lt;code&gt;y[index]&lt;/code&gt;, even though the only defined circumstance where the write to index could occur would be if &lt;code&gt;x[]&lt;/code&gt; is two bytes, &lt;code&gt;y[]&lt;/code&gt; happens to immediately follow it, and &lt;code&gt;index&lt;/code&gt; is zero, implying that &lt;code&gt;y[0]&lt;/code&gt; would actually be left holding the number 2.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-01-21T20:45:03.307" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17741" PostTypeId="2" ParentId="17734" CreationDate="2021-01-21T22:41:28.530" Score="24" Body="&lt;p&gt;I spent most of my career writing assembler, solo, small teams and large teams (Cray, SGI, Sun, Oracle). I worked on embedded systems, OS, VMs, and bootstrap loaders. Memory corruption was seldom if ever a problem. We hired sharp people, and the ones that failed were managed into different jobs more appropriate to their skills.&lt;/p&gt;&#xA;&lt;p&gt;We also tested fanatically - both at the unit level and system level. We had automated testing that ran constantly both on simulators and real hardware.&lt;/p&gt;&#xA;&lt;p&gt;Near the end of my career I interviewed with a company and I asked about how they did their automated testing. Their response of &amp;quot;What?!?&amp;quot; was all I needed to hear, I ended the interview.&lt;/p&gt;&#xA;" OwnerUserId="20620" LastActivityDate="2021-01-21T22:41:28.530" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17742" PostTypeId="2" ParentId="9345" CreationDate="2021-01-22T01:07:38.583" Score="1" Body="&lt;p&gt;This won't be the last one, but for Mozilla Firefox, the last version supporting Windows 98 (without hacks) was &lt;a href=&quot;https://website-archive.mozilla.org/www.mozilla.org/firefox_releasenotes/en-us/firefox/2.0.0.20/releasenotes/#uninstall&quot; rel=&quot;nofollow noreferrer&quot;&gt;Firefox 2.0.0.20&lt;/a&gt;, released on December 18, 2008, support for98/Me &lt;a href=&quot;https://www-archive.mozilla.org/support/firefox/faq#win98icon&quot; rel=&quot;nofollow noreferrer&quot;&gt;was removed&lt;/a&gt; on &lt;a href=&quot;https://website-archive.mozilla.org/www.mozilla.org/firefox_releasenotes/en-us/firefox/3.0/releasenotes/#uninstall&quot; rel=&quot;nofollow noreferrer&quot;&gt;Firefox 3&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="618" LastActivityDate="2021-01-22T01:07:38.583" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17743" PostTypeId="2" ParentId="17734" CreationDate="2021-01-22T02:17:03.517" Score="6" Body="&lt;p&gt;I have written OS mods in assembly on CDC G-21, Univac 1108, DECSystem-10, DECSystem-20, all 36 bit systems, plus 2 IBM 1401 assemblers.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Memory corruption&amp;quot; existed, mostly as an entry on a &amp;quot;Things Not To Do&amp;quot; list.&lt;/p&gt;&#xA;&lt;p&gt;On a Univac 1108 I found a hardware error where the first half-word fetch (the interrupt handler address) after a hardware interrupt would return all 1s, instead of the contents of the address. Off into the weeds, with interrupts disabled, no memory protect. Round and round it goes, where it stops nobody knows.&lt;/p&gt;&#xA;" OwnerUserId="11232" LastActivityDate="2021-01-22T02:17:03.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17744" PostTypeId="1" CreationDate="2021-01-22T04:38:39.080" Score="2" ViewCount="126" Body="&lt;p&gt;Windows Management Instrumentation (WMI) was made available as a separate download for Windows NT 4.0 SP4 and above. I know that WMI installs and works great on Intel IA32 (x86) flavors of NT4, because I have the WMI redistributable and I've tested it.&lt;/p&gt;&#xA;&lt;p&gt;However, Windows NT 4.0 Service Pack 4 (SP4), SP5, SP6, and SP6a were released for both the Intel IA32 (x86) and DEC Alpha architectures of Windows NT 4.&lt;/p&gt;&#xA;&lt;p&gt;My question is: &lt;strong&gt;did Microsoft release a WMI redistributable for NT4 that worked on DEC Alpha?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have a WMI redistributable for NT4 (wmint4.exe, SHA256: A958C28D19507784BC66D42404952D755281FF3549660605613C4EDD3E489809), but I do not have a DEC Alpha system to know if it would install there. I could also speculate that there may have been a separate download for DEC Alpha NT4 systems.&lt;/p&gt;&#xA;&lt;p&gt;For completion sake, it is worth noting that Windows NT 4 was originally released for MIPS and PowerPC platforms, too, but Microsoft abandoned further development for these platforms before the release of SP4. Because the WMI redistributable required SP4, I can conclude that WMI could not be added to MIPS or PowerPC versions of NT4.&lt;/p&gt;&#xA;" OwnerUserId="6692" LastActivityDate="2021-01-22T04:38:39.080" Title="Was There a Release of WMI for Windows NT 4.0 Running on DEC Alpha?" Tags="&lt;windows&gt;&lt;alpha&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="17745" PostTypeId="2" ParentId="17734" CreationDate="2021-01-22T12:31:40.867" Score="5" Body="&lt;p&gt;You are comparing apples and pears. High level languages were invented because programs reached a size which was unmanageable with assembler. Example: &amp;quot;V1 had 4,501 lines of assembly code for its kernel, initialisation and shell. Of those, 3,976 account for the kernel, and 374 for the shell.&amp;quot; (From &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/5426/6566&quot;&gt;this answer&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;h1&gt;The. V1. Shell. Had. 347. Lines. Of. Code.&lt;/h1&gt;&#xA;&lt;p&gt;Today's bash has maybe 100,000 lines of code (a wc over the repo yields 170k), not counting central libraries like readline and localization. High-level languages are in use partly for portability but also because it is virtually impossible to write programs of today's size in assembler. It's not just more error prone — it's nigh &lt;em&gt;impossible.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6566" LastEditorUserId="6566" LastEditDate="2021-01-22T19:14:19.050" LastActivityDate="2021-01-22T19:14:19.050" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17746" PostTypeId="2" ParentId="17724" CreationDate="2021-01-22T14:19:34.590" Score="5" Body="&lt;p&gt;In the USA, analog landlines are going away in favor of Voice over IP (VOIP). But analog modems (and fax) don't work well over VOIP, depending on the voice codec.&lt;/p&gt;&#xA;&lt;p&gt;You'll want to choose a non-compressing codec such as ITU G.711, or ITU V.150.1 (also know as V.MOIP), and configure that in your VOIP ATA, depending on what your VOIP provider supports. For fax, there's T.38.&lt;/p&gt;&#xA;&lt;p&gt;If you can configure G.711 in your ATA, then you should be able to connect at 2400 baud, the speed of the C64's fastest modem.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2021-01-22T14:19:34.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17748" PostTypeId="2" ParentId="17734" CreationDate="2021-01-22T16:25:22.980" Score="1" Body="&lt;p&gt;Not when I was working with computers back then.&#xA;We had many problems but I never encountered memory corruption issues.&lt;/p&gt;&#xA;&lt;p&gt;Now I worked on several IBM machines 7090,360,370,s/3,s/7 and also 8080 and Z80 based micros.  Other computers may well have had memory problems.&lt;/p&gt;&#xA;" OwnerUserId="20625" LastActivityDate="2021-01-22T16:25:22.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17749" PostTypeId="1" CreationDate="2021-01-22T18:16:18.870" Score="5" ViewCount="302" Body="&lt;p&gt;I'm interested in IP networking capabilities of the Commodore 64. I learned there is a tool called &lt;a href=&quot;http://www.oxyron.de/html/wc64.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;WarpCopy64&lt;/a&gt; that can be used to run a simple file server on the Commodore. The server can be accessed over the network by special client software running on a Windows computer. I'm wondering if I could build an experimental WarpCopy64 setup on a single Windows computer running both the client and (a C64 emulator with) the server. I understand this might differ a bit from running the same setup on actual hardware but it would provide a cheap way to get started with networking experiments on the platform.&lt;/p&gt;&#xA;&lt;p&gt;I tried the following. I downloaded Npcap 1.10 ( &lt;a href=&quot;https://nmap.org/download.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;nmap.org&lt;/a&gt; ), VICE 3.5 ( &lt;a href=&quot;https://vice-emu.sourceforge.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;sourceforge.io&lt;/a&gt; ) and WarpCopy64 0.6 ( &lt;a href=&quot;http://www.oxyron.de/html/wc64.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;oxyron.de&lt;/a&gt; ). I completed the npcap-1.10.exe installer and extracted GTK3VICE-3.5-win64.7z and warpcopy06.zip packages. I also downloaded the disk image for the C64 demo Fantomas ( &lt;a href=&quot;https://files.scene.org/view/parties/2020/assembly20/oldskool/fantomas_by_siesta.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;scene.org&lt;/a&gt; ) and extracted the fantomas_by_siesta.zip archive.&lt;/p&gt;&#xA;&lt;p&gt;I then ran &lt;code&gt;bin\x64sc.exe&lt;/code&gt; from the extracted VICE archive to run VICE and opened the settings menu. Under &lt;em&gt;Peripherial devices&lt;/em&gt;, &lt;em&gt;Ethernet&lt;/em&gt; I selected &lt;code&gt;\Device\NPF_{...} (Intel(R) Ethernet Connection (2) I219-V)&lt;/code&gt;. Then under &lt;em&gt;Cartridges&lt;/em&gt;, &lt;em&gt;Ethernet Cartridge&lt;/em&gt; I select &lt;code&gt;RRNet&lt;/code&gt; and check the checkbox &lt;code&gt;Enable ethernet cartridge&lt;/code&gt;. I then close the settings.&lt;/p&gt;&#xA;&lt;p&gt;At this point VICE says &lt;code&gt;READY.&lt;/code&gt; to indicate that it is waiting for me to perform operations. I attach the Fantomas disk to drive 8 by selecting &lt;em&gt;File&lt;/em&gt;, &lt;em&gt;Attach disk image&lt;/em&gt;, &lt;em&gt;Drive #8&lt;/em&gt; and selecting the file &lt;code&gt;Siesta_FANTOMAS.d64&lt;/code&gt; from within the Fantomas archive. I then go to &lt;em&gt;File&lt;/em&gt;, &lt;em&gt;Smart attach disk/tape/cartridge ...&lt;/em&gt; and select file &lt;code&gt;WARPCOPY06.PRG&lt;/code&gt; from the extracted WarpCopy64 archive. VICE tells me it is loading the file. I then wait until VICE tells me &lt;code&gt;READY.&lt;/code&gt; the second time. I then type &lt;code&gt;run&lt;/code&gt; and press return. This starts the server program within the emulator.&lt;/p&gt;&#xA;&lt;p&gt;The server is now running and displays me a banner telling me to press &lt;code&gt;N&lt;/code&gt; to change network address. I open Windows &lt;code&gt;cmd.exe&lt;/code&gt; and type &lt;code&gt;ipconfig /all&lt;/code&gt; this listing seems to contain the network device together with an &lt;code&gt;192.168.0.x&lt;/code&gt; IP address that has been assigned to the network device for use on my LAN. I then press &lt;em&gt;n&lt;/em&gt; within the WarpCopy server to change network address. I proceed by entering &lt;code&gt;192.168.0.x&lt;/code&gt; in the server that is running in VICE and press return to confirm. The server responds with &lt;code&gt;IP address/port: 192.168.0.x:6644&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I then run the client app &lt;code&gt;warpcopy.exe&lt;/code&gt; from the extracted WarpCopy archive and enter the corresponding IP address there. I then click on the &lt;em&gt;Directory&lt;/em&gt; button. The client responds with a popup that says &lt;em&gt;Error!&lt;/em&gt;, &lt;em&gt;No reply from 192.168.0.x:6644&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Since using &lt;code&gt;192.168.0.x&lt;/code&gt; did not work, I tried using the default IP address &lt;code&gt;192.168.0.64&lt;/code&gt; for the server. In this configuration the behavior on client side remained the same but the server told me &lt;code&gt;ARP request from 192.168.0.x&lt;/code&gt;. I wonder if the static IP address conflicts somehow with the DHCP configuration my LAN is using.&lt;/p&gt;&#xA;&lt;p&gt;I though I'd also try using &lt;code&gt;\Device\NPF_Loopback (Adapter for loopback traffic capture)&lt;/code&gt; to avoid a possible DHCP issue. However, I'm unable to check &lt;em&gt;Enable ethernet cartridge&lt;/em&gt; with the loopback device selected. VICE tells me &lt;em&gt;VICE Error, Failed to initialize PCAP library, cannot use ethernet based devices. On Windows make sure the pcap DLL is installed, on UNIX make sure to run VICE as root, on MacOS you're on your own.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The WarpCopy client seems to communicate with the server using UDP packets. I was able to verify this by using &lt;a href=&quot;https://www.wireshark.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;WireShark&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I'm able to send some network packets to the server by scanning it with &lt;a href=&quot;https://nmap.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nmap&lt;/a&gt; as follow &lt;code&gt;nmap -sU -p 6642-6646 -Pn 192.168.0.64 --disable-arp-ping&lt;/code&gt;. Nmap tells me port &lt;code&gt;6644&lt;/code&gt; is &lt;code&gt;open|filtered&lt;/code&gt; while the other four ports are &lt;code&gt;closed&lt;/code&gt;. WarpCopy prints an error message for the four packets received on unexpected ports.&lt;/p&gt;&#xA;&lt;p&gt;In addition to the official WarpCopy64 client, there seems to be a 3rd party effort to build another client. Luigi Di Fraia writes about the development effort on his &lt;a href=&quot;https://luigidifraia.wordpress.com/tag/warpcopy64/&quot; rel=&quot;nofollow noreferrer&quot;&gt;blog&lt;/a&gt;. His blog posts seem to contain some details of the WarpCopy protocol. However, I was unable to locate the source code or a release of the 3rd part client.&lt;/p&gt;&#xA;" OwnerUserId="20628" LastEditorUserId="20628" LastEditDate="2021-01-23T21:51:40.480" LastActivityDate="2021-05-18T21:35:41.847" Title="Running WarpCopy64 on an emulator" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;network&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17750" PostTypeId="2" ParentId="17749" CreationDate="2021-01-22T19:07:25.300" Score="4" Body="&lt;p&gt;WarpCopy64 uses the RR-Net cartridge, which is emulated in VICE 2.2 and up. Detailed set-up instructions can be found &lt;a href=&quot;https://sourceforge.net/p/vice-emu/bugs/861/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, which should be a starting point.&lt;/p&gt;&#xA;&lt;p&gt;Except: I just tried it, an on my WinVICE 3.2 installation, the device dropdown remains empty. So you might have to try different versions of VICE.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2021-01-22T19:07:25.300" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17751" PostTypeId="2" ParentId="17734" CreationDate="2021-01-22T19:12:25.313" Score="2" Body="&lt;p&gt;It was a very common problem. IBM's FORTRAN compiler for the 1130 had quite a few: the ones I remember involved cases of incorrect syntax that weren't detected. Moving to machine-near higher level languages didn't obviously help: early Multics systems written in PL/I crashed frequently. I think that programming culture and technique had more to do with ameliorating this situation than language did.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2021-01-22T19:12:25.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17752" PostTypeId="2" ParentId="17749" CreationDate="2021-01-22T19:18:48.850" Score="4" Body="&lt;p&gt;Using VICE 3.4 on Linux, I am able to activate the Ethernet cartridge peripheral in the emulator and launch the WarpCopy64 server.&lt;/p&gt;&#xA;&lt;p&gt;To fully test, I'd just need a Windows machine on my LAN to run the client, but it ought to work fine.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;NOTE&lt;/em&gt;: One likely &amp;quot;gotcha&amp;quot; in getting communications working between the client and the server is the way VICE Ethernet emulation functions. VICE uses &lt;code&gt;libpcap&lt;/code&gt; and &lt;code&gt;libnet&lt;/code&gt; to sniff-and-inject packets. This at least requires administrative privileges on the host machine. It may also prove difficult to route packets across the network to Vice because the destination address is unknown outside the local host.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/l2Nyc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/l2Nyc.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-01-24T16:41:43.050" LastActivityDate="2021-01-24T16:41:43.050" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17753" PostTypeId="2" ParentId="17734" CreationDate="2021-01-22T19:48:13.673" Score="14" Body="&lt;p&gt;I wrote the original garbage collector for MDL, a Lisp like language, back in 1971-72.  It was quite a challenge for me back then.  It was written in MIDAS, an assembler for the PDP-10 running ITS.&lt;/p&gt;&#xA;&lt;p&gt;Avoiding memory corruption was the name of the game in that project.  The entire team had dread of a successful demo crashing and burning when the garbage collector was invoked.  And I had no really good debugging plan for that code.  I did more desk checking than I have ever done before or since.  Stuff like making sure there were no fencepost errors.  Making sure that when a group of vectors were moved,  the target didn't contain any non garbage.  Over and over, testing my assumptions.&lt;/p&gt;&#xA;&lt;p&gt;I never found any bugs in that code, except for ones found by desk checking. After we went live&#xA;none ever surfaced during my watch.&lt;/p&gt;&#xA;&lt;p&gt;I'm just plain not as smart as I was fifty years ago.  I couldn't do anything like that today.  And systems of today are thousands of times bigger than MDL was.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2021-01-22T22:52:22.770" LastActivityDate="2021-01-22T22:52:22.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17754" PostTypeId="1" CreationDate="2021-01-22T23:35:36.403" Score="4" ViewCount="243" Body="&lt;p&gt;A couple of days ago, I was given some old tapes with programs written on them. However, I am having some trouble with them.&lt;/p&gt;&#xA;&lt;p&gt;I do not know what computer they were programed for. After recognising the ZX Spectrum preamble in some of them, I proceeded to obtain their .tzx file. They all work fine but the following two, that I have not been able to recover (continuous Tape Errors):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://ftp.ea4rct.org/radioclub/upload/archivo_historico/cassettes/Programas/WAV/tapeRecorderA.wav&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Tape 1&quot;&gt;Tape 1&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://ftp.ea4rct.org/radioclub/upload/archivo_historico/cassettes/Programas/WAV/tapeRecorderB.wav&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Tape 2&quot;&gt;Tape 2&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, I also have the following tapes, which were not written for the ZX Spectrum. I have not able to identify the computer they were programed for. On Tape 3, the preamble is easily heard. Tape 4 starts at around 0:40. Both of them should have been written for the same computer (they were both sides of the same tape):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://ftp.ea4rct.org/radioclub/upload/archivo_historico/cassettes/Programas/WAV/factorial.wav&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Tape 3&quot;&gt;Tape 3&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://ftp.ea4rct.org/radioclub/upload/archivo_historico/cassettes/Programas/WAV/polarCart.wav&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Tape 4&quot;&gt;Tape 4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Any help or advices for recovering the first two tapes and for identifying the language of the latter ones will be highly appreciated.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Tape 1 seems to have a copy of a Chess game called El Turco, with an unknown program called HEADER related to recording unprotected headers into tapes (?, I do not know what than can mean or be useful for). Link to its ROM:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://ftp.ea4rct.org/radioclub/upload/archivo_historico/cassettes/Programas/ROMs/HEADER.tzx&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Header&quot;&gt;HEADER.tzx&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Tape 2 is a damaged tape of LEMS TAPE RECORDER 5&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No special updates for either Tape 3 or Tape 4; unknown compuerts. They seem not to be for ZX80, ZX81, Spectrum, Amstrad CPC, Atari, MSX nor Apple II.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE 2:&lt;/strong&gt; Thank you very much for the support and the ideas! Now, all of the tapes have been either identified or restored but Tape 3.&lt;/p&gt;&#xA;&lt;p&gt;These days we are suffering some inconvenience with our FTP server, I am sorry. Here are some pictures of the wavform of that recording:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kf03N.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kf03N.png&quot; alt=&quot;Picture 1&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VqImO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VqImO.png&quot; alt=&quot;Picture 2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/by5tW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/by5tW.png&quot; alt=&quot;Picture 3&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It seems very strange to me that it does not seem to use any type of FSK modulation. Nevertheless, I hope this can help narrow down the different possibilities.&lt;/p&gt;&#xA;&lt;p&gt;Thank you again!&lt;/p&gt;&#xA;" OwnerUserId="4891" LastEditorUserId="4891" LastEditDate="2021-01-29T20:02:48.223" LastActivityDate="2021-01-29T20:02:48.223" Title="Identifying and recovering programs from tapes" Tags="&lt;software&gt;&lt;cassette-tape&gt;&lt;identify-this-software&gt;&lt;magnetic-tape&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17755" PostTypeId="1" AcceptedAnswerId="17757" CreationDate="2021-01-23T00:40:31.107" Score="4" ViewCount="143" Body="&lt;p&gt;I'd like to upgrade my Macintosh II to FDHD, I have a SWIM chip (to replace the WIM chip), but don't know how to burn the ROMS.&lt;/p&gt;&#xA;&lt;p&gt;The upgrade process I'm trying to do is described in the book: &amp;quot;Macintosh If Repair and Upgrade Secrets&amp;quot;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Installing an FDHD/ROM Upgrade into a Macintosh II&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The official Apple FDHD Macintosh II Upgrade Kit, pan number M0244, provides the five chips you need to get a 1.4 MB super drive working in an original Macintosh II. Table 8-2 provides a parts list with board references for various revisions of the Macintosh 11 logic board. Figure 8-3 shows the general area where the five chips are located.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Bxo4F.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Bxo4F.png&quot; alt=&quot;ROM/SWIM Locations&quot; /&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The current chip part numbers and board locations are&lt;/p&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Location&lt;/th&gt;&#xA;&lt;th&gt;Apple Part Number&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;U3&lt;/td&gt;&#xA;&lt;td&gt;342-0108-B&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;U4&lt;/td&gt;&#xA;&lt;td&gt;342-0107-B&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;U5&lt;/td&gt;&#xA;&lt;td&gt;342-0106-B&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;U6&lt;/td&gt;&#xA;&lt;td&gt;342-0105-B&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I'm not sure what type of EEPROMS are compatible, and how the image needs to be split across the  4 chips. The ROM chips I'm attempting to replace are&lt;/p&gt;&#xA;&lt;p&gt;I've tried looking around for previous attempts at this online, but haven't found any documentation about compatible EEPROMS or how to map the ROM file onto the 4 chips.&lt;/p&gt;&#xA;" OwnerUserId="20630" LastEditorUserId="20630" LastEditDate="2021-01-23T01:06:12.767" LastActivityDate="2021-01-23T08:24:32.587" Title="Macintosh II ROM Replacement" Tags="&lt;apple-macintosh&gt;&lt;rom&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17756" PostTypeId="2" ParentId="17754" CreationDate="2021-01-23T05:04:36.260" Score="4" Body="&lt;p&gt;A partial answer that I nevertheless hope contributes:&lt;/p&gt;&#xA;&lt;p&gt;It doesn’t sound like an Acorn machine because the data isn’t in chunks, and probably isn’t an Amstrad because that uses the same physical encoding as the Spectrum so the lead-in tone for samples 3 &amp;amp; 4 would be the same as for 1 &amp;amp; 2.&lt;/p&gt;&#xA;&lt;p&gt;By ear, my best guess for Tape 4 is a Commodore but I couldn’t tell you which — it sounds like each file is the same tones repeated twice with a very brief bridge, which is something Commodore did for error detection. Statistically the Commodore 64 is most likely based on sales figures.&lt;/p&gt;&#xA;&lt;p&gt;Tape 3 sounds like it’s for a different machine again, but I can’t quite place it. The ZX80 and ZX81 leave tiny pieces of silence between bytes, which I couldn’t discern, and the MSX sounds much closer to the Spectrum end of the scale with regards to harshness.&lt;/p&gt;&#xA;&lt;p&gt;Is there any chance it was an Oric saving in slow (/more reliable) mode? That uses collections of 4 or 8 cycles of tone at the same frequency, which would sound more like a soft babbling than the usual one or two cycles of higher baud rate schemes.&lt;/p&gt;&#xA;&lt;p&gt;Of course, there were almost as many micros as audio tapes, and I’m completely oblivious as to the encoding used on most of them; other options may be more relevant.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2021-01-23T05:04:36.260" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17757" PostTypeId="2" ParentId="17755" CreationDate="2021-01-23T07:50:31.967" Score="4" Body="&lt;p&gt;I'm not very familiar with Macintosh, so my answer is based on my general knowledge of the Motorola 68K architecture (like the 68020 that the Mac-II is based on).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;ROM content&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the &lt;a href=&quot;https://vintageapple.org/macbooks/pdf/Macintosh_II_Repair_and_Upgrade_Secrets_1991.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Repair and Upgrade guide (page 197)&lt;/a&gt;, the ROMs are refered to as&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;U3: Low ROM&lt;/li&gt;&#xA;&lt;li&gt;U4: Medium Low ROM&lt;/li&gt;&#xA;&lt;li&gt;U5: Medium High ROM&lt;/li&gt;&#xA;&lt;li&gt;U6: High ROM&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As the Mac-II is a 32-bit &amp;quot;big-endian&amp;quot; machine this would mean U3 contains bits 0-7 of every 32-bit word, U4 contains bits 8-15, U5 contains bits 16-23 and U6 contains bits 24-31.&lt;/p&gt;&#xA;&lt;p&gt;I'm not familiar with the way that Mac ROMs are distributed, but if you have a single ROM image file you should split it into 4 parts, with every first 8-bit byte going to the &amp;quot;low&amp;quot; ROM, every second byte going to the &amp;quot;medium low&amp;quot; ROM, every third byte going to the &amp;quot;medium high&amp;quot; ROM and every fourth byte going to the &amp;quot;high&amp;quot; ROM.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Original EPROMS&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://68kmla.org/forums/topic/61523-macintosh-ii-rom-type/&quot; rel=&quot;nofollow noreferrer&quot;&gt;first link in the comments&lt;/a&gt; together with the images of the motherboard indicate the original ROM chips are not EEPROMs but UV Erasable EPROMs of the 27XXX type. As the Mac-II ROM is 256KB in total, the ROMs should be 64KB each, indicating the EPROMs should be 27512s.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Replacement (E)EPROMs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you buy replacement 27C512s, make sure you get the &amp;quot;windowed&amp;quot; type as they can be erased and reprogrammed. UV Erasable EPROMS can only be reprogrammed after having been exposed to strong UV (-C) light.&lt;/p&gt;&#xA;&lt;p&gt;If you don't have a UV eraser that means that you get one shot at programming them correctly.&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&quot;https://68kmla.org/forums/topic/61523-macintosh-ii-rom-type/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt; it's suggested you could replace the 27XXXs with 28CXXX or 29CXXX with some simple modifications.&lt;/p&gt;&#xA;&lt;p&gt;However, replacement with Flash or EEPROM might not be easy, as any suitable replacement Flash (29C512) or EEPROMs (28C512) I've found have 32 pins and are not a direct replacement for a 27512, which has 28 pins.&lt;/p&gt;&#xA;&lt;p&gt;Replacement with electrically erasable 28/29 Flash/EEPROMs is technically certainly possible as most of the pins match with the &amp;quot;old&amp;quot; 27 type EEPROM, but you might have to build a separate custom PCB for this.&lt;/p&gt;&#xA;" OwnerUserId="15545" LastEditorUserId="15545" LastEditDate="2021-01-23T08:24:32.587" LastActivityDate="2021-01-23T08:24:32.587" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17758" PostTypeId="1" AcceptedAnswerId="17764" CreationDate="2021-01-23T13:28:12.983" Score="7" ViewCount="458" Body="&lt;p&gt;I have a console, but not the main computer it's designed to connect to.&lt;/p&gt;&#xA;&lt;p&gt;My goal is to interface this with a (Linux) PC, and hopefully more than just the keyboard. I have never tried something like this before.&lt;/p&gt;&#xA;&lt;p&gt;So, given that I only have one half of the pair, how can I figure out what's what? How can I figure out what to &lt;em&gt;send&lt;/em&gt; to it?&lt;/p&gt;&#xA;&lt;p&gt;I know that it uses an RS-422 connection, but I know neither the data rate, the protocol, nor any commands. The probability of finding such technical data is very low, although I have access to user-level documentation (and I remember at least some of the operations from having used it back in the day).&lt;/p&gt;&#xA;&lt;p&gt;I think I have a serial-to-usb converter, but that's probably for RS-232. I don't have (access to) an oscilloscope or signal analyzer, but I hope that some open source software exists...?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/lyrtm.png&quot; alt=&quot;Accom Axial console&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Further details: I asked &lt;a href=&quot;https://reverseengineering.stackexchange.com/questions/26849/advice-on-how-to-attack-my-first-reverse-engineering-project&quot;&gt;this&lt;/a&gt; over at Reverse Engineering, and it was suggested that you good folks may have tips.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; By the way, these are the chassis: The Display chassis on top of the Comms chassis (neither of which I have, or plan to acquire).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wGj6N.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wGj6N.jpg&quot; alt=&quot;Display and Comms chassis&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20634" LastEditorUserId="15334" LastEditDate="2021-01-25T17:30:44.647" LastActivityDate="2021-01-25T17:30:44.647" Title="Reverse engineering an RS-422 protocol with access to only one device?" Tags="&lt;serial&gt;&lt;old-hardware-adaptation&gt;&lt;reverse-engineering&gt;" AnswerCount="2" CommentCount="21" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17759" PostTypeId="1" CreationDate="2021-01-23T13:38:15.147" Score="5" ViewCount="241" Body="&lt;p&gt;&lt;strong&gt;Platform(s):&lt;/strong&gt; PC (Used to play on Windows 95/98)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Genre:&lt;/strong&gt; 2D Platformer, Puzzler, Indie, Overcome some square obstacles, Exit to door or portal next level (100 levels approx if not a bit less or more)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Estimated year of release:&lt;/strong&gt; 90s (Possibly more towards end of 90s early 2000s)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Graphics/art style:&lt;/strong&gt; Retro Squares like the world of Minecraft, brown squares and snow squares(Mainly tiny pixel squares and some big)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Notable characters:&lt;/strong&gt; You play as a grey robot&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Notable gameplay mechanics:&lt;/strong&gt; You move left to right, maybe jump and possibly use a grappler hook. You could place puzzle pieces in water but the robot died when he touched the water. I'm not sure whether the robot would start walking right after you placed all the elements or if you had to click something for him to start walking. Basically the robot was on the left side and you had to build a way for him to get to the right side. I think that the pieces fell from the sky like in tetris and you had to place every piece in the right place to make a way for the robot. There were also elevators there and maybe teleports. There were also passwords that you got at each level so you could go to that level directly next time you played instead of starting new game everytime.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Other details:&lt;/strong&gt; I really hope someone knows! I've not known the name of the game and haven't played in 20 years! I have found other 2D Robot platform games but none matched so this is going to be a tricky find! You play as a robot, I think you start from the left of the screen, and have to exit to the right! The game was simple, so you can move and jump over square obstacles! As the levels progress they got more tricky, and you had to dodge and move over more square obstacles, and square brown levels eventually became snow levels, so maybe cause the robot to slide. Maybe you used a grappler hook to dodge/move quicker. Any ideas anyone? Thanks in advance! :)&lt;/p&gt;&#xA;" OwnerUserId="20635" LastEditorUserId="20635" LastEditDate="2021-01-26T09:54:49.487" LastActivityDate="2021-01-26T09:54:49.487" Title="PC 90s 2D Platformer Puzzler Indie Exit Levels With Robot" Tags="&lt;gaming&gt;&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17760" PostTypeId="2" ParentId="17759" CreationDate="2021-01-23T13:45:38.283" Score="1" Body="&lt;p&gt;There are a lot of MS-DOS tile based puzzle shareware games but this sounds a lot like &lt;strong&gt;Hubie&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gNcc3.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gNcc3.gif&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You play a little alien that has to navigate a block-based world with items like vines, bricks, dynamite and head to an exit.&lt;/p&gt;&#xA;&lt;p&gt;Hubie can move left-right, jump up a single tile and helicopter over single tile gaps.&lt;/p&gt;&#xA;" OwnerUserId="20636" LastActivityDate="2021-01-23T13:45:38.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17761" PostTypeId="2" ParentId="17758" CreationDate="2021-01-23T15:41:54.703" Score="6" Body="&lt;p&gt;Options:&lt;/p&gt;&#xA;&lt;p&gt;(1) Googling &amp;quot;Accom axial&amp;quot; finds various people who bought it, made Youtube reviews etc. If these are not you, contact them and see if they have details.&lt;/p&gt;&#xA;&lt;p&gt;(2) As has been mentioned in the comments, you need a RS422 (not RS232) adapter, e.g. to USB. The cheapest I found after a quick search is 20 EUR.&lt;/p&gt;&#xA;&lt;p&gt;(3) You can often find the serial parameters by trying out the most often used ones. Press keys and see if you get anything. Having a scope etc. helps, but trial and error is a good substitute.&lt;/p&gt;&#xA;&lt;p&gt;(4) Once you've seen what every keypress produces, make a list and compare them with the ones from known terminals. The &lt;code&gt;termcap&lt;/code&gt; library can help. If you find similar ones, then&lt;/p&gt;&#xA;&lt;p&gt;(5) you can guess what you can &lt;em&gt;send&lt;/em&gt; to the terminal. Again, do trial and error: send a few things and see what you get back. If there's some kind of negative acknowledge for a sequence that's not understood, then even better.&lt;/p&gt;&#xA;&lt;p&gt;Looks like a fun project.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-01-23T15:41:54.703" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17763" PostTypeId="2" ParentId="17734" CreationDate="2021-01-23T16:33:38.707" Score="3" Body="&lt;p&gt;Assembler requires more intimate knowledge of the hardware you're using than other languages like C or Java. The truth is, though, assembler has been in use in almost everything from the first computerized cars, early video game systems up through the 1990's, up to the Internet-of-Things devices we use today.&lt;/p&gt;&#xA;&lt;p&gt;While C offered type safety, it still didn't offer other safety measures like void pointer checking or bounded arrays (at least, not without extra code). It was quite easily to write a program that would crash and burn as well as any assembler program.&lt;/p&gt;&#xA;&lt;p&gt;Tens of thousands of video games were written in assembler, &lt;a href=&quot;http://catb.org/jargon/html/C/compo.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;compos&lt;/a&gt; to write small yet impressive demos in only a few kilobytes of code/data for decades now, thousands of cars still use some form of assembler today, as well as a few lesser-known operating systems (e.g. &lt;a href=&quot;http://menuetos.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MenuetOS&lt;/a&gt;). You might have dozens or even hundreds of things in your house that were programmed in assembler that you don't even know about.&lt;/p&gt;&#xA;&lt;p&gt;The main problem with assembly programming is that you need to plan more vigorously than you do in a language like C. It's perfectly possible to write a program with even 100k lines of code in assembler without a single bug, and it's also possible to write a program with 20 lines of code that has 5 bugs.&lt;/p&gt;&#xA;&lt;p&gt;It's not the tool that's the problem, it's the programmer. I would say that memory corruption was a common problem in early programming in general. This was not limited to assembler, but also C (which was notorious for leaking memory and accessing invalid memory ranges), C++, and other languages where you could directly access memory, even BASIC (which had the ability to read/write specific I/O ports on the CPU).&lt;/p&gt;&#xA;&lt;p&gt;Even with modern languages that do have safe-guards, we will see programming errors that crash games. Why? Because there's not enough care taken into designing the application. Memory management hasn't disappeared, it's been tucked into a corner where it's harder to visualize, causing all kinds of random havoc in modern code.&lt;/p&gt;&#xA;&lt;p&gt;Virtually every language is susceptible to various kinds of memory corruption if used incorrectly. Today, the most common problem are memory leaks, which are easier than ever to accidentally introduce due to closures and abstractions.&lt;/p&gt;&#xA;&lt;p&gt;It's unfair to say that assembler was inherently more or less memory-corrupting than other languages, it just got a bad rap because of how challenging it was to write proper code.&lt;/p&gt;&#xA;" OwnerUserId="2059" LastActivityDate="2021-01-23T16:33:38.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17764" PostTypeId="2" ParentId="17758" CreationDate="2021-01-24T13:51:45.107" Score="11" Body="&lt;p&gt;I posted a comment on the reverse-engineering Q&amp;amp;A you linked before I realized it'd do better as an answer here.&lt;/p&gt;&#xA;&lt;p&gt;The answerer there found that googling Accom and Axial from your photo turns up a series of video editing controllers, and documentation for a DE-9 connector.&lt;/p&gt;&#xA;&lt;p&gt;If it's an editing controller running RS-422 over DE-9, it's almost certainly &lt;a href=&quot;https://en.wikipedia.org/wiki/9-Pin_Protocol&quot; rel=&quot;noreferrer&quot;&gt;Sony 9-Pin Protocol&lt;/a&gt; (A.K.A. P1 Protocol)... especially since the pinouts seem to match.&lt;/p&gt;&#xA;&lt;p&gt;According to the Wikipedia page, it was a &lt;em&gt;de facto&lt;/em&gt; standard in the broadcast industry until Ethernet replaced it, and &amp;quot;The communication parameters are 38,400 baud, 8 data bits, odd parity and 1 stop bit (38k4/8O1)&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;It also links to &lt;a href=&quot;ftp://ftp.jurassic.nl/mirrors/ftp.sgi.com/sgi/video/rld/vidpage/s9pinnt.html&quot; rel=&quot;noreferrer&quot;&gt;this document&lt;/a&gt; which describes the communication protocol that actually runs over the serial link if you just want to get things working with minimal effort.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2021-01-24T13:51:45.107" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="17765" PostTypeId="2" ParentId="17734" CreationDate="2021-01-24T14:26:26.947" Score="2" Body="&lt;p&gt;I did a few years of assembler programming, followed by decades of C. Assembler programs did not seem to have more bad pointer bugs than C, but a significant reason for that was that assembler programming is comparatively slow work.&lt;/p&gt;&#xA;&lt;p&gt;The teams I was in wanted to test their work every time they'd written an increment of functionality, which was typically every 10-20 assembler instructions. In higher-level languages, you typically test after a similar number of lines of code, which have a lot more functionality. That trades off against the safety of a HLL.&lt;/p&gt;&#xA;&lt;p&gt;Assembler stopped being used for large-scale programming tasks because it gave lower productivity, and because it usually wasn't portable to other kinds of computer. In the last 25 years I've written about 8 lines of assembler, and that was to generate error conditions for testing an error handler.&lt;/p&gt;&#xA;" OwnerUserId="3481" LastActivityDate="2021-01-24T14:26:26.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17766" PostTypeId="2" ParentId="17749" CreationDate="2021-01-24T15:49:12.237" Score="1" Body="&lt;p&gt;After some serious debugging I was able to pinpoint the problem to IP header checksum. I had hardware acceleration turned on for the checksum header calculation. Because of this the IP packets were created with a &lt;code&gt;0x0000&lt;/code&gt; checksum. WarpCopy64 was ignoring all the correct messages because of this. I was able to remedy the issue by turning of &lt;em&gt;IPv4 Checksum Offload&lt;/em&gt; in my network interface card settings. There is a Stack Overflow &lt;a href=&quot;https://stackoverflow.com/questions/11433936/what-can-cause-ip-header-checksums-to-not-be-calculated-for-udp-datagrams&quot;&gt;thread&lt;/a&gt; explaining the problem in greater detail. Would be nice if there was some way to make the loopback device work. Turning off the offload is an ugly workaround that lets me use external network for an internal connection.&lt;/p&gt;&#xA;&lt;p&gt;One thing to note is that I was able to reach the server with Nping &lt;em&gt;before&lt;/em&gt; I turned off the offloading. Here is the command &lt;code&gt;nping 192.168.0.64 -c 1 --udp -p 6644 --data \xc9\x0f\xda\xa2\x01&lt;/code&gt; that I used. I believe this works since nping builds raw network packets bit by bit ignoring available high level APIs.&lt;/p&gt;&#xA;" OwnerUserId="20628" LastEditorUserId="20628" LastEditDate="2021-01-24T16:15:58.527" LastActivityDate="2021-01-24T16:15:58.527" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17767" PostTypeId="2" ParentId="2316" CreationDate="2021-01-24T18:15:55.987" Score="0" Body="&lt;p&gt;To amplify on previous fine answers and also comments (e.g., @Whit3rd) - the stuff at one end or the other - or even &lt;em&gt;both&lt;/em&gt; ends - of an RS-232 connection weren't necessarily smart enough to run an error-detecting protocol that layered block parity or CRCS on top of data, like Kermit or even XModem.  RS-232 was standardized ~1960, about 10 years before the first UART-on-a-chip became available.  The communication stuff at both ends was built from discrete components - and, typically, the interesting stuff that was using the RS-232 line to communicate was too, and it didn't have to have any computing power (as we know it today) at all.  (Specifically: Much of that equipment had no &lt;em&gt;software&lt;/em&gt; of any kind: You wanted something done, you wired up transistors and such.)  Parity gave them &lt;em&gt;something&lt;/em&gt; for communication error detection that everyone could agree on and everyone could build.&lt;/p&gt;&#xA;" OwnerUserId="332" LastActivityDate="2021-01-24T18:15:55.987" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17768" PostTypeId="1" AcceptedAnswerId="17769" CreationDate="2021-01-24T22:30:33.327" Score="6" ViewCount="160" Body="&lt;p&gt;Having disabled BASIC and Kernal routines I &lt;a href=&quot;https://codebase64.org/doku.php?id=base:introduction_to_raster_irqs&quot; rel=&quot;noreferrer&quot;&gt;set up an IRQ&lt;/a&gt; to run the following code when the raster line reaches 200:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.irq1&#xA;&#xA;    inc 53280  // change border colour&#xA;    &#xA;//  lda #$ff   // clear the VIC2 interrupt condition&#xA;//  sta $d019 &#xA;&#xA;    asl $D019  // alternative way to clear the VIC2 interrupt condition&#xA;&#xA;    rti&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which works, but I'm having difficulty chaining two IRQ's so that the border has a short band of a single colour. For example, the following does not work:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.irq1&#xA;&#xA;    lda #0&#xA;    sta 53280&#xA;&#xA;    lda #120     // this is how to tell at which rasterline we want the irq to be triggered&#xA;    sta $d012&#xA;&#xA;    lda #lo(irq2)  // this is how we set up&#xA;    sta $fffe           // the address of our interrupt code&#xA;    lda #hi(irq2)&#xA;    sta $ffff&#xA;&#xA;    asl $D019 &#xA;&#xA;    rti&#xA;&#xA;.irq2&#xA;&#xA;    lda #1&#xA;    sta 53280&#xA;&#xA;    lda #100     // this is how to tell at which rasterline we want the irq to be triggered&#xA;    sta $d012&#xA;&#xA;    lda #lo(irq1)  // this is how we set up&#xA;    sta $fffe           // the address of our interrupt code&#xA;    lda #hi(irq1)&#xA;    sta $ffff&#xA;&#xA;    asl $D019 &#xA;&#xA;    rti&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I thought maybe I had to set the interrupt disable flag &lt;code&gt;sei&lt;/code&gt; and then clear it &lt;code&gt;cli&lt;/code&gt; again (since I'm altering the interrupt details) but certain combinations of this did not work. Can anyone help with this?&lt;/p&gt;&#xA;&lt;p&gt;For completion, here is the interrupt set up code as requested by @Retrograde:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    sei&#xA;&#xA;    lda #$7f&#xA;    sta $dc0d  // disable timer interrupts which can be generated by the two CIA chips&#xA;    sta $dd0d  // the kernal uses such an interrupt to flash the cursor and scan the keyboard, so we better&#xA;               // stop it.&#xA;               &#xA;    lda $dc0d  // by reading this two registers we negate any pending CIA irqs.&#xA;    lda $dd0d  // if we don't do this, a pending CIA irq might occur after we finish setting up our irq.&#xA;               // we don't want that to happen.&#xA;&#xA;    lda #$01   // this is how to tell the VICII to generate a raster interrupt&#xA;    sta $d01a&#xA;    &#xA;    lda #100     // this is how to tell at which rasterline we want the irq to be triggered&#xA;    sta $d012&#xA;    &#xA;    lda #$1b   // as there are more than 256 rasterlines, the topmost bit of $d011 serves as&#xA;    sta $d011  // the 9th bit for the rasterline we want our irq to be triggered.&#xA;               // here we simply set up a character screen, leaving the topmost bit 0.&#xA;&#xA;    lda #$35   // we turn off the BASIC and KERNAL rom here&#xA;    sta $01    // the cpu now sees RAM everywhere except at $d000-$e000, where still the registers of&#xA;               // SID/VICII/etc are visible&#xA;               &#xA;    lda #lo(irq1)  // this is how we set up&#xA;    sta $fffe  // the address of our interrupt code&#xA;    lda #hi(irq1)&#xA;    sta $ffff&#xA;&#xA;    cli        // enable maskable interrupts again&#xA;&#xA;.infiniteLoop&#xA;    jmp infiniteLoop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16295" LastEditorUserId="16295" LastEditDate="2021-01-25T09:28:39.710" LastActivityDate="2021-01-25T09:28:39.710" Title="Chaining IRQ's with BASIC &amp; Kernal routines turned off" Tags="&lt;commodore-64&gt;&lt;programming&gt;&lt;6502&gt;&lt;interrupt&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17769" PostTypeId="2" ParentId="17768" CreationDate="2021-01-24T23:18:57.900" Score="5" Body="&lt;p&gt;The general principle of what you're doing would seem to be correct.&lt;/p&gt;&#xA;&lt;p&gt;I would add, though, that unless you're doing anything outside the interrupts except spinning, you would need to save and restore processor registers to ensure the interrupt handlers to not mess with that code.&lt;/p&gt;&#xA;&lt;p&gt;In fact, that part, outside the interrupt handlers, is what you'd typically refer to as the main loop, these handlers are not loops.&lt;/p&gt;&#xA;&lt;p&gt;The devil's in the details, so I suggest you post your entire code so that we can see how you set up the raster interrupt and what you do when not in an interrupt.&lt;/p&gt;&#xA;&lt;p&gt;Here's the full text of a working example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    sei&#xA;    lda #$7f&#xA;    sta $dc0d&#xA;    sta $dd0d&#xA;    lda $dc0d   // ack any pending&#xA;    lda $dd0d   // CIA irqs&#xA;    lda #$01&#xA;    sta $d01a&#xA;    lda #100   // scan line of initial irq&#xA;    sta $d012&#xA;    lda #$1b&#xA;    sta $d011&#xA;    lda #$35   // mask out BASIC/KERNAL ROMs&#xA;    sta $01&#xA;    lda #&amp;lt;irq1 // initial irq&#xA;    sta $fffe&#xA;    lda #&amp;gt;irq1 // vector&#xA;    sta $ffff&#xA;    cli&#xA;spin:&#xA;    jmp spin&#xA;&#xA;irq1:   // Note, interrupts are already disabled at this point (CPU does that after saving processor state)&#xA;&#xA;    pha // if you are going to be doing anything outside the irq except spinning&#xA;    txa // you need to save CPU register state&#xA;    pha&#xA;    tya&#xA;    pha&#xA;&#xA;    lda #1    // white&#xA;    sta $d020&#xA;    sta $d021&#xA;&#xA;    lda #120  // scanline of next irq&#xA;    sta $d012&#xA;&#xA;    lda #&amp;lt;irq2 // next irq&#xA;    sta $fffe&#xA;    lda #&amp;gt;irq2 // vector&#xA;    sta $ffff&#xA;&#xA;    inc $d019 // acknowledge irq&#xA;&#xA;    pla // restore register state&#xA;    tay&#xA;    pla&#xA;    tax&#xA;    pla&#xA;    rti // restore processor state and return from irq&#xA;&#xA;irq2:&#xA;    pha&#xA;    txa&#xA;    pha&#xA;    tya&#xA;    pha&#xA;&#xA;    lda #0    // black&#xA;    sta $d020&#xA;    sta $d021&#xA;&#xA;    lda #100  // scanline of previous irq&#xA;    sta $d012&#xA;&#xA;    lda #&amp;lt;irq1 // previous irq&#xA;    sta $fffe&#xA;    lda #&amp;gt;irq1 // vector&#xA;    sta $ffff&#xA;&#xA;    inc $d019&#xA;&#xA;    pla&#xA;    tay&#xA;    pla&#xA;    tax&#xA;    pla&#xA;    rti&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LGm7W.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LGm7W.png&quot; alt=&quot;Showing a white bar on a black screen&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2021-01-24T23:24:19.617" LastActivityDate="2021-01-24T23:24:19.617" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17770" PostTypeId="2" ParentId="11499" CreationDate="2021-01-24T23:25:29.587" Score="2" Body="&lt;p&gt;There are already many good answers here, but I just wanted to add that &lt;a href=&quot;https://www.gnu.org/software/bash/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bash&lt;/a&gt; in version 4 introduced the &lt;code&gt;|&amp;amp;&lt;/code&gt; and &lt;code&gt;&amp;amp;&amp;gt;&lt;/code&gt; operators to &amp;quot;merge&amp;quot; the two streams.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;|&amp;amp;&lt;/code&gt; combines stderr and stdout and sends them both to stdout:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; $ curl -v example.com |&amp;amp; grep text/html&#xA; &amp;lt; Content-Type: text/html; charset=UTF-8&#xA;     &amp;lt;meta http-equiv=&amp;quot;Content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;&amp;amp;&amp;gt;&lt;/code&gt; combines stderr and stdout and redirects them both to file:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; $ curl -v example.com &amp;amp;&amp;gt; /dev/null&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="20286" LastActivityDate="2021-01-24T23:25:29.587" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17771" PostTypeId="2" ParentId="6051" CreationDate="2021-01-24T23:29:05.987" Score="4" Body="&lt;p&gt;Just ran on the same issue and the answers above did not help so my 5 cents...&lt;/p&gt;&#xA;&lt;p&gt;So far it seems to me that the easiest way to deal with it is to use a simple script like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#!/bin/bash&#xA;[ ! -f &amp;quot;$1&amp;quot; ] &amp;amp;&amp;amp; { echo &amp;quot;usage: $0 filename.txt&amp;quot; ; exit 1; }&#xA;tr A-Z a-z &amp;lt; &amp;quot;$1&amp;quot; | petcat -w -2 -o &amp;quot;$1.prg&amp;quot; --&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;so basically lowercase the file and use the &lt;code&gt;petcat&lt;/code&gt; tool that comes with VICE.&#xA;The &lt;code&gt;.prg&lt;/code&gt; file can be eg. copied on a &lt;code&gt;.d64&lt;/code&gt; (on Linux, FreeBSD eg. with &lt;code&gt;c1541&lt;/code&gt; or even &lt;code&gt;mc&lt;/code&gt;, assuming that the prior is available in the system...) and loaded inside an emulator as usual (in VICE such a &lt;code&gt;.prg&lt;/code&gt; file can be loaded directly).&lt;/p&gt;&#xA;&lt;p&gt;Another way is just copy/pasting the text using the standard system's buffer - it works with VICE. I tried it but I find it not very comfortable (and it also requires lowercasing - otherwise the pasted code is a mess, the characters change into graphical petscii symbols...).&lt;/p&gt;&#xA;&lt;p&gt;Btw. it is a pity that VICE does not provide a nice built-in solution like some other emulators (FS-UAE, Atari800, Hatari, ...) which allow to have a local directory with normal text files that can be loaded directly to the emulator like from a native disk image (or a hard disk), doing all the conversions on the fly. It would make things a lot easier and save time.&lt;/p&gt;&#xA;&lt;p&gt;Hope it helps.&lt;/p&gt;&#xA;" OwnerUserId="15303" LastEditorUserId="15303" LastEditDate="2021-01-25T15:08:49.303" LastActivityDate="2021-01-25T15:08:49.303" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17773" PostTypeId="2" ParentId="11137" CreationDate="2021-01-25T07:23:16.397" Score="1" Body="&lt;p&gt;I also am resurrecting my C64 and have experienced the same problem after the power supply has been up at least 30 minutes. The power led is powered by the 5 volt DC supply from the power brick, not the 9 VAC side of the power brick. I opened the C64 case and using a voltmeter measured 5 volts DC on half of the switch contacts. Flipping the switch on, the 5 volts DC dropped to 2 volts (power led on weakly). If I carefully turn the switch towards off, but not off and return to the on position the 5 volts is present on the switch contacts and the system boots up. For my C64, the problem is not the switch or contacts or poor solder joints, but the power supply itself.&lt;/p&gt;&#xA;&lt;p&gt;On my C64 the 5 volts DC at the switch was 5.21 volts with the unit booted up. From reading other articles the voltage is too high and an indicator the power supply is failing. Am replacing it. Good luck&lt;/p&gt;&#xA;" OwnerUserId="20646" LastActivityDate="2021-01-25T07:23:16.397" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17774" PostTypeId="1" AcceptedAnswerId="17776" CreationDate="2021-01-25T08:57:20.997" Score="2" ViewCount="204" Body="&lt;p&gt;The &lt;a href=&quot;https://dl.acm.org/doi/10.1145/1455533.1455556&quot; rel=&quot;nofollow noreferrer&quot;&gt;TX-0&lt;/a&gt; has a class of instructions very similar to the PDP-style microprogrammed, operation instructions. Fill the opcode field with all ones, and then select which microoperations you want to execute by setting the relevant bits in the rest of the instruction word. Of interest to this question are &lt;code&gt;P6H&lt;/code&gt; and &lt;code&gt;P7H&lt;/code&gt;, or &amp;quot;punch six holes&amp;quot; and &amp;quot;punch seven holes&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;So six spaces in the punchtape come from the accumulator, and the last space in the punchtape come from the instruction word. And for extra weirdness, the six spaces that come from the accumulator are not contiguous, but are bits 2, 5, 8, 11, 14 and 17. I happened to notice that these are shifted one to the left of the bits that are read in, so that to copy a tape, ignoring hole 7, would be something like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;until end of tape&lt;/li&gt;&#xA;&lt;li&gt;read a word&lt;/li&gt;&#xA;&lt;li&gt;rotate left&lt;/li&gt;&#xA;&lt;li&gt;punch six holes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So my question here is basically &amp;quot;what's going on&amp;quot;; wouldn't it make more sense to read the tape into the lowest bits of the accumulator, so that you basically get a more sensible, 6-bit datatype? Or, wouldn't it make sense to read in the same bits that get punched out? And apparently the significance of this seventh hole is that the tape reader ignores any word with the seventh hole punched out. I guess it's useful if you make a mistake, but why would you punch a word, saying &amp;quot;ignore this word&amp;quot;?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-01-25T19:12:03.323" LastActivityDate="2021-01-25T19:12:03.323" Title="What's with the TX-0 punchtape instructions?" Tags="&lt;storage&gt;&lt;early-computer&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17776" PostTypeId="2" ParentId="17774" CreationDate="2021-01-25T13:19:04.223" Score="2" Body="&lt;p&gt;The 'every third bit' consideration arises from the mode in which one  instruction can read three tape lines.  The bits from the tape end up 'interleaved' in the AC.  I suppose the single shift between characters requires less electronics (or time?) than a 6-bit shift would do.&lt;/p&gt;&#xA;&lt;p&gt;See for example the description of 'read in mode' in &lt;a href=&quot;http://www.bitsavers.org/pdf/mit/tx-0/6M-4789-1_TX0_funcDescr.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this memo&lt;/a&gt;. Admittedly this is the MIT-modified TX-0 rather than the original configuration, but I would guess it applies to the original.&lt;/p&gt;&#xA;&lt;p&gt;As far as the necessity to shift the input in the AC in order to copy tape, the &lt;a href=&quot;http://www.bitsavers.org/pdf/mit/tx-0/6M-4789-1_TX0_funcDescr.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;instruction set summary&lt;/a&gt; explicitly lists the combination required to 'read tape and cycle AC' in one operate instruction, so there is no additional instruction needed.&lt;/p&gt;&#xA;&lt;p&gt;Somewhere I read that the photoelectric reader ignores tape that &lt;strong&gt;does not&lt;/strong&gt; have the 7th hole punched, so that explains the need for the punch-7-holes instruction.  Possibly the reader uses channel 7 for framing the input.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-01-25T13:19:04.223" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17777" PostTypeId="2" ParentId="2316" CreationDate="2021-01-25T18:00:06.337" Score="1" Body="&lt;p&gt;Parity is generally used with unidirectional transmission where a recipient who observes an error would be able to take into account that the received data might be incorrect.  When used with teleprinters, a parity error would often cause an &amp;quot;error&amp;quot; character to be printed in place of some other character.  If, for example, there was a newswire story about Betty Smith, but bit 2 of the second character of her name got corrupted, use of parity would cause the name to be printed as B_tty Smith, B?tty Smith, B█tty Smith, or something similar, rather than as Batty Smith, thus reducing the likelihood of a human typesetter committing the error to print.&lt;/p&gt;&#xA;&lt;p&gt;The most recent use of parity I can think of within a half-duplex streaming transmission protocol is with the Closed Captioning data encoded in US television signals, which will generally cause characters received with incorrect parity to appear as block characters.  Interestingly, closed captioning data features a form of forward error correction: certain special characters including formatting codes are sent as a pair of bytes on a frame (each frame has two bytes, each with its own parity bit), but if the same pair of special characters is received on two consecutive frames, receivers will ignore the second.  If a special character needs to be shown twice (e.g. the ♪♪ at the end of a singing section) it will be transmitted four times.  If a parity error occurs on any one of those, the result will be that a receiver will end up receiving three note characters and ignoring one (rather than two), thus correctly showing two.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-01-25T18:00:06.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17778" PostTypeId="2" ParentId="2103" CreationDate="2021-01-26T19:08:46.253" Score="1" Body="&lt;p&gt;Another interesting price in &lt;a href=&quot;https://worldradiohistory.com/Archive-Poptronics/80s/1980/Poptronics-1980-01.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;january 1980&lt;/a&gt; page 103 :&lt;/p&gt;&#xA;&lt;p&gt;CM6571 128 X 9 X 7 ASCII Shifted with Greek $13.50&#xA;It was a preburn ROM, so it's the scale of price of a 8 kilobit ROM.&#xA;So, if you were a game maker, you could imagine the price of you preburn ROM.&lt;/p&gt;&#xA;" OwnerUserId="18956" LastActivityDate="2021-01-26T19:08:46.253" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17780" PostTypeId="2" ParentId="6693" CreationDate="2021-01-27T17:23:43.953" Score="1" Body="&lt;p&gt;Aside from the DOS world, there are several UNIX-like systems that fit on an 8086 PC platform.  Minix 2.0 in particular comes to mind, and I do know it can run on the HP 200LX.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/MINIX&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/MINIX&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2021-01-27T17:23:43.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17781" PostTypeId="2" ParentId="6693" CreationDate="2021-01-28T02:54:57.473" Score="1" Body="&lt;p&gt;DESQView is probably the best answer, but if you were often online back in the early '90s, you might have used &lt;a href=&quot;https://archive.org/details/msdos_festival_TM421-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Telemate&lt;/a&gt; and its multitasking abilities.&lt;/p&gt;&#xA;&lt;p&gt;Telemate is mainly a terminal emulator, but you could run DOS commands even while transferring a file. It worked best with a mouse. &lt;a href=&quot;https://www.youtube.com/watch?v=nOx9fLBJO1w&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a short demonstration video.&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2021-01-28T02:54:57.473" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17782" PostTypeId="2" ParentId="2008" CreationDate="2021-01-28T14:48:36.057" Score="3" Body="&lt;p&gt;To add to the above, there was a book that I had as a teenager, published in 1966&lt;/p&gt;&#xA;&lt;p&gt;We built our own computers by A.B.Bolt et al.  ISBN 9780521093781.&lt;/p&gt;&#xA;&lt;p&gt;You can view some of the pages here &lt;a href=&quot;https://books.google.co.uk/books/about/We_built_our_own_computers.html?id=aQ84AAAAIAAJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://books.google.co.uk/books/about/We_built_our_own_computers.html?id=aQ84AAAAIAAJ&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Yes, people did wire up components to make computers prior to 1971.  These are more purpose built computers like the BOMBE.  They show you how to join up bits of circuitry and work out the logic - more or less what you do in Verilog or VHDL on an FPGA nowadays but this was with physical wires and it was done by schoolkids: part of the School Maths Project in the UK.  There is one that plays noughts and crosses in the book.&lt;/p&gt;&#xA;&lt;p&gt;A.B.Bolt was the supervisor.  The book was actually written by sixth-formers.&lt;/p&gt;&#xA;&lt;p&gt;I didn't build anything from the book as I didn't have access to many of the components.  What it did teach me was binary logic and how it was manipulated.  For a 12 year old who'd only ever done BODMAS, manipulating binary logic was absolutely fascinating.  It was also the first time I'd learnt something completely new from a book.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastEditorUserId="5311" LastEditDate="2021-01-28T21:42:59.143" LastActivityDate="2021-01-28T21:42:59.143" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17783" PostTypeId="2" ParentId="15493" CreationDate="2021-01-29T19:09:44.740" Score="7" Body="&lt;p&gt;I used a DG Nova at Agriculture Canada from 1973 to about 1977, when a DG Eclipse&#xA;was put in. My &amp;quot;Compact numerical methods for computers&amp;quot; book was written using this, and appeared in February 1979 and is still in print (2nd Edition 1990).&#xA;Recently started work on cleaning up codes and making sure they still run (some are embedded in e.g., R).&#xA;&lt;a href=&quot;https://github.com/pcolsen/Nash-Compact-Numerical-Methods&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/pcolsen/Nash-Compact-Numerical-Methods&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I found this while looking to see if I could find out more about DG BASIC and how it was set up .&lt;/p&gt;&#xA;&lt;p&gt;JN&#xA;profjcnash &lt;em&gt;at&lt;/em&gt; gmail.com&lt;/p&gt;&#xA;" OwnerUserId="20672" LastActivityDate="2021-01-29T19:09:44.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17784" PostTypeId="1" CreationDate="2021-01-30T15:14:34.873" Score="10" ViewCount="710" Body="&lt;p&gt;While reading about the SuperPET I just recalled another PET modification. My uni had an 11/780 that I learned FORTRAN on. It used modified PETs as input terminals.&lt;/p&gt;&#xA;&lt;p&gt;This took the form of a modified version of BASIC, I think. You would type in the program using the PETs existing editor, line numbers and all, and then use a special command to run it (SEND? COMPILE?). This would cause the PET to pretend to be a card reader, sending the code line-by-line to the VAX, which would respond on a DECwriter in the hallway.&lt;/p&gt;&#xA;&lt;p&gt;I suspect the system was not something built locally, so I'm curious if anyone is familiar with this modification?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastEditorUserId="6794" LastEditDate="2021-02-03T19:11:38.387" LastActivityDate="2021-02-03T19:11:38.387" Title="PET as a terminal" Tags="&lt;terminal&gt;&lt;commodore-pet&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17785" PostTypeId="2" ParentId="17784" CreationDate="2021-01-30T16:19:09.727" Score="12" Body="&lt;p&gt;I don't have any experience with the exact modification you are talking about. However, I think it is a relevant point that the design of the firmware for Commodore microcomputers included a &amp;quot;screen editor&amp;quot; as a separate bit of software from the BASIC interpreter. As far as I know, all the CBM 8-bit machines had this design.&lt;/p&gt;&#xA;&lt;p&gt;So, it is very possible for any software running on these machines to make use of the firmware's screen editor for its data entry. You could even replace the BASIC interpreter in the ROM with something else, as you describe, and the data entry &amp;quot;environment&amp;quot; would behave the same as far as moving the cursor around the screen and inputting lines of code in some other language. Your replacement firmware would need to provide a minimal set of functionality:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Capture the data entry to a RAM buffer&lt;/li&gt;&#xA;&lt;li&gt;Allow the user to scroll the data displayed on the screen forward and backward in the buffer, OR, have an interactive command that redraws a portion of the buffer on screen.&lt;/li&gt;&#xA;&lt;li&gt;Have a command that outputs the RAM buffer to some peripheral, like an RS-232 serial port, or a save file on disk.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;It may also be worth noting that Commodore produced several enhancements to the screen editor firmware over the life of their 8-bit product line. The editor built into the Commodore 128 is probably the most advanced version. It even included primitive support for multiple windows on the screen that can be scrolled independently. Here is the public API that is available in the C128's editor.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;;////////////////   E D I T O R     J U M P     T A B L E   \\\\\\\\\\\\\\\\\&#xA;&#xA;jmp cint    ;initialize editor &amp;amp; screen&#xA;jmp disply  ;display character in .a, color in .x&#xA;jmp lp2     ;get a key from irq buffer into .a&#xA;jmp loop5   ;get a chr from screen line into .a&#xA;jmp print   ;print character in .a&#xA;jmp scrorg  ;get size of current window (rows,cols) in .x, .y&#xA;jmp scnkey  ;scan keyboard subroutine&#xA;jmp repeat  ;repeat key logic &amp;amp; 'ckit2' to store decoded key&#xA;jmp plot    ;read or set (.c) cursor position in .x, .y&#xA;jmp cursor  ;move 8563 cursor subroutine&#xA;jmp escape  ;execute escape function using chr in .a&#xA;jmp keyset  ;redefine a programmable function key&#xA;jmp irq     ;irq entry&#xA;jmp init80  ;initialize 80-column character set&#xA;jmp swapper ;swap editor local variables (40/80 mode change)&#xA;jmp window  ;set top left or bottom right (.c) of window&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-01-30T16:26:33.633" LastActivityDate="2021-01-30T16:26:33.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17788" PostTypeId="1" AcceptedAnswerId="17795" CreationDate="2021-01-31T09:59:14.883" Score="1" ViewCount="325" Body="&lt;p&gt;Not sure if retro is proper place... I have two old notebooks with x86 processors in the 100s range of MHz. While nostalgics might appreciate them, I'm wondering if there is any proper point in keeping them. The hardware is modern enough such that to the best of my knowledge nothing would exclusively run on them but not on a current PC, whereas using them for modern applications sounds like a horrible idea in terms of energy efficiency. But just disposing of them (properly, of course) also sounds like pity... So what are, objectively, the best options?&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2021-02-01T13:17:07.997" Title="What to do with stone age x86 computers?" Tags="&lt;hardware&gt;&lt;x86&gt;" AnswerCount="1" CommentCount="14" ClosedDate="2021-01-31T20:12:10.373" ContentLicense="CC BY-SA 4.0" />
  <row Id="17790" PostTypeId="1" AcceptedAnswerId="17796" CreationDate="2021-01-31T13:49:06.353" Score="12" ViewCount="1737" Body="&lt;p&gt;I tried this code in my assembler, set to 16 bit mode:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;bits 16&#xA;rep mov ds, ax&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Surprisingly, no error was thrown. Is this even valid? Wasn't &lt;code&gt;rep&lt;/code&gt; only supposed to work with string instructions? Is it just a very fancy way to write this?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;mov ds, ax&#xA;xor cx, cx&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16617" LastEditorUserId="15334" LastEditDate="2021-02-02T16:43:28.810" LastActivityDate="2021-03-14T08:27:39.353" Title="What 8086 instructions accept REP?" Tags="&lt;assembly&gt;&lt;8086&gt;&lt;undocumented-opcodes&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17791" PostTypeId="2" ParentId="17790" CreationDate="2021-01-31T13:58:18.903" Score="-1" Body="&lt;p&gt;&lt;em&gt;[You might want to add a bit more information to start with - like what assembler you're using, or what kind of  'Error thrown' you expect. From  assembler? Linker? Debugger? Or some OS/Runtime? Otherwise it's hard to give any definite answer.]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;In general &lt;code&gt;REP&lt;/code&gt; is simply an opcode that can come at any point like any other opcode. It isn't invalid on its own. Now, when it comes to usefulness it might make more sense in front of any string operation.&lt;/p&gt;&#xA;&lt;p&gt;So maybe answer for yourself, why do you expect to be stopped from using it - and by what component?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The underlaying issue might be more about the assembler used. In general an assembler is meant to allow the programmer to generate any code he wants - even illegal. And while one might appreciate some warning, this case is not illegal in any way. Beside, there is no way the assembler can guess if that instruction is meant as code to be executed or some data, for example used to synthesize instructions during run time. I'd delete any assembler that would stop me from programming right the moment he tries to :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-01-31T14:12:04.393" LastActivityDate="2021-01-31T14:12:04.393" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17792" PostTypeId="1" AcceptedAnswerId="17794" CreationDate="2021-01-31T16:05:12.970" Score="39" ViewCount="10874" Body="&lt;p&gt;Is there a historical reason? Since it is rewritable it isn't read only by definition, so why call it so?&lt;/p&gt;&#xA;" OwnerUserId="4407" LastEditorUserId="15334" LastEditDate="2021-02-03T12:41:40.480" LastActivityDate="2021-04-23T16:33:08.737" Title="Why is EEPROM called ROM if it can be written to?" Tags="&lt;memory&gt;&lt;rom&gt;&lt;terminology&gt;" AnswerCount="8" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17793" PostTypeId="2" ParentId="17792" CreationDate="2021-01-31T16:08:22.100" Score="16" Body="&lt;p&gt;It can't be 'written to' in the sense of storing useful information written by a running program in the computer.&lt;/p&gt;&#xA;&lt;p&gt;It can be erased and re-programmed, which generally requires a special ROM programmer (rather than erasing and rewriting in place).&lt;/p&gt;&#xA;&lt;p&gt;So, the readonly-ness is from the viewpoint of the computer in which it's used.&lt;/p&gt;&#xA;&lt;p&gt;These days the line between that and something like flash memory had grown blurred, but things get named when they're first invented.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-02-01T00:07:06.080" LastActivityDate="2021-02-01T00:07:06.080" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17794" PostTypeId="2" ParentId="17792" CreationDate="2021-01-31T16:17:18.480" Score="97" Body="&lt;p&gt;Look at the development:&lt;/p&gt;&#xA;&lt;p&gt;ROM = read-only memory = can only be read when on the board, programmed in the chip factory.&lt;/p&gt;&#xA;&lt;p&gt;PROM = programmable read-only memory = can be programmed with a special programmer, but read-only when on the board.&lt;/p&gt;&#xA;&lt;p&gt;EPROM = erasable programmable read-only memory = can be repeatedly programmed with a special programmer, after erasing it with UV light, but read-only when on the board.&lt;/p&gt;&#xA;&lt;p&gt;EEPROM = electrically erasable programmable read-only memory = can be electrically erased with higher voltages (no UV light needed) in the programmer, but read-only when on the board (because erasing and re-programming mostly isn't done on the board).&lt;/p&gt;&#xA;&lt;p&gt;So they all serve the same function: read-only memory on the board. Just the means of programming and erasing is different.&lt;/p&gt;&#xA;&lt;p&gt;Also, erasing an EEPROM takes on the order of minutes, and could originally only done completely - much too slow and too impractical for actual storage.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Flash ROM&amp;quot; was given this name because it was very fast to erase, so it made sense for the first time to do this during actual usage.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-02-01T21:48:26.917" LastActivityDate="2021-02-01T21:48:26.917" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="17795" PostTypeId="2" ParentId="17788" CreationDate="2021-01-31T16:30:44.333" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The hardware is modern enough such that to the best of my knowledge nothing would exclusively run on them but not on a current PC&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This statement partially answers your question, given that the idea of a &amp;quot;current PC&amp;quot; isn't frozen in time. 10 or 20 years hence, you may find it much more difficult to find a &amp;quot;current PC&amp;quot; that can utilize the old software (or, more importantly, &lt;strong&gt;your data&lt;/strong&gt;) that worked perfectly well on that old hardware you decided to recycle 10 years earlier.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Using them for modern applications sounds like a horrible idea in terms of energy efficiency&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A computer, like any tool, always works best when used as it was intended. So you have a very valid point here that old hardware that wasn't designed with the latest version of Windows or some application in mind won't work to the same level as the new hardware that &lt;em&gt;was designed for the latest OS and applications&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Conversely (to use an analogy), I still have the same hammer in my toolbox that I bought 30 years ago and I've found that the nails I want to drive haven't really changed.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-02-01T13:17:07.997" LastActivityDate="2021-02-01T13:17:07.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17796" PostTypeId="2" ParentId="17790" CreationDate="2021-01-31T20:34:24.527" Score="36" Body="&lt;p&gt;All of them. But it will only have an effect with a select few.&lt;/p&gt;&#xA;&lt;p&gt;Contrary to what the question implies, the &lt;code&gt;rep&lt;/code&gt; prefix is &lt;em&gt;not&lt;/em&gt; an orthogonal looping construct that can be combined with any instruction. The &lt;a href=&quot;https://edge.edx.org/c4x/BITSPilani/EEE231/asset/8086_family_Users_Manual_1_.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;8086 family manual&lt;/a&gt; defines the use of &lt;code&gt;rep&lt;/code&gt;/&lt;code&gt;repe&lt;/code&gt;/&lt;code&gt;repz&lt;/code&gt; (0xf3) and &lt;code&gt;repne&lt;/code&gt;/&lt;code&gt;repnz&lt;/code&gt; (0xf2) prefixes only in conjunction with string instructions, which are &lt;code&gt;movs&lt;/code&gt;, &lt;code&gt;cmps&lt;/code&gt;, &lt;code&gt;scas&lt;/code&gt;, &lt;code&gt;lods&lt;/code&gt; and &lt;code&gt;stos&lt;/code&gt;; all other uses of those two prefixes are illegal. But since the original 8086 &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11327/&quot;&gt;does not have an illegal opcode exception&lt;/a&gt;, every instruction necessarily has to &lt;a href=&quot;https://www.os2museum.com/wp/undocumented-8086-opcodes-part-i/&quot; rel=&quot;nofollow noreferrer&quot;&gt;do &lt;em&gt;something&lt;/em&gt;&lt;/a&gt;, even when it is formally undefined. For most instructions, an illegal &lt;code&gt;rep&lt;/code&gt; prefix is simply ignored, but this is not always the case; as was relatively recently discovered, &lt;a href=&quot;https://www.reenigne.org/blog/8086-microcode-disassembled/&quot; rel=&quot;nofollow noreferrer&quot;&gt;using &lt;code&gt;rep&lt;/code&gt; on multiplication and division instructions would invert the sign of the result&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;While the 8086’s successor, the 80186, added the #UD (illegal opcode) exception, it was apparently triggered only for undefined &lt;em&gt;instructions&lt;/em&gt;, not undefined combinations of an otherwise-defined instruction and prefix. Later revisions of the architecture would trigger #UD on undefined uses of the &lt;code&gt;lock&lt;/code&gt; prefix, but not &lt;code&gt;rep&lt;/code&gt; or &lt;code&gt;repne&lt;/code&gt;. It’s not clear to me what Intel’s rationale for this was at the time, although this would prove useful in later revisions of the architecture:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &lt;code&gt;pause&lt;/code&gt; instruction, available since the Pentium 4, is encoded equivalently to &lt;code&gt;rep nop&lt;/code&gt;, which means earlier versions of the architecture will simply ignore it, enabling operating systems to use it immediately without worrying about backwards compatibility.&lt;/li&gt;&#xA;&lt;li&gt;A bug in certain AMD CPUs caused a performance penalty upon encountering a return instruction in certain circumstances. To work it around, &lt;a href=&quot;https://stackoverflow.com/questions/20526361/&quot;&gt;the return opcode may be encoded as &lt;code&gt;rep ret&lt;/code&gt; instead of a plain &lt;code&gt;ret&lt;/code&gt;&lt;/a&gt;. This avoids the performance problem on defective CPUs, while other CPUs will simply ignore the prefix.&lt;/li&gt;&#xA;&lt;li&gt;The Intel MPX instruction set extension for bounds checking consists entirely of opcodes that were reserved and do nothing on (at least some) previous revisions of the architecture which do not implement the extension. This includes a &lt;code&gt;bnd&lt;/code&gt; prefix for branch instructions, which is encoded identically to &lt;code&gt;repne&lt;/code&gt;, and as such is likewise ignored by CPUs without MPX support.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Nevertheless, undocumented combinations of the prefix with instructions remain undefined, with all the usual consequences of undefined behaviour: they may break on subsequent revisions or alternative implementations of the architecture, they may behave non-deterministically, they may trigger strange behaviours, up to and including naſal dæmons. You are probably better off not using them, unless you have very good reasons to ignore such problems.&lt;/p&gt;&#xA;&lt;p&gt;As for why the &lt;em&gt;assembler&lt;/em&gt; doesn’t stop you from using illegal instructions: historically, assemblers have been pretty lenient in handling coding errors, for reasons both practical and, so to speak, philosophical:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Resource constraints.&lt;/strong&gt; Back when assembly languages were dominant, CPU clocks ran at best a couple of megahertz, while memory sizes (working memory and exchangeable media, which in that time meant floppies) were at best a couple hundreds of kilobytes, so performance tuning was very important. (It was quite the feat to implement a reasonably performant spell checker back then.) Adding extensive error checks to a program (any program, not just an assembler) incurs costs, considered significant at the time, in running time and code size, not to mention complexity. Naturally, most programmers just didn’t bother, and instead ill-fatedly directed users to read the fabulous manual.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Completeness.&lt;/strong&gt; An assembly language is supposed to be just a human-readable representation of the architecture’s instruction encoding; as such, it ought to be able to represent &lt;em&gt;any&lt;/em&gt; possible instruction, whether is actually supported and makes sense to execute or not. For example, current x86 assemblers are able to encode moves into and out of control registers CR5 through CR7, even though those registers currently have no defined use, no such is in sight either, and the instructions simply raise #UD. (I suspect the registers don’t even exist physically on the chip.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Forward compatibility.&lt;/strong&gt; Occasionally, illegal instructions become legal. When that happens, it becomes advantageous to be able to use them without having to upgrade the assembler. If your assembler hasn’t yet added built-in support for the &lt;code&gt;bnd&lt;/code&gt; prefix, you can simply write it as &lt;code&gt;repne&lt;/code&gt; today without waiting for an updated version. This reason was much more important before Internet-based software distribution became popular, but still remains valid to an extent.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Support for de-facto standards.&lt;/strong&gt; An opcode that is officially undocumented may nevertheless still exhibit useful behaviour on actual hardware. A programmer who understands the risks and/or is only interested in programming against the particular implementation of the architecture which provides it may choose to use such undefined instructions anyway, despite them being officially unsupported. When such use becomes popular enough, the manufacturer may unofficially maintain the behaviour for the sake compatibility, and assemblers may start including a mnemonic for the opcode as a de-facto standard. Eventually, the opcode may even become officially supported and documented; such for example happened with &lt;a href=&quot;https://www.os2museum.com/wp/icebp-finally-documented/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;icebp&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Programmers’ arrogance.&lt;/strong&gt; There is an enduring stereotype of a low-level programmer who takes pride in doing all the menial tasks of programming by hand and proclaims things like ‘Real Programmers don’t use Pascal’ or ‘how dare the compiler check my array bounds’ or ‘if my program ever has a buffer overflow, it’s the user’s fault because they’re holding it wrong’. (If Raffzahn’s answer is any indication, it’s still a somewhat justified one.) Such a person would probably consider an assembler which checks their errors to be an insult to their programming ability and not consider it an attractive feature.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-03-14T08:27:39.353" LastActivityDate="2021-03-14T08:27:39.353" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17797" PostTypeId="2" ParentId="17792" CreationDate="2021-01-31T23:18:08.070" Score="31" Body="&lt;p&gt;EEPROM can't be &amp;quot;written to.&amp;quot; It can be &lt;em&gt;programmed&lt;/em&gt;. Programming is different.&lt;/p&gt;&#xA;&lt;p&gt;When there's EEPROM in a CPU's physical address space, ordinary write cycles will not affect it. Something out of the ordinary has to happen in order to change the EEPROM's contents. The oldest PROMs and EEPROMs had to be physically removed from the system and programmed in a special device that used special voltages and special signaling to change the device content.&lt;/p&gt;&#xA;&lt;p&gt;More modern parts can be programmed in-circuit, and using normal voltages, but the programming still uses different signaling and maybe different pins from the normal memory bus interface.&lt;/p&gt;&#xA;" OwnerUserId="588" LastActivityDate="2021-01-31T23:18:08.070" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="17798" PostTypeId="2" ParentId="17709" CreationDate="2021-02-01T03:08:00.507" Score="4" Body="&lt;p&gt;The usual reason to want to do this is jump tables.[1] So let's assume we're doing that, and compare the performance of a few different ideas.&lt;/p&gt;&#xA;&lt;p&gt;The setup: we have an integer from 0 to N-1 stored in a register.  We want to JMP or JSR to one of N possible addresses.&lt;/p&gt;&#xA;&lt;p&gt;We're tracking cycle count (and whether it's constant), code size and how it varies with N, register/stack/zp usage, the maximum value of N, whether we modify inline code (to be avoided when running from ROM; calling code we constructed in zp is assumed to be fine), whether we can trivially replace JMP with JSR, and any usage-specific optimizations.&lt;/p&gt;&#xA;&lt;p&gt;Branches are assumed to be taken or not taken with equal frequency.  Cycle counts are for NMOS 6502s unless using 65C02-specific instructions.&lt;/p&gt;&#xA;&lt;h1&gt;Idea 1: Big table of JMPs&lt;/h1&gt;&#xA;&lt;pre&gt;&lt;code&gt;table:&#xA;        .align $100&#xA;        JMP addr0&#xA;        JMP addr1&#xA;        JMP addr2&#xA;        [...]&#xA;&#xA;idea1:  // index in A&#xA;        [4]   STA tmp+1 // multiply A by 3&#xA;        [2]   ASL A     // we know A&amp;lt;128 so ASL will clear the carry&#xA;tmp:    [2]   ADC #$00  // self-modified&#xA;        [4]   STA jmp+1&#xA;jmp:    [3]   JMP table // self-modified&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Table must lie on a page boundary for the multiplication to calculate the low byte correctly.&#xA;Replace &lt;code&gt;JMP table&lt;/code&gt; with &lt;code&gt;JSR table&lt;/code&gt; to return whence we came afterwards.&lt;/p&gt;&#xA;&lt;p&gt;Optimization: the final entry in the table can be the start of a routine instead of a jump.&lt;/p&gt;&#xA;&lt;p&gt;Cycles: 4+2+2+4+3+3=18. Constant time: yes.&#xA;Stack used: 0. ZP used: 0. Index in A. Other regs clobbered: none. Self-modifying: yes. JSR capable: yes.&#xA;Size: N*3+12 bytes.&#xA;Max N: 85.&lt;/p&gt;&#xA;&lt;h2&gt;Idea 1a: same as idea 1 except we have a lookup table of offsets instead of doing multiplication&lt;/h2&gt;&#xA;&lt;p&gt;This also allows the table to not need to start at the beginning of a page (it still must not cross a page boundary).&#xA;For cycle counting we'll assume lookup does not cross a page boundary either.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;table:&#xA;        JMP addr0&#xA;        JMP addr1&#xA;        JMP addr2&#xA;        [...]&#xA;lookup:&#xA;        .byte &amp;lt;table, &amp;lt;table+3, &amp;lt;table+6, [...]&#xA;&#xA;idea1a: // index in X&#xA;       [4]   LDA lookup,X&#xA;       [4]   STA jmp+1&#xA;jmp:   [3]   JMP table // self-modified&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Cycles: 4+4+3+3=14. Constant time: yes.&#xA;Stack used: 0. ZP used: 0. Index in X (or Y). Other regs clobbered: A. Self-modifying: yes. JSR capable: yes.&#xA;Size: N*4+9 bytes.&#xA;Max N: 85.&lt;/p&gt;&#xA;&lt;p&gt;Optimization: any of the JMPs in the table can be replaced with the routine itself, not just the last one, subject to the table fitting in a single page.&lt;/p&gt;&#xA;&lt;h2&gt;Idea 1b: As idea 1, but pad the table&lt;/h2&gt;&#xA;&lt;p&gt;This means we're multiplying by 4 not 3, and is the same size as the lookup version, but now max N is only 64.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;table:&#xA;        .align $100&#xA;        JMP addr0; NOP&#xA;        JMP addr1; NOP&#xA;        JMP addr2; NOP&#xA;        [...]&#xA;&#xA;idea1b: // index in A&#xA;       [2]   ASL A&#xA;       [2]   ASL A&#xA;       [4]   STA jmp+1&#xA;jmp:   [3]   JMP table // self-modified&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Cycles: 2+2+4+3=14. Constant time: yes.&#xA;Stack used: 0. ZP used: 0. Index in A. Other regs clobbered: none. Self-modifying: yes. JSR capable: yes.&#xA;Size: N*4+8 bytes.&#xA;Max N: 64.&lt;/p&gt;&#xA;&lt;p&gt;Optimization: perhaps you can squeeze some routines into 4 bytes?&lt;/p&gt;&#xA;&lt;h1&gt;Idea 2: Push return address on the stack and RTS&lt;/h1&gt;&#xA;&lt;p&gt;The address pushed must be one less than the desired location for arcane reasons.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;tablelo:&#xA;        .byte &amp;lt;addr0-1&#xA;        .byte &amp;lt;addr1-1&#xA;        .byte &amp;lt;addr2-1&#xA;        [...]&#xA;tablehi:&#xA;        .byte &amp;gt;addr0-1&#xA;        .byte &amp;gt;addr1-1&#xA;        .byte &amp;gt;addr2-1&#xA;        [...]&#xA;&#xA;idea2: // index in X&#xA;       [4]   LDA tablehi,X&#xA;       [3]   PHA&#xA;       [4]   LDA tablelo,X&#xA;       [3]   PHA&#xA;       [6]   RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Cycles: 4+3+4+3+6=20. Constant time: yes.&#xA;Stack used: 2. ZP used: 0. Index in X (or Y). Other regs clobbered: A. Self-modifying: no. JSR capable: no.&#xA;Size: N*2+9 bytes.&#xA;Max N: 256.&lt;/p&gt;&#xA;&lt;p&gt;Optimization: if you can ensure all your destinations lie within a single page (taking the off-by-one into account) then replacing &lt;code&gt;LDA tablehi,X&lt;/code&gt; with a constant load saves two cycles.&lt;/p&gt;&#xA;&lt;h1&gt;Idea 3: Store address into JMP instruction&lt;/h1&gt;&#xA;&lt;pre&gt;&lt;code&gt;tablelo:&#xA;        .byte &amp;lt;addr0&#xA;        .byte &amp;lt;addr1&#xA;        .byte &amp;lt;addr2&#xA;        [...]&#xA;tablehi:&#xA;        .byte &amp;gt;addr0&#xA;        .byte &amp;gt;addr1&#xA;        .byte &amp;gt;addr2&#xA;        [...]&#xA;&#xA;idea3:&#xA;        [4]   LDA tablelo,X&#xA;        [4]   STA jmp+1&#xA;        [4]   LDA tablehi,X&#xA;        [4]   STA jmp+2&#xA;jmp:    [3]   JMP $0000 // self-modified&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Cycles: 4+4+4+4+3=19. Constant time: yes.&#xA;Stack used: 0. ZP used: 0. Index in X (or Y). Other regs clobbered: A. Self-modifying: yes. JSR capable: yes.&#xA;Size: N*2+15 bytes.&#xA;Max N: 256.&lt;/p&gt;&#xA;&lt;h2&gt;Idea 3a: Store address into zero page JMP instruction&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;tablelo:&#xA;        .byte &amp;lt;addr0&#xA;        .byte &amp;lt;addr1&#xA;        .byte &amp;lt;addr2&#xA;        [...]&#xA;tablehi:&#xA;        .byte &amp;gt;addr0&#xA;        .byte &amp;gt;addr1&#xA;        .byte &amp;gt;addr2&#xA;        [...]&#xA;&#xA;idea3a_init:&#xA;        LDA #$4C // JMP opcode&#xA;        STA zp&#xA;        RTS&#xA;&#xA;idea3a:&#xA;        [4]   LDA tablelo,X&#xA;        [3]   STA zp+1&#xA;        [4]   LDA tablehi,X&#xA;        [3]   STA zp+2&#xA;        [3]   JMP zp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Cycles: 4+3+4+3+3+3=20. Constant time: yes.&#xA;Stack used: 0. ZP used: 3. Index in X (or Y): Other regs clobbered: A. Self-modifying: no. JSR capable: yes.&#xA;Size: N*2+13+5 bytes.&#xA;Max N: 256.&lt;/p&gt;&#xA;&lt;h2&gt;Idea 3b: As idea 3, but all destinations are in a single page&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;tablelo:&#xA;        .byte &amp;lt;addr0&#xA;        .byte &amp;lt;addr1&#xA;        .byte &amp;lt;addr2&#xA;        [...]&#xA;&#xA;idea3b:&#xA;        [4]   LDA tablelo,X&#xA;        [4]   STA jmp+1&#xA;jmp:    [3]   JMP addr0 // self-modified&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Cycles: 4+4+3=11. Constant time: yes.&#xA;Stack used: 0. ZP used: 0. Index in X (or Y). Other regs clobbered: A. Self-modifying: yes. JSR capable: yes.&#xA;Size: N*1+9 bytes.&#xA;Max N: 256.&lt;/p&gt;&#xA;&lt;h1&gt;Idea 4: Use indirect jump instruction&lt;/h1&gt;&#xA;&lt;pre&gt;&lt;code&gt;table:&#xA;        .align $100&#xA;        .word addr0&#xA;        .word addr1&#xA;        .word addr2&#xA;        [...]&#xA;&#xA;idea4: // index in A&#xA;       [2]   ASL A&#xA;       [4]   STA jmp+1&#xA;jmp:   [5/6] JMP (table) // self-modified&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Cycles: 2+4+5=11. Constant time: yes.&#xA;Stack used: 0. ZP used: 0. Index in A. Other regs clobbered: none. Self-modifying: yes. JSR capable: no.&#xA;Size: N*2+7 bytes.&#xA;Max N: 128.&lt;/p&gt;&#xA;&lt;p&gt;Note that due to a bug on NMOS 6502s, the indirect jump instruction reads the incorrect address if it straddles a page boundary.  This is no issue for us as the table must start on a page boundary anyway.  The bug was corrected on the 65C02 at the cost of one extra cycle.&lt;/p&gt;&#xA;&lt;h2&gt;Idea 4a: As idea 4, but allow N&amp;gt;128 by having two tables&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;table0:&#xA;        .align $100&#xA;        .word addr0&#xA;        .word addr1&#xA;        .word addr2&#xA;        [...]&#xA;table128:&#xA;        .align $100&#xA;        .word addr128&#xA;        .word addr129&#xA;        .word addr130&#xA;        [...]&#xA;        &#xA;idea4a: // index in A&#xA;       [2]   ASL A&#xA;       [2/3] BCS msbset&#xA;       [4]   STA jmp+1&#xA;jmp:   [5/6] JMP (table0)   // self-modified&#xA;msbset:[4]   STA jmp2+1&#xA;jmp2:  [5/6] JMP (table128) // self-modified&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Cycles: 2+2.5+4+5=13.5. Constant time: no.&#xA;Stack used: 0. ZP used: 0. Index in A. Other regs clobbered: none. Self-modifying: yes. JSR capable: no.&#xA;Size: N*2+15 bytes.&#xA;Max N: 256.&lt;/p&gt;&#xA;&lt;h2&gt;Idea 4b: Use indirect jump instruction in zero page&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;table:&#xA;        .align $100&#xA;        .word addr0&#xA;        .word addr1&#xA;        .word addr2&#xA;        [...]&#xA;&#xA;idea4b_init:&#xA;        LDA #$6C // JMP indirect opcode&#xA;        STA zp&#xA;        LDA #&amp;gt;table // high byte of table&#xA;        STA zp+2&#xA;        RTS&#xA;        &#xA;idea4b: // index in A&#xA;       [2] ASL A&#xA;       [4] STA zp+1&#xA;       [3] JMP zp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Cycles: 2+4+3+5=14. Constant time: yes.&#xA;Stack used: 0. ZP used: 3. Index in A. Other regs clobbered: none. Self-modifying: no. JSR capable: yes.&#xA;Size: N*2+9+6 bytes.&#xA;Max N: 128.&lt;/p&gt;&#xA;&lt;h1&gt;Idea 5: Use 65C02 indexed indirect jump instruction&lt;/h1&gt;&#xA;&lt;pre&gt;&lt;code&gt;table:&#xA;        .word addr1&#xA;        .word addr2&#xA;        .word addr3&#xA;        [...]&#xA;&#xA;idea5: // index in A&#xA;       [2] ASL A&#xA;       [2] TAX&#xA;       [6] JMP (table,X)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Cycles: 2+2+6=10. Constant time: yes.&#xA;Stack used: 0. ZP used: 0. Index in A. Other regs clobbered: X. Self-modifying: no. JSR capable: no.&#xA;Size: N*2+5 bytes.&#xA;Max N: 128. 65C02 only.&lt;/p&gt;&#xA;&lt;h2&gt;Idea 5a: As idea 5, but split the table into even and odd entries to avoid a shift and to allow N&amp;gt;128&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;tableeven:&#xA;        .word addr0&#xA;        .word addr2&#xA;        .word addr4&#xA;        [...]&#xA;tableodd:&#xA;        .word addr1&#xA;        .word addr3&#xA;        .word addr5&#xA;        [...]&#xA;&#xA;idea5a: // index in A (or X)&#xA;       [2]   TAX (or TXA)&#xA;       [2]   AND #1&#xA;       [2/3] BEQ even&#xA;       [6]   JMP (tableeven,X)&#xA;even:  [6]   JMP (tableodd-1,X)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Cycles: 2+2+2.5+6=12.5.&#xA;Stack used: 0. ZP used: 0. Index in A (or X). Other regs clobbered: X (or A). Self-modifying: no.  JSR capable: no.&#xA;Size: N*2+11 bytes.&#xA;Max N: 256. 65C02 only.&lt;/p&gt;&#xA;&lt;h2&gt;Idea 5b: As idea 5a, but split the table into high and low instead of even and odd&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;table0:&#xA;        .word addr0&#xA;        .word addr1&#xA;        .word addr2&#xA;        [...]&#xA;table128:&#xA;        .word addr128&#xA;        .word addr129&#xA;        .word addr130&#xA;        [...]&#xA;idea6: // index in A&#xA;       [2]   ASL A&#xA;       [2]   TAX&#xA;       [2/3] BCS msbset&#xA;       [6]   JMP (table0,X)&#xA;msbset:[6]   JMP (table128,X)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Cycles: 2+2+2.5+6=12.5.  Constant time: no.&#xA;Stack used: 0. ZP used: 0. Index in A. Other regs clobbered: X. Self-modifying: no.  JSR capable: no.&#xA;Size: N*2+10 bytes.&#xA;Max N: 256. 65C02 only.&lt;/p&gt;&#xA;&lt;h1&gt;Results table&lt;/h1&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th style=&quot;text-align: left;&quot;&gt;Idea&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: left;&quot;&gt;Cycles&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: left;&quot;&gt;Const&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: left;&quot;&gt;Size&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: right;&quot;&gt;max N&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: center;&quot;&gt;65C02&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: center;&quot;&gt;Self-mod&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: center;&quot;&gt;JSR&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: center;&quot;&gt;Stack&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: center;&quot;&gt;ZP&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: center;&quot;&gt;Index&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: center;&quot;&gt;Clobbered&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;1&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;18&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*3+12&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;85&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;none&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;1a&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;14&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*4+9&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;85&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;X/Y&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;1b&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;14&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*4+8&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;64&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;none&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;2&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;20&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*2+9&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;256&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;2&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;X/Y&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;3&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;19&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*2+15&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;256&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;X/Y&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;3a&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;20&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*2+18&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;256&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;3&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;X/Y&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;3b&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;11&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*1+9&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;256&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;X/Y&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;4&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;11&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;yes[2]&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*2+7&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;128&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;none&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;4a&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;13.5&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*2+15&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;256&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;none&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;4b&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;14&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;yes[2]&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*2+15&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;128&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;3&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;none&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;5&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;10&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*2+5&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;128&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;X&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;5a&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;12.5&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*2+11&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;256&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A/X&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;X/A&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;5b&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;12.5&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;N*2+10&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: right;&quot;&gt;256&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;yes&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;no&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;A&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: center;&quot;&gt;X&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Conclusions: there's no one &amp;quot;best&amp;quot; idea, it depends what your constraints are.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Idea 5 is the clear winner on 65C02 (this is why the 65C02 has an indexed jump instruction!), and 5b is slightly better than 5a if you need N&amp;gt;128.&lt;/li&gt;&#xA;&lt;li&gt;Idea 4 is often best if you don't mind self-modifying code (and have N&amp;lt;=128).&lt;/li&gt;&#xA;&lt;li&gt;Idea 2 is the most well-known &amp;quot;trick&amp;quot; and has few gotchas, but is tied for slowest.&lt;/li&gt;&#xA;&lt;li&gt;Idea 3a is about as good as idea 2 if you need ROMable code but prefer zp usage to stack usage, or need to JSR instead of JMP, but idea 4b beats it for N&amp;lt;=128.&lt;/li&gt;&#xA;&lt;li&gt;Idea 3b is basically idea 1a with the optimization applied; it's a special case but great if you can pull it off.&lt;/li&gt;&#xA;&lt;li&gt;Idea 1 and variants are most useful when N is small.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;A JSR/RTS pair can be replaced with two JMPs (saving six cycles, but using two extra bytes) if the routine is called from only a single place.  This makes the option of replacing JMP with JSR less important.&lt;/p&gt;&#xA;&lt;p&gt;[1] The &lt;em&gt;second&lt;/em&gt; most common reason to want to do this is to provide hooks for your ROM-based OS routines to be patched or otherwise redirected at runtime.&lt;/p&gt;&#xA;&lt;p&gt;[2] One extra cycle on 65C02.  &lt;a href=&quot;http://www.retrosoftware.co.uk/forum/viewtopic.php?f=73&amp;amp;t=1007#p7673&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sometimes this matters!&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10207" LastActivityDate="2021-02-01T03:08:00.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17800" PostTypeId="1" AcceptedAnswerId="17802" CreationDate="2021-02-01T10:30:19.763" Score="22" ViewCount="1539" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Curses_(programming_library)&quot; rel=&quot;noreferrer&quot;&gt;curses library&lt;/a&gt; is a terminal control library for Unix-like systems used in text based user interface applications. It has been used in many games in the past. It was developed by Ken Arnold and originally released with BSD Unix.&lt;/p&gt;&#xA;&lt;p&gt;Where can I find the sources of the curses library (either as part of a Unix distribution release or the original sources as published by the author or some other official source)? Sources with history (in a version control system) would be even better.&lt;/p&gt;&#xA;&lt;p&gt;I can only find sources for successors like ncurses or pcurses. Neither the &lt;a href=&quot;https://en.wikipedia.org/wiki/Curses_(programming_library)&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia page of curses&lt;/a&gt;, nor the overview page at &lt;a href=&quot;http://www.rocketaware.com/uint/curses/&quot; rel=&quot;noreferrer&quot;&gt;rocketaware.com&lt;/a&gt; resulted in something usable and searches for &amp;quot;freebsd libcurses&amp;quot; or &amp;quot;debian libcurses&amp;quot; all point to ncurses, not the original curses. The library is probably not in use anymore, but I would still like to study the original source code.&lt;/p&gt;&#xA;" OwnerUserId="6590" LastActivityDate="2021-02-01T11:48:35.440" Title="Where are the sources of the original curses library?" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17802" PostTypeId="2" ParentId="17800" CreationDate="2021-02-01T11:09:58.253" Score="23" Body="&lt;p&gt;The sources of early versions of curses are available in &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/&quot; rel=&quot;noreferrer&quot;&gt;Diomidis Spinellis’ Unix history repo&lt;/a&gt;, for example &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/tree/BSD-4_4/usr/src/lib/libcurses&quot; rel=&quot;noreferrer&quot;&gt;the 4.4BSD version of &lt;code&gt;libcurses&lt;/code&gt;&lt;/a&gt;. This includes &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/commits/BSD-4_4/usr/src/lib/libcurses/&quot; rel=&quot;noreferrer&quot;&gt;reconstructed history&lt;/a&gt;, all the way back to &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/commit/ec004506cbb94393fe5e9918d4227a943df41b49#diff-e91ff99720dcbf9b8713a0074a28cb350cd04655fb3344513c025104411fd5ad&quot; rel=&quot;noreferrer&quot;&gt;this synthetic 4BSD-era commit&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The sources are available in a number of other places such as &lt;a href=&quot;https://minnie.tuhs.org/cgi-bin/utree.pl?file=4.4BSD/usr/src/lib/libcurses&quot; rel=&quot;noreferrer&quot;&gt;TUHS&lt;/a&gt; (which has &lt;a href=&quot;https://minnie.tuhs.org/cgi-bin/utree.pl?file=2.9BSD/usr/src/lib/curses/&quot; rel=&quot;noreferrer&quot;&gt;a 2.9BSD version&lt;/a&gt; as well, along with the AT&amp;amp;T versions) but the above is the most convenient I know of for exploration, especially to see the evolution of the codebase.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-01T11:48:35.440" LastActivityDate="2021-02-01T11:48:35.440" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17803" PostTypeId="1" AcceptedAnswerId="17804" CreationDate="2021-02-01T13:38:13.167" Score="11" ViewCount="1967" Body="&lt;p&gt;Some early models of Intel 80386 processors had a &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80386#Early_problems&quot; rel=&quot;noreferrer&quot;&gt;bug&lt;/a&gt; with 32-bit integer multiplication. Those which were found to have the bug were marked &amp;quot;16-bit S/W ONLY&amp;quot; (not sure what S/W is supposed to mean), while the clean ones were marked with ΣΣ. How could software detect if it's running on a buggy CPU? Because not detecting this could lead to some serious erroneous results, even within the OS (unlike the Pentium FDIV bug, which was minor).&lt;/p&gt;&#xA;" OwnerUserId="16617" LastEditorUserId="79" LastEditDate="2021-02-01T22:06:43.940" LastActivityDate="2021-02-03T21:12:50.900" Title="Intel 386 multiply bug" Tags="&lt;80386&gt;&lt;bugs&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17804" PostTypeId="2" ParentId="17803" CreationDate="2021-02-01T13:56:08.537" Score="16" Body="&lt;p&gt;Software can identify those early steppings on the 386 by checking whether the XBTS and/or IBTS instruction can be executed, since these instructions were dropped in later chip revisions.&lt;/p&gt;&#xA;&lt;p&gt;Software must, however, first check whether the CPU is really an 80386 and not 486, because the some early steppings of the 486 temporarily re-used the opcodes of these two instructions for the CMPXCHG instruction (what wonderful design decisions ;) ).&lt;/p&gt;&#xA;&lt;p&gt;Other than that, it is only possible to check by actually multiplying and seeing if you get a proper result. Windows installers apparently did that by computing and verifying the result of 0x81 × 0x0417A000. I cannot verify whether that is a 100% accurate check, but doubt it, because the bug actually seems to be a on-chip power supply problem that might also depend on environmental conditions.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="2037" LastEditDate="2021-02-02T00:03:26.520" LastActivityDate="2021-02-02T00:03:26.520" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17805" PostTypeId="2" ParentId="17803" CreationDate="2021-02-01T14:01:22.837" Score="2" Body="&lt;p&gt;It can be tested by performing various multiplication operations and verifying the result. List of such code that performs ten tests with various memory and register based operands is available for example at &lt;a href=&quot;https://www.pcjs.org/documents/manuals/intel/80386/&quot; rel=&quot;nofollow noreferrer&quot;&gt;pcjs.org&lt;/a&gt;, but as others have already pointed out, the problem may only manifest under certain conditions and can depend on e.g. CPU supply voltage, so it is possible that these tests will not necessarily detect a buggy CPU even if all tests pass.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-02-03T21:12:50.900" LastActivityDate="2021-02-03T21:12:50.900" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17806" PostTypeId="2" ParentId="17792" CreationDate="2021-02-01T19:45:07.623" Score="11" Body="&lt;p&gt;RAM is designed to be quickly written many trillions of times without wearing out.  Flash and EEPROM devices, by contrast, are designed to be quickly read many trillions of times without degradation, but writing will be orders of magnitude slower and impose significant wear; an EEPROM device that can reliably endure 10,000,000 write operations without wearing out would be regarded as having unusually high endurance; 10,000 writes would be more typical.&lt;/p&gt;&#xA;&lt;p&gt;On the original ENIAC computer, RAM was implemented with vacuum tubes, and &amp;quot;ROM&amp;quot; was implemented with many rows of manually-operated rotary switches.  The computer could instantly change the contents of any RAM location automatically, but the only way ROM would change would be if somebody physically went up to the knobs and rotated them.  Converting from ROM to EEPROM would have been equivalent to adding a bunch of solenoid-operated mechanisms that could rotate the knobs under program control.&lt;/p&gt;&#xA;&lt;p&gt;In terms of evolution, once computers started having enough RAM that they could receive input from a punched-card reader and copy it into RAM, ROM was used for things that would need to be changed less often, and thus often took forms like boards a grid of junctions where diodes or transistors could be installed or omitted, or groups of magnetic cores through which wires could either be threaded through or around.  The former approach evolved into semiconductor programmable ROMS which would behave like a fully populated grid of transistors, but each transistor had a small fuse in series with it.  Turning on a transistor and then applying a suitable power pulse to the output would blow the fuse.&lt;/p&gt;&#xA;&lt;p&gt;Later semiconductor programmable memories replaced the fuse with a second transistor which was switched on and off by implanting charges in its gate.  This allowed the memories to be smaller (there was a limit as to how weak fuses could reliably be made without spontaneous failures, and the transistors and other wiring had to be made much stronger than the fuses).  The gates effectively had diodes in series with them, so charges could be implanted but not removed; exposure to ionizing radiation such as UV light, however, would dislodge the charges.&lt;/p&gt;&#xA;&lt;p&gt;Still later advancements made it possible to electrically drain off the charges from the gates, but the devices still needed unusual voltages to be applied in order to do this.  Modern devices have internal circuitry that will connect the internal memory bus to an external memory bus when not performing write operations, but which can disconnect from the external bus and apply unusual voltages to the internal bus when necessary to store or erase information.  Although such devices no longer require the exotic external hardware that was necessary to store information into older devices, their essential nature is much as it always had been: reads are processed using ordinary transistor switching, while writes require a much slower and more stressful process.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-02-01T19:45:07.623" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17807" PostTypeId="5" CreationDate="2021-02-01T20:27:03.600" Score="0" Body="&lt;p&gt;Use this tag for questions about bugs themselves, such as those concerning the causes and the rate of incidence of defects, or technical analyses of famous bugs.&lt;/p&gt;&#xA;&lt;p&gt;Use &lt;a href=&quot;/questions/tagged/debugging&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;debugging&amp;#39;&quot; rel=&quot;tag&quot;&gt;debugging&lt;/a&gt; for questions about bug discovery and diagnosis, debugging tools, or to ask for help in diagnosing a bug in your own software that targets a retro platform.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-02T10:17:54.767" LastActivityDate="2021-02-02T10:17:54.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17808" PostTypeId="4" CreationDate="2021-02-01T20:27:03.600" Score="0" Body="Defects in historical software and hardware, their causes, questions about well-known bugs. Use [debugging] for bug diagnosis and discovery." OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-02T10:18:09.910" LastActivityDate="2021-02-02T10:18:09.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17809" PostTypeId="2" ParentId="17790" CreationDate="2021-02-01T20:33:12.787" Score="11" Body="&lt;p&gt;&lt;strong&gt;You can't repeat arbitrary instructions with &lt;code&gt;rep&lt;/code&gt;.&lt;/strong&gt;&lt;br /&gt;&#xA;In asm syntax, &lt;code&gt;rep&lt;/code&gt; just means to include an &lt;code&gt;F3&lt;/code&gt; byte as a prefix for this instruction.  There is no implication that it actually means repeat, it's just shorthand for &lt;code&gt;db 0xF3&lt;/code&gt;.  Assemblers exist to help you put the bytes you want into an object file.  It's up to you to make good choices.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;When &lt;code&gt;F3  rep&lt;/code&gt; doesn't apply to an opcode&lt;/strong&gt;, in practice it's ignored&lt;sup&gt;1&lt;/sup&gt; (same for other prefixes except &lt;code&gt;lock&lt;/code&gt;, in CPUs after 8086).  Intel documents the behaviour as &amp;quot;undefined&amp;quot; because future CPUs could use that sequence as a multi-byte opcode that does something different.  (e.g. &lt;code&gt;lzcnt&lt;/code&gt; = &lt;code&gt;rep bsr&lt;/code&gt;, giving different results on CPUs that know about lzcnt vs. older CPUs).  So they're not future-proof safe for &lt;a href=&quot;https://stackoverflow.com/questions/48046814/what-methods-can-be-used-to-efficiently-extend-instruction-length-on-modern-x86&quot;&gt;padding instructions for alignment&lt;/a&gt; to avoid NOPs.&lt;/p&gt;&#xA;&lt;p&gt;Note 1: at least on modern x86 CPUs. As @user3840170's answer points out, &lt;code&gt;rep mul&lt;/code&gt; can invert the sign of the result on actual 8086!  Perhaps this is why Intel only ever says anything about specific cases, not in general.&lt;/p&gt;&#xA;&lt;p&gt;From Intel's x86 manuals, vol.2, &lt;a href=&quot;https://www.felixcloutier.com/x86/rep:repe:repz:repne:repnz&quot; rel=&quot;nofollow noreferrer&quot;&gt;REP/REPE/REPZ/REPNE/REPNZ entry&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The REP prefix can be added to the INS, OUTS, MOVS, LODS, and STOS instructions, and the REPE, REPNE, REPZ, and REPNZ prefixes can be added to the CMPS and SCAS instructions. (The REPZ and REPNZ prefixes are synonymous forms of the REPE and REPNE prefixes, respectively.) &lt;strong&gt;The F3H prefix is defined for the following instructions and undefined for the rest&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;F3H as REP/REPE/REPZ for string and input/output instruction.&lt;/li&gt;&#xA;&lt;li&gt;F3H is a mandatory prefix for POPCNT, LZCNT, and ADOX.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(Intel's list is &lt;em&gt;not&lt;/em&gt; a complete, for example omitting TZCNT, and use as part of PAUSE.  But perhaps they're intentionally omitting cases where backwards compat by ignoring the REP prefix is useful.  e.g. &lt;a href=&quot;https://www.felixcloutier.com/x86/tzcnt&quot; rel=&quot;nofollow noreferrer&quot;&gt;tzcnt&lt;/a&gt; = rep bsf same result when the input is non-zero, &lt;a href=&quot;https://www.felixcloutier.com/x86/pause&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;pause&lt;/code&gt; = &lt;code&gt;rep nop&lt;/code&gt;&lt;/a&gt;, F3 = &lt;a href=&quot;https://www.felixcloutier.com/x86/xacquire:xrelease&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;xrelease&lt;/code&gt;&lt;/a&gt; HLE prefix, and so on.  Also omits mention of F3h as a prefix for some scalar SSE instructions, and of F2h as part of &lt;code&gt;crc32&lt;/code&gt; for example.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Every time Intel has introduced a new instruction using an &lt;code&gt;F3&lt;/code&gt; (or &lt;code&gt;F2&lt;/code&gt;) byte as a mandatory prefix, they've documented the fact that older CPUs ignore the prefix when that's useful.&lt;/strong&gt;  This has allowed transparent Hardware Lock Elision when used with &lt;code&gt;lock add&lt;/code&gt; or &lt;code&gt;mov&lt;/code&gt; stores, for example, as well as &lt;code&gt;pause&lt;/code&gt; safely running as &lt;code&gt;nop&lt;/code&gt; on older CPUs.  This is possible because CPUs do in practice ignore such prefixes; Intel just chooses not do document it except on a case-by-case basis when it's relevant and useful.  (I haven't checked AMD's docs but I assume it's basically the same.)&lt;/p&gt;&#xA;&lt;p&gt;(Some SSE1/2 scalar instructions like &lt;code&gt;addsd&lt;/code&gt; use F2 or F3 as a mandatory prefix; I assume a CPU with SSE1 but not SSE2 would run &lt;code&gt;F2 0F 58&lt;/code&gt; as &lt;a href=&quot;https://www.felixcloutier.com/x86/addps&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;addps&lt;/code&gt;&lt;/a&gt; instead of &lt;a href=&quot;https://www.felixcloutier.com/x86/addsd&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;addsd&lt;/code&gt;&lt;/a&gt;, although this is not documented or useful.  &lt;code&gt;F3 0F 58&lt;/code&gt; is SSE1 &lt;code&gt;addss&lt;/code&gt;, so there wouldn't be any CPUs that could ignore the F3 and run it as SSE1 &lt;code&gt;addps&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Related Q&amp;amp;As for more detail:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/7086220/what-does-rep-nop-mean-in-x86-assembly-is-it-the-same-as-the-pause-instru&quot;&gt;What does “rep; nop;” mean in x86 assembly? Is it the same as the “pause” instruction?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/32347393/224132&quot;&gt;What does &lt;code&gt;rep ret&lt;/code&gt; mean?&lt;/a&gt; not documented, but a de-facto standard thanks to widespread use by GCC to avoid AMD branch-mispredict penalties for a 1-byte &lt;code&gt;ret&lt;/code&gt; following a branch.  This is explicitly taking advantage of the &amp;quot;current CPUs ignore &lt;code&gt;rep&lt;/code&gt;&amp;quot; behaviour, not as a new instruction.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/40219519/why-do-repe-and-repne-do-the-same-before-movsb&quot;&gt;why do repe and repne do the same before movsb?&lt;/a&gt; - Apparently (some?) CPUs run &lt;code&gt;F2 movsb&lt;/code&gt; the same as normal &lt;code&gt;F3 rep movsb&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/2404364/combining-prefixes-in-sse&quot;&gt;Combining prefixes in SSE&lt;/a&gt; - mixing and matching prefixes other than mandatory ones.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/8163021/repeat-prefixes-and-mandatory-prefixes-in-x86&quot;&gt;Repeat prefixes and mandatory prefixes in x86&lt;/a&gt; - &lt;code&gt;f2 0f 38 f0&lt;/code&gt; is definitely CRC32, not rep movbe, despite its &lt;code&gt;0f 38 f0&lt;/code&gt; encoding.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;F3 to actually repeat something&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;An &lt;code&gt;F3&lt;/code&gt; byte behaves as a true &lt;code&gt;rep&lt;/code&gt; prefix (repeating for [E/R]CX counts) only for the &amp;quot;string&amp;quot;&lt;sup&gt;1&lt;/sup&gt; instructions documented in the &lt;a href=&quot;https://www.felixcloutier.com/x86/rep:repe:repz:repne:repnz&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;rep&lt;/code&gt; entry&lt;/a&gt;&lt;/strong&gt; in Intel's current vol.2 manual; still only for &lt;code&gt;stos&lt;/code&gt;/&lt;code&gt;movs&lt;/code&gt;/&lt;code&gt;ins&lt;/code&gt;/&lt;code&gt;outs&lt;/code&gt;&lt;sup&gt;2&lt;/sup&gt;.  And somewhat surprisingly also &lt;code&gt;lods&lt;/code&gt;, even though just loading usually doesn't have side effects (except in MMIO regions, or faulting on unmapped pages or segment limits on CPUs later than 8086).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The &lt;code&gt;F3&lt;/code&gt; byte can also act as a &lt;code&gt;repe&lt;/code&gt; aka &lt;code&gt;repz&lt;/code&gt; prefix for &lt;code&gt;cmps&lt;/code&gt; and &lt;code&gt;scas&lt;/code&gt;,&lt;/strong&gt; documented in the same page of Intel's manual.  In that case, repeating stops if ZF==0 after any step.  (As with rep, E/RCX is checked for !=0 &lt;em&gt;before&lt;/em&gt; even the first step, but ZF is only checked after the first step so you don't have to create good FLAGS state before using, unless E/RCX might be zero initially and you want to branch on ZF after.)  &lt;code&gt;repne&lt;/code&gt; aka &lt;code&gt;repnz&lt;/code&gt; is an &lt;code&gt;F2&lt;/code&gt; byte, and only applies to those two instructions as a repeat with the opposite ZF condition.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note 1&lt;/strong&gt;: In C terms, rep/repe implements memset/memcpy/memcmp/memchr, &lt;em&gt;not&lt;/em&gt; &lt;code&gt;str*&lt;/code&gt; for 0-terminated C strings.  These are &amp;quot;explicit-length string&amp;quot; instructions, which I think was common at the time 8086 was new, and is now back in favour with C++ &lt;code&gt;std::string&lt;/code&gt; unlike C &lt;code&gt;char*&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note 2&lt;/strong&gt;: &lt;code&gt;insb/w&lt;/code&gt; and &lt;code&gt;outsb/w&lt;/code&gt; were &lt;a href=&quot;https://ulukai.org/ecm/insref.htm#insINSB&quot; rel=&quot;nofollow noreferrer&quot;&gt;new in 186&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Note that only &lt;code&gt;rep movs&lt;/code&gt; and &lt;code&gt;rep stos&lt;/code&gt; are fast on modern CPUs, with &lt;a href=&quot;https://stackoverflow.com/questions/33480999/how-can-the-rep-stosb-instruction-execute-faster-than-the-equivalent-loop&quot;&gt;optimized microcode&lt;/a&gt; that copies or stores in chunks of 16, 32, or maybe even 64 bytes at a time.  (&lt;a href=&quot;https://stackoverflow.com/questions/43343231/enhanced-rep-movsb-for-memcpy&quot;&gt;SIMD loops can still be better&lt;/a&gt;). &lt;code&gt;repe cmpsb&lt;/code&gt; is dog slow (e.g. one compare per 2 cycles on Skylake, 3 on Zen) and &lt;a href=&quot;https://stackoverflow.com/questions/55563598/why-is-this-code-6-5x-slower-with-optimizations-enabled/55589634#55589634&quot;&gt;easily beaten&lt;/a&gt; with even SSE2 pcmpeqb / pmovmskb to implement memcmp.  Or even scalar bithacks for strlen / strcmp.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;8086 design bug: when a &lt;code&gt;rep&lt;/code&gt; instruction with multiple prefixes is interrupted&lt;/strong&gt;, the saved IP points at the &lt;em&gt;last&lt;/em&gt; prefix.  So &lt;code&gt;cs rep movsb&lt;/code&gt; will resume as &lt;code&gt;rep movsb&lt;/code&gt; without a CS segment override!&lt;/p&gt;&#xA;&lt;p&gt;Later x86 CPUs fixed this, but on 8086 / 8088 you either avoid that entirely, or write it as &lt;code&gt;rep cs movsb&lt;/code&gt; inside a loop that compensates.  So if it's interrupted, on resume it runs one &lt;code&gt;cs movsb&lt;/code&gt; (without decrementing CX because the &lt;code&gt;rep&lt;/code&gt; got skipped).  You can detect the non-zero CX and either re-calculate from the pointers or work out some logic to get CX correct and jump back to before the rep prefix.&lt;/p&gt;&#xA;&lt;p&gt;Fun fact #2: when single-stepping (with TF=1, the trap flag), &lt;code&gt;rep&lt;/code&gt;-string instructions trap after every count.&lt;/p&gt;&#xA;&lt;p&gt;Fun fact #3: &lt;a href=&quot;https://chat.stackexchange.com/transcript/message/56937351#56937351&quot;&gt;Per discussion in comments on&lt;/a&gt; @Raffzahn's answer, 8086 CPUs assert some external queue-status signals every time they decode a prefix or an opcode. Prefixes clearly behave differently from instructions in terms of software-visible behaviour, so this appears to be an 8086 implementation detail.  Prefixes aren't truly &amp;quot;opcodes&amp;quot;, despite being documented in the manual along with instructions.  (&lt;code&gt;rep&lt;/code&gt; and &lt;code&gt;lock&lt;/code&gt; still are; segment overrides don't have their own entry in Intel's vol.2 manual.&#xA;Other prefixes like &lt;a href=&quot;https://www.felixcloutier.com/x86/xacquire:xrelease&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;xacquire&lt;/code&gt; (F2) and &lt;code&gt;xrelease&lt;/code&gt; (F3)&lt;/a&gt; also have entries)&lt;/p&gt;&#xA;" OwnerUserId="3296" LastEditorUserId="3296" LastEditDate="2021-02-03T20:15:09.927" LastActivityDate="2021-02-03T20:15:09.927" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="17810" PostTypeId="1" AcceptedAnswerId="17811" CreationDate="2021-02-01T21:18:03.140" Score="4" ViewCount="537" Body="&lt;p&gt;Running &lt;code&gt;SUPERMON&lt;/code&gt; on a Synertek &lt;a href=&quot;https://en.wikipedia.org/wiki/SYM-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;SYM-1&lt;/a&gt;, the &lt;code&gt;R&lt;/code&gt; (&lt;code&gt;REG&lt;/code&gt;) command cycles through a number of registers. Most are self explanatory:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;p&lt;/code&gt; is the program counter (&lt;code&gt;pc&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;s&lt;/code&gt; is the stack pointer&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;a&lt;/code&gt;, &lt;code&gt;x&lt;/code&gt;, and &lt;code&gt;y&lt;/code&gt; are obvious&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But what is &lt;code&gt;f&lt;/code&gt;?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.r&#xA;P 8B4A,&amp;gt;&#xA;S   FF,&amp;gt;&#xA;F   00,&amp;gt;&#xA;A   00,&amp;gt;&#xA;X   00,&amp;gt;&#xA;Y   00,&#xA;.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7235" LastEditorUserId="7235" LastEditDate="2021-02-02T16:30:46.450" LastActivityDate="2021-02-02T16:30:46.450" Title="Sym-1: What is the &quot;f&quot; register?" Tags="&lt;6502&gt;&lt;sym-1&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17811" PostTypeId="2" ParentId="17810" CreationDate="2021-02-01T21:33:53.970" Score="18" Body="&lt;p&gt;The only thing missing from your list of processor state is the flags register.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2021-02-01T21:33:53.970" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17812" PostTypeId="1" CreationDate="2021-02-02T00:03:46.050" Score="7" ViewCount="1097" Body="&lt;p&gt;Using an USB external floppy drive, I've been able to use my Mac to back up files from a big box of 3.5 inch floppies (800K, HD 1.4MB). But I cannot even read my DS 1MB floppies using either the external USB drive, or the drive of a Classic II. (The Classic II kept freezing up). What kind of drive do I need, or what kind of legacy Mac would help?&lt;/p&gt;&#xA;" OwnerUserId="20693" LastActivityDate="2021-02-02T06:11:52.047" Title="I can't read DS 1MB floppy disks" Tags="&lt;floppy-disk&gt;&lt;apple-macintosh&gt;&lt;floppy-drive&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17813" PostTypeId="2" ParentId="17812" CreationDate="2021-02-02T00:52:25.110" Score="12" Body="&lt;p&gt;Many USB floppy drives will not read double-density (720 / 800 KB) disks at all.  Most that can will only read 720 KB disks formatted for IBM PCs.&lt;/p&gt;&#xA;&lt;p&gt;I am not aware of any standard USB 3.5&amp;quot; drives that can read the 800 KB double-density Mac format.  They are unlikely to exist as 800 KB disks as used on the classic Macs use a proprietary on-disk format requiring variable speed drives.&lt;/p&gt;&#xA;&lt;p&gt;If that is the kind of disk you want to read, any pre-iMac Mac with a standard 800 KB or 1.44 MB Macintosh drive should be able to read them.  But classic Macs are about the only system that can easily read them.&lt;/p&gt;&#xA;&lt;p&gt;With machine like your Classic II which has a 1.4 MB Mac drive, if you can get it running, you should be able to image the 800K disks using a utility like Disk Copy, then copy those image files to a 1.4 MB floppy. The USB drive should be able to read a 1.4 MB HD floppy.  That will give you an exact copy of your disks, hopefully.&lt;/p&gt;&#xA;&lt;p&gt;Another option would be to consider something like (with no particular endorsement) the Kryoflux, FluxEngine, Applesauce or similar.  They do very low-level magnetic imaging of the disk's surface, and then use hefty modern software to reconstruct the bytes.  But these are mostly hobbyist-level projects and would be somewhat involved, I think.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2021-02-02T06:11:52.047" LastActivityDate="2021-02-02T06:11:52.047" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17814" PostTypeId="1" AcceptedAnswerId="17820" CreationDate="2021-02-02T09:10:01.097" Score="0" ViewCount="219" Body="&lt;p&gt;My desktop computer is no longer manufactured and no longer supported since more than 18 years ago. It was a very expensive top of the line business computer back in the day. I like it and wish to preserve it, but also continue to use it. It takes a single processor on the main board (with up to 4 GB of memory). However, what I wanted to know is if anyone has any idea of how I can add additional slave processors (and possibly RAM) to this system through the mainboard's PCI card slots, and thereby up the processing power of this machine? Also, is there a way to overclock the processor or otherwise to further up it's performance? I am also factoring in the tons of old computers going into land fills in this question so that if this problem can be solved economically, then many old computers might be able to be retrofitted, preserved, and to be usable again with modern operating systems and softwares.&lt;/p&gt;&#xA;" OwnerUserId="20697" LastEditorUserId="20697" LastEditDate="2021-02-04T04:43:04.503" LastActivityDate="2021-02-04T04:43:04.503" Title="CPU slaves on a PCI card to retrofit single processor to multiple processors. Any ideas how?" Tags="&lt;cpu&gt;&lt;rom&gt;&lt;motherboard&gt;&lt;overclocking&gt;" AnswerCount="2" CommentCount="16" ClosedDate="2021-02-02T17:12:56.837" ContentLicense="CC BY-SA 4.0" />
  <row Id="17815" PostTypeId="2" ParentId="17814" CreationDate="2021-02-02T11:44:13.293" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;how I can add additional slave processors (and possibly RAM) to this system through the mainboard's PCI card slots&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While DMA works through PCI, this is not practical to sustain to have additional CPUs on the card access main memory.&lt;/p&gt;&#xA;&lt;p&gt;So basically you'd need a complete second PC with RAM and one or more CPUs on the card. The best you can hope for is to use the PCI memory window either for shared memory with a small part of the on-card RAM, or as a sort of I/O control of the card.&lt;/p&gt;&#xA;&lt;p&gt;That means it's not much different from having two completely separate PCs connected via LAN, say.&lt;/p&gt;&#xA;&lt;p&gt;On top of that, you'd have to develop some PCI slave controller for that purpose, you'd have to develop and manufacture the whole card. But the card's electronics will be dense enough that you can not easily do this as a hobbyist, and the numbers produced are too low to make this less than horribly expensive.&lt;/p&gt;&#xA;&lt;p&gt;So no, it's not a practical way to &amp;quot;improve processing power&amp;quot; of your legacy system.&lt;/p&gt;&#xA;&lt;p&gt;Though designs like this existed in the past for older platforms (both with and without shared main memory), it just doesn't make sense for PCI-equipped PC.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-02-02T11:44:13.293" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17816" PostTypeId="5" CreationDate="2021-02-02T14:55:13.353" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2021-02-02T14:55:13.353" LastActivityDate="2021-02-02T14:55:13.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17817" PostTypeId="4" CreationDate="2021-02-02T14:55:13.353" Score="0" Body="Microsoft Windows family of operating systems. For questions specific to one version, use the particular version’s tag. For windowing systems generally, use [gui]." OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-02T17:50:19.367" LastActivityDate="2021-02-02T17:50:19.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17818" PostTypeId="5" CreationDate="2021-02-02T15:00:34.873" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2021-02-02T15:00:34.873" LastActivityDate="2021-02-02T15:00:34.873" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17819" PostTypeId="4" CreationDate="2021-02-02T15:00:34.873" Score="0" Body="The Intel x86 family of architectures in general. Contemporary systems are OFF-TOPIC! Use the specific architecture’s tag if applicable." OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-02T17:50:49.197" LastActivityDate="2021-02-02T17:50:49.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17820" PostTypeId="2" ParentId="17814" CreationDate="2021-02-02T15:10:09.263" Score="5" Body="&lt;p&gt;CompuPro did this in the olden days, with 8-bit and 16-bit CPU slave cards with a 16-bit or 32-bit main CPU. But there were a few differences from what you are suggesting:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Each CPU had its own RAM. That was an absolute must. If two CPUs have to share RAM (except to a limited degree - e.g., DMA for disk access), they will slow each other down. RAM is already the slow point in many systems, and keep in mind that if other CPUs are using the main CPU's RAM then you also mess up the caching that is key to modern CPUs being able to run at multi-GHz speeds.&lt;/li&gt;&#xA;&lt;li&gt;Multi-user systems. Actually, we do this today, in a sense, by using multi-core CPUs with multiple users over a network. But in the olden days this was typically multiple serial terminals. A typical system might have one master CPU, multiple slave CPUs, a disk controller card, a general I/O card and a &lt;em&gt;multiple serial-port card&lt;/em&gt;. Each terminal connected to one serial port and the operating system would provide a console interface and run programs on either the main CPU or a slave CPU as appropriate. Today's systems have most connections dedicated, in which case one user = one CPU, and if that one user needs a faster CPU then they upgrade to a newer machine. The exceptions (sometimes in offices, but especially in data centers) are networked machines where if you need more power you don't upgrade the tiny little box, you throw more boxes and/or bigger boxes at the problem.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The other big difference is motherboard vs. passive backplane. The S-100 was the classic passive backplane system. It was essentially a spur-of-the-moment design for the Altair, but it lasted quite a while. 8080 2 MHz not fast enough, replace with a Z80 4 MHz. But possibly upgrade your RAM at the same time. Need more ports, swap the I/O card. Need more RAM on an 8086, add another card or trade in the 256K card for 1M card. But that had limits. Looking to CompuPro again, when they came out with an 80386 CPU, they couldn't get the CPU-RAM interface fast enough while remaining anywhere close to S-100 specs. So instead of making the existing cards useless, they came up with a second bus &lt;strong&gt;connecting only the 80386 CPU and RAM cards&lt;/strong&gt; but continued using the existing bus for slave CPUs and I/O.&lt;/p&gt;&#xA;&lt;p&gt;One more factor is that the latest and greatest (and fastest) CPU chips are a large part of the cost of a new system. That was not always the case, but it is today. So unless you have a high-end laptop (in which case your options are limited anyway), almost always the most cost-effective thing to do is to get an entirely new computer with a super-fast CPU &amp;amp; RAM and reuse your monitor(s) and other external peripherals and, if you already have large/fast SSDs, your storage.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="15334" LastEditDate="2021-02-02T15:36:20.347" LastActivityDate="2021-02-02T15:36:20.347" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17822" PostTypeId="1" AcceptedAnswerId="17825" CreationDate="2021-02-02T16:30:10.037" Score="4" ViewCount="439" Body="&lt;p&gt;I have a &lt;a href=&quot;https://en.wikipedia.org/wiki/SYM-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;SYM-1&lt;/a&gt; with the following memory configuration:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VE8TX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VE8TX.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;How much memory is that? Those all appear to be &lt;code&gt;L2114UCE&lt;/code&gt; chips, which are described as &amp;quot;Static 1024x4 NMOS RAM&amp;quot;, but I'm not sure how to read that &amp;quot;1024x4&amp;quot;. Does that mean 4KB each, meaning that this is a 64KB system?&lt;/p&gt;&#xA;" OwnerUserId="7235" LastActivityDate="2021-02-02T17:07:21.923" Title="How much memory does this SYM-1 have?" Tags="&lt;memory&gt;&lt;6502&gt;&lt;sym-1&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17823" PostTypeId="5" CreationDate="2021-02-02T16:32:07.767" Score="0" Body="&lt;p&gt;The SYM-1 is a single board &amp;quot;trainer&amp;quot; computer produced by Synertek Systems Corp in 1975.&lt;/p&gt;&#xA;&lt;p&gt;The SYM-1 is a close copy of the popular MOS Technology KIM-1 system, with which it was compatible to a large extent. Compared to the KIM-1, enhancements included the ability to run on a single +5 volt power supply, an enhanced monitor ROM, three configurable ROM/EPROM sockets, RAM expandable on board to 4 KB, an RS-232 serial port, and a &amp;quot;high speed&amp;quot; (185 bytes/second, the KIM-1 supported about 8 bytes/second) audio cassette storage interface. It also featured on-board buffer circuits to ease interfacing to &amp;quot;high voltage or high current&amp;quot; devices.&lt;/p&gt;&#xA;&lt;p&gt;(via &lt;a href=&quot;https://en.wikipedia.org/wiki/SYM-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="7235" LastEditorUserId="7235" LastEditDate="2021-02-04T18:07:26.620" LastActivityDate="2021-02-04T18:07:26.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17824" PostTypeId="4" CreationDate="2021-02-02T16:32:07.767" Score="0" Body="The SYM-1 is a single board &quot;trainer&quot; computer produced by Synertek Systems Corp in 1975, built around the 6502 processor." OwnerUserId="7235" LastEditorUserId="7235" LastEditDate="2021-02-02T18:27:23.600" LastActivityDate="2021-02-02T18:27:23.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17825" PostTypeId="2" ParentId="17822" CreationDate="2021-02-02T16:53:10.880" Score="5" Body="&lt;p&gt;Those chips are 1024x4, meaning 1024 locations, each holding 4 bits. They could be arranged two by two for an 8 bit computer.&lt;/p&gt;&#xA;&lt;p&gt;In the past, there existed 12-bit computers, 36-bit computers and other weirdos, so memory chips were commonly made narrower so that you could build them together for your particular data width. Even 1-bit RAM wasn't unusual. This is what the &amp;quot;x4&amp;quot; means. It's 4 bits per memory location.&lt;/p&gt;&#xA;&lt;p&gt;The very similar chip, &lt;code&gt;MM2114N&lt;/code&gt; is used in the Commodore 64 for the Color RAM, a region occupying 1 kilobyte, but only the lower half of each byte actually gets stored.&lt;/p&gt;&#xA;&lt;p&gt;From what I can see, you've got sixteen of them, which could logically be 8 kilobytes.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-02-02T17:06:44.390" LastActivityDate="2021-02-02T17:06:44.390" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="17826" PostTypeId="2" ParentId="17822" CreationDate="2021-02-02T17:07:21.923" Score="4" Body="&lt;p&gt;1024x4 means 1k long (so 10 address lines) by 4 bits wide, so you need 2 chips to make 1K bytes. Typically one would be for the high 4 bits and the other for the low 4 bits.&lt;/p&gt;&#xA;&lt;p&gt;So you have 8K bytes of memory here&lt;/p&gt;&#xA;" OwnerUserId="3708" LastActivityDate="2021-02-02T17:07:21.923" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17827" PostTypeId="2" ParentId="8946" CreationDate="2021-02-03T00:14:25.640" Score="8" Body="&lt;p&gt;If you want to know &lt;em&gt;exactly&lt;/em&gt; how big the classic 1960s and 1970s IBM mainframes were, see the &lt;a href=&quot;http://bitsavers.org/pdf/ibm/360/fe/C22-6820-8_System_360_Installation_Manual_-_Physical_Planning.pdf&quot; rel=&quot;noreferrer&quot;&gt;System/360 Physical Planning&lt;/a&gt; and &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/370/fe/GC22-7004-14_370_Installation_Manual_Physical_Planning_Jun85.pdf&quot; rel=&quot;noreferrer&quot;&gt;System/370 Physical Planning&lt;/a&gt; guides. They give complete measurements of every part of the system.&lt;/p&gt;&#xA;&lt;p&gt;Consider the IBM System/360 Model 85, a large (but not the largest) mainframe from 1964. The processor itself took up 12 refrigerator-sized cabinets, weighing a total of 5.5 tons and occupying an area 28 feet by 24 feet.&lt;/p&gt;&#xA;&lt;p&gt;The entire computer installation was much larger than the CPU itself, since you'd have card readers, disk storage units, numerous tape drives, I/O controllers, stand-alone cabinets of memory, and so forth. Adding 2 megabytes of memory to the system used the IBM 2385 Processor Storage unit, a set of 11 cabinets that weighed 7 tons and took up 23 feet by 23 feet.&lt;/p&gt;&#xA;&lt;p&gt;To answer the original question, mainframes could fill anything from a large office to an entire floor. Filling an entire building was pretty unusual except for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Semi-Automatic_Ground_Environment&quot; rel=&quot;noreferrer&quot;&gt;SAGE&lt;/a&gt; air defense system or maybe an NSA installation.&lt;/p&gt;&#xA;" OwnerUserId="4158" LastActivityDate="2021-02-03T00:14:25.640" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17828" PostTypeId="1" AcceptedAnswerId="17829" CreationDate="2021-02-03T01:00:12.643" Score="5" ViewCount="290" Body="&lt;p&gt;The device I'm using (a SYM-1, probably c. 1979) has a stack of &lt;code&gt;L2114-UCE&lt;/code&gt; 1024x4 static RAM chips (&amp;quot;2114 static, TTL in/out 1024x4 N-MOS RAM&amp;quot;, the -UCE means &amp;quot;450ns access time, 315mW max. power dissipation&amp;quot;).&lt;/p&gt;&#xA;&lt;p&gt;They get hot enough that they're just about at the &amp;quot;ow, that's really hot!&amp;quot; point. Are there compatible replacements for these chips that would produce less heat output?&lt;/p&gt;&#xA;" OwnerUserId="7235" LastEditorUserId="15334" LastEditDate="2021-02-03T15:13:19.030" LastActivityDate="2021-02-04T00:58:42.447" Title="Modern (cooler) replacements for vintage static RAM chips" Tags="&lt;ram&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17829" PostTypeId="2" ParentId="17828" CreationDate="2021-02-03T01:25:46.387" Score="6" Body="&lt;p&gt;Sure, like using a single &lt;a href=&quot;https://en.wikipedia.org/wiki/6264&quot; rel=&quot;nofollow noreferrer&quot;&gt;6264&lt;/a&gt;. These are usually CMOS, so with a (for nowadays) low clock rate as with the SYM they shouldn't produce much heat. It is a 64 KiBit chip, so the whole 8 KiB do come in one package. For all usage it's as similar to the ones used as possible. In fact, some can live from a few µA, so buffering is a possibility.&lt;/p&gt;&#xA;&lt;p&gt;Finding pin compatible replacement will be a bit harder, as for these small sizes x4 versions aren't common anymore.&lt;/p&gt;&#xA;&lt;p&gt;Also, I'm not really sure why one would want to replace them, except for increasing size (like with a 32 KiB 62256 type). Their temperature might seem high by today's standard, but I bet it's still way within spec. Getting hot is what NMOS does :). The relation of computing power and cower consumption was simply more visible, isn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-03T18:31:18.307" LastActivityDate="2021-02-03T18:31:18.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17830" PostTypeId="1" AcceptedAnswerId="17835" CreationDate="2021-02-03T03:56:25.380" Score="5" ViewCount="944" Body="&lt;p&gt;I have been using the following code to get comm port addresses from BIOS in QuickBasic 4.5:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PRINT &amp;quot;Hex addresses for ports 0 to 3 from BIOS.&amp;quot;&#xA;DEF SEG = 0&#xA;FOR x = 0 TO 3&#xA;    z = &amp;amp;H400 + x * 2&#xA;    p = PEEK(z)&#xA;    q = PEEK(z + 1)&#xA;    a = q * &amp;amp;H100 + p&#xA;   PRINT &amp;quot; COM&amp;quot; + STR$(x); &amp;quot;: &amp;quot; + HEX$(a)&#xA;NEXT&#xA;DEF SEG&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;However when I increase &lt;code&gt;FOR x = 0 to 3&lt;/code&gt; into &lt;code&gt;FOR x = 0 to 7&lt;/code&gt; it returns x378 for 4 (which is &lt;code&gt;LPT1&lt;/code&gt;) and 5, 6, and 7, return 0 and I need a way to read comm ports 4, 5, 6, and 7.&lt;/p&gt;&#xA;&lt;p&gt;I know in Control Panel → Device Manager → Ports I can read them from the resources tab, but I want my program to read them. Any help?&lt;/p&gt;&#xA;" OwnerUserId="20712" LastEditorUserId="15334" LastEditDate="2021-02-18T08:48:43.790" LastActivityDate="2021-02-20T20:35:15.900" Title="How can I read COM port addresses from BIOS in QuickBasic 4.5?" Tags="&lt;ibm-pc&gt;&lt;basic&gt;&lt;serial&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17831" PostTypeId="2" ParentId="17830" CreationDate="2021-02-03T05:23:50.693" Score="6" Body="&lt;p&gt;The BIOS data area only has room for addresses of four com ports, at 40:00 through 40:07.&lt;/p&gt;&#xA;&lt;p&gt;More serial ports would be driven by some device driver with some other place to store the address(es) and IRQ(s).&lt;/p&gt;&#xA;" OwnerUserId="808" LastActivityDate="2021-02-03T05:23:50.693" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17832" PostTypeId="2" ParentId="17830" CreationDate="2021-02-03T05:35:43.007" Score="13" Body="&lt;p&gt;The BIOS list only contains addresses of up to four standard 8250-type COM ports found at boot at the standard addresses.&lt;/p&gt;&#xA;&lt;p&gt;It will not contain more than four ports, it will not contain any non-8250 type COM ports, and COM ports at non-standard addresses, such as PCIE COM ports, and USB COM ports which don't have an IO address to begin with. It will not contain ports only found by Windows drivers etc.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-02-03T07:24:56.217" LastActivityDate="2021-02-03T07:24:56.217" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17833" PostTypeId="5" CreationDate="2021-02-03T07:26:54.040" Score="0" Body="&lt;p&gt;You can use this tag to ask &lt;em&gt;why&lt;/em&gt; a historical item of hardware or software was designed a certain way and how else it could have been designed: what were the design considerations, which use cases were targeted and what trade-offs constrained the design.&lt;/p&gt;&#xA;&lt;p&gt;Keep in mind that design choices that may seem obvious now need not have been so at the time the choices were made. Be aware of hindsight bias.&lt;/p&gt;&#xA;&lt;p&gt;Additionally, objective, explicit evidence of design justifications is, unfortunately, often enough scant to nonexistent. This means that answers will often necessarily be speculative to one extent or another. Even if you are willing to accept this, you should encourage answerers to provide evidence for their claims, and to appropriately mark the extent to which their answers are speculative or rely on incomplete evidence.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="15334" LastEditDate="2021-03-28T15:45:03.087" LastActivityDate="2021-03-28T15:45:03.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17834" PostTypeId="4" CreationDate="2021-02-03T07:26:54.040" Score="0" Body="Justifications and trade-offs of historical hardware and software designs, and their possible alternatives." OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-03T09:36:56.557" LastActivityDate="2021-02-03T09:36:56.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17835" PostTypeId="2" ParentId="17830" CreationDate="2021-02-03T09:51:06.483" Score="13" Body="&lt;p&gt;Well, this is to be expected; the BIOS Data Area has only four slots for I/O addresses of serial ports, with slots for parallel ports immediately following. In &lt;a href=&quot;http://www.oldlinux.org/Linux.old/docs/interrupts/inter61/MEMORY.LST&quot; rel=&quot;nofollow noreferrer&quot;&gt;the &lt;code&gt;MEMORY.LST&lt;/code&gt; file from Ralf Brown’s&lt;/a&gt;, we can find the following entries&lt;sup&gt;0&lt;/sup&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;MEM 0040h:0000h - BASE I/O ADDRESS OF FIRST SERIAL I/O PORT &lt;br /&gt;&#xA;MEM 0040h:0002h - BASE I/O ADDRESS OF SECOND SERIAL I/O PORT &lt;br /&gt;&#xA;MEM 0040h:0004h - BASE I/O ADDRESS OF THIRD SERIAL I/O PORT &lt;br /&gt;&#xA;MEM 0040h:0006h - BASE I/O ADDRESS OF FOURTH SERIAL I/O PORT &lt;br /&gt;&#xA;MEM 0040h:0008h - BASE I/O ADDRESS OF FIRST PARALLEL I/O PORT &lt;br /&gt;&#xA;MEM 0040h:000Ah - BASE I/O ADDRESS OF SECOND PARALLEL I/O PORT &lt;br /&gt;&#xA;MEM 0040h:000Ch - BASE I/O ADDRESS OF THIRD PARALLEL I/O PORT &lt;br /&gt;&#xA;MEM 0040h:000Eh - BASE I/O ADDRESS OF FOURTH PARALLEL I/O PORT (pre-PS/2) &lt;br /&gt;&#xA;MEM 0040h:000Eh - SEGMENT OF EXTENDED BIOS DATA SEGMENT (PS/2, newer BIOSes)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If the machine has more serial ports than can fit in the BDA, the base I/O port address will have to be obtained in some other way.&lt;sup&gt;1&lt;/sup&gt; Or perhaps not at all: it may be possible to access such a port via a DOS driver (by opening a handle to the COM device file and using DOS system calls to interact with it) or interrupt &lt;code&gt;&amp;amp;h14&lt;/code&gt; (though in BASIC that is only possible by calling assembly code, e.g. via &lt;code&gt;CALL ABSOLUTE&lt;/code&gt;). Without knowing the specific device which provides the ports, it’s not feasible to say much more, or explain how Windows manages to discover those ports.&lt;/p&gt;&#xA;&lt;p&gt;However, the question seems to imply that the BASIC program is run in a DOS box under Windows. If that’s the case, it’s worth remembering that DOS boxes are virtualised environments that don’t have direct access to hardware anyway: I/O port traffic is handled by the DOS virtual machine and passed to the appropriate Windows driver, which may map it to a completely different device. This means that the I/O ports available in the DOS box do not have to correspond to the same I/O ports that the host system uses natively. But it also gives us another alternative: one may simply try reassigning the serial port number to a lower one to make it available with the expected device name and I/O address in the DOS box. (I have not actually tried this myself, but I know that the port number can be reassigned for at least some devices.)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;0&lt;/sup&gt; The listing uses offsets from segment &lt;code&gt;0040h&lt;/code&gt; instead of segment zero, but that’s just different notation for the same physical address. The use of this segment base to access the BIOS Data Area is customary (and beneficial, since for example the keyboard buffer pointers stored in the BDA are relative to this segment base), but not mandatory; it’s just as often that the BDA is accessed via segment zero, for example &lt;a href=&quot;https://github.com/cirosantilli/ralf-brown-interrupt-list/blob/master/inter61c/MEMORY.LST#L2607-L2609&quot; rel=&quot;nofollow noreferrer&quot;&gt;the VBE version 3 protected-mode interface requires a selector for accessing the BDA as-if via segment zero&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; And that’s assuming it’s an 8520-compatible UART accessible over the ISA/LPC bus in the first place; say, RS-232 adapters over USB have to be operated in a completely different manner.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-20T20:35:15.900" LastActivityDate="2021-02-20T20:35:15.900" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17836" PostTypeId="1" CreationDate="2021-02-03T17:05:13.443" Score="2" ViewCount="211" Body="&lt;p&gt;The VIC-II and SID chips in the C64/128 are prone to over-heating and are rather expensive to replace nowadays. Some other ICs in these machines may have the same issue.&lt;/p&gt;&#xA;&lt;p&gt;An &lt;em&gt;unmodified&lt;/em&gt; machine includes a large metal RF shield which usually performs the duty of being a heat sink for VIC-II, SID, and other chips. &lt;em&gt;However, the RF shield is frequently missing from machines that have been damaged, worked on, modified, refurbished, etc.&lt;/em&gt; Therefore, that heat sink is also gone. I also question whether it was ever a very good heat sink to begin with, or just another way for Commodore to control costs.&lt;/p&gt;&#xA;&lt;p&gt;What is a reliable modern replacement for the original RF shield's heat dissipation function? Which chips in the C64 and C128 should have such a heat sink installed?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2021-02-03T17:33:45.677" Title="Modern heat sinks for Commodore C64/C128" Tags="&lt;hardware&gt;&lt;commodore-64&gt;&lt;repair&gt;&lt;commodore-128&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17837" PostTypeId="2" ParentId="17836" CreationDate="2021-02-03T17:33:45.677" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Modern heat sinks&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I assume this is about &lt;em&gt;heat spreaders&lt;/em&gt;, as that is what they do.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What is a reliable modern replacement&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Any one available at the usual stores will do it&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Which chips in the C64 and C128 should have such a heat sink installed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;All may benefit, as they are NMOS and thus heating.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;It's about the surface size - larger surface to radiate the heat results in cooler chip temperature. In reality a plate with fins placed in the middle of an IC will get the most. Already a small one does make a noticeable difference.&lt;/p&gt;&#xA;&lt;p&gt;The metal used should provide a good thermal conduction like:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Diamond (1000 Watt per Meter per Kelvin))&lt;/li&gt;&#xA;&lt;li&gt;Copper (400)&lt;/li&gt;&#xA;&lt;li&gt;Aluminium (250)&lt;/li&gt;&#xA;&lt;li&gt;Iron (100)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As it's about getting the heat from chips to radiating fins.&lt;/p&gt;&#xA;&lt;p&gt;A darkened surface increases radiation. Although the darkening matter should as thin as possible - at least between chip and carrier, as it's an additional barrier reducing thermal transfer.&lt;/p&gt;&#xA;&lt;h2&gt;Important&lt;/h2&gt;&#xA;&lt;p&gt;Anything surface temperature (without heat spreader) less than 20 degree above environment is not worth the effort.&lt;/p&gt;&#xA;&lt;h2&gt;Maximum-Hack:&lt;/h2&gt;&#xA;&lt;p&gt;Dig thru your parts box and see if you can find some old 386 / 486 / chipset heat spreaders with fan. They are still small enough to fit inside a C64 and will get everything way down.&lt;/p&gt;&#xA;&lt;p&gt;Similar modern RAM heat spreaders can be used across several chips (like the RAM)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-02-03T17:33:45.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17838" PostTypeId="2" ParentId="17792" CreationDate="2021-02-03T17:43:40.107" Score="6" Body="&lt;p&gt;I will give you an answer from a programmer's point of view:&lt;/p&gt;&#xA;&lt;p&gt;An EEPROM is called a ROM despite being writable because its INTERFACE is that of a ROM.&lt;/p&gt;&#xA;&lt;p&gt;In other words, from the point of view of your board, and from the point of view of software running on the board, it is memory that cannot be written to, therefore it is ROM.&lt;/p&gt;&#xA;&lt;p&gt;The fact that we can actually power off, plug it out, reprogram it, plug it back in, and power back up, is an implementation detail, and it is hidden from the concerned parties: neither the board, nor the software, are alive to witness this happening.&lt;/p&gt;&#xA;" OwnerUserId="20719" LastActivityDate="2021-02-03T17:43:40.107" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17839" PostTypeId="2" ParentId="17828" CreationDate="2021-02-03T17:46:39.620" Score="3" Body="&lt;p&gt;A typical NMOS SRAM chip can be viewed as having two buckets for each bit, both of which have water slowly flowing into them, and either of which, when appreciably filled, will opens the drain of the other (draining a bucket will close the other bucket's drain).  Writing a bit is accomplished by holding the drain on one of the buckets open long enough that its contents will drain, the other bucket's valve will close, and that other bucket will fill enough to open the valve on the first one.  Once that has happened, the bucket that had been drained will remain empty because its valve is open, while the other bucket will remain full (keeping the former bucket's drain open) because its own valve is closed and any water that might leak out will be constantly replenished.&lt;/p&gt;&#xA;&lt;p&gt;The designers of a chip could reduce the amount of power it consumes continuously by reducing the rate at which water constantly flows into the buckets, but that would increase the length of time required to write a bit.  Instead, many chips are designed to let a substantial amount of water flow through the buckets, so as to increase the rate at which a bucket will fill after its partner is drained.&lt;/p&gt;&#xA;&lt;p&gt;While the amount of heat generated by such chips may seem abnormal by today's standards, the chips run hot because the designers were willing to accept a high amount of energy waste in order to maximize performance.  Unless one has a need to minimize energy usage or heat generation, one should simply recognize that the devices were designed to run hot as a normal operating condition.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="340" LastEditDate="2021-02-03T19:53:00.793" LastActivityDate="2021-02-03T19:53:00.793" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17840" PostTypeId="1" CreationDate="2021-02-03T18:11:28.730" Score="3" ViewCount="102" Body="&lt;p&gt;I currently enjoy using a Windows 98 PC I built using parts I got either for free or very cheap. One of those parts is a sligthtly modern case - the cheapest one I could find that has a 5.25&amp;quot; and 3.5&amp;quot; bay (although it turns out the 3.5&amp;quot; bay was not meant for a floppy drive but that's besides the point...). The case has front audio via AC'97, but I can never use that, because while the motherboard can support it, I can't use its onboard sound (and I have tried. If anyone is curious, the sound chip is a Realtek ALC655). Instead, I use a Sound Blaster Live!, &lt;a href=&quot;https://www.youtube.com/watch?v=z-HiLp5p820&quot; rel=&quot;nofollow noreferrer&quot;&gt;which is shown off in this video.&lt;/a&gt; That card doesn't have an AC'97 connector (go figure...) so I have a 6 foot aux cable that goes to the card that allows me to plug in headphones while not having the PC on the desk. The cable solution works...fine, but I'd really like to use that front panel audio. I don't even care about the microphone port, I'd just like audio.&lt;/p&gt;&#xA;&lt;p&gt;Is there a safe way to convert AC'97 to any of the standards used on the card? I'd prefer not to use the Soundblaster interface because it's not convienent, but I will if I have to. If I can get the onboard sound working, or if I can get a card that supports Windows 98 and AC'97, that would also be an acceptable solution&lt;/p&gt;&#xA;" OwnerUserId="18736" LastActivityDate="2021-02-03T18:11:28.730" Title="Converting AC'97 to a standard that can be used by my Soundblaster" Tags="&lt;sound&gt;&lt;soundblaster&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17841" PostTypeId="1" AcceptedAnswerId="17844" CreationDate="2021-02-03T18:13:50.643" Score="9" ViewCount="648" Body="&lt;p&gt;Yesterday I was looking for a way to implement a delay loop on the C64.&#xA;I came across this page: &lt;a href=&quot;https://www.c64-wiki.com/wiki/TIME&quot; rel=&quot;noreferrer&quot;&gt;https://www.c64-wiki.com/wiki/TIME&lt;/a&gt;&#xA;At the bottom of the page there is a code fragment that waits for a specified number of seconds.&#xA;This code works, but I can't for the life of me understand how.&#xA;I imitated the code in CBM prg Studio as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 t=2&#xA;20 t0=ti&#xA;30 ? &amp;quot;start &amp;quot; t0&#xA;40 for t=t0+t*60 to t&#xA;50   t=ti&#xA;60   t=t-5184E3*(t&amp;lt;t0)&#xA;70 next&#xA;80 ? &amp;quot;end &amp;quot;t&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Line 40 is the one that confuses me. When you enter the loop, &lt;code&gt;t0+t*60&lt;/code&gt; evaluates to a value that, in this program, is guaranteed to be greater than &lt;code&gt;t&lt;/code&gt;. Still the loop will execute 1 time, just like with &lt;code&gt;FOR 5 TO 2&lt;/code&gt;. So far so good.&lt;/p&gt;&#xA;&lt;p&gt;Then &lt;code&gt;t&lt;/code&gt; is set to &lt;code&gt;TIME&lt;/code&gt; and is corrected in case of a 24 hour wrap-around. I also understand that.&lt;/p&gt;&#xA;&lt;p&gt;But then you get to the next &lt;code&gt;TO t&lt;/code&gt;. Why do we stay in the loop until &lt;code&gt;t0+2*60&lt;/code&gt;? I would assume that &lt;code&gt;TO t&lt;/code&gt; either means &lt;code&gt;TO 2&lt;/code&gt; (t's initial value) or &lt;code&gt;TO &amp;lt;whatever t's value is&amp;gt;&lt;/code&gt;. In either case, I'd think that the loop would end immediately.&lt;/p&gt;&#xA;" OwnerUserId="20718" LastEditorUserId="15334" LastEditDate="2021-02-21T16:15:54.193" LastActivityDate="2021-02-21T16:15:54.193" Title="Delay loop in BASIC" Tags="&lt;commodore-64&gt;&lt;basic&gt;&lt;delay-loop&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17842" PostTypeId="2" ParentId="17828" CreationDate="2021-02-03T18:43:07.863" Score="4" Body="&lt;p&gt;Just about any &amp;quot;modern&amp;quot; 8-bit SRAM chip can be used to substitute for these, with the understanding that the pinout will be different and you'll need fewer of them.  There are inexpensive 2Kx8 devices which will substitute nicely for up to four 1Kx4 originals, and 8Kx8 devices that will substitute for as many as sixteen.&lt;/p&gt;&#xA;&lt;p&gt;In general this will also obviate the need for some decoding circuitry.  In the SYM-1 specifically, there's a 74LS138 interposed between the 3-NOR gate detecting the bottom 8K of address space, and the four pairs of 2114 SRAM sockets; the four lower outputs of the '138 drive &lt;code&gt;/CS&lt;/code&gt; of one pair of sockets each, while the others appear to lead only to the expansion connector.  A single 6264 SRAM (8Kx8) could replace both the 74LS138 and the eight socketed 2114, to provide twice the usable RAM of the standard configuration.  It should be straightforward to build a one or two-layer PCB daughtercard which plugs into the original sockets to obtain all the necessary signal lines to lead them to a 6264.&lt;/p&gt;&#xA;&lt;p&gt;Any surplus address or data lines can be tied high or low - directly for address lines, through a 1K resistor for data.  The original devices do not have &lt;code&gt;/OE&lt;/code&gt; pins, so these can simply be tied to the &lt;code&gt;/CE&lt;/code&gt; or &lt;code&gt;/CS&lt;/code&gt; pins (same function, just different possible names) on the replacements.  If there is an active-high &lt;code&gt;CE2&lt;/code&gt; (as on the 6264), tie it high.&lt;/p&gt;&#xA;&lt;p&gt;Power consumption on modern CMOS SRAM devices is negligible, compared to the rest of a predominantly NMOS/LSTTL based system.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2021-02-04T00:58:42.447" LastActivityDate="2021-02-04T00:58:42.447" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17843" PostTypeId="2" ParentId="17841" CreationDate="2021-02-03T19:07:56.593" Score="6" Body="&lt;pre&gt;&lt;code&gt;40 for t=t0+t*60 to t&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;... will repeat at least once and then for as long as &lt;code&gt;t0+t*60&lt;/code&gt; (i.e. start time + duration) does not equal &lt;code&gt;t&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;captures &lt;code&gt;t0+t*60&lt;/code&gt; (the desired end time) such that &lt;code&gt;t&lt;/code&gt; can be reused; and&lt;/li&gt;&#xA;&lt;li&gt;after the first iteration, continuously tests &lt;code&gt;ti&lt;/code&gt; (which has been stored to &lt;code&gt;t&lt;/code&gt;) against the desired end time.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;i.e. Commodore's implementation of &lt;code&gt;for&lt;/code&gt; with an implicit &lt;code&gt;next&lt;/code&gt; captures the original variable value and updates its internal counter separately from the variable. So here you get: (i) set initial condition and perform once; (ii) continue until internal counter is equal to &lt;code&gt;t&lt;/code&gt;, a proxy for &lt;code&gt;ti&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;ti&lt;/code&gt; is not directly usable as the target for a loop, being a special variable.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2021-02-03T19:13:58.583" LastActivityDate="2021-02-03T19:13:58.583" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="17844" PostTypeId="2" ParentId="17841" CreationDate="2021-02-03T19:37:24.403" Score="5" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;FOR T=&amp;lt;target value&amp;gt; TO T&lt;/code&gt; uses T as a temporary variable to store the target value inside the FOR stack frame, where it is used later to compare with the actual value of T after an iteration. This eliminates the need for a second, helper variable. Works whenever T is/can be set within the loop.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I imitated the code in CBM prg Studio as follows:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In my eyes this seems an even more confusing notation than the original code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;100 PRINT &amp;quot;START &amp;quot;TI$ : T=2.5: GOSUB 900 : PRINT &amp;quot;END TIME: &amp;quot;TI$&#xA;199 END&#xA;900 T0=TI: FOR T=T0+T*60 TO T : T=TI : T=T-5184E3*(T&amp;lt;T0) : NEXT : RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But then again, I'm maybe simply used to the way a PET worked :)&lt;/p&gt;&#xA;&lt;p&gt;But yeah, needs some knowledge about inner workings of (Microsoft) BASIC.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Line 40 is the one that confuses me. When you enter the loop, t0+t*60 evaluates to a value that, in this program, is guaranteed to be greater than t.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, it isn't, it's the same as T - or more exact the value of T when the loop is entered first. Note that:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;T is set as part of the FOR instruction to the evaluated expression after the equal sign.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;TO evaluates and stores the target value on the stack.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;A for-loop is iterated as long the actual value is lower or equal to the target value&lt;/li&gt;&#xA;&lt;li&gt;When comparing, it compares the actual value of T to the stored target value.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Step two is needed less for performance enhancement but to allow FOR loops with constant values like &lt;code&gt;FOR I = 1 TO 10&lt;/code&gt;. After all, there is no variable to store that but the stack frame itself.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But then you get to the next 'TO t'. Why do we stay in the loop until t0+2*60?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because the value to be compared against is not T, but T stored at the time the loop is entered, here T0+T*60.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I would assume that 'TO t' either means 'TO 2' (t's initial value) or 'TO &amp;lt;whatever t's value is&amp;gt;'.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, it's 'TO T' with the value of T at the time the TO gets executed, so after the initial assignment of T0+T*60.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In either case, I'd think that the loop would end immediately.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Only if the actual value of T is &lt;em&gt;above&lt;/em&gt; the limit given, as that's what FOR does. In this case, T is equal to the limit when entering the loop, so it gets executed once. This is the base to allow a &lt;code&gt;FOR I=1 TO 1&lt;/code&gt; loop to execute.&lt;/p&gt;&#xA;&lt;h2&gt;Execution in Detail&lt;/h2&gt;&#xA;&lt;p&gt;Let's see it step by step (leaving out framing):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;100 T=2.5&lt;/code&gt; - Set wait time to 2.5 seconds&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;GOSUB 900&lt;/code&gt; - Go and wait&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;900 T0=TI&lt;/code&gt; - Lookup actual time&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;FOR T=T0+T*60&lt;/code&gt; - Set T to the desired end time&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;TO T&lt;/code&gt; - Store the value of T as terminal value&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;T=TI&lt;/code&gt; - Set T to actual time (which &lt;em&gt;should&lt;/em&gt; be lower than taget time&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;T=T-5184E3*(T&amp;lt;T0)&lt;/code&gt; - Overflow correction&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;NEXT&lt;/code&gt; - Continue to iterate the loop if the (corrected) value of T is still lower than the saved target value.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;What's the Trick used?&lt;/h2&gt;&#xA;&lt;p&gt;Instead of having a second variable for the target value, which is never used within the loop it uses the internal storage within the FOR stack frame. This is quite handy in BASIC dialects without global variables, as the subroutine does not need/define any additional variable of its own.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Couldn't TI be Used Instead?&lt;/h2&gt;&#xA;&lt;p&gt;No, TI is not a real variable but a pseudo variable mirroring the time of day clock. So while TI can be used as target value in a FOR clause, like any other variable, the value stored would be the one at time of entrance to the loop. Also, this would make any overflow handling somewhat hard.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;But It Would Work With a GOTO Loop, Right?&lt;/h2&gt;&#xA;&lt;p&gt;Yes. Something around a core like this&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;900 T=TI+T0*60&#xA;910 IF TI &amp;lt; T THEN GOTO 910&#xA;920 RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;May work quite well (though need some fine tuning for overflow) - as usual, many ways lead to Rome.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;So All of This is Commodore Specific?&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;No&lt;/strong&gt;, it should work with any BASIC, not just MS supplied ones, it also complies to the ECMA-55 spec.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;BUT&lt;/strong&gt; there seem to be at least one BASIC (Locomotive, but that needs more testing) that works different.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All it needs is to adapt machine specific values. For example BBC BASIC offers a TIME pseudo variable with similar workings - except it's incremented 100 times a second (*1):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;100 PRINT &amp;quot;START &amp;quot;, TIME : T=2.5: GOSUB 900 : PRINT &amp;quot;END TIME: &amp;quot;,TIME&#xA;199 END&#xA;900 T0=TIME: FOR T=T0+T*100 TO T : T=TIME : NEXT : RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The BBC is an interesting case here, as its clock is not incremented monotone by 1 but by 5 or 6 (*2). The implied &lt;em&gt;greater than&lt;/em&gt; comparison of a FOR/NEXT loop does handle this right away.&lt;/p&gt;&#xA;&lt;p&gt;The very same code should as well work with the CPC's Locomotive BASIC, this time with a Factor of 300 (*2), but it doesn't (*3):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;900 T0=TIME: FOR T=T0+T*300 TO T : T=TIME : NEXT : RETURN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;(This is still under research)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Locomotive BASIC seems to assign the new value to T (as part of FOR), but then compares to the &lt;em&gt;previous&lt;/em&gt; value of T - as if that had been stored onto it's frame before the assignment gets evaluated. Quite a strange behaviour.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;How the Stack Frame for FOR is Structured&lt;/h2&gt;&#xA;&lt;p&gt;This &lt;em&gt;is&lt;/em&gt; Commodore specific, but other basics use similar structures.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Type Byte $81 to indicate a FOR entry&lt;/li&gt;&#xA;&lt;li&gt;Loop variable address (two bytes)&lt;/li&gt;&#xA;&lt;li&gt;Increment float (five bytes)&lt;/li&gt;&#xA;&lt;li&gt;Increment sign, 01 or FF (one byte)&lt;/li&gt;&#xA;&lt;li&gt;Target value, float (five bytes)&lt;/li&gt;&#xA;&lt;li&gt;Line number (two bytes)&lt;/li&gt;&#xA;&lt;li&gt;Return address (two bytes)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Time is only updated 18 times a second.&lt;/p&gt;&#xA;&lt;p&gt;*2 - 300 can easy be divided by 5 or 6 do produce 50 or 60 Hz to fit into frame timing for European or US/Japanese TV&lt;/p&gt;&#xA;&lt;p&gt;*3 - As &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17841/delay-loop-in-basic/17844?noredirect=1#comment61003_17844&quot;&gt;Scruss did find&lt;/a&gt; by testing the program with a real CPC 6128.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-05T02:27:13.790" LastActivityDate="2021-02-05T02:27:13.790" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17845" PostTypeId="2" ParentId="17841" CreationDate="2021-02-03T20:09:13.313" Score="0" Body="&lt;p&gt;From what I can gather, the code should be understood as if it read&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 t=2&#xA;20 t0=ti&#xA;30 ? &amp;quot;start &amp;quot; t0&#xA;40 t=t0+t*60 : t1=t&#xA;50 t=ti&#xA;60 t=t-5184E3*(t&amp;lt;t0)&#xA;70 t=t+1 : if t&amp;lt;=t1 then goto 50&#xA;80 ? &amp;quot;end &amp;quot;t&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where &lt;code&gt;t1&lt;/code&gt; is a hidden variable, invisible to your code. In other words, &lt;code&gt;FOR i = a TO b&lt;/code&gt; has neither of the two semantics you hypothesised: it &lt;em&gt;first&lt;/em&gt; performs &lt;code&gt;i = a&lt;/code&gt;, &lt;em&gt;then&lt;/em&gt; computes &lt;code&gt;b&lt;/code&gt; once and remembers the result for later. The &lt;code&gt;NEXT&lt;/code&gt; statement increments &lt;code&gt;i&lt;/code&gt;, compares it against the previously remembered value of &lt;code&gt;b&lt;/code&gt;, and goes back to the start of the loop body if the upper bound has not been exceeded yet.&lt;/p&gt;&#xA;&lt;p&gt;I don’t think there is a good way to test this purely from user code, since as far as I know, CBM BASIC does not support defining functions with side effects like later dialects of BASIC (i.e. &lt;code&gt;FUNCTION&lt;/code&gt;). You’d probably have to look it up in the interpreter’s source code to be sure. But since &lt;a href=&quot;https://www.pagetable.com/?p=774&quot; rel=&quot;nofollow noreferrer&quot;&gt;the source code of Microsoft BASIC for the 6502&lt;/a&gt; is not hard to find, this doesn’t seem so hopeless. In fact, a quick skim of the code reveals that the very first thing the &lt;code&gt;FOR&lt;/code&gt; subroutine does is delegate to &lt;code&gt;LET&lt;/code&gt; to immediately perform the initial assignment to the loop counter; only later is the upper bound of the loop evaluated and pushed on the stack, so that &lt;code&gt;NEXT&lt;/code&gt; may use it.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-04T06:10:38.640" LastActivityDate="2021-02-04T06:10:38.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17846" PostTypeId="2" ParentId="17792" CreationDate="2021-02-03T21:28:10.550" Score="2" Body="&lt;p&gt;The answer lies in the contrast between ROM and RAM.&#xA;When you turn a computer off, the RAM(random access memory) looses all it's contents. All variants of ROM do not.&#xA;Some are programmable more than once. &amp;quot;pure&amp;quot; ROM is programmed once at the factory and and can never change.&lt;/p&gt;&#xA;" OwnerUserId="20722" LastActivityDate="2021-02-03T21:28:10.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17847" PostTypeId="2" ParentId="13747" CreationDate="2021-02-04T06:19:01.573" Score="1" Body="&lt;p&gt;I definitely remember a 486DX/33 being fast enough to play MOD files using MOD4WIN while working in Word.&lt;/p&gt;&#xA;&lt;p&gt;It could handle some fairly high mixing settings (CD quality, with linear interpolation), so long as you didn't try to play a file with too many channels and had plenty of buffer space to cover busy points. In which case you'd get sound breaking up. If you disabled interpolation, I think it handled pretty-much anything you threw at it (which would have topped out at 32 channels, given the supported formats).&lt;/p&gt;&#xA;&lt;p&gt;MIDI offloaded the actual synthesis to whatever was on your sound card, so anything that'd run Windows 3.x with sound support could play it while working.&lt;/p&gt;&#xA;&lt;p&gt;Can't comment on compressed linear formats like MP3, as I didn't start using them until my Windows 98 or XP days.&lt;/p&gt;&#xA;" OwnerUserId="17800" LastActivityDate="2021-02-04T06:19:01.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17848" PostTypeId="1" AcceptedAnswerId="17849" CreationDate="2021-02-04T06:40:36.257" Score="6" ViewCount="192" Body="&lt;p&gt;Nowadays, in corporate offices where there are typically several office printers per floor, sending a file to a printer does not result in any additional pages identifying the print job, at least by default; it is expected that people would walk to the printer immediately and will be able to find their printouts and to leave other people's jobs alone, without wasting paper for cover pages.&lt;/p&gt;&#xA;&lt;p&gt;I vaguely remember the time in the late 80s or early 90s when SunOS or an early version of Solaris would, by default, print a cover, or &amp;quot;header&amp;quot;, page with the user name, the date and time when the job was submitted, the file name or &lt;code&gt;(stdin)&lt;/code&gt;, etc. Except the user name, most of that information was pretty much useless. A remnant of the past, perhaps, when it was useful?&lt;/p&gt;&#xA;&lt;p&gt;Earlier still, when mainframe operators had to correlate line printer output to batch jobs, how did the printout covers/trailers look like?  What kind of information for the operator and the user was included there?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2021-02-04T18:22:11.927" LastActivityDate="2021-02-04T20:42:25.820" Title="What information was present in line printer printout cover/trailer?" Tags="&lt;operating-system&gt;&lt;mainframe&gt;" AnswerCount="1" CommentCount="17" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17849" PostTypeId="2" ParentId="17848" CreationDate="2021-02-04T09:38:36.503" Score="13" Body="&lt;p&gt;That question is rather wide, as there wasn't &lt;em&gt;a&lt;/em&gt; mainframe OS but many. Equally important, headers were not made by the OS, but whatever SPOOL system was used. And there were many.&lt;/p&gt;&#xA;&lt;p&gt;Here a typical MVS(ish) cover page:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wOoE8.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wOoE8.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Depending on organisational structure of OS and SPOOL-system a &lt;em&gt;cover&lt;/em&gt; (or SPOOL) page may include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Job Name&lt;/li&gt;&#xA;&lt;li&gt;User Name&lt;/li&gt;&#xA;&lt;li&gt;Account Number&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These three were quite often 'enlarged' for easy selection&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Process ( Task) ID&lt;/li&gt;&#xA;&lt;li&gt;Computer Name&lt;/li&gt;&#xA;&lt;li&gt;OS name&lt;/li&gt;&#xA;&lt;li&gt;Job Date/Time&lt;/li&gt;&#xA;&lt;li&gt;Job Number&lt;/li&gt;&#xA;&lt;li&gt;Printout Date/Time&lt;/li&gt;&#xA;&lt;li&gt;SPOOL File Name and Type&lt;/li&gt;&#xA;&lt;li&gt;Spool-ID&lt;/li&gt;&#xA;&lt;li&gt;Spool-In and Spool-Out Times&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Some customer specific data may include items for delivery like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Recipients Name&lt;/li&gt;&#xA;&lt;li&gt;Department Name&lt;/li&gt;&#xA;&lt;li&gt;Room Number&lt;/li&gt;&#xA;&lt;li&gt;Phone Number&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Keep in mind, companies/institutions that had mainframes were usually not self employed in a basement, but rather large with many in house users. In early times IT departments did patch the spool system used in wired ways to modify header pages to fit their needs. In later years spool systems offered exit functions to enhance these pages in standardized ways.&lt;/p&gt;&#xA;&lt;p&gt;It's important to keep in mind that all these are meta data not data produced in the run itself. Such will always be part of the printed data, not any cover page - although, depending on OS, they can be put on separate pages as well (as part of the content printed).&lt;/p&gt;&#xA;&lt;p&gt;The distribution of data between a first and last page again depends on the OS, but as well on data type. Everything known ahead of printing is usually printed on the first page - which is in case of spooling is most information. The last page usually only repeats information.&lt;/p&gt;&#xA;&lt;p&gt;To support distribution/filing most spoolers usually did put all information on the upper half of the first page (see picture), leaving the lower half for enlarged text or alike. To understand this, it's necessary to imagine how folded paper works:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Every other page comes out face down.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;On which page a printout starts is random, so 50% end up with their first page on a page-down page (*1). For distribution (*2) and filing this is not really satisfying. With all information in the upper half, printouts that started on face-down page, could have their top page folded, so all data is again visible right away.&lt;/p&gt;&#xA;&lt;p&gt;Another way to handle this (as Another-Dave &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17848/what-information-was-present-in-line-printer-printout-cover-trailer/17849?noredirect=1#comment60957_17849&quot;&gt;mentions&lt;/a&gt;) was to simply print the (first) cover page twice. Now, independent of the way the paper came out, there was always at least one cover page printed on an 'even' page.&lt;/p&gt;&#xA;&lt;p&gt;Another detail about cover pages was that they usually started and ended with   multiple lines (usually 3) of &lt;code&gt;X&lt;/code&gt;. This proved helpful when a printed stack was to be separated into single jobs to be delivered to its owner. It made finding cover pages easy when flipping (scanning) thru the stack. More so, with less than perfect adjusted pages these X-ed lines covered the perforation, making it visible even without flipping thru.&lt;/p&gt;&#xA;&lt;p&gt;When high speed lasers came into use (late 70s/early 80s) this was turned into a black rectangle crossing from the cover page over to the next page, making it a definite feature to be seen right away.&lt;/p&gt;&#xA;&lt;p&gt;So yeah, there are less obvious details of hidden in plain sight :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Couldn't fit more page on the line :)&lt;/p&gt;&#xA;&lt;p&gt;*2 - Usually by young ladies (or, more often grumpy old man) pushing a cart with printouts, card stacks and tapes around the building.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-04T20:42:25.820" LastActivityDate="2021-02-04T20:42:25.820" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="17850" PostTypeId="2" ParentId="15752" CreationDate="2021-02-04T10:18:06.330" Score="3" Body="&lt;p&gt;You have to run the game without the MAMEUI, in order to do that, launch your game in cmd windows, with (example) mame64 pacman&#xA;This will give you an error if you don't have the correct cksum for the roms, but the game will start !&#xA;Enjoy !&#xA;Gerald (COY)&lt;/p&gt;&#xA;" OwnerUserId="20725" LastActivityDate="2021-02-04T10:18:06.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17851" PostTypeId="1" AcceptedAnswerId="17856" CreationDate="2021-02-04T17:38:49.333" Score="14" ViewCount="1987" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/VT52&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/VT52&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Like other early DEC terminals, the VT50 series were equipped with both an RS-232 port as well as a 20mA current loop, an older serial standard used with teletype machines that was more suitable for transmission over long runs of twisted-pair wiring.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&amp;quot;more suitable for transmission over long runs of twisted-pair wiring&amp;quot; sounds like a really big advantage! Yet it seems the 20mA current loop was replaced by RS-232. Why? What advantage did RS-232 have to outweigh this disadvantage relative to the older technology?&lt;/p&gt;&#xA;&lt;p&gt;(Eventually there would come a time when 'RS-232 is the industry standard' would be decisive. But for that time to come, it must first have passed through some years when it had to appeal on technical merit; a company like DEC that made both the computers and the terminals, would have no reason to care about the standard, if it could get better signal transmission by making both computers and terminals use a different format.)&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-05T17:55:15.420" Title="Advantage of RS-232 over 20mA current loop" Tags="&lt;terminal&gt;&lt;dec&gt;&lt;rs232&gt;&lt;vt52&gt;" AnswerCount="5" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17852" PostTypeId="1" AcceptedAnswerId="17877" CreationDate="2021-02-04T18:23:46.483" Score="8" ViewCount="202" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/VT05&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/VT05&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;the VT05 presented the user with an upper-case only ASCII character display of 20 rows by 72 columns.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;At first glance this seems a reasonably natural resolution, a little less than the later 80×24, but it feels natural that the very first model should have lower resolution.&lt;/p&gt;&#xA;&lt;p&gt;But fridge logic: where do the numbers come from? 72×20 = 1440, which is not close to a round number in binary, suggesting that it's not the sheer cost of memory that's the limiting factor. It's also not (or at least, not only) the achievable pixel clock rate; that would limit horizontal resolution but not vertical.&lt;/p&gt;&#xA;&lt;p&gt;Apparently this terminal used shift registers for its memory, which might be a clue. Did those come in some sort of oddball size that made 72×20 a reasonable fit, somehow?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="15334" LastEditDate="2021-02-04T18:46:39.643" LastActivityDate="2021-02-06T02:19:25.443" Title="Why was the VT05 resolution 72×20?" Tags="&lt;hardware&gt;&lt;terminal&gt;&lt;dec&gt;&lt;design-choices&gt;&lt;vt05&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17853" PostTypeId="2" ParentId="14307" CreationDate="2021-02-04T19:52:55.290" Score="2" Body="&lt;p&gt;I was one of the original developers of Oxxi's Novell Netware for Amiga. I worked for Oxxi from 1989-1996 and maintained their SuperBase project among others.&lt;/p&gt;&#xA;&lt;p&gt;I was living in Long Beach at the time, in Belmont Shores, and had some of my best experiences as a young software engineer working for this small company.&lt;/p&gt;&#xA;" OwnerUserId="20727" LastActivityDate="2021-02-04T19:52:55.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17854" PostTypeId="2" ParentId="17851" CreationDate="2021-02-04T21:33:27.287" Score="16" Body="&lt;p&gt;The current loop goes all the way back to classic telegraphy.  If there's current flowing, then that's one state.  If there's no current, then that's another state.  It's as simple as it can be.  You don't need to manipulate voltages.  That's the key.  Just turn a literal switch on and off.&lt;/p&gt;&#xA;&lt;p&gt;It also has problems.  Current losses are heavy even in short conductors.  You have to transfer enough power to run the equipment on the receiving end, such as the electromagnet in the receiving relay.  Also, if you're driving more than one device, you have to account for that.    For example, the first transatlantic telegraph cables had to run at tens of thousands of volts to get enough current on the far end.  As you go faster, it's also hard to get sharp edges of a signal without ringing, or it being &amp;quot;smoothed&amp;quot; out by transmission line effects.&lt;/p&gt;&#xA;&lt;p&gt;By comparison, RS-232 is all about &lt;em&gt;voltage&lt;/em&gt;.  The tiniest amount of power can signal either state, assuming it's at the correct voltage level.  A few milliamps can drive the input stages of many amplifiers all in parallel, so one RS-232 transmitter can be used in multidrop situations sometimes.&lt;/p&gt;&#xA;&lt;p&gt;You can also use longer and thinner conductors without major consideration.  Parasitic capacitances and resistances are much less of a concern.  You can clock it much faster.  For short wires, you can get into the kilobaud before you have to really worry about things like ringing.  Voltage-based signals can be balanced, and run on twisted pair, offering considerable noise immunity.&lt;/p&gt;&#xA;&lt;p&gt;The advantages of this in principle were understood early on.  It's much the same trade-off as between a baseband analogue signal and an modulated analogue signal on a carrier.  More robust, but more complex.  To do it, you have to be able to easily manipulate voltages, and that means electronics.  Vacuum tubes or transistors.  It was really the arrival of transistors that made RS-232 practical.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2021-02-04T21:33:27.287" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17855" PostTypeId="2" ParentId="17851" CreationDate="2021-02-04T22:05:12.270" Score="8" Body="&lt;p&gt;The advantage of RS-232 was that it was a formal standard that defined the electrical interface between equipment, down to handshake signal usage, voltage levels and connector pinout.&lt;/p&gt;&#xA;&lt;p&gt;Even though devices only implemented a relevant subset of the standard, and the implementations did vary and were sometimes not directly compatible, in general, only a simple breakout box to wire handshake and data signals correctly with jumper wires was needed to connect almost any two pieces of equipment together.&lt;/p&gt;&#xA;&lt;p&gt;Comparing that to the de-facto 20mA current loop interface, it only contained a single serial data signal without handshake signals, so only thing that could be detected on both ends is a break in the current loop wire. Connecting two pieces of equipment together was not as simple as connecting a pair of wires or connectors between them. The connectors varied, the pinouts varied, and the electrical I/O varied. Sometimes the current-limiting was in the transmitter, and sometimes in the receiver. Matching equipment together requires far more detailed knowledge of their internal electrical implementation to connect them properly, as there can be damage if neither end implements current limiting, or it may fail to work if both ends implement current limiting. External components, such as resistors, could be needed to match the two devices together.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2021-02-04T22:05:12.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17856" PostTypeId="2" ParentId="17851" CreationDate="2021-02-05T00:09:33.963" Score="19" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;It's a classic case of &lt;strong&gt;technological advancement vs. installed base&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the early days of electricity-based communication (i.e., telegraph and later TTY) there was no way to detect a voltage and, when needed, amplify it.&lt;/p&gt;&#xA;&lt;p&gt;Only current flowing in a closed circuit could be detected reliably—by having it run through a coil which in turn moved a lever—and amplified as well—by having that lever move a switch that closes another (next) circuit.&lt;/p&gt;&#xA;&lt;p&gt;At the time voltage based interfaced became possible it stand against a huge installed base - and existing equipment - using current interfaces. Computers, the ones promoting voltage based most, had to arrange with existing hardware, until gaining enough of a market to make it worthwhile to invest in new production.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Story&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;[All of the following is quite simplified as the steps taken and the associated learning curve was quite complex]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;When telegraph became a serious application, there was only one device that could transform an electric signal into something useful, a coil: When current is applied it generates a magnetic field, able to pull some magnetic lever, which in turn can be used to operate something, like a bell, a pen or whatever (*1).&lt;/p&gt;&#xA;&lt;p&gt;The magnetic field generated is independent of voltage, but directly proportional to the current flow (*2). To make it work, a certain amount of current is needed, such as 50 mA. As soon as that current flows, the coil will pull its lever. Since pulling with more force isn't a big issue, this also provides an inherent handling of overcurrent (within reason).&lt;/p&gt;&#xA;&lt;p&gt;So much for the receiving side. With the sender, voltage comes into play, as the amount of current delivered over a line is directly proportional to its length (its resistive load). So it was possible to calculate the needed voltage to for a given line length, which then was fixed for that relation. To simplify, companies tried to use only sections of equal length. Sections could be chained by combinations of coils and switches operated by the lever, switches that closed the circuit of the next section. Today we might call this a digital amplifier, but back then they choose &lt;em&gt;relay&lt;/em&gt;, like the familiar stations on a stage coach line.&lt;/p&gt;&#xA;&lt;p&gt;So genuine telegraph and teletype communication was current-based. Soon many lines were built in a real boom, setting up a current-based infrastructure. Of course there were many other improvements, from power generation to power control, insulation to wire size and quality. And not least an incredible variety of devices based on coils pulling levers—the integrated circuits of the 1890s.&lt;/p&gt;&#xA;&lt;p&gt;Current-based networks rule digital communication, and a huge number of users attract a good number of manufacturers supplying teletypes, teleprinter and other related equipment. &lt;strong&gt;Current-based interfaces were &lt;em&gt;the&lt;/em&gt; industry standard for such devices.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is essentially the situation at the advent of computers. By now voltage-based interfaces were possible, not least due to the transistor which drove computer development as well. They are simply the way a computer work internally, so using them with external components would have been a great thing—except, all easy-to-get terminal devices, aka teletypes, worked on current loop.&lt;/p&gt;&#xA;&lt;p&gt;So the logical solution was simply to add interfaces that change voltage-based (serial) signals to current loop and back. Of course that additional effort is not really wellcome, so establishing RS-232 was quite appreciated and by the mid 70s essentially done.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;more suitable for transmission over long runs of twisted-pair wiring&amp;quot; sounds like a really big advantage!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. Or only with sufficient effort. After all the primary output of (most) computers was voltage-based.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Yet it seems the 20mA current loop was replaced by RS-232. Why? What advantage did RS-232 have to outweigh this disadvantage relative to the older technology?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It simplifies interfaces on the computer side—especially if both sides are using the same, voltage-based logic. No converting interface needed. Everything gets simpler with voltage-based interfaces—not to mention that they also allow higher transmission rates.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;a company like DEC that made both the computers and the terminals, would have no reason to care about the standard, if it could get better signal transmission by making both computers and terminals use a different format.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The point is rather that even 'a company like DEC' started out small, so not really able to build a whole landscape right from start. In addition, there's the pesky customer, one that wants to use existing terminals, or ones available at a lower price from third party, or simply what they already have.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The folks back then became very innovative what to do with the little force a tiny lever pulled by a coil can operate.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Yes, the amount of current is of course related to the voltage applied, but that's beside the point.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-05T17:55:15.420" LastActivityDate="2021-02-05T17:55:15.420" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17857" PostTypeId="2" ParentId="17851" CreationDate="2021-02-05T02:47:07.497" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;a company like DEC that made both the computers and the terminals&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Actually a lot of DEC computers (PDP-8, PDP-11) had teletypes as I/O devices. Teletypes used 20ma current loops so DEC needed to provide such. Only later did DECWriters and the VT series of CRTs become the usual I/O.&lt;/p&gt;&#xA;" OwnerUserId="20733" LastActivityDate="2021-02-05T02:47:07.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17858" PostTypeId="2" ParentId="17841" CreationDate="2021-02-05T02:57:18.943" Score="2" Body="&lt;p&gt;Commodore BASIC has a quirk that it will run a &lt;code&gt;FOR&lt;/code&gt; loop at least once. This is what allows your &lt;code&gt;t&lt;/code&gt; variable to update at least once, allowing the loop to be valid.&lt;/p&gt;&#xA;&lt;p&gt;Raffzahn's explained how it works, but according to BASIC standards, it shouldn't. The ANSI/NBS Special Publication 500-70/1 test suite from 1980 go into great detail about how BASIC should behave. Particular tests &lt;a href=&quot;https://sourceforge.net/p/buraphakit/MB_git/ci/HEAD/tree/NBS/P047.BAS#l1&quot; rel=&quot;nofollow noreferrer&quot;&gt;FILE 47&lt;/a&gt; and &lt;a href=&quot;https://sourceforge.net/p/buraphakit/MB_git/ci/HEAD/tree/NBS/P048.BAS#l1&quot; rel=&quot;nofollow noreferrer&quot;&gt;FILE 48&lt;/a&gt; regarding &lt;code&gt;FOR&lt;/code&gt; loops fail on C64 BASIC, but are the mechanism by which this code works on Commodore machines.&lt;/p&gt;&#xA;&lt;p&gt;Microsoft fixed this quirk by the time of MBASIC-80 v5 (1981), as NBS compliance was deemed important enough to be mentioned in the manual for that interpreter.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2021-02-05T02:57:18.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17859" PostTypeId="1" AcceptedAnswerId="17860" CreationDate="2021-02-05T05:57:36.627" Score="17" ViewCount="1330" Body="&lt;p&gt;The SABRE airline reservation system went online in 1964, astonishing the world by being among other things the first large-scale interactive computing system.&lt;/p&gt;&#xA;&lt;p&gt;Once the IBM 3270 video terminals were introduced, of course SABRE would have started using those, but they were only introduced in 1971. What did it use for user interface before then?&lt;/p&gt;&#xA;&lt;p&gt;If the answer is a paper-based teletype, what was the actual workflow? What did data entry and viewing look like? There is a picture of an airline reservation desk in the SABRE entry near the end of &lt;a href=&quot;https://www.computerhistory.org/timeline/1964/&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; but it doesn't give a clear view of the user interface. Looks kind of like a paper teletype under something that is shaped like a video screen but isn't?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-05T07:18:33.600" Title="How did SABRE work interactively without screens?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;mainframe&gt;&lt;terminal&gt;&lt;sabre&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17860" PostTypeId="2" ParentId="17859" CreationDate="2021-02-05T06:24:20.040" Score="17" Body="&lt;p&gt;Wikipedia, unsurprisingly, gives incomplete information.  A number of important new technologies were developed as part of the five-year R&amp;amp;D of SABRE, including a disk drive capable of storing that many reservations, a new transaction-processing system, a frequency-modulation system to send data over the phone lines, and &lt;a href=&quot;https://www.wired.com/2012/07/sabre/?pid=134&amp;amp;viewall=true&quot; rel=&quot;noreferrer&quot;&gt;a new model of terminal, pictured here.&lt;/a&gt;  It was a teletype with a keyboard that printed both results and tickets on paper.  There were originally 1,500 of them.&lt;/p&gt;&#xA;&lt;p&gt;A retrospective in &lt;em&gt;Wired&lt;/em&gt; Magazine describes the workflow:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Take a tour of a SABRE console. The agent places a coded card with a list of flights to the destination airport to the right of the console's buttons. By pressing a &amp;quot;need&amp;quot; button, the agent queries SABRE's New York reservation center. The lights, located just right of the buttons, light up if the requested flight is unavailable. The agent uses the keyboard to enter the customer's name and personal information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;Original Answer&lt;/h2&gt;&#xA;&lt;p&gt;Wikipedia claims,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Teleprinters would be placed at American Airlines' ticketing offices to send in requests and receive responses directly, without the need for anyone on the other end of the phone. The number of available seats on the aircraft could be tracked automatically, and if a seat was available the ticket agent could be notified instantly. Booking simply took one more command, updating the availability and, if desired, could be followed by printing out a ticket.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This, however, is followed by [citation needed].  So take it for what it’s worth.&lt;/p&gt;&#xA;&lt;p&gt;Although you describe it as “the world’s first large-scale computing system,” it was based on SAGE, which the US Air Force used to dispatch interceptors.&lt;/p&gt;&#xA;" OwnerUserId="9120" LastEditorUserId="9120" LastEditDate="2021-02-05T07:18:33.600" LastActivityDate="2021-02-05T07:18:33.600" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17861" PostTypeId="1" AcceptedAnswerId="17862" CreationDate="2021-02-05T06:33:06.060" Score="17" ViewCount="1020" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Data_General_Nova&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Data_General_Nova&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Nova 1200 executed core memory access instructions (LDA and STA) in 2.55 microseconds (μs). Use of read-only memory saved 0.4 μs. Accumulator instructions (ADD, SUB, COM, NEG, etc.) took 1.55 μs, MUL 2.55 μs, DIV 3.75 μs, ISZ 3.15-4.5 μs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Okay, many of those instruction times look reasonable and unsurprising...&lt;/p&gt;&#xA;&lt;p&gt;... Wait a minute. Integer division in 3.75 microseconds? On a machine that took 1.55 microseconds for addition? How?! I understand you can make multiply fast if you are prepared to spend logic gates on a Wallace tree multiplier, but how could division possibly be made that fast? Even decades later, on chips that could easily throw millions of transistors at doing steps in parallel, divide was the one instruction that remained much slower than regular ALU operations. How did the Nova make it that fast in the 1970s?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-05T18:07:45.417" Title="How did the Nova 1200 divide so quickly?" Tags="&lt;hardware&gt;&lt;performance&gt;&lt;minicomputers&gt;&lt;data-general&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17862" PostTypeId="2" ParentId="17861" CreationDate="2021-02-05T09:30:26.387" Score="14" Body="&lt;p&gt;Not a complete answer, but a bit of information from the &lt;a href=&quot;http://www.bitsavers.org/pdf/dg/DG_NM-5_How_To_Use_The_Nova_Computers_Apr1971.pdf&quot; rel=&quot;noreferrer&quot;&gt;manual&lt;/a&gt; (for several Novas including the 1200):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The hardware multiply-divide option for the Nova is actually a peripheral device connected to the in-out&#xA;bus, although it has no flags or interrupt capability. It contains A, B and C registers, which are loaded and read by the standard IO transfer instructions, and which correspond in use respectively to accumulators 0, 1 and 2 with respect to the multiply and divide software routines and the processor hardware option in the other computers. [...]&lt;/p&gt;&#xA;&lt;p&gt;Following the IO instruction that starts the multiply or divide, the program must wait until the result is available in the A and B registers. Multiplication takes 6.4 μs, division takes either 6.8 or 7.2 μs depending on the operands. Of course the program can do something useful with the time (such as loading an accumulator for the next operation), but usually one simply gives a couple of no-ops to pass the time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That suggests that the division hardware is completely independent from the main CPU, does not use the ALU of the main CPU, and can use a clock as fast as the specialized hardware allows.&lt;/p&gt;&#xA;&lt;p&gt;According to Wikipedia, the Nova 1200 used a single 4-bit ALU. If they used multiple 4-bit ALUs in the multiplication/division hardware, and if you take into consideration that accumulator instructions have delays from other operations on top of using the single ALU four times to arrive at the 1.55 μs total, then the timing for division starts to fit.&lt;/p&gt;&#xA;&lt;p&gt;(To see how it actually worked, one would have to find documentation for the multiply-divide option, but I couldn't find any).&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="4025" LastEditDate="2021-02-05T18:07:45.417" LastActivityDate="2021-02-05T18:07:45.417" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17863" PostTypeId="1" CreationDate="2021-02-05T10:09:29.850" Score="3" ViewCount="185" Body="&lt;p&gt;I am looking for impressions, memoirs, articles, guidelines - everything that is possible about the unusual direction of software migration. I am interested in non-Unix related code, and preferably highly optimized code - perhaps even assembly language, and large enough software products - if this ever happened. It would be especially interesting if there was information about porting &lt;strong&gt;from Atari ST&lt;/strong&gt; / TOS / GEM (or at least Apple Macintosh) &lt;strong&gt;to DEC MicroVAX&lt;/strong&gt; / VAX/VMS / DECWindow something with an advanced interface and advanced work with I/O in real time.&lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2021-02-06T14:26:20.573" Title="Porting of software from the m68k family architecture to the DEC VAX" Tags="&lt;history&gt;&lt;software-development&gt;&lt;dec&gt;&lt;m68k&gt;&lt;vax&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17864" PostTypeId="2" ParentId="17851" CreationDate="2021-02-05T14:09:48.320" Score="5" Body="&lt;p&gt;Current loops are better for signal integrity for long runs because they are generally only &amp;quot;grounded&amp;quot; to a fixed potential at the current source. This means that there's no &amp;quot;ground loop&amp;quot; for stray magnetic fields to interact with. For electromechanical devices this is easy to implement: switches and relays don't need a common &amp;quot;ground&amp;quot; connection.&lt;/p&gt;&#xA;&lt;p&gt;It's more difficult with electronics, as it is much more convenient to have a common &amp;quot;ground&amp;quot;: isolated interfaces are more complicated. With electronics at only one end of the link, as when a Teletype was attached to a computer, it was OK. The common &amp;quot;ground&amp;quot; could be the computer's common, and the electromechanical Teletype needed none for its interface.&lt;/p&gt;&#xA;&lt;p&gt;But with electronics at both ends, a different approach was desirable, and RS232 was an early attempt, with large voltage swings and hysteresis to aid signal integrity. But the longer the link, the less well this works.&lt;/p&gt;&#xA;&lt;p&gt;In an extreme case, I've seen an RS232 interface board with a hole blown in it by the current around the ground loop due to a nearby lightning strike! The link was about 50 meters long, but current loop links can be much longer.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2021-02-05T14:09:48.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17865" PostTypeId="1" AcceptedAnswerId="17868" CreationDate="2021-02-05T16:05:49.797" Score="9" ViewCount="1033" Body="&lt;p&gt;The earliest business data processing systems were based on batch processing of punchcards. Prepare cards off-line, feed a batch of them through the computer. (Why does one so often hear of payroll, specifically, being an early application of such systems? It seems to me this is partly because the payroll of a big company involved a lot of repetitive calculation, but also because it's particularly amenable to that sort of processing: multiply hours worked by hourly wage, output pay due that worker for this week or month. The core of the job can be done without the sort of table lookup that would need a large &lt;em&gt;random access&lt;/em&gt; data store that would only be available a little later with the invention of drum memories, then disk drives.)&lt;/p&gt;&#xA;&lt;p&gt;When video terminals came in, during the late sixties and early seventies, business data processing user interfaces were able to become essentially as they are today: two-dimensional forms, type data into captioned fields, look up lists of records. I have not been able to find any screenshots of business software from before MS-DOS – closest I could find was someone editing a Pascal program on an IBM terminal – but I predict business data processing systems essentially similar to modern ones, must have been developed for the 3270, VT50 etc.&lt;/p&gt;&#xA;&lt;p&gt;But in between those, there was an era of 'interactivity, but not as we know it', when computers supported interactive work by teletype. This is when Basic was invented; many of the classic Basic games were actually written on teletype systems.&lt;/p&gt;&#xA;&lt;p&gt;It seems to me there must have been business data processing systems designed for teletypes, which would provide user interfaces not as good as video terminals, but much better than punchcard batch processing. But now there is the tantalizing gap between deducing the necessary existence of something, and finding actual evidence of it; I have not so far been able to find any documentation on interactive business data processing by teletype, other than SABRE, which was something of a special case.&lt;/p&gt;&#xA;&lt;p&gt;Take for example the hundreds of thousands of PDP-11s, many of which were connected to ASR-33 and similar teletypes. Many of those must've been used for order processing and other everyday business tasks. What did the workflow look like? Are the names and provenance of any relevant software packages still remembered? Are there any surviving photographs or transcripts of what was printed, or any recorded memoirs of what it was like to use them?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-06T19:09:22.400" Title="What did order processing on a teletype look like?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;terminal&gt;&lt;minicomputers&gt;&lt;teletype&gt;" AnswerCount="6" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17866" PostTypeId="2" ParentId="17865" CreationDate="2021-02-05T19:51:00.530" Score="5" Body="&lt;p&gt;For a relatively late example which you could run today under an emulator, I would suggest dBase II, a database program for 8-bit microcomputers.  As &lt;a href=&quot;https://en.wikipedia.org/wiki/DBase#Origins&quot; rel=&quot;noreferrer&quot;&gt;the Wikipedia article goes into&lt;/a&gt;, it was based on an earlier program for mainframe computers.  The CP/M version worked with dumb terminals, and I bet at least some early users had printing terminals.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.sydneysmith.com/wordpress/1714/running-dbase-ii-on-windows/&quot; rel=&quot;noreferrer&quot;&gt;This website has a brief transcript&lt;/a&gt; of installing dBase II under emulation.  The part I've copied here starts the program and creates a new database table:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;D&amp;gt;dbase&#xA;&#xA;ENTER TODAYS DATE  OR RETURN FOR NONE&#xA; (DD/MM/YY) :2/11/17&#xA;&#xA;Copyright (C) 1982 RSP Inc.&#xA;&#xA;***  dBASE II     Ver 2.4  1 April, 1983&#xA;&#xA; Type 'HELP', 'HELP dBASE', or a command&#xA;&#xA;. create addo&#xA;ENTER RECORD STRUCTURE AS FOLLOWS:&#xA; FIELD   NAME,TYPE,WIDTH,DECIMAL PLACES&#xA; 001     name,c,20&#xA; 002     surname,c,20&#xA; 003     street,c,20&#xA; 004     city,c,15&#xA; 005     state,c,3&#xA; 006     phone,c,15&#xA; 007&#xA;INPUT DATA NOW? N&#xA;. use addo&#xA;. disp struc&#xA;STRUCTURE FOR FILE:  D:ADDO    .DBF&#xA;NUMBER OF RECORDS:   00000&#xA;DATE OF LAST UPDATE: 02/11/17&#xA;PRIMARY USE DATABASE&#xA;FLD       NAME      TYPE WIDTH   DEC&#xA;001     NAME         C    020&#xA;002     SURNAME      C    020&#xA;003     STREET       C    020&#xA;004     CITY         C    015&#xA;005     STATE        C    003&#xA;006     PHONE        C    015&#xA;** TOTAL **             00094&#xA;.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2021-02-05T19:51:00.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17867" PostTypeId="2" ParentId="17865" CreationDate="2021-02-05T20:18:18.173" Score="5" Body="&lt;p&gt;A few pieces:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why does one so often hear of payroll, specifically, being an early application of such systems? It seems to me this is partly because the payroll of a big company involved a lot of repetitive calculation, but also because it's particularly amenable to that sort of processing: multiply hours worked by hourly wage, output pay due that worker for this week or month. The core of the job can be done without the sort of table lookup that would need a large random access data store that would only be available a little later with the invention of drum memories, then disk drives.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Actually, payroll &lt;em&gt;continues&lt;/em&gt; to be a &amp;quot;big deal&amp;quot; type of program because it is &lt;strong&gt;not&lt;/strong&gt; just some simple multiplication. Federal taxes. State taxes. Local taxes. Health insurance and other deductions. Sick and vacation pay (both accrual and payment). Overtime. Not a simple thing. Plus, payroll for a big company, &lt;em&gt;that could afford to rent a mainframe in the 1950s or 1960s&lt;/em&gt;, made even more sense: A nationwide (US) company might have to handle 50 different state tax tables/calculations, many different county/city/local taxes, people moving mid-year between jurisdictions, etc. Plus, payroll is a perfect &lt;strong&gt;batch mode&lt;/strong&gt; application. Data entry was via punch cards (sometimes even doubling as physical time cards) and later interactive, but the actual calculations, review, printing checks and reports are all great batch mode activities, even today.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;not been able to find any screenshots of business software from before MS-DOS&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I find that hard to believe. CP/M gets from 1974 (first release) to 1981 (MS-DOS release). That's not counting any mini or mainframe applications. From a &lt;a href=&quot;https://e2btek.com/sage-sage-50-us-peachtree/&quot; rel=&quot;noreferrer&quot;&gt;history of Sage&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Peachtree Software is most likely the earliest entry-level accounting systems in the world tracing its roots to 1976 as part of The Computer SystemCenter, an early Altair  8800 microcomputer dealer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So just need to find some old Peachtree pictures... Or dBase II (as noted in another answer). Or plenty of other programs.&lt;/p&gt;&#xA;&lt;p&gt;And now to the core question:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Many of those must've been used for order processing and other everyday business tasks. What did the workflow look like? Are the names and provenance of any relevant software packages still remembered? Are there any surviving photographs or transcripts of what was printed, or any recorded memoirs of what it was like to use them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;At all levels - mainframe, mini and early micro, a &lt;strong&gt;lot&lt;/strong&gt; of software was custom-made. You didn't have application &lt;strong&gt;packages&lt;/strong&gt; selling in the thousands for mainframes - because there just weren't that many mainframes. Even minicomputers, not so much. It really wasn't until CP/M (and more on the consumer side but used for plenty of businesses too, Apple ][, TRS-80, etc.) that you actually had &amp;quot;packages&amp;quot; where you would then see pictures, documented workflow, etc. Things were largely proprietary, or at least heavily customized. Mass-market business (and other) software started to show up in the mid-to-late 1970s, so it wasn't long before MS-DOS took over, and the bulk of that software (CP/M on up) was designed for video terminals. Many programs had configuration procedures (from a file read in at startup to bytes patched in an executable to recompilation) to handle different types of terminals.&lt;/p&gt;&#xA;&lt;p&gt;The end result is that even though teletypes were quite common through the 1980s (as terminals on mainframes, minis and micros, then later transitioning to &amp;quot;just printers&amp;quot; - as was the case with many DECwriters in particular), the software they were used varied tremendously and the documentation of workflow, &lt;em&gt;if there ever was any documentation&lt;/em&gt;, is largely lost in the sands of time.&lt;/p&gt;&#xA;&lt;p&gt;I wrote some programs of that sort (mini, later moved to micro, 1980s) myself, as I am sure many others here have done. In some respects, workflow hasn't changed - just the details - prompt line-by-line vs. fill in the fields hit &amp;quot;send&amp;quot; vs. fill in the fields and click &amp;quot;submit&amp;quot;. In fact, if you go to Costco or many other big stores you'll see PCs running essentially a 3270-ish emulation for item lookup and similar applications. That isn't quite back to teletype, but it does show, in a slightly different way, that software hasn't changed so much in 50 years.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastActivityDate="2021-02-05T20:18:18.173" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17868" PostTypeId="2" ParentId="17865" CreationDate="2021-02-05T20:52:11.093" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;But in between those [Batch vs. Terminal], there was an era of 'interactivity, but not as we know it', when computers supported interactive work by teletype.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really.&lt;/p&gt;&#xA;&lt;p&gt;To start with, these were complete different usage scenarios. Batch didn't turn into terminal use - or got replaced by it. Batch is like mass production on industrial scale. It still happened the same way when terminals became widespread, as it's purpose didn't change.&lt;/p&gt;&#xA;&lt;p&gt;In relation, terminal based processing did only replace parts of batch processing by improving data entry, replacing key punches. This evolved soon into form based (block mode) operation.&lt;/p&gt;&#xA;&lt;p&gt;Teletypes were only for a very short time as generic devices, and soon replaced by terminals known as glas-TTY, terminals that operated like a TTY, just without the paper part. Real TTY were only kept in areas where there was a need for a paper protocol (like on system consoles) or simply as printers.&lt;/p&gt;&#xA;&lt;p&gt;Finally glass.TTY are essentially what micro computers presented their interface on - from early CP/M all the way to Windows command line.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;So, user interfaces for teletype looked much like the ones for later microcomputers in line mode. From BASIC to dBase.&lt;/strong&gt; There is no principal difference.&lt;/p&gt;&#xA;&lt;p&gt;Important here is to remember that the time of 'pure' TTY use was a quite short one, as glas-TTY and their ability to do 'full screen' by rewriting the screen emerged soon.&lt;/p&gt;&#xA;&lt;p&gt;With glass-TTY emerging in the late 1960s (Datapoint 3300 1969, VT05 1970 and a whole armada of microprocessor based systems since ca. 1973) everything that is known from later microcomputers was ready available to their users.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Take for example the hundreds of thousands of PDP-11s, many of which were connected to ASR-33 and similar teletypes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really. The PDP-11 was introduced in 1970, when glas-TTY were already a thing. More important it took quite a while until it reached sales that big. I'd say late 70s to mid 80s was the high time of PDP-11type computers, right when VDU terminals were usually the only kind attached.&lt;/p&gt;&#xA;&lt;p&gt;Sure, our picture of that time are nice photographs of a huge PDP-11 wall with some TTY, maybe topped by a nice young lady in a lab coat - the computer equivalent of some youngster holding a soldering iron at the tip. It's a tainted view.&lt;/p&gt;&#xA;&lt;p&gt;TTY were only a thing very early on and after that only relevant for cheapniks barely able to afford the computer with no money left to acquire contemporary terminals. That an image from hobbyist computing, not business applications.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Now lets take a look at the titular question:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What did order processing on a teletype look like?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It didn't exist. It was all about optimizing the existing process of a customer filling an order form and some (back) office turning it into a data set.&lt;/p&gt;&#xA;&lt;p&gt;Just imagine what company would need and thus have a computer system for order handling in like 1970? For sure not a small one doing a dozend orders a day. And any company/department larger then this would already have a punch card based system.&lt;/p&gt;&#xA;&lt;p&gt;If large enough to have subsidiaries, like distribution centers and/or agents, the next logical step is not to replace the working system by some less capable system with cumbersome teletypes, but improve data entry. A large enough company may already turn the forms a customer fills out into punch card orders as a local site and send a days stack to the central (or next) order processing site, getting back print outs with the stuff ordered whenever the delivery truck comes.&lt;/p&gt;&#xA;&lt;p&gt;Improvement here is the next logical step, but not by adding extreme costly online communication (for what benefit?), but improve and speed up data entry. This is were systems like the &lt;a href=&quot;https://georgecogar.com/2016/05/23/cogar-system-4/&quot; rel=&quot;noreferrer&quot;&gt;Cogar 4&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint_2200&quot; rel=&quot;noreferrer&quot;&gt;Datapoint 2200&lt;/a&gt; came into play around 1970. Local data entry with support for forms, basic referencing and validation, collecting entries and transferring them as batch into the existing mainframe environment. That these system as well could be used as low end data processing was a welcome side effect.&lt;/p&gt;&#xA;&lt;p&gt;Not to mention that none of this replaces the existing (more or less) central data entry department, like for customers sending in a request letter with a sub from some newspaper add or alike. Similar customers calling in.&lt;/p&gt;&#xA;&lt;p&gt;While this may of course differ between sectors of business, the basic situation is the same, no matter if auto parts, model railways or corn flakes. For smaller companies, growing into sufficient size, the solution is not siting down and envision a minimalist system, but buying a working solution - as shown.&lt;/p&gt;&#xA;&lt;p&gt;So, in the end, (almost) no use case for a tty user interface.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-05T21:36:16.387" LastActivityDate="2021-02-05T21:36:16.387" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17869" PostTypeId="2" ParentId="17852" CreationDate="2021-02-05T21:21:14.663" Score="2" Body="&lt;p&gt;In the 1960s, many major languages such as FORTRAN and COBOL specified a line length of 72 characters. This was largely due to the limitations of the 80 column punch cards with which they had been originally programmed. An IBM punch card used 8 columns for a sequence number, leaving 72 to encode characters. This practical limitation was enshrined in the relevant specifications for the languages.&lt;/p&gt;&#xA;&lt;p&gt;As such 72 columns of text would have been a reasonable line length for a programming terminal in 1973, able to show any record length that was allowable.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2021-02-05T21:21:14.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17870" PostTypeId="1" CreationDate="2021-02-05T21:22:49.933" Score="4" ViewCount="393" Body="&lt;p&gt;I'm toying with the idea of using System 7 as my daily work station at home, most probably via Basilisk II running on some Linux flavour, but possibly on an actual Performa 5200.&lt;/p&gt;&#xA;&lt;p&gt;One piece of modern software that I would like to keep is Discord. I know this is probably far fetched, but would it be possible to run Discord in some way on System 7? Either via a browser (which would lead to the follow up question of whether there is a &amp;quot;modern&amp;quot; browser that can run on System 7) or some other sorcery.&lt;/p&gt;&#xA;" OwnerUserId="16061" LastActivityDate="2021-02-07T11:21:02.413" Title="Would it be possible to run Discord on Macintosh System 7?" Tags="&lt;apple-macintosh&gt;&lt;internet&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17871" PostTypeId="2" ParentId="17870" CreationDate="2021-02-05T21:31:14.837" Score="5" Body="&lt;p&gt;There are no reasonably modern browsers capable of running modern web apps for System 7.  &lt;a href=&quot;https://www.floodgap.com/software/classilla/&quot; rel=&quot;noreferrer&quot;&gt;Classilla&lt;/a&gt; is the closest thing, and it requires Mac OS 8.6 or 9.  And I'm not sure it could handle Discord, either.&lt;/p&gt;&#xA;&lt;p&gt;You definitely cannot run the desktop app on a classic Mac directly.&lt;/p&gt;&#xA;&lt;p&gt;Still, I can think of a couple indirect ways to achieve what you want:&lt;/p&gt;&#xA;&lt;p&gt;There are web proxies which render modern web pages into simple images and HTML that old browsers can handle.  See &lt;a href=&quot;https://github.com/tenox7/wrp&quot; rel=&quot;noreferrer&quot;&gt;Web Render Proxy&lt;/a&gt; in particular.  I haven't tested Discord, but it can handle some web applications.&lt;/p&gt;&#xA;&lt;p&gt;Another option would be to use something like VNC to login to a remote desktop on a modern machine, running the Discord app or a web browser.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2021-02-05T21:31:14.837" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17872" PostTypeId="2" ParentId="17865" CreationDate="2021-02-05T21:42:18.913" Score="4" Body="&lt;p&gt;First, Payroll is really apt for batch processing. It runs once a week or twice a month in general, and it tends to be all done at once on &amp;quot;payday&amp;quot;. So each week the operators key in the time cards, then they process them, they run and audit the reports, then they cut the checks. Big, meaty processing tasks done in bulk, vs high density transaction processing demanding instant feedback. Mind, at the same time, this is where computer reliability has to be top drawer. There're few things less fun than the payroll system not working when payday comes around. The operators have a short window to key it all in, run it all, and print it all out.&lt;/p&gt;&#xA;&lt;p&gt;Operationally, adding a teletype did not change much. It would be some time before a terminal was actually more efficient than a card punch and a card reader. Data entry need not be an &amp;quot;interactive&amp;quot; process. In many cases it's just flat faster to key the data in twice and look for exceptions than it is to have each operator check everything. We're talking heads down, 10 key data entry, streaming numbers in.&lt;/p&gt;&#xA;&lt;p&gt;So, the interactivity of a teletype wasn't really necessary. The slow (110, 300 baud) data rates weren't worth waiting for. It was much more an operators terminal interacting with the machine. Plus, the teletype keyboards were honestly quite awful compared to a good card punch.&lt;/p&gt;&#xA;&lt;p&gt;It wasn't until the terminals started showing up, with better response rates, that data entry moved toward these devices. More complicated forms, better error validation, easier navigation. But, still, the entry operators are looking at the input material, not the screen.&lt;/p&gt;&#xA;&lt;p&gt;We did one system where the operator would enter the line twice, and we'd alert them if they made a mistake. You have to appreciate that it says 3, 4, 5, or more BEEPs from the terminal to get the operators attention that they have an error. Then they stop, try to pick up the context, and the error, and redo it. The operators tend to be ahead of the computer cognitively, it's very important for the machine to keep up. It's also very mechanical for the operators. They honestly don't consciously know what they're keying. They're simply a conduit for data.&lt;/p&gt;&#xA;&lt;p&gt;We had one lady that was adept at both the main keyboard and the top row. Hers was mixed data entry, not just numeric, and during that time she did not use the ten key. She just shifted her hands and danced on the digits.&lt;/p&gt;&#xA;&lt;p&gt;We learned a lot about errors that operators can do. I wrote a entry program that let her do the entry on her local PC, then we'd upload the file to the VAX. Problem was my program had some gaps in the entry department, notably one of the characters it was able to capture was ^C. Since we were just copying the console to a file (vs an actual transfer program), this data would just abort half way through. We went through several rounds of validation to get it all clean. Her name was Evy, and so we coined it &amp;quot;Evy proof&amp;quot;. Delightful lady.&lt;/p&gt;&#xA;&lt;p&gt;So.&lt;/p&gt;&#xA;&lt;p&gt;The teletype did not drastically change the workflow for data entry at the time, it and the systems just were ready for it, and there were much more efficient technique and workflows available.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2021-02-05T21:42:18.913" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17873" PostTypeId="1" AcceptedAnswerId="17876" CreationDate="2021-02-05T21:54:00.717" Score="10" ViewCount="849" Body="&lt;p&gt;Thomas Edison invented the first practical stock ticker in 1869, which is considered to be an important predecessor to teletypes and computer printers.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/Stock_ticker#Technology&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia page for the stock ticker&lt;/a&gt; describes &amp;quot;pulses on the telegraph line&amp;quot; and turning a letter wheel; however, it does a poor job explaining the communications format.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;What was the communications format of the Edison stock ticker?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What about the pulses encoded a particular letter?  Amplitude?  Duration?  Number?  Time between the pulses?  Bitwise pattern (like the 1872 &lt;a href=&quot;https://en.wikipedia.org/wiki/Baudot_code&quot; rel=&quot;noreferrer&quot;&gt;Baudot code&lt;/a&gt;)?&lt;/li&gt;&#xA;&lt;li&gt;Were there (perhaps) different pulses for rotating the letter wheel versus stamping the letter?&lt;/li&gt;&#xA;&lt;li&gt;Was there any synchronization between the sending and receiving machines?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="6659" LastEditDate="2021-02-06T18:34:57.980" LastActivityDate="2021-02-12T06:06:17.677" Title="What was the communication format of the Edison stock ticker?" Tags="&lt;history&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17874" PostTypeId="2" ParentId="17870" CreationDate="2021-02-05T22:33:33.330" Score="3" Body="&lt;p&gt;&lt;em&gt;[Only a partial answer, more a collection of thoughts]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The 5200 is about the worst PPC Mac that has there been. While having a 603, it's crippled with a 32 bus interface and an 8 bit IDE. A straight guarantee for low performance. The 601 based 6100 is faster. So performance might be a rather limiting factor.&lt;/p&gt;&#xA;&lt;p&gt;While the 5200 was first delivered with System 7, it might be a good idea to update to 9.1, much like it's suggested to use 8.1/8.5 on 68k Macs. 9.1 improves performance considerable over 7, as most code is native PPC, not being slowed down by emulation. In addition support for many interfaces got improvements, especially all around TCP/IP integration, quite related to your project.&lt;/p&gt;&#xA;&lt;p&gt;Which brings the next important step, a modern Browser, but there is none. The most modern browse contemporary to Mac OS 9 is the Internet Explorer 5, stalling since 2000. Netscape 7 and Mozilla 1.3 are a bit more modern, but still way behind what the discord web interface requires. Classilla is essentially Mozilla 1.3 with development up to the mid 2000s and patches until some years ago.  (I'm not sure about the state when iCab stopped development). As well not fit for the job. So no chance to run the  discord web client soon.&lt;/p&gt;&#xA;&lt;p&gt;The last resort would be a discord application, but the earliest I find requires Mac OS X at least. Being introduced in 2015 first, Discord is simply too new for any classic Mac. In fact, not even G3 board would help, as Discord only runs on 10.9 and later, so it's x86 only.&lt;/p&gt;&#xA;&lt;p&gt;First introduction data of a software (here 2015) is always a good indicator what OS is required, as next to noone develops new mainstream (*1) applications for long gone systems.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-06T04:07:51.047" LastActivityDate="2021-02-06T04:07:51.047" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="17875" PostTypeId="2" ParentId="17873" CreationDate="2021-02-05T22:37:24.647" Score="1" Body="&lt;p&gt;Guesswork - too long for a comment so I'm putting it in as an answer.&lt;/p&gt;&#xA;&lt;p&gt;I'd say it's basically a &lt;a href=&quot;https://en.wikipedia.org/wiki/Stepping_switch&quot; rel=&quot;nofollow noreferrer&quot;&gt;uniselector&lt;/a&gt;-type device.  Each pulse advances a stepping-motor one position.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Pulses on the telegraph line made a letter wheel turn step by step&#xA;until the correct symbol was reached and then printed. A typical&#xA;32-symbol letter wheel had to turn on average 15 steps until the next&#xA;letter could be printed resulting in a very slow printing speed of one&#xA;character per second.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If there's one step per pulse (which seems likely) and if it takes on average 15 steps, i.e., 15 pulses, then it will not be encoded.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.prc68.com/I/WU5A.shtml#ST&quot; rel=&quot;nofollow noreferrer&quot;&gt;This page about Western Union stock tickers&lt;/a&gt; supports that guess.  When talking about teletypes it says&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This means that unlike the stock ticker machine where you just rotate the type&#xA;wheel one character for each pulse on the line the Teletype receiving&#xA;machine needs to remember the order of the signals that make up one&#xA;character.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;How is it indicated that the wheel is positioned and now it's time to print?  Good question. Maybe a &amp;quot;long pulse&amp;quot;?&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-02-05T22:44:22.153" LastActivityDate="2021-02-05T22:44:22.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17876" PostTypeId="2" ParentId="17873" CreationDate="2021-02-05T23:05:07.453" Score="17" Body="&lt;h2&gt;History and Workings&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;(This time the long read first :)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;As with his lamp, the phonograph or telephon, Edison didn't invent the printing ticker but improved usability to a point where it was good enough for most uses.&lt;/p&gt;&#xA;&lt;p&gt;The ticker as used by brokers is based on &lt;a href=&quot;https://en.wikipedia.org/wiki/Edward_A._Calahan&quot; rel=&quot;nofollow noreferrer&quot;&gt;Edward Calahan&lt;/a&gt;'s design of 1867.&lt;/p&gt;&#xA;&lt;p&gt;In this case Edisons improvement was the way of synchronisation(*1). When working synchronized they were celled &lt;em&gt;'unison'&lt;/em&gt; - with one tone. But ticker before Edisons 1869 model had an issue if going out of sync after some time due to mechanical tolerance and electric parameters - called &lt;em&gt;out of unison&lt;/em&gt;. So these devices had to be reset after some time. But resets had to be synchronized across all stations, otherwise it wouldn't work. This was done like on full hours or every 15 minute - all with the risk that a station was sending during reset, or missed the reset.&lt;/p&gt;&#xA;&lt;p&gt;To understand this better a look at the basic ticker is helpful. Imagine a bolt held horizontal by some bearings with a single deep spiral groove and the type wheel (*2) on one side of the bolt - lets say the left. Inside the groove a pin moved left or right, driven by received pulses, turning the bolt and thus the wheel to the next print position. Direction was defined by polarity of the signal. When it reached the desired position, a pulse on the second line made the paper hit the wheel. A third wire was used as common ground for both signals.&lt;/p&gt;&#xA;&lt;p&gt;Edison addition is an 'open end' to the threaded bolt.&lt;/p&gt;&#xA;&lt;p&gt;It is essentially the same idea as some floppies used to position toward track 0 - by simply issuing enough steps to reach track 0 from the outermost tracks, with some 'jumping' if already at track 0. Like with a grooved disk and a stop in case of Apples Disk II mechanic.&lt;/p&gt;&#xA;&lt;p&gt;The new part called &lt;strong&gt;'Unison Stop'&lt;/strong&gt; was this 'open end', at one side of the groove. For this imagine it at the left side, right next to the type wheel. Sending a left symbols long enough to move the pin all the way across the whole bolt to the left, letting the pin end up in that 'open end' section. No matter if it started out one character or 20 characters right of that position. Given all attached tickers time to perform this will result in making them unison again.&lt;/p&gt;&#xA;&lt;p&gt;Simple, but extreme useful, as now a sender could sysnchronize all attached tickers before a message got send, making sure that it will received by all the same way. Well, and the same time, most important for brokers, as so noone had an advantage of time or disadvantage of a screwed message.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Question(s) Asked&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What was the communications format of the Edison stock ticker?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Characters were simply pulses moving the pin left or right, depending on polarity  (*3). Number of pulses depended on actual position and target position, so if the last letter was a B and the next was a A then one step left was puled. if it was an O instead, then 13 right pulses would be sent.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What about the pulses encoded a particular letter?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Symbols weren't encoded as an independent code set, but relative to the last letter. Kind of a distance encoding.&lt;/p&gt;&#xA;&lt;p&gt;Electric (current) signalling was by polarity.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Were there (perhaps) different pulses for rotating the letter wheel versus stamping the letter?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Printing is initiated by a pulse over a second line.&lt;/p&gt;&#xA;&lt;p&gt;Calahan's ticker is based on three wires. One Ground, one for stepping (data) and one for hiting the type wheel (character termination) (*4).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was there any synchronization between the sending and receiving machines?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Snchronisation is exactly Edisons improvement. Instead of doing this by hand (literally with boys running around the city), the sender could synchronize all attached tickers by sending more 'left' symbols than there were characters.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Over the years Edison added several other improvements. Nothing as basic as the &lt;em&gt;unison stop&lt;/em&gt;, but quite useful things like reduced power need due less friction and alike.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Later improved models used two wheels, one for letters, one for symbols (*5). They were both mounted on the same bolt. Now the 'print' line was as well polarized. A positive current would make one wheel print as negative the other. Where a single wheel to cope with all characters, numbers and some symbols would need 50-60 positions, making the worst encoding needing 60 pulses, using two wheels reduced it to 30, dramatically improving transmission speed.&lt;/p&gt;&#xA;&lt;p&gt;Of course using two wheels without shifting them means that all letters are print in one line, while all symbols come in second. So if you ever wondered why traditional displays of ticker data puts stock names in one line and their notation in another, now you know :)) As a favourable side effect it also eliminated the need for spacing inbetween, further speeding up transmission.&lt;/p&gt;&#xA;&lt;p&gt;And last but not least, it defines why stock names have to be letters only - otherwise they would show up on the wrong line :))&lt;/p&gt;&#xA;&lt;p&gt;*3 - In some way it's the grand grand grand father of diferential signalling used by USB :)&lt;/p&gt;&#xA;&lt;p&gt;*4 - Edison did develop and patent a ticker that would work with just two wires first, while still in Boston, but it didn't catch on.&lt;/p&gt;&#xA;&lt;p&gt;*5 - And yes this sounds much like Baudot's teletype code of 1870 with 'letters' and Figures' and switching inbetween, doesn't it? safe to assume he had the same optimisation in mind.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-12T06:06:17.677" LastActivityDate="2021-02-12T06:06:17.677" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="17877" PostTypeId="2" ParentId="17852" CreationDate="2021-02-06T01:55:01.867" Score="5" Body="&lt;p&gt;Several sources around the web repeat the notion that the VT05 was a &amp;quot;drop-in replacement&amp;quot; for the (ASR33) teletype.&lt;/p&gt;&#xA;&lt;p&gt;For example, on &lt;a href=&quot;http://gunkies.org/wiki/VT05_Alphanumeric_Display_Terminal&quot; rel=&quot;nofollow noreferrer&quot;&gt;gunkies.org&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The VT05 Alphanumeric Display Terminal (technically, the VT05B, but&#xA;documentation usually referred to it as the 'VT05') was one of DEC's&#xA;first video terminals. It supported all the same format control&#xA;characters as a Teletype, so it was a 'drop in' replacement.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://vt100.net/docs/vt05-rm/chapter1.html#S1.1&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEC VT05 manual&lt;/a&gt; says something like that: &amp;quot;similar to a teletypewriter&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;That being the case, the teletype-compatible 72 character width seems like a good choice.&lt;/p&gt;&#xA;&lt;p&gt;In actuality, the ASR33 could print 74 columns  -- see &lt;a href=&quot;http://bitsavers.org/communications/teletype/33/273B_Mod32_33_TechMan_Jan63.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 1-15 in this Teletype manual&lt;/a&gt;.  But it was widely considered to be a 72-column device, perhaps because we were all used to 72 useful columns on a punch card.  Indeed, the DEC &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp8/handbooks/SmallComputerHandbook_Mar67.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Small Computer handbook, page 128&lt;/a&gt; for the PDP-8 describes the teletype as having a 'standard' (whatever that means) line length of 72 characters.  So there's evidence that DEC treated it as a 72-column device.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-02-06T02:19:25.443" LastActivityDate="2021-02-06T02:19:25.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17878" PostTypeId="2" ParentId="17865" CreationDate="2021-02-06T02:09:09.430" Score="0" Body="&lt;p&gt;&lt;strong&gt;As Raffzahn had mentioned, there was no real &amp;quot;teletype era&amp;quot;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Yes, teletypes were used, but not as end-user terminals - they were system consoles. So there were no business people doing order processing on them. The era of terminals did not come until time-shared OS became common (mid-1960s), and by 1970 there were CRT terminals around.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_terminal&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computer terminal Wiki&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5207" LastActivityDate="2021-02-06T02:09:09.430" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17880" PostTypeId="2" ParentId="9650" CreationDate="2021-02-06T05:22:39.517" Score="2" Body="&lt;p&gt;Didn't see anyone mention the Commodore SX-64.  Another one in the luggable category, of course.  It was mass produced, and marketed towards executives.&lt;/p&gt;&#xA;" OwnerUserId="20744" LastActivityDate="2021-02-06T05:22:39.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17881" PostTypeId="1" CreationDate="2021-02-06T06:08:29.210" Score="2" ViewCount="120" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Sinclair_Research&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; Sinclair Research had only 140 employees at its peak in the 1980s. I was surprised the number was so small for a company that sold something like five million computers, then I remembered they contracted out at least some of their manufacturing to Timex in Scotland (which also led to the deal whereby versions of some of their computers were sold in America under the 'Timex Sinclair' label).&lt;/p&gt;&#xA;&lt;p&gt;So counting both Sinclair and Timex employees, but only the UK, not America, or places like Eastern Europe where unauthorized clones of the Spectrum were made, how many people were employed making Sinclair computers?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-06T06:08:29.210" Title="How many people were employed in the UK making Sinclair computers?" Tags="&lt;history&gt;&lt;sinclair&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17882" PostTypeId="2" ParentId="5711" CreationDate="2021-02-06T09:26:33.507" Score="0" Body="&lt;p&gt;On A500+ with 5719 GARY 5719 and 8275 Agnus, /BLIT (/DBR) does not matter on ROM READ CYCLE (/ROMEN asserted).&lt;/p&gt;&#xA;&lt;p&gt;The ROM READ cycle (350ns) is performed with and w/o /BLIT asserted at low (i.e. /BLIT low or high).&lt;/p&gt;&#xA;&lt;p&gt;So, the 2 nand make no sense...&lt;/p&gt;&#xA;" OwnerUserId="20746" LastEditorUserId="20746" LastEditDate="2021-02-06T22:30:58.663" LastActivityDate="2021-02-06T22:30:58.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17883" PostTypeId="2" ParentId="17863" CreationDate="2021-02-06T14:26:20.573" Score="8" Body="&lt;p&gt;I can give you an anecotal answer.  I did this a few times.&lt;/p&gt;&#xA;&lt;p&gt;I suspect that porting in this direction would have been unusual.  We only did it where the customer insisted on the use of Vax hardware.&lt;/p&gt;&#xA;&lt;p&gt;The company I worked for for many years specialised in real-time process control and communications handlers.  We made our own range of controllers, based on the 68k processors but would contract on anything.&lt;/p&gt;&#xA;&lt;p&gt;A large library of handlers for various industry-standard protocols over dual-redundant communication paths, dual-processor routines with both hot standby and 2oo2 for fault tolerance had been built up over years and had a proven track record.  These libraries had a core of 68k Assembly Language and a C wrapper.&lt;/p&gt;&#xA;&lt;p&gt;A bulk material handling application for the Kwangyang steelworks in South Korea was specified to run on a dual hot-standby MicroVax configuration. Commissioned 1987.&lt;/p&gt;&#xA;&lt;p&gt;A development of this, on a Vax-FT was commissioned in 1992 to control the signalling of Seoul Subway Line 5.  Here we used both halves of the FT and our own library.&lt;/p&gt;&#xA;&lt;p&gt;Another dual MicroVax system was installed in a British Steel Tinplate works in Ebbw Vale, Wales in the early 90s.  This had a much more complex communication configuration.&lt;/p&gt;&#xA;&lt;p&gt;Porting involved adapting the code to use the VMS interprocess communication techniques, mutex, event flags etc, keeping our own real-time handlers.  This way we kept our own communications failover techniques and had tight control on the fault tolerance.&lt;/p&gt;&#xA;&lt;p&gt;Porting in this manner was seen as a good idea at the time.  The belief being that it gave the best chance of achieving  the project deadlines.&lt;/p&gt;&#xA;" OwnerUserId="276" LastActivityDate="2021-02-06T14:26:20.573" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17884" PostTypeId="1" CreationDate="2021-02-06T17:42:27.110" Score="6" ViewCount="299" Body="&lt;p&gt;From &lt;a href=&quot;http://rk.nvg.ntnu.no/sinclair/computers/clones/russian.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Planet Sinclair&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Leningrad-1: A simple and cheap machine, this Spectrum clone acquired widespread popularity. Not very Spectrum-compatible, due to the way the machine was designed.&lt;br /&gt;&#xA;Leningrad-2: A much improved version of the above with built-in Kempston joystick compatibility.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Various other sources say that Leningrad-2 was slightly improved, or much improved, depending on who you ask. The above quote I believe is false because Leningrad from 1988 also had a Kempston-compatible joystick.&lt;/p&gt;&#xA;&lt;p&gt;Either way, I haven't been able to find much information about what the differences actually are. Does anyone here know?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-03-16T08:18:20.313" LastActivityDate="2021-03-16T08:18:20.313" Title="What are the differences between Leningrad-1 and Leningrad-2?" Tags="&lt;zx-spectrum-clones&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17885" PostTypeId="2" ParentId="5609" CreationDate="2021-02-06T19:00:36.333" Score="0" Body="&lt;p&gt;The RGBtoHDMI interface converts the &amp;quot;digital&amp;quot; RGB video signal from vintage computers like the BBC Micro or PC MDA/CGA/EGA to HDMI or DVI compatible with most modern TVs/Monitors. The interface comprises a Raspberry Pi Zero and a specially designed Hat containing a small CPLD. Custom firmware on the Raspberry Pi, in conjunction with the CPLD, is able to correctly sample each of the supported video modes to give a pixel-perfect rendition. The HDMI output is locked to the input so there are no frame drops, repeats or tears and it also has low lag of around 4 milliseconds (less than a quarter of a frame).&lt;/p&gt;&#xA;&lt;p&gt;More information on the project can be found at &lt;a href=&quot;https://github.com/hoglet67/RGBtoHDMI&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/hoglet67/RGBtoHDMI&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2021-02-06T19:00:36.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17886" PostTypeId="2" ParentId="17865" CreationDate="2021-02-06T19:09:22.400" Score="3" Body="&lt;p&gt;I was a student pilot in the late 60's and teletypes were used as terminals to the weather services. I would consider that an end user interactive system.  As I remember, it was line command driven and the speeds were slow enough that there were lots of abbreviations used to cut down on the characters transmitted.  This was confusing and could easily lead to misunderstandings.&#xA;Even when weather stations moved to pc's abbreviations were used and seemed silly.&lt;/p&gt;&#xA;&lt;p&gt;It is very interesting to me how ascii codes developed and even today carriage return, line feed, bell, horizontal tab codes are still embedded into files and cause confusion if not understood.&lt;/p&gt;&#xA;&lt;p&gt;I also used teletypes with paper tape readers on an interactive Hp minicomputer to program basic in college.&lt;/p&gt;&#xA;" OwnerUserId="20749" LastActivityDate="2021-02-06T19:09:22.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17887" PostTypeId="2" ParentId="17095" CreationDate="2021-02-06T19:37:36.463" Score="4" Body="&lt;p&gt;I managed to dig into &lt;a href=&quot;https://www.pagetable.com/?p=774&quot; rel=&quot;nofollow noreferrer&quot;&gt;the code&lt;/a&gt; (specifically the &lt;code&gt;FOUT&lt;/code&gt; function), and my findings are as follows:&lt;/p&gt;&#xA;&lt;p&gt;The 6502 Microsoft BASIC interpreter comes in two flavours, which I am going to call 32-bit builds and &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16892/&quot;&gt;40-bit&lt;/a&gt; builds; the name comes from the interpreter’s internal floating-point precision. The relevance of this for the number formatting algorithm is that the value of the constant N mentioned below is 6 in 32-bit builds, and 9 in 40-bit builds. Checking whether you’re using a 32-bit or 40-bit build is easy: just ask it to print 10&lt;sup&gt;6&lt;/sup&gt;. 32-bit builds will output &lt;code&gt;1E+06&lt;/code&gt;, while 40-bit builds will output &lt;code&gt;1000000&lt;/code&gt;. As far as I am aware, most Microsoft BASIC versions are 40-bit builds.&lt;/p&gt;&#xA;&lt;p&gt;The formatting algorithm itself is as follows:&lt;/p&gt;&#xA;&lt;ol start=&quot;0&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Output a sign character: ‘&lt;code&gt;-&lt;/code&gt;’ if negative, a space otherwise. The rest of the algorithm operates on the absolute value.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the number is zero, output ‘&lt;code&gt;0&lt;/code&gt;’ and exit. (I failed at making the interpreter ever produce a negative zero, although one &lt;em&gt;can&lt;/em&gt; be represented in the underlying format.) The rest of the algorithm operates on positive numbers.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the number is smaller than 1, multiply it by 10&lt;sup&gt;N&lt;/sup&gt; and initialise the order-of-magnitude counter to −N. Otherwise initialise it to zero. (While this may seem otherwise redundant to the next step, I assume this is a speed and/or precision optimisation.)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Adjust the order-of-magnitude counter by repeating the following steps:&lt;/p&gt;&#xA;&lt;ol start=&quot;0&quot;&gt;&#xA;&lt;li&gt;While the number is smaller than 10&lt;sup&gt;N − 1&lt;/sup&gt; − 0.0501 (*), multiply the number by 10 and decrement the counter.&lt;/li&gt;&#xA;&lt;li&gt;While the number is larger by 10&lt;sup&gt;N&lt;/sup&gt; − 0.501 (*), divide the number by 10 and increment the counter.&lt;/li&gt;&#xA;&lt;li&gt;If neither, continue to the next point.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Add ½ to the number and compute its floor. The integer obtained will serve as the significand to display.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the order-of-magnitude counter is in the range [−(N + 1), 1) (in other words, the absolute value of the original number is in the range [0.01, 10&lt;sup&gt;N&lt;/sup&gt;)), output the number in the ordinary decimal format. Pure integers are output without a decimal point; pure fractions are output without a leading zero (e.g. ½ is &lt;code&gt;.5&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Otherwise, output the number in the exponential format: one leading digit, followed by an optional decimal point, then at most N − 1 fractional digits, the letter ‘&lt;code&gt;E&lt;/code&gt;’, the sign (‘&lt;code&gt;+&lt;/code&gt;’ or ‘&lt;code&gt;-&lt;/code&gt;’) and two-digit magnitude of the exponent.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;(*) Subject to approximation; the actual values are 99 999.9375 and 999 999.4375 for 32-bit builds, or 99 999 999.90625 and 999 999 999.25 for 40-bit builds.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-27T09:10:30.130" LastActivityDate="2021-02-27T09:10:30.130" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17888" PostTypeId="1" AcceptedAnswerId="17891" CreationDate="2021-02-06T20:19:06.753" Score="6" ViewCount="1215" Body="&lt;p&gt;So, first off, I am kind of a noob with emulators and the 6502.&lt;/p&gt;&#xA;&lt;h2&gt;Summarise the problem&lt;/h2&gt;&#xA;&lt;p&gt;If we for example take the instruction ADC Immediate ($69) which adds the accumulator to an immediate value and the carry bit of the processor status register (PS). That instruction takes two clock cycles to execute. What is actually done during those two cycles? This instruction is pretty clear, only two cycles, but some take a lot more.&lt;/p&gt;&#xA;&lt;h2&gt;Example&lt;/h2&gt;&#xA;&lt;p&gt;This is the BRK instruction broken up into each cycle:&lt;br/&gt;&#xA;1 - read BRK opcode&lt;br/&gt;&#xA;2 - read padding byte (ignored)&lt;br/&gt;&#xA;3 - store high byte of PC&lt;br/&gt;&#xA;4 - store low byte of PC&lt;br/&gt;&#xA;5 - store status flags with B flag set&lt;br/&gt;&#xA;6 - low byte of target address&lt;br/&gt;&#xA;7 - high byte of target address&lt;br/&gt;&lt;/p&gt;&#xA;" OwnerUserId="20750" LastEditorUserId="3296" LastEditDate="2021-02-08T06:13:37.457" LastActivityDate="2021-02-08T06:13:37.457" Title="What is the MOS 6502 doing on each cycle of an instruction?" Tags="&lt;6502&gt;&lt;performance&gt;&lt;microprocessor&gt;&lt;microcode&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17889" PostTypeId="2" ParentId="17888" CreationDate="2021-02-06T21:39:41.493" Score="2" Body="&lt;p&gt;The length of the ADC Immediate is 2. One for the opcode &lt;code&gt;$69&lt;/code&gt; and one for the immediate. At the very least, this requires two bus cycles to fetch. On a &amp;quot;simple&amp;quot; processor, an instruction can't take fewer cycles than the number of bus cycles that need to be performed to do the work of that instruction.&lt;/p&gt;&#xA;" OwnerUserId="8911" LastActivityDate="2021-02-06T21:39:41.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17890" PostTypeId="2" ParentId="17888" CreationDate="2021-02-06T21:51:21.190" Score="9" Body="&lt;p&gt;Assuming you’re asking: what can the 6502 be seen to be doing by an external observer, then the data sheet has a full breakdown of bus activity per cycle per addressing mode; that was long ago transcribed into ASCII form by the Commodore community and is now often sourced from that &lt;a href=&quot;http://www.atarihq.com/danb/files/64doc.txt&quot; rel=&quot;noreferrer&quot;&gt;64doc.txt&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Do a search in that document for “Instructions accessing the stack” and see the tables that start from there.&lt;/p&gt;&#xA;&lt;p&gt;If you’re asking about internal operation then the gold standard is &lt;a href=&quot;http://visual6502.org/&quot; rel=&quot;noreferrer&quot;&gt;Visual6502&lt;/a&gt; which will allow you to step through the internal signaling for any instruction sequence.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2021-02-06T21:57:29.140" LastActivityDate="2021-02-06T21:57:29.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17891" PostTypeId="2" ParentId="17888" CreationDate="2021-02-06T23:14:45.250" Score="10" Body="&lt;p&gt;In general most instructions on the 6500 series take as many cycles as there are memory accesses, with a lower limit of two. This means no instruction will execute in less than two cycles (*1).&lt;/p&gt;&#xA;&lt;p&gt;The mentioned ADC gives a nice example, as it offers almost all addressing modes:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Mode        Example     Length&#xA;                        |   Cycles&#xA;                        |   |    No. of Memory Access&#xA;                        |   |    |    Code Access (Read)&#xA;                        |   |    |    |   Pointer Access (Read)&#xA;                        |   |    |    |   |   Internal (Dummy Read)&#xA;                        |   |    |    |   |   |   Data Access (Read or Write)&#xA;                        |   |    |    |   |   |   |&#xA;Immediate   ADC #imm    2 / 2  / 2 -&amp;gt; 2&#xA;Zero Page   ADC zp      2 / 3  / 3 -&amp;gt; 2 /   /   / 1  &#xA;Zero Page,X ADC zp,X    2 / 4  / 3 -&amp;gt; 2 /   / 1 / 1&#xA;Absolute    ADC abs     3 / 4  / 4 -&amp;gt; 3 /   /   / 1   &#xA;Absolute,X  ADC abs,X   3 / 4+ / 4 -&amp;gt; 3 /   / o / 1&#xA;Absolute,Y  ADC abs,Y   3 / 4+ / 4 -&amp;gt; 3 /   / o / 1&#xA;Indirect,X  ADC (zp,X)  2 / 6  / 6 -&amp;gt; 2 / 2 / 1 / 1&#xA;Indirect,Y  ADC (zp),Y  2 / 5+ / 5 -&amp;gt; 2 / 2 / o / 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;For example the entry of Indirect,Y is read as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Addressing mode &lt;strong&gt;Indirect,Y&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Written as &lt;strong&gt;ADC (zero page address),Y&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Length of the instruction in bytes is &lt;strong&gt;2&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Cycles it takes to execute is &lt;strong&gt;5&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Number of memory accesses needed to perform the instruction is &lt;strong&gt;5&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These memory accesses are as follow (and in sequence)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;2&lt;/strong&gt; cycles to fetch the instruction bytes&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;2&lt;/strong&gt; to fetch the two bytes of a pointer&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;1&lt;/strong&gt; cycle to to fetch the data byte&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So far the 6500 is like a textbook implementation of a RISC CPU. Every operational cycle is a memory cycle. Except for two situations:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Indexing instructions that need to add an index to an 8 bit base address (*2).&lt;/li&gt;&#xA;&lt;li&gt;Indexing instructions whose indexing result crosses a page (*3).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The first will always happen and is noted under the Internal header with a '1', while the second only happens when the data processed requires it, marked with 'o' (*4). They will, as well, always be inserted in sequence before the data access.&lt;/p&gt;&#xA;&lt;p&gt;The reason for this is the target to make the 6500 as simple (and thus cheap) as possible. It uses the single 8 bit wide ALU as adder for all address calculations. The first case could have been removed by implementing a second adder, just for address calculation, while the second would need this to be a 16-bit adder. Without such a dedicated 16 bit adder, these instructions need to take another round through the ALU.&lt;/p&gt;&#xA;&lt;p&gt;At this point it's quite important to remember that back then the task wasn't about squeezing out the last possible bit of performance, like today, but everyone was happy to have a CPU at all. And the 6502 in particular was meant as a low price offer &lt;em&gt;way&lt;/em&gt; below all competition. The 6502 was introduced at 25 USD, a 7th of the directly comparable 6800, which was sold at 175 USD. To reach this price point, there was simply no case to throw hardware at the issue, as is done today.&lt;/p&gt;&#xA;&lt;p&gt;Of course, there are special issues with other, less regular instructions, but they all come down to the same mechanic - &lt;strong&gt;an instruction takes as many cycles as there are memory accesses done plus address calculation cycles due to its 8-bit nature&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For more details there is the good old &lt;a href=&quot;http://www.6502.org/tutorials/6502opcodes.html&quot; rel=&quot;noreferrer&quot;&gt;instruction list&lt;/a&gt; and its &lt;a href=&quot;http://www.6502.org/tutorials/65c02opcodes.html&quot; rel=&quot;noreferrer&quot;&gt;65C02 sibling&lt;/a&gt; at &lt;a href=&quot;http://www.6502.org/&quot; rel=&quot;noreferrer&quot;&gt;6502.org&lt;/a&gt; - which is always a great first stop about all things 6502. If you want to dig really deep into the internal workings of how and why, then a first look at &lt;a href=&quot;https://www.witwright.com/DonPub/6502-Block-Diagram.pdf&quot; rel=&quot;noreferrer&quot;&gt;Hanson's diagram&lt;/a&gt; will help to understand - plus of course the wonderful &lt;a href=&quot;http://visual6502.org/&quot; rel=&quot;noreferrer&quot;&gt;Visual 6502 site&lt;/a&gt; and its quite intriguing &lt;a href=&quot;http://visual6502.org/JSSim/index.html&quot; rel=&quot;noreferrer&quot;&gt;emulation&lt;/a&gt; - just be aware that this is maybe way above the level of someone tackling these issues for the first time.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - This is due to the way instruction fetch works. Rockwell (R6500) and CMOS (65C02) versions removed that in part.&lt;/p&gt;&#xA;&lt;p&gt;*2 - I.e. &lt;code&gt;zp,X&lt;/code&gt; and &lt;code&gt;(zp,X)&lt;/code&gt;. Here the 8 bit base address is fetched from instruction (&lt;code&gt;zp,X&lt;/code&gt;) or zero page (&lt;code&gt;(zp,X)&lt;/code&gt;) and a cycle is needed to do the indexing.&lt;/p&gt;&#xA;&lt;p&gt;*3 - When the 8 bit instruction&lt;/p&gt;&#xA;&lt;p&gt;*4 - Also noted with a '+' after the number of cycles, which is the standard notation to show this.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-07T20:30:58.357" LastActivityDate="2021-02-07T20:30:58.357" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17892" PostTypeId="1" CreationDate="2021-02-07T01:06:16.677" Score="3" ViewCount="339" Body="&lt;p&gt;Would that allow for better sound samples or double/triple the number of sprites &amp;amp; colours on screen or would that put too much pressure on the CPU or cause bottlenecks, maybe requiring 2 CPUs for such a set up?&lt;/p&gt;&#xA;&lt;p&gt;Say for example you had a 68000, paired up with 2 PPU (SNES) &amp;amp; 2 Yamaha 3812 sound chips. Or any combination of 8/16bit CPU with appropriate era graphics &amp;amp; sound hardware.&lt;/p&gt;&#xA;&lt;p&gt;I know that some arcade machines had 2 CPUs &amp;amp; 2 or more sound chips (can't think of any off the top of my head) &amp;amp; the Sega Saturn which was a bit later than the 16bit era had 2 graphics cards but I can't think of any 8/16 bit machines that had multiple VDPs.&lt;/p&gt;&#xA;&lt;p&gt;Are there any historical examples of using multiple VDPs / sound chips in a single product, or any persuasive arguments for doing so in a modern retro-build?&lt;/p&gt;&#xA;" OwnerUserId="19655" LastEditorUserId="15334" LastEditDate="2021-02-15T12:49:49.683" LastActivityDate="2021-02-15T12:49:49.683" Title="Would there be any practical use of two or more VDPs or sound chips in a retro computer build?" Tags="&lt;graphics&gt;&lt;cpu&gt;&lt;sound&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17894" PostTypeId="2" ParentId="17892" CreationDate="2021-02-07T02:22:01.537" Score="6" Body="&lt;p&gt;Double-SID mod for Commodore 64 is quite popular. Simultaneous work with CGA and MDA, albeit on different monitors, was also quite popular. Sharp X68000 deserves special attention, taking into account its popular hardware extensions. A classic example of doubling VDP is PC Engine SuperGrafx.&lt;/p&gt;&#xA;&lt;p&gt;Considering the principles of operation of the graphic subsystems of the type mentioned in the start topic, the main problem is not with the performance of the processor, but with the speed of the buses, RAM and DMA channels.&lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2021-02-07T02:22:01.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17895" PostTypeId="2" ParentId="17892" CreationDate="2021-02-07T05:28:50.070" Score="6" Body="&lt;p&gt;Having multiple graphics or sound chips in a system has exactly the effects you would expect. It would allow the composite system to perform multiple processing tasks at once, with the results of each contributing processor being combined into the final output (or spread across multiple outputs), producing more sophisticated visuals or sounds.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Graphics:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Multiple video processors provide the ability to compose an image with multiple independent display layers, whether they be bitmaps composed of bitplanes or chunky layers, sprites or tilemaps.&lt;/p&gt;&#xA;&lt;p&gt;An example: The 32X attachment for the Mega Drive provides a separate video chip independent of the one in the base system. They both draw their own set of tilemaps and sprites simultaneously, with the output from the Mega Drive being routed into the 32X with a video cable, and then output to the TV afterwards. The result is &lt;strong&gt;additional independent layers of graphics&lt;/strong&gt;, and &lt;strong&gt;additional video RAM for storing tiles and sprites&lt;/strong&gt; (in that both units are independently storing their own resources).&lt;/p&gt;&#xA;&lt;p&gt;A similar system is used when a 2D graphics adapter is used with an early 3D graphics accelerator in a Win 98-era PC. Like the 32X, you plug the output of one into the other. The 3dfx Voodoo accelerator provides 3D graphics rendering, which is mixed with the 2D image buffer provided by the 2D card.&lt;/p&gt;&#xA;&lt;p&gt;Later, a similar card-linking system for the PC would be developed (with various names, such as like SLI) where two cards work in unison to provide a single output image by processing partial parts of the output simultaneously.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sound:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;A system comprised of multiple independent sound chips can use all the different voices and modes of the base chips mixed in any way the system designer has allowed for. If the outputs of the chips are mixed together, this allows all the independent waveform/PSG/FM voices to be used at once, or assigned to different stereo channels. It could also be used to provide a higher bit-resolution output.&lt;/p&gt;&#xA;&lt;p&gt;Examples:&lt;/p&gt;&#xA;&lt;p&gt;The original Sound Blaster PC sound card included a single OPL2 FM synthesizer chip for AdLib music card compatibility. This chip provides mono music output. The Sound Blaster Pro 1 improves on this by &lt;strong&gt;including a second OPL2 alongside the first&lt;/strong&gt;. The two chips are linked to the left and right channels to provide &lt;strong&gt;stereo musical output&lt;/strong&gt;; as each chip is programmed independently, complex panning and echo effects are possible. Many Sierra DOS games provided special support for the Dual OPL2 version of the Sound Blaster Pro in their music driver.&lt;/p&gt;&#xA;&lt;p&gt;(For backwards compatibility, attempted direct hardware access to the original single OPL2 affects both the chips in the Pro 1 equally, resulting in a mono sound. Later SB Pros used an OPL3 chip instead which uses a different interface - still single OPL2 compatible, but not with dual OPL2.)&lt;/p&gt;&#xA;&lt;p&gt;Later Sound Blaster cards and clones combine even more multiple independent sound interfaces together! Final generation ISA Sound Blaster AWE cards contain:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;OPL3 FM synthesized sound (backwards compatible with OPL2),&lt;/li&gt;&#xA;&lt;li&gt;a typical SB series DMA-driven PCM stereo waveform sound stream,&lt;/li&gt;&#xA;&lt;li&gt;an EMU8000 wavetable sound processor,&lt;/li&gt;&#xA;&lt;li&gt;a feature connector for an add-on wavetable sound processor with its&#xA;own ROM sounds, (distinct from the EMU)&lt;/li&gt;&#xA;&lt;li&gt;CD-ROM interface Redbook audio input,&lt;/li&gt;&#xA;&lt;li&gt;and a line-in input (which may be connected to an&#xA;external MIDI device through the MPU-401-compatible gameport for&#xA;high-quality sampler MIDI music)!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;DOS and Windows games may use any combination of these to provide sound and music output.&lt;/p&gt;&#xA;&lt;p&gt;And, yes, I believe that if you put multiple sound cards in a PC and there were no resource conflicts (manual settings for DOS, maybe a bit of tweaking for Windows), you could combine multiple sound cards together in that fashion as well. It's possible to install a Gravis Ultrasound wavetable-based card alongside a Sound Blaster PCM-waveform-based card, though very very few pieces of software would attempt to use them both simultaneously!&lt;/p&gt;&#xA;&lt;p&gt;The Mega Drive contains both the YM2612 FM chip and the earlier SN76489 PSG chip from the Master System. Games use both together in various ways to provide different musical timbres - the FM chip produces bassy sounds, and complex effects; the PSG chip produces square waves. Instrument patches can use any number of voices from either chips to create complex output sounds one chip alone could not produce.&lt;/p&gt;&#xA;&lt;p&gt;The CPU overhead of controlling a synthesizer chip is not high. The whole purpose of using chips like these is to offload waveform calculation to the chips themselves rather than the CPU. In the simplest case, a small routine updates the register state of each chip at regular intervals. The most complex thing a synthesizer chip control routine would do is to constantly alter the parameters of the synthesized tone by calculating or stepping through an ADSR envelope to provide a more pleasing sound than the straight square-wave tone of a PSG chip (such as vibrato effects in Game Boy music), and even that is very low-overhead.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2021-02-07T06:14:44.000" LastActivityDate="2021-02-07T06:14:44.000" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17896" PostTypeId="1" AcceptedAnswerId="17897" CreationDate="2021-02-07T06:19:34.797" Score="7" ViewCount="130" Body="&lt;p&gt;&lt;a href=&quot;http://www.compucolor.org/emu/ccemu.html&quot; rel=&quot;noreferrer&quot;&gt;This Compucolor 2 emulator&lt;/a&gt; uses disk images with the file extension &lt;code&gt;.ccvf&lt;/code&gt;. &lt;a href=&quot;https://github.com/jtbattle/ccemu/blob/master/emu/disks/action_collection.ccvf&quot; rel=&quot;noreferrer&quot;&gt;Here is an example file&lt;/a&gt;. I would like to understand how to interpret that format.&lt;/p&gt;&#xA;&lt;p&gt;I understand from &lt;a href=&quot;http://www.compucolor.org/tech.html&quot; rel=&quot;noreferrer&quot;&gt;the documentation&lt;/a&gt; that the disk contains a raw bitstream to be fed to a UART, using one low start bit and one high stop bit. &lt;a href=&quot;https://github.com/jtbattle/ccemu/blob/ca5ca6dd7336373ef692b6f002bcf7e3dd1cfc99/emu/js/floppy.js#L144&quot; rel=&quot;noreferrer&quot;&gt;The emulator source code&lt;/a&gt; makes it clear that the &amp;quot;bytes&amp;quot; in the &lt;code&gt;.ccvf&lt;/code&gt; file are incidental, and they should be interpreted as a sequence of bits.&lt;/p&gt;&#xA;&lt;p&gt;However, if I do that (and in the same bit order as reverse-engineered from the &lt;code&gt;peekByte&lt;/code&gt; function linked above), the resulting 10-bit units don't seem to match the start/8-bit data/stop format that I expected. For example, &lt;a href=&quot;https://github.com/jtbattle/ccemu/blob/ca5ca6dd7336373ef692b6f002bcf7e3dd1cfc99/emu/disks/action_collection.ccvf#L84&quot; rel=&quot;noreferrer&quot;&gt;track 1 of this disk image&lt;/a&gt;, when converted to a stream of bits, starts like this (grouped in 10s):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0,00010011,0,&#xA;1,01000111,0,&#xA;1,01010111,0,&#xA;0,10101111,0,&#xA;1,11101101,1,&#xA;1,11111111,1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I would expect the middle 8 bits to correspond to the actual data (as bytes), in the bit order prescribed by the UART; but we can see 0 stop bits (e.g. line 1) and 1 start bits (e.g. line 2), which don't make much sense.&lt;/p&gt;&#xA;&lt;p&gt;My goal as a first step would be to get a list of 8-bit bytes from these disk images, corresponding to the data that ultimately appears on the TMS5501's port 0 (&amp;quot;read serial data&amp;quot;). Evidently, just taking the middle 8 bits of these 10-bit words is not enough. How can I achieve this?&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2021-02-07T07:00:12.020" Title="Compucolor 2 emulator CCEmu's `.ccvf` disk format" Tags="&lt;emulation&gt;&lt;8080&gt;&lt;file-format&gt;&lt;disk-image&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17897" PostTypeId="2" ParentId="17896" CreationDate="2021-02-07T07:00:12.020" Score="6" Body="&lt;p&gt;I played around a bit with it, and it seems the solution is to basically emulate the full UART behaviour, in particular in regards to detecting start bits. Instead of framing statically by 10 bits, we need to walk the bits until we find a high -&amp;gt; low transition (the start bit), and then we take the next 9 bits as the 8 data bits (lsb first) and a high stop bit; the only use of the latter is to check for frame errors, and also to potentially act as the high bit for the high -&amp;gt; low transition for the next byte.&lt;/p&gt;&#xA;&lt;p&gt;Here's some Haskell code to illustrate the idea:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;splitUART :: [Bit] -&amp;gt; [Word8]&#xA;splitUART = start 0&#xA;  where&#xA;    start _ (1:bs) = start 1 bs&#xA;    start 0 (0:bs) = start 0 bs&#xA;    start 1 (0:bs) = consume bs&#xA;    start _ [] = []&#xA;&#xA;    consume :: [Bit] -&amp;gt; [Word8]&#xA;    consume bs = case splitAt 9 bs of&#xA;        ([], []) -&amp;gt; []&#xA;        (fromBits -&amp;gt; (byte, b8), bs') -&amp;gt; byte : start b8 bs'&#xA;&#xA;    fromBits :: [Bit] -&amp;gt; (Word8, Bit)&#xA;    fromBits [b0, b1, b2, b3, b4, b5, b6, b7, b8] = (bitCoerce (b7, b6, b5, b4, b3, b2, b1, b0), b8)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Applying this on track 1 of the disk image from my question, I can see directory entries like &lt;code&gt;INVADEPRG&lt;/code&gt; and &lt;code&gt;MENU  BAS&lt;/code&gt;, convincing me that I have the decoding right.&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2021-02-07T07:00:12.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17898" PostTypeId="1" AcceptedAnswerId="17899" CreationDate="2021-02-07T09:01:08.063" Score="5" ViewCount="238" Body="&lt;p&gt;I stumbled upon screenshots of the Tiger Game.Com handheld running its Resident Evil 2 port and I'm curious to know what its graphical capabilities actually are:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/G88Jc.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G88Jc.png&quot; alt=&quot;https://twitter.com/_Kimimi/status/1357724774500360192&quot; /&gt;&lt;/a&gt;&#xA;(from: &lt;a href=&quot;https://twitter.com/_Kimimi/status/1357724774500360192&quot; rel=&quot;noreferrer&quot;&gt;https://twitter.com/_Kimimi/status/1357724774500360192&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;It seems to be capable of very large sprites and backgrounds which don't feature any obvious tiling.  I would guess that perhaps it has a framebuffer which is filled in by its CPU (which at 200x160, 10MHz while also handling audio and gameplay logic, would explain the slow frame rate) but I haven't been able to find any articles which describe any hardware accelerated graphics such as the Game Boy's tiling background or OAM sprites.  Does anybody know if the handheld featured any?&lt;/p&gt;&#xA;" OwnerUserId="20756" LastActivityDate="2021-02-07T10:18:11.250" Title="Did the Tiger Game.Com include any hardware accelerated graphics?" Tags="&lt;graphics&gt;&lt;handheld&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17899" PostTypeId="2" ParentId="17898" CreationDate="2021-02-07T10:18:11.250" Score="4" Body="&lt;p&gt;The Game.com doesn't support sprites or tilemaps. It has a flat, memory-mapped bitmap display with internal support for accelerated optionally-masked and/or X/Y flipped rectangle blits.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;From what I can tell, the Tiger Game.com is basically a Sharp SM8521 &amp;quot;Single Chip Microcomputer&amp;quot; (&lt;a href=&quot;https://jp.sharp/ic/datasheet/micon/pdf/sm8521.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet&lt;/a&gt;) with a touchscreen display added on. That chip has two internal 8k byte VRAM banks of 200x160 pixels with 2 bits per pixel. I believe the currently displayed bank can be toggled for double buffering.&lt;/p&gt;&#xA;&lt;p&gt;On pages 35 and 36, the datasheet describes a DMA mode internal to the chip that allows it to perform rectangle masked blits from ROM to VRAM, or VRAM to VRAM.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZqrRi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZqrRi.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/1zHv3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1zHv3.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Page 39 describes a method of horizontally flipping data during a blit. Vertical flipping can be achieved by setting a negative Y increment.&lt;/p&gt;&#xA;&lt;p&gt;There's also some other stuff there about 'gradations' which seems to be a kind of palette transformation during a copy, but I don't understand that.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastActivityDate="2021-02-07T10:18:11.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17901" PostTypeId="1" CreationDate="2021-02-07T11:30:23.667" Score="1" ViewCount="44" Body="&lt;p&gt;RR-Net documentation describes a &lt;a href=&quot;http://wiki.icomp.de/wiki/RR-Net#Detecting_MK3&quot; rel=&quot;nofollow noreferrer&quot;&gt;detection algorithm&lt;/a&gt; for the MK3 model. The algorithm is supposed to reveal the last four hex digits of the MAC address. According to documentation the MAC address &lt;code&gt;28:CD:4C:FF:&amp;lt;HI&amp;gt;:&amp;lt;LO&amp;gt;&lt;/code&gt; should have the value &lt;code&gt;&amp;lt;HI&amp;gt;&lt;/code&gt; stored at &lt;code&gt;$de0c&lt;/code&gt;. The default MAC is supposed to be &lt;code&gt;28:CD:4C:FF:FB:FF&lt;/code&gt;. I would thus expect &lt;code&gt;PRINT(PEEK(56844))&lt;/code&gt; to return &lt;code&gt;251&lt;/code&gt; to match the &lt;code&gt;FB&lt;/code&gt; of the default. However, it doesn't seem to work.&lt;/p&gt;&#xA;" OwnerUserId="20628" LastActivityDate="2021-02-07T11:30:23.667" Title="How to Perform RR-Net MK3 Detection on VICE Commodore 64 Emulator?" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;network&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17902" PostTypeId="1" CreationDate="2021-02-07T13:01:45.273" Score="2" ViewCount="98" Body="&lt;p&gt;I finally managed to get basic networking stuff working on VICE, thanks to another &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17749/running-warpcopy64-on-an-emulator&quot;&gt;thread&lt;/a&gt; on Retrocomputing. I'm now wondering how to setup a &lt;a href=&quot;http://wiki.icomp.de/wiki/Codenet&quot; rel=&quot;nofollow noreferrer&quot;&gt;Codenet&lt;/a&gt; server emulation.&lt;/p&gt;&#xA;&lt;p&gt;I was able to identify four Codenet implementations.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The original firmware of &lt;a href=&quot;http://wiki.icomp.de/wiki/RR-Net&quot; rel=&quot;nofollow noreferrer&quot;&gt;RR-Net&lt;/a&gt; MK3,&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;https://svn.icomp.de/svn/rrnetmk3/trunk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;alternative&lt;/a&gt; firmware for RR-Net MK3,&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;http://www.oxyron.de/html/freplay.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;FinalReplay&lt;/a&gt; image for the &lt;a href=&quot;http://wiki.icomp.de/wiki/Retro_Replay&quot; rel=&quot;nofollow noreferrer&quot;&gt;Retro Replay&lt;/a&gt; and&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;https://www.dekadence64.org/prodstools.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turbo Action&lt;/a&gt; image for the  Retro Replay.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I'm unable to locate an image of the original firmware. I guess it is only shipped with the hardware.&lt;/p&gt;&#xA;&lt;p&gt;The alternative firmware is available online. The archive contains a disk image with a tool used for flashing the hardware. I believe I could setup the VICE RR-Net Mk3 emulation to extract the image from the flash utility and then use the VICE &lt;em&gt;cartconv&lt;/em&gt; utility to convert the image into a cart. However, I did not yet go through the trouble of doing all that. Perhaps that is worth trying.&lt;/p&gt;&#xA;&lt;p&gt;Setting up Final Replay seemed a bit easier. I first configured IP addresses with the included setip.exe. I then converted the raw image to a crt image with &lt;code&gt;cartconv -t rr -i tfr08.bin -o tfr08.crt&lt;/code&gt;. After performing a &lt;em&gt;smart attach&lt;/em&gt; in VICE the Final Replay banner was displayed. The included &lt;code&gt;INFO&lt;/code&gt; command displayed the configuration correctly. I then run the &lt;code&gt;CODENET&lt;/code&gt; command to start the server and got a blinking text &lt;code&gt;READY.&lt;/code&gt;. I wonder if this the intended behavior when the server is waiting for instructions. However, I was unable to get a response from the server by sending hand crafted Codenet instructions.&lt;/p&gt;&#xA;&lt;p&gt;I'm able to start Turbo Action by using cartconv to convert the raw image in similar manner to Final Replay. I then press F7 to get into the command prompt. At this point I can run command &lt;code&gt;HELP&lt;/code&gt; to list Turbo Action commands. The networking and Codenet related commands &lt;code&gt;CONF&lt;/code&gt; and &lt;code&gt;CODENET&lt;/code&gt; are listed but but VICE crashes with &lt;code&gt;Main CPU: Jam&lt;/code&gt; if I try to execute either one of them.&lt;/p&gt;&#xA;" OwnerUserId="20628" LastActivityDate="2021-02-07T13:01:45.273" Title="Running Codenet on a Commodore 64 Emulator" Tags="&lt;commodore-64&gt;&lt;emulation&gt;&lt;network&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17903" PostTypeId="1" AcceptedAnswerId="17904" CreationDate="2021-02-07T15:16:08.943" Score="39" ViewCount="6732" Body="&lt;p&gt;I first read &lt;a href=&quot;https://www.redballoon.net/humor/alice.txt&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;Alice in UNIX Land&amp;quot;&lt;/a&gt; (by Lincoln Spector, Texas Computer Currents, Sept. 1989), probably around the time when it was written — and at that time didn't understand very many of the jokes. Having gradually gained some experience (or at least age) I think I get nearly all of it now except this one passage:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;But then again,&amp;quot; suggested the Woodpecker, &lt;strong&gt;&amp;quot;what about the&#xA;shrinkwrap issue?&amp;quot;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Suddenly, everyone leaped up and started dashing about, waving&#xA;their hands in the air and screaming.  Just as suddenly, they all sat&#xA;down again.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Now that that's settled,&amp;quot; said the Woodpecker, &amp;quot;let's go back&#xA;to tasting flavors.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In context I get that the jokes are mostly about evaluating the various types (&amp;quot;flavors&amp;quot;) of Unix and other operating systems at the time, generally to point out some sort of weakness. Apparently &amp;quot;the shrinkwrap issue&amp;quot; causes all the characters a lot of stress, so much so they just move on to the next topic without settling anything despite stating the contrary.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Shrinkwrap&amp;quot; sounds like it refers to selling boxed software in a store. But at the time I thought commercial Unix was almost exclusively sold in conjunction with hardware generally from the same manufacturer (*). So I don't see how that would apply.&lt;/p&gt;&#xA;&lt;p&gt;Were there Unix vendors trying to sell directly to the PC market at the time?&lt;/p&gt;&#xA;&lt;p&gt;Or if not, what's the joke?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;(* Maybe that was not true for something like BSD, but I didn't think BSD was sold on shelves anyway).&lt;/p&gt;&#xA;" OwnerUserId="11795" LastEditorUserId="15334" LastEditDate="2021-02-07T17:33:21.373" LastActivityDate="2021-02-08T23:59:50.347" Title="What was &quot;the shrinkwrap issue?&quot;" Tags="&lt;history&gt;&lt;unix&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="17904" PostTypeId="2" ParentId="17903" CreationDate="2021-02-07T17:01:00.050" Score="50" Body="&lt;p&gt;The shrinkwrap issue was a vicious circle perceived by the computer industry in the late 1980s to early 1990s. In essence:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;With many different processors and binary formats, it was difficult for a commercial “killer app” to gain enough market share to bring users to Unix;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Without the strong commercial user and software base, there was little incentive to develop software that would have become a huge commercial success.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Since commercial software of the era was sold on physical media, boxed and shrinkwrapped, this issue was seen as preventing the sale of Unix software in volume.&lt;/p&gt;&#xA;&lt;p&gt;A fair summary is given in this case study from 1992: &lt;a href=&quot;http://www-personal.umich.edu/%7Eafuah/cases/case12.html&quot; rel=&quot;noreferrer&quot;&gt;Operating RISC: Unix Standards in the 1990s&lt;/a&gt;. It includes discussion of two of the groups attempting to unify Unix, &lt;a href=&quot;https://en.wikipedia.org/wiki/X/Open&quot; rel=&quot;noreferrer&quot;&gt;X/Open&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Unix_International&quot; rel=&quot;noreferrer&quot;&gt;Unix International&lt;/a&gt;. They eventually merged in 1996.&lt;/p&gt;&#xA;&lt;p&gt;The rise of the 386 and 486 processors gave hope of a common application binary interface (ABI) that would have allowed the one compiled program to run on many platforms. SPARC, MIPS, PA-RISC and DEC Alpha were all contenders in the non-Intel workstation side. None of these initiatives foresaw the unexpected rise of Linux.&lt;/p&gt;&#xA;&lt;p&gt;If you hadn't experienced it, the sheer number of API variants that passed as Unix-like systems before the rise of Linux was utterly bewildering. Look at all the options that mature packages like &lt;a href=&quot;http://www.kermitproject.org/index.html&quot; rel=&quot;noreferrer&quot;&gt;Kermit&lt;/a&gt;, &lt;a href=&quot;https://www.perl.org/get.html&quot; rel=&quot;noreferrer&quot;&gt;Perl&lt;/a&gt; or &lt;a href=&quot;https://www.gnu.org/software/autoconf/&quot; rel=&quot;noreferrer&quot;&gt;Autoconf&lt;/a&gt; have to consider to support compilation, and you'll have just a glimpse of how ugly and complex maintaining a commercial Unix package used to be.&lt;/p&gt;&#xA;&lt;p&gt;In a way, the shrinkwrap issue lives on in the very tired old question of “Is ____ the Year of Linux on the Desktop?” Shrinkwrap as a concept in software disappeared with fast internet for software distribution and the uptake of mobile devices.&lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2021-02-08T23:59:50.347" LastActivityDate="2021-02-08T23:59:50.347" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="17905" PostTypeId="2" ParentId="12529" CreationDate="2021-02-07T17:03:02.777" Score="1" Body="&lt;p&gt;It has been recently observed (in &lt;a href=&quot;https://forums.nesdev.com/viewtopic.php?t=18335#p232656&quot; rel=&quot;nofollow noreferrer&quot;&gt;nesdev&lt;/a&gt;) that the Gameboy CPU appears equivalent to the SM83 CPU described in &lt;a href=&quot;http://www.bitsavers.org/components/sharp/_dataBooks/1996_Sharp_Microcomputer_Data_Book.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this PDF&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;(Both CPUs appear to have the same instruction set and the same interrupt vector locations - but are connected to different hardware and interrupts)&lt;/p&gt;&#xA;&lt;p&gt;Looking at the SM83-using hardware in the PDF (SM8311/SM8313/SM8314/SM8315) - it has:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All I/O registers between $ffd0 and $ffff&lt;/li&gt;&#xA;&lt;li&gt;The IE register at $ffff (same place as in the Gameboy)&lt;/li&gt;&#xA;&lt;li&gt;The IF register at $fffe&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It should also be noticed that, as per the diagram in page 148 in that PDF, the interrupt logic (including IE and IF) is part of the CPU core.&lt;/p&gt;&#xA;&lt;p&gt;Now, the rest is pure speculation, but perhaps something in the design of the SM83 CPU required the IE register to be in $ffff, so while the rest of the I/O registers (including IF) have been successfully relocated to $ff00 to $ff7f in the gameboy, IE just couldn't be moved the same way, and was kept in $ffff as a compromise?&lt;/p&gt;&#xA;&lt;p&gt;(E.g. perhaps the CPU relies on IE being at an all-ones address)&lt;/p&gt;&#xA;&lt;p&gt;Of course, that does raise the question of why the gameboy moved the I/O area to $ff00..$ff7f, instead of putting the HRAM there...&lt;/p&gt;&#xA;" OwnerUserId="10686" LastEditorUserId="10686" LastEditDate="2021-02-07T17:31:47.430" LastActivityDate="2021-02-07T17:31:47.430" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17906" PostTypeId="1" AcceptedAnswerId="17908" CreationDate="2021-02-07T18:38:29.270" Score="6" ViewCount="482" Body="&lt;p&gt;Three are ICs labeled memory select used in Apple II.&lt;/p&gt;&#xA;&lt;p&gt;One to apply A6 on the three banks of RAM ICs.&lt;/p&gt;&#xA;&lt;p&gt;One to generate /RAM_SEL applying the latched RAM output to the data bus.&lt;/p&gt;&#xA;&lt;p&gt;And one to apply /CAS on the three banks of RAM ICs.&lt;/p&gt;&#xA;&lt;p&gt;On the schematics they appear like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vCKx4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vCKx4.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;On the board like that:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/M98Bd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/M98Bd.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I need to know the logic of this IC: What are the three inputs from one side, the 7 inputs from another side and how they define the three outputs.&lt;/p&gt;&#xA;" OwnerUserId="18338" LastEditorUserId="3297" LastEditDate="2021-02-10T08:37:29.207" LastActivityDate="2021-02-10T08:37:29.207" Title="Identifying the functionality of the memory select IC in Apple II" Tags="&lt;apple-ii&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17907" PostTypeId="2" ParentId="17906" CreationDate="2021-02-07T18:47:06.290" Score="1" Body="&lt;p&gt;It's almost certainly not an IC but just a passive set of wire links that are routed differently depending the memory configuration.&lt;/p&gt;&#xA;&lt;p&gt;You may be able to work out what is needed from the signals available on the left and what is required on the right.&lt;/p&gt;&#xA;" OwnerUserId="15533" LastActivityDate="2021-02-07T18:47:06.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17908" PostTypeId="2" ParentId="17906" CreationDate="2021-02-07T18:49:18.850" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I need to know the logic of this IC:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They are not IC, but bridges (wires) connecting the inputs to the chips, depending what type is plugged in each of the RAM rows.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What are the three inputs from one side, the 7 inputs from another side&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's marked on the schematics, isn't it?&lt;/p&gt;&#xA;&lt;p&gt;They are fed by the decoded address signals from the 139's left of the excerpt, which in turn get their input from the 257 multiplexers, which in turn get fed by the A12..A15 from CPU or Video.&lt;/p&gt;&#xA;&lt;p&gt;Output is A6 (for 16 Ki) and CAS (Pin 13/15 of the RAMs), as well as RAMSEL used to multiplex the data in lines. All right of the excerpt.&lt;/p&gt;&#xA;&lt;p&gt;Nothing spectacular, just wiring.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and how they define the three outputs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By connecting whatever is needed for the desired combination.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;What exists:&lt;/h2&gt;&#xA;&lt;p&gt;Originally there were 4 different types:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For 1..3 rows of 4 Ki RAMs marked  4K/4K/4K&lt;/li&gt;&#xA;&lt;li&gt;For one row of 16 Ki and 0..2 Rows of 4 Ki RAMs marked 16K/4K/4K&lt;/li&gt;&#xA;&lt;li&gt;For one or two Rows of 16 Ki or two rows of 16 Ki and one row of 4 Ki RAMs marked 16K/16K/4K&lt;/li&gt;&#xA;&lt;li&gt;For 1..3 rows of 16 Ki RAMs marked  16K/16K/16K&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The later is is the most common and fixed in place on the later runs of early boards - like seen in the picture.&lt;/p&gt;&#xA;&lt;h2&gt;Why&lt;/h2&gt;&#xA;&lt;p&gt;It's a single solution to two problems&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;4 Ki and 16 Ki RAM chips have a differing pinout and voltages&lt;/li&gt;&#xA;&lt;li&gt;The plugs allow the creation of a continuous address space without needing dedicated decoders for each row.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2&gt;What Configurations are Possible?&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8/8/12 KiB with 4K/4K/4K plugs&lt;/li&gt;&#xA;&lt;li&gt;16/20/24 KiB with 16K/4K/4K plugs&lt;/li&gt;&#xA;&lt;li&gt;16/32/36 KiB with 16K/16K/4K plugs&lt;/li&gt;&#xA;&lt;li&gt;16/32/48 KiB with 16K/16K/16K plugs&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-07T19:24:49.570" LastActivityDate="2021-02-07T19:24:49.570" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17910" PostTypeId="1" AcceptedAnswerId="17912" CreationDate="2021-02-08T12:06:00.173" Score="5" ViewCount="587" Body="&lt;p&gt;Following my previous question on &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17906/identifying-the-functionalinty-of-the-memory-select-ic-in-apple-ii&quot;&gt;Identifying the functionality of the memory select in Apple II&lt;/a&gt; and now that I know that the memory select device is simply an interconnection block. Searching for more, I found the Apple II red book where the memory select is explained with the following figure:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XhuYo.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XhuYo.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So I represent the interconnection scheme as I got it. For 16K/16K/16k:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WZtNa.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WZtNa.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For 16K/4K/4K:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4P0Dj.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4P0Dj.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now the question is: why the last 4K block is (6000 - EFFF) and not (8000 - 8FFF)?&lt;/p&gt;&#xA;&lt;p&gt;Is it related to RAM mirroring, bank-switched ROM or anything else?&lt;/p&gt;&#xA;" OwnerUserId="18338" LastEditorUserId="18338" LastEditDate="2021-02-08T12:44:11.397" LastActivityDate="2021-02-08T21:15:21.433" Title="What is the reason of the particular range of the last 4K block of memory selection in Apple II" Tags="&lt;apple-ii&gt;&lt;memory-layout&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17911" PostTypeId="2" ParentId="17910" CreationDate="2021-02-08T13:37:22.877" Score="2" Body="&lt;p&gt;I'm not near my Red Book at the moment, but a quick look at the schematics seems to support (*1) your assumption of Block 7 being $8000-$8FFF.&lt;/p&gt;&#xA;&lt;p&gt;The fine details of how it's decoded are rather complex. You may want to take a look at how thee 139's on position E2/F2 are connected to the address lines (A12..15), and especially how E2 is enabled, as well as note that what is A6 on a 16 Ki RAM (4116) is /CS on a 4 Ki type (4096).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Haven't drawn up the full table, so no guarantee here.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-08T14:12:59.020" LastActivityDate="2021-02-08T14:12:59.020" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17912" PostTypeId="2" ParentId="17910" CreationDate="2021-02-08T17:58:13.563" Score="6" Body="&lt;p&gt;Actually my book has &lt;code&gt;$8000-$8FFF&lt;/code&gt; for pin 7 (but it's a German translation).&lt;/p&gt;&#xA;&lt;p&gt;And it's also &lt;code&gt;$8000-$8FFF&lt;/code&gt; in the Apple II Reference manual on &lt;a href=&quot;https://archive.org/details/apple-ii-ref-manual/page/n79/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;archive.org&lt;/a&gt;, p. 71.&lt;/p&gt;&#xA;&lt;p&gt;And it's also &lt;code&gt;$8000-$8FFF&lt;/code&gt; in the Apple II red book on &lt;a href=&quot;https://archive.org/details/Apple_II_Redbook/page/n135/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;archive.org&lt;/a&gt;, p. 133, though you can see that there is a hand-drawn correction in it.&lt;/p&gt;&#xA;&lt;p&gt;So, a mistake that was later corrected? Can you give a link to the Apple II red book where you found it?&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-02-08T21:15:21.433" LastActivityDate="2021-02-08T21:15:21.433" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17913" PostTypeId="1" CreationDate="2021-02-08T23:04:59.967" Score="9" ViewCount="227" Body="&lt;p&gt;From &lt;a href=&quot;https://www.problemkaputt.de/gbatek.htm#dspowercontrol&quot; rel=&quot;noreferrer&quot;&gt;GBATEK&lt;/a&gt;, writes to a certain I/O port for power management may damage hardware:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;4000304h - NDS9 - POWCNT1 - Graphics Power Control Register (R/W)&#xA;  0     Enable Flag for both LCDs (0=Disable) (Prohibited, see notes)&#xA;  1     2D Graphics Engine A      (0=Disable) (Ports 008h-05Fh, Pal 5000000h)&#xA;  2     3D Rendering Engine       (0=Disable) (Ports 320h-3FFh)&#xA;  3     3D Geometry Engine        (0=Disable) (Ports 400h-6FFh)&#xA;  4-8   Not used&#xA;  9     2D Graphics Engine B      (0=Disable) (Ports 1008h-105Fh, Pal 5000400h)&#xA;  10-14 Not used&#xA;  15    Display Swap (0=Send Display A to Lower Screen, 1=To Upper Screen)&#xA;  16-31 Not used&#xA;Use SwapBuffers command once after enabling Rendering/Geometry Engine.&#xA;&lt;b&gt;Improper use of Bit0 may damage the hardware?&lt;/b&gt;&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;Emphasis mine. The document does not go into detail and provides no concrete information. How could improper use of the enable flag for LCDs cause hardware damage? Under what circumstances would it cause damage, and what types of damage to the hardware would it cause?&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;I've posted this after writing a &lt;a href=&quot;https://retrocomputing.meta.stackexchange.com/q/984/8090&quot;&gt;meta question&lt;/a&gt; about the NDS and receiving the answer that it may finally count as retro.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="8090" LastActivityDate="2021-02-08T23:04:59.967" Title="Killer poke on the Ninendo DS via POWCNT1 register" Tags="&lt;hardware&gt;&lt;nintendo-ds&gt;" AnswerCount="0" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17915" PostTypeId="1" AcceptedAnswerId="17916" CreationDate="2021-02-09T12:30:00.307" Score="5" ViewCount="472" Body="&lt;p&gt;I learnt that there are 4 video modes as described on &lt;a href=&quot;https://en.wikipedia.org/wiki/PC-8800_series#Graphics&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiki&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I came across many games for the PC-88, like &lt;a href=&quot;https://classicreload.com/sites/default/files/thexder-screenshot.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Thexder&lt;/a&gt; (1985), which are in the aspect ratio of 4:3 and in more than 2 colors.&lt;/p&gt;&#xA;&lt;p&gt;I don't understand how this works and can't find a resource describing it.&lt;/p&gt;&#xA;&lt;p&gt;My guesses are, games work like this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;run in n-mode (160×100)&lt;/li&gt;&#xA;&lt;li&gt;are displayed in 640×400 but they only have 640×200 pixels (&amp;quot;clusters&amp;quot;?)&lt;/li&gt;&#xA;&lt;li&gt;scale a 320×200 picture up to 640×400&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Thank you for your help!&lt;/p&gt;&#xA;" OwnerUserId="20778" LastEditorUserId="15334" LastEditDate="2021-02-11T11:58:31.740" LastActivityDate="2021-02-11T11:58:31.740" Title="NEC PC-88 video mode and resolution in games" Tags="&lt;graphics&gt;&lt;nec-pc&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17916" PostTypeId="2" ParentId="17915" CreationDate="2021-02-09T12:55:43.510" Score="7" Body="&lt;p&gt;I don’t know about &lt;em&gt;all&lt;/em&gt; PC-88 games, but Thexder at least runs in 640×200 V2 mode with 8 colours, with dithering (which can also be seen in the PC version, which runs in 640×200 EGA).&lt;/p&gt;&#xA;&lt;p&gt;Screen resolution and aspect ratio are independent: you can assume in most cases that images will be displayed in 4:3 on CRTs of the time, which implies that pixels are stretched if necessary. 640×200 results in vertically-stretched pixels, and will be familiar to users of CGA computers (of which I imagine there are more here than PC-88 users). You can see this in properly-scaled screenshots of Thexder, for example &lt;a href=&quot;https://www.mobygames.com/game/pc88/thexder/screenshots/gameShotId,1002577/&quot; rel=&quot;noreferrer&quot;&gt;its title screen&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.mobygames.com/images/shots/l/1002577-thexder-pc-88-screenshot-title-screen.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://www.mobygames.com/images/shots/l/1002577-thexder-pc-88-screenshot-title-screen.png&quot; alt=&quot;Thexder title screen, PC-88 version&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-09T14:30:53.213" LastActivityDate="2021-02-09T14:30:53.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17917" PostTypeId="2" ParentId="17884" CreationDate="2021-02-09T15:38:34.993" Score="4" Body="&lt;p&gt;The second paragraph of &lt;a href=&quot;http://micklab.ru/ZX%20Spectrum/Leningrad2.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article&lt;/a&gt; lists the differences of Leningrad-2 from the original Leningrad:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Из конструктивных отличий от Ленинград следует отметить, что&#xA;изменилась схема сброса кадровых счетчиков, теперь сброс происходил по&#xA;312 строке, что является стандартом для ZX Spectrum машин.&#xA;Продолжительность сигнала прерывания теперь задается не RC цепочкой, а&#xA;фиксированно по сигналу счетчика строчной развертки. Кроме того введен&#xA;дешифратор для разделения обращения процессора к ПЗУ и ОЗУ. В&#xA;видеоформирователе была заменена связка К555ИР9 и К555ИР16 на три&#xA;микросхемы К555ИР16, в выходном каскаде цвета вместо транзисторов&#xA;используются логические элементы с открытым коллекотором К555ЛН2.&#xA;Также был изменен и магнитофонный интерфейс, вместо компаратора&#xA;К512СА3, узел был собран на микросхеме К561ЛН2. Кроме того на плате&#xA;появились разъемы ОНЦ-КГ-4-5/16Р, которые позволяли обходится без кучи&#xA;проводов, при подключения внешних устройств делая саму плату более&#xA;аккуратной и ремонтопригодной. Но главным нововведением, на мой&#xA;взгляд, является добавление системного разъема, который давал&#xA;возможность подключать внешние устройства, как например контроллер&#xA;дисковода.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'm providing this auto-translation by &lt;a href=&quot;https://www.translate.ru/links/8557af1f&quot; rel=&quot;nofollow noreferrer&quot;&gt;translate.ru&lt;/a&gt; online service, which, with a bit of imagination, does make some sense:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;From the design differences from Leningrad, it should be noted that&#xA;the scheme for resetting the frame counters has changed; now the reset&#xA;takes place on line 312, which is the standard for ZX Spectrum&#xA;machines. The duration of the interrupt signal is now set not by the&#xA;RC filter, but by the horizontal scan counter signal. In addition, a&#xA;decoder is introduced to separate the processor's access to ROM and&#xA;RAM. In the video generator, the bundle K555IR9 and K555IR16 was&#xA;replaced with three microcircuits K555IR16, in the color output stage,&#xA;instead of transistors, logic elements with an open collector K555LN2&#xA;are used. The tape interface was also changed, instead of the&#xA;comparator K512SA3, the node was assembled on the chip K561LN2. In&#xA;addition, ONTs-KG-4-5/16R connectors appeared on the board, which made&#xA;it possible to do without a heap of wires, when connecting external&#xA;devices, making the board itself neater and more repairable. But the&#xA;main innovation, in my opinion, is the addition of a system connector&#xA;that made it possible to connect external devices, such as a disk&#xA;drive controller.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="13578" LastEditorUserId="576" LastEditDate="2021-02-09T17:01:10.220" LastActivityDate="2021-02-09T17:01:10.220" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17918" PostTypeId="2" ParentId="17915" CreationDate="2021-02-09T23:27:16.110" Score="1" Body="&lt;p&gt;640×200 is basically 640×400 with each row of pixels repeated vertically by the electron beam. Since you're repeating pixels without using more memory, you can devote more memory to each pixel to provide more colors. 2 colors needs 1 bit of memory for each pixel (2&lt;sup&gt;1&lt;/sup&gt;=2), while 8 colors needs 3 bits per pixel (2&lt;sup&gt;3&lt;/sup&gt;=8).&lt;/p&gt;&#xA;" OwnerUserId="75" LastActivityDate="2021-02-09T23:27:16.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17919" PostTypeId="1" AcceptedAnswerId="17936" CreationDate="2021-02-10T04:44:23.723" Score="5" ViewCount="219" Body="&lt;p&gt;Looking at online specifications for the Power Macintosh 8500, I was able to find few details on its graphics capabilities beyond quantity of VRAM and supported color depths, refresh rates, and resolutions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://wiki.preterhuman.net/Power_Macintosh_8500#Video&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://wiki.preterhuman.net/Power_Macintosh_8500#Video&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://support.apple.com/kb/SP386&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://support.apple.com/kb/SP386&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Did it have any hardware acceleration of 2D graphics at all like that which would be seen later in the Power Macintosh 9600 with the &lt;a href=&quot;http://www.vgamuseum.info/index.php/component/k2/item/52-ixmicro-twin-turbo-128m2&quot; rel=&quot;nofollow noreferrer&quot;&gt;IXMICRO TwinTurbo 128&lt;/a&gt;? For example, were there any specialized units for screen-to-screen copies, bresenham lines, or raster operations?&lt;/p&gt;&#xA;&lt;p&gt;If not, was software rendering/blitting in general good enough for a responsive windowing system with resolutions and hardware common in the mid-90s? How necessary were &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_accelerator&quot; rel=&quot;nofollow noreferrer&quot;&gt;windows accelerators&lt;/a&gt; to run user interfaces smoothly? Given that, according to Wikipedia, the 8500 was &amp;quot;billed as a high-end graphics computer&amp;quot;, I would assume that if software rendering was good enough for its use case, it would have been good enough for most.&lt;/p&gt;&#xA;" OwnerUserId="14904" LastEditorUserId="15334" LastEditDate="2021-02-11T11:39:44.007" LastActivityDate="2021-02-11T15:38:57.963" Title="Did the Power Macintosh 8500 have accelerated blitting?" Tags="&lt;history&gt;&lt;graphics&gt;&lt;video&gt;&lt;power-macintosh&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17920" PostTypeId="1" AcceptedAnswerId="17921" CreationDate="2021-02-10T06:10:02.007" Score="5" ViewCount="487" Body="&lt;p&gt;Can anyone tell me what executable format the Hitachi HD630x series of MPUs used?&lt;/p&gt;&#xA;&lt;p&gt;I'm looking to disassemble (out of curiosity) a binary for the Hitachi HD63A03XP microprocessor. In case anyone is interested, this is the ROM for OS in the Yamaha DX7.&lt;/p&gt;&#xA;&lt;p&gt;If I understand correctly, the HD63A03XP will load the executable binary from the ROM chip attached to the 16bit address bus. I can see from the datasheet and User's manual that upon reset, the reset vector is loaded from the two bytes at $FFFE and $FFFF at the top of the 64K memory space. Given that the ROM is 16kb in size, I assume that there's a particular binary format for loading memory into that high offset, I can't seem to find what it is though. Maybe there's a fundamental misunderstanding on my part. If so, I will gladly appreciate any pointers. I've skimmed over the datasheet for the ROM chip (Intel 2764) and I can't see any indications of a particular binary format there.&lt;/p&gt;&#xA;&lt;p&gt;I've looked at the binary in a hex editor and the last bytes in the binary don't look like they correspond to these offsets either.&lt;/p&gt;&#xA;&lt;p&gt;Any help is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="20781" LastActivityDate="2021-02-10T09:06:46.363" Title="Hitachi HD630x executable format" Tags="&lt;rom&gt;&lt;disassembly&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17921" PostTypeId="2" ParentId="17920" CreationDate="2021-02-10T07:36:26.150" Score="10" Body="&lt;p&gt;There is no format. The ROM contains code and data, and ROM is at the end of the MCU memory space, while RAM is at the start of the MCU memory space.&lt;/p&gt;&#xA;&lt;p&gt;The CPU simply fetches from the reset vector, two bytes starting from address $FFFE, and the 16-bit value fetched from ROM is the address where it then goes to execute code. The ROM is 16 kilobytes so the ROM starts at address $C000 and ends at $FFFF.&lt;/p&gt;&#xA;&lt;p&gt;If you open the binary in a hex editor, you must load it to address $C000 for it to make sense, like pad it with zeroes or something, to make the ROM contents start at $C000. Or simply use a proper disassembler tool for HD68 series MCUs. The HD6803 is binary compatible with the MC6800 but Hitachi added a few extra instructions and made it execute with improved timings.&lt;/p&gt;&#xA;&lt;p&gt;Based on how many DX7 emulators work, you are not the first to disassemble the ROM.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-02-10T09:06:46.363" LastActivityDate="2021-02-10T09:06:46.363" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17922" PostTypeId="1" CreationDate="2021-02-10T10:50:15.497" Score="5" ViewCount="226" Body="&lt;p&gt;I have a simple program on my Apple IIc written in assembly language. It starts by getting a filename from the user (just the file name, not the full path), then it opens the corresponding file with a MLI call (&lt;code&gt;$C8&lt;/code&gt;). To my suprise, the MLI call returned error &lt;code&gt;$40&lt;/code&gt;: &amp;quot;Pathname has invalid syntax&amp;quot;. I have checked all parameters, but they where OK. I have tried to type &lt;code&gt;PREFIX /myvolume&lt;/code&gt; before starting my program. And this time, it worked! (The file was opened without any error.) I understood that when you start ProDOS (just PRODOS and BASIC.SYSTEM), then the prefix is empty. I have checked it, by replacing the &lt;code&gt;open&lt;/code&gt; MLI call by a &lt;code&gt;get_prefix&lt;/code&gt; call. And yes, the prefix length is 0.&lt;/p&gt;&#xA;&lt;p&gt;Did you know that? Until then, I believed that the prefix was set to the root prefix of the booting disk by the system at boot.&lt;/p&gt;&#xA;&lt;p&gt;For the story, reading here and there, I have found a workaround by reading the path of the running program (my program in that case) at memory address &lt;code&gt;$280&lt;/code&gt;, and calling &lt;code&gt;set_prefix&lt;/code&gt; to that path. A lot of assembly lines. My assembly program and the file to read have the same prefix (same directory).&lt;/p&gt;&#xA;&lt;p&gt;Can you confirm my analysis?&lt;/p&gt;&#xA;" OwnerUserId="20782" LastEditorUserId="15334" LastEditDate="2021-02-11T11:54:37.913" LastActivityDate="2021-04-23T21:22:05.557" Title="Apple II: ProDOS, zero length prefix and MLI calls" Tags="&lt;apple-ii&gt;&lt;assembly&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17923" PostTypeId="2" ParentId="17922" CreationDate="2021-02-10T11:35:07.080" Score="0" Body="&lt;p&gt;Error $40 means&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;$40 Invalid pathname syntax. The pathname contains illegal characters.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So it might be helpful to see what names are used. Programmers comming from a DOS environment often add unnecessary slashes&lt;/p&gt;&#xA;&lt;p&gt;The ProDOS 8 Technical Reference Manual says at page 53 SET_PREFIX:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When ProDOS is started up, the system prefix is set to the name of the volume in the startup drive.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, the question might be is there a volume name?&lt;/p&gt;&#xA;&lt;p&gt;To see what volumes are online an ON_LINE MLI call is rather helpful. Best done with the ProDOS Machine Language Exerciser - saves a lot of programming while learning how Prodos Works.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-10T11:47:52.560" LastActivityDate="2021-02-10T11:47:52.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17926" PostTypeId="1" AcceptedAnswerId="17929" CreationDate="2021-02-10T16:39:23.487" Score="23" ViewCount="4772" Body="&lt;p&gt;The ZX Spectrum sold with either 16 or 48K RAM, necessitating an optional 32K memory bank which was achieved in a characteristically (for Sinclair) cleverly frugal way: with half-bad 64kbit DRAM chips, i.e. that had a defect on one half of the chip, leaving the other half usable, so the chip could be sold at a discount.&lt;/p&gt;&#xA;&lt;p&gt;This makes so much sense that I'm surprised it wasn't a recurring pattern in later years, but it doesn't seem to have been. Tandy did the same thing with the CoCo, but that was around the same time.&lt;/p&gt;&#xA;&lt;p&gt;In fact, it may be possible to pinpoint the timing more exactly. Acorn designed the Electron as a follow-up to the BBC Micro, just late enough that it wanted to use 64kbit RAM chips instead of 16k. And certainly it would have been great to have 64K in the machine. But their architecture was designed for 32K, existing software wasn't designed to take advantage of extra, they would've had to design a bank switching scheme, and above all else, the Electron was supposed to be cheap to compete with the Spectrum, so they ended up using just four chips to provide 32K, which meant every memory access took two cycles, which made the machine much slower than it would've been.&lt;/p&gt;&#xA;&lt;p&gt;So this was an ideal case for half-bad chips. Why didn't Acorn use them? Maybe they just didn't think of it in time. But the Spectrum was designed starting in 1981 for release in 82. The Electron was designed starting in 82 for release in 83. (And was a financial disaster because the Ferranti ULAs still had trouble working reliably at 16 MHz, so they didn't get volume production until 84, by which time the market peak was past, so they ended up with warehouses full of unsold machines, but that's another matter.)&lt;/p&gt;&#xA;&lt;p&gt;Did half-bad RAM chips disappear between 81 and 82? Was yield really that close to perfect already? And why didn't they recur in the 256kbit and subsequent generations? Or was something else going on that I'm not taking into account?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-12T09:25:32.287" Title="When did half-bad RAM chips stop being available?" Tags="&lt;history&gt;&lt;chip&gt;&lt;ram&gt;&lt;sinclair&gt;&lt;acorn&gt;" AnswerCount="4" CommentCount="8" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17927" PostTypeId="1" CreationDate="2021-02-10T17:00:33.727" Score="2" ViewCount="144" Body="&lt;p&gt;Wikipedia tells me I had to wait until OS X Leopard in 2006 to first use &lt;a href=&quot;https://en.wikipedia.org/wiki/Spaces_(software)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spaces&lt;/a&gt;. It does mention earlier 3rd party structures in an outside reference but the Wayback link quoted doesn't actually mention it.&lt;/p&gt;&#xA;&lt;p&gt;I have some vague idea I'd been using it since years before, maybe even since System/Mac OS 8 or 9; but my memory is very vague and I cannot find any reference to what non-Apple substitute I had used before, or if I am simply mis-remembering.&lt;/p&gt;&#xA;&lt;p&gt;I know I've had dual screens since the mid 90s, a 3-button mouse since around the same time (before scroll-wheels) but I can't be clear as to whether I did indeed have something akin to Spaces. Really my only truly clear recollection from so far back is ConflictCatcher, compulsory util from around that time ;)&lt;/p&gt;&#xA;&lt;p&gt;The word 'spaces' is also a terrible word to try to google.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone help jog my memory?&lt;/p&gt;&#xA;" OwnerUserId="20174" LastEditorUserId="15334" LastEditDate="2021-02-11T15:17:30.467" LastActivityDate="2021-02-11T15:17:30.467" Title="macOS Spaces first appearance under any guise?" Tags="&lt;mac-os-classic&gt;&lt;identify-this-software&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ClosedDate="2021-02-13T05:55:23.647" ContentLicense="CC BY-SA 4.0" />
  <row Id="17928" PostTypeId="2" ParentId="17927" CreationDate="2021-02-10T17:14:40.383" Score="6" Body="&lt;p&gt;Spaces is just the macOS name for virtual desktops, which are a very old idea. So they have indeed made it into the Mac world many times before Apple decided they should be an OS feature.&lt;/p&gt;&#xA;&lt;p&gt;That being said, the first appearance of Spaces-esque functionality was Switcher, by Andy Herzfeld of the original Macintosh team. That was first made available in 1985, only around a year after the Macintosh; its primary purpose was to allow multiple pieces of software to run at once but Macintoshes of the time were completely single tasking — launch an application and you'd exit the Finder, removing the desktop, and get it back only when you exited your application — and Herzfeld noticed that the time it took to switch applications was noticeable so &lt;a href=&quot;https://www.folklore.org/StoryView.py?story=Switcher.txt&quot; rel=&quot;noreferrer&quot;&gt;added a horizontal scroll from one application to the next&lt;/a&gt; in order to cover that gap.&lt;/p&gt;&#xA;&lt;p&gt;So in the world where one screen &lt;em&gt;is&lt;/em&gt; one application, he had in effect implemented virtual desktops, in a spatial relationship.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2021-02-10T17:14:40.383" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17929" PostTypeId="2" ParentId="17926" CreationDate="2021-02-10T18:14:06.380" Score="18" Body="&lt;p&gt;Sinclair's use was a very unique case in a very specific situation that never occurred again later on.&lt;/p&gt;&#xA;&lt;h3&gt;Production side:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There were many more manufacturers of chips back then.&lt;/li&gt;&#xA;&lt;li&gt;The ones that wanted to compete at the forefront used RAMs as gateways to technological development. (*1)&lt;/li&gt;&#xA;&lt;li&gt;Anyone not ramping up their output fast into the upper 90s will lose money.&lt;/li&gt;&#xA;&lt;li&gt;First mass produced 64 Ki came in 1978/79.&lt;/li&gt;&#xA;&lt;li&gt;Last manufacturer to start a production was East Germany in 1981/82.&lt;/li&gt;&#xA;&lt;li&gt;Only by-1 chips are produced during the ramp up phase.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;System Side:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;'half' size chips do only really make sense for ready produced machines (*2).&lt;/li&gt;&#xA;&lt;li&gt;8 bit machines are the only with a use case for 32 Ki by 1.&lt;/li&gt;&#xA;&lt;li&gt;16 bit systems are designed for memory sizes past 64 KiB, so whatever is maximum (at the time) in by-1 configuration is the design goal.&lt;/li&gt;&#xA;&lt;li&gt;Mixed RAM type expansion is a pain in the ass and no designer would go that way (*3).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;Management side:&lt;/h3&gt;&#xA;&lt;p&gt;Sinclair computer products were never about forward thinking, but hitting the lowest price point possible - and unlike Apple, they were also sold at that point. So every fraction of a penny for the actual product did count, no matter if that part would become available in a year or two from now.&lt;/p&gt;&#xA;&lt;p&gt;There were no 8 Ki by 1 before, nor any notable amount of 128 Ki by 1 later. The cost-cutting niche was filled in the 256 Ki days with 64Ki by 4 configuration, well shown with several later 8-bit computers and redesigns for cost reduction (Amstrad, Commodore).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;All of that combined into a unique use case for the Spectrum, a singular point in time... like a few others during the punk days of computing.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did half-bad RAM chips disappear between 81 and 82?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They only appeared  for a very short time around '80/'81&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was yield really that close to perfect already?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Any design that doesn't climb soon past 95+% isn't worth making. Sure, there may be special (usually military) cases, were it doesn't matter if 90% are defective, as long as enough are produced to be sold at extraordinary high prices. Or for competitive reasons, like with some Intel processor designs, which are purely made to keep the 'crown' of being fastest, even though not enough can be made to satisfy demand.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And why didn't they recur in the 256kbit and subsequent generations?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because the 64/32 Ki episode already showed that it isn't a sustainable business case.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - (D)RAM have easy symmetric structures, so circuit design is rather easy, letting manufacturing focus on process handling.&lt;/p&gt;&#xA;&lt;p&gt;*2 - I.e. closed boxes, not prepared for internal upgrade, like most home computers.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Wozniak's Apple 2 design is an outlier here, as it was made at a time when only 4 Ki were available in good numbers and 16 Ki were just coming to mainstream.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-02-10T21:10:15.557" LastActivityDate="2021-02-10T21:10:15.557" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="17930" PostTypeId="2" ParentId="17420" CreationDate="2021-02-10T19:26:33.667" Score="6" Body="&lt;p&gt;Community Wiki, as it's unclear to me why @JaapJorisVens deleted his answer given that it appears to contain the necessary clues:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The carts are special carts we have made that contain 1000 selectable games. It is worth mentioning that the carts are actually adapters - essentially Game Genies - which do nothing unless you have an original NES Tetris cart plugged in.&lt;/p&gt;&#xA;&lt;p&gt;Each of the 1000 games corresponds to a unique random seed which initializes the RNG for each game. The seed is iterated once per piece to produce the sequence. ...&lt;/p&gt;&#xA;&lt;p&gt;Part of the RNG algorithm in the cart makes use of fairly large tables ... Each year we shuffle the contents of these tables to make a new cart.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the original Tetris is used;&lt;/li&gt;&#xA;&lt;li&gt;a competition-specific cartridge acts as a passthrough to replace Tetris's random number generator; and&lt;/li&gt;&#xA;&lt;li&gt;specifically, that passthrough device spots when Tetris is performing its new-piece sequence and at that point inserts the next random number.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The NES itself doesn't inherently generate random numbers, that's a per-game process, implemented however each game sees fit. For the purposes of this competition they've engineered an intermediary that substitutes its own random numbers, generating them exactly on-demand.&lt;/p&gt;&#xA;&lt;p&gt;Per other parts of Jaap's answer:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The math involved in 'iterating' the seed is fairly detailed, involving a LFSR (as is used in the standard NES cart), a few looping counters, and some lookup tables. Just before each game, a random number between 0 and 999 is chosen and players are told which game to select on the cart. After a game is played, it is never re-played.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So both the new implementation and the original are linear feedback shift registers ('LFSR's), which are shift registers in which the bit going out is exclusive-ORd onto some other combination of bits in the current state. Through that means an &lt;em&gt;n&lt;/em&gt;-bit register can iterate through 2&lt;sup&gt;&lt;em&gt;n&lt;/em&gt;&lt;/sup&gt; − 1 states in a fixed sequence that is sufficiently oblique that a human might interpret it as random.&lt;/p&gt;&#xA;&lt;p&gt;That said, it sounds like the passthrough device goes further in using the LFSR to index random number tables, so it's likely that the LFSR is being used just because it's easier to throw together than a classic ripple counter.&lt;/p&gt;&#xA;&lt;p&gt;Quite probably the original just uses the output of its software LFSR directly.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="15334" LastEditDate="2021-02-11T11:46:50.083" LastActivityDate="2021-02-11T11:46:50.083" CommentCount="0" CommunityOwnedDate="2021-02-10T19:26:33.667" ContentLicense="CC BY-SA 4.0" />
  <row Id="17932" PostTypeId="1" AcceptedAnswerId="17933" CreationDate="2021-02-10T21:28:04.290" Score="8" ViewCount="817" Body="&lt;p&gt;I was watching a &lt;a href=&quot;https://youtu.be/fWqBmmPQP40?t=1150&quot; rel=&quot;noreferrer&quot;&gt;video&lt;/a&gt; on netlist simulation of the 6502.  The presenter mentions how the 6502 has a double store upon using INCY, and then offhandedly mentions that this can be used for copy protection.&lt;/p&gt;&#xA;&lt;p&gt;How does a double write to a spot in memory enable the ability to have copy protection?&lt;/p&gt;&#xA;" OwnerUserId="15461" LastActivityDate="2021-02-15T18:57:25.653" Title="6502 double store and copy protection?" Tags="&lt;6502&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17933" PostTypeId="2" ParentId="17932" CreationDate="2021-02-10T22:47:14.650" Score="11" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The presenter mentions how the 6502 has a double store upon using INCY,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not sure what an INCY should be or how it's related to the video shown.&lt;/p&gt;&#xA;&lt;p&gt;What is explained are the standard workings of a 6502 INC instruction. INC increments a memory cell by reading it, incrementing what's read and writing it again. Just, to do so it needs a cycle to increment the value (*1). Problem is that each and every cycle of a 6502 is a memory cycle (*2). Whenever there is an internal cycle, the CPU issues an external cycle as well, usually by repeating the last. This is true for all page crossing indexing as well as RMW (Read Modify Write) instructions like INC, DEC and all in memory shifts. It's always the second before last cycle (*3). In most cases it's a read cycle, but with RMW it's a write cycle using the last read value.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and then offhandedly mentions that this can be used for copy protection.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really, what he mentions (&lt;a href=&quot;https://www.youtube.com/watch?t=1160&amp;amp;v=fWqBmmPQP40&quot; rel=&quot;nofollow noreferrer&quot;&gt;at 19:21&lt;/a&gt;) is that this behaviour can be detected by hardware - as writing twice the same address is a behaviour only (*4) RMW instructions and only on a genuine NMOS 6500 (*5) will show.&lt;/p&gt;&#xA;&lt;p&gt;He does only mention the behaviour, not any further usage. Coming up with something to do when detecting the behaviour is not part of the speech - nor is it how to detect. He's simply tickling the audience' sense for creativity.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How does a double write to a spot in memory enable the ability to have copy protection?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's up to you. The point is that this is a very unique feature of an otherwise inconspicuous instruction. Find a way to use it. Like switching in another ROM when detecting it, or trigger an protection interrupt if the feature doesn't get activated once per frame - or whatsoever.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And how to detect?&#xA;&lt;em&gt;[Follow up rhetorical question]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As so often this depends what the goal is&lt;/p&gt;&#xA;&lt;p&gt;A simple case would be to detect a certain address with incorporated R/W in write state - like in ROM  - and set an RS flip flop when it's accessed with, or reset it when any other address is accessed. Now a state of a (previous) set flip flop AND an incoming address detection will only happen during a RMW instruction accessing that location, not any other instruction (*6).&lt;/p&gt;&#xA;&lt;p&gt;A related circuitry will need as little as half a 7474 and 1/4th a 7400 in addition to otherwise already existing circuitry - easy to hide in a complex (and never published) schematic - or even better within a decoder circuit, like a PAL, modifying it's behaviour in an extreme hard to detect way.&lt;/p&gt;&#xA;&lt;p&gt;Based on such detection a lot can be done - from simply mapping in another ROM over doing so for just a few cycles, or whats ever, or several cycles later and then for some cycles, or doing so for hardware registers otherwise not visible. And so on.&lt;/p&gt;&#xA;&lt;p&gt;Be creative - more creative than you expect the hacker to be.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;So long story short: &lt;strong&gt;This section of the speech is not about any specific copy protection but a specific behaviour that can easy be detected and used in surprising ways.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Be Creative&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Can't be done hidden.&lt;/p&gt;&#xA;&lt;p&gt;*2 - It's a way how they simplified the bus interface. Unlike other CPUs the 6500 series do not know any internal cycle. Each and every cycle is a memory cycle.&lt;/p&gt;&#xA;&lt;p&gt;*3 - See this answer to '&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17888&quot;&gt;What is the MOS 6502 doing on each cycle of an instruction?&lt;/a&gt;' for a basic explanation of 6502 instruction cycles regarding memory.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Err ... NO. There is another &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/17986/6659&quot;&gt;case with subroutine calls&lt;/a&gt; (JSR). Here the stack address for high byte of the return address is as well written twice. First with the low byte of the address of the last byte of the jump instruction, then with the high byte of the return address.&lt;/p&gt;&#xA;&lt;p&gt;*5 - The behaviour has been changed with the CMOS version. Now all internal cycles are read cycles, including RMW instructions.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Caveat: If the decoded address is the (whole) stack, than JSR or interrupts will trigger it as well when pushing the their return address. Of course,this can be again be used to flip some hardware,or decoding,when done from the right place. Forgeing CPU watching decoders into a PAL will already make a pretty nifty protection chip. Posibilities are endless and beautiful :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-15T18:57:25.653" LastActivityDate="2021-02-15T18:57:25.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17934" PostTypeId="1" CreationDate="2021-02-11T00:51:14.183" Score="12" ViewCount="1840" Body="&lt;p&gt;I picked up four of these (what I assume are) ROM cartridges for a console, in a Thai second hand market in Bangkok.&lt;/p&gt;&#xA;&lt;p&gt;None of them have casings:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MSzpQ.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;K-105 and 9503 - Front&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MSzpQ.jpg&quot; alt=&quot;K-105 and 9503 - Front&quot; title=&quot;K-105 and 9503 - Front&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tYGNO.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;K-105 and 9503 - Rear&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tYGNO.jpg&quot; alt=&quot;K-105 and 9503 - Rear&quot; title=&quot;K-105 and 9503 - Rear&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/u5xKK.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;K-105 and 9507 - Front&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/u5xKK.jpg&quot; alt=&quot;K-105 and 9507 - Front&quot; title=&quot;K-105 and 9507 - Front&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EFOMi.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;K-105 and 9507 - Rear&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EFOMi.jpg&quot; alt=&quot;K-105 and 9507 - Rear&quot; title=&quot;K-105 and 9507 - Rear&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xaGoK.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;5458A - Front&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xaGoK.jpg&quot; alt=&quot;5458A - Front&quot; title=&quot;5458A - Front&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fc66S.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;5458A - Rear&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fc66S.jpg&quot; alt=&quot;5458A - Rear&quot; title=&quot;5458A - Rear&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/I6oM5.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;All four modules&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I6oM5.jpg&quot; alt=&quot;All four modules&quot; title=&quot;All four modules&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are three different types, distinguished by the etching on the IC:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;‘K-105’ and ‘9503’&lt;/li&gt;&#xA;&lt;li&gt;‘K-105’ and ‘9507’&lt;/li&gt;&#xA;&lt;li&gt;‘5458A’&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;All modules have 23 contacts on both sides.&lt;/p&gt;&#xA;&lt;p&gt;Both the ‘5458A’ and ‘9507’ have a crystal, which &lt;em&gt;could&lt;/em&gt; be 32 kHz, judging by the size of it.&lt;/p&gt;&#xA;&lt;p&gt;There are two ‘9503’ modules, and neither of which have a crystal - whether this is intentional or not, I don't know. Maybe the crystal was removed, but it would seem to be a coincidence that it was removed from both.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What are they?&lt;/li&gt;&#xA;&lt;li&gt;What console, or device, are they for?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="202" LastEditorUserId="202" LastEditDate="2021-02-11T16:28:11.247" LastActivityDate="2021-02-12T06:07:50.773" Title="Are these ROM cartridges and for what device?" Tags="&lt;identify-this-card&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17935" PostTypeId="2" ParentId="17934" CreationDate="2021-02-11T01:47:42.317" Score="13" Body="&lt;p&gt;Just some guesses&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The boards seems to be identical&lt;/li&gt;&#xA;&lt;li&gt;Most definite 8 Bit&lt;/li&gt;&#xA;&lt;li&gt;Looks quite like ROM modules made for large quantity production&lt;/li&gt;&#xA;&lt;li&gt;Bend chip pins indicate savings down to the last sup penny.&lt;/li&gt;&#xA;&lt;li&gt;With 28 pins they're maximum 32 KiB EPROM or 64 KiB ROM&lt;/li&gt;&#xA;&lt;li&gt;If these numbers (9503, 9507) are manufacturing dates (the only identifiable TTL supporting this), then it's rather late for 8 bit machines.&lt;/li&gt;&#xA;&lt;li&gt;Cheap Chinese clones would of Japanese systems would fit that time frame&lt;/li&gt;&#xA;&lt;li&gt;The contour with the main 23 contact looks quite like a Super Famicom/SNES&lt;/li&gt;&#xA;&lt;li&gt;The additional edges (without contacts) visible on bord #3 fit the shape for Super-Famicom&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Similarities with SNES cartridges:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SNES cartridges have 2x23 connectors&lt;/li&gt;&#xA;&lt;li&gt;SNES cartridges have GND on the leftmost contact on both sides&lt;/li&gt;&#xA;&lt;li&gt;SNES cartridges have VCC on the rightmost contact on both sides&lt;/li&gt;&#xA;&lt;li&gt;SNES cartridges have A14 on the upper 4th contact; A 14 is on Pin 27 of a 256 or 512 KiBit ROM - both clearly connected here&lt;/li&gt;&#xA;&lt;li&gt;SNES cartridges have D0.. D3 on the lower contacts position 6-9 from the right&lt;/li&gt;&#xA;&lt;li&gt;SNES cartridges have D4.. D7 on the upper contacts position 6-9 from the right&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Differences from (genuine) SNES:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Nintendo only used 32 and36 pin ROMs&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So my primary guess would be these are &lt;strong&gt;SNES compatible cartridges&lt;/strong&gt; made as cheap as possible, probably Chinese clones.&lt;/p&gt;&#xA;&lt;p&gt;Now that crystal puzzles me a bit. While the 74HCT04 may be used as an oscilator - and having the crystal across the first inverter makes it look like, I have no idea whet it is good for without seeing were the output leads to. It might be a good idea to unsolder the chips from one of the boards to capture all traces. This would as well reveal the remaining circuit around ROM and edge connector.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-11T02:57:25.880" LastActivityDate="2021-02-11T02:57:25.880" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17936" PostTypeId="2" ParentId="17919" CreationDate="2021-02-11T03:21:32.237" Score="4" Body="&lt;p&gt;On the objective stuff, per &lt;a href=&quot;https://cdn.preterhuman.net/texts/computing/apple_hardware_devnotes/PowerMac%2075-8500.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple's 7500/8500 hardware devnotes&lt;/a&gt;, Page 20:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The video subsystem is implemented by the following ICs:&lt;/p&gt;&#xA;&lt;p&gt;■ Chaos, a custom IC that provides data bus buffering between the video subsystem and the processor bus&lt;/p&gt;&#xA;&lt;p&gt;■ Control, a custom IC that provides addressing and control for the video subsystem&lt;/p&gt;&#xA;&lt;p&gt;■ RaDACal, a high-performance digital-to-analog converter (DAC) used for the video stream to the monitor&lt;/p&gt;&#xA;&lt;p&gt;■ Sixty6, an RGB-to-YUV converter and convolver for the second video output stream (on the Power Macintosh 8500 computer only)&lt;/p&gt;&#xA;&lt;p&gt;■ a 7187 digital video encoder (DENC) for the second video output stream (on the Power Macintosh 8500 computer only)&lt;/p&gt;&#xA;&lt;p&gt;■ an 8758 analog-to-digital converter (ADC) for the video input stream&lt;/p&gt;&#xA;&lt;p&gt;■ a 7196 digital video decoder and scaler IC (DESC) for the video input stream&lt;/p&gt;&#xA;&lt;p&gt;■ Plan B, a DMA controller for video input data from the 7196 DESC IC&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Elsewhere in that section only very limited forms of hardware acceleration are hinted at:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The RaDACal IC also ... supports the hardware cursor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The video input feature is implemented by the 8758 video ADC IC ...  video data can be stored either in the video display buffer (VRAM) or in an offscreen pixel map in main memory. Video data transfers are DMA transfers and are controlled by a DBDMA engine in the Plan B IC.&lt;/p&gt;&#xA;&lt;p&gt;When video input data is sent to the display buffer, it can be clipped with a 1-bit-per-pixel clip mask using the DBDMA read channel. ...&lt;/p&gt;&#xA;&lt;p&gt;When video input data is stored in a pixel map in main memory, software can perform any required clipping and blending by using the CopyBits routine in QuickDraw when moving the pixel map to a visible region of the display.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So it appears as if there was a fast hardware path for dealing with video input (in the AV sense), including depositing it at an appropriate on- or off-screen destination and clipping it if it is sent on-screen. It also seems that any graphics, once in memory, are manipulated in software using the standard Apple calls.&lt;/p&gt;&#xA;&lt;p&gt;I therefore think the answer to your question is that no hardware acceleration was provided for ordinary 2d graphics.&lt;/p&gt;&#xA;&lt;p&gt;On the subjective, software rendering was indeed more than good enough for the typical resolutions and usages of the mid-'90s, on both the PC and the Mac — to the point that many of the pre-3dfx/PowerVR 3d accelerators were derided for doing a worse job than software rendering, &lt;a href=&quot;https://www.extremetech.com/computing/55458-the-return-of-s3&quot; rel=&quot;nofollow noreferrer&quot;&gt;e.g. from 2003&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It may seem hard to believe now, but ten years ago, S3 was the market leader for 2D-only GPUs. But as the 3D revolution gathered steam in 1996, it became clear that S3’s ViRGE GPU wasn’t going to allow S3 to maintain its dominant market position. In fact, the ViRGE became known as a “3D decelerator”.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;1996 is the year after the introduction of the 8500.&lt;/p&gt;&#xA;&lt;p&gt;If you want easy YouTube points of reference then check out the  Apple Pippin — it has a PowerPC 601, substantially slower than the 604 in the 8500 — and no video or audio acceleration whatsoever but &lt;a href=&quot;https://www.youtube.com/watch?v=iwSe4tSCsfM&quot; rel=&quot;nofollow noreferrer&quot;&gt;manages to throw around mild 3d scenes at TV resolutions&lt;/a&gt;; suffice to say that at desktop resolutions a 604 is more than a match for the more sedate world of that era's desktop 2d.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2021-02-11T15:38:57.963" LastActivityDate="2021-02-11T15:38:57.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17937" PostTypeId="1" CreationDate="2021-02-11T06:10:00.150" Score="24" ViewCount="3510" Body="&lt;p&gt;&amp;quot;One-Winged Angel&amp;quot; is the musical theme for the final boss of &lt;em&gt;Final Fantasy VII&lt;/em&gt; for PlayStation, released 1997. I no longer have my copy, sadly.&lt;/p&gt;&#xA;&lt;p&gt;In spite of consisting of no less than three CDs, the game's soundtrack, either mostly or exclusively (that's the question), uses not CD audio tracks for the music (besides the FMV sequences), but rather the PlayStation's built-in &amp;quot;MIDI&amp;quot;-like sound chip/mechanism. That is, it stores an efficient and compact series of signals for which instruments to play and when, rather than an actual &amp;quot;audio stream&amp;quot; like a CD audio track.&lt;/p&gt;&#xA;&lt;p&gt;However, the &amp;quot;One-Winged Angel&amp;quot; song sounds quite a bit different from the other melodies in the game. And I'm not just talking about the fact that it has vocals. It seems to be using a traditional orchestra, which I wonder if they really had virtual &amp;quot;instruments&amp;quot; for inside the PlayStation.&lt;/p&gt;&#xA;&lt;p&gt;I suppose it's possible that the PlayStation audio format does have the required instruments, and then they added the few repeated audio samples on top of that in the game engine, while playing the melody, but it sounds to me as if they made an actual CD audio recording of the song and used that in the game &lt;strong&gt;for this particular song&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Can somebody please verify or reject my theory? I've tried to find out on my own.&lt;/p&gt;&#xA;&lt;p&gt;This is the song I'm talking about: &lt;a href=&quot;https://www.youtube.com/watch?v=qDD-iYkHBhc&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=qDD-iYkHBhc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;PS: I'm only talking about the original game -- not the butchered re-releases.&lt;/p&gt;&#xA;" OwnerUserId="20787" LastActivityDate="2021-02-11T16:47:36.263" Title="Was &quot;One-Winged Angel&quot; an actual CD track, or generated by the PlayStation's sound chip with a few samples (SFX) added on top?" Tags="&lt;sound&gt;&lt;audio&gt;&lt;sony-playstation&gt;&lt;cd-rom&gt;&lt;game&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17938" PostTypeId="1" CreationDate="2021-02-11T06:15:46.810" Score="2" ViewCount="81" Body="&lt;p&gt;I've recently got this error: 304-Keyboard or System Unit Error when booting my Compaq Prolinea.  I've tested the keyboard on another computer and it's fine.  I don't have another PS/2 keyboard to test, but the keyboard does briefly flash its lights when the computer first powers up, but then has no power.&lt;/p&gt;&#xA;&lt;p&gt;Most people/sites online say that the original troubleshooting was to test the keyboard, then replace the system board.  Obviously, I can no longer replace the system board, so I'm looking for a way to diagnose this problem and/or fix it.  I've got a multi-meter and beginner-to-intermediate solder skills, but I don't know where to start, and I can't find any type of schematic for this old computer.&lt;/p&gt;&#xA;&lt;p&gt;There was an old barrel battery (next to the PS/2 ports) that looked like it may have started leaking, but I removed it, and I couldn't find any obvious damage to the board.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pa1Jx.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pa1Jx.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7160" LastEditorUserId="15334" LastEditDate="2021-02-11T11:38:12.740" LastActivityDate="2021-02-11T11:38:12.740" Title="304-Keyboard or System Unit Error -- Compaq Prolinea 4/25s" Tags="&lt;repair&gt;&lt;bios&gt;&lt;motherboard&gt;&lt;compaq&gt;" AnswerCount="0" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17939" PostTypeId="2" ParentId="17926" CreationDate="2021-02-11T08:46:14.640" Score="7" Body="&lt;p&gt;The Memotech MTX (1984-5 or so) has a wire link on its circuit board that allows you to use half-good chips.&#xA;I dont think I’ve seen any being used, but it seems the designer thought it at least possible they might want to.&lt;/p&gt;&#xA;" OwnerUserId="11415" LastActivityDate="2021-02-11T08:46:14.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17940" PostTypeId="2" ParentId="17937" CreationDate="2021-02-11T10:13:07.843" Score="11" Body="&lt;p&gt;It's a PSF (Portable Sound Format, see Wikipedia) music file, the PlayStation equivalent of the Amiga's module (.mod) format, where sound samples and replay data sequences are stored inside one file, so tracked music instead of streamed music.&lt;/p&gt;&#xA;" OwnerUserId="20788" LastEditorUserId="15334" LastEditDate="2021-02-11T11:34:35.080" LastActivityDate="2021-02-11T11:34:35.080" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17941" PostTypeId="2" ParentId="17926" CreationDate="2021-02-11T15:46:39.827" Score="4" Body="&lt;p&gt;tl;dr: I suspect the introduction of heavily subsisdied Japanese memory fabs was a key factor; once they started to flood the market with their RAM, it simply wasn't worth the extra risk/hassle of buying &amp;quot;half-bad&amp;quot; RAM chips when Japan was dumping out perfectly functional RAM at below cost.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://apnews.com/article/905e90eaf80859bc4c50bb66ab974d1e&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://apnews.com/article/905e90eaf80859bc4c50bb66ab974d1e&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Beyond this, in some ways, Sinclair was the Nintendo of their time (and possibly even helped to inspire Nintendo's &amp;quot;lateral thinking with withered technology&amp;quot; philosophy): they took older and cheaper technology and then used it in &amp;quot;innovative&amp;quot; ways.&lt;/p&gt;&#xA;&lt;p&gt;By which, I mean they pushed said technology to the absolute limits, and factored a high failure/return rate into their business plans.&lt;/p&gt;&#xA;&lt;p&gt;E.g. according to Wikipedia, the Sinclair Executive calculator &amp;quot;was around half the price of comparable calculators, but still twice the average weekly wage&amp;quot;.&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sinclair_Executive&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Sinclair_Executive&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Given the choice between spending two weeks or four weeks worth of wages, most people were happy to wait a few seconds longer for their calculator to spit out an answer!  Even if return rates were high - the gamble may have worked for his calculators, but the  high return rate for the later Black Watch pretty much destroyed Sinclair Radionics, which led to Sir Clive effectively walking away and spinning up a new company which then morphed into Sinclair Research.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://rk.nvg.ntnu.no/sinclair/other/blackwatch.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://rk.nvg.ntnu.no/sinclair/other/blackwatch.htm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And the same initially applied to the ZX Spectrum: it was far cheaper than it's rivals, while being just barely Good Enough.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately for Sinclair, the world changed.  Moore's law marched on and reduced the price delta.  Japan flooded the market with cheap RAM.  And the US price war between Commodore/Tandy/Apple/etc drove prices down even further.&lt;/p&gt;&#xA;&lt;p&gt;Put simply, the market matured and the cost of rival hardware dropped to the point where the risk/benefit of using Sinclair's technology wasn't worth it.&lt;/p&gt;&#xA;&lt;p&gt;So, the Microdrive was dropped.  The QL was pretty much a commercial failure at launch, thanks in equal measure to the cost cutting measures which crippled the hardware and the bugs which meant early models had to have a ROM dongle attached (shades of the &amp;quot;dead cockroach&amp;quot; hack for early models of the ZX Spectrum!).&lt;/p&gt;&#xA;&lt;p&gt;And the less said about the C5, the better.  Though this did lead to the Spectrum IP being sold to Amstrad, who moved production to Hong Kong and churned out resigned models which were both cheaper and more reliable than their older brethren.&lt;/p&gt;&#xA;&lt;p&gt;The era of shonky hardware which was just barely Good Enough was over.  Though at least the QL did give a first taste of computing to a certain Linus Torvalds...&lt;/p&gt;&#xA;&lt;p&gt;However, if memory serves, Sir Clive did continue to look into similar stuff after Sinclair Research.  E.g. Anamartic Ltd experimented with wafer scale integration (aka: put all the integrated circuits for a system on to a single wafer, with sufficient redundancy that you can just &amp;quot;switch off&amp;quot; the bits of the wafer which don't work)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Wafer-scale_integration&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Wafer-scale_integration&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But again, that kind of manufacturing is complex; it's simpler (and therefore easier to drive down costs) to use traditional fab processes to mass produce standalone ICs.  Though I suppose you could argue there's some parallels with modern CPU production, as AMD/Intel/etc have been known to sell CPUs which are underclocked or have cores disabled as a result of production failures...&lt;/p&gt;&#xA;" OwnerUserId="20791" LastActivityDate="2021-02-11T15:46:39.827" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17942" PostTypeId="1" AcceptedAnswerId="17946" CreationDate="2021-02-11T16:24:52.337" Score="18" ViewCount="3632" Body="&lt;p&gt;The notion of multiple processes has been around a long time, at least since the IBM 360. Multiple processes running at the same time, in separate memory spaces with protection from each other.&lt;/p&gt;&#xA;&lt;p&gt;(In this context, I'm not talking about the distinction between one or several physical CPU cores, so 'at the same time' can equally well mean really physically at the same time, or with preemptive multitasking that makes it look like at the same time.)&lt;/p&gt;&#xA;&lt;p&gt;Threads differ from processes in that they run in the same memory space, they have mutable shared memory, so if thread A pokes a value into a memory location, thread B reading that memory location a few microseconds later, expects to see the value A just put there.&lt;/p&gt;&#xA;&lt;p&gt;Now, the Amiga had preemptive multitasking with no memory protection, so tasks on that machine could do the above, but it's not exactly what you were supposed to do. You were supposed to send a message from one task to the other, with a pointer to the block of memory that was being transferred. At the hardware level, nothing special was happening, but you were at least theoretically supposed to program according to that logic, with a view to later versions of the machine adding an MMU. (Which didn't actually happen, partly because by the time the 68030 with its built-in MMU came along, too much software had already been written that ignored the rules and would break, and partly because by that time, Commodore R&amp;amp;D was being mismanaged into the ground, but I digress.)&lt;/p&gt;&#xA;&lt;p&gt;I'm not talking about that. Not talking about 'this machine doesn't have an MMU so you can get away with poking anything you want wherever you want'.&lt;/p&gt;&#xA;&lt;p&gt;I'm talking about 'thread A pokes a value into their shared memory space, thread B expects to read that value a few microseconds later without explicitly passing a message or copying or even transferring ownership of a block of memory' &lt;em&gt;as a supported API&lt;/em&gt;, something you are &lt;em&gt;supposed&lt;/em&gt; to do.&lt;/p&gt;&#xA;&lt;p&gt;(In a single-core system, the only difference is what the documentation says about what will be supported in the future. In a multicore system, mutable shared memory of this kind requires special hardware support for cache coherence. Different CPU architectures nominally have different models in terms of exactly how strongly they support various versions of this, but in practice, once you allow mutable shared memory, everything is under pressure to converge on the strongest model because otherwise you get Heisenbugs showing up on your platform and not on your competitors', which is the worst case scenario, e.g. Apple M1 has an optional TSO mode for x86 emulation; I predict in a few years it will just go TSO all the time and eat the efficiency cost.)&lt;/p&gt;&#xA;&lt;p&gt;By that definition, when did the first system add explicit support for threads? I vaguely remember some time in the early nineties, Windows NT added it, the various UNIX vendors spent a while arguing they were a bad idea (a position I happen to agree with, but that's another matter) before being reluctantly forced to follow suit. (Why? As a marketing bullet point, or because cross-platform software like Oracle was being rewritten to assume threads? If the latter, why was it? If because it performed better that way, why did it?) But that's a vague memory, and doesn't preclude the possibility that – as very often turns out to be the case – mainframes had already done it a couple of decades earlier.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="15334" LastEditDate="2021-02-12T14:24:22.640" LastActivityDate="2021-02-12T21:24:18.470" Title="What was the earliest system to explicitly support threading based on shared memory?" Tags="&lt;history&gt;&lt;operating-system&gt;&lt;multitasking&gt;" AnswerCount="11" CommentCount="17" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17943" PostTypeId="2" ParentId="17934" CreationDate="2021-02-11T16:37:18.423" Score="9" Body="&lt;p&gt;So I couldn't find much, but here it is.&lt;/p&gt;&#xA;&lt;p&gt;The Phillips PC74HCT04P is apparently a &lt;a href=&quot;https://assets.nexperia.com/documents/data-sheet/74HC_HCT04.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;TTL Hex Inverter&lt;/a&gt;, not sure how much help that is.&lt;/p&gt;&#xA;&lt;p&gt;I also found &lt;a href=&quot;https://www.obscuregamers.com/threads/how-exactly-did-the-snes-super-famicom-cic-lockout-work.1641/post-11097&quot; rel=&quot;nofollow noreferrer&quot;&gt;this post&lt;/a&gt;, which claims that the 5458A is a cloned &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Super_NES_enhancement_chips#DSP-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;DSP-1&lt;/a&gt;, and that it is used in bootleg SNES cartridges.  It has this picture:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/acE7R.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/acE7R.jpg&quot; alt=&quot;BootlegCarts.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For posterity, here is that post's text:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here are some examples of bootleg carts from back in the day, with&#xA;cloned CICs&lt;/p&gt;&#xA;&lt;p&gt;(BootlegCarts.jpg)&lt;/p&gt;&#xA;&lt;p&gt;The one on the left is a surprisingly good quality bootleg copy of&#xA;Mario Kart - the board seems to be electrically a 1:1 clone of the&#xA;SHVC-1K1B board that the real Mario Kart used - the CIC is the chip&#xA;marked &amp;quot;TEN-E&amp;quot; at the bottom and the chip marked 5458A is a cloned&#xA;DSP-1.&lt;/p&gt;&#xA;&lt;p&gt;The board at the top right is a bootleg of Super Street Fighter II -&#xA;the CIC here is the chip marked &amp;quot;CIVIC 74LS11&amp;quot; - which seems a strange&#xA;choice since a real 74LS11 (which is a triple 3-input AND gate) is in&#xA;a 14 pin package and not 16 - it's also using a 16 bit ROM which is&#xA;why it needs the pair of 'LS257 multiplexers to select which byte to&#xA;send to the console. Although the board has space for decoupling caps,&#xA;they haven't been installed.&lt;/p&gt;&#xA;&lt;p&gt;Both of these are running exact 1:1 copies of the original game ROM.&lt;/p&gt;&#xA;&lt;p&gt;The final board on the lower right is a good example of a hacked up&#xA;bootleg - the game is Hudson's J-League Super Soccer '95, but the code&#xA;has been modified to operate without backup memory - the CIC here is&#xA;marked &amp;quot;D1 9515&amp;quot; this board also has no decoupling caps and the ROM is&#xA;a COB type covered with resin (AKA &amp;quot;glob-top&amp;quot;).&lt;/p&gt;&#xA;&lt;p&gt;The clone CICs are exact copies of the originals on a functional level&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I've removed them from bootleg boards and installed them into original Nintendo boards and they work exactly like the real ones.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So it's a bit sketchy, but it does seem like your cards are probably from old bootleg SNES cartridges.  Though they look in pretty bad shape and I wouldn't put them in any machine that I cared about.&lt;/p&gt;&#xA;" OwnerUserId="494" LastEditorUserId="-1" LastEditDate="2021-02-12T06:07:50.773" LastActivityDate="2021-02-12T06:07:50.773" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17944" PostTypeId="2" ParentId="17937" CreationDate="2021-02-11T16:47:36.263" Score="28" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;suppose it's possible that the PlayStation audio format does have the required instruments, and then they added the few repeated audio samples on top of that in the game engine&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There are no instruments &amp;quot;built into&amp;quot; the PlayStation. Games provide their own. The PlayStation sound chip is basically a 24-channel ADPCM playback with 512KB of sample memory, a digital mixer, the ability to alter the sample rate of each channel independently, and to apply a few effects to channels. Most games will use some number of channels for sample-based synthesized music and the remainder for sound effects, although with DMA it can also support streaming, CDDA, and even CPU-based synth if you wanted to spend the CPU on it. What the sound chip &lt;em&gt;doesn't&lt;/em&gt; have is a collection of wave generators like the SNES or many older consoles have.&lt;/p&gt;&#xA;&lt;p&gt;Point is, One Winged Angel is using the same music playback routines as the rest of the game, and the vocal parts are just extra-big &amp;quot;instrument&amp;quot; samples. If you give it a listen, it's clearly synthesized — the woodwinds from 0:04 to 0:08 are used elsewhere in the game (and they're not terribly realistic) and the string hits from 0:08 to 0:40 are clearly the same sample played over and over. I won't go through the whole track pointing out such details, but they're there, telling you that this is by no means a single recorded track.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2021-02-11T16:47:36.263" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17945" PostTypeId="2" ParentId="17942" CreationDate="2021-02-11T18:02:46.270" Score="17" Body="&lt;p&gt;Any operating system that supports multiple execution contexts within a shared address space has &amp;quot;threads&amp;quot;, even if they don't call it that.  Because that's all that threads are.&lt;/p&gt;&#xA;&lt;p&gt;For example, the exec on many ICL 1900s systems supported what they called &amp;quot;subprogramming&amp;quot;, in which a program could start an independently-executing entity in its own address space. This was typically done for asynchronous execution of part of the program; of course there was only one CPU, so the exec was allocating CPU cycles on a priority basis.&lt;/p&gt;&#xA;&lt;p&gt;I say that's &amp;quot;threads&amp;quot;. The terminology of that time and place scarcely distinguished &amp;quot;program&amp;quot; from &amp;quot;process&amp;quot;, so we can't go solely on the names of things.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;For myself, I wrote a threaded application program running on VAX/VMS somewhere (I think) in the late 1980s. The OS did not have a threads library, we wrote it ourselves for this one particular app.  When it comes down to it, all you need is the ability to assign a new value to the frame pointer register.&lt;/p&gt;&#xA;&lt;p&gt;As far as the OS was concerned we were a single schedulable entity. Within the process, it was cooperative multitasking in a common address space. Synchronization was achieved by implementation of, I think, condition variables.&lt;/p&gt;&#xA;&lt;p&gt;This was not particularly ground-breaking. It was then a new programming technique to me personally, but there was no sense that we were inventing anything.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-02-11T18:02:46.270" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17946" PostTypeId="2" ParentId="17942" CreationDate="2021-02-11T18:03:13.560" Score="20" Body="&lt;p&gt;As a matter of fact, IBM did introduce support not only for multiple parallel processes, but also for multi-threading (called &amp;quot;sub-tasks&amp;quot;) in their Multiprogramming with a Variable number of Tasks (MVT) variant of OS/360. That is the earliest mention of multi-threading concept in a production system I could find. MVT variant was announced AFAIK some time in 1964, but didn't become available to the customers until 1967, at the same time as MFT variant that provided the same capabilities but on a smaller scale.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, I am unable to find any information on their thread safety, but considering it was implementing preemptive multitasking, meaning thread could easily be interrupted in a middle of shared memory modification (if it takes more than one CPU instruction), I think it's safe to assume there were synchronization primitives like mutexes or semaphores or some message passing mechanism used in some shape or form.&lt;/p&gt;&#xA;" OwnerUserId="17748" LastEditorUserId="15334" LastEditDate="2021-02-11T20:07:40.650" LastActivityDate="2021-02-11T20:07:40.650" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17947" PostTypeId="2" ParentId="17942" CreationDate="2021-02-11T18:05:00.707" Score="10" Body="&lt;p&gt;Threads seem to have first appeared in IBM's mainframe operating system &lt;a href=&quot;https://en.wikipedia.org/wiki/Thread_(computing)#History&quot; rel=&quot;noreferrer&quot;&gt;OS/360 MVT&lt;/a&gt; in 1967, although they were called &amp;quot;tasks&amp;quot; at the time.&lt;/p&gt;&#xA;&lt;p&gt;MP/M (1981) allowed a process to create additional sub-processes which amounted to threads. Since MP/M ran on hardware without memory protection, thread programming would have been somewhat more risky than it is today. Synchronisation was done via message queues.&lt;/p&gt;&#xA;&lt;p&gt;The first microcomputer operating system that used the name &amp;quot;thread&amp;quot; seems to have been OS/2 1.x; I remember reading about threads for the first time in an article in &lt;em&gt;&lt;strong&gt;Dr Dobb’s&lt;/strong&gt;&lt;/em&gt; in 1987 or 1988. The article assumed that the concept was not generally known. Since Windows NT was originally intended to be OS/2 3.x, it had to continue to support the threads of earlier versions of OS/2.&lt;/p&gt;&#xA;" OwnerUserId="3481" LastEditorUserId="3481" LastEditDate="2021-02-11T20:45:37.707" LastActivityDate="2021-02-11T20:45:37.707" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17949" PostTypeId="2" ParentId="17942" CreationDate="2021-02-11T18:52:49.427" Score="14" Body="&lt;p&gt;&lt;em&gt;Ah, memories of Computer Science 412.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the Digital Research family of operating systems, MP/M II (1981, possibly earlier variants, but this is what I found quickly) &lt;a href=&quot;http://www.cpm.z80.de/manuals/mpm2pg.pdf&quot; rel=&quot;noreferrer&quot;&gt;as noted in the programmer's guide&lt;/a&gt; already allowed for processes to create sub-processes, had mutual exclusion queues/semaphores, etc. Section 1.2.2, Queue Management, gives an overview of how multiple processes can handle resource access with mutual exclusion queues. Process creation is in Section 3.8, function 144. Queue function details are in Section 3.8, starting with function 134.&lt;/p&gt;&#xA;&lt;p&gt;Definitely much later than the mainframes, but an example of a relatively early microcomputer implementation. Definitely predates OS/2 and Windows.&lt;/p&gt;&#xA;&lt;p&gt;Another early microcomputer operating system supporting multiple processes is &lt;a href=&quot;https://en.wikipedia.org/wiki/QNX&quot; rel=&quot;noreferrer&quot;&gt;QNX&lt;/a&gt;. Version 1.0 was released in 1984.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2021-02-12T15:41:33.147" LastActivityDate="2021-02-12T15:41:33.147" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17950" PostTypeId="2" ParentId="17942" CreationDate="2021-02-11T19:04:40.630" Score="3" Body="&lt;p&gt;Despite the elaborate text, there is no clear answerto be given, as this is more about machine capabilities as it is about OS features.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;By that definition, when did the first system add explicit support for threads?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which again would need a definition what an explicit support is. An OS supporting shared memory between processes/tasks/ - as well as code within this shared memory - right away supports what otherwise might be called threads. Even without that term ever mentioning in a manual or sales brochure.&lt;/p&gt;&#xA;&lt;p&gt;In fact, not even the presence of multiple processes by an OS is required, as long as it allows to receive and produce concurrent data (in/output). Such systems that may be called threaded nowadays.&lt;/p&gt;&#xA;&lt;p&gt;Example, in the mid to late 70s I could peek into a system running on (*1) BS1000, a real mode DOS like system for /360 class machines. The application was running nominally on two program counters, so call that a process. It was a transaction mode application, so requests that came from terminals (block mode) were dispatched by the communication system to a queue read by the first 'process', switching into a 'thread mode' by selecting a private data set (whooping 256 bytes) tied to that terminal. The request was then executed until disk I/O was required, which resulted in that request being messaged via shared memory to the other 'process', the 'thread' retired, the next 'thread' got picked up.&lt;/p&gt;&#xA;&lt;p&gt;When the IO 'process' got a result, the resulting data was put in shared memory&lt;/p&gt;&#xA;&lt;p&gt;So while the OS did not provide any measure for threads, nor processes, just concurrent Programm Counters - and to add, also not shared memory, as it was a real mode system, sharing was a thing applications just did - the system worked exactly like a threaded application would do today.&lt;/p&gt;&#xA;&lt;p&gt;Now, a rather similar application of the early 80s, now under a virtual mode OS, solved the same problem by having the startup process creating a huge shared memory pool (well, in fact several separate for code and data), loading the code into the code memory and preparing whatever global data was to be prepared. Any process starting afterwards would detect the existing memory pools and simply hook up to the system, providing another thread to the abblication.&lt;/p&gt;&#xA;&lt;p&gt;Again, the OS did never state anywhere that it supports threads, but it did quite well. In fact, it as well didn't say anything that code could be shared, but it did. These issues were simply assumed as given and standard.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;lt;RANT&amp;gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;This might be a fundamental difference between back then and nowadays. Back then everything was allowed and up to the developers, unlike today, were everything is VERBOTEN until explicit allowed - and developers beeing taken gently by hand by the OS to be lead thru the unknowns of simply using the system.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;lt;/RANT&amp;gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bottom Line: &lt;strong&gt;Asking for first support is rather fruitless, as it's asking for wording, not functionality&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Back then people did see applications running on an OS, not under an OS, as the OS wasn't the all over controlling thing of today, but rather a toolbox of services ... good old days before we added mistrust as base ingridient of OS design.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-02-11T19:04:40.630" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17951" PostTypeId="1" AcceptedAnswerId="17953" CreationDate="2021-02-11T20:19:54.433" Score="13" ViewCount="1742" Body="&lt;p&gt;I am interested in the etymology of the name for the 6502 CPU. How were those numbers arrived at by the designers? Do they refer to anything specific? Is there some sort of origin story?&lt;/p&gt;&#xA;&lt;p&gt;I found some explanations for the similarly named 8008 and 8086 CPUs, but couldn't find anything for the 6502.&lt;/p&gt;&#xA;" OwnerUserId="18698" LastEditorUserId="2037" LastEditDate="2021-02-12T20:19:52.037" LastActivityDate="2021-02-12T20:19:52.037" Title="How did the 6502 CPU get its name?" Tags="&lt;6502&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17952" PostTypeId="2" ParentId="17942" CreationDate="2021-02-11T20:23:28.593" Score="3" Body="&lt;p&gt;I think Muddle allowed multithreaded evaluation within a single address space.  It had to do with evaluating A and B where A takes ten minutes to evaluate to true and B takes a millisecond to evaluate to false.  Wouldn't it be smart to evaluate them quasi concurrently?  This was built at MIT in the 1971-1972 timeframe.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/MDL_(programming_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.m.wikipedia.org/wiki/MDL_(programming_language)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2021-02-11T20:23:28.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17953" PostTypeId="2" ParentId="17951" CreationDate="2021-02-11T20:24:40.033" Score="20" Body="&lt;p&gt;The 6502 is simply the second CPU of the 6500 family. 6501 was a 6500 CPU with an external interface (mostly) compatible with Motorola's 6800 CPU. 6503..07 were as well versions with modified external (bus) interfaces - usually less address. 6508 was a microcontroller with embedded RAM and an I/O port to compete against Motorola's new 6802.&lt;/p&gt;&#xA;&lt;p&gt;Why 6500 was selected as family name can only be speculated on. The common ground for most explanations lies in the fact that it was basically an improved and simplified 6800, made by engineers that did work on the 6800 before. So they tried to find a 'name' sounding similar but different.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-12T03:04:59.310" LastActivityDate="2021-02-12T03:04:59.310" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17954" PostTypeId="2" ParentId="17942" CreationDate="2021-02-11T20:40:37.653" Score="13" Body="&lt;p&gt;I think the Apollo Guidance Computer has a shot at making this claim.  It may not be the first, but it's certainly one of the better documented early systems.  The AGC had to juggle dozens of things at once.  It was the main clock, and the navigation system, it ran the displays, and the radar, and the telemetry uplink, and controlled the engines, all simultaneously on a single processor with about the capabilities of a MOS 6502.&lt;/p&gt;&#xA;&lt;p&gt;The operating system (&amp;quot;Exec&amp;quot;) supported a cooperative multithreaded (or multitasking) scheduler.  Tasks were allocated space in memory, set up, and would begin executing, cooperatively passing control back and forth.  On top of this, there was also a hard real-time preemptive scheduler, for short and priority jobs.  These would normally check conditions and then schedule a long-running task, if appropriate.&lt;/p&gt;&#xA;&lt;p&gt;It's remarkably sophisticated and modern, very similar to how one might design such a real-time OS today.  The book &lt;em&gt;Apollo Guidance Computer: Architecture and Operation&lt;/em&gt; by Frank O'Brien, &lt;a href=&quot;ftp://ssh.esac.esa.int/pub/ekuulker/Apollo15/The-Apollo-Guidance-Computer-Architecture-and-Operation.pdf&quot; rel=&quot;noreferrer&quot;&gt;available from the ESA&lt;/a&gt; (PDF) goes into quite a bit of detail about the AGC's operating system and software.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2021-02-11T20:40:37.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17955" PostTypeId="2" ParentId="17942" CreationDate="2021-02-11T20:53:26.330" Score="12" Body="&lt;p&gt;It wasn't called &amp;quot;threads&amp;quot;, but as soon as interrupts were invented - which was in the mid 1950's - which was also before (even primitive) operating systems evolved to manage them - user programs handled them.  Which meant ordinary programmers (for the time) were writing concurrent programs &amp;quot;in a single address space&amp;quot; for those computers that had interrupts.&lt;/p&gt;&#xA;&lt;p&gt;And all the problems you're thinking of w.r.t. concurrency in threads vs address-space-and-other-resource-isolated processes were true for those guys then.&lt;/p&gt;&#xA;" OwnerUserId="332" LastActivityDate="2021-02-11T20:53:26.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17956" PostTypeId="2" ParentId="7358" CreationDate="2021-02-12T02:17:26.490" Score="3" Body="&lt;h2&gt;The Apple 1 was a single &lt;em&gt;design&lt;/em&gt;, but multiple &lt;em&gt;products&lt;/em&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There were multiple incarnations of a particular computer design that would eventually be called the Apple 1:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Wozniak's prototype boards.&lt;/li&gt;&#xA;&lt;li&gt;Schematic plans shared with members of the Homebrew Computer Club.&lt;/li&gt;&#xA;&lt;li&gt;Boards fabricated by members of the Homebrew Computer Club, according to Woz's schematics.&lt;/li&gt;&#xA;&lt;li&gt;Bare, silkscreened boards to be sold for $40 each.&lt;/li&gt;&#xA;&lt;li&gt;Fully-populated boards sold at the &lt;em&gt;Byte Shop&lt;/em&gt; for $666 each.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;These are different physical manifestations of the same circuit design.  By the time #4 and #5 happened, Woz and Jobs had formed a company called Apple Computer, and Woz was already planning the more sophisticated computer that would become the Apple ][.  Thus, it was reasonable to put &amp;quot;Apple 1&amp;quot; on its silkscreen.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The Apple 1 began in 1975 as Woz's need for a home terminal:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;BYTE: &lt;em&gt;How did you get to the point of designing the Apple I?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Wozniak: I had worked my way up through software using&#xA;a terminal on a local time-sharing system. Sometimes I'd call&#xA;it from work, but I wanted to do it at home. I eventually designed and built a TV terminal and a modem so I could call&#xA;this computer and play games.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Byte&lt;/em&gt; magazine, December 1984, &lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-12/1984_12_BYTE_09-13_Communications#page/n463/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;p. A68&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Woz showed his computer to the Homebrew Computer Club, shared the schematics, and even assisted members in fabricating their own copies:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Steve and I had both been going down to the&#xA;(Homebrew Computer) club and giving out schematics for&#xA;the computer and the terminal, even going over to peoples&#xA;houses and helping them build and test the computers out.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;ibid&lt;/em&gt;, &lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-12/1984_12_BYTE_09-13_Communications#page/n464/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;p. A69&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;During this period, Woz realized the limitations of this first design:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In 1975 video terminals were designed with shift registers&#xA;because there were no cheap RAMs. You'd set up a bunch&#xA;of shift registers and keep shifting them around to send text&#xA;to the TV screen. So the Apple I was slow. It could type out&#xA;60 characters a second -- one character per scan of the TV&#xA;screen. My motivation was totally to save chips, not to add&#xA;features.&lt;/p&gt;&#xA;&lt;p&gt;BYTE: &lt;em&gt;Was the Apple I really a full-blown computer?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Wozniak: Yes, but its features were a little bit different than&#xA;the Apple II's and other personal computers that followed.&#xA;It was slow, and it was text only, but it was a lot faster than&#xA;the teletypes we were used to. They could only type 10 characters per second.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;ibid&lt;/em&gt;, &lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-12/1984_12_BYTE_09-13_Communications#page/n463/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;p. A68&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In particular, Woz saw a demonstration at the Club that inspired him to create a new computer design that would add color:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;At the time, Cromemco had just come out with a board&#xA;called the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cromemco_Dazzler&quot; rel=&quot;nofollow noreferrer&quot;&gt;Color Dazzler&lt;/a&gt; that did color graphics on S-100 systems. We had also had a demo, at the club, of a minicomputer running a display of a clock on the screen in color. During one of my times at Atari with Steve, I had designed a&#xA;little seven-chip circuit to do color on a TV screen and it&#xA;worked. So I started working on things that I wanted to add&#xA;to the Apple I. I was thinking about clever color circuits and&#xA;how to cut the chips down.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;ibid&lt;/em&gt;, &lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-12/1984_12_BYTE_09-13_Communications#page/n465/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;p. A70&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As requests for Woz's original design increased, Jobs proposed creating a company to sell professionally-made boards:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;BYTE: &lt;em&gt;So how did Apple Computer actually get started?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Wozniak: Steve and I had both been going down to the&#xA;(Homebrew Computer) club and giving out schematics for&#xA;the computer and the terminal, even going over to peoples&#xA;houses and helping them build and test the computers out.&#xA;Steve said, &amp;quot;Look, people are interested in what you've got.&#xA;Why don't we make a PC board, have it silkscreened so they&#xA;know what parts to plug in, and sell it at the club?&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;We had about 500 members in the club, and I thought that&#xA;maybe 50 people would buy it. It would cost us about $1000&#xA;to have the board laid out, and each board would cost us&#xA;about $20. So if we sold them for $40 and 50 people bought&#xA;them, we'd get our $1000 back. It seemed pretty doubtful.&#xA;But Steve said, &amp;quot;Well, yes, but at least for once in our lives&#xA;we'll have a company:&amp;quot; So Steve sold his van and I sold my&#xA;HP calculator to raise the money to make the PC boards.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Then the &lt;em&gt;Byte Shop&lt;/em&gt; asked for fully-built boards:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Right away Steve got a big order from a local computer&#xA;store to supply completely built computers. They ordered&#xA;something like 100 units at $500 each, to retail at $666. It&#xA;was unbelievable -- a $50,000 order. We were in business.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;ibid&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Jobs came up with the &amp;quot;Apple&amp;quot; name:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;BYTE: &lt;em&gt;Just to put four or five stories to rest, where did the name Apple&#xA;Computer actually come from?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Wozniak: It came out of Steve Jobs's head, and he's a sort&#xA;of private person, so I can't say what led up to it. He came&#xA;up with an inspiration. He was working from time to time in&#xA;the orchards up in Oregon. I thought that it might be because&#xA;there were apples in the orchard or maybe just its fructarian&#xA;nature. Maybe the word just happened to occur to him. In&#xA;any case, we both tried to come up with better names, but&#xA;neither one of us could think of anything better after Apple&#xA;was mentioned.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;ibid&lt;/em&gt;, &lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-12/1984_12_BYTE_09-13_Communications#page/n464/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;p. A69&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Therefore, by the time the silk-screen boards were actually produced, Apple Computer had been formed as a company, and Woz already had plans for an improved computer.  It was thus reasonable for them to print &amp;quot;Apple 1&amp;quot; on those boards.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-02-12T02:17:26.490" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17957" PostTypeId="1" AcceptedAnswerId="17958" CreationDate="2021-02-12T03:37:14.753" Score="37" ViewCount="5834" Body="&lt;p&gt;According to &lt;a href=&quot;https://archive.org/stream/byte-magazine-1984-12/1984_12_BYTE_09-13_Communications#page/n463/mode/1up&quot; rel=&quot;noreferrer&quot;&gt;his 1984 interview with &lt;em&gt;Byte&lt;/em&gt; magazine&lt;/a&gt;, Steve Wozniak created the BASIC for the Apple 1 computer &lt;em&gt;before&lt;/em&gt; he actually built the computer:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I sat down and wrote the BASIC first, and that took a lot&#xA;more time than the computer design. Once it was written,&#xA;I had to build the computer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;How was this actually done?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Was this simply a high-level concept, actual machine code for the 6502, or an actual implementation on a different system?&lt;/li&gt;&#xA;&lt;li&gt;Was the development only on paper, or was a host computer involved (possibly at his work at HP)?&lt;/li&gt;&#xA;&lt;li&gt;Did he test it elsewhere before putting it on the Apple 1?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;This question is only about what &lt;em&gt;Wozniak&lt;/em&gt; did.  The question &lt;em&gt;never&lt;/em&gt; was about whether hand-assembly is possible.&lt;/strong&gt;  In all revisions of the question, hand-assembly was always the first option in bullet #2.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Examples of others performing hand assembly does not answer whether Woz did it&lt;/strong&gt;.  Indeed, &lt;em&gt;I have hand-assembled programs myself&lt;/em&gt;, so I have first-hand experience that it is possible.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Please stop using this question as a forum on hand assembly.  This question is about what Wozniak did in practice.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-02-27T05:29:33.500" LastActivityDate="2021-02-27T05:29:33.500" Title="How did Woz write the Apple 1 BASIC before building the computer?" Tags="&lt;basic&gt;&lt;apple&gt;&lt;software-development&gt;&lt;apple-1&gt;" AnswerCount="3" CommentCount="17" FavoriteCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="17958" PostTypeId="2" ParentId="17957" CreationDate="2021-02-12T03:55:38.887" Score="66" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;As &lt;a href=&quot;https://apple2history.org/history/ah03/#01c&quot; rel=&quot;noreferrer&quot;&gt;explained&lt;/a&gt; on Steven Weyhrich's great and authoritative &lt;a href=&quot;https://apple2history.org/&quot; rel=&quot;noreferrer&quot;&gt;Apple II History Site&lt;/a&gt;, Wozniak simply sat down and wrote his &lt;a href=&quot;https://en.wikipedia.org/wiki/Integer_BASIC&quot; rel=&quot;noreferrer&quot;&gt;Integer-BASIC&lt;/a&gt; (*1) on paper, while assembling it at the same time by hand. In his own words:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I had no assembler, that was another thing. To use an assembler, they figured that somebody was going to buy this processor to use for a company, and their company can pay a few thousand dollars in time-sharing charges to use an assembler that was available in time-share. I didn’t have any money like that, so a friend taught me that you just sort of look at each instruction, you write your instructions on the right side of the page, you write the addresses over on the left side, and you then look up the hex data for each instruction–you could assemble it yourself. So I would just sit there and assemble it myself. The BASIC, which we shipped with the first Apple II’s, was never assembled – ever. There was one handwritten copy, all handwritten, all hand-assembled. So we were in an era that we could not afford tools.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This quote is taken from a &lt;a href=&quot;https://apple2history.org/museum-a-l/articles/ca8610/&quot; rel=&quot;noreferrer&quot;&gt;transcription&lt;/a&gt; of a speech Wozniak held at he Apple World Convention in 1986. See here for the section &lt;a href=&quot;https://apple2history.org/museum-a-l/articles/ca8610/#BASIC&quot; rel=&quot;noreferrer&quot;&gt;about his BASIC&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Question&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was this simply a high-level concept, actual machine code for the 6502, or an actual implementation on a different system?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Actual machine code on paper for the 6502. (*2,*3)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Was the development only on paper, or was a host computer involved (possibly at his work at HP)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;On paper. A computer was used to test the implementation of the stack machine evaluating expressions. It was written in ALGOL. In addition it is mentioned that he used a HP calculator as well to get used to stack-'thinking'&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did he test it elsewhere before putting it on the Apple 1?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Only on the Apple 1 - they didn't had the money to buy computing time for a cross assembler, as he mentions.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;How was this possible?&lt;/h2&gt;&#xA;&lt;p&gt;While it's not a job for an extended weekend, writing a BASIC is not as hard as some may think. To start with, a BASIC is at the core a rather simple program consisting of a few fixed parts like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A line editor&lt;/li&gt;&#xA;&lt;li&gt;A cruncher (tokenizer) (*4)&lt;/li&gt;&#xA;&lt;li&gt;A fetch and execute loop&lt;/li&gt;&#xA;&lt;li&gt;An expression evaluator&lt;/li&gt;&#xA;&lt;li&gt;Memory (variable) access&lt;/li&gt;&#xA;&lt;li&gt;(Garbage collection *5)&lt;/li&gt;&#xA;&lt;li&gt;An error handling/output function&lt;/li&gt;&#xA;&lt;li&gt;Startup (cold boot) and recovery (warm boot)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Each of them are rather short tasks and can be written down independent. Some just a few lines, some may require a up to a hundred instructions.&lt;/p&gt;&#xA;&lt;p&gt;The rest of an interpreter is&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a collection of functions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;One for every BASIC command, Every Instruction and every function. They are what the fetch and execute loop calls with every found token, which brings the last two parts:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A list of all commands, instructions and functions to be searched and pointing to its entry point&lt;/li&gt;&#xA;&lt;li&gt;A list of error codes/messages&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All of these parts are on their own quite manageable on paper and by hand. To give some rough numbers (*6), Integer BASIC occupies 6 KIB of code made up from about 2000  instructions (plus a bunch of tables). With over 50 user visible commands and function this would already average to less than 40 instructions per function. In reality most are way shorter, like PEEK or POKE being 4 instructions each. Even complex one like GOSUB and GOTO are only 14 and 26 instructions.&lt;/p&gt;&#xA;&lt;p&gt;Programming is about organization of your task, BASIC is not only no exemption to this, but a perfect candidate due the way it operates. Or in his own words:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It was a very efficient approach that broke up a large task in a very orderly way.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The name Wozniak used at the time, and for the Apple 1, was &lt;em&gt;&lt;a href=&quot;https://archive.org/details/apple1_basic_manual/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;Apple BASIC&lt;/a&gt;&lt;/em&gt;, but to a wider audience it was introduced with some extensions for the Apple II as Integer-BASIC. Since then term Apple BASIC is more closely associated with Apple's Microsoft dialect Applesoft. Thus the term Integer-BASIC is used thruout the answer, despite being not all exact.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Since he did it in 6500 assembly, it can be assumed that this happened after acquiring a first 6502 at &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS_Technology_6502#Introducing_the_6501_and_6502&quot; rel=&quot;noreferrer&quot;&gt;Wescon in September 1975&lt;/a&gt;. What's interesting is that despite having a 6502 and writing a BASIC in 6500 Assembler he still made the board to accept a 6800 as well.&lt;/p&gt;&#xA;&lt;p&gt;*3 - 6502 Assembler is rather easy to translate by hand, as every mnemonic plus addressing mode equals a single opcode and parameter encoding can as well be directly made according to addressing mode. No complex encoding to manage, like on a 8086 or 6800.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Optional, but Woz did add it to save on RAM.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Usually, but Integer BASIC worked without.&lt;/p&gt;&#xA;&lt;p&gt;*6 - These numbers are taken from Integer BASIC for the Apple II, which is the only one I had a disassembly at hand). The original Apple 1 BASIC is only 4 KiB and had about a dozend functions less, but the basic considerations match.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-13T01:17:25.083" LastActivityDate="2021-02-13T01:17:25.083" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="17959" PostTypeId="2" ParentId="17957" CreationDate="2021-02-12T08:01:31.173" Score="38" Body="&lt;p&gt;One thing is certain:  Steve Wozniak was very good at hand assembling 6502.  Instead of writing assembler mnemonics he could simply type in the necessary hex code.&lt;/p&gt;&#xA;&lt;p&gt;I realize this isn't a proper answer but this anecdote is simply too good to relegate to a comment.  It comes from Bill Atkinson remarking on Steve doing some assembler work:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The other thing that happened then is I had to plug in the disk&#xA;routines, and their system was pretty big and that little 13-sector&#xA;floppy disk didn't have a lot of capacity.  Well, Woz had just come up&#xA;with a different way of encoding the data on the disk so that we could&#xA;get more data for the same disk size, and we needed the 16-sector disk&#xA;routines.  And so Woz came down, and I was there... I had never&#xA;bothered to get a motel because I slept on the bench when I wasn't&#xA;working.  This is in the computer science lab at UC San Diego.  I was&#xA;busy, I didn't have time to go sleep.&lt;/p&gt;&#xA;&lt;p&gt;But Woz came down, and I got to interact with him and it was really&#xA;fun because he was working on installing these 16-sector disk driver&#xA;routines, and he'd go 'type type type type type' -- and he didn't type&#xA;in assembly language and have it assembled.  No, he'd type in 6502&#xA;machine code.  Hex. -- He'd type in hex, and then, you know, watching&#xA;him type and he'd go 'type type type' -- pause -- 'type type type&#xA;type', and when he finished I asked him what was the pause?  And he&#xA;said &amp;quot;forward branch, seven instructions, I had to compute the offset&#xA;before I continued&amp;quot;.  So, he didn't back-patch the offset, he actually&#xA;looked at what he was going to be typing, knew how many bytes it would&#xA;take... he was brilliant.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;From an interview: &lt;a href=&quot;https://youtu.be/6tUWoy1tJkE?t=45m&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/6tUWoy1tJkE?t=45m&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I've borrowed this wholesale from: &lt;a href=&quot;https://news.ycombinator.com/item?id=14824949&quot; rel=&quot;noreferrer&quot;&gt;https://news.ycombinator.com/item?id=14824949&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2021-02-12T08:01:31.173" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17960" PostTypeId="2" ParentId="17926" CreationDate="2021-02-12T09:12:38.417" Score="3" Body="&lt;p&gt;A slightly different situation, but you can buy a brand new MacBook Air right now where only seven out of eight GPUs are working, and save $50. And all new Macs with an M1 processor are sold with either 16GB or 8 GB of RAM, they are obviously tested and there is no reason why a failing 16GB CPU wouldn’t be sold as a working 8GB CPU.&lt;/p&gt;&#xA;&lt;p&gt;So it seems that Apple tests all their GPUs and the ones that fail go into this one specific model.&lt;/p&gt;&#xA;&lt;p&gt;But on the chip level, there is just no market for this. You’d have to sell a broken 8GB chip for a lot less than a working 4GB chip if it is a separate product, and there wouldn’t be enough market. It only makes sense if the customer doesn’t know the difference.&lt;/p&gt;&#xA;" OwnerUserId="1959" LastEditorUserId="1959" LastEditDate="2021-02-12T09:25:32.287" LastActivityDate="2021-02-12T09:25:32.287" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17961" PostTypeId="2" ParentId="17942" CreationDate="2021-02-12T09:43:28.743" Score="2" Body="&lt;p&gt;Although not the earliest example, in 1973, IBM released APL.SV (A Programming Language | Shared Variables). Variables (of any number of dimensions) could be shared between instances (effectively threads) of APL programs running on different terminals. Not mentioned in the wiki article linked to below is that APL.SV ran in supervisor mode, so there was no hardware based memory mapping or protection, just software checks like out of bounds indexing.&lt;/p&gt;&#xA;&lt;p&gt;It was also possible for APL.SV programs to use file based synchronization and data transfer to work with batch programs that were running at the same time.&lt;/p&gt;&#xA;&lt;p&gt;There were various ways to &amp;quot;glitch&amp;quot; array variables so that one array included the control structure for another array, allowing modification of array size to be set to double physical memory size. Each instance of an APL thread started with a standard IBM save area, where word 13 (corresponding to register 13) contained the absolute address of the save area. This allowed simple math to convert translate an absolute address into a save area relative address, allowing APL.SV programs to read|write absolute addresses in memory.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/APL_(programming_language)#Commercial_availability&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/APL_(programming_language)#Commercial_availability&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4660" LastEditorUserId="4660" LastEditDate="2021-02-12T09:49:10.717" LastActivityDate="2021-02-12T09:49:10.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17962" PostTypeId="2" ParentId="17942" CreationDate="2021-02-12T10:01:23.873" Score="1" Body="&lt;p&gt;As you go back.in time, the nature of the OS itself changes.&lt;/p&gt;&#xA;&lt;p&gt;In earlier computing eras, the OS was often (not always but often) closer to a set of callable commands - a library and framework, not an overarching *visor.&lt;/p&gt;&#xA;&lt;p&gt;That meant that it was much more often down to the application to use what was useful, and add for itself whatever else it wanted that the OS didn't provide as standard.  Even on a system level.&lt;/p&gt;&#xA;&lt;p&gt;A trivial example of this was in early desktop computers, such as the Apple II, where even the disk controller was often manually programmed (as a primitive form of file copy prevention - create a custom on-disk format instead: the system would boot the first sector and you'd write code to be loaded from within that, to handle your own on-disk low-level format).&lt;/p&gt;&#xA;&lt;p&gt;Contrast with today, where the OS almost exclusively provides system level capabilities, and dictates how they should/must be used, and if its not in the OS or an API provided for extending the OS you're out of luck.&lt;/p&gt;&#xA;&lt;p&gt;So its not so much that threads were introduced by some specific OS at some specific time, or even that they were first supported by some specific OS at some specific time.&lt;/p&gt;&#xA;&lt;p&gt;Its more like, early OS design allowed for such things, and the software model of the era was that such things were part of an application writers job. If your software needed or benefited from a capability that wasn't in the OS, you wrote it yourself, and that was the norm. The OS * supported * many, many things that weren't in the &amp;quot;official&amp;quot; manual or specs, in that way.&lt;/p&gt;&#xA;" OwnerUserId="6472" LastEditorUserId="6472" LastEditDate="2021-02-12T21:24:18.470" LastActivityDate="2021-02-12T21:24:18.470" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17963" PostTypeId="1" AcceptedAnswerId="17970" CreationDate="2021-02-12T12:22:03.683" Score="7" ViewCount="983" Body="&lt;p&gt;In the 90s, before everything was networked, you had to buy a Network Interface Card as an expansion card for your PC.  One brand came with a bundled game where you piloted a space ship and fought other people on your shiny new network.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone remember the NIC and/or the game?&lt;/p&gt;&#xA;" OwnerUserId="20792" LastEditorUserId="15334" LastEditDate="2021-02-12T12:41:19.480" LastActivityDate="2021-02-15T00:10:57.713" Title="Network card that came bundled with a space war game" Tags="&lt;network&gt;&lt;identify-this-software&gt;&lt;identify-this-card&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17965" PostTypeId="5" CreationDate="2021-02-12T13:33:30.447" Score="0" Body="" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-12T13:33:30.447" LastActivityDate="2021-02-12T13:33:30.447" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17966" PostTypeId="4" CreationDate="2021-02-12T13:33:30.447" Score="0" Body="Timekeeping hardware that maintains the current wall-clock time, its hardware interface and batteries that maintain its state." OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-12T14:19:06.563" LastActivityDate="2021-02-12T14:19:06.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17968" PostTypeId="5" CreationDate="2021-02-12T14:34:27.260" Score="0" Body="" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-12T14:34:27.260" LastActivityDate="2021-02-12T14:34:27.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17969" PostTypeId="4" CreationDate="2021-02-12T14:34:27.260" Score="0" Body="Requests to identify an extension card based on a photograph or some specific criteria. Use [identify-this-computer] instead for self-contained hardware." OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-12T14:34:27.260" LastActivityDate="2021-02-12T14:34:27.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17970" PostTypeId="2" ParentId="17963" CreationDate="2021-02-12T14:44:11.943" Score="14" Body="&lt;p&gt;The description of space combat over a network also matches &lt;a href=&quot;https://en.wikipedia.org/wiki/NetWars&quot; rel=&quot;noreferrer&quot;&gt;NetWars&lt;/a&gt;, which was bundled with Novell DOS and Personal Netware.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="1912" LastEditDate="2021-02-12T15:55:08.897" LastActivityDate="2021-02-12T15:55:08.897" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17971" PostTypeId="2" ParentId="17942" CreationDate="2021-02-12T16:13:10.380" Score="5" Body="&lt;p&gt;The distinction between multithreading and callbacks/interrupts is that a thread has its own execution context, which essentially means its own stack pointer.  If you can access the stack pointer and change it around, you have what multithreading takes within the processor's execution paradigm.  This holds even for very stack-limited architectures (with an 8-bit stack pointer and/or hardware stack).&lt;/p&gt;&#xA;&lt;p&gt;I know that back in the 80s I wrote a terminal emulator for a CP/M BIOS (at those time, a rather common coding task) and the parsing of terminal escape sequences (like for cursor positioning) used several subroutines that parsed the sequence so far and then used &lt;code&gt;call termchar&lt;/code&gt; to get the next character sent to the terminal.  This subroutine swapped out stack pointers back to what the character output system call had been called with last time and returned.  When the character output system call was called next time, it swapped stack pointers again and returned to the routine calling &lt;code&gt;termchar&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Now strictly speaking this use of multiple execution contexts was called &amp;quot;coroutines&amp;quot; at that time.  The difference to multithreading is that context switching was strictly synchronous and initiated by the currently executing context, of which there was only one at any given point of time.  To get to the point where you need more elaborate synchronisation, you either need multiple processors working in the same memory space, or you need a preemptive manner of task switching where control is passed without solicitation.&lt;/p&gt;&#xA;&lt;p&gt;The original MacOS had cooperative multitasking without preemption.  I think that AmigaOS was similar in that regard.&lt;/p&gt;&#xA;&lt;p&gt;Systems with actual preemption in connection with multithreading are a lot harder to find even though interrupts have been preemptive for a long time.  However, letting interrupts maintain their own coroutine for protocol-based or other stateful operation is of course perfectly feasible but not that frequently seen: instead of maintaining protocol state implicitly by the execution context reflected in a saved execution stack, it was a lot more customary (if less effective) to maintain state in some state variable with discrete values and then switch based on its content.&lt;/p&gt;&#xA;" OwnerDisplayName="user20813" LastActivityDate="2021-02-12T16:13:10.380" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17972" PostTypeId="2" ParentId="17957" CreationDate="2021-02-12T18:55:06.570" Score="13" Body="&lt;p&gt;Woz was exceptional, but not the only one with this (moderate level of ?) skill in machine language.  Lots of teens/kids learned to poke (from Basic) absolute hex machine code into memory on several models of personal computers (not just the Apple I/II).  I knew some who could speak out-loud a small subroutine in hex for the 6502, no assembly language or even paper coding form needed.&lt;/p&gt;&#xA;&lt;p&gt;As for needing a computer to code, also not true.  Tons of computer programming was done, not only in the 8-bit era, but in the punch card era on paper coding sheets, and hand assembled.  Some programmers needed to debug their (Edsac, Manchester, Bendix, et.al.) code when the first run(s) failed.  But a non-zero number of programmers did not, since the turn-around cost was high enough that some just hand checked their code sufficient to not have off-by-one branching errors, etc.&lt;/p&gt;&#xA;&lt;p&gt;There are lots of lost arts due to modern technologies.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2021-02-13T18:21:58.413" LastActivityDate="2021-02-13T18:21:58.413" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17973" PostTypeId="1" AcceptedAnswerId="17974" CreationDate="2021-02-12T20:10:08.820" Score="16" ViewCount="3229" Body="&lt;p&gt;When I revisit my files on a 5¼″ floppy using my 1541 drive with a C64 I mainly miss the date on files.&lt;/p&gt;&#xA;&lt;p&gt;I know that a Real Time Clock was not implemented and that the first computer to integrate the RTC was the IBM PC/AT in 1984.&lt;/p&gt;&#xA;&lt;p&gt;When did files start to be dated, on what computer or which version of which operating system?&lt;/p&gt;&#xA;" OwnerUserId="18338" LastEditorUserId="15334" LastEditDate="2021-02-12T21:04:54.493" LastActivityDate="2021-02-13T02:01:17.693" Title="When did files start to be dated?" Tags="&lt;history&gt;&lt;file-system&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17974" PostTypeId="2" ParentId="17973" CreationDate="2021-02-12T20:22:51.597" Score="30" Body="&lt;p&gt;CTSS, a timesharing system for the IBM 7090, was putting dates on files as early as 1962.&#xA;Timestamps is another story.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Compatible_Time-Sharing_System#File_system&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2021-02-12T20:22:51.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17976" PostTypeId="2" ParentId="17973" CreationDate="2021-02-12T22:35:37.483" Score="20" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I know that a Real Time Clock was not implemented and that the first computer to integrate the RTC was the IBM PC/AT in 1984.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There where many more before that. All the way back in the 60s.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When did files start to be dated, on what computer or which version of which operating system?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, the earliest I know would be tape based storage on 729 tapes on IBM 709 systems in 1957, so even before disk storage was used. Its 1HDR &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13719&quot;&gt;standard header&lt;/a&gt; section contained a creation data on position 11 of the header record as two digit years and 3 digit day of year. That would be late 1950s. See as well this later (1963) &lt;a href=&quot;http://bitsavers.org/pdf/ibm/magtape/C28-8142_IBM_Standard_Tape_Label_1963.pdf&quot; rel=&quot;noreferrer&quot;&gt;IBM document about Standard Tape Label&lt;/a&gt; (page 3 lower right column).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-02-12T22:35:37.483" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17977" PostTypeId="2" ParentId="4678" CreationDate="2021-02-13T01:50:19.307" Score="3" Body="&lt;p&gt;Depends on the type of card. By the late '80s, two main standards had emerged.&lt;/p&gt;&#xA;&lt;p&gt;First was the RamWorks-type card, named for the first product of its type, the RamWorks from Applied Engineering. This installed in the aux slot and behaved exactly like multiple extended 80-column cards, with an additional softswitch that let you choose which 64K bank you wanted to address in the usual extended-80-column-card way. Numerous clones copied AE's technique and there were compatible cards for the Apple IIc as well (which you installed by pulling the CPU and MMU chips, plugging the memory card into the empty sockets, and then installing the CPU and MMU on the memory card... not for the faint of heart). You could install a driver that would let ProDOS use this memory as a RAM disk, and most such cards included utilities to let you split the memory on the card between a RAM disk and direct use (e.g. by AppleWorks). The Laser 128 EX had its extended memory configured in RamWorks fashion.&lt;/p&gt;&#xA;&lt;p&gt;The other major type was the Slinky-type card, which was the code name for Apple's own memory card. This could be installed in any slot and was compatible with the II+ as well as the IIe and IIgs, where multiple such cards could be installed. It was seen as a SmartPort device by ProDOS and was automatically configured as a RAM disk, though it could also be accessed directly, for example by AppleWorks. The Slinky did not use bank-switching but rather a peephole technique. Its softswitches included a handful to set the address of a byte of memory on the card you were interested in, and then you would read from or write to a different softswitch to access that byte. Reading or writing the card automatically advanced the &amp;quot;peephole&amp;quot; to the next byte, which meant that transferring memory between the card and main memory could actually be &lt;em&gt;faster&lt;/em&gt; than transferring it between two locations in main memory! But you couldn't actually run code on the card, like you could with a RamWorks-style card. Other manufacturers (including Applied Engineering) offered clones of this card and Apple offered a revision of the Apple IIc motherboard that supported a Slinky-style card. (With a little creative soldering and case modification, you could actually install both a RamWorks-style card on top of the IIc logic board, and a Slinky card underneath!) The extended memory in the Apple IIc+ was configured as a Slinky card.&lt;/p&gt;&#xA;&lt;p&gt;Before the IIe came out there were numerous other proprietary schemes which I could not tell you much about.&lt;/p&gt;&#xA;" OwnerUserId="20820" LastActivityDate="2021-02-13T01:50:19.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17978" PostTypeId="2" ParentId="17973" CreationDate="2021-02-13T02:01:17.693" Score="7" Body="&lt;p&gt;Microcomputers got it slowly. An early real-time clock card for the Apple II was the ThunderClock; this was so popular that it basically set the standard and all later clock cards emulated it. (And Apple supported it in ProDOS.)&lt;/p&gt;&#xA;&lt;p&gt;But the ThunderClock came out before ProDOS and came with a DOS 3.x patch that would store the time and date a file was created in its directory entry, so you could see it when you did a &lt;code&gt;CATALOG&lt;/code&gt;. But... the date and time was actually stored as part of the file's name, so the patch also caused DOS to ignore that part of the filename; in essence, you had to use much shorter filenames because the date and time took up so much of the filename! And if you were trying to access the files using a DOS that didn't have that patch, you had to type in the date and time as part of the file name when loading it! It was a dumb idea. The things we put up with in those days...&lt;/p&gt;&#xA;" OwnerUserId="20820" LastActivityDate="2021-02-13T02:01:17.693" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17979" PostTypeId="2" ParentId="17922" CreationDate="2021-02-13T02:51:41.210" Score="8" Body="&lt;p&gt;Unlike the current directory on modern operating systems, ProDOS's &amp;quot;prefix&amp;quot; can be empty, and when it is, you have to specify the full path to files you want to work with. It actually is empty at boot (well, BASIC.System clears it). It was a common practice to detect an empty prefix at startup and get the volume name of the last accessed disk and set the prefix to that.&lt;/p&gt;&#xA;&lt;p&gt;BASIC.System uses the empty prefix as a sort of flag to emulate DOS 3.3's slot and drive specifications. If the prefix is not set, then BASIC.System tracks the last-specified device by slot and drive, and if you don't specify some other way of locating the file, it fetches the volume name in that drive and adds that to the beginning of the specified path. Note that in BASIC.System you can reset the prefix to empty with &lt;code&gt;PREFIX /&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="20820" LastEditorUserId="20820" LastEditDate="2021-04-23T21:22:05.557" LastActivityDate="2021-04-23T21:22:05.557" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17980" PostTypeId="1" AcceptedAnswerId="17983" CreationDate="2021-02-13T18:05:02.883" Score="6" ViewCount="1246" Body="&lt;p&gt;I'm building a new computer in an old computer case.  The old computer case came with a Centronic &lt;a href=&quot;https://patents.google.com/patent/US5563767A&quot; rel=&quot;noreferrer&quot;&gt;50-pin SCSI to IDE adapter&lt;/a&gt;, and I was thinking about leaving it in the case's 5.25&amp;quot; drive bay, purely for aesthetic purposes.&lt;/p&gt;&#xA;&lt;p&gt;This got me thinking if there were any &amp;quot;modern&amp;quot; SCSI devices that could be plugged into it? I was thinking along the same lines as USB &lt;a href=&quot;https://smile.amazon.com/dp/B07K2YDF34&quot; rel=&quot;noreferrer&quot;&gt;personal fans&lt;/a&gt; or &lt;a href=&quot;https://smile.amazon.com/dp/B08SP9L7BX&quot; rel=&quot;noreferrer&quot;&gt;mug warmers&lt;/a&gt;.  If it's a device that actually has some technical use that would be good as well!&lt;/p&gt;&#xA;&lt;p&gt;Here's a photo because why not:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PI8Ou.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PI8Ou.jpg&quot; alt=&quot;SCSI to IDE&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20824" LastEditorUserId="20824" LastEditDate="2021-02-13T20:06:00.127" LastActivityDate="2021-02-13T20:20:12.787" Title="Are there any &quot;modern&quot; SCSI devices?" Tags="&lt;scsi&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17981" PostTypeId="2" ParentId="17922" CreationDate="2021-02-13T19:20:18.917" Score="3" Body="&lt;p&gt;Extending on @kindall's answer, here's some sample code to deal with that problem:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;-   jsr    $bf00&#xA;op_c7&#xA;    !byte  $c7&#xA;    !word  c7_parms&#xA;    ldx    $300&#xA;    bne    +&#xA;    lda    $bf30&#xA;    sta    c5_parms+1&#xA;    jsr    $bf00&#xA;    !byte  $c5&#xA;    !word  c5_parms&#xA;    lda    $301&#xA;    and    #$0f&#xA;    tax&#xA;    inx&#xA;    stx    $300&#xA;    lda    #$2f&#xA;    sta    $301&#xA;    dec    op_c7&#xA;    bne    -&#xA;&#xA;c7_parms&#xA;    !byte  1&#xA;    !word  $300&#xA;&#xA;c5_parms&#xA;    !byte  2&#xA;    !byte  0&#xA;    !word  $301&#xA;&#xA;+&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It works by querying for the prefix, and if it's empty it sets the prefix to the current volume name.  It assembles with ACME, but it's trivial to change for Merlin.&lt;/p&gt;&#xA;" OwnerUserId="4476" LastActivityDate="2021-02-13T19:20:18.917" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17982" PostTypeId="2" ParentId="17980" CreationDate="2021-02-13T19:46:15.987" Score="4" Body="&lt;p&gt;There's the &lt;a href=&quot;http://www.codesrc.com/mediawiki/index.php/SCSI2SD&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCSI2SD&lt;/a&gt; which lets you use an SD card as a SCSI hard drive. Other than that, I'm not aware of any recent SCSI devices. Also, SCSI doesn't provide power, making it less suitable for fans or mug warmers.&lt;/p&gt;&#xA;&lt;p&gt;You can, of course, use a SCSI CD ROM drive as a cup holder.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2021-02-13T19:46:15.987" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17983" PostTypeId="2" ParentId="17980" CreationDate="2021-02-13T20:16:28.477" Score="18" Body="&lt;p&gt;You cannot plug or connect any SCSI devices.&lt;/p&gt;&#xA;&lt;p&gt;That is not an IDE to SCSI adapter.&lt;/p&gt;&#xA;&lt;p&gt;That is a drive bay for quickly exchanging IDE drives to a computer.&lt;/p&gt;&#xA;&lt;p&gt;The connector is simply a passive connector for passing through IDE bus signals and power supplies into the box where the IDE drive is in.&lt;/p&gt;&#xA;&lt;p&gt;Due to the connector having IDE signals and 5V and 12V power supplies, it will damage any SCSI equipment connected to it.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-02-13T20:20:09.850" LastActivityDate="2021-02-13T20:20:09.850" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17984" PostTypeId="2" ParentId="17980" CreationDate="2021-02-13T20:20:12.787" Score="3" Body="&lt;p&gt;As is mentioned in the comments this is a bay that accepts PATA devices in suitable caddies. using the 50-way beam connector to connect the caddy to the ATA bus and power.&lt;/p&gt;&#xA;&lt;p&gt;As the bay takes up a half-height 5.25&amp;quot; bay, the only devices it will accept will be smaller than that, mostly 3.5&amp;quot; drives. with a suitable caddy.&lt;/p&gt;&#xA;&lt;p&gt;you're better off mounting a &amp;quot;cup-holder&amp;quot;, 12V outlet, or a front IO panel. in that spot.&lt;/p&gt;&#xA;" OwnerUserId="520" LastActivityDate="2021-02-13T20:20:12.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17985" PostTypeId="1" AcceptedAnswerId="17986" CreationDate="2021-02-13T20:29:56.920" Score="8" ViewCount="338" Body="&lt;p&gt;I am building a W65C02S based computer for fun, and I try to build basically all the tools myself. Including the assembler (yes, I know they exist, I just want to make everything from scratch myself, for fun).&lt;/p&gt;&#xA;&lt;p&gt;When working on the &lt;code&gt;JSR&lt;/code&gt; opcode (absolute addressing mode), I find that before it puts the program counter on the stack, it reads one byte off the stack first (program counter is set to &lt;code&gt;80 2e&lt;/code&gt; at this point, the stack pointer is &lt;code&gt;01b6&lt;/code&gt;):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;READ  address:   80 2e   data:   20   JSR   ; Read the opcode&#xA;READ  address:   80 2f   data:   14   14    ; Read the LO byte of operand&#xA;READ  address:   01 b6   data:   74   't'   ; Read the stack (why?!)&#xA;WRITE address:   01 b6   data:   80   ---   ; Write HI byte of PC&#xA;WRITE address:   01 b5   data:   30   '0'   ; Write LO byte of PC&#xA;READ  address:   80 30   data:   80   80    ; Read HI byte of operand&#xA;READ  address:   80 14   data:   8d   STA   ; Read opcode at `80 14` (the JSR operand)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It works OK, but what it the reason it reads from the stack first?&lt;/p&gt;&#xA;&lt;p&gt;(To explain the table: this is from my own tool. I am using an Arduino to look at the data and address buses to see what is happening there. It is a hardware CPU running only my own code.)&lt;/p&gt;&#xA;" OwnerUserId="575" LastActivityDate="2021-02-13T22:15:42.027" Title="Why does the 6502 read from the stack before writing it?" Tags="&lt;6502&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17986" PostTypeId="2" ParentId="17985" CreationDate="2021-02-13T21:27:15.690" Score="9" Body="&lt;p&gt;&lt;em&gt;[This question is kind of duplicate to&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/17933/6659&quot;&gt;6502 double store and copy protection?&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/17891/6659&quot;&gt;What is the MOS 6502 doing on each cycle of an instruction&lt;/a&gt;?]&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;It's one of the 'dead' or internal cycles of a 6500. On a WDC65C02 they are externally all turned into 'harmless' read cycles.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;Unlike other CPUs the 6500 series has not pure internal cycles without memory access, but each and every cycle will as well be a memory cycle. Whenever internal operation can not overlap with with a needed memory cycle, a dummy access is inserted. Usually with the last address used.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;On NMOS it depends on what the next (intended) cycle would be, read or write.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On CMOS this was changed that the internal cycle would always be a read.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This behaviour will be as well seen on RMW instructions and all inserted carry processing cycles on page crossings.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Finer Details&lt;/h2&gt;&#xA;&lt;p&gt;The detailed working are described on &lt;a href=&quot;https://archive.org/details/6500-50a_mcs6500pgmmanjan76/page/n121/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;page 107&lt;/a&gt; of the 1976 MCS6500 Microcomputer Family Programming Manual:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/O65UO.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O65UO.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Notable here is that cycle 3 stores the just read ADL, the low byte of the target address, which then gets overwritten in cycle 4 by PCL. This is of course like the NMOS version works.&lt;/p&gt;&#xA;&lt;p&gt;As mentioned, when the CMOS version was designed one goal was to remove all unintended write operations (*1). In this case the third cycle writing ADL was replaced by a dummy read.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.S.: If you're starting from scratch, it might be a good start to &lt;em&gt;first&lt;/em&gt; read both 1976 manuals end to end :)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - While it doesn't really matter when looking at RAM, unintended writes may screw the workings of I/O ports. The 6500 being mainly meant as an embedded CPU family this counts an important improvement.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-13T22:15:42.027" LastActivityDate="2021-02-13T22:15:42.027" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17987" PostTypeId="1" CreationDate="2021-02-14T03:45:33.340" Score="2" ViewCount="128" Body="&lt;p&gt;Some GBA games, like Pokemon Ruby, contained an internal RTC with a small button battery to power it. When the cartridges were inserted and the GBA was powered on, did the RTC continue to run on the internal battery or did the system's battery power it while it was connected?&lt;/p&gt;&#xA;&lt;p&gt;What about GB/GBC cartridges which contained battery-backed SRAM for save data?&lt;/p&gt;&#xA;" OwnerUserId="8090" LastActivityDate="2021-02-14T14:04:42.630" Title="Did the RTC in certain cartridges get power over the GBA bus?" Tags="&lt;power&gt;&lt;game-boy&gt;&lt;battery&gt;&lt;game-boy-advance&gt;&lt;rtc&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17988" PostTypeId="1" CreationDate="2021-02-14T04:29:58.793" Score="7" ViewCount="989" Body="&lt;p&gt;I am trying to make a bootable SD card that has Windows 3.1 loaded onto it. I only have 2 computers with 1 and 8 GB of RAM. When I load Windows from &lt;code&gt;C:\WINDOWS\WIN&lt;/code&gt; on my older 1 GB RAM computer (a netbook from 2008, the HP Mini 110-1030NR to be exact), it displays the splash screen for like 1 second because computers are so fast now, and then crashes to MS-DOS. I have not tested on my more-modern computer with 8 GB of RAM (the HP ProDesk 600 G1 SFF from 2013 or 2014, I'm not sure), and I have a 3rd computer (a Toshiba Sattelite C675D-S7101 from 2012) which does &lt;strong&gt;not&lt;/strong&gt; boot from the SD card.&lt;/p&gt;&#xA;" OwnerUserId="20829" LastEditorUserId="15334" LastEditDate="2021-02-14T08:38:06.747" LastActivityDate="2021-02-14T08:38:06.747" Title="How do I get Windows 3.1 to run on modern PCs (&gt; 512 MB of memory)?" Tags="&lt;windows-3.x&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17989" PostTypeId="2" ParentId="17988" CreationDate="2021-02-14T06:30:32.977" Score="8" Body="&lt;p&gt;The accepted answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2494/79&quot;&gt;Windows 98 with 2GB of RAM&lt;/a&gt; should be adaptable for Windows 3.1:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;download and extract &lt;a href=&quot;https://sourceforge.net/projects/himemx/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;HIMEMX&lt;/code&gt;&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;edit &lt;code&gt;CONFIG.SYS&lt;/code&gt; to load that instead of &lt;code&gt;HIMEM.SYS&lt;/code&gt;, and specify &lt;code&gt;/MAX=262144&lt;/code&gt; to limit memory to 256MiB (&lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/084/Q84388/&quot; rel=&quot;noreferrer&quot;&gt;the practical limit for Windows 3.&lt;em&gt;x&lt;/em&gt;&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This will ensure that Windows only sees 256MiB through the XMM, and should allow it to start and run.&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2021-02-14T06:30:32.977" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17990" PostTypeId="2" ParentId="17987" CreationDate="2021-02-14T14:04:42.630" Score="1" Body="&lt;p&gt;To answer this with absolute certainty, you'd have to examine each cartridge on its own, particularly those that weren't made by Nintendo. I'm not sure anyone has ever done that, but people have looked at quite a number of cartriges (e.g., &lt;a href=&quot;https://b13rg.github.io/Gameboy-MBC-Analysis/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://atariage.com/forums/topic/193374-battery-life-of-old-game-cartridges/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;), and Nintendo cartridges for the GB/GBC all appear to use the &lt;a href=&quot;https://www.digchip.com/datasheets/parts/datasheet/304/MM1134.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mitsumi MM1134&lt;/a&gt; system supervisor IC (or something pin compatible) to switch between power from the Gameboy and battery backup.&lt;/p&gt;&#xA;" OwnerUserId="10666" LastActivityDate="2021-02-14T14:04:42.630" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17991" PostTypeId="1" CreationDate="2021-02-14T14:12:36.810" Score="12" ViewCount="4900" Body="&lt;p&gt;Is there some simple method for determining if a DOS (or OS/2, or Windows etc.) binary (&lt;code&gt;.exe&lt;/code&gt; or &lt;code&gt;.dll&lt;/code&gt;) is 16-bit or 32-bit? The Linux &lt;code&gt;file&lt;/code&gt; command just says &amp;quot;executable&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I want to distinguish between programs that run on any &amp;quot;x86&amp;quot; processor, and those that &amp;quot;require a 386&amp;quot;, in a way that is simpler than setting up two environments and attempting to run the program.&lt;/p&gt;&#xA;&lt;p&gt;And what I want is a tool, like the &lt;code&gt;file&lt;/code&gt; command, not primarily more detailed technical explanations.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2021-02-15T05:35:10.397" LastActivityDate="2021-02-15T09:02:32.787" Title="How can I tell whether a DOS-looking exe. requires a 32-bit CPU to run?" Tags="&lt;file-format&gt;&lt;executables&gt;&lt;dos&gt;&lt;32-bit&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17992" PostTypeId="2" ParentId="17991" CreationDate="2021-02-14T14:58:47.280" Score="17" Body="&lt;p&gt;There is no easy way.&lt;/p&gt;&#xA;&lt;p&gt;The original DOS &amp;quot;MZ&amp;quot; type executable header do not contain such information about what kind of code it contains or what CPU type it needs. It just contains a binary image that is loaded to memory and information about how to start it in real mode, so there are no separate 16-bit or 32-bit binaries.&lt;/p&gt;&#xA;&lt;p&gt;The binary image may contain any real mode opcodes that are available for a given type of CPU, but if it does contain 32-bit protected mode code, there will be a real mode loader stub to switch to protected mode and jump to run the 32-bit image contained in the executable file.&lt;/p&gt;&#xA;&lt;p&gt;So DOS cannot know what the executable contains, DOS simply loads the executable binary into memory, does the relocations, and jumps to run the code at the entry point given in the headers. It is up to the executable what opcodes it contains, and for example if it needs a certain type of CPU to run certain opcodes, it can perform the CPU type detection if it is suitable for running the rest of the program. The executable might for example contain a stub to put the 386 CPU into 32-bit protected mode and then execute most of the program in that mode instead of 16-bit real mode.&lt;/p&gt;&#xA;&lt;p&gt;So in order to detect what type of CPU is needed, the program has to be for example run in a virtual machine that sees what opcodes are executed. A disassembler can also be used to see what opcodes there is in the binary. While there might be standard compiler startup codes that could be detected by a tool analyzing the generated binary, there are also infinitely many other ways to make a program that does not use standard compilers or libraries, or that can make the disassembler to not be able to follow each and every code path, for example by dynamically generating a pointer where to go execute code.&lt;/p&gt;&#xA;&lt;p&gt;So, it is not impossible. It is just not easy.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-02-14T16:52:28.757" LastActivityDate="2021-02-14T16:52:28.757" CommentCount="28" ContentLicense="CC BY-SA 4.0" />
  <row Id="17993" PostTypeId="2" ParentId="17991" CreationDate="2021-02-14T16:27:03.140" Score="41" Body="&lt;p&gt;Plain DOS executables, in either COM or MZ format, don’t provide this information in their headers (when there is one — COM format doesn’t have a header). The only reliable way to determine whether a program requires a given CPU is to try running it on some less capable system (or emulation, &lt;em&gt;e.g.&lt;/em&gt; with &lt;a href=&quot;http://pcem-emulator.co.uk/&quot; rel=&quot;noreferrer&quot;&gt;PCem&lt;/a&gt; which has accurate emulations of different x86 processors), and rely on either the program checking that the CPU is good enough for it, or on it crashing with an invalid opcode (on a 186 or later). Alternatively, you could try disassembling the program and looking for 386+ opcodes; but that’s only as reliable as the disassembly process, and will give inconsistent results on programs which adapt to the CPU (running 8086 code only on 8086s, 386 code on 386s, etc.).&lt;/p&gt;&#xA;&lt;p&gt;For protected-mode executables specifically, you could look for one of the common 32-bit DOS extenders or stubs, &lt;em&gt;e.g.&lt;/em&gt; DOS/4G, 32RTM... A program using one of these will require a 386. (There are also 286 extenders.) See &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/14515/79&quot;&gt;Are .COM executable binaries real mode or protected mode?&lt;/a&gt; for more discussion of how DOS programs start (but real- v. protected-mode is only one aspect of instruction set usage; programs can use 286, 386, 486, Pentium etc. instructions even in real mode).&lt;/p&gt;&#xA;&lt;p&gt;Many post-MZ executable formats encode this information; for example, 16-bit Windows and OS/2 executables are “new executables”, with &lt;a href=&quot;http://www.delorie.com/djgpp/doc/rbinter/it/97/15.html&quot; rel=&quot;noreferrer&quot;&gt;a flag indicating which CPU is required&lt;/a&gt;. 32-bit OS/2 executables are “linear executables”, identified by an LX header following the MZ stub, &lt;a href=&quot;http://www.textfiles.com/programming/FORMATS/lxexe.txt&quot; rel=&quot;noreferrer&quot;&gt;and specify their target CPU and operating system&lt;/a&gt;. Likewise, 32-bit Windows programs are “portable executables”, and the PE header identifies the target CPU. &lt;code&gt;file&lt;/code&gt; knows about these and will identify them correctly. However, it’s worth checking the details of the MZ stub too, since LX or PE executables can contain a 16-bit variant in their MZ stub, and would therefore be capable of running on a 16-bit CPU.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-14T19:55:12.283" LastActivityDate="2021-02-14T19:55:12.283" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="17994" PostTypeId="2" ParentId="17991" CreationDate="2021-02-14T17:03:47.997" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Is there some simple method for determining if a DOS binary (.exe or .dll) is 16-bit or 32-bit?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For one, DOS doesn't know about 32 bit, it's a strict 16 bit system. Second, .DLL are not DOS executables but Windows libraries.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Linux file command just says &amp;quot;executable&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because all EXE start out as 16 bit programs, marked by the magic number &amp;quot;MZ&amp;quot; in the first two bytes. DLLs as well, as they carry a &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#ms-dos-stub-image-only&quot; rel=&quot;noreferrer&quot;&gt;stub header of a 16 Bit EXE&lt;/a&gt;. This is done to enable a warning (*1) in case someone tries hard enough to start it under DOS. So for all practical purpose they are 16 bit executables.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Clarification: I want to distinguish between programs that run on any &amp;quot;x86&amp;quot; processor, and those that &amp;quot;require a 386&amp;quot;, in a way that is simpler than setting up the two environments and attempting to run the program.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;For real DOS programs&lt;/strong&gt;, that is not windows programs, there is no simple to detect such, as DOS does simply not support 32 Bit. Any DOS program starts out as a 16 bit program, marked an &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS_MZ_executable&quot; rel=&quot;noreferrer&quot;&gt;MZ header&lt;/a&gt;. 32 Bit usage under DOS is custom made by the program itself and invisible to DOS. Of course, one could search for signatures of common DOS extenders, but that would still only cover part of all 32 Bit programs. Nor would it be decisive, as programs may include 32 bit support for memory access, but not being 32 bit themself.&lt;/p&gt;&#xA;&lt;p&gt;Now, if this is about a &lt;strong&gt;32 bit Windows EXE&lt;/strong&gt; programs. Here, much like with DLL or any other file for Windows containing code, the file starts out with a PE-Header - which in turn starts out with a 16 bit EXE stub able to issue a warning (*1) if started under DOS.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Any detector looking for a (16 Bit) DOS program will find that EXE files as well as DLLs are exactly that, a DOS program.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;After that stub (*2), the PE header contains several sections, foremost the &lt;a href=&quot;https://en.wikipedia.org/wiki/COFF&quot; rel=&quot;noreferrer&quot;&gt;COFF&lt;/a&gt; (Common Object File Format) chunk, which, after it's magic number, contains a machine type, telling what machine the code is intended for. Common values are&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;00000h for 16 bit&lt;/li&gt;&#xA;&lt;li&gt;0014Ch for 32 Bit (Decimal 332 for 386-32)&lt;/li&gt;&#xA;&lt;li&gt;08664h for 64 bit&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is followed by more fields defining other characteristics, including word size and so on. &lt;strong&gt;For all practical purpose a machine type of 0014Ch is the most significant indicator for 32 Bit Windows applications&lt;/strong&gt;. This is followed by an optional PE+ header, denoting different formats for headers in 64 bit versions.&lt;/p&gt;&#xA;&lt;p&gt;Last but not least &lt;strong&gt;Windows DLL&lt;/strong&gt; work exactly like Windows EXE featuring the same PE header.&lt;/p&gt;&#xA;&lt;p&gt;While the PE format is nowadays the most common one, there are some variations. The most common are&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;New Executable (NE), introduced by Windows 1.0 / MSDOS, 16 bit&lt;/li&gt;&#xA;&lt;li&gt;Linear Executable (LE), for mixed 16/32 bit in Windows 9x, OS2 and some DOS extenders&lt;/li&gt;&#xA;&lt;li&gt;Linear Executables for OS2 2.0 (LX)&lt;/li&gt;&#xA;&lt;li&gt;MP used with &lt;a href=&quot;https://en.wikipedia.org/wiki/Phar_Lap_(company)&quot; rel=&quot;noreferrer&quot;&gt;Phar Lap&lt;/a&gt; DOS extender.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The well known &lt;em&gt;&amp;quot;This program cannot be run in DOS mode&amp;quot;&lt;/em&gt; message.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Consisting of the DOS header, a pointer to the PE header and the stub itself. Ignoring the pointer is a common error of programs trying to decode a PE format.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-14T17:15:07.073" LastActivityDate="2021-02-14T17:15:07.073" CommentCount="22" ContentLicense="CC BY-SA 4.0" />
  <row Id="17995" PostTypeId="1" CreationDate="2021-02-14T21:17:42.310" Score="3" ViewCount="364" Body="&lt;p&gt;In mid-1990s, dial-up access was already common, but its speeds were still low (like 14-28 kbps, 56 kbps only in the late 1990s), and I don't know if there were any popular solutions to share dial-up access across LAN. On the other hand, T1 lines (1.5 Mbps) were already common, but price of those was still too high for small businesses.&lt;/p&gt;&#xA;&lt;p&gt;What was the most common method of internet access in US for customers who needed more than dial-up, but couldn't (or wouldn't) afford T1 line? I know that ISDN (64K or 128K) is an obvious answer - but how common was ISDN use in real life? I personally don't know anyone who used ISDN in the office back then. I also know that ISDN was actually popular back then in Europe.&lt;/p&gt;&#xA;" OwnerUserId="5207" LastEditorUserId="15334" LastEditDate="2021-02-15T15:08:01.010" LastActivityDate="2021-02-15T19:16:13.187" Title="What was the most common method of internet access for small offices in 1990s in USA?" Tags="&lt;history&gt;&lt;internet&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17996" PostTypeId="2" ParentId="17995" CreationDate="2021-02-14T21:39:36.533" Score="4" Body="&lt;p&gt;There was a rather unusual ISDN cluster in and around Seattle, but in general you're right, it was dial-up at 56k. In fact, I know of many small business using dial-up as late as 2010 - even in some large cities like Denver.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-02-14T21:39:36.533" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17997" PostTypeId="2" ParentId="17995" CreationDate="2021-02-14T21:48:43.573" Score="5" Body="&lt;p&gt;In most places, it was dial-up until ADSL. I had two customers with ISDN for a while, both replaced with ADSL when available. One was sometime in the late 90s until 2003, the other roughly 2003-2004. I had one with a fractional T1 (the other part of the T1 was for actual phone circuits) from ~ 2000 until 2008 - if they had stayed in business longer they probably would have ended up with ADSL or (eventually) FIOS for higher speed at a fraction of the cost.&lt;/p&gt;&#xA;&lt;p&gt;But most were strictly dial-up until ADSL was available. ISDN was comparable to 2+ dial-up lines, but only really made sense if:&lt;/p&gt;&#xA;&lt;p&gt;(a) shared among a &lt;em&gt;few&lt;/em&gt; users (but not a &amp;quot;lot&amp;quot; of users, because then each one didn't get enough bandwidth for themselves) and/or&lt;/p&gt;&#xA;&lt;p&gt;(b) used for hosting remote access to an in-house server, which was the case for one of my customers - ironically, that same customer used a whole bank of modems to dial out to remote equipment, so they were not analog-modem free in any way.&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2021-02-14T23:55:45.773" LastActivityDate="2021-02-14T23:55:45.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17998" PostTypeId="2" ParentId="17963" CreationDate="2021-02-15T00:10:57.713" Score="-1" Body="&lt;p&gt;asteroids?  Was it spacecraft that you could spin, accelerate, slow down, and shoot, while asteroids were approaching?&lt;/p&gt;&#xA;" OwnerUserId="20836" LastActivityDate="2021-02-15T00:10:57.713" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17999" PostTypeId="1" CreationDate="2021-02-15T08:56:55.543" Score="31" ViewCount="7381" Body="&lt;p&gt;I'm mainly interested in 3.5&amp;quot; floppies here, as they're what I have lying around, but other sizes could also be interesting to hear about if anyone has the data.&lt;/p&gt;&#xA;&lt;p&gt;As I understand it, the head rubs against the disk and the disk rubs against the shell/sleeve when in operation. So unlike a CD, for example, surely the surface must wear out over time.&lt;/p&gt;&#xA;&lt;p&gt;I can't find anything that gives any sort of ballpark figure, but obviously they last long enough for nobody to complain about it. Not referring to long-term data integrity while in storage here ─ that's a different matter.&lt;/p&gt;&#xA;&lt;p&gt;I doubt anyone is going to leave a floppy to spin in their garage for however long it takes to answer this question, so I'm also cool with anecdotal evidence. I've never put more than a few hours into a single 3.5&amp;quot; disk before, so I don't have much personal evidence to go off.&lt;/p&gt;&#xA;" OwnerUserId="20841" LastActivityDate="2021-05-08T20:08:00.730" Title="How long can a floppy disk spin for before wearing out?" Tags="&lt;floppy-disk&gt;" AnswerCount="8" CommentCount="12" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18001" PostTypeId="2" ParentId="17999" CreationDate="2021-02-15T09:45:47.837" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://blog.storagecraft.com/data-storage-lifespan/&quot; rel=&quot;nofollow noreferrer&quot;&gt;According to this&lt;/a&gt; the floppy disk can last 3-5 years and up to 20 years. I have lots of floppy diskettes including the ones from an old Macintosh computer but some are already non-working and probably reached their lifespan.&lt;/p&gt;&#xA;&lt;p&gt;Update: I want to mention that this is for the shelf life of a floppy diskette.&lt;/p&gt;&#xA;" OwnerUserId="10220" LastEditorUserId="10220" LastEditDate="2021-02-16T14:14:29.360" LastActivityDate="2021-02-16T14:14:29.360" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18002" PostTypeId="2" ParentId="17999" CreationDate="2021-02-15T10:23:23.923" Score="34" Body="&lt;p&gt;I did some assembly development on a dual-floppy (5 1/4&amp;quot; double-sided) IBM PC 5150 in 1982/83 (PC DOS 1.1 and onward).  Boy, did that exercise the floppy drives!  We wore out floppies all the time and soon settled on using only Verbatim brand as those seemed to last the longest. Even with Verbatim, heavily used diskettes lasted maybe a month before they started showing errors.  In that context, &amp;quot;heavily used&amp;quot; probably meant an hour or two per day.&#xA;Edit: As J-F Fabre and supercat suggested, the assembly work was constant reading/writing of source, temp, object, linker, etc, so it wasn't just disks spinning.  This usage was indeed heavy on directory changes with all the temporary files and renaming.&lt;/p&gt;&#xA;" OwnerUserId="19920" LastEditorUserId="19920" LastEditDate="2021-02-16T00:01:13.387" LastActivityDate="2021-02-16T00:01:13.387" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18003" PostTypeId="2" ParentId="17999" CreationDate="2021-02-15T12:14:43.513" Score="7" Body="&lt;p&gt;Can't really put a figure on it.  I've had the same disk in a portable USB 3.5&amp;quot; drive for 5 years which I used for installing licence keys on numerous machines and uploading to a database.&lt;/p&gt;&#xA;&lt;p&gt;Doesn't this depend on whether the disk is spinning continuously or whether it just starts up, reads/writes the data and then stops.  I seem to remember the 8&amp;quot; ones spin continuously.  Some of the 5.25&amp;quot; spin continuously.  Some have the start stop sequence.  All the 3.5&amp;quot; seem to use the start/stop sequence.&lt;/p&gt;&#xA;&lt;p&gt;On the Commodore and Sirius machines, the disks didn't always sit properly.  Sometimes the centres got a bit mangled.  They were still usable but many people class them as &amp;quot;worn out&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Normally the disks had to be discarded because there was something wrong with the casing.&#xA;For the 5.25 and 8&amp;quot;, the top side would split and sometimes prevent the disk from ejecting.&lt;/p&gt;&#xA;&lt;p&gt;With the 3.5&amp;quot;, the spring mechanism would stop working or get stuck.  It always took ages to remove the little metal bit from the disk drive.&lt;/p&gt;&#xA;&lt;p&gt;The other common problems with 5.25 and 8&amp;quot; were leaving them near a radiator, in the sun, or leaving them to collect dust instead of remembering to put them back in their sleeves.  There was also the odd magnetic screwdriver that caused the disk to behave badly.&lt;/p&gt;&#xA;&lt;p&gt;We've had to discard disks when one of the engineers inserted two 8&amp;quot; disks in the drive and had difficulty getting them out.&lt;/p&gt;&#xA;&lt;p&gt;Very few were discarded because they actually &amp;quot;wore out&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="5311" LastActivityDate="2021-02-15T12:14:43.513" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18004" PostTypeId="1" AcceptedAnswerId="18006" CreationDate="2021-02-15T14:38:34.407" Score="16" ViewCount="2461" Body="&lt;p&gt;I was curious if there was a benchmark test that was available to compare CPUs that are 8-bit. People always like meaningless analysis to justify some decision, and I was curious if there was a historically relevant example.  I found in literature the compression of Shakespeare using &lt;a href=&quot;https://en.wikipedia.org/wiki/LZ77_and_LZ78&quot; rel=&quot;noreferrer&quot;&gt;LZ&lt;/a&gt;, but I wasn't sure if there was a &amp;quot;main stream&amp;quot; comparison from the 8-bit era of computing.&lt;/p&gt;&#xA;" OwnerUserId="15461" LastEditorUserId="15334" LastEditDate="2021-02-15T15:03:27.703" LastActivityDate="2021-02-16T01:34:45.367" Title="Benchmark test that was used to characterize an 8-bit CPU?" Tags="&lt;8-bit-microcomputers&gt;&lt;benchmarking&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18005" PostTypeId="2" ParentId="18004" CreationDate="2021-02-15T15:17:32.067" Score="3" Body="&lt;p&gt;There were several, but the Sieve benchmark is probably one of the most famous.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2021-02-15T15:17:32.067" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18006" PostTypeId="2" ParentId="18004" CreationDate="2021-02-15T16:53:16.207" Score="24" Body="&lt;p&gt;There are three primary benchmarks used during this period. They are not strictly &amp;quot;CPU&amp;quot; tests, but were often used for that purpose.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The almost unknown &lt;a href=&quot;https://en.wikipedia.org/wiki/Rugg/Feldman_benchmarks&quot; rel=&quot;noreferrer&quot;&gt;Rugg/Feldman suite&lt;/a&gt; from 1977. This was a series of seven, and later eight, small BASIC benchmarks. They were clever in that each test was a modification of the previous so you only had to type in one or two lines - important in the terminal era. Although almost unknown in the US by 1980, it went on to have a much longer life in the UK where it became a standard of sorts.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Byte_Sieve&quot; rel=&quot;noreferrer&quot;&gt;Byte Sieve&lt;/a&gt;, likely the most widespread. Intended to be a &lt;em&gt;language&lt;/em&gt; benchmark, it was almost always seen as a machine benchmark using assembler versions of the code. It was seen in many languages on lots of platforms. Unfortunately, collecting data is somewhat difficult because the authors sorted in... an odd way. It was still in use well into the 1980s and likely the one you want to use if you're running a test today.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Creative_Computing_Benchmark&quot; rel=&quot;noreferrer&quot;&gt;Creative Computing test&lt;/a&gt;, another all-BASIC one but generally (and incorrectly!) often used as a machine benchmark.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2021-02-15T16:53:16.207" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18007" PostTypeId="2" ParentId="17995" CreationDate="2021-02-15T19:16:13.187" Score="4" Body="&lt;p&gt;The library where I worked in the 1990s used bonded 64kb/s &lt;a href=&quot;https://en.wikipedia.org/wiki/Asynchronous_Transfer_Mode&quot; rel=&quot;nofollow noreferrer&quot;&gt;ATM&lt;/a&gt; (Asynchronous Transfer Mode) ISDN between sites because ADSL wasn't available in most of locations we didn't have a huge need for bandwidth (each site had between 10-30 Wyse terminals), and TCP/IP wasn't needed.  It worked fine until there was a need for Internet, at which point the non-terminals began eating all the bandwidth as QoS wasn't available on the switches at the time.&lt;/p&gt;&#xA;&lt;p&gt;Because ATM uses virtual circuits, it was really annoying when any physical connection went down because the physical connections had to be re-established and then the bonded virtual circuit, which could often take a couple of minutes.&lt;/p&gt;&#xA;" OwnerUserId="7497" LastActivityDate="2021-02-15T19:16:13.187" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18008" PostTypeId="2" ParentId="18004" CreationDate="2021-02-15T19:48:44.360" Score="5" Body="&lt;p&gt;The circa-1981 Byte Sieve benchmark may have originally been conceived as a programming language benchmark.  But the algorithm consisted of such a simple set of intrinsic basic operations (adds, compares, indexed or calculated address load/stores, not much more) that it could easily be hand-coded or hand-translated to 8-bit ISA assembly language, and thus used to compare 8-bit processor system performance doing such basic ops.&lt;/p&gt;&#xA;&lt;p&gt;(* but with current 32/64-bit multi-issue and multi-level-cached processors, hand-coding may or may not be as comparable across ISAs and implementations.)&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2021-02-15T19:48:44.360" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18009" PostTypeId="2" ParentId="17999" CreationDate="2021-02-15T20:18:36.410" Score="30" Body="&lt;p&gt;My 1980 edition of the Apple II DOS manual mentions that, for a 5.25&amp;quot; disk:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;With reasonable care a diskette will give you an average life of 40 hours——which is a lot, when you consider the few seconds it takes to LOAD most programs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is no source for where they got that figure from.&lt;/p&gt;&#xA;" OwnerUserId="3379" LastActivityDate="2021-02-15T20:18:36.410" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="18010" PostTypeId="2" ParentId="17999" CreationDate="2021-02-15T20:36:57.140" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;As I understand it, the head rubs against the disk and the disk rubs&#xA;against the shell/sleeve when in operation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Correct. But the head is only rubbing against the disk when data are being transferred (either reading or writing).&lt;/p&gt;&#xA;&lt;p&gt;On an 8&amp;quot; or early 5¼&amp;quot; drive the read/write head (or heads on a dual-sided drive) is only pushed against the disk by a head load solenoid when data are being transferred. When data aren't being transferred the heads rest away from the disk.&lt;/p&gt;&#xA;&lt;p&gt;On a late 5¼&amp;quot; or any 3½&amp;quot; drive the heads are permanently loaded, saving the cost and space of a head load solenoid, but the drive motor only operates when data are being transferred. When data aren't being transferred the heads rest on the stationary disk.&lt;/p&gt;&#xA;&lt;p&gt;I used floppies for data storage with a CP/M system for several years and don't recall having any problems with floppy wear. (It did have a hard disk for OS/program storage.)&lt;/p&gt;&#xA;" OwnerUserId="9177" LastEditorUserId="9177" LastEditDate="2021-02-17T09:35:06.810" LastActivityDate="2021-02-17T09:35:06.810" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18011" PostTypeId="2" ParentId="17999" CreationDate="2021-02-15T21:37:17.073" Score="54" Body="&lt;p&gt;Anecdotal evidence (*1)&lt;/p&gt;&#xA;&lt;p&gt;We had a bank as customer with branch offices all over the state. These were the 70s, the final years of batch only, although, already using remote batch with local data acquisition and storage. In this case all daily bookings were collected on 8 inch floppies (well, one was enough for a days work). Some when during the late evening the main data center called each branch and requested all batched data entry. It got transferred into local spool and processed. All output, most notably all printouts from jobs and such requested for branch usage or customers, were spooled into transmission pools. Later, during early morning the branch office was called again and all data transferred, either for direkt output (print) or again locally spooled onto floppy disk for printout as soon as the clerks started their shift.&lt;/p&gt;&#xA;&lt;p&gt;So far much like early batch without moving punch cards and print outs in return around the state or later remote batch with punch card reader and printers at each branch office. Except that late stage offered input on keyboard and CRT with nice forms offering support for correct entry and prevalidation against whatever rules there were for account numbers and alike.&lt;/p&gt;&#xA;&lt;p&gt;At one point one branch office reported transmission errors. Batch data was incorrect and rejected. Service man went to site, but couldn't find anything, all was working properly, including the drives. In the following weeks an increasing error rate was reported. Each and every time the system was checked and found working flawless.&lt;/p&gt;&#xA;&lt;p&gt;The situation escalated rather quick. At some point not only parts, like floppy drives, but the whole remote setup was replaced by factory new components. By that time customer - for sure not a small one - already threatened cancelling all our contracts and remove our hardware from all of their offices including the data center - mind you, a rather big customers with multiple CPUs alone in the data center for that state.&lt;/p&gt;&#xA;&lt;p&gt;Amids all of that trouble, one day the field engineer was once again at site. By chance he had to remove a floppy from the machine. Something usually never happened, as by customer process, all data had to be removed before non-bank-staff could do anything with any of their machines.&lt;/p&gt;&#xA;&lt;p&gt;Guess what, &lt;strong&gt;one could see thru the floppy&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Not just badly worn, but the magnetic coating was outright polished away, all the way to the carrier film.&lt;/p&gt;&#xA;&lt;p&gt;Of course the story was now revealed fast. Each of the clerks had his own floppy, and this guy had used this very same disk since the day he was trained on the new system about a year ago. No need to say that some education happened. In turn the bank ofc had to pay for all the effort - and as well kept a good customer for years to come. The floppy was kept as kind of a trophy and shown to new apprentice and non believers:))&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;So, I give you several hundred hours of use&lt;/strong&gt; before a late 1970s 8&amp;quot; floppy quits.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The most amazing factor here was that the drive was still able to read &lt;em&gt;some&lt;/em&gt; data, althogh almost no magnetic surface was visible anymore.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - I have a strong feeling I told the story already on RC.SE, but couldn't find it. Maybe it was in comments.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="20851" LastEditDate="2021-02-16T09:57:32.570" LastActivityDate="2021-02-16T09:57:32.570" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18012" PostTypeId="2" ParentId="18004" CreationDate="2021-02-16T01:20:14.310" Score="8" Body="&lt;p&gt;For assessing floating-point performance, there was the Savage benchmark. It was proposed by Bill Savage of Microfloat in Houston, Texas, and published in the Ray Duncan column &amp;quot;16-bit Software Toolbox&amp;quot; in &lt;em&gt;Dr. Dobb’s Journal&lt;/em&gt;, Number 83, September 1983, p. 120. A scan of the entire Dr. Dobb's volume can be retrieved &lt;a href=&quot;https://archive.org/details/dr_dobbs_journal_vol_08&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;; the relevant article starts at page 561 of the PDF file.&lt;/p&gt;&#xA;&lt;p&gt;The benchmark assigns &lt;code&gt;a=1&lt;/code&gt; and then times 2500 repetitions of &lt;code&gt;a=tan(atan(exp(ln(sqrt(a*a)))))+1&lt;/code&gt;. With the software implementations of floating-point arithmetic available on 8-bit machines this typically took several minutes to complete, if memory serves.&lt;/p&gt;&#xA;" OwnerUserId="823" LastEditorUserId="823" LastEditDate="2021-02-16T01:34:45.367" LastActivityDate="2021-02-16T01:34:45.367" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18013" PostTypeId="2" ParentId="3237" CreationDate="2021-02-16T02:08:13.437" Score="2" Body="&lt;p&gt;Did you try opening the drives up and giving them a good cleaning with isopropyl alcohol first? Sometimes the problems with old floppy drives is mechanical. Their step motors get stuck, or the lube on the screw drive dries out and the heads can't move. Make sure the heads are able to move with a little nudging. Clean them gently with a cotton swab.  (Don't use store brand isopropyl alcohol, those leave a residue. Use electronics grade isopropyl alcohol.)  Lube the screw drive and shafts with a little bit of lithium grease. These might solve the problem if it is due to a mechanical reason. If the drive still doesn't work, check the electrolytic capacitors. They tend to dry out over time. There are various videos on youtube about replacing electrolytic capacitors on old floppy drives.&lt;/p&gt;&#xA;" OwnerUserId="20849" LastActivityDate="2021-02-16T02:08:13.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18014" PostTypeId="2" ParentId="17999" CreationDate="2021-02-16T04:51:36.963" Score="6" Body="&lt;p&gt;I never trusted one for longer than about half a semester. I worked in a university computer lab back when 3.5 inch floppies were how students saved &lt;em&gt;everything&lt;/em&gt;. Each student had 10 MB of &amp;quot;private cloud&amp;quot; storage, but no one except computer majors trusted it.&lt;/p&gt;&#xA;&lt;p&gt;Around the end of each semester we did a lot of helping people recover files, and got a lot of stories about how, &amp;quot;I've been using this disk all semester and it has always been very reliable.&amp;quot; Of course, that's with the disk not being very cared for, always thrown in a backpack and often exposed to the Arizona heat, and saving after every sentence &amp;quot;just to be safe.&amp;quot; I've had them last several years with moderate use and careful storage.&lt;/p&gt;&#xA;" OwnerUserId="20850" LastActivityDate="2021-02-16T04:51:36.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18015" PostTypeId="1" AcceptedAnswerId="18016" CreationDate="2021-02-16T09:51:11.000" Score="7" ViewCount="622" Body="&lt;p&gt;I am using the following code to trap left/right/middle mouse button and mouse row/column in Microsoft QuickBasic 4.5 and I need a way to detect the mouse wheel. I have looked at Ralf Brown's Interrupt List without luck.&lt;/p&gt;&#xA;&lt;p&gt;The code requires the library QB.QLB.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DECLARE SUB Mouse.Function (Var1!, Var2!)&#xA;&#xA;DIM SHARED MouseX AS INTEGER, MouseY AS INTEGER&#xA;&#xA;TYPE RegTypeX&#xA;  AX AS INTEGER&#xA;  BX AS INTEGER&#xA;  CX AS INTEGER&#xA;  DX AS INTEGER&#xA;  BP AS INTEGER&#xA;  SI AS INTEGER&#xA;  DI AS INTEGER&#xA;  Flags AS INTEGER&#xA;  DS AS INTEGER&#xA;  ES AS INTEGER&#xA;END TYPE&#xA;&#xA;COMMON SHARED InregsX AS RegTypeX&#xA;COMMON SHARED OutregsX AS RegTypeX&#xA;&#xA;DECLARE SUB InterruptX (N AS INTEGER, I AS RegTypeX, O AS RegTypeX)&#xA;&#xA; CALL Mouse.Function(0, 0) ' init mouse&#xA; CALL Mouse.Function(1, 0) ' show mouse&#xA; DO&#xA;&#xA; IF LEN(INKEY$) THEN&#xA;    CALL Mouse.Function(2, 0) ' hide mouse&#xA;    EXIT DO&#xA; END IF&#xA;&#xA;  CALL Mouse.Function(3, 0)&#xA;&#xA; Var2 = INT((OutregsX.CX - 1) / 8 + 1)&#xA; Var3 = INT((OutregsX.DX - 1) / 8 + 1)&#xA;&#xA; IF Var3 &amp;lt;&amp;gt; Mouse.Row OR Var2 &amp;lt;&amp;gt; Mouse.Column THEN&#xA;    CALL Mouse.Function(2, 0) ' hide mouse&#xA;    Mouse.Row = Var3&#xA;    Mouse.Column = Var2&#xA;    PRINT Mouse.Row, Mouse.Column&#xA;    CALL Mouse.Function(1, 0) ' show mouse&#xA; END IF&#xA;&#xA; Mouse.Button = False&#xA; CALL Mouse.Function(5, 0)&#xA; IF (OutregsX.AX AND 1) = 1 THEN&#xA;    IF OutregsX.BX &amp;gt; False THEN&#xA;       Mouse.Button = -1&#xA;       PRINT &amp;quot;Left-Click&amp;quot;&#xA;    END IF&#xA; END IF&#xA; Mouse.Button2 = False&#xA; CALL Mouse.Function(5, 1)&#xA; IF (OutregsX.AX AND 2) = 2 THEN&#xA;    IF OutregsX.BX &amp;gt; False THEN&#xA;       Mouse.Button2 = -1&#xA;       PRINT &amp;quot;Right-Click&amp;quot;&#xA;    END IF&#xA; END IF&#xA; Mouse.Button3 = False&#xA; CALL Mouse.Function(5, 2)&#xA; IF (OutregsX.AX AND 4) = 4 THEN&#xA;    IF OutregsX.BX &amp;gt; False THEN&#xA;       Mouse.Button3 = -1&#xA;       PRINT &amp;quot;Middle-Click&amp;quot;&#xA;    END IF&#xA; END IF&#xA; LOOP&#xA; END&#xA;&#xA;SUB Mouse.Function (Var1, Var2)&#xA;   InregsX.AX = Var1&#xA;   InregsX.BX = Var2&#xA;   CALL InterruptX(&amp;amp;H33, InregsX, OutregsX)&#xA;END SUB&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Any ideas?&lt;/p&gt;&#xA;&lt;p&gt;I recently tried the following code to detect mousewheel in dosbox:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CALL Mouse.Function(5, -1)&#xA;&#xA;Mouse.Wheel = 0&#xA;' check mousewheel in BX&#xA;Wheel = OutregsX.BX&#xA;IF Wheel THEN&#xA;   Mouse.Wheel = -1&#xA;   PRINT &amp;quot;MouseWheel&amp;quot;&#xA;   CALL Mouse.Function(0, 0)&#xA;END IF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;this does not return anything.&lt;/p&gt;&#xA;" OwnerUserId="20712" LastEditorUserId="20712" LastEditDate="2021-02-20T07:42:07.217" LastActivityDate="2021-02-22T06:45:59.267" Title="How can I detect mouse wheel movement in QuickBasic?" Tags="&lt;basic&gt;&lt;mouse&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18016" PostTypeId="2" ParentId="18015" CreationDate="2021-02-16T11:09:41.153" Score="12" Body="&lt;p&gt;By the time mice wheels became widely available (starting with the Microsoft IntelliMouse; the Genius EasyScroll was earlier, but we can ignore that here), support for DOS was a secondary concern, and the “standard” DOS drivers and tools never supported them. As a result, there are limited avenues for wheel support in DOS itself, and DOS emulation environments (such as Windows’ NTVDM, or even DOSBox) usually don’t support them.&lt;/p&gt;&#xA;&lt;p&gt;The only documented API I’m aware of for wheel mice in DOS is &lt;a href=&quot;https://sourceforge.net/p/cutemouse/trunk/ci/master/tree/cutemouse/WHEELAPI.TXT&quot; rel=&quot;nofollow noreferrer&quot;&gt;that provided&lt;/a&gt; by &lt;a href=&quot;http://cutemouse.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CuteMouse&lt;/a&gt;. This works fine with CuteMouse running directly on the hardware, with a PS/2 wheel mouse, or in an environment which will emulate the appropriate PS/2 messages (for example, &lt;a href=&quot;https://dosbox-x.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOSBox-X&lt;/a&gt; with mouse wheel movement remapping disabled, and CuteMouse running).&lt;/p&gt;&#xA;&lt;p&gt;This adds function 0x11 to interrupt 0x33 to check for wheel support: this will return 0x574D in &lt;code&gt;AX&lt;/code&gt; and bit 0 set to 1 in &lt;code&gt;CX&lt;/code&gt; is a wheel is supported. Existing functions are changed as follows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;functions 0 and 0x21 clear the wheel movement counter;&lt;/li&gt;&#xA;&lt;li&gt;function 3 (get cursor position) returns the accumulated wheel movement in &lt;code&gt;BH&lt;/code&gt;, as an 8-bit counter (counting since the last call to function 3, and functions 5 or 6 with &lt;code&gt;BX&lt;/code&gt; set to -1);&lt;/li&gt;&#xA;&lt;li&gt;function 5 (get button press) recognises &lt;code&gt;BX&lt;/code&gt; value -1 to query the wheel, returning the wheel movement in &lt;code&gt;AH&lt;/code&gt; as an 8-bit signed counter, and when querying the wheel specifically, in &lt;code&gt;BX&lt;/code&gt; as a 16-bit signed counter, with &lt;code&gt;CX&lt;/code&gt; and &lt;code&gt;DX&lt;/code&gt; giving the column and row where the wheel was last moved (wheel movement accumulates as for function 3);&lt;/li&gt;&#xA;&lt;li&gt;function 6 (get button release) is altered in the same way as function 5.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Functions 0xC and 0x14 can also be used to register a callback for wheel movement; see the CuteMouse documentation for details.&lt;/p&gt;&#xA;&lt;p&gt;Mouse wheel clicks are represented as middle-button clicks.&lt;/p&gt;&#xA;&lt;p&gt;In Quick BASIC, you’d use something like this to detect the wheel:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Mouse.Function(&amp;amp;H11, 0)&#xA;IF (OutregsX.AX = &amp;amp;H574D) AND ((OutregsX.CX AND 1) = 1) THEN&#xA;  PRINT &amp;quot;Mouse wheel present and supported&amp;quot;&#xA;ELSE&#xA;  PRINT &amp;quot;Mouse wheel not present and/or not supported&amp;quot;&#xA;END IF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If a wheel is present and supported, you’d then use&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CALL Mouse.Function(5, -1)&#xA;IF OutregsX.BX &amp;gt; 0 THEN&#xA;  PRINT &amp;quot;Wheel moved down&amp;quot;&#xA;ELSE IF OutregsX.BX &amp;lt; 0 THEN&#xA;  PRINT &amp;quot;Wheel moved up&amp;quot;&#xA;END IF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;At this point, the absolute value of &lt;code&gt;BX&lt;/code&gt; gives the amount of wheel movement.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-22T06:45:59.267" LastActivityDate="2021-02-22T06:45:59.267" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="18017" PostTypeId="1" AcceptedAnswerId="18018" CreationDate="2021-02-16T14:25:06.537" Score="4" ViewCount="631" Body="&lt;p&gt;I know some companies like Advanced Memory Systems designed mice for the BBC Micro like the AMX mouse so I was wondering if the original BBC micro came with its own mouse. I'm trying to compile a list of compatible mice for my &amp;quot;&lt;a href=&quot;https://www.tinkerboy.xyz/product/tinkerboy-amx-mouse-to-usb-converter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;AMX Mouse To USB Converter&lt;/a&gt;&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="10220" LastEditorUserId="79" LastEditDate="2021-02-16T15:37:34.143" LastActivityDate="2021-02-20T16:02:54.070" Title="Did the original BBC Micro computer come with a mouse?" Tags="&lt;bbc-micro&gt;&lt;mouse&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18018" PostTypeId="2" ParentId="18017" CreationDate="2021-02-16T14:32:35.567" Score="11" Body="&lt;p&gt;No, the original BBC Micro came with no peripherals at all. It came in a box with room for the computer itself:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fniRk.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fniRk.jpg&quot; alt=&quot;BBC Micro in its polystyrene insert&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;and a cable and introductory material:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2ICa0.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2ICa0.jpg&quot; alt=&quot;introductory material in polystyrene&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The cut-out in the lower part that seems to be unused above is intended for the power cord, which you can see hanging from the computer. (&lt;a href=&quot;http://wouter.bbcmicro.net/bbc/hardware/bbc_micro/box/index.html&quot; rel=&quot;noreferrer&quot;&gt;Image source&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/users/4335/brian-h&quot;&gt;Brian H&lt;/a&gt; pointed out, &lt;a href=&quot;http://chrisacorns.computinghistory.org.uk/Computers/Master512.html&quot; rel=&quot;noreferrer&quot;&gt;the BBC Master 512&lt;/a&gt; shipped in 1987 with an Acorn mouse, for use with the GEM desktop.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-16T17:26:36.313" LastActivityDate="2021-02-16T17:26:36.313" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="18019" PostTypeId="2" ParentId="427" CreationDate="2021-02-16T15:06:51.880" Score="3" Body="&lt;p&gt;Another alternative is to use my &lt;a href=&quot;https://www.tinkerboy.xyz/product/tinkerboy-usb-mouse-to-amiga-adapter-converter-true-usb/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga USB Mouse Adapter&lt;/a&gt; that I'm selling. It`s also a true usb adapter so you can use any wired or wireless USB mouse.&lt;/p&gt;&#xA;" OwnerUserId="10220" LastEditorUserId="10220" LastEditDate="2021-02-17T01:01:25.633" LastActivityDate="2021-02-17T01:01:25.633" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18020" PostTypeId="1" CreationDate="2021-02-16T17:41:53.013" Score="-1" ViewCount="322" Body="&lt;p&gt;In approximately 1995, or 1996, at the &lt;em&gt;very latest&lt;/em&gt; 1997, I was a kid who was obsessed with cutting-edge technical gadgets. I carefully read every issue of this &amp;quot;Teknikmagasinet&amp;quot; catalogue, which was a store which sold all kinds of technical gadgets and fun stuff.&lt;/p&gt;&#xA;&lt;p&gt;I remember spotting the new page with &amp;quot;data banks&amp;quot;. One of them, the cheapest, became the object which I obsessed over. It claimed to, among other features, be able to store three (3!) phone numbers + names/addresses items. &lt;em&gt;Three!&lt;/em&gt; I had zero practical use for even such a small address book, as I had memorized the telephone number of the only person I ever called, but something about this thing really intrigued me. It seemed like I was about to get this awesome portable computer and I'd be able to query it questions about life and make it spit out information and use it for secret missions and it'd change everything!! (In my mind.)&lt;/p&gt;&#xA;&lt;p&gt;When I got to the store, I remember them saying that the model had stopped being sold, and instead I got a better one for the same price. The one I ended up getting could (unless I completely misremember) store a whole &lt;strong&gt;15&lt;/strong&gt; different items! Wow! What an upgrade!&lt;/p&gt;&#xA;&lt;p&gt;I'm 99% sure that the one I did get was Casio branded, and I'm 98% sure that the one advertised was as well. I would've showed you a scan of the catalogue page if only I had it still. I even asked the store &amp;quot;in later years&amp;quot; if they could provide me their old catalogues, but sadly, they wouldn't. Here is a photo of one which &lt;em&gt;may&lt;/em&gt; be the one I got, or at least looks extremely similar according to my memory: &lt;a href=&quot;https://i.stack.imgur.com/CULbu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CULbu.jpg&quot; alt=&quot;Casio device&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Was this just some kind of misprint/mistake? Or was such a ridiculously limited data bank ever sold in the mid-1990s? Only three &amp;quot;rows&amp;quot; of stored data seems like 1970s-era digital storage capabilities, but I guess the sheer size of the device made this impressive even in the mid-1990s for the low price?&lt;/p&gt;&#xA;&lt;p&gt;It's possible that they made some kind of typo or had misunderstood the capabilities of the device. Maybe they meant &amp;quot;three different &lt;em&gt;kinds&lt;/em&gt;&amp;quot; or something. Even 15 &amp;quot;rows&amp;quot; frankly feels a bit low for post-1995 era, seeing as it was one of the main features of the thing.&lt;/p&gt;&#xA;&lt;p&gt;I've been wondering about this ever since then. It seems silly, but then again, the entire product wasn't really used for anything &amp;quot;real&amp;quot; in practice. I just found it so cool that it existed and that I was able to own one.&lt;/p&gt;&#xA;" OwnerUserId="20856" LastEditorUserId="15334" LastEditDate="2021-02-17T11:46:09.897" LastActivityDate="2021-02-17T11:46:09.897" Title="Was this a typo/mistake, or did a mid-1990s cheap &quot;data bank&quot; for personal use really only hold THREE addresses + phone numbers?" Tags="&lt;history&gt;&lt;pda&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2021-02-17T00:02:05.563" ContentLicense="CC BY-SA 4.0" />
  <row Id="18021" PostTypeId="2" ParentId="18020" CreationDate="2021-02-16T18:16:09.267" Score="10" Body="&lt;p&gt;It's hard to be completely certain without knowing a model number, but it strikes me as &lt;em&gt;extremely&lt;/em&gt; unlikely.&lt;/p&gt;&#xA;&lt;p&gt;Casio's first data bank device (of which I'm aware, anyway) was the PF-3000, which they started selling around 1983. At least as I read things, this is saying a realistic capacity is names and numbers for around 50-60 people (with a theoretical maximum of 253 if the names and numbers were really short):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7KTnT.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7KTnT.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;By the mid-1990s, they had quite a few such organizers, including a separate line of organizers for kids. As of 1994, I believe the bottom end of the kids line was the C-100, which had enough space for about 90 records:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://old-organizers.com/Categories/Cover_Casio.htm&quot; rel=&quot;noreferrer&quot;&gt;http://old-organizers.com/Categories/Cover_Casio.htm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Looking through the entries on that site, I can't find any that seems to be limited to fewer than the ~90 records of the C-100.&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2021-02-16T18:59:17.043" LastActivityDate="2021-02-16T18:59:17.043" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18022" PostTypeId="2" ParentId="17999" CreationDate="2021-02-16T22:04:36.037" Score="7" Body="&lt;p&gt;In the 80's, 360K 5.25&amp;quot; disks for PC were highly reliable. I did not have a hard drive, and compiling C and COBOL would make them work hard. I used them mostly without problems for months or longer. Verbatim were the most reliable. Some people in this site have posted a lifespan of 40 hours. It's hard to tell, but I would say that it was longer that. I used them all semester long, and I rarely had any problems.&lt;/p&gt;&#xA;&lt;p&gt;In the 90s, 3.5&amp;quot; disks, with a capacity of 1.44 MB, were a very different story. No matter the brand, they seemed to go bad even when used lightly. That was surprising, considering the hard shell protection, and the cool sliding cover. My theory was that the higher density made them more sensitive. It's possible that small misalignments in one machine could made the disk unreadable for other computers.&lt;/p&gt;&#xA;&lt;p&gt;I made sure to keep duplicates of 3.5&amp;quot; drives, or save files to two disks, just in case one failed.&lt;/p&gt;&#xA;" OwnerUserId="20858" LastActivityDate="2021-02-16T22:04:36.037" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18023" PostTypeId="1" AcceptedAnswerId="18024" CreationDate="2021-02-17T12:30:41.923" Score="4" ViewCount="209" Body="&lt;p&gt;The escape sequences &lt;code&gt;ESC # 3&lt;/code&gt; and &lt;code&gt;ESC # 4&lt;/code&gt; (DECDHL) are meant to be used on pairs on adjacent lines to request double height lines. As an example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;echo -e &amp;quot;\e#3DOUBLE HEIGHT LINE\n\e#4DOUBLE HEIGHT LINE&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now different terminal emulators behave differently when only a single line is set to double height. xterm happily displays the corresponding half of the double height characters, while konsole displays the whole double height characters.&lt;/p&gt;&#xA;&lt;p&gt;What did real VTxxx do?&lt;/p&gt;&#xA;" OwnerUserId="740" LastActivityDate="2021-02-17T15:30:41.070" Title="Behavior of DECDHL on single lines" Tags="&lt;terminal&gt;&lt;dec&gt;&lt;vt100&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18024" PostTypeId="2" ParentId="18023" CreationDate="2021-02-17T12:59:23.370" Score="5" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What did real VTxxx do?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Certainly the VT220 does the same as what xterm does. It just shows the top or bottom half of the character. I don't recall this behaviour depending on the emulation mode.&lt;/p&gt;&#xA;&lt;p&gt;I'm assuming the other VT's do the same as the VT220. It'd make for much simpler implementation.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-02-17T15:30:41.070" LastActivityDate="2021-02-17T15:30:41.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18025" PostTypeId="2" ParentId="16268" CreationDate="2021-02-18T00:16:33.433" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Is this a reparable problem&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Generally, virtually all of broken computer problems are repairable, the right question is how much time, money, and other resources it will take to enact the repairs, and whether the benefits of the repaired computer worth the cost. If all you need is to pull some data - you're better off simply pulling the drive out of the machine, putting it into enclosure/dock and connecting it to a working machine.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and what might be the cause?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Is the red light that comes on supposed to be a power-on indicator? I assume the machine makes no noise of any sort? See the comment by @supercat - one of the possibilities is indeed electrolytic capacitor failure. I also have a couple of a bit older ThinkPads that similarly don't turn on, except IIRC in their case no light comes on at all, and the culprit is faulty DC-DC converters. Those are harder to replace, but not impossible either. The main trick is figuring out which component(s) is(are) faulty, and I'm afraid I don't know enough about hardware to provide a some kind of universal guide as an answer.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If I can't get the machine to boot is it possible to take out the drive, put it in an enclosure, and access the files that way?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Absolutely. The drives used in those machines are likely older 2.5&amp;quot; IDE drives, so you'll need an appropriate adapter/enclosure. IDE adapter would be different from more modern SATA, and you'll need one designed specifically for 2.5&amp;quot; IDE drives as it is different from 3.5&amp;quot; IDE connector - 3.5&amp;quot; IDE has 40 pins and a separate power connector, whereas 2.5&amp;quot; IDE uses 44-pin connector with smaller pitch that also provides power to the drive. I like &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B07G57971Y&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one from Yootop&lt;/a&gt; for portability, but you might want to get something like &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B01NAUIA6G&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;this universal Unitek adapter&lt;/a&gt; for a bit more future-proofing.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Could I put the drive in an enclosure and link it to a more recent computer (say a Dell) and run it from there, bypassing the PW?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Most likely - AFAIK until Vista Windows did not provide built-in full-disk encryption (though NTFS did support encrypted files/directories since Windows 2000 - feature called Encrypting File System or  EFS), so unless someone ever encrypted some files using EFS or used third-party tools like TrueCrypt you should be able to connect the drive to virtually any modern system, be it a Windows, Linux, macOS, BSD, or even a Haiku machine and get the data off the drive. In fact, there are even some tools that may allow you to reset the user passwords in the OS on the drive, should you wish to attempt the repairs on the machine and put the drive back in. And no, unless the drive is encrypted (in which case you'll need to have the password or other key required to decrypt it) you won't ever need to know the original administrator password on that machine to access any unencrypted files on that drive.&lt;/p&gt;&#xA;" OwnerUserId="17748" LastEditorUserId="17748" LastEditDate="2021-02-18T00:23:36.920" LastActivityDate="2021-02-18T00:23:36.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18026" PostTypeId="1" CreationDate="2021-02-18T09:01:47.823" Score="5" ViewCount="363" Body="&lt;p&gt;Back in the 50s and 60s people had:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;random access, read-write memories like Magnetic Cores.&lt;/li&gt;&#xA;&lt;li&gt;sequential access, read-write memories like Delay Lines and Magnetic Tapes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;sequential access, write once, read-only memories like Punch Card and Perforated Tape, which are not called ROM traditionally.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So what about &lt;strong&gt;random access, read-only&lt;/strong&gt; memories which are called ROM now? Which kind of random access, read-only memories,  say Core Rope Memory, Mask ROM, PROM, TROS, CROS..., was cheapest &lt;strong&gt;per kbit&lt;/strong&gt; before Year 1970? And which kind has the simplest decoding/addressing mechanism?&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;PS:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2103/historical-price-of-rom&quot;&gt;Historical price of ROM&lt;/a&gt; talks about solid state ROM, which is totally different a question.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;By saying random/sequential, there lies Direct-access storage device (DASD, like Magnetic Drums and Data Cells) in between, which has fixed address and variable access time, while this question talks about ROMs without delay of seeking.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="17812" LastEditorUserId="17812" LastEditDate="2021-02-18T13:30:33.453" LastActivityDate="2021-02-20T16:09:48.007" Title="Cheapest type of Read-Only Memory allowing Random access before Year 1970" Tags="&lt;history&gt;&lt;memory&gt;&lt;rom&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18027" PostTypeId="1" AcceptedAnswerId="18029" CreationDate="2021-02-18T19:03:28.637" Score="2" ViewCount="139" Body="&lt;p&gt;I use Linux Bassilisk II&#xA;I setup unix path&#xA;but how I can read file from it?&#xA;It not appear in my desktop&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eeC6c.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eeC6c.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;My system is in .sit file, how I can read file?&lt;/p&gt;&#xA;" OwnerUserId="20869" LastActivityDate="2021-02-22T15:56:50.090" Title="Basilisk II how mount unix filesystem" Tags="&lt;emulation&gt;&lt;apple-macintosh&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18028" PostTypeId="2" ParentId="18026" CreationDate="2021-02-18T20:05:04.693" Score="7" Body="&lt;p&gt;The question seams to imply that there was a need for a ROM in the same sense as it was used in the 1970s and 80s, but why wasting address space and money on storage that could only be used for one purpose?&lt;/p&gt;&#xA;&lt;p&gt;Machines, way passed the mentioned cut of date of 1970, used magnetic media (drums) and magnetic core for RAM. Both are persistent storage, this means information stored there will be present even after a power cycle. All a CPU needed to do is starting to operate from that memory. Data processing and scientific computing relied on having RAM for changing tasks, while process automation as well was happy with loading core once a while and after that simply used it ROM like - some machines had even ways to switch of writing of (new) data, essentially turning core into ROM.&lt;/p&gt;&#xA;&lt;p&gt;Long story short: &lt;strong&gt;Prior to the 1970s there was no need for ROMs in the sense we know today&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Applications of ROM like storage was, if at all, needed in micro program storage, but solutions here were rather specific to each CPU manufacturer and machine, like &lt;a href=&quot;https://www.computerhistory.org/revolution/mainframe-computers/7/164/578&quot; rel=&quot;noreferrer&quot;&gt;CCROS&lt;/a&gt;, &lt;a href=&quot;http://www.righto.com/2019/11/tros-how-ibm-mainframes-stored.html&quot; rel=&quot;noreferrer&quot;&gt;TROS&lt;/a&gt; and similar (*1,*2). Also, noone really wanted ROMS. In fact, this is  the very reason why IBM developed the floppy drive: to load the microcode from a persistent media to micro code storage. That way they could use RAM,but kept the content static - and change it when needed.&lt;/p&gt;&#xA;&lt;p&gt;All ROM like solutions of the time were special to type and hand made.&lt;/p&gt;&#xA;&lt;p&gt;ROMs as we know now grew out of decoders. Fixed function devices translating information - like turning a key press into ASCII. A job that for early terminals was done literally with piles of diodes (*3). But even this use did only come up after 1970. As only then the need for high volume production, i.e. more than a few dozend, became a thing.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;was cheapest per kbit before Year 1970?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Since there were no common, interchangeable solution before 1970, but only partitial solutions specific to each device, comparable prices can not be given.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - I remember a TROSS like system using modified punch cards instead of special mylar sheets. While not as dense, they had the advantage that ROM content could created by using a standard key punch. Thus patching a ROM was simply DUPing the card until the change, enter the new value and DUPing again until the card was done. ROM changes within minutes, needing only equipment available in any computing center - beside the special cards that is. Even more, a new ROM stack could be delivered as tape and outputted by using a standard card punch.&lt;/p&gt;&#xA;&lt;p&gt;Depending on one's POV, this may qualify as 'cheapest', still, it's a low volume hand made thing.&lt;/p&gt;&#xA;&lt;p&gt;*2 - &lt;a href=&quot;https://en.wikipedia.org/wiki/Core_rope_memory&quot; rel=&quot;noreferrer&quot;&gt;Core Rope Memory&lt;/a&gt; was as well a very specific niche solution&lt;/p&gt;&#xA;&lt;p&gt;*3 - I remember that in 1977 I got hold of two scrapped terminal keyboards, which served as my main source for diodes for several years, as every key was connected to a row of 0..7  diodes to encode its ASCII value.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-02-18T20:05:04.693" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18029" PostTypeId="2" ParentId="18027" CreationDate="2021-02-18T20:13:19.180" Score="5" Body="&lt;p&gt;In my &lt;code&gt;~/.basilisk_ii_prefs&lt;/code&gt; file I have this line:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;extfs /home/user/BasiliskShared&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Which shares the &lt;code&gt;BasiliskShared&lt;/code&gt; directory to Basilisk/Classic Mac OS. You'll see a &lt;code&gt;Unix&lt;/code&gt; icon on the Mac desktop.&lt;/p&gt;&#xA;&lt;p&gt;Tested with System Software 7.5.5 and Mac OS 8.1. Host system, Debian Linux, Buster.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;After OP's comment, it seems that System 7 or 7.0.1 on Basilisk cannot provide a shared folder between host and emulated system.&lt;/p&gt;&#xA;" OwnerUserId="8057" LastEditorUserId="8057" LastEditDate="2021-02-22T15:56:50.090" LastActivityDate="2021-02-22T15:56:50.090" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18030" PostTypeId="2" ParentId="5516" CreationDate="2021-02-18T20:44:54.503" Score="2" Body="&lt;p&gt;It won't work reliably at all. The magnetic properties of ED media are very different from the magnetic properties of HD or DD media.&lt;/p&gt;&#xA;&lt;p&gt;On both HD and DD media, the magnetization is &amp;quot;in-plane&amp;quot; or &amp;quot;longitudinal&amp;quot;, which means that the information is encoded by some areas of the disk being magnetized in rotation direction and other areas are magnetized contary to the rotation direction. In either case, the field from north to south is parallel to the rotation direction. The coating is designed such that this kind of magnetization is stable.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, ED disks use &amp;quot;perpendicular&amp;quot; recording. The magnetic north pole is on top of the coating, near the head, and the south pole on the bottom of the coating, at the plastic disk (or the other way around with the north pole at the plastic layer and the south pole on top of the metal layer). The coating is unable to keep longitudinal magnetization, as it is written by HD or DD read/write heads. The field will slowly (or not so slowly) tilt into perpendicular direction, loosing the actual information.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2021-02-18T20:44:54.503" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18031" PostTypeId="2" ParentId="12100" CreationDate="2021-02-18T22:34:55.360" Score="2" Body="&lt;p&gt;8086/88 has a TEST input pin (23).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Test input is examined by the ‘‘Wait’’ instruction. If the TEST input is LOW execution continues, otherwise the processor waits in an ‘‘Idle’’ state. This input is synchronized internally during each clock cycle on the leading edge of CLK.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, you can hardwire the WAIT instruction (0x9B) and generate low pulses on the TEST pin to step the processor.&lt;/p&gt;&#xA;" OwnerUserId="20400" LastActivityDate="2021-02-18T22:34:55.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18032" PostTypeId="2" ParentId="1626" CreationDate="2021-02-19T00:13:40.707" Score="0" Body="&lt;p&gt;It could be many of the previous answers, But it could also be intentionally because of the need of saving space. Having to get a non trivial program to fit into a predefined space is no simple task. This is in general one of the curses of embedded programming, the many things you take for granted now.&lt;/p&gt;&#xA;" OwnerUserId="20872" LastActivityDate="2021-02-19T00:13:40.707" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18033" PostTypeId="1" AcceptedAnswerId="18060" CreationDate="2021-02-19T03:34:53.133" Score="5" ViewCount="309" Body="&lt;p&gt;According to &lt;a href=&quot;https://www.joelonsoftware.com/2001/07/21/good-software-takes-ten-years-get-used-to-it/&quot; rel=&quot;noreferrer&quot;&gt;Joel Spolsky&lt;/a&gt;,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I will give the Internet Explorer team credit. With IE versions 3.0 and 4.0 they probably created software about ten times faster than the industry norm. This had nothing to do with the Internet and everything to do with the fact that they had a fantastic, war-hardened team that benefited from 15 years of collective experience creating commercial software at Microsoft.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This seems like a good benchmark for how big a team it took to create important desktop software in the heyday of desktop software, if you have all the other variables right, if you are maxing out efficiency.&lt;/p&gt;&#xA;&lt;p&gt;So: how big was the Microsoft team that created the original Internet Explorer?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-21T11:56:17.167" Title="What size was the Microsoft Internet Explorer team?" Tags="&lt;history&gt;&lt;software-development&gt;&lt;microsoft&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18034" PostTypeId="2" ParentId="18026" CreationDate="2021-02-19T04:11:16.413" Score="6" Body="&lt;p&gt;Here are two &amp;quot;random access, read-only memory&amp;quot; solutions as an example on how those were used on early computers. Both map into the address space of the CPU, and are intended to use for bootstrap programs, that load the core memory with the actual program (that one would today have in ROM).&lt;/p&gt;&#xA;&lt;p&gt;That worked because core memory retains its contents even after power loss, so you can basically use it as a sort of ROM. It only needs to be loaded once, or re-loaded in case it gets overwritten, or has a bit-flip or similar.&lt;/p&gt;&#xA;&lt;p&gt;The CDC series (and the Cray, too, I think) had a &lt;strong&gt;deadstart panel&lt;/strong&gt;. &lt;a href=&quot;http://ed-thelen.org/comp-hist/6600DeadStartPanel-.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a picture of the deadstart panel of a CDC 6600, and &lt;a href=&quot;http://www.couperus.org/Albums/Bayview/Deadstart.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt; has a pictore of a more fancy one, with a description. It was essentially a set of 12 x 12 switches (so, 144 bits), and would contain the bootstrap program for a peripheral processor (PP), which then would first initialize itself from some other kind of storage, and then the main CPU.&lt;/p&gt;&#xA;&lt;p&gt;The PDP-8/E had a &lt;strong&gt;MI8-E Bootstrap Loader&lt;/strong&gt; card. I haven't been able to find a full picture, but &lt;a href=&quot;http://avitech.com.au/?page_id=3204&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt; has some close-ups. It's essentially 32 words of 12 bits (344 bits in total) hard-coded with diodes, with different variants for different bootstrap programs for different devices. You could set the start and load address with wires on the cards.&lt;/p&gt;&#xA;&lt;p&gt;I have not found any prices for those, but from the low number of bits, you can see that it was not economical to attempt any kind of &amp;quot;ROM&amp;quot;. The &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp8/pdp8/F-82_PDP-8_Price_List_Aug67.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-8 price list&lt;/a&gt; from 1967 lists 4 kWords (with 12 bits) of core memory at around $8000 dollars. While it was technically possible to make core rope memory at the same density, I'd would have expected it to be much more expensive, as it was no longer regular, and each bit would have to be painstakingly programmed and checked manually.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-02-19T07:00:34.287" LastActivityDate="2021-02-19T07:00:34.287" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="18037" PostTypeId="1" CreationDate="2021-02-19T06:57:00.343" Score="2" ViewCount="271" Body="&lt;p&gt;In a comment to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/18026/cheapest-type-of-read-only-memory-allowing-random-access-before-year-1970&quot;&gt;this question&lt;/a&gt;, Japanese SAPCOL digital typesetting machines are mentioned, which apparently used a PDP-8, and contained fonts for lots of Kanji.&lt;/p&gt;&#xA;&lt;p&gt;What were those SAPCOL machines? What is their timeline? How were the fonts stored? Any other details?&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-02-19T21:22:53.703" Title="SAPCOL Japanese digital typesetting machines" Tags="&lt;printer&gt;&lt;pdp-8&gt;&lt;font&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18038" PostTypeId="2" ParentId="18037" CreationDate="2021-02-19T06:57:00.343" Score="6" Body="&lt;p&gt;A bit of googling finds &lt;a href=&quot;https://www.jagat.or.jp/past_archives/story/10887.html&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; Japanese article, and DeepL does a really impressive English translation, which I am mostly just going to quote, with a bit of corrections.&lt;/p&gt;&#xA;&lt;p&gt;Timeline overview:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1960: prototype of fully automatic SAPTON typesetting machine announced&lt;/li&gt;&#xA;&lt;li&gt;1962: SAPTON-F numeric-only typesetting machine delivered to Japanse Defence Agency&lt;/li&gt;&#xA;&lt;li&gt;1965: SAPTON-N fully automatic typesetting machine for newspapers announced&lt;/li&gt;&#xA;&lt;li&gt;1966: First SAPTON-N delivered&lt;/li&gt;&#xA;&lt;li&gt;SAPTON-P for books and magazines developed in parallel with above&lt;/li&gt;&#xA;&lt;li&gt;1969: First SAPTON-P delivered&lt;/li&gt;&#xA;&lt;li&gt;1969: SAPTON-A system for general printing announced&lt;/li&gt;&#xA;&lt;li&gt;SAPCOL-D editing and typesetting software for SAPTON-A, using a PDP-8, developed together with SAPTON-A&lt;/li&gt;&#xA;&lt;li&gt;1970: First SAPTON-A system, consisting of SAPTON-A5260 and SAPCOL-D1,delivered.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;From the SAPTON-N on, the SAPTON machines used a high-speed rotating character disk (picture in the link) and apparently some kind of optical transfer mechanism to do the actual printing.&lt;/p&gt;&#xA;&lt;p&gt;The SAPTON-N3110 was&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;a fully automatic typesetter that reads CO-59 paper tape, selects the appropriate character from a high-speed rotating character disk with a capacity of 2,304 characters, and types 15 characters per line vertically on a 35mm wide non-perforative roll. The machine prints 15 characters per line in vertical format (the number of characters in a newspaper) on 35mm wide non-perforative rolls.&#xA;It had one typeface, one character size for the main text, and a printing speed of 300 characters per minute (equivalent to three times the speed of a fully automatic imprinting machine).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The SAPTON-P was&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;equipped with a single character disk (with a capacity of 2,880 characters, the character disk can be replaced using a cassette system), image rotation prisms for vertical and horizontal typesetting, four character sizes (10-14Q), and a mono external character insertion device (up to 50 characters). One-sided perforated rolls of 2 to 10 inches wide (7 types) were loaded, and the printing speed was 300 characters per minute.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The SAPTON-A5260&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;held 6,400 characters, including six European fonts, a ruby font (smaller Hiragana written atop on Kanji), symbols, and numbers, on two character disks, one in Mincho and one in Gothic, and was equipped with an image rotating prism, six character sizes, and a mono external character insertion device. The SAPTON-A5440 was equipped with four character disks.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Finally, the SAPCOL-D1,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;the editing and typesetting software for SAPTON-A, used DEC's PDP-8 minicomputer (16 KB main memory, 64 KB magnetic disk). At that time, minicomputers did not have an operating system (OS) equivalent, so we developed our own OS equivalent program and simple language, including multiple control of I/O devices and memory management including auxiliary storage.&lt;/p&gt;&#xA;&lt;p&gt;SAPCOL-D1 added to the typesetting functions of SAPTEDITOR-P many processing functions necessary for general printing, such as headings, tabs, mixed typesetting of different sizes, mixed typesetting of Japanese and European text, ruby, separation prohibition, continuous numerals, and selective printing of red correction parts.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's probably 16 KWords (not KB), or 4 core memory modules for the PDP-8, which was a common size. As for the &amp;quot;magnetic disk&amp;quot; (磁気ディスク), an RK01 stores 256 KBytes (not words, but that's still at least 128 KWords), and a harddisk stores several megabytes, so the &amp;quot;64 KB&amp;quot; is possibly an inaccuracy on side of the author. DEC tapes, which were more common than floppies, stored 184 KWords.&lt;/p&gt;&#xA;&lt;p&gt;Anyhow, that means fonts were never stored in memory or on other storage, but always came from optical disks in the actual printing mechanism, and not in the copyediting part of the system.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-02-19T06:57:00.343" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18039" PostTypeId="1" CreationDate="2021-02-19T07:15:34.137" Score="4" ViewCount="491" Body="&lt;p&gt;How does the rotary control button of Forgotten Worlds/Lost Worlds encode motion? How does it create a binary signal for game software to know how far and which direction to rotate the player's game character?&lt;/p&gt;&#xA;&lt;p&gt;Here is a video showing the rotary control button:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=0V9eNfil_dwt&amp;amp;t=5m45s&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=0V9eNfil_dwt&amp;amp;t=5m45s&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18369" LastEditorUserId="15334" LastEditDate="2021-02-20T07:11:06.733" LastActivityDate="2021-02-20T18:08:11.700" Title="How does the rotary control button of Forgotten Worlds/Lost Worlds encode rotation?" Tags="&lt;gaming&gt;&lt;arcade&gt;&lt;input-devices&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18040" PostTypeId="2" ParentId="18039" CreationDate="2021-02-19T08:51:06.320" Score="8" Body="&lt;p&gt;As @user3840170 said, it looks like the mechanism is similar to the wheel mechanism in a mouse, which would make it a type of &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotary_encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;rotary encoder&lt;/a&gt;... basically a bigger, more robust version of the infinitely-rotatable volume and/or tuning knobs in modern car radios or the rotary encoders you can buy on eBay to use with an Arduino.&lt;/p&gt;&#xA;&lt;p&gt;(Though that'd have been my first guess as soon as someone said &amp;quot;a knob that you can spin infinitely in either direction&amp;quot;... especially when you can also press it as a button.)&lt;/p&gt;&#xA;&lt;p&gt;They come in both absolute or relative versions, with the relative versions having two output pins and only telling you direction and distance.&lt;/p&gt;&#xA;&lt;p&gt;For example, if the controller sees the pins go through this sequence of states...&lt;/p&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Pin A&lt;/th&gt;&#xA;&lt;th&gt;Pin B&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0&lt;/td&gt;&#xA;&lt;td&gt;1&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;1&lt;/td&gt;&#xA;&lt;td&gt;1&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;1&lt;/td&gt;&#xA;&lt;td&gt;0&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0&lt;/td&gt;&#xA;&lt;td&gt;0&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0&lt;/td&gt;&#xA;&lt;td&gt;1&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;...then it knows it's turning in one direction and, if it sees that sequence in reverse, it knows it's turning in the opposite direction.&lt;/p&gt;&#xA;&lt;p&gt;Here's a public domain GIF from &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Incremental_directional_encoder.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikimedia Commons&lt;/a&gt; which visualizes how that works:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IqlRZ.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IqlRZ.gif&quot; alt=&quot;Rotary encoder animation&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's called quadrature encoding and it's basically a quantized version of having two sine curves, 90° out of phase. You can tell which direction it's turning by looking at which pin takes the lead in the &amp;quot;rise1, rise2, fall1, fall2&amp;quot; pattern.&lt;/p&gt;&#xA;&lt;p&gt;Here's another public domain diagram from &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Quadrature_Diagram.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikimedia Commons&lt;/a&gt; which helps to visualize that better:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7kOtt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7kOtt.png&quot; alt=&quot;Rotary encoder output diagram&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The number of times it sees the pattern repeat tells it how far the knob has turned.&lt;/p&gt;&#xA;&lt;p&gt;In the ones I've taken apart, it's accomplished by having a spoked wheel or a disc with black printed stripes and two light sensors. The sensors are then positioned so the spoke/stripe passes over one sensor just before the other, producing that &amp;quot;rise1, rise2, fall1, fall2&amp;quot; pattern.&lt;/p&gt;&#xA;&lt;p&gt;That said, bear in mind that those steps don't correspond to the physical &lt;a href=&quot;https://en.wikipedia.org/wiki/Detent&quot; rel=&quot;nofollow noreferrer&quot;&gt;detents&lt;/a&gt; you feel when you turn a stepped rotary encoder. Rotary encoders can be smooth-turning or stepped. It's just a spring popping into the gaps in a toothed or divoted surface to add some feel to the motion for your benefit and the encoder will emit however many steps per detent its designers felt were necessary to get a good read of its output.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastEditorUserId="15334" LastEditDate="2021-02-20T18:08:11.700" LastActivityDate="2021-02-20T18:08:11.700" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="18041" PostTypeId="1" CreationDate="2021-02-19T11:03:29.697" Score="4" ViewCount="201" Body="&lt;p&gt;A comment on the question &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/16892/why-did-8-bit-basic-use-40-bit-floating-point&quot;&gt;Why did 8-bit Basic use 40-bit floating point?&lt;/a&gt; says the following (emphasis added):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Re, &amp;quot;Nowadays, floating point is usually either 32 or 64 bits.&amp;quot; More specifically, floating point is usually &lt;a href=&quot;https://en.wikipedia.org/wiki/IEEE_754&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEEE 754 floating point&lt;/a&gt;. Pior to the publication of that standard in 1985, it was the Wild West: Pretty much every system had its own internal representation for floating point numbers. &lt;strong&gt;I saw a book once that was basically a step-by-step instruction manual for how to construct your own floating point system&lt;/strong&gt;. It was on the desk of my co-worker who was implementing the floating point arithmetic for a Lisp interpreter.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Some keyword searching turned up only Jean-Michel Muller's &lt;a href=&quot;https://www.springer.com/gp/book/9780817647056&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Handbook of Floating-Point Arithmetic&lt;/em&gt;&lt;/a&gt;, which was published in 2009; presumably the comment is discussing something older.&lt;/p&gt;&#xA;&lt;p&gt;What is this book? It sounds quite interesting.&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2021-02-19T11:03:29.697" Title="What was this book about floating-point system design/construction?" Tags="&lt;history&gt;&lt;floating-point&gt;&lt;books&gt;" AnswerCount="0" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="18042" PostTypeId="2" ParentId="18037" CreationDate="2021-02-19T11:28:12.263" Score="3" Body="&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In photo typesetting four basic generations can be distinguished&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Generation (1950s): Modified Linotype style machines. Here the metal matrices were modified to carry a character negative to be projected, but otherwise work like before.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Generation (1960s): Purpose build photo typesetting. A smaller examples is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Diatype_(machine)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Diatype&lt;/a&gt;, but large integrated systems existed as well. Font images are stored on glass wheels or &lt;a href=&quot;https://en.wikipedia.org/wiki/File:Diatronic_plate.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;plates&lt;/a&gt;, each with a set of a given type. Either direct controlled via keyboard or by numeric input. Were early models still use mechanical gear, electronics start to appear.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Generation (1970s): Computers take over the editing process, handling all metadata, but not the font image, which is still produced from a glass master. Metadata are font metrics like character width, height, &lt;a href=&quot;https://en.wikipedia.org/wiki/Kerning&quot; rel=&quot;nofollow noreferrer&quot;&gt;kerning&lt;/a&gt;, etc. used to calculate exact positioning of each type. The result is used to control a printer.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Generation (late 1980s): Fully digital typesetting. Now computer programs not only control the typesetting process, but also provide all font data as digital images, directly feed to automatic exposure.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The SAPTON/SAPCOL systems are a family of second and third generation photo typesetting machines.&lt;/p&gt;&#xA;&lt;p&gt;The base are the SAPTON systems, mechanical systems, functional similar to a Diatype, that can take numeric input (paper tape, direct interface) to select characters from an optical font disk. Classic Japanese script supports less complex automation as text is written in columns and characters are of a fixed width and height. Horizontal and proportional writing are rather new developments and have been added to later iterations (SAPTON-P,-A). These are all second generation devices.&lt;/p&gt;&#xA;&lt;p&gt;SAPTON-A in combination with a computer (PDP-8) and typesetting software (SAPCOL) constitutes a third generation system. All editing is done on the computer prior to printing. The computer system handles all font parameters to do so, but not the character image itself.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="439" LastEditDate="2021-02-19T21:22:53.703" LastActivityDate="2021-02-19T21:22:53.703" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18043" PostTypeId="1" CreationDate="2021-02-19T12:31:05.450" Score="0" ViewCount="283" Body="&lt;p&gt;80186 introduced some instructions for HLL features.&#xA;80286 introduced some instructions for protected mode, and provided some multitasking ability with external MMU which was never intended for PCs but servers/workstations, but the protection mode and addressing line was implemented in a rather different way from the 80386 family. So what has really been inherited from 80286? Shouldn't we regard 80386 as the direct descend of 8086/80186, rather than 80286?&lt;/p&gt;&#xA;" OwnerUserId="17812" LastEditorUserId="17812" LastEditDate="2021-02-19T12:57:18.917" LastActivityDate="2021-02-19T20:51:51.567" Title="What's the heritage of 80286?" Tags="&lt;history&gt;&lt;cpu&gt;&lt;intel&gt;&lt;80286&gt;&lt;80386&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2021-02-19T22:01:21.747" ContentLicense="CC BY-SA 4.0" />
  <row Id="18044" PostTypeId="1" AcceptedAnswerId="18047" CreationDate="2021-02-19T16:19:07.100" Score="16" ViewCount="1677" Body="&lt;p&gt;In this question a magazine is meant to be a periodical publication containing news, information and other content like software for example.&lt;/p&gt;&#xA;&lt;p&gt;By electronic magazine I mean a magazine presented in electronic form, on a data medium, to be read on a computer.&lt;/p&gt;&#xA;&lt;p&gt;As an example, I have only one issue of the german electronic magazine &amp;quot;Input64&amp;quot; dated 10/86 on casette-tape for the commodore 64.&lt;/p&gt;&#xA;&lt;p&gt;This is not a paper magazine that comes with a storage medium for software. It is completely digitally implemented.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Fxqq7.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Fxqq7.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This magazine is provided on a data medium like casette-tape or a floppy disk with a booklet explaining the software in detail and summarizing the content.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IboWp.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IboWp.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I think this issue is the first to start appearing on floppy disk:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mqGiC.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mqGiC.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Searching on the Internet I found that the first appearance of this magazine was in january 1985.&lt;/p&gt;&#xA;&lt;p&gt;Which was the first electronic magazine distributed on a data medium? When was its first appearance and for which computer?&lt;/p&gt;&#xA;" OwnerUserId="18338" LastEditorUserId="15334" LastEditDate="2021-02-20T18:22:02.940" LastActivityDate="2021-02-25T09:58:05.607" Title="Which was the first magazine presented in electronic form, on a data medium, to be read on a computer?" Tags="&lt;history&gt;&lt;magazine&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18045" PostTypeId="2" ParentId="18044" CreationDate="2021-02-19T17:47:05.223" Score="10" Body="&lt;p&gt;Just to have a starting point, per &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Softdisk_(disk_magazine)&quot; rel=&quot;noreferrer&quot;&gt;https://en.m.wikipedia.org/wiki/Softdisk_(disk_magazine)&lt;/a&gt;, Softdisk was first issued September 1981.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/List_of_disk_magazines&quot; rel=&quot;noreferrer&quot;&gt;https://en.m.wikipedia.org/wiki/List_of_disk_magazines&lt;/a&gt; seems to suggest the following was earlier:&lt;/p&gt;&#xA;&lt;p&gt;CLOAD was a cassette and disk magazine for the TRS-80 which started in 1978.&lt;/p&gt;&#xA;" OwnerUserId="11797" LastActivityDate="2021-02-19T17:47:05.223" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18046" PostTypeId="2" ParentId="18044" CreationDate="2021-02-19T18:28:16.957" Score="7" Body="&lt;p&gt;Somewhere around 1980, the Vogon News Service was started.&lt;/p&gt;&#xA;&lt;p&gt;This was an unofficial daily mailing list within DEC. It was a digest of news items sent in by readers and regular contributors. Its genesis was when one DEC employee was seconded from the UK to the US; a friend in the UK mailed him cricket scores, and later started sending news items retyped from the newspaper. The guy in the US in turn mailed them out to his friends.&lt;/p&gt;&#xA;&lt;p&gt;Ultimately there were several thousand subscribers, and the VNS ran itself fairly automatically. (I contributed a key piece of the distribution software).&lt;/p&gt;&#xA;&lt;p&gt;We regarded it as a newspaper, and I think that's what distinguishes it from possibly-earlier Internet distribution lists.  But newspaper, rather than magazine.  What's the difference?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://groups.google.com/g/nz.comp/c/OIXVYrvkmWY/m/eF_blQlvdOwJ&quot; rel=&quot;noreferrer&quot;&gt;Here in Google Groups&lt;/a&gt; is a random issue I found online. The masthead gives the distribution as 7157,&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-02-19T18:28:16.957" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18047" PostTypeId="2" ParentId="18044" CreationDate="2021-02-19T19:12:53.033" Score="19" Body="&lt;p&gt;The oldest magazine of that kind I know might be &lt;strong&gt;CURSOR for the Commodore PET&lt;/strong&gt;. Its first issue is dated July 1978. It was as well the most bare-bones delivery I know. Just the cassette, no box, wrapped in a folded sheet of paper with instructions held together by a rubber band. Last issue seems to be May 1982.&lt;/p&gt;&#xA;&lt;p&gt;The Internet Archive got a &lt;a href=&quot;https://archive.org/details/Cursor_Issue_01_thru_30/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;collection of all 'covers'&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Some research reveals that the CLOAD magazine for the TRS-80, &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/18045/6659&quot;&gt;mentioned by Foon&lt;/a&gt;, predates this by half a years, with its first issue being dated as February 1978.&lt;/p&gt;&#xA;&lt;p&gt;The well sorted TRS-80.COM site got a &lt;a href=&quot;http://www.trs-80.com/wordpress/magazine-cload/&quot; rel=&quot;nofollow noreferrer&quot;&gt;page dedicated to CLOAD&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Interestingly both magazines originate in Goleta, CA, a small town surrounding the UC Santa Barbara site. Both use the same approach, although I think I remember some CLOAD issues using a (quite thin) plastic cover around the cassettes. Last known issue is of April 1984.&lt;/p&gt;&#xA;&lt;p&gt;Both magazines were quite influential at their time and CURSOR was as well distributed worldwide, available in computer stores in England, Germany and Holland (AFAIR, but I'm sure there was wider distribution)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-25T09:58:05.607" LastActivityDate="2021-02-25T09:58:05.607" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18048" PostTypeId="2" ParentId="18043" CreationDate="2021-02-19T20:51:51.567" Score="4" Body="&lt;p&gt;You are getting everything wrong.&lt;/p&gt;&#xA;&lt;p&gt;The 286 has integrated segmentation unit and protected modes to allow multitasking OSes and more memory (up to 16MB). It was actually used for that purpose in early versions of OS/2 and Windows.&lt;/p&gt;&#xA;&lt;p&gt;The definition of &amp;quot;workstation&amp;quot; is arbitrary. 640kB DOS was becoming cramped, and the 286 allowed to use more memory.&lt;/p&gt;&#xA;&lt;p&gt;The 386 had two important enhancements : 32bits registers and a pagination unit. The pagination unit allows virtual memory and is more suitable for common UNIX-like OSes which aren't well adapted to x86 segmentation. i386 paged MMU is architected between the segmentation unit addresses and physical memory.&lt;/p&gt;&#xA;&lt;p&gt;The 386 supports all of 286 protected modes, they can be used in 16bits environments (and many, many 386 ran for years in popular 16bits OSes such as Windows 3.1), and in new 32bits protected modes (such as the WIN32 extension for Windows 3.1).&lt;/p&gt;&#xA;&lt;p&gt;Since the introduction of AMD 64bits mode, and a bit before, segmentation concepts (with complex stuff like call gates, segment limits...) were a bit obsoleted as pagination is good enough for multitasking OSes, and more compatible with RISC CPUs which have no concept of segments. (rough simplification)&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2021-02-19T20:51:51.567" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18049" PostTypeId="2" ParentId="18026" CreationDate="2021-02-20T03:34:49.787" Score="1" Body="&lt;p&gt;The Apollo Guidance Computer used Core Rope memory.  The read-only instructions were woven into the rope (in one story, by canonical little-old-ladies)&lt;/p&gt;&#xA;&lt;p&gt;Before that, computers used diode matrix memory, and switched relay selection of plugboard settings, both of which were fixed access time read-only data stores.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2021-02-20T03:40:00.237" LastActivityDate="2021-02-20T03:40:00.237" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18050" PostTypeId="2" ParentId="2205" CreationDate="2021-02-20T07:37:30.740" Score="2" Body="&lt;p&gt;F=14.31818MHz was a common Crystal. I have a fistfull from Halted in Sunnyvale, CA which regrettably is now System Halted.&#xA;F/2=7.15909MHz F/4=3.579545Mhz (&amp;lt;-- That is the Color Burst frequency).&#xA;14.31818Mhz is also the master clock frequency in the Apple ][ and probably lots of other computers. It drives the video counter part which generates H and V Sync as well as color burst and generates address to read video memory and its really neat to.&lt;/p&gt;&#xA;&lt;p&gt;Apple had wide horizontal borders so 280 pixel wide while many other computers were 320 pixels with smaller boarders but still some space for another ~40ish maybe hmm pixels. The pixel size is fixed in Color mode(Any line with Color Burst). In B&amp;amp;W mode when there is no colorburst Horizontal resolution is ---&amp;gt;infinite... or much higher depending how sharp your B&amp;amp;W tv/monitor is.&lt;/p&gt;&#xA;&lt;p&gt;Apple was weird in that each video BYTE encoded 7 not 8 pixels. That didn't change no matter text, lo-res or high res. Hi Res each byte 7 pixels and high order bit shifts pixels (half a pixel) in effect selecting different 2-color + B and W pallet. Lo res graphics just used upper or lower nibble 4 bits and double color burst freq which TV interpreted as a color. Apple really had no TV color hardware except video bits and horizontal and vertical sync going into ONE TRANSISTOR with a few resistors to get correct voltages.&lt;/p&gt;&#xA;&lt;p&gt;None of these late 70s early 80s computers thought to have two displays driven by a-lot of the same circuitry(So very minimal increase in price). B&amp;amp;W for high resolution such as 80 column text on an el cheapo TV or monitor and low resolution color on a TV or monitor. How about triple ended.. Could of had an 8-bit DAC behind an Analog MUX(As in Vectrex) driving X and Y of XY o'scope (maybe brightness too) for vector graphics. Probably would of needed dedicated CPU for that.&lt;/p&gt;&#xA;&lt;p&gt;Color information was encoded in some super weird thing called Quadrature modulation. So instead of just transmitting brightness a F/4=3.579545Mhz sine wave is added to that and shifting that wave a-little ahead or behind encodes one color and adjusting that waves amplitude (or I think half wave pattern) encodes another color and the general amplitude of everything is brightness. Sooo complicated who came up with that!? Why not have a color burst and then send RGBRGBRGBRGBRGB.... That would be backwards compatible with B&amp;amp;W TVs so a color picture would look a-little grainy if u looked close to the screen. That would leave the possibility in the future of doing RrGgBb to double horizontal resolution when electronics got good enough.&lt;/p&gt;&#xA;&lt;p&gt;If you have a monitor or TV with RGB input you can trick it to actually see the F/4=3.579545Mhz wave. Plugging the YELLOW composite signal which has that color burst frequency wave into one of the RGB depending which kind of RGB it is will make it think that is only the amplitude so you can see the grainy colorburst frequency on an HDTV or high res monitor.&lt;/p&gt;&#xA;&lt;p&gt;Since TV was interlaced why didn't somebody back in the 60s do 3D TV? You could wear a mask with a disk in front of you face rotating at 60Hz.. oops I mean 30Hz. There could be a signal from the TV keeping the disk in sync with the TV. Half the disk would be transparent and the other half opaque so the result would be one eye would see the even lines and the other would see the odd lines so interlaced TVs could of had 3D broadcasts sometimes. That would of been so much fun!!&lt;/p&gt;&#xA;&lt;p&gt;This manual has a good section on NTSC. I guess to really understand it you need to write code with a high enough speed DAC and drive the entire NTSC signal yourself. I made an Apple II in an FPGA and noticed B&amp;amp;W monitors are very forgiving about having the voltages far off the color composite inputs are more picky. Your clock generator needs to be configurable enough to get close to color burst frequency otherwise the TINT or colors will shift across the horizontal scan line.&lt;/p&gt;&#xA;&lt;p&gt;The Apple II circuit description Paperback – January 1, 1983&#xA;by Winston Gayler  (Author)   has a good section on NTSC.&lt;/p&gt;&#xA;&lt;p&gt;Does this video link to my Xilinx FPGA Apple II work?&#xA;&lt;a href=&quot;https://media.mewe.com/a533e2ad-c5cc-41b3-8b5f-7209ca136a3b/720p.mp4?Policy=eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6Imh0dHBzOi8vbWVkaWEubWV3ZS5jb20vYTUzM2UyYWQtYzVjYy00MWIzLThiNWYtNzIwOWNhMTM2YTNiLzcyMHAubXA0IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjEzODEzMDIyfSwiSXBBZGRyZXNzIjp7IkFXUzpTb3VyY2VJcCI6IjczLjE4OS4yMjAuMjIvMzIifSwiRGF0ZUdyZWF0ZXJUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjB9fX1dfQ__&amp;amp;Signature=e02xjXRbTPqFIB4CvZBkLB1Cgxari-RlYbur0fbfC1NG7GNzLkHQV9exusONr7bAl96-WMb336TncduiCSjEG-69eODkABqXeUcvOt3lASBiD6ShLTM%7Eej-5lWJQBCpo1830YyfITQrJw2yDFvTQf2NavewxDhUpYnBo5uH4l6w_&amp;amp;Key-Pair-Id=APKAJ27JL4J435IAPVQQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://media.mewe.com/a533e2ad-c5cc-41b3-8b5f-7209ca136a3b/720p.mp4?Policy=eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6Imh0dHBzOi8vbWVkaWEubWV3ZS5jb20vYTUzM2UyYWQtYzVjYy00MWIzLThiNWYtNzIwOWNhMTM2YTNiLzcyMHAubXA0IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjEzODEzMDIyfSwiSXBBZGRyZXNzIjp7IkFXUzpTb3VyY2VJcCI6IjczLjE4OS4yMjAuMjIvMzIifSwiRGF0ZUdyZWF0ZXJUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjB9fX1dfQ__&amp;amp;Signature=e02xjXRbTPqFIB4CvZBkLB1Cgxari-RlYbur0fbfC1NG7GNzLkHQV9exusONr7bAl96-WMb336TncduiCSjEG-69eODkABqXeUcvOt3lASBiD6ShLTM~ej-5lWJQBCpo1830YyfITQrJw2yDFvTQf2NavewxDhUpYnBo5uH4l6w_&amp;amp;Key-Pair-Id=APKAJ27JL4J435IAPVQQ&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A few posts down my MEWE page you can see my Apple II FPGA and hear me breathing so turn the volume off unless you like Darth Vader.&#xA;&lt;a href=&quot;https://mewe.com/i/frederickkilner&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://mewe.com/i/frederickkilner&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;May The Force Be With You&#xA;-ME&lt;/p&gt;&#xA;" OwnerUserId="20881" LastEditorUserId="20881" LastEditDate="2021-02-20T07:52:12.287" LastActivityDate="2021-02-20T07:52:12.287" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18051" PostTypeId="2" ParentId="11913" CreationDate="2021-02-20T15:36:44.443" Score="3" Body="&lt;p&gt;The Amstrad CPC range supported 3 basic screen modes:&lt;/p&gt;&#xA;&lt;p&gt;mode 0 - 160x200, or 20x25 characters, with a palette of 16 colours&lt;/p&gt;&#xA;&lt;p&gt;mode 1 - 320x200, or 40x25 characters, with a palette of 4 colours&lt;/p&gt;&#xA;&lt;p&gt;mode 2 - 640x200, or 80x25 characters, with a palette of 2 colours&lt;/p&gt;&#xA;&lt;p&gt;Any of these colours could be selected from a total palette of 27 colours, which is based on 3 settings (off, half intensity, full intensity) for red, green and blue.&lt;/p&gt;&#xA;&lt;p&gt;Of course, it provided a complete standard 7-bit, 128 character ASCII character set, as part of its 256 total character set which, by default, provided a range of graphics symbols including some fractions, 16 Greek characters mostly used in maths, other useful symbols as well as a typical range of boxes, bars and blocks for creating graphical elements.&lt;/p&gt;&#xA;&lt;p&gt;The entire 256 symbol character set is re-definable, even from BASIC, with simple commands, so it has the ability to produce, as text, any symbol that can be created in an 8x8 grid.&lt;/p&gt;&#xA;&lt;p&gt;The firmware provided ability to place these characters anywhere on screen, and of course the built in BASIC interpreter allowed full, standard control over these - the usual LOCATE x,y, PRINT, etc.&lt;/p&gt;&#xA;&lt;p&gt;Where this differs from many systems of the era, and what CPC Wiki is referring to, is that there is no seperate &amp;quot;text&amp;quot; mode. All modes can mix text and graphics at will. Nor is the text output limited to a fixed grid - you can actually locate the cursor to any pixel and trigger a standard firmware text output, even from BASIC.&lt;/p&gt;&#xA;&lt;p&gt;What it does lack is support for hardware sprites - basically larger multicolour characters that can be moved on-screen. Programmers had to implement these in machine code.&lt;/p&gt;&#xA;&lt;p&gt;The result was that generally, games used mode 0 to access the maximum colour palette, while business programs used mode 2 for the 80x25 text that was standard at the time. The machine would actually run CP/M and emulate a Zenith/Heath terminal which meant a huge range of industry standard software of the era could be run, such as dBASE II, Wordstar, MS BASIC, Turbo Pascal, etc.&lt;/p&gt;&#xA;&lt;p&gt;(p.s. some comments suggest the colour monitor was not suitable for the 80x25 text mode. I owned one for many years and can vouch that it was perfectly decent and useable for its time. Was it the best? No... but there were also a lot of worse looking displays back in the 80s!)&lt;/p&gt;&#xA;" OwnerUserId="20882" LastActivityDate="2021-02-20T15:36:44.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18052" PostTypeId="2" ParentId="18017" CreationDate="2021-02-20T16:02:54.070" Score="1" Body="&lt;p&gt;No, almost no &amp;quot;home computers&amp;quot; of that era came with a mouse as standard. Booting to a BASIC interpreter with a command line from ROM was the standard back then.&lt;/p&gt;&#xA;&lt;p&gt;In fact - the first input device most people added was a joystick, to play games, not a mouse.&lt;/p&gt;&#xA;&lt;p&gt;The first popular computer that had a mouse as standard was the Apple Macintosh in 1984. However, it was also, at the time, a VERY expensive machine compared to the average home computer people were buying - the Sinclairs, Commodores, Tandys, Acorns and Amstrads that found their way into peoples homes were a fraction of the price.&lt;/p&gt;&#xA;&lt;p&gt;Remember, at the time the IBM PC was only just establishing itself as the standard for business applications, on the strength that it had 80x25 text mode and the MS-DOS operating system was close enough to the then standard CP/M that porting apps over wasn't too difficult. It too, definitely did NOT have a mouse as standard!&lt;/p&gt;&#xA;&lt;p&gt;That said, it was obvious by the mid to late 80s that GUIs and mice were the way to go. A lot of 8 bit machines had a mouse you could buy as a (usually 3rd party) option, but they never became that popular.&lt;/p&gt;&#xA;" OwnerUserId="20882" LastActivityDate="2021-02-20T16:02:54.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18053" PostTypeId="2" ParentId="18026" CreationDate="2021-02-20T16:09:48.007" Score="2" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/EDSAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;EDSAC&lt;/a&gt; (operational in 1949) had read-only memory to hold its &lt;a href=&quot;https://ui.adsabs.harvard.edu/abs/1950RSPSA.202..573W/abstract&quot; rel=&quot;nofollow noreferrer&quot;&gt;Initial Orders&lt;/a&gt;.  The Initial Orders were wired on to uniselectors, and when running, allowed the easy (!) loading of other programs from paper tape.  That is, they provided the services of a boot ROM, with some aspects of an assembler built it.&lt;/p&gt;&#xA;&lt;p&gt;Since this was post-war Britain, the uniselectors were almost certainly surplus equipment, and therefore cheap.&lt;/p&gt;&#xA;&lt;p&gt;The capacity was around 50 words; see &lt;a href=&quot;https://people.cs.clemson.edu/%7Emark/edsac.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt; for a listing of &amp;quot;Initial Orders 2&amp;quot;.  There's a picture of the uniselectors on a modern reconstruction of EDSAC &lt;a href=&quot;https://www.zdnet.com/article/national-museum-of-computing-opens-edsac-display-recreating-1949s-top-computer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-02-20T16:09:48.007" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18054" PostTypeId="2" ParentId="7112" CreationDate="2021-02-20T16:28:11.877" Score="1" Body="&lt;p&gt;Almost all these old machine did have SOME ventilation. The BBC seems to have less than normal, but there are some ventilation slots underneath, and on the back on some of them.&lt;/p&gt;&#xA;&lt;p&gt;That said, it does seem to have less than similar systems of the era.&lt;/p&gt;&#xA;&lt;p&gt;The fact is - those old 70s/80s home computers just didn't run as hot as modern Intel/AMD systems! Your typical 8 bit CPU didn't even require a heat sink on top, let alone a fan. Even most 16 bit CPUs were fine just running without special cooling.&lt;/p&gt;&#xA;&lt;p&gt;The modern Intel-derived desktop CPU evolved in such a way that performance was gained at the expense of thermal efficiency, and it needs a dedicated cooling system. Laptops are generally using a different (but compatible) range that uses less power and needs less cooling.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, your mobile phone or tablet is almost certainly running an ARM CPU, which despite its relatively high performance, can be put into a small device with no large heatsinks, let alone fans or liquid cooling. Those old machines like the BBC micro should be though of as more like your mobile phone in terms of cooling rather than some liquid cooled gaming PC. In fact, Acorn, who made the BBC, later designed a new CPU of their own, a revolutionary new design, known as the Acorn Risc Machine, or ARM...&lt;/p&gt;&#xA;" OwnerUserId="20882" LastEditorUserId="20882" LastEditDate="2021-02-23T15:29:48.310" LastActivityDate="2021-02-23T15:29:48.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18055" PostTypeId="5" CreationDate="2021-02-20T18:27:36.540" Score="0" Body="" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-20T18:27:36.540" LastActivityDate="2021-02-20T18:27:36.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18056" PostTypeId="4" CreationDate="2021-02-20T18:27:36.540" Score="0" Body="Historical computing periodicals and articles found within." OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-20T18:27:36.540" LastActivityDate="2021-02-20T18:27:36.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18057" PostTypeId="2" ParentId="1625" CreationDate="2021-02-20T20:47:45.277" Score="1" Body="&lt;p&gt;This is an edited and expanded copy of an answer I posted elsewhere; it was pointed out to me that it would be useful information here.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/EDSAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;EDSAC&lt;/a&gt; (operational in 1949) had read-only memory to hold its Initial Orders. The Initial Orders were wired on to uniselectors, otherwise known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Stepping_switch&quot; rel=&quot;nofollow noreferrer&quot;&gt;stepping switches&lt;/a&gt;.  The EDSAC had hardware facilities to load the Initial Orders from the uniselector bank into mercury delay-line memory, and that programme in turn allowed the easy (!) loading of other programmes from paper tape.&lt;/p&gt;&#xA;&lt;p&gt;There's a picture of the uniselectors &lt;a href=&quot;https://chiphack.org/talks/edsac-part-2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, though I think this is from a &lt;a href=&quot;https://www.tnmoc.org/search?q=edsac&quot; rel=&quot;nofollow noreferrer&quot;&gt;modern reconstruction of EDSAC&lt;/a&gt; at TNMoC in Bletchley Park.&lt;/p&gt;&#xA;&lt;p&gt;The uniselectors would have been of the kind used in telephone exchange at the time.&lt;/p&gt;&#xA;&lt;p&gt;I don't recall how the programme was represented on the switches. At some point I had found a paper online describe it to the point at which I could more-or-less understand it :-) but I've lost the link.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Footnote: 'programme' is standard English, and at the time was the spelling used for both the verb and the noun in relation to computer instructions.  By the time I wrote programs, 'program' was the computer-related spelling, and 'programme' was what you watched on television&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nc2q4OOK6K8&quot; rel=&quot;nofollow noreferrer&quot;&gt;This YouTube programme&lt;/a&gt; shows a little about programming EDSAC; the uniselector bank is shown around the 3 minute mark.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-02-20T20:47:45.277" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18058" PostTypeId="1" CreationDate="2021-02-20T21:10:17.287" Score="4" ViewCount="122" Body="&lt;p&gt;(I hope we haven't covered this somewhere...)&lt;/p&gt;&#xA;&lt;p&gt;The 1949 &lt;a href=&quot;https://www.cl.cam.ac.uk/events/EDSAC99/&quot; rel=&quot;nofollow noreferrer&quot;&gt;EDSAC&lt;/a&gt; could boot, as we say nowadays, from a bank of uniselectors. It's unclear to me how program code was actually represented on the uniselectors.&lt;/p&gt;&#xA;&lt;p&gt;The EDSAC had 18-bit words (17 usable!) so a naïve approach would be to have 18 uniselectors, with one word on each switch position. And given that Initial Orders 1 has been reported as being 31 words long, that naïve approach would require 31 switch positions.&lt;/p&gt;&#xA;&lt;p&gt;The photos I can now find have 5 uniselectors. That, perhaps not coincidentally, corresponds to the 5-channel paper tapes that EDSAC used. So maybe the uniselectors were delivering the same thing.  That equates to 7 uniselector positions for every 2 machine words, which works out at requiring over 100 positions total (for the 31-word Initial Orders 1).  That seems infeasible, though I've not actually counted positions from the photos.&lt;/p&gt;&#xA;&lt;p&gt;So how were the uniselectors coded?&lt;/p&gt;&#xA;&lt;p&gt;Perhaps one position of the rotating switch could hold multiple values, selected by external logic, so a complete boot load required multiple revolutions?&lt;/p&gt;&#xA;&lt;p&gt;Added: &lt;a href=&quot;https://www.youtube.com/watch?v=oMeXEUb08ww&quot; rel=&quot;nofollow noreferrer&quot;&gt;this YouTube video&lt;/a&gt; from the replica project says that 4 of the uniselectors contained the data, and the 5th controlled the operation of the other 4.  That doesn't get me closer to the encoding, but it does shoot down the '5 channel paper tape similarity' hypothesis.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-02-21T04:14:35.113" LastActivityDate="2021-02-21T14:31:29.137" Title="How was EDSAC program code represented on uniselectors?" Tags="&lt;history&gt;&lt;edsac&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18059" PostTypeId="1" AcceptedAnswerId="18062" CreationDate="2021-02-21T11:52:11.280" Score="6" ViewCount="1114" Body="&lt;p&gt;The IBM AS/400, formerly known as System/38, subsequently known as i (sic), is remarkable in being essentially the most future-proof of all the minicomputers, thanks among other things to the use of byte code to screen programs from the CPU; this was conceptually similar to Java and .Net byte codes, but instead of being an optional extra, it was the only format in which applications were distributed, so seamless upgrade of CPU architecture was guaranteed to be possible. As a result, when the eighties became the nineties and other minicomputers like VAX and Wang were dead or dying, the AS/400 was just hitting its stride.&lt;/p&gt;&#xA;&lt;p&gt;The first half of this is a good plain-English overview; the second half is the best computer marketing video I have ever seen: &lt;a href=&quot;https://www.youtube.com/watch?v=5pY6Xxptp9A&amp;amp;ab_channel=AndyK&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=5pY6Xxptp9A&amp;amp;ab_channel=AndyK&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What programming languages were most commonly used on this system in the nineties? Of course, it ended up supporting every language under the sun (no pun intended) just by virtue of being used widely enough for long enough, but which ones tended to be actually used at that time? Probably not Fortran; the marketing guy in the above video was asked how many MIPS the system could do, and he replied, what are you going to use the machine for, solving the Schrödinger equation, or running payroll? But COBOL and RPG would surely fit. Was there a culture of continuing to use these old languages, or of moving to Pascal, C and C++ that were popular on microcomputers? Did the Java trend come to the AS/400? Was it a stronghold of PL/I? Did Smalltalk ever have its day on that machine?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-24T01:23:08.410" Title="What programming languages were most commonly used on the AS/400 in the 90s?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;minicomputers&gt;&lt;as400&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18060" PostTypeId="2" ParentId="18033" CreationDate="2021-02-21T11:56:17.167" Score="1" Body="&lt;p&gt;According to &lt;a href=&quot;https://ericsink.com/Browser_Wars.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ericsink.com/Browser_Wars.html&lt;/a&gt; it seems the answer is&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The original Internet Explorer team was just five or six people. By the time Silverberg and others decided to rewrite the browser almost completely for version 3.0, released in 1996, the team had grown to 100. By 1999, it was more than 1,000.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-21T11:56:17.167" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18061" PostTypeId="2" ParentId="18058" CreationDate="2021-02-21T14:31:29.137" Score="2" Body="&lt;p&gt;Partial answer; I'll update this as I find things out. I'm writing this as an answer rather than comments since it's easier to organize this way.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=C5xWdz8wqoY&quot; rel=&quot;nofollow noreferrer&quot;&gt;This video&lt;/a&gt; in the first half has John Sanderson from the EDSAC reconstruction project talking about the uniselectors.&lt;/p&gt;&#xA;&lt;p&gt;He holds one of the uniselectors up to camera, and it's possible to count that it has 8 banks and 25 positions.  I assume the reconstruction uses the same-size switches as the original.&lt;/p&gt;&#xA;&lt;p&gt;Around the 3-minute mark, Sanderson is talking about wiring instructions. He seems to be saying that the switch 'circumferential' position maps to the word address (instruction 4 is 4 pins up).  If there's a simple mapping of pin to logic 0 or 1, and if it's possible to get a 17 bit instruction in 16 bits (examination of the order code might show that one bit can be elided), then we're still stuck at only 25 halfwords.&lt;/p&gt;&#xA;&lt;p&gt;If anyone has contact information for Sanderson, that would be helpful.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-02-21T14:31:29.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18062" PostTypeId="2" ParentId="18059" CreationDate="2021-02-21T17:12:16.267" Score="14" Body="&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/IBM_i&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM i&lt;/a&gt; is actually the name of an operating system rather than the hardware.  So, it is the successor to OS/400 rather than AS/400.  The current hardware is &lt;a href=&quot;https://en.m.wikipedia.org/wiki/IBM_Power_Systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM Power Systems&lt;/a&gt;.  These can also run Aix and Linux.&lt;/p&gt;&#xA;&lt;p&gt;There was also the name iSeries between AS/400 and i.&lt;/p&gt;&#xA;&lt;p&gt;Regardless of its name, RPG has been the dominant language though it has also changed a lot.  Today, Java may rival it but whether it is ahead of RPG will depend on whether you are counting new programs being written or programs in use.&lt;/p&gt;&#xA;&lt;p&gt;Cobol is far behind RPG.  PL/I used to be popular for the odd tasks that RPG and Cobol struggled with.  C has been gradually taking over this role.  Anything else is minor e.g. C++.  Basic is (was?) available but I have never seen it used.  I don't think that a Fortran compiler was ever available.&lt;/p&gt;&#xA;&lt;p&gt;A complication today is that the O/S contains Aix so it can run anything that Aix can.  In this indirect way, Fortran would be available.  Also, the hardware can be split into logical partitions, some may be running i while others run Aix or Linux.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Addition&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I did a little more research and I found this: &lt;a href=&quot;https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_74/rzarh/cpprog09.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Programming Languages Supported by the IBM i Operating System&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I see that Fortran and Pascal are supported but the EPM is very significant.  I had forgotten about it.&lt;/p&gt;&#xA;&lt;p&gt;OPM, original program model, is how the system used to work.  It did not support any Unix like linking.  One source file became one executable program and tens of thousands of lines were not uncommon.&lt;/p&gt;&#xA;&lt;p&gt;I had totally forgotten EPM, extended program model, until I found that page.  I probably dismissed it as a bad dream,  it was the first attempt to support C.  It allowed the AS/400 to claim to support C but it was close to unusable.&lt;/p&gt;&#xA;&lt;p&gt;ILE, integrated language environment, was the next and more successful attempt to support C but it was a major change.  It made the system much more Unix like.&lt;/p&gt;&#xA;&lt;p&gt;Java came next and required yet further dramatic changes to the O/S.&lt;/p&gt;&#xA;&lt;p&gt;Later again, a full copy of Aix was buried into the O/S.  You can now run Python but it is just as if you are using Aix.  A lot of new software is actually Aix including the JVM for Java.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Further addition&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the link above, Basic, PL/I, and Pascal are labelled PRPQ.  I had to remind myself what that meant.  It is &lt;a href=&quot;https://en.wikipedia.org/wiki/Request_price_quotation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Programming Request Price Quotation&lt;/a&gt;.  An approximate translation is: we will make up a price when you ask.  It is not a standard price list item.  These are products that IBM would like us to forget about.&lt;/p&gt;&#xA;" OwnerUserId="7805" LastEditorUserId="7805" LastEditDate="2021-02-24T01:23:08.410" LastActivityDate="2021-02-24T01:23:08.410" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18063" PostTypeId="1" AcceptedAnswerId="18075" CreationDate="2021-02-21T22:24:47.307" Score="4" ViewCount="244" Body="&lt;p&gt;The original Macintosh version of Myst was written in HyperCard.&lt;/p&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://news.ycombinator.com/item?id=20549685&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://news.ycombinator.com/item?id=20549685&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Adding useful features, such as uploading those HTML files to a web server, may have been possible but would have required extensions to the language. Plenty of extensions existed, which is how companies like Cyan managed to produce an amazing for the time multimedia game (Myst) on what most people viewed as a stack of programmable black and white index cards.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What extensions did Cyan use for this? How did they work; were they like VBX extension modules for Visual Basic? Did Cyan write them in-house, subcontract them or buy them on the market? What language were they written in?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-23T04:06:36.373" Title="What HyperCard extensions did Myst use?" Tags="&lt;history&gt;&lt;apple-macintosh&gt;&lt;software-development&gt;&lt;hypercard&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18064" PostTypeId="1" CreationDate="2021-02-22T00:08:39.400" Score="1" ViewCount="132" Body="&lt;p&gt;For the GBA, I am under the impression that there are two ways to detect a button event:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Enable IRQs and set up a handler for the button event&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Check a button's state during the vblank period&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Which of these two techniques was typically used, and why? What factors would lead a game developer to choose one technique over the other, if neither one of them is &amp;quot;the one right way&amp;quot;?&lt;/p&gt;&#xA;&lt;p&gt;Did this also apply to older Nintendo handhelds like the GB/GBC, and newer ones like the NDS?&lt;/p&gt;&#xA;" OwnerUserId="8090" LastEditorUserId="8090" LastEditDate="2021-02-22T00:16:35.253" LastActivityDate="2021-02-22T00:16:35.253" Title="How did commercial GBA games sample the button state?" Tags="&lt;nintendo&gt;&lt;interrupt&gt;&lt;game-boy-advance&gt;" AnswerCount="0" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18065" PostTypeId="1" AcceptedAnswerId="18067" CreationDate="2021-02-22T07:21:47.550" Score="4" ViewCount="943" Body="&lt;p&gt;Many of the earliest computers stored and manipulated numbers in various decimal codings rather than in pure binary.  Examples include the &lt;a href=&quot;https://en.wikipedia.org/wiki/Harvard_Mark_I&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mark I&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/ENIAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;ENIAC&lt;/a&gt;, as well as some UNIVAC and &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/9678/10260&quot;&gt;IBM&lt;/a&gt; models.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Could any decimal-based computer handle text?&lt;/strong&gt;  If so, what encoding was used for letters and other characters?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/12885/10260&quot;&gt;This question&lt;/a&gt; asks the opposite: early computers that could only print numbers.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-02-22T19:39:06.477" Title="Were any decimal-based computers capable of handling text?" Tags="&lt;text&gt;&lt;early-computer&gt;&lt;binary-coded-decimal&gt;&lt;character-sets&gt;&lt;biquinary&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18066" PostTypeId="1" AcceptedAnswerId="18071" CreationDate="2021-02-22T07:43:59.680" Score="13" ViewCount="1174" Body="&lt;p&gt;The assembly language for many processors use the phrase &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Arithmetic_shift&quot; rel=&quot;noreferrer&quot;&gt;arithmetic shift&lt;/a&gt;&amp;quot; to represent the bitwise shift of a signed value, and &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Logical_shift&quot; rel=&quot;noreferrer&quot;&gt;logical shift&lt;/a&gt;&amp;quot; for an unsigned value.  The two types of shift are the same when shifting &lt;em&gt;leftward&lt;/em&gt;, filling the least-significant bits with 0.  However, a &lt;em&gt;rightward&lt;/em&gt; logical (unsigned) shift fills the most-significant bits with 0, whereas a rightward arithmetic (signed) shift fills the upper bits with a copy of the old sign bit (MSB).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;What was the first use of the terms &amp;quot;arithmetic&amp;quot; and &amp;quot;logical&amp;quot; for shifts?&lt;/strong&gt;  When and by whom did this occur?  Was there any reason given why these terms were chosen instead of &amp;quot;signed&amp;quot; and &amp;quot;unsigned&amp;quot;?  Please support answers with sources, rather than speculating.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Related: &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/9026/10260&quot;&gt;What was the main purpose of bitshift instructions in CPU?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="15334" LastEditDate="2021-02-22T12:32:03.337" LastActivityDate="2021-02-24T02:17:47.187" Title="Origin of &quot;arithmetic&quot; and &quot;logical&quot; for signed and unsigned shifts" Tags="&lt;history&gt;&lt;assembly&gt;&lt;instruction-set&gt;&lt;terminology&gt;&lt;alu&gt;" AnswerCount="2" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18067" PostTypeId="2" ParentId="18065" CreationDate="2021-02-22T07:54:38.863" Score="11" Body="&lt;p&gt;Really early computers like the Mark I and ENIAC didn't have enough memory to attempt to handle text; also the use-case was mostly calculations.&lt;/p&gt;&#xA;&lt;p&gt;A number of decimal IBM computers used characters (with 5 or 6 usable bits) as the basic unit, and decimal digits were just a special usage of those characters:&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1401&quot; rel=&quot;noreferrer&quot;&gt;IBM 1401&lt;/a&gt; computer, and its compatible successors such as the 1410 and 7010, used seven bits in memory to represent a 6-bit character plus a one-bit word mark. Decimal arithmetic was based on numbers build from those characters.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1620&quot; rel=&quot;noreferrer&quot;&gt;IBM 1620&lt;/a&gt; computer organized memory into two-digit cells, with four bits for the digit, and one flag bit. In alphanumeric mode, those 5 bits were used for characters. Wikipedia has a &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1620#Character_and_op_codes&quot; rel=&quot;noreferrer&quot;&gt;table&lt;/a&gt; of the encoding.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_700/7000_series#Commercial_architecture_(702/705/7080)&quot; rel=&quot;noreferrer&quot;&gt;IBM 700/7000&lt;/a&gt; series used a memory consisting of six-bit characters. The zone bits of the characters were used to indicate the sign of a number, and the last digit of a number contained its sign, also indicating the end of the number.&lt;/p&gt;&#xA;&lt;p&gt;This also explains the funny way EBCDIC encodes letters, because it was influenced by those encodings.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-02-22T07:54:38.863" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18068" PostTypeId="1" CreationDate="2021-02-22T09:10:49.393" Score="10" ViewCount="760" Body="&lt;p&gt;There is a not-unheard-of technique in DOS software to detect certain keypresses (like &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Break&lt;/kbd&gt;) by intercepting the keyboard interrupt (IRQ 1) and reading the scancode directly from the keyboard controller. If the scancode matches, it is routed to the appropriate handler; if it does not match, the interrupt is forwarded to the original service routine, where the same scancode is read from the controller again and processed as usual. Here’s for example &lt;a href=&quot;http://www.delorie.com/bin/cvsweb.cgi/djgpp/src/libc/go32/exceptn.S?rev=1.7&quot; rel=&quot;nofollow noreferrer&quot;&gt;DJGPP libc doing something like this&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This technique uncovers &lt;a href=&quot;https://bugs.launchpad.net/qemu/+bug/1574246&quot; rel=&quot;nofollow noreferrer&quot;&gt;a particularly irritating bug in QEMU&lt;/a&gt; in that the scancode byte read from the keyboard controller is immediately replaced with the next queued byte, so the original service routine has no chance to read the scancode again, making some programs unusable.&lt;/p&gt;&#xA;&lt;p&gt;If I read their code correctly, other emulators, which &lt;em&gt;seemingly&lt;/em&gt; work fine, tend to have a single-byte buffer and a timer that checks if the buffered byte has been read, and if so, updates the buffer with the next queued byte. (Which still leaves a window for a race condition, although one rather unlikely to be hit – and fortunately enough, one &lt;em&gt;less&lt;/em&gt; likely to be hit as the CPU becomes faster.) But I don’t know if this is just a hack deemed ‘good enough’ for emulation, or if it accurately reflects the behaviour of physical hardware.&lt;/p&gt;&#xA;&lt;p&gt;How does real hardware operate in this case? When does a new scancode byte arrive at the keyboard controller port?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-23T11:04:11.917" LastActivityDate="2021-03-04T06:34:50.830" Title="When does an IBM-compatible PC keyboard controller dequeue scancodes?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;emulation&gt;&lt;keyboards&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18069" PostTypeId="2" ParentId="18066" CreationDate="2021-02-22T11:13:03.547" Score="6" Body="&lt;p&gt;(Another &amp;quot;what was the first&amp;quot; question where it's basically impossible to answer it unless one goes through &lt;strong&gt;all&lt;/strong&gt; computer instruction sets ...)&lt;/p&gt;&#xA;&lt;p&gt;One example of the usage of &amp;quot;logical&amp;quot; is the IBM 7090 (1959), as one can verify in the &lt;a href=&quot;http://bitsavers.org/pdf/ibm/7090/22-6528-4_7090Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;manual&lt;/a&gt; where the shift instructions are listed starting on page 31:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ALS  Accumulator Left Shift&#xA;ARS  Accumulator Right Shift&#xA;LGL  Logical Left Shift&#xA;LGR  Logical Right Shift&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;No mentioning of &amp;quot;arithmetic&amp;quot;, though. And the definition of the actual operation is somewhat different from the current usage (&amp;quot;logical&amp;quot; operations treat AC and MQ as a pair, but don't duplicate the sign bit as in the &amp;quot;accumulator&amp;quot; operations).&lt;/p&gt;&#xA;&lt;p&gt;As the IBM 7090 is a transistorized version of IBM 709 (1957), I would assume it also applies to the IBM 709 (though I have not seen an instruction set list for this one).&lt;/p&gt;&#xA;&lt;p&gt;The term &amp;quot;logical&amp;quot; is also used in other places to distinguish &amp;quot;arithmetic&amp;quot; operations (adding etc.) from logical (bitwise) operations.&lt;/p&gt;&#xA;&lt;p&gt;You can derive the obvious &amp;quot;speculations&amp;quot; how this kind of naming came into existence from that.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-02-22T11:13:03.547" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18070" PostTypeId="2" ParentId="18068" CreationDate="2021-02-22T11:35:49.090" Score="9" Body="&lt;p&gt;&lt;em&gt;[Caveat, this is from memory, and about a real PC-AT, with real, 16 bit BIOS and code]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When does an IBM-compatible PC keyboard controller dequeue scancodes?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;(I assume this is about a PC-AT, not a PC or PC-XT)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Never, as there is no queue. At least none in hardware.&lt;/p&gt;&#xA;&lt;p&gt;The 8042 has simply 4 registers Data In/Out, Status and Command. All synchronisation has to be done 'manually'. Reading the data register clears the Output Buffer Full flag, interrupting the 8042 CPU, enabling it to enter the next byte (byte, not scan code) - unless that function is disabled, which is what to be done to avoid overrun and enable multiple reads.&lt;/p&gt;&#xA;&lt;h2&gt;Details:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;keyboard interrupt (IRQ 1)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While the interrupt line is #1 the interrupt in question is 09h&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here’s for example DJGPP libc doing something like this.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'm not really sure if that's a good code, as any KBD handler should disable the keyboard before reading a keystroke - at least that's what the BIOS does, and all handlers I've seen - to avoid overrun.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This technique uncovers a particularly irritating bug in QEMU in that the scancode read from the keyboard controller is immediately replaced with the next queued scancode,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Is it really a bug or simply working like the original 8042 did when the keyboard doesn't get disabled before reading?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;other emulators, [...] tend to have a single-scancode buffer and a timer [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sounds like a bad hack.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Which still leaves a window for a race condition,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The very same race condition an original AT, as slow as it was, had with the keyboard controller.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I don’t know if this is just a hack deemed [...] or if it accurately reflects the behaviour of physical hardware.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Maybe good enough on rather fast machines.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How does real hardware operate in this case?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The 8042AH does only feature an interface of 4 registers.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Data Buffer In - Data from main CPU, i.e. holds last item written with A0=0 (Port 60h)&lt;/li&gt;&#xA;&lt;li&gt;Data Buffer Out - Data prepared to be read by main CPU, i.e. what gets delivered when reading with A0=0 (Port 60h)&lt;/li&gt;&#xA;&lt;li&gt;Data Buffer Status - Various Satus Flags to be read by main CPU with A0=1 (Port 64h)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bit 0 -&amp;gt; Output Buffer Full - can be as well outputted on a dedicated pin&lt;/li&gt;&#xA;&lt;li&gt;Bit 1 -&amp;gt; Input Buffer Full - can be as well outputted on a dedicated pin&lt;/li&gt;&#xA;&lt;li&gt;All others: Application specific&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Instruction Register - Command from main CPU, written with A0=1 (Port 64h)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All handling of these ports within the 8042 is done by software. There is&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Implied hardware support for setting OBF when the output buffer gets written.&lt;/li&gt;&#xA;&lt;li&gt;Implied hardware support for clearing IBF when the input buffer is read.&lt;/li&gt;&#xA;&lt;li&gt;An interrupt can be generated when data is written to the input buffer.&lt;/li&gt;&#xA;&lt;li&gt;A dedicated jump instructions to test IBF/OBF.&lt;/li&gt;&#xA;&lt;li&gt;A special instruction for setting certain status bits.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When does a new scancode arrive at the keyboard controller port?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As soon as the prior gets read out.&lt;/p&gt;&#xA;&lt;p&gt;During normal operation the controller waits for a key press, translates it according to which keycode table is active (XT or AT) and puts it into the Output Buffer register when empty. otherwise it waits for OBF to go away to place it. In case of multi byte codes (like all break or function codes or alike), it puts repeats this step for as many bytes there are.&lt;/p&gt;&#xA;&lt;p&gt;That's why the original AT BIOS (*1) does send a disable keyboard command before doing anything else:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; Disable Keyboard Input&#xA;    CLI&#xA;    SUB  CX,CX     ; Wait 'Time'&#xA;LP1:&#xA;    IN   AL,064h   ; Read Status Port&#xA;    TEST AL,IBF    ; Input Buffer Full (02h) ?&#xA;    LOOPNZ LP1     ; Wait for Empty&#xA;&#xA;    MOV AL,0ADh    ; Disable Opcode&#xA;    OUT 064h,AL    ; Send it&#xA;    STI&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;(The AT BIOS uses a subroutine to do so. See file KYBD on page 5-129 of the March 1986 PC-AT Technical Reference Manual)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Doing so leaves enough time to read and process whatever the controller has to offer. Most important here, the output buffer (what's delivered when reading port 060h) will keep it's value indefinite, so it can be read as often as needed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Again, this is the workings of the original 8042 as used with the IBM PC-AT and later PS/2. Might be different with newer chipsets.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The XT BIOS didn't do so. I guess it simply became a necessity with the faster PC-AT.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-23T17:43:41.733" LastActivityDate="2021-02-23T17:43:41.733" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18071" PostTypeId="2" ParentId="18066" CreationDate="2021-02-22T12:37:36.710" Score="12" Body="&lt;p&gt;The 1955 manual for the &lt;a href=&quot;http://bitsavers.org/pdf/ibm/704/24-6661-2_704_Manual_1955.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 704&lt;/a&gt; on page 7 talks about data representation in the computer.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When a word is interpreted as numerical data, the&#xA;zero position acts as the sign of the word. (…) When&#xA;a &lt;em&gt;logical&lt;/em&gt; operation is performed on a word, the&#xA;word is interpreted as a 32-bit signless number.&#xA;As an algebraic (signed) binary number, a word can&#xA;represent (…)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In addition, there is a section, around page 19 on 'logical operations' in general, which include for example the obvious case of AND and OR, and the less-obvious (to me) CAL, clear and add logical word.&lt;/p&gt;&#xA;&lt;p&gt;I conclude that focusing on the shift instructions is somewhat misplaced. The distinction is about the datatype and how the programmer intends to use it. Once you have that focus, then naming the shift instruction naturally follows.&lt;/p&gt;&#xA;&lt;p&gt;Curiously, though, the 704 has a Logical Left shift but no Logical Right shift.  Logical Left is distinguished from Long Left Shift by whether the sign bit of the MQ is involved (it &lt;em&gt;is&lt;/em&gt; for Logical Left, it &lt;em&gt;is not&lt;/em&gt; for Long Left).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Footnote: the 709 instruction set seems somewhat strange to me. In a 36-bit machine the accumulator has 38 bits: 35 &amp;quot;operand bits&amp;quot;, a sign bit S, and the so-called P and Q bits.&lt;/p&gt;&#xA;&lt;p&gt;The strangeness is in part due to the 709 being a sign-and-magnitude machine.  &amp;quot;Arithmetic&amp;quot; operands are loaded into S and 1-35 as you might expect; P and Q are cleared. Thus a signed 36-bit operand is lengthened into 38 bits signed. Arithmetic operations may overflow into P and Q, but not further into S.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Logical&amp;quot; operands are loaded into P and 1-35; Q and S are cleared. An unsigned operand is lengthened into 38 bits unsigned.&lt;/p&gt;&#xA;&lt;p&gt;For shifts, the sign bit is not involved. Single-length shifts in the AC involve P, Q, and 1-35. There's no arithmetic/logical distinction.  The only difference is double-length shifts involving the MQ. &amp;quot;Long left shift&amp;quot; does not involve the MQ's S bit; bits leaving MQ 1 end up in AC 35.  &amp;quot;Logical left shift&amp;quot; include MQ S.  MQ 1 goes to MQ S, and MQ S goes to AC 35.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-02-24T02:17:47.187" LastActivityDate="2021-02-24T02:17:47.187" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18072" PostTypeId="1" CreationDate="2021-02-22T18:06:50.110" Score="8" ViewCount="729" Body="&lt;p&gt;AFAIK, in Windows 3.11 it was possible to enter all kind of subnet masks, e.g. 255.255.255.1. Nowadays, the bits of the mask have to be consecutive.&lt;/p&gt;&#xA;&lt;p&gt;However, I could imagine that such a unusual subnet mask actually worked as long as it was applied to all computers consistently. An algorithm using bitwise operators would come to a result and be able to conclude whether a packet is targeted or not.&lt;/p&gt;&#xA;&lt;p&gt;Did this actually work?&lt;/p&gt;&#xA;&lt;p&gt;Let's consider typical home use hardware of that time such as hubs and switches on Ethernet level, not routers or gateways which might have a different OS.&lt;/p&gt;&#xA;" OwnerUserId="11879" LastEditorUserId="15334" LastEditDate="2021-02-23T07:20:38.653" LastActivityDate="2021-03-31T23:01:08.860" Title="In Windows 3.11, did a unusual subnet mask actually work?" Tags="&lt;windows-3.x&gt;&lt;network&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18073" PostTypeId="2" ParentId="18065" CreationDate="2021-02-22T19:39:06.477" Score="1" Body="&lt;p&gt;Singer made a series of retail systems which were taken over by ICL and rebranded.&lt;/p&gt;&#xA;&lt;p&gt;The ICL System 10 used 6-bit bytes for decimal and character data.&lt;/p&gt;&#xA;&lt;p&gt;The ICL System 25 used 8-bit bytes, which were used for full ASCII text, and in arithmetic operations as packed decimal (two 4-bit nibbles holding 0x00 to 0x09).&lt;/p&gt;&#xA;&lt;p&gt;Singer were fairly adventurous. They made sewing machine in Glasgow (the factory was big enough to have its own Metro station). During WW II, they used their engineering skills to make the Norden bombsight (which was partly electronic), and branched out from there to office systems.&lt;/p&gt;&#xA;" OwnerUserId="15606" LastActivityDate="2021-02-22T19:39:06.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18074" PostTypeId="2" ParentId="18068" CreationDate="2021-02-22T20:03:54.770" Score="12" Body="&lt;p&gt;About 0.6 to 1 ms after the last one is read.&lt;/p&gt;&#xA;&lt;p&gt;The 8042 keyboard controller does not queue scancodes; it just stops receiving bits from the keyboard until a byte is read from port 0x60. When a scancode byte is read out, the controller gets ready to receive another byte from the keyboard. But since serial communication is not instantaneous, actually receiving a scancode byte takes some time, which means the last received byte is going to linger on the port for a while. And it turns out someone has already measured how long it is. Michal Necasek of &lt;em&gt;OS/2 Museum&lt;/em&gt; &lt;a href=&quot;https://www.os2museum.com/wp/how-fast-is-a-ps-2-keyboard/&quot; rel=&quot;noreferrer&quot;&gt;writes&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;IBM gives the CLK inactive period as 30-50 μs, and CLK active period as 30-50 μs as well. The time to transfer one bit is then 60-100 μs. That’s a bit rate of about to 10-16.67 kHz, which at 11 bits per byte translates to about 900 to 1,500 bytes per second. In other words, it takes 660 to 1,100 μs to transfer one byte (scan code) from the keyboard.&lt;/p&gt;&#xA;&lt;p&gt;[…] In reality the time is likely longer because the keyboard controller is not infinitely fast and the keyboard is probably not communicating at the maximum allowed speed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To put things into perspective, the original IBM 5150’s CPU frequency of 4.77 MHz translates to about 0.21 µs per cycle. 660 µs is plenty time to forward the interrupt to another handler (which takes at most a couple dozen instructions anyway). Which means that even at the original PC’s speed, it’s unlikely this technique would lead to lost scancodes. CPUs have only gotten faster since then, while keyboard controllers… well, didn’t. And the latency can only get higher when &lt;a href=&quot;https://www.win.tue.nl/%7Eaeb/linux/kbd/scancodes-10.html#ss10.3&quot; rel=&quot;noreferrer&quot;&gt;scancode translation&lt;/a&gt; comes into play: the blog goes on to cite an example of a key release code that takes three bytes on the wire being translated into two bytes when read out from the controller.&lt;/p&gt;&#xA;&lt;p&gt;Of course emulators don’t receive scancodes from a direct serial link to the keyboard; the host environment sends them keyboard events, which most emulators translate into an internal queue of scancodes. But all in all, it seems that delaying the availability of already-queued scancode bytes replicates observable controller behaviour quite accurately.&lt;/p&gt;&#xA;&lt;p&gt;(Thanks to &lt;a href=&quot;/u/1912/&quot;&gt;@john_e&lt;/a&gt; for pointing me to that blog post.)&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-23T15:22:59.443" LastActivityDate="2021-02-23T15:22:59.443" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18075" PostTypeId="2" ParentId="18063" CreationDate="2021-02-23T04:06:36.373" Score="4" Body="&lt;p&gt;The Myst stacks include 3 XFCNs (eXternal FunCtioNs) and 19 XCMDs (eXternal ComManDs).  Of these:&lt;/p&gt;&#xA;&lt;p&gt;Three -- variant, Picture, and Movie -- were included with HyperCard and have a Claris copyright. Picture was probably written in Pascal, variant was probably written in C. Some of the features of the Movie XCMD were based on Cyan's feedback.&lt;/p&gt;&#xA;&lt;p&gt;One -- moveCursor -- might be &lt;a href=&quot;https://archive.org/details/hypercard_movecursorsit&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; freeware XCMD written by Jeff Fischer.&lt;/p&gt;&#xA;&lt;p&gt;Ten were developed by Symplex Systems/John Miller as part of &lt;a href=&quot;https://archive.org/details/hypercard_hypertint-demo&quot; rel=&quot;nofollow noreferrer&quot;&gt;HyperTint&lt;/a&gt; and DeCurse. These were commercially available and required licensing for redistribution. These were written in C.&lt;/p&gt;&#xA;&lt;p&gt;Eight were developed by Cyan (Primarily Richard Watson). These are mostly C but there may be one or two in assembly.&lt;/p&gt;&#xA;&lt;p&gt;External Commands and External Functions (XCMDs, XFCNs) were described in Appendix A of the &lt;a href=&quot;https://cancel.fm/stuff/share/HyperCard_Script_Language_Guide_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;HyperCard Script Language Guide&lt;/a&gt;. The provided examples are in Pascal, C, and 68k Asm.&lt;/p&gt;&#xA;&lt;p&gt;Also see &lt;a href=&quot;https://hc.quibble.com/thread/6362&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; HyperCard mailing list thread for some reminiscence by some of the people involved.&lt;/p&gt;&#xA;" OwnerUserId="3261" LastActivityDate="2021-02-23T04:06:36.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18076" PostTypeId="2" ParentId="18072" CreationDate="2021-02-23T06:04:19.330" Score="16" Body="&lt;p&gt;The first question would be: &amp;quot;with what Winsock stack?&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;As originally shipped, Windows for Workgroups didn't support IP at all. Somewhere along the line (but I'm not sure of the exact date) Microsoft specified the Winsock API. To use it, however, you had to install a Winsock implementation, of which there were a number (Trumpet!, Netscape, KA9Q&lt;sup&gt;1&lt;/sup&gt;, to name a few that I recall). Microsoft did release one, but not until others had been around for a couple of years (or so).&lt;/p&gt;&#xA;&lt;p&gt;I did a quick test with WfW 3.11 using Microsoft's TCP stack (Microsoft TCP/IP-32.3.11b), and it accepted a configuration with a dis-contiguous network mask:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xUjbq.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xUjbq.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It does make some attempt at sanity checking though. For example:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bIcQd.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bIcQd.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As for getting a network set up and working this way...sorry, but that seems like a little more work than I'm willing to invest in this particular bit of trivia. Probably possible, but to really verify, I guess I'd have to set up at least 3 machines, plus a router, with two machines on one subnet and one on another. Just too much work.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;sup&gt;&#xA;1. Technically, I believe KA9Q was actually for MS-DOS, but WfW ran on top of MS-DOS.&#xA;&lt;/sup&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2021-03-31T23:01:08.860" LastActivityDate="2021-03-31T23:01:08.860" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18077" PostTypeId="1" AcceptedAnswerId="18078" CreationDate="2021-02-23T07:20:56.860" Score="5" ViewCount="909" Body="&lt;p&gt;AOL, one of the most successful early Internet service providers, started life in 1983 as a company called Control Video Corporation selling downloadable games for the Atari 2600; this became Quantum Computer Services offering online services for the Commodore 64, then Apple, then PC; in 1989 it became known as AOL.&lt;/p&gt;&#xA;&lt;p&gt;Presumably there was some point at which it started offering email to other customers of the same company (though this might be fuzzy depending on exactly what counts as email).&lt;/p&gt;&#xA;&lt;p&gt;Presumably there was some later point at which it started offering email to customers of other companies, i.e. Internet email; this seems likely to be more sharply defined.&lt;/p&gt;&#xA;&lt;p&gt;When did AOL start offering Internet email?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-23T11:12:13.773" Title="When did AOL start offering Internet email?" Tags="&lt;history&gt;&lt;internet&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18078" PostTypeId="2" ParentId="18077" CreationDate="2021-02-23T10:09:12.850" Score="13" Body="&lt;p&gt;The AOL “international e-mail gateway” &lt;a href=&quot;https://www.technologizer.com/2010/05/24/aol-anniversary/&quot; rel=&quot;noreferrer&quot;&gt;was announced on June 3, 1992&lt;/a&gt;, and seemingly available there and then:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;VIENNA, Va., June 3 (1992) /PRNewswire/ — America Online subscribers can now communicate with millions of people throughout the world by using an electronic mail gateway that connects to a wide variety of commercial and educational e-mail systems. America Online subscribers are not charged extra for use of this gateway.&lt;/p&gt;&#xA;&lt;p&gt;The new e-mail gateway allows America Online subscribers to easily send mail and to receive mail from users of CompuServe, MCI Mail, AT&amp;amp;T Mail, AppleLink, Sprint Mail and other Internet-connected systems, without requiring a separate account on those services.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;From then on, AOL users could send and receive Internet email.&lt;/p&gt;&#xA;&lt;p&gt;Other Internet-based features were added progressively, through the “Internet Center”: Usenet newsgroups in 1993 (which, probably in combination with price reductions, &lt;a href=&quot;http://www.cdromcollector.com/AOL/S_index.html&quot; rel=&quot;noreferrer&quot;&gt;massive marketing campaigns&lt;/a&gt;, and the availability of a Windows client, would lead to &lt;a href=&quot;https://en.wikipedia.org/wiki/Eternal_September&quot; rel=&quot;noreferrer&quot;&gt;Eternal September&lt;/a&gt;), WAIS and Gopher in 1994, and the web in 1995.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-23T11:12:13.773" LastActivityDate="2021-02-23T11:12:13.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18079" PostTypeId="1" AcceptedAnswerId="18080" CreationDate="2021-02-23T15:17:27.657" Score="37" ViewCount="6217" Body="&lt;p&gt;AOL was a big early Internet service provider, and of course by the late nineties, the most popular Internet protocol was the web; most users spent most of their Internet time in a web browser.&lt;/p&gt;&#xA;&lt;p&gt;But if you go back a few years before that, say before 1993, before the web existed, that was still the era of Windows, when people expected a graphic user interface.&lt;/p&gt;&#xA;&lt;p&gt;What client program, what user interface, did AOL provide for its subscribers at that time?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-26T18:29:24.747" Title="What did AOL use for pre-web GUI client?" Tags="&lt;history&gt;&lt;internet&gt;&lt;gui&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18080" PostTypeId="2" ParentId="18079" CreationDate="2021-02-23T15:26:04.430" Score="60" Body="&lt;p&gt;AOL provided (and still provide) their own client, which — at least back then — was called “America Online”. This was available on a variety of platforms, including DOS:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://winworldpc.com/product/aol/10&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bzaHr.png&quot; alt=&quot;Screenshot of America Online for DOS&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(based on &lt;a href=&quot;https://tedium.co/2019/06/20/geoworks-geos-history/&quot; rel=&quot;noreferrer&quot;&gt;GeoWorks&lt;/a&gt;) and Windows 3:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://winworldpc.com/product/aol/20&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9svZ5.png&quot; alt=&quot;Screenshot of America Online for Windows 3&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-23T15:59:03.723" LastActivityDate="2021-02-23T15:59:03.723" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18081" PostTypeId="2" ParentId="1616" CreationDate="2021-02-23T16:03:43.933" Score="1" Body="&lt;p&gt;The whole galaxy and all the planets were generated on the fly from a few small sets of strings and a pseudo-random number generator. The fact that the number generating sequence always started with the same seed meant it always made the same names and planets!&lt;/p&gt;&#xA;&lt;p&gt;It's actually quite easy to do something similar in BASIC, using RANDOMIZE and RND.&lt;/p&gt;&#xA;&lt;p&gt;Make a string like &amp;quot;KAKEKIKOKUFAFEFIFFOFULALELILOLUOSONAX&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;Start with a seed via RANDOMIZE - say RANDOMIZE seed+planet.no&lt;/p&gt;&#xA;&lt;p&gt;Generate a number with RND to be the length of the name, and with a FOR loop, generate a random odd number, and add the 2 characters in the above string starting at that position to the planet name until you hit the needed length.&lt;/p&gt;&#xA;&lt;p&gt;The above string will give you names like &amp;quot;Kafila&amp;quot;, &amp;quot;Liax&amp;quot;, &amp;quot;Nakefi&amp;quot;, and &amp;quot;Kukuos&amp;quot;. The more combinations you add, the more diverse the names.&lt;/p&gt;&#xA;&lt;p&gt;Generate all the random data you want for that planet - tech level, planet size, whatever. You can make some based on formulas, like population based on size x tech level or whatever suits your purpose. Get as complex as you want.&lt;/p&gt;&#xA;&lt;p&gt;Now, the trick is, because computer random number generators are not truly random, every time you start a RANDOMIZE with the same seed, you'll get the same planet, no matter how much data you generate! This way its possible to have literally thousands of planets, which will always be the same, yet only have the data for the one current planet in memory or even stored on disk.&lt;/p&gt;&#xA;" OwnerUserId="20882" LastActivityDate="2021-02-23T16:03:43.933" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18082" PostTypeId="1" AcceptedAnswerId="18087" CreationDate="2021-02-23T16:47:01.437" Score="2" ViewCount="160" Body="&lt;p&gt;I am in possession of a working 1986 Compaq Portable II. However, I couldn't find a 5.25&amp;quot; floppy with the proper version of DOS on it to actually make the computer, ya know, work.&lt;/p&gt;&#xA;&lt;p&gt;I've since bought a Gotek USB floppy emulator, taken out the old 5.25&amp;quot; floppy drive, and replaced it.&lt;/p&gt;&#xA;&lt;p&gt;Those who don't know what that is can view the following link:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B088ZT7J7G&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/Gotek-SFR1M44-U100-1-44MB-Floppy-Emulator/dp/B088ZT7J7G/ref=sr_1_4?crid=2HVO8MK6R5O93&amp;amp;dchild=1&amp;amp;keywords=gotek+floppy+emulator&amp;amp;qid=1614098394&amp;amp;sprefix=gotek+%2Caps%2C228&amp;amp;sr=8-4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I've also obtained a IDE power to Molex 4-pin power cable, and connected the hard drive to the emulator. So far so good. That's power taken care of.&lt;/p&gt;&#xA;&lt;p&gt;However, when I went to connect the ribbon to the two drives, I was disheartened to see that the amount of pins between the two drives were different. One pin was filled on the hard drive's end making (if I remember correctly) 39 pins for the hard drive and somewhere around 34 pins for the emulator.&lt;/p&gt;&#xA;&lt;p&gt;My question is this: does an adapter or cable exist for a 3.5 inch floppy to 5.25 hard drive connection, or am I going to have to attempt to solder a cable that can actually make this connection work? I can't find such a cable anywhere online.&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="20903" LastActivityDate="2021-02-24T06:58:56.790" Title="&quot;Restoring&quot; a 1986 Compaq Portable II (Cabling question)" Tags="&lt;floppy-disk&gt;&lt;floppy-drive&gt;&lt;restoration&gt;&lt;compatibility&gt;&lt;compaq&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18083" PostTypeId="1" AcceptedAnswerId="18085" CreationDate="2021-02-23T16:48:58.100" Score="2" ViewCount="153" Body="&lt;p&gt;Is there a way to write IBM SaveDskF disk images to a floppy on a modern machine?&lt;/p&gt;&#xA;&lt;p&gt;The floppy drive is connected via USB.&lt;/p&gt;&#xA;&lt;p&gt;Some comment somewhere said to use WinImage, but I tried that and it said the file was not a floppy image. The Linux &lt;code&gt;file&lt;/code&gt; command says it is.&lt;/p&gt;&#xA;&lt;p&gt;(Also, I have tried the &lt;code&gt;dd&lt;/code&gt; command, and the Balena Etcher image writing tool, and neither worked.)&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="15334" LastEditDate="2021-02-24T06:32:51.777" LastActivityDate="2021-02-24T06:32:51.777" Title="How to use IBM SaveDskF floppy format on modern machine" Tags="&lt;floppy-drive&gt;&lt;disk-image&gt;&lt;software-recommendation&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18085" PostTypeId="2" ParentId="18083" CreationDate="2021-02-23T16:54:51.453" Score="3" Body="&lt;p&gt;USB floppy drives only support a limited set of disk formats: 720KiB (on DD floppies only), 1440KiB (“standard” HD), and in some cases, 1232KiB (“mode 3”, the format used on X68000 systems) and 1200KiB (so that 5.25” HD images can be written).&lt;/p&gt;&#xA;&lt;p&gt;If your images are 1440KiB images, then all that’s needed is to extract the raw sector image, and write it using &lt;code&gt;cp&lt;/code&gt; or any other tool capable of writing to a block device (which even includes the shell). I don’t know of such a tool off-hand, but you can run &lt;a href=&quot;https://www.ibm-pc.se/diagnostic/ibm/ps2/ps2files/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;LOADDSKF&lt;/code&gt;&lt;/a&gt; in an emulator to write your image to a sector image. For example, using &lt;a href=&quot;https://dosbox-x.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOSBox-X&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;place &lt;code&gt;LOADDSKF.EXE&lt;/code&gt; and your floppy images in a directory;&lt;/li&gt;&#xA;&lt;li&gt;start DOSBox-X there;&lt;/li&gt;&#xA;&lt;li&gt;mount a 1474560-byte image as a floppy: &lt;code&gt;imgmount -t floppy a target.img&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;“load” the SaveDskF image onto the “floppy”: &lt;code&gt;loaddskf source.dsk a:&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;unmount the target image: &lt;code&gt;imgmount -u a&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This will produce a &lt;code&gt;target.img&lt;/code&gt; file containing the raw sector dump, which you can then copy to your actual disk using your floppy drive, &lt;em&gt;e.g.&lt;/em&gt; &lt;code&gt;cp target.img /dev/sdX&lt;/code&gt;, replacing &lt;code&gt;X&lt;/code&gt; as appropriate (on Linux; you’d use different commands on Windows).&lt;/p&gt;&#xA;&lt;p&gt;(DOSBox’s floppy emulation isn’t good enough for &lt;code&gt;LOADDSKF&lt;/code&gt;, but DOSBox-X’s is.)&lt;/p&gt;&#xA;&lt;p&gt;Alternatively, using QEMU, you can avoid generating intermediary images entirely; you’ll need a proper DOS setup, including your disk images and &lt;code&gt;LOADDSKF&lt;/code&gt;. Start QEMU with your USB floppy drive connected to the emulation’s floppy, and your DOS setup as the hard drive, then run &lt;code&gt;LOADDSKF&lt;/code&gt; directly.&lt;/p&gt;&#xA;&lt;p&gt;There’s no way to write non-standard SaveDskF images (&lt;em&gt;e.g.&lt;/em&gt; XDF images) using a standard USB floppy. You’ll need to use another floppy controller (KryoFlux, Greaseweazle, FluxEngine...) and an old-school floppy drive, &lt;em&gt;and&lt;/em&gt; find a way to convert your disk images into something that can be written using whatever controller you have — &lt;a href=&quot;https://github.com/keirf/Disk-Utilities&quot; rel=&quot;nofollow noreferrer&quot;&gt;Keir Fraser’s Disk Utilities&lt;/a&gt; might be able to do this (I haven’t tried).&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-23T17:21:32.397" LastActivityDate="2021-02-23T17:21:32.397" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18086" PostTypeId="2" ParentId="18079" CreationDate="2021-02-23T18:32:19.620" Score="62" Body="&lt;p&gt;In addition to Stephen Kitt's answer, you can go back even further from Windows 3.1 to the Apple II version of America Online, circa 1989. Certainly not as popular or long-lived as the MS-DOS and Windows versions, but it did exist for the 8-bit platform!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JqWz3.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JqWz3.jpg&quot; alt=&quot;Apple II AOL home screen&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;While some things were done in graphics mode, most of the text and &amp;quot;productivity stuff&amp;quot; was done through a standard text mode.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FLuCz.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FLuCz.jpg&quot; alt=&quot;text GUI&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I was a beta tester for &lt;a href=&quot;https://en.wikipedia.org/wiki/AppleLink&quot; rel=&quot;noreferrer&quot;&gt;AppleLink&lt;/a&gt; at the time they rebranded to AOL, so I still have two 5.25&amp;quot; floppies in a mailer with a welcome letter somewhere.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately due to the nature of the service, you probably won't find any screen shots beyond these pictures and a few others simply because you need a working server to communicate with to get into the more interesting stuff. But from memory, games were in graphics mode as was some other &amp;quot;fun stuff&amp;quot;, but the majority of your experience was in the text mode.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2021-02-24T15:06:05.347" LastActivityDate="2021-02-24T15:06:05.347" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18087" PostTypeId="2" ParentId="18082" CreationDate="2021-02-23T18:36:33.057" Score="6" Body="&lt;p&gt;As can be seen in &lt;a href=&quot;https://youtu.be/DqaWCobAbQ4&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt;, the hard drive and floppy drive should have separate cables connecting them to the multi-I/O card.&lt;/p&gt;&#xA;&lt;p&gt;To connect your floppy emulator, you need a 34-wire cable with the appropriate connectors on either end. Connect one end to the emulator, the other to the controller card, and you should be good to go. Some (less old) cables for single drives only have two connectors altogether; this would be ideal here. If you have one with a twist, connect the emulator after the twist. You may also find cables with two types of connectors (edge connector as used in the Portable II, and pin-based as used for the controller end); ignore the connectors you don’t need.&lt;/p&gt;&#xA;&lt;p&gt;There should be no soldering involved, and the emulator shouldn’t be connected to the hard drive.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-24T06:58:56.790" LastActivityDate="2021-02-24T06:58:56.790" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18088" PostTypeId="1" AcceptedAnswerId="18090" CreationDate="2021-02-23T21:16:43.200" Score="21" ViewCount="1864" Body="&lt;p&gt;As described in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2156/how-are-amiga-libraries-structured&quot;&gt;these answers&lt;/a&gt;, the jump table offsets to functions contained in an AmigaOS library are always negative values. The reason for this is not intuitive to me, but I suspect &lt;a href=&quot;https://en.wikipedia.org/wiki/Carl_Sassenrath&quot; rel=&quot;noreferrer&quot;&gt;Carl Sassenrath&lt;/a&gt; had some good reason(s) for doing it this way (as opposed to just using positive offsets).&lt;/p&gt;&#xA;&lt;p&gt;What functionality or convenience is gained by having these offsets be negative values from the base address?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="6659" LastEditDate="2021-02-24T01:09:18.777" LastActivityDate="2021-02-26T21:18:01.157" Title="Why do Amiga Libraries have negative entry points?" Tags="&lt;amiga&gt;&lt;design-choices&gt;&lt;amiga-kickstart&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18089" PostTypeId="2" ParentId="18083" CreationDate="2021-02-23T21:27:18.330" Score="1" Body="&lt;p&gt;In case of uncompressed images, you can extract them (without having to use an actual diskette) using &lt;a href=&quot;https://github.com/aaru-dps/Aaru/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aaru&lt;/a&gt; (ex-DiscImageChef).&lt;/p&gt;&#xA;&lt;p&gt;AFAIK there is no modern tool which handles compressed images (staring with &lt;code&gt;AA 5A&lt;/code&gt;), but there exist &lt;code&gt;DIUNPACK.EXE&lt;/code&gt; for OS/2 which supposedly handles them (available &lt;a href=&quot;https://www.sac.sk/files.php?d=7&amp;amp;p=18&quot; rel=&quot;nofollow noreferrer&quot;&gt;on SAC.SK&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DIUNPACK Release 3.03 01-30-96&#xA;Copyright (C) IBM Corporation 1995, 1996&#xA;&#xA;Diskette Image UNPACKer: Upacks files&#xA;from a diskette image file.&#xA;Usage: diunpack [imagefile] [-options]&#xA; -d &amp;lt;directory&amp;gt; set the target directory&#xA; -l list files (don't unpack)&#xA; -p prompt for copy of individual files&#xA; -q suppress beeps&#xA; -n never overwrite files without prompting&#xA; -x &amp;lt;filename&amp;gt; extract file&#xA; -j junk path info (don't maintain disk image&#xA;    directories)]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;OS/2 console programs can be run under Windows NT or Windows 2000 (and &lt;a href=&quot;https://github.com/reactos/reactos/commit/5ae8dafcd60da55033bee9cc391a3aa49d50920f&quot; rel=&quot;nofollow noreferrer&quot;&gt;possibly ReactOS&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="3783" LastEditorUserId="3783" LastEditDate="2021-02-23T21:48:52.693" LastActivityDate="2021-02-23T21:48:52.693" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18090" PostTypeId="2" ParentId="18088" CreationDate="2021-02-23T22:06:43.090" Score="28" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What functionality or convenience is gained by having these offsets be negative values from the base address?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It provided easy access to two lists that can be extended independently in future versions with a single pointer.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read:&lt;/h2&gt;&#xA;&lt;p&gt;A single pointer can only point a single memory location (yes, sound obvious, but stay with me). So at first sight there can be only a single data structure that pointer points to. In case of Amiga libraries that is the &lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node0626.html#line33&quot; rel=&quot;nofollow noreferrer&quot;&gt;Library structure&lt;/a&gt; describing the library and its usage.&lt;/p&gt;&#xA;&lt;p&gt;But to access functions there needs to be a second data structure holding entry points (either directly or as addresses (*1)). The two conventional methods to add something like entry points/jump tables are&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Locate all entry points after that library structure and use offsets from there on.&lt;/li&gt;&#xA;&lt;li&gt;Add a pointer for an entry point table to the library structure and make all offsets relative to that address.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Solution 1 would make any extension of the structure rather hard, as it would change offsets of functions each time the OS changes/extends the header. Not a good idea for an upward compatible library system.&lt;/p&gt;&#xA;&lt;p&gt;Solution 2 is one most OSes (including Windows) use. It avoids the pitfalls about version dependence. On the down side, it comes with an additional instruction (not really a big issue) and the usage of two pointers. one to identify the library and one to handle the entry point table. This might not seem much, and as mentioned, many OSes did go that way.&lt;/p&gt;&#xA;&lt;p&gt;But not Amiga-OS. They went for a third way: using the one-dimensional nature of address space in both directions. Consider the memory as a (not really) endless sequence of memory cells that can be traversed not only upwards but in both directions, &lt;strong&gt;enabling the addressing of two structures with a single pointer&lt;/strong&gt; - as long as they lie back to back.&lt;/p&gt;&#xA;&lt;p&gt;To see the effect it's helpful to take a look at a nice picture RichF already presented in &lt;a href=&quot;/a/2207/6659&quot;&gt;an answer&lt;/a&gt; to the mentioned question:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gy3RW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gy3RW.png&quot; alt=&quot;Figure 1.1: Amiga Library Structure and Jump Table&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Using the one dimensional nature in both directions offers several advantages:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Both structures can grow with new versions without intruding on either&#xA;&lt;ul&gt;&#xA;&lt;li&gt;New entry points can be added with new library versions&lt;/li&gt;&#xA;&lt;li&gt;The library structure can be extended for newer OS versions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;No need to calculate a second pointer for the jump table&lt;/li&gt;&#xA;&lt;li&gt;No need to handle two pointers (library and entry table)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Only one pointer for everything about that library&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The last point can't be stressed enough.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;One pointer is all any user for that library needs.&lt;/li&gt;&#xA;&lt;li&gt;No programmer has a chance of using the wrong one&lt;/li&gt;&#xA;&lt;li&gt;It makes a unique identifier for the loaded library&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Of course this only works on an ISA allowing negative offsets - handy that the 68k does exactly that :) Speaking of 68k:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There is no indirect jump with a target address in memory&lt;/li&gt;&#xA;&lt;li&gt;Register indirect plus (negative) offset JSR is with 18 clock as fast as an absolute JSR.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Bottom line:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;While the advantages may seem small, they help a lot when it comes to system design in terms of simplicity, usability and upward compatibility.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;And all of that without any disadvantage&lt;/strong&gt; (on 68k).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Here it's important to keep in mind that the Amiga was a rather slow machine - incredibly slow by today's standards. Every cycle counts. At the same time Amiga-OS tried to be as clean and well-defined as possible.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-02-26T21:18:01.157" LastActivityDate="2021-02-26T21:18:01.157" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="18091" PostTypeId="2" ParentId="6009" CreationDate="2021-02-24T00:05:13.723" Score="2" Body="&lt;p&gt;I got a 30 year old Grundig CRT television to work with an Amiga by connecting it via a SCART cable that came from a Profex monitor (which apparently used SCART as input) and turning on &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletext&quot; rel=&quot;nofollow noreferrer&quot;&gt;Teletext&lt;/a&gt; with transparent background (i.e. the option to read Teletext while watching TV in the background). Without turning Teletext on, the TV screen remained black.&lt;/p&gt;&#xA;&lt;p&gt;Teletext would leave a number &amp;quot;100&amp;quot; in the top-left corner of the screen (i.e. the number of the Teletext index page), but I could get rid of the number output by pressing the Teletext zoom button twice, which shows the lower half of the Teletext page (which will be empty here).&lt;/p&gt;&#xA;&lt;p&gt;It was a PAL-only television, but also NTSC games worked perfectly with it. I suspect the Teletext over TV option must have forced some form of re-synchronization on the side of the TV.&lt;/p&gt;&#xA;" OwnerUserId="14576" LastActivityDate="2021-02-24T00:05:13.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18092" PostTypeId="2" ParentId="2998" CreationDate="2021-02-24T07:41:10.887" Score="0" Body="&lt;p&gt;Locomotive BASIC 1.1 on the Amstrad CPC6128 had a fairly decent FILL command. It wasn't the fastest, but then what FILL routines in BASIC were back then? It would do a decent job of filling complex shapes though.&lt;/p&gt;&#xA;&lt;p&gt;This was one of the differences between 1.1 and the BASIC 1.0 supplied with the CPC464.&lt;/p&gt;&#xA;" OwnerUserId="20882" LastActivityDate="2021-02-24T07:41:10.887" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18094" PostTypeId="1" AcceptedAnswerId="18096" CreationDate="2021-02-24T12:01:58.187" Score="12" ViewCount="1447" Body="&lt;p&gt;Prodigy was a big early Internet service provider, and of course by the late nineties, the most popular Internet protocol was the web; most users spent most of their Internet time in a web browser.&lt;/p&gt;&#xA;&lt;p&gt;But if you go back a few years before that, say before 1986, before the web existed, that was even the era predating MacOS 5 and Windows 3.x, when people hardly expected a graphic user interface.&lt;/p&gt;&#xA;&lt;p&gt;How did Prodigy provide &lt;strong&gt;GUI&lt;/strong&gt; for its subscribers at that time? X-protocol was bandwidth-hungry by 80's standard even via LAN or with &lt;a href=&quot;https://en.wikipedia.org/wiki/Low_Bandwidth_X&quot; rel=&quot;noreferrer&quot;&gt;compressing extentions&lt;/a&gt;, let alone through Dial-up modems under 2400bps.&lt;/p&gt;&#xA;&lt;p&gt;Related: &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/18079/what-did-aol-use-for-pre-web-gui-client&quot;&gt;What did AOL use for pre-web GUI client?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17812" LastActivityDate="2021-02-24T13:24:40.740" Title="What did Prodigy use for pre-web GUI client?" Tags="&lt;history&gt;&lt;internet&gt;&lt;gui&gt;&lt;prodigy&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18095" PostTypeId="2" ParentId="8157" CreationDate="2021-02-24T12:21:06.163" Score="1" Body="&lt;p&gt;Germany had AOL until the late 90s. I have used their ADSL service, but it was pretty expensive (up to 300DM at the time if you've managed to spend all night playing AOE1 on zone.com or spent your nights on yahoo games.)&lt;/p&gt;&#xA;" OwnerUserId="11976" LastActivityDate="2021-02-24T12:21:06.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18096" PostTypeId="2" ParentId="18094" CreationDate="2021-02-24T13:10:22.690" Score="19" Body="&lt;p&gt;Prodigy used &lt;a href=&quot;https://en.wikipedia.org/wiki/NAPLPS&quot; rel=&quot;noreferrer&quot;&gt;NAPLPS&lt;/a&gt; (North American Presentation Level Protocol Syntax) to encode its graphical displays. This is a vector-based graphics originally intended for videotex and teletext services (in North America). Client-side behaviour was implemented using proprietary programming languages.&lt;/p&gt;&#xA;&lt;p&gt;Prodigy clients were available on at least DOS, Windows 3, and classic Mac OS.&lt;/p&gt;&#xA;&lt;p&gt;You can see screenshots of Prodigy, including games, in Benj Endwards’ articles on &lt;a href=&quot;http://www.vintagecomputing.com/index.php/archives/932/prodigy-20-years-ago-today&quot; rel=&quot;noreferrer&quot;&gt;Prodigy’s 20&lt;sup&gt;th&lt;/sup&gt; anniversary&lt;/a&gt; and on &lt;a href=&quot;http://www.vintagecomputing.com/index.php/archives/171&quot; rel=&quot;noreferrer&quot;&gt;the MadMaze Prodigy game&lt;/a&gt;, although static screenshots provided a limited representation — Prodigy screens were slow to load on modems of the time. You can relive that partially by playing &lt;a href=&quot;https://www.vintagecomputing.com/madmaze/&quot; rel=&quot;noreferrer&quot;&gt;MadMaze-II&lt;/a&gt; on a slow Internet connection. If you’re familiar with teletext, the screenshots from the first article should ring a bell (albeit in higher resolution):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.vintagecomputing.com/wp-content/images/prodigy_xmas/prodigy_1_large.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aozeM.jpg&quot; alt=&quot;Prodigy on December 25, 1992&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Benj Edwards (him again!) wrote &lt;a href=&quot;https://www.theatlantic.com/technology/archive/2014/07/where-online-services-go-when-they-die/374099/&quot; rel=&quot;noreferrer&quot;&gt;a detailed article explaining how Prodify works for &lt;em&gt;The Atlantic&lt;/em&gt;&lt;/a&gt;. Michael Dillon wrote a &lt;a href=&quot;http://www.martinreddy.net/gfx/2d/NAP.txt&quot; rel=&quot;noreferrer&quot;&gt;description of the language itself&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-24T13:24:40.740" LastActivityDate="2021-02-24T13:24:40.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18097" PostTypeId="2" ParentId="1616" CreationDate="2021-02-24T13:28:56.447" Score="3" Body="&lt;p&gt;To extend and compliment (and not compete with) the &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/1619/8111&quot;&gt;answer above&lt;/a&gt; also check out &lt;a href=&quot;https://www.bbcelite.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;bbcelite.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Fully documented source code for Elite on the BBC Micro&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.bbcelite.com/deep_dives/generating_system_data.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The algorithms behind the procedural generation of system data&#xA;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I know stackexchange convention is to quote the source a) in case the source later no longer exists (I'd certainly hope not with bbcelite.com) and b) for context for answering, so here are some excerpts:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.bbcelite.com/deep_dives/generating_system_data.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;From the link above&lt;/a&gt; :&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Data on System screen is, under the hood, a work of mathematical&#xA;art. Every bit of data on that screen is procedurally generated from&#xA;the system seeds,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.bbcelite.com/deep_dives/galaxy_and_system_seeds.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Galaxy and system seeds&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Famously, Elite's galaxy and system data is generated procedurally,&#xA;using a set of three 16-bit seed numbers and the Tribonnaci series.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.bbcelite.com/deep_dives/twisting_the_system_seeds.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Twisting the system seeds&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(which sounds a bit like a lyric from a song performed by &lt;a href=&quot;https://en.wikipedia.org/wiki/He%27s_Gonna_Step_on_You_Again#Happy_Mondays_version&quot; rel=&quot;nofollow noreferrer&quot;&gt;Happy Mondays&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Data on each star system in Elite's galaxies is generated&#xA;procedurally, and the core of this process is the set of three 16-bit&#xA;seeds that describe each system in the universe. Each of the eight&#xA;galaxies in the game is generated in the same way, by taking an&#xA;initial set of seeds and &amp;quot;twisting&amp;quot; them to generate 256 systems, one&#xA;after the other.&lt;/p&gt;&#xA;&lt;p&gt;Specifically, given the initial set of seeds, we can generate the next&#xA;system in the sequence by twisting that system's seeds four times. As&#xA;we do these twists, we can extract the system's data from the seed&#xA;values - including the system name, which is generated by the&#xA;subroutine cpl, where you can read about how this aspect works.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="8111" LastEditorUserId="8111" LastEditDate="2021-02-24T13:34:26.187" LastActivityDate="2021-02-24T13:34:26.187" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18098" PostTypeId="1" AcceptedAnswerId="18100" CreationDate="2021-02-24T16:40:56.200" Score="2" ViewCount="107" Body="&lt;p&gt;I'm confused on the behavior of setting the invert bit on the PDP-1's SKP group. The manual states:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The intent of any skip instruction can be reversed by making Bit 5 (normally the Indirect Address Bit) equal to ONE. For example, the Skip on Zero Accumulator instruction, with Bit equal to one, becomes Do Not Skip on Zero Accumulator.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Is this example equivalent to &amp;quot;skip on not zero accumulator&amp;quot;? Can someone give a more specific example or maybe some pseudo-code on how this works? Thanks!&lt;/p&gt;&#xA;" OwnerUserId="20917" LastActivityDate="2021-02-25T07:10:36.127" Title="PDP-1 skip group invert bit functionality" Tags="&lt;assembly&gt;&lt;pdp-1&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18099" PostTypeId="2" ParentId="18098" CreationDate="2021-02-24T17:08:45.953" Score="1" Body="&lt;p&gt;If the normal instruction is &amp;quot;Skip on X, do not skip on not-X&amp;quot; then if setting bit 5 resulted only in &amp;quot;do not skip on X, do not skip on not-X&amp;quot;, it would not be very useful.&lt;/p&gt;&#xA;&lt;p&gt;Therefore we can probably assume the effect of setting bit 5 is to get you &amp;quot;do not skip on X, skip on not-X&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;This is guesswork based on a consideration of reasonableness, not on actual machine experience.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-02-24T17:08:45.953" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18100" PostTypeId="2" ParentId="18098" CreationDate="2021-02-24T18:48:20.993" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Is this example equivalent to &amp;quot;skip on not zero accumulator&amp;quot;?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes.&lt;/p&gt;&#xA;&lt;p&gt;It's the same idea as skips on the PDP-8, as explained in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/1592/conditional-skip-instructions-of-the-pdp-8&quot;&gt;this&lt;/a&gt; Q&amp;amp;A: Without the I bit, you &amp;quot;or&amp;quot; the conditions, and skip if at least one of the conditions is true. With the I bit, you negate the final result, which (using de Morgan's rule) is equivalent to an &amp;quot;and&amp;quot; of the conditions each negated by themselves.&lt;/p&gt;&#xA;&lt;p&gt;So we get&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;640100 SZA  skip on AC zero&#xA;640400 SMA  skip on sign AC = 1 (negative)&#xA;640500      skip on AC zero or AC negative&#xA;650500      skip on not (AC zero or AC negative) &#xA;            = skip on AC not zero and AC not negative &#xA;            = skip on AC positive and not zero&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And as described in the explanation of the &lt;a href=&quot;https://www.masswerk.at/spacewar/inside/insidespacewar-pt1-ep.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spacewar code&lt;/a&gt;, the last example actually gets the &amp;quot;unofficial&amp;quot; mnemonic of &lt;code&gt;SPQ&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It's unofficial in the sense that you need to define these mnemonics in your assembler &lt;a href=&quot;https://github.com/simh/simh/blob/master/PDP1/spacewar1/spacewar.mac&quot; rel=&quot;nofollow noreferrer&quot;&gt;source code&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;szm=sza sma-szf&#xA;spq=szm i&#xA;clc=cma+cla-opr&#xA;ioh=iot i&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and they are also not listed in the manual. But as the Spacewar commentary says, it was an encouraged practice.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-02-25T07:10:36.127" LastActivityDate="2021-02-25T07:10:36.127" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18102" PostTypeId="1" AcceptedAnswerId="18103" CreationDate="2021-02-24T20:10:09.167" Score="0" ViewCount="128" Body="&lt;p&gt;I have a message:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;x2400\x1100\x2001\x1020\x2100\x0900\x2008\x2012\x0900\x1001\x2001\x1010\x2001\x0900\x0802\x0812\x1200\x2010\x0802\x1004\x0820\x1010\x2100\x2002\x1012&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's in IBM column binary format. I have read some documentation, but I can't do by myself.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.masswerk.at/keypunch/?q=Mr.%20Donald%20F.%20Draper,%20104%20WAVERLY%20PLACE,%20APT%203R,%20NEW%20YORK,%20NY&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.masswerk.at/keypunch/?q=Mr.%20Donald%20F.%20Draper,%20104%20WAVERLY%20PLACE,%20APT%203R,%20NEW%20YORK,%20NY&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20920" LastEditorUserId="6659" LastEditDate="2021-02-25T11:52:30.953" LastActivityDate="2021-02-25T19:32:24.460" Title="How to decode hexadecimal number in IBM/360 column binary format" Tags="&lt;ibm&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18103" PostTypeId="2" ParentId="18102" CreationDate="2021-02-24T21:27:55.387" Score="7" Body="&lt;p&gt;Rather than &amp;quot;do your homework for you&amp;quot;, I'll provide a table giving the full character set in IBM 360 column-binary format.  You can then look up each character in the table to decode the meaning of any message, not just this one.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;amp; 2000&#xA;- 1000&#xA;0 0800&#xA;1 0400&#xA;2 0200&#xA;3 0100&#xA;4 0020&#xA;5 0010&#xA;6 0008&#xA;7 0004&#xA;8 0002&#xA;9 0001&#xA;&#xA;A 2400    J 1400    / 0C00&#xA;B 2200    K 1200    S 0A00&#xA;C 2100    L 1100    T 0900&#xA;D 2020    M 1020    U 0820&#xA;E 2010    N 1010    V 0810&#xA;F 2008    O 1008    W 0808&#xA;G 2004    P 1004    X 0804&#xA;H 2002    Q 1002    Y 0802&#xA;I 2001    R 1001    Z 0801&#xA;&#xA;¢ 2202    ! 1202              : 0202&#xA;. 2102    $ 1102    , 0902    # 0102&#xA;&amp;lt; 2022    * 1022    % 0822    @ 0022&#xA;( 2012    ) 1012    _ 0812    ' 0012&#xA;+ 200A    ; 100A    &amp;gt; 080A    = 000A&#xA;| 2006    ¬ 1006    ? 0806    &amp;quot; 0006&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The column-binary code is constructed as two groups of six bits, so that holes punched in the Y and X &amp;quot;zone&amp;quot; rows appear as set bits in the first digit; rows 0-3 go in the second digit, rows 4 and 5 go in the third digit, and rows 6-9 go in the fourth digit.&lt;/p&gt;&#xA;&lt;p&gt;The characters themselves are clearly divided into three categories.  The first category is a single punch, which is used mainly for numbers.  The second category is a two-punch combination, where one of the punches is an X, Y, or 0 &amp;quot;zone&amp;quot; punch, which is mainly used for letters.  The third category uses the 2 row as an additional &amp;quot;zone&amp;quot;, and may use 2 or 3 punches, to provide various punctuation characters.&lt;/p&gt;&#xA;&lt;p&gt;In addition, you may encounter columns with no punches which read as spaces, and columns with all holes punched, which is an erased character.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2021-02-25T19:32:24.460" LastActivityDate="2021-02-25T19:32:24.460" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18104" PostTypeId="2" ParentId="18102" CreationDate="2021-02-24T21:48:05.657" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I have a message. It's in IBM column binary format.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To start it's important to keep in mind that Punch cards are not a binary format, but an &lt;em&gt;n out of 12&lt;/em&gt; encoding with n being 1 to 4. So a column can have one to four holes (*1). The columns are named (top down) 12, 11 (*3), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Column Binary Format&lt;/strong&gt; is a way to store a perfect image of a punch card ordered by columns. 12 possible positions need 12 bit, so more what fits a byte, thus two bytes are needed. To make it as easy manageable as possible the 12 positions get split into two groups of six (*2) simply from top to bottom and left to right. Or in other word, the positions of a column (character) get spread like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Column     12, 11,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9&#xA;Byte        1   1   1   1   1   1   2   2   2   2   2   2&#xA;Bit (2^n)   5   4   3   2   1   0   5   4   3   2   1   0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So x'1100' (or xx010001.xx000000) simply denotes two holes in position 11 and 2. If my memory serves me well, that would be the letter L.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.masswerk.at/keypunch/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.masswerk.at/keypunch/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Norbert's keypunch site already includes much information. Just scroll down. In fact, it not only explains what is written here in way better way, it can as well be used to decode.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Binary Mode By Manual Input:&lt;/strong&gt;&#xA;Press the “BINARY” key on the visual keyboard or use TAB + SHIFT on a real keyboard. Enter a 4-digits hexadecimal number for the pattern to be punched and confirm the dialog either by hitting “Enter” or by pressing the button “Enter”. Please mind that only valid hexdecimal numbers are accepted, the Virtual Keypunch will issue a “bing” otherwise.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Just go ahead and use it.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Or use &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/18103/6659&quot;&gt;the table&lt;/a&gt; Chromatix was so kind to provide.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Well, four is rather rare and three only used for additional punctuations.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Giving a monotone sequence of 64 encodings&lt;/p&gt;&#xA;&lt;p&gt;*3 - The odd sequence comes from history, as the top rows are a later extension.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-24T23:41:38.087" LastActivityDate="2021-02-24T23:41:38.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18105" PostTypeId="1" AcceptedAnswerId="18106" CreationDate="2021-02-24T21:51:04.940" Score="8" ViewCount="595" Body="&lt;p&gt;Is there a well documented or well understood explanation for what was the intended purpose for the more haphazard glyph choices in the control code range of the original IBM PC character set? Maybe a design document? It would also be great to understand how the extended character set glyphs were chosen, but that's less important as those (mostly) have an obvious meaning.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The control code (&amp;lt; 32) range in the original IBM PC character set (what we today call codepage 437) is home to an odd mixture of displayable characters. Formally these characters are not displayable in ASCII, but if you put them in the screen buffer most of them display a special character of some sort. It's easy to imagine why you would want to take advantage of otherwise unused character codes for useful characters that they couldn't fit in the extended character (&amp;gt; 127) range.&lt;/p&gt;&#xA;&lt;p&gt;Many of them have obvious purposes. For example:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0x01, 0x02:  Smiley faces&lt;/li&gt;&#xA;&lt;li&gt;0x03 - 0x06: Card suits, useful for text-based card games&lt;/li&gt;&#xA;&lt;li&gt;0x18 - 0x1B: Arrows&lt;/li&gt;&#xA;&lt;li&gt;0x14, 0x15:  Paragraph marker (Pilcrow) and Section marker, seen in certain types of documents.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;However some of them seem (to me) to have been strange choices. For example 0x13 is a double exclamation point which is not something you would normally see in text. 0x17 is a vertical double-arrow with some kind of baseline. There are also an assortment of &amp;quot;bullets&amp;quot; and &amp;quot;reverse bullets&amp;quot; for lack of a better description.&lt;/p&gt;&#xA;&lt;p&gt;I have to assume someone had a good reason to pick those glyphs specifically. One hypothesis I have is that some of the obscure symbols might have been commonly used by terminal for their status lines (so, useful for terminal emulation), but I don't really have experience with terminals and that's just speculation on my part. Or maybe they are present in older IBM computer equipment and they copied them forward to the IBM-PC? (but that just shifts the question to &amp;quot;what use did that older equipment have for these characters?&amp;quot;)&lt;/p&gt;&#xA;&lt;p&gt;Note that I'm not asking about what common uses were given to those symbols given that they were available, but what was the intended purpose for which they were included in the first place.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(For bonus, 0xFE &amp;quot;black square&amp;quot; is in the extended character range but also doesn't seem to have an obvious purpose to me)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="4577" LastEditorUserId="15334" LastEditDate="2021-02-25T10:09:48.007" LastActivityDate="2021-02-25T10:09:48.007" Title="What was the intended use for the character symbols for control codes in codepage 437?" Tags="&lt;ibm-pc&gt;&lt;character-sets&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18106" PostTypeId="2" ParentId="18105" CreationDate="2021-02-24T22:11:44.033" Score="16" Body="&lt;p&gt;The first 32 characters in code page 437 were apparently mostly chosen in a single, four-hour “meeting” in a plane, with three people: David J. Bradley, who developed the PC ROM-BIOS, Andy Saenz, who was responsible for the PC’s video card, and Lew Eggebrecht, the IBM PC’s chief engineer. &lt;a href=&quot;http://www.vintagecomputing.com/index.php/archives/790/the-ibm-smiley-character-turns-30#more-790&quot; rel=&quot;noreferrer&quot;&gt;An email conversation with David J. Bradley&lt;/a&gt; mentions that&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you look at the first 32 characters in the IBM PC character set you’ll see lots of whimsical characters — smiley face, musical notes, playing card suits and others. These were intended for character based games&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(A later email does say that the four-hour meeting is somewhat of a joke, and that the character selection was a little more involved, but not much more.)&lt;/p&gt;&#xA;&lt;p&gt;Many games did make use of those characters; see for example &lt;a href=&quot;https://www.mobygames.com/game/dos/snipes&quot; rel=&quot;noreferrer&quot;&gt;Snipes&lt;/a&gt; (mentioned in one of the emails), &lt;a href=&quot;https://www.mobygames.com/game/dos/zzt&quot; rel=&quot;noreferrer&quot;&gt;ZZT&lt;/a&gt;...&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00437.txt&quot; rel=&quot;noreferrer&quot;&gt;IBM’s code page registry describes them as&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;01 SS000000        Smiling Face&#xA;02 SS010000        Smiling Face, Reverse Image&#xA;03 SS020000        Heart Suit Symbol&#xA;04 SS030000        Diamond Suit Symbol&#xA;05 SS040000        Club Suit Symbol&#xA;06 SS050000        Spade Suit Symbol&#xA;07 SM570000        Bullet&#xA;08 SM570001        Bullet, Reverse Image&#xA;09 SM750000        Open Circle&#xA;0A SM750002        Open Circle, Reverse Image&#xA;0B SM280000        Male Symbol&#xA;0C SM290000        Female Symbol&#xA;0D SM930000        Musical Note&#xA;0E SM910000        Two Musical Notes&#xA;0F SM690000        Sun Symbol&#xA;10 SM590000        Forward Arrow Indicator&#xA;11 SM630000        Back Arrow Indicator&#xA;12 SM760000        Up-Down Arrow&#xA;13 SP330000        Double Exclamation Points&#xA;14 SM250000        Paragraph Symbol (USA)&#xA;15 SM240000        Section Symbol (USA)/Paragraph Symbol (Europe)&#xA;16 SM700000        Solid Horizontal Rectangle&#xA;17 SM770000        Up-Down Arrow, Perpendicular&#xA;18 SM320000        Up Arrow&#xA;19 SM330000        Down Arrow&#xA;1A SM310000        Right Arrow&#xA;1B SM300000        Left Arrow&#xA;1C SA420000        Right Angle Symbol&#xA;1D SM780000        Left-Right Arrow&#xA;1E SM600000        Solid Triangle&#xA;1F SV040000        Solid Triangle, Inverted&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and 0xFE is&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FE SM470000        Solid Square/Histogram/Square Bullet&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-24T22:19:20.713" LastActivityDate="2021-02-24T22:19:20.713" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="18107" PostTypeId="2" ParentId="15486" CreationDate="2021-02-25T00:58:48.893" Score="3" Body="&lt;p&gt;If you want to print a string (terminated with a NUL (000)) suggest the following:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;string: .asciz &amp;quot;the quick brown ...&amp;quot;&#xA;&#xA;      mov #1000,sp     ; init stack&#xA;&#xA;      mov #string,R0   ; pass string as argument&#xA;      jsr pc,Print    ; to Print function&#xA;      ...&#xA;&#xA;Print:mov r1,-(sp)        ; save R1&#xA;      br  20$             ; jump to NUL test&#xA;&#xA;10$:  TSTB @#177564&#xA;      BEQ 10$             ; spin until busy bit clears&#xA;      MOVB R1,@#177566    ; send a char&#xA;20$:  movb (R0)+, R1      ; get a character, keep sending&#xA;      bne  10$            ; if it is not NUL&#xA;      mov (sp)+,r1        ; restore saved register&#xA;      rts pc              ; return&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;There is no point in doing this with interrupts enabled, because you would just go into a spin loop waiting for the interrupt anyway.  The spin loop on not busy is just as good.&lt;/p&gt;&#xA;" OwnerUserId="20922" LastEditorUserId="20922" LastEditDate="2021-02-25T23:45:22.850" LastActivityDate="2021-02-25T23:45:22.850" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18108" PostTypeId="1" AcceptedAnswerId="18110" CreationDate="2021-02-25T03:56:31.393" Score="14" ViewCount="1860" Body="&lt;p&gt;According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Xenix&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Xenix&lt;/a&gt; by the beginning of the nineties, SCO was selling 32-bit 386 versions of both Xenix and Unix. According to &lt;a href=&quot;https://news.ycombinator.com/item?id=12235900&quot; rel=&quot;noreferrer&quot;&gt;https://news.ycombinator.com/item?id=12235900&lt;/a&gt; their Unix cost $1000, and I have an unsourced figure of $500 for Xenix. From the above Wikipedia article&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;SCO released its SCO UNIX as a higher-end product, based on System V R3 and offering a number of technical advances over XENIX; XENIX remained in the product line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What exactly were the technical advantages that made their Unix worth more than Xenix?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-02-27T08:10:36.230" Title="What were the differences between Xenix and Unix?" Tags="&lt;history&gt;&lt;operating-system&gt;&lt;unix&gt;&lt;xenix&gt;&lt;sco&gt;" AnswerCount="3" CommentCount="18" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18109" PostTypeId="2" ParentId="18108" CreationDate="2021-02-25T10:38:54.043" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What exactly were the technical advantages that made their Unix worth more than Xenix?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For most parts: The Name. Otherwise it's simply the next release of SCO's unixoide OS.&lt;/p&gt;&#xA;&lt;p&gt;They were only sold in parallel for a short time (ca 1989/90). While the latest Xenix version was based on System V R2.3, SCO Unix started out as System V R3.2. But using the same driver interface as Xenix.&lt;/p&gt;&#xA;&lt;p&gt;Xenix had a long history of development since ca. 1980, but when SCO acquired the rights to the Unix name, it was clear that an 'all new' product was to be released :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Originally Xenix was developed by Microsoft. MS licenzed Unix V7 already in the late 1970s. They did, at that time, firmly believe that Unix would be the future OS for all of their products (they were a language company) - and most of the market. They did license the source code, but not the name, so they came up with Xenix as their brand name for Unix.&lt;/p&gt;&#xA;&lt;p&gt;MS did not sell Xenix to end customers, they only OEMed it to other companies. Much the same way they sold MS-DOS only to OEM before DOS 3.2. Notable licencees were Intel, IBM, Tandy, Siemens (&lt;a href=&quot;https://en.wikipedia.org/wiki/SINIX&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sinix&lt;/a&gt;) or, well, SCO.&lt;/p&gt;&#xA;&lt;p&gt;Xenix developed from being a System 7 over System III to System V related. Unlike often assumed, Unix does not need a fully fledged MMU, it only simplifies life. In fact, SCO's twist on Xenix was the low end market. Their Xenix 3.0 (System III alike at that time) was intended for IBM-PC (MS-Xenix did of course use 286 protected mode). Not a rocket, more a soap box racer, still, worked quite fine and covered a market other unixoid systems didn't.&lt;/p&gt;&#xA;&lt;p&gt;It wasn't until the mid 1980's (85?) that SCO Xenix was as well available for 286 class machines - now System V alike. At a later point 386 got native support as well.&lt;/p&gt;&#xA;&lt;p&gt;In the late 80s (1987?) MS sold all rights, code and customers of Xenix to SCO for a considerable stake in SCO. Now SCO did all development on their own.&lt;/p&gt;&#xA;&lt;p&gt;Again later (1989?) SCO bought the right to the Unix name. After that the next major Xenix release was of course renamed SCO Unix. SCO Xenix was, under that name, still maintained for 3 years for existing customers - like other releases before - but otherwise the name was history.&lt;/p&gt;&#xA;&lt;p&gt;Other MS licencees, like Siemens, continued their development independent way into the 90s and 2000s.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="576" LastEditDate="2021-02-27T08:10:36.230" LastActivityDate="2021-02-27T08:10:36.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18110" PostTypeId="2" ParentId="18108" CreationDate="2021-02-25T11:08:03.540" Score="18" Body="&lt;p&gt;&lt;a href=&quot;https://www.worldcat.org/title/using-sco-unix/oclc/22775647&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Using SCO UNIX&lt;/em&gt;&lt;/a&gt; describes the history of XENIX and SCO UNIX and provides a brief summary of the technical differences.&lt;/p&gt;&#xA;&lt;p&gt;As &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/18109/79&quot;&gt;Raffzahn explains&lt;/a&gt;, SCO UNIX is the successor to XENIX. XENIX is a licensed version of UNIX; it was called XENIX because initially, AT&amp;amp;T didn’t allow its licensees to use the UNIX trademark. This was relaxed in 1989, which allowed SCO to use the trademark.&lt;/p&gt;&#xA;&lt;p&gt;However there’s more than a name change to SCO UNIX compared to XENIX, enough to warrant a different pricing structure (at least, enough for marketing to justify a different pricing structure). SCO UNIX was intended to be a “more compatible” release, based on AT&amp;amp;T System V Release 3.2:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;unlike XENIX, SCO UNIX could run any 386 System V binary;&lt;/li&gt;&#xA;&lt;li&gt;SCO UNIX was POSIX conformant with a few minor exceptions;&lt;/li&gt;&#xA;&lt;li&gt;SCO UNIX was X/Open conformant;&lt;/li&gt;&#xA;&lt;li&gt;SCO UNIX was a DoD “trusted” system (capable of running at C2 security level).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;On the technical side, SCO UNIX introduced the Acer Fast File System, and added a number of device drivers.&lt;/p&gt;&#xA;&lt;p&gt;None of this would have been impossible to add to XENIX of course, and SCO could have released an updated version of XENIX with all the above. Renaming the product to “SCO UNIX” helped support the UNIX compatibility story, and allowed SCO to continue selling multiple products in parallel without introducing too much confusion:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;XENIX 286 for 286 PCs;&lt;/li&gt;&#xA;&lt;li&gt;XENIX 386 for users of 386 PCs requiring a small and fast operating system;&lt;/li&gt;&#xA;&lt;li&gt;SCO UNIX for users interested in greater compatibility and security, at the cost of reduced performance on the same hardware.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-02-25T13:20:07.633" LastActivityDate="2021-02-25T13:20:07.633" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18111" PostTypeId="5" CreationDate="2021-02-25T11:33:28.640" Score="0" Body="" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-25T11:33:28.640" LastActivityDate="2021-02-25T11:33:28.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18112" PostTypeId="4" CreationDate="2021-02-25T11:33:28.640" Score="0" Body="Segment-based memory addressing and management. Far pointers, allocation, normalisation, etc." OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-25T11:33:28.640" LastActivityDate="2021-02-25T11:33:28.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18113" PostTypeId="1" CreationDate="2021-02-25T14:41:04.017" Score="4" ViewCount="350" Body="&lt;p&gt;This is probably a hardware-related question.&lt;/p&gt;&#xA;&lt;p&gt;I have recently bought a total of 7 (seven) different original SNES controllers from different sources, all of them being somewhat used but mostly appearing in very good condition.&lt;/p&gt;&#xA;&lt;p&gt;All of them, with no exception, exhibit some kind of problem with the shoulder button's input registration (L/R).  Mostly, the button is clearly pressed but sometimes the input does not get registered, and/or I need to apply an uncomfortable level of force for it to be registered.&lt;/p&gt;&#xA;&lt;p&gt;The unlikelihood of this happening for every single controller I bought drove me to try some other solutions including:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A full controller cleanup, plus alcohol treatment for the button pads&lt;/li&gt;&#xA;&lt;li&gt;Full replacement of all rubbers&lt;/li&gt;&#xA;&lt;li&gt;Exorcism&lt;/li&gt;&#xA;&lt;li&gt;Homeopathic remedies&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;None of the above worked.&#xA;So my question is: what the hell is wrong with original SNES controllers' shoulder buttons?&#xA;Were they just badly designed, or am I experiencing a 100% rate of bad luck at getting a non-faulty controller?&lt;/p&gt;&#xA;" OwnerUserId="20932" LastActivityDate="2021-02-28T20:32:59.923" Title="What's wrong with SNES original controller's shoulder buttons?" Tags="&lt;hardware&gt;&lt;snes&gt;&lt;joystick&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18114" PostTypeId="1" AcceptedAnswerId="18122" CreationDate="2021-02-25T18:35:51.383" Score="22" ViewCount="4890" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11812/10260&quot;&gt;This answer&lt;/a&gt; to the question &amp;quot;What was the rationale behind 36 bit computer architectures?&amp;quot; makes the point that early computers were assembled by hand, rather than having central processing units on one chip.  The number of CPU bits were chosen carefully to fulfill the needs of the architecture, rather than necessarily choosing a power of 2.  To that end, &lt;strong&gt;what was the last central processing unit made commercially available that was not on one chip?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;Clarification:&lt;/em&gt; To avoid this degenerating into an &amp;quot;anything goes&amp;quot; question, &lt;em&gt;the following functions do not count, even if they occur outside the CPU&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Power regulation, reset conditioning, and clock generation do not count, because it could apply to nearly every computer (except some microcontrollers).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&amp;quot;CPU&amp;quot; implies arithmetic, logic, and control.  It specifically does not include memory, nor the interface to memory.  Therefore ROM, RAM, bus demultiplexers, bus buffers/transceivers, address decoding, caches, memory management units, northbridges, and mass storage do not count &lt;em&gt;because they are part of the memory system&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Similarly, &amp;quot;CPU&amp;quot; does not include input or output.  Thus peripherals and southbridges do not count &lt;em&gt;because they are part of I/O&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Floating-point units and other co-processors do not count, as &lt;em&gt;the CPU could still execute basic programs without them&lt;/em&gt;.  Notably, co-processors were available and often used with early x86 and 68k processors, yet the CPU was still functional without them.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using multiple chips to include multiple processors is not the scope of the question.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Any CPU that markets itself as a microprocessor or microcontroller is probably against the spirit of this question, as the intention of a microprocessor is to put the entire CPU on one chip.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As there is already one good answer, the question is certainly answerable.&lt;/p&gt;&#xA;&lt;p&gt;Because the question is asking for the &amp;quot;last&amp;quot; instance, please include the year that the CPU came to market in your answer.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Related: &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/5294/10260&quot;&gt;Was there ever a genuine &amp;quot;mainframe-on-a-chip&amp;quot; microprocessor?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-02-26T01:13:49.303" LastActivityDate="2021-02-27T09:12:41.830" Title="What was the last non-monolithic CPU to come to market?" Tags="&lt;history&gt;&lt;cpu&gt;&lt;mainframe&gt;" AnswerCount="7" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18115" PostTypeId="2" ParentId="18114" CreationDate="2021-02-25T18:55:22.383" Score="2" Body="&lt;p&gt;It depends. Some CPUs needed specific support chips, e.g. Intel 8080 (1974) needed (cited from Wikipedia) &amp;quot;i8224 clock generator/driver and the i8228 bus controller&amp;quot;. Indeed, one of the advantages of Z80 was no need for these additional chips.&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2021-02-25T18:55:22.383" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18116" PostTypeId="2" ParentId="18114" CreationDate="2021-02-25T18:57:59.253" Score="10" Body="&lt;p&gt;The last commercial non-integrated main processor introduction that I can recall was the one in Tandem NonStop Cyclone systems, introduced circa 1989.  The CPU seems to have been 3 large printed circuit boards full of ECL gate arrays.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2021-02-25T18:57:59.253" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18117" PostTypeId="1" AcceptedAnswerId="18118" CreationDate="2021-02-25T19:00:35.017" Score="15" ViewCount="2216" Body="&lt;p&gt;The MIX was a computer design that Donald Knuth used to illustrate computer instruction sets in his magnum opus &lt;em&gt;The Art of Computer Programming&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;MIX's model number is 1009, which was derived by combining the model numbers and names of several contemporaneous, commercial machines deemed significant by the author. Also, &amp;quot;MIX&amp;quot; read as a Roman numeral is 1009.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/MIX&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/MIX&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Exactly which computer models were used to come up with the MIX name?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="15334" LastEditDate="2021-03-01T19:00:33.227" LastActivityDate="2021-03-01T19:00:33.227" Title="Which computers did Donald Knuth &quot;mix&quot; together to get MIX?" Tags="&lt;history&gt;&lt;architecture&gt;&lt;books&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18118" PostTypeId="2" ParentId="18117" CreationDate="2021-02-25T20:36:07.040" Score="28" Body="&lt;p&gt;Section 1.3.1 of &lt;em&gt;The Art of Computer Programming&lt;/em&gt; says the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;MIX&lt;/code&gt; is the world's first polyunsaturated computer.&#xA;Like most machines, it has an identifying number—the 1009. This number was found&#xA;by taking 16 actual computers very similar to &lt;code&gt;MIX&lt;/code&gt; and on which &lt;code&gt;MIX&lt;/code&gt; could&#xA;easily simulated, then averaging their numbers with equal weight:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;⌊(360+650+709+7070+U3+SS80+1107+1604+G20+B220+S2000+920+601+H800+PDP-4+II)/16⌋ = 1009.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The same number may also be obtained in a simpler way by taking Roman&#xA;numerals.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The computers attached to the numbers are as follows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IBM System/360&lt;/li&gt;&#xA;&lt;li&gt;IBM 650&lt;/li&gt;&#xA;&lt;li&gt;IBM 709&lt;/li&gt;&#xA;&lt;li&gt;IBM 7070&lt;/li&gt;&#xA;&lt;li&gt;Univac SS80&lt;/li&gt;&#xA;&lt;li&gt;Univac 1107&lt;/li&gt;&#xA;&lt;li&gt;Control Data 1604&lt;/li&gt;&#xA;&lt;li&gt;Bendix G-20&lt;/li&gt;&#xA;&lt;li&gt;Burroughs B220&lt;/li&gt;&#xA;&lt;li&gt;Philco S-2000&lt;/li&gt;&#xA;&lt;li&gt;SDS 920&lt;/li&gt;&#xA;&lt;li&gt;Minivac 601&lt;/li&gt;&#xA;&lt;li&gt;Honeywell H800&lt;/li&gt;&#xA;&lt;li&gt;DEC PDP-4&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But “U3” and “II” are elusive. The former might be the Univac III, and the latter could be the Illiac II.&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2021-02-25T23:38:38.087" LastActivityDate="2021-02-25T23:38:38.087" CommentCount="14" CommunityOwnedDate="2021-02-26T17:11:03.430" ContentLicense="CC BY-SA 4.0" />
  <row Id="18119" PostTypeId="2" ParentId="18114" CreationDate="2021-02-25T23:58:27.757" Score="8" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/VAX_9000#Scalar_processor&quot; rel=&quot;noreferrer&quot;&gt;VAX 9000&lt;/a&gt;, first ship 1990, must be a contender here.&lt;/p&gt;&#xA;&lt;p&gt;Per &lt;I&gt;Wikipedia&lt;/I&gt;,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Each CPU was implemented with 13 Multi-Chip Units (MCUs), with each&#xA;MCU containing several emitter-coupled logic (ECL) macrocell arrays&#xA;which contained the CPU logic.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By the time it was released, the 9000's price/performance had been eclipsed by systems based on &lt;a href=&quot;https://en.wikipedia.org/wiki/NVAX&quot; rel=&quot;noreferrer&quot;&gt;NVAX&lt;/a&gt;, a single-chip processor.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-02-25T23:58:27.757" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18120" PostTypeId="2" ParentId="18114" CreationDate="2021-02-26T00:12:27.097" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Honeywell_6000_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;Honeywell had a CPU that was 36-bit from 1970-1989&lt;/a&gt; (which one might say was ahead of its time as IBM said that on their 32-bit machines years ago they needed one more bit because they only used 31-bits and used the high order bit to determine the end of a list of addresses as passed as parms)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The CPU operated on 36-bit words,[10] and addresses were 18 bits. The&#xA;Accumulator Register (AQ) was 72 bits, or could be accessed separately&#xA;as two 36-bit registers (A and Q) or four 18-bit registers&#xA;(AU,AL,QU,QL). An eight-bit Exponent Register contained the exponent&#xA;for floating point operations (the mantissa was in AQ). There were&#xA;eight eighteen-bit index registers X0 through X7.[11]&lt;/p&gt;&#xA;&lt;p&gt;The 18-bit Base Address Register (BAR) contained the base address and&#xA;number of 1024-word blocks assigned to the program (the 6180 used&#xA;segmentation rather than the BAR). The system also included several&#xA;special-purpose registers: an 18-bit Instruction Counter (IC) and a&#xA;27-bit Timer Register (TR) with a resolution of 2 μs. Sets of special&#xA;registers were used for fault detection and debugging.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="13634" LastEditorUserId="13634" LastEditDate="2021-02-26T00:19:23.713" LastActivityDate="2021-02-26T00:19:23.713" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18121" PostTypeId="2" ParentId="18108" CreationDate="2021-02-26T00:31:09.587" Score="3" Body="&lt;p&gt;One other difference: Xenix 2.3.2 did not have a block buffer cache.  Every version of SCO Unixs I've used did.&lt;/p&gt;&#xA;&lt;p&gt;Consequence: On an IBM PS/2 model 80 (?, 20 MHz 386, Micro Channel) the max throughput to the hard drive was 35 KB/s.  On an AST Research 486 with a DPT SmartCache SCSI controller (high end for 1992!) we maxed out at 45 KB/s.&lt;/p&gt;&#xA;" OwnerUserId="18640" LastActivityDate="2021-02-26T00:31:09.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18122" PostTypeId="2" ParentId="18114" CreationDate="2021-02-26T00:34:34.533" Score="21" Body="&lt;p&gt;The world of large computers is amazing. MCM systems of monstrous in the eyes of a PC user parameters were widely popular right up to the cloud revolution, and even now, taking into account legal restrictions, they are actively used in banks.&lt;/p&gt;&#xA;&lt;p&gt;Just remember &lt;a href=&quot;https://old.hotchips.org/wp-content/uploads/hc_archives/hc06/2_Mon/HC6.S1/HC6.1.2.pdf&quot; rel=&quot;noreferrer&quot;&gt;IBM POWER2+ in a six-chip configuration&lt;/a&gt; for one core (not counting L2 cache) (&lt;a href=&quot;https://www.youtube.com/watch?v=iFpHfOyIFqM&quot; rel=&quot;noreferrer&quot;&gt;video&lt;/a&gt;) - it was launched on the market in May 1994.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;PS&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;But the Japanese vector supercomputer monster, NEC SX-5, appeared even later!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In &lt;strong&gt;June 1998&lt;/strong&gt;, SX-5, the fourth generation in this series, was&#xA;unveiled. Doubling both the clock frequency and the number of&#xA;vector pipelines, the evolved model achieved CPU vector per-&#xA;formance of 8GFLOPS, system peak vector performance of&#xA;4TFLOPS with a configuration of parallel processing with 512&#xA;CPUs.&lt;/p&gt;&#xA;&lt;p&gt;The release of the fifth generation SX-6 in October 2001 in-&#xA;troduced the integration of &lt;strong&gt;the previous model’s CPU of 30 LSIs&lt;/strong&gt;&#xA;in a single chip.&lt;a href=&quot;https://www.nec.com/en/global/techrep/journal/g08/n04/pdf/080402.pdf&quot; rel=&quot;noreferrer&quot;&gt;(link)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Each CPU had a maximum performance of 8 gigaFLOPS, four times the maximum performance of the SX-4 series, by using high-density ultra-fast CMOS LSIs, built with cutting-edge 0.25-micron design rules, and 64 Mbit synchronized DRAM. &lt;a href=&quot;http://museum.ipsj.or.jp/en/computer/super/0019.html&quot; rel=&quot;noreferrer&quot;&gt;(link)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://collections.museumsvictoria.com.au/items/705766&quot; rel=&quot;noreferrer&quot;&gt;CPU (intact with heatsink) photo.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11231" LastEditorUserId="11231" LastEditDate="2021-02-26T05:45:22.117" LastActivityDate="2021-02-26T05:45:22.117" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18124" PostTypeId="1" CreationDate="2021-02-26T03:42:34.727" Score="4" ViewCount="212" Body="&lt;p&gt;This question occurred to me while I was formulating &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/18066/origin-of-arithmetic-and-logical-for-signed-and-unsigned-shifts/18071#18071&quot;&gt;this answer&lt;/a&gt; about arithmetic versus logical shifts.&lt;/p&gt;&#xA;&lt;p&gt;The IBM 709, and its descendant the 7090, etc., is a 36-bit mainframe with a classical single-accumulator architecture, word-addressed memory, and so on.&lt;/p&gt;&#xA;&lt;p&gt;Unusually (or so it seems to me), the accumulator is slightly wider than the word size: it is 38 bits rather than 36 bits.&lt;/p&gt;&#xA;&lt;p&gt;Where a memory word is considered to have a sign bit S and 35 magnitude bits (1-35, with 1 being the MSB), the accumulator has sign bit S, and bits Q, P, and 1-35, with Q and P being &amp;quot;to the left of&amp;quot; bit 1.  Incidentally, this nomenclature shows the downside of adopting big-endian bit numbering.&lt;/p&gt;&#xA;&lt;p&gt;The extra bits provide the benefit of explicitly retaining information that overflows from addition and subtraction operations.  Neither bit P nor Q is &amp;quot;the&amp;quot; overflow indicator; the overflow is set as bits pass in or through P -- the temptation to look at this as just a odd way to regard condition codes does not seem to me to work out.&lt;/p&gt;&#xA;&lt;p&gt;However, the extra two bits in the &amp;quot;middle&amp;quot; of the accumulator means that the instruction set distinguishes loading the AC with an arithmetic value from loading AC with a logical (unsigned) value. The former copies the memory word into S and 1-35, clearing P and Q.  The latter copies it into P and 1-35, clearing S and Q.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, &lt;strong&gt;to get round to the question&lt;/strong&gt;: apart from the 709 and its 7-series offspring, were there other systems that had registers &amp;quot;slightly larger&amp;quot; than memory words?  Any non-IBM systems?&lt;/p&gt;&#xA;&lt;p&gt;Here I use &amp;quot;registers&amp;quot; in the modern sense, as being logically a part of the CPU, and distinct from memory.&lt;/p&gt;&#xA;&lt;p&gt;I want to exclude computers that support multiple operand lengths -- e.g., a 32-bit machine with 32-bit registers that also has 16-bit arithmetic, and computers with double-length registers for supporting (for example) full-word multiply with a double-length result.&lt;/p&gt;&#xA;&lt;p&gt;It's the &amp;quot;couple of extra bits&amp;quot; aspect that intrigues me.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Addendum:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.org/pdf/ibm/701/Buchholz_IBM_701_System_Design_Oct53.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;This paper on the design of the IBM 701&lt;/a&gt; discusses the decisions leading to extending the accumulator by two bits (see p 1270).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-03-02T01:27:06.513" LastActivityDate="2021-03-02T01:27:06.513" Title="Besides the IBM 709 and its descendents, did any other machine have &quot;slightly longer&quot; registers?" Tags="&lt;history&gt;&lt;mainframe&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18125" PostTypeId="2" ParentId="18114" CreationDate="2021-02-26T07:00:46.687" Score="2" Body="&lt;p&gt;I believe the correct answer is the &lt;a href=&quot;https://www.ibm.com/quantum-computing/business/&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM Q System One&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It's a quantum computer which is &lt;em&gt;currently&lt;/em&gt; offered for commercial use. Although I've never seen a specification of exactly what electronics it uses, I'm reasonably certain it uses more than one chip (I'm reasonably certain nobody has a clue of how to build such a CPU on a single chip at the present time).&lt;/p&gt;&#xA;" OwnerUserId="808" LastActivityDate="2021-02-26T07:00:46.687" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18126" PostTypeId="1" AcceptedAnswerId="18128" CreationDate="2021-02-26T07:11:50.650" Score="8" ViewCount="782" Body="&lt;p&gt;NexGen was best known for the unique implementation of the x86 architecture in its processors. NexGen's CPUs were designed very differently from other processors based on the x86 instruction set at the time: the processor would translate code designed to run on the traditionally CISC-based x86 architecture to run on the chip's internal RISC architecture. The architecture was used in later AMD chips such as the K6, and to an extent most x86 processors today implement a &amp;quot;hybrid&amp;quot; architecture similar to those used in NexGen's processors (&lt;a href=&quot;https://en.wikipedia.org/wiki/NexGen&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/NexGen&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;How does this “internal RISC architecture” work and why is it so successful to be widely used today? Did the concept originate from NexGen or was it already being used in other non-x86 CISC processors? Further was this NexGen’s main design goal, or just one of many?&lt;/p&gt;&#xA;&lt;p&gt;Edit to give extra context around the answers.&#xA;The P5 Pentium was the first superscalar x86 processor; the Nx586 [1994], P6 Pentium Pro [1995]  and AMD K5 [1996, based on a 29k RISC processor with an x86 decoding front end] were among the first designs which decode x86-instructions asynchronously into dynamic microcode-like micro-op sequences prior to actual execution on a superscalar microarchitecture; this opened up for dynamic scheduling of buffered partial instructions and enabled more parallelism to be extracted compared to the more rigid methods used in the simpler P5 Pentium; it also simplified speculative execution and allowed higher clock frequencies compared to designs such as the advanced Cyrix 6x86. [Wikipedia Superscalar Processor]. Thus although the K6 (1997) was a different design created by NexGen engineers, AMD had already implemented an x86 processor with RISC-like internals in the K5.&lt;/p&gt;&#xA;" OwnerUserId="15219" LastEditorUserId="15219" LastEditDate="2021-02-27T22:41:15.893" LastActivityDate="2021-03-01T07:13:07.850" Title="The NexGen's x86 internal RISC architecture" Tags="&lt;x86&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18127" PostTypeId="2" ParentId="18126" CreationDate="2021-02-26T09:27:11.573" Score="8" Body="&lt;p&gt;Very rough answer, after looking at the &lt;a href=&quot;http://datasheets.chipdb.org/NexGen/2_Hardware%20Architecture.pdf&quot; rel=&quot;noreferrer&quot;&gt;Hardware architecture&lt;/a&gt; and some other pages linked from the Wikipedia page:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How does this “internal RISC architecture” work&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;An instruction is decoded and split up into several &amp;quot;micro-instructions&amp;quot;, which are then scheduled an executed on &amp;quot;functional units&amp;quot;, e.g. an address unit, two integer units, and a floating-point unit for the Nx586.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;and why is it so successful to be widely used today?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I guess the best answer I can give for &amp;quot;why&amp;quot; is that it turned out to work well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did the concept originate from NexGen&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It has been around for a long time. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Cray-1&quot; rel=&quot;noreferrer&quot;&gt;Cray-1&lt;/a&gt; (1975) already used functional units and a pipelined schedule for instructions. Though this was for a completely different ISA, and the &amp;quot;translation to RISC microinstructions&amp;quot; idea wasn't present.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Further was this NexGen’s main design goal, or just one of many?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://web.archive.org/web/20071027090829/http://www.cpu-info.com/index2.php?mainid=html%2Fcpu%2FNx586.php&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt;,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The race was on for the next generation CPU after the 486. Intel was very busy with the design of the Pentium. Other companies like Cyrix and AMD were also designing their next generation CPU's. They were however lagging behind.&#xA;Compaq was the largest PC manufacturer at that time and it wanted a real alternative to Intel or maybe just a way to get the pressure on Intel. So they financially backed a new promising CPU design company : NexGen microsystems.&lt;/p&gt;&#xA;&lt;p&gt;Nexgen Inc. was founded by Thampy Thomas in 1986. Its goal at that time was to design a 386 competitor, not an Intel clone but a new x86 compatible design. Apparently from the start the design would incorporate CISC and RISC elements.&lt;/p&gt;&#xA;&lt;p&gt;[...]&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately the team faced many issues and delays. For instance, one of the first designs was so large that it ended up in 8 PGA's the size of a standard 386. By the time the design was ready, the 386 was history, the 486 was the CPU to have and the next generation chips were already on the drawing tables at Intel, AMD and Cyrix.&lt;/p&gt;&#xA;&lt;p&gt;Finally after eight years of hard working on the CPU with the codename F86, Nexgen announced to the world the Nx586 in March 1994.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So again the answer seems to be &amp;quot;it just turned out this way&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-02-26T09:27:11.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18128" PostTypeId="2" ParentId="18126" CreationDate="2021-02-26T11:04:39.540" Score="8" Body="&lt;p&gt;Like so often naming is also about giving a spin — to start with calling it RISC.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How does this “internal RISC architecture” work and why is it so successful to be widely used today?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By translating one instruction set &lt;em&gt;on the fly&lt;/em&gt; into another, usually simpler, one and feeding that into the 'real' CPU. Most successfully if that CPU is superscalar as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did the concept originate from NexGen or was it already being used in other non-x86 CISC processors?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In principle the whole translation idea isn't much different from classic micro programming. Here as well each user visible instruction gets replaced by one or more internal instructions executed by the 'real' machine.&lt;/p&gt;&#xA;&lt;p&gt;This in turn links it with the very start of RISC as we know it, the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_801&quot; rel=&quot;noreferrer&quot;&gt;IBM 801&lt;/a&gt; project. Its goal (after some search for a target) was to improve /370  (*1) performance by translating the /370 CISC instructions on the fly into a less complex instruction stream of a RISC machine, which in turn was modelled to support the way the /370 operates (*2).&lt;/p&gt;&#xA;&lt;p&gt;While the 801 originates already in the mid 1970s, and for sure it wasn't long until the full works to translate /370 on the fly to 801 code, the most solid (*3) answer to the question about prior machines would be:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_9370&quot; rel=&quot;noreferrer&quot;&gt;IBM 9370&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Interestingly the 9370 was first available the very same year (1986) NexGen started their company to apply the same principles to a 386 design.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Further was this NexGen’s main design goal, or just one of many?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I guess design goals were rather competitive performance and price, but yes, the internal RISC structure was their take on these goals.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 – Within this context /370 is synonym for all of the line, /360, /370, /390, ...&lt;/p&gt;&#xA;&lt;p&gt;*2 – Noteworthy here is that the /370 ISA was always only a user side definition. Internally these mainframes have used all kinds of CPU designs and instruction sets. This was done to enable wide range of CPUs, from 'economic' (read cheap but slow) to high performance.&lt;/p&gt;&#xA;&lt;p&gt;*3 – There might be more before, as it's a blurry line between microcode and CISC to RISC translation, made up by many not well defined little differences, covered by buzzwords and marketing.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Of all designs around that idea, only Transmeta's CPUs clearly is a RISC CPU — for all others it's about internal mechanics that can be called many names.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="79" LastEditDate="2021-02-26T12:53:05.240" LastActivityDate="2021-02-26T12:53:05.240" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18129" PostTypeId="1" AcceptedAnswerId="18137" CreationDate="2021-02-26T12:45:13.143" Score="13" ViewCount="1822" Body="&lt;p&gt;For my new crime-novel I am in need of some more specific info on hiding digital data on analog VCR or VHS cassettes.&lt;/p&gt;&#xA;&lt;p&gt;I have already read a lot online and seen the LCR oddware video on that case (Danmere backer), so I know it's possible with specific hardware, but would it be possible to &lt;strong&gt;&amp;quot;hide&amp;quot;/ obscure digital data on a VHS or VCR tape that already contains analog data&lt;/strong&gt; (a whole film) but leaves space to spare on the tape?&lt;/p&gt;&#xA;&lt;p&gt;If so, would the data be randomly spread out over the length of the tape, so when watching the original content (the film), an uninformed third party (i.e. police) would encounter merely some weird pixels at random intervals throughout the film, but would not necessarily suspect any digital data is on that same tape?&lt;/p&gt;&#xA;&lt;p&gt;Or is there some way to store the digital data only in free space on the tape, so it is not visible at all when playing the tape normally?&lt;/p&gt;&#xA;" OwnerUserId="20938" LastEditorUserId="79" LastEditDate="2021-02-26T18:02:22.753" LastActivityDate="2021-02-27T17:09:05.350" Title="How can extra (digital) data be hidden on VCR/VHS tapes?" Tags="&lt;history&gt;" AnswerCount="6" CommentCount="15" FavoriteCount="1" ClosedDate="2021-02-28T16:58:17.863" ContentLicense="CC BY-SA 4.0" />
  <row Id="18130" PostTypeId="2" ParentId="9500" CreationDate="2021-02-26T13:29:19.173" Score="0" Body="&lt;p&gt;I suspect it might have something to do with multiplication.  For addition and subtraction, of course, the exact position of the radix point is purely a matter of convention.  However, multiplication takes two single words and produces a double-word product.  If you interpret the two given words as integers, then you have a problem dealing with the result, since it won't fit in a single word.  However, if you interpret the two given words as fractions (with radix point up front), the product is also a fraction, and you can just drop the low-order bits and store the high word by itself, and still have a useful result.  This is particularly useful when implementing floating-point in software.&lt;/p&gt;&#xA;" OwnerUserId="20942" LastActivityDate="2021-02-26T13:29:19.173" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18131" PostTypeId="2" ParentId="18129" CreationDate="2021-02-26T13:47:46.437" Score="22" Body="&lt;p&gt;If you want to &lt;em&gt;add&lt;/em&gt; digital data to an already existing tape, I imagine you'd need some rather very special equipment, probably purpose-built - the recording heads are not multitrack.&lt;/p&gt;&#xA;&lt;p&gt;However, if you need to record &amp;quot;hidden&amp;quot; digital data &lt;em&gt;simultaneously&lt;/em&gt;  while recording the analogue video, then there was a way - and it was even sometimes used.&#xA;And that was information hidden in blank lines, i.e. the &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletext&quot; rel=&quot;noreferrer&quot;&gt;Teletext&lt;/a&gt;. It was often said that VHS is no good for teletext, because the bandwidth is not good enough, but people with very good cassettes and high quality recorders managed to read back the data. (I had just an ordinary VHS and sometimes, but only sometimes, I could read teletext from the recording, usually with a lot of errors).&lt;/p&gt;&#xA;&lt;p&gt;If you want really obscure data, you can use custom format of your data (with lower frequency) and nobody would be any wiser...&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2021-02-26T13:47:46.437" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="18132" PostTypeId="2" ParentId="18124" CreationDate="2021-02-26T16:31:18.537" Score="1" Body="&lt;p&gt;The PDP-8's link bit is effectively the 13th bit in the accumulator.  In practice it works as a carry bit, the shift-in bit for rotations, and a general purpose flag.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2021-02-26T16:31:18.537" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18133" PostTypeId="1" AcceptedAnswerId="18135" CreationDate="2021-02-26T17:36:19.817" Score="4" ViewCount="111" Body="&lt;p&gt;It seems that the primary system call to change a new directory within an Amiga process is &lt;code&gt;dos.library/CurrentDir(lock)&lt;/code&gt; but the documentation does not tell me how to detect if it succeeded.&lt;/p&gt;&#xA;&lt;p&gt;Quoting from the documentation:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3&gt;FUNCTION&lt;/h3&gt;&#xA;&lt;p&gt;CurrentDir() causes a directory associated with a lock to be made&#xA;the current directory.  The old current directory lock is returned.&lt;/p&gt;&#xA;&lt;p&gt;A value of zero is a valid result here, this 0 lock represents the&#xA;root of file system that you booted from.&lt;/p&gt;&#xA;&lt;p&gt;Any call that has to Open() or Lock() files (etc) requires that&#xA;the current directory be a valid lock or 0.&lt;/p&gt;&#xA;&lt;h3&gt;INPUTS&lt;/h3&gt;&#xA;&lt;p&gt;lock - BCPL pointer to a lock&lt;/p&gt;&#xA;&lt;h3&gt;RESULTS&lt;/h3&gt;&#xA;&lt;p&gt;oldLock - BCPL pointer to a lock&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The problem is the part where &lt;em&gt;&amp;quot;a value of zero is a valid result&amp;quot;&lt;/em&gt;. What would (or should) happen if I supply for example a file lock? They are the same type of objects.&lt;/p&gt;&#xA;" OwnerUserId="333" LastActivityDate="2021-02-26T19:11:05.110" Title="How do I detect if AmigaDOS dos.library/CurrentDir() fails?" Tags="&lt;amiga&gt;&lt;software-development&gt;&lt;amiga-kickstart&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18134" PostTypeId="2" ParentId="18079" CreationDate="2021-02-26T18:29:24.747" Score="4" Body="&lt;p&gt;AOL was based on &lt;a href=&quot;https://en.wikipedia.org/wiki/Quantum_Link&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quantum Link&lt;/a&gt;, which ran on Commodore 64s and which in turn was based on &lt;a href=&quot;https://en.wikipedia.org/wiki/PlayNET&quot; rel=&quot;nofollow noreferrer&quot;&gt;PlayNet&lt;/a&gt; software.&lt;/p&gt;&#xA;&lt;p&gt;By 90s, it was expanded to include &lt;a href=&quot;https://archive.org/details/AQuickIntroductionToRAINMAN&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Remote Automated Information Manager or RAINMAN&lt;/a&gt;, which was basically an in-house developed state-machine/scripting language used to create every window you could see after you've logged in, from the Welcome screen to interactive pages like the chatroom pages. For images, AOL purchased and utilized the &lt;a href=&quot;https://en.wikipedia.org/wiki/ART_image_file_format&quot; rel=&quot;nofollow noreferrer&quot;&gt;.ART image format&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;They've abandoned it and switched to mostly HTML &lt;a href=&quot;https://www.washingtonpost.com/archive/business/2004/04/15/aols-garden-might-flourish-without-rainman/cdf8f533-7705-47c1-99af-65797692ae2c/&quot; rel=&quot;nofollow noreferrer&quot;&gt;by 2004&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="20946" LastActivityDate="2021-02-26T18:29:24.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18135" PostTypeId="2" ParentId="18133" CreationDate="2021-02-26T18:45:06.560" Score="5" Body="&lt;p&gt;The only thing &lt;code&gt;CurrentDir()&lt;/code&gt; does is change the lock in your process structure that is used as the process' current directory, and return the old value.&lt;/p&gt;&#xA;&lt;p&gt;So, it is the return value of &lt;code&gt;Lock()&lt;/code&gt; applied to the directory you want to use that needs to be checked. If this is a valid/successful lock pointer, then you can be assured that it will become your current directory lock. If, however, it is an invalid lock pointer, then you will get an error on subsequent usage - e.g. when you try to call &lt;code&gt;Open()&lt;/code&gt; on a relative path.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-02-26T19:11:05.110" LastActivityDate="2021-02-26T19:11:05.110" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18136" PostTypeId="1" CreationDate="2021-02-26T20:04:34.047" Score="3" ViewCount="160" Body="&lt;p&gt;I'm trying to learn more about how the &lt;a href=&quot;https://en.wikipedia.org/wiki/PLATO_(computer_system)&quot; rel=&quot;nofollow noreferrer&quot;&gt;PLATO&lt;/a&gt; system worked with respect to communications. I've read &lt;a href=&quot;https://irata.online/assets/s0ascers-045c83081e9ada2008378c3ae6aa62564b213a71decf9fe04608909b91d20ad1.html#C3&quot; rel=&quot;nofollow noreferrer&quot;&gt;some of the specs&lt;/a&gt;, but coming from a web-background I'm unfamiliar with the underlying way that the mainframe and terminal communicated. Did the terminal send data which got a response from the mainframe (like an http call), or did the mainframe have the ability to &lt;em&gt;push&lt;/em&gt; data to the terminal at any point? (more like websockets)&lt;/p&gt;&#xA;" OwnerUserId="20464" LastEditorUserId="15334" LastEditDate="2021-02-28T15:20:25.893" LastActivityDate="2021-02-28T15:20:25.893" Title="Did communication between a PLATO terminal and mainframe use pushes?" Tags="&lt;mainframe&gt;&lt;terminal&gt;&lt;plato&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18137" PostTypeId="2" ParentId="18129" CreationDate="2021-02-26T22:24:33.357" Score="10" Body="&lt;p&gt;I can think of a couple of ways to do it.  The &amp;quot;teletext&amp;quot; method would work, hiding data in the blanking lines off the top of the frame.  Because of the way video tapes work these can get mangled, but if you used a low enough data rate and repeated patterns over several frames you could reconstruct it.&lt;/p&gt;&#xA;&lt;p&gt;This was used to record VITC (Vertical Interval Time Code) on a single scan line, which over 90 bits of data carried hours (often used as &amp;quot;reel number&amp;quot;), minutes, seconds and frames, with 32 bits of user data often used for labelling up tapes.&lt;/p&gt;&#xA;&lt;p&gt;Too obvious?  You could add bursts of digital tones to the soundtrack.  Some high-end VCRs used &amp;quot;Hifi Stereo&amp;quot; audio encoded as FM along with the video signal on diagonal video tracks.  The linear audio tracks held the same information in lower quality - because the tape speed was low the bandwidth was low.  You could hide digital tones on the linear audio track, or the hifi tracks.&lt;/p&gt;&#xA;&lt;p&gt;Still too obvious?  You could use subaudible tones on the soundtrack.  The bandwidth for audio was very limited - the upper range was maybe 10kHz, about half the quality of CD, and it was noisy.  If you encoded a digital message as a very low frequency tone (think something like Morse code but instead of on/off keying you shifted from maybe 20Hz to 25Hz - too low to hear but high enough to detect) then you could bury a signal.&lt;/p&gt;&#xA;&lt;p&gt;You could also use amateur radio digital modes like PSK31 which work by having a quiet droning noise from two signals 31Hz apart where you shift the phase of one (hence Phase Shift Keying 31) which can send data at about four characters per second.&lt;/p&gt;&#xA;" OwnerUserId="20947" LastActivityDate="2021-02-26T22:24:33.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18138" PostTypeId="2" ParentId="18136" CreationDate="2021-02-26T23:46:09.610" Score="7" Body="&lt;p&gt;As comments have suggested, it was quite a bit like other smart terminals such as a VT-100. The terminal had an RS-232 connection to the mainframe. But (at least as of the Plato V) it also have an 8080 in the terminal, with its own 8-bit expansion bus, so in many ways it was similar to something like an Apple II or TRS-80 (etc.) with a serial card--able to run programs locally on the terminal, act purely as an I/O device for a program running on the mainframe, or timeshare between the two.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6s3JK.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6s3JK.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;[As an aside: note the figure number. Anybody who spent much time around Control Data products quickly learned to see all numbers as floating point.]&lt;/p&gt;&#xA;&lt;p&gt;To address your questions directly: either the terminal or the mainframe could send data to the other at an arbitrary time, without the far end having to request the data.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Reference&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://archives.library.illinois.edu/erec/University%20Archives/0713808/1977%20Aug%20X-50%20PLATO%20V%20Terminal%20Stifle.pdf&quot; rel=&quot;noreferrer&quot;&gt;Plato Manual&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="808" LastEditDate="2021-02-26T23:51:59.880" LastActivityDate="2021-02-26T23:51:59.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18139" PostTypeId="2" ParentId="18136" CreationDate="2021-02-27T01:07:48.900" Score="5" Body="&lt;h2&gt;TL;DR&lt;/h2&gt;&#xA;&lt;p&gt;A Plato terminal is kind of a character mode terminal on steroids. As such it supports of course any output by the connected host (push) without prior request from the terminal (after beeing connected ofc.).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;A Bit of History&lt;/h2&gt;&#xA;&lt;p&gt;What you call 'push' is the natural way any classic terminal works. No matter if interactive or a printer (*1). It's a device connected to a computer who can send information toward the terminal or receive from there.&lt;/p&gt;&#xA;&lt;p&gt;There is no predefined sequence, an interactive terminal can connect to an application, or an application can connect to a terminal. Basically a reverse direction logon. Useful for fixed function workstations like a cashier or a booking counter were no other application is to run. This is possible as terminals are known to their hosts ahead of opening a connection :))&lt;/p&gt;&#xA;&lt;p&gt;In general classic terminals fall in two cathegories:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Block Mode Terminals and&lt;/li&gt;&#xA;&lt;li&gt;Character Mode Terminals&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;A block mode terminal&lt;/h3&gt;&#xA;&lt;p&gt;is comparable to early interactive web pages, that only worked thru CGI and server side scripts plus very limited kind of dynamic content handling/update.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The user connect to an application (Browser: does an HTTP request)&lt;/li&gt;&#xA;&lt;li&gt;The mainframe answers with a form (Browser: sends a page)&lt;/li&gt;&#xA;&lt;li&gt;The user&#xA;&lt;ul&gt;&#xA;&lt;li&gt;fills some fields and sends the data back, which results in a new form -&amp;gt; Step 2&lt;/li&gt;&#xA;&lt;li&gt;or initiates a new request (Browser: klicking on a link/button) -&amp;gt; Step 2&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;The user disconnects from an application (types in another URL)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;In web terms, think of them as as browsers before addition of ECMA-script&lt;/strong&gt; (Everything before Netscape Navigator 2.0 in 1995), somewhat intelligent fixed function device.&lt;/p&gt;&#xA;&lt;h3&gt;A character mode terminal&lt;/h3&gt;&#xA;&lt;p&gt;is a bit more like a printer and a keyboard. Whatever the host sends gets displayed on the screen. Special commands can be used to select position and attributes (like colour, size or character set), or even output graphics/line drawings. Any character typed on the keyboard (or other input devices) is send directly to the host.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;In web like terms, think of them as a free form canvas with host side output (push) drawing thereon.&lt;/strong&gt; The terminal is only meant to channel that output to the canvas and input from the user back to the host, itself not providing any processing capabilities.&lt;/p&gt;&#xA;&lt;h3&gt;The Plato terminal&lt;/h3&gt;&#xA;&lt;p&gt;Is basically a character mode terminal, in the sense that it receives output commands from a host and returns input data. It's based around a set of output types, like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Line Drawing&lt;/li&gt;&#xA;&lt;li&gt;Character Output&lt;/li&gt;&#xA;&lt;li&gt;Direct Memory Write&lt;/li&gt;&#xA;&lt;li&gt;User Data Output&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;a set of input messages, like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Key Typed&lt;/li&gt;&#xA;&lt;li&gt;Touch Coordinate&lt;/li&gt;&#xA;&lt;li&gt;Data Transfer&lt;/li&gt;&#xA;&lt;li&gt;Status and Exception Message&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In general the output was received and drawn as received from the host, and input (keypress or touchpad coordinates) forwarded to the host. So far this is quite similar to a (fancy) character mode terminal.&lt;/p&gt;&#xA;&lt;p&gt;The real addition is the ability to run local 8080-software (think of that as scripts). Programms can originate from&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A minimal build in set of functions (ROM)&lt;/li&gt;&#xA;&lt;li&gt;Downloaded from the host (using the write memory mode)&lt;/li&gt;&#xA;&lt;li&gt;Loaded from local media (like floppy disk)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With that ability possibilities become endless - well, almost considering the rather limited RAM size :))&lt;/p&gt;&#xA;&lt;p&gt;So long story short, the Plato terminal are like a canvas that can be drawn from the host but anything could as well be handled by local scripts. &lt;strong&gt;In web terms they can be seen like a more modern Browser (past Netscape 2.0), with ECMA-script but without CSS.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In mainframe terinology every connected (remote) is a terminal. No matter if a card reader, a card punch, a printer,or well, a CRT based interactive terminal. An interactive terminal is just one (specific) kind.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-02-28T00:50:30.647" LastActivityDate="2021-02-28T00:50:30.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18140" PostTypeId="2" ParentId="18129" CreationDate="2021-02-27T03:55:41.153" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;For my new crime-novel I am in need of some more specific info on hiding digital data on analog VCR or VHS cassettes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's important to keep in mind that VHS is not only notorious bad, but even too bad to really capture full TV quality (only 3MHz and reduced Chroma). It's one of these barely good enough technologies that allow cheap devices that are better than not being able to do the job, but not really doing a good job.&lt;/p&gt;&#xA;&lt;p&gt;This is also the reason why any attempt to use the blanking interval (teletext) for data storage. while it might be nice and even would allow decoding with any equipped TV, VCS is simply not able to record them in sufficient quality.&lt;/p&gt;&#xA;&lt;p&gt;In principal there are distinct recordings on a VHS tape that can be used: Video and Audio. Recording Audio was another another way to lower bandwidth needed and thus reduce cost. Essentially there is a linear audio track, much like from a compact cassette, on the lower end of the video tape.&lt;/p&gt;&#xA;&lt;h3&gt;Using Audio&lt;/h3&gt;&#xA;&lt;p&gt;For such a project using the Audio track might be the most plausible way (unless we're presenting a super high tech James Bond type villain) as simple manipulation can be done already with kitchen level tools, while semi professional equipment (in this case mainly a computer and some self made analogue electronics) would already allow high quality (within limits) results.&lt;/p&gt;&#xA;&lt;p&gt;The drawback is that the audio channel is about 10 kHz - which is even below what a lousy kids cassette deck in 1980 could do (12-15 kHz). In theory the 10 kHz might be good for some 5 kBit/s, except we want to hide it in existing audio, so I guess there isn't room for more than 50-100 bit/s, that's 10 bytes per second, or 36 kByte/hour.&lt;/p&gt;&#xA;&lt;p&gt;Sounds not much by today's standard, but it's still ~10 pages cramped with text (or more like if not all lines are filled all the way). Quite room for a lot of lists and secret information. So if your intended usage fits that, using the audio track would be not only quite possible, but even doable with reasonable effort.&lt;/p&gt;&#xA;&lt;p&gt;It would need be two (good) VHS recorders, two tape machines and the encoding hardware.&lt;/p&gt;&#xA;&lt;p&gt;Essentially this would involve recording the existing audio from an existing cassette (*1) - best on a &lt;em&gt;good&lt;/em&gt; tape machine - then that recording this thru whatever soft/hardware setup is used to insert the signal and record the result on the second tape machine. This has the advantage that replay and second recording could be made as often as needed without stressing the tapes. The first tape machine could be saved if the modification can be done in real time. Still, I would record the intermediate result on tape, not directly onto the second VCR. But even that could be saved - if the equipment used is fast and reliable enough. When the new sound track is ready, the original tape is copied onto a new one, directly from one VCR to the next, but only the video track, audio track to be replaced by the new one. The only hurdle is to press play at the right time.&lt;/p&gt;&#xA;&lt;p&gt;All of this can be done with unmodified VCRs and no special hardware except what is needed to encode the message.&lt;/p&gt;&#xA;&lt;p&gt;Of course, if this is set in the mid to late 1990s, it would as well be possible to store and modify the audio data in digital form. But requirements would be much higher - including a lot of software that can't be found on the internet. Using a few analogue components is way less effort - and at that time, more people would still carry the knowledge to do so.&lt;/p&gt;&#xA;&lt;p&gt;One issue would be the selection of the right tape to record on. Best would be a new cassette, except if it's supposed to look like a prerecorded one (for cover) it might be hard to find a fitting one. Using a second prerecorded could be a way out, except rerecording on VHS is a mess. Quality will drop visibly.&lt;/p&gt;&#xA;&lt;p&gt;A solution might be using a modified recorder, one that only overwrites the audio track. This would require a bit of tinkering, but is entirely possible. With an additional, dedicated erase head this could deliver a genuine cassette with a modified audio track. Best cover possible.&lt;/p&gt;&#xA;&lt;p&gt;Oh, and one more thing: This doesn't work with Extended or Long Play cassettes. Their signal is even worse.&lt;/p&gt;&#xA;&lt;h3&gt;Using Video&lt;/h3&gt;&#xA;&lt;p&gt;Now, doing the same for video is several magnitude more complex. Some modifications could be made using analogue tools, still, it's be a lot of work at least. And forget about any digital manipulation. It would be rather visible with afordable technology at that time. Unless the villain is Lex Luthor, he might have the means to build a computer capable of doing so without easy noticeable artefacts.&lt;/p&gt;&#xA;&lt;h3&gt;Using later HIFI-VHS&lt;/h3&gt;&#xA;&lt;p&gt;Around 1985 JVC introduced HIFI recording by adding a rather complex encoding below the video signal. Now not only full 20 kHz and an extreme good noise ratio, but also full stereo was available. By using the same method as above a 2-8 times higher data rate would be possible, delivering maybe 100 kByte per hour of video.&lt;/p&gt;&#xA;&lt;p&gt;The real effect is if we fast forward until a few years later when essentially all premade cassettes were recorded in this mode ... &lt;em&gt;in addition(!) to classic linear recording&lt;/em&gt;. By 1990 even cheap VCR were capable to decode the new standard, wich meant, if they found an embedded HIFI signal, the linear track was simply ignored.&lt;/p&gt;&#xA;&lt;p&gt;Long story short, if the story is set after 1990, then the 'old' linear track will (almost) never show up when the cassette is played in a regular VCR. But the linear track is still there and it still offers it's 10 kHz channel. Good for maybe 0.5-1 KiB/s of data to be hidden. That's some 2-3 MiB per hour of recording. Not much, but for sure en extreme amount for 1990 - the equivalent of a stack of more than 20 diskettes.&lt;/p&gt;&#xA;&lt;p&gt;Using MPEG-1 as defined for Video-CD in 1993 (prior to DVD), this is good for at least 20 seconds of video in TV quality - much more by reducing the frame rate. But serious, I would drop the video idea here - rather go for pictures and/or text.&lt;/p&gt;&#xA;&lt;p&gt;The whole elegance of that part would be that the data is hidden complete without any influence to the carrying flick. 100% side band storage. Only someone using a more than 5-10 year old recorder would be noting that signal.&lt;/p&gt;&#xA;&lt;p&gt;Also, while recording may still need a bit of knowledge, the whole process will be simplified as there is no signal to be modified, just the linear audio track replaced by the data track, which can be generated without any regard to the video/audio content of the cassette. Hardware can be less complicate and be a single modified VCR, equipped with an additional audio erase head (the tricky part) and a separate input for the write head of the linear track.&lt;/p&gt;&#xA;&lt;p&gt;On the decoding side it's even less effort, as each modern (HIFI) VCR still contains the separate audio head for reading the linear track for compatibility with old recordings. So it's two wires and maybe an amplifier to break out the signal to be feed again onto the decoding computer. The whole modification can be made invisible from the outside, maybe with a hidden switch to activate, otherwise hidden in plain sight.&lt;/p&gt;&#xA;&lt;p&gt;Any DCI may find this by chance only. Like viewing the film on such a modified VCR were the villain had forgotten to switch it back, or if his office is only has a &lt;em&gt;real&lt;/em&gt; old VCR, or that VCR's HIFI detection is somehow broken.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - After all, a prerecorded tape will be least suspicious, who would look on an original packed copy of 'Earthquake' or 'Godfather' ? Or even better, some genuine Kids show? &lt;em&gt;'Why you ask officer? I bought that at the Disney store for my kids'&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-02-27T03:55:41.153" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18141" PostTypeId="1" AcceptedAnswerId="18145" CreationDate="2021-02-27T05:30:50.653" Score="6" ViewCount="311" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The Apple-1 motherboard was designed in such a way as to make it possible for the hobbyist to remove the 6502 processor and use a Motorola 6800 as the CPU instead. This was not a trivial operation, as the 6502 and the 6800 were not pin-compatible (the earlier 6501 was pin-compatible, but was withdrawn after Motorola sued MOS Technology). However, some other hardware would need to be added, and the software needed to operate it would be completely different.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://apple2history.org/history/ah02/#03&quot; rel=&quot;noreferrer&quot;&gt;https://apple2history.org/history/ah02/#03&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The picture below confirms that there was an area in the upper-left labeled &lt;code&gt;(6800 ONLY)&lt;/code&gt;.  &lt;strong&gt;What did these changes specifically do?&lt;/strong&gt;  For example, which 6800 signals had been moved to other pins on the 6502?  What new signals would need to be generated for the 6800?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OERcQ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OERcQ.jpg&quot; alt=&quot;Apple 1 board&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Related: &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/10978/10260&quot;&gt;Was there ever any real use for a 6800-based Apple 1?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-02-27T10:01:27.980" Title="What were the modifications on the Apple 1 board that would have made it 6800 compatible?" Tags="&lt;apple&gt;&lt;6800&gt;&lt;apple-1&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18142" PostTypeId="1" AcceptedAnswerId="18154" CreationDate="2021-02-27T05:39:18.540" Score="3" ViewCount="183" Body="&lt;p&gt;Around the year 1990, I played the game &lt;a href=&quot;https://en.wikipedia.org/wiki/Empire_(1977_video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Empire&lt;/a&gt; on a VAX/VMS system.  It was a turn-based, text-based-map wargame that later inspired Civilization and Xconq.&lt;/p&gt;&#xA;&lt;p&gt;What was particularly memorable about this game was how predictable its random number generator was.  If I performed a series of attacks during my turn, there was a certain pattern to which ones would succeed or fail.  The pattern was a repeating cycle of maybe 8 to 20 attacks.  After discovering the pattern, I planned my attacks for each turn, making sure I had sacrificial units for the attacks that were bound to fail.  I could easily defeat the computer, which apparently did not have my insight.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;What algorithm did Empire use to determine the outcome of attacks?&lt;/strong&gt;  Was it simply a linear congruential RNG (or the least significant bits thereof)?  Something worse?  How often would it produce a repeating pattern?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Related:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2244/10260&quot;&gt;How was early randomness generated?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/329/10260&quot;&gt;Color BASIC RND function not so random&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-02-28T17:54:23.660" Title="What random number generator was used in the VAX game Empire?" Tags="&lt;game&gt;&lt;vax&gt;&lt;rng&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18143" PostTypeId="1" AcceptedAnswerId="18146" CreationDate="2021-02-27T06:11:10.760" Score="30" ViewCount="3290" Body="&lt;p&gt;Java was released under the slogan 'write once, run anywhere'; while its adoption was probably more about 'now we have a language that provides garbage collection in a familiar workflow and with a good standard library', as far as Sun's management was concerned, it was an anti-Microsoft weapon, and to this end, it tried to pave over differences between platforms.&lt;/p&gt;&#xA;&lt;p&gt;One category of differences was in floating-point arithmetic. IEEE 754 made some progress towards reproducible floating point, but still left a great deal of variation. Java tried to nail it down. This was a controversial move. &lt;a href=&quot;https://people.eecs.berkeley.edu/%7Ewkahan/JAVAhurt.pdf&quot; rel=&quot;noreferrer&quot;&gt;William Kahan&lt;/a&gt; wrote an impassioned rant about it; as it happens, I mostly agree with the Java designers and mostly disagree with Kahan, but his writing is always thought-provoking.&lt;/p&gt;&#xA;&lt;p&gt;Now I vaguely remember the Java decision mostly held up, and to this day floating point in Java is mostly reproducible, but there was one issue, one small aspect of floating-point arithmetic, on which they backed down, one edge case in which platform differences in floating-point hardware can still manifest. But I cannot for the life of me remember what that was.&lt;/p&gt;&#xA;&lt;p&gt;What was the aspect of floating point on which a later version of Java backed down?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="15334" LastEditDate="2021-03-05T17:22:31.480" LastActivityDate="2021-03-05T17:22:31.480" Title="What aspect of portable floating point did Java back down on?" Tags="&lt;history&gt;&lt;floating-point&gt;&lt;design-choices&gt;&lt;java&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18144" PostTypeId="2" ParentId="4861" CreationDate="2021-02-27T06:38:26.477" Score="0" Body="&lt;p&gt;There was some mention about a rolling bar that can be used as a pointer. They still have those. I kind of like them.&lt;/p&gt;&#xA;&lt;p&gt;Look up the Contour Roller Mouse. Comes in standard USB and fits in front of a keyboard. Also has mouse buttons and scroll wheel.&lt;/p&gt;&#xA;" OwnerUserId="20949" LastActivityDate="2021-02-27T06:38:26.477" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18145" PostTypeId="2" ParentId="18141" CreationDate="2021-02-27T07:42:05.937" Score="7" Body="&lt;p&gt;The 6502 works with a single square wave clock signal that is connected to Phi0 pin 37. The chip has a built-in clock generator to use this clock input to internally generate two anti-phase non-overlapping clocks and will output these on two clock output pins, Phi1 (3) and Phi2 (39).&lt;/p&gt;&#xA;&lt;p&gt;The 6800 also needs two anti-phase non-overlapping clocks for internal operation, but as it does not have a built-in clock generator, it is not able to generate these internally from a single phase clock. So these two clocks must be externally generated for the two 6800 clock inputs Phi1 and Phi2, pins 3 and 37.&lt;/p&gt;&#xA;&lt;p&gt;The circuitry labeled &amp;quot;6800 only&amp;quot; is the external clock generator for the 6800. The circuitry uses logic chips to take in a single square wave clock signal and convert it into two non-overlapping anti-phase clock signals. Then there is a buffer stage made of discrete transistors to drive the clocks into the 6800.&lt;/p&gt;&#xA;&lt;p&gt;As a side note, the 6501 would have been pin-compatible with 6800, but it was discontinued due to legal pressure.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-02-27T10:01:27.980" LastActivityDate="2021-02-27T10:01:27.980" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18146" PostTypeId="2" ParentId="18143" CreationDate="2021-02-27T08:46:50.187" Score="33" Body="&lt;p&gt;The range of intermediate results.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://titanium.cs.berkeley.edu/doc/java-langspec-2.0.pdf&quot; rel=&quot;noreferrer&quot;&gt;Java Language Specification, 2nd Ed.&lt;/a&gt; relaxed the evaluation rules for floating-point expressions by introducing the notion of an ‘FP-strict’ expression, defined as follows (§15.4, p. 319):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Within an FP-strict expression, all intermediate values must be elements of the float value set or the double value set, implying that the results of all FP-strict expressions must be those predicted by IEEE 754 arithmetic on operands represented using single and double formats. Within an expression that is not FP-strict, some leeway is granted for an implementation to use an extended exponent range to represent intermediate results; the net effect, roughly speaking, is that a calculation might produce “the correct answer” in situations where exclusive use of the float value set or double value set might result in overflow or underflow.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The actual semantics are detailed in §5.1.8 ‘Value Set Conversion’; the two sections are then referred to in other sections that specify what the specification considers ‘intermediate’ floating-point results (which is basically boils down to all arithmetic operations, but not variable assignment or argument passing).&lt;/p&gt;&#xA;&lt;p&gt;The FP-strict mode can be enabled by the &lt;code&gt;strictfp&lt;/code&gt; keyword, which may be applied to classes (JLS 2nd Ed., §8.1.1.3), methods (§8.4.3.5) and interfaces (§9.1.1.2).&lt;/p&gt;&#xA;&lt;p&gt;This definition has remained unchanged in the specification as late as in Java 15 (JLS 15, &lt;a href=&quot;https://docs.oracle.com/javase/specs/jls/se15/html/jls-15.html#jls-15.4&quot; rel=&quot;noreferrer&quot;&gt;§15.4&lt;/a&gt; and &lt;a href=&quot;https://docs.oracle.com/javase/specs/jls/se15/html/jls-5.html#jls-5.1.13&quot; rel=&quot;noreferrer&quot;&gt;§5.1.13&lt;/a&gt; respectively). In the &lt;a href=&quot;http://titanium.cs.berkeley.edu/doc/java-langspec-1.0/&quot; rel=&quot;noreferrer&quot;&gt;first edition&lt;/a&gt;, no such ‘strictness’ notion is present and thus all floating-point expressions are implicitly strict.&lt;/p&gt;&#xA;&lt;p&gt;This is basically the same issue that the C language has (see GCC’s infamous &lt;a href=&quot;https://gcc.gnu.org/bugzilla/show_bug.cgi?id=323&quot; rel=&quot;noreferrer&quot;&gt;bug 323&lt;/a&gt; and &lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc/Disappointments.html&quot; rel=&quot;noreferrer&quot;&gt;the ‘Disappointments’ section of the GCC manual&lt;/a&gt;); though in Java’s case, the effects of this are considerably less wild as the specification only allows the JVM implementation to extend the exponent range and mandates that values be rounded strictly to their nominal type at variable assignment (&lt;a href=&quot;http://titanium.cs.berkeley.edu/doc/java-langspec-2.0.pdf&quot; rel=&quot;noreferrer&quot;&gt;JLS 2nd Ed.&lt;/a&gt; §5.2) and argument passing (§5.3).&lt;/p&gt;&#xA;&lt;p&gt;The other answers (&lt;a href=&quot;/a/18174/15334&quot;&gt;@gnasher729’s&lt;/a&gt; and &lt;a href=&quot;/a/18156/15334&quot;&gt;@supercat’s&lt;/a&gt;) go into more detail as to the motivation; the latter also made me realise I have misread the specification slightly.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-03-01T09:18:45.650" LastActivityDate="2021-03-01T09:18:45.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18147" PostTypeId="1" AcceptedAnswerId="18152" CreationDate="2021-02-27T09:05:19.587" Score="6" ViewCount="418" Body="&lt;p&gt;According to &lt;a href=&quot;http://pdp10.nocrew.org/docs/instruction-set/Obsolete.html&quot; rel=&quot;noreferrer&quot;&gt;pdp10.nocrew.org&lt;/a&gt;, the JSA and JRA instructions were invented for PDP-6 Fortran. It's a strange claim; now I don't know anything about Fortran, but I find it hard to convince myself that some random language could pressure such a CISCy hardware design enough to have a whole other calling convention put in.&lt;/p&gt;&#xA;&lt;p&gt;It's quite a strange subroutine calling mechanism, as well. The PC is not stored on the stack, like most modern subroutine calling conventions, nor is the PC stored in the first word of the subroutine, like on some other PDP's. Instead, you pick an accumulator (there are 16 to choose from), and it's stored to the address you selected. Then the effective address and the current PC are stored in the accumulator. And then execution continues at the effective address + 1. And then there's &lt;code&gt;JRA&lt;/code&gt; to undo this song and dance and resume the callee's execution.&lt;/p&gt;&#xA;&lt;p&gt;So what is it about Fortran that made them need or want to include this in the PDP-6?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2021-02-28T03:55:55.980" Title="Why does PDP-6 Fortran need JSA and JRA?" Tags="&lt;pdp-10&gt;&lt;pdp-6&gt;" AnswerCount="3" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18148" PostTypeId="2" ParentId="18114" CreationDate="2021-02-27T09:12:41.830" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;what was the last central processing unit made commercially available that was not on one chip?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://cpuville.com/Kits/8-bit-processor-kit.html&quot; rel=&quot;noreferrer&quot;&gt;8-bit discrete logic processor kit&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dAnSI.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dAnSI.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It is commercially available now (you can buy it from the website above).&lt;/p&gt;&#xA;&lt;p&gt;It is multi-chip since it's made of 74LS chip.&lt;/p&gt;&#xA;&lt;p&gt;And... it is definitely retro.&lt;/p&gt;&#xA;" OwnerUserId="4941" LastActivityDate="2021-02-27T09:12:41.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18149" PostTypeId="2" ParentId="18147" CreationDate="2021-02-27T09:36:05.247" Score="1" Body="&lt;p&gt;&lt;em&gt;(Just a Remark about the being 'modern' or not)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It's quite a strange subroutine calling mechanism, as well. The PC is not stored on the stack, like most modern subroutine calling conventions, nor is the PC stored in the first word of the subroutine, like on some other PDP's.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really, it's a variant of Branch and Link like used not only in very old architectures, including the /360, but as well rather up to date one, like ARM.&lt;/p&gt;&#xA;&lt;p&gt;The core function is jumping and loading the return address into a register, which makes it reentrant (unlike the linked description says).&lt;/p&gt;&#xA;&lt;p&gt;Storing that AC before the entry point can be seen as a way to transfer a parameter both ways - if used that way it's no longer reentrant.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-02-27T09:36:05.247" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18150" PostTypeId="2" ParentId="18147" CreationDate="2021-02-27T11:31:09.367" Score="7" Body="&lt;p&gt;I think you need to keep the context in mind to understand the decision.&lt;/p&gt;&#xA;&lt;p&gt;The PDP-6 was introduced in 1964.&lt;/p&gt;&#xA;&lt;p&gt;At the time, the number of high level languages in wide use could be counted on one hand with fingers left over. In fact, they were pretty much: Fortran, COBOL, and Algol.&lt;/p&gt;&#xA;&lt;p&gt;Just about the only other obvious candidates would have been LISP and CPL. LISP was known, but not widely used. The first paper on CPL was published in 1963, so if they'd read it and seen something really earth-shaking, they could have tried to account for it, but it would probably have been late enough in the design cycle to lead to a likely delay in shipping.&lt;/p&gt;&#xA;&lt;p&gt;Especially for the scientific/engineering market, Fortran was &lt;em&gt;completely&lt;/em&gt; dominant.&lt;/p&gt;&#xA;&lt;p&gt;As far as why those instructions were needed: Fortran didn't impose any restrictions that made those instructions really necessary. But at the time, all high level languages were viewed with a bit of suspicion. Anything that couldn't compete pretty well with hand-written assembly language was simply not going to sell.&lt;/p&gt;&#xA;&lt;p&gt;These instructions did enough to support Fortran subroutine calls, while adding about as little overhead (either in terms of circuit complexity or execution speed) as possible. As such, they were cheap both to implement and to use.&lt;/p&gt;&#xA;" OwnerUserId="808" LastActivityDate="2021-02-27T11:31:09.367" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18151" PostTypeId="2" ParentId="18129" CreationDate="2021-02-27T13:02:15.287" Score="1" Body="&lt;p&gt;When is the novel set?&lt;/p&gt;&#xA;&lt;p&gt;My first thought is that in the 80s it was common for home computers to use audio cassette tapes to store programs and data. I would imagine that the audio track on a VHS cassette could also be used the same way. When played back normally you'd simply hear a bunch of noise, although it would be recognizable to anyone familiar with such things.&lt;/p&gt;&#xA;&lt;p&gt;However, if it was used to store an actual program, which in turn displayed the data, you'd need to know what type of computer to connect it to the actually get the program to run.&lt;/p&gt;&#xA;&lt;p&gt;However, getting a bit creative, and remembering that these things were all analog and usually had the standard red, white and yellow RCA connectors, I'm wondering what would happen if the analog audio was sent to the video channel and recorded as an image? The result would probably just look like a bunch of noise onscreen... However, if that cassette was played back with the video out routed back to the audio input of a computer... hmmm... would it be good enough to preserve the program and actually allow it to be loaded? I have NO idea - perhaps with suitable amps and EQs to regulate the levels in and out?&lt;/p&gt;&#xA;&lt;p&gt;Its a crazy speculative idea and I lack the hardware required to test it.&lt;/p&gt;&#xA;&lt;p&gt;I did find this information:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ArVid&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/ArVid&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So apparently the Russians were doing a more high tech version of it in the 90s on PCs with a special ISA board. I'd imagine the results would still be noise if played back on a standard VCR. So some data could be added to the end of a movie and most people would dismiss it as nothing. But if you KNEW, and had the right hardware, well - bingo!&lt;/p&gt;&#xA;&lt;p&gt;I was gonna mention Danmere too but looks like you know that one.&lt;/p&gt;&#xA;" OwnerUserId="20882" LastEditorUserId="20882" LastEditDate="2021-02-27T13:23:29.097" LastActivityDate="2021-02-27T13:23:29.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18152" PostTypeId="2" ParentId="18147" CreationDate="2021-02-27T13:13:10.183" Score="6" Body="&lt;p&gt;It's not that FORTRAN required those particular instructions, but that they were the sort of instructions that existing FORTRANs tended to use.&lt;/p&gt;&#xA;&lt;p&gt;At the time, calling conventions were somewhat unsettled, and different machines exhibited a fairly large variety of instructions to implement calls.&lt;/p&gt;&#xA;&lt;p&gt;The link you gave cites the ostensible reason:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;JSA, Jump and Save AC, stores the AC in word addressed by the&#xA;effective address. Then the left half of the AC is set to the&#xA;effective address and the right half of AC is set to the return PC.&#xA;Then the PC is set to one greater than the effective address. The JRA&#xA;instruction unwinds this call.&lt;/p&gt;&#xA;&lt;p&gt;The advantage of this call is that a routine may have multiple entry&#xA;points (which is difficult to do with JSR) and it's easy to find (and&#xA;later to skip over) arguments that follow the calling instruction&#xA;(which is possible to do with PUSHJ, but not quite so convenient).&#xA;Among the disadvantages of this call is that it is non reentrant, and&#xA;it doesn't save flags.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, if I've got this right, the subroutine expects a JSA with a specific AC.  Once you've entered the subroutine at one of its several entry points, the old AC content is stored at that entry point, and (this is the crucial part) the entry point address and return address both are in the AC.&lt;/p&gt;&#xA;&lt;p&gt;The return address being in the AC allows return without knowing the particular entry point (which is not possible if the link is stored at the entry point).  And (but this is common to the case where the link is saved in the AC) you can retrieve the arguments that are inline after the call, a fairly common parameter-passing mechanism at the time.&lt;/p&gt;&#xA;&lt;p&gt;The entry point address being in the AC allows two things: (1) automatic restore of the AC on return - not possible with a simple &amp;quot;save link in AC&amp;quot; instruction, (2) you can find the previous content of the AC, though off-hand I can't think of why you'd need that.  Possibly for &amp;quot;alternate exits&amp;quot; through labels passed as arguments?&lt;/p&gt;&#xA;&lt;p&gt;Point (1) could have been done with PUSHJ/POPJ, but stacks were not really in the FORTRAN mindset at the time. From this vantage point, it looks like the PDP-6 designers included one of everything.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Per the &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp6/F-65_PDP-6_Handbook_Aug64.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-6 handbook&lt;/a&gt;, page 36:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There are three reasons for the JSA-JRA pair: to provide for subroutines with multiple entries;&#xA;to provide an easily-accessible referece for getting data; and to&#xA;prevent loss of information, making it possible to nest subroutines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-02-28T03:55:55.980" LastActivityDate="2021-02-28T03:55:55.980" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18153" PostTypeId="2" ParentId="18129" CreationDate="2021-02-27T13:52:16.160" Score="4" Body="&lt;p&gt;You could encode binary using index marks in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Control_track&quot; rel=&quot;nofollow noreferrer&quot;&gt;control track&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The control track is also used to hold index marks, which were normally written at the beginning of each recording session, and can be found using the VCR's index search function: this will fast-wind forward or backward to the nth specified index mark, and resume playback from there. At times, higher-end VCRs provided functions for the user to manually add and remove these marks — so that, for example, they coincide with the actual start of the television program — but this feature later became hard to find.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="75" LastActivityDate="2021-02-27T13:52:16.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18154" PostTypeId="2" ParentId="18142" CreationDate="2021-02-27T14:33:47.820" Score="5" Body="&lt;p&gt;From the DECUS VMS Fortran &lt;a href=&quot;https://github.com/scruss/Vax_Empire&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt;, the random routine &lt;a href=&quot;https://github.com/scruss/Vax_Empire/blob/main/empire.for#L4721&quot; rel=&quot;noreferrer&quot;&gt;RND()&lt;/a&gt; is as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    FUNCTION RND(IHIGH)&#xA;C&#xA;    IMPLICIT INTEGER(A-Z)&#xA;    INTEGER*2 TIME(4)&#xA;    EQUIVALENCE (TIME(2),SEED)&#xA;    REAL MTH$RANDOM&#xA;    DATA SEED/0/&#xA;    IF (SEED.EQ.0) CALL SYS$GETTIM(TIME)&#xA;    RND=IFIX(MTH$RANDOM(SEED)*IHIGH)&#xA;    END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;According to David Deley's &lt;a href=&quot;https://daviddeley.com/random/random4.htm&quot; rel=&quot;noreferrer&quot;&gt;How Computers Generate Random Numbers&lt;/a&gt;, &lt;code&gt;MTH$RANDOM&lt;/code&gt; is a linear congruential RNG defined as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SEED = (69069*SEED + 1) mod 2**32&#xA;X = SEED/2**32&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;A brief look through the code suggests that the computer's 'random' decisions might be far less random than one might hope, and seem mostly to be based on munged values of the existing game state. But this is merely a first impression of over 5000 lines of Vax Fortran code.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2021-02-27T14:33:47.820" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18155" PostTypeId="2" ParentId="18129" CreationDate="2021-02-27T17:09:05.350" Score="2" Body="&lt;p&gt;By modulating the brightness of alternating fields you can encode binary data. There was a physical game that used this, I think it was Wheel of Fortune. You could play at home and your game knew how to respond because the &amp;quot;answer&amp;quot; was encoded in the video, and it picked it up with a simple photoelectric sensor. But humans watching the same show didn't notice.&lt;/p&gt;&#xA;&lt;p&gt;You could also use video or audio steganography much like images are watermarked to detect improper use or distribution. You'd want something that could stand up to the limited bandwidth of VHS, but it is very possible without casual detection.&lt;/p&gt;&#xA;" OwnerUserId="4199" LastActivityDate="2021-02-27T17:09:05.350" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18156" PostTypeId="2" ParentId="18143" CreationDate="2021-02-27T17:31:05.953" Score="11" Body="&lt;p&gt;From what I understand, unless things have changed, I think that even in non-strict mode, Java required that floating-point values be rounded to the appropriate length in the mantissa.  Leeway was allowed, however, with values that were smaller the smallest normalized &lt;code&gt;float&lt;/code&gt; value.  Most &lt;code&gt;float&lt;/code&gt; values should have 24 bits of precision, but values whose magnitude is between 0.5 and 1.0 times the smallest normalized value should have 23 bits, those whose magnitude is between 0.25 and 0.5 times the smallest normalized value should have 22 bits, etc.  Many hardware platforms had ways of quickly rounding a mantissa to 24 bits, but couldn't efficiently force the magnitude-dependent rounding except by actually storing a value to memory as a &lt;code&gt;float&lt;/code&gt; and then reading it back.&lt;/p&gt;&#xA;&lt;p&gt;A lot of the controversy surrounding such issues could be avoided if languages were to provide different floating-point types which had matching representations but different semantics, and a way of specifying which particular type should be represented by keywords like &lt;code&gt;float&lt;/code&gt; or &lt;code&gt;double&lt;/code&gt;.  If general-purpose implementations are expected to provide modes to explicitly select the language-default behaviors, as well as modes which use whichever behaviors are most efficient, then someone who wishes to write code which works efficiently but correctly on a wide range of platforms could test their code using both the mode that would run more efficiently on their platform, and a mode that would run much less efficiently on their platform but would mimic the behavior of other platforms.  Unfortunately, the normal tendency has been to try to push for all implementations to process everything the same way, despite the fact that different behaviors will be more useful for different platforms and purposes.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-02-27T17:31:05.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18157" PostTypeId="1" CreationDate="2021-02-27T17:57:33.110" Score="7" ViewCount="246" Body="&lt;p&gt;This is something I often notice whenever I see a first-generation Pokémon game being played on a Game Boy emulator. It might be present on real hardware as well, but I don’t have that to test.&lt;/p&gt;&#xA;&lt;p&gt;When the player moves around so that the map has to scroll, and there are also NPC sprites present on the map, the other sprites tend to lag a few pixels behind the scrolling motion; it takes a couple more frames for the sprites to move into their correct position. Here’s a demonstration in Pokémon Yellow, recorded in &lt;a href=&quot;https://mgba.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;mGBA&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cSK3a.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cSK3a.gif&quot; alt=&quot;The player character walks horizontally, then vertically on the ground floor of his house in Pallet Town. An NPC sprite is noticeably lagging behind.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And here’s Pokémon Crystal for comparison (targetting the Game Boy Color), where there is no such effect:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/R5DWU.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/R5DWU.gif&quot; alt=&quot;The player character walks horizontally, then vertically on the ground floor of his house in New Bark Town. There are two NPC sprites, but no lagging.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have a number of hypotheses why this might happen:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This is an inaccuracy in the emulator. Given that I remember seeing this in probably every emulator in which I tried, I regard this explanation as rather improbable.&lt;/li&gt;&#xA;&lt;li&gt;This is a limitation of Game Boy’s hardware sprite support, which emulators dutifully replicate, and it was fixed in Game Boy Color.&lt;/li&gt;&#xA;&lt;li&gt;This is a bug in the scrolling subroutine, fixed in Generation II games, and in principle it should be possible to backport the fix; the issue just wasn’t considered significant at the time.&lt;/li&gt;&#xA;&lt;li&gt;This is a &lt;em&gt;deliberately&lt;/em&gt; inserted artefact meant to compensate for LCD ghosting or a similar effect, which was rendered unnecessary in Generation II thanks to Game Boy Color’s improved display.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Which one of these is the closest to truth?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-28T18:02:27.773" LastActivityDate="2021-02-28T18:02:27.773" Title="Why do sprites lag behind a scrolling map in first-generation Pokémon games?" Tags="&lt;gaming&gt;&lt;game-boy&gt;&lt;bugs&gt;&lt;lcd-display&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18158" PostTypeId="1" AcceptedAnswerId="18161" CreationDate="2021-02-27T20:03:53.603" Score="1" ViewCount="204" Body="&lt;p&gt;The most important difference between the original 'K&amp;amp;R' C, and ANSI/ISO C89/90, was function prototypes. These started being supported by some compilers in the mid-eighties, were formally available with the ratification of the standard in 1989-90.&lt;/p&gt;&#xA;&lt;p&gt;But cross-platform code – say heavily cross-platform code, something that needed to compile on a lot of different platforms, including ones where GCC wasn't necessarily available yet and you had to use vendor compilers of very patchy quality – couldn't necessarily assume availability of the latest features.&lt;/p&gt;&#xA;&lt;p&gt;Roughly how long was it before cross-platform code – something like Emacs, Oracle, Nethack – started at least assuming you could use function prototypes?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Added:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Kevin Sherlock, good idea about the old tarballs. DrSheldon, thanks for the reply on NetHack! Checking Emacs 21.4, dating from 2005, it is still using K&amp;amp;R function definitions. I'm not clear whether the status of that is 'yes these are still required for compatibility' or 'no longer required, changing them to modern function prototypes is still on the to-do list' but still a useful data point.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, checking Postgres 95, the earliest version of that project for which I can find sources, it is using modern function prototypes.&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4274" LastEditDate="2021-02-28T06:20:01.447" LastActivityDate="2021-02-28T06:20:01.447" Title="When did cross-platform C start assuming function prototypes?" Tags="&lt;history&gt;&lt;c&gt;&lt;compilers&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2021-03-01T05:48:53.893" ContentLicense="CC BY-SA 4.0" />
  <row Id="18159" PostTypeId="1" CreationDate="2021-02-27T20:26:07.770" Score="-6" ViewCount="226" Body="&lt;p&gt;Billy Bob boots up Tomb Raider on his PlayStation. He loads the saved game from his memory card and it loads up the level he is on. Then Billy controls Lara in a sloppily manner, so that she dies. Now he (obviously) chooses to load from the last save game.&lt;/p&gt;&#xA;&lt;p&gt;Since the level is already loaded into RAM at this point, you would think that, immediately after Billy presses the &amp;quot;OK&amp;quot; button to load the save, minus the time it takes to access the file on the memory card (which is near-instant), Lara and every other &amp;quot;object&amp;quot; in the 3D world would simply be insta-reset to their original positions, without any need for it to access the game disc at all. (Or maybe just to start some music playing in the beginning, which was not playing at the time the game was over, and had already been unloaded from memory.)&lt;/p&gt;&#xA;&lt;p&gt;However, in actuality, there is the same &amp;quot;Loading...&amp;quot; screen as when you originally load the game/level. It appears to forget anything loaded into the work memory of the PlayStation and starts over from scratch. Every. Single. Time.&lt;/p&gt;&#xA;&lt;p&gt;In contrast, some PC games (including at least one copy of Tomb Raider, although it could contain mods/hacks which I'm unaware of) appear to instantly put back Lara to the original position when you load the save game. No loading/accessing any disc once it's in the RAM. Not even a brief flash to a &amp;quot;loading&amp;quot; screen.&lt;/p&gt;&#xA;&lt;p&gt;What could possibly explain this? It was a big deal to have to wait each time, yet this practice continued for the subsequent PS Lara games (at least up until 3). Why? Was there a technical reason for having players wait for it to re-load the asset data from the disc each and every time you die. (And it sure happened many a time during a normal playthrough...)&lt;/p&gt;&#xA;" OwnerUserId="20952" LastEditorUserId="8911" LastEditDate="2021-02-28T06:34:55.940" LastActivityDate="2021-02-28T06:34:55.940" Title="Why do PlayStation 1 CD-based video games (nearly?) always have to reload the entire level each time you start over?" Tags="&lt;ram&gt;&lt;sony-playstation&gt;&lt;cd-rom&gt;&lt;game-consoles&gt;" AnswerCount="2" CommentCount="8" ClosedDate="2021-02-28T13:59:33.837" ContentLicense="CC BY-SA 4.0" />
  <row Id="18160" PostTypeId="2" ParentId="18159" CreationDate="2021-02-27T20:58:50.900" Score="9" Body="&lt;p&gt;Because the PS1 has a very small amount of RAM, and sophisticated games, especially those on linear tracks like &lt;em&gt;Crash Bandicoot&lt;/em&gt;, would load new data from the disc continually as the player traversed the level, replacing the data in RAM that was already there. When the player dies and reappears at an earlier location, the level would have to be reloaded from that point.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.quora.com/How-did-game-developers-pack-entire-games-into-so-little-memory-twenty-five-years-ago/answer/Dave-Baggett?srid=z9ZA&amp;amp;share=1&quot; rel=&quot;noreferrer&quot;&gt;From a related thread on Quora:&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Dave Baggett Naughty Dog (employee #1):&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here's a related anecdote from the late 1990s. I was one of the two programmers (along with Andy Gavin) who wrote Crash Bandicoot for the PlayStation 1.&lt;/p&gt;&#xA;&lt;p&gt;RAM was still a major issue even then. The PS1 had 2MB of RAM, and we had to do crazy things to get the game to fit. We had levels with over 10MB of data in them, and this had to be paged in and out dynamically, without any &amp;quot;hitches&amp;quot;—loading lags where the frame rate would drop below 30 Hz.&lt;/p&gt;&#xA;&lt;p&gt;It mainly worked because Andy wrote an incredible paging system that would swap in and out 64K data pages as Crash traversed the level. This was a &amp;quot;full stack&amp;quot; tour de force, in that it ran the gamut from high-level memory management to opcode-level DMA coding. Andy even controlled the physical layout of bytes on the CD-ROM disk so that—even at 300KB/sec—the PS1 could load the data for each piece of a given level by the time Crash ended up there.&lt;/p&gt;&#xA;&lt;p&gt;I wrote the packer tool that took the resources—sounds, art, lisp control code for critters, etc.—and packed them into 64K pages for Andy's system. (Incidentally, this problem—producing the ideal packing into fixed-sized pages of a set of arbitrarily-sized objects—is NP-complete, and therefore likely impossible to solve optimally in polynomial—i.e., reasonable—time.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2021-02-27T21:14:02.693" LastActivityDate="2021-02-27T21:14:02.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18161" PostTypeId="2" ParentId="18158" CreationDate="2021-02-27T21:25:11.087" Score="8" Body="&lt;p&gt;The NetHack sources have several macros which are conditional on whether &lt;code&gt;KR1ED&lt;/code&gt; is defined, which stands for Kernighan and Ritchie's book &lt;a href=&quot;https://en.wikipedia.org/wiki/The_C_Programming_Language&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The C Programming Language&lt;/em&gt;&lt;/a&gt; first edition.  If one's compiler is pre-ANSI, you must &lt;code&gt;#define KR1ED&lt;/code&gt;; if your compiler is ANSI-compliant, you leave &lt;code&gt;KR1ED&lt;/code&gt; undefined.  Thus, &lt;strong&gt;the change in how functions are prototyped occurred between K&amp;amp;R first edition and ANSI C&lt;/strong&gt;.  Specifically for NetHack, I believe this was around version 3.0, as that is when there was rapid spread to other platforms.&lt;/p&gt;&#xA;&lt;p&gt;Function prototypes in NetHack are wrapped in one of several macros, the implementation of which depends on the existence of &lt;code&gt;KR1ED&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;NDECL&lt;/code&gt; wraps prototypes that return &lt;code&gt;void&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;FDECL&lt;/code&gt; wraps most function prototypes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;VDECL&lt;/code&gt; wraps prototypes of functions with variable parameters.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://github.com/NetHack/NetHack/blob/NetHack-3.6.2/include/extern.h&quot; rel=&quot;noreferrer&quot;&gt;current version&lt;/a&gt; of NetHack still uses these prototype wrappers.  However, it is scheduled to be taken out in the &lt;a href=&quot;https://github.com/NetHack/NetHack/blob/NetHack-3.7/include/extern.h&quot; rel=&quot;noreferrer&quot;&gt;next version&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-02-27T21:25:11.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18162" PostTypeId="2" ParentId="18159" CreationDate="2021-02-27T21:31:17.707" Score="0" Body="&lt;p&gt;Just off the top of my head, and without checking how much the premise holds up: the PS1 has enough memory to hold a single instance of level state.&lt;/p&gt;&#xA;&lt;p&gt;As the player progresses, they modify level state.&lt;/p&gt;&#xA;&lt;p&gt;So the question is: why might the PS1 not have enough memory to hold two copies of level state — the original and the current?&lt;/p&gt;&#xA;&lt;p&gt;I think just because reloading is cheap, and doing it that way around lets you spend every single byte on level detail.&lt;/p&gt;&#xA;&lt;p&gt;Of course, countless examples of that being unnecessary exist, starting with Ridge Racer that doesn’t even need its own disc inserted once it has loaded.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2021-02-27T21:31:17.707" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18163" PostTypeId="1" CreationDate="2021-02-27T22:25:09.717" Score="4" ViewCount="185" Body="&lt;p&gt;I've begun hacking on a lot of ISDN equipment that I've purchased (phones, terminal adapters, protocol analyzers, etc.) One thing that's struck me odd is that a lot of the equipment notes it compatible with specific PBX, or Switch models (i.e. ESS5, Nortel) as opposed to claiming compatibility with DSS1 or something. This strikes me as odd, because if ISDN is standardized from the physical layer up, one would expect the switches to be mostly running on these standards and terminal devices to have at least a baseline of compatibility with any standard switch.&lt;/p&gt;&#xA;&lt;p&gt;I only have one possible hunch. I recall a story from someone who had decided to build their own professional TCP/IP stack. They discovered later on that the modern internet did not quite fit into the RFCs but also relied on a ton of unofficial extensions. Perhaps there was a similar sort of thing going on with ISDN networks?&lt;/p&gt;&#xA;" OwnerUserId="8590" LastEditorUserId="7946" LastEditDate="2021-02-28T18:26:27.273" LastActivityDate="2021-03-01T03:51:40.027" Title="Why did ISDN terminals tend to advertise the switches they are compatible with vs the standard protocols?" Tags="&lt;isdn&gt;&lt;telephony&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18164" PostTypeId="2" ParentId="18157" CreationDate="2021-02-28T00:08:47.277" Score="7" Body="&lt;p&gt;Well, there's a fifth one: A sequence issue not really considered relevant when first published.&lt;/p&gt;&#xA;&lt;p&gt;The underlaying issue is that sprites are not moved during scrolling the background, prior to (re)drawing the screen. While this is rather obvious with large sharp screens, it will be perceived less of an issue on original Game Boy hardware due the small screen and it's less than great display quality with moving images.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Sprites are positioned in screen coordinates, not relative to a background. Thus, sprites that should move with the background, like the people sat at the table, need to be repositioned in a second, separate step. Here this the developers may have skiped it at all, only updated internal coordinates, so the next 'normal' drawing cycle will reposition them anyway.&lt;/p&gt;&#xA;&lt;p&gt;The player sprite in contrast does not move at all. He stays always at screen center. That non-moving (in terms of screen coordinates) makes it seem to 'move' flawless (in terms of perceived movement).&lt;/p&gt;&#xA;&lt;p&gt;In total this looks quite like a sequence issue.&lt;/p&gt;&#xA;&lt;p&gt;When the player moves, then the program sequence looks like:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Reposition (scroll) background against direction of movement&lt;/li&gt;&#xA;&lt;li&gt;Draw picture&lt;/li&gt;&#xA;&lt;li&gt;Reposition 'non-moving' sprites&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;When the movement ends another redraw is done. That's a 'solution' often found in games to clean up any artefacts that may be left over from complex animations like effects and movement. With high frame rates (like on TV), the effects are next to invisible.&lt;/p&gt;&#xA;&lt;p&gt;As an LCD based game, screen redraw is only needed with changing content, so way less often, making the effect visible on a good display - which the Game Boy didn't feature :))&lt;/p&gt;&#xA;&lt;p&gt;By flipping step 2 and 3 the 'lag' will vanish and that seems to be what happened with later versions.&lt;/p&gt;&#xA;&lt;p&gt;Bottom line: &lt;strong&gt;One might call it in hindsight a sequence error, but at the time it was within expectations (state of the art), as it doesn't get as anoying with the Game Boy hardware.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="10566" LastEditDate="2021-02-28T10:11:09.470" LastActivityDate="2021-02-28T10:11:09.470" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18165" PostTypeId="1" CreationDate="2021-02-28T02:18:51.807" Score="9" ViewCount="1161" Body="&lt;p&gt;In &lt;a href=&quot;https://www.gamezone.com/news/gz_interview_catch_a_ride_in_full_3d_with_crazy_taxi_for_game_boy_advance/&quot; rel=&quot;noreferrer&quot;&gt;an interview&lt;/a&gt; with the developers of the Crazy Taxi game for the GBA, they mention that they were able to achieve 3D graphics with a pure-software 3D rendering engine that they called Rush:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It is a full 3D poly engine – so it is ideal for most types of game. This&#xA;engine allows us to develop games in 3D on the handheld, providing a much&#xA;closer gameplay and visual experience for the player to those found on the&#xA;next-gen consoles and PC. It includes an open plan environment meshing system&#xA;which allows use of huge landscapes (such as the cities in Crazy Taxi), only&#xA;limited by cartridge size. Also – as it is a software renderer we are not&#xA;restricted to the GBA’s sprite limitations – so we can have more sprites&#xA;on-screen, including very large sprites.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This engine allowed for impressive graphics on a rather limited system without hardware 3D:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/fC32j.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;How did it achieve such high quality graphics on a GBA system? From what I know, many objects are just sprites of objects from different view angles (such as the cars and the green arrow), and the audio quality is arguably not much better than that of Pole Position. It also understandably had a very poor framerate that would sometimes get as low as 8 or so fps, at least judging from memory. But even all of these tradeoffs do not seem sufficient, at least intuitively, to provide the graphics it has.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;How did the Rush 3D engine work, and how did it achieve such impressive graphics?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="8090" LastEditorUserId="8090" LastEditDate="2021-02-28T05:06:16.627" LastActivityDate="2021-02-28T12:45:59.980" Title="How did the Rush 3D engine in Crazy Taxi: Catch a Ride work?" Tags="&lt;graphics&gt;&lt;game&gt;&lt;game-boy-advance&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18166" PostTypeId="2" ParentId="18165" CreationDate="2021-02-28T04:09:54.347" Score="16" Body="&lt;p&gt;I don't have knowledge of the Rush 3D engine itself, but I used to work for a company that made software graphics engines, so I can speak in general terms about how they're likely to work.&lt;/p&gt;&#xA;&lt;p&gt;The GBA has a low screen resolution (240x160) and a reasonably powerful CPU (16.8 MHz ARM7 core).  This is easily sufficient to run a Doom-style game engine with no further explanation required; Doom itself originally ran on x86 CPUs with higher clock speeds but much lower efficiency, and in a resolution of 320x200 which has substantially more pixels to produce.&lt;/p&gt;&#xA;&lt;p&gt;Rush 3D, however, describes itself as a fully polygonal engine, more similar to Quake than Doom.  A quick look at the provided screenshot suggests single, nearest-neighbour textures (probably without perspective correction) or Gouraud shading are the options available, and that the vertex/polygon count of each object is very low (which is fine for such a small screen).  It is not immediately clear whether a Z-buffer is employed (which saves CPU but uses more RAM), or whether objects are simply rendered from furthest to nearest (slower but smaller).  These limitations are typical of early software 3D rendering.&lt;/p&gt;&#xA;&lt;p&gt;The usual process starts by filling the screen with the background, in this case a distant landscape and sky which is scrollable.  Then the vertex coordinates of each object are transformed from object space to world space by a vector-matrix multiplication, and from there to screen coordinates with a second vector-matrix multiplication and a per-vertex perspective division.  This yields a list of triangles defined by their corners' X and Y coordinates on the screen, depth into the screen, plus S and T coordinates into any texture they might have.  Untextured triangles perform a lighting calculation instead of determining S-T coordinates.&lt;/p&gt;&#xA;&lt;p&gt;Then rasterisation begins, converting those triangles into pixels.  Each triangle covers many pixels on average, so this part is the most carefully optimised.  Bresenham's algorithm (or something similar) gives the triangle edge coordinates along each scanline (pixel row).  Textured triangles determine the S and T coordinates for the left end of each scanline by interpolation, then calculate a step by which S and T should be incremented for every pixel along the scanline.&lt;/p&gt;&#xA;&lt;p&gt;It is then a simple matter to perform a texture lookup, or take the interpolated lit colour in Gouraud shading, and transfer that colour to the screen.  Untextured triangles perform similar interpolation steps to convert the lit vertex colours to individual pixels.  If a depth buffer is used, it is tested (using an interpolated depth) before the texture fetch and updated if the test passes.&lt;/p&gt;&#xA;&lt;p&gt;Finally, HUD UI elements are drawn on top using normal 2D rendering techniques, which are much more efficient than converting them into 3D primitives and rasterising those.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2021-02-28T12:45:59.980" LastActivityDate="2021-02-28T12:45:59.980" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="18167" PostTypeId="5" CreationDate="2021-02-28T09:06:21.973" Score="0" Body="" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-28T09:06:21.973" LastActivityDate="2021-02-28T09:06:21.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18168" PostTypeId="4" CreationDate="2021-02-28T09:06:21.973" Score="0" Body="The use of computers with obsolete telephone technologies." OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-02-28T09:06:21.973" LastActivityDate="2021-02-28T09:06:21.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18169" PostTypeId="1" AcceptedAnswerId="18182" CreationDate="2021-02-28T09:27:54.090" Score="5" ViewCount="438" Body="&lt;p&gt;reading of &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/18165/6868&quot;&gt;this&lt;/a&gt; question brings up 3Dfx Voodoo 1 Emulator in my memories. I always wandered how did it work so good time as any to ask...&lt;/p&gt;&#xA;&lt;p&gt;My memory is hazy on the details so I might miss remember things anyways this is what I remember:&lt;/p&gt;&#xA;&lt;p&gt;I saw &lt;strong&gt;3Dfx Emulator v0.2 from ELZ SOFTWARE&lt;/strong&gt; was &lt;strong&gt;MS-DOS&lt;/strong&gt; utility (single almost 1 MByte executable without any additional files) that had to be started before any 3Dfx SW. It took about 30sec-2min on AMD K5 120MHz PC to start. I always assumed its a TSR and created some kind of LUT tables in memory to speed up stuff. After that MS-DOS 3Dfx capable games could run (not all though) without the HW present.&lt;/p&gt;&#xA;&lt;p&gt;What was a surprise for me was that the stuff runs fast. Not as fast as the real 3Dfx hw but much faster than usual SW render.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know what techniques where used to do this?&lt;/p&gt;&#xA;&lt;p&gt;How the emulator bypassed missing 3Dfx HW. IIRC on win apps 3Dfx was encapsuled in single &lt;code&gt;Glide?x.DLL&lt;/code&gt; with all &lt;code&gt;OpenGL 1.0&lt;/code&gt; functions which by exchanging it with OpenGL hooked DLL worked too (however winding rule was inverted sometimes).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;But how it was done in MS-DOS (there are no DLL involved in there)?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;How it achieve high rendering speed?&lt;/strong&gt; The quality was not as good as real HW but better than games SW native render.&lt;/p&gt;&#xA;&lt;p&gt;In case it helps From a quick google search looks like its in &lt;a href=&quot;http://www.fdd5-25.net/emulators.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; however the link says its blocked for Chrome (if anyone has working link to this please edit it in)...&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;I just tested it in DOSBox:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;First its telling it is building 4x255 tables:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gMM8f.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gMM8f.png&quot; alt=&quot;init start&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;and after serious boost to emulation cycles it do some kind of 8-pass initialization:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4Eufe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4Eufe.png&quot; alt=&quot;init done&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;after this DOS 3Dfx SW is runable, no temp files are visible anywhere...&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2021-03-02T12:26:22.393" LastActivityDate="2021-03-02T12:26:22.393" Title="How 3Dfx Voodoo 1 Emulator works" Tags="&lt;ms-dos&gt;&lt;graphics&gt;&lt;emulation&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18170" PostTypeId="2" ParentId="18157" CreationDate="2021-02-28T17:22:43.313" Score="4" Body="&lt;p&gt;Lacking meaningful research avenues, I started surveying YouTube videos, and I think I managed to mine some insights even from that scant evidence. Here is what I found out:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The issue is apparently just barely visible, if at all, on the original Game Boy; it probably cannot be noticed on a real handheld unless one is specifically looking for it, as LCD motion smearing masks the issue to the point of imperceptibility. Take &lt;a href=&quot;https://www.youtube.com/watch?v=Z1AjFq9Bbvw&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt;: it’s hardly perfect for this investigation, as the handheld isn’t exactly still in the frame. Nevertheless, around 3:05 you may take a close look at the guard standing next to the house, or around 6:10 at the NPC sprite on the right. When I watch those moments frame by frame, I do notice some familiar-looking, if only slight, wobbling of the sprite against the map. But I am not even entirely sure if I am actually seeing it, or just imagining it because I know it should be there.&lt;/p&gt;&#xA;&lt;p&gt;Either way though, the NPC sprites don’t seem to be any more sharp when in motion either (compared to the map), so this seems to count against the ‘deliberate kludge’ explanation. Then though, the aforementioned shaking, and the fact that the video was recorded at 30 frames per second might have, well, distorted the picture somewhat.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The scroll drag is &lt;a href=&quot;https://www.youtube.com/watch?v=U0xLy6-_570&amp;amp;t=130s&quot; rel=&quot;nofollow noreferrer&quot;&gt;just as pronounced&lt;/a&gt; on a Super Game Boy (a Game Boy cartridge adapter for the SNES) and on the Game Boy Player (an analogous adapter for the GameCube) as it is on emulators. Both are official Nintendo products containing original Game Boy hardware, and as such may be considered alternative, equally legitimate implementations of the Game Boy ‘platform’.&lt;/p&gt;&#xA;&lt;p&gt;This weakly counts against the emulators being at fault; or at least it means that whatever pitfalls the emulators fell into, Nintendo themselves couldn’t help but do the same.&lt;/p&gt;&#xA;&lt;p&gt;The first Pokémon games were released two years after the Super Game Boy became available, and do contain some SGB-specific features (like a customised border, and SGB colour support); clearly, the game must have been tested on this hardware. It is therefore somewhat surprising that this issue slipped through.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Not so many people are aware that the original second-generation games (Pokémon Gold and Silver) are actually playable on the monochrome Game Boy, even though they weren’t particularly optimised for it. Having recalled this, I decided to emulate Pokémon Gold in Game Boy mode to see how it behaves. When I did, the lagging effect was absent, unlike with first-generation games, but very much like running in Game Boy Color mode:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/en6ZM.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/en6ZM.gif&quot; alt=&quot;Pokémon Gold, played on an emulated Game Boy in grayscale. The player character walks horizontally, then vertically on the ground floor of his house in New Bark Town. There is an NPC sprite, but no lagging.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This seems to rule out the ‘hardware limitation’ explanation (one that I much doubted anyway), and to count in favour of the ‘problem with the game’ hypothesis.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Verdict&lt;/strong&gt;: By elimination, it seems this is a defect in the game itself, one that has either slipped through unnoticed entirely, or was neglected before Generation II. My guess is that it was probably fixed more for the sake of the Super Game Boy than the handhelds themselves.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastActivityDate="2021-02-28T17:22:43.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18171" PostTypeId="2" ParentId="18142" CreationDate="2021-02-28T17:54:23.660" Score="0" Body="&lt;p&gt;1990? Are you sure it wasn't 1980? The game you describe sounds a lot more like those from the start of the 80s rather than the end. &lt;/p&gt;&#xA;&lt;p&gt;Regardless, according to the ever reliable Wiki, there were only 10 main random number generators around at the time:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_random_number_generators&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/List_of_random_number_generators&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If we go back to 1980, that goes down to 5.&lt;/p&gt;&#xA;&lt;p&gt;I suspect most systems of that era were using variations of Lehmer or LFS generators. But it sounds like that game had a particularly bad implementation if you could predict it like that.&lt;/p&gt;&#xA;&lt;p&gt;My best theory is that it did stuff like add two or more random &amp;quot;dice rolls&amp;quot;, much like popular tabletop RPGs of the time. This severely alters the probability into a much more predictable bell-curve and most likely explains the effect you experienced.&lt;/p&gt;&#xA;" OwnerUserId="20882" LastActivityDate="2021-02-28T17:54:23.660" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18172" PostTypeId="2" ParentId="18169" CreationDate="2021-02-28T19:36:35.590" Score="2" Body="&lt;p&gt;Community Wiki because this doesn't yet come close to being an answer, but I think helps with discussion and might be a basis from which others can get to an answer:&lt;/p&gt;&#xA;&lt;p&gt;The page you link to isn't blocked in Safari, but is blocked from my eyes due to being in Russian. Nevertheless, Google will translate the 3dfx mention as:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;3Dfx Emulator v0.2 from ELZ SOFTWARE [970 kb] - firstly, at present, this program is very slow and you will need a fast Pentium computer, secondly, you can get a full-fledged emulation only on the P200. 3Dfx Emulator will not work with straight 3D games. The program does not work under Windows NT.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Downloading the linked file and checking its readme (which is in English, no translation necessary):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why spent money on a expensive card when you can get it for free?&#xA;This program emulates a 3Dfx in software. This is a early beta&#xA;and all functions in the 3Dfx-chipset is not implemented yet.&lt;/p&gt;&#xA;&lt;p&gt;At the moment, this program is quite slow and you will need a fast&#xA;Pentium II to get full speed of emulation, on a P200 you will get about&#xA;50% of a real 3Dfx. I think that is pretty good anyway for a software&#xA;emulation, I have used some special caching technology to archive&#xA;fast emulation but it is not fully optimized yet.&lt;/p&gt;&#xA;&lt;p&gt;The compatibilty is another issue, because all functions is not&#xA;implemented yet, it will not work with all games, I have included&#xA;a list on the games I have been able to get the emulator to work with.&lt;/p&gt;&#xA;&lt;p&gt;3Dfx Emulator will NOT work with games using Direct 3D if you have&#xA;Direct X 5 installed, use Direct X 3. Sorry about this...&lt;/p&gt;&#xA;&lt;p&gt;It will NOT work under Windows NT.&lt;/p&gt;&#xA;&lt;p&gt;In the near future: ... Support for Direct X&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Based on the lists of game titles (including GLQuake, Flight Simulator and Star Wars Shadows of the Empire), and the DirectX mentions, although this emulator launches in DOS it seems to be a DOS/Windows hybrid.&lt;/p&gt;&#xA;&lt;p&gt;Furthermore, its actual authors don't seem to agree with your analysis, stating that the emulation &amp;quot;is quite slow&amp;quot; — and at 50% speed on a P200 that's borne out; I had a P200 and adding a 3Dfx got me stable frame rates and bilinear filtering but definitely did not double performance.&lt;/p&gt;&#xA;&lt;p&gt;Beyond that, the only clue is &amp;quot;special caching technology&amp;quot;, which could mean almost anything.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2021-02-28T19:36:35.590" CommentCount="3" CommunityOwnedDate="2021-02-28T19:36:35.590" ContentLicense="CC BY-SA 4.0" />
  <row Id="18173" PostTypeId="2" ParentId="18113" CreationDate="2021-02-28T20:27:32.980" Score="8" Body="&lt;p&gt;Looking at the pictures on iFixit, the two PCBs that fit behind the shoulder buttons don't seem to be reinforced by anything much:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/6Ik1g.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/gsmjW.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Excess pressure on the shoulder buttons might bend these boards slightly away and cause the connection to not be made. The alternative is corrosion on the connection traces; you say you have tried contact cleaner.&lt;/p&gt;&#xA;&lt;p&gt;Try bending these slightly and make sure that they fit into the grooves on the back half of the case.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2021-02-28T20:32:59.923" LastActivityDate="2021-02-28T20:32:59.923" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18174" PostTypeId="2" ParentId="18143" CreationDate="2021-02-28T23:56:32.813" Score="9" Body="&lt;p&gt;The biggest problem was that on Intel CPUs with external floating point unit (80387 IIRC) all operations were done in extended precision, while Java required double precision. And due to “double rounding”, you can’t use an extended precision operation and round to double precision, in rare situations this would change the result.&lt;/p&gt;&#xA;&lt;p&gt;So this would have been a total performance disaster. But fortunately that FPU can be set into a “64 bit rounding” mode, where all results have their mantissa rounded to double precision. There was a problem left that wasn’t quite as bad: Even with 64 bit rounding, the exponent range was the full extended precision range. So calculating &lt;code&gt;(a * b) / c&lt;/code&gt; should produce an infinity if &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;b&lt;/code&gt; and &lt;code&gt;c&lt;/code&gt; are very large, but gave the correct result instead. Workarounds would have been expensive.&lt;/p&gt;&#xA;&lt;p&gt;As a result, Java allowed operations to have temporary results calculated at higher than double precision. This still required rounding when a result was assigned to a variable, but that was just about bearable. The problem is gone with SSE floating point.&lt;/p&gt;&#xA;" OwnerUserId="1959" LastEditorUserId="15334" LastEditDate="2021-03-05T17:13:25.757" LastActivityDate="2021-03-05T17:13:25.757" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18175" PostTypeId="2" ParentId="18163" CreationDate="2021-03-01T03:51:40.027" Score="4" Body="&lt;p&gt;From memory (it was a few decades ago...) the ISDN situation in North America was not particularly uniform. Some of the big switch vendors (like AT&amp;amp;T) had flavors of ISDN that were kind of mostly compatible with the standards but had differences that the devices needed to specifically know about (I don't know what the differences actually were). And since end users had little or no say in what kind of switch they were connected to, the device vendors had no choice but to accommodate the various switch incompatibilities.&lt;/p&gt;&#xA;&lt;p&gt;As mentioned in the comments, the situation in Europe was much more uniform and ISDN was widely used there, at least compared to North America. Then ADSL and cable came along and eliminated any further need for anybody to think much about ISDN.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2021-03-01T03:51:40.027" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18176" PostTypeId="2" ParentId="18117" CreationDate="2021-03-01T06:11:01.350" Score="10" Body="&lt;p&gt;Although on page 124 / Section 1.3.1 of Volume 1 of TAOCP, Knuth only gives the numbers (360+650+…), recall that his indexing is exhaustive. Accordingly, searching for page 124 in the index (easier with the &lt;a href=&quot;https://www-cs-faculty.stanford.edu/%7Eknuth/taocp.html#:%7E:text=eBook%20versions&quot; rel=&quot;noreferrer&quot;&gt;PDF edition&lt;/a&gt;) gives all 16 computers whose model numbers are averaged. In alphabetical order, these index entries are:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Bendix_G-20&quot; rel=&quot;noreferrer&quot;&gt;Bendix G20&lt;/a&gt;, &lt;a href=&quot;https://datatron.blogspot.com/2018/02/introducing-burroughs-220.html&quot; rel=&quot;noreferrer&quot;&gt;Burroughs B220&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/CDC_1604&quot; rel=&quot;noreferrer&quot;&gt;CDC 1604 computer&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Honeywell_800&quot; rel=&quot;noreferrer&quot;&gt;Honeywell H800&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_650&quot; rel=&quot;noreferrer&quot;&gt;IBM 650 computer&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_709&quot; rel=&quot;noreferrer&quot;&gt;IBM 709 computer&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_7070&quot; rel=&quot;noreferrer&quot;&gt;IBM 7070 computer&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-4&quot; rel=&quot;noreferrer&quot;&gt;PDP-4 computer&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Philco_computers#S-2000&quot; rel=&quot;noreferrer&quot;&gt;Philco S2000 computer&lt;/a&gt;, RCA 601 computer (different from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Minivac_601&quot; rel=&quot;noreferrer&quot;&gt;Minivac 601&lt;/a&gt; mentioned in the other answer), &lt;a href=&quot;https://en.wikipedia.org/wiki/Autonetics_Recomp_II&quot; rel=&quot;noreferrer&quot;&gt;Recomp II computer&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360&quot; rel=&quot;noreferrer&quot;&gt;System/360 computers&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_III&quot; rel=&quot;noreferrer&quot;&gt;UNIVAC III computer&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_Solid_State&quot; rel=&quot;noreferrer&quot;&gt;UNIVAC SS80 computer&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_1100/2200_series#1107&quot; rel=&quot;noreferrer&quot;&gt;UNIVAC 1107 computer&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/SDS_9_Series&quot; rel=&quot;noreferrer&quot;&gt;XDS 920 computer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;That's the answer, but a few other remarks tangentially, some probably well-known to regulars at this site:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;When TAOCP was conceived of in 1962, there was really a need for such a &amp;quot;mix&amp;quot; of computers to teach with, as there was a wide variety in computer architectures at the time, and programming directly for a machine was often what programmers did. For instance, many computers (including several in the above list) were &lt;em&gt;decimal&lt;/em&gt; (rather than binary) computers. You can see this in the text just before section 1.3.1, and note how it differs between the first edition of 1968 and the current (third) edition of 1997 (bolding added by me, to highlight some of the diffs):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There should be no hesitation about learning a &lt;strong&gt;new&lt;/strong&gt; machine language; indeed, the author &lt;strong&gt;has&lt;/strong&gt; found it not uncommon to be writing programs in a half dozen different machine languages during the same week! Everyone with more than a casual interest in computers will probably get to know &lt;strong&gt;several different machine languages&lt;/strong&gt; in the course of his lifetime. MIX has been specially designed to be so much like most &lt;strong&gt;existing&lt;/strong&gt; machine languages that its characteristics are easy to assimilate.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;versus&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There should be no hesitation about learning a machine language; indeed, the author &lt;strong&gt;once&lt;/strong&gt; found it not uncommon to be writing programs in a half dozen different machine languages during the same week! Everyone with more than a casual interest in computers will probably get to know &lt;strong&gt;at least one machine language&lt;/strong&gt; sooner or later. MIX has been specially designed to preserve the simplest aspects of &lt;strong&gt;historic&lt;/strong&gt; computers, so that its characteristics are easy to assimilate.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Several of the computers in the above list were of personal relevance to Knuth:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The IBM 650 was the first computer he encountered, and the TAOCP series of books is dedicated to the IBM 650. (&amp;quot;&lt;em&gt;This series of books is affectionately dedicated to the Type 650 computer once installed at Case Institute of Technology, in remembrance of many pleasant evenings.&lt;/em&gt;&amp;quot;) He also wrote a beautiful tribute to the IBM 650 (&lt;a href=&quot;http://ed-thelen.org/comp-hist/KnuthIBM650Appreciation.pdf&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;The IBM 650: An Appreciation from the Field&amp;quot;&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://datatron.blogspot.com/2018/02/introducing-burroughs-220.html&quot; rel=&quot;noreferrer&quot;&gt;Burroughs 220&lt;/a&gt; is mentioned in the above tribute. (&lt;em&gt;&amp;quot;Then I graduated, and began to tackle other machines. My favorite computer for the next five years became the Burroughs 220, which was another joy to use.&amp;quot;&lt;/em&gt;) He wrote an Algol 58 compiler for the related Burroughs 205 machine (see &lt;a href=&quot;http://ed-thelen.org/comp-hist/B5000-AlgolRWaychoff.html#7&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;The Summer Of 1960 (Time Spent with don knuth)&amp;quot;&lt;/a&gt;), and was for a few years a consultant for Burroughs in Pasadena. (While he was a graduate student at Caltech, also in Pasadena.)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Univac Solid State (SS80 above) was the third computer he wrote a compiler for, this time a Fortran compiler. From &lt;a href=&quot;https://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/KnuthDigitalArchive-Index.html&quot; rel=&quot;noreferrer&quot;&gt;the Computer History Museum archive&lt;/a&gt; of several Knuth papers, see several documents that mention &amp;quot;Univac Solid State&amp;quot;, e.g. &lt;a href=&quot;https://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/k-6-pdf/k-6-R11-UnivacSS-FORTRANII-prelim-spec.pdf&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt;. (See also &lt;a href=&quot;https://ieeexplore.ieee.org/document/4640791&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;One can guess from typical Knuth sense of humour that probably the name &amp;quot;MIX&amp;quot; was chosen as it was simply a &amp;quot;mix&amp;quot; of several machine languages, and then he noticed that &amp;quot;MIX&amp;quot; is also 1009 in Roman numerals, and made a joke out of it by  choosing several computers whose model numbers averaged come out to 1009. (Rather than starting with 16 computers and averaging their numbers, and the rounded-down result in Roman numerals coincidentally being an appropriate word.) You shouldn't take this averaging too seriously, as the &amp;quot;origin story&amp;quot;. He plays a similar trick elsewhere: although he &lt;a href=&quot;http://literateprogramming.com/knuthweb.pdf&quot; rel=&quot;noreferrer&quot;&gt;once wrote&lt;/a&gt;, about his choice of &amp;quot;WEB&amp;quot; for his literate programming system, that&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I chose the name WEB partly because it was one of the few three-letter words of English that hadn't already been applied to computers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(he was the original WEB developer!), he says in &lt;a href=&quot;https://texdoc.org/serve/webman/0&quot; rel=&quot;noreferrer&quot;&gt;the WEB manual&lt;/a&gt; that it is named after his mother-in-law (whose initials coincidentally happen to be WEB).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For his new computer &amp;quot;MMIX&amp;quot;, he carries out a similar exercise in &amp;quot;Volume 1, Fascicle 1: MMIX&amp;quot;, and also mentioned in some talk the effort it took to retain the joke by finding computers averaging to 2009, this time without rounding:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(Cray I + IBM 801 + RISC II + Clipper C300 + AMD 29K + Motorola 88K + IBM 601 + Intel i960 + Alpha 21164 + POWER 2 + MIPS R4000 + Hitachi SuperH4 + StrongARM 110 + Sparc 64)/14 = 28126/14 = 2009.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3726" LastActivityDate="2021-03-01T06:11:01.350" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18177" PostTypeId="2" ParentId="18126" CreationDate="2021-03-01T07:13:07.850" Score="2" Body="&lt;p&gt;Your question has several components, but I'll just comment on two of them&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Did the concept originate from NexGen or was it already being used in&#xA;other non-x86 CISC processors?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The basic concept is &amp;quot;ancient&amp;quot; and pre-dates x86 or the term RISC.  Computers even in the 1950's and 1960's had microcode for implementing complex instructions in what we might now call firmware.  The early machines were programmed directly in assembly, so they needed to expose a CISC-like ISA with lots of functionality to the assembly programmer.  (Operating systems as we understand them today hadn't fully been invented yet, so you couldn't just dlopen a dynamic library with higher level functionality.  Even the biggest systems of the time were more like working on bare embedded hardware.  If you wanted functionality, it was either in the hardware, or you wrote it in assembly yourself as a part of the specific program you were working on.)&lt;/p&gt;&#xA;&lt;p&gt;But the technology for actually implementing a processor was still crude with transistor budgets (or vacuum tube budgets in early machines!) being very low by modern standards, so you couldn't make a machine with millions of vacuum tubes to implement a separate circuit to implement every desirable instruction.  Thus the execution units were very RISC-like.  (Though the terms CISC and RISC hadn't been coined yet, and the application of them of wildly debatable.)  Microcode was used to implement the more complex instructions in terms of what we'd now call the hardware's micro-ops.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;why is it so successful to be widely used today?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It was sort of inevitable.  The original x86 ISA was initially driven by what was practical to implement in the late 70's and early 80's.  Over the course of decades the technology for implementing the guts of a processor changed.  So in order to preserve backwards compatibility of the public ISA, there was always going to be some sort of conceptual mismatch between the ISA and the implementation over time.  If you have a simple RISC-inspired core, you can expose a more complicated public interface with stuff like microcode.  But if you want to make the actual execution units some sort of Mega-CISCy thing with massively more complicated conceptual instructions, you have no way to really expose the more complicated instructions in terms of simpler ones.&lt;/p&gt;&#xA;&lt;p&gt;Like for a simplified example, if you have a multiply instruction, you can implement it internally in terms of a bunch of add operations.&lt;/p&gt;&#xA;&lt;p&gt;But if you implement a multiply operation, you can't expose it in an ISA that only has Add instructions.&lt;/p&gt;&#xA;&lt;p&gt;So the trend was always going to be that you could break down complex instructions into implementations based on simpler operations, but not the other way around.  Of course, the public ISA has grown massively more complex over time as well -- it's not as if a 90's x86 chip only implemented the 8086 ISA.  So there is an equal and opposite push to make the guts more complicated over time as the public ISA grows.  (And to grow the public ISA as you can implement more complicated guts.)  But in terms of existing instructions, there's always a limit to how complex you can make the implementation, so at least some of them will tend to wind up being implemented in terms of simpler steps.  So if civilization gets bombed back to the stone age and computers are reinvented from scratch, the basic concept of cracking complex instructions into simpler to implement operations will eventually get reinvented.&lt;/p&gt;&#xA;" OwnerUserId="5309" LastActivityDate="2021-03-01T07:13:07.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18178" PostTypeId="1" AcceptedAnswerId="18181" CreationDate="2021-03-01T11:06:13.357" Score="11" ViewCount="1140" Body="&lt;p&gt;The Sun Type 3 keyboard labelled its meta keys &amp;quot;Left&amp;quot; and &amp;quot;Right&amp;quot;.  The Type 4 changed this to a hollow diamond, or lozenge: ◇.  The Type 5 and on uses a solid diamond: ◆.&lt;/p&gt;&#xA;&lt;p&gt;My question is: why use the diamond symbol for meta?&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2021-03-02T03:55:19.923" Title="Why do Sun keyboards use diamond for meta?" Tags="&lt;keyboards&gt;&lt;sun-workstation&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18179" PostTypeId="1" CreationDate="2021-03-01T17:31:13.177" Score="5" ViewCount="187" Body="&lt;p&gt;I’ve got a 2005 PowerMac G5, Dual 2.3 GHz with a stock Nvidia GeForce 6600 running OSX 10.4 Tiger that I enjoy experimenting with, purely for fun and to learn writing legacy software in XCode.&lt;/p&gt;&#xA;&lt;p&gt;Would adding a second GeForce 6600 from another PowerMac work or even be useful? I’m not trying to improve gaming performance here.&lt;/p&gt;&#xA;&lt;p&gt;I believe the GeForce 6600 supports only a single Dual-Link DVI output (while it has 2x DVI ports on the back) so it should support Apple’s 30″ Cinema Display. Would adding a second GeForce 6600 into the 8x PCI-E socket allow one to run second 30″ Cinema Display?&lt;/p&gt;&#xA;&lt;p&gt;Would there be any other benefit to trying this out? I don’t believe that the G5 motherboard supports SLI despite SLI starting with the GeForce 6 series.&lt;/p&gt;&#xA;&lt;p&gt;Open CL was initially released in 2009 and as a software developer this might be fun to experiment with.&lt;/p&gt;&#xA;&lt;p&gt;Has anyone tried this before? What happened with you did it and why did you try it?&lt;/p&gt;&#xA;" OwnerUserId="18134" LastEditorUserId="15334" LastEditDate="2021-03-01T17:34:57.067" LastActivityDate="2021-03-01T19:34:25.753" Title="Multi-GPU PowerMac G5?" Tags="&lt;graphics&gt;&lt;programming&gt;&lt;apple&gt;&lt;powerpc&gt;&lt;powermac-g5&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18180" PostTypeId="2" ParentId="18179" CreationDate="2021-03-01T19:34:25.753" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I’ve got a 2005 PowerMac G5, Dual 2.3 GHz with a stock Nvidia GeForce 6600 running OSX 10.4 Tiger&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;AFAIR that's a &lt;a href=&quot;https://de.wikipedia.org/wiki/Nvidia-GeForce-6-Serie&quot; rel=&quot;nofollow noreferrer&quot;&gt;plain 6600&lt;/a&gt;, right?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Would adding a second GeForce 6600 from another PowerMac work or even be useful?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I believe the GeForce 6600 supports only a single Dual-Link DVI output (while it has 2x DVI ports on the back) so it should support Apple’s 30″ Cinema Display.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. The card has two DVI, one dual link, one single link. Both are supported, so it's no issue to connect a second screen to the second DVI connector - ofc. it can't go past 1920x1200.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Would adding a second GeForce 6600 into the 8x PCI-E socket allow one to run second 30″ Cinema Display?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Haven't tried it, but I believe it should work.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Would there be any other benefit to trying this out?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. Except to feed curiosity :))&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I don’t believe that the G5 motherboard supports SLI despite SLI starting with the GeForce 6 series.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;AFAIR The plain 6600 does not support SLI, only LE/VE (which you don't want to use) and GT do.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;In general I'd rather recommend to change the 6600 against an upscale 6600 GT, which will improve performance considerable. In fact, a &lt;a href=&quot;http://themacelite.wikidot.com/compatibility&quot; rel=&quot;nofollow noreferrer&quot;&gt;6800 and 7800 should work as well&lt;/a&gt;, and may deliver an even higher punch. Also these cards usually feature more memory, so less which is never a bad idea :)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.s.: While this isn't the newest Mac, you might be better off asking at a dedicated Apple site, like &lt;a href=&quot;https://apple.stackexchange.com/&quot;&gt;Ask Different&lt;/a&gt; here on SE.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-03-01T19:34:25.753" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18181" PostTypeId="2" ParentId="18178" CreationDate="2021-03-01T20:10:03.657" Score="11" Body="&lt;p&gt;To elevate Patrick Schlüter's comment into an answer: here's a picture of one of Sun's keyboards:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UTatt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UTatt.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Compare and contrast with one of Apple's keyboards:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lBxnW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lBxnW.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Or even with a modern Microsoft keyboard:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9GV4T.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9GV4T.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sun's diamond symbols sit where Apple uses the Apple logo and Microsoft uses the Windows logo; it's therefore a safe bet that they reference Sun's diamond logo as shown on the top right of the pictured keyboard.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2021-03-02T03:55:19.923" LastActivityDate="2021-03-02T03:55:19.923" CommentCount="9" CommunityOwnedDate="2021-03-01T20:10:03.657" ContentLicense="CC BY-SA 4.0" />
  <row Id="18182" PostTypeId="2" ParentId="18169" CreationDate="2021-03-01T21:49:14.767" Score="6" Body="&lt;p&gt;This is only a partial answer, at the OP’s request, addressing the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;But how it was done in MS-DOS (there are no DLL involved in there)?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I don’t know whether this emulator used this technique or not, I haven’t been able to download it to even check whether it works under DOS or Windows.&lt;/p&gt;&#xA;&lt;p&gt;However, under MS-DOS, there were multiple implementations of dynamically-linked libraries, and 3Dfx’s Glide used one of them. Starting with MS-DOS 2, &lt;a href=&quot;http://fd.lod.bz/rbil/interrup/dos_kernel/214b.html&quot; rel=&quot;noreferrer&quot;&gt;interrupt 0x21 function 0x4B03&lt;/a&gt; supports loading “overlays”, &lt;em&gt;i.e.&lt;/em&gt; portions of executables stored in separate files (typically with a &lt;code&gt;.OVL&lt;/code&gt; extension); DOS itself performs MZ-style relocation in these overlays if appropriate (&lt;em&gt;The MS-DOS Encyclopedia&lt;/em&gt; has a detailed example starting at page 335). Other runtime libraries extend this; many Borland languages provide their own version, as do a number of DOS extenders, such as Tenberry’s DOS/4G, which supports overlays &lt;a href=&quot;https://web.archive.org/web/20190202155306/http://www.tenberry.com/dos4g/faq/format.html&quot; rel=&quot;noreferrer&quot;&gt;in Linear Executable format&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The 3Dfx DOS drivers include a DOS/4G overlay, &lt;code&gt;GLIDE2X.OVL&lt;/code&gt;, which provides the implementation of Glide appropriate for the card they drive. Most DOS 3Dfx games would look for this in their own directory, and would load it at runtime to use the installed 3Dfx card (there were a few early exceptions which built their 3Dfx support in).&lt;/p&gt;&#xA;&lt;p&gt;As a result, other implementations can be provided, as long as they include all the same symbols as &lt;code&gt;GLIDE2X.OVL&lt;/code&gt;. This is how a number of OpenGL- or Direct3D-based Glide wrappers work. A putative pure DOS emulator could have been implemented in this fashion: implement Glide in software, and ship it as a replacement overlay.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-03-01T21:59:08.843" LastActivityDate="2021-03-01T21:59:08.843" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18183" PostTypeId="2" ParentId="16153" CreationDate="2021-03-02T01:33:34.960" Score="1" Body="&lt;p&gt;DISCLAIMER:  I'm no &amp;quot;expert&amp;quot;, but I have been around the block quite a few times.&lt;/p&gt;&#xA;&lt;p&gt;This should have occurred to me earlier, but being otherwise distracted, never articulated fully my thoughts.&lt;/p&gt;&#xA;&lt;p&gt;I'll give you some background:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Optimisations are very likely heuristic.  If &amp;gt; 50% of specific sequences of code does x, rather than y, then optimise for that scenario.   Rinse and repeat.   This was something that Systems Programmers on mainframes did for a living to eek out some more CPU cycles.&lt;/li&gt;&#xA;&lt;li&gt;We're not just talking about C here.  It's done in many places...&lt;/li&gt;&#xA;&lt;li&gt;Processors have (adaptive) branch prediction logic/caches (see &lt;a href=&quot;https://stackoverflow.com/questions/24852649/how-does-the-branch-predictor-know-if-it-is-not-correct&quot;&gt;https://stackoverflow.com/questions/24852649/how-does-the-branch-predictor-know-if-it-is-not-correct&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;VM's have optimising compilers which alter the underlying runtime bytecode to speed things up a bit by switching whether a branch needs to be made (possibly costing slightly more CPU cycles to fetch more memory if the branch is far away(see 3))&lt;/li&gt;&#xA;&lt;li&gt;Possible that some higher-level languages could be leveraging functionality from c/c++ compilers... meaning the same &amp;quot;boilerplate&amp;quot; code is shared acr&#xA;oss many languages.&lt;/li&gt;&#xA;&lt;li&gt;No doubt there are many many more that I'd care to know.&lt;/li&gt;&#xA;&lt;li&gt;The moral of the story... you either have to be lucky, or FULLY understand what's going on in order to crack performance optimisation.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="8799" LastActivityDate="2021-03-02T01:33:34.960" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18184" PostTypeId="1" CreationDate="2021-03-02T01:40:03.057" Score="-4" ViewCount="159" Body="&lt;p&gt;At the moment all i have is some arbitrary 6502 class(no audio yet). all instructions are working properly.&lt;/p&gt;&#xA;&lt;p&gt;the nesdev wiki is confusing me way too much at this point.&lt;/p&gt;&#xA;&lt;p&gt;All i know about the ppu is that it has 0x3000 RAM and some internal registers.&lt;/p&gt;&#xA;&lt;p&gt;I'm also aware the the RAM accessible by the 6502 has some registers on it's own end to control the flow of the PPU.&lt;/p&gt;&#xA;&lt;p&gt;As far as how the actual process is done i have no idea.&lt;/p&gt;&#xA;&lt;p&gt;So the question is, how exactly does the 6502 communicate with the PPU? I would also like to know more about mappers (but as far as understanding the ppu, not too much detail about the mappers)&#xA;How does the ppu handle manners on it's own end? what about the scrolling?&lt;/p&gt;&#xA;&lt;p&gt;I'm trying to paint a better picture on my head, but as far as the individual registers and all they're documented on the NES wiki. but i do need to understand things from a amore abstracted point of view.&lt;/p&gt;&#xA;" OwnerUserId="20987" LastActivityDate="2021-03-02T02:50:54.330" Title="please help me implement a 2C02 to use on my 6502 emulator" Tags="&lt;nes&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ClosedDate="2021-03-02T05:04:14.540" ContentLicense="CC BY-SA 4.0" />
  <row Id="18185" PostTypeId="2" ParentId="18184" CreationDate="2021-03-02T02:50:54.330" Score="5" Body="&lt;p&gt;Q&amp;amp;A sites are not the best fit for broad &amp;quot;how do I get started questions&amp;quot; -- you really want a high-quality tutorial or reference guide. You  mentioned you've already found the &lt;a href=&quot;https://wiki.nesdev.com/w/index.php/Nesdev_Wiki&quot; rel=&quot;noreferrer&quot;&gt;NESDev Wiki&lt;/a&gt; which is by far the most comprehensive and detailed reference available; but for a more abstract high-level view you'll probably want to go through some tutorials such as the venerable &lt;a href=&quot;https://taywee.github.io/NerdyNights/index.html&quot; rel=&quot;noreferrer&quot;&gt;Nerdy Nights&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Once you already have a basic understanding about how the NES PPU works and you're ready to try implementing either a simple game or an emulator, that's when the wiki will be most helpful. I would recommend starting with all the articles linked in the &amp;quot;Programmer's reference&amp;quot; section on &lt;a href=&quot;http://wiki.nesdev.com/w/index.php/PPU&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt;. If there's a specific feature or detail that you're having a hard time wrapping your head around, then this site is a great place to ask (as are the NESDev forums).&lt;/p&gt;&#xA;&lt;p&gt;Finally, one of the best ways to learn about NES graphics (in my experience) is to see how games actually make use of the 2C02 in practice. Download a debugging emulator such as &lt;a href=&quot;https://mesen.ca/&quot; rel=&quot;noreferrer&quot;&gt;Mesen&lt;/a&gt; or FCEUX (preferably &lt;a href=&quot;https://github.com/TASVideos/fceux&quot; rel=&quot;noreferrer&quot;&gt;the TASVideos fork&lt;/a&gt;, load up some games you like, and play through the games with the various PPU debugging features to see how each game utilizes the pattern tables, nametables, palettes, and sprites.&lt;/p&gt;&#xA;" OwnerUserId="409" LastActivityDate="2021-03-02T02:50:54.330" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18186" PostTypeId="2" ParentId="16153" CreationDate="2021-03-02T16:38:45.573" Score="1" Body="&lt;p&gt;And yet another point on this topic... the &amp;quot;four times&amp;quot; may have been referring to specific, common, platforms.&lt;/p&gt;&#xA;&lt;p&gt;Older languages generally had global scope and limited subroutine functionality. For instance, FORTRAN had user-controlled scoping and in many cases, there was no local data in a routine. Programs also generally used subs as defined functions, as opposed to a way of organizing code (well...).&lt;/p&gt;&#xA;&lt;p&gt;In contrast, Algol-derived languages use the block as the primary code organization concept, and programs are generally a collection of subroutine calls. Because the blocks have local scope, every one of these calls generally results in the creation (and destruction) of an activation record. As a result, there is significant overhead in the call dynamics in C (et all) that older languages didn't have.&lt;/p&gt;&#xA;&lt;p&gt;This led to the widespread use of intermediate systems programming languages, like BLISS mentioned above. On micros, these languages generally combined block-like &lt;em&gt;layout&lt;/em&gt; with non-recursive call semantics that didn't require activation records. For instance, &lt;a href=&quot;https://en.wikipedia.org/wiki/Action!_(programming_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Action!&lt;/a&gt; on the Atari was generally considered to be about half the speed of hand-coded assembler, whereas C programs were &lt;em&gt;much&lt;/em&gt; slower.&lt;/p&gt;&#xA;&lt;p&gt;While larger platforms like the PDP's and VAXen had larger stacks and userspace controls that aided block-oriented languages, along with the room needed for more optimizations, I suspect at least some of that &amp;quot;four times&amp;quot; was a result of this same effect. Assembler on the same platform could tightly control the calls and unwind with ease, things that did not come to compilers until later.&lt;/p&gt;&#xA;&lt;p&gt;You can also see this in the performance of systems that were designed to support block-oriented languages; things like the &lt;a href=&quot;https://en.wikipedia.org/wiki/AT%26T_Hobbit&quot; rel=&quot;nofollow noreferrer&quot;&gt;CRISP&lt;/a&gt;, the original RISC II and various stack-oriented machines generally offered performance from C that was highly competitive with assembler - that was their entire &lt;em&gt;raison d'etre&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2021-03-02T16:38:45.573" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18187" PostTypeId="2" ParentId="5138" CreationDate="2021-03-02T18:24:50.423" Score="2" Body="&lt;p&gt;Yes, there is a list being developed that has this information. Here is a link to the list. &lt;a href=&quot;https://gamefaqs.gamespot.com/nes/916386-nes/faqs/49943&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://gamefaqs.gamespot.com/nes/916386-nes/faqs/49943&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20996" LastActivityDate="2021-03-02T18:24:50.423" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18189" PostTypeId="2" ParentId="18072" CreationDate="2021-03-03T03:11:36.877" Score="6" Body="&lt;p&gt;The original IP specification talks about network masks, and specifies that bits 1 are part of the network address while bits 0 are host. It &lt;em&gt;doesn't&lt;/em&gt; require the 1s to be consecutive (the authors thought that was obvious), many implementers took them literally and allowed non-contiguous netmasks. Later corrections did clarify this and stopped the contortions.&lt;/p&gt;&#xA;&lt;p&gt;I dimly remember an early ('90es?) Unix in which for kicks we once set such a netmask with no obvious ill effects (in &lt;em&gt;very&lt;/em&gt; limited tests, though).&lt;/p&gt;&#xA;" OwnerUserId="20704" LastActivityDate="2021-03-03T03:11:36.877" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18190" PostTypeId="2" ParentId="14036" CreationDate="2021-03-03T08:26:22.023" Score="3" Body="&lt;p&gt;The simple answer is don’t build your relocation tables by disassembling the code, use the relocation tables already built in tools like Remus and Capitoline.&lt;/p&gt;&#xA;&lt;p&gt;The more complex answer and the process I use to create the tables is by breaking down the Kickstart ROM into individual modules using the ROMHEADER and LIBHEADER structures, the program kickinfo does this, however, the exact boundaries aren’t clearly labelled (ROMSKIP is unreliable for this purpose). Once you know the boundaries of the individual libraries, you can be more confident that relative addresses you find in that range that reference an address in the range is valid, i.e. libraries don’t make absolute address references outside their boundaries (not entirely true), to call another library use use that libraries call table. Once you have a list of candidate RELOC addresses you can then perform two checks, verify with disassembly, and if you’re really lucky you’ll have another ROM with the same library in a different address, repeating the process should yield identical RELOCS, if not, only the ones in common are valid. If you byte for byte compare the same library in two different Kickstarts the only differences will be absolute addresses.&lt;/p&gt;&#xA;&lt;p&gt;To read a Kickstart and pull out the libraries, you mainly only need to understand how each library is stored, this means reading the ROMTAG structure;&#xA;&lt;a href=&quot;http://amigadev.elowar.com/read/ADCD_2.1/Libraries_Manual_guide/node0298.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROMTAG Structure&lt;/a&gt; but be warned, RT_ENDSKIP is the minimum end, it could end after this, also the library might start before the ROMTAG.&lt;/p&gt;&#xA;&lt;p&gt;Doobrey's &lt;a href=&quot;http://www.doobreynet.co.uk/beta/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Remus&lt;/a&gt; tool allows you to extract individual libraries from Kickstarts (that it knows about), you can also use my tool &lt;a href=&quot;https://5e7b2c0d467b5.site123.me/?fbclid=IwAR258I28VDIRB6Ujp96V7BoBPrhQObvQ7FRMYfWiq_OwP0sDJwT6S0y6eOs&quot; rel=&quot;nofollow noreferrer&quot;&gt;Capitoline&lt;/a&gt; (this may not be it's permanent home, but you will always find the most up to date info and link to the code on &lt;a href=&quot;https://www.facebook.com/groups/2206144409644792&quot; rel=&quot;nofollow noreferrer&quot;&gt;Facebook&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Once you have the extracted libraries, you can read these files as they are in &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_Hunk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amiga HUNK format&lt;/a&gt;, the hunks you'll be most interested in are HUNK_RELOC* and HUNK_DREL* these allow the libraries to be placed anywhere in memory (although building a Kickstart is like loading a library, the absolute addresses are decided when you build it, which is why the relocs are &amp;quot;lost&amp;quot; when you build a Kickstart)&lt;/p&gt;&#xA;&lt;p&gt;After you have all the RELOC data for the libraries in the Kickstart, the only things remaining are the things in the ROMHEADER, this exists at the start of the ROM (EXECBASE) and in the middle of the ROM (aka KickitySplit) or the start of an expansion ROM, all three are the same thing and make sure that the hardware knows where to start (ROMBASE).&lt;/p&gt;&#xA;&lt;p&gt;The final note is to watch out for things that aren't in library RELOC data, things it doesn't expect to move, the most important one is the library scan table in exec.library, this is a list of addresses that exec scans for libraries, so it's absolutely crucial, for example, the KS 3.1 scantable looks lke this;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0x00F800000100000000F0000000F80000FFFFFFFF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which breaks down as scan F80000-100000 then F00000-F80000 (expansion roms), note the CD32 exec also has E00000, which is why it can use an extended Kickstart), so you need to treat that first F80000 as a reloc location too (obviously a disassembler will treat this as data)&lt;/p&gt;&#xA;&lt;p&gt;Final note, Capitoline is mainly a Kickstart editing tool to assemble your own ROMs, but it’s got a bunch of extra utilities built in like a module extractor, disassembler, splitter, merger, patcher, byteswapper etc. it has a Windows GUI, but the CLI (Windows/Mac/Linux) has all commands available, it’s also got an RTB builder built in, but as with all these things it’s not something I’ve spent too much time on and it doesn’t create RTBs exactly the same as the skick ones - in some cases only the trailers are different. Unlike skick and Remus, Capitoline uses INI files for it's reloc data, these aren't as efficient, but they are human readable if you want to compare your relocs with mine.&lt;/p&gt;&#xA;" OwnerUserId="20998" LastEditorUserId="20999" LastEditDate="2021-03-04T12:33:49.327" LastActivityDate="2021-03-04T12:33:49.327" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18191" PostTypeId="1" AcceptedAnswerId="18192" CreationDate="2021-03-03T22:42:11.573" Score="0" ViewCount="188" Body="&lt;p&gt;I am watching a 2013 murder trial on YouTube  &lt;a href=&quot;https://youtu.be/FRxKpQqfBrE?t=1958&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jodi Arias Trial : Day 23 : 1 Of 3&lt;/a&gt;.  There is a considerable amount of evidence involving phones and computers.&lt;/p&gt;&#xA;&lt;p&gt;The following picture briefly appears on-screen on Feb. 26, 2013 during the trial.  Can we say what operating system and/or hardware this was?  Does the ID VTS_01.0001  have any particular significance in computing terms?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cVp60.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cVp60.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18612" LastEditorUserId="15334" LastEditDate="2021-03-08T12:30:41.160" LastActivityDate="2021-03-08T12:30:41.160" Title="Operating system/hardware used for playing a video during a recorded trial that took place in 2013" Tags="&lt;video&gt;&lt;operating-system&gt;&lt;identify-this-software&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2021-03-04T03:18:30.167" ContentLicense="CC BY-SA 4.0" />
  <row Id="18192" PostTypeId="2" ParentId="18191" CreationDate="2021-03-04T00:09:05.857" Score="10" Body="&lt;p&gt;Your image is of the menu of a DVD Video compilation authored in &lt;strong&gt;Nero Vision&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aqwgV.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aqwgV.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As such it contains no information about the DVD player hardware.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;I've found multiple screenshots of this 'blue disc' theme associated with Nero Vision in DVD authoring tutorials. However, it's plausible that the same stock image ships with other authoring tools (legally or illegally).&#xA;The background image can be seen on various audiobook products worldwide: &lt;a href=&quot;http://grafamania.net/uploads/posts/2009-07/1248998595_pic_id463658.jpeg&quot; rel=&quot;noreferrer&quot;&gt;http://grafamania.net/uploads/posts/2009-07/1248998595_pic_id463658.jpeg&lt;/a&gt; which looks to me it might be a Nero Vision automatically-created disc inlay label.&lt;/p&gt;&#xA;&lt;p&gt;I believe Raffzahn's comment about the name VTS is accurate. The author of this disc almost certainly began a new compilation in Nero Vision, used a default theme, dragged in a single movie file, kept the default names for everything and then burned it to a DVD-R. The end result is a DVD containing the movie file that can be played on a generic player.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2021-03-04T00:35:01.443" LastActivityDate="2021-03-04T00:35:01.443" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18193" PostTypeId="1" CreationDate="2021-03-04T02:50:54.417" Score="3" ViewCount="633" Body="&lt;p&gt;I have made up a DB9 connector with connections to an Arduino. I am using pins 1 to 4 on the connector. On the Arduino I have a small program which writes out a series of digital HIGH signals to the connector's pins. On the Commodore 64 I have a simple Basic program that reads the state of joystick port #1. The problem is that the Commodore 64 is not registering a state change on the port, it continually prints out a value of 255. I know the port works because I connected a joystick to it and tested it.&lt;/p&gt;&#xA;&lt;p&gt;What am I doing wrong? Do I need to boost the current from the Arduino to the joystick port with a MOSFET, or a relay? Are the pins on the joystick port active HIGH, or active LOW.&lt;/p&gt;&#xA;" OwnerUserId="21007" LastEditorUserId="6659" LastEditDate="2021-03-04T03:49:35.257" LastActivityDate="2021-03-04T03:49:35.257" Title="Problems Connecting an Arduino Uno to a Commodore 64 Joystick Port" Tags="&lt;commodore-64&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18194" PostTypeId="2" ParentId="18193" CreationDate="2021-03-04T03:06:46.833" Score="12" Body="&lt;h2&gt;TL;DR&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The C64 expects a low value at input.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To make it work a common ground (pin 8) is needed.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;A first starting point for such a project might be looking at the wiring of a joystick:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZZ7BT.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZZ7BT.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It shows that a C64 Joystick works by connecting either port pin to to ground. If that connection is not made, then all input will read high value - as you already found out. This is due the fact that the &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/11157/6659&quot;&gt;6526 already contains internal pull up resistors&lt;/a&gt;, making sure that non grounded pins will deliver a steady high signal.&lt;/p&gt;&#xA;&lt;p&gt;Essentially this means outputting a LOW from the Arduino would  make the value for that button (pin) go zero. Except, to do so, they need to agree what low means, as each device low is independent - unless they use a common ground, like with connecting the ports pin 8 (GND) to whatever it is on the Arduino side.&lt;/p&gt;&#xA;&lt;p&gt;Last, but not least it might be a good idea to see the Arduino's AVR doesn't drain more current than the 6526 sources, but I guess it should work, as there are serial resistors within the C64, limiting the current. To see such, it helps to peek at the &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c64/250469-rev.A-left.gif&quot; rel=&quot;noreferrer&quot;&gt;C64's schematics&lt;/a&gt; (&lt;a href=&quot;http://www.zimmers.net/&quot; rel=&quot;noreferrer&quot;&gt;http://www.zimmers.net/&lt;/a&gt; is always a good stop for all things Commodore).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-04T03:22:09.437" LastActivityDate="2021-03-04T03:22:09.437" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18195" PostTypeId="1" CreationDate="2021-03-04T06:18:57.690" Score="5" ViewCount="245" Body="&lt;p&gt;I need to build a retro machine so that I can access an HDD that required manual input of BIOS parameters. (Yes, I have that information.)&lt;/p&gt;&#xA;&lt;p&gt;The only ID I can find is ES1O/4A 280695 which yields nothing useful in searches, apart from this group.&lt;/p&gt;&#xA;&lt;p&gt;The information on the SMC chip is:&#xA;fdc37c654Qf&#xA;B9504-B243&#xA;6J74560-2A&#xA;So I'm guessing, by fdc, that it only cares about the floppy drive(s).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QcT52.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QcT52.jpg&quot; alt=&quot;ES1O_4A 280695&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Most notable features are that the 10-pin connectors are vertical, 10 by 3 pin config block under the IDE connector, and the massive 8 by 5 pin IRQ block.&lt;/p&gt;&#xA;&lt;p&gt;I'm guessing that the serial ports are functionally configured from &amp;quot;whenever&amp;quot;, but I need to disable drive ports to avoid conflict with mobo ports.&lt;/p&gt;&#xA;&lt;p&gt;Although the primary purpose of this build is data recovery from HDD that can't be recognised through a USB converter, it will also be running my music training software which won't function on anything higher than 486.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bZWyi.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bZWyi.jpg&quot; alt=&quot;ES1O_4A 280695 Back&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21008" LastEditorUserId="21008" LastEditDate="2021-03-07T07:36:07.473" LastActivityDate="2021-03-07T10:16:13.947" Title="Config information on ancient 16-bit Multi I/O card" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;" AnswerCount="2" CommentCount="18" ContentLicense="CC BY-SA 4.0" />
  <row Id="18199" PostTypeId="2" ParentId="18195" CreationDate="2021-03-04T13:50:08.420" Score="6" Body="&lt;p&gt;A bit of googling finds that SMC is &amp;quot;Standard Microsystems Corporation&amp;quot;, apparently got renamed at one time to SMSC and finally to &amp;quot;Microchip&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;The FDC37C654 is a Super-I/O chip with a floppy disk controller, hard disk controller,  two serial ports, and a parallel port. The datasheet can be found e.g. &lt;a href=&quot;http://13.124.15.139/pdf/download.php?id=4d063b708d8d68efa9bd2203f953c0d246ca90&amp;amp;type=O&amp;amp;term=FDC37&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; from &lt;a href=&quot;http://13.124.15.139/FDC37-datasheet.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; (not sure how stable this link is).&lt;/p&gt;&#xA;&lt;p&gt;Configuration pins are&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;80/81  PCF0/1  Parallel Port Configuration (disable, 3BCH, 378H, 278H)&#xA;24/23  SICF0/1  Primary Serial Port Configuration (disable, 3E8H, 2F8H, 3F8H)&#xA;91/93  S2CFO/1  Secondary Serial Port Configuration (disable, 2E8H, 3F8H, 2F8H)&#xA;83  IDECF  IDE Configuration (disable, enable)&#xA;89  TDCCF  Floppy Disk Controller (disable, enable)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I would assume these correspond to 8 of the 10 positions in the config header at the top. If you can read the printing around the config header (remove the bridges if necessary), that should probably identify which is which.&lt;/p&gt;&#xA;&lt;p&gt;If there's nothing printed on the board, you could try tracing the connections, or trial and error (pick a setting, try to access serial port etc.)&lt;/p&gt;&#xA;&lt;p&gt;Interrupt pins are:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;38 PSPIRQ  Source of Primary Serial Port Interrupt (IRQ3 or IRQ4)&#xA;37 SSPIRQ  Source of Secondary Serial Port Interrupt (IRQ3 or IRQ4)&#xA;49 FINTR   Floppy Interrupt &#xA;39 PINTR   Parallel Port Interrupt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And I'd assume some of these are part of the IRQ header. I don't see any Harddisk IRQ pin. Possibly the Floppy Interrupt is both for Floppy and Harddisk? Or just labelled &amp;quot;IDE&amp;quot;?&lt;/p&gt;&#xA;&lt;p&gt;The Harddisk/Floppy DMA is probably available at the DMA config block, but I don't understand the details.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;After seeing the photo of the backside: The configuration block on the top routes the middle pins (&amp;quot;2&amp;quot; row) to the resistors directly below, and then from the resistors to the chip on the front side. This means the &amp;quot;1&amp;quot; and &amp;quot;3&amp;quot; row have a constant voltage, representing 0 and 1, and you can figure out which is which by following the traces on the front, if there's nothing else written on the PCB around the configuration block that's not visible in the first picture.&lt;/p&gt;&#xA;&lt;p&gt;Once you've identified which pin the jumpers go to, the above table will give you the settings to enable and disable the various parts (disabling is two 0 bits).&lt;/p&gt;&#xA;&lt;p&gt;As the standard serial port configuration is 3F8H and 2F8H, a first guess is that serial ports are enabled in this configuration (because motherboard serials very rare). So then the &amp;quot;1&amp;quot; row means 1, the &amp;quot;3&amp;quot; row means 0. Try moving all jumpers from the top to the bottom, see if the conflicts are gone.&lt;/p&gt;&#xA;&lt;p&gt;This will also change the two additional jumpers that do not know what they are good for (and I cannot see the front side well enough to trace), so do this at your own risk.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-03-07T09:11:36.260" LastActivityDate="2021-03-07T09:11:36.260" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18200" PostTypeId="1" CreationDate="2021-03-04T14:35:41.227" Score="2" ViewCount="93" Body="&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/4925/mapping-more-than-64kb-of-address-space&quot;&gt;Mapping more than 64kb of address space&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;regarding cjs answer: How to get back from RAM1 to ROM after setting the bank bit to 1? the next instruction from the program counter would be read from RAM1 instead ROM, isnt it?&lt;/p&gt;&#xA;" OwnerUserId="21021" LastActivityDate="2021-03-04T14:35:41.227" Title="How to get back from RAM1 to ROM after setting the bank bit to 1" Tags="&lt;memory&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2021-03-04T16:37:52.653" ContentLicense="CC BY-SA 4.0" />
  <row Id="18201" PostTypeId="1" CreationDate="2021-03-05T01:04:38.770" Score="9" ViewCount="475" Body="&lt;p&gt;I was watching a &lt;a href=&quot;https://youtu.be/ONEm1ph3MP4?t=2244&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; on Youtube of some guys exploring an abandoned nuclear power plant(I believe to be in the US or Canada) that was decommissioned around 1991, and noticed this equipment at one point.  Google image search doesn't seem to find anything, although I'm sure one of you guys will recognize at least one of the pieces of equipment on sight...&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oazYm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oazYm.jpg&quot; alt=&quot;Workstation&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm surprised by the large size of the CRT for the time.  Seems obvious it would be monochrome and not color, because a color data CRT that size would have been rare at the time. Here is a photo of the same keyboard from a different workstation closer up:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vutkj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vutkj.jpg&quot; alt=&quot;Keyboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11734" LastEditorUserId="15334" LastEditDate="2021-03-05T12:40:41.963" LastActivityDate="2021-04-03T23:47:54.737" Title="Can anyone help identify this old terminal and printer found in an abandoned nuclear power plant?" Tags="&lt;terminal&gt;&lt;identify-this-computer&gt;" AnswerCount="1" CommentCount="19" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18202" PostTypeId="1" CreationDate="2021-03-05T04:28:38.753" Score="0" ViewCount="118" Body="&lt;p&gt;I work as a teacher and I have a laptop model MacBook Pro.&lt;/p&gt;&#xA;&lt;p&gt;I like retro technology, so I bought an iMac G3, it works perfectly.&lt;/p&gt;&#xA;&lt;p&gt;I want to use iMac G3 like an extra screen for the laptop. I have a DVI converter, but it doesn’t work as I expect.&lt;/p&gt;&#xA;&lt;p&gt;Is it possible to use iMac G3 as an external screen only?&lt;/p&gt;&#xA;" OwnerUserId="21024" LastEditorUserId="11446" LastEditDate="2021-03-05T08:36:57.293" LastActivityDate="2021-03-05T08:36:57.293" Title="iMac G3 as an external screen" Tags="&lt;imac&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18203" PostTypeId="2" ParentId="18202" CreationDate="2021-03-05T08:07:32.393" Score="3" Body="&lt;p&gt;This is not possible without hardware modification. The iMac G3 does not have a video input port; some (but not all) models have a VGA output port, but this cannot be used for input. Even if you could make it work, the maximum supported resolution of 1024x768 would probably be unusable with modern applications, which are likely to assume typical modern display resolutions (ie at least 1920x1080, being the most common resolution on desktop Macs, or even higher for modern MacBooks with &amp;quot;retina&amp;quot; displays).&lt;/p&gt;&#xA;" OwnerUserId="15930" LastEditorUserId="15930" LastEditDate="2021-03-05T08:14:53.183" LastActivityDate="2021-03-05T08:14:53.183" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18204" PostTypeId="1" CreationDate="2021-03-05T08:30:44.947" Score="2" ViewCount="137" Body="&lt;p&gt;I have a problem with my Macintosh SE / 30. More precisely, I only see the underside on the screen, ie from the center to the bottom. The other half, the one from the center up, appears completely black. I have tried searching all over the web but it seems this problem is not common.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kFhcy.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kFhcy.jpg&quot; alt=&quot;here's what it looks like&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21026" LastActivityDate="2021-03-06T23:38:47.003" Title="Macintosh SE 30 displays half of the lower screen" Tags="&lt;apple-macintosh&gt;&lt;display&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18205" PostTypeId="1" AcceptedAnswerId="18206" CreationDate="2021-03-05T08:30:59.887" Score="4" ViewCount="1344" Body="&lt;p&gt;I have an old Philips Videopac C52 video game console of the  Philips Odyssey 2 family like the G-7000 with 128-byte RAM:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eRnkP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eRnkP.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;While checking its boards to compare with the schematics I got for the G-7000 I found that the PAL encoder (The C52 that I have is made in France) does not use a monolitic integrated circuit but it uses instead a transistor-based circuit that integrates both the PAL encoder and the RF modulator:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Oobde.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Oobde.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the G-7000 schematics the PAL decoder is annotated IC679 but the IC type is not indicated:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mwC9b.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mwC9b.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I found on the internet a photo of the IC679 but could not read its type and maybe it is intentionally erased:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kqFFW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kqFFW.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What gets me to think that the video encoder might have been a critical component is that even in the G-7000 there is an option to either use the IC or extend the board to use an external circuit for the encoder:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OPK2X.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OPK2X.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;My question is:&lt;/p&gt;&#xA;&lt;p&gt;Was the PAL/NTSC video encoder IC a critical component (cost-wise, availability...) in early video game consoles like RAM for early microcomputers?&#xA;What was the IC679?&lt;/p&gt;&#xA;" OwnerUserId="18338" LastEditorUserId="18338" LastEditDate="2021-03-06T05:44:00.913" LastActivityDate="2021-05-20T21:24:56.090" Title="Was PAL or NTSC encoder IC a critical component in early video games?" Tags="&lt;game-consoles&gt;&lt;ntsc&gt;&lt;pal&gt;&lt;composite-video&gt;&lt;secam&gt;" AnswerCount="1" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="18206" PostTypeId="2" ParentId="18205" CreationDate="2021-03-05T10:53:37.070" Score="17" Body="&lt;p&gt;The PAL video encoder was not a bottleneck of any kind.&lt;/p&gt;&#xA;&lt;p&gt;It is left out because the unit is not a PAL model, but a SECAM model, which needs a different kind of encoder. So the chip is not needed and it would be useless and just cause extra cost and power consumption in the SECAM model.&lt;/p&gt;&#xA;&lt;p&gt;The necessary SECAM encoder is integrated to the separate board with the RF modulator.&lt;/p&gt;&#xA;&lt;p&gt;The IC679 PAL encoder has EXAR logo and model number reads 612160-3.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2021-03-05T10:53:37.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18207" PostTypeId="1" AcceptedAnswerId="18208" CreationDate="2021-03-05T13:21:33.627" Score="3" ViewCount="360" Body="&lt;p&gt;I came across an old service which listens on a range of TCP ports. Client connections are handled with this scheme:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Client connects to the first port&lt;/li&gt;&#xA;&lt;li&gt;Server answers with a port number and closes the connection&lt;/li&gt;&#xA;&lt;li&gt;Client re-connects to the server-supplied port&lt;/li&gt;&#xA;&lt;li&gt;Business happens&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Comments indicate that the author was insistent that, once a client connected to a port, that port was &amp;quot;in use&amp;quot;. No other clients would be able to connect. Allegedly, the connection attempt would block. That is why the first &amp;quot;welcome&amp;quot; port needed to be &amp;quot;freed&amp;quot; as soon as possible.&lt;/p&gt;&#xA;&lt;p&gt;Obviously, this does not make much sense today, but it made me wonder: Has there ever been a time or architecture which supported TCP/IP and multithreading, but could not handle more than one connection per TCP port?&lt;/p&gt;&#xA;&lt;p&gt;The application is still running today on a Win2k server. The source is written in Pascal. No indication of when it was first conceived. My guess is early 90s, targeting DOS.&lt;/p&gt;&#xA;" OwnerUserId="15943" LastEditorUserId="15943" LastEditDate="2021-03-05T15:10:58.943" LastActivityDate="2021-03-07T19:26:18.020" Title="Have TCP connections ever been exclusive per port?" Tags="&lt;history&gt;&lt;network&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18208" PostTypeId="2" ParentId="18207" CreationDate="2021-03-05T14:13:28.907" Score="7" Body="&lt;p&gt;Pascal/DOS/early 90s makes this answer not applicable to the old program mentioned in the question, but for the sake of completeness:&lt;/p&gt;&#xA;&lt;p&gt;The original &lt;a href=&quot;https://en.wikipedia.org/wiki/Network_Control_Program&quot; rel=&quot;nofollow noreferrer&quot;&gt;Network Control Program&lt;/a&gt; (NCP), which was obsoleted by TCP/IP in 1983, originally defined in &lt;a href=&quot;https://tools.ietf.org/html/rfc36&quot; rel=&quot;nofollow noreferrer&quot;&gt;RFC36&lt;/a&gt; a connection table only indexed by the local port.&lt;/p&gt;&#xA;&lt;p&gt;This would indeed mean for a server &amp;quot;listening&amp;quot; (if this terminology applies to NCP) on a local port, that as long as it has established a connection with an incoming client, then that port is in use. The only way to get rid of it would be to spawn a server subprocess, have this subprocess use a different server port, and tell the client to switch to the port.&lt;/p&gt;&#xA;&lt;p&gt;I do not know if that was ever done for NCP.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-03-07T05:39:40.770" LastActivityDate="2021-03-07T05:39:40.770" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18209" PostTypeId="1" CreationDate="2021-03-05T17:31:27.600" Score="3" ViewCount="117" Body="&lt;p&gt;I'm looking to try and get a VIA sound card working in Windows 98. I have everything else running no problems, just the sound. I've tried everything I can think of including VIA’s website which lists this as available but when tried it's not compatible, alternatively the XP drivers work brilliant.&#xA;Hardware I'd from Linux, &amp;quot;Audio device: VIA Technologies, Inc. VT8237A/VT8251 HDA Controller (rev 20)&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="21029" LastEditorUserId="15334" LastEditDate="2021-03-06T19:15:49.797" LastActivityDate="2021-03-06T19:15:49.797" Title="Where can I find Windows 98 drivers for VIA sound card VT8237A/VT8251?" Tags="&lt;windows-98&gt;&lt;audio&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18210" PostTypeId="2" ParentId="15078" CreationDate="2021-03-05T18:33:01.463" Score="3" Body="&lt;p&gt;The 8008 had an on-chip stack in order to allow the use of higher-density, cheaper shift-register memory.  Subsequent processors went with a stack in off-chip memory because dynamic RAM had quickly supplanted shift-register memory.&lt;/p&gt;&#xA;&lt;p&gt;Ken Shiriff covers this in detail here:&#xA;&lt;a href=&quot;http://www.righto.com/2017/03/analyzing-vintage-8008-processor-from.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.righto.com/2017/03/analyzing-vintage-8008-processor-from.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Shift-register memory is unusual to modern sensibilities.  The memory is constantly shifted in a circle and presented to the processor a bit at a time.  To access any particular part of memory the processor will have to wait until the bits they want come around.  This is OK for a program as it marches through memory.  But a jump becomes much more expensive.  And a CALL doubly-so as it would have to wait until the memory shifts around to save the return address and then wait again for the CALL destination to come around.&lt;/p&gt;&#xA;&lt;p&gt;Thus a on-chip stack was a practical necessity in order to support shift-register memory.&lt;/p&gt;&#xA;&lt;p&gt;Subsequent microprocessors were designed when RAM had taken over.  An off-chip stack was much more flexible and just as fast as on-chip.  And it saved on CPU chip costs.&lt;/p&gt;&#xA;&lt;p&gt;The real question was not why the other microprocessors had off-chip stacks but why the 8008 had an on-chip stack at all.&lt;/p&gt;&#xA;" OwnerUserId="301" LastActivityDate="2021-03-05T18:33:01.463" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18211" PostTypeId="5" CreationDate="2021-03-05T18:55:21.887" Score="0" Body="&lt;p&gt;Use this tag for questions relating to running DOS software under Windows NT and the implementation of the NT Virtual DOS Machine itself.&lt;/p&gt;&#xA;&lt;p&gt;Be aware that &lt;a href=&quot;https://jdebp.uk/FGA/a-cli-is-not-a-dos-prompt.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;not every program that runs in a console window is a DOS program&lt;/a&gt;. Questions about Windows text-mode programs, such as &lt;code&gt;cmd.exe&lt;/code&gt;, are off-topic.&lt;/p&gt;&#xA;&lt;p&gt;The usual caveats for emulation questions apply; see the &lt;a href=&quot;/questions/tagged/emulation&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;emulation&amp;#39;&quot; rel=&quot;tag&quot;&gt;emulation&lt;/a&gt; tag wiki.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-03-05T18:55:21.887" LastActivityDate="2021-03-05T18:55:21.887" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18212" PostTypeId="4" CreationDate="2021-03-05T18:55:21.887" Score="0" Body="NT Virtual DOS Machine, the built-in MS-DOS compatibility subsystem of Windows NT." OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-03-05T18:55:21.887" LastActivityDate="2021-03-05T18:55:21.887" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18214" PostTypeId="2" ParentId="17000" CreationDate="2021-03-06T00:21:47.003" Score="5" Body="&lt;p&gt;Symphonie has no synthesizer or reverb. It's all samples, but as it natively supports large 16-bit stereo samples, it invites the user to use high-quality sample sources unlike many other trackers of its time. In the end, a good sample can represent the sound of any source accurately, including that of expensive synthesizers. As Symphonie is targeted towards higher-end Amigas, there is no problem in storing or mixing those high-quality samples.&lt;/p&gt;&#xA;&lt;p&gt;As I'm currently implementing a player for Symphonie modules, I can shed some more light on what some of the tracks in that video use. Symphonie can do the following operations to samples while they are being loaded (i.e. these changes are &lt;em&gt;non-destructive&lt;/em&gt;):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;resonant filters&lt;/li&gt;&#xA;&lt;li&gt;simple (non-resonant) lowpass and highpass&lt;/li&gt;&#xA;&lt;li&gt;simple waveshaping (overamplification of samples doesn't just clip them but acts more like a compressor)&lt;/li&gt;&#xA;&lt;li&gt;mixing of several samples into a new sample&lt;/li&gt;&#xA;&lt;li&gt;&amp;quot;Transwave synthesis&amp;quot; (takes two short sample loops and morphs between them) - none of the tracks in that video use this effect&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In addition, Symphonie can do the following realtime effects during playback:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;resonant filters&lt;/li&gt;&#xA;&lt;li&gt;a simple echo and delay DSP effect&lt;/li&gt;&#xA;&lt;li&gt;more through custom plugins (but the video you linked does not use those)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Most of those features will sound pretty advanced compared to most other trackers of the time, but they are about the only differences. Apart from these, it's just the combination of using more channels and high-quality samples that make these tracks sound much better than e.g. a ProTracker MOD file.&lt;/p&gt;&#xA;" OwnerUserId="21030" LastActivityDate="2021-03-06T00:21:47.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18215" PostTypeId="2" ParentId="18209" CreationDate="2021-03-06T00:24:21.803" Score="1" Body="&lt;p&gt;I get a feeling it's not going to work. The VIA 8237 had AC'97 audio, but the 8237A has HD Audio (the successor standard to AC'97, which was published in 2004). To the best of my knowledge, there are no HD Audio drivers of any kind for Win98. If VIA says they have a download available, there's a good chance that they're mistakenly routing you to the AC'97 drivers for the 8237, and that's why those drivers don't work.&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2021-03-06T00:24:21.803" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18216" PostTypeId="5" CreationDate="2021-03-06T05:49:53.097" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2021-03-06T05:49:53.097" LastActivityDate="2021-03-06T05:49:53.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18217" PostTypeId="4" CreationDate="2021-03-06T05:49:53.097" Score="0" Body="SECAM (Séquentiel de Couleur à Mémoire) is an analogue color video standard used in France." OwnerUserId="18338" LastEditorUserId="18338" LastEditDate="2021-03-06T14:16:22.033" LastActivityDate="2021-03-06T14:16:22.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18219" PostTypeId="1" CreationDate="2021-03-06T19:24:25.063" Score="8" ViewCount="4362" Body="&lt;p&gt;I have an old laptop (Dell Inspiron 3500 running Windows 98) which had a hard drive failure. I searched for HDDs but the 5 GB ones (that was the original drive's capacity) were unreasonably priced. I managed to find a 60 GB hard disk but I am not sure that it is going to work.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know if there is a way to limit the capacity in order for it to work?&lt;/p&gt;&#xA;&lt;p&gt;EDIT: I have not included any details about the drive because there is not a specific drive. I found some on EBAY but I am not sure which one should I buy because I don't know if there is something specific I should look for. As for the capacity, that is the smallest capacity unused drive I could find. So, if there is a required feature, I will look for that.&lt;/p&gt;&#xA;" OwnerUserId="20937" LastEditorUserId="15334" LastEditDate="2021-03-06T21:24:35.113" LastActivityDate="2021-03-08T20:12:13.220" Title="Is it possible to limit HDD capacity to work on an old computer?" Tags="&lt;hard-disk&gt;&lt;windows-98&gt;&lt;new-hardware-adaptation&gt;" AnswerCount="5" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18220" PostTypeId="2" ParentId="18219" CreationDate="2021-03-06T21:08:50.533" Score="17" Body="&lt;p&gt;I have not tried it, but according to the Wikipedia page on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Host_protected_area&quot; rel=&quot;noreferrer&quot;&gt;Host Protected Area&lt;/a&gt;, one use case was to use large disks on systems whose BIOS could not cope with them. It would therefore seem to be a case of picking a likely-looking modern disk and doing a suitable &lt;code&gt;hdparm -Np&lt;/code&gt; command on it from Linux to set a permanent HPA limit. For example, if you wanted a disk to pretend to be exactly 5GiB, &lt;code&gt;hdparm -Np $((5*1024*1024)) /dev/sdX&lt;/code&gt; should work. The disk can then be transplanted into the Dell.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2021-03-06T21:08:50.533" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18221" PostTypeId="2" ParentId="18219" CreationDate="2021-03-06T22:13:28.227" Score="33" Body="&lt;p&gt;Since the price seems to be an issue, I'll suggest a cheap alternative to hard drives.&lt;/p&gt;&#xA;&lt;p&gt;A IDE Compact Flash card reader with a 4GB or 8GB compact flash card is a cheap combo, still sold (less than 10 euros for the reader on &lt;a href=&quot;https://www.amazon.fr/Compact-Flash-Merory-Vertical-Adapter/dp/B01M9GBFW2&quot; rel=&quot;noreferrer&quot;&gt;Amazon&lt;/a&gt;), consumes not much power (which &lt;em&gt;could&lt;/em&gt; be an issue with a hard drive)&lt;/p&gt;&#xA;&lt;p&gt;The capacity shouldn't be an issue either. For less that 50 euro you can find some reader and CF card online, for 2&amp;quot;5 44 IDE pins. And it's small enough to fit in a 2&amp;quot;5 drive location.&lt;/p&gt;&#xA;&lt;p&gt;I'm using one for my amiga 1200 (2&amp;quot;5 IDE) as a replacement for old hard drives that all packed up and it works very well. I know it's not a PC laptop, but if you're running IDE it should work all right. And the silence is great too.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2021-03-06T22:13:28.227" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18222" PostTypeId="2" ParentId="18204" CreationDate="2021-03-06T23:38:47.003" Score="3" Body="&lt;p&gt;Since it doesn’t look like the display is “squished” (with the entire display in that area) I suspect one of the two 41264-15 used for video RAM (UC6 or UC7) is at issue. It could just be a bad solder joint causing the IC to be unpowered, or it could be the IC has gone bad and needs replacement. It could also be one of the address lines or one of the counters that drives it.&lt;/p&gt;&#xA;" OwnerUserId="4496" LastActivityDate="2021-03-06T23:38:47.003" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18224" PostTypeId="1" AcceptedAnswerId="18228" CreationDate="2021-03-07T04:36:20.753" Score="12" ViewCount="1207" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_4004&quot; rel=&quot;noreferrer&quot;&gt;Intel 4004&lt;/a&gt; had 4-bit buses and data words, but the program counter and code address space was 12 bits.  &lt;strong&gt;Was the 4004 little endian&lt;/strong&gt; (like all of Intel's later microprocessors and microcontrollers) &lt;strong&gt;or big endian?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-03-07T04:49:10.540" LastActivityDate="2021-03-07T05:53:46.640" Title="Which endian was the Intel 4004?" Tags="&lt;intel&gt;&lt;intel-4004&gt;&lt;endianness&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18225" PostTypeId="5" CreationDate="2021-03-07T04:38:07.600" Score="0" Body="" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-03-07T04:38:07.600" LastActivityDate="2021-03-07T04:38:07.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18226" PostTypeId="4" CreationDate="2021-03-07T04:38:07.600" Score="0" Body="Questions about the order of bytes in a larger word in memory." OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-03-07T04:38:07.600" LastActivityDate="2021-03-07T04:38:07.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18227" PostTypeId="1" CreationDate="2021-03-07T05:27:43.950" Score="2" ViewCount="272" Body="&lt;p&gt;The original &lt;a href=&quot;https://en.wikipedia.org/wiki/Power_supply_unit_(computer)#Original_IBM_PC,_XT_and_AT_standard&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM PC supplied several voltages&lt;/a&gt;: +5 V, −5 V, +12 V, and −12 V.  &lt;strong&gt;Which computer supplied the most DC voltages?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;To facilitate the comparison, let's agree on some uniform criteria for what counts:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Only DC supply voltages count.  AC line voltages (typically 120 or 240 V) do not count (they are not &lt;em&gt;DC&lt;/em&gt;).  Analog signals do not count (they are not a &lt;em&gt;supply&lt;/em&gt; voltage).&lt;/li&gt;&#xA;&lt;li&gt;Do not count ground / zero volts.  Thus, a &amp;quot;single-supply&amp;quot; computer counts as one supply voltage.&lt;/li&gt;&#xA;&lt;li&gt;Negative voltages count separately from positive voltages.  Thus, −5 V counts separately from +5 V.&lt;/li&gt;&#xA;&lt;li&gt;Two or more supplies with the same nominal voltage only count once, even if they come from different circuits.  So a regulated +12 V and and unregulated +12 V count only once.&lt;/li&gt;&#xA;&lt;li&gt;Voltages created on-chip (e.g. by a charge pump) count, if you can specify their amount.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;By these rules, the original IBM PC had &lt;em&gt;four&lt;/em&gt; supply voltages.&lt;/p&gt;&#xA;&lt;p&gt;I suspect that a vacuum-tube computer might be the winner.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="15334" LastEditDate="2021-03-10T20:24:29.047" LastActivityDate="2021-03-11T02:06:39.240" Title="Which computer used the greatest number of DC supply voltages?" Tags="&lt;power&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18228" PostTypeId="2" ParentId="18224" CreationDate="2021-03-07T05:28:01.593" Score="15" Body="&lt;p&gt;You can find &lt;a href=&quot;https://web.archive.org/web/20110601032753/http://www.intel.com/Assets/PDF/DataSheet/4004_datasheet.pdf&quot; rel=&quot;noreferrer&quot;&gt;here the Intel 4004 datasheet&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You can see from the 4004 Instruction Set table on page 4 that the 3 nibbles of a jump target address (in ROM) are stored with the &lt;em&gt;highest order nibble&lt;/em&gt; in the &lt;em&gt;first&lt;/em&gt; byte of the instruction, and the two other nibbles in the 2nd byte.  Thus we conclude that in the &lt;em&gt;instruction set&lt;/em&gt; fields &amp;gt; 4 bits are stored with the highest bits in the lower address, thus &lt;em&gt;big-endian&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mYYPN.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mYYPN.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As for the instructions themselves, the datasheet refers to the &amp;quot;upper 4 bits&amp;quot; and &amp;quot;lower 4 bits&amp;quot; of the 8-bit instruction (for the 1-word instructions).  For consistency with the representation of addresses I think we can conclude that the &amp;quot;upper 4 bits&amp;quot; are at the lower address, thus instructions are stored in ROM big-endian as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Update: Here's a better argument:  Looking now at the second byte of two byte instructions we see that the 2nd nibble of the address is stored in the &amp;quot;upper 4 bits&amp;quot; and the 3rd in the &amp;quot;lower 4 bits&amp;quot;.  If instruction bytes themselves were stored big-endian than the 3 nibbles of a ROM address are in order high-middle-low from low address to high.  But if the instruction bytes are in little-endian order then the 3 nibbles are high-low-middle in memory address order - which would be weird.  So we conclude that instruction byte are stored big-endian in ROM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Other than that I don't believe &amp;quot;endianness&amp;quot; applies: As a 4-bit processor with 4-bit registers and data paths and no &amp;quot;double precision&amp;quot; instructions - there is no other appearance of &amp;quot;endianness&amp;quot; in the architecture.&lt;/p&gt;&#xA;&lt;p&gt;(These are just my conclusions from wording on the datasheets. Someone who inspects an actual 4004 machine code dump, or a 4004 assembler, will have the definitive answer.)&lt;/p&gt;&#xA;" OwnerUserId="332" LastEditorUserId="332" LastEditDate="2021-03-07T05:53:46.640" LastActivityDate="2021-03-07T05:53:46.640" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18229" PostTypeId="2" ParentId="16815" CreationDate="2021-03-07T05:39:49.533" Score="2" Body="&lt;p&gt;My Osborne-1 luggable Z80 computer with 64K RAM running CP/M came with complete schematics.&#xA;I learned so much from it, for example, seeing how the ASCII in RAM got decoded into pixels via a font ROM as the video scanned. A huge bonus.&lt;/p&gt;&#xA;" OwnerUserId="18093" LastActivityDate="2021-03-07T05:39:49.533" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18230" PostTypeId="2" ParentId="18219" CreationDate="2021-03-07T09:46:45.057" Score="4" Body="&lt;p&gt;According to &lt;a href=&quot;https://www.philscomputerlab.com/windows-98-maximum-hard-drive-capacity.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.philscomputerlab.com/windows-98-maximum-hard-drive-capacity.html&lt;/a&gt; Win 98 supports harddrives up to 127 GB so your 60 GB drive should work fine. But never buy a HDD second hand!&lt;/p&gt;&#xA;" OwnerUserId="15901" LastEditorUserId="5199" LastEditDate="2021-03-08T20:12:13.220" LastActivityDate="2021-03-08T20:12:13.220" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18231" PostTypeId="2" ParentId="18195" CreationDate="2021-03-07T10:16:13.947" Score="5" Body="&lt;p&gt;This card is a low-cost model. The PCB is actually designed to take the more modern FDC37C666 chip, but on the card shown in the original post, the older (but mostly compatible) FDC37C654 is equipped instead. The two jumpers labelled FDD (JP5 and JP6) are most likely:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;FACF - pin 26 - not a configuration pin on the '654. Position doesn't matter&lt;/li&gt;&#xA;&lt;li&gt;FDCCF - pin 89 - floppy disk enable (1-2)/disable(2-3)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The block of 10 jumpers (JP7-JP16) contains (order guessed according to hints from the visible traces. JP8, JP11, JP12 are clearly identified)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;JP7: IDECF - pin 83 - hard disk enable (1-2)/disable(2-3)&lt;/li&gt;&#xA;&lt;li&gt;JP8: IDEACF - pin 25 - not a configuration pin on the '654. Position doesn't matter&lt;/li&gt;&#xA;&lt;li&gt;JP9: ECPEN - pin 94 - not a configuration pin on the '654. Position doesn't matter&lt;/li&gt;&#xA;&lt;li&gt;JP10: PADCF - pin 58 - not a configuration pin on the '654. Position doesn't matter&lt;/li&gt;&#xA;&lt;li&gt;JP11: PCF1 - pin 81 - parallel port base address&lt;/li&gt;&#xA;&lt;li&gt;JP12: PCF0 - pin 79 - parallel port base address&lt;/li&gt;&#xA;&lt;li&gt;S1CF0/S1CF1 24/23 - first serial port base address&lt;/li&gt;&#xA;&lt;li&gt;S2CF0/S2CF1 91/93 - second serial port base address&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;JP11/JP12: 1-2/1-2 = 278 (&amp;quot;LPT2&amp;quot;); 1-2/2-3 = 378 (&amp;quot;LPT1&amp;quot;); 2-3/1-2 = 3BC (MDA compatible); 2-3/2-3 = disable&lt;/p&gt;&#xA;&lt;p&gt;Serial port 1: 1-2/1-2 = 3F8 (&amp;quot;COM1&amp;quot;); 1-2/2-3 = 2F8 (&amp;quot;COM2&amp;quot;); 2-3/1-2 = 3E8 (&amp;quot;COM3&amp;quot;); 2-3/2-3 = disabled.&#xA;Serial port 2: 1-2/1-2 = 2F8 (&amp;quot;COM2&amp;quot;); 1-2/2-3 = 3F8 (&amp;quot;COM1&amp;quot;); 2-3/1-2 = 2E8 (&amp;quot;COM4&amp;quot;); 2-3/2-3 = disabled.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Do not plug any DMA jumpers&lt;/em&gt;. Those signals are only valid in ECP mode of the '666 controller. They serve a different function on the '654, and may cause your computer to misbehave if some software erroneously tries to access a third or fourth floppy drive.&lt;/p&gt;&#xA;&lt;p&gt;The jumper next to the parallel port can disable two of the six signals generated by U11. Most likely, U11 is part of the game port interface, and drives game port input to the ISA bus. With U11 in the top position (as on the photo), U11 drives only four bits (2 axes, 2 buttons). With U11 in the bottom position, U11 drives six bits, probably two extra buttons for joysticks with actual 4 buttons or special functions like a coolie hat. There seems to be no way to disable the game port completely.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2021-03-07T10:16:13.947" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18235" PostTypeId="2" ParentId="18207" CreationDate="2021-03-07T15:05:50.990" Score="4" Body="&lt;p&gt;It’s impossible to know without additional background on the history of the application or its author, which is either unavailable to you or you are unable to share. However there is a very good chance that this is just the result of a developer’s inexperience in any form of networking programming.&lt;/p&gt;&#xA;&lt;p&gt;It’s not impossible, but I think that the chance of someone writing in-house corporate software in the late ‘90s who were also familiar with NCP (discontinued in 1983, before networks were common in all but the largest organizations) are really remote.&lt;/p&gt;&#xA;&lt;p&gt;In the early ‘90s very few developers would have been experienced with network programming. Most people’s exposure to networks would have been limited to using (likely NetWare) file shares (*1). Technical resources and training were more limited and harder to reach than in today’s connected world. Your typical corporate in-house developer would have been primarily a domain expert, maybe self-taught in programming and writing programs for DOS standalone machines. They would have had perhaps one book available to them about how to program in TCP/IP and no expert available to lean against.&lt;/p&gt;&#xA;&lt;p&gt;If you started writing a network application at the time (probably using Sockets) you would start coding right away, learning as needed without studying the protocol or library in full detail. Most of your attention would have been on the domain of the application, with the networking code being a small portion you needed to get working and then move on. You can go really far, even finish coding, without even realizing that there was such a thing as client ports. Even if the developer eventually noticed, there is a chance that they had been too committed by then to something that already worked, and decided to keep going.&lt;/p&gt;&#xA;&lt;p&gt;I started my professional career in the late ‘90s surrounded by people who had more networking experienced than your typical corporate developer and maintaining a fairly sophisticated TCP/IP client-server application; and I still found several components that happily assumed that TCP/IP was packet-based (*2) and got away with it most of the time. The most well intended developers could get protocol concepts wrong. (I didn’t just show up with The Truth at hand of course, I was simply lucky enough to be given the needed time to study the documentation, then identify and fix the issues)&lt;/p&gt;&#xA;&lt;p&gt;(*1) There is a small chance that they had been exposed to SPX/IPX network programming, but as far as I know SPX/IPX has a notion equivalent to TCP client and server ports, so that would not explain the misunderstanding. Someone correct me if I’m wrong because I have never actually written for SPX/IPX.&lt;/p&gt;&#xA;&lt;p&gt;(*2) The assumption that (Winsock example) a single &lt;code&gt;recv()&lt;/code&gt; call will get you the full message you are expecting from the sender. That is not guaranteed. TCP is a stream protocol and the sender doesn’t send packets but a sequence of bytes; you’re getting a stream of bytes chunked (in order) for efficiency reasons, but you don’t control chunk sizes. You have to know the size of the message (in advance or from stream data), you have to keep reading until you get all the chunks of your message, and you have to reassemble them yourself.&lt;/p&gt;&#xA;" OwnerUserId="4577" LastActivityDate="2021-03-07T15:05:50.990" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18236" PostTypeId="2" ParentId="18207" CreationDate="2021-03-07T19:26:18.020" Score="0" Body="&lt;p&gt;Embedded systems often have insufficient resources to accommodate multiple simultaneous TCP connections.  As a result, they will often deny an attempt to initiate a connection when a connection is already live, but time out live connections relatively quickly, so that if a connection is dropped the device will return to usability relatively quickly.&lt;/p&gt;&#xA;&lt;p&gt;An approach I used on a bare-metal TCP stack I invented, but which I've not seen used elsewhere, was to have a device support a primary TCP port as well as a TCP &amp;quot;echo server&amp;quot;, but watch for a certain magic sequence of bytes on the echo server as a cue to forcibly end the primary port connection.&lt;/p&gt;&#xA;&lt;p&gt;The TCP echo server was implemented in entirely stateless fashion using a separate port, and could accept an essentially unlimited number of connections.  Receipt of a SYN packet would send back a SYN+ACK with source and destination port and IP addresses flipped, and with both source and destination byte counters copied from the original.  Receipt of any other ACK packet would return a packet with source and destination port, IP, and byte counters swapped, but use the difference between source and destination byte counters as a cue for what data to send (the port would send out a repeating message that included some status bits).&lt;/p&gt;&#xA;&lt;p&gt;I think the response to SYN would be four bytes longer than the incoming packet, but otherwise all transmitted packets were the same length as incoming packets, and the echo server was entirely stateless, so the only form of denial-of-service attack would be a data flood, and that would require that the initiator of the attack use half as much bandwidth as to flood the target's connection.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-03-07T19:26:18.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18237" PostTypeId="1" CreationDate="2021-03-08T00:15:44.900" Score="0" ViewCount="221" Body="&lt;p&gt;Looking for Vector-06C schematics in any form.&lt;/p&gt;&#xA;" OwnerUserId="21044" LastActivityDate="2021-03-09T12:27:38.553" Title="Vector-06C Soviet home PC schematics" Tags="&lt;hardware&gt;&lt;8080&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18238" PostTypeId="2" ParentId="18219" CreationDate="2021-03-08T02:18:23.033" Score="1" Body="&lt;p&gt;My experience has been that if you try to use a hard drive with a capacity beyond what the hardware will support you just get the capacity the hardware supports.&lt;/p&gt;&#xA;&lt;p&gt;The important thing is the size (3.5&amp;quot; or 2.5&amp;quot;) and the interface (IDE aka PATA or SATA.)  I &lt;strong&gt;strongly&lt;/strong&gt; suspect you're dealing with a 2.5&amp;quot; IDE.&lt;/p&gt;&#xA;&lt;p&gt;Before you spend any money on it, though--do you have the disks you will need to reinstall the OS?  A new drive won't have a system on it and even if you managed to get a drive with a system on it it won't have the drivers for your hardware.&lt;/p&gt;&#xA;" OwnerUserId="1897" LastActivityDate="2021-03-08T02:18:23.033" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18239" PostTypeId="1" AcceptedAnswerId="18275" CreationDate="2021-03-08T07:47:30.937" Score="6" ViewCount="510" Body="&lt;p&gt;Back when I was a fair bit younger, my father and I upgraded our old 286/486 to a snazzy Pentium and a fresh copy of the just-released Windows 95. I seem to recall a strange Easter egg on the upgrade process which I've tried searching for and am unsure whether I remember it correctly or not.&lt;/p&gt;&#xA;&lt;p&gt;When installing the new operating system, a dialog appeared notifying the user that 'The hard disk is about to be formatted and all data will be lost', with an 'ok' and 'cancel' button as well as a countdown timer of sorts. However when you attempted to press either of these buttons, they would shift across the screen away from your cursor, while the countdown continued towards zero.&lt;/p&gt;&#xA;&lt;p&gt;When it reached zero, with a flustered user desperately trying to press either button, a message appeared along the lines of &amp;quot;just kidding&amp;quot;, and the installation process continued.&lt;/p&gt;&#xA;&lt;p&gt;I'm not sure if this was part of the actual Windows install process, or some obscure third party thing. However I was wondering if anyone else recalls such a user experience?&lt;/p&gt;&#xA;" OwnerUserId="20050" LastEditorUserId="15334" LastEditDate="2021-03-10T15:05:33.357" LastActivityDate="2021-03-11T17:23:41.253" Title="Was there a hard disk format countdown easter egg hidden in the Windows 95 installer?" Tags="&lt;windows-95&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18240" PostTypeId="2" ParentId="18237" CreationDate="2021-03-08T07:51:13.897" Score="2" Body="&lt;p&gt;&lt;a href=&quot;https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/vector06cc/vector-06c-schematics.djvu&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://zx-pk.ru/threads/8669-vektor-06ts-zhelezo.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;For questions, you can try here (Russian).&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://zx-pk.ru/content/136-Vektor-06C-sovetski-bog-tcveta-i-zvuka&quot; rel=&quot;nofollow noreferrer&quot;&gt;An article about a computer.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11231" LastActivityDate="2021-03-08T07:51:13.897" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18241" PostTypeId="1" AcceptedAnswerId="18242" CreationDate="2021-03-08T11:32:40.567" Score="23" ViewCount="3016" Body="&lt;p&gt;The question &amp;quot;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/18224/10260&quot;&gt;Which endian was the Intel 4004?&lt;/a&gt;&amp;quot; generated some discussion about the distinction between the endianness of instructions versus data.  In the case of the 4004, the code space had 12 bit addresses, and addresses which were encoded inside instructions were packed in big endian format.  However, the data size was only 4 bits, making the question of data endianness supported by the hardware moot (although software was free to use whichever representation they desired).&lt;/p&gt;&#xA;&lt;p&gt;Recognizing that instructions and data can theoretically have opposite endianness, &lt;strong&gt;did any processor have big endian instructions and little endian data, or vice versa?&lt;/strong&gt;  By &amp;quot;instructions&amp;quot; I mean opcodes and operands, and &amp;quot;data&amp;quot; means all other memory accesses.&lt;/p&gt;&#xA;&lt;p&gt;Note that many processors are now &amp;quot;bi-endian&amp;quot;, meaning that they are capable of loading and storing data in both big and little endian.  That's not what is being discussed here, so please do not include that as an answer.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-03-09T10:57:34.867" Title="Did any processor have opposite endianness for instructions and data?" Tags="&lt;endianness&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18242" PostTypeId="2" ParentId="18241" CreationDate="2021-03-08T11:53:50.227" Score="27" Body="&lt;p&gt;First that comes to mind would be Nationals NS16xxx/32xxx series. For data in memory it's little-endian, but displacements and immediate values within instructions are big-endian.&lt;/p&gt;&#xA;&lt;p&gt;[Official End Of Answer]&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;[Later AddOn I Couldn't Stop Myself From Doing]&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;I know, the question does explicit exclude for bi-endian CPUs, but spending some time about the issue, I think there is more to it to be able to simply put it away as a single issue. So please pardon me for going there.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;In reality, what often is called bi-endianess isn't a single feature, but a spectrum.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;At one end there are CPUs (*1) like MIPS, which offers separate load and store for either endianess. Here byte order is really arbitrary and most definitely nothing to be considered in context of this question.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On the other end we have ARM. The CPU was originally designed as little-endian but a bi-endian mode was added regarding data. Being a RISC CPU it matters only for load and store (*2, *3), but unlike MIPS, it's not done per-instruction but switched via a global flag. Control register 1 holds a bit for endianness. When cleared (like after reset) access is little-endian, otherwise big-endian. Writing that register (&lt;code&gt;CPRT&lt;/code&gt;) is a privileged instruction, making switching anything but casual.&lt;/p&gt;&#xA;&lt;p&gt;As a result, an ARM CPU with the big-endian bit set fits the question for all operations. Data read from memory are big-endian, while values in instructions (*4) are little-endian. A user-mode programmer has no chance to change this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;So in hindsight, I would place ARM on the list of 'dual endianness ' CPUs.&lt;/strong&gt; (*5)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To add more confusion, SUN gave us not only SPARC, but increased pressure with UltraSPARC (64 bit), which introduced per (load/store) instruction endianness, much like MIPS. In addition, the MMU got a memory attribute defining endianness for a memory region. Here programs do not have a say about endianness, instead it's done automatically depending on the address which is accessed.&lt;/p&gt;&#xA;&lt;p&gt;So again, as with ARM, the decision is not in hands of ordinary programmers but defined by the OS. &lt;strong&gt;I guess SPARC V9 should also go on the 'dual endianness' list&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.S.: Interesting question :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - I use a generic plural here to avoid any discussion how many are there.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Plus &lt;code&gt;SWP&lt;/code&gt; (Swap).&lt;/p&gt;&#xA;&lt;p&gt;*3 - Always doing aligned word access; using a non-word address also reorders bytes/words, but that's a different issue.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Another unusual case for ARM, as by default it knows only an 8-bit immediate value, which can be shifted after loading. In addition there are 12-bit offsets for relative addressing and 24-bit offsets for branching.&lt;/p&gt;&#xA;&lt;p&gt;*5 - An attempt to use a different word than &amp;quot;bi-endian&amp;quot; to describe a CPU with different code and data endianness.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-03-09T10:57:34.867" LastActivityDate="2021-03-09T10:57:34.867" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18243" PostTypeId="2" ParentId="18241" CreationDate="2021-03-08T17:27:51.147" Score="-3" Body="&lt;p&gt;In considering whether to design a processor to be big-endian, little-endian, or some form of mixed-endian, the question one should ask is whether the processor will benefit from processing things in any particular order.  Consider the 6502 and its (zp),y addressing mode.  Given an instruction &amp;quot;lda ($12),y&amp;quot;, if locations $12 and $34 hold $AB and $CD, the processor will perform the following sequence of steps:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Read the opcode&lt;/li&gt;&#xA;&lt;li&gt;Read the operand $12&lt;/li&gt;&#xA;&lt;li&gt;Fetch a byte ($AB) from an address formed by outputting 0 on the upper address bus and forwarding the received value to the lower address bus, while computing ($12 + 1).&lt;/li&gt;&#xA;&lt;li&gt;Fetch a byte ($CD) from an address formed by outputting 0 on the upper address bus and the newly-computed value on the lower address bus, while computing ($AB + Y).&lt;/li&gt;&#xA;&lt;li&gt;Fetch a byte from an address formed by outputting the newly computed value on the lower address bus and the newly fetched value on the upper address, bus while computing ($BC + 1).&lt;/li&gt;&#xA;&lt;li&gt;If ($AB + Y) had generated a carry, fetch a byte from the address formed by keeping the value on the lower address bus and outputting the newly computed value on the upper address bus.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If computation of ($AB + Y) generates a carry, the instruction will take six cycles.  If it does not, however, step 5 will have been able to start outputting the correct address as soon as the upper byte was received, without having to perform any computation on it.  If the lower byte had been accessed second, the processor would have to add Y to it before being able to use it as an address, thus requiring six cycles in every case.&lt;/p&gt;&#xA;&lt;p&gt;In cases where all operand bits are fetched separately from from instruction bits, there's seldom if ever any advantage to using big-endian format, and there are sometimes advantages to little-endian.  In cases where operand and instruction bits are combined, however, a processor might need to know what the instruction bits are before it can do anything useful with the operand.  In those cases, it may be advantageous (if not downright essential) to fetch the instruction bits before the operand bits.  If some operand bits are included with those instruction bits, putting upper bits there may be more convenient than putting lower bits there.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-03-08T17:27:51.147" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="18244" PostTypeId="2" ParentId="18237" CreationDate="2021-03-08T18:00:46.360" Score="5" Body="&lt;p&gt;Take a look in this &lt;a href=&quot;http://vector06c.fdd5-25.net/info.html&quot; rel=&quot;noreferrer&quot;&gt;archive&lt;/a&gt;...&#xA;&lt;a href=&quot;https://i.stack.imgur.com/pgCaB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pgCaB.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7534" LastEditorUserId="7534" LastEditDate="2021-03-09T12:27:38.553" LastActivityDate="2021-03-09T12:27:38.553" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18245" PostTypeId="2" ParentId="18241" CreationDate="2021-03-08T18:33:35.287" Score="7" Body="&lt;p&gt;The PDP-11 used little endian for most data, and for its instructions.  So a normal 16-bit integer, or an instruction like 0xABCD in hex would be stored in two bytes in memory, in ascending address order: CD, AB.&lt;/p&gt;&#xA;&lt;p&gt;The in-memory representation for the 32-bit double-width integers, and for the floating point numbers, was different.  Two 16-bit little endian numbers, combined in big endian format themselves.  So a 32-bit number represented by hex 1234ABCD would be stored as: 34, 12, CD, AB.&lt;/p&gt;&#xA;&lt;p&gt;Various other mixed forms are of course possible.  And some have been used.  This particular arrangement got the name PDP-endian, and that term, and software support for it in the UNIX world at least, persisted long past the PDP-11 platform itself.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2021-03-09T04:05:41.637" LastActivityDate="2021-03-09T04:05:41.637" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18246" PostTypeId="2" ParentId="18227" CreationDate="2021-03-08T19:13:35.517" Score="9" Body="&lt;p&gt;The IBM 704 and 705 -- both vacuum-tube computers -- used &lt;strong&gt;twelve distinct power supply voltages&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4IQMt.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4IQMt.png&quot; alt=&quot;IBM 704/705 power supply voltages&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The 704 was a scientific computer, and used the unique voltages +220, +150, +15, +10, -15, -30, -100, -130, -150, -160, -200, and -250 V.  The 705 was a business machine which used +270, +140, +72, +48, +40, -12, -60, -130, -140, -150, -180, and -270 V.  Of course, IBM had a color code for each of the voltages (described in the source).  These are not signals, which are described in the following section of the source.  In addition, the filaments ran on 6.3 or 12.6 V, but this is AC, which does not count.&lt;/p&gt;&#xA;&lt;p&gt;Source: &lt;a href=&quot;http://www.piercefuller.com/scan/700circ.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;IBM 700 Series Component Circuits&lt;/em&gt;&lt;/a&gt;, PDF page 379, logical page E27.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-03-08T19:13:35.517" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18247" PostTypeId="2" ParentId="18219" CreationDate="2021-03-08T19:40:07.060" Score="1" Body="&lt;p&gt;For Windows 98; boot a linux distro and partition the disk giving Windows only the 32GByte. Then boot Win98 and install. It will work.&lt;/p&gt;&#xA;&lt;p&gt;The fact that there's more disk past the end of the partition only matters to fdisk (which will crash if you open it); but you don't run fdisk from your hard disk.&lt;/p&gt;&#xA;" OwnerUserId="418" LastActivityDate="2021-03-08T19:40:07.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18248" PostTypeId="1" CreationDate="2021-03-09T03:27:49.450" Score="30" ViewCount="7734" Body="&lt;p&gt;Intel has named the i7-8086K in honor of the 8086 processor, though itself it is a 64-bit processor. And we still see in embedded systems or MIL-SPEC platforms there are old CPUs like the 80386 produced in the original, say, 1 µm process. However, is there any CPU produced in, say, 14 nm process, but with as few transistors as the original 8086 or 80386 (which Linux dropped support for and moved on to the 80486 for some reason I've no idea of), etc. – thus useful enough for certain purposes, but faster than the original ones while cheaper and cooler than modern CPUs?&lt;/p&gt;&#xA;" OwnerUserId="17812" LastEditorUserId="15334" LastEditDate="2021-03-09T16:09:38.783" LastActivityDate="2021-03-12T10:11:49.313" Title="Does the industry continue to produce outdated architecture CPUs with leading-edge process?" Tags="&lt;cpu&gt;&lt;architecture&gt;" AnswerCount="7" CommentCount="10" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18249" PostTypeId="2" ParentId="18248" CreationDate="2021-03-09T04:09:34.570" Score="21" Body="&lt;p&gt;They're not quite cutting-edge process sizes, but there are current &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_MCS-51&quot; rel=&quot;noreferrer&quot;&gt;8051&lt;/a&gt;-core micro-controllers that do much better than the 1981 original's 12 MHz on 3.5-μm process silicon. For example, the &lt;a href=&quot;https://www.cast-inc.com/processors/8051s/s8051xc3/&quot; rel=&quot;noreferrer&quot;&gt;Cast S8051XC3&lt;/a&gt; has been run at over 600 MHz on a 40 nm process. The core has a few thousand gates, and can attain better than 3 μW/MHz&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2021-03-09T04:09:34.570" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18250" PostTypeId="2" ParentId="18248" CreationDate="2021-03-09T04:45:25.367" Score="47" Body="&lt;p&gt;Manufacturing simple processors on newer semiconductor processes is done.  But not quite to that extreme.&lt;/p&gt;&#xA;&lt;p&gt;Let's consider your proposed 8086 done in a 14 nm process.  Let's say we do it in CMOS, and maybe even throw in a few extra features, and it takes 100,000 transistors.  The die would be very tiny, so unbelievably tiny.  You could fit three thousand of them, with room to spare, in a single square millimetre, which is an area likely smaller than the period at the end of this sentence.&lt;/p&gt;&#xA;&lt;p&gt;As you might already be imagining, slicing up, wiring up and packaging wafers with literally hundreds of thousands or millions of microscopic ICs is not very convenient.  Using that old 180 nm fab, which costs far less to run too, starts looking attractive!&lt;/p&gt;&#xA;&lt;p&gt;With that said, there is a market for simpler processors on something like a 180, 90 or 45 nm fab, which are still quite new compared to the 1000 nm in use at the time of the 80386.  Consider all the microcontrollers.  Very small 8-bit devices are still manufactured today, typically with transistor budgets in the ~100K - 10M range, including onboard RAM and peripherals and so on.&lt;/p&gt;&#xA;&lt;p&gt;If you go a little bigger than that, the ARM Cortex-M devices, meant for embedded applications, are in the style of more traditional RISC processors of the 90s, and lack features we've taken for granted on desktops and servers for a while now, like single-cycle multiply instructions, virtual memory, or floating point; the smallest M0 cores are probably only about twice as complex, by gate count, as the original ARM processor from 1985.&lt;/p&gt;&#xA;&lt;p&gt;One exception where you might actually implement such a device on a new process is when you want or need the power saving advantage.  Due to the practicalities of how small a die can be as mentioned above, you basically have a free transistor budget up to a certain point after your main features are implemented.  So you just spend like a drunken sailor.  There is no manufacturing cost, or power drawback, to implementing features and just turning them off if you don't use them.  That's part of why even the cheapest microcontrollers today usually have numerous onboard peripherals.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2021-03-09T20:05:47.383" LastActivityDate="2021-03-09T20:05:47.383" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18251" PostTypeId="1" CreationDate="2021-03-09T07:14:00.110" Score="3" ViewCount="139" Body="&lt;p&gt;I can not find any documentation for this Kickstart switcher.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0jY3a.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0jY3a.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/8Wzwh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8Wzwh.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's labeled LS A9211-3 © FH 1992.&lt;/p&gt;&#xA;&lt;p&gt;How must the jumpers J1 and J2 be set and where must the KB and RES lines be connected to?&lt;/p&gt;&#xA;&lt;p&gt;I want to run Kickstart 1.3 and 2.05 on an Amiga 500 Plus.&lt;/p&gt;&#xA;" OwnerUserId="13471" LastActivityDate="2021-03-10T16:35:25.750" Title="How do I setup this Kickstart switcher?" Tags="&lt;hardware&gt;&lt;amiga&gt;&lt;amiga-kickstart&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18252" PostTypeId="2" ParentId="18248" CreationDate="2021-03-09T10:17:04.937" Score="40" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;Older CPUs have been shrunk to smaller sizes but not in the same way as modern design, simply as there is no gain in doing so.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Details:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Does the industry continue to produce outdated architecture CPUs with leading-edge process?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. Designs shrink, but there is no sense in using leading-edge sizes for such 'small' designs.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, is there any CPU produced in, say, 14 nm process, but with as few transistors as the original 8086 or 80386&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, as these designs simply have too small gate counts to make it worthwhile. A 386 has at least 132 pins. Each needing a pad on the die to connect to. With actual bonding technology a pad needs about 100-150µm , so 132 pads will take some 16mm (rounded for simplicity), making the chip at least 4x4 mm in size - or more exact that'll be the inner size available to its circuitry. 16mm2. Already with 12nm that's enough for more than 2-300 &lt;em&gt;million&lt;/em&gt; transistors, but an &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80386&quot; rel=&quot;noreferrer&quot;&gt;80386&lt;/a&gt; has less than 300 &lt;em&gt;thousand&lt;/em&gt;. It'll fit in 1000 times. Heck, even trowing in a 387 as well wouldn't change it much. No need to take on all the disadvantages of small node size without any gain.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Long Read&lt;/h2&gt;&#xA;&lt;p&gt;While Scruss' about greatly vamped up 8051 isn't wrong - the 8051 ISA is still a major seller in micro controllers. Not at least due quite mature tools for them. But at the same time, these new 8051's have about the same in common with the original Intel CPU as a i7 has in common with an 8086. yes, it has a mode to run the same code, but everything else is as different as as it can get. Like apples and oranges.&lt;/p&gt;&#xA;&lt;p&gt;Same goes for all examples about ARM. True, a Cortex something (ARMv7/8) can run most code from an ARM 6 (ARMv3), but its inner workings and structure are as well different in all aspects.&lt;/p&gt;&#xA;&lt;p&gt;But there are several &lt;em&gt;real&lt;/em&gt; old CPUs that are still in production today, using the same internal structure, only shrunk to a newer production process. Not at least classics like Z80 and 6502, the later making a great example about usefulness of shrinking as well.&lt;/p&gt;&#xA;&lt;p&gt;The original NMOS 6502 was produced in an 8 µm process and was later moved to 6 µm, while its WDC follow up, the 65C02 did already start out in an 3µm process (*1). Over the years the CPU was implemented using various processes, including &lt;a href=&quot;https://www.westerndesigncenter.com/wdc/w65c02s-core.php&quot; rel=&quot;noreferrer&quot;&gt;2µm, 1.5µm, 1.2µm, 0.8µm, 0.6µm, 0.5µm and 0.35µm&lt;/a&gt;. All of them using the same original design, adapted to new processes without being modified/extended otherwise. This includes of course embedded versions.&lt;/p&gt;&#xA;&lt;p&gt;Unlike many other classic chips, the 65C02 is &lt;a href=&quot;https://www.mouser.de/new/western-design-center/wdc-w65c02s/&quot; rel=&quot;noreferrer&quot;&gt;still available new&lt;/a&gt; in 2021 with exactly the same internal structure as it was in 1983. Now produced in 0.6 µm (600nm) by TSMC. Yes, the very same TSMC that astonishes with &lt;a href=&quot;https://en.wikipedia.org/wiki/Ryzen&quot; rel=&quot;noreferrer&quot;&gt;Ryzen CPUs&lt;/a&gt; in 7nm operates 'still' a 600nm production line - and it got a bright future.&lt;/p&gt;&#xA;&lt;p&gt;It might seem strange, that today's 65C02 is manufactured in 600nm when it has already been used with 350 nm, as mentioned above, but shrinking does not always make much sense. Sure, when it's about squeezing milliards of transistors into a space as small as possible, shrinking does help. But what if there are features that do not allow further shrinking? Like these stupid little pads a chip needs for bonding for example? A 6502 needs 40 pins connected, thus at least 40 pads around the outer rim, like seen here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bZduY.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bZduY.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The image is taken from &lt;a href=&quot;https://youtu.be/qbaKfvPoNhY?t=33&quot; rel=&quot;noreferrer&quot;&gt;this nice video&lt;/a&gt; and features the 1993 800nm version. It shows that, already at that 'crude' size, the minimum area possible, defined by maximum packed pads, sufficient to hold the CPU is reached. Looking close reveals a comparable large unused area between pads and their pull up/down circuit (*2) and the CPU circuitry. Any further process shrink will therefor not bring savings in area, but add complications.&lt;/p&gt;&#xA;&lt;p&gt;It is often forgotten that shrinking adds problems, quite a lot. A large effort in today's processor design goes into minimizing or mitigating these effects. Heat is only the most obvious, but usually not of concern for ancient designs with a few thousand gates. With shrinking size elements get more sensible for all kind distortion, foremost voltage. It is not only for power saving that modern CPUs operate at ridiculous low voltages (like the mentioned 7nm Ryzen with 1.1 to 1.4 Volt), as the fine structures would simply fry at higher voltage.&lt;/p&gt;&#xA;&lt;p&gt;In relation, with shrinking voltage and node size parasitic loss increases. So if low power is a major goal, smallest available structure size is not a good choice.&lt;/p&gt;&#xA;&lt;p&gt;Not to mention that rough environments (Military use, Space, etc.) love to kill fine structures on sight :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Being CMOS this was in part compensated by needing about 2.5 times the gates.&lt;/p&gt;&#xA;&lt;p&gt;*2 - It nicely shows the difference between power pins, which simply connect to ground and power layer, and signal pins with their drivers. Seeing the drivers already orientated radial (inside and outside of the pads) show that the chip is already optimized for size. In comparison the &lt;a href=&quot;http://visual6502.org/images/6502/6502_top_op10x_BF_4677.png&quot; rel=&quot;noreferrer&quot;&gt;original NMOS 6502&lt;/a&gt; (Achtung, extreme large) was so large that there was enough space between the pads that many of the drivers could be moved there.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-09T22:44:16.987" LastActivityDate="2021-03-09T22:44:16.987" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18253" PostTypeId="1" AcceptedAnswerId="18254" CreationDate="2021-03-09T10:24:01.973" Score="26" ViewCount="3753" Body="&lt;p&gt;I found the &lt;a href=&quot;https://github.com/bbarker/AncientenUnixen/tree/main/v6/c&quot; rel=&quot;noreferrer&quot;&gt;old C compiler from V6&lt;/a&gt;, and, though it seems to the modern eye a little different from good, idiomatic C, evidently it uses things like &lt;code&gt;#include&lt;/code&gt; and &lt;code&gt;#define&lt;/code&gt;, but I do not see how it implements these.&lt;/p&gt;&#xA;&lt;p&gt;Was this an external program at that time? In that case, is it lost to obscurity or am I missing something in this codebase?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="15334" LastEditDate="2021-03-11T10:40:54.243" LastActivityDate="2021-03-11T10:40:54.243" Title="Where is the ancient preprocessor?" Tags="&lt;history&gt;&lt;c&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18254" PostTypeId="2" ParentId="18253" CreationDate="2021-03-09T11:24:49.837" Score="34" Body="&lt;p&gt;In V6, the C preprocessor is part of &lt;code&gt;cc&lt;/code&gt;, the compiler driver; see &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V6/usr/source/s1/cc.c#L235&quot; rel=&quot;noreferrer&quot;&gt;the &lt;code&gt;expand()&lt;/code&gt; function&lt;/a&gt; in &lt;code&gt;cc.c&lt;/code&gt;. The directory you linked to contains the source code to the two passes of the C compiler, &lt;code&gt;c0&lt;/code&gt; and &lt;code&gt;c1&lt;/code&gt; (and their floating-point variants, &lt;code&gt;fc0&lt;/code&gt; and &lt;code&gt;fc1&lt;/code&gt;), and the optional optimiser, &lt;code&gt;c2&lt;/code&gt;. The passes are driven by &lt;code&gt;cc&lt;/code&gt;, whose source code is available in the &lt;code&gt;s1&lt;/code&gt; directory.&lt;/p&gt;&#xA;&lt;p&gt;As far as I can tell, the external preprocessor &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V7/usr/src/cmd/cpp/README&quot; rel=&quot;noreferrer&quot;&gt;was introduced in V7&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In both cases, the preprocessor can be invoked using &lt;code&gt;cc -P&lt;/code&gt;. The &lt;a href=&quot;http://man.cat-v.org/unix-6th/1/cc&quot; rel=&quot;noreferrer&quot;&gt;V6&lt;/a&gt; and &lt;a href=&quot;http://man.cat-v.org/unix-7th/1/cc&quot; rel=&quot;noreferrer&quot;&gt;V7&lt;/a&gt; &lt;code&gt;cc(1)&lt;/code&gt; manpages provide more detail. Dennis M. Ritchie’s &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/chist.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;The Development of the C Language&lt;/em&gt;&lt;/a&gt; paper gives this context:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Many other changes occurred around 1972-3, but the most important was the introduction of the preprocessor, partly at &lt;a href=&quot;https://apps.dtic.mil/sti/citations/ADA010218&quot; rel=&quot;noreferrer&quot;&gt;the urging of Alan Snyder&lt;/a&gt;, but also in recognition of the utility of the the file-inclusion mechanisms available in BCPL and PL/I. Its original version was exceedingly simple, and provided only included files and simple string replacements: &lt;code&gt;#include&lt;/code&gt; and &lt;code&gt;#define&lt;/code&gt; of parameterless macros. Soon thereafter, it was extended, mostly by Mike Lesk and then by John Reiser, to incorporate macros with arguments and conditional compilation. The preprocessor was originally considered an optional adjunct to the language itself. Indeed, for some years, it was not even invoked unless the source program contained a special signal at its beginning. This attitude persisted, and explains both the incomplete integration of the syntax of the preprocessor with the rest of the language and the imprecision of its description in early reference manuals.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The “special signal at its beginning” is &lt;code&gt;#&lt;/code&gt; as the very first character; this test can be seen &lt;a href=&quot;https://github.com/dspinellis/unix-history-repo/blob/Research-V5/usr/source/s1/cc.c#L239&quot; rel=&quot;noreferrer&quot;&gt;in V5’s &lt;code&gt;cc.c&lt;/code&gt;&lt;/a&gt; (and in V6’s).&lt;/p&gt;&#xA;&lt;p&gt;(I’m linking to Diomidis Spinellis’ Unix history repo because I’m familiar with it, but &lt;a href=&quot;https://github.com/bbarker/AncientenUnixen/tree/main/v6/s1&quot; rel=&quot;noreferrer&quot;&gt;the repo you’ve found also has &lt;code&gt;cc&lt;/code&gt; in &lt;code&gt;s1&lt;/code&gt;&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="4025" LastEditDate="2021-03-09T19:03:53.563" LastActivityDate="2021-03-09T19:03:53.563" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="18255" PostTypeId="2" ParentId="17226" CreationDate="2021-03-09T13:54:09.197" Score="3" Body="&lt;p&gt;DEC needed a 64-bit successor for their VAX. However, VAX was a very CISC architecture at a time when ISA and microarchitecture hadn't been decoupled yet. Turns out DEC had a very hard time trying to scale the VAX to a 64-bit pipelined/superscalar implementation.&lt;/p&gt;&#xA;&lt;p&gt;MIPS announced the R4000 in the late 80s. It had everything that DEC needed: 64-bit architecture, and the capability of hitting 100Mhz. The R4000 was also supposed to be the target platform for NT, and most PC vendors were expected to migrate to it since x86 was supposed not to scale past the 486.&lt;/p&gt;&#xA;&lt;p&gt;So it had a lot of momentum and hype going for it.&lt;/p&gt;&#xA;&lt;p&gt;Digital based its Alpha heavily on the initial architectural specs and sketches of the R4000. And it was kind of a Plan B design.&lt;/p&gt;&#xA;&lt;p&gt;However, MIPS ended running into problems and the R4000 was late and buggy. This led to MIPS getting into a bad financial position, and they had to be taken over by SGI, who couldn't afford to have their main CPU supplier go under.&lt;/p&gt;&#xA;&lt;p&gt;Even though the R4000 was the world's 1st 64-bit microprocessor. MIPS was now under the control of a direct competitor of DEC, and their track record didn't inspire much confidence to base DEC's main product line on.&lt;/p&gt;&#xA;&lt;p&gt;By this time Alpha was ready, so it made no sense for DEC to not consider MIPS any further.&lt;/p&gt;&#xA;&lt;p&gt;The R4000 showed the way for DEC, since all their previous attempts had ended up being dead ends.&lt;/p&gt;&#xA;" OwnerUserId="21057" LastEditorUserId="11446" LastEditDate="2021-03-09T16:08:15.200" LastActivityDate="2021-03-09T16:08:15.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18256" PostTypeId="2" ParentId="1887" CreationDate="2021-03-09T14:59:27.037" Score="15" Body="&lt;p&gt;The other answers already mention that the algorithm is based on an 8×8 Bayer matrix. But that’s not the whole story.&lt;/p&gt;&#xA;&lt;p&gt;Most how-to guides to colour Bayer dithering, like the one cited in &lt;a href=&quot;/a/1889/15334&quot;&gt;@phyrfox’s answer&lt;/a&gt; will have you perturb the colour’s RGB coordinates&lt;sup&gt;0&lt;/sup&gt; uniformly by the amount specified in the dithering matrix’s cell (scaled to the precision of the target palette), and then rounded off to the nearest&lt;sup&gt;0&lt;/sup&gt; colour in the palette. But if you try it, you’ll notice that’s not what actually happens in Windows. Here’s an example with the colour whose coordinates appear in the screenshot in the question:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WEGMJ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WEGMJ.png&quot; alt=&quot;Worked example of Bayer dithering of #4db3ff (77, 179, 255) with the method described above, which results in a cross-hatch pattern of cyan (#00ffff) and light grey (#c0c0c0) in roughly 3:5 proportion, compared to how Windows actually dithers the colour, which combines 19× blue (#0000ff), 26× cyan (#00ffff) and 19× white (#ffffff).&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The actual full algorithm is a bit more involved. The rough steps are:&lt;/p&gt;&#xA;&lt;ol start=&quot;0&quot;&gt;&#xA;&lt;li&gt;The RGB coordinates&lt;sup&gt;0&lt;/sup&gt; of the source colour are permuted so that the property R ≥ G ≥ B holds. The original order of coordinates is then remembered for later.&lt;/li&gt;&#xA;&lt;li&gt;The coordinates are scaled from the range [0, 256) into [0, 64] and further classified into one of four non-overlapping tetrahedra in RGB space, which are defined by points corresponding to select palette colours (#000000, #800000, #ff0000, #808000, #ffff00, #808080, #ffffff).&lt;/li&gt;&#xA;&lt;li&gt;The RGB coordinates of the dithered colour are converted into scaled barycentric coordinates over the vertices of the tetrahedron chosen in the previous step. Those latter coordinates are then taken as weights/proportions in which the corresponding colours will be taken.&lt;/li&gt;&#xA;&lt;li&gt;The bits of the RGBI values of chosen colours are shuffled back to agree with the original order of RGB coordinates of the source colour.&lt;/li&gt;&#xA;&lt;li&gt;The list of chosen colours is sorted in order of increasing intensity. (This step doesn’t seem strictly necessary; I assume it is meant to prevent awkward discontinuities when colours transition from one equivalence class to another.)&lt;/li&gt;&#xA;&lt;li&gt;Finally, a Bayer matrix is used to distribute the colours in an 8×8 pixel grid.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The complete algorithm can be found in the Windows 3.1 Device Developer’s Kit, in a file named &lt;code&gt;dithers.asm&lt;/code&gt; (appearing there in several copies, with the source code of display drivers). Unfortunately, since it’s written in assembly, it’s a bit hard to follow (especially that it relies on some preconditions set up in routines located in other files), plus blithely copying Microsoft’s code could have you accused of copyright infringement.&lt;sup&gt;1&lt;/sup&gt; The top of the file names the author as Günter Zieber and promises that the algorithm ‘will be commented and described in some detail in a few days’. However, tough luck trying to find this description in the DDK.&lt;/p&gt;&#xA;&lt;p&gt;But indeed this promise was eventually fulfilled – although somewhere completely different. Searching for the author’s name reveals &lt;a href=&quot;https://patentimages.storage.googleapis.com/0d/51/6a/42404fa95f7558/US5485558.pdf&quot; rel=&quot;noreferrer&quot;&gt;U.S. patent 5485558&lt;/a&gt;, also filed as in Canada as &lt;a href=&quot;https://patents.google.com/patent/CA2064074A1&quot; rel=&quot;noreferrer&quot;&gt;CA2064074A1&lt;/a&gt; and in Europe as &lt;a href=&quot;https://patents.google.com/patent/EP0484509A1&quot; rel=&quot;noreferrer&quot;&gt;EP0484509A1&lt;/a&gt;. All those patents have expired in the last decade or sooner, so you should not be worried about getting sued for reading them.&lt;sup&gt;1&lt;/sup&gt; The US patent text even contains a C code sample (table 11), which is much more readable than assembly, and as US patent texts themselves are usually uncopyrighted, you should be able to plagiarise that one with impunity.&lt;sup&gt;1&lt;/sup&gt; The input colour is passed as 8-bit numbers in the variables &lt;code&gt;R&lt;/code&gt;, &lt;code&gt;G&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt;, while the output is returned in the &lt;code&gt;output&lt;/code&gt; array containing packed 4-bit IBGR values (1 = red, 2 = green, 4 = blue, 8 = intensity). Although to actually use the code you will have to apply some corrections:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In the matrix multiplication code, the &lt;code&gt;tempG&lt;/code&gt; and &lt;code&gt;tempB&lt;/code&gt; variables should be swapped;&lt;/li&gt;&#xA;&lt;li&gt;The final row of the transformation matrix for subspace 3 should be &lt;code&gt;{ 1,  0,  1}&lt;/code&gt; and not &lt;code&gt;{ 1,  1,  1}&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;colors&lt;/code&gt; array in &lt;code&gt;MakeColorCntTable&lt;/code&gt; should contain &lt;code&gt;3&lt;/code&gt;s where it has &lt;code&gt;2&lt;/code&gt;s;&lt;/li&gt;&#xA;&lt;li&gt;There are also a number of trivial issues like missing declarations, an omitted comma, and a logical operator spelt &lt;code&gt;and&lt;/code&gt; instead of &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;.&lt;sup&gt;2&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Additionally, as &lt;a href=&quot;/a/1904/15334&quot;&gt;mentioned by @Neil&lt;/a&gt;, Windows special-cases the otherwise-unused solid light-gray colour to be returned for #c0c0c0 instead of a cross-hatch pattern of dark gray (#808080) and white (#ffffff). The patent does not mention this at all and does not replicate the behaviour in the code sample. But otherwise, this is the exact same algorithm that appears in the DDK, and the one built-in Windows drivers use.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;0&lt;/sup&gt; Those knowledgeable about colour reproduction should immediately ask: &lt;em&gt;which&lt;/em&gt; RGB coordinates? If you want to know what does this even mean and why it matters, read up on &lt;a href=&quot;https://blog.johnnovak.net/2016/09/21/what-every-coder-should-know-about-gamma/&quot; rel=&quot;noreferrer&quot;&gt;gamma&lt;/a&gt;. I am telling you about this &lt;a href=&quot;https://xkcd.com/1015/&quot; rel=&quot;noreferrer&quot;&gt;because I really hate you&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To clarify: although the # notation is usually understood as specifying colour coordinates in gamma space, all colour specifications in this post should be understood to be in linear RGB space. This assumption is necessary to make the dithering algorithm gamma-correct.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Probably. I’m just a &lt;a href=&quot;https://wiki.c2.com/?LanguageLawyer&quot; rel=&quot;noreferrer&quot;&gt;language lawyer&lt;/a&gt;, not a regular lawyer.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; Also, it doesn’t quite adhere to current best practices of writing C, as it uses global variables to pass values between functions, and doesn’t declare them &lt;code&gt;static&lt;/code&gt;. But fixing that is not necessary to make the code work at all.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-04-11T19:20:13.170" LastActivityDate="2021-04-11T19:20:13.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18257" PostTypeId="2" ParentId="18248" CreationDate="2021-03-09T15:22:49.077" Score="11" Body="&lt;p&gt;Sometimes...&lt;/p&gt;&#xA;&lt;p&gt;Well, let's go back to one of the chips that was part of the original home computer revolution - the Zilog Z80. The AMD of the era, the Z80 was binary compatible with the Intel 8080 chip, only better, and could run the CP/M operating system that was the standard before MS-DOS, so your Z80 computer had access to industry standard software like Microsoft BASIC and COBOL, Borland Turbo Pascal, dBASE II, Wordstar, etc...&lt;/p&gt;&#xA;&lt;p&gt;Zilog is still around and producing the eZ80 - &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_eZ80&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Zilog_eZ80&lt;/a&gt; - which runs at 50Mhz, and is equivalent to a 150MHz Z80 CPU. Now back in the late 70s/early 80s typical CPUs ran at 1-4MHz. The most common Z80 was a 4MHz version. A 6-8Mhz CPU was considered super fast. 150Mhz would seem insanely quick.&lt;/p&gt;&#xA;&lt;p&gt;So I'd say at least some old CPUs are still around and have been improved by incorporating modern design and manufacturing ideas. Are they as good as modern CPUs - no, but they are light years beyond what they were in their hey-day.&lt;/p&gt;&#xA;&lt;p&gt;The eZ80 is marketed as a micro-controller you'd use to open your garage door or trigger a restaurant buzzer nowdays - &lt;a href=&quot;https://www.zilog.com/index.php?option=com_product&amp;amp;task=product&amp;amp;businessLine=1&amp;amp;id=77&amp;amp;parent_id=77&amp;amp;Itemid=57&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.zilog.com/index.php?option=com_product&amp;amp;task=product&amp;amp;businessLine=1&amp;amp;id=77&amp;amp;parent_id=77&amp;amp;Itemid=57&lt;/a&gt; - but this was once one of the most popular computer CPUs.&lt;/p&gt;&#xA;&lt;p&gt;It's still binary compatible with the original Z80 which means some people have done some interesting stuff:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://hackaday.com/2020/02/23/a-z80-computer-at-the-next-level/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hackaday.com/2020/02/23/a-z80-computer-at-the-next-level/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.tindie.com/products/lutherjohnson/makerlisp-ez80-lisp-cpm-computer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.tindie.com/products/lutherjohnson/makerlisp-ez80-lisp-cpm-computer/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20882" LastEditorUserId="20882" LastEditDate="2021-03-10T07:20:18.337" LastActivityDate="2021-03-10T07:20:18.337" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18258" PostTypeId="1" AcceptedAnswerId="18264" CreationDate="2021-03-09T15:38:21.030" Score="9" ViewCount="298" Body="&lt;p&gt;The asynchronous serial protocol supported an optional parity bit, which could make the total number of &amp;quot;1&amp;quot; bits an even number or an odd number.  As discussed in &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2316/10260&quot;&gt;this question&lt;/a&gt;, parity could theoretically detect an error in the transmission; but it also added additional time for transmission, errors were relatively rare, the parity scheme could only detect an error rather than identify the correct value, and ignoring errors was much easier than establishing a protocol to correct them.  Thus, most of the equipment that I have seen ship with parity turned off by default.  I have seen a few items that shipped with &lt;em&gt;even&lt;/em&gt; parity.&lt;/p&gt;&#xA;&lt;p&gt;However, I don't recall &lt;em&gt;odd&lt;/em&gt; parity ever being chosen as the default setting.  &lt;strong&gt;Did any equipment&lt;/strong&gt; (e.g. computers, teletypes, modems) &lt;strong&gt;have &lt;em&gt;odd&lt;/em&gt; parity as the default factory setting?&lt;/strong&gt; (or perhaps the only available setting?)&lt;/p&gt;&#xA;&lt;p&gt;The mere &lt;em&gt;ability&lt;/em&gt; to choose another parity setting is not what is being asked; most equipment was capable of that.  Rather, the question is about the &lt;em&gt;manufacturer's default setting&lt;/em&gt;.  Presumably, this would be the setting that the manufacturer thought would be most useful for that particular application.&lt;/p&gt;&#xA;&lt;p&gt;Also, the question is about parity used for &lt;em&gt;serial communication&lt;/em&gt;, not as used in &lt;em&gt;memory&lt;/em&gt; or other contexts.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="15334" LastEditDate="2021-03-11T16:01:32.220" LastActivityDate="2021-03-11T16:01:32.220" Title="Did any equipment ship with odd serial parity by default?" Tags="&lt;history&gt;&lt;serial&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18259" PostTypeId="1" CreationDate="2021-03-09T15:47:09.497" Score="13" ViewCount="506" Body="&lt;p&gt;The hexadecimal notation &lt;code&gt;#&lt;i&gt;RR&lt;/i&gt;&lt;i&gt;GG&lt;/i&gt;&lt;i&gt;BB&lt;/i&gt;&lt;/code&gt; for RGB colour triples has been popularised by HTML and is commonly associated with it, even though nowadays it is not usually used in HTML directly, but rather through CSS.&lt;/p&gt;&#xA;&lt;p&gt;I noticed that the same notation is used in the X pixmap format (XPM), which to my knowledge was created in 1989, thus predating HTML (1993).&lt;/p&gt;&#xA;&lt;p&gt;Where does this notation come from? How did it end up in HTML?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-05-05T15:27:39.177" LastActivityDate="2021-05-05T15:27:39.177" Title="Where did the # notation for hexadecimal RGB colour triples originate?" Tags="&lt;history&gt;&lt;graphics&gt;&lt;internet&gt;" AnswerCount="1" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18260" PostTypeId="2" ParentId="11473" CreationDate="2021-03-09T19:21:19.993" Score="6" Body="&lt;p&gt;None of the existing answers consider the context of the development of ASCII.  Remember, the first version of the standard was released in &lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII#History&quot; rel=&quot;noreferrer&quot;&gt;1963&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;At the time, &lt;strong&gt;hexadecimal notation was neither popular nor standardized.&lt;/strong&gt;  Most systems used either binary-coded-decimal or octal, for which the digits &lt;code&gt;0&lt;/code&gt;-&lt;code&gt;9&lt;/code&gt; are sufficient.&lt;/p&gt;&#xA;&lt;p&gt;As described in &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/15099/10260&quot;&gt;this question&lt;/a&gt;, at least four other ways of representing the hexadecimal digits 10-15 were used.  The choice of &lt;code&gt;A&lt;/code&gt;-&lt;code&gt;F&lt;/code&gt; -- which may seem obvious today -- was not introduced until the IBM System/360, which first came out in 1964, &lt;em&gt;after the first version of the ASCII standard&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Thus, hexadecimal notation was not even a consideration by the ASCII committee.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The ASCII committee decided early on that &lt;strong&gt;the lowest four bits of a decimal digit's encoding must be the actual digit.&lt;/strong&gt;  In other words, &lt;code&gt;0&lt;/code&gt; must encode as XXX0000, and &lt;code&gt;9&lt;/code&gt; must encode as XXX1001.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Criterion 6.  The numerics should have bit patterns such that the four low-order bits shall be the binary coded decimal representation of numerics.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20160526172151/https://textfiles.meulie.net/bitsaved/Books/Mackenzie_CodedCharSets.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Coded Character Sets, History and Development&lt;/em&gt;&lt;/a&gt;, PDF page 257, logical page 235.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So far, your proposal is consistent with the standard.  It would place &lt;code&gt;0&lt;/code&gt; at XXX0000, &lt;code&gt;9&lt;/code&gt; at XXX1001, &lt;code&gt;A&lt;/code&gt; at XXX1010, and &lt;code&gt;F&lt;/code&gt; at XXX1111.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Another decision of the committee was that &lt;strong&gt;the alphabetic characters all had to be contiguous&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Criterion 10.  The alphabetics should have contiguous bit patterns.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;ibid&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Considering your proposal, &lt;code&gt;A&lt;/code&gt; through &lt;code&gt;F&lt;/code&gt; are already contiguous.  &lt;code&gt;G&lt;/code&gt; would have to continue in a new group of 16, (XXX+1)0000.  &lt;code&gt;V&lt;/code&gt; would be (XXX+1)1111.  &lt;code&gt;W&lt;/code&gt; would continue into a third group of 16, (XXX+2)0000.  &lt;code&gt;Z&lt;/code&gt; would be (XXX+2)0011.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Where your proposal fails is the committee's requirement that &lt;strong&gt;all alphabetic characters must fit into 5 bits&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Criterion 9: The alphabetics A through Z, and some code positions contiguous to the code position of Z, should be contained in a 5 bit subset.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;ibid&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;At the time of the standard's creation, every bit was precious.  Packing customer names into 5-bit fields instead of 6 could significantly shrink the size of a business database.&lt;/p&gt;&#xA;&lt;p&gt;As we previously noted, your proposal places &lt;code&gt;A&lt;/code&gt; at XXX1010 and &lt;code&gt;Z&lt;/code&gt; at (XXX+2)0011.  Such an encoding overlaps a 5-bit boundary, and thus does not meet the committee's criteria.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-03-09T19:21:19.993" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18261" PostTypeId="2" ParentId="18258" CreationDate="2021-03-09T20:06:15.990" Score="6" Body="&lt;p&gt;Even parity has the advantage of making all zeroes a valid state and for even word lengths also makes all ones a valid state.  Odd parity has the advantage of making all valid states contain at least one bit set.  I don't know of asynchronous serial peripherals that used odd parity, since async signalling protocol guarantees that every byte will have a start bit with value 0 and a stop bit with value 1, but many synchronous serial protocols such as those used with magnetic stripes or NTSC video closed captions use odd parity.  Since an all-ones character can only appear at the end of a magnetic stripe, using odd parity means that the maximum number of consecutive zero bits within the numeric portion of a magnetic stripe (4 bits plus parity) is eight, and the maximum number of consecutive one bits is 13 (a byte whose last three bits are set, followed by an end marker, followed by an xor-sum of all ones).&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-03-09T20:06:15.990" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18262" PostTypeId="2" ParentId="13030" CreationDate="2021-03-09T21:07:51.200" Score="14" Body="&lt;p&gt;I developed all the early Tri-State devices at National.  Dale Mrazek in applications postulated the the need for something to replace the open collector, resistor pullup, which was the standard for buses at that time.  I figured out the implementation and wrote at least one (can't remember) application note.  Dale wrote some stuff too.  There was no formal introduction the way you'd think of a new family.  It was just an extension of the DM55/75 family at National.  The first part was the DM7551 (4 bit tri-state latch) and I think it was introduced in 1969/70.  At the time, National used to give seminars on the application of new parts and I remember making presentations on it in Japan, England, and France.&lt;/p&gt;&#xA;" OwnerUserId="21064" LastActivityDate="2021-03-09T21:07:51.200" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18263" PostTypeId="2" ParentId="18251" CreationDate="2021-03-10T03:43:02.727" Score="2" Body="&lt;p&gt;Kickstart switchers tended to either be physical switch driven (i.e. install a toggle switch on the case) or smartly drove themselves off of signals it could grab off the motherboard. The traces suggest that the jumpers might be for ROM size since it looks like it might just loop around a high address line when closed (i.e. would be for a 256KB ROM like KS1.3). As for the jumpers, some such as the DKB MultiStart has a line that connected to the RESET line of either the Gary (pin 41) or Paula (not sure which pin).&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, I have no idea what KB would be connected to. As well, it looks like there are two other wires coming off your board which you've not photographed and might be key. As well, if the smaller IC can be removed and you can see the traces below, that might provide more clues, since only a few are on the back side of the board and the rest are on the front side under the chip.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: The closest thing I can find is &lt;a href=&quot;https://bigbookofamigahardware.com/bboah/product.aspx?id=667&quot; rel=&quot;nofollow noreferrer&quot;&gt;this SWB switcher&lt;/a&gt;; it looks similar in design and does have a manual in German. It doesn't have the jumpers, but it does look like it has two wires coming out from it, one for the RESET line (pin 5 of the Gary in this case; it is another reset signal) and one for the odd CIA chip. I don't know what the particular pin serves on the CIA there, but I know that they are used for keyboard functions. Hope that helps.&lt;/p&gt;&#xA;" OwnerUserId="382" LastEditorUserId="382" LastEditDate="2021-03-10T16:35:25.750" LastActivityDate="2021-03-10T16:35:25.750" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18264" PostTypeId="2" ParentId="18258" CreationDate="2021-03-10T10:13:58.747" Score="12" Body="&lt;p&gt;Just one example:&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.trimble.com/home-2021-v1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Trimble&lt;/a&gt; GPS receiver's (used on agricultural positioning systems, for example) proprietary &lt;em&gt;TSIP&lt;/em&gt; protocol (roughly end of the century, so somewhat retro already) uses odd parity by default.&lt;/p&gt;&#xA;&lt;p&gt;Odd parity has one marginal advantage over even, at least for even bit-lengths: If you have the data input stuck at 0 or 1 (which is a probably more common basic problem than mingled bits, as it typicall will denote a broken connection), you will be able to detect this with odd parity (because both 0b11111111 and 0b00000000 have even parity).&lt;/p&gt;&#xA;&lt;p&gt;Another (maybe more popular example):&lt;/p&gt;&#xA;&lt;p&gt;The PS/2 interface between the IBM AT (and later,  until it was replaced with USB) and its keyboard uses odd parity as well.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2021-03-11T15:55:26.477" LastActivityDate="2021-03-11T15:55:26.477" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18265" PostTypeId="2" ParentId="18248" CreationDate="2021-03-10T20:03:44.707" Score="2" Body="&lt;p&gt;There is nothing preventing someone from doing so.&lt;/p&gt;&#xA;&lt;p&gt;But an old design is at a major disadvantage, Leading Edge Process will compete with Leading Edge Designs which can demand a much higher premium.&lt;/p&gt;&#xA;&lt;p&gt;So your 15 year design, with sleepy industrial customers (assuming) will either, but likely both, (1) fail to reduce in cost over time and instead get more costly over time and (2) have long factory lead times and a staccato production schedule as you seek to compete for fab time.&lt;/p&gt;&#xA;&lt;p&gt;Meanwhile, your “yesterday’s process” fab is sitting idle and offering a discount… However it has a major disadvantage.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Wafer size has changed in parallel to process node changes.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Instead, what manufacturers will typically do, is upgrade a more traditional process node fab to a larger wafer size (standard was say 2″ or 4″, now is 200–300 mm+), this investment seeks to address point (1) from above, getting more product for the same amount of production time while maintaining the process node, fulfilling a market expectation that these parts are cheap, reliable, and will continue to get less expensive and more reliable - like a basic commodity.&lt;/p&gt;&#xA;" OwnerUserId="8160" LastEditorUserId="15334" LastEditDate="2021-03-10T20:35:48.950" LastActivityDate="2021-03-10T20:35:48.950" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18266" PostTypeId="1" CreationDate="2021-03-10T23:10:19.883" Score="3" ViewCount="189" Body="&lt;p&gt;Of course, the GBA was a handheld console, and never officially shipped with actual screen lighting of any kind, unless you count the much later GBA SP and Micro models. But it was also possible to play GBA games on your normal TV using the GameCube adapter, like the Super Game Boy allowed you to play Game Boy games on your SNES in the previous era.&lt;/p&gt;&#xA;&lt;p&gt;I've noticed that many games, even ports of old SNES games, used a very &amp;quot;bleak&amp;quot; palette/visual look. Everything looks washed out and undefined. In contrast, those SNES games nearly always had very &amp;quot;defined&amp;quot; outlines and vibrant colours.&lt;/p&gt;&#xA;&lt;p&gt;If the reason for this general &amp;quot;style&amp;quot; is that the GBA had no built-in lighting, wouldn't it be more logical to make them even &lt;em&gt;more&lt;/em&gt; contrasting and &amp;quot;defined&amp;quot;? Wouldn't these &amp;quot;pale&amp;quot; visuals just be even &lt;em&gt;more&lt;/em&gt; difficult to spot on the GBA screen?&lt;/p&gt;&#xA;&lt;p&gt;A good example is &lt;em&gt;Harvest Moon: Friends of Mineral Town&lt;/em&gt;: &lt;a href=&quot;https://youtu.be/gvxbjvIdNDg?t=4342&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/gvxbjvIdNDg?t=4342&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I also remember being shocked seeing the screenshots for &amp;quot;Golden Sun&amp;quot; in the review magazine. Even back then, I thought it looked awful, as if there had been some kind of error with the printing press or something. I couldn't believe how bright/pale it looked.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;em&gt;entire&lt;/em&gt; palette appears to be cranked up, meaning that even &amp;quot;black lines&amp;quot; often come off as light-grey or perceived &amp;quot;bleak&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I did not see the same thing done for the most part for the GBA's predecessor, Game Boy Color, which also had colour and no lighting. What caused them to start doing this for the GBA?&lt;/p&gt;&#xA;" OwnerUserId="21074" LastEditorUserId="15334" LastEditDate="2021-03-11T06:50:13.850" LastActivityDate="2021-03-11T06:50:13.850" Title="Why were Game Boy Advance games designed with such a &quot;bleak&quot; colour palette compared to stationary consoles and even other handhelds?" Tags="&lt;game-boy-advance&gt;" AnswerCount="0" CommentCount="9" FavoriteCount="1" ClosedDate="2021-03-11T16:29:00.037" ContentLicense="CC BY-SA 4.0" />
  <row Id="18267" PostTypeId="2" ParentId="18227" CreationDate="2021-03-11T02:06:39.240" Score="3" Body="&lt;p&gt;I'm working on a relay machine (not otherwise written about in much detail yet - it's still a WIP), but it doesn't even use DC voltages - everything is AC, and there are multiple voltages. Everything is in VAC RMS:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;3.0V&lt;/li&gt;&#xA;&lt;li&gt;5.0V&lt;/li&gt;&#xA;&lt;li&gt;6.0V&lt;/li&gt;&#xA;&lt;li&gt;10V&lt;/li&gt;&#xA;&lt;li&gt;12V&lt;/li&gt;&#xA;&lt;li&gt;12V inverse polarity (akin to &amp;quot;-12V&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;18V&lt;/li&gt;&#xA;&lt;li&gt;24V&lt;/li&gt;&#xA;&lt;li&gt;48V&lt;/li&gt;&#xA;&lt;li&gt;62V&lt;/li&gt;&#xA;&lt;li&gt;96V&lt;/li&gt;&#xA;&lt;li&gt;140V&lt;/li&gt;&#xA;&lt;li&gt;170V&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So, what sort of magic is all that? Not very magical, I'm afraid. There are simple reasons for this multitude:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Since the design uses thousands of relays, and they &lt;em&gt;all&lt;/em&gt; had to be purchased secondhand, I didn't have much control over the coil voltages. I had to buy what was available at the best price and fulfilled the speed and load/voltage capacity requirements. That meant &amp;lt;$0.25 per relay for the vast majority of them. I got 2.0V and 2.5V coil relays (really), and also 3V, 5V, 8V, 12V, 18V and 24V.&lt;/p&gt;&#xA;&lt;p&gt;I'm not even sure I got 24V ones since they had an obscure custom type number with no data available and no indication of coil voltage, but they work well at 24V, don't get too warm, and are quite fast - actually the fastest reed relays I got, with turn-on time when new of about 70us, and the &amp;quot;worn in&amp;quot; turn-on under 120us. They of course take about 1000us to stop bouncing on turn-off, so required some care in applying them.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;All of the relays I use, save maybe a dozen for high-current I/O switching, are physically small. Some of them are 5x5x9mm in size. The tiny contacts thus have relatively low current ratings. There are many circuits that are limited to 40mA max currents - much below the contact maximums, but larger loads take excessive cut out of the contact life. If there's a control signal that needs to drive 8 loads (coils) at 2.5V each, and the loads are all on the same card, it's preferred to have a 12V signal driving these loads in series. This will reduce the load current by 8-fold, as well as reduce the voltage drops and thus heat dissipation in the connectors and traces on the plug-in boards and in the backplane. Driving eight 12V coils in series takes a 96V signal, of course driven by a &amp;quot;bus transmitter&amp;quot; with a contact with sufficient voltage rating (including some derating).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The gas discharge tube (GDT) switches I found for &amp;quot;pennies on the dollar&amp;quot; need 140V to reliably ignite when cold, dark and with their aging/wear taken into account. The design is semiconductor-free, so the only alternative to diode matrices is GDTs. GDTs also can be coaxed to work in sequential circuits like shift registers that wear out much slower than the very fast reed relays needed otherwise would (e.g. in a UART application). I initially used neon bulbs instead of GDTs, but they had to be paralleled to support the currents I needed (10-40mA) while surviving longer than minutes, and would end up costing more than GDTs and of course taking way more space. That was specific to the particular &amp;quot;bargain basement&amp;quot; components I had access to, and isn't any sort of generic advice.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Neon bulb displays can be simplified when voltages are available to drive multiple neons in series. 170V is only for this use, but lower voltages are used as well where they fit.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;For development work I'm using a multi-channel D-class power amplifier to generate the AC voltages, since it has good current limiting - essential when desperately trying to avoid smoking a few dozen relays every time I make a mistake :) I started with transformers but fusing them for development work was too unwieldy. Eventually the power will come from taps on a couple of custom transformers - the ultimate partitioning will depend on the relative load power of various supply voltages.&lt;/p&gt;&#xA;" OwnerUserId="10800" LastActivityDate="2021-03-11T02:06:39.240" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18268" PostTypeId="2" ParentId="11473" CreationDate="2021-03-11T02:12:43.513" Score="-2" Body="&lt;p&gt;The argument you make with resorting to C expression complexity can be recast as follows:&lt;/p&gt;&#xA;&lt;p&gt;If anyone really wanted to classify the ASCII characters so fast that the machine code output from a competent compiler wasn't enough, they'd be needing an FPGA or an ASIC anyway, and at that point it's irrelevant what the code is, since the most efficient encoding of the code ranges in the FPGA fabric or gate arrays will be nothing like C and vastly more efficient in energy use per each character classified, etc.&lt;/p&gt;&#xA;&lt;p&gt;IOW: If speed matters that much, you'll be dealing with FPGA or custom silicon, and then nobody cares what it looks like in C. Both FPGAs and silicon can deal with some logic patterns that are terribly inefficient in C, like content-addressable memory, etc.&lt;/p&gt;&#xA;&lt;p&gt;And, in any case, the way most character classification is done, the contiguity wouldn't help much, since there's a large variety of character classes that are entirely application-dependent, e.g. a lexer or parser might use a character class that finds no use outside of programming language front-ends, and nobody would be arguing to sort ASCII so that lexing C or Python is &amp;quot;cheap&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;Furthermore, I'd dare say at this point there's more character classification done on Unicode code points, and most likely those of the Chinese character set / kanji, than ASCII, so there's that too.&lt;/p&gt;&#xA;" OwnerUserId="10800" LastActivityDate="2021-03-11T02:12:43.513" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18269" PostTypeId="2" ParentId="14307" CreationDate="2021-03-11T03:56:42.840" Score="1" Body="&lt;p&gt;YES, the client for Novell Client Exists.  I have a set of the original AEGIS/Oxxi client for Novell disks and manual. Used it briefly in my Amiga store, now sitting in front of me on my desk. :)&lt;/p&gt;&#xA;&lt;p&gt;I used an A2065 Ethernet Local Area Network Board and still have that manual, too, but will have search to see if I still have the 2065 card.  Pretty sure I do.  So, final answer: Yes, it exists and I have physical proof. :)&lt;/p&gt;&#xA;" OwnerUserId="21075" LastEditorUserId="21075" LastEditDate="2021-03-11T08:37:18.017" LastActivityDate="2021-03-11T08:37:18.017" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18270" PostTypeId="1" CreationDate="2021-03-11T04:25:50.757" Score="6" ViewCount="432" Body="&lt;p&gt;I have a Macintosh Plus, which as soon as I turn it on shows the floppy icon and then resets itself immediately afterwards. Note that it does so as soon as it needs to power up the floppy drive. For example, if I unplug the floppy drive connector, the Macintosh Plus will not reset. The floppy drive works correctly because it has been tested on another macintosh plus, and the logic board also works correctly, because this is also tested on another plus. The only thing I have done on the analog board is to go over the solders (especially in the junction connectors), and change the two capacitors C1 and C2. I did not recap the other capacitors.&#xA;Note that even if I turn it on without floppy and try to vary the screen size horizontally, as soon as I enlarge it a little more, it resets.&lt;/p&gt;&#xA;&lt;p&gt;I have replaced all the capacitors of the video card, I have also gone over ALL the contact tracks of all the components of the video card but without openable results. I am sure that the defect lies in the video card because (having two macintosh plus) I tried to put this card in the working one and it gives me the same problem. Unfortunately I do not have an oscilloscope available and I was wondering: it is possible to connect only the video card, without connecting it to the logic card, and from the first check the output voltages from the cable that goes to the logic card, with a normal tester and possibly check voltage drop by manipulating the trimmer of the screen adjustment? Or risk something?&lt;/p&gt;&#xA;" OwnerUserId="21026" LastEditorUserId="21026" LastEditDate="2021-03-13T07:38:14.960" LastActivityDate="2021-03-13T07:38:14.960" Title="Macintosh Plus always resets on power up" Tags="&lt;apple-macintosh&gt;&lt;repair&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18271" PostTypeId="2" ParentId="18270" CreationDate="2021-03-11T08:26:49.163" Score="7" Body="&lt;p&gt;My guess is transient undervoltages on the +12V rail.  I'm basing this on both the floppy drive (schematic top-right, G4) and the flyback circuitry (figure 2) drawing power from that rail.  If you have an oscilloscope it'd be useful to check whether the voltage on that line droops when the floppy is accessed or the horizontal screen size is changed.  Based on figures 2 and 7 the main capacitors on the +12V rail are C25 and C31 (both rated 1000µF 16V) and C2 (4700µF 16V).  The document linked below makes some additional suggestions on how to remedy this (p. 9):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;All three outputs are filtered with textbook LC “pi” networks. Adjust&#xA;the voltage trimpot so that the +12V output (as measured at the&#xA;external floppy connector) lies between 11.9V and 12.75V, and the 5V&#xA;output lies between 4.85 and 5.15V. Inability to get both the 12V and&#xA;5V outputs within spec can be caused by a failure or drift in&#xA;components, but most often is caused by simple deterioration of&#xA;connector contacts. Simply cleaning power harness contacts, or&#xA;resoldering where they connect to the circuit boards, fixes 90+% of&#xA;such problems.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;&lt;strong&gt;Figure 2 (partial):&lt;/strong&gt;&lt;/th&gt;&#xA;&lt;th&gt;&lt;strong&gt;Figure 7:&lt;/strong&gt;&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/3Xt3y.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3Xt3y.png&quot; alt=&quot;Figure 2 (partial)&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;a href=&quot;https://i.stack.imgur.com/qfxTn.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qfxTn.png&quot; alt=&quot;Figure 7&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;strong&gt;IMPORTANT SAFETY NOTE&lt;/strong&gt; &lt;br /&gt;&#xA;The Mac+ has lethal voltages present inside the case especially on the analog board (left of the CRT, IIRC) and on the CRT itself.  DO NOT probe the circuitry or attempt any repairs unless you are experienced with working with high voltage circuitry.&lt;/p&gt;&#xA;&lt;p&gt;Links:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://vintageapple.org/gamba2/images/plus_analog.PDF&quot; rel=&quot;noreferrer&quot;&gt;Detailed info on the Mac+ analog circuitry&lt;/a&gt; &lt;br /&gt;&#xA;This is the document referenced/quoted above and the source of the images.&lt;/li&gt;&#xA;&lt;li&gt;Mac+ schematic (digital portion, poor quality scans):&lt;br /&gt;&#xA;&lt;a href=&quot;https://museo.freaknet.org/gallery/apple/stuff/mac/andreas.kann/MacPlus3.GIF&quot; rel=&quot;noreferrer&quot;&gt;Top-left&lt;/a&gt; &lt;br /&gt;&#xA;&lt;a href=&quot;https://museo.freaknet.org/gallery/apple/stuff/mac/andreas.kann/MacPlus4.GIF&quot; rel=&quot;noreferrer&quot;&gt;Top-right&lt;/a&gt; &lt;br /&gt;&#xA;&lt;a href=&quot;https://museo.freaknet.org/gallery/apple/stuff/mac/andreas.kann/MacPlus1.GIF&quot; rel=&quot;noreferrer&quot;&gt;Bottom-left&lt;/a&gt; &lt;br /&gt;&#xA;&lt;a href=&quot;https://museo.freaknet.org/gallery/apple/stuff/mac/andreas.kann/MacPlus2.GIF&quot; rel=&quot;noreferrer&quot;&gt;Bottom-right&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2021-03-11T08:52:28.973" LastActivityDate="2021-03-11T08:52:28.973" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18272" PostTypeId="1" CreationDate="2021-03-11T09:59:55.407" Score="30" ViewCount="2503" Body="&lt;p&gt;MS-DOS versions 5 and 6 come bundled with the QBasic interpreter and a handful of example programs written in that BASIC dialect. One of the programs is Nibbles, a variant of the well-known Snake game.&lt;/p&gt;&#xA;&lt;p&gt;However, whenever I attempt to start it up on a relatively modern machine or an emulator, it inevitably stops with a ‘division by zero’ error at the end of this fragment:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    startTime# = TIMER                          ' Calculate speed of system&#xA;    FOR i# = 1 TO 1000: NEXT i#                 ' and do some compensation&#xA;    stopTime# = TIMER&#xA;    speed = speed * .5 / (stopTime# - startTime#)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Why does this happen? What is the best way to fix it?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-03-12T11:30:14.040" LastActivityDate="2021-03-13T10:03:29.147" Title="How can I play QBasic Nibbles on a modern machine?" Tags="&lt;ms-dos&gt;&lt;basic&gt;&lt;gaming&gt;&lt;bugs&gt;&lt;delay-loop&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18273" PostTypeId="2" ParentId="18272" CreationDate="2021-03-11T09:59:55.407" Score="39" Body="&lt;p&gt;The problem is simple. At initialisation, Nibbles measures the time it takes to perform 1000 empty iterations of a &lt;code&gt;FOR&lt;/code&gt; loop with a &lt;code&gt;DOUBLE&lt;/code&gt; counter in order to determine how many such iterations are required to produce a ½ ms delay. Back when this code was written, CPUs were pretty slow (and FPUs even more so, if they were available at all), so it was reasonable to expect this loop would produce a non-negligible delay. On a modern machine, the time to complete the loop is so small that it cannot actually be measured by the built-in &lt;code&gt;TIMER&lt;/code&gt; function, and to the program it appears as if it finished instantly.&lt;/p&gt;&#xA;&lt;p&gt;You can of course address it by multiplying the number of iterations (and the factor in the formula) by 20 or so, but that would just be kicking the can down the alley that would require fixing again when moving to even faster systems. My preferred solution is to replace the delay mechanism with an invocation of &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/bios/1586.html&quot; rel=&quot;noreferrer&quot;&gt;interrupt 0x15 function 0x86&lt;/a&gt;, provided by the BIOS. QBasic doesn’t provide an inline assembler or any facility to link in external code, but it does provide a way to call raw machine code via &lt;code&gt;CALL ABSOLUTE&lt;/code&gt;, which is what I am going to use.&lt;/p&gt;&#xA;&lt;p&gt;Here are the modifications required in the form of a unified diff:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;--- nibbles.bas&#xA;+++ nibbles.bas&#xA;@@ -69,6 +69,7 @@&#xA; DECLARE SUB Level (WhatToDO, sammy() AS snaketype)&#xA; DECLARE SUB InitColors ()&#xA; DECLARE SUB EraseSnake (snake() AS ANY, snakeBod() AS ANY, snakeNum%)&#xA;+DECLARE SUB Delay (speed)&#xA; DECLARE FUNCTION StillWantsToPlay ()&#xA; DECLARE FUNCTION PointIsThere (row, col, backColor)&#xA; &#xA;@@ -83,8 +84,10 @@&#xA; 'Global Variables&#xA; DIM SHARED arena(1 TO 50, 1 TO 80) AS arenaType&#xA; DIM SHARED curLevel, colorTable(10)&#xA;+DIM SHARED DelayProc(10)&#xA; &#xA;     RANDOMIZE TIMER&#xA;+    GOSUB InitDelayProc&#xA;     GOSUB ClearKeyLocks&#xA;     Intro&#xA;     GetInputs NumPlayers, speed, diff$, monitor$&#xA;@@ -113,6 +116,27 @@&#xA;     DEF SEG&#xA;     RETURN&#xA; &#xA;+InitDelayProc:&#xA;+    DEF SEG = VARSEG(DelayProc)&#xA;+    RESTORE DelayProcData&#xA;+    FOR a = 0 TO 16&#xA;+        READ b%&#xA;+        POKE VARPTR(DelayProc(0)) + a, b%&#xA;+    NEXT a&#xA;+    DEF SEG&#xA;+    RETURN&#xA;+&#xA;+DelayProcData:&#xA;+    DATA &amp;amp;h55&#xA;+    DATA &amp;amp;h89, &amp;amp;hE5&#xA;+    DATA &amp;amp;h8B, &amp;amp;h5E, &amp;amp;h06&#xA;+    DATA &amp;amp;h8B, &amp;amp;h17&#xA;+    DATA &amp;amp;h8B, &amp;amp;h4F, &amp;amp;h02&#xA;+    DATA &amp;amp;hB4, &amp;amp;h86&#xA;+    DATA &amp;amp;hCD, &amp;amp;h15&#xA;+    DATA &amp;amp;h5D&#xA;+    DATA &amp;amp;hCB&#xA;+&#xA; SetColors:&#xA;     IF monitor$ = &amp;quot;M&amp;quot; THEN&#xA;         RESTORE mono&#xA;@@ -137,6 +161,13 @@&#xA;     PRINT text$;&#xA; END SUB&#xA; &#xA;+SUB Delay (speed)&#xA;+    DEF SEG = VARSEG(DelayProc)&#xA;+    t&amp;amp; = speed * 500&amp;amp;&#xA;+    CALL ABSOLUTE(t&amp;amp;, VARPTR(DelayProc(0)))&#xA;+    DEF SEG&#xA;+END SUB&#xA;+&#xA; 'DrawScreen:&#xA; '  Draws playing field&#xA; SUB DrawScreen&#xA;@@ -190,7 +221,6 @@&#xA;     LOCATE 9, 22: PRINT &amp;quot;1   = Novice&amp;quot;&#xA;     LOCATE 10, 22: PRINT &amp;quot;90  = Expert&amp;quot;&#xA;     LOCATE 11, 22: PRINT &amp;quot;100 = Twiddle Fingers&amp;quot;&#xA;-    LOCATE 12, 15: PRINT &amp;quot;(Computer speed may affect your skill level)&amp;quot;&#xA;     DO&#xA;         LOCATE 8, 44: PRINT SPACE$(35);&#xA;         LOCATE 8, 43&#xA;@@ -214,11 +244,6 @@&#xA;         monitor$ = UCASE$(monitor$)&#xA;     LOOP UNTIL monitor$ = &amp;quot;M&amp;quot; OR monitor$ = &amp;quot;C&amp;quot;&#xA; &#xA;-    startTime# = TIMER                          ' Calculate speed of system&#xA;-    FOR i# = 1 TO 1000: NEXT i#                 ' and do some compensation&#xA;-    stopTime# = TIMER&#xA;-    speed = speed * .5 / (stopTime# - startTime#)&#xA;-&#xA; END SUB&#xA; &#xA; 'InitColors:&#xA;@@ -463,7 +488,7 @@&#xA;             END IF&#xA; &#xA;             'Delay game&#xA;-            FOR a# = 1 TO curSpeed:  NEXT a#&#xA;+            Delay (curSpeed)&#xA; &#xA;             'Get keyboard input &amp;amp; Change direction accordingly&#xA;             kbd$ = INKEY$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What the above does is replace the delay busy-loop with a short machine code routine is stored in the &lt;code&gt;DelayProcData&lt;/code&gt; section. Here it is in assembly form (NASM syntax):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        push    bp             ; DATA &amp;amp;h55&#xA;        mov     bp, sp         ; DATA &amp;amp;h89, &amp;amp;hE5&#xA;        mov     bx, [bp+0x6]   ; DATA &amp;amp;h8B, &amp;amp;h5E, &amp;amp;h06&#xA;        mov     dx, [bx]       ; DATA &amp;amp;h8B, &amp;amp;h17&#xA;        mov     cx, [bx+0x2]   ; DATA &amp;amp;h8B, &amp;amp;h4F, &amp;amp;h02&#xA;        mov     ah, 0x86       ; DATA &amp;amp;hB4, &amp;amp;h86&#xA;        int     0x15           ; DATA &amp;amp;hCD, &amp;amp;h15&#xA;        pop     bp             ; DATA &amp;amp;h5D&#xA;        retf                   ; DATA &amp;amp;hCB&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The BIOS call appeared in the PC/AT, so it should definitely be available on machines recent enough to trigger problems with the delay calibration loop. Plus, using a dedicated call instead of a busy-loop can help free up CPU time, avoid needlessly heating up the processor and thus decrease power consumption both by the CPU itself and by the cooling fan.&lt;/p&gt;&#xA;&lt;p&gt;The fix alters one game mechanic slightly: if you answer ‘Y’ at the ‘Increase game speed during play?’ prompt, the game will decrease &lt;code&gt;curSpeed&lt;/code&gt; variable by 10 at the end of each level. Without the patch, this variable is simply the number of iterations performed by the delay loop and thus the game speed increase will depend on the overall speed of the system (the slower the system, the more noticeable the speed-up). With the patch, &lt;code&gt;curSpeed&lt;/code&gt; holds the actual delay in ½-ms units, which means a delay decrease will be always 5 ms per level, irrespective of the system speed. I don’t know how this compares to machines contemporaneous to the game’s creation.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastActivityDate="2021-03-11T09:59:55.407" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18274" PostTypeId="2" ParentId="18272" CreationDate="2021-03-11T14:11:50.603" Score="36" Body="&lt;p&gt;DOSBox, with the default CPU speed of 3000 cycles on this Linux box, runs &lt;a href=&quot;https://hwiegman.home.xs4all.nl/downloads/nibbles.bas&quot; rel=&quot;noreferrer&quot;&gt;nibbles.bas&lt;/a&gt; without problems.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2021-03-11T14:11:50.603" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18275" PostTypeId="2" ParentId="18239" CreationDate="2021-03-11T17:23:41.253" Score="4" Body="&lt;p&gt;It definitely wasn’t Windows 95 itself.&lt;/p&gt;&#xA;&lt;p&gt;In fact, the usual Windows 95 installer doesn’t even offer to format or partition the hard disk unless it determines that it cannot continue otherwise, so it definitely could not have happened during an upgrade. This is how a format prompt looks:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wLQUt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wLQUt.png&quot; alt=&quot;Microsoft Windows 95 Setup: Windows files cannot be installed on your hard disk because the format of drive C is incompatible with Windows 95. You can have Setup reformat drive C for you, or you can quit Setup now and reformat drive C yourself.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;To get this screen at all, you need to start the installer from &lt;code&gt;OEMSETUP.EXE&lt;/code&gt;, and not &lt;code&gt;SETUP.EXE&lt;/code&gt; as was typical; but if partitions are already set up on the hard disk, the former leads straight to the latter anyway. There’s no countdown, and it runs in text mode with no mouse input at all, so no buttons moving away from the mouse pointer either.&lt;/p&gt;&#xA;&lt;p&gt;As for what the asker &lt;em&gt;actually&lt;/em&gt; remembered seeing, I have no idea. I vaguely recall seeing a prank like this at some point, though in my memory it was running on an already-installed 9x system.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastActivityDate="2021-03-11T17:23:41.253" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18277" PostTypeId="1" CreationDate="2021-03-12T01:20:20.593" Score="10" ViewCount="312" Body="&lt;p&gt;I seem to remember using an assembler with the following interesting workflow:  You'd write an assembly language file and assemble it.  The output &lt;em&gt;overwrote&lt;/em&gt; your source code by placing the executable code after the source code.  You could &lt;em&gt;run&lt;/em&gt; it as any other program.  Then you'd load your program into an editor - you'd see your source code at the top and following your &lt;code&gt;END&lt;/code&gt; statement there'd be arbitrary binary gibberish.  You edit your assembly source, reassemble, and again: your single file would be replaced with a new file that had your assembly source at the front and the assembled binary at the end.&lt;/p&gt;&#xA;&lt;p&gt;(Obviously there must have been a few bytes of binary gibberish at the front of the file too, after assembly, but I can't say I remember that.)&lt;/p&gt;&#xA;&lt;p&gt;Can't remember if it was CP/M or DOS.  Or 8080 or what. (I put both &lt;code&gt;cp-m&lt;/code&gt; and &lt;code&gt;dos&lt;/code&gt; tags on this Q.)&lt;/p&gt;&#xA;&lt;p&gt;Ring a bell?&lt;/p&gt;&#xA;" OwnerUserId="332" LastEditorUserId="15334" LastEditDate="2021-03-21T15:14:53.623" LastActivityDate="2021-03-21T15:14:53.623" Title="Assembler where output file was executable WHILE including the source code" Tags="&lt;assembly&gt;&lt;cp-m&gt;&lt;identify-this-software&gt;&lt;dos&gt;" AnswerCount="0" CommentCount="20" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18278" PostTypeId="2" ParentId="18248" CreationDate="2021-03-12T02:09:32.160" Score="2" Body="&lt;p&gt;If you're willing to stretch the question a bit to include 486 processors (technically a processor &amp;quot;based upon&amp;quot; the 486), then yes.&lt;/p&gt;&#xA;&lt;p&gt;Such CPUs are embedded within modern Intel chipsets as the &lt;code&gt;CSME&lt;/code&gt; (Converged Security and Management Engine), &lt;code&gt;PCH&lt;/code&gt; (Platform Controller Hub), and &lt;code&gt;IE&lt;/code&gt; (Innovation Engine).&lt;/p&gt;&#xA;&lt;p&gt;Sources: &lt;a href=&quot;https://i.blackhat.com/USA-19/Wednesday/us-19-Hasarfaty-Behind-The-Scenes-Of-Intel-Security-And-Manageability-Engine.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;blackhat slides&lt;/a&gt; (a few pages in) and &lt;a href=&quot;https://youtu.be/iffTJ1vPCSo?t=221&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ron Minnich's talk 'Replace Your Exploit-Ridden Firmware with Linux'&lt;/a&gt; (relevant bit starting at 3m41s)&lt;/p&gt;&#xA;" OwnerUserId="21087" LastActivityDate="2021-03-12T02:09:32.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18279" PostTypeId="1" AcceptedAnswerId="18282" CreationDate="2021-03-12T10:09:12.157" Score="6" ViewCount="331" Body="&lt;p&gt;A recent vice.com article explains &lt;a href=&quot;https://www.vice.com/en/article/dy8by7/why-channel-37-doesnt-exist-and-what-it-has-to-do-with-aliens?utm_source=pocket-newtab&quot; rel=&quot;noreferrer&quot;&gt;why UHF channel 37 was never allocated to TV channels in the US&lt;/a&gt;, which reminded me that most (all?) home computers with UHF TV outputs used channel 36[*], along with VCRs (although most of those supported changing the channel, usually in the range 30-40, but I don't recall any home computers having this option). Is it coincidental that this was an adjacent channel to the empty one? How was this allocation determined?&lt;/p&gt;&#xA;&lt;p&gt;[1] - at least nominally; I remember at least one machine I had used an oscillator with poor enough calibration that the signal appeared on channel 37 instead, but I'm pretty sure this was unintentional and the signal should have been on 36.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastEditorUserId="15334" LastEditDate="2021-03-12T11:19:58.773" LastActivityDate="2021-03-13T15:46:55.853" Title="How were UHF channels allocated to home computers?" Tags="&lt;television&gt;&lt;home-computers&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18280" PostTypeId="2" ParentId="18248" CreationDate="2021-03-12T10:11:49.313" Score="0" Body="&lt;p&gt;Not really.&lt;/p&gt;&#xA;&lt;p&gt;And there's a good reason other than circuit size relative to IO pad size. Old architectures are simply horrible to work with from a software point of view. You would only do this in case it's a better alternative to updating the software for newer architectures. And that &lt;em&gt;will&lt;/em&gt; happen at some point. You're just borrowing time without clearing the technical debt.&lt;/p&gt;&#xA;&lt;p&gt;A modern cheap ARM-based micro-controller is roughly comparable to a fast 90s PC in performance. But it is far easier to develop low level software for the ARM architecture than some old 386 abomination, let alone anything older.&lt;/p&gt;&#xA;" OwnerUserId="21088" LastActivityDate="2021-03-12T10:11:49.313" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18281" PostTypeId="2" ParentId="18279" CreationDate="2021-03-12T13:14:41.400" Score="2" Body="&lt;p&gt;Europe:&lt;/p&gt;&#xA;&lt;p&gt;UHF Channel 36 was reserved for aerospace navigation until the 1980s (at least in Europe), thus was used for both VCRs and home computers. (The manufacturers could be sure their device wouldn't overlap with any existing programs the user might want to receive).&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="7946" LastEditDate="2021-03-13T15:46:55.853" LastActivityDate="2021-03-13T15:46:55.853" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18282" PostTypeId="2" ParentId="18279" CreationDate="2021-03-12T16:17:18.657" Score="5" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;Channel 36, within Europe's (and most of the world's) 8MHz spacing) is positioned at 591.25 MHz (video carrier) which is the same frequency as channel 34 in the US with its 6 Mhz spacing (*1). Thus the same modulator (circuit/unit) can be used in European and US devices, simplifying production - and making it a cheap part to buy for a product needing TV output in the mid 1980s.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail:&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How were UHF channels allocated to home computers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not at all, as it was a decision made by manufacturers, not done by any government/international agency.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;most (all?) home computers with UHF TV outputs used channel 36,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really, it only started in the early '80s, most notably with British machines.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;along with VCRs&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which resulted in extreme high volume production, making channel 36 modulators dirt cheap.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is it coincidental that this was an adjacent channel to the empty one?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;True, as that's only true for the numerically close US channel. Which only happened by accident due to the way they are numbered (see below).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How was this allocation determined?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By looking at frequency assignment tables for countries all around the word.&lt;/p&gt;&#xA;&lt;h2&gt;Some Fine Print&lt;/h2&gt;&#xA;&lt;p&gt;Since US (and thus most of the Americas) and Europe (most of the remaining planet) both start their UHF assignments at 471.25 MHz (*2) meaning that each third European channel is at the same frequency as each fourth US channel. In addition, Europe called the first channel 21, while the US started its numbering with 14. As a result the following channel 'pairs' would have been available:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  Channel&#xA;Europe/US  Frequency&#xA;    21/14  471.25 Band IV&#xA;    24/18  495.25&#xA;    27/22  519.25&#xA;    30/26  543.25&#xA;    33/30  567.25&#xA;--------------------&#xA;--&amp;gt; 36/34  591.25 BAND V&#xA;    39/38  615.25&#xA;    42/42  639.25 + Australia 44&#xA;    ...&#xA;    66/74  831.28&#xA;    69/78  855.25&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So any of these would have worked fine all around the world. Further, in 1961 UHF for  broadcast was defined in two 'Bands': Band IV up to 582 MHz and Band V over 582 MHz. So 591.25 is&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the first common carrier frequency for Europe and the US,&lt;/li&gt;&#xA;&lt;li&gt;in both schemes the second Band V channel,&lt;/li&gt;&#xA;&lt;li&gt;the last channel below 600 MHz&lt;/li&gt;&#xA;&lt;li&gt;far from early assigned channels in all countries as assignment started low.&lt;/li&gt;&#xA;&lt;li&gt;likely tunable by all UHF capable TV sets, even older ones made for Band IV only.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So 591.25 is simply a sweet spot, screaming to be selected.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;On a side note:&lt;/p&gt;&#xA;&lt;p&gt;The Aussies got left out again. Their spacing not only starts at 520,25 MHz, but uses a 7 MHz spacing, and starts numbering at 27, making their channel 28 the same as Europe's 28. So while a 3:4 relation resolves to a high repetition rate, a 6:7:8 relation gives only a single channel in all of assigned UHF common to all three systems:&lt;/p&gt;&#xA;&lt;p&gt;639.25 MHz Aus 44 - US 42 - Europe 42 (*3)&lt;/p&gt;&#xA;&lt;p&gt;Quite handy, except far into Band V, above 600 MHz and outside older TV. Then again, 591.25 is 'only' off by one MHz from Australian channel 37 at 590.25, so even their TVs should be able to fine tune.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;On a related &lt;a href=&quot;/q/18279#comment62795_18279&quot;&gt;comment by Kaz&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Wouldn't you still need a different modulator unit, given the different TV standards (NTSC/PAL)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, Modulators are about putting a signal on a carrier, they are not part of a TV signal generation, which happens before, but part of signal transmission. A modulator takes a signal and modulates it on top of whatever frequency it is set for. It doesn't care about that signal structure, as long as it's within a given spectrum (and anything outside will only add artefacts). So a modulator capable of putting an 8 MHz signal onto an UHF channel, will work fine for any TV standard that doesn't exceed 8 MHz baseband.&lt;/p&gt;&#xA;&lt;p&gt;Of course there might be some naming confusion when it comes to home computers. The term modulator describes only a unit with above function, but there were boxes for some home computers that did more than lifting a TV signal to transmission frequency. For example when the signal was delivered as components (Colour, Intensity and Sound), then it had first to mix and move each component into a standard-conforming baseband TV signal first before modulating it onto a channel.&lt;/p&gt;&#xA;&lt;p&gt;These devices include more components than just the modulator - even though post companies/users simply called it that.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - And channel 33 in Japan, as they used the same spectrum and width as the US, but started their UHF numbering with 13.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Video Carrier Frequency. The channels start at 470, but it's more useful to compare the carrier as that's the one modulators and demodulators have to be tuned for.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Sure, we know it's the Answer, still, it looks suspicious, as it's also the only channel where number and frequency is the same in both systems. As if it was on purpose - no, I do not know any further information, I'm just caught by the numbers.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-03-13T15:37:22.053" LastActivityDate="2021-03-13T15:37:22.053" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18283" PostTypeId="1" CreationDate="2021-03-13T05:38:54.340" Score="1" ViewCount="92" Body="&lt;p&gt;I have created a database table of PAL games that I once owned for these platforms: Amiga, Game Boy, Game Boy Advance, Game Boy Color, Game Gear, Mega Drive, Master System, Nintendo 64, Nintendo Entertainment System, Super Nintendo Entertainment System, Atari XE Video Game System, Saturn, PlayStation, Atari Jaguar, PC (MS-DOS), PC (Windows), PlayStation 2, Nintendo Wii, Nintendo DS, GameCube, PlayStation Portable, Xbox and Nintendo Wii U.&lt;/p&gt;&#xA;&lt;p&gt;Over a number of months, I've extensively attempted to find one or more high-quality website/archive for consistent box art scans from the PAL region. My conclusions are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;There are &lt;em&gt;tons&lt;/em&gt; of box art scan projects/websites and by now, I probably know of all of the ones that can be found with search engines.&lt;/li&gt;&#xA;&lt;li&gt;All are very incomplete, and very NTSC-focused. When PAL scans exist, they are frequently in German instead of English (or another European language). With few exceptions, I never had any German-language PAL boxes.&lt;/li&gt;&#xA;&lt;li&gt;The Github project(s) trying to standardize box art images are extremely low-resolution (and NTSC only). I'm trying to obtain high-resolution scans only.&lt;/li&gt;&#xA;&lt;li&gt;A few of them make &amp;quot;artistic interpretations&amp;quot; of the box scans, for example including elements from the whole package into one single image. I'm only looking for the original front covers.&lt;/li&gt;&#xA;&lt;li&gt;Using DuckDuckGo Image Search, with a query such as &amp;quot;Donkey Kong SNES PAL box art&amp;quot;, size set to &amp;quot;wallpaper only&amp;quot;, I am &lt;em&gt;sometimes&lt;/em&gt; able to manually pick out a decent image for certain games. However, this is &lt;em&gt;far&lt;/em&gt; from guaranteed, and the sizes/scan qualities vary, so there is no consistency, forcing me to do a lot of unnecessary work besides the whole process of picking these out in the first place.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Since I don't actually have the boxes anymore, since I'm an idiot who either sold or even &lt;em&gt;threw them away&lt;/em&gt; long ago, I cannot fire up the old scanner and simply scan them all myself.&lt;/p&gt;&#xA;&lt;p&gt;Is this simply a hopeless task? Should I just give up and conclude that this is not going to happen until some distant point in the future when these games have turned into actual antiques and somebody puts in the work professionally?&lt;/p&gt;&#xA;" OwnerUserId="21094" LastEditorUserId="15334" LastEditDate="2021-03-13T07:09:35.450" LastActivityDate="2021-03-13T07:09:35.450" Title="Does a source exist for high-resolution PAL (not NTSC) video game cover scans?" Tags="&lt;gaming&gt;&lt;game-cartridge&gt;&lt;data-preservation&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2021-03-14T10:09:21.597" ContentLicense="CC BY-SA 4.0" />
  <row Id="18284" PostTypeId="2" ParentId="18272" CreationDate="2021-03-13T10:03:29.147" Score="1" Body="&lt;p&gt;On the modern CPU the FOR loop executes so quickly that the difference in the TIMER before and after is zero. Hence the line:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;speed = speed * .5 / (stopTime# - startTime#)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;gives a divide by zero error, because (stopTime# - startTime#) equals zero.&lt;/p&gt;&#xA;&lt;p&gt;The simplest solution would simply be to set the speed variable manually, until you find something that gives a playable game. I mean, it only has to work on your computer anyway.&lt;/p&gt;&#xA;&lt;p&gt;According to the formula, the faster the computer, the higher the speed number, which I assume then slows the game down somewhere.&lt;/p&gt;&#xA;&lt;p&gt;So start with:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;speed = 1000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or something, and if the game is too fast, increase it, if too slow decrease it.&lt;/p&gt;&#xA;" OwnerUserId="20882" LastActivityDate="2021-03-13T10:03:29.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18285" PostTypeId="1" AcceptedAnswerId="18287" CreationDate="2021-03-13T13:04:51.067" Score="5" ViewCount="363" Body="&lt;p&gt;According to &lt;a href=&quot;https://youtu.be/mxRIB-zJpwQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt; the BBC Micro's power supply provided a 5 Volt supply to the motherboard.&lt;/p&gt;&#xA;&lt;p&gt;Could a BBC Micro have it's internal power supply replaced with a USB power connector?&lt;/p&gt;&#xA;" OwnerUserId="15203" LastEditorUserId="6659" LastEditDate="2021-03-16T13:17:49.753" LastActivityDate="2021-03-17T21:57:18.330" Title="Could a BBC Micro power supply be replaced with USB power?" Tags="&lt;power&gt;&lt;bbc-micro&gt;&lt;usb&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18286" PostTypeId="1" AcceptedAnswerId="18288" CreationDate="2021-03-13T15:24:02.293" Score="5" ViewCount="208" Body="&lt;p&gt;Although simple, the PAL encoder in Oric-1 was fully digital.&lt;/p&gt;&#xA;&lt;p&gt;In fact, a 8.8672375 MHz  oscillator (which is 2 times the color carrier frequency in PAL = 2 × 4.43361875 MHz )  along with R,G,B and the Sync signals generated by ULA control the address of the PROM (a 256x4 ) applied to a resistor network making a simple DAC. This signal is then applied to the RF modulator:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ycGbd.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ycGbd.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I know that since RGB and Sync are applied to another output port on Oric-1, a SCART(Péritel) could be used in France but since not all TVs were equipped with a SCART this could have limited its market in France.&lt;/p&gt;&#xA;&lt;p&gt;Since SECAM uses a frequency modulation to code colors, a SECAM digital encoder was impossible to make at the time.&lt;/p&gt;&#xA;&lt;p&gt;Was there any other options (like integrated analog encoder) for SECAM on some Oric-1 intended for France?&lt;/p&gt;&#xA;" OwnerUserId="18338" LastEditorUserId="18338" LastEditDate="2021-03-13T15:36:27.170" LastActivityDate="2021-03-14T10:01:27.203" Title="Oric-1 has a digital PAL encoder. Was there any other options for SECAM?" Tags="&lt;pal&gt;&lt;secam&gt;&lt;oric&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18287" PostTypeId="2" ParentId="18285" CreationDate="2021-03-13T15:44:02.447" Score="8" Body="&lt;p&gt;&lt;strong&gt;No, or at least not without consideration.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;According to the sticker atop the PSU it delivers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3.75 Ampere at +5 Volt,&lt;/li&gt;&#xA;&lt;li&gt;0.1 Ampere at -5 Volt and&lt;/li&gt;&#xA;&lt;li&gt;1.25 Ampere at +12 Volt&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;A quick check of the BBC Model B (*2) reveals that&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;+12 Volt are not used, while&lt;/li&gt;&#xA;&lt;li&gt;-5 Volt is only used with the cassette interface for reading&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So if you do not intend to read cassette tapes, a single +5 V PSU will do it. The stated 3.75 A is for the whole system, including expansions (tube, etc.). A rough guess would place the motherboard at somewhere between 2 and 2.5 A.&lt;/p&gt;&#xA;&lt;p&gt;Basic USB is defined as 5 V and 0.5 A. USB 3.0 lifted that to 0.9 A and allows 'charging' ports of up to 1.5 A (see &lt;a href=&quot;//superuser.com/a/690077&quot;&gt;this answer&lt;/a&gt; on Superuser). The connector itself is specified for up to 5 A.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;As a result almost all USB ports will be unable to power a BBC&lt;/strong&gt; (*2).&lt;/p&gt;&#xA;&lt;p&gt;For USB wall warts the situation is a bit different, as there are some that can deliver higher currents. I happened to find several 2 and 2.5 A ones with a quick Google search. When looking for one, it is helpful to check for power (in Watts) as well, as some are described that way. Since Voltage is fixed at 5V, 10 W would mean 2 A, 12.5 W ⇒ 2.5 A, and so on. If the PSU has multiple ports, it must be checked whether that rating is per port or total.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;External USB power adaptors may do the trick if rated at or above 2.5 A or 12.5 W.&lt;/strong&gt; (*3)&lt;/p&gt;&#xA;&lt;p&gt;In addition it might be a good idea to check any cheap USB PSU for leftover noise before using it, as &lt;a href=&quot;/a/18287#comment62883_18287&quot;&gt;DmytroL mentions&lt;/a&gt;. While most deliver a rather good signal, it's still possible to save on components used for noise reduction. Except the savings are so small that they are impossible to be seen by looking at the (final) sales price, so buying an expensive one will not guarantee a great supply – only good sales profits. :(&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Now, if you want to use the cassette port, then generating the -5V from +5V isn't as hard as it might sound. Some &lt;a href=&quot;https://www.ti.com/lit/ds/symlink/tl7660.pdf?ts=1615646733817&quot; rel=&quot;nofollow noreferrer&quot;&gt;7660&lt;/a&gt; based voltage inverter will do the trick of delivering -5 V (*4). There are plenty ready-to-use boards on Ebay, Alibaba and most part dealer websites. They are as small as 2 by 3 cm and all deliver at least the 100 mA.&lt;/p&gt;&#xA;&lt;p&gt;Easy to hide inside the BBC, so a single USB plug is possible.&lt;/p&gt;&#xA;&lt;p&gt;If you're going to that length, it's maybe a good idea to add some noise filtering as well. While it may mean making your own (little) board, it will not add much in size or cost, and guarantee long enjoyable usage.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Time to get pliers and a soldering iron out, isn't it?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Don't have any other at hand.&lt;/p&gt;&#xA;&lt;p&gt;*2 - 1.5 A may in fact get it to work, as the base unit is rather low power, but I wouldn't bet on it.&lt;/p&gt;&#xA;&lt;p&gt;*3 - More is better, especially if there are some changes and/or add-ons.&lt;/p&gt;&#xA;&lt;p&gt;*4 - More exactly some 4.8 to 4.9 Volt, but that's still within acceptable range for the cassette interface.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-17T21:57:18.330" LastActivityDate="2021-03-17T21:57:18.330" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18288" PostTypeId="2" ParentId="18286" CreationDate="2021-03-13T17:32:39.317" Score="8" Body="&lt;p&gt;According to &lt;a href=&quot;https://www.cpcwiki.eu/index.php/Oric_1/Atmos&quot; rel=&quot;nofollow noreferrer&quot;&gt;CPCwiki&lt;/a&gt; Oric-1 had something that made it unnecessary to have a SECAM UHF signal. It was (one of few) computers in that price range that had RGB out connector. This made it possible to connect the computer to a TV set through a SCART connector. This connector was widely used in France, although requiring an external power source (remanufactured cables can use/re-route main power source, which saves the need for an extra transformer).&lt;/p&gt;&#xA;" OwnerUserId="10565" LastEditorUserId="3316" LastEditDate="2021-03-14T10:01:27.203" LastActivityDate="2021-03-14T10:01:27.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18289" PostTypeId="2" ParentId="18259" CreationDate="2021-03-13T19:42:56.030" Score="14" Body="&lt;p&gt;HTML colours came from X11, being slightly altered first.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/X11_color_names&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/X11_color_names&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The #RGB and #RRGGBB syntax used by WWW was previously present in X11 too.&lt;/p&gt;&#xA;&lt;p&gt;This 1988 &lt;a href=&quot;https://cgit.freedesktop.org/%7Ealanc/xc-historical/commit/xc/doc/man/general/X.man?id=58790799c9ce9f7824ea8a2603f67b12c6e28396&quot; rel=&quot;noreferrer&quot;&gt;commit tp the X(7) man page&lt;/a&gt; describes it (see the section &amp;quot;color names&amp;quot;)&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;xsetroot&lt;/code&gt; ( historical version ) calls &lt;code&gt;XParseColor()&lt;/code&gt;, and while the current man page for &lt;code&gt;XParseColor()&lt;/code&gt; lists #RRGGBB as an allowed format, I was unable to find the corresponding man page on the Xorg site, though the content seems similar to the X(7) page above.&lt;/p&gt;&#xA;&lt;p&gt;Interestingly, the current man page for &lt;code&gt;XParseColor&lt;/code&gt; says that #RGB is scaled to #R0G0B0 rather than #RRGGBB, so #FFF is the same as #F0F0F0 under X11 rather than #FFFFFF (like it is for WWW). This is another departure from X11.&lt;/p&gt;&#xA;" OwnerUserId="520" LastEditorUserId="7946" LastEditDate="2021-03-17T17:48:41.520" LastActivityDate="2021-03-17T17:48:41.520" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18290" PostTypeId="1" CreationDate="2021-03-14T00:34:51.857" Score="16" ViewCount="1536" Body="&lt;p&gt;On the Commodore 128, the built-in BASIC saves programs tokenized.  How can I save (and then later load) the programs as ASCII instead?&lt;/p&gt;&#xA;&lt;p&gt;For example, like the &amp;quot;,A&amp;quot; option in GW-BASIC or the LIST/ENTER commands offered by Atari BASIC.&lt;/p&gt;&#xA;" OwnerUserId="481" LastActivityDate="2021-03-15T08:25:49.407" Title="How do I save Commodore BASIC programs in ASCII?" Tags="&lt;basic&gt;&lt;commodore-128&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18291" PostTypeId="2" ParentId="18290" CreationDate="2021-03-14T01:48:53.137" Score="19" Body="&lt;p&gt;&lt;em&gt;(This answer is about using the built-in methods on real hardware. If it's about conversion of emulator files, then &lt;a href=&quot;/a/18302/6659&quot;&gt;Brian's solution&lt;/a&gt; may be more suitable.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;Saving a program as text onto a disk file (real or emulated) is essentially listing it, but redirecting output to a file - much like when printing it (on a real printer):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;OPEN 1, 8, 2, &amp;quot;0:filename, S, W&amp;quot; : CMD 1 : LIST&#xA;PRINT#1 : CLOSE 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This should work for &lt;em&gt;all&lt;/em&gt; Commodore machines (*1).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;OPEN 1, 8, 2, &amp;quot;0:filename, S, W&amp;quot;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.c64-wiki.com/wiki/OPEN&quot; rel=&quot;noreferrer&quot;&gt;OPENs&lt;/a&gt; a file, using handle &lt;code&gt;1&lt;/code&gt;, on device &lt;code&gt;8&lt;/code&gt; (first drive on a C64/128), for writing (&lt;code&gt;2&lt;/code&gt;). The file is to be located on drive &lt;code&gt;0:&lt;/code&gt; (can be omitted on regular 1541 drives) and named &lt;code&gt;filename&lt;/code&gt;. It is to be handled as &lt;code&gt;S&lt;/code&gt;equential file (records ending with CR) and &lt;code&gt;W&lt;/code&gt;ritten, i.e. it's written from start and overwritten if already existing.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CMD 1&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.c64-wiki.com/wiki/CMD&quot; rel=&quot;noreferrer&quot;&gt;CMD&lt;/a&gt; (Change Main Device) redirects all following output to the handle given. Here, that's the file we just opened.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;LIST&lt;/p&gt;&#xA;&lt;p&gt;Well, &lt;a href=&quot;https://www.c64-wiki.com/wiki/LIST&quot; rel=&quot;noreferrer&quot;&gt;LISTs&lt;/a&gt; your program&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;em&gt;(At this point I always use a second line, if I don't do each separately anyway. I really don't remember why. Maybe some C= buff knows?)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;PRINT#1&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.c64-wiki.com/wiki/PRINT(hash)&quot; rel=&quot;noreferrer&quot;&gt;PRINTing&lt;/a&gt; an empty line to handle 1 redirects default output back to the screen (and adds a CR at the end).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CLOSE 1&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.c64-wiki.com/wiki/CLOSE&quot; rel=&quot;noreferrer&quot;&gt;CLOSEing&lt;/a&gt; the handle will flush whatever might be left in drive buffers&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If the file you're saving onto is in some emulation or on a SD card or the like, it's ready to be used.&lt;/p&gt;&#xA;&lt;h3&gt;Caveat: PETSCII&lt;/h3&gt;&#xA;&lt;p&gt;Keep in mind that the output will be in &lt;a href=&quot;https://en.wikipedia.org/wiki/PETSCII&quot; rel=&quot;noreferrer&quot;&gt;PETSCII encoding&lt;/a&gt; (*2), plus some quirks added due to the way this works, like (IIRC)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a line spelling 'Ready' at the end,&lt;/li&gt;&#xA;&lt;li&gt;optional empty lines and&lt;/li&gt;&#xA;&lt;li&gt;leading spaces.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So whatever you use for further processing might need to take care of that and translating to standard ASCII (or whatever the target system uses) as well.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - 8-bit ones, that is :))&lt;/p&gt;&#xA;&lt;p&gt;*2 - Michael Steil has, as so often the &lt;a href=&quot;https://www.pagetable.com/?p=1404&quot; rel=&quot;noreferrer&quot;&gt;most comprehensive tables&lt;/a&gt; for all Commodore(*1) variants including screen and keyboard codes.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-03-14T17:33:16.097" LastActivityDate="2021-03-14T17:33:16.097" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="18292" PostTypeId="1" CreationDate="2021-03-14T02:36:26.413" Score="-3" ViewCount="470" Body="&lt;p&gt;Were there ever plans published, or kits, or a machine made, for a noughts-and-crosses computer game which did not use electronics – using only wire, an electricity source, and light bulbs ?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;. A Playing against the computer game .&lt;/li&gt;&#xA;&lt;li&gt;. I'm looking for the most optimal solid-state designs&lt;/li&gt;&#xA;&lt;li&gt;. Machines containing things like electromagnetic relays / solenoids, are not accepted as answers, since I'm looking for alternate computer logic .&lt;/li&gt;&#xA;&lt;li&gt;. Machines containing multi-contact-switches would qualify, although, of course I'm also looking for the most optimal solid-state designs, which would decrease these to minimal amounts, perhaps at the cost of containing more wiring.&lt;/li&gt;&#xA;&lt;li&gt;. Machines containing a rotating component, like &lt;a href=&quot;https://archive.org/details/howtobuildaworkingdigitalcomputer_jun67/page/n105/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;How to build a working digital computer&lt;/a&gt;, are not preferred answers, but they would be interesting to know about, if they only use wire, an electricity source, and light bulbs ?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;____________________________________&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Why I think one may have existed, and how it could have functioned .&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;It would use memory-boards, to compare the situation on the playing-board, to match it to one of the memory-boards, so when a memory-board is matched, it lights up a new square on the playing-board as the computer's next move.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Each memory-board would just be a length of wire, with gaps at certain positions to represent noughts or crosses (it may require separate memory-boards, one for noughts, one for crosses), and both sides of the gap wired up to a square on the playing-board, so when the human plugs in a piece, it closes/completes that part of the wire to allow electricity to flow. (so each square on the playing-board, would be wired up to lots of memory-boards).&lt;br /&gt;&#xA;- Maybe, to significantly reduce the amount of memory-boards, some sort of board rotation for matching), could be used, simply using wiring.&lt;br /&gt;&#xA;- &lt;strong&gt;NOTE&lt;/strong&gt; - An innovation ( a computing / logic / circuit innovation ) would be, that for the human player , each plug-in-piece, would be numbered from 1st move to last move, each one of these plug-in-pieces would be of a different length to reach down to activate a different move-number/platform/circuit of the game.&lt;br /&gt;&#xA;( Or, of course,  the plug-in-piece could have multi-contact-switches, varying for the move number ).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I wonder if theories used in Multiway switching&#xA; / &lt;a href=&quot;https://en.wikipedia.org/wiki/Switching_circuit_theory&quot; rel=&quot;nofollow noreferrer&quot;&gt;Switching circuit theory&#xA;&lt;/a&gt; may be helpful.&#xA;- I don't know if such a machine could work, I have not fully thought through all the details.&lt;br /&gt;&#xA;- Anyone trying to visualize if this would work, use a 2x2 board.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;(Note – for a computer, where a person simply plays against another person, it would be very simple for a machine not using any electronics, just using wire, electricity-source, and light-bulbs, to simply detect a win, when an entire row has noughts or crosses.  I assume the original computer battleships game worked like that, so that's not the question in this post.)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Also, my other question, which they erased / closed &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/18298/could-you-make-a-calculator-without-electronics-using-only-wire-electricity&quot;&gt;Could you make a calculator without electronics ( using only, wire, electricity-source, and light-bulbs )? &lt;/a&gt;, had a useful innovation regarding the 'carry' in a binary calculation, it could be relevant for this question also.&lt;br /&gt;&#xA;( Quote  &amp;quot;An innovation, could be plug-in-pieces/electrical-contact-pieces ( acting like switches ) that would be of a different length ( depending on what part of a number they are ) to reach down to activate a different circuit of the calculation ( useful for the 'carry' of a binary calculation ).&#xA;( Or, of course, the plug-in-piece could have multi-contact-switches, depending on what part of a number they are ).&amp;quot;&lt;br /&gt;&#xA;-   &lt;strong&gt;NOTE&lt;/strong&gt;. - What if this innovation, detailed above, regarding the 'carry' of a binary calculation, could lead to making an arithmetic-logic-unit which contains no transistors ( or even to other integrated-circuits not containing transistors ), by erasing that question there is no proof that I may have invented it.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16462" LastEditorUserId="16462" LastEditDate="2021-03-21T19:22:09.900" LastActivityDate="2021-03-21T19:22:09.900" Title="Were there ever plans published, or kits, or a machine made, for a noughts-and-crosses computer game which did not use electronics?" Tags="&lt;hardware&gt;" AnswerCount="3" CommentCount="2" ClosedDate="2021-03-18T14:22:27.813" ContentLicense="CC BY-SA 4.0" />
  <row Id="18295" PostTypeId="2" ParentId="18292" CreationDate="2021-03-14T04:05:30.993" Score="6" Body="&lt;p&gt;Yes.&lt;/p&gt;&#xA;&lt;p&gt;In 1978 Danny Hillis and Brian Silverman, two sophomores at MIT, built an entirely mechanical tic-tac-toe (noughts-and-crosses) playing machine. It contains absolutely no electronics.&lt;/p&gt;&#xA;&lt;p&gt;This design could easily be converted to a device that uses wires and electric lights instead of little wooden flags to display its results.&lt;/p&gt;&#xA;&lt;p&gt;It currently resides in the &lt;a href=&quot;https://www.computerhistory.org/collections/catalog/X39.81&quot; rel=&quot;noreferrer&quot;&gt;Computer History Museum in Mountain View, CA&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4186" LastActivityDate="2021-03-14T04:05:30.993" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18296" PostTypeId="2" ParentId="18292" CreationDate="2021-03-14T04:22:25.673" Score="4" Body="&lt;p&gt;A 1949 film clip hints at an electromechanical implementaton. The information content is low, but a picture of a uniselector suggest it's switches-and-relays logic.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.britishpathe.com/video/noughts-and-crosses-machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.britishpathe.com/video/noughts-and-crosses-machine&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;1949 was definitely in the stored-program computer age (EDSAC ran its first program in May 1949) but this clearly was not computer technology.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-03-14T04:22:25.673" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18299" PostTypeId="2" ParentId="18292" CreationDate="2021-03-14T05:15:13.413" Score="3" Body="&lt;h2&gt;With only wires and lights: NO.&lt;/h2&gt;&#xA;&lt;p&gt;The straight answer is NO. It can not be done, as neither wires not 'light globes' are active elements, thus they can't be modified/rearranged to model the game. Any solution will at least need a combination of complex (read multi contact) switches that will be moved either manually or machine controlled (which in addition needs clocking, like due a motor).&lt;/p&gt;&#xA;&lt;h2&gt;But YES if we add switches&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Tic-tac-toe&quot; rel=&quot;nofollow noreferrer&quot;&gt;Noughts-and-crosses&lt;/a&gt; 'programming' follows an extreme simple and straight forward scheme, allowing to draw up a fixed tree of moves. As a result this can be implemented as a complex but terminal number of switches and connections inbetween.&lt;/p&gt;&#xA;&lt;h2&gt;The Logikus&lt;/h2&gt;&#xA;&lt;p&gt;An early device (and general available) that possible could be used to 'encode this' would be the 1968 Logicus by Kosmos:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/S964Q.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S964Q.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(picture &lt;a href=&quot;https://homepage.ruhr-uni-bochum.de/ruediger.klenner/Logikus/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;taken from here&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is a German &lt;a href=&quot;https://de.wikipedia.org/wiki/Logikus&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki-entry&lt;/a&gt;, as well as a whole &lt;a href=&quot;https://www.logikus.info/&quot; rel=&quot;nofollow noreferrer&quot;&gt;site dedicated to the Logikus&lt;/a&gt;. A bit more information (in English) can be gathered from a &lt;a href=&quot;https://wiki.tcl-lang.org/page/Logikus&quot; rel=&quot;nofollow noreferrer&quot;&gt;page about an emulator&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;There were at least two &lt;strong&gt;licenced versions in the US and Canada&lt;/strong&gt; by Logix Enterprises of Montreal and New York called &lt;a href=&quot;https://www.oldcomputermuseum.com/logix_kosmos.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;O-600&lt;/a&gt; and &lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102621921&quot; rel=&quot;nofollow noreferrer&quot;&gt;SF-5000&lt;/a&gt;, ca 1970, as well as kind of a simpler clone by Tandy as part of their &amp;quot;Science Fair&amp;quot; Series (as late as 1977). There's an English language &lt;a href=&quot;https://www.youtube.com/watch?v=gVFPASMYtbc&quot; rel=&quot;nofollow noreferrer&quot;&gt;video describing&lt;/a&gt; it - and &lt;a href=&quot;https://www.youtube.com/watch?v=5WiRc1ZLk38&quot; rel=&quot;nofollow noreferrer&quot;&gt;another&lt;/a&gt;, showing more details, although she doesn't seem as exited :))&lt;/p&gt;&#xA;&lt;p&gt;For this I's stay with the original.&lt;/p&gt;&#xA;&lt;h2&gt;Workings&lt;/h2&gt;&#xA;&lt;p&gt;It was an educational toy, first produced in 1968, consisting of 10 switches, 10 light bulbs and a button to power whatever is connected when pressed.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Each switch could be in one of two positions, up or down.&lt;/li&gt;&#xA;&lt;li&gt;Each switch had 10 contacts, of them&#xA;&lt;ul&gt;&#xA;&lt;li&gt;half were closed&lt;/li&gt;&#xA;&lt;li&gt;and half were open in either position&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Each contact could be feed by up to three wires&lt;/li&gt;&#xA;&lt;li&gt;Each contact could feed 3 wires.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Each light bulb could be feed by a single wire.&lt;/p&gt;&#xA;&lt;p&gt;The button was connected to the batteries and all light bulbs.&lt;/p&gt;&#xA;&lt;p&gt;To plug a 'program' wires would connect the button with some contacts of some switches and routed from there. Connecting two contacts&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;in series forms an AND relation&lt;/li&gt;&#xA;&lt;li&gt;in parallel forms an OR relation&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Doing either over 'open' contacts negates logic, introducing NOT&lt;/p&gt;&#xA;&lt;p&gt;In combination any switch can be seen as a single bit input, representing two possible values, while each lamp was a single bit output as lit or dark.&lt;/p&gt;&#xA;&lt;h2&gt;Implementing the game&lt;/h2&gt;&#xA;&lt;p&gt;While a single Logikus has not enough switches and contacts to represent the game in a plain version, using prepared input (which in turn could come from one or more other Logikus') could allow to program the strategy on a single Logikus:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(just a quick write up, I bet I forgot some combination)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Lets have binary inputs for&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Two own tokens and an empty field in a row&lt;/li&gt;&#xA;&lt;li&gt;No token at center&lt;/li&gt;&#xA;&lt;li&gt;One own token plus two empty in a row&lt;/li&gt;&#xA;&lt;li&gt;No token in corner&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These 4 conditions can easy be combined to 4 output bits to lit one of 4 commands to the player:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Place token in empty field and win&lt;/li&gt;&#xA;&lt;li&gt;Place token at center&lt;/li&gt;&#xA;&lt;li&gt;Place token in row with one own and two empty (in corner)&lt;/li&gt;&#xA;&lt;li&gt;Place token in empty corner&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All of these can be made with easy AND/OR/NOT connections.&lt;/p&gt;&#xA;&lt;p&gt;For a detailed output which field is to be used this result can be used in conjunction with the input data (from previous stage) to form an output stage naming exactly which field the token is to be place usind another Logikus.&lt;/p&gt;&#xA;&lt;h2&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;While this can be used to play the whole game - sufficient switches/contacts given - it would not play it automatic, as there are no sensors, actors and stepping. All it can do is to value a certain game state and derivate the next move. Everything else, from inputting the state to executing the move must be done by the operator.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;As mentioned, due usage of switches this already violates the boundaries set by the question.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-16T14:38:29.943" LastActivityDate="2021-03-16T14:38:29.943" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="18301" PostTypeId="1" CreationDate="2021-03-14T13:48:24.673" Score="12" ViewCount="3955" Body="&lt;p&gt;I have a game that I can play in a Windows 3.1 emulator.&lt;/p&gt;&#xA;&lt;p&gt;Now I want to have a look &amp;quot;behind the scenes&amp;quot; of the game EXE file. I hope to find game graphics (sprites) there.&lt;/p&gt;&#xA;&lt;p&gt;But how can I extract it?&lt;/p&gt;&#xA;&lt;p&gt;Every unpacker that I tried says &amp;quot;Not a valid PE file&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="21104" LastEditorUserId="15334" LastEditDate="2021-03-14T18:57:45.560" LastActivityDate="2021-05-15T21:49:34.420" Title="How can I extract the contents of a Windows 3.1 (16-bit) game EXE file?" Tags="&lt;windows-3.x&gt;&lt;software-recommendation&gt;&lt;executables&gt;" AnswerCount="3" CommentCount="11" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18302" PostTypeId="2" ParentId="18290" CreationDate="2021-03-14T14:37:45.047" Score="6" Body="&lt;p&gt;If you have a mechanism for moving files to and from a modern computer, then you can use &lt;code&gt;bastext&lt;/code&gt; to transcode most variations of Commodore 8-bit BASIC between ASCII and tokenized forms.&lt;/p&gt;&#xA;&lt;p&gt;This is an &lt;a href=&quot;https://github.com/thezerobit/bastext&quot; rel=&quot;noreferrer&quot;&gt;open source project found on Github&lt;/a&gt;. The options it provides should meet most needs. Note the &lt;code&gt;-7&lt;/code&gt; option if you want to force the use of the BASIC 7.0 syntax. This is only needed if, for some reason, your .PRG file doesn't have the normal C128 BASIC load address of &lt;code&gt;$1C01&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ ./bastext -h&#xA;Usage: ./bastext -i|-o|-h [modifiers] infile(s) outfile&#xA;&#xA; Mode (one of these required):&#xA;  -i    Input mode (binary to text)&#xA;  -o    Output mode (text to binary)&#xA;  -h    Print help page&#xA;&#xA; General modfiers:&#xA;  -t    T64 mode (in: reads from specified T64 archive(s)&#xA;                  out: creates/appends to bastext.t64)&#xA;&#xA; Input mode modfiers:&#xA;  -a    Convert all, not just recognized start addresses&#xA;         (0401/0801/1001/1201/132D/1C01/4001)&#xA;  -s    Strict tok64 compatibility&#xA;  -d fn Send output to file fn&#xA;&#xA; Output mode modifiers:&#xA;  -2    Force C64 BASIC 2.0 interpretation&#xA;  -3    Force C64 TFC3 interpretation&#xA;  -5    Force C64 Graphics52 interpretation&#xA;  -7    Force C128 BASIC 7.0 interpretation&#xA;  -1    Force C128 BASIC 7.1 interpretation&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-03-14T14:46:09.773" LastActivityDate="2021-03-14T14:46:09.773" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18303" PostTypeId="1" CreationDate="2021-03-14T16:20:48.097" Score="2" ViewCount="160" Body="&lt;p&gt;I have the game &amp;quot;Daisy’s Garden 2&amp;quot; running in DOSBox with Windows 3.1.&lt;/p&gt;&#xA;&lt;p&gt;If I now create a custom garden level, how can I save it as a DGF file? When I click &amp;quot;Save as&amp;quot;, nothing happens.&lt;/p&gt;&#xA;&lt;p&gt;While testing the level, how do I return to the edit view?&lt;/p&gt;&#xA;" OwnerUserId="21104" LastEditorUserId="15334" LastEditDate="2021-03-14T21:53:19.807" LastActivityDate="2021-03-16T23:19:12.840" Title="How can I save a custom level in Daisy’s Garden 2 in a DGF file?" Tags="&lt;gaming&gt;&lt;editor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18304" PostTypeId="1" CreationDate="2021-03-14T18:22:52.357" Score="4" ViewCount="139" Body="&lt;p&gt;I've recently acquired an &lt;strong&gt;IBM 3151 Terminal&lt;/strong&gt; without keyboard and I'm not willing to spend any money on an original keyboard. This is why I've tried searching Google for any datasheets of the IBM RJ45 keyboard interface protocol, to no avail.&lt;/p&gt;&#xA;&lt;p&gt;The connector is an &lt;strong&gt;RJ45&lt;/strong&gt; port.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know what protocol those terminals used, so I can emulate the keyboard or possibly adapt a PS/2 keyboard? Are there any converters out there I just haven't found?&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="21107" LastActivityDate="2021-03-14T18:22:52.357" Title="What keyboard protocol do IBM 3151 Terminals speak over RJ45" Tags="&lt;keyboards&gt;&lt;ibm&gt;&lt;terminal&gt;&lt;serial&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18305" PostTypeId="2" ParentId="18301" CreationDate="2021-03-14T18:41:56.040" Score="33" Body="&lt;p&gt;Executable files for 16-bit Windows are usually laid out in the now-rather-inaccurately-named New Executable format. Most current Windows executable analysis tools do not support this format; they can only read files in the 32-bit and 64-bit Portable Executable format. This is what the error message you cited is trying to tell you.&lt;/p&gt;&#xA;&lt;p&gt;As for how to extract assets from the game, that will depend on how they are stored.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The crudest way to find embedded data would be to use a tool such as &lt;a href=&quot;https://github.com/ReFirmLabs/binwalk&quot; rel=&quot;nofollow noreferrer&quot;&gt;binwalk&lt;/a&gt;, which can scan for signatures of common data formats and extract data that follows. In my own test on NE executables bundled with Windows itself, the results of using this tool were rather underwhelming; I guess that it is likewise tuned for looking for modern formats rather than historically-used ones, which have rather few distinguishing features anyway. But it may be an option worth at least trying.&lt;/li&gt;&#xA;&lt;li&gt;Since the asker mentioned it’s a Windows 3.x game, the assets may be embedded in the executable as Windows resources. Those can be extracted and manipulated with tools analogous to modern resource editors, but with support for NE files. Such were often distributed with contemporaneous compiler toolchains:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Borland Resource Workshop, itself a 16-bit Windows program, distributed with later versions of Borland’s early Pascal (Turbo/Borland Pascal 7) and C++ (Borland C++ 3.1) toolchains;&lt;/li&gt;&#xA;&lt;li&gt;The Watcom Resource Editor, distributed with the Watcom/OpenWatcom toolchain (I am much less familiar with it, and so I am less sure whether it actually supports reading complete executables).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;The assets may be simply static data embedded in the executable image next to the code. In that case, finding and extracting it will require using a disassembler such as &lt;a href=&quot;https://ghidra-sre.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ghidra&lt;/a&gt;. Disassembly is a laborious process that requires knowledge of assembly language and some skills in its own right, but in the long term it’s the only one guaranteed to produce definitive answers as to where the executable actually looks for data.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Though most of the above is assuming that the data are actually embedded directly (and uncompressed, too) in the executable file itself, which it need not actually be. You may need to scan other game files if there are any, or failing that, again, disassemble the executable and learn where it looks for the assets.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-05-13T17:36:47.373" LastActivityDate="2021-05-13T17:36:47.373" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18306" PostTypeId="1" AcceptedAnswerId="18307" CreationDate="2021-03-14T19:27:05.300" Score="2" ViewCount="97" Body="&lt;p&gt;In the datasheet of the RF modulator UM1233 used in Oric-1 we can find the following typical waveform at the input:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qopr4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qopr4.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I tried to analyse the following Oric-1 circuit applied  to this modulator:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pNkMd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pNkMd.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;To get the 2.6V as minimum voltage the pot value will be around 77 ohm.&lt;/p&gt;&#xA;&lt;p&gt;However for this value the maximum value will be around 2.9V. This will not cover the waveform voltage range.&lt;/p&gt;&#xA;&lt;p&gt;I know that the PROM TBP24S10 has a tristate output but this does not change the range.&lt;/p&gt;&#xA;&lt;p&gt;What do I miss?&lt;/p&gt;&#xA;" OwnerUserId="18338" LastActivityDate="2021-03-14T21:25:55.723" Title="How do the resistors chosen for the DAC match the RF modulator requirement in Oric-1?" Tags="&lt;pal&gt;&lt;oric&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18307" PostTypeId="2" ParentId="18306" CreationDate="2021-03-14T21:25:55.723" Score="4" Body="&lt;p&gt;The resistor network output voltages do not match the optimal modulator input voltages, and they do not have to match, as long as the modulator input voltages are within the range.&lt;/p&gt;&#xA;&lt;p&gt;The antenna RF inputs of the TVs work under various signal strength conditions anyway, like due to range to various transmitting TV stations or good/bad weather conditions.&lt;/p&gt;&#xA;&lt;p&gt;So there is an automatic gain control (AGC) block in the TV signal path that will amplify the signal by the necessary amount to get the demodulated composite video amplitude to the expected level.&lt;/p&gt;&#xA;&lt;p&gt;For PAL signals, the expected composite signal amplitude is such that there is 300mV between sync tip level and blank/black level, and thus the white level is 700mV above black level.&lt;/p&gt;&#xA;&lt;p&gt;As the RF signal uses negative amplitude modulation, the sync tip level voltage sets the maximum RF carrier amplitude level.&lt;/p&gt;&#xA;&lt;p&gt;So everything in the receiver is relative to the maximum received RF carrier amplitude.&lt;/p&gt;&#xA;&lt;p&gt;Even if the modulator input at sync tip level does not go to the rated minimum voltage of 2.6V but stays above it, it is still the strongest level of RF carrier it can produce at sync tip, so it simply looks like it was just sent with weaker RF power than it would be if it uses nominal 2.6V level.&lt;/p&gt;&#xA;&lt;p&gt;All that matters is that the signal is DC biased with high enough DC voltage level to operate at the linear range of the modulator, between 2.6V and 3.4V.&lt;/p&gt;&#xA;&lt;p&gt;And what the adjustable resistor does, is to allow setting the DC bias point, and the AC signal amplitude at the same time, simply to a level that works good enough to see a picture on TV. The lower the trimmer resistance, the lower the DC bias, but lower video signal amplitude too. Also the 24S10 has TTL output stage so it cannot push out much current, but it can pull more current, so I suspect that the trimmer resistor is used to actually set the voltage level of near white level, from where the 24S10 outputs can only pull the voltage down to black and sync levels.&lt;/p&gt;&#xA;&lt;p&gt;So that is why the actual AC voltage amplitude at the RF modulator input does not matter much. It just has to have the correct relative amplitude levels, 30% for sync pulse amplitude and 70% for video to have a 100% composite video level.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2021-03-14T21:25:55.723" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18308" PostTypeId="2" ParentId="18290" CreationDate="2021-03-14T23:25:52.773" Score="6" Body="&lt;p&gt;As an alternative to Brian H's answer, I should also point out the &lt;code&gt;petcat&lt;/code&gt; tool which comes with the VICE emulator and supports converting between tokenized Commodore BASIC, PETSCII, and ASCII with PETSCII special characters replaced with mnemonics like &lt;code&gt;{left}&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        petcat V2.21 PL 1 -- Basic list/crunch utility.&#xA;        Part of vice 2.4.25&#xA;&#xA;Usage:  petcat  [-c | -nc]  [-h | -nh]  [-text | -&amp;lt;version&amp;gt; | -w&amp;lt;version&amp;gt;]&#xA;                [-skip &amp;lt;bytes&amp;gt;] [-l &amp;lt;hex&amp;gt;]  [--] [file list]&#xA;                [-k[&amp;lt;version&amp;gt;]]&#xA;&#xA;   -help -?     Output this help screen here&#xA;   -v           verbose output&#xA;   -c           controls (interpret also control codes) &amp;lt;default if textmode&amp;gt;&#xA;   -nc          no controls (suppress control codes in printout)&#xA;                &amp;lt;default if non-textmode&amp;gt;&#xA;   -ic          interpret control codes case-insensitive&#xA;   -qc          convert all non alphanumeric characters inside quotes into controlcodes&#xA;   -d           output raw codes in decimal&#xA;   -h           write header &amp;lt;default if output is stdout&amp;gt;&#xA;   -nh          no header &amp;lt;default if output is a file&amp;gt;&#xA;   -skip &amp;lt;n&amp;gt;    Skip &amp;lt;n&amp;gt; bytes in the beginning of input file. Ignored on P00.&#xA;   -text        Force text mode&#xA;   -&amp;lt;version&amp;gt;   use keywords for &amp;lt;version&amp;gt; instead of the v7.0 ones&#xA;   -w&amp;lt;version&amp;gt;  tokenize using keywords on specified Basic version.&#xA;   -k&amp;lt;version&amp;gt;  list all keywords for the specified Basic version&#xA;   -k           list all Basic versions available.&#xA;   -l           Specify load address for program (in hex, no leading chars!).&#xA;   -o &amp;lt;name&amp;gt;    Specify the output file name&#xA;   -f           Force overwritten the output file&#xA;                The default depends on the BASIC version.&#xA;&#xA;        Versions:&#xA;        1       PET Basic v1.0&#xA;        2       Basic v2.0&#xA;        superexp        Basic v2.0 with Super Expander (VIC20)&#xA;        turtle  Basic v2.0 with Turtle Basic v1.0 (VIC20)&#xA;        simon   Basic v2.0 with Simon's Basic (C64)&#xA;        speech  Basic v2.0 with Speech Basic v2.7 (C64)&#xA;        a       Basic v2.0 with @Basic (C64)&#xA;        40      Basic v4.0 (PET)&#xA;        4e      Basic v4.0 extension (C64)&#xA;        3       Basic v3.5 (C16)&#xA;        70      Basic v7.0 (C128)&#xA;        10      Basic v10.0 (C65/C64DX)&#xA;        f       Basic v2.0 with Final Cartridge III (C64)&#xA;        ultra   Basic v2.0 with Ultrabasic-64 (C64)&#xA;        graph   Basic v2.0 with Graphics basic (C64)&#xA;        wsb     Basic v2.0 with WS basic (C64)&#xA;        mighty  Basic v2.0 with Mighty Basic (VIC20)&#xA;        pegasus Basic v2.0 with Pegasus basic v4.0 (C64)&#xA;        xbasic  Basic v2.0 with Xbasic (C64)&#xA;        drago   Basic v2.0 with Drago basic v2.2 (C64)&#xA;        reu     Basic v2.0 with REU-basic (C64)&#xA;        lightning       Basic v2.0 with Basic Lightning (C64)&#xA;        71      Basic v7.1 (C128)&#xA;        magic   Basic v2.0 with Magic Basic (C64)&#xA;        easy    Basic v2.0 with Easy Basic (VIC20)&#xA;        blarg   Basic v2.0 with Blarg (C64)&#xA;        4v      Basic v4.0 (VIC20)&#xA;        5       Basic v5.0 (VIC20)&#xA;        wsf     Basic v2.0 with WS basic final (C64)&#xA;        game    Basic v2.0 with Game Basic (C64)&#xA;        bsx     Basic v2.0 with Basex (C64)&#xA;        superbas        Basic v2.0 with Super Basic (C64)&#xA;        exp64   Basic v2.0 with Expanded Basic (C64)&#xA;        sxc     Basic v2.0 with Super Expander Chip (C64)&#xA;        warsaw  Basic v2.0 with Warsaw Basic (C64)&#xA;        exp20   Basic v2.0 with Expanded Basic (VIC20)&#xA;        supergra        Basic v2.0 with Supergrafik 64 (C64)&#xA;        k       Basic v2.0 with Kipper Basic (C64)&#xA;        bb      Basic v2.0 with Basic on Bails (C64)&#xA;        eve     Basic v2.0 with Eve Basic (C64)&#xA;        tt64    Basic v2.0 with The Tool 64 (C64)&#xA;&#xA;        Usage examples:&#xA;        petcat -2 -o outputfile.txt -- inputfile.prg&#xA;                De-tokenize, convert inputfile.prg to a text file&#xA;                in outputfile.txt, using BASIC V2 only&#xA;        petcat -wsimon -o outputfile.prg -- inputfile.txt&#xA;                Tokenize, convert inputfile.txt to a PRG file&#xA;                in outputfile.prg, using Simon's BASIC&#xA;        petcat -text -o outputfile.txt -- inputfile.seq&#xA;                Convert inputfile.seq to a Ascii text file&#xA;                in outputfile.txt.&#xA;        petcat -text -w2 -o outputfile.seq -- inputfile.txt&#xA;                Convert inputfile.txt to a Petscii text SEQ file&#xA;                in outputfile.seq.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2021-03-14T23:25:52.773" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18309" PostTypeId="2" ParentId="18301" CreationDate="2021-03-15T01:35:49.090" Score="-2" Body="&lt;p&gt;You can try to use one of the forensic tools used to extract images and documents from damaged files or disk images. If the executable has e.g. a JPG embedded, they might be able to extract it.&lt;/p&gt;&#xA;" OwnerUserId="20704" LastActivityDate="2021-03-15T01:35:49.090" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18311" PostTypeId="2" ParentId="14257" CreationDate="2021-03-15T13:11:20.653" Score="2" Body="&lt;p&gt;C128 MMU default maps page 0 to bank 0, page 0 and page 1 to bank 0, page 1.&#xA;Access to page 0 and 1 therefore ends up in bank0, even when bank1 is switched in.&#xA;CPM expects Bank1 for page 0 and 1 therefore during CPM, page0 and 1 are mapped to bank1. You could say it would not matter but in bank0, the MMU maps in the Z80-bootrom when Z80 does a read.&#xA;So: page remapping is used as standard (in CPM mode)&lt;/p&gt;&#xA;" OwnerUserId="21111" LastActivityDate="2021-03-15T13:11:20.653" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18312" PostTypeId="1" CreationDate="2021-03-15T14:32:52.703" Score="8" ViewCount="518" Body="&lt;p&gt;I've woken up in 1973.  Until I can figure out how to monetize my knowledge of coming political, economic, and social trends, I need to support myself somehow.&lt;/p&gt;&#xA;&lt;p&gt;So... I walk into one of the major computing companies (IBM, Digital Equipment, Bell Labs, Atari, Texas Instruments, Motorola, Hewlett-Packard, EDS, etc.) and ask for a job.  The receptionist directs me to a waiting room.  &amp;quot;Someone will be with you shortly.&amp;quot;(*)&lt;/p&gt;&#xA;&lt;p&gt;Sitting among avocado-green and rust-orange chairs, ashtrays and &lt;em&gt;Life&lt;/em&gt; magazines on the coffee table, I'm feeling a little anxious.  I have no credentials to show.  Well, I do have credentials, but they are in the future and the dates might raise some suspicions.  I will have to impress them purely with my knowledge and skill.&lt;/p&gt;&#xA;&lt;p&gt;I carry in my head a broad palette of contemporary computing knowledge:  Python, C/C++, SQL, SQL Server, DOS commandline, a full repertoire of algorithms (searching, sorting, binary trees, image processing, geometry, numerical methods, etc.) and lots of mathematical and statistical methods.&lt;/p&gt;&#xA;&lt;p&gt;However, most of these technologies have not been invented yet, or they are still in their infancy and are not yet widespread.  And I don't know the first thing about whatever they might be using (Fortran, COBOL, IBM mainframe operating systems, punch cards).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Will I be able to impress the hiring manager?  How?  What should I emphasize?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;BR&gt;&#xA;&lt;p&gt;(*) Aside to youngsters:  There was a time when there were far fewer gatekeepers in the hiring process.  If you walked into a corporate headquarters from off the street and asked for a job, you could reasonably expect to be taken seriously, or at least treated politely.  Especially if you were dressed up and had a briefcase.&lt;/p&gt;&#xA;" OwnerUserId="21112" LastActivityDate="2021-03-15T18:17:08.617" Title="Uh, oh, I've woken up in 1973. Can I get a job in computing?" Tags="&lt;programming&gt;&lt;mainframe&gt;&lt;8-bit-microcomputers&gt;&lt;minicomputers&gt;" AnswerCount="3" CommentCount="13" FavoriteCount="2" ClosedDate="2021-03-15T19:44:31.440" ContentLicense="CC BY-SA 4.0" />
  <row Id="18313" PostTypeId="2" ParentId="18312" CreationDate="2021-03-15T15:55:43.803" Score="4" Body="&lt;p&gt;Depends on the position.&lt;/p&gt;&#xA;&lt;p&gt;Honestly, you're not really qualified for a lot of the work.&lt;/p&gt;&#xA;&lt;p&gt;You don't know the languages, you don't know the operations, much of the work is routine processing and ETL, so it's not as if it's &amp;quot;exciting&amp;quot; work. In that sense, while you have a grasp of computers and their operations, you don't have any actual experience in the things they do. You'd have a bit of a step up at the entry level, but you might be surprised how little what you know carries back.&lt;/p&gt;&#xA;&lt;p&gt;The real question, is whether you'd actually enjoy the work. Turn around takes a long time, you might be &amp;quot;coding&amp;quot; on paper forms to have them keyed in by someone else on a batch of cards. It may be too mechanical.&lt;/p&gt;&#xA;&lt;p&gt;I, for example, like to iterate. Write something, try it out, test it, fix it, rinse and repeat. Let the computer do computer things (static type checking compilers for the win). Having to be stuck behind coding with a pencil and a 24 hours turn around, I'm not sure if my lizard brain would have the patience for it. It might be too methodical and detail oriented for me.&lt;/p&gt;&#xA;&lt;p&gt;I could do the work, but the workflow I may not enjoy. I took a COBOL class that required us to use cards. It was the first level of COBOL, and many students first encounter with the computer system, or, honestly, at that time, ANY computer system. So, for them, the cards were less of an issue.&lt;/p&gt;&#xA;&lt;p&gt;But I'd already done all that, I was used to the system we were using, this was not my first rodeo. And after using the cards for the first project, it was just way to stifling compared to a line editor and 1200 baud terminal. I didn't do any of the followup projects on cards.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2021-03-15T15:55:43.803" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18314" PostTypeId="2" ParentId="18312" CreationDate="2021-03-15T16:47:37.557" Score="4" Body="&lt;p&gt;Depend on the country, really. For example, in the Soviet block you would be asked for credentials, not to decide if you are suitable for the job, but because they have to know your education to calculate your salary. And you would not be able to provide any.&#xA;Speaking of it, even in the liberal USA you would find it difficult to persuade anyone your shiny new driving license issued in 2015 is not an obvious fake...&lt;/p&gt;&#xA;&lt;p&gt;The best bet, if you ignore the document issue, would be to get a FORTRAN and ALGOL manual and familiarize yourself with the languages before the interview. WIth a &lt;code&gt;C&lt;/code&gt; background, it should not be difficult (unlike aiming for COBOL), especially the latter if you remember a bit of high school Pascal. Knowing algorithms, mathematics, you could be hired. There is however one crucial issue, you will be inevitably asked what is your experience and where you got it. Remember, there are no home computers at all. And &amp;quot;I've read a lot of literature&amp;quot; sounds weird...&lt;/p&gt;&#xA;" OwnerUserId="476" LastActivityDate="2021-03-15T16:47:37.557" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18315" PostTypeId="2" ParentId="18312" CreationDate="2021-03-15T17:43:29.173" Score="13" Body="&lt;p&gt;Make your way to Palo Alto, California, and find the Xerox PARC facility.  Do whatever it takes to get a conversation with Alan Kay.  Admittedly, you don't know any Smalltalk, but neither does anybody else.  Your ability to think in terms of a collection of software objects interacting with each other will impress the hell out of him.&lt;/p&gt;&#xA;&lt;p&gt;He'll get you a job doing some of the most exciting work available in 1973.  Prototyping the first desktop computer as an office machine. The graphical user interface and the mouse.  Ethernet.  Email.  The print server.  Object oriented programming.&lt;/p&gt;&#xA;&lt;p&gt;You won't have to deal with COBOL or Punch cards.  It's all interactive computing, although it's on timeshared systems.  They will be using Tenex, on either a modified PDP-10 or a Xerox copy of a PDP-10 called MAXC.  Your knowledge of C,  if you can regress a little, will come in very handy.&lt;/p&gt;&#xA;&lt;p&gt;You won't make a lot of money, but you will get by long enough to enjoy it.  The bad news is you won't go down in history.  Everything you do will be swept aside when Xerox senior management decides against trying to cash in on the &amp;quot;office of the future&amp;quot;.  Some day, after the bad news has broken,  there will be a kid that visits Xerox PARC and learns what the future holds.  His name is Steve Jobs.  Follow him.&lt;/p&gt;&#xA;&lt;p&gt;For the Xerox PARC timeline, &lt;a href=&quot;https://www.parc.com/about-parc/parc-history/&quot; rel=&quot;noreferrer&quot;&gt;start here&lt;/a&gt;.  Also read Dealers of Lightning.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastEditorUserId="3698" LastEditDate="2021-03-15T18:17:08.617" LastActivityDate="2021-03-15T18:17:08.617" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18316" PostTypeId="1" CreationDate="2021-03-15T18:25:39.473" Score="1" ViewCount="264" Body="&lt;p&gt;Which Mac models included a DSP chip that could be accessed by regular application code? (e.g. not hidden inside the mouse, WiFi chip, disk read/write chip, GPU, etc.)&lt;/p&gt;&#xA;&lt;p&gt;Did they ship before or after the Next Cube?&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2021-03-16T08:44:24.703" Title="Which Mac models included a software visible DSP chip" Tags="&lt;hardware&gt;&lt;mac&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18317" PostTypeId="2" ParentId="18316" CreationDate="2021-03-15T19:41:55.687" Score="7" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Quadra_660AV&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quadra 660AV&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Quadra_840AV&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quadra 840AV&lt;/a&gt; had AT&amp;amp;T 3210 DSPs, and as far as I know were the only Macs to include a DSP as standard. The DSP was used by &lt;a href=&quot;https://en.wikipedia.org/wiki/PlainTalk&quot; rel=&quot;nofollow noreferrer&quot;&gt;PlainTalk&lt;/a&gt; for speech recognition.&lt;/p&gt;&#xA;&lt;p&gt;They were both released in 1993, well after &lt;a href=&quot;https://en.wikipedia.org/wiki/NeXTcube&quot; rel=&quot;nofollow noreferrer&quot;&gt;the NeXTcube&lt;/a&gt; which was released in 1990, and &lt;a href=&quot;https://en.wikipedia.org/wiki/NeXT_Computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;the original NeXT Computer&lt;/a&gt; which was released in 1988 and already had a Motorola 56001 DSP.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-03-16T08:44:24.703" LastActivityDate="2021-03-16T08:44:24.703" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18319" PostTypeId="2" ParentId="11736" CreationDate="2021-03-16T18:52:55.353" Score="4" Body="&lt;p&gt;The Nintendo logo thing is a working and legal trademark security system.&lt;/p&gt;&#xA;&lt;p&gt;Sega messed up with their Trademark Security System, because it doesn't actually include the logo in the cart binary.&lt;/p&gt;&#xA;&lt;p&gt;Nintendo did it right.&lt;/p&gt;&#xA;&lt;p&gt;Any unlicensed cart that has that Nintendo logo bitmap in it is truly violating the trademark if the logo shows on the screen.  But if the logo isn't there, it won't run on a real gameboy.  Therefore, those who make working unlicensed games that show the Nintendo logo can be prosecuted for trademark infringement.&lt;/p&gt;&#xA;&lt;p&gt;Because the one in the cartridge is what's shown, it IS expressive data, and not just stuff to make the game work. And that legal distinction is what made Nintendo's trademark security system work, when Sega's was overturned on appeal.&lt;/p&gt;&#xA;&lt;p&gt;That said, a cart that temporarily swaps the logo in when it's tested, but then swaps it back out when it's displayed does NOT violate trademarks. And this is indeed possible on the Gameboy. It tests, THEN copies to video memory.  If it copied to memory, THEN tested, then displayed it out of memory, then this dodge wouldn't work.&lt;/p&gt;&#xA;&lt;p&gt;Another method is a passthrough cart. you plug your legit game into the cart slot in your unlicensed game to get past the TMSS. A super nes game actually did this as I recall.&lt;/p&gt;&#xA;&lt;p&gt;This is also why PSOnes won't play imports. because they actually verify the black screen logo design stored in the image, and that it states the correct territory.&lt;/p&gt;&#xA;" OwnerUserId="21116" LastActivityDate="2021-03-16T18:52:55.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18320" PostTypeId="2" ParentId="18303" CreationDate="2021-03-16T23:11:46.830" Score="3" Body="&lt;p&gt;I have installed the shareware version of Daisy's Garden 2 within Windows NT 4 under VirtualBox. In this environment the game runs too slowly to be playable, but I have not experienced any difficulty in using the editor. File | Save As... displays the usual Windows 3.x style file chooser and I was able to save a test .DGF file which the program subsequently reloaded. Unless there is some flaw in DOSBox's emulation of the filesystem, I don't know why you are unable to save levels.&lt;/p&gt;&#xA;&lt;p&gt;When playtesting, the game under test runs in a new MDI window. The help file suggests pressing Ctrl+F4 to end the playtest (which closes the current MDI window) but closing the MDI window in other ways, such as double-clicking the icon to the left of the File menu, will be equally effective.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6UMPx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6UMPx.png&quot; alt=&quot;&amp;quot;Daisy's Garden 2&amp;quot; screenshot, with the MDI menu icon highlighted&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="1912" LastEditDate="2021-03-16T23:19:12.840" LastActivityDate="2021-03-16T23:19:12.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18321" PostTypeId="1" AcceptedAnswerId="18324" CreationDate="2021-03-17T02:47:20.130" Score="3" ViewCount="360" Body="&lt;p&gt;Unlike the Apple ][, the Apple 1 never had BASIC in ROM.  The Apple 1 booted into a monitor program, which enabled the user to type in machine code for a program (as Steve Wozniak often did), or load a program using the optional &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/18322/10260&quot;&gt;cassette interface&lt;/a&gt; (how most users loaded BASIC).  The monitor also provided routines for reading the keyboard and printing characters to the screen.&lt;/p&gt;&#xA;&lt;p&gt;Woz wrote and assembled the monitor program by hand -- without the assistance of another computer -- as &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/17957/10260&quot;&gt;he had also done for the Apple 1 BASIC&lt;/a&gt;.  However, this raising a &lt;a href=&quot;https://en.wikipedia.org/wiki/Bootstrapping#Software_development&quot; rel=&quot;nofollow noreferrer&quot;&gt;software development bootstrapping&lt;/a&gt; problem: &lt;strong&gt;How was he able to get the machine code actually into ROMs for the Apple 1 in the first place?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Borrow/use someone else's (E)PROM writer (e.g. at work, or from the Homebrew Computer Club)?&lt;/li&gt;&#xA;&lt;li&gt;Build his own (E)PROM writer (e.g. from discrete logic)?&lt;/li&gt;&#xA;&lt;li&gt;Pay a company to do it (expensive, unlikely)?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-03-17T02:56:27.463" LastActivityDate="2021-03-17T13:30:43.877" Title="How did Woz get the Apple 1 monitor program into ROM?" Tags="&lt;rom&gt;&lt;apple&gt;&lt;apple-1&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18322" PostTypeId="1" AcceptedAnswerId="18323" CreationDate="2021-03-17T02:55:51.960" Score="12" ViewCount="1251" Body="&lt;p&gt;According to &lt;a href=&quot;https://apple2history.org/history/ah02/&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt;, the Apple 1 monitor program was located in addresses &lt;code&gt;$F000-$FFFF&lt;/code&gt;, a ROM program to use the optional cassette interface card was at addresses &lt;code&gt;$C100-$C1FF&lt;/code&gt;, and the peripheral address for writing to the cassette was at &lt;code&gt;$C028&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The most likely explanation is that the address range &lt;code&gt;$C000-$CFFF&lt;/code&gt; was reserved for the interface card slot, and that the cassette program was in its own ROM on the interface card.  However, it is also possible that there was only one ROM, on the motherboard with both the monitor and cassette programs.  &lt;strong&gt;Is there evidence documenting how the cassette program was stored?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This picture of the cassette interface card may help:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/OPSpP.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OPSpP.png&quot; alt=&quot;Apple 1 cassette interface card&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-03-17T13:49:01.040" Title="Did the Apple 1 cassette interface card have its own ROM?" Tags="&lt;rom&gt;&lt;cassette-tape&gt;&lt;apple-1&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18323" PostTypeId="2" ParentId="18322" CreationDate="2021-03-17T03:20:36.013" Score="19" Body="&lt;p&gt;&lt;strong&gt;The Card featured 256 bytes of ROM.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there evidence documenting how the cassette program was stored?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The evidence is right there in the PCB photo you added. The two MMI 6301 chips, labled &lt;em&gt;APPLE A3&lt;/em&gt; and &lt;em&gt;APPLE A4&lt;/em&gt;, at position 3 and 4, are 256 by 4 PROMs. The same type, produced by &lt;a href=&quot;https://en.wikipedia.org/wiki/Monolithic_Memories&quot; rel=&quot;noreferrer&quot;&gt;Monolithic Memories&lt;/a&gt;, as used on the Apple 1 motherboard for the monitor program. Those are marked &lt;em&gt;APPLE A1&lt;/em&gt; and &lt;em&gt;APPLE A2&lt;/em&gt; as well as located on position A1/A2.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-17T13:49:01.040" LastActivityDate="2021-03-17T13:49:01.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18324" PostTypeId="2" ParentId="18321" CreationDate="2021-03-17T03:37:31.773" Score="7" Body="&lt;p&gt;At that time he worked at HP, where they had of course the needed promer - the only drawback was that he had to walk to another building, as you already &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12696&quot;&gt;cited (in another question)&lt;/a&gt; from iWoz:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I couldn’t write a new program into the PROMs. To do that, I’d have to go to that other building again, just to burn the program into the chip.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I guess he did it a few times - ofc, later, for the production machines they ordered them preloaded from MMI, as markings do show. Burning PROMs was a service most PROM manufacturers offered - it covered the gap below making a custom ROM.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-17T13:30:43.877" LastActivityDate="2021-03-17T13:30:43.877" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18326" PostTypeId="1" AcceptedAnswerId="18328" CreationDate="2021-03-18T16:00:46.753" Score="6" ViewCount="1024" Body="&lt;p&gt;The Wikipedia article on &lt;a href=&quot;https://en.wikipedia.org/wiki/Wave_soldering&quot; rel=&quot;noreferrer&quot;&gt;wave soldering&lt;/a&gt; does not give any information on its history.  &lt;strong&gt;What was the first computer circuit board to use this process?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am specifically looking for computers that were commercially-available to other people or companies, not products built for one's own use.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Related:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/17023/10260&quot;&gt;How did wave soldering work?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/12356/10260&quot;&gt;What causes the traces to wrinkle like this and should I be worried&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-03-18T18:58:15.180" Title="What was the first computer board to be wave-soldered?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;printed-circuit-board&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18327" PostTypeId="1" CreationDate="2021-03-18T16:23:29.310" Score="-4" ViewCount="289" Body="&lt;p&gt;Once upon a time, the chips on the circuit boards of personal computers&lt;sup&gt;1&lt;/sup&gt; were arranged in a tidy grid pattern.  Observe the board of the Apple ][+:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tBilK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tBilK.jpg&quot; alt=&quot;Apple II+ motherboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Or the Commodore 128:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LO15z.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LO15z.jpg&quot; alt=&quot;C128 motherboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sadly, the zen of neat rows and columns of chips is no longer practiced.  This can be attributed to several factors:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The overall shape of boards are now designed to efficiently fit around other computer components.  Rectangular boards are rare, custom shapes are common.&lt;/li&gt;&#xA;&lt;li&gt;More transistors per chip has allowed features to be integrated into fewer chips.&lt;/li&gt;&#xA;&lt;li&gt;Chip packaging has changed from dual inline packages, to quad packs and pin/ball arrays.&lt;/li&gt;&#xA;&lt;li&gt;Board layout is now automated, multilayer, and optimized to reduce board size.&lt;/li&gt;&#xA;&lt;li&gt;Grids make it easier for humans to place and repair parts.  Robots now do the former, and the latter is rarely done anymore.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;What was the last personal computer to arrange most&lt;sup&gt;2&lt;/sup&gt; of its chips in rows and columns&lt;sup&gt;3&lt;/sup&gt;?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; &amp;quot;Personal computer&amp;quot; in the general sense of something that might be used at home or in a small business; not the specific sense of the IBM PC or its clones.&lt;/p&gt;&#xA;&lt;p&gt;It's likely that supercomputers and other rackmounted stuff still have boards with a grid arrangement, but such items are outside the scope of this question.  Laptops are okay (but were particularly under pressure to have custom-shaped boards).&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; &amp;quot;Most&amp;quot; means more than half of the board's chips.  See the C128 example above.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;3&lt;/sup&gt; You need at least 3 chips in a straight line to make a proper row (or column).  So the minimum arrangement is 3 rows by 3 columns.  Minor repositioning due to different size chips is acceptable.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-03-18T23:29:30.053" Title="What was the last personal computer to have the chips neatly arranged in rows and columns?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;design-choices&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18328" PostTypeId="2" ParentId="18326" CreationDate="2021-03-18T17:34:13.003" Score="15" Body="&lt;p&gt;The modern PCB, as we know it, was a war time development and so was wave soldering as a way to lower production cost while maintaining consistent quality. Al this predates computers, so when computer production became serious manufacturing, that is more than single unit with special to type board, PCBs and wave soldering was used. While not the first, IBM's 1960 &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Standard_Modular_System&quot; rel=&quot;noreferrer&quot;&gt;Standard Modular System&lt;/a&gt; makes a great example:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DwqG9.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DwqG9.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The basic idea was to produce a system of &lt;a href=&quot;http://www.righto.com/2015/03/a-database-of-sms-cards-technology.html&quot; rel=&quot;noreferrer&quot;&gt;basic building blocks&lt;/a&gt; that could be produced in (comparably) large quantities using more efficient production technologies - Including wave soldering. DEC later took that idea to create their &lt;a href=&quot;https://en.wikipedia.org/wiki/Flip_Chip_(PDP_module)&quot; rel=&quot;noreferrer&quot;&gt;Flip-Chip&lt;/a&gt; modules. But wave soldering was not only used by IBM, or DEC, but any other computer company of the late 1950s early 1960s as well. Had a HP2116A of the mid 1960s at my desk a few days ago: wave soldered boards as well.&lt;/p&gt;&#xA;&lt;p&gt;Long Story Short:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;As soon as computers were produced in quantities past a hand full, wave soldering was a tool of choice&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-18T18:58:15.180" LastActivityDate="2021-03-18T18:58:15.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18329" PostTypeId="2" ParentId="18327" CreationDate="2021-03-18T17:56:45.967" Score="7" Body="&lt;p&gt;Large grids of chips in micro-computers are usually memory chips, and they disappeared from motherboards as memory density increased, and then moved to SIMMs. So large grids were a common sight on 8-bit micros, less so on 16/32-bit micros: for example &lt;a href=&quot;https://temlib.org/AtariForumWiki/index.php/Atari_ST_motherboard_revisions&quot; rel=&quot;noreferrer&quot;&gt;early Atari STs&lt;/a&gt; had memory chips on their motherboards, in smaller grids, but later models used SIMMs.&lt;/p&gt;&#xA;&lt;p&gt;I suspect the last personal computer motherboards to feature grids of chips were either late-stage 286 or 386 motherboards with on-board memory such as &lt;a href=&quot;http://www.redhill.net.au/b/b-92.html#dtk-cache386&quot; rel=&quot;noreferrer&quot;&gt;this monstrous DTK 386 motherboard from 1990&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Rnu1K.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Rnu1K.jpg&quot; alt=&quot;DTK 386 motherboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;or (if they have enough chips to qualify), cache-equipped 486 motherboards such as &lt;a href=&quot;http://www.redhill.net.au/b/b-94.html#px486p3&quot; rel=&quot;noreferrer&quot;&gt;the PX486P3&lt;/a&gt; from 1994:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4qaf0.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4qaf0.jpg&quot; alt=&quot;PX486P3 motherboard&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2021-03-18T17:56:45.967" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18330" PostTypeId="2" ParentId="18327" CreationDate="2021-03-18T18:56:00.903" Score="6" Body="&lt;h2&gt;TL;DR&lt;/h2&gt;&#xA;&lt;p&gt;It's still done in today's PCs ... as long as there are still chips to be ordered.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Cases&lt;/h2&gt;&#xA;&lt;p&gt;While ordering chips neatly in rows and column is for most parts an aesthetic issue, it never vanished as such. What happened is that chips first shrunk down in size, when SMD became a thing, and second as became more integrated, producing square blobs with a lot of connections that need space to be routed, leaving fewer and fewer chips to build orderly rows and columns.&lt;/p&gt;&#xA;&lt;p&gt;While the organisation is easy to see on early 90s boards, like &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/18329/6659&quot;&gt;shown by Stephen Kitt&lt;/a&gt;, it was still there in the late 90s, like this 1996 Pentium Pro board shows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JsYWM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JsYWM.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Chips are still ordered in an upright fashion, except there are only a few left beside high integrated ones, all filling the upper right corner - with most of them turned into SMD.&lt;/p&gt;&#xA;&lt;p&gt;Today's boards, like this AMD EPYC board have their few remaining components as well ordered nicely in rows and columns. It's simply less visible among all those connectors.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Py5BJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Py5BJ.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Back in the 80s chips counted for the majority of board space - now connectors rule the space and chips have become a few, placed inbetween.&lt;/p&gt;&#xA;&lt;p&gt;That's BTW the reason why I used top end boards as example, as they are the only ones with a notable number of separate chips left. Low end boards, like this AMD RYZEN - which is essentially the same technology level than the above EPYC - feature next no no other chips beside the CPU-SoC:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gEQLc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gEQLc.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here is nothing left to be put up in a grid. Everything is within the CPU-SoC. The board doesn't hold much components beside that and power supply regulation. It's main meaning is to distribute the many contacts of the CPU-SoC to all the various connectors and interfaces. Heck, even the so called chipset, here hidden beneath fan cover in the lower right, is in low end versions simply an interface demultiplexer, as the CPU doesn't feature enough pins in parallel to provide all lines, despite having 1331 pins (falling short of 1337 :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Bottom Line&lt;/h2&gt;&#xA;&lt;p&gt;Orderly placement is still something designers do, hard to see with less and less chips.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-18T21:40:11.473" LastActivityDate="2021-03-18T21:40:11.473" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18331" PostTypeId="2" ParentId="18327" CreationDate="2021-03-18T23:29:30.053" Score="1" Body="&lt;p&gt;Apple Mac Mini M1 2021 - Not many chips on there, but the ones that are present are nicely arranged&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Gyfft.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gyfft.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So, I guess your observation is wrong.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2021-03-18T23:29:30.053" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18332" PostTypeId="2" ParentId="17545" CreationDate="2021-03-19T00:40:46.730" Score="8" Body="&lt;p&gt;Yes, actually! Probably not very many early/launch titles, but some later ones did. According to Donkey Kong Country's internal header, it does indeed use FastROM. The same can be said about Tales of Phantasia.&lt;/p&gt;&#xA;" OwnerUserId="19449" LastActivityDate="2021-03-19T00:40:46.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18333" PostTypeId="1" AcceptedAnswerId="18342" CreationDate="2021-03-19T08:39:57.930" Score="13" ViewCount="2847" Body="&lt;p&gt;According to the advertisements of the late eighties, you could find RAM having an access time ranging from 120 to 80 ns (150 to 210 cycle times). A 386SX-25 could execute a typical register to register instruction in 2 cycles of 40 ns.&lt;/p&gt;&#xA;&lt;p&gt;Would it (and all PCs of the era) need to add wait states that dropped its effective speed to 4 to 6 MHz in order to align to those memory cycle times?&lt;/p&gt;&#xA;&lt;p&gt;Then, what is the point of having a 3-stage pipeline if you had to wait years before memory could catch up, even assuming a 32-bit data bus (386DX) to fetch instructions in a single word?&lt;/p&gt;&#xA;&lt;p&gt;The VGA standard was introduced in 1987, according to Wikipedia. How could a computer of the era write all of a graphic framebuffer of 150 KB in less than 200 ms, then?&lt;/p&gt;&#xA;&lt;p&gt;Were there additional memory access optimizations allowing to speed the cycle? (Not including graphic acceleration techniques, of course.)&lt;/p&gt;&#xA;" OwnerUserId="14931" LastEditorUserId="5199" LastEditDate="2021-03-21T20:42:54.660" LastActivityDate="2021-03-21T20:42:54.660" Title="CPU frequency / memory wait states at end of the 80s" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;memory&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18334" PostTypeId="2" ParentId="9345" CreationDate="2021-03-19T09:24:34.223" Score="0" Body="&lt;p&gt;There are assemblies US versions TLS 1.0-1.2 SSL browser based on declared under windows 98 here: &lt;a href=&quot;http://www.fdd5-25.net/networks.htm#win9x&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.fdd5-25.net/networks.htm#win9x&lt;/a&gt;&#xA;Example of work here: &lt;a href=&quot;http://gallery.fdd5-25.net/details.php?image_id=5370&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://gallery.fdd5-25.net/details.php?image_id=5370&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21129" LastActivityDate="2021-03-19T09:24:34.223" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18336" PostTypeId="2" ParentId="18333" CreationDate="2021-03-19T10:16:30.113" Score="24" Body="&lt;p&gt;While the 386 did not yet have an internal cache, many 386-era chipsets supported an SRAM based CPU-external cache memory of maybe 32KB or so, consisting of a very fast (for the time) tag SRAM which stored the correspondence between RAM addresses and SRAM addresses, and 4-8 fast SRAMs holding the cache contents. Not sure about the late 1980s, but in the early 1990s those were very common on 386 boards. Often, caches could be upgraded by the user inserting more and/or larger SRAMs and setting some jumpers.&lt;/p&gt;&#xA;&lt;p&gt;Such a cache would have reduced latency by a lot if and when a RAM address was already in the cache. In case of tight inner loops addressing rather small amounts of data, this pretty much eliminated DRAM latency.&lt;/p&gt;&#xA;" OwnerUserId="21130" LastActivityDate="2021-03-19T10:16:30.113" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18337" PostTypeId="2" ParentId="18333" CreationDate="2021-03-19T11:35:03.907" Score="13" Body="&lt;p&gt;The 80386 bus cycle is two clock cycles minimum.&lt;/p&gt;&#xA;&lt;p&gt;So a 25 MHz 80386 would have a 80ns bus cycle, and each wait state would add 40ns. So it only takes 2 wait states to use 150ns memory and 4 wait states to use 210ns memory.&lt;/p&gt;&#xA;&lt;p&gt;True, with 4 wait states at 25 MHz, the memory access cycle is 240ns, or about 4 MHz.&lt;/p&gt;&#xA;&lt;p&gt;One thing that also has to be considered that on average, even with 0WS memory like SRAM, the bus utilization is 73% (as per 80386 Hardware Reference Manual). Adding 3 wait states makes the bus utilization go to 93%, so memory has to be waited more often, but not all the time.&lt;/p&gt;&#xA;&lt;p&gt;Because of the instructions are prefetched to the 16-byte (12-byte?) queue and then having the 3-stage pipeline for decoding, it does not have to wait decoding instructions for execution when memory is busy doing data reads and writes, and depending on what kind of processing is being done, an occasional memory load or store may not be a bottleneck.&lt;/p&gt;&#xA;&lt;p&gt;Compared to previous generation 80286, even for clock-per-clock, the 80386 improves execution times for many instructions, and as the bus is double as wide so 32 bits can be transferred in a single memory cycle by using the 386 specific instructions to do so.&lt;/p&gt;&#xA;&lt;p&gt;And as mentioned, at some point caches were used to improve performance.&lt;/p&gt;&#xA;&lt;p&gt;And so if memory accesses happen at around 4 MHz rate, and can be done 4 bytes per access, copying a 150k frame buffer from memory to memory in 200ms is only 1536kbytes/second to be read+written.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2021-03-19T11:35:03.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18338" PostTypeId="2" ParentId="18333" CreationDate="2021-03-19T13:39:43.933" Score="7" Body="&lt;p&gt;Moving away from x86 for a moment, let's talk about the early ARM CPUs used in the Acorn Archimedes series computers.  The ARM1 prototype first ran in 1985, and the Archimedes arrived in 1987 using the ARM2 production model.&lt;/p&gt;&#xA;&lt;p&gt;Maximising memory access performance was a key part of the ARM design, recognising that this had become the main limitation on computer performance.  Transistor budgets weren't yet large enough to make on-chip caches really practical (though the 68030, for example, had tiny ones), and the ARM didn't exactly push the bleeding edge in that respect (with fewer transistors than the much older and slower 68000).  Instead, a wide 32-bit bus was employed with good use made of the Fast Page Mode of typical DRAMs.&lt;/p&gt;&#xA;&lt;p&gt;Fast Page Mode simply means that if the &amp;quot;row&amp;quot; addresses of two consecutive DRAM accesses are the same, you don't need to provide the row address again, only the &amp;quot;column&amp;quot; address and the read/write signals.  This also skips the actually slow parts of a DRAM access - pulling data out of the &amp;quot;row&amp;quot; of capacitor cells into the &amp;quot;row buffer&amp;quot;, and writing it back afterwards.  Fast Page Mode accesses therefore take much less time than &amp;quot;random&amp;quot; accesses, and the &amp;quot;random&amp;quot; speed only applies to switching between rows.&lt;/p&gt;&#xA;&lt;p&gt;Because the ARM is a RISC CPU, it does most of its computation in a large register set and only occasionally needs to use load and store instructions.  Most consecutive accesses are therefore instruction fetches in sequence.  By the time a load, store, or branch instruction has got far enough in the pipeline to actually be executed, the memory controller has been informed that the sequential access sequence will end and the RAM should be prepared for a &amp;quot;random&amp;quot; access.  The ARM also has load/store multiple instructions that use Fast Page Mode.&lt;/p&gt;&#xA;&lt;p&gt;Given a typical &amp;quot;150ns&amp;quot; DRAM of the time, the 150ns refers to the minimum guaranteed access latency between the &amp;quot;row&amp;quot; address being provided and valid data being output and stable on the bus.  The &amp;quot;random&amp;quot; cycle time is more like 230ns, including the actions needed to prepare the DRAM for the next &amp;quot;random&amp;quot; access.  But the access latency of a Fast Page Mode access is just 70ns, and the cycle time is 130ns.&lt;/p&gt;&#xA;&lt;p&gt;This means a 12MHz CPU like the ARM2 can perform sequential accesses to the same DRAM chip every 2 clock cycles, but it needs a total of 3 cycles to perform a random access.  If two banks of DRAM are provided (ie. two full-width sets of DRAM chips) with separate /CAS strobe lines, and addresses are interleaved between them, then sequential accesses can occur every single cycle (alternately to each bank) while random accesses still take 3 cycles (to any one bank).&lt;/p&gt;&#xA;&lt;p&gt;This was a large factor in the performance advantage of the ARM over its contemporaries, most of which required multiple cycles per memory access even when operating sequentially, and also required more memory access cycles on average to perform any given task.&lt;/p&gt;&#xA;&lt;p&gt;In 1989, the ARM3 introduced an on-chip 4KB cache, and used this to double the clock speed over the ARM2.  Reads could be serviced from the cache at full speed, and cacheline fills were always sequential accesses of 16 bytes each (one &amp;quot;random&amp;quot; plus three Fast Page Mode 32-bit cycles).  The cache was write-through, so single writes still took the full &amp;quot;random&amp;quot; access time and only Store Multiple instructions were sequential writes.  This did make an already very fast home computer (for its time) even faster.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2021-03-19T13:39:43.933" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18339" PostTypeId="1" CreationDate="2021-03-19T16:18:20.727" Score="1" ViewCount="163" Body="&lt;p&gt;Does the computing power of the average people in the household increase at a steady pace or has it wax and waned over the years? Are there some eras of computers where computing power grew faster than others or has it been a steady increase in power since personal computers became a thing?&lt;/p&gt;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&lt;p&gt;I'm interested in home computing, in the US. Computers that were generally accessible and not overly expensive. Just generally how has the average person's computer power increased over the course of the computer revolution? Was it a steady increase or did the increase vary?&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="15334" LastEditDate="2021-03-19T17:41:04.307" LastActivityDate="2021-03-19T22:27:57.690" Title="Did the computing power of end users increase at a steady pace over the years?" Tags="&lt;history&gt;&lt;performance&gt;" AnswerCount="1" CommentCount="15" ClosedDate="2021-03-20T04:07:02.807" ContentLicense="CC BY-SA 4.0" />
  <row Id="18340" PostTypeId="1" AcceptedAnswerId="18341" CreationDate="2021-03-19T16:55:21.320" Score="4" ViewCount="384" Body="&lt;p&gt;ECMA was the body that formalized JavaScript while ANSI was as I understand it the body that formalized much of the early C programming language, what became known as ANSI C. Are these two organizations at all connected with one another, do they similar things for different regions? I wonder if they are at all connected.&lt;/p&gt;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&lt;p&gt;I'm specifically interested in how these two organizations came to standardized programming languages like C and JavaScript. This is a historical question, how these organizations were founded and if they fulfill a similar function over the Atlantic divide.&lt;/p&gt;&#xA;" OwnerUserId="12298" LastEditorUserId="12298" LastEditDate="2021-03-22T07:06:09.663" LastActivityDate="2021-03-30T12:12:17.077" Title="Are ECMA and ANSI sister organisations?" Tags="&lt;history&gt;&lt;programming&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18341" PostTypeId="2" ParentId="18340" CreationDate="2021-03-19T17:02:10.190" Score="10" Body="&lt;p&gt;Both &lt;a href=&quot;https://en.wikipedia.org/wiki/American_Standards_Association&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANSI&lt;/a&gt;, the American National Standards Institute (formerly &lt;a href=&quot;https://en.wikipedia.org/wiki/American_Standards_Association&quot; rel=&quot;nofollow noreferrer&quot;&gt;the American Standards Association&lt;/a&gt;), and &lt;a href=&quot;https://en.wikipedia.org/wiki/Ecma_International&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ecma International&lt;/a&gt; (formerly the European Computer Manufacturers Association) are standards development bodies. They are not sister organisations, they were formed independently; ANSI is quite a bit older than ECMA.&lt;/p&gt;&#xA;&lt;p&gt;ANSI and ECMA did similar things for different regions (on opposite sides of the Atlantic Ocean), with different areas of responsibility. ANSI has a much wider scope than ECMA (and Ecma), and different positioning: while Ecma develops standards directly, ANSI accredits standards and standards development processes. Ecma now considers itself an international organisation, no longer European only; ANSI operates only within the United States.&lt;/p&gt;&#xA;&lt;p&gt;Some of their work overlaps, as demonstrated by their standardisation or accreditation of programming languages, and there are connections; in particular, both ANSI and Ecma have produced standards which have been ratified by &lt;a href=&quot;https://en.wikipedia.org/wiki/International_Organization_for_Standardization&quot; rel=&quot;nofollow noreferrer&quot;&gt;the International Organization for Standardisation&lt;/a&gt; (ISO) — including ANSI C, &lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASCII&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO_9660&quot; rel=&quot;nofollow noreferrer&quot;&gt;ISO 9660&lt;/a&gt;...&lt;/p&gt;&#xA;&lt;p&gt;C ended up standardised by ANSI for procurement reasons. As Dennis M. Ritchie explained in &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/chist.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;The Development of the C Language&lt;/em&gt;&lt;/a&gt;,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The first edition of K&amp;amp;R was also insufficiently precise on many details of the language, and it became increasingly impractical to regard &lt;em&gt;pcc&lt;/em&gt; as a ‘reference compiler;’ it did not perfectly embody even the language described by K&amp;amp;R, let alone subsequent extensions. Finally, the incipient use of C in projects subject to commercial and government contract meant that the imprimatur of an official standard was important. Thus (at the urging of M. D. McIlroy), ANSI established the X3J11 committee under the direction of CBEMA in the summer of 1983, with the goal of producing a C standard. X3J11 produced its report [ANSI 89] at the end of 1989, and subsequently this standard was accepted by ISO as ISO/IEC 9899-1990.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;From Bell Labs’ perspective, the governmental aspect would have led to requiring a standard approved in the US, which would mean involving ANSI. C isn’t the only or even first language in this situation; the first was Fortran, followed by COBOL.&lt;/p&gt;&#xA;&lt;p&gt;As for why ECMA ended up standardising JavaScript as ECMAScript, the story suggests that this was a case of politics, time pressure, and knowing the right people. Brendan Eich, JavaScript’s creator, has spoken about this a number of times, &lt;em&gt;e.g.&lt;/em&gt; &lt;a href=&quot;https://devchat.tv/js-jabber/124-jsj-the-origin-of-javascript-with-brendan-eich/&quot; rel=&quot;nofollow noreferrer&quot;&gt;in this podcast&lt;/a&gt;; in the latter, he explains that Microsoft was putting pressure on Netscape around JavaScript, so Netscape decided the best way to avoid having Microsoft wrest control of JavaScript (by way of the potentially de facto standard implementation in Internet Explorer) was to standardise it, and it happened that Carl Cargill, Netscape’s standards representative, knew Jan van den Beld, who was ECMA’s secretary general at the time. &lt;a href=&quot;https://www.wired.com/1997/08/when-it-comes-to-standards-everyones-a-suit/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This Wired article on the subject&lt;/a&gt; puts it thus:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;With the Netscape-originated and widely used scripting language JavaScript, Netscape avoided the W3C altogether - because, Cargill says, it was &amp;quot;the most contentious spec ever produced,&amp;quot; and the company wanted a review board that &amp;quot;wasn't mired in politics.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;Cargill says Netscape sought out ECMA to approve JavaScript last November because it believed the lesser-known standards body would be able to quickly and objectively administer the process. Microsoft charged Netscape with purposefully delaying the approval process, and with failing to release JavaScript source code that could be integrated into its Internet Explorer browser. When Netscape sought ECMA approval, Microsoft and Cisco promptly joined the body's general assembly. An open standard &amp;quot;ECMAScript&amp;quot; was subsequently born in late June.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-03-22T09:20:20.390" LastActivityDate="2021-03-22T09:20:20.390" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18342" PostTypeId="2" ParentId="18333" CreationDate="2021-03-19T19:10:52.863" Score="17" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;According to the advertisements of the late eighies, you could find RAM having an access time ranging from 120 to 80 ns (150 to 210 cycle times).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which means essentially up to 6 million full access operations per second.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A 386SX-25 could execute a typical register to register instruction in 2 cycles of 40 ns. Would it (and all the PC of the era) need to add wait states that dropped its effective speed to 4 to 6 MHz in order to align to those memory cycle times?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;True for complete random access, ignoring page mode. Consecutive access like usually with program, will use page mode, were only the first access needs to be full length.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Then what is the point of having a 3 stage pipeline&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Erm, according to intel documentation it's 6 stages (*1)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;if you had to wait years before memory could catch up, even assuming a 32 bits data bus (386DX) to fetch instructions in a single word?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Uh-Oh. Timing is way more complex than just counting cycles. There are (at least) two actors, Cpu and memory. For the CPU basic considerations are&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Basic access time for a 386 type CPU for memory is &lt;em&gt;always&lt;/em&gt; two bus cycles (= two clock cycles), named T1 and T2 (*2)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The 80386 offered a pipelined addressing mode. When an address was acknowledged during the first access cycle (T1) by asserting /NA (Next Address), then the next address was already supplied during T2 of the previous access. So usage of an external Essentially extending access time to three cycles.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The 386DX does 32 bit instruction fetch, so four bytes in one cycle, a 386SX does two.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The 386, like all x86, has its BIU (Bus Interfac Unit) running asynchron to the EU (Execution Unit). This allows the Prefetch Unit to fetch instructions independent and ahead of time.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Prefetch Unit maintains a 4 word (16 byte) queue. This is not a synchronous pipeline stage, but a real independent prefetch. The PU issues a read request toward the BIU every time there is room in the queue for (at least) one word (32 bit). This request got lowest priority, thus will be executed whenever there is no other task to do. Essentially using all free cycles to keep the queue topped up&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;For RAM there comes at minimum the difference between full cycle access, which is 150 ns in your example and CAS only access (page mode) access which can be used for consecutive access, getting it down to 80 ns.&lt;/p&gt;&#xA;&lt;p&gt;For program execution this works as follow:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A 25 MHz 386 got a 40 ns cycle time, thus two cycles give 80 ns for access. So with 150 ns cycle time RAM two TI (wait cycles) are needed for any random access, while only one is needed for consecutive (page mode) access (*3)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Address pipelining stretches the time between address output and data read to 120 ns, thus reducing the need for a wait state to only random access and only a single TI. this is especially noteworty for 386SX boards, as the do a lot of consecutive access.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;32 bit (386DX) access acts faster than needed by fastest operations, while 16 bit (386DX) even acts faster than needed.&lt;/p&gt;&#xA;&lt;p&gt;The mentioned RR type move is two bytes long an takes two cycles to execute. Without wait states the same two cycles fetching two bytes (386SX) or &lt;em&gt;four&lt;/em&gt; bytes. So for this (narrow) example the 386DX BIU is fetching instructions twice as fast as the EU can handle them. It's rather the fast instructions with long encoding that may slow execution - but even there it levels out rather fine.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The BIU can insert code fetch whenever the PU has room (i.e. requests a word) and no otehr access (usually data) is pending.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Being a true asynchronous word wise queue, it doesn't act like a fixed function pipeline stage handling instructions, but more basic (and abstract) as a dynamic buffer on word level, thus working more efficient than instruction based read ahead.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;With all of this combined the 386DX executes in a near wait less manner up to 20-25 MHz from standard (fast) page mode RAM. Only for speeds past 20-25 MHz a cache &lt;em&gt;could&lt;/em&gt; add performance.&lt;/p&gt;&#xA;&lt;p&gt;Conclusion: &lt;strong&gt;A 386DX could come close to it's maximum performance with 80 ns RAM&lt;/strong&gt; (and a well designed board).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;And Now For Something Complete Different&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The VGA standard was introduced in 1987, according to Wikipedia. How a computer of the era could write in a graphic framebuffer of 150K in less than 200ms, then?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There are a few misconceptions here&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;VGA is not main memory, it is I/O bus, aka ISA-bus.&lt;/li&gt;&#xA;&lt;li&gt;ISA Bus is limited to 16 bit (usually with wait states)&lt;/li&gt;&#xA;&lt;li&gt;ISA Bus is limited to 6(8) MHz (without overclocking that is *4)&lt;/li&gt;&#xA;&lt;li&gt;VLB with faster (and 32 Bit) access wasn't introduced until ca. 1993.&lt;/li&gt;&#xA;&lt;li&gt;To make it worse, genuine VGA is limited to 8 Bit transfers&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;last but not least,&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;VGA at that time meant 320x200 and fits in 64 KiB :))&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Maximum thruput on 8 MHz 8 bit bus is 8 MB/s (*5) quite enough for 60 frame copies with 64 KiB each. Double buffering could enable a smooth display. Still it would occupy &amp;gt;50% CPU time to frame transfer, leaving not much time to calculate the next frame.&lt;/p&gt;&#xA;&lt;p&gt;And this is essentially were the most basic misconception lies: The assumption of screen operation in terms of full frames submitted. Games that rely on frame redraw, like DOOM, could simply not display a full screen rendering on a 386. It needed a fast 33 MHz 486 and VLB or PCI VGA cards to even do 320x200 in all beauty.&lt;/p&gt;&#xA;&lt;p&gt;Long story short: Games were a complete different beast back than then now - almost as much as they were different from an Atari 2600. Similar 'high' resolution usage in any other program. So never 'backport' today's approach and usage of computers back to that time.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Not arguing here, just referencing to page 2-1 of the 80286 Hardware Reference Manual stating &lt;em&gt;&amp;quot;The six-stage pipelined processing of the 80386 ...&amp;quot;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;*2 - Inserted wait cycles (TI) are essentially repeated T2 cycles.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Although that is rather tight and depends a lot on address decoding, multiplexing and forwarding logic. Essentially a case were slower clock 386, like 20 MHz, will be faster than its 25 MHz brother.&lt;/p&gt;&#xA;&lt;p&gt;*4 - This is also why it was so important to get a board that allowed to increase I/O-clock past 8 MHz&lt;/p&gt;&#xA;&lt;p&gt;*5 - Lets ignore for this that default was 6 MHz and many boards inserted by standard (and default) wait states. Similar ignoring possible page flipping and alike.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-19T20:47:54.710" LastActivityDate="2021-03-19T20:47:54.710" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="18343" PostTypeId="2" ParentId="18340" CreationDate="2021-03-19T19:33:20.353" Score="7" Body="&lt;p&gt;No, they are not. Their base and reach is different.&lt;/p&gt;&#xA;&lt;p&gt;ANSI is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Standards_organization&quot; rel=&quot;nofollow noreferrer&quot;&gt;national standards body&lt;/a&gt;. Its counterparts (sisters) are other national standards organisations like &lt;a href=&quot;https://en.wikipedia.org/wiki/Deutsches_Institut_f%C3%BCr_Normung&quot; rel=&quot;nofollow noreferrer&quot;&gt;DIN&lt;/a&gt; in Germany or &lt;a href=&quot;https://en.wikipedia.org/wiki/Gosstandart&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gosstandart&lt;/a&gt; in the Soviet Union. These three are the most influential. Their work is adopted by many other standards bodies (including ISO) without or only minor modification. Almost every country has such a standards body to create and maintain national standards. They are not only meant to help industrial standardisation, but also to support nationwide regulations/laws — such as defining what a day is or a meter. Their work is to support general standards across all kinds of application.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ecma_International&quot; rel=&quot;nofollow noreferrer&quot;&gt;ECMA&lt;/a&gt; in contrast is a trade organisation; its US counterpart would be &lt;a href=&quot;https://en.wikipedia.org/wiki/Institute_of_Electrical_and_Electronics_Engineers&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEEE&lt;/a&gt;. &lt;a href=&quot;https://en.wikipedia.org/wiki/SAE_International&quot; rel=&quot;nofollow noreferrer&quot;&gt;SAE&lt;/a&gt; is a similar organisation. Trade standards organisations are special topic bodies with an intention to regulate specific cases within an industry. This can be a large chunk like, for example ECMA, IEEE or SAE, or very specific things like &lt;a href=&quot;https://en.wikipedia.org/wiki/PCI-SIG&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCI-SIG&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/USB_Implementers_Forum&quot; rel=&quot;nofollow noreferrer&quot;&gt;USB-IF&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Video_Electronics_Standards_Association&quot; rel=&quot;nofollow noreferrer&quot;&gt;VESA&lt;/a&gt; for their respective interfaces.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-30T12:12:17.077" LastActivityDate="2021-03-30T12:12:17.077" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18344" PostTypeId="2" ParentId="18339" CreationDate="2021-03-19T22:19:54.390" Score="3" Body="&lt;p&gt;Personal and home computers have improved with computer technology in general over the last 40 years or so.  Over the period of 1990 to 2005, the technology underlying personal computers, particularly the family that started as &amp;quot;IBM PC compatible&amp;quot;, became the main platform for all computing.  Most servers and even supercomputers over the last couple decades are derived from that platform.  And you can generally buy the same underlying hardware in a desktop form factor, at the premium end of personal computers.  (Whether this will remain true for much longer is unclear.  Tablets and smartphones may be an upset just as PCs were to the minicomputers that came before them.)&lt;/p&gt;&#xA;&lt;p&gt;There have been periods when the cost-per-performance increase has stalled.  For example, there are several periods of DRAM shortage historically which briefly flattened the otherwise downward trend in $ per kilo/mega/giga/terabyte of DRAM.  But as a general rule, personal computers have gotten faster, more efficient and cheaper, continuously since shortly after their introduction.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2021-03-19T22:27:57.690" LastActivityDate="2021-03-19T22:27:57.690" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18345" PostTypeId="1" AcceptedAnswerId="18349" CreationDate="2021-03-19T23:15:45.777" Score="12" ViewCount="3894" Body="&lt;p&gt;I'd like to buy an old green-on-black or amber-on-black computer monitor, but I'm not sure what to search for.  Are they called &amp;quot;monochrome&amp;quot; monitors, or something else?&lt;/p&gt;&#xA;&lt;p&gt;What I want is one of those with glowing green letters made of thin lines on a solid black screen.  When I search for monochrome monitors I find a lot of what looks like black-and-white monitors.&lt;/p&gt;&#xA;&lt;p&gt;What I want is one of those with glowing green letters made of thin lines on a solid black scree&lt;/p&gt;&#xA;&lt;p&gt;Also, when looking for a vintage one, what are the best brands and models to search for?&lt;/p&gt;&#xA;" OwnerUserId="21076" LastEditorUserId="21076" LastEditDate="2021-03-19T23:55:04.713" LastActivityDate="2021-03-23T04:12:37.180" Title="What is the correct name for the old green/amber-on-black monitors, and what are the best vintage models to look for used?" Tags="&lt;crt-monitor&gt;" AnswerCount="9" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18346" PostTypeId="2" ParentId="18345" CreationDate="2021-03-20T00:05:22.783" Score="21" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Are they called &amp;quot;monochrome&amp;quot; monitors, or something else?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. Monochrome covers all that paint in Amber, Green, Blue or white on black.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What I want is one of those with glowing green letters made of thin lines on a solid black screen.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That sounds more as if you're looking for a vector display. Something incompatible with most old hardware and total incompatible with today's computers.&lt;/p&gt;&#xA;&lt;p&gt;Which brings us to the more important question here: What computer do you want to connect it to and/or what output does it provide. 'Course it won't help to find a nice old screen if it's incompatible with the machine you want to use it with.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Also, when looking for a vintage one, what are the best brands and models to search for?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Doesn't really matter.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-03-20T00:05:22.783" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="18347" PostTypeId="2" ParentId="18345" CreationDate="2021-03-20T00:18:13.803" Score="5" Body="&lt;p&gt;They were generally called &lt;a href=&quot;https://en.wikipedia.org/wiki/VT220&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;computer terminals&amp;quot;&lt;/a&gt; rather than &amp;quot;monitors&amp;quot;. They came with a keyboard, character ROMs, interface devices, etc.&lt;/p&gt;&#xA;&lt;p&gt;The VT220 came in white, green, or amber phosphors.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-03-20T00:23:56.183" LastActivityDate="2021-03-20T00:23:56.183" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18348" PostTypeId="2" ParentId="18345" CreationDate="2021-03-20T04:36:23.213" Score="5" Body="&lt;p&gt;What you are describing is a cathode ray tube (CRT) that could be part of a terminal such as a VT220 or an ADM5, but it could also be a standalone monitor.  Early (80s) home computers would typically connect to a television (either mono or colour), some machines like the PET and IBM System/23 had a built-in CRT and others again used a standalone monitor.  The main difference between a TV and a monitor is that a monitor accepts direct video signals rather than decoding VHF/UHF, resulting in a much clearer image.&lt;/p&gt;&#xA;" OwnerUserId="19372" LastActivityDate="2021-03-20T04:36:23.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18349" PostTypeId="2" ParentId="18345" CreationDate="2021-03-20T05:06:08.410" Score="17" Body="&lt;p&gt;A &amp;quot;monochrome&amp;quot; screen refers to any display which only displays one colour, based on the type of phosphor used. The type you are after is more specifically called a &amp;quot;green screen&amp;quot; monitor. Unfortunately an internet search for this term is going to produce a lot of stuff about movie green-screens - perhaps searching for &amp;quot;green screen CRT&amp;quot; will be more helpful.&lt;/p&gt;&#xA;&lt;p&gt;As to what type you should get - that depends on what you plan to do with it. What are you going to hook it up to? Do you want a monitor you might be able to use on a modern PC? On an old PC? A more historic 8 bit computer? A mainframe?&lt;/p&gt;&#xA;&lt;p&gt;Historically, you're going to come across two types of green-screen monitors. First, the basic monitor designed to receive a video input signal from a computer - just like the monitors we all know today, although the input connection is going to be quite different. Most common on IBM-style PCs was the 9 pin D-connector (DE-9) although you might also find monitors that use composite video or S-Video ports, or even something proprietary to the system they came with.&lt;/p&gt;&#xA;&lt;p&gt;The second type is part of a &amp;quot;Dumb Terminal&amp;quot; or just &amp;quot;Terminal&amp;quot;. This is a monitor/keyboard combination that is designed to connect to a computer via a serial port, such as an RS-232 connector. These provide all the display hardware and character set necessary to display an image, typically 80x24 or 80x25 text. They were used for connecting to mainframes and early personal computers which didn't provide their own display capabilities. Their advantage was the computer didn't need to waste memory storing the contents of the screen, or incorporating expensive video display chips. They could also be connected over a distance, even via a modem. The computer simply sends text output to the terminal and leaves it up to the terminal to handle the display. Formatting is done via sending control codes, generally ASCII 0-31.&lt;/p&gt;&#xA;&lt;p&gt;Common terminals include the VT-100 and Zenith Z-19, but there were many manufacturers.&lt;/p&gt;&#xA;" OwnerUserId="20882" LastEditorUserId="20882" LastEditDate="2021-03-20T15:18:33.467" LastActivityDate="2021-03-20T15:18:33.467" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18350" PostTypeId="2" ParentId="1985" CreationDate="2021-03-20T05:25:53.260" Score="7" Body="&lt;p&gt;If your game actually was Holtzman and Kershenblatt's &lt;em&gt;Castlequest&lt;/em&gt;, you'll be thrilled to know that that game is no longer lost! With help from Mark Kershenblatt, the Fortran source code has been retrieved from the U.S. Copyright Office and patched up to work on modern Fortran compilers. See&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://quuxplusone.github.io/blog/2021/03/09/castlequest/&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;&lt;em&gt;Castlequest&lt;/em&gt; exhumed!&amp;quot;&lt;/a&gt; (2021-03-09)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://quuxplusone.github.io/blog/2021/03/11/castlequest-update/&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;Making &lt;em&gt;Castlequest&lt;/em&gt; compilable&amp;quot;&lt;/a&gt; (2021-03-11)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/Quuxplusone/Castlequest/tree/patches#how-to-compile-and-play&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/Quuxplusone/Castlequest/tree/patches&lt;/a&gt; (the source code)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3581" LastActivityDate="2021-03-20T05:25:53.260" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18351" PostTypeId="1" AcceptedAnswerId="18352" CreationDate="2021-03-20T07:10:22.363" Score="26" ViewCount="2123" Body="&lt;p&gt;I have come across a few sources online in forums and on YouTube information related to using the Motorola 68060 in Amiga accelerators and the difficulty in sourcing genuine late revision parts. Specifically, there are a lot of fake CPUs on eBay from Chinese sources, and when genuine supplies of late revision CPUs are found there seems to be a lot of excitement.&lt;/p&gt;&#xA;&lt;p&gt;I know generally that later revisions of the 68060 fixed bugs and improve manufacturing processes, but it's not clear exactly why the latest revisions are so sought after by Amiga fans. Are earlier versions too buggy to use? Do they have deal-breaking incompatibilities? Are the later versions only sought after for their overclockability?&lt;/p&gt;&#xA;" OwnerUserId="5294" LastActivityDate="2021-03-20T18:32:55.290" Title="Why are the later revisions of the Motorola 68060 heavily sought after by Amiga fans?" Tags="&lt;amiga&gt;&lt;m68k&gt;&lt;motorola-680x0&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18352" PostTypeId="2" ParentId="18351" CreationDate="2021-03-20T11:48:02.317" Score="36" Body="&lt;p&gt;Earlier revisions had some bugs (errata) but they still work fine and the problems can be worked around. For instance the MMULibs software checks the revision of the chip when the computer boots and disables some problematic features. Doing that has a slight hit on performance but it's probably not noticeable.&lt;/p&gt;&#xA;&lt;p&gt;The main reason why chips with revision 6 are so sought after is instead their ability to be overclocked. Motorola and Freescale never released any version of the 68060 rated for more than 75 MHz, but at least the full version of the chip with both MMU and FPU at that speed are really uncommon so the vast majority are only rated for 50 MHz. But for instance I run a 50 MHz revision 6 chip at 66 MHz without any cooling in an Amiga 1200. With a proper heat sink and fan it could easily do 80 MHz and if you're lucky with the silicon lottery 90-100 MHz isn't uncommon.&lt;/p&gt;&#xA;&lt;p&gt;That's quite a lot faster than the earlier chips. From what I've heard, the first revision 060 can often be overclocked to around 60 MHz and revisions in between might handle around 75 MHz. And that's only with a decent heat sink and fan.&lt;/p&gt;&#xA;&lt;p&gt;The sixth revision was also produced with a smaller manufacturing process so it runs cooler. That's nice in a computer without fans like the Amiga 500 or 1200.&lt;/p&gt;&#xA;&lt;p&gt;This combined with the fact that several new accelerators for common Amiga models was announced made the rev 6 really rare. The creator of one of the projects abandoned it before it was released and the Warp 1260 has been delayed but both of those projects required the user to supply the CPU, so users bought the chips last year to prepare. That made the price go up and the market was flooded with fake chips. The fakes are often earlier revisions, sometimes without FPU or MMU, that has been rebranded.&lt;/p&gt;&#xA;&lt;p&gt;Like with anything retro computing related nobody really needs a rev 6 but if you're going to accelerate your decades old computer, why not go as far as you can?&lt;/p&gt;&#xA;" OwnerUserId="21136" LastEditorUserId="453" LastEditDate="2021-03-20T18:32:55.290" LastActivityDate="2021-03-20T18:32:55.290" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18354" PostTypeId="1" AcceptedAnswerId="18368" CreationDate="2021-03-20T21:27:29.007" Score="6" ViewCount="272" Body="&lt;p&gt;Building a Z80 computer after completing one with 65c02.&lt;/p&gt;&#xA;&lt;p&gt;Z80 on my project needs some pins to be tied high (INT, NMI, WAIT, BUSRQ), these are the ones that I don't need for the time being. There are many diagrams where these are directly connected to 5v Vcc, and many others they are connect to Vcc via a resistor of up to 1K.&lt;/p&gt;&#xA;&lt;p&gt;Datasheet wasn't helpful in deciding whether I needed resistors or not (or perhaps my limited knowledge).&lt;/p&gt;&#xA;&lt;p&gt;What is the correct approach here ? Are the resistors definitely needed ? Or my circuit is working just by sheer luck and about to fry any moment ?&lt;/p&gt;&#xA;" OwnerUserId="21002" LastActivityDate="2021-03-22T16:06:58.000" Title="Z80, do I need a resistor for pins to Vcc?" Tags="&lt;z80&gt;&lt;cpu&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18355" PostTypeId="2" ParentId="18345" CreationDate="2021-03-20T22:22:10.307" Score="4" Body="&lt;p&gt;My favorites (back in the day) were DEC's VT-100 and VT-220 lines. I also had good luck with Wyse terminals (the Wyse-60 terminal actually had a calculator app built in). The Lear-Siegler ADM-3a models were pretty horrible, I think every one we had in the computer labs in college had had its speaker gouged out or stuffed full of gum. Datamedia DT-80s were VT-100 clones, they looked like mil-spec hardware, which meant they were ugly and built like tanks.&lt;/p&gt;&#xA;&lt;p&gt;If I were spending the money, I'd try to pick up a VT-100, as they were good-looking and functional terminals (loved the 132-column mode). You might also want to look for a GiGi (DEC's color ReGIS terminal) if you want to do any graphics work (although the Tektronix 4010 and 4014 were better, if you could get past the whole &amp;quot;storage tube&amp;quot; thing).&lt;/p&gt;&#xA;" OwnerUserId="484" LastActivityDate="2021-03-20T22:22:10.307" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18356" PostTypeId="1" CreationDate="2021-03-21T00:31:42.110" Score="1" ViewCount="198" Body="&lt;p&gt;Is there an off the shelf converter / adapter from C128 RGBI to VGA that will work with modern-ish low voltage VGA?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="15334" LastEditDate="2021-03-21T08:10:41.113" LastActivityDate="2021-03-24T16:00:47.503" Title="RGBI to VGA converter" Tags="&lt;video&gt;&lt;commodore-128&gt;&lt;vga&gt;&lt;old-hardware-adaptation&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2021-03-27T05:12:32.053" ContentLicense="CC BY-SA 4.0" />
  <row Id="18357" PostTypeId="2" ParentId="18356" CreationDate="2021-03-21T08:41:01.623" Score="3" Body="&lt;p&gt;RGBI to RGB only needs a couple of diodes and resistors, see e.g. &lt;a href=&quot;https://frank-buss.de/c128/vdc/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, and that will work with VGA-RGB. I am not aware off-the-shelf ones for that are available, OTOH they are not exactly difficult to make yourself.&lt;/p&gt;&#xA;&lt;p&gt;I have no idea what @mnem means by &amp;quot;RGBA&amp;quot;, usually this is an abbreviation for red-green-blue-alpha, and refers to how image data is stored on memory. There is no alpha channel when outputting this.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Here's the RGBI to VGA RGB conversion circuit:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YKAJS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YKAJS.png&quot; alt=&quot;Schematic&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&#xA;&lt;sup&gt;Credit: Alex Hajnal based on circuit by &lt;a href=&quot;https://frank-buss.de/c128/vdc/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Frank Buß&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;The circuit above was based on the one shown below (from &lt;a href=&quot;https://sites.google.com/site/h2obsession/CBM/C128/rgbi-to-vga&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt;).  Personally&lt;sup&gt;1&lt;/sup&gt; I'd go with the former circuit.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SPdzh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SPdzh.png&quot; alt=&quot;Alternate schematic&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&#xA;&lt;sup&gt;Credit: Alex Hajnal based on circuit by &lt;a href=&quot;https://sites.google.com/site/h2obsession/CBM/C128/rgbi-to-vga&quot; rel=&quot;nofollow noreferrer&quot;&gt;H2Obsession&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Personally == @AlexHajnal's opinion&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="7347" LastEditDate="2021-03-24T16:00:47.503" LastActivityDate="2021-03-24T16:00:47.503" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18358" PostTypeId="2" ParentId="18345" CreationDate="2021-03-21T11:28:30.360" Score="3" Body="&lt;p&gt;Back in ancient times, we mainframe type people were given a &amp;quot;terminal&amp;quot;, aka &amp;quot;CRT&amp;quot; (for Cathode Ray Tubes), or more simply, just &amp;quot;tube&amp;quot;. They were &lt;a href=&quot;https://www.google.com/search?q=ibm%203278&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 3278 (green)&lt;/a&gt; and/or 3279 (four color) models, and loads of compatibles. The &amp;quot;real&amp;quot; ones from IBM weighed about 12 metric shit-tons.&lt;/p&gt;&#xA;&lt;p&gt;And yes, their characters were composed of barely-discernible thin horizontal green lines... that's where the cathode ray would sweep across the phosphor, left-to-right, top-to-bottom.&lt;/p&gt;&#xA;&lt;p&gt;Screensavers were originally created because if you left the screen on, eventually the image was burned into the phosphor. Screensavers were top-sellers back when PCs were new, I remember the ones with winged flying toasters, the package was called &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/After_Dark_(software)&quot; rel=&quot;nofollow noreferrer&quot;&gt;After Dark&lt;/a&gt;&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="21140" LastEditorUserId="21140" LastEditDate="2021-03-21T11:47:39.403" LastActivityDate="2021-03-21T11:47:39.403" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18359" PostTypeId="1" AcceptedAnswerId="19499" CreationDate="2021-03-21T13:19:49.000" Score="4" ViewCount="293" Body="&lt;p&gt;With a new purchase coming in shortly I wanted to ask what do I need to be able to SSH to a remote host from amiga:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;make modem work and connect to my network: &lt;a href=&quot;https://www.ebay.com/itm/KCWIFI-PRO-c64-plus4-c128-Amiga-Apple-II-PET-retro-rs232-modem-wifi-hayes-AT/154303064959?hash=item23ed2deb7f:g:4F8AAOSwfrleChLb&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ebay.com/itm/KCWIFI-PRO-c64-plus4-c128-Amiga-Apple-II-PET-retro-rs232-modem-wifi-hayes-AT/154303064959?hash=item23ed2deb7f:g:4F8AAOSwfrleChLb&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;install ssh client: &lt;a href=&quot;http://amiga.sourceforge.net/?showpackage=OpenSSH&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://amiga.sourceforge.net/?showpackage=OpenSSH&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;configure? what how&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Seems like a daunting task considering never done it before, but is my thinking correct? Did I miss anything or is there any gotchas to bear in mind?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2021-04-03T18:42:46.063" Title="SSH from Amiga to remote linux host, what do I need?" Tags="&lt;amiga&gt;&lt;network&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18360" PostTypeId="2" ParentId="18345" CreationDate="2021-03-21T20:28:25.183" Score="2" Body="&lt;p&gt;What are you probably referring to, was known as &amp;quot;Hercules graphics card&amp;quot; for IBM PC (XT,AT) compatible computers. Or more often &amp;quot;Hercules compatible graphics card&amp;quot;. These cards were driving monochrome (&amp;quot;Hercules compatible&amp;quot;) monitors, which were monochrome monitors with DE-9 connectors and 5V (TTL signal level).&lt;/p&gt;&#xA;&lt;p&gt;To recreate the original &amp;quot;feeling&amp;quot; of the monochrome Hercules display/card setup you would need both, as the &amp;quot;lines&amp;quot; you are talking about are probably the horizontal scanlines, which depend on the resolution of the card as well. They came to market about 40 years ago, so good luck.&lt;/p&gt;&#xA;" OwnerUserId="21143" LastActivityDate="2021-03-21T20:28:25.183" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18361" PostTypeId="1" AcceptedAnswerId="18367" CreationDate="2021-03-21T22:09:29.037" Score="0" ViewCount="193" Body="&lt;p&gt;I have Workbench 3.1 install with Scalos and some other tweaks installed from scratch using one of numerous online guides. My machine is a CDTV with 3.1 Kickstart, TF536 030 MMU 64MB RAM. The chipsets in this machine if I understand correctly are ECS Angus and ECS Denise. Is that correct?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://amiga.resource.cx/mod/cdtv2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://amiga.resource.cx/mod/cdtv2.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Would they not produce colours in higher resolutions?&lt;/p&gt;&#xA;&lt;p&gt;On PPaint I get colours error like this and only 8 colours in total to use:&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;OS:Programs/PPaint/PPaint_Prefs/Startup_1.set&amp;quot;&#xA;Invalid number of colors for the requested screen&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://imgur.com/gallery/o9RmieQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://imgur.com/gallery/o9RmieQ&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Would these chipset be capable of running High Res Laced in 32 Colours or even more with some system tweaks?&lt;/p&gt;&#xA;&lt;p&gt;My workbench says in top left corner OCS 030, is this correct or is it because my install was done with UAE A2000 with some custom tweaks for CDTV and TF install?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2021-03-21T22:33:21.613" LastActivityDate="2021-03-22T13:59:08.997" Title="Workbench 3.1 Chipsets and graphics question" Tags="&lt;video&gt;&lt;amiga-cdtv&gt;&lt;amiga-workbench-3.1&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18362" PostTypeId="1" CreationDate="2021-03-21T22:11:06.447" Score="16" ViewCount="1688" Body="&lt;p&gt;The 'tag' on this website calls it 'VIC-20', but the VIC20 user manual (Personal Computing on the VIC20) &lt;a href=&quot;http://cini.classiccmp.org/pdf/Commodore/VIC-20%20User%27s%20Manual.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://cini.classiccmp.org/pdf/Commodore/VIC-20%20User's%20Manual.pdf&lt;/a&gt; calls the VIC either VIC20, or VIC 20.&#xA;The front cover is ambiguous due to the usage of the C= Commodore logo, but the first mention on page 3 definitely calls it the VIC20 with no space or hyphen, as does the subsequent mention on the table of contents page III. However, then page V calls it VIC 20 twice!&lt;/p&gt;&#xA;&lt;p&gt;In 2021 it seems many sites have settled on the usage of &amp;quot;VIC 20&amp;quot; which is annoying as it is less efficient as a search term than using &amp;quot;VIC20&amp;quot;, as &amp;quot;VIC 20&amp;quot; is treated as 2 words, and VIC-20 varies in search usage.&lt;/p&gt;&#xA;&lt;p&gt;My personal preference is therefore to call it the VIC20 without a space or hyphen.&#xA;Does anybody know what the official Commodore spelling was for the VIC?&lt;/p&gt;&#xA;&lt;p&gt;Stickers from the actual machine show 'VIC20' for the English language version and 'VC 20' for the German version. The ones with the C= Commodore logo and the are ambiguous, as is the monochrome version.&#xA;On the balance of probability it still looks to me like 'VIC20' is the most true name.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/5vdux.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5vdux.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8102" LastEditorUserId="8102" LastEditDate="2021-03-22T12:05:09.367" LastActivityDate="2021-03-26T15:59:11.673" Title="VIC20, VIC-20, or VIC 20?" Tags="&lt;commodore&gt;&lt;vic-20&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18363" PostTypeId="2" ParentId="18362" CreationDate="2021-03-21T22:28:58.257" Score="12" Body="&lt;p&gt;According to &lt;a href=&quot;https://www.commodore.ca/commodore-brochures/commodore-complete-line-of-products-for-1983/amp/&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; 1983 Commodore catalogue it is VIC 20 with a space.&#xA;&lt;img src=&quot;https://i1.wp.com/www.commodore.ca/wp-content/uploads/2013/06/commodore-complete-product-line-pg2.jpg&quot; alt=&quot;catalogue&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;The owner's manual also refers to the machine as VIC 20 with a space, though they seem to occasionally omit the space.&lt;/p&gt;&#xA;&lt;p&gt;I note that by contrast the VIC-1001, the Japanese model of the VIC 20, was written with a hyphen.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2021-03-21T23:07:17.380" LastActivityDate="2021-03-21T23:07:17.380" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18364" PostTypeId="1" CreationDate="2021-03-21T23:31:41.097" Score="0" ViewCount="144" Body="&lt;p&gt;I have a DOS-hosted UCSD P-System running under DOSBox. The &amp;quot;boot&amp;quot; drive for it has to be IV, but the .VOL files that I have - from several sources - don't necessarily contain .CODE files for version IV. I'm fairly sure that at least one set of .VOL files I have are for version III, and others are just completely unknown. Is there some reasonably easy way that I can determine what version a given .CODE file is for?&lt;/p&gt;&#xA;" OwnerUserId="4088" LastActivityDate="2021-03-22T07:10:48.160" Title="Identify version of UCSD P-System disks?" Tags="&lt;ucsd-p-system&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18365" PostTypeId="2" ParentId="18362" CreationDate="2021-03-22T01:06:58.280" Score="16" Body="&lt;p&gt;To start with, it was of course VC-20:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KyyMQ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KyyMQ.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;SCNR.&lt;/p&gt;&#xA;&lt;p&gt;In general I'd say VIC-20 would be the most consistent spelling. To start with, Commodore's own technical manual gives a good base, as here was no reason to enhance/mangle it for marketing purpose or textual handling.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zcGGZ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zcGGZ.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Next, the VIC-20 was first introduced in Japan as VIC-1001. This hyphenated spelling not only precedes the use of VC-20, but it is also used for all products related to the VIC, like VIC-1540 and, not at least, all cartridges, like seen here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zlrd3.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zlrd3.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Image is taken from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Super_Expander&quot; rel=&quot;noreferrer&quot;&gt;Super Expander Wiki entry&lt;/a&gt;, which gives another (albeit lower) indication by Wikipedia as well using VIC-20 as lemma.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;While next to any possible spelling has been used over time, including, but not restricted to Commodore produced items, VIC-20 seems to be a safe choice when producing new material or reffering to existing without the need to play graphical games.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-22T02:57:02.600" LastActivityDate="2021-03-22T02:57:02.600" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18366" PostTypeId="2" ParentId="18364" CreationDate="2021-03-22T07:10:48.160" Score="3" Body="&lt;p&gt;The segment dictionary of the code file has an entry that describes the version. See e.g. the &lt;a href=&quot;http://pascal.hansotten.com/uploads/ucsd/softech/UCSD%20P-System%20&amp;amp;%20UCSD%20PASCAL_Internal_Architecture_Guide.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pascal Internal Architecture Guide&lt;/a&gt;, p. 28.&lt;/p&gt;&#xA;&lt;p&gt;I once wrote an UCSD Pascal program that disassembled code files, so writing a similar program to look at that particular field for each segment shouldn't be too difficult.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-03-22T07:10:48.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18367" PostTypeId="2" ParentId="18361" CreationDate="2021-03-22T09:42:10.900" Score="4" Body="&lt;p&gt;Early models of the CDTV had OCS chips and later ones could have a mix of OCS and ECS, and some late models could have the full ECS chipset. It could also be upgraded to ECS by the user. The CDTV II that you link to was never released though so that's probably not what you have unless you own a prototype.&lt;/p&gt;&#xA;&lt;p&gt;But even if you have the full ECS chipset it didn’t increase the amount of colors in the PAL/NTSC compatible low and high resolution modes. In high resolution, with or without interlace, 16 colors is the maximum supported.&lt;/p&gt;&#xA;&lt;p&gt;To get more colors you need to run in low res, where up to 32 colors are possible. In low res there’s also the special &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_Halfbrite_mode&quot; rel=&quot;nofollow noreferrer&quot;&gt;EHB (extra half bright)&lt;/a&gt; that adds another half as bright shade to all of the 32 colors chosen, for a total of 64. Or the other special mode, &lt;a href=&quot;https://en.wikipedia.org/wiki/Hold-And-Modify&quot; rel=&quot;nofollow noreferrer&quot;&gt;HAM (Hold-And-Modify)&lt;/a&gt;, that gives 4096 colors with some quite noticeable limitations.&lt;/p&gt;&#xA;&lt;p&gt;The ECS chipset also added some new flicker free VGA compatible screen modes like Multiscan in 640x480 at 60 Hz and Euro 72 with 640x400 at 72 Hz (all of them could be doubled in height with interlace). They were only available with up to 4 colors on ECS.&lt;/p&gt;&#xA;&lt;p&gt;The reason for all of these limitations are basically limited bandwidth, and running in higher resolutions with max colors can also feel quite slow.&lt;/p&gt;&#xA;&lt;p&gt;All of this is quite easy to check, the Screen Mode prefs won’t let you choose more colors than the chipset supports for that mode.&lt;/p&gt;&#xA;&lt;p&gt;The information in the corner of your Workbench screen isn’t a standard feature in the OS, it’s probably added by Scalos. I don’t know if it’s correct or not but you can check which chipset your Amiga uses with a tool like &lt;a href=&quot;http://aminet.net/package/util/moni/WhichAmiga&quot; rel=&quot;nofollow noreferrer&quot;&gt;WhichAmiga&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="21136" LastEditorUserId="411" LastEditDate="2021-03-22T13:59:08.997" LastActivityDate="2021-03-22T13:59:08.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18368" PostTypeId="2" ParentId="18354" CreationDate="2021-03-22T16:06:58.000" Score="4" Body="&lt;p&gt;If your device is complete in the sense you won't do any changes or upgrades to it, you can connect inputs to 5v supply directly.&lt;/p&gt;&#xA;&lt;p&gt;However, if you plan to have some upgrades or changes to be implemented later, you're safe with using pullups. When you need to apply a signal to the pin, you might not bother to disconnect a pullup, which is somewhat simpler to do than disconnecting input from 5v supply.&lt;/p&gt;&#xA;&lt;p&gt;Regarding pullup size, 1k and 2k2 looks for me too small, as they source 5..2ma when applied with a logic 0. 10k looks OK.&lt;/p&gt;&#xA;&lt;p&gt;PS: and don't forget to have &lt;em&gt;strong&lt;/em&gt; pullup on CLK input of your Z80, if feeding clock off TTL (74xx or 74LSxx or 74ALSxx or 74Fxx, but not 74AC/HC/ACT/HCT) output. Unlike other Z80 inputs, CLK is not TTL-compliant.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2021-03-22T16:06:58.000" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18369" PostTypeId="2" ParentId="18345" CreationDate="2021-03-22T22:36:19.133" Score="1" Body="&lt;p&gt;Besides the other options mentioned, you might also consider a Philips 8833-series monitor, which were used a lot together with Amiga computers in the past. These are color monitors, but have a &amp;quot;green&amp;quot; switch. Maybe not quite what you are looking for (in the &amp;quot;green mode&amp;quot; it will still be, er, greenscale, not &amp;quot;true&amp;quot; monochrome), but more versatile than the other solutions, and it may be easier to find hardware which can actually show something on the monitor.&lt;/p&gt;&#xA;" OwnerUserId="11112" LastActivityDate="2021-03-22T22:36:19.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18370" PostTypeId="1" CreationDate="2021-03-22T23:02:44.903" Score="0" ViewCount="84" Body="&lt;p&gt;i am looking to order an Amiga 500.  i wanted to use my Thinkpad L420's display as a monitor, but it seems it doesn't have a port that would work for that.  the thinkpad needs replacing anyways, so i am wondering what i should look for when shopping for a laptop which i intend to use also as a display for an Amiga.  i ask because it seems the options for a working display for an Amiga are multiple and complicated.&lt;/p&gt;&#xA;" OwnerUserId="21152" LastActivityDate="2021-03-22T23:02:44.903" Title="best port (on laptop) for using laptop display as monitor for an Amiga" Tags="&lt;amiga&gt;&lt;display&gt;&lt;laptop&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2021-03-23T09:48:50.233" ContentLicense="CC BY-SA 4.0" />
  <row Id="18371" PostTypeId="1" AcceptedAnswerId="18373" CreationDate="2021-03-22T23:54:31.767" Score="19" ViewCount="1335" Body="&lt;p&gt;Apple II software often used hard-coded timing for 5.25 inch floppy disk I/O, for example to control the duration of each track step or the rate at which bytes are written and read from the disk. Since the Apple IIGS had a faster 2.8 MHz CPU than earlier 1 MHz Apple II models, code that performed disk I/O needed to be slowed to 1 MHz execution speed in order to work as expected. How was this done?&lt;/p&gt;&#xA;&lt;p&gt;I think I know part of the answer: the first sector on a 5.25 inch floppy disk is loaded into RAM using a small ROM routine located at $C600. This is the IIGS's built-in equivalent of the Disk II Controller Card. As I understand it, the CPU is automatically slowed to 1 MHz when executing code from this memory range. And the CPU is also slowed to 1 MHz when accessing memory-mapped I/O locations used by the disk controller hardware.&lt;/p&gt;&#xA;&lt;p&gt;But after sector zero is loaded into RAM, most disks would begin a bootstrap process in which additional code for handling disk I/O was loaded to RAM and executed directly from RAM. For DOS this would be RWTS; for other disks it might be something custom. How did the IIGS know to also run this code at the slower 1 MHz speed?&lt;/p&gt;&#xA;&lt;p&gt;I've been using a logic analyzer to examine the disk I/O activity while booting a DOS 3.3 System Master and a few other 5.25 inch floppy disks on a IIGS. I've examined the lengths of the pulses on the PHASE inputs when stepping between tracks, as an indicator of the speed at which the disk I/O code is running. Using the IIGS built-in disk controller, the pulse lengths are the same whether the CPU is set to fast (2.8 MHz) or normal (1 MHz) speeds, and disks loads normally at either speed. But with the custom disk controller card that I'm developing, after sector zero gets loaded, the pulse lengths are about 2.5x shorter when the CPU speed is set to fast, and most disks don't boot properly. It seems that I've inadvertently broken whatever mechanism the IIGS normally uses to keep disk I/O code running at backwards-compatible 1 MHz speeds. How is that handled normally?&lt;/p&gt;&#xA;" OwnerUserId="21153" LastActivityDate="2021-03-24T11:40:06.983" Title="How did the Apple IIGS automatically slow 5.25 inch disk I/O code for backwards compatability?" Tags="&lt;hardware&gt;&lt;apple-ii&gt;&lt;floppy-disk&gt;&lt;apple-iigs&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18372" PostTypeId="2" ParentId="18345" CreationDate="2021-03-23T04:12:37.180" Score="1" Body="&lt;p&gt;I would look for a Goldstar Monochrome CRT monitor with VGA input. They made their name in Korean electronics in the early 90's and eventually became LG.&lt;/p&gt;&#xA;" OwnerUserId="21154" LastActivityDate="2021-03-23T04:12:37.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18373" PostTypeId="2" ParentId="18371" CreationDate="2021-03-23T04:18:50.837" Score="16" Body="&lt;p&gt;From the &lt;a href=&quot;https://archive.org/details/Apple_IIGS_Hardware_Reference_1988_Adn-Wesley_Publishing_second_edition&quot; rel=&quot;noreferrer&quot;&gt;Apple IIgs Hardware Reference, Second Edition&lt;/a&gt;, pages 22-24:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Figure 2-6&lt;/strong&gt; - Speed register at SC036&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hVIDT.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hVIDT.png&quot; alt=&quot;Diagram of speed register bits&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Table 2-2&lt;/strong&gt; - Bits set in the Speed register&lt;/p&gt;&#xA;&lt;p&gt;[...]&lt;/p&gt;&#xA;&lt;p&gt;Bits 0-3†&lt;/p&gt;&#xA;&lt;p&gt;Value 1&lt;/p&gt;&#xA;&lt;p&gt;Description Disk II motor-on address detectors: To retain Apple II&#xA;peripheral compatibility, the motor-on detectors change the system&#xA;speed to 1.024 MHz whenever a Disk II motor-on address is detected.‡&#xA;When the disk motor-off address is accessed, the system speed&#xA;increases, to 2.8 MHz again. For example, when bit 1 is 1, the FPI&#xA;switches to 1.024 MHz when address $C0D9 is accessed, and returns to&#xA;2.8 MHz following a $C0D8 access. (See list of addresses below.)&lt;/p&gt;&#xA;&lt;p&gt;Value 0&lt;/p&gt;&#xA;&lt;p&gt;When this bit is 0, the Disk II motor detectors are turned off.&lt;/p&gt;&#xA;&lt;p&gt;Bits 0 through 3 detect the following addresses:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Bit  Slot  Motor on  Motor off&#xA;0    4     $C0C9     $C0C8&#xA;1    5     $C0D9     $C0D8&#xA;2    6     $C0E9     $C0E8&#xA;3    7     $C0F9     $C0F8&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;* Drives designed for the Apple IIGS system should use the speed bit (Speed register bit 7) to change the processor speed when accessing&#xA;disks, rather than the disk motor-on detectors (speed register bits 0&#xA;through 3). By using bit 7 you access drives in slots other than 4&#xA;through 7 by changing the system speed manually. Be aware that central&#xA;processor speed changes for drive compatibility may affect application&#xA;program timing; avoid using the motor addresses unless they are used&#xA;in a fashion consistent with the drive's central processor speed&#xA;requirements.&lt;/p&gt;&#xA;&lt;p&gt;† For compatibility with future Apple products, use firmware calls&#xA;only to manipulate bits 0 to 3 of the Speed register.&lt;/p&gt;&#xA;&lt;p&gt;‡ Drives designed for previous Apple II computers will function as&#xA;Apple IIGS peripherals only if the system speed is changed to 1.024&#xA;MHz before disk access is attempted.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Luckily we can use MAME to see how it's set by running it with a Disk II card:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;mame apple2gsr1 -sl6 diskiing -debug&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then setting watch points for $C600-$C6FF and $C036:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;wp c600,100,rw&#xA;wp c036,1,rw&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Here's the output.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MAME debugger version 0.229 (mame0229)&#xA;Currently targeting apple2gsr1 (Apple IIgs (ROM01))&#xA;&amp;gt;wp c600,100,rw&#xA;Watchpoint 1 set&#xA;&amp;gt;wp c036,1,rw&#xA;Watchpoint 2 set&#xA;Stopped at watchpoint 2 reading 80 from 0000C036 (PC=F8A6)&#xA;Stopped at watchpoint 2 writing 80 to 0000C036 (PC=F8AC)&#xA;Stopped at watchpoint 1 reading 03 from 0000C605 (PC=FFFA07)&#xA;Stopped at watchpoint 1 reading 00 from 0000C603 (PC=FFFA07)&#xA;Stopped at watchpoint 1 reading 20 from 0000C601 (PC=FFFA07)&#xA;Stopped at watchpoint 1 reading 00 from 0000C6FF (PC=FFFA12)&#xA;Stopped at watchpoint 2 writing 84 to 0000C036 (PC=FFFFE2)&#xA;Stopped at watchpoint 2 writing 80 to 0000C036 (PC=F8B4)&#xA;...&#xA;Stopped at watchpoint 2 reading 80 from 0000C036 (PC=F8A6)&#xA;Stopped at watchpoint 2 writing 80 to 0000C036 (PC=F8AC)&#xA;Stopped at watchpoint 1 reading 00 from 0000C6FB (PC=FFA268)&#xA;Stopped at watchpoint 2 reading 80 from 0000C036 (PC=FF7082)&#xA;Stopped at watchpoint 2 writing 80 to 0000C036 (PC=F8B4)&#xA;Stopped at watchpoint 1 reading 03 from 0000C605 (PC=FA07)&#xA;Stopped at watchpoint 1 reading 00 from 0000C603 (PC=FA07)&#xA;Stopped at watchpoint 1 reading 20 from 0000C601 (PC=FA07)&#xA;Stopped at watchpoint 1 reading 00 from 0000C6FF (PC=FA12)&#xA;Stopped at watchpoint 2 writing 84 to 0000C036 (PC=FFE2)&#xA;Stopped at watchpoint 1 reading 03 from 0000C605 (PC=FACB)&#xA;Stopped at watchpoint 1 reading 00 from 0000C603 (PC=FACB)&#xA;Stopped at watchpoint 1 reading 20 from 0000C601 (PC=FACB)&#xA;Stopped at watchpoint 1 reading A2 from 0000C600 (PC=C601)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="71" LastEditorUserId="71" LastEditDate="2021-03-24T11:40:06.983" LastActivityDate="2021-03-24T11:40:06.983" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18374" PostTypeId="2" ParentId="6197" CreationDate="2021-03-23T09:42:09.063" Score="5" Body="&lt;p&gt;I can fill in some of the early history of the game Exploding Atoms.&lt;/p&gt;&#xA;&lt;p&gt;The original concept (so far as I know) was a board game concept published in a British Magazine called &lt;a href=&quot;https://www.parlettgames.uk/gamester/gamespuz.html&quot; rel=&quot;noreferrer&quot;&gt;Games &amp;amp; Puzzles&lt;/a&gt; some time in the late 1970s. I don't think the magazines are available online but boardgamegeek.com has a list of articles and I think it was Explosion in issue 55 (December 1976) published in the Playroom section which carried readers ideas for games.&lt;/p&gt;&#xA;&lt;p&gt;The first computer version of the game (unless anyone wants to disagree) was written by me in 1979-80 for the Sharp MZ-80K and published by Knights Computers in Aberdeen. In 1979 I was a school kid mad about programming and I wanted to write a game from scratch. This is the one I chose and despite being chosen primarily as being something within my programming skills it turned out to be very popular.&lt;/p&gt;&#xA;&lt;p&gt;Here's a review of the MZ-80K version from a &lt;a href=&quot;https://magazinesfromthepast.fandom.com/wiki/Exploding_Atoms_-_Star_Trek_-_3D_Maze&quot; rel=&quot;noreferrer&quot;&gt;1982 computer magazine&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Exploding Atoms is a marvellously simple strategy game is for two players on the&#xA;Sharp MZ-80K. The action takes place on a 6x6 grid, where both players&#xA;place counters. You are not allowed to place your counter on a square&#xA;occupied by your opponent or last owned by your opponent and you place&#xA;counters alternately.&lt;/p&gt;&#xA;&lt;p&gt;The game is about overloading squares. Corner squares overload with&#xA;two counters, edge squares with three and the centre squares with&#xA;four. Observant readers will have noticed that these figures&#xA;correspond to the number of adjacent squares to each type. This is&#xA;because an overloaded square explodes, sending one counter into each&#xA;of the squares around it.&lt;/p&gt;&#xA;&lt;p&gt;And if this causes an adjacent square to overload then that too will&#xA;explode and it is in this way that a chain reaction can begin. If your&#xA;counters explode into a square containing your opponent's counters&#xA;then that square is turned to your ownership. After some initial&#xA;sparring, the game quickly becomes critical as each player tries to&#xA;begin the reaction.&lt;/p&gt;&#xA;&lt;p&gt;Critical because a miscalculation which leaves just one opponent&#xA;counter standing is usually fatal! Exploding Atoms comes on the same&#xA;cassette as Startrek and 3-D Maze it costs £8.00 from Aberdeen-based&#xA;Knights T.V. and Computers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To the best of my knowledge all of the later programs can ultimately trace their heritage back to this version. (Just their heritage, I really hope none of them copied my schoolboy code.) Or, of course, maybe they also read the same games magazines as I did.&lt;/p&gt;&#xA;" OwnerUserId="21156" LastEditorUserId="21156" LastEditDate="2021-03-23T11:42:43.757" LastActivityDate="2021-03-23T11:42:43.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18375" PostTypeId="2" ParentId="2562" CreationDate="2021-03-23T11:25:32.193" Score="2" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8wVMt.gif&quot; alt=&quot;http://www.quadibloc.com/crypto/images/tele33.gif&quot; /&gt;&#xA;Baudot code can be used to represent abjad, and I wouldn't be surprised if a mainframe be interfaced with an Arabic ASR-33 (though an ASCII TTY, it has a 5-bit sibling ASR-32).&#xA;&lt;a href=&quot;http://www.quadibloc.com/crypto/tele03.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.quadibloc.com/crypto/tele03.htm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;HP 2645R - Arabic version of the 2645A [widescreen terminal], writes right to left (1977), according to curious marc.&#xA;&lt;a href=&quot;https://www.curiousmarc.com/computing/hp-264x-terminals&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.curiousmarc.com/computing/hp-264x-terminals&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17812" LastEditorUserId="17812" LastEditDate="2021-03-23T11:32:26.020" LastActivityDate="2021-03-23T11:32:26.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18376" PostTypeId="1" AcceptedAnswerId="18380" CreationDate="2021-03-23T11:55:31.953" Score="6" ViewCount="194" Body="&lt;p&gt;I've looked at some techniques that were used at the beginning of the eighties to refresh the RAM (CPU-based refresh for the Z80, or the use of the video circuit for computers that shared the bus between the video and the CPU on alternate cycles), but I don't think I got all of them. Was there other techniques? (I'm mostly interested in home or office computers.)&lt;/p&gt;&#xA;&lt;p&gt;For the end of the decade, the picture is even less clear. Did something change with the introduction of the 30-pin SIMM format?&lt;/p&gt;&#xA;" OwnerUserId="14931" LastActivityDate="2021-03-23T16:32:36.200" Title="What were the different RAM refresh techniques in the 80s" Tags="&lt;hardware&gt;&lt;memory&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18377" PostTypeId="1" CreationDate="2021-03-23T12:07:01.993" Score="2" ViewCount="383" Body="&lt;p&gt;With the ubiquity of FPGAs, I find it relatively easy to design an eighties-like CPU. But it's maybe too simple now, with so many ways to implement any given CPU unit.&lt;/p&gt;&#xA;&lt;p&gt;What were the hardware constraints that the designers back then had to contend with?&lt;/p&gt;&#xA;&lt;p&gt;How were units like the register file, the ALU or the microcode &lt;em&gt;actually&lt;/em&gt; implemented? For example, how many ports did the designers use for the register file, did they use simple ripple-carry adders in the ALU or more complex ones, etc.&lt;/p&gt;&#xA;&lt;p&gt;Was there something like LUT already? Were there some original designs that differed significantly from others?&lt;/p&gt;&#xA;&lt;p&gt;Is there some reference material available online? I'm especially interested in the 6502, Z80, 6809, 8086, 68000 and 80386.&lt;/p&gt;&#xA;" OwnerUserId="14931" LastEditorUserId="5199" LastEditDate="2021-03-23T20:00:42.693" LastActivityDate="2021-03-26T06:01:17.717" Title="How were the popular CPUs of the eighties implemented?" Tags="&lt;hardware&gt;&lt;cpu&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ClosedDate="2021-03-24T18:47:46.543" ContentLicense="CC BY-SA 4.0" />
  <row Id="18378" PostTypeId="2" ParentId="18377" CreationDate="2021-03-23T13:20:04.543" Score="9" Body="&lt;p&gt;In those days, there were few if any computer-aided design tools.  IC design work was done by hand, up to and including the preparation of photolithography masks using a scalpel and a steady hand.  These were then photo-duplicated at a reduced size for application to the actual manufacturing process.&lt;/p&gt;&#xA;&lt;p&gt;In the 1970s, the main technologies suitable for building microprocessors were LSTTL (using bipolar transistors) and NMOS (using resistors and field-effect transistors).  The 6502 benefited from what was then a very new innovation in NMOS by MOS Technology, using depletion-mode transistors as the high-side biasing element instead of resistors, which saved a lot of die space and improved efficiency; this was improved further by the use of &amp;quot;dynamic logic&amp;quot; in which the biasing element and the pull-down transistors that actually implement the logic are not switched on at the same time, but only in alternate halves of the clock cycle.  This technology was not available to the first versions of the 8080 or 6800, which were its main contemporaries.  It may have been used in the 8086 and the 68000.&lt;/p&gt;&#xA;&lt;p&gt;The 6502 was overall a major exercise in cost-performance optimisation, with the objective of reducing the transistor count and (particularly) die size to a point where the yield was high enough to permit a low sales price, yet still with a profit margin.  For this purpose, about 5000 transistors was considered the limit, about half that of the 6800, and many times less than the 68000.  There is no room in such a budget for niceties like a carry-lookahead adder, and a clever (patented) trick was needed to even squeeze in the Decimal mode of the ALU.&lt;/p&gt;&#xA;&lt;p&gt;Instead of a large microcode ROM containing a separate row for each opcode, a series of smaller ROMs was used to divide each instruction's function into distinct, independent parts.  ADC instructions with different addressing modes, therefore, would all decode to the ADC row in the ALU microcode ROM, but different rows of the addressing mode microcode ROM.  This both saved die space and reduced the chances for errors in microprogramming.  It also resulted in the 6502 having a comparatively orthogonal instruction set for its class (certainly when compared to the Z80 or 8086), making it easier to code for.&lt;/p&gt;&#xA;&lt;p&gt;You can explore all the gory details at &lt;a href=&quot;https://www.visual6502.org/&quot; rel=&quot;noreferrer&quot;&gt;Visual 6502&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In the 1980s, there was a definite shift towards the more power-efficient CMOS technology, which had previously been very slow.  It was found that reducing the thickness of the gate oxide in the individual NMOS and PMOS transistors sped them up a lot, at the expense of the maximum voltage they could tolerate.  Since older CMOS could tolerate over 12 volts, a reduction to 5 volts was no problem and allowed easier interoperability between CMOS and existing LSTTL/NMOS logic.  Most of the popular NMOS CPU families gained CMOS versions, often gaining more functionality in the process since the logic had to be completely redrawn in any case.&lt;/p&gt;&#xA;&lt;p&gt;CPUs as complex as the 68030 were still hand-drawn for lithography, the blueprints being laid out in large rooms with engineers literally crawling over them to work.  There was some movement towards using computers to assist the design process in the mid-1980s; for example Acorn used their existing BBC Micros to simulate various aspects of their new ARM CPU, to verify their correctness and ensure the proposed instruction set was actually usable.  This resulted in the first ARM1 prototype arriving from the foundry and working first time - which was virtually unprecedented in CPU design history.  The industry took notice of that.&lt;/p&gt;&#xA;&lt;p&gt;Incidentally, the ARM1 also still used a ripple-carry adder, which was still sufficient to do a 32-bit addition in one cycle at a modest clock speed.  Something more sophisticated was implemented for the ARM2, which also added a hardware multiply instruction.&lt;/p&gt;&#xA;&lt;p&gt;One technique used then, but which is no longer viable today, is the installation of a small-scale chip fabricator in the design offices of some manufacturers.  This allowed prototype chips and individual microcircuit experiments to be carried out without interrupting the mass production lines at the main fab.  It was extensively used by Commodore after they bought MOS, including specifically for the design of the VIC-II and SID.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2021-03-23T17:53:56.057" LastActivityDate="2021-03-23T17:53:56.057" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18379" PostTypeId="2" ParentId="13777" CreationDate="2021-03-23T14:11:18.740" Score="0" Body="&lt;p&gt;An easier way to fix this problem is to execute a small program called &amp;quot;Keyfix.com&amp;quot; that was supplied, largely un-documented, with some OEM distributions of MSDOS 3.2 and 3.3.&#xA;Syntax is:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;keyfix /i&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Just typing:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;keyfix&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;will check the keyboard in use and advise whether keyfix needs to be installed.&lt;/p&gt;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="21157" LastActivityDate="2021-03-23T14:11:18.740" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18380" PostTypeId="2" ParentId="18376" CreationDate="2021-03-23T16:24:10.150" Score="6" Body="&lt;p&gt;Basically it's all about what component do when issues a refresh. which can be seen from (at least) two points of view:&lt;/p&gt;&#xA;&lt;h2&gt;RAM side&lt;/h2&gt;&#xA;&lt;p&gt;The way RAM sees/handles refresh changed quite a bit over time.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Early RAM had only one kind of refresh: Access to a row would refresh it, no matter if read, write, or incomplete (&lt;strong&gt;RAS-only&lt;/strong&gt;). External components had to supply row addresses and make sure that all rows were accessed within time.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Later, with the 4164 (IIRC), &lt;strong&gt;Auto-Refresh&lt;/strong&gt; was introduced. Here each RAM already includes addressing logic to execute a refresh cycle, but the system still had to dedicate a memory cycle to execute it. It was initiated by pulling a special /REFRESH pin. Now external components only had to make sure that enough cycles were assigned within time.&lt;/p&gt;&#xA;&lt;p&gt;With the introduction of 256 KiBit RAM (41256) that pin was reused to provide two more address bits, so it had to be signalled with an otherwise illegal combination of &lt;strong&gt;CAS-before-RAS&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Again Later (as well EDO?) &lt;strong&gt;Hidden Refresh&lt;/strong&gt; was introduced. Essentially a combination of auto-refresh and extended data out timing. After issuing a regular RAS-CAS moderated request and while CAS was still held active to extend data output, RAS was assigned again issuing a hidden refresh cycle.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Finally, SDRAM not only changed the behaviour completely by being clocked, but as well introduced &lt;strong&gt;Self-Refresh&lt;/strong&gt;during power down - but SDRAM is a complete different story.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;em&gt;(For the question marks: Assignment is from memory, so maybe not exact with each generation)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;System Side&lt;/h2&gt;&#xA;&lt;p&gt;All RAM needs some system side handling for refresh. This can be differentiated by what handling is needed as well as which component does it.&lt;/p&gt;&#xA;&lt;p&gt;Since basic refresh is simply a full (or aborted) access, any system that guarantees that all rows will be accessed within the refresh time will work. So for a classic 4116 all 128 rows had to be addressed once, in no particular order, within two milliseconds. Possible ways were:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Continuous Access&lt;/strong&gt; - his means the RAM is accessed in all (used) ROWs within refresh rime due normal operation. Video memory is often designed that way. It might need some careful assignment of address bits (*1), but removes all need for refresh hard- or software.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Burst Refresh&lt;/strong&gt; - here a dedicated logic will take over RAM access and issue a series of consecutive refresh cycles. For a classic 200 ns 4116-3 this meant a burst 128 cycle, each 375 ns for a total of 48 µs. The advantage is that refresh logic, as well as bus arbitrating is rather simple and overhead is small. It may be the fastest possible refresh, as it does not need to follow the time frame of other system components (*2). On the backside it will the system will be not be able to do anything during this time, which might be a problem for real time/embedded applications.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A special sub case might &lt;strong&gt;software based burst refresh&lt;/strong&gt;. This can be done for example by calling an interrupt every two milliseconds which gurantees to access every row once before returning. While this may sound like waste of time at first, like having a longish counter loop accessing each row once, it can easy be turned into an advantage. With using the lower 7 address bits as row (*1) this only required a series of 128 NOP, places in ROM, meaning only the interrupt invocation is an additional toll to be payed, compared to hardware burst, but will save quite some hardware (at very least two multiplexers and a counter). By making the routine do something useful instead of NOPs, this drawback can even be turned into an advantage. For example by operating a real time clock in these 128 bytes.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cycle Stealing&lt;/strong&gt; is an equally common implementation. Here the refresh logic will take over RAM access only for a single access, spreading out he disruption over the whole time frame. Over all performance is like burst mode but with timing delay reduced to a single cycle. On the backside it can't operate at faster speeds, so over all performance impact is always 128 system clock cycles.&lt;/p&gt;&#xA;&lt;p&gt;A very prominent usage was with the original IBM PC. Here a timer let a DMA channel read from RAM in a repeated cycle. It fires every 15.1 µs i.e. every 72nd CPU-clock.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hidden Refresh&lt;/strong&gt; (not to be confused with hidden refresh within a RAM) is essentially like cycle stealing, except that only cycles are taken that are not used by other components (like CPU), thus not impacting performance. This of course only works with systems that have waste cycles.&lt;/p&gt;&#xA;&lt;p&gt;Essentially this is the way the Z80 offers. During M1, when the instruction is decoded a refresh cycle is provided, hidden to execution and timing.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;How Does That Come Together?&lt;/h2&gt;&#xA;&lt;p&gt;Well, that depends on each system's implementation.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Who supplies Refresh addresses&lt;/li&gt;&#xA;&lt;li&gt;Who inserts refresh cycles&lt;/li&gt;&#xA;&lt;li&gt;How is this coordinated with other RAM users (most notably the CPU)&lt;/li&gt;&#xA;&lt;li&gt;How it's integrated into a systems clock framework&lt;/li&gt;&#xA;&lt;li&gt;and so on...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Ways to solve this are almost endless. It wouldn't make much sense to open up a list of various implementations.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Did anyone ever say that the logical (CPU) order of address bits must be the same for RAM?&lt;/p&gt;&#xA;&lt;p&gt;*2 - For example when used in a system with a basic 2 MHz clock cycle, following the 2 MHz clock would mean that a burst would need 64 µs. With using its own clock during Refresh this can be tuned down to 48 µs.&lt;/p&gt;&#xA;&lt;p&gt;*3 - It was also a source of early PC performance tweaking. Since memory access is two clocks every 72 clocks, refresh takes away 1/36th or 2.8%. Decreasing that (in steps of 3 clocks, as the timer is feed by 4.77 divided by 3)) increase the number of cycles the CPU could use. Going to 75 cycles is still within spec and gains 0.1%. Everything thereafter would leave the 2ms. Gains up to 1.5% could be realized with most machines. Not much, but hey, every bit counts.&lt;/p&gt;&#xA;&lt;p&gt;Fun fact, on some (early) 286es these savings were seemingly dramatic when using Norton Index to check for system speed, A 12 MHz 286 would show up as 13-14 MHz. Except, this was an artefact of how the timing loop was interpreted no real speed gain.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-23T16:32:36.200" LastActivityDate="2021-03-23T16:32:36.200" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18381" PostTypeId="1" CreationDate="2021-03-23T17:16:21.483" Score="2" ViewCount="105" Body="&lt;p&gt;For a brief intro - I've been collecting old GPUs for the past 15+ years (I have around 100 of them, starting from year 1996 (1MB SiS) till around 2008 (GTX280), representing each generation of released gaming cards and architectures.&lt;/p&gt;&#xA;&lt;p&gt;The problem is - I have never properly benchmarked them, and finally want to set up a proper benchmark rig(s) to do so. As we know, back in the days of Win98/XP swapping a different vendor (and sometimes simply a different model) GPU most often lead to bluescreen. It was also pain in the a** to properly uninstall and reinstall drivers for a different GPUs through safe mode, and most often replacing GPU also mean reinstall Windows altogether, just to avoid some strange driver conflicts and performance issues later down the road...&lt;/p&gt;&#xA;&lt;p&gt;So my question is - can you suggest a best, quickest and most painless way to set up a few benchmarking rigs (PCI, AGP and PCIe ones) to test a wide range of GPUs on Win98/XP?&lt;/p&gt;&#xA;&lt;p&gt;What I currently assume -&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I need to dig through my stack of PC hardware, and find a few MB+CPU combos that would represent the best performance for each GPU interface (PCI+AGP and PCIe) and eliminate the bottlenecks.&lt;/li&gt;&#xA;&lt;li&gt;Find and download the latest, most compatible and popular driver revisions for ATI, nVidia and 3Dfx cards I'm about to bench (I assume that there will be multiple driver versions, to cover each generation of cards, right?).&lt;/li&gt;&#xA;&lt;li&gt;Install a two separate dual-boot versions of XP (or 98) on each of these PCs, and install a proper latest driver version for ATI and nVidia (each on their own OS, of course).&lt;/li&gt;&#xA;&lt;li&gt;When switching to a different GPU, will have to select a proper Windows version from a multiboot menu.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Maybe there is any other easier way how to accomplish this? Many thanks for ideas in advance!&lt;/p&gt;&#xA;" OwnerUserId="21160" LastActivityDate="2021-03-23T17:16:21.483" Title="What's the best sw/hw setup to benchmark old GPUs?" Tags="&lt;benchmarking&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18382" PostTypeId="2" ParentId="18371" CreationDate="2021-03-23T17:44:04.073" Score="8" Body="&lt;p&gt;In reference to the comment &amp;quot;Any idea how the IIGS implements those Disk II motor detectors?&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;There's this &lt;a href=&quot;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Computers/Apple%20II/Apple%20IIGS/Documentation/Apple%20IIGS%20Technical%20Notes%2065-79.pdf&quot; rel=&quot;noreferrer&quot;&gt;Technical Note #68: Tips for I/O Expansion Slot Card Design&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;On the Apple IIGS, the Mega II select signal (/M2SEL) is used as the&#xA;enable to the slower, 1 MHz side of the system. It goes active (low)&#xA;whenever the 1 MHz side of RAM or I/O areas are accessed. Accesses&#xA;that casue the /M2SEL to be asserted include shadowed video write, &lt;strong&gt;any&#xA;accesses to internal I/O or expansion card slots,&lt;/strong&gt; and accesses to bank&#xA;$E0 and $E1. Accesses to any expansion card ROM areas that are set to&#xA;Internal ROM with the Slot register, do no assert the /M2SEL signal&#xA;and run at the 2.8 MHz speed rather than the normal 1 MHz expansion&#xA;card speed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, at a high level, it seems the the whole expansion card section is blocked out to be accessed at 1 MHz.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2021-03-23T17:44:04.073" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18383" PostTypeId="2" ParentId="18377" CreationDate="2021-03-23T18:10:42.297" Score="2" Body="&lt;p&gt;(Partially) answering my own question, as I found an interesting resource about reverse engineering of vintage chips, using key words from Chromatix's answer.&lt;/p&gt;&#xA;&lt;p&gt;One of the articles on the reverse engineering of the 8086: &lt;a href=&quot;http://www.righto.com/2020/08/latches-inside-reverse-engineering.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.righto.com/2020/08/latches-inside-reverse-engineering.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;EDIT: for people like me who are more interested with actual answers than with deciding if questions are &amp;quot;focused&amp;quot; enough, here's an additional resource I found useful, but for NMOS only apparently: &lt;a href=&quot;https://ai.eecs.umich.edu/people/conway/VLSI/VLSIText/PP-V2/V2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Introduction to VLSI Systems&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14931" LastEditorUserId="14931" LastEditDate="2021-03-26T06:01:17.717" LastActivityDate="2021-03-26T06:01:17.717" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18384" PostTypeId="1" CreationDate="2021-03-23T18:22:02.150" Score="6" ViewCount="608" Body="&lt;p&gt;If you look at older platformers, and even many later ones for other platforms and even the NES, there is typically no &amp;quot;momentum&amp;quot; and &amp;quot;realistic&amp;quot; physics for the main character that you control. Even &amp;quot;Mario Bros.&amp;quot; (the arcade game, ported to NES) uses very strange/primitive physics.&lt;/p&gt;&#xA;&lt;p&gt;I've long wondered: does Super Mario Bros. for NES have the &amp;quot;realistic&amp;quot; momentum effect just because they were the first to think of it and/or have the skills and/or desire to put it in a game? Or does it actually require some kind of &amp;quot;expensive&amp;quot; mathematical calculation which earlier (arcade) hardware simply didn't live up to? And the NES was simply powerful enough to be able to accomplish this?&lt;/p&gt;&#xA;&lt;p&gt;It's pretty strange if you think about it. It's almost &lt;em&gt;unique&lt;/em&gt; to the Super Mario Bros. series of video games, really. I always assumed that other developers simply weren't as good with math/physics or that they were just sloppy developers and didn't take the care to give their game a realistic/&amp;quot;genuine&amp;quot; feeling to how you control the guy.&lt;/p&gt;&#xA;" OwnerUserId="21161" LastActivityDate="2021-04-21T19:29:16.730" Title="Was there anything about the &quot;power of the NES&quot; that made Super Mario Bros. have &quot;realistic physics&quot;?" Tags="&lt;programming&gt;&lt;nes&gt;&lt;nintendo&gt;&lt;game&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18385" PostTypeId="2" ParentId="18384" CreationDate="2021-03-23T20:35:57.863" Score="4" Body="&lt;p&gt;I cannot answer the question from a game design standpoint, and I suspect the real answer lies there.  Hopefully someone will be able to preempt my answer here with that perspective.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or does it actually require some kind of &amp;quot;expensive&amp;quot; mathematical calculation which earlier (arcade) hardware simply didn't live up to?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Such calculations are not particularly difficult.  They would not use up very many processor cycles.  Various ways to apply a curve to the acceleration rate would have been obvious to programmers at the time, if they wanted to implement such a feature.&lt;/p&gt;&#xA;&lt;p&gt;The main limitation would be ROM space used for the routines.  ROM was at an extreme premium on the earliest arcade platforms and consoles.  Some of the earliest microprocessor-based arcade games had as little as 1 KB of ROM.  The total number of instructions you can fit in that much space is measured in the hundreds.&lt;/p&gt;&#xA;&lt;p&gt;Even by 1982, most games for the Atari 2600 are 4 or 8 KB and big arcade games were weighing in around 32 KB.  Released in 1985, the Super Mario Bros. cartridge had 40 KB total of ROM.  The designers would have been far less constrained, compared to even just a couple years before, when it comes to things like a couple dozen instructions to implement the feature you mention.  This was not specific for the NES, and came from the general cost of ROM coming down; it would have benefited most platforms.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2021-03-23T20:52:52.520" LastActivityDate="2021-03-23T20:52:52.520" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18387" PostTypeId="1" AcceptedAnswerId="18390" CreationDate="2021-03-24T04:41:25.830" Score="12" ViewCount="1692" Body="&lt;p&gt;The Wikipedia page for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8080#Pin_use&quot; rel=&quot;noreferrer&quot;&gt;Intel 8080 processor&lt;/a&gt; describes pin 11 as&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The −5 V power supply. This must be the first power source connected and the last disconnected, otherwise the processor will be damaged.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;How did the Altair&lt;/strong&gt; (or other 8080-based computers such as the IMSAI) &lt;strong&gt;ensure that this was the first supply voltage to stabilize?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="15334" LastEditDate="2021-03-24T08:22:14.723" LastActivityDate="2021-03-24T08:22:14.723" Title="How did the Altair ensure that the −5 V supply was the first connected and last disconnected?" Tags="&lt;hardware&gt;&lt;8080&gt;&lt;power&gt;&lt;altair-8800&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18388" PostTypeId="1" CreationDate="2021-03-24T04:57:38.043" Score="6" ViewCount="309" Body="&lt;p&gt;The Altair 8800 was a computer using the Intel 8080 processor.  &lt;strong&gt;Why the difference in numbers?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-03-31T22:23:18.423" Title="Why was the Altair numbered &quot;8800&quot; even though the processor was an 8080?" Tags="&lt;history&gt;&lt;8080&gt;&lt;altair-8800&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18389" PostTypeId="2" ParentId="18387" CreationDate="2021-03-24T07:48:00.363" Score="5" Body="&lt;p&gt;It looks like the Altair 8800 didn’t have any provisions to ensure -5V was available first (but see @Spektre’s answer and the note below).&lt;/p&gt;&#xA;&lt;p&gt;I found a schematic of the Altair 8800 CPU board power supply in &lt;a href=&quot;http://vtda.org/docs/computing/MITS/MITS_Altair8800TheoryOperation_1975.pdf&quot; rel=&quot;noreferrer&quot;&gt;this document&lt;/a&gt;, page 20.&lt;/p&gt;&#xA;&lt;p&gt;This shows a very primitive -5V supply (just a resistor going to the unregulated -16V supply, a 5.1V Zener and a some capacitors for stabilization). The +5V supply is regulated by a 7805.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ARArz.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ARArz.jpg&quot; alt=&quot;Altair 8800 CPU board -5V supply&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;As @Spektre noted, the -16V unregulated supply has lower capacitances than the positive supplies. That would have the -16V side arrive at its operating voltage faster at powerup. Because of the simpler (Zener) -5V “stabilized” power supply, it would probably ensure this was the first to arrive at its operating voltage as well.&lt;/p&gt;&#xA;&lt;p&gt;It would be fun if someone with an original Altair 8800 could confirm this ;-)&lt;/p&gt;&#xA;" OwnerUserId="15545" LastEditorUserId="15545" LastEditDate="2021-03-24T08:00:27.153" LastActivityDate="2021-03-24T08:00:27.153" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18390" PostTypeId="2" ParentId="18387" CreationDate="2021-03-24T07:49:24.910" Score="9" Body="&lt;p&gt;&lt;strong&gt;Never used nor saw an Altair so I might be completely wrong in here.&lt;/strong&gt; However this &lt;a href=&quot;http://vtda.org/docs/computing/MITS/MITS_Altair8800TheoryOperation_1975.pdf&quot; rel=&quot;noreferrer&quot;&gt;doc for some Altair 8800&lt;/a&gt; contains the circuits (at the end)...&lt;/p&gt;&#xA;&lt;p&gt;The power supply is divided to 2 zones. one with transformers and rectifiers and second with voltage regulators.&lt;/p&gt;&#xA;&lt;p&gt;My EE skills are telling me the start race of -16V wins due to input RC filtration filter has smallest &lt;code&gt;T&lt;/code&gt; time to charge between all the voltages. That means either R (the first in series) is smaller or C is smaller or current is bigger...&lt;/p&gt;&#xA;&lt;p&gt;The shut down time is related to the last R after the zener diode and or filtration caps and the device load itself. The smaller the discharge R is the quicker it shuts down ...&lt;/p&gt;&#xA;&lt;p&gt;So by carefully selecting the input RC and output discharge resistor values among all voltages with respect to the Voltage and Current you can &amp;quot;program&amp;quot; the order of power on and shut down independently.&lt;/p&gt;&#xA;&lt;p&gt;Here the circuit:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RfEjO.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RfEjO.png&quot; alt=&quot;power supply&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;the input is without resistor (as for high current it would be big heat source and dissipated a lot of power) so the Voltage and Current of the transformer and sum of filtration Capacitors determine the order of power on.&lt;/p&gt;&#xA;&lt;p&gt;This is the reason why you should recap power supply capacitors before first powering of old computer after long therm storage ... as old Caps have lost their original capacitance and the order of Voltages could be much different then designed.&lt;/p&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2021-03-24T08:06:47.917" LastActivityDate="2021-03-24T08:06:47.917" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18391" PostTypeId="1" CreationDate="2021-03-24T10:30:11.313" Score="5" ViewCount="382" Body="&lt;p&gt;Attribute–value pair is quite common in programming languages, databases, URL query-strings, and Email/HTTP headers, which could also be used to organize, classify and version files.&lt;/p&gt;&#xA;&lt;p&gt;Extended file attributes are available in HPFS of OS2, ext2 of Linux, and WinFS of Vista, etc. However, no significant usage was seen in file systems, let alone taking the place of hierarchical directory structure. Why?&lt;/p&gt;&#xA;&lt;p&gt;Links:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7712/where-does-the-hierarchical-directory-structure-originate-from&quot;&gt;Where does the hierarchical directory structure originate from?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13633/filesystems-with-versioning&quot;&gt;Filesystems with versioning&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/13723/unix-haters-handbook-guaranteeing-synchronous-atomic-operations&quot;&gt;Unix Haters Handbook - guaranteeing synchronous, atomic operations&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/3263036/file-system-that-uses-tags-rather-than-folders&quot;&gt;https://stackoverflow.com/questions/3263036/file-system-that-uses-tags-rather-than-folders&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Attribute%E2%80%93value_pair&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Attribute%E2%80%93value_pair&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_file_attributes&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Extended_file_attributes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="17812" LastActivityDate="2021-03-29T15:41:30.787" Title="Were there any filesystems support tag based key-value pairs before the 90s?" Tags="&lt;history&gt;&lt;file-system&gt;&lt;data-preservation&gt;&lt;database&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18392" PostTypeId="2" ParentId="18391" CreationDate="2021-03-24T13:16:10.630" Score="4" Body="&lt;p&gt;AmigaOS, first released in 1985, made extensive use of key/value attributes that could be defined by the user in a GUI and recognized by any &lt;code&gt;tool&lt;/code&gt;. (e.g. an application/program).&lt;/p&gt;&#xA;&lt;p&gt;This was done using a metadata system implemented through &amp;quot;Tool types&amp;quot; that were embedded within the &lt;code&gt;.info&lt;/code&gt; file. Every &lt;code&gt;Tool&lt;/code&gt; or &lt;code&gt;Project&lt;/code&gt; (e.g. a document) had an icon and other metadata in its &lt;code&gt;.info&lt;/code&gt; file. The Tool types were a small database of key/value attributes. When an Amiga application is launched from Workbench, those key/value pairs are available to the app at startup in a manner similar to command-line arguments.&lt;/p&gt;&#xA;&lt;p&gt;It is important to recognize this is pure metadata defined by the user and not dictated by the application. And this metadata is exposed through a built-in GUI that is part of the standard desktop environment. You don't require special tools that decode binary &amp;quot;resource fork&amp;quot; files, or similar. &lt;em&gt;The user could utilize this metadata for their own purposes, including tagging related files independently of folder hierarchies&lt;/em&gt;. Also noteworthy is that the Amiga's filesystem metadata implementation was managed by &lt;code&gt;Workbench&lt;/code&gt; (the standard GUI &amp;quot;shell&amp;quot;) as a layer &lt;em&gt;above&lt;/em&gt; the filesystem proper.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wblKp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wblKp.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-03-29T15:41:30.787" LastActivityDate="2021-03-29T15:41:30.787" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18393" PostTypeId="1" AcceptedAnswerId="18395" CreationDate="2021-03-24T14:57:38.667" Score="6" ViewCount="1577" Body="&lt;p&gt;First Z80 project after 6502, a simple looking piece of code giving me hard time.&lt;/p&gt;&#xA;&lt;p&gt;print_char is a working function which prints contents of A to the screen.&lt;/p&gt;&#xA;&lt;p&gt;My first issue is that the following code (and many variations of it) gives &amp;quot;index offset out of bound&amp;quot; error with VASM. Any idea on how assembler checks index offset on this occasion and picks up an error ?&lt;/p&gt;&#xA;&lt;p&gt;Is there a better way to print a string ? On 6502 LDA was checking for affecting zero flag, this is not the case with Z80, so I am trying to &lt;code&gt;or 0&lt;/code&gt; and checking result against zero, but then using B register as or changes A. Doesn't look very elegant.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;loop:&#xA;    ld A,(IY+msg)&#xA;    ld b,a&#xA;    or 0&#xA;    jp z, end&#xA;    ld a,b&#xA;    call print_char&#xA;    inc IY&#xA;    jp loop&#xA; end:&#xA;    halt&#xA;&#xA;msg: .asciiz &amp;quot;Hello World&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21002" LastActivityDate="2021-03-25T10:49:32.597" Title="Z80 string iteration failing" Tags="&lt;assembly&gt;&lt;z80&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18394" PostTypeId="2" ParentId="18393" CreationDate="2021-03-24T15:06:52.103" Score="9" Body="&lt;p&gt;&lt;code&gt;LD A, (IY+msg)&lt;/code&gt; looks fishy; on the Z80 IX and IY are 16-bit registers and the in-opcode offset is 8-bit. Sort of the opposite of absolute indexed addressing mode on the 6502. So you'd idiomatically load &lt;code&gt;IY&lt;/code&gt; with the address of &lt;code&gt;msg&lt;/code&gt; and then &lt;code&gt;ld A,(IY+0)&lt;/code&gt;. And if you're not using the offset, you might then consider &lt;code&gt;(HL)&lt;/code&gt; instead for a more compact and faster program.&lt;/p&gt;&#xA;&lt;p&gt;So I'm guessing that your code fails because &lt;code&gt;msg&lt;/code&gt; sits at least partly outside of the address range [-128, 127] of whatever you seeded &lt;code&gt;IX&lt;/code&gt; with.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2021-03-24T15:22:39.077" LastActivityDate="2021-03-24T15:22:39.077" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18395" PostTypeId="2" ParentId="18393" CreationDate="2021-03-24T15:17:32.873" Score="13" Body="&lt;p&gt;Since it's two questions, here are two answers:&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Adressing Issue&lt;/h2&gt;&#xA;&lt;p&gt;It's a very BASIC 65xx to x80 transition error: Index Registers&lt;/p&gt;&#xA;&lt;p&gt;Where 65xx CPUs use a 16 it base address (from memory) and an 8 bit index (from register), the x80s use 16 bit index register(s) and an (optional) 8 bit offset. The address of &lt;code&gt;msg&lt;/code&gt; should be loaded into IY first (&lt;code&gt;LD IY,msg&lt;/code&gt;) and then this register can simply be used to address the bytes to be loaded (&lt;code&gt;LD A,(IY)&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Historically&lt;/strong&gt; the x80s simply use one memory pointer, in classic 8008/8080 notation called &lt;code&gt;M&lt;/code&gt;, residing in the register pair HL. All memory access that is not immediate or absolute had to go thru this. So what's a &lt;code&gt;LD A,(HL)&lt;/code&gt;on a Z80 would be written &lt;code&gt;MOV A,M&lt;/code&gt; for 8080 (*1). DE could be used to hold a second pointer to be exchanged with HL when needed. The Z80 did relax this a bit by adding IX/IY.&lt;/p&gt;&#xA;&lt;p&gt;All addressing is done using such a pointer (and optionally on the Z80 a short offset). Similar the 6800 where the generic 16 bit index register IX was to be used.&lt;/p&gt;&#xA;&lt;p&gt;When the 6500 series was designed by former Motorola engineers, they flipped the concept by putting the base address not in a register but in memory and adding a (short) 8 bit register as index. They even marketed it as an advantage, being a 'true' index now. Well, I guess that's debatable.&lt;/p&gt;&#xA;&lt;p&gt;So, switching from 65xx programming to x80 programming, also includes the switch between the base address held in a register or in memory.&lt;/p&gt;&#xA;&lt;p&gt;For all practical purpose, think of HL, IX, IY on the Z80 as pointers like in C. Just have them point somewhere, increment or decrement them, add or subtract a value and that's it. No complex addressing. That's as well the reason C compilers are much less work to be implemented on an x80 or 68xx CPU than on a 65xx. They fit the simple abstraction C makes of a CPU way better than the fine tuned 65xx structure.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Which is a way to avoid complex notation. For the 8008 it was even less ambiguous as &lt;code&gt;LAM&lt;/code&gt; - for more history see &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/12979/6659&quot;&gt;this answer&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Code Optimization&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there a better way to print a string?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Depends on your environment.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;On 6502 LDA was checking for affecting zero flag, this is not the case with Z80, so I am trying to or 0 and checking result against zero, but then using B register as or changes A. Doesn't look very elegant.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really sure why you're using B &lt;em&gt;and&lt;/em&gt; &lt;code&gt;OR 0&lt;/code&gt; (*2). The most simple way would be simply ORing A to A as in &lt;code&gt;OR A&lt;/code&gt;. Next HL might be more performant, as it doesn't need a prefix. In general, most Z80 features come with a price of a code prefix overhead and thus slower execution. So preferred pointer register is always HL, seconded by DE.&lt;/p&gt;&#xA;&lt;p&gt;A straightened code might look like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    LD   HL,msg &#xA;loop:&#xA;    LD   A,(HL)&#xA;    OR   A&#xA;    JP   Z, end&#xA;    CALL print_char&#xA;    INC  HL&#xA;    JP   LOOP&#xA;end:&#xA;    HALT&#xA;&#xA;msg: .asciiz &amp;quot;Hello World&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This code is as well clean 8080 code, so will run on any x80 CPU.&lt;/p&gt;&#xA;&lt;p&gt;Then again, and in this the Z80 is still better than C assumes, it allows to count and jump in one instruction, which makes length terminated strings way more applicable than zero terminated (*3). So a real Z80 like string handling would be like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    LD   HL,msg&#xA;    LD   B,(HL)&#xA;loop:&#xA;    INC  HL&#xA;    LD   A,(HL)&#xA;    CALL print_char&#xA;    DJNZ loop&#xA;end:&#xA;    HALT&#xA;&#xA;msg .byte 11,&amp;quot;Hello World&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now the inner loop is only 4 instructions and as fast as it can get.&lt;/p&gt;&#xA;&lt;p&gt;In fact, this is another 65xx to Z80 mentality step to be taken. Zero delimited strings come (somewhat) natural on 65xx (*3), as they set the flags accordingly to a character loaded, while Z80 works best with length delimited, due the implied usage of B as counter register.&lt;/p&gt;&#xA;&lt;p&gt;I'd strongly recommended doing that step and go full Z80 on this.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*2 - Here lies another benefit/pitfall when moving between these CPUs - the 8080 is way more orthogonal implementing all register to register variations than the 6502, including otherwise strange ones like ORing or ANDing A with A.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Which they are anyway. Length terminated strings do not have issues with any embedded data.&lt;/p&gt;&#xA;&lt;p&gt;*4 - As inherited from its real ancestor 6800 and spiritual ancestor PDP.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-25T10:49:32.597" LastActivityDate="2021-03-25T10:49:32.597" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="18396" PostTypeId="2" ParentId="2553" CreationDate="2021-03-24T15:28:00.020" Score="0" Body="&lt;p&gt;Afaik the RGB port on the electron is the same as the one on the BBC micro. This is digital RGB with composite sync at TTL levels. It also provides a handy 5V supply.&lt;/p&gt;&#xA;&lt;p&gt;This can be adapted to RGB Scart with a few resistors to lower the signal levels and create the trigger voltages to tell the TV to use RGB scart mode. There is plenty of room in the shell of the scart plug for the resistors. You can find a schematic at &lt;a href=&quot;http://mdfs.net/Info/Comp/BBC/Monitor/BBCtoTV.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://mdfs.net/Info/Comp/BBC/Monitor/BBCtoTV.htm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Going to VGA however is more problematic in a couple of ways.&lt;/p&gt;&#xA;&lt;p&gt;The first is that VGA normally uses seperate HSYNC and VSYNC signals, but the BBC micro/electron uses composite sync. There do exist sync separator chips like the LMH1981, which could in principle be used to split this up. I haven't tried them myself though.&lt;/p&gt;&#xA;&lt;p&gt;The second is that the video timings are based on PAL TV and may be too slow for many VGA monitors.&lt;/p&gt;&#xA;" OwnerUserId="499" LastActivityDate="2021-03-24T15:28:00.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18397" PostTypeId="2" ParentId="18391" CreationDate="2021-03-24T15:37:42.090" Score="5" Body="&lt;p&gt;The Sinclair QL's file system has a 64-byte &amp;quot;File header&amp;quot; providing metadata for the file. Among system-owned fields like modified/access dates, file length, type and name, it also holds 8 bytes of so-called &amp;quot;type-dependent data&amp;quot; that can be used by specific file types for their own metadata.&lt;/p&gt;&#xA;&lt;p&gt;Due to the structure of QDOS I/O, that header is also (optionally) provided when files are transported over non-block media like network or serial streams.&lt;/p&gt;&#xA;&lt;p&gt;This concept shares the same problem with a lot of early metadata technologies: When transferred over to a non-metadata-aware block file system (like a FAT disk format, for example) the metadata is lost (obviously with file type-dependant consequences).&lt;/p&gt;&#xA;&lt;p&gt;As to the &amp;quot;why?&amp;quot; (or rather, &amp;quot;why not?&amp;quot;) I think that's the exact reason.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2021-03-24T15:46:08.357" LastActivityDate="2021-03-24T15:46:08.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18398" PostTypeId="2" ParentId="18384" CreationDate="2021-03-24T15:44:21.750" Score="10" Body="&lt;p&gt;There is nothing about the NES that enables Mario's more physics-based behaviour; credit is due to Miyamoto et al for that innovation. Algorithmically, all there really is to it is maintaining a fractional part of location and applying user input as an acceleration rather than directly as a velocity.&lt;/p&gt;&#xA;&lt;p&gt;So: 16-bit arithmetic rather than 8, two adds rather than one.&lt;/p&gt;&#xA;&lt;p&gt;The NES has a reasonably fast processor for an 8-bit console but it's within ordinary bounds, and none of the other chips help in the physics calculations.&lt;/p&gt;&#xA;&lt;p&gt;Sticking with the cost of computation stuff, exact mechanics aside:&lt;/p&gt;&#xA;&lt;p&gt;Realistic momentum was a key part of the very first arcade game, Computer Space, to the point that few could control it — it's set in space so there's no sense of wind resistance or anything else to decelerate you other than turning your ship around and accelerating in the other direction. You can see that strain of physics get much closer to the mainstream in some of Atari's vector arcade games, Lunar Lander and Asteroids being obvious examples.&lt;/p&gt;&#xA;&lt;p&gt;A great home example of that line of gameplay is Thrust.&lt;/p&gt;&#xA;&lt;p&gt;Trying to come up with things that look closer to platformers, and just off the top of my head, Chuckie Egg in its Acorn and Amstrad variations as a title that absolutely nails gravity, and Exile for the Acorns and the Commodore 64 develops a pretty complicated system of physics that also ropes in buoyancy and objects interacting with one another.&lt;/p&gt;&#xA;&lt;p&gt;I'm sure there are innumerable other examples, many better and/or earlier, those are just some that I'm acquainted with.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2021-03-25T18:15:30.280" LastActivityDate="2021-03-25T18:15:30.280" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18399" PostTypeId="2" ParentId="18393" CreationDate="2021-03-24T19:46:35.477" Score="4" Body="&lt;p&gt;A handy way of outputting a string on the Z80 is to use something like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;primm:&#xA;  ex (sp),hl&#xA;primmlp:&#xA;  ld a,(hl)&#xA;  call putchar&#xA;  inc hl&#xA;  ld a,(hl)&#xA;  or a&#xA;  jr nz,primmlp&#xA;  ex (sp),hl&#xA;  ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The message to be output must immediately follow the call instruction, be at least one character long, and be followed by a zero byte and then the code that should be executed after it finishes.  This function will fetch the return address, output bytes there until it sees a zero byte, update the return address to that of the zero byte, and return.  Note that while although return address will be one the address of the trailing zero byte rather than the next &amp;quot;real&amp;quot; instruction, letting the zero byte execute as a NOP is faster than adding another INC HL between the LD A,(HL) and the EX (SP),HL instructions to prevent such execution.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-03-24T19:46:35.477" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="18400" PostTypeId="1" AcceptedAnswerId="18401" CreationDate="2021-03-25T04:26:05.320" Score="7" ViewCount="1856" Body="&lt;p&gt;A monochrome monitor displays only one foreground color and one background color.  Usually the monitor was manufactured to produce only one color, which was cheaper (both CRT and electronics) than a color monitor.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Was there a monitor that accepted a monochrome signal, but then allowed a choice of foreground (or background) colors?&lt;/strong&gt;  For example, had an option to choose between green-on-black and amber-on-black?&lt;/p&gt;&#xA;&lt;p&gt;Inverse/Reverse video is not the subject of this question.&lt;/p&gt;&#xA;&lt;p&gt;This question is asking about such a capability &lt;em&gt;in the monitor&lt;/em&gt;, not &lt;em&gt;in the computer&lt;/em&gt;.  Certainly, there were &lt;em&gt;many&lt;/em&gt; computers that sent a color signal but had monochrome display modes with configurable colors, but that is not the question here.  &lt;strong&gt;This is not about having several monochrome modes generated by the computer.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Related:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/683/10260&quot;&gt;Why are a lot of monochrome computer monitors green?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/6797/10260&quot;&gt;Why were early personal computer monitors not green?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/7911/10260&quot;&gt;Why green phosphor instead of amber?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/7673/10260&quot;&gt;What were other colors beside green and amber for monochrome monitors?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/2722/10260&quot;&gt;Is there a device that will take composite video from a vintage computer and filter it so it is green or amber like the old monochrome monitors?&lt;/a&gt; (a device &lt;em&gt;between&lt;/em&gt; the computer and monitor)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/12835/851&quot;&gt;Exactly what color was the text on monochrome terminals with green-on-black and amber-on-black screens?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="851" LastEditDate="2021-03-26T07:51:49.083" LastActivityDate="2021-03-26T07:51:49.083" Title="Choosing a monochrome color at the monitor?" Tags="&lt;crt-monitor&gt;&lt;display&gt;" AnswerCount="4" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18401" PostTypeId="2" ParentId="18400" CreationDate="2021-03-25T05:15:52.473" Score="14" Body="&lt;p&gt;A form of this was used extensively for avionics displays.  Known as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Penetron#Use_in_avionics&quot; rel=&quot;noreferrer&quot;&gt;penetron&lt;/a&gt; (stop giggling), the CRT used a single gun and dual phosphor coatings (red and green).  Each frame was drawn in two passes.  In the first, low intensity scan the inner phosphor layer would be stimulated (generating, say, red light); a second scan at high beam intensity would stimulate the outer layer (e.g. green).  Stimulating a point on both passes would generate a blend of the two (e.g. yellow).  Note that each pass is a fixed intensity (not greyscale) which results in three possible full-intensity colors on the display (plus black).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nVhM3.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nVhM3.jpg&quot; alt=&quot;penetron tube&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&#xA;&lt;sup&gt;Source: &lt;a href=&quot;http://lampes-et-tubes.info/cr/cr088.php&quot; rel=&quot;noreferrer&quot;&gt;Lamps &amp;amp; Tubes&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2021-03-26T01:10:53.337" LastActivityDate="2021-03-26T01:10:53.337" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18402" PostTypeId="2" ParentId="18400" CreationDate="2021-03-25T05:48:16.473" Score="2" Body="&lt;p&gt;I suppose it wasn’t that long ago when mono LCD panels were available, certainly by the late ‘80s and you could pick your preferred backlight.  I don’t remember a monitor that offered that though.&lt;/p&gt;&#xA;" OwnerUserId="19372" LastActivityDate="2021-03-25T05:48:16.473" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18403" PostTypeId="2" ParentId="18400" CreationDate="2021-03-25T07:48:16.117" Score="12" Body="&lt;p&gt;Yes, back in the day my family had an IDEK brand color CRT that supported setting the color of monochrome signal. It was not a standard PC monitor for VGA only, as it supported both analog and digital inputs, and went down to 15 kHz as it was used with an Amiga as well.&lt;/p&gt;&#xA;&lt;p&gt;In the front panel there were three buttons for disabling each component of RGB individually. When the monitor was configured to accept MDA/Hercules signal which is digital monochrome signal, the color is white and you can then select which RGB guns to disable to get e.g. green only picture.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-03-25T08:18:18.100" LastActivityDate="2021-03-25T08:18:18.100" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18404" PostTypeId="2" ParentId="9053" CreationDate="2021-03-25T08:24:24.557" Score="2" Body="&lt;p&gt;&lt;strong&gt;Fairchild F8&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is &amp;quot;add to accumulator&amp;quot; but no subtract.&lt;/p&gt;&#xA;&lt;p&gt;There is &amp;quot;decrement register&amp;quot; but no &amp;quot;increment register&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;There is &amp;quot;increment accumulator&amp;quot; but no &amp;quot;decrement accumulator&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2021-03-25T08:24:24.557" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18405" PostTypeId="2" ParentId="18400" CreationDate="2021-03-25T16:25:05.387" Score="11" Body="&lt;p&gt;I have a Eizo 9050s monitor (similar in features to the one mentioned in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/18401/10479&quot;&gt;This answer&lt;/a&gt;), which has a &amp;quot;color switch&amp;quot; in the front, with the settings &amp;quot;green/color/amber&amp;quot;. In &amp;quot;green&amp;quot;, the signal to the red and blue guns is completely shut off. In the &amp;quot;amber&amp;quot; position, the signal to the blue is shut off, and the one to the green gun is approximately cut in half (without modern stuff like &amp;quot;gamma correction&amp;quot;). This switch is at the output of the color decoder, so it works both with analog and digital signals, and all kinds of supported digital signals.&lt;/p&gt;&#xA;&lt;p&gt;I built myself an MDA input cable that wires all of R/G/B to the MDA &amp;quot;video&amp;quot; pin and &amp;quot;I&amp;quot; to the MDA &amp;quot;intensity&amp;quot; pin. This allows me to get a grayscale picture in &amp;quot;full color&amp;quot; mode, a green picture in &amp;quot;green&amp;quot; mode or an amber picture in &amp;quot;amber&amp;quot; mode. I do not like operating that monitor on MDA, though, because its short-persistence phosphor causes awful flicker on the 50Hz MDA signal, and the same is true for the PAL-timed 50Hz signal generated by my Amstrad CPC computer.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2021-03-25T16:25:05.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18406" PostTypeId="2" ParentId="18391" CreationDate="2021-03-26T07:33:00.570" Score="6" Body="&lt;p&gt;The BeOS used extended attributes heavily.&lt;/p&gt;&#xA;&lt;p&gt;In OS/2, rexx scripts are tokenised into extended attributes, and all sorts of things like icons and whatnot used them.  There were a decent arrangement of tools to access and edit the ea's.  4os2 could store its descriptions in ea.&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2021-03-26T07:33:00.570" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18407" PostTypeId="1" AcceptedAnswerId="18411" CreationDate="2021-03-26T09:58:54.803" Score="4" ViewCount="376" Body="&lt;p&gt;Trying to design a Z80 based computer that starts from an EEPROM, loads CP/M to RAM and pages out (switches off) EEPROM to allow CP/M to access full 64K RAM. What is a good way of achieving this ? My current thought process is initially mapping EEPROM to the bottom of TPA (see image), say between 0x1000 to 0x2FFF, use a single JP 0x1000 instruction at 0x0000. Let the code to load CP/M CCP/BDOS and BIOS as well as a small piece of code somewhere on the rest of TPA (say 0x3000) that disables EEPROM and jumps to BDOS. Then jump to 0x3000 when I finish loading everything.&lt;/p&gt;&#xA;&lt;p&gt;Sounds a bit complicated, is there a more practical way of doing it that you can think of?&lt;/p&gt;&#xA;&lt;p&gt;Main question is then how to disable EEPROM, all I can think of is a TTL based latch addressed a yet unused portion of TPA to bring CE of EEPROM to high permanently (until the next reset or power cycle). Any recommendations here ?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/u2a8o.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/u2a8o.gif&quot; alt=&quot;CPM&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21002" LastActivityDate="2021-04-14T15:55:05.823" Title="Z80, best way to page out EEPROM" Tags="&lt;z80&gt;&lt;cp-m&gt;" AnswerCount="2" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18408" PostTypeId="1" CreationDate="2021-03-26T10:07:29.927" Score="3" ViewCount="238" Body="&lt;p&gt;The PDP-1 is a ones' complement machine, and does some checks to make sure you (almost) never get negative zero. I'm struggling to think why anyone would want ones' complement arithmetic, but &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7095/why-did-ones-complement-decline-in-popularity&quot;&gt;it was more popular in the past&lt;/a&gt;. Then the PDP-4 came along, (and the similar -7, -9 and -15). The -4 was meant to be cheaper than the PDP-1, and many features were dropped. The machine encoding was very much simplified, and many instructions were dropped altogether. The I/O system was pruned right back as well, becoming much more similar to the PDP-8's.&lt;/p&gt;&#xA;&lt;p&gt;So my question is, if they were pruning so much out of the architecture, and also adding two's complement (the correct way, as everyone knows), why leave ones' complement in?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="19767" LastEditDate="2021-03-26T19:33:56.987" LastActivityDate="2021-03-27T00:22:21.763" Title="Why do the later 18 bit PDPs include both ones' and two's complement?" Tags="&lt;pdp-7&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18409" PostTypeId="2" ParentId="18362" CreationDate="2021-03-26T15:30:32.913" Score="3" Body="&lt;p&gt;According to my US programmer's manual and user's guide it's VIC-20 with a hyphen here. I'm sure that if I dug, though, I could probably find a place where Commodore accidentally omitted the hyphen in the books, since I have a feeling that even within Commodore there wasn't a single &amp;quot;canonical&amp;quot; name.&lt;/p&gt;&#xA;&lt;p&gt;Commodore used different names in different regions, though. VC 20 was its name in Germany; it was the VIC-1001 in Japan. Canada apparently called it the VIC 20 without a hyphen.&lt;/p&gt;&#xA;&lt;p&gt;Honestly, I know what people are talking about regardless, so it doesn't bother me when I see it written any way. It feels like a Sega Mega Drive vs. Sega Genesis argument, but even more pedantic.&lt;/p&gt;&#xA;" OwnerUserId="9164" LastEditorUserId="79" LastEditDate="2021-03-26T15:59:11.673" LastActivityDate="2021-03-26T15:59:11.673" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18411" PostTypeId="2" ParentId="18407" CreationDate="2021-03-26T19:15:48.647" Score="8" Body="&lt;p&gt;&lt;strong&gt;&lt;em&gt;Preface:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;a) This is kind of borderline as it's about generic circuit design. Then again, it's about Z80 and I do see some RC.SE relevant insight that may come from comparing different solutions.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;b) There are zillions of ways to do this and it depends on whatever main and side goals there are. The following is my personal take on this issue with an emphasis on pure TTL.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;It depends a bit on what the startup code is supposed to allow.&lt;/p&gt;&#xA;&lt;h2&gt;Minimal Setup&lt;/h2&gt;&#xA;&lt;p&gt;If it's strictly about being able to boot from a device, then the most simple configuration is to handle chip select according to read/write access. The goal is to deliver a boot-configuration where all read access is from ROM while writes are directed to RAM and a run-configuration where RAM is enabled for read and write.&lt;/p&gt;&#xA;&lt;p&gt;The basic setup is like this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A Flip-Flop (half a 7474)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Four NAND gates (one 7400)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The FF gets reset by system reset&lt;/p&gt;&#xA;&lt;p&gt;(Z80 /Reset -&amp;gt; '74 1CLR)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The FF clear output is NANDed with inverted write to form ROM /CS&lt;/p&gt;&#xA;&lt;p&gt;(Z80 /WR -&amp;gt; '00 1A+1B; '00 1Y -&amp;gt; '00 2A; '74 /1Q -&amp;gt; '00 2B; '00 2Y -&amp;gt; ROM /CS)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A15 is NANDed with inverted read to set the FF&lt;/p&gt;&#xA;&lt;p&gt;(Z80 /RD -&amp;gt; '00 4A+4B; '00 4Y -&amp;gt; '00 3A; A15 -&amp;gt; '00 3B; '00 3Y -&amp;gt; '74 1PR)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;em&gt;Note, RAA CS generation has been left out as the existing circuitry is unknown. It must not be asserted while ROM CS is active (low). With a bit of thinking the inverting NANDs may be used to incorporate it.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;How does it work?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;After Reset RAM is write only, while ROM is read only (duh).&lt;/li&gt;&#xA;&lt;li&gt;Execution starts at 0000h.&lt;/li&gt;&#xA;&lt;li&gt;All read will come from ROM, Code, as well as data.&lt;/li&gt;&#xA;&lt;li&gt;All write will go to RAM.&lt;/li&gt;&#xA;&lt;li&gt;The boot code can load data from a device (must be in I/O space *1) and write it into RAM.&lt;/li&gt;&#xA;&lt;li&gt;Any read access above 8000h will disable the ROM.&lt;/li&gt;&#xA;&lt;li&gt;When ready it can jump to any address at or above 8000h.&lt;/li&gt;&#xA;&lt;li&gt;Code execution is reading.&lt;/li&gt;&#xA;&lt;li&gt;This will disable the boot ROM and enable read and write (or whatever the usual configuration here is).&lt;/li&gt;&#xA;&lt;li&gt;If the code loaded is to be executed below 8000h, a trampoline function (aka a jump to destination) has to be moved into RAM above 8000h and called.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With just two very basic TTL this is about the minimum possible in classic systems. The main point is to be invisible after use. It will not inflict any constraints on operation and system resources. It does not reserve any resource past its operation.&lt;/p&gt;&#xA;&lt;p&gt;Of course it could be extended - for example using the set FF to distinguish between power-on reset and later reset (cold vs. warm boot), plus maybe using the second FF to detect two consecutive resets to be interpreted as hard-reset (doing cold boot instead of warm boot). Or have the second FF be cleared by some I/O port, to enable cold boot from software. Possibilities are a lot.&lt;/p&gt;&#xA;&lt;p&gt;In later years, ca. post 1980, this would be integrated into a PAL, offering many more ways to combine this. So if your system already includes a PAL, then these two chips may easily move inside, while still keeping the main function of a boot time only solution, invisible to any software later on.&lt;/p&gt;&#xA;&lt;p&gt;And yes, it's of course possible to write software that moves some boot image into RAM without needing RAM itself. The Z80 got plenty of registers to hold pointers and state variables. Even rather complex things can be done that way. Boot code is a great way to hone your skills.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - This is an x80 CPU, so I/O belongs into I/O address space. Even more as the Z80 offers full 64 KiB I/O address space.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-28T16:34:21.917" LastActivityDate="2021-03-28T16:34:21.917" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="19412" PostTypeId="1" CreationDate="2021-03-27T03:59:19.060" Score="11" ViewCount="3259" Body="&lt;p&gt;I have read a fiction novel in which a manufacturer in the 80s provided GUI by adding a dedicated drawing hardware besides videocard or by extending videocard.&lt;/p&gt;&#xA;&lt;p&gt;Fictional as it is, is this possible or even based on reality? This hardware I guess should take control of IO, draw the border of window and locate text and icons(but not images which would take too much RAM thus making it expensive), and manage z-order and redrawing, thus free the cpu from most of the interactive interruptions.&lt;/p&gt;&#xA;" OwnerUserId="17812" LastActivityDate="2021-03-31T03:19:01.457" Title="Hardware assisted Graphical User Interface?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;graphics&gt;&lt;gui&gt;" AnswerCount="10" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19413" PostTypeId="2" ParentId="19412" CreationDate="2021-03-27T04:15:28.250" Score="4" Body="&lt;p&gt;I think what you’re describing is a GPU, so yes it’s both possible and commonplace.  I don’t recall it being done widely until the 90s though.&lt;/p&gt;&#xA;" OwnerUserId="19372" LastActivityDate="2021-03-27T04:15:28.250" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19414" PostTypeId="2" ParentId="19412" CreationDate="2021-03-27T04:16:49.453" Score="19" Body="&lt;p&gt;I imagine the &lt;a href=&quot;https://en.m.wikipedia.org/wiki/TMS34010&quot; rel=&quot;noreferrer&quot;&gt;TMS34010&lt;/a&gt; could have handled all of that, to beyond the standards of an ‘80s GUI; it is a combination CPU and GPU for the mainstream consumer market first released in 1986.&lt;/p&gt;&#xA;&lt;p&gt;It and its descendants are known for powering pioneering arcade games such as Hard Drivin’ and Mortal Kombat, but it was also available as a putative video card standard for PCs as the TIGA; in that form, it was used as a CAD and Windows accelerator, though Windows versions of the era offloaded only the GDI functions (i.e., the pixel manipulations and plotting, but not the total layout and window-level logic).&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="2037" LastEditDate="2021-03-30T02:47:57.530" LastActivityDate="2021-03-30T02:47:57.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19415" PostTypeId="1" AcceptedAnswerId="19417" CreationDate="2021-03-27T08:48:19.690" Score="10" ViewCount="686" Body="&lt;p&gt;Emulation is called &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/1191/115&quot;&gt;cycle-accurate&lt;/a&gt; if the original system's cycle-synchronous behaviour is fully captured; for example, a cycle-accurate emulation of a CPU, executing an instruction, would first present the externally visible effects of what the original CPU would do in the first cycle of executing that instruction, then so on for the second and subsequent cycles.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;I am looking for an established name for a weaker property&lt;/strong&gt;, where a CPU emulator makes sure that overall, each instruction takes the same number of clock cycles to execute, but between those cycles, makes no effort to present each outside-visible effect at the same cycles.&lt;/p&gt;&#xA;&lt;p&gt;So for example, a real CPU might execute something like &lt;code&gt;MOV $1234, R&lt;/code&gt; in 8 cycles, setting the address bus to &lt;code&gt;$1200&lt;/code&gt; in cycle 3, then to &lt;code&gt;$1234&lt;/code&gt; in cycles 4 and 5, then put the value of the &lt;code&gt;R&lt;/code&gt; register on the data bus in cycle 6. Now imagine there is an alternative implementation (be it an emulator, a replacement IC, or an FPGA implementation) that executes &lt;code&gt;MOV $1234, R&lt;/code&gt; in 8 cycles, by doing nothing for 4, then putting &lt;code&gt;$1234&lt;/code&gt; on the address bus and the value of &lt;code&gt;R&lt;/code&gt; on the data bus in cycle 5, and then does nothing for 3 more cycles, would not be cycle-accurate, but it would meet my definition.&lt;/p&gt;&#xA;" OwnerUserId="115" LastActivityDate="2021-03-31T16:36:27.247" Title="What's a good term for &quot;instruction cycle count-accurate&quot; emulation / simulation?" Tags="&lt;emulation&gt;&lt;terminology&gt;&lt;simulator&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19416" PostTypeId="2" ParentId="19412" CreationDate="2021-03-27T08:52:19.700" Score="15" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Silicon_Graphics#Motorola_680x0-based_systems&quot; rel=&quot;noreferrer&quot;&gt;Silicon Graphics&lt;/a&gt; started to provide dedicated graphics terminals and workstations in the 80s. So the technology was definitely there, even for 3D.&lt;/p&gt;&#xA;&lt;p&gt;In 1991, they put this technology on a PC expansion card with &lt;a href=&quot;https://en.wikipedia.org/wiki/IrisVision&quot; rel=&quot;noreferrer&quot;&gt;IrisVision&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So if this was possible for a full 3D-pipeline in 1991, for the simpler hardware needed for GUI acceleration that should have been possible a lot earlier.&lt;/p&gt;&#xA;&lt;p&gt;The main problem earlier would have been fast enough access to the RAM, so I'd imagine a second card for video RAM (including DACs etc.) with a direct connection to the first card would have been a possible solution.&lt;/p&gt;&#xA;&lt;p&gt;And the &lt;a href=&quot;https://en.wikipedia.org/wiki/Xerox_Alto&quot; rel=&quot;noreferrer&quot;&gt;Xerox Alto&lt;/a&gt; had a framebuffer-based GUI back in 1973, with some assistance in the microcode. Though not on an expansion card.&lt;/p&gt;&#xA;&lt;p&gt;So, very much possible, and somewhat based on reality (though not in this exact variant).&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-03-27T09:00:13.143" LastActivityDate="2021-03-27T09:00:13.143" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19417" PostTypeId="2" ParentId="19415" CreationDate="2021-03-27T09:18:14.670" Score="13" Body="&lt;p&gt;I have once read &lt;a href=&quot;https://mgba.io/2017/04/30/emulation-accuracy/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a blog post by the developer of mGBA, which simply uses ‘cycle-count accuracy’ for this property&lt;/a&gt;, and seems to imply this is an established term. Looking up this phrase in a search engine seems to weakly corroborate this, as I found a number of other resources where the same term appears:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Paper: &lt;a href=&quot;http://sasimi.jp/new/sasimi2012/files/program/archive/pdf/p147_R2-1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mao-Lin Li, Chen-Kang Lo, Li-Chun Chen, Ren-Song Tsay, Hong-Jie Huang, Jen-Chieh Yeh, ‘A Formal Full Bus TLM Modeling for Fast and Accurate Contention Analysis’&lt;/a&gt; (some of the same authors have also collaborated on a number of other papers where the same term appears)&lt;/li&gt;&#xA;&lt;li&gt;Paper: &lt;a href=&quot;https://dl.acm.org/doi/10.5555/2263019.2263033&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oana Boncalo, Alin Dobre, Alexandru Amaricai, Andrei Tanase, ‘A cycle-count-accurate simulation platform with enhanced design exploration capability’&lt;/a&gt; (cites some of the papers previously mentioned)&lt;/li&gt;&#xA;&lt;li&gt;Book: &lt;a href=&quot;https://link.springer.com/chapter/10.1007%2F978-1-4757-4538-2_7&quot; rel=&quot;nofollow noreferrer&quot;&gt;Andreas Hoffmann, Heinrich Meyr, Rainer Leupers, &lt;em&gt;Software Tools for Application Design&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Brochure: &lt;a href=&quot;https://www.ti.com/lit/ml/sprs397/sprs397.pdf?ts=1617084653068&quot; rel=&quot;nofollow noreferrer&quot;&gt;Texas Instruments, ARM Simulator Datasheet (v4.6)&lt;/a&gt; (this one seems to conflate it with cycle accuracy, so beware)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/bzotto/MCS6502/blob/d3c4b37618b76f3eb670f43a273f469b47da6b56/README.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;README file for the MCS6502 emulator&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=ARMulator&amp;amp;oldid=350501204&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page for ARMulator as of March 2010&lt;/a&gt; (it cites no references, so I put this one last; I mention it mostly for the sake of establishing how old the term is)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As I remember, when I first encountered that blog post, I have never seen those terms before, but my rough knowledge of how CPUs work allowed me to correctly guess what they referred to right away when I saw them contrasted with each other. If you do similarly, I think there should be no misunderstandings.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-03-31T16:36:27.247" LastActivityDate="2021-03-31T16:36:27.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19418" PostTypeId="2" ParentId="19412" CreationDate="2021-03-27T13:00:49.127" Score="14" Body="&lt;p&gt;A simple form of this was embodied by the BBC Micro of all things, when paired with a Second Processor.  The two were connected by a remarkably simple interface known as the &amp;quot;Tube&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;In this configuration, the BBC Micro itself became an &amp;quot;I/O processor&amp;quot; handling keyboard input, display output, and all tape/disk/network functions, while the actual application code ran on the Second Processor - which need not be a second 6502, though it often was.  Famously the ARM1 was mainly used as a Second Processor module for developing software that would later be used in the ARM2-based Archimedes computers.&lt;/p&gt;&#xA;&lt;p&gt;As far as the display is concerned, the &amp;quot;Tube&amp;quot; interface connecting the two processors provided a dedicated byte stream buffer, through which text and control codes could be sent easily.  The I/O processor would interpret them identically to if the same bytes had been sent to the VDU routines by a local program, so all the usual graphics routines were available - including functions to restrict text and graphics drawing to &amp;quot;windows&amp;quot; of less than the full screen.&lt;/p&gt;&#xA;&lt;p&gt;Executing these routines could proceed while the Second Processor went on to do its own processing, which could be a significant acceleration.&lt;/p&gt;&#xA;&lt;p&gt;Although the Tube interface was already available in the original BBC Micro of 1982, it is most commonly associated with the BBC Master of 1986.  It could be bought as a pre-accelerated system - the &lt;strong&gt;BBC Master Turbo&lt;/strong&gt; - with a double speed 65C02 Second Processor mounted on a small card &lt;em&gt;inside&lt;/em&gt; the case, rather than in a separate case alongside.  &lt;a href=&quot;https://bbc.godbolt.org/?&amp;amp;model=MasterTurbo&quot; rel=&quot;noreferrer&quot;&gt;You can even play with one in your browser.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2021-03-27T13:06:52.847" LastActivityDate="2021-03-27T13:06:52.847" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19419" PostTypeId="2" ParentId="19412" CreationDate="2021-03-27T14:57:03.143" Score="13" Body="&lt;p&gt;The Amiga GUI was using the hardware's custom chipset (the 'GPU', if you will) to assist in drawing lines or blitting rectangles. That was back in 1985.&lt;/p&gt;&#xA;&lt;p&gt;I'm not sure any functionality beyond that would have made much sense in the eighties: Due to the low resolutions and the lack of colors, GUI elements were extremely simply - mostly monochrome, only few pixels/lines per element.&lt;/p&gt;&#xA;&lt;p&gt;On top of that, systems didn't support multitasking (Windows, Mac OS), were limited by RAM so their multitasking abilities were often theoretical (Amiga) or mostly used the GUI to manage a bunch of shell windows and a clock due to lack of actual GUI applications (Unix). It's not like having a very fast GUI that doesn't eat up CPU ressources is your top priority if you're only running one application at a time.&lt;/p&gt;&#xA;" OwnerUserId="19895" LastActivityDate="2021-03-27T14:57:03.143" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19420" PostTypeId="1" CreationDate="2021-03-27T15:29:20.607" Score="11" ViewCount="1117" Body="&lt;p&gt;Old computer systems were supplied—by our present notion—with very little memory, thus conservation of both RAM and storage room has been tremendously important during those years of austerity. Meanwhile a multitask operating system ran numerous processes which often kept &lt;em&gt;the same static data&lt;/em&gt; in memory (but separately). Until c. 1992 putting libraries into every executable file was a common practice and a simple Hello-Worldish binary produced on early Unix System V releases may easily take 64 KiB (compared to about 12 KiB for modern OSes); it slowed computing and wasted the room.&lt;/p&gt;&#xA;&lt;p&gt;In mid-1980s memory mapping was already a known concept, multitasking was understood as the future (even for personal computers), and developers of the day couldn’t be oblivious to a great economy that placing &lt;em&gt;one&lt;/em&gt; copy of a common library to RAM (instead of many separate copies) promised. In fact, Microsoft jumped on shared libraries from the beginning of Windows. What hampered introduction of dynamic linkers elsewhere?&lt;/p&gt;&#xA;" OwnerUserId="21191" LastActivityDate="2021-03-29T21:55:01.340" Title="Belated ascendancy of dynamic linkers" Tags="&lt;history&gt;&lt;software-development&gt;&lt;virtual-memory&gt;&lt;link-editor&gt;" AnswerCount="5" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19421" PostTypeId="2" ParentId="19420" CreationDate="2021-03-27T16:31:45.903" Score="19" Body="&lt;p&gt;I have to disagree, to some extent, with the framing of your question. While it is correct that limited RAM in early micros made it a valuable resource to conserve, it is &lt;em&gt;not&lt;/em&gt; the case that shared code libraries weren't used to accomplish this. Shared code libraries were very prevalent in the early micros, and were generally embedded as ROM firmware, as a direct solution to the problem of RAM being limited.&lt;/p&gt;&#xA;&lt;p&gt;If you think of the typical home micro with BASIC in ROM with this framing, it is clear that BASIC is just a shared run-time library. What it does is make possible many sophisticated (if somewhat slow!) applications with very modest RAM requirements. This is true whether the run-time is located in RAM or ROM, but is much more effective if you can ROM it and leave all the system RAM for the app.&lt;/p&gt;&#xA;&lt;p&gt;Apart from BASIC, many systems included a full set of reusable application libraries in ROM. The original Mac, Atari ST, and Amiga all did this. On the Amiga, the code in the ROM was literally comprised of shared libraries in the modern sense of that term.&lt;/p&gt;&#xA;&lt;p&gt;If you were to accept that shared code libraries have been a consistent feature from the earliest RAM-constrained micros, then your question sort of morphs into why did it seem to come later to the systems we use today, like Windows and Unix derivatives. That is a totally separate question, and I think it relates more to the unintended side-effects of this approach - colloquially referred to as &lt;a href=&quot;https://en.wikipedia.org/wiki/DLL_Hell&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;DLL Hell&lt;/em&gt;&lt;/a&gt;. That is a problem best solved in the OS, but routinely solved with add-ons that succeed to varying degrees.&lt;/p&gt;&#xA;&lt;p&gt;In defense of the early implementations that exposed this problem with dependency issues, perhaps,  the problem size of doing dependency management well was often underestimated. Also, OS developers likely couldn't have predicted the proliferation of 3rd party shared libraries that became de-facto additions to the OS, but without the corresponding and disciplined revision/testing/release process.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-03-27T17:11:48.577" LastActivityDate="2021-03-27T17:11:48.577" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19422" PostTypeId="2" ParentId="19420" CreationDate="2021-03-27T16:41:00.060" Score="4" Body="&lt;p&gt;The question seems to cover multiple areas at once, including&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Dynamic linking at load time by the OS&lt;/li&gt;&#xA;&lt;li&gt;Runtime linking controlled by the application&lt;/li&gt;&#xA;&lt;li&gt;Shared libraries, in form of system-wide (or per-user) libraries&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Shared code, either as preloaded by OS or&lt;/li&gt;&#xA;&lt;li&gt;Shared code loaded by application when needed, but only loaded once&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In any case, all of that was already in use, since the 1970s (*1), in mainframe software. Applications were not only developed in modules and linked to a static binary, but also only partially linked, deferring the final linking to load time. Some OSes did offer link loading as default program start. Here, an executable was not linked at all, but started from a library and linked while loading.&lt;/p&gt;&#xA;&lt;p&gt;Since the linker was part of the OS runtime, any linking could be done later during program runtime. This included, of course, unloading of modules as well. Underlying this was always some library management system, usually also part of the OS.&lt;/p&gt;&#xA;&lt;p&gt;In the early days of real memory operating systems there was no difference between shared and not shared, as sharing was just exchanging a memory pointer. With virtual memory this was supplied by the OS. Again, during load and later.&lt;/p&gt;&#xA;&lt;p&gt;Last but not least were functions where the OS could be made to pre-load certain modules (including whole applications) at startup or by operator command. Quite handy in a multi-user environment with many users using the same applications, like editors, languages or other tools. The main program would be loaded only once at startup. Any user starting 'his' editor, would not load the whole application but only a stub opening local data storage (where the files go) but otherwise run the pre-loaded, shared code.&lt;/p&gt;&#xA;&lt;p&gt;All of this was developed essentially with the beginning of multi-tasking and multi-user support, as RAM was always too small (*2), putting massive emphasis on space saving.&lt;/p&gt;&#xA;&lt;p&gt;But the same is true for mainstream micro computers. Sure, OSes started out less sophisticated than mainframes 20 years before, but they soon caught up. This not only includes the mentioned Windows, but also Amiga OS, which was (like Windows) essentially a collection of libraries (*3). Well, and of course various unixoide OSes. Even before that, there was OS/9, offering quite sophisticated ways to share code at runtime. And that's on an 8-bit CPU.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt; I have a hard time to see the 'not use' of dynamic linking and shared code as implied in the question. The abilities were present all during the 1980s and easy to use. So the assumption about not being offered is wrong.&lt;/p&gt;&#xA;&lt;p&gt;Looking closely, it seems as if the underlying question is rather why were single-user single-application OSes - like MS-DOS - the main environment used during that time. Right?&lt;/p&gt;&#xA;&lt;p&gt;It's the classic question why Romans didn't have gas stations: &lt;strong&gt;A solution without a need&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Usage in a single-user single-program environment was about one application at a time (*4), which in turn was able to use the whole memory for whatever needed. More often memory was already too small for all functions of that single application, so overlay swapping within itself was needed, not sharing between parallel applications.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; Never forget when looking back, that any solution, no matter how helpful it is nowadays, also needs a problem to be solved - often the answer is simply: the problem didn't exist back then.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Technically even before that, but, like with many other developments, it wasn't until the 1970s that an overall structure was established for generic use.&lt;/p&gt;&#xA;&lt;p&gt;*2 - In 1970, a machine with 128 KiB was considered large. The largest (civilian) installation in Europe in 1972 was the information system for the 1972 Olympics in Munich, with an unbelievable 2 MiB of online RAM.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Brian H. may go into more detail.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Maybe enhanced with a few background helpers.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-03-28T16:27:40.663" LastActivityDate="2021-03-28T16:27:40.663" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19423" PostTypeId="2" ParentId="19420" CreationDate="2021-03-27T20:57:53.407" Score="1" Body="&lt;p&gt;With single-user (non-multi-tasking systems) systems, an application could use any memory that hadn't been allocated before it launched, and any such memory that an application didn't use would generally sit idle.  While it was possible for applications to open a DOS shell, which could use any memory the applications didn't, it wouldn't be terribly common to have two or more programs in memory that shared a substantial amount of code.&lt;/p&gt;&#xA;&lt;p&gt;There were a few situations where it was helpful to have some code such as communications &amp;quot;drivers&amp;quot; shared among applications, but under MS-DOS that was accomplished by loading a FOSSIL driver and then loading the applications that would communicate with it.  In such scenarios, however, an application that wanted to communicate wouldn't dynamically link to the driver.  Instead, such a driver would often set up an interrupt handler, allowing an application to set up some registers and trigger the appropriate interrupt.&lt;/p&gt;&#xA;&lt;p&gt;Personally, I'm not a big fan of dynamic linking.  If a calls to an application's &lt;code&gt;printf&lt;/code&gt; are dynamically linked to an OS function by that name, that will make the application sensitive to how the OS function opts to process various constructs.  If one had some code that expected the &lt;code&gt;%p&lt;/code&gt; format specifier to output a pointer value as 16 hex digits preceded by &lt;code&gt;0x&lt;/code&gt;, and some other code that expected it to output 16 hex characters without a prefix, an implementation which chains to the OS function will only be able to support whichever program is expecting whatever behavior the OS implements.  By contrast, if &lt;code&gt;printf&lt;/code&gt; were statically linked, one could build each application with an implementations whose library &lt;code&gt;printf&lt;/code&gt; function handled the &lt;code&gt;%p&lt;/code&gt; function in the required fashion, and run both programs on the same OS.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-03-27T20:57:53.407" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19424" PostTypeId="2" ParentId="19415" CreationDate="2021-03-27T21:43:52.653" Score="6" Body="&lt;p&gt;I have described such systems as “cycle-approximate”. Some &lt;a href=&quot;https://link.springer.com/article/10.1007/s10766-018-0566-x&quot; rel=&quot;noreferrer&quot;&gt;research papers&lt;/a&gt;, I &lt;a href=&quot;https://www.sciencedirect.com/science/article/abs/pii/S1383762116300297&quot; rel=&quot;noreferrer&quot;&gt;found&lt;/a&gt; in a &lt;a href=&quot;https://link.springer.com/chapter/10.1007/978-3-642-28305-5_17&quot; rel=&quot;noreferrer&quot;&gt;short search&lt;/a&gt; session agree with this terminology.&lt;/p&gt;&#xA;&lt;p&gt;It is slightly broader than you use it here, and would indicate to me that some portion of the simulator was incomplete, for example cache modeling, prefetchers, or other complex micro-architectural or system/bus level behaviours.&lt;/p&gt;&#xA;" OwnerUserId="21193" LastActivityDate="2021-03-27T21:43:52.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19425" PostTypeId="2" ParentId="19420" CreationDate="2021-03-28T01:48:39.867" Score="6" Body="&lt;p&gt;On the BESM-6 (a 1960s Soviet mainframe) the most widespread programming environment was dynamically linking by default. Directly loaded application executables were not typically pre-built; the &amp;quot;executing loader&amp;quot; would link the program in memory and jump to it. Overlays were dynamic as well.&lt;/p&gt;&#xA;&lt;p&gt;For example (the compiler output is edited for brevity; note the loader printout after &lt;code&gt;*EXECUTE&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;                                                       27.03.21 M1&#xA; Ф O P T P A H&#xA;   /16.07.73/&#xA;                PROGRAM MAIN&#xA;                PRINT 1&#xA;             1  FORMAT(’ MAIN’)&#xA;       2        CALL LOADGO(’FOO’)&#xA;       3        CALL LOADGO(’BAR’)&#xA;                END&#xA;&#xA;                SUBROUTINE FOO&#xA;                PRINT 1&#xA;             1  FORMAT(’ FOO’)&#xA;       2        RETURN&#xA;                END&#xA;&#xA;                SUBROUTINE BAR&#xA;                PRINT 1&#xA;             1  FORMAT(’ BAR’)&#xA;       2        RETURN&#xA;                END&#xA;&#xA;           *EXECUTE&#xA;        MAIN       01000        SWRITT     03150        AHID/*   E 04372&#xA;        PROGRAM  E 01000        LUNMUN   C 03153        IOSKIP*  C 04377&#xA;        BCDWRIT*   01025        LUN*MON    03154        IOXGIVEM   04400&#xA;        FT*621   E 01025        OCTTDEC    03162        GIVEMASK E 04401&#xA;        BCDENC*  E 01031        TABWT/*    03214        IOXXRPCK   04430&#xA;        FT*611   E 01031        RWTB/*     03221        IOXXUPCK E 04431&#xA;        FT*571   E 01033        PRINT8     03304        MON*ITOR   04502&#xA;        FT*561   E 01036        PRINT80  E 03304        PLBEG    E 04511&#xA;        NEXTLET* E 01043        IOXXTTWT   03342        PLCLO    E 04517&#xA;        RK*      E 01060        TTPRINTD E 03346        ASAVE*   E 04525&#xA;        WSY*     E 01330        TTPRINT  E 03346        SAVE*HID E 04532&#xA;        IOCONT*    01513        TTPRIKS  E 03360        FOR*ALL  E 04547&#xA;        IOAC*    E 01545        /IP*     E 03426        OH*      E 04551&#xA;        FT*002   E 01560        IOXXFMR*   03442        OH*1     E 04556&#xA;        FD*642   E 01561        IOXXFMW* E 03443        ISO/GOST   04565&#xA;        FD*722   E 01561        IOXXER/M   04040        TSTATE*  C 04634&#xA;        FC*722   E 01561        IOXXER/O E 04041        *ICHECK* C 04635&#xA;        FC*642   E 01561        IOXXPKWT   04062        GIVELEXX   04643&#xA;        FC*002   E 01561        BCDPUN   E 04063        SAVELEXX E 04745&#xA;        IOEND*   E 01566        COLPUNC* E 04064        RD/BT      04765&#xA;        FT*003   E 01566        COLPUNB* E 04121        WR/BT    E 04766&#xA;        IOSVFR   E 02075        COLPUNE* E 04121        SDEC*      05005&#xA;        SUBPERR* E 02107        IBCDCTR* E 04126        *IOXLSW* C 05045&#xA;        STOP*      02511        IOXXLPWT   04226        CLEARLEX   05046&#xA;        BCDBEG*    02532        ERRIOM     04231          CBOБOД   05060&#xA;        FT2*     E 03041        ERRLUN   E 04311&#xA;        KONV1*   E 03054        HID/*      04367&#xA;&#xA; MAIN&#xA;&#xA;        FOO        05070&#xA;          CBOБOД   05106&#xA;&#xA; FOO&#xA;&#xA;        BAR        05070&#xA;          CBOБOД   05106&#xA;&#xA; BAR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What happens immediately after &lt;code&gt;*EXECUTE&lt;/code&gt; is akin to what &lt;code&gt;ld.so&lt;/code&gt; does after an executable starts. The &lt;code&gt;LOADGO&lt;/code&gt; procedure dynamically creates an overlay and jumps to it (a la &lt;code&gt;dlopen&lt;/code&gt;+&lt;code&gt;dlsym&lt;/code&gt;+subroutine call) with caching, i. e. two consecutive &lt;code&gt;LOADGO&lt;/code&gt; calls with the same name will just do the jump, otherwise an analog of &lt;code&gt;dlclose&lt;/code&gt; will be done first.&lt;/p&gt;&#xA;&lt;p&gt;Speaking of memory-mapped shared libraries: address space used to be scarce enough to discourage wastage due to page alignment of libraries, and not all ISAs allowed for efficient position-independent code.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2021-03-28T05:51:38.410" LastActivityDate="2021-03-28T05:51:38.410" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19426" PostTypeId="2" ParentId="19412" CreationDate="2021-03-28T03:28:37.653" Score="23" Body="&lt;p&gt;In the early 1990s, with the rise in popularity of Windows 3, the PC world got a number of &amp;quot;Windows Accelerator&amp;quot; video cards. These were 2D fixed-function GPUs with command-sets that supported things like drawing lines, drawing solid-color rectangles, copying a rectangle from one location to another (useful for moving windows), and sometimes even things like storing an entire font or icon set in memory on the card so that a line of text or a toolbar could be drawn to the screen in a single command. Drivers that translated Windows' drawing primitives to commands the card understood could greatly reduce the CPU time spent on graphics and the amount of data that had to be sent over the bus (which was pretty slow at the time; most people were limited to 16-bit ISA).&lt;/p&gt;&#xA;" OwnerUserId="336" LastActivityDate="2021-03-28T03:28:37.653" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19427" PostTypeId="1" AcceptedAnswerId="19429" CreationDate="2021-03-28T16:34:34.577" Score="12" ViewCount="1146" Body="&lt;p&gt;I am watching &lt;a href=&quot;https://www.youtube.com/watch?v=xnCgoEyz31M&quot; rel=&quot;noreferrer&quot;&gt;a recording of a discussion panel ‘Unix50 - Unix Today and Tomorrow’&lt;/a&gt;, part of which contains Bjarne Stroustrup’s talk ‘From C to C++’, discussing the history of C++.&lt;/p&gt;&#xA;&lt;p&gt;At &lt;a href=&quot;https://www.youtube.com/watch?v=xnCgoEyz31M&amp;amp;t=20m40s&quot; rel=&quot;noreferrer&quot;&gt;20:46&lt;/a&gt; there is a slide with a rough graph of some programming languages’ influences and photos of the people associated with them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CLaEu.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CLaEu.jpg&quot; alt=&quot;A slide entitled ‘Programming Languages’, with a graph depicting programming languages and sources of their influence.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What are the names of the people in the photos?&lt;/p&gt;&#xA;&lt;p&gt;I got Dennis Ritchie for C and Bjarne Stroustrup for C++, who is the speaker.&lt;/p&gt;&#xA;&lt;p&gt;I don't know the one for Simula, Fortran and Assembler.&lt;/p&gt;&#xA;" OwnerUserId="20379" LastEditorUserId="15334" LastEditDate="2021-03-29T06:24:02.590" LastActivityDate="2021-03-29T06:24:02.590" Title="Who are the people associated with Simula, Assembler and Fortran in this video?" Tags="&lt;history&gt;&lt;assembly&gt;&lt;programming&gt;&lt;fortran&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19428" PostTypeId="2" ParentId="18391" CreationDate="2021-03-28T16:49:44.703" Score="7" Body="&lt;p&gt;I'll admit to not quite understanding their jargon, but it looks like IBM's &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System_i&quot; rel=&quot;noreferrer&quot;&gt;AS/400&lt;/a&gt; (1988) and to a certain extent, &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/38&quot; rel=&quot;noreferrer&quot;&gt;System/38&lt;/a&gt; before it (1978) relied on object or database-style &lt;a href=&quot;https://en.wikipedia.org/wiki/Single-level_store&quot; rel=&quot;noreferrer&quot;&gt;single-level storage&lt;/a&gt; rather than hierarchical files.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2021-03-28T16:49:44.703" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19429" PostTypeId="2" ParentId="19427" CreationDate="2021-03-28T17:08:51.537" Score="21" Body="&lt;p&gt;I managed to find the exact same three photos Stroustrup used in his slide:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Simula: &lt;a href=&quot;https://www.ub.uio.no/fag/naturvitenskap-teknologi/informatikk/faglig/dns/&quot; rel=&quot;noreferrer&quot;&gt;Kristen Nygaard&lt;/a&gt;, who co-designed Simula with Ole-Johan Dahl;&lt;/li&gt;&#xA;&lt;li&gt;Fortran: &lt;a href=&quot;https://history.computer.org/pioneers/backus.html&quot; rel=&quot;noreferrer&quot;&gt;John Backus&lt;/a&gt;, who headed the team that developed Fortran;&lt;/li&gt;&#xA;&lt;li&gt;Assembler: &lt;a href=&quot;https://www.computerhope.com/people/david_wheeler.htm&quot; rel=&quot;noreferrer&quot;&gt;David John Wheeler&lt;/a&gt;&lt;sup&gt;0&lt;/sup&gt;, who worked on what would today be called a relocating assembler for the EDSAC, an early programmable computer (&lt;a href=&quot;https://royalsocietypublishing.org/doi/10.1098/rspa.1950.0121&quot; rel=&quot;noreferrer&quot;&gt;paper&lt;/a&gt;), and is also credited with the invention of the concept of a subroutine.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;0&lt;/sup&gt; The biography on the page with the image is inaccurate; Wheeler was born in Birmingham, England, not Birmingham, Alabama.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-03-28T18:24:42.543" LastActivityDate="2021-03-28T18:24:42.543" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19430" PostTypeId="2" ParentId="18391" CreationDate="2021-03-29T05:39:45.043" Score="5" Body="&lt;p&gt;It would be remiss to neglect the original Mac HFS with its core support of the Resource Fork.&lt;/p&gt;&#xA;&lt;p&gt;A normal Macintosh file had two forks: the data fork, and the resource fork. The resource fork was a key/value store, with the values typically being large binary blobs (most notably icons, code, sounds, etc.). The data fork was where typical &amp;quot;read&amp;quot; and &amp;quot;write&amp;quot; operations would work.&lt;/p&gt;&#xA;&lt;p&gt;Applications, in fact, stored pretty much &amp;quot;everything&amp;quot; in the resource fork, with little to nothing in the data fork (which is the traditional view of the file).&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2021-03-29T05:39:45.043" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19431" PostTypeId="2" ParentId="19412" CreationDate="2021-03-29T11:16:01.493" Score="0" Body="&lt;p&gt;It's entirely reasonable, and in fact it was done- if my understanding is correct- by the few terminals that supported the AlphaWindows standard.&lt;/p&gt;&#xA;&lt;p&gt;Again provided that my understanding and recollection are correct, this was very much like an X11-based Window Manager in that programs running on a remote minicomputer sent the commands to draw the content of windows, but the terminal itself drew the furniture- outline and title bar- and allowed windows to be moved around the screen.&lt;/p&gt;&#xA;&lt;p&gt;The standard didn't amount to anything, at least in part because the companies involved were very close with their information and had little-to-no interest in telling developers etc. how to make use of the proposed facilities.&lt;/p&gt;&#xA;" OwnerUserId="18835" LastActivityDate="2021-03-29T11:16:01.493" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19432" PostTypeId="2" ParentId="10907" CreationDate="2021-03-29T11:27:29.907" Score="1" Body="&lt;p&gt;There were a number of companies which shipped UNIX-derivatives configured for single-user operation, even if UNIX itself was thoroughly multi-tasking. Broadly speaking these booted straight into a shell rather than having init or equivalent which forked multiple processes.&lt;/p&gt;&#xA;&lt;p&gt;I came across one in the UK which had a range of machines which could either boot CP/M on a Z80 or a single-user UNIX on a 68K and was typically sold as an accounting system, and there was the Burroughs (formerly Convergent) B20 which was shipped with BTOS (&amp;quot;B-Twenty Operating System&amp;quot;).&lt;/p&gt;&#xA;&lt;p&gt;Considering OP, I think it might be worth considering that many computers were shipped with no provision for attaching supplementary terminals or Telnet sessions, and as such were effectively single-user even if still capable of multitasking.&lt;/p&gt;&#xA;" OwnerUserId="18835" LastActivityDate="2021-03-29T11:27:29.907" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19433" PostTypeId="2" ParentId="19412" CreationDate="2021-03-29T16:06:36.767" Score="4" Body="&lt;p&gt;Yes. It wasn't that long ago that stand-alone X-Windows terminals existed. They would allow clients to display on them that ran on server hardware that was used in common by the team but were controlled by individual team members. We used those at IBM Federal Systems Division in the 90's where the server ran AIX.&lt;/p&gt;&#xA;&lt;p&gt;Years before that, Digital Equipment Corporation developed GiGi terminals as a lower cost alternative to the ridiculously expensive Textronix graphics terminals of the day. In all cases, the &amp;quot;terminals&amp;quot; were simpler computers in their own right that provided vector-based graphics capabilities on raster display hardware.&lt;/p&gt;&#xA;" OwnerUserId="21218" LastActivityDate="2021-03-29T16:06:36.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19434" PostTypeId="2" ParentId="10907" CreationDate="2021-03-29T16:21:24.507" Score="1" Body="&lt;p&gt;My copy of &lt;em&gt;The Bell System Technical Journal&lt;/em&gt; v57#6 part 2, July-August 1978 (&lt;a href=&quot;https://worldradiohistory.com/Archive-Bell-System-Technical-Journal/70s/Bell-System-Technical-Journal-1978-6.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;see it here and elsewhere&lt;/a&gt; - an issue entirely concerned with the &amp;quot;Unix Time-Sharing System&amp;quot; doesn't mention using Unix as a phone switch OS though it talks about many other applications.&lt;/p&gt;&#xA;&lt;p&gt;Some of those applications include being a support system for a phone switch (&amp;quot;No. 4 ESS Diagnostic Environment&amp;quot;) where an application running on Unix talked to a 1A processor - using special software added to that processor's system (4ESS); also being the operator's interface in a larger system (&amp;quot;The Network Operations Center System&amp;quot;) where real-time data was collected into a database (by a separate system) and then a (multi-user) Unix application was used to interrogate that database.&lt;/p&gt;&#xA;&lt;p&gt;This issue also describes a &lt;em&gt;separate&lt;/em&gt; operating system build by AT&amp;amp;T (&amp;quot;The MERT Operating System&amp;quot;) - which was an early hypervisor capable of running Unix environment as a &amp;quot;supervisor process&amp;quot; alongside other supervisor processes that provided real-time capabilities.  No specific installations of MERT are described.&lt;/p&gt;&#xA;&lt;p&gt;The whole issue is well worth reading for any Retro-computing enthusiast interested in Unix.&lt;/p&gt;&#xA;" OwnerUserId="332" LastActivityDate="2021-03-29T16:21:24.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19435" PostTypeId="2" ParentId="18359" CreationDate="2021-03-29T16:52:02.713" Score="2" Body="&lt;p&gt;For configuration of SANA-II drivers for serial line interfaces see &lt;a href=&quot;http://roadshow.apc-tcp.de/index-en.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Roadshow&lt;/a&gt;, &amp;quot;slip.device&amp;quot; is your friend.&#xA;Better use a newer &lt;a href=&quot;http://aminet.net/package/util/crypt/openssl&quot; rel=&quot;nofollow noreferrer&quot;&gt;openssl&lt;/a&gt; port because the encryption methods may be obsolete.&lt;/p&gt;&#xA;" OwnerUserId="7534" LastEditorUserId="7534" LastEditDate="2021-03-29T21:24:45.273" LastActivityDate="2021-03-29T21:24:45.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19436" PostTypeId="2" ParentId="19420" CreationDate="2021-03-29T21:55:01.340" Score="2" Body="&lt;p&gt;Without virtual memory, you basically must have all library code loaded into physical memory at once to use dynamic linking. Systems using processors that supported virtual memory were uncommon before about the mid 1980s. But even if you had virtual memory, it was still problematic. Imagine working on MIT's Multics in 1972. You need to call the sine function. It's only a couple of dozen words, but you have to drag in a four kiloword page to get it. The whole machine only had a couple of hundred pages, shared among dozens of users. All this dynamic stuff was &lt;em&gt;slow&lt;/em&gt;. There were big performance advantages to creating a self-contained statically-linked binary that only needed a few pages loaded rather than calling dynamically-linked functions spread over many pages.&lt;/p&gt;&#xA;&lt;p&gt;You might think of virtual memory and dynamic linking as conserving memory, but they only work well when you already have plenty of memory.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2021-03-29T21:55:01.340" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19437" PostTypeId="1" AcceptedAnswerId="19440" CreationDate="2021-03-29T23:46:51.607" Score="19" ViewCount="2983" Body="&lt;p&gt;When I was a kid, the &amp;quot;real&amp;quot; computers in movies looked so cool with that 80-column monochrome green text.&lt;/p&gt;&#xA;&lt;p&gt;My first computer was a VIC-20 it always felt very &amp;quot;toy&amp;quot; to me because of its 22 columns of fat text.  Later my C64 was a better 40 columns, but still not the cool 80-column text I'd see on &amp;quot;real&amp;quot; computers in movies and TV.&lt;/p&gt;&#xA;&lt;p&gt;I recently started playing with the VICE Commodore emulator and I discovered that the Commodore PET had a cool 80-column screen!  I was very surprised to see that.&lt;/p&gt;&#xA;&lt;p&gt;Question: Why did the VIC-20 and C64 only have 22 &amp;amp; 40 columns when the earlier PET had 80 columns?&lt;/p&gt;&#xA;" OwnerUserId="21076" LastEditorUserId="6794" LastEditDate="2021-04-01T05:11:06.627" LastActivityDate="2021-04-02T01:09:37.810" Title="Why did the VIC-20 and C64 have only 22 and 40 columns when the earlier PET had 80 column text?" Tags="&lt;video&gt;&lt;commodore&gt;" AnswerCount="5" CommentCount="14" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19438" PostTypeId="2" ParentId="19437" CreationDate="2021-03-30T00:45:56.733" Score="51" Body="&lt;p&gt;One reason was likely that the VIC-20 and C64 did not have their own displays, but were designed to be connected to a television set. The interface between the computer and the television was not sufficient to display 80 column text (it would have been almost unreadable). However, the PET had its own integrated display so it did not have this limitation, and they were able to offer an 80 column option.&lt;/p&gt;&#xA;" OwnerUserId="4070" LastActivityDate="2021-03-30T00:45:56.733" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="19439" PostTypeId="1" CreationDate="2021-03-30T02:09:59.420" Score="6" ViewCount="343" Body="&lt;p&gt;Does anyone know of any efforts to write modern chess engines for old hardware? (e.g. C64, A2e?)&lt;/p&gt;&#xA;&lt;p&gt;I'd love to see how a pared-down Stockfish or Leela that could fit in RAM could do rating wise etc.&lt;/p&gt;&#xA;&lt;p&gt;Surprisingly, I can't seem to find any efforts of people doing this online (to me seems like a fun / informative pursuit).&lt;/p&gt;&#xA;&lt;p&gt;You can imagine Leela or Stockfish using a compressed NN eval function that can fit in memory (using perhaps low-precision weights) doing pretty well.&lt;/p&gt;&#xA;&lt;p&gt;Interesting side question: what wins, (reduced) Stockfish on old hardware, or old C64 chess programs (like &lt;a href=&quot;https://en.wikipedia.org/wiki/Colossus_Chess&quot; rel=&quot;noreferrer&quot;&gt;Colossus&lt;/a&gt;, around &lt;a href=&quot;http://www.spacious-mind.com/html/c64_emu_-_colossus_chess_4_0.html&quot; rel=&quot;noreferrer&quot;&gt;1700 rating&lt;/a&gt;) on new hardware?  I'm guessing the former.&lt;/p&gt;&#xA;" OwnerUserId="8856" LastEditorUserId="8856" LastEditDate="2021-03-30T02:17:17.903" LastActivityDate="2021-04-01T15:48:09.337" Title="New chess engines on retro hardware" Tags="&lt;history&gt;&lt;commodore-64&gt;&lt;gaming&gt;&lt;software&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19440" PostTypeId="2" ParentId="19437" CreationDate="2021-03-30T02:57:54.563" Score="12" Body="&lt;p&gt;Space on a chip die was very limited - you couldn't just put an unlimited amount of functionality into one chip.&lt;/p&gt;&#xA;&lt;p&gt;If you have a closer look at video chips used in 8 bit computers, they either feature an 80 column mode (PET, Amstrad CPC, later Apple IIs, C128 VDC) &lt;strong&gt;or&lt;/strong&gt; a lot of game related functionality like sprites, hardware scrolling, raster interrupts etc. (C64, Atari 8 bit). There's not a single one I know of that does both.&lt;/p&gt;&#xA;&lt;p&gt;Additionally, Commodore's 8 bit computers run their CPU and the video chip at about 1 Mhz. That is not fast enough to display 80 characters per line, so to get an 80 column display on the PET, they had to use tricks (&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7117/how-did-the-commodore-pet-80-column-display-work&quot;&gt;see here for more details&lt;/a&gt;) - there was probably no space left on the chip to support that.&lt;/p&gt;&#xA;&lt;p&gt;And the C64 is probably the only Commodore computer where somebody at Commodore did actual market research and put down a list of targets they wanted to reach with their machine. Since the machine was targetting the consumer market &lt;em&gt;not&lt;/em&gt; the business market and since it was supposed to be a more powerful follow-up of the VIC-20 (which had only 22 columns), I don't think anybody ever really worried about 80 columns.&lt;/p&gt;&#xA;" OwnerUserId="19895" LastActivityDate="2021-03-30T02:57:54.563" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="19441" PostTypeId="2" ParentId="19439" CreationDate="2021-03-30T04:53:32.257" Score="10" Body="&lt;p&gt;Leela is not going to fit in an 8-bit machine, period.  The NN weights take many megabytes to represent.&lt;/p&gt;&#xA;&lt;p&gt;It's conceivable that Stockfish's evaluation function could fit - I think it's only comparable in complexity to some of the better 8-bit engines (eg. those by Ed Schröder).  However, Stockfish's main strength is that it can do a lot of searching very quickly, which requires large transposition tables - which will not fit.&lt;/p&gt;&#xA;&lt;p&gt;Most 8-bit chess engines relied on a relatively sophisticated evaluation function and a much less sophisticated search function, which was not able to search very deep in the game tree.  That fitted well with the slow CPUs and limited RAM of the time.&lt;/p&gt;&#xA;&lt;p&gt;Subsequent developments allowed searching deeper and more efficiently using faster CPUs and more RAM; the 68020 and ARM were popular in dedicated chess engines after the 6502 was superseded.&lt;/p&gt;&#xA;&lt;p&gt;Only very deep searches allow using a simpler, more naive evaluation function, which itself is a tradeoff to further increase search depth.  And only the extra RAM of modern machines permits doing the deep, smart searches, even with unlimited time.  These are inherently unavailable to vintage hardware.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2021-03-30T04:53:32.257" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19442" PostTypeId="2" ParentId="19412" CreationDate="2021-03-30T05:06:43.193" Score="1" Body="&lt;p&gt;As far as i remember, the BBC Micro in the 1980s used a separate dedicated chip to handle and offload its &amp;quot;Teletext&amp;quot; video mode.  But that mode only had extremely limited graphics options, and may not meet the OP requirements.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm also fairly sure that most early machines simply didn't have a concept of z layering or compositing, in their graphics handling. There was a flat 2D raster grid screen, and you painted what you liked on it. If your program wanted to present things as if layered, that was something any program was welcome to implement for itself.&lt;/p&gt;&#xA;" OwnerUserId="6472" LastEditorUserId="6472" LastEditDate="2021-03-31T03:19:01.457" LastActivityDate="2021-03-31T03:19:01.457" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19443" PostTypeId="2" ParentId="19412" CreationDate="2021-03-30T05:55:31.177" Score="3" Body="&lt;p&gt;Sketchpad from 1963 would qualify.&lt;/p&gt;&#xA;&lt;p&gt;In general, the framebuffer's ability to display &amp;quot;anything&amp;quot; is just too danged useful to make a GUI without it.  Using a system without a framebuffer to make a GUI without needing much memory would mean that you need a very fast graphics processor, and that you have to accept limitations to the complexity of the user interface because you have to be able to draw every scanline within the time it takes to display that scanline.&lt;/p&gt;&#xA;&lt;p&gt;Imagine, for example, the graphics of an NES.  It has fixed tilesets, and a fixed number of dynamic sprites that can be displayed with the hardware in a frame.  So, you can build a GUI on an NES, but you can't have arbitrarily many overlapping windows at arbitrary positions on that type of hardware the way you would expect on something like a Macintosh or an Amiga.  If you tried, the graphics chip would have a potentially unbounded amount of work to do in a bounded amount of time to display that scanline, so it wouldn't work.&lt;/p&gt;&#xA;&lt;p&gt;If you abandon a raster display and move to a vector display, you get much more flexibility in the timing budget for the UI.  This is how Sketchpad worked.  It used an oscilloscope as a vector monitor, rather than a TV style raster display.  Thus, it could theoretically display arbitrarily complex onscreen drawings without a framebuffer, at the cost of an increasingly flickery image.  There's a demo at this Youtube video:  &lt;a href=&quot;https://www.youtube.com/watch?v=hB3jQKGrJo0&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=hB3jQKGrJo0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Of course, the very first thing that Ivan Sutherland worked on after the Sketchpad vector UI was framebuffers.  (He's the Sutherland in Evans and Sutherland, the company that sold the first commercial framebuffers.)  Because having enough RAM for a raster image was obviously useful even in the earliest days of computer graphics.&lt;/p&gt;&#xA;&lt;p&gt;In any event, the cost of custom vector displays, or custom hyperfast GPU processors, seemed impractical in the economics of the 1980's.  RAM was expensive by modern standards, but GUI's of the time didn't use all that much of it.  The original Macintosh famously only had 128 KB in 1984, and that was enough to be useful for real world GUI applications, and reasonably priced by the standards of the time.&lt;/p&gt;&#xA;" OwnerUserId="5309" LastActivityDate="2021-03-30T05:55:31.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19444" PostTypeId="2" ParentId="19437" CreationDate="2021-03-30T11:38:53.020" Score="23" Body="&lt;p&gt;Use of TV as monitor is the reason for these low resolutions.&lt;/p&gt;&#xA;&lt;p&gt;The issue is that the color resolution of TV is very low. While B&amp;amp;W TV could resolve pixel small enough for ~400 to ~600 pixels, color resolution was much much lower, barely around 200 pixels. Some computers exploited this, such as Apple II and CGA/composite. It also shows the limits of that system as Apple was only able to display 140 pixel columns in 6 colours (16 colours in lores and double hires) and CGA which showed 160 pixels in 16 colours. So, if a computer wanted to display text without colour interference, it could not afford more than that number of pixels per line.&lt;/p&gt;&#xA;&lt;p&gt;Further reading on color artifacts: &lt;a href=&quot;https://en.wikipedia.org/wiki/Composite_artifact_colors&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article&lt;/a&gt;, and&#xA;The 8bit Guy's &lt;a href=&quot;https://www.youtube.com/watch?v=niKblgZupOc&quot; rel=&quot;noreferrer&quot;&gt;video on CGA on composite output&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7095" LastEditorUserId="7095" LastEditDate="2021-03-30T16:14:04.620" LastActivityDate="2021-03-30T16:14:04.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19445" PostTypeId="1" CreationDate="2021-03-30T13:54:26.727" Score="0" ViewCount="433" Body="&lt;p&gt;I can remember below pointers off the top of my head:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It was an adventurous game&lt;/li&gt;&#xA;&lt;li&gt;We had to cross different levels (can relate to Mario for instance)&lt;/li&gt;&#xA;&lt;li&gt;The protagonist was short and was wearing a cop hat with black or dark blue uniform&lt;/li&gt;&#xA;&lt;li&gt;One of the stages had a lot of greenery and river&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I am sorry, that's all I can recall as of now.&lt;/p&gt;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I was playing the game in TV a video game. It was during 90s and I used NES or Sega games.&lt;/li&gt;&#xA;&lt;li&gt;The game was delightful and was having daylight time during their stages. I also remember there was a scene with huge waterfall in the background&lt;/li&gt;&#xA;&lt;li&gt;I remember it was about climing difficult heights, jumping and even killing the small enemies which were in animal form. Like we did in Mario.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="21222" LastEditorUserId="21222" LastEditDate="2021-04-02T16:59:36.493" LastActivityDate="2021-04-02T16:59:36.493" Title="Help me identify game from 90s" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19446" PostTypeId="1" AcceptedAnswerId="19468" CreationDate="2021-03-30T15:14:29.913" Score="29" ViewCount="6696" Body="&lt;p&gt;As far as I can remember the inverted (aka &amp;quot;XOR&amp;quot;) style of mouse cursor has been around as long as there have been mice. I mean something like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/e9slE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/e9slE.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;(&lt;a href=&quot;https://github.com/arkypita/LaserGRBL/issues/260&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;where the cursor shape is formed by dynamically inverting the colors of the individual underlying pixels. I'm pretty sure I saw this on Macs in the 80s and early versions of Windows.&lt;/p&gt;&#xA;&lt;p&gt;I don't recall the exact methodology of forming the inverted image but I think it was based on an XOR bit manipulation.&lt;/p&gt;&#xA;&lt;p&gt;Personally this is not my favorite style of cursor graphics, but tastes vary &amp;amp; I'm sure many people must like it. However given that there are also more standard solid black or white cursors this must have taken someone a bit of additional work to implement. And on top of that it seemed to become universal to have this style of cursor. That makes me wonder if there was some reason for it other than individual preferences?&lt;/p&gt;&#xA;&lt;p&gt;Googling around this topic I gather there was even once some controversy over patents on this idea - more 'evidence' that there was a really good reason for it to exist?&lt;/p&gt;&#xA;" OwnerUserId="11795" LastEditorUserId="11795" LastEditDate="2021-03-31T21:37:24.160" LastActivityDate="2021-04-01T15:48:34.293" Title="Was there a specific benefit to inverted (XOR) mouse cursors other than aesthetics?" Tags="&lt;history&gt;&lt;graphics&gt;&lt;mouse&gt;" AnswerCount="6" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19447" PostTypeId="2" ParentId="19446" CreationDate="2021-03-30T15:53:02.870" Score="31" Body="&lt;p&gt;On Windows (1.x), at least, it's no more work to have this style of cursor than the normal sort. A Windows cursor is formed of two bitmaps: A mask that blanks out the shape of the cursor, and a pattern that is then drawn in the same place using the XOR operation. There are thus four possible combinations for any pixel:&lt;/p&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th style=&quot;text-align: left;&quot;&gt;Mask bit&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: left;&quot;&gt;Pattern bit&lt;/th&gt;&#xA;&lt;th style=&quot;text-align: left;&quot;&gt;Resulting pixel&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;Black&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;1&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;White&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;1&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;0&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;Unchanged&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;1&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;1&lt;/td&gt;&#xA;&lt;td style=&quot;text-align: left;&quot;&gt;Inverted&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The ability to have inverting cursors thus emerges from the logic for the three other pixel types. The only coding necessary within Windows is to use XOR rather than OR to paint the cursor shape, which occupies no more code space.&lt;/p&gt;&#xA;&lt;p&gt;On systems earlier than Windows or the Mac, where memory was restricted, it was a common technique for cursors to be drawn only with XOR (rather than the two-stage mask and bitmap system used by Windows), because this meant the operations to draw and remove them were identical – painting the cursor a second time would revert the screen to how it was before, and so the pixels overwritten by the cursor did not need to be saved in a buffer to be restored later.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastEditorUserId="15334" LastEditDate="2021-04-01T15:48:34.293" LastActivityDate="2021-04-01T15:48:34.293" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19448" PostTypeId="2" ParentId="19446" CreationDate="2021-03-30T16:26:53.213" Score="67" Body="&lt;p&gt;XORing a cursor into a frame buffer (which is what you seem to be calling &amp;quot;inverted cursor&amp;quot;) is actually simpler than ORing it in there: when the cursor has to be removed again (to move to another position) you simply draw it a second time, with the same pixels, and it will vanish, courtesy of the XOR logic.&lt;/p&gt;&#xA;&lt;p&gt;If you have ORed the cursor into the buffer (which results in a &amp;quot;solid&amp;quot; cursor), you need to remember what was originally there to be able to restore the original contents under the pointer.&lt;/p&gt;&#xA;&lt;p&gt;XOR screen operations work best on monochrome screens or screens with a very limited color depth: On modern high-colour screens, XOR operations can produce pretty unexpected colours, you also can't be sure the cursor will have enough contrast to the background.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2021-03-30T16:26:53.213" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19450" PostTypeId="2" ParentId="19446" CreationDate="2021-03-30T16:32:29.683" Score="11" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;That makes me wonder if there was some reason for it other than individual preferences?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Oh yes!&lt;/p&gt;&#xA;&lt;p&gt;Historically it even predates modern desktop systems, as the inverted mouse cursor was already part of the original Star design - as a UI feature for better usability. And it was/is really a necessary one. With an inverted 'inner' area, it offers maximum contrast on any image 'below', thus making it best seen. While this &lt;em&gt;may&lt;/em&gt; be less of an issue nowadays with crisp clear high resolution and high contrast screens, it was much needed back in the old days. Even hardware, that, back then, seemed like out of this world sharp, like the Xerox workstations, are rather fuzzy when revisited today.&lt;/p&gt;&#xA;&lt;p&gt;Even worse average screens during 80s and 90s - and to top it early laptops with Plasma/LCD. There is a reason Microsoft added 'animated' cursors with shadow images following the movement (still available today) or little star sprinkle whenever the cursor got moved. All measures to help one find it faster.&lt;/p&gt;&#xA;&lt;p&gt;In addition to less than perfect hardware, there are less than perfect humans. No matter of by age or otherwise. Maximized contrast does help here as well - but it's hard to see/believe for young folks with good eyes and fast reflexes ... they need to give it a few years to sink in :)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line, it's a service to enhance GUI ergonomics.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-03-30T21:25:17.580" LastActivityDate="2021-03-30T21:25:17.580" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19451" PostTypeId="1" CreationDate="2021-03-30T18:29:22.333" Score="4" ViewCount="97" Body="&lt;p&gt;I came across &lt;a href=&quot;https://eab.abime.net/showthread.php?t=11288&quot; rel=&quot;nofollow noreferrer&quot;&gt;this post&lt;/a&gt; from a user 18 years years ago, where he had some luck in upgrading chips on the board 2.3. is it possible? He says he was able to get 2MB chip ram and ECS Super Denise, can I just swap Angus, Denise and that's it?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I opened my upgraded A500+ motherboard and inserted my ECS Super Denise and Fatter Agnus (a Mini Mega Chip) onto the CDTV motherboard without any problems. Booted her up, and lo and behold, full ECS and 2MB Chip Ram...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2021-03-30T18:29:22.333" Title="CDTV board rev 2.3 can OCS Denise be upgraded to ECS" Tags="&lt;hardware-mods&gt;&lt;amiga-cdtv&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19452" PostTypeId="2" ParentId="19445" CreationDate="2021-03-31T01:39:21.033" Score="4" Body="&lt;p&gt;I'll make a first guess, and then we can refine it from there as you remember more about the game.&lt;/p&gt;&#xA;&lt;p&gt;A platform game about men in dark uniforms seems to me to be &lt;a href=&quot;http://superadventuresingaming.blogspot.com/2011/08/blues-brothers-c64.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;&lt;strong&gt;The Blues Brothers&lt;/strong&gt;&lt;/em&gt; by Titus&lt;/a&gt;. It was released for almost all the 8-bit and 16-bit console and computer platforms of the day.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EANig.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EANig.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's based on the movie of the same name. You play as one of The Blues Brothers (or both in two-player), 'Joliet' Jake and Elwood Blues - famous for only ever wearing a basic black suit, sunglasses and hat - as they jump around various locations attempting to recover all the instruments needed for the big concert to save their orphanage. Your character is the man on the left. There's large floating LP records that you can collect to earn extra hit-points.&lt;/p&gt;&#xA;&lt;p&gt;There's a sequel, &lt;em&gt;The Blues Brothers: Jukebox Adventure&lt;/em&gt;, which you may also be thinking of.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2021-03-31T06:19:24.190" LastActivityDate="2021-03-31T06:19:24.190" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="19453" PostTypeId="2" ParentId="19437" CreationDate="2021-03-31T07:01:38.200" Score="9" Body="&lt;h2&gt;The monitor is physically attached - part of the unit&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zo7Au.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zo7Au.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There's no video port. You have to use the built-in monitor.&lt;/p&gt;&#xA;&lt;p&gt;As such, Commodore simply chose a monitor fit for 80 columns.   That wasn't hard, since &lt;strong&gt;NTSC &lt;em&gt;monochrome&lt;/em&gt; composite video has unlimited horizontal resolution&lt;/strong&gt;.  And 7 vertical scan lines per character form (+1 scan line for spacing) is enough to be readable and allow 24-25 lines of text.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;RF-modulated NTSC has its resolution limited by RF bandwidth. Color NTSC has its horizontal resolution limited by the color clock frequency.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Note that the above is a 40-column PET, but it shows how the monitor is permanently attached.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2021-03-31T07:07:32.740" LastActivityDate="2021-03-31T07:07:32.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19454" PostTypeId="2" ParentId="19439" CreationDate="2021-03-31T11:32:57.230" Score="2" Body="&lt;p&gt;This is a &amp;quot;modern&amp;quot; chess program for the c64 that at least could be used as a framework maybe:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/StewBC/cc65-Chess&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/StewBC/cc65-Chess&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8856" LastActivityDate="2021-03-31T11:32:57.230" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19455" PostTypeId="2" ParentId="19446" CreationDate="2021-03-31T16:41:57.390" Score="10" Body="&lt;p&gt;On systems without hardware sprites, this technique allows to avoid storing/redrawing the background without any backbuffer thanks to XOR properties.&lt;/p&gt;&#xA;&lt;p&gt;On the Amiga, on the other hand, the cursor is made with a hardware sprite. In that case, it's not possible to achieve the XOR effect, but the mouse move takes virtually no CPU. In that case, choosing a very different color than the rest of the windows background is a must have, with a border around the pointer just in case the background is of the same color as the mouse (OCS sprites may have up to 3 colors plus transparent).&lt;/p&gt;&#xA;&lt;p&gt;Note that XOR style isn't lost in time: Windows 10 still uses XOR style for shadow window outline when windows movement is configured without &amp;quot;move with content&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2021-03-31T16:41:57.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19456" PostTypeId="2" ParentId="18388" CreationDate="2021-03-31T22:23:18.423" Score="-4" Body="&lt;p&gt;The name of the &lt;em&gt;complete package&lt;/em&gt; (here a particular computer) has no relation to the name of the &lt;em&gt;parts&lt;/em&gt; (here CPU). It may go as far as being legally risky to use the same name (moot if e.g. IBM or DEC did it with their CPUs and machines).&lt;/p&gt;&#xA;" OwnerUserId="20704" LastActivityDate="2021-03-31T22:23:18.423" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19457" PostTypeId="1" AcceptedAnswerId="19461" CreationDate="2021-04-01T06:36:46.677" Score="4" ViewCount="856" Body="&lt;p&gt;Some early computers had vector displays, which allowed the computer to draw graphics by steering a cathode-ray beam.  Some examples include the &lt;a href=&quot;https://en.wikipedia.org/wiki/Whirlwind_I&quot; rel=&quot;nofollow noreferrer&quot;&gt;Whirlwind&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/TX-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;TX-0&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/TX-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;TX-2&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDP-1&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It would be easy for a computer manufacturer to re-brand a commercially-available oscilloscope as the display device, or expect the end-user to supply their own oscilloscope.  &lt;strong&gt;Did any computers instead use a display that was custom designed and built for the computer?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Real computers please, not arcade games (no &lt;em&gt;Asteroids&lt;/em&gt;, &lt;em&gt;Tempest&lt;/em&gt;, etc.).&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-04-01T16:33:07.520" Title="Early vector computer displays: off-the-shelf oscilliscope, or custom built?" Tags="&lt;crt-monitor&gt;&lt;display&gt;&lt;vector&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19458" PostTypeId="2" ParentId="19457" CreationDate="2021-04-01T07:14:55.080" Score="6" Body="&lt;p&gt;Well, I give you the &lt;a href=&quot;https://en.wikipedia.org/wiki/SYM-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;SYM-1&lt;/a&gt;, as it could display text output on a user-supplied oscilloscope. Ray was just too much of an engineer to let that pass :) (*1)&lt;/p&gt;&#xA;&lt;p&gt;Beside that somewhat off beat example, I'd say next to every analogue computer would work great with a user supplied oscar.&lt;/p&gt;&#xA;&lt;p&gt;In a more general notion, at a time when displays became a thing, a user supplied oscilloscope as default device wouldn't make much sense, as it would increase the system price a lot, as it, for one, would include many expensive components not needed for the task, while the computer side would still have to include everything necessary to  generate a picture.&lt;/p&gt;&#xA;&lt;p&gt;The CDC displays are a special case, as here the display 'only' needed a pair of &lt;a href=&quot;https://en.wikipedia.org/wiki/Digital-to-analog_converter&quot; rel=&quot;nofollow noreferrer&quot;&gt;DA converters&lt;/a&gt;, while the already existing peripheral processors would provide the data stream. But even here it was more appropriate to supply the screen as part of the console needed anyway for interface and keyboard.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Using XY output was kind of popular in the 70s for folks with good tools - and due the same reason (an oscilloscope was expensive) not really seen outside of well fitted shops, which was the majority of hobbyists. I still have, somewhere, a board I made at that time to read out a PROM as hex on an oscilloscope. one line of 4 bytes at a time, a button to reset address to zero, one for up one for down. Hardware was just a set of counters to address and 'micro step' plus resistors as DAC.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-01T14:04:46.577" LastActivityDate="2021-04-01T14:04:46.577" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19459" PostTypeId="2" ParentId="8166" CreationDate="2021-04-01T08:03:28.933" Score="2" Body="&lt;p&gt;Thanks to the excellent answers to this question, I have now learned that&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The Amstrad CPC did have hardware scrolling (vertically and&#xA;horizontally) as well as double buffering and&lt;/li&gt;&#xA;&lt;li&gt;The ZX Spectrum had to copy / redraw content&#xA;(software scrolling) so&lt;/li&gt;&#xA;&lt;li&gt;Games ported from Spectrum to Amstrad&#xA;often suffered because the software scroll (redraw or memcopy) took&#xA;longer on the Amstrad.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Though I had my doubts that contemporary games used hardware scrolling on the Amstrad, I found the &lt;a href=&quot;http://www.cpcwiki.eu/forum/games/killer-cobra-programmer-pete-wiseman-speaks!/&quot; rel=&quot;nofollow noreferrer&quot;&gt;following comment&lt;/a&gt; from Pete Wiseman, regarding Scramble clone 'Killer Cobra':&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There were some well known hardware registers that you could use to offset the screen and scroll it one 4-pixel block at a time but that produced scrolling that was just miles too fast for this type of game... Anyway, the technique published in Amstrad Action revealed a second hardware register that nudged the screen horizontally to the right by 2 pixels. I think it was some kind of screen centering register that wasn't documented but if you used this in conjunction with the hyperspeed 4-pixel scroll, you could slow the scrolling down to something more playable. To do that you would scroll the screen left by 4 pixels but also nudge it right by 2, effectively scrolling left 2 pixels. Then the next frame you could just nudge the screen centering register back to it's normal position scrolling left 2 pixels again. Then repeat and you'd end up with a 2 pixel scroll which although is probably twice as fast as arcade games like Scramble and Super Cobra, it's playable ... and silky smooth as it uses hardly any CPU.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Vertical hardware scrolling was much trickier, and required accurate timing, though it still uses documented CRTC registers.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2021-04-02T07:52:38.283" LastActivityDate="2021-04-02T07:52:38.283" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19460" PostTypeId="2" ParentId="19457" CreationDate="2021-04-01T12:22:42.763" Score="6" Body="&lt;p&gt;The PDP-1 actually used a CRT that was designed for &lt;strong&gt;radar&lt;/strong&gt; (see e.g. the &lt;a href=&quot;https://en.wikipedia.org/wiki/PDP-1#Graphics_display&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; entry).&lt;/p&gt;&#xA;&lt;p&gt;But the whole electronics around the CRT needed to drive the CRT and interface it with the PDP-1 was custom built. And as such, it was nothing like the electronics needed in an oscilloscope.&lt;/p&gt;&#xA;&lt;p&gt;The same is true for later displays used in the PDP series.&lt;/p&gt;&#xA;&lt;p&gt;So the assumption&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It would be easy for a computer manufacturer to re-brand a commercially-available oscilloscope as the display device, or expect the end-user to supply their own oscilloscope&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;is not how it was done initially on the PDP-1.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Looking at the various handbooks on Bitsaver, we see the follow progression:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp1/F15D_PDP1_Handbook_Oct63.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;April 1960&lt;/a&gt;: Mentions &amp;quot;the PDP-1 CRT display&amp;quot; and &amp;quot;lightpen&amp;quot; on p. 23. No model numbers.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp1/F15B_PDP1_Handbook_1961.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1961&lt;/a&gt;: &amp;quot;Visual CRT Display (Type 30)&amp;quot;, &amp;quot;Precision CRT Display (Type 31)&amp;quot;, &amp;quot;Lightpen (Type 32)&amp;quot; on p 27.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp1/F15C_PDP1_Handbook_Jun63.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;June 1963&lt;/a&gt;: same (p. 32)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp1/F15D_PDP1_Handbook_Oct63.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oct 1963&lt;/a&gt;: same (p. 33), additionally with a &amp;quot;Symbol Generator (Type 33)&amp;quot;, but with an &amp;quot;Oscilloscope Display (Type 34)&amp;quot; on p. 6, without details later on.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp1/F12_PDP-1_priceList_Jun64.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;June 1964 pricelist&lt;/a&gt; Oscilloscope Display Type 34, e.g. for Tektronix Model RM 503.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So one can see that the variant for an off-the-shelf oscilloscope is clearly an afterthought, and the question is still if anybody used that (though it was a lot cheaper, which is also very interesting). So I wonder how the quality and screen size of that scope compared?&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-04-01T16:33:07.520" LastActivityDate="2021-04-01T16:33:07.520" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19461" PostTypeId="2" ParentId="19457" CreationDate="2021-04-01T12:38:08.117" Score="6" Body="&lt;p&gt;The PDP-1 Type 30 display, which is the 'canonical' display for the PDP-1, was a point-plotting display, not a vector display. It was a specific device, not a general-purpose oscilloscope.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.bitsavers.org/pdf/dec/graphics/Type_30E_Precision_CRT_Display_Dec63.pdf&quot; rel=&quot;noreferrer&quot;&gt;Link to manual&lt;/a&gt;. The price list gives it at $14,300 in 1964, though that's the Type 30, not the 30E.&lt;/p&gt;&#xA;&lt;p&gt;HOWEVER, &lt;a href=&quot;http://bitsavers.org/pdf/dec/pdp1/F12_PDP-1_priceList_Jun64.txt&quot; rel=&quot;noreferrer&quot;&gt;this 1964 PDP-1 price list&lt;/a&gt; lists&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;OSCILLOSCOPE DISPLAY&#xA;TYPE 34&#xA;&#xA;Plots data point by point on an X-Y plotting scope such as the Tektronix Model RM&#xA;503. Ten bits per axis.&#xA;                                                         Control only                  $  3,060&#xA;                                                         With oscilloscope             $  3,900&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So the answer to your question is 'both'. The PDP-1 could support a dedicated display device &lt;strong&gt;or&lt;/strong&gt; an off-the-shelf oscilloscope as a display.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10260" LastEditDate="2021-04-01T13:02:46.220" LastActivityDate="2021-04-01T13:02:46.220" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19462" PostTypeId="1" AcceptedAnswerId="19463" CreationDate="2021-04-01T13:28:54.557" Score="3" ViewCount="197" Body="&lt;p&gt;On a Commodore 64, if I &lt;code&gt;Load &amp;quot;*&amp;quot;,8,1&lt;/code&gt; and the file's address (first two bytes on disk) is $D000, will it load to the RAM under the I/O space?&lt;/p&gt;&#xA;&lt;p&gt;In other words, does the KERNAL loader properly adjust the memory configuration during a load?&lt;/p&gt;&#xA;&lt;p&gt;What about an 8K file loaded into $C000 - $DFFF?&lt;/p&gt;&#xA;" OwnerUserId="612" LastActivityDate="2021-04-01T15:18:34.007" Title="C64 KERNAL Loading into I/O space" Tags="&lt;commodore-64&gt;&lt;rom&gt;&lt;disk-drive&gt;" AnswerCount="2" CommentCount="0" ClosedDate="2021-04-02T11:27:05.050" ContentLicense="CC BY-SA 4.0" />
  <row Id="19463" PostTypeId="2" ParentId="19462" CreationDate="2021-04-01T14:21:30.703" Score="4" Body="&lt;p&gt;No it doesn't adjust the memory configuration - which is why loading an 'executable' file (i.e. start address of $0800)  bigger than 202 blocks (about 50 KB) using a standard kernal will crash a C64. Same for your 8 KB/$C000 example.&lt;/p&gt;&#xA;" OwnerUserId="19895" LastActivityDate="2021-04-01T14:21:30.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19464" PostTypeId="2" ParentId="19462" CreationDate="2021-04-01T15:11:38.300" Score="4" Body="&lt;p&gt;The standard load routine will not handle this.&lt;/p&gt;&#xA;&lt;p&gt;If you need to load under $D000-$DFFF you will have to handle it yourself; you can still use kernal routines (such as OPEN, CHKIN and CHRIN) to do it but will have to buffer and transfer or set the bank configuration for each byte stored.&lt;/p&gt;&#xA;&lt;p&gt;Loading under BASIC ($A000-$BFFF), $C000-$CFFF or KERNAL space ($E000-$FFFF) is no problem with the standard loader, except if it crosses the I/O space on the way (so separate files that go into these areas can be loaded).&lt;/p&gt;&#xA;&lt;p&gt;When putting together a C64 production, you'd typically use a packer/cruncher (such as &lt;a href=&quot;https://bitbucket.org/magli143/exomizer/wiki/Home&quot; rel=&quot;nofollow noreferrer&quot;&gt;Exomizer&lt;/a&gt;) to compress data - a feature of these tools is typically also to handle transfer under I/O space during decompression.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2021-04-01T15:18:34.007" LastActivityDate="2021-04-01T15:18:34.007" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19465" PostTypeId="1" AcceptedAnswerId="19467" CreationDate="2021-04-01T15:11:58.243" Score="6" ViewCount="281" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/DEMOS_(operating_system)&quot; rel=&quot;noreferrer&quot;&gt;DEMOS&lt;/a&gt; was a Soviet operating system derived from BSD Unix.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Commands in BSD are derived from English words.  Did DEMOS use these same commands, develop their own commands but retain the Roman alphabet, or create entirely Russian commands in the Cyrillic alphabet?  (The first would be the least amount of work, but the last would be the most acceptable to Soviet users.)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Were the commands lower-case (as most BSD commands are) or upper-case?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-04-04T17:46:08.983" Title="DEMOS commands: Cyrillic or Roman letters? Uppercase or lowercase?" Tags="&lt;unix&gt;&lt;ussr&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19466" PostTypeId="2" ParentId="19446" CreationDate="2021-04-01T15:31:37.020" Score="4" Body="&lt;p&gt;Really it was born out of neccesity.&lt;/p&gt;&#xA;&lt;p&gt;It was started in the days of monochrome displays. If your only colours are black or white then your options are somewhat limited.&#xA;Back then, resolutions were not really good enough to have a white pixel and black pixel border around a white cursor like we have today.&lt;/p&gt;&#xA;&lt;p&gt;As colour displays became more common, the XOR mouse pointer stuck around. Very useful in the early days of colour displays, where you were likely using a domestic 360p TV with a blurry, fuzzy image as a monitor.&lt;/p&gt;&#xA;" OwnerUserId="14577" LastActivityDate="2021-04-01T15:31:37.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19467" PostTypeId="2" ParentId="19465" CreationDate="2021-04-01T15:36:36.867" Score="13" Body="&lt;p&gt;The commands are more or less the same ones we're used to from BSDs.&lt;/p&gt;&#xA;&lt;p&gt;Examples &lt;code&gt;cat&lt;/code&gt; and &lt;code&gt;ls&lt;/code&gt; are clearly visible on this image from the Russian wikipedia page. &lt;a href=&quot;https://i.stack.imgur.com/0ebUP.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0ebUP.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But some things, such as the shell, appear to have translated error messages. For example, you can see &lt;code&gt;Команда не найдена&lt;/code&gt;, or &amp;quot;Command not found&amp;quot;. And this looks like it's running the &lt;a href=&quot;https://en.wikipedia.org/wiki/C_shell&quot; rel=&quot;noreferrer&quot;&gt;C shell&lt;/a&gt;, exactly as western BSDs do.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-04-01T21:29:48.887" LastActivityDate="2021-04-01T21:29:48.887" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19468" PostTypeId="2" ParentId="19446" CreationDate="2021-04-01T15:43:56.833" Score="3" Body="&lt;p&gt;The technique predated the modern combination of mice and graphical displays. Text terminals needed to show the cursor simultaneously with the character being highlighted by, or adjacent to, the cursor.  Several very simple techniques for that have been employed, and inverted characters, also known as XOR, ended up as the most conspicuous and rather common choice.&lt;/p&gt;&#xA;&lt;p&gt;Bitmap graphics displays arrived to offer more flexibility, and their cursors were free to employ shapes in addition to a position; by that time, the use of reverse characters to indicate a cursor position on the screen was no less familiar to the general population than a thin solid horizontal or vertical line used for the same purpose.  Those solid cursors usually had to be blinking in order to remain noticeable.  And blinking cursors only work well if the remaining screen content remains &lt;em&gt;very&lt;/em&gt; static.&lt;/p&gt;&#xA;&lt;p&gt;The U.S. Patent &lt;a href=&quot;https://patents.google.com/patent/US3609749A/en&quot; rel=&quot;nofollow noreferrer&quot;&gt;US3609749A&lt;/a&gt; from 1969 (where the cursor generally wasn't mouse controlled and was limited to a rectangle spanning exactly one character on the screen) says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A common problem when using such [earlier brightening or underlining] cursors is that when the display consists of large numbers of closely spaced, relatively small characters, it may be very difficult for the operator to distinguish the marked character location from the remaining character locations without excessive concentration and mental fatigue.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Later patents such as &lt;a href=&quot;https://patents.google.com/patent/US5471570A/en&quot; rel=&quot;nofollow noreferrer&quot;&gt;US5471570A&lt;/a&gt; use formulations such as &amp;quot;&lt;em&gt;...so that the sprite is always distinctively visible irrespective of the underlying displayed data&lt;/em&gt;&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="9130" LastActivityDate="2021-04-01T15:43:56.833" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19469" PostTypeId="2" ParentId="19439" CreationDate="2021-04-01T15:48:09.337" Score="2" Body="&lt;p&gt;Regarding the last question, I've tried running &lt;a href=&quot;https://www.chessprogramming.org/Cyrus#Cyrus_II&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cyrus II&lt;/a&gt; on ZX Spectrum versus &lt;a href=&quot;http://hem.bredband.net/petero2b/javachess/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;CuckooChess&lt;/a&gt; engine on android (droidfish app). If the engine was severely down-tuned, sometimes Cyrus II was winning.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2021-04-01T15:48:09.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19470" PostTypeId="1" AcceptedAnswerId="19471" CreationDate="2021-04-01T16:17:17.523" Score="8" ViewCount="786" Body="&lt;p&gt;What was the 1 MHz bus used for on the BBC micro series and how did it compare with the TUBE in terms of speed/bandwidth?&lt;/p&gt;&#xA;&lt;p&gt;I read somewhere that EPROM programmers used the 1 MHz bus, but anything else?&lt;/p&gt;&#xA;" OwnerUserId="8111" LastEditorUserId="15334" LastEditDate="2021-04-01T17:16:40.160" LastActivityDate="2021-04-01T17:53:47.750" Title="What was the 1 MHz bus used for on the BBC micro series?" Tags="&lt;bbc-micro&gt;&lt;ports&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19471" PostTypeId="2" ParentId="19470" CreationDate="2021-04-01T16:45:23.823" Score="15" Body="&lt;p&gt;The so-called &amp;quot;1MHz bus&amp;quot; is not actually a separate bus.  It is just the set of devices which were too slow to run at the full 2MHz in the original BBC Micro, and which therefore incur a clock-stretched cycle when accessed.  These include most of the SHEILA (&lt;code&gt;$FExx&lt;/code&gt;) devices, except for the Econet, floppy, Tube, VIDPROC, and memory mapping registers.&lt;/p&gt;&#xA;&lt;p&gt;The 1MHz &lt;em&gt;extension&lt;/em&gt; bus, one of the ports under the keyboard, additionally includes buffers to prevent 2MHz cycles from going out on an unpredictable user-supplied set of cables and electronics, which would otherwise potentially cause trouble.  The BBC Micro reserves the FRED (&lt;code&gt;$FCxx&lt;/code&gt;) and JIM (&lt;code&gt;$FDxx&lt;/code&gt;) pages which directly map to the extension bus.&lt;/p&gt;&#xA;&lt;p&gt;JIM is, by convention, reserved for large memory expansion devices, some of which have additional functionality such as advanced video framebuffers.  Four registers at the top of FRED are reserved as paging registers for such devices.  This allows supplying up to a 40-bit address (1TB) to a JIM memory - pretty forward-looking.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&quot;http://mdfs.net/Docs/Comp/BBC/Hardware/FREDAddrs&quot; rel=&quot;noreferrer&quot;&gt;partial list of devices&lt;/a&gt; that map to FRED:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;amp;FC00-&amp;amp;FC03 Byte-Wide Expansion RAM&#xA;&amp;amp;FC08-&amp;amp;FC0F Ample M2000 MIDI Interface (see also FCF0)&#xA;&amp;amp;FC10-&amp;amp;FC13 Teletext Hardware&#xA;&amp;amp;FC14-&amp;amp;FC1F Prestel Hardware&#xA;&amp;amp;FC20-&amp;amp;FC3F SID Interface&#xA;&amp;amp;FC20-&amp;amp;FC27 IEEE Interface&#xA;&amp;amp;FC28-&amp;amp;FC2F Electron Econet&#xA;&amp;amp;FC30-&amp;amp;FC3F Cambridge Ring interface&#xA;&amp;amp;FC40-&amp;amp;FC4F Hard Drive Access&#xA;&amp;amp;FC50-&amp;amp;FC5F&#xA;&amp;amp;FC60-&amp;amp;FC6F Electron Serial&#xA;&amp;amp;FC70-&amp;amp;FC7F Electron expansion&#xA;&amp;amp;FC80-&amp;amp;FC87 LCD Display Control&#xA;&amp;amp;FC88-&amp;amp;FC8F&#xA;&amp;amp;FC90-&amp;amp;FC9F Electron sound and speech&#xA;&amp;amp;FCA0-&amp;amp;FCAF&#xA;&amp;amp;FCB0-&amp;amp;FCBF Electron 6522 VIA expansion&#xA;&amp;amp;FCC0-&amp;amp;FCCF Morley Electronics RAMDisk&#xA;&amp;amp;FCC0-&amp;amp;FCCF Electron floppy disk expansion&#xA;&amp;amp;FCD0-&amp;amp;FCDB&#xA;&amp;amp;FCDC-&amp;amp;FCDF PRES Battery-backed RAM&#xA;&amp;amp;FCE0-&amp;amp;FCEF Electron Tube expansion&#xA;&amp;amp;FCF0-&amp;amp;FCF7 JGH/ETI MIDI Control (see also FC08)&#xA;&amp;amp;FCF8-&amp;amp;FCFB USB port&#xA;&amp;amp;FCFC-&amp;amp;FCFF Page-Wide Expansion RAM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The 1MHz bus and the Tube can't really be compared in terms of speed, because they do totally different things.  The Tube is specifically intended for attaching a Second Processor, which includes a protocol and buffers for the necessary communications between the application code and the &amp;quot;I/O host&amp;quot; that the BBC Micro itself then becomes.  Indeed there is an OSBYTE call specifically for allowing the Tube to access the 1MHz expansion bus (or other) hardware devices.&lt;/p&gt;&#xA;&lt;p&gt;The Tube protocol allows transferring 256 bytes of bulk data at a rate of 10µs per byte - which is 20 cycles at 2MHz.  The following loop is capable of transferring 256 bytes from JIM to an arbitrary main memory page at 16 cycles per byte:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  LDX #0&#xA;: LDA $FD00,X   ; normally 4 cycles, but JIM access stretched to 5&#xA;  STA (dest),X  ; 6 cycles&#xA;  INX           ; 2 cycles&#xA;  BNE :-        ; 3 cycles per taken branch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Unrolling this loop could speed it up a little more.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2021-04-01T17:53:47.750" LastActivityDate="2021-04-01T17:53:47.750" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19472" PostTypeId="2" ParentId="19437" CreationDate="2021-04-01T17:48:30.047" Score="3" Body="&lt;p&gt;Somewhat of a side note - The Atari 8 bit series (400 | 800 | 65XE | 130XE - 6502 based, running at 2Mhz), normally displayed 40 characters per line on a color TV. There are some terminal type programs that horizontally scroll the 40 line display to get a virtual 80 character per line terminal, or use a 3 by 5 font (with 1 pixel between characters) (from such programs, it wasn't native to the Atari) to get 80 characters per line, but it is difficult to read.&lt;/p&gt;&#xA;&lt;p&gt;The terminal programs were used for some modem based bulletin board programs, and also for the somewhat rare ATR8000, which had a Z80 for CP/M, and option an add-on board with an 8088 + 512MB ram, that could run MSDOS 2.11. The ATR8000 could also work with a standard ASCII terminal.&lt;/p&gt;&#xA;&lt;p&gt;I'm wondering if the C64 could have use a 3 by 5 or similar font to get 80 characters per line.&lt;/p&gt;&#xA;" OwnerUserId="4660" LastEditorUserId="4660" LastEditDate="2021-04-02T01:09:37.810" LastActivityDate="2021-04-02T01:09:37.810" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19473" PostTypeId="1" CreationDate="2021-04-02T07:51:39.137" Score="13" ViewCount="3700" Body="&lt;p&gt;Early PCs generated RF signal, and later Composite video or S-video, to use a TV set as monitor. Why didn't color TVs of those days expose a analog RGB interface for direct connection from VCR/PC or any other &lt;strong&gt;local&lt;/strong&gt; device? There must be some stage in the TV where chroma-luminance signal has already been decoded into RGB signal and can be hacked into without costing too much.&lt;/p&gt;&#xA;&lt;p&gt;A not-so-retro modding example:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=DLz6pgvsZ_I&quot; rel=&quot;noreferrer&quot;&gt;The 8-Bit Guy: Modding a consumer TV to use RGB input&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=NkpSBK3g-gA&quot; rel=&quot;noreferrer&quot;&gt;The 8-Bit Guy: Modding a TV for RGB – Part 2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Link:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/6826/why-not-scart-for-early-color-monitors&quot;&gt;Why not SCART for early color monitors&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="17812" LastEditorUserId="7946" LastEditDate="2021-04-02T14:42:51.763" LastActivityDate="2021-04-05T16:03:13.747" Title="Why didn't early color TV sets accept RGB input?" Tags="&lt;history&gt;&lt;video&gt;&lt;crt-monitor&gt;&lt;display&gt;&lt;color-display&gt;" AnswerCount="5" CommentCount="17" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19474" PostTypeId="2" ParentId="19473" CreationDate="2021-04-02T07:56:49.590" Score="21" Body="&lt;p&gt;Early colour TVs predated VCRs and home computers by many years.  Even if it did not cost much, adding an RGB input would still be a cost for something that no one would use.  However, it would have been more complex and expensive than you might expect today.&lt;/p&gt;&#xA;" OwnerUserId="7805" LastEditorUserId="7805" LastEditDate="2021-04-04T00:04:56.640" LastActivityDate="2021-04-04T00:04:56.640" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19475" PostTypeId="2" ParentId="19473" CreationDate="2021-04-02T08:15:23.207" Score="63" Body="&lt;p&gt;When colour television broadcasts began (1960s, in the UK; perhaps a little earlier in North America?) there &lt;em&gt;weren't any&lt;/em&gt; local devices that customers might want to use.  Broadcast TV was the only source of images that any home user could imagine.&lt;/p&gt;&#xA;&lt;p&gt;Adding extra circuitry to handle separated R, G, B and sync inputs (with appropriate protections against overload etc.) wouldn't be straightforward, and certainly not cheap when receivers were generally constructed from discrete components (including thermionic valves).  I'm guessing you've never disassembled a first-generation colour TV receiver?&lt;/p&gt;&#xA;&lt;p&gt;As unit price was an important competitive element, no manufacturer would waste resources providing a feature that no customer wanted.&lt;/p&gt;&#xA;&lt;p&gt;RGB SCART and the like were developed only when devices existed (already using the available inputs) and there was some demand to create a higher-quality picture, avoiding the modulation process.  And by that time, the target displays were built using transistors, moving to greater use of ICs than discrete components.&lt;/p&gt;&#xA;" OwnerUserId="7946" LastActivityDate="2021-04-02T08:15:23.207" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="19476" PostTypeId="1" CreationDate="2021-04-02T08:20:47.070" Score="6" ViewCount="828" Body="&lt;p&gt;Suppose you were, in the early eighties, designing a color computer to run on an PAL TV with a free hand to choose the specifications within the limits of the technology of the time. What would be the ideal resolution?&lt;/p&gt;&#xA;&lt;p&gt;While similar a question as in the case of NTSC, PAL has multiple variants and a sibling system named SECAM to be compatible of, and of course a higher resolution.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WAxs2.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WAxs2.png&quot; alt=&quot;Resolution chart&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Link:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2205/ideal-resolution-for-color-computer-on-ntsc&quot;&gt;Ideal resolution for color computer on NTSC&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2138/ntsc-scan-lines-and-vertical-resolution&quot;&gt;NTSC scan lines and vertical resolution&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;PS: Since in character mode the color changes less often (say 8 time less than theoretical resolution), does that mean Text mode allows higher resolution regardless of video memory cost restraint?&lt;/p&gt;&#xA;" OwnerUserId="17812" LastActivityDate="2021-04-06T21:01:11.003" Title="Ideal resolution for color computer on PAL/SECAM" Tags="&lt;crt-monitor&gt;&lt;color-display&gt;&lt;color-computer&gt;&lt;pal&gt;" AnswerCount="5" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19477" PostTypeId="1" CreationDate="2021-04-02T09:31:26.907" Score="5" ViewCount="221" Body="&lt;p&gt;Many classic arcade games like Pac Man (Namco 1980), Assault (Namco 1988), Mercs (Capcom 1990), etc, use a monitor oriented vertically. I assume that they used the same physical hardware, with the scan lines following the long side of the monitor.&lt;/p&gt;&#xA;&lt;p&gt;With the monitor rotated, and scan lines going in a different direction, what consequences were there for the game programmer?&lt;/p&gt;&#xA;&lt;p&gt;Small extra question, were all vertical games' monitors rotated 90° in the same direction, or were some rotated clockwise and others anticlockwise?&lt;/p&gt;&#xA;" OwnerUserId="18369" LastEditorUserId="15334" LastEditDate="2021-04-04T13:20:11.517" LastActivityDate="2021-04-04T13:20:11.517" Title="Were vertical monitor arcade games programmed differently from those with horizontal monitors?" Tags="&lt;hardware&gt;&lt;crt-monitor&gt;&lt;arcade&gt;" AnswerCount="0" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19478" PostTypeId="2" ParentId="14221" CreationDate="2021-04-02T09:33:48.703" Score="3" Body="&lt;p&gt;I believe the game you're looking for is Clash of steel.&lt;/p&gt;&#xA;&lt;p&gt;The hint that lead me to it was the comment about Storm across Europe being in the ballpark. Wikipedia states it was: &amp;quot;everything that Storm Across Europe should have been and wasn't&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;My arguments for:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;predates windows 95 and has better than Storm Across Europe graphics&lt;/li&gt;&#xA;&lt;li&gt;map of western Europe with &amp;quot;city to city&amp;quot; turn based advancement, you can search youtube for gameplay&lt;/li&gt;&#xA;&lt;li&gt;2 players vs pc option&lt;/li&gt;&#xA;&lt;li&gt;fall of France scenario&lt;/li&gt;&#xA;&lt;li&gt;units shown as flag and turns consist of research/move/attack&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;What I find as arguments against are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;no boundaries between cities&lt;/li&gt;&#xA;&lt;li&gt;not actually moving from city to city but rather dot to dot&lt;/li&gt;&#xA;&lt;li&gt;not actually using national flags for units&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If this is not the game you're looking for perhaps it would help narrow the ballpark further  :)&lt;/p&gt;&#xA;" OwnerUserId="21256" LastActivityDate="2021-04-02T09:33:48.703" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19479" PostTypeId="2" ParentId="19476" CreationDate="2021-04-02T10:14:24.597" Score="14" Body="&lt;p&gt;In the early 80s, cost of RAM for the framebuffer was the dominant factor, closely followed by RAM bandwidth. The difference in resolution between NTSC and PAL systems is minimal in comparison to these factors (note that despite the different number of lines per field and different field rate, each technology used a very similar line rate of ~64us per line, thus with any given technology the limits of its horizontal resolution will be similar).&lt;/p&gt;&#xA;&lt;p&gt;Another limitng factor is that the larger the framebuffer, the longer it will take to update it, thus a smaller framebuffer will often be more useful than a large one.&lt;/p&gt;&#xA;&lt;p&gt;A few years ago I started &lt;a href=&quot;https://hackaday.io/project/158634-ultimate-retrocomputer/details&quot; rel=&quot;noreferrer&quot;&gt;collecting ideas for designing the best possible 8-bit machine that could have been built with a realistic budget in 1981&lt;/a&gt;. I did some analysis of available time with the fastest economical DRAM and a Z80B, and determined that 360 pixels with 16 colours was the highest realistic resolution without reducing the processor's speed during screen refreshes. This could be paired realistically to either a 240P or 480I vertical resolution, but the latter would like require too much memory to be realistic.&lt;/p&gt;&#xA;" OwnerUserId="15930" LastActivityDate="2021-04-02T10:14:24.597" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19480" PostTypeId="2" ParentId="19476" CreationDate="2021-04-02T13:19:14.093" Score="8" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What would be the ideal resolution?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is no &amp;quot;ideal&amp;quot; resolution. TV screens use &amp;quot;overscan&amp;quot;, which means that the full TV image is occluded by a bezel. That doesn't matter for movies, but it does matter if you have text on the screen. So you need to choose a part of the image that would be inside the bezel of most TV models, because the size of the bezel varies.&lt;/p&gt;&#xA;&lt;p&gt;Both PAL and NTSC have a fixed number of lines (and are interlaced, but let's leave this aside). So you pick a number of lines close to what you have identified as the always visible part.&lt;/p&gt;&#xA;&lt;p&gt;Horizontally, it's all analog. There are no &amp;quot;pixels&amp;quot;, you are free to choose whatever resolution you want. However, you have a central clock in your computer, and you want your pixel clock to be something that has a relationship to that clock. You also have to keep in mind that access to RAM needs time, and access to RAM must be shared with the CPU. So from that constraint you derive some horizontal resolution that fits your timing, and that goes together with the vertical resolution so you can fit the framebuffer in some power of two.&lt;/p&gt;&#xA;&lt;p&gt;And this complicated process is why every home computer had its own resolution (or resolutions).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;As some interpretations of the original question seem to aim at the maximal resolution, let me rephrase the question to &amp;quot;if there are no technology constraints, how would you implement display on the TV?&amp;quot;. And while this may be in reach with 80s technology, it would be a stretch, in particular in the early 80s. But anyhow:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use the full screen resolution: interlaced, all lines vertically, and some kind of Y4U2V2-like approach for the framebuffer, so intensity resolution is higher than color resolution.&lt;/li&gt;&#xA;&lt;li&gt;Have some way to handle text so text can be scaled, anti-aliased, and have sharp transitions. That will require more internal horizontal framebuffer resolution than it's possible to display due to color-carrier bandwidth restrictions (or RF restrictions), and probably additional filters.&lt;/li&gt;&#xA;&lt;li&gt;Require all software to put meaningful text only inside a user-adjustable area (while &amp;quot;unimportant&amp;quot; graphics near the outside can be hidden by the bezel, just like for movies), and scaled as above, and require software to handle the variable text resolution.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In that way, one could come really close to an optimal usage of all the TV can display. (But of course, for the cost of thus effort one could just buy a monitor, and use that instead of the TV ...)&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-04-06T17:27:08.840" LastActivityDate="2021-04-06T17:27:08.840" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="19481" PostTypeId="2" ParentId="19476" CreationDate="2021-04-02T15:05:00.370" Score="7" Body="&lt;p&gt;If this is about connecting the color computer to television antenna input via an RF modulator, then the local TV system variant matters, as both the RF modulator for the computer and the RF demodulator in the TV are built to use a certain composite video signal bandwidth.&lt;/p&gt;&#xA;&lt;p&gt;For a 625-line 50 Hz field rate TV system, the maximum composite video signal bandwidth ever used with PAL or SECAM color encoding over RF is 6 MHz.&lt;/p&gt;&#xA;&lt;p&gt;As the line rate of a 625/50 TV system is 15625 Hz, it means that 384 cycles of 6 MHz sine wave fits into one line. As one cycle of sine wave means basically a white pixel and a black pixel, there are 768 total pixels per line, with a pixel clock of 12 MHz. Since the active video portion of a line is 52us out of the 64us, there are 624 active pixels, of which not all are even visible due to the TV image being slightly overscanned.&lt;/p&gt;&#xA;&lt;p&gt;In practice, if direct composite video connection is used, the RF modulation and demodulation are not present to artificially limit the bandwidth to 6 MHz.&lt;/p&gt;&#xA;&lt;p&gt;Basically this means that the situation is similar than between equipment in a TV studio, the transmitting device like a camera can use as much as bandwidth as it can and the receiving device can use as much bandwidth as it possibly can. There is a good chance that consumer TV equipment can have similar bandwidth limitations on the composite input than on the RF input, but it can also accept higher bandwidth.&lt;/p&gt;&#xA;&lt;p&gt;There is not much use going past 6 MHz though, as even the BT.601 standard digital component video used in studios does not use analogue bandwidth much past 6 MHz, but it samples the PAL and SECAM signals at 13.5 MHz to arrive at 702 active pixels for the analogue portion of the line, so that sets the point of having overkill resolution.&lt;/p&gt;&#xA;&lt;p&gt;So having said that, I would estimate that due to 5% of overscan per side, and the requirement to fit text well inside the edges of a TV, the usable area would be maybe 90% of the 624 pixels or 562 pixels tops. In worst case if you lived in a country with a 5 MHz TV system with bandwidth for 520 pixels, maybe less than 470 pixels per line via the RF modulator. With direct composite video connection, maybe 640 usable pixels per line is achievable as a practical maximum, but it can already be blurry and sharp edges will have fringe colors. 640 pixels would achieve 80 colums with a font of 8 pixels wide.&lt;/p&gt;&#xA;&lt;p&gt;For vertical resolution, the PAL signal has 576 active lines when interlaced, or 288 active lines per field. Accounting for the overscan, there would be about 256 lines visible per field, or 512 lines per interlaced frame.&lt;/p&gt;&#xA;&lt;p&gt;So through this thought process, I ended up with a resolution of 640x512 as the resolution that is the approximate maximum that can still be presented on a TV without too much blurring.&lt;/p&gt;&#xA;&lt;p&gt;If we compare this to for example an Amiga 1000 which was designed in the early 80s, it also happens to use 640x512 as the hi-res mode. It also allows individually to halve the horizontal resolution by two to have a lo-res mode with 320 pixels per line, and it also allows turning off the interlacing to have a progressive mode with 256 lines per frame.&lt;/p&gt;&#xA;&lt;p&gt;In real life, it is a bit more complex than that, since while the composite video signal can have bandwidth up to 6 MHz, it only applies to the monochrome brightness signal, the color resolution is much less as it only has a bandwidth of 1.3 MHz.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-04-05T18:31:21.930" LastActivityDate="2021-04-05T18:31:21.930" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19482" PostTypeId="1" AcceptedAnswerId="19484" CreationDate="2021-04-02T16:41:55.113" Score="8" ViewCount="435" Body="&lt;p&gt;Reference:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://deskthority.net/wiki/BBC_Micro_analogue_in&quot; rel=&quot;noreferrer&quot;&gt;BBC Micro analogue in&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A custom connector would be required between this D-shape rows of pins port and a standard input socket for phono/rca or 3.5inch or 1/4inch jack.&lt;/p&gt;&#xA;&lt;p&gt;What would be the bit depth and sampling rate?&lt;/p&gt;&#xA;" OwnerUserId="8111" LastActivityDate="2021-04-02T17:45:39.273" Title="Could the BBC micro's analogue input be used to sample sound?" Tags="&lt;bbc-micro&gt;&lt;audio&gt;&lt;ports&gt;&lt;input-devices&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19483" PostTypeId="2" ParentId="19476" CreationDate="2021-04-02T17:34:57.527" Score="4" Body="&lt;p&gt;I'll take PAL to mean the specific composite-video signal format for color TV, deliberately excluding higher-resolution versions like S-video with multiple signal lines (see &lt;a href=&quot;https://en.wikipedia.org/wiki/PAL&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;The vertical resolution is fixed by the signal timing of 625 interlaced scan lines, meaning that you can either use interlacing and get a maximum of 576 lines with a very annoying 25Hz flickering or 288 lines with 50Hz.&lt;/p&gt;&#xA;&lt;p&gt;For the horizontal resolution, if you're mainly interested in brightness reproduction (accepting that you'll only be able to give two adjacent pixels different brightnesses, with badly blurred color differences), then the PAL luminance bandwith of roughly 3.5 MHz within the available active scan line time of 52µs is the limiting factor, meaning that you might get 3.5 * 2 * 52 = 364 pixels onto a single line. Compared with the 288 vertical resolution, this comes close to the 4:3 screen aspect ratio, giving you square pixels. For an &amp;quot;exact&amp;quot; 4:3 ratio, you'd push the horizontal resolution up to 384.&lt;/p&gt;&#xA;&lt;p&gt;The color resolution will be much lower, limited by the bandwidth of the chroma signal (roughly 1.3MHz), giving you 135 effective pixels. Such a low resolution, combined with the very non-square pixels, doesn't make much sense, so you'd typically go for the brightness-based calculation, accepting the blurry colors.&lt;/p&gt;&#xA;&lt;p&gt;In addition to these signal parameters, we have to look at the TV sets, typically being adjusted in such a way that the full (rounded-shape) screen gets video signal without black borders around the picture, meaning that especially in the corners, video signal gets lost &amp;quot;outside of the screen&amp;quot;. So, instead of 384x288, you'd choose something like 320x240.&lt;/p&gt;&#xA;&lt;p&gt;Then there's the question of budget. If you go for a dedicated video RAM, then 320x240 gives 76800 pixels, just beyond 2**16 (=65536), meaning that you'd have to go for the next bigger DRAM chips, but wasting 40% of their capacity. So, maybe you'd reduce the resolution to stay below that threshold. If you share the RAM between video and CPU, then this argument doesn't apply, as every single byte not used for video will be available for your application programs.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2021-04-02T17:34:57.527" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19484" PostTypeId="2" ParentId="19482" CreationDate="2021-04-02T17:45:39.273" Score="13" Body="&lt;p&gt;No, it can not be used to sample audio.&lt;/p&gt;&#xA;&lt;p&gt;As the link you provided says, in 12-bit mode it takes 10 milliseconds to convert a sample, and even in 8-bit mode it takes 4 milliseconds.&lt;/p&gt;&#xA;&lt;p&gt;That results into maximum sampling rate of 250 Hz, which is useless for sampling audio.&lt;/p&gt;&#xA;&lt;p&gt;The low sampling rate indicates the analog input is meant for slowly changing signals, like sampling a paddle position, and it can be used for datalogging something that changes slowly enough like temperature.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2021-04-02T17:45:39.273" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19486" PostTypeId="2" ParentId="19473" CreationDate="2021-04-02T19:33:39.380" Score="10" Body="&lt;p&gt;TV manufacturers didn't have a single, obvious RGB connection standard to implement. Physically, there was SCART (with competing European and Japanese pinouts), RCA, DE-9, and various manufacturer-specific DIN plugs to choose from.&lt;/p&gt;&#xA;&lt;p&gt;Then you have the various electrical signals to send over them such as RGBS, RGsB, RGBHV, YPrPb, digital RGBI, etc.&lt;/p&gt;&#xA;&lt;p&gt;And VCRs didn't even need RGB because Y/C was good enough (in fact, I think Y/C is good enough for early computers, also), and if you're recording off the air, the quality wasn't that great to begin with. (Prerecorded videocassettes didn't become affordable until later.)&lt;/p&gt;&#xA;&lt;p&gt;While this was all being sorted out, device manufacturers typically provided an RF Modulator that could work with any TV through the antenna connector that every television already equipped (for example, 300 ohm twin lead screw connectors or a coax connector of some sort). So for the TV manufacturers, their job was already done. Providing more connectors for external devices quickly hits diminishing returns.&lt;/p&gt;&#xA;" OwnerUserId="75" LastEditorUserId="75" LastEditDate="2021-04-04T03:34:20.510" LastActivityDate="2021-04-04T03:34:20.510" CommentCount="17" ContentLicense="CC BY-SA 4.0" />
  <row Id="19487" PostTypeId="1" AcceptedAnswerId="19490" CreationDate="2021-04-02T20:51:07.603" Score="1" ViewCount="141" Body="&lt;p&gt;I recently acquired an Apple IIgs with two 3.5&amp;quot; floppy drives and &lt;strong&gt;no hard disk&lt;/strong&gt;. I'm very seasoned with older Macs, but I have no experience within the Apple II world.&lt;/p&gt;&#xA;&lt;p&gt;I search for a way to create floppies to be used with that machine with help of an an older Mac: Both machines use the 800k GCR format.&lt;/p&gt;&#xA;&lt;p&gt;The Apple II Documentation Project has a number of &lt;a href=&quot;https://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Software/Operating%20Systems/Apple%20IIGS%20System/Disk%20Images/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Disk Images&lt;/a&gt; for download, most often in .po format. (I learned that the other format, .2mg is used with Emulators.) These usually have 819,200 Bytes. According to &lt;a href=&quot;https://stason.org/TULARC/pc/apple2/faq/10-006-What-are-DSK-PO-DO-HDV-NIB-and-2MG-disk-image.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this source&lt;/a&gt;, this is a .hdv-image type:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;.hdv- typically an image 800k (819,200 bytes) or greater in size in ProDOS order. The image is intended for use as a virtual hard disk by various Apple II and IIgs emulators (e.g. Apple Oasis). The IIgs program ASIMOV2 can create .hdv files (&lt;strong&gt;select &amp;quot;Raw image&amp;quot;&lt;/strong&gt;).  The file name should end with &amp;quot;.hdv&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The bold emphasized text suggests that this is a binary image, about the same when reading a floppy disk in a PC with Linux with &lt;code&gt;dd&lt;/code&gt; and writing the output into a file.&lt;/p&gt;&#xA;&lt;p&gt;I did even more research &lt;a href=&quot;https://68kmla.org/forums/topic/55606-how-to-make-disks-for-a-iigs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, &lt;a href=&quot;https://forum.classic-computing.de/forum/index.php?thread/15655-apple-2gs-bootdisk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, and &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/9769/is-it-possible-to-write-iigs-floppies-from-a-powermac-7100&quot;&gt;here&lt;/a&gt;. Some of these sites more or less silently assume a hard disk on the IIgs, or even using an emulator. All in all, the described procedures seem to be very cumbersome.&lt;/p&gt;&#xA;&lt;p&gt;Is there any easy way (like just changing the Macintosh file type code?) to write these .po images to 800k Floppy Disks with just &lt;em&gt;DiskCopy&lt;/em&gt; on an older Mac?&lt;/p&gt;&#xA;" OwnerUserId="10295" LastActivityDate="2021-05-01T15:39:57.927" Title="How to write Apple IIgs .po disk images to Floppy Disks with an older Mac" Tags="&lt;floppy-disk&gt;&lt;apple-macintosh&gt;&lt;disk-image&gt;&lt;apple-iigs&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19490" PostTypeId="2" ParentId="19487" CreationDate="2021-04-03T01:02:10.310" Score="4" Body="&lt;p&gt;It is rather straight-forward, technically speaking, to share both 3.5&amp;quot; floppy disks and their image files between a Classic Mac (e.g. MacOS System 7) and an Apple IIgs. This because both systems support ProDOS floppies and HFS floppies (in GS/OS), and both systems support image files for 800KB disks using DiskCopy 4.2. So, that solves most needs back in the day.&lt;/p&gt;&#xA;&lt;p&gt;Since you are retrieving IIgs files in the &lt;code&gt;.po&lt;/code&gt; (ProDOS Disk Image) format, you are introducing a &amp;quot;wrinkle&amp;quot;. I think this is best solved using &lt;code&gt;CiderPress&lt;/code&gt;, which is a pretty capable disk image file manager for Apple II disks that happens to run on Windows XP (and higher).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://a2ciderpress.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CiderPress&lt;/a&gt; can be downloaded and installed on a Windows machine, and your &lt;code&gt;.po&lt;/code&gt; image files easily opened with it. There is also a tool within &lt;code&gt;CiderPress&lt;/code&gt; called &lt;code&gt;Disk Image Converter&lt;/code&gt;. It is this converter tool that is able to export the 3.5&amp;quot; ProDOS &lt;code&gt;.po&lt;/code&gt; images as Disk Copy 4.2 &lt;code&gt;.dsk&lt;/code&gt; image files. Those files can then be transferred to a Mac where you can, in theory at least, write them to actual ProDOS floppies that will work on the IIgs.&lt;/p&gt;&#xA;&lt;p&gt;A simple way to convert the &lt;code&gt;.po&lt;/code&gt; to &lt;code&gt;.dsk&lt;/code&gt; images on the Classic Mac would be preferred, obviously. I don't recall whether it works, but you could try just changing the resource fork, and see if they open directly on the Mac with Disk Copy 4.2.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ADTPro/adtpro/releases&quot; rel=&quot;nofollow noreferrer&quot;&gt;ADTPro&lt;/a&gt; is also worth considering. With the simple addition of a serial cable between the IIgs and your modern machine, you can write the &lt;code&gt;.po&lt;/code&gt; files (on the modern machine) to the floppy disk connected to the IIgs. This is actually my preferred way to create 3.5&amp;quot; floppies from images on the IIgs.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-05-01T15:39:57.927" LastActivityDate="2021-05-01T15:39:57.927" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19491" PostTypeId="2" ParentId="19473" CreationDate="2021-04-03T03:24:26.797" Score="20" Body="&lt;p&gt;Many TV designs up into the 1970s were so called live chassis designs, which used one leg of the mains input as a reference ground. This saved materials and weight - given some early color TVs used 200+ watts at 100% duty cycle, you would have needed a rather bulky and heavy transformer, given that PSMPS technology was not really mature for consumer devices at that time. Some sets used a small transformer to supply some low voltage circuitry, while going straight off the mains for other parts of the unit - but still having the common ground, even of the transformer supplied parts, directly connected to the mains.&lt;/p&gt;&#xA;&lt;p&gt;An RGB input is a DC coupled input, unlike an RF input.&lt;/p&gt;&#xA;&lt;p&gt;Most home electrical systems do not use polarized plugs, or the correct polarization of plugs and sockets cannot be relied upon sufficiently to use it as a safety feature.&lt;/p&gt;&#xA;&lt;p&gt;A DC coupled input needs a DC coupled ground - which, in a live chassis design, has a 50% chance (with an unpolarized plug) to be at 120V/240V mains live potential....&lt;/p&gt;&#xA;&lt;p&gt;Thus, a live chassis design CANNOT have any DC coupled inputs or outputs to random external devices*, unless complex isolation circuitry (which is not trivial for a wideband and DC coupled signal like RGB video) is used.&lt;/p&gt;&#xA;&lt;p&gt;(There is hearsay that a significant amount of people got injured attempting to retrofit audio outputs, RGB or composite inputs etc. to live chassis TVs back in the day.)&lt;/p&gt;&#xA;&lt;p&gt;*Actually, there were some live chassis RADIOS too, which sometimes had special connectors for turntables or microphones that were in themselves completely insulated.... This kind of design would be considered insane today.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;And there is yet another reason. Some color TV designs did not, anywhere in the circuitry, decode the received signal into RGB either, instead taking advantage of multiple control inputs on a CRT (eg cathode input for low bandwith chroma difference signals, grids for high bandwidth luminance) to only compose the &amp;quot;final&amp;quot; picture output within the CRT itself.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Addendum: One might wonder how so much electronics was powered &amp;quot;straight off the mains&amp;quot;. Keep in mind that TVs until the late 70s often used at least some vacuum tube circuitry - and vacuum tube circuitry works great off a +150...250VDC bus, which you can relatively easily create from mains input without the use of a transformer. And even in a fully semiconductor based design, quite some of the power hungry circuitry is used to drive the CRT and the EHT inverter (usually combined into one circuit with the horizontal output stage) - this is typically not low voltage circuitry either (which is the reason why vacuum tube circuits were used for this for a long time - high voltage transistors or thyristors were LESS economical to use then. Fascinatingly, there were production color TV designs that use ICs and vacuum tubes together in one chassis.)&lt;/p&gt;&#xA;" OwnerUserId="785" LastEditorUserId="785" LastEditDate="2021-04-03T18:03:09.197" LastActivityDate="2021-04-03T18:03:09.197" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19493" PostTypeId="2" ParentId="18407" CreationDate="2021-04-03T08:34:01.557" Score="2" Body="&lt;p&gt;The below circuit shows how it can be done. The principle is taken from the Z80 Second Processor for the BBC Micro and I'm sure the idea was around long before then, these things usually are.&lt;/p&gt;&#xA;&lt;p&gt;The Z80 will use two address maps: a start-up map with the ROM available (ALLRAM is LOW) and the operating map with no ROM, just RAM (ALLRAM is HIGH).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/eLyLJ.png&quot; alt=&quot;schematic&quot; /&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The start-up address map is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ADDRESS RANGE    READ                 WRITE&#xA;0000..3FFFh      ROM image (16 KB)    RAM Low (first  16 KB)&#xA;4000..7FFFh      ROM image (16 KB)    RAM Low (second 16 KB)&#xA;8000..FFFFh      RAM High  (32 KB)    RAM High&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Note that the ROM image appears twice. This harmlessly simplifies the address decoding. All writes in the 64 KB map go to the 64 KB RAM, so the RAM can be initialised easily.&lt;/p&gt;&#xA;&lt;p&gt;The operating address map is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ADDRESS RANGE    READ AND WRITE&#xA;0000..3FFFh      RAM Low  (32 KB)&#xA;8000..FFFFh      RAM High (32 KB)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The start-up address map is in use until the first instruction fetch from the upper 32 KB, which is always RAM.&lt;/p&gt;&#xA;&lt;p&gt;After reset, the Z80 will execute from ROM address 0000h. Its ROM software can then follow the following example steps to get into the operating mode and be running CP/M:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Initialise the RAM with CP/M, copied from the ROM or wherever.&#xA;Store a 3-byte 'JP startCPM' instruction at 8000..8002h.&#xA;Do anything else the ROM needs to, before it vanishes until the next /RESET.&#xA;Execute a 'JP 8000h' instruction from ROM.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;At the start of the JP instruction byte fetch cycle from 8000h, the D-type Flip-Flop (DFF) output ALLRAM will be preset to HIGH. ALLRAM will stay HIGH until the next /RESET.&lt;/p&gt;&#xA;&lt;p&gt;This circuit uses OR and NOR logic gates, to illustrate the mechanisms used. It may well be possible to optimise it into fewer gates. When building one for real, though, you could look at using a CPLD instead (5 V-tolerant or 3V3, depending on your Z80 and memories) such as an XC9500XL part. A CPLD would be cheap and mop up the gates but it just depends what suits you.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastEditorUserId="5199" LastEditDate="2021-04-14T15:55:05.823" LastActivityDate="2021-04-14T15:55:05.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19495" PostTypeId="1" AcceptedAnswerId="19506" CreationDate="2021-04-03T11:37:55.483" Score="4" ViewCount="243" Body="&lt;p&gt;I have an archive of sample recordings with a sample playback program, the date and author in the BBC BASIC loader for the program is &amp;quot;(C) 1985 by DAVID J. HOSKINS&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;There are are about 10 recordings, short clips including &amp;quot;James Whale All Hit Radio&amp;quot;, Knight Rider TV series theme tune clip (file name NIRIDER), Vincent Price Laughing [off Michael Jackson's Thriller song, at end] (file name: VPLAUGH)&lt;/p&gt;&#xA;&lt;p&gt;The 6502 machine code is as follows for the audio playback, as a hex dump:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F&#xA;&#xA;00000000   78 A9 C1 20 67 09 A9 00 20 67 09 A9 81 20 67 09  x©Á g.©. g.© g.&#xA;00000010   A9 00 20 67 09 A9 A1 20 67 09 A9 00 20 67 09 A9  ©. g.©¡ g.©. g.©&#xA;00000020   00 85 70 A9 22 85 71 A0 00 B1 70 48 29 0F 20 51  .…p©&amp;quot;…q .±pH). Q&#xA;00000030   09 A6 72 CA D0 FD 68 4A 4A 4A 4A 20 51 09 A6 72  .¦rÊÐýhJJJJ Q.¦r&#xA;00000040   CA D0 FD E6 70 D0 02 E6 71 A5 71 C9 7B D0 D8 58  ÊÐýæpÐ.æq¥qÉ{ÐØX&#xA;00000050   60 49 0F 48 09 D0 20 67 09 68 48 09 90 20 67 09  `I.H.Ð g.hH. g.&#xA;00000060   68 09 B0 20 67 09 60 A2 FF 8E 43 FE 8D 4F FE E8  h.° g.`¢.ŽCþOþè&#xA;00000070   8E 40 FE EA EA EA EA A2 08 8E 40 FE 60 00        Ž@þêêêê¢.Ž@þ`.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Which disassembles to:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;                  * = 0000&#xA;&#xA;0000   78         SEI&#xA;0001   A9 C1      LDA #$C1&#xA;0003   20 67 09   JSR $0967&#xA;0006   A9 00      LDA #$00&#xA;0008   20 67 09   JSR $0967&#xA;000B   A9 81      LDA #$81&#xA;000D   20 67 09   JSR $0967&#xA;0010   A9 00      LDA #$00&#xA;0012   20 67 09   JSR $0967&#xA;0015   A9 A1      LDA #$A1&#xA;0017   20 67 09   JSR $0967&#xA;001A   A9 00      LDA #$00&#xA;001C   20 67 09   JSR $0967&#xA;001F   A9 00      LDA #$00&#xA;0021   85 70      STA $70&#xA;0023   A9 22      LDA #$22&#xA;0025   85 71      STA $71&#xA;0027   A0 00      LDY #$00&#xA;0029   B1 70      LDA ($70),Y&#xA;002B   48         PHA&#xA;002C   29 0F      AND #$0F&#xA;002E   20 51 09   JSR $0951&#xA;0031   A6 72      LDX $72&#xA;0033   CA         DEX&#xA;0034   D0 FD      BNE $0033&#xA;0036   68         PLA&#xA;0037   4A         LSR A&#xA;0038   4A         LSR A&#xA;0039   4A         LSR A&#xA;003A   4A         LSR A&#xA;003B   20 51 09   JSR $0951&#xA;003E   A6 72      LDX $72&#xA;0040   CA         DEX&#xA;0041   D0 FD      BNE $0040&#xA;0043   E6 70      INC $70&#xA;0045   D0 02      BNE $0049&#xA;0047   E6 71      INC $71&#xA;0049   A5 71      LDA $71&#xA;004B   C9 7B      CMP #$7B&#xA;004D   D0 D8      BNE $0027&#xA;004F   58         CLI&#xA;0050   60         RTS&#xA;0051   49 0F      EOR #$0F&#xA;0053   48         PHA&#xA;0054   09 D0      ORA #$D0&#xA;0056   20 67 09   JSR $0967&#xA;0059   68         PLA&#xA;005A   48         PHA&#xA;005B   09 90      ORA #$90&#xA;005D   20 67 09   JSR $0967&#xA;0060   68         PLA&#xA;0061   09 B0      ORA #$B0&#xA;0063   20 67 09   JSR $0967&#xA;0066   60         RTS&#xA;0067   A2 FF      LDX #$FF&#xA;0069   8E 43 FE   STX $FE43&#xA;006C   8D 4F FE   STA $FE4F&#xA;006F   E8         INX&#xA;0070   8E 40 FE   STX $FE40&#xA;0073   EA         NOP&#xA;0074   EA         NOP&#xA;0075   EA         NOP&#xA;0076   EA         NOP&#xA;0077   A2 08      LDX #$08&#xA;0079   8E 40 FE   STX $FE40&#xA;007C   60         RTS&#xA;007D   00         BRK&#xA;007E              .END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It takes a few parameters from the calling BBC Basic program, one of which is playback speed. At the time, I did disassemble this successfully and incorporate this assembly into my own Utility-ROM as a &lt;code&gt;*PLAY&lt;/code&gt; command for BBC Master, a la &amp;quot;C64's Simon's Basic&amp;quot; to provide extra utilities via easy to use star commands. It was my GCSE Computer Studies project in 1989, called &amp;quot;System PLUS&amp;quot;. I don't have the same tools easily to hand but I might be able to re-run the disassembly under emulator for BBC micro and update the answer.&lt;/p&gt;&#xA;&lt;p&gt;What bit depth might the samples have? I read that with the AY-8912 sound chip, that there was a esotetric technique / trial and error to work out a bit depth of 5 bits. I will try to find the name of the technique.&lt;/p&gt;&#xA;&lt;p&gt;Were each sample linear or logarithmic?&lt;/p&gt;&#xA;&lt;p&gt;What was the sample rate of the playback?&lt;/p&gt;&#xA;&lt;p&gt;Curiously, documentation for a Speech Synthesizer for the BBC suggested 8 bits logarithmic was possible, cited here: &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/17206/8111&quot;&gt;https://retrocomputing.stackexchange.com/a/17206/8111&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8111" LastEditorUserId="6576" LastEditDate="2021-04-03T17:41:16.227" LastActivityDate="2021-04-09T20:58:00.383" Title="What bit depth and sampling frequency could the BBC micro play back sampled sounds?" Tags="&lt;bbc-micro&gt;&lt;sound&gt;&lt;audio&gt;&lt;digital-audio&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19496" PostTypeId="1" AcceptedAnswerId="19497" CreationDate="2021-04-03T11:48:56.383" Score="6" ViewCount="663" Body="&lt;p&gt;I am studying assembly of the C64, and of course using VICE to do so. VICE has the &lt;code&gt;load&lt;/code&gt; command to load data straight into the C64 RAM. I reckoned I could use that to put machine code into RAM and run it from there.&lt;/p&gt;&#xA;&lt;p&gt;The weird thing now is that the &lt;code&gt;load&lt;/code&gt; command seems to skip the first two bytes when loading data. I have this hex file:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[bf@localhost asm]$ hexdump -C test.hex &#xA;00000000  01 02 03 04 05 06 07 08  09 0a 0b 0c 0d 0e 0f 10  |................|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But, when I load it into the RAM, it starts with byte with the value &lt;code&gt;03&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;(C:$8170) load &amp;quot;/path/to/test.hex&amp;quot; 0 8000&#xA;Loading /path/to/test.hex from 8000&#xA;to 801D (1d bytes)&#xA;(C:$8170) m 8000&#xA;&amp;gt;C:8000  03 04 05 06  07 08 09 0a  0b 0c 0d 0e  0f 10 11 12   ................&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Am I doing something wrong?&lt;/p&gt;&#xA;" OwnerUserId="575" LastActivityDate="2021-04-03T12:09:22.463" Title="Why does the VICE &quot;load&quot; command skip the first two bytes?" Tags="&lt;emulation&gt;&lt;memory&gt;&lt;commodore&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19497" PostTypeId="2" ParentId="19496" CreationDate="2021-04-03T12:09:22.463" Score="20" Body="&lt;p&gt;Quote from VICE manual:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Load the specified file into memory. If no address is given, the file is loaded to the address specified by the first two bytes read from the file. If address is given, the file is loaded to the specified address and the first two bytes read from the file are skipped.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2021-04-03T12:09:22.463" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19498" PostTypeId="1" CreationDate="2021-04-03T14:13:39.407" Score="2" ViewCount="166" Body="&lt;p&gt;I'm trying to write a calculator program in assembly for the Apple //e. I know that there are built-in subroutines for performing all kinds of math operations involving the floating-point accumulator (FAC), and I'd like to use those.&lt;/p&gt;&#xA;&lt;p&gt;I'm trying to use &lt;code&gt;FRMNUM&lt;/code&gt; (&lt;code&gt;$DD67&lt;/code&gt;) and &lt;code&gt;PRNTFAC&lt;/code&gt; (&lt;code&gt;$ED2E&lt;/code&gt;) to carry out the math and print the result, but it's not working.&lt;/p&gt;&#xA;&lt;p&gt;Below is a sample program designed just to add 1 and 1 and print 2, but the program winds up in a loop.&lt;/p&gt;&#xA;&lt;p&gt;It puts the data &lt;code&gt;31 c8 31 00&lt;/code&gt; (= 1 + 1) at memory address $7000, points &lt;code&gt;TXTPTR&lt;/code&gt; (which is the pointer used by the &lt;code&gt;FRMNUM&lt;/code&gt; subroutine) at that address, runs &lt;code&gt;FRMNUM&lt;/code&gt; and then runs &lt;code&gt;PRNTFAC&lt;/code&gt; which should print the result on the screen.&lt;/p&gt;&#xA;&lt;p&gt;It doesn't. It winds up in a loop somewhere in the $DD's, ie in &lt;code&gt;FRMNUM&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;EDIT 1: &lt;a href=&quot;https://drive.google.com/file/d/1vPZLT7GnqId05UTHo7mTxDXuzoWi9dmq/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a link to the calculator program I'm working on. I can't copy and paste it into here because it's too long.&lt;/p&gt;&#xA;&lt;p&gt;EDIT: Here's the commented data in text format.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;*=============&#xA;* PRNTFAC TEST&#xA;&#xA;        ORG $6000&#xA;&#xA;HOME    EQU $FC58&#xA;FRMNUM  EQU $DD67&#xA;PRNTFAC EQU $ED2E&#xA;TXTPTR  EQU $B8&#xA;PTR     EQU $06&#xA;&#xA;* CLEAR SCREEN&#xA;&#xA;START    JSR    HOME&#xA;&#xA;* MAKE BOTH POINTER AND TXTPTR&#xA;* POINT TO $7000&#xA;&#xA;         LDA    #$00&#xA;         STA    PTR&#xA;         STA    TXTPTR&#xA;         LDA    #$70&#xA;         STA    PTR+1&#xA;         STA    TXTPTR+1&#xA;&#xA;* LOAD CONTENT OF DATA&#xA;* TO $7000&#xA;&#xA;         LDX    #$00&#xA;         LDY    #$00&#xA;]LOOP    LDA    DATA,X&#xA;         STA    (PTR),Y&#xA;         BEQ    NEXT&#xA;         INX&#xA;         INY&#xA;         JMP    ]LOOP&#xA;&#xA;* $0700 NOW CONTAINS&#xA;* 31 C8 31 00 (I HAVE CHECKED&#xA;* THIS USING THE DEBUGGER)&#xA;&#xA;* RUN FRMNUM&#xA;&#xA;NEXT    JSR FRMNUM&#xA;&#xA;* RUN PRNTFAC&#xA;* IF PRNTFAC OPERATES LIKE&#xA;* COUT, A &amp;quot;2&amp;quot; SHOULD BE PRINTED&#xA;* AT THE TOP LEFT CORNER OF THE&#xA;* SCREEN&#xA;&#xA;        JSR PRNTFAC&#xA;&#xA;END     RTS&#xA;&#xA;DATA    HEX 31C83100&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16626" LastEditorUserId="16626" LastEditDate="2021-04-04T16:46:28.840" LastActivityDate="2021-04-04T16:46:28.840" Title="How to convert series of hex digits in memory into the format for use with Applesoft math subroutines" Tags="&lt;apple-ii&gt;&lt;6502&gt;" AnswerCount="1" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="19499" PostTypeId="2" ParentId="18359" CreationDate="2021-04-03T18:42:46.063" Score="3" Body="&lt;p&gt;One thing you will certainly need: Patience, a lot of it. Establishing SSH connections with either the client or server side having a very low performance CPU (as in, an 68xxx. I once tried with the client on a Mac LCII with NetBSD...) can take several MINUTES to do all the key exchange work. Also, plan in half an hour for generating the keys when installing an SSH server on such a machine...&lt;/p&gt;&#xA;&lt;p&gt;Since this probably on a network behind some kind of perimeter firewall (eg your DSL router) and for experimental/personal use - do feel justified to ignore best practices and use an unencrypted (telnet, rlogin, rsh...) connection for shell access.&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2021-04-03T18:42:46.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19500" PostTypeId="1" AcceptedAnswerId="19503" CreationDate="2021-04-03T21:29:41.757" Score="1" ViewCount="132" Body="&lt;p&gt;Would like to read some &lt;code&gt;.NSF&lt;/code&gt; files (preferably on Linux). Converting to PDF ideal, but anything else that uses modern formats (eg XML) is fine.&lt;/p&gt;&#xA;&lt;p&gt;When I google &amp;quot;nsf viewer&amp;quot; I get many very similar hits for downloads that all promise to be &amp;quot;100% safe&amp;quot;, which obviously triggers some small red warning lights. What is all that about?&lt;/p&gt;&#xA;&lt;p&gt;I do not want to install something massive, preferably just a quick command line tool.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastActivityDate="2021-04-04T10:17:08.413" Title="What is the easiest way to access/convert Lotus NSF files?" Tags="&lt;lotus&gt;&lt;nsf&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19501" PostTypeId="2" ParentId="19495" CreationDate="2021-04-03T21:32:14.443" Score="5" Body="&lt;p&gt;The BBC Micro uses an SN76489, which provides three tone channels each with sixteen volume levels. For speech playback the standard approach is to set the channels in use to a very high frequency and then modulate the volume.&lt;/p&gt;&#xA;&lt;p&gt;For each channel the volumes are a logarithmic scale, where each step is approximately 10^-0.1 as loud as the previous, i.e. around 79%.&lt;/p&gt;&#xA;&lt;p&gt;You can of course change only one volume at a time; if you want to use multiple channels to increase resolution then you can go the native route of just hoping the user won’t be too strongly bothered by the unclean transitions between sample levels, or you can use the Viterbi algorithm to transition only one channel at a time while minimising error from the original — think of the single-channel steps as the hidden states and the desired output levels as the observed states.&lt;/p&gt;&#xA;&lt;p&gt;So it is reasonably valid, though not quite exact, to look at summing the three channels to induce a single output.&lt;/p&gt;&#xA;&lt;p&gt;Running the numbers, I get 1114 total potential volume levels, but they’re nothing like linearly spaced; if I force them onto a 8-bit integer scale I get only 180 different values.&lt;/p&gt;&#xA;&lt;p&gt;So I’m going to say that with modern preprocessing you can get something only a little worse than 8-bit linear output.&lt;/p&gt;&#xA;&lt;p&gt;As to a sampling rate, I’m willing to take the linked Speech article at its word and assume that 10,000 single-channel transitions per second is accurate; for most audio that won’t sound too much worse than 10kHz though, again, you should be thinking of output that is getting 10,000 opportunities per second to reduce its divergence from the true original rather than necessarily 10,000 completely independent samples.&lt;/p&gt;&#xA;&lt;p&gt;On a BBC, unless you’ve gone off piste with custom hardware, you’re going to run up against storage limitations a long time before anything else becomes troublesome, I think, unless you like being able to play only a second or two of audio at a time.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2021-04-03T21:32:14.443" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19503" PostTypeId="2" ParentId="19500" CreationDate="2021-04-03T22:30:39.607" Score="4" Body="&lt;p&gt;Not really familiar with this topic, but maybe you have checked &lt;a href=&quot;https://github.com/libyal/libnsfdb&quot; rel=&quot;nofollow noreferrer&quot;&gt;libnsfdb&lt;/a&gt; project on GitHub to see if it already does what you need. It seems to have a &lt;a href=&quot;https://github.com/libyal/libnsfdb/blob/main/nsfdbtools/nsfdbexport.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;tool for exporting the data&lt;/a&gt; out of the box.&lt;/p&gt;&#xA;" OwnerUserId="4378" LastActivityDate="2021-04-03T22:30:39.607" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19504" PostTypeId="2" ParentId="18201" CreationDate="2021-04-03T23:47:54.737" Score="11" Body="&lt;p&gt;I would have written just a comment but did not have enough rep to do so. @JdeBP had basically found the answer so all I had to google was &amp;quot;Youtube comment finder&amp;quot; :).&lt;/p&gt;&#xA;&lt;p&gt;The video also posts a linked reddit discussion which clears up the first question everyone asked:&#xA;The plant is &lt;a href=&quot;https://en.wikipedia.org/wiki/Shoreham_Nuclear_Power_Plant&quot; rel=&quot;noreferrer&quot;&gt;Shoreham Nuclear Power Plant&lt;/a&gt;, decommissioned in 1994 and completed by General Electric in the mid 80s.&lt;/p&gt;&#xA;&lt;p&gt;As the @JdeBP has pointed out there is a &lt;a href=&quot;https://www.youtube.com/watch?v=ONEm1ph3MP4&amp;amp;lc=Ugy31S6A9L2wEl8u3dV4AaABAg&quot; rel=&quot;noreferrer&quot;&gt;comment&lt;/a&gt; by Paul Crissman, which I'll quote in case the link goes down: &amp;quot;The &lt;strong&gt;GE MAC7000&lt;/strong&gt; line was bought out by Bailey controls Co. I worked there 1975-1995. The Keyboard was an &lt;strong&gt;Intecolor&lt;/strong&gt; which was a data terminal that connected to more modern digital controllers in the &lt;strong&gt;Network 90 system&lt;/strong&gt;&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;So, first off, the entire plant ran a &lt;a href=&quot;https://en.wikipedia.org/wiki/Distributed_control_system&quot; rel=&quot;noreferrer&quot;&gt;distributed control system&lt;/a&gt; meaning what we're seeing as a keyboard under a huge CRT is indeed, as Hitek has tagged it, a terminal for the General Electric turned Bailey control system.&lt;/p&gt;&#xA;&lt;p&gt;The fun part, now knowing what it is, is googling &lt;a href=&quot;https://en.wikipedia.org/wiki/Compucolor&quot; rel=&quot;noreferrer&quot;&gt;Intecolor&lt;/a&gt; and learning in a small Wikipedia snippet that the Intercolor 8001 was a kit-based terminal based on the Intel 8080 and the CRT produced what is described as bright and colorful pictures.&lt;/p&gt;&#xA;&lt;p&gt;And since these control systems have become increasingly expensive to maintain there is actually an &lt;a href=&quot;https://www.pc8800.com/pc8800.html&quot; rel=&quot;noreferrer&quot;&gt;emulator&lt;/a&gt; provided for sale by a company whose website not only shows the aforementioned graphics(emulated) but also a picture of such a terminal with the Intercolor keyboard layout as seen in the Youtube video.&lt;/p&gt;&#xA;" OwnerUserId="21256" LastActivityDate="2021-04-03T23:47:54.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19505" PostTypeId="2" ParentId="9591" CreationDate="2021-04-04T00:09:41.723" Score="0" Body="&lt;p&gt;Conjecture: Cable material that could cleanly transfer three analog video signals, plus sync pulses and identification pins, over several feet was probably not a cheap, mass produced item at the time CGA was introduced. Mind that VGA uses a quite special cable stock (several simple wires and three 75 Ohm coaxial lines), and there was likely only a reason to produce this in large quantities, at consumer friendly prices, once VGA hardware became widespread. In 1982, it would likely have been a niche or bespoke product adding extra cost.&lt;/p&gt;&#xA;&lt;p&gt;The only other widespread consumer application at that time needing a similar type of cable material would have been SCART - and this cable might simply have been too thick to fit into a DE-9 plug and/or have been harder to mass produce configured cables with due to there having been TOO MANY extra wires. Also, a cable type used in europe might not even have been well known to american engineers in the early 1980s....&lt;/p&gt;&#xA;" OwnerUserId="785" LastActivityDate="2021-04-04T00:09:41.723" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19506" PostTypeId="2" ParentId="19495" CreationDate="2021-04-04T03:03:42.860" Score="6" Body="&lt;p&gt;Here's how the specific routine you posted works.  It appears to be using the &amp;quot;4-bit linear&amp;quot; method &lt;a href=&quot;https://www.smspower.org/Development/SN76489&quot; rel=&quot;nofollow noreferrer&quot;&gt;mentioned on this page&lt;/a&gt;.  The resulting samples are not truly linear, but it's easy to understand and implement, and good enough for game SFX or speech.&lt;/p&gt;&#xA;&lt;p&gt;We'll analyse this in bottom-up order, starting with the last routine, which simply takes a command in the accumulator and sends it to the sound chip, which in the BBC Micro is attached to the &amp;quot;slow bus&amp;quot; on the System VIA.  Other devices on the &amp;quot;slow bus&amp;quot; are the Speech chip (if fitted, but it rarely was) and the keyboard.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$0967:&#xA;   LDX #$FF&#xA;   STX $FE43  ; System VIA Port A, all bits output direction&#xA;   STA $FE4F  ; System VIA Port A, place accumulator on wires, no handshake&#xA;   INX&#xA;   STX $FE40  ; System VIA Port B, assert sound chip write strobe&#xA;   NOP : NOP : NOP : NOP  ; sound chip is really slow&#xA;   LDX #8&#xA;   STX $FE40  ; System VIA Port B, negate sound chip write strobe&#xA;   RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The above routine is called extensively by the rest of the playback code.  The general pattern is &amp;quot;load some value into A, then &lt;code&gt;JSR $0967&lt;/code&gt;&amp;quot;.  I'll abbreviate that to &amp;quot;send command &lt;em&gt;whatever's in A&lt;/em&gt; to the sound chip&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;The immediately preceding routine takes a single 4-bit sample and sets the volume of all three tone channels to it:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$0951:&#xA;   EOR #$0F    ; SN76489 takes a negative volume level&#xA;   PHA&#xA;   ORA #$D0    ; command: set volume of Channel 2&#xA;   JSR $0967&#xA;   PLA&#xA;   PHA&#xA;   ORA #$90    ; command: set volume of Channel 0&#xA;   JSR $0967&#xA;   PLA&#xA;   ORA #$B0    ; command: set volume of Channel 1&#xA;   JSR $0967&#xA;   RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Obviously it would be entirely feasible to have one channel playing samples while the two others (and the noise channel) were doing their normal job, and that would make the above routine far shorter.  That sort of technique is used extensively in the demoscene these days.&lt;/p&gt;&#xA;&lt;p&gt;Most of the rest of the code is just extracting two 4-bit samples from each byte, then sending them to the sound chip as above, with a delay routine for timing.  That loop begins at $0927.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$0927:&#xA;   LDY #0&#xA;   LDA ($70),Y  ; fetch byte from sample array&#xA;   PHA&#xA;   AND #$0F     ; extract low nybble&#xA;   JSR $0951    ; send sample to sound chip&#xA;   LDX $72      ; load delay value&#xA;:  DEX&#xA;   BNE :-       ; delay loop&#xA;   PLA&#xA;   LSR A        ; extract high nybble&#xA;   LSR A&#xA;   LSR A&#xA;   LSR A&#xA;   JSR $0951    ; send sample to sound chip&#xA;   LDX $72      ; load delay value&#xA;:  DEX&#xA;   BNE :-       ; delay loop&#xA;   INC $70      ; advance pointer to next sample byte&#xA;   BNE :+&#xA;   INC $71&#xA;:  LDA $71      ; check for end of sample array&#xA;   CMP #$7B&#xA;   BNE $0927&#xA;   CLI          ; at end, re-enable interrupts and return&#xA;   RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The delay value pre-loaded into $72 would determine how many samples per second, and thus how long the sample was, given that there's a fixed number of samples.  The minimum delay (1) would correspond to about 10kHz, giving a sample length of about 4.5 seconds.  The maximum delay (0, meaning 256 loops at 5 cycles each) would give only about 1.35kHz, which is not enough for even telephone-quality speech.&lt;/p&gt;&#xA;&lt;p&gt;Prior to the main loop, there is an initialisation routine.  Most of this is concerned with setting all three tone channels to a divisor of 1, which on most SN76489 variants produces a high DC output instead of a square wave; this can then be modulated by the volume register.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$0900:&#xA;   SEI   ; disable interrupts, avoiding interference from keyboard&#xA;         ; scanning which would change the System VIA configuration,&#xA;         ; and from BBC Micro's built-in sound routines&#xA;   LDA #$C1 : JSR $0967  ; command: low nybble of Channel 2 tone divisor to 1&#xA;   LDA #$00 : JSR $0967  ; command: high byte of tone divisor to 0&#xA;   LDA #$81 : JSR $0967  ; command: low nybble of Channel 0 tone divisor to 1&#xA;   LDA #$00 : JSR $0967  ; command: high byte of tone divisor to 0&#xA;   LDA #$A1 : JSR $0967  ; command: low nybble of Channel 1 tone divisor to 1&#xA;   LDA #$00 : JSR $0967  ; command: high byte of tone divisor to 0&#xA;   LDA #0&#xA;   STA $70  ; low byte of sample array start address&#xA;   LDA #$22&#xA;   STA $71  ; high byte of sample array start address&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This falls through straight into the main loop.&lt;/p&gt;&#xA;&lt;p&gt;The sample array extends from $2200 to $7AFF inclusive, a total of 22784 bytes or 45568 samples.  Since MODE 7 display memory starts at $7C00, the small amount of unused memory after the array was probably reserved for the variables of a small BASIC program.  I assume this was used to assemble the above routine, load the samples from disk, preset $72, and present a simple UI to the user.&lt;/p&gt;&#xA;&lt;p&gt;According to the datasheet, the volume control (actually an &amp;quot;attenuator&amp;quot; which is why it seems negated) produces a logarithmic result, as the weights of each bit in the volume register are defined in terms of a decibel attenuation:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/snrtR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/snrtR.png&quot; alt=&quot;volume register&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This could be accounted for by pre-processing the audio before packing it into nybbles and bytes.  I assume this demo didn't do that, however; it's not very tightly coded.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2021-04-05T00:51:45.957" LastActivityDate="2021-04-05T00:51:45.957" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19507" PostTypeId="2" ParentId="19500" CreationDate="2021-04-04T10:10:58.557" Score="3" Body="&lt;p&gt;The best way (and easiest, if you find the installer) to access &lt;code&gt;nsf&lt;/code&gt; files is to install Lotus Notes client. It's a great file format, database like, capable of storing any kind of data (mail is just a part of Notes/Domino).&lt;/p&gt;&#xA;&lt;p&gt;I've worked on it up until v7 for a company I used to work for back then. It's really straight forward, you install Notes app and just open the .nsf file as you'd open an .xls file in Excel. In the past, IBM allowed a trial edition to be downloaded using a free IBM account. Nowadays the product has been sold to another company, I don't know if they still supply a free trial version. If not, perhaps you can locate on the Internet older IBM trial versions which can be obtained legally. Since you are an Ubuntu user, there were officially supported Ubuntu Linux versions available. I used Notes before these Linux versions were available (v7-8 shipped with Linux versions also, if I recall well), previous versions played nicely using Wine. So even if you obtain a v5 Notes client for example, you can use it through Wine.&lt;/p&gt;&#xA;&lt;p&gt;PS: I don't think that's a retro question, Domino/Notes is still produced and supported :)&lt;/p&gt;&#xA;" OwnerUserId="8057" LastEditorUserId="8057" LastEditDate="2021-04-04T10:17:08.413" LastActivityDate="2021-04-04T10:17:08.413" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19508" PostTypeId="2" ParentId="19498" CreationDate="2021-04-04T12:42:30.930" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;but I don't know how to convert the set of hex digits the user inputs into memory into the format required for the FAC&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I have a strong feeling that this is not about hex, but binary integers, 16 bit or more.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I know about FRMNUM ($DD67) and PRNTFAC ($ED2E), but I can't find the subroutine that Applesoft uses to take a decimal number and convert it to the six-bit exponent-mantissa format.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You're already on the right track. For example &lt;code&gt;GIVAYF&lt;/code&gt; ($E2F2 *1) converts a 16 bit integer held in A/Y (High/Low) into a floating point number in FAC.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; Converting a 16 bit value to FAC&#xA;; IN:  -&#xA;; OUT: $1234 as FP value in FAC&#xA;&#xA;     LDA   #$12       ; 16 Bit $1234 in A/Y&#xA;     LDY   #$34&#xA;     JSR   GIVAYF     ; Convert it to FAC&#xA;&#xA;     ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Of course this is less handy if your numbers are not straight integers, but some format of your own - which brings us to what might be the primary issue:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Where is your data is originated?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Is it from some internal storage, or user input. If it's from user input why not skipping the task of reading a number, turning it into some two part integer and then convert it to FP and use the Applesoft input routines directly?&lt;/p&gt;&#xA;&lt;p&gt;Which again takes us back to the already mentioned &lt;code&gt;FRMNUM&lt;/code&gt;, which fetches a numeric input from where TXTPTR ($B7) points to and evaluates it into a value in FAC. Of course &lt;code&gt;FRMNUM&lt;/code&gt; is a rather complex beast, doing all sort of things, including expression evaluation (*2) not just for numbers but strings as well.&lt;/p&gt;&#xA;&lt;p&gt;A more down to the minimum task version would be &lt;code&gt;FIN&lt;/code&gt; ($EC4A), which reads a ASCII string and turns it into FAC. FIN expects again TXTPTR to point to the string to be converted, but as well the first character already read into A. It will use GHRGET to fetch additional characters. CHRGET reports colon (':') or end of line ($00) as terminators (*3). Numbers read are in the format of &lt;em&gt;[sign]integer[.integer[E[sign]integer]]&lt;/em&gt;. Anything not fitting that format will terminate, so best use a colon or zero byte. It returns with the number in FAC, or an error. Calling it could look like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; Converting a numeric string to FAC&#xA;; IN:  String in MYBUF&#xA;; OUT: FP value in FAC&#xA;&#xA;     LDA   #&amp;lt;MYBUF    ; Lets point to the number we've inputted&#xA;     STA   TXTPTR&#xA;     LDA   #&amp;gt;MYBUF&#xA;     STA   TXTPTR+1&#xA;&#xA;     JSR   CHARGOT    ; Get the first byte into A&#xA;     JSR   FIN        ; Convert it to FAC&#xA;&#xA;     ...&#xA;&#xA;&#xA;MYBUF DC '123.456E-7',':'.&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That's it.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;No, of course not. There's always more: A nice side effect of its use of CHRGET is that it not only moves TXTPTR along, but also ignores spaces, so one may go ahead and convert a series of numbers in sequence if they are separate by terminators (colon or NUL). This could easy be used to hold numbers between operations as text, easy for display and convert them on the fly for usage. Like holding a calculator stack in four fixed length fields.&lt;/p&gt;&#xA;&lt;p&gt;This needs a way to turn FAC into a number again, which &lt;code&gt;FOUT&lt;/code&gt; ($ED34) conveniently will do - it's essentially the core code of &lt;code&gt;PRNTFAC&lt;/code&gt;, just without outputting the data.&lt;/p&gt;&#xA;&lt;p&gt;Which brings us once again back to FRMNUM. By arranging numbers as above, but replacing the terminator bytes with applesoft token, it could be feed to FRMNUM, doing all the calculations right away. It might be a bit slower than handling everything as FP as long as possible, but then again, this might not really matter for a user input driven calculator.&lt;/p&gt;&#xA;&lt;p&gt;Oh, possibilities are endless again :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;On a side note, it would be great if you could not only comment your source (*4), but as well add it not as picture but text. This does not only increase readability, but helps others a lot to reply with code sniplets you might love to get.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - I always loved that address, it's o easy to remember: Enteger to Float too (yeah, I know, silly, can't help)&lt;/p&gt;&#xA;&lt;p&gt;*2 - Sadly not as convenient as some other BASICs &lt;code&gt;VAL()&lt;/code&gt;functions, as it ecpects the operators to be tokenized. Which of course could be done, essentially turning you'r calculator into a single line program, but that's a different story.&lt;/p&gt;&#xA;&lt;p&gt;*3 - For the workings of GHRGET/GOT you might want to take a peek at the &lt;a href=&quot;http://www.txbobsc.com/aal/1981/aal8109.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple Assembly Line 1/12&lt;/a&gt; - which is always a good read if you want to get into Assembly on the Apple II. IIRC the whole series has been republished recently as a book. Worth a read.&lt;/p&gt;&#xA;&lt;p&gt;*4 - I would consider some header describing input/output/task a bare minimum to each and every function. Keep in mind, you want to read your code in 10 years from now as easy as it is today - without a need to dissassemble your own thoughts.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-04T14:49:38.543" LastActivityDate="2021-04-04T14:49:38.543" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19509" PostTypeId="1" CreationDate="2021-04-04T13:42:19.203" Score="2" ViewCount="147" Body="&lt;p&gt;I write programs in assembly language using HGR mode.&#xA;For a fluid display, I use the double buffering technique.&#xA;Is it possible to use this technique in DHGR (double high resolution)?&#xA;If so, I am looking for examples or explanations to do so.&lt;/p&gt;&#xA;" OwnerUserId="20782" LastActivityDate="2021-04-04T15:47:46.373" Title="Apple II double buffering and double high resolution" Tags="&lt;apple-ii&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19510" PostTypeId="2" ParentId="19509" CreationDate="2021-04-04T15:47:46.373" Score="4" Body="&lt;p&gt;&lt;em&gt;[The following is written under the assumption it's done in Assembly. For BASIC it works rather different, but doable]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I write programs in assembly language using HGR mode. For a fluid display, I use the double buffering technique.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I assume by alternate use of Page 1 ($2000) and Page 2 ($4000), right?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is it possible to use this technique in DHGR (double high resolution)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, works exactly like in normal High-Res. Except of course now Page 1X and 2X in Aux-RAM have to be handled as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If so, I am looking for examples or explanations to do so.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's &lt;em&gt;reading&lt;/em&gt; the usual switches:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$C056/57 switch on/off High-Res&lt;/li&gt;&#xA;&lt;li&gt;$C054/55 switch to Page 2 / back to Page 1&lt;/li&gt;&#xA;&lt;li&gt;$C05E    (AN3) turn on Double Highres&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you want to use mixed text mode as well, then&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$C053    &lt;em&gt;reading&lt;/em&gt; turns it on mixed mode, while&lt;/li&gt;&#xA;&lt;li&gt;$C00D    &lt;em&gt;writing&lt;/em&gt; enables 80 column text.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Writing to either page is as well simple for &lt;em&gt;basic&lt;/em&gt; usage.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$C004/05 (RAMWRT) redirects writes to either 'side' of Aux-RAM&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is done for the whole area from $0200 to $BFFF, so essentially the entire basic RAM except for zero page and stack. So a safe write routine will load a byte, switch on Aux-RAM, write it and swich back. Something like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       LDA  some_byte    ; Whatever data we want to move&#xA;       STA  $C005        ; Switch writing to Aux-RAM&#xA;       STA  target_loc&#xA;       STA  $C004        ; And switching write back to main memory.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Of course one may copy more bytes at once, reading them from main and writing to Aux-RAM. The fine part of zero page not being switched allows to keep pointers there, regardless of how RAMWRT is set.&lt;/p&gt;&#xA;&lt;p&gt;Now, reading from Aux gets a bit more complex, as simply setting RAMRD ($C002/03) would as well start to read code from Aux-RAM, so code must reside in ZP, stack or Language Card RAM. Well, or keeping a copy in Aux-RAM at the same address, which would make it resistent any flip between main and Aux-RAM. Doesn't need to be the whole program, just the routines that do switch reading.&lt;/p&gt;&#xA;&lt;p&gt;At this point I would &lt;strong&gt;recomend to read Apple's own &lt;a href=&quot;https://apple2.org.za/gswv/USA2WUG/IIe.Dev.TechNotes/APPLE2E3.TXT&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apple IIe Technical Note #3&lt;/a&gt;&lt;/strong&gt; which describes all switching and relation between these switches in great deail.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-04-04T15:47:46.373" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19511" PostTypeId="2" ParentId="19465" CreationDate="2021-04-04T17:46:08.983" Score="16" Body="&lt;p&gt;DEMOS was an &lt;em&gt;extension&lt;/em&gt; of 2.9 BSD, and all the commands, utilities, etc. were kept in place with their original names and everything. The major areas of said extension were:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Add a rudimentary Russian &amp;quot;locale&amp;quot; support for KOI8-R (a modified KOI-8). Almost all of BSD was extremely ASCII-centric, so it took a very significant amount of time and effort to modify the code to make it work with the 8-bit encoding with its non-trivial collation rules. Also, add Russian-language messages everywhere in user space. The message language was controlled by an environ variable (sorry, don't remember which one now - &lt;strong&gt;LANG&lt;/strong&gt;?).&lt;/li&gt;&#xA;&lt;li&gt;Modify existing or add new drivers for hardware specific to the USSR/Comecon-produced systems, including 8-bit support for terminal multiplexers and terminals.&lt;/li&gt;&#xA;&lt;li&gt;Produce docs and mans in Russian.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The localization efforts were also ported to more exotic USSR/Comecon architectures based on DEC VAX (with 4.3BSD as the base) and IBM 370 (off of Amdahl UTS). Things like Ingres were also modified to deal with KOI8-R.&lt;/p&gt;&#xA;" OwnerUserId="21279" LastActivityDate="2021-04-04T17:46:08.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19512" PostTypeId="1" AcceptedAnswerId="19532" CreationDate="2021-04-04T19:40:30.123" Score="5" ViewCount="409" Body="&lt;p&gt;I have an old PC from the 90s. When I boot DOS from floppy, everything works fine. I have just installed Windows 98 SE and for some reason, the 3.5 inch floppy drive is showing as 5.25 inch drive. It also freezes when I try to open it.&lt;/p&gt;&#xA;&lt;p&gt;The computer is in a factory configuration hardware-wise: the original drives, and even the cables are factory-sealed to them. This was not happening with the original installation of Windows 98.&lt;/p&gt;&#xA;&lt;p&gt;What could be the cause, and ideally, how to fix this?&lt;/p&gt;&#xA;" OwnerUserId="21281" LastEditorUserId="15334" LastEditDate="2021-04-11T19:40:48.107" LastActivityDate="2021-04-11T19:40:48.107" Title="3.5″ floppy drive shown as 5.25″ in Windows 98 SE" Tags="&lt;windows-98&gt;&lt;floppy-drive&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19513" PostTypeId="2" ParentId="19473" CreationDate="2021-04-05T16:03:13.747" Score="1" Body="&lt;p&gt;The question mentions “early PCs” that generated a TV-compatible RF signal and “the color TVs of those days”. This would be a period spanning from at around mid-to-late 1970s to mid-1980s. The computer systems in question would be microcomputers aimed at the home market.&lt;/p&gt;&#xA;&lt;p&gt;By the late 1970s, new TV sets were already transistor-based and IC-based designs. Baseband CVBS and audio inputs (bypassing the RF tuner) had started appearing on some select models. These were orignally meant for connecting a &lt;a href=&quot;https://en.wikipedia.org/wiki/Videocassette_recorder#Mass-market_success&quot; rel=&quot;nofollow noreferrer&quot;&gt;VCR&lt;/a&gt; — a novel thing which was just beginning to be affordable and commonplace. But by the early 1980s, the early home computers, early home video cameras, and early video game consoles were also becoming a factor.&lt;/p&gt;&#xA;&lt;p&gt;In the European market, the go-to baseband AV connector was, at first, often some variant of the round, multi-pin DIN connector, &lt;a href=&quot;http://obsoletetellyemuseum.blogspot.com/2010/12/grundig-super-color-8642-year-1978.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;such as the one on this 1978 Grundig Super Color 8642&lt;/a&gt;. But this was a relatively short phase. Due to an alleged French attempt at protectionism, European TV sets started standardizing on the larger, rectangular, multi-pin &lt;a href=&quot;https://en.wikipedia.org/wiki/SCART&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCART connector&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Since the SCART connector specified, in addition to CVBS, RGB input (with an &lt;a href=&quot;https://en.wikipedia.org/wiki/SCART#RGB_overlays&quot; rel=&quot;nofollow noreferrer&quot;&gt;overlay capability&lt;/a&gt;, no less!), by mid-to-late 1980s, European TV sets effectively doubled as 15kHz RGB monitors through their SCART connector.&lt;/p&gt;&#xA;&lt;p&gt;Well, not all of them. The cheaper, portable TVs still often only connected the CVBS and audio pins. And even many larger TVs equipped with multiple SCART inputs commonly only had RGB capability on their primary SCART connector. In the 1980s, there were also a lot of older, vacuum-tube-based sets still in use with no connectors for external devices except for the RF signal input. For such reasons, every manufacturer aiming to reach the homes and interface with the installed base had to provide an RF modulator, at least as an option, and design their system around TV-compatible 15kHz timings.&lt;/p&gt;&#xA;&lt;p&gt;RGB-capable SCART connectors also found their way on actual (15kHz) computer monitors. Popular European examples of such monitors include the &lt;a href=&quot;https://bigbookofamigahardware.com/bboah/product.aspx?id=879&quot; rel=&quot;nofollow noreferrer&quot;&gt;Philips CM8833&lt;/a&gt;, the &lt;a href=&quot;https://gona.mactar.hu/Commodore/monitor/Commodore_monitors_by_model_number.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore 1081&lt;/a&gt;, and the &lt;a href=&quot;https://gona.mactar.hu/Commodore/monitor/Commodore_monitors_by_model_number.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Commodore 1084&lt;/a&gt;, all of which could be used both as RGB computer displays and as dedicated video monitors for purposes such as video editing or CCTV installations. (Pro video people would use yet higher-quality video monitors with more broadcast-oriented features, such as Sonys or Ikegamis, but these entry-level monitors where good enough for security and prosumer/videographer purposes.)&lt;/p&gt;&#xA;&lt;p&gt;One of the things that might have contributed to making RGB inputs a “natural thing” in Europe was the popularity of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletext&quot; rel=&quot;nofollow noreferrer&quot;&gt;Teletext&lt;/a&gt; system. By the end of the 1980s, a Teletext decoder (involving a built-in RGB character generator which can sync with an external video signal and superimpose the generated images on the live video) had become a standard feature on the European sets. Supporting such chip in the design is only a small step away from providing external RGB inputs. Then again, American TV sets had built-in closed-caption decoders which employed similar CG technology — and around this time, TVs also started getting crude on-screen menus which (I believe) often initially used the Teletext or CC CG chip for their video output.&lt;/p&gt;&#xA;&lt;p&gt;Be that as it might, due to the NIH syndrome and other market-related factors (SCART RGB was basically forced on the European manufacturers by the French but North America did not have similar regulation or market pressure), American SD/CRT TV sets never got RGB inputs as a standard feature.&lt;/p&gt;&#xA;&lt;p&gt;However, manufacturers were finally forced to add something functionally equivalent to RGB — in the form of component (Y′Pb′Pr) inputs — worldwide when DVD players started getting popular. DVD players required a better signal type than S-video (Y/C) to make the improvement in image quality they provided discernible.&lt;/p&gt;&#xA;&lt;p&gt;European DVD players, of course, did not use component (Y′Pb′Pr) signal but had a SCART RGB connector on the back, for the best compatibility with the European TV sets. (Or rather, manufacturers usually supported both RGB and Y′Pb′Pr signals through the same pins so they could just ship the same PCB and case with a different back panel to different markets, and you could choose the output mode in the configuration menu.) Similarly, European game consoles (the &lt;a href=&quot;https://en.wikipedia.org/wiki/Fourth_generation_of_video_game_consoles&quot; rel=&quot;nofollow noreferrer&quot;&gt;fourth&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Fifth_generation_of_video_game_consoles&quot; rel=&quot;nofollow noreferrer&quot;&gt;fifth&lt;/a&gt; generation) often came with an RGB SCART cable, or had one available as an option, whereas the American versions would have offered a component cable in its place.&lt;/p&gt;&#xA;&lt;p&gt;In conclusion, TV manufacturers added RGB signal inputs (or Y′Pb′Pr signal inputs, which is just another way of dividing the signal to three components and has comparable quality) when market demand or local regulations so required — not any sooner, and not any later. Europeans got a head start due to the French making it a legal requirement (which was a good thing from the perspective of a home computer hobbyist) but free market-driven development in other parts of the world only saw RGB-level signal quality a necessity on a domestic TV after the introduction of the DVD standard.&lt;/p&gt;&#xA;" OwnerUserId="4893" LastActivityDate="2021-04-05T16:03:13.747" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19515" PostTypeId="1" AcceptedAnswerId="19519" CreationDate="2021-04-06T09:20:47.973" Score="5" ViewCount="161" Body="&lt;p&gt;If I recall, &lt;code&gt;PAGE = &amp;amp;E00&lt;/code&gt; for a BBC Model B system with cassette tape based storage.&lt;/p&gt;&#xA;&lt;p&gt;On installation of Acorn DFS ROM (with 8271 Floppy disc controller), the ROM allocated more memory, increasing &lt;code&gt;PAGE&lt;/code&gt; to &lt;code&gt;&amp;amp;1900&lt;/code&gt; . It could be reduced as far back down to &lt;code&gt;&amp;amp;1300&lt;/code&gt; if I recall, if the user wasn't making use of &lt;code&gt;*COMPACT&lt;/code&gt; I think.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;PAGE&lt;/code&gt; is the starting point address for programs such as BASIC and other programs to run.&lt;/p&gt;&#xA;&lt;p&gt;( Where &lt;code&gt;&amp;amp;&lt;/code&gt; (ampersand) is the BBC micro / Acorn notation for stating a number is hexadecimal/hex. On other systems it was &lt;code&gt;$&lt;/code&gt; (dollar) and modern engineering general convention denotes it as &lt;code&gt;0x&lt;/code&gt; e.g. &lt;code&gt;0xFFFF&lt;/code&gt; or &lt;code&gt;0xE00&lt;/code&gt; etc. )&lt;/p&gt;&#xA;&lt;p&gt;So, 3 constraints / considerations here for porting games written before disks common place:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;relocatable code if starting address changed&lt;/li&gt;&#xA;&lt;li&gt;less memory available&lt;/li&gt;&#xA;&lt;li&gt;copy-protection for unofficial ports - I've certainly seen this in Ghouls (&amp;quot;END OF THE LINE&amp;quot; message followed by a hard reset when attempting the port amateurishly).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As far as I can remember, there wasn't any game that couldn't be ported.  Indeed, a friend of another school had a hacker-friend who would seemingly hand port games from tape to disk.  This was necessary as the original tape-based game couldn't sometimes just be loaded into memory from tape and then &lt;code&gt;*SAVE&lt;/code&gt;d to disk to be &lt;code&gt;*LOAD&lt;/code&gt;ed and run - they may not have worked. This was due to at least one of the above 3 constraints.&lt;/p&gt;&#xA;&lt;p&gt;On the BBC Master 128, with more memory, I think this workspace memory claimed by the DFS was mapped elsewhere, so 2 of the above constraints may not have applied but other compatibility issues e.g. undocumented 6502 instructions or (unofficial) assumptions about locations of memory mapped things might then have been a challenge.&lt;/p&gt;&#xA;" OwnerUserId="8111" LastEditorUserId="8111" LastEditDate="2021-04-06T09:26:10.837" LastActivityDate="2021-04-06T14:38:17.837" Title="How did games written for tape-based BBC micro, get officially and unofficially ported to disk, bearing in mind extra workspace needed by DFS ROM?" Tags="&lt;floppy-disk&gt;&lt;memory-layout&gt;&lt;cassette-tape&gt;&lt;bbc-micro&gt;&lt;compatibility&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19516" PostTypeId="1" CreationDate="2021-04-06T10:55:39.473" Score="17" ViewCount="3224" Body="&lt;p&gt;When the Zilog Z80 was released, it was marketed as being mostly ISA compatible with Intel 8080, while also providing enhanced features.&lt;/p&gt;&#xA;&lt;p&gt;Likewise, the CPU of the Nintendo Game Boy is a custom architecture designed by Sharp, (believed by the Game Boy homebrew community to be called SM83) which is mostly compatible with Intel 8080, while also providing some enhancements over it.&lt;/p&gt;&#xA;&lt;p&gt;Are there any other examples of non-Intel designed CPU architectures which are similarly enhanced, mostly compatible derivatives of the Intel 8080?&lt;/p&gt;&#xA;&lt;p&gt;My interest is in similar ISAs, as opposed to similar bus layout or timings. To put a threshold, let's say a CPU architecture implementing &amp;gt;90% of the 8080 ISA with binary compatibility. I'm looking to prove or disprove whether there are lesser known 8080 derivatives, other than the well documented cases of Intel's own continuation of the architecture, and the Z80 family of architectures. The goal is to figure out how unique the Sharp SM83xx architecture really was at the time, broadly being a 8080 derivative while also not being a direct descendant of Z80.&lt;/p&gt;&#xA;" OwnerUserId="8280" LastEditorUserId="8280" LastEditDate="2021-04-06T13:33:00.887" LastActivityDate="2021-04-29T18:33:52.703" Title="Are there other examples of CPU architectures mostly compatible with Intel 8080 other than Z80?" Tags="&lt;z80&gt;&lt;8080&gt;" AnswerCount="6" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19517" PostTypeId="2" ParentId="19516" CreationDate="2021-04-06T11:12:37.520" Score="23" Body="&lt;p&gt;Foremost, there are &lt;strong&gt;direct continuations&lt;/strong&gt;, CPU's able to execute 8080 code and (basically) hardware compatible, like the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8085&quot; rel=&quot;nofollow noreferrer&quot;&gt;8085&lt;/a&gt;, Intel's answer to the Z80, as it's mostly software and hardware compatible.&lt;/p&gt;&#xA;&lt;p&gt;Beside Intel's direct extension, there is of course the series of enhancements of Z80 design, from Z800/&lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z280&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z280&lt;/a&gt; all the way to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_eZ80&quot; rel=&quot;nofollow noreferrer&quot;&gt;eZ80&lt;/a&gt;, which in some way can be seen as the pinnacle of (upward compatible) 8080/Z80 continuation.&lt;/p&gt;&#xA;&lt;p&gt;A very special case is the &lt;a href=&quot;https://en.wikipedia.org/wiki/NEC_V20&quot; rel=&quot;nofollow noreferrer&quot;&gt;NEC V20&lt;/a&gt;/30/... series. While basically 1:1 8086 replacements (with some enhancements) they as well include a mode allowing direct execution of 8080 binaries without any emulation.&lt;/p&gt;&#xA;&lt;p&gt;Beyond that, it depends on what kind of compatibility this is about.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Hardware wise&lt;/strong&gt; the whole (early) 8086 world would fit, as its bus system is based on the 8080 design. Adapting a 8088 into an 8080 design is about the same complexity as doing so with a Z80. Then again, early bus systems can be categorized by their bus cycles, as &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/9233/6659&quot;&gt;mentioned here&lt;/a&gt;. Transition between the basic types can be made with just minor hardware adjustment.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Software-wise (ISA)&lt;/strong&gt; it gets a bit more diverse. For example the x86 family was designed with 8085 source code compatibility in mind, meaning that a program source can be &lt;a href=&quot;https://en.wikipedia.org/wiki/Source-to-source_compiler#Translator&quot; rel=&quot;nofollow noreferrer&quot;&gt;translated automatically&lt;/a&gt; from 8080/85 to 8086 with a high rate of success.&lt;/p&gt;&#xA;&lt;p&gt;And last, but not least, there is &lt;strong&gt;software emulation&lt;/strong&gt; for compatibility - that one works on essential every CPU.&lt;/p&gt;&#xA;&lt;p&gt;Pick your favourite modus operandi.&lt;/p&gt;&#xA;&lt;p&gt;Oh, and beware of &lt;strong&gt;false friends&lt;/strong&gt; on your search. Some CPUs may look like x80 on first sight, but are compatible only in spirit. Examples here are Zilog's &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z8&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z8000&quot; rel=&quot;nofollow noreferrer&quot;&gt;Z8000&lt;/a&gt;. Both use assembler mnemonics with a close resemblance to Z80, but for a completely different CPU architecture.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-29T18:33:52.703" LastActivityDate="2021-04-29T18:33:52.703" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19518" PostTypeId="2" ParentId="19516" CreationDate="2021-04-06T12:35:43.363" Score="7" Body="&lt;p&gt;Obviously what's compatible (or an advancement) to the Z80 also has to be compatible to the 8080.&lt;/p&gt;&#xA;&lt;p&gt;That includes the Hitachi HD64180, the Zilog Z180 (which is essentially the same thing), the Toshiba 84013 and 015, and to a limited degree, the Toshiba TMP90 (which is only source-code-compatible to the Z80 but uses different opcodes). Rabbit Semiconductor is yet another company that has/had a wide range of CPUs that could be considered Z80/8080 derivatives - They share register names and look to be largely influenced by the Z80/8080 design.&lt;/p&gt;&#xA;&lt;p&gt;The Sharp PC-1500's CPU, the LH5801 is an interesting one, because it came in disguise - It's officially published instruction set looks a bit like 6800/6500 instructions, but when you dig a bit deeper, it actually uses an extended set of Z80 opcode equivalents.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="10565" LastEditDate="2021-04-07T06:20:41.990" LastActivityDate="2021-04-07T06:20:41.990" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="19519" PostTypeId="2" ParentId="19515" CreationDate="2021-04-06T14:38:17.837" Score="5" Body="&lt;p&gt;Both the DFS and the ADFS did indeed reserve memory for themselves at startup, increasing &lt;code&gt;PAGE&lt;/code&gt;; this memory was used to hold the current catalogue and other bookkeeping.&lt;/p&gt;&#xA;&lt;p&gt;For adapting existing tape software two observations are helpful:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;almost nothing on the BBC was a multiload; and&lt;/li&gt;&#xA;&lt;li&gt;you can turf the [A]DFS out of memory if you don't intend to use it again.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So the task was to find enough space to load the game, disable whichever filing system it had come from, then relocate the game to its proper place.&lt;/p&gt;&#xA;&lt;p&gt;Usually you could achieve that just by loading into the screen area — this needn't be visible as there are a multitude of ways to disable the display temporarily.&lt;/p&gt;&#xA;&lt;p&gt;More elaborately you might load a compressed version of the game and decompress after loading.&lt;/p&gt;&#xA;&lt;p&gt;In principle you could alternatively write a small stub that disabled the filing system and then directly piloted the disk controller; on both disk filing systems files are always stored contiguously so the amount of state required to do a destructive load is negligible, being just the current sector and length remaining.&lt;/p&gt;&#xA;&lt;p&gt;Cracking copy protection is a much larger topic, and substantially more involved, and I'm not sure I could give it a thorough treatment. Luckily it wasn't that common for tape-based games since a twin-deck tape player was essentially impossible to defeat as a copying device.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;PAGE &amp;amp;E00&lt;/code&gt; filing systems also definitely weren't exclusive to the Master; if you had sideways RAM then suitable third-party DFSs were available.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2021-04-06T14:38:17.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19520" PostTypeId="2" ParentId="19516" CreationDate="2021-04-06T15:14:34.263" Score="10" Body="&lt;p&gt;There were of course clones produced in the COMECON countries. Being clones, they would probably not make a good answer, with the exception of:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;КР580ВМ80А was a Soviet clone that has been developed further into:&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.155la3.ru/datafiles/kr580vm1_article.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;КР580ВМ1&lt;/a&gt; with a frequency 5MHz needed just 5V and added some new commands, had support for bank switching and multiprocessor systems&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="476" LastEditorUserId="476" LastEditDate="2021-04-29T18:30:21.297" LastActivityDate="2021-04-29T18:30:21.297" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19521" PostTypeId="2" ParentId="19516" CreationDate="2021-04-06T16:11:06.817" Score="3" Body="&lt;p&gt;Going backwards, the 8080 is &amp;quot;mostly compatible&amp;quot; with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8008&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel 8008&lt;/a&gt;.  They share most of the same registers, and most instructions map between the two.  With some changes (or using a cross-assembler), you can assemble the source code of most 8080 programs for an 8008.&lt;/p&gt;&#xA;&lt;p&gt;There certainly are differences between the two processors.  The 8008 had an internal stack and a 14-bit address space, in an 18-pin package.  The 8080 had stack in memory with a proper stack pointer, and a 16-bit address space, in a 40-pin package.  The 8080 had one additional flag: the auxilliary carry.  Most importantly, the opcodes were different, making the executables incompatible.&lt;/p&gt;&#xA;&lt;p&gt;Computer Terminal Corporation initially contracted Intel to build a microprocessor and gave Intel the desired instruction set.  Intel was not able to deliver on time, so CTC created their own design with discrete TTL parts, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint_2200&quot; rel=&quot;nofollow noreferrer&quot;&gt;Datapoint 2200&lt;/a&gt;.  Intel was allowed to finish their microprocessor, which was the 8008.  The two systems are binary-compatible; therefore, the arguments for the 8008 also hold for the Datapoint 2200.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-04-06T16:11:06.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19523" PostTypeId="2" ParentId="17722" CreationDate="2021-04-06T17:29:29.493" Score="2" Body="&lt;p&gt;NativeWindow - Adobe ActionScript® 3 (AS3)&lt;/p&gt;&#xA;&lt;p&gt;Flash EXE Builder By IncrediTools&lt;/p&gt;&#xA;&lt;p&gt;Adobe Flash Builder&lt;/p&gt;&#xA;&lt;p&gt;SWF2EXE Converter by ApecSoft Inc.&lt;/p&gt;&#xA;&lt;p&gt;VaySoft SWF to EXE Converter Pro&lt;/p&gt;&#xA;&lt;p&gt;A-PDF Flash Package Builder&lt;/p&gt;&#xA;&lt;p&gt;These were the only ones that fits to your description, found on Internet. I'm not sure if you meant them.&lt;/p&gt;&#xA;" OwnerUserId="21290" LastEditorUserId="21290" LastEditDate="2021-04-06T17:39:04.973" LastActivityDate="2021-04-06T17:39:04.973" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19525" PostTypeId="1" CreationDate="2021-04-06T18:17:14.113" Score="7" ViewCount="374" Body="&lt;p&gt;According to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Executable_compression&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia article on the topic&lt;/a&gt;, the earliest executable compressor listed is Realia Spacemaker for IBM PC (&lt;em&gt;since 1982, written by &lt;a href=&quot;https://en.wikipedia.org/wiki/Robert_B._K._Dewar&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robert B. K. Dewar&lt;/a&gt;, SM.COM, signature &amp;quot;MEMORY$&amp;quot;&lt;/em&gt;).&lt;/p&gt;&#xA;&lt;p&gt;One of the pages referred by the wiki entry claims that the distinction of being the first executable compressor &lt;a href=&quot;http://www.os2museum.com/wp/realia-spacemaker/&quot; rel=&quot;nofollow noreferrer&quot;&gt;almost certainly belongs to Realia SpaceMaker&lt;/a&gt;. It could as well be, given that &lt;em&gt;SpaceMaker compresses runs of repeated zero bytes—but only zero bytes&lt;/em&gt; (I cannot think of anything more basic than that), but is that actually true?&lt;/p&gt;&#xA;&lt;p&gt;Was there an earlier executable compressor tool advertised as such on any pre-IBM PC computer?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2021-04-07T16:34:33.887" LastActivityDate="2021-04-07T16:34:33.887" Title="What is the origin of executable compression?" Tags="&lt;compression&gt;&lt;executables&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19526" PostTypeId="2" ParentId="19476" CreationDate="2021-04-06T21:01:11.003" Score="0" Body="&lt;p&gt;One of the design points for the BBC Micro was that it should be usable by the BBC itself as a low-cost broadcast image generator and Teletext editing device.  The BBC, of course, broadcast on the PAL standard.  This probably influenced the choice of resolutions, which use nearly all of the &amp;quot;safely visible&amp;quot; area of a typical TV.&lt;/p&gt;&#xA;&lt;p&gt;The highest resolution the BBC Micro supports is 640x256 (MODE 0), but it only has enough RAM to display that as a 1-bpp image.  The 640 horizontal pixels actually exceed the resolvable resolution of a TV, but this capability gave the machine a good 80-column text mode and a crude form of antialiasing.  For more colours or less RAM usage, 320x256 (MODEs 1 and 4) and 160x256 (MODEs 2 and 5) are also available.&lt;/p&gt;&#xA;&lt;p&gt;All of these are based around the 2MHz CPU cycle, derived from a 16MHz master clock which is also the pixel clock for MODE 0.  The 64µs horizontal scan rate allows for 64 or 128 byte fetches to be interleaved with the CPU cycles, of which 40 or 80 occur during the &amp;quot;active&amp;quot; interval and are translated into 2, 4 or 8 pixels each.  The rest are still fetched by the CRTC and used as a DRAM refresh mechanism, but the conversion to pixels is suppressed during the blanking intervals.&lt;/p&gt;&#xA;&lt;p&gt;PAL is an interleaved format, with up to 288 image lines per field at 50 fields per second.  The BBC Micro simply outputs the same image during both fields of a frame.  With more RAM, it would be feasible to output different images in each field, producing an interlaced image with up to 576 lines, although some of these would disappear off the top and bottom of the screen.  A &lt;strong&gt;640x512&lt;/strong&gt; resolution would be a logical upgrade to fit within the &amp;quot;safe&amp;quot; area.  Due to interlace effects and the limited horizontal resolution, objects should be made at least 2 pixels thick in both directions to be clearly visible without flicker.&lt;/p&gt;&#xA;&lt;p&gt;The full resolution of PAL, including the overscan areas, is generally taken as &lt;strong&gt;720x576&lt;/strong&gt; interlaced; video captures are often based on this.  Using this full overscan size for graphics can be useful for applications where having a hard, visible border is distracting - such as game consoles that want to show a scrolling playfield - as long as any important information is kept in the &amp;quot;safe&amp;quot; central 640x512 area.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2021-04-06T21:01:11.003" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19527" PostTypeId="2" ParentId="16642" CreationDate="2021-04-07T11:21:10.763" Score="0" Body="&lt;p&gt;Today maybe &lt;a href=&quot;https://csdb.dk/release/?id=176131&quot; rel=&quot;nofollow noreferrer&quot;&gt;GoatTracker&lt;/a&gt; and &lt;a href=&quot;https://csdb.dk/release/?id=176130&quot; rel=&quot;nofollow noreferrer&quot;&gt;its stereo release&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7534" LastActivityDate="2021-04-07T11:21:10.763" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19528" PostTypeId="1" CreationDate="2021-04-07T18:31:14.710" Score="4" ViewCount="301" Body="&lt;p&gt;I'm in the middle of making an 8Bit computer, I've selected Z80, the 20Mhz version, which is cheap and readily available. Since Z80 has a 16bit address line it can only address 64KB of memory location. 64KB is not a lot, so I decided to design a memory management unit using an FPGA (I'm not sure what to call this logic unit, for now I can only think of MMU) to expand the memory space.&lt;/p&gt;&#xA;&lt;p&gt;I have connected a 64KB fast SRAM directly to the 16bit Address BUS of Z80, and placed it next to the CPU, It is serving as a cache for Z80 very nicely.&lt;/p&gt;&#xA;&lt;p&gt;When the computer boots up MMU copies content of a 64KB ROM, which has some basic OS, and some goody software I have written in assembly, Z80 happily reads the cache and executes the instructions, which is good, (things are working correctly).&lt;/p&gt;&#xA;&lt;p&gt;I have reserved the last 64 Bytes of the cache as the following diagram:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/F053v.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/F053v.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Which is divided equally intto four parts, in the lower part I put the 64bit address of the memory I want to access, and on top of that there is the 64bit address of the current 64KB copy of the memory in cache, on top of that there are some flags for the MMU which is used to see if Z80 is done with the current contents of 64KB cache, wants to access some other 64KB code+data from memory, wants to read to memory, or write to it, etc.&#xA;The MMU checks these flags and makes the appropriate decision, accesses the requested memory address and fetches the data and puts it into cache.&lt;/p&gt;&#xA;&lt;p&gt;The reason I have chosen a 64Bit addressing is to keep my option open, and keep the possibility for future expansion, also I wanted to be able to address memories larger than 4GB. Like RAM, SSD, Flash Drives, SD cards, HDD, etc.&lt;/p&gt;&#xA;&lt;p&gt;I have programmed the MMU to always listen to 16bit address BUS, so It can make quick decisions, for example, Whenever Z80 wants to access a 64bit address it writes the address into the bottom 64bit of cache, when it accesses $FFFF it means the Z80 is writing the last byte of the 64bit address so MMU knows that it is time to fetch some data from that address in the given memory address, fetches it and copies it into cache. So far everything is working correctly.&lt;/p&gt;&#xA;&lt;p&gt;But I am not entirely sure I have gone the right path, to be I honest I'm not sure where to go from here. The main question that is bugging my mind, are potential bugs that I might introduce, and also performance.&lt;/p&gt;&#xA;&lt;p&gt;There are some problems I haven't come up with a straight forward solution yet.&lt;/p&gt;&#xA;&lt;p&gt;for example what if Z80 wanted to only address some small part of the memory while executing code in the cache space, maybe an array or a variable, What should the MMU do? should it simply copy that data and put it in cache? what if there is some important code or data on the replicated address? should I reserve some memory in the cache for this? Or should MMU simply keep the data in some registers or some perhaps external temporary cache and send it over the data BUS to Z80?&lt;/p&gt;&#xA;&lt;p&gt;What if there is a large data structure or an array in memory that Z80 wants to access?&#xA;What about loops, functions, specially loops that frequently access a different part of the memory?&lt;/p&gt;&#xA;" OwnerUserId="21302" LastEditorUserId="21302" LastEditDate="2021-04-07T20:04:55.337" LastActivityDate="2021-04-08T13:40:09.660" Title="Building a Memory Management Unit to expand the 16Bit Address space" Tags="&lt;memory&gt;&lt;z80&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2021-04-08T14:02:39.880" ContentLicense="CC BY-SA 4.0" />
  <row Id="19529" PostTypeId="2" ParentId="19528" CreationDate="2021-04-08T03:07:40.940" Score="6" Body="&lt;p&gt;&lt;em&gt;[Since not closed by now, I'll try to give it a historic spin]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Hold Your Horses&lt;/h2&gt;&#xA;&lt;p&gt;In some way this is a case of second step before the first, or at least it seems like.&lt;/p&gt;&#xA;&lt;p&gt;Thinking about how to swap segments, do caching or whatsoever is about implementation. There are many ways to do so, not at least shown by various home computers. But I belive this would fall shot of what can and should be done. Before starting to implement a design, it is more useful to think about how to extend the existing (Z80) ISA to handle a larger address space.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;What measures can be used to extend an existing ISA to handle a larger address space?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Im Westen nichts Neues.&lt;/h2&gt;&#xA;&lt;p&gt;This question did come up many times over during CPU evolution. It was asked and solved many times by many teams. It was asked whenever an established architecture was to be extended, or a new one to be created with the intention preserving various levels of compatibility - or to realize effects of compactness by restricted addressing, as we will see.&lt;/p&gt;&#xA;&lt;p&gt;Let's have a look at various examples:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[Picks are somewhat random to show various points, not neccessary first or most important]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2&gt;IBM 360 ff&lt;/h2&gt;&#xA;&lt;h3&gt;360 Model 20&lt;/h3&gt;&#xA;&lt;p&gt;In fact, already with the the very first family of compatible CPUs, IBM's /360 tackled this issue, albeit in a reverse direction. It was intended to replace all the various CPU architectures IBM had developed until the early 1960s. Ranging from electro mechanical punch card based tabulating machine, which still sold (!), to high end scientific computing. Amdahls design was eventually one of the greatest ever made. In turn it asked for a (at the time) complex basic CPU hardware.&lt;/p&gt;&#xA;&lt;p&gt;So while the /360 was the great over all design, IBM needed as well a cheap(er) lower end machine, able  to replace the immense number of unit recording (card tabulating) machinery as well as existing 1401. The original plan was to develop a somewhat extended, cost reduced 1401 follow up. Here &lt;a href=&quot;https://en.wikipedia.org/wiki/Brooks%27s_law&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fred Brooks&lt;/a&gt; stepped in and developed an idea of a cut down /360, featuring only 8 instead of 16 registers and each of them only 16 bit instead of 32. This would cut register hardware by a fourth and further halving all units and wiring and droping floating point at all (*1). The Model 20 was born. And it became the highest selling version of the whole /360 lineup.&lt;/p&gt;&#xA;&lt;p&gt;The instruction set was a binary compatible subset, leaving out all floating point and 32 bit integer instructions. If it wouldn't have been for subroutine jumps, which did get different opcodes, next to all programs could have been exchanged as binary. But since these instructions were functionally equivalent, a set of macros was used to solve this while even keeping address levels the same - and eventually adding emulation for other instructions as well.&lt;/p&gt;&#xA;&lt;p&gt;Some manufacturers of 360 compatible machines who all had similar low end machines simply added the instructions under both opcodes (and added the missing LA), so 'full' 360 programs could run on their model 20 equivalents in binary.&lt;/p&gt;&#xA;&lt;h3&gt;/370: 26 Bit Addressing&lt;/h3&gt;&#xA;&lt;p&gt;While virtual address space was, to keep userland stable, still limited to 24 bit, the supervisor visible hardware started (ca. 1980) to support 26 bit addressing. To satisfy what today would be called 'Big Data' a dual address space feature was added, allowing programs to either have two 24 bit address spaces, or attaching to some global second address space. It was a bit weird and more of a hack than really useful. Though, the OS did use it.&lt;/p&gt;&#xA;&lt;h3&gt;/370-XA: 31 Bit Addressing&lt;/h3&gt;&#xA;&lt;p&gt;The 1983 Extended Architecture introduced 31 bit addressing not only to the OS but application processes as well. After all, an address word has always been 32 Bit ... except, in the era of low memory, and I mean real mow memory, like multi user operation with a few hundret KiB, programmers tend to use the top byte of an address as flag of some sort. Usually to indicate locks. So the solution was to introduce new subroutine branch instructions (BAS/BASR *2), which used the high bit of an address to switch between 24 and 31 bit addressing.&lt;/p&gt;&#xA;&lt;h3&gt;Enterprise Systems Architecture /370&lt;/h3&gt;&#xA;&lt;p&gt;In 1983 no machine was available to fill the 2 GiB (31 bit) address space with real RAM, but already in 1989 another extension was delivered with ESA/370: Address spaces. Each register became a new access register assigned that could hold an address space handle to be used whenever that register was used for addressing. A bit like 80286 segment handles.&lt;/p&gt;&#xA;&lt;p&gt;That's 4 billion of address spaces, each 2 Gib in size. Effectively allowing 63 bit addressing with rather minor changes in programs. Or 55 bit for 24 bit applications :) Well, in reality the hardware 'only' supported 2048 of such address spaces, still, we had a hard time to find usage beside keeping whole databases in (virtual) RAM and let paging do the I/O.&lt;/p&gt;&#xA;&lt;h3&gt;z/Architecture&lt;/h3&gt;&#xA;&lt;p&gt;While the 1990s were mostly wasting time with bloating the instruction set for more and more obscure use (*3,*4) and calling it /390, it wasn't until 2000 that the z architecture brought the next address increment: plain 64 bit addressing while keeping address spaces, essentially providing up to 32 zeta bytes (75 bit) addressing capabilities. On the backside the instruction set was almost doubled. It was no longer (easy= possible to use these expanded memory space without major changes. Programs had to be all around aware of the extensions. (*5)&lt;/p&gt;&#xA;&lt;h2&gt;Zilog Z8000&lt;/h2&gt;&#xA;&lt;p&gt;The Z8000 is eventually the most interesting one. Like several other it's a clean 16 bit CPU with 16 bit registers, but the ability to do 32 and 64 bit operations on register pairs. The basic, non segmented Z8002, supplied a straight 16 bit address bus - plus a set of status signals classifying each access as being about&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Program&lt;/li&gt;&#xA;&lt;li&gt;Data&lt;/li&gt;&#xA;&lt;li&gt;Stack&lt;/li&gt;&#xA;&lt;li&gt;I/O&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;and further&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;User mode&lt;/li&gt;&#xA;&lt;li&gt;Supervisor mode&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With minimal hardware this could be used to access more then 64 KiB.&lt;/p&gt;&#xA;&lt;p&gt;The segmented Z8001 provided in addition a 7 bit segment number, allowing 128 segments. They could be either direct used to create a plain 23 bit address, combined with the status signals to multiply them, or feed into an MMU handling the assignment of any of the 128 (times 6) segments to a memory address of arbitrary size.&lt;/p&gt;&#xA;&lt;p&gt;Within the CPU the program counter was straight 16 bit augmented by a special register holding the segment number of the current code segment, while for data access register pairs had to be used, one holding the 7 bit segment number, the other the 16 bit offset. Almost as if they implemented IBM's access registers 5 years prior :))&lt;/p&gt;&#xA;&lt;h2&gt;WDC 65816&lt;/h2&gt;&#xA;&lt;p&gt;The '16 bit' (*6) enhancement of the 6500 series. It features, much like the Z8000 a Program Bank Register supplying an 8 bit prefix to the 16 bit program counter, generating a 24 bit address. Data access on the other hand was prefixed by an 8 bit Data Bank Register. Together they enabled existing 8 bit code to run in without modification either in a single 64 KiB segment (called Bank), or being split up in 64 KiB code and 64 KiB data. Any modification of these registers, as well as access to memory outside these banks had to be done with new instructions using a 24 bit 'long' address.&lt;/p&gt;&#xA;&lt;p&gt;While providing an upgrade path, any access beyond the data bank way restricted to new instructions and rather slow.&lt;/p&gt;&#xA;&lt;h2&gt;Intel 8086&lt;/h2&gt;&#xA;&lt;p&gt;I guess everyone was waiting for this, so here it comes. The 8086 was intended as a stop gap measure(*7) until the great saviour, the the architecture to replace all others, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_iAPX_432&quot; rel=&quot;nofollow noreferrer&quot;&gt;iAPX 432&lt;/a&gt; was ready (*8). Primary design goal for the 8086 was providing an upward path to existing 8080/85 customers with a need for more memory. 8080/85 were quite successful in embedded applications, many of them hitting the 64 KiB address barrier. Customers were asking for an enhanced CPU. Power wasn't so much of a concern as address space was. Of course the major argument to keep customers at bay would be 8080 compatibility. So the 8086 architecture was build around a plain 16 bit CPU with a 16 bit address space, much liek the 8080, but multiple address spaces this time.&lt;/p&gt;&#xA;&lt;p&gt;Already by designing the ISA to handle two address spaces, one for code, one for data the over all addressing was increased to 128 KiB, delivering much needed relief. Doing so by assigning segment registers, holding a memory handle, to functions not only allowed to manage a second data address space (*9) but also taking stack outside the data address space. The later should prove quite useful with modern languages (*10).&lt;/p&gt;&#xA;&lt;p&gt;The implementation of the segment resolver as an offseted addition is often marked as bad, but in reality it#s simply a fixed function MMU. That way all advantages of segmentation, like the Z8000 had, could be used without increasing the gate count much - or the need for an external chip.&lt;/p&gt;&#xA;&lt;p&gt;On the long run the restriction to a strict 16 bit design did prove quite successful, not at least due its inherent compact code size. x86 code is in most cases more compact than most other CISC and RISC code. This translates direct to performance, as memory access is a bottle neck, used by code and data. Reducing one leaves more for the other (*12).&lt;/p&gt;&#xA;&lt;h2&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;The 8086 as final example does show several important points when thinking about ISA extensions.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Separating memory access by function is eventually the most easy way to expand usable address space without changing an instruction set.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There are five 'natural' function spaces:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Code&lt;/li&gt;&#xA;&lt;li&gt;Data&lt;/li&gt;&#xA;&lt;li&gt;Stack&lt;/li&gt;&#xA;&lt;li&gt;System Management (x86 did only patly encapusle this)&lt;/li&gt;&#xA;&lt;li&gt;I/O (x86 used special I/O instructions as inherited from 8080)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A=B*C (*11) is an essential requirement.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And maybe most of all:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Not the 'nicest', ivory tower solution wins, but one (barely) up for the task will.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Going back to the original question, let me give an example of a similar task I solved (Not strictly historical, but a long time in the making):&lt;/p&gt;&#xA;&lt;h2&gt;What I Did/Would Do&lt;/h2&gt;&#xA;&lt;p&gt;I don't think there is an friend of classic CPUs who hasn't mused about extensions, especially when it comes to addressing. I'm no exception. In fact, this idea already originated in in the early 1980s, when I got hands on a 65SC02 (which still works flawless in my Apple II+), but it didn't come to any implementation until rather recently.&lt;/p&gt;&#xA;&lt;h3&gt;Background&lt;/h3&gt;&#xA;&lt;p&gt;The basic idea is kind of a combination of all the above in form of a CPU extension, modifying a genuine 65C02 in a way to expand memory (and add a few other niceties). The main goals were&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;larger (unlimited) address space&lt;/li&gt;&#xA;&lt;li&gt;low code overhead/performance penalty&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While the first depends on address translation hardware, the later requires a segmented design. Like described above it would be neat to have at least 5 segments in direct access:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Code&lt;/li&gt;&#xA;&lt;li&gt;(Global) data&lt;/li&gt;&#xA;&lt;li&gt;Three additional data segments&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Imagine a memory system much like the Z8000 with it's access function types for Code, Data, Stack and I/O. As shown this can already be used as most basic address extension. When augmented with a set of registers, each holding a segment number per function, resulting address size is only limited by width of these registers.&lt;/p&gt;&#xA;&lt;h3&gt;Implementation Theory&lt;/h3&gt;&#xA;&lt;p&gt;Implementation is rather straight forward. The 65C02 provides a signal (SYNC) activated whenever an instruction is read. This will be used to decode any instruction coming along to see which of the following accesses are about code and data. It helps that there are only 7 different access sequences of code and data within an instruction, and for all except one (JSR) it's a clean sequence of 1..3 bytes of code access followed by 1..3 bytes of data access with only the last being the 'real' data.&lt;/p&gt;&#xA;&lt;p&gt;So when SYNC is signalled, the code segment register is to be outputted. The read opcode will be decoded and a counter started. For the regular 6 regular sequences it will simply count the following instruction bytes (0,1 or 2) while the code segment register is outputted, after that the data segment register is put onto the address lines.&lt;/p&gt;&#xA;&lt;p&gt;So far easy and we're already extended the address range to 2 x 64 KiB. Of course without any chance to access code space as data, but stay with me.&lt;/p&gt;&#xA;&lt;p&gt;The 65C02 has a nice feature, all unassigned opcodes are NOPs of various size and length. The whole $x3 column is, for example, filled with single byte single cycle NOPs. Exactly what we need to form prefixes to instruct our decoder to use different/additional segments for data access. Lets say we use $E3 as prefix to tell that the following instructions should not use the data segment register for it's data access, but the code segment register.&lt;/p&gt;&#xA;&lt;p&gt;When a $E3 comes along at SYNC, the CPU will simply read and ignore it and fetch the next byte. The MMU in turn will set a flip flop that the next data access will be prefixed by the code segment instead. Voila, it's now not only possible to load constants from program code, but as well load the program itself by writing with a $E3 prefix.&lt;/p&gt;&#xA;&lt;p&gt;The very same can now be done for the three additional data segments A, B and C - neatly encoded as $A3, $B3 and $C3.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;[Of course there are a few more details for handling pointer access (to be in default data) or inter segment jumps/subroutine calls and returns and alike, but solutions are as well straight foreward, so we can leave it out for now]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now we just need to find a way to tell the MMU which values to be used, aka loading the segment registers. We can not put it into any of the movable segments, as this would mean it could be unaccessible at times. But hey, why not borrowing the idea of an I/O space? Like using a $EF prefix to point to a single unmovable 64 KiB I/O segment. The MMU would signal any I/O access on a seperate line, and, for its registers react to an address within.&lt;/p&gt;&#xA;&lt;p&gt;Let's say we put the segment registers at $010A..E. So a sequence of $EF followed by an STA $010D would set the default data segment to whatever value was written.  In fact, since we're not restricted to I/O instructions, like a Z80, all memory instructions can be used, including Read-Modify-Write like INC and DEC, making these location essentially the upper byte of 24 bit pointers when using indirect addressing. The system can easy be expanded to a virtual memory system with several address spaces and so on.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Take that 65816, offering the same (or better) functionality at the same (or better) performance with only six additional opcodes spent.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Practical Implementation&lt;/h3&gt;&#xA;&lt;p&gt;Well, as said, it took me a while (~30+ years) until I got myself to do it, and so far it's only a proof of concept, not going all the way in all beauty, just showing the basic workings. Without the segment register everything fitted in a single PAL (ok, it's an ATF750, so rather luxurious), so quite doable with 1980s technology with a low price tag.&lt;/p&gt;&#xA;&lt;p&gt;I didn't move any further from there, as additional ideas (like super visor modes, better trap handling, etc) would need more complex hardware to be implemented external to the CPU, or mean usign an FPGA to hold an expanded CPU. Bah. I do not like them.&lt;/p&gt;&#xA;&lt;h3&gt;What Does This Mean to Above Z80 System?&lt;/h3&gt;&#xA;&lt;p&gt;Handling all random access as complex 4 byte (64 bit) maniputaion may make a 20 MHz Z80 slower than a ZX81. So before thinking about implementation ataking  step back and thinking about ISA and usage would be a good idea. And while the above 6502 based solution might be as well doable (using MM1 instead of SYNC), the Z80 opcode space is less open, so extensions may need additional thoughts.&lt;/p&gt;&#xA;&lt;p&gt;In any case, a look at the eZ80 might as well be helpful (I may add it to thist later on).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Not to mention the vast saving by further dropping an independent operating channel system (For micro people, that's essentially a second CPU specialized on DMA)&lt;/p&gt;&#xA;&lt;p&gt;*2 - Funny part, these were exactly the mnemonics (albeit not the opcodes) used for the model 20, so people still maintaining code for them in 1983 had to modify their macros to directly output the binary opcode instead of replacing the mnemonic. Been there, done that :))&lt;/p&gt;&#xA;&lt;p&gt;*3 - Prior to 1990 the /370 instruction was rather straight forward, like envisioned by Amdahl, making the usual label of 'CISC' rather ambiguous. But the /390 (and following z/A) really changed that by adding extreme specific operations - like Unicode string handling or adding SHA-1, DEA or compression as machine instructions. Not funny anymore&lt;/p&gt;&#xA;&lt;p&gt;*4 - Beside adding a lot of additional floating point functions relative branches and 16 bit immediate were added. The first extensions breaking the clean /360 structure. For many I assume the reason was to make it more convenient to 'modern' (read stupid) compilers.&lt;/p&gt;&#xA;&lt;p&gt;*5 - I always like to think that AMD had a look at IBM when they did x86-64 a few years later.&lt;/p&gt;&#xA;&lt;p&gt;*6 - I know that's debatable, but I will stay away from that honeypot.&lt;/p&gt;&#xA;&lt;p&gt;*7 - In some kind the same way as the 8085 was a reaction to the Z80 with it's much simpler interface and single 5V power requirement.&lt;/p&gt;&#xA;&lt;p&gt;*8 - Yeah, we all know history is a bitch :)&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;9 - Later augmented with two more to allow arbitrary A=B&lt;/em&gt;C (*11) operation.&lt;/p&gt;&#xA;&lt;p&gt;*10 - Like the whole 8086 was designed with a keen eye on what compilers would like to see as instructions.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;11 - A=B&lt;/em&gt;C means operating on three elements at the same time, like adding two numbers and storing at a third location,  without (or only minimal) address space management inbetween.&lt;/p&gt;&#xA;&lt;p&gt;*12 - With the Thumb instruction set ARM did go that way to keep the CPU simple while increasing performance - that was before they joined the mob in throwing hardware onto the issue, much like x86 does.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-08T13:40:09.660" LastActivityDate="2021-04-08T13:40:09.660" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="19530" PostTypeId="2" ParentId="15004" CreationDate="2021-04-08T06:30:40.770" Score="1" Body="&lt;p&gt;The assumption in the question is incorrect.  The common wisdom about C being a bad choice for the 6502, is wrong.&lt;/p&gt;&#xA;&lt;p&gt;The choice of source language, does not gate the quality of generated code for the 6502.&lt;/p&gt;&#xA;&lt;p&gt;In fact, code quality on the 6502 (or any other platform for that matter) is gated by the quality of lowering intermediate-representation code to MOS instructions.&lt;/p&gt;&#xA;&lt;p&gt;Any 6502 codegen must take into account the 6502's architecture quirks: there are few real registers, but there's also a bunch of zero page memory.&lt;/p&gt;&#xA;&lt;p&gt;High-quality C codegen on the 6502 is possible, but it's not quick to implement. It cannot be done with a toy or a hobbyist compiler, in particular.&lt;/p&gt;&#xA;" OwnerUserId="21309" LastActivityDate="2021-04-08T06:30:40.770" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19531" PostTypeId="1" AcceptedAnswerId="19534" CreationDate="2021-04-08T07:09:23.123" Score="8" ViewCount="842" Body="&lt;p&gt;The CDC 1604, released in 1960, was Seymour Cray's first supercomputer, and also one of the first computers made of transistors. (The IBM 7090 was released only the previous year.)&lt;/p&gt;&#xA;&lt;p&gt;How many transistors went into the CDC 1604?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-04-08T11:08:19.140" Title="How many transistors in the CDC 1604?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;mainframe&gt;&lt;cdc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19532" PostTypeId="2" ParentId="19512" CreationDate="2021-04-08T07:34:43.297" Score="6" Body="&lt;p&gt;The question doesn’t really describe the circumstances in enough detail to confidently tell what is actually going on. Despite this, there are still a number of things that can be tried to remedy the problem. Climbing the ladder of abstraction, they are as follows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check the BIOS.&lt;/strong&gt; In many BIOSes there is a setting in which the user can specify what kinds of floppy drives are attached to the system. It is next to impossible to give general advice about how to &lt;em&gt;find&lt;/em&gt; the relevant setting in the setup program, since it varies depending on the BIOS vendor. However, it should be at least relatively easy to diagnose whether this is in fact the problem.&lt;/p&gt;&#xA;&lt;p&gt;Boot your system into ‘Command prompt only’ mode (press &lt;kbd&gt;F8&lt;/kbd&gt; during boot and choose that option from the menu). Then launch &lt;code&gt;debug&lt;/code&gt;. At the &lt;code&gt;-&lt;/code&gt; prompt you will get, run these commands:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;o 70 10&#xA;i 71&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This reads off the floppy setting &lt;a href=&quot;https://fd.lod.bz/rbil/cmos/other/r10.html#sect-10077&quot; rel=&quot;nofollow noreferrer&quot;&gt;directly from the RTC NVRAM&lt;/a&gt;. On a correctly configured system with a single 1440 KiB drive, this should output &lt;code&gt;40&lt;/code&gt; (&lt;code&gt;30&lt;/code&gt; for a 720 KiB drive, &lt;code&gt;50&lt;/code&gt; for a 2880 KiB drive). The value &lt;code&gt;00&lt;/code&gt; indicates no floppy drives. To quit the &lt;code&gt;debug&lt;/code&gt; session, use the command &lt;code&gt;q&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You &lt;em&gt;may&lt;/em&gt; attempt to overwrite the BIOS setting yourself from the &lt;code&gt;debug&lt;/code&gt; prompt:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;o 70 10&#xA;o 71 40&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will, however, only take effect after a reboot, and that’s if the BIOS does not clear all settings because of a checksum mismatch. For this reason, using the BIOS’s built-in setup program is preferable.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check the drive type detected by DOS.&lt;/strong&gt; When even DOS drivers have trouble accessing the disk, it may help to override DOS’s own drive type detection. To check whether DOS detects the drive type correctly, again, open a &lt;code&gt;debug&lt;/code&gt; session and run this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;a 100&#xA;mov ax,440d&#xA;mov bl,1       ; ← drive letter number&#xA;mov cx,860&#xA;mov dx,1000&#xA;int 21&#xA;&#xA;f 1000 100f 00&#xA;g 10d&#xA;d 1000 100f&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The blank line is important. The value assigned to the BL register is the ordinal number of the drive letter (1=A, 2=B, 3=C, etc). After running the above, you will obtain a dump like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;11D0:1000  00 09 00 00 50 00 00 00-02 02 01 00 02 F0 00 80   ....P...........&#xA;              ↑↑&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The second byte in the dump corresponds to the &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/dos_kernel/21440d.html#table-01561&quot; rel=&quot;nofollow noreferrer&quot;&gt;floppy drive type detected by DOS&lt;/a&gt;; for a 1440 KiB drive it should be &lt;code&gt;07&lt;/code&gt;; here, &lt;code&gt;09&lt;/code&gt; denotes a 2880 KiB drive. If this value is incorrect, you can try overriding the DOS-detected drive type with a &lt;code&gt;DRIVPARM=&lt;/code&gt; directive in &lt;code&gt;CONFIG.SYS&lt;/code&gt;. The use of the directive is described in Microsoft Knowledge Base article &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/096/Q96769/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Q96769&lt;/a&gt; (the &lt;code&gt;DRIVER.SYS&lt;/code&gt; part is not applicable to Windows). You will notice the &lt;code&gt;/D:&lt;/code&gt; option takes the drive letter number shifted by 1, while &lt;code&gt;/F:&lt;/code&gt; option takes the same kind of drive type number that is returned above.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;DRIVPARM=&lt;/code&gt; directive will have no effect on native Windows drivers, so you will have to enable the real-mode mapper as per the next point if you want this setting to influence Windows.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check Windows drivers.&lt;/strong&gt; When native storage device drivers are not available, Windows will fall back to using the real-mode mapper for the drive – which is to say, it will delegate disk accesses to DOS and BIOS interrupt handlers. The real-mode mapper is slower than native drivers, but since you mentioned that floppy access from DOS works fine, this may be a valid strategy.&lt;/p&gt;&#xA;&lt;p&gt;Open the Device Manager, select the floppy drive and/or floppy controller and then either remove the driver entirely or open properties and tick the ‘Disable in this hardware profile’ checkbox. If you ever decide to bring the driver back, you can untick the checkbox or re-install the driver with the ‘Add New Hardware’ wizard.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-04-11T15:52:43.680" LastActivityDate="2021-04-11T15:52:43.680" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19533" PostTypeId="2" ParentId="19516" CreationDate="2021-04-08T10:31:22.367" Score="3" Body="&lt;p&gt;If &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_8008&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel 8008&lt;/a&gt; qualifies as answer one can add the Texas Instrument TMS-1795 which was TI's take at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint_2200&quot; rel=&quot;nofollow noreferrer&quot;&gt;Datapoint 2200&lt;/a&gt; microprocessor. It even came out before Intel's 8008 as explained by &lt;a href=&quot;http://www.righto.com/2015/05/the-texas-instruments-tmx-1795-first.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ken Shirriff&lt;/a&gt; .&lt;/p&gt;&#xA;" OwnerUserId="7095" LastActivityDate="2021-04-08T10:31:22.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19534" PostTypeId="2" ParentId="19531" CreationDate="2021-04-08T11:08:19.140" Score="15" Body="&lt;p&gt;The information to answer the question &amp;quot;exactly&amp;quot; is available on the internet, but I'm not going to do the arithmetic for you!&lt;/p&gt;&#xA;&lt;p&gt;The Maintenance Manual (&lt;a href=&quot;http://bitsavers.org/pdf/cdc/1604/033a_1604_Computer_Vol_3_Maintenance_Dec60.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://bitsavers.org/pdf/cdc/1604/033a_1604_Computer_Vol_3_Maintenance_Dec60.pdf&lt;/a&gt;) Appendix B gives the schematic of each printed circuit card, so you can count the number of transistors on each.&lt;/p&gt;&#xA;&lt;p&gt;The last page of the Customer Engineering Instruction Manual (&lt;a href=&quot;http://bitsavers.org/pdf/cdc/1604/60118700A_CDC_1604A_Customer_Engineering_Instruction_Manual_Sep1966.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://bitsavers.org/pdf/cdc/1604/60118700A_CDC_1604A_Customer_Engineering_Instruction_Manual_Sep1966.pdf&lt;/a&gt;) gives the number of each type of card in the complete computer.&lt;/p&gt;&#xA;&lt;p&gt;My &amp;quot;quick eyeball&amp;quot; estimate would be about 6,000 printed circuit cards with a total of 25,000 transistors.&lt;/p&gt;&#xA;&lt;p&gt;That is comparable with this Wikipedia page &lt;a href=&quot;https://en.wikipedia.org/wiki/Transistor_count#Transistor_computers&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Transistor_count#Transistor_computers&lt;/a&gt; which gives 30,000 transistors + 22,000 diodes for the IBM 7070, and 50,000 transistors for the IBM 7090.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastActivityDate="2021-04-08T11:08:19.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19536" PostTypeId="1" AcceptedAnswerId="19537" CreationDate="2021-04-09T13:27:53.087" Score="2" ViewCount="243" Body="&lt;p&gt;Trying to access one byte in memory using segment/offset, like this&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;union REGS in, out;&#xA;struct SEGS segs;&#xA;int v;&#xA;char _far* p;&#xA;...&#xA;int86x(...,&amp;amp;in,&amp;amp;out,&amp;amp;segs);&#xA;p = (segs.es &amp;lt;&amp;lt; 16) + out.x.bx + 4;&#xA;v = (int)*p;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and get &amp;quot;warning C4047: different levels of indirection&amp;quot; (and the value of &lt;code&gt;v&lt;/code&gt; does not seem to be correct).&lt;/p&gt;&#xA;&lt;p&gt;What am I doing wrong?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;More info&lt;/strong&gt;: at location &lt;code&gt;p&lt;/code&gt; there is an eight byte struct, and I want the fifth byte only.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="7265" LastEditDate="2021-04-09T13:44:07.200" LastActivityDate="2021-04-09T13:58:16.050" Title="Microsoft C 6, far pointer, cast to int, warning C4047" Tags="&lt;ms-dos&gt;&lt;c&gt;&lt;16-bit&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19537" PostTypeId="2" ParentId="19536" CreationDate="2021-04-09T13:58:16.050" Score="6" Body="&lt;p&gt;Compilers targeting DOS typically provide macros to manipulate the segment and offset of far pointers. &lt;code&gt;FP_SEG(pointer)&lt;/code&gt; provides access to the segment portion, &lt;code&gt;FP_OFF(pointer)&lt;/code&gt; to the offset. It's also possible that there's a &lt;code&gt;MK_FP(segment, offset)&lt;/code&gt; or &lt;code&gt;FP_CONSTRUCT(segment, offset)&lt;/code&gt; macro to combine segment and offset into a pointer.&lt;/p&gt;&#xA;&lt;p&gt;This &lt;a href=&quot;https://groups.google.com/g/comp.os.msdos.programmer/c/zUC_3ZLs_Hs&quot; rel=&quot;noreferrer&quot;&gt;discussion&lt;/a&gt; in comp.os.msdos.programmer suggests that for Microsoft C, a solution would be to assign using &lt;code&gt;FP_SEG&lt;/code&gt; and &lt;code&gt;FP_OFF&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FP_SEG(pointer) = segment;&#xA;FP_OFF(pointer) = offset;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Further down there is a possible definition of &lt;code&gt;MK_FP&lt;/code&gt;, in case Microsoft C doesn't provide it:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#if !defined(MK_FP)&#xA;#define MK_FP(seg,ofs) ((void far *)(((unsigned long)(seg) &amp;lt;&amp;lt; 16) | (ofs)))&#xA;#endif&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This would then allow you to use&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;pointer = MK_FP(segment, offset);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2021-04-09T13:58:16.050" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19538" PostTypeId="2" ParentId="19516" CreationDate="2021-04-09T17:19:11.003" Score="0" Body="&lt;p&gt;Missing so far is the roughly Z80-compatible NSC800, from National Semiconductor. (I forget the details but I see a &lt;a href=&quot;https://www.cpu-world.com/CPUs/NSC800/National%20Semiconductor-NSC800D%20-%20NSC800D-3.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;CPU World&lt;/a&gt; comment tah it's a &amp;quot;Z80 in 8085 clothing&amp;quot;).&lt;/p&gt;&#xA;&lt;p&gt;Its USP was its CMOS construction and much lower power consumption than any of its rivals (until the Hitachi 64180 came along several years later)&lt;/p&gt;&#xA;" OwnerUserId="6700" LastActivityDate="2021-04-09T17:19:11.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19539" PostTypeId="1" CreationDate="2021-04-09T18:49:45.443" Score="11" ViewCount="437" Body="&lt;p&gt;For no particular reason I started reading up on the original &lt;a href=&quot;https://en.wikipedia.org/wiki/Ad_Lib,_Inc.&quot; rel=&quot;nofollow noreferrer&quot;&gt;AdLib Music Card&lt;/a&gt;, and it's clear that this card was little more than a stock &lt;a href=&quot;https://en.wikipedia.org/wiki/Yamaha_YM3812&quot; rel=&quot;nofollow noreferrer&quot;&gt;Yamaha YM3812 music chip&lt;/a&gt; (aka OPL2) glued to a PC's 8-bit ISA bus slot.  One thing that stood out was that the AdLib/YM3812 chip has two general purpose timers, one with a 80 µs and the other with a 320 µs resolution. However, neither the &lt;a href=&quot;https://pdf1.alldatasheet.com/datasheet-pdf/view/84281/YAMAHA/YM3812.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;data sheet&lt;/a&gt; nor any documentation I could find mentioned any proposed or intended uses for these timers.&lt;/p&gt;&#xA;&lt;p&gt;A few theories:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It was included by Yamaha to support features in their digital keyboard lines such as clocking accompaniment rhythms or possibly additional downstream audio processing.  In other words, it was wired in by AdLib just because, but with no intended use cases.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It was used by music players or games to provide clocking for music playback (similar to generating MIDI ticks) rather than relying on beam counting or some other method for keeping musical time.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It was used to provide further modulation of FM generated sounds in software.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;What is interesting is that, even though the AdLib card was built with the glue logic, traces, and pin holes to wire the YM3812 timer IRQ line to a PC bus hardware IRQ line, pin headers were apparently never installed and these lines were never connected, thus AdLib was not actually capable of generating hardware interrupts.&lt;/p&gt;&#xA;&lt;p&gt;Another curious finding was that, according to some &lt;a href=&quot;http://shipbrook.net/jeff/sb.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;online documentation&lt;/a&gt;, the AdLib &amp;quot;will signal a TIMER interrupt (INT 08)&amp;quot; when the time expires.  However, with the IRQ line of the YM3812 &lt;a href=&quot;http://docs.google.com/viewer?a=v&amp;amp;pid=sites&amp;amp;srcid=bWFsaW5vdi5jb218d3d3fGd4OjEwNDEwYzVhYWRkMjAwZDM&quot; rel=&quot;nofollow noreferrer&quot;&gt;not connected to anything&lt;/a&gt;, I'm not understanding how this is possible. It seems that lacking a way for the card to signal the CPU that its timer has expired would somewhat limit its usefulness.&lt;/p&gt;&#xA;&lt;p&gt;I'm curious if there were any well-known or common uses for the AdLib's timer.  If so, I'd be very curious what historically significant programs, titles, or other out-in-the-open historical source made use of it.&lt;/p&gt;&#xA;" OwnerUserId="21323" LastEditorUserId="148" LastEditDate="2021-04-11T06:17:04.557" LastActivityDate="2021-04-11T06:17:04.557" Title="AdLib, YM3812 and Timers" Tags="&lt;ibm-pc&gt;&lt;sound&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19540" PostTypeId="2" ParentId="19539" CreationDate="2021-04-09T19:39:37.217" Score="5" Body="&lt;p&gt;The Yamaha Applications Manual (not the Data Sheet) describes how to use the timers and IRQ output.&lt;/p&gt;&#xA;&lt;p&gt;See &lt;a href=&quot;https://usermanual.wiki/Document/Yamaha20YM381220Application20Manual.26216546/html&quot; rel=&quot;noreferrer&quot;&gt;https://usermanual.wiki/Document/Yamaha20YM381220Application20Manual.26216546/html&lt;/a&gt; Sections 3.1.2 and 3.5.&lt;/p&gt;&#xA;&lt;p&gt;Even if the chip signal pins were not connected, one use for the timers was to check if the computer had the chip installed.&lt;/p&gt;&#xA;&lt;p&gt;This Programming Guide for the Adlib card  &lt;a href=&quot;http://www.vgmpf.com/Wiki/images/4/48/AdLib_-_Programming_Guide.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.vgmpf.com/Wiki/images/4/48/AdLib_-_Programming_Guide.pdf&lt;/a&gt; gives a procedure on page (6) which sets the timers and then reads the timer registers back. This will obviously not give the expected result if there is no sound card present.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2021-04-09T19:52:19.660" LastActivityDate="2021-04-09T19:52:19.660" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19541" PostTypeId="2" ParentId="19539" CreationDate="2021-04-09T19:45:51.140" Score="11" Body="&lt;p&gt;They are just timers that can be used for any purpose anyone can think of for keeping track of time in a system. Just like any other timer.&lt;/p&gt;&#xA;&lt;p&gt;The timers can be set to elapse after a certain period of counts, and the status of both timers being elapsed or not can be read from the OPL chip status register.&lt;/p&gt;&#xA;&lt;p&gt;In addition to just reading the status, the timers can signal that they elapsed by triggering the interrupt output pin to go active, and this can be used to trigger an interrupt on a CPU.&lt;/p&gt;&#xA;&lt;p&gt;It may not have much use in a PC, as there is already a 8253 or 8254 timer. And no sound card has actually connected the OPL chip interrupt output to CPU. There is a unused jumper block on the AdLib card to connect the interrupt to ISA bus signal, but it is not mounted.&lt;/p&gt;&#xA;&lt;p&gt;Usually sound drivers use the timers for detecting if an OPL chip is present or not. One unused feature of the AdLib card is that it has another unused jumper block, which was originally intended to use for selecting four different base addresses for the card. It was simply hardwired to one address only. Then it would be necessary to detect which address the card is set to, so that is why the detection routine exists in the drivers and manuals.&lt;/p&gt;&#xA;&lt;p&gt;I recall that some closely related OPL chip, but not necessarily the OPL-2, uses one of the timers to trigger the start of multiple operators synchronously in the rarely used Composite Synthesis Mode.&lt;/p&gt;&#xA;&lt;p&gt;As a curiosity, the timers and the status register were cloned into Gravis Ultrasound. They were not accessed at the standard AdLib base address 388h, but at the address 228h, which is the alias port of 388h where a Sound Blaster card will have the OPL chip. By using the chip detection technique, it should be possible to detect a Sound Blaster Pro with dual OPL chips, if an OPL is found at both 228h and at 22Ah.&lt;/p&gt;&#xA;&lt;p&gt;The mention about the card being able to trigger a timer interrupt (IRQ0 is INT8) is false information, it can be a reasonable misunderstanding on the author's part. It is not possible for a stock unmodified AdLib card to generate any interrupts.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-04-09T20:11:42.527" LastActivityDate="2021-04-09T20:11:42.527" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19542" PostTypeId="2" ParentId="19495" CreationDate="2021-04-09T20:58:00.383" Score="2" Body="&lt;p&gt;Here is an example of what the modern preprocessing Tommy is alluding to actually sounds like: &lt;a href=&quot;https://sphere.chronosempire.org.uk/%7EHEx/er1.ssd&quot; rel=&quot;nofollow noreferrer&quot;&gt;er1.ssd&lt;/a&gt;&#xA;&lt;a href=&quot;https://sphere.chronosempire.org.uk/%7EHEx/er2.ssd&quot; rel=&quot;nofollow noreferrer&quot;&gt;er2.ssd&lt;/a&gt;&#xA;&lt;a href=&quot;https://sphere.chronosempire.org.uk/%7EHEx/er3.ssd&quot; rel=&quot;nofollow noreferrer&quot;&gt;er3.ssd&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is encoded using &lt;a href=&quot;https://github.com/maxim-zhao/pcmenc&quot; rel=&quot;nofollow noreferrer&quot;&gt;pcmenc&lt;/a&gt;, storing 4-bit volumes for each of the three tone channels in turn, evenly spaced at 35294Hz, so this is 12-bit sampling at 11.7kHz or 4-bit sampling at 35.3kHz depending on how you want to look at it.  At an effective data rate of ~17K/sec, 92K of sample data gets you just over five seconds of audio (yes this is BBC Master only).  I imagine this could usefully be compressed but right now I got nuthin'.&lt;/p&gt;&#xA;&lt;p&gt;The tone channels are set to the highest possible frequency of 125kHz so that&#xA;their volume prior to attenuation is effectively constant after subsequent lowpassing (albeit at only half the maximum volume; this is another reason you really want to use all the channels).  This is not &lt;em&gt;quite&lt;/em&gt; the same as saying that writing a period of 1 produces constant DC output (and while we're on the topic, writing a period of &lt;em&gt;zero&lt;/em&gt; wraps around to 1024, a common source of emulator bugs).&lt;/p&gt;&#xA;&lt;p&gt;Here's the &lt;a href=&quot;https://sphere.chronosempire.org.uk/%7EHEx/play.er.s&quot; rel=&quot;nofollow noreferrer&quot;&gt;source for the player&lt;/a&gt; but there's very little to it: set all the tone channels to maximum frequency, set up a free-running timer, busy-wait until it goes off, dump a byte out to the sound chip, increment your pointer and repeat until you run out of data.&lt;/p&gt;&#xA;&lt;p&gt;The only real differences between this and David Hoskins' code are the use of a timer rather than cycle counting[1], and storing separate volumes per channel rather than repeating the same data across all three of them.&lt;/p&gt;&#xA;&lt;p&gt;A couple of things that make this kind of routine extra-annoying on the Beeb are that the SN76489 latches data on the falling edge of ~WE, so you can't just hold ~WE low but have to manually lower and raise it for every byte you send, and the READY pin is not hooked up to anything so you can't measure how long your particular sound chip actually takes to latch but have to be pessimistic (&lt;a href=&quot;https://sphere.chronosempire.org.uk/%7EHEx/76489.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet&lt;/a&gt; suggests 32 cycles or 8µs at 4MHz).&lt;/p&gt;&#xA;&lt;p&gt;Let's not forget that the slow data bus is also used by other devices.  While you can simply set DDRA every time in your &amp;quot;write byte to sound chip&amp;quot; function, as both David Hoskins' code and the similar routine in the OS (&lt;a href=&quot;https://tobylobster.github.io/mos/mos/S-s16.html#SP3&quot; rel=&quot;nofollow noreferrer&quot;&gt;$EB21 in OS 1.20&lt;/a&gt;) do, this is inefficient if you're in a tight loop with interrupts off.  It's also worth trying to perform whatever computation you can in the 8µs=16 CPU cycles you have to hold ~WE low, not forgetting that 8µs is just a &lt;em&gt;minimum&lt;/em&gt; and the precise timing is unimportant (&lt;a href=&quot;https://github.com/hexwab/vgm-player-bbc/blob/master/lib/vgmplayer.asm#L363&quot; rel=&quot;nofollow noreferrer&quot;&gt;non-sample player example&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;The use of a timer suggests an interrupt-based routine rather than busy-waiting but because the latency between an interrupt firing and actually getting control via IRQ1V is around 30 cycles again this is annoyingly hard on the Beeb.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://sphere.chronosempire.org.uk/%7EHEx/revo2.ssd&quot; rel=&quot;nofollow noreferrer&quot;&gt;But not quite impossible.&lt;/a&gt;&#xA;(&lt;a href=&quot;https://github.com/hexwab/revo&quot; rel=&quot;nofollow noreferrer&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Running the included benchmark program shows that it uses about 50% CPU time, and that is only possible because this particular sample, being heavily filtered, has gaps where we don't have to play (or store) anything and can thus return control to the OS briefly.&lt;/p&gt;&#xA;&lt;p&gt;Sadly this did not make it into &lt;a href=&quot;https://bitshifters.github.io/posts/prods/bs-beeb-niccc.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;BEEB-NICCC&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;[1] Except that it turns out that 35kHz is high enough for a timer to be ineffective so I ended up counting cycles anyway.  But you can still change the timer value at ?&amp;amp;E1C and eventually you can make it slow enough to make a difference.&lt;/p&gt;&#xA;" OwnerUserId="10207" LastActivityDate="2021-04-09T20:58:00.383" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19543" PostTypeId="1" AcceptedAnswerId="19544" CreationDate="2021-04-10T15:12:00.523" Score="13" ViewCount="1042" Body="&lt;p&gt;Currently messing with 6502 assembly on a C64, and I don't understand why the &lt;code&gt;JSR&lt;/code&gt; instruction is so weird.&lt;/p&gt;&#xA;&lt;p&gt;According to the instruction table, &lt;code&gt;JSR&lt;/code&gt; is a 3-byte instruction and only operates in absolute mode. However, &lt;code&gt;JSR&lt;/code&gt; only increments the PC by 2 before pushing it on the stack. Which means the return address points to the last byte of the &lt;code&gt;JSR&lt;/code&gt; instruction. It seems the &lt;code&gt;RTS&lt;/code&gt; pops the value from the stack and increments it again before setting the PC to the corrected value.&lt;/p&gt;&#xA;&lt;p&gt;My question is: Why? Why not just let &lt;code&gt;JSR&lt;/code&gt; increment the PC by 3 instead of 2, and let &lt;code&gt;RTS&lt;/code&gt; just pop and jump? This looks like a far more logical approach. Any reason for making this so complicated?&lt;/p&gt;&#xA;" OwnerUserId="11021" LastEditorUserId="15334" LastEditDate="2021-04-10T16:01:48.923" LastActivityDate="2021-04-11T20:03:19.003" Title="Why does the 6502 JSR instruction only increment the return address by 2 bytes?" Tags="&lt;6502&gt;&lt;design-choices&gt;" AnswerCount="2" CommentCount="14" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19544" PostTypeId="2" ParentId="19543" CreationDate="2021-04-10T16:21:22.690" Score="20" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why does the 6502 JSR instruction only increment the return address by 2 bytes?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Simply because the PC is already pushed before the second address byte is read. That way the CPU does need only to buffer the lower target address byte and read later on the higher one direct into the PC.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The workings are described in great detail in the original 1976 &lt;em&gt;MCS 6500 Family Programming Manual&lt;/em&gt; (*1) in section &lt;em&gt;8.1 JSR - Jump to Subroutine&lt;/em&gt; on &lt;a href=&quot;https://archive.org/details/6500-50a_mcs6500pgmmanjan76/page/n119/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;p.106..109&lt;/a&gt;. Same for how RTS resolves this in &lt;em&gt;8.2 RTS - Return from Subroutine&lt;/em&gt; (&lt;a href=&quot;https://archive.org/details/6500-50a_mcs6500pgmmanjan76/page/n121/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;p.109..112&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;The six clock cycles of a JSR are essentially:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Read Opcode ($20); Increment PC&lt;/li&gt;&#xA;&lt;li&gt;Read ADL; Increment PC&lt;/li&gt;&#xA;&lt;li&gt;Buffer ADL&lt;/li&gt;&#xA;&lt;li&gt;Push PCH; Decrement S&lt;/li&gt;&#xA;&lt;li&gt;Push PCL; Decrement S;&lt;/li&gt;&#xA;&lt;li&gt;Read ADH;&lt;/li&gt;&#xA;&lt;li&gt;Load PC with ADH/ADL; Fetch next OP with new PC&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Step 3 is BTW another result from making the 6502 as small as possible&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It seems the RTS pops the value from the stack and increments it again before setting the PC to the corrected value.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, it does so during the last cycle of an RTS. In fact, in doing so rereads the last byte of the JSR instruction again (and discards it).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My question is: Why?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Main reason is to save circuitry. The way it operates it avoids the need to buffer the upper address byte. Otherwise it would have needed a whole additional 8 bit register to hold that value. The 6502 has only 16 registers total. Adding one more would be a considerable cost.&lt;/p&gt;&#xA;&lt;p&gt;It's worth to keep in mind that the main success criteria for the 6502 wasn't it's inherent beauty or the friendly smile of its developers. It was geing &lt;strong&gt;dirt cheap&lt;/strong&gt;. Not just a few percent, but up to ten times lower than its competition. Woz did select it exactly for that reason for the Apple II and so did Atari and others - including why Commodore bought MOS, it's well known how cost sensible Tramiel was ;)&lt;/p&gt;&#xA;&lt;p&gt;Having to add a whole register just for a single function is in that context a nogo, if there's as well a way to do it in microcode.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why not just let JSR increment the PC by 3 instead of 2, and let RTS just pop and jump?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It has to be incremented anyway, so no real gain here.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This looks like a far more logical approach.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In what logic? Maybe in CS class ivory tower logic, but real hardware is about implementing a concept in best possible fashion, not 'as in the books'. Important is the function provided, which is the same in either case.&lt;/p&gt;&#xA;&lt;p&gt;The resulting effect that any function that uses the pushed address, like for accessing parameters, will need to increment it (or use an offset of one), is as well in line with the general 6500 philosophy to spend as little hardware as necessary to provide a function and let everything else be done by software.&lt;/p&gt;&#xA;&lt;p&gt;Quite RISC like, isn't it?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Always a great first read, together with the &lt;em&gt;&lt;a href=&quot;https://archive.org/details/mcs-6500-family-hardware-manual-1976-01/page/n1/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;MCS6500 Family Hardware Manual&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-10T17:01:19.783" LastActivityDate="2021-04-10T17:01:19.783" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19545" PostTypeId="1" AcceptedAnswerId="19546" CreationDate="2021-04-10T23:24:44.243" Score="36" ViewCount="7443" Body="&lt;p&gt;Dale Fisk's &lt;a href=&quot;http://www.columbia.edu/cu/computinghistory/fisk.pdf&quot; rel=&quot;noreferrer&quot;&gt;Programming With Punched Cards&lt;/a&gt; is a fascinating account of programming in the days of punch cards.&lt;/p&gt;&#xA;&lt;p&gt;The fundamental dynamic was that early computers did not yet support timesharing.&lt;/p&gt;&#xA;&lt;p&gt;The first attempt at allocating computer resources was simple queueing: each user got to go up and use the computer for a certain length of time. But this was inefficient: one manager complained that users were allocated 15-minute time slots, of which they would spend maybe ten minutes getting everything set up and only five minutes with the computer actually running their program, so the (at that time very expensive) computer effectively spent two thirds of its time idle.&lt;/p&gt;&#xA;&lt;p&gt;Batch processing was a way around this; you no longer get to walk into the computer room; instead, you submit your program and data on punch cards along with everyone else; all the jobs are placed on a magnetic tape and fed to the computer as a single stream, so the computer gets to spend nearly all its time actually running programs; users collect their printouts the following day.&lt;/p&gt;&#xA;&lt;p&gt;What I'm wondering is: why punch cards instead of paper tape?&lt;/p&gt;&#xA;&lt;p&gt;It seems to me that the machinery to produce and consume paper tape was cheaper, being a standard fitting on &lt;a href=&quot;https://en.wikipedia.org/wiki/Friden_Flexowriter&quot; rel=&quot;noreferrer&quot;&gt;ordinary teletypewriters&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Paper tape is also lighter, more compact, and doesn't have the problem of accidentally dropping a box of punch cards and getting the order scrambled.&lt;/p&gt;&#xA;&lt;p&gt;It is less durable. Punch cards can last practically forever. But why pay for an archive-grade medium for a sneakernet job?&lt;/p&gt;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="4025" LastEditDate="2021-04-12T03:29:39.780" LastActivityDate="2021-04-15T02:22:07.660" Title="Why were programs entered on punch cards instead of paper tapes?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;punched-cards&gt;" AnswerCount="13" CommentCount="11" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19546" PostTypeId="2" ParentId="19545" CreationDate="2021-04-10T23:50:58.263" Score="96" Body="&lt;p&gt;The basic issue that paper tape is hard to edit. In theory you can cut the existing tape and splice in a new section, but in practice there is no easy way to find the correct location except by printing the contents of the tape (at 10 characters per second) and searching by hand. People did learn to read the tape hole patterns (they were no harder to learn than Morse code, after all) but even so, if a 1000-line Fortran program contained 50 differnent lines saying &amp;quot;I = 0&amp;quot; and just one of them should have been &amp;quot;I = 1&amp;quot;, there was still the problem of finding the &lt;em&gt;correct&lt;/em&gt; instance of what you were looking for.&lt;/p&gt;&#xA;&lt;p&gt;Cutting and splicing the tape (using self-adhesive splices) required a certain amount of manual dexterity, and the joins were liable to come apart if the tape was used repeatedly.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, punched cards would have their data printed on the card by the punch machine, so a deck of cards (stored in a card tray) could be read and searched as easily as a printed copy of the code, and individual cards removed and added as required.&lt;/p&gt;&#xA;&lt;p&gt;Even in the cards-and-tape era, programmer time was expensive. The choice between making an edit in say 1 minute by swapping a few cards at &amp;quot;random&amp;quot; places in a 1000 or 2000-card deck, or maybe spending 15 or 30 minutes doing the same task on paper tape, was a no-brainer.&lt;/p&gt;&#xA;&lt;p&gt;Having worked as a programmer in the punched card era, &amp;quot;dropping boxes of cards&amp;quot; simply didn't happen. Well, it did &lt;em&gt;sometimes&lt;/em&gt; happen, but it was a rare enough event that the klutz who did it was going to be the butt of a ridicule for few weeks afterwards. In any case, cards were punched with serial numbers, so a dropped deck could be mechanically re-sorted.&lt;/p&gt;&#xA;&lt;p&gt;In my university days, student computing access did use tape rather than cards, but most students' programs were small, and of course students' time was essentially free.&lt;/p&gt;&#xA;&lt;p&gt;(And as a counter-example to the idea that tape didn't get &amp;quot;scrambled&amp;quot;, I have seen situations where somebody was copying a tape after editing to get rid of all the splices and went to get a coffee while the teletype was doing its thing for 10 minutes. They came back to find the teletype had shaken itself off the table, and was busily destroying the remains of their tape while still running, upside down on the floor...)&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2021-04-11T00:00:04.483" LastActivityDate="2021-04-11T00:00:04.483" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19547" PostTypeId="2" ParentId="19545" CreationDate="2021-04-11T00:01:25.097" Score="37" Body="&lt;p&gt;Punch cards long long long predated paper tape.&lt;/p&gt;&#xA;&lt;p&gt;But there's a practical consideration you're not thinking of.  If you had ever used punch cards and paper tape, you'd know:&lt;/p&gt;&#xA;&lt;p&gt;Punch cards can be dropped, and they scatter on the floor.  Then you pick them up, put them all face up (by the printing on them) in the same orientation (with the one corner that's cut off lined up) and then you run them through a card sorter &lt;em&gt;because you remembered to punch sequence numbers in the last 8 columns of the card&lt;/em&gt;! Then you're back in business, no sweat.&lt;/p&gt;&#xA;&lt;p&gt;Paper tape can also be dropped.  And then you've got a giant pile of spaghetti - spaghetti that's &lt;em&gt;easily torn&lt;/em&gt;.  Doesn't matter if it was spooled or fanfold: It gets tangled with itself immediately - possibly the only thing in the universe that happens faster than the speed of light.  And untangling it is a slow process because if it didn't already get torn, it will when you untangle it (because the tape edges rub and catch against each other).&lt;/p&gt;&#xA;&lt;p&gt;(And yes, as @alephzero has answered, you can't really edit it either, while you can always drop in another punch card to replace a bad one.)&lt;/p&gt;&#xA;&lt;p&gt;P.S. - punch cards weren't used for &amp;quot;sneakernet jobs&amp;quot;. They &lt;em&gt;did&lt;/em&gt; have to be durable because for a long time they were the &lt;em&gt;only effective storage mechanism for programs&lt;/em&gt;.  There'd be a bunch of separate rubber-banded piles on top of the card reader - one was your Fortran compiler, one was your assembler, one was the payroll system, one was accounts receivable, etc. etc. etc.  A deck could be used daily and last months if not years.&lt;/p&gt;&#xA;" OwnerUserId="332" LastActivityDate="2021-04-11T00:01:25.097" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19548" PostTypeId="2" ParentId="19545" CreationDate="2021-04-11T00:58:52.560" Score="11" Body="&lt;p&gt;To add one more dimension to the answers already given: cards are easier to handle, whether by operators, or in a cafeteria (user self-service) system.&lt;/p&gt;&#xA;&lt;p&gt;A high-speed card reader has an input hopper and an output stacker.  After reading a deck of cards, you've got a deck of cards in the stacker.&lt;/p&gt;&#xA;&lt;p&gt;The high-speed paper tape readers of my acquaintance would do little more than spit the tape into a bin as it exited the read path. A medium-speed reader, 300 cps, is throwing out tape at about a yard a second. After it's all read, you have to roll it up again.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-04-11T00:58:52.560" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="19549" PostTypeId="1" AcceptedAnswerId="19554" CreationDate="2021-04-11T02:05:44.910" Score="0" ViewCount="196" Body="&lt;p&gt;I'm new here. Let me know if this is the wrong place to ask this kind of question.&lt;/p&gt;&#xA;&lt;p&gt;I'm planning to build a Gameboy emulator. Before I start, I want to have a clear understanding of the startup behaviour of Gameboy, to ensure I implement it appropriately in my emulator.&lt;/p&gt;&#xA;&lt;p&gt;The below is how I understand the startup process, and intend to implement it in my project.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Startup behaviour (no cartridge is selected)&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Load and read the emulator's configuration file to determine if the emulator is in debug mode or not, the size of its LCD display, etc. Change emulator's internal settings.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Set up GUI and the blank graphics display.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;After a user selects and loads a cartridge into the emulator&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Read the cartridge header and configure the emulator's internal settings. Emulation will be stopped (the graphics display will be blank) if the cartridge requires unsupported hardware.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the boot ROM is not enabled, set the program counter to $100 and skip this step. Otherwise, run the boot ROM. Emulation will be stopped if the Nintendo logo in the cartridge is invalid. The boot ROM will be locked automatically after the last instruction executed. The program counter is then set to $100.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Set the register values according to this &lt;a href=&quot;https://gbdev.io/pandocs/#power-up-sequence&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Begin emulation loop.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Before shutdown&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Free any memory.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I want to make sure there is nothing wrong with my understanding. Are there any problems? Did I miss anything important that the physical Gameboy would do?&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="21333" LastEditorUserId="10566" LastEditDate="2021-04-11T19:03:49.640" LastActivityDate="2021-04-11T19:03:49.640" Title="Startup behavior of Gameboy - what to replicate in an emulator?" Tags="&lt;emulation&gt;&lt;game-boy&gt;" AnswerCount="1" CommentCount="14" FavoriteCount="1" ClosedDate="2021-04-11T20:05:57.393" ContentLicense="CC BY-SA 4.0" />
  <row Id="19550" PostTypeId="2" ParentId="19545" CreationDate="2021-04-11T02:12:19.400" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What I'm wondering is: why punch cards instead of paper tape?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because it was already there?&lt;/p&gt;&#xA;&lt;p&gt;Early commercial computers were made to replace tabulating machines. To do so they had of course to be able to read (and write) punch cards. There was no need for paper tapes.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Well, ok, paper tape was first, as the Zuse machines used them and some other experimental and scientific machines. Or not, as that was the time of primordial soup. Later on it was definitely only a thing for money strapped institutions. The real world revolves around business and business was all about card tabulating. That was were the money was the computer manufacturers were going for. That was were the computers were sold to. And that was were programs (and programmers) were needed.&lt;/p&gt;&#xA;&lt;p&gt;So while there many good arguments can be made for punch cards (and I'd usually be first to do so) the real reason is way more mundane:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;They used what was already available: Punch cards&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;It is never about what was invented first, but what environment a new technology is placed in. Existing data processing sites - the major early customers - had already everything needed for card handling, from keypunches over boxes and shelf for cards all the way to stand alone sorters and printers. That's everything needed to handle programming sans the compiler. Call it the IDE of the 1960s.&lt;/p&gt;&#xA;&lt;p&gt;It as well helps to look at the contemporary landscape. Of the most successful computer line in history, the IBM/360, the most successful type was the plain &lt;a href=&quot;http://ed-thelen.org/comp-hist/IBM-ProdAnn/360-20.pdf&quot; rel=&quot;noreferrer&quot;&gt;Model 20&lt;/a&gt;. No floating point, no 32 bit, not even a full register set. By default delivered without tapes or disks (*1), but an all in one card processing unit, the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System/360_Model_20#IBM_2560_Multi-Function_Card_Machine&quot; rel=&quot;noreferrer&quot;&gt;2560 Multi-Function Card Machine&lt;/a&gt;. It could handle the tasks of a reader, puncher, sorter and interpreter at once.&lt;/p&gt;&#xA;&lt;p&gt;So, why would anyone introduce paper tapes to that world, making introduction of computers even more costly by requiring secondary investment in punch tape machinery?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Which were only introduced later on and needed lots of RAM for system software, i.e. 8 KiB minimum :))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-11T15:17:46.157" LastActivityDate="2021-04-11T15:17:46.157" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="19552" PostTypeId="1" AcceptedAnswerId="19555" CreationDate="2021-04-11T09:27:35.933" Score="25" ViewCount="1949" Body="&lt;p&gt;It is a familiar fact that scientific software tends to do a lot of vector arithmetic and similar, that one does not want to keep rewriting the low-level code for such, so the usual practice is to use an off-the-shelf arithmetic library such as LINPACK.&lt;/p&gt;&#xA;&lt;p&gt;I've been trying to track down the early history of such, and apparently the first such library was IBM's Scientific Subroutine Package (SSP), which was presumably bundled with IBM hardware in the early days (because IBM software in general was, prior to the great unbundling of 1969) and which seems to have been important and widely used in its day, until superseded by EISPACK in the early seventies.&lt;/p&gt;&#xA;&lt;p&gt;An excellent, detailed account of the creation of EISPACK can be found at &lt;a href=&quot;https://web.archive.org/web/20170702065825/http://history.siam.org/pdfs2/Dongarra_%20returned_SIAM_copy.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://web.archive.org/web/20170702065825/http://history.siam.org/pdfs2/Dongarra_%20returned_SIAM_copy.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now, I'm trying to understand this history from the perspective of the people who were there at the time, and I keep trying to think of what I would do if I were a software manager at IBM, and it seems to me that I would consider it important to keep SSP up to date, keep it the number one choice, because that is something that could very well influence the purchase of computer equipment at academic institutions, which could later influence the purchase of equipment in business by students graduated from those academic institutions.&lt;/p&gt;&#xA;&lt;p&gt;Was IBM's lunch simply eaten by a hungry and determined competitor? It doesn't quite look like that. From the above document, it seems that EISPACK was written by academics; in general, academics do not regard the writing of code is a high-value activity, but as something best avoided if reasonably possible; this does seem to have been the case here; from the above document:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;That kind of software is always one of these funny things in&#xA;terms of providing research funds. If you’re writing software, many people ask the&#xA;question “where’s the research contribution in working on software, how does it affect us&#xA;and why should we be paying for this?” So that’s been a constant source of problems&#xA;from the political side in funding mathematical software on a level with some of the&#xA;research that’s done in other areas. And sometimes we’d have to hide the fact that we’re&#xA;writing software, so we’d say that we’re developing portable techniques...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It does, on reflection, feel a little surprising for the world's strongest IT company to be outcompeted by people who weren't even supposed to be spending their time writing code.&lt;/p&gt;&#xA;&lt;p&gt;So what happened?&lt;/p&gt;&#xA;&lt;p&gt;Did someone at IBM fall asleep at the wheel?&lt;/p&gt;&#xA;&lt;p&gt;Did the EISPACK developers discover some new techniques so important that it was worth redoing a lot of programming work that had previously been done by a corporate team?&lt;/p&gt;&#xA;&lt;p&gt;Did the EISPACK developers decide that portability was so important that it was worth redoing that work? If so, are there any statements on record from any of them explaining this decision and the reasoning behind it? The above document contains no indication of such.&lt;/p&gt;&#xA;&lt;p&gt;Is there some other factor that I am missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-04-11T14:32:18.880" Title="Why was IBM's Scientific Subroutine Package superseded?" Tags="&lt;history&gt;&lt;software&gt;&lt;ibm&gt;&lt;mainframe&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19553" PostTypeId="2" ParentId="19545" CreationDate="2021-04-11T12:03:13.737" Score="7" Body="&lt;p&gt;An other nice thing about punch card is that you can use them, or better use a small pack of them, in another program. Some sort of copy/pasting.&#xA;I remember packs of hundrands cards with colored cards  slipped from time to time to physically separate subprogrames that could be reused elsewhere.&lt;/p&gt;&#xA;" OwnerUserId="21339" LastEditorUserId="21339" LastEditDate="2021-04-12T17:12:54.000" LastActivityDate="2021-04-12T17:12:54.000" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19554" PostTypeId="2" ParentId="19549" CreationDate="2021-04-11T12:08:46.423" Score="2" Body="&lt;p&gt;Putting aside my concern that this question perhaps isn't ideal for this site (on the basis that the limited close votes so far suggest that I might be wrong about that), this answer is community wiki because it's a bit vague and waffling, and adjustments might be useful.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;You can implement the UI side of things however you like. Personally I try to make the emulators I write perform as identically as possible to regular desktop software on their target platforms.&lt;/p&gt;&#xA;&lt;p&gt;So maybe there's a config file, maybe you're using the Registry for the user defaults; standard behaviour is probably to load a data file (in your case a cartridge image) via File → Open…, by drag and drop or via the command line, and of course you should return any allocated resources to the system upon shutdown if your programming language leaves that responsibility to you.&lt;/p&gt;&#xA;&lt;p&gt;There's an alternative school of thought that emulators should be more like iTunes-esque media browsers with an import procedure leading to a catalogue of the user's titles; if your target were a device more likely to be used in the manner of a media player — typically, on a big screen that you sit a good distance from, with something more like a controller or a remote control than a keyboard and a mouse — then you might consider that.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As for the Game Boy and its boot ROM, you seem to be fully aware that there are copyright-free alternatives meaning that you don't need to implement your own at all: just put your hardware into the correct startup state and let it run either the original or the replacement (if the user hasn't supplied a copy of the original). If you want to include a high-level emulation of the original too, then obviously you can subject to it being one more thing to maintain.&lt;/p&gt;&#xA;&lt;p&gt;There's a full disassembly of the original &lt;a href=&quot;https://gist.github.com/drhelius/6063288&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. From glancing at it, it looks like the VRAM is zeroed and then loaded with a copy of the Nintendo logo, which has been scaled up to 2×2 its original size and is available in the cartridge images, the scroll and the sound effect occurs, then the boot ROM is disabled as the final act before the PC rolls up to &lt;code&gt;$100&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="15334" LastEditDate="2021-04-11T16:07:08.427" LastActivityDate="2021-04-11T16:07:08.427" CommentCount="0" CommunityOwnedDate="2021-04-11T12:08:46.423" ContentLicense="CC BY-SA 4.0" />
  <row Id="19555" PostTypeId="2" ParentId="19552" CreationDate="2021-04-11T12:12:02.280" Score="39" Body="&lt;p&gt;Specifically concerning EISPACK. what happened was that &lt;a href=&quot;https://en.wikipedia.org/wiki/James_H._Wilkinson&quot; rel=&quot;noreferrer&quot;&gt;James Hardy &amp;quot;Jim&amp;quot; Wilkinson&lt;/a&gt; in the UK (whose career as an applied mathematician started with practical ballistic modelling in WWII, working with Turing and other computing pioneers, and continued for the rest of his life at the UK National Physical Laboratory, not in some academic ivory tower) re-invented the entire foundation of computational linear algebra - or more accurately, &lt;em&gt;gave&lt;/em&gt; it a practical foundation for the first time in the history of mathematics, with the new concept of &amp;quot;inverse&amp;quot; or &amp;quot;backward&amp;quot; error analysis.&lt;/p&gt;&#xA;&lt;p&gt;Wilkinson's 700-page book from the 1960s &amp;quot;The Algebraic Eigenvalue Problem&amp;quot; is still a classic. The IBM SSP borrowed a couple of simple algorithms from it (plus another one invented by Jacobi way back in 1840s!) but EISPACK was &amp;quot;the whole nine yards.&amp;quot;&#xA;The EISPACK library only contained algorithms for eigenvalue problems. It had about 70 different algorithms, compared with four in IBM SSP.&lt;/p&gt;&#xA;&lt;p&gt;EISPACK was not &amp;quot;written by academics&amp;quot; but created at Argonne National Lab in the USA, with the objective of being portable and free public domain software (And having cut his teeth working on EISPACK and LINPACK as a new graduate, Dongarra then went on to develop the LAPACK library which made both of them obsolete)&lt;/p&gt;&#xA;&lt;p&gt;As an ironic footnote, Wilkinson was completely dismissive of a class of eigenvalue extraction methods now known as Arnoldi iteration, claiming (rightly) that they were of huge theoretical importance but (wrongly) could never be made to work in practical numerical analysis because of problems with rounding errors. Solutions to the numerical problems were discovered in the 1980s and these algorithms are now the &amp;quot;goto&amp;quot; standard methods for solving eigenproblems that are orders of magnitude bigger than anything Wilkinson could have imagined.&lt;/p&gt;&#xA;&lt;p&gt;THE IBM SSP was also not competitive with commercial libraries such as IMSL (first released in 1970) which were much more comprenhensive (thousands of routines, not about 100) and not restricted to one computer manufacturer's products.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="3481" LastEditDate="2021-04-11T14:32:18.880" LastActivityDate="2021-04-11T14:32:18.880" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19557" PostTypeId="2" ParentId="19545" CreationDate="2021-04-11T15:59:54.523" Score="12" Body="&lt;p&gt;Punch cards and paper tape are suited for different tasks.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Punch cards work better when the &lt;strong&gt;size of the data is not known in advance.&lt;/strong&gt;  How long would you manufacture the unpunched paper rolls?  If the roll is too long, you are wasting paper and increasing costs.  If the roll is too short, you either have to splice it together, or have the operator load more than one roll.  In contrast, you use as many punch cards as you need for a job; extra cards can be used on a later job, with no waste.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Punch cards are superior for &lt;strong&gt;data entry&lt;/strong&gt;.  Many of the tasks of early computers were processing data.  Tabulation of the 1890 U.S. census was done with punch cards created by Herman Hollerith.  Businesses bought computers to process sales transactions, inventory, accounting, and payroll.  Even some election systems as late as 2000 used punch cards for voting.&lt;/p&gt;&#xA;&lt;p&gt;What each of these applications have in common is they involve records with a moderate amount of data.  Putting one record on each punch card works perfectly.  With paper tape, you would be constantly appending records to the end of the tape.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can &lt;strong&gt;insert or delete&lt;/strong&gt; punch cards from a deck.  This makes editing much easier.  This was already pointed out in @alephzero's answer.  Note that the ASCII code 0x7f was specifically chosen as the ASCII code for &lt;code&gt;DEL&lt;/code&gt;ete because it was a way to rub out one character from punched tape, by punching all of the holes.  It is also easier to edit a record by replacing a punched card; there is no simple way to do this with paper tape.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Punch cards are better for &lt;strong&gt;selectively using data&lt;/strong&gt;.  It is easier to pick out (manually or automatically) those records you want.  For programming, you can re-use cards, as noted in @AlainD's answer.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When &lt;strong&gt;the data never changes&lt;/strong&gt;, the above arguments go away, and then paper tape becomes superior.  That's why player pianos had paper rolls, instead of punch cards.  Certain programs such as loaders and assemblers were so stable that they could be distributed by paper tape.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-04-11T21:07:50.313" LastActivityDate="2021-04-11T21:07:50.313" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19559" PostTypeId="1" AcceptedAnswerId="19560" CreationDate="2021-04-11T18:27:41.800" Score="5" ViewCount="115" Body="&lt;p&gt;The MC68030 processor is equipped with dual 256-byte instruction and data caches as well as a &amp;quot;burst&amp;quot; mechanism used to quickly load a cache line from RAM or L2 cache controlled by the platform hardware (motherboard).&lt;/p&gt;&#xA;&lt;p&gt;My question is, when MC68030 encounters a cache miss and initiates a burst access to fill a line in one of the caches, does program execution resume immediately after the first longword is loaded or only after the burst is completed?&lt;/p&gt;&#xA;&lt;p&gt;One would think that MC68030 would continue execution right after the requisite data is available, but I have encountered a slide from a &lt;a href=&quot;https://old.hotchips.org/wp-content/uploads/hc_archives/hc01/2_Mon/HC1.S2/HC1.2.4.pdf&quot; rel=&quot;noreferrer&quot;&gt;MIPS presentation at Hot Chips '89&lt;/a&gt; which suggests that MC68030, in contrast to MIPS's R3000, waits until the burst is completed before continuing execution:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/eAcoK.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eAcoK.png&quot; alt=&quot;MC68030 vs R3000&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;MIPS calls this idea of the execution continuing as a cache line is loaded &amp;quot;instruction streaming.&amp;quot; Of course, this slide is from MIPS's presentation, not Motorola's, so we can expect it to be a bit generous toward R3000 and a bit harsh toward its competitors. The presentation calls out MC68030 and 80386 as being less performant than the R3000, and indeed there is a conspicuous lack of labeling or explanation of which competing processors suffer from the extra latency waiting for completion of the burst. MIPS is clear that the R3000 has instruction streaming, but it's not clear whether the aforementioned competitors have it or not.&lt;/p&gt;&#xA;&lt;p&gt;The more I think about this, the more confused I get. Any pipelined CPU is always fetching instructions in parallel with executing opcodes already fetched. Even the 8088 has a few byte (IIRC) prefetch queue which is always being filled in the absence of data memory references.&lt;/p&gt;&#xA;&lt;p&gt;Maybe MIPS's claim refers only to data references and the MC68030 is not able to continue execution when doing a burst into the data cache.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone shed any light on this?&lt;/p&gt;&#xA;" OwnerUserId="7486" LastActivityDate="2021-04-11T19:21:02.217" Title="MC68030: does execution resume during or after cache burst refill?" Tags="&lt;motorola-68000&gt;&lt;m68k&gt;&lt;motorola-680x0&gt;&lt;cache&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19560" PostTypeId="2" ParentId="19559" CreationDate="2021-04-11T19:21:02.217" Score="5" Body="&lt;p&gt;According to the official 68030 User Manual, the '030 performs cache burst fills in critical-word-first order specifically to get the execution units running again.&lt;/p&gt;&#xA;&lt;p&gt;However, accesses to the remaining words in the cache line are delayed until the fill is complete.  This includes the second part of misaligned accesses, which need to access two words in the same line.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Wjy8w.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Wjy8w.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2021-04-11T19:21:02.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19561" PostTypeId="2" ParentId="15078" CreationDate="2021-04-11T19:22:34.607" Score="2" Body="&lt;p&gt;The MCS-51 family of microprocessors are post 8008 and do support a dedicated stack in hardware registers.  Stack sizes of 128 and 256 bytes were common.&lt;/p&gt;&#xA;&lt;p&gt;As other people have said, it is very prone to stack overflow during interrupt handling.  But also it is very awkward for RTOS support.  For CPUs that support a stack pointer to some unique, external memory, only that stack pointer need be saved and restored on a context switch.&lt;/p&gt;&#xA;&lt;p&gt;But if there is only one stack in hardware, then the entire stack must be copied in and out on a context switch.  There is really no simple, efficient way of achieving multi-tasking solutions on these architectures.&lt;/p&gt;&#xA;&lt;p&gt;Which is not to say that you cannot develop great single thread/interrupt driven solutions or that you cannot develop good solutions based on some kind of cooperative scheduling.  Life is full of choices; that is one of them.&lt;/p&gt;&#xA;" OwnerUserId="21351" LastActivityDate="2021-04-11T19:22:34.607" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19562" PostTypeId="2" ParentId="19543" CreationDate="2021-04-11T20:03:19.003" Score="3" Body="&lt;p&gt;The answer with anything of that age is &amp;quot;to save silicon&amp;quot;.  That pushed address was never intended for programmer use.&lt;/p&gt;&#xA;&lt;p&gt;I coded 6502 professionally for years, using every possible trick to push the limits of the metal, and that issue never really came up for me.  It sounds like you're trying to do a JMP to a variable address by pushing the address on the stack and going &lt;code&gt;RTS&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Consider the indirect JMP command &lt;code&gt;JMP (ADDR)&lt;/code&gt;.  This doesn't force you to use a Zero Page address, but you can if you wanna: &lt;code&gt;JMP ($00C8)&lt;/code&gt;.  So you can use the cheaper Zero Page store commands.&lt;/p&gt;&#xA;&lt;p&gt;I'm not sure why they don't have a zero-page JMP command like &lt;code&gt;JMP($C8)&lt;/code&gt; but probably it's used too infrequently to spend the silicon on that.&lt;/p&gt;&#xA;&lt;p&gt;Do not use an indirect address ending in $FF unless you want to meet a bug.&lt;/p&gt;&#xA;&lt;p&gt;Of if you really want to do an RTS jump, and are loading an absolute address onto the stack, then use a compiler meta-instruction to decrement it by 1 before pushing it, so that the compiler takes care of the -1 for you.&lt;/p&gt;&#xA;" OwnerUserId="4330" LastActivityDate="2021-04-11T20:03:19.003" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19563" PostTypeId="1" CreationDate="2021-04-12T00:32:26.740" Score="8" ViewCount="452" Body="&lt;p&gt;I know that the Megadrive contains the Z80 CPU to help control the soundchips for 16-bit games, and that it provides backwards compatibility for the CPU processing of Master System software, but beyond that how are the sound processing and graphics processing of Master System games handled when playing on a Megadrive?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;What role do the Yamaha &amp;amp; Texas instruments chips play in allowing the Megadrive to output sound from Master System games?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the role of the video display processor in outputting Master System graphics?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What role does the 68000 processor play in all of this?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="19655" LastEditorUserId="7843" LastEditDate="2021-04-12T16:37:52.350" LastActivityDate="2021-04-12T16:37:52.350" Title="How does Master System backwards compatibility work on the Megadrive?" Tags="&lt;z80&gt;&lt;motorola-68000&gt;&lt;sega-genesis&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19564" PostTypeId="2" ParentId="19563" CreationDate="2021-04-12T02:43:32.970" Score="11" Body="&lt;p&gt;The 68000 does nothing; it is entirely disabled. Ditto the Yamaha OPN.&lt;/p&gt;&#xA;&lt;p&gt;The Mega Drive's VDP is almost entirely backwards compatible with that of the Master System — it implements the graphics mode used by all but one of the Master System's games natively*. So there's no emulation or translation, it's just a different graphics mode.&lt;/p&gt;&#xA;&lt;p&gt;Similarly the SN76489 is exactly the sound chip used in the Master System, so it's just presented as is. With a potential caveat: the physical chip might be absent; Sega rolled a reimplementation** into the VDP for the Master System 2 and Game Gear so I dare imagine its functionality got subsumed in the Mega Drive too.&lt;/p&gt;&#xA;&lt;p&gt;In short: the relevant components are hardware-compatible with those in the Master System [almost] as far as it matters; the others are disabled when a Master System cartridge is detected.&lt;/p&gt;&#xA;&lt;p&gt;If you wanted to produce your own at-home alternative to the official adaptor for Master System games all you'd need to do is:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ground the Mega Drive's M3 cartridge slot pin, to signal that the Mega Drive should run in Master System mode;&lt;/li&gt;&#xA;&lt;li&gt;connect all Master System cartridge port pins one-to-one with the Mega Drive equivalents; and&lt;/li&gt;&#xA;&lt;li&gt;add a physical button to trigger NMI, that being what the Master System's 'pause' button does.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;* The Master System is in-turn backwards compatible with the SG1000, reimplementing its graphics modes (which as those of the TMS9918a, also seen in the ColecoVision, MSX, TI-99/4a and others). The Mega Drive omits those. One early Master System title, F-16 Fighting Falcon, uses one of those modes rather than the Master System's native mode.&lt;/p&gt;&#xA;&lt;p&gt;** Sega's version has slightly different noise-channel output, as it uses a different LFSR polynomial. But it's similar and the exact noise waveform isn't that important to Master System software.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="4147" LastEditDate="2021-04-12T15:33:01.700" LastActivityDate="2021-04-12T15:33:01.700" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19565" PostTypeId="2" ParentId="19545" CreationDate="2021-04-12T06:48:25.130" Score="2" Body="&lt;p&gt;A few additional side benefits of punched cards as opposed to punched paper tape:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Punched tape was supplied on rolls of particular lengths. A roll of&#xA;tape could only accommodate a certain amount of data. A stack of&#xA;cards could be any length.&lt;/li&gt;&#xA;&lt;li&gt;Paper tape wasn't as robust as punched cards - the paper was thinner&#xA;than that used for cards. Punched cards were read by placing the card&#xA;against a shiny metal backing plate and shining a bright light so the&#xA;holes in the card could be read. Punched tape was read by pins&#xA;pressing against the tape and passing through the holes. Over time,&#xA;this mechanical action could wear out the tape.&lt;/li&gt;&#xA;&lt;li&gt;A crease in a punched tape would be problematic for the reading&#xA;device.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="19504" LastActivityDate="2021-04-12T06:48:25.130" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19566" PostTypeId="1" CreationDate="2021-04-12T07:41:18.263" Score="13" ViewCount="6369" Body="&lt;p&gt;In an IBM service bureau in the early 1960’s all data was keyed twice.  The first time the holes were punched into cards.  The 2nd time a verifier checked that the correct holes had been punched.  Even in the programmers’ office we had both machines and were expected to verify our debugging changes.&lt;/p&gt;&#xA;&lt;p&gt;Today passwords are the only things we are asked to enter twice.&lt;/p&gt;&#xA;" OwnerUserId="21359" LastActivityDate="2021-04-12T19:57:20.287" Title="When did they stop verifying everything that went into a computer?" Tags="&lt;history&gt;" AnswerCount="3" CommentCount="16" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19567" PostTypeId="2" ParentId="19566" CreationDate="2021-04-12T07:57:56.513" Score="29" Body="&lt;p&gt;Maybe we don't always enter things twice, but verification is still a major part of software engineering.&lt;/p&gt;&#xA;&lt;p&gt;A lot of pure data entry is still done by double keying, which is to say, the data is entered twice by two different people and the results compared to try to reduce the error rate.&lt;/p&gt;&#xA;&lt;p&gt;As for programming, if you do it properly, there are code reviews and unit tests and integration tests and system tests. One of the few real innovations in programming since I started professionally in 1987 is &amp;quot;continuous integration&amp;quot; (which isn't really continuous, but never mind), where any change a programmer makes and commits to the codebase is automatically compiled and tested.&lt;/p&gt;&#xA;&lt;p&gt;So maybe we don't always literally check everything twice, but our modern verification methods are fairly robust and do not represent a backward step since the 1960's.&lt;/p&gt;&#xA;&lt;p&gt;PS we are also often required to enter an email address twice (which really annoys me since I always copy-paste it), so passwords aren't the only things.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Ironically, my answer contained at least one typo. Maybe I should have checked it.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2021-04-12T07:57:56.513" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19569" PostTypeId="2" ParentId="19566" CreationDate="2021-04-12T09:59:18.963" Score="4" Body="&lt;p&gt;Entering data twice squares the probability of a typo going undetected.  Things have moved forward and these days we have the computing power to do some more comprehensive sanity checks ‘if (x = 0) { }’.  I (just) missed the punched-card era but I’d say that pretty much as soon as a programmer was allowed to type commands directly into a computer they would realise that attempting to compile code is much quicker than checking it by hand.&lt;/p&gt;&#xA;" OwnerUserId="19372" LastEditorUserId="19372" LastEditDate="2021-04-12T19:57:20.287" LastActivityDate="2021-04-12T19:57:20.287" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19570" PostTypeId="1" AcceptedAnswerId="19571" CreationDate="2021-04-12T12:23:07.800" Score="6" ViewCount="542" Body="&lt;p&gt;As everyone knows, the 6502 has many many undefined opcodes. One of these is RRA, which essentially performs both ROR and ADC.&lt;/p&gt;&#xA;&lt;p&gt;From what I understand of hardware (really not much) and &lt;a href=&quot;http://www.zimmers.net/anonftp/pub/cbm/documents/chipdata/6502-NMOS.extra.opcodes&quot; rel=&quot;noreferrer&quot;&gt;the explanation in this document&lt;/a&gt;, the example program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;rra $02&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;should:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;read from the location $02,&lt;/li&gt;&#xA;&lt;li&gt;write its contents back while it does the shift and addition.&lt;/li&gt;&#xA;&lt;li&gt;write the rotated value, while latching the result of the addition into the accumulator&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;But here's the example run in Visual6502.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0   0000    67  1       0000    aa  00  00  fd  nv‑BdIZc&#xA;0   0000    67  1       0000    aa  00  00  fd  nv‑BdIZc&#xA;1   0001    02  1       0001    aa  00  00  fd  nv‑BdIZc&#xA;1   0001    02  1       0001    aa  00  00  fd  nv‑BdIZc&#xA;2   0002    20  1       0002    aa  00  00  fd  nv‑BdIZc&#xA;2   0002    20  1       0002    aa  00  00  fd  nv‑BdIZc&#xA;3   0002    20  0       0002    aa  00  00  fd  nv‑BdIZc&#xA;3   0002    20  0       0002    aa  00  00  fd  nv‑BdIZc&#xA;4   0002    20  0       0002    aa  00  00  fd  nv‑BdIzc&#xA;4   0002    10  0       0002    aa  00  00  fd  nv‑BdIzc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So my concern is that the accumulator did not change. Trying a few different values shows that the Carry flag changes as though a ROR happened.&lt;/p&gt;&#xA;&lt;p&gt;I'm inclined to trust the Visual6502 implementation, but on the other hand, all the documents, software, emulators and everything that attest to the behaviour of the RRA opcode can't all be wrong, can they? So the document I linked to up there is quite C64-centric. Have I discovered that the Visual6502 reproduces a variant that is different from the NMOS thing in the C64 and NES?&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2021-04-12T20:44:06.123" Title="Why doesn't Visual6502 simulate RRA in the way I expect?" Tags="&lt;6502&gt;&lt;undocumented-opcodes&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19571" PostTypeId="2" ParentId="19570" CreationDate="2021-04-12T12:49:05.773" Score="12" Body="&lt;p&gt;Look further down in the print-out. The &lt;code&gt;A&lt;/code&gt; register shows as updated after the first byte fetch of that next instruction.&lt;/p&gt;&#xA;&lt;p&gt;Starting with the bytes &lt;code&gt;67 02 20 10&lt;/code&gt;, which seem to be what you had:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cycle   ab      db  rw  Fetch   pc      a   x   y   s   p&#xA;0       0000    67  1   unknown 0000    aa  00  00  fd  nv‑BdIZc&#xA;0       0000    67  1   unknown 0000    aa  00  00  fd  nv‑BdIZc&#xA;1       0001    02  1           0001    aa  00  00  fd  nv‑BdIZc&#xA;1       0001    02  1           0001    aa  00  00  fd  nv‑BdIZc&#xA;2       0002    20  1           0002    aa  00  00  fd  nv‑BdIZc&#xA;2       0002    20  1           0002    aa  00  00  fd  nv‑BdIZc&#xA;3       0002    20  0           0002    aa  00  00  fd  nv‑BdIZc&#xA;3       0002    20  0           0002    aa  00  00  fd  nv‑BdIZc&#xA;4       0002    20  0           0002    aa  00  00  fd  nv‑BdIzc&#xA;4       0002    10  0           0002    aa  00  00  fd  nv‑BdIzc&#xA;5       0002    10  1   BPL     0002    aa  00  00  fd  nv‑BdIzc&#xA;5       0002    10  1   BPL     0002    aa  00  00  fd  nv‑BdIzc&#xA;6       0003    10  1           0003    ba  00  00  fd  Nv‑BdIzc&#xA;6       0003    10  1           0003    ba  00  00  fd  Nv‑BdIzc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Note that that's also the point where the &lt;code&gt;N&lt;/code&gt; flag becomes set, even though the &lt;code&gt;BPL&lt;/code&gt; has already started fetching. Since this is an effect from the previous instruction, the branch is not taken.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;These results are as seen for separate &lt;code&gt;ROR&lt;/code&gt; and &lt;code&gt;ADC&lt;/code&gt;, with input &lt;code&gt;66 04 65 04 20 10&lt;/code&gt; (offsets adjusted to point at the &lt;code&gt;20&lt;/code&gt;):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cycle   ab      db  rw  Fetch   pc      a   x   y   s   p&#xA;0       0000    66  1   ROR zp  0000    aa  00  00  fd  nv‑BdIZc&#xA;0       0000    66  1   ROR zp  0000    aa  00  00  fd  nv‑BdIZc&#xA;1       0001    04  1           0001    aa  00  00  fd  nv‑BdIZc&#xA;1       0001    04  1           0001    aa  00  00  fd  nv‑BdIZc&#xA;2       0004    20  1           0002    aa  00  00  fd  nv‑BdIZc&#xA;2       0004    20  1           0002    aa  00  00  fd  nv‑BdIZc&#xA;3       0004    20  0           0002    aa  00  00  fd  nv‑BdIZc&#xA;3       0004    20  0           0002    aa  00  00  fd  nv‑BdIZc&#xA;4       0004    20  0           0002    aa  00  00  fd  nv‑BdIzc&#xA;4       0004    10  0           0002    aa  00  00  fd  nv‑BdIzc&#xA;5       0002    65  1   ADC zp  0002    aa  00  00  fd  nv‑BdIzc&#xA;5       0002    65  1   ADC zp  0002    aa  00  00  fd  nv‑BdIzc&#xA;6       0003    04  1           0003    aa  00  00  fd  nv‑BdIzc&#xA;6       0003    04  1           0003    aa  00  00  fd  nv‑BdIzc&#xA;7       0004    10  1           0004    aa  00  00  fd  nv‑BdIzc&#xA;7       0004    10  1           0004    aa  00  00  fd  nv‑BdIzc&#xA;8       0004    10  1   BPL     0004    aa  00  00  fd  nv‑BdIzc&#xA;8       0004    10  1   BPL     0004    aa  00  00  fd  nv‑BdIzc&#xA;9       0005    10  1           0005    ba  00  00  fd  Nv‑BdIzc&#xA;9       0005    10  1           0005    ba  00  00  fd  Nv‑BdIzc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="8911" LastEditorUserId="8911" LastEditDate="2021-04-12T13:09:28.113" LastActivityDate="2021-04-12T13:09:28.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19572" PostTypeId="2" ParentId="19545" CreationDate="2021-04-12T13:03:13.817" Score="3" Body="&lt;p&gt;Another advantage of cards over tape: Ease of setup for batch processing:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;With cards, it is a trivial effort to pile up multiple stacks for successive scanning.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With tape, either you have to splice multiple tapes together in sequence and respool (a process fraught with peril of tearing), or dismount each tape and mount the next, which takes up a fair amount of costly time.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="21367" LastActivityDate="2021-04-12T13:03:13.817" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19573" PostTypeId="2" ParentId="19545" CreationDate="2021-04-12T16:09:17.000" Score="4" Body="&lt;p&gt;There was paper tape and paper tape. For example, see &lt;a href=&quot;https://enacademic.com/pictures/enwiki/80/Papertape2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here for fan fold papertape&lt;/a&gt;. This could be read in by a conventional ASR33 type teletype reader but often was read by a &lt;a href=&quot;https://www.youtube.com/watch?v=lLNLYwdzyHo&quot; rel=&quot;nofollow noreferrer&quot;&gt;specialized high speed reader&lt;/a&gt;. The fan folded tape could be fitted on one side and read through quickly. It could then be rewound almost like a tape from one side to the other. The first shows a diagnostic, but one of the early control systems for the Dartford Tunnel in the UK used something like this for a complete O/S (RSX-11S) with applications to control the signals, lights and fans. The tape in this case was made of mylar rather than paper which tends to be more robust. This would be read when the controlling system (a PDP-11) needed to reboot. The point being that this was binary rather than text so there was no need to edit at the line level.&lt;/p&gt;&#xA;" OwnerUserId="5164" LastActivityDate="2021-04-12T16:09:17.000" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19574" PostTypeId="1" AcceptedAnswerId="19579" CreationDate="2021-04-12T16:16:04.723" Score="4" ViewCount="104" Body="&lt;p&gt;This is a fairly basic question, and I almost feel ashamed to ask it; I'm guessing it can be answered in a single sentence.&lt;/p&gt;&#xA;&lt;p&gt;There was a rather influential series of assemblers for some of IBM's electronic data-processing machines. Here is my understanding of the evolution: The first in the line was called the “Symbolic Assembly Program” or SAP; after being picked up by &lt;a href=&quot;https://en.wikipedia.org/wiki/SHARE_(computing)&quot; rel=&quot;nofollow noreferrer&quot;&gt;SHARE&lt;/a&gt;, the acronym came to stand for “SHARE Assembly Program”. When FORTRAN came along, a new version was coded for the compiler and called the “FORTRAN Assembly Program” or FAP.&lt;/p&gt;&#xA;&lt;p&gt;From what I can find, documentation survives only for &lt;a href=&quot;http://sky-visions.com/ibm/704/uasap.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;a 704 SAP from 1956-03-22&lt;/a&gt;, and for a few early-1960s versions for the 7090, which can be found &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/&quot; rel=&quot;nofollow noreferrer&quot;&gt;on Bitsavers&lt;/a&gt;. It seems the assembler grew support for macros in this time.&lt;/p&gt;&#xA;&lt;p&gt;Two pseudo-operations are provided to change the destination of assembled code. The first is &lt;code&gt;ORG&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The ORG (Origin) pseudo-operation is used to set the “next location to be assigned by the assembler” to a desired value.&lt;br /&gt;&#xA;⋮&lt;br /&gt;&#xA;The effect of an ORG on the binary output of the assembler is to cause any words in the punch buffer to be written out, and to cause the next output to start at the new card origin.&lt;br /&gt;&#xA;⋮&lt;br /&gt;&#xA;The ORG pseudo-operation causes the next instruction to be assembled at the origin given&#xA;(&lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/C28-6235-2_7090_FAP.pdf#page=31&quot; rel=&quot;nofollow noreferrer&quot;&gt;C28-6235-2, p. 25&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Then there is LOC:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The LOC (Location) pseudo-operation is used to set the program counter.&lt;br /&gt;&#xA;⋮&lt;br /&gt;&#xA;LOC will not cause any binary words in the punch buffer to be written out (&lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/C28-6235-2_7090_FAP.pdf#page=31&quot; rel=&quot;nofollow noreferrer&quot;&gt;ibid&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Later we learn the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The assembler uses two counters called the “location counter” and “program counter” to keep track of the “next instruction to be assigned”. Initially, both counters are set to zero. When an instruction, which is not a pseudo-operation, is processed, its location symbol, if any, is entered into the symbol table together with the current value of the program counter. Then both counters are increased by one or, for certain orders, by two. Pseudo-operations affect both counters in different ways. ORG sets both counters to the given value; LOC sets only the program counter (&lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/C28-6235-2_7090_FAP.pdf#page=67&quot; rel=&quot;nofollow noreferrer&quot;&gt;same document, page 61&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The title of this question is now trivially answered. But what is the purpose of having LOC as well as ORG? In what situation is LOC necessary or useful? When would de-synchronizing the two counters be desirable? Does it have something to do with relocatable assembly? I admit that that is an area I am not too clear about.&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2021-04-12T18:12:37.350" Title="Why have both the ORG and LOC pseudo-operations in the SHARE/Symbolic/Fortran Assembly Programs for the IBM 704/709/7090/7094?" Tags="&lt;assembly&gt;&lt;ibm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19575" PostTypeId="2" ParentId="19566" CreationDate="2021-04-12T16:24:59.000" Score="9" Body="&lt;p&gt;There were two issues, the first being that data entry was not interactive and data was often strangely formatted to get around the constraints of the 80 column punched card so the data wasn't easy to enter. An additional problem that not all punched card machines printed on the cards as holes were punched making verification harder. So type twice to verify became the rule in many places (but not always). The card punch in verify mode would read the card and if your input didn't match, it would alert you and give the possibility to correct, generally by a mixture of duplicating the bad card to the column before the mistake and then manually typing the correction.&lt;/p&gt;&#xA;&lt;p&gt;Later we went to forms based data entry via screens, even before true interactive computing came into play. The description of a form was sent to a visual display unit, and it looked like the data being entered. It was much easier to see and correct mistakes. The systems also had very limited data checking. They could check if numbers had been typed where alphas were expected or vice versa.&lt;/p&gt;&#xA;&lt;p&gt;They could still have a verification stage but it was often skipped and if anything, checked from a printout of the entered data later.&lt;/p&gt;&#xA;" OwnerUserId="5164" LastActivityDate="2021-04-12T16:24:59.000" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19576" PostTypeId="2" ParentId="19545" CreationDate="2021-04-12T16:40:13.963" Score="2" Body="&lt;p&gt;Other reasons:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Economics.  Making a long roll is more expensive than cards.  Shipping cubes is more space efficient than cylinders.  If one section of the tape is damaged, it can't be sent to customer, but if cards are damaged, such as with oil from cutting machine, just replace them with non-damaged cards.&lt;/li&gt;&#xA;&lt;li&gt;Structure: You can make a card stiffer, and it will resist damage and wear more than the paper tape.  If you make the tape thicker , then it breaks down faster and you get less length per diameter of roll.&lt;/li&gt;&#xA;&lt;li&gt;Ergonomics: Human handle hand-sized things more efficiently.  If it is substantially smaller or larger then it is less easy to use and more easy to break/harm.&lt;/li&gt;&#xA;&lt;li&gt;Adjacent markets improve economy of scale.  Using the same stuff as 3x5 cards, birthday cards, signs, or such means you can have a larger market for the same operational equipment and same fundamental process.  People don't use paper tape rolls for birthday cards, or study notes.&lt;/li&gt;&#xA;&lt;li&gt;(repeat) Modularity: the tape is a single unit while each card is its own unit.&lt;/li&gt;&#xA;&lt;li&gt;standardization: it is easier to standardize the system on the card than the tape, and once standardized it allows better economy of scale&lt;/li&gt;&#xA;&lt;li&gt;many sensors prefer to operate on a planar surface than on a cylindrical one.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="21371" LastActivityDate="2021-04-12T16:40:13.963" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19577" PostTypeId="1" AcceptedAnswerId="19581" CreationDate="2021-04-12T17:45:57.660" Score="3" ViewCount="158" Body="&lt;p&gt;In the early decades of the industry, computers used punch cards for data storage and transmission, partly because they were already widely used for pre-computer data processing; indeed, a major reason for the ascendance of IBM as the number one computer company was that they already had relationships with businesses using IBM tabulation (electromechanical punch card processing) equipment, so it was straightforward to upsell them to IBM computers.&lt;/p&gt;&#xA;&lt;p&gt;Was it ever possible to take an actual existing punch card reader, and hack a connection to hook it up to a computer? (By analogy with the way existing audio cassette decks could be hooked up to some models of 8-bit computers to use cassettes for data storage. Or for that matter, with the way existing teletypes could be connected to computers, complete with paper tape readers and writers.) Or was it the case that yes the existing cards could be reused, but to use them with computers required designing and building all new equipment?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-04-13T03:54:10.453" Title="Could early computers use existing punch card machines?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;mainframe&gt;&lt;punched-cards&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19579" PostTypeId="2" ParentId="19574" CreationDate="2021-04-12T18:12:37.350" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The title of this question is now trivially answered. But what is the purpose of having LOC as well as ORG?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To control location within generated binary fine independent from location assumed by the assembly code.&lt;/p&gt;&#xA;&lt;p&gt;Keep in mind, early tools leave a way finer controll than one is used today - after all, there wasn't much of a canon how it should work, so best tools were the ones able to fit to each owns style.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In what situation is LOC necessary or useful?&#xA;When would de-synchronizing the two counters be desirable?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For sure not in trivial programs, but once leaving that there are many ways to make it useful. The most important is to save disk/tape space and speed up loading.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Does it have something to do with relocatable assembly?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Kind of, but it's rather about modularization within a single file.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Relocation&lt;/strong&gt; is about collecting information about code to address relation, which is used to patch a program at a later time to make it work on a specific address and/or to combine multiple programs by resolving pointers (addresses) inbetween. Essentially leaving the decision about location to a later stage of binding or as late as load time.&lt;/p&gt;&#xA;&lt;p&gt;Relocation essentially defers any (well, most) decisions about location during assembly/compile to later stages.&lt;/p&gt;&#xA;&lt;p&gt;Quite a handy thing, except, it does need a sophisticated system of linkers and loaders, depending on stage applied and capabilities needed. Similar it needs a set of conventions to work with - and as a side effect some constructs may be hard to create or need a lot of setup to configure them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Having the ability to independent control&lt;/strong&gt; of placing and assuming location direct in a programs source allows to gather many benefits of complex application structures without the need for sophisticated linkers, loaders and overlay managers.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In what situation is LOC necessary or useful?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Lets take the most obvious, overlays, as example. With rather limited memory overlays were &lt;em&gt;the&lt;/em&gt; way to go (*1). Of course one could put every overlay into a dedicated file and load it in times of need using whatever the file system and loader offered. Rather laborious when having many smaller modules that not only need to be loaded independent, but as well use the same address reference to global memory items they had to work with. I guess we all remember (early) C programming with tons of include files and constant haggling with including just as much as needed and so on. Imagine doing the same with punch cards stacks. Similar, noone will love you if you deliver an application, or some functions as a series of dozends of files that had to be kept consistent (*2)?&lt;/p&gt;&#xA;&lt;p&gt;Sounds like a nightmare? Well, it was. Not as bad as it sounds, but bad enough.&lt;/p&gt;&#xA;&lt;p&gt;So what about putting all into one source stack (file), delivering a single binary? With an independent LOC this can easy be done. Imagine a structure like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        START   APROG&#xA;&#xA;        ORG     0&#xA;        B       MAIN  * Goto MAIN&#xA;&#xA;COMMON  DS      0D&#xA;...     DS      ...    * Some common code and data&#xA;...     DS      ...&#xA;&#xA;        ORG     1*1024 * Real Programmers make code readable :))&#xA;MAIN    DS      0H&#xA;        ...     ...    * Main Program Code &#xA;&#xA;EOMAIN  DS      0D     * End of MAIN&#xA;&#xA;* Lets define the buffer to execute overlays and its size&#xA;OVLBUF  EQU     4*1024 * Overlay Area starts at 4 Ki&#xA;OVLSIZ  EQU     1024   * Hey, 1 KiB is a lot of code!&#xA;&#xA;        ORG     OVLBUF&#xA;&#xA;OVLINIT DS      0H&#xA;        ...     Code for a initial overlay,&#xA;        ...     maybe containing initialisation code,&#xA;        ...     to be discarded after first run? &#xA;&#xA;EOLOAD  DS      0D     * End address of static loaded&#xA;&#xA;* So far pretty standard, isn't it?&#xA;* But watch it when the next one comes&#xA;&#xA;OVLSTRT &#xA;&#xA;        ORG     0*OVLSIZ+OVLSTRT * or 5*1024&#xA;        LOC     OVLBUF           * that is 4*1024&#xA;&#xA;OVL0    DS      0H&#xA;        ...     Code for the first (real) overlay&#xA;&#xA;* But watch it when the next one comes&#xA;&#xA;        ORG     1*OVLSIZ+OVLSTRT * or 6*1024&#xA;        LOC     OVLBUF           * that is 4*1024&#xA;&#xA;OVL1    DS      0H&#xA;        ...     Code for the second overlay&#xA;&#xA;... and so on (*3)&#xA;&#xA;        END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This in this program all overlays can be written once, they all use the same definition for global data and all get outputted into a single binary file. But the code is generated in a way as if each of the overlay sections would have been assembled at the buffers address.&lt;/p&gt;&#xA;&lt;p&gt;At startup  (*4) only the part up to EOLOAD is loaded and execution started. It contains the main application including the overlay manager. Whenever one of the overlays is needed, the 'manager' would go to the programs disk file, read that overlay into the buffer and call it.&lt;/p&gt;&#xA;&lt;p&gt;Now, 'manager' sounds big, but in reality it takes an overlay number 0..n, multiplies it by OVLSIZ, adds OVLSTRT and reads from the overlay binary, starting at the value calculated, in length OVLSIZ, to OVLBUF. So essentially two assembly instructions and a file read call (*5).&lt;/p&gt;&#xA;&lt;p&gt;Looks like a handy way to have arbitrary large programs in limited space, doesn't it? And everything done with just the LOC and a bit of brainpower. No need for any tools. Stuff like that will run on bare metal - which was as important back then (*6), as it wasn't just about size or less capable tools, but no tools at all. The Assembler is all needed.&lt;/p&gt;&#xA;&lt;p&gt;Of course that is &lt;strong&gt;not the only usage&lt;/strong&gt;. Another would be assembling a program that has parts that need to end up in specific memory locations. While it may (or may not) be assembled with ORG, it would end up with many 'empty' data inbetween. At least without segmentation control. And with segmentation it needs a loader capable of moving that segments into their designated spaces.&lt;/p&gt;&#xA;&lt;p&gt;In fact, it is what compilers and their tools spit out: a binary blob, which does hold already relocated code, but not at the offsets (addresses) they are intended to run, so an OS' loader has to do that part. Hard on bare metal.&lt;/p&gt;&#xA;&lt;p&gt;In fact, if one takes a close look at more modern tools like CC65, it would reveal that the binary produced by the linker is exactly that, a sequence of segments, located at one offset but intended to run at another. With a single segment it's a direct loadable one, with a more complex structure a tiny loader stub is required. The linkage file delivers all needed information :)) (*7)&lt;/p&gt;&#xA;&lt;p&gt;Last but not least, the addition of LOC is the way to fir programs into any memory shape needed. Like when fitting stuff into code crated by a separate compiler, or creating compiler or an OS from scratch. Stuff important in the early days with its usefulness almost forgotten in a world cushioned on gigabytes of software layers.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;With ORG and LOC an Assembly programmer can design the binary created exactly the way he wants it, creating the things he needs without (much) need for other tools.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - This got as far as (later) transaction systems handling each and every transaction code as an overlay, loaded when that transaction was called -in memory strapped systems all into the same buffer, making it &lt;em&gt;quite&lt;/em&gt; slow, but making it run.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Yes, I know, today it's common to simply deliver 40,000 files for a notepad like application and expect them all to arrive well and unmangled at some wired configured Windows machine at the end of the world - aka your next door neighbour.&lt;/p&gt;&#xA;&lt;p&gt;The art of packaging got lost soon after DOOM.&lt;/p&gt;&#xA;&lt;p&gt;*3 - And yes, I know, this is made to be packaged in a nice set of macros doing all the calculation, but this is about showing the workings.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Which, if the OS doesn't support partial load,  might be done by a tiny startup stub, doing nothing else but replacing itself by the overlay files content up to EOLOAD.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Well, in a real one may add a check against max module number and as well provide a way to have overlays call each other - chaining that is, not subroutine call. And no, don't ask me about what spaghetti code that may end in. WE DID NOT HAVE THE MEANS TO WAST GIGABYTES ON SUCH MONDANE STUFF. So, call chaining it was :)&lt;/p&gt;&#xA;&lt;p&gt;*6 - It still is for that &lt;a href=&quot;https://chemnitzer.linux-tage.de/2021/de/programm/beitrag/225&quot; rel=&quot;nofollow noreferrer&quot;&gt;tiny crew of bare metal programmers&lt;/a&gt; still around. The ones that bring all your nifty complex systems like Linux onto a new SoC.&lt;/p&gt;&#xA;&lt;p&gt;*7 - I think I remember we already had exactly these two questions already about CC65 -wh does it produce a huge empty file when using ORG and how to load one that has segments.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-04-12T18:12:37.350" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19580" PostTypeId="2" ParentId="19545" CreationDate="2021-04-12T18:50:21.363" Score="2" Body="&lt;p&gt;As pointed out in the other answers, trying to &amp;quot;edit&amp;quot; paper tape directly is awkward.&lt;/p&gt;&#xA;&lt;p&gt;One solution is to have a batch editor that reads an edit tape into memory, then use the batch edit commands to read a source tape and punch an edited tape, according to the edit commands. A second tape reader could be used to reduce memory requirements.&lt;/p&gt;&#xA;&lt;p&gt;A more common situation is to keep text files on another medium other than paper tape, such as a disk or magnetic tape. Then paper tape is only used for the initial entry of data for text file, or for batch edit commands. This is what was done at my first job in 1973.&lt;/p&gt;&#xA;&lt;p&gt;As for long term backup, that company I worked for in 1973 would rent a high speed punch (400 characters per second for paper tape, 100 characters per second for mylar tape) and punch all of our source files onto mylar tape. We also backed up to magnetic tape, but if I recall correctly, mylar tape has a lifespan over 100 years.&lt;/p&gt;&#xA;&lt;p&gt;As for paper tape getting tangled, at that company in 1973, we used a 600 character per second photo reader that just spit out tape at 5 feet per second into a pyramid shaped pile onto the floor, and we used high speed electric rewinders to wind the paper tapes back into rolls, by winding the tape around a circular set of pins protruding from a flat round disc for easy removal of rolls after winding. Tangles and/or snags were very rare, and even when it happened, it rarely damaged the paper tape, unless the paper tape was really old. Dealing with old paper tape was not an issue once we started doing backups to mylar tape for long term (over 100 years) storage. If paper tape was torn, we had laced perforated scotch tape used to splice paper tape. The splice would not impact usage by teletype or high speed photo-electric reader.&lt;/p&gt;&#xA;&lt;p&gt;In the case of the HP 2100 series of mini-computers, the delete code deleted the entire current record rather than just a single character, so if a programmer made a mistake during entry on a teletype, delete, carriage return and line feed were used to delete that line and the line was re-entered. This was just a convention used by the HP mini-computers. I don't know if this convention was used on other systems.&lt;/p&gt;&#xA;&lt;p&gt;As a bit of trivia, Bill Gates and Paul Allen developed Basic for the Altair 8800 system (Intel 8080), bringing paper tape with the compiled output to load into the Altair 8800, only to realize on the plane that they didn't bring the load program, so Paul coded up a load program during the flight to toggle into the front panel of the Altair 8800.&lt;/p&gt;&#xA;" OwnerUserId="4660" LastEditorUserId="4660" LastEditDate="2021-04-13T20:19:09.720" LastActivityDate="2021-04-13T20:19:09.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19581" PostTypeId="2" ParentId="19577" CreationDate="2021-04-12T18:56:18.127" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Was it ever possible to take an actual existing punch card reader, and hack a connection to hook it up to a computer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, why? The existing tabulating machine was all about parallel processing.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or was it the case that yes the existing cards could be reused, but to use them with computers required designing and building all new equipment?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. Of course not. But 'using' equipment is more than just plugging it in.&lt;/p&gt;&#xA;&lt;p&gt;It's no either/or, but one as well as the other. All are parts of a process. The process is more than a single machine or computer and like with every change, a gradual one, possibly were bottlenecks are, is preferred over a green field approach. In turn one must look at the gradual changes that happened.&lt;/p&gt;&#xA;&lt;p&gt;Before (electronic) computers tabulating offered process steps like this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Data gets collected on punch cards, either&#xA;&lt;ul&gt;&#xA;&lt;li&gt;by being outputted by previous runs or&lt;/li&gt;&#xA;&lt;li&gt;by being keyed in with a key punch&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Processing happened&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Printed by an &lt;a href=&quot;https://technikum29.de/en/computer/punchcard.php#Alphabetic_Interpreter&quot; rel=&quot;nofollow noreferrer&quot;&gt;interpreter&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Sorted by a &lt;a href=&quot;https://technikum29.de/en/computer/punchcard.php#Sorters&quot; rel=&quot;nofollow noreferrer&quot;&gt;sorter&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Merged by hand&lt;/li&gt;&#xA;&lt;li&gt;Merged by a &lt;a href=&quot;https://technikum29.de/en/devices/punchcard-collator&quot; rel=&quot;nofollow noreferrer&quot;&gt;collator&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Selected by a sorter&lt;/li&gt;&#xA;&lt;li&gt;Searched by a collator&lt;/li&gt;&#xA;&lt;li&gt;Reproduced by a &lt;a href=&quot;https://technikum29.de/en/computer/punchcard.php#reproducing&quot; rel=&quot;nofollow noreferrer&quot;&gt;reproducing punch&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Summed up or multiplied by a &lt;a href=&quot;https://technikum29.de/en/computer/tabulating-machine.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;tabulator&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Data gets outputted&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Into new cards by a card punch&lt;/li&gt;&#xA;&lt;li&gt;Onto paper, by a printer, which in turn could be handled by&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Continuous_stationery#Decollator&quot; rel=&quot;nofollow noreferrer&quot;&gt;decollators&lt;/a&gt; and&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Continuous_stationery#Burster&quot; rel=&quot;nofollow noreferrer&quot;&gt;bursters&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So there are a lot of tools and steps for data processing to be used. And while most (andfinally all) can be replaced by a computer and additional devices, a new computer does also ft nicely into the existing landscape by first only replacing the tabulator. To do so he needs to be able to input and output cards, nothing else.&lt;/p&gt;&#xA;&lt;p&gt;Data gets still collected by halls of young girls typing them in (or grumpy old men in an autoparts store), stacks geht moved to the computer, processed there and then moved over to a printer (printing tabulator). So he could replace all, or most of the machinery, couldn't he?&lt;/p&gt;&#xA;&lt;p&gt;Well, yes, but why occupying precious processing time of that machine with a mundane task like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;sorting cards, when there's still the existing sorter?&lt;/li&gt;&#xA;&lt;li&gt;searching for records, when there is still a dedicated sorter?&lt;/li&gt;&#xA;&lt;li&gt;searching more convenient when there is still a collator?&lt;/li&gt;&#xA;&lt;li&gt;not to mention merge by simply stacking cards by hand?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Why blocking the computer with handling an (additional to pay for) printer, when that could still be done with the old printing tabulator, now plugged for straight printing out whatever is on a card?&lt;/p&gt;&#xA;&lt;p&gt;Any reasonable manager would only use the computer to replace the most strained device, the bottleneck - keep in mind, if there is no bottleneck, one doesn't need a new computer in the first place - and leave all the other parts of the process as they are.&lt;/p&gt;&#xA;&lt;p&gt;Of course, with faster machines and management seeing the benefits of buying a computer, it got additional card readers and card punches and sorters as well as collators went out of use (*1). Interpreters got replaced not by computers, but by card punches that could as well print and &lt;em&gt;new&lt;/em&gt; key punches with the same ability.&lt;/p&gt;&#xA;&lt;p&gt;The last one is an important point. with having a computer, it first extended and later gradually replaced the more complex separate machines, but need for key punches dod not vanish, but increas, so much that IBM (and others) introduced new models not only with the /360 in 1964 (029), but new designs as late as 1971 with the IBM 5924 Kanji keypunch and the transistorized and programmable 129.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Still, I've seen sorters used, or at least on stand by as late as 1978.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-12T19:31:22.683" LastActivityDate="2021-04-12T19:31:22.683" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19582" PostTypeId="1" CreationDate="2021-04-12T19:39:33.313" Score="40" ViewCount="8126" Body="&lt;p&gt;The first HP Laserjet only had 128K of memory. To print an area of 7.5 by 10 inches at 300 DPI requires 844K if it's kept as a single bitmapped image.  Obviously they were doing something clever to minimize the hardware requirements, but was it ever described anywhere?&lt;/p&gt;&#xA;" OwnerUserId="4461" LastEditorUserId="6794" LastEditDate="2021-04-15T14:49:34.203" LastActivityDate="2021-04-17T20:26:12.427" Title="How did early laser printers get by with so little memory?" Tags="&lt;memory&gt;&lt;printer&gt;" AnswerCount="11" CommentCount="10" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19583" PostTypeId="2" ParentId="19582" CreationDate="2021-04-12T20:25:16.987" Score="9" Body="&lt;p&gt;Looking at the &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_LaserJet&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article on the LaserJet&lt;/a&gt;, it looks like the printer couldn't rasterize a whole page of graphics and you needed a 512K LaserJet Plus to be able to do graphics covering most of a page.  That would mean the controller would be rasterizing text to the drum using the built-in ROM raster fonts.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The LaserJet Plus followed in September 1985, priced at US$3,995. It introduced &amp;quot;soft fonts&amp;quot;, treatments like bold and italic and other features including a parallel (Centronics) interface. It also included 512 kilobytes of memory, which was sufficient to print graphics at 300 dpi that covered about 70% of the letter-size page area.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="7619" LastActivityDate="2021-04-12T20:25:16.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19584" PostTypeId="2" ParentId="19582" CreationDate="2021-04-12T20:33:19.700" Score="42" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;To print an area of 7.5 by 10 inches at 300 DPI requires 844K if it's kept as a single bitmapped image.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Does it? Maybe.&lt;/p&gt;&#xA;&lt;p&gt;Then again one cold think of many simple ways (like RLL) to compress a rendered image fast and decompress it at a speed quite capable to keep up with the print-'head'.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Obviously they were doing something clever to minimize the hardware requirements, but was it ever described anywhere?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not sure what 'clever' thing is there to be done. Laser printers operate in a line by line base. Much like a TV, which as well needs zero buffer RAM. Of course in a digital environment it's handy to do this on a line by line base, so having the data for a whole scan line prepared before it's drawn, and prepare the next while that one is outputted. Much like double buffering is used in games to give a smooth screen.&lt;/p&gt;&#xA;&lt;p&gt;With 300 DPI that's about 7 times 300 = 2100 bits, or less than 300 bytes. Times 2 gives less than 1 KiB as preparation and scan buffer.&lt;/p&gt;&#xA;&lt;p&gt;Beside that, printers are meant to print text. That's as well true for laser printers. So all the task needs is a buffer with the actual line of text. Having that it transforms the character codes one by one into the dot image for that character and hands it over to the scan process modulating the laser beam. This gets repeated for the same line until all sub (scan) lines  are done - again much like with a classic video card.&lt;/p&gt;&#xA;&lt;p&gt;A line of text is most likely less than 200 bytes, so let's make that another KiB including double buffering.&lt;/p&gt;&#xA;&lt;p&gt;Having the next line at hand before the last is exhausted is again an advantage. In fact, considering the usual comparably slow interface speed back then - serial 9,600 for a laser wasn't uncommon slow - it did help having the whole page already transmitted (*1. So for regular text that's less than 6 Kib, but for the sake (and the way I used my first one in 1984 *2) lets assume 100 lines of 140 characters, so 14 KiB.&lt;/p&gt;&#xA;&lt;p&gt;And let's use double buffering again, for whatever reason, making it 28 KiB.&lt;/p&gt;&#xA;&lt;p&gt;With the scan buffers and memory management and whatsoever that comes down to needed RAM size of 32 KiB for a working laser printer.&lt;/p&gt;&#xA;&lt;p&gt;A laser does only need to buffer a single page, as it can quite well stop between pages.&#xA;The original &lt;strong&gt;HP Laserjet came in 1984 with 128 KiB&lt;/strong&gt;. That's plenty to store several pages of text, including format control and maybe even some small graphics - which in turn would as well be rather low in memory usage, as no software would consider more than like 72 DPI&lt;/p&gt;&#xA;&lt;p&gt;Yes, I already see the 'BUT', but hold it and think about. Back then PCs didn't bur out whole pages in bitmap - that would not only have been slow but as well looked quite ugly (*3). It was about text. Everything else were niche applications (*4).&lt;/p&gt;&#xA;&lt;p&gt;It was text, and it stayed that for quite some time - at least in a professional environment - the one able to afford a laser in the first place (*5). Two years after the LJ, the &lt;strong&gt;LJ+ was introduced, bringing 512 KiB&lt;/strong&gt; of RAM and optional parallel interface (*1). While RAM had become quite less expensive, HP raised the price by about 1k USD, rectified that it now could print full resolution graphics up to two third the size of a page.&lt;/p&gt;&#xA;&lt;p&gt;There was no postscript or any similar document language. It was simple serial data, much like the generation before. Text was transferred as ASCII, embraced by escape sequences for attributes like underlined, bold or maybe a second font, and graphics were delivered as 8 bits at a time, interpreted according to previous resolution setting.&lt;/p&gt;&#xA;&lt;p&gt;It wasn't until another year or so later that the high end models could be expanded to a megabyte and being able to deliver a whole page of graphics. Of course after waiting of 5-10 minutes for transferring the data :)&lt;/p&gt;&#xA;&lt;p&gt;Postscript as a built in feature was again several years later, ca 1990 or 1991.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Long story short, never implicit assume today's use case for yesterdays devices.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Speed is not just an issue of the printer receiving, but as well of the computer sending. But in this case, the LaserJet had already a hard time to keep up with text at 9,600. It could take image data a bit faster, but so make it worthwhile.&lt;/p&gt;&#xA;&lt;p&gt;The LJ+ could optionally be fitted with a parallel interface, but that wasn't faster at all. While it peaked out at 80 KiB/s, average speed was much like with 9,600 serial.&lt;/p&gt;&#xA;&lt;p&gt;The speed wasn't much of an issue. At 9600 a filled text page could be send in less than 10 seconds, so still faster than it could print. Of course, with graphics that changed a bit :))&lt;/p&gt;&#xA;&lt;p&gt;*2 - To print Assembler listings from our mainframe - it did quite well with the smallest front readable. After all, most important in a listing is to have as much visible at first sight, to avoid paging.&lt;/p&gt;&#xA;&lt;p&gt;*3 - That was one of the main drawbacks of early Macintosh and &lt;em&gt;one&lt;/em&gt; reason for its bad sales. Graphics were great and looked awesome, but text simply sucked. build in fonts, at least for better printers looked several times better than what the Mac produced.&lt;/p&gt;&#xA;&lt;p&gt;*4 - There were of course applications, and theyused massive enhanced printers.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Original first HP LJ in 1984 was around 3.5 kUSD&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="-1" LastEditDate="2021-04-14T20:30:22.207" LastActivityDate="2021-04-14T20:30:22.207" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19585" PostTypeId="2" ParentId="19570" CreationDate="2021-04-12T20:44:06.123" Score="4" Body="&lt;p&gt;Although it's often convenient to think of each instruction as starting with an opcode fetch, it's more accurate to think of each instruction's execution as starting on the cycle after its opcode is fetched, and extending through the fetch of the following opcode.  If one considers an instruction like &lt;code&gt;ADC #12&lt;/code&gt;, there's no way the processor can even begin to perform the addition until after it has fetched the operand byte, and there's almost no time between that and the start of the next instruction fetch.  Thus, instructions whose last step is to update a register will generally perform that last step during the fetch of the following opcode byte.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-04-12T20:44:06.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19586" PostTypeId="2" ParentId="19582" CreationDate="2021-04-12T21:17:51.813" Score="26" Body="&lt;p&gt;In addition to Raffzahn's usual excellent answer, a few important things to note:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;PCL still exists. You can (I do...) still write software that sends simple PCL commands to a printer to select fonts, print text, etc. Sending an entire page, &lt;em&gt;of text&lt;/em&gt;, as a bitmap to a printer is the way GDI printers work - and is a Very Bad Thing.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The original HP LaserJet had a few built-in bitmap fonts. Scalable fonts required both more memory and more CPU speed, and they came later. Downloadable bitmap fonts came later (and they still work). In ye olden days, if you wanted additional fonts, you got them on a ROM cartridge. Probably the most famous was a cartridge with tax fonts so that you could do the magical task of creating pixel-perfect IRS tax forms without graphics. That seems like no big deal today, but in the mid-1980s it was groundbreaking, and it didn't need tons of memory.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;After the LaserJet series evolved to have enough memory for full-page bitmapped graphics, along came the DeskJet (inkjet) series for the budget side of things. This repeated the original problem of memory limitations. In fact, the first DeskJet couldn't print landscape format, and I am pretty sure that is because of this same memory limitation. (I'm actually not sure how they handled landscape in the original LaserJet.)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A real 300-dpi resolution resulted in the best text (except perhaps a daisywheel) on a computer, short of a typesetting (film-based) system. Being able to produce fully formatted high-quality output at 6 pages per minute was incredible! This compared really well to:&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;daisywheel printers (incredibly slow)&lt;/li&gt;&#xA;&lt;li&gt;line printers (yes, you could hook up a big line printer to a PC, but they were moderate quality - fully formed characters but typically fixed pitch and only one font optimized for readability and not &amp;quot;style&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;dot-matrix printers - decent speed in low quality, low speed in high-quality, and the high-quality was nowhere near true 300-dpi&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Printing fancy graphics just wasn't as much of an issue. Consider that the typical business display was EGA 640x350 16 colors or Hercules 720x348. Besides, if your computer didn't even have 1 Meg. of RAM, why would your printer?&lt;/p&gt;&#xA;" OwnerUserId="4921" LastEditorUserId="4921" LastEditDate="2021-04-12T23:19:34.367" LastActivityDate="2021-04-12T23:19:34.367" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19587" PostTypeId="1" AcceptedAnswerId="19588" CreationDate="2021-04-12T22:06:09.347" Score="1" ViewCount="237" Body="&lt;p&gt;I'm building a minimal, minimum mode 8088 computer. I started with an 80C88-2 (CMOS, static variant) CPU. My configuration is really simple. One CPU, one 74HCT245 (DTR-&amp;gt;DT/R) for the data lines, two 74HCT573 (LE-&amp;gt;ALE, OE-&amp;gt;GND) for the address latch, and a clock source.&lt;/p&gt;&#xA;&lt;p&gt;My problem:&lt;/p&gt;&#xA;&lt;p&gt;I'm running a nop test. After reset the CPU starts at FFFF0, it's ok. It reaches FFFFF, then continues from 00000, again ok. But, when it reaches 0FFFF it becomes crazy, in the next cycle the A16-A19 lines blink one for a moment, I see a really short peek (5V) on this lines, but it's goes low before ALE goes low, then the cpu starts again from 00000 and this repeats every times when it reaches again the 0FFFF address. (This lines are multiplexed with the status lines, I think this is the source of my problem, but the latch not helps.)&lt;/p&gt;&#xA;&lt;p&gt;I tried other CPU, every works like this, I tried to replace the latch, run on high clock, slow clock, use pullups, nothing helped. I have no idea, why this lines are good only once after reset. What can be wrong with the four highest address lines?&lt;/p&gt;&#xA;" OwnerUserId="20400" LastEditorUserId="6659" LastEditDate="2021-04-12T22:29:59.797" LastActivityDate="2021-04-14T17:03:35.607" Title="8088 CPU A16-A19 address lines go crazy with nop test after 0FFFF address" Tags="&lt;hardware&gt;&lt;cpu&gt;&lt;8088&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19588" PostTypeId="2" ParentId="19587" CreationDate="2021-04-12T22:29:28.857" Score="10" Body="&lt;p&gt;It's simply how the 8086 works. it's a straight 16 bit CPU, isn't it?&lt;/p&gt;&#xA;&lt;p&gt;The CPU sees memory not as an 20 bit address space, only the BIU does (*1) when generating an access, but a 16 bit segment number, in CS, and a 16 bit PC in IP. The BIU uses a result derivated from CS and IP to access memory. When fetching instructions (without an MMU like in the 286) the BIU simply multiplies CS by 16, adds IP and fetches the next byte (or word) from there (*2).&lt;/p&gt;&#xA;&lt;p&gt;The PC gets incremented according to instructions (NOP) read. So what happens with a 16 bit register with a value of FFFFh when incremented by one? Exactly, 0000h!&lt;/p&gt;&#xA;&lt;p&gt;So, as mentioned, it does exactly what it's supposed, it loops thru the 64 Kib of 'code' the segment pointed to by CS offers. You discovered segmentation.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Which brings up a point were your observations are a bit off - by 16 bytes to be exact.:&lt;/p&gt;&#xA;&lt;p&gt;After Reset CS is set to FFFFh while IP is set to 0000h (*3). This means the first fetch happens from FFFF:0000h or FFFF0h on the bus. the next from FFFF:0001h and o on. When it hits FFFF:0010h, a first warp around will happen, as FFFF0h + 0010h equals 100000h - a carry to A20 (*4), not existing at the 8086, so what it outputs is 00000h. With monotonous increments it will hit FFFF:FFFFh at some point, which translates to the memory address of 0FFEFh.&lt;/p&gt;&#xA;&lt;p&gt;Having hit FFFFh, IP wraps and goes back to 0000h, now addressing again FFFF:0000h, or FFFF0h. Our hero finished his journey thru the wild lands of low memory and is back at a safe FFFF:0000h :)&lt;/p&gt;&#xA;&lt;p&gt;So what you see is not a 'blip' at A16..A19, but them being high for exactly 16 fetches reading the bytes from FFFF:0000h thru FFFF:000Fh and then going low for the next 65520 fetches covering FFFF:00010h to FFFF:FFFFh and so on, ad infinitum.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - BIU or Bus Interface Unit. The 8086 is structured into two somewhat independent units. The Execution Unit (EU) doing the computation and the BIU doing all interfacing. It contains everything that is memory related. that includes the PC and all Segment registers. That way it can (re) order access as needed and read ahead to fill the prefetch queue. An &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/7440/how-to-keep-the-instruction-prefetcher-filled-up/7442#7442&quot;&gt;Answer&lt;/a&gt; to a prefetch related question may give more details.&lt;/p&gt;&#xA;&lt;p&gt;*2 - It's a bit more complicated, as fetches move the IP ahead of execution, to fill the prefetch queue. It gets corrected to the next instruction to be executed whenever it needs to be accessed - essentially only with CALL.&lt;/p&gt;&#xA;&lt;p&gt;*3 - See table 2.4 in section System Reset on &lt;a href=&quot;https://archive.org/details/bitsavers_intel80869lyUsersManualOct79_62967963/page/n51/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 2-29 of the 8086 Family Manual&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;*4 - Yes, exactly that A20 were the gate is located - and the whole hardware behind the ability to access 1088 KiB minus 16 bytes on a 286 and later in real mode - but that's a different story.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-14T17:03:35.607" LastActivityDate="2021-04-14T17:03:35.607" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="19589" PostTypeId="2" ParentId="19582" CreationDate="2021-04-13T00:18:26.217" Score="11" Body="&lt;p&gt;To add to the other answers: Under Windows and GEM, printer drivers could store the current page as a metafile and rasterize it repeatedly as a series of horizontal bands, each band being large enough to fit into printer memory. This was slower than sending the data directly to the printer (since each page had to be rasterized repeatedly) but allowed an entire page of bitmap data when this was larger than the memory available to the printer.&lt;/p&gt;&#xA;&lt;p&gt;Microsoft Knowledge Base &lt;a href=&quot;https://jeffpar.github.io/kbarchive/kb/075/Q75471/&quot; rel=&quot;noreferrer&quot;&gt;article Q75471&lt;/a&gt; gives an outline of the process for Windows.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2021-04-13T00:18:26.217" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="19590" PostTypeId="1" AcceptedAnswerId="19591" CreationDate="2021-04-13T02:55:01.390" Score="3" ViewCount="228" Body="&lt;p&gt;One of the most important components of a computer is a circuit called a flip-flop, which has two stable states (that it can flip-flop between, hence the name); it is used for temporary storage of a single bit, in a way that can be accessed quickly.&lt;/p&gt;&#xA;&lt;p&gt;The first generation of computers, before transistors, had to build flip-flops out of vacuum tubes. Apparently this was done using &lt;a href=&quot;https://en.wikipedia.org/wiki/6SN7&quot; rel=&quot;nofollow noreferrer&quot;&gt;6SN7 tubes&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The wording of that article and the one on the &lt;a href=&quot;https://en.wikipedia.org/wiki/ENIAC&quot; rel=&quot;nofollow noreferrer&quot;&gt;ENIAC&lt;/a&gt; that links to it, suggests 6SN7s were used &lt;em&gt;as&lt;/em&gt; flip-flops, which suggests a one-to-one correspondence. But I'm used to a flip-flop being made of six transistors, which suggests it would need six triodes, and a 6SN7 contains two triodes (the vacuum tube equivalent of a very simple integrated circuit), which suggests it should take three of them to make one flip-flop.&lt;/p&gt;&#xA;&lt;p&gt;But I'm not very familiar with vacuum tube technology, and for all I know, maybe it doesn't work the same way.&lt;/p&gt;&#xA;&lt;p&gt;How many 6SN7s did it take to make one flip-flop?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10260" LastEditDate="2021-05-12T03:14:54.257" LastActivityDate="2021-05-12T03:14:54.257" Title="How many 6SN7 tubes did it take to store a bit?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;memory&gt;&lt;eniac&gt;&lt;vacuum-tube&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19591" PostTypeId="2" ParentId="19590" CreationDate="2021-04-13T03:20:53.433" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;But I'm used to a flip-flop being made of six transistors, which suggests it would need six triodes,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not really, a basic flip flop does not need 6 transistors. maybe there's a mix up with RAM cells? Two will do it quite fine (*1,*2). Similar the two triodes of a 6SN7 is all what's needed - well, plus two rather equal resistors between them and another two to restrict current flow.&lt;/p&gt;&#xA;&lt;p&gt;Going to the wiki main page about &lt;a href=&quot;https://en.wikipedia.org/wiki/Flip-flop_(electronics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;flip-flops&lt;/a&gt;  will not only show transitor based examples, but as well Eccles and Jordans patent drawing to do it with two valves. An en detail &lt;a href=&quot;https://spectrum.ieee.org/geek-life/hands-on/recreating-the-first-flipflop&quot; rel=&quot;nofollow noreferrer&quot;&gt;article&lt;/a&gt; can be found at the IEEE Spectrum web site.&lt;/p&gt;&#xA;&lt;p&gt;Of course, more complex flip-flop may need a higher number of active (valve/transistor) components, but that is for additional functionality beyond storing a bit.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - When thinking about basic (binary) electronics the first rule is that active elements are only need for inversion (and intermediate amplification). Everything else can be done by resistors and diodes.  Before TTL there was &lt;a href=&quot;https://en.wikipedia.org/wiki/Resistor%E2%80%93transistor_logic&quot; rel=&quot;nofollow noreferrer&quot;&gt;RTL&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Diode%E2%80%93transistor_logic&quot; rel=&quot;nofollow noreferrer&quot;&gt;DTL&lt;/a&gt;. The fact that we use transistors for almost everything is simply that they did become dirt cheap and can replace the two other elements, so only one design to care about.&lt;/p&gt;&#xA;&lt;p&gt;*2 - What a FF needs is circuit that is stable in one of two states. The most simple way to do so are two inverters connected in a 'circle' that is the output of one is the input of the other. It will stay quite stable - until the output of one gets overwritten by external 'force', making it flip into the other state.&lt;/p&gt;&#xA;&lt;p&gt;Two inverters, that's two active elements, no matter what technology is used, relays, valves or transistors, all the same.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-13T14:43:13.817" LastActivityDate="2021-04-13T14:43:13.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19592" PostTypeId="2" ParentId="19577" CreationDate="2021-04-13T03:46:08.437" Score="1" Body="&lt;p&gt;Reading a single punched card is not very difficult.  You just need enough photodiodes or spring pins to sense all the rows in one column, and a mechanism to advance the card precisely from one column to the next.  The tricky part is handling &lt;em&gt;many&lt;/em&gt; cards in sequence, and keeping them in sequence in the output tray for later reuse.&lt;/p&gt;&#xA;&lt;p&gt;IBM had already solved these problems when building high-volume tabulators and sorters, a business it inherited from the Hollerith company which it had absorbed some time before.  It was a relatively natural thing for IBM to adapt its existing card reader and card punch hardware from tabulator to computer interface.  These were the primary means of getting programs and data into the 1401 business computer, there being a card reader mounted on the side of the main CPU cabinet.&lt;/p&gt;&#xA;&lt;p&gt;Companies that &lt;s&gt;bought&lt;/s&gt; rented a 1401 were usually already using punched cards extensively.  Indeed, there were usually a card sorter and several manual reader/punch terminals in the computer room, as they were useful for operating the computer even though they weren't directly connected to it.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;As well as punched cards, another data storage medium widely used in the immediate pre-computer era was punched paper tape, most commonly for handling telegraph traffic.  This was adapted for data storage for several early computers, as early as the wartime Colossus (a big loop of tape held the Lorenz messages to be cracked) and as late as the Altair 8800.&lt;/p&gt;&#xA;&lt;p&gt;Many teletype terminals included paper tape reader/punch units, partly as a hangover from their original use in telegraphy.  The computer they were attached to could load data from the tape simply by dint of the user switching his teletype to read the tape instead of the keyboard.&lt;/p&gt;&#xA;&lt;p&gt;An early computer that relies heavily on its tape reader is the Harwell WITCH, built largely from surplus telephone equipment; the only way to load a program into its memory is to execute a program from paper tape.  Most of its peripheral devices considerably predate the computer itself.  It has been restored to working order by the Computer History Museum, and there are several videos on YouTube &lt;a href=&quot;https://www.youtube.com/watch?v=_-Pl5K-oU7Y&quot; rel=&quot;nofollow noreferrer&quot;&gt;showing it in action&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2021-04-13T03:54:10.453" LastActivityDate="2021-04-13T03:54:10.453" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19593" PostTypeId="1" AcceptedAnswerId="19610" CreationDate="2021-04-13T04:37:18.907" Score="10" ViewCount="269" Body="&lt;p&gt;Magnetic core, the primary form of computer memory from the mid-fifties to the early seventies or thereabouts, had the slightly awkward property that reading it erased it, so every time the CPU performed a read, it had to spend an extra few microseconds writing back the word it just read.&lt;/p&gt;&#xA;&lt;p&gt;It just occurred to me that you should be able to make such a computer more efficient by providing a variant instruction, read-and-erase, whose architectural specification would be 'read a word from memory into a register, and erase the memory location just read', and whose implementation would be 'read, and don't bother writing back'. It only occasionally happens in real code that you want to read a memory location and set it to zero, but it quite often happens that you don't care, you know the value in that memory location will only be used once, so it would be nice to save a few microseconds by skipping the writeback.&lt;/p&gt;&#xA;&lt;p&gt;Did any computers of that era, provide such a variant instruction? If not, why not? Is there any disadvantage I am missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-04-14T13:46:17.257" Title="Did any core-memory computers have a read-and-erase instruction?" Tags="&lt;history&gt;&lt;mainframe&gt;&lt;instruction-set&gt;&lt;architecture&gt;&lt;minicomputers&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19594" PostTypeId="1" AcceptedAnswerId="19616" CreationDate="2021-04-13T06:50:51.663" Score="22" ViewCount="3958" Body="&lt;p&gt;I'm used to the fact that first-generation computers were very expensive, which I had always assumed was because they contained large numbers of vacuum tubes, each of which is a rather complex, high precision little machine in its own right. So it's not too surprising that &lt;a href=&quot;https://en.wikipedia.org/wiki/ENIAC&quot; rel=&quot;noreferrer&quot;&gt;ENIAC&lt;/a&gt; cost $487,000, which was a lot of money in those days. According to that article,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;By the end of its operation in 1956, ENIAC contained 18,000 vacuum tubes; 7,200 crystal diodes; 1,500 relays; 70,000 resistors; 10,000 capacitors; and approximately 5,000,000 hand-soldered joints.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which sound like large numbers! So today I tried to find out exactly how much vacuum tubes cost, and found a 1948 issue of Billboard magazine (it's on Google Books, with one of those links that's a whole paragraph long in its own right; are those considered suitable for linking here?), listing prices for several kinds of vacuum tubes at less than a dollar each, including e.g. the 6SN7 which was one of the more important ones for building computers, at $0.75 each. That seems to be retail price in quantity one by mail order; wholesale would probably be less. Say it's $0.50 wholesale. So 18,000 of those would be $9,000.&lt;/p&gt;&#xA;&lt;p&gt;So what was the other $478,000 spent on?&lt;/p&gt;&#xA;&lt;p&gt;Other costs of using vacuum tubes, like electricity, and the technicians needed to be constantly replacing burned-out tubes? Perhaps significant, but out of scope here, being operating costs, whereas the above figure seems to be purely upfront purchase cost.&lt;/p&gt;&#xA;&lt;p&gt;Other electronic components? Doesn't look like it. The only more numerous one in the above list is resistors, and those have to be pretty cheap.&lt;/p&gt;&#xA;&lt;p&gt;Peripheral equipment like punch card readers? I don't think so. Everything I have read elsewhere says it was considered preferable to use standalone punch card equipment for any job it could do (like keying data onto cards, or sorting cards by sequence number) precisely because it was much &lt;em&gt;cheaper&lt;/em&gt; than a computer.&lt;/p&gt;&#xA;&lt;p&gt;The five million hand-soldered joints? Probably a significant cost, but doesn't seem like it should account for the bulk of it. A quick skim of &lt;a href=&quot;https://fraser.stlouisfed.org/files/docs/publications/bls/bls_0969_1949.pdf&quot; rel=&quot;noreferrer&quot;&gt;some hourly wage figures for the late forties&lt;/a&gt; suggests factory workers might've been typically paid more than a dollar an hour, say round up to two dollars for total cost of employment. To account for half of the total cost, the soldiered joints would've needed to cost 5 cents each. That would match if it takes 1.5 minutes to solder each joint. It's been three decades since I picked up a soldering iron, and I wasn't an expert with it even then, but that sounds on the high side. I don't think it should take that long.&lt;/p&gt;&#xA;&lt;p&gt;Inaccurate cost figure, or ENIAC unrepresentative? I don't think so; other computers of the era were even more expensive, for example &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_I&quot; rel=&quot;noreferrer&quot;&gt;Univac&lt;/a&gt; which ended up costing over a million dollars.&lt;/p&gt;&#xA;&lt;p&gt;Difference between manufacturing cost and sale price to account for manufacturer profit margin? Okay, that should be a significant chunk of the sale price, but not 90% of it.&lt;/p&gt;&#xA;&lt;p&gt;R&amp;amp;D cost? That would make sense for ENIAC, but not for Univac, because that ended up selling a total of 46 units, so R&amp;amp;D cost would be amortized to a much smaller sum per unit, yet the unit price was over double ENIAC.&lt;/p&gt;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-04-16T01:53:16.657" Title="What accounted for the cost of ENIAC?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;mainframe&gt;&lt;cost&gt;&lt;eniac&gt;" AnswerCount="4" CommentCount="11" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19595" PostTypeId="2" ParentId="19545" CreationDate="2021-04-13T10:40:26.337" Score="-2" Body="&lt;p&gt;I'm no historian, and this is not a valid answer. It is just that it cannot fix in a comment. But I don't see why punched card any better than fanfold tape.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Tape predates cards. Folded tape dates back to the 1920s(US1541201A).&lt;/li&gt;&#xA;&lt;li&gt;Colossus tape reader reads at 5000 cps in the 1940s, doubled card readers.&lt;/li&gt;&#xA;&lt;li&gt;Folded cards don't need rewinding or waste packaging space.&lt;/li&gt;&#xA;&lt;li&gt;You have to wait and refeed stacks of cards. Not the case of folded tape.&lt;/li&gt;&#xA;&lt;li&gt;You shouldn't expect non-tangling if you don't buy stiffer tapes.&lt;/li&gt;&#xA;&lt;li&gt;Every fold can be regarded as a record as cards do. But cards are no stream.&lt;/li&gt;&#xA;&lt;li&gt;If you can print line number at the end of card, so can each fold of tape.&lt;/li&gt;&#xA;&lt;li&gt;With line numbers, a buffered reader doesn't care if lines inserted or appended.&lt;/li&gt;&#xA;&lt;li&gt;Looking through folds of tapes is as easy as cards, and inserting not too difficult.&lt;/li&gt;&#xA;&lt;li&gt;Thiner tape wastes less paper even if you leave half fold of tape blank just as card.&lt;/li&gt;&#xA;&lt;li&gt;Paper tape can be full of holes while lace cards damage card reader.&lt;/li&gt;&#xA;&lt;li&gt;If binary mnemonic is needed, even narrower tape can afford some.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/gc8NC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gc8NC.png&quot; alt=&quot;All you need is 0x20-0x5F(64 chars), ctrl and shift will do the rest.&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If these reasons still don't stand, why there is no narrower, binary, separate but splicable cards comming into market?&lt;/p&gt;&#xA;" OwnerUserId="17812" LastActivityDate="2021-04-13T10:40:26.337" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19596" PostTypeId="1" CreationDate="2021-04-13T10:43:23.940" Score="5" ViewCount="449" Body="&lt;p&gt;ASCII was presented on paper tape where the lower 5 bits cross sprocket holes as following&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ggfj4.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ggfj4.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;While FIELDATA chose the other way&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3rtZE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3rtZE.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I found placing the higher, &lt;strong&gt;flag&lt;/strong&gt; bits at the narrow side appealing, since you have 5 consecutive bits on one side for 26 characters. but why the contrary way was chosen?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gc8NC.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gc8NC.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;REF: &lt;a href=&quot;http://www.quadibloc.com/crypto/mi060103.htm&quot; rel=&quot;noreferrer&quot;&gt;Character Codes&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;LINK: &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/19595/17812&quot;&gt;I don't see why punched card is any better than fanfold tape, but I digress.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17812" LastActivityDate="2021-04-13T11:11:40.650" Title="Why ASCII paper tape has lower bit punched from the narrow side?" Tags="&lt;history&gt;&lt;punched-cards&gt;&lt;ascii&gt;&lt;character-sets&gt;&lt;paper-tape&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19597" PostTypeId="2" ParentId="19596" CreationDate="2021-04-13T11:11:40.650" Score="10" Body="&lt;p&gt;If you want to read it as octal, having the low order 3 bits grouped together is handy.  Many of the early ASCII tables showed the codes in octal.  HEX makes more sense once your computers begin to work on 8 bit bytes,  but earlier computers had units like 36 bit words that were divisible by 3, and this led people to use octal for a few years.&lt;/p&gt;&#xA;&lt;p&gt;Punched cards are easier to edit.  If you ever had a program on paper tape that was missing a single comma,  you'll know what I mean.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2021-04-13T11:11:40.650" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19598" PostTypeId="1" AcceptedAnswerId="19604" CreationDate="2021-04-13T14:10:56.617" Score="6" ViewCount="295" Body="&lt;p&gt;Reading a fascinating online book about the history of computing, I came across this passage on &lt;a href=&quot;http://ds-wordpress.haverford.edu/bitbybit/bit-by-bit-contents/chapter-seven/7-5-assembly-language-programming/&quot; rel=&quot;noreferrer&quot;&gt;http://ds-wordpress.haverford.edu/bitbybit/bit-by-bit-contents/chapter-seven/7-5-assembly-language-programming/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The original FORTRAN compiler ran only on the 704, but programmers went on to develop FORTRAN compilers for other IBM computers, and competing manufacturers, licensed by IBM, adapted FORTRAN to their own machines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Wait a minute. Competing manufacturers, &lt;em&gt;licensed by IBM&lt;/em&gt;? In those days, you couldn't patent software. You couldn't even copyright it. Even nowadays, thanks to the recent Supreme Court decision in Oracle versus Google, it is legal to write your own implementation of someone else's programming language.&lt;/p&gt;&#xA;&lt;p&gt;So why would other manufacturers need a license? Why would there be any legal problem with them just going ahead and unilaterally writing their own Fortran compilers?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-04-14T06:36:50.410" Title="Did other computer companies need to license Fortran from IBM?" Tags="&lt;history&gt;&lt;ibm&gt;&lt;mainframe&gt;&lt;fortran&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19599" PostTypeId="2" ParentId="19594" CreationDate="2021-04-13T14:42:07.190" Score="24" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;So what was the other $478,000 spent on?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Paying people to design and build it would have been a fairly big component. People often underestimate the cost of labour, particularly if it is their own time. Also looking at the photos of it on wikipedia, there were a lot of components besides valves. There were racks and other cabinets and what looks like a fairly substantial air-con system. The power supply probably wasn't exactly &amp;quot;off the shelf either&amp;quot;. Also, I expect whatever the IO devices were wouldn't have been cheap.&lt;/p&gt;&#xA;" OwnerUserId="3297" LastActivityDate="2021-04-13T14:42:07.190" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19600" PostTypeId="2" ParentId="19545" CreationDate="2021-04-13T15:40:25.180" Score="2" Body="&lt;p&gt;Back in 1962, when I was in a class to learn machine &amp;quot;coding&amp;quot; on a Burrough's 205A, the first 6 instructions were hand entered with toggle switches on the actual computer rack. They were the &amp;quot;start up&amp;quot; instructions that made the 8 bit computer smart enough to read the paper tape accessory on the side of a KSR-33 teletype. The 205A had only 2K or rotating drum memory and was all electron tubes (12BH7's as I recall).&lt;/p&gt;&#xA;&lt;p&gt;Paper tape was miserable because it was unforgiving when you made a mistake. This was before electric typewriters.&#xA;Every instruction was a single line with a fixed memory address followed by the three hex character instruction and the object address. I.E. Fixed width instruction fields&lt;/p&gt;&#xA;&lt;p&gt;No &amp;quot;micro code&amp;quot;. No IEEE algorithms. You wrote your own subtraction routines as two's &amp;quot;complement add&amp;quot;. Multiplication was shift and add. Division was a nightmare and fractions were an adventure as was decimal to hex (no octal for you!).&lt;/p&gt;&#xA;&lt;p&gt;Hollerith cards, card punches, and sorters arrived with the IBM machines. The terror there was having errors of &amp;quot;0&amp;quot; or &amp;quot;O&amp;quot; (note the zero's were not slashed on the card punches) mistyped and buried in the deck.&lt;/p&gt;&#xA;&lt;p&gt;All in all, I remember it as a good time and exciting to be at an edge of technology.&lt;/p&gt;&#xA;&lt;p&gt;(EDIT) After 55 years, I wrote it wrong. What I see in the 205 Manuals is not what my mind remembers. I visualized octal and not BCD and 11 digits, but that could have been a PDP-8 remembrance. . . from a few years later.&lt;/p&gt;&#xA;&lt;p&gt;If you are curious about the instruction set, it is online at:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.org/pdf/burroughs/electrodata/205/3021_B205_Central_Computer_Hbk_Mar56.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.org/pdf/burroughs/electrodata/205/3021_B205_Central_Computer_Hbk_Mar56.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The startup procedure is on page 3-4 at :&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://bitsavers.org/pdf/burroughs/electrodata/205/3044-A_B205_Operating_Procedures_Jun60.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.org/pdf/burroughs/electrodata/205/3044-A_B205_Operating_Procedures_Jun60.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The control console is more what I visualize.&lt;/p&gt;&#xA;&lt;p&gt;The Burrough's manual notes that there was a thermal sensor on the exhaust that shut the unit off after the exhaust temp rose above a preset number for 15 minutes. HVAC maintenance was more important than the electronic technicians.&lt;/p&gt;&#xA;&lt;p&gt;As students, we were given lessons about register arithmetic and number base conversions between binary and BCD, word processing was unknown.&amp;quot;Sort-Merge&amp;quot;came much later as did a higher level language that was compiled.&lt;/p&gt;&#xA;&lt;p&gt;In:&#xA;Santa Cruz Sentinel, Volume 106, Number 44, 21 February 1962&#xA;Issue Page 34&lt;/p&gt;&#xA;&lt;p&gt;This is a picture of a few of the high school class in front of the 205. Always wondered how many of us went on to careers in electronics or CS.&lt;/p&gt;&#xA;" OwnerUserId="21386" LastEditorUserId="21386" LastEditDate="2021-04-15T02:22:07.660" LastActivityDate="2021-04-15T02:22:07.660" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19601" PostTypeId="2" ParentId="19590" CreationDate="2021-04-13T16:02:30.883" Score="2" Body="&lt;p&gt;A conventional flip flop requires the following:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Two inverting switching elements that will strongly pull their output in the direction opposite what's required to turn them on.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Two elements that can weakly pull the output of whichever switching element isn't on in the opposite direction.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Two elements that, in response to external stimuli, can pull those outputs in the same direction as the switching elements themselves would, strongly enough to overpower the elements described in #2.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In a modern CMOS memory, all six roles will be played by transistors.  In an ENIAC-era machine, role #1 would be played by a pair of valves (the circuit elements within typical vacuum tubes), and role #2 would probably be filled by a pair of resistors.  Use of resistors here will burn a lot of power, since they will not only oppose the output of whichever switch is off (which wouldn't consume any power), but also the one that's on.  I don't know what kind of element would have been used for #3.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-04-13T16:02:30.883" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19602" PostTypeId="2" ParentId="19582" CreationDate="2021-04-13T16:11:08.033" Score="7" Body="&lt;p&gt;The NeXT Laser Printer had no memory, but a fast non-standard interface fed it bits from its NeXTcube. The NeXT hardware architecture was built around a flexible multichannel DMA controller, so it was really efficient at copying bits from one place to another.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2021-04-13T16:11:08.033" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19603" PostTypeId="2" ParentId="19594" CreationDate="2021-04-13T16:14:42.907" Score="54" Body="&lt;p&gt;R&amp;amp;D stuff isn't manufactured (at first).&lt;/p&gt;&#xA;&lt;p&gt;It's usually partially constructed, ripped up, and redone, multiple times, with long testing and debug cycles in between, all the while with payroll running up the tab.  Tons (literally) of fried or used components and partial assemblies can go into the junk bin.  The specifications then often evolve with the early test results, requiring more redo's.  Then include building and rebuilding all the mechanical stuff as well as the electrical circuits and assemblies.  Add tooling, management, operations, floor space, clerical (women not-yet-called-programmers), and accounting, etc.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2021-04-16T01:53:16.657" LastActivityDate="2021-04-16T01:53:16.657" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19604" PostTypeId="2" ParentId="19598" CreationDate="2021-04-13T16:24:56.720" Score="4" Body="&lt;p&gt;The documentation, possibly including a language's keywords and their descriptions, could be copyrighted.  This is why Zilog Z80 assembly language is not compatible with or a strict superset of Intel 8080 assembly language; because, IIRC, Intel registered a copyright.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2021-04-14T06:36:50.410" LastActivityDate="2021-04-14T06:36:50.410" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19605" PostTypeId="2" ParentId="19582" CreationDate="2021-04-13T16:39:25.943" Score="11" Body="&lt;h2&gt;They simply didn't &lt;em&gt;let you&lt;/em&gt; send much of a bitmap&lt;/h2&gt;&#xA;&lt;p&gt;The first HP LaserJet printers on the market required you send jobs via PCL language.  The language was tuned to pretty much not let you do anything the printer couldn't handle.  PCL for the whole page needed to fit in the very limited RAM.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Needless to say, PostScript was out of the question&lt;/strong&gt; on these early printers, as PostScript was architected for &amp;quot;professional typesetter&amp;quot; level functionality at all costs, full knowing this would make a page buffer necessary and dramatically drive up the costs of the printer's rasterizer. Adobe was not after the low-end market.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Yes, the onboard CPU on the printer was rasterizing PCL &amp;quot;on the fly&amp;quot; trying to keep ahead of the drum/laser.  First, this was nothing new: video games were already doing that.  Second, you were married to the fonts HP provided in the printer, and nobody minded that because every printer up to this point did exactly the same thing.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;While the language tried to discourage it, and application developers tried to avoid it, one &amp;quot;could&amp;quot; create a job that the printer could not print for lack of ability of the CPU to keep up with the laser raster.  This would end in failure.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Apple's first printer was a totally different deal.  That &lt;em&gt;did&lt;/em&gt; come with 1MB of RAM and that &lt;em&gt;was&lt;/em&gt; used to pre-rasterize the entire page.   It was a really big deal, and added to the cost of the printer.   It then came with PostScript, which could do all the modern stuff you expect from printers today.  &lt;em&gt;&lt;strong&gt;Note that the PostScript could take literal minutes to rasterize a page,&lt;/strong&gt; even though the LaserWriter CPU was often more powerful than the Mac CPU&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It wasn't until the &lt;em&gt;&lt;strong&gt;HP LaserJet III&lt;/strong&gt;&lt;/em&gt; that it had (or could be made to have) enough RAM to rasterize a whole page.   And then yeah... you could get a PostScript cartridge that went in one of the font cartridge slots.&lt;/p&gt;&#xA;&lt;h2&gt;Font cartridges.  Really.  It was like that.&lt;/h2&gt;&#xA;&lt;p&gt;This didn't offend the market because Windows hadn't &amp;quot;arrived&amp;quot; yet. PC screens were 25x80, character cells were 8x8 (except the lavish IBM MGA which was 9x14) and PC display fonts still came from the video card hardware. Printers up til now had the font(s) they had.  So people were not picky. The text &amp;quot;character&amp;quot; was still the basic currency of computing.&lt;/p&gt;&#xA;" OwnerUserId="4330" LastEditorUserId="4330" LastEditDate="2021-04-17T20:26:12.427" LastActivityDate="2021-04-17T20:26:12.427" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19606" PostTypeId="2" ParentId="19582" CreationDate="2021-04-13T19:35:50.580" Score="1" Body="&lt;p&gt;The statement &amp;quot;Laser printer operate in a line by line base&amp;quot; is very misleading. (I'd make this a comment on that answer, but StackExchange won't let me). Yes, they might have had a mode of operation to emulate line printers and dot-matrix printers, but that's not their intrinsic behaviour. And the timelines seem a bit out too. I first had access to a laser printer some time around 1986, and we sent it Postscript generated by Ventura Publisher and Harvard Graphics. I remember also writing Postscript &amp;quot;by hand&amp;quot; to generate our company logo.&lt;/p&gt;&#xA;" OwnerUserId="21389" LastActivityDate="2021-04-13T19:35:50.580" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19607" PostTypeId="2" ParentId="19594" CreationDate="2021-04-13T20:24:14.613" Score="7" Body="&lt;p&gt;Here's a video about manufacturing &lt;a href=&quot;https://www.youtube.com/watch?v=s39Dzei2Z2I&quot; rel=&quot;noreferrer&quot;&gt;UNIVAC 1108&lt;/a&gt; (circa 1965, so a bit later but still illuminating). Notice how much is done by hand, even things like winding coils.&lt;/p&gt;&#xA;&lt;p&gt;According to the &lt;a href=&quot;http://gallery.lib.umn.edu/exhibits/show/digital-state/univac&quot; rel=&quot;noreferrer&quot;&gt;University of Minnesota&lt;/a&gt; the UNIVAC division employed about 10,000 people.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://ed-thelen.org/comp-hist/BRL64-u.html&quot; rel=&quot;noreferrer&quot;&gt;Price list&lt;/a&gt; for some UNIVAC 1104 components (long page of text, search for &amp;quot;UNIVAC 1004 PRICE LIST&amp;quot;). &lt;a href=&quot;https://www.fourmilab.ch/documents/univac/config1108.html&quot; rel=&quot;noreferrer&quot;&gt;Price list&lt;/a&gt; for some UNIVAC 1108 components. Another, longer, &lt;a href=&quot;http://bitsavers.trailing-edge.com/pdf/univac/1100/datapro/70C-877-11_7009_UNIVAC_1106_1108.pdf&quot; rel=&quot;noreferrer&quot;&gt;price list&lt;/a&gt; for UNIVAC 1106 and 1108 (PDF, price list starts on page 10).&lt;/p&gt;&#xA;&lt;p&gt;So, labor costs. Making the parts, manual QA on the parts, assembling the parts into a whole. Loss on parts that don't pass QA. Maybe some jobs can be done by a worker with only basic training, but a lot of the tasks look like they need quite a lot of skill.&lt;/p&gt;&#xA;&lt;p&gt;Some of the machines to make and test parts look pretty expensive just by themselves, so you have to amortize those across all of the units.&lt;/p&gt;&#xA;&lt;p&gt;You have to pay for the R&amp;amp;D of the previous system, but also have enough profit to fund R&amp;amp;D for the next system.&lt;/p&gt;&#xA;&lt;p&gt;Advertising costs.&lt;/p&gt;&#xA;" OwnerUserId="10749" LastActivityDate="2021-04-13T20:24:14.613" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19608" PostTypeId="2" ParentId="19582" CreationDate="2021-04-13T20:49:08.143" Score="6" Body="&lt;p&gt;First of all, don't underestimate what can be done with 128K of memory. The original LaserJet was released in the era of the IBM 5150, whose base configuration had only 16-64K memory. As another comparison, the original Game Boy handheld had just 4K of memory and game cartridges were as small as 32K, yet were capable of doing quite a bit graphics-wise. They accomplished this not by storing all their graphics in fully-rendered bitmap format, but by storing a sequence of drawing instructions that would generate the desired output image.&lt;/p&gt;&#xA;&lt;p&gt;Similarly, printers used a &lt;em&gt;Page Description Language&lt;/em&gt; (PDL) instead of being sent a bitmap.  This allows the page's contents to be described at a higher level and can save a considerable amount of space vs. a bitmap. Graphics could be sent in a vector format, and the printer would rasterize them as it went down the page.&lt;/p&gt;&#xA;&lt;p&gt;One of the more popular PDLs was &lt;a href=&quot;https://en.wikipedia.org/wiki/PostScript&quot; rel=&quot;noreferrer&quot;&gt;PostScript&lt;/a&gt;.  I recommend reading though the Wikipedia article for it, as it contains a lot of good information about the problems that printers had at the time and the things that PostScript (and other technologies) did to work around them.  Another popular PDL was HP's &lt;a href=&quot;https://en.wikipedia.org/wiki/Printer_Command_Language&quot; rel=&quot;noreferrer&quot;&gt;PCL&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;As an example, printing a simple line of text would look like this in PostScript:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;%!PS&#xA;/Courier&#xA;20 selectfont&#xA;72 500 moveto&#xA;(Hello world!) show&#xA;showpage&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You tell the printer what text to print, at what page coordinates and using which font. The printer figures out the rest as it goes. That's 75 bytes compared to the &amp;gt;800K that would be required for a bitmap of the same page.  IIRC, HP's PCL was even more compact (at the expense of easy readability by humans).&lt;/p&gt;&#xA;&lt;p&gt;This is just a slight evolution of the way existing print devices worked.  At that time, text was printed using a daisy-wheel printer (works like an automated typewriter) or a dot-matrix printer. You had extremely limited options for things like font or print size, and what was sent to the printer was mostly just the text to print. &lt;a href=&quot;https://en.wikipedia.org/wiki/Plotter&quot; rel=&quot;noreferrer&quot;&gt;Plotters&lt;/a&gt; were used for drawing graphics. They used &lt;a href=&quot;https://en.wikipedia.org/wiki/Vector_graphics&quot; rel=&quot;noreferrer&quot;&gt;vector images&lt;/a&gt;, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/HP-GL&quot; rel=&quot;noreferrer&quot;&gt;commands to control them&lt;/a&gt; consisted of commands like &amp;quot;lift pen&amp;quot; or &amp;quot;put pen down and draw line to point (x,y)&amp;quot;. The PDLs used on the first LaserJet printers followed the same concepts as the plotter control languages.&lt;/p&gt;&#xA;&lt;p&gt;You are correct that there isn't enough space to store a full-page bitmap for printing, but that sort of thing wasn't even on anybody's mind at the time.  It wasn't really a consideration until the &amp;quot;desktop publishing revolution&amp;quot; of the late 80s/early 90s where inkjet printers became common household items. Businesses were accustomed to using a professional print shop for full-page images, and it was several LaserJet generations before that changed.&lt;/p&gt;&#xA;&lt;p&gt;A big problem in those times was a printed page not quite looking the same way that it looked on the screen. You told the printer to use &amp;quot;Courier&amp;quot; but its hard-wired Courier font might be slightly different than yours so the results were not quite what you were expecting. Some LaserJet models supported an add-on cartridge that contained font definitions that matched the fonts pre-installed with Windows. Eventually, printers started supporting the ability to upload fonts for it to use for a particular document. I can remember in the early 90s buying a collection of &amp;quot;printer-friendly&amp;quot; fonts, which were designed to look the same way on the screen and when printed.  These fonts are stored as a sequence of curves (vectors), unlike the more-traditional bitmapped fonts. They could be scaled to any size and since they were small enough to fit into a printer's limited memory, you could ensure the exact same font was used when printing as when displaying on the screen.&lt;/p&gt;&#xA;" OwnerUserId="13431" LastActivityDate="2021-04-13T20:49:08.143" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19609" PostTypeId="1" CreationDate="2021-04-14T00:59:09.843" Score="5" ViewCount="197" Body="&lt;p&gt;I watch many live video + audio streams of people playing old video games, such as NES ones.&lt;/p&gt;&#xA;&lt;p&gt;An extremely recurring annoyance is that, for example, when the main character is damaged and is supposed to be &amp;quot;blinking&amp;quot; rapidly, it appears completely empty on the stream. Or, a quick running animation appears like Mario is stuck in one frame, not animated at all.&lt;/p&gt;&#xA;&lt;p&gt;I realize that this must have something to do with the number of frames per second captured, or perhaps how those are &amp;quot;synced&amp;quot;, or something like that. But how to solve it? Is it easy? And does said solution necessarily require a 60 FPS capturing/streaming setup, or can you simply tell the capture software/hardware to &amp;quot;pick different/random frames&amp;quot; or something?&lt;/p&gt;&#xA;" OwnerUserId="21391" LastActivityDate="2021-04-14T01:50:13.017" Title="Is there some simple way to avoid the artifact of &quot;invisible&quot; or &quot;stuck&quot; animation in old video games when streaming video?" Tags="&lt;nes&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19610" PostTypeId="2" ParentId="19593" CreationDate="2021-04-14T01:11:43.420" Score="7" Body="&lt;p&gt;Yes. Sort of.&lt;/p&gt;&#xA;&lt;p&gt;The KDF9 had an accumulator stack (the 'nesting store' or nest) which was mostly made of fast (1µs read, 1.5µs write) core - the top 3 elements were in fast registers, with 16 words of core underneath.&lt;/p&gt;&#xA;&lt;p&gt;Arithmetic was done on the top elements of the nest, popping off operands and pushing the result in the usual manner.  Though the top cells were in fast registers, any addition/removal there implied a change in the core part of the nest. This did not physically move contents up and down the stack, of course - a register tracked logical top of stack.&lt;/p&gt;&#xA;&lt;p&gt;Once a word was popped off the core stack, the core location that had held that word was no longer accessible, so it did not matter if it had been erased by the read. There was no write-back cycle for the nest.&lt;/p&gt;&#xA;&lt;p&gt;In fact, the erase was essential, since a push or'd the new content into the core location (*1). Unused nest locations must therefore be zero.&lt;/p&gt;&#xA;&lt;p&gt;See section 4.2 in &lt;a href=&quot;http://www.findlayw.plus.com/KDF9/The%20Hardware%20of%20the%20KDF9.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;The Hardware of the KDF9&lt;/em&gt;&lt;/a&gt;, by Bill Findlay.&lt;/p&gt;&#xA;&lt;p&gt;So - implicitly, all operations on the nest were of the read-and-erase kind.&lt;/p&gt;&#xA;&lt;p&gt;There was a separate return-address stack, the SJNS or Subroutine Jump Nesting Store, which likely did the same thing.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;(*1) Core store writes normally do a read cycle first, to zero the location, followed by a write to flip the magnetization direction of the bits that are to be set to 1 (effectively or'ing the new data into the word of zeroes). The read cycle was omitted for pushes onto the nest. That is, there are two complementary performance enhancements in the KDF9 nest. By omitting the write cycle on a pop, the cell is left clear, so you can then omit the read cycle on a push.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-04-14T13:46:17.257" LastActivityDate="2021-04-14T13:46:17.257" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19611" PostTypeId="2" ParentId="19609" CreationDate="2021-04-14T01:50:13.017" Score="7" Body="&lt;p&gt;It's a classic aliasing error resulting from point sampling — the original hardware is alternating a character between visible and invisible once per frame, or between two frames of animation, but the video stream is capturing only every other frame.&lt;/p&gt;&#xA;&lt;p&gt;So the ideal option would be to stream at the original frame rate. That's often not exactly possible as e.g. on an NTSC NES video is output at just below 60.1Hz whereas streaming is likely locked to 60Hz, like 95% of monitors. So if you just sampled whole input frames for output then you'd miss one every ten seconds or so. But streaming at 60Hz would be a lot closer to accurate.&lt;/p&gt;&#xA;&lt;p&gt;The other obvious alternative is frame blending; you could do a straight 50:50 blend if resampling to 30Hz or you could try for an infinite impulse response filter in which to advance from frame n to &lt;code&gt;n+1&lt;/code&gt; based on new input &lt;code&gt;r&lt;/code&gt; you'd compute &lt;code&gt;n+1 = r*k + n*(1-k)&lt;/code&gt; for some &lt;code&gt;k&lt;/code&gt; in the range 0 to 1 (and usually fairly close to 1). That would cause the last few frames to be blended into the current, with a discrete logarithmic decay.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2021-04-14T01:50:13.017" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19612" PostTypeId="2" ParentId="19593" CreationDate="2021-04-14T02:41:41.507" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Did any computers of that era, provide such a variant instruction?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Kind of, the /360 (1964) implemented a Test and Set (TS) instruction for process synchronisation. A byte addressed was read, tested for zero/not zero (*1) and written back with all bits set (X'FF'). This write back was done not by the CPU in a follow up write access, but by the memory interface as part of the Read/Refresh cycle, thus guaranteed being as atomic as it ever can get (*2)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there any disadvantage I am missing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not writing back is a bad idea as it leaves memory in an undefined state - a classic source for program errors to hit. Also, any way to do so would need the write back being an active action from the CPU. Something maybe inherent on small/slow machines, designed to save money. On any computer that is about performance the refresh cycle would be done by the memory controller, independent of the CPU.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Nice modern fact, even though the /370 added a way more capable Compare and Swap (CS) instruction, which way more handy for managing linked lists in a multi-process(or) system, &lt;a href=&quot;https://www.ibm.com/docs/en/ztpf/2020?topic=configuration-test-set-instruction&quot; rel=&quot;nofollow noreferrer&quot;&gt;TS still performs better&lt;/a&gt; on even the newest zSeries machines - exactly due the way that the change is quite local, needs less resources and can be done without waiting for the CPU.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - While I think that the whole byte that was tested - at least that's the way I always used it, it might as well be only the high bit - or at least only on some machines.&lt;/p&gt;&#xA;&lt;p&gt;*2 - This has already &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/11937/how-was-concurrent-programming-achieved-on-the-pdp-10/11939#11939&quot;&gt;been mentioned&lt;/a&gt; in relation to synchronisation instructions.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-14T02:49:15.240" LastActivityDate="2021-04-14T02:49:15.240" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19613" PostTypeId="1" AcceptedAnswerId="19615" CreationDate="2021-04-14T03:22:07.183" Score="19" ViewCount="1629" Body="&lt;p&gt;8086 is source code compatible with 8080. Zilog Z80 extended Intel 8080 with:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An enhanced instruction set including bit manipulation, block move, block I/O, and byte search instructions&lt;/li&gt;&#xA;&lt;li&gt;New IX and IY index registers with instructions for direct base+offset addressing&lt;/li&gt;&#xA;&lt;li&gt;A better interrupt system...[&lt;a href=&quot;http://www.vcfed.org/forum/showthread.php?35841-What-s-the-difference-between-a-8085-processor-and-a-Z80&quot; rel=&quot;noreferrer&quot;&gt;1&lt;/a&gt;]&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Is it possible to translate Z80 asm into 8086, even with different register layout?&#xA;There was a &lt;a href=&quot;https://archive.org/details/bitsavers_seattleComlator_804830/&quot; rel=&quot;noreferrer&quot;&gt;translator&lt;/a&gt; but it left some opcode untranslated and needed human intervention.&lt;/p&gt;&#xA;&lt;p&gt;PS: What about 8085's extention to 8080? Can these features be adapted for Z80 or 8086?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80#Datapoint_2200_and_Intel_8008&quot; rel=&quot;noreferrer&quot;&gt;Illustration of four syntaxes, using samples of equivalent, or (for 8086) very similar, load and store instructions.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Intel 8008&lt;br&gt;Datapoint 2200&lt;/th&gt;&#xA;&lt;th&gt;Intel 8080&lt;br&gt;Intel 8085&lt;/th&gt;&#xA;&lt;th&gt;Zilog Z80&lt;/th&gt;&#xA;&lt;th&gt;Intel 8086&lt;br&gt;Intel 8088&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;before ca. 1973&lt;/td&gt;&#xA;&lt;td&gt;ca. 1974&lt;/td&gt;&#xA;&lt;td&gt;1976&lt;/td&gt;&#xA;&lt;td&gt;1978&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;LBC&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV B,C&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD B,C&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV BL,CL&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LDAX B&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD A,(BC)&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV AL,[BX]&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;LAM&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV A,M&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD A,(HL)&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV AL,[BP]&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;LBM&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV B,M&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD B,(HL)&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV BL,[BP]&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;STAX D&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD (DE),A&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV [DX],AL&lt;/code&gt;&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zilog_Z80#cite_note-35&quot; rel=&quot;noreferrer&quot;&gt;[x]&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;LMA&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV M,A&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD (HL),A&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV [BP],AL&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;LMC&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV M,C&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD (HL),C&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV [BP],CL&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;LDI 56&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MVI D,56&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD D,56&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV DL,56&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;LMI 56&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MVI M,56&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD (HL),56&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV byte ptr [BP],56&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LDA 1234&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD A,(1234)&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV AL,[1234]&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;STA 1234&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD (1234),A&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV [1234],AL&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD B,(IX+56)&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV BL,[SI+56]&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD (IX+56),C&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV [SI+56],CL&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD (IY+56),78&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV byte ptr [DI+56],78&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LXI B,1234&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD BC,1234&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV BX,1234&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LXI H,1234&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD HL,1234&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV BP,1234&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;SHLD 1234&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD (1234),HL&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV [1234],BP&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LHLD 1234&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD HL,(1234)&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV BP,[1234]&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD BC,(1234)&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV BX,[1234]&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;LD IX,(1234)&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;MOV SI,[1234]&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;" OwnerUserId="17812" LastEditorUserId="16273" LastEditDate="2021-04-14T22:12:45.510" LastActivityDate="2021-04-20T08:15:39.863" Title="Z80 to x86 asm translator?" Tags="&lt;assembly&gt;&lt;z80&gt;&lt;8080&gt;&lt;8086&gt;&lt;8085&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19614" PostTypeId="1" AcceptedAnswerId="19618" CreationDate="2021-04-14T03:36:49.767" Score="5" ViewCount="938" Body="&lt;p&gt;I'm trying to gain some understanding of how early computers were built; as discussed in &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/19594/what-accounted-for-the-cost-of-eniac&quot;&gt;What accounted for the cost of ENIAC?&lt;/a&gt; the cost of first-generation computers was not necessarily mostly about the cost of purchasing the components; much of it was about the costs of assembly, testing and suchlike.&lt;/p&gt;&#xA;&lt;p&gt;In later decades, printed circuit boards came to be heavily used, but as I understand it, not only had they not yet been invented in the forties and fifties when vacuum tubes were most heavily used, but PCB materials do not stand up well to continual exposure to concentrated heat sources like, well, vacuum tubes.&lt;/p&gt;&#xA;&lt;p&gt;Wire wrap was used in the transistor era, the sixties and seventies, not just for prototyping, but also for manufacturing. It would seem on the face of it to be suitable for vacuum tube computers. On the other hand, I found this discussion: &lt;a href=&quot;https://www.diyaudio.com/forums/tubes-valves/287205-vacuum-tubes-wire-wrap.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.diyaudio.com/forums/tubes-valves/287205-vacuum-tubes-wire-wrap.html&lt;/a&gt; in which a poster suggests wire wrap and vacuum tubes do not mix:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, after much experimentation, it became clear that wire wrap was only good for the short term, by itself. If the piece of built-stuff flexed much, then eventually oxidation would set in and make some one of the hidden dozens-to-hundreds of connections vexingly noisy. And never when debugging.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That would seem to leave vacuum tube computers to be constructed by 'point-to-point construction' which seems to be the technical term for 'just solder all the components individually'.&lt;/p&gt;&#xA;&lt;p&gt;This is counterintuitive; it feels to me like wire wrap should be more resilient than soldered joints, therefore better able to withstand thermal cycling. But I'm no electrical engineer; my intuition might be wrong. And while I can find plenty of mention of transistor computers being built (for production, not just prototyping) with wire wrap, I cannot find any mention of vacuum tube computers being so built.&lt;/p&gt;&#xA;&lt;p&gt;Were any vacuum tube computers built with wire wrap? If so, did it work reliably? If not, why not?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="10260" LastEditDate="2021-05-12T03:13:51.583" LastActivityDate="2021-05-12T03:13:51.583" Title="Were any vacuum tube computers built with wire wrap?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;mainframe&gt;&lt;vacuum-tube&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19615" PostTypeId="2" ParentId="19613" CreationDate="2021-04-14T04:08:21.680" Score="20" Body="&lt;p&gt;I'm going to say &amp;quot;No&amp;quot; simply because the 8086 doesn't support the alternate registers of the Z80. That was a fairly important concept that you can not directly mimic on the 8086.&lt;/p&gt;&#xA;&lt;p&gt;Mind, if you're willing to dedicate memory and whatnot to support it, then, &amp;quot;sure&amp;quot;. Replace the Z80 functionality with a macro, say. But now you're stretching it. Your instruction count was going to change.&lt;/p&gt;&#xA;&lt;p&gt;Also 8086 &lt;code&gt;MOVSB&lt;/code&gt; is not the same as the Z80 &lt;code&gt;LDIR&lt;/code&gt;, it works on different registers.&lt;/p&gt;&#xA;&lt;p&gt;There may well be other differences.&lt;/p&gt;&#xA;&lt;p&gt;The idea was that you could translate 8080 to 8086, one instruction for one instruction. But the Z80 was not an Intel chip, it was a Zilog chip. As much as Intel may have wanted to perhaps support it, they may have chosen not too.&lt;/p&gt;&#xA;&lt;p&gt;So, a 1:1 Z80 ⟶ 8086 translation could not be done perfectly. You could get quite a ways with a simple macro assembler, but there would absolutely be differences that would best be hand-checked in the end.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="7946" LastEditDate="2021-04-20T08:15:39.863" LastActivityDate="2021-04-20T08:15:39.863" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19616" PostTypeId="2" ParentId="19594" CreationDate="2021-04-14T05:28:48.983" Score="20" Body="&lt;p&gt;One of the biggest factors is that when you have a machine that requires 5,000,000 successful solder joints to function properly, you need to make sure that all of your solder joints are really really good. If 1 in 10,000 of your solder joints is subtly bad, that means that the first time you try to put everything together you will have 5000 bad solders and the machine will be no where near functioning. Any time you have to troubleshoot this, it's probably taking at least 30 minutes due to the size of the machine, and the fact that hardware bugs aren't obvious. Now throw in the fact that all of the 18,000 vacuum tubes, 7,200 crystal diodes, and 1,500 relays are mechanical devices and will all fail at various rates. These aren't 21st century electronics, at least one of these components probably fails on your average day. Each time this happens, you have to go through and figure out what went wrong and replace it. On a related note, much of the engineering on early computers wasn't focused on speed as much as minimizing components. Why? Because if your machine was too big, the odds of being able to complete a calculation before hardware failure goes down dramatically.&lt;/p&gt;&#xA;&lt;p&gt;This gets especially complicated once you realize that one possible side effect of a component failing is letting through too much current. The reason this is so bad is it means one component failing can fry many other things in the vicinity.&lt;/p&gt;&#xA;&lt;p&gt;As such, the number of components in the final machine isn't that useful a number, because the number used over the lifespan of the project is likely much higher, and all the adding and removing of components during troubleshooting is much more expensive than initial construction.&lt;/p&gt;&#xA;" OwnerUserId="21394" LastActivityDate="2021-04-14T05:28:48.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19617" PostTypeId="2" ParentId="19613" CreationDate="2021-04-14T05:31:43.073" Score="9" Body="&lt;p&gt;Sure, a lot can be done. Source code translation always offers the possibility to replace one instruction by a sequence - like Intel already did for a few. This would as well solve the issue of incompatible hardware, like simply exchanging all registers with a copy in memory when the alternate register set is selected.&lt;/p&gt;&#xA;&lt;p&gt;Just, who should do this?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Intel&lt;/strong&gt; had only interest to support their customers. Taking on all the support pitfalls for a rare chance to win over customers that have already left Intel? With a CPU that, despite all improvements, still cannot compete with the Z80 in the important area of interrupt handling? Interrupt handling was the main reason for professional customers to switch to Zilog. Not funny instructions.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Zilog&lt;/strong&gt; had even less motivation to support porting Z80 code to x86 as that would mean loosing customers.&lt;/p&gt;&#xA;&lt;p&gt;Lastly, there would be &lt;strong&gt;software companies&lt;/strong&gt;, but their need was also rather limited. The ones writing machine-independent software did not use Z80 extensions, as they preferred to have a single binary for all of the CP/M world. Producers of machine-dependent software on the other hand were much more about performance; any automatic translation would have helped only at the curiosity level.&lt;/p&gt;&#xA;&lt;p&gt;For the 8085, Intel simply resolved that issue by not making any of the new instructions officially available. The only official new ones were &lt;code&gt;RIM&lt;/code&gt;/&lt;code&gt;SIM&lt;/code&gt; and these are part of interrupt management, something that had to be rewritten anyway when porting to x86.&lt;/p&gt;&#xA;&lt;h3&gt;Bottom line&lt;/h3&gt;&#xA;&lt;p&gt;While it would be possible, there was no real need to do so.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-04-20T08:13:56.750" LastActivityDate="2021-04-20T08:13:56.750" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19618" PostTypeId="2" ParentId="19614" CreationDate="2021-04-14T05:51:21.033" Score="10" Body="&lt;p&gt;Wire Wrap as used in computers is simply a later development then the ENIAC or vacuum tubes in general (*1).&lt;/p&gt;&#xA;&lt;p&gt;The Keller tools were first marketed in 1953 and it took a few more years until they made their way from telephone to computers. IBM might have been the first, around 1960, a bit before the /360 came which, used it a all over.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In contrast, PCBs were developed prior to the ENIAC. But yeah, not really widespread enough to make it worth using a new technology like that.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-16T11:48:24.757" LastActivityDate="2021-04-16T11:48:24.757" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19620" PostTypeId="1" CreationDate="2021-04-14T08:54:10.237" Score="15" ViewCount="284" Body="&lt;p&gt;This is about the &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_System_i&quot; rel=&quot;noreferrer&quot;&gt;AS/400&lt;/a&gt; which is an IBM mini-computer launched in 1988.  It lives on today after several name changes and considerable hardware and software changes.  It is still often informally called the AS/400 but this is about the early days when that was still the official name.  OS/400 was its operating system and the two were tied to each other.&lt;/p&gt;&#xA;&lt;p&gt;I read, back in the 1990s, that there was a special system program which if deleted would trigger the O/S to uninstall itself during the next IPL (boot).  The idea was that an IBM engineer could delete this program if they detected that the system was unlicensed.  I think that I read this in an official, reliable source but I cannot be sure after so long.  I have been unable to find confirmation.  Certainly, IBM took the licensing issue seriously and I am aware of several serious disputes but not the use of this &lt;em&gt;nuclear&lt;/em&gt; option.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone confirm this as true?&lt;/p&gt;&#xA;&lt;p&gt;Can anyone confirm it as an urban myth that I fell for?&lt;/p&gt;&#xA;" OwnerUserId="7805" LastEditorUserId="7805" LastEditDate="2021-04-14T10:44:06.493" LastActivityDate="2021-04-14T10:44:06.493" Title="Uninstalling OS/400 by deleting one program" Tags="&lt;ibm&gt;&lt;as400&gt;" AnswerCount="0" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19621" PostTypeId="2" ParentId="19582" CreationDate="2021-04-14T13:33:11.220" Score="2" Body="&lt;p&gt;Back in 1991 we had an HP LaserJet with a very small amount of memory. It was sold as &amp;quot;software rendering&amp;quot; (or something like that). We bought it because it was way cheaper than the standard model. We didn't have too much money, and heck... we wanted a laser printer!&lt;/p&gt;&#xA;&lt;p&gt;The thing is, all the image was rendered as bitmap in the workstation, not in the printer itself. I hated it, since my whole workstation would freeze for 10 seconds every time I wanted to print anything (or worse, my coworker wanted to print a few pages).&lt;/p&gt;&#xA;&lt;p&gt;The little memory the printer had was for &lt;strong&gt;buffering purposes&lt;/strong&gt; only, not for processing anything.&lt;/p&gt;&#xA;" OwnerUserId="21403" LastEditorUserId="21403" LastEditDate="2021-04-14T13:39:21.863" LastActivityDate="2021-04-14T13:39:21.863" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19622" PostTypeId="1" CreationDate="2021-04-14T21:45:08.300" Score="5" ViewCount="362" Body="&lt;p&gt;I have an old PC from 1999 that has an ASUS P5A motherboard. When I power it on, it says &lt;code&gt;ASUS P5A ACPI BIOS Revision 1011 Beta 005&lt;/code&gt; and &lt;code&gt;05/02/2002-ALADDIN5-&amp;lt;&amp;lt;P5A&amp;gt;&amp;gt;&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zEmd3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zEmd3.png&quot; alt=&quot;POST screen of Award BIOS v4.51PG, with the Energy Star logo in the upper right. The bottom of the screen contains the motherboard model identifier and a prompt ‘Press DEL to enter SETUP’.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I recently read that up until 2001 or 2002, there was a 137 GB limitation for hard drives. This PC is showing a BIOS date of 2002/5/2, and I cannot find any information on whether it supports hard drives larger than 137 GB.&lt;/p&gt;&#xA;&lt;p&gt;I connected a 160 GB hard drive as master on the secondary IDE channel, and then in the BIOS, I told it to auto detect the hard drives. This is what it showed for the secondary master:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/27ssS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/27ssS.png&quot; alt=&quot;Award CMOS setup utility, probing for hard drives. Under a prompt ‘Select Secondary Master Option (N=Skip)’ there are three options: option 2(Y), with parameters: SIZE=8447, CYLS=1027, HEAD=255, PRECOMP=0, LANDZ=16382, SECTOR=64, MODE=LBA; below it option 1, with parameters: SIZE=8455, CYLS=16383, HEAD=16, PRECOMP=65535, LANDZ=16382, SECTOR=63, MODE=NORMAL; and finally option 3, with parameters: SIZE=8451, CYLS=2047, HEAD=128, PRECOMP=65535, LANDZ=16383, SECTOR=63, MODE=LARGE. A note below warns that ‘Some OSes (like SCO-UNIX) must use &amp;quot;NORMAL&amp;quot; for installation’.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am not sure which of those options to select. But does it even matter? I tried entering in my own garbage values for the secondary master (CYLS=1, HEAD=1, PRECOMP=1, LANDZ=0, SECTORS=63, MODE=NORMAL). Then I booted the computer using the &lt;a href=&quot;https://www.ultimatebootcd.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ultimate Boot CD&lt;/a&gt; and ran IBM Drive Fitness Test, and it detected the correct secondary master hard drive model number along with the 160 GB size.&lt;/p&gt;&#xA;&lt;p&gt;If IBM Drive Fitness Test could detect the hard drive size correctly, does that mean that the BIOS supports hard drives larger than 137 GB?&lt;/p&gt;&#xA;&lt;p&gt;Also, if a program is able to determine the correct hard drive size despite the incorrect hard drive parameters that I entered in the BIOS, then what is the point of either auto-detecting the hard drive or manually entering the correct parameters in the BIOS?&lt;/p&gt;&#xA;" OwnerUserId="6953" LastEditorUserId="15334" LastEditDate="2021-04-21T14:14:24.563" LastActivityDate="2021-04-21T14:14:24.563" Title="How can I tell if my old PC supports &gt; 137 GB hard drives?" Tags="&lt;hardware&gt;&lt;hard-disk&gt;&lt;bios&gt;&lt;motherboard&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19623" PostTypeId="2" ParentId="17001" CreationDate="2021-04-15T03:33:02.497" Score="9" Body="&lt;p&gt;It is a programming convention (i.e. copied code), not part of ProDOS.&lt;/p&gt;&#xA;&lt;p&gt;ProDOS 8 Technical Reference Manual&#xA;5.4 Programming Conventions&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The standard Apple II &amp;quot;Air-raid&amp;quot; bell has been replaced with a gentler&#xA;tone. Use it to give users some aural feedback that they are using a&#xA;ProDOS program. The code for it follows.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And the code indeed follows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.easy68k.com/paulrsm/6502/PDOS8TRM.HTM#5.4&quot; rel=&quot;noreferrer&quot;&gt;http://www.easy68k.com/paulrsm/6502/PDOS8TRM.HTM#5.4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://prodos8.com/docs/techref/writing-a-prodos-system-program/&quot; rel=&quot;noreferrer&quot;&gt;https://prodos8.com/docs/techref/writing-a-prodos-system-program/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SPKR      EQU   $C030         ;this clicks the speaker&#xA;*&#xA;LENGTH    DS    1             ;duration of tone&#xA;*&#xA;* This is the wait routine from the Monitor ROM.&#xA;*&#xA;WAIT      SEC&#xA;WAIT2     PHA&#xA;WAIT3     SBC   #1&#xA;          BNE   WAIT3&#xA;          PLA&#xA;          SBC   #1&#xA;          BNE   WAIT2&#xA;          RTS&#xA;*&#xA;* Generate a nice little tone&#xA;* Exits with Z-flag set (BEQ) for branching&#xA;* Destroys the contents of the accumulator&#xA;*&#xA;BELL      LDA   #$20          ;duration of tone&#xA;          STA   LENGTH&#xA;BELL1     LDA   #$2           ;short delay...click&#xA;          JSR   WAIT&#xA;          STA   SPKR&#xA;          LDA   #$20          ;long delay...click&#xA;          JSR   WAIT&#xA;          STA   SPKR&#xA;          DEC   LENGTH&#xA;          BNE   BELL1         ;repeat LENGTH times&#xA;          RTS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21185" LastEditorUserId="71" LastEditDate="2021-04-15T04:46:20.433" LastActivityDate="2021-04-15T04:46:20.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19624" PostTypeId="2" ParentId="19622" CreationDate="2021-04-15T04:02:40.717" Score="5" Body="&lt;p&gt;That BIOS screen clearly says that it detects the drive as roughly 8 GB. The parameters say 16383/16/63 as so this BIOS cannot detect or provide the extended disk services that would allow the drive to be used beyond the 16383 cylinders, or the 8GB limit.&lt;/p&gt;&#xA;&lt;p&gt;It does not matter if another program can detect the size properly by communicating with the drive directly - it still can't be used via BIOS. It can boot an OS if it is on a partition below the 8GB limit. An operating system or drive overlay with a driver that can access drives larger than 137GB can be used to access the drive.&lt;/p&gt;&#xA;&lt;p&gt;It is best to select the first option, LBA, if you wish to have best compatibility.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-04-15T04:29:58.360" LastActivityDate="2021-04-15T04:29:58.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19625" PostTypeId="2" ParentId="19622" CreationDate="2021-04-15T04:09:51.107" Score="7" Body="&lt;p&gt;Very briefly:&lt;/p&gt;&#xA;&lt;p&gt;The way harddisks are addressed changed over time. Originally, you'd specify cylinder/head/sector (CHS), then it switched to logical block addresses (LBA), and the commands for those went through various versions with an increasing number of bits. As you can read on &lt;a href=&quot;https://en.wikipedia.org/wiki/Logical_block_addressing&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;, LBA first used 22 bits, then 28, then 48.&lt;/p&gt;&#xA;&lt;p&gt;So you need to distinguish between (1) what does the BIOS support and (2) what does the OS support.&lt;/p&gt;&#xA;&lt;p&gt;Actually, your &lt;a href=&quot;https://thestarman.pcministry.com/asm/mbr/Limits.htm&quot; rel=&quot;noreferrer&quot;&gt;link&lt;/a&gt; from the comments already gives an explanation:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;Operating systems that do not have 48-bit LBA support enabled by default (such as Microsoft Windows 98, Microsoft Windows Millennium Edition (Me), or Windows 2000) that are installed on a partition that spans beyond the 28-bit LBA boundary (137GB) will experience data corruption or data loss.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Many computer BIOS will be unable to recognize hard disks over 137 GB, since they are limited to using only 28 bits to keep track of the LBA sector count.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So you can run into trouble with your OS if you have a large harddisk with a partition for that OS that is larger than or placed at a position greater than the LBA size the OS sizes.&lt;/p&gt;&#xA;&lt;p&gt;And you can run into trouble with your BIOS if you try to boot from a partition that is larger than or placed in a position that is greater than the LBA size supported by the BIOS.&lt;/p&gt;&#xA;&lt;p&gt;This means:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you do not want to boot from that disk, it doesn't matter at all if the BIOS &amp;quot;supports it&amp;quot;.&lt;/li&gt;&#xA;&lt;li&gt;If you want to boot from that disk, make sure you boot from the first partition. I'd also assume as long as the bootstrap from BIOS works, that partition can be even larger than what the BIOS supports (but I never tried that, and the simplest way to find out is to try). However, this probably depends on the first stage of the bootstrap process that uses BIOS calls also to be located early enough, which may be difficult to control.&lt;/li&gt;&#xA;&lt;li&gt;You should make sure that the OS you boot can deal with all partitions you want that OS to access. If there's potential trouble, make the partition small enough.&lt;/li&gt;&#xA;&lt;li&gt;If all else fails, you can make a first small partition with something on it that can chain boot to other partitions probably would work.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This means you should select LBA, and find an OS that supports the partition size you want to use, or make the partition smaller.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-04-15T09:29:28.583" LastActivityDate="2021-04-15T09:29:28.583" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19626" PostTypeId="2" ParentId="19582" CreationDate="2021-04-15T08:12:30.937" Score="2" Body="&lt;p&gt;Anecdote reinforcing how much they broke things up due limited memory.&lt;/p&gt;&#xA;&lt;p&gt;This was from a page layout printing program, full page of real estate advert &lt;strong&gt;text&lt;/strong&gt; to which they manually fixed high res photos of houses then photo-reproduced the lot. (I'm sure many of you have seen such paper magazines outside real estate agents).&lt;/p&gt;&#xA;&lt;p&gt;This was a solution replacing manual layout of text.&lt;/p&gt;&#xA;&lt;p&gt;I wrote it running on Mac Classics with an Apple LaserWriter I think around 1992.&lt;/p&gt;&#xA;&lt;p&gt;One thing I realised was that the printer spent significant time creating the bitmap images for the fonts as it rendered different styles. &lt;em&gt;It only had enough memory to keep one font's bitmaps at a time.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I reordered all the drawing commmands so all the font in a given style was printed drawn in one batch, scattered over the page. eg: Helvetica Bold 18pt, Helvetica 18pt, Helvetica 12pt...&lt;/p&gt;&#xA;&lt;p&gt;This printed pages on average &lt;strong&gt;seven times faster&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7730" LastActivityDate="2021-04-15T08:12:30.937" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19627" PostTypeId="1" CreationDate="2021-04-15T15:57:06.570" Score="27" ViewCount="5752" Body="&lt;p&gt;The early Apple Macintosh computers (original Mac, Mac 512K, Mac Plus) all came with a &amp;quot;Programmer's Switch&amp;quot; installed on the side. I believe this persisted for a long time, with the switch being present on many Macintosh computers for perhaps a decade.&lt;/p&gt;&#xA;&lt;p&gt;I know that the switch triggers a CPU interrupt, and that this would be used to immediately halt execution and present a debugger interface.&lt;/p&gt;&#xA;&lt;p&gt;How, exactly, was this enabled and/or controlled by the system software? How can a user modify this behavior? And how was it possible for software developers to override the switch to prevent &amp;quot;hackers&amp;quot; from gaining access to their assembly source code?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2021-04-16T15:45:19.390" Title="How did the &quot;Programmer's Switch&quot; work on early Macintosh Computers?" Tags="&lt;hardware&gt;&lt;programming&gt;&lt;apple-macintosh&gt;&lt;debugging&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19628" PostTypeId="1" AcceptedAnswerId="19629" CreationDate="2021-04-15T16:12:42.123" Score="8" ViewCount="523" Body="&lt;p&gt;I have two ZX81, one is perfectly working and I am trying to repair the other one.&lt;/p&gt;&#xA;&lt;p&gt;After repairing the external power supply (a wire of the transformer was cut near the connector. I think it was due to an overheating) and after changing the 5V regulator 7805, I got a flickering screen.&lt;/p&gt;&#xA;&lt;p&gt;I checked and found that the power supply was noisy so I added a capacitor at the input and now the regulated voltage is good, the clock is working at the right frequency but I am getting a Blank screen (white screen) sometimes flickering.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yIQcn.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yIQcn.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I think the ULA is not completely defective since I can see on the oscilloscope a normal  RAMC.S. signal.&lt;/p&gt;&#xA;&lt;p&gt;But comparing video signals between the working and the defective ZX81 I am getting the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For the defective one:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IahEc.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IahEc.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For the working one:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dwJFL.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dwJFL.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So in the defective ZX81 the Sync pulse is right but there is no backporch and the level is always white.&#xA;I need more information on how does the ULA generate the video signal to continue troubleshooting.&lt;/p&gt;&#xA;&lt;p&gt;So the question is:&lt;/p&gt;&#xA;&lt;p&gt;How is the video signal generated by the ULA? How come that, in my case, the Sync pulse is generated but not the backporch?&lt;/p&gt;&#xA;" OwnerUserId="18338" LastActivityDate="2021-04-15T16:20:45.100" Title="On the video signal generated by the ULA of the ZX81" Tags="&lt;zx81&gt;&lt;troubleshooting&gt;&lt;composite-video&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19629" PostTypeId="2" ParentId="19628" CreationDate="2021-04-15T16:20:45.100" Score="15" Body="&lt;p&gt;That portion of the video signal is generated directly by the ULA; early ZX81s just don't generate a back porch, which was seemingly good enough for the majority of televisions but problematic enough to be fixed in a later revision despite the machine's commercial lifetime being only a year. As you've observed, the absence of a back porch causes some displays incorrectly to calibrate their expectations as to signal levels.&lt;/p&gt;&#xA;&lt;p&gt;The fix is to add a back porch externally, e.g. &lt;a href=&quot;http://zx.zigg.net/misc-projects/ZX81_Video_Conditioning.pdf&quot; rel=&quot;noreferrer&quot;&gt;this guide&lt;/a&gt; offers a solution based on a 555, four resistors, four capacitors, two diodes and two transistors. Others have produced &lt;a href=&quot;https://rudedogretros.co.uk/product/sinclair-zx81-composite-video-back-porch-generator-mod/&quot; rel=&quot;noreferrer&quot;&gt;prebuilt versions of that schematic&lt;/a&gt; or even &lt;a href=&quot;https://www.tindie.com/products/CharlieIngley/vla81-zx81-ula-replacement/&quot; rel=&quot;noreferrer&quot;&gt;complete ULA replacements&lt;/a&gt; that are guaranteed to include a back porch.&lt;/p&gt;&#xA;&lt;p&gt;In the mean time you should be able to confirm by switching the ULAs between your two machines.&lt;/p&gt;&#xA;&lt;p&gt;So, in short: I don't think your other ZX81 is defective, I think it's still operating exactly as it always did.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2021-04-15T16:20:45.100" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19630" PostTypeId="2" ParentId="19627" CreationDate="2021-04-15T17:46:14.237" Score="24" Body="&lt;p&gt;The &amp;quot;programmer's switch&amp;quot; is more technically known as the NMI (Non Maskable Interrupt) switch.  It is mapped to a priority 7 interrupt on the 68K CPU, which means it is capable of interrupting anything besides another priority 7 event.  When pressed, the CPU saves all its state on the stack, switches to privileged mode, then looks at the &lt;em&gt;interrupt vector table&lt;/em&gt; to see what address to find the routine to handle a &lt;em&gt;priority 7 interrupt exception&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Software is capable of changing that address to point to whatever routines might be useful.  A common use on the Mac was installing MacsBug, which saved a copy of the screen before overwriting it with a debugger interface; this could be used to step through code, examine memory and variables, and so on.&lt;/p&gt;&#xA;&lt;p&gt;When the routine ends, it executes a &lt;em&gt;return from exception&lt;/em&gt; &lt;code&gt;RTE&lt;/code&gt; instruction which reloads the CPU state from the stack and restores the previous execution mode.  Before doing this, MacsBug would also restore the screen.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2021-04-15T21:22:16.140" LastActivityDate="2021-04-15T21:22:16.140" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19631" PostTypeId="2" ParentId="19627" CreationDate="2021-04-15T17:47:07.907" Score="37" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The early Apple Macintosh computers (original Mac, Mac 512K, Mac Plus) all came with a &amp;quot;Programmer's Switch&amp;quot; installed on the side.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes and no. While the switch was there, it was on the &lt;em&gt;in&lt;/em&gt;side, so, not &lt;em&gt;really&lt;/em&gt; accessible. Only after being 'enhanced' with the so called 'Programmers Key Aid', a snap on after market piece of plastic, griping into the ventilation slots and providing a pin to press the inside switch.&lt;/p&gt;&#xA;&lt;p&gt;Well, or by using any small object capable of transferring the needed force (~5N).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I know that the switch triggers a CPU interrupt, and that this would be used to immediately halt execution and present a debugger interface.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Pressing that button raised an NMI (*1). Prior to the Mac Plus hitting NMI ended in the System Error Handler reporting a 'No Debugger Installed' error box. That is as long as no NMI handler (like MacsBug) was installed.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How, exactly, was this enabled and/or controlled by the system software?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It could not be disabled. That's the whole point of having an NMI.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How can a user modify this behavior?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Placing a different code (pointer) at the NMI vector.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And how was it possible for software developers to override the switch to prevent &amp;quot;hackers&amp;quot; from gaining access to their assembly source code?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Assembler source code? Serious, who would deliver the source code of an application?&lt;/p&gt;&#xA;&lt;p&gt;Also, keep in mind, the classic Mac was a real mode OS. Independent of the CPU used, all memory was shared memory, so a programs code (and data) could be read from any other program (with MacsBug being way more comfortable than MicroBug). So no protection to circumvent in the first place&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The NMI function was always there with 68k Macs, but it was the Mac Plus ROM that first contained the so called MicroBug, an always available minimalist debugger. In a developer/debugging environment one would install MacsBug, which hooked NMI. Then again, Bugs may as well happen on user machines, or, as we all know only when the debugger is not installed/active. MicroBug offered a built-in help for these situations to at least peek around and gather basic information. Apple describes its usefulness and handling in &lt;a href=&quot;https://developer.apple.com/library/archive/technotes/tn/tn1136.html&quot; rel=&quot;noreferrer&quot;&gt;Technote 1136&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;One noteworthy point is that MicroBug was less integrated and more intrusive to the GUI, as it used GUI functions, but could only react to a very limited number of events, whereas MacsBug used his own screen drawing keeping all GUI data untouched.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - NMI stands for Non Maskable Interrupt, an interrupt that can not be disabled, like any other, but will always make the CPU execute the assigned function. Rather handy to revitalize an otherwise dead system.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-16T15:45:19.390" LastActivityDate="2021-04-16T15:45:19.390" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19632" PostTypeId="1" AcceptedAnswerId="19633" CreationDate="2021-04-15T19:51:09.067" Score="7" ViewCount="291" Body="&lt;p&gt;The Game Boy game &amp;quot;Tetris&amp;quot; leaves a transmission interval of about a millisecond between bytes sent over the serial link, as suggested by the official Game Boy Programming Manual, to give the other device the time to keep up with the data if it were to have an interrupt. It does that by simply busy looping 240 times, every iteration of that loop takes 4 cycles for a total of 960 cycles, which is close enough to a millisecond. The relevant code looks like this&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ld b, 240&#xA;.loop&#xA;    ld b, b&#xA;    dec b&#xA;    jr nz, .loop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;My question is, why did they use an &lt;code&gt;LD B, B&lt;/code&gt; instruction, and not a proper &lt;code&gt;NOP&lt;/code&gt;? Functionally, they're identical, they take the same time and they both set no flags. Could this be a remnant from development, with the instruction having a trap or debug function on development kits?&lt;/p&gt;&#xA;" OwnerUserId="21421" LastActivityDate="2021-04-15T20:38:50.297" Title="What could be the reason an `LD B, B` instruction was used in this busy loop?" Tags="&lt;assembly&gt;&lt;game-boy&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19633" PostTypeId="2" ParentId="19632" CreationDate="2021-04-15T20:38:50.297" Score="11" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;My question is, why did they use an LD B, B instruction, and not a proper NOP?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;LD B,B works &lt;em&gt;like&lt;/em&gt; a &lt;code&gt;NOP&lt;/code&gt; - at least as stated in the original 8080 manual (*1):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VWa2h.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VWa2h.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The original 8080 had 8 NOPs at 00xxx000 but only the first was defined as 'the nop'. In addition there were 7 instructions of loading a register with itself (*2). Effective NOPs, but not defined as such.&lt;/p&gt;&#xA;&lt;p&gt;The GB CPU, as an 8080 descendant did (like the 8085 and Z80) redefine 7 of the NOPs as new instructions, but kept the self loading NOPs.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Could this be a remnant from development, with the instruction having a trap or debug function on development kits?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;IMHO the most likely reason.&lt;/p&gt;&#xA;&lt;p&gt;For example a way to distinguish 'wait' NOP from such inserted for other reasons. While this may be done on source level as well with macros, using a different encoding does as well allow to find them in binary. When doing low level debugging (*3), seeing a 40h instead of a 00h is attention raising like a  Tag in HTML :))&lt;/p&gt;&#xA;&lt;p&gt;Different encoding highlights them not only to the human eye, but makes them as well visible for ICE debugers, allowing to stop at such opcodes without falling over any other NOP.&lt;/p&gt;&#xA;&lt;p&gt;There are many positive use cases, why it was chosen in detail might be shrouded in history.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - The Game Boy CPU is, despite the assembler syntax, a direct 8080 offspring.&lt;/p&gt;&#xA;&lt;p&gt;*2 - The 8th, &lt;code&gt;LD (HL),(HL)&lt;/code&gt;, was already at with the 8080 redefined as &lt;code&gt;HALT&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;*3 - Even the rather advanced development systems Nintendo used were less comfortable than some modern products. Not to mention situations when all visible were bare bytes.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-04-15T20:38:50.297" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19634" PostTypeId="2" ParentId="5587" CreationDate="2021-04-15T23:43:32.427" Score="2" Body="&lt;p&gt;Mostly off topic, posting to reminisce ...&lt;/p&gt;&#xA;&lt;p&gt;In 1976, I think, I was hired because a bank's only computer programmer accepted a job offer elsewhere while in training for converting data from an NCR 315 to an NCR Century 101.&lt;/p&gt;&#xA;&lt;p&gt;I'd never heard of an NCR 315, but had 3 hard years of experience on an NCR 100 and then a 101, running NCR's bank software package called C.I.F. (Central Information File).  I was young, ambitious and a bit egotistical.  At the end of my interview, the D.P. manager asked if I could do the changeover.  &amp;quot;Sure, no problem&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;As previously stated, the Century used 8 bit bytes (plus parity) while the 315 had slabs.  When a slab contained two alphanumeric characters, it was easy to change them to two 8 bit bytes.  But slabs containing 3 digits were a challenge.  I gave up on writing my own routine and settled for a package utility called GDFC - General Data File Conversion.  To test the program to convert 10,000 installment loans, I first had to run GDFC - which took an hour just to make the data useable to me.&lt;/p&gt;&#xA;&lt;p&gt;I really enjoyed writing NEAT/3.  When asked, I said it was like a fixed format COBOL.  And, if needed, I could make the compiler shift to Level 2 - which was the equivalent of assembler.&#xA;I later used that functionality to write an exception item pull program, which used information from reject reports to separate rejected checks so they did not have to be pulled manually.&lt;/p&gt;&#xA;" OwnerUserId="21432" LastActivityDate="2021-04-15T23:43:32.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19635" PostTypeId="2" ParentId="19614" CreationDate="2021-04-16T03:48:03.147" Score="3" Body="&lt;p&gt;Not sure I would trust 30 gauge wire wrap wire insulation with vacuum tube plate voltage.  The cross-talk at the higher voltages plus digital edge speeds would also be far worse.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2021-04-16T03:48:03.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19637" PostTypeId="1" AcceptedAnswerId="19638" CreationDate="2021-04-16T09:39:07.437" Score="8" ViewCount="752" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/GEOS_%288-bit_operating_system%29&quot; rel=&quot;noreferrer&quot;&gt;GEOS&lt;/a&gt; was a hugely popular operating environment for 8-bit Commodore and Apple machines. It was developed and published by Berkeley Softworks, who eventually released &lt;a href=&quot;https://en.wikipedia.org/wiki/GEOS_%2816-bit_operating_system%29&quot; rel=&quot;noreferrer&quot;&gt;a 16-bit version for IBM-compatible PCs&lt;/a&gt;.  Do we have any information on how the name of this system was intended to be pronounced?&lt;/p&gt;&#xA;&lt;p&gt;I have heard &lt;em&gt;users&lt;/em&gt; variously call it as follows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;/ˈdʒiːˌɒs/ (JEE-ahss; last syllable rhymes with &amp;quot;boss&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;/ˈdʒiːˌoʊs/ (JEE-oce; last syllable rhymes with &amp;quot;dose&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;/ˈdʒiː ˈiː ˈoʊː ˈɛs/ (JEE-EE-OH-ESS; sounding out each letter individually)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;What I'm more interested in is how the &lt;em&gt;creators&lt;/em&gt; of GEOS pronounced the name of their system.  Does any contemporary user manual, advertisement, internal design document, or other &amp;quot;official&amp;quot; material indicate or give hints as to the pronunciation?  Are there any audio interviews with (former) Berkeley Softworks employees where we can hear the name &amp;quot;GEOS&amp;quot; spoken?&lt;/p&gt;&#xA;" OwnerUserId="6527" LastActivityDate="2021-05-03T10:38:14.097" Title="How was &quot;GEOS&quot; meant to be pronounced?" Tags="&lt;commodore&gt;&lt;operating-system&gt;&lt;geos&gt;" AnswerCount="1" CommentCount="16" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19638" PostTypeId="2" ParentId="19637" CreationDate="2021-04-16T10:31:52.627" Score="13" Body="&lt;p&gt;I have mostly heard your first option, /ˈdʒiːˌɒs/, and analogously, also /ˈbiːˌɒs/ as the pronunciation of BeOS. My accent has /ɔ/ in this context, so /ˈdʒiːˌɔs/.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=3kyhy1NxpVc&quot; rel=&quot;nofollow noreferrer&quot;&gt;This advert&lt;/a&gt;, at 2:10, suggests that at least the marketing department also thought it should be pronounced that way.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-05-03T10:38:14.097" LastActivityDate="2021-05-03T10:38:14.097" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19639" PostTypeId="2" ParentId="19582" CreationDate="2021-04-16T13:41:48.590" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;The first HP Laserjet only had 128K of memory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The first LaserWriter, released the next year, had 1.5M. It imaged pages in complete form when the appropriate PS command was received. This was its big advantage over the HP machines, allowing it to construct more complex graphics. That did not last long, however, as improvements to the HP printers and PCL eroded any difference.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2021-04-16T13:41:48.590" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19641" PostTypeId="1" AcceptedAnswerId="19645" CreationDate="2021-04-16T22:43:31.110" Score="5" ViewCount="556" Body="&lt;p&gt;In the assembly language used in Unix on DEC machines (PDP-11, VAX), one can use numerical labels and refer to them with suffixes &amp;quot;b&amp;quot; and &amp;quot;f&amp;quot; meaning &amp;quot;backwards&amp;quot; and &amp;quot;forwards&amp;quot;, &lt;a href=&quot;https://www.tuhs.org/cgi-bin/utree.pl?file=V10/sys/boot/bb/bblock.s&quot; rel=&quot;noreferrer&quot;&gt;e.g.&lt;/a&gt; (in the insructions &lt;code&gt;beql&lt;/code&gt;, &lt;code&gt;bneq&lt;/code&gt;, &lt;code&gt;aoblss&lt;/code&gt;, &lt;code&gt;acbw&lt;/code&gt; below)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#&#xA;# search the root directory&#xA;#&#xA;&#xA;    clrl    r12         # init block pointer&#xA;dirblk:&#xA;    clrl    r5          # use beginning of mem as buffer&#xA;    bsbw    lread&#xA;    bneq    stask           # eof, try another file&#xA;    clrl    r9&#xA;0:&#xA;    movzwl  (r9)+,r0        # empty entry?&#xA;    beql    2f              # yes, skip it&#xA;    clrl    r1&#xA;1:  cmpb    (r9)[r1],bootname[r1]   # MicroVAX II doesn't have cmpc&#xA;    bneq    2f&#xA;    aoblss  $DIRSIZ,r1,1b&#xA;    brb diryes          # the name we want&#xA;&#xA;2:  acbw    $FSBSIZE-1,$DIRSIZ,r9,0b&#xA;    incl    r12         # get next block&#xA;    brb dirblk&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Numerical labels can be reused as the references signify the closest occurrence of the label with the given number in the given direction (and, IIRC, no further than the closest alphanumerical label in that direction). This greatly reduced the need to invent names for labels, made the assembly code quite neat, and improved readability with the relative location of the branch target explicitly specified.&lt;/p&gt;&#xA;&lt;p&gt;Per @another-dave in the comments, the original DEC assembly language had local labels as well, with a slightly different naming convention.&lt;/p&gt;&#xA;&lt;p&gt;Was there a similar feature in the IBM assembly language?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2021-04-16T23:25:02.757" LastActivityDate="2021-05-13T21:35:32.413" Title="Was there an analog of local labels in the IBM assembly language?" Tags="&lt;assembly&gt;&lt;ibm&gt;&lt;dec&gt;" AnswerCount="3" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="19642" PostTypeId="1" AcceptedAnswerId="19643" CreationDate="2021-04-16T23:21:06.530" Score="7" ViewCount="174" Body="&lt;p&gt;The MAP and FAP assemblers for the IBM 709/7090/7094 had a nice macro facility. I was surprised by its power. (Actually, I guess it is possible that most macro processors at the time were as sophisticated, but I haven't seen any. Strachey's “&lt;a href=&quot;https://academic.oup.com/comjnl/article/8/3/225/336044&quot; rel=&quot;nofollow noreferrer&quot;&gt;General-purpose macro-generator&lt;/a&gt;”, from a year later, was incredibly limited by comparison) Here are some of its capabilities:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Macros could have an arbitrary number of parameters.&lt;/li&gt;&#xA;&lt;li&gt;Macro expansions could nest.&lt;/li&gt;&#xA;&lt;li&gt;Macro &lt;em&gt;definitions&lt;/em&gt; could nest (macro-defining macros were possible).&lt;/li&gt;&#xA;&lt;li&gt;With the &lt;code&gt;IFF&lt;/code&gt; and &lt;code&gt;IFT&lt;/code&gt; pseudo-instructions (only &lt;code&gt;IFF&lt;/code&gt; in FAP) text could be substituted conditionally.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;IRP&lt;/code&gt; pseudo-instruction allowed iterating over a comma-separated list.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;SET&lt;/code&gt; pseudo-instruction changed the value of a symbol. By combining &lt;code&gt;SET&lt;/code&gt; with the macro-related pseudo-instructions, you can implement arbitrary loops; &lt;code&gt;SET&lt;/code&gt; also makes recursive macro expansion more useful.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;GOTO&lt;/code&gt; pseudo-instruction (only in MAP) made it possible to instruct the assembler not to include a certain number of instructions in the expansion.&lt;/li&gt;&#xA;&lt;li&gt;Concatenation of arguments and other text could be done, with the &lt;code&gt;'&lt;/code&gt; character.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Here is all the relevant documentation I have been able to locate:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/C28-6235-3_FAP_Apr64.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;C28-6235-3 FAP (1965)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/C28-6235-5_FAP_Apr65.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;C28-6235-5 FAP (1965)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/C28-6311-2_7090_MAP.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;C28-6311-2 MAP (1964)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/C28-6311-4_MAP_Oct64.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;C28-6311-4 MAP (1964)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/C28-6392-0_v13_MAP.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;C28-6392-0 MAP (1963)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/C28-6392-1_v13_MAP_Jul65.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;C28-6392-1 MAP (1965)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/C28-6392-4_MAP_Dec66.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;C28-6392-4 MAP (1966)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/C28-6392-4_MAP_Dec66.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;GC28-6392-4 MAP (1966)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.bitsavers.org/pdf/mit/ctss/CTSS_ProgrammersGuide_Dec69.pdf#page=306&quot; rel=&quot;nofollow noreferrer&quot;&gt;CTSS Programmer's Guide (1969), section AH.2.07&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There is earlier information about FAP, but from before it had support for macros.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The general form of a macro definition in FAP was this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;NAME   MACRO   P1,P2,P3&#xA;       ...&#xA;NAME   END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Here &lt;code&gt;NAME&lt;/code&gt; is the name of the macro, &lt;code&gt;P1&lt;/code&gt;, &lt;code&gt;P2&lt;/code&gt;, and &lt;code&gt;P3&lt;/code&gt; are parameters, and the text elided with “&lt;code&gt;...&lt;/code&gt;” is the macro's body. After such a definition, you can use &lt;code&gt;NAME&lt;/code&gt; as if it were any other instruction, as in&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       NAME    X,Y,Z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In the body, occurrences of &lt;code&gt;P1&lt;/code&gt;, &lt;code&gt;P2&lt;/code&gt;, &lt;code&gt;P3&lt;/code&gt; would be replaced with the corresponding arguments (in the example, &lt;code&gt;X&lt;/code&gt;, &lt;code&gt;Y&lt;/code&gt;, and &lt;code&gt;Z&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;If a macro-instruction includes a symbol in its location/name field, as in&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ABCDEF NAME    X,Y,Z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;then the effect would be as if the symbol had been given with the first instruction of the macro expansion. For example, if the macro's body began like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;NAME   MACRO   P1,P2,P3&#xA;       CLA     LOCAT,4&#xA;       ...&#xA;NAME   END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;then the expansion of&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ABCDEF NAME    X,Y,Z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;would begin&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ABCDEF CLA     LOCAT,4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;An alternative form of macro definition could change this behavior. If you wrote&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        MACRO&#xA;SYMPAR  NAME   P1,P2,P3&#xA;        ...&#xA;NAME    END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;then the macro would essentially gain a new parameter, here named &lt;code&gt;SYMPAR&lt;/code&gt;, which would be matched to a symbol given in the location field of a use of the macro. Thus in the expansion of&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ABCDEF NAME    X,Y,Z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;any occurrences of &lt;code&gt;SYMPAR&lt;/code&gt; would be replaced by &lt;code&gt;ABCDEF&lt;/code&gt;. (This alternative form works in MAP, but it is not documented in any of the MAP manuals listed above.)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The IBM 709/7090/7094 support indirect addressing, indicated in assembly code by placing an asterisk after the operation mnemonic. So the instruction&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       STA*    LOC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Replaces the address part of the accumulator with the value stored at the address stored in &lt;code&gt;LOC&lt;/code&gt;.&#xA;What happens if a macro-instruction includes the indirection tag? For instance, what would happen if I said&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       NAME*   X,Y,Z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;For an incredible demonstration of the assembler's abilities, see this code from 1966, which expresses preloaded list structure in a Lisp interpreter by using macros: &lt;a href=&quot;https://github.com/rcornwell/ctss/blob/master/extra/lisp/atoms.fap&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/rcornwell/ctss/blob/master/extra/lisp/atoms.fap&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19767" LastEditorUserId="19767" LastEditDate="2021-04-17T22:01:24.247" LastActivityDate="2021-04-17T22:01:24.247" Title="How did macro-instructions and indirect addressing interact in IBM's MAP/FAP assemblers?" Tags="&lt;assembly&gt;&lt;programming&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19643" PostTypeId="2" ParentId="19642" CreationDate="2021-04-16T23:21:06.530" Score="8" Body="&lt;p&gt;This is not documented anywhere, as far as I can tell. But the source code of a few versions of the assemblers is available, so we can look there.&lt;/p&gt;&#xA;&lt;p&gt;It turns out that there is a third form of macro definition. If you say &lt;code&gt;MACRO*&lt;/code&gt; instead of &lt;code&gt;MACRO&lt;/code&gt;, then the contents of the first parameter of your macro will be &lt;code&gt;*&lt;/code&gt; if the macro was invoked with an asterisk, and empty otherwise. So&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DOIT   MACRO* I,D,S,IR&#xA;       SXA    S,IR&#xA;       TSX'I  D,IR&#xA;DOIT   END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;would define a (useless) macro that carried an indirection flag to the &lt;code&gt;TSX&lt;/code&gt;. When invoked as&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       DOIT   PLACE1,PLACE2,4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;the expansion is&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       SXA    PLACE2,4&#xA;       TSX    PLACE1,4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;but if invoked as&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       DOIT*  PLACE1,PLACE2,4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;the expansion is&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       SXA    PLACE2,4&#xA;       TSX*   PLACE1,4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Here is an excerpt from MAP's source code. (You can find it as 7090-SP-804 IBMAP &lt;a href=&quot;http://sky-visions.com/ibm/ibsys_tapes.shtml&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;; append &lt;code&gt;.gz&lt;/code&gt; to the printable ASCII tape links to get them to work.)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;* THE INTERNAL DICTIONARY ENTRY FOR A MACRO-INSTRUCTION HAS THE FORM (6)4J161702&#xA;*                                                                    (6)4J161704&#xA;*              O6/62,12/N,3/SC,15/SKEL                               (6)4J161706&#xA;*                                                                    (6)4J161708&#xA;*      WHERE                                                         (6)4J161710&#xA;*                                                                    (6)4J161712&#xA;*              N IS THE NUMBER OF ARGUMENTS                          (6)4J161714&#xA;*                                                                    (6)4J161715&#xA;*              SC IS 2 TO SUPPRESS CREATED SYMBOLS FOR MISSING ARGS  (6)4J161716&#xA;*                    6 TO FORCE CREATION OF MISSING ARG SYMBOLS      (6)4J161718&#xA;*                    0 FOR SYMBOL CREATION UNDER NOCRS CONTROL       (6)4J161720&#xA;*                                                                    (6)4J161722&#xA;*              SKEL IS THE ADDRESS OF THE CHAIN WORD PRECEDING THE   (6)4J161724&#xA;*                   SKELETON FOR THE CORRESPONDING MACRO DEFINITION  (6)4J161726&#xA;*                                                                    (6)4J161728&#xA;* EACH SKELETON IS PRECEDED BY A CHAIN WORD WHOSE                    (6)4J161730&#xA;*                                                                    (6)4J161732&#xA;*              ADDRESS IS A POINTER TO THE CHAIN WORD FOR THE NEXT   (6)4J161734&#xA;*                   SKELETON (OR END OF DEFINITION STORAGE IF LAST)  (6)4J161736&#xA;*                                                                    (6)4J161738&#xA;*              DECREMENT IS A POINTER TO THE DICTIONARY ENTRY        (6)4J161740&#xA;*                                                                    (6)4J161742&#xA;*              PREFIX HAS FLAGS FOR PURGE AS FOLLOWS..               (6)4J161744&#xA;*                                                                    (6)4J161746&#xA;*                   S - SKELETON IS TO BE PURGED FROM TABLE          (6)4J161748&#xA;*                   1 - CANNOT BE PURGED BECAUSE OTHER DEFINITIONS   (6)4J161750&#xA;*                       REFER TO THIS ONE VIA OPSYN                  (6)4J161752&#xA;*                   2 - CONTAINS ADDRESS POINTERS FOR OPSYN          (6)4J161754&#xA;*                                                                    (6)4J161756&#xA;* THE TAG FIELD OF THE CHAIN WORD SUPPLEMENTS THE DICTIONARY ENTRY   (6)4J161758&#xA;*      WITH FLAGS FOR                                                (6)4J161759&#xA;*                                                                    (6)4J161760&#xA;*              LOCATION FIELD OF MACRO IS A PARAMETER (BIT 18).      (6)4J161762&#xA;*                                                                    (6)4J161763&#xA;*              NAME OF MACRO-INSTRUCTION IS A PARAMETER (BIT 19).    (6)4J161764&#xA;*                                                                    (6)4J161765&#xA;*              THE USE OF INDIRECT ADDRESSING OF THIS MACRO IS A     (6)4J161766&#xA;*                   PARAMETER (BIT 20 OF CHAIN WORD).  THE ARGUMENT  (6)4J161768&#xA;*                   WHICH WAS FIRST IN THE VARIABLE FIELD OF THE     (6)4J161770&#xA;*                   MACRO HEADER WILL BE REPLACED IN THE EXPANSION   (6)4J161772&#xA;*                   BY THE NULL STRING OR BY AN * ACCORDING TO THE   (6)4J161774&#xA;*                   ABSENCE OR PRESENCE OF AN ASTERISK TERMINATING   (6)4J161776&#xA;*                   THE OPERATION CODE IN THE CALL.  THE FIRST FIELD (6)4J161778&#xA;*                   OF THE VARIABLE FIELD OF THE CALL CORRESPONDS TO (6)4J161780&#xA;*                   THE SECOND PARAMETER IN THE VARIABLE FIELD OF    (6)4J161782&#xA;*                   THE MACRO HEADER CARD, ETC.                      (6)4J161784&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The last point, about bit 20, is the relevant portion. Here “skeleton” is referring to the macro's replacement text.&lt;/p&gt;&#xA;&lt;p&gt;I haven't yet found any code that actually uses this feature, except for some built-in internal macros to the MAP assembler (see, e.g., card 4J198700).&lt;/p&gt;&#xA;&lt;p&gt;(I'm not sure whether the feature was implemented in FAP or not. A &lt;a href=&quot;https://github.com/rcornwell/ctss/blob/master/src/tools/fap.fap#L6623&quot; rel=&quot;noreferrer&quot;&gt;location &lt;code&gt;MCDIND&lt;/code&gt; is reserved&lt;/a&gt; for a “FLAG FOR INDIRECTLY ADDRESSED MACRO”, but the code doesn't seem to do anything with it besides stack and unstack it as macro depth changes. I could certainly be wrong.)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;What happens if you use the asterisk on a macro not defined with &lt;code&gt;MACRO*&lt;/code&gt;? It's an error.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MCC.22 RNT     100000              IS INDIRECT ADDRESS AN ARGUMENT   (6)4J119300&#xA;       TRA     MCC.23              NO, CHECK FOR MISUSED *           (6)4J119400&#xA;       CLA     INDPAR              YES, PREPARE TO STUFF *           (6)4J119410&#xA;       ZET     SWIND               WAS OP CODE STARRED               (6)4J119420&#xA;       ACL     1DECR               YES, ARG HAS LENGTH ONE           (6)4J119430&#xA;       TSX     XPLCE,4             PLACE PARAMETER                   (6)4J119440&#xA;       TXL     MCC.24,2,0          CHECK FOR MORE ARGUMENTS          (6)4J119450&#xA;       TXI     MCC.24,2,-1                                           (6)4J119460&#xA;       SPACE                                                         (6)4J119470&#xA;MCC.23 ZET     SWIND               WAS OP CODE STARRED               (6)4J119480&#xA;       TSX     INDXB,4             YES, FILE ERROR MESSAGE           (6)4J119490&#xA;       SPACE   1                                                        4J119500&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The transfer to &lt;code&gt;INDXB&lt;/code&gt; causes the message &lt;code&gt;INDIRECT ADDRESS NOT ALLOWED ON THIS INSTRUCTION&lt;/code&gt; to be printed (eventually).&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2021-04-16T23:21:06.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19644" PostTypeId="2" ParentId="19641" CreationDate="2021-04-17T00:11:17.300" Score="10" Body="&lt;p&gt;Yes, maybe, in a way. It depends on how you define “IBM assembly language”. If it must be officially produced and distributed by IBM, then this isn't an answer, but if the sole criterion is that it is an assembly language for an IBM computer, then the answer is definitely yes.&lt;/p&gt;&#xA;&lt;p&gt;The IBM 650 had an assembler called SOAP, for Symbolic Optimum Assembly Program. It was “optimum” in that it tried to assign memory addresses so that the drum movement required for retrieving the next instruction was minimized. A second version of SOAP, SOAP II, was produced and distributed by IBM, becoming the canonical assembler for the 650.&lt;/p&gt;&#xA;&lt;p&gt;In 1958, Donald Knuth (whose first experiences with a computer were with the 650) created a modification of SOAP II, which he called SOAP III. The &lt;a href=&quot;https://archive.computerhistory.org/resources/access/text/2018/07/102784981-05-01-acc.pdf&quot; rel=&quot;noreferrer&quot;&gt;manual for SOAP III is available online&lt;/a&gt;. This assembler supported local labels, although Knuth's term for them is “program point”.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;D. Program points. When either the D- or I-address is to refer to location&#xA;“1” which appers &lt;em&gt;later&lt;/em&gt;, the address “IF” (1 forward) is given; to refer to&#xA;location “1” which appeared &lt;em&gt;earlier&lt;/em&gt; in the program, the address “1B” (1&#xA;backward) is given. The location 1 would be called simply “1.” Ten program&#xA;points are available, 0–9, and each may be constantly redefined during the&#xA;course of the program. If the program is written down on a coding form in&#xA;sequence, “1F” will always refer to the &lt;em&gt;next&lt;/em&gt; location 1 on the coding form;&#xA;“3B” will always refer to the previous location &amp;quot;3&amp;quot; occurring on the form.&#xA;In location 1, a D- or I-address of 1F may be given immediately, referring&#xA;to a future location 1. A D- or I-address of IB would still refer to the&#xA;last location 1 (not the present one), A D- or I-address of “1” will refer&#xA;to its own location.&lt;/p&gt;&#xA;&lt;p&gt;Rules: 1. A D- or I-address will be interpreted by SOAP as a program&#xA;point only if the symbolizer part [i.e., the first character of the address] is a &lt;em&gt;number&lt;/em&gt;, the second column is a “B”&#xA;or an “F”, and the remaining columns are blank. 2. The L-address of an&#xA;instruction will be interpreted by SOAP as a program point only if the&#xA;symbolizer part is a number and all remaining columns are blank. 3. A&#xA;D- or I- address consisting of a number followed by four blanks will always&#xA;refer to &lt;em&gt;its own&lt;/em&gt; location, regardless of what number is used or what type&#xA;of address is used in the L-address.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is the first implementation of the idea that I am aware of. &lt;a href=&quot;https://archive.computerhistory.org/resources/access/text/2016/06/102724580-05-01-acc.pdf#page=46&quot; rel=&quot;noreferrer&quot;&gt;Here's&lt;/a&gt; a listing of SOAP III, so you can see them in action. Knuth would go on to incorporate it into &lt;a href=&quot;https://datatron.blogspot.com/2015/08/knuths-easy-assembler.html&quot; rel=&quot;noreferrer&quot;&gt;an assembler for the Burroughs 205&lt;/a&gt;, and &lt;a href=&quot;https://datatron.blogspot.com/2016/06/the-shell-assembler-part-2.html&quot; rel=&quot;noreferrer&quot;&gt;some other Burroughs assemblers had them as well&lt;/a&gt;. Most famously program points are available in the assembler for Knuth's MIX computer.&lt;/p&gt;&#xA;&lt;p&gt;In the SOAP III manual, Knuth credits Melvin Conway with the concept of program points.&lt;/p&gt;&#xA;" OwnerUserId="19767" LastEditorUserId="19767" LastEditDate="2021-04-17T05:21:14.503" LastActivityDate="2021-04-17T05:21:14.503" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19645" PostTypeId="2" ParentId="19641" CreationDate="2021-04-17T01:19:12.077" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Or, more specifically, IBM/360&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;No.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;All labels were always global.&lt;/p&gt;&#xA;&lt;p&gt;The 360 assembler did not provide such relative labels (*1).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;But.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;On the other hand it provided procedural macro language (*2), which as well included the ability to generate symbols and thus labels in arbitrary manner. All needed to make them local is using a unique number - which quite handy was supplied by a macro call counter called SYSNDX. So to generate a local label within a macro, simply build one using this. For example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;A&amp;amp;SYSNDX  DS  0H           * Generates a label Annnn with nnnn increasing with each macro call&#xA;          ...              * Some code&#xA;          BCT R1,A&amp;amp;SYSNDX  * Jump to the label generated before&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;As said, the 360 macro language is a full figured procedural language, not just a set of random functions, making it possible to create the same effect. One macro to define such 'relative' labels and build a set of lists (*3), one for each 'number' used, to keep track of existing and future labels. Another macro would then be used to generate these jumps. Such a source may look like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;         ...&#xA;0        RELAB             * Generating a '0' label&#xA;         ...               * Some code&#xA;         RELBR  EQ,2F      * Jump forward to the next '2' label&#xA;         ...               * Some code&#xA;1        RELAB             * The one generating the labels&#xA;         ...               * Some code&#xA;         RELBR  NE,1B      * Jump back to the last '1' label&#xA;         ...               * Some code&#xA;2        RELAB             * Generating a '2' label&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Looks quite like your example - although, I'd split the forth and back from the label (e.g. write EQ,1,B), but that's up to taste.&lt;/p&gt;&#xA;&lt;p&gt;The incredible simple and mighty nature of having a procedural macro language and not a bunch of replacement rules opens the range to any concept one can think up. Which in turn would lead to skipping the idea at all, and go straight for structured programming. After all, why bother with labels at all if one can let the Assembler do all low level work?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - And I never missed them in all the decades of /360 programming. Tried them with some toy assemblers, but never really found them useful ... well, maybe if there is nothing else.&lt;/p&gt;&#xA;&lt;p&gt;Beside that, I'd rather consider them bad idea. Put a new label between two existing (something that happens all the time when editing/extending) and the whole sequence may be screwed.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Think of macros as scripts written in a simple language. Whenever a macro is invoked, its script is executed. It may generate code, or just manipulate some data structures to be interpreted by a later macro (or macro instructions within the source as well). Every part of the invocation can be read, checked and acted upon as parameters. Noting is done by default. As output any arbitrary source line can be generated - including ofc. macro calls as well :))&lt;/p&gt;&#xA;&lt;p&gt;*3 - Ok, lists sounds more than it is, in reality one needs to hold only two variables for each of the numbers allowed as label.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-17T01:50:30.303" LastActivityDate="2021-04-17T01:50:30.303" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19647" PostTypeId="1" CreationDate="2021-04-17T18:44:13.267" Score="5" ViewCount="550" Body="&lt;p&gt;I am building a computer based on the 65C02S, and when stepping through the code, I see strange things happening.&lt;/p&gt;&#xA;&lt;p&gt;This is my code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SEI&#xA;CLD&#xA;LDX #$ff&#xA;TXS&#xA;&#xA;JSR someRoutine&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This translates to this behaviour (when stepping though and monitoring with an Arduino):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;READ  address:   80 0d   1000.0000 0000.1101   data:   78   0111.1000 SEI&#xA;READ  address:   80 0e   1000.0000 0000.1110   data:   d8   1101.1000 CLD&#xA;READ  address:   80 0e   1000.0000 0000.1110   data:   d8   1101.1000 d8 &#xA;READ  address:   80 0f   1000.0000 0000.1111   data:   a2   1010.0010 LDX&#xA;READ  address:   80 0f   1000.0000 0000.1111   data:   a2   1010.0010 a2 &#xA;READ  address:   80 10   1000.0000 0001.0000   data:   ff   1111.1111 ff &#xA;READ  address:   80 11   1000.0000 0001.0001   data:   9a   1001.1010 TXS&#xA;READ  address:   80 12   1000.0000 0001.0010   data:   20   0010.0000 JSR&#xA;READ  address:   80 12   1000.0000 0001.0010   data:   20   0010.0000 JSR&#xA;READ  address:   80 13   1000.0000 0001.0011   data:   28   0010.1000 28 &#xA;READ  address:   01 ff   0000.0001 1111.1111   data:   80   1000.0000 ---&#xA;WRITE address:   01 ff   0000.0001 1111.1111   data:   80   1000.0000 ---&#xA;WRITE address:   01 fe   0000.0001 1111.1110   data:   ff   1111.1111 ---    ; Why write FF?&#xA;READ  address:   80 14   1000.0000 0001.0100   data:   80   1000.0000 80 &#xA;READ  address:   ff ff   1111.1111 1111.1111   data:   ff   1111.1111 ---&#xA;READ  address:   80 14   1000.0000 0001.0100   data:   80   1000.0000 80     ; Why not jump?&#xA;READ  address:   80 15   1000.0000 0001.0101   data:   a9   1010.1001 LDA&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;As you can see, the WRITEs are already weird (why write &lt;code&gt;80 ff&lt;/code&gt;, when the PC is at &lt;code&gt;80 12&lt;/code&gt; at that point?), but also, the &lt;code&gt;JSR&lt;/code&gt; doesn't seem to jump at all, it just continues at &lt;code&gt;80 14&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I first thought it might be some noise somewhere, but the behaviour is always the same. I also tried adding the reset code (&lt;code&gt;SEI&lt;/code&gt;, etc), but that just gives slightly different, incorrect, results. I am trying to figure out if my code is wrong, or that I should look at other parts somewhere (noise, design ...)&lt;/p&gt;&#xA;&lt;p&gt;For clarity, this is the binary code that I am running:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00000000  48 65 6c 6c 6f 20 57 6f  72 6c 64 21 00 78 d8 a2  |Hello World!.x..|&#xA;00000010  ff 9a 20 28 80 a9 00 85  10 a9 80 85 11 20 5d 80  |.. (......... ].|&#xA;00000020  ea 4c 20 80 a2 ff 9a 60  a9 00 8d f8 7f 8d f9 7f  |.L ....`........|&#xA;00000030  a9 30 20 45 80 a9 01 20  45 80 a9 0f 20 45 80 60  |.0 E... E... E.`|&#xA;00000040  3a 8d f9 7f 60 8d f8 7f  a9 01 8d f9 7f 20 40 80  |:...`........ @.|&#xA;00000050  60 8d f8 7f a9 05 8d f9  7f 20 40 80 60 a0 00 b1  |`........ @.`...|&#xA;00000060  10 f0 07 20 51 80 c8 4c  5f 80 60                 |... Q..L_.`|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; I created a very simple program that loops forever, with a simple &lt;code&gt;JMP&lt;/code&gt; and that runs fine. Which make me think noise is not a problem here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; This is how I attach the Arduino (pin 2 is connected to PHI2 (pin 37) of the CPU):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#define CLOCK 2&#xA;&#xA;pinMode(CLOCK, INPUT_PULLUP);&#xA;attachInterrupt(digitalPinToInterrupt(CLOCK), onClock, FALLING);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; I attached an oscilloscope to the databus and see that at some point the level is 1.5V instead of 0 or 5, so I think the design is failing somewhere...&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; this is my design:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HRrFv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HRrFv.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="575" LastEditorUserId="575" LastEditDate="2021-05-15T14:51:46.013" LastActivityDate="2021-05-15T14:51:46.013" Title="Why does the JSR operation not jump?" Tags="&lt;assembly&gt;&lt;6502&gt;" AnswerCount="1" CommentCount="28" ContentLicense="CC BY-SA 4.0" />
  <row Id="19648" PostTypeId="2" ParentId="13225" CreationDate="2021-04-17T22:17:13.477" Score="2" Body="&lt;p&gt;A good workaround is to use a terminal or PC as a &amp;quot;soft-printer&amp;quot; for listings while edititng, or even ascii up/download over the serial line (the slower port, max 4800bps). The basic is well equipped to handle this, if xxxx is your line parameters (see the manual)you simply LOAD &amp;quot;COM0:(xxxxx),A&amp;quot; to receive ms-dos format textfiles from a terminal program at the other end. you do need per-line delays though or go down to about 600 bps. LIST&amp;quot;COM0:(xxxx)&amp;quot; lets you save into the pc terminal programs capture buffer, or set it the pc side to ascii download.&lt;/p&gt;&#xA;&lt;p&gt;just maybe this is what they did, use a serial terminal. It is easy from basic as well to OPEN #1,&amp;quot;COM0(xxxxx)&amp;quot;&#xA;PRINT#1&amp;quot;whatever&amp;quot;&#xA;CLOSE#1&lt;/p&gt;&#xA;&lt;p&gt;I modified a chess.c4 variant this way to display on a vt100-compatible terminal program (xterm) on the pc-side.&lt;/p&gt;&#xA;&lt;p&gt;Directly drive a monitor from the serial would require bit-banging at video speeds, this sounds very hard in deed.&lt;/p&gt;&#xA;" OwnerUserId="8400" LastActivityDate="2021-04-17T22:17:13.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19649" PostTypeId="1" CreationDate="2021-04-18T01:06:39.427" Score="3" ViewCount="200" Body="&lt;p&gt;I've been trying to find this out for ages. Having owned the Saturn version (which was the original release, BTW) when it was new, but also playing the PlayStation version at a cousin's house, I could've sworn back then that there were fewer save crystals in the Saturn version, thus making the Saturn version significantly harder. I could see that; maybe they got feedback such as &amp;quot;it's too difficult&amp;quot;, and added in some more save crystals for the PS release?&lt;/p&gt;&#xA;&lt;p&gt;I've tried to search for this information many times, the last time just now, but I never seem to find any comparison page which mentions this. It may be one of those things which I just imagined when I was a kid, and then it slowly turned into a &amp;quot;fact&amp;quot; in my own head.&lt;/p&gt;&#xA;" OwnerUserId="21442" LastEditorUserId="5222" LastEditDate="2021-04-18T09:56:05.590" LastActivityDate="2021-04-18T09:56:05.590" Title="Did Tomb Raider on Saturn have fewer save crystals than the PlayStation port?" Tags="&lt;sony-playstation&gt;&lt;game&gt;&lt;ports&gt;&lt;sega&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2021-04-18T15:11:09.817" ContentLicense="CC BY-SA 4.0" />
  <row Id="19650" PostTypeId="2" ParentId="19649" CreationDate="2021-04-18T06:32:23.743" Score="4" Body="&lt;p&gt;According to this website, &lt;a href=&quot;https://segaretro.org/Tomb_Raider&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://segaretro.org/Tomb_Raider&lt;/a&gt;&#xA;&amp;quot;The European Saturn version also have minor differences to level layouts (specifically some secret areas) because it was rushed to launch three months before the PlayStation version. This was fixed in the North American and Japanese versions.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;Maybe these differences are what you remember?&lt;/p&gt;&#xA;&lt;p&gt;I can find no evidence of specific changes in save points.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastActivityDate="2021-04-18T06:32:23.743" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19651" PostTypeId="2" ParentId="19647" CreationDate="2021-04-18T13:54:23.790" Score="1" Body="&lt;p&gt;The 6502 cannot be single stepped, and neither can the 65C02, as they use DRAM cells for their internal registers.&lt;/p&gt;&#xA;&lt;p&gt;If you want single-stepping, you have to buy a 65C02&lt;strong&gt;S&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3459" LastActivityDate="2021-04-18T13:54:23.790" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19652" PostTypeId="1" CreationDate="2021-04-18T18:00:37.693" Score="6" ViewCount="250" Body="&lt;p&gt;On the Commodore 64, there is a 12 bit datapath between memory and the VIC II: the ordinary screen data, which is in DRAM, and another 4 bits which comes from another SRAM chip which may be paged into the CPU's address space. This area contains colour information.&lt;/p&gt;&#xA;&lt;p&gt;It's occurred to me that exactly the same could be done on the ZX Spectrum, so that the ULA, or whatever hardware generates video, could get at both pixel data and attributes quicker. That could mean not needing to slow the CPU down. Or it could mean being able to use a slower DRAM for cheaper. But it would mean needing another 8 bit wide memory. Maybe a couple of 2114s or something.&lt;/p&gt;&#xA;&lt;p&gt;Is there any ZX Spectrum or clone that works this way?&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="3290" LastEditDate="2021-04-20T12:10:30.297" LastActivityDate="2021-04-20T12:10:30.297" Title="Did any ZX Spectrum clones use a 16 bit datapath between memory and video generation?" Tags="&lt;zx-spectrum&gt;&lt;video&gt;&lt;zx-spectrum-clones&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19653" PostTypeId="2" ParentId="11801" CreationDate="2021-04-19T10:22:20.600" Score="1" Body="&lt;p&gt;I happen to find an explanation on &lt;a href=&quot;https://en.wikipedia.org/wiki/Unisys_2200_Series_system_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;36-bit floatpoint&lt;/a&gt; advantage over 32-bit from an article in the WIKI, which I found interesting but unable to verify. It says.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The 1100 Series has used a 36-bit word with 6-bit characters since 1962. This word and character size was a Department of Defense (DoD) requirement.[citation needed] Since the military needed to be able to calculate accurate trajectories, design bridges, and perform other engineering and scientific calculations, they needed more than 32 bits of precision. A 32-bit floating point number only provided about 6 digits of accuracy while a 36 bit number provided the 8 digits of accuracy that were accepted as the minimum requirement. Since memory and storage space and costs drove the system, going to 64 bits was simply not acceptable in general. These systems use ones' complement arithmetic, which was not unusual at the time. Almost all computer manufacturers of the time delivered 36-bit systems with 6-bit characters including IBM, DEC, General Electric, and Sylvania.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, now it turns out to me that IBM's adoption of 32-bit, rather than other firms sticking to 36-bit to &lt;a href=&quot;http://gunkies.org/wiki/List_of_36-bit_computers&quot; rel=&quot;nofollow noreferrer&quot;&gt;1996&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/UNIVAC_1100/2200_series#UNISYS_ClearPath_IX_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;new century&lt;/a&gt;, is a big surprise indeed.&lt;/p&gt;&#xA;&lt;p&gt;PS: As for charset, it's not that surprising.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The 6-bit character set used by the 1100 Series is also a DoD mandated set. It was defined by the Army Signal Corps and called Fieldata (data returned from the field).&lt;a href=&quot;https://en.wikipedia.org/wiki/Unisys_2200_Series_system_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt; The 1108 provided a 9-bit character format in order to support ASCII and later the ISO 8-bit sets, but they were not extensively used until the 1980s again because of space constraints.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Thus I don't think packing five 7-bit ASCII in 36bit is a big deal or ASCII justified 8-bit bytes.&lt;/p&gt;&#xA;" OwnerUserId="17812" LastActivityDate="2021-04-19T10:22:20.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19654" PostTypeId="2" ParentId="19652" CreationDate="2021-04-19T15:47:20.850" Score="6" Body="&lt;p&gt;There is a Spectrum clone, namely &lt;a href=&quot;https://en.wikipedia.org/wiki/ATM_(computer)&quot; rel=&quot;noreferrer&quot;&gt;ATMTurbo&lt;/a&gt;, that uses 16-bit memory bus. However, 16-bitness of memory is only used in extended video modes of the machine, including text mode, 320x200 16bpp mode and 640x200 hires (1 attr byte per 1 pixel byte) modes. In legacy 256x192 ZX mode, only 8 bits of memory bus are used to fetch video.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastEditorUserId="4692" LastEditDate="2021-04-19T15:52:22.643" LastActivityDate="2021-04-19T15:52:22.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19655" PostTypeId="1" AcceptedAnswerId="19656" CreationDate="2021-04-19T19:00:42.613" Score="157" ViewCount="26900" Body="&lt;p&gt;I installed Windows NT 3.1 on a Compaq ProSignia 3080 system, because of several reasons: I know that this machine was running Windows NT 3.1 when it was in productive use. And I think this machine was one of the machines Microsoft explicitly targeted with Windows NT. For improved performance, I maxed out the RAM at 128MB and swapped the socketed Intel 486DX-33 by an AMD enhanced 486DX4-SV8B (write-back cache and SMM) in a voltage adapter socket. I postponed dealing with BIOS support for 486DX4 processors, and jumpered the processor to a 2x multiplier. Without chipset support for L1 write-back and with a 2x multiplier, the processor is supposed to be software compatible to the Intel 80486DX2-66, which is a supported option for that system.&lt;/p&gt;&#xA;&lt;p&gt;While installing Windows NT 3.1 worked perfectly, I really like to tinker with my retro stuff. The Windows NT 3.1 CD comes with the full set of debugging symbols, I'm curious into investigating why NetDDE throws an error into the event log, and the system crashes with a specific EISA ethernet card (which might be due to faulty hardware), so I decided to dive into kernel debugging. Setting up kernel debugging is straight-forward, once you realize you should use the &lt;code&gt;i386kd&lt;/code&gt; executable supplied with Windows NT 3.1 instead of &lt;code&gt;kd&lt;/code&gt;/&lt;code&gt;ntkd&lt;/code&gt; from the current Windows 10 develepmont kit.&lt;/p&gt;&#xA;&lt;p&gt;As soon as I want to break in (using Ctrl-C in &lt;code&gt;i386kd&lt;/code&gt;), the target machine reboots instead of providing a &lt;code&gt;kd&amp;gt;&lt;/code&gt; prompt.&lt;/p&gt;&#xA;&lt;p&gt;I already tested the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Memory in that system is OK&lt;/li&gt;&#xA;&lt;li&gt;The system files are not corrupted&lt;/li&gt;&#xA;&lt;li&gt;There is no hardware watchdog active that reboots the machine when the kernel is interrupted for debugging&lt;/li&gt;&#xA;&lt;li&gt;The USB-to-serial adapter I use (which seems to be a counterfeit PL2301) in the host communicates properly. It's not mis-sending some debugger commands as &amp;quot;reboot system&amp;quot; command (the KD protocol provides one, though!)&lt;/li&gt;&#xA;&lt;li&gt;It's not related to some remote management or alerting options provided by the mainboard.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10479" LastEditorUserId="15334" LastEditDate="2021-04-25T14:11:04.280" LastActivityDate="2021-04-25T14:11:04.280" Title="Why does trying to break into the NT 3.1 kernel reboot my 486DX4 machine?" Tags="&lt;compatibility&gt;&lt;debugging&gt;&lt;bugs&gt;&lt;80486&gt;&lt;windows-nt-31&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="19656" PostTypeId="2" ParentId="19655" CreationDate="2021-04-19T19:00:42.613" Score="224" Body="&lt;h1&gt;Short explation&lt;/h1&gt;&#xA;&lt;p&gt;The Windows NT 3.1 kernel is incompatible with enhanced 486 processors. Specifically, it is incompatible with 486 processors providing the &lt;code&gt;CPUID&lt;/code&gt; instructions. Kernel debugging works fine with the 486DX-33 that was originally installed in the machine, and with the older non-enhanced core in a write-through Am486DX4-NV8T without SMM.&lt;/p&gt;&#xA;&lt;p&gt;If your goal is just toying around with NT 3.1 kernel debugging, you might want to use a processor that is compatible with Windows NT 3.1 out-of-the-box. If you are as curious as me, you might want to fix Windows NT. Keep reading in this case.&lt;/p&gt;&#xA;&lt;h1&gt;The underlying issue&lt;/h1&gt;&#xA;&lt;p&gt;The incompatibility is due to a bug in &lt;code&gt;KiSaveProcessorControlState&lt;/code&gt; (and a similar bug in the counterpart &lt;code&gt;KiRestoreProcessorControlState&lt;/code&gt;), which is called from three locations inside NTOSKRNL.EXE:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When an exception is reflected to the kernel debugger using &lt;code&gt;KdpTrap&lt;/code&gt; (If I use Ctrl-C to break into the kernel debugger, a breakpoint exception is raised from the break-in polling functionality in the timer tick interrupt)&lt;/li&gt;&#xA;&lt;li&gt;When &lt;code&gt;KeBugCheckEx&lt;/code&gt; is called (i.e. the &amp;quot;blue screen&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;When &lt;code&gt;KiSaveProcessorState&lt;/code&gt; is invoked. This appears to never happen, as this function is neither exported nor called from inside NTOSKRNL if the control flow analysis by IDA in NTOSKRNL.EXE is exhaustive.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This function is supposed to save the processor control registers into an extended &lt;code&gt;CONTEXT&lt;/code&gt; structure. Its disassembly looks like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.text:80106740 ; __stdcall KiSaveProcessorControlState(x)&#xA;.text:80106740                 public _KiSaveProcessorControlState@4&#xA;.text:80106740 _KiSaveProcessorControlState@4 proc near&#xA;.text:80106740&#xA;.text:80106740 dest            = dword ptr  4&#xA;.text:80106740&#xA;.text:80106740                 mov     edx, [esp+dest]&#xA;.text:80106744                 xor     ecx, ecx&#xA;.text:80106746                 mov     eax, cr0&#xA;.text:80106749                 mov     [edx+0CCh], eax&#xA;.text:8010674F                 mov     eax, cr2&#xA;.text:80106752                 mov     [edx+0D0h], eax&#xA;.text:80106758                 mov     eax, cr3&#xA;.text:8010675B                 mov     [edx+0D4h], eax&#xA;.text:80106761                 mov     [edx+0D8h], ecx&#xA;.text:80106767                 cmp     ds:word_FFDFF138, 5&#xA;.text:8010676F                 jb      short @@before_pentium&#xA;.text:80106771                 mov     eax, cr4&#xA;.text:80106774                 mov     [edx+0D8h], eax&#xA;.text:8010677A @@before_pentium:&#xA;.text:8010677A                 mov     eax, dr0&#xA;.text:8010677D                 mov     [edx+0DCh], eax&#xA;.text:80106783                 mov     eax, dr1&#xA;.text:80106786                 mov     [edx+0E0h], eax&#xA;.text:8010678C                 mov     eax, dr2&#xA;.text:8010678F                 mov     [edx+0E4h], eax&#xA;.text:80106795                 mov     eax, dr3&#xA;.text:80106798                 mov     [edx+0E8h], eax&#xA;.text:8010679E                 mov     eax, dr6&#xA;.text:801067A1                 mov     [edx+0ECh], eax&#xA;.text:801067A7                 mov     eax, dr7&#xA;.text:801067AA                 mov     dr7, ecx&#xA;.text:801067AD                 mov     [edx+0F0h], eax&#xA;.text:801067B3                 sgdt    fword ptr [edx+0F6h]&#xA;.text:801067BA                 sidt    fword ptr [edx+0FEh]&#xA;.text:801067C1                 str     word ptr [edx+104h]&#xA;.text:801067C8                 sldt    word ptr [edx+106h]&#xA;.text:801067CF                 retn    4&#xA;.text:801067CF _KiSaveProcessorControlState@4 endp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This function is supposed to save all control register (CR0, CR2, CR3, and CR4 on pentium and later processors), all debug registers (DR0-DR3, DR6, DR7) and various global protected mode settings (the address of the GDT, the address of the IDT, the selector of the active TSS and the selector of the LDT). To detect the processor type, it uses a value from the KPRCB (Kernel Processor Control Block). The KPRCB is part of the KPCR (Kernel Processor Control Region). The KPRCB for the boot processor (or the only processor on uniprocessor systems) is located at virtual address &lt;code&gt;FFDFF120&lt;/code&gt;, which is hard-coded into this method. &lt;a href=&quot;https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/ntos/i386_x/kprcb/index.htm&quot; rel=&quot;noreferrer&quot;&gt;Geoff Chappell&lt;/a&gt; writes this about the relevant part of the KPRCB in NT 3.1:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;+018   CHAR CpuType;&#xA;+019   CHAR CpuID;&#xA;+01A   UShort CpuStep;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;These members of the KPCRB are initialized by &lt;code&gt;KiSetProcessorType&lt;/code&gt;, which identifies the relevant processors correctly (but be aware that it mistrusts processors that report a CPUID feature level above 3 and considers them as &amp;quot;generic non-CPUID capable 586 compatible processors&amp;quot;. The byte at offset 18 is set to 4 for 486 processors, 5 for Pentium processors and 6 for Pentium Pro and Pentium II/III processors. The byte at offset 19 is a boolean flag that indicates whether the processor support CPUID and it behaves &amp;quot;reasonable&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;A very attentive reader might already have noticed the bug: The CMP instruction uses the &lt;em&gt;word&lt;/em&gt; at address &lt;code&gt;FFDFF138&lt;/code&gt; (which is 18h bytes into the KPRCB), instead of the &lt;em&gt;byte&lt;/em&gt; at that address. This means the byte at offset 19h in the KPRCB is considered part of the model number. If a processor supports CPUID, its model number is considered to be 256 bigger than it actually is. This means Windows NT 3.1 treats a CPUID capable 80-4-86 processor as 80-260-86 processor. And as 260 is way larger than 5 (Pentium), that processor better had CR4.&lt;/p&gt;&#xA;&lt;h1&gt;The fix&lt;/h1&gt;&#xA;&lt;p&gt;The fix is obvious once the bug is identified. The instruction &lt;code&gt;cmp     ds:word_FFDFF138, 5&lt;/code&gt; only appears twice in NTOSKRNL.EXE, specifically in &lt;code&gt;KiSaveProcessorControlState&lt;/code&gt; and &lt;code&gt;KiRestoreProcessorControlState&lt;/code&gt;, and it needs to be patched to be a byte compare instead of a word compare. Use your favorite hex editor to patch &lt;code&gt;66 83 3D 38 F1 DF FF 05&lt;/code&gt; to &lt;code&gt;90 80 3D 38 F1 DF FF 05&lt;/code&gt;, two times. This fix applies both the NTOSKRNL.EXE from the original NT 3.1 Advanced Server distribution as well as NT 3.1 SP3.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2021-04-19T19:00:42.613" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="19657" PostTypeId="1" AcceptedAnswerId="19659" CreationDate="2021-04-20T03:08:11.253" Score="21" ViewCount="7088" Body="&lt;p&gt;Though today various power-of-2 word sizes seems to be the norm, back in the 50-60s multiple-of-6 word sizes was more popular and was required by Department of Defense(DOD) in particular.&#xA;36-bit UNISYS ClearPath IX series survive even today.&lt;/p&gt;&#xA;&lt;p&gt;With many of the pros mentioned in &amp;quot;&lt;a href=&quot;https://retrocomputing.stackexchange.com/q/11801&quot;&gt;What was the rationale behind 36 bit computer architectures?&lt;/a&gt;&amp;quot;, was there some particular design theory or constraint that made a 32-bit word size attractive for IBM to migrate to?&lt;/p&gt;&#xA;&lt;p&gt;BTW: I don't think 7-bit ASCII justified 8 bit bytes. 36-bit words pack better than 32-bit words. EBCDIC is a better rationale, but it won't save much effort to emulate or migrate code from 6-bit BCDIC to 8-bit EBCDIC than to contemporary, IBM-driven, 7-bit ASCII.&lt;/p&gt;&#xA;" OwnerUserId="17812" LastEditorUserId="576" LastEditDate="2021-04-22T08:32:12.483" LastActivityDate="2021-04-22T08:32:12.483" Title="What was the rationale behind 32-bit computer architectures?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;architecture&gt;&lt;ibm360&gt;&lt;32-bit&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19658" PostTypeId="2" ParentId="19657" CreationDate="2021-04-20T04:04:48.567" Score="6" Body="&lt;p&gt;One small reason is that you can access memory as a bit array without needing to divide (or do a modulo).  Just use the bottom N bits for the byte or word or data cache line position or shift, and the rest of the bits left over as a memory address offset.  Which can be done in hardware for free if needed.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2021-04-20T04:04:48.567" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19659" PostTypeId="2" ParentId="19657" CreationDate="2021-04-20T05:05:45.540" Score="37" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;there some particular design theory or constraint that made a 32-bit word size attractive for IBM to migrate to?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It all comes down to the most basic data type, addressing constrains and, less important, reuse of existing memory technology.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The byte size had to be a multiple of 4, as needed to accommodate BCD numbers without wasting space.&lt;/li&gt;&#xA;&lt;li&gt;So 8 was chosen as byte size it can hold a text character or two BCD digits with least possible waste.&lt;/li&gt;&#xA;&lt;li&gt;The Machine introduced not only the idea of 8 bit bytes, but also byte addressing as basic address granularity (*1)&lt;/li&gt;&#xA;&lt;li&gt;As a result word length had to be a power of 2 of the number of bytes within(*2).&lt;/li&gt;&#xA;&lt;li&gt;Words (binary arithmetic) within the /360 were primarily meant for address handling&lt;/li&gt;&#xA;&lt;li&gt;The first multiple of 1 is two, so 16 bits would have made sense as word/register size&lt;/li&gt;&#xA;&lt;li&gt;Except, the /360 design called for more addressable memory than just 64 KiB (*3)&lt;/li&gt;&#xA;&lt;li&gt;The next larger word size would be 32 bits - which in turn was quite future proof (*4).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Bottom Line, 32 bit is the first logic choice to satisfy all of the above: a word size that allows byte addressing with a byte size that can hold an integer amount of BCD symbols without waste (*5).&lt;/p&gt;&#xA;&lt;p&gt;As a side effect, 32 bits also allowed the reuse of existing 36-bit core module design as 32 data bits plus 4-bit ECC.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;BTW: I don't think 7-bit ASCII justified 8 bit bytes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;At that time computers were not about text processing - especially not a ISA with a major use in replacing tabulating machinery. Here text was used to print table headers and item names, not much more. Text storage was of &lt;em&gt;much&lt;/em&gt; lesser concern. It was about &amp;quot;unit price ✕ units sold ✕ tax rate&amp;quot; - all done in BCD. That's where the market was and the dollars would be spent, not fancy university projects or fantasy stuff like word processing. :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Before that, basically all machines had word addressing; byte manipulation was done using extraction instruction - or rather complicated combined word and bit(field) addressing.&lt;/p&gt;&#xA;&lt;p&gt;*2 - While power of two is not important for the number of bits within bytes or words, it is essential for addressing - at least with machines using binary addressing. So if a byte within a word has to be addressable without special means, the number of bytes in a word must be power of two.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Only the low end -30 (and the extremely reduced -20) maxed out at 64 KiB. The -40 was expandable to 256 KiB, while the -50 already started at 64 KiB and went up to 512 KiB.&lt;/p&gt;&#xA;&lt;p&gt;*4 - It was so gigantic, that they decided to use only 24 bits thereof - and it took more than 10 years until the first /370 could be ordered with 16 MiB - and more than 25 years before 32 bits were reached.&lt;/p&gt;&#xA;&lt;p&gt;*5 - The next bigger size would be 12-bit bytes and 48-bit words, which of course would mean that character storage would be quite wasteful. And no, putting a 6-bit character into a 12-bit byte would not help, as it would take away the ability to address characters: they would need packing and unpacking again. Not to mention that 6 bits was already seen as insufficient.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-04-20T08:02:40.600" LastActivityDate="2021-04-20T08:02:40.600" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19660" PostTypeId="2" ParentId="19657" CreationDate="2021-04-20T07:17:50.787" Score="5" Body="&lt;p&gt;Worthy of mention is the rise of the microprocessor- notably the 4004 which was designed for mostly numerical operation in calculators.  Whether the step to 8 bit architecture was inevitable is open to debate, but once memory ICs started being produced in 8-bit forms, it would be difficult to justify anything other than 16-bit as the next step.  Looking at x86 architecture it’s apparent that the move to 32-bit wasn’t done in one leap, but via 24-bit chicanery.&lt;/p&gt;&#xA;" OwnerUserId="19372" LastActivityDate="2021-04-20T07:17:50.787" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19662" PostTypeId="1" AcceptedAnswerId="19663" CreationDate="2021-04-20T12:57:44.813" Score="3" ViewCount="216" Body="&lt;p&gt;I received this off eBay yesterday and the seller had showed images of it working. The CRT shows many signs of life, I hear static when it turns on, a sound when I switch resolutions, the degaussing sound when it turns on, the indicator LED stays when its receiving input, but it just stays black.&lt;/p&gt;&#xA;&lt;p&gt;It has VGA and BNC connectors at the back but the problem is the same with both. I twice now have booted the PC and a faint image of the BIOS screen very quickly expands on the screen and fades out unil its black again. Ive also seen the OSD do the same thing once (I think also during boot).&lt;/p&gt;&#xA;&lt;p&gt;I'm just not sure what's going wrong. At first I thought it was a resolution issue on my PC's side, since both the seller and an online source listed it as 1800x1440x76hz (I assume the seller got their info from there), but the manual says its max resolution is 1600x1200x85. Ive tried pugging it into my motherboard's VGA port, an old discrete GPU's VGA, a DisplayPort to VGA adapter and an active (tested and working) DVI-D to VGA adapter adn the VGA port built into an older laptop. All of it behaved the same.&lt;/p&gt;&#xA;&lt;p&gt;Windows 10 correctly identifies and name of the monitor, and I can change the resolution and refresh rate, but the screen reamins black.&lt;/p&gt;&#xA;&lt;p&gt;I would really appreciate some help. Thank you!&lt;/p&gt;&#xA;" OwnerUserId="21458" LastActivityDate="2021-04-21T09:12:07.810" Title="CRT Mitsubishi Diamond Pro 1000 black screen: flashes BIOS logo during boot, but otherwise black" Tags="&lt;crt-monitor&gt;&lt;vga&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19663" PostTypeId="2" ParentId="19662" CreationDate="2021-04-20T17:15:10.673" Score="8" Body="&lt;p&gt;In the following I'm assuming you don't have the manual brightness control turned down to the minimum. That is the only trivial problem that might cause the issue.&lt;/p&gt;&#xA;&lt;p&gt;When the CRT isn't even able to display it's own OSD, there must be something seriously wrong with it. The OSD is produced by the CRT itself and should come up even without a working connection to an image source.&lt;/p&gt;&#xA;&lt;p&gt;The digital part of the monitor is certainly OK when Windows 10 is able to identify it properly.&lt;/p&gt;&#xA;&lt;p&gt;That means the analog part must have a problem. Old CRT monitors really are susceptible to damage from transport shock. It consists of some quite heavy parts like the flyback transformer or big capacitors soldered to the PCB that have a tendency of breaking loose by their sheer mass when handled in transport.&lt;/p&gt;&#xA;&lt;p&gt;And, no offense intended: If you need to ask what could be broken, you probably shouldn't try to open the case. CRT monitors work with very high hazardous voltages, that can kill you and can be present even long after the device has been switched off.&lt;/p&gt;&#xA;&lt;p&gt;Get an expert to repair the monitor (to me, it sounds like a simple fault, as it sounds as if the flyback transformer and the tube itself are OK), or write it off as transport damage.&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2021-04-21T09:12:07.810" LastActivityDate="2021-04-21T09:12:07.810" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19664" PostTypeId="1" CreationDate="2021-04-21T10:23:33.920" Score="4" ViewCount="211" Body="&lt;p&gt;I need to display HGR page 1 ($2000 to $3FFF) located in &lt;strong&gt;AUX memory&lt;/strong&gt; (not in MAIN memory).&#xA;According to the &amp;quot;Apple IIc Reference Manual - Volume 1&amp;quot;, page 45, I must first turn 80Store on by writing to the address $C001, then read the address &amp;quot;page 2&amp;quot; ($CO55). I understand this should display HGR1X (hires graphic in AUX memory).&#xA;The following code is an example, but it does not work: page 1 in main memory is still displayed :&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    org $8000&#xA;    lda $C052       ; mixoff&#xA;    lda $C050       ; graphics&#xA;    lda $C057       ; hires&#xA;    sta $C001       ; 80strore&#xA;    lda $C054       ; page1 : display page1 ($2000 to $3FFF) in main memory&#xA;                    ; it works.&#xA;    jsr rdkey       ; wait key from user&#xA;    lda $C055       ; page2 : HGR1X in AUX memory should be displayed now.&#xA;                    ; it doesn't work, main memory HGR page is still on screen.&#xA;    rts     &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What's wrong in that code?&#xA;Can you provide a very simple example of code that allows to display the HGR page 1 in &lt;strong&gt;AUX memory&lt;/strong&gt;?&#xA;&lt;strong&gt;Same question with page 2 in AUX memory ($4000 to $5FFF).&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;My goal is to create an animation showing alternately HGR page 1 and 2 in the main memory and in the auxiliary memory, by going instantly between these 4 pages.&lt;/p&gt;&#xA;" OwnerUserId="20782" LastEditorUserId="447" LastEditDate="2021-04-21T15:33:46.273" LastActivityDate="2021-04-21T15:33:46.273" Title="Apple IIc : displaying HGR page 1 in AUX memory" Tags="&lt;apple-ii&gt;&lt;graphics&gt;&lt;assembly&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19665" PostTypeId="2" ParentId="19664" CreationDate="2021-04-21T11:05:45.803" Score="5" Body="&lt;p&gt;&lt;em&gt;(From memory, don't have the manuals at hand)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;IIRC, there are not four pages, but 'only' two.&lt;/p&gt;&#xA;&lt;p&gt;Using AUX memory does not give additional pages, but expands HGR into DHGR.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;According to the &amp;quot;Apple IIc Reference Manual - Volume 1&amp;quot;, page 45,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;First of, when checking manuals, make sure to use the one referring to the computer you're using, As there are subtile differences between the models. Usually not much, but they may be important when exprlorring the fringes.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I must first turn 80Store on by writing to the address $C001, then read the address &amp;quot;page 2&amp;quot; ($CO55). I understand this should display HGR1X (hires graphic in AUX memory).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, these settings do not define what page is displayed, but what page is mapped within the 6502's address space.&lt;/p&gt;&#xA;&lt;p&gt;Display always used main memory to display either page. For the video logic pages in AUX memory aren't independent pages, but extensions to either the main page. Flipping AN3 ($C05E) makes it reading an additional byte from the same address in AUX memory in parallel to double the display data, turning HGR into DHGR (and 40 col into 80).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My goal is to create an animation showing alternately HGR page 1 and 2 in the main memory and in the auxiliary memory, by going instantly between these 4 pages.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sorry to disappoint you, but won't work, as there is only one pair of pages.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-04-21T11:05:45.803" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19667" PostTypeId="2" ParentId="18384" CreationDate="2021-04-21T19:29:16.730" Score="1" Body="&lt;p&gt;Shigeru Miyamoto and Takashi Tezuka talk about it in this interesting video about designing the game:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=zRGRJRUWafY&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=zRGRJRUWafY&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;At 4:07 they start talking about the game physics. The idea was to simulate Mario having weight, not just dots moving in whichever direction you push the controller.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Because it's an image drawn on a flat, 2d surface. When he moves around, goes backwards, and jumps, and then you try to reflect those actions using a flat surfaced image in a program you just don't feel that weight .... that's why there's a bit of slippage... adding weight helps the player believe it's a real character. This helps form an emotional attachment.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;There are other videos on YouTube where Miyamoto talks about the same topic a bit as well.&lt;/p&gt;&#xA;&lt;p&gt;To answer the question, this was mainly a Nintendo design decision that lends itself to great gameplay.&lt;/p&gt;&#xA;" OwnerUserId="10816" LastActivityDate="2021-04-21T19:29:16.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19668" PostTypeId="2" ParentId="494" CreationDate="2021-04-22T02:57:10.970" Score="1" Body="&lt;p&gt;Bob Bishop helped us with a Machine Control program using the Apple ][ as a Machine Controller with GREAT Graphics. Late '70 and early 80's&#xA;He showed me the trick where you insert the Machine Code in a REM Statement of the First line of basic, then modify the Line code to say it at the end. I forget the actual Tokens used.. I have them somewhere in a Stack of notes. The list will not show the Garbage as the list stopped looking at the line, and the Next Line Memory location Pointer showed the Start of the next printed line.  If the REM statement you have modified is the First line of the Program, and the First Line is just a REM Statement, then it's always in the same place in memory to execute a Call to.&lt;/p&gt;&#xA;" OwnerUserId="21490" LastActivityDate="2021-04-22T02:57:10.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19669" PostTypeId="1" AcceptedAnswerId="19670" CreationDate="2021-04-22T08:43:55.273" Score="3" ViewCount="221" Body="&lt;p&gt;Z80 board with a SIO/0. I am struggling to understand how CPU and SIO frequencies are related, if they are at all. SIO/0 datasheet didn't help much.&lt;/p&gt;&#xA;&lt;p&gt;If I clock both the CPU and the SIO(TX/RX) from a 1.84320Mhz oscillator all works fine. Only issue I've got here is I can only use x16 multiplier on SIO and use 115200 baud. For some reason x64 multiplier with 28800 baud only outputs gibberish. Is there any obvious reasons for this ?&lt;/p&gt;&#xA;&lt;p&gt;If I clock the CPU and SIO(CLK) at 4Mhz and SIO(TX/RX) 1.84320Mhz. It mostly works (this is my ideal configuration). But it is not as stable as the previous option. Cannot tell if this is due to higher CPU frequency or due to a frequency mismatch. (PIO works just fine at 4Mhz).&lt;/p&gt;&#xA;&lt;p&gt;Finally if I feed SIO(TX/RX) at 1.84320Mhz and try to single/slow step the CPU it never works, I mean I observe the code being executed successfully but nothing come out of serial port.&lt;/p&gt;&#xA;&lt;p&gt;Is there any requirement to have a somewhat matching CPU and TX/RX frequencies or are they completely independent. If they are, any ideas why SIO stops working when single stepped ?&lt;/p&gt;&#xA;&lt;p&gt;Updates as per the comments:&#xA;Both Z80 CLK and SIO CLK pin are always driven from the same clock, either 1.84320Mhz or 4.00Mhz. Question is about a potential requirement for this clock needing to match RX/TX clocks for the serial interfaces or if those are completely independent.&lt;/p&gt;&#xA;&lt;p&gt;All ICs are CMOS, Z80 and PIO perfectly support single-stepping or slow frequencies, I am only having this odd problem with SIO.&lt;/p&gt;&#xA;&lt;p&gt;This is a homebrew board with no special configuration. Z80, EEPROM, RAM, SIO, PIO are pretty much connected to each other as everyone else does.&lt;/p&gt;&#xA;" OwnerUserId="21002" LastEditorUserId="21002" LastEditDate="2021-04-23T11:00:11.880" LastActivityDate="2021-04-24T00:57:22.093" Title="Z80 - SIO/0 Frequencies" Tags="&lt;z80&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19670" PostTypeId="2" ParentId="19669" CreationDate="2021-04-22T09:32:20.650" Score="5" Body="&lt;h2&gt;TL;DR&lt;/h2&gt;&#xA;&lt;p&gt;The various issues are due clocking. In part by using 'unconventional' ways of clock handling but as well by simply violating specs.&lt;/p&gt;&#xA;&lt;p&gt;Main points are&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;SIO (and in fact CPU) are not static designs but dynamic. As such they requite certain clock speeds and relation.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Clocking the system at 10 Hz violates a whole bunch of rules&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Minimum system clock speed for the SIO is 250 kHz&lt;/li&gt;&#xA;&lt;li&gt;System clock needs to be at least 5 times transmission clock&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Having other chips (PIO, CPU) working that way does not mean all will&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some chips may even comply with such a low clock rate even while specified otherwise (CPU should not - then again, you never specified exactly which CPU is use).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some restrictions have been relaxed with the CMOS variants, but not all.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Z80 is a beast.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;em&gt;(The last is a general mantra to be spoken whenever touching a Zilog part, but mandatory for the SIO)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Build a more conventional single stepping circuit - like using DMA or WAIT insertion - and the issues should vanish at once.&lt;/p&gt;&#xA;&lt;p&gt;Beside that:&lt;/p&gt;&#xA;&lt;p&gt;Do not assume from single data items. &lt;em&gt;Read The Fine Data Sheet.&lt;/em&gt; In full and in all details. They are holy scriptures containing the whole meaning of the world (of that chip). Breath it. Skimming is an art reserved for the master - used to show off that they are fallible as well :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Z80 board with a SIO/0. I am struggling to understand how CPU and SIO frequencies are related, if they are at all. SIO/0 datasheet didn't help much.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As the per data sheet Feb 1980, section Timing:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;The SIO must have the same clock as the&#xA;CPU (same phase and frequency relationship,&#xA;not necessarily the same driver).&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If I clock the CPU and SIO(CLK) at 4Mhz and SIO(TX/RX) 1.84320Mhz. It mostly works (this is my ideal configuration). But it is not as stable as the previous option. Cannot tell if this is due to higher CPU frequency or due to a frequency mismatch. (PIO works just fine at 4Mhz).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The Z80 SIO is a rather odd beast, even compared to the other Z80 chips, especially due to the clocking constrains. There's a reason that Intel's 8251 and its grandchildren (16550) sold better. Also, there were later (Zilog) chips that could operate on real independent clock (IIRC).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Finally if I feed SIO(TX/RX) at 1.84320Mhz and try to single/slow step the CPU it never works, I mean I observe the code being executed successfully but nothing come out of serial port.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It might also depend on how your single stepping works. If you take away the clock, the SIO simply stops working.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Enlightenment from a comment:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I am not actually single stepping, a Arduino providing clock at about 10hz or so and monitoring buses and signals&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There it comes. The SIO is NOT static. Being a device that is clocked anyway, they had no need to make it static. The maximum cycle time for a Z80 SIO by the Feb 1980 data sheet is 4 µs or 0.25 MHz. Everything below 250 kHz is simply out of spec. And while 1.8 MHz might still work fine, 0.00001 MHz will not.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RsFx3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RsFx3.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;(Data Sheet Feb.1980)&lt;/p&gt;&#xA;&lt;p&gt;Even quite resource-strapped early systems did their single stepping not by clock throttling but with software, bus arbitration (DMA-request) or cycle stretching (wait insertion). Only these methods will guarantee that the CPU and the system at whole will work as specified.&lt;/p&gt;&#xA;&lt;p&gt;Lately it became kind of a trend among newcomers to use an Arduino or RPi or alike to throttle a classic CPU. Sounds great at first. This may work with some CPUs and some system setups, but it relies heavy on static operation of all components, relation between them and other factors. So, methods relying on many unknown factors to work exactly like it would be best is ... well ... let's just say &lt;strong&gt;not a good idea&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Even without knowing your setup, I'd say it's your way of &amp;quot;single stepping&amp;quot;. which causes at least some of the issues. You may need to create a way more traditional single-stepping solution. Enjoy it; it's the first step in creating a wonderful front panel.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;All ICs are CMOS, Z80 and PIO perfectly support single-stepping or slow frequencies, I am only having this odd problem with SIO.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Err sure they &lt;em&gt;support that use&lt;/em&gt;, or do they just &lt;em&gt;seem to work in your setup&lt;/em&gt;?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This is a homebrew board with no special configuration. Z80, EEPROM, RAM, SIO, PIO are pretty much connected to each other as everyone else does.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Especially when beginning it is helpful to remember that there is no non-special circuit and 'pretty much' leaves a lot of freedom.&lt;/p&gt;&#xA;&lt;p&gt;With all the software we're doing (and software like hardware design), we tend to see hardware the same, but in reality, working with physical hardware means being able to bend the fabric of (digital) reality. Up to a point were it's beyond the physics of existence - like here :))&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;From a further comment:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;On SIO datasheet,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It might help if you specify (and optional link) the data sheet you're referring to. Mine are taken of off the Z80 SIO Product Specification sheet of February 1980 on my storage system - should be out there on the net as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for TcC (Clock Cycle Time), it gives a minimum but the maximum is DC. I read this as, &amp;quot;clock cycle can take forever&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, that gives a clear clue - wrong table you'r looking at. Beside that the page before already defines the minimum clock rate for that chip at 250 kHz, not 10, this one puts in addition transmission clock in relation to system clock. Of course, transmission clock can be as slow as one wants - here noted as infinite - but the Issue is not about transmission clock but system clock (see above) and their relation as seen on the very page cited:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zvaYU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zvaYU.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;While TxC may be in either state as long as one wants, system clock must be at least five times as high. So for 115 kHz transmission rate system clock must be at least 575 kHz. Clocking at 10 Hz does violate this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; Data sheets are holy scriptures. one has to read each and every letter before starting to preach ... err ... solder, as the true meaning is often hidden in plain sight.  &lt;em&gt;But it's always there&lt;/em&gt; - at least in later editions :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;For debugging serial it usually helps to select a word format with most relaxed parameters, like maximum stop bits, and checking on the receiving side only for low order bits. That helps cross a few pitfalls to get basic workings.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-24T00:57:22.093" LastActivityDate="2021-04-24T00:57:22.093" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19671" PostTypeId="2" ParentId="17792" CreationDate="2021-04-22T16:24:09.370" Score="2" Body="&lt;p&gt;I agree with what people are saying here, but the answer is not perfectly clear. To say that you cannot write to an EEPROM but only program it, is a bit odd. The datasheets for the EEPROM list how many write/erase cycles the EEPROM is rated for. They call it write.&lt;/p&gt;&#xA;&lt;p&gt;A good example that comes to mind is an Arduino UNO. The EEPROM is not set by the factory and you write to it to as needed. It's common to use it to maintain state between power cycles, set things like ip address, urls, etc. that you want to maintain as data and not hardcode it. However, it's only rated at 100K write/erase cycles. So it is not intended to be used for short-term data storage.&lt;/p&gt;&#xA;&lt;p&gt;I think the point is that ROM is designed to be written to rarely and RAM is designed to be written to often. Plus, EEPROM will degrade over time. I think between 100K to 250K write/erase cycles most EEPROMs are rated for. So you should use it as long-term storage.&lt;/p&gt;&#xA;" OwnerUserId="21537" LastActivityDate="2021-04-22T16:24:09.370" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19673" PostTypeId="2" ParentId="5312" CreationDate="2021-04-22T18:20:21.810" Score="6" Body="&lt;p&gt;I think &lt;a href=&quot;https://www.zxuno.com/forum/viewtopic.php?f=39&amp;amp;t=4099&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; (in Spanish) has what you're looking for.  It describes how to install and use CP/M with divMMC (a full translation of the installation steps and CP/M section is at the bottom of this answer).  There are two files that need to be downloaded: &lt;a href=&quot;https://mega.nz/file/Sp5DSaST#5wcX7vyLQ3jYF_ua3TVwLqO9dr5e2DIohEXY99epAZM&quot; rel=&quot;nofollow noreferrer&quot;&gt;an SD card image&lt;/a&gt; and possibly &lt;a href=&quot;https://www.zxuno.com/forum/download/file.php?id=2574&quot; rel=&quot;nofollow noreferrer&quot;&gt;some ROMs&lt;/a&gt; (see below).  The CP/M hack from Otivax (mentioned in @mcleod_ideafix's answer) is included:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Cuando veais el 1 MMC&lt;sup&gt;1&lt;/sup&gt; es momento de pulsar ENTER y aparecerá el menú de la distribución:&lt;/p&gt;&#xA;&lt;p&gt;[ Image of distribution menu]&lt;/p&gt;&#xA;&lt;p&gt;Las opciones que se presentan&lt;sup&gt;2&lt;/sup&gt; son:&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;CP/M 3.0&lt;/strong&gt;: Arrancamos una versión del CP/M plus del Spectrum +3 &lt;a href=&quot;https://www.va-de-retro.com/foros/viewtopic.php?t=5605#p98944&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;hackeada&lt;/em&gt;&lt;/a&gt; por &lt;strong&gt;otivax&lt;/strong&gt; para ser usada con unidades de almacenamiento masivo.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Translated to English:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When you see &lt;code&gt;1 MMC&lt;/code&gt; &lt;sup&gt;1&lt;/sup&gt; press &lt;code&gt;ENTER&lt;/code&gt; and the distribution menu will appear:&lt;/p&gt;&#xA;&lt;p&gt;[ Image of distribution menu ]&lt;/p&gt;&#xA;&lt;p&gt;The available options&lt;sup&gt;2&lt;/sup&gt; are:&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;CP/M 3.0&lt;/strong&gt;: Starts a Spectrum +3 version of CP/M &lt;a href=&quot;https://www.va-de-retro.com/foros/viewtopic.php?t=5605#p98944&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;hacked&lt;/em&gt;&lt;/a&gt; by &lt;strong&gt;otivax&lt;/strong&gt; to support mass storage devices.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The instructions are for use with a &lt;a href=&quot;https://zxuno.speccy.org/index_e.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX-Uno hardware emulator&lt;/a&gt; but I strongly suspect they'd work fine on original hardware.  It's not clear if a special ROM is required but if one is one can probably just burn the ROM image to a physical ROM chip and install it in the Speccy&lt;sup&gt;3&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Listed on the &amp;quot;Physical drives&amp;quot; line on the boot screen.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; I've only shown CP/M but there are other applications that can be booted off of the SD card.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;3&lt;/sup&gt; &lt;em&gt;Spectrum cores&lt;/em&gt;, below, refer to code for programming the ZX-Uno's FPGA; just ignore them if you're using original hardware.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Partial translation from &lt;a href=&quot;https://www.zxuno.com/forum/viewtopic.php?f=39&amp;amp;t=4099&quot; rel=&quot;nofollow noreferrer&quot;&gt;the original Spanish&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;h1&gt;Installation&lt;/h1&gt;&#xA;&lt;p&gt;First download the disk image of the distribution that I've created and save it to an SD card.  The image is designed for 1GB cards and larger.  For use with CP/M only 1GB and 2GB cards are supported (larger sizes won't work).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://mega.nz/file/Sp5DSaST#5wcX7vyLQ3jYF_ua3TVwLqO9dr5e2DIohEXY99epAZM&quot; rel=&quot;nofollow noreferrer&quot;&gt;2020-10-15_ZX-Uno_Spectrum+3e.7z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As mentioned above, this disk image needs to be used along with Garry Lancaster's +3e ROMs.  If you haven't yet installed them in your ZX-Uno ROM set, do so now.  The easiest way to install my most recent ROM set (as of 2020-10-15) is by downloading it from here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.zxuno.com/forum/download/file.php?id=2574&quot; rel=&quot;nofollow noreferrer&quot;&gt;2020.09.09-ROMS.ZX1.zip&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ey4jU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ey4jU.png&quot; alt=&quot;ZX-Uno screenshot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The simplest way to install these ROMs in your ZX-Uno is to place the &lt;code&gt;ROMS.ZX1&lt;/code&gt; file in the root directory of your regular SD card (the one you use for esxDOS).  Insert the card into the ZX-Uno and start it in &amp;quot;rooted&amp;quot; mode by pressing &lt;code&gt;/&lt;/code&gt; on the numeric keypad.  When the screen turns red, press &lt;code&gt;ESC&lt;/code&gt; then choose, e.g., the Spectrum 48k ROM.  Once you've booted into rooted mode type &lt;code&gt;.ROMSUPGR&lt;/code&gt; (make sure you include the leading period).  The ROMs will now be burned and you can start using your ZX-Uno with the new ROMs.&lt;/p&gt;&#xA;&lt;p&gt;Lastly, the image only works with &lt;strong&gt;mcleod_ideafix&lt;/strong&gt;'s Spectrum core which allows one to select a +3e ROM from a list.  Note, however, that with the &lt;strong&gt;EXP27-160820&lt;/strong&gt; version CP/M won't boot.  Therefore I usually use the &lt;strong&gt;EXP27-230420&lt;/strong&gt; version (modified by &lt;strong&gt;azesmbog&lt;/strong&gt; to include support for the SAA1099 sound chip) which works perfectly with CP/M.  If you don't plan to use CP/M then mcleod_ideafix's latest Spectrum core will work fine.&lt;/p&gt;&#xA;&lt;p&gt;The various Spectrum core versions can be downloaded &lt;a href=&quot;https://www.zxuno.com/forum/viewtopic.php?f=14&amp;amp;t=3993&quot; rel=&quot;nofollow noreferrer&quot;&gt;from here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h1&gt;Usage&lt;/h1&gt;&#xA;&lt;p&gt;Place the SD card you prepared into the ZX-Uno.  When it starts, press &lt;code&gt;ESC&lt;/code&gt;, select one of the +3 ROMs, then let it finish booting.  You should see something like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rkjpz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rkjpz.png&quot; alt=&quot;Bootloader menu&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Depending on which ROM you chose, the menu will appear in either Spanish or English.  The menu may be titled +3e or +2e but this won't cause problems.  What is important, though, is that &lt;code&gt;1 MMC&lt;/code&gt; appears; this indicates that the SD card is available.  If you see &lt;code&gt;0 MMC&lt;/code&gt; then do a Soft Reset (&lt;code&gt;CTRL&lt;/code&gt; + &lt;code&gt;ALT&lt;/code&gt; + &lt;code&gt;SUPR&lt;/code&gt;) until &lt;code&gt;1 MMC&lt;/code&gt; is displayed.  If that doesn't work then try removing and reinserting the SD card (without powering off) followed by a Soft Reset.&lt;/p&gt;&#xA;&lt;p&gt;Once you see &lt;code&gt;1 MMC&lt;/code&gt; press &lt;code&gt;ENTER&lt;/code&gt; and the distribution menu will come up:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fUtPd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fUtPd.png&quot; alt=&quot;Distribution menu&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The available options are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Workbench +3e&lt;/strong&gt;: Start &lt;strong&gt;Octocom&lt;/strong&gt;'s &lt;a href=&quot;http://octocom.speccy.org/workbench_es.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Workbench +3e&lt;/a&gt;.  This is version 2.01 that I've modified a bit.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;CP/M 3.0&lt;/strong&gt;: Starts a Spectrum +3 version of CP/M &lt;a href=&quot;https://www.va-de-retro.com/foros/viewtopic.php?t=5605#p98944&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;hacked&lt;/em&gt;&lt;/a&gt; by &lt;strong&gt;otivax&lt;/strong&gt; to support mass storage devices.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;+3e Explorer&lt;/strong&gt;: A &lt;a href=&quot;https://retro-locos.000webhostapp.com/foros/viewtopic.php?f=56&amp;amp;t=39#p160&quot; rel=&quot;nofollow noreferrer&quot;&gt;file browser and application launcher&lt;/a&gt; written by &lt;strong&gt;SINCLAIR&lt;/strong&gt; for use with +3e ROMs.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;uGophy (WiFi)&lt;/strong&gt;: A &lt;a href=&quot;https://nihirash.net/ugophy-1-0-and-nettools-for-zx-spectrum/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gopher protocol client&lt;/a&gt; written by &lt;strong&gt;Nihirash&lt;/strong&gt; for use with the WiFi add-on and the +3DOS filesystem.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;NetMan (WiFi)&lt;/strong&gt;: Configurator to connect to a WiFi network written by &lt;strong&gt;Nihirash&lt;/strong&gt; for use with the WiFi add-on and the +3DOS filesystem.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;WB +3e Setup&lt;/strong&gt;: Configurator for Workbench +3e.  You can choose the pointer device (Kempston mouse or Sinclair joystick), the number of mass storage devices (1 or 2), and the language (Spanish or English).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Exit&lt;/strong&gt;: Return to the Spectrum +3e home menu.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;h2&gt;CP/M 3.0&lt;/h2&gt;&#xA;&lt;p&gt;To use this, the image must have been written to an SD card no larger than 2GB in size and the Spectrum core must be a supported version (such as EXP27-230420) since the one published on August 16, 2020 won't work.  Before starting up I usually set the CPU speed to 28 MHz since this makes CP/M a bit more response than at the Z80's original 3.5 MHz.&lt;/p&gt;&#xA;&lt;p&gt;Once booted, we can use the same Locomotive CP/M 3.0 that was released for the Spectrum +3 but modified to support mass storage devices such as the divMMC.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uOOnw.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uOOnw.jpg&quot; alt=&quot;CP/M booting&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This CP/M installation has been updated with the utilities and patches found on &lt;a href=&quot;https://www.secarica.ro/index.php/en/zx-zone/plus3-software/cpm-plus-for-plus3-related-software&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;C:&lt;/code&gt; and &lt;code&gt;D:&lt;/code&gt; drives are full of all sorts of programs:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BK28c.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BK28c.png&quot; alt=&quot;List of available programs&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Most of these are from the &lt;strong&gt;&amp;quot;Multicomp FPGA - CP/M Demo Disk&amp;quot;&lt;/strong&gt; with programs for CP/M 2.2 but there are also ones for CP/M +3 such as HiSoft's DevPac80 assembler development package and the WordStar 3.0 word processor.&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;h1&gt;Documentation&lt;/h1&gt;&#xA;&lt;p&gt;In addition to the distribution image, you can download this file which has a whole bunch of manuals and other instructions, in both Spanish and English, sorted by the program folder that they refer to.  This is an essential reference if you want to get the most out of this distribution.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://mega.nz/file/78xXVSAY#vYhlRvP_8ICzNPdCGFLnSKFWd3wWmtVedo1xuBB8Ubk&quot; rel=&quot;nofollow noreferrer&quot;&gt;2020-10-15_ZX-Uno_Spectrum+3e-Documentacion.7z&lt;/a&gt; (501,1 MiB)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XMDAG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XMDAG.png&quot; alt=&quot;Documentation directory listing&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Video about the distribution&lt;/h1&gt;&#xA;&lt;p&gt;I saved this 'til now since I knew if I mentioned it earlier you'd go watch it and not bother reading any of the stuff that I put so much effort into writing! ☺&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/y0hkSr13r84&quot; rel=&quot;nofollow noreferrer&quot;&gt;[ Youtube video ]&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Modifying the contents of the distribution&lt;/h1&gt;&#xA;&lt;p&gt;A description of how to modify, extract, and add to the distribution will have wait for a later article, hopefully I can post something soon.&lt;br /&gt;&#xA;&lt;em&gt;[ I think &lt;a href=&quot;https://www.zxuno.com/forum/viewtopic.php?f=39&amp;amp;t=4102&quot; rel=&quot;nofollow noreferrer&quot;&gt;this is the article&lt;/a&gt; they're refering to (in Spanish). ]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;Last modified by &lt;a href=&quot;https://www.zxuno.com/forum/memberlist.php?mode=viewprofile&amp;amp;u=223&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;desUBIKado&lt;/strong&gt;&lt;/a&gt; on Oct 18, 2020 ...&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2021-04-24T05:03:23.907" LastActivityDate="2021-04-24T05:03:23.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19676" PostTypeId="2" ParentId="33" CreationDate="2021-04-23T14:24:40.617" Score="2" Body="&lt;p&gt;I can't stress enough the importance of cleaning heads especially when you are dealing with a quantity of old disks. One degrading disk will deposit material on the heads which can &lt;em&gt;destroy&lt;/em&gt; subsequent disks you put in. Floppy disk heads basically make direct contact with the disk surface, so any abrasive material (mold, dust or oxide coating) will scratch or dig a groove in the next disks you use. Of course the problem compounds because the material that it scrapes off only serves to make the heads more abrasive.&lt;/p&gt;&#xA;&lt;p&gt;I &lt;em&gt;also&lt;/em&gt; can't stress enough the importance of making sure the heads are 110% completely dry before trying to read any disks. Even after drying with a dry cloth or swab, I'd say 5 minutes isn't enough, wait at least 30 minutes. In my experience even the smallest little bit of moisture will act like silly putty and pull the disk surface right off - especially with older disks that have started to break down.&lt;/p&gt;&#xA;&lt;p&gt;I say this from recent experience of trying to archive a large collection of old 360K floppy disks, and before I realized what was actually happening managed to destroy quite a few disks (and possibly a drive too).&lt;/p&gt;&#xA;&lt;p&gt;In short, inspect every disk before you even put it in the drive. Look for any signs of mold or lines on the surface, and listen closely for any sound high-pitched sounds or scraping and if you hear it pull the disk out immediately! For any questionable disk, I'd highly recommend using a &amp;quot;sacrificial&amp;quot; disk drive, cleaning the heads after each disk and be prepared to destroy the next few disks you put in.&lt;/p&gt;&#xA;&lt;p&gt;For more reading on the topic, this article expands on some of these points in more detail with photos:&#xA;&lt;a href=&quot;http://www.retrotechnology.com/herbs_stuff/clean_disks.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.retrotechnology.com/herbs_stuff/clean_disks.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21323" LastActivityDate="2021-04-23T14:24:40.617" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19677" PostTypeId="2" ParentId="17792" CreationDate="2021-04-23T16:33:08.737" Score="2" Body="&lt;p&gt;My idea here is that the naming follows schematic and physical principles regarding information storage and its evolution over the time.&lt;/p&gt;&#xA;&lt;p&gt;Original static IC RAMs had a latch (two invertors feeding each other) that stored a single bit, counted at least 4 transistors for storage and at least 2 transistors to read and write the bit.&lt;/p&gt;&#xA;&lt;p&gt;Original IC ROMs (mask ROMs that have their contents fixed at manufacturing time) consisted single transistor (or an absence of it), and the data was probed by an attempt to open that transistor by feeding its gate with a 'ON' voltage. Depending on its presense and ability to turn on (=pull the wire to GND), a stored data bit was retrieved.&lt;/p&gt;&#xA;&lt;p&gt;PROMs and EPROMs had two-gate transistor per each addressable bit: one gate was isolated and carried a charge, other worked the same way as in ROM. By changing a charge on an isolated (or &lt;em&gt;floating&lt;/em&gt;) gate, one can make it open or &lt;em&gt;not&lt;/em&gt; when a voltage applied to the other, control gate, thus (E)PROMs worked exactly the save way as ROMs, but with the ability to electrically program (and maybe UV erase) data.&lt;/p&gt;&#xA;&lt;p&gt;Later, EEPROMs and FLASHes added the ability to electrically erase those two-gate transistors.&lt;/p&gt;&#xA;&lt;p&gt;Thus, the naming of something-ROMs depends mostly on a tradition of calling them so.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2021-04-23T16:33:08.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19679" PostTypeId="1" AcceptedAnswerId="19680" CreationDate="2021-04-25T11:06:10.390" Score="9" ViewCount="818" Body="&lt;p&gt;I am trying to repair a ZX81 that I think was damaged by a lightning since the adaptor and the 7805 were defective, the reset capacitor of the Z80 was blown up and then I realized that Rams were defective.&lt;/p&gt;&#xA;&lt;p&gt;In fact I had a white screen with a video signal that was discussed&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/19628/on-the-video-signal-generated-by-the-ula-of-the-zx81&quot;&gt; here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Concerning the cited question, I added the 555 circuit. First the signal was attenuated so I replaced the two diodes by a common collector transistor. Now the signal has a back porch but still not working.&lt;/p&gt;&#xA;&lt;p&gt;I know that when the 16k is inserted it disables the 1k onboard by setting the RAM.CS however it didn't work until I removed the onboard Rams.&lt;/p&gt;&#xA;&lt;p&gt;Now with the 16k of external Ram the screen is as follows when I enter:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PRINT &amp;quot;HELLO WORLD HELLO WORLD HELLO WORLD&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7EdEf.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7EdEf.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And this is another output when running the following program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 FOR I=1 TO 23&#xA;20 PRINT I&#xA;30 NEXT I&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iwEyW.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iwEyW.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What could still be defective? The instruction seems to be well excuted, the program well stored and runs normally, so Ram is no more the problem.&lt;/p&gt;&#xA;" OwnerUserId="18338" LastEditorUserId="18338" LastEditDate="2021-04-25T12:17:38.793" LastActivityDate="2021-04-29T13:50:51.980" Title="ZX81 screen corrupted" Tags="&lt;zx81&gt;&lt;troubleshooting&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19680" PostTypeId="2" ParentId="19679" CreationDate="2021-04-25T13:09:02.220" Score="15" Body="&lt;p&gt;&lt;em&gt;Thank you @Raffzahn for the comment that inspired me to think of something blocking the video signal.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The initial problem described in the &lt;a href=&quot;/q/19628/18338&quot;&gt;previous question&lt;/a&gt; was that the ZX81 was showing a white screen.&lt;/p&gt;&#xA;&lt;p&gt;I have an old version of the ZX81, so there was doubt about the absence of the back porch in the video signal. This doubt was removed by adding the 555-based circuit proposed by that question's &lt;a href=&quot;/a/19629/18338&quot;&gt;answer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;However, the problem was not the back porch being absent: the screen was still white.&lt;/p&gt;&#xA;&lt;p&gt;I then solved the white screen problem by removing the on-board RAMs and connecting an external 16 KB RAM pack. This made another problem emerge: the wide black lines.&lt;/p&gt;&#xA;&lt;p&gt;The 555 'back-porch-adding' circuit is a monostable with T=5µs, triggered by the end of the video signal's SYNC pulse. In turns out that this is sometimes triggered by black pixels.&lt;/p&gt;&#xA;&lt;p&gt;So the solution was to remove the 555 circuit. Here is the final screen:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KIOK0m.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KIOK0m.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In conclusion, the only problem was the onboard RAM. The TV actually accepts the video signal without back porch.&lt;/p&gt;&#xA;" OwnerUserId="18338" LastEditorUserId="5199" LastEditDate="2021-04-29T13:50:51.980" LastActivityDate="2021-04-29T13:50:51.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19681" PostTypeId="1" AcceptedAnswerId="19682" CreationDate="2021-04-25T19:30:36.787" Score="6" ViewCount="574" Body="&lt;p&gt;To switch from 80-column to 40-column display, what is the difference between the following two actions:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;lda #$11&#xA;jsr COUT ; $FDED&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sta $C00C ; 80coloff switch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In the first case, I do not encounter any problem in the rest of my program.&lt;/p&gt;&#xA;&lt;p&gt;In the second case I notice significant display problems, in particular if the display was in 80 columns before, and if the COUT routine is used after.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What is the explanation of these different behaviors?&lt;/li&gt;&#xA;&lt;li&gt;How to use properly 80coloff switch in assembly language ?&lt;/li&gt;&#xA;&lt;li&gt;What is the most reliable procedure to go from 80 to 40 columns (and&#xA;vice versa) in assembly language ?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I use an Apple IIc and mainly ProDOS.&lt;/p&gt;&#xA;" OwnerUserId="20782" LastEditorUserId="15334" LastEditDate="2021-04-25T20:10:28.603" LastActivityDate="2021-04-27T02:54:48.063" Title="Apple II Toggles between 40 and 80 columns in assembly language (Apple IIc)" Tags="&lt;apple-ii&gt;&lt;assembly&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19682" PostTypeId="2" ParentId="19681" CreationDate="2021-04-25T20:12:08.393" Score="8" Body="&lt;p&gt;&lt;em&gt;(It would be useful if you could describe what problems are encountered Without it's hard to give any help - beside citing the manual, and/or giving a friendly RTFM)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Usage works, as so often on two level, by using the 'OS' (well, firmware) or direct access.&lt;/p&gt;&#xA;&lt;h2&gt;Via OS&lt;/h2&gt;&#xA;&lt;p&gt;In general the 80 column firmware needs to be activated first&lt;/p&gt;&#xA;&lt;h3&gt;Keyboard&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;PR#3&lt;/code&gt; to turn on the 80 column firmware&lt;/li&gt;&#xA;&lt;li&gt;It will by default switch to 80 col mode.&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;ESC&lt;/kbd&gt; &lt;kbd&gt;4&lt;/kbd&gt; to switch to 40 col&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;ESC&lt;/kbd&gt; &lt;kbd&gt;8&lt;/kbd&gt; to switch to 80 col&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;PR#0&lt;/code&gt; to turn off the 80 col firmware, or (*1)&lt;/li&gt;&#xA;&lt;li&gt;&lt;kbd&gt;ESC&lt;/kbd&gt; &lt;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;Q&lt;/kbd&gt; to turn off 80 col firmware&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;BASIC&lt;/h3&gt;&#xA;&lt;p&gt;Essentially as above:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;PRINT  CHR$ (4);&amp;quot;PR#3&amp;quot;&lt;/code&gt; to turn on the 80 column firmware&lt;/li&gt;&#xA;&lt;li&gt;It will by default switch to 80 col mode&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;PRINT  CHR$ (17)&lt;/code&gt; to switch to 40 col&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;PRINT  CHR$ (18)&lt;/code&gt; to switch to 80 col&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;PRINT  CHR$ (4);&amp;quot;PR#0&amp;quot;&lt;/code&gt; to turn off the 80 col firmware, or (*1)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;PRINT  CHR$ (21)&lt;/code&gt; to turn off 80 col firmware&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;Assembler&lt;/h3&gt;&#xA;&lt;p&gt;Again, like above.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A PR#3 is done by loading 3 into A and calling OUTPORT at $FE95.&lt;/li&gt;&#xA;&lt;li&gt;Control codes can be used as above, simply load them to A and call COUT at $FDED&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Direct access&lt;/h2&gt;&#xA;&lt;p&gt;Simply flip 80COL the way you want it and write direct to the screen. Do not expect the firmware to help here. Do not call COUT or alike.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - While this is the default way, 80 col is a bit different, as it can stay active &lt;em&gt;while&lt;/em&gt; another slot is selected. Using a &lt;code&gt;PR#0&lt;/code&gt; might not always be a good idea, so the additional control codes were invented.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-25T22:34:23.603" LastActivityDate="2021-04-25T22:34:23.603" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19683" PostTypeId="2" ParentId="15376" CreationDate="2021-04-25T23:21:36.127" Score="5" Body="&lt;p&gt;On IBM H/W, overflows &amp;amp; underflows generated an interrupt and generally resulted in an exception with the program being cancelled.&lt;/p&gt;&#xA;&lt;p&gt;On CDC under NOS any runtime error was noted by the Peripheral Processor and at the end of the time slice, the program was cancelled with a less than helpful message and diagnostic snap dumps which may or may not be close to the part of the code that actually produced the problem.&lt;/p&gt;&#xA;" OwnerUserId="21574" LastActivityDate="2021-04-25T23:21:36.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19684" PostTypeId="2" ParentId="19681" CreationDate="2021-04-26T06:05:21.637" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;In the first case, I do not encounter any problem in the rest of my program.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's because you are calling into ROM routines which set up everything for you.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In the second case I notice significant display problems, in particular if the display was in 80 columns before, and if the COUT routine is used after.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, you only switched the hardware. You didn't clear the screen, you didn't tell the COUT routine that it's now running in 80 column mode, etc.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What is the explanation of these different behaviors?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;See above: you are executing a routine in ROM which does all the extra work for you, vs. you are switching the display mode without doing anything else.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How to use properly 80coloff switch in assembly language ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&amp;quot;Properly&amp;quot; depends on the circumstances. If you use COUT, to do it &amp;quot;properly&amp;quot;, you need to update the values in the zero-page COUT depends on. You also need to do housekeeping like clearing the screen. If you control the framebuffer directly, you don't have to do that.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What is the most reliable procedure to go from 80 to 40 columns (and vice versa) in assembly language ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The most reliable is your variant one (as you've discovered yourself). Alternatively, call directly into the ROM routine that sets this up (&lt;code&gt;$11&lt;/code&gt; just is a special character which is detected and triggers a jump to this part). Alternatively, read the routine in the ROM disassembly, and do all the work yourself.&lt;/p&gt;&#xA;&lt;p&gt;The first variant has the advantage that it doesn't depend on the ROM layout.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-04-26T06:05:21.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19685" PostTypeId="1" AcceptedAnswerId="19689" CreationDate="2021-04-26T14:53:05.007" Score="10" ViewCount="1955" Body="&lt;p&gt;The PDP-8 was a remarkable exercise in minimalist computer design; some of the aspects of its design are discussed in detail at &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/5843/pdp-8-transistor-count&quot;&gt;PDP-8 transistor count&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;One feature it did not have was a stack. Instead, when you called a subroutine, the return address would be saved in the first word of the subroutine. Of course, this meant it didn't support recursion (that is, if you needed recursion, you had to make your own arrangements, implement your own call stack in software). On the face of it, this is consistent with the overall design philosophy of eschewing luxury to save parts count and therefore cost.&lt;/p&gt;&#xA;&lt;p&gt;But looking a bit more closely, the lack of a stack actually increases cost in some ways. In particular, it causes programs to use more memory, because a word has to be allocated for a return address for every subroutine in the program (as opposed to just the maximum call depth that will ever be used).&lt;/p&gt;&#xA;&lt;p&gt;Furthermore, if you have a stack, you can use tail call optimization, where a call immediately followed by a return is replaced with a jump, saving a word of memory (and several cycles). Without a stack, you cannot do this.&lt;/p&gt;&#xA;&lt;p&gt;In general, it's clear that the designers did care about code density, which in many ways is remarkably high; for example, a jump instruction to an arbitrary memory location takes two words, as expected – except two jump instructions in the same page to the same location, can share the operand word, for an amortized cost of 18 bits each. I have seen no other architecture that can do this.&lt;/p&gt;&#xA;&lt;p&gt;And there was good reason to care about code density. Memory was expensive! Even with the basic 4096 12-bit words of memory in the PDP-8, this still amounted to a large percentage of the total system cost. For the low end of the market at which the machine was aimed, code density therefore could very well be more important than speed.&lt;/p&gt;&#xA;&lt;p&gt;What exactly would it have cost to add a stack to the machine?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A register for the stack pointer itself. This could have been just 7 bits; if there are two transistors needed to store a bit in discrete logic, that's an extra 14 transistors, about 1% of the total in the machine. (Plus corresponding other components, diodes, wires etc.) That would seem worthwhile for a likely saving of significantly more than 1% of memory.&lt;/li&gt;&#xA;&lt;li&gt;Opcode space not an issue, the call instruction would've taken the same number of bits, and there was spare opcode space for zero-operand instructions like RET, and a couple of instructions to push and pop the accumulator.&lt;/li&gt;&#xA;&lt;li&gt;Circuitry to increment and decrement the stack pointer. The machine already had a full-width adder. Decrement can be done by adding all ones.&lt;/li&gt;&#xA;&lt;li&gt;Control logic for the necessary sequence of operations. Does this add much complexity? Call would need to push the return address onto the stack before jumping to the destination. Then again, in the current design, call needs to jump to the destination, save the return address, then again increment the program counter. Doesn't look like a huge difference.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Overall it looks to me like a stack would achieve a modest improvement in code density at small extra hardware cost. Worth it? Hard to say. Looks like a tricky judgment call that would preferably need to be based on analysis of exactly what the hardware cost would be.&lt;/p&gt;&#xA;&lt;p&gt;But this was in the early sixties. At that time, stacks and recursion were not in any way taken for granted the way they are now. Storing the return address in the first word of a subroutine was a perfectly normal way to do things!&lt;/p&gt;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&lt;p&gt;Did the designers consider a stack and decide it wasn't worth the cost? Or did they just go with return address stored in the first word of the callee because that was the way things were commonly done, and there was no particular reason to do otherwise? Is there anything written down by the designers that goes into detail about the options they considered? Or can anything be inferred from architectures that already existed, that the designers would have been familiar with; did any of those existing architectures have a stack?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastEditorUserId="11024" LastEditDate="2021-04-27T06:25:51.933" LastActivityDate="2021-04-27T06:25:51.933" Title="Did the PDP-8 designers consider a stack?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;dec&gt;&lt;minicomputers&gt;&lt;pdp-8&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19686" PostTypeId="1" AcceptedAnswerId="19688" CreationDate="2021-04-26T15:28:08.507" Score="4" ViewCount="149" Body="&lt;p&gt;Although average punched cards had eighty columns, often only seventy-two were used for characters; the remaining eight were ignored by software. Hence arbitrary metadata could be included with each card. Most commonly, it seems that a “sequence number” was used, primarily for the purpose of allowing an out-of-order card deck to be sorted into place.*&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&quot;http://www.bitsavers.org/pdf/ibm/7090/C28-6235-3_FAP_Apr64.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual for the FAP assembler&lt;/a&gt; says the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If a BCD source deck is serialized in columns 73–80, sequencing information will be checked, and any card out of sequence will be listed both on- and off-line. If a group of correctly sequenced cards is inserted into a deck out of sequence, only the first card of the group will be listed.&lt;/p&gt;&#xA;&lt;p&gt;For purposes of sequencing, a blank is not considered to be zero; it is given the octal value 60. A serialized card following a card with all blanks in card columns 73–80 will not be sequence checked.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Presumably the BCD codes are compared, which means that letters would sequence in the correct order (&lt;code&gt;A&lt;/code&gt;&amp;lt;⋯&amp;lt;&lt;code&gt;Z&lt;/code&gt;) and that &lt;code&gt;9&lt;/code&gt;&amp;lt;&lt;code&gt;A&lt;/code&gt;. A consequence is that, because of gaps in the encoding of letters, we have &lt;code&gt;I&lt;/code&gt;&amp;lt;&lt;code&gt;-&lt;/code&gt;&amp;lt;&lt;code&gt;J&lt;/code&gt; and &lt;code&gt;R&lt;/code&gt;&amp;lt;&lt;code&gt;*&lt;/code&gt;&amp;lt;&lt;code&gt; &lt;/code&gt;&amp;lt;&lt;code&gt;/&lt;/code&gt;&amp;lt;&lt;code&gt;S&lt;/code&gt;. It appears to be common to use an alphabetic prefix in sequence numbers, as in &lt;a href=&quot;https://github.com/rcornwell/ctss/blob/master/src/tools/fap.fap&quot; rel=&quot;nofollow noreferrer&quot;&gt;this assembler&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Was this the usual method of comparison? (If so, then I suppose that the sequence numbers of adjacent cards could be treated as eight-digit base-64 numbers.)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;* But this is not necessarily always the case. Here is the beginning of a COBOL compiler for the Burroughs B5500 (&lt;a href=&quot;http://www.phkimpel.us/B5500/webSite/SoftwareRequest.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;available for download along with several other programs&lt;/a&gt;), where the numbers are used for organization beyond keeping the cards in order:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;BEGIN                                                                   00000000&#xA;% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00000100&#xA;%        LASCIATE OGNI SPERANZA VOI CH ENTRATE                          00000200&#xA;%                                      DANTE                            00000300&#xA;% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00000400&#xA;    DEFINE                                                              00000500&#xA;         CURRENTLEVEL =  % LEVEL OF CURRENT COMPILER                    00000600&#xA;         0                                                              00000700&#xA;         #,                                                             00000800&#xA;         LOCALEVEL    =  % LOCAL PATCH LEVEL                            00000900&#xA;              0                                                         00001000&#xA;         #;                                                             00001100&#xA;    COMMENT COMPILIER DIRECTORY BY 1ST DIGIT OF SEQUENCE NUMBER         00001200&#xA;         0    COMPILIER GLOBALS                                         00001300&#xA;         1    GLOBALS FOR PASS 1                                        00001400&#xA;              12 READACARD STUFF                                        00001500&#xA;              13 SCANNER STUFF                                          00001600&#xA;              16 MACRO DISKOUT STUFF                                    00001700&#xA;              18 OPERAND STUFF                                          00001800&#xA;              19 EXPRESSION STUFF                                       00001900&#xA;         2    START, IDENTIFICATION, AND ENVIRONMENT DIVISIONS - PASS 1 00002000&#xA;         3    DATA DIVISION - PASS 1                                    00002100&#xA;              31 ITEM ELEMITEM PICTUREPROCESS                           00002200&#xA;              32 RECORDDEC                                              00002300&#xA;              33 FSE FILE SKELETION                                     00002400&#xA;              34 WSE WORKING STORAGE                                    00002500&#xA;              35 RSR REPORT WRITER                                      00002600&#xA;              39 START OF EXECUTABLES                                   00002700&#xA;         4    PROCEDURE DIVISION - PASS 1                               00002800&#xA;              40 GENERAL PURPOSE STUFF                                  00002900&#xA;              41 DATA MANIPULATION STUFF                                00003000&#xA;                        EXAMINEP                                        00003100&#xA;                        MOVEP                                           00003200&#xA;                        SETP                                            00003300&#xA;                        ARITHMETICP                                     00003400&#xA;                        COMPUTEP                                        00003500&#xA;                        DIVIDEP                                         00003600&#xA;              42 PROGRAM CONTROL STUFF                                  00003700&#xA;                        LBCHK                                           00003800&#xA;                        LABELSCAN                                       00003900&#xA;                        CONDITIONALSTMT                                 00004000&#xA;                        ALTERP                                          00004100&#xA;                        GOP                                             00004200&#xA;                        IFP                                             00004300&#xA;                        PERFORMP                                        00004400&#xA;                        SEARCHP                                         00004500&#xA;                        STOPP                                           00004600&#xA;              43 SORT STUFF                                             00004700&#xA;                        RELEASEP                                        00004800&#xA;                        RETURNP                                         00004900&#xA;                        SORTP                                           00005000&#xA;              44 I-O STUFF                                              00005100&#xA;                        ACCEPTP                                         00005200&#xA;                        CLOSEP                                          00005300&#xA;                        DISPLAYP                                        00005400&#xA;                        OPENP                                           00005500&#xA;                        READP                                           00005600&#xA;                        SEEKP                                           00005700&#xA;                        WRITEP                                          00005800&#xA;              45 REPORT WRITER                                          00005900&#xA;              46 SEPARATELY COMPILED STUFF                              00006000&#xA;              47 DIAGNOSTIC STUFF                                       00006100&#xA;                        DUMPP                                           00006200&#xA;                        MONITORP                                        00006300&#xA;              48 DECLARATIVE STUFF                                      00006400&#xA;                        USEP                                            00006500&#xA;              49 PASS1 PROCEDURE DIVISION DRIVER PROCEDURES             00006600&#xA;                        STATEMENT                                       00006700&#xA;                        PARAGRAPH                                       00006800&#xA;                        SECTION                                         00006900&#xA;         6    GLOBALS FOR PASS 2                                        00007000&#xA;              61 EMITTERS                                               00007100&#xA;              62 ERRORS                                                 00007200&#xA;              63 PASSMAC                                                00007300&#xA;              64 ARRAYDEC SEGSTART SEGEND                               00007400&#xA;              65 GETDATA WRITEDATA                                      00007500&#xA;         7    FIRST THREE DIVISIONS - PASS 2                            00007600&#xA;         8    PROCEDURE DIVISION - PASS 2                               00007700&#xA;              80 GENERAL PURPOSE STUFF                                  00007800&#xA;              81 MOVE STUFF                                             00007900&#xA;              82 ARITH STUFF                                            00008000&#xA;              83 CONTROL STUFF                                          00008100&#xA;                        LBCHK                                           00008200&#xA;                        EXAMINEP                                        00008300&#xA;                        LBLDECK                                         00008400&#xA;                        BRANCHGEN                                       00008500&#xA;              84 SORT STUFF                                             00008600&#xA;                        SRTP                                            00008700&#xA;                        RELP                                            00008800&#xA;                        RETP                                            00008900&#xA;              85 CONTROL STUFF                                          00009000&#xA;                        SWCHP                                           00009100&#xA;                        ALTRP                                           00009200&#xA;                        ALGOP                                           00009300&#xA;                        ENDPAR                                          00009400&#xA;                        PERFORMP                                        00009500&#xA;              86 I-O STUFF                                              00009600&#xA;              87 REPORT WRITER                                          00009700&#xA;              88 SEPARATELY COMPILED STUFF                              00009800&#xA;              89 PASS2 PROCEDURE DIVISION DRIVER                        00009900&#xA;                        MACRO                                           00010000&#xA;         9    COMPILIER WRAP-UP                                         00010100&#xA;                                                                       ;00010200&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I admit that the beginning comment isn't relevant, but it's too good not to include. Starting a 21 000-line COBOL compiler with “Abandon all hope, ye who enter” is hilarious.&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2021-04-26T17:47:11.887" Title="How were card sequence numbers typically checked?" Tags="&lt;history&gt;&lt;programming&gt;&lt;punched-cards&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19687" PostTypeId="2" ParentId="19685" CreationDate="2021-04-26T16:29:22.167" Score="7" Body="&lt;p&gt;I'm going to say no.&lt;/p&gt;&#xA;&lt;p&gt;The  PDP-8 was chiefly designed for compatibility with the PDP-5, and this machine also had no hardware stack.&lt;/p&gt;&#xA;&lt;p&gt;There is not enough room in the instruction space to add push and pop instructions either.&lt;/p&gt;&#xA;" OwnerUserId="576" LastActivityDate="2021-04-26T16:29:22.167" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19688" PostTypeId="2" ParentId="19686" CreationDate="2021-04-26T16:59:22.750" Score="6" Body="&lt;p&gt;The answer is a clear &lt;strong&gt;YES&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;What was the question again?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;More serious, there is no single answer.&lt;/p&gt;&#xA;&lt;p&gt;It depends on&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;OS used&lt;/li&gt;&#xA;&lt;li&gt;Toolchain used&lt;/li&gt;&#xA;&lt;li&gt;Method used&lt;/li&gt;&#xA;&lt;li&gt;Application the data were meant for&lt;/li&gt;&#xA;&lt;li&gt;Or if there's a checking at all&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Already the question if something is octal or BCD or character does quite differ across applications and platforms.&lt;/p&gt;&#xA;&lt;p&gt;Then there is the factor of time:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Methods developed&lt;/li&gt;&#xA;&lt;li&gt;Applications improved&lt;/li&gt;&#xA;&lt;li&gt;RAM size increased&lt;/li&gt;&#xA;&lt;li&gt;Unimaginable large online storage appeared&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;... and so on.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;To get a meaningful answer, one ned to ask for a specific application (compiler), at a specific time and a specific OS and machine setup.&lt;/strong&gt; Punch cards itself are 'only' a storage medium, not a handling process.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Having said that, a less satisfying but generic answer would be : Detection and sorting was usually not done in any specific encoding variation, but simply by numeric value, or character value of whatever is punched in relevant columns. What method was used depended on the toolchain used.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Further it may be most important to understand that checking was maybe welcome, but not the main use case for line/card numbers. It was all about the ability to 'insert' cards without the need to really insert them at the right location within a stack. When editing a program, noone was keen on browsing thru the stack and picking out cards and replacing them by hand.&lt;/p&gt;&#xA;&lt;p&gt;After all, work was don on the paper listing, so for replacing and inserting the line number (from the card) was known, as it was printed as well. To replace a card, a new card with the same number was punched and added to the &lt;em&gt;end&lt;/em&gt; of the stack. Similar for inserting - of course this time using a number somewhere between the existing cards, line 00050001 to insert one between card 00050000 and 00060000 (*1).&lt;/p&gt;&#xA;&lt;p&gt;I might have mentioned it already once or twice, punch cards, their handling and interpretation were the founding elements of the 'IDE' at the time. Punch card programming wasn't the same as today, just with paper. The medium allowed - and asked for - different strategies. Some of them may seem more advanced than they are.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Basic methods of handling:&lt;/p&gt;&#xA;&lt;h3&gt;Overwriting by Consecutive Duplicates&lt;/h3&gt;&#xA;&lt;p&gt;Quite many programs didn't report errors when reading duplicate line numbers in sequence, but used only the last one read. This is an important improvement with in conjunction with usage of classic sorters as tools.&lt;/p&gt;&#xA;&lt;h3&gt;Sorting on by using punch card equipment&lt;/h3&gt;&#xA;&lt;p&gt;Sorting was simply done by using (numeric) sorters. A program stack was fed thru a sorter with the stacks merged afterwards.&lt;/p&gt;&#xA;&lt;p&gt;A sorter simply discriminates cards by the numeric value of a given column into 10 hoppers. So when running the stack with the lowest digit selected, it returns new stacks, one for each (used) value of 0..9 within that column. Put them on top of each other (high goes first) and run it again for the next higher column. Repeat that for as many columns there are. Done, cards are sorted and can be feed into any program/compiler that wants them in a neat order.&lt;/p&gt;&#xA;&lt;p&gt;It's important to keep in mind, that when done right, the sequence of cards was not changed beyond dictated by their numbers. This means if a stack had multiple cards with the same number, their order was guaranteed to be preserved (*2). So later added cards were still later in sequence, allowing to use above 'overwriting' of duplicate cards.&lt;/p&gt;&#xA;&lt;h3&gt;In RAM&lt;/h3&gt;&#xA;&lt;p&gt;With some applications offered automatic sorting when reading. This was usually done by creating a linked list. So cards ended up in read order in RAM but were processed in numbered order.&lt;/p&gt;&#xA;&lt;p&gt;While the storage was usually done in an intermediate format to save on rare RAM, did such applications tend to need more RAM compared with similar that already did a first processing pass over when reading cards.&lt;/p&gt;&#xA;&lt;h3&gt;Using more advanced OS / utilities with phantastic new hardware&lt;/h3&gt;&#xA;&lt;p&gt;With systems offering advanced (disk) storage methods, like ISAM, an operator could read a card stack and turn it into an ISAM file with the line number as key. When later feed as input by an application/compiler, the cards would appear in the right order.&lt;/p&gt;&#xA;&lt;h3&gt;Improved applications using advanced hardware&lt;/h3&gt;&#xA;&lt;p&gt;Last but not least were compilers that used disk files as intermediate storage. They as well offered to sort lines according to numbers. But now we're already way into the 70s.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 -  In the early days I had to work with a programmer who always used the number 1, despite 9999 available numbers - and he always started at the top. So between card 0005.0000 and 0006.0000 he didn't insert at 0005.5000, but 0005.1000. This is maybe fine if one wants to insert several cards, but devastating on the long run, 'cause if in next iteration an insert before 0005.1000 was to be made, he used 0005.0100 ... and so on. He quickly did run out of numbers when doing several consecutive changes - so he had to repunch the stack. Not a big deal, as that could be done by a little helper function reading in a stack and punching it out again with new numbers - essentially BASIC's &lt;code&gt;RENUM&lt;/code&gt; command for punch cards :)&lt;/p&gt;&#xA;&lt;p&gt;More annoying, the very same man used that scheme as well for label naming - that was before he got moved to structure macros - So labels with a lot of 1s and 0s were his trademark.&lt;/p&gt;&#xA;&lt;p&gt;*2 - This is essentially the only case where dropping a punch card stack would really turn into a serious problem of bug insertion.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-26T17:47:11.887" LastActivityDate="2021-04-26T17:47:11.887" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19689" PostTypeId="2" ParentId="19685" CreationDate="2021-04-26T18:23:33.667" Score="19" Body="&lt;p&gt;Without detailed documentation on the PDP-8 design process, we cannot say for sure.  I suspect that while they may have briefly considered it, it was never a serious prospect.&lt;/p&gt;&#xA;&lt;p&gt;The PDP-8 is just the PDP-5 redesigned electronically.  The PDP-5 was introduced in 1963 as an even-more-reduced version of a computer compared to the PDP-1 and PDP-4.  The PDP-1/4 did not have a stack either.&lt;/p&gt;&#xA;&lt;p&gt;The PDP-8 had only 12 bit words instead of 18, 3 bits of opcode per instruction instead of 5, and so on.  Among the things sacrificed were hardware subtraction, a more sophisticated IO system, a larger address space, hardware to assist multiplication/division, and instructions like bitwise XOR and OR.&lt;/p&gt;&#xA;&lt;p&gt;In short, they took everything out that they could.  Anything else (10 bit word?  No bitwise operations at all?  No addition?) would drastically slow it down, require huge code for common operations, or simply make it &lt;em&gt;too&lt;/em&gt; small (memory-wise).&lt;/p&gt;&#xA;&lt;p&gt;It is approximately the minimal viable general-purpose computer.  While addition might be necessary, stacks are not.  Like subtraction, stack access can be simulated on a PDP-8 with just a couple of instructions average.  (See some RISC machines that still do this today with no hardware stack.)&lt;/p&gt;&#xA;&lt;p&gt;In '63 when the PDP-5 was released, hardware stacks were rare in general.  DEC had never released a computer using them.  The PDP-6 would come out about a year later, as the first.   Stacks showed up on some fancy mainframes from other manufacturers around then, and, importantly, were usually a feature intended to support high level languages.&lt;/p&gt;&#xA;&lt;p&gt;While this is another educated guess, I think supporting high level languages was likely not a design requirement for the PDP-5 and -8.  In fact, I suspect the designers would have been quite surprised to learn the architecture, a decade later, would be hosting fairly complete compilers for languages like FORTRAN 66 and COBOL.  At the outset, they barely squeezed a limited subset (no subroutines!) of FORTRAN II into the machine.&lt;/p&gt;&#xA;&lt;p&gt;It was mostly intended to be a laboratory computer, or factory industrial controller, or some kind of embedded processor for control and monitoring tasks.  Software like word processing systems and sophisticated compilers were something that became desirable and obvious only once it had been shipping for a while.&lt;/p&gt;&#xA;&lt;p&gt;In conclusion, between the necessary additional hardware for a stack going directly against the main design goal, stacks being easily simulated with short routines, and the non-obviousness at design time of needing to support high-level languages in the ALGOL style, I doubt it was seriously considered.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2021-04-26T18:30:54.713" LastActivityDate="2021-04-26T18:30:54.713" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19690" PostTypeId="2" ParentId="14927" CreationDate="2021-04-26T21:42:47.710" Score="3" Body="&lt;p&gt;For the record: IBM's first Fortran compiler did not necessarily produce machine code output (it depends on how you look at it). Most of the compilation process is spent building up symbolic instructions (i.e., lines of assembly) in a table called &lt;code&gt;CIT&lt;/code&gt; (Compiled Instruction Table). Parts of the program depend on the symbolic format; for instance, section four detects basic blocks by the presence of an operation mnemonic beginning with “&lt;code&gt;T&lt;/code&gt;”, since such instructions designated transfers. The CIT goes through many phases of refinement during compilation.&lt;/p&gt;&#xA;&lt;p&gt;After the CIT has been fully constructed, and all the code has been compiled, an assembler built in to the compiler is run to assemble the code. (I believe that it was possible to run the assembler on its own, separately from Fortran.)&lt;/p&gt;&#xA;&lt;p&gt;Source: “&lt;a href=&quot;https://archive.computerhistory.org/resources/text/Fortran/102653992.05.01.acc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Systems manual for 704 Fortran and 709 Fortran&lt;/a&gt;”, via &lt;a href=&quot;http://www.softwarepreservation.org/projects/FORTRAN&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.softwarepreservation.org/projects/FORTRAN&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2021-04-26T21:42:47.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19691" PostTypeId="1" AcceptedAnswerId="19692" CreationDate="2021-04-26T22:27:56.470" Score="2" ViewCount="230" Body="&lt;p&gt;I want to open a Basic 09 code under windows 7.&#xA;I just want to read the code. I do not want to execute it.&#xA;Is there a way to do that?&lt;/p&gt;&#xA;" OwnerUserId="21581" LastEditorUserId="6659" LastEditDate="2021-04-26T22:29:00.907" LastActivityDate="2021-04-27T23:31:43.717" Title="Basic09 to Windows7" Tags="&lt;basic&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19692" PostTypeId="2" ParentId="19691" CreationDate="2021-04-26T22:52:05.323" Score="5" Body="&lt;p&gt;&lt;em&gt;(Not a definite answer, just some information about the issues at work)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Might not be as easy as it seems.&lt;/p&gt;&#xA;&lt;p&gt;For one, &lt;a href=&quot;https://colorcomputerarchive.com/repo/Documents/Manuals/Programming/BASIC09%20Programming%20Language%20Reference%20Manual%20-%20Revision%20H%20(Microware%20System%20Corp).pdf&quot; rel=&quot;noreferrer&quot;&gt;BASIC09&lt;/a&gt; is, unlike most other BASICs a compiler, generating I-Code. In today's lingo one might call that a Bytecode. The code generated does not include all source information. For example procedure or variable names were replaced by their target address, not only speeding up execution but saving space as well. On the down side this means when 'disassembling' the code, not all information can be regained. (&lt;a href=&quot;https://retrocomputing.stackexchange.com/a/14901/6659&quot;&gt;This Answer&lt;/a&gt; got some additional information)&lt;/p&gt;&#xA;&lt;p&gt;Next, BASIC09 contained an optimizer, removing dead code, evaluating constant expressions, reorganizing expressions and alike. So while the compiler itself would just make names harder to read (for most parts), the packer will change code further away from the source it was created from.&lt;/p&gt;&#xA;&lt;p&gt;Lastly a packed program could be linked into a stand alone version carrying a minimized BASIC runtime, further complicated the way to create source code again.&lt;/p&gt;&#xA;&lt;p&gt;All of that was as well version dependent.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.S.: Sure about using Windows 7?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-04-26T22:52:05.323" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19693" PostTypeId="2" ParentId="19681" CreationDate="2021-04-27T02:54:48.063" Score="3" Body="&lt;p&gt;See the IIc Technical Reference Manual, &lt;a href=&quot;https://archive.org/details/Apple_IIc_Technical_Reference_Manual/page/n91/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;pages 64-66&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;$FDED&lt;/code&gt; jumps to the user output vector (&lt;code&gt;$0036&lt;/code&gt;) which is generally &lt;code&gt;COUT1&lt;/code&gt;  (the 40-column firmware) or &lt;code&gt;C3COUT1&lt;/code&gt; (after a &lt;code&gt;PR#3&lt;/code&gt;/&lt;code&gt;JSR $C300&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;COUT1&lt;/code&gt; is strictly 40-column and the only control codes it supports are LF, CR, BS, and BELL.  &lt;code&gt;C3COUT1&lt;/code&gt; is (obviously) 80-column aware and supports 21 control codes, including &lt;code&gt;^Q&lt;/code&gt; and &lt;code&gt;^R&lt;/code&gt; to select 40 or 80 columns.&lt;/p&gt;&#xA;&lt;p&gt;You can see exactly what those particular control codes do (starting on &lt;a href=&quot;https://archive.org/details/Apple_IIc_Technical_Reference_Manual/page/n455/mode/2up&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 428&lt;/a&gt;) but aside from touching the softswitches, they also adjust existing text so it displays correctly in the new mode and adjusts zero-page variables pertaining to the window size and cursor position.&lt;/p&gt;&#xA;" OwnerUserId="3261" LastActivityDate="2021-04-27T02:54:48.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19694" PostTypeId="1" CreationDate="2021-04-27T16:56:31.380" Score="0" ViewCount="160" Body="&lt;p&gt;For a university assignment, I have to describe and draw the command cycle of the LD (nn), dd command. To be exact, I was given this command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    LD (0x1000), BC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which I interpret as putting the low order byte of BC to the address 0x1000, and the upper one to the address 0x1001. (correct me if I'm wrong)&lt;/p&gt;&#xA;&lt;p&gt;Now, I found the description of that command in the Z80 CPU Manual.&lt;/p&gt;&#xA;&lt;p&gt;Here's an image of that specific page:&#xA;&lt;img src=&quot;https://i.imgur.com/F1jfpQb.png&quot; alt=&quot;Here's an image of that specific page&quot; /&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It says that there are 6 machine cycles and 20 T-states, but I have no clue about what cycles exactly the command consists of, and how to draw them.&lt;/p&gt;&#xA;&lt;p&gt;So my questions are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How (or where) can I find the instructions which make up the LD (nn), dd command?&lt;/li&gt;&#xA;&lt;li&gt;How can I draw the machine cycles? Which one of them is read, write, etc?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Any help is much appreciated. Let me know if I missed any details that might be necessary to understand the problem.&lt;/p&gt;&#xA;" OwnerUserId="21585" LastEditorUserId="14875" LastEditDate="2021-04-28T08:46:32.843" LastActivityDate="2021-04-28T08:46:32.843" Title="Z80 - &quot;LD (nn), dd&quot; command cycle" Tags="&lt;hardware&gt;&lt;z80&gt;&lt;cpu&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2021-04-28T09:00:29.323" ContentLicense="CC BY-SA 4.0" />
  <row Id="19695" PostTypeId="2" ParentId="19694" CreationDate="2021-04-27T18:45:54.680" Score="4" Body="&lt;p&gt;Comments have already covered that the CPU manual should answer all your questions, but above and beyond that, immediate observations:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;ld (nn), bc&lt;/code&gt; is encoded as &lt;code&gt;ed43&lt;/code&gt; so that's two reads;&lt;/li&gt;&#xA;&lt;li&gt;the actual address, &lt;code&gt;0x1000&lt;/code&gt; is also two bytes long, so that's another two reads;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;bc&lt;/code&gt; is two bytes long, so that must be two writes.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In total that's six memory accesses, from which you can draw the reasonable (and, as it happens, correct) assumption that the six machine cycles are four sequential reads from the program counter followed by two writes to &lt;code&gt;0x1000&lt;/code&gt; and &lt;code&gt;0x1001&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;(4, 4, 3, 3, 3, 3)&lt;/code&gt; gives you the lengths of the various machine cycles, which is also a big clue as to the specific bus cycles in use. If you check out the relevant part of the manual — which includes diagrams — you'll notice that M1 cycles are associated with instruction fetches and take four cycles, and that other memory accesses take three. So that lines up.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastEditorUserId="13578" LastEditDate="2021-04-27T20:51:58.957" LastActivityDate="2021-04-27T20:51:58.957" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19696" PostTypeId="1" CreationDate="2021-04-27T18:58:55.550" Score="10" ViewCount="1678" Body="&lt;p&gt;In the early 1980's, plugs with low pin density like DB-25 were common on home computers.  The industry was still relatively small, not everything in the manufacturing chain was automated.  I assume a lot of those early cables were soldered by hand.  I'm sure higher densities were possible, but if a cable cost $10,000 or something it wouldn't have been practical in a consumer product.  So, when did the physical manufacturing technology in the consumer computer market reach a point where you could travel back in time with a USB-C diagram and use it in a product?&lt;/p&gt;&#xA;&lt;p&gt;To scope this, I am not asking about performance or protocols.  A full modern USB software stack takes more memory than existed on a home computer in the early 1980's.  That's fine -- I am just asking about the manufacturing of the physical cables, plugs, and sockets.  Even if a 1980's USB-C would only have run at a few KBPS, and only worked as a simple serial connection.&lt;/p&gt;&#xA;&lt;p&gt;Edit in response to a question to add : The ability to flip USB-C is interesting, but not directly relevant to the question.  I am assuming a microcontroller or other circuit could handle the flipping quite early, at the cost of expense and possibly speed.  But the question is specifically about just the physical manufacturing, and how it evolved over time to make it practical.  A USB-C connecter has small springs within the plug, extremely fine tolerances in the hundredths of a millimeter.  Was it even practical for a cable manufacturer to source exactly the right steel for the internal springs in the connector before widespread Internet connectivity made it easier to find suppliers?&lt;/p&gt;&#xA;" OwnerUserId="5309" LastEditorUserId="5309" LastEditDate="2021-04-28T00:28:53.173" LastActivityDate="2021-04-28T10:09:22.427" Title="What was the earliest that it would have been practical to manufacture a USB-C plug for consumers?" Tags="&lt;history&gt;&lt;cables&gt;&lt;manufacturing&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19697" PostTypeId="2" ParentId="19696" CreationDate="2021-04-27T20:18:20.223" Score="12" Body="&lt;h2&gt;TL;DR: Yes, But...&lt;/h2&gt;&#xA;&lt;p&gt;Yes, it would have been possible, but what would have been the use case? Inventions without a use case will not be picked up and thus not produced.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;The Details&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In the early 1980s, plugs with low pin density like DB-25 were common on home computers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That depends a lot on purpose.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DB25 it was for high pincount, like serial or parallel&lt;/li&gt;&#xA;&lt;li&gt;DE9 for low pincount like joysticks&lt;/li&gt;&#xA;&lt;li&gt;Or Atari's Sub-D-like 13 pin &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_SIO#Hardware&quot; rel=&quot;nofollow noreferrer&quot;&gt;SIO connector&lt;/a&gt; somewhere in between&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The industry was still relatively small, not everything in the manufacturing chain was automated. I assume a lot of those early cables were soldered by hand.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;These parts were standard ones, used in millions - the PC industry was just a very small part thereof. And no-one, apart from hobbyists, was hand soldering them. At least not for straight cables and products made in reasonable quantities. That would have been ridiculously expensive.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm sure higher densities were possible,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Usage is not about being possible,but being useful. With computers and everything connected to them being so big at the time, why would a manufacturer choose a smaller connector?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but if a cable cost $10,000 or something it wouldn't have been practical in a consumer product.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Any reasoning for that number?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So, when did the physical manufacturing technology in the consumer computer market reach a point where you could travel back in time with a USB-C diagram and use it in a product?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is nothing in USB-C that couldn't have been manufactured back then. But what would it be good for? There was no device so small in size that any bigger connector wouldn't fit. Think about, even a very slim notebook, like a &lt;a href=&quot;https://en.wikipedia.org/wiki/TRS-80_Model_100&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kyotronic 85&lt;/a&gt;, still measured 50 millimetres in height. That's more then enough for the 10mm a DB25 needs.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I am just asking about the manufacturing of the physical cables, plugs, and sockets.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No real issue to manufacture this in 1980 - but also no use case and thus no sales for your 'invention'. There was no 5 mm thick phone that needed a connector.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Even if a 1980's USB-C would only have run at a few KBPS, and only worked as a simple serial connection.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For one, USB is a simple serial connection.&lt;/li&gt;&#xA;&lt;li&gt;Next, serial connection have used smaller plugs, like&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Commodore using 13 mm DIN 45322 plugs in 1980 for their &lt;a href=&quot;https://en.wikipedia.org/wiki/Commodore_bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;serial IEC&lt;/a&gt; or&lt;/li&gt;&#xA;&lt;li&gt;Apple using 7 mm &lt;a href=&quot;https://en.wikipedia.org/wiki/Mini-DIN_connector&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mini-DIN&lt;/a&gt; for their 1986 &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Desktop_Bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;ADB&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Last but not least, several serial bus systems were used from the late 1970s all the way into the 1990s,for example&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HP's &lt;a href=&quot;https://en.wikipedia.org/wiki/HP-IL&quot; rel=&quot;nofollow noreferrer&quot;&gt;HP-IL&lt;/a&gt; (which did use a connector similar in size to USB-C) (Thanks &lt;a href=&quot;/q/19696&quot;&gt;Brian&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;The mentioned Commodore serial IEC&lt;/li&gt;&#xA;&lt;li&gt;Atari's SIO&lt;/li&gt;&#xA;&lt;li&gt;And Apple's &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Desktop_Bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;ADB&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The last two of those can be seen as direct predecessors to USB.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Long Story Short:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;USB-like buses were already available, including quite small connectors.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7347" LastEditDate="2021-04-28T10:09:22.427" LastActivityDate="2021-04-28T10:09:22.427" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="19698" PostTypeId="2" ParentId="19691" CreationDate="2021-04-27T23:31:43.717" Score="0" Body="&lt;p&gt;Well, I have to dig out my coco in the seller Somewhere.&#xA;I also notice that there is a &lt;a href=&quot;https://laptrinhx.com/6809-and-os-9-emulator-in-java-616009523/&quot; rel=&quot;nofollow noreferrer&quot;&gt;java Emulator&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I will install it on ubuntu. I included the link.&lt;/p&gt;&#xA;" OwnerUserId="21581" LastActivityDate="2021-04-27T23:31:43.717" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19699" PostTypeId="1" CreationDate="2021-04-28T04:10:28.460" Score="9" ViewCount="331" Body="&lt;p&gt;The Bell 103 modem spec gives the following frequencies to use:&lt;/p&gt;&#xA;&lt;p&gt;Transmit Side: &lt;code&gt;1070Hz&lt;/code&gt; (space) and &lt;code&gt;1270Hz&lt;/code&gt; (mark)&lt;/p&gt;&#xA;&lt;p&gt;Receive Side:  &lt;code&gt;2025Hz&lt;/code&gt; (space) and &lt;code&gt;2225Hz&lt;/code&gt; (mark)&lt;/p&gt;&#xA;&lt;p&gt;Why were these specific frequencies chosen other than needing to fit into the voice band?&lt;/p&gt;&#xA;" OwnerUserId="21589" LastEditorUserId="21589" LastEditDate="2021-04-28T04:27:46.447" LastActivityDate="2021-04-28T11:13:13.737" Title="Why did the Bell 103 modem specification use 1070Hz, 1270Hz, 2025Hz and 2225Hz?" Tags="&lt;history&gt;&lt;modem&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19700" PostTypeId="2" ParentId="19694" CreationDate="2021-04-28T06:52:50.030" Score="1" Body="&lt;p&gt;&lt;strong&gt;This is how my emulator stores this instruction:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;----------------------------------------------------------------------&#xA;|opc      T0 T1 MC1   MC2   MC3   MC4   MC5   MC6   MC7   mnem       |&#xA;|--------------------------------------------------------------------|&#xA;|ED43L1H1 20 00 M1R 4 M1R 4 MRD 3 MRD 3 MWR 3 MWR 3 ... 0 LD (U16),BC|&#xA;----------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;so it has 2x4T M1 cycles as prefix &lt;code&gt;0xED&lt;/code&gt; is present to read the opc&lt;/p&gt;&#xA;&lt;p&gt;then 2x3T read cycles for the address (low byte first, high byte second)&lt;/p&gt;&#xA;&lt;p&gt;and then 2x3T write cycles for storing BC (low byte &lt;code&gt;C&lt;/code&gt; first, high byte &lt;code&gt;B&lt;/code&gt; second)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Your next queried instruction is like this:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;----------------------------------------------------------------------&#xA;|opc      T0 T1 MC1   MC2   MC3   MC4   MC5   MC6   MC7   mnem       |&#xA;|--------------------------------------------------------------------|&#xA;|DDCBS106 23 00 M1R 4 M1R 4 MRD 3 MRD 5 MRD 4 MWR 3 ... 0 RLC (IX+S8)|&#xA;----------------------------------------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;the offset is 3th byte and followed by last byte of opc !!!. The 5T cycle is reading that offset + doing 16 bit addition &lt;code&gt;ix+offset&lt;/code&gt; that is why its 2T longer ...&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Here notes to my iset database:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;----------------------------------------------------------------------&#xA;                Spektra software and hardware&#xA;          Z80 CPU instruction set database ver: 3.0&#xA;----------------------------------------------------------------------&#xA;&#xA;database example:&#xA;----------------------------------------------------------------------&#xA;|opc      T0 T1 MC1   MC2   MC3   MC4   MC5   MC6   MC7   mnem       |&#xA;|--------------------------------------------------------------------|&#xA;|ED53L1H1 20 00 M1R 4 M1R 4 MRD 3 MRD 3 MWR 3 MWR 3 ... 0 LD (U16),DE|&#xA;----------------------------------------------------------------------&#xA;opc:    operation code [hex]&#xA;        L1,H1,U1,S1 means first operand direct number or adress&#xA;        L2,H2,U2,S2 means second operand direct number or adress&#xA;        L3,H3,U3,S3 means third operand direct number or adress&#xA;        H,L ... U16 high and low byte&#xA;        U   ... U8 unsigned byte&#xA;        S   ... S8 signed byte&#xA;&#xA;T0      normal instruction duration [T] always 2 decimal digits&#xA;T1      instruction duration if condition not met [T] always 2 decimal digits&#xA;&#xA;MC1++   Machine cycle first is type,second is duration [T] always 1 decimal digit&#xA;        ...     unused&#xA;        M1R     M1 cycle&#xA;        MRD     memory read&#xA;        MWR     memory write&#xA;        IOR     IO read&#xA;        IOW     IO write&#xA;        NON     no external operation (internal computation)&#xA;        INT     interrupt cycle&#xA;&#xA;mnem    instruction text (mnemonic)&#xA;&#xA;emulator internal instructions (not in database):&#xA;----------------------------------------------------------------------&#xA;|opc      T0 T1 MC1   MC2   MC3   MC4   MC5   MC6   MC7   mnem       |&#xA;|--------------------------------------------------------------------|&#xA;| -       11 00 M1R 5 MWR 3 MWR 3 ... 0 ... 0 ... 0 ... 0 NMI        |&#xA;| -       02 00 INT 2 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 INT0       |  // IM0&#xA;| -       13 00 INT 7 MWR 3 MWR 3 ... 0 ... 0 ... 0 ... 0 INT1       |  // IM1&#xA;| -       19 00 INT 7 MWR 3 MWR 3 MRD 3 MRD 3 ... 0 ... 0 INT2       |  // IM2&#xA;----------------------------------------------------------------------&#xA;&#xA;note1:  condition C (carry) is unrecognizable from register C (BC)&#xA;        to recognize which it is, conditions (flags) are used only in&#xA;        instructions: CALL, JR, JP, RET&#xA;&#xA;note2:  max size of opc is 4 bytes (8 digits), if opc is shorter spaces are added&#xA;        max num of MC is 7&#xA;        max size of mnemonic is 15 characters&#xA;&#xA;note3:  aditional spaces are not allowed&#xA;&#xA;note4:  normalized mnemonics:&#xA;        jp (hl) -&amp;gt; jp hl&#xA;        jp (ix) -&amp;gt; jp ix&#xA;        jp (iy) -&amp;gt; jp iy&#xA;        sub r8  -&amp;gt; sub a,r8&#xA;        cp  r8  -&amp;gt; cp  a,r8&#xA;        and r8  -&amp;gt; and a,r8&#xA;        or  r8  -&amp;gt; or  a,r8&#xA;        xor r8  -&amp;gt; xor a,r8&#xA;        &#xA;zexfix: ( fcpu ~ 40MHz, 20min )&#xA;&#xA;Z80all instruction exerciser &#xA;&#xA;&amp;lt;adc,sbc&amp;gt; hl,&amp;lt;bc,de,hl,sp&amp;gt;...OK&#xA;add hl,&amp;lt;bc,de,hl,sp&amp;gt;.........OK&#xA;add ix,&amp;lt;bc,de,ix,sp&amp;gt;.........OK&#xA;add iy,&amp;lt;bc,de,iy,sp&amp;gt;.........OK&#xA;aluop a,nn...................OK&#xA;aluop a,&amp;lt;b,c,d,e,h,l,(hl),a&amp;gt;.OK&#xA;aluop a,&amp;lt;ixh,ixl,iyh,iyl&amp;gt;....OK&#xA;aluop a,(&amp;lt;ix,iy&amp;gt;+1)..........OK&#xA;bit n,(&amp;lt;ix,iy&amp;gt;+1)............OK&#xA;bit n,&amp;lt;b,c,d,e,h,l,(hl),a&amp;gt;...OK&#xA;cpd&amp;lt;r&amp;gt;.......................OK&#xA;cpi&amp;lt;r&amp;gt;.......................OK&#xA;&amp;lt;daa,cpl,scf,ccf&amp;gt;............OK&#xA;&amp;lt;inc,dec&amp;gt; a..................OK&#xA;&amp;lt;inc,dec&amp;gt; b..................OK&#xA;&amp;lt;inc,dec&amp;gt; bc.................OK&#xA;&amp;lt;inc,dec&amp;gt; c..................OK&#xA;&amp;lt;inc,dec&amp;gt; d..................OK&#xA;&amp;lt;inc,dec&amp;gt; de.................OK&#xA;&amp;lt;inc,dec&amp;gt; e..................OK&#xA;&amp;lt;inc,dec&amp;gt; h..................OK&#xA;&amp;lt;inc,dec&amp;gt; hl.................OK&#xA;&amp;lt;inc,dec&amp;gt; ix.................OK&#xA;&amp;lt;inc,dec&amp;gt; iy.................OK&#xA;&amp;lt;inc,dec&amp;gt; l..................OK&#xA;&amp;lt;inc,dec&amp;gt; (hl)...............OK&#xA;&amp;lt;inc,dec&amp;gt; sp.................OK&#xA;&amp;lt;inc,dec&amp;gt; (&amp;lt;ix,iy&amp;gt;+1)........OK&#xA;&amp;lt;inc,dec&amp;gt; ixh................OK&#xA;&amp;lt;inc,dec&amp;gt; ixl................OK&#xA;&amp;lt;inc,dec&amp;gt;  iyh...............OK&#xA;&amp;lt;inc,dec&amp;gt; iyl................OK&#xA;ld &amp;lt;bc,de&amp;gt;,(nnnn)............OK&#xA;ld hl,(nnnn).................OK&#xA;ld sp,(nnnn).................OK&#xA;ld &amp;lt;ix,iy&amp;gt;,(nnnn)............OK&#xA;ld (nnnn),&amp;lt;bc,de&amp;gt;............OK&#xA;ld (nnnn),hl.................OK&#xA;ld (nnnn),sp.................OK&#xA;ld (nnnn),&amp;lt;ix,iy&amp;gt;............OK&#xA;ld &amp;lt;bc,de,hl,sp&amp;gt;,nnnn........OK&#xA;ld &amp;lt;ix,iy&amp;gt;,nnnn..............OK&#xA;ld a,&amp;lt;(bc),(de)&amp;gt;.............OK&#xA;ld &amp;lt;b,c,d,e,h,l,(hl),a&amp;gt;,nn...OK&#xA;ld (&amp;lt;ix,iy&amp;gt;+1),nn............OK&#xA;ld &amp;lt;b,c,d,e&amp;gt;,(&amp;lt;ix,iy&amp;gt;+1).....OK&#xA;ld &amp;lt;h,l&amp;gt;,(&amp;lt;ix,iy&amp;gt;+1).........OK&#xA;ld a,(&amp;lt;ix,iy&amp;gt;+1).............OK&#xA;ld &amp;lt;ixh,ixl,iyh,iyl&amp;gt;,nn......OK&#xA;ld &amp;lt;bcdehla&amp;gt;,&amp;lt;bcdehla&amp;gt;.......OK&#xA;ld &amp;lt;bcdexya&amp;gt;,&amp;lt;bcdexya&amp;gt;.......OK&#xA;ld a,(nnnn) / ld (nnnn),a....OK&#xA;ldd&amp;lt;r&amp;gt; (1)...................OK&#xA;ldd&amp;lt;r&amp;gt; (2)...................OK&#xA;ldi&amp;lt;r&amp;gt; (1)...................OK&#xA;ldi&amp;lt;r&amp;gt; (2)...................OK&#xA;neg..........................OK&#xA;&amp;lt;rrd,rld&amp;gt;....................OK&#xA;&amp;lt;rlca,rrca,rla,rra&amp;gt;..........OK&#xA;shf/rot (&amp;lt;ix,iy&amp;gt;+1)..........OK&#xA;shf/rot &amp;lt;b,c,d,e,h,l,(hl),a&amp;gt;.OK&#xA;&amp;lt;set,res&amp;gt; n,&amp;lt;bcdehl(hl)a&amp;gt;....OK&#xA;&amp;lt;set,res&amp;gt; n,(&amp;lt;ix,iy&amp;gt;+1)......OK&#xA;ld (&amp;lt;ix,iy&amp;gt;+1),&amp;lt;b,c,d,e&amp;gt;.....OK&#xA;ld (&amp;lt;ix,iy&amp;gt;+1),&amp;lt;h,l&amp;gt;.........OK&#xA;ld (&amp;lt;ix,iy&amp;gt;+1),a.............OK&#xA;ld (&amp;lt;bc,de&amp;gt;),a...............OK&#xA;Tests complete&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The complete iset database of mine (passing 100% ZEXALL test) can be obtained in here:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://ulozto.net/xGYKSRRs/zilog-z80-instruction-set-zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;my Zilog Z80A complete instruction set with machine cycle timing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6868" LastEditorUserId="6868" LastEditDate="2021-04-28T06:59:27.927" LastActivityDate="2021-04-28T06:59:27.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19701" PostTypeId="1" CreationDate="2021-04-28T08:41:54.637" Score="0" ViewCount="169" Body="&lt;p&gt;For an assigment I have to check this schematic of an Z80 and find possible errors.&#xA;The schematic looks like this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/FcuPc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FcuPc.png&quot; alt=&quot;Z80 Schematic&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The left side of this schematic is correct, but we have to find errors in the right side.&#xA;I know that the pins 1 and 3 in mempin should be connected to busrq and busack. I am unsure about the buffers: BUFADDR1, BUFFADDR2 and BUFDATA. Shouldn't they be TTL version (for example 74LS541 instead of 74HC541N), cause the outputs of the z80 are in TTL standard. Are there any other problems with this central unit?&lt;/p&gt;&#xA;" OwnerUserId="21591" LastActivityDate="2021-04-28T15:08:52.477" Title="Does this schematic of the Zilog Z80 central unit contain any other errors?" Tags="&lt;z80&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2021-04-28T16:22:53.333" ContentLicense="CC BY-SA 4.0" />
  <row Id="19702" PostTypeId="1" AcceptedAnswerId="19703" CreationDate="2021-04-28T08:58:51.507" Score="19" ViewCount="1824" Body="&lt;p&gt;CBM BASIC 2.0 has no built-in command for listing the contents of a floppy disk.  Instead, the usual way is to &lt;code&gt;LOAD&lt;/code&gt; a pseudo-file named &lt;code&gt;$&lt;/code&gt; from the disk into memory.  The file can then be &lt;code&gt;LIST&lt;/code&gt;ed like a normal BASIC program.  The listing starts with a header line showing the name and ID of the disk.  Subsequent lines show the size, name, and type of each file.  The final line indicates the amount of free space on the disk:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ijRGz.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ijRGz.png&quot; alt=&quot;A screenshot of a Commodore 64 showing a directory listing&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What I'd like to know is how these pseudo-BASIC directory listings are produced.  In particular, is the disk drive itself generating a BASIC listing from the file system and passing it to the computer?  Or is the main computer querying basic file system information from the drive and then constructing the BASIC listing itself?  Also, is the listing really represented in the computer's memory as a (non-functional) BASIC program with line numbers, or is it stored in a dedicated format that the LIST command detects and specially parses?  If the directory is stored as a BASIC program, how is it that two lines can start with the same line number (as is the case when two files have the same size)?&lt;/p&gt;&#xA;" OwnerUserId="6527" LastActivityDate="2021-04-29T15:36:10.993" Title="How did Commodore drives produce program listings from disk directories?" Tags="&lt;basic&gt;&lt;commodore&gt;&lt;disk-drive&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19703" PostTypeId="2" ParentId="19702" CreationDate="2021-04-28T09:27:24.510" Score="19" Body="&lt;h3&gt;TL;DR:&lt;/h3&gt;&#xA;&lt;p&gt;The computer, or rather its OS, has no idea about a directory, in fact not even what constructs a file. It can only open/read/write/close data streams from devices on the bus. Getting a directory is a clever hack of 'loading' a dummy program. This works since&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;LOAD command is implemented as opening a data stream and loading what is returned into memory at BASIC start.&lt;/li&gt;&#xA;&lt;li&gt;LOAD does not perform any check on the program.&lt;/li&gt;&#xA;&lt;li&gt;LIST command does not perform any checks on syntax or line number sequence.&lt;/li&gt;&#xA;&lt;li&gt;LIST simply outputs what is in BASIC memory by stupidly transforming what is found&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;As result, a directory listing is quite literally a LISTing (*1).&lt;/p&gt;&#xA;&lt;p&gt;As so often, Michael Steil did sit down and wrote a &lt;a href=&quot;https://www.pagetable.com/?p=273&quot; rel=&quot;nofollow noreferrer&quot;&gt;short analysis to directory listing&lt;/a&gt; on Commodore machines.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Details&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What I'd like to know is how these pseudo-BASIC directory listings are produced. In particular, is the disk drive itself generating a BASIC listing from the file system and passing it to the computer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Exactly.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or is the main computer querying basic file system information from the drive and then constructing the BASIC listing itself?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, the computer, or better the OS, has in fact no idea about a floppy at all. It can access data by using open/read calls send to a device. What is received back will be interpreted as a (program) file.&lt;/p&gt;&#xA;&lt;p&gt;On the drives side the special file name of &amp;quot;$&amp;quot; is interpreted as command to read the directory and send the data read back within the framing of &amp;quot;program code&amp;quot;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Two bytes (offsetted) string length&lt;/li&gt;&#xA;&lt;li&gt;Two bytes number of blocks&lt;/li&gt;&#xA;&lt;li&gt;A string containing file name and alike (the quotation marks are part of that string).&lt;/li&gt;&#xA;&lt;li&gt;A NULL byte at the end&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This gets repeated until&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Three NULL in a row (like end of line and next pointer being both NULL) to terminate it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Also, is the listing really represented in the computer's memory as a (non-functional) BASIC program with line numbers,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;or is it stored in a dedicated format that the LIST command detects and specially parses?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Again, the computer has no idea about things like directories, not even what floppy is, only devices that respond to open/read/write/close instructions on the expansion bus.&lt;/p&gt;&#xA;&lt;p&gt;It is a rather clever hack to add the functionality of a directory listing to a machine that has no higher level functions beyond initiating and acting upon data streams on the (serial) IEC bus.&lt;/p&gt;&#xA;&lt;p&gt;It wasn't until after the C64 that Commodore BASIC got a bit more sophisticated by adding disk commands; except they were for most parts just syntactical sugar on top of existing commands/workings.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If the directory is stored as a BASIC program, how is it that two lines can start with the same line number (as is the case when two files have the same size)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because the LIST command does not do any syntax or sequence checks. It simply starts at $801 and interprets all bytes as BASIC code. No syntax or sequence checks at all. So whatever bytes are found at the position of a line number is turned from their 16 bit value into readable (ASCII) decimal.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Wouldn't be surprised if that naming similarity made way to that idea :)&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-04-29T15:36:10.993" LastActivityDate="2021-04-29T15:36:10.993" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19704" PostTypeId="2" ParentId="19699" CreationDate="2021-04-28T11:13:13.737" Score="7" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why were these specific frequencies chosen other than needing to fit into the voice band&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Erm, in the end it's all about fitting in the voice band of 300..3400 Hz.&lt;/p&gt;&#xA;&lt;p&gt;For one, 1 kHz and 2 kHz are almost equally spaced within the voice band, having the maximum distance between each and its boundaries, giving optimal placement and separation.&lt;/p&gt;&#xA;&lt;p&gt;Next, 200 Hz between the signals each side can produce is small enough to not interfere (much) with the other side, while at the same time far enough apart to allow reliable discrimination with simple circuitry.&lt;/p&gt;&#xA;&lt;p&gt;Last one (well, for here) is to keep harmonics down or far out. Far out is the best way, as filters tend to eliminate best signals that are way outside the passing window. I.e. as further out, as more energy is needed to get a signal thru. While this does not matter much on subscriber lines, it does on long distance (exchange to exchange) transmissions, as here single voice channels get multiplexed - saving a lot of copper. A technology already pioneered in the late 1930.&lt;/p&gt;&#xA;&lt;p&gt;At that point we must take a step back and notice that the telephone network was made for speech and handling one channel. So there can not be specific filters for modem, but only for the whole channel. The analogue fall of of filters isn't much of an issue with  regular audio. It becomes one with narrow band signals like modems create. Their frequencies are as well quite defined, thus harmonics carry more power, thus being harder to be cancelled out.&lt;/p&gt;&#xA;&lt;p&gt;So, as so often in life it's about finding a middle ground among many parameters.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-04-28T11:13:13.737" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19705" PostTypeId="2" ParentId="19701" CreationDate="2021-04-28T14:00:25.870" Score="4" Body="&lt;p&gt;I see some issues, but since this is an assignment, I shouldn't provide a complete solid answer right away. However:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;There are many Z80 variants out there. You may want to know exactly which chip is being used. Personally, I would tend towards using HCT-series logic there if you need TTL compatibility. However, I believe the I/O &lt;em&gt;may&lt;/em&gt; be CMOS.&lt;/li&gt;&#xA;&lt;li&gt;Look at the conditions under which the bus transceivers are enabled (all three). Do they make sense?&lt;/li&gt;&#xA;&lt;li&gt;Does it make sense to use the post-buffer signals to drive the enable inputs on the bus transceivers? That adds an extra delay to enabling those. Doesn't that mean that the address signals will start being driven after the MREQ signal has propagated out to devices? That being said, the opposite problem could present itself if the direction of the data buffer (WR) wasn't post-buffer. May want to consider the enable to the data buffer being derived from RD, WR, and (if applicable) BUSAK.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="8911" LastEditorUserId="8911" LastEditDate="2021-04-28T15:08:52.477" LastActivityDate="2021-04-28T15:08:52.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19706" PostTypeId="1" AcceptedAnswerId="19708" CreationDate="2021-04-28T21:47:22.330" Score="18" ViewCount="3511" Body="&lt;p&gt;The 3101 SRAM was Intel's first product.  At &lt;a href=&quot;https://www.righto.com/2014/12/inside-intel-1405-die-photos-of-shift.html#ref2&quot; rel=&quot;noreferrer&quot;&gt;$99.50&lt;/a&gt; for 64 &lt;em&gt;bits&lt;/em&gt;, it had enough memory to store the characters &lt;code&gt;expensiv&lt;/code&gt;.  (Sorry, the final &lt;code&gt;e&lt;/code&gt; costs extra.)  &lt;strong&gt;Is there a record of any product using it?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-05-04T21:56:59.500" Title="Did any notable product use Intel's first RAM?" Tags="&lt;history&gt;&lt;memory&gt;&lt;intel&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19707" PostTypeId="1" CreationDate="2021-04-28T21:52:57.517" Score="1" ViewCount="282" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/DEMOS_(operating_system)&quot; rel=&quot;nofollow noreferrer&quot;&gt;DEMOS&lt;/a&gt; was a Soviet operating system derived from BSD Unix.  The answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/19465/10260&quot;&gt;this question&lt;/a&gt; shows that the familiar, English-derived BSD commands were essentially the same in DEMOS.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Did DEMOS have a C compiler?&lt;/strong&gt;  If so, was it called &lt;code&gt;C&lt;/code&gt; (which in Cyrillic has an 's' sound), &lt;code&gt;K&lt;/code&gt; (which has the 'ck' sound), or something else?&lt;/p&gt;&#xA;&lt;p&gt;The previous question was about having commands spelled the same, but this does not guarantee that any particular software was installed.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-04-29T06:15:07.590" LastActivityDate="2021-04-30T08:37:53.220" Title="Did DEMOS have a C compiler?" Tags="&lt;unix&gt;&lt;c&gt;&lt;ussr&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19708" PostTypeId="2" ParentId="19706" CreationDate="2021-04-28T22:45:08.387" Score="44" Body="&lt;p&gt;It might be important to know that the &lt;a href=&quot;https://drive.google.com/file/d/0B9rh9tVI0J5mZWJjZTRlN2MtOTJiMy00YmRmLWE0MjMtODI1ZDQ5MTU2YTFl/view&quot; rel=&quot;nofollow noreferrer&quot;&gt;3101&lt;/a&gt; was neither a genuine Intel development, nor intended as a RAM - at least not in a way we see RAM today. After all, what use could there be in 1970 for a RAM 30 times faster than average core but quite small, just a few words ... hmm ... what data store can be small but should be fast?&lt;/p&gt;&#xA;&lt;p&gt;Exactly: Registers!&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The 3101 is Intels Version of TI's 7489 (*1,*2), which in turn was developed as &lt;em&gt;'scratchpad RAM'&lt;/em&gt;, an application today more commonly categorized as &lt;em&gt;'registers'&lt;/em&gt;. The 7489 was produced in several technologies (IIRC standard TTL, S and LS types) and many manufacturers (Example &lt;a href=&quot;https://pdf1.alldatasheet.com/datasheet-pdf/view/111202/ETC1/74LS89.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Signetics&lt;/a&gt;, &lt;a href=&quot;https://datasheetspdf.com/pdf-file/504528/FairchildSemiconductor/74LS89/1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fairchild&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;What Ken Shirriff doesn't tell in the &lt;a href=&quot;https://www.righto.com/2014/12/inside-intel-1405-die-photos-of-shift.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;cited entry&lt;/a&gt; is that the &lt;a href=&quot;https://en.wikipedia.org/wiki/Datapoint_2200&quot; rel=&quot;nofollow noreferrer&quot;&gt;Datapoint 2200&lt;/a&gt; not only used 1405 serial RAM but as well &lt;strong&gt;four 7489&lt;/strong&gt; as register file (*3).&lt;/p&gt;&#xA;&lt;p&gt;Similar did a large number of mini computers or computer alike machinery wherever a register file/scratchpad was needed. It was essentially everywhere.&lt;/p&gt;&#xA;&lt;p&gt;It was kind of a sweet spot product for (new) chip manufacturers. Good demand, comparably high prices due being a high integrated one, while at the same time being simple to design and build due its regular structure. No wonder Intel added them early on.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - IIRC first introduced as SN5489 in ca. 1967&lt;/p&gt;&#xA;&lt;p&gt;*3 - It's often forgotten, but chip numbers are in the first place company specific order numbers. As such they are only valid within that companies order system, different companies use different numbering. That's why there are countless lists of interchangeable types. Using or not using a number from a competitor is a marketing decision - and even then usually only more prominent sections are 'cloned'.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Yes, four, as the Datapoint had two register sets. The 8008 implemented only one set, making room for Fagin to 'reinvent' the second set for the Z80.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-05-04T21:56:59.500" LastActivityDate="2021-05-04T21:56:59.500" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19709" PostTypeId="2" ParentId="19706" CreationDate="2021-04-29T06:51:39.367" Score="22" Body="&lt;p&gt;The 3101 was not a product that came out of thin air. According to &lt;a href=&quot;https://newsroom.intel.com/news/intel-at-50-intels-first-product-3101/#gs.zx0cio&quot; rel=&quot;noreferrer&quot;&gt;Intel's own sources&lt;/a&gt;, Honeywell Inc. had anounced they would buy 64-bit memory chips from any vendor that could supply them (so even from a then unknown newcomer like Intel). (The fact that, eventually, Honeywell did &lt;em&gt;not&lt;/em&gt; buy from Intel, is a different story)&lt;/p&gt;&#xA;&lt;p&gt;So, this product already had a potential customer and a strong market demand before it was even designed.&lt;/p&gt;&#xA;&lt;p&gt;In addition, 3101 shouldn't be considered main RAM that had to be available in huge quantities. It should rather be understood the same way as fast static RAM chips that were used as cache memory in the first '386 machines - scratchpad memory of a very small size but with very fast access to off-load slower memory (like core memory).&lt;/p&gt;&#xA;" OwnerUserId="780" LastEditorUserId="780" LastEditDate="2021-04-29T07:31:22.447" LastActivityDate="2021-04-29T07:31:22.447" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19710" PostTypeId="2" ParentId="19707" CreationDate="2021-04-29T07:15:01.183" Score="10" Body="&lt;p&gt;2.9BSD, being a self-hosting operating system, includes all the source code and all the tools necessary to build it. That includes the C compiler, the assembler, and everything. There is no mention anywhere of any of this being renamed for DEMOS, so it's a safe bet that they had the same name.&lt;/p&gt;&#xA;&lt;p&gt;DEMOS is similar in spirit to something like &lt;a href=&quot;https://en.wikipedia.org/wiki/Russian_Fedora_Remix&quot; rel=&quot;nofollow noreferrer&quot;&gt;Russian Fedora Remix&lt;/a&gt;, which is a Linux distribution (everything is named the same, it &lt;em&gt;is&lt;/em&gt; GNU/Linux after all), but ships with conveniences like a Russian keyboard layout and translations of user-friendly error messages. But you'd expect &lt;code&gt;make&lt;/code&gt; to still invoke &lt;code&gt;cc&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Latin letter C is unrelated to the Russian letter &lt;em&gt;С&lt;/em&gt;, even though they look the same and have (sometimes) the same pronunciation. The latter is descended from the Greek sigma, like our S is. C, the programming language, was named for being the next after &lt;a href=&quot;https://en.wikipedia.org/wiki/B_(programming_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;B&lt;/a&gt;, so Russian names like &lt;em&gt;С&lt;/em&gt; or &lt;em&gt;К&lt;/em&gt; wouldn't really make much sense as a name for C. The language is known as C in Russia, (sometimes that's transliterated as &amp;quot;Си&amp;quot; to spell out the sound, &amp;quot;see&amp;quot;). But the compilers are called &amp;quot;GCC&amp;quot;, &amp;quot;clang&amp;quot;, &amp;quot;cc&amp;quot; or whatever. And as explained in &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/19465/10260&quot;&gt;your other question&lt;/a&gt;, the filenames, i.e. the &lt;em&gt;commands&lt;/em&gt; are the same on DEMOS as on 2.9BSD.&lt;/p&gt;&#xA;" OwnerUserId="576" LastEditorUserId="576" LastEditDate="2021-04-30T08:37:53.220" LastActivityDate="2021-04-30T08:37:53.220" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19711" PostTypeId="1" AcceptedAnswerId="19714" CreationDate="2021-04-29T09:55:37.570" Score="24" ViewCount="4243" Body="&lt;p&gt;In VB both array access and function calls are done with &lt;code&gt;()&lt;/code&gt; which makes it difficult to differentiate between those with a quick look. It also makes more nested levels of parentheses like &lt;code&gt;MyArray(GetIndex())&lt;/code&gt; which is much more readable when written as &lt;code&gt;MyArray[GetIndex()]&lt;/code&gt;. I don't know about BASIC but it looks like that the same syntax is also used in BASIC&lt;/p&gt;&#xA;&lt;p&gt;In fact there's no &lt;code&gt;{}&lt;/code&gt; and &lt;code&gt;[]&lt;/code&gt; in VB either, and other symbols like &lt;code&gt;@&lt;/code&gt;, &lt;code&gt;!&lt;/code&gt;, &lt;code&gt;#&lt;/code&gt;, &lt;code&gt;~&lt;/code&gt;... are also unused, making the syntax very verbose for no reason&lt;/p&gt;&#xA;" OwnerUserId="1981" LastEditorUserId="6659" LastEditDate="2021-04-29T12:43:42.187" LastActivityDate="2021-05-24T22:20:21.660" Title="Why did Visual Basic use parentheses for both function call and array access?" Tags="&lt;basic&gt;" AnswerCount="6" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19712" PostTypeId="2" ParentId="19711" CreationDate="2021-04-29T10:30:30.220" Score="27" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I don't know about BASIC but it looks like that the same syntax is also used in BASIC&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Because Visual BASIC is &lt;em&gt;a&lt;/em&gt; BASIC?&lt;/p&gt;&#xA;&lt;p&gt;Since the very first days of BASIC, arrays are indexed in parentheses and function parameters as well.&lt;/p&gt;&#xA;&lt;p&gt;When Microsoft added user defined functions to BASIC (*1), they stayed with the existing syntax. A change in either would mean leaving the realm of BASIC - not to mention breaking compatibility with any existing software and any BASIC examples of indexing and/or function calls.&lt;/p&gt;&#xA;&lt;p&gt;Visual BASIC is a continuation of MS-BASIC 5.x, aka &lt;a href=&quot;https://en.wikipedia.org/wiki/GW-BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;GW-BASIC&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/QuickBASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;QuickBASIC&lt;/a&gt; (and &lt;a href=&quot;https://en.wikipedia.org/wiki/QBasic&quot; rel=&quot;nofollow noreferrer&quot;&gt;QBASIC&lt;/a&gt;) and mostly source compatible with them. It was also QuickBASIC that introduced named functions and procedures, as well as made the GOSUB keyword optional.&lt;/p&gt;&#xA;&lt;p&gt;It's the same natural way any other BASIC developer went when adding named user defined function. From &lt;a href=&quot;https://en.wikipedia.org/wiki/BASIC09&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASIC 09&lt;/a&gt; (1980) and &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;BBC BASIC&lt;/a&gt; (1981) all the way to &lt;a href=&quot;https://en.wikipedia.org/wiki/SuperBASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Super BASIC&lt;/a&gt; (1984) and &lt;a href=&quot;https://en.wikipedia.org/wiki/GFA_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;GFA BASIC&lt;/a&gt; (1986).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In fact there's no {} and [] in VB either, and other symbols like @, !, #, ~... are also unused, making the syntax very verbose for no reason&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What you're calling for is a different language. Languages are (mostly) defined by their syntax, as keywords are rather exchangeable. Maybe you're looking for PASCAL? It was quite popular in the early 80s and uses square brackets for array indexing, for exactly that reason (*2).&lt;/p&gt;&#xA;&lt;p&gt;It's the basic way of BASIC to use parentheses for arrays and function - and symbols like &lt;code&gt;@&lt;/code&gt;, &lt;code&gt;!&lt;/code&gt;, &lt;code&gt;#&lt;/code&gt; and &lt;code&gt;%&lt;/code&gt; to qualify variable types.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Some history&lt;/h2&gt;&#xA;&lt;p&gt;Now, going all the way to &lt;a href=&quot;https://en.wikipedia.org/wiki/Dartmouth_BASIC&quot; rel=&quot;nofollow noreferrer&quot;&gt;BASIC's origins&lt;/a&gt;, we end with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Dartmouth_Time_Sharing_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;DTSS&lt;/a&gt; running on a &lt;a href=&quot;http://www.smecc.org/g_e__200_series_computers.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;GE-200 system&lt;/a&gt;. From today's view the GE-200 might be an odd beast, but back in the early days (*3) it's 20 bit words holding 3 6 bit characters weren't unusual. That 6 bit character of course restricted the character set to 64 encodings. In addition, usage of them was highly application specific. For example their COBOL compatible (*4) did support 49 characters including parenthesis, but not square brackets:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1TIJA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1TIJA.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, their high speed printer did (by default) not provide parenthesis, but square brackets:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/t8At6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t8At6.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Taken from &lt;a href=&quot;https://doc.lagout.org/science/0_Computer%20Science/0_Computer%20History/computer-museum/GE-200%20Series%20High-Speed%20On-Line%20Printer.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this scan&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;So while it is quite likely that original the usage of parenthesis for index and parameters might have been due the restricted character set of original GE-200 environment, an easy answer can not be given. Though, some information could be gathered by meditating over the &lt;a href=&quot;http://dtss.dartmouth.edu/scans/BASIC/BASIC%20Compiler.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;original source code&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;What is clear is that it was not due some (more or less) standard character set. Especially not ASCII or EBCDIC, as neither of them was already developed and/or available at the time BASIC was defined.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - That is beyond the rudimentary support of FN() of earlier MS BASIC dialects.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Inherited from &lt;a href=&quot;https://en.wikipedia.org/wiki/ALGOL_58&quot; rel=&quot;nofollow noreferrer&quot;&gt;ALGOL&lt;/a&gt; - the very same way C did :))&lt;/p&gt;&#xA;&lt;p&gt;*3 - I.e. pre /360 designs.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Yes, COBOL &lt;em&gt;compatible&lt;/em&gt; as at the time, there was still haggling about what features are to be included and ho they are to be handled in source. Mainly about I/O handling, including character set (and Hollerith conversion) .&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-05-24T22:20:21.660" LastActivityDate="2021-05-24T22:20:21.660" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19714" PostTypeId="2" ParentId="19711" CreationDate="2021-04-29T14:55:35.673" Score="45" Body="&lt;p&gt;In the early days, &lt;strong&gt;many machines running BASIC had limited character sets&lt;/strong&gt;. For example, the stock TRS-80 Model I couldn't display the lowercase portion of ASCII, which omitted curly-braces, tilde, and the vertical bar as well. Worse yet, the character codes that usually map to &lt;strong&gt;[ \ ] ^&lt;/strong&gt; instead mapped to up, down, left, and right arrow characters!&lt;/p&gt;&#xA;&lt;p&gt;Reaching further back, EBCDIC didn't have a consistent mapping for square brackets, either. There were many &lt;a href=&quot;https://en.wikipedia.org/wiki/Code_page#EBCDIC-based_code_pages&quot; rel=&quot;noreferrer&quot;&gt;different &lt;strong&gt;code pages&lt;/strong&gt; for EBCDIC&lt;/a&gt;, each intended for a different region, language, and/or use case. &lt;a href=&quot;https://www.ibm.com/docs/en/z-netview/6.2.0?topic=cnmscbet-codepage-considerations&quot; rel=&quot;noreferrer&quot;&gt;Different code pages could map square brackets to different code points&lt;/a&gt;. As a result, a card deck or paper tape from one machine containing those characters might display them as something completely different on another type of machine.&lt;/p&gt;&#xA;&lt;p&gt;BASIC's syntax, at least in older versions, is well-supported by an uppercase-only display that supports the most common symbols and punctuation.&lt;/p&gt;&#xA;" OwnerUserId="495" LastEditorUserId="495" LastEditDate="2021-04-30T19:03:40.570" LastActivityDate="2021-04-30T19:03:40.570" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19715" PostTypeId="2" ParentId="19711" CreationDate="2021-04-29T16:53:58.540" Score="16" Body="&lt;p&gt;The Minimal Basic Standard, ECMA-55, 1st Edition, January 1978, contains a very limited character set, only upper case, and very few non-alpha-numeric characters (including parenthesis, but no other brackets); certainly not the full ASCII character set.&lt;/p&gt;&#xA;&lt;p&gt;This is likely due to compromises in the standards committee between corporate implementers of various existing BASIC versions, many of which were earlier designed for input on keyboards that did not support a full ASCII character set (Apple I, et.al.).&lt;/p&gt;&#xA;&lt;p&gt;For Tiny BASIC implementations, this also reduces the size of the token recognizer.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastEditorUserId="4606" LastEditDate="2021-04-30T07:05:26.533" LastActivityDate="2021-04-30T07:05:26.533" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19716" PostTypeId="2" ParentId="19711" CreationDate="2021-04-29T19:15:24.463" Score="10" Body="&lt;p&gt;A number of BASICs from the minicomputer era used []'s for array access. The most notable was &lt;a href=&quot;https://en.wikipedia.org/wiki/HP_Time-Shared_BASIC&quot; rel=&quot;noreferrer&quot;&gt;HP Timeshare BASIC&lt;/a&gt;, which I assume inspired the other versions that used the same syntax. In HP, it was optional, and () and [] were synonymous. By convention, () was used for array access while [] was used for array and string slicing. This was by no means universally used, as one can see in books like What To Do After Hitting Return.&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2021-04-29T19:15:24.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19717" PostTypeId="2" ParentId="16892" CreationDate="2021-04-29T19:43:34.087" Score="2" Body="&lt;p&gt;The cheapest commonplace calculators in the 1970s could handle floating-point numbers 1.0 and larger with eight decimal digits of precision, and those smaller than 1.0 accurate to 0.0000001.  A 32-bit floating-point format whose range extends through at least 1E20 will generally only be able to reliably process whole numbers in the range +/- 16,777,216, which is just over a sixth of the 99,999,999 that even the cheapest pocket calculators could handle.  Pushing to a 40-bit format would extend that range to +/-4,294,967,296, which is about 42 times what a pocket calculator can handle.  Even if one limits numerical output to nine significant figures, that's still superior to a cheap pocket calculator.&lt;/p&gt;&#xA;&lt;p&gt;To be sure, even 40-bit math wouldn't have been a match for the more specialized calculators, some of which offered 12 or more digits of precision, but from a marketing standpoint it's a lot easier to say that a device which is specialized for some kinds of numerical precision can do them better than a general-purpose programming language, than to try to justify a $1,500 computer being unable to perform computations that could be handled by a pocket calculator that cost less than 1/100 as much.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-04-29T19:43:34.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19720" PostTypeId="2" ParentId="19711" CreationDate="2021-04-30T23:38:07.737" Score="9" Body="&lt;p&gt;BASIC was originally developed on &lt;a href=&quot;https://en.wikipedia.org/wiki/Dartmouth_Time_Sharing_System&quot; rel=&quot;noreferrer&quot;&gt;DTSS&lt;/a&gt;, which used &lt;a href=&quot;https://en.wikipedia.org/wiki/Teletype_Model_33&quot; rel=&quot;noreferrer&quot;&gt;Model 33 Teletypes&lt;/a&gt; for user I/O. The Model 33 didn't have [] characters, so BASIC couldn't use them.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2021-04-30T23:38:07.737" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="19721" PostTypeId="1" AcceptedAnswerId="19730" CreationDate="2021-05-01T15:48:07.813" Score="4" ViewCount="426" Body="&lt;p&gt;Going through schematics of several home or small office computers of the era, I was wondering why almost none of them (1) used dual-ported video RAM. I understand that those chips were initaly expensive and thus mostly used on high-end hardware. But, starting from the middle of the eighties, their cost went down considerably (2). Effective processing speed of computers was a a real competitive issue, as attested by magazine reviews of home and office hardware. So why not use DP RAM to avoid slow interleaving schemes, and allow the CPU to run at full memory speed while offering high resolutions?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;(1) The only exception I found is the Amstrad PC1512, which seemed to have a couple of UPD4126C-15. But those were apparently dropped in the PC1640 for single ported TMS4464.&lt;/p&gt;&#xA;&lt;p&gt;(2) Found 41264 chips in advertisements of '87, at approximately double the cost of equivalent 4464 SP chips. In '89 at 1.33x.&lt;/p&gt;&#xA;" OwnerUserId="14931" LastEditorUserId="14931" LastEditDate="2021-05-03T12:15:53.563" LastActivityDate="2021-05-03T12:15:53.563" Title="Were there low-end eighties computers that used dual-ported video RAM?" Tags="&lt;hardware&gt;&lt;video&gt;&lt;dram&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19722" PostTypeId="2" ParentId="19721" CreationDate="2021-05-01T16:10:20.167" Score="6" Body="&lt;p&gt;Well, depends on the definition of dual port. After all, all 9918ff based machines can as well be classified as dual ported. Similar PC graphic cards, like VGA.&lt;/p&gt;&#xA;&lt;p&gt;Beside that, the most most important reason was &lt;strong&gt;No need to do so.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Early 8 bit CPUs were not only slow enough (compared to RAM) to allow interleaved video and CPU access on a fixed schedule, it as well saved money (*1) to make the CPU run according to whatever the video needed. In real world usage it didn't matter that an Apple II was running at (roughly) 1.024 MHz to satisfy instead of 1 MHz, or a C64 at 1.023 (NTSC) or 0.985 (PAL) (*2). Or that many Z80 systems did utilize less than the 4 MHz the CPU and other components were designed for.&lt;/p&gt;&#xA;&lt;p&gt;Were talking (usually) less than 10% difference from some hypothetical speed, so way below  anything noticeable beyond some benchmarks. Not to mention that these were usually way more influenced by software implementation details, like the BASIC used, than the hardware itself.&lt;/p&gt;&#xA;&lt;p&gt;Sure, speed was &lt;em&gt;a&lt;/em&gt; criteria, but only one among many others, like RAM size, screen resolution, ability to show 80 columns or colour.&lt;/p&gt;&#xA;&lt;p&gt;And, eventually the killer one: &lt;strong&gt;PRICE&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;So what good would it be for a manufacturer in such a price sensitive area, as home computers were, to add hardware to archive an effect barely noticeable, but increasing price quite drastic? (*3)&lt;/p&gt;&#xA;&lt;p&gt;Building computers is a business to make money, not a race for the best machine - that is only done if money doesn't matter (but performance does).&lt;/p&gt;&#xA;&lt;p&gt;The ZX81 is maybe the most prominent counter example here - it wasted 60+% performance to save on video hardware - and people bought it like sliced bread.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - With synchronized access windows a concurrent access simply never happened, so no need to add hardware for dual access, thus less cost. It's like with waste (refusal) management - best waste management is to not have waste in the first place :))&lt;/p&gt;&#xA;&lt;p&gt;*2 - It did ofc, matter when porting tight knitted software between either, but that's beyond the point.&lt;/p&gt;&#xA;&lt;p&gt;*3 - Keep in mind, counter price of any hardware component added is usually at least four times that components price. So adding 25 USD in logic and RAM interface results in 100 USD higher sales price.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-05-01T16:49:30.413" LastActivityDate="2021-05-01T16:49:30.413" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19724" PostTypeId="1" AcceptedAnswerId="19725" CreationDate="2021-05-02T08:06:18.880" Score="9" ViewCount="1655" Body="&lt;p&gt;Consider the following Pascal program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    1  1 PROGRAM MAIN(OUTPUT); VAR F:TEXT; I:INTEGER;&#xA;    2  2 BEGIN&#xA;    3  2    REWRITE(F);&#xA;    4  3    FOR I := 10 TO 30 DO BEGIN&#xA;    5  3       WRITELN(   I, ’:’, ’ABCDEFGHIJ’ : I);&#xA;    6  3       WRITELN(F, I, ’:’, ’ABCDEFGHIJ’ : I);&#xA;    7  2    END;&#xA;    8  2    RESET(F);&#xA;    9  2    WRITELN(’--------------------’);&#xA;   10  3    WHILE NOT EOF(F) DO BEGIN&#xA;   11  3       WRITE(F^);&#xA;   12  3       GET(F)&#xA;   13  3    END&#xA;   14  0 END.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The program writes a staircase of &lt;code&gt;ABCDEFGHIJ&lt;/code&gt; to the standard output and to a local temporary file, then writes a separator line and copies the local file character by character to the standard output. The expectation is that there will be two copies of the staircase of &lt;code&gt;ABCDEFGHIJ&lt;/code&gt;; however, the result on the BESM-6 is&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        10:ABCDEFGHIJ&#xA;        11: ABCDEFGHIJ&#xA;        12:  ABCDEFGHIJ&#xA;        13:   ABCDEFGHIJ&#xA;        14:    ABCDEFGHIJ&#xA;        15:     ABCDEFGHIJ&#xA;        16:      ABCDEFGHIJ&#xA;        17:       ABCDEFGHIJ&#xA;        18:        ABCDEFGHIJ&#xA;        19:         ABCDEFGHIJ&#xA;        20:          ABCDEFGHIJ&#xA;        21:           ABCDEFGHIJ&#xA;        22:            ABCDEFGHIJ&#xA;        23:             ABCDEFGHIJ&#xA;        24:              ABCDEFGHIJ&#xA;        25:               ABCDEFGHIJ&#xA;        26:                ABCDEFGHIJ&#xA;        27:                 ABCDEFGHIJ&#xA;        28:                  ABCDEFGHIJ&#xA;        29:                   ABCDEFGHIJ&#xA;        30:                    ABCDEFGHIJ&#xA;--------------------&#xA;        10:ABCDEFGHIJ&#xA;   15:     ABCDEFGHIJ&#xA;    ABCDEFGHIJ&#xA;             ABCDEFGHIJ&#xA; CDEFGHIJ&#xA; HIJ&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To put it mildly, only the first line is correct, the rest is garbage.&lt;/p&gt;&#xA;&lt;p&gt;To achieve the expected result, it is necessary to write&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   11  3       IF EOLN(F) THEN WRITELN ELSE WRITE(F^);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Or, given that the internal character encoding is almost ASCII, &lt;code&gt;IF F^ = CHR(10) THEN ...&lt;/code&gt; also works.&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&quot;https://books.google.com/books?id=XSvqr6FzNy4C&quot; rel=&quot;noreferrer&quot;&gt;Programming in Pascal&#xA;By Nell B. Dale, 1997&lt;/a&gt; (search for &lt;code&gt;eoln&lt;/code&gt;, there are only 5 occurrences), it is unclear if explicitly writing an &lt;code&gt;eoln&lt;/code&gt; character to the standard output is guaranteed to be functionally equivalent to &lt;code&gt;writeln&lt;/code&gt; on all platforms.&lt;/p&gt;&#xA;&lt;p&gt;Theoretically, even on MS-DOS the internal files, including files of type &lt;code&gt;text&lt;/code&gt;, could be treated as binary, and &lt;code&gt;writeln&lt;/code&gt; to these files would write just &lt;code&gt;chr(10)&lt;/code&gt;; the standard output would be treated as text, and &lt;code&gt;writeln&lt;/code&gt; to it would write &lt;code&gt;chr(13), chr(10)&lt;/code&gt;; and for efficiency, there would be no checking for &lt;code&gt;chr(10)&lt;/code&gt; appearing in the items being output; thus resulting in an incorrect text file if an equivalent program is run.&lt;/p&gt;&#xA;&lt;p&gt;Would that be a conforming behavior?&lt;/p&gt;&#xA;&lt;p&gt;A related issue: when reading from the standard input (&amp;quot;punched cards&amp;quot;), &lt;code&gt;eoln(input)&lt;/code&gt; becomes true after 80 of &lt;code&gt;get(input)&lt;/code&gt;, but at that moment &lt;code&gt;input^&lt;/code&gt; is a space character rather than the line feed. If &lt;strong&gt;that&lt;/strong&gt; is conforming, then the first question would thus be answered in the positive as well.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2021-05-02T08:23:38.763" LastActivityDate="2021-05-02T18:14:40.180" Title="Is this a bug or an allowed Pascal behavior?" Tags="&lt;pascal&gt;&lt;bugs&gt;&lt;io&gt;&lt;besm-6&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19725" PostTypeId="2" ParentId="19724" CreationDate="2021-05-02T08:31:38.013" Score="14" Body="&lt;p&gt;The &lt;a href=&quot;https://pascal-central.com/iso7185.html&quot; rel=&quot;noreferrer&quot;&gt;ISO 7185 Pascal standard&lt;/a&gt;, section 6.4.3.5 &amp;quot;File-types&amp;quot;, says (my emphasis):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There shall be a file-type that is denoted by the required structured-type-identifier text. The structure of the type denoted by text shall define an additional sequence-type whose values shall be designated lines. A line shall be a sequence cs ~S(end-of-line), where cs is a sequence of components possessing the char-type, and end-of-line shall represent a special component-value. Any assertion in clause 6 that the end-of-line value is attributed to a variable other than a component of a sequence shall be construed as an assertion that the variable has attributed to it the char-type value space. If l is a line, then no component of l other than l.last shall be an end-of-line. There shall be an implementation-defined subset of the set of char-type values, designated characters prohibited from textfiles; &lt;strong&gt;the effect of causing a character in that subset to be attributed to a component of either t.L or t.R for any textfile t shall be implementation-dependent&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A line-sequence, ls, shall be either the empty sequence or the sequence l ~ ls' where l is a line and ls' is a line-sequence.&lt;/p&gt;&#xA;&lt;p&gt;Every value t of the type denoted by text shall satisfy the following two rules:&lt;/p&gt;&#xA;&lt;p&gt;a) If t.M = Inspection, then t.L ~ t.R shall be a line-sequence.&lt;/p&gt;&#xA;&lt;p&gt;b) If t.M = Generation, then t.L ~ t.R shall be ls ~cs, where ls is a line-sequence and cs is a sequence of components possessing the char-type.&lt;/p&gt;&#xA;&lt;p&gt;NOTE -- 5 In rule b), cs may be considered, especially if it is non-empty, to be a partial line that is being generated. Such a partial line cannot occur during inspection of a fi le. Also, cs does not correspond to t.R, since t.R is the empty sequence if t.M = Generation.&lt;/p&gt;&#xA;&lt;p&gt;A variable that possesses the type denoted by the required type-identifier text shall be designated a textfile.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So the standard specifically says that end-of-line sequences are implementation dependent, and it doesn't disallow this to differ between standard output, and a file.&lt;/p&gt;&#xA;&lt;p&gt;It was also always considered good practice in Pascal to never rely on any particular end-of-line encoding, and use &lt;code&gt;eoln&lt;/code&gt;/&lt;code&gt;readln&lt;/code&gt;/&lt;code&gt;writeln&lt;/code&gt; instead. That way, programs would work on different Pascal systems.&lt;/p&gt;&#xA;&lt;p&gt;So following that practice would also allow for difference between end-of-line representations in different files. And given what kind of OS Pascal was developed first for, I wouldn't be surprised if there are other OS where encoding differs depending on what kind of device the file is on (for example, devices differed by the number of bits a word on the device had).&lt;/p&gt;&#xA;&lt;p&gt;Finally, &amp;quot;manuals&amp;quot; for Pascal don't matter. The language specification was written by the inventor of Pascal, &lt;a href=&quot;https://en.wikipedia.org/wiki/Niklaus_Wirth&quot; rel=&quot;noreferrer&quot;&gt;Niklaus Wirth&lt;/a&gt;, and was later turned into the ISO standard quoted. That said, implementations often choose to deviate from that standard, to the displeasure of Wirth, in particular with respect to files and other OS specifics. So &amp;quot;is it allowed Pascal behaviour?&amp;quot; and &amp;quot;does some manual mention this?&amp;quot; are very very different things. Manuals mention many things that are not &amp;quot;allowed&amp;quot; Pascal behaviours.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-05-02T18:14:40.180" LastActivityDate="2021-05-02T18:14:40.180" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19726" PostTypeId="2" ParentId="19721" CreationDate="2021-05-02T11:00:27.627" Score="1" Body="&lt;p&gt;Given packaged component costs at the time, for a given performance target, it was cheaper to time division multiplex either a wider or faster memory bus than to procure dual ported chips (much lower volume and/or higher pin count packages, synchronization circuit costs. etc).&lt;/p&gt;&#xA;&lt;p&gt;Pins were not free.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2021-05-02T11:00:27.627" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19727" PostTypeId="1" CreationDate="2021-05-02T13:19:39.420" Score="7" ViewCount="225" Body="&lt;p&gt;Around 1987, the investment bank I worked for had a high-end graphics device, possibly from Evans &amp;amp; Sutherland, which produced an &amp;quot;animated&amp;quot; display not unlike the view from the front seat of the first car of a roller coaster. Here it was possible to &amp;quot;ride the graph&amp;quot; given a time series of stock prices of IBM or whatever. As such, this device was used solely for demonstration.&lt;/p&gt;&#xA;&lt;p&gt;Would anyone know what device this could have been or if any pictures or videos exist of its output?&lt;/p&gt;&#xA;" OwnerUserId="21627" LastActivityDate="2021-05-21T18:43:48.270" Title="Was there an Evans &amp; Sutherland display system capable of rendering ordinary data as motion through a landscape?" Tags="&lt;graphics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19729" PostTypeId="1" AcceptedAnswerId="19808" CreationDate="2021-05-02T21:09:55.823" Score="1" ViewCount="127" Body="&lt;p&gt;AMIGA CDTV, 68030 MMU, no FPU, KS 3.1.4, WB3.9 + BBs, MUI3.8, Required Libs.&lt;/p&gt;&#xA;&lt;p&gt;I followed all the requirements swapping guigfx with non-FPU equivalent and I'm not able to get iGame to run. When FPU is enabled in WinUAE (68882) iGames works as expected (on both versions FPU and NONFPU of guigfx.library). Now, since I wanted to use frontend for WHDLoad on my real Amiga (030 no FPU) does it mean I'm stuck?&lt;/p&gt;&#xA;&lt;p&gt;Did anyone get it running without an FPU? If not, what other frontend can I use for convenience (WHDLoadMenu is there but rather simple).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0cBuc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0cBuc.png&quot; alt=&quot;The top-left fragment of a screenshot; in the corner, there is an error dialog box ‘Software Failure’ with the message: ‘iGame: Program failed (error #8000000B). Wait for disk activity to finish.’ and two buttons, ‘Suspend’ and ‘Finish’. In the window below, there are three floppy disk icons, labelled ‘f’, ‘TMP’ and ‘DATA’, and three more icons covered by the error dialog. To the right of the icons, there is an empty window entitled ‘iGame’.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="15334" LastEditDate="2021-05-11T21:22:38.173" LastActivityDate="2021-05-11T21:22:38.173" Title="Amiga OS3.9 unable to run iGame error #8000000B" Tags="&lt;amiga&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19730" PostTypeId="2" ParentId="19721" CreationDate="2021-05-02T21:17:33.180" Score="3" Body="&lt;p&gt;The IBM PS/2 model 30 (and it's variant, model 25) use 64K of VRAM in their MCGA video system. They manage to display the 256-color VGA graphics mode (requiring around 12.6MB/s streaming to the monitor) with an 8-bit data bus, whereas the VGA card requires a 32-bit data bus with its single-ported data RAM to provide enough bandwidth.&lt;/p&gt;&#xA;&lt;p&gt;The video RAM chips are two 41264 according to &lt;a href=&quot;http://ps-2.retropc.se/schematics/IBM%20PS2%20Model%2030.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the schematics&lt;/a&gt;, as drawn on page 7, chips U6 and U7. The actual PS/2 model 30 I posess has two Hyundai HM53461P-15 chips installed in that position.&lt;/p&gt;&#xA;" OwnerUserId="10479" LastActivityDate="2021-05-02T21:17:33.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19731" PostTypeId="2" ParentId="14375" CreationDate="2021-05-02T21:49:15.150" Score="0" Body="&lt;p&gt;There exists &lt;a href=&quot;https://sourceforge.net/projects/fltk-dos/files/FLTK%20for%20DOS/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FLTK for DOS&lt;/a&gt;, which is the most modern option. It's hardly a surprise, as fltk is simple and hence easy to port anywhere.&lt;/p&gt;&#xA;&lt;p&gt;Note that &lt;code&gt;djgpp&lt;/code&gt; supports the latest c++ standard, so you can do modern c++ gui programming under DOS.&lt;/p&gt;&#xA;" OwnerUserId="18001" LastEditorUserId="18001" LastEditDate="2021-05-02T23:03:10.120" LastActivityDate="2021-05-02T23:03:10.120" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19732" PostTypeId="2" ParentId="13611" CreationDate="2021-05-03T03:00:34.280" Score="3" Body="&lt;p&gt;I worked in service at Dec from the 80s to 2003.&#xA;Regarding the public implementation of Alpha chips: on DEC boxes it was fine.&#xA;My POV as related to Intel / Microsoft relationship: it was a dealbuster for getting 64 bit CPUs on desktops. &amp;amp; servers.  Microsoft had had a relationship with Intel from the start and refused to jeopardize it by aligning with DEC. Wintel was doing fine so Microsoft just ignored Alpha.&lt;/p&gt;&#xA;&lt;p&gt;DEC wrote the code for 64 bit Windows NT to prove it worked.&#xA;Didn't matter.  There wasn't THAT much demand from users to affect their bottom line.&#xA;Engineering OEMS sold them to high-end users, but the was it fir desktop workstations.&#xA;Without the mass market that DEC CEO Palmer envisioned, the numbers didn't work to scale up. The Hudson plant wasn't bringing in the revenue and fizzled.&#xA;Once the DEC / Intel deal hit, THEN Microsoft &amp;quot;liked&amp;quot; 64bit Windows.&#xA;By then, the valuation of Alpha was way down .. 10 yrs old?&lt;/p&gt;&#xA;&lt;p&gt;Palmer then sold off the pieces until it was just a SERVICE company, which is whatt the Compaq deal was all about. They sold boxes but had no service.&#xA;A merger there and Compaq had a service force and DEC was history.&lt;/p&gt;&#xA;&lt;p&gt;DEC was great at making stuff and as long as the high-end users kept calling to buy product, things were fine.  But...&lt;/p&gt;&#xA;" OwnerUserId="21632" LastActivityDate="2021-05-03T03:00:34.280" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19733" PostTypeId="1" CreationDate="2021-05-03T05:16:07.530" Score="1" ViewCount="45" Body="&lt;p&gt;I was curious: what was the cheapest/wimpiest computer you could run &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerAnimator&quot; rel=&quot;nofollow noreferrer&quot;&gt;PowerAnimator&lt;/a&gt; back in the day on?&lt;/p&gt;&#xA;&lt;p&gt;My guess would be a base model SGI Indy.&lt;/p&gt;&#xA;" OwnerUserId="21633" LastActivityDate="2021-05-03T05:16:07.530" Title="PowerAnimator System Requirements?" Tags="&lt;graphics&gt;&lt;sgi&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19734" PostTypeId="1" CreationDate="2021-05-03T07:23:44.973" Score="1" ViewCount="130" Body="&lt;p&gt;I am trying to add some system interface made by myself to Linux-0.11 and using bochs to debug the interface.But I have found two strange things. Here is my code.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;asm/segment.h&amp;gt;&#xA;char msg[24] = {0};//23 characters + ’\0' = 24&#xA;int sys_iam(const char* name)&#xA;/***&#xA; * function : put the content in name(address) to msg, and the length of it should be no longer than 23  &#xA; * return：the number of character which is copied&#xA; ***/&#xA;{&#xA;    printk(&amp;quot;Sys_iam is running\n&amp;quot;);&#xA;    int i;&#xA;    //store the data temporarily&#xA;    char buf[25] = {0};&#xA;    for(i = 0;i&amp;lt;25;i++){&#xA;        buf[i] = get_fs_byte(name + i);&#xA;        if(buf[i] == '\0')break;&#xA;    }&#xA;    int len = i;&#xA;    //if the length is bigger than 23&#xA;    if(len &amp;gt; 23){&#xA;        errno = EINVAL;&#xA;        return -1;//set the errno to ENIVAL，return -1&#xA;    }&#xA;    //int j;&#xA;    int j;&#xA;    for(j = 0;j&amp;lt;len;j++){&#xA;        msg[j] = buf[j];&#xA;    }&#xA;    msg[len] = '\0';&#xA;    printk(&amp;quot;len:%d\n&amp;quot;, len);&#xA;    //printk(&amp;quot;buflen:%d\n&amp;quot;,strlen(buf));&#xA;    printk(&amp;quot;buf:%s\n&amp;quot;, buf);&#xA;    printk(&amp;quot;msglen:%d\n&amp;quot;,strlen(msg));&#xA;    printk(&amp;quot;msg:%s\n&amp;quot;, msg);&#xA;    return len;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I found the msg's len is 0, and the buf and msg can't be shown on console.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/wTJte.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;The screenshot without strlen(buf)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But when I add the code &amp;quot;printk(&amp;quot;buflen:%d&amp;quot;,strlen(buf));&amp;quot;,I found the msglen is 5, and I can see buf on the console buf still can't see msg. Here is the code(I just add one line):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    printk(&amp;quot;buflen:%d\n&amp;quot;,strlen(buf));&#xA;    printk(&amp;quot;buf:%s\n&amp;quot;, buf);&#xA;    printk(&amp;quot;msglen:%d\n&amp;quot;,strlen(msg));&#xA;    printk(&amp;quot;msg:%s\n&amp;quot;, msg);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And this is the things on the console:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/mnOZB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;[The screenshot with strlen(buf)]&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So I am confused with these two things:&lt;/p&gt;&#xA;&lt;p&gt;1.why I can't see msg on the console&lt;/p&gt;&#xA;&lt;p&gt;2.Why the msg len is 5(which is argv1's len) when I add strlen(buf)&lt;/p&gt;&#xA;&lt;p&gt;Here is the test code iam.c:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#define __LIBRARY__&#xA;#include &amp;lt;unistd.h&amp;gt;&#xA;#include &amp;lt;stdio.h&amp;gt;&#xA;&#xA;_syscall1(int, iam, const char*, name);&#xA;int main(int argc,char ** argv)&#xA;{&#xA;    iam(argv[1]);&#xA;    return 0;&#xA;} &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Thank for your help sincerely!&lt;/p&gt;&#xA;" OwnerUserId="21635" LastActivityDate="2021-05-03T07:23:44.973" Title="Why I can't use printk() to print string to the screen" Tags="&lt;operating-system&gt;&lt;linux&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2021-05-03T12:53:12.687" ContentLicense="CC BY-SA 4.0" />
  <row Id="19735" PostTypeId="1" AcceptedAnswerId="19736" CreationDate="2021-05-03T09:33:35.803" Score="7" ViewCount="268" Body="&lt;p&gt;Is there a file manager for Amiga OS 3.x, something like Directory Opus but keyboard-driven, which feels more like Midnight Commander or Total Commander, where all the navigation is done by keyboard rather than mouse?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2021-05-03T09:57:25.747" LastActivityDate="2021-05-03T10:01:30.677" Title="Amiga File Manager with keyboard navigation" Tags="&lt;amiga&gt;&lt;software-recommendation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19736" PostTypeId="2" ParentId="19735" CreationDate="2021-05-03T10:01:30.677" Score="9" Body="&lt;p&gt;&lt;a href=&quot;http://eab.abime.net/showthread.php?t=102471&quot; rel=&quot;noreferrer&quot;&gt;MCAmiga&lt;/a&gt; fits the bill, it’s pretty much Midnight Commander for the Amiga and uses the keyboard extensively.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IchP3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IchP3.png&quot; alt=&quot;MCAmiga 0.8 screenshot showing the keyboard shortcuts&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2021-05-03T10:01:30.677" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19737" PostTypeId="1" CreationDate="2021-05-03T16:17:20.623" Score="5" ViewCount="498" Body="&lt;p&gt;Reading over some old articles on Alpha I realized I really didn't understand PALcode. So I did a little reading on that.&lt;/p&gt;&#xA;&lt;p&gt;PALcode is stored in main memory, is written in Alpha ML, and is called by a table entry. On calling a PAL instruction, it spills the pipeline, looks up that entry number from PAL_BASE, and JSRs to that address.&lt;/p&gt;&#xA;&lt;p&gt;So isn't that basically identical to what any other platform would call a vectored interrupt?&lt;/p&gt;&#xA;&lt;p&gt;Is there something else? Special instructions or internal data that is only accessible via PAL?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2021-05-04T12:53:59.463" Title="Understanding PALcode" Tags="&lt;dec&gt;&lt;alpha&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19738" PostTypeId="1" CreationDate="2021-05-03T17:02:26.900" Score="2" ViewCount="105" Body="&lt;p&gt;Just installed python 2.4 on my Amiga os3.9. sometimes when I run a script the machine restarts. Any idea why that may be? It has 030 with MMU, 64MB RAM and 1MB chip ram. All MMU libs are installed. This is the guide I followed:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://cowboy3398.wordpress.com/2020/05/12/installing-python-2-4-on-amiga/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://cowboy3398.wordpress.com/2020/05/12/installing-python-2-4-on-amiga/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;How to get additional python libs anyway if you can't just PIP?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2021-05-03T17:02:26.900" Title="Python2.4 Amiga OS M68K restarting system and where to get libs" Tags="&lt;amiga&gt;&lt;programming&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19739" PostTypeId="2" ParentId="19737" CreationDate="2021-05-03T17:30:10.920" Score="7" Body="&lt;p&gt;PALcode is not just the 'extra instructions' - it also provides other support for the hardware. The &lt;a href=&quot;http://bitsavers.org/pdf/dec/alpha/Digital_EC-H1689-10_AlphaArchitectureHandbook_1992.pdf&quot; rel=&quot;noreferrer&quot;&gt;architecture manual&lt;/a&gt; mentions interrupt dispatching, power-up initialization, and so on.&lt;/p&gt;&#xA;&lt;p&gt;The manual goes on to say (1992 version, chapter 6):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;PALcode is written in standard machine code with some&#xA;implementation-specific extensions to provide access to low-level&#xA;hardware.  This lets an Alpha implementation make various design&#xA;trade-offs based on the hardware technology being used to implement&#xA;the machine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As well as access to such mechanisms, PALcode runs with interrupts off, and I-stream MMU traps are disabled - this latter is apparently necessary so PALcode can assist in memory management.&lt;/p&gt;&#xA;&lt;p&gt;In short, it's running in a special mode, and it can be as special as the hardware designers want it to be. PALcode is machine-specific but is intended to be used to present a consistent interface to the OS.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-05-03T17:30:10.920" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19741" PostTypeId="1" AcceptedAnswerId="19742" CreationDate="2021-05-04T00:35:29.367" Score="5" ViewCount="755" Body="&lt;p&gt;I'm trying to find a 70s or very early 80s source code of a Pascal pretty-printing program which is more advanced than the version mentioned on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Prettyprint&quot; rel=&quot;noreferrer&quot;&gt;Prettyprint&lt;/a&gt; wiki page which is &lt;a href=&quot;http://www.moorecad.com/standardpascal/prettyp.pas&quot; rel=&quot;noreferrer&quot;&gt;undated and somewhat COBOL-like&lt;/a&gt; with procedures having definitions like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PROCEDURE GETCHAR( (* FROM *)      VAR INPUTFILE : TEXT;&#xA;                   (* UPDATING *)  VAR NEXTCHAR  : CHARINFO;&#xA;                   (* RETURNING *) VAR CURRCHAR  : CHARINFO );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;For some reason I cannot compile it with &lt;a href=&quot;https://www.jdoodle.com/execute-pascal-online/&quot; rel=&quot;noreferrer&quot;&gt;online Free Pascal&lt;/a&gt; - apart form some unclear issue with the &lt;code&gt;IN&lt;/code&gt; operator, the contemporary language does not support the intrinsic function &lt;code&gt;GET&lt;/code&gt; (other Pascal compilers available online use Free Pascal as well, failing in similar ways).&lt;/p&gt;&#xA;&lt;p&gt;With a few modifications, however, that pretty-printer compiles and works on the BESM-6 emulator, but the results are unsatisfactory, e.g. it sometimes inserts spaces between periods in array declarations, seemingly haphazardly:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;type alfa = packed array [1..6] of char;x=array[1..2] of integer;&#xA;alfa2 = packed array [1..12] of char;&#xA;alfa22 = packed array [1..2] of alfa2;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;becomes&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;TYPE ALFA = PACKED ARRAY [ 1 . . 6 ]  OF  CHAR ;&#xA;     X = ARRAY[1..2] OF INTEGER;&#xA;     ALFA2 = PACKED ARRAY [ 1 . . 12 ]  OF  CHAR ;&#xA;     ALFA22  = PACKED  ARRAY [  1 .  . 2  ]  OF   ALFA2 ;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Is there the source code of a better legacy Pascal pretty-printer?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Rationale:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I've decompiled the &lt;a href=&quot;https://github.com/besm6/pascal-re/blob/master/prettypr.pas&quot; rel=&quot;noreferrer&quot;&gt;BESM-6 Pascal pretty-printer&lt;/a&gt; which performs some syntax checking and parses a few pseudo-comments, including one which is not understood by the BESM-6 Pascal compiler proper: specifically, Jx where x is a character which is taken literally to be the (optional) meta-character for the language keywords from now on.&lt;/p&gt;&#xA;&lt;p&gt;Apart from recognizing the keywords and calling procedures handling the corresponding statements, most of the logic is not understood, and the variable names and procedures are non-mnemonic.&lt;/p&gt;&#xA;&lt;p&gt;(&lt;em&gt;Caveat lector&lt;/em&gt;: for reading convenience, begin/end are represented with { }, and the comments are bounded with (* and *); also, the code contains machine-specific details pertaining to the output file format with word-aligned lines of fixed width and compressed spaces.)&lt;/p&gt;&#xA;&lt;p&gt;To facilitate restoring the source code closer to its original form, it would be nice to find a prototype of this program (which likely exists as there was no point adding support for non-existent pseudo-comment characters if the pretty-printer was written from scratch).&lt;/p&gt;&#xA;&lt;p&gt;The programming manual mentions that the program &lt;em&gt;was transferred to the Computing Center of the USSR Academy of Sciences by scientists from the GDR&lt;/em&gt;. That makes it even more likely that the program had a Western prototype.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2021-05-04T00:41:52.557" LastActivityDate="2021-05-04T16:26:33.843" Title="Looking for the source code of a sophisticated Pascal pretty-printing program" Tags="&lt;history&gt;&lt;identify-this-software&gt;&lt;pascal&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19742" PostTypeId="2" ParentId="19741" CreationDate="2021-05-04T00:52:00.457" Score="6" Body="&lt;p&gt;A few pretty-printers were published in &lt;a href=&quot;http://pascal.hansotten.com/uploads/pug/13_Pascal_Newsletter_Dec78.pdf&quot; rel=&quot;noreferrer&quot;&gt;the 13th Pascal Newsletter&lt;/a&gt; in 1978. The machine-readable text of a version of the one by Hueras and Ledgard is available &lt;a href=&quot;https://www.saildart.org/PRETTY.PAS%5BPAS,SYS%5D&quot; rel=&quot;noreferrer&quot;&gt;on the SAILDART archive&lt;/a&gt;. (Also on SAILDART is &lt;a href=&quot;https://www.saildart.org/PSFORM.PSC%5BP10,SYS%5D&quot; rel=&quot;noreferrer&quot;&gt;an unrelated formatter named PFORM&lt;/a&gt;, although it might be fairly specific to the weird variety of PDP-10 Pascal used at Stanford.) The source code of a version of Condict's formatter can be found in &lt;a href=&quot;http://pascal.hansotten.com/uploads/ucsd/usus/PASCAL%20USUS%20LIBRARY%20LISTING.TXT&quot; rel=&quot;noreferrer&quot;&gt;this archive&lt;/a&gt;; search for “&lt;code&gt;condict&lt;/code&gt;” to find it.&lt;/p&gt;&#xA;" OwnerUserId="19767" LastEditorUserId="19767" LastEditDate="2021-05-04T05:02:51.823" LastActivityDate="2021-05-04T05:02:51.823" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19745" PostTypeId="2" ParentId="19737" CreationDate="2021-05-04T12:53:59.463" Score="3" Body="&lt;p&gt;On the Alpha, PALcode acts as a replacement for microcode (§1.1).  Low-level functions that would normally be controlled by microcode are instead handled using code stored in main memory (§2.1).  This consists of regular Alpha machine code augmented with five additional opcodes that provide access to normally inaccessible internal registers (§1.3).  Calls to PALcode are basically a form of interrupt; when the processor needs to access a PALcode function it does so through a jump table stored in main memory (§2.1).  From that section:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;PALcode can be invoked by the following hardware and software events:&lt;br /&gt;&#xA;• Reset&lt;br /&gt;&#xA;• System hardware exceptions (&lt;strong&gt;machine check&lt;/strong&gt;, arithmetic trap)&lt;br /&gt;&#xA;• Interrupts&lt;br /&gt;&#xA;• Memory-management exceptions&lt;br /&gt;&#xA;• &lt;code&gt;CALL_PAL&lt;/code&gt; instructions&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Note that, e.g., after handling hardware-specific tasks a PALcode interrupt handler may then pass control to an OS-provided handler or userland code (Table 2-1).&lt;/p&gt;&#xA;&lt;p&gt;Full details can be found in &lt;a href=&quot;https://download.majix.org/dec/palcode_dsgn_gde.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PALcode for Alpha Microprocessors System Design Guide&lt;/a&gt;  (thanks to @another-dave for that link).  All references above are to that document.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastActivityDate="2021-05-04T12:53:59.463" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19746" PostTypeId="1" AcceptedAnswerId="19747" CreationDate="2021-05-04T14:20:20.520" Score="39" ViewCount="7450" Body="&lt;p&gt;The original DOOM and its derivatives (DOOM II, Heretic, Hexen) were early 90s 3D games released at a time when DOS PCs usually had ISA bus Super VGA graphics cards. In the following few years, PCs would be upgraded to PCI bus graphics cards. The difference was stark, with PCI bus running at 33 MHz and 32-bits wide.&lt;/p&gt;&#xA;&lt;p&gt;But DOOM engine games not only run fine on newer PCI graphics cards, but seem to benefit from the added performance. Anecdotally, DOOM on a Pentium PCI machine is faster than on an 80486DX with ISA graphics by a margin that suggest to me it isn't just a result of the marginally faster CPU. So, I am &lt;em&gt;speculating&lt;/em&gt; that the PCI bus graphics card is also leveraged somehow.&lt;/p&gt;&#xA;&lt;p&gt;How does DOOM (&lt;em&gt;specifically&lt;/em&gt;) use this newer bus and graphics card than what it  was written for to get added performance?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-05-05T13:42:35.003" LastActivityDate="2021-05-08T11:50:23.303" Title="How do DOS games like DOOM benefit from a PCI graphics card?" Tags="&lt;gaming&gt;&lt;vga&gt;&lt;dos&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19747" PostTypeId="2" ParentId="19746" CreationDate="2021-05-04T14:23:42.110" Score="70" Body="&lt;p&gt;DOOM itself doesn’t do anything special to benefit from PCI graphics cards. It runs faster with PCI graphics cards (and VLB, AGP, and PCI Express cards) than with ISA graphics cards because the supporting bus is faster, so reads from and writes to video memory take less time.&lt;/p&gt;&#xA;&lt;p&gt;PCI goes to great lengths to preserve backwards compatibility with ISA-based VGA, providing support for “VGA compatible” adapters so that they can appear in memory at the same locations and use the same I/O ports as ISA VGA cards. So accesses to the VGA registers and to the VGA buffer (at 0xA0000) go directly to the main PCI VGA compatible adapter in the system, with no change required in the operating system or programs running on it. (This is the reason why there’s a specific “VGA compatible controller” device type in PCI. Such shenanigans are impossible for other device types in PCI, which is why PCI sound cards have so much trouble providing compatibility with programs written for ISA sound cards.)&lt;/p&gt;&#xA;&lt;p&gt;A faster bus and/or faster video memory immediately leads to higher performance in video-intensive programs because software doesn’t need to be careful about how it accesses video memory (except on CGA, and on all platforms with vertical blank synchronisation if it cares about tearing). So &lt;code&gt;REP MOVSW&lt;/code&gt; or &lt;code&gt;REP MOVSD&lt;/code&gt; with no waiting in software, once the program decides to write a frame, is perfectly fine, and will go faster and faster as the underlying hardware improves. On platforms where this can’t work in hardware (&lt;em&gt;e.g.&lt;/em&gt; on an 8088 with a VGA card), the &lt;em&gt;hardware&lt;/em&gt; takes care of specifics — for example on an 8088 the bus unit will split up 16-bit accesses.&lt;/p&gt;&#xA;&lt;p&gt;Your question is specific to DOOM but other DOS games are in a similar situation. Later games tended to rely on VBE (often using UniVBE) to access video modes beyond those provided by VGA, but they mostly didn’t use anything beyond video-mode setup and framebuffer configuration (see also &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/12745/79&quot;&gt;Were any DOS games (or software) known to use VBE/AF?&lt;/a&gt;), so improved video speed came mostly from bus speed increases, faster video memory, and speed increases in the cards themselves (which was already a factor in the ISA era, compare most Trident cards to Tseng cards for example).&lt;/p&gt;&#xA;&lt;p&gt;For an excellent explanation of the intricacies of VGA programming and its memory layout, see &lt;a href=&quot;https://fabiensanglard.net/gebb/index.html&quot; rel=&quot;noreferrer&quot;&gt;Fabien Sanglard’s &lt;em&gt;Game Engine Black Book&lt;/em&gt; series&lt;/a&gt;. The DOOM update loop is shown on page 185 of the DOOM book; it doesn’t use any assembly language (unlike the renderer, see pp. 290 and following), but it does have one perhaps surprising feature given the 32-bit nature of the code: VGA updates are done 16 bits at a time. Section 2.3 of the same book, pp. 59 and following, describes some of the improvements to VGA adapters around the time DOOM was released, in particular the switch to the VESA Local Bus on 486s. The benchmark table on page 287 shows the importance of the bus.&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-05-06T06:41:21.510" LastActivityDate="2021-05-06T06:41:21.510" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19748" PostTypeId="2" ParentId="19746" CreationDate="2021-05-04T15:27:03.383" Score="29" Body="&lt;p&gt;&lt;em&gt;(When selecting an answer, use Stephen's - I just put this here because it is too much text for a comment)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Most Important:  It's a Game of Raw Numbers.&lt;/h3&gt;&#xA;&lt;p&gt;We can ignore more complicated stuff and simply go for bandwidth:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;ISA had at the time a bandwidth around 16 MiB/s (*2)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;VLB (*1) and PCI offered up to 133 MiB/s bandwidth.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A 320 x 200 screen needs 64 kB (lets say 64 KiB) (*3)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With 30 fps, which can be considered good (*4), that adds up to ~2 MiB/s&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;2 MiB/s is 17% of the raw ISA bandwidth&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;but it's only 2 % of VLB and PCI's bandwidth&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That is worlds for a game like DOOM, that did in the days shined due its many ways to make 3D run on barely able hardware. Often forgotten today, Doom not only reduced detail, but as well screen size. It offered 9 sizes, from 320x200 down to 96x48 (*5), and having a letterbox around the action was common, not the exception.&lt;/p&gt;&#xA;&lt;h3&gt;Performance One Can Feel&lt;/h3&gt;&#xA;&lt;p&gt;Gaining 14% additional CPU time to operate is nothing for an application, but huge on a resource strapped game. It's the difference of running DOOM in at least one screen mode up.&lt;/p&gt;&#xA;&lt;p&gt;And between an ISA system capable to use 320x200 and the same CPU setup with PCI of at least doubling the frame rate - that's from barely playable to lightning fast.&lt;/p&gt;&#xA;&lt;p&gt;Either effect is quite visible. All without changing anything within the game.&lt;/p&gt;&#xA;&lt;h3&gt;Downward Compatibility is the Name of the Game&lt;/h3&gt;&#xA;&lt;p&gt;PCI (and VLB) were made to have (existing) I/O hardware appear to the system like before. VLB a bit more than PCI, as PCI. In either case VGA memory and control was mapped at the same addresses than on ISA. A worthwhile effort as all software would benefit right away without any modification. It would need no knowledge about the changed bus system - the same way a 8086 software does not need to know if it's running on a Pentium.&lt;/p&gt;&#xA;&lt;p&gt;So it was downward compatibility of the new bus systems - made by its developers to be able to sell PCI systems. After all, who would buy an incompatible PC, one were the Flight Simulator doesn't work like on an 8088?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;From Comments:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But how is this managed &amp;quot;automagically&amp;quot;. How is this forward/upward compatibility implemented?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There is nothing magic. The VGA memory was with PCI available at the same real address as with ISA before: A0000h. No change in the (visible) HSI (*6), so no need to change the software.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Your [@StephenKitt's] improved answer implies to me that original VGA was designed with upward compatibility to a 32-bit system bus.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, if at all, the other way around. The newer busses were the same, except faster and wider. And both changes are invisible to software. From a software PoV there is no difference on how fast a CPU runs and/or if an access is done in bytes or words. That's all covered by the CPU hardware. The only measurable difference is speed. Something software will only 'feel' in performance (which is what your question is about), but not in operation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Also that faster busses are transparent because slower busses just introduce wait-states.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, there is no relation between software and bus (or CPU) speed. That is, no other than over all performance. Software does not need to be rewritten for different clocked CPU's, bus width or speeds. It will just show in what it can crank thru in course of time. In case of your PCI/ISA question, DOOM is simply able to transfer a frame in less time, thus either producing more frames in a given time (aka fps), or frames with a higher resolution (selected in the option screen). Either way: Better Gaming.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Lesser but Related: Pentium and VLB Sucked.&lt;/h3&gt;&#xA;&lt;p&gt;I do not remember the full parts, but AFAIR Pentium chipsets and the VLB protocol did not go well with each other resulting in a meagre performance, making a Pentium-VLB slower  than a 486-VLB, while Pentium-PCI did work well. This not only made VLB obsolete soon, but also added a lot of less than favourable DOOM results.&lt;/p&gt;&#xA;&lt;p&gt;Carmack and Romero, the DOOM guys, did BTW think that VLB was the way of the future to go and PCI just a strange side development by Intel, as one of them stated at the time.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Never forget VLB, it was the go to for gamer at the time)&lt;/p&gt;&#xA;&lt;p&gt;*2 - Well, ISA had no fixed defined bandwith, as it always depended on the system. Early PC managed 2 MiB/s, while original AT did 6 MiB, later AT 8 MiB. Bus clock was ties to CPU clock, so faster AT clones could apply 10..12 MHz, neting up to 12 MiB/s. Many I/O cards would comply. With later 386 passing 16 MHz CPU clock, Chipsets started to handle I/O clock as a integer, non binary fraction of CPU clock. Like 33 MHz Systems offering 6.66 MHz, 8.33, 11 or 16MHz. Again later almost arbitrary dividers were offered.&lt;/p&gt;&#xA;&lt;p&gt;At the time of DOOM, most ISA cards worked fine at 12 MHz or above. This already brought a huge speed advantage and higher frame rates, all without VLB/PCI.&lt;/p&gt;&#xA;&lt;p&gt;For the above calculation I use 16 MiB/s as it represents what a good ISA card could deliver when plugged into a state of the art 386/486 system. After all, while using 8 MiB/s might show an even higher speed up, I do not believe it be fair to compare the new PCI bus system with anything else than the top end of its predecessor.&lt;/p&gt;&#xA;&lt;p&gt;*3 - 320x200 is full screen and was almost never played. Highest regular mode was 320x168 with the well known status bar at the bottom of the screen.Saving these 32 lines brought already a noticeable difference in frame rate, even on high end systems.&lt;/p&gt;&#xA;&lt;p&gt;*4 - Looking back shows how much pampered we're today. Playing Doom at 20-30 fps was great.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Yes, way less than a Game Boy - not sure if anyone ever successfully played in that mode.&lt;/p&gt;&#xA;&lt;p&gt;*6 - Hardware Software Interface - a fancy name for addresses by software and their semantics.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-05-07T19:39:25.637" LastActivityDate="2021-05-07T19:39:25.637" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19749" PostTypeId="1" CreationDate="2021-05-01T23:29:10.130" Score="0" ViewCount="42" Body="&lt;p&gt;Around 1987, the investment bank I worked for had a high-end graphics device, possibly from Evans &amp;amp; Sutherland, which produced an &amp;quot;animated&amp;quot; display not unlike the view from the front seat of the first car of a roller coaster.  Here it was possible to &amp;quot;ride the graph&amp;quot; given a time series of stock prices of IBM or whatever.  As such, this device was used solely for demonstration.&lt;/p&gt;&#xA;&lt;p&gt;Would anyone know what device this could have been or if any pictures or videos exist of its output?&lt;/p&gt;&#xA;" OwnerUserId="21627" OwnerDisplayName="little wally" LastActivityDate="2021-05-04T16:39:48.647" Title="Was there an Evans &amp; Sutherland display system capable of rendering ordinary data as motion through a landscape?" Tags="&lt;video&gt;" AnswerCount="0" CommentCount="0" ClosedDate="2021-05-04T17:12:55.643" ContentLicense="CC BY-SA 4.0" />
  <row Id="19750" PostTypeId="1" AcceptedAnswerId="19752" CreationDate="2021-05-04T19:30:34.170" Score="6" ViewCount="273" Body="&lt;p&gt;I am trying to get a mental model of how the 6502 operates. I am going off this image:&#xA;&lt;img src=&quot;https://www.chessprogramming.org/images/c/c7/6502Chip.gif&quot; alt=&quot;this image&quot; /&gt;&#xA;However please suggest a better one if it helps understanding .&lt;/p&gt;&#xA;&lt;p&gt;On &lt;a href=&quot;http://www.atarihq.com/danb/files/64doc.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;this website&lt;/a&gt; it describes how a read instruction occurs.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    Read instructions (LDA, LDX, LDY, EOR, AND, ORA, ADC, SBC, CMP, BIT,&#xA;                        LAX, NOP)&#xA;&#xA;        #  address R/W description&#xA;       --- ------- --- ------------------------------------------&#xA;        1    PC     R  fetch opcode, increment PC&#xA;        2    PC     R  fetch low byte of address, increment PC&#xA;        3    PC     R  fetch high byte of address, increment PC&#xA;        4  address  R  read from effective address&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;My question is where do we store the low order byte after step 2 above? The obvious choice is the ABL however, would step 3 not overwrite this fetching the high byte of the address?&lt;/p&gt;&#xA;" OwnerUserId="21651" LastEditorUserId="14875" LastEditDate="2021-05-05T07:53:21.610" LastActivityDate="2021-05-05T07:53:21.610" Title="Where does the 6502 store the low order byte after fetching for read instructions?" Tags="&lt;6502&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19751" PostTypeId="2" ParentId="4992" CreationDate="2021-05-04T19:31:24.407" Score="0" Body="&lt;p&gt;First off, Commodore acquired MOS Technologies in 1975.... before the PET by a few years. Commodore had made licensing deals with Rockwell and Syntertek and others as second source licensees of their 6502 cpu which even in 1975 with Apple and the Apple I and upcoming and potentially popular Apple II (which we know became popular) was a way for Commodore to make revenue via licensing even then Commodore had their PET/CBM line in 1977 and at that moment, Commodore would make money from Apple and Atari sales so if they are successful, Commodore makes money via royalties. Even then, Commodore makes money from their own computer. Several computer manufacturers and consoles were using that instruction set. The idea was that MOS Technologies (later CSG) would be making money. Some of this outside revenue from royalties helps pays for Commodore on R&amp;amp;D. It would have been particular clear that MOS Technologies wouldn't be able to keep up with production demands of not only the popular Vic-20, Apple II models, Atari 8-bit computers and consoles, and others if they did not have licensees for manufacturing chips for these third-party computers as MOS/CSG parts that were manufactured directly by MOS/CSG would under priority go to Commodore to meet its production needs but second source manufacturers would be able to manufacture and sell the CPUs to third-party companies. So Commodore would make money off their products as well as their own. It was playing both ends of the game. Not all that different than what TI did back in the calculator days. Commodore bought MOS so they have an in-house chip production but they didn't just make chips for themselves. They made chips for others and even licensed the technology so they make money no matter what. Jack was a business man after all. It's all 'products' sold.&lt;/p&gt;&#xA;" OwnerUserId="21652" LastActivityDate="2021-05-04T19:31:24.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19752" PostTypeId="2" ParentId="19750" CreationDate="2021-05-04T19:50:40.053" Score="5" Body="&lt;p&gt;Have a look at &lt;a href=&quot;http://www.weihenstephan.org/%7Emichaste/pagetable/6502/6502.jpg&quot; rel=&quot;noreferrer&quot;&gt;this blockdiagram&lt;/a&gt;, it matches the real layout of the 6502 a lot better. Also, have a look at &lt;a href=&quot;http://visual6502.org/&quot; rel=&quot;noreferrer&quot;&gt;visual6502.org&lt;/a&gt;, you'll find more details about the chip to the tiniest detail, including a working simulator.&lt;/p&gt;&#xA;&lt;p&gt;To definitely answer your question, you can just run the instructions in the simulator, and I'd have to do it myself, but I'd suspect the &lt;em&gt;adder hold register&lt;/em&gt; (ADD) would hold the low byte address, as it can be directly output to ABL using the ADL bus.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2021-05-04T19:50:40.053" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19753" PostTypeId="1" CreationDate="2021-05-05T05:57:41.560" Score="8" ViewCount="283" Body="&lt;p&gt;What are the alternatives (with examples on how to implement) to Applesoft &lt;code&gt;RND(1)&lt;/code&gt; command?  I have read of people using a completely different algorithm by poking machine code stored in a DATA statement.  Yet zero working examples.  A simple dice probability example would be awesome.&lt;/p&gt;&#xA;&lt;p&gt;I did however read that Applesoft’s &lt;code&gt;RND&lt;/code&gt; starting point on a pseudo-list of numbers can be changed based on keyboard input timings.  Eg.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;X=RND(-1*(PEEK(78)+256*PEEK(79)))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This definitely helps &lt;code&gt;RND(1)&lt;/code&gt; become more random, yet &lt;code&gt;RND(1)&lt;/code&gt; seems to fall apart nonetheless after heavy use.&lt;/p&gt;&#xA;" OwnerUserId="21656" LastEditorUserId="15334" LastEditDate="2021-05-06T12:32:10.510" LastActivityDate="2021-05-09T22:58:37.687" Title="Applesoft (pseudo) Random Numbers - alternatives?" Tags="&lt;apple-ii&gt;&lt;applesoft-basic&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19754" PostTypeId="1" AcceptedAnswerId="19768" CreationDate="2021-05-05T08:16:28.603" Score="4" ViewCount="238" Body="&lt;p&gt;This is a homebrew Z80 computer, using Z80, 64K RAM, EEPROM as well as SIO/0.&lt;/p&gt;&#xA;&lt;p&gt;I am trying to run BASIC, however I need to set the workspace at 0xC000 or higher.&#xA;The code I am using is similar to &lt;a href=&quot;https://github.com/feilipu/NASCOM_BASIC_4.7/blob/master/rc2014_NascomBasic56k/bas56k.asm#L56&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/feilipu/NASCOM_BASIC_4.7/blob/master/rc2014_NascomBasic56k/bas56k.asm#L56&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I can increase Workspace location upto 0x9FFF, however as soon as I set it to 0xA000 or higher assemblers start complaining about various issues.&lt;/p&gt;&#xA;&lt;p&gt;vasm complains that it cannot find the last 5 variables (lines 112-116)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;error 3007: undefined symbol &amp;lt;STLOOK&amp;gt;&#xA;error 3007: undefined symbol &amp;lt;PROGST&amp;gt;&#xA;error 3007: undefined symbol &amp;lt;MULVAL&amp;gt;&#xA;error 3007: undefined symbol &amp;lt;PBUFF&amp;gt;&#xA;error 3007: undefined symbol &amp;lt;SGNRES&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;while TASM gives this error message&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;basic.asm line 0056: Forward reference in equate: (A000H)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;followed by lots of&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;basic.asm line 0153: Unused data in MS byte of argument. (2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;messages.&lt;/p&gt;&#xA;&lt;p&gt;What am I doing wrong here ? As if I am crossing a page boundary or something at 0xA000 but cannot figure out what the exact issue is. This is also completely independent of the address the basic code itself is running at.&lt;/p&gt;&#xA;&lt;p&gt;How can I move the workspace beyond 0xC000 ?&lt;/p&gt;&#xA;" OwnerUserId="21002" LastActivityDate="2021-05-06T14:38:18.023" Title="Cannot assemble BASIC with high memory workspace (Z80)" Tags="&lt;assembly&gt;&lt;z80&gt;&lt;basic&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19755" PostTypeId="1" AcceptedAnswerId="19761" CreationDate="2021-05-05T08:34:30.993" Score="5" ViewCount="657" Body="&lt;p&gt;The DEC Type 30 was an early vector graphics display, that was used for an astonishingly wide range of applications for the 1960s. It used a 16-inch circular CRT with high persistence phosphor originally designed for use as a radar screen, and the resolution (presumably determined by the DEC-built digital electronics) was 1024 x 1024.&lt;/p&gt;&#xA;&lt;p&gt;I've been trying to look up just how quickly it could refresh, and the figure I'm seeing is one operation every 50 microseconds, which seems straightforward enough, but &lt;a href=&quot;https://www.masswerk.at/nowgobang/2021/spacewar1&quot; rel=&quot;noreferrer&quot;&gt;https://www.masswerk.at/nowgobang/2021/spacewar1&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The PDP-1 is capable of displaying a maximum of 20,000 dots per second — assuming our program doesn’t anything other than issuing display command. Which gives us, with a reasonable frame rate for a flicker free display of, say, 18 fps, about 1,100 display instructions per frame, which is just good enough for a single line accross the display.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That didn't look quite right, so a bit of searching found what looks like an original manual, &lt;a href=&quot;http://www.computinghistory.org.uk/userdata/files/digital-precision-crt-display-type-30.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.computinghistory.org.uk/userdata/files/digital-precision-crt-display-type-30.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Discrete points may be plotted in any sequence at a 20 kilocycle rate (one point every 50 microseconds)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Okay, that does seem to confirm.&lt;/p&gt;&#xA;&lt;p&gt;... huh? In a vector display, the fundamental operation is not plotting a &lt;em&gt;point&lt;/em&gt; but drawing a &lt;em&gt;line&lt;/em&gt; between two points. That's useless if what you want to show is a photograph, but great for things like circuit diagrams, molecule diagrams and suchlike visibly geometric things that were representative of early graphical applications.&lt;/p&gt;&#xA;&lt;p&gt;If you can only do one point at a time, well it will still work in principle, but effective performance will drop by orders of magnitude, and you lose the ability to draw lines at angles that don't necessarily stick to the grid of points defined by the resolution.&lt;/p&gt;&#xA;&lt;p&gt;Did the Type 30 really only draw one point at a time? If so, why? Had a vector display just not been thought of yet, or was there some other reason it couldn't be done?&lt;/p&gt;&#xA;" OwnerUserId="4274" LastActivityDate="2021-05-05T16:28:12.120" Title="Performance characteristics of the DEC Type 30 graphical display" Tags="&lt;history&gt;&lt;graphics&gt;&lt;crt-monitor&gt;&lt;dec&gt;&lt;vector&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19756" PostTypeId="2" ParentId="19753" CreationDate="2021-05-05T08:36:52.617" Score="5" Body="&lt;p&gt;&lt;code&gt;RND&lt;/code&gt; in most 8-bit BASICs is a Linear Congruential PRNG, which has rather spectacularly poor quality output but is exceedingly simple to implement.  Generally it will produce a fixed, repeating sequence in which the low-order bits often have an easily recognisable pattern.  You cannot merely &amp;quot;fix&amp;quot; a Linear Congruential PRNG to improve the quality of its output, but must replace it with a better algorithm.&lt;/p&gt;&#xA;&lt;p&gt;One such algorithm might be &lt;a href=&quot;https://en.wikipedia.org/wiki/RC4&quot; rel=&quot;nofollow noreferrer&quot;&gt;RC4&lt;/a&gt;, which is also very simple.  Rather than keeping a single integer of state, as Linear Congruential does, RC4 keeps a 256-byte buffer of state plus two indexes into that buffer, for a total of 258 bytes of state.  The &lt;em&gt;maximum possible&lt;/em&gt; quality of a PRNG is closely related to the state it keeps.&lt;/p&gt;&#xA;&lt;p&gt;Applesoft BASIC is a very limited language compared to what I'm used to.  Here's how I'd do it in BBC BASIC - converting it to some other dialect is left as an exercise for the reader:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DIM RandBuf% 256&#xA;&#xA;DEF PROCrandSeed&#xA;LOCAL seed$,x%,t%&#xA;RandI% = 0&#xA;RandJ% = 0&#xA;FOR x% = 0 TO 255 : RandBuf%?x% = x% : NEXT&#xA;INPUT &amp;quot;Enter a seed string for the PRNG: &amp;quot;;seed$&#xA;FOR x% = 0 TO 256*LEN(seed$)-1&#xA;RandJ% = (RandJ% + RandBuf%?RandI% + ASC(MID$(seed$,1+(x% MOD LEN(seed$)),1))) MOD 256&#xA;t% = RandBuf%?RandI% : RandBuf%?RandI% = RandBuf%?RandJ% : RandBuf%?RandJ% = t%&#xA;RandI% = (RandI% + 1) MOD 256&#xA;NEXT&#xA;ENDPROC&#xA;&#xA;DEF FNrand%()&#xA;LOCAL t%,u%&#xA;RandI% = (RandI% + 1) MOD 256&#xA;RandJ% = (RandJ% + RandBuf%?RandI%) MOD 256&#xA;t% = RandBuf%?RandI% : u% = RandBuf%?RandJ%&#xA;RandBuf%?RandJ% = t% : RandBuf%?RandI% = u%&#xA;=RandBuf%?((u% + t%) MOD 256)&#xA;&#xA;DEF FNdice%()&#xA;LOCAL r%&#xA;REPEAT : r% = FNrand%() : UNTIL r% &amp;gt;= (256 MOD 6)&#xA;=(r% MOD 6) + 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2021-05-06T12:00:11.473" LastActivityDate="2021-05-06T12:00:11.473" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19757" PostTypeId="2" ParentId="19755" CreationDate="2021-05-05T10:39:43.153" Score="5" Body="&lt;p&gt;&lt;strong&gt;NOTE: This actually refers to the type 340, not the type 30, so it may be irrelevant!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Type 30 input commands worked in several different &amp;quot;modes&amp;quot;, including point mode, vector mode, and character mode (with an optional character generator).&lt;/p&gt;&#xA;&lt;p&gt;The actual display was always point-based, unlike the Tektronix 4011/4014 displays which drew straight line vectors using analog circuitry.&lt;/p&gt;&#xA;&lt;p&gt;The &amp;quot;internal clock increment&amp;quot; for rasterizing vectors to points was 1.5 microseconds.&lt;/p&gt;&#xA;&lt;p&gt;See &lt;a href=&quot;http://www.bitsavers.org/pdf/dec/graphics/H-340_Type_340_Precision_Incremental_CRT_System_Nov64.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.bitsavers.org/pdf/dec/graphics/H-340_Type_340_Precision_Incremental_CRT_System_Nov64.pdf&lt;/a&gt; for the full story.&lt;/p&gt;&#xA;" OwnerUserId="4256" LastEditorUserId="4256" LastEditDate="2021-05-05T10:49:30.287" LastActivityDate="2021-05-05T10:49:30.287" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19758" PostTypeId="2" ParentId="19755" CreationDate="2021-05-05T10:47:51.107" Score="7" Body="&lt;p&gt;The description of the Spacewar game gives some clues that the Type 30 was not able to display lines, but instead dots.&lt;/p&gt;&#xA;&lt;p&gt;Towards the end of the description, there is the listing how the spaceships were rendered, and even linear sections were given as repeated individual dots. With a true line-rendering capability, the engineers had surely used that instead of the single-pixel approach.&lt;/p&gt;&#xA;&lt;p&gt;And, from a technical point of view, producing a line on an X/Y display has a few quirks. To have short and long lines appear with the same intensity, you need to move the beam with constant speed, meaning that long lines take more time than short ones, which doesn't fit the documentation of an apparently fixed 50-microsecond cycle.&lt;/p&gt;&#xA;&lt;p&gt;And you need circuitry to do a linear interpolation between start and end point of the line. Around 1961, I bet that integrating a digital solution (based e.g. on Bresenham's algorithm) was no option - it was invented in 1962 at IBM, if Wikipedia is correct, and would need complex digital circuitry close to an ALU. So, it would have been based on analog processing, and apparently, the DEC engineers decided not to go that way.&lt;/p&gt;&#xA;" OwnerUserId="6565" LastActivityDate="2021-05-05T10:47:51.107" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19759" PostTypeId="2" ParentId="19753" CreationDate="2021-05-05T15:00:16.070" Score="7" Body="&lt;p&gt;I found &lt;a href=&quot;https://www.youtube.com/watch?v=zqcIXev_b2U&quot; rel=&quot;noreferrer&quot;&gt;an example&lt;/a&gt; that plotted on the hi-res screen to evaluate a replacement RNG. The code is based on a Call-A.P.P.L.E. article from 1989, &lt;a href=&quot;http://www.callapple.org/Members/magazine/1989/CallAppleMag%201989%20-%2004.pdf&quot; rel=&quot;noreferrer&quot;&gt;available here&lt;/a&gt;. It appears to be a linear congruential algorithm, but the youtube video shows it's pretty effective.&lt;/p&gt;&#xA;&lt;p&gt;The author tied it to the Applesoft &lt;code&gt;USR&lt;/code&gt; function, which makes it very convenient to use.  (It actually requests a buffer from ProDOS and relocates itself using a relocation dictionary, which is sort of interesting.  You could probably strip a lot of that out if you want it to live in a fixed location.)&lt;/p&gt;&#xA;&lt;p&gt;FWIW, using &lt;code&gt;PEEK&lt;/code&gt; 78/79 only helps if you occasionally use the ROM character input routine, which increments those locations while it waits. Starship Commander tries to seed the RNG that way, but since it uses its own input routines, it ends up configuring the seed to the same value if you boot directly into the game at power-on.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2021-05-05T15:00:16.070" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19760" PostTypeId="1" CreationDate="2021-05-05T15:35:27.830" Score="5" ViewCount="166" Body="&lt;p&gt;I've got a SCSI2SD V5.2 board connected to the internal 50-pin SCSI connection of a Mac SE/30. The Mac cannot &amp;quot;see&amp;quot; it, in any configuration I've attempted. I have tried:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Using the stock system 7.0 Apple HD SC Setup, and setting the config variables as (&lt;a href=&quot;https://ryancollins.org/2016/02/08/scsi2sd-with-my-macintosh-se-30/&quot; rel=&quot;nofollow noreferrer&quot;&gt;found here&lt;/a&gt;):&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Set the vendor to the string ” SEAGATE” (yes, there is a single space&#xA;in front of SEAGATE for a total of 8 characters) Set the product ID to&#xA;the string ” ST225N” (10 spaces in front for a total of 16 characters)&#xA;Set the revision to the string “1.0 ” (with a space after, for a total&#xA;of 4 characters)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Using the &amp;quot;patched&amp;quot; 7.5.3 Apple HD SC Setup on a boot floppy, with the SCSI parameters as above, or as stock.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Imaging a full drive onto the SD card using &lt;code&gt;dd&lt;/code&gt; on my Mac, from the image as &lt;a href=&quot;https://www.savagetaylor.com/2018/01/05/setting-up-your-vintage-classic-68k-macintosh-using-a-scsi2sd-adapter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;downloaded from here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In no configuration does the Mac see the drive. It won't boot from it, it won't mount it when already booted, and no version of HD SC Setup can find it (always says &amp;quot;no suitable drive can be found...&amp;quot; etc). My voltmeter shows the +5V and +12V rails at the SCSI2HD power connector solder points, so it's certainly getting power OK.&lt;/p&gt;&#xA;&lt;p&gt;This machine is otherwise working and notably, the original internal SCSI hard drive works correctly when it is connected.&lt;/p&gt;&#xA;&lt;p&gt;Comments below have suggested that further fussing around with it may bear success. But at this point I'm literally not sure what other fussing I am even able to try. Happy for any thoughts. Thanks.&lt;/p&gt;&#xA;" OwnerUserId="21662" LastEditorUserId="21662" LastEditDate="2021-05-11T15:01:40.957" LastActivityDate="2021-05-11T15:01:40.957" Title="Cannot &quot;see&quot; a SCSI2SD device from a Mac SE/30 in any configuration" Tags="&lt;mac-os-classic&gt;&lt;scsi&gt;&lt;scsi2sd&gt;&lt;compact-mac&gt;" AnswerCount="1" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19761" PostTypeId="2" ParentId="19755" CreationDate="2021-05-05T16:28:12.120" Score="14" Body="&lt;p&gt;This might just be stating the obvious, but &lt;a href=&quot;http://www.computinghistory.org.uk/userdata/files/digital-precision-crt-display-type-30.pdf&quot; rel=&quot;noreferrer&quot;&gt;Type 30 manual&lt;/a&gt; linked in the question describes the device as a &lt;strong&gt;random-position point-plotting cathode ray tube&lt;/strong&gt;.  Nowhere does the manual suggest it's a vector graphics display.&lt;/p&gt;&#xA;&lt;p&gt;It then further describes how the computer supplies the X,Y coordinates of a single point to be plotted.   There is no facility to plot a line.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-05-05T16:28:12.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19762" PostTypeId="2" ParentId="12783" CreationDate="2021-05-05T17:03:10.110" Score="2" Body="&lt;p&gt;Just my 2 cents on this. The Spectrum tapes you are looking at use Frequency Modulation (FM) instead of Amplitude Modulation (AM). This makes them incredibly resilient to amplitude noise, such as you are showing a lot of.&#xA;So, the actual data values are not encoded by the amplitude of the signal, rather the frequency of it.&lt;/p&gt;&#xA;&lt;p&gt;I assume that you'd need a frequency demodulator, either software or hardware.&lt;/p&gt;&#xA;&lt;p&gt;But that's only half of your problem. The other half is that I assume that whatever data you have on there needs to run on a spectrum emulator, so you need to piece it back together correctly. Simply capturing the signal won't work, so I'd look for an emulator that has the ability to load from audio files, then save a snapshot of the memory right after loading.&lt;/p&gt;&#xA;&lt;p&gt;I listened to some of the tapes you attached, and for the fun of it, I manually decoded the first header of the GORR11_A_SDII_B_TLL, it looks something like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;01010011 S&#xA;01010010 R&#xA;01001001 I&#xA;01001001 I&#xA;00100000 space&#xA;00100000 space&#xA;00100000 space&#xA;00100000 space&#xA;00100000 space&#xA;00100000 space&#xA;-&amp;gt; Title seems to be SRII&#xA;&#xA;10100100 164 &#xA;00000010 2&#xA;-&amp;gt; 676 bytes&#xA;&#xA;00000000&#xA;00000000&#xA;-&amp;gt; to load at 0?&#xA;&#xA;10100100&#xA;00000010&#xA;00000001&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21663" LastActivityDate="2021-05-05T17:03:10.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19763" PostTypeId="2" ParentId="12783" CreationDate="2021-05-05T19:46:40.010" Score="4" Body="&lt;p&gt;A possible tool is &lt;a href=&quot;https://github.com/eightbitjim/cassette-nibbler&quot; rel=&quot;nofollow noreferrer&quot;&gt;eightbitjim/cassette-nibbler: Data recovery from 8-bit computer cassette tapes (Commodore 64, Vic 20, ZX Spectrum, etc)&lt;/a&gt;. I'm not sure how well it reads nonstandard loaders, but in listing mode  (&lt;code&gt;-destination=listing&lt;/code&gt;) it gave me this for the GORR34 tape converted to wav:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;java -jar ../cassette-nibbler-0.1.jar -destination=listing ../GORR34_Firetrap_Carlos_Sainz.wav &#xA;--------------------------------------------------------------------------------&#xA;cassette-nibbler v0.1&#xA;--------------------------------------------------------------------------------&#xA;Allow incorrect frame checksums : ON&#xA;Allow incorrect file checksums  : ON&#xA;Attempt to recover partial files: ON&#xA;Platforms enabled: commodore commodore16+4 c64-turbotape acorn300 acorn1200 spectrum oric1 oricatmos msx2400 msx1200 trs80 dragon32 apple2 amstrad atari &#xA;../GORR34_Firetrap_Carlos_Sainz.wav--------------------------------------------&#xA;[#############################################################################]&#xA;(15) headless.data length 1796&#xA;0 FIRETRAP 1.bytes.4b3104c.ERR.zxspectrum.bin: 25190 bytes &#xA;1 DR. BREE.program.5ac6307a.zxspectrum.bin: 1028 bytes &#xA;2 D_BREED1.bytes.c1cbb19d.zxspectrum.bin: 2872 bytes &#xA;3 LORNA.1.bytes.527e6822.zxspectrum.bin: 3663 bytes &#xA;4 LORNA.2.incomplete.bytes.6c060aeb.ERR.zxspectrum.bin: 1 bytes &#xA;5 CARLOS.program.b12f74ba.zxspectrum.bin: 527 bytes &#xA;6 CARLOS.1.bytes.450493bd.zxspectrum.bin: 4217 bytes &#xA;7 CARLOS.3.bytes.33b07286.zxspectrum.bin: 887 bytes &#xA;8 INDY.program.d828517a.zxspectrum.bin: 255 bytes &#xA;9 lucas.bytes.6728795d.zxspectrum.bin: 5120 bytes &#xA;10 loader.bytes.d1d4554e.zxspectrum.bin: 256 bytes &#xA;11 headlessFile95.incomplete.unknown.279f866f.ERR.zxspectrum.bin: 17421 bytes &#xA;12 headlessFile114.incomplete.unknown.348fe7c0.ERR.zxspectrum.bin: 5039 bytes &#xA;Processed 58 minutes 0 seconds (57.0x realtime)--------------------------------&#xA;[#############################################################################]&#xA;(15) headless.data length 1796&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;FIRETRAP seems to be a cracked copy of R-Type 2, from the loader information dumped by cassette-nibbler. By running the program with no special options then converting the &lt;code&gt;CARLOS*&lt;/code&gt; TAP files to wav, joining them, then running the whole mess through &lt;code&gt;fuse&lt;/code&gt;, I at least got a loading screen:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/pXEDa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pXEDa.png&quot; alt=&quot;Carlos Sainz loading screen, via cassette-nibbler&quot; /&gt;&lt;/a&gt;&#xA;With some more intelligent use than mine, I'm sure you could recover something.&lt;/p&gt;&#xA;&lt;p&gt;Alternatively there's &lt;code&gt;audio2tape&lt;/code&gt; from fuse-utils. It's &lt;em&gt;very&lt;/em&gt; slow, and didn't do as good a job.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2021-05-05T19:46:40.010" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19764" PostTypeId="1" CreationDate="2021-05-05T19:53:30.260" Score="4" ViewCount="1302" Body="&lt;p&gt;First of all, I know very well that modern TVs are neither made for, nor good at, displaying old video game consoles' video signals. With that said, I'm trying to test the controllers of an N64 where I've just put new analogue sticks into its controllers, so I need to see some kind of video to check if they work correctly. I currently have no CRT TV here.&lt;/p&gt;&#xA;&lt;p&gt;But there is no video. I only hear audio.&lt;/p&gt;&#xA;&lt;p&gt;The TV has no SCART connector, so I had to unplug the N64's output cable's yellow, white and red cables from the SCART connector which they are normally connected to and then plug those cables into the TV's connectors on the back side individually. But it just says &amp;quot;invalid signal&amp;quot; or something along those lines. I think it's expecting/supporting only &amp;quot;component&amp;quot; cables, but these are the most basic cables... &amp;quot;composite video&amp;quot;, I think it's called.&lt;/p&gt;&#xA;&lt;p&gt;So is that it? I just cannot technically display the video output of a N64 on this modern TV? I'd have to buy some converter hardware or something just for this?&lt;/p&gt;&#xA;&lt;p&gt;I did try to look in all kinds of settings on the TV but found no &amp;quot;pretend the component video connector is a composite one mode&amp;quot; or similar. But it seems strange to me that it would not support this, even if poorly.&lt;/p&gt;&#xA;&lt;p&gt;Is there a way which I'm missing?&lt;/p&gt;&#xA;&lt;p&gt;For your convenience, this is the product webpage with specs: &lt;a href=&quot;https://www.lg.com/uk/tvs/lg-43UK6200PLA&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.lg.com/uk/tvs/lg-43UK6200PLA&lt;/a&gt;&#xA;And here is a direct link to a photo of its back side: &lt;a href=&quot;https://www.lg.com/uk/images/tvs/MD06014117/gallery/large05.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.lg.com/uk/images/tvs/MD06014117/gallery/large05.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I don't think I've ever had any kind of hardware in my life which actually had &amp;quot;component&amp;quot; cables.&lt;/p&gt;&#xA;" OwnerUserId="21665" LastEditorUserId="15334" LastEditDate="2021-05-07T12:34:06.920" LastActivityDate="2021-05-07T13:01:31.443" Title="Is an LG 43UK6200PLA television set supposed to be able to display video output from a Nintendo 64?" Tags="&lt;nintendo-64&gt;&lt;new-hardware-adaptation&gt;&lt;composite-video&gt;&lt;television&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19765" PostTypeId="2" ParentId="19764" CreationDate="2021-05-05T20:29:32.850" Score="2" Body="&lt;p&gt;My previous TV had 1 combo component/composite input (basically, if you wanted composite (RCA, the yellow/white/red), you'd plug in white and red to white and red and yellow (video) went into the green/yellow plug; for composite, you'd do red/white audio and red/green/blue video.  My newest TV is like the one you show, e.g. component only.  So, AFAIK, yes, if you want to hook up a composite only input to your TV, you will need an adapter.  I don't know about the N-64, but my PS-2 did support an alternate cable that did component out (and there was at least one baseball game that would support hitting a special code to switch to higher resolution to take advantage of)&lt;/p&gt;&#xA;&lt;p&gt;(Edit: not a recommendation, but &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B07VB8HD8X&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/Nintendo64-Converter-Cable-Restore-Screen/dp/B07VB8HD8X/&lt;/a&gt; would seem to meet your needs (and skip the whole composite/component issue unless you have too many other things that also want HDMI)&lt;/p&gt;&#xA;" OwnerUserId="11797" LastActivityDate="2021-05-05T20:29:32.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19766" PostTypeId="2" ParentId="19764" CreationDate="2021-05-05T21:52:09.000" Score="8" Body="&lt;p&gt;The spec you posted says the TV has composite in (i.e., your yellow connector from the Nintendo).&lt;/p&gt;&#xA;&lt;p&gt;The manual at that web site shows composite video going to the leftmost phono socket, labelled Video/Y.  That is, one socket does double-duty for component and composite.&lt;/p&gt;&#xA;&lt;p&gt;The relevant part of the diagram is here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RfoZV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RfoZV.png&quot; alt=&quot;AV connections&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;As to whether it'll work with your Nintendo, user Logarr has said:&lt;/p&gt;&#xA;&lt;p&gt;Any display device that accepts composite video, whether through a double duty green component video port or a dedicated yellow composite port will support the N64. The range of resolutions supported by those ports is an established standard, and the N64 falls within that range.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-05-07T13:01:31.443" LastActivityDate="2021-05-07T13:01:31.443" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19767" PostTypeId="2" ParentId="19764" CreationDate="2021-05-06T09:22:10.023" Score="6" Body="&lt;p&gt;&lt;a href=&quot;http://kr.eguide.lgappstv.com/manual/w18_mr/dvb/Apps/w4.0_mr_e04/e_eng/etc.html?iFrameLink=../../../Contents/etc/resolutioncomponent_e_c_a_t/eng/w40__etc__resolutioncomponent_e_c_a_t__eng.html&quot; rel=&quot;noreferrer&quot;&gt;The manual&lt;/a&gt; for the TV only lists 480i/p and higher resolutions as explicitly supported over component (which likely translates to support over composite as well). Most Nintendo 64 games ran at 240p, and as such might not be compatible with your TV.&lt;/p&gt;&#xA;&lt;p&gt;You will likely need to use a separate upscaler to bring the signal to one of the supported resolutions. Those can be had for &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B081JVRJZR&quot; rel=&quot;noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;relatively cheap&lt;/a&gt;, although beware of simple HDMI &amp;quot;converters&amp;quot; which may end up just outputting 240p over HDMI.&lt;/p&gt;&#xA;" OwnerUserId="7840" LastActivityDate="2021-05-06T09:22:10.023" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19768" PostTypeId="2" ParentId="19754" CreationDate="2021-05-06T10:24:55.347" Score="11" Body="&lt;p&gt;Without reading the manuals it seems that both vasm and tasm decides if an operand is a number or a label is decided from the first character. A number MUST start with a digit in the decimal range, anything starting with a letter is considered a label. So you need to enter the number as '0A000H'.&lt;/p&gt;&#xA;&lt;p&gt;So, when tasm finds an argument &lt;code&gt;A000H&lt;/code&gt; it thinks it a label that is not defined and gives the error &amp;quot;Forward reference in equate:&amp;quot;&#xA;Tasm is apparently a one pass assembler, so it just guesses it is a label that is defined later in the program.&lt;/p&gt;&#xA;&lt;p&gt;The errors from vasm is not that clear to me, but my guess is that when vasm is unraveling the argument in:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FPEXP   .EQU    FPREG+3 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;it loses track of where it is and apparently thinks the following lines are part of the expression in the argument. To explain why you need to examine how vasm is handling arguments and how it saves the values of the labels during parsing.&lt;/p&gt;&#xA;&lt;p&gt;(A tip, if you get strange errors that aren't logical from a line or several lines in a row, the real error can often be found in the line before.This goes for most assemblers and compilers.)&lt;/p&gt;&#xA;" OwnerUserId="10565" LastEditorUserId="3316" LastEditDate="2021-05-06T13:06:41.203" LastActivityDate="2021-05-06T13:06:41.203" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19769" PostTypeId="2" ParentId="19754" CreationDate="2021-05-06T13:08:00.563" Score="4" Body="&lt;p&gt;&lt;em&gt;[Uncle Bod's answer nails it. Vote for him. This is more of a background add on.]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The underlying issue is a hodgepodge of language and number mixup, further complicated by using a different notation when thinking about the problem (writing the question) as the one used within the code written.&lt;/p&gt;&#xA;&lt;p&gt;In the question the OP asks about &lt;code&gt;0x9FFF&lt;/code&gt; vs. &lt;code&gt;0xA000&lt;/code&gt;, which is a specific way to note hex numbers in the C language. But the question is about Assembler, more specific an Intel-ish Z80 Assembler. Changing number systems between the work to be done and writing about is a real bad idea. It's kind of a programmers Engrish, like writing English using Kana. Sometimes dubious in a human environment, outright problematic when it's about the exact spelling a compiler wants.&lt;/p&gt;&#xA;&lt;p&gt;Each language/compiler has it's own notation, where&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;C wants &lt;code&gt;0xnnnn&lt;/code&gt;,&lt;/li&gt;&#xA;&lt;li&gt;Intel(ish) Assemblers want &lt;code&gt;0nnnnH&lt;/code&gt;,&lt;/li&gt;&#xA;&lt;li&gt;Motorola(ish) Assemblers like to see &lt;code&gt;$nnnn&lt;/code&gt;, while&lt;/li&gt;&#xA;&lt;li&gt;IBM mainframes want a dedicated &lt;code&gt;X'nnnn'&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Some BASICs want &lt;code&gt;&amp;amp;nnnn&lt;/code&gt; or &lt;code&gt;&amp;amp;Hnnnn&lt;/code&gt; and&lt;/li&gt;&#xA;&lt;li&gt;Super variable languages like Ada or VHDL use radix based notations&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Plus many more&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Seasoned readers may have noticed that I (try to) use hex notation the way the topic requires, not the way I prefer. When talking, well writing, about a language, it's important to use the notation inherent to that language. Using some other may in the best case has no effect, but, like shown here, may as well hide the issue one is looking for.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;On a historical note Intel's &lt;code&gt;0nnnnH&lt;/code&gt; notation stems out of the same syntactical requirement as 0xnnnn for C. by having all numeric constants start with a decimal digit, the parser can quite easy distinguish between the next item found being a number or a name (label) - as labels are not allowed to start with a decimal digit.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Long story short: Assembler isn't just a more primitive version of C, but a different language. Like with every language it helps to &lt;strong&gt;not skip&lt;/strong&gt; the first few pages of the manual, the ones where notation and basic syntax are explained.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-05-06T14:38:18.023" LastActivityDate="2021-05-06T14:38:18.023" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19770" PostTypeId="1" CreationDate="2021-05-06T13:37:08.913" Score="32" ViewCount="3128" Body="&lt;p&gt;Is there a particular reason RS-232 uses 12V signals (well, sort of) rather than some (any?) other value?&lt;/p&gt;&#xA;&lt;p&gt;It was formally defined in 1960, so that places it before the era of any standardized ICs like RTL that would have suggested lower voltages. PMOS did use 12V, but that was a decade later and I suspect it's more likely they selected 12V because RS-232 existed rather than the other way around.&lt;/p&gt;&#xA;&lt;p&gt;There may be minor reasons for this, for instance, there were lots of 12V power supplies available due to it being a common battery voltage, and one might use a car battery as a line conditioner for instance. But that seems unlikely.&lt;/p&gt;&#xA;&lt;p&gt;The idea that later versions sometimes drove the signals at 5V instead of 12 suggests there is a strong reason to match the internal voltages to the interface. So this leads to the possibility that the earlier tube-based computers, or at least the transistorized machines, used 12V. But looking over examples of 2nd generation machines I don't see an obvious signal to that effect.&lt;/p&gt;&#xA;&lt;p&gt;So why 12V and not, say 5, or 6, or 24?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2021-05-09T09:12:08.583" Title="Why was RS-232 12V?" Tags="&lt;rs232&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19771" PostTypeId="2" ParentId="19770" CreationDate="2021-05-06T14:25:22.230" Score="40" Body="&lt;p&gt;There are maybe a few points left out here.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RS-232 was first recommended in 1960.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That's long before there were low-voltage devices. In fact, it was originally designed to work with electro-mechanical, not electronic devices, like TTY.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RS-232 uses directed voltages.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So it's not simply 0V and 12V but +12V and -12V. Quite useful to work with coils.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It does not specify ±12V.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;RS-232 does not specify ±12V, but defines ±3..15V as operating range and forbids any voltages below 3V and above 25V&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It's a voltage based interface, so more is better.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Unlike a current loop, where the burden of handling loss through resistance is handled by the sender (within reason). A current supplied in a current based interface will always reach  the receiver at the same level. Voltage supplied in a voltage based interface gets diminished by distance. ​This is simply as line length is directly proportional with voltage drop. The higher the supplied voltage is (within reason), the higher the chance the voltage at the receivers end is still above the minimum threshold.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The receiver end may be a solenoid.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Yes, it needs to be repeated, as it's the reason why voltage drop can not be ignored. This interface was supposed to work with electro-mechanical devices, one where coils are used. In an amplifier-based detector circuit, the resistance of the detector can be made rather high, shifting voltage loss toward the detector. with a coil this is not possible the same way, so the mentioned line losses are a major concern.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;12V is a convenient value within the 3..15V range&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;12V goes on the high side of what's allowed, leaving much room to drop over the line, while at the same time leaving some room for tolerances toward higher voltages. After all, making a good and stable supply in 1960 was a much higher effort than today.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; It's a nice ballpark value serving multiple requirements.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The 'strong' reason to use 5V in later (and local) setup simply to save cost. Why add the need for a 12V PSU when short distance, like to a printer, works quite fine at 5V as well? Even more so as modern circuitry can deliver a good high impedance, so cable losses are no longer an issue.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-05-09T09:12:08.583" LastActivityDate="2021-05-09T09:12:08.583" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="19772" PostTypeId="1" CreationDate="2021-05-06T20:23:22.910" Score="5" ViewCount="174" Body="&lt;p&gt;I have a Commodore PET 4016 like the one described &lt;a href=&quot;http://www.myoldcomputers.com/museum/comp/commodore_pet_4016.htm&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; but did not grow up with any Commodore computers and I am still learning where it fits in their line-up and even how to use it.&lt;/p&gt;&#xA;&lt;p&gt;After buying a &lt;a href=&quot;https://github.com/bitfixer/petdisk-max&quot; rel=&quot;noreferrer&quot;&gt;PETdisk MAX&lt;/a&gt; and replacing one of my board's GPIB driver chips, I now suddenly have access to a variety of PET software from various mirrors/archives. Some works and some doesn't.&lt;/p&gt;&#xA;&lt;p&gt;One thing I've noticed with a few of the games is that their instructions have the case swapped, e.g.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;iNSTRUCTIONS&lt;/p&gt;&#xA;&lt;p&gt;a GAME CALLED dUANE sUDOKU WOULD HAVE BEEN A GREAT GAME FOR THE cOMMODORE pet&#xA;BUT i DON'T THINK ENOUGH PROGRAMMERS NAMED dUANE KNEW ABOUT sUDOKU BACK THEN.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Apparently Commodore for various reasons had various character mappings across their various models and so this is not particularly surprising. In a &lt;a href=&quot;https://www.pagetable.com/?p=857#comment-690529&quot; rel=&quot;noreferrer&quot;&gt;comment&lt;/a&gt; on &lt;a href=&quot;https://www.pagetable.com/?p=857&quot; rel=&quot;noreferrer&quot;&gt;Why does PETSCII have upper case and lower case reversed?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So if you create a program that displays mixed-case text correctly on all Commodore 8-bit computers from the second version of the PET (3000 series) onward, it will display with upper- and lower-case reversed on the original PET 2001&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But afaict my 4016 model would be more like the &amp;quot;3000 series onward&amp;quot; rather than the first run of PET 2001 models. It certainly has both upper and lower case. (And if the PET 2001 didn't have lower-case glyphs than how would it exhibit the behavior claimed anyway??)&lt;/p&gt;&#xA;&lt;p&gt;I tried to &lt;code&gt;POKE 59468,14&lt;/code&gt; before running the game. It did swap my typing (&lt;code&gt;run&lt;/code&gt; instead of &lt;code&gt;RUN&lt;/code&gt;) and it made the initial title screen all-lowercase but then the instructions screen still rendered tHE sAME wAY as before.&lt;/p&gt;&#xA;&lt;p&gt;Did PET users just sort of live with this kind of thing? Or was there a common trick to &amp;quot;fix&amp;quot; code like this for one's particular model that people just knew to do when they got a copy of a new piece of software?&lt;/p&gt;&#xA;" OwnerUserId="13904" LastActivityDate="2021-05-06T22:26:15.460" Title="Were there any standard tricks to fix PET upper/lower case differences?" Tags="&lt;commodore-pet&gt;&lt;character-sets&gt;&lt;petscii&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19773" PostTypeId="1" AcceptedAnswerId="19776" CreationDate="2021-05-06T20:39:51.030" Score="7" ViewCount="155" Body="&lt;p&gt;As mentioned on my &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/19772/were-there-any-standard-tricks-to-fix-pet-upper-lower-case-differences&quot;&gt;Were there any standard tricks to fix PET upper/lower case differences?&lt;/a&gt; question, I'm trying to figure out what to expect when running software generically labelled as &amp;quot;PET&amp;quot; on my Model 4016.&lt;/p&gt;&#xA;&lt;p&gt;A disk of games I found included some space-themed target practice game. The instructions were kind of vague and just said something like &amp;quot;use the numberpad like normal&amp;quot; but when I went to play it didn't not work as expected. Instead of like &lt;kbd&gt;8&lt;/kbd&gt; being up, &lt;kbd&gt;4&lt;/kbd&gt; being left, etc. I found through experimentation that it was something more like &lt;kbd&gt;*&lt;/kbd&gt; went left, &lt;kbd&gt;2&lt;/kbd&gt; went up, some letter like &lt;kbd&gt;S&lt;/kbd&gt; (!) made it go right, and I never found a key to make it go down! [I probably have the specifics wrong and could test again this evening if the details are important.]&lt;/p&gt;&#xA;&lt;p&gt;Were there lower-level scancodes available, that some games relied on, which would explain this behavior? Like on my other question about upper/lowercase, was there a sort of standard expectation that users would patch up software if this was an unavoidable compatibility difference between models? Or is it more likely the code just got corrupted somewhere between the 1980s and me &lt;code&gt;LOAD&lt;/code&gt;ing it?&lt;/p&gt;&#xA;&lt;p&gt;(Possibly related to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/12466/what-were-commodores-keyboard-layouts-before-the-vic-20&quot;&gt;What were Commodore&amp;#39;s keyboard layouts before the VIC-20?&lt;/a&gt; but that doesn't go much into the software side of things.)&lt;/p&gt;&#xA;" OwnerUserId="13904" LastActivityDate="2021-05-07T16:19:42.830" Title="Did the keyboard &quot;scancodes&quot; available to Commodore PET software differ between models?" Tags="&lt;keyboards&gt;&lt;commodore-pet&gt;&lt;input-devices&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19776" PostTypeId="2" ParentId="19773" CreationDate="2021-05-07T16:19:42.830" Score="7" Body="&lt;p&gt;The PET keyboards did have something akin to scan codes.  Electrically, the keys were arranged in a matrix of rows and columns, and scanning the keyboard involved selecting each row in sequence (via one of the PIA chips), then reading the column values to see which (if any) keys in that row were pressed.  Since there were two keyboard layouts (the 'graphics' keyboard and the 'business' keyboard) it is entirely reasonable to suppose that the game you're running was intended to be used with a different keyboard that had a different row/column layout.&lt;/p&gt;&#xA;" OwnerUserId="70" LastActivityDate="2021-05-07T16:19:42.830" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19777" PostTypeId="2" ParentId="19770" CreationDate="2021-05-07T18:24:20.143" Score="9" Body="&lt;p&gt;The question is posed with the assumption that RS-232 was always ±12V.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, the short answer is, it was not always ±12V.&lt;/p&gt;&#xA;&lt;p&gt;The specification requires that an RS-232 driver outputs a minimum of ±5V and maximum of ±15V when connected with the specified load of one RS-232 receiver. The output is allowed to have up to ±25V when no receiver is connected. The specified receiver load is also within the range of 3k to 7k ohms, so very little current is needed. The receiver must operate properly with ±3V signals to allow for noise margin, voltage drop in wires, and ground voltage difference, and the receiver must not be damaged from ±25V signals being applied.&lt;/p&gt;&#xA;&lt;p&gt;This allows the RS-232 driver to operate with a wide range of voltages and implemented in any way that simply is within all the electrical parameters listed in the specification. Back in the 1960s when the standard was first written, the interface could have been implemented in various different ways using discrete components, instead of integrated circuits.&lt;/p&gt;&#xA;&lt;p&gt;I suspect the misconception that it was only ±12V may come from the fact that many common devices that most people are familiar with like the IBM PC in the 80s and compatible successors did have ±12V supply voltages available, which were directly used for RS-232 transceivers when they required separate supplies.&lt;/p&gt;&#xA;&lt;p&gt;Many devices simply used whatever supplies they happened to have available, like the TI/99 PHP1700 RS-232 Sidecar Interface used ±8V, so it definitely was not ±12V.&lt;/p&gt;&#xA;&lt;p&gt;Later on when technology advanced and laptops and desktop motherboards started to get RS-232 ports integrated to motherboard, at some point they started to use charge-pump based RS-232 transceivers, which worked with single 5V or 3.3V supply as they generated the driver voltages internally. The charge pump based devices also did not use ±12V, perhaps something between ±7V and ±9V. The details are in the respective datasheets such as MAX202, MAX232, MAX3232 etc, or compatible clones from other manufacturers.&lt;/p&gt;&#xA;&lt;p&gt;The RS-232 standard also specifically mentions that the RS-232 interface inputs must not be inductive, so the interface signals may not be directly used for driving electromechanical coils like relays or solenoids, and as per the specification, not much power can be drawn from a driver for driving loads anyway.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="7946" LastEditDate="2021-05-09T09:08:51.513" LastActivityDate="2021-05-09T09:08:51.513" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19778" PostTypeId="2" ParentId="19746" CreationDate="2021-05-07T21:02:11.833" Score="2" Body="&lt;p&gt;I can't recall the technical specifics after all this time, but I do remember that my ISA SVGA card (Trident 8900-based) would default to 8-bit bus traffic and 8-bit video-BIOS access. Getting both to 16-bit took quite some BIOS, TSR, and boot-time utility twiddling.&lt;/p&gt;&#xA;&lt;p&gt;Games were noticeably faster in fully 16-bit mode!&lt;/p&gt;&#xA;&lt;p&gt;So &lt;strong&gt;I doubt many ISA cards were actually running at their full ISA capability&lt;/strong&gt;, which would exaggerate the perceived performance boost seen with PCI/VL-bus cards.&lt;/p&gt;&#xA;&lt;p&gt;(N.B. I intended this as a comment, but the site upgraded it to an answer whilst I was signing in!)&lt;/p&gt;&#xA;&lt;p&gt;Edit: ... and of course then there was the separate palaver of trying to get the video ROM shadowed by the system RAM. Basically, there was a lot of tweaking by the user needed, which in turn made it near-impossible for the coders to know precisely what to expect.&lt;/p&gt;&#xA;&lt;p&gt;The temptation is to assume people would use the extra bandwidth to push more pixels around, i.e. to move from MCGA to a &amp;quot;hi-res&amp;quot; SVGA (640x480x256) mode; but remember that &lt;em&gt;there was no standard API for that until VBE took off&lt;/em&gt; - see the linked question - and by that time 3-d accelerators were on the horizon.&lt;/p&gt;&#xA;&lt;p&gt;So for the OP's question: DOOM (on MS-DOS) wouldn't behave differently depending on the data bus; it would assume an IBM VGA card. Meanwhile, ISA cards were partly nobbled by backwards-compatibility issues: my old card was expected to be fully-functional even in an XT, whereas a PCI card knows it's in a 486 or better.&lt;/p&gt;&#xA;" OwnerUserId="18757" LastEditorUserId="18757" LastEditDate="2021-05-08T11:50:23.303" LastActivityDate="2021-05-08T11:50:23.303" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19779" PostTypeId="1" AcceptedAnswerId="19783" CreationDate="2021-05-08T06:03:21.797" Score="11" ViewCount="1180" Body="&lt;h2&gt;Preamble&lt;/h2&gt;&#xA;&lt;p&gt;As Algol-60 had no reserved words, the language keywords had to be specially marked, e.g. prefixed with an underscore with a trailing space or semicolon (&lt;code&gt;_begin _integer i;i:=42_end&lt;/code&gt;), or enclosed in quotes (&lt;code&gt;'begin''real'pi;pi:=3.14'end'&lt;/code&gt;), or made distinct from regular identifiers in some other way. Note that in both cases all unnecessary spaces are deliberately omitted in those two examples.&lt;/p&gt;&#xA;&lt;p&gt;I have two Algol-60 compilers working. One uses quotes for keywords and considers them as atomic tokens.&lt;/p&gt;&#xA;&lt;p&gt;The other, dated 1st of May 1979, uses the underscore as a &amp;quot;mode switch&amp;quot; character up to the next non-alphabetical symbol, so one underscore at the beginning of a keyword is enough, but extra underscores don't hurt:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   1.   _BE__GIN_ _I_N_T_EGER_ I;&#xA;   2.  I:=42; OUTPUT(‘Z’, I) _EN_D&#xA;&#xA;―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――&#xA;&#xA;               42.000000&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That being said, it follows that writing &lt;code&gt;_BEGIN_INTEGER&lt;/code&gt; will not fly: an error &amp;quot;В ЯЗЫКЕ НЕТ СЛОВА    BEGININTEGER&amp;quot;, translated as &amp;quot;THERE IS NO WORD BEGININTEGER IN THE LANGUAGE&amp;quot; will follow.&lt;/p&gt;&#xA;&lt;p&gt;Note that an underscore before a space character does not hurt either. However, any space in the middle of a keyword will result in the pieces considered as separate keywords:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   1.   _BE _GIN _END&#xA;&#xA;     СТРОКА 1&#xA;   В ЯЗЫКЕ НЕТ СЛОВА    BE&#xA;&#xA;     СТРОКА 1&#xA;   В ЯЗЫКЕ НЕТ СЛОВА    GIN&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2&gt;GOTOs&lt;/h2&gt;&#xA;&lt;p&gt;Now, to the point. I had a vague recollection that Algol-60 allowed two ways to write the GOTO operator. Indeed, according to &lt;a href=&quot;https://www.masswerk.at/algol60/algol60-syntaxversions.htm#2_3&quot; rel=&quot;noreferrer&quot;&gt;Algol 60 syntax versions&lt;/a&gt;, the Revised Report (1963) prescribes &lt;strong&gt;goto&lt;/strong&gt;, whereas the Modified Report (1976) prescribes &lt;strong&gt;go to&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The compiler which uses quotes, dated 25th of January 1979, only allows &lt;code&gt;'GOTO'&lt;/code&gt;. Nothing to see there, moving along.&lt;/p&gt;&#xA;&lt;p&gt;The other behaves as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;_BEGIN _GOTO L; L:_END&lt;/code&gt; naturally, works, as does&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   1.   _BEGIN ____G_O_____T_O____ L; L:_END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;as well as various other combinations of extra underscores; but&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   1.   _BEGIN _GO&#xA;   2.  _TO L; L:_END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;works just as well, to satisfy both variants of the syntax.&lt;/p&gt;&#xA;&lt;p&gt;For a final experiment, what would an error message be for &lt;code&gt;_BEGIN _GO _FOR L; L:_END&lt;/code&gt;?&#xA;Somewhat unexpectedly, the compiler produces &lt;code&gt;В ЯЗЫКЕ НЕТ СЛОВА    GO&lt;/code&gt; (&amp;quot;there is no word GO in the language&amp;quot;).&lt;/p&gt;&#xA;&lt;h2&gt;Question&lt;/h2&gt;&#xA;&lt;p&gt;If there is absolutely no semantic difference between the two spellings of the GOTO operator, why bother implementing both? Or, to start with, why bother introducing ambiguity in the standard, forcing the compiler writers to waste valuable machine words to support somebody's pet peeve? (Those two were rhetorical, do not attempt to flag the question &amp;quot;opinion-based&amp;quot;.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;I'm hoping there is a captivating story of heated discussions related to the space in &amp;quot;goto&amp;quot;/&amp;quot;go to&amp;quot; somewhere in the memoirs of the authors of the language, or their interviews. Is there?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="15334" LastEditDate="2021-05-08T09:28:53.197" LastActivityDate="2021-05-10T22:00:48.967" Title="What is the story behind 'goto' vs 'go' 'to' in ALGOL-60?" Tags="&lt;history&gt;&lt;algol&gt;" AnswerCount="3" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="19780" PostTypeId="2" ParentId="19779" CreationDate="2021-05-08T11:39:16.467" Score="4" Body="&lt;p&gt;One may call it an issue of taste or linguistics. The point is that there isn't a English word 'goto'. These are two words. In fact, 'goto' would be pronounced different from 'go to'.&lt;/p&gt;&#xA;&lt;p&gt;Hold your breath and take a step back. Try to view it and shed 40+ years of FORTRAN and BASIC indoctrination. Try to pronounce it like someone uninitiated with programming. It sounds awful, doesn't it? Way off the meaning. It almost hurts. ALGOL was, in its abbreviated way, meant to be readable by humans (*1).&lt;/p&gt;&#xA;&lt;p&gt;The way later Sinclair ZX80 &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX80_character_set&quot; rel=&quot;nofollow noreferrer&quot;&gt;(4 KiB) BASIC&lt;/a&gt; is a great example of the same issue. The machine was meant to appeal to non professional users. The key words &lt;code&gt;GOTO&lt;/code&gt; and &lt;code&gt;GOSUB&lt;/code&gt; were spelled out as &lt;code&gt;GO TO&lt;/code&gt; and &lt;code&gt;GO SUB&lt;/code&gt; (*2).&lt;/p&gt;&#xA;&lt;p&gt;Of course this was easy due the special way the Sinclairs used to enter keywords. When building a character input-based compiler, it gets a lot more effort to detect two 'words' as part of a single keyword. So obviously writing &lt;code&gt;GOTO&lt;/code&gt; helps a lot ... except it sucks when reading.&lt;/p&gt;&#xA;&lt;p&gt;This was a real war in the 1960s. Pick your side.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Heck, isn't that one of the reasons &lt;a href=&quot;https://en.wikipedia.org/wiki/High-level_programming_language&quot; rel=&quot;nofollow noreferrer&quot;&gt;HLLs&lt;/a&gt; were developed in the first place?&lt;/p&gt;&#xA;&lt;p&gt;*2 - It got changed with the &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX81&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZX81&lt;/a&gt;, to be more in line with 'regular' machines. Pressure of the 'experts' I guess.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="535" LastEditDate="2021-05-09T18:15:57.073" LastActivityDate="2021-05-09T18:15:57.073" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19781" PostTypeId="2" ParentId="19779" CreationDate="2021-05-08T15:28:52.350" Score="2" Body="&lt;p&gt;(Opinion - I doubt there is any answer that is not opinion, unless one of the parties involved shows up here).&lt;/p&gt;&#xA;&lt;p&gt;I think it is just personal taste.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A38/P31.HTM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Algol Bulletin 38&lt;/a&gt; contains a letter (page 8) signed by the future authors of the &lt;em&gt;Modified Report&lt;/em&gt;, and there the separate &lt;strong&gt;go to&lt;/strong&gt; is used.&lt;/p&gt;&#xA;&lt;p&gt;Section 4.3, page 18, bears the heading &lt;strong&gt;Go to statements&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This apparently passed unremarked in the bulletin. so perhaps it was not regarded as controversial.&lt;/p&gt;&#xA;&lt;p&gt;Contrariwise, &lt;a href=&quot;https://archive.computerhistory.org/resources/text/algol/algol_bulletin/A39/P32.HTM&quot; rel=&quot;nofollow noreferrer&quot;&gt;AB39.3.2, page 32&lt;/a&gt; contains a letter from Wichmann, one of the authors of the letter cited previously, which writes &lt;strong&gt;goto&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So it's difficult to conclude that there was any particular intent one way or the other.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-05-08T15:28:52.350" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19782" PostTypeId="1" CreationDate="2021-05-08T16:13:53.023" Score="13" ViewCount="374" Body="&lt;p&gt;After watching this video tutorial: &lt;a href=&quot;https://www.youtube.com/watch?v=AyJsOoQKRjQ&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=AyJsOoQKRjQ&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm wondering what the whole deal was with the batteries. Apparently, you can resolder the circuit board inside the Rumble Pak slightly to make it batteryless. And there is no mention of the rumble effect being &amp;quot;lesser&amp;quot; when not using batteries, or anything like that; it seems to work just a swell with the power it gets through the cable from the console! This is surprising to say the least.&lt;/p&gt;&#xA;&lt;p&gt;So why did it officially require batteries? I also remember seeing ads in magazines for third-party Rumble Paks which didn't require batteries, and I always wondered back then how that was possible. But apparently, Nintendo could've easily sold their own official ones without any battery compartment. But they didn't.&lt;/p&gt;&#xA;&lt;p&gt;How can this be explained? Most likely, there is a logical explanation.&lt;/p&gt;&#xA;" OwnerUserId="21684" LastActivityDate="2021-05-09T08:10:22.917" Title="Why did the Rumble Pak for the Nintendo 64 require batteries when it actually apparently doesn't?" Tags="&lt;hardware&gt;&lt;nintendo-64&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19783" PostTypeId="2" ParentId="19779" CreationDate="2021-05-08T16:47:31.100" Score="8" Body="&lt;p&gt;Here's a different take on the issue (thus a separate answer).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;There is no such distinction&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I ran this program through the KDF9 Whetstone Algol translator:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;_b_e_g_i_n_i_n_t_e_g_e_rn; n:=1;&#xA;_e_n_d&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It compiles just fine(though of course there's always the possibility of artifacts from the modern ASCII translation).  My interpretation is as follows:&lt;/p&gt;&#xA;&lt;p&gt;Spaces have no significance per language fiat, though their appearance within basic symbols is not explicitly mentioned. Because there is a small and finite set of delimiters in Algol60, a recognizer can trivially know that &lt;strong&gt;begininteger&lt;/strong&gt; is the two tokens &lt;strong&gt;begin&lt;/strong&gt; and &lt;strong&gt;integer&lt;/strong&gt; (here I use boldface since I don't know how to underline in this markup).&lt;/p&gt;&#xA;&lt;p&gt;That being the case, _g_o_t_o (or &lt;strong&gt;goto&lt;/strong&gt;) is not distinguishable from _g_o  _t_o (or &lt;strong&gt;go  to&lt;/strong&gt;).&lt;/p&gt;&#xA;&lt;p&gt;You can regard underlining as a single-character shift prefix. With that interpretation, the lexer knows when it has recognized a basic symbol by its content, not by a terminating mark.&lt;/p&gt;&#xA;&lt;p&gt;This does not readily transfer to stropping regimes that use enclosing characters (like 'go to' or &amp;quot;go to&amp;quot;), and indeed the same compiler refuses 'begininteger'n (diagnostic: no begin). I suppose the obvious implementation here is to isolate the word by closing delimiter and then decide if it's a valid symbol.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Postscriptum&lt;/p&gt;&#xA;&lt;p&gt;I took a look at Randell &amp;amp; Russell's &lt;em&gt;Algol 60 Implementation&lt;/em&gt;, which is the book on the Whetstone Algol implementation.  They describe a sort of lexical-analysis buffer that's 12 symbols long (where a symbol seems to include an underline flag that has been added, and spaces have already been discarded).  When an underlined character appears at the output end for compilation, an attempt is made to match a known basic symbol in the remainder of the buffer - i.e., as I suspected, we're checking against known symbols, not expecting any detectable separator character.&lt;/p&gt;&#xA;&lt;p&gt;(If that sounds weird to modern readers, don't forget that we're compiling from paper tape, and since I/O time dominates, the goal is to be able to compile in between characters being read. So the compiler is running a few characters behind the input routine).&lt;/p&gt;&#xA;&lt;p&gt;And significantly for this question:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Naturally, spaces, changes to a new line, spurious case definition&#xA;characters(*), etc., are allowed between the underlined characters of&#xA;any basic symbol.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(*) footnote from me: Flexowriter paper tape code included 'case normal' and 'case shift' characters.  It was essentially a 6-bit code.&lt;/p&gt;&#xA;&lt;p&gt;With respect to notations like 'begin', I'm now not sure whether they were even allowed in this particular compiler. They might be part of the online front-end, since underlining without a dead underline key is horrible.  I'll poke around some more when I get a moment.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Postpostscriptum&lt;/p&gt;&#xA;&lt;p&gt;I'm now running Whetstone papertape Algol locally under ee9.&lt;/p&gt;&#xA;&lt;p&gt;The sequence _g _o _t _o  (boldface equivalent &lt;strong&gt;g o t o&lt;/strong&gt;) is perfectly acceptable, demonstrating for sure that spaces are insignificant.&lt;/p&gt;&#xA;&lt;p&gt;Apostrophe stropping -- thus 'goto' -- is not accepted by the compiler.&lt;/p&gt;&#xA;&lt;p&gt;Kidsgrove Algol does accept apostrophe stropping, but will only take 'goto', not 'go to' or 'go' 'to'.&lt;/p&gt;&#xA;&lt;p&gt;tl;dr results mixed.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-05-10T22:00:48.967" LastActivityDate="2021-05-10T22:00:48.967" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19785" PostTypeId="2" ParentId="19782" CreationDate="2021-05-09T06:58:39.730" Score="13" Body="&lt;p&gt;According to Willis82 at &lt;a href=&quot;https://www.tapatalk.com/groups/nintendo_64_forever/rumble-pak-mod-t6706.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.tapatalk.com/groups/nintendo_64_forever/rumble-pak-mod-t6706.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Nintendo actually did this to kiosk rumble packs so shop owners wouldn't have to change batteries. They even went so far as to glue the battery doors shut. It's ok to run a rumble pack this way but never run 4 controllers with 4 modified packs, it draws too many amps through the ports and the system can't handle it. The kiosks came with disclaimers warning what would happen if you ran more than two modified packs on one system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So it seems likely that the battery was to allow you to use more than 2 paks with an N64 system.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="15334" LastEditDate="2021-05-09T08:10:22.917" LastActivityDate="2021-05-09T08:10:22.917" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19786" PostTypeId="2" ParentId="19753" CreationDate="2021-05-09T14:03:09.183" Score="2" Body="&lt;p&gt;In Apple Assembly Line &lt;a href=&quot;http://www.txbobsc.com/aal/1984/aal8405.html#a1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Volume 4 Issue 8&lt;/a&gt; Bob Sander-Cederlof documents the RND problems and presents his own smaller version of the original Call APPLE algorithm as a USR function.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The RND function in Applesoft is faulty, and many periodicals have&#xA;loudly proclaimed its faults. &amp;quot;Call APPLE&amp;quot;, Jan 83, pages 29-34, tells&#xA;them in &amp;quot;RND is Fatally Flawed&amp;quot;, and presents an alternative routine&#xA;which can be called with the USR function.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you want to see some non-random features using RND, type in and RUN&#xA;the following program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;   10 HGR:HCOLOR=3&#xA;   20 X=RND(1)*280:Y=RND(1)*160&#xA;   30 HPLOT X,Y&#xA;   40 GO TO 20&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You will see the Hi-Res screen being sprinkled with dots. After about seven minutes, but long before the screen is full,&#xA;new dots stop appearing. RND has looped, and is replotting the same&#xA;sequence of numbers. Another test disclosed that the repetition starts&#xA;at the 37,758th &amp;quot;random&amp;quot; number.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I re-implemented the Call APPLE algorithm, and my listing follows. The&#xA;Call APPLE version would not quite fit in page 3, but mine does with a&#xA;little room to spare.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The listing is in S-C Assembler format. The assembler is available and I had a quick look, but I don't know how to use it. At some point I'll get around to converting this and post the hex here.&lt;/p&gt;&#xA;" OwnerUserId="71" LastActivityDate="2021-05-09T14:03:09.183" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19787" PostTypeId="1" CreationDate="2021-05-09T14:46:59.873" Score="3" ViewCount="164" Body="&lt;p&gt;What kind of monitor could be used with Sun UltraSPARC 1 Creator Workstation other than the original Sun-provided monitor? Can a more modern monitor be used with this workstation?&lt;/p&gt;&#xA;" OwnerDisplayName="Ann" LastEditorUserId="15334" LastEditDate="2021-05-09T16:02:07.157" LastActivityDate="2021-05-09T16:02:07.157" Title="Sun Ultrasparc 1 creator monitor" Tags="&lt;workstation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19788" PostTypeId="2" ParentId="19787" CreationDate="2021-05-09T14:54:08.950" Score="5" Body="&lt;p&gt;If memory serves - they use &lt;a href=&quot;https://en.wikipedia.org/wiki/DB13W3&quot; rel=&quot;noreferrer&quot;&gt;13W3 connectors&lt;/a&gt; - and you should be able to get a VGA to 13W3 adaptor. There's different varieties of them for different vendors, and a 'universal' one with dip switches that can be set to work.&lt;/p&gt;&#xA;&lt;p&gt;I'm unsure how they'd work with a 'modern' widescreen and you'd likely be running the monitor on a non native resolution, but its the one option you have.&lt;/p&gt;&#xA;" OwnerUserId="4537" OwnerDisplayName="Journeyman Geek" LastActivityDate="2021-05-09T14:54:08.950" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19789" PostTypeId="1" AcceptedAnswerId="19791" CreationDate="2021-05-09T21:55:38.143" Score="12" ViewCount="1288" Body="&lt;p&gt;I read an article that people were using various means of user input in their Amiga 500 computers as an alternative to joystick. Most notable, Sega Mega Drive, Sega Master System, CD32 / Competition Pro CD32. What other controllers are compatible with Amiga 500 (or any) excluding Joysticks altogether, no adapters (sorry Nintendo)&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="19066" LastEditDate="2021-05-10T09:36:44.197" LastActivityDate="2021-05-10T14:26:26.860" Title="Which retro system controllers are compatible with Amiga out of the box" Tags="&lt;amiga&gt;&lt;joystick&gt;&lt;input-devices&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19790" PostTypeId="2" ParentId="19753" CreationDate="2021-05-09T22:58:37.687" Score="1" Body="&lt;p&gt;You can implement an &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_congruential_generator&quot; rel=&quot;nofollow noreferrer&quot;&gt;LCG&lt;/a&gt; in BASIC, though it might not be very fast. Here's a small AppleSoft BASIC program that implements an LCG and shows it tested across 10000 simulated dice throws:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10 REM LCG FOR APPLESOFT - SCRUSS, 2021-05&#xA;20 REM THIS IS &amp;quot;RANDOM0&amp;quot; - SEE WIKIPEDIA&#xA;30  DEF FNS0(S) = 8121 * S + 28411&#xA;40  DEF FNS(S) = FNS0(S) -  INT (FNS0(S) / 134456) * 134456&#xA;50  DEF FNR(S) = S / 134456&#xA;60  DEF FNTHROW(S) =  INT (FNR(S) * 6) + 1&#xA;70  LET SEED = 1:REM THIS WILL ALWAYS GIVE THE SAME SEQUENCE&#xA;80  DIM T(6)&#xA;90  LET THROWS = 10000 - 100&#xA;100  LET N = 0&#xA;110  TEXT : HOME &#xA;120  FOR X = 1 TO 100&#xA;130  LET N = N + 1&#xA;140  LET SEED = FNS(SEED)&#xA;150  LET DICE = FNTHROW(SEED)&#xA;160 REM LET DICE=INT(RND(1)*6)+1: REM UNCOMMENT FOR STD RND()&#xA;170  LET T(DICE) = T(DICE) + 1&#xA;180  NEXT X&#xA;190  PRINT &amp;quot;AFTER &amp;quot;;N;&amp;quot; THROWS:&amp;quot;: PRINT &#xA;200  FOR X = 1 TO 6&#xA;210  PRINT X;&amp;quot;: &amp;quot;;T(X), INT (1000 * T(X) / N) / 10;&amp;quot;%&amp;quot;&#xA;220  NEXT X&#xA;230  PRINT &#xA;240  IF N &amp;lt;  = THROWS THEN  GOTO 120&#xA;250  END &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This isn't a particularly great set of parameters for an LCG, but it has a much longer period (&amp;gt; 134000) than AppleSoft's. After setting the seed (which it looks like you've got a handle on already) the way you can use this code is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LET SEED=FNS(SEED)&#xA;LET RANDVAL=FNR(SEED)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or if you want to use it for dice throws:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;LET SEED=FNS(SEED)&#xA;LET DICEVAL=FNTHROW(SEED)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The seeds are integer values, but the random output is between 0 .. 1. Because AppleSoft BASIC doesn't have a &lt;code&gt;MOD&lt;/code&gt; function/operator, I split the function in two: &lt;code&gt;FNS0&lt;/code&gt; does the transformation, while &lt;code&gt;FNS&lt;/code&gt; does the modulus.&lt;/p&gt;&#xA;&lt;p&gt;AppleSoft BASIC's &lt;code&gt;RND(1)&lt;/code&gt; implementation isn't great, but it's better than some.&lt;/p&gt;&#xA;" OwnerUserId="439" LastActivityDate="2021-05-09T22:58:37.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19791" PostTypeId="2" ParentId="19789" CreationDate="2021-05-10T05:54:37.003" Score="20" Body="&lt;p&gt;The Amiga 9-pin joystick port is compatible with:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Atari 800/VCS joysticks and paddles;&lt;/li&gt;&#xA;&lt;li&gt;Atari ST joysticks;&lt;/li&gt;&#xA;&lt;li&gt;Commodore Vic-20, C64, C64GS and C128 joysticks;&lt;/li&gt;&#xA;&lt;li&gt;Commodore Amiga computer joysticks and joypads; and&lt;/li&gt;&#xA;&lt;li&gt;Amiga CD32 joypads.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This table from &lt;a href=&quot;https://en.wikipedia.org/wiki/Atari_joystick_port&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia's page on the Atari Joystick Port&lt;/a&gt; showing the pin assignments of various systems using a 9-pin input port will be of use:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9QYmO.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9QYmO.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Broadly speaking: Atari and Commodore form one compatible group, Sega Master System and Mega Drive (Genesis) form a second group, and everything else is mutually incompatible.&lt;/p&gt;&#xA;&lt;p&gt;Using a Sega Master System dumb two-button joypad on the Amiga &lt;em&gt;may&lt;/em&gt; work - I &lt;em&gt;believe&lt;/em&gt; they're simply UDLR and Buttons 1+2 as N.O. switches to ground, like an Amiga two-button joystick. However, I wouldn't want to try it unless I'd seen the PCB for myself just in case there's a surprise inside a later revision.&lt;/p&gt;&#xA;&lt;p&gt;Sega Mega Drive controllers definitely contain active chips and using an MD pad on an Amiga may be dangerous. E.g. &lt;a href=&quot;http://www.floodgap.com/retrobits/ckb/display.cgi?26&quot; rel=&quot;noreferrer&quot;&gt;This 1998 article by Doug Cotton&lt;/a&gt; (a hardware engineer producing third party C64 products) describes the mechanism where a Sega controller can damage the C64's CIA chip.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;But be warned: There are rumours that SEGA-Pads can destroy your CIA! If&#xA;you look at the pin-connections, it might be possible, though I don't&#xA;know of such a case.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;This is because joysticks (which the game ports were intended to support)&#xA;either pull the lines low (when active) or are an open connection (when&#xA;inactive). This latter condition allows the lines to be pulled low by other&#xA;sources (they keyboard for example). Sega gamepads, on the other hand, pull&#xA;inactive lines HIGH. Now if you press a key on the keyboard with one of&#xA;these devices plugged in, one source is pulling the line high while another&#xA;I/O line (cross-connected through the keyboard) is trying to drag it down.&#xA;This can put an extra strain on the CIA chip, as the circuit wasn't&#xA;designed to deal with this kind of situation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2021-05-10T10:39:44.360" LastActivityDate="2021-05-10T10:39:44.360" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19792" PostTypeId="2" ParentId="19789" CreationDate="2021-05-10T06:07:19.893" Score="5" Body="&lt;p&gt;It depends on what you call &amp;quot;compatible&amp;quot;. On any DB9 joystick, the directions and at least 1 button will work&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If you're aiming 1 button joystick, then you can pick any controller you'll find a button that works.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now if you need 2 buttons, only sega controllers have a chance to work, but the buttons that work aren't the most naturally located. I have a SGFighter quickshot for sega, and only 2 buttons work(ed), but not the trigger button (too bad for a quickshot) (I know of a routine which is able to read more buttons from a sega controller but of course it's not used in games, so it's of little interest. Besides the important part would be to detect this joystick against a &amp;quot;standard&amp;quot; CD32 joypad)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you need more than 2 buttons, your best bet is a standard CD32 controller, Honeybee, or KTRL CD32 (confidential batch made by some talented guy at &lt;a href=&quot;http://eab.abime.net/showthread.php?t=98935&amp;amp;highlight=ktrl%20cd32&quot; rel=&quot;noreferrer&quot;&gt;EAB&lt;/a&gt;), or also Monster Joysticks (&lt;a href=&quot;http://eab.abime.net/showthread.php?t=102797&quot; rel=&quot;noreferrer&quot;&gt;http://eab.abime.net/showthread.php?t=102797&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;CD32 joypads are your best bet now. They are reported not to work on some motherboards, but it was because of a timing error on the lowlevel.library. Fixing the timing allows the joypads to work. This fix is present in most whdload patches that are published nowadays (and which support 2/3 buttons + pause + shoulders).&lt;/p&gt;&#xA;&lt;p&gt;Besides, one could argue that diagonals are hard to pull on joypads, but more and more games get a &amp;quot;second button for jump&amp;quot; option now (through whdload) so it's less a concern now for platformers (and with some training, diagonals are pretty doable).&lt;/p&gt;&#xA;&lt;p&gt;Note: I wasn't able to exploit anything useful from Atari paddles on the amiga (my plan was to adapt Arkanoid-style games to it). Maybe one day...&lt;/p&gt;&#xA;" OwnerUserId="3316" LastActivityDate="2021-05-10T06:07:19.893" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19793" PostTypeId="2" ParentId="19760" CreationDate="2021-05-10T08:24:27.713" Score="4" Body="&lt;p&gt;As stated before, you have to format your drive. The apple utility does not support non Apple branded drives.&#xA;If you have a CD-ROM drive connected to your Apple, you can boot Apple Unix AUX and format the harddisk (emulator) under AUX, which is not so restrective and then use it to install System 7 ....&lt;/p&gt;&#xA;" OwnerUserId="21700" LastActivityDate="2021-05-10T08:24:27.713" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19794" PostTypeId="2" ParentId="19789" CreationDate="2021-05-10T14:26:26.860" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://www.tindie.com/products/autumnhippo/nes64/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This shop&lt;/a&gt; on Tindie sells modified Chinese NES64 controller rip-offs that connect directly to any 9-pin joystick connectors. The mod is available as a kit or fully assembled and ready to plug into your game port.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2021-05-10T14:26:26.860" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19795" PostTypeId="1" AcceptedAnswerId="19796" CreationDate="2021-05-11T12:52:43.270" Score="43" ViewCount="5008" Body="&lt;p&gt;On many arcade machines when running in attract mode, they often show a demo gameplay. I wondered how they did this?&lt;br&gt;I guess those are not pre-recorded movies, so I think that they probably ran the game engine with some pre-defined input. On some machines one can see that this demo is not always the same, so there is some randomness there as well.&lt;/p&gt;&#xA;" OwnerUserId="15165" LastEditorUserId="15165" LastEditDate="2021-05-12T05:18:13.400" LastActivityDate="2021-05-12T05:18:13.400" Title="How was a demo mode implemented in arcade machines" Tags="&lt;arcade&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19796" PostTypeId="2" ParentId="19795" CreationDate="2021-05-11T14:09:18.740" Score="35" Body="&lt;p&gt;Most of the time, game coders are not going to program an A.I. just to show the demo so the moves are pre-recorded, and generally the demo ends quickly with the main character dying/exploding (maybe not to show too much of the level)&lt;/p&gt;&#xA;&lt;p&gt;To record the moves, the programmers probably added some piece of code to log all player input along with the exact frame where it occurs and save it in memory. In the end, the memory is dumped and the moves are integrated as game data. (and recording code is then probably removed from the final release).&lt;/p&gt;&#xA;&lt;p&gt;Part of the disassembly of Bombjack arcade game proves that there was a recording of some input (fake player input)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;; play mode ?&#xA;ld     a,($8070)       ; 038C 3A 70 80&#xA;or     a               ; 038F B7&#xA;jp     nz,$0398        ; 0390 C2 98 03&#xA;&#xA;; no (demo), A = fake input&#xA;ld     a,($807a)       ; 0393 3A 7A 80&#xA;jr     $03a2           ; 0396 18 0A&#xA;&#xA;; yes (play), A = player pinout&#xA;ld     a,($b000)       ; 0398 3A 00 B0&#xA;bit    0,b             ; 039B CB 40&#xA;jr     z,$03a2         ; 039D 28 03&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Sometimes there are several moves or levels recorded just for variety too. Introducing randomness in the player moves would be risky and would bear poor results. Just recording 2 or 3 different games is better.&lt;/p&gt;&#xA;&lt;p&gt;About the randomness, well, most games have randomness in them (enemy moves/shots). So if you record moves with some random setting, and replay them with another, then the game will be different.&lt;/p&gt;&#xA;&lt;p&gt;If this causes too much problems, I suppose that they can fix the random seed of the demo so it matches the random seed of the time when they recorded it.&lt;/p&gt;&#xA;&lt;p&gt;A &amp;quot;modern&amp;quot; example of this is the fact that you can record input in a lot of emulators. MAME for instance. Of course, you have to record the moves from the machine bootup. Replaying moves of a game on another game without rebooting the machine will give another (failed) sequence because of randomness not being the same. This technique is also used (along with state save) for &lt;a href=&quot;https://en.wikipedia.org/wiki/Tool-assisted_speedrun&quot; rel=&quot;noreferrer&quot;&gt;tool assisted speedruns&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Okay, but...&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Just to contradict myself, I checked Mrs PacMan &lt;a href=&quot;https://github.com/BleuLlama/GameDocs/blob/master/disassemble/mspac.asm&quot; rel=&quot;noreferrer&quot;&gt;source code&lt;/a&gt; derived from PacMan source, and commented by the person who reverse engineered it) and this comment directly contradicts the above... Duh.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;controls pac-man AI during demo.  pacman will avoid pink ghost, or chase it when red ghost is edible&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The A.I. is simple in that case, but it's very unlikely that an A.I is used in platformers/shooters or a racing game. A complex A.I needs time to make it right, and takes more room on released program ROM (so a fighting game could totally use its own opponent A.I. for the main character during a demo)&lt;/p&gt;&#xA;&lt;p&gt;So the right answer is probably &amp;quot;it depends&amp;quot;, depending on the ability to auto-play during a few seconds without the main character moves looking dumb.&lt;/p&gt;&#xA;&lt;p&gt;Let's not forget that the demo mode is vital to attract players, so if the demo game play is dumb A.I. that doesn't demonstrate the game possibilities, that's not going to work to cut it.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2021-05-11T19:19:15.363" LastActivityDate="2021-05-11T19:19:15.363" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="19797" PostTypeId="2" ParentId="11318" CreationDate="2021-05-11T14:59:05.863" Score="3" Body="&lt;p&gt;A &lt;a href=&quot;https://www.vcfed.org/forum/forum/genres/cp-m-and-mp-m/1208286-kaypro-doesn-t-store-all-of-its-cp-m-in-the-reserved-track&quot; rel=&quot;nofollow noreferrer&quot;&gt;patch&lt;/a&gt; has now been created for cpmtools which adds a &lt;code&gt;dirblks&lt;/code&gt; parameter to the diskdefs file, so that the extra directory blocks can be allocated.&lt;/p&gt;&#xA;" OwnerUserId="1912" LastActivityDate="2021-05-11T14:59:05.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19798" PostTypeId="5" CreationDate="2021-05-11T15:03:52.377" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2021-05-11T15:03:52.377" LastActivityDate="2021-05-11T15:03:52.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19799" PostTypeId="4" CreationDate="2021-05-11T15:03:52.377" Score="0" Body="The SCSI2SD device, connecting to an 8-bit SCSI bus using an SD card for drive volumes." OwnerUserId="21662" LastEditorUserId="21662" LastEditDate="2021-05-11T17:33:29.117" LastActivityDate="2021-05-11T17:33:29.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19800" PostTypeId="5" CreationDate="2021-05-11T15:07:30.430" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2021-05-11T15:07:30.430" LastActivityDate="2021-05-11T15:07:30.430" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19801" PostTypeId="4" CreationDate="2021-05-11T15:07:30.430" Score="0" Body="The original series of &quot;compact&quot; Macintoshes: the 128k, 512k, Plus, SE, SE/30 (as well as the later Classic and Color Classic units), sold from 1984 through the mid 1990s." OwnerUserId="21662" LastEditorUserId="21662" LastEditDate="2021-05-11T17:33:13.767" LastActivityDate="2021-05-11T17:33:13.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19802" PostTypeId="1" CreationDate="2021-05-11T17:06:39.120" Score="1" ViewCount="151" Body="&lt;p&gt;Back in the days before mask ROM (when invented?) we got core rope memories, or Little Old Ladies memories, which required lots of human labor to build.&lt;/p&gt;&#xA;&lt;p&gt;Were there any kinds of ROMs which were suitable for mass production before Semiconductor ROM dominated (when?) the market?&lt;/p&gt;&#xA;&lt;p&gt;PS: I don't think the 1959 PROM satisfies the requirement. It needed lots of standalone diodes and auto assembly was not a thing yet(though auto burning might be possible?).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;There are some canidates of non-volatile memories listed below beyond TROS or CCROS, andplease don't hesitate to teach me their PROs and CONs or if there was any other means.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Read-only_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;ENIAC's Function Tables were resistor matrix ROM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Plated_wire_memory&quot; rel=&quot;nofollow noreferrer&quot;&gt;Plated wire memory&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://ed-thelen.org/comp-hist/navy-thin-film-memory-desc.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Thin-film memory&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20080905064220/http://www.eetimes.com/special/special_issues/millennium/milestones/bobeck.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Twistor memory&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.gsalmasi.com/newpage/bubbles.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bubble memory&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://technikum29.de/en/devices/plated-wire-storage.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Magnetic stick memory&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://technikum29.de/en/computer/storage-media.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Two channel punched tape&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;LINK:&#xA;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/2103/historical-price-of-rom&quot;&gt;Historical price of ROM&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/18026/cheapest-type-of-read-only-memory-allowing-random-access-before-year-1970&quot;&gt;Cheapest type of Read-Only Memory allowing Random access before Year 1970&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17812" LastEditorUserId="17812" LastEditDate="2021-05-12T04:06:27.087" LastActivityDate="2021-05-12T04:06:27.087" Title="How many kinds of mass-producible ROM is avaliable before 1970?" Tags="&lt;history&gt;&lt;hardware&gt;&lt;memory&gt;&lt;rom&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ClosedDate="2021-05-11T22:13:18.373" ContentLicense="CC BY-SA 4.0" />
  <row Id="19803" PostTypeId="1" CreationDate="2021-05-11T17:27:16.630" Score="0" ViewCount="264" Body="&lt;p&gt;CRT TVs were great, and an absolute must for all classic video games. However, it cannot be denied that it's impossible to buy a new CRT TV today, at least in any kind of normal store, and you rarely even see any old ones being thrown away anymore. At least not here. A few years ago, I would still spot them regularly just for picking up for free. Such is no longer the case, probably because all &amp;quot;normal&amp;quot; people have switched to flat screens at this point.&lt;/p&gt;&#xA;&lt;p&gt;It's possible that somebody might find a &amp;quot;new old stock&amp;quot; CRT TV in a warehouse somewhere, but that's insanely lucky and I don't have any such connections (or luck). Besides, they are large, heavy and clunky. They will likely be impossible to repair or find spare parts for if and when they break. Opening one up myself and poking around can literally be &lt;em&gt;lethal&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Hooking up a classic console to a modern TV never gives you the right look, not even if you buy a special &amp;quot;upscaler&amp;quot; device to put in between. (No matter how expensive the upscaler is, it just isn't logically possible because a completely different technology was used to display the picture with the old TVs. Maybe it can one day be accurately simulated with future, ultra-hi-res and superior to today's TV tech, but we aren't even close to there yet.)&lt;/p&gt;&#xA;&lt;p&gt;This made me think of this theoretical &amp;quot;fake CRT&amp;quot;, built new and physically flat, but not using the standard flatscreen technology of today, but rather some sort of &amp;quot;simulated CRT&amp;quot; technology. Is there such a thing? Imagine being able to order a flat, convenient 14&amp;quot; or 21&amp;quot; CRT &amp;quot;panel&amp;quot; that you simply place in your home which produces an image just like the old CRTs, but without all the problems that come from obtaining and keeping a CRT TV around.&lt;/p&gt;&#xA;&lt;p&gt;I'm &lt;em&gt;not&lt;/em&gt; looking for a general TV which also &amp;quot;doubles as&amp;quot; a retro gaming display, but a dedicated one which is &lt;em&gt;only&lt;/em&gt; for retro gaming and has no requirements of displaying normal modern TV/whatever signals. All I want is an accurate simulation of what the CRTs produced, so that an expert eye could not tell the difference if you placed this thing on a wall next to an actual CRT which is built into the wall.&lt;/p&gt;&#xA;&lt;p&gt;Is there such a thing, or is anyone working on one? If not, what's stopping this from existing? Too small market? Physical limitations that prevent this from ever existing?&lt;/p&gt;&#xA;" OwnerUserId="21715" LastActivityDate="2021-05-11T17:44:53.333" Title="Is there such a thing as a modern-manufactured, flat, fake CRT TV?" Tags="&lt;crt-monitor&gt;&lt;new-hardware-adaptation&gt;&lt;game&gt;&lt;television&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2021-05-12T00:48:16.327" ContentLicense="CC BY-SA 4.0" />
  <row Id="19804" PostTypeId="2" ParentId="19803" CreationDate="2021-05-11T17:44:53.333" Score="3" Body="&lt;p&gt;I don't see how such a thing would be technically possible.&lt;/p&gt;&#xA;&lt;p&gt;Either you need to use circuitry to adapt the signal to look CRT-ish on an existing display technology (i.e. an upscaler) or you need to eat the costs tooling up for, producing, and shipping an alternative display technology for a niche market.&lt;/p&gt;&#xA;&lt;p&gt;...and I don't know any technology which would get you what you want in a flat panel without using an upscaler.&lt;/p&gt;&#xA;&lt;p&gt;The CRT look was achieved by this process:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Let the console perform a digital to analog conversion to generate the video signal.&lt;/li&gt;&#xA;&lt;li&gt;Drive an electron gun more or less directly from that analog signal&lt;/li&gt;&#xA;&lt;li&gt;Let the arc of the electron beam act as a physics-based upscaler, akin to using a projector and a lens (this is why CRTs aren't flat)&lt;/li&gt;&#xA;&lt;li&gt;Let the physical persistence properties of the phosphors interact with human persistence of vision to handle things like deinterlacing and any other smoothing effects which are relevant for a given input.&lt;/li&gt;&#xA;&lt;li&gt;Let the combination of an analog signal and no 1-to-1 correspondence between the input signal and the scale of the phosphor elements provide smoothing effects.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The closest you can get to that in a flat panel is using a high-DPI display, an even more powerful upscaler, and smearing your upscaled pixels across the physical pixels to simulate how the electron beam interacts with the phosphor elements in a CRT.&lt;/p&gt;&#xA;&lt;p&gt;...or, alternatively, you could try using a projector and a wall or roll-up screen to cheat the &amp;quot;physics-based upscaling requires a pyramidal volume of space&amp;quot; part by using the open space in the room instead of the space behind the screen.&lt;/p&gt;&#xA;" OwnerUserId="1920" LastActivityDate="2021-05-11T17:44:53.333" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19805" PostTypeId="2" ParentId="19802" CreationDate="2021-05-11T18:24:01.617" Score="3" Body="&lt;p&gt;&lt;a href=&quot;http://www.righto.com/2019/11/tros-how-ibm-mainframes-stored.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM's TROS&lt;/a&gt; (Transformer Read-Only Storage) and CCROS (Capacity Coupled Read-Only Storage) both were ROM-alike, entirely free of semiconductor material, and basically one-time programmed like punch tape (it could be re-programmed by exchanging the tapes with re-punched ones, and CCROS even shared the same format with IBM punch cards for its plastic sheet, so you could program your ROM with a standard punch). It was also largely mass-production ready.&lt;/p&gt;&#xA;&lt;p&gt;I think these should satisfy your requirements.&lt;/p&gt;&#xA;" OwnerUserId="780" LastActivityDate="2021-05-11T18:24:01.617" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19806" PostTypeId="2" ParentId="2939" CreationDate="2021-05-11T19:53:06.903" Score="0" Body="&lt;p&gt;A bit expensive, but there is this option:&#xA;&lt;a href=&quot;https://icomp.de/shop-icomp/en/produkt-details/product/ace2.html#filter=&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://icomp.de/shop-icomp/en/produkt-details/product/ace2.html#filter=&lt;/a&gt;*&#xA;Updates the Agnus to have 2 Meg chip.&lt;/p&gt;&#xA;" OwnerUserId="13803" LastActivityDate="2021-05-11T19:53:06.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19807" PostTypeId="2" ParentId="19802" CreationDate="2021-05-11T19:58:24.037" Score="3" Body="&lt;p&gt;I suppose it depends what counts as &amp;quot;mass produced&amp;quot;.  One can implement the same kind of circuits used in IC mask ROMs on a PCB with diodes.  This is &lt;a href=&quot;https://www.cca.org/blog/images/diode-matrix-1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;a PDP-11 boot ROM from the early 1970s&lt;/a&gt;.  (Source of image and &lt;a href=&quot;https://www.cca.org/blog/20120222-Diode-Matrix.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;short article about the board here.&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;You place a diode where you want your bits to go and solder it in.  DEC also sold blanks, where you modified it to hold the data you want.  (What I don't know is whether the blanks came pre-soldered with diodes in every position or not.  Presumably just snipping out the 0s is much easier for the customer than soldering in the 1s, but also more expensive.)&lt;/p&gt;&#xA;&lt;p&gt;This technology was used by MIT's Whirlwind to implement the memory for its microcode program, operational by 1951.  But that machine was not mass-produced, and neither were its components.&lt;/p&gt;&#xA;&lt;p&gt;Discrete diode ROMs would definitely be mass produced by the mid-1960s: the first electronic desktop calculator was probably the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sumlock_ANITA_calculator&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANITA&lt;/a&gt;, which used a diode matrix ROM like that to encode its control program.  It was available in 1961, and is the first mass-produced product I know of like that.&lt;/p&gt;&#xA;&lt;p&gt;But I know IBM was using it in some of their designs around then, and it's possible they were turning out boards like that in significant production quantities before 1960.  Perhaps someone else will help be able to narrow it down more between '51 and '61.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastActivityDate="2021-05-11T19:58:24.037" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19808" PostTypeId="2" ParentId="19729" CreationDate="2021-05-11T20:17:00.877" Score="2" Body="&lt;p&gt;I resolved the issue by downloading the package again from Aminet: &lt;a href=&quot;https://aminet.net/package/dev/misc/guigfxlib_nofpu&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://aminet.net/package/dev/misc/guigfxlib_nofpu&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have used one of the online tutorials while setting it up and I believe the library I had problem with came from that source, but different than Aminet.&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2021-05-11T20:17:00.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19809" PostTypeId="2" ParentId="19795" CreationDate="2021-05-11T20:18:50.497" Score="16" Body="&lt;p&gt;For space invaders what happens is the game has short list of movements (11 in ROM but only 10 are used) left and right or stay still.&lt;/p&gt;&#xA;&lt;p&gt;If there is no bullet in flight the player fires, each time the bullet fires the next direction action is pulled from the list and the player starts moving in that direction. The time of flight of the bullet acts as a timer, either it hits an alien, base or goes of the top of screen and then the player fires again.&lt;/p&gt;&#xA;&lt;p&gt;The position in the movement list only gets reset as part of the power on (IIRC) so the movement feels fairly random.&lt;/p&gt;&#xA;&lt;p&gt;If you use mame there are some oddities around the way the two screen scan interrupts work which mean that performing a mame reset is slightly different from starting mame and you get different sequences.&lt;/p&gt;&#xA;&lt;p&gt;In psuedo code it looks something like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;IsrRoutine60Hz()&#xA;{&#xA;  CheckForPlayerFiresBullet();&#xA;  MovePlayer();&#xA;  // Draw Screen / Invaders etc....&#xA;}&#xA;&#xA;CheckForPlayerFiresBullet()&#xA;{&#xA;   if (no_bullet_in_motion) &#xA;   {&#xA;     if (demo_mode )&#xA;     { &#xA;       FireBullet();&#xA;       demoPlayerDirection=moveList[nextDemoCommand++];&#xA;       if (nextDemoCommand&amp;gt;=moveList.Length)&#xA;          nextDemoCommand=0;&#xA;     } &#xA;     else &#xA;     {&#xA;       if (fireButtonDown) FireBullet();&#xA;     }&#xA;   }&#xA;}&#xA;&#xA;MovePlayer()&#xA;{&#xA;   if (demo_mode)&#xA;     command=demoPlayerDirection;&#xA;   else&#xA;     command=GetDirectionFromButton();&#xA;   // Move left,right or stay still based on command&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="632" LastEditorUserId="632" LastEditDate="2021-05-11T22:44:25.520" LastActivityDate="2021-05-11T22:44:25.520" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19810" PostTypeId="2" ParentId="19795" CreationDate="2021-05-12T00:45:09.043" Score="13" Body="&lt;p&gt;In &lt;a href=&quot;https://6502disassembly.com/va-battlezone/&quot; rel=&quot;noreferrer&quot;&gt;Battlezone&lt;/a&gt;, the code for the play loop is shared between &amp;quot;play&amp;quot; and &amp;quot;attract&amp;quot; modes.  At various points, a flag is tested to see if the game is &amp;quot;played&amp;quot; by the player or a demo.  A counter is used to cycle between showing the logo, showing high scores, and driving around.&lt;/p&gt;&#xA;&lt;p&gt;The self-driving logic is in the &lt;a href=&quot;https://6502disassembly.com/va-battlezone/Battlezone.html#SymUpdatePlayer&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;UpdatePlayer&lt;/code&gt;&lt;/a&gt; code.  It steers toward the enemy position, alternating forward and reverse movement every 64 frames.  Other bits of code check &lt;code&gt;play_flag&lt;/code&gt; to change enemy behavior, omit display of the copyright string, unmute the engine sound, etc.&lt;/p&gt;&#xA;&lt;p&gt;It's not very sophisticated -- it doesn't really show you what playing the game looks like -- but it was enough to get one's attention back in 1980.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2021-05-12T00:45:09.043" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19811" PostTypeId="5" CreationDate="2021-05-12T03:32:25.903" Score="0" Body="" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-05-12T03:32:25.903" LastActivityDate="2021-05-12T03:32:25.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19812" PostTypeId="4" CreationDate="2021-05-12T03:32:25.903" Score="0" Body="Questions about the use of vacuum tubes in computers, particularly as logic devices.  Those about cathode ray tubes should use the [crt-monitor] tag instead." OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-05-12T03:32:25.903" LastActivityDate="2021-05-12T03:32:25.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19813" PostTypeId="5" CreationDate="2021-05-12T03:38:12.127" Score="0" Body="" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-05-12T03:38:12.127" LastActivityDate="2021-05-12T03:38:12.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19814" PostTypeId="4" CreationDate="2021-05-12T03:38:12.127" Score="0" Body="Questions about computers that use electromagnetic relays as logic elements.  Do not use for relays that merely switch an output (such as a cassette motor)." OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-05-12T03:51:43.677" LastActivityDate="2021-05-12T03:51:43.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19815" PostTypeId="1" AcceptedAnswerId="19816" CreationDate="2021-05-12T10:56:12.503" Score="11" ViewCount="1069" Body="&lt;p&gt;[copied from &lt;a href=&quot;https://superuser.com/questions/1648336/32-bit-pci-riser-cards-different-types&quot;&gt;superuser.com&lt;/a&gt;]&lt;/p&gt;&#xA;&lt;p&gt;I'm duplicating an existing compact PC; I'd love to replace it with modern components, but for various reasons I can't.&lt;/p&gt;&#xA;&lt;p&gt;I'm having a tough time finding the correct 32-bit PCI right-angle riser card. I bought a new one, and the dimensions are the same, but the wiring is different, and the system doesn't recognize the inserted card (an audio card).&lt;/p&gt;&#xA;&lt;p&gt;The old, working riser (green in the pictures below) has five capacitors, and the wiring doesn't look straight-through. When I toned it out, it seemed to be straight-through, although several pairs of adjacent pins were connected. It's at least a three-layer board with an internal ground plane.&lt;/p&gt;&#xA;&lt;p&gt;The new, not-working-for-me riser (red) is pretty clearly straight-through, with no components other than the connector. I toned it, and no adjacent pins are shorted. It's just two layers; no ground plane.&lt;/p&gt;&#xA;&lt;p&gt;Strange thing: plugging the audio card straight into the motherboard works fine, which suggests that a straight-through riser should work.&lt;/p&gt;&#xA;&lt;p&gt;So, the question is: are there different types of PCI riser cards? How can I find one that's electrically equivalent to the old one? (And, why won't the new straight-through riser work, when the audio card works if plugged directly into the motherboard?)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Po1mX.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Po1mX.jpg&quot; alt=&quot;Front of 32-bit PCI cards&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2DDsb.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2DDsb.jpg&quot; alt=&quot;Rear of 32-bit PCI cards&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21721" LastActivityDate="2021-05-12T13:14:15.667" Title="32-bit PCI riser cards: different types?" Tags="&lt;x86&gt;&lt;motherboard&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19816" PostTypeId="2" ParentId="19815" CreationDate="2021-05-12T13:14:15.667" Score="18" Body="&lt;p&gt;I have used these passive PCI risers quite a lot and some of them need their &amp;quot;fingers&amp;quot; to be cleaned with something like isopropanol before they work properly. Especially on the top photo the fingers on the red riser don't all look clean enough.&lt;/p&gt;&#xA;" OwnerUserId="7784" LastActivityDate="2021-05-12T13:14:15.667" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19817" PostTypeId="2" ParentId="1625" CreationDate="2021-05-12T13:42:05.350" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Z1_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zeus Z1&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Z2_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zeus Z2&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Z4_(computer)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zeus Z4&lt;/a&gt; used &amp;quot;mechanical slotted metal strip memory&amp;quot;.  These were not stored program computers where the program is executed entirely out of main memory; rather, then program was read from a punched tape reader (Z1 and Z4) or punched card reader (Z2).  The memory was used primarily for data, but it was randomly addressed.&lt;/p&gt;&#xA;&lt;p&gt;The first clue that Z1 memory was randomly addressed is seen in this block diagram from &lt;a href=&quot;https://arxiv.org/pdf/1406.1886.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Z1: Architecture and Algorithms of Konrad Zuse’s First Computer&lt;/a&gt;, p. 4:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Bl2Sd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Bl2Sd.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This illustration from p. 11 shows the working of a memory bit:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QvBjr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QvBjr.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Figure 9: One mechanical bit in the memory. The pin can be stored in the zero or one position. Its position can&#xA;be read.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Diagram 9(a) shows two stored bits. In step 9(b), a control plate moves the pins up. In step 9(c) the&#xA;horizontal actuated plate is pusehd (lower bit) or not (upper bit) by the stored bit and the clocked&#xA;plate. In step 9(d) the bits are moved back to their original position, where the vertical control plate&#xA;can bring them to position 9(a). Reading a bit from this type of memory was a destructive process.&#xA;After reading a bit, the contents of the bit cell had to be restored by the movement back shown in&#xA;9(d).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The Z1 and the Z2 had the same instruction set, and that instruction set could randomly address the memory.  From &lt;a href=&quot;https://history-computer.com/konrad-zuse/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://history-computer.com/konrad-zuse/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The instruction set of the Z2 consisted of the same eight instructions of Z1.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;and two of the instructions that randomly addressed memory:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Two instructions for reading/writing from/to memory:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;•Pr z—read the contents of the memory cell into Registers R1 or R2&lt;/p&gt;&#xA;&lt;p&gt;•Ps z—write the contents of Register R1 to the memory cell&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The memory of the Z3 was randomly addressed, as seen in the instruction set documented in &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/7933/3324&quot;&gt;this RC answer&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ablesebefehl, A n (e.g. A 17) - reads a memory cell into R1...&lt;/li&gt;&#xA;&lt;li&gt;Speicherbefehl, S n (e.g. S 18) - stores R1 in to a memory cell.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="3324" LastActivityDate="2021-05-12T13:42:05.350" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19818" PostTypeId="2" ParentId="16933" CreationDate="2021-05-12T17:52:43.887" Score="-1" Body="&lt;p&gt;The Z80 itself has 65,536 bytes of memory that are directly accessible, and the trick Zilog used to use in their old computers was to use 32K bytes of each and select between the two with the A15 pin. However, they created a new, better system and integrated it into their more recent chips where a set of registers select the address boundaries of the RAM and ROM, so an address between the boundaries of either memory type will select that type of memory, and the boundaries can be modified at any time for up to 64K of each. This trick is used in the Z182 and Z382 CPU. Also, paging the memory (used in the Z280) and adding an MMU (used in the Z180) will expand the memory as well.&lt;/p&gt;&#xA;" OwnerUserId="21724" LastActivityDate="2021-05-12T17:52:43.887" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19819" PostTypeId="2" ParentId="11597" CreationDate="2021-05-12T20:38:25.327" Score="1" Body="&lt;p&gt;Firstly, it's not true. There were many bootable games for DOS. The most popular answer here names a bootable DOS game, then goes on to explain why they might not be as popular(?)&#xA;Perhaps your question makes sense for the original IBM PC. That brings up another distorting variable; PCs have been around since 1981, and today's PCs are direct descendants. In comparison Amiga was only made by Commodore from 1985 to '96.There were many features later PCs and &amp;quot;clones&amp;quot; had that the original PC and PC XT didn't have, but by 1986, Compaq had put out the first 386 desktop PC, the Deskpro. If your friend had a PC that was as new as your Amiga, a PC which would probably have been running Windows 3.1 on a hard drive, you would have a very different experience.&#xA;Also, making a floppy disk bootable in DOS was as simple as, &amp;quot;sys a:&amp;quot;. This would put a boot sector, and a &amp;quot;DOS BIOS&amp;quot; (IO.SYS) file and a DOS kernel (MSDOS.SYS), on the disk. (IBM renamed these to IBMBIO.COM and IBMDOS.COM.) It's a rather trivial operation, and it's no wonder over 200 major games included this feature, and probably a number of homebrew games as well.&#xA;There's also the fact that &lt;strong&gt;two&lt;/strong&gt; floppy drives became vary popular soon after the IBM PC came out. The first successful &amp;quot;clone&amp;quot;, the Compaq Portable had two floppy drives. The Apple IIe was also commonly bought with two drives, but not the Amiga. For most non-business purposes, the DOS disk was kept in one drive (A: or B:), and games and other applications in the second drive. Even if the game was bootable, it was common to run it after the DOS disk was already present and booted. This might be what distorts your memory of PCs.&lt;/p&gt;&#xA;" OwnerUserId="21725" LastEditorUserId="21725" LastEditDate="2021-05-12T20:43:52.813" LastActivityDate="2021-05-12T20:43:52.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19820" PostTypeId="1" AcceptedAnswerId="19821" CreationDate="2021-05-13T02:59:31.280" Score="6" ViewCount="189" Body="&lt;p&gt;The core OS debug VXDs are provided in the DDK as separate VXDs, as opposed to being packed into a single VMM32.VXD file. Furthermore the readme file with the DDK indicates that copying all the unpacked debug VXDs to the IOSUBSYS folder and replacing the ring 3 system DLLs and additional debug VXDs that are not compressed into VMM32.VXD should suffice. Based on that advice I attempted the following:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Copy all relevant debug VXDs to the IOSUBSYS folder.&lt;/li&gt;&#xA;&lt;li&gt;Replace the ring 3 system DLLs/auxiliary VXDs with their debug versions.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;However the debug VMM.VXD and the debug VXDs in IOSUBSYS are still not loaded and the VMM32.VXD kernel that is initially installed is still loaded, furthermore many system features are now broken because the retail VMM does not work with the debug ring 3 system modules. Does anyone know how to properly deploy the debug VMM/ring 3 modules from the DDK to an existing Windows 98 installation?&lt;/p&gt;&#xA;" OwnerUserId="21719" LastEditorUserId="21719" LastEditDate="2021-05-13T12:56:28.683" LastActivityDate="2021-05-25T18:19:21.317" Title="How can I install debug VXDs from the Windows 98 DDK?" Tags="&lt;windows-98&gt;&lt;windows-95&gt;&lt;debugging&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19821" PostTypeId="2" ParentId="19820" CreationDate="2021-05-13T07:48:27.843" Score="6" Body="&lt;p&gt;You mentioned copying files into the &lt;code&gt;%WINDIR%\SYSTEM\IOSUBSYS&lt;/code&gt; directory (including VMM.VXD), but nothing about the &lt;code&gt;%WINDIR%\SYSTEM\VMM32&lt;/code&gt; directory. The former, as the name suggests, contains only individual block device drivers (port drivers, VxDs for hard disks, CD-ROM drives, etc.). It’s the latter directory that is supposed to contain core VMM service drivers, like VMM.VXD or IOS.VXD. Files in it replace the VXD drivers embedded in the &lt;code&gt;VMM32.VXD&lt;/code&gt; file; this is how the debugging kernel is installed.&lt;/p&gt;&#xA;&lt;p&gt;Also, I don’t know if this is true of the 9x DDKs, but I remember the debug kernel of Windows 3.1 or so coming with a pair of batch files that can switch back and forth between debug and release kernels. Maybe it’s worth looking for something similar in your DDK.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-05-25T18:19:21.317" LastActivityDate="2021-05-25T18:19:21.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19822" PostTypeId="1" AcceptedAnswerId="19836" CreationDate="2021-05-13T08:59:47.777" Score="2" ViewCount="278" Body="&lt;p&gt;I'm looking to identify a vertical shooter from the 80s.&lt;/p&gt;&#xA;&lt;p&gt;The setting is futuristic, with the main ship being able to get upgrades based on the floating bonus which is a letter. One of the was a flamethrower, another was a six shooter. When taking the letter, parts were combined into the ship to give the upgrade. The letter &amp;quot;P&amp;quot; would give an extra life, unless it was a brown colored &amp;quot;P&amp;quot; which would instead instantly kill you.&lt;/p&gt;&#xA;&lt;p&gt;The first boss was a ship with some sort of long &amp;quot;tentacles&amp;quot; made of circles sprites.&lt;/p&gt;&#xA;&lt;p&gt;I played it around 1982 or something like that.&lt;/p&gt;&#xA;&lt;p&gt;EDIT: it was an arcade game that I used to play in a pizzeria near my house. It was way before the time of Xenon 2, the next year my parents bought me a ZX spectrum 16K&lt;/p&gt;&#xA;" OwnerUserId="11332" LastEditorUserId="11332" LastEditDate="2021-05-13T13:44:48.600" LastActivityDate="2021-05-14T12:40:42.903" Title="Vertical shoot em up from early 80s" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19823" PostTypeId="5" CreationDate="2021-05-13T11:02:29.133" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2021-05-13T11:02:29.133" LastActivityDate="2021-05-13T11:02:29.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19824" PostTypeId="4" CreationDate="2021-05-13T11:02:29.133" Score="0" Body="The Industry Standard Architecture bus, used by historic IBM PC compatibles, and extension cards for that bus." OwnerUserId="-1" LastEditorUserId="15334" LastEditDate="2021-05-13T11:09:09.350" LastActivityDate="2021-05-13T11:09:09.350" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19825" PostTypeId="1" AcceptedAnswerId="19827" CreationDate="2021-05-13T11:06:34.317" Score="10" ViewCount="1589" Body="&lt;p&gt;I have a question which is similar to &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/14787/what-are-these-weird-long-isa-slots-on-this-386-board-not-vlb&quot;&gt;another question on this site&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;When I was a child 386 PCs came up. When buying a PC, you could read in the technical data how many 8- and 16-bit ISA slots were available.&lt;/p&gt;&#xA;&lt;p&gt;Some manufacturers advertized 386 PCs that also had slots that they called &amp;quot;32-bit ISA slots&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I have seen some photos in adverts:&lt;/p&gt;&#xA;&lt;p&gt;Such slots had a third connector beneath the 36-pin ISA connector (similar to a Vesa Local Bus connectors in 486 PCs); but the third connector had the same appearance (and pitch) as the 62- and the 36-pin connectors and about 20 pins.&lt;/p&gt;&#xA;&lt;p&gt;(&lt;a href=&quot;https://www.youtube.com/watch?v=xvKG3upHbGo&quot; rel=&quot;nofollow noreferrer&quot;&gt;This video on YouTube&lt;/a&gt; is showing a sound card which has a similar connector; however, the boards that I have seen did not have 6 additional pins but about 20 additional pins.)&lt;/p&gt;&#xA;&lt;p&gt;I couldn't find any information about such slots today and I also did not find any photo of a mainboard having such slots.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It was not EISA; EISA slots are not longer (but the connectors are heigher) than ISA slots.&lt;/li&gt;&#xA;&lt;li&gt;It was not VLB; the third connector of a VLB slot looks completely differently than the other two connectors.&lt;/li&gt;&#xA;&lt;li&gt;It was not PCI nor MCA; such slots don't have ISA-compatible connectors.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Were those slots manufacturer-specific or was there some kind of (unofficial) standard?&lt;/p&gt;&#xA;&lt;p&gt;What additional signals were available in these slots?&lt;/p&gt;&#xA;&lt;p&gt;It makes no sense to me to sell such boards if there are no cards on the market that can be connected to these slots...&lt;/p&gt;&#xA;" OwnerUserId="8712" LastEditorUserId="8712" LastEditDate="2021-05-14T20:04:34.070" LastActivityDate="2021-05-14T20:04:34.070" Title="What was the &quot;32-bit&quot; ISA bus (connector) extension for 80386 PCs?" Tags="&lt;80386&gt;&lt;isa&gt;" AnswerCount="3" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19826" PostTypeId="2" ParentId="19825" CreationDate="2021-05-13T11:46:49.893" Score="13" Body="&lt;p&gt;No, this sound card is definitely not intended for such a slot that expands the ISA slot to 32 bits.&lt;/p&gt;&#xA;&lt;p&gt;This is a Compaq-specific sound card meant for a Compaq-specific ISA slot extension. There is no more than the six pins for Compaq-specific audio extensions.&lt;/p&gt;&#xA;&lt;p&gt;Based on a few pictures of the card, it simply routes some audio signals between card and backplane. Most likely it allows for routing the PC speaker beeps to pass on to the sound card, and allows the audio played by the sound card to drive the internal speaker.&lt;/p&gt;&#xA;&lt;p&gt;The motherboards that have custom ISA extensions for memory boards contain enough address, data and control signals for connecting 32-bit wide memory bus to memory chips.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-05-13T11:54:51.107" LastActivityDate="2021-05-13T11:54:51.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19827" PostTypeId="2" ParentId="19825" CreationDate="2021-05-13T11:56:31.713" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Were those slots manufacturer-specific or was there some kind of (unofficial) standard?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Manufacturer specific.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Well, there was EISA, but I guess it's safe to assume that this question is explicitly not about EISA)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What additional signals were available in these slots?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Most likely D16..31 and A24..31. Plus maybe BE0..3 - and that's where the main issue with a 32-bit ISA extension starts: The (write) access to any combination of 1..4 bytes on any of the 4 'byte' groups a 386 could perform.&lt;/p&gt;&#xA;&lt;p&gt;Extending 32-bit access to I/O would have been a rather high effort in board logic. So all ISA expansions for 32-bit I know do this only for memory access, which gets handled in a different, new protocol, with all primary control on the new connector.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, there is a video on YouTube showing a sound card which is obviously intended for such a slot.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By offering just 6 additional signals? Not very likely. I'd rather assume the third 'connector' carries signals like Sound-Out and Mic-In. Adding such a connector would save the installation of 1-3 cables, quite helpful in getting production cost down - not to mention that it removes all need to know which cable goes where. So installation of a sound card would be reduced to simply plugging it into that specific slot.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(So these slots were not intended for memory expansion.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;All 386 extensions to ISA that &lt;em&gt;I&lt;/em&gt; know of were first of all meant to host memory expansions. Keep in mind that introduction of the 386 to PCs falls into a short window before (widespread) use of memory modules, so having memory boards was the only way to go.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-05-13T12:24:24.180" LastActivityDate="2021-05-13T12:24:24.180" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19828" PostTypeId="2" ParentId="19825" CreationDate="2021-05-13T11:57:09.067" Score="6" Body="&lt;p&gt;The 32-bit extension to ISA was &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Extended_Industry_Standard_Architecture&quot; rel=&quot;noreferrer&quot;&gt;Extended ISA&lt;/a&gt; but it doesn’t add any additional connectors, instead adding extra pins to the part of the existing edge connector that is reserved for insulation.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2021-05-13T11:57:09.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19831" PostTypeId="1" CreationDate="2021-05-13T18:27:10.103" Score="6" ViewCount="184" Body="&lt;p&gt;ECMA defined a filesystem for floppy disks which appears to take inspiration from the tape labels used on mainframe and minicomputer tape systems (note the use of &amp;quot;VOL1&amp;quot; and &amp;quot;HDR1&amp;quot; labels). It was published in successive updates across three ECMA standards:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.ecma-international.org/publications-and-standards/standards/ecma-58/&quot; rel=&quot;noreferrer&quot;&gt;ECMA-58&lt;/a&gt;: &lt;em&gt;Flexible disk cartridge labelling and file structure for information interchange&lt;/em&gt; (2nd edition, January 1981)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.ecma-international.org/publications-and-standards/standards/ecma-67/&quot; rel=&quot;noreferrer&quot;&gt;ECMA-67&lt;/a&gt;: &lt;em&gt;130 mm flexible disk cartridge labelling and file structure&lt;/em&gt; (1st edition, January 1981)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.ecma-international.org/publications-and-standards/standards/ecma-91/&quot; rel=&quot;noreferrer&quot;&gt;ECMA-91&lt;/a&gt;: &lt;em&gt;Flexible disk cartridges - File structure and labelling for information interchange&lt;/em&gt; (1st edition, March 1984)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;(I haven't studied the differences between those three standards in detail, but from a cursory inspection they all appear to share the same basic disk layout.)&lt;/p&gt;&#xA;&lt;p&gt;The disk layout was based on reserving cylinder 0 (the &amp;quot;Index Cylinder&amp;quot;) for storing metadata, as follows (based on ECMA-91 March 1984 page 7):&lt;/p&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Side&lt;/th&gt;&#xA;&lt;th&gt;Sector&lt;/th&gt;&#xA;&lt;th&gt;Use&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0&lt;/td&gt;&#xA;&lt;td&gt;1 to 4&lt;/td&gt;&#xA;&lt;td&gt;reserved for system use (likely used for boot loader or proprietary extensions)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0&lt;/td&gt;&#xA;&lt;td&gt;5&lt;/td&gt;&#xA;&lt;td&gt;Error Map label (ERMAP)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0&lt;/td&gt;&#xA;&lt;td&gt;6&lt;/td&gt;&#xA;&lt;td&gt;reserved for future standardisation&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0&lt;/td&gt;&#xA;&lt;td&gt;7&lt;/td&gt;&#xA;&lt;td&gt;Volume label (VOL1)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;0&lt;/td&gt;&#xA;&lt;td&gt;8 to end&lt;/td&gt;&#xA;&lt;td&gt;File labels (HDR1)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;1&lt;/td&gt;&#xA;&lt;td&gt;0 to end&lt;/td&gt;&#xA;&lt;td&gt;File labels (HDR1)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;It has some interesting features which suggest to me that it was primarily intended for use with minicomputer and mainframe systems rather than with microcomputers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Support for multivolume files (a single file spanning multiple floppy disks)&lt;/li&gt;&#xA;&lt;li&gt;files contain either fixed-length, variable-length or &amp;quot;segmented&amp;quot;, with a specified record length, and blocked or unblocked records. Unblocked means a single file record per a disk sector. Blocked means a disk record can contain multiple file records. Variable-length records are prefixed with a record control word (RCW) to give the record-length. The difference between &amp;quot;variable-length&amp;quot; and &amp;quot;segmented&amp;quot;, is in fixed and variable-length records the whole record must fit in a single disk sector, whereas segmented records are variable length records allowed to span disk sectors&lt;/li&gt;&#xA;&lt;li&gt;file expiration dates&lt;/li&gt;&#xA;&lt;li&gt;primitive access control – each file, or the volume as a whole, can be associated with a single letter (the &amp;quot;accessibility indicator&amp;quot;) which indicates who is allowed to access it&lt;/li&gt;&#xA;&lt;li&gt;recording file organisation as sequential (&lt;code&gt;S&lt;/code&gt;). This left open the standard to support non-sequential files (such as indexed files) in the future, although such support was never standardised&lt;/li&gt;&#xA;&lt;li&gt;the index cylinder should be formatted with 128 byte sectors, but subsequent cylinders can be formatted with 128, 256, 512 or 1024 byte sectors. And if the index cylinder is formatted with sectors bigger than 128 bytes, only the first 128 bytes of each sector should be used&lt;/li&gt;&#xA;&lt;li&gt;use of a flag byte in the sector header to mark sectors as deleted (&lt;code&gt;D&lt;/code&gt;) or defective (&lt;code&gt;F&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Later, ECMA standardised FAT (as &lt;a href=&quot;https://www.ecma-international.org/publications-and-standards/standards/ecma-107/&quot; rel=&quot;noreferrer&quot;&gt;ECMA-107&lt;/a&gt;: &lt;em&gt;Volume and file structure of disk cartridges for information interchange&lt;/em&gt;, 2nd edition, June 1995), and later ECMA floppy disk standards (such as &lt;a href=&quot;https://www.ecma-international.org/publications-and-standards/standards/ecma-78/&quot; rel=&quot;noreferrer&quot;&gt;ECMA-78&lt;/a&gt;: &lt;em&gt;Data interchange on 130 mm flexible disk cartridges using MFM recording at 7 958 ftprad on 80 tracks on each side&lt;/em&gt;, 2nd edition, June 1986) allowed a choice of either the ECMA-58/67/91 filesystem or the FAT-compatible ECMA-107.&lt;/p&gt;&#xA;&lt;p&gt;My question is: which operating systems supported the ECMA-58/67/91 floppy disk filesystem? I've searched for information on this but can't find anything information about implementations of the standards as opposed to the standards themselves.&lt;/p&gt;&#xA;" OwnerUserId="17803" LastActivityDate="2021-05-15T03:57:08.790" Title="Which operating systems supported the ECMA-58/ECMA-67/ECMA-91 floppy disk filesystem?" Tags="&lt;file-system&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19832" PostTypeId="2" ParentId="19831" CreationDate="2021-05-13T18:45:37.160" Score="2" Body="&lt;p&gt;The &lt;code&gt;VOL1&lt;/code&gt; and &lt;code&gt;HDR1&lt;/code&gt; labels are part of the &lt;a href=&quot;http://bitsavers.org/pdf/ibm/floppy/GA21-9182-3_Diskette_General_Information_Manual_Sep77.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM standard for floppy disks&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So without having compared details, I'd assume the ECMA standards are the corresponding European standard.&lt;/p&gt;&#xA;&lt;p&gt;Which means OS supporting this standard would be IBM OSs and other OSs which used it (e.g. the Olivetti P6060, and probably many more).&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="15334" LastEditDate="2021-05-15T03:57:08.790" LastActivityDate="2021-05-15T03:57:08.790" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="19833" PostTypeId="2" ParentId="19641" CreationDate="2021-05-13T21:35:32.413" Score="0" Body="&lt;p&gt;In a macro language with an IBM-like syntax, local labels are implementable with macros defined approximately as&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; macro&#xA;&amp;amp;a lbl                 define a label&#xA; gblc &amp;amp;b(9),&amp;amp;f(9)&#xA; aif (&amp;amp;f(&amp;amp;a) eq '').n&#xA;&amp;amp;b(&amp;amp;a) setc &amp;amp;f(&amp;amp;a)     copy from forward to backward list&#xA; ago .e&#xA;.n anop&#xA;&amp;amp;b(&amp;amp;a) setc 'm&amp;amp;sysndx' will be backward-referenced, assign a name&#xA;.e anop&#xA;&amp;amp;b(&amp;amp;a) nop&#xA; mend&#xA; macro&#xA;&amp;amp;lab mbr &amp;amp;insn,&amp;amp;targ,&amp;amp;dir&#xA; gblc &amp;amp;b(9),&amp;amp;f(9)&#xA; aif (&amp;amp;dir ne 'b').f&#xA; aif (&amp;amp;b(&amp;amp;targ) ne '').d&#xA; mnote label &amp;amp;targ not previously defined&#xA; ago .e&#xA;.d anop&#xA;&amp;amp;lab &amp;amp;insn &amp;amp;b(&amp;amp;targ)&#xA; ago .e&#xA;.f aif (&amp;amp;dir eq 'f').ff&#xA; mnote direction must be b or f&#xA; ago .e&#xA;.ff aif (&amp;amp;f(&amp;amp;targ) ne '').ff2&#xA;&amp;amp;f(&amp;amp;targ) setc 'm&amp;amp;sysndx'&#xA;.ff2 anop&#xA;&amp;amp;lab &amp;amp;insn &amp;amp;f(&amp;amp;targ)&#xA;.e mend&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2021-05-13T21:35:32.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19834" PostTypeId="1" CreationDate="2021-05-13T10:45:52.720" Score="2" ViewCount="150" Body="&lt;p&gt;I've been doing some research into 3D mice. Pretty much the only game in town is the space mouse from 3Dconnexion.&lt;/p&gt;&#xA;&lt;p&gt;In doing this I discovered that its original designer John Hilton left after the acquisition and went on to form a company called Spatial Freedom which produced a rival controller called &amp;quot;Astroid&amp;quot;. See &lt;a href=&quot;https://www.digitalengineering247.com/article/whats-not-to-like-about-astroid&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.digitalengineering247.com/article/whats-not-to-like-about-astroid&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Pretty much all evidence of this company and product seems to have been eliminated from the internet. Does anyone know what happened?&lt;/p&gt;&#xA;&lt;p&gt;I can think of three possibilities:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the company was bought out&lt;/li&gt;&#xA;&lt;li&gt;3Dconnexion sued over the similarity and they were forced to fold&lt;/li&gt;&#xA;&lt;li&gt;The company folded due to being unable to carve out a niche of its own&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Evidence&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;spatialfreedom.com site is parked&lt;/p&gt;&#xA;&lt;p&gt;Implication: the company folded&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;no videos from Spatial Freedom or about Astroid on YouTube&lt;/p&gt;&#xA;&lt;p&gt;Guess: they were pulled by YouTube at the request of 3Dconnexion’s lawyers&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I've recently discovered an attempt to create an open hardware version &lt;a href=&quot;https://github.com/mattogodoy/mighty-mouse&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/mattogodoy/mighty-mouse&lt;/a&gt; which I like the look of.&#xA;If the answer to this question is 2 that project would be under threat.&lt;/p&gt;&#xA;&lt;p&gt;However according to &lt;a href=&quot;https://spacemice.org/pdf/Astroid_Whitepaper.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://spacemice.org/pdf/Astroid_Whitepaper.pdf&lt;/a&gt;,&#xA;the Astroid was based on a new design for which a new patent was at least sought.&lt;/p&gt;&#xA;&lt;p&gt;A search shows 3Dconnexion own some patents which cover their products&#xA;e.g &lt;a href=&quot;https://patents.justia.com/assignee/3dconnexion-gmbh&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://patents.justia.com/assignee/3dconnexion-gmbh&lt;/a&gt;.&#xA;They seem dubiously broad to my &amp;quot;open source&amp;quot; mindset but money and lawyers...&lt;/p&gt;&#xA;" OwnerUserId="11079" OwnerDisplayName="Bruce Adams" LastEditorUserId="15334" LastEditDate="2021-05-14T17:17:26.050" LastActivityDate="2021-05-14T17:17:26.050" Title="What happened to Spatial Freedom and the Astroid controller?" Tags="&lt;history&gt;&lt;input-devices&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19835" PostTypeId="2" ParentId="19834" CreationDate="2021-05-13T13:49:54.673" Score="3" Body="&lt;p&gt;Here's a contemporary (ca. 2013) &lt;a href=&quot;https://web.archive.org/web/20130730044911/http://www.spatialfreedom.com/downloads/Astroid%20White%20Paper.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;White Paper&lt;/a&gt; produced by the company.&lt;/p&gt;&#xA;&lt;p&gt;There was one US patent granted, which (US7706916B2) has &amp;quot;Status&#xA;Expired - Fee Related&amp;quot; and another which (US20080252661A1)  was abandoned.&lt;/p&gt;&#xA;&lt;p&gt;The inventor has other patents in his name, some unrelated to 3D mice and some assigned to Spaceball Technologies Inc.&lt;/p&gt;&#xA;&lt;p&gt;By far and away the easiest way to find out the history would be to contact the erstwhile principal of Spatial Freedom and &lt;em&gt;ask&lt;/em&gt;. His association with the corporation seems to have ended in 2014 one way or another. His Linkedin profile is here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9sBrj.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9sBrj.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7683" OwnerDisplayName="Spehro Pefhany" LastActivityDate="2021-05-13T13:49:54.673" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19836" PostTypeId="2" ParentId="19822" CreationDate="2021-05-14T08:02:53.447" Score="5" Body="&lt;p&gt;It's a little later than 1982 but I think this is SNK's &lt;a href=&quot;https://strategywiki.org/wiki/ASO:_Armored_Scrum_Object/Tile_items&quot; rel=&quot;nofollow noreferrer&quot;&gt;'Alpha Mission'&lt;/a&gt;, also known as 'ASO : Armored Scrum Object'.&lt;/p&gt;&#xA;&lt;p&gt;It has standard pickups for power-ups but also brown versions which are 'power downs'. The ship has various armour sets that you can switch between, changing the appearance. The stage 1 boss is a round sprite tentacle affair.&lt;/p&gt;&#xA;" OwnerUserId="3912" LastEditorUserId="3912" LastEditDate="2021-05-14T12:40:42.903" LastActivityDate="2021-05-14T12:40:42.903" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19837" PostTypeId="1" CreationDate="2021-05-14T20:08:24.977" Score="4" ViewCount="235" Body="&lt;p&gt;OK so this is really old school. Back in the 1980s, as a latchkey kid, I played on the computers in the library in elementary and middle school. There was this one bizarre educational game that I'd love to find more about.&lt;/p&gt;&#xA;&lt;p&gt;It involved connecting a bunch of nodes with wires, creating a big rube goldberg contraption that did things to words or numbers. Press the play button and stuff pops out of some of the nodes, travels along all the little conveyer belts, interacts in some other nodes, and pops out in various places. It was a very &amp;quot;just play with it and see what it does&amp;quot; kind of game. I forget if there was even a purpose, like being required to get a certain output into a bucket or something.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;The Incredible Machine&amp;quot; is close but no cigar. It's not falling objects in a literal rube goldberg machine, it's squares connected by wires, like some modern day audio-processing pro software:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9WuCX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9WuCX.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But this was a kiddie game. Mid-80s.&lt;/p&gt;&#xA;&lt;p&gt;Cross-posted on Mathematics Education: &lt;a href=&quot;https://matheducators.stackexchange.com/questions/20888/looking-for-an-educational-game-from-long-ago-possibly-called-mother-goose&quot;&gt;https://matheducators.stackexchange.com/questions/20888/looking-for-an-educational-game-from-long-ago-possibly-called-mother-goose&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21737" LastEditorUserId="21737" LastEditDate="2021-05-15T15:42:49.123" LastActivityDate="2021-05-15T15:42:49.123" Title="Looking for an educational game from long ago" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="19839" PostTypeId="1" CreationDate="2021-05-14T21:58:06.960" Score="3" ViewCount="125" Body="&lt;p&gt;Is there a documented way of performing a DNS lookup in VXD-land? Windows 98 provides TCP/IP-32 VXD that mimics the function of the Windows NT/2000 TDI, however this interface usually works with IP-addresses. Performing a DNS-lookup is fairly trivial in ring-3 however the WSOCK VXD layer does not seem to be be documented.&lt;/p&gt;&#xA;" OwnerUserId="21719" LastActivityDate="2021-05-14T21:58:06.960" Title="How to perform a DNS lookup in a VXD?" Tags="&lt;windows-98&gt;&lt;windows&gt;&lt;windows-me&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19840" PostTypeId="2" ParentId="19837" CreationDate="2021-05-15T10:31:16.573" Score="1" Body="&lt;p&gt;If it isn't &lt;em&gt;Rocky's Boots&lt;/em&gt;, then it sounds like one of the &lt;em&gt;&lt;strong&gt;Reader Rabbit&lt;/strong&gt;&lt;/em&gt; games, like &lt;em&gt;Word Factory&lt;/em&gt; or &lt;em&gt;Reader Rabbit 2&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I'm not too familiar with them, but &lt;em&gt;Reader Rabbit&lt;/em&gt; games seem to revolve around series of minigames involving reassembling words, moving them about in factories and various match-up games.&lt;/p&gt;&#xA;&lt;p&gt;Bear in mind that there are a &lt;em&gt;lot&lt;/em&gt; of &lt;em&gt;Reader Rabbit&lt;/em&gt; games, all with different minigames, so you should look through screenshots of them all to see if you can find your node-drawing game among them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0ECKJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0ECKJ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19066" LastActivityDate="2021-05-15T10:31:16.573" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19842" PostTypeId="1" CreationDate="2021-05-15T16:01:16.697" Score="8" ViewCount="327" Body="&lt;p&gt;Soon after learning the C language in the late 80s, before an ANSI C compiler was available on the machines I was using, it occurred to me to check if the following compiles&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;int a, b, c;&#xA;foo() {&#xA;    (a == 0 ? b : c) = 1;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and it did! The compiler has propagated the Lvalue property of the last two operands of the ternary expression to the expression itself. For a while, I amused people by demonstrating them that &amp;quot;Easter egg&amp;quot; in the compiler.&lt;/p&gt;&#xA;&lt;p&gt;Now, of course, according to the ANSI C standard, we have to write &lt;code&gt;*(a == 0 ? &amp;amp;b : &amp;amp;c)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;However, I cannot remember or figure out which compiler it was. The original K&amp;amp;R compiler I tried on an online PDP-11 simulator says &amp;quot;3: Lvalue required&amp;quot;, as well as a compiler used in BSD 2.9 (PCC-based, I guess?).&lt;/p&gt;&#xA;&lt;p&gt;It could have been a compiler on MS-DOS, but I remember that at least one compiler on a UNIX platform also allowed that.&lt;/p&gt;&#xA;&lt;p&gt;I'm not trying to find out exactly which one it was in my case, or which one was the earliest; an example of a pre-ANSI C compiler written in the 70-80s for any commercially-available platform/OS which existed at the time and which compiles the above test case would be enough.&lt;/p&gt;&#xA;&lt;p&gt;Googling &amp;quot;lvalue ternary expression&amp;quot; yields discussions about the fact that a ternary expression can be an Lvalue in C++ but not in the contemporary C.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="4025" LastEditDate="2021-05-15T16:20:36.240" LastActivityDate="2021-05-17T23:04:13.137" Title="Which pre-ANSI C compilers allowed a ternary expression as Lvalue?" Tags="&lt;history&gt;&lt;c&gt;&lt;identify-this-software&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19843" PostTypeId="2" ParentId="18301" CreationDate="2021-05-15T17:22:00.093" Score="0" Body="&lt;p&gt;There was a tool from Borland that came with Borland Delphi 1.0.  You pointed it at an EXE and it would show you all the resources that were embedded in the file.&lt;/p&gt;&#xA;&lt;p&gt;It was extremely useful.  I don't remember the name of the application, maybe something like &amp;quot;Resource Viewer&amp;quot; or &amp;quot;Resource Manager&amp;quot;?  Maybe something like that.&lt;/p&gt;&#xA;&lt;p&gt;If I recall, Borland was forced to stop shipping this tool with future versions of Delphi as it violated some kind of license agreements or something.&lt;/p&gt;&#xA;&lt;p&gt;Maybe if you can find an old copy of the Delphi 1.0 CDs, you might find the tool there.  I hope this helps!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE: Here it is, &amp;quot;Resource Workshop&amp;quot; ...&lt;/strong&gt; &lt;a href=&quot;https://vetusware.com/download/Borland%20Resource%20Workshop%205.02/?id=13304&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://vetusware.com/download/Borland%20Resource%20Workshop%205.02/?id=13304&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21076" LastEditorUserId="21076" LastEditDate="2021-05-15T21:49:34.420" LastActivityDate="2021-05-15T21:49:34.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19844" PostTypeId="1" CreationDate="2021-05-15T18:53:50.740" Score="1" ViewCount="83" Body="&lt;p&gt;For a long time now, I've been looking for disk images from an Olivetti P6060, but so far I've found none.&lt;/p&gt;&#xA;&lt;p&gt;The Olivetti P6060 was the second computer I wrote programs on, so making an emulator for it is something that has a lot of nostalgic value for me, but for that, I need the disk images.&lt;/p&gt;&#xA;&lt;p&gt;So if anyone knows of any places where there are available, pointers would be appreciated.&lt;/p&gt;&#xA;&lt;p&gt;(And since @Raffzahn has &lt;a href=&quot;https://i.stack.imgur.com/ZWkuQ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;one&lt;/a&gt; next &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/19832/148&quot;&gt;to his desk&lt;/a&gt;, maybe he could help out?)&lt;/p&gt;&#xA;&lt;p&gt;(And why does stackoverflow have no private mail system?)&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="15334" LastEditDate="2021-05-18T19:03:11.290" LastActivityDate="2021-05-18T19:03:11.290" Title="Where can I obtain Olivetti P6060 disk images?" Tags="&lt;emulation&gt;&lt;disk-image&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19845" PostTypeId="1" CreationDate="2021-05-15T21:19:42.813" Score="13" ViewCount="938" Body="&lt;p&gt;According to a &lt;a href=&quot;https://www.digm.com/UNITE/2019/2019-Origins-Burroughs-Algol.pdf&quot; rel=&quot;noreferrer&quot;&gt;2019 presentation about Burroughs Extended Algol&lt;/a&gt;, the Burroughs B5000 and B5500 (and presumably their descendants) had “Hardware support for Call-by-Name (‘thunks’)”. It goes on to say that&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;One of the most challenging features of Algol-60 was its call-by-name semantics, which required&#xA;dynamic evaluation of expressions passed as procedure parameters each time they were referenced. The B5000 included hardware features to make this efficient and easy to implement in compilers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I understand that the presentation is not implying that the computer actually performed &lt;a href=&quot;https://www.masswerk.at/algol60/report.htm#4_7_3_2&quot; rel=&quot;noreferrer&quot;&gt;the textual substitution described in the Algol report&lt;/a&gt;, but rather that some feature(s) of the computer facilitated implementing an equivalent operation. What were these features?&lt;/p&gt;&#xA;" OwnerUserId="19767" LastEditorUserId="19767" LastEditDate="2021-05-15T22:39:16.367" LastActivityDate="2021-05-16T19:48:10.087" Title="How did the Burroughs B5000/B5500 provide hardware support for implementing Algol's call-by-name?" Tags="&lt;early-computer&gt;&lt;algol&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19846" PostTypeId="1" AcceptedAnswerId="19861" CreationDate="2021-05-16T03:18:12.780" Score="7" ViewCount="611" Body="&lt;p&gt;Computers of the first half of the 20th century generally used relays or vacuum tubes as their logic elements.  Each of these components has there own methods of failure, but relays and tubes have a much shorter life than the transistors and integrated circuits that later replaced them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Was there a study comparing the reliability or lifespan of relays and vacuum tubes used in computers?&lt;/strong&gt;  Which kind had a longer mean-time-between-failure or was considered more reliable?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The answer to &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/19847/10260&quot;&gt;Why were relays prevalent in early 1940s computers when vacuum tubes were also available?&lt;/a&gt; appears to have nothing to do with reliability, the subject of this question.&lt;/p&gt;&#xA;" OwnerUserId="10260" LastEditorUserId="10260" LastEditDate="2021-05-17T01:52:01.330" LastActivityDate="2021-05-17T18:27:12.983" Title="Have there been any studies comparing the reliability of relay versus vacuum tube computers?" Tags="&lt;history&gt;&lt;relay-computer&gt;&lt;vacuum-tube&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19847" PostTypeId="1" CreationDate="2021-05-16T04:09:10.407" Score="34" ViewCount="5397" Body="&lt;p&gt;Many of of the computers built in the 1940s used relays for logic (see &lt;a href=&quot;https://en.wikipedia.org/wiki/Mechanical_computer#Electro-mechanical_computers&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Category:Electro-mechanical_computers&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bell Labs Model I, 1940&lt;/li&gt;&#xA;&lt;li&gt;Bletchley Park Bombe, 1940&lt;/li&gt;&#xA;&lt;li&gt;Zuse Z2, 1940&lt;/li&gt;&#xA;&lt;li&gt;Zuse Z3, 1941&lt;/li&gt;&#xA;&lt;li&gt;Bell Labs Model II, 1943&lt;/li&gt;&#xA;&lt;li&gt;Bell Labs Model III, 1944&lt;/li&gt;&#xA;&lt;li&gt;Harvard Mark I, 1944&lt;/li&gt;&#xA;&lt;li&gt;Bell Labs Model IV, 1945&lt;/li&gt;&#xA;&lt;li&gt;Zuse Z4, 1945&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bell Labs Model V, 1946&lt;/li&gt;&#xA;&lt;li&gt;Harvard Mark II, 1947&lt;/li&gt;&#xA;&lt;li&gt;IBM SSEC, 1948&lt;/li&gt;&#xA;&lt;li&gt;Bell Labs Model VI, 1949&lt;/li&gt;&#xA;&lt;li&gt;Office of Naval Research Relay Computer, 1949&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;However, vacuum tubes were already available in this era.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/Triode#Invention&quot; rel=&quot;noreferrer&quot;&gt;triode&lt;/a&gt; was invented in 1906, various &lt;a href=&quot;https://en.wikipedia.org/wiki/Tetrode&quot; rel=&quot;noreferrer&quot;&gt;tetrodes&lt;/a&gt; from 1913 to 1927, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pentode&quot; rel=&quot;noreferrer&quot;&gt;pentode&lt;/a&gt; in 1926.  &lt;em&gt;Some&lt;/em&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_vacuum_tube_computers&quot; rel=&quot;noreferrer&quot;&gt;computers&lt;/a&gt; were starting to be made with vacuum tubes during the 1940s:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Atanasoff–Berry Computer, 1942&lt;/li&gt;&#xA;&lt;li&gt;Bletchley Park Colossus, 1943&lt;/li&gt;&#xA;&lt;li&gt;ENIAC, 1945&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Manchester Baby, 1948&lt;/li&gt;&#xA;&lt;li&gt;Manchester Mark 1, 1949&lt;/li&gt;&#xA;&lt;li&gt;EDSAC, 1949&lt;/li&gt;&#xA;&lt;li&gt;BINAC, 1949&lt;/li&gt;&#xA;&lt;li&gt;CSIRAC, 1949&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The divider lines above split the wartime and postwar halves of the decade.  Late 1940s computer models appear to be equally divided between relay and vacuum tube, but the early half of the decade had three times as many relay models as vacuum tube.  &lt;strong&gt;Why were early 1940s computers predominantly made from relays?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;(&amp;quot;Because that was what was available&amp;quot; may possibly be an answer, but it needs to be supported by a reputable source, rather than speculation or argument.)&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Possibly related: &lt;a href=&quot;https://retrocomputing.stackexchange.com/q/19846/10260&quot;&gt;Have there been any studies comparing the reliability of relay versus vacuum tube computers?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2021-05-27T20:07:31.943" Title="Why were relays prevalent in early 1940s computers when vacuum tubes were also available?" Tags="&lt;history&gt;&lt;relay-computer&gt;&lt;vacuum-tube&gt;" AnswerCount="7" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19848" PostTypeId="2" ParentId="19847" CreationDate="2021-05-16T04:26:09.350" Score="60" Body="&lt;p&gt;Using relays to implement logic functions was already quite well understood at that time, and in fact the Post Office type relays were designed to do just that as part of the telephone system.  The fact that relays were also very reliable, could run on relatively low voltages, and were relatively power efficient were also marks in their favour.&lt;/p&gt;&#xA;&lt;p&gt;The major downside was that relays switch rather slowly, and this limits the speed of the resulting computer; this could be addressed in part by using smaller relays, but note that even the &amp;quot;one instruction per second&amp;quot; Harwell Witch was considered fast enough to be useful, largely because it was reliable and, unlike a human with a mechanical desk calculator, could work day and night without pause and without mistakes.&lt;/p&gt;&#xA;&lt;p&gt;By contrast, thermionic valves were primarily used for &lt;em&gt;analogue&lt;/em&gt; functions at that time, and their use for implementing digital logic was not immediately obvious to people who hadn't already done it as part of (top secret) wartime work.  Even the analogue computers of the time, primarily built for fire control, were mainly mechanical with only a few electronic components.  These valves typically required over a hundred volts of bias and a continuous cathode heater current, the latter of which made using more than about a dozen of them in any given device a daunting prospect from a heat dissipation standpoint.&lt;/p&gt;&#xA;&lt;p&gt;It was also believed at the time, and not without reason, that valves were simply not reliable enough to be used in their thousands in a single machine, even assuming the power supply and heat problems were solved.  The quality of valve manufacturing had improved dramatically during the war due to the sophisticated radio equipment needed in quantity.  It was later discovered that running the cathode heaters below rated power and avoiding the thermal cycling of switching the machine on and off could improve reliability markedly, which helped to encourage experimentation with valves in digital computers.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastActivityDate="2021-05-16T04:26:09.350" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="19849" PostTypeId="2" ParentId="19845" CreationDate="2021-05-16T05:56:57.407" Score="4" Body="&lt;p&gt;Purely from the first principles, given that Burroughs was a &lt;a href=&quot;https://en.wikipedia.org/wiki/Tagged_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;tagged architecture&lt;/a&gt;, it would be logical to pass arguments by name by setting the corresponding formal parameter to either the address of the actual parameter if it was an l-value (assignable) with one tag, or the address of the thunk computing the actual parameter expression with another tag, and, if the tag was of the latter kind, to make the indirect load instruction perform an indirect function call instead, and the indirect write instruction - to trap.&lt;/p&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2021-05-16T05:56:57.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19850" PostTypeId="2" ParentId="1666" CreationDate="2021-05-16T08:29:41.270" Score="1" Body="&lt;p&gt;If you object using non-demo ida pro, you can try &lt;a href=&quot;https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Processors&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ghidra&lt;/a&gt; tool, which is much like ida pro (and not simply an disassembler!). It is open source and does support 68000.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2021-05-16T08:29:41.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19851" PostTypeId="2" ParentId="19846" CreationDate="2021-05-16T12:26:58.423" Score="10" Body="&lt;p&gt;I'm going to suggest that this is very much asking to compare &amp;quot;apples to oranges&amp;quot;.  Vacuum tubes have MTBF values based on their design and operating conditions but they don't experience any &amp;quot;wear and tear&amp;quot; from normal operation such as switching.&lt;/p&gt;&#xA;&lt;p&gt;Relays, on the other hand, are electromechanical devices which experience mechanical wear and will have a useful lifetime dominated by the number of cycles they can endure.  So usage patterns make all the difference.  A relay that switches only a few times per hour will last much longer than one that switches a few times per second.&lt;/p&gt;&#xA;&lt;p&gt;But both vacuum tube based computers as well as relay-based computers were very problematic and experienced significant downtime due to the need to identify and replaced failed elements.  Solid-state computers, even the early ones built with discrete transistors were at least an order of magnitude more reliable due to the much longer MTBF value of transistors.  Then the introduction of integrated circuits raised the reliability by at least another order of magnitude again due to the much longer MTBF of those devices.&lt;/p&gt;&#xA;&lt;p&gt;Today's computers very often last for their entire useful life without experiencing a hardware failure despite having several orders of magnitude more active elements in them when compared to early computers.&lt;/p&gt;&#xA;&lt;p&gt;To my knowledge nobody bothered to study the reliability of relay vs. vacuum tube systems.  The difference in speed, vacuum tubes being much faster than relays, meant that nobody in their right mind would continue to use a relay-based computer when a vacuum tube design is so much faster.&lt;/p&gt;&#xA;&lt;p&gt;Might someone have actually studied this?  Possibly, but you'll need to start digging through some very old publications.&lt;/p&gt;&#xA;" OwnerUserId="13762" LastActivityDate="2021-05-16T12:26:58.423" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19853" PostTypeId="2" ParentId="19847" CreationDate="2021-05-16T14:18:34.780" Score="17" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Why were early 1940s computers predominantly made from relays?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It was the technology proven to work reliably in large scale. A computer is large scale application, something a radio isn't. Building a new application is usually done by using a proven tools, not by inventing horse and carriage at the same time one wants to introduce a delivery service.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;quot;Because that was what was available&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, that's exactly the point. Plus:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;It's good enough for the job&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;as the task at hand was not creating a fantasy device with the most advanced technology possible, but a device that solves the task of creating a working computer.&lt;/p&gt;&#xA;&lt;p&gt;Relays were not only already operating, binary and well proven, but equally importantly, proven to be reliable in large scale applications. Valves in contrast are analogue devices that were only used in small numbers per application. A radio may need just one, but even the ABC, a non-programmable fixed-function calculator, used &lt;strong&gt;300&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Beside the much higher effort to control 300 valves instead of a similar number of relays, its power consumption, the introduced failure rate goes to the power of devices.&lt;/p&gt;&#xA;&lt;p&gt;An all to gain something that isn't asked for?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;At that point it's always important to keep in mind that the most significant gain in speed is not making the fastest computer possible, but making a computer at all.&lt;/strong&gt; Having a Z3-like machine with 20 multiplications a minute will be many thousand times faster than doing it by hand. Making it twice or even 10 times faster isn't as much of a gain, and not worth the additional effort and delay.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;A great example here is Zuse and his friend &lt;a href=&quot;https://en.wikipedia.org/wiki/Helmut_Schreyer&quot; rel=&quot;noreferrer&quot;&gt;Helmut Schreyer&lt;/a&gt;'s attempt to build a valve based-computer. Schreyer built basic digital circuits (logic gates, flip-flop *1) with valves as early as 1937. In 1938, Zuse and Schreyer demonstrated a basic valve setup for a computer at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Technical_University_of_Berlin&quot; rel=&quot;noreferrer&quot;&gt;TH Berlin&lt;/a&gt; (Berlin Institute of Technology) - in part as attempt to get funding for a 2000 valve machine. It got rejected as unrealistic idea (Phantasterei), but lead to acquiring funds for the later (relay-based) Z3. This was obviously seen as more realistic than a valve based computer (*2). &lt;a href=&quot;https://web.archive.org/web/20160316213832/http://www.nue.tu-berlin.de/?id=65423&quot; rel=&quot;noreferrer&quot;&gt;See here&lt;/a&gt; for some comments by Konrad Zuse made in 1989 (Sorry, only German :))&lt;/p&gt;&#xA;&lt;p&gt;Bottom line:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Let's first build a working computer and use it before going about science fiction devices :)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Also known as avoiding premature optimization.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;may possibly be an answer, but it needs to be supported by a reputable source, rather than speculation or argument.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sorry, but that's asking exactly for argumentation done in hindsight. Why should have someone reasoned for (i.e. defended) not using an upcoming technology (valves vs. relays), when the primary concern is to create/prove an application (i.e. a computer), not proving that new technology?&lt;/p&gt;&#xA;&lt;p&gt;Schreyer's developments do very clearly show that the implications of valves as switches were understood, but simply deemed too far-fetched, no matter how hard their proponents pushed. There was no need to use them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&amp;quot;Why haven't they done X when its so obvious that Y is better'&lt;/em&gt; is quite related to a &lt;a href=&quot;https://en.wikipedia.org/wiki/Hindsight_bias&quot; rel=&quot;noreferrer&quot;&gt;hindsight bias&lt;/a&gt;. Asking for &amp;quot;reputable sources, not argument&amp;quot; doubles down on this, as any such must be contemporary to (or before) the design in question, a point where this reasoning isn't of any concern. Or would anyone today make a (serious) reasoning about not using personal flight devices for a pizza delivery service?&lt;/p&gt;&#xA;&lt;p&gt;Such reasoning will (and needs) only be made when the new(er) technology is proven to be practical and deliver a relevant benefit, outweighing any drawback.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - Schreyer received a patent for valve based computational memory in 1943.&lt;/p&gt;&#xA;&lt;p&gt;*2 - Schreyer did continue to work with valves and got his doctors degree in 1942 with &lt;em&gt;&amp;quot;Das Röhrenrelais und seine Schaltungstechnik&amp;quot;&lt;/em&gt; - literally &lt;em&gt;vacuum tube relay and its circuit technology&lt;/em&gt;. The same year he finished an experimental setup with 100 valves, somewhat comparable to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atanasoff%E2%80%93Berry_computer&quot; rel=&quot;noreferrer&quot;&gt;ABC&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-05-16T18:36:01.850" LastActivityDate="2021-05-16T18:36:01.850" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19854" PostTypeId="2" ParentId="19846" CreationDate="2021-05-16T14:37:22.833" Score="0" Body="&lt;p&gt;Tubes are inherently way less reliable than relays. Simply as they decay by operating hours, while relays only decay by the product of numbers of switching operation and (non liner) value of current switched. This is especially true with relays used strictly for logical operations, at maximum handling the current of only one (or a few) coils of other relays.&lt;/p&gt;&#xA;&lt;p&gt;This is (next to) independent of technological advances.&lt;/p&gt;&#xA;&lt;p&gt;Relays based machines got replaced by tube based for the very same reason horse drawn carts got replaced by inherently less reliable, but faster, steam and later petrol fuelled lorries:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Single deliveries got handled in shorter time,&lt;/li&gt;&#xA;&lt;li&gt;thus more deliveries could be made before the next breakdown.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Lifespan (and thus MTBF) is only a relevant metric within the same technology/use case. But the use case of tube vs. relays is one about performance delivered, not durability.If at all, then a&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Mean Load Between Failure&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;might be a more appropriate yardstick.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-05-16T14:37:22.833" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19855" PostTypeId="1" CreationDate="2021-05-16T14:52:43.047" Score="3" ViewCount="233" Body="&lt;p&gt;A few weeks back I had an issue with a Python script resetting my Amiga on execution. Someone suggested to change stack size in startup-sequence to 4096. I just read that it can be set up to 2500000.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.mattowen.co.uk/amiga/amiga-os-command-reference-help/stack.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.mattowen.co.uk/amiga/amiga-os-command-reference-help/stack.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It also says it may cause unintended system or application behaviour. What is its significance and how it is effected in layman's terms, please?&lt;/p&gt;&#xA;&lt;p&gt;Shouldn't apps and system have functionality to adjust it for the best performance at any given time?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="7946" LastEditDate="2021-05-16T15:00:07.893" LastActivityDate="2021-05-19T14:40:03.093" Title="How does stack size affect functioning of AmigaOS and programs?" Tags="&lt;amiga&gt;&lt;memory&gt;&lt;operating-system&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19856" PostTypeId="2" ParentId="19855" CreationDate="2021-05-16T15:09:19.117" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What is its significance and how it is effected in layman's terms, please?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;(not sure about the &amp;quot;layman's term&amp;quot; part)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;On the Amiga (and on a lot of other systems including modern ones), stack size is the number of bytes that the operating system reserves for &amp;quot;automatic&amp;quot; memory at program startup and places the stack pointer (A7/SP register) at the top of that reserved zone. There can be only one stack by process/task.&lt;/p&gt;&#xA;&lt;p&gt;Now, if you have an assembly program, the stack is mostly going to be used for:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;storing return address when the program calls a subroutine&lt;/li&gt;&#xA;&lt;li&gt;storing registers at start of subroutines to preserve them so the caller of the subroutine doesn't get them trashed (unless specified)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;When using compiled programs (C mainly), the stack has a more extensive usage.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;same as above but also:&lt;/li&gt;&#xA;&lt;li&gt;allocating memory for local variables, so the routines can be recursive/reentrant (call themselves/be called from several processes concurrently)&lt;/li&gt;&#xA;&lt;li&gt;parameter passing (assembly programs usually use registers, compilers use stack unless specially directives are given)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The compiler doesn't know the caller context so it &amp;quot;plays safe&amp;quot; and saves a lot of stuff. In assembly programs (generally hand written) the coder uses a lot of global variables because they know that it cannot be called recursively.&lt;/p&gt;&#xA;&lt;p&gt;That stack management explains why compiled programs generally use more stack than assembly programs.&lt;/p&gt;&#xA;&lt;p&gt;Native, old C/BCPL/assembly applications try not to &amp;quot;abuse&amp;quot; the stack so they can usually run with 4000 bytes (the default stack for the shell), and sometimes 8000, but not much more. The compilers are also Amiga-specific and use registers a lot more.&lt;/p&gt;&#xA;&lt;p&gt;Ported applications (or complex applications) like Python use a lot more stack, first because they're big, and second because most of the time &lt;code&gt;gcc&lt;/code&gt; was used to build them because Manx/Aztec-C or SAS wasn't compatible enough. Python is probably one of them, being very demanding in the compiler area.&lt;/p&gt;&#xA;&lt;p&gt;And the old versions of Amiga GCC weren't very good at optimizing (which isn't the case of the new GCC 10)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Shouldn't apps and system have functionality to adjust it for the best performance at any given time?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Old Kickstart versions didn't have a dedicated routine to &amp;quot;swap the stack&amp;quot; (of course it can be done manually in assembly). Post kick 1.3 OS have the &lt;code&gt;StackSwap&lt;/code&gt; function that does exactly this: it allocates some stack and replaces the shell stack by a bigger one. &lt;em&gt;But it has to be done at startup&lt;/em&gt;. So a C program could crash if this was called mid-program or even at the start of the &lt;code&gt;main&lt;/code&gt; program, because you can't control the startup (some linkers may have an option to increase the stack size in their &lt;code&gt;crt0.o&lt;/code&gt; startup though.&lt;/p&gt;&#xA;&lt;p&gt;That is a specific Amiga routine, so a ported program may not do that, and require that the stack is expanded before starting the program by using the &lt;code&gt;stack&lt;/code&gt; command.&lt;/p&gt;&#xA;&lt;p&gt;But the &amp;quot;at any given time&amp;quot; is a little more problematic. Stack cannot be easily moved when the program is running, as all the callers and the stack itself may have references to stack addresses (&lt;code&gt;LINK&lt;/code&gt; instruction for instance).&lt;/p&gt;&#xA;&lt;p&gt;And the OS doesn't use virtual memory/translation tables for programs, so we can't fool a program by using address translation. Not yet :)&lt;/p&gt;&#xA;&lt;p&gt;Size &lt;em&gt;can&lt;/em&gt; be reallocated at runtime (using the same base location) but it can also fail if the system cannot find a contiguous bigger block (even if there is plenty of memory somewhere else)&lt;/p&gt;&#xA;&lt;p&gt;As a conclusion, Python must have been ported with a compiler that doesn't support stack reallocation or stack reallocation options weren't used in link options: you have to use&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;stack 100000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;in the shell you're using to run the program or it will crash almost instantly by writing to memory it doesn't own. Increase if problems still persist.&lt;/p&gt;&#xA;&lt;p&gt;(note that Windows executables headers carry the stack size information, and there's no &lt;code&gt;stack&lt;/code&gt; command, but Linux/Unix still have a &lt;code&gt;stack&lt;/code&gt; equivalent (&lt;code&gt;ulimit&lt;/code&gt;) so Amiga looks more like Unix than Windows on that aspect)&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="15334" LastEditDate="2021-05-19T14:40:03.093" LastActivityDate="2021-05-19T14:40:03.093" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19857" PostTypeId="2" ParentId="19847" CreationDate="2021-05-16T15:45:53.540" Score="2" Body="&lt;p&gt;Relays had been around for a century. They are electrically controlled switches, naturally adapted to logical operations. There was a rich culture of using them as logical elements in telegraph, railway signaling, and telephone switching systems.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, use of tubes as logical switching elements was new and exotic. Rossi's &lt;a href=&quot;https://en.wikipedia.org/wiki/Coincidence_circuit#Rossi,_1930&quot; rel=&quot;nofollow noreferrer&quot;&gt;coincidence circuit&lt;/a&gt; dates from 1930. Being a pioneer in both architecture and implementation technology at the same time was too great a leap for early computer designers.&lt;/p&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2021-05-16T15:45:53.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19858" PostTypeId="2" ParentId="19847" CreationDate="2021-05-16T17:25:00.613" Score="9" Body="&lt;p&gt;An couple of under-appreciated advantages of relays over tubes is that a single relay coil could operate multiple sets of contacts, and relay contacts could easily be wired into a variety of series and parallel arrangements that don't really work with tubes.  Although relays that go beyond DPDT are today somewhat uncommon, and those that go beyond 4PDT are even more so, back in the days when relays were used for signal switching rather than power switching, they were commonly available in much wider configurations.  Until pinball machines started being controlled by microprocessors, they would routinely use relays that could have up to eight DPDT sets of contacts installed (contacts that weren't used would typically be omitted, but nearly all of the actuating mechanisms would have slots for all eight contacts).  Further, it was common to have latching relays which could be arranged in banks, with one activating coil per relay and one release coil per bank.  When using ordinary tubes, from what I can tell, a group of N valves (of which there could typically be two in each glass tube) would behave as a combination of N two-input AND gates feeding an NOR gate.  While a single output from such a tube-based gate could drive the inputs of many others, each such gate could only switch one output.  Thus, the number of valves required to perform many functions would exceed the number of relay coils needed to achieve them.&lt;/p&gt;&#xA;&lt;p&gt;If anything, what I find curious is that there wasn't more use of electromechanical logic within tube-based computers, outside of the Atanasoff Engine.  Something like the Eniac had thousands of digits of registers whose contents could be rapidly read in arbitrary sequence, but could only be set by hand.  I would think it would have been more useful to have a means by which either a punch-card or punch-tape operated device could be used to set the state of all the switches, or else replace each group of 72 digits worth of switches with a set of spring plungers located above a card slot, so that the machine could be configured simply by placing cards in all of the appropriate slots.&lt;/p&gt;&#xA;" OwnerUserId="340" LastEditorUserId="7946" LastEditDate="2021-05-16T17:33:26.243" LastActivityDate="2021-05-16T17:33:26.243" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19859" PostTypeId="2" ParentId="19845" CreationDate="2021-05-16T18:06:54.503" Score="7" Body="&lt;p&gt;Based on a reading of a document titled &lt;a href=&quot;http://bitsavers.org/pdf/burroughs/B5000_5500_5700/5000-21005_B5000_operChar.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Operational Characteristics of the processors for the Burroughs B5000&lt;/em&gt;&lt;/a&gt;, and applying a lot of interpretation, it appears that thunks are compiled in a fairly normal way.&lt;/p&gt;&#xA;&lt;p&gt;The called procedure executes either an &amp;quot;Operand Call&amp;quot; or an &amp;quot;Descriptor Call&amp;quot; operator (B5000-ish for &amp;quot;instruction&amp;quot;) in order to evaluate a parameter.  The call references a Program Descriptor in the Program Reference Table -- this is the normal sort of &amp;quot;code pointer&amp;quot; in the B5000. Subroutine-entry preamble is executed, and the thunk is entered.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In general, Operand Call syllables are used to enter a subroutine and&#xA;obtain an operand, which Descriptor Call syllables are used to enter a&#xA;subroutine to obtain an address.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(page 3-4, &amp;quot;Subroutine Entry&amp;quot;)&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Editorial) I find the description fairly opaque, in that it's written in terms of setting flip-flops and moving registers, and it's hard for me to discern the logical intent behind it.  And again, the unusual (for me) division between operation and data -- one operation code, what it does depends on the type of descriptor -- does not make it any easier.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;To summarize, I'd say that what's special here is that the instruction sequence of a procedure contains a generalized &amp;quot;get me an operand value&amp;quot; or &amp;quot;get me an operand address&amp;quot; instruction.  The instruction refers to a descriptor which then determines whether it's a simple fetch of a value, possibly indirect, or a full thunk call.&lt;/p&gt;&#xA;&lt;p&gt;(The author of this answer has no experience with B5000 systems beyond reading about them on the internet).&lt;/p&gt;&#xA;" OwnerUserId="10854" LastActivityDate="2021-05-16T18:06:54.503" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19860" PostTypeId="2" ParentId="19845" CreationDate="2021-05-16T19:42:03.153" Score="3" Body="&lt;p&gt;Partial answer:&lt;/p&gt;&#xA;&lt;p&gt;The only three features I have found in the ISA so far that I think can help with call-by-name are the following:&lt;/p&gt;&#xA;&lt;p&gt;a) As call-by-name can be used both for an assignment (&amp;quot;l-value&amp;quot; in C terms) and in an expression (&amp;quot;r-value&amp;quot;), normally you'd need two thunks for it (one to return the address as l-value, one to return the value, as returning an address may be impossible depending on the thunkified expression, and one cannot recover the address from the value). The ISA handles this by having &amp;quot;operand calls&amp;quot; for r-values and &amp;quot;descriptor calls&amp;quot; for l-values, and when a procedure is called either way, this information is stored on the stack. So the same thunk can either return an address or a value.&lt;/p&gt;&#xA;&lt;p&gt;b) Accessing a program (&amp;quot;code&amp;quot;) descriptor works differently during &amp;quot;normal&amp;quot; expression evaluation and making calls, so thunks could be potentially handled here (but I don't understand the full mechanism, see below).&lt;/p&gt;&#xA;&lt;p&gt;c) There is a &amp;quot;return special&amp;quot; operator (opcode) which is based on the stack pointer S instead of the frame pointer F. The thunk needs to execute with reference to the frame of the calling procedure, and then it also needs to unwind the stack based on this, so potentially this operator could be used to return from a thunk.&lt;/p&gt;&#xA;&lt;p&gt;But I have not seen how thunks are set up so they refer to the correct frame. Also, this can get nasty when having chains of procedure calls with call-by-name, unless you do a full closure and pass along the frame reference as additional parameter. But that would defy the &amp;quot;have hardware support for thunks&amp;quot; advertisement.&lt;/p&gt;&#xA;&lt;p&gt;I tried to use the &lt;a href=&quot;https://github.com/pkimpel/retro-b5500&quot; rel=&quot;nofollow noreferrer&quot;&gt;emulator in a browser&lt;/a&gt; to get an ALGOL program to compile and inspect the resulting code, but it doesn't work for me no matter which browser I tried. Also, it looks like inspecting the compiled code is not going to be easy, probably it needs to be dumped to &amp;quot;tape&amp;quot; or another emulated device. Maybe somebody else has more luck with that.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2021-05-16T19:48:10.087" LastActivityDate="2021-05-16T19:48:10.087" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19861" PostTypeId="2" ParentId="19846" CreationDate="2021-05-17T03:18:50.013" Score="4" Body="&lt;p&gt;There is a case study in the form of the Harwell WITCH, which is a hybrid valve-relay based computer from roughly 1950.  One of the design goals was explicitly to minimise the number of &amp;quot;hot cathode&amp;quot; valves in its design, as those were the chief source of reliability problems in the existing late-1940s experimental computers, and Harwell wanted a &lt;em&gt;reliable&lt;/em&gt; computer to do &lt;em&gt;real&lt;/em&gt; work with.&lt;/p&gt;&#xA;&lt;p&gt;The memory elements of the WITCH were made of cold-cathode Dekatron valves, each of which could store a decimal digit with decent power efficiency for the time, and as a bonus provided a human-readable indication of their contents.  Most of the control logic, including the memory selectors and instruction register, consisted of Post Office type relays which were readily available and had proven reliability.  This meant that only a small amount of high-speed logic needed to be implemented using conventional hot-cathode valves.  In this case &amp;quot;high speed&amp;quot; was relative, with the main oscillator being derived from the mains AC supply at 50 Hz, and the detailed operation of the machine can be seen with the naked eye.&lt;/p&gt;&#xA;&lt;p&gt;This yielded a computer that was relatively inexpensive to build (by the standards of the time), was fast enough to replace a small room of human computing clerks equipped with mechanical calculators, made substantially fewer mistakes than said clerks, and did not need to be shut down at the end of the working day.  Indeed on one occasion it was given a series of problems to work on over a Christmas and New Year multi-week holiday, and was still faithfully working on them when the operator came back to work afterwards.  This reliability made the computer relatively cheap to operate, compared to one that needed to maintain a stock of spare valves and a staff of trained diagnosticians at all times.&lt;/p&gt;&#xA;&lt;p&gt;Eventually the science of building computers advanced to the point where obtaining one of useful reliability and considerably greater performance than the WITCH was feasible, and the computer was handed off to a university as an educational tool, which is where it acquired the WITCH name.  This led to its survival and restoration in the Computer History Museum today.  No other computer of its time has survived substantially intact, and in working order with so many of its original parts.&lt;/p&gt;&#xA;&lt;p&gt;An example of these newer, faster, more reliable computers of around that time would be the LPC-21.  Here the main memory element was a spinning magnetic drum, the logic was implemented using a hundred or so hot-cathode valves, and the microcode ROM was implemented using solid-state diodes - probably germanium.  Germanium diodes had their own reliability problems, but they were vastly superior to thermionic diodes in all respects.  So again, we can see that obtaining a reliable computer may have hinged on keeping the use of hot-cathode valves down to a manageable number.&lt;/p&gt;&#xA;" OwnerUserId="8386" LastEditorUserId="8386" LastEditDate="2021-05-17T03:43:48.517" LastActivityDate="2021-05-17T03:43:48.517" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19862" PostTypeId="2" ParentId="19847" CreationDate="2021-05-17T05:27:02.150" Score="2" Body="&lt;p&gt;A large number of engineers had been building telephone switching networks for half a century, and phone company suppliers thus had lots of experience manufacturing good (telco quality) relays in vast numbers.  Whereas vacuum tubes had never been used for digital logic circuits until Atanasoff–Berry, Tommey Flowers team at Bletchley Park, and Eckert and Mauchly's team on the ENIAC (influenced by Atanasoff) experimented.  The tubes themselves, having never been originally designed for digital purposes, their reliability at first was quite low.  (I would not be surprised if digital square waves put a lot more thermal cycling stress on these new vacuum devices than the same amplitude of more sinusoidal-like radio signals.)&lt;/p&gt;&#xA;&lt;p&gt;So there was both a learning curve, and a manufacturing cost and reliability curve, that had to be climbed before a more sufficient number of engineers knew enough, and could get good enough components at a reasonable price, to design digital logic with vacuum tubes with equally reliable to relay switching networks.&lt;/p&gt;&#xA;" OwnerUserId="4606" LastActivityDate="2021-05-17T05:27:02.150" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19863" PostTypeId="2" ParentId="16208" CreationDate="2021-05-17T06:06:37.980" Score="12" Body="&lt;p&gt;I just uploaded a new version of xroach to sourceforge. This version works in Gnome KDE, but also in FVWM and the like:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/projects/xroachng/&quot; rel=&quot;noreferrer&quot;&gt;https://sourceforge.net/projects/xroachng/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;for the bleeding edge visit:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.ratrabbit.nl/ratrabbit/software/xroach_ng&quot; rel=&quot;noreferrer&quot;&gt;https://www.ratrabbit.nl/ratrabbit/software/xroach_ng&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21763" LastActivityDate="2021-05-17T06:06:37.980" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19865" PostTypeId="2" ParentId="1666" CreationDate="2021-05-17T10:10:10.750" Score="2" Body="&lt;p&gt;I've done my first shares of Genesis disassembly with Charles Doty's &lt;a href=&quot;http://emureview.ztnet.com/sega/FileBin/TechBin/sega-asm.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;DISASM.exe&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Please, note that you will need to run it in DOSBox.&lt;/p&gt;&#xA;" OwnerUserId="16348" LastActivityDate="2021-05-17T10:10:10.750" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19866" PostTypeId="1" CreationDate="2021-05-17T10:36:53.647" Score="5" ViewCount="237" Body="&lt;p&gt;What was the last release of OS/400 to support CISC (i.e IMPI) hardware? And when was it released?&lt;/p&gt;&#xA;" OwnerUserId="17803" LastActivityDate="2021-05-24T13:39:20.737" Title="What was the last release of OS/400 to support CISC hardware?" Tags="&lt;as400&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19867" PostTypeId="5" CreationDate="2021-05-17T10:55:47.267" Score="0" Body="&lt;p&gt;The IBM AS/400, released in 1988, was successor to 1978's IBM System/38. Its operating system, OS/400 was a descendant of the System/38 CPF operating system. OS/400 was later renamed IBM i5/OS and more recently to IBM i; the contemporary descendant of the AS/400 hardware is the IBM Power Systems line (which also runs AIX).&lt;/p&gt;&#xA;&lt;p&gt;Although descended from System/38 CPF, OS/400 introduced some incompatible changes, such as renaming some commands. It did however come with a backwards compatibility environment for running System/38 applications. It also came with an emulation environment for running software from IBM's (technically very different) System/36 midrange platform (and System/36's SSP operating system). Later, OS/400 added an AIX compatibility subsystem, PASE, to ease porting applications from Unix.&lt;/p&gt;&#xA;" OwnerUserId="17803" LastEditorUserId="17803" LastEditDate="2021-05-17T12:30:51.157" LastActivityDate="2021-05-17T12:30:51.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19868" PostTypeId="4" CreationDate="2021-05-17T10:55:47.267" Score="0" Body="Questions about IBM AS/400 midrange computing platform, and its operating system OS/400." OwnerUserId="17803" LastEditorUserId="17803" LastEditDate="2021-05-17T11:29:32.753" LastActivityDate="2021-05-17T11:29:32.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19872" PostTypeId="2" ParentId="19846" CreationDate="2021-05-17T18:20:26.920" Score="4" Body="&lt;p&gt;This is a very interesting question.  Apparently, at the time relays and tubes were used in computational equipment, there were no studies specifically regarding the lifetime of these components in such equipment.  The state of the art was advancing at such a pace that relays and tubes were used for only a brief period of time and then left behind after about 1955 to 1960.  However, relays which had been used a brief period longer than tubes in computation, had proven useful and durable in telephonic switching equipment.  That use would continue long after computational use ended.  And, as should be noted, certain specialty tubes were used in computation but apparently only on one platform developed by the Institute for Advanced Study.  In answer to the question, was there a study comparing the reliability or lifespan of relays or vacuum tubes used in computers, the answer seems there was none.  Nevertheless, there was extensive experience in the use of such devices and their performance capabilities were compared and documented.  The following summary of the then state-of-art is offered...&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Reliability in computing devices is of the utmost importance, and therefore a serious problem arises with the use of electromechanical relays.  Interference with one or more computing operations may result if a particle of dust happens to rest on the contact faces, since electrical contact is made between two points of microscopic size.  Since there is no direct way to detect such a failure either before or after it occurs, the use of checking circuits is desirable.  Fortunately, it is relatively easy to add contacts to an electromechanical relay for checking purposes.  This was done on the Bell Telephone Laboratories machines, and their ability to resume operation quickly after a failure is one of their outstanding features.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A comparison between the electromagnetic relay and the electron tube reveals that the former has a longer life expectancy in operating hours but will operate fewer times than the latter.  Furthermore, the electromechanical relay is subject to failure from vibrations and dust on the contact faces and is apt to require more delicate care than a vacuum tube.  The relay usually operates on less power than the filaments of a vacuum tube, but the latter can operate on alternating current taken directly from the power mains through step-down transformers.  Most fast-acting relays operate on direct current; hence when the rectification conversion loss is taken into account, their power requirements are comparable to those of electron tubes.  The two are nearly the same in cost and size.  The greatest difference in characteristics is in the maximum speed of operation; the electron-tube relay is at least 10E4 times faster than the electromechanical relay.  Therefore, in situations where computing may be done serially, a single tube can perform the same operations in the same time as a large number of relays operating simultaneously in parallel.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Source:  Engineering Research Associates (ERA), Inc., 1950.  &lt;em&gt;High-Speed Computing Devices.&lt;/em&gt; McGraw-Hill Book Company, New York.  pp 313-314.&lt;/p&gt;&#xA;&lt;p&gt;Reading through the ERA text, one thing becomes abundantly clear.  For the state of the art in computing existing in 1949, components used in the construction of computing equipment were not designed and life-tested for such use.  In essence, parts such as relays and tubes were off the shelf, already available.  Manufacturers, sensing the need for durability in relays, began to manufacture equipment that had higher durability than previously.  Nevertheless, tubes such as 6SA7 and 6L7, for instance, were just radio-equipment tubes and were manufactured as they had always been.  Although similar tube designations may have unique design characteristics (folded vs twisted filaments, for example), their use in computing equipment was always subject to eventual failure.  As noted by ERA, for the ENIAC, tube failures usually occurred within the first 250hrs of operation, or after 5000 hours. The ENIAC operating staff was reportedly not in sympathy with replacing a large number of tubes at once, presumably to preclude failure during equipment use.&lt;/p&gt;&#xA;&lt;p&gt;The most common source of trouble in using the ENIAC related to trouble with the 18,000 vacuum tubes used in the machine.  Although the practice was to test several hundred of the 3-tube amplifiers each week, and replace all three tubes if any amplifier was found to not be operating satisfactorily, the quantity of replaced tubes was considerable.  ERA reports that during the first 11 months of operation in 1949, about 2000 tubes per month were replaced each month, of which about half were actually bad.&lt;/p&gt;&#xA;&lt;p&gt;At this particular time, say 1948 to 1950, there were two approaches to reducing equipment failure during operation. One approach was to make components so reliable that they would outlast the useful life of the computing equipment in which they were being used.  At this time there were not statistical tests of lifetime durability for these components (except, presumably, by experience gained), but if the expected statistical life expectancy were sufficiently long, the actual failure would have proved to be sufficiently low during the initial years of machine operation. The sense gained from today's view of this approach was that equipment would be replaced or superseded before components substantially failed.  The second approach was to extend the operating life of computing equipment as far as possible by detecting incipient failures before they occurred. As an independent and retrospective view 30 years later (about 1980), this approach was used productively with many mainframe systems.&lt;/p&gt;&#xA;&lt;p&gt;Also at this early-1950s period, computing equipment failures were expensive and annoying given the value of the operating time of these machines.  Nevertheless, other failures caused problems, such as those causing intermittent machine errors, for instance.  In relay computers, approximately 85 percent of the failures were intermittent.  For the ENIAC, the majority of failures were intermittent.  To detect this problem, in the Bell Telephone Laboratories machines, continuous automatic checking, or &lt;em&gt;low-level checking,&lt;/em&gt; was done at the level of the individual relay.  Detection of a failure would cause the results to be held in their respective relays until the fault was cleared, upon which computation would continue with the results obtained previously.  For the ENIAC, checks were made of the solutions or partial solutions to problems, a process termed &lt;em&gt;high-level checking.&lt;/em&gt;  Operation of the ENIAC was so fast that holding results &lt;em&gt;in stasis&lt;/em&gt; was deemed impractical and results were recalculated after a failure.&lt;/p&gt;&#xA;&lt;p&gt;ERA makes the following comment regarding the ENIAC -&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It has been estimated that the ENIAC is actually in useful operation on problems about 50 percent of the time and that, allowing for a complete repetition of each problem, it therefore turns out about one-fourth as many useful answers as could an ideal, perfectly reliable, machine with the same basic mathematical characteristics, which required no maintenance whatever.  This is an excellent performance record.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="21775" LastEditorUserId="21775" LastEditDate="2021-05-17T18:27:12.983" LastActivityDate="2021-05-17T18:27:12.983" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19873" PostTypeId="2" ParentId="19842" CreationDate="2021-05-17T23:04:13.137" Score="6" Body="&lt;p&gt;The first gnu C compilers predate the ANSI C Standard, and unless invoked with the &lt;code&gt;-pedantic&lt;/code&gt; flag would ease many restrictions which the authors viewed as, well pedantic.  I don't remember for certain if the ability to treat ternary expressions as lvalues was among them, but I think it was, along with the ability to treat certain cast expressions as lvalues in cases where the operands were likewise.  I think the guiding philosophy was that if there was only one thing a construct could sensibly mean, and the construct might be useful, it should have that meaning.  Very different from the philosophy of gcc's maintainers today.&lt;/p&gt;&#xA;" OwnerUserId="340" LastActivityDate="2021-05-17T23:04:13.137" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19875" PostTypeId="2" ParentId="19847" CreationDate="2021-05-18T05:56:45.337" Score="2" Body="&lt;p&gt;Here is a relay computer that was built in Japan in 1958 and is still going...&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=_j544ELauus&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=_j544ELauus&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have wound relays. It is not hard. I have never made a valve.&lt;/p&gt;&#xA;&lt;p&gt;Early computing missed the plasma display. A neon lamp may take 20 volts to strike it, but will keep going with 5 volts. If you have a set of X wires at 0V and Y wires at 10V then each lamp joining an X and a Y will stay lit or stay off. If you drive one X wire to -6 volts and one Y wire to +16 volts you light the lamp at the junction of these two lines. If you set the same two lines to +4 volts and +6 volts you will put it out. You could potentially stick a lot of memory inside a single valve. There were counting tubes called decatrons that counted to the base 10, but they never made large chunks of X-Y addressable memory.&lt;/p&gt;&#xA;" OwnerUserId="21778" LastActivityDate="2021-05-18T05:56:45.337" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19876" PostTypeId="2" ParentId="19866" CreationDate="2021-05-18T07:27:40.650" Score="6" Body="&lt;p&gt;I run a 9404 F10 which has V3R2 installed. That is the last OS that can be run on IMPI machines. When IBM moved to power they had to rewrite vast amounts of OS/400 as lots of little things such as even the disk geometry changed. As such it is also true of the fact that power machines cannot run anything below V3R6. V3R2 is also quite a stretch for my machine. I will not call it slow but I will not call it fast. V3R2 was announced in 1996.&lt;/p&gt;&#xA;" OwnerUserId="21780" LastActivityDate="2021-05-18T07:27:40.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19877" PostTypeId="2" ParentId="5321" CreationDate="2021-05-18T14:08:54.563" Score="8" Body="&lt;p&gt;Like you, I had an IBM PC in need of paint restoration.  I used the &lt;a href=&quot;https://arstechnica.com/civis/viewtopic.php?f=7&amp;amp;t=1129978&quot; rel=&quot;noreferrer&quot;&gt;Pantone 413 suggestion&lt;/a&gt; and the result.... drum roll please:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7gajI.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7gajI.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Repainted PC on left, factory PC on right.&lt;/p&gt;&#xA;&lt;h3&gt;TL;DR (my experience)&lt;/h3&gt;&#xA;&lt;p&gt;My PC unfortunately had large areas where rust had completely eaten away the original paint to the point that it was not save-able (&lt;a href=&quot;https://i.stack.imgur.com/aS1a9.jpg&quot; rel=&quot;noreferrer&quot;&gt;pic&lt;/a&gt;, &lt;a href=&quot;https://i.stack.imgur.com/CnslF.jpg&quot; rel=&quot;noreferrer&quot;&gt;pic&lt;/a&gt;).  I was able to remove the rust and to preserve as much texture as possible, sanding lightly only to even out spots before paint.  It was never my intention to make this PC perfect either in an &amp;quot;in the past&amp;quot; or &amp;quot;historical&amp;quot; sense.  I have two others that are in better condition so the objective was to make this one presentable.  Nothing much to lose here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Process&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I ordered two spray cans of &lt;a href=&quot;https://www.myperfectcolor.com/paint/432522-pantone-pms-413-u&quot; rel=&quot;noreferrer&quot;&gt;Pantone 413 U&lt;/a&gt; from myperfectcolor.com.  A family member who is a professional graphic artist suggested using the 413 U (uncoated) rather than 413 C (coated) since the color would look less saturated and more true.&lt;/p&gt;&#xA;&lt;p&gt;I used a sandable gray automotive primer to cover the exposed metal area and lightly sanded to remove only the most uneven parts.  I then applied several light coats of the 413 U paint, allowing each to dry for 24-36 hours with very light sanding in between.  After the last coat had fully cured, I applied a light even coat of paste wax as a protectant.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Results&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;As you can see it doesn't look exactly like the other.  This isn't necessarily a bad thing - it still looks nice.  There are numerous reasons why this would be of course, and here is an incomplete list that come to mind:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The original paint has aged and changed color.&lt;/li&gt;&#xA;&lt;li&gt;The original paint is of a different chemical formulation than what I purchased.&lt;/li&gt;&#xA;&lt;li&gt;The underlying primer I used was a different type/color.&lt;/li&gt;&#xA;&lt;li&gt;Pantone 413 C might have been more accurate than 413 U.&lt;/li&gt;&#xA;&lt;li&gt;Variations of factory paint formulation, process or color over production span.&lt;/li&gt;&#xA;&lt;li&gt;The original color wasn't exactly Pantone 413.&lt;/li&gt;&#xA;&lt;li&gt;Any, all or none of the above.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Thoughts&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's certainly not simple to find an old reference photo of a brand new PC from the 1980's that's accurately colored.  Many &lt;a href=&quot;https://www.google.com/search?q=ibm%20pc%20xt&amp;amp;tbm=isch&quot; rel=&quot;noreferrer&quot;&gt;online photos&lt;/a&gt; are scanned faded magazines,  advertisements or digital photographs in various lighting conditions where the colors can appear to range anywhere between the these two.&lt;/p&gt;&#xA;&lt;p&gt;I do have another PC with original finish in addition to the one in this picture and the color is pretty consistent with the one on the factory finish (right).  Also notable is that darker keys on the keyboard are much closer in color tone to the factory PC.  Not sure that dyed plastic would change color over time in the exact same way as metal but who knows.  FWIW, these PCs were stored for the last 25 years or so in a light-free environment (a dark attic, then a dark basement) so at least weren't subject to a lifetime of UV.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, thought I'd share my experience having done what the OP asked with the hope that it might be helpful for someone someday.&lt;/p&gt;&#xA;" OwnerUserId="21323" LastActivityDate="2021-05-18T14:08:54.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19878" PostTypeId="1" CreationDate="2021-05-18T17:05:57.273" Score="3" ViewCount="167" Body="&lt;p&gt;I have a MS-DOS-hosted UCSD P-system IV, where the disks have been converted to named VOL image files. One of these is called VOLITION, and contains a compiler on it. However, since the compiler is always called SYSTEM.COMPILER, it's not apparent whether this is a Pascal compiler or their Modula-2 compiler. Is there some way to determine which this is, given that I have &lt;em&gt;no&lt;/em&gt; documentation associated with it?&lt;/p&gt;&#xA;" OwnerUserId="4088" LastEditorUserId="15334" LastEditDate="2021-05-18T19:02:29.753" LastActivityDate="2021-05-18T19:02:29.753" Title="How can I tell which compiler I have on my UCSD P-system IV disks?" Tags="&lt;ucsd-p-system&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19879" PostTypeId="2" ParentId="19878" CreationDate="2021-05-18T18:06:33.780" Score="5" Body="&lt;p&gt;I wonder if you have a copy of the Volition Systems Modula-2 compiler (&lt;a href=&quot;https://archive.org/details/bitsavers_volitionSy20.3jIBMPC_14753891/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;documentation&lt;/a&gt;).  The docs and this &lt;a href=&quot;https://books.google.com/books?id=e-gI2W-3JwkC&amp;amp;lpg=PA191&amp;amp;ots=V-GisIZuay&amp;amp;dq=volition%20compiler&amp;amp;pg=PA190#v=onepage&amp;amp;q=volition%20compiler&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;PC Mag review&lt;/a&gt; indicate the compiler was built on top of the UCSD Pascal system (but that does not necessarily mean the tool will &lt;em&gt;compile&lt;/em&gt; Pascal, only Modula-2).&lt;/p&gt;&#xA;" OwnerUserId="4222" LastActivityDate="2021-05-18T18:06:33.780" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19880" PostTypeId="1" AcceptedAnswerId="19928" CreationDate="2021-05-18T18:53:00.873" Score="10" ViewCount="307" Body="&lt;p&gt;I am stuck by designing a 8 Slot 16 Bit ISA Backplane&lt;/p&gt;&#xA;&lt;p&gt;Do I have to terminate an ISA bus?&lt;/p&gt;&#xA;&lt;p&gt;My search results are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;No termination at all&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some homebrew projects use active termination for all signals&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://archive.org/details/bitsavers_intelbusSpep89_3342148/page/n66/mode/1up&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel ISA Bus Specification&lt;/a&gt; describes pull-up and series resistors on selected signals&#xA;(Address/Data Bus are untouched)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ToYeB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ToYeB.jpg&quot; alt=&quot;Intel ISA Spec&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What's the right solution? I am a bit confused.&lt;/p&gt;&#xA;&lt;p&gt;Thank you in advance :-)&lt;/p&gt;&#xA;" OwnerUserId="7362" LastEditorUserId="7347" LastEditDate="2021-05-19T03:54:37.690" LastActivityDate="2021-05-23T00:32:23.667" Title="How do I terminate an ISA bus correctly?" Tags="&lt;hardware&gt;&lt;ibm-pc&gt;&lt;isa&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19881" PostTypeId="2" ParentId="17749" CreationDate="2021-05-18T21:35:41.847" Score="3" Body="&lt;p&gt;I had this problem on a genuine C64. Turns out, that the MAC-id: 00:00:00:00:00:00 is the problem. It needs to be set to something. There's a program called setmac, or macset, distributed on the d64 disk image for 64nic+ that does this. After setting the MAC, ping replies in WarpCopy.&#xA;My problem, though, and the reason I found this thread, is that I can't find any settings in my Linux VICE 3.4 to add RR-NET anywhere. There is no ethernet settings or any RR-NET cartridge.&lt;/p&gt;&#xA;" OwnerUserId="21783" LastActivityDate="2021-05-18T21:35:41.847" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19882" PostTypeId="1" AcceptedAnswerId="19884" CreationDate="2021-05-18T21:52:16.040" Score="38" ViewCount="3875" Body="&lt;p&gt;For example on &lt;a href=&quot;https://en.wikipedia.org/wiki/Series_40&quot; rel=&quot;noreferrer&quot;&gt;S40&lt;/a&gt; or the &lt;a href=&quot;https://en.wikipedia.org/wiki/Nokia_3310&quot; rel=&quot;noreferrer&quot;&gt;3310&lt;/a&gt;, users were able to set &lt;a href=&quot;https://www.gsmarena.com/glossary.php3?term=voice-dialing&quot; rel=&quot;noreferrer&quot;&gt;voice tags&lt;/a&gt; (also known as voice commands) for contacts. The phone could then recognize the command later and dial the right number.&lt;/p&gt;&#xA;&lt;p&gt;With neural networks and much faster computers, this is not rocket science today. However, even desktops back in 1999 did not do neural networks as far as I know, let alone a handheld device designed at that time. The recognition on my 6230i works quite well and appears to be live: it starts listening and displays a result about 1 second after you've spoken the matching sample. I can also speak a whole sentence with only the pre-recorded keyword in it, it patiently waits about 4 seconds for me to mention something it recognizes, and shortly after I do it displays the match. (Or if I remain silent, then after 2 seconds it will report no match.)&lt;/p&gt;&#xA;&lt;p&gt;I've been trying to find how this worked but didn't find anyone talking about it. The results are all about newer devices and how to &lt;em&gt;use&lt;/em&gt; the feature, not how it technically worked. Adding keywords like machine learning or &amp;quot;fft&amp;quot; (with quotes) to the search doesn't yield anything either.&lt;/p&gt;&#xA;&lt;p&gt;Did it have some very basic machine learning? Though that might also need more training data rather than just one recording to match against. Perhaps, then, it used Fast Fourier Transform to extract and then later match the frequencies? The device can play back the recordings (as an aside, it turns out 13-year-old me sounded like a little girl), perhaps because it uses that as a reference and it doesn't merely extract features.&lt;/p&gt;&#xA;&lt;p&gt;Is it known how these systems (must have) worked?&lt;/p&gt;&#xA;" OwnerUserId="5421" LastActivityDate="2021-05-19T02:24:40.463" Title="How did voice dialing work in old Nokia phones?" Tags="&lt;software&gt;&lt;audio&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19883" PostTypeId="2" ParentId="19880" CreationDate="2021-05-18T22:13:45.750" Score="7" Body="&lt;p&gt;Pull-ups are required (for the lines that are used) but the series resistors are optional.  You may wish to place 0Ω links (on &lt;code&gt;/IORC&lt;/code&gt; &lt;em&gt;et al.&lt;/em&gt;) between the processor's bus and the ISA bus; if you encounter problems these could be replaced with series resistors (e.g. 22Ω, as suggested by Intel).  A more common technique&lt;sup&gt;1&lt;/sup&gt; for bus termination is to use a resisitve divider (pull-up + pull-down) on each signal; these could be left unpopulated if not needed.  The same could be done for the pull-ups; unneeded pull-ups could simply not be populated.&lt;/p&gt;&#xA;&lt;p&gt;For reference, here's an ISA-based &lt;a href=&quot;http://www.malinov.com/Home/sergeys-projects/xi-8088&quot; rel=&quot;noreferrer&quot;&gt;8088 SBC&lt;/a&gt; (&lt;a href=&quot;https://docs.google.com/viewer?a=v&amp;amp;pid=sites&amp;amp;srcid=bWFsaW5vdi5jb218d3d3fGd4OjIyYWViMDc3YmU1MmY0Yg&quot; rel=&quot;noreferrer&quot;&gt;schematic&lt;/a&gt;) and its &lt;a href=&quot;https://www.retrobrewcomputers.org/doku.php?id=boards:isa:isa-backplane:start&quot; rel=&quot;noreferrer&quot;&gt;backplane&lt;/a&gt; (&lt;a href=&quot;https://www.retrobrewcomputers.org/lib/exe/fetch.php?media=boards:isa:isa-backplane:isa_backplane-1.1-sch.pdf&quot; rel=&quot;noreferrer&quot;&gt;schematic&lt;/a&gt;).  There is no bus termination (via series resistors or otherwise) but pull-ups are present on the CPU board:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7Zfh7.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7Zfh7.png&quot; alt=&quot;Pull-ups resistors&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note that the pull-up values on this SBC are a bit weaker (higher values: 10kΩ) than what the Intel appnote suggests (4.7kΩ).  Other ISA bus pins are simply not connected (the ones that Intel lists stronger pull-ups for).  It has been noted that termination may be needed for stable operation (see first link below).&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Bus termination is a somewhat complex topic.  For a detailed discussion of it in the context of the SBC mentioned above see &lt;a href=&quot;https://www.smbaker.com/diagnosing-xi-8088-stability-issues&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt;.  For another take on the topic see appendices A and B of &lt;a href=&quot;https://indcompsrc.com/pdf/manuals/00431101.pdf&quot; rel=&quot;noreferrer&quot;&gt;this document&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2021-05-19T04:41:52.490" LastActivityDate="2021-05-19T04:41:52.490" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19884" PostTypeId="2" ParentId="19882" CreationDate="2021-05-18T23:00:17.597" Score="50" Body="&lt;p&gt;I did basic voice recognition on an Atari ST (8MHz 68000, 8-bit mono sampling&lt;sup&gt;1&lt;/sup&gt;).  If it could be done on a 1985 desktop&lt;sup&gt;2&lt;/sup&gt; then it should be no problem for an early naughties cell-phone&lt;sup&gt;3&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;p&gt;IIRC&lt;sup&gt;4&lt;/sup&gt;, the algorithm was roughly as follows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sample the audio (8-bit mono @ 22kHz?)&lt;/li&gt;&#xA;&lt;li&gt;Split the audio into short (½ second?) pieces&lt;/li&gt;&#xA;&lt;li&gt;Do an &lt;a href=&quot;https://en.wikipedia.org/wiki/Fast_Fourier_transform&quot; rel=&quot;noreferrer&quot;&gt;FFT&lt;/a&gt; on each piece.  The results are placed into a 2-dimensional array (piece #, binned frequency intensity)&lt;/li&gt;&#xA;&lt;li&gt;Compare the array against a set of reference patterns (one for each recognizable word, stored in the same format) and return the closest match (along with the strength of the match).  A diagram illustrating this is at the end of this answer.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;No neural networks were used (though I undoubtedly experimented with them), just basic arithmetic.  Training was done by recording the same word multiple times and then averaging the resulting arrays.  Note that the algorithm only worked for discrete words, not continuous speech.&lt;/p&gt;&#xA;&lt;br&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Using the &lt;strong&gt;Soundoff!&lt;/strong&gt; cartridge from E. Arthur Brown/Diverse Data Systems.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; Or earlier: The MC68000 was released in 1979.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;3&lt;/sup&gt; I don't have detailed specs for the phones you listed but the &lt;a href=&quot;https://en.wikipedia.org/wiki/Handspring_(company)#Comparison_of_Visor_Models&quot; rel=&quot;noreferrer&quot;&gt;Handsping Visor&lt;/a&gt; (released in 1999) used a &lt;a href=&quot;https://en.wikipedia.org/wiki/Freescale_DragonBall&quot; rel=&quot;noreferrer&quot;&gt;MC68EZ328&lt;/a&gt; (Dragonball) at either 16 or 20 MHz.  The Dragonball processors are basically embedded variants of the MC68000.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;4&lt;/sup&gt; I used the following book as a guide.  I don't have it easily at hand so I can't verify the details.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cater, John P., &lt;em&gt;&lt;a href=&quot;https://www.google.com/search?q=9780672221736&quot; rel=&quot;noreferrer&quot;&gt;Electronically Hearing: Computer Speech Recognition&lt;/a&gt;&lt;/em&gt;, 1984, ISBN 9780672221736&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Based on &lt;a href=&quot;https://www.cambridge.org/core/journals/journal-of-the-international-phonetic-association/article/abs/john-p-cater-electronically-speaking-computer-speech-generation-pp-230-howard-w-sams-co-indianapolis-1983-1495-isbn-0672219476-john-p-cater-electronically-hearing-computer-speech-recognition-pp-263-howard-w-sams-co-indianapolis-1984-1395-isbn-067222173x/F7719377FFDD232AED78B2F0F060A59A&quot; rel=&quot;noreferrer&quot;&gt;this review of the book&lt;/a&gt;, the code presented in the book was actually in Apple ][ BASIC (6502 processor) which I then adapted to the ST (probably using &lt;a href=&quot;https://en.wikipedia.org/wiki/GFA_BASIC&quot; rel=&quot;noreferrer&quot;&gt;GFA Basic&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uisdM.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uisdM.png&quot; alt=&quot;Diagram showing how recognition is done&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2021-05-19T02:24:40.463" LastActivityDate="2021-05-19T02:24:40.463" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="19885" PostTypeId="1" CreationDate="2021-05-19T00:07:49.463" Score="21" ViewCount="4908" Body="&lt;p&gt;For years, I've heard &amp;quot;4%&amp;quot;, repeated over and over. But then I read this today:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The original release of the Super Game Boy runs about &lt;strong&gt;2.5%&lt;/strong&gt; faster than an original Game Boy.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And the source is the people who made the hardware modification fix thing, so they &lt;em&gt;probably&lt;/em&gt; know what they are talking about: &lt;a href=&quot;http://www.qwertymodo.com/hardware-projects/snes/super-game-boy-clock-mod&quot; rel=&quot;noreferrer&quot;&gt;http://www.qwertymodo.com/hardware-projects/snes/super-game-boy-clock-mod&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So why does every other source seem to always say 4%?&lt;/p&gt;&#xA;" OwnerUserId="21784" LastActivityDate="2021-05-19T11:14:18.410" Title="Did the Super Game Boy (1) run 2.5% or 4% faster than a Game Boy?" Tags="&lt;game-boy&gt;" AnswerCount="2" CommentCount="12" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19886" PostTypeId="2" ParentId="19885" CreationDate="2021-05-19T01:46:04.693" Score="34" Body="&lt;p&gt;For Gameboy clocking 3 'generations' need to be seen&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;All 'classic' Gameboy&lt;/strong&gt;, that is the original all the way including micro run (the 8 bit CPU) from the same 4.194 MHz MHz crystal, divided by two, for a CPU clock of 2.097 MHz.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Gameboy Color&lt;/strong&gt; and later added a double speed mode, allowing the 8 bit CPU to run at 4.194 MHz&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Super Gameboy&lt;/strong&gt; does as well run the same CPU, but clock speed was now derived from the SNES system clock, divided by five.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Dividing the SNES (*1) system clock by five comes quite close to the original clock rate, but not exact. In addition the SNES clock differs between NTSC and PAL units:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;SNES PAL&lt;/strong&gt; clocks at 21.28137 MHz, so the Super Gameboy gets feed 4.256 MHz&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;SNES NTSC&lt;/strong&gt; clocks at 21.47727 MHz, resulting in a 4.295 MHz clock&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The resulting frequency is either divided further by two for 'normal' operation, or used direct for fast (GBA) speed.&lt;/p&gt;&#xA;&lt;p&gt;This translates into a speed up of&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;4.256/4.194 = 1.0148 or &lt;strong&gt;1.5% for PAL units&lt;/strong&gt; and&lt;/li&gt;&#xA;&lt;li&gt;4.295/4.194 = 1.0241 or &lt;strong&gt;2.4% for NTSC units&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All of this is essentially without any change to game play, except for some rather offbeat usages - like doing competitive speed runs, or trying to get fastest ever runs. Here a percent up or down may result in several seconds faster or slower.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Long story short: Nintendo (and next to all users) accepted this little difference in exchange for being able to play their old games :))&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - It might be worth to add here, for everyone not so familiar with Gameboy generations and details, that the 'Super Gameboy' isn't a hand held game, like everyone might assume, but &lt;a href=&quot;https://en.wikipedia.org/wiki/Super_Game_Boy&quot; rel=&quot;noreferrer&quot;&gt;a cartridge&lt;/a&gt; for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Super_Nintendo_Entertainment_System&quot; rel=&quot;noreferrer&quot;&gt;SNES&lt;/a&gt; containing most parts of a Gameboy, except I/O. Instead the game output is displayed on the TV connected to the SNES, while input is transferred from the SNES controllers (which also introduces a tiny lag - that's why the next generation got an optional dedicated controller - AFAIK).&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7843" LastEditDate="2021-05-19T11:14:18.410" LastActivityDate="2021-05-19T11:14:18.410" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19887" PostTypeId="2" ParentId="19885" CreationDate="2021-05-19T01:46:13.440" Score="7" Body="&lt;p&gt;I think you've been unlucky in your browsing. All the sources I've ever seen say that the Super Game Boy is 2.4% faster than the Game Boy.&lt;/p&gt;&#xA;&lt;p&gt;The Game Boy's clock speed is 4.194304 MHz. The Super Game Boy divides the SNES's clock speed of 21.47727 MHz (for the NTSC console) by 5 to get 4.295454 MHz. Dividing the last number by the first gets you 1.02411603928, or 2.4-and-a-tiny-bit percent faster.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://kb.speeddemosarchive.com/Super_Game_Boy_timing&quot; rel=&quot;noreferrer&quot;&gt;Independent experimentation&lt;/a&gt; also gets a result of 2.4% faster.&lt;/p&gt;&#xA;&lt;p&gt;Game Boy clock speed referenced from &lt;a href=&quot;http://www.overclocked.org/emugb.htm&quot; rel=&quot;noreferrer&quot;&gt;OverClocked&lt;/a&gt; (which also shows the clock speed for the Super Game Boy). SNES clock speed referenced from &lt;a href=&quot;https://en.wikipedia.org/wiki/Super_Nintendo_Entertainment_System&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;. I know they aren't primary sources, but I think they're good enough for now.&lt;/p&gt;&#xA;&lt;p&gt;By the way, as I recall, the Japan-only Super Game Boy 2 runs at the same speed as the original Game Boy.&lt;/p&gt;&#xA;" OwnerUserId="4744" LastActivityDate="2021-05-19T01:46:13.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19888" PostTypeId="1" AcceptedAnswerId="19891" CreationDate="2021-05-19T05:16:20.227" Score="2" ViewCount="488" Body="&lt;p&gt;I'm trying to write a binary file using vasm68k_mot (Motorola 68k) writing File-Size and File-Offset everything goes well, except that M68K is Big-Endian, there's a way I can change to Little-Endian in a simple way?&lt;/p&gt;&#xA;&lt;p&gt;Let's say that the FileZ.bin has a size of 30Kb, this in hex should be 0x7530 in my binary file it writes in hex value &amp;quot;00 00 75 30&amp;quot;, but I need to mirror that value to &amp;quot;30 75 00 00&amp;quot; The same applies for the file offset address.&lt;/p&gt;&#xA;&lt;p&gt;I'm sorry if this is confusing, I'm not a programmer nor expert in ASM.&lt;/p&gt;&#xA;&lt;p&gt;My code is like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;dc.l    0,(FILEY_END-FILEY_START)               &#xA;dc.l    FILEZ_START,(FILEZ_END-FILEZ_START)&#xA;dc.l    FILEX_START,(FILEX_END-FILEX_START)  &#xA;cnop    0,2048&#xA;&#xA;&#xA;&#xA;FILEZ_START&#xA;    incbin C:\FileZ.BIN&#xA;FILEZ_END&#xA;    cnop    0,2048&#xA;&#xA;FILEX_START&#xA;FILEY_START&#xA;    incbin C:\FileY.BIN&#xA;FILEY_END&#xA;    cnop    0,2048&#xA;    incbin C:\FileX.bin&#xA;FILEX_END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;EDIT: The documentation provided by @AlexHajnal is the same i'm using, thank you! I also will link it here: &lt;a href=&quot;http://sun.hasenbraten.de/vasm/release/vasm.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://sun.hasenbraten.de/vasm/release/vasm.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;EDIT: All I need to is SWAP those &amp;quot;dc.l&amp;quot; values, they are 4 bytes long, I tried writing&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ROL.W   #8,D0&#xA;SWAP    D0&#xA;ROL.W   #8,D0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;but i got some random numbers, it may be related to vasmm68k_mot, but i really don't know....&lt;/p&gt;&#xA;" OwnerUserId="21785" LastEditorUserId="21785" LastEditDate="2021-05-19T16:05:17.850" LastActivityDate="2021-05-26T07:10:00.930" Title="M68k Big Endian to Little Endian" Tags="&lt;programming&gt;&lt;m68k&gt;" AnswerCount="3" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="19889" PostTypeId="1" AcceptedAnswerId="19892" CreationDate="2021-05-19T06:55:30.423" Score="43" ViewCount="6823" Body="&lt;p&gt;Just as the wheel, the clipboard on a computer is indeed a very useful invention!&lt;/p&gt;&#xA;&lt;p&gt;Who came up with such bright idea?&lt;/p&gt;&#xA;&lt;p&gt;Additionally, did it exist on non-graphical environments as well ?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cKTCV.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cKTCV.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="15334" LastEditDate="2021-05-19T07:02:50.997" LastActivityDate="2021-05-21T14:49:32.673" Title="Who invented the clipboard?" Tags="&lt;history&gt;&lt;gui&gt;" AnswerCount="7" CommentCount="9" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19890" PostTypeId="2" ParentId="19889" CreationDate="2021-05-19T07:05:05.150" Score="14" Body="&lt;p&gt;It was certainly around in vi (Unix text editor) that I first used in 1985.  Vi is a visual front end to ed, which presumably pre-dates it.  The cryptic ‘y’ would yank a line into the clipboard and ‘p’ would paste it.  The paste buffer wasn’t shared with any other applications though, so I’m not sure whether that’s what you have in mind.&lt;/p&gt;&#xA;" OwnerUserId="19372" LastActivityDate="2021-05-19T07:05:05.150" CommentCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="19891" PostTypeId="2" ParentId="19888" CreationDate="2021-05-19T07:40:45.920" Score="3" Body="&lt;p&gt;My original take on the question:&lt;/p&gt;&#xA;&lt;p&gt;For longs (32-bit), this is &lt;a href=&quot;https://retrocomputing.stackexchange.com/a/15365/7347&quot;&gt;answered here&lt;/a&gt;.  For shorts (16-bit) just use &lt;code&gt;ROL.W #8, D0&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;If @thebusybee's interpretation of the question is correct (which appears to be the case) then the answer would appear to be &amp;quot;No&amp;quot; (when targeting MC68000).  From page 6 of &lt;a href=&quot;http://sun.hasenbraten.de/vasm/release/vasm.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the vasm manual&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;... a constant is built according to the endianess of the target.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;However, if you change the target to something little-endian (e.g. x86 instead of 68000) then computed values will be stored as little-endian.&lt;/p&gt;&#xA;&lt;p&gt;To use a different target you'll need to change the syntax of your assembler source file.  For example, the x86 equivalent of the source you posted (as of 2021-05-19 21:45Z) is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.long 0,FILEY_END-FILEY_START&#xA;.long FILEZ_START,FILEZ_END-FILEZ_START&#xA;.long FILEX_START,FILEX_END-FILEX_START  &#xA;.balign    2048&#xA;&#xA;&#xA;&#xA;FILEZ_START:&#xA;    .incbin C:\FileZ.BIN&#xA;FILEZ_END:&#xA;    .balign    2048&#xA;&#xA;FILEX_START:&#xA;FILEY_START:&#xA;    .incbin C:\FileY.BIN&#xA;FILEY_END:&#xA;    .balign    2048&#xA;    .incbin C:\FileX.BIN&#xA;FILEX_END:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The above should be placed in a file named &lt;code&gt;file.s&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;To create your output file (to be named &lt;code&gt;file.bin&lt;/code&gt;) run:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;vasmx86_std -Fbin -o file.bin file.s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You may need to tweak the file names/paths above (I tested on Linux then added the &lt;code&gt;C:\&lt;/code&gt; prefixes to what I posted above).&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2021-05-19T22:16:17.593" LastActivityDate="2021-05-19T22:16:17.593" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="19892" PostTypeId="2" ParentId="19889" CreationDate="2021-05-19T08:38:19.063" Score="54" Body="&lt;p&gt;According to Richard Dale, copy &amp;amp; paste was invented in '73 - '76 by Larry Tesler for Smalltalk-76:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Copy and paste in a modeless editor was invented by Larry Tesler at XEROX Parc for the Smalltalk-76 programming environment, in 1973-76. In Smalltalk, when you selected some text you had a large number of commands you could apply to the selection; 'again', 'copy', 'cut', 'paste', 'doit', 'compile', 'undo', 'cancel', 'align'. &lt;a href=&quot;https://dot.kde.org/comment/91024#comment-91024&quot; rel=&quot;noreferrer&quot;&gt;[1]&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;However, as @StephenKitt pointed out, modeless copy &amp;amp; paste was also present in Gypsy, developed in 1975 (also by Larry Tesler) &lt;a href=&quot;https://en.wikipedia.org/wiki/Gypsy_(software)&quot; rel=&quot;noreferrer&quot;&gt;[2]&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Moreover, it seems that early word processors also had this capability, although usually using modes:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The earliest editors (designed for teleprinter terminals) provided keyboard commands to delineate a contiguous region of text, then delete or move it. Since moving a region of text requires first removing it from its initial location and then inserting it into its new location, various schemes had to be invented to allow for this multi-step process to be specified by the user. Often this was done with a &amp;quot;move&amp;quot; command, but some text editors required that the text be first put into some temporary location for later retrieval/placement. &lt;a href=&quot;https://en.wikipedia.org/wiki/Cut,_copy,_and_paste&quot; rel=&quot;noreferrer&quot;&gt;[3]&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;However, this wasn't called the &amp;quot;clipboard&amp;quot; at the time, this came far later:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In 1983, the Apple Lisa became the first text editing system to call that temporary location &amp;quot;the clipboard&amp;quot;. &lt;a href=&quot;https://en.wikipedia.org/wiki/Cut,_copy,_and_paste&quot; rel=&quot;noreferrer&quot;&gt;[3]&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So I'd say copy &amp;amp; paste was such an obvious improvement that it came to text editors a soon as they moved from punch cards to memory, but it took until '83 until the concept of a &amp;quot;clipboard&amp;quot; emerged.&lt;/p&gt;&#xA;" OwnerUserId="794" LastEditorUserId="794" LastEditDate="2021-05-19T15:56:59.660" LastActivityDate="2021-05-19T15:56:59.660" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19893" PostTypeId="1" CreationDate="2021-05-19T08:50:17.557" Score="6" ViewCount="163" Body="&lt;p&gt;I’m trying to resurrect a Craigslist Amiga A1000. After replacing Paula it now boots. Several basics still missing (RF shields, screws, port covers, etc.) but essential electronics are okay.&lt;/p&gt;&#xA;&lt;p&gt;However, I would like to add the 256 KB RAM expansion but I haven't been able to locate one. I have been able to recreate much of the schematic for much of the A1050 (thanks to Raffzahn for excellent information), but not sure of 2 things - 1) capacitors, and 2) the black blob:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;My guess is 8 the capacitors are 220 nF but don't know about the other one (c9?).  I think they are connected between 5 V and GND?&lt;/li&gt;&#xA;&lt;li&gt;The blob maybe a 39 Ω resistor pack to buffer the address lines? Or?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Any insights/thoughts/facts appreciated.&lt;/p&gt;&#xA;&lt;p&gt;Front of board:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/YQdlA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YQdlA.jpg&quot; alt=&quot;Front of board&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Back of board:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/nLOBl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nLOBl.jpg&quot; alt=&quot;Back of board&quot; /&gt;&lt;/a&gt;&#xA;&lt;sub&gt;Source: &lt;a href=&quot;http://amiga.resource.cx/exp/a1050&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://amiga.resource.cx/exp/a1050&lt;/a&gt;&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="21790" LastEditorUserId="11916" LastEditDate="2021-05-20T04:03:16.973" LastActivityDate="2021-05-20T04:03:16.973" Title="Amiga A1050 schematic" Tags="&lt;amiga&gt;&lt;ram&gt;&lt;amiga-1000&gt;" AnswerCount="0" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19894" PostTypeId="2" ParentId="19889" CreationDate="2021-05-19T10:56:31.267" Score="34" Body="&lt;p&gt;Honorable mention should be given to TECO, a text editor from the early 1960s.  It had a set of containers called Q registers that functioned much the way the clipboard does.  Cut and paste operations were easy enough in TECO, although the syntax was obscure.&lt;/p&gt;&#xA;" OwnerUserId="3698" LastActivityDate="2021-05-19T10:56:31.267" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19895" PostTypeId="2" ParentId="19889" CreationDate="2021-05-19T18:41:41.703" Score="12" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Did it exist on any non-graphical environments?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I remember when I worked for Canon in the UK, someone (hi, Dave!) had the idea of a mouse with memory. If you cut something (text or a small file), it could be stored in the mouse. You could then that mouse to another computer, plug it in, and paste what was cut. Apparently, there were similar patents in the late 80's that predated it, but I never heard of a product.&lt;/p&gt;&#xA;" OwnerUserId="21778" LastEditorUserId="6659" LastEditDate="2021-05-20T00:20:52.220" LastActivityDate="2021-05-20T00:20:52.220" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19896" PostTypeId="2" ParentId="19888" CreationDate="2021-05-19T18:56:38.270" Score="0" Body="&lt;p&gt;Unless you know something about the file data, I think the simple answer is 'no'. If the data was bytes, they would be in the same order. If it was 16-bit words, they would be swapped in pairs. If it was 32-bit words, then 4 bytes would be reversed.&lt;/p&gt;&#xA;&lt;p&gt;I would imagine you could look at a dump of the data and make a reasonable guess most of the time. But there is no simple swapEndian.exe tool that can do it for you.&lt;/p&gt;&#xA;&lt;p&gt;[Off-topic, but I am now intrigued: I wonder how good a neural net might be at guessing and swapping?]&lt;/p&gt;&#xA;" OwnerUserId="21778" LastActivityDate="2021-05-19T18:56:38.270" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19897" PostTypeId="2" ParentId="19889" CreationDate="2021-05-19T19:11:08.987" Score="4" Body="&lt;p&gt;The idea of some buffer isn't far fetched anyway.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Additionally, did it exist on non-graphical environments as well ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, in the mid 70s we used a (line orientated) editor on /370 mainframe that allowed to operate with multiple edit areas - plus one area for temporary copies. Lines could be copied into that area replacing what was there or added at the end of whatever was there. The whole temporary area or parts thereof (using line numbers) could copied back into any of the regular working areas.&lt;/p&gt;&#xA;&lt;p&gt;So yes, kind of clipboard, but way more power full than simple copy and paste.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-05-21T01:19:49.913" LastActivityDate="2021-05-21T01:19:49.913" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19898" PostTypeId="2" ParentId="19889" CreationDate="2021-05-19T19:16:30.770" Score="4" Body="&lt;p&gt;How about &lt;a href=&quot;https://en.wikipedia.org/wiki/QED_(text_editor)#:%7E:text=QED%20is%20a%20line%2Doriented,Angluin%20between%201965%20and%201966.&quot; rel=&quot;nofollow noreferrer&quot;&gt;QED&lt;/a&gt; (1967)? It had the &lt;code&gt;M&lt;/code&gt; command to move text to a &amp;quot;buffer&amp;quot;, whose contents could then be retrieved via &lt;code&gt;\B&lt;/code&gt;. Example 2 &lt;a href=&quot;https://www.bell-labs.com/usr/dmr/www/qedman.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; is essentially cut/paste:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The commands&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;/abcd/,$m1 &#xA;Oa \b1\f&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;first move several lines from the end&#xA;of the current buffer to buffer 1. Then the lines are inserted at the&#xA;beginning of the current buffer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="17893" LastActivityDate="2021-05-19T19:16:30.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19899" PostTypeId="2" ParentId="7502" CreationDate="2021-05-19T19:34:40.817" Score="4" Body="&lt;p&gt;Late to the party, but I think wrong information should be corrected.&lt;/p&gt;&#xA;&lt;p&gt;The Space Invader sprites are simply displayed using 3 copies of each of the two sprites. The RESPx trick was first shown in Galaxian three years later.&lt;/p&gt;&#xA;" OwnerUserId="21799" LastActivityDate="2021-05-19T19:34:40.817" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19900" PostTypeId="1" AcceptedAnswerId="19906" CreationDate="2021-05-20T01:16:57.137" Score="20" ViewCount="3264" Body="&lt;p&gt;I was a tech writer at IBM in Austin, TX in the late 80s. We were writing documentation for the RS/6000. I loved the publishing software we used and was sorry to see it replaced in the marketplace by cheaper, less powerful software geared towards desktop computing. There was a complex set of context menus that enabled you to work your way through a document incredibly quickly once you mastered the software.&lt;/p&gt;&#xA;&lt;p&gt;I &lt;em&gt;think&lt;/em&gt; the company was located in MA?&lt;/p&gt;&#xA;&lt;p&gt;I'm trying to remember the name of it. I can't find it anywhere! Does anyone remember this software?&lt;/p&gt;&#xA;&lt;p&gt;I don't remember what we worked on... Maybe proprietary computers? It was definitely not Windows or Macs, which were not powerful enough in those days (did they even exist? No idea).&lt;/p&gt;&#xA;&lt;p&gt;I eventually became a Unix sysadmin, inspired by my experience with that software. In using it I found that I preferred the &amp;quot;technical&amp;quot; part over the &amp;quot;writing&amp;quot; part of &amp;quot;technical writing&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="21802" LastEditorUserId="15334" LastEditDate="2021-05-20T11:42:45.060" LastActivityDate="2021-05-20T15:38:39.420" Title="What is the name of the publishing software used at IBM in the late 80s?" Tags="&lt;identify-this-software&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19902" PostTypeId="2" ParentId="19900" CreationDate="2021-05-20T06:56:00.633" Score="7" Body="&lt;p&gt;Was it perhaps DisplayWrite/36?&lt;/p&gt;&#xA;&lt;p&gt;From &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Office/36&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Office/36 was a suite of applications marketed by IBM from 1983 to 2000 for the IBM System/36 family of midrange computers. [...] Components of Office/36 include: [...]&#xA;DisplayWrite/36, a word processing program.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;DisplayWrite/36, in the same category as Microsoft Word, had online dictionaries and definition capabilities, and spell-check, and unlike the standard S/36 products, it would straighten spillover text and scroll in real time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11421" LastActivityDate="2021-05-20T06:56:00.633" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19903" PostTypeId="2" ParentId="19900" CreationDate="2021-05-20T07:39:15.590" Score="6" Body="&lt;p&gt;You may be thinking of BookMaster (plus BookManager), which ran over top of SCRIPT/VS, which ran over top of ISIL/GML. (GML has, as descendants, SGML, HTML and XML.) As a program, it's pretty resource-light by today's standards (it requires 4MB of memory, minimum), but it was designed to work with reference-set-size publications as data.&lt;/p&gt;&#xA;" OwnerUserId="21806" LastActivityDate="2021-05-20T07:39:15.590" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19904" PostTypeId="2" ParentId="19888" CreationDate="2021-05-20T09:13:59.423" Score="2" Body="&lt;p&gt;This is just an alternative for the poor lost souls coming here for help. ;-)&lt;/p&gt;&#xA;&lt;p&gt;Instead of code to be run by the processor, this solution generates a 32-bit value in little endian right in place.&lt;/p&gt;&#xA;&lt;p&gt;The assembler has macro capabilities, and a macro can be used:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dc_l_le&lt;/code&gt; is the name of the macro. Look at it as a new pseudo instruction. It means &amp;quot;define constant, long, little endian&amp;quot;.&lt;/li&gt;&#xA;&lt;li&gt;The macro handles different number of expressions, tested with 2, but I'm sure there is a limit.&lt;/li&gt;&#xA;&lt;li&gt;The number of expressions is obtained by &lt;code&gt;\#&lt;/code&gt; and used for a repetition loop.&lt;/li&gt;&#xA;&lt;li&gt;The n-th expression can be obtained by &lt;code&gt;\+&lt;/code&gt;. This special value inserts one expression after the other. On each repetition the local symbol &lt;code&gt;.value&lt;/code&gt; is set to the expression.&lt;/li&gt;&#xA;&lt;li&gt;Shifting and masking separates the bytes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre&gt;&lt;code&gt;dc_l_le macro&#xA;        rept    \#&#xA;.value  set     \+&#xA;        dc.b    (.value&amp;gt;&amp;gt;0)&amp;amp;$FF&#xA;        dc.b    (.value&amp;gt;&amp;gt;8)&amp;amp;$FF&#xA;        dc.b    (.value&amp;gt;&amp;gt;16)&amp;amp;$FF&#xA;        dc.b    (.value&amp;gt;&amp;gt;24)&amp;amp;$FF&#xA;        endr&#xA;        endm&#xA;&#xA;    org $12345678&#xA;&#xA;    dc_l_le 0,(FILEY_END-FILEY_START)               &#xA;    dc_l_le FILEZ_START,(FILEZ_END-FILEZ_START)&#xA;    dc_l_le FILEX_START,(FILEX_END-FILEX_START)  &#xA;    cnop    0,2048&#xA;&#xA;&#xA;&#xA;FILEZ_START&#xA;    incbin FileZ.BIN&#xA;FILEZ_END&#xA;    cnop    0,2048&#xA;&#xA;FILEX_START&#xA;FILEY_START&#xA;    incbin FileY.BIN&#xA;FILEY_END&#xA;    cnop    0,2048&#xA;    incbin FileX.bin&#xA;FILEX_END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: This otherwise good looking assembler cannot handle whitespace in expressions. I'd love to write &lt;code&gt;(.value &amp;gt;&amp;gt; 24) &amp;amp; $FF&lt;/code&gt; but this led to irritating error messages. It took some time to find the reason.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The command line for this suggestion is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;vasmm68k_mot.exe -Fbin -o test.bin -L test.lst test.S&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;The specific output format is not important, I think, and the listing is generated just to see that the solution works. The &amp;quot;&lt;code&gt;S&lt;/code&gt;&amp;quot; source extension is deliberately chosen out of habbits.&lt;/p&gt;&#xA;&lt;p&gt;The assembler shows these versions, I used the provided binary on Win10:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;vasm 1.8k (c) in 2002-2021 Volker Barthelmann&#xA;vasm M68k/CPU32/ColdFire cpu backend 2.4 (c) 2002-2021 Frank Wille&#xA;vasm motorola syntax module 3.15a (c) 2002-2021 Frank Wille&#xA;vasm binary output module 2.1 (c) 2002-2021 Volker Barthelmann and Frank Wille&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To avoid relocation errors, an &lt;code&gt;org&lt;/code&gt; pseudo instruction is added just for demonstration, but the real thing is most probably allocated in other ways.&lt;/p&gt;&#xA;" OwnerUserId="14875" LastEditorUserId="14875" LastEditDate="2021-05-26T07:10:00.930" LastActivityDate="2021-05-26T07:10:00.930" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="19905" PostTypeId="1" AcceptedAnswerId="19908" CreationDate="2021-05-20T09:48:22.043" Score="4" ViewCount="313" Body="&lt;p&gt;What old game is this? I don't know when it was released but, I think it was released after 1990 (Not 3D). It is a Platformer. I believe it is about aliens.&lt;/p&gt;&#xA;&lt;p&gt;In the first level you arrive in a car and there are these skeletons and you shoot them. As you keep on walking there are buildings (or lifts) that you can use. There are collectible crystal shards. After some levels you will find a big skeleton monster in a room. Another level I remember has you on the top of a building and something/someone is firing rockets at you.&lt;/p&gt;&#xA;&lt;p&gt;There was skeletons in most of the levels and they looked alien. I doubt the name of the game started with B- . Even though it was 90's game I played it on Windows XP . It is most probably a DOS game. It is similar to &lt;a href=&quot;https://www.google.com/search?kgmid=/m/03wdsl5&amp;amp;hl=en-IN&amp;amp;q=Dangerous+Dave+in+the+Haunted+Mansion&amp;amp;kgs=68953083b82ed580&amp;amp;shndl=0&amp;amp;source=sh/x/kp&amp;amp;entrypoint=sh/x/kp&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dangerous Dave 2&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21809" LastEditorUserId="-1" LastEditDate="2021-05-21T08:14:38.227" LastActivityDate="2021-05-27T15:27:10.427" Title="An old game with skeletons and other creatures" Tags="&lt;identify-this-game&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19906" PostTypeId="2" ParentId="19900" CreationDate="2021-05-20T10:16:19.517" Score="41" Body="&lt;p&gt;This sounds like &lt;a href=&quot;https://en.wikipedia.org/wiki/Interleaf&quot; rel=&quot;noreferrer&quot;&gt;Interleaf&lt;/a&gt; (released as “TPS”, “Technical Publishing Software”, in 1985), a sophisticated document creation system produced by the company of the same name, based in Massachusetts. It was the first WYSIWYG document system, and typically ran on workstations, initially Sun and Apollo workstations. Over time it was made available on a large number of minis and workstations; Interleaf 5 was available for DG Aviion, DEC VAX/VMS, DEC Ultrix, various HP systems, IBM RS/6000, Sun and SGI workstations; Interleaf 6 required Motif and was available on a smaller number of workstations. As micros became more powerful it eventually ended up available there too, on Macs (for a short while) and PCs (version 5 on 386+ PCs with DOS, version 6 on 32-bit Windows).&lt;/p&gt;&#xA;&lt;p&gt;The name comes from the software’s ability to interleave text and graphics on-screen. Documents are deeply structured which makes Interleaf a good fit for technical documentation.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://archive.org/details/198911ByteMagazine/page/n275/mode/2up&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LDfdX.png&quot; alt=&quot;Screenshot of Interleaf, from BYTE Magazine&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="79" LastEditDate="2021-05-20T15:38:39.420" LastActivityDate="2021-05-20T15:38:39.420" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19907" PostTypeId="1" AcceptedAnswerId="19922" CreationDate="2021-05-20T12:50:20.090" Score="3" ViewCount="205" Body="&lt;p&gt;Is it possible to hack Amiga Alice chip and use more than 2MB CHIP RAM? It's a long shot, but I assume if it was possible someone would have done it already?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The maximum amount of Chip RAM in any model is 2 MiB. The Amiga 4000 motherboard includes a non-functional jumper that anticipated later chips and is labeled for 8 MiB of Chip RAM—regardless of its position, the system only recognizes 2 MiB due to the limitations of the &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Amiga_Chip_RAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Alice chip.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2021-05-21T16:25:42.183" Title="Can Alice be hacked to use more than 2MB Chip Ram" Tags="&lt;chip&gt;&lt;ram&gt;&lt;old-hardware-adaptation&gt;&lt;amiga-500&gt;&lt;new-hardware-adaptation&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19908" PostTypeId="2" ParentId="19905" CreationDate="2021-05-20T13:44:53.443" Score="9" Body="&lt;p&gt;I found it! It is &lt;a href=&quot;https://en.wikipedia.org/wiki/Bio_Menace&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bio Menance&lt;/a&gt; released in 1993. I thought for a long time and remembered that the name of the file was &amp;quot;bm&amp;quot;. I googled for bm dos game and got it&lt;/p&gt;&#xA;" OwnerUserId="21809" LastEditorUserId="15334" LastEditDate="2021-05-27T15:27:10.427" LastActivityDate="2021-05-27T15:27:10.427" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19909" PostTypeId="1" AcceptedAnswerId="19912" CreationDate="2021-05-20T14:52:22.030" Score="5" ViewCount="154" Body="&lt;p&gt;I was reminded of the plastic keyboard overlays that I remember from the 1990s. They showed key combinations, hotkeys, and command keys for certain applications. The most common one was just an overlay that sat over the function keys and showed what they did. I remember some applications having a full keyboard overlay for other keys.&lt;/p&gt;&#xA;&lt;p&gt;What is the generic term for these widgets?&lt;/p&gt;&#xA;&lt;p&gt;I tried searching for &amp;quot;keyboard overlay&amp;quot; but got modern keycap stickers and not the widget I am thinking of.&lt;/p&gt;&#xA;" OwnerUserId="3394" LastActivityDate="2021-05-20T22:47:40.887" Title="What is the general term for keyboard overlays that show special commands or hotkeys?" Tags="&lt;keyboards&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19910" PostTypeId="1" CreationDate="2021-05-20T16:05:58.257" Score="10" ViewCount="774" Body="&lt;p&gt;As ASCII is a 7-bit code set, and ISO 646 cannot satisfy needs of many languages, variable-length ISO 2022/EUC was developed, which introduced &lt;a href=&quot;https://en.wikipedia.org/wiki/C0_and_C1_control_codes#C1_controls&quot; rel=&quot;noreferrer&quot;&gt;C1 control codes&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;However, C1 have hardly left any impression nowadays beyond 0x85 Next Line. Unicode just ignores other C1 control codes. Moreover, EBCDIC control codes were not compatible, so a large market doesn't adopt it either.&lt;/p&gt;&#xA;&lt;p&gt;Were they widely used before? And to what extent? Note it's not about the usage by ISO/ECMA standard, but how they were used in real life.&lt;/p&gt;&#xA;" OwnerUserId="17812" LastEditorUserId="6659" LastEditDate="2021-05-20T16:34:23.620" LastActivityDate="2021-05-20T23:21:35.747" Title="How widely used were C1 control codes?" Tags="&lt;history&gt;&lt;text&gt;&lt;character-sets&gt;&lt;unicode&gt;&lt;escape-codes&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19911" PostTypeId="2" ParentId="19910" CreationDate="2021-05-20T17:04:08.313" Score="6" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;However, C1 have hardly left any impression nowadays beyond 0x85 Next Line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Not restricted to C1. Not much of any control character has still an 'impression' nowadays.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Unicode just ignores other C1 control codes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sorry to disappoint you, but Unicode does define all of them as part of the &lt;a href=&quot;https://unicode.org/charts/PDF/U0080.pdf&quot; rel=&quot;noreferrer&quot;&gt;C1 Controls and Latin-1 Supplement&lt;/a&gt; page. What to do with them concerns Unicode as much as with (almost) any other character ... not at all.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Moreover, EBCDIC control codes were not compatible, so a large market doesn't adopt it either.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Depends on you each ones value for $LARGE_MARKET, doesn't it? While I do agree that the /370 world is all one needs to know, others did have as well some impact - and most modern stuff is rather based on their heritage.&lt;/p&gt;&#xA;&lt;p&gt;For example the DEC linage as one of the more prominent ones. Here Terminals did use a good number of these codes.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Were they widely used before?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. Right of my memory the VT220 supports codes like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HTS, IND, RI, NEL and more for cursor handling.&lt;/li&gt;&#xA;&lt;li&gt;SS2 and SS3 for single code shifts&lt;/li&gt;&#xA;&lt;li&gt;DCS and ST for keyboard programming&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And most important of all: &lt;strong&gt;CSI&lt;/strong&gt; to reduce transmission overhead.&lt;/p&gt;&#xA;&lt;p&gt;In fact, I always feel that many (if not all) of these extensions were made to fit what DEC had in mind for their terminals.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And to what extent?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, there might be many more with other terminal variants. Also, &lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI.SYS&quot; rel=&quot;noreferrer&quot;&gt;ANSI.SYS&lt;/a&gt; for MS-DOS does as well support some, so essentially next to all (MS-)DOS machines running2.0 and up:))&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-05-20T17:04:08.313" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19912" PostTypeId="2" ParentId="19909" CreationDate="2021-05-20T17:29:42.000" Score="5" Body="&lt;p&gt;The plastic sheets or plates with cut-out(s) to be placed over a computer keyboard are sometimes called &amp;quot;templates,&amp;quot; although as @Raffzahn points out in the comments, other terms include &amp;quot;overlay&amp;quot; and &amp;quot;key chart.&amp;quot;  Some were placed over a portion of the keyboard (often the function keys) while others were designed to lay over the entire keyboard.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.computerhistory.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computer History Museum&lt;/a&gt; has several exemplars.  One from &lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102734983&quot; rel=&quot;nofollow noreferrer&quot;&gt;DocuMate&lt;/a&gt; surrounds the entire keyboard.  They also have a few early IBM PC keyboards with Lotus 1-2-3 templates affixed to the function keys on the left-hand side of the keyboard (&lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102734978&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://www.computerhistory.org/collections/catalog/102718545&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Here is another example of a WordStar template on an Osborne 1:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/SL56C.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SL56C.jpg&quot; alt=&quot;WordStar Keyboard Template on an old computer&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="4222" LastEditDate="2021-05-20T22:47:40.887" LastActivityDate="2021-05-20T22:47:40.887" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19913" PostTypeId="2" ParentId="19711" CreationDate="2021-05-20T17:54:30.180" Score="2" Body="&lt;p&gt;What a bunch of whippersnappers!&lt;/p&gt;&#xA;&lt;p&gt;EBCDIC was part of the IBM S/360 announcement April 7, 1964.  Basic first ran May 1, 1964.  No connection.&lt;/p&gt;&#xA;&lt;p&gt;While DTSS was a time sharing system, the GE-225 also ran batch programs.  My second or third assembly language was VFAP (Valley Forge Assembly Program) on a 225 at the San Fernando Valley State College.  And we submitted jobs on cards.&lt;/p&gt;&#xA;&lt;p&gt;The card punch most frequently used at the time of Basic's inception was the IBM 026.  This was developed in the late 1940s.  It was originally designed for use with the IBM 407 accounting machine.  So the character set on the original 026 did not even include parentheses.  (Parenthetically, if you will pardon the phrase, a later 026 version was developed which included parentheses for that newfangled Fortran programming language.)&lt;/p&gt;&#xA;&lt;p&gt;026 CE manual:&#xA;&lt;a href=&quot;http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/punchedCard/Keypunch/024-026/22-8319-0_24_26_Customer_Engineering_Preliminary_Manual_of_Instruction_1950.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/punchedCard/Keypunch/024-026/22-8319-0_24_26_Customer_Engineering_Preliminary_Manual_of_Instruction_1950.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Doug Jones lists a GE card code with both parentheses and square brackets.  See:&#xA;&lt;a href=&quot;https://homepage.divms.uiowa.edu/%7Ejones/cards/codes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://homepage.divms.uiowa.edu/~jones/cards/codes.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I really think that those were developed for the later time sharing machines (e.g. 415, 635).  But I never used these in a time sharing environment.&lt;/p&gt;&#xA;&lt;p&gt;I received an introduction to the differences between 026 BCD and 029 EBCDIC when my first COBOL program, punched on an 026, generated a raft of errors due to the 360-50 expecting 029 EBCDIC.  And 029-punched programs never printed correctly on a 407 which many of us sued for proofreading.&lt;/p&gt;&#xA;&lt;p&gt;So, to answer the original question - Basic did not use square brackets or curly braces because at least some of the hardware they used for input did not have square brackets or curly braces.&lt;/p&gt;&#xA;&lt;p&gt;In contrast, the DecWriter terminals used at Bell Labs when Unix and C were developed included those characters.  So the C language reflected their input devices in much the same way.&lt;/p&gt;&#xA;&lt;p&gt;Have to cut this off.  The museum keepers are coming around to dust the dinosaur bones and I have to pretend to be fossilized.&lt;/p&gt;&#xA;" OwnerUserId="21820" LastActivityDate="2021-05-20T17:54:30.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19915" PostTypeId="2" ParentId="19910" CreationDate="2021-05-20T20:06:18.883" Score="7" Body="&lt;p&gt;Within DEC, &amp;quot;all the time&amp;quot;.  Why send two bytes down a wire at a lousy 300-to-1200 bps when one byte would do?&lt;/p&gt;&#xA;&lt;p&gt;DEC terminals from the VT200 series onwards supported an 8-bit character set known as &amp;quot;DEC standard 169&amp;quot;, a close cousin to ISO 8859-1 (there were a couple of different character assignments).  I'm pretty sure the C1 controls were specified as part of DEC 169.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;DEC 169&amp;quot; may have been internal jargon; Wikipedia calls it the &lt;a href=&quot;https://en.wikipedia.org/wiki/Multinational_Character_Set&quot; rel=&quot;noreferrer&quot;&gt;&amp;quot;DEC multinational character set&amp;quot;&lt;/a&gt;.  And it jogged my memory - the main differences in displayable characters is y-with-diaresis and o-e-ligature (in both cases).&lt;/p&gt;&#xA;&lt;p&gt;At one point in my life I wrote the front end of an IBM 3270 terminal emulator that ran on DEC VAXen, which used practically all of the VT200 cursor-movement repertoire.&lt;/p&gt;&#xA;&lt;p&gt;In particular, the single-byte CSI was used instead of the two-byte equivalent, ESC [.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-05-20T23:21:35.747" LastActivityDate="2021-05-20T23:21:35.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19916" PostTypeId="1" CreationDate="2021-05-20T20:38:37.320" Score="12" ViewCount="458" Body="&lt;p&gt;In an 1981 interview with Steve Jobs, he says the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There is a common conception that people have of computers which is&#xA;more along the lines of &amp;quot;1984&amp;quot;; very large, very centralized&#xA;computers. And &lt;strong&gt;I know the privacy issue is very very hot in the&#xA;media these days&lt;/strong&gt;.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;What specifically was he referring to about privacy?&lt;/em&gt; It sounds like he had something particular in mind.  But he doesn't really elaborate, and the interviewer doesn't probe any further (which might be a tacit acknowledgement that Jobs' perception about it being &amp;quot;hot&amp;quot; was accurate?)&lt;/p&gt;&#xA;&lt;p&gt;Its easy for us today (2021) to recognize many computer/web privacy issues. Projecting that backwards seems tempting but back in an era when most things people would encounter were pre-digital its not clear to me what the concern was (not to say it was invalid). I think some subset of financial and government records that would affect 'normal' people would have been computerized at that time, but probably not very much else?&lt;/p&gt;&#xA;&lt;p&gt;The date of the interview is said to be 2/18/1981, though I don't know when it would have actually aired. Presumably he is referring to something that occurred around then?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kcgCim.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kcgCim.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(&lt;a href=&quot;https://youtu.be/DbfejwP1d3c?t=602&quot; rel=&quot;noreferrer&quot;&gt;video link at about the time where he makes that statement&lt;/a&gt; - time 10:14 in the actual video, but timecode 19:30:58 is shown onscreen)&lt;/p&gt;&#xA;" OwnerUserId="11795" LastActivityDate="2021-05-21T20:38:19.560" Title="According to Steve Jobs in 1981, what computer privacy issue was &quot;very very hot in the media&quot; at that time?" Tags="&lt;history&gt;&lt;apple&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19917" PostTypeId="2" ParentId="19889" CreationDate="2021-05-20T23:46:52.530" Score="4" Body="&lt;p&gt;The concept has been around a lot longer than the moniker. Cash registers/other mechanical/electronic calculators often had one or more memories you could store the current value or the result of a calculation into, and then recall it for use in other operations. Human calculators often used a scratch-pad for temporary memory.&lt;/p&gt;&#xA;&lt;p&gt;I'd be willing to bet that the concept of the clip or copy board goes all the way back to the earliest newspaper layout rooms. It's probably not an accident that Apple picked that feature name, given the high percentage of news/media outlets they targeted their marketing towards&lt;/p&gt;&#xA;" OwnerUserId="19597" LastActivityDate="2021-05-20T23:46:52.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19918" PostTypeId="2" ParentId="6197" CreationDate="2021-05-21T10:56:31.467" Score="1" Body="&lt;p&gt;My older brother had a TRS-80 which he got for his University days, so that would have been in 1978-1982. I remember it was the first computer i saw, and he had this great game which we loved to play when we visited him (i was 11 at the time) which was CRITICAL MASS. It was brilliant - simple and very addictive. As described previously, it involved stacking counters on top of each other until they hit Critical Mass, then they would explode to the surrounding squares. I loved it, and have been looking for it ever since. No doubt i will see someone produce it for an Ipad or similar, i will download it and wonder what all the fuss was about - but in the early eighties, it was cutting edge !&lt;/p&gt;&#xA;" OwnerUserId="21830" LastActivityDate="2021-05-21T10:56:31.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19920" PostTypeId="2" ParentId="149" CreationDate="2021-05-21T15:00:42.520" Score="7" Body="&lt;p&gt;Yes, these are bus and tag terminators for mainframe channels that used to run at 3MB/sec speeds.  Used as late as 1998 in P/390 development systems.  The IBM and Amdahl terminators are equivalent.&lt;/p&gt;&#xA;" OwnerUserId="21833" LastActivityDate="2021-05-21T15:00:42.520" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19921" PostTypeId="2" ParentId="19916" CreationDate="2021-05-21T15:05:23.170" Score="-1" Body="&lt;p&gt;Steve Jobs was probably referring to the abortion issue, which was framed by SCOTUS as a Privacy issue, and was a rapidly growing source of division in American politics in the early-1980s.&lt;/p&gt;&#xA;&lt;p&gt;The SCOTUS decision on Roe v. Wade occurred in 1973. As a constitutional question, the Justices took up the right to privacy as the central argument in their decision. At that time, additional questions around the issue from both sides of the debate were less &amp;quot;well argued&amp;quot; than they are today. Therefore, it was still largely a question, both legally and in the public's mind, regarding Privacy. The simmering controversy was reinvigorated with Ronald Reagan's political ascension in 1980.&lt;/p&gt;&#xA;&lt;p&gt;from Wikipedia article on the case:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In January 1973, the Supreme Court issued a 7–2 decision ruling that the Due Process Clause of the Fourteenth Amendment to the U.S. Constitution provides a &amp;quot;right to privacy&amp;quot; that protects a pregnant woman's right to choose whether or not to have an abortion.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Given Steve Job's upbringing and early adult experiences, it is unsurprising that he would be following attentively the &amp;quot;zeitgeist&amp;quot; surrounding the issue. Also, given this topic and the relative lack of public consensus about it, it is unsurprising that the interviewer quickly moved along...&lt;/p&gt;&#xA;" OwnerUserId="4335" LastEditorUserId="4335" LastEditDate="2021-05-21T15:48:09.860" LastActivityDate="2021-05-21T15:48:09.860" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19922" PostTypeId="2" ParentId="19907" CreationDate="2021-05-21T16:25:42.183" Score="4" Body="&lt;p&gt;TL;DR The Amiga AGA Alice chip can only support 2MiB of CHIP RAM because it has 20 address lines, and thus allows 2^20 (1M) by 16-bit memory access.&lt;/p&gt;&#xA;&lt;p&gt;The first Agnus chip found in the A1000 only supported 512KiB of CHIP RAM. But this was soon replaced by &amp;quot;Fat Agnus&amp;quot; in the A2000 that supported 512K x 16 (or 1MiB) of CHIP RAM using 19 address lines.&lt;/p&gt;&#xA;&lt;p&gt;The ECS Agnus, introduced with the A3000, extended Agnus with an A20 line. So, now you could have 1M x 16 (or 2MiB) of CHIP RAM. This was not fundamentally changed with the AGA Alice chip, which still has A1-A20 and a 16-bit data bus.&lt;/p&gt;&#xA;&lt;p&gt;Note: AGA has some fancy memory access abilities to use Fast Page Mode and 32-bit bitplane data access. But the Copper and Blitter remain 16-bit only, with no possibility to exceed the 2MiB limitation.&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2021-05-21T16:25:42.183" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19923" PostTypeId="2" ParentId="19727" CreationDate="2021-05-21T18:43:48.270" Score="1" Body="&lt;p&gt;Look for Evans &amp;amp; Sutherland PS300 and decide whether this is the unit you remember.  There were other models (PS350?) later.  The timing (1987) is about right.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://computergraphmuseum.free.fr/evans.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://computergraphmuseum.free.fr/evans.htm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=5QUvyA1VJmk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=5QUvyA1VJmk&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21835" LastActivityDate="2021-05-21T18:43:48.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19924" PostTypeId="2" ParentId="19916" CreationDate="2021-05-21T20:32:34.500" Score="7" Body="&lt;p&gt;Personal privacy, in general, was a major issue in the 70s in America, maybe more so than today even.  In the previous decade there had been scandals with illegal wiretaps by the US government and major legal cases expanding and engaging with the constitutional right to privacy.  The first US federal laws on privacy were passed in the mid-1970s.  In the previous decade, there had been major works in the arts with such themes -- from &lt;em&gt;THX 1138&lt;/em&gt; to &lt;em&gt;A Scanner Darkly&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;After several decades with social rebels and amateur hackers having had access to personal computers -- perhaps not far off what Jobs was envisioning when he spoke at times -- we have perhaps forgotten that computers originated in large part from the military-industrial complex.&lt;/p&gt;&#xA;&lt;p&gt;They were originally the domain of large corporations and governments.  Administering tax records and designing nuclear bombs.  Computers were for and by &amp;quot;the Man&amp;quot;.  Throughout the 70s they were increasingly used to track and model people's commerce and behaviour.  See Ted Nelson's 1974 book &lt;em&gt;Computer Lib&lt;/em&gt; for a look into the countercultural mindset towards computers at the time.&lt;/p&gt;&#xA;&lt;p&gt;Around 1981, one of the buzzwords in the industry was &amp;quot;database&amp;quot;.  Not the software per se, but the data contained in them.  Online computer records.  Mainframes were fast enough and had enough storage, to have a record on every citizen in the country.  And all this information, usually held by governments and large corporations, was potentially instantly accessible anywhere in the world by computer network.  I'm sure the more prophetic even imagined a computer on the end of illegal wiretaps, logging everything a person said.&lt;/p&gt;&#xA;&lt;p&gt;Sound familiar?  I suspect he was talking about the same things we talk about today with privacy and computers now, basically.  It's an old conversation at this point.&lt;/p&gt;&#xA;" OwnerUserId="4946" LastEditorUserId="4946" LastEditDate="2021-05-21T20:38:19.560" LastActivityDate="2021-05-21T20:38:19.560" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19926" PostTypeId="1" AcceptedAnswerId="19927" CreationDate="2021-05-22T20:05:17.513" Score="4" ViewCount="316" Body="&lt;p&gt;I want to use OpenSSH for Amiga, copied &lt;code&gt;ssh&lt;/code&gt; and other files to OS:Utilities from extracted archive, but I'm unable to run the binary. Tried to set protection but it didn't help either. How to make it a command like &lt;code&gt;adf2disk&lt;/code&gt; or others that came as one file binary?&lt;/p&gt;&#xA;&lt;p&gt;Source: &lt;a href=&quot;http://aminet.net/package/comm/tcp/openssh-bin&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://aminet.net/package/comm/tcp/openssh-bin&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8ye7f.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8ye7f.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="15334" LastEditDate="2021-05-23T05:17:31.590" LastActivityDate="2021-05-23T05:17:31.590" Title="How can I run OpenSSH under AmigaDOS?" Tags="&lt;amiga&gt;&lt;software&gt;&lt;file-system&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19927" PostTypeId="2" ParentId="19926" CreationDate="2021-05-22T22:05:15.403" Score="9" Body="&lt;p&gt;as stated in the aminet readme&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Architecture:    ppc-amigaos&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;ssh&lt;/code&gt; executable has a ELF fourcc id, not a standard amiga hunk 03F3 id.&lt;/p&gt;&#xA;&lt;p&gt;You're trying to run the program on a classic 68k amiga, but you need a powerpc cpu board on OS4 to run it.&lt;/p&gt;&#xA;&lt;p&gt;It's tough (most links are dead) but possible to find OS3/classic amiga versions.&lt;/p&gt;&#xA;&lt;p&gt;One is still available here: &lt;a href=&quot;https://sourceforge.net/projects/amiga/files/OpenSSH/3.9/openssh-3.9p1.lha/download&quot; rel=&quot;noreferrer&quot;&gt;https://sourceforge.net/projects/amiga/files/OpenSSH/3.9/openssh-3.9p1.lha/download&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have downloaded it and checked the &lt;code&gt;ssh&lt;/code&gt; file and it has a classic 0x3F3 header means it can run on a 68k amigaos architecture.&lt;/p&gt;&#xA;&lt;p&gt;Not sure of the usefulness, because if it's not maintained anymore, it could be obsolete for the newer protocols. Trying to do modern things with classic Amigas is more and more a challenge.&lt;/p&gt;&#xA;" OwnerUserId="3316" LastEditorUserId="3316" LastEditDate="2021-05-22T22:11:30.143" LastActivityDate="2021-05-22T22:11:30.143" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19928" PostTypeId="2" ParentId="19880" CreationDate="2021-05-23T00:32:23.667" Score="6" Body="&lt;p&gt;The classic ISA bus has very little need for bus termination. For example the first IBM PCs, such as the PC, XT and AT for example did not use any bus termination, and their ISA bus worked fine.&lt;/p&gt;&#xA;&lt;p&gt;So, in short the answer is, no you don't have to terminate the bus, as depending on how you do it, it might just make things worse. The cards on the bus are definitely not designed to sit in a system that has DC or AC terminations, so for example they might have trouble driving a terminated data bus, due to more DC current it takes to drive it, or due to the increased capacitance of AC termination.&lt;/p&gt;&#xA;&lt;p&gt;The reason why it can work without termination is strictly the speed it operates. Not the clock speed that can be measured in MHz, but the speed of the logic signal edges. The used logic chips of the computers mentioned above are LS TTL or ALS TTL types, which on a properly designed backplane PCB will not cause too much trouble. Some overshoot and undershoot may be present and that is fine as long as it does not cause ringing.&lt;/p&gt;&#xA;&lt;p&gt;The &amp;quot;some homebrew projects use active termination&amp;quot; is what they chose to do. One of the projects seem to work better with it, but it did mix faster F series TTL chips with ALS TTL chips, so faster chips mean it is harder to make it more reliable, and the PCB was only two-sided, instead of having four layers to include reference planes for the signals, so crosstalk can be an issue. So, a good desing might require termination to work, a better design doesn't require termination to work.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastActivityDate="2021-05-23T00:32:23.667" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19929" PostTypeId="1" CreationDate="2021-05-23T21:34:16.460" Score="10" ViewCount="471" Body="&lt;p&gt;Occasionally I have heard references to a peculiarity of certain (old) Fortran compilers, with regards to subprogram argument passing. Here is an example, from &lt;a href=&quot;https://stackoverflow.com/a/1995476&quot;&gt;an answer to a Stack Overflow question&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Some early Fortran compilers implemented constants by using a constant pool. All parameters were passed by reference. If you called a function, e.g.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;f(1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The compiler would pass the address of the constant 1 in the constant pool to the function. If you assigned a value to the parameter in the function, you would change the value (in this case the value of 1) globally in the program. Caused some head scratching.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The C FAQ also mentions “FORTRAN's classic idiosyncrasy involving constants passed by reference” in &lt;a href=&quot;http://www.c-faq.com/ptrs/fn17.html&quot; rel=&quot;noreferrer&quot;&gt;a footnote&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I have no problem believing that some compilers behaved this way. However, I would like to have some contemporaneous documents that confirm it. The nature of the document doesn't matter too much; I merely want confirmation from a non-anecdotal source (although some kind of manual would be ideal).&lt;/p&gt;&#xA;" OwnerUserId="19767" LastEditorUserId="15334" LastEditDate="2021-05-24T10:25:54.103" LastActivityDate="2021-05-28T04:25:14.097" Title="Are there any primary sources for the “passing constant by reference” behavior in old Fortran compilers?" Tags="&lt;history&gt;&lt;programming&gt;&lt;compilers&gt;&lt;fortran&gt;&lt;bugs&gt;" AnswerCount="6" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="19930" PostTypeId="1" CreationDate="2021-05-24T05:41:36.900" Score="8" ViewCount="242" Body="&lt;p&gt;The well-known story goes like this: When Nintendo had made Super Mario Bros. 2 in Japan, they for whatever reason decided to not release that game in the West. Instead, they reskinned an existing, unrelated game (Doki Doki Panic) with Mario characters and still called that &amp;quot;Super Mario Bros. 2&amp;quot; for the Western release.&lt;/p&gt;&#xA;&lt;p&gt;I certainly have memories playing that &amp;quot;Western&amp;quot; SMB 2 on the NES. No doubt about that.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;But&lt;/em&gt; I also vividly remember one time in Finland when my older cousins one time played this strange Super Mario Bros. level where there was &lt;em&gt;wind&lt;/em&gt; and &lt;em&gt;leaves&lt;/em&gt; blowing! That's a distinct feature of the Japanese original SMB 2. It does not exist in the original SMB, nor in the Western SMB 2.&lt;/p&gt;&#xA;&lt;p&gt;I want to make clear that this was &lt;em&gt;not&lt;/em&gt; the Super Mario All-Stars &amp;quot;Lost Levels&amp;quot; Mario game on the SNES. I know for a fact that it was on a NES. It looked just like the original SMB, but it had wind and leaves blowing. So it must've been the original Japanese SMB 2.&lt;/p&gt;&#xA;&lt;p&gt;However, the NES was region-locked and that original SMB 2 game never saw a Western release. So how is this possible?&lt;/p&gt;&#xA;&lt;p&gt;Did they use some sort of pirate release or something? Was there such a thing? I never pictured them as &amp;quot;hardcore gamers&amp;quot; who would have &amp;quot;international connections&amp;quot; and whatnot, so it all seems very strange to me. They are no longer available to question, so I cannot get their feedback.&lt;/p&gt;&#xA;" OwnerUserId="21847" LastEditorUserId="5222" LastEditDate="2021-05-24T07:01:38.593" LastActivityDate="2021-05-25T08:28:00.347" Title="Was the Japanese Super Mario Bros. 2 ever released in Europe?" Tags="&lt;nes&gt;&lt;nintendo&gt;&lt;famicom&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19931" PostTypeId="2" ParentId="19929" CreationDate="2021-05-24T07:08:57.653" Score="5" Body="&lt;p&gt;In the 1990s, the company I worked for sold a suite of code analysis and refactoring tools for Fortran, marketed as &lt;a href=&quot;https://polyhedron.com/?product=plusfort#qa&quot; rel=&quot;nofollow noreferrer&quot;&gt;PlusFort&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The GXCHK module performed static analysis of Fortran code to look for common errors, including:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Subprogram argument mismatch or misuse (e.g. constant actual argument&#xA;is illegally modified by subprogram).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Though I am no longer in contact with the company, I can remember this being an issue with Fortran-77 and before, as evidenced by the need of a QA tool to identify such bugs.&lt;/p&gt;&#xA;" OwnerUserId="5222" LastEditorUserId="5222" LastEditDate="2021-05-24T18:44:50.413" LastActivityDate="2021-05-24T18:44:50.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19933" PostTypeId="2" ParentId="7502" CreationDate="2021-05-24T13:04:00.593" Score="9" Body="&lt;p&gt;This answer elaborates a bit on the answers by @Raffzahn and @thrust26. The answer by @thrust26 is correct.  The alien sprites are not positioned by repeated &lt;code&gt;RESP0&lt;/code&gt; or &lt;code&gt;RESP1&lt;/code&gt; triggers as the code below shows.  The book &amp;quot;Racing the beam&amp;quot; mentions the following in a section about sprites:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Rick Maurer, the programmer for the VCS port of Space Invaders, discovered that strobing &lt;code&gt;HMOVE&lt;/code&gt; while a line was being drawn would reposition objects immediately.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This suggests that this technique was used in Space Invaders.  However, the only &lt;code&gt;HMOVE&lt;/code&gt; triggers that appear in the code occur directly after a &lt;code&gt;WSYNC&lt;/code&gt;, so definitely not multiple times per scan line.&lt;/p&gt;&#xA;&lt;p&gt;The aliens are drawn using the two player sprites.  Both &lt;code&gt;NUSIZ0&lt;/code&gt; and &lt;code&gt;NUSIZ1&lt;/code&gt; are set to &lt;code&gt;$06&lt;/code&gt; which means single pixel resolution and three copies each at a medium spacing.  The copies of both sprites interlace to form a row of six in a pattern &amp;quot;A B A B A B&amp;quot;.  The appearance of each &amp;quot;copy&amp;quot; is changed by loading different sprite patterns in the &lt;code&gt;GRP0&lt;/code&gt; and &lt;code&gt;GRP1&lt;/code&gt; registers by carefully timed code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;           lda  ($f8),y   ; Load pattern for alien six in X.&#xA;           tax  &#xA;           lda  ($ee),y   ; Load pattern for alien one in GRP0&#xA;           sta  GRP0&#xA;           lda  ($f0),y   ; Load pattern for alien two in GRP1&#xA;           sta  GRP1&#xA;           lda  ($f2),y   ; Update pattern for alien three in GRP0&#xA;           sta  GRP0&#xA;           lda  ($f4),y   ; Update pattern for alien four in GRP1&#xA;           sta  GRP1&#xA;           lda  ($f6),y   ; Update pattern for alien five in GRP0&#xA;           sta  GRP0&#xA;           txa            ; Update pattern for alien six in GRP1&#xA;           sta  GRP1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The &lt;code&gt;Y&lt;/code&gt; register counts down from 9 to 0 (inclusive) to draw ten scan lines for each alien in a row.  An alien pattern can easily be modified by adjusting the low byte of any of the pointers in &lt;code&gt;$ee&lt;/code&gt; to &lt;code&gt;$f8&lt;/code&gt;.  Interestingly, these scan lines are drawn without any intermediate &lt;code&gt;WSYNC&lt;/code&gt; trigger, purely based on careful instruction timing.&lt;/p&gt;&#xA;" OwnerUserId="20160" LastActivityDate="2021-05-24T13:04:00.593" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19934" PostTypeId="1" AcceptedAnswerId="19940" CreationDate="2021-05-24T13:08:49.250" Score="6" ViewCount="1016" Body="&lt;p&gt;I'm trying to emulate an Amstrad CPC 464. Currently, I'm working on interrupt handling and I'm wondering: Some Z80 instructions, like &lt;code&gt;EI&lt;/code&gt; or decoding multiple consecutive &lt;code&gt;0xdd&lt;/code&gt; prefixes don't accept interrupts occurring directly after them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Are interrupt requests remembered until when they can next be accepted or could they be lost?&lt;/strong&gt; The second option seems problematic for me, but I can't find any explicit documentation.&lt;/p&gt;&#xA;&lt;p&gt;In the case of the &lt;code&gt;EI&lt;/code&gt; instruction it seems the Z80 can just ignore the interrupt request outright, because interrupts are currently not enabled, but what happens in the case of the prefix? Is the interrupt acknowledged after the next instruction has been executed? The reason why I'm confused about this is that I read that the interrupt request signal generated by the gate array only lasts about 1.4 microseconds, which even is shorter than some instructions.&lt;/p&gt;&#xA;&lt;p&gt;For reference, &lt;a href=&quot;https://www.grimware.org/doku.php/documentations/devices/gatearraydo=export_xhtml#interrupt.generator&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; is where I got the 1.4 microseconds from.&lt;/p&gt;&#xA;" OwnerUserId="16318" LastEditorUserId="535" LastEditDate="2021-05-25T13:59:43.850" LastActivityDate="2021-05-25T14:26:24.840" Title="How long are interrupt requests remembered on the Amstrad CPC?" Tags="&lt;z80&gt;&lt;interrupt&gt;&lt;cpc&gt;&lt;amstrad&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19935" PostTypeId="2" ParentId="19866" CreationDate="2021-05-24T13:33:33.927" Score="2" Body="&lt;p&gt;There was a little overlap of CISC and RISC.  V3R6 was the first release to support RISC and had similar function to the CISC release V3R1.  This was followed by V3R2 for CISC and V3R7 for RISC.  From then on, it was RISC only so V3R2 was the last CISC release.&lt;/p&gt;&#xA;&lt;p&gt;Most programs could be carried across but the hardware independence did not work like Java today.  The programs contain hardware specific code but the hardware independent intermediate code was also stored in the program object.  When a program is restored to incompatible hardware, the hardware specific code is dropped and the second stage compile reruns.  This also happened in the transition from the S/38 to the AS/400 and again later on.&lt;/p&gt;&#xA;&lt;p&gt;Long ago, even back on the S/38, there were third party space saving products which would drop the intermediate code.  They would often boast of doubling your disk capacity.  Programs did drop to about half their size but you would only double your capacity if you had only programs and no data (unlikely for these machines).  Later, IBM supported this procedure which they called &amp;quot;removiving observability&amp;quot;.  I don't think that they ever intended to support this but when the third party products appeared, they may have decided that it is better that they do it than others.  A cost of removing observability is that you will not be able to restore the program to new hardware.&lt;/p&gt;&#xA;&lt;p&gt;A while ago, I asked whether it is possible to restore a program from the S/38 (the predecessor of the AS/400) to an IBM i (its latest form).  I expect that it would be possible for the reasons described above but there would be a practical problem of finding a common storage format.  It is conceivable that an S/38 program may have lingered unused through numerous updates or a save file (online save) might have lingered.  &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/17092/can-i-restore-an-s-38-program-to-a-current-ibm-i&quot;&gt;Can I restore an S/38 program to a current IBM i?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7805" LastEditorUserId="7805" LastEditDate="2021-05-24T13:39:20.737" LastActivityDate="2021-05-24T13:39:20.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19936" PostTypeId="2" ParentId="19934" CreationDate="2021-05-24T14:34:31.200" Score="9" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;but I can't find any explicit documentation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The documentation for the Z80 behaviour is in its manual. For the way the CPC hardware handles it, you may need to see these circuits. It may, for example hold an IRQ until it is accepted.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;but what happens in the case of the prefix? Is the interrupt acknowledged after the next instruction has been executed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The same way as when an interrupt occurs half way through an instruction.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The reason why I'm confused about this is that I read that the interrupt request signal generated by the Gate Array only lasts about 1.4 microseconds, which even is shorter than some instructions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The linked page does not really show if that is linked to any kind of CPU response or not. It would be unusual to assert INT only for a time that short. To me this rather seems like a single shot recorded where the CPU simply reacted to the Interrupt within 1.4 µs. Without further clarification, I'd be a bit sceptical about this being valid in general.&lt;/p&gt;&#xA;&lt;p&gt;Then again, the CPC timing is kind of complicated. For one thing, instructions are synchronized to video execution, and timer handling does include a correction factor, so the answer to this case may be less Z80-related and more due to the way the CPC operates.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Z80 Interrupt Initiation&lt;/h2&gt;&#xA;&lt;p&gt;The Z80 Technical Manual does describe the interrupt signals and their behaviour already in full on page 8:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W6CqY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W6CqY.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Taken from Z80-CPU Technical Manual of 1976)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;As described, the IRQ is level sensitive, so any request must be held low until it is recognized - any circuit design should hold it low at least until acknowledged (IORQ active while M1 is active), or better until service started. It will only be recognized at the beginning (raising clock) of the last T-State of the last instruction and only if there is no higher priority issue - such as NMI or BUSRQ. To do so it must be low for at least 80 ns before the rising clock edge.&lt;/p&gt;&#xA;&lt;p&gt;NMI in contrast is edge triggered. An occurrence at any time during processing will be recorded (minimum needed pulse width is 80 ns), but handling is postponed until the end of the actual instruction (*1).&lt;/p&gt;&#xA;&lt;p&gt;For more information, there is a high quality 'rewrite' of the May 1978 &lt;em&gt;&lt;a href=&quot;http://www.z80.info/zip/z80-interrupts_rewritten.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Z80 Family Program Interrupt Structure&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - In fact, the detailed description of NMI on page 17/18 seems to hold a copy/paste error - that got corrected in later manuals.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="7946" LastEditDate="2021-05-25T14:26:24.840" LastActivityDate="2021-05-25T14:26:24.840" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19937" PostTypeId="2" ParentId="19847" CreationDate="2021-05-24T18:06:29.473" Score="2" Body="&lt;p&gt;The question asked why early 1940s computers were predominantly made from relays. The answer to this question might be simplified if limited to discussion of factual commercial and military activities in the United States from about 1940 to 1950.&lt;/p&gt;&#xA;&lt;p&gt;Relays were durable, and even as scrap many reclaimed relays worked ok. Tubes were more difficult to find. And tube radios were relatively expensive because tubes weren’t cheap.  In essence, with the country in the grip of the depression, there were not many useable surplus tubes prior to 1940.  &lt;em&gt;One would not expect to find surplus or used tubes in good working condition because the usual case was such tubes were replaced as they burned out and were thrown away.&lt;/em&gt; One may keep a spare tube or two at hand to maintain a working radio. But then after the war began, there were virtually no tubes available at all except those already available in commercial stock.  Tubes were allocated for wartime uses with few available for domestic needs.  But the relays were good and in computation, using relays was a different story. But tubes, nobody thought much of using them in computing; hard to get, would burn out. Nevertheless, the country was making preparations for going to war.&lt;/p&gt;&#xA;&lt;p&gt;However one reads the question, given the current retrospective view, the premise to the question and its answer may be biased somewhat, or even considerably, by presently held impressions.   In fact, aspects regarding the early development of the computer seem to be clouded by interpolation, conjecture, and speculation, hagiography, and character assassination.  The interpersonal dynamics in development of the computer included end-running, ignoring valuable contributions while taking credit inappropriately, refusing to act on a reasonable request, back-biting, etc., etc., etc.  Even views of the much later patent case in Honeywell Inc vs Sperry Rand Corp., (i.e. asking too much for due royalties) and the decision itself, are filled with anger and controversy.  People of this early 1940s time showing an innocent vital interest in then-current thinking regarding computational technology find themselves in corporate life 30 years later portrayed in conflict with their own corporate interests and now-current entrepreneurial intentions. Royalties were a corporate survival cornerstone.  Looking at this question about relays from the viewpoint of the developments of the 1940s, and understanding the needs in extended computation necessary to solve certain war-time problems, a rather different perspective is seen.  Maybe the counterpoint of the question should have been asked, namely, &lt;em&gt;why weren't early 1940s computers predominantly made with tubes instead of relays.&lt;/em&gt;  In fact, development of the computer relied on a simple triode tube circuit that would be used as a relay in electronic computation.&lt;/p&gt;&#xA;&lt;p&gt;By the start of 1940, &lt;em&gt;the number of functioning, non-analogue, electromechanical relay computers could be counted on one finger.&lt;/em&gt;  Mechanical hand-assisted calculation with a Marchant or Monroe calculator was the name of the day.  Or one skillfully used a slide rule.  Prior to 1940, the country was within the grip of the Depression. There was no pressing need for extended computation. Before involvement of the US in the Second World War, the perfection of extended computation was in the development of efficient and innovative analogue devices such as the Bush differential analyzer.  Ideas and prototypes were just emerging in the use of electromechanical relays as counting and switching devices useful in rudimentary computation.  At least one analogue computational device, the M-9, would be perfected for antiaircraft ballistics use during the Second World War.  And successive developments in relay computation would also progress.&lt;/p&gt;&#xA;&lt;p&gt;Lets digress and examine that aspect.  In the United States, the situation in developing calculating machine automata begins in 1937 with George Stibitz building the first &lt;em&gt;prototype relay computation module&lt;/em&gt; on his home kitchen table.  He worked for Bell Laboratories, and had access to their surplus scrap and reclaimed material.  Consequently he was able to get access to reclaimed and salvaged relays that were perfectly functional.  Company executives, although unimpressed at first, realized the potential value in Stibitz' device and agreed to finance building a larger version.  Bell needed a way to solve their math problems that largely involved math with complex numbers. With the design Stibitz completed in 1938, work began on the requested machine in April 1939 and it was operable in January 1940.  Although Stibitz was given leave from Bell Labs and would work for the National Defense Research Committee for a while, and then Office of Scientific Research and Development,  he continued in design and development of relay computational equipment with the support of Bell Labs until well after the war ended. Several more advanced relay-based devices were designed and completed under his direction, the last of the most advanced series incorporated error checking, an assembly language, and floating point arithmetic.  His general purpose devices were used by the US Navy for ballistics calculations and gun control. And his most advanced systems, the last two constructed, were operable and productive until 1960. They were essentially in fully functional working condition when they were retired.&lt;/p&gt;&#xA;&lt;p&gt;Also in 1937, Howard Aiken, at Harvard, would propose construction of a large scientific calculator for the extended calculation of problems that were beyond the reach of hand computation.  Aiken was a seasoned engineer and was back at Harvard to pursue an advanced degree.  But Harvard astronomer Harlow Shapley sent Aiken to IBM, instead.  Astronomy requires some hard-to-do calculations.  The year was now 1938;  Thomas J. Watson, Jr., president of IBM, was sufficiently impressed with Aiken's ideas, that he assigned IBM engineer Clair D. Lake to supervise the design and construction of the Harvard machine.  Along with Aiken of Harvard, and Lake of IBM, Francis Hamilton and Benjamin Durfee, both of IBM, would lead in the development, construction, and eventual completion of the Harvard machine.  Commissioned by the Navy, the Harvard machine, when completed in 1944, was used in the calculation of ballistics problems.  Electromechanical relays comprised the computing engine of the Harvard machine, a massive device.  From concept to completion required seven years.  When completed, utility of the machine has been characterized as already obsolete. After the war IBM would build one more-advanced relay machine of this type that was programmable; both machines were potentially useful.&lt;/p&gt;&#xA;&lt;p&gt;So lets look again at the status of relay computation in the &lt;em&gt;early&lt;/em&gt; 1940s.  In the United States prior to January 1944, there were &lt;em&gt;two&lt;/em&gt; working relay computational devices, both built by George Stibitz at Bell Telephone Laboratories.  Zuse's work in Germany was not accessible for computation as he struggled to retain his foothold on constructing a working relay computer while trying stay ahead of the war.  His prototype relay systems were war casualties, but luckily he was not.  And as a citizen of an enemy country, his situation was quite tenuous.  He was not able to secure an advanced working prototype until after the war ended.&lt;/p&gt;&#xA;&lt;p&gt;However, in 1941 as the United States entered into war (ultimately in two world theaters), pressing needs in computation required faster and extended means of computation for ballistics calculations. The US Army Ballistics Research Laboratory required ballistics tables for various artillery applications being used during the war.  These needs also could not be fully met by differential analyzers.   Even though  relays, as such, were very effective, they were only marginally effective at meeting the computational needs of the time. There were no fully assembled relay computers for use in extended computation until just before the war ended.  The use of tubes as relay-switching devices really did not differ at all from using electromechanical relays. Using tubes as relays is more efficient because tubes are electronic, they have no mechanical parts, and they are incredibly fast.&lt;/p&gt;&#xA;&lt;p&gt;In 1941, the attention of industry was directed solely toward supporting the war effort and meeting pressing domestic needs.  Industry support for expanded commercial computation was not part of that picture.  IBM, nevertheless, did provide businesses with various equipment designed to facilitate tabulating needs.  By 1942, war restrictions and rationing were in place.  Nevertheless, expansions in computation were necessary to support the computation of ballistics tables needed by the Army and Navy, required a prodigious amount of work in the hand calculation of projectile trajectories.  If one knew math and how to efficiently use an electric calculator, one had a secure job.  Typically,  a skilled computer would require about 20 hours to hand-calculate a single, one-minute projectile flight trajectory for the ballistics table. But the problem was further complicated by factors such as air resistance, a variable number not easily specified or determined numerically.  When multiple trajectory calculations were completed for various conditions given a specific use, the end results were compiled into &lt;em&gt;firing tables&lt;/em&gt; comprised of hundreds of different trajectories. A computational team of 200 or more would require two to three months for the completion of such a compilation.  Whenever a new combination of shell, gun, or firing propellant was used, a new set of firing tables specific to these new uses was necessary. The Army attempted to improve the calculation process using state-of-art differential analyzers, but the limit of using this device was quickly reached - they had hit the wall.  Nevertheless, several significant events occurred that were all consequential to needing projectile trajectory determinations, thereby setting forth the future path of computation well into the second half of the 20th century.  Somewhat ironically, the machine specially constructed to do the ballistics calculations, was not initially used for that specific purpose.&lt;/p&gt;&#xA;&lt;p&gt;The US Army was already in a cooperative relationship with the University of Pennsylvania Moore School for Electrical Engineering for computational assistance regarding firing tables (Moore School had a differential analyzer and hired lots of skilled computers) when,  in 1942, Dr. John Mauchly, who had recently secured a teaching position at the Moore School, suggested to the School's Army liaison officer Lt. Herman Goldstine, also a Ph.D ballistics mathematician, that calculation of firing tables might be more easily accomplished with an electronic computer.  Dr. Goldstine was interested.  Mauchly had been working with triode flip-flop counters in aspects of meteorological research and realized their potential use as a module in application to computation. He had also been talking with others (such as Atanasoff and Stibitz) and seeing what they were doing in computation because he saw a pressing wartime need, as the US was preparing for war, and he was in an unique position to evaluate the problem.&lt;/p&gt;&#xA;&lt;p&gt;J. Presper Eckert, a graduate teaching fellow at the Moore School, had just recently met Mauchly at the School the previous year where Mauchly was taking a defense training course for electronics, and Eckert was helping instruct. Eckert was keenly interested in Mauchly's ideas, and the two became friends.  Eckert was in his early twenties yet nevertheless a superb electrical engineer.  He was very familiar with triode flip-flop circuits and how they could be used.  These circuits had been around for more than 20 years.  Eckert and Mauchly put their heads together and submitted their proposal to the Army in a memo dated April 2, 1943, for an electronic computer to produce ballistics calculation results like those &amp;quot;in the computation of a trajectory by hand.&amp;quot; Their estimated time required to compute the compilation of trajectory tables for any particular application would be about two days.  A contract with the Army was secured, assigning Goldstine as technical liaison, Mauchly in charge of project development, and Eckert in charge engineering design and construction. With Eckert in charge of engineering, a team of about 20 engineers would build this machine.&lt;/p&gt;&#xA;&lt;p&gt;Although everything to be used was then currently available, fundamental to operation was use of the flip-flop circuit.  The use of cross-connected triodes as counting devices had been known since about 1919, and their switching times are incredibly fast.  This rather elementary circuit would form the basis for large-scale calculation in support of the war effort.  The only problem encountered would be in building the machine.  Parts were, at times, unavailable for a while.  The design using triode tubes, nevertheless, was innovative, straightforward, essentially elementary, and required nothing that was new.&lt;/p&gt;&#xA;&lt;p&gt;What, exactly, is a flip-flop? Two triode tubes were cross connected so that when one of the tubes was energized, the other was inactive.  If the other tube was than energized, the first would become inactive. This flip-flop triggering scheme, in effect, makes the device an incredibly fast &lt;em&gt;electronic relay.&lt;/em&gt; Operation of this device as a counter would be typically at 100,000 counts per second.  By arranging these flip-flops into interconnected decade counters, an electronic adding machine is produced.  The machine Eckert would construct had 200 such decade units giving the machine a memory of twenty numbers of ten digits each.&lt;/p&gt;&#xA;&lt;p&gt;The project, classified as secret, took about a year to design and another year and a half to build in the basement of the Moore School.  Securing the necessary materials was sometimes not possible due to war-time shortages, and delays in completion of the project were incurred.  And the project was over budget, costing about $500,000.  When the project was completed in November 1945, preliminary tests were completed.  The machine dedication was February 1946.  But the first task at hand was not calculation of ballistics tables.  This machine, really a massive and fast electronic-relay calculator, was needed to do extended calculations for the Cold War effort in Los Alamos. The Los Alamos group (Teller) needed to know if certain design concepts would work in building an H-bomb.&lt;/p&gt;&#xA;&lt;p&gt;By 1950, Eckert and Mauchly had already realized they needed leave the Moore School and start their own company if they were going to continue productively in developing large-scale computing machines.  Their relationship with the Moore School had deteriorated as the School had pressed them, time and again after the war ended, to sign over their patent rights in the design of the ENIAC, which they steadfastly refused to assign to the University.  Mauchly, on assignment from the University's Moore School to the ENIAC project, resigned. Eckert, also an university employee, was fired but technically he had already submitted his resignation, as well.  Consequently, these two friends ultimately formed what would become the Eckert-Mauchly Computer Corporation to build and sell the first commercially available electronic computer.  The rest is Univac history.&lt;/p&gt;&#xA;&lt;p&gt;This was an excellent question.  The answer provided herein may not have been exactly as sought, but then again, maybe it was.  Discussion was limited to activities in the United States from just before 1940 to about 1950.  Of course, Zuse’s important work in Germany was also mentioned in context.  Information used in preparation of this answer came from personal recollections regarding Eckert speaking at Arizona State University in 1975.  He was not embittered but philosophical about the outcome of the Honeywell patent-infringement case.  Further information was derived from various sources in researching the answer to this question, including Charles and Ray Eames' book, A Computer Perspective, published by Harvard in 1973.  This book is no longer in its original press.  Additional information was derived from the reference cited in answering the ancillary question about relays and tubes asked by Dr Sheldon, linked with this question, above.&lt;/p&gt;&#xA;" OwnerUserId="21851" LastEditorUserId="-1" LastEditDate="2021-05-25T17:39:14.900" LastActivityDate="2021-05-25T17:39:14.900" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19938" PostTypeId="2" ParentId="19934" CreationDate="2021-05-24T19:14:57.853" Score="5" Body="&lt;p&gt;As far as I know, no &lt;code&gt;/INT&lt;/code&gt; is remembered as it is purely level-triggered, as @Raffzahn noted. So losing interrupts in your conditions is just expected.&lt;/p&gt;&#xA;&lt;p&gt;Same design is in ZX Spectrum, with probably a longer pulse. Some ZX clones are even capable of catching interrupt several times when the interrupt routine is as simple as &lt;code&gt;EI:RET&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;EI&lt;/code&gt; disables interrupt recognition in itself, so interrupt can't follow &lt;code&gt;EI&lt;/code&gt; execution. Prefixes are disabling interrupt recognition for themselves until valid non-prefixed opcode is executed, so that the full prefixed command, no matter how many prefixes it had, can execute interrupt after itself.&lt;/p&gt;&#xA;" OwnerUserId="4692" LastActivityDate="2021-05-24T19:14:57.853" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19939" PostTypeId="2" ParentId="19930" CreationDate="2021-05-24T19:21:00.380" Score="10" Body="&lt;p&gt;It was most likely a pirate cart. I don't know about Finland but here in Sweden they weren't uncommon, you could often find them at fairs and similar places where traveling salespeople put up shop. Most of them were the usual &amp;quot;10 000 in 1&amp;quot; type cartridges.&lt;/p&gt;&#xA;&lt;p&gt;I have a pirate NES console called &amp;quot;Good Boy&amp;quot; that I got for free from a friend when the NES was considered obsolete later in the nineties. It is a top loader that takes Famicom type cartridges by default, but came delivered with an adapter to play gray NES cartridges too (that you have to put in backwards, so it looks a bit funny).&lt;/p&gt;&#xA;&lt;p&gt;One of the cartridges I got with it is a 3 in 1 that contained one game I can't remember together with Super Mario Bros. and the Japanese SMB2. I'm not sure if the small amount of text is in Japanese or not, but years after I got it I realized that it must be NTSC versions because when I heard the SMB1 theme song I thought it played too fast (the pirate copy was made for 60 Hz but played in 50 Hz here in PAL territories).&lt;/p&gt;&#xA;&lt;p&gt;This copy of SMB2j definitively was imported to Sweden several years before All Stars was released, I know we played it a lot and found it a mystery because no one else had heard about it and no magazines covered it.&lt;/p&gt;&#xA;&lt;p&gt;From what I can remember, these pirate games weren’t really much cheaper than original carts so the salespeople always focused on something unique, that wasn’t available officially. SMB2j is a good example of that so it was probably common. The mentioned 1000 in 1 is another. I also remember being offered Mega Man 4 when the third game had just been released in Sweden and no magazine had even mentioned another sequel. Not surprising since it usually took at least a year or two from when a game was released in Japan until it came here.&lt;/p&gt;&#xA;" OwnerUserId="21136" LastEditorUserId="21136" LastEditDate="2021-05-25T08:28:00.347" LastActivityDate="2021-05-25T08:28:00.347" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19940" PostTypeId="2" ParentId="19934" CreationDate="2021-05-24T23:13:38.067" Score="7" Body="&lt;p&gt;According to &lt;a href=&quot;https://cpctech.cpc-live.com/docs/ints.html&quot; rel=&quot;noreferrer&quot;&gt;this CPCTech entry&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In the CPC the Gate Array generates maskable interrupts, to do this it uses the HSYNC and VSYNC signals from the CRTC, a 6-bit internal counter and monitors the interrupt acknowledge from the Z80.&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;p&gt;When [counter conditions are met] the Gate-Array will issue a interrupt request to the Z80, the interrupt request remains active until the Z80 acknowledges it.&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;p&gt;When the interrupt is acknowledged, this is sensed by the Gate-Array. The [counter is suitably manipulated] and the interrupt request is cleared.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, the process is:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the gate array starts signalling the interrupt;&lt;/li&gt;&#xA;&lt;li&gt;the Z80 does whatever it does (see Raffzahn's excellent-as-always answer for more on that);&lt;/li&gt;&#xA;&lt;li&gt;upon the Z80 acknowledging the interrupt — which it'll do only when it's actually acting upon it — the gate array will stop signalling the interrupt.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So to answer your question directly: the interrupt request may last indefinitely, continuing until the Z80 acknowledges an interrupt.&lt;/p&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2021-05-24T23:13:38.067" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19941" PostTypeId="2" ParentId="19929" CreationDate="2021-05-25T12:20:42.120" Score="5" Body="&lt;p&gt;I'm too young to remember &lt;em&gt;really old&lt;/em&gt; Fortran compilers, but the behaviour that you described occurs in &lt;strong&gt;all current Fortran compilers&lt;/strong&gt;. It's a core part of the language standard, so we can safely assume that any standard-conforming compilers in the past used to work this way as well.&lt;/p&gt;&#xA;&lt;p&gt;Check out this example at &lt;a href=&quot;https://godbolt.org/z/GKadP9rov&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://godbolt.org/z/GKadP9rov&lt;/a&gt; (feel free to switch to Intel Fortran if you aren't a fan of gfortran):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;subroutine foo(x)&#xA;    implicit none&#xA;    integer :: x&#xA;&#xA;    x = 5&#xA;end subroutine&#xA;&#xA;program test&#xA;    implicit none&#xA;&#xA;    call foo(1)&#xA;&#xA;    call bar(1)&#xA;end program&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Because all Fortran subroutines by default accept all arguments by reference, the main program does not have any other option than to pass the constant &lt;code&gt;1&lt;/code&gt; as a reference to a value in memory. The disassembly proves that the same location is used in both calls:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;foo_:&#xA;…&#xA;        mov     DWORD PTR [rax], 5&#xA;…&#xA;.LC0:&#xA;        .long   1&#xA;MAIN__:&#xA;…&#xA;        mov     edi, OFFSET FLAT:.LC0&#xA;        call    foo_&#xA;        mov     edi, OFFSET FLAT:.LC0&#xA;        call    bar_&#xA;…&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Of course, the constant will be placed into the read only data section on most modern platforms (except for those lacking an MMU). The write in &lt;code&gt;foo()&lt;/code&gt; is thus going to trigger a segmentation fault at runtime.&lt;/p&gt;&#xA;" OwnerUserId="19279" LastEditorUserId="19279" LastEditDate="2021-05-25T14:38:28.040" LastActivityDate="2021-05-25T14:38:28.040" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="19942" PostTypeId="2" ParentId="399" CreationDate="2021-05-25T12:43:38.973" Score="6" Body="&lt;p&gt;As an alternative to your project, you can use The &lt;a href=&quot;https://megarom.forler.ch/en/&quot; rel=&quot;noreferrer&quot;&gt;Mégarom T.2&lt;/a&gt;, it's a MEMO7 Cartridge for Thomson T9000, TO7, TO7/70, TO8, TO8D, TO9, TO9+.&#xA;It contains 70 softwares.&lt;/p&gt;&#xA;&lt;p&gt;Another way is to use the &lt;a href=&quot;http://dcmoto.free.fr/bricolage/sddrive/index.html&quot; rel=&quot;noreferrer&quot;&gt;SDDRIVE&lt;/a&gt; that is connected to the extension port of the TO7/70. It uses an SD card to emulate a floppy disk drive.&lt;/p&gt;&#xA;" OwnerUserId="21854" LastActivityDate="2021-05-25T12:43:38.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19943" PostTypeId="1" CreationDate="2021-05-25T13:09:13.433" Score="9" ViewCount="1228" Body="&lt;p&gt;I had occasion to touch a TI-99 only once, circa 1985. The machine in question was part of a lineup of 8-bit machines that also included a late-model Atari and another, perhaps a Coco but I can't recall.&lt;/p&gt;&#xA;&lt;p&gt;One thing I do recall from this experience is that the TI's display was literally filled with interference, swimming about in a fashion that forced me to turn it off to avoid barfing on the keyboard. This isn't entirely unexpected I suppose, there were several televisions right beside each other. But the Atari display was fine, as was the 3rd machine.&lt;/p&gt;&#xA;&lt;p&gt;I'm reading about the history of TI's battles with the FCC over interference and their eventual decision to ship a Zenith TV with their machines to avoid using an RF modulator. This decision was later rescinded in 1980.&lt;/p&gt;&#xA;&lt;p&gt;So... was the display on the TI machines always like this? If so, I can understand the FCC's concerns!&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2021-05-26T02:39:51.560" Title="TI-99 display interference" Tags="&lt;ti-99&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19944" PostTypeId="1" CreationDate="2021-05-25T15:49:39.167" Score="0" ViewCount="95" Body="&lt;p&gt;I need to create a USB BOOT KEY with only command prompt.&lt;/p&gt;&#xA;&lt;p&gt;In 90's in DOS I can format with this command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;format a:\s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;How I make this?&lt;/p&gt;&#xA;" OwnerDisplayName="CH06" LastActivityDate="2021-05-25T15:58:29.653" Title="USB boot to command prompt" Tags="&lt;windows&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2021-05-25T18:27:15.937" ContentLicense="CC BY-SA 4.0" />
  <row Id="19945" PostTypeId="2" ParentId="19943" CreationDate="2021-05-25T16:17:51.470" Score="6" Body="&lt;p&gt;Unless you had dozens of different types of TV's with a controlled test, it's hard to really quantify how good that RF modulator was (or how bad).  Also, you said you don't remember what the third computer was.  Are you sure you remember it having a better display?&lt;/p&gt;&#xA;&lt;p&gt;When I was a small child, I had a TI-99/4A and a Commodore 64C.  Both of them were RF only.  Maybe I was lucky enough to have a good CRT or maybe I didn't know what composite was to compare it to.  But I don't recall any one being better than the other.&lt;/p&gt;&#xA;&lt;p&gt;I now own many computers in my collection and I have a few RF modulators from TI.  On one of my CRT's (some generic no-name), even RF looks good.  In fact, my NES top-loader looks fantastic on that TV using RF.&lt;/p&gt;&#xA;&lt;p&gt;So it's quite possible that you just had a CRT that didn't play well with that RF modulator.&lt;/p&gt;&#xA;&lt;p&gt;Also, the Colecovision used the same VDP (TMS9918 in the US).  I had that as a child (with the cheap RF adapter it came with) and I still don't remember it being any better or worse than the TI or Commodore.&lt;/p&gt;&#xA;&lt;p&gt;Finally, I have an Atari 400/800/600XL/800XL/1200XL/65XE/130XE/XEGS in my collection.  Just about every 8-bit Atari there is.  And every one of them look like garbage on a DIFFERENT CRT I have.&lt;/p&gt;&#xA;&lt;p&gt;I put an S-Video mod on my 800XL (super easy) and my 800 already has S-Video (separate chroma/luma).  When I utilize the S-Video's on those (or even composite for that matter), it's night-and-day difference.  Even though I know the Atari has good video output, the RF for MY particular setup looks bad.&lt;/p&gt;&#xA;&lt;p&gt;So it really is several factors:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;What kind of local interference do you have?  You mentioned three TV's right next to each other.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What kind of cabling/shielding do you have?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What kind of CRT/RF modulator combo do you have?  Some play nicer than others.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There are SO many variables that to say all TI's had terrible RF output is simply not correct.  My experiences were much different than yours using the same computer.&lt;/p&gt;&#xA;&lt;p&gt;Keep in mind, too, that the &amp;quot;R&amp;quot; in RF is for Radio.  Literally any sort of radio interference around you can cause issues and noise.&lt;/p&gt;&#xA;" OwnerUserId="2081" LastActivityDate="2021-05-25T16:17:51.470" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19946" PostTypeId="2" ParentId="19943" CreationDate="2021-05-25T17:58:31.117" Score="8" Body="&lt;p&gt;CRT screens used varying magnetic fields (from wire coils carrying a sawtooth-wave electrical signal) to deflect an electron beam and scan it across the screen. These fields extended outside the TV to some extent.&lt;/p&gt;&#xA;&lt;p&gt;If you had two TVs next to each other, being driven by signals that were at &lt;em&gt;slightly different frequencies&lt;/em&gt;, the magnetic field from one TV might distort the picture on another.&lt;/p&gt;&#xA;&lt;p&gt;This wasn't ordinarily a problem for &lt;em&gt;broadcast&lt;/em&gt; signals, which had to meet rigorous timing standards. The signal from a PC wasn't so rigorously controlled. If (say) the program on one TV was refreshing at the 60Hz standard, but the signal from the TI-99 on the other TV was at 60.2Hz, you'd likely see the TV image &amp;quot;swimming&amp;quot; with a period of 5 seconds.&lt;/p&gt;&#xA;&lt;p&gt;Depending on the individual TVs involved, you might see this distortion on both, or only the one connected to the TI-99, or only the one &lt;em&gt;not&lt;/em&gt; connected to the TI-99, or neither. It would have changed if you changed the position or angle of either TV.&lt;/p&gt;&#xA;&lt;p&gt;I don't know if this is what you saw, but I've certainly seen it.&lt;/p&gt;&#xA;" OwnerUserId="495" LastEditorUserId="495" LastEditDate="2021-05-25T20:12:18.460" LastActivityDate="2021-05-25T20:12:18.460" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19947" PostTypeId="2" ParentId="19943" CreationDate="2021-05-26T02:39:51.560" Score="3" Body="&lt;p&gt;You seem to be describing a TV that wasn't fine-tuned to the Channel 3 or Channel 4 VHF signal coming from the TI-99/4A. Any computer or game using the RF modulator style of connection could suffer some kind of frequency drift. And cabling issues could often hamper reception due to impedance mismatching (visible as noise), standing waves (visible as multiple images), and cross-talk or interference (visible as moire, multiple signals, or snow).&lt;/p&gt;&#xA;&lt;p&gt;My (very late) diagnosis is to check the RF modulator, wiggle the wires, check connections, replace the wires, and move other cables away from the TI. Additionally, I would verify that the connectors to and on the TI are solid, with attention paid to the game card slot and any peripherals attached to the main system, all of which would suffer from misalignment and fatigue. Daisy chained peripherals (like TI permitted) is a disaster.&lt;/p&gt;&#xA;&lt;p&gt;And as others have noted, the TI had a sharp screen. My family always used an old TV rather than the &amp;quot;monitor&amp;quot; that they sold, which I do understand was generally better than most old (1970s vintage?) TVs. So our image wasn't phenomenal, but good for the time.&lt;/p&gt;&#xA;" OwnerUserId="11649" LastActivityDate="2021-05-26T02:39:51.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19948" PostTypeId="2" ParentId="19929" CreationDate="2021-05-26T04:01:03.060" Score="0" Body="&lt;p&gt;This discussion is in support of the previous answers.  Hopefully, this is not the answer to some other question that was not asked.  The question was in reference to passing values without restriction in &lt;em&gt;old&lt;/em&gt; compilers, but no reference was given to how old.  So lets start at the time of &lt;em&gt;really old.&lt;/em&gt; This appears to be a non-standard feature used in Univac Fortran V (ca. 1973), and and also in Univac ASCII Fortran (ca. 1982).  The implementation of Univac Fortran V on the 1100 mainframe system, is the predecessor of Univac ASCII Fortran, and predominantly set the standard for Fortran 77.  Univac ASCII Fortran was the full version of Fortran 77 implemented on Univac 1108 system.&lt;/p&gt;&#xA;&lt;p&gt;The feature mentioned in the question is very similar to the DEFINE statement in Univac Fortran V.  Lets think a minute... Here we are writing a main program and several subprograms called by the main program.  The nature of features like DEFINE was to allow control at the head of the main program, before stepping into execution, to set &lt;em&gt;the values&lt;/em&gt; or &lt;em&gt;name references&lt;/em&gt; of constants, variables and &lt;em&gt;functions&lt;/em&gt; that were seen by the executable area of the main program and its subprograms. There were conflict restrictions the programmer had to consider in selecting variable naming conventions for the main program and subprograms, but DEFINE voided that restriction, but only for those constants, variables, and functions set by DEFINE. This gave the ability of the programmer to have program global control of DEFINE features to all areas of the program without passing arguments. Constants, variables, and functions set by DEFINE had unrestricted naming conventions. This was, at times, indispensable. This meant the programmer could set the &lt;em&gt;value&lt;/em&gt; of a constant or variable without restriction, or DEFINE a function this way, and could access these defined features anywhere in the executable's environment.  These features were defined after setting the type but before the first executable in the main program. The highly proscriptive programming, compilation, and execution environment on the Univac system prevented the modification of memory areas outside of that allocated to the program by the compiler and executive operating system, a protective memory addressing issue. An attempted write-protection violation was a very serious issue.  DEFINE allowed a modification of this but only after the non-executable type-setting area of the program, &lt;em&gt;before the executable section of the program.&lt;/em&gt;  This is consistent with the stated address passing action mentioned in the question.&lt;/p&gt;&#xA;&lt;p&gt;Here is an example -&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       DEFINE F(X,Y) = X + Y        a type definition of a function&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;followed by&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       A = F(U*V,V)         results in A = U*V + V where A,U,V are *real*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or, for example&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       D = F(I*J,K*I)   I,J,K are double precision, D is double precision by propagation&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;resulting in&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       D = I*J + K*I     a double precision expression...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(Pretty cool! Especially if one does not have to mess with naming restrictions!!)&lt;/p&gt;&#xA;&lt;p&gt;Univac Fortran V documentation states the following...&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;4.2 DEFINE PROCEEDURES&lt;br /&gt;&#xA;A DEFINE generates inline code when it is referenced. Thus, it is analogous to an 1108 assembly procedure, rather than to an external or internal FUNCTION, which generates a closed subprogram.  The overhead of a subprogram is eliminated and the optimization capabilities of the compiler are allowed to operate.  The FORTRAN IV arithmetic statement functions are a subset of the DEFINE procedure.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Univac ASCII Fortran documentation shows the definition is little changed and gives the following characterization...&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The statement function generates inline code when it is referenced. This allows efficient references to the defining expression without referencing the expression each time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In other words, DEFINE(expression) is a statement function definition that is global (i.e. unrestricted) within the allocated program environment. This would be extremely useful.&lt;/p&gt;&#xA;&lt;p&gt;Examination of documentation for two other versions of Fortran 77 shows this feature is recognized as a Fortran 77 feature in Lahey Fortran, 1994, and also  recognized in Microsoft Fortran 5.0/5.1 1991, the predecessor of Compaq Fortran mentioned below.  The Lahey unavailability may likely be due to memory protection issues necessary for the operating-system environments of non-mainframe systems.&lt;/p&gt;&#xA;&lt;p&gt;Examination of documentation for &lt;strong&gt;Compaq Fortran version 6.6A&lt;/strong&gt; (May 2002), the industry standard pc-implementation of VAX Fortran 77 at the time, showed &lt;em&gt;&lt;strong&gt;the feature is recognized&lt;/strong&gt;&lt;/em&gt; as non-standard and operates in very much the same way mentioned in the question.&lt;/p&gt;&#xA;&lt;p&gt;The following  is noted -&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;15.1.5  DEFINE and UNDEFINE Directives -&lt;br /&gt;&#xA;The DEFINE directive creates a symbolic variable whose existence or value can be tested during conditional compilation.  The UNDEFINE directive removes a defined symbol.&lt;br /&gt;&#xA;...&lt;br /&gt;&#xA;Rules and Behavior -&lt;br /&gt;&#xA;DEFINE and UNDEFINE create and remove variables for use with the IF (or IF DEFINED) directive.  Symbols defined with the DEFINE directive are local to the directive.  They cannot be declared in the Fortran Program.&lt;br /&gt;&#xA;Because Fortran programs cannot access the named variables, the names can duplicate Fortran keywords, intrinsic functions, or user-defined names without conflict.&#xA;To test whether a symbol has been defined, use the IF DEFINED (name) directive.  You can assign an integer value to a defined symbol.  To test the assigned value of &lt;em&gt;name,&lt;/em&gt; use the IF directive.  IF test expressions can contain most logical and arithmetic operators.&lt;br /&gt;&#xA;Attempting to undefine a symbol that has not be defined produces a compiler warning.&lt;br /&gt;&#xA;The DEFINE and UNDEFINE directives can appear anywhere in a program enabling and disabling symbol definitions.&lt;br /&gt;&#xA;Examples  -   Consider the following&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;   |DEC$ DEFINE  testflag  &#xA;   |DEC$ IF DEFINED (testflag)  &#xA;       WRITE( * , * ) 'Compiling first line'&#xA;etc...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In the above example, IF DEFINED (testflag) is true, &lt;em&gt;Compiling first line&lt;/em&gt; will be written.&lt;/p&gt;&#xA;&lt;p&gt;The following documentation may be of interest...&lt;/p&gt;&#xA;&lt;p&gt;Univac 1100 Series Fortran V Programmer Reference, UP-4060 Rev. 2, 1973&lt;/p&gt;&#xA;&lt;p&gt;Sperry Univac Series 1100 Fortran (ASCII) Level 10-R1 Programmer Reference, UP-8244.2, 1982&lt;/p&gt;&#xA;&lt;p&gt;Compaq Fortran Language Reference Manual, Order Number: AA-Q66SD-TK, September 1999&lt;/p&gt;&#xA;&lt;p&gt;Compaq Fortran is now Intel Fortran.&lt;/p&gt;&#xA;&lt;p&gt;So we went from &lt;em&gt;really old,&lt;/em&gt; to maybe &lt;em&gt;not so old.&lt;/em&gt;  Hope this answer was of some help...&lt;/p&gt;&#xA;" OwnerUserId="21862" LastEditorUserId="-1" LastEditDate="2021-05-27T10:55:42.537" LastActivityDate="2021-05-27T10:55:42.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19949" PostTypeId="2" ParentId="19929" CreationDate="2021-05-26T04:32:51.147" Score="7" Body="&lt;p&gt;That fact is explicitly mentioned in the (Russian) book &lt;a href=&quot;https://1lib.us/book/552950/f083b5?id=552950&amp;amp;secret=f083b5&quot; rel=&quot;noreferrer&quot;&gt;Ошибки-ловушки при программировании на фортране, 1987&lt;/a&gt; (Errors and pitfalls in FORTRAN programming), page 88.&lt;/p&gt;&#xA;&lt;p&gt;One of the puzzles was to make the sequence of operators&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;      J=1&#xA;      PRINT 1,J&#xA;  1   FORMAT(' J = ',I1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;print 0.&lt;/p&gt;&#xA;&lt;p&gt;The provided solution was&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;      PROGRAM TASK&#xA;      CALL ZERO(1)&#xA;      J=1&#xA;      PRINT 1,J&#xA;  1   FORMAT(' J = ',I1)&#xA;      STOP&#xA;      END&#xA;      SUBROUTINE ZERO(K)&#xA;      K=0&#xA;      RETURN&#xA;      END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4025" LastActivityDate="2021-05-26T04:32:51.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19951" PostTypeId="1" CreationDate="2021-05-26T07:01:22.303" Score="13" ViewCount="352" Body="&lt;p&gt;The operating system variously known as ‘Multitasking MS-DOS 4.0’ or ‘European MS-DOS’, to avoid confusion with the better-known single-tasking MS-DOS 4.0, has the mildly irritating flaw that it doesn’t invoke the &lt;code&gt;HLT&lt;/code&gt; instruction that stops the CPU when the system is idle. This has the effect that whenever the OS is run in a virtual machine, CPU usage of the host spikes to 100%, whether the guest is actually doing anything or not, inevitably leading to my laptop CPU fan revving up with an all-too-familiar noise.&lt;/p&gt;&#xA;&lt;p&gt;There doesn’t seem to be a simple, obvious way to remedy this. Unlike the mainstream edition of the OS, there is not &lt;a href=&quot;https://fd.lod.bz/rbil/interrup/dos_kernel/28.html&quot; rel=&quot;noreferrer&quot;&gt;an idle interrupt&lt;/a&gt; to which one can hook a TSR which can invoke &lt;code&gt;HLT&lt;/code&gt; on its own. Having studied (what I assume to be) the kernel idle loop in a debugger, there doesn’t even seem to be any room to squeeze in a &lt;code&gt;HLT&lt;/code&gt; instruction by patching the kernel. Here it is disassembled:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0506:3DE0 0E                PUSH    CS&#xA;0506:3DE1 1F                POP     DS&#xA;0506:3DE2 FB                STI&#xA;0506:3DE3 F6066105FF        TEST    BYTE PTR [0561],FF&#xA;0506:3DE8 74F8              JZ      3DE2&#xA;0506:3DEA E832FD            CALL    3B1F&#xA;0506:3DED EBF1              JMP     3DE0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Is there a way to inject a halt instruction into the idle loop somewhere?&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-05-26T18:19:31.713" LastActivityDate="2021-05-27T20:27:43.747" Title="Is there a way to cut idle CPU usage under Multitasking MS-DOS 4.0?" Tags="&lt;ms-dos&gt;&lt;emulation&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19952" PostTypeId="1" CreationDate="2021-05-26T11:50:18.270" Score="6" ViewCount="568" Body="&lt;p&gt;I just did a stupid thing and connected a new cable without inspecting it first. It was from a reputable seller, but has shorted pins 2 and 4.&lt;/p&gt;&#xA;&lt;p&gt;What is the potential damage it could have caused and what to look for when I get to checking the system for any damages caused by this?&lt;/p&gt;&#xA;&lt;p&gt;The RF output still works, but waiting for RCA replacement to test composite&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Q2eUN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q2eUN.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13731" LastEditorUserId="13731" LastEditDate="2021-05-26T13:33:06.260" LastActivityDate="2021-05-27T06:22:46.937" Title="C128D shorted Composite and Ground" Tags="&lt;commodore-64&gt;&lt;repair&gt;&lt;commodore-128&gt;&lt;composite-video&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19953" PostTypeId="2" ParentId="19952" CreationDate="2021-05-26T12:47:26.733" Score="11" Body="&lt;p&gt;Whatever would have taken place occurred inside the RF modulator:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Rgaw3.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Rgaw3.png&quot; alt=&quot;RF modulator block&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I haven't been able to find a C128 schematic that includes the modulator, however if it's anything like the C64 modulator, there's a current limiting resistor in the path between +9V UNREG, a couple of transistors (only the last of which is shown here) and ground.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VOxSR.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VOxSR.png&quot; alt=&quot;Part of C64 RF modulator section&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For this particular C64 modulator, it seems to be dropping the 9V over a 150 ohms resistor (shorted state, worst case with saturated transistors) so about 60 mA which I'd say is unlikely to cause damage to either resistor or transistors.&lt;/p&gt;&#xA;&lt;p&gt;If the incident coincided with loosing the composite output, to troubleshoot further, I'd open the RF modulator and try to follow the path back from composite out to power source.&lt;/p&gt;&#xA;" OwnerUserId="6576" LastEditorUserId="6576" LastEditDate="2021-05-26T15:30:10.467" LastActivityDate="2021-05-26T15:30:10.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19954" PostTypeId="2" ParentId="19952" CreationDate="2021-05-26T13:57:14.297" Score="9" Body="&lt;p&gt;The C128D modulator uses 5V for power supply, and the composite output (pin 4) is driven with luma signal via an emitter follower and a 120 ohm resistor, and with chroma signal via an emitter follower and a 150pF capacitor.&lt;/p&gt;&#xA;&lt;p&gt;Normally the composite output is disconnected when using the RF modulator, but when using the composite output to a TV, it will be terminated to ground via 75 ohm resistor.&lt;/p&gt;&#xA;&lt;p&gt;In this case the faulty cable just directly connected it to ground.&lt;/p&gt;&#xA;&lt;p&gt;So calculating the rough worst case scenario is that there is 5V over the resistor only 42mA flows, dissipating 208mW.&lt;/p&gt;&#xA;&lt;p&gt;In practice, the highest voltage that an emitter follower can reach is about 4.3V due to about 0.7V Vbe drop, and luma output most likely cannot reach such high levels as it is unlikely that the white level is biased so high. The chroma capacitor would be shorted to ground, but it is charged quite quickly.&lt;/p&gt;&#xA;&lt;p&gt;Therefore the chance of damage is very small.&lt;/p&gt;&#xA;&lt;p&gt;After all, the making of the composite signal happens in the RF modulator before being RF modulated, so that is a sign of composite output being OK.&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="11656" LastEditDate="2021-05-26T17:58:44.967" LastActivityDate="2021-05-26T17:58:44.967" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19955" PostTypeId="2" ParentId="16916" CreationDate="2021-05-26T15:19:26.800" Score="2" Body="&lt;p&gt;I think it is done purely geometrically(the polygon representation is only used for the filling, not for other parts of the game and will be constructed in the delay before the fill starts):&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When player closes a path the old playfield is split into 2 Polygons consisting of horizontal and vertical lines&lt;/li&gt;&#xA;&lt;li&gt;With a very easy point-in-polygon check you are able to see in what polygon the qix resides&lt;/li&gt;&#xA;&lt;li&gt;you fill the other polygon&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;A small python snippet to illustrate:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# 1st: split playfield&#xA;poly1, poly2 = split_polygon(playfield, players_path)&#xA;# 2nd: check which poly is new playfield(the one with the qix inside)&#xA;if is_inside(poly1, qix_coords):&#xA;    playfield = poly1&#xA;    split_poly = poly2&#xA;else:&#xA;    playfield = poly2&#xA;    split_poly = poly1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;The easy point-in-polygon check:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;cast a vertical line from a point outside of the polygon to the position of the qix (for example line from &lt;code&gt;(qx,0)&lt;/code&gt; to &lt;code&gt;(qx,qy)&lt;/code&gt; with qx/qy coordinate of the qix)&lt;/li&gt;&#xA;&lt;li&gt;count the intersections with the horizontal lines. This is a simple smaller/greater comparison for each horizontal line segment.&lt;/li&gt;&#xA;&lt;li&gt;If the number of intersections is even, the qix is outside the polygon, if it is odd, the qix is inside (you could even use a single bit which you toggle on each intersection)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="8195" LastEditorUserId="8195" LastEditDate="2021-05-26T21:44:06.600" LastActivityDate="2021-05-26T21:44:06.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19956" PostTypeId="2" ParentId="19952" CreationDate="2021-05-26T15:41:33.933" Score="-4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What is the potential damage it could have caused and what to look for when I get to checking the system for any damages caused by this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'm not sure what this question is about. Is it asking for speculations what could go bad without any indication that there is an issue?&lt;/p&gt;&#xA;&lt;p&gt;If yes, then closing it would be a must, as it simply asks for opinions.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The RF output still works, but waiting for RCA replacement to test composite&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In that case simple logic says there is no damage and composite works as well.&lt;/p&gt;&#xA;&lt;p&gt;After all, RF isn't a separate interface channel. The composite signal is created before transposed it onto a carrier. If RF gives picture and sound as intended, then this is poof that composite is fine, isn't it?&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-05-26T23:06:26.970" LastActivityDate="2021-05-26T23:06:26.970" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19957" PostTypeId="1" CreationDate="2021-05-26T15:44:52.013" Score="14" ViewCount="1423" Body="&lt;p&gt;Reading over the design of the TMS9900 it is often claimed that the R0 - R15 registers are in RAM because semiconductor RAM ran at the same speed as the CPU and therefore there was no penalty to doing so - as well as obvious advantages in context switching and so forth.&lt;/p&gt;&#xA;&lt;p&gt;But unless I'm missing something, this statement seems wrong. I do not see any specialized access lines to memory for the registers, so I assume a normal memory read is required. That would normally be &amp;gt;0 cycles and have to be latched internally, no?&lt;/p&gt;&#xA;&lt;p&gt;Is there something I'm missing here? Cycle stealing perhaps?&lt;/p&gt;&#xA;" OwnerUserId="4196" LastActivityDate="2021-05-27T07:44:25.263" Title="TMS9900 registers in RAM performance" Tags="&lt;tms9918&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19958" PostTypeId="2" ParentId="19957" CreationDate="2021-05-26T16:58:10.327" Score="19" Body="&lt;p&gt;The TMS9900 only has 3 real registers (in the sense of being on the CPU) - PC, ST, and WP.  (It didn't even have a stack pointer, the branching works a lot like MIPS with the &amp;quot;Branch and Link&amp;quot; and you have to implement a stack yourself if you want it).&lt;/p&gt;&#xA;&lt;p&gt;WP points to a memory location in RAM.&lt;/p&gt;&#xA;&lt;p&gt;The 16 &amp;quot;general purpose user registers&amp;quot; are in reality 32 bytes of RAM (2 8-bit bytes per register) starting at WP and in the same RAM that everything else uses.  Loads and stores at these locations will modify the general purpose &amp;quot;registers&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;TMS9900 is from the age where CPU and RAM were the same MHz and there were no wait states, or cache.  So this was OK at the time.&lt;/p&gt;&#xA;&lt;p&gt;The 6502 had register-minimalism as well (1 accumulator, 2 index registrers, and the concept of &amp;quot;zero-page&amp;quot; addressing modes that allowed the first 256 bytes of RAM to be used as pointers).&lt;/p&gt;&#xA;" OwnerUserId="746" LastActivityDate="2021-05-26T16:58:10.327" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19959" PostTypeId="2" ParentId="19951" CreationDate="2021-05-26T19:13:01.623" Score="7" Body="&lt;p&gt;In place and without changing other code: &lt;strong&gt;No&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Simply because there is no shorter encoding of that sequence - that is unless we rely on&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;additional information how (and when) the tested byte changes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;and/or&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;how and when values set here gets reused or not&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;and/or&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;certain register setup prior to this routine.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The basic issue here is that a HLT instruction will end/continue operation after &lt;em&gt;any&lt;/em&gt; arbitrary interrupt was handled, but it's not said that every interrupt will as well set the flag byte at CS:0561h. All that do not set that byte should of loop back and halt again.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;There is always the usual method of jumping out by replacing the test instruction by a call to some new routine, intended to whatever is necessary - like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    HLT&#xA;    TEST xxxx&#xA;    RET  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The 5 bytes of the TEST instruction is long enough to even hold a far call, so it can be located anywhere. This method has the advantage that all other code is untouched.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Possible Other Ways&lt;/strong&gt; depending on code/workings outside the core loop:&lt;/p&gt;&#xA;&lt;p&gt;Of course if it can be guaranteed that certain data is present, some instructions can be used for patching like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if DS is already equalling CS when entered, then the PUSH/POP pair can be dropped and their space repurposed to add a HLT instruction&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre&gt;&lt;code&gt;0506:3DE0 90                NOP&#xA;0506:3DE1 FB                STI&#xA;0506:3DE2 F4                HLT&#xA;0506:3DE2 F6066105FF        TEST    BYTE PTR [0561],FF&#xA;0506:3DE8 74F7              JZ      3DE1&#xA;0506:3DEA E832FD            CALL    3B1F&#xA;0506:3DED EBF1              JMP     3DE0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Likewise if it's guaranteed that DS is not used later on with the assumption of still having the same value as CS, they can be replaced by a segment override prefix freeing up a much needed byte for the HLT instruction.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if DS gets reloaded afterwards (like in the function starting at CS:3B1Fh) without being uses first, the following patch might work:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre&gt;&lt;code&gt;0506:3DE0 FB                STI&#xA;0506:3DE1 F4                HLT&#xA;0506:3DE2 2EF6066105FF      TEST    CS:BYTE PTR [0561],FF&#xA;0506:3DE8 74F6              JZ      3DE0&#xA;0506:3DEA E832FD            CALL    3B1F&#xA;0506:3DED EBF1              JMP     3DE0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-05-27T20:27:43.747" LastActivityDate="2021-05-27T20:27:43.747" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19960" PostTypeId="2" ParentId="19957" CreationDate="2021-05-26T20:55:53.770" Score="17" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Reading over the design of the TMS9900 it is often claimed that the R0 - R15 registers are in RAM because semiconductor RAM ran at the same speed as the CPU and therefore there was no penalty to doing so&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But unless I'm missing something, this statement seems wrong.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Why?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I do not see any specialized access lines to memory for the registers, so I assume a normal memory read is required.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Jup, so it is, (usually) every other cycle is a memory cycle.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;That would normally be &amp;gt;0 cycles and have to be latched internally, no?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Jup, and?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there something I'm missing here? Cycle stealing perhaps?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No, except that cycle and speed is kind of an arbitrary concept, used different in each designer/team. This starts by what one does call a cycle, and how internal cycles are seen from the outside. Just take the 8080 and its concept of machine and clock cycles.&lt;/p&gt;&#xA;&lt;p&gt;Or our beloved 6502. A 1 MHz 6502 runs at 1 MHz, right? No, it runs at 2 MHz! It does two internal cycles per external clock. It's always an internal cycle (ALU cycle) followed by a memory cycle (*1)&lt;/p&gt;&#xA;&lt;p&gt;The 9900 works quite similar, here as well each other &lt;em&gt;machine&lt;/em&gt; cycle is a memory cycle. Except that each of these machine cycles last two clock cycles. Let's look at a typical instruction, adding two register:&lt;/p&gt;&#xA;&lt;p&gt;(this will be rather simplified for in detail description you may want to consult the manual)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;A R1,R2&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;em&gt;Memory:&lt;/em&gt; Read instruction&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;em&gt;Internal:&lt;/em&gt; Decode Instruction&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;&lt;em&gt;Memory:&lt;/em&gt; Read R1&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;&lt;em&gt;Internal:&lt;/em&gt; Setup addition&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ol start=&quot;5&quot;&gt;&#xA;&lt;li&gt;&lt;em&gt;Memory:&lt;/em&gt; Read R2&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ol start=&quot;6&quot;&gt;&#xA;&lt;li&gt;&lt;em&gt;Internal:&lt;/em&gt; Add&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ol start=&quot;7&quot;&gt;&#xA;&lt;li&gt;&lt;em&gt;Memory:&lt;/em&gt; Write R1&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So this addition takes 7 machine or 14 clock cycles. It does sound like an awful wast of cycles, right?&lt;/p&gt;&#xA;&lt;p&gt;So, how does a 6502 do it?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For a fair comparison we look at each half clock cycle separate.&lt;/li&gt;&#xA;&lt;li&gt;In addition we use a ZP instruction to make it a fair one.&lt;/li&gt;&#xA;&lt;li&gt;We ignore as well istruction differences and simply assume a 6502 ADC is the same as a 9900  A. But most of all&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;We ignore the 16 bit nature of the 9900&lt;/strong&gt;, after all, there could have been a 6516 with 16 bit data bus as well (*2)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;ADC zploc&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1.1 &lt;em&gt;Internal:&lt;/em&gt; Housekeeping for the last instruction&lt;/li&gt;&#xA;&lt;li&gt;1.2 &lt;em&gt;Memory:&lt;/em&gt; Fetch OP&lt;/li&gt;&#xA;&lt;li&gt;2.1 &lt;em&gt;Internal:&lt;/em&gt; Increment PC, Decode OP&lt;/li&gt;&#xA;&lt;li&gt;2.2 &lt;em&gt;Memory:&lt;/em&gt; Fetch ZP-address&lt;/li&gt;&#xA;&lt;li&gt;3.1 &lt;em&gt;Internal:&lt;/em&gt; Increment PC&lt;/li&gt;&#xA;&lt;li&gt;3.2 &lt;em&gt;Memory:&lt;/em&gt; Fetch data from ZP&lt;/li&gt;&#xA;&lt;li&gt;4.1 &lt;em&gt;Internal:&lt;/em&gt; Add and settle result in A&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Since the first half cycle belongs to the previous instruction, we come down to 6 steps taken (albeit not having written back to memory at all) and only 3 'real' cycles, isn't that great? And quite fast?&lt;/p&gt;&#xA;&lt;p&gt;Now, serious, cycles are Hokus Pokus, terms design magicians pull out of their hats to impress the audience. When looking behind that facade, all that really exists are are memory cycles - which as well is the start of the argument: memory speed&lt;/p&gt;&#xA;&lt;p&gt;So let's assume we use 500 ns RAM (*3) with the above CPUs_&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Doing the 6 machine cycles of a 6502 will take 3 µs, while only half the bandwidth of the memory is used.&lt;/li&gt;&#xA;&lt;li&gt;Doing the 7 machine cycles of a 9900 will take 3.5 µs, using a bit less than half of that for memory access.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It's exactly the pipelining half cycle the 6502 is faster &lt;em&gt;for such simple cases&lt;/em&gt;. Except, the 9900 has already used that time to write back the data to memory as well (*4)&lt;/p&gt;&#xA;&lt;p&gt;It will get better with more complex instructions, as the 9900 can have several internal cycles in sequence, whereas the 6502 always has to do a memory cycle as well (*4) - nicely shown with page crossing indexing.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Long story short:&#xA;Never look at fancy clock rates, but focus on memory timing when comparing CPUs&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;But, but ...&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;... couldn't the CPU have been much faster with registers on chip?&lt;/p&gt;&#xA;&lt;p&gt;Yes, it could, but what for? It would have cost a lot of real estate - 16 registers with 16 bits are 256 bits. With addressing logic this cones down anywhere between 1000 and 2000 transistors - quite some dough back then. Why invest that? Sure, taking above scheme, it may have speed up the execution from 14 to maybe 8 clocks, while doubling the price? (*5)&lt;/p&gt;&#xA;&lt;p&gt;Not to mention that putting them on chi will introduce all the overhead of register saving - something eating up many instructions and memory cycles with other machines.&lt;/p&gt;&#xA;&lt;p&gt;And finally there is the historic part - the 9900 is the single chip implementation of the way older 990, designed at at time when memory was not only expensive, but transistors even more rare.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;*1 - And when looking really close we even see 4 cycles, as each edge of each phase is used to trigger certain workings.&lt;/p&gt;&#xA;&lt;p&gt;*2 - No I will not go down that hole of describing all the pitfalls of such a CPU.&lt;/p&gt;&#xA;&lt;p&gt;*3 - For this we ignore all the fine print about memory selection and simply say we have a memory that delivers a word within 500 ns.&lt;/p&gt;&#xA;&lt;p&gt;*4 - The burden the simplified memory interface brings.&lt;/p&gt;&#xA;&lt;p&gt;*5 - Price increase isn't linear. It's safe to assume that a 9900 was already close to what could be made economic in 1976. Increasing that by 15-25% would have for sure resulted in a way higher cost than those percentage.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastActivityDate="2021-05-26T20:55:53.770" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19961" PostTypeId="2" ParentId="19929" CreationDate="2021-05-26T21:58:52.943" Score="4" Body="&lt;p&gt;Using an emulated &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_1130&quot; rel=&quot;nofollow noreferrer&quot;&gt;IBM 1130&lt;/a&gt; running DM2, I can confirm &lt;a href=&quot;https://retrocomputing.stackexchange.com/questions/19929/are-there-any-primary-sources-for-the-passing-constant-by-reference-behavior-i/19949#19949&quot;&gt;Leo B.&lt;/a&gt;'s example. It took a little modification to run on the 1130:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;// JOB&#xA;// FOR&#xA;*LIST SOURCE PROGRAM&#xA;*ONE WORD INTEGERS&#xA;      SUBROUTINE ZERO(K)&#xA;      K = 0&#xA;      RETURN&#xA;      END&#xA;// DUP&#xA;*DELETE             ZERO&#xA;*STORE      WS  UA  ZERO&#xA;// FOR&#xA;*LIST ALL&#xA;*IOCS(1132 PRINTER)&#xA;*ONE WORD INTEGERS&#xA;      J = 1&#xA;      WRITE(3, 2)&#xA;      WRITE(3, 1) J&#xA;      CALL ZERO(1)&#xA;      J = 1&#xA;      WRITE(3, 3)&#xA;      WRITE(3, 1) J&#xA;    1 FORMAT(' J = ', I1)&#xA;    2 FORMAT(' BEFORE -')&#xA;    3 FORMAT(' AFTER -')&#xA;      CALL EXIT&#xA;      END&#xA;// XEQ&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The output of the program is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;BEFORE -&#xA;J = 1&#xA;AFTER -&#xA;J = 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Since the value of &lt;code&gt;J&lt;/code&gt; is only ever set to &lt;code&gt;1&lt;/code&gt;, it's clear that the program has set the value of &lt;code&gt;1&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt; … &lt;/p&gt;&#xA;" OwnerUserId="439" LastEditorUserId="439" LastEditDate="2021-05-26T23:18:08.350" LastActivityDate="2021-05-26T23:18:08.350" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19962" PostTypeId="1" AcceptedAnswerId="19963" CreationDate="2021-05-26T23:16:22.430" Score="12" ViewCount="1399" Body="&lt;p&gt;I have an original PAL NES console. To the best of my knowledge, it is entirely unmodified.&lt;/p&gt;&#xA;&lt;p&gt;I have an EverDrive N8 Pro inside on which I've put a bunch of European/PAL ROMs, but also a few NTSC/American ones. For example, &lt;code&gt;Bugs Bunny Crazy Castle, The (USA).nes&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The NTSC/American ones surprisingly run perfectly, and I don't even notice anything weird with the speed/sound.&lt;/p&gt;&#xA;&lt;p&gt;But the NES was region-locked, and a vanilla PAL NES should not be able to run NTSC/American cartridges. So how come mine does?&lt;/p&gt;&#xA;&lt;p&gt;Is this only due to it being run on the EverDrive? Is the EverDrive doing some sort of automatic region unlocking as a feature which I was unaware of? If I had an actual NTSC/American NES game and put it inside my PAL NES, would it just &amp;quot;blink&amp;quot; and show nothing, or would it say something on the screen such as this?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sorry, but this game cartridge is not designed to run in your region.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&amp;quot;Region unlocking&amp;quot; is not listed as a feature of the EverDrive N8 Pro.&lt;/p&gt;&#xA;" OwnerUserId="21880" LastEditorUserId="15334" LastEditDate="2021-05-27T07:03:32.843" LastActivityDate="2021-05-28T07:08:38.987" Title="Is the only reason that my PAL NES is able to run NTSC/American games that it's doing it on an EverDrive?" Tags="&lt;nes&gt;&lt;ntsc&gt;&lt;pal&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19963" PostTypeId="2" ParentId="19962" CreationDate="2021-05-27T00:03:40.113" Score="26" Body="&lt;p&gt;The NES's region lock is implemented in  hardware, not software, with the &lt;a href=&quot;https://en.wikipedia.org/wiki/CIC_(Nintendo)&quot; rel=&quot;nofollow noreferrer&quot;&gt;CIC chip&lt;/a&gt;. The NES contains a CIC, and each authentic cartridge contains an identical CIC. When the console is powered on, the two chips communicate via a challenge-response handshake protocol, and if the cartridge fails to provide the correct responses, the CIC on the NES resets the system every second (hence the red blinking light). CICs manufactured for different regions use different keys, so that you can't play an American game on a European console (for example).&lt;/p&gt;&#xA;&lt;p&gt;This means that if you tried to put an American game in your European console, the CIC check would fail and you'd get the blinking light. But because region-locking is a part of the cartridge hardware and not the game's software, you can swap out the ROM chip in an authentic European cartridge in order to play whatever game you want (whether European, American, Japanese, or unlicensed) since the cartridge still has a European CIC.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;So how does your Everdrive defeat the CIC protection? Well, under the hood, the CIC is really just a simple four-bit microcontroller manufactured by Sharp, and the firmware has been dumped and reverse-engineered. I haven't found any detailed documentation of the protocol, but I have found that krikzz, the creator of the Everdrive, has also published &lt;a href=&quot;https://github.com/krikzz/avrciczz&quot; rel=&quot;nofollow noreferrer&quot;&gt;an open-source AVR-based CIC clone&lt;/a&gt;. I don't have time right now to read through the source code and figure out how it works, but this line in the README stuck out to me:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Push the reset 4-8 times after than system region was changed, or if cic used at first time&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://krikzz.com/pub/support/everdrive-n8/pro-series/n8-pro-manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual for your Everdrive&lt;/a&gt; mentions a similar procedure in the &amp;quot;Initial setup&amp;quot; section:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Configure CIC chip. Hit reset 7 times if red indicator is blinking on your system (NES only).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This strongly indicates that the Everdrive includes keys for all CIC regions, and during this initial setup process it simply tries each key until your NES accepts one of them. Once it has learned to spoof your console's CIC, your Everdrive is able to load and run ROMs from any region.&lt;/p&gt;&#xA;" OwnerUserId="409" LastEditorUserId="409" LastEditDate="2021-05-28T07:08:38.987" LastActivityDate="2021-05-28T07:08:38.987" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19964" PostTypeId="2" ParentId="19957" CreationDate="2021-05-27T01:32:49.243" Score="10" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I do not see any specialized access lines to memory for the registers,&#xA;so I assume a normal memory read is required. That would normally be &amp;gt;0 cycles and have to be latched internally, no?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The TMS9900 effectively extends its internal bus out to external memory, so no extra latching or cycling is required. Theoretically if it internalized the 'registers' they could be accessed faster because the CPU wouldn't have to cycle the external memory bus, but it still has to cycle its &lt;em&gt;internal&lt;/em&gt; 'register' bus. If the internal bus is no faster than the external bus and they can't operate in parallel then there is little advantage to having internal registers.&lt;/p&gt;&#xA;&lt;p&gt;The TMS9900 used an early NMOS process that is not capable of very high speed internal operation, and low transistor density so to squeeze in a large array of internal registers on a separate internal bus it would have to compromise in other areas. It could have had fewer internal registers but they would need more external bus cycles to keep them fed, so overall throughput could actually be slower. Having a 'workspace' with direct 'register-like' access makes the instruction set more orthogonal and perhaps more efficient. The TMS9900 can place its workspace anywhere in memory via its  'WP' pointer register. This can be used for efficient context switching or just to eliminate the limitations of a fixed 'zero page' memory space as used in the 6800 and 6502.&lt;/p&gt;&#xA;&lt;p&gt;The TMS9900 is a bit odd compared to most contemporary CPUs, but once you get over peculiarities such as the reversed address bus labeling etc. it's not that bad. However its implementation in the Ti99/4A was atrocious. Texas Instruments apparently didn't grasp the implications of Moore's Law because they only gave it 256 bytes of 16 bit RAM and a slow 8 bit memory expansion bus. This was doubly bad because the CPU always accesses the RAM in 16 bit words, which means it has to do 2 read cycles and 2 write cycles for every 8 bit write.&lt;/p&gt;&#xA;&lt;p&gt;Even worse, the 'RAM' in a stock Ti99/4A is actually video memory which is on the other side of the TMS9918 display controller, and can only be accessed sequentially one byte at a time through its (slow) I/O port. They used a similar system for their 'GROM' (Graphic Read Only Memory) cartridges, which are fine for storing Byte code or BASIC programs that are interpreted, but useless for machine code.&lt;/p&gt;&#xA;&lt;p&gt;The TMS9900 is essentially nobbled in the Ti99/4A, and doesn't reach its full potential unless true 16 bit RAM is installed - which is &lt;a href=&quot;http://www.mainbyte.com/ti99/32K16/32k16.html&quot; rel=&quot;noreferrer&quot;&gt;possible&lt;/a&gt; but requires a lot of hardware hacking on the motherboard. Once this is done it can run code from main memory at least twice as fast, with an average 50-60% faster operation for programs that use the system.&lt;/p&gt;&#xA;" OwnerUserId="4663" LastEditorUserId="4663" LastEditDate="2021-05-27T01:47:30.553" LastActivityDate="2021-05-27T01:47:30.553" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19965" PostTypeId="2" ParentId="19929" CreationDate="2021-05-27T04:12:06.790" Score="-4" Body="&lt;p&gt;Here is an explicit example of the behavior mentioned by texdr.aft in their posted question...&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       Program testzog&#xA;       !DEC$ DEFINE flag=3&#xA;  c ...... executable statements and some overly technical mumbo-jumbo&#xA;       call zog&#xA;       end&#xA;       subroutine zog&#xA;       !DEC$ IF (flag .eq. 3)&#xA;          WRITE (*,*) &amp;quot;This is compiled if flag equals 3.&amp;quot;&#xA;       !DEC$ ELSEIF (flag .ge. 4)&#xA;          WRITE (*,*) &amp;quot;Or this compiled if flag greater than or equal to 4.&amp;quot;&#xA;       !DEC$ ELSE&#xA;          WRITE (*,*) &amp;quot;Or this compiled if all preceding &amp;amp; conditions .FALSE.&amp;quot;&#xA;       !DEC$ ENDIF&#xA;       END  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Please note, DEFINE is a directive setting the value of flag equal to 3.  Poorly written compilers, or lack of familiarity with the Fortran language constructs, can produce results that are not expected.  In this case, however, results are as expected and consistent with the behavior mentioned by the OP in their question. The compiler used was Compaq Fortran version 6.6A.&lt;/p&gt;&#xA;&lt;p&gt;For &lt;em&gt;testzog,&lt;/em&gt;  DEFINE &lt;em&gt;flag=3&lt;/em&gt; is a pre-executable directive setting the value of &lt;em&gt;flag&lt;/em&gt; equal to 3.  As mentioned previously, a DEFINE directive, if used, must occur after setting the type for variables in the main program.  Note that the call to &lt;em&gt;subroutine zog&lt;/em&gt; includes no reference to &lt;em&gt;flag&lt;/em&gt; as a calling argument passed to &lt;em&gt;zog.&lt;/em&gt;  Compilation and execution of &lt;em&gt;testzog&lt;/em&gt; will result in &amp;quot;This is compiled if flag equals 3&amp;quot; for &lt;em&gt;flag=3&lt;/em&gt; and &amp;quot;Or this compiled if flag greater than or equal to 4&amp;quot; for &lt;em&gt;flag=4.&lt;/em&gt;  The value of &lt;em&gt;flag&lt;/em&gt; determines executable actions in &lt;em&gt;subroutine zog&lt;/em&gt; and indicates the value of &lt;em&gt;flag&lt;/em&gt; is passed by reference, a compiler optimizing procedure invoked when program &lt;em&gt;testzog&lt;/em&gt; and companion subroutine &lt;em&gt;zog&lt;/em&gt; were compiled.&lt;/p&gt;&#xA;" OwnerUserId="21882" LastActivityDate="2021-05-27T04:12:06.790" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19966" PostTypeId="2" ParentId="19952" CreationDate="2021-05-27T06:22:46.937" Score="2" Body="&lt;p&gt;&lt;strong&gt;Retrograde&lt;/strong&gt; has done a good analysis of the available schematics. However, there is a more general analysis that should apply to nearly any retro computer.&lt;/p&gt;&#xA;&lt;p&gt;Composite video outputs are designed to have 75 ohm output impedance for proper match to the coaxial cables used. You can think of this as a 75 ohm series resistor, even though it can be composed of multiple resistors (like two 150 ohm resistors in parallel in the C64 schematic). There will be another 75 ohms termination resistor to ground in the television set.&lt;/p&gt;&#xA;&lt;p&gt;Shorting the two pins replaces the termination resistor with 0 ohms. This will exactly double the current flowing through the output resistors and transistors, but not more than that. &lt;strong&gt;Most components can handle a short-term 2x overload, so shorting composite output for a few minutes is unlikely to do damage.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="8014" LastActivityDate="2021-05-27T06:22:46.937" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19967" PostTypeId="2" ParentId="19957" CreationDate="2021-05-27T07:44:25.263" Score="6" Body="&lt;p&gt;TMS-9900 was the on one chip implementation of the TMS-990 mini-computer architecture. The TMS-990 mini-computer were built from discrete TTL chips before the advent of big solid state single dynamic RAM chips. In that context, memory access and register access were strictly speaking exactly the same thing. It is only later with higher integration that the speed discrepancy between on-chip and off-chip access time started to grow, making the TMS-990 approach not viable (only some embedded Harvard micro-controller architecture continued with addressable memory/register system for their internal memory like microchip, AVR or more esoteric Z8 and Sharp SH-61860).&lt;/p&gt;&#xA;" OwnerUserId="7095" LastActivityDate="2021-05-27T07:44:25.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19968" PostTypeId="1" AcceptedAnswerId="19969" CreationDate="2021-05-27T10:57:30.890" Score="17" ViewCount="1491" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n8H6t.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n8H6t.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I fail to grasp what can be screwed on them, can you explain what are these for?&lt;/p&gt;&#xA;" OwnerUserId="3282" LastEditorUserId="3282" LastEditDate="2021-05-28T12:56:58.070" LastActivityDate="2021-05-28T12:56:58.070" Title="What are the screws for on the UltraSPARC?" Tags="&lt;cpu&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19969" PostTypeId="2" ParentId="19968" CreationDate="2021-05-27T11:13:49.740" Score="26" Body="&lt;p&gt;They are used for attaching a heat sink.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mnxe6.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mnxe6.png&quot; alt=&quot;Sun UltraSPARC with heatsink &quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11656" LastEditorUserId="3394" LastEditDate="2021-05-27T21:19:32.297" LastActivityDate="2021-05-27T21:19:32.297" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19971" PostTypeId="1" CreationDate="2021-05-27T21:34:38.093" Score="16" ViewCount="1576" Body="&lt;p&gt;Most early microcomputers provided either a dedicated key (e.g. Apple ][), keyboard combination (e.g. PC clones), or dedicated hardware button (countless examples) to &amp;quot;Reset&amp;quot; the computer. This was the preferred way to perform a warm restart, which was needed often on early computers, since cycling the power creates unnecessary wear-and-tear.&lt;/p&gt;&#xA;&lt;p&gt;However, on early Commodore computers (e.g. PET, VIC-20, C-64), there is no similar reset function. Instead, most machines had a weird key called RESTORE that is wired up to, of all things, the CPU's non-maskable interrupt line. This resulted in many Commodore users either routinely power-cycling their machines to reset them, or hacking a hardware reset switch to make up for this shortcoming. Notably, Commodore did add a reset switch to the C-128, and the Amiga always supported 3-key reset.&lt;/p&gt;&#xA;&lt;p&gt;So what was Commodore thinking in providing a dedicated key for RESTORE while leaving out the reset functionality?&lt;/p&gt;&#xA;" OwnerUserId="4335" LastActivityDate="2021-05-28T21:47:21.633" Title="What's the deal with Commodore's RESTORE key?" Tags="&lt;commodore-64&gt;&lt;keyboards&gt;&lt;boot&gt;&lt;commodore-pet&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19972" PostTypeId="2" ParentId="19971" CreationDate="2021-05-28T00:07:08.180" Score="29" Body="&lt;h2&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;There is no fundamental difference just because a different interrupt is used. For all practical purpose the &lt;kbd&gt;Restore&lt;/kbd&gt;-key works like the Apple II's &lt;kbd&gt;Reset&lt;/kbd&gt;-key or the PC's &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;Alt&lt;/kbd&gt;-&lt;kbd&gt;Del&lt;/kbd&gt; key combination.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;In Detail&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Most early microcomputers provided either a dedicated key (e.g. Apple ][), keyboard combination (e.g. PC clones), or dedicated hardware button (countless examples) to &amp;quot;Reset&amp;quot; the computer&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Erm, sorry for nit-picking, but&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;the Apple II's &lt;kbd&gt;Reset&lt;/kbd&gt; key &lt;em&gt;is&lt;/em&gt; a dedicated reset button as it is direct connected to the CPU's reset line.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The PC's &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;Alt&lt;/kbd&gt;-&lt;kbd&gt;Del&lt;/kbd&gt; does not handle a dedicated CPU input like reset, but is a normal key press, detected by the BIOS keyboard handler &lt;em&gt;if that one is still active&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, on early Commodore computers (e.g. PET, VIC-20, C-64), there is no similar reset function. Instead, most machines had a weird key called RESTORE that is wired up to, of all things, the CPU's non-maskable interrupt line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Exactly. NMI is, like Reset, an interrupt of the CPU that can not be ignored. Perfect for the purpose of pulling a system from any unwanted state - except unlike Reset, NMI allows resuming operation if deemed useful. And that's what Commodore did, depending on NMI handling.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This resulted in many Commodore users either routinely power-cycling their machines to reset them, or hacking a hardware reset switch to make up for this shortcoming.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I wouldn't blame that on the key combination, but rather on software that hijacked the NMI handler to provide some kind of 'protection'.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Notably, Commodore did add a reset switch to the C-128,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To support factual usage. Much like IBM with &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;Alt&lt;/kbd&gt;-&lt;kbd&gt;Del&lt;/kbd&gt; - that was also not intended for use by customers. :))&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So what was Commodore thinking in providing a dedicated key for RESTORE while leaving out the reset functionality?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It provided exactly the same functionality as IBM or Apple did. A key (combination) that pulls the CPU from whatever it's doing, puts it under control of the KERNAL/BIOS/MONITOR to decide what to do next. In that aspect Commodore's way is not only the most clean, but also the most versatile one. Apple and IBM only left a choice of&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;warm start as default, or&lt;/li&gt;&#xA;&lt;li&gt;whatever a user program wants to do&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;For the IBM-PC&lt;/strong&gt; this means that when the keyboard interrupt handler detects the designated key-combination it calls the BIOS reset routine with a shortened sequence. This will of course only work as long as the default keyboard handler is invoked with a &lt;code&gt;INT 9h&lt;/code&gt;. As soon as some software installs their own, the machine will do whatever that software prefers - like opening the Windows login. :))&lt;/p&gt;&#xA;&lt;p&gt;If the handler is taken over by a program, then only a real hardware reset will help - that's why all my PCs always had one. Also, modern power supplies simply cut off and shut down whenever the power button is pressed long enough - an addition in hindsight to enable a PC to &amp;quot;reset&amp;quot; even with the vector hooked by unfriendly software. Sounds kinda like Commodore's addition of a reset button with the C128, doesn't it?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;On the Apple II&lt;/strong&gt; Woz repurposed the CPU reset - or enhanced it - to handle reset vs. BASIC restart. When Reset is pressed a RESET is issued:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the CPU fetches the RESET vector, pointing to&lt;/li&gt;&#xA;&lt;li&gt;the monitor reset routine to be invoked&lt;/li&gt;&#xA;&lt;li&gt;it does (like the PC) some initialization&lt;/li&gt;&#xA;&lt;li&gt;then checks if the warm-start vector in RAM at $03F2 is valid&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if no it performs a cold-start&lt;/li&gt;&#xA;&lt;li&gt;if yes, it jumps to wherever that vector points.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Ultimately whatever routine is hooked is executed - which of course again can be some user program. So not much different from the PC in the way that it can be hooked to suppress a warm boot/restart.&lt;/p&gt;&#xA;&lt;p&gt;If not hooked, it uses the BASIC warm start entry point.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;On the C64&lt;/strong&gt; it works like on the Apple. By pressing &lt;kbd&gt;RESTORE&lt;/kbd&gt; an NMI is issued, the CPU fetches the NMI ​vector and&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the CPU fetches the RESET vector, pointing to&#xA;​- the KERNAL NMI routine to be invoked&lt;/li&gt;&#xA;&lt;li&gt;It transfers control to the vector located at $0318&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if a user program hooked that vector, it does whatever this program wants&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;If not, it checks if it's a CIA-NMI&lt;/li&gt;&#xA;&lt;li&gt;If not, it checks if there is a ROM-module to be activated&lt;/li&gt;&#xA;&lt;li&gt;If not, it tests for the &lt;kbd&gt;RUN/STOP&lt;/kbd&gt; key was pressed&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if yes, BASIC warm start is executed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;If not, RS-232 functions are handled.&lt;/li&gt;&#xA;&lt;li&gt;It returns.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;All three&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;offer the ability to do a warm start when invoked,&lt;/li&gt;&#xA;&lt;li&gt;can be hooked by user programs&lt;/li&gt;&#xA;&lt;li&gt;let user programs disable standard workings&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Commodore's system offers in addition&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the ability to recover from unintended invocation&lt;/li&gt;&#xA;&lt;li&gt;is complete software controlled&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So Commodore offered the same services as IBM or Apple do, but in addition it handles additional devices and allows a quiet recovery if nothing is to be done. Especially the last point is of interest, because it inherently swallows accidentally pressing of that dangerous &lt;kbd&gt;Restore&lt;/kbd&gt;-key - in the Apple II there is no way to recover from an accidentally pressed &lt;kbd&gt;Reset&lt;/kbd&gt;-key. They had to add a hardware switch to make it a two key combination.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Long story short: Commodore's implementation is a good implementation and on par, with what IBM or Apple offered. All three do have the same issues when their vectors get mangled.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;P.S.: I guess it's obvious that I'm not even remotely a Commodore fanboi, and Woz' solution is for sure the most creative, using the least resources. Still, Commodore's middle of the road, schoolbook approach is to me the most favorable.&lt;/p&gt;&#xA;" OwnerUserId="6659" LastEditorUserId="6659" LastEditDate="2021-05-28T21:47:21.633" LastActivityDate="2021-05-28T21:47:21.633" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="19974" PostTypeId="1" CreationDate="2021-05-29T04:57:36.927" Score="14" ViewCount="718" Body="&lt;p&gt;This text is displayed on many NES cartridges:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This Game Pak cannot be used with the Mattel or NES versions of the Nintendo Entertainment System&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What is &amp;quot;the NES version&amp;quot; of the NES? Is it a very bizarre and unfortunate coincidence that &amp;quot;NES&amp;quot; happens to mean something other than &amp;quot;Nintendo Entertainment System&amp;quot;, but is confusingly used in the same sentence?&lt;/p&gt;&#xA;&lt;p&gt;I tried searching online first but while there are a few references to that string, it's not actually explained on any of the search results. Example:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;PAL carts, except English (UKV), always have a &amp;quot;B&amp;quot; written on the label and&#xA;includes the following text: This Game Pak cannot be used with the Mattel or&#xA;NES versions of the Nintendo Entertainment System(tm).&#xA;English (UKV) all have an &amp;quot;A&amp;quot; written on them.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Source: &lt;a href=&quot;http://www.neshq.com/lists/euneslist.txt&quot; rel=&quot;noreferrer&quot;&gt;http://www.neshq.com/lists/euneslist.txt&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What do they mean by &amp;quot;NES&amp;quot; if not &amp;quot;Nintendo Entertainment System&amp;quot;?&lt;/p&gt;&#xA;" OwnerUserId="21901" LastActivityDate="2021-05-29T10:54:29.103" Title="What is the &quot;NES version&quot; of the NES?" Tags="&lt;nes&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19975" PostTypeId="1" CreationDate="2021-05-29T06:21:42.723" Score="5" ViewCount="110" Body="&lt;p&gt;I've decompiled &lt;a href=&quot;https://github.com/besm6/pasauto-re&quot; rel=&quot;nofollow noreferrer&quot;&gt;yet another Pascal compiler for the BESM-6&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;While it does not implement the full language (for example, packed records and arrays are not implemented, helper routines &lt;code&gt;SEL&lt;/code&gt; and &lt;code&gt;INS&lt;/code&gt; are offered instead to manipulate parts of words), there is a feature which would have been a good addition to the standard, if Wirth had thought of it in time, namely using its range check feature not only as a &amp;quot;behind the scenes&amp;quot; mechanism, but as a user-accessible predicate.&lt;/p&gt;&#xA;&lt;p&gt;It is well known that although Pascal allowed to declare &amp;quot;set&amp;quot; types, e.g.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;b&gt;type&lt;/b&gt; bits = 0..31; bitset = &lt;b&gt;set&lt;/b&gt; &lt;b&gt;of&lt;/b&gt; bits;&lt;/pre&gt;&#xA;&lt;p&gt;the maximum capacity of such types was limited. The early implementations restricted a set type to a single word with whatever word size the host computer had. For example, CDC 6600 had 60, BESM-6 had 48.&lt;/p&gt;&#xA;&lt;p&gt;With set types of limited use, and the language having range subtypes as first-order constructs, one might ask, what would be a better way to succinctly write a check for a value being within an arbitrary range of a discrete type. Suppose, I have&lt;/p&gt;&#xA;&lt;pre&gt;&lt;b&gt;type&lt;/b&gt; range = 1000000..2000000;&lt;/pre&gt;&#xA;&lt;p&gt;and I want to check if an integer variable is within that range. The best solution the standard can offer is to write&lt;/p&gt;&#xA;&lt;pre&gt;&lt;b&gt;const&lt;/b&gt; rangeLow = 1000000; rangeHigh = 2000000;&#xA;&lt;b&gt;type&lt;/b&gt; range = rangeLow..rangeHigh;&#xA;&lt;b&gt;function&lt;/b&gt; isInRange(i:integer):boolean;&#xA;&lt;b&gt;begin&lt;/b&gt;&#xA;  isInRange := (rangeLow &amp;lt;= i) &lt;b&gt;and&lt;/b&gt; (i &amp;lt;= rangeHigh)&#xA;&lt;b&gt;end&lt;/b&gt;;&lt;/pre&gt;&#xA;&lt;p&gt;However, when one has&lt;/p&gt;&#xA;&lt;pre&gt;&lt;b&gt;var&lt;/b&gt; r:range;i:integer;&lt;/pre&gt;&#xA;&lt;p&gt;and writes &lt;code&gt;r := i;&lt;/code&gt;, the compiler inserts a range check which makes the program terminate if unsuccessful. There is no way to use that internal range-checking mechanism to a user's advantage.&lt;/p&gt;&#xA;&lt;p&gt;The solution implemented and employed in the BESM-6 Pascal compiler was:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;(*=P-,T-,M-*)&#xA;_PROGRAM MAIN;&#xA;_TYPE RANGE = 1000000..2000000;&#xA;_VAR I,R,S:INTEGER;&#xA;_BEGIN&#xA;  S := 0;&#xA;  R := 1;&#xA;  _FOR I := 1 _TO 1000000 _DO _BEGIN&#xA;    _IF R _IN RANGE _THEN S := S + 1;&#xA;    R := (R * 1001 + 1234567) _MOD 4294967296&#xA;  _END;&#xA;  WRITELN(S/1000000);&#xA;_END.&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It prints&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;     2.3100Е-04&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When the compiler encounters &lt;code&gt;EXPR &lt;b&gt;in&lt;/b&gt; TYPE&lt;/code&gt; in an &lt;code&gt;&lt;b&gt;if&lt;/b&gt;&lt;/code&gt; operator, it generates code as if EXPR was about to be assigned to a variable of type TYPE, pointing the &amp;quot;failure&amp;quot; target to the &lt;code&gt;&lt;b&gt;else&lt;/b&gt;&lt;/code&gt; clause (or beyond the &lt;code&gt;&lt;b&gt;then&lt;/b&gt;&lt;/code&gt; clause), as opposed to the PMD routine for the actual range checks.&lt;/p&gt;&#xA;&lt;p&gt;The range-checking code is then associated with TYPE and is reused if other instances of &lt;code&gt;EXPR &lt;b&gt;in&lt;/b&gt; TYPE&lt;/code&gt; are encountered.&lt;/p&gt;&#xA;&lt;p&gt;This looks more succinct and user-friendly than requiring the user to write the check explicitly, as above.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Has there been another Pascal compiler with such a feature?&lt;/strong&gt;&#xA;Or is it only in the USSR where they dared to extend the language in such a way?&lt;/p&gt;&#xA;" OwnerUserId="4025" LastEditorUserId="15334" LastEditDate="2021-05-29T09:23:14.960" LastActivityDate="2021-05-29T09:23:14.960" Title="Was there another dialect of Pascal with this range checking feature?" Tags="&lt;history&gt;&lt;pascal&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19976" PostTypeId="1" CreationDate="2021-05-29T06:30:16.870" Score="6" ViewCount="664" Body="&lt;p&gt;I do not understand line 80 of the short Applesoft BASIC program below.  Didn't even know it was possible to have a single instruction be &lt;code&gt;T=C/2=INT(C/2)&lt;/code&gt;.  Naturally, I tried breaking this line up / various dissections, all of which broke the program and didn't help me learn what this is really doing.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;10  S=4&#xA;20  HOME : GR&#xA;30  FOR C=0TO15 : COLOR=C&#xA;40  FOR X=0TO1&#xA;50  VLIN 0,39 AT X+S&#xA;60  NEXT X&#xA;70  HTAB S+1 : VTAB 21+T : PRINT C;&#xA;80  T=C/2=INT(C/2)&#xA;90  S=S+2&#xA;100 NEXT C&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Would appreciate learning from everyone's collective knowledge.  When I get back to my big computer, I will cite the Apple II, IIe 'graphics' book where I found this low-res colorbar BASIC program.&lt;/p&gt;&#xA;" OwnerUserId="21903" LastEditorUserId="15334" LastEditDate="2021-05-29T09:13:22.433" LastActivityDate="2021-05-29T16:29:45.343" Title="What does this line: `T=C/2=INT(C/2)` do? Why is it valid syntax?" Tags="&lt;basic&gt;&lt;applesoft-basic&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19978" PostTypeId="2" ParentId="19974" CreationDate="2021-05-29T06:59:03.370" Score="15" Body="&lt;p&gt;The 'NES Version' was the branding of the revision of the Nintendo Entertainment System for the UK release. The European (non-UK) version of the Nintendo Entertainment System, was &lt;em&gt;not&lt;/em&gt; a 'NES Version'. Since European countries would mostly be compatible with the UK PAL system's output, it exists mostly to distinguish regions for hardware region lockout (like how DVDs/Blu-ray regions are numbered).&lt;/p&gt;&#xA;&lt;p&gt;Notice how 'NES Version' appears on the UK Control Deck box, but not on the US one. If you search online you will find non-English Control Deck boxes which also lack the UK's 'NES Version' branding.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dZF4j.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dZF4j.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0wkCZ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0wkCZ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Image from &lt;a href=&quot;https://nintendo.fandom.com/wiki/List_of_Nintendo_Entertainment_System_packages&quot; rel=&quot;noreferrer&quot;&gt;Nintendo wiki&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Also, 'NES Version' Nintendo systems have 'NES Version' printed on the cartridge cover flap:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KhLUk.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KhLUk.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt; Image by The National Media Museum, Bradford.&lt;/p&gt;&#xA;&lt;p&gt;Other versions include: no version name (for US), 'Mattel Version' (compatible with 'NES Version'), 'Hong Kong Version' (seen on both grey boxy NESes and Family Computers), 'Korean Version', 'Asian Version', 'European Version', 'Spanish Version' and 'Italian Version'. Notice how the UK Control Deck box photo incorrectly shows a NES system &lt;em&gt;without&lt;/em&gt; 'NES Version' printed on its cover flap. :P&lt;/p&gt;&#xA;&lt;p&gt;The following explanation from the &lt;a href=&quot;https://contra.fandom.com/wiki/Nintendo_Entertainment_System&quot; rel=&quot;noreferrer&quot;&gt;Contra wiki&lt;/a&gt; lists several lockout regions including the US, the UK ('NES Version') and non-UK (not 'NES Version'):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The original NES (but not the top-loading NES-101) contained the 10NES lockout chip, which significantly increased the challenges faced by unlicensed developers. NES consoles sold in different regions had different lockout chips, so games marketed in one region would not work on consoles from another region. Known regions are: USA/Canada (3193 lockout chip), most of Europe (3195), Asia (3196) and UK, Italy and Australia (3197). Since two types of lockout chip were used in Europe, European NES game boxes often had an &amp;quot;A&amp;quot; or &amp;quot;B&amp;quot; letter on the front, indicating whether the game is compatible with UK/Italian/Australian consoles (A), or the rest of Europe (B). Rest-of-Europe games typically had text on the box stating &amp;quot;This game is not compatible with the Mattel or NES versions of the Nintendo Entertainment System&amp;quot;. Similarly, UK / Italy / Australia games stated &amp;quot;This game is only compatible with the Mattel or NES versions of the Nintendo Entertainment System&amp;quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://nerdlypleasures.blogspot.com/2014/10/nes-lists.html&quot; rel=&quot;noreferrer&quot;&gt;Nerdly Pleasures&lt;/a&gt; gives the following correspondence between lockout chip number and version.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;NES NTSC&#xA;CIC 3193 or 3193A or 6113 or 6113A or 6113B1&#xA;United States (USA)&#xA;Canada (CAN)&#xA;Brazil (unconfirmed)&lt;/p&gt;&#xA;&lt;p&gt;NES PAL-A &amp;quot;Mattel PAL Version&amp;quot; or &amp;quot;NES Version&amp;quot;&#xA;CIC 3197A&#xA;United Kingdom (UKV)&#xA;Italy (ITA)&#xA;Australia (AUS)&lt;/p&gt;&#xA;&lt;p&gt;NES PAL-B &amp;quot;European Version&amp;quot;&#xA;CIC 3195A&#xA;Scandavia (SCN)&#xA;Sweden (SWE)&#xA;Netherlands (HOL)&#xA;European Economic Community (EEC)&#xA;Spain (ESP)&#xA;Germany (NOE or FRG)&#xA;France (FRA)&lt;/p&gt;&#xA;&lt;p&gt;NES PAL &amp;quot;Hong Kong Version&amp;quot; and &amp;quot;Asian Version&amp;quot;&#xA;CIC 3196A&lt;/p&gt;&#xA;&lt;p&gt;NES NTSC &amp;quot;Comboy&amp;quot; or &amp;quot;Korean Version&amp;quot;&#xA;CIC 3195A&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As for what the letters 'NES' stand for, someone else may know. I don't have the original manuals, adverts or press releases to hand. My guess is that it's a meaningless acronym-word derived from 'Nintendo Entertainment System' just to quickly create an original distinct name, but it could be equally some other unknown random meaning like 'Nintendo European Sector' for example.&lt;/p&gt;&#xA;" OwnerUserId="19066" LastEditorUserId="19066" LastEditDate="2021-05-29T10:54:29.103" LastActivityDate="2021-05-29T10:54:29.103" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19979" PostTypeId="2" ParentId="19976" CreationDate="2021-05-29T07:56:07.660" Score="21" Body="&lt;p&gt;What this line does is check if the number &lt;code&gt;C&lt;/code&gt; is even, by dividing it by 2 and comparing the result to its floor, and stores the result of the check in the variable &lt;code&gt;T&lt;/code&gt;. The comparison operators can be used in expressions like all others; they simply return a non-zero value if the comparison is successful (1 in the Applesoft dialect, if &lt;a href=&quot;https://www.calormen.com/jsbasic/&quot; rel=&quot;noreferrer&quot;&gt;this emulator&lt;/a&gt; is to be believed), and 0 otherwise. The line can be re-written as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;T=0 : IF C/2=INT(C/2) THEN T=1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and it will remain functionally the same. Other BASIC dialects might use a different non-zero value to represent truth: Microsoft dialects (I tried C64 BASIC and QBasic) use −1, for example. The latter choice allowed logical operators to double as bitwise ones.&lt;/p&gt;&#xA;&lt;p&gt;As for how it is parsed: a BASIC program is a series of statements, and unlike for example C and its descendants, BASIC maintains a strict dichotomy between statements and expressions. A mere expression cannot be a statement on its own: it must be either assigned to a variable, used in a control-flow statement or passed as an argument to a subroutine or function (in dialects which support those). Conversely, variable assignments are statements and not expressions. Together, these constraints mean that there is never an ambiguity (at least formally) as to whether &lt;code&gt;=&lt;/code&gt; means assignment or comparison: if it appears in statement position, it means assignment, while in expression position it means comparison. This applies to all BASIC dialects (that I know of), not just the Applesoft one.&lt;/p&gt;&#xA;" OwnerUserId="15334" LastEditorUserId="15334" LastEditDate="2021-05-29T16:29:45.343" LastActivityDate="2021-05-29T16:29:45.343" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="19980" PostTypeId="1" CreationDate="2021-05-29T13:11:04.463" Score="3" ViewCount="67" Body="&lt;p&gt;My AmigaOS should have more Chip RAM available to use than it reports (only 800kB). Is there a way to find what is sitting in Chip RAM and how to move it to fast ram instead?&lt;/p&gt;&#xA;" OwnerUserId="13731" LastActivityDate="2021-05-29T13:11:04.463" Title="How to find what is using Chip RAM" Tags="&lt;amiga&gt;&lt;ram&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19981" PostTypeId="2" ParentId="19976" CreationDate="2021-05-29T13:17:56.287" Score="9" Body="&lt;p&gt;The line in question is &lt;code&gt;T=C/2=INT(C/2)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;The first '=' is a variable assignment.&lt;/p&gt;&#xA;&lt;p&gt;The second '=' is part of the expression and is an equality test.&lt;/p&gt;&#xA;&lt;p&gt;The expression returns a boolean result, which is stored in T. The expression means 'is it true that C/2 is equal to the integer result of C/2'. In other words, is C a multiple of 2.&lt;/p&gt;&#xA;&lt;p&gt;The values used for Boolean 'true' and 'false' vary between programming languages but are often the integer values 0 and 1. That's what T will hold.&lt;/p&gt;&#xA;&lt;p&gt;A trick I saw along the same lines in an early BASIC was the line &lt;code&gt;A=A=0&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This would toggle A between 0 and 1. If A was 0, then the Boolean test expression &lt;code&gt;A=0&lt;/code&gt; returned 1. If A was 1, then A=0 returns 0.&lt;/p&gt;&#xA;&lt;p&gt;This is a compact and space-saving form in machines tight for RAM. But these days, clarity is more important in the more generously RAM systems we're often using or embedding.&lt;/p&gt;&#xA;" OwnerUserId="5199" LastEditorUserId="5199" LastEditDate="2021-05-29T14:15:29.547" LastActivityDate="2021-05-29T14:15:29.547" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19982" PostTypeId="1" CreationDate="2021-05-29T22:04:24.127" Score="2" ViewCount="53" Body="&lt;p&gt;In the default &lt;code&gt;autoexec.bat&lt;/code&gt; for DOS 7, you see these lines:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;C:\DOS\SMARTDRV.EXE /X&#xA;@ECHO OFF&#xA;PROMPT $P$G&#xA;PATH C:\DOS&#xA;SET TEMP = C:\DOS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://www.computerhope.com/smartdrv.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this source&lt;/a&gt;, &lt;code&gt;/X&lt;/code&gt; disables write-behind caching. Write-behind caching is when the computer writes to the cache after a certain amount of time.&lt;/p&gt;&#xA;&lt;p&gt;Why is write-behind cache disabled in DOS by default?&lt;/p&gt;&#xA;" OwnerUserId="21353" OwnerDisplayName="Someone_who_likes_SE" LastActivityDate="2021-05-29T23:51:30.190" Title="Why did SMARTDRV have to be started with /x when DOS started?" Tags="&lt;cache&gt;&lt;ms-dos&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19983" PostTypeId="2" ParentId="19982" CreationDate="2021-05-29T23:19:52.740" Score="2" Body="&lt;p&gt;It's quite simple: write-behind caching means that after you have (for example) saved a file in a word processor, the saved file may live in the cache in RAM for a while before being written to the disk.  If the computer crashes during that time, or is just switched off without using some command that flushes the cache to disk, then the file will be lost, or will still exist in its previous version.  Worse still, if only some of the blocks of the file have been written, it will be a garbled mixture of the old and new versions.&lt;/p&gt;&#xA;&lt;p&gt;Without caching (or with write-behind disabled) you can be sure that any saved file will have actually made it to the disk in a short time, so that waiting for a couple of seconds, or waiting for the disk light to stop flashing, before switching off the machine would ensure that the work was properly saved.  With MS-DOS, it was normal to switch off the machine without any shutdown procedure.&lt;/p&gt;&#xA;&lt;p&gt;That makes it safer to disable write-behind caching as the default setting, so that the cache is used only to hold copies of blocks on the disk that have been recently read or written.  Even this use of a RAM cache is highly effective in speeding up average access times.&lt;/p&gt;&#xA;" OwnerUserId="6510" LastEditorUserId="6510" LastEditDate="2021-05-29T23:49:17.740" LastActivityDate="2021-05-29T23:49:17.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19984" PostTypeId="1" CreationDate="2021-05-29T23:24:13.733" Score="2" ViewCount="19" Body="&lt;p&gt;These days, most compilers and interpreters seem to provide the following in diagnostics:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A description of the problem&lt;/li&gt;&#xA;&lt;li&gt;The name of the source file&lt;/li&gt;&#xA;&lt;li&gt;A line number&lt;/li&gt;&#xA;&lt;li&gt;A relevant position within the line&lt;/li&gt;&#xA;&lt;li&gt;The text of the line&lt;/li&gt;&#xA;&lt;li&gt;An indication of where the relevant position is in the line's text&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In earlier systems, diagnostic printouts often consisted, from what I can tell, of a message&#xA;or error code and the text of an offending card or line. All that is really missing is the&#xA;precise indication of where on the card or line the problem was found.&lt;/p&gt;&#xA;&lt;p&gt;I was somewhat surprised to see that the Pascal P-series of compilers, as far back as&#xA;&lt;a href=&quot;http://www.moorecad.com/standardpascal/p2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;P2&lt;/a&gt; from 1974, provided almost everything&#xA;that modern systems do:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An error code&lt;/li&gt;&#xA;&lt;li&gt;A line number&lt;/li&gt;&#xA;&lt;li&gt;The text of the line (albeit as a side effect of listing the source code)&lt;/li&gt;&#xA;&lt;li&gt;An indication of where the relevant position is in the line's text&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;(See the routines &lt;a href=&quot;https://homepages.cwi.nl/%7Esteven/pascal/book/pcom.html#p338&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;error&lt;/code&gt;&lt;/a&gt;&#xA;and &lt;a href=&quot;https://homepages.cwi.nl/%7Esteven/pascal/book/pcom.html#p303&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;endofline&lt;/code&gt;&lt;/a&gt;. The file&#xA;name was implicit, since only one file was ever being compiled.)&lt;/p&gt;&#xA;&lt;p&gt;Did any systems predating P2 do this (or better, e.g. by indicating a range of&#xA;positions as in GCC and Clang)? LISP 1.5 seems to have been close, having a function &lt;code&gt;error1&lt;/code&gt;&#xA;that was designed for this exact purpose (printing a line of text along with a “cursor”),&#xA;although the interpreter never actually used it!&lt;/p&gt;&#xA;" OwnerUserId="19767" LastActivityDate="2021-05-30T02:21:57.903" Title="What was the first compiler/interpreter/assembler to indicate problematic columns in diagnostic messages?" Tags="&lt;history&gt;&lt;programming&gt;&lt;compilers&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19985" PostTypeId="2" ParentId="19982" CreationDate="2021-05-29T23:51:30.190" Score="1" Body="&lt;p&gt;There is no “shutdown” process/command in DOS. You just cut the power at the end of your work. That was fine when PCs were simple, your storage options was either One Floppy or Two Floppies, and DOS never touched the disks when waiting at the command prompt. Things like Write Behind Caches make things more complicated and human habits die hard.&lt;/p&gt;&#xA;&lt;p&gt;Write behind cache would lead to file corruption if you didn’t have the discipline to wait for the cache to flush before shutting down.(*)&lt;/p&gt;&#xA;&lt;p&gt;In fact, I’ve known people who didn’t even bother closing the program: they would just finish entering data in say Lotus 1-2-3, type the Save command, wait for the disk light to stop and BANG hit the power switch. No amount of complaining on my part made a dent. I even saw the same habit with Windows, especially Windows 3.1 and earlier.&lt;/p&gt;&#xA;&lt;p&gt;Now a bit of speculation: Microsoft must have added Write Behind cache to SmartDrive as ON by default in the original version. Once the complains came in about lost files and it became clear that Write Behind was too dangerous for the “uninitiated”, they must have felt they couldn’t change the default behavior without causing even more trouble, so they instead relied on Setup to add the /X parameter by default.&lt;/p&gt;&#xA;&lt;p&gt;(*) I don’t remember if hard drives at the time were all smart enough to protect the disks during all power shutdown scenarios, so you might even risk media damage. I know early hard drives came with a “Park” command you were supposed to run to move the head to a safe location before shutting down (and yes I also know people who ignored it anyway). But that didn’t last very long and auto-parking drives became standard pretty quickly, so I presume it wasn’t a significant risk. However I suppose it’s possible even some auto-parking drives could have caused damage to the platters if power failed during writes.&lt;/p&gt;&#xA;" OwnerUserId="4577" LastActivityDate="2021-05-29T23:51:30.190" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19986" PostTypeId="2" ParentId="19984" CreationDate="2021-05-30T01:38:31.207" Score="4" Body="&lt;p&gt;Printing a mere column number seems like a step backwards.   The Whetstone Algol compiler (1963, if memory serves) told you the line number and delimiter that were problematic, as well as (of course) an error code and the line in question.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FAIL 133&#xA;LINE   6    &#xA;DELIMITER _[ &#xA;IDENTIFIER writetex&#xA;BECAUSE OF LINE   2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Underlined bracket, shown as 2 separate characters on modern ASCII equipment but not on the contemporary Flexowriter, was a string quote in this Algol dialect.&lt;/p&gt;&#xA;&lt;p&gt;Error 133 means we ran off the end of the program text at line 6, in this case because of a missing closing string quote.  The opening string quote was on line 2, just after the identifier 'writetext' (this dialect considered only 8 characters to be significant).&lt;/p&gt;&#xA;&lt;p&gt;So, my answer to the question is another question - didn't they always do this?  (Depends on implementation, of course, and how much attention was paid to diagnosics. The Walgol guys were pretty keen on diagnosability).&lt;/p&gt;&#xA;&lt;p&gt;KDF9 was oriented to paper tape rather than cards, and paper tape people don't really think in terms of column numbers, so a raw column number wouldn't have really helped anyway.  On the other hand, converting &amp;quot;column N&amp;quot; to N-1 spaces and an up-arrow on the listing, underneath the listing of the offending line, is decidedly better.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Anecdotally, Westinghouse in 1957 received from IBM the very first FORTRAN compiler without any running instructions at all.  Nevertheless, they &lt;a href=&quot;http://www.softwarepreservation.org/projects/FORTRAN/paper/Bright-FORTRANComesToWestinghouseBettis-1971.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;figured how to run it&lt;/a&gt;, and fed it what they hoped was a valid FORTRAN they had written.&lt;/p&gt;&#xA;&lt;p&gt;The printer listed a line of source and then said something like STATEMENT 25, THE CLOSING PARENTHESIS IS NOT FOLLOWED BY A COMMA.&lt;/p&gt;&#xA;&lt;p&gt;That seems like it located the problem pretty well, supporting my argument for &amp;quot;always&amp;quot;, though not necessarily with specific column indications.&lt;/p&gt;&#xA;" OwnerUserId="10854" LastEditorUserId="10854" LastEditDate="2021-05-30T02:21:57.903" LastActivityDate="2021-05-30T02:21:57.903" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
</posts>